diff --git a/LICENSES/BSD-2-Clause.txt b/LICENSES/BSD-2-Clause.txt
new file mode 100644
index 0000000..b0e20f5
--- /dev/null
+++ b/LICENSES/BSD-2-Clause.txt
@@ -0,0 +1,9 @@
+Copyright (c) <year> <owner> All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/tools/chromiumos/LICENSE b/LICENSES/BSD-3-Clause.txt
similarity index 100%
rename from tools/chromiumos/LICENSE
rename to LICENSES/BSD-3-Clause.txt
diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt
new file mode 100644
index 0000000..0e259d4
--- /dev/null
+++ b/LICENSES/CC0-1.0.txt
@@ -0,0 +1,121 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+    LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+    INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+    REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+    PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+    THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+    HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+  i. the right to reproduce, adapt, distribute, perform, display,
+     communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+     likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+     subject to the limitations in paragraph 4(a), below;
+  v. rights protecting the extraction, dissemination, use and reuse of data
+     in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+     European Parliament and of the Council of 11 March 1996 on the legal
+     protection of databases, and under any national implementation
+     thereof, including any amended or successor version of such
+     directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+     world based on applicable law or treaty, and any national
+     implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+    surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+    warranties of any kind concerning the Work, express, implied,
+    statutory or otherwise, including without limitation warranties of
+    title, merchantability, fitness for a particular purpose, non
+    infringement, or the absence of latent or other defects, accuracy, or
+    the present or absence of errors, whether or not discoverable, all to
+    the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+    that may apply to the Work or any use thereof, including without
+    limitation any person's Copyright and Related Rights in the Work.
+    Further, Affirmer disclaims responsibility for obtaining any necessary
+    consents, permissions or other rights required for any use of the
+    Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+    party to this document and has no duty or obligation with respect to
+    this CC0 or use of the Work.
diff --git a/LICENSES/LGPL-2.0-or-later.txt b/LICENSES/LGPL-2.0-or-later.txt
new file mode 100644
index 0000000..eb3a4cd
--- /dev/null
+++ b/LICENSES/LGPL-2.0-or-later.txt
@@ -0,0 +1,174 @@
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1991 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
+
+This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license.
+
+The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library.
+
+Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+     a) The modified work must itself be a software library.
+
+     b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
+
+     c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
+
+     d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
+
+However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
+
+     a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
+
+     b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
+
+     c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
+
+     d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
+
+     a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
+
+     b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
+
+To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+     one line to give the library's name and an idea of what it does.
+     Copyright (C) year  name of author
+
+     This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+     This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public License for more details.
+
+     You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the library `Frob' (a library for tweaking knobs) written
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/LICENSES/Linux-syscall-note.txt b/LICENSES/Linux-syscall-note.txt
new file mode 100644
index 0000000..fcd0563
--- /dev/null
+++ b/LICENSES/Linux-syscall-note.txt
@@ -0,0 +1,12 @@
+   NOTE! This copyright does *not* cover user programs that use kernel
+ services by normal system calls - this is merely considered normal use
+ of the kernel, and does *not* fall under the heading of "derived work".
+ Also note that the GPL below is copyrighted by the Free Software
+ Foundation, but the instance of code that it refers to (the Linux
+ kernel) is copyrighted by me and others who actually wrote it.
+
+ Also note that the only valid version of the GPL as far as the kernel
+ is concerned is _this_ particular version of the license (ie v2, not
+ v2.2 or v3.x or whatever), unless explicitly otherwise stated.
+
+			Linus Torvalds
diff --git a/LICENSES/MIT-0.txt b/LICENSES/MIT-0.txt
new file mode 100644
index 0000000..396fc00
--- /dev/null
+++ b/LICENSES/MIT-0.txt
@@ -0,0 +1,7 @@
+MIT No Attribution
+
+Copyright <YEAR> <COPYRIGHT HOLDER>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt
new file mode 100644
index 0000000..2071b23
--- /dev/null
+++ b/LICENSES/MIT.txt
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) <year> <copyright holders>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/LICENSES/OFL-1.1.txt b/LICENSES/OFL-1.1.txt
new file mode 100644
index 0000000..33f3666
--- /dev/null
+++ b/LICENSES/OFL-1.1.txt
@@ -0,0 +1,97 @@
+Copyright (c) <dates>, <Copyright Holder> (<URL|email>),
+with Reserved Font Name <Reserved Font Name>.
+Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>),
+with Reserved Font Name <additional Reserved Font Name>.
+Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>).
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/LICENSES/README.md b/LICENSES/README.md
new file mode 100644
index 0000000..d235b31
--- /dev/null
+++ b/LICENSES/README.md
@@ -0,0 +1,68 @@
+# systemd Project Licensing
+
+## Main License
+
+The systemd project uses single-line references to Unique License Identifiers as
+defined by the Linux Foundation's SPDX project (https://spdx.org/). The line in
+each individual source file identifies the license applicable to that file.
+
+The current set of valid, predefined SPDX identifiers can be found on the SPDX
+License List at https://spdx.org/licenses/.
+
+The 'LICENSES/' directory contains all the licenses used by the sources included in
+the systemd project source tree.
+
+Unless otherwise noted, the systemd project sources are licensed under the terms
+and conditions of the **GNU Lesser General Public License v2.1 or later**.
+
+New sources that cannot be distributed under LGPL-2.1-or-later will no longer
+be accepted for inclusion in the systemd project to maintain license uniformity.
+
+## Other Licenses
+
+The following exceptions apply:
+
+ * some udev sources under src/udev/ are licensed under **GPL-2.0-or-later**, so the
+   udev binaries as a whole are also distributed under **GPL-2.0-or-later**.
+ * the header files contained in src/basic/linux/ and src/shared/linux/ are copied
+   verbatim from the Linux kernel source tree and are licensed under **GPL-2.0 WITH
+   Linux-syscall-note** and are used within the scope of the Linux-syscall-note
+   exception provisions
+ * the src/shared/initreq.h header is licensed under original license,
+   **LGPL-2.0-or-later**.
+ * the src/shared/linux/bpf_insn.h header is copied from the Linux kernel
+   source tree and is licensed under either **BSD-2-Clause** or **GPL-2.0-only**,
+   and thus is included in the systemd build under the BSD-2-Clause license.
+ * The src/basic/linux/wireguard.h header is copied from the Linux kernel
+   source tree and is licensed under either **MIT** or **GPL-2.0 WITH Linux-syscall-note**,
+   and thus is included in the systemd build under the MIT license.
+ * the following sources are licensed under the **MIT** license (in case of our
+   scripts, to facilitate copying and reuse of those helpers to other projects):
+   - hwdb.d/parse_hwdb.py
+   - src/basic/linux/batman_adv.h
+   - src/basic/sparse-endian.h
+   - tools/catalog-report.py
+ * the following sources are licensed under the **CC0-1.0** license:
+   - src/basic/siphash24.c
+   - src/basic/siphash24.h
+   - tools/check-includes.pl
+  * the following sources are licensed under the **MIT-0** license:
+   - all examples under man/
+   - src/systemctl/systemd-sysv-install.SKELETON
+   - config files and examples under /network
+ * the following sources are under **Public Domain** (LicenseRef-murmurhash2-public-domain):
+   - src/basic/MurmurHash2.c
+   - src/basic/MurmurHash2.h
+ * the following sources are under **Public Domain** (LicenseRef-lookup3-public-domain):
+   - src/libsystemd/sd-journal/lookup3.c
+   - src/libsystemd/sd-journal/lookup3.h
+ * the tools/chromiumos/gen_autosuspend_rules.py script is licensed under the
+   **BSD-3-Clause** license.
+ * Heebo fonts under docs/fonts/ are licensed under the **SIL Open Font License 1.1**,
+ * any files under test/ without an explicit license we assume non-copyrightable
+   (eg: computer-generated fuzzer data)
+
+## OpenSSL Notes
+
+Note that building the systemd project with OpenSSL does not affect the libsystemd.so
+shared library, which is not linked with the OpenSSL library.
diff --git a/LICENSES/lookup3-public-domain.txt b/LICENSES/lookup3-public-domain.txt
new file mode 100644
index 0000000..5eb8cd6
--- /dev/null
+++ b/LICENSES/lookup3-public-domain.txt
@@ -0,0 +1 @@
+lookup3.c, by Bob Jenkins, May 2006, Public Domain.
diff --git a/LICENSES/murmurhash2-public-domain.txt b/LICENSES/murmurhash2-public-domain.txt
new file mode 100644
index 0000000..c9b70e7
--- /dev/null
+++ b/LICENSES/murmurhash2-public-domain.txt
@@ -0,0 +1,2 @@
+MurmurHash2 was written by Austin Appleby, and is placed in the public
+domain. The author hereby disclaims copyright to this source code.
diff --git a/NEWS b/NEWS
index da5e6f8..768e7d1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,2730 @@
 systemd System and Service Manager
 
+CHANGES WITH 253:
+
+        Announcements of Future Feature Removals and Incompatible Changes:
+
+        * We intend to remove cgroup v1 support from systemd release after the
+          end of 2023. If you run services that make explicit use of cgroup v1
+          features (i.e. the "legacy hierarchy" with separate hierarchies for
+          each controller), please implement compatibility with cgroup v2 (i.e.
+          the "unified hierarchy") sooner rather than later. Most of Linux
+          userspace has been ported over already.
+
+        * We intend to remove support for split-usr (/usr mounted separately
+          during boot) and unmerged-usr (parallel directories /bin and
+          /usr/bin, /lib and /usr/lib, etc). This will happen in the second
+          half of 2023, in the first release that falls into that time window.
+          For more details, see:
+          https://lists.freedesktop.org/archives/systemd-devel/2022-September/048352.html
+
+        * We intend to change behaviour w.r.t. units of the per-user service
+          manager and sandboxing options, so that they work without having to
+          manually enable PrivateUsers= as well, which is not required for
+          system units. To make this work, we will implicitly enable user
+          namespaces (PrivateUsers=yes) when a sandboxing option is enabled in a
+          user unit. The drawback is that system users will no longer be visible
+          (and appear as 'nobody') to the user unit when a sandboxing option is
+          enabled. By definition a sandboxed user unit should run with reduced
+          privileges, so impact should be small. This will remove a great source
+          of confusion that has been reported by users over the years, due to
+          how these options require an extra setting to be manually enabled when
+          used in the per-user service manager, as opposed as to the system
+          service manager. We plan to enable this change in the next release
+          later this year. For more details, see:
+          https://lists.freedesktop.org/archives/systemd-devel/2022-December/048682.html
+
+        Deprecations and incompatible changes:
+
+        * systemctl will now warn when invoked without /proc/ mounted
+          (e.g. when invoked after chroot() into an directory tree without the
+          API mount points like /proc/ being set up.)  Operation in such an
+          environment is not fully supported.
+
+        * The return value of 'systemctl is-active|is-enabled|is-failed' for
+          unknown units is changed: previously 1 or 3 were returned, but now 4
+          (EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN) is used as documented.
+
+        * 'udevadm hwdb' subcommand is deprecated and will emit a warning.
+          systemd-hwdb (added in 2014) should be used instead.
+
+        * 'bootctl --json' now outputs a single JSON array, instead of a stream
+          of newline-separated JSON objects.
+
+        * Udev rules in 60-evdev.rules have been changed to load hwdb
+          properties for all modalias patterns. Previously only the first
+          matching pattern was used. This could change what properties are
+          assigned if the user has more and less specific patterns that could
+          match the same device, but it is expected that the change will have
+          no effect for most users.
+
+        * systemd-networkd-wait-online exits successfully when all interfaces
+          are ready or unmanaged. Previously, if neither '--any' nor
+          '--interface=' options were used, at least one interface had to be in
+          configured state. This change allows the case where systemd-networkd
+          is enabled, but no interfaces are configured, to be handled
+          gracefully. It may occur in particular when a different network
+          manager is also enabled and used.
+
+        * Some compatibility helpers were dropped: EmergencyAction= in the user
+          manager, as well as measuring kernel command line into PCR 8 in
+          systemd-stub, along with the -Defi-tpm-pcr-compat compile-time
+          option.
+
+        * The '-Dupdate-helper-user-timeout=' build-time option has been
+          renamed to '-Dupdate-helper-user-timeout-sec=', and now takes an
+          integer as parameter instead of a string.
+
+        * The DDI image dissection logic (which backs RootImage= in service
+          unit files, the --image= switch in various tools such as
+          systemd-nspawn, as well as systemd-dissect) will now only mount file
+          systems of types btrfs, ext4, xfs, erofs, squashfs, vfat. This list
+          can be overridden via the $SYSTEMD_DISSECT_FILE_SYSTEMS environment
+          variable. These file systems are fairly well supported and maintained
+          in current kernels, while others are usually more niche, exotic or
+          legacy and thus typically do not receive the same level of security
+          support and fixes.
+
+        * The default per-link multicast DNS mode is changed to "yes"
+          (that was previously "no"). As the default global multicast DNS mode
+          has been "yes" (but can be changed by the build option), now the
+          multicast DNS is enabled on all links by default. You can disable the
+          multicast DNS on all links by setting MulticastDNS= in resolved.conf,
+          or on an interface by calling "resolvectl mdns INTERFACE no".
+
+        New components:
+
+        * A tool 'ukify' tool to build, measure, and sign Unified Kernel Images
+          (UKIs) has been added. This replaces functionality provided by
+          'dracut --uefi' and extends it with automatic calculation of PE file
+          offsets, insertion of signed PCR policies generated by
+          systemd-measure, support for initrd concatenation, signing of the
+          embedded Linux image and the combined image with sbsign, and
+          heuristics to autodetect the kernel uname and verify the splash
+          image.
+
+        Changes in systemd and units:
+
+        * A new service type Type=notify-reload is defined. When such a unit is
+          reloaded a UNIX process signal (typically SIGHUP) is sent to the main
+          service process. The manager will then wait until it receives a
+          "RELOADING=1" followed by a "READY=1" notification from the unit as
+          response (via sd_notify()). Otherwise, this type is the same as
+          Type=notify. A new setting ReloadSignal= may be used to change the
+          signal to send from the default of SIGHUP.
+
+          user@.service, systemd-networkd.service, systemd-udevd.service, and
+          systemd-logind have been updated to this type.
+
+        * Initrd environments which are not on a pure memory file system (e.g.
+          overlayfs combination as opposed to tmpfs) are now supported. With
+          this change, during the initrd → host transition ("switch root")
+          systemd will erase all files of the initrd only when the initrd is
+          backed by a memory file system such as tmpfs.
+
+        * New per-unit MemoryZSwapMax= option has been added to configure
+          memory.zswap.max cgroup properties (the maximum amount of zswap
+          used).
+
+        * A new LogFilterPatterns= option has been added for units. It may be
+          used to specify accept/deny regular expressions for log messages
+          generated by the unit, that shall be enforced by systemd-journald.
+          Rejected messages are neither stored in the journal nor forwarded.
+          This option may be used to suppress noisy or uninteresting messages
+          from units.
+
+        * The manager has a new
+          org.freedesktop.systemd1.Manager.GetUnitByPIDFD() D-Bus method to
+          query process ownership via a PIDFD, which is more resilient against
+          PID recycling issues.
+
+        * Scope units now support OOMPolicy=. Login session scopes default to
+          OOMPolicy=continue, allowing login scopes to survive the OOM killer
+          terminating some processes in the scope.
+
+        * systemd-fstab-generator now supports x-systemd.makefs option for
+          /sysroot/ (in the initrd).
+
+        * The maximum rate at which daemon reloads are executed can now be
+          limited with the new ReloadLimitIntervalSec=/ReloadLimitBurst=
+          options. (Or the equivalent on the kernel command line:
+          systemd.reload_limit_interval_sec=/systemd.reload_limit_burst=). In
+          addition, systemd now logs the originating unit and PID when a reload
+          request is received over D-Bus.
+
+        * When enabling a swap device systemd will now reinitialize the device
+          when the page size of the swap space does not match the page size of
+          the running kernel. Note that this requires the 'swapon' utility to
+          provide the '--fixpgsz' option, as implemented by util-linux, and it
+          is not supported by busybox at the time of writing.
+
+        * systemd now executes generator programs in a mount namespace
+          "sandbox" with most of the file system read-only and write access
+          restricted to the output directories, and with a temporary /tmp/
+          mount provided. This provides a safeguard against programming errors
+          in the generators, but also fixes here-docs in shells, which
+          previously didn't work in early boot when /tmp/ wasn't available
+          yet. (This feature has no security implications, because the code is
+          still privileged and can trivially exit the sandbox.)
+
+        * The system manager will now parse a new "vmm.notify_socket"
+          system credential, which may be supplied to a VM via SMBIOS. If
+          found, the manager will send a "READY=1" notification on the
+          specified socket after boot is complete. This allows readiness
+          notification to be sent from a VM guest to the VM host over a VSOCK
+          socket.
+
+        * The sample PAM configuration file for systemd-user@.service now
+          includes a call to pam_namespace. This puts children of user@.service
+          in the expected namespace. (Many distributions replace their file
+          with something custom, so this change has limited effect.)
+
+        * A new environment variable $SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST
+          can be used to override the mount units burst late limit for
+          parsing '/proc/self/mountinfo', which was introduced in v249.
+          Defaults to 5.
+
+        * Drop-ins for init.scope changing control group resource limits are
+          now applied, while they were previously ignored.
+
+        * New build-time configuration options '-Ddefault-timeout-sec=' and
+          '-Ddefault-user-timeout-sec=' have been added, to let distributions
+          choose the default timeout for starting/stopping/aborting system and
+          user units respectively.
+
+        * Service units gained a new setting OpenFile= which may be used to
+          open arbitrary files in the file system (or connect to arbitrary
+          AF_UNIX sockets in the file system), and pass the open file
+          descriptor to the invoked process via the usual file descriptor
+          passing protocol. This is useful to give unprivileged services access
+          to select files which have restrictive access modes that would
+          normally not allow this. It's also useful in case RootDirectory= or
+          RootImage= is used to allow access to files from the host environment
+          (which is after all not visible from the service if these two options
+          are used.)
+
+        Changes in udev:
+
+        * The new net naming scheme "v253" has been introduced. In the new
+          scheme, ID_NET_NAME_PATH is also set for USB devices not connected via
+          a PCI bus. This extends the coverage of predictable interface names
+          in some embedded systems.
+
+          The "amba" bus path is now included in ID_NET_NAME_PATH, resulting in
+          a more informative path on some embedded systems.
+
+        * Partition block devices will now also get symlinks in
+          /dev/disk/by-diskseq/<seq>-part<n>, which may be used to reference
+          block device nodes via the kernel's "diskseq" value. Previously those
+          symlinks were only created for the main block device.
+
+        * A new operator '-=' is supported for SYMLINK variables. This allows
+          symlinks to be unconfigured even if an earlier rule added them.
+
+        * 'udevadm --trigger --settle' now also works for network devices
+          that are being renamed.
+
+        Changes in sd-boot, bootctl, and the Boot Loader Specification:
+
+        * systemd-boot now passes its random seed directly to the kernel's RNG
+          via the LINUX_EFI_RANDOM_SEED_TABLE_GUID configuration table, which
+          means the RNG gets seeded very early in boot before userspace has
+          started.
+
+        * systemd-boot will pass a disk-backed random seed – even when secure
+          boot is enabled – if it can additionally get a random seed from EFI
+          itself (via EFI's RNG protocol), or a prior seed in
+          LINUX_EFI_RANDOM_SEED_TABLE_GUID from a preceding bootloader.
+
+        * systemd-boot-system-token.service was renamed to
+          systemd-boot-random-seed.service and extended to always save a random
+          seed to ESP on every boot when a compatible boot loader is used. This
+          allows a refreshed random seed to be used in the boot loader.
+
+        * systemd-boot handles various seed inputs using a domain- and
+          field-separated hashing scheme.
+
+        * systemd-boot's 'random-seed-mode' option has been removed. A system
+          token is now always required to be present for random seeds to be
+          used.
+
+        * systemd-boot now supports being loaded from other locations than the
+          ESP, for example for direct kernel boot under QEMU or when embedded
+          into the firmware.
+
+        * systemd-boot now parses SMBIOS information to detect
+          virtualization. This information is used to skip some warnings which
+          are not useful in a VM and to conditionalize other aspects of
+          behaviour.
+
+        * systemd-boot now supports a new 'if-safe' mode that will perform UEFI
+          Secure Boot automated certificate enrollment from the ESP only if it
+          is considered 'safe' to do so. At the moment 'safe' means running in
+          a virtual machine.
+
+        * systemd-stub now processes random seeds in the same way as
+          systemd-boot already does, in case a unified kernel image is being
+          used from a different bootloader than systemd-boot, or without any
+          boot load at all.
+
+        * bootctl will now generate a system token on all EFI systems, even
+          virtualized ones, and is activated in the case that the system token
+          is missing from either sd-boot and sd-stub booted systems.
+
+        * bootctl now implements two new verbs: 'kernel-identify' prints the
+          type of a kernel image file, and 'kernel-inspect' provides
+          information about the embedded command line and kernel version of
+          UKIs.
+
+        * bootctl now honours $KERNEL_INSTALL_CONF_ROOT with the same meaning
+          as for kernel-install.
+
+        * The JSON output of "bootctl list" will now contain two more fields:
+          isDefault and isSelected are boolean fields set to true on the
+          default and currently booted boot menu entries.
+
+        * bootctl gained a new verb "unlink" for removing a boot loader entry
+          type #1 file from disk in a safe and robust way.
+
+        * bootctl also gained a new verb "cleanup" that automatically removes
+          all files from the ESP's and XBOOTLDR's "entry-token" directory, that
+          is not referenced anymore by any installed Type #1 boot loader
+          specification entry. This is particularly useful in environments where
+          a large number of entries reference the same or partly the same
+          resources (for example, for snapshot-based setups).
+
+        Changes in kernel-install:
+
+        * A new "installation layout" can be configured as layout=uki. With
+          this setting, a Boot Loader Specification Type#1 entry will not be
+          created.  Instead, a new kernel-install plugin 90-uki-copy.install
+          will copy any .efi files from the staging area into the boot
+          partition. A plugin to generate the UKI .efi file must be provided
+          separately.
+
+        Changes in systemctl:
+
+        * 'systemctl reboot' has dropped support for accepting a positional
+          argument as the argument to the reboot(2) syscall. Please use the
+          --reboot-argument= option instead.
+
+        * 'systemctl disable' will now warn when called on units without
+          install information. A new --no-warn option has been added that
+          silences this warning.
+
+        * New option '--drop-in=' can be used to tell 'systemctl edit' the name
+          of the drop-in to edit. (Previously, 'override.conf' was always
+          used.)
+
+        * 'systemctl list-dependencies' now respects --type= and --state=.
+
+        * 'systemctl kexec' now supports XEN VMM environments.
+
+        * 'systemctl edit' will now tell the invoked editor to jump into the
+          first line with actual unit file data, skipping over synthesized
+          comments.
+
+        Changes in systemd-networkd and related tools:
+
+        * The [DHCPv4] section in .network file gained new SocketPriority=
+          setting that assigns the Linux socket priority used by the DHCPv4 raw
+          socket. This may be used in conjunction with the
+          EgressQOSMaps=setting in [VLAN] section of .netdev file to send the
+          desired ethernet 802.1Q frame priority for DHCPv4 initial
+          packets. This cannot be achieved with netfilter mangle tables because
+          of the raw socket bypass.
+
+        * The [DHCPv4] and [IPv6AcceptRA] sections in .network file gained a
+          new QuickAck= boolean setting that enables the TCP quick ACK mode for
+          the routes configured by the acquired DHCPv4 lease or received router
+          advertisements (RAs).
+
+        * The RouteMetric= option (for DHCPv4, DHCPv6, and IPv6 advertised
+          routes) now accepts three values, for high, medium, and low preference
+          of the router (which can be set with the RouterPreference=) setting.
+
+        * systemd-networkd-wait-online now supports matching via alternative
+          interface names.
+
+        * The [DHCPv6] section in .network file gained new SendRelease=
+          setting which enables the DHCPv6 client to send release when
+          it stops. This is the analog of the [DHCPv4] SendRelease= setting.
+          It is enabled by default.
+
+        * If the Address= setting in [Network] or [Address] sections in .network
+          specified without its prefix length, then now systemd-networkd assumes
+          /32 for IPv4 or /128 for IPv6 addresses.
+
+        * networkctl shows network and link file dropins in status output.
+
+        Changes in systemd-dissect:
+
+        * systemd-dissect gained a new option --list, to print the paths of
+          all files and directories in a DDI.
+
+        * systemd-dissect gained a new option --mtree, to generate a file
+          manifest compatible with BSD mtree(5) of a DDI
+
+        * systemd-dissect gained a new option --with, to execute a command with
+          the specified DDI temporarily mounted and used as working
+          directory. This is for example useful to convert a DDI to "tar"
+          simply by running it within a "systemd-dissect --with" invocation.
+
+        * systemd-dissect gained a new option --discover, to search for
+          Discoverable Disk Images (DDIs) in well-known directories of the
+          system. This will list machine, portable service and system extension
+          disk images.
+
+        * systemd-dissect now understands 2nd stage initrd images stored as a
+          Discoverable Disk Image (DDI).
+
+        * systemd-dissect will now display the main UUID of GPT DDIs (i.e. the
+          disk UUID stored in the GPT header) among the other data it can show.
+
+        * systemd-dissect gained a new --in-memory switch to operate on an
+          in-memory copy of the specified DDI file. This is useful to access a
+          DDI with write access without persisting any changes. It's also
+          useful for accessing a DDI without keeping the originating file
+          system busy.
+
+        * The DDI dissection logic will now automatically detect the intended
+          sector size of disk images stored in files, based on the GPT
+          partition table arrangement. Loopback block devices for such DDIs
+          will then be configured automatically for the right sector size. This
+          is useful to make dealing with modern 4K sector size DDIs fully
+          automatic. The systemd-dissect tool will now show the detected sector
+          size among the other DDI information in its output.
+
+        Changes in systemd-repart:
+
+        * systemd-repart gained new options --include-partitions= and
+          --exclude-partitions= to filter operation on partitions by type UUID.
+          This allows systemd-repart to be used to build images in which the
+          type of one partition is set based on the contents of another
+          partition (for example when the boot partition shall include a verity
+          hash of the root partition).
+
+        * systemd-repart also gained a --defer-partitions= option that is
+          similar to --exclude-partitions=, but the size of the partition is
+          still taken into account when sizing partitions, but without
+          populating it.
+
+        * systemd-repart gained a new --sector-size= option to specify what
+          sector size should be used when an image is created.
+
+        * systemd-repart now supports generating erofs file systems via
+          CopyFiles= (a read-only file system similar to squashfs).
+
+        * The Minimize= option was extended to accept "best" (which means the
+          most minimal image possible, but may require multiple attempts) and
+          "guess" (which means a reasonably small image).
+
+        * The systemd-growfs binary now comes with a regular unit file template
+          systemd-growfs@.service which can be instantiated directly for any
+          desired file system. (Previously, the unit was generated dynamically
+          by various generators, but no regular unit file template was
+          available.)
+
+        Changes in journal tools:
+
+        * Various systemd tools will append extra fields to log messages when
+          in debug mode, or when SYSTEMD_ENABLE_LOG_CONTEXT=1 is set. Currently
+          this includes information about D-Bus messages when sd-bus is used,
+          e.g. DBUS_SENDER=, DBUS_DESTINATION=, and DBUS_PATH=, and information
+          about devices when sd-device is used, e.g. DEVNAME= and DRIVER=.
+          Details of what is logged and when are subject to change.
+
+        * The systemd-journald-audit.socket can now be disabled via the usual
+          "systemctl disable" mechanism to stop collection of audit
+          messages. Please note that it is not enabled statically anymore and
+          must be handled by the preset/enablement logic in package
+          installation scripts.
+
+        * New options MaxUse=, KeepFree=, MaxFileSize=, and MaxFiles= can
+          be used to curtail disk use by systemd-journal-remote. This is
+          similar to the options supported by systemd-journald.
+
+        Changes in systemd-cryptenroll, systemd-cryptsetup, and related
+        components:
+
+        * When enrolling new keys systemd-cryptenroll now supports unlocking
+          via FIDO2 tokens (option --unlock-fido2-device=). Previously, a
+          password was strictly required to be specified.
+
+        * systemd-cryptsetup now supports pre-flight requests for FIDO2 tokens
+          (except for tokens with user verification, UV) to identify tokens
+          before authentication. Multiple FIDO2 tokens can now be enrolled at
+          the same time, and systemd-cryptsetup will automatically select one
+          that corresponds to one of the available LUKS key slots.
+
+        * systemd-cryptsetup now supports new options tpm2-measure-bank= and
+          tpm2-measure-pcr= in crypttab(5). These allow specifying the TPM2 PCR
+          bank and number into which the volume key should be measured. This is
+          automatically enabled for the encrypted root volume discovered and
+          activated by systemd-gpt-auto-generator.
+
+        * systemd-gpt-auto-generator mounts the ESP and XBOOTLDR partitions with
+          "noexec,nosuid,nodev".
+
+        * systemd-gpt-auto-generator will now honour the rootfstype= and
+          rootflags= kernel command line switches for root file systems it
+          discovers, to match behaviour in case an explicit root fs is
+          specified via root=.
+
+        * systemd-pcrphase gained new options --machine-id and --file-system=
+          to measure the machine-id and mount point information into PCR 15. New
+          service unit files systemd-pcrmachine.service and
+          systemd-pcrfs@.service have been added that invoke the tool with
+          these switches during early boot.
+
+        * systemd-pcrphase gained a --graceful switch will make it exit cleanly
+          with a success exit code even if no TPM device is detected.
+
+        * systemd-cryptenroll now stores the user-supplied PIN with a salt,
+          making it harder to brute-force.
+
+        Changes in other tools:
+
+        * systemd-homed gained support for luksPbkdfForceIterations (the
+          intended number of iterations for the PBKDF operation on LUKS).
+
+        * Environment variables $SYSTEMD_HOME_MKFS_OPTIONS_BTRFS,
+          $SYSTEMD_HOME_MKFS_OPTIONS_EXT4, and $SYSTEMD_HOME_MKFS_OPTIONS_XFS
+          may now be used to specify additional arguments for mkfs when
+          systemd-homed formats a file system.
+
+        * systemd-hostnamed now exports the contents of
+          /sys/class/dmi/id/bios_vendor and /sys/class/dmi/id/bios_date via two
+          new D-Bus properties: FirmwareVendor and FirmwareDate. This allows
+          unprivileged code to access those values.
+
+          systemd-hostnamed also exports the SUPPORT_END= field from
+          os-release(5) as OperatingSystemSupportEnd. hostnamectl make uses of
+          this to show the status of the installed system.
+
+        * systemd-measure gained an --append= option to sign multiple phase
+          paths with different signing keys. This allows secrets to be
+          accessible only in certain parts of the boot sequence. Note that
+          'ukify' provides similar functionality in a more accessible form.
+
+        * systemd-timesyncd will now write a structured log message with
+          MESSAGE_ID set to SD_MESSAGE_TIME_BUMP when it bumps the clock based
+          on a on-disk timestamp, similarly to what it did when reaching
+          synchronization via NTP.
+
+        * systemd-timesyncd will now update the on-disk timestamp file on each
+          boot at least once, making it more likely that the system time
+          increases in subsequent boots.
+
+        * systemd-vconsole-setup gained support for system/service credentials:
+          vconsole.keymap/vconsole.keymap_toggle and
+          vconsole.font/vconsole.font_map/vconsole.font_unimap are analogous
+          the similarly-named options in vconsole.conf.
+
+        * systemd-localed will now save the XKB keyboard configuration to
+          /etc/vconsole.conf, and also read it from there with a higher
+          preference than the /etc/X11/xorg.conf.d/00-keyboard.conf config
+          file. Previously, this information was stored in the former file in
+          converted form, and only in latter file in the original form. Tools
+          which want to access keyboard configuration can now do so from a
+          standard location.
+
+        * systemd-resolved gained support for configuring the nameservers and
+          search domains via kernel command line (nameserver=, domain=) and
+          credentials (network.dns, network.search_domains).
+
+        * systemd-resolved will now synthesize host names for the DNS stub
+          addresses it supports. Specifically when "_localdnsstub" is resolved,
+          127.0.0.53 is returned, and if "_localdnsproxy" is resolved
+          127.0.0.54 is returned.
+
+        * systemd-notify will now send a "RELOADING=1" notification when called
+          with --reloading, and "STOPPING=1" when called with --stopping. This
+          can be used to implement notifications from units where it's easier
+          to call a program than to use the sd-daemon library.
+
+        * systemd-analyze's 'plot' command can now output its information in
+          JSON, controlled via the --json= switch. Also, new --table, and
+          --no-legend options have been added.
+
+        * 'machinectl enable' will now automatically enable machines.target
+          unit in addition to adding the machine unit to the target.
+
+          Similarly, 'machinectl start|stop' gained a --now option to enable or
+          disable the machine unit when starting or stopping it.
+
+        * systemd-sysusers will now create /etc/ if it is missing.
+
+        * systemd-sleep 'HibernateDelaySec=' setting is changed back to
+          pre-v252's behaviour, and a new 'SuspendEstimationSec=' setting is
+          added to provide the new initial value for the new automated battery
+          estimation functionality. If 'HibernateDelaySec=' is set to any value,
+          the automated estimate (and thus the automated hibernation on low
+          battery to avoid data loss) functionality will be disabled.
+
+        * Default tmpfiles.d/ configuration will now automatically create
+          credentials storage directory '/etc/credstore/' with the appropriate,
+          secure permissions. If '/run/credstore/' exists, its permissions will
+          be fixed too in case they are not correct.
+
+        Changes in libsystemd and shared code:
+
+        * sd-bus gained new convenience functions sd_bus_emit_signal_to(),
+          sd_bus_emit_signal_tov(), and sd_bus_message_new_signal_to().
+
+        * sd-id128 functions now return -EUCLEAN (instead of -EIO) when the
+          128bit ID in files such as /etc/machine-id has an invalid
+          format. They also accept NULL as output parameter in more places,
+          which is useful when the caller only wants to validate the inputs and
+          does not need the output value.
+
+        * sd-login gained new functions sd_pidfd_get_session(),
+          sd_pidfd_get_owner_uid(), sd_pidfd_get_unit(),
+          sd_pidfd_get_user_unit(), sd_pidfd_get_slice(),
+          sd_pidfd_get_user_slice(), sd_pidfd_get_machine_name(), and
+          sd_pidfd_get_cgroup(), that are analogous to sd_pid_get_*(),
+          but accept a PIDFD instead of a PID.
+
+        * sd-path (and systemd-path) now export four new paths:
+          SD_PATH_SYSTEMD_SYSTEM_ENVIRONMENT_GENERATOR,
+          SD_PATH_SYSTEMD_USER_ENVIRONMENT_GENERATOR,
+          SD_PATH_SYSTEMD_SEARCH_SYSTEM_ENVIRONMENT_GENERATOR, and
+          SD_PATH_SYSTEMD_SEARCH_USER_ENVIRONMENT_GENERATOR,
+
+        * sd_notify() now supports AF_VSOCK as transport for notification
+          messages (in addition to the existing AF_UNIX support). This is
+          enabled if $NOTIFY_SOCKET is set in a "vsock:CID:port" format.
+
+        * Detection of chroot() environments now works if /proc/ is not
+          mounted.  This affects systemd-detect-virt --chroot, but also means
+          that systemd tools will silently skip various operations in such an
+          environment.
+
+        * "Lockheed Martin Hardened Security for Intel Processors" (HS SRE)
+          virtualization is now detected.
+
+        Changes in the build system:
+
+        * Standalone variants of systemd-repart and systemd-shutdown may now be
+          built (if -Dstandalone=true).
+
+        * systemd-ac-power has been moved from /usr/lib/ to /usr/bin/, to, for
+          example, allow scripts to conditionalize execution on AC power
+          supply.
+
+        * The libp11kit library is now loaded through dlopen(3).
+
+        Changes in the documentation:
+
+        * Specifications that are not closely tied to systemd have moved to
+          https://uapi-group.org/specifications/: the Boot Loader Specification
+          and the Discoverable Partitions Specification.
+
+        Contributions from: 김인수, 13r0ck, Aidan Dang, Alberto Planas,
+        Alvin Šipraga, Andika Triwidada, AndyChi, angus-p, Anita Zhang,
+        Antonio Alvarez Feijoo, Arsen Arsenović, asavah, Benjamin Fogle,
+        Benjamin Tissoires, berenddeschouwer, BerndAdameit,
+        Bernd Steinhauser, blutch112, cake03, Callum Farmer, Carlo Teubner,
+        Charles Hardin, chris, Christian Brauner, Christian Göttsche,
+        Cristian Rodríguez, Daan De Meyer, Dan Streetman, DaPigGuy,
+        Darrell Kavanagh, David Tardon, dependabot[bot], Dirk Su,
+        Dmitry V. Levin, drosdeck, Edson Juliano Drosdeck, edupont,
+        Eric DeVolder, Erik Moqvist, Evgeny Vereshchagin, Fabian Gurtner,
+        Felix Riemann, Franck Bui, Frantisek Sumsal, Geert Lorang,
+        Gerd Hoffmann, Gio, Hannoskaj, Hans de Goede, Hugo Carvalho,
+        igo95862, Ilya Leoshkevich, Ivan Shapovalov, Jacek Migacz,
+        Jade Lovelace, Jan Engelhardt, Jan Janssen, Jan Macku, January,
+        Jason A. Donenfeld, jcg, Jean-Tiare Le Bigot, Jelle van der Waa,
+        Jeremy Linton, Jian Zhang, Jiayi Chen, Jia Zhang, Joerg Behrmann,
+        Jörg Thalheim, Joshua Goins, joshuazivkovic, Joshua Zivkovic,
+        Kai-Chuan Hsieh, Khem Raj, Koba Ko, Lennart Poettering, lichao,
+        Li kunyu, Luca Boccassi, Luca BRUNO, Ludwig Nussel,
+        Łukasz Stelmach, Lycowolf, marcel151, Marcus Schäfer, Marek Vasut,
+        Mark Laws, Michael Biebl, Michał Kotyla, Michal Koutný,
+        Michal Sekletár, Mike Gilbert, Mike Yuan, MkfsSion, ml,
+        msizanoen1, mvzlb, MVZ Ludwigsburg, Neil Moore, Nick Rosbrook,
+        noodlejetski, Pasha Vorobyev, Peter Cai, p-fpv, Phaedrus Leeds,
+        Philipp Jungkamp, Quentin Deslandes, Raul Tambre, Ray Strode,
+        reuben olinsky, Richard E. van der Luit, Richard Phibel,
+        Ricky Tigg, Robin Humble, rogg, Rudi Heitbaum, Sam James,
+        Samuel Cabrero, Samuel Thibault, Siddhesh Poyarekar, Simon Brand,
+        Space Meyer, Spindle Security, Steve Ramage, Takashi Sakamoto,
+        Thomas Haller, Tonći Galić, Topi Miettinen, Torsten Hilbrich,
+        Tuetuopay, uerdogan, Ulrich Ölmann, Valentin David,
+        Vitaly Kuznetsov, Vito Caputo, Waltibaba, Will Fancher,
+        William Roberts, wouter bolsterlee, Youfu Zhang, Yu Watanabe,
+        Zbigniew Jędrzejewski-Szmek, Дамјан Георгиевски,
+        наб
+
+        — Warsaw, 2023-02-15
+
+CHANGES WITH 252 🎃:
+
+        Announcements of Future Feature Removals:
+
+        * We intend to remove cgroup v1 support from systemd release after the
+          end of 2023. If you run services that make explicit use of cgroup v1
+          features (i.e. the "legacy hierarchy" with separate hierarchies for
+          each controller), please implement compatibility with cgroup v2 (i.e.
+          the "unified hierarchy") sooner rather than later. Most of Linux
+          userspace has been ported over already.
+
+        * We intend to remove support for split-usr (/usr mounted separately
+          during boot) and unmerged-usr (parallel directories /bin and
+          /usr/bin, /lib and /usr/lib, etc). This will happen in the second
+          half of 2023, in the first release that falls into that time window.
+          For more details, see:
+          https://lists.freedesktop.org/archives/systemd-devel/2022-September/048352.html
+
+        Compatibility Breaks:
+
+        * ConditionKernelVersion= checks that use the '=' or '!=' operators
+          will now do simple string comparisons (instead of version comparisons
+          à la stverscmp()). Version comparisons are still done for the
+          ordering operators '<', '>', '<=', '>='. Moreover, if no operator is
+          specified, a shell-style glob match is now done. This creates a minor
+          incompatibility compared to older systemd versions when the '*', '?',
+          '[', ']' characters are used, as these will now match as shell globs
+          instead of literally. Given that kernel version strings typically do
+          not include these characters we expect little breakage through this
+          change.
+
+        * The service manager will now read the SELinux label used for SELinux
+          access checks from the unit file at the time it loads the file.
+          Previously, the label would be read at the moment of the access
+          check, which was problematic since at that time the unit file might
+          already have been updated or removed.
+
+        New Features:
+
+        * systemd-measure is a new tool for calculating and signing expected
+          TPM2 PCR values for a given unified kernel image (UKI) booted via
+          sd-stub. The public key used for the signature and the signed
+          expected PCR information can be embedded inside the UKI. This
+          information can be extracted from the UKI by external tools and code
+          in the image itself and is made available to userspace in the booted
+          kernel.
+
+          systemd-cryptsetup, systemd-cryptenroll, and systemd-creds have been
+          updated to make use of this information if available in the booted
+          kernel: when locking an encrypted volume/credential to the TPM
+          systemd-cryptenroll/systemd-creds will use the public key to bind the
+          volume/credential to any kernel that carries PCR information signed
+          by the same key pair. When unlocking such volumes/credentials
+          systemd-cryptsetup/systemd-creds will use the signature embedded in
+          the booted UKI to gain access.
+
+          Binding TPM-based disk encryption to public keys/signatures of PCR
+          values — instead of literal PCR values — addresses the inherent
+          "brittleness" of traditional PCR-bound TPM disk encryption schemes:
+          disks remain accessible even if the UKI is updated, without any TPM
+          specific preparation during the OS update — as long as each UKI
+          carries the necessary PCR signature information.
+
+          Net effect: if you boot a properly prepared kernel, TPM-bound disk
+          encryption now defaults to be locked to kernels which carry PCR
+          signatures from the same key pair. Example: if a hypothetical distro
+          FooOS prepares its UKIs like this, TPM-based disk encryption is now –
+          by default – bound to only FooOS kernels, and encrypted volumes bound
+          to the TPM cannot be unlocked on kernels from other sources. (But do
+          note this behaviour requires preparation/enabling in the UKI, and of
+          course users can always enroll non-TPM ways to unlock the volume.)
+
+        * systemd-pcrphase is a new tool that is invoked at six places during
+          system runtime, and measures additional words into TPM2 PCR 11, to
+          mark milestones of the boot process. This allows binding access to
+          specific TPM2-encrypted secrets to specific phases of the boot
+          process. (Example: LUKS2 disk encryption key only accessible in the
+          initrd, but not later.)
+
+        Changes in systemd itself, i.e. the manager and units
+
+        * The cpu controller is delegated to user manager units by default, and
+          CPUWeight= settings are applied to the top-level user slice units
+          (app.slice, background.slice, session.slice). This provides a degree
+          of resource isolation between different user services competing for
+          the CPU.
+
+        * Systemd can optionally do a full preset in the "first boot" condition
+          (instead of just enable-only). This behaviour is controlled by the
+          compile-time option -Dfirst-boot-full-preset. Right now it defaults
+          to 'false', but the plan is to switch it to 'true' for the subsequent
+          release.
+
+        * Drop-ins are now allowed for transient units too.
+
+        * Systemd will set the taint flag 'support-ended' if it detects that
+          the OS image is past its end-of-support date. This date is declared
+          in a new /etc/os-release field SUPPORT_END= described below.
+
+        * Two new settings ConditionCredential= and AssertCredential= can be
+          used to skip or fail units if a certain system credential is not
+          provided.
+
+        * ConditionMemory= accepts size suffixes (K, M, G, T, …).
+
+        * DefaultSmackProcessLabel= can be used in system.conf and user.conf to
+          specify the SMACK security label to use when not specified in a unit
+          file.
+
+        * DefaultDeviceTimeoutSec= can be used in system.conf and user.conf to
+          specify the default timeout when waiting for device units to
+          activate.
+
+        * C.UTF-8 is used as the default locale if nothing else has been
+          configured.
+
+        * [Condition|Assert]Firmware= have been extended to support certain
+          SMBIOS fields. For example
+
+            ConditionFirmware=smbios-field(board_name = "Custom Board")
+
+          conditionalizes the unit to run only when
+          /sys/class/dmi/id/board_name contains "Custom Board" (without the
+          quotes).
+
+        * ConditionFirstBoot= now correctly evaluates as true only during the
+          boot phase of the first boot. A unit executed later, after booting
+          has completed, will no longer evaluate this condition as true.
+
+        * Socket units will now create sockets in the SELinuxContext= of the
+          associated service unit, if any.
+
+        * Boot phase transitions (start initrd → exit initrd → boot complete →
+          shutdown) will be measured into TPM2 PCR 11, so that secrets can be
+          bound to a specific runtime phase. E.g.: a LUKS encryption key can be
+          unsealed only in the initrd.
+
+        * Service credentials (i.e. SetCredential=/LoadCredential=/…) will now
+          also be provided to ExecStartPre= processes.
+
+        * Various units are now correctly ordered against
+          initrd-switch-root.target where previously a conflict without
+          ordering was configured. A stop job for those units would be queued,
+          but without the ordering it could be executed only after
+          initrd-switch-root.service, leading to units not being restarted in
+          the host system as expected.
+
+        * In order to fully support the IPMI watchdog driver, which has not yet
+          been ported to the new common watchdog device interface,
+          /dev/watchdog0 will be tried first and systemd will silently fallback
+          to /dev/watchdog if it is not found.
+
+        * New watchdog-related D-Bus properties are now published by systemd:
+          WatchdogDevice, WatchdogLastPingTimestamp,
+          WatchdogLastPingTimestampMonotonic.
+
+        * At shutdown, API virtual files systems (proc, sys, etc.) will be
+          unmounted lazily.
+
+        * At shutdown, systemd will now log about processes blocking unmounting
+          of file systems.
+
+        * A new meson build option 'clock-valid-range-usec-max' was added to
+          allow disabling system time correction if RTC returns a timestamp far
+          in the future.
+
+        * Propagated restart jobs will no longer be discarded while a unit is
+          activating.
+
+        * PID 1 will now import system credentials from SMBIOS Type 11 fields
+          ("OEM vendor strings"), in addition to qemu_fwcfg. This provides a
+          simple, fast and generic path for supplying credentials to a VM,
+          without involving external tools such as cloud-init/ignition.
+
+        * The CPUWeight= setting of unit files now accepts a new special value
+          "idle", which configures "idle" level scheduling for the unit.
+
+        * Service processes that are activated due to a .timer or .path unit
+          triggering will now receive information about this via environment
+          variables. Note that this is information is lossy, as activation
+          might be coalesced and only one of the activating triggers will be
+          reported. This is hence more suited for debugging or tracing rather
+          than for behaviour decisions.
+
+        * The riscv_flush_icache(2) system call has been added to the list of
+          system calls allowed by default when SystemCallFilter= is used.
+
+        * The selinux context derived from the target executable, instead of
+          'init_t' used for the manager itself, is now used when creating
+          listening sockets for units that specify SELinuxContextFromNet=yes.
+
+        Changes in sd-boot, bootctl, and the Boot Loader Specification:
+
+        * The Boot Loader Specification has been cleaned up and clarified.
+          Various corner cases in version string comparisons have been fixed
+          (e.g. comparisons for empty strings). Boot counting is now part of
+          the main specification.
+
+        * New PCRs measurements are performed during boot: PCR 11 for the
+          kernel+initrd combo, PCR 13 for any sysext images. If a measurement
+          took place this is now reported to userspace via the new
+          StubPcrKernelImage and StubPcrInitRDSysExts EFI variables.
+
+        * As before, systemd-stub will measure kernel parameters and system
+          credentials into PCR 12. It will now report this fact via the
+          StubPcrKernelParameters EFI variable to userspace.
+
+        * The UEFI monotonic boot counter is now included in the updated random
+          seed file maintained by sd-boot, providing some additional entropy.
+
+        * sd-stub will use LoadImage/StartImage to execute the kernel, instead
+          of arranging the image manually and jumping to the kernel entry
+          point. sd-stub also installs a temporary UEFI SecurityOverride to
+          allow the (unsigned) nested image to be booted. This is safe because
+          the outer (signed) stub+kernel binary must have been verified before
+          the stub was executed.
+
+        * Booting in EFI mixed mode (a 64-bit kernel over 32-bit UEFI firmware)
+          is now supported by sd-boot.
+
+        * bootctl gained a bunch of new options: --all-architectures to install
+          binaries for all supported EFI architectures, --root= and --image=
+          options to operate on a directory or disk image, and
+          --install-source= to specify the source for binaries to install,
+          --efi-boot-option-description= to control the name of the boot entry.
+
+        * The sd-boot stub exports a StubFeatures flag, which is used by
+          bootctl to show features supported by the stub that was used to boot.
+
+        * The PE section offsets that are used by tools that assemble unified
+          kernel images have historically been hard-coded. This may lead to
+          overlapping PE sections which may break on boot. The UKI will now try
+          to detect and warn about this.
+
+          Any tools that assemble UKIs must update to calculate these offsets
+          dynamically. Future sd-stub versions may use offsets that will not
+          work with the currently used set of hard-coded offsets!
+
+        * sd-stub now accepts (and passes to the initrd and then to the full
+          OS) new PE sections '.pcrsig' and '.pcrkey' that can be used to embed
+          signatures of expected PCR values, to allow sealing secrets via the
+          TPM2 against pre-calculated PCR measurements.
+
+        Changes in the hardware database:
+
+        * 'systemd-hwdb query' now supports the --root= option.
+
+        Changes in systemctl:
+
+        * systemctl now supports --state= and --type= options for the 'show'
+          and 'status' verbs.
+
+        * systemctl gained a new verb 'list-automounts' to list automount
+          points.
+
+        * systemctl gained support for a new --image= switch to be able to
+          operate on the specified disk image (similar to the existing --root=
+          which operates relative to some directory).
+
+        Changes in systemd-networkd:
+
+        * networkd can set Linux NetLabel labels for integration with the
+          network control in security modules via a new NetLabel= option.
+
+        * The RapidCommit= is (re-)introduced to enable faster configuration
+          via DHCPv6 (RFC 3315).
+
+        * networkd gained a new option TCPCongestionControlAlgorithm= that
+          allows setting a per-route TCP algorithm.
+
+        * networkd gained a new option KeepFileDescriptor= to allow keeping a
+          reference (file descriptor) open on TUN/TAP interfaces, which is
+          useful to avoid link flaps while the underlying service providing the
+          interface is being serviced.
+
+        * RouteTable= now also accepts route table names.
+
+        Changes in systemd-nspawn:
+
+        * The --bind= and --overlay= options now support relative paths.
+
+        * The --bind= option now supports a 'rootidmap' value, which will
+          use id-mapped mounts to map the root user inside the container to the
+          owner of the mounted directory on the host.
+
+        Changes in systemd-resolved:
+
+        * systemd-resolved now persists DNSOverTLS in its state file too. This
+          fixes a problem when used in combination with NetworkManager, which
+          sends the setting only once, causing it to be lost if resolved was
+          restarted at any point.
+
+        * systemd-resolved now exposes a varlink socket at
+          /run/systemd/resolve/io.systemd.Resolve.Monitor, accessible only for
+          root. Processed DNS requests in a JSON format will be published to
+          any clients connected to this socket.
+
+          resolvectl gained a 'monitor' verb to make use of this.
+
+        * systemd-resolved now treats unsupported DNSSEC algorithms as INSECURE
+          instead of returning SERVFAIL, as per RFC:
+          https://datatracker.ietf.org/doc/html/rfc6840#section-5.2
+
+        * OpenSSL is the default crypto backend for systemd-resolved. (gnutls
+          is still supported.)
+
+        Changes in libsystemd and other libraries:
+
+        * libsystemd now exports sd_bus_error_setfv() (a convenience function
+          for setting bus errors), sd_id128_string_equal (a convenience
+          function for 128bit ID string comparisons), and
+          sd_bus_message_read_strv_extend() (a function to incrementally read
+          string arrays).
+
+        * libsystemd now exports sd_device_get_child_first()/_next() as a
+          high-level interface for enumerating child devices. It also supports
+          sd_device_new_child() for opening a child device given a device
+          object.
+
+        * libsystemd now exports sd_device_monitor_set()/get_description()
+          which allow setting a custom description that will be used in log
+          messages by sd_device_monitor*.
+
+        * Private shared libraries (libsystemd-shared-nnn.so,
+          libsystemd-core-nnn.so) are now installed into arch-specific
+          directories to allow multi-arch installs.
+
+        * A new sd-gpt.h header is now published, listing GUIDs from the
+          Discoverable Partitions specification. For more details see:
+          https://systemd.io/DISCOVERABLE_PARTITIONS/
+
+        * A new function sd_hwdb_new_from_path() has been added to open a hwdb
+          database given an explicit path to the file.
+
+        * The signal number argument to sd_event_add_signal() now can now be
+          ORed with the SD_EVENT_SIGNAL_PROCMASK flag, causing sigprocmask() to
+          be automatically invoked to block the specified signal. This is
+          useful to simplify invocations as the caller doesn't have to do this
+          manually.
+
+        * A new convenience call sd_event_set_signal_exit() has been added to
+          sd-event to set up signal handling so that the event loop
+          automatically terminates cleanly on SIGTERM/SIGINT.
+
+        Changes in other components:
+
+        * systemd-sysusers, systemd-tmpfiles, and systemd-sysctl configuration
+          can now be provided via the credential mechanism.
+
+        * systemd-analyze gained a new verb 'compare-versions' that implements
+          comparisons for versions strings (similarly to 'rpmdev-vercmp' and
+          'dpkg --compare-versions').
+
+        * 'systemd-analyze dump' is extended to accept glob patterns for unit
+          names to limit the output to matching units.
+
+        * tmpfiles.d/ lines can read file contents to write from a credential.
+          The new modifier char '^' is used to specify that the argument is a
+          credential name. This mechanism is used to automatically populate
+          /etc/motd, /etc/issue, and /etc/hosts from credentials.
+
+        * tmpfiles.d/ may now be configured to avoid changing uid/gid/mode of
+          an inode if the specification is prefixed with ':' and the inode
+          already exists.
+
+        * Default tmpfiles.d/ configuration now carries a line to automatically
+          use an 'ssh.authorized_keys.root' credential if provided to set up
+          the SSH authorized_keys file for the root user.
+
+        * systemd-tmpfiles will now gracefully handle absent source of "C" copy
+          lines.
+
+        * tmpfiles.d/ F/w lines now optionally permit encoding of the payload
+          in base64. This is useful to write arbitrary binary data into files.
+
+        * The pkgconfig and rpm macros files now export the directory for user
+          units as 'user_tmpfiles_dir' and '%_user_tmpfilesdir'.
+
+        * Detection of Apple Virtualization and detection of Parallels and
+          KubeVirt virtualization on non-x86 archs have been added.
+
+        * os-release gained a new field SUPPORT_END=YYYY-MM-DD to inform the
+          user when their system will become unsupported.
+
+        * When performing suspend-then-hibernate, the system will estimate the
+          discharge rate and use that to set the delay until hibernation and
+          hibernate immediately instead of suspending when running from a
+          battery and the capacity is below 5%.
+
+        * systemd-sysctl gained a --strict option to fail when a sysctl
+          setting is unknown to the kernel.
+
+        * machinectl supports --force for the 'copy-to' and 'copy-from'
+          verbs.
+
+        * coredumpctl gained the --root and --image options to look for journal
+          files under the specified root directory, image, or block device.
+
+        * 'journalctl -o' and similar commands now implement a new output mode
+          "short-delta". It is similar to "short-monotonic", but also shows the
+          time delta between subsequent messages.
+
+        * journalctl now respects the --quiet flag when verifying consistency
+          of journal files.
+
+        * Journal log messages gained a new implicit field _RUNTIME_SCOPE= that
+          will indicate whether a message was logged in the 'initrd' phase or
+          in the 'system' phase of the boot process.
+
+        * Journal files gained a new compatibility flag
+          'HEADER_INCOMPATIBLE_COMPACT'. Files with this flag implement changes
+          to the storage format that allow reducing size on disk. As with other
+          compatibility flags, older journalctl versions will not be able to
+          read journal files using this new format. The environment variable
+          'SYSTEMD_JOURNAL_COMPACT=0' can be passed to systemd-journald to
+          disable this functionality. It is enabled by default.
+
+        * systemd-run's --working-directory= switch now works when used in
+          combination with --scope.
+
+        * portablectl gained a --force flag to skip certain sanity checks. This
+          is implemented using new flags accepted by systemd-portabled for the
+          *WithExtensions() D-Bus methods: SD_SYSTEMD_PORTABLE_FORCE_ATTACH
+          flag now means that the attach/detach checks whether the units are
+          already present and running will be skipped. Similarly,
+          SD_SYSTEMD_PORTABLE_FORCE_SYSEXT flag means that the check whether
+          image name matches the name declared inside of the image will be
+          skipped. Callers must be sure to do those checks themselves if
+          appropriate.
+
+        * systemd-portabled will now use the original filename to check
+          extension-release.NAME for correctness, in case it is passed a
+          symlink.
+
+        * systemd-portabled now uses PrivateTmp=yes in the 'trusted' profile
+          too.
+
+        * sysext's extension-release files now support '_any' as a special
+          value for the ID= field, to allow distribution-independent extensions
+          (e.g.: fully statically compiled binaries, scripts). It also gained
+          support for a new ARCHITECTURE= field that may be used to explicitly
+          restrict an image to hosts of a specific architecture.
+
+        * systemd-repart now supports creating squashfs partitions. This
+          requires mksquashfs from squashfs-tools.
+
+        * systemd-repart gained a --split flag to also generate split
+          artifacts, i.e. a separate file for each partition. This is useful in
+          conjunction with systemd-sysupdate or other tools, or to generate
+          split dm-verity artifacts.
+
+        * systemd-repart is now able to generate dm-verity partitions, including
+          signatures.
+
+        * systemd-repart can now set a partition UUID to zero, allowing it to
+          be filled in later, such as when using verity partitions.
+
+        * systemd-repart now supports drop-ins for its configuration files.
+
+        * Package metadata logged by systemd-coredump in the system journal is
+          now more compact.
+
+        * xdg-autostart-service now expands 'tilde' characters in Exec lines.
+
+        * systemd-oomd now automatically links against libatomic, if available.
+
+        * systemd-oomd now sends out a 'Killed' D-Bus signal when a cgroup is
+          killed.
+
+        * scope units now also provide oom-kill status.
+
+        * systemd-pstore will now try to load only the efi_pstore kernel module
+          before running, ensuring that pstore can be used.
+
+        * systemd-logind gained a new StopIdleSessionSec= option to stop an idle
+          session after a preconfigure timeout.
+
+        * systemd-homed will now wait up to 30 seconds for workers to terminate,
+          rather than indefinitely.
+
+        * homectl gained a new '--luks-sector-size=' flag that allows users to
+          select the preferred LUKS sector size. Must be a power of 2 between 512
+          and 4096. systemd-userdbd records gained a corresponding field.
+
+        * systemd-sysusers will now respect the 'SOURCE_DATE_EPOCH' environment
+          variable when generating the 'sp_lstchg' field, to ensure an image
+          build can be reproducible.
+
+        * 'udevadm wait' will now listen to kernel uevents too when called with
+          --initialized=no.
+
+        * When naming network devices udev will now consult the Devicetree
+          "alias" fields for the device.
+
+        * systemd-udev will now create infiniband/by-path and
+          infiniband/by-ibdev links for Infiniband verbs devices.
+
+        * systemd-udev-trigger.service will now also prioritize input devices.
+
+        * ConditionACPower= and systemd-ac-power will now assume the system is
+          running on AC power if no battery can be found.
+
+        * All features and tools using the TPM2 will now communicate with it
+          using a bind key. Beforehand, the tpm2 support used encrypted sessions
+          by creating a primary key that was used to encrypt traffic. This
+          creates a problem as the key created for encrypting the traffic could
+          be faked by an active interposer on the bus. In cases when a pin is
+          used, a bind key will be used. The pin is used as the auth value for
+          the seal key, aka the disk encryption key, and that auth value will be
+          used in the session establishment. An attacker would need the pin
+          value to create the secure session and thus an active interposer
+          without the pin cannot interpose on TPM2 traffic.
+
+        * systemd-growfs no longer requires udev to run.
+
+        * systemd-backlight now will better support systems with multiple
+          graphic cards.
+
+        * systemd-cryptsetup's keyfile-timeout= option now also works when a
+          device is used as a keyfile.
+
+        * systemd-cryptenroll gained a new --unlock-key-file= option to get the
+          unlocking key from a key file (instead of prompting the user). Note
+          that this is the key for unlocking the volume in order to be able to
+          enroll a new key, but it is not the key that is enrolled.
+
+        * systemd-dissect gained a new --umount switch that will safely and
+          synchronously unmount all partitions of an image previously mounted
+          with 'systemd-dissect --mount'.
+
+        * When using gcrypt, all systemd tools and services will now configure
+          it to prefer the OS random number generator if present.
+
+        * All example code shipped with documentation has been relicensed from CC0
+          to MIT-0.
+
+        * Unit tests will no longer fail when running on a system without
+          /etc/machine-id.
+
+        Experimental features:
+
+        * BPF programs can now be compiled with bpf-gcc (requires libbpf >= 1.0
+          and bpftool >= 7.0).
+
+        * sd-boot can automatically enroll SecureBoot keys from files found on
+          the ESP. This enrollment can be either automatic ('force' mode) or
+          controlled by the user ('manual' mode). It is sufficient to place the
+          SecureBoot keys in the right place in the ESP and they will be picked
+          up by sd-boot and shown in the boot menu.
+
+        * The mkosi config in systemd gained support for automatically
+          compiling a kernel with the configuration appropriate for testing
+          systemd. This may be useful when developing or testing systemd in
+          tandem with the kernel.
+
+        Contributions from: 김인수, Adam Williamson, adrian5, Aidan Dang,
+        Akihiko Odaki, Alban Bedel, Albert Mikaelyan, Aleksey Vasenev,
+        Alexander Graf, Alexander Shopov, Alexander Wilson,
+        Alper Nebi Yasak, anarcat, Anders Jonsson, Andre Kalb,
+        Andrew Stone, Andrey Albershteyn, Anita Zhang, Ansgar Burchardt,
+        Antonio Alvarez Feijoo, Arnaud Ferraris, Aryan singh, asavah,
+        Avamander, Avram Lubkin, Balázs Meskó, Bastien Nocera,
+        Benjamin Franzke, BerndAdameit, bin456789, Celeste Liu,
+        Chih-Hsuan Yen, Christian Brauner, Christian Göttsche,
+        Christian Hesse, Clyde Byrd III, codefiles, Colin Walters,
+        Cristian Rodríguez, Daan De Meyer, Daniel Braunwarth,
+        Daniel Rusek, Dan Streetman, Darsey Litzenberger, David Edmundson,
+        David Jaša, David Rheinsberg, David Seifert, David Tardon,
+        dependabot[bot], Devendra Tewari, Dominique Martinet, drosdeck,
+        Edson Juliano Drosdeck, Eduard Tolosa, eggfly, Einsler Lee,
+        Elias Probst, Eli Schwartz, Evgeny Vereshchagin, exploide, Fei Li,
+        Foster Snowhill, Franck Bui, Frank Dana, Frantisek Sumsal,
+        Gerd Hoffmann, Gio, Goffredo Baroncelli, gtwang01,
+        Guillaume W. Bres, H A, Hans de Goede, Heinrich Schuchardt,
+        Hugo Carvalho, i-do-cpp, igo95862, j00512545, Jacek Migacz,
+        Jade Bilkey, James Hilliard, Jan B, Janis Goldschmidt,
+        Jan Janssen, Jan Kuparinen, Jan Luebbe, Jan Macku,
+        Jason A. Donenfeld, Javkhlanbayar Khongorzul, Jeremy Soller,
+        JeroenHD, jiangchuangang, João Loureiro,
+        Joaquín Ignacio Aramendía, Jochen Sprickerhof,
+        Johannes Schauer Marin Rodrigues, Jonas Kümmerlin,
+        Jonas Witschel, Jonathan Kang, Jonathan Lebon, Joost Heitbrink,
+        Jörg Thalheim, josh-gordon-fb, Joyce, Kai Lueke, lastkrick,
+        Lennart Poettering, Leon M. George, licunlong, Li kunyu,
+        LockBlock-dev, Loïc Collignon, Lubomir Rintel, Luca Boccassi,
+        Luca BRUNO, Ludwig Nussel, Łukasz Stelmach, Maccraft123,
+        Marc Kleine-Budde, Marius Vollmer, Martin Wilck, matoro,
+        Matthias Lisin, Max Gautier, Maxim Mikityanskiy, Michael Biebl,
+        Michal Koutný, Michal Sekletár, Michal Stanke, Mike Gilbert,
+        Mitchell Freiderich, msizanoen1, Nick Rosbrook, nl6720, Oğuz Ersen,
+        Oleg Solovyov, Olga Smirnova, Pablo Ceballos, Pavel Zhukov,
+        Phaedrus Leeds, Philipp Gortan, Piotr Drąg, Pyfisch,
+        Quentin Deslandes, Rahil Bhimjiani, Rene Hollander, Richard Huang,
+        Richard Phibel, Rudi Heitbaum, Sam James, Sarah Brofeldt,
+        Sean Anderson, Sebastian Scheibner, Shreenidhi Shedi,
+        Sonali Srivastava, Steve Ramage, Suraj Krishnan, Swapnil Devesh,
+        Takashi Sakamoto, Ted X. Toth, Temuri Doghonadze, Thomas Blume,
+        Thomas Haller, Thomas Hebb, Tomáš Hnyk, Tomasz Paweł Gajc,
+        Topi Miettinen, Ulrich Ölmann, undef, Uriel Corfa,
+        Victor Westerhuis, Vincent Dagonneau, Vishal Chillara Srinivas,
+        Vito Caputo, Weblate, Wenchao Hao, William Roberts, williamsumendap,
+        wineway, xiaoyang, Yuri Chornoivan, Yu Watanabe,
+        Zbigniew Jędrzejewski-Szmek, Zhaofeng Li, наб
+
+        – The Great Beyond, 2022-10-31 👻
+
+CHANGES WITH 251:
+
+        Backwards-incompatible changes:
+
+        * The minimum kernel version required has been bumped from 3.13 to 4.15,
+          and CLOCK_BOOTTIME is now assumed to always exist.
+
+        * C11 with GNU extensions (aka "gnu11") is now used to build our
+          components. Public API headers are still restricted to ISO C89.
+
+        * In v250, a systemd-networkd feature that automatically configures
+          routes to addresses specified in AllowedIPs= was added and enabled by
+          default. However, this causes network connectivity issues in many
+          existing setups. Hence, it has been disabled by default since
+          systemd-stable 250.3. The feature can still be used by explicitly
+          configuring RouteTable= setting in .netdev files.
+
+        * Jobs started via StartUnitWithFlags() will no longer return 'skipped'
+          when a Condition*= check does not succeed, restoring the JobRemoved
+          signal to the behaviour it had before v250.
+
+        * The org.freedesktop.portable1 methods GetMetadataWithExtensions() and
+          GetImageMetadataWithExtensions() have been fixed to provide an extra
+          return parameter, containing the actual extension release metadata.
+          The current implementation was judged to be broken and unusable, and
+          thus the usual procedure of adding a new set of methods was skipped,
+          and backward compatibility broken instead on the assumption that
+          nobody can be affected given the current state of this interface.
+
+        * All kernels supported by systemd mix bytes returned by RDRAND (or
+          similar) into the entropy pool at early boot. This means that on
+          those systems, even if /dev/urandom is not yet initialized, it still
+          returns bytes that are of at least RDRAND quality. For that reason,
+          we no longer have reason to invoke RDRAND from systemd itself, which
+          has historically been a source of bugs. Furthermore, kernels ≥5.6
+          provide the getrandom(GRND_INSECURE) interface for returning random
+          bytes before the entropy pool is initialized without warning into
+          kmsg, which is what we attempt to use if available. systemd's direct
+          usage of RDRAND has been removed. x86 systems ≥Broadwell that are
+          running an older kernel may experience kmsg warnings that were not
+          seen with 250. For newer kernels, non-x86 systems, or older x86
+          systems, there should be no visible changes.
+
+        * sd-boot will now measure the kernel command line into TPM PCR 12
+          rather than PCR 8. This improves usefulness of the measurements on
+          systems where sd-boot is chainloaded from Grub. Grub measures all
+          commands its executes into PCR 8, which makes it very hard to use
+          reasonably, hence separate ourselves from that and use PCR 12
+          instead, which is what certain Ubuntu editions already do. To retain
+          compatibility with systems running older systemd systems a new meson
+          option 'efi-tpm-pcr-compat' has been added (which defaults to false).
+          If enabled, the measurement is done twice: into the new-style PCR 12
+          *and* the old-style PCR 8. It's strongly advised to migrate all users
+          to PCR 12 for this purpose in the long run, as we intend to remove
+          this compatibility feature in two years' time.
+
+        * busctl capture now writes output in the newer pcapng format instead
+          of pcap.
+
+        * A udev rule that imported hwdb matches for USB devices with lowercase
+          hexadecimal vendor/product ID digits was added in systemd 250. This
+          has been reverted, since uppercase hexadecimal digits are supposed to
+          be used, and we already had a rule with the appropriate match.
+
+          Users might need to adjust their local hwdb entries.
+
+        * arch_prctl(2) has been moved to the @default set in the syscall filters
+          (as exposed via the SystemCallFilter= setting in service unit files).
+          It is apparently used by the linker now.
+
+        * The tmpfiles entries that create the /run/systemd/netif directory and
+          its subdirectories were moved from tmpfiles.d/systemd.conf to
+          tmpfiles.d/systemd-network.conf.
+
+          Users might need to adjust their files that override tmpfiles.d/systemd.conf
+          to account for this change.
+
+        * The requirement for Portable Services images to contain a well-formed
+          os-release file (i.e.: contain at least an ID field) is now enforced.
+          This applies to base images and extensions, and also to systemd-sysext.
+
+        Changes in the Boot Loader Specification, kernel-install and sd-boot:
+
+        * kernel-install's and bootctl's Boot Loader Specification Type #1
+          entry generation logic has been reworked. The user may now pick
+          explicitly by which "token" string to name the installation's boot
+          entries, via the new /etc/kernel/entry-token file or the new
+          --entry-token= switch to bootctl. By default — as before — the
+          entries are named after the local machine ID. However, in "golden
+          image" environments, where the machine ID shall be initialized on
+          first boot (as opposed to at installation time before first boot) the
+          machine ID will not be available at build time. In this case the
+          --entry-token= switch to bootctl (or the /etc/kernel/entry-token
+          file) may be used to override the "token" for the entries, for
+          example the IMAGE_ID= or ID= fields from /etc/os-release. This will
+          make the OS images independent of any machine ID, and ensure that the
+          images will not carry any identifiable information before first boot,
+          but on the other hand means that multiple parallel installations of
+          the very same image on the same disk cannot be supported.
+
+          Summary: if you are building golden images that shall acquire
+          identity information exclusively on first boot, make sure to both
+          remove /etc/machine-id *and* to write /etc/kernel/entry-token to the
+          value of the IMAGE_ID= or ID= field of /etc/os-release or another
+          suitable identifier before deploying the image.
+
+        * The Boot Loader Specification has been extended with
+          /loader/entries.srel file located in the EFI System Partition (ESP)
+          that disambiguates the format of the entries in the /loader/entries/
+          directory (in order to discern them from incompatible uses of this
+          directory by other projects). For entries that follow the
+          Specification, the string "type1" is stored in this file.
+
+          bootctl will now write this file automatically when installing the
+          systemd-boot boot loader.
+
+        * kernel-install supports a new initrd_generator= setting in
+          /etc/kernel/install.conf, that is exported as
+          $KERNEL_INSTALL_INITRD_GENERATOR to kernel-install plugins. This
+          allows choosing different initrd generators.
+
+        * kernel-install will now create a "staging area" (an initially-empty
+          directory to gather files for a Boot Loader Specification Type #1
+          entry). The path to this directory is exported as
+          $KERNEL_INSTALL_STAGING_AREA to kernel-install plugins, which should
+          drop files there instead of writing them directly to the final
+          location. kernel-install will move them when all files have been
+          prepared successfully.
+
+        * New option sort-key= has been added to the Boot Loader Specification
+          to override the sorting order of the entries in the boot menu. It is
+          read by sd-boot and bootctl, and will be written by kernel-install,
+          with the default value of IMAGE_ID= or ID= fields from
+          os-release. Together, this means that on multiboot installations,
+          entries should be grouped and sorted in a predictable way.
+
+        * The sort order of boot entries has been updated: entries which have
+          the new field sort-key= are sorted by it first, and all entries
+          without it are ordered later. After that, entries are sorted by
+          version so that newest entries are towards the beginning of the list.
+
+        * The kernel-install tool gained a new 'inspect' verb which shows the
+          paths and other settings used.
+
+        * sd-boot can now optionally beep when the menu is shown and menu
+          entries are selected, which can be useful on machines without a
+          working display. (Controllable via a loader.conf setting.)
+
+        * The --make-machine-id-directory= switch to bootctl has been replaced
+          by --make-entry-directory=, given that the entry directory is not
+          necessarily named after the machine ID, but after some other suitable
+          ID as selected via --entry-token= described above. The old name of
+          the option is still understood to maximize compatibility.
+
+        * 'bootctl list' gained support for a new --json= switch to output boot
+          menu entries in JSON format.
+
+        * 'bootctl is-installed' now supports the --graceful, and various verbs
+          omit output with the new option --quiet.
+
+        Changes in systemd-homed:
+
+        * Starting with v250 systemd-homed uses UID/GID mapping on the mounts
+          of activated home directories it manages (if the kernel and selected
+          file systems support it). So far it mapped three UID ranges: the
+          range from 0…60000, the user's own UID, and the range 60514…65534,
+          leaving everything else unmapped (in other words, the 16bit UID range
+          is mapped almost fully, with the exception of the UID subrange used
+          for systemd-homed users, with one exception: the user's own UID).
+          Unmapped UIDs may not be used for file ownership in the home
+          directory — any chown() attempts with them will fail. With this
+          release a fourth range is added to these mappings:
+          524288…1879048191. This range is the UID range intended for container
+          uses, see:
+
+                  https://systemd.io/UIDS-GIDS
+
+          This range may be used for container managers that place container OS
+          trees in the home directory (which is a questionable approach, for
+          quota, permission, SUID handling and network file system
+          compatibility reasons, but nonetheless apparently commonplace). Note
+          that this mapping is mapped 1:1 in a pass-through fashion, i.e. the
+          UID assignments from the range are not managed or mapped by
+          `systemd-homed`, and must be managed with other mechanisms, in the
+          context of the local system.
+
+          Typically, a better approach to user namespacing in relevant
+          container managers would be to leave container OS trees on disk at
+          UID offset 0, but then map them to a dynamically allocated runtime
+          UID range via another UID mount map at container invocation
+          time. That way user namespace UID ranges become strictly a runtime
+          concept, and do not leak into persistent file systems, persistent
+          user databases or persistent configuration, thus greatly simplifying
+          handling, and improving compatibility with home directories intended
+          to be portable like the ones managed by systemd-homed.
+
+        Changes in shared libraries:
+
+        * A new libsystemd-core-<version>.so private shared library is
+          installed under /usr/lib/systemd/system, mirroring the existing
+          libsystemd-shared-<version>.so library. This allows the total
+          installation size to be reduced by binary code reuse.
+
+        * The <version> tag used in the name of libsystemd-shared.so and
+          libsystemd-core.so can be configured via the meson option
+          'shared-lib-tag'. Distributions may build subsequent versions of the
+          systemd package with unique tags (e.g. the full package version),
+          thus allowing multiple installations of those shared libraries to be
+          available at the same time. This is intended to fix an issue where
+          programs that link to those libraries would fail to execute because
+          they were installed earlier or later than the appropriate version of
+          the library.
+
+        * The sd-id128 API gained a new call sd_id128_to_uuid_string() that is
+          similar to sd_id128_to_string() but formats the ID in RFC 4122 UUID
+          format instead of as a simple series of hex characters.
+
+        * The sd-device API gained two new calls sd_device_new_from_devname()
+          and sd_device_new_from_path() which permit allocating an sd_device
+          object from a device node name or file system path.
+
+        * sd-device also gained a new call sd_device_open() which will open the
+          device node associated with a device for which an sd_device object
+          has been allocated. The call is supposed to address races around
+          device nodes being removed/recycled due to hotplug events, or media
+          change events: the call checks internally whether the major/minor of
+          the device node and the "diskseq" (in case of block devices) match
+          with the metadata loaded in the sd_device object, thus ensuring that
+          the device once opened really matches the provided sd_device object.
+
+        Changes in PID1, systemctl, and systemd-oomd:
+
+        * A new set of service monitor environment variables will be passed to
+          OnFailure=/OnSuccess= handlers, but only if exactly one unit lists the
+          handler unit as OnFailure=/OnSuccess=. The variables are:
+          $MONITOR_SERVICE_RESULT, $MONITOR_EXIT_CODE, $MONITOR_EXIT_STATUS,
+          $MONITOR_INVOCATION_ID and $MONITOR_UNIT. For cases when a single
+          handler needs to watch multiple units, use a templated handler.
+
+        * A new ExtensionDirectories= setting in service unit files allows
+          system extensions to be loaded from a directory. (It is similar to
+          ExtensionImages=, but takes paths to directories, instead of
+          disk image files.)
+
+          'portablectl attach --extension=' now also accepts directory paths.
+
+        * The user.delegate and user.invocation_id extended attributes on
+          cgroups are used in addition to trusted.delegate and
+          trusted.invocation_id. The latter pair requires privileges to set,
+          but the former doesn't and can be also set by the unprivileged user
+          manager.
+
+          (Only supported on kernels ≥5.6.)
+
+        * Units that were killed by systemd-oomd will now have a service result
+          of 'oom-kill'. The number of times a service was killed is tallied
+          in the 'user.oomd_ooms' extended attribute.
+
+          The OOMPolicy= unit file setting is now also honoured by
+          systemd-oomd.
+
+        * In unit files the new %y/%Y specifiers can be used to refer to
+          normalized unit file path, which is particularly useful for symlinked
+          unit files.
+
+          The new %q specifier resolves to the pretty hostname
+          (i.e. PRETTY_HOSTNAME= from /etc/machine-info).
+
+          The new %d specifier resolves to the credentials directory of a
+          service (same as $CREDENTIALS_DIRECTORY).
+
+        * The RootDirectory=, MountAPIVFS=, ExtensionDirectories=,
+          *Capabilities*=, ProtectHome=, *Directory=, TemporaryFileSystem=,
+          PrivateTmp=, PrivateDevices=, PrivateNetwork=, NetworkNamespacePath=,
+          PrivateIPC=, IPCNamespacePath=, PrivateUsers=, ProtectClock=,
+          ProtectKernelTunables=, ProtectKernelModules=, ProtectKernelLogs=,
+          MountFlags= service settings now also work in unprivileged user
+          services, i.e. those run by the user's --user service manager, as long
+          as user namespaces are enabled on the system.
+
+        * Services with Restart=always and a failing ExecCondition= will no
+          longer be restarted, to bring ExecCondition= behaviour in line with
+          Condition*= settings.
+
+        * LoadCredential= now accepts a directory as the argument; all files
+          from the directory will be loaded as credentials.
+
+        * A new D-Bus property ControlGroupId is now exposed on service units,
+          that encapsulates the service's numeric cgroup ID that newer kernels
+          assign to each cgroup.
+
+        * PID 1 gained support for configuring the "pre-timeout" of watchdog
+          devices and the associated governor, via the new
+          RuntimeWatchdogPreSec= and RuntimeWatchdogPreGovernor= configuration
+          options in /etc/systemd/system.conf.
+
+        * systemctl's --timestamp= option gained a new choice "unix", to show
+          timestamp as unix times, i.e. seconds since 1970, Jan 1st.
+
+        * A new "taint" flag named "old-kernel" is introduced which is set when
+          the kernel systemd runs on is older then the current baseline version
+          (see above). The flag is shown in "systemctl status" output.
+
+        * Two additional taint flags "short-uid-range" and "short-gid-range"
+          have been added as well, which are set when systemd notices it is run
+          within a userns namespace that does not define the full 0…65535 UID
+          range
+
+        * A new "unmerged-usr" taint flag has been added that is set whenever
+          running on systems where /bin/ + /sbin/ are *not* symlinks to their
+          counterparts in /usr/, i.e. on systems where the /usr/-merge has not
+          been completed.
+
+        * Generators invoked by PID 1 will now have a couple of useful
+          environment variables set describing the execution context a
+          bit. $SYSTEMD_SCOPE encodes whether the generator is called from the
+          system service manager, or from the per-user service
+          manager. $SYSTEMD_IN_INITRD encodes whether the generator is invoked
+          in initrd context or on the host. $SYSTEMD_FIRST_BOOT encodes whether
+          systemd considers the current boot to be a "first"
+          boot. $SYSTEMD_VIRTUALIZATION encode whether virtualization is
+          detected and which type of hypervisor/container
+          manager. $SYSTEMD_ARCHITECTURE indicates which architecture the
+          kernel is built for.
+
+        * PID 1 will now automatically pick up system credentials from qemu's
+          fw_cfg interface, thus allowing passing arbitrary data into VM
+          systems similar to how this is already supported for passing them
+          into `systemd-nspawn` containers. Credentials may now also be passed
+          in via the new kernel command line option `systemd.set_credential=`
+          (note that kernel command line options are world-readable during
+          runtime, and only useful for credentials that require no
+          confidentiality). The credentials that can be passed to unified
+          kernels that use the `systemd-stub` UEFI stub are now similarly
+          picked up automatically. Automatic importing of system credentials
+          this way can be turned off via the new
+          `systemd.import_credentials=no` kernel command line option.
+
+        * LoadCredential= will now automatically look for credentials in the
+          /etc/credstore/, /run/credstore/, /usr/lib/credstore/ directories if
+          the argument is not an absolute path. Similarly,
+          LoadCredentialEncrypted= will check the same directories plus
+          /etc/credstore.encrypted/, /run/credstore.encrypted/ and
+          /usr/lib/credstore.encrypted/. The idea is to use those directories
+          as the system-wide location for credentials that services should pick
+          up automatically.
+
+        * System and service credentials are described in great detail in a new
+          document:
+
+          https://systemd.io/CREDENTIALS
+
+        Changes in systemd-journald:
+
+        * The journal JSON export format has been added to listed of stable
+          interfaces (https://systemd.io/PORTABILITY_AND_STABILITY/).
+
+        * journalctl --list-boots now supports JSON output and the --reverse option.
+
+        * Under docs/: JOURNAL_EXPORT_FORMATS was imported from the wiki and
+          updated, BUILDING_IMAGES is new:
+
+          https://systemd.io/JOURNAL_EXPORT_FORMATS
+          https://systemd.io/BUILDING_IMAGES
+
+        Changes in udev:
+
+        * Two new hwdb files have been added. One lists "handhelds" (PDAs,
+          calculators, etc.), the other AV production devices (DJ tables,
+          keypads, etc.) that should accessible to the seat owner user by
+          default.
+
+        * udevadm trigger gained a new --prioritized-subsystem= option to
+          process certain subsystems (and all their parent devices) earlier.
+
+          systemd-udev-trigger.service now uses this new option to trigger
+          block and TPM devices first, hopefully making the boot a bit faster.
+
+        * udevadm trigger now implements --type=all, --initialized-match,
+          --initialized-nomatch to trigger both subsystems and devices, only
+          already-initialized devices, and only devices which haven't been
+          initialized yet, respectively.
+
+        * udevadm gained a new "wait" command for safely waiting for a specific
+          device to show up in the udev device database. This is useful in
+          scripts that asynchronously allocate a block device (e.g. through
+          repartitioning, or allocating a loopback device or similar) and need
+          to synchronize on the creation to complete.
+
+        * udevadm gained a new "lock" command for locking one or more block
+          devices while formatting it or writing a partition table to it. It is
+          an implementation of https://systemd.io/BLOCK_DEVICE_LOCKING and
+          usable in scripts dealing with block devices.
+
+        * udevadm info will show a couple of additional device fields in its
+          output, and will not apply a limited set of coloring to line types.
+
+        * udevadm info --tree will now show a tree of objects (i.e. devices and
+          suchlike) in the /sys/ hierarchy.
+
+        * Block devices will now get a new set of device symlinks in
+          /dev/disk/by-diskseq/<nr>, which may be used to reference block
+          device nodes via the kernel's "diskseq" value. Note that this does
+          not guarantee that opening a device by a symlink like this will
+          guarantee that the opened device actually matches the specified
+          diskseq value. To be safe against races, the actual diskseq value of
+          the opened device (BLKGETDISKSEQ ioctl()) must still be compred with
+          the one in the symlink path.
+
+        * .link files gained support for setting MDI/MID-X on a link.
+
+        * .link files gained support for [Match] Firmware= setting to match on
+          the device firmware description string. By mistake, it was previously
+          only supported in .network files.
+
+        * .link files gained support for [Link] SR-IOVVirtualFunctions= setting
+          and [SR-IOV] section to configure SR-IOV virtual functions.
+
+        Changes in systemd-networkd:
+
+        * The default scope for unicast routes configured through [Route]
+          section is changed to "link", to make the behavior consistent with
+          "ip route" command. The manual configuration of [Route] Scope= is
+          still honored.
+
+        * A new unit systemd-networkd-wait-online@<interface>.service has been
+          added that can be used to wait for a specific network interface to be
+          up.
+
+        * systemd-networkd gained a new [Bridge] Isolated=true|false setting
+          that configures the eponymous kernel attribute on the bridge.
+
+        * .netdev files now can be used to create virtual WLAN devices, and
+          configure various settings on them, via the [WLAN] section.
+
+        * .link/.network files gained support for [Match] Kind= setting to match
+          on device kind ("bond", "bridge", "gre", "tun", "veth", etc.)
+
+          This value is also shown by 'networkctl status'.
+
+        * The Local= setting in .netdev files for various virtual network
+          devices gained support for specifying, in addition to the network
+          address, the name of a local interface which must have the specified
+          address.
+
+        * systemd-networkd gained a new [Tunnel] External= setting in .netdev
+          files, to configure tunnels in external mode (a.k.a. collect metadata
+          mode).
+
+        * [Network] L2TP= setting was removed. Please use interface specifier in
+          Local= setting in .netdev files of corresponding L2TP interface.
+
+        * New [DHCPServer] BootServerName=, BootServerAddress=, and
+          BootFilename= settings can be used to configure the server address,
+          server name, and file name sent in the DHCP packet (e.g. to configure
+          PXE boot).
+
+        Changes in systemd-resolved:
+
+        * systemd-resolved is started earlier (in sysinit.target), so it
+          available earlier and will also be started in the initrd if installed
+          there.
+
+        Changes in disk encryption:
+
+        * systemd-cryptenroll can now control whether to require the user to
+          enter a PIN when using TPM-based unlocking of a volume via the new
+          --tpm2-with-pin= option.
+
+          Option tpm2-pin= can be used in /etc/crypttab.
+
+        * When unlocking devices via TPM, TPM2 parameter encryption is now
+          used, to ensure that communication between CPU and discrete TPM chips
+          cannot be eavesdropped to acquire disk encryption keys.
+
+        * A new switch --fido2-credential-algorithm= has been added to
+          systemd-cryptenroll allowing selection of the credential algorithm to
+          use when binding encryption to FIDO2 tokens.
+
+        Changes in systemd-hostnamed:
+
+        * HARDWARE_VENDOR= and HARDWARE_MODEL= can be set in /etc/machine-info
+          to override the values gleaned from the hwdb.
+
+        * A ID_CHASSIS property can be set in the hwdb (for the DMI device
+          /sys/class/dmi/id) to override the chassis that is reported by
+          hostnamed.
+
+        * hostnamed's D-Bus interface gained a new method GetHardwareSerial()
+          for reading the hardware serial number, as reportd by DMI. It also
+          exposes a new method D-Bus property FirmwareVersion that encode the
+          firmware version of the system.
+
+        Changes in other components:
+
+        * /etc/locale.conf is now populated through tmpfiles.d factory /etc/
+          handling with the values that were configured during systemd build
+          (if /etc/locale.conf has not been created through some other
+          mechanism). This means that /etc/locale.conf should always have
+          reasonable contents and we avoid a potential mismatch in defaults.
+
+        * The userdbctl tool will now show UID range information as part of the
+          list of known users.
+
+        * A new build-time configuration setting default-user-shell= can be
+          used to set the default shell for user records and nspawn shell
+          invocations (instead of the default /bin/bash).
+
+        * systemd-timesyncd now provides a D-Bus API for receiving NTP server
+          information dynamically at runtime via IPC.
+
+        * The systemd-creds tool gained a new "has-tpm2" verb, which reports
+          whether a functioning TPM2 infrastructure is available, i.e. if
+          firmware, kernel driver and systemd all have TPM2 support enabled and
+          a device found.
+
+        * The systemd-creds tool gained support for generating encrypted
+          credentials that are using an empty encryption key. While this
+          provides no integrity nor confidentiality it's useful to implement
+          codeflows that work the same on TPM-ful and TPM2-less systems. The
+          service manager will only accept credentials "encrypted" that way if
+          a TPM2 device cannot be detected, to ensure that credentials
+          "encrypted" like that cannot be used to trick TPM2 systems.
+
+        * When deciding whether to colorize output, all systemd programs now
+          also check $COLORTERM (in addition to $NO_COLOR, $SYSTEMD_COLORS, and
+          $TERM).
+
+        * Meson's new install_tag feature is now in use for several components,
+          allowing to build and install select binaries only: pam, nss, devel
+          (pkg-config files), systemd-boot, libsystemd, libudev. Example:
+           $ meson build systemd-boot
+           $ meson install --tags systemd-boot --no-rebuild
+          https://mesonbuild.com/Installing.html#installation-tags
+
+        * A new build configuration option has been added, to allow selecting the
+          default compression algorithm used by systemd-journald and systemd-coredump.
+          This allows to build-in support for decompressing all supported formats,
+          but choose a specific one for compression. E.g.:
+           $ meson -Ddefault-compression=xz
+
+        Experimental features:
+
+        * sd-boot gained a new *experimental* setting "reboot-for-bitlocker" in
+          loader.conf that implements booting Microsoft Windows from the
+          sd-boot in a way that first reboots the system, to reset the TPM
+          PCRs. This improves compatibility with BitLocker's TPM use, as the
+          PCRs will only record the Windows boot process, and not sd-boot
+          itself, thus retaining the PCR measurements not involving sd-boot.
+          Note that this feature is experimental for now, and is likely going
+          to be generalized and renamed in a future release, without retaining
+          compatibility with the current implementation.
+
+        * A new systemd-sysupdate component has been added that automatically
+          discovers, downloads, and installs A/B-style updates for the host
+          installation itself, or container images, portable service images,
+          and other assets. See the new systemd-sysupdate man page for updates.
+
+        Contributions from: 4piu, Adam Williamson, adrian5, Albert Brox,
+        AlexCatze, Alex Henrie, Alfonso Sánchez-Beato, Alice S,
+        Alvin Šipraga, amarjargal, Amarjargal, Andrea Pappacoda,
+        Andreas Rammhold, Andy Chi, Anita Zhang, Antonio Alvarez Feijoo,
+        Arfrever Frehtes Taifersar Arahesis, ash, Bastien Nocera, Be,
+        bearhoney, Ben Efros, Benjamin Berg, Benjamin Franzke,
+        Brett Holman, Christian Brauner, Clyde Byrd III, Curtis Klein,
+        Daan De Meyer, Daniele Medri, Daniel Mack, Danilo Krummrich,
+        David, David Bond, Davide Cavalca, David Tardon, davijosw,
+        dependabot[bot], Donald Chan, Dorian Clay, Eduard Tolosa,
+        Elias Probst, Eli Schwartz, Erik Sjölund, Evgeny Vereshchagin,
+        Federico Ceratto, Franck Bui, Frantisek Sumsal, Gaël PORTAY,
+        Georges Basile Stavracas Neto, Gibeom Gwon, Goffredo Baroncelli,
+        Grigori Goronzy, Hans de Goede, Heiko Becker, Hugo Carvalho,
+        Jakob Lell, James Hilliard, Jan Janssen, Jason A. Donenfeld,
+        Joan Bruguera, Joerie de Gram, Josh Triplett, Julia Kartseva,
+        Kazuo Moriwaka, Khem Raj, ksa678491784, Lance, Lan Tian,
+        Laura Barcziova, Lennart Poettering, Leviticoh, licunlong,
+        Lidong Zhong, lincoln auster, Lubomir Rintel, Luca Boccassi,
+        Luca BRUNO, lucagoc, Ludwig Nussel, Marcel Hellwig, march1993,
+        Marco Scardovi, Mario Limonciello, Mariusz Tkaczyk,
+        Markus Weippert, Martin, Martin Liska, Martin Wilck, Matija Skala,
+        Matthew Blythe, Matthias Lisin, Matthijs van Duin, Matt Walton,
+        Max Gautier, Michael Biebl, Michael Olbrich, Michal Koutný,
+        Michal Sekletár, Mike Gilbert, MkfsSion, Morten Linderud,
+        Nick Rosbrook, Nikolai Grigoriev, Nikolai Kostrigin,
+        Nishal Kulkarni, Noel Kuntze, Pablo Ceballos, Peter Hutterer,
+        Peter Morrow, Pigmy-penguin, Piotr Drąg, prumian, Richard Neill,
+        Rike-Benjamin Schuppner, rodin-ia, Romain Naour, Ruben Kerkhof,
+        Ryan Hendrickson, Santa Wiryaman, Sebastian Pucilowski, Seth Falco,
+        Simon Ellmann, Sonali Srivastava, Stefan Seering,
+        Stephen Hemminger, tawefogo, techtino, Temuri Doghonadze,
+        Thomas Batten, Thomas Haller, Thomas Weißschuh, Tobias Stoeckmann,
+        Tomasz Pala, Tyson Whitehead, Vishal Chillara Srinivas,
+        Vivien Didelot, w30023233, wangyuhang, Weblate, Xiaotian Wu,
+        yangmingtai, YmrDtnJu, Yonathan Randolph, Yutsuten, Yu Watanabe,
+        Zbigniew Jędrzejewski-Szmek, наб
+
+        — Edinburgh, 2022-05-21
+
+CHANGES WITH 250:
+
+        * Support for encrypted and authenticated credentials has been added.
+          This extends the credential logic introduced with v247 to support
+          non-interactive symmetric encryption and authentication, based on a
+          key that is stored on the /var/ file system or in the TPM2 chip (if
+          available), or the combination of both (by default if a TPM2 chip
+          exists the combination is used, otherwise the /var/ key only). The
+          credentials are automatically decrypted at the moment a service is
+          started, and are made accessible to the service itself in unencrypted
+          form. A new tool 'systemd-creds' encrypts credentials for this
+          purpose, and two new service file settings LoadCredentialEncrypted=
+          and SetCredentialEncrypted= configure such credentials.
+
+          This feature is useful to store sensitive material such as SSL
+          certificates, passwords and similar securely at rest and only decrypt
+          them when needed, and in a way that is tied to the local OS
+          installation or hardware.
+
+        * systemd-gpt-auto-generator can now automatically set up discoverable
+          LUKS2 encrypted swap partitions.
+
+        * The GPT Discoverable Partitions Specification has been substantially
+          extended with support for root and /usr/ partitions for the majority
+          of architectures systemd supports. This includes platforms that do
+          not natively support UEFI, because even though GPT is specified under
+          UEFI umbrella, it is useful on other systems too. Specifically,
+          systemd-nspawn, systemd-sysext, systemd-gpt-auto-generator and
+          Portable Services use the concept without requiring UEFI.
+
+        * The GPT Discoverable Partitions Specifications has been extended with
+          a new set of partitions that may carry PKCS#7 signatures for Verity
+          partitions, encoded in a simple JSON format. This implements a simple
+          mechanism for building disk images that are fully authenticated and
+          can be tested against a set of cryptographic certificates. This is
+          now implemented for the various systemd tools that can operate with
+          disk images, such as systemd-nspawn, systemd-sysext, systemd-dissect,
+          Portable services/RootImage=, systemd-tmpfiles, and systemd-sysusers.
+          The PKCS#7 signatures are passed to the kernel (where they are
+          checked against certificates from the kernel keyring), or can be
+          verified against certificates provided in userspace (via a simple
+          drop-in file mechanism).
+
+        * systemd-dissect's inspection logic will now report for which uses a
+          disk image is intended. Specifically, it will display whether an
+          image is suitable for booting on UEFI or in a container (using
+          systemd-nspawn's --image= switch), whether it can be used as portable
+          service, or attached as system extension.
+
+        * The system-extension.d/ drop-in files now support a new field
+          SYSEXT_SCOPE= that may encode which purpose a system extension image
+          is for: one of "initrd", "system" or "portable". This is useful to
+          make images more self-descriptive, and to ensure system extensions
+          cannot be attached in the wrong contexts.
+
+        * The os-release file learnt a new PORTABLE_PREFIXES= field which may
+          be used in portable service images to indicate which unit prefixes
+          are supported.
+
+        * The GPT image dissection logic in systemd-nspawn/systemd-dissect/…
+          now is able to decode images for non-native architectures as well.
+          This allows systemd-nspawn to boot images of non-native architectures
+          if the corresponding user mode emulator is installed and
+          systemd-binfmtd is running.
+
+        * systemd-logind gained new settings HandlePowerKeyLongPress=,
+          HandleRebootKeyLongPress=, HandleSuspendKeyLongPress= and
+          HandleHibernateKeyLongPress= which may be used to configure actions
+          when the relevant keys are pressed for more than 5s. This is useful
+          on devices that only have hardware for a subset of these keys. By
+          default, if the reboot key is pressed long the poweroff operation is
+          now triggered, and when the suspend key is pressed long the hibernate
+          operation is triggered. Long pressing the other two keys currently
+          does not trigger any operation by default.
+
+        * When showing unit status updates on the console during boot and
+          shutdown, and a service is slow to start so that the cylon animation
+          is shown, the most recent sd_notify() STATUS= text is now shown as
+          well. Services may use this to make the boot/shutdown output easier
+          to understand, and to indicate what precisely a service that is slow
+          to start or stop is waiting for. In particular, the per-user service
+          manager instance now reports what it is doing and which service it is
+          waiting for this way to the system service manager.
+
+        * The service manager will now re-execute on reception of the
+          SIGRTMIN+25 signal. It previously already did that on SIGTERM — but
+          only when running as PID 1. There was no signal to request this when
+          running as per-user service manager, i.e. as any other PID than 1.
+          SIGRTMIN+25 works for both system and user managers.
+
+        * The hardware watchdog logic in PID 1 gained support for operating
+          with the default timeout configured in the hardware, instead of
+          insisting on re-configuring it. Set RuntimeWatchdogSec=default to
+          request this behavior.
+
+        * A new kernel command line option systemd.watchdog_sec= is now
+          understood which may be used to override the hardware watchdog
+          time-out for the boot.
+
+        * A new setting DefaultOOMScoreAdjust= is now supported in
+          /etc/systemd/system.conf and /etc/systemd/user.conf. It may be used
+          to set the default process OOM score adjustment value for processes
+          started by the service manager. For per-user service managers this
+          now defaults to 100, but for per-system service managers is left as
+          is. This means that by default now services forked off the user
+          service manager are more likely to be killed by the OOM killer than
+          system services or the managers themselves.
+
+        * A new per-service setting RestrictFileSystems= as been added that
+          restricts the file systems a service has access to by their type.
+          This is based on the new BPF LSM of the Linux kernel. It provides an
+          effective way to make certain API file systems unavailable to
+          services (and thus minimizing attack surface). A new command
+          "systemd-analyze filesystems" has been added that lists all known
+          file system types (and how they are grouped together under useful
+          group handles).
+
+        * Services now support a new setting RestrictNetworkInterfaces= for
+          restricting access to specific network interfaces.
+
+        * Service unit files gained new settings StartupAllowedCPUs= and
+          StartupAllowedMemoryNodes=. These are similar to their counterparts
+          without the "Startup" prefix and apply during the boot process
+          only. This is useful to improve boot-time behavior of the system and
+          assign resources differently during boot than during regular
+          runtime. This is similar to the preexisting StartupCPUWeight=
+          vs. CPUWeight.
+
+        * Related to this: the various StartupXYZ= settings
+          (i.e. StartupCPUWeight=, StartupAllowedCPUs=, …) are now also applied
+          during shutdown. The settings not prefixed with "Startup" hence apply
+          during regular runtime, and those that are prefixed like that apply
+          during boot and shutdown.
+
+        * A new per-unit set of conditions/asserts
+          [Condition|Assert][Memory|CPU|IO]Pressure= have been added to make a
+          unit skip/fail activation if the system's (or a slice's) memory/cpu/io
+          pressure is above the configured threshold, using the kernel PSI
+          feature. For more details see systemd.unit(5) and
+          https://docs.kernel.org/accounting/psi.html
+
+        * The combination of ProcSubset=pid and ProtectKernelTunables=yes and/or
+          ProtectKernelLogs=yes can now be used.
+
+        * The default maximum numbers of inodes have been raised from 64k to 1M
+          for /dev/, and from 400k to 1M for /tmp/.
+
+        * The per-user service manager learnt support for communicating with
+          systemd-oomd to acquire OOM kill information.
+
+        * A new service setting ExecSearchPath= has been added that allows
+          changing the search path for executables for services. It affects
+          where we look for the binaries specified in ExecStart= and similar,
+          and the specified directories are also added the $PATH environment
+          variable passed to invoked processes.
+
+        * A new setting RuntimeRandomizedExtraSec= has been added for service
+          and scope units that allows extending the runtime time-out as
+          configured by RuntimeMaxSec= with a randomized amount.
+
+        * The syntax of the service unit settings RuntimeDirectory=,
+          StateDirectory=, CacheDirectory=, LogsDirectory= has been extended:
+          if the specified value is now suffixed with a colon, followed by
+          another filename, the latter will be created as symbolic link to the
+          specified directory. This allows creating these service directories
+          together with alias symlinks to make them available under multiple
+          names.
+
+        * Service unit files gained two new settings TTYRows=/TTYColumns= for
+          configuring rows/columns of the TTY device passed to
+          stdin/stdout/stderr of the service. This is useful to propagate TTY
+          dimensions to a virtual machine.
+
+        * A new service unit file setting ExitType= has been added that
+          specifies when to assume a service has exited. By default systemd
+          only watches the main process of a service. By setting
+          ExitType=cgroup it can be told to wait for the last process in a
+          cgroup instead.
+
+        * Automount unit files gained a new setting ExtraOptions= that can be
+          used to configure additional mount options to pass to the kernel when
+          mounting the autofs instance.
+
+        * "Urlification" (generation of ESC sequences that generate clickable
+          hyperlinks in modern terminals) may now be turned off altogether
+          during build-time.
+
+        * Path units gained new TriggerLimitBurst= and TriggerLimitIntervalSec=
+          settings that default to 200 and 2 s respectively. The ratelimit
+          ensures that a path unit cannot cause PID1 to busy-loop when it is
+          trying to trigger a service that is skipped because of a Condition*=
+          not being satisfied. This matches the configuration and behaviour of
+          socket units.
+
+        * The TPM2/FIDO2/PKCS11 support in systemd-cryptsetup is now also built
+          as a plug-in for cryptsetup. This means the plain cryptsetup command
+          may now be used to unlock volumes set up this way.
+
+        * The TPM2 logic in cryptsetup will now automatically detect systems
+          where the TPM2 chip advertises SHA256 PCR banks but the firmware only
+          updates the SHA1 banks. In such a case PCR policies will be
+          automatically bound to the latter, not the former. This makes the PCR
+          policies reliable, but of course do not provide the same level of
+          trust as SHA256 banks.
+
+        * The TPM2 logic in systemd-cryptsetup/systemd-cryptsetup now supports
+          RSA primary keys in addition to ECC, improving compatibility with
+          TPM2 chips that do not support ECC. RSA keys are much slower to use
+          than ECC, and hence are only used if ECC is not available.
+
+        * /etc/crypttab gained support for a new token-timeout= setting for
+          encrypted volumes that allows configuration of the maximum time to
+          wait for PKCS#11/FIDO2 tokens to be plugged in. If the time elapses
+          the logic will query the user for a regular passphrase/recovery key
+          instead.
+
+        * Support for activating dm-integrity volumes at boot via a new file
+          /etc/integritytab and the tool systemd-integritysetup have been
+          added. This is similar to /etc/crypttab and /etc/veritytab, but deals
+          with dm-integrity instead of dm-crypt/dm-verity.
+
+        * The systemd-veritysetup-generator now understands a new usrhash=
+          kernel command line option for specifying the Verity root hash for
+          the partition backing the /usr/ file system. A matching set of
+          systemd.verity_usr_* kernel command line options has been added as
+          well. These all work similar to the corresponding options for the
+          root partition.
+
+        * The sd-device API gained a new API call sd_device_get_diskseq() to
+          return the DISKSEQ property of a device structure. The "disk
+          sequence" concept is a new feature recently introduced to the Linux
+          kernel that allows detecting reuse cycles of block devices, i.e. can
+          be used to recognize when loopback block devices are reused for a
+          different purpose or CD-ROM drives get their media changed.
+
+        * A new unit systemd-boot-update.service has been added. If enabled
+          (the default) and the sd-boot loader is detected to be installed, it
+          is automatically updated to the newest version when out of date. This
+          is useful to ensure the boot loader remains up-to-date, and updates
+          automatically propagate from the OS tree in /usr/.
+
+        * sd-boot will now build with SBAT by default in order to facilitate
+          working with recent versions of Shim that require it to be present.
+
+        * sd-boot can now parse Microsoft Windows' Boot Configuration Data.
+          This is used to robustly generate boot entry titles for Windows.
+
+        * A new generic target unit factory-reset.target has been added. It is
+          hooked into systemd-logind similar in fashion to
+          reboot/poweroff/suspend/hibernate, and is supposed to be used to
+          initiate a factory reset operation. What precisely this operation
+          entails is up for the implementer to decide, the primary goal of the
+          new unit is provide a framework where to plug in the implementation
+          and how to trigger it.
+
+        * A new meson build-time option 'clock-valid-range-usec-max' has been
+          added which takes a time in µs and defaults to 15 years. If the RTC
+          time is noticed to be more than the specified time ahead of the
+          built-in epoch of systemd (which by default is the release timestamp
+          of systemd) it is assumed that the RTC is not working correctly, and
+          the RTC is reset to the epoch. (It already is reset to the epoch when
+          noticed to be before it.) This should increase the chance that time
+          doesn't accidentally jump too far ahead due to faulty hardware or
+          batteries.
+
+        * A new setting SaveIntervalSec= has been added to systemd-timesyncd,
+          which may be used to automatically save the current system time to
+          disk in regular intervals. This is useful to maintain a roughly
+          monotonic clock even without RTC hardware and with some robustness
+          against abnormal system shutdown.
+
+        * systemd-analyze verify gained support for a pair of new --image= +
+          --root= switches for verifying units below a specific root
+          directory/image instead of on the host.
+
+        * systemd-analyze verify gained support for verifying unit files under
+          an explicitly specified unit name, independently of what the filename
+          actually is.
+
+        * systemd-analyze verify gained a new switch --recursive-errors= which
+          controls whether to only fail on errors found in the specified units
+          or recursively any dependent units.
+
+        * systemd-analyze security now supports a new --offline mode for
+          analyzing unit files stored on disk instead of loaded units. It may
+          be combined with --root=/--image to analyze unit files under a root
+          directory or disk image. It also learnt a new --threshold= parameter
+          for specifying an exposure level threshold: if the exposure level
+          exceeds the specified value the call will fail. It also gained a new
+          --security-policy= switch for configuring security policies to
+          enforce on the units. A policy is a JSON file that lists which tests
+          shall be weighted how much to determine the overall exposure
+          level. Altogether these new features are useful for fully automatic
+          analysis and enforcement of security policies on unit files.
+
+        * systemd-analyze security gain a new --json= switch for JSON output.
+
+        * systemd-analyze learnt a new --quiet switch for reducing
+          non-essential output. It's honored by the "dot", "syscall-filter",
+          "filesystems" commands.
+
+        * systemd-analyze security gained a --profile= option that can be used
+          to take into account a portable profile when analyzing portable
+          services, since a lot of the security-related settings are enabled
+          through them.
+
+        * systemd-analyze learnt a new inspect-elf verb that parses ELF core
+          files, binaries and executables and prints metadata information,
+          including the build-id and other info described on:
+          https://systemd.io/COREDUMP_PACKAGE_METADATA/
+
+        * .network files gained a new UplinkInterface= in the [IPv6SendRA]
+          section, for automatically propagating DNS settings from other
+          interfaces.
+
+        * The static lease DHCP server logic in systemd-networkd may now serve
+          IP addresses outside of the configured IP pool range for the server.
+
+        * CAN support in systemd-networkd gained four new settings Loopback=,
+          OneShot=, PresumeAck=, ClassicDataLengthCode= for tweaking CAN
+          control modes. It gained a number of further settings for tweaking
+          CAN timing quanta.
+
+        * The [CAN] section in .network file gained new TimeQuantaNSec=,
+          PropagationSegment=, PhaseBufferSegment1=, PhaseBufferSegment2=,
+          SyncJumpWidth=, DataTimeQuantaNSec=, DataPropagationSegment=,
+          DataPhaseBufferSegment1=, DataPhaseBufferSegment2=, and
+          DataSyncJumpWidth= settings to control bit-timing processed by the
+          CAN interface.
+
+        * DHCPv4 client support in systemd-networkd learnt a new Label= option
+          for configuring the address label to apply to configure IPv4
+          addresses.
+
+        * The [IPv6AcceptRA] section of .network files gained support for a new
+          UseMTU= setting that may be used to control whether to apply the
+          announced MTU settings to the local interface.
+
+        * The [DHCPv4] section in .network file gained a new Use6RD= boolean
+          setting to control whether the DHCPv4 client request and process the
+          DHCP 6RD option.
+
+        * The [DHCPv6PrefixDelegation] section in .network file is renamed to
+          [DHCPPrefixDelegation], as now the prefix delegation is also supported
+          with DHCPv4 protocol by enabling the Use6RD= setting.
+
+        * The [DHCPPrefixDelegation] section in .network file gained a new
+          setting UplinkInterface= to specify the upstream interface.
+
+        * The [DHCPv6] section in .network file gained a new setting
+          UseDelegatedPrefix= to control whether the delegated prefixes will be
+          propagated to the downstream interfaces.
+
+        * The [IPv6AcceptRA] section of .network files now understands two new
+          settings UseGateway=/UseRoutePrefix= for explicitly configuring
+          whether to use the relevant fields from the IPv6 Router Advertisement
+          records.
+
+        * The ForceDHCPv6PDOtherInformation= setting in the [DHCPv6] section
+          has been removed. Please use the WithoutRA= and UseDelegatedPrefix=
+          settings in the [DHCPv6] section and the DHCPv6Client= setting in the
+          [IPv6AcceptRA] section to control when the DHCPv6 client is started
+          and how the delegated prefixes are handled by the DHCPv6 client.
+
+        * The IPv6Token= section in the [Network] section is deprecated, and
+          the [IPv6AcceptRA] section gained the Token= setting for its
+          replacement. The [IPv6Prefix] section also gained the Token= setting.
+          The Token= setting gained 'eui64' mode to explicitly configure an
+          address with the EUI64 algorithm based on the interface MAC address.
+          The 'prefixstable' mode can now optionally take a secret key. The
+          Token= setting in the [DHCPPrefixDelegation] section now supports all
+          algorithms supported by the same settings in the other sections.
+
+        * The [RoutingPolicyRule] section of .network file gained a new
+          SuppressInterfaceGroup= setting.
+
+        * The IgnoreCarrierLoss= setting in the [Network] section of .network
+          files now allows a duration to be specified, controlling how long to
+          wait before reacting to carrier loss.
+
+        * The [DHCPServer] section of .network file gained a new Router=
+          setting to specify the router address.
+
+        * The [CAKE] section of .network files gained various new settings
+          AutoRateIngress=, CompensationMode=, FlowIsolationMode=, NAT=,
+          MPUBytes=, PriorityQueueingPreset=, FirewallMark=, Wash=, SplitGSO=,
+          and UseRawPacketSize= for configuring CAKE.
+
+        * systemd-networkd now ships with new default .network files:
+          80-container-vb.network which matches host-side network bridge device
+          created by systemd-nspawn's --network-bridge or --network-zone
+          switch, and 80-6rd-tunnel.network which matches automatically created
+          sit tunnel with 6rd prefix when the DHCP 6RD option is received.
+
+        * systemd-networkd's handling of Endpoint= resolution for WireGuard
+          interfaces has been improved.
+
+        * systemd-networkd will now automatically configure routes to addresses
+          specified in AllowedIPs=. This feature can be controlled via
+          RouteTable= and RouteMetric= settings in [WireGuard] or
+          [WireGuardPeer] sections.
+
+        * systemd-networkd will now once again automatically generate persistent
+          MAC addresses for batadv and bridge interfaces. Users can disable this
+          by using MACAddress=none in .netdev files.
+
+        * systemd-networkd and systemd-udevd now support IP over InfiniBand
+          interfaces. The Kind= setting in .netdev file accepts "ipoib". And
+          systemd.netdev files gained the [IPoIB] section.
+
+        * systemd-networkd and systemd-udevd now support net.ifname-policy=
+          option on the kernel command-line. This is implemented through the
+          systemd-network-generator service that automatically generates
+          appropriate .link, .network, and .netdev files.
+
+        * The various systemd-udevd "ethtool" buffer settings now understand
+          the special value "max" to configure the buffers to the maximum the
+          hardware supports.
+
+        * systemd-udevd's .link files may now configure a large variety of
+          NIC coalescing settings, plus more hardware offload settings.
+
+        * .link files gained a new WakeOnLanPassword= setting in the [Link]
+          section that allows to specify a WoL "SecureOn" password on hardware
+          that supports this.
+
+        * systemd-nspawn's --setenv= switch now supports an additional syntax:
+          if only a variable name is specified (i.e. without being suffixed by
+          a '=' character and a value) the current value of the environment
+          variable is propagated to the container. e.g. --setenv=FOO will
+          lookup the current value of $FOO in the environment, and pass it down
+          to the container. Similar behavior has been added to homectl's,
+          machinectl's and systemd-run's --setenv= switch.
+
+        * systemd-nspawn gained a new switch --suppress-sync= which may be used
+          to optionally suppress the effect of the sync()/fsync()/fdatasync()
+          system calls for the container payload. This is useful for build
+          system environments where safety against abnormal system shutdown is
+          not essential as all build artifacts can be regenerated any time, but
+          the performance win is beneficial.
+
+        * systemd-nspawn will now raise the RLIMIT_NOFILE hard limit to the
+          same value that PID 1 uses for most forked off processes.
+
+        * systemd-nspawn's --bind=/--bind-ro= switches now optionally take
+          uidmap/nouidmap options as last parameter. If "uidmap" is used the
+          bind mounts are created with UID mapping taking place that ensures
+          the host's file ownerships are mapped 1:1 to container file
+          ownerships, even if user namespacing is used. This way
+          files/directories bound into containers will no longer show up as
+          owned by the nobody user as they typically did if no special care was
+          taken to shift them manually.
+
+        * When discovering Windows installations sd-boot will now attempt to
+          show the Windows version.
+
+        * The color scheme to use in sd-boot may now be configured at
+          build-time.
+
+        * sd-boot gained the ability to change screen resolution during
+          boot-time, by hitting the "r" key. This will cycle through available
+          resolutions and save the last selection.
+
+        * sd-boot learnt a new hotkey "f". When pressed the system will enter
+          firmware setup. This is useful in environments where it is difficult
+          to hit the right keys early enough to enter the firmware, and works
+          on any firmware regardless which key it natively uses.
+
+        * sd-boot gained support for automatically booting into the menu item
+          selected on the last boot (using the "@saved" identifier for menu
+          items).
+
+        * sd-boot gained support for automatically loading all EFI drivers
+          placed in the /EFI/systemd/drivers/ subdirectory of the EFI System
+          Partition (ESP). These drivers are loaded before the menu entries are
+          loaded. This is useful e.g. to load additional file system drivers
+          for the XBOOTLDR partition.
+
+        * systemd-boot will now paint the input cursor on its own instead of
+          relying on the firmware to do so, increasing compatibility with broken
+          firmware that doesn't make the cursor reasonably visible.
+
+        * sd-boot now embeds a .osrel PE section like we expect from Boot
+          Loader Specification Type #2 Unified Kernels. This means sd-boot
+          itself may be used in place of a Type #2 Unified Kernel. This is
+          useful for debugging purposes as it allows chain-loading one a
+          (development) sd-boot instance from another.
+
+        * sd-boot now supports a new "devicetree" field in Boot Loader
+          Specification Type #1 entries: if configured the specified device
+          tree file is installed before the kernel is invoked. This is useful
+          for installing/applying new devicetree files without updating the
+          kernel image.
+
+        * Similarly, sd-stub now can read devicetree data from a PE section
+          ".dtb" and apply it before invoking the kernel.
+
+        * sd-stub (the EFI stub that can be glued in front of a Linux kernel)
+          gained the ability to pick up credentials and sysext files, wrap them
+          in a cpio archive, and pass as an additional initrd to the invoked
+          Linux kernel, in effect placing those files in the /.extra/ directory
+          of the initrd environment. This is useful to implement trusted initrd
+          environments which are fully authenticated but still can be extended
+          (via sysexts) and parameterized (via encrypted/authenticated
+          credentials, see above).
+
+          Credentials can be located next to the kernel image file (credentials
+          specific to a single boot entry), or in one of the shared directories
+          (credentials applicable to multiple boot entries).
+
+        * sd-stub now comes with a full man page, that explains its feature set
+          and how to combine a kernel image, an initrd and the stub to build a
+          complete EFI unified kernel image, implementing Boot Loader
+          Specification Type #2.
+
+        * sd-stub may now provide the initrd to the executed kernel via the
+          LINUX_EFI_INITRD_MEDIA_GUID EFI protocol, adding compatibility for
+          non-x86 architectures.
+
+        * bootctl learnt new set-timeout and set-timeout-oneshot commands that
+          may be used to set the boot menu time-out of the boot loader (for all
+          or just the subsequent boot).
+
+        * bootctl and kernel-install will now read variables
+          KERNEL_INSTALL_LAYOUT= from /etc/machine-info and layout= from
+          /etc/kernel/install.conf. When set, it specifies the layout to use
+          for installation directories on the boot partition, so that tools
+          don't need to guess it based on the already-existing directories. The
+          only value that is defined natively is "bls", corresponding to the
+          layout specified in
+          https://systemd.io/BOOT_LOADER_SPECIFICATION/. Plugins for
+          kernel-install that implement a different layout can declare other
+          values for this variable.
+
+          'bootctl install' will now write KERNEL_INSTALL_LAYOUT=bls, on the
+          assumption that if the user installed sd-boot to the ESP, they intend
+          to use the entry layout understood by sd-boot. It'll also write
+          KERNEL_INSTALL_MACHINE_ID= if it creates any directories using the ID
+          (and it wasn't specified in the config file yet). Similarly,
+          kernel-install will now write KERNEL_INSTALL_MACHINE_ID= (if it
+          wasn't specified in the config file yet). Effectively, those changes
+          mean that the machine-id used for boot loader entry installation is
+          "frozen" upon first use and becomes independent of the actual
+          machine-id.
+
+          Configuring KERNEL_INSTALL_MACHINE_ID fixes the following problem:
+          images created for distribution ("golden images") are built with no
+          machine-id, so that a unique machine-id can be created on the first
+          boot. But those images may contain boot loader entries with the
+          machine-id used during build included in paths. Using a "frozen"
+          value allows unambiguously identifying entries that match the
+          specific installation, while still permitting parallel installations
+          without conflict.
+
+          Configuring KERNEL_INSTALL_LAYOUT obviates the need for
+          kernel-install to guess the installation layout. This fixes the
+          problem where a (possibly empty) directory in the boot partition is
+          created from a different layout causing kernel-install plugins to
+          assume the wrong layout. A particular example of how this may happen
+          is the grub2 package in Fedora which includes directories under /boot
+          directly in its file list. Various other packages pull in grub2 as a
+          dependency, so it may be installed even if unused, breaking
+          installations that use the bls layout.
+
+        * bootctl and systemd-bless-boot can now be linked statically.
+
+        * systemd-sysext now optionally doesn't insist on extension-release.d/
+          files being placed in the image under the image's file name. If the
+          file system xattr user.extension-release.strict is set on the
+          extension release file, it is accepted regardless of its name. This
+          relaxes security restrictions a bit, as system extension may be
+          attached under a wrong name this way.
+
+        * udevadm's test-builtin command learnt a new --action= switch for
+          testing the built-in with the specified action (in place of the
+          default 'add').
+
+        * udevadm info gained new switches --property=/--value for showing only
+          specific udev properties/values instead of all.
+
+        * A new hwdb database has been added that contains matches for various
+          types of signal analyzers (protocol analyzers, logic analyzers,
+          oscilloscopes, multimeters, bench power supplies, etc.) that should
+          be accessible to regular users.
+
+        * A new hwdb database entry has been added that carries information
+          about types of cameras (regular or infrared), and in which direction
+          they point (front or back).
+
+        * A new rule to allow console users access to rfkill by default has been
+          added to hwdb.
+
+        * Device nodes for the Software Guard eXtension enclaves (sgx_vepc) are
+          now also owned by the system group "sgx".
+
+        * A new build-time meson option "extra-net-naming-schemes=" has been
+          added to define additional naming schemes for udev's network
+          interface naming logic. This is useful for enterprise distributions
+          and similar which want to pin the schemes of certain distribution
+          releases under a specific name and previously had to patch the
+          sources to introduce new named schemes.
+
+        * The predictable naming logic for network interfaces has been extended
+          to generate stable names from Xen netfront device information.
+
+        * hostnamed's chassis property can now be sourced from chassis-type
+          field encoded in devicetree (in addition to the existing DMI
+          support).
+
+        * systemd-cgls now optionally displays cgroup IDs and extended
+          attributes for each cgroup. (Controllable via the new --xattr= +
+          --cgroup-id= switches.)
+
+        * coredumpctl gained a new --all switch for operating on all
+          Journal files instead of just the local ones.
+
+        * systemd-coredump will now use libdw/libelf via dlopen() rather than
+          directly linking, allowing users to easily opt-out of backtrace/metadata
+          analysis of core files, and reduce image sizes when this is not needed.
+
+        * systemd-coredump will now analyze core files with libdw/libelf in a
+          forked, sandboxed process.
+
+        * systemd-homed will now try to unmount an activate home area in
+          regular intervals once the user logged out fully. Previously this was
+          attempted exactly once but if the home directory was busy for some
+          reason it was not tried again.
+
+        * systemd-homed's LUKS2 home area backend will now create a BSD file
+          system lock on the image file while the home area is active
+          (i.e. mounted). If a home area is found to be locked, logins are
+          politely refused. This should improve behavior when using home areas
+          images that are accessible via the network from multiple clients, and
+          reduce the chance of accidental file system corruption in that case.
+
+        * Optionally, systemd-homed will now drop the kernel buffer cache once
+          a user has fully logged out, configurable via the new --drop-caches=
+          homectl switch.
+
+        * systemd-homed now makes use of UID mapped mounts for the home areas.
+          If the kernel and used file system support it, files are now
+          internally owned by the "nobody" user (i.e. the user typically used
+          for indicating "this ownership is not mapped"), and dynamically
+          mapped to the UID used locally on the system via the UID mapping
+          mount logic of recent kernels. This makes migrating home areas
+          between different systems cheaper because recursively chown()ing file
+          system trees is no longer necessary.
+
+        * systemd-homed's CIFS backend now optionally supports CIFS service
+          names with a directory suffix, in order to place home directories in
+          a subdirectory of a CIFS share, instead of the top-level directory.
+
+        * systemd-homed's CIFS backend gained support for specifying additional
+          mount options in the JSON user record (cifsExtraMountOptions field,
+          and --cifs-extra-mount-options= homectl switch). This is for example
+          useful for configuring mount options such as "noserverino" that some
+          SMB3 services require (use that to run a homed home directory from a
+          FritzBox SMB3 share this way).
+
+        * systemd-homed will now default to btrfs' zstd compression for home
+          areas. This is inspired by Fedora's recent decision to switch to zstd
+          by default.
+
+        * Additional mount options to use when mounting the file system of
+          LUKS2 volumes in systemd-homed has been added. Via the
+          $SYSTEMD_HOME_MOUNT_OPTIONS_BTRFS, $SYSTEMD_HOME_MOUNT_OPTIONS_EXT4,
+          $SYSTEMD_HOME_MOUNT_OPTIONS_XFS environment variables to
+          systemd-homed or via the luksExtraMountOptions user record JSON
+          property. (Exposed via homectl --luks-extra-mount-options)
+
+        * homectl's resize command now takes the special size specifications
+          "min" and "max" to shrink/grow the home area to the minimum/maximum
+          size possible, taking disk usage/space constraints and file system
+          limitations into account. Resizing is now generally graceful: the
+          logic will try to get as close to the specified size as possible, but
+          not consider it a failure if the request couldn't be fulfilled
+          precisely.
+
+        * systemd-homed gained the ability to automatically shrink home areas
+          on logout to their minimal size and grow them again on next
+          login. This ensures that while inactive, a home area only takes up
+          the minimal space necessary, but once activated, it provides
+          sufficient space for the user's needs. This behavior is only
+          supported if btrfs is used as file system inside the home area
+          (because only for btrfs online growing/shrinking is implemented in
+          the kernel). This behavior is now enabled by default, but may be
+          controlled via the new --auto-resize-mode= setting of homectl.
+
+        * systemd-homed gained support for automatically re-balancing free disk
+          space among active home areas, in case the LUKS2 backends are used,
+          and no explicit disk size was requested. This way disk space is
+          automatically managed and home areas resized in regular intervals and
+          manual resizing when disk space becomes scarce should not be
+          necessary anymore. This behavior is only supported if btrfs is used
+          within the home areas (as only then online shrinking and growing is
+          supported), and may be configured via the new rebalanceWeight JSON
+          user record field (as exposed via the new --rebalance-weight= homectl
+          setting). Re-balancing is mostly automatic, but can also be requested
+          explicitly via "homectl rebalance", which is synchronous, and thus
+          may be used to wait until the rebalance run is complete.
+
+        * userdbctl gained a --json= switch for configured the JSON formatting
+          to use when outputting user or group records.
+
+        * userdbctl gained a new --multiplexer= switch for explicitly
+          configuring whether to use the systemd-userdbd server side user
+          record resolution logic.
+
+        * userdbctl's ssh-authorized-keys command learnt a new --chain switch,
+          for chaining up another command to execute after completing the
+          look-up. Since the OpenSSH's AuthorizedKeysCommand only allows
+          configuration of a single command to invoke, this maybe used to
+          invoke multiple: first userdbctl's own implementation, and then any
+          other also configured in the command line.
+
+        * The sd-event API gained a new function sd_event_add_inotify_fd() that
+          is similar to sd_event_add_inotify() but accepts a file descriptor
+          instead of a path in the file system for referencing the inode to
+          watch.
+
+        * The sd-event API gained a new function
+          sd_event_source_set_ratelimit_expire_callback() that may be used to
+          define a callback function that is called whenever an event source
+          leaves the rate limiting phase.
+
+        * New documentation has been added explaining which steps are necessary
+          to port systemd to a new architecture:
+
+          https://systemd.io/PORTING_TO_NEW_ARCHITECTURES
+
+        * The x-systemd.makefs option in /etc/fstab now explicitly supports
+          ext2, ext3, and f2fs file systems.
+
+        * Mount units and units generated from /etc/fstab entries with 'noauto'
+          are now ordered the same as other units. Effectively, they will be
+          started earlier (if something actually pulled them in) and stopped
+          later, similarly to normal mount units that are part of
+          fs-local.target. This change should be invisible to users, but
+          should prevent those units from being stopped too early during
+          shutdown.
+
+        * The systemd-getty-generator now honors a new kernel command line
+          argument systemd.getty_auto= and a new environment variable
+          $SYSTEMD_GETTY_AUTO that allows turning it off at boot. This is for
+          example useful to turn off gettys inside of containers or similar
+          environments.
+
+        * systemd-resolved now listens on a second DNS stub address: 127.0.0.54
+          (in addition to 127.0.0.53, as before). If DNS requests are sent to
+          this address they are propagated in "bypass" mode only, i.e. are
+          almost not processed locally, but mostly forwarded as-is to the
+          current upstream DNS servers. This provides a stable DNS server
+          address that proxies all requests dynamically to the right upstream
+          DNS servers even if these dynamically change. This stub does not do
+          mDNS/LLMNR resolution. However, it will translate look-ups to
+          DNS-over-TLS if necessary. This new stub is particularly useful in
+          container/VM environments, or for tethering setups: use DNAT to
+          redirect traffic to any IP address to this stub.
+
+        * systemd-importd now honors new environment variables
+          $SYSTEMD_IMPORT_BTRFS_SUBVOL, $SYSTEMD_IMPORT_BTRFS_QUOTA,
+          $SYSTEMD_IMPORT_SYNC, which may be used disable btrfs subvolume
+          generation, btrfs quota setup and disk synchronization.
+
+        * systemd-importd and systemd-resolved can now be optionally built with
+          OpenSSL instead of libgcrypt.
+
+        * systemd-repart no longer requires OpenSSL.
+
+        * systemd-sysusers will no longer create the redundant 'nobody' group
+          by default, as the 'nobody' user is already created with an
+          appropriate primary group.
+
+        * If a unit uses RuntimeMaxSec, systemctl show will now display it.
+
+        * systemctl show-environment gained support for --output=json.
+
+        * pam_systemd will now first try to use the X11 abstract socket, and
+          fallback to the socket file in /tmp/.X11-unix/ only if that does not
+          work.
+
+        * systemd-journald will no longer go back to volatile storage
+          regardless of configuration when its unit is restarted.
+
+        * Initial support for the LoongArch architecture has been added (system
+          call lists, GPT partition table UUIDs, etc).
+
+        * systemd-journald's own logging messages are now also logged to the
+          journal itself when systemd-journald logs to /dev/kmsg.
+
+        * systemd-journald now re-enables COW for archived journal files on
+          filesystems that support COW. One benefit of this change is that
+          archived journal files will now get compressed on btrfs filesystems
+          that have compression enabled.
+
+        * systemd-journald now deduplicates fields in a single log message
+          before adding it to the journal. In archived journal files, it will
+          also punch holes for unused parts and truncate the file as
+          appropriate, leading to reductions in disk usage.
+
+        * journalctl --verify was extended with more informative error
+          messages.
+
+        * More of sd-journal's functions are now resistant against journal file
+          corruption.
+
+        * The shutdown command learnt a new option --show, to display the
+          scheduled shutdown.
+
+        * A LICENSES/ directory is now included in the git tree. It contains a
+          README.md file that explains the licenses used by source files in
+          this repository.  It also contains the text of all applicable
+          licenses as they appear on spdx.org.
+
+        Contributions from: Aakash Singh, acsfer, Adolfo Jayme Barrientos,
+        Adrian Vovk, Albert Brox, Alberto Mardegan, Alexander Kanavin,
+        alexlzhu, Alfonso Sánchez-Beato, Alvin Šipraga, Alyssa Ross,
+        Amir Omidi, Anatol Pomozov, Andika Triwidada, Andreas Rammhold,
+        Andreas Valder, Andrej Lajovic, Andrew Soutar, Andrew Stone, Andy Chi,
+        Anita Zhang, Anssi Hannula, Antonio Alvarez Feijoo,
+        Antony Deepak Thomas, Arnaud Ferraris, Arvid E. Picciani,
+        Bastien Nocera, Benjamin Berg, Benjamin Herrenschmidt, Ben Stockett,
+        Bogdan Seniuc, Boqun Feng, Carl Lei, chlorophyll-zz, Chris Packham,
+        Christian Brauner, Christian Göttsche, Christian Wehrli,
+        Christoph Anton Mitterer, Cristian Rodríguez, Daan De Meyer,
+        Daniel Maixner, Dann Frazier, Dan Streetman, Davide Cavalca,
+        David Seifert, David Tardon, dependabot[bot], Dimitri John Ledkov,
+        Dimitri Papadopoulos, Dimitry Ishenko, Dmitry Khlebnikov,
+        Dominique Martinet, duament, Egor, Egor Ignatov, Emil Renner Berthing,
+        Emily Gonyer, Ettore Atalan, Evgeny Vereshchagin, Florian Klink,
+        Franck Bui, Frantisek Sumsal, Geass-LL, Gibeom Gwon, GnunuX,
+        Gogo Gogsi, gregzuro, Greg Zuro, Gustavo Costa, Hans de Goede,
+        Hela Basa, Henri Chain, hikigaya58, Hugo Carvalho,
+        Hugo Osvaldo Barrera, Iago Lopez Galeiras, Iago López Galeiras,
+        I-dont-need-name, igo95862, Jack Dähn, James Hilliard, Jan Janssen,
+        Jan Kuparinen, Jan Macku, Jan Palus, Jarkko Sakkinen, Jayce Fayne,
+        jiangchuangang, jlempen, John Lindgren, Jonas Dreßler, Jonas Jelten,
+        Jonas Witschel, Joris Hartog, José Expósito, Julia Kartseva,
+        Kai-Heng Feng, Kai Wohlfahrt, Kay Siver Bø, KennthStailey,
+        Kevin Kuehler, Kevin Orr, Khem Raj, Kristian Klausen, Kyle Laker,
+        lainahai, LaserEyess, Lennart Poettering, Lia Lenckowski, longpanda,
+        Luca Boccassi, Luca BRUNO, Ludwig Nussel, Lukas Senionis,
+        Maanya Goenka, Maciek Borzecki, Marcel Menzel, Marco Scardovi,
+        Marcus Harrison, Mark Boudreau, Matthijs van Duin, Mauricio Vásquez,
+        Maxime de Roucy, Max Resch, MertsA, Michael Biebl, Michael Catanzaro,
+        Michal Koutný, Michal Sekletár, Miika Karanki, Mike Gilbert,
+        Milo Turner, ml, monosans, Nacho Barrientos, nassir90, Nishal Kulkarni,
+        nl6720, Ondrej Kozina, Paulo Neves, Pavel Březina, pedro martelletto,
+        Peter Hutterer, Peter Morrow, Piotr Drąg, Rasmus Villemoes, ratijas,
+        Raul Tambre, rene, Riccardo Schirone, Robert-L-Turner, Robert Scheck,
+        Ross Jennings, saikat0511, Scott Lamb, Scott Worley,
+        Sergei Trofimovich, Sho Iizuka, Slava Bacherikov, Slimane Selyan Amiri,
+        StefanBruens, Steven Siloti, svonohr, Taiki Sugawara, Takashi Sakamoto,
+        Takuro Onoue, Thomas Blume, Thomas Haller, Thomas Mühlbacher,
+        Tianlu Shao, Toke Høiland-Jørgensen, Tom Yan, Tony Asleson,
+        Topi Miettinen, Ulrich Ölmann, Urs Ritzmann, Vincent Bernat,
+        Vito Caputo, Vladimir Panteleev, WANG Xuerui, Wind/owZ, Wu Xiaotian,
+        xdavidwu, Xiaotian Wu, xujing, yangmingtai, Yao Wei, Yao Wei (魏銘廷),
+        Yegor Alexeyev, Yu Watanabe, Zbigniew Jędrzejewski-Szmek,
+        Дамјан Георгиевски, наб
+
+        — Warsaw, 2021-12-23
+
 CHANGES WITH 249:
 
         * When operating on disk images via the --image= switch of various
@@ -467,9 +3192,9 @@
           unit, which will be instantiated using the same instance name.
 
         * A new MemoryAvailable property is available for units. If the unit,
-          or the slice(s) it is part of, have a memory limit set via MemoryMax=/
+          or the slices it is part of, have a memory limit set via MemoryMax=/
           MemoryHigh=, MemoryAvailable will indicate how much more memory the
-          unit can claim before hitting the limit(s).
+          unit can claim before hitting the limits.
 
         * systemd-coredump will now try to stay below the cgroup memory limit
           placed on itself or one of the slices it runs under, if the storage
@@ -518,6 +3243,11 @@
           distribution does not install it yet, it might make sense to change
           that.
 
+        * Intel HID rfkill event is no longer masked, since it's the only
+          source of rfkill event on newer HP laptops. To have both backward and
+          forward compatibility, userspace daemon needs to debounce duplicated
+          events in a short time window.
+
         Contributions from: Aakash Singh, adrian5, Albert Brox,
         Alexander Sverdlin, Alexander Tsoy, Alexey Rubtsov, alexlzhu,
         Allen Webb, Alvin Šipraga, Alyssa Ross, Anders Wenhaug,
@@ -865,7 +3595,7 @@
           units.
 
           systemd-oomd is now considered fully supported (the usual
-          backwards-compatiblity promises apply). Swap is not required for
+          backwards-compatibility promises apply). Swap is not required for
           operation, but it is still recommended.
 
         * systemd-timesyncd gained a new ConnectionRetrySec= setting which
@@ -3866,8 +6596,8 @@
           a client with a Wi-Fi and Ethernet both connected to the internet).
 
           Consult the kernel documentation for details on this sysctl:
-          https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
-          
+          https://docs.kernel.org/networking/ip-sysctl.html
+
         * The v239 change to turn on "net.ipv4.tcp_ecn" by default has been
           reverted.
 
@@ -5609,6 +8339,15 @@
           temporary directory is passed as the entry directory and removed
           after all the plugins exit.
 
+        * If KERNEL_INSTALL_MACHINE_ID is set in /etc/machine-info, kernel-install
+          will now use its value as the machine ID instead of the machine ID
+          from /etc/machine-id. If KERNEL_INSTALL_MACHINE_ID isn't set in
+          /etc/machine-info and no machine ID is set in /etc/machine-id,
+          kernel-install will try to store the current machine ID there as
+          KERNEL_INSTALL_MACHINE_ID. If there is no machine ID, kernel-install
+          will generate a new UUID, store it in /etc/machine-info as
+          KERNEL_INSTALL_MACHINE_ID and use it as the machine ID.
+
         Contributions from: Adrian Heine né Lang, Aggelos Avgerinos, Alexander
         Kurtz, Alexandros Frantzis, Alexey Brodkin, Alex Lu, Amir Pakdel, Amir
         Yalon, Anchor Cat, Anthony Parsons, Bastien Nocera, Benjamin Gilbert,
@@ -11481,7 +14220,7 @@
           based on a calendar time specification such as "Thu,Fri
           2013-*-1,5 11:12:13" which refers to 11:12:13 of the first
           or fifth day of any month of the year 2013, given that it is
-          a thursday or friday. This brings timer event support
+          a Thursday or a Friday. This brings timer event support
           considerably closer to cron's capabilities. For details on
           the supported calendar time specification language see
           systemd.time(7).
diff --git a/catalog/meson.build b/catalog/meson.build
index 7139c2e..9aacd20 100644
--- a/catalog/meson.build
+++ b/catalog/meson.build
@@ -1,25 +1,30 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-in_files = '''
-        systemd.bg.catalog
-        systemd.be.catalog
-        systemd.be@latin.catalog
-        systemd.de.catalog
-        systemd.fr.catalog
-        systemd.it.catalog
-        systemd.pl.catalog
-        systemd.pt_BR.catalog
-        systemd.ru.catalog
-        systemd.zh_CN.catalog
-        systemd.zh_TW.catalog
-        systemd.catalog
-'''.split()
+in_files = [
+        'systemd.be.catalog',
+        'systemd.be@latin.catalog',
+        'systemd.bg.catalog',
+        'systemd.catalog',
+        'systemd.da.catalog',
+        'systemd.de.catalog',
+        'systemd.fr.catalog',
+        'systemd.hr.catalog',
+        'systemd.hu.catalog',
+        'systemd.it.catalog',
+        'systemd.ko.catalog',
+        'systemd.pl.catalog',
+        'systemd.pt_BR.catalog',
+        'systemd.ru.catalog',
+        'systemd.sr.catalog',
+        'systemd.zh_CN.catalog',
+        'systemd.zh_TW.catalog',
+]
 
 support_url = get_option('support-url')
 support_sed = 's~%SUPPORT_URL%~@0@~'.format(support_url)
 
 foreach file : in_files
-        custom_target(
+        catalogs += custom_target(
                 file,
                 input : file + '.in',
                 output: file,
diff --git a/catalog/systemd.bg.catalog.in b/catalog/systemd.bg.catalog.in
index 65e0833..34645dc 100644
--- a/catalog/systemd.bg.catalog.in
+++ b/catalog/systemd.bg.catalog.in
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 #
-#  Copyright © 2016 Alexander Shopov <ash@kambanaria.org>
+#  Copyright © 2016, 2022 Alexander Shopov <ash@kambanaria.org>
 
 # Message catalog for systemd's own messages
 
@@ -26,7 +26,7 @@
 журнални файлове.
 
 -- ec387f577b844b8fa948f33cad9a75e6
-Subject: Пространството върху диска заето от журналните файлове
+Subject: Пространство върху диска заето от журналните файлове
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
@@ -42,13 +42,13 @@
 За повече информация прегледайте „journald.conf(5)“ от ръководството.
 
 -- a596d6fe7bfa4994828e72309e95d61e
-Subject: Съобщенията от някоя услуга не са допуснати
+Subject: Съобщенията от някоя услуга са отхвърлени
 Defined-By: systemd
 Support: %SUPPORT_URL%
 Documentation: man:journald.conf(5)
 
 Някоя услуга генерира прекалено много съобщения за кратък период.
-Част само от нейните съобщения са отхвърляни.
+Част от нейните съобщения са отхвърляни.
 
 Съобщенията от другите услуги не са засегнати.
 
@@ -66,50 +66,62 @@
 смогваше да ги обработи достатъчно бързо.
 
 -- fc2e22bc6ee647b6b90729ab34a250b1
-Subject: Процес № @COREDUMP_PID@ (@COREDUMP_COMM@) запази освободената памет
+Subject: Процес @COREDUMP_PID@ (@COREDUMP_COMM@) запази освободената памет
 Defined-By: systemd
 Support: %SUPPORT_URL%
 Documentation: man:core(5)
 
-Процес № @COREDUMP_PID@ (@COREDUMP_COMM@) заби, представянето му в паметта
+Процес @COREDUMP_PID@ (@COREDUMP_COMM@) заби, представянето му в паметта
 бе запазено.
 
 Най-често това се дължи на грешка в забилата програма и следва да я
 докладвате на създателите на програмата.
 
+-- 5aadd8e954dc4b1a8c954d63fd9e1137
+Subject: Файлът с представяне в паметта е отрязан до @SIZE_LIMIT@ байта
+Defined-By: systemd
+Support: %SUPPORT_URL%
+Documentation: man:coredump.conf(5)
+
+Заделената памет за процеса надвишава настроения максимум за обработка и
+съхранение от systemd-coredump(8). Запазени са само първите @SIZE_LIMIT@ байта.
+Този файл (core) може да се окаже полезен, въпреки че е отсечен. Част от
+инструментите за работа като gdb(1) може да изведат предупреждение за
+отсичането.
+
 -- 8d45620c1a4348dbb17410da57c60c66
-Subject: Създадена е нова сесия № @SESSION_ID@ за потребителя „@USER_ID@“
+Subject: Създадена е нова сесия @SESSION_ID@ за потребителя @USER_ID@
 Defined-By: systemd
 Support: %SUPPORT_URL%
 Documentation: sd-login(3)
 
-За потребителя „@USER_ID@“ е създадена нова сесия № @SESSION_ID@.
+За потребителя „@USER_ID@“ е създадена нова сесия @SESSION_ID@.
 
-Водещият процес на сесията е: @LEADER@
+Водещият процес на сесията е @LEADER@
 
 -- 3354939424b4456d9802ca8333ed424a
-Subject: Сесия № @SESSION_ID@ приключи
+Subject: Сесия @SESSION_ID@ приключи
 Defined-By: systemd
 Support: %SUPPORT_URL%
 Documentation: sd-login(3)
 
-Сесия № @SESSION_ID@ приключи работа.
+Сесия @SESSION_ID@ приключи работа.
 
 -- fcbefc5da23d428093f97c82a9290f7b
-Subject: Налично е ново работно място № @SEAT_ID@
+Subject: Налично е ново работно място @SEAT_ID@
 Defined-By: systemd
 Support: %SUPPORT_URL%
 Documentation: sd-login(3)
 
-Новото работно място № @SEAT_ID@ е настроено и готово за работа.
+Новото работно място @SEAT_ID@ е настроено и готово за работа.
 
 -- e7852bfe46784ed0accde04bc864c2d5
-Subject: Работното място № @SEAT_ID@ е премахнато
+Subject: Работното място @SEAT_ID@ е премахнато
 Defined-By: systemd
 Support: %SUPPORT_URL%
 Documentation: sd-login(3)
 
-Работното място № @SEAT_ID@ вече не е налично.
+Работното място @SEAT_ID@ вече не е налично.
 
 -- c7a787079b354eaaa9e77b371893cd27
 Subject: Смяна на системното време
@@ -120,7 +132,7 @@
 1 януари 1970.
 
 -- 45f82f4aef7a4bbf942ce861d1f20990
-Subject: Смяна на часовия пояс да е „@TIMEZONE@“
+Subject: Смяна на часовия пояс да е @TIMEZONE@
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
@@ -142,15 +154,26 @@
 
 Стартирането на потребителските програми отне @USERSPACE_USEC@ микросекунди.
 
+-- eed00a68ffd84e31882105fd973abdd1
+Subject: Стартирането на управлението на потребител завърши
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Процесът за управлението на потребител @_UID@  завърши. Всички услуги насрочени
+за това са стартиране, но може да има други услуги, които да предстои да се
+стартират.
+
+Стартирането на управлението на потребител отне @USERSPACE_USEC@ микросекунди.
+
 -- 6bbd95ee977941e497c48be27c254128
-Subject: Системата е приспана на ниво „@SLEEP@“
+Subject: Системата е приспана на ниво @SLEEP@
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
 Системата премина в състояние на приспиване „@SLEEP@“.
 
 -- 8811e6df2a8e40f58a94cea26f8ebf14
-Subject: Системата се събуди след приспиване на ниво„@SLEEP@“
+Subject: Системата се събуди след приспиване на ниво @SLEEP@
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
@@ -164,54 +187,71 @@
 Започна процедурата на Systemd за спиране на системата. Всички процеси и
 услуги се спират, всички файлови системи се демонтират.
 
--- 7d4958e842da4a758f6c1cdc7b36dcc5
-Subject: Модул „@UNIT@“ се стартира
+-- c14aaf76ec284a5fa1f105f88dfb061c
+Subject: Започна процедура за връщане на заводските настройки на системата
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
-Модулът „@UNIT@“ се стартира в момента
+Започна процедура за връщане на заводските настройки на системата. Самото
+действие е изцяло определено от имплементацията. Типично се връщат заводското
+състояние и настройки от производителя.
+
+-- 7d4958e842da4a758f6c1cdc7b36dcc5
+Subject: Модул @UNIT@ се стартира
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Модулът „@UNIT@“ се стартира в момента.
+
+Идентификаторът на задача е @JOB_ID@.
 
 -- 39f53479d3a045ac8e11786248231fbf
-Subject: Модул „@UNIT@“ вече е стартиран
+Subject: Модул @UNIT@ вече е стартиран
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
 Стартирането на модул „@UNIT@“ завърши.
 
-Резултатът е: @JOB_RESULT@
-
--- de5b426a63be47a7b6ac3eaac82e2f6f
-Subject: Модул „@UNIT@“ се спира
-Defined-By: systemd
-Support: %SUPPORT_URL%
-
-Модулът „@UNIT@“ се спира в момента.
-
--- 9d1aaa27d60140bd96365438aad20286
-Subject: Модул „@UNIT@“ вече е спрян
-Defined-By: systemd
-Support: %SUPPORT_URL%
-
-Спирането на модул „@UNIT@“ завърши.
+Идентификаторът на задача е @JOB_ID@.
 
 -- be02cf6855d2428ba40df7e9d022f03d
-Subject: Модулът „@UNIT@“ не успя да стартира
+Subject: Модул @UNIT@ не успя да стартира
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
 Модулът „@UNIT@“ не успя да стартира.
 
-Резултатът е: @JOB_RESULT@
+Идентификаторът на задача е @JOB_ID@, а резултатът от нея е @JOB_RESULT@.
 
--- d34d037fff1847e6ae669a370e694725
-Subject: Модулът „@UNIT@“ започна презареждане на настройките си
+-- de5b426a63be47a7b6ac3eaac82e2f6f
+Subject: Модул @UNIT@ се спира
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
-Модулът „@UNIT@“ започна презареждане на настройките си.
+Модулът „@UNIT@“ се спира в момента.
+
+Идентификаторът на задача е @JOB_ID@.
+
+-- 9d1aaa27d60140bd96365438aad20286
+Subject: Модул @UNIT@ вече е спрян
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Спирането на модул „@UNIT@“ завърши.
+
+Идентификаторът на задача е @JOB_ID@, а резултатът от нея е @JOB_RESULT@.
+
+-- d34d037fff1847e6ae669a370e694725
+Subject: Модул @UNIT@ започна презареждане на настройките си
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Модулът „@UNIT@“ започна презареждане на настройките си.(
+
+Идентификаторът на задача е @JOB_ID@.)
 
 -- 7b05ebc668384222baa8881179cfda54
-Subject: Модулът „@UNIT@“ завърши презареждането на настройките си
+Subject: Модулът @UNIT@ завърши презареждането на настройките си
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
@@ -220,13 +260,13 @@
 Резултатът e: @JOB_RESULT@
 
 -- 641257651c1b4ec9a8624d7a40a9e1e7
-Subject: Програмата „@EXECUTABLE@“ не успя да се стартира
+Subject: Програмата @EXECUTABLE@ не успя да се стартира
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
 Програмата „@EXECUTABLE@“ не успя да се стартира.
 
-Върнатият номер на грешка е: @ERRNO@
+Върнатият номер на грешка е: @ERRNO@.
 
 -- 0027229ca0644181a76c4e92458afa2e
 Subject: Поне едно съобщение не бе препратено към syslog
@@ -234,22 +274,17 @@
 Support: %SUPPORT_URL%
 
 Поне едно съобщение не бе препратено към журналната услуга syslog, която
-работи успоредно с journald.
-
-Най-често това указва, че тази реализация на syslog не може да поеме текущия
-обем съобщения.
+работи успоредно с journald. Най-често това указва, че тази реализация на
+syslog не може да поеме текущия обем съобщения.
 
 -- 1dee0369c7fc4736b7099b38ecb46ee7
 Subject: Точката за монтиране не е празна
 Defined-By: systemd
 Support: %SUPPORT_URL%
 
-Директорията „@WHERE@“ не е празна.
-
-Тя е указана като точка за монтиране — или като второ поле във файла
-„/etc/fstab“, или чрез директивата „Where=“ в някой от файловете за
-модул на Systemd.
-
+Директорията „@WHERE@“ не е празна. Тя е указана като точка
+за монтиране — или като второ поле във файла „/etc/fstab“, или чрез
+директивата „Where=“ в някой от файловете за модул на Systemd.
 Това не пречи на самото монтиране, но вече съществуващите там файлове и
 директории няма да се виждат повече, освен ако ръчно не монтирате тази
 непразна директория някъде другаде.
@@ -274,14 +309,14 @@
 Subject: Режимът DNSSEC е изключен, защото сървърът не го поддържа
 Defined-By: systemd
 Support: %SUPPORT_URL%
-Documentation: man:systemd-resolved.service(8) resolved.conf(5)
+Documentation: man:systemd-resolved.service(8)
+Documentation: man:resolved.conf(5)
 
 Локалната услуга за имена (systemd-resolved.service) установи, че
-настроения сървър за DNS не поддържа DNSSEC, затова този режим е изключен.
+настроеният сървър за DNS не поддържа DNSSEC, затова този режим е изключен.
 
 Това се случва, когато директивата „DNSSEC=allow-downgrade“ е включена във
 файла „resolved.conf“ и зададеният сървър за DNS не е съвместим с DNSSEC.
-
 Внимавайте, защото това може да позволи атака, при която трета страна ви
 връща отговори, които да предизвикат понижаването на сигурността от DNSSEC
 до DNS.
@@ -295,8 +330,7 @@
 Support: %SUPPORT_URL%
 Documentation: man:systemd-resolved.service(8)
 
-Заявка или запис в DNS не издържа проверка с DNSSEC.
-
+Заявка или запис в DNS не издържа̀ проверка с DNSSEC.
 Това обикновено показва вмешателство на трета страна в канала ви за връзка.
 
 -- 4d4408cfd0d144859184d1e65d7c8a65
@@ -306,5 +340,191 @@
 Documentation: man:systemd-resolved.service(8)
 
 Анулирана е доверена котва за DNSSEC и трябва да настроите нова.
-
 Понякога новата идва с обновяване на системата.
+
+-- 5eb03494b6584870a536b337290809b3
+Subject: Насрочено е автоматично рестартиране на модул
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Насрочено е автоматично рестартиране на модула „@UNIT@“
+в следствие на директивата „Restart=“.
+
+-- ae8f7b866b0347b9af31fe1c80b127c0
+Subject: Модулът консумира ресурсите
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Модулът „@UNIT@“ завърши работа и изконсумира указаните ресурси.
+
+-- 7ad2d189f7e94e70a38c781354912448
+Subject: Успешен модул
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Модулът „@UNIT@“ успешно премина в „мъртво“ състояние (dead).
+
+-- 0e4284a0caca4bfc81c0bb6786972673
+Subject: Прескочен модул
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Модулът „@UNIT@“ е прескочен поради неуспешно изпълнение на командата в
+директивата „ExecCondition=“ и премина в „мъртво“ състояние (dead) с резултат
+„@UNIT_RESULT@“.
+
+-- d9b373ed55a64feb8242e02dbe79a49c
+Subject: Неуспешен модул
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Модулът „@UNIT@“ премина в състояние за неуспех „failed“ с резултат „@UNIT_RESULT@“.
+
+-- 98e322203f7a4ed290d09fe03c09fe15
+Subject: Завършил модул
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Процесът, настроен за „@COMMAND@=“ към модула „@UNIT@“ завърши работа.
+
+Изходният код е „@EXIT_CODE@“, а изходното състояние — „@EXIT_STATUS@“.
+
+-- 50876a9db00f4c40bde1a2ad381c3a1b
+Subject: Настройките на системата може да доведат до проблеми
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Възможни са следните етикети:
+⁃ „split-usr“ — „/usr“ е отделна файлова система, която не е била монтирана при
+  стартирането на systemd
+⁃ „cgroups-missing“ — ядрото е компилирано без поддръжка на „cgroup“ или е
+  ограничен достъпът до тази подсистема
+⁃ „var-run-bad“ — „/var/run“ не е символна връзка към „/run“
+⁃ "overflowuid-not-65534“ — идентификаторът на непознатия потребител („unknown“)
+   за NFS или пространство за имена на потребители не е е 65534
+⁃ „overflowgid-not-65534“ — идентификаторът на непознатата група („unknown“)
+   за NFS или пространство за имена на групи не е е 65534
+Текущо системата е отбелязана като „@TAINT@“.
+
+-- fe6faa94e7774663a0da52717891d8ef
+Subject: Процес от модула „@UNIT@“ е убит поради липса на памет
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Процес от модула „@UNIT@“ е убит от подсистемата на Linux за
+работа при недостиг на памет (OOM killer). Това обикновено означава, че
+системата е имала  малко памет и се е наложило аварийното ѝ освобождаване.
+Някой процес от модула „@UNIT@“ е бил набелязан като най-добрия
+кандидат и е бил убит от ядрото.
+
+Note that the memory pressure might or might not have been caused by @UNIT@.
+
+-- b61fdac612e94b9182285b998843061f
+Subject: Позволено име на потребител/група @USER_GROUP_NAME@ не съответства на строгите правила за именоване
+Defined-By: systemd
+Support: %SUPPORT_URL%
+Documentation: https://systemd.io/USER_NAMES
+
+Указано е име на потребител/група „@USER_GROUP_NAME@“. То е прието, защото
+отговаря на облекчените. Въпреки това то не отговаря на строгите правила.
+
+Те съответстват на регулярния израз:
+
+^[a-zA-Z_][a-zA-Z0-9_-]{0,30}$
+
+Облекчените правила приемат всички имена без празния низ; имената съдържащи
+нулев байт, контролни знаци, „:“ или „/“; имена, които не са в UTF-8;
+имена които почват или завършват с празни знаци; които са  „.“ или „..“;
+които съдържат само цифри; които започват с „-“ и продължават само с цифри.
+
+-- 1b3bb94037f04bbf81028e135a12d293
+Subject: Не може да се избере име за модул на базата на пътя @MOUNT_POINT@
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Следната точка за монтиране не може да се преобразува в име на монтиращ модул
+(.mount):
+
+    @MOUNT_POINT@
+
+Най-често това се дължи на факта, че пътят за монтиране е по-дълъг от максимума
+за име на модул.
+
+systemd динамично задава модули „.mount“ за всички монтирани ресурси в системата.
+Затова се ползва прост алгоритъм за екраниране на знаци — взема се абсолютния
+път, всички знаци „/“ се заменят с „-“ (с изключение на водещия, който се
+пропуска). Всички знаци извън буквите и числата (вкл. „:“, „-“, „_“, „.“, „\“)
+се заменят с „\xNN“, където NN е шестнадесетичният код на знака. Добавя се и
+суфиксът „.mount“. Полученият низ трябва да е по-къс от 256 знака, за да се
+ползва за име на модул. Ограничението цели всички имена на модули да може да са
+и имена на файлове. Ако низът за име е по-дълъг, той не може да се ползва за име
+на модул. В такъв случай systemd няма да създаде модул и няма да може да се ползва
+за управление на точката на монтиране. Тя няма да се появява в таблицата с модули
+на мениджъра на системата и съответно няма да се извършва безопасно изключване
+при изключването на системата.
+
+Препоръчваме да не ползвате толкова дълги имена като точки за монтиране. Ако все
+пак ги ползвате, ще трябва да ги управлявате независимо от systemd, т.е. сами
+администрирайте монтирането и изключването.
+
+-- b480325f9c394a7b802c231e51a2752c
+Subject: Настроен е специален потребител @OFFENDING_USER@ — това е опасно!
+Defined-By: systemd
+Support: %SUPPORT_URL%
+Documentation: https://systemd.io/UIDS-GIDS
+
+Модулът „@UNIT@“ е настроен да ползва директивата „User=@OFFENDING_USER@“.
+
+Това е опасно. Основното предназначение на „@OFFENDING_USER@“ на системите на
+база Linux е да е собственик на файловете със собственик, който не е известен
+на локалната система. Този потребител се ползва най-вече от клиента за NFS и
+пространствата за имена за потребители. Ако този модул стартира процеси от
+името на този потребител, те може да получат достъп до файловете, които са с
+неизвестен собственик.
+
+Силно препоръчване да стартирате процеси с този потребител, особено на системи
+ползващи NFS или контейнери. Вместо това създайте потребител и негов идентификатор
+специфичен за тази услуга или статично с „systemd-sysusers“, или динамично чрез
+директивата на модула „DynamicUser=“.
+
+-- 1c0454c1bd2241e0ac6fefb4bc631433
+Subject: Модулът systemd-udev-settle.service е остарял
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Препоръчва се да не ползвате остарелия модул на systemd —
+„systemd-udev-settle.service“. Той нарочно забавя процеса на стартиране, но
+всъщност не предоставя гаранциите, които другите системи очакват от него.
+Като цяло е грешка да го ползвате или разчитате на него поради проблеми с
+паралелността.
+
+Традиционно задачата на този модул е да изчака проверката и инициализацията на
+всички устройства на системата, като завършването на стартирането се отлага до
+приключването на тази фаза. Днешните системи не работят така — хардуерните
+устройства се появяват в произволен момент, а проверката и инициализацията им
+може да отнеме много време. В общия случай стартирането не може да се забави
+до инициализацията на всички устройства, защото не е добре дефинирано кои са
+всички устройства и кога се открити. Това се отнася с особено значение за
+устройствата през USB или тези, които се ползват през мрежата.
+
+Програмите, които изискват определен хардуер (напр. мрежово или блоково
+устройство), трябва изрично да чакат конкретния хардуер да стартира, а останалата
+работа трябва да е асинхронна, така че инициализацията на всяко устройство да
+позволява на модулите, зависещи от него, да продължат работа, без да се забавя
+процеса на стартиране.
+
+Ако въпросният софтуер не работи така, а изрично изчаква
+„systemd-udev-settle.service“, това е грешка и трябва да се поправи.
+
+Изпратете доклад на грешка до авторите на следните модули, като поискате да не
+зависят от „systemd-udev-settle.service“, а само от съответното устройство:
+
+    @OFFENDING_UNITS@
+
+-- 7c8a41f37b764941a0e1780b1be2f037
+Subject: Първоначална синхронизация на часовника
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+За първи път след текущото стартиране е извършена синхронизация
+със сървър за NTP — системният часовник е настроен.
diff --git a/catalog/systemd.catalog.in b/catalog/systemd.catalog.in
index 3e08f56..975e77f 100644
--- a/catalog/systemd.catalog.in
+++ b/catalog/systemd.catalog.in
@@ -126,13 +126,6 @@
 
 The system clock has been changed to @REALTIME@ microseconds after January 1st, 1970.
 
--- c7a787079b354eaaa9e77b371893cd27 de
-Subject: Zeitänderung
-Defined-By: systemd
-Support: %SUPPORT_URL%
-
-Die System-Zeit wurde geändert auf @REALTIME@ Mikrosekunden nach dem 1. Januar 1970.
-
 -- 45f82f4aef7a4bbf942ce861d1f20990
 Subject: Time zone change to @TIMEZONE@
 Defined-By: systemd
@@ -151,7 +144,7 @@
 
 Kernel start-up required @KERNEL_USEC@ microseconds.
 
-Initial RAM disk start-up required @INITRD_USEC@ microseconds.
+Initrd start-up required @INITRD_USEC@ microseconds.
 
 Userspace start-up required @USERSPACE_USEC@ microseconds.
 
@@ -188,6 +181,15 @@
 System shutdown has been initiated. The shutdown has now begun and
 all system services are terminated and all file systems unmounted.
 
+-- c14aaf76ec284a5fa1f105f88dfb061c
+Subject: System factory reset initiated
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+System factory reset has been initiated. The precise operation this
+executes is implementation-defined, but typically has the effect of
+reverting the system's state and configuration to vendor defaults.
+
 -- 7d4958e842da4a758f6c1cdc7b36dcc5
 Subject: A start job for unit @UNIT@ has begun execution
 Defined-By: systemd
@@ -517,3 +519,33 @@
 systemd-udev-settle.service:
 
     @OFFENDING_UNITS@
+
+-- 7c8a41f37b764941a0e1780b1be2f037
+Subject: Initial clock synchronization
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+For the first time during the current boot an NTP synchronization has been
+acquired and the local system clock adjustment has been initiated.
+
+-- 7db73c8af0d94eeb822ae04323fe6ab6
+Subject: Initial clock bump
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+The system clock has been advanced based on a timestamp file on disk, in order
+to ensure it remains roughly monotonic – even across reboots – if an RTC is not
+available or is unreliable.
+
+-- 3f7d5ef3e54f4302b4f0b143bb270cab
+Subject: TPM PCR Extended
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+The Trusted Platform Module's (TPM) Platform Configuration Register (PCR)
+@PCR@, on banks @BANKS@, has been extended with the string '@MEASURING@'.
+
+Whenever the system transitions to a new runtime phase, the specified PCR is
+extended with a different string, to ensure that security policies for
+TPM-bound secrets and other resources are limited to specific phases of the
+runtime.
diff --git a/catalog/systemd.de.catalog.in b/catalog/systemd.de.catalog.in
index 97b16d0..17c8b78 100644
--- a/catalog/systemd.de.catalog.in
+++ b/catalog/systemd.de.catalog.in
@@ -11,3 +11,10 @@
 
 Üblicherweise ist dies ein Hinweis auf einen Programmfehler und sollte
 als Fehler dem jeweiligen Hersteller gemeldet werden.
+
+-- c7a787079b354eaaa9e77b371893cd27
+Subject: Zeitänderung
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Die System-Zeit wurde geändert auf @REALTIME@ Mikrosekunden nach dem 1. Januar 1970.
diff --git a/catalog/systemd.pl.catalog.in b/catalog/systemd.pl.catalog.in
index 58706f5..fce35ee 100644
--- a/catalog/systemd.pl.catalog.in
+++ b/catalog/systemd.pl.catalog.in
@@ -187,6 +187,16 @@
 Zainicjowano wyłączenie systemu. Wyłączenie zostało rozpoczęte i wszystkie
 usługi systemowe zostały zakończone, a wszystkie systemy plików odmontowane.
 
+-- c14aaf76ec284a5fa1f105f88dfb061c
+Subject: Zainicjowano przywrócenie danych fabrycznych systemu
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Zainicjowano przywrócenie danych fabrycznych systemu. Dokładne działanie,
+jakie zostanie wykonane jest określone przez implementację, ale zwykle
+powoduje przywrócenie stanu i konfiguracji systemu do domyślnych wartości
+producenta.
+
 -- 7d4958e842da4a758f6c1cdc7b36dcc5
 Subject: Rozpoczęto wykonywanie zadania uruchamiania dla jednostki @UNIT@
 Defined-By: systemd
@@ -524,3 +534,11 @@
 bez zależności od usługi systemd-udev-settle.service:
 
     @OFFENDING_UNITS@
+
+-- 7c8a41f37b764941a0e1780b1be2f037
+Subject: Początkowa synchronizacja zegara
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Po raz pierwszy podczas obecnego uruchomienia uzyskano synchronizację NTP
+i zainicjowano regulację lokalnego zegara systemowego.
diff --git a/coccinelle/bool-cast.cocci b/coccinelle/bool-cast.cocci
index 051ccb9..a3311f0 100644
--- a/coccinelle/bool-cast.cocci
+++ b/coccinelle/bool-cast.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 bool b;
 expression y;
diff --git a/coccinelle/close-above-stdio.cocci b/coccinelle/close-above-stdio.cocci
index 44b3b1c..93a0a85 100644
--- a/coccinelle/close-above-stdio.cocci
+++ b/coccinelle/close-above-stdio.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression fd;
 @@
diff --git a/coccinelle/cmp.cocci b/coccinelle/cmp.cocci
index a34cbe5..d5ab0f2 100644
--- a/coccinelle/cmp.cocci
+++ b/coccinelle/cmp.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression x, y;
 @@
diff --git a/coccinelle/const-strlen.disabled b/coccinelle/const-strlen.disabled
index 30a6e5a..8b1a635 100644
--- a/coccinelle/const-strlen.disabled
+++ b/coccinelle/const-strlen.disabled
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 constant s;
 @@
diff --git a/coccinelle/debug-logging.cocci b/coccinelle/debug-logging.cocci
index a679dab..2885350 100644
--- a/coccinelle/debug-logging.cocci
+++ b/coccinelle/debug-logging.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 @@
 (
diff --git a/coccinelle/div-round-up.cocci b/coccinelle/div-round-up.cocci
index a0c6df9..609ec87 100644
--- a/coccinelle/div-round-up.cocci
+++ b/coccinelle/div-round-up.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression x, y;
 @@
diff --git a/coccinelle/dup-fcntl.cocci b/coccinelle/dup-fcntl.cocci
index 8b133b3..2c87f70 100644
--- a/coccinelle/dup-fcntl.cocci
+++ b/coccinelle/dup-fcntl.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 /* We want to stick with dup() in test-fd-util.c */
 position p : script:python() { p[0].file != "src/test/test-fd-util.c" };
diff --git a/coccinelle/empty-or-dash.cocci b/coccinelle/empty-or-dash.cocci
index bebaead..56246af 100644
--- a/coccinelle/empty-or-dash.cocci
+++ b/coccinelle/empty-or-dash.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression s;
 @@
diff --git a/coccinelle/empty-or-root.cocci b/coccinelle/empty-or-root.cocci
index bf2f614..d36f0c8 100644
--- a/coccinelle/empty-or-root.cocci
+++ b/coccinelle/empty-or-root.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression s;
 @@
diff --git a/coccinelle/empty-to-null.cocci b/coccinelle/empty-to-null.cocci
index bc6c656..82819e9 100644
--- a/coccinelle/empty-to-null.cocci
+++ b/coccinelle/empty-to-null.cocci
@@ -1,6 +1,11 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
-/* Avoid running this transformation on the empty_to_null function itself */
-position p : script:python() { p[0].current_element != "empty_to_null" };
+/* Avoid running this transformation on the empty_to_null macro itself.
+ * See the note in strempty.cocci to understand the weird magic below.
+*/
+position p : script:python() {
+        not (p[0].file == "src/basic/string-util.h" and p[0].current_element == "something_else")
+};
 expression s;
 @@
 
diff --git a/coccinelle/empty-to-root.cocci b/coccinelle/empty-to-root.cocci
index 3720497..9a65a69 100644
--- a/coccinelle/empty-to-root.cocci
+++ b/coccinelle/empty-to-root.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression s;
 @@
diff --git a/coccinelle/enotsup.cocci b/coccinelle/enotsup.cocci
index c65734d..47ac4b7 100644
--- a/coccinelle/enotsup.cocci
+++ b/coccinelle/enotsup.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 @@
 - ENOTSUP
diff --git a/coccinelle/equals-null.cocci b/coccinelle/equals-null.cocci
index 3fce0f4..92c7054 100644
--- a/coccinelle/equals-null.cocci
+++ b/coccinelle/equals-null.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression e;
 statement s;
diff --git a/coccinelle/errno-check.cocci b/coccinelle/errno-check.cocci
index 709cb4a..f6f0071 100644
--- a/coccinelle/errno-check.cocci
+++ b/coccinelle/errno-check.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 constant c;
 @@
diff --git a/coccinelle/errno.cocci b/coccinelle/errno.cocci
index 4e594e7..dd886ea 100644
--- a/coccinelle/errno.cocci
+++ b/coccinelle/errno.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 identifier log_LEVEL_errno =~ "^log_(debug|info|notice|warning|error|emergency)_errno$";
 local idexpression r;
diff --git a/coccinelle/exit-0.cocci b/coccinelle/exit-0.cocci
index 8b81600..ff3d965 100644
--- a/coccinelle/exit-0.cocci
+++ b/coccinelle/exit-0.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 @@
 - exit(0);
diff --git a/coccinelle/flags-set.cocci b/coccinelle/flags-set.cocci
index 22620f1..bcf08db 100644
--- a/coccinelle/flags-set.cocci
+++ b/coccinelle/flags-set.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 /* Disable this transformation in cases where it doesn't make sense or
  * where it makes the resulting expression more confusing
diff --git a/coccinelle/fopen-unlocked.cocci b/coccinelle/fopen-unlocked.cocci
index 7870f8c..1caa698 100644
--- a/coccinelle/fopen-unlocked.cocci
+++ b/coccinelle/fopen-unlocked.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression f, path, options;
 @@
diff --git a/coccinelle/free_and_replace.cocci b/coccinelle/free_and_replace.cocci
index 9dcdbf4..7d8b6a7 100644
--- a/coccinelle/free_and_replace.cocci
+++ b/coccinelle/free_and_replace.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression p, q;
 @@
diff --git a/coccinelle/hashmap_free.cocci b/coccinelle/hashmap_free.cocci
index 86b9542..31e1279 100644
--- a/coccinelle/hashmap_free.cocci
+++ b/coccinelle/hashmap_free.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression p;
 @@
diff --git a/coccinelle/htonl.cocci b/coccinelle/htonl.cocci
index 4e69bb7..c247d24 100644
--- a/coccinelle/htonl.cocci
+++ b/coccinelle/htonl.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression s;
 @@
diff --git a/coccinelle/in_set.cocci b/coccinelle/in_set.cocci
index 1c17c7d..a3b02f9 100644
--- a/coccinelle/in_set.cocci
+++ b/coccinelle/in_set.cocci
@@ -1,25 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /* Limit the number of expressions to 6 for performance reasons */
+
+@ is_in_assert_cc @
+identifier id = assert_cc;
+position p1;
+expression e;
+constant n0;
+@@
+
+ id(e@p1 == n0 || ...);
+
 @@
 expression e;
+position p2 != is_in_assert_cc.p1;
 /* Exclude JsonVariant * from the transformation, as it can't work with the
  * current version of the IN_SET macro */
 typedef JsonVariant;
 type T != JsonVariant*;
 constant T n0, n1, n2, n3, n4, n5;
 @@
+
 (
-- e == n0 || e == n1 || e == n2 || e == n3 || e == n4 || e == n5
+- e@p2 == n0 || e == n1 || e == n2 || e == n3 || e == n4 || e == n5
 + IN_SET(e, n0, n1, n2, n3, n4, n5)
 |
-- e == n0 || e == n1 || e == n2 || e == n3 || e == n4
+- e@p2 == n0 || e == n1 || e == n2 || e == n3 || e == n4
 + IN_SET(e, n0, n1, n2, n3, n4)
 |
-- e == n0 || e == n1 || e == n2 || e == n3
+- e@p2 == n0 || e == n1 || e == n2 || e == n3
 + IN_SET(e, n0, n1, n2, n3)
 |
-- e == n0 || e == n1 || e == n2
+- e@p2 == n0 || e == n1 || e == n2
 + IN_SET(e, n0, n1, n2)
 |
-- e == n0 || e == n1
+- e@p2 == n0 || e == n1
 + IN_SET(e, n0, n1)
 )
diff --git a/coccinelle/iovec-make.cocci b/coccinelle/iovec-make.cocci
index 7a0d4ce..7911688 100644
--- a/coccinelle/iovec-make.cocci
+++ b/coccinelle/iovec-make.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression x, y, p, l;
 @@
diff --git a/coccinelle/isempty.cocci b/coccinelle/isempty.cocci
index e0a9f07..b1b9277 100644
--- a/coccinelle/isempty.cocci
+++ b/coccinelle/isempty.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 /* Disable this transformation for the test-string-util.c */
 position p : script:python() { p[0].file != "src/test/test-string-util.c" };
diff --git a/coccinelle/log-json.cocci b/coccinelle/log-json.cocci
index 3730fd6..d184e56 100644
--- a/coccinelle/log-json.cocci
+++ b/coccinelle/log-json.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression e, v, flags;
 expression list args;
diff --git a/coccinelle/macros.h b/coccinelle/macros.h
index 62177f0..adfea5f 100644
--- a/coccinelle/macros.h
+++ b/coccinelle/macros.h
@@ -1,4 +1,6 @@
-/* Collected macros from our systemd codebase to make the cocci semantic
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Collected macros from our systemd codebase to make the cocci semantic
  * parser happy. Inspired by the original cocci macros file
  * /usr/lib64/coccinelle/standard.h (including the YACFE_* symbols)
  */
@@ -41,7 +43,7 @@
 
 // src/basic/umask-util.h
 #define _cleanup_umask_
-#define RUN_WITH_UMASK(mask)                                            \
+#define WITH_UMASK(mask)                                            \
         for (_cleanup_umask_ mode_t _saved_umask_ = umask(mask) | S_IFMT; \
              FLAGS_SET(_saved_umask_, S_IFMT);                          \
              _saved_umask_ &= 0777)
@@ -163,7 +165,7 @@
         } while (false)
 
 #define LIST_JUST_US(name,item)                                         \
-        (!(item)->name##_prev && !(item)->name##_next)                  \
+        (!(item)->name##_prev && !(item)->name##_next)
 #define LIST_FOREACH(name,i,head)                                       \
         for ((i) = (head); (i); (i) = (i)->name##_next)
 #define LIST_FOREACH_SAFE(name,i,n,head)                                \
@@ -187,8 +189,6 @@
              (i) != (p);                                                \
              (i) = (i)->name##_next ? (i)->name##_next : (head))
 
-#define LIST_IS_EMPTY(head)                                             \
-        (!(head))
 #define LIST_JOIN(name,a,b)                                             \
         do {                                                            \
                 assert(b);                                              \
diff --git a/coccinelle/malloc_multiply.cocci b/coccinelle/malloc_multiply.cocci
index 3284edf..320d257 100644
--- a/coccinelle/malloc_multiply.cocci
+++ b/coccinelle/malloc_multiply.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression q, n, m;
 @@
diff --git a/coccinelle/mempcpy.cocci b/coccinelle/mempcpy.cocci
new file mode 100644
index 0000000..efb657a
--- /dev/null
+++ b/coccinelle/mempcpy.cocci
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+@@
+expression x, y, z;
+@@
+- memcpy(x, y, z);
+- x += z;
++ x = mempcpy(x, y, z);
+@@
+expression x, y, z;
+@@
+- memcpy_safe(x, y, z);
+- x += z;
++ x = mempcpy_safe(x, y, z);
diff --git a/coccinelle/memzero.cocci b/coccinelle/memzero.cocci
index 8198cc8..90fa0dd 100644
--- a/coccinelle/memzero.cocci
+++ b/coccinelle/memzero.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression s;
 @@
diff --git a/coccinelle/mfree.cocci b/coccinelle/mfree.cocci
index 1389cd3..191cd62 100644
--- a/coccinelle/mfree.cocci
+++ b/coccinelle/mfree.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression p;
 @@
diff --git a/coccinelle/mfree_return.cocci b/coccinelle/mfree_return.cocci
index 15e6c7d..c2c4cb3 100644
--- a/coccinelle/mfree_return.cocci
+++ b/coccinelle/mfree_return.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 /* Avoid running this transformation on the mfree function itself */
 position p : script:python() { p[0].current_element != "mfree" };
diff --git a/coccinelle/no-if-assignments.cocci b/coccinelle/no-if-assignments.cocci
index 9f63e90..9fbc018 100644
--- a/coccinelle/no-if-assignments.cocci
+++ b/coccinelle/no-if-assignments.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression p, q;
 identifier r;
diff --git a/coccinelle/not_in_set.cocci b/coccinelle/not_in_set.cocci
index 3486cff..0840109 100644
--- a/coccinelle/not_in_set.cocci
+++ b/coccinelle/not_in_set.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /* Limit the number of expressions to 6 for performance reasons */
 @@
 expression e;
diff --git a/coccinelle/o-ndelay.cocci b/coccinelle/o-ndelay.cocci
index 669424a..8b7a150 100644
--- a/coccinelle/o-ndelay.cocci
+++ b/coccinelle/o-ndelay.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 @@
 - O_NDELAY
diff --git a/coccinelle/reallocarray.cocci b/coccinelle/reallocarray.cocci
index 21fe9df..85a8b3b 100644
--- a/coccinelle/reallocarray.cocci
+++ b/coccinelle/reallocarray.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression q, p, n, m;
 @@
diff --git a/coccinelle/redundant-if.cocci b/coccinelle/redundant-if.cocci
index 515e36e..6582d63 100644
--- a/coccinelle/redundant-if.cocci
+++ b/coccinelle/redundant-if.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression r;
 @@
diff --git a/coccinelle/run-coccinelle.sh b/coccinelle/run-coccinelle.sh
index d1af412..3249722 100755
--- a/coccinelle/run-coccinelle.sh
+++ b/coccinelle/run-coccinelle.sh
@@ -1,4 +1,6 @@
-#!/bin/bash -e
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -e
 
 # Exclude following paths from the Coccinelle transformations
 EXCLUDED_PATHS=(
@@ -10,19 +12,20 @@
     "src/libsystemd/sd-journal/lookup3.c"
 )
 
-top="$(git rev-parse --show-toplevel)"
-args=
+TOP_DIR="$(git rev-parse --show-toplevel)"
+ARGS=()
 
 # Create an array from files tracked by git...
-mapfile -t files < <(git ls-files ':/*.[ch]')
+mapfile -t FILES < <(git ls-files ':/*.[ch]')
 # ...and filter everything that matches patterns from EXCLUDED_PATHS
 for excl in "${EXCLUDED_PATHS[@]}"; do
-    files=(${files[@]//$excl})
+    # shellcheck disable=SC2206
+    FILES=(${FILES[@]//$excl})
 done
 
 case "$1" in
     -i)
-        args="$args --in-place"
+        ARGS+=(--in-place)
         shift
         ;;
 esac
@@ -32,12 +35,14 @@
     exit 1
 fi
 
-for SCRIPT in ${@-$top/coccinelle/*.cocci}; do
-    echo "--x-- Processing $SCRIPT --x--"
-    TMPFILE=`mktemp`
-    echo "+ spatch --sp-file $SCRIPT $args ..."
+[[ ${#@} -ne 0 ]] && SCRIPTS=("$@") || SCRIPTS=("$TOP_DIR"/coccinelle/*.cocci)
+
+for script in "${SCRIPTS[@]}"; do
+    echo "--x-- Processing $script --x--"
+    TMPFILE="$(mktemp)"
+    echo "+ spatch --sp-file $script ${ARGS[*]} ..."
     parallel --halt now,fail=1 --keep-order --noswap --max-args=20 \
-             spatch --macro-file="$top/coccinelle/macros.h" --sp-file $SCRIPT $args ::: "${files[@]}" \
+             spatch --macro-file="$TOP_DIR/coccinelle/macros.h" --sp-file "$script" "${ARGS[@]}" ::: "${FILES[@]}" \
              2>"$TMPFILE" || cat "$TMPFILE"
-    echo -e "--x-- Processed $SCRIPT --x--\n"
+    echo -e "--x-- Processed $script --x--\n"
 done
diff --git a/coccinelle/safe_close-no-if.cocci b/coccinelle/safe_close-no-if.cocci
index 81c5678..881ce1f 100644
--- a/coccinelle/safe_close-no-if.cocci
+++ b/coccinelle/safe_close-no-if.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression fd;
 @@
diff --git a/coccinelle/safe_close.cocci b/coccinelle/safe_close.cocci
index 6fedd80..49254b6 100644
--- a/coccinelle/safe_close.cocci
+++ b/coccinelle/safe_close.cocci
@@ -1,18 +1,19 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression fd;
 @@
 - close(fd);
-- fd = -1;
+- fd = -EBADF;
 + fd = safe_close(fd);
 @@
 expression fd;
 @@
 - close_nointr(fd);
-- fd = -1;
+- fd = -EBADF;
 + fd = safe_close(fd);
 @@
 expression fd;
 @@
 - safe_close(fd);
-- fd = -1;
+- fd = -EBADF;
 + fd = safe_close(fd);
diff --git a/coccinelle/safe_closedir.cocci b/coccinelle/safe_closedir.cocci
index 743ffd9..8981825 100644
--- a/coccinelle/safe_closedir.cocci
+++ b/coccinelle/safe_closedir.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression p;
 @@
diff --git a/coccinelle/safe_fclose.cocci b/coccinelle/safe_fclose.cocci
index 6961cd0..fc1b584 100644
--- a/coccinelle/safe_fclose.cocci
+++ b/coccinelle/safe_fclose.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression p;
 @@
diff --git a/coccinelle/sd_event_source_disable_unref.cocci b/coccinelle/sd_event_source_disable_unref.cocci
index 2763fef..659aa00 100644
--- a/coccinelle/sd_event_source_disable_unref.cocci
+++ b/coccinelle/sd_event_source_disable_unref.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression p;
 @@
diff --git a/coccinelle/set_ensure_put.cocci b/coccinelle/set_ensure_put.cocci
index 92d7970..cfcd77b 100644
--- a/coccinelle/set_ensure_put.cocci
+++ b/coccinelle/set_ensure_put.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 local idexpression r;
 expression p, k, x;
diff --git a/coccinelle/strdupa.cocci b/coccinelle/strdupa.cocci
new file mode 100644
index 0000000..665736e
--- /dev/null
+++ b/coccinelle/strdupa.cocci
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+@@
+expression x;
+@@
+- strdupa(x)
++ strdupa_safe(x)
+@@
+expression x, n;
+@@
+- strndupa(x, n)
++ strndupa_safe(x, n)
diff --git a/coccinelle/strempty.cocci b/coccinelle/strempty.cocci
index 0868184..d36f092 100644
--- a/coccinelle/strempty.cocci
+++ b/coccinelle/strempty.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 /* Avoid running this transformation on the strempty function itself and
  * on the "make_expression" macro in src/libsystemd/sd-bus/bus-convenience.c.
diff --git a/coccinelle/strjoin.cocci b/coccinelle/strjoin.cocci
index 46f70c4..1efff70 100644
--- a/coccinelle/strjoin.cocci
+++ b/coccinelle/strjoin.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 position p : script:python() { p[0].current_element != "test_strjoin" };
 expression t;
diff --git a/coccinelle/strjoina.cocci b/coccinelle/strjoina.cocci
index b209633..891b22a 100644
--- a/coccinelle/strjoina.cocci
+++ b/coccinelle/strjoina.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 position p : script:python() { p[0].current_element != "test_strjoina" };
 expression n, m;
diff --git a/coccinelle/strv_free.cocci b/coccinelle/strv_free.cocci
index 0ad56f7..8eddfc5 100644
--- a/coccinelle/strv_free.cocci
+++ b/coccinelle/strv_free.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression p;
 @@
diff --git a/coccinelle/swap-two.cocci b/coccinelle/swap-two.cocci
index edf7d32..d80c4e0 100644
--- a/coccinelle/swap-two.cocci
+++ b/coccinelle/swap-two.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression x, y, z;
 @@
diff --git a/coccinelle/synthetic-errno.cocci b/coccinelle/synthetic-errno.cocci
index dcae069..6826ea4 100644
--- a/coccinelle/synthetic-errno.cocci
+++ b/coccinelle/synthetic-errno.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 expression e;
 expression list args;
diff --git a/coccinelle/take-fd.cocci b/coccinelle/take-fd.cocci
index f7124e7..396d696 100644
--- a/coccinelle/take-fd.cocci
+++ b/coccinelle/take-fd.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 local idexpression p;
 expression q;
diff --git a/coccinelle/take-ptr.cocci b/coccinelle/take-ptr.cocci
index 0cebe81..3251d3e 100644
--- a/coccinelle/take-ptr.cocci
+++ b/coccinelle/take-ptr.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 local idexpression p;
 expression q;
diff --git a/coccinelle/timestamp-is-set.cocci b/coccinelle/timestamp-is-set.cocci
new file mode 100644
index 0000000..2d251fa
--- /dev/null
+++ b/coccinelle/timestamp-is-set.cocci
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+@@
+expression x;
+constant USEC_INFINITY = USEC_INFINITY;
+/* We want to stick with the literal expression in the implementation of timestamp_is_set(), i.e. in time-util.c */
+position p : script:python() { p[0].file != "src/basic/time-util.h" };
+@@
+(
+- x > 0 && x < USEC_INFINITY
++ timestamp_is_set(x)
+|
+- x < USEC_INFINITY && x > 0
++ timestamp_is_set(x)
+|
+- x@p > 0 && x != USEC_INFINITY
++ timestamp_is_set(x)
+|
+- x != USEC_INFINITY && x > 0
++ timestamp_is_set(x)
+|
+- x != 0 && x < USEC_INFINITY
++ timestamp_is_set(x)
+|
+- x < USEC_INFINITY && x != 0
++ timestamp_is_set(x)
+|
+- x != 0 && x != USEC_INFINITY
++ timestamp_is_set(x)
+|
+- x != USEC_INFINITY && x != 0
++ timestamp_is_set(x)
+|
+- !IN_SET(x, 0, USEC_INFINITY)
++ timestamp_is_set(x)
+|
+- !IN_SET(x, USEC_INFINITY, 0)
++ timestamp_is_set(x)
+)
+@@
+expression x;
+constant USEC_INFINITY = USEC_INFINITY;
+@@
+(
+- x <= 0 || x >= USEC_INFINITY
++ !timestamp_is_set(x)
+|
+- x >= USEC_INFINITY || x <= 0
++ !timestamp_is_set(x)
+|
+- x <= 0 || x == USEC_INFINITY
++ !timestamp_is_set(x)
+|
+- x == USEC_INFINITY || x <= 0
++ !timestamp_is_set(x)
+|
+- x == 0 || x >= USEC_INFINITY
++ !timestamp_is_set(x)
+|
+- x >= USEC_INFINITY || x == 0
++ !timestamp_is_set(x)
+|
+- x == 0 || x == USEC_INFINITY
++ !timestamp_is_set(x)
+|
+- x == USEC_INFINITY || x == 0
++ !timestamp_is_set(x)
+|
+- IN_SET(x, 0, USEC_INFINITY)
++ !timestamp_is_set(x)
+|
+- IN_SET(x, USEC_INFINITY, 0)
++ !timestamp_is_set(x)
+)
diff --git a/coccinelle/while-true.cocci b/coccinelle/while-true.cocci
index c23fb11..3ea70bc 100644
--- a/coccinelle/while-true.cocci
+++ b/coccinelle/while-true.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 statement s;
 @@
diff --git a/coccinelle/xsprintf.cocci b/coccinelle/xsprintf.cocci
index 660a35e..3b38090 100644
--- a/coccinelle/xsprintf.cocci
+++ b/coccinelle/xsprintf.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 position p : script:python() { not p[0].file.startswith("man/") };
 expression e, fmt;
diff --git a/coccinelle/zz-drop-braces.cocci b/coccinelle/zz-drop-braces.cocci
index 34bf12f..8c3be01 100644
--- a/coccinelle/zz-drop-braces.cocci
+++ b/coccinelle/zz-drop-braces.cocci
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 @@
 position p : script:python() { p[0].file != "src/journal/lookup3.c" };
 identifier id;
diff --git a/configure b/configure
index fb9d01e..e130c6c 100755
--- a/configure
+++ b/configure
@@ -2,22 +2,23 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 set -e
 
-cflags=CFLAGS="$CFLAGS"
-cxxflags=CXXFLAGS="$CXXFLAGS"
-declare -a args
-j=0
-for i in "$@"; do
-    case "$i" in
+cflags="CFLAGS=${CFLAGS-}"
+cxxflags="CXXFLAGS=${CXXFLAGS-}"
+args=()
+
+for arg in "$@"; do
+    case "$arg" in
         CFLAGS=*)
-            cflags="$i";;
+            cflags="$arg"
+            ;;
         CXXFLAGS=*)
-            cxxflags="$i";;
-	*)
-	    args[$j]="$i"
-	    j=$((j+1))
+            cxxflags="$arg"
+            ;;
+        *)
+            args+=("$arg")
     esac
 done
 
-export "$cflags" "$cxxflags"
+export "${cflags?}" "${cxxflags?}"
 set -x
 exec meson build "${args[@]}"
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
index 31b63b4..c777fa7 100644
--- a/docs/ARCHITECTURE.md
+++ b/docs/ARCHITECTURE.md
@@ -2,65 +2,120 @@
 title: systemd Repository Architecture
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
-# Code Map
+# The systemd Repository Architecture
 
-This section will attempt to provide a high-level overview of the various
-components of the systemd repository.
+## Code Map
 
-# Source Code
+This document provides a high-level overview of the various components of the
+systemd repository.
+
+## Source Code
 
 Directories in `src/` provide the implementation of all daemons, libraries and
 command-line tools shipped by the project. There are many, and more are
 constantly added, so we will not enumerate them all here — the directory
 names are self-explanatory.
 
-## Shared Code
+### Shared Code
 
-You might wonder what kind of common code belongs in `src/shared/` and what
-belongs in `src/basic/`. The split is like this: anything that is used to
-implement the public shared objects we provide (`sd-bus`, `sd-login`,
-`sd-id128`, `nss-systemd`, `nss-mymachines`, `nss-resolve`, `nss-myhostname`,
-`pam_systemd`), must be located in `src/basic` (those objects are not allowed
-to link to `libsystemd-shared.so`). Conversely, anything which is shared
-between multiple components and does not need to be in `src/basic/`, should be
-in `src/shared/`.
+The code that is shared between components is split into a few directories,
+each with a different purpose:
+
+- `src/basic/` and `src/fundamental/` — those directories contain code
+  primitives that are used by all other code. `src/fundamental/` is stricter,
+  because it used for EFI and user-space code, while `src/basic/` is only used
+  for user-space code. The code in `src/fundamental/` cannot depend on any
+  other code in the tree, and `src/basic/` can depend only on itself and
+  `src/fundamental/`. For user-space, a static library is built from this code
+  and linked statically in various places.
+
+- `src/libsystemd/` implements the `libsystemd.so` shared library (also
+  available as static `libsystemd.a`). This code may use anything in
+  `src/basic/` or `src/fundamental/`.
+
+- `src/shared/` provides various utilities and code shared between other
+  components that is exposed as the `libsystemd-shared-<nnn>.so` shared library.
+
+The other subdirectories implement individual components. They may depend only
+on `src/fundamental/` + `src/basic/`, or also on `src/libsystemd/`, or also on
+`src/shared/`.
+
+You might wonder what kind of code belongs where. In general, the rule is that
+code should be linked as few times as possible, ideally only once. Thus code that
+is used by "higher-level" components (e.g. our binaries which are linked to
+`libsystemd-shared-<nnn>.so`), would go to a subdirectory specific to that
+component if it is only used there. If the code is to be shared between
+components, it'd go to `src/shared/`. Shared code that is used by multiple
+components that do not link to `libsystemd-shared-<nnn>.so` may live either in
+`src/libsystemd/`, `src/basic/`, or `src/fundamental/`. Any code that is used
+only for EFI goes under `src/boot/efi/`, and `src/fundamental/` if is shared
+with non-EFI compoenents.
 
 To summarize:
 
+`src/fundamental/`
+- may be used by all code in the tree
+- may not use any code outside of `src/fundamental/`
+
 `src/basic/`
 - may be used by all code in the tree
-- may not use any code outside of `src/basic/`
+- may not use any code outside of `src/fundamental/` and `src/basic/`
 
 `src/libsystemd/`
-- may be used by all code in the tree, except for code in `src/basic/`
-- may not use any code outside of `src/basic/`, `src/libsystemd/`
+- may be used by all code in the tree that links to `libsystem.so`
+- may not use any code outside of `src/fundamental/`, `src/basic/`, and
+  `src/libsystemd/`
 
 `src/shared/`
 - may be used by all code in the tree, except for code in `src/basic/`,
-`src/libsystemd/`, `src/nss-*`, `src/login/pam_systemd.*`, and files under
-`src/journal/` that end up in `libjournal-client.a` convenience library.
-- may not use any code outside of `src/basic/`, `src/libsystemd/`, `src/shared/`
+  `src/libsystemd/`, `src/nss-*`, `src/login/pam_systemd.*`, and files under
+  `src/journal/` that end up in `libjournal-client.a` convenience library.
+- may not use any code outside of `src/fundamental/`, `src/basic/`,
+  `src/libsystemd/`, `src/shared/`
 
-## PID 1
+### PID 1
 
 Code located in `src/core/` implements the main logic of the systemd system (and user)
 service manager.
 
 BPF helpers written in C and used by PID 1 can be found under `src/core/bpf/`.
 
-## UDEV
+#### Implementing Unit Settings
+
+The system and session manager supports a large number of unit settings. These can generally
+be configured in three ways:
+
+1. Via textual, INI-style configuration files called *unit* *files*
+2. Via D-Bus messages to the manager
+3. Via the `systemd-run` and `systemctl set-property` commands
+
+From a user's perspective, the third is a wrapper for the second. To implement a new unit
+setting, it is necessary to support all three input methods:
+
+1. *unit* *files* are parsed in `src/core/load-fragment.c`, with many simple and fixed-type
+unit settings being parsed by common helpers, with the definition in the generator file
+`src/core/load-fragment-gperf.gperf.in`
+2. D-Bus messages are defined and parsed in `src/core/dbus-*.c`
+3. `systemd-run` and `systemctl set-property` do client-side parsing and translation into
+D-Bus messages in `src/shared/bus-unit-util.c`
+
+So that they are exercised by the fuzzing CI, new unit settings should also be listed in the
+text files under `test/fuzz/fuzz-unit-file/`.
+
+### systemd-udev
 
 Sources for the udev daemon and command-line tool (single binary) can be found under
 `src/udev/`.
 
-## Unit Tests
+### Unit Tests
 
 Source files found under `src/test/` implement unit-level testing, mostly for
 modules found in `src/basic/` and `src/shared/`, but not exclusively. Each test
 file is compiled in a standalone binary that can be run to exercise the
-corresponding module. While most of the tests can be ran by any user, some
+corresponding module. While most of the tests can be run by any user, some
 require privileges, and will attempt to clearly log about what they need
 (mostly in the form of effective capabilities). These tests are self-contained,
 and generally safe to run on the host without side effects.
@@ -68,54 +123,81 @@
 Ideally, every module in `src/basic/` and `src/shared/` should have a
 corresponding unit test under `src/test/`, exercising every helper function.
 
-# Integration Tests
+### Fuzzing
 
-Sources in `test/` implement system-level testing for executables, libraries and
-daemons that are shipped by the project. They require privileges to run, and
-are not safe to execute directly on a host. By default they will build an image
-and run the test under it via `QEMU` or `systemd-nspawn`.
+Fuzzers are a type of unit tests that execute code on an externally-supplied
+input sample. Fuzzers are called `fuzz-*`. Fuzzers for `src/basic/` and
+`src/shared` live under `src/fuzz/`, and those for other parts of the codebase
+should be located next to the code they test.
 
-Most of those tests should be able to run via `systemd-nspawn`, which is orders of
-magnitude faster than `QEMU`, but some tests require privileged operations like
-using `dm-crypt` or `loopdev`. They are clearly marked if that is the case.
+Files under `test/fuzz/` contain input data for fuzzers, one subdirectory for
+each fuzzer. Some of the files are "seed corpora", i.e. files that contain
+lists of settings and input values intended to generate initial coverage, and
+other files are samples saved by the fuzzing engines when they find an issue.
+
+When adding new input samples under `test/fuzz/*/`, please use some
+short-but-meaningful names. Names of meson tests include the input file name
+and output looks awkward if they are too long.
+
+Fuzzers are invoked primarily in three ways: firstly, each fuzzer is compiled
+as a normal executable and executed for each of the input samples under
+`test/fuzz/` as part of the test suite. Secondly, fuzzers may be instrumented
+with sanitizers and invoked as part of the test suite (if `-Dfuzz-tests=true`
+is configured). Thirdly, fuzzers are executed through fuzzing engines that try
+to find new "interesting" inputs through coverage feedback and massive
+parallelization; see the links for oss-fuzz in [Code quality](CODE_QUALITY.md).
+For testing and debugging, fuzzers can be executed as any other program,
+including under `valgrind` or `gdb`.
+
+## Integration Tests
+
+Sources in `test/TEST-*` implement system-level testing for executables,
+libraries and daemons that are shipped by the project. They require privileges
+to run, and are not safe to execute directly on a host. By default they will
+build an image and run the test under it via `qemu` or `systemd-nspawn`.
+
+Most of those tests should be able to run via `systemd-nspawn`, which is
+orders-of-magnitude faster than `qemu`, but some tests require privileged
+operations like using `dm-crypt` or `loopdev`. They are clearly marked if that
+is the case.
 
 See `test/README.testsuite` for more specific details.
 
-# HWDB
+## hwdb
 
-Rules built in the static `HWDB` database shipped by the project can be found
+Rules built in the static hardware database shipped by the project can be found
 under `hwdb.d/`. Some of these files are updated automatically, some are filled
 by contributors.
 
-# Documentation
+## Documentation
 
-## systemd.io
+### systemd.io
 
 Markdown files found under `docs/` are automatically published on the
 [systemd.io](https://systemd.io) website using Github Pages. A minimal unit test
 to ensure the formatting doesn't have errors is included in the
 `meson test -C build/ github-pages` run as part of the CI.
 
-## MAN pages
+### Man pages
 
 Manpages for binaries and libraries, and the DBUS interfaces, can be found under
 `man/` and should ideally be kept in sync with changes to the corresponding
 binaries and libraries.
 
-## Translations
+### Translations
 
 Translations files for binaries and daemons, provided by volunteers, can be found
 under `po/` in the usual format. They are kept up to date by contributors and by
 automated tools.
 
-# System Configuration files and presets
+## System Configuration files and presets
 
 Presets (or templates from which they are generated) for various daemons and tools
 can be found under various directories such as `factory/`, `modprobe.d/`, `network/`,
 `presets/`, `rules.d/`, `shell-completion/`, `sysctl.d/`, `sysusers.d/`, `tmpfiles.d/`.
 
-# Utilities for Developers
+## Utilities for Developers
 
-`tools/`, `coccinelle/`, `.github/`, `.semaphore/`, `.lgtm/`, `.mkosi/` host various
+`tools/`, `coccinelle/`, `.github/`, `.semaphore/`, `.mkosi/` host various
 utilities and scripts that are used by maintainers and developers. They are not
 shipped or installed.
diff --git a/docs/AUTOMATIC_BOOT_ASSESSMENT.md b/docs/AUTOMATIC_BOOT_ASSESSMENT.md
index f6d63af..2fbf86e 100644
--- a/docs/AUTOMATIC_BOOT_ASSESSMENT.md
+++ b/docs/AUTOMATIC_BOOT_ASSESSMENT.md
@@ -2,26 +2,50 @@
 title: Automatic Boot Assessment
 category: Booting
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Automatic Boot Assessment
 
 systemd provides support for automatically reverting back to the previous
-version of the OS or kernel in case the system consistently fails to boot. This
-support is built into various of its components. When used together these
-components provide a complete solution on UEFI systems, built as add-on to the
-[Boot Loader Specification](https://systemd.io/BOOT_LOADER_SPECIFICATION).
-However, the different components may also be used independently, and in
-combination with other software, to implement similar schemes, for example with
-other boot loaders or for non-UEFI systems. Here's a brief overview of the
-complete set of components:
+version of the OS or kernel in case the system consistently fails to boot. The
+[Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification/#boot-counting)
+describes how to annotate boot loader entries with a counter that specifies how
+many attempts should be made to boot it. This document describes how systemd
+implements this scheme.
+
+The many different components involved in the implementation may be used
+independently and in combination with other software to, for example, support
+other boot loaders or take actions outside of the boot loader.
+
+Here's a brief overview of the complete set of components:
+
+* The
+  [`kernel-install(8)`](https://www.freedesktop.org/software/systemd/man/kernel-install.html)
+  script can optionally create boot loader entries that carry an initial boot
+  counter (the initial counter is configurable in `/etc/kernel/tries`).
 
 * The
   [`systemd-boot(7)`](https://www.freedesktop.org/software/systemd/man/systemd-boot.html)
-  boot loader optionally maintains a per-boot-loader-entry counter that is
-  decreased by one on each attempt to boot the entry, prioritizing entries that
-  have non-zero counters over those which already reached a counter of zero
-  when choosing the entry to boot.
+  boot loader optionally maintains a per-boot-loader-entry counter described by
+  the [Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification/#boot-counting)
+  that is decreased by one on each attempt to boot the entry, prioritizing
+  entries that have non-zero counters over those which already reached a
+  counter of zero when choosing the entry to boot.
+
+* The `boot-complete.target` target unit (see
+  [`systemd.special(7)`](https://www.freedesktop.org/software/systemd/man/systemd.special.html))
+  serves as a generic extension point both for units that are necessary to
+  consider a boot successful (e.g. `systemd-boot-check-no-failures.service`
+  described below), and units that want to act only if the boot is
+  successful (e.g. `systemd-bless-boot.service` described below).
+
+* The
+  [`systemd-boot-check-no-failures.service(8)`](https://www.freedesktop.org/software/systemd/man/systemd-boot-check-no-failures.service.html)
+  service is a simple service health check tool. When enabled it becomes an
+  indirect dependency of `systemd-bless-boot.service` (by means of
+  `boot-complete.target`, see below), ensuring that the boot will not be
+  considered successful if there are any failed services.
 
 * The
   [`systemd-bless-boot.service(8)`](https://www.freedesktop.org/software/systemd/man/systemd-bless-boot.service.html)
@@ -34,74 +58,53 @@
   generator automatically pulls in `systemd-bless-boot.service` when use of
   `systemd-boot` with boot counting enabled is detected.
 
-* The
-  [`systemd-boot-check-no-failures.service(8)`](https://www.freedesktop.org/software/systemd/man/systemd-boot-check-no-failures.service.html)
-  service is a simple health check tool that determines whether the boot
-  completed successfully. When enabled it becomes an indirect dependency of
-  `systemd-bless-boot.service` (by means of `boot-complete.target`, see
-  below), ensuring that the boot will not be considered successful if there are
-  any failed services.
-
-* The `boot-complete.target` target unit (see
-  [`systemd.special(7)`](https://www.freedesktop.org/software/systemd/man/systemd.special.html))
-  serves as a generic extension point both for units that are necessary to
-  consider a boot successful (example: `systemd-boot-check-no-failures.service`
-  as described above), and units that want to act only if the boot is
-  successful (example: `systemd-bless-boot.service` as described above).
-
-* The
-  [`kernel-install(8)`](https://www.freedesktop.org/software/systemd/man/kernel-install.html)
-  script can optionally create boot loader entries that carry an initial boot
-  counter (the initial counter is configurable in `/etc/kernel/tries`).
-
 ## Details
 
-The boot counting data `systemd-boot` and `systemd-bless-boot.service`
-manage is stored in the name of the boot loader entries. If a boot loader entry
-file name contains `+` followed by one or two numbers (if two numbers, then
-those need to be separated by `-`) right before the `.conf` suffix, then boot
-counting is enabled for it. The first number is the "tries left" counter
-encoding how many attempts to boot this entry shall still be made. The second
-number is the "tries done" counter, encoding how many failed attempts to boot
-it have already been made. Each time a boot loader entry marked this way is
-booted the first counter is decreased by one, and the second one increased by
-one. (If the second counter is missing, then it is assumed to be equivalent to
-zero.) If the "tries left" counter is above zero the entry is still considered
-for booting (the entry's state is considered to be "indeterminate"), as soon as
-it reached zero the entry is not tried anymore (entry state "bad"). If the boot
-attempt completed successfully the entry's counters are removed from the name
-(entry state "good"), thus turning off boot counting for the future.
+As described in the
+[Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification/#boot-counting),
+the boot counting data is stored in the file name of the boot loader entries as
+a plus (`+`), followed by a number, optionally followed by `-` and another
+number, right before the file name suffix (`.conf` or `.efi`).
+
+The first number is the "tries left" counter encoding how many attempts to boot
+this entry shall still be made. The second number is the "tries done" counter,
+encoding how many failed attempts to boot it have already been made. Each time
+a boot loader entry marked this way is booted the first counter is decremented,
+and the second one incremented. (If the second counter is missing, then it is
+assumed to be equivalent to zero.) If the boot attempt completed successfully
+the entry's counters are removed from the name (entry state "good"), thus
+turning off boot counting for the future.
 
 ## Walkthrough
 
 Here's an example walkthrough of how this all fits together.
 
-1. The user runs `echo 3 > /etc/kernel/tries` to enable boot counting.
+1. The user runs `echo 3 >/etc/kernel/tries` to enable boot counting.
 
 2. A new kernel is installed. `kernel-install` is used to generate a new boot
    loader entry file for it. Let's say the version string for the new kernel is
    `4.14.11-300.fc27.x86_64`, a new boot loader entry
    `/boot/loader/entries/4.14.11-300.fc27.x86_64+3.conf` is hence created.
 
-3. The system is booted for the first time after the new kernel is
+3. The system is booted for the first time after the new kernel has been
    installed. The boot loader now sees the `+3` counter in the entry file
    name. It hence renames the file to `4.14.11-300.fc27.x86_64+2-1.conf`
-   indicating that at this point one attempt has started and thus only one less
-   is left. After the rename completed the entry is booted as usual.
+   indicating that at this point one attempt has started.
+   After the rename completed, the entry is booted as usual.
 
 4. Let's say this attempt to boot fails. On the following boot the boot loader
-   will hence see the `+2-1` tag in the name, and hence rename the entry file to
+   will hence see the `+2-1` tag in the name, and will hence rename the entry file to
    `4.14.11-300.fc27.x86_64+1-2.conf`, and boot it.
 
-5. Let's say the boot fails again. On the subsequent boot the loader hence will
+5. Let's say the boot fails again. On the subsequent boot the loader will hence
    see the `+1-2` tag, and rename the file to
    `4.14.11-300.fc27.x86_64+0-3.conf` and boot it.
 
-6. If this boot also fails, on the next boot the boot loader will see the
-   tag `+0-3`, i.e. the counter reached zero. At this point the entry will be
-   considered "bad", and ordered to the beginning of the list of entries. The
-   next newest boot entry is now tried, i.e. the system automatically reverted
-   back to an earlier version.
+6. If this boot also fails, on the next boot the boot loader will see the tag
+   `+0-3`, i.e. the counter reached zero. At this point the entry will be
+   considered "bad", and ordered after all non-bad entries. The next newest
+   boot entry is now tried, i.e. the system automatically reverted to an
+   earlier version.
 
 The above describes the walkthrough when the selected boot entry continuously
 fails. Let's have a look at an alternative ending to this walkthrough. In this
@@ -130,21 +133,31 @@
    that are required to succeed for the boot process to be considered
    successful. One such unit is `systemd-boot-check-no-failures.service`.
 
-9. `systemd-boot-check-no-failures.service` is run after all its own
+9. The graphical desktop environment installed on the machine starts a
+   service called `graphical-session-good.service`, which is also ordered before
+   `boot-complete.target`, that registers a D-Bus endpoint.
+
+10. `systemd-boot-check-no-failures.service` is run after all its own
    dependencies completed, and assesses that the boot completed
    successfully. It hence exits cleanly.
 
-10. This allows `boot-complete.target` to be reached. This signifies to the
+11. `graphical-session-good.service` waits for a user to log in. In the user
+   desktop environment, one minute after the user has logged in and started the
+   first program, a user service is invoked which makes a D-Bus call to
+   `graphical-session-good.service`. Upon receiving that call,
+   `graphical-session-good.service` exits cleanly.
+
+12. This allows `boot-complete.target` to be reached. This signifies to the
     system that this boot attempt shall be considered successful.
 
-11. Which in turn permits `systemd-bless-boot.service` to run. It now
+13. Which in turn permits `systemd-bless-boot.service` to run. It now
     determines which boot loader entry file was used to boot the system, and
     renames it dropping the counter tag. Thus
     `4.14.11-300.fc27.x86_64+1-2.conf` is renamed to
     `4.14.11-300.fc27.x86_64.conf`. From this moment boot counting is turned
-    off.
+    off for this entry.
 
-12. On the following boot (and all subsequent boots after that) the entry is
+14. On the following boot (and all subsequent boots after that) the entry is
     now seen with boot counting turned off, no further renaming takes place.
 
 ## How to adapt this scheme to other setups
@@ -155,9 +168,9 @@
 1. To support alternative boot loaders in place of `systemd-boot` two scenarios
    are recommended:
 
-    a. Boot loaders already implementing the Boot Loader Specification can simply
-       implement an equivalent file rename based logic, and thus integrate fully
-       with the rest of the stack.
+    a. Boot loaders already implementing the Boot Loader Specification can
+       simply implement the same rename logic, and thus integrate fully with
+       the rest of the stack.
 
     b. Boot loaders that want to implement boot counting and store the counters
        elsewhere can provide their own replacements for
@@ -174,33 +187,32 @@
    good. Note that the target unit shall pull in these boot checking units, not
    the other way around.
 
+   Depending on the setup, it may be most convenient to pull in such units
+   through normal enablement symlinks, or during early boot using a
+   [`generator`](https://www.freedesktop.org/software/systemd/man/systemd.generator.html),
+   or even during later boot. In the last case, care must be taken to ensure
+   that the start job is created before `boot-complete.target` has been
+   reached.
+
 3. To support additional components that shall only run on boot success, simply
    wrap them in a unit and order them after `boot-complete.target`, pulling it
    in.
 
+   Such unit would be typically wanted (or required) by one of the
+   [`bootup`](https://www.freedesktop.org/software/systemd/man/bootup.html) targets,
+   for example, `multi-user.target`. To avoid potential loops due to conflicting
+   [default dependencies](https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Default%20Dependencies)
+   ordering, it is recommended to also add an explicit dependency (e.g.
+   `After=multi-user.target`) to the unit. This overrides the implicit ordering
+   and allows `boot-complete.target` to start after the given bootup target.
+
 ## FAQ
 
-1. *Why do you use file renames to store the counter? Why not a regular file?*
-   — Mainly two reasons: it's relatively likely that renames can be implemented
-   atomically even in simpler file systems, while writing to file contents has
-   a much bigger chance to be result in incomplete or corrupt data, as renaming
-   generally avoids allocating or releasing data blocks. Moreover it has the
-   benefit that the boot count metadata is directly attached to the boot loader
-   entry file, and thus the lifecycle of the metadata and the entry itself are
-   bound together. This means no additional clean-up needs to take place to
-   drop the boot loader counting information for an entry when it is removed.
-
-2. *Why not use EFI variables for storing the boot counter?* — The memory chips
-   used to back the persistent EFI variables are generally not of the highest
-   quality, hence shouldn't be written to more than necessary. This means we
-   can't really use it for changes made regularly during boot, but can use it
-   only for seldom made configuration changes.
-
-3. *I have a service which — when it fails — should immediately cause a
-   reboot. How does that fit in with the above?* — Well, that's orthogonal to
+1. *I have a service which — when it fails — should immediately cause a
+   reboot. How does that fit in with the above?* — That's orthogonal to
    the above, please use `FailureAction=` in the unit file for this.
 
-4. *Under some condition I want to mark the current boot loader entry as bad
+2. *Under some condition I want to mark the current boot loader entry as bad
    right-away, so that it never is tried again, how do I do that?* — You may
    invoke `/usr/lib/systemd/systemd-bless-boot bad` at any time to mark the
    current boot loader entry as "bad" right-away so that it isn't tried again
diff --git a/docs/BLOCK_DEVICE_LOCKING.md b/docs/BLOCK_DEVICE_LOCKING.md
index 82df155..a6e3374 100644
--- a/docs/BLOCK_DEVICE_LOCKING.md
+++ b/docs/BLOCK_DEVICE_LOCKING.md
@@ -2,12 +2,13 @@
 title: Locking Block Device Access
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Locking Block Device Access
 
 *TL;DR: Use BSD file locks
-[(`flock(2)`)](http://man7.org/linux/man-pages/man2/flock.2.html) on block
+[(`flock(2)`)](https://man7.org/linux/man-pages/man2/flock.2.html) on block
 device nodes to synchronize access for partitioning and file system formatting
 tools.*
 
@@ -21,10 +22,10 @@
 from processing rules on it — and thus bar it from probing the device — by
 taking a BSD file lock on the block device node. Specifically, whenever
 `systemd-udevd` starts processing a block device it takes a `LOCK_SH|LOCK_NB`
-lock using [`flock(2)`](http://man7.org/linux/man-pages/man2/flock.2.html) on
+lock using [`flock(2)`](https://man7.org/linux/man-pages/man2/flock.2.html) on
 the main block device (i.e. never on any partition block device, but on the
 device the partition belongs to). If this lock cannot be taken (i.e. `flock()`
-returns `EBUSY`), it refrains from processing the device. If it manages to take
+returns `EAGAIN`), it refrains from processing the device. If it manages to take
 the lock it is kept for the entire time the device is processed.
 
 Note that `systemd-udevd` also watches all block device nodes it manages for
@@ -74,7 +75,169 @@
 orthogonal. The scheme discussed above uses the former and not the latter,
 because these types of locks more closely match the required semantics.
 
+If multiple devices are to be locked at the same time (for example in order to
+format a RAID file system), the devices should be locked in the order of the
+the device nodes' major numbers (primary ordering key, ascending) and minor
+numbers (secondary ordering key, ditto), in order to avoid ABBA locking issues
+between subsystems.
+
+Note that the locks should only be taken while the device is repartitioned,
+file systems formatted or `dd`'ed in, and similar cases that
+apply/remove/change superblocks/partition information. It should not be held
+during normal operation, i.e. while file systems on it are mounted for
+application use.
+
+The [`udevadm
+lock`](https://www.freedesktop.org/software/systemd/man/udevadm.html) command
+is provided to lock block devices following this scheme from the command line,
+for the use in scripts and similar. (Note though that it's typically preferable
+to use native support for block device locking in tools where that's
+available.)
+
 Summarizing: it is recommended to take `LOCK_EX` BSD file locks when
 manipulating block devices in all tools that change file system block devices
 (`mkfs`, `fsck`, …) or partition tables (`fdisk`, `parted`, …), right after
 opening the node.
+
+# Example of Locking The Whole Disk
+
+The following is an example to leverage `libsystemd` infrastructure to get the whole disk of a block device and take a BSD lock on it.
+
+## Compile and Execute
+**Note that this example requires `libsystemd` version 251 or newer.**
+
+Place the code in a source file, e.g. `take_BSD_lock.c` and run the following commands:
+```
+$ gcc -o take_BSD_lock -lsystemd take_BSD_lock.c
+
+$ ./take_BSD_lock /dev/sda1
+Successfully took a BSD lock: /dev/sda
+
+$ flock -x /dev/sda ./take_BSD_lock /dev/sda1
+Failed to take a BSD lock on /dev/sda: Resource temporarily unavailable
+```
+
+## Code
+```c
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/file.h>
+#include <systemd/sd-device.h>
+#include <unistd.h>
+
+static inline void closep(int *fd) {
+    if (*fd >= 0)
+        close(*fd);
+}
+
+/**
+ * lock_whole_disk_from_devname
+ * @devname: devname of a block device, e.g., /dev/sda or /dev/sda1
+ * @open_flags: the flags to open the device, e.g., O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY
+ * @flock_operation: the operation to call flock, e.g., LOCK_EX|LOCK_NB
+ *
+ * given the devname of a block device, take a BSD lock of the whole disk
+ *
+ * Returns: negative errno value on error, or non-negative fd if the lock was taken successfully.
+ **/
+int lock_whole_disk_from_devname(const char *devname, int open_flags, int flock_operation) {
+    __attribute__((cleanup(sd_device_unrefp))) sd_device *dev = NULL;
+    sd_device *whole_dev;
+    const char *whole_disk_devname, *subsystem, *devtype;
+    int r;
+
+    // create a sd_device instance from devname
+    r = sd_device_new_from_devname(&dev, devname);
+    if (r < 0) {
+        errno = -r;
+        fprintf(stderr, "Failed to create sd_device: %m\n");
+        return r;
+    }
+
+    // if the subsystem of dev is block, but its devtype is not disk, find its parent
+    r = sd_device_get_subsystem(dev, &subsystem);
+    if (r < 0) {
+        errno = -r;
+        fprintf(stderr, "Failed to get the subsystem: %m\n");
+        return r;
+    }
+    if (strcmp(subsystem, "block") != 0) {
+        fprintf(stderr, "%s is not a block device, refusing.\n", devname);
+        return -EINVAL;
+    }
+
+    r = sd_device_get_devtype(dev, &devtype);
+    if (r < 0) {
+        errno = -r;
+        fprintf(stderr, "Failed to get the devtype: %m\n");
+        return r;
+    }
+    if (strcmp(devtype, "disk") == 0)
+        whole_dev = dev;
+    else {
+        r = sd_device_get_parent_with_subsystem_devtype(dev, "block", "disk", &whole_dev);
+        if (r < 0) {
+            errno = -r;
+            fprintf(stderr, "Failed to get the parent device: %m\n");
+            return r;
+        }
+    }
+
+    // open the whole disk device node
+    __attribute__((cleanup(closep))) int fd = sd_device_open(whole_dev, open_flags);
+    if (fd < 0) {
+        errno = -fd;
+        fprintf(stderr, "Failed to open the device: %m\n");
+        return fd;
+    }
+
+    // get the whole disk devname
+    r = sd_device_get_devname(whole_dev, &whole_disk_devname);
+    if (r < 0) {
+        errno = -r;
+        fprintf(stderr, "Failed to get the whole disk name: %m\n");
+        return r;
+    }
+
+    // take a BSD lock of the whole disk device node
+    if (flock(fd, flock_operation) < 0) {
+        r = -errno;
+        fprintf(stderr, "Failed to take a BSD lock on %s: %m\n", whole_disk_devname);
+        return r;
+    }
+
+    printf("Successfully took a BSD lock: %s\n", whole_disk_devname);
+
+    // take the fd to avoid automatic cleanup
+    int ret_fd = fd;
+    fd = -EBADF;
+    return ret_fd;
+}
+
+int main(int argc, char **argv) {
+    if (argc != 2) {
+        fprintf(stderr, "Invalid number of parameters.\n");
+        return EXIT_FAILURE;
+    }
+
+    // try to take an exclusive and nonblocking BSD lock
+    __attribute__((cleanup(closep))) int fd =
+        lock_whole_disk_from_devname(
+            argv[1],
+            O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY,
+            LOCK_EX|LOCK_NB);
+
+    if (fd < 0)
+        return EXIT_FAILURE;
+
+    /**
+     * The device is now locked until the return below.
+     * Now you can safely manipulate the block device.
+     **/
+
+    return EXIT_SUCCESS;
+}
+```
diff --git a/docs/BOOT_LOADER_INTERFACE.md b/docs/BOOT_LOADER_INTERFACE.md
index e915511..267fcc5 100644
--- a/docs/BOOT_LOADER_INTERFACE.md
+++ b/docs/BOOT_LOADER_INTERFACE.md
@@ -2,6 +2,7 @@
 title: Boot Loader Interface
 category: Booting
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # The Boot Loader Interface
@@ -30,7 +31,11 @@
 * The EFI variable `LoaderConfigTimeout` contains the boot menu timeout
   currently in use. It may be modified both by the boot loader and by the
   host. The value should be formatted as numeric, NUL-terminated, decimal
-  string, in UTF-16. The time is specified in µs.
+  string, in UTF-16. The time is specified in seconds. A value of `menu-force`
+  will disable the timeout and show the menu indefinitely. If set to `0` or
+  `menu-hidden` the default entry is booted immediately without showing a menu.
+  The boot loader should provide a way to interrupt this by for example
+  listening for key presses for a brief moment before booting.
 
 * Similarly, the EFI variable `LoaderConfigTimeoutOneShot` contains a boot menu
   timeout for a single following boot. It is set by the OS in order to request
@@ -71,16 +76,10 @@
   * `1 << 1` → The boot loader honours `LoaderConfigTimeoutOneShot` when set.
   * `1 << 2` → The boot loader honours `LoaderEntryDefault` when set.
   * `1 << 3` → The boot loader honours `LoaderEntryOneShot` when set.
-  * `1 << 4` → The boot loader supports boot counting as described in [Automatic Boot Assessment](https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT).
+  * `1 << 4` → The boot loader supports boot counting as described in [Automatic Boot Assessment](AUTOMATIC_BOOT_ASSESSMENT.md).
   * `1 << 5` → The boot loader supports looking for boot menu entries in the Extended Boot Loader Partition.
   * `1 << 6` → The boot loader supports passing a random seed to the OS.
 
-* The EFI variable `LoaderRandomSeed` contains a binary random seed if set. It
-  is set by the boot loader to pass an entropy seed read from the ESP to the OS.
-  The system manager then credits this seed to the kernel's entropy pool. It is
-  the responsibility of the boot loader to ensure the quality and integrity of
-  the random seed.
-
 * The EFI variable `LoaderSystemToken` contains binary random data,
   persistently set by the OS installer. Boot loaders that support passing
   random seeds to the OS should use this data and combine it with the random
@@ -102,8 +101,7 @@
 there. The `systemctl reboot --boot-loader-entry=…` and `systemctl reboot
 --boot-loader-menu=…` commands rely on the `LoaderFeatures` ,
 `LoaderConfigTimeoutOneShot`, `LoaderEntries`, `LoaderEntryOneShot`
-variables. `LoaderRandomSeed` is read by PID during early boot and credited to
-the kernel's random pool.
+variables.
 
 ## Boot Loader Entry Identifiers
 
@@ -114,10 +112,11 @@
 `LoaderEntryOneShot`, `LoaderEntrySelected`, and possibly show nicely localized
 names for them in UIs.
 
-1. When boot loader entries are defined through [Boot Loader
-   Specification](https://systemd.io/BOOT_LOADER_SPECIFICATION) drop-in files
-   the identifier should be derived directly from the drop-in snippet name, but
-   with the `.conf` (or `.efi` in case of Type #2 entries) suffix removed.
+1. When boot loader entries are defined through the
+   [Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification/)
+   files, the identifier should be derived directly from the file name,
+   but with the `.conf` (Type #1 snippets) or `.efi` (Type #2 images)
+   suffix removed.
 
 2. Entries automatically discovered by the boot loader (as opposed to being
    configured in configuration files) should generally have an identifier
@@ -130,7 +129,7 @@
    discovered Windows installation might have the identifier `auto-windows` or
    `auto-windows-10` or so.).
 
-4. Similar, boot menu entries referring to Apple macOS installations should
+4. Similarly, boot menu entries referring to Apple macOS installations should
    use the identifier `osx` or one that is prefixed with `osx-`. If such an
    entry is automatically discovered by the boot loader use `auto-osx` as
    identifier, or `auto-osx-` as prefix for the identifier, see above.
@@ -145,8 +144,8 @@
 
 ## Links
 
-[Boot Loader Specification](https://systemd.io/BOOT_LOADER_SPECIFICATION)<br>
-[Discoverable Partitions Specification](https://systemd.io/DISCOVERABLE_PARTITIONS)<br>
-[systemd-boot(7)](https://www.freedesktop.org/software/systemd/man/systemd-boot.html)<br>
-[bootctl(1)](https://www.freedesktop.org/software/systemd/man/bootctl.html)<br>
-[systemd-gpt-auto-generator(8)](https://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html)
+[Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification)<br>
+[Discoverable Partitions Specification](https://uapi-group.org/specifications/specs/discoverable_partitions_specification)<br>
+[`systemd-boot(7)`](https://www.freedesktop.org/software/systemd/man/systemd-boot.html)<br>
+[`bootctl(1)`](https://www.freedesktop.org/software/systemd/man/bootctl.html)<br>
+[`systemd-gpt-auto-generator(8)`](https://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html)
diff --git a/docs/BOOT_LOADER_SPECIFICATION.md b/docs/BOOT_LOADER_SPECIFICATION.md
index 7b5b197..33066b2 100644
--- a/docs/BOOT_LOADER_SPECIFICATION.md
+++ b/docs/BOOT_LOADER_SPECIFICATION.md
@@ -1,262 +1 @@
----
-title: Boot Loader Specification
-category: Booting
-layout: default
----
-
-# The Boot Loader Specification
-
-_TL;DR: Currently there's no common boot scheme across architectures and
-platforms for open-source operating systems. There's also little cooperation
-between multiple distributions in dual-boot (or triple, … multi-boot)
-setups. We'd like to improve this situation by getting everybody to commit to a
-single boot configuration format that is based on drop-in files, and thus is
-robust, simple, works without rewriting configuration files and is free of
-namespace clashes._
-
-The Boot Loader Specification defines a scheme how different operating systems
-can cooperatively manage a boot loader configuration directory, that accepts
-drop-in files for boot menu items that are defined in a format that is shared
-between various boot loader implementations, operating systems, and userspace
-programs. The same scheme can be used to prepare OS media for cases where the
-firmware includes a boot loader. The target audience for this specification is:
-
-* Boot loader developers, to write a boot loader that directly reads its configuration at runtime from these drop-in snippets
-* Firmware developers, to add generic boot loading support directly to the firmware itself
-* Distribution and Core OS developers, in order to create these snippets at OS/kernel package installation time
-* UI developers, for implementing a user interface that discovers the available boot options
-* OS Installer developers, to prepare their installation media and for setting up the initial drop-in directory
-
-## Why is there a need for this specification?
-
-Of course, without this specification things already work mostly fine. But here's why we think this specification is needed:
-
-* To make the boot more robust, as no explicit rewriting of configuration files is required any more
-* To allow an out of the box boot experience on any platform without the need of traditional firmware mechanisms (e.g. BIOS calls, UEFI Boot Services)
-* To improve dual-boot scenarios. Currently, multiple Linux installations tend to fight over which boot loader becomes the primary one in possession of the MBR, and only that one installation can then update the boot loader configuration of it freely. Other Linux installs have to be manually configured to never touch the MBR and instead install a chain-loaded boot loader in their own partition headers. In this new scheme as all installations share a loader directory no manual configuration has to take place, and all participants implicitly cooperate due to removal of name collisions and can install/remove their own boot menu entries at free will, without interfering with the entries of other installed operating systems.
-* Drop-in directories are otherwise now pretty ubiquitous on Linux as an easy way to extend configuration without having to edit, regenerate or manipulate configuration files. For the sake of uniformity, we should do the same for extending the boot menu.
-* Userspace code can sanely parse boot loader configuration which is essential with modern BIOSes which do not necessarily initialize USB keyboards anymore during boot, which makes boot menus hard to reach for the user. If userspace code can parse the boot loader configuration, too, this allows for UIs that can select a boot menu item to boot into, before rebooting the machine, thus not requiring interactivity during early boot.
-* To unify and thus simplify configuration of the various boot loaders around, which makes configuration of the boot loading process easier for users, administrators and developers alike.
-* For boot loaders with configuration _scripts_ such as grub2, adopting this spec allows for mostly static scripts that are generated only once at first installation, but then do not need to be updated anymore as that is done via drop-in files exclusively.
-
-## Why not simply rely on the EFI boot menu logic?
-
-EFI is not ubiquitous, especially not in embedded systems. If you have an EFI
-system, it provides a boot options logic that can offer similar
-functionality. Here's why we think that it is not enough for our uses:
-
-* The various EFI implementations implement the boot order/boot item logic to different levels. Some firmware implementations do not offer a boot menu at all and instead unconditionally follow the EFI boot order, booting the first item that is working.
-* If the firmware setup is used to reset all data usually all EFI boot entries are lost, making the system entirely unbootable, as the firmware setups generally do not offer a UI to define additional boot items. By placing the menu item information on disk, it is always available, regardless if the BIOS setup data is lost.
-* Harddisk images should be movable between machines and be bootable without requiring explicit EFI variables to be set. This also requires that the list of boot options is defined on disk, and not in EFI variables alone.
-* EFI is not universal yet (especially on non-x86 platforms), this specification is useful both for EFI and non-EFI boot loaders.
-* Many EFI systems disable USB support during early boot to optimize boot times, thus making keyboard input unavailable in the EFI menu. It is thus useful if the OS UI has a standardized way to discover available boot options which can be booted to.
-
-## Technical Details
-
-Everything described below is located on a placeholder file system `$BOOT`. The installer program should pick `$BOOT` according to the following rules:
-
-* On disks with an MBR partition table:
-  * If the OS is installed on a disk with an MBR partition table, and a partition with the type id of 0xEA already exists it should be used as `$BOOT`.
-  * Otherwise, if the OS is installed on a disk with an MBR partition table, a new partition with type id of 0xEA shall be created, of a suitable size (let's say 500MB), and it should be used as `$BOOT`.
-* On disks with GPT (GUID Partition Table)
-  * If the OS is installed on a disk with GPT, and an Extended Boot Loader Partition or XBOOTLDR partition for short, i.e. a partition with GPT type GUID of `bc13c2ff-59e6-4262-a352-b275fd6f7172`, already exists, it should be used as `$BOOT`.
-  * Otherwise, if the OS is installed on a disk with GPT, and an EFI System Partition or ESP for short, i.e. a partition with GPT type UID of `c12a7328-f81f-11d2-ba4b-00a0c93ec93b`) already exists and is large enough (let's say 250MB) and otherwise qualifies, it should be used as `$BOOT`.
-  * Otherwise, if the OS is installed on a disk with GPT, and if the ESP already exists but is too small, a new suitably sized (let's say 500MB) XBOOTLDR partition shall be created and used as `$BOOT`.
-  * Otherwise, if the OS is installed on a disk with GPT, and no ESP exists yet, a new suitably sized (let's say 500MB) ESP should be created and used as `$BOOT`.
-
-This placeholder file system shall be determined during _installation time_, and an fstab entry may be created. It should be mounted to either `/boot/` or `/efi/`. Additional locations like `/boot/efi/`, with `/boot/` being a separate file system, might be supported by implementations. This is not recommended because the mounting of `$BOOT` is then dependent on and requires the mounting of the intermediate file system.
-
-**Note:** _`$BOOT` should be considered **shared** among all OS installations of a system. Instead of maintaining one `$BOOT` per installed OS (as `/boot/` was traditionally handled), all installed OS share the same place to drop in their boot-time configuration._
-
-For systems where the firmware is able to read file systems directly, `$BOOT`
-must be a file system readable by the firmware. For other systems and generic
-installation and live media, `$BOOT` must be a VFAT (16 or 32) file
-system. Applications accessing `$BOOT` should hence not assume that fancier
-file system features such as symlinks, hardlinks, access control or case
-sensitivity are supported.
-
-This specification defines two types of boot loader entries. The first type is
-text based, very simple and suitable for a variety of firmware, architecture
-and image types ("Type #1"). The second type is specific to EFI, but allows
-single-file images that embed all metadata in the kernel binary itself, which
-is useful to cryptographically sign them as one file for the purpose of
-SecureBoot ("Type #2").
-
-Not all boot loader entries will apply to all systems. For example, Type #1
-entries that use the `efi` key and all Type #2 entries only apply to EFI
-systems. Entries using the `architecture` key might specify an architecture that
-doesn't match the local one. Boot loaders should ignore all entries that don't
-match the local platform and what the boot loader can support, and hide them
-from the user. Only entries matching the feature set of boot loader and system
-shall be considered and displayed. This allows image builders to put together
-images that transparently support multiple different architectures.
-
-Note that the `$BOOT` partition is not supposed to be exclusive territory of
-this specification. This specification only defines semantics of the `/loader/`
-directory inside the file system (see below), but it doesn't intend to define
-ownership of the whole file system exclusively. Boot loaders, firmware, and
-other software implementing this specification may choose to place other
-files and directories in the same file system. For example, boot loaders that
-implement this specification might install their own boot code into the `$BOOT`
-partition. On systems where `$BOOT` is the ESP this is a particularly common
-setup. Implementations of this specification must be able to operate correctly
-if files or directories other than `/loader/` are found in the top level
-directory. Implementations that add their own files or directories to the file
-systems should use well-named directories, to make name collisions between
-multiple users of the file system unlikely.
-
-### Type #1 Boot Loader Specification Entries
-
-We define two directories below `$BOOT`:
-
-* `$BOOT/loader/` is the directory containing all files needed for Type #1 entries
-* `$BOOT/loader/entries/` is the directory containing the drop-in snippets. This directory contains one `.conf` file for each boot menu item.
-
-**Note:** _In all cases the `/loader/` directory should be located directly in the root of the file system. Specifically, if `$BOOT` is the ESP, then `/loader/` directory should be located directly in the root directory of the ESP, and not in the `/EFI/` subdirectory._
-
-Inside the `$BOOT/loader/entries/` directory each OS vendor may drop one or
-more configuration snippets with the suffix ".conf", one for each boot menu
-item. The file name of the file is used for identification of the boot item but
-shall never be presented to the user in the UI. The file name may be chosen
-freely but should be unique enough to avoid clashes between OS
-installations. More specifically it is suggested to include the machine ID
-(`/etc/machine-id` or the D-Bus machine ID for OSes that lack
-`/etc/machine-id`), the kernel version (as returned by `uname -r`) and an OS
-identifier (The ID field of `/etc/os-release`). Example:
-`$BOOT/loader/entries/6a9857a393724b7a981ebb5b8495b9ea-3.8.0-2.fc19.x86_64.conf`.
-
-In order to maximize compatibility with file system implementations and
-restricted boot loader environments, and to minimize conflicting character use
-with other programs, file names shall be chosen from a restricted character set:
-ASCII upper and lower case characters, digits, "+", "-", "_" and ".". Also, the
-file names should have a length of at least one and at most 255 characters
-(including file name suffix).
-
-These configuration snippets shall be Unix-style text files (i.e. line separation with a single newline character), in the UTF-8 encoding. The configuration snippets are loosely inspired on Grub1's configuration syntax. Lines beginning with '#' shall be ignored and used for commenting. The first word of a line is used as key and shall be separated by one or more spaces from its value. The following keys are known:
-
-* `title` shall contain a human readable title string for this menu item. This will be displayed in the boot menu for the item. It is a good idea to initialize this from the `PRETTY_NAME` of `/etc/os-release`. This name should be descriptive and does not have to be unique. If a boot loader discovers two entries with the same title it is a good idea to show more than just the raw title in the UI, for example by appending the `version` field. This field is optional. Example: "Fedora 18 (Spherical Cow)".
-* `version` shall contain a human readable version string for this menu item. This is usually the kernel version and is intended for use by OSes to install multiple kernel versions at the same time with the same `title` field. This field shall be in a syntax that is useful for Debian-style version sorts, so that the boot loader UI can determine the newest version easily and show it first or preselect it automatically. This field is optional. Example: `3.7.2-201.fc18.x86_64`.
-* `machine-id` shall contain the machine ID of the OS `/etc/machine-id`. This is useful for boot loaders and applications to filter out boot entries, for example to show only a single newest kernel per OS, or to group items by OS, or to maybe filter out the currently booted OS in UIs that want to show only other installed operating systems. This ID shall be formatted as 32 lower case hexadecimal characters (i.e. without any UUID formatting). This key is optional. Example: `4098b3f648d74c13b1f04ccfba7798e8`.
-* `linux` refers to the Linux kernel to spawn and shall be a path relative to the `$BOOT` directory. It is recommended that every distribution creates a machine id and version specific subdirectory below `$BOOT` and places its kernels and initial RAM disk images there. Example: `/6a9857a393724b7a981ebb5b8495b9ea/3.8.0-2.fc19.x86_64/linux`.
-* `initrd` refers to the initrd to use when executing the kernel. This also shall be a path relative to the `$BOOT` directory. This key is optional. This key may appear more than once in which case all specified images are used, in the order they are listed. Example: `6a9857a393724b7a981ebb5b8495b9ea/3.8.0-2.fc19.x86_64/initrd`.
-* `efi` refers to an arbitrary EFI program. This also takes a path relative to `$BOOT`. If this key is set, and the system is not an EFI system this entry should be hidden.
-* `options` shall contain kernel parameters to pass to the Linux kernel to spawn. This key is optional and may appear more than once in which case all specified parameters are used in the order they are listed.
-* `devicetree` refers to the binary device tree to use when executing the
-kernel. This also shall be a path relative to the `$BOOT` directory. This
-key is optional. Example: `6a9857a393724b7a981ebb5b8495b9ea/3.8.0-2.fc19.armv7hl/tegra20-paz00.dtb`.
-* `devicetree-overlay` refers to a list of device tree overlays that should be
-applied by the boot loader. Multiple overlays are separated by spaces and
-applied in the same order as they are listed. This key is optional but depends
-on the `devicetree` key. Example:
-`/6a9857a393724b7a981ebb5b8495b9ea/overlays/overlay_A.dtbo
-/6a9857a393724b7a981ebb5b8495b9ea/overlays/overlay_B.dtbo`
-* `architecture` refers to the architecture this entry is defined for. The argument should be an architecture identifier, using the architecture vocabulary defined by the EFI specification (i.e. `IA32`, `x64`, `IA64`, `ARM`, `AA64`, …). If specified and this does not match (case insensitively) the local system architecture this entry should be hidden.
-
-Each configuration drop-in snippet must include at least a `linux` or an `efi` key and is otherwise not valid. Here's an example for a complete drop-in file:
-
-    # /boot/loader/entries/6a9857a393724b7a981ebb5b8495b9ea-3.8.0-2.fc19.x86_64.conf
-    title        Fedora 19 (Rawhide)
-    version      3.8.0-2.fc19.x86_64
-    machine-id   6a9857a393724b7a981ebb5b8495b9ea
-    options      root=UUID=6d3376e4-fc93-4509-95ec-a21d68011da2
-    architecture x64
-    linux        /6a9857a393724b7a981ebb5b8495b9ea/3.8.0-2.fc19.x86_64/linux
-    initrd       /6a9857a393724b7a981ebb5b8495b9ea/3.8.0-2.fc19.x86_64/initrd
-
-On EFI systems all Linux kernel images should be EFI images. In order to
-increase compatibility with EFI systems it is highly recommended only to
-install EFI kernel images, even on non-EFI systems, if that's applicable and
-supported on the specific architecture.
-
-Conversely, in order to increase compatibility it is recommended to install
-generic kernel images that make few assumptions about the firmware they run on,
-i.e. it is a good idea that both images shipped as UEFI PE images and those
-which are not don't make unnecessary assumption on the underlying firmware,
-i.e. don't hard depend on legacy BIOS calls or UEFI boot services.
-
-Note that these configuration snippets may only reference kernels (and EFI programs) that reside on the same file system as the configuration snippets, i.e. everything referenced must be contained in the same file system. This is by design, as referencing other partitions or devices would require a non-trivial language for denoting device paths. If kernels/initrds are to be read from other partitions/disks the boot loader can do this in its own native configuration, using its own specific device path language, and this is out of focus for this specification. More specifically, on non-EFI systems configuration snippets following this specification cannot be used to spawn other operating systems (such as Windows).
-
-### Type #2 EFI Unified Kernel Images
-
-A unified kernel image is a single EFI PE executable combining an EFI stub
-loader, a kernel image, an initramfs image, and the kernel command line. See
-the description of the `--uefi` option in
-[dracut(8)](http://man7.org/linux/man-pages/man8/dracut.8.html). Such unified
-images will be searched for under `$BOOT/EFI/Linux/` and must have the
-extension `.efi`. Support for images of this type is of course specific to
-systems with EFI firmware. Ignore this section if you work on systems not
-supporting EFI.
-
-Type #2 file names should be chosen from the same restricted character set as
-Type #1 described above (but use a different file name suffix of `.efi` instead
-of `.conf`).
-
-Images of this type have the advantage that all metadata and payload that makes
-up the boot entry is monopolized in a single PE file that can be signed
-cryptographically as one for the purpose of EFI SecureBoot.
-
-A valid unified kernel image must contain two PE sections:
-
-* `.cmdline` section with the kernel command line
-* `.osrel` section with an embedded copy of the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file describing the image
-
-The `PRETTY_NAME=` and `VERSION_ID=` fields in the embedded os-release file are used the same as `title` and `version` in the "boot loader specification" entries. The `.cmdline` section is used instead of the `options` field. `linux` and `initrd` fields are not necessary, and there is no counterpart for the `machine-id` field.
-
-On EFI, any such images shall be added to the list of valid boot entries.
-
-### Additional notes
-
-Note that these configurations snippets do not need to be the only configuration source for a boot loader. It may extend this list of entries with additional items from other configuration files (for example its own native configuration files) or automatically detected other entries without explicit configuration.
-
-To make this explicitly clear: this specification is designed with "free" operating systems in mind, starting Windows or macOS is out of focus with these configuration snippets, use boot-loader specific solutions for that. In the text above, if we say "OS" we hence imply "free", i.e. primarily Linux (though this could be easily be extended to the BSDs and whatnot).
-
-Note that all paths used in the configuration snippets use a Unix-style "/" as path separator. This needs to be converted to an EFI-style "\\" separator in EFI boot loaders.
-
-
-## Logic
-
-A _boot loader_ needs a file system driver to discover and read `$BOOT`, then
-simply reads all files `$BOOT/loader/entries/*.conf`, and populates its boot
-menu with this. On EFI, it then extends this with any unified kernel images
-found in `$BOOT/EFI/Linux/*.efi`. It may also add additional entries, for
-example a "Reboot into firmware" option. Optionally it may sort the menu based
-on the `machine-id` and `version` fields, and possibly others. It uses the file
-name to identify specific items, for example in case it supports storing away
-default entry information somewhere. A boot loader should generally not modify
-these files.
-
-For "Boot Loader Specification Entries" (Type #1), the _kernel package
-installer_ installs the kernel and initrd images to `$BOOT` (it is recommended
-to place these files in a vendor and OS and installation specific directory)
-and then generates a configuration snippet for it, placing this in
-`$BOOT/loader/entries/xyz.conf`, with xyz as concatenation of machine id and
-version information (see above). The files created by a kernel package are
-private property of the kernel package and should be removed along with it.
-
-For "EFI Unified Kernel Images" (Type #2), the vendor or kernel package
-installer creates the combined image and drops it into `$BOOT/EFI/Linux/`. This
-file is also private property of the kernel package and should be removed along
-with it.
-
-A _UI application_ intended to show available boot options shall operate similar to a boot loader, but might apply additional filters, for example by filtering out the booted OS via the machine ID, or by suppressing all but the newest kernel versions.
-
-An _OS installer_ picks the right place for `$BOOT` as defined above (possibly creating a partition and file system for it) and pre-creates the `/loader/entries/` directory in it. It then installs an appropriate boot loader that can read these snippets. Finally, it installs one or more kernel packages.
-
-
-## Out of Focus
-
-There are a couple of items that are out of focus for this specification:
-
-* If userspace can figure out the available boot options, then this is only useful so much: we'd still need to come up with a way how userspace could communicate to the boot loader the default boot loader entry temporarily or persistently. Defining a common scheme for this is certainly a good idea, but out of focus for this specification.
-* This specification is just about "Free" Operating systems. Hooking in other operating systems (like Windows and macOS) into the boot menu is a different story and should probably happen outside of this specification. For example, boot loaders might choose to detect other available OSes dynamically at runtime without explicit configuration (like `systemd-boot` does it), or via native configuration (for example via explicit Grub2 configuration generated once at installation).
-* This specification leaves undefined what to do about systems which are upgraded from an OS that does not implement this specification. As the previous boot loader logic was largely handled by in distribution-specific ways we probably should leave the upgrade path (and whether there actually is one) to the distributions. The simplest solution might be to simply continue with the old scheme for old installations and use this new scheme only for new installations.
-
-
-## Links
-
-[GUID Partition Table](https://en.wikipedia.org/wiki/GUID_Partition_Table)<br>
-[Boot Loader Interface](https://systemd.io/BOOT_LOADER_INTERFACE)<br>
-[Discoverable Partitions Specification](https://systemd.io/DISCOVERABLE_PARTITIONS)<br>
-[systemd-boot(7)](https://www.freedesktop.org/software/systemd/man/systemd-boot.html)<br>
-[bootctl(1)](https://www.freedesktop.org/software/systemd/man/bootctl.html)<br>
-[systemd-gpt-auto-generator(8)](https://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html)
+[This content has moved to the UAPI group website](https://uapi-group.org/specifications/specs/boot_loader_specification/)
diff --git a/docs/BUILDING_IMAGES.md b/docs/BUILDING_IMAGES.md
new file mode 100644
index 0000000..c7f7d49
--- /dev/null
+++ b/docs/BUILDING_IMAGES.md
@@ -0,0 +1,275 @@
+---
+title: Safely Building Images
+category: Concepts
+layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
+---
+
+# Safely Building Images
+
+In many scenarios OS installations are shipped as pre-built images, that
+require no further installation process beyond simple `dd`-ing the image to
+disk and booting it up. When building such "golden" OS images for
+`systemd`-based OSes a few points should be taken into account.
+
+Most of the points described here are implemented by the
+[`mkosi`](https://github.com/systemd/mkosi) OS image builder developed and
+maintained by the systemd project. If you are using or working on another image
+builder it's recommended to keep the following concepts and recommendations in
+mind.
+
+## Resources to Reset
+
+Typically the same OS image shall be deployable in multiple instances, and each
+instance should automatically acquire its own identifying credentials on first
+boot. For that it's essential to:
+
+1. Remove the
+   [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html)
+   file or write the string `uninitialized\n` into it. This file is supposed to
+   carry a 128bit identifier unique to the system. Only when it is reset it
+   will be auto-generated on first boot and thus be truly unique. If this file
+   is not reset, and carries a valid ID every instance of the system will come
+   up with the same ID and that will likely lead to problems sooner or later,
+   as many network-visible identifiers are commonly derived from the machine
+   ID, for example, IPv6 addresses or transient MAC addresses.
+
+2. Remove the `/var/lib/systemd/random-seed` file (see
+   [`systemd-random-seed(8)`](https://www.freedesktop.org/software/systemd/man/systemd-random-seed.service.html)),
+   which is used to seed the kernel's random pool on boot. If this file is
+   shipped pre-initialized, every instance will seed its random pool with the
+   same random data that is included in the image, and thus possibly generate
+   random data that is more similar to other instances booted off the same
+   image than advisable.
+
+3. Remove the `/loader/random-seed` file (see
+   [`systemd-boot(7)`](https://www.freedesktop.org/software/systemd/man/systemd-boot.html))
+   from the UEFI System Partition (ESP), in case the `systemd-boot` boot loader
+   is used in the image.
+
+4. It might also make sense to remove
+   [`/etc/hostname`](https://www.freedesktop.org/software/systemd/man/hostname.html)
+   and
+   [`/etc/machine-info`](https://www.freedesktop.org/software/systemd/man/machine-info.html)
+   which carry additional identifying information about the OS image.
+
+5. Remove `/var/lib/systemd/credential.secret` which is used for protecting
+   service credentials, see
+   [`systemd.exec(5)`](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Credentials)
+   and
+   [`systemd-creds(1)`](https://www.freedesktop.org/software/systemd/man/systemd-creds.html)
+   for details. Note that by removing this file access to previously encrypted
+   credentials from this image is lost. The file is automatically generated if
+   a new credential is encrypted and the file does not exist yet.
+
+## Boot Menu Entry Identifiers
+
+The
+[`kernel-install(8)`](https://www.freedesktop.org/software/systemd/man/kernel-install.html)
+logic used to generate
+[Boot Loader Specification Type #1](https://uapi-group.org/specifications/specs/boot_loader_specification/#type-1-boot-loader-specification-entries)
+entries by default uses the machine ID as stored in `/etc/machine-id` for
+naming boot menu entries and the directories in the ESP to place kernel images
+in. This is done in order to allow multiple installations of the same OS on the
+same system without conflicts. However, this is problematic if the machine ID
+shall be generated automatically on first boot: if the ID is not known before
+the first boot it cannot be used to name the most basic resources required for
+the boot process to complete.
+
+Thus, for images that shall acquire their identity on first boot only, it is
+required to use a different identifier for naming boot menu entries. To allow
+this the `kernel-install` logic knows the generalized *entry* *token* concept,
+which can be a freely chosen string to use for identifying the boot menu
+resources of the OS. If not configured explicitly it defaults to the machine
+ID. The file `/etc/kernel/entry-token` may be used to configure this string
+explicitly. Thus, golden image builders should write a suitable identifier into
+this file, for example, the `IMAGE_ID=` or `ID=` field from
+[`/etc/os-release`](https://www.freedesktop.org/software/systemd/man/os-release.html)
+(also see below). It is recommended to do this before the `kernel-install`
+functionality is invoked (i.e. before the package manager is used to install
+packages into the OS tree being prepared), so that the selected string is
+automatically used for all entries to be generated.
+
+## Booting with Empty `/var/` and/or Empty Root File System
+
+`systemd` is designed to be able to come up safely and robustly if the `/var/`
+file system or even the entire root file system (with exception of `/usr/`,
+i.e. the vendor OS resources) is empty (i.e. "unpopulated"). With this in mind
+it's relatively easy to build images that only ship a `/usr/` tree, and
+otherwise carry no other data, populating the rest of the directory hierarchy
+on first boot as needed.
+
+Specifically, the following mechanisms are in place:
+
+1. The `switch-root` logic in systemd, that is used to switch from the initrd
+   phase to the host will create the basic OS hierarchy skeleton if missing. It
+   will create a couple of directories strictly necessary to boot up
+   successfully, plus essential symlinks (such as those necessary for the
+   dynamic loader `ld.so` to function).
+
+2. PID 1 will initialize `/etc/machine-id` automatically if not initialized yet
+   (see above).
+
+3. The
+   [`nss-systemd(8)`](https://www.freedesktop.org/software/systemd/man/nss-systemd.html)
+   glibc NSS module ensures the `root` and `nobody` users and groups remain
+   resolvable, even without `/etc/passwd` and `/etc/group` around.
+
+4. The
+   [`systemd-sysusers(8)`](https://www.freedesktop.org/software/systemd/man/systemd-sysusers.service.html)
+   component will automatically populate `/etc/passwd` and `/etc/group` on
+   first boot with further necessary system users.
+
+5. The
+   [`systemd-tmpfiles(8)`](https://www.freedesktop.org/software/systemd/man/systemd-tmpfiles-setup.service.html)
+   component ensures that various files and directories below `/etc/`, `/var/`
+   and other places are created automatically at boot if missing. Unlike the
+   directories/symlinks created by the `switch-root` logic above this logic is
+   extensible by packages, and can adjust access modes, file ownership and
+   more. Among others this will also link `/etc/os-release` →
+   `/usr/lib/os-release`, ensuring that the OS release information is
+   unconditionally accessible through `/etc/os-release`.
+
+6. The
+   [`nss-myhostname(8)`](https://www.freedesktop.org/software/systemd/man/nss-myhostname.html)
+   glibc NSS module will ensure the local host name as well as `localhost`
+   remains resolvable, even without `/etc/hosts` around.
+
+With these mechanisms the hierarchies below `/var/` and `/etc/` can be safely
+and robustly populated on first boot, so that the OS can safely boot up. Note
+that some auxiliary package are not prepared to operate correctly if their
+configuration data in `/etc/` or their state directories in `/var/` are
+missing. This can typically be addressed via `systemd-tmpfiles` lines that
+ensure the missing files and directories are created if missing. In particular,
+configuration files that are necessary for operation can be automatically
+copied or symlinked from the `/usr/share/factory/etc/` tree via the `C` or `L`
+line types. That said, we recommend that all packages safely fall back to
+internal defaults if their configuration is missing, making such additional
+steps unnecessary.
+
+Note that while `systemd` itself explicitly supports booting up with entirely
+unpopulated images (`/usr/` being the only required directory to be populated)
+distributions might not be there yet: depending on your distribution further,
+manual work might be required to make this scenario work.
+
+## Adapting OS Images to Storage
+
+Typically, if an image is `dd`-ed onto a target disk it will be minimal:
+i.e. only consist of necessary vendor data, and lack "payload" data, that shall
+be individual to the system, and dependent on host parameters. On first boot,
+the OS should take possession of the backing storage as necessary, dynamically
+using available space. Specifically:
+
+1. Additional partitions should be created, that make no sense to ship
+   pre-built in the image. For example, `/tmp/` or `/home/` partitions, or even
+   `/var/` or the root file system (see above).
+
+2. Additional partitions should be created that shall function as A/B
+   secondaries for partitions shipped in the original image. In other words: if
+   the `/usr/` file system shall be updated in an A/B fashion it typically
+   makes sense to ship the original A file system in the deployed image, but
+   create the B partition on first boot.
+
+3. Partitions covering only a part of the disk should be grown to the full
+   extent of the disk.
+
+4. File systems in uninitialized partitions should be formatted with a file
+   system of choice.
+
+5. File systems covering only a part of a partition should be grown to the full
+   extent of the partition.
+
+6. Partitions should be encrypted with cryptographic keys generated locally on
+   the machine the system is first booted on, ensuring these keys remain local
+   and are not shared with any other instance of the OS image.
+
+Or any combination of the above: i.e. first create a partition, then encrypt
+it, then format it.
+
+`systemd` provides multiple tools to implement the above logic:
+
+1. The
+   [`systemd-repart(8)`](https://www.freedesktop.org/software/systemd/man/systemd-repart.service.html)
+   component may manipulate GPT partition tables automatically on boot, growing
+   partitions or adding in partitions taking the backing storage size into
+   account. It can also encrypt partitions automatically it creates (even bind
+   to TPM2, automatically) and populate partitions from various sources. It
+   does this all in a robust fashion so that aborted invocations will not leave
+   incompletely set up partitions around.
+
+2. The
+   [`systemd-growfs@(8).service`](https://www.freedesktop.org/software/systemd/man/systemd-growfs.html)
+   tool can automatically grow a file system to the partition it is contained
+   in. The `x-systemd.growfs` mount option in `/etc/fstab` is sufficient to
+   enable this logic for specific mounts. Alternatively appropriately set up
+   partitions can set GPT partition flag 59 to request this behaviour, see the
+   [Discoverable Partitions Specification](https://uapi-group.org/specifications/specs/discoverable_partitions_specification)
+   for details. If the file system is already grown it executes no operation.
+
+3. Similar, the `systemd-makefs@.service` and `systemd-makeswap@.service`
+   services can format file systems and swap spaces before first use, if they
+   carry no file system signature yet. The `x-systemd.makefs` mount option in
+   `/etc/fstab` may be used to request this functionality.
+
+## Provisioning Image Settings
+
+While a lot of work has gone into ensuring `systemd` systems can safely boot
+with unpopulated `/etc/` trees, it sometimes is desirable to set a couple of
+basic settings *after* `dd`-ing the image to disk, but *before* first boot. For
+this the tool
+[`systemd-firstboot(1)`](https://www.freedesktop.org/software/systemd/man/systemd-firstboot.html)
+can be useful, with its `--image=` switch. It may be used to set very basic
+settings, such as the root password or hostname on an OS disk image or
+installed block device.
+
+## Distinguishing First Boot
+
+For various purposes it's useful to be able to distinguish the first boot-up of
+the system from later boot-ups (for example, to set up TPM hardware
+specifically, or register a system somewhere). `systemd` provides mechanisms to
+implement that. Specifically, the `ConditionFirstBoot=` and `AssertFirstBoot=`
+settings may be used to conditionalize units to only run on first boot. See
+[`systemd.unit(5)`](https://www.freedesktop.org/software/systemd/man/systemd.unit.html#ConditionFirstBoot=)
+for details.
+
+A special target unit `first-boot-complete.target` may be used as milestone to
+safely handle first boots where the system is powered off too early: if the
+first boot process is aborted before this target is reached, the following boot
+process will be considered a first boot, too. Once the target is reached,
+subsequent boots will not be considered first boots anymore, even if the boot
+process is aborted immediately after. Thus, services that must complete fully
+before a system shall be considered fully past the first boot should be ordered
+before this target unit.
+
+Whether a system will come up in first boot state or not is derived from the
+initialization status of `/etc/machine-id`: if the file already carries a valid
+ID the system is already past the first boot. If it is not initialized yet it
+is still considered in the first boot state. For details see
+[`machine-id(5)`](https://www.freedesktop.org/software/systemd/man/machine-id.html).
+
+## Image Metadata
+
+Typically, when operating with golden disk images it is useful to be able to
+identify them and their version. For this the two fields `IMAGE_ID=` and
+`IMAGE_VERSION=` have been defined in
+[`os-release(5)`](https://www.freedesktop.org/software/systemd/man/os-release.html). These
+fields may be accessed from unit files and similar via the `%M` and `%A`
+specifiers.
+
+Depending on how the images are put together it might make sense to leave the
+OS distribution's `os-release` file as is in `/usr/lib/os-release` but to
+replace the usual `/etc/os-release` symlink with a regular file that extends
+the distribution's file with one augmented with these two additional
+fields.
+
+## Links
+
+[`machine-id(5)`](https://www.freedesktop.org/software/systemd/man/machine-id.html)<br>
+[`systemd-random-seed(8)`](https://www.freedesktop.org/software/systemd/man/systemd-random-seed.service.html)<br>
+[`os-release(5)`](https://www.freedesktop.org/software/systemd/man/os-release.html)<br>
+[Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification)<br>
+[Discoverable Partitions Specification](https://uapi-group.org/specifications/specs/discoverable_partitions_specification)<br>
+[`mkosi`](https://github.com/systemd/mkosi)<br>
+[`systemd-boot(7)`](https://www.freedesktop.org/software/systemd/man/systemd-boot.html)<br>
+[`systemd-repart(8)`](https://www.freedesktop.org/software/systemd/man/systemd-repart.service.html)<br>
+[`systemd-growfs@(8).service`](https://www.freedesktop.org/software/systemd/man/systemd-growfs.html)<br>
diff --git a/docs/CGROUP_DELEGATION.md b/docs/CGROUP_DELEGATION.md
index 773f254..f5509fb 100644
--- a/docs/CGROUP_DELEGATION.md
+++ b/docs/CGROUP_DELEGATION.md
@@ -2,6 +2,7 @@
 title: Control Group APIs and Delegation
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Control Group APIs and Delegation
@@ -23,13 +24,13 @@
 
 Before you read on, please make sure you read the low-level kernel
 documentation about the
-[unified cgroup hierarchy](https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html).
+[unified cgroup hierarchy](https://docs.kernel.org/admin-guide/cgroup-v2.html).
 This document then adds in the higher-level view from systemd.
 
 This document augments the existing documentation we already have:
 
-* [The New Control Group Interfaces](https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/)
-* [Writing VM and Container Managers](https://www.freedesktop.org/wiki/Software/systemd/writing-vm-managers/)
+* [The New Control Group Interfaces](https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface)
+* [Writing VM and Container Managers](https://www.freedesktop.org/wiki/Software/systemd/writing-vm-managers)
 
 These wiki documents are not as up to date as they should be, currently, but
 the basic concepts still fully apply. You should read them too, if you do something
@@ -77,7 +78,7 @@
 it's semantically broken in many ways, and in many cases doesn't actually do
 what people think it does. cgroup v2 is where things are going, and most new
 kernel features in this area are only added to cgroup v2, and not cgroup v1
-anymore. For example cgroup v2 provides proper cgroup-empty notifications, has
+anymore. For example, cgroup v2 provides proper cgroup-empty notifications, has
 support for all kinds of per-cgroup BPF magic, supports secure delegation of
 cgroup trees to less privileged processes and so on, which all are not
 available on cgroup v1.
@@ -252,6 +253,13 @@
 scope unit, or a service unit (or just use the service unit you already have
 for your service code), and turn on delegation for it.
 
+The service manager sets the `user.delegate` extended attribute (readable via
+`getxattr(2)` and related calls) to the character `1` on cgroup directories
+where delegation is enabled (and removes it on those cgroups where it is
+not). This may be used by service programs to determine whether a cgroup tree
+was delegated to them. Note that this is only supported on kernels 5.6 and
+newer in combination with systemd 251 and newer.
+
 (OK, here's one caveat: if you turn on delegation for a service, and that
 service has `ExecStartPost=`, `ExecReload=`, `ExecStop=` or `ExecStopPost=`
 set, then these commands will be executed within the `.control/` sub-cgroup of
@@ -265,6 +273,15 @@
 that the service's main cgroup is definitely an inner node by the time the
 service manager might start `ExecStartPost=`.)
 
+(Also note, if you intend to use "threaded" cgroups — as added in Linux 4.14 —,
+then you should do that *two* levels down from the main service cgroup your
+turned delegation on for. Why that? You need one level so that systemd can
+properly create the `.control` subgroup, as described above. But that one
+cannot be threaded, since that would mean `.control` has to be threaded too —
+this is a requirement of threaded cgroups: either a cgroup and all its siblings
+are threaded or none –, but systemd expects it to be a regular cgroup. Thus you
+have to nest a second cgroup beneath it which then can be threaded.)
+
 ## Three Scenarios
 
 Let's say you write a container manager, and you wonder what to do regarding
@@ -309,10 +326,12 @@
 
 3. 🙁 The *i-like-continents* option. In this option you'd leave your manager
    daemon where it is, and would not turn on delegation on its unit. However,
-   as first thing you register a new scope unit with systemd, and that scope
-   unit would have `Delegate=` turned on, and then you place all your
-   containers underneath it. From systemd's PoV there'd be two units: your
-   manager service and the big scope that contains all your containers in one.
+   as you start your first managed process (a container, for example) you would
+   register a new scope unit with systemd, and that scope unit would have
+   `Delegate=` turned on, and it would contain the PID of this process; all
+   your managed processes subsequently created should also be moved into this
+   scope. From systemd's PoV there'd be two units: your manager service and the
+   big scope that contains all your managed processes in one.
 
 BTW: if for whatever reason you say "I hate D-Bus, I'll never call any D-Bus
 API, kthxbye", then options #1 and #3 are not available, as they generally
@@ -353,7 +372,7 @@
 care. Replicating the cgroup hierarchies in those unsupported controllers would
 mean replicating the full cgroup paths in them, and hence the prefixing
 `.slice` components too, otherwise the hierarchies will start being orthogonal
-after all, and that's not really desirable. On more thing: systemd will clean
+after all, and that's not really desirable. One more thing: systemd will clean
 up after you in the hierarchies it manages: if your daemon goes down, its
 cgroups will be removed too. You basically get the guarantee that you start
 with a pristine cgroup sub-tree for your service or scope whenever it is
diff --git a/docs/CNAME b/docs/CNAME
deleted file mode 100644
index cdcf4d9..0000000
--- a/docs/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-systemd.io
\ No newline at end of file
diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md
index b906bf5..8e5455d 100644
--- a/docs/CODE_OF_CONDUCT.md
+++ b/docs/CODE_OF_CONDUCT.md
@@ -2,6 +2,7 @@
 title: systemd Community Conduct Guidelines
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # The systemd Community Conduct Guidelines
diff --git a/docs/CODE_QUALITY.md b/docs/CODE_QUALITY.md
index 0933a0e..0f983bd 100644
--- a/docs/CODE_QUALITY.md
+++ b/docs/CODE_QUALITY.md
@@ -2,6 +2,7 @@
 title: Code Quality Tools
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Code Quality Tools
@@ -22,7 +23,7 @@
 
 2. Use `./test/run-integration-tests.sh` to run the full integration test
    suite. This will build OS images with a number of integration tests and run
-   them in nspawn and qemu. Requires root.
+   them using `systemd-nspawn` and `qemu`. Requires root.
 
 3. Use `./coccinelle/run-coccinelle.sh` to run all
    [Coccinelle](http://coccinelle.lip6.fr/) semantic patch scripts we ship. The
@@ -37,26 +38,30 @@
    `./tools/find-tabs.sh recpatch` to fix them. (Again, grain of salt, foreign
    headers should usually be left unmodified.)
 
-6. Use `meson compile -C build check-api-docs` to compare the list of exported
-   symbols of `libsystemd.so` and `libudev.so` with the list of man pages. Symbols
+6. Use `ninja -C build check-api-docs` to compare the list of exported symbols
+   of `libsystemd.so` and `libudev.so` with the list of man pages. Symbols
    lacking documentation are highlighted.
 
-7. Use `meson compile -C build update-hwdb` to automatically download and import the
-   PCI, USB and OUI databases into hwdb.
+7. Use `ninja -C build update-hwdb` and `ninja -C build update-hwdb-autosuspend`
+   to automatically download and import the PCI, USB, and OUI databases and the
+   autosuspend quirks into the hwdb.
 
-8. Use `meson compile -C build update-man-rules` to update the meson rules for
-   building man pages automatically from the docbook XML files included in
-   `man/`.
+8. Use `ninja -C build update-man-rules` to update the meson rules for building
+   man pages automatically from the docbook XML files included in `man/`.
 
-9. There are multiple CI systems in use that run on every github PR submission.
+9. There are multiple CI systems in use that run on every github pull request
+   submission or update.
 
-10. [Coverity](https://scan.coverity.com/) is analyzing systemd master in
-    regular intervals. The reports are available
+10. [Coverity](https://scan.coverity.com/) is analyzing systemd `main` branch
+    in regular intervals. The reports are available
     [online](https://scan.coverity.com/projects/systemd).
 
-11. [oss-fuzz](https://oss-fuzz.com/) is continuously fuzzing the
+11. [OSS-Fuzz](https://github.com/google/oss-fuzz) is continuously fuzzing the
     codebase. Reports are available
-    [online](https://oss-fuzz.com/v2/testcases?project=systemd).
+    [online](https://oss-fuzz.com/testcases?project=systemd&open=yes).
+    It also builds
+    [coverage reports](https://oss-fuzz.com/coverage-report/job/libfuzzer_asan_systemd/latest)
+    daily.
 
 12. Our tree includes `.editorconfig`, `.dir-locals.el` and `.vimrc` files, to
     ensure that editors follow the right indentiation styles automatically.
@@ -64,17 +69,17 @@
 13. When building systemd from a git checkout the build scripts will
     automatically enable a git commit hook that ensures whitespace cleanliness.
 
-14. [LGTM](https://lgtm.com/) analyzes every commit pushed to master. The list
-    of active alerts can be found
-    [here](https://lgtm.com/projects/g/systemd/systemd/alerts/?mode=list).
+14. [CodeQL](https://codeql.github.com/) analyzes each PR and every commit
+    pushed to `main`. The list of active alerts can be found
+    [here](https://github.com/systemd/systemd/security/code-scanning).
 
 15. Each PR is automatically tested with [Address Sanitizer](https://clang.llvm.org/docs/AddressSanitizer.html)
     and [Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html).
-    See [Testing systemd using sanitizers](https://systemd.io/TESTING_WITH_SANITIZERS)
+    See [Testing systemd using sanitizers](TESTING_WITH_SANITIZERS.md)
     for more information.
 
 16. Fossies provides [source code misspelling reports](https://fossies.org/features.html#codespell).
-    The systemd report can be found [here](https://fossies.org/linux/test/systemd-master.tar.gz/codespell.html).
+    The systemd report can be found [here](https://fossies.org/linux/misc/systemd/codespell.html).
 
 Access to Coverity and oss-fuzz reports is limited. Please reach out to the
 maintainers if you need access.
diff --git a/docs/CODING_STYLE.md b/docs/CODING_STYLE.md
index 05fbb2a..9a35583 100644
--- a/docs/CODING_STYLE.md
+++ b/docs/CODING_STYLE.md
@@ -2,6 +2,7 @@
 title: Coding Style
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Coding Style
@@ -69,6 +70,7 @@
   ```
 
 - Do not write `foo ()`, write `foo()`.
+
 - `else` blocks should generally start on the same line as the closing `}`:
   ```c
   if (foobar) {
@@ -78,8 +80,77 @@
           dont_find_waldo();
   ```
 
+- Please define flags types like this:
+
+  ```c
+  typedef enum FoobarFlags {
+          FOOBAR_QUUX  = 1 << 0,
+          FOOBAR_WALDO = 1 << 1,
+          FOOBAR_XOXO  = 1 << 2,
+          …
+  } FoobarFlags;
+  ```
+
+  i.e. use an enum for it, if possible. Indicate bit values via `1 <<`
+  expressions, and align them vertically. Define both an enum and a type for
+  it.
+
+- If you define (non-flags) enums, follow this template:
+
+  ```c
+  typedef enum FoobarMode {
+          FOOBAR_AAA,
+          FOOBAR_BBB,
+          FOOBAR_CCC,
+          …
+          _FOOBAR_MAX,
+          _FOOBAR_INVALID = -EINVAL,
+  } FoobarMode;
+  ```
+
+  i.e. define a `_MAX` enum for the largest defined enum value, plus one. Since
+  this is not a regular enum value, prefix it with `_`. Also, define a special
+  "invalid" enum value, and set it to `-EINVAL`. That way the enum type can
+  safely be used to propagate conversion errors.
+
+- If you define an enum in a public API, be extra careful, as the size of the
+  enum might change when new values are added, which would break ABI
+  compatibility. Since we typically want to allow adding new enum values to an
+  existing enum type with later API versions, please use the
+  `_SD_ENUM_FORCE_S64()` macro in the enum definition, which forces the size of
+  the enum to be signed 64bit wide.
+
+- Empty lines to separate code blocks are a good thing, please add them
+  abundantly. However, please stick to one at a time, i.e. multiple empty lines
+  immediately following each other are not OK. Also, we try to keep function
+  calls and their immediate error handling together. Hence:
+
+  ```c
+  /* → empty line here is good */
+  r = some_function(…);
+  /* → empty line here would be bad */
+  if (r < 0)
+          return log_error_errno(r, "Some function failed: %m");
+  /* → empty line here is good */
+
+- In shell scripts, do not use whitespace after the redirection operator
+  (`>some/file` instead of `> some/file`, `<<EOF` instead of `<< EOF`).
+
 ## Code Organization and Semantics
 
+- For our codebase we intend to use ISO C11 *with* GNU extensions (aka
+  "gnu11"). Public APIs (i.e. those we expose via `libsystemd.so`
+  i.e. `systemd/sd-*.h`) should only use ISO C89 however (with a very limited
+  set of conservative and common extensions, such as fixed size integer types
+  from `<inttypes.h>`), so that we don't force consuming programs into C11
+  mode. (This discrepancy in particular means one thing: internally we use C99
+  `bool` booleans, externally C89-compatible `int` booleans which generally
+  have different size in memory and slightly different semantics, also see
+  below.)  Both for internal and external code it's OK to use even newer
+  features and GCC extension than "gnu11", as long as there's reasonable
+  fallback #ifdeffery in place to ensure compatibility is retained with older
+  compilers.
+
 - Please name structures in `PascalCase` (with exceptions, such as public API
   structs), variables and functions in `snake_case`.
 
@@ -140,7 +211,7 @@
   variables if you are sure that thread-safety doesn't matter in your
   case. Alternatively, consider using TLS, which is pretty easy to use with
   gcc's `thread_local` concept. It's also OK to store data that is inherently
-  global in global variables, for example data parsed from command lines, see
+  global in global variables, for example, data parsed from command lines, see
   below.
 
 - Our focus is on the GNU libc (glibc), not any other libcs. If other libcs are
@@ -152,25 +223,35 @@
 ## Using C Constructs
 
 - Allocate local variables where it makes sense: at the top of the block, or at
-  the point where they can be initialized. `r` is typically used for a local
-  state variable, but should almost always be declared at the top of the
+  the point where they can be initialized. Avoid huge variable declaration
+  lists at the top of the function.
+
+  As an exception, `int r` is typically used for a local state variable, but
+  should almost always be declared as the last variable at the top of the
   function.
 
   ```c
   {
-          uint64_t a, b;
+          uint64_t a;
           int r;
 
-          a = frobnicate();
-          b = a + 5;
-
-          r = do_something();
+          r = frobnicate(&a);
           if (r < 0)
                   …
+
+          uint64_t b = a + 1, c;
+
+          r = foobarify(a, b, &c);
+          if (r < 0)
+                  …
+
+          const char *pretty = prettify(a, b, c);
+          …
   }
   ```
 
-- Do not mix function invocations with variable definitions in one line.
+- Do not mix multiple variable definitions with function invocations or
+  complicated expressions:
 
   ```c
   {
@@ -224,7 +305,7 @@
 - To determine the length of a constant string `"foo"`, don't bother with
   `sizeof("foo")-1`, please use `strlen()` instead (both gcc and clang optimize
   the call away for fixed strings). The only exception is when declaring an
-  array. In that case use STRLEN, which evaluates to a static constant and
+  array. In that case use `STRLEN()`, which evaluates to a static constant and
   doesn't force the compiler to create a VLA.
 
 - Please use C's downgrade-to-bool feature only for expressions that are
@@ -265,6 +346,21 @@
   which will always work regardless if `p` is initialized or not, and
   guarantees that `p` is `NULL` afterwards, all in just one line.
 
+## Common Function Naming
+
+- Name destructor functions that destroy an object in full freeing all its
+  memory and associated resources (and thus invalidating the pointer to it)
+  `xyz_free()`. Example: `strv_free()`.
+
+- Name destructor functions that destroy only the referenced content of an
+  object but leave the object itself allocated `xyz_done()`. If it resets all
+  fields so that the object can be reused later call it `xyz_clear()`.
+
+- Functions that decrease the reference counter of an object by one should be
+  called `xyz_unref()`. Example: `json_variant_unref()`. Functions that
+  increase the reference counter by one should be called `xyz_ref()`. Example:
+  `json_variant_ref()`
+
 ## Error Handling
 
 - Error codes are returned as negative `Exxx`. e.g. `return -EINVAL`. There are
@@ -275,6 +371,25 @@
   one cause, it *really* should have an `int` as the return value for the error
   code.
 
+- libc system calls typically return -1 on error (with the error code in
+  `errno`), and >= 0 on success. Use the RET_NERRNO() helper if you are looking
+  for a simple way to convert this libc style error returning into systemd
+  style error returning. e.g.
+
+  ```c
+  …
+  r = RET_NERRNO(unlink(t));
+  …
+  ```
+
+  or
+
+  ```c
+  …
+  r = RET_NERRNO(open("/some/file", O_RDONLY|O_CLOEXEC));
+  …
+  ```
+
 - Do not bother with error checking whether writing to stdout/stderr worked.
 
 - Do not log errors from "library" code, only do so from "main program"
@@ -329,7 +444,7 @@
 
 - For every function you add, think about whether it is a "logging" function or
   a "non-logging" function. "Logging" functions do (non-debug) logging on their
-  own, "non-logging" function never log on their own (except at debug level)
+  own, "non-logging" functions never log on their own (except at debug level)
   and expect their callers to log. All functions in "library" code, i.e. in
   `src/shared/` and suchlike must be "non-logging". Every time a "logging"
   function calls a "non-logging" function, it should log about the resulting
@@ -364,10 +479,11 @@
 
 - Avoid fixed-size string buffers, unless you really know the maximum size and
   that maximum size is small. It is often nicer to use dynamic memory,
-  `alloca()` or VLAs. If you do allocate fixed-size strings on the stack, then
-  it is probably only OK if you either use a maximum size such as `LINE_MAX`,
-  or count in detail the maximum size a string can have. (`DECIMAL_STR_MAX` and
-  `DECIMAL_STR_WIDTH` macros are your friends for this!)
+  `alloca_safe()` or VLAs. If you do allocate fixed-size strings on the stack,
+  then it is probably only OK if you either use a maximum size such as
+  `LINE_MAX`, or count in detail the maximum size a string can
+  have. (`DECIMAL_STR_MAX` and `DECIMAL_STR_WIDTH` macros are your friends for
+  this!)
 
   Or in other words, if you use `char buf[256]` then you are likely doing
   something wrong!
@@ -375,13 +491,20 @@
 - Make use of `_cleanup_free_` and friends. It makes your code much nicer to
   read (and shorter)!
 
-- Use `alloca()`, but never forget that it is not OK to invoke `alloca()`
-  within a loop or within function call parameters. `alloca()` memory is
-  released at the end of a function, and not at the end of a `{}` block. Thus,
-  if you invoke it in a loop, you keep increasing the stack pointer without
-  ever releasing memory again. (VLAs have better behavior in this case, so
-  consider using them as an alternative.)  Regarding not using `alloca()`
-  within function parameters, see the BUGS section of the `alloca(3)` man page.
+- Do not use `alloca()`, `strdupa()` or `strndupa()` directly. Use
+  `alloca_safe()`, `strdupa_safe()` or `strndupa_safe()` instead. (The
+  difference is that the latter include an assertion that the specified size is
+  below a safety threshold, so that the program rather aborts than runs into
+  possible stack overruns.)
+
+- Use `alloca_safe()`, but never forget that it is not OK to invoke
+  `alloca_safe()` within a loop or within function call
+  parameters. `alloca_safe()` memory is released at the end of a function, and
+  not at the end of a `{}` block. Thus, if you invoke it in a loop, you keep
+  increasing the stack pointer without ever releasing memory again. (VLAs have
+  better behavior in this case, so consider using them as an alternative.)
+  Regarding not using `alloca_safe()` within function parameters, see the BUGS
+  section of the `alloca(3)` man page.
 
 - If you want to concatenate two or more strings, consider using `strjoina()`
   or `strjoin()` rather than `asprintf()`, as the latter is a lot slower. This
@@ -454,7 +577,8 @@
 
 - Use the bool type for booleans, not integers. One exception: in public
   headers (i.e those in `src/systemd/sd-*.h`) use integers after all, as `bool`
-  is C99 and in our public APIs we try to stick to C89 (with a few extensions).
+  is C99 and in our public APIs we try to stick to C89 (with a few extensions;
+  also see above).
 
 ## Deadlocks
 
@@ -481,9 +605,9 @@
 
 - It's a good idea to use `O_NONBLOCK` when opening 'foreign' regular files,
   i.e.  file system objects that are supposed to be regular files whose paths
-  where specified by the user and hence might actually refer to other types of
+  were specified by the user and hence might actually refer to other types of
   file system objects. This is a good idea so that we don't end up blocking on
-  'strange' file nodes, for example if the user pointed us to a FIFO or device
+  'strange' file nodes, for example, if the user pointed us to a FIFO or device
   node which may block when opening. Moreover even for actual regular files
   `O_NONBLOCK` has a benefit: it bypasses any mandatory lock that might be in
   effect on the regular file. If in doubt consider turning off `O_NONBLOCK`
@@ -554,6 +678,11 @@
   `uint16_t`. Also, "network byte order" is just a weird name for "big endian",
   hence we might want to call it "big endian" right-away.
 
+- Use `typesafe_inet_ntop()`, `typesafe_inet_ntop4()`, and
+  `typesafe_inet_ntop6()` instead of `inet_ntop()`. But better yet, use the
+  `IN_ADDR_TO_STRING()`, `IN4_ADDR_TO_STRING()`, and `IN6_ADDR_TO_STRING()`
+  macros which allocate an anonymous buffer internally.
+
 - Please never use `dup()`. Use `fcntl(fd, F_DUPFD_CLOEXEC, 3)` instead. For
   two reasons: first, you want `O_CLOEXEC` set on the new `fd` (see
   above). Second, `dup()` will happily duplicate your `fd` as 0, 1, 2,
@@ -571,11 +700,11 @@
   process, please use `_exit()` instead of `exit()`, so that the exit handlers
   are not run.
 
-- We never use the POSIX version of `basename()` (which glibc defines in
-  `libgen.h`), only the GNU version (which glibc defines in `string.h`).  The
-  only reason to include `libgen.h` is because `dirname()` is needed. Every
-  time you need that please immediately undefine `basename()`, and add a
-  comment about it, so that no code ever ends up using the POSIX version!
+- Do not use `basename()` or `dirname()`. The semantics in corner cases are
+  full of pitfalls, and the fact that there are two quite different versions of
+  `basename()` (one POSIX and one GNU, of which the latter is much more useful)
+  doesn't make it better either. Use path_extract_filename() and
+  path_extract_directory() instead.
 
 - Never use `FILENAME_MAX`. Use `PATH_MAX` instead (for checking maximum size
   of paths) and `NAME_MAX` (for checking maximum size of filenames).
@@ -586,7 +715,29 @@
 ## Committing to git
 
 - Commit message subject lines should be prefixed with an appropriate component
-  name of some kind. For example "journal: ", "nspawn: " and so on.
+  name of some kind. For example, "journal: ", "nspawn: " and so on.
 
 - Do not use "Signed-Off-By:" in your commit messages. That's a kernel thing we
   don't do in the systemd project.
+
+## Commenting
+
+- The best place for code comments and explanations is in the code itself. Only
+  the second best is in git commit messages. The worst place is in the GitHub
+  PR cover letter. Hence, whenever you type a commit message consider for a
+  moment if what you are typing there wouldn't be a better fit for an in-code
+  comment. And if you type the cover letter of a PR, think hard if this
+  wouldn't be better as a commit message or even code comment. Comments are
+  supposed to be useful for somebody who reviews the code, and hence hiding
+  comments in git commits or PR cover letters makes reviews unnecessarily
+  hard. Moreover, while we rely heavily on GitHub's project management
+  infrastructure we'd like to keep everything that can reasonably be kept in
+  the git repository itself in the git repository, so that we can theoretically
+  move things elsewhere with the least effort possible.
+
+- It's OK to reference GitHub PRs, GitHub issues and git commits from code
+  comments. Cross-referencing code, issues, and documentation is a good thing.
+
+- Reasonable use of non-ASCII Unicode UTF-8 characters in code comments is
+  welcome. If your code comment contains an emoji or two this will certainly
+  brighten the day of the occasional reviewer of your code. Really! 😊
diff --git a/docs/CONTAINER_INTERFACE.md b/docs/CONTAINER_INTERFACE.md
index f7b5c7e..ddeaf8e 100644
--- a/docs/CONTAINER_INTERFACE.md
+++ b/docs/CONTAINER_INTERFACE.md
@@ -2,6 +2,7 @@
 title: Container Interface
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # The Container Interface
@@ -21,10 +22,12 @@
    (that file overrides whatever is pre-initialized by the container manager).
 
 2. Make sure to pre-mount `/proc/`, `/sys/`, and `/sys/fs/selinux/` before
-   invoking systemd, and mount `/proc/sys/`, `/sys/`, and `/sys/fs/selinux/`
-   read-only in order to prevent the container from altering the host kernel's
-   configuration settings. (As a special exception, if your container has
-   network namespaces enabled, feel free to make `/proc/sys/net/` writable).
+   invoking systemd, and mount `/sys/`, `/sys/fs/selinux/` and `/proc/sys/`
+   read-only (the latter via e.g. a read-only bind mount on itself) in order
+   to prevent the container from altering the host kernel's configuration
+   settings. (As a special exception, if your container has network namespaces
+   enabled, feel free to make `/proc/sys/net/` writable. If it also has user, ipc,
+   uts and pid namespaces enabled, the entire `/proc/sys` can be left writable).
    systemd and various other subsystems (such as the SELinux userspace) have
    been modified to behave accordingly when these file systems are read-only.
    (It's OK to mount `/sys/` as `tmpfs` btw, and only mount a subset of its
@@ -34,15 +37,18 @@
    in this context.)
 
 3. Pre-mount `/dev/` as (container private) `tmpfs` for the container and bind
-   mount some suitable TTY to `/dev/console`. Also, make sure to create device
-   nodes for `/dev/null`, `/dev/zero`, `/dev/full`, `/dev/random`,
-   `/dev/urandom`, `/dev/tty`, `/dev/ptmx` in `/dev/`. It is not necessary to
-   create `/dev/fd` or `/dev/stdout`, as systemd will do that on its own. Make
-   sure to set up a `BPF_PROG_TYPE_CGROUP_DEVICE` BPF program — on cgroupv2 —
-   or the `devices` cgroup controller — on cgroupv1 — so that no other devices
-   but these may be created in the container. Note that many systemd services
-   use `PrivateDevices=`, which means that systemd will set up a private
-   `/dev/` for them for which it needs to be able to create these device nodes.
+   mount some suitable TTY to `/dev/console`. If this is a pty, make sure to
+   not close the controlling pty during systemd's lifetime. PID 1 will close
+   ttys, to avoid being killed by SAK. It only opens ttys for the time it
+   actually needs to print something. Also, make sure to create device nodes
+   for `/dev/null`, `/dev/zero`, `/dev/full`, `/dev/random`, `/dev/urandom`,
+   `/dev/tty`, `/dev/ptmx` in `/dev/`. It is not necessary to create `/dev/fd`
+   or `/dev/stdout`, as systemd will do that on its own. Make sure to set up a
+   `BPF_PROG_TYPE_CGROUP_DEVICE` BPF program — on cgroupv2 — or the `devices`
+   cgroup controller — on cgroupv1 — so that no other devices but these may be
+   created in the container. Note that many systemd services use
+   `PrivateDevices=`, which means that systemd will set up a private `/dev/`
+   for them for which it needs to be able to create these device nodes.
    Dropping `CAP_MKNOD` for containers is hence generally not advisable, but
    see below.
 
@@ -204,7 +210,7 @@
    container name the external side `ve-` + the container name.
 
 3. It is recommended to configure stable MAC addresses for container `veth`
-   devices, for example hashed out of the container names. That way it is more
+   devices, for example, hashed out of the container names. That way it is more
    likely that DHCP and IPv4LL will acquire stable addresses.
 
 ## The `/run/host/` Hierarchy
@@ -257,7 +263,7 @@
    short string identifying the container manager implementation. This file
    should be newline terminated. Passing this information via this file has the
    benefit that payload code can easily access it, even when running
-   unprivileged without access to the container PID1's environment block.
+   unprivileged without access to the container PID 1's environment block.
 
 6. The `/run/host/container-uuid` file may be used to pass the same information
    as the `$container_uuid` environment variable (see above). This file should
@@ -271,7 +277,7 @@
 1. Do not drop `CAP_MKNOD` from the container. `PrivateDevices=` is a commonly
    used service setting that provides a service with its own, private, minimal
    version of `/dev/`. To set this up systemd in the container needs this
-   capability. If you take away the capability than all services that set this
+   capability. If you take away the capability, then all services that set this
    flag will cease to work. Use `BPF_PROG_TYPE_CGROUP_DEVICE` BPF programs — on
    cgroupv2 — or the `devices` controller — on cgroupv1 — to restrict what
    device nodes the container can create instead of taking away the capability
@@ -292,9 +298,9 @@
    you cannot link them to each other.
 
 4. Do not pretend that the real VTs are available in the container. The VT
-   subsystem consists of all the devices `/dev/tty*`, `/dev/vcs*`, `/dev/vcsa*`
-   plus their `sysfs` counterparts. They speak specific `ioctl()`s and
-   understand specific escape sequences, that other ptys don't understand.
+   subsystem consists of all the devices `/dev/tty[0-9]*`, `/dev/vcs*`,
+   `/dev/vcsa*` plus their `sysfs` counterparts. They speak specific `ioctl()`s
+   and understand specific escape sequences, that other ptys don't understand.
    Hence, it is explicitly not OK to mount a pty to `/dev/tty1`, `/dev/tty2`,
    `/dev/tty3`. This is explicitly not supported.
 
@@ -383,7 +389,7 @@
 are unlikely to do the same.
 
 Note that it is our intention to make systemd systems work flawlessly and
-out-of-the-box in containers. In fact we are interested to ensure that the same
+out-of-the-box in containers. In fact, we are interested to ensure that the same
 OS image can be booted on a bare system, in a VM and in a container, and behave
 correctly each time. If you notice that some component in systemd does not work
 in a container as it should, even though the container manager implements
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
index cab0074..099a482 100644
--- a/docs/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -2,6 +2,7 @@
 title: Contributing
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Contributing
@@ -10,7 +11,7 @@
 
 ## Filing Issues
 
-* We use [GitHub Issues](https://github.com/systemd/systemd/issues) **exclusively** for tracking **bugs** and **feature** **requests** (RFEs) of systemd. If you are looking for help, please contact [systemd-devel mailing list](https://lists.freedesktop.org/mailman/listinfo/systemd-devel) instead.
+* We use [GitHub Issues](https://github.com/systemd/systemd/issues) **exclusively** for tracking **bugs** and **feature** **requests** (RFEs) of systemd. If you are looking for help, please try the forums of your distribution first, or [systemd-devel mailing list](https://lists.freedesktop.org/mailman/listinfo/systemd-devel) for general questions about systemd.
 * We only track bugs in the **two** **most** **recently** **released** (non-rc) **versions** of systemd in the GitHub Issue tracker. If you are using an older version of systemd, please contact your distribution's bug tracker instead (see below). See [GitHub Release Page](https://github.com/systemd/systemd/releases) for the list of most recent releases.
 * When filing a feature request issue (RFE), please always check first if the newest upstream version of systemd already implements the feature, and whether there's already an issue filed for your feature by someone else.
 * When filing an issue, specify the **systemd** **version** you are experiencing the issue with. Also, indicate which **distribution** you are using.
@@ -19,9 +20,11 @@
 Following these guidelines makes it easier for us to process your issue, and ensures we won't close your issue right-away for being misfiled.
 
 ### Older downstream versions
+
 For older versions that are still supported by your distribution please use respective downstream tracker:
+
 * **Fedora** - [bugzilla](https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora&component=systemd)
-* **RHEL/CentOS** - [bugzilla](https://bugzilla.redhat.com/) or [systemd-rhel github](https://github.com/systemd-rhel/)
+* **RHEL/CentOS stream** - [bugzilla](https://bugzilla.redhat.com/) or [systemd-rhel GitHub](https://github.com/redhat-plumbers)
 * **Debian** - [bugs.debian.org](https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=systemd)
 
 ## Security vulnerability reports
@@ -30,15 +33,80 @@
 
 ## Posting Pull Requests
 
-* Make sure to post PRs only relative to a very recent git master.
+* Make sure to post PRs only relative to a recent tip of the `main` branch.
 * Follow our [Coding Style](CODING_STYLE.md) when contributing code. This is a requirement for all code we merge.
 * Please make sure to test your change before submitting the PR. See the [Hacking guide](HACKING.md) for details on how to do this.
-* Make sure to run the test suite locally, before posting your PR. We use a CI system, meaning we don't even look at your PR, if the build and tests don't pass.
+* Make sure to run the test suite locally, before posting your PR. We use a CI system, meaning we don't even look at your PR if the build and tests don't pass.
 * If you need to update the code in an existing PR, force-push into the same branch, overriding old commits with new versions.
-* After you have pushed a new version, add a comment about the new version (no notification is sent just for the commits, so it's easy to miss the update without an explicit comment). If you are a member of the systemd project on GitHub, remove the `reviewed/needs-rework` label.
+* After you have pushed a new version, add a comment explaining the latest changes. If you are a member of the systemd project on GitHub, remove the `reviewed/needs-rework`/`ci-fails/needs-rework`/`needs-rebase` labels.
+* If you are copying existing code from another source (eg: a compat header), please make sure the license is compatible with `LGPL-2.1-or-later`. If the license is not `LGPL-2.1-or-later`, please add a note to [`LICENSES/README.md`](https://github.com/systemd/systemd/blob/main/LICENSES/README.md).
+* If the pull request stalls without review, post a ping in a comment after some time has passed. We are always short on reviewer time, and pull requests which haven't seen any recent activity can be easily forgotten.
+* Github will automatically add the `please-review` label when a pull request is opened or updated. If you need
+more information after a review, you can comment `/please-review` on the pull request to have Github add the
+`please-review` label to the pull request.
+
+## Reviewing Pull Requests
+
+* See [filtered list of pull requests](https://github.com/systemd/systemd/pulls?q=is%3Aopen+is%3Apr+-label%3A%22reviewed%2Fneeds-rework+%F0%9F%94%A8%22+-label%3Aneeds-rebase+-label%3Agood-to-merge%2Fwith-minor-suggestions+-label%3A%22good-to-merge%2Fwaiting-for-ci+%F0%9F%91%8D%22+-label%3Apostponed+-label%3A%22needs-reporter-feedback+%E2%9D%93%22+-label%3A%22dont-merge+%F0%9F%92%A3%22+-label%3A%22ci-fails%2Fneeds-rework+%F0%9F%94%A5%22+sort%3Aupdated-desc) for requests that are ready for review.
+* After performing a review, set
+
+  * `reviewed/needs-rework` if the pull request needs significant changes
+  * `ci-fails/needs-rework` if the automatic tests fail and the failure is relevant to the pull request
+  * `ci-failure-appears-unrelated` if the test failures seem irrelevant
+  * `needs-rebase` if the pull request needs a rebase because of conflicts
+  * `good-to-merge/waiting-for-ci` if the pull request should be merged without further review
+  * `good-to-merge/with-minor-suggestions` if the pull request should be merged after an update without going through another round of reviews
+
+Unfortunately only members of the `systemd` organization on github can change labels.
+If your pull request is mislabeled, make a comment in the pull request and somebody will fix it.
+Reviews from non-members are still welcome.
 
 ## Final Words
 
 We'd like to apologize in advance if we are not able to process and reply to your issue or PR right-away. We have a lot of work to do, but we are trying our best!
 
 Thank you very much for your contributions!
+
+# Backward Compatibility And External Dependencies
+
+We strive to keep backward compatibility where possible and reasonable. The following are general guidelines, not hard
+rules, and case-by-case exceptions might be applied at the discretion of the maintainers. The current set of build-time
+and runtime dependencies are documented in the [README](https://github.com/systemd/systemd/blob/main/README).
+
+## New features
+
+It is fine for new features/functionality/tools/daemons to require bleeding edge external dependencies, provided there
+are runtime and build-time graceful fallbacks (e.g.: a daemon will not be built, runtime functionality will be skipped with a clear log message).
+In case a new feature is added to both `systemd` and one of its dependencies, we expect the corresponding feature code to
+be merged upstream in the dependency before accepting our side of the implementation.
+Making use of new kernel syscalls can be achieved through compat wrappers in our tree (see: `src/basic/missing_syscall_def.h`),
+and does not need to wait for glibc support.
+
+## External Build/Runtime Dependencies
+
+It is often tempting to bump external dependencies' minimum versions to cut cruft, and in general it's an essential part
+of the maintenance process. But as a general rule, existing dependencies should not be bumped without strong
+reasons. When possible, we try to keep compatibility with the most recent LTS releases of each mainstream distribution
+for optional components, and with all currently maintained (i.e.: not EOL) LTS releases for core components. When in
+doubt, ask before committing time to work on contributions if it's not clear that cutting support would be obviously
+acceptable.
+
+## Kernel Requirements
+
+Same principles as with other dependencies should be applied. It is fine to require newer kernel versions for additional
+functionality or optional features, but very strong reasons should be required for breaking compatibility for existing
+functionality, especially for core components. It is not uncommon, for example, for embedded systems to be stuck on older
+kernel versions due to hardware requirements, so do not assume everybody is running with latest and greatest at all times.
+In general, [currently maintained LTS branches](https://www.kernel.org/category/releases.html) should keep being supported
+for existing functionality.
+
+## `libsystemd.so`
+
+`libsystemd.so` is a shared public library, so breaking ABI/API compatibility would create lot of work for everyone, and is not allowed. Instead, always add a new interface instead of modifying
+the signature of an existing function. It is fine to mark an interface as deprecated to gently nudge users toward a newer one,
+but support for the old one must be maintained.
+Symbol versioning and the compiler's deprecated attribute should be used when managing the lifetime of a public interface.
+
+## `libudev.so`
+
+`libudev.so` is a shared public library, and is still maintained, but should not gain new symbols at this point.
diff --git a/docs/CONVERTING_TO_HOMED.md b/docs/CONVERTING_TO_HOMED.md
index 78b6c61..06fc66f 100644
--- a/docs/CONVERTING_TO_HOMED.md
+++ b/docs/CONVERTING_TO_HOMED.md
@@ -2,6 +2,7 @@
 title: Converting Existing Users to systemd-homed
 category: Users, Groups and Home Directories
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Converting Existing Users to systemd-homed managed Users
@@ -15,10 +16,10 @@
 
 Before continuing, please read up on these basic concepts:
 
-* [Home Directories](https://systemd.io/HOME_DIRECTORY)
-* [JSON User Records](https://systemd.io/USER_RECORD)
-* [JSON Group Records](https://systemd.io/GROUP_RECORD)
-* [User/Group Record Lookup API via Varlink](https://systemd.io/USER_GROUP_API)
+* [Home Directories](HOME_DIRECTORY.md)
+* [JSON User Records](USER_RECORD.md)
+* [JSON Group Records](GROUP_RECORD.md)
+* [User/Group Record Lookup API via Varlink](USER_GROUP_API.md)
 
 ## Caveat
 
@@ -55,8 +56,8 @@
 
    This will tell you the `/etc/passwd` and `/etc/shadow` entries for your
    user. For details about the fields, see the respective man pages
-   [passwd(5)](http://man7.org/linux/man-pages/man5/passwd.5.html) and
-   [shadow(5)](http://man7.org/linux/man-pages/man5/shadow.5.html).
+   [passwd(5)](https://man7.org/linux/man-pages/man5/passwd.5.html) and
+   [shadow(5)](https://man7.org/linux/man-pages/man5/shadow.5.html).
 
    The fourth field in the `getent passwd foobar` output tells you the GID of
    your user's main group. Depending on your distribution it's a group private
@@ -113,7 +114,7 @@
    home directory temporarily and copy the data in.
 
     ```
-    homectl with foobar -- rsync -aHAXv --remove-source-files /home/foobar.saved/ .
+    homectl with foobar -- rsync -aHANUXv --remove-source-files /home/foobar.saved/ .
     ```
 
    This mounts the home directory of the user, and then runs the specified
diff --git a/docs/COREDUMP_PACKAGE_METADATA.md b/docs/COREDUMP_PACKAGE_METADATA.md
index f27f835..d84e269 100644
--- a/docs/COREDUMP_PACKAGE_METADATA.md
+++ b/docs/COREDUMP_PACKAGE_METADATA.md
@@ -1,125 +1,4 @@
 ---
-title: Package Metadata for Core Files
-category: Interfaces
-layout: default
+layout: forward
+target: /ELF_PACKAGE_METADATA
 ---
-
-# Package Metadata for Core Files
-
-*Intended audience: hackers working on userspace subsystems that create ELF binaries
-or parse ELF core files.*
-
-## Motivation
-
-ELF binaries get stamped with a unique, build-time generated hex string identifier called
-`build-id`, [which gets embedded as an ELF note called `.note.gnu.build-id`](https://fedoraproject.org/wiki/Releases/FeatureBuildId).
-In most cases, this allows to associate a stripped binary with its debugging information.
-It is used, for example, to dynamically fetch DWARF symbols from a debuginfo server, or
-to query the local package manager and find out the package metadata or, again, the DWARF
-symbols or program sources.
-
-However, this usage of the `build-id` requires either local metadata, usually set up by
-the package manager, or access to a remote server over the network. Both of those might
-be unavailable or forbidden.
-
-Thus it becomes desirable to add additional metadata to a binary at build time, so that
-`systemd-coredump` and other services analyzing core files are able to extract said
-metadata simply from the core file itself, without external dependencies.
-
-## Implementation
-
-This document will attempt to define a common metadata format specification, so that
-multiple implementers might use it when building packages, or core file analyzers, and
-so on.
-
-The metadata will be embedded in a single, new ELF header section, in a key-value JSON
-format. Implementers working on parsing core files should not assume a specific list of
-keys, but parse anything that is included in the section.
-Implementers working on build tools should strive to use the same key names, for
-consistency. The most common will be listed here. When corresponding to the content of
-os-release, the values should match, again for consistency.
-
-If available, the metadata should also include the debuginfod server URL that can provide
-the original executable, debuginfo and sources, to further facilitate debugging.
-
-* Section header
-
-```
-SECTION: `.note.package`
-node-id: `0xcafe1a7e`
-Owner: `FDO` (FreeDesktop.org)
-Value: a JSON string with the structure described below
-```
-
-* JSON payload
-
-```json
-{
-     "type":"rpm",          # this provides a namespace for the package+package-version fields
-     "os":"fedora",
-     "osVersion":"33",
-     "name":"coreutils",
-     "version": "4711.0815.fc13.arm32",
-     "osCpe": "cpe:/o:fedoraproject:fedora:33",          # A CPE name for the operating system, `CPE_NAME` from os-release is a good default
-     "debugInfoUrl": "https://debuginfod.fedoraproject.org/"
-}
-```
-
-A reference implementations of a [build-time tool is provided](https://github.com/systemd/package-notes)
-and can be used to generate a linker script, which can then be used at build time via
-```LDFLAGS="-Wl,-T,/path/to/generated/script"``` to include the note in the binary.
-
-Generator:
-```console
-$ ./generate-package-notes.py --rpm systemd-248~rc2-1.fc34
-SECTIONS
-{
-    .note.package : ALIGN(4) {
-        BYTE(0x04) BYTE(0x00) BYTE(0x00) BYTE(0x00) /* Length of Owner including NUL */
-        BYTE(0x64) BYTE(0x00) BYTE(0x00) BYTE(0x00) /* Length of Value including NUL */
-        BYTE(0x7e) BYTE(0x1a) BYTE(0xfe) BYTE(0xca) /* Note ID */
-        BYTE(0x46) BYTE(0x44) BYTE(0x4f) BYTE(0x00) /* Owner: 'FDO\x00' */
-        BYTE(0x7b) BYTE(0x22) BYTE(0x74) BYTE(0x79) /* Value: '{"type":"rpm","name":"systemd","version":"248~rc2-1.fc34","osCpe":"cpe:/o:fedoraproject:fedora:33"}\x00' */
-        BYTE(0x70) BYTE(0x65) BYTE(0x22) BYTE(0x3a)
-        BYTE(0x22) BYTE(0x72) BYTE(0x70) BYTE(0x6d)
-        BYTE(0x22) BYTE(0x2c) BYTE(0x22) BYTE(0x6e)
-        BYTE(0x61) BYTE(0x6d) BYTE(0x65) BYTE(0x22)
-        BYTE(0x3a) BYTE(0x22) BYTE(0x73) BYTE(0x79)
-        BYTE(0x73) BYTE(0x74) BYTE(0x65) BYTE(0x6d)
-        BYTE(0x64) BYTE(0x22) BYTE(0x2c) BYTE(0x22)
-        BYTE(0x76) BYTE(0x65) BYTE(0x72) BYTE(0x73)
-        BYTE(0x69) BYTE(0x6f) BYTE(0x6e) BYTE(0x22)
-        BYTE(0x3a) BYTE(0x22) BYTE(0x32) BYTE(0x34)
-        BYTE(0x38) BYTE(0x7e) BYTE(0x72) BYTE(0x63)
-        BYTE(0x32) BYTE(0x2d) BYTE(0x31) BYTE(0x2e)
-        BYTE(0x66) BYTE(0x63) BYTE(0x33) BYTE(0x34)
-        BYTE(0x22) BYTE(0x2c) BYTE(0x22) BYTE(0x6f)
-        BYTE(0x73) BYTE(0x43) BYTE(0x70) BYTE(0x65)
-        BYTE(0x22) BYTE(0x3a) BYTE(0x22) BYTE(0x63)
-        BYTE(0x70) BYTE(0x65) BYTE(0x3a) BYTE(0x2f)
-        BYTE(0x6f) BYTE(0x3a) BYTE(0x66) BYTE(0x65)
-        BYTE(0x64) BYTE(0x6f) BYTE(0x72) BYTE(0x61)
-        BYTE(0x70) BYTE(0x72) BYTE(0x6f) BYTE(0x6a)
-        BYTE(0x65) BYTE(0x63) BYTE(0x74) BYTE(0x3a)
-        BYTE(0x66) BYTE(0x65) BYTE(0x64) BYTE(0x6f)
-        BYTE(0x72) BYTE(0x61) BYTE(0x3a) BYTE(0x33)
-        BYTE(0x33) BYTE(0x22) BYTE(0x7d) BYTE(0x00)
-    }
-}
-INSERT AFTER .note.gnu.build-id;
-```
-
-## Well-known keys
-
-The metadata format is intentionally left open, so that vendors can add their own information.
-A set of well-known keys is defined here, and hopefully shared among all vendors.
-
-| Key name     | Key description                                                          | Example value                         |
-|--------------|--------------------------------------------------------------------------|---------------------------------------|
-| type         | The packaging type                                                       | rpm                                   |
-| os           | The OS name, typically corresponding to ID in os-release                 | fedora                                |
-| osVersion    | The OS version, typically corresponding to VERSION_ID in os-release      | 33                                    |
-| name         | The source package name                                                  | coreutils                             |
-| version      | The source package version                                               | 4711.0815.fc13.arm32                  |
-| osCpe        | A CPE name for the OS, typically corresponding to CPE_NAME in os-release | cpe:/o:fedoraproject:fedora:33        |
-| debugInfoUrl | The debuginfod server url, if available                                  | https://debuginfod.fedoraproject.org/ |
diff --git a/docs/CREDENTIALS.md b/docs/CREDENTIALS.md
new file mode 100644
index 0000000..8cdf6d7
--- /dev/null
+++ b/docs/CREDENTIALS.md
@@ -0,0 +1,446 @@
+---
+title: Credentials
+category: Concepts
+layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
+---
+
+# System and Service Credentials
+
+The `systemd` service manager supports a "credential" concept for securely
+acquiring and passing credential data to systems and services. The precise
+nature of the credential data is up to applications, but the concept is
+intended to provide systems and services with potentially security sensitive
+cryptographic keys, certificates, passwords, identity information and similar
+types of information. It may also be used as generic infrastructure for
+parameterizing systems and services.
+
+Traditionally, data of this nature has often been provided to services via
+environment variables (which is problematic because by default they are
+inherited down the process tree, have size limitations, and issues with binary
+data) or simple, unencrypted files on disk. `systemd`'s system and service
+credentials are supposed to provide a better alternative for this
+purpose. Specifically, the following features are provided:
+
+1. Service credentials are acquired at the moment of service activation, and
+   released on service deactivation. They are immutable during the service
+   runtime.
+
+2. Service credentials are accessible to service code as regular files, the
+   path to access them is derived from the environment variable
+   `$CREDENTIALS_DIRECTORY`.
+
+3. Access to credentials is restricted to the service's user. Unlike
+   environment variables the credential data is not propagated down the process
+   tree. Instead each time a credential is accessed an access check is enforced
+   by the kernel. If the service is using file system namespacing the loaded
+   credential data is invisible to all other services.
+
+4. Service credentials may be acquired from files on disk, specified as literal
+   strings in unit files, acquired from another service dynamically via an
+   `AF_UNIX` socket, or inherited from the system credentials the system itself
+   received.
+
+5. Credentials may optionally be encrypted and authenticated, either with a key
+   derived from a local TPM2 chip, or one stored in `/var/`, or both. This
+   encryption is supposed to *just* *work*, and requires no manual setup. (That
+   is besides first encrypting relevant credentials with one simple command,
+   see below.)
+
+6. Service credentials are placed in non-swappable memory. (If permissions
+   allow it, via `ramfs`.)
+
+7. Credentials may be acquired from a hosting VM hypervisor (SMBIOS OEM strings
+   or qemu `fw_cfg`), a hosting container manager, the kernel command line, or
+   from the UEFI environment and the EFI System Partition (via
+   `systemd-stub`). Such system credentials may then be propagated into
+   individual services as needed.
+
+8. Credentials are an effective way to pass parameters into services that run
+   with `RootImage=` or `RootDirectory=` and thus cannot read these resources
+   directly from the host directory tree.
+   Specifically, [Portable Services](PORTABLE_SERVICES.md) may be
+   parameterized this way securely and robustly.
+
+9. Credentials can be binary and relatively large (though currently an overall
+   size limit of 1M per service is enforced).
+
+## Configuring per-Service Credentials
+
+Within unit files, there are four settings to configure service credentials.
+
+1. `LoadCredential=` may be used to load a credential from disk, from an
+   `AF_UNIX` socket, or propagate them from a system credential.
+
+2. `SetCredential=` may be used to set a credential to a literal string encoded
+   in the unit file. Because unit files are world-readable (both on disk and
+   via D-Bus), this should only be used for credentials that aren't sensitive,
+   i.e. public keys/certificates – but not private keys.
+
+3. `LoadCredentialEncrypted=` is similar to `LoadCredential=` but will load an
+   encrypted credential, and decrypt it before passing it to the service. For
+   details on credential encryption, see below.
+
+4. `SetCredentialEncrypted=` is similar to `SetCredential=` but expects an
+   encrypted credential to be specified literally. Unlike `SetCredential=` it
+   is thus safe to be used even for sensitive information, because even though
+   unit files are world readable, the ciphertext included in them cannot be
+   decoded unless access to TPM2/encryption key is available.
+
+Each credential configured with these options carries a short name (suitable
+for inclusion in a filename) in the unit file, under which the invoked service
+code can then retrieve it. Each name should only be specified once.
+
+For details about these four settings [see the man
+page](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Credentials).
+
+It is a good idea to also enable mount namespacing for services that process
+credentials configured this way. If so, the runtime credential directory of the
+specific service is not visible to any other service. Use `PrivateMounts=` as
+minimal option to enable such namespacing. Note that many other sandboxing
+settings (e.g. `ProtectSystem=`, `ReadOnlyPaths=` and similar) imply
+`PrivateMounts=`, hence oftentimes it's not necessary to set this option
+explicitly.
+
+## Programming Interface from Service Code
+
+When a service is invoked with one or more credentials set it will have an
+environment variable `$CREDENTIALS_DIRECTORY` set. It contains an absolute path
+to a directory the credentials are placed in. In this directory for each
+configured credential one file is placed. In addition to the
+`$CREDENTIALS_DIRECTORY` environment variable passed to the service processes
+the `%d` specifier in unit files resolves to the service's credential
+directory.
+
+Example unit file:
+
+```
+…
+[Service]
+ExecStart=/usr/bin/myservice.sh
+LoadCredential=foobar:/etc/myfoobarcredential.txt
+Environment=FOOBARPATH=%d/foobar
+…
+```
+
+Associated service shell script `/usr/bin/myservice.sh`:
+
+```sh
+#!/bin/sh
+
+sha256sum $CREDENTIALS_DIRECTORY/foobar
+sha256sum $FOOBARPATH
+
+```
+
+A service defined like this will get the contents of the file
+`/etc/myfoobarcredential.txt` passed as credential `foobar`, which is hence
+accessible under `$CREDENTIALS_DIRECTORY/foobar`. Since we additionally pass
+the path to it as environment variable `$FOOBARPATH` the credential is also
+accessible as the path in that environment variable. When invoked, the service
+will hence show the same SHA256 hash value of `/etc/myfoobarcredential.txt`
+twice.
+
+In an ideal world, well-behaved service code would directly support credentials
+passed this way, i.e. look for `$CREDENTIALS_DIRECTORY` and load the credential
+data it needs from there. For daemons that do not support this but allow
+passing credentials via a path supplied over the command line use
+`${CREDENTIALS_DIRECTORY}` in the `ExecStart=` command line to reference the
+credentials directory. For daemons that allow passing credentials via a path
+supplied as environment variable, use the `%d` specifier in the `Environment=`
+setting to build valid paths to specific credentials.
+
+## Tools
+
+The
+[`systemd-creds`](https://www.freedesktop.org/software/systemd/man/systemd-creds.html)
+tool is provided to work with system and service credentials. It may be used to
+access and enumerate system and service credentials, or to encrypt/decrypt credentials
+(for details about the latter, see below).
+
+When invoked from service context, `systemd-creds` passed without further
+parameters will list passed credentials. The `systemd-creds cat xyz` command
+may be used to write the contents of credential `xyz` to standard output. If
+these calls are combined with the `--system` switch credentials passed to the
+system as a whole are shown, instead of those passed to the service the
+command is invoked from.
+
+Example use:
+
+```sh
+systemd-run -P --wait -p LoadCredential=abc:/etc/hosts systemd-creds cat abc
+```
+
+This will invoke a transient service with a credential `abc` sourced from the
+system's `/etc/hosts` file. This credential is then written to standard output
+via `systemd-creds cat`.
+
+## Encryption
+
+Credentials are supposed to be useful for carrying sensitive information, such
+as cryptographic key material. For this kind of data (symmetric) encryption and
+authentication are provided to make storage of the data at rest safer. The data
+may be encrypted and authenticated with AES256-GCM. The encryption key can
+either be one derived from the local TPM2 device, or one stored in
+`/var/lib/systemd/credential.secret`, or a combination of both. If a TPM2
+device is available and `/var/` resides on a persistent storage, the default
+behaviour is to use the combination of both for encryption, thus ensuring that
+credentials protected this way can only be decrypted and validated on the
+local hardware and OS installation. Encrypted credentials stored on disk thus
+cannot be decrypted without access to the TPM2 chip and the aforementioned key
+file `/var/lib/systemd/credential.secret`. Moreover, credentials cannot be
+prepared on a machine other than the local one.
+
+The `systemd-creds` tool provides the commands `encrypt` and `decrypt` to
+encrypt and decrypt/authenticate credentials. Example:
+
+```sh
+systemd-creds encrypt plaintext.txt ciphertext.cred
+shred -u plaintext.txt
+systemd-run -P --wait -p LoadCredentialEncrypted=foobar:$(pwd)/ciphertext.cred systemd-creds cat foobar
+```
+
+This will first create an encrypted copy of the file `plaintext.txt` in the
+encrypted credential file `ciphertext.cred`. It then securely removes the
+source file. It then runs a transient service, that reads the encrypted file
+and passes it as decrypted credential `foobar` to the invoked service binary
+(which here is the `systemd-creds` tool, which just writes the data
+it received to standard output).
+
+Instead of storing the encrypted credential as a separate file on disk, it can
+also be embedded in the unit file. Example:
+
+```
+systemd-creds encrypt -p --name=foobar plaintext.txt -
+```
+
+This will output a `SetCredentialEncrypted=` line that can directly be used in
+a unit file. e.g.:
+
+```
+…
+[Service]
+ExecStart=/usr/bin/systemd-creds cat foobar
+SetCredentialEncrypted=foobar: \
+        k6iUCUh0RJCQyvL8k8q1UyAAAAABAAAADAAAABAAAAC1lFmbWAqWZ8dCCQkAAAAAgAAAA \
+        AAAAAALACMA0AAAACAAAAAAfgAg9uNpGmj8LL2nHE0ixcycvM3XkpOCaf+9rwGscwmqRJ \
+        cAEO24kB08FMtd/hfkZBX8PqoHd/yPTzRxJQBoBsvo9VqolKdy9Wkvih0HQnQ6NkTKEdP \
+        HQ08+x8sv5sr+Mkv4ubp3YT1Jvv7CIPCbNhFtag1n5y9J7bTOKt2SQwBOAAgACwAAABIA \
+        ID8H3RbsT7rIBH02CIgm/Gv1ukSXO3DMHmVQkDG0wEciABAAII6LvrmL60uEZcp5qnEkx \
+        SuhUjsDoXrJs0rfSWX4QAx5PwfdFuxPusgEfTYIiCb8a/W6RJc7cMweZVCQMbTARyIAAA \
+        AAJt7Q9F/Gz0pBv1Lc4Dpn1WpebyBBm+vQ5N/lSKW2XSm8cONwCopxpDc7wJjXg7OTR6r \
+        xGCpIvGXLt3ibwJl81woLya2RRjIvc/R2zNm/yWzZAjiOLPih4SuHthqiX98ey8PUmZJB \
+        VGXglCZFjBx+d7eCqTIdghtp5pkDGwMJT6pjw4FfyFK2nJPawFKPAqzw9DK2iYttFeXi5 \
+        19xCfLBH9NKS/idlYXrhp+XIEtsr26s4lx5y10Goyc3qDOR3RD2cuZj0gHwV35hhhhcCz \
+        JaYytef1X/YL+7fYH5kuE4rxSksoUuA/LhtjszBeGbcbIT+O8SuvBJHLKTSHxPL8FTyk3 \
+        L4FSkEHs0rYwUIkKmnGohDdsYrMJ2fjH3yDNBP16aD1+f/Nuh75cjhUnGsDLt9K4hGg== \
+…
+```
+
+## Inheritance from Container Managers, Hypervisors, Kernel Command Line, or the UEFI Boot Environment
+
+Sometimes it is useful to parameterize whole systems the same way as services,
+via `systemd` credentials. In particular, it might make sense to boot a
+system with a set of credentials that are then propagated to individual
+services where they are ultimately consumed.
+
+`systemd` supports four ways to pass credentials to systems:
+
+1. A container manager may set the `$CREDENTIALS_DIRECTORY` environment
+   variable for systemd running as PID 1 in the container, the same way as
+   systemd would set it for a service it
+   invokes. [`systemd-nspawn(1)`](https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html#Credentials)'s
+   `--set-credential=` and `--load-credential=` switches implement this, in
+   order to pass arbitrary credentials from host to container payload. Also see
+   the [Container Interface](CONTAINER_INTERFACE.md)
+   documentation.
+
+2. Quite similar, VMs can be passed credentials via SMBIOS OEM strings (example
+   qemu command line switch `-smbios
+   type=11,value=io.systemd.credential:foo=bar` or `-smbios
+   type=11,value=io.systemd.credential.binary:foo=YmFyCg==`, the latter taking
+   a Base64 encoded argument to permit binary credentials being passed
+   in). Alternatively, qemu VMs can be invoked with `-fw_cfg
+   name=opt/io.systemd.credentials/foo,string=bar` to pass credentials from
+   host through the hypervisor into the VM via qemu's `fw_cfg` mechanism. (All
+   three of these specific switches would set credential `foo` to `bar`.)
+   Passing credentials via the SMBIOS mechanism is typically preferable over
+   `fw_cfg` since it is faster and less specific to the chosen VMM
+   implementation. Moreover, `fw_cfg` has a 55 character limitation
+   on names passed that way. So some settings may not fit.
+
+3. Credentials can also be passed into a system via the kernel command line,
+   via the `systemd.set-credential=` kernel command line option. Note though
+   that any data specified here is visible to any userspace application via
+   `/proc/cmdline`. This is hence typically not useful to pass sensitive
+   information.
+
+4. Credentials may also be passed from the UEFI environment to userspace, if
+   the
+   [`systemd-stub`](https://www.freedesktop.org/software/systemd/man/systemd-stub.html)
+   UEFI kernel stub is used. This allows placing encrypted credentials in the
+   EFI System Partition, which are then picked up by `systemd-stub` and passed
+   to the kernel and ultimately userspace where systemd receives them. This is
+   useful to implement secure parameterization of vendor-built and signed
+   initrds, as userspace can place credentials next to these EFI kernels, and
+   be sure they can be accessed securely from initrd context.
+
+Credentials passed to the system may be enumerated/displayed via `systemd-creds
+--system`. They may also be propagated down to services, via the
+`LoadCredential=` setting. Example:
+
+```
+systemd-nspawn --set-credential=mycred:supersecret -i test.raw -b
+```
+
+or
+
+```
+qemu-system-x86_64 \
+        -machine type=q35,accel=kvm,smm=on \
+        -smp 2 \
+        -m 1G \
+        -cpu host \
+        -nographic \
+        -nodefaults \
+        -serial mon:stdio \
+        -drive if=none,id=hd,file=test.raw,format=raw \
+        -device virtio-scsi-pci,id=scsi \
+        -device scsi-hd,drive=hd,bootindex=1 \
+        -smbios type=11,value=io.systemd.credential:mycred=supersecret
+```
+
+Either of these lines will boot a disk image `test.raw`, once as container via
+`systemd-nspawn`, and once as VM via `qemu`. In each case the credential
+`mycred` is set to `supersecret`.
+
+Inside of the system invoked that way the credential may then be viewed:
+
+```sh
+systemd-creds --system cat mycred
+```
+
+Or propagated to services further down:
+
+```
+systemd-run -p LoadCredential=mycred -P --wait systemd-creds cat mycred
+```
+
+## Well-Known Credentials
+
+Various services shipped with `systemd` consume credentials for tweaking behaviour:
+
+* [`systemd(1)`](https://www.freedesktop.org/software/systemd/man/systemd.html)
+  (I.E.: PID1, the system manager) will look for the credential `vmm.notify_socket`
+  and will use it to send a `READY=1` datagram when the system has finished
+  booting. This is useful for hypervisors/VMMs or other processes on the host
+  to receive a notification via VSOCK when a virtual machine has finished booting.
+  Note that in case the hypervisor does not support `SOCK_DGRAM` over `AF_VSOCK`,
+  `SOCK_SEQPACKET` will be tried instead. The credential payload should be in the
+  form: `vsock:<CID>:<PORT>`. Also note that this requires support for VHOST to be
+  built-in both the guest and the host kernels, and the kernel modules to be loaded.
+
+* [`systemd-sysusers(8)`](https://www.freedesktop.org/software/systemd/man/systemd-sysusers.html)
+  will look for the credentials `passwd.hashed-password.<username>`,
+  `passwd.plaintext-password.<username>` and `passwd.shell.<username>` to
+  configure the password (either in UNIX hashed form, or plaintext) or shell of
+  system users created. Replace `<username>` with the system user of your
+  choice, for example, `root`.
+
+* [`systemd-firstboot(1)`](https://www.freedesktop.org/software/systemd/man/systemd-firstboot.html)
+  will look for the credentials `firstboot.locale`, `firstboot.locale-messages`,
+  `firstboot.keymap`, `firstboot.timezone`, that configure locale, keymap or
+  timezone settings in case the data is not yet set in `/etc/`.
+
+* [`tmpfiles.d(5)`](https://www.freedesktop.org/software/systemd/man/tmpfiles.d.html)
+  will look for the credentials `tmpfiles.extra` with arbitrary tmpfiles.d lines.
+  Can be encoded in base64 to allow easily passing it on the command line.
+
+In future more services are likely to gain support for consuming credentials.
+
+Example:
+
+```
+systemd-nspawn -i test.raw  \
+        --set-credential=passwd.hashed-password.root:$(mkpasswd mysecret) \
+        --set-credential=firstboot.locale:C.UTF-8 \
+        -b
+```
+
+This boots the specified disk image as `systemd-nspawn` container, and passes
+the root password `mysecret`and default locale `C.UTF-8` to use to it. This
+data is then propagated by default to `systemd-sysusers.service` and
+`systemd-firstboot.service`, where it is applied. (Note that these services
+will only do so if these settings in `/etc/` are so far unset, i.e. they only
+have an effect on *unprovisioned* systems, and will never override data already
+established in `/etc/`.) A similar line for qemu is:
+
+```
+qemu-system-x86_64 \
+        -machine type=q35,accel=kvm,smm=on \
+        -smp 2 \
+        -m 1G \
+        -cpu host \
+        -nographic \
+        -nodefaults \
+        -serial mon:stdio \
+        -drive if=none,id=hd,file=test.raw,format=raw \
+        -device virtio-scsi-pci,id=scsi \
+        -device scsi-hd,drive=hd,bootindex=1 \
+        -smbios type=11,value=io.systemd.credential:passwd.hashed-password.root=$(mkpasswd mysecret) \
+        -smbios type=11,value=io.systemd.credential:firstboot.locale=C.UTF-8
+```
+
+This boots the specified disk image via qemu, provisioning public key SSH access
+for the root user from the caller's key, and sends a notification when booting
+has finished to a process on the host:
+
+```
+qemu-system-x86_64 \
+        -machine type=q35,accel=kvm,smm=on \
+        -smp 2 \
+        -m 1G \
+        -cpu host \
+        -nographic \
+        -nodefaults \
+        -serial mon:stdio \
+        -drive if=none,id=hd,file=test.raw,format=raw \
+        -device virtio-scsi-pci,id=scsi \
+        -device scsi-hd,drive=hd,bootindex=1 \
+        -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=42 \
+        -smbios type=11,value=io.systemd.credential:vmm.notify_socket=vsock:2:1234 \
+        -smbios type=11,value=io.systemd.credential.binary:tmpfiles.extra=$(echo "f~ /root/.ssh/authorized_keys 700 root root - $(ssh-add -L | base64 -w 0)" | base64 -w 0)
+```
+
+A process on the host can listen for the notification, for example:
+
+```
+$ socat - VSOCK-LISTEN:1234,socktype=5
+READY=1
+```
+
+## Relevant Paths
+
+From *service* perspective the runtime path to find loaded credentials in is
+provided in the `$CREDENTIALS_DIRECTORY` environment variable.
+
+At runtime, credentials passed to the *system* are placed in
+`/run/credentials/@system/` (for regular credentials, such as those passed from
+a container manager or via qemu) and `/run/credentials/@encrypted/` (for
+credentials that must be decrypted/validated before use, such as those from
+`systemd-stub`).
+
+The `LoadCredential=` and `LoadCredentialEncrypted=` settings when configured
+with a relative source path will search for the source file to read the
+credential from automatically. Primarily, these credentials are searched among
+the credentials passed into the system. If not found there, they are searched
+in `/etc/credstore/`, `/run/credstore/`,
+`/usr/lib/credstore/`. `LoadCredentialEncrypted=` will also search
+`/etc/credstore.encrypted/` and similar directories. These directories are
+hence a great place to store credentials to load on the system.
+
+## Conditionalizing Services
+
+Sometimes it makes sense to conditionalize system services and invoke them only
+if the right system credential is passed to the system. Use the
+`ConditionCredential=` and `AssertCredential=` unit file settings for that.
diff --git a/docs/DESKTOP_ENVIRONMENTS.md b/docs/DESKTOP_ENVIRONMENTS.md
index 9ae1aef..0a0eff6 100644
--- a/docs/DESKTOP_ENVIRONMENTS.md
+++ b/docs/DESKTOP_ENVIRONMENTS.md
@@ -2,6 +2,7 @@
 title: Desktop Environment Integration
 category: Concepts
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Desktop Environments
@@ -96,13 +97,13 @@
 (`systemd-xdg-autostart-generator`).
 Desktop Environments can opt-in to using this by starting
 `xdg-desktop-autostart.target`. The systemd generator correctly handles
-`OnlyShowIn=` and `NotShowin=`. It also handles the KDE and GNOME specific
-`X-KDE-autostart-condition=` and `AutostartCondition=` by using desktop
-environment provided binaries in an `ExecCondition=` line.
+`OnlyShowIn=` and `NotShowIn=`. It also handles the KDE and GNOME specific
+`X-KDE-autostart-condition=` and `AutostartCondition=` by using desktop-environment-provided
+binaries in an `ExecCondition=` line.
 
 However, this generator is somewhat limited in what it supports. For example,
 all generated units will have `After=graphical-session.target` set on them,
-it may therefore not be useful to start session services.
+and therefore may not be useful to start session services.
 
 Desktop files can be marked to be explicitly excluded from the generator using the line
 `X-systemd-skip=true`. This should be set if an application provides its own
diff --git a/docs/DISCOVERABLE_PARTITIONS.md b/docs/DISCOVERABLE_PARTITIONS.md
index f015578..bc05b6c 100644
--- a/docs/DISCOVERABLE_PARTITIONS.md
+++ b/docs/DISCOVERABLE_PARTITIONS.md
@@ -1,267 +1 @@
----
-title: Discoverable Partitions Specification
-category: Concepts
-layout: default
----
-# The Discoverable Partitions Specification
-
-_TL;DR: Let's automatically discover, mount and enable the root partition,
-`/home/`, `/srv/`, `/var/` and `/var/tmp/` and the swap partitions based on
-GUID Partition Tables (GPT)!_
-
-This specification describes the use of GUID Partition Table (GPT) UUIDs to
-enable automatic discovery of partitions and their intended mountpoints.
-Traditionally Linux has made little use of partition types, mostly just
-defining one UUID for file system/data partitions and another one for swap
-partitions. With this specification, we introduce additional partition types
-for specific uses. This has many benefits:
-
-* OS installers can automatically discover and make sense of partitions of
-  existing Linux installations.
-* The OS can discover and mount the necessary file systems with a non-existent
-  or incomplete `/etc/fstab` file and without the `root=` kernel command line
-  option.
-* Container managers (such as nspawn and libvirt-lxc) can introspect and set up
-  file systems contained in GPT disk images automatically and mount them to the
-  right places, thus allowing booting the same, identical images on bare metal
-  and in Linux containers. This enables true, natural portability of disk
-  images between physical machines and Linux containers.
-* As a help to administrators and users partition manager tools can show more
-  descriptive information about partitions tables.
-
-Note that the OS side of this specification is currently implemented in
-[systemd](http://systemd.io/) 211 and newer in the
-[systemd-gpt-auto-generator(8)](http://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html)
-generator tool. Note that automatic discovery of the root only works if the
-boot loader communicates this information to the OS, by implementing the [Boot
-Loader
-Interface](https://systemd.io/BOOT_LOADER_INTERFACE).
-
-## Defined Partition Type UUIDs
-
-| Partition Type UUID | Name | Allowed File Systems | Explanation |
-|---------------------|------|----------------------|-------------|
-| `44479540-f297-41b2-9af7-d131d5f0458a` | _Root Partition (x86)_ | Any native, optionally in LUKS | On systems with matching architecture, the first partition with this type UUID on the disk containing the active EFI ESP is automatically mounted to the root directory <tt>/</tt>. If the partition is encrypted with LUKS or has dm-verity integrity data (see below), the device mapper file will be named `/dev/mapper/root`. |
-| `4f68bce3-e8cd-4db1-96e7-fbcaf984b709` | _Root Partition (x86-64)_ | ditto | ditto |
-| `69dad710-2ce4-4e3c-b16c-21a1d49abed3` | _Root Partition (32-bit ARM)_ | ditto | ditto |
-| `b921b045-1df0-41c3-af44-4c6f280d3fae` | _Root Partition (64-bit ARM/AArch64)_ | ditto | ditto |
-| `993d8d3d-f80e-4225-855a-9daf8ed7ea97` | _Root Partition (Itanium/IA-64)_ | ditto | ditto |
-| `60d5a7fe-8e7d-435c-b714-3dd8162144e1` | _Root Partition (RISC-V 32-bit)_ | ditto | ditto |
-| `72ec70a6-cf74-40e6-bd49-4bda08e8f224` | _Root Partition (RISC-V 64-bit)_ | ditto | ditto |
-| `d13c5d3b-b5d1-422a-b29f-9454fdc89d76` | _Root Verity Partition (x86)_ | A dm-verity superblock followed by hash data | On systems with matching architecture, contains dm-verity integrity hash data for the matching root partition. If this feature is used the partition UUID of the root partition should be the first 128bit of the root hash of the dm-verity hash data, and the partition UUID of this dm-verity partition should be the final 128bit of it, so that the root partition and its verity partition can be discovered easily, simply by specifying the root hash. |
-| `2c7357ed-ebd2-46d9-aec1-23d437ec2bf5` | _Root Verity Partition (x86-64)_ | ditto | ditto |
-| `7386cdf2-203c-47a9-a498-f2ecce45a2d6` | _Root Verity Partition (32-bit ARM)_ | ditto | ditto |
-| `df3300ce-d69f-4c92-978c-9bfb0f38d820` | _Root Verity Partition (64-bit ARM/AArch64)_ | ditto | ditto |
-| `86ed10d5-b607-45bb-8957-d350f23d0571` | _Root Verity Partition (Itanium/IA-64)_  | ditto | ditto |
-| `ae0253be-1167-4007-ac68-43926c14c5de` | _Root Verity Partition (RISC-V 32-bit)_  | ditto | ditto |
-| `b6ed5582-440b-4209-b8da-5ff7c419ea3d` | _Root Verity Partition (RISC-V 64-bit)_  | ditto | ditto |
-| `75250d76-8cc6-458e-bd66-bd47cc81a812` | _`/usr/` Partition (x86)_ | Any native, optionally in LUKS | Similar semantics to root partition, but just the `/usr/` partition. |
-| `8484680c-9521-48c6-9c11-b0720656f69e` | _`/usr/` Partition (x86-64)_ | ditto | ditto |
-| `7d0359a3-02b3-4f0a-865c-654403e70625` | _`/usr/` Partition (32-bit ARM)_ | ditto | ditto |
-| `b0e01050-ee5f-4390-949a-9101b17104e9` | _`/usr/` Partition (64-bit ARM/AArch64)_ | ditto | ditto |
-| `4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea` | _`/usr/` Partition (Itanium/IA-64)_ | ditto | ditto |
-| `b933fb22-5c3f-4f91-af90-e2bb0fa50702` | _`/usr/` Partition (RISC-V 32-bit)_ | ditto | ditto |
-| `beaec34b-8442-439b-a40b-984381ed097d` | _`/usr/` Partition (RISC-V 64-bit)_ | ditto | ditto |
-| `8f461b0d-14ee-4e81-9aa9-049b6fb97abd` | _`/usr/` Verity Partition (x86)_ | A dm-verity superblock followed by hash data | Similar semantics to root Verity partition, but just for the `/usr/` partition. |
-| `77ff5f63-e7b6-4633-acf4-1565b864c0e6` | _`/usr/` Verity Partition (x86-64)_ | ditto | ditto |
-| `c215d751-7bcd-4649-be90-6627490a4c05` | _`/usr/` Verity Partition (32-bit ARM)_ | ditto | ditto |
-| `6e11a4e7-fbca-4ded-b9e9-e1a512bb664e` | _`/usr/` Verity Partition (64-bit ARM/AArch64)_ | ditto | ditto |
-| `6a491e03-3be7-4545-8e38-83320e0ea880` | _`/usr/` Verity Partition (Itanium/IA-64)_ | ditto | ditto |
-| `cb1ee4e3-8cd0-4136-a0a4-aa61a32e8730` | _`/usr/` Verity Partition (RISC-V 32-bit)_ | ditto | ditto |
-| `8f1056be-9b05-47c4-81d6-be53128e5b54` | _`/usr/` Verity Partition (RISC-V 64-bit)_ | ditto | ditto |
-| `933ac7e1-2eb4-4f13-b844-0e14e2aef915` | _Home Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/home/`.  If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/home`. |
-| `3b8f8425-20e0-4f3b-907f-1a25a76f98e8` | _Server Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/srv/`.  If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/srv`. |
-| `4d21b016-b534-45c2-a9fb-5c16e091fd2d` | _Variable Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/var/` — under the condition that its partition UUID matches the first 128 bit of `HMAC-SHA256(machine-id, 0x4d21b016b53445c2a9fb5c16e091fd2d)` (i.e. the SHA256 HMAC hash of the binary type UUID keyed by the machine ID as read from [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html). This special requirement is made because `/var/` (unlike the other partition types listed here) is inherently private to a specific installation and cannot possibly be shared between multiple OS installations on the same disk, and thus should be bound to a specific instance of the OS, identified by its machine ID. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/var`. |
-| `7ec6f557-3bc5-4aca-b293-16ef5df639d1` | _Temporary Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/var/tmp/`.  If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/tmp`. Note that the intended mount point is indeed `/var/tmp/`, not `/tmp/`. The latter is typically maintained in memory via <tt>tmpfs</tt> and does not require a partition on disk. In some cases it might be desirable to make `/tmp/` persistent too, in which case it is recommended to make it a symlink or bind mount to `/var/tmp/`, thus not requiring its own partition type UUID. |
-| `0657fd6d-a4ab-43c4-84e5-0933c84b4f4f` | _Swap_ | Swap | All swap partitions on the disk containing the root partition are automatically enabled. This partition type predates the Discoverable Partitions Specification. |
-| `0fc63daf-8483-4772-8e79-3d69d8477de4` | _Generic Linux Data Partitions_ | Any native, optionally in LUKS | No automatic mounting takes place for other Linux data partitions. This partition type should be used for all partitions that carry Linux file systems. The installer needs to mount them explicitly via entries in <tt>/etc/fstab</tt>. Optionally, these partitions may be encrypted with LUKS. This partition type predates the Discoverable Partitions Specification. |
-| `c12a7328-f81f-11d2-ba4b-00a0c93ec93b` | _EFI System Partition_ | VFAT | The ESP used for the current boot is automatically mounted to `/efi/` (or `/boot/` as fallback), unless a different partition is mounted there (possibly via `/etc/fstab`, or because the Extended Boot Loader Partition — see below — exists) or the directory is non-empty on the root disk.  This partition type is defined by the [UEFI Specification](http://www.uefi.org/specifications). |
-| `bc13c2ff-59e6-4262-a352-b275fd6f7172` | _Extended Boot Loader Partition_ | Typically VFAT | The Extended Boot Loader Partition (XBOOTLDR) used for the current boot is automatically mounted to <tt>/boot/</tt>, unless a different partition is mounted there (possibly via <tt>/etc/fstab</tt>) or the directory is non-empty on the root disk. This partition type is defined by the [Boot Loader Specification](https://systemd.io/BOOT_LOADER_SPECIFICATION). |
-
-Other GPT type IDs might be used on Linux, for example to mark software RAID or
-LVM partitions. The definitions of those GPT types is outside of the scope of
-this specification.
-
-[systemd-id128(1)](http://www.freedesktop.org/software/systemd/man/systemd-id128.html)
-may be used to list those UUIDs.
-
-## Partition Names
-
-For partitions of the types listed above it is recommended to use
-human-friendly, descriptive partition names in the GPT partition table, for
-example "*Home*", "*Server* *Data*", "*Fedora* *Root*" and similar, possibly
-localized.
-
-## Partition Flags
-
-This specification defines three GPT partition flags that may be set for the
-partition types defined above:
-
-1. For the root, `/usr/`, Verity, home, server data, variable data, temporary data,
-   swap and extended boot loader partitions, the partition flag bit 63
-   ("*no-auto*") may be used to turn off auto-discovery for the specific
-   partition.  If set, the partition will not be automatically mounted or
-   enabled.
-
-2. For the root, `/usr/`, Verity, home, server data, variable data, temporary
-   data and extended boot loader partitions, the partition flag bit 60
-   ("*read-only*") may be used to mark a partition for read-only mounts only.
-   If set, the partition will be mounted read-only instead of read-write. Note
-   that the variable data partition and the temporary data partition will
-   generally not be able to serve their purpose if marked read-only, since by
-   their very definition they are supposed to be mutable. (The home and server
-   data partitions are generally assumed to be mutable as well, but the
-   requirement for them is not equally strong.) Because of that, while the
-   read-only flag is defined and supported, it's almost never a good idea to
-   actually use it for these partitions. Also note that Verity partitions are
-   by their semantics always read-only. The flag is hence of little effect for
-   them, and it is recommended to set it unconditionally for the Verity
-   partition types.
-
-3. For the root, `/usr/`, home, server data, variable data, temporary data and
-   extended boot loader partitions, the partition flag bit 59
-   ("*grow-file-system*") may be used to mark a partition for automatic growing
-   of the contained file system to the size of the partition when
-   mounted. Tools that automatically mount disk image with a GPT partition
-   table are suggested to implicitly grow the contained file system to the
-   partition size they are contained in. This flag is without effect on
-   partitions marked read-only.
-
-Note that the first two flag definitions happen to map nicely to the ones used
-by Microsoft Basic Data Partitions.
-
-All three of these flags generally affect only auto-discovery and automatic
-mounting of disk images. If partitions marked with these flags are mounted
-using low-level commands like
-[mount(8)](https://man7.org/linux/man-pages/man2/mount.8.html) or directly with
-[mount(2)](https://man7.org/linux/man-pages/man2/mount.2.html), they typically
-have no effect.
-
-## Suggested Mode of Operation
-
-An *installer* that repartitions the hard disk _should_ use the above UUID
-partition types for appropriate partitions it creates.
-
-An *installer* which supports a "manual partitioning" interface _may_ choose to
-pre-populate the interface with swap, `/home/`, `/srv/`, `/var/tmp/` partitions
-of pre-existing Linux installations, identified with the GPT type UUIDs
-above. The installer should not pre-populate such an interface with any
-identified root, `/usr` or `/var/` partition unless the intention is to
-overwrite an existing operating system that might be installed.
-
-An *installer* _may_ omit creating entries in `/etc/fstab` for root, `/home/`,
-`/srv/`, `/var/`, `/var/tmp` and for the swap partitions if they use these UUID
-partition types, and are the first partitions on the disk of each type. If the
-ESP shall be mounted to `/efi/` (or `/boot/`), it may additionally omit
-creating the entry for it in `/etc/fstab`.  If an extended boot partition is
-used, or if the EFI partition shall not be mounted to `/efi/` or `/boot/`, it
-_must_ create `/etc/fstab` entries for them.  If other partitions are used (for
-example for `/usr/` or `/var/lib/mysql/`), the installer _must_ register these
-in `/etc/fstab`.  The `root=` parameter passed to the kernel by the boot loader
-may be omitted if the root partition is the first one on the disk of its type.
-If the root partition is not the first one on the disk, the `root=` parameter
-_must_ be passed to the kernel by the boot loader.  An installer that mounts a
-root, `/usr/`, `/home/`, `/srv/`, `/var/`, or `/var/tmp/` file system with the
-partition types defined as above which contains a LUKS header _must_ call the
-device mapper device "root", "usr", "home", "srv", "var" or "tmp",
-respectively.  This is necessary to ensure that the automatic discovery will
-never result in different device mapper names than any static configuration by
-the installer, thus eliminating possible naming conflicts and ambiguities.
-
-An *operating* *system* _should_ automatically discover and mount the first
-root partition that does not have the no-auto flag set (as described above) by
-scanning the disk containing the currently used EFI ESP.  It _should_
-automatically discover and mount the first `/usr/`, `/home/`, `/srv/`, `/var/`,
-`/var/tmp/` and swap partitions that do not have the no-auto flag set by
-scanning the disk containing the discovered root partition.  It should
-automatically discover and mount the partition containing the currently used
-EFI ESP to `/efi/` (or `/boot/` as fallback).  It should automatically discover
-and mount the partition containing the currently used Extended Boot Loader
-Partition to `/boot/`. It _should not_ discover or automatically mount
-partitions with other UUID partition types, or partitions located on other
-disks, or partitions with the no-auto flag set.  User configuration shall
-always override automatic discovery and mounting.  If a root, `/usr/`,
-`/home/`, `/srv/`, `/boot/`, `/var/`, `/var/tmp/`, `/efi/`, `/boot/` or swap
-partition is listed in `/etc/fstab` or with `root=` on the kernel command line,
-it _must_ take precedence over automatically discovered partitions.  If a
-`/home/`, `/usr/`, `/srv/`, `/boot/`, `/var/`, `/var/tmp/`, `/efi/` or `/boot/`
-directory is found to be populated already in the root partition, the automatic
-discovery _must not_ mount any discovered file system over it. Optionally, in
-case of the root, `/usr/` and their Verity partitions instead of strictly
-mounting the first suitable partition an OS might choose to mount the partition
-whose label compares the highest according to `strverscmp()` or a similar
-logic, in order to implement a simple partition-based A/B versioning
-scheme. The precise rules are left for the implementation to decide, but when
-in doubt earlier partitions (by their index) should always win over later
-partitions if the label comparison is inconclusive.
-
-A *container* *manager* should automatically discover and mount the root,
-`/usr/`, `/home/`, `/srv/`, `/var/`, `/var/tmp/` partitions inside a container
-disk image.  It may choose to mount any discovered ESP and/or XBOOOTLDR
-partition to `/efi/` or `/boot/`. It should ignore any swap should they be
-included in a container disk image.
-
-If a btrfs file system is automatically discovered and mounted by the operating
-system/container manager it will be mounted with its *default* subvolume.  The
-installer should make sure to set the default subvolume correctly using "btrfs
-subvolume set-default".
-
-## Sharing of File Systems between Installations
-
-If two Linux-based operating systems are installed on the same disk, the scheme
-above suggests that they may share the swap, `/home/`, `/srv/`, `/var/tmp/`,
-ESP, XBOOTLDR. However, they should each have their own root, `/usr/` and
-`/var/` partition.
-
-## Frequently Asked Questions
-
-### Why are you taking my `/etc/fstab` away?
-
-We are not. `/etc/fstab` always overrides automatic discovery and is indeed
-mentioned in the specifications.  We are simply trying to make the boot and
-installation processes of Linux a bit more robust and self-descriptive.
-
-### Why did you only define the root partition for x86, x86-64, ARM, ARM64, ia64, riscv32, riscv64?
-
-The automatic discovery of the root partition is defined to operate on the disk
-containing the current EFI System Partition (ESP). Since EFI only exists on
-x86, x86-64, ia64, ARM and RISC-V so far, we only defined root partition UUIDs for
-these architectures.  Should EFI become more common on other architectures, we
-can define additional UUIDs for them.
-
-### Why define distinct root partition UUIDs for the various architectures?
-
-This allows disk images that may be booted on multiple architectures to use
-discovery of the appropriate root partition on each architecture.
-
-### Doesn't this break multi-boot scenarios?
-
-No, it doesn't.  The specification says that installers may not stop creating
-`/etc/fstab` or stop including `root=` on the kernel command line, unless the used
-partitions are the first ones of their type on the disk. Additionally,
-`/etc/fstab` and `root=` both override automatic discovery.  Multi-boot is hence
-well supported, since it doesn't change anything for anything but the first
-installation.
-
-That all said, it's not expected that generic installers generally stop setting
-`root=` and creating `/etc/fstab` anyway. The option to drop these configuration
-bits is primarily something for appliance-like devices.  However, generic
-installers should *still* set the right GPT partition types for the partitions
-they create so that container managers, partition tools and administrators can
-benefit.  Phrased differently, this specification introduces A) the
-*recommendation* to use the newly defined partition types to tag things
-properly and B) the *option* to then drop `root=` and `/etc/fstab`.  While we
-advertise A) to *all* installers, we only propose B) for simpler,
-appliance-like installations.
-
-### What partitioning tools will create a DPS-compliant partition table?
-
-As of util-linux 2.25.2, the `fdisk` tool provides type codes to create the
-root, home, and swap partitions that the DPS expects. By default, `fdisk` will
-create an old-style MBR, not a GPT, so typing `l` to list partition types will
-not show the choices to let you set the correct UUID. Make sure to first create
-an empty GPT, then type `l` in order for the DPS-compliant type codes to be
-available.
-
-The `gdisk` tool (from version 1.0.5 onward) and its variants (`sgdisk`,
-`cgdisk`) also support creation of partitions with a matching type code.
+[This content has moved to the UAPI group website](https://uapi-group.org/specifications/specs/discoverable_partitions_specification/)
diff --git a/docs/DISTRO_PORTING.md b/docs/DISTRO_PORTING.md
index 2e4782f..93f36d0 100644
--- a/docs/DISTRO_PORTING.md
+++ b/docs/DISTRO_PORTING.md
@@ -2,6 +2,7 @@
 title: Porting systemd To New Distributions
 category: Concepts
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Porting systemd To New Distributions
@@ -84,7 +85,7 @@
 
 ## Contributing Upstream
 
-We generally do no longer accept distribution-specific patches to
+We generally no longer accept distribution-specific patches to
 systemd upstream. If you have to make changes to systemd's source code
 to make it work on your distribution, unless your code is generic
 enough to be generally useful, we are unlikely to merge it. Please
diff --git a/docs/ELF_PACKAGE_METADATA.md b/docs/ELF_PACKAGE_METADATA.md
new file mode 100644
index 0000000..fd2099f
--- /dev/null
+++ b/docs/ELF_PACKAGE_METADATA.md
@@ -0,0 +1,149 @@
+---
+title: Package Metadata for ELF Files
+category: Interfaces
+layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
+---
+
+# Package Metadata for Core Files
+
+*Intended audience: hackers working on userspace subsystems that create ELF binaries
+or parse ELF core files.*
+
+## Motivation
+
+ELF binaries get stamped with a unique, build-time generated hex string identifier called
+`build-id`, [which gets embedded as an ELF note called `.note.gnu.build-id`](https://fedoraproject.org/wiki/Releases/FeatureBuildId).
+In most cases, this allows to associate a stripped binary with its debugging information.
+It is used, for example, to dynamically fetch DWARF symbols from a debuginfo server, or
+to query the local package manager and find out the package metadata or, again, the DWARF
+symbols or program sources.
+
+However, this usage of the `build-id` requires either local metadata, usually set up by
+the package manager, or access to a remote server over the network. Both of those might
+be unavailable or forbidden.
+
+Thus it becomes desirable to add additional metadata to a binary at build time, so that
+`systemd-coredump` and other services analyzing core files are able to extract said
+metadata simply from the core file itself, without external dependencies.
+
+## Implementation
+
+This document will attempt to define a common metadata format specification, so that
+multiple implementers might use it when building packages, or core file analyzers, and
+so on.
+
+The metadata will be embedded in a single, new, 4-bytes-aligned, allocated, 0-padded,
+read-only ELF header section, in a name-value JSON object format. Implementers working on parsing
+core files should not assume a specific list of names, but parse anything that is included
+in the section, and should look for the note using the `note type`. Implementers working on
+build tools should strive to use the same names, for consistency. The most common will be
+listed here. When corresponding to the content of os-release, the values should match, again for consistency.
+
+If available, the metadata should also include the debuginfod server URL that can provide
+the original executable, debuginfo and sources, to further facilitate debugging.
+
+* Section header
+
+```
+SECTION: `.note.package`
+note type: `0xcafe1a7e`
+Owner: `FDO` (FreeDesktop.org)
+Value: a single JSON object encoded as a zero-terminated UTF-8 string
+```
+
+* JSON payload
+
+```json
+{
+     "type":"rpm",          # this provides a namespace for the package+package-version fields
+     "os":"fedora",
+     "osVersion":"33",
+     "name":"coreutils",
+     "version":"4711.0815.fc13",
+     "architecture":"arm32",
+     "osCpe": "cpe:/o:fedoraproject:fedora:33",          # A CPE name for the operating system, `CPE_NAME` from os-release is a good default
+     "debugInfoUrl": "https://debuginfod.fedoraproject.org/"
+}
+```
+
+The format is a single JSON object, encoded as a zero-terminated `UTF-8` string.
+Each name in the object shall be unique as per recommendations of
+[RFC8259](https://datatracker.ietf.org/doc/html/rfc8259#section-4). Strings shall
+not contain any control character, nor use `\uXXX` escaping.
+
+When it comes to JSON numbers, this specification assumes that JSON parsers
+processing this information are capable of reproducing the full signed 53bit
+integer range (i.e. -2⁵³+1…+2⁵³-1) as well as the full 64bit IEEE floating
+point number range losslessly (with the exception of NaN/-inf/+inf, since JSON
+cannot encode that), as per recommendations of
+[RFC8259](https://datatracker.ietf.org/doc/html/rfc8259#page-8). Fields in
+these JSON objects are thus permitted to encode numeric values from these
+ranges as JSON numbers, and should not use numeric values not covered by these
+types and ranges.
+
+A reference implementations of a [build-time tool is provided](https://github.com/systemd/package-notes)
+and can be used to generate a linker script, which can then be used at build time via
+```LDFLAGS="-Wl,-T,/path/to/generated/script"``` to include the note in the binary.
+
+Generator:
+```console
+$ ./generate-package-notes.py --rpm systemd-248~rc2-1.fc33.arm32 --cpe cpe:/o:fedoraproject:fedora:33
+SECTIONS
+{
+    .note.package (READONLY) : ALIGN(4) {
+        LONG(0x0004)                                /* Length of Owner including NUL */
+        LONG(0x007b)                                /* Length of Value including NUL */
+        LONG(0xcafe1a7e)                            /* Note ID */
+        BYTE(0x46) BYTE(0x44) BYTE(0x4f) BYTE(0x00) /* Owner: 'FDO\x00' */
+        BYTE(0x7b) BYTE(0x22) BYTE(0x74) BYTE(0x79) /* Value: '{"type":"rpm","name":"systemd","version":"248~rc2-1.fc33","architecture":"arm32","osCpe":"cpe:/o:fedoraproject:fedora:33"}\x00\x00' */
+        BYTE(0x70) BYTE(0x65) BYTE(0x22) BYTE(0x3a)
+        BYTE(0x22) BYTE(0x72) BYTE(0x70) BYTE(0x6d)
+        BYTE(0x22) BYTE(0x2c) BYTE(0x22) BYTE(0x6e)
+        BYTE(0x61) BYTE(0x6d) BYTE(0x65) BYTE(0x22)
+        BYTE(0x3a) BYTE(0x22) BYTE(0x73) BYTE(0x79)
+        BYTE(0x73) BYTE(0x74) BYTE(0x65) BYTE(0x6d)
+        BYTE(0x64) BYTE(0x22) BYTE(0x2c) BYTE(0x22)
+        BYTE(0x76) BYTE(0x65) BYTE(0x72) BYTE(0x73)
+        BYTE(0x69) BYTE(0x6f) BYTE(0x6e) BYTE(0x22)
+        BYTE(0x3a) BYTE(0x22) BYTE(0x32) BYTE(0x34)
+        BYTE(0x38) BYTE(0x7e) BYTE(0x72) BYTE(0x63)
+        BYTE(0x32) BYTE(0x2d) BYTE(0x31) BYTE(0x2e)
+        BYTE(0x66) BYTE(0x63) BYTE(0x33) BYTE(0x33)
+        BYTE(0x22) BYTE(0x2c) BYTE(0x22) BYTE(0x61)
+        BYTE(0x72) BYTE(0x63) BYTE(0x68) BYTE(0x69)
+        BYTE(0x74) BYTE(0x65) BYTE(0x63) BYTE(0x74)
+        BYTE(0x75) BYTE(0x72) BYTE(0x65) BYTE(0x22)
+        BYTE(0x3a) BYTE(0x22) BYTE(0x61) BYTE(0x72)
+        BYTE(0x6d) BYTE(0x33) BYTE(0x32) BYTE(0x22)
+        BYTE(0x2c) BYTE(0x22) BYTE(0x6f) BYTE(0x73)
+        BYTE(0x43) BYTE(0x70) BYTE(0x65) BYTE(0x22)
+        BYTE(0x3a) BYTE(0x22) BYTE(0x63) BYTE(0x70)
+        BYTE(0x65) BYTE(0x3a) BYTE(0x2f) BYTE(0x6f)
+        BYTE(0x3a) BYTE(0x66) BYTE(0x65) BYTE(0x64)
+        BYTE(0x6f) BYTE(0x72) BYTE(0x61) BYTE(0x70)
+        BYTE(0x72) BYTE(0x6f) BYTE(0x6a) BYTE(0x65)
+        BYTE(0x63) BYTE(0x74) BYTE(0x3a) BYTE(0x66)
+        BYTE(0x65) BYTE(0x64) BYTE(0x6f) BYTE(0x72)
+        BYTE(0x61) BYTE(0x3a) BYTE(0x33) BYTE(0x33)
+        BYTE(0x22) BYTE(0x7d) BYTE(0x00) BYTE(0x00)
+    }
+}
+INSERT AFTER .note.gnu.build-id;
+```
+
+## Well-known keys
+
+The metadata format is intentionally left open, so that vendors can add their own information.
+A set of well-known keys is defined here, and hopefully shared among all vendors.
+
+| Key name     | Key description                                                          | Example value                         |
+|--------------|--------------------------------------------------------------------------|---------------------------------------|
+| type         | The packaging type                                                       | rpm                                   |
+| os           | The OS name, typically corresponding to ID in os-release                 | fedora                                |
+| osVersion    | The OS version, typically corresponding to VERSION_ID in os-release      | 33                                    |
+| name         | The source package name                                                  | coreutils                             |
+| version      | The source package version                                               | 4711.0815.fc13                        |
+| architecture | The binary package architecture                                          | arm32                                 |
+| osCpe        | A CPE name for the OS, typically corresponding to CPE_NAME in os-release | cpe:/o:fedoraproject:fedora:33        |
+| debugInfoUrl | The debuginfod server url, if available                                  | https://debuginfod.fedoraproject.org/ |
diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md
index efb360f..30ef1e7 100644
--- a/docs/ENVIRONMENT.md
+++ b/docs/ENVIRONMENT.md
@@ -2,6 +2,7 @@
 title: Known Environment Variables
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Known Environment Variables
@@ -22,17 +23,17 @@
 * `$SYSTEMD_OFFLINE=[0|1]` — if set to `1`, then `systemctl` will refrain from
   talking to PID 1; this has the same effect as the historical detection of
   `chroot()`. Setting this variable to `0` instead has a similar effect as
-  `SYSTEMD_IGNORE_CHROOT=1`; i.e. tools will try to communicate with PID 1 even
-  if a `chroot()` environment is detected. You almost certainly want to set
-  this to `1` if you maintain a package build system or similar and are trying
-  to use a modern container system and not plain `chroot()`.
+  `$SYSTEMD_IGNORE_CHROOT=1`; i.e. tools will try to communicate with PID 1
+  even if a `chroot()` environment is detected. You almost certainly want to
+  set this to `1` if you maintain a package build system or similar and are
+  trying to use a modern container system and not plain `chroot()`.
 
 * `$SYSTEMD_IGNORE_CHROOT=1` — if set, don't check whether being invoked in a
   `chroot()` environment. This is particularly relevant for systemctl, as it
   will not alter its behaviour for `chroot()` environments if set. Normally it
   refrains from talking to PID 1 in such a case; turning most operations such
   as `start` into no-ops.  If that's what's explicitly desired, you might
-  consider setting `SYSTEMD_OFFLINE=1`.
+  consider setting `$SYSTEMD_OFFLINE=1`.
 
 * `$SD_EVENT_PROFILE_DELAYS=1` — if set, the sd-event event loop implementation
   will print latency information at runtime.
@@ -42,13 +43,25 @@
   debugging, in order to test generators and other code against specific kernel
   command lines.
 
+* `$SYSTEMD_OS_RELEASE` — if set, use this path instead of `/etc/os-release` or
+  `/usr/lib/os-release`. When operating under some root (e.g. `systemctl
+  --root=…`), the path is taken relative to the outside root. Only useful for
+  debugging.
+
 * `$SYSTEMD_FSTAB` — if set, use this path instead of `/etc/fstab`. Only useful
   for debugging.
 
+* `$SYSTEMD_SYSROOT_FSTAB` — if set, use this path instead of
+  `/sysroot/etc/fstab`. Only useful for debugging `systemd-fstab-generator`.
+
 * `$SYSTEMD_CRYPTTAB` — if set, use this path instead of `/etc/crypttab`. Only
   useful for debugging. Currently only supported by
   `systemd-cryptsetup-generator`.
 
+* `$SYSTEMD_INTEGRITYTAB` — if set, use this path instead of
+  `/etc/integritytab`. Only useful for debugging. Currently only supported by
+  `systemd-integritysetup-generator`.
+
 * `$SYSTEMD_VERITYTAB` — if set, use this path instead of
   `/etc/veritytab`. Only useful for debugging. Currently only supported by
   `systemd-veritysetup-generator`.
@@ -60,13 +73,9 @@
   (relevant in particular for the system manager and `systemd-hostnamed`).
   Must be a valid hostname (either a single label or a FQDN).
 
-* `$SYSTEMD_IN_INITRD=[auto|lenient|0|1]` — if set, specifies initrd detection
-  method. Defaults to `auto`. Behavior is defined as follows:
-  `auto`: Checks if `/etc/initrd-release` exists, and a temporary fs is mounted
-          on `/`. If both conditions meet, then it's in initrd.
-  `lenient`: Similar to `auto`, but the rootfs check is skipped.
-  `0|1`: Simply overrides initrd detection. This is useful for debugging and
-         testing initrd-only programs in the main system.
+* `$SYSTEMD_IN_INITRD` — takes a boolean. If set, overrides initrd detection.
+  This is useful for debugging and testing initrd-only programs in the main
+  system.
 
 * `$SYSTEMD_BUS_TIMEOUT=SECS` — specifies the maximum time to wait for method call
   completion. If no time unit is specified, assumes seconds. The usual other units
@@ -76,6 +85,12 @@
 * `$SYSTEMD_MEMPOOL=0` — if set, the internal memory caching logic employed by
   hash tables is turned off, and libc `malloc()` is used for all allocations.
 
+* `$SYSTEMD_UTF8=` — takes a boolean value, and overrides whether to generate
+  non-ASCII special glyphs at various places (i.e. "→" instead of
+  "->"). Usually this is deterined automatically, based on $LC_CTYPE, but in
+  scenarios where locale definitions are not installed it might make sense to
+  override this check explicitly.
+
 * `$SYSTEMD_EMOJI=0` — if set, tools such as `systemd-analyze security` will
   not output graphical smiley emojis, but ASCII alternatives instead. Note that
   this only controls use of Unicode emoji glyphs, and has no effect on other
@@ -92,19 +107,19 @@
   systems built with libxcrypt and is ignored on systems using glibc's
   original, internal `crypt()` implementation.)
 
-* `$SYSTEMD_RDRAND=0` — if set, the RDRAND instruction will never be used,
-  even if the CPU supports it.
-
-* `$SYSTEMD_SECCOMP=0` – if set, seccomp filters will not be enforced, even if
+* `$SYSTEMD_SECCOMP=0` — if set, seccomp filters will not be enforced, even if
   support for it is compiled in and available in the kernel.
 
 * `$SYSTEMD_LOG_SECCOMP=1` — if set, system calls blocked by seccomp filtering,
   for example in `systemd-nspawn`, will be logged to the audit log, if the
   kernel supports this.
 
+* `$SYSTEMD_ENABLE_LOG_CONTEXT` — if set, extra fields will always be logged to
+the journal instead of only when logging in debug mode.
+
 `systemctl`:
 
-* `$SYSTEMCTL_FORCE_BUS=1` — if set, do not connect to PID1's private D-Bus
+* `$SYSTEMCTL_FORCE_BUS=1` — if set, do not connect to PID 1's private D-Bus
   listener, and instead always connect through the dbus-daemon D-bus broker.
 
 * `$SYSTEMCTL_INSTALL_CLIENT_SIDE=1` — if set, enable or disable unit files on
@@ -133,6 +148,12 @@
 * `$SYSTEMD_NSPAWN_TMPFS_TMP=0` — if set, do not overmount `/tmp/` in the
   container with a tmpfs, but leave the directory from the image in place.
 
+* `$SYSTEMD_SUPPRESS_SYNC=1` — if set, all disk synchronization syscalls are
+  blocked to the container payload (e.g. `sync()`, `fsync()`, `syncfs()`, …)
+  and the `O_SYNC`/`O_DSYNC` flags are made unavailable to `open()` and
+  friends. This is equivalent to passing `--suppress-sync=yes` on the
+  `systemd-nspawn` command line.
+
 `systemd-logind`:
 
 * `$SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1` — if set, report that
@@ -169,13 +190,13 @@
   requested. The file contains the requested boot loader entry identifier. This
   file may be checked for by services run during system shutdown in order to
   request the appropriate operation from the boot loader in an alternative
-  fashion. Note that by default only boot loader entries which follow the [Boot
-  Loader Specification](https://systemd.io/BOOT_LOADER_SPECIFICATION) and are
-  placed in the ESP or the Extended Boot Loader partition may be selected this
-  way. However, if a directory `/run/boot-loader-entries/` exists, the entries
-  are loaded from there instead. The directory should contain the usual
-  directory hierarchy mandated by the Boot Loader Specification, i.e. the entry
-  drop-ins should be placed in
+  fashion. Note that by default only boot loader entries which follow the
+  [Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification)
+  and are placed in the ESP or the Extended Boot Loader partition may be
+  selected this way. However, if a directory `/run/boot-loader-entries/`
+  exists, the entries are loaded from there instead. The directory should
+  contain the usual directory hierarchy mandated by the Boot Loader
+  Specification, i.e. the entry drop-ins should be placed in
   `/run/boot-loader-entries/loader/entries/*.conf`, and the files referenced by
   the drop-ins (including the kernels and initrds) somewhere else below
   `/run/boot-loader-entries/`. Note that all these files may be (and are
@@ -186,9 +207,9 @@
   or whenever they change if it wants to integrate with `systemd-logind`'s
   APIs.
 
-`systemd-udevd`:
+`systemd-udevd` and sd-device library:
 
-* `$NET_NAMING_SCHEME=` – if set, takes a network naming scheme (i.e. one of
+* `$NET_NAMING_SCHEME=` — if set, takes a network naming scheme (i.e. one of
   "v238", "v239", "v240"…, or the special value "latest") as parameter. If
   specified udev's `net_id` builtin will follow the specified naming scheme
   when determining stable network interface names. This may be used to revert
@@ -198,6 +219,10 @@
   prefixed with `:` in which case the kernel command line option takes
   precedence, if it is specified as well.
 
+* `$SYSTEMD_DEVICE_VERIFY_SYSFS` — if set to "0", disables verification that
+  devices sysfs path are actually backed by sysfs. Relaxing this verification
+  is useful for testing purposes.
+
 `nss-systemd`:
 
 * `$SYSTEMD_NSS_BYPASS_SYNTHETIC=1` — if set, `nss-systemd` won't synthesize
@@ -234,6 +259,9 @@
   `--path=` switch only very superficial validation of the specified path is
   done when this environment variable is used.
 
+* `$KERNEL_INSTALL_CONF_ROOT=…` — override the built in default configuration
+  directory /etc/kernel/ to read files like entry-token and install.conf from.
+
 `systemd` itself:
 
 * `$SYSTEMD_ACTIVATION_UNIT` — set for all NSS and PAM module invocations that
@@ -252,6 +280,22 @@
   it is either set to `system` or `user` depending on whether the NSS/PAM
   module is called by systemd in `--system` or `--user` mode.
 
+* `$SYSTEMD_SUPPORT_DEVICE`, `$SYSTEMD_SUPPORT_MOUNT`, `$SYSTEMD_SUPPORT_SWAP` -
+  can be set to `0` to mark respective unit type as unsupported. Generally,
+  having less units saves system resources so these options might be useful
+  for cases where we don't need to track given unit type, e.g. `--user` manager
+  often doesn't need to deal with device or swap units because they are
+  handled by the `--system` manager (PID 1). Note that setting certain unit
+  type as unsupported may not prevent loading some units of that type if they
+  are referenced by other units of another supported type.
+
+* `$SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST` — can be set to override the mount
+  units burst rate limit for parsing `/proc/self/mountinfo`. On a system with
+  few resources but many mounts the rate limit may be hit, which will cause the
+  processing of mount units to stall. The burst limit may be adjusted when the
+  default is not appropriate for a given system. Defaults to `5`, accepts
+  positive integers.
+
 `systemd-remount-fs`:
 
 * `$SYSTEMD_REMOUNT_ROOT_RW=1` — if set and no entry for the root directory
@@ -262,13 +306,18 @@
 
 `systemd-firstboot` and `localectl`:
 
-* `SYSTEMD_LIST_NON_UTF8_LOCALES=1` – if set, non-UTF-8 locales are listed among
+* `$SYSTEMD_LIST_NON_UTF8_LOCALES=1` — if set, non-UTF-8 locales are listed among
   the installed ones. By default non-UTF-8 locales are suppressed from the
   selection, since we are living in the 21st century.
 
+`systemd-resolved`:
+
+* `$SYSTEMD_RESOLVED_SYNTHESIZE_HOSTNAME` — if set to "0", `systemd-resolved`
+  won't synthesize system hostname on both regular and reverse lookups.
+
 `systemd-sysext`:
 
-* `SYSTEMD_SYSEXT_HIERARCHIES` – this variable may be used to override which
+* `$SYSTEMD_SYSEXT_HIERARCHIES` — this variable may be used to override which
   hierarchies are managed by `systemd-sysext`. By default only `/usr/` and
   `/opt/` are managed, and directories may be added or removed to that list by
   setting this environment variable to a colon-separated list of absolute
@@ -279,12 +328,22 @@
 
 `systemd-tmpfiles`:
 
-* `SYSTEMD_TMPFILES_FORCE_SUBVOL` — if unset, `v`/`q`/`Q` lines will create
+* `$SYSTEMD_TMPFILES_FORCE_SUBVOL` — if unset, `v`/`q`/`Q` lines will create
   subvolumes only if the OS itself is installed into a subvolume. If set to `1`
   (or another value interpreted as true), these lines will always create
   subvolumes if the backing filesystem supports them. If set to `0`, these
   lines will always create directories.
 
+`systemd-sysusers`
+
+* `SOURCE_DATE_EPOCH` — if unset, the field of the date of last password change
+  in `/etc/shadow` will be the number of days from Jan 1, 1970 00:00 UTC until
+  today. If SOURCE_DATE_EPOCH is set to a valid UNIX epoch value in seconds,
+  then the field will be the number of days until that time instead. This is to
+  support creating bit-by-bit reproducible system images by choosing a
+  reproducible value for the field of the date of last password change in
+  `/etc/shadow`. See: https://reproducible-builds.org/specs/source-date-epoch/
+
 `systemd-sysv-generator`:
 
 * `$SYSTEMD_SYSVINIT_PATH` — Controls where `systemd-sysv-generator` looks for
@@ -310,5 +369,150 @@
 * `$SYSTEMD_FUZZ_RUNS` — The number of times execution should be repeated in
   manual invocations.
 
-Note that is may be also useful to set `$SYSTEMD_LOG_LEVEL`, since all logging
+Note that it may be also useful to set `$SYSTEMD_LOG_LEVEL`, since all logging
 is suppressed by default.
+
+`systemd-importd`:
+
+* `$SYSTEMD_IMPORT_BTRFS_SUBVOL` — takes a boolean, which controls whether to
+  prefer creating btrfs subvolumes over plain directories for machine
+  images. Has no effect on non-btrfs file systems where subvolumes are not
+  available anyway. If not set, defaults to true.
+
+* `$SYSTEMD_IMPORT_BTRFS_QUOTA` — takes a boolean, which controls whether to set
+  up quota automatically for created btrfs subvolumes for machine images. If
+  not set, defaults to true. Has no effect if machines are placed in regular
+  directories, because btrfs subvolumes are not supported or disabled. If
+  enabled, the quota group of the subvolume is automatically added to a
+  combined quota group for all such machine subvolumes.
+
+* `$SYSTEMD_IMPORT_SYNC` — takes a boolean, which controls whether to
+  synchronize images to disk after installing them, before completing the
+  operation. If not set, defaults to true. If disabled installation of images
+  will be quicker, but not as safe.
+
+`systemd-dissect`, `systemd-nspawn` and all other tools that may operate on
+disk images with `--image=` or similar:
+
+* `$SYSTEMD_DISSECT_VERITY_SIDECAR` — takes a boolean, which controls whether to
+  load "sidecar" Verity metadata files. If enabled (which is the default),
+  whenever a disk image is used, a set of files with the `.roothash`,
+  `.usrhash`, `.roothash.p7s`, `.usrhash.p7s`, `.verity` suffixes are searched
+  adjacent to disk image file, containing the Verity root hashes, their
+  signatures or the Verity data itself. If disabled this automatic discovery of
+  Verity metadata files is turned off.
+
+* `$SYSTEMD_DISSECT_VERITY_EMBEDDED` — takes a boolean, which controls whether
+  to load the embedded Verity signature data. If enabled (which is the
+  default), Verity root hash information and a suitable signature is
+  automatically acquired from a signature partition, following the
+  [Discoverable Partitions Specification](https://uapi-group.org/specifications/specs/discoverable_partitions_specification).
+  If disabled any such partition is ignored. Note that this only disables
+  discovery of the root hash and its signature, the Verity data partition
+  itself is still searched in the GPT image.
+
+* `$SYSTEMD_DISSECT_VERITY_SIGNATURE` — takes a boolean, which controls whether
+  to validate the signature of the Verity root hash if available. If enabled
+  (which is the default), the signature of suitable disk images is validated
+  against any of the certificates in `/etc/verity.d/*.crt` (and similar
+  directories in `/usr/lib/`, `/run`, …) or passed to the kernel for validation
+  against its built-in certificates.
+
+* `$SYSTEMD_DISSECT_VERITY_TIMEOUT_SEC=sec` — takes a timespan, which controls
+  the timeout waiting for the image to be configured. Defaults to 100 msec.
+
+* `$SYSTEMD_DISSECT_FILE_SYSTEMS=` — takes a colon-separated list of file
+  systems that may be mounted for automatically dissected disk images. If not
+  specified defaults to something like: `ext4:btrfs:xfs:vfat:erofs:squashfs`
+
+* `$SYSTEMD_LOOP_DIRECT_IO` – takes a boolean, which controls whether to enable
+  LO_FLAGS_DIRECT_IO (i.e. direct IO + asynchronous IO) on loopback block
+  devices when opening them. Defaults to on, set this to "0" to disable this
+  feature.
+
+`systemd-cryptsetup`:
+
+* `$SYSTEMD_CRYPTSETUP_USE_TOKEN_MODULE` – takes a boolean, which controls
+  whether to use the libcryptsetup "token" plugin module logic even when
+  activating via FIDO2, PKCS#11, TPM2, i.e. mechanisms natively supported by
+  `systemd-cryptsetup`. Defaults to enabled.
+
+Various tools that read passwords from the TTY, such as `systemd-cryptenroll`
+and `homectl`:
+
+* `$PASSWORD` — takes a string: the literal password to use. If this
+  environment variable is set it is used as password instead of prompting the
+  user interactively. This exists primarily for debugging and testing
+  purposes. Do not use this for production code paths, since environment
+  variables are typically inherited down the process tree without restrictions
+  and should thus not be used for secrets.
+
+* `$NEWPASSWORD` — similar to `$PASSWORD` above, but is used when both a
+  current and a future password are required, for example if the password is to
+  be changed. In that case `$PASSWORD` shall carry the current (i.e. old)
+  password and `$NEWPASSWORD` the new.
+
+`systemd-homed`:
+
+* `$SYSTEMD_HOME_ROOT` – defines an absolute path where to look for home
+  directories/images. When unspecified defaults to `/home/`. This is useful for
+  debugging purposes in order to run a secondary `systemd-homed` instance that
+  operates on a different directory where home directories/images are placed.
+
+* `$SYSTEMD_HOME_RECORD_DIR` – defines an absolute path where to look for
+  fixated home records kept on the host. When unspecified defaults to
+  `/var/lib/systemd/home/`. Similar to `$SYSTEMD_HOME_ROOT` this is useful for
+  debugging purposes, in order to run a secondary `systemd-homed` instance that
+  operates on a record database entirely separate from the host's.
+
+* `$SYSTEMD_HOME_DEBUG_SUFFIX` – takes a short string that is suffixed to
+  `systemd-homed`'s D-Bus and Varlink service names/sockets. This is also
+  understood by `homectl`. This too is useful for running an additional copy of
+  `systemd-homed` that doesn't interfere with the host's main one.
+
+* `$SYSTEMD_HOMEWORK_PATH` – configures the path to the `systemd-homework`
+  binary to invoke. If not specified defaults to
+  `/usr/lib/systemd/systemd-homework`.
+
+  Combining these four environment variables is pretty useful when
+  debugging/developing `systemd-homed`:
+```sh
+SYSTEMD_HOME_DEBUG_SUFFIX=foo \
+      SYSTEMD_HOMEWORK_PATH=/home/lennart/projects/systemd/build/systemd-homework \
+      SYSTEMD_HOME_ROOT=/home.foo/ \
+      SYSTEMD_HOME_RECORD_DIR=/var/lib/systemd/home.foo/ \
+      /home/lennart/projects/systemd/build/systemd-homed
+```
+
+* `$SYSTEMD_HOME_MOUNT_OPTIONS_BTRFS`, `$SYSTEMD_HOME_MOUNT_OPTIONS_EXT4`,
+  `$SYSTEMD_HOME_MOUNT_OPTIONS_XFS` – configure the default mount options to
+  use for LUKS home directories, overriding the built-in default mount
+  options. There's one variable for each of the supported file systems for the
+  LUKS home directory backend.
+
+* `$SYSTEMD_HOME_MKFS_OPTIONS_BTRFS`, `$SYSTEMD_HOME_MKFS_OPTIONS_EXT4`,
+  `$SYSTEMD_HOME_MKFS_OPTIONS_XFS` – configure additional arguments to use for
+  `mkfs` when formatting LUKS home directories. There's one variable for each
+  of the supported file systems for the LUKS home directory backend.
+
+`kernel-install`:
+
+* `$KERNEL_INSTALL_BYPASS` – If set to "1", execution of kernel-install is skipped
+  when kernel-install is invoked. This can be useful if kernel-install is invoked
+  unconditionally as a child process by another tool, such as package managers
+  running kernel-install in a postinstall script.
+
+`systemd-journald`:
+
+* `$SYSTEMD_JOURNAL_COMPACT` – Takes a boolean. If enabled, journal files are written
+  in a more compact format that reduces the amount of disk space required by the
+  journal. Note that journal files in compact mode are limited to 4G to allow use of
+  32-bit offsets. Enabled by default.
+
+`systemd-pcrphase`, `systemd-cryptsetup`:
+
+* `$SYSTEMD_FORCE_MEASURE=1` — If set, force measuring of resources (which are
+  marked for measurement) even if not booted on a kernel equipped with
+  systemd-stub. Normally, requested measurement of resources is conditionalized
+  on kernels that have booted with `systemd-stub`. With this environment
+  variable the test for that my be bypassed, for testing purposes.
diff --git a/docs/GROUP_RECORD.md b/docs/GROUP_RECORD.md
index 26809c4..3810369 100644
--- a/docs/GROUP_RECORD.md
+++ b/docs/GROUP_RECORD.md
@@ -2,12 +2,13 @@
 title: JSON Group Records
 category: Users, Groups and Home Directories
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # JSON Group Records
 
-Long story short: JSON Group Records are to `struct group` what [JSON User
-Records](https://systemd.io/USER_RECORD) are to `struct passwd`.
+Long story short: JSON Group Records are to `struct group` what
+[JSON User Records](USER_RECORD.md) are to `struct passwd`.
 
 Conceptually, much of what applies to JSON user records also applies to JSON
 group records. They also consist of seven sections, with similar properties and
diff --git a/docs/GVARIANT-SERIALIZATION.md b/docs/GVARIANT-SERIALIZATION.md
deleted file mode 100644
index 54e3705..0000000
--- a/docs/GVARIANT-SERIALIZATION.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: GVariant D-Bus Message Serialization
-category: Interfaces
-layout: default
----
-
-# GVariant D-Bus Message Serialization
-
-We stay close to the original dbus1 framing as possible, but make
-certain changes to adapt for GVariant. dbus1 has the following
-framing:
-
-    1. A fixed header of "yyyyuu"
-    2. Additional header fields of "a(yv)"
-    3. Padding with NUL bytes to pad up to next 8byte boundary
-    4. The body
-
-Note that the body is not padded at the end, the complete message
-hence might have a non-aligned size. Reading multiple messages at once
-will hence result in possibly unaligned messages in memory.
-
-The header consists of the following:
-
-    y  Endianness, 'l' or 'B'
-    y  Message Type
-    y  Flags
-    y  Protocol version, '1'
-    u  Length of the body, i.e. the length of part 4 above
-    u  32bit Serial number
-
-    = 12 bytes
-
-This header is then followed by the fields array, whose first value is
-a 32bit array size.
-
-When using GVariant we keep the basic structure in place, only
-slightly alter the header, and define protocol version '2'. The new
-header:
-
-    y  Endianness, 'l' or 'B'
-    y  Message Type
-    y  Flags
-    y  Protocol version, '2'
-    u  Reserved, must be 0
-    t  64bit Cookie
-
-    = 16 bytes
-
-This is then followed by the GVariant fields array ("a{tv}"), and
-finally the actual body as variant (v). Putting this altogether a
-packet on dbus2 hence qualifies as a fully compliant GVariant
-structure of (yyyyuta{tv}v).
-
-For details on gvariant, see:
-
-https://people.gnome.org/~desrt/gvariant-serialisation.pdf
-
-Regarding the framing of dbus2, also see:
-
-https://wiki.gnome.org/Projects/GLib/GDBus/Version2
-
-The first four bytes of the header are defined the same way for dbus1
-and dbus2. The first bytes contain the endianness field and the
-protocol version, so that the remainder of the message can be safely
-made sense of just by looking at the first 32bit.
-
-Note that the length of the body is no longer included in the header
-on dbus2! In fact, the message size must be known in advance, from the
-underlying transport in order to parse dbus2 messages, while it is
-directly included in dbus1 message headers. This change of semantics
-is an effect of GVariant's basic design.
-
-The serial number has been renamed cookie and has been extended from
-32bit to 64bit. It is recommended to avoid the higher 32bit of the
-cookie field though, to simplify compatibility with dbus1 peers. Note
-that not only the cookie/serial field in the fixed header, but also
-the reply_cookie/reply_serial additional header field has been
-increased from 32bit to 64bit, too!
-
-The header field identifiers have been extended from 8bit to
-64bit. This has been done to simplify things, and has no effect
-on the serialization size, as due to alignment for each 8bit
-header field identifier 56 bits of padding had to be added.
-
-Note that the header size changed, due to these changes. However,
-consider that on dbus1 the beginning of the fields array contains the
-32bit array size (since that is how arrays are encoded on dbus1),
-thus, if one considers that size part of the header, instead of the
-array, the size of the header on dbus1 and dbus2 stays identical, at
-16 bytes.
-
-              0               4               8               12              16
-      Common: | E | T | F | V | ...
-
-       dbus1: |  (as above)   | Body Length   | Serial        | Fields Length | Fields array ...
-
-    gvariant: |  (as above)   | Reserved      | Cookie                        | Fields array ...
-
-And that's already it.
-
-Note: To simplify parsing, valid dbus2 messages must include the entire
-      fixed header and additional header fields in a single non-memfd
-      message part. Also, the signature string of the body variant all the
-      way to the end of the message must be in a single non-memfd part
-      too. The parts for this extended header and footer can be the same
-      one, and can also continue any amount of additional body bytes.
-
-Note: The GVariant "MAYBE" type is not supported, so that messages can
-      be fully converted forth and back between dbus1 and gvariant
-      representations.
diff --git a/docs/HACKING.md b/docs/HACKING.md
index 198ca52..2ce7dea 100644
--- a/docs/HACKING.md
+++ b/docs/HACKING.md
@@ -2,13 +2,14 @@
 title: Hacking on systemd
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Hacking on systemd
 
 We welcome all contributions to systemd. If you notice a bug or a missing
-feature, please feel invited to fix it, and submit your work as a GitHub Pull
-Request (PR) at https://github.com/systemd/systemd/pull/new.
+feature, please feel invited to fix it, and submit your work as a
+[GitHub Pull Request (PR)](https://github.com/systemd/systemd/pull/new).
 
 Please make sure to follow our [Coding Style](CODING_STYLE.md) when submitting
 patches. Also have a look at our [Contribution Guidelines](CONTRIBUTING.md).
@@ -26,31 +27,31 @@
 have setup for systemd, to ensure our codebase stays in good shape.
 
 Please always test your work before submitting a PR. For many of the components
-of systemd testing is straight-forward as you can simply compile systemd and
+of systemd testing is straightforward as you can simply compile systemd and
 run the relevant tool from the build directory.
 
-For some components (most importantly, systemd/PID1 itself) this is not
+For some components (most importantly, systemd/PID 1 itself) this is not
 possible, however. In order to simplify testing for cases like this we provide
-a set of `mkosi` build files directly in the source tree. `mkosi` is a tool for
-building clean OS images from an upstream distribution in combination with a
-fresh build of the project in the local working directory. To make use of this,
-please acquire `mkosi` from https://github.com/systemd/mkosi first, unless your
-distribution has packaged it already and you can get it from there. After the
-tool is installed, symlink the settings file for your distribution of choice
-from .mkosi/ to mkosi.default in the project root directory (note that the
-package manager for this distro needs to be installed on your host system).
-After doing that, it is sufficient to type `mkosi` in the systemd project
-directory to generate a disk image `image.raw` you can boot either in
-`systemd-nspawn` or in an UEFI-capable VM:
+a set of `mkosi` build files directly in the source tree.
+[mkosi](https://github.com/systemd/mkosi) is a tool for building clean OS images
+from an upstream distribution in combination with a fresh build of the project
+in the local working directory. To make use of this, please install `mkosi` from
+the [GitHub repository](https://github.com/systemd/mkosi). `mkosi` will build an
+image for the host distro by default. Currently, the latest github commit is
+required. `mkosi` also requires systemd v253 (unreleased) or newer. If systemd v253
+is not available, `mkosi` will automatically use executables from the systemd build
+directory if it's executed from the systemd repository root directory. It is
+sufficient to type `mkosi` in the systemd project directory to generate a disk image
+you can boot either in `systemd-nspawn` or in a UEFI-capable VM:
 
-```
-# mkosi boot
+```sh
+$ mkosi boot
 ```
 
 or:
 
-```
-# mkosi qemu
+```sh
+$ mkosi qemu
 ```
 
 Every time you rerun the `mkosi` command a fresh image is built, incorporating
@@ -67,39 +68,47 @@
 mkosi.default.d/ (e.g 20-local.conf) and add the following contents:
 
 ```
-[Packages]
+[Content]
 Cache=<full-path-to-package-manager-cache> # (e.g. /var/cache/dnf)
 ```
 
 If you want to do a local build without mkosi, most distributions also provide
 very simple and convenient ways to install all development packages necessary
-to build systemd. For example, on Fedora the following command line should be
-sufficient to install all of systemd's build dependencies:
+to build systemd:
 
-```
-# dnf builddep systemd
+```sh
+# Fedora
+$ sudo dnf builddep systemd
+# Debian/Ubuntu
+$ sudo apt-get build-dep systemd
+# Arch
+$ sudo pacman install asp
+$ asp checkout systemd
+$ cd systemd/trunk
+$ makepkg -seoc
 ```
 
 Putting this all together, here's a series of commands for preparing a patch
-for systemd (this example is for Fedora):
+for systemd:
 
 ```sh
-$ sudo dnf builddep systemd               # install build dependencies
-$ sudo dnf install mkosi                  # install tool to quickly build images
+# Install build dependencies (see above)
+# Install mkosi from the github repository
 $ git clone https://github.com/systemd/systemd.git
 $ cd systemd
-$ vim src/core/main.c                     # or wherever you'd like to make your changes
-$ meson build                             # configure the build
-$ meson compile -C build                  # build it locally, see if everything compiles fine
-$ meson test -C build                     # run some simple regression tests
-$ ln -s .mkosi/mkosi.fedora mkosi.default # Configure mkosi to build a fedora image
-$ sudo mkosi                              # build a test image
-$ sudo mkosi boot                         # boot up the test image
-$ git add -p                              # interactively put together your patch
-$ git commit                              # commit it
-$ git push REMOTE HEAD:refs/heads/BRANCH
-                                          # where REMOTE is your "fork" on GitHub
-                                          # and BRANCH is a branch name.
+$ git checkout -b <BRANCH>        # where BRANCH is the name of the branch
+$ vim src/core/main.c             # or wherever you'd like to make your changes
+$ meson build                     # configure the build
+$ ninja -C build                  # build it locally, see if everything compiles fine
+$ meson test -C build             # run some simple regression tests
+$ cd ..
+$ git clone https://github.com/systemd/mkosi.git
+$ cd systemd
+$ sudo ../mkosi/bin/mkosi         # build the test image
+$ sudo ../mkosi/bin/mkosi boot    # boot up the test image
+$ git add -p                      # interactively put together your patch
+$ git commit                      # commit it
+$ git push -u <REMOTE>            # where REMOTE is your "fork" on GitHub
 ```
 
 And after that, head over to your repo on GitHub and click "Compare & pull request"
@@ -135,6 +144,11 @@
 documentation consistency checks). Those are not useful when compiling for
 distribution and can be disabled by setting `-Dmode=release`.
 
+## Sanitizers in mkosi
+
+See [Testing systemd using sanitizers](TESTING_WITH_SANITIZERS.md) for more information
+on how to build with sanitizers enabled in mkosi.
+
 ## Fuzzers
 
 systemd includes fuzzers in `src/fuzz/` that use libFuzzer and are automatically
@@ -148,14 +162,31 @@
 `tools/oss-fuzz.sh`.
 
 The fuzzers can be built locally if you have libFuzzer installed by running
-`tools/oss-fuzz.sh`. You should also confirm that the fuzzer runs in the
-OSS-Fuzz environment by checking out the OSS-Fuzz repo, and then running
-commands like this:
+`tools/oss-fuzz.sh`. You should also confirm that the fuzzers can be built and
+run using
+[the OSS-Fuzz toolchain](https://google.github.io/oss-fuzz/advanced-topics/reproducing/#building-using-docker):
 
 ```
-python infra/helper.py build_image systemd
-python infra/helper.py build_fuzzers --sanitizer memory systemd ../systemd
-python infra/helper.py run_fuzzer systemd fuzz-foo
+path_to_systemd=...
+
+git clone --depth=1 https://github.com/google/oss-fuzz
+cd oss-fuzz
+
+for sanitizer in address undefined memory; do
+  for engine in libfuzzer afl honggfuzz; do
+    ./infra/helper.py build_fuzzers --sanitizer "$sanitizer" --engine "$engine" \
+       --clean systemd "$path_to_systemd"
+
+    ./infra/helper.py check_build --sanitizer "$sanitizer" --engine "$engine" \
+      -e ALLOWED_BROKEN_TARGETS_PERCENTAGE=0 systemd
+  done
+done
+
+./infra/helper.py build_fuzzers --clean --architecture i386 systemd "$path_to_systemd"
+./infra/helper.py check_build --architecture i386 -e ALLOWED_BROKEN_TARGETS_PERCENTAGE=0 systemd
+
+./infra/helper.py build_fuzzers --clean --sanitizer coverage systemd "$path_to_systemd"
+./infra/helper.py coverage --no-corpus-download systemd
 ```
 
 If you find a bug that impacts the security of systemd, please follow the
@@ -175,7 +206,7 @@
 
 ```sh
 #!/usr/bin/env sh
-tee mkosi-clangd.build > /dev/null << EOF
+tee mkosi-clangd.build >/dev/null <<EOF
 #!/usr/bin/env sh
 exec clangd \\
         --compile-commands-dir=/root/build \\
@@ -189,7 +220,7 @@
         --header-insertion=never
 EOF
 chmod +x mkosi-clangd.build
-exec sudo mkosi --source-file-transfer=mount --incremental --skip-final-phase --build-script mkosi-clangd.build build
+exec pkexec mkosi --source-file-transfer=mount --incremental --skip-final-phase --build-script mkosi-clangd.build build
 ```
 
 Next, mark the script as executable and point your editor plugin to use this script to start clangd. For
@@ -202,7 +233,7 @@
 add the following contents:
 
 ```
-[Packages]
+[Content]
 IncludeDirectory=mkosi.includedir
 ```
 
@@ -211,7 +242,7 @@
 host in the mkosi-clangd.sh script.
 
 We also need to make sure clangd is installed in the build image. To have mkosi install clangd in the build
-image, edit the 20-local.conf file we created earlier and add the following contents under the `[Packages]`
+image, edit the 20-local.conf file we created earlier and add the following contents under the `[Content]`
 section:
 
 ```
@@ -224,12 +255,9 @@
 
 Because mkosi needs to run as root, we also need to make sure we can enter the root password when the editor
 plugin tries to run the mkosi-clangd.sh script. To be able to enter the root password in non-interactive
-scripts, we use an askpass provider. This is a program that sudo will launch if it detects it's being
-executed from a non-interactive shell so that the root password can still be entered. There are multiple
-implementations such as gnome askpass and KDE askpass. Install one of the askpass packages your distro
-provides and set the `SUDO_ASKPASS` environment variable to the path of the askpass binary you want to use.
-If configured correctly, a window will appear when your editor plugin tries to run the mkosi-clangd.sh script
-allowing you to enter the root password.
+scripts, we use pkexec instead of sudo. pkexec will launch a graphical interface to let the user enter their
+password, so that the password can be entered by the user even when pkexec is executed from a non-interactive
+shell.
 
 Due to a bug in btrfs, it's currently impossible to mount two mkosi btrfs images at the same time. Because of
 this, trying to do a regular build while the clangd image is running will fail. To circumvent this, use ext4
@@ -245,3 +273,169 @@
 
 Now, your editor will start clangd in the mkosi build image and all of clangd's features will work as
 expected.
+
+## Debugging binaries that need to run as root in vscode
+
+When trying to debug binaries that need to run as root, we need to do some custom configuration in vscode to
+have it try to run the applications as root and to ask the user for the root password when trying to start
+the binary. To achieve this, we'll use a custom debugger path which points to a script that starts `gdb` as
+root using `pkexec`. pkexec will prompt the user for their root password via a graphical interface. This
+guide assumes the C/C++ extension is used for debugging.
+
+First, create a file `sgdb` in the root of the systemd repository with the following contents and make it
+executable:
+
+```
+#!/bin/sh
+exec pkexec gdb "$@"
+```
+
+Then, open launch.json in vscode, and set `miDebuggerPath` to `${workspaceFolder}/sgdb` for the corresponding
+debug configuration. Now, whenever you try to debug the application, vscode will try to start gdb as root via
+pkexec which will prompt you for your password via a graphical interface. After entering your password,
+vscode should be able to start debugging the application.
+
+For more information on how to set up a debug configuration for C binaries, please refer to the official
+vscode documentation [here](https://code.visualstudio.com/docs/cpp/launch-json-reference)
+
+## Debugging systemd with mkosi + vscode
+
+To simplify debugging systemd when testing changes using mkosi, we're going to show how to attach
+[VSCode](https://code.visualstudio.com/)'s debugger to an instance of systemd running in a mkosi image
+(either using QEMU or systemd-nspawn).
+
+To allow VSCode's debugger to attach to systemd running in a mkosi image, we have to make sure it can access
+the container/virtual machine spawned by mkosi where systemd is running. mkosi makes this possible via a
+handy SSH option that makes the generated image accessible via SSH when booted. Thus you must build
+the image with `mkosi --ssh`. The easiest way to set the
+option is to create a file 20-local.conf in mkosi.default.d/ (in the directory you ran mkosi in) and add
+the following contents:
+
+```
+[Host]
+Ssh=yes
+```
+
+Next, make sure systemd-networkd is running on the host system so that it can configure the network interface
+connecting the host system to the container/VM spawned by mkosi. Once systemd-networkd is running, you should
+be able to connect to a running mkosi image by executing `mkosi ssh` in the systemd repo directory.
+
+Now we need to configure VSCode. First, make sure the C/C++ extension is installed. If you're already using
+a different extension for code completion and other IDE features for C in VSCode, make sure to disable the
+corresponding parts of the C/C++ extension in your VSCode user settings by adding the following entries:
+
+```json
+"C_Cpp.formatting": "Disabled",
+"C_Cpp.intelliSenseEngine": "Disabled",
+"C_Cpp.enhancedColorization": "Disabled",
+"C_Cpp.suggestSnippets": false,
+```
+
+With the extension set up, we can create the launch.json file in the .vscode/ directory to tell the VSCode
+debugger how to attach to the systemd instance running in our mkosi container/VM. Create the file, and possibly
+the directory, and add the following contents:
+
+```json
+{
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "type": "cppdbg",
+            "program": "/usr/lib/systemd/systemd",
+            "processId": "${command:pickRemoteProcess}",
+            "request": "attach",
+            "name": "systemd",
+            "pipeTransport": {
+                "pipeProgram": "mkosi",
+                "pipeArgs": [
+                    "-C",
+                    "/path/to/systemd/repo/directory/on/host/system/",
+                    "ssh"
+                ],
+                "debuggerPath": "/usr/bin/gdb"
+            },
+            "MIMode": "gdb",
+            "sourceFileMap": {
+                "/root/build/../src": {
+                    "editorPath": "${workspaceFolder}",
+                    "useForBreakpoints": false
+                },
+                "/root/build/*": {
+                    "editorPath": "${workspaceFolder}/mkosi.builddir",
+                    "useForBreakpoints": false
+                }
+            }
+        }
+    ]
+}
+```
+
+Now that the debugger knows how to connect to our process in the container/VM and we've set up the necessary
+source mappings, go to the "Run and Debug" window and run the "systemd" debug configuration. If everything
+goes well, the debugger should now be attached to the systemd instance running in the container/VM. You can
+attach breakpoints from the editor and enjoy all the other features of VSCode's debugger.
+
+To debug systemd components other than PID 1, set "program" to the full path of the component you want to
+debug and set "processId" to "${command:pickProcess}". Now, when starting the debugger, VSCode will ask you
+the PID of the process you want to debug. Run `systemctl show --property MainPID --value <component>` in the
+container to figure out the PID and enter it when asked and VSCode will attach to that process instead.
+
+## Debugging systemd-boot
+
+During boot, systemd-boot and the stub loader will output a message like `systemd-boot@0x0A,0x0B`,
+providing the location of the text and data sections. These location can then be used to attach
+to a QEMU session (provided it was run with `-s`) with these gdb commands:
+
+```
+    (gdb) file build/src/boot/efi/systemd-bootx64.efi
+    (gdb) add-symbol-file build/src/boot/efi/systemd_boot.so 0x0A -s .data 0x0B
+    (gdb) set architecture i386:x86-64
+    (gdb) target remote :1234
+```
+
+This process can be automated by using the `debug-sd-boot.sh` script in the tools folder. If run
+without arguments it will provide usage information.
+
+If the debugger is too slow to attach to examine an early boot code passage, we can uncomment the
+call to `debug_break()` inside of `efi_main()`. As soon as the debugger has control we can then run
+`set variable wait = 0` or `return` to continue. Once the debugger has attached, setting breakpoints
+will work like usual.
+
+To debug systemd-boot in an IDE such as VSCode we can use a launch configuration like this:
+```json
+{
+    "name": "systemd-boot",
+    "type": "cppdbg",
+    "request": "launch",
+    "program": "${workspaceFolder}/build/src/boot/efi/systemd-bootx64.efi",
+    "cwd": "${workspaceFolder}",
+    "MIMode": "gdb",
+    "miDebuggerServerAddress": ":1234",
+    "setupCommands": [
+        { "text": "shell mkfifo /tmp/sdboot.{in,out}" },
+        { "text": "shell qemu-system-x86_64 [...] -s -serial pipe:/tmp/sdboot" },
+        { "text": "shell ${workspaceFolder}/tools/debug-sd-boot.sh ${workspaceFolder}/build/src/boot/efi/systemd-bootx64.efi /tmp/sdboot.out systemd-boot.gdb" },
+        { "text": "source /tmp/systemd-boot.gdb" },
+    ]
+}
+```
+
+## Hacking on the kernel + systemd
+
+If you're hacking on the kernel in tandem with systemd, you can clone a kernel repository in mkosi.kernel/ in
+the systemd repository, and mkosi will automatically build that kernel and install it into the final image.
+To prevent the distribution's kernel from being installed (which isn't necessary since we're building our
+own kernel), you can add the following snippets to mkosi.default.d/20-local.conf:
+
+(This snippet is for Fedora, the list of packages will need to be changed for other distributions)
+
+```
+[Distribution]
+CacheInitrd=no
+
+[Content]
+BasePackages=conditional
+Packages=systemd
+         util-linux
+         dracut
+```
diff --git a/docs/HOME_DIRECTORY.md b/docs/HOME_DIRECTORY.md
index a3eabb7..0aafce2 100644
--- a/docs/HOME_DIRECTORY.md
+++ b/docs/HOME_DIRECTORY.md
@@ -2,26 +2,27 @@
 title: Home Directories
 category: Users, Groups and Home Directories
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Home Directories
 
 [`systemd-homed.service(8)`](https://www.freedesktop.org/software/systemd/man/systemd-homed.service.html)
 manages home directories of regular ("human") users. Each directory it manages
-encapsulates both the data store and the user record of the user so that it
+encapsulates both the data store and the user record of the user, so that it
 comprehensively describes the user account, and is thus naturally portable
 between systems without any further, external metadata. This document describes
-the format used by these home directories, in context of the storage mechanism
-used.
+the format used by these home directories, in the context of the storage
+mechanism used.
 
 ## General Structure
 
 Inside of the home directory a file `~/.identity` contains the JSON formatted
-user record of the user. It follows the format defined in [`JSON User
-Records`](https://systemd.io/USER_RECORD). It is recommended to bring the
+user record of the user. It follows the format defined in
+[`JSON User Records`](USER_RECORD.md). It is recommended to bring the
 record into 'normalized' form (i.e. all objects should contain their fields
 sorted alphabetically by their key) before storing it there, though this is not
-required nor enforced. Since the user record is cryptographically signed the
+required nor enforced. Since the user record is cryptographically signed, the
 user cannot make modifications to the file on their own (at least not without
 corrupting it, or knowing the private key used for signing the record). Note
 that user records are stored here without their `binding`, `status` and
@@ -34,13 +35,13 @@
 `systemd-homed` is used (i.e. `--storage=directory` or `--storage=subvolume` on
 the
 [`homectl(1)`](https://www.freedesktop.org/software/systemd/man/homectl.html)
-command line) the home directory requires no special set-up besides including
+command line) the home directory requires no special setup besides including
 the user record in the `~/.identity` file.
 
 It is recommended to name home directories managed this way by
 `systemd-homed.service` by the user name, suffixed with `.homedir` (example:
 `lennart.homedir` for a user `lennart`) but this is not enforced. When the user
-is logged in the directory is generally mounted to `/home/$USER` (in our
+is logged in, the directory is generally mounted to `/home/$USER` (in our
 example: `/home/lennart`), thus dropping the suffix while the home directory is
 active. `systemd-homed` will automatically discover home directories named this
 way in `/home/*.homedir` and synthesize NSS user records for them as they show
@@ -53,19 +54,19 @@
 `--storage=fscrypt` on the `homectl` command line.) Key management is
 implemented via extended attributes on the directory itself: for each password
 an extended attribute `trusted.fscrypt_slot0`, `trusted.fscrypt_slot1`,
-`trusted.fscrypt_slot2`, … is maintained. It's value contains a colon-separated
+`trusted.fscrypt_slot2`, … is maintained. Its value contains a colon-separated
 pair of Base64 encoded data fields. The first field contains a salt value, the
 second field the encrypted volume key. The latter is encrypted using AES256 in
-counter mode, using a key derived from the password via PBKDF2-HMAC-SHA512
+counter mode, using a key derived from the password via PBKDF2-HMAC-SHA512,
 together with the salt value. The construction is similar to what LUKS does for
 `dm-crypt` encrypted volumes. Note that extended attributes are not encrypted
-by `fscrypt` and hence are suitable for carry the key slots. Moreover, by using
-extended attributes the slots are directly attached to the directory and an
-independent sidecar key database is not required.
+by `fscrypt` and hence are suitable for carrying the key slots. Moreover, by
+using extended attributes, the slots are directly attached to the directory and
+an independent sidecar key database is not required.
 
 ## Storage Mechanism: `cifs` Home Directories
 
-In this storage mechanism the home directory is mounted from a CIFS server and
+In this storage mechanism, the home directory is mounted from a CIFS server and
 service at login, configured inside the user record. (Use `--storage=cifs` on
 the `homectl` command line.) The local password of the user is used to log into
 the CIFS service. The directory share needs to contain the user record in
@@ -84,7 +85,7 @@
 
 * The image contains a GPT partition table. For now it should only contain a
   single partition, and that partition must have the type UUID
-  `773f91ef-66d4-49b5-bd83-d683bf40ad16`. It's partition label must be the
+  `773f91ef-66d4-49b5-bd83-d683bf40ad16`. Its partition label must be the
   user name.
 
 * This partition must contain a LUKS2 volume, whose label must be the user
@@ -105,24 +106,24 @@
   contains a second copy of the user record in the `~/.identity` file, like in
   the other storage mechanisms.
 
-The image file should either reside in a directory `/home/` on the system,
-named after the user, suffixed with `.home`. When activated the container home
+The image file should reside in a directory `/home/` on the system,
+named after the user, suffixed with `.home`. When activated, the container home
 directory is mounted to the same path, though with the `.home` suffix dropped —
 unless a different mount point is defined in the user record. (e.g.: the
 loopback file `/home/waldo.home` is mounted to `/home/waldo` while activated.)
-When the image is stored on removable media (such as a USB stick) the image
-file can be directly `dd`'ed onto it, the format is unchanged. The GPT envelope
+When the image is stored on removable media (such as a USB stick), the image
+file can be directly `dd`'ed onto it; the format is unchanged. The GPT envelope
 should ensure the image is properly recognizable as a home directory both when
 used in a loopback file and on a removable USB stick. (Note that when mounting
-a home directory from an USB stick it too defaults to a directory in `/home/`,
+a home directory from an USB stick, it too defaults to a directory in `/home/`,
 named after the username, with no further suffix.)
 
 Rationale for the GPT partition table envelope: this way the image is nicely
 discoverable and recognizable already by partition managers as a home
 directory. Moreover, when copied onto a USB stick the GPT envelope makes sure
 the stick is properly recognizable as a portable home directory
-medium. (Moreover it allows to embed additional partitions later on, for
-example for allowing a multi-purpose USB stick that contains both a home
+medium. (Moreover, it allows embedding additional partitions later on, for
+example on a multi-purpose USB stick that contains both a home
 directory and a generic storage volume.)
 
 Rationale for including the encrypted user record in the LUKS2 header:
@@ -132,7 +133,7 @@
 necessary to validate the home directory image *before* mounting it and
 establishing a minimal level of trust. Since the user record data is
 cryptographically signed and user records not signed with a recognized private
-key are not accepted a minimal level of trust between the system and the home
+key are not accepted, a minimal level of trust between the system and the home
 directory image is established.
 
 Rationale for storing the home directory one level below to root directory of
@@ -144,10 +145,10 @@
 Regardless of the storage mechanism used, an activated home directory
 necessarily involves a mount point to be established. In case of the
 directory-based storage mechanisms (`directory`, `subvolume` and `fscrypt`)
-this is a bind mount, in case of `cifs` this is a CIFS network mount, and in
+this is a bind mount. In case of `cifs` this is a CIFS network mount, and in
 case of the LUKS2 backend a regular block device mount of the file system
 contained in the LUKS2 image. By requiring a mount for all cases (even for
-those that already are a directory) a clear logic is defined to distinguish
+those that already are a directory), a clear logic is defined to distinguish
 active and inactive home directories, so that the directories become
 inaccessible under their regular path the instant they are
 deactivated. Moreover, the `nosuid`, `nodev` and `noexec` flags configured in
@@ -160,7 +161,7 @@
 signed by a recognized key. When the three instances differ in `lastChangeUSec`
 field, the newest record wins, and is propagated to the other two locations.
 
-During activation the file system checker (`fsck`) appropriate for the
+During activation, the file system checker (`fsck`) appropriate for the
 selected file system is automatically invoked, ensuring the file system is in a
 healthy state before it is mounted.
 
@@ -168,7 +169,7 @@
 the file system, the home directory is automatically and recursively `chown()`ed
 to the correct UID.
 
-Depending on the `luksDiscard` setting of the user record either the backing
+Depending on the `luksDiscard` setting of the user record, either the backing
 loopback file is `fallocate()`ed during activation, or the mounted file system
 is `FITRIM`ed after mounting, to ensure the setting is correctly enforced.
 
diff --git a/docs/INITRD_INTERFACE.md b/docs/INITRD_INTERFACE.md
index e59bbcc..de91ba7 100644
--- a/docs/INITRD_INTERFACE.md
+++ b/docs/INITRD_INTERFACE.md
@@ -2,29 +2,31 @@
 title: Initrd Interface
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 
 # The initrd Interface of systemd
 
-The Linux initrd mechanism (short for "initial RAM disk") refers to a small
-file system archive that is unpacked by the kernel and contains the first
-userspace code that runs. It typically finds and transitions into the actual
-root file system to use. systemd supports both initrd and initrd-less boots. If
-an initrd is used it is a good idea to pass a few bits of runtime information
-from the initrd to systemd in order to avoid duplicate work and to provide
-performance data to the administrator. In this page we attempt to roughly
-describe the interfaces that exist between the initrd and systemd. These
-interfaces are currently used by dracut and the ArchLinux initrds.
+The Linux initrd mechanism (short for "initial RAM disk", also known as
+"initramfs") refers to a small file system archive that is unpacked by the
+kernel and contains the first userspace code that runs. It typically finds and
+transitions into the actual root file system to use. systemd supports both
+initrd and initrd-less boots. If an initrd is used, it is a good idea to pass a
+few bits of runtime information from the initrd to systemd in order to avoid
+duplicate work and to provide performance data to the administrator. In this
+page we attempt to roughly describe the interfaces that exist between the
+initrd and systemd. These interfaces are currently used by dracut and the
+ArchLinux initrds.
 
 * The initrd should mount `/run/` as a tmpfs and pass it pre-mounted when
   jumping into the main system when executing systemd. The mount options should
-  be `mode=755,nodev,nosuid,strictatime`.
+  be `mode=0755,nodev,nosuid,strictatime`.
 
 * It's highly recommended that the initrd also mounts `/usr/` (if split off) as
   appropriate and passes it pre-mounted to the main system, to avoid the
   problems described in [Booting without /usr is
-  Broken](http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken).
+  Broken](https://www.freedesktop.org/wiki/Software/systemd/separate-usr-is-broken).
 
 * If the executable `/run/initramfs/shutdown` exists systemd will use it to
   jump back into the initrd on shutdown. `/run/initramfs/` should be a usable
@@ -36,11 +38,10 @@
   optionally followed (in `argv[2]`, `argv[3]`, … systemd's original command
   line options, for example `--log-level=` and similar.
 
-* Storage daemons run from the initrd should follow the guide on [systemd
-  and Storage Daemons for the Root File
-  System](https://systemd.io/ROOT_STORAGE_DAEMONS) to survive properly from the
-  boot initrd all the way to the point where systemd jumps back into the initrd
-  for shutdown.
+* Storage daemons run from the initrd should follow the guide on
+  [systemd and Storage Daemons for the Root File System](ROOT_STORAGE_DAEMONS.md)
+  to survive properly from the boot initrd all the way to the point where
+  systemd jumps back into the initrd for shutdown.
 
 One last clarification: we use the term _initrd_ very generically here
 describing any kind of early boot file system, regardless whether that might be
@@ -57,10 +58,10 @@
 It is also possible and recommended to implement the initrd itself based on
 systemd. Here are a few terse notes:
 
-* Provide `/etc/initrd-release` in the initrd image. The idea is that it follows
-  the same format as the usual `/etc/os-release` but describes the initial RAM
-  disk implementation rather than the OS. systemd uses the existence of this
-  file as a flag whether to run in initial RAM disk mode, or not.
+* Provide `/etc/initrd-release` in the initrd image. The idea is that it
+  follows the same format as the usual `/etc/os-release` but describes the
+  initrd implementation rather than the OS. systemd uses the existence of this
+  file as a flag whether to run in initrd mode, or not.
 
 * When run in initrd mode, systemd and its components will read a couple of
   additional command line arguments, which are generally prefixed with `rd.`
@@ -69,5 +70,4 @@
 
 * The switch-root operation will result in a killing spree of all running
   processes. Some processes might need to be excluded from that, see the guide
-  on [systemd and Storage Daemons for the Root File
-  System](https://systemd.io/ROOT_STORAGE_DAEMONS).
+  on [systemd and Storage Daemons for the Root File System](ROOT_STORAGE_DAEMONS.md).
diff --git a/docs/JOURNAL_EXPORT_FORMATS.md b/docs/JOURNAL_EXPORT_FORMATS.md
new file mode 100644
index 0000000..037db94
--- /dev/null
+++ b/docs/JOURNAL_EXPORT_FORMATS.md
@@ -0,0 +1,158 @@
+---
+title: Journal Export Formats
+category: Interfaces
+layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
+---
+
+# Journal Export Formats
+
+## Journal Export Format
+
+_Note that this document describes the binary serialization format of journals only, as used for transfer across the network.
+For interfacing with web technologies there's the Journal JSON Format, described below.
+The binary format on disk is documented as the [Journal File Format](JOURNAL_FILE_FORMAT.md)._
+
+_Before reading on, please make sure you are aware of the [basic properties of journal entries](https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html), in particular realize that they may include binary non-text data (though usually don't), and the same field might have multiple values assigned within the same entry (though usually hasn't)._
+
+When exporting journal data for other uses or transferring it via the network/local IPC the _journal export format_ is used. It's a simple serialization of journal entries, that is easy to read without any special tools, but still binary safe where necessary. The format is like this:
+
+* Two journal entries that follow each other are separated by a double newline.
+* Journal fields consisting only of valid non-control UTF-8 codepoints are serialized as they are (i.e. the field name, followed by '=', followed by field data), followed by a newline as separator to the next field. Note that fields containing newlines cannot be formatted like this. Non-control UTF-8 codepoints are the codepoints with value at or above 32 (' '), or equal to 9 (TAB).
+* Other journal fields are serialized in a special binary safe way: field name, followed by newline, followed by a binary 64bit little endian size value, followed by the binary field data, followed by a newline as separator to the next field.
+* Entry metadata that is not actually a field is serialized like it was a field, but beginning with two underscores. More specifically, `__CURSOR=`, `__REALTIME_TIMESTAMP=`, `__MONOTONIC_TIMESTAMP=` are introduced this way. Note that these meta-fields are only generated when actual journal files are serialized. They are omitted for entries that do not originate from a journal file (for example because they are transferred for the first time to be stored in one). Or in other words: if you are generating this format you shouldn't care about these special double-underscore fields. But you might find them usable when you deserialize the format generated by us. Additional fields prefixed with two underscores might be added later on, your parser should skip over the fields it does not know.
+* The order in which fields appear in an entry is undefined and might be different for each entry that is serialized.
+And that's already it.
+
+This format can be generated via `journalctl -o export`.
+
+Here's an example for two serialized entries which consist only of text data:
+
+```
+__CURSOR=s=739ad463348b4ceca5a9e69c95a3c93f;i=4ece7;b=6c7c6013a26343b29e964691ff25d04c;m=4fc72436e;t=4c508a72423d9;x=d3e5610681098c10;p=system.journal
+__REALTIME_TIMESTAMP=1342540861416409
+__MONOTONIC_TIMESTAMP=21415215982
+_BOOT_ID=6c7c6013a26343b29e964691ff25d04c
+_TRANSPORT=syslog
+PRIORITY=4
+SYSLOG_FACILITY=3
+SYSLOG_IDENTIFIER=gdm-password]
+SYSLOG_PID=587
+MESSAGE=AccountsService-DEBUG(+): ActUserManager: ignoring unspecified session '8' since it's not graphical: Success
+_PID=587
+_UID=0
+_GID=500
+_COMM=gdm-session-wor
+_EXE=/usr/libexec/gdm-session-worker
+_CMDLINE=gdm-session-worker [pam/gdm-password]
+_AUDIT_SESSION=2
+_AUDIT_LOGINUID=500
+_SYSTEMD_CGROUP=/user/lennart/2
+_SYSTEMD_SESSION=2
+_SELINUX_CONTEXT=system_u:system_r:xdm_t:s0-s0:c0.c1023
+_SOURCE_REALTIME_TIMESTAMP=1342540861413961
+_MACHINE_ID=a91663387a90b89f185d4e860000001a
+_HOSTNAME=epsilon
+
+__CURSOR=s=739ad463348b4ceca5a9e69c95a3c93f;i=4ece8;b=6c7c6013a26343b29e964691ff25d04c;m=4fc72572f;t=4c508a7243799;x=68597058a89b7246;p=system.journal
+__REALTIME_TIMESTAMP=1342540861421465
+__MONOTONIC_TIMESTAMP=21415221039
+_BOOT_ID=6c7c6013a26343b29e964691ff25d04c
+_TRANSPORT=syslog
+PRIORITY=6
+SYSLOG_FACILITY=9
+SYSLOG_IDENTIFIER=/USR/SBIN/CROND
+SYSLOG_PID=8278
+MESSAGE=(root) CMD (run-parts /etc/cron.hourly)
+_PID=8278
+_UID=0
+_GID=0
+_COMM=run-parts
+_EXE=/usr/bin/bash
+_CMDLINE=/bin/bash /bin/run-parts /etc/cron.hourly
+_AUDIT_SESSION=8
+_AUDIT_LOGINUID=0
+_SYSTEMD_CGROUP=/user/root/8
+_SYSTEMD_SESSION=8
+_SELINUX_CONTEXT=system_u:system_r:crond_t:s0-s0:c0.c1023
+_SOURCE_REALTIME_TIMESTAMP=1342540861416351
+_MACHINE_ID=a91663387a90b89f185d4e860000001a
+_HOSTNAME=epsilon
+
+```
+
+A message with a binary field produced by
+```bash
+python3 -c 'from systemd import journal; journal.send("foo\nbar")'
+journalctl -n1 -o export
+```
+
+```
+__CURSOR=s=bcce4fb8ffcb40e9a6e05eee8b7831bf;i=5ef603;b=ec25d6795f0645619ddac9afdef453ee;m=545242e7049;t=50f1202
+__REALTIME_TIMESTAMP=1423944916375353
+__MONOTONIC_TIMESTAMP=5794517905481
+_BOOT_ID=ec25d6795f0645619ddac9afdef453ee
+_TRANSPORT=journal
+_UID=1001
+_GID=1001
+_CAP_EFFECTIVE=0
+_SYSTEMD_OWNER_UID=1001
+_SYSTEMD_SLICE=user-1001.slice
+_MACHINE_ID=5833158886a8445e801d437313d25eff
+_HOSTNAME=bupkis
+_AUDIT_LOGINUID=1001
+_SELINUX_CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
+CODE_LINE=1
+CODE_FUNC=<module>
+SYSLOG_IDENTIFIER=python3
+_COMM=python3
+_EXE=/usr/bin/python3.4
+_AUDIT_SESSION=35898
+_SYSTEMD_CGROUP=/user.slice/user-1001.slice/session-35898.scope
+_SYSTEMD_SESSION=35898
+_SYSTEMD_UNIT=session-35898.scope
+MESSAGE
+^G^@^@^@^@^@^@^@foo
+bar
+CODE_FILE=<string>
+_PID=16853
+_CMDLINE=python3 -c from systemd import journal; journal.send("foo\nbar")
+_SOURCE_REALTIME_TIMESTAMP=1423944916372858
+```
+
+## Journal JSON Format
+
+_Note that this section describes the JSON serialization format of the journal only, as used for interfacing with web technologies.
+For binary transfer of journal data across the network there's the Journal Export Format described above.
+The binary format on disk is documented as [Journal File Format](JOURNAL_FILE_FORMAT.md)._
+
+_Before reading on, please make sure you are aware of the [basic properties of journal entries](https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html), in particular realize that they may include binary non-text data (though usually don't), and the same field might have multiple values assigned within the same entry (though usually hasn't)._
+
+In most cases the Journal JSON serialization is the obvious mapping of the entry field names (as JSON strings) to the entry field values (also as JSON strings) encapsulated in one JSON object. However, there are a few special cases to handle:
+
+* A field that contains non-printable or non-UTF8 is serialized as a number array instead. This is necessary to handle binary data in a safe way without losing data, since JSON cannot embed binary data natively. Each byte of the binary field will be mapped to its numeric value in the range 0…255.
+* The JSON serializer can optionally skip huge (as in larger than a specific threshold) data fields from the JSON object. If that is enabled and a data field is too large, the field name is still included in the JSON object but assigned _null_.
+* Within the same entry, Journal fields may have multiple values assigned. This is not allowed in JSON. The serializer will hence create a single JSON field only for these cases, and assign it an array of values (which the can be strings, _null_ or number arrays, see above).
+* If the JSON data originates from a journal file it may include the special addressing fields `__CURSOR`, `__REALTIME_TIMESTAMP`, `__MONOTONIC_TIMESTAMP`, which contain the cursor string of this entry as string, and the realtime/monotonic timestamps of this entry as formatted numeric string of usec since the respective epoch.
+
+Here's an example, illustrating all cases mentioned above. Consider this entry:
+
+```
+MESSAGE=Hello World
+_UDEV_DEVNODE=/dev/waldo
+_UDEV_DEVLINK=/dev/alias1
+_UDEV_DEVLINK=/dev/alias2
+BINARY=this is a binary value \a
+LARGE=this is a super large value (let's pretend at least, for the sake of this example)
+```
+
+This translates into the following JSON Object:
+```json
+{
+  "MESSAGE" : "Hello World",
+  "_UDEV_DEVNODE" : "/dev/waldo",
+  "_UDEV_DEVLINK" : [ "/dev/alias1", "/dev/alias2" ],
+  "BINARY" : [ 116, 104, 105, 115, 32, 105, 115, 32, 97, 32, 98, 105, 110, 97, 114, 121, 32, 118, 97, 108, 117, 101, 32, 7 ],
+  "LARGE" : null
+}
+```
diff --git a/docs/JOURNAL_FILE_FORMAT.md b/docs/JOURNAL_FILE_FORMAT.md
index 5446b55..2d0debd 100644
--- a/docs/JOURNAL_FILE_FORMAT.md
+++ b/docs/JOURNAL_FILE_FORMAT.md
@@ -2,13 +2,14 @@
 title: Journal File Format
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Journal File Format
 
 _Note that this document describes the binary on-disk format of journals only.
-For interfacing with web technologies there's the [Journal JSON Format](https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-json-format).
-For transfer of journal data across the network there's the [Journal Export Format](https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-export-format)._
+For interfacing with web technologies there's the [Journal JSON Format](JOURNAL_EXPORT_FORMATS.md#journal-json-format).
+For transfer of journal data across the network there's the [Journal Export Format](JOURNAL_EXPORT_FORMATS.md#journal-export-format)._
 
 The systemd journal stores log data in a binary format with several features:
 
@@ -44,9 +45,10 @@
 _Or, to put this in other words: this low-level document is probably not what
 you want to use as base of your project. You want our [C
 API](https://www.freedesktop.org/software/systemd/man/sd-journal.html) instead!
-And if you really don't want the C API, then you want the [Journal Export
-Format or Journal JSON Format](https://systemd.io/JOURNAL_EXPORT_FORMATS) instead!
-This document is primarily for your entertainment and education. Thank you!_
+And if you really don't want the C API, then you want the
+[Journal Export Format or Journal JSON Format](JOURNAL_EXPORT_FORMATS.md)
+instead! This document is primarily for your entertainment and education.
+Thank you!_
 
 This document assumes you have a basic understanding of the journal concepts,
 the properties of a journal entry and so on. If not, please go and read up,
@@ -69,7 +71,7 @@
 
 ## Basics
 
-* All offsets, sizes, time values, hashes (and most other numeric values) are 64bit unsigned integers in LE format.
+* All offsets, sizes, time values, hashes (and most other numeric values) are 32bit/64bit unsigned integers in LE format.
 * Offsets are always relative to the beginning of the file.
 * The 64bit hash function siphash24 is used for newer journal files. For older files [Jenkins lookup3](https://en.wikipedia.org/wiki/Jenkins_hash_function) is used, more specifically `jenkins_hashlittle2()` with the first 32bit integer it returns as higher 32bit part of the 64bit value, and the second one uses as lower 32bit part.
 * All structures are aligned to 64bit boundaries and padded to multiples of 64bit
@@ -175,6 +177,9 @@
         /* Added in 246 */
         le64_t data_hash_chain_depth;
         le64_t field_hash_chain_depth;
+        /* Added in 252 */
+        le32_t tail_entry_array_offset;                 \
+        le32_t tail_entry_array_n_entries;              \
 };
 ```
 
@@ -229,6 +234,8 @@
 Similar, **field_hash_chain_depth** is a counter of the deepest chain in the
 field hash table, minus one.
 
+**tail_entry_array_offset** and **tail_entry_array_n_entries** allow immediate
+access to the last entry array in the global entry array chain.
 
 ## Extensibility
 
@@ -257,6 +264,7 @@
         HEADER_INCOMPATIBLE_COMPRESSED_LZ4  = 1 << 1,
         HEADER_INCOMPATIBLE_KEYED_HASH      = 1 << 2,
         HEADER_INCOMPATIBLE_COMPRESSED_ZSTD = 1 << 3,
+        HEADER_INCOMPATIBLE_COMPACT         = 1 << 4,
 };
 
 enum {
@@ -274,6 +282,9 @@
 hash function the keyed siphash24 hash function is used for the two hash
 tables, see below.
 
+HEADER_INCOMPATIBLE_COMPACT indicates that the journal file uses the new binary
+format that uses less space on disk compared to the original format.
+
 HEADER_COMPATIBLE_SEALED indicates that the file includes TAG objects required
 for Forward Secure Sealing.
 
@@ -296,7 +307,7 @@
 STATE_OFFLINE it should immediately rotate the file and start a new one,
 without changing the file.
 
-After and before the state field is changed `fdatasync()` should be executed on
+After and before the state field is changed, `fdatasync()` should be executed on
 the file to ensure the dirty state hits disk.
 
 
@@ -391,7 +402,16 @@
         le64_t entry_offset; /* the first array entry we store inline */
         le64_t entry_array_offset;
         le64_t n_entries;
-        uint8_t payload[];
+        union {                                                         \
+                struct {                                                \
+                        uint8_t payload[] ;                             \
+                } regular;                                              \
+                struct {                                                \
+                        le32_t tail_entry_array_offset;                 \
+                        le32_t tail_entry_array_n_entries;              \
+                        uint8_t payload[];                              \
+                } compact;                                              \
+        };                                                              \
 };
 ```
 
@@ -424,6 +444,9 @@
 `ObjectHeader`, in which case the payload is compressed with the indicated
 compression algorithm.
 
+If the `HEADER_INCOMPATIBLE_COMPACT` flag is set, Two extra fields are stored to
+allow immediate access to the tail entry array in the DATA object's entry array
+chain.
 
 ## Field Objects
 
@@ -455,11 +478,6 @@
 ## Entry Objects
 
 ```
-_packed_ struct EntryItem {
-        le64_t object_offset;
-        le64_t hash;
-};
-
 _packed_ struct EntryObject {
         ObjectHeader object;
         le64_t seqnum;
@@ -467,7 +485,15 @@
         le64_t monotonic;
         sd_id128_t boot_id;
         le64_t xor_hash;
-        EntryItem items[];
+        union {                                 \
+                struct {                        \
+                        le64_t object_offset;   \
+                        le64_t hash;            \
+                } regular[];                    \
+                struct {                        \
+                        le32_t object_offset;   \
+                } compact[];                    \
+        } items;                                \
 };
 ```
 
@@ -493,6 +519,10 @@
 plus their respective hashes (which are calculated the same way as in the DATA
 objects, i.e. keyed by the file ID).
 
+If the `HEADER_INCOMPATIBLE_COMPACT` flag is set, DATA object offsets are stored
+as 32-bit integers instead of 64bit and the unused hash field per data object is
+not stored anymore.
+
 In the file ENTRY objects are written ordered monotonically by sequence
 number. For continuous parts of the file written during the same boot
 (i.e. with the same boot_id) the monotonic timestamp is monotonic too. Modulo
@@ -546,7 +576,10 @@
 _packed_ struct EntryArrayObject {
         ObjectHeader object;
         le64_t next_entry_array_offset;
-        le64_t items[];
+        union {
+                le64_t regular[];
+                le32_t compact[];
+        } items;
 };
 ```
 
@@ -554,6 +587,9 @@
 arrays are strictly sorted by offsets on disk, and hence by their timestamps
 and sequence numbers (with some restrictions, see above).
 
+If the `HEADER_INCOMPATIBLE_COMPACT` flag is set, offsets are stored as 32-bit
+integers instead of 64bit.
+
 Entry Arrays are chained up. If one entry array is full another one is
 allocated and the **next_entry_array_offset** field of the old one pointed to
 it. An Entry Array with **next_entry_array_offset** set to 0 is the last in the
diff --git a/docs/JOURNAL_NATIVE_PROTOCOL.md b/docs/JOURNAL_NATIVE_PROTOCOL.md
index fced459..77fb27f 100644
--- a/docs/JOURNAL_NATIVE_PROTOCOL.md
+++ b/docs/JOURNAL_NATIVE_PROTOCOL.md
@@ -2,6 +2,7 @@
 title: Native Journal Protocol
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Native Journal Protocol
@@ -16,7 +17,7 @@
 
 The latter is what this document is about: if you are developing a program and
 want to pass structured log data to `journald`, it's the Journal's native
-protocol what you want to use. The systemd project provides the
+protocol that you want to use. The systemd project provides the
 [`sd_journal_print(3)`](https://www.freedesktop.org/software/systemd/man/sd_journal_print.html)
 API that implements the client side of this protocol. This document explains
 what this interface does behind the scenes, in case you'd like to implement a
@@ -59,7 +60,7 @@
 or newline characters (or any other control characters or non-ASCII characters)
 and may not be empty.
 
-Serialization into the datagram payload or `memfd` is straight-forward: each
+Serialization into the datagram payload or `memfd` is straightforward: each
 key/value pair is serialized via one of two methods:
 
 * The first method inserts a `=` character between key and value, and suffixes
@@ -184,7 +185,7 @@
 
 If you are looking for alternative implementations of this protocol (besides
 systemd's own in `sd_journal_print()`), consider
-[GLib's](https://gitlab.gnome.org/GNOME/glib/-/blob/master/glib/gmessages.c) or
+[GLib's](https://gitlab.gnome.org/GNOME/glib/-/blob/main/glib/gmessages.c) or
 [`dbus-broker`'s](https://github.com/bus1/dbus-broker/blob/main/src/util/log.c).
 
 And that's already all there is to it.
diff --git a/docs/NETWORK_ONLINE.md b/docs/NETWORK_ONLINE.md
new file mode 100644
index 0000000..e97d8f4
--- /dev/null
+++ b/docs/NETWORK_ONLINE.md
@@ -0,0 +1,263 @@
+---
+title: Running Services After the Network Is Up
+category: Networking
+layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
+---
+
+# Network Configuration Synchronization Points
+
+systemd provides three target units related to network configuration:
+
+## Network pre-configuration: `network-pre.target`
+
+`network-pre.target` is used to order services before any network interfaces
+start to be configured. Its primary purpose is for usage with firewall services
+that want to establish a firewall *before* any network interface is up.
+
+`network-pre.target` is a passive unit: it cannot be started directly and it is
+not pulled in by the network management service, but instead a service that
+wants to run before it must pull it in. Network management services hence
+should set `After=network-pre.target`, but not `Wants=network-pre.target` or
+`Requires=network-pre.target`. Services that want to be run before the network
+is configured should use `Before=network-pre.target` and
+`Wants=network-pre.target`. This way, unless there's actually a service that
+needs to be ordered before the network is up, this target is not pulled in,
+avoiding an unnecessary synchronization point.
+
+## Network management services: `network.target`
+
+`network.target` indicates that the network management stack has been started.
+Ordering after it has little meaning during start-up: whether any network
+interfaces are already configured when it is reached is not defined.
+
+Its primary purpose is for ordering things properly at shutdown: since the
+shutdown ordering of units in systemd is the reverse of the startup ordering,
+any unit that has `After=network.target` can be sure that it is *stopped*
+before the network is shut down when the system is going down. This allows
+services to cleanly terminate connections before going down, instead of losing
+ongoing connections leaving the other side in an undefined state.
+
+Note that `network.target` is a passive unit: you cannot start it directly and
+it is not pulled in by any services that want to make use of the network.
+Instead, it is pulled in by the network management services
+themselves. Services using the network should hence simply place an
+`After=network.target` stanza in their unit files, without
+`Wants=network.target` or `Requires=network.target`.
+
+## Network connectivity has been estabilished: `network-online.target`
+
+`network-online.target` is a target that actively waits until the network is
+"up", where the definition of "up" is defined by the network management
+software. Usually it indicates a configured, routable IP address of some
+kind. Its primary purpose is to actively delay activation of services until the
+network has been set up.
+
+It is an active target, meaning that it may be pulled in by the services
+requiring the network to be up, but is not pulled in by the network management
+service itself. By default all remote mounts defined in `/etc/fstab` make use
+of this service, in order to make sure the network is up before attempts to
+connect to a network share are made. Note that normally, if no service requires
+it and if no remote mount point is configured, this target is not pulled into
+the boot, thus avoiding any delays during boot should the network not be
+available. It is strongly recommended not to make use of this target too
+liberally: for example network server software should generally not pull this
+in (since server software generally is happy to accept local connections even
+before any routable network interface is up). Its primary purpose is network
+client software that cannot operate without network.
+
+For more details about those targets, see the
+[systemd.special(7)](https://www.freedesktop.org/software/systemd/man/systemd.special.html)
+man page.
+
+## Compatibility with SysV init
+
+LSB defines a `$network` dependency for legacy init scripts. Whenever systemd
+encounters a `$network` dependency in LSB headers of init scripts it will
+translate this to `Wants=` and `After=` dependencies on
+`network-online.target`, staying relatively close to traditional LSB behaviour.
+
+# Discussion
+
+The meaning of `$network` is defined [only very
+unprecisely](http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/facilname.html)
+and people tend to have different ideas what it is supposed to mean. Here are a
+couple of ideas people came up with so far:
+
+* The network management software is up.
+* All "configured" network interfaces are up and an IP address has been assigned to each.
+* All discovered local hardware interfaces that have a link beat have an IP address assigned, independently whether there is actually any explicit local configuration for them.
+* The network has been set up precisely to the level that a DNS server is reachable.
+* Same, but some specific site-specific server is reachable.
+* Same, but "the Internet" is reachable.
+* All "configured" ethernet devices are up, but all "configured" PPP links which are supposed to also start at boot don't have to be yet.
+* A certain "profile" is enabled and some condition of the above holds. If another "profile" is enabled a different condition would have to be checked.
+* Based on the location of the system a different set of configuration should be up or checked for.
+* At least one global IPv4 address is configured.
+* At least one global IPv6 address is configured.
+* At least one global IPv4 or IPv6 address is configured.
+* And so on and so on.
+
+All these are valid approaches to the question "When is the network up?", but
+none of them would be useful to be good as generic default.
+
+Modern networking tends to be highly dynamic: machines are moved between
+networks, network configuration changes, hardware is added and removed, virtual
+networks are set up, reconfigured, and shut down again. Network connectivity is
+not unconditionally and continuously available, and a machine is connected to
+different networks at different times. This is particularly true for mobile
+hardware such as handsets, tablets, and laptops, but also for embedded and
+servers. Software that is written under the assumption that network
+connectivity is available continuously and never changes is hence not
+up-to-date with reality. Well-written software should be able to handle dynamic
+configuration changes. It should react to changing network configuration and
+make the best of it. If it cannot reach a server it must retry. If network
+configuration connectivity is lost it must not fail catastrophically. Reacting
+to local network configuration changes in daemon code is not particularly
+hard. In fact many well-known network-facing services running on Linux have
+been doing this for decades. A service written like this is robust, can be
+started at any time, and will always do the best of the circumstances it is
+running in.
+
+`$network` / `network-online.target` is a mechanism that is required only to
+deal with software that assumes continuous network is available (i.e. of the
+simple not-well-written kind). Which facet of it it requires is undefined. An
+IMAP server might just require a certain IP to be assigned so that it can
+listen on it. OTOH a network file system client might need DNS up, and the
+service to contact up, as well. What precisely is required is not obvious and
+can be different things depending on local configuration.
+
+A robust system boots up independently of external services. More specifically,
+if a network DHCP server does not react, this should not slow down boot on most
+setups, but only for those where network connectivity is strictly needed (for
+example, because the host actually boots from the network).
+
+# FAQ
+
+## How do I make sure that my service starts after the network is *really* online?
+
+That depends on your setup and the services you plan to run after it (see
+above). If you need to delay you service after network connectivity has been
+established, include
+
+```ini
+After=network-online.target
+Wants=network-online.target
+```
+
+in the `.service` file.
+
+This will delay boot until the network management software says the network is "up".
+For details, see the next question.
+
+## What does "up" actually mean?
+
+The services that are ordered before `network-online.target` define its
+meaning. *Usually* means that all configured network devices are up and have an
+IP address assigned, but details may vary. In particular, configuration may
+affect which interfaces are taken into account.
+
+`network-online.target` will time out after 90s. Enabling this might
+considerably delay your boot even if the timeout is not reached.
+
+The right "wait" service must be enabled:
+`NetworkManager-wait-online.service` if `NetworkManager` is used to configure
+the network, `systemd-networkd-wait-online.service` if `systemd-networkd` is
+used, etc. `systemd-networkd.service` has
+`Also=systemd-networkd-wait-online.service` in its `[Install]` section, so when
+`systemd-networkd.service` is enabled, `systemd-networkd-wait-online.service`
+will be enabled too, which means that `network-online.target` will include
+`systemd-networkd-wait-online.service` when and only when
+`systemd-networkd.service` is enabled.  `NetworkManager-wait-online.service` is
+set up similarly. This means that the "wait" services do not need to be enabled
+explicitly. They will be enabled automatically when the "main" service is
+enabled, though they will not be *used* unless something else pulls in
+`network-online.target`.
+
+To verify that the right service is enabled (usually only one should be):
+```console
+$ systemctl is-enabled NetworkManager-wait-online.service systemd-networkd-wait-online.service
+disabled
+enabled
+```
+
+## Should `network-online.target` be used?
+
+Please note that `network-online.target` means that the network connectivity
+*has been* reached, not that it is currently available. By the very nature and
+design of the network, connectivity may briefly or permanently disappear, so
+for reasonable user experience, services need to handle temporary lack of
+connectivity.
+
+If you are a developer, instead of wondering what to do about `network.target`,
+please just fix your program to be friendly to dynamically changing network
+configuration. That way you will make your users happy because things just
+start to work, and you will get fewer bug reports. You also make the boot
+faster by not delaying services until network connectivity has been
+established. This is particularly important for folks with slow address
+assignment replies from a DHCP server.
+
+Here are a couple of possible approaches:
+
+1. Watch rtnetlink and react to network configuration changes as they
+   happen. This is usually the nicest solution, but not always the easiest.
+2. If you write a server: listen on `[::]`, `[::1]`, `0.0.0.0`, and `127.0.0.1`
+   only. These pseudo-addresses are unconditionally available. If you always
+   bind to these addresses you will have code that doesn't have to react to
+   network changes, as all you listen on is catch-all and private addresses.
+3. If you write a server: if you want to listen on other, explicitly configured
+   addresses, consider using the `IP_FREEBIND` sockopt functionality of the
+   Linux kernel. This allows your code to bind to an address even if it is not
+   actually (yet or ever) configured locally. This also makes your code robust
+   towards network configuration changes. This is provided as `FreeBind=`
+   for systemd services, see
+   [systemd.socket(5)](https://www.freedesktop.org/software/systemd/man/systemd.socket.html).
+
+An exception to the above recommendations is services which require network
+connectivity, but do not delay system startup. An example may be a service
+which downloads package updates into a cache (to be used at some point in the
+future by the package management software). Such a service may even start
+during boot, and pull in and be ordered after `network-online.target`, but as
+long as it is not ordered before any unit that is part of the default target,
+it does not delay boot. It is usually easier to write such a service in a
+"simplistic" way, where it doesn't try to wait for the network connectivity to
+be (re-)established, but is instead started when the network has connectivity,
+and if the network goes away, it fails and relies on the system manager to
+restart it if appropriate.
+
+## Modyfing the meaning of `network-online.target`
+
+As described above, the meaning of this target is defined first by which
+implementing services are enabled (`NetworkManager-wait-online.service`,
+`systemd-networkd-wait-online.service`, …), and second by the configuration
+specific to those services.
+
+For example, `systemd-networkd-wait-online.service` will wait until all
+interfaces that are present and managed by
+[systemd-networkd.service(8)](https://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html).
+are fully configured or failed and at least one link is online; see
+[systemd-networkd-wait-online.service(8)](https://www.freedesktop.org/software/systemd/man/systemd-networkd-wait-online.service.html)
+for details. Those conditions are affected by the presence of configuration
+that matches various links, but also by settings like
+`Unmanaged=`, `RequiredForOnline=`, `RequiredFamilyForOnline=`; see
+[systemd.network(5)](https://www.freedesktop.org/software/systemd/man/systemd.network.html).
+
+It is also possible to plug in additional checks for network state. For
+example, to delay `network-online.target` until some a specific host is
+reachable (the name can be resolved over DNS and the appropriate route has been
+established), the following simple service could be used:
+
+```ini
+[Unit]
+DefaultDependencies=no
+After=nss-lookup.target
+Before=network-online.target
+Type=oneshot
+RemainAfterExit=yes
+
+[Service]
+ExecStart=sh -c 'while ! ping -c 1 example.com; do sleep 1; done'
+
+[Install]
+WantedBy=network-online.target
+```
diff --git a/docs/PASSWORD_AGENTS.md b/docs/PASSWORD_AGENTS.md
index 75b10da..29bd949 100644
--- a/docs/PASSWORD_AGENTS.md
+++ b/docs/PASSWORD_AGENTS.md
@@ -2,6 +2,7 @@
 title: Password Agents
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Password Agents
@@ -11,7 +12,7 @@
 * A Plymouth agent used for querying passwords during boot-up
 * A console agent used in similar situations if Plymouth is not available
 * A GNOME agent which can be run as part of the normal user session which pops up a notification message and icon which when clicked receives the passphrase from the user. This is useful and necessary in case an encrypted system hard-disk is plugged in when the machine is already up.
-* A [`wall(1)`](http://man7.org/linux/man-pages/man1/wall.1.html) agent which sends wall messages as soon as a password shall be entered.
+* A [`wall(1)`](https://man7.org/linux/man-pages/man1/wall.1.html) agent which sends wall messages as soon as a password shall be entered.
 * A simple tty agent which is built into "`systemctl start`" (and similar commands) and asks passwords to the user during manual startup of a service
 * A simple tty agent which can be run manually to respond to all queued passwords
 
@@ -33,7 +34,7 @@
 
 Again, it is essential that you stop showing the password box/notification/status icon if the `ask.xxx` file is removed or when `NotAfter=` elapses (if it is set `!= 0`)!
 
-It may happen that multiple password entries are pending at the same time. Your agent needs to be able to deal with that. Depending on your environment you may either choose to show all outstanding passwords at the same time or instead only one and as soon as the user replied to that one go on to the next one.
+It may happen that multiple password entries are pending at the same time. Your agent needs to be able to deal with that. Depending on your environment you may either choose to show all outstanding passwords at the same time or instead only one and as soon as the user has replied to that one go on to the next one.
 
 You may test this all with manually invoking the "`systemd-ask-password`" tool on the command line. Pass `--no-tty` to ensure the password is asked via the agent system. Note that only privileged users may use this tool (after all this is intended purely for system-level passwords).
 
diff --git a/docs/PORTABILITY_AND_STABILITY.md b/docs/PORTABILITY_AND_STABILITY.md
index 7ae2645..dfbca23 100644
--- a/docs/PORTABILITY_AND_STABILITY.md
+++ b/docs/PORTABILITY_AND_STABILITY.md
@@ -2,6 +2,7 @@
 title: Interface Portability and Stability
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Interface Portability and Stability Promise
@@ -79,14 +80,14 @@
 
 | API  | Type | Covered by Interface Stability Promise | Fully documented | Known External Consumers | Reimplementable Independently | Known Other Implementations | systemd Implementation portable to other OSes or non-systemd distributions |
 | ---  | ---- | ----------------------------------------------------------------------------------------- | ---------------- | ------------------------ | ----------------------------- | --------------------------- | -------------------------------------------------------------------------- |
-| [hostnamed](https://www.freedesktop.org/wiki/Software/systemd/hostnamed) | D-Bus | yes | yes | GNOME | yes | [Ubuntu](https://launchpad.net/ubuntu/+source/ubuntu-system-service), [Gentoo](http://www.gentoo.org/proj/en/desktop/gnome/openrc-settingsd.xml), [BSD](http://uglyman.kremlin.cc/gitweb/gitweb.cgi?p=systembsd.git;a=summary) | partially |
-| [localed](https://www.freedesktop.org/wiki/Software/systemd/localed) | D-Bus | yes | yes | GNOME | yes | [Ubuntu](https://launchpad.net/ubuntu/+source/ubuntu-system-service), [Gentoo](http://www.gentoo.org/proj/en/desktop/gnome/openrc-settingsd.xml), [BSD](http://uglyman.kremlin.cc/gitweb/gitweb.cgi?p=systembsd.git;a=summary) | partially |
-| [timedated](https://www.freedesktop.org/wiki/Software/systemd/timedated) | D-Bus | yes | yes | GNOME | yes | [Gentoo](http://www.gentoo.org/proj/en/desktop/gnome/openrc-settingsd.xml), [BSD](http://uglyman.kremlin.cc/gitweb/gitweb.cgi?p=systembsd.git;a=summary) | partially |
-| [initrd interface](https://systemd.io/INITRD_INTERFACE) | Environment, flag files | yes | yes | dracut, ArchLinux | yes | ArchLinux | no |
-| [Container interface](https://systemd.io/CONTAINER_INTERFACE) | Environment, Mounts | yes | yes | libvirt/LXC | yes | - | no |
-| [Boot Loader interface](https://systemd.io/BOOT_LOADER_INTERFACE) | EFI variables | yes | yes | gummiboot | yes | - | no |
-| [Service bus API](https://www.freedesktop.org/wiki/Software/systemd/dbus) | D-Bus | yes | yes | system-config-services | no | - | no |
-| [logind](https://www.freedesktop.org/wiki/Software/systemd/logind) | D-Bus | yes | yes | GNOME | no | - | no |
+| [hostnamed](https://www.freedesktop.org/software/systemd/man/org.freedesktop.hostname1.html) | D-Bus | yes | yes | GNOME | yes | [Ubuntu](https://launchpad.net/ubuntu/+source/ubuntu-system-service), [Gentoo](http://www.gentoo.org/proj/en/desktop/gnome/openrc-settingsd.xml), [BSD](http://uglyman.kremlin.cc/gitweb/gitweb.cgi?p=systembsd.git;a=summary) | partially |
+| [localed](https://www.freedesktop.org/software/systemd/man/org.freedesktop.locale1.html) | D-Bus | yes | yes | GNOME | yes | [Ubuntu](https://launchpad.net/ubuntu/+source/ubuntu-system-service), [Gentoo](http://www.gentoo.org/proj/en/desktop/gnome/openrc-settingsd.xml), [BSD](http://uglyman.kremlin.cc/gitweb/gitweb.cgi?p=systembsd.git;a=summary) | partially |
+| [timedated](https://www.freedesktop.org/software/systemd/man/org.freedesktop.timedate1.html) | D-Bus | yes | yes | GNOME | yes | [Gentoo](http://www.gentoo.org/proj/en/desktop/gnome/openrc-settingsd.xml), [BSD](http://uglyman.kremlin.cc/gitweb/gitweb.cgi?p=systembsd.git;a=summary) | partially |
+| [initrd interface](INITRD_INTERFACE.md) | Environment, flag files | yes | yes | dracut, ArchLinux | yes | ArchLinux | no |
+| [Container interface](CONTAINER_INTERFACE.md) | Environment, Mounts | yes | yes | libvirt/LXC | yes | - | no |
+| [Boot Loader interface](BOOT_LOADER_INTERFACE.md) | EFI variables | yes | yes | gummiboot | yes | - | no |
+| [Service bus API](https://www.freedesktop.org/software/systemd/man/org.freedesktop.systemd1.html) | D-Bus | yes | yes | system-config-services | no | - | no |
+| [logind](https://www.freedesktop.org/software/systemd/man/org.freedesktop.login1.html) | D-Bus | yes | yes | GNOME | no | - | no |
 | [sd-login.h API](https://www.freedesktop.org/software/systemd/man/sd-login.html) | C Library | yes | yes | GNOME, polkit, ... | no | - | no |
 | [sd-daemon.h API](https://www.freedesktop.org/software/systemd/man/sd-daemon.html) | C Library or Drop-in | yes | yes | numerous | yes | - | yes |
 | [sd-id128.h API](https://www.freedesktop.org/software/systemd/man/sd-id128.html) | C Library | yes | yes | - | yes | - | no |
@@ -94,14 +95,15 @@
 | [$XDG_RUNTIME_DIR](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) | Environment | yes | yes | glib, GNOME | yes | - | no |
 | [$LISTEN_FDS $LISTEN_PID FD Passing](https://www.freedesktop.org/software/systemd/man/sd_listen_fds.html) | Environment | yes | yes | numerous (via sd-daemon.h) | yes | - | no |
 | [$NOTIFY_SOCKET Daemon Notifications](https://www.freedesktop.org/software/systemd/man/sd_notify.html) | Environment | yes | yes | a few, including udev | yes | - | no |
-| [argv&#91;0&#93;&#91;0&#93;='@' Logic](https://systemd.io/ROOT_STORAGE_DAEMONS) | `/proc` marking | yes | yes | mdadm | yes | - | no |
+| [argv&#91;0&#93;&#91;0&#93;='@' Logic](ROOT_STORAGE_DAEMONS.md) | `/proc` marking | yes | yes | mdadm | yes | - | no |
 | [Unit file format](https://www.freedesktop.org/software/systemd/man/systemd.unit.html) | File format | yes | yes | numerous | no | - | no |
 | [Network](https://www.freedesktop.org/software/systemd/man/systemd.network.html) & [Netdev file format](https://www.freedesktop.org/software/systemd/man/systemd.netdev.html) | File format | yes | yes | no | no | - | no |
 | [Link file format](https://www.freedesktop.org/software/systemd/man/systemd.link.html) | File format | yes | yes | no | no | - | no |
-| [Journal File Format](https://systemd.io/JOURNAL_FILE_FORMAT) | File format | yes | yes | - | maybe | - | no |
-| [Journal Export Format](https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-export-format) | File format | yes | yes | - | yes | - | no |
+| [Journal File Format](JOURNAL_FILE_FORMAT.md) | File format | yes | yes | - | maybe | - | no |
+| [Journal Export Format](JOURNAL_EXPORT_FORMATS.md#journal-export-format) | File format | yes | yes | - | yes | - | no |
+| [Journal JSON Format](JOURNAL_EXPORT_FORMATS.md#journal-json-format) | File format | yes | yes | - | yes | - | no |
 | [Cooperation in cgroup tree](https://www.freedesktop.org/wiki/Software/systemd/PaxControlGroups) | Treaty | yes | yes | libvirt | yes | libvirt | no |
-| [Password Agents](https://systemd.io/PASSWORD_AGENTS) | Socket+Files | yes | yes | - | yes | - | no |
+| [Password Agents](PASSWORD_AGENTS.md) | Socket+Files | yes | yes | - | yes | - | no |
 | [udev multi-seat properties](https://www.freedesktop.org/software/systemd/man/sd-login.html) | udev Property | yes | yes | X11, gdm | no | - | no |
 | udev session switch ACL properties | udev Property | no | no | - | no | - | no |
 | [CLI of systemctl,...](https://www.freedesktop.org/software/systemd/man/systemctl.html) | CLI | yes | yes | numerous | no | - | no |
@@ -153,7 +155,7 @@
 `systemd-sysusers`.
 
 Many other programs support operation without the system manager except when
-the specific functionality requires such communication. For example
+the specific functionality requires such communication. For example,
 `journalctl` operates almost independently, but will query the boot id when
 `--boot` option is used; it also requires `systemd-journald` (and thus
 `systemd`) to be running for options like `--flush` and `--sync`.
diff --git a/docs/PORTABLE_SERVICES.md b/docs/PORTABLE_SERVICES.md
index ec4a503..b12e775 100644
--- a/docs/PORTABLE_SERVICES.md
+++ b/docs/PORTABLE_SERVICES.md
@@ -2,38 +2,35 @@
 title: Portable Services Introduction
 category: Concepts
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Portable Services Introduction
 
-This systemd version includes a preview of the "portable service"
-concept. "Portable Services" are supposed to be an incremental improvement over
-traditional system services, making two specific facets of container management
-available to system services more readily. Specifically:
+systemd (since version 239) supports a concept of "Portable Services".
+"Portable Services" are a delivery method for system services that uses
+two specific features of container management:
 
-1. The bundling of applications, i.e. packing up multiple services, their
-   binaries and all their dependencies in a single image, and running them
-   directly from it.
+1. Applications are bundled. I.e. multiple services, their binaries and all
+   their dependencies are packaged in an image, and are run directly from it.
 
 2. Stricter default security policies, i.e. sand-boxing of applications.
 
-The primary tool for interfacing with "portable services" is the new
-"portablectl" program. It's currently shipped in /usr/lib/systemd/portablectl
-(i.e. not in the `$PATH`), since it's not yet considered part of the officially
-supported systemd interfaces — it's a preview still after all.
+The primary tool for interacting with Portable Services is `portablectl`,
+and they are managed by the `systemd-portabled` service.
 
 Portable services don't bring anything inherently new to the table. All they do
-is put together known concepts in a slightly nicer way to cover a specific set
-of use-cases in a nicer way.
+is put together known concepts to cover a specific set of use-cases in a
+slightly nicer way.
 
 ## So, what *is* a "Portable Service"?
 
-A portable service is ultimately just an OS tree, either inside of a directory
-tree, or inside a raw disk image containing a Linux file system. This tree is
-called the "image". It can be "attached" or "detached" from the system. When
-"attached" specific systemd units from the image are made available on the host
-system, then behaving pretty much exactly like locally installed system
-services. When "detached" these units are removed again from the host, leaving
+A portable service is ultimately just an OS tree, either inside of a directory,
+or inside a raw disk image containing a Linux file system. This tree is called
+the "image". It can be "attached" or "detached" from the system. When
+"attached", specific systemd units from the image are made available on the
+host system, then behaving pretty much exactly like locally installed system
+services. When "detached", these units are removed again from the host, leaving
 no artifacts around (except maybe messages they might have logged).
 
 The OS tree/image can be created with any tool of your choice. For example, you
@@ -46,6 +43,9 @@
 [mkosi](https://github.com/systemd/mkosi), but many other existing tools will
 do too.
 
+Portable services may also be constructed from layers, similarly to container
+environments. See [Extension Images](#extension-images) below.
+
 If you so will, "Portable Services" are a nicer way to manage chroot()
 environments, with better security, tooling and behavior.
 
@@ -55,25 +55,25 @@
 systemd-nspawn/LXC-type OS containers, for Docker/rkt-like micro service
 containers, and even certain 'lightweight' VM runtimes.
 
-The "portable service" concept ultimately will not provide a fully isolated
-environment to the payload, like containers mostly intend to. Instead they are
-from the beginning more alike regular system services, can be controlled with
-the same tools, are exposed the same way in all infrastructure and so on. Their
-main difference is that they use a different root directory than the rest of the
-system. Hence, the intention is not to run code in a different, isolated world
-from the host — like most containers would do it — but to run it in the same
-world, but with stricter access controls on what the service can see and do.
+"Portable services" do not provide a fully isolated environment to the payload,
+like containers mostly intend to. Instead, they are more like regular system
+services, can be controlled with the same tools, are exposed the same way in
+all infrastructure, and so on. The main difference is that they use a different
+root directory than the rest of the system. Hence, the intent is not to run
+code in a different, isolated environment from the host — like most containers
+would — but to run it in the same environment, but with stricter access
+controls on what the service can see and do.
 
-As one point of differentiation: as programs run as "portable services" are
-pretty much regular system services, they won't run as PID 1 (like Docker would
-do it), but as normal processes. A corollary of that is that they aren't supposed
-to manage anything in their own environment (such as the network) as the
-execution environment is mostly shared with the rest of the system.
+One point of differentiation: since programs running as "portable services" are
+pretty much regular system services, they won't run as PID 1 (like they would
+under Docker), but as normal processes. A corollary of that is that they aren't
+supposed to manage anything in their own environment (such as the network) as
+the execution environment is mostly shared with the rest of the system.
 
 The primary focus use-case of "portable services" is to extend the host system
 with encapsulated extensions, but provide almost full integration with the rest
-of the system, though possibly restricted by effective security knobs. This
-focus includes system extensions otherwise sometimes called "super-privileged
+of the system, though possibly restricted by security knobs. This focus
+includes system extensions otherwise sometimes called "super-privileged
 containers".
 
 Note that portable services are only available for system services, not for
@@ -91,16 +91,15 @@
 
 This command does the following:
 
-1. It dissects the image, checks and validates the `/etc/os-release`
-   (or `/usr/lib/os-release`, see below)  data of the image, and looks for
-   all included unit files.
+1. It dissects the image, checks and validates the `os-release` file of the
+   image, and looks for all included unit files.
 
 2. It copies out all unit files with a suffix of `.service`, `.socket`,
-   `.target`, `.timer` and `.path`. whose name begins with the image's name
-   (with the .raw removed), truncated at the first underscore (if there is
-   one). This prefix name generated from the image name must be followed by a
-   ".", "-" or "@" character in the unit name. Or in other words, given the
-   image name of `foobar_0.7.23.raw` all unit files matching
+   `.target`, `.timer` and `.path`, whose name begins with the image's name
+   (with `.raw` removed), truncated at the first underscore if there is one.
+   This prefix name generated from the image name must be followed by a ".",
+   "-" or "@" character in the unit name. Or in other words, given the image
+   name of `foobar_0.7.23.raw` all unit files matching
    `foobar-*.{service|socket|target|timer|path}`,
    `foobar@.{service|socket|target|timer|path}` as well as
    `foobar.*.{service|socket|target|timer|path}` and
@@ -126,27 +125,32 @@
 
 4. For each such unit a "profile" drop-in is linked in. This "profile" drop-in
    generally contains security options that lock down the service. By default
-   the `default` profile is used, which provides a medium level of
-   security. There's also `trusted` which runs the service at the highest
-   privileges, i.e. host's root and everything. The `strict` profile comes with
-   the toughest security restrictions. Finally, `nonetwork` is like `default`
-   but without network access. Users may define their own profiles too (or
-   modify the existing ones)
+   the `default` profile is used, which provides a medium level of security.
+   There's also `trusted`, which runs the service with no restrictions, i.e. in
+   the host file system root and with full privileges. The `strict` profile
+   comes with the toughest security restrictions. Finally, `nonetwork` is like
+   `default` but without network access. Users may define their own profiles
+   too (or modify the existing ones).
 
 And that's already it.
 
 Note that the images need to stay around (and in the same location) as long as the
 portable service is attached. If an image is moved, the `RootImage=` line
-written to the unit drop-in would point to an non-existing place, and break the
-logic.
+written to the unit drop-in would point to an non-existent path, and break
+access to the image.
 
 The `portablectl detach` command executes the reverse operation: it looks for
-the drop-ins and the unit files associated with the image, and removes them
-again.
+the drop-ins and the unit files associated with the image, and removes them.
 
 Note that `portablectl attach` won't enable or start any of the units it copies
-out. This still has to take place in a second, separate step. (That said We
-might add options to do this automatically later on.).
+out by default, but `--enable` and `--now` parameter are available as shortcuts.
+The same is true for the opposite `detach` operation.
+
+The `portablectl reattach` command combines a `detach` with an `attach`. It is
+useful in case an image gets upgraded, as it allows performing a `restart`
+operation on the units instead of `stop` plus `start`, thus providing lower
+downtime and avoiding losing runtime state associated with the unit such as the
+file descriptor store.
 
 ## Requirements on Images
 
@@ -156,16 +160,16 @@
 `portablectl`.
 
 1. It must contain an executable that shall be invoked, along with all its
-   dependencies. If binary code, the code needs to be compiled for an
-   architecture compatible with the host.
+   dependencies. Any binary code needs to be compiled for an architecture
+   compatible with the host.
 
 2. The image must either be a plain sub-directory (or btrfs subvolume)
    containing the binaries and its dependencies in a classic Linux OS tree, or
    must be a raw disk image either containing only one, naked file system, or
    an image with a partition table understood by the Linux kernel with only a
    single partition defined, or alternatively, a GPT partition table with a set
-   of properly marked partitions following the [Discoverable Partitions
-   Specification](https://systemd.io/DISCOVERABLE_PARTITIONS).
+   of properly marked partitions following the
+   [Discoverable Partitions Specification](https://uapi-group.org/specifications/specs/discoverable_partitions_specification).
 
 3. The image must at least contain one matching unit file, with the right name
    prefix and suffix (see above). The unit file is searched in the usual paths,
@@ -192,9 +196,9 @@
    distribution's documentation.
 
 Note that images created by tools such as `debootstrap`, `dnf --installroot=`
-or `mkosi` generally qualify for all of the above in one way or another. If you
-wonder what the most minimal image would be that complies with the requirements
-above, it could consist of this:
+or `mkosi` generally satisfy all of the above. If you wonder what the most
+minimal image would be that complies with the requirements above, it could
+consist of this:
 
 ```
 /usr/bin/minimald                            # a statically compiled binary
@@ -218,9 +222,9 @@
 images minimal.
 
 If the image is writable, and some of the files or directories that are
-overmounted from the host do not exist yet they are automatically created. On
-read-only, immutable images (e.g. squashfs images) all files and directories to
-over-mount must exist already.
+overmounted from the host do not exist yet they will be automatically created.
+On read-only, immutable images (e.g. `erofs` or `squashfs` images) all files
+and directories to over-mount must exist already.
 
 Note that as no new image format or metadata is defined, it's very
 straightforward to define images than can be made use of in a number of
@@ -239,14 +243,59 @@
 4. Can be booted directly on bare-metal systems.
 
 Of course, to facilitate 2, 3 and 4 you need to include an init system in the
-image. To facility 3 and 4 you also need to include a boot loader in the
-image. As mentioned `mkosi -b` takes care of all of that for you, but any other
-image generator should work too.
+image. To facilitate 3 and 4 you also need to include a boot loader in the
+image. As mentioned, `mkosi -b` takes care of all of that for you, but any
+other image generator should work too.
+
+The
+[os-release(5)](https://www.freedesktop.org/software/systemd/man/os-release.html)
+file may optionally be extended with a `PORTABLE_PREFIXES=` field listing all
+supported portable service prefixes for the image (see above). This is useful
+for informational purposes (as it allows recognizing portable service images
+from their contents as such), but is also useful to protect the image from
+being used under a wrong name and prefix. This is particularly relevant if the
+images are cryptographically authenticated (via Verity or a similar mechanism)
+as this way the (not necessarily authenticated) image file name can be
+validated against the (authenticated) image contents. If the field is not
+specified the image will work fine, but is not necessarily recognizable as
+portable service image, and any set of units included in the image may be
+attached, there are no restrictions enforced.
+
+## Extension Images
+
+Portable services can be delivered as one or multiple images that extend the base
+image, and are combined with OverlayFS at runtime, when they are attached. This
+enables a workflow that splits the base 'runtime' from the daemon, so that multiple
+portable services can share the same 'runtime' image (libraries, tools) without
+having to include everything each time, with the layering happening only at runtime.
+The `--extension` parameter of `portablectl` can be used to specify as many upper
+layers as desired. On top of the requirements listed in the previous section, the
+following must be also be observed:
+
+1. The base/OS image must contain an `os-release file`, either in `/etc/os-release`
+   or `/usr/lib/os-release`, in the standard format.
+
+2. The upper extension images must contain an extension-release file in
+   `/usr/lib/extension-release.d/`, with an `ID=` and `SYSEXT_LEVEL=`/`VERSION_ID=`
+   matching the base image.
+
+3. The base/OS image does not need to have any unit files.
+
+4. The upper extension images must contain at least one matching unit file
+   each, with the right name prefix and suffix (see above).
+
+5. As with the base/OS image, each upper extension image must be a plain
+   sub-directory, btrfs subvolume, or a raw disk image.
+
+```
+# portablectl attach --extension foobar_0.7.23.raw debian-runtime_11.1.raw foobar
+# portablectl attach --extension barbaz_7.0.23/ debian-runtime_11.1.raw barbaz
+```
 
 ## Execution Environment
 
 Note that the code in portable service images is run exactly like regular
-services. Hence there's no new execution environment to consider. Oh, unlike
+services. Hence there's no new execution environment to consider. And, unlike
 Docker would do it, as these are regular system services they aren't run as PID
 1 either, but with regular PID values.
 
@@ -254,7 +303,7 @@
 
 If services shipped with this mechanism shall be able to access host resources
 (such as files or AF_UNIX sockets for IPC), use the normal `BindPaths=` and
-`BindReadOnlyPaths=` settings in unit files to mount them in. In fact the
+`BindReadOnlyPaths=` settings in unit files to mount them in. In fact, the
 `default` profile mentioned above makes use of this to ensure
 `/etc/resolv.conf`, the D-Bus system bus socket or write access to the logging
 subsystem are available to the service.
@@ -263,7 +312,7 @@
 
 Sometimes it makes sense to instantiate the same set of services multiple
 times. The portable service concept does not introduce a new logic for this. It
-is recommended to use the regular unit templating of systemd for this, i.e. to
+is recommended to use the regular systemd unit templating for this, i.e. to
 include template units such as `foobar@.service`, so that instantiation is as
 simple as:
 
@@ -280,8 +329,15 @@
 ## Immutable images with local data
 
 It's a good idea to keep portable service images read-only during normal
-operation. In fact all but the `trusted` profile will default to this kind of
+operation. In fact, all but the `trusted` profile will default to this kind of
 behaviour, by setting the `ProtectSystem=strict` option. In this case writable
 service data may be placed on the host file system. Use `StateDirectory=` in
 the unit files to enable such behaviour and add a local data directory to the
 services copied onto the host.
+
+## Links
+
+[`portablectl(1)`](https://www.freedesktop.org/software/systemd/man/portablectl.html)<br>
+[`systemd-portabled.service(8)`](https://www.freedesktop.org/software/systemd/man/systemd-portabled.service.html)<br>
+[Walkthrough for Portable Services](https://0pointer.net/blog/walkthrough-for-portable-services.html)<br>
+[Repo with examples](https://github.com/systemd/portable-walkthrough)
diff --git a/docs/PORTING_TO_NEW_ARCHITECTURES.md b/docs/PORTING_TO_NEW_ARCHITECTURES.md
new file mode 100644
index 0000000..a4dc6c2
--- /dev/null
+++ b/docs/PORTING_TO_NEW_ARCHITECTURES.md
@@ -0,0 +1,58 @@
+---
+title: Porting to New Architectures
+category: Contributing
+layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
+---
+
+# Porting systemd to New Architectures
+
+Here's a brief checklist of things to implement when porting systemd to a new
+architecture.
+
+1. Patch
+   [src/basic/architecture.h](https://github.com/systemd/systemd/blob/main/src/basic/architecture.h)
+   and
+   [src/basic/architecture.c](https://github.com/systemd/systemd/blob/main/src/basic/architecture.c)
+   to make your architecture known to systemd. Besides an `ARCHITECTURE_XYZ`
+   enumeration entry you need to provide an implementation of
+   `native_architecture()` and `uname_architecture()`.
+
+2. Patch
+   [src/shared/gpt.h](https://github.com/systemd/systemd/blob/main/src/shared/gpt.h)
+   and
+   [src/shared/gpt.c](https://github.com/systemd/systemd/blob/main/src/shared/gpt.c)
+   and define a new set of GPT partition type UUIDs for the root file system,
+   `/usr/` file system, and the matching Verity and Verity signature
+   partitions. Use `systemd-id128 new -p` to generate new suitable UUIDs you
+   can use for this. Make sure to register your new types in the various
+   functions in `gpt.c`. Also make sure to update the tables in
+   [Discoverable Partitions Specification](https://uapi-group.org/specifications/specs/discoverable_partitions_specification)
+   and `man/systemd-gpt-auto-generator.xml` accordingly.
+
+3. If your architecture supports UEFI, make sure to update the `efi_arch`
+   variable logic in `meson.build` to be set to the right architecture string
+   as defined by the UEFI specification. (This ensures that `systemd-boot` will
+   be built as the appropriately named `BOOT<arch>.EFI` binary.) Also, if your
+   architecture uses a special boot protocol for the Linux kernel, make sure to
+   implement it in `src/boot/efi/linux*.c`, so that the `systemd-stub` EFI stub
+   can work.
+
+4. Make sure to register the right system call numbers for your architecture in
+   `src/basic/missing_syscall_def.h`. systemd uses various system calls the
+   Linux kernel provides that are currently not wrapped by glibc (or are only
+   in very new glibc), and we need to know the right numbers for them. It might
+   also be necessary to tweak `src/basic/raw-clone.h`.
+
+5. Make sure the code in `src/shared/seccomp-util.c` properly understands the
+   local architecture and its system call quirks.
+
+6. If your architecture uses a `/lib64/` library directory, then make sure that
+   the `BaseFilesystem` table in `src/shared/base-filesystem.c` has an entry
+   for it so that it can be set up automatically if missing. This is useful to
+   support booting into OS trees that have an empty root directory with only
+   `/usr/` mounted in.
+
+7. If your architecture supports VM virtualization and provides CPU opcodes
+   similar to x86' CPUID, consider adding native support for detecting VMs this
+   way to `src/basic/virt.c`.
diff --git a/docs/PREDICTABLE_INTERFACE_NAMES.md b/docs/PREDICTABLE_INTERFACE_NAMES.md
index db1941c..9d79f8f 100644
--- a/docs/PREDICTABLE_INTERFACE_NAMES.md
+++ b/docs/PREDICTABLE_INTERFACE_NAMES.md
@@ -1,7 +1,8 @@
 ---
 title: Predictable Network Interface Names
-category: Concepts
+category: Networking
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Predictable Network Interface Names
diff --git a/docs/RANDOM_SEEDS.md b/docs/RANDOM_SEEDS.md
index da3fe40..8c9b7ee 100644
--- a/docs/RANDOM_SEEDS.md
+++ b/docs/RANDOM_SEEDS.md
@@ -2,6 +2,7 @@
 title: Random Seeds
 category: Concepts
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Random Seeds
@@ -24,24 +25,24 @@
 The Linux kernel provides three relevant userspace APIs to request random data
 from the kernel's entropy pool:
 
-* The [`getrandom()`](http://man7.org/linux/man-pages/man2/getrandom.2.html)
-  system call with its `flags` parameter set to 0. If invoked the calling
+* The [`getrandom()`](https://man7.org/linux/man-pages/man2/getrandom.2.html)
+  system call with its `flags` parameter set to 0. If invoked, the calling
   program will synchronously block until the random pool is fully initialized
   and the requested bytes can be provided.
 
 * The `getrandom()` system call with its `flags` parameter set to
-  `GRND_NONBLOCK`. If invoked the request for random bytes will fail if the
+  `GRND_NONBLOCK`. If invoked, the request for random bytes will fail if the
   pool is not initialized yet.
 
 * Reading from the
-  [`/dev/urandom`](http://man7.org/linux/man-pages/man4/urandom.4.html)
+  [`/dev/urandom`](https://man7.org/linux/man-pages/man4/urandom.4.html)
   pseudo-device will always return random bytes immediately, even if the pool
   is not initialized. The provided random bytes will be of low quality in this
-  case however. Moreover the kernel will log about all programs using this
+  case however. Moreover, the kernel will log about all programs using this
   interface in this state, and which thus potentially rely on an uninitialized
   entropy pool.
 
-(Strictly speaking there are more APIs, for example `/dev/random`, but these
+(Strictly speaking, there are more APIs, for example `/dev/random`, but these
 should not be used by almost any application and hence aren't mentioned here.)
 
 Note that the time it takes to initialize the random pool may differ between
@@ -101,12 +102,12 @@
 message (see above).
 
 Various other components run during early boot that require random bytes. For
-example, initial RAM disks nowadays communicate with encrypted networks or
-access encrypted storage which might need random numbers. systemd itself
-requires random numbers as well, including for the following uses:
+example, initrds nowadays communicate with encrypted networks or access
+encrypted storage which might need random numbers. systemd itself requires
+random numbers as well, including for the following uses:
 
 * systemd assigns 'invocation' UUIDs to all services it invokes that uniquely
-  identify each invocation. This is useful retain a global handle on a specific
+  identify each invocation. This is useful to retain a global handle on a specific
   service invocation and relate it to other data. For example, log data
   collected by the journal usually includes the invocation UUID and thus the
   runtime context the service manager maintains can be neatly matched up with
@@ -143,33 +144,11 @@
 ## Keeping `systemd'`s Demand on the Kernel Entropy Pool Minimal
 
 Since most of systemd's own use of random numbers do not require
-cryptographic-grade RNGs, it tries to avoid reading entropy from the kernel
-entropy pool if possible. If it succeeds this has the benefit that there's no
-need to delay the early boot process until entropy is available, and noisy
-kernel log messages about early reading from `/dev/urandom` are avoided
-too. Specifically:
-
-1. When generating [Type 4
-   UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_\(random\)),
-   systemd tries to use Intel's and AMD's RDRAND CPU opcode directly, if
-   available. While some doubt the quality and trustworthiness of the entropy
-   provided by these opcodes, they should be good enough for generating UUIDs,
-   if not key material (though, as mentioned, today's big distributions opted
-   to trust it for that too, now, see above — but we are not going to make that
-   decision for you, and for anything key material related will only use the
-   kernel's entropy pool). If RDRAND is not available or doesn't work, it will
-   use synchronous `getrandom()` as fallback, and `/dev/urandom` on old kernels
-   where that system call doesn't exist yet. This means on non-Intel/AMD
-   systems UUID generation will block on kernel entropy initialization.
-
-2. For seeding hash tables, and all the other similar purposes systemd first
-   tries RDRAND, and if that's not available will try to use asynchronous
-   `getrandom()` (if the kernel doesn't support this system call,
-   `/dev/urandom` is used). This may fail too in case the pool is not
-   initialized yet, in which case it will fall back to glibc's internal rand()
-   calls, i.e. weak pseudo-random numbers. This should make sure we use good
-   random bytes if we can, but neither delay boot nor trigger noisy kernel log
-   messages during early boot for these use-cases.
+cryptographic-grade RNGs, it tries to avoid blocking reads to the kernel's RNG,
+opting instead for using `getrandom(GRND_INSECURE)`. After the pool is
+initialized, this is identical to `getrandom(0)`, returning cryptographically
+secure random numbers, but before it's initialized it has the nice effect of
+not blocking system boot.
 
 ## `systemd`'s Support for Filling the Kernel Entropy Pool
 
@@ -195,9 +174,9 @@
    be enabled by setting the `$SYSTEMD_RANDOM_SEED_CREDIT` environment variable
    for the service to `1` (or even `force`, see man page). Note however, that
    this service typically runs relatively late during early boot: long after
-   the initial RAM disk (`initrd`) completed, and after the `/var/` file system
-   became writable. This is usually too late for many applications, it is hence
-   not advised to rely exclusively on this functionality to seed the kernel's
+   the initrd completed, and after the `/var/` file system became
+   writable. This is usually too late for many applications, it is hence not
+   advised to rely exclusively on this functionality to seed the kernel's
    entropy pool. Also note that this service synchronously waits until the
    kernel's entropy pool is initialized before completing start-up. It may thus
    be used by other services as synchronization point to order against, if they
@@ -218,45 +197,41 @@
    generate sufficient data), to generate a new random seed file to store in
    the ESP as well as a random seed to pass to the OS kernel. The new random
    seed file for the ESP is then written to the ESP, ensuring this is completed
-   before the OS is invoked. Very early during initialization PID 1 will read
-   the random seed provided in the EFI variable and credit it fully to the
-   kernel's entropy pool.
+   before the OS is invoked.
 
-   This mechanism is able to safely provide an initialized entropy pool already
-   in the `initrd` and guarantees that different seeds are passed from the boot
-   loader to the OS on every boot (in a way that does not allow regeneration of
-   an old seed file from a new seed file). Moreover, when an OS image is
-   replicated between multiple images and the random seed is not reset, this
-   will still result in different random seeds being passed to the OS, as the
-   per-machine 'system token' is specific to the physical host, and not
-   included in OS disk images. If the 'system token' is properly initialized
-   and kept sufficiently secret it should not be possible to regenerate the
-   entropy pool of different machines, even if this seed is the only source of
-   entropy.
+   The kernel then reads the random seed that the boot loader passes to it, via
+   the EFI configuration table entry, `LINUX_EFI_RANDOM_SEED_TABLE_GUID`
+   (1ce1e5bc-7ceb-42f2-81e5-8aadf180f57b), which is allocated with pool memory
+   of type `EfiACPIReclaimMemory`. Its contents have the form:
+   ```
+   struct linux_efi_random_seed {
+       u32     size; // of the 'seed' array in bytes
+       u8      seed[];
+   };
+   ```
+   The size field is generally set to 32 bytes, and the seed field includes a
+   hashed representation of any prior seed in `LINUX_EFI_RANDOM_SEED_TABLE_GUID`
+   together with the new seed.
+
+   This mechanism is able to safely provide an initialized entropy pool before
+   userspace even starts and guarantees that different seeds are passed from
+   the boot loader to the OS on every boot (in a way that does not allow
+   regeneration of an old seed file from a new seed file). Moreover, when an OS
+   image is replicated between multiple images and the random seed is not
+   reset, this will still result in different random seeds being passed to the
+   OS, as the per-machine 'system token' is specific to the physical host, and
+   not included in OS disk images. If the 'system token' is properly
+   initialized and kept sufficiently secret it should not be possible to
+   regenerate the entropy pool of different machines, even if this seed is the
+   only source of entropy.
 
    Note that the writes to the ESP needed to maintain the random seed should be
-   minimal. The size of the random seed file is directly derived from the Linux
-   kernel's entropy pool size, which defaults to 512 bytes. This means updating
-   the random seed in the ESP should be doable safely with a single sector
-   write (since hard-disk sectors typically happen to be 512 bytes long, too),
-   which should be safe even with FAT file system drivers built into
+   minimal. Because the size of the random seed file is generally set to 32 bytes,
+   updating the random seed in the ESP should be doable safely with a single
+   sector write (since hard-disk sectors typically happen to be 512 bytes long,
+   too), which should be safe even with FAT file system drivers built into
    low-quality EFI firmwares.
 
-   As a special restriction: in virtualized environments PID 1 will refrain
-   from using this mechanism, for safety reasons. This is because on VM
-   environments the EFI variable space and the disk space is generally not
-   maintained physically separate (for example, `qemu` in EFI mode stores the
-   variables in the ESP itself). The robustness towards sloppy OS image
-   generation is the main purpose of maintaining the 'system token' however,
-   and if the EFI variable storage is not kept physically separate from the OS
-   image there's no point in it. That said, OS builders that know that they are
-   not going to replicate the built image on multiple systems may opt to turn
-   off the 'system token' concept by setting `random-seed-mode always` in the
-   ESP's
-   [`/loader/loader.conf`](https://www.freedesktop.org/software/systemd/man/loader.conf.html)
-   file. If done, `systemd-boot` will use the random seed file even if no
-   system token is found in EFI variables.
-
 4. A kernel command line option `systemd.random_seed=` may be used to pass in a
    base64 encoded seed to initialize the kernel's entropy pool from during
    early service manager initialization. This option is only safe in testing
@@ -279,10 +254,8 @@
    hosting provider if they don't. For VMs used in testing environments,
    `systemd.random_seed=` may be used as an alternative to a virtualized RNG.
 
-3. On Intel/AMD systems systemd's own reliance on the kernel entropy pool is
-   minimal (as RDRAND is used on those for UUID generation). This only works if
-   the CPU has RDRAND of course, which most physical CPUs do (but I hear many
-   virtualized CPUs do not. Pity.)
+3. In general, systemd's own reliance on the kernel entropy pool is minimal
+   (due to the use of `GRND_INSECURE`).
 
 4. In all other cases, `systemd-random-seed.service` will help a bit, but — as
    mentioned — is too late to help with early boot.
@@ -317,7 +290,7 @@
    do use it in many cases, but not in all. Please read the above again!
 
 2. *Why don't you use
-   [getentropy()](http://man7.org/linux/man-pages/man3/getentropy.3.html)? That's
+   [getentropy()](https://man7.org/linux/man-pages/man3/getentropy.3.html)? That's
    all you need!*
 
    Same story. That call is just a different name for `getrandom()` with
@@ -326,7 +299,7 @@
    are trying to address here.
 
 3. *Why don't you generate your UUIDs with
-   [`uuidd`](http://man7.org/linux/man-pages/man8/uuidd.8.html)? That's all you
+   [`uuidd`](https://man7.org/linux/man-pages/man8/uuidd.8.html)? That's all you
    need!*
 
    First of all, that's a system service, i.e. something that runs as "payload"
@@ -410,8 +383,8 @@
     [systemd-boot(7)](https://www.freedesktop.org/software/systemd/man/systemd-boot.html)
     for an introduction why. That said, any boot loader can re-implement the
     logic described above, and can pass a random seed that systemd as PID 1
-    will then upload into the kernel's entropy pool. For details see the [Boot
-    Loader Interface](https://systemd.io/BOOT_LOADER_INTERFACE) documentation.
+    will then upload into the kernel's entropy pool. For details see the
+    [Boot Loader Interface](BOOT_LOADER_INTERFACE.md) documentation.
 
 11. *Why not pass the boot loader random seed via kernel command line instead
     of as EFI variable?*
diff --git a/docs/RELEASE.md b/docs/RELEASE.md
index cafe766..0d1b2d7 100644
--- a/docs/RELEASE.md
+++ b/docs/RELEASE.md
@@ -2,22 +2,25 @@
 title: Steps to a Successful Release
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Steps to a Successful Release
 
 1. Add all items to NEWS
-2. Update the contributors list in NEWS (`meson compile -C build git-contrib`)
+2. Update the contributors list in NEWS (`ninja -C build git-contrib`)
 3. Update the time and place in NEWS
-4. Update hwb (`meson compile -C build update-hwdb update-hwdb-autosuspend`)
-5. [RC1] Update version and library numbers in `meson.build`
-6. Check dbus docs with `meson compile -C build update-dbus-docs`
-7. Tag the release: `version=vXXX-rcY && git tag -s "${version}" -m "systemd ${version}"`
-8. Do `meson compile -C build`
-9. Make sure that the version string and package string match: `build/systemctl --version`
-10. Upload the documentation: `meson compile -C build doc-sync`
-11. [FINAL] Close the github milestone and open a new one (https://github.com/systemd/systemd/milestones)
-12. "Draft" a new release on github (https://github.com/systemd/systemd/releases/new), mark "This is a pre-release" if appropriate.
-13. Check that announcement to systemd-devel, with a copy&paste from NEWS, was sent. This should happen automatically.
-14. Update IRC topic (`/msg chanserv TOPIC #systemd Version NNN released`)
-15. [FINAL] Push commits to stable, create an empty -stable branch: `git push systemd-stable origin/master:master origin/master:refs/heads/${version}-stable`, and change the default branch to latest release (https://github.com/systemd/systemd-stable/settings/branches).
+4. Update hwdb (`ninja -C build update-hwdb`, `ninja -C build update-hwdb-autosuspend`, commit separately).
+5. Update syscall numbers (`ninja -C build update-syscall-tables update-syscall-header`).
+6. [RC1] Update version and library numbers in `meson.build`
+7. Check dbus docs with `ninja -C build update-dbus-docs`
+8. Update translation strings (`cd build`, `meson compile systemd-pot`, `meson compile systemd-update-po`) - drop the header comments from `systemd.pot` + re-add SPDX before committing. If the only change in a file is the 'POT-Creation-Date' field, then ignore that file.
+9. Tag the release: `version=vXXX-rcY && git tag -s "${version}" -m "systemd ${version}"`
+10. Do `ninja -C build`
+11. Make sure that the version string and package string match: `build/systemctl --version`
+12. Upload the documentation: `ninja -C build doc-sync`
+13. [FINAL] Close the github milestone and open a new one (https://github.com/systemd/systemd/milestones)
+14. "Draft" a new release on github (https://github.com/systemd/systemd/releases/new), mark "This is a pre-release" if appropriate.
+15. Check that announcement to systemd-devel, with a copy&paste from NEWS, was sent. This should happen automatically.
+16. Update IRC topic (`/msg chanserv TOPIC #systemd Version NNN released`)
+17. [FINAL] Push commits to stable, create an empty -stable branch: `git push systemd-stable --atomic origin/main:main origin/main:refs/heads/${version}-stable`, and change the default branch to latest release (https://github.com/systemd/systemd-stable/settings/branches).
diff --git a/docs/RESOLVED-VPNS.md b/docs/RESOLVED-VPNS.md
index 1010bed..97c1125 100644
--- a/docs/RESOLVED-VPNS.md
+++ b/docs/RESOLVED-VPNS.md
@@ -2,6 +2,7 @@
 title: systemd-resolved and VPNs
 category: Networking
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # `systemd-resolved.service` and VPNs
@@ -65,7 +66,7 @@
    differentiate them. i.e. `~foo.com` is a configured routing domain, while
    `foo.com` would be a configured search domain.
 
-   One routing domain is particular interesting: `~.` — the catch-all routing
+   One routing domain is particularly interesting: `~.` — the catch-all routing
    domain. (The *dot* domain `.` is how DNS denotes the "root" domain, i.e. the
    parent domain of all domains, but itself.) When used on an interface any DNS
    traffic is preferably routed to its DNS servers. (A search domain – i.e. `.`
@@ -111,7 +112,7 @@
 `foo.corp.company.example`, but the latter interface wins, since the match is
 for four labels, while the other is for zero labels.
 
-# Putting it Together
+## Putting it Together
 
 Let's discuss how the three DNS routing concepts above are best used for a
 reasonably complex scenario consisting of:
@@ -158,7 +159,7 @@
 traffic again, and `company0` will still get the company's internal domain and
 IP subnet traffic and nothing else. Everything hence works as intended.
 
-# How to Implement this in Your VPN Software
+## How to Implement this in Your VPN Software
 
 Most likely you want to expose a boolean in some way that declares whether a
 specific VPN is of the *corporate* or the *privacy* kind:
@@ -176,7 +177,7 @@
 traditional, i.e. with any search domains as acquired, do not set `~.` though,
 and do not disable `default-route`.)
 
-# The APIs
+## The APIs
 
 Now we determined how we want to configure things, but how do you actually get
 the configuration to `systemd-resolved.service`? There are three relevant
@@ -221,7 +222,7 @@
    propagate the `default-route` boolean, nor can be used to configure the
    `~….in-addr.arpa` or `~.ip6.arpa` routing domains.
 
-# Ordering
+## Ordering
 
 When configuring per-interface DNS configuration settings it is wise to
 configure everything *before* actually upping the interface. Once the interface
@@ -234,7 +235,7 @@
 former will result in DNS traffic possibly being generated, in a non-desirable
 way given that the routing information is not set yet.
 
-# Downgrading Search Domains to Routing Domains
+## Downgrading Search Domains to Routing Domains
 
 Many VPN implementations provide a way how VPN servers can inform VPN clients
 about search domains to use. In some cases it might make sense to install those
diff --git a/docs/ROOT_STORAGE_DAEMONS.md b/docs/ROOT_STORAGE_DAEMONS.md
index 08af009..2d17f3f 100644
--- a/docs/ROOT_STORAGE_DAEMONS.md
+++ b/docs/ROOT_STORAGE_DAEMONS.md
@@ -2,6 +2,7 @@
 title: Storage Daemons for the Root File System
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # systemd and Storage Daemons for the Root File System
@@ -21,16 +22,16 @@
 ## A Bit of Background
 
 When complex storage technologies are used as backing for the root file system
-this needs to be set up by the initial RAM file system (initrd), i.e. on Fedora
-by Dracut. In newer systemd versions tear-down of the root file system backing
-is also done by the initrd: after terminating all remaining running processes
-and unmounting all file systems it can (which means excluding the root fs)
-systemd will jump back into the initrd code allowing it to unmount the final
-file systems (and its storage backing) that could not be unmounted as long as
-the OS was still running from the main root file system. The initrd' job is to
-detach/unmount the root fs, i.e. inverting the exact commands it used to set
-them up in the first place. This is not only cleaner, but also allows for the
-first time arbitrary complex stacks of storage technology.
+this needs to be set up by the initrd, i.e. on Fedora by Dracut. In newer
+systemd versions tear-down of the root file system backing is also done by the
+initrd: after terminating all remaining running processes and unmounting all
+file systems it can (which means excluding the root fs) systemd will jump back
+into the initrd code allowing it to unmount the final file systems (and its
+storage backing) that could not be unmounted as long as the OS was still
+running from the main root file system. The initrd' job is to detach/unmount
+the root fs, i.e. inverting the exact commands it used to set them up in the
+first place. This is not only cleaner, but also allows for the first time
+arbitrary complex stacks of storage technology.
 
 Previous attempts to handle root file system setups with complex storage as
 backing usually tried to maintain the root storage with program code stored on
@@ -107,10 +108,9 @@
 
 The recommended way to distinguish between run-from-initrd and run-from-rootfs
 for a daemon is to check for `/etc/initrd-release` (which exists on all modern
-initrd implementations, see the [initrd
-Interface](https://systemd.io/INITRD_INTERFACE) for details) which when exists
-results in `argv[0][0]` being set to `@`, and otherwise doesn't. Something like
-this:
+initrd implementations, see the [initrd Interface](INITRD_INTERFACE.md) for
+details) which when exists results in `argv[0][0]` being set to `@`, and
+otherwise doesn't. Something like this:
 
 ```c
 #include <unistd.h>
@@ -190,4 +190,4 @@
   program consult this blog story: [Socket
   Activation](http://0pointer.de/blog/projects/socket-activation.html)
 
-* Consider having a look at the [initrd Interface of systemd](https://systemd.io/INITRD_INTERFACE).
+* Consider having a look at the [initrd Interface of systemd](INITRD_INTERFACE.md).
diff --git a/docs/SECURITY.md b/docs/SECURITY.md
index bd2915b..a44b90d 100644
--- a/docs/SECURITY.md
+++ b/docs/SECURITY.md
@@ -2,6 +2,7 @@
 title: Reporting of Security Vulnerabilities
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Reporting of Security Vulnerabilities
diff --git a/docs/TEMPORARY_DIRECTORIES.md b/docs/TEMPORARY_DIRECTORIES.md
index c0f945c..4e815ed 100644
--- a/docs/TEMPORARY_DIRECTORIES.md
+++ b/docs/TEMPORARY_DIRECTORIES.md
@@ -2,6 +2,7 @@
 title: Using /tmp/ and /var/tmp/ Safely
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Using `/tmp/` and `/var/tmp/` Safely
@@ -43,15 +44,15 @@
 To protect yourself against these kinds of attacks Linux provides a couple of
 APIs that help you avoiding guessable names. Specifically:
 
-1. Use [`mkstemp()`](http://man7.org/linux/man-pages/man3/mkstemp.3.html)
+1. Use [`mkstemp()`](https://man7.org/linux/man-pages/man3/mkstemp.3.html)
    (POSIX), `mkostemp()` (glibc),
-   [`mkdtemp()`](http://man7.org/linux/man-pages/man3/mkdtemp.3.html) (POSIX),
-   [`tmpfile()`](http://man7.org/linux/man-pages/man3/tmpfile.3.html) (C89)
+   [`mkdtemp()`](https://man7.org/linux/man-pages/man3/mkdtemp.3.html) (POSIX),
+   [`tmpfile()`](https://man7.org/linux/man-pages/man3/tmpfile.3.html) (C89)
 
-2. Use [`open()`](http://man7.org/linux/man-pages/man2/open.2.html) with
+2. Use [`open()`](https://man7.org/linux/man-pages/man2/open.2.html) with
    `O_TMPFILE` (Linux)
 
-3. [`memfd_create()`](http://man7.org/linux/man-pages/man2/memfd_create.2.html)
+3. [`memfd_create()`](https://man7.org/linux/man-pages/man2/memfd_create.2.html)
    (Linux; this doesn't bother with `/tmp/` or `/var/tmp/` at all, but uses the
    same RAM/swap backing as `tmpfs` uses, hence is very similar to `/tmp/`
    semantics.)
@@ -112,7 +113,7 @@
 
 3. 🥇 Operate below a sub-directory of `/tmp/` and `/var/tmp/` you created, and
    take a BSD file lock ([`flock(dir_fd,
-   LOCK_SH)`](http://man7.org/linux/man-pages/man2/flock.2.html)) on that
+   LOCK_SH)`](https://man7.org/linux/man-pages/man2/flock.2.html)) on that
    sub-directory. This is particularly interesting when operating on more than
    a single file, or on file nodes that are not plain regular files, for
    example when extracting a tarball to a temporary directory. The ageing
@@ -125,7 +126,7 @@
    this when decompressing tarballs that contain files with old
    modification/access times, as extracted files are otherwise immediately
    candidates for deletion by the ageing algorithm. The
-   [`flock`](http://man7.org/linux/man-pages/man1/flock.1.html) tool of the
+   [`flock`](https://man7.org/linux/man-pages/man1/flock.1.html) tool of the
    `util-linux` packages makes this concept available to shell scripts. Note
    that `systemd-tmpfiles` only checks for BSD file locks on directories, locks
    on other types of file nodes (including regular files) are not considered.
@@ -216,7 +217,7 @@
 not advisable however, as it offers no benefits over a private directory in
 `/run/` as both are backed by the same concept: `tmpfs`. The directory
 `/dev/shm/` exists to back POSIX shared memory (see
-[`shm_open()`](http://man7.org/linux/man-pages/man3/shm_open.3.html) and
+[`shm_open()`](https://man7.org/linux/man-pages/man3/shm_open.3.html) and
 related calls), and not as a place for temporary files. `/dev/shm` is
 problematic as it is world-writable and there's no automatic clean-up logic in
 place.)
diff --git a/docs/TESTING_WITH_SANITIZERS.md b/docs/TESTING_WITH_SANITIZERS.md
index 2622682..ef98cf0 100644
--- a/docs/TESTING_WITH_SANITIZERS.md
+++ b/docs/TESTING_WITH_SANITIZERS.md
@@ -2,6 +2,7 @@
 title: Testing systemd Using Sanitizers
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Testing systemd Using Sanitizers
@@ -12,13 +13,29 @@
 want to do it locally as well. The process slightly varies depending on the
 compiler you want to use and which part of the test suite you want to run.
 
+## mkosi
+
+To build with sanitizers in mkosi, create a file 20-local.conf in mkosi.default.d/ and add the following
+contents:
+
+```
+[Content]
+Environment=SANITIZERS=address,undefined
+```
+
+The value of `SANITIZERS` is passed directly to meson's `b_sanitize` option, See
+https://mesonbuild.com/Builtin-options.html#base-options for the format expected by the option. Currently,
+only the sanitizers supported by gcc can be used, which are `address` and `undefined`.
+
+Note that this will only work with a recent version of mkosi (>= 14 or by running mkosi directly from source).
+
 ## gcc
 gcc compiles in sanitizer libraries dynamically by default, so you need to get
-the shared libraries first - on Fedora these are shipped as a separate packages
+the shared libraries first - on Fedora these are shipped as separate packages
 (`libasan` for Address Sanitizer and `libubsan` for Undefined Behavior Sanitizer).
 
 The compilation itself is then a matter of simply adding `-Db_sanitize=address,undefined`
-to `meson`. That's it - following executions of `meson test` and integrations tests
+to `meson`. That's it - following executions of `meson test` and integration tests
 under `test/` subdirectory will run with sanitizers enabled. However, to get
 truly useful results, you should tweak the runtime configuration of respective
 sanitizers; e.g. in systemd we set the following environment variables:
diff --git a/docs/TRANSIENT-SETTINGS.md b/docs/TRANSIENT-SETTINGS.md
index 3a75627..07e248f 100644
--- a/docs/TRANSIENT-SETTINGS.md
+++ b/docs/TRANSIENT-SETTINGS.md
@@ -2,6 +2,7 @@
 title: What Settings Are Currently Available For Transient Units?
 category: Interfaces
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # What Settings Are Currently Available For Transient Units?
@@ -33,6 +34,7 @@
 ✓ PropagatesReloadTo=
 ✓ ReloadPropagatedFrom=
 ✓ PartOf=
+✓ Upholds=
 ✓ JoinsNamespaceOf=
 ✓ RequiresMountsFor=
 ✓ StopWhenUnneeded=
@@ -138,12 +140,15 @@
 ✓ TTYReset=
 ✓ TTYVHangup=
 ✓ TTYVTDisallocate=
+✓ TTYRows=
+✓ TTYColumns=
 ✓ SyslogIdentifier=
 ✓ SyslogFacility=
 ✓ SyslogLevel=
 ✓ SyslogLevelPrefix=
 ✓ LogLevelMax=
 ✓ LogExtraFields=
+✓ LogFilterPatterns=
 ✓ LogRateLimitIntervalSec=
 ✓ LogRateLimitBurst=
 ✓ SecureBits=
@@ -238,7 +243,9 @@
 ✓ CPUQuota=
 ✓ CPUQuotaPeriodSec=
 ✓ AllowedCPUs=
+✓ StartupAllowedCPUs=
 ✓ AllowedMemoryNodes=
+✓ StartupAllowedMemoryNodes=
 ✓ MemoryAccounting=
 ✓ DefaultMemoryMin=
 ✓ MemoryMin=
@@ -304,6 +311,7 @@
 ✓ ExecStartPre=
 ✓ ExecStop=
 ✓ ExecStopPost=
+✓ ExitType=
 ✓ FileDescriptorStoreMax=
 ✓ GuessMainPID=
 ✓ NonBlocking=
@@ -317,6 +325,7 @@
 ✓ RestartSec=
 ✓ RootDirectoryStartOnly=
 ✓ RuntimeMaxSec=
+✓ RuntimeRandomizedExtraSec=
   Sockets=
 ✓ SuccessExitStatus=
 ✓ TimeoutAbortSec=
@@ -392,6 +401,7 @@
 
 ```
 ✓ RuntimeMaxSec=
+✓ RuntimeRandomizedExtraSec=
 ✓ TimeoutStopSec=
 ```
 
diff --git a/docs/TRANSLATORS.md b/docs/TRANSLATORS.md
index fa74e19..2f578cc 100644
--- a/docs/TRANSLATORS.md
+++ b/docs/TRANSLATORS.md
@@ -2,6 +2,7 @@
 title: Notes for Translators
 category: Contributing
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Notes for Translators
@@ -26,23 +27,23 @@
 initial template:
 
 ```
-$ meson compile -C build/ systemd-pot
+$ ninja -C build/ systemd-pot
 ```
 
 This will generate file `po/systemd.pot` in the source tree.
 
-Then simply copy it to a new <code><i>${lang_code}</i>.po</code> file, where
-<code><i>${lang_code}</i></code> is the two-letter code for a language
+Then simply copy it to a new `${lang_code}.po` file, where
+`${lang_code}` is the two-letter code for a language
 (possibly followed by a two-letter uppercase country code), according to the
 ISO 639 standard.
 
 In short:
 
-<pre>
-$ cp po/systemd.pot po/<i>${lang_code}</i>.po
-</pre>
+```
+$ cp po/systemd.pot po/${lang_code}.po
+```
 
-Then edit the new <code>po/<i>${lang_code}</i>.po</code> file (for example,
+Then edit the new `po/${lang_code}.po` file (for example,
 using the `poedit` GUI editor.)
 
 ## Updating an Existing Translation
@@ -50,7 +51,7 @@
 Start by updating the `*.po` files from the latest template:
 
 ```
-$ meson compile -C build/ systemd-update-po
+$ ninja -C build/ systemd-update-po
 ```
 
 This will touch all the `*.po` files, so you'll want to pay attention when
@@ -74,7 +75,7 @@
 You can recompile the `*.po` files using the following command:
 
 ```
-$ meson compile -C build/ systemd-gmo
+$ ninja -C build/ systemd-gmo
 ```
 
 The resulting files will be saved in the `build/po/` directory.
diff --git a/docs/UIDS-GIDS.md b/docs/UIDS-GIDS.md
index 5342ccd..db4cac4 100644
--- a/docs/UIDS-GIDS.md
+++ b/docs/UIDS-GIDS.md
@@ -2,6 +2,7 @@
 title: Users, Groups, UIDs and GIDs on systemd Systems
 category: Users, Groups and Home Directories
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # Users, Groups, UIDs and GIDs on systemd Systems
@@ -72,7 +73,7 @@
 networking available — a requirement that is not made for regular users. This
 means regular users may be stored in remote LDAP or NIS databases, but system
 users may not (except when there's a consistent local cache kept, that is
-available during earliest boot, including in the initial RAM disk).
+available during earliest boot, including in the initrd).
 
 ## Special `systemd` GIDs
 
@@ -80,7 +81,7 @@
 above). However, it does define some special group/GID assignments, which are
 primarily used for `systemd-udevd`'s device management. The precise list of the
 currently defined groups is found in this `sysusers.d` snippet:
-[basic.conf](https://raw.githubusercontent.com/systemd/systemd/master/sysusers.d/basic.conf.in)
+[basic.conf](https://raw.githubusercontent.com/systemd/systemd/main/sysusers.d/basic.conf.in)
 
 It's strongly recommended that downstream distributions include these groups in
 their default group databases.
@@ -175,7 +176,7 @@
 recommended. It will nevertheless query `/etc/login.defs` at runtime, when
 compiled with `-Dcompat-mutable-uid-boundaries=true` and that file is present.
 Support for this is considered only a compatibility feature and should not be
-used except when upgrading systems which were creating with different defaults.
+used except when upgrading systems which were created with different defaults.
 
 ## Considerations for container managers
 
@@ -232,6 +233,27 @@
 follow this scheme no changes to `/etc/passwd` need to be made, thus minimizing
 the artifacts the container manager persistently leaves in the system.
 
+5. `systemd-homed` by default mounts the home directories it manages with UID
+mapping applied. It will map four UID ranges into that uidmap, and leave
+everything else unmapped: the range from 0…60000, the user's own UID, the range
+60514…65534, and the container range 524288…1879048191. This means
+files/directories in home directories managed by `systemd-homed` cannot be
+owned by UIDs/GIDs outside of these four ranges (attempts to `chown()` files to
+UIDs outside of these ranges will fail). Thus, if container trees are to be
+placed within a home directory managed by `systemd-homed` they should take
+these ranges into consideration and either place the trees at base UID 0 (and
+then map them to a higher UID range for use in user namespacing via another
+level of UID mapped mounts, at *runtime*) or at a base UID from the container
+UID range. That said, placing container trees (and in fact any
+files/directories not owned by the home directory's user) in home directories
+is generally a questionable idea (regardless of whether `systemd-homed` is used
+or not), given this typically breaks quota assumptions, makes it impossible for
+users to properly manage all files in their own home directory due to
+permission problems, introduces security issues around SETUID and severely
+restricts compatibility with networked home directories. Typically, it's a much
+better idea to place container images outside of the home directory,
+i.e. somewhere below `/var/` or similar.
+
 ## Summary
 
 |               UID/GID | Purpose               | Defined By    | Listed in                     |
@@ -254,18 +276,19 @@
 | 2147483648…4294967294 | HIC SVNT LEONES       |               |                               |
 |            4294967295 | 32bit `(uid_t) -1`    | Linux         |                               |
 
-Note that "Unused" in the table above doesn't meant that these ranges are
+Note that "Unused" in the table above doesn't mean that these ranges are
 really unused. It just means that these ranges have no well-established
 pre-defined purposes between Linux, generic low-level distributions and
 `systemd`. There might very well be other packages that allocate from these
 ranges.
 
 Note that the range 2147483648…4294967294 (i.e. 2^31…2^32-2) should be handled
-with care. Various programs (including kernel file systems, see `devpts`) have
-trouble with UIDs outside of the signed 32bit range, i.e any UIDs equal to or
-above 2147483648. It is thus strongly recommended to stay away from this range
-in order to avoid complications. This range should be considered reserved for
-future, special purposes.
+with care. Various programs (including kernel file systems — see `devpts` — or
+even kernel syscalls – see `setfsuid()`) have trouble with UIDs outside of the
+signed 32bit range, i.e any UIDs equal to or above 2147483648. It is thus
+strongly recommended to stay away from this range in order to avoid
+complications. This range should be considered reserved for future, special
+purposes.
 
 ## Notes on resolvability of user and group names
 
@@ -278,7 +301,7 @@
 become available during late boot only), except if a local cache is kept that
 makes them available during early boot too (i.e. before networking is
 up). Specifically, system users need to be resolvable at least before
-`systemd-udevd.service` and `systemd-tmpfiles.service` are started, as both
+`systemd-udevd.service` and `systemd-tmpfiles-setup.service` are started, as both
 need to resolve system users — but note that there might be more services
 requiring full resolvability of system users than just these two.
 
diff --git a/docs/USERDB_AND_DESKTOPS.md b/docs/USERDB_AND_DESKTOPS.md
index babaaaf..9006eeb 100644
--- a/docs/USERDB_AND_DESKTOPS.md
+++ b/docs/USERDB_AND_DESKTOPS.md
@@ -2,6 +2,7 @@
 title: systemd-homed and JSON User/Group Record Support in Desktop Environments
 category: Users, Groups and Home Directories
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # `systemd-homed` and JSON User/Group Record Support in Desktop Environments
@@ -20,10 +21,10 @@
 
 Before reading on, please read up on the basic concepts, specifically:
 
-* [Home Directories](https://systemd.io/HOME_DIRECTORY)
-* [JSON User Records](https://systemd.io/USER_RECORD)
-* [JSON Group Records](https://systemd.io/GROUP_RECORD)
-* [User/Group Record Lookup API via Varlink](https://systemd.io/USER_GROUP_API)
+* [Home Directories](HOME_DIRECTORY.md)
+* [JSON User Records](USER_RECORD.md)
+* [JSON Group Records](GROUP_RECORD.md)
+* [User/Group Record Lookup API via Varlink](USER_GROUP_API.md)
 
 ## Support for Suspending Home Directory Access during System Suspend
 
@@ -146,13 +147,12 @@
 In case you wonder, there's no automatic mechanism for converting existing
 users registered in `/etc/passwd` or LDAP to users managed by
 `systemd-homed`. There's documentation for doing this manually though, see
-[Converting Existing Users to systemd-homed managed
-Users](https://systemd.io/CONVERTING_TO_HOMED).
+[Converting Existing Users to systemd-homed managed Users](CONVERTING_TO_HOMED.md).
 
 ## Future Additions
 
 JSON user/group records are extensible, hence we can easily add any additional
-fields desktop environments require. For example pattern-based authentication
+fields desktop environments require. For example, pattern-based authentication
 is likely very useful on touch-based devices, and the user records should hence
 learn them natively. Fields for other authentication mechanisms, such as
 fingerprint authentication should be provided as well, eventually.
diff --git a/docs/USER_GROUP_API.md b/docs/USER_GROUP_API.md
index bcb0b5d..45e3c9d 100644
--- a/docs/USER_GROUP_API.md
+++ b/docs/USER_GROUP_API.md
@@ -2,16 +2,16 @@
 title: User/Group Record Lookup API via Varlink
 category: Users, Groups and Home Directories
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # User/Group Record Lookup API via Varlink
 
-JSON User/Group Records (as described in the [JSON User
-Records](https://systemd.io/USER_RECORD) and [JSON Group
-Records](https://systemd.io/GROUP_RECORD) documents) that are defined on the
+JSON User/Group Records (as described in the [JSON User Records](USER_RECORD.md)
+and [JSON Group Records](GROUP_RECORD.md) documents) that are defined on the
 local system may be queried with a [Varlink](https://varlink.org/) API. This
 API takes both the role of what
-[`getpwnam(3)`](http://man7.org/linux/man-pages/man3/getpwnam.3.html) and
+[`getpwnam(3)`](https://man7.org/linux/man-pages/man3/getpwnam.3.html) and
 related calls are for `struct passwd`, as well as the interfaces modules
 implementing the [glibc Name Service Switch
 (NSS)](https://www.gnu.org/software/libc/manual/html_node/Name-Service-Switch.html)
@@ -129,7 +129,7 @@
    `systemd-machined.service` and provides records for the users and groups used
    by local containers that use user namespacing.
 
-Other projects are invited to implement these services too. For example it
+Other projects are invited to implement these services too. For example, it
 would make sense for LDAP/ActiveDirectory projects to implement these
 interfaces, which would provide them a way to do per-user resource management
 enforced by systemd and defined directly in LDAP directories.
@@ -240,7 +240,7 @@
 record at all. (The `service` field is defined in order to allow implementation
 of daemons that provide multiple distinct user/group services over the same
 `AF_UNIX` socket: in order to correctly determine which service a client wants
-to talk to the client needs to provide the name in each request.)
+to talk to, the client needs to provide the name in each request.)
 
 The `GetGroupRecord` method call works analogously but for groups.
 
@@ -256,7 +256,7 @@
 there are multiple members per group and also multiple groups a user is
 member of). As with `GetUserRecord` and `GetGroupRecord` the `service`
 parameter needs to contain the name of the service being talked to, in order to
-allow implementation of multiple service within the same IPC socket. In case no
+allow implementation of multiple services within the same IPC socket. In case no
 matching membership is known `NoRecordFound` is returned. The other two errors
 are also generated in the same cases as for `GetUserRecord` and
 `GetGroupRecord`.
@@ -269,7 +269,7 @@
 Note that only the `GetMemberships` call is authoritative about memberships of
 users in groups. i.e. it should not be considered sufficient to check the
 `memberOf` field of user records and the `members` field of group records to
-acquire the full list of memberships. The full list can only bet determined by
+acquire the full list of memberships. The full list can only be determined by
 `GetMemberships`, and as mentioned requires merging of these lists of all local
 services. Result of this is that it can be one service that defines a user A,
 and another service that defines a group B, and a third service that declares
diff --git a/docs/USER_NAMES.md b/docs/USER_NAMES.md
index daafdf2..74c24b5 100644
--- a/docs/USER_NAMES.md
+++ b/docs/USER_NAMES.md
@@ -2,6 +2,7 @@
 title: User/Group Name Syntax
 category: Users, Groups and Home Directories
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # User/Group Name Syntax
@@ -28,7 +29,7 @@
   hyphen](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_282),
   with the restriction that hyphen is not allowed as first character of the
   user name. Interestingly no size limit is declared, i.e. in neither
-  direction, meaning that strictly speaking according to POSIX both the empty
+  direction, meaning that strictly speaking, according to POSIX, both the empty
   string is a valid user name as well as a string of gigabytes in length.
 
 * Debian/Ubuntu based systems enforce the regular expression
@@ -113,7 +114,7 @@
 rules above.
 
 * No embedded NUL bytes (rationale: handling in C must be possible and
-  straight-forward)
+  straightforward)
 
 * No names consisting fully of digits (rationale: avoid confusion with numeric
   UID/GID specifications)
@@ -150,7 +151,7 @@
 rules, but not vice versa.
 
 Note that this relaxed mode does not refuse a couple of very questionable
-syntaxes. For example it permits a leading or embedded period. A leading period
+syntaxes. For example, it permits a leading or embedded period. A leading period
 is problematic because the matching home directory would typically be hidden
 from the user's/administrator's view. An embedded period is problematic since
 it creates ambiguity in traditional `chown` syntax (which is still accepted
diff --git a/docs/USER_RECORD.md b/docs/USER_RECORD.md
index 73dfc5b..768f9d0 100644
--- a/docs/USER_RECORD.md
+++ b/docs/USER_RECORD.md
@@ -2,6 +2,7 @@
 title: JSON User Records
 category: Users, Groups and Home Directories
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
 # JSON User Records
@@ -13,8 +14,8 @@
 
 1. [`systemd-homed.service`](https://www.freedesktop.org/software/systemd/man/systemd-homed.service.html)
    manages `human` user home directories and embeds these JSON records
-   directly in the home directory images (see [Home
-   Directories](https://systemd.io/HOME_DIRECTORY) for details).
+   directly in the home directory images
+   (see [Home Directories](HOME_DIRECTORY.md) for details).
 
 2. [`pam_systemd`](https://www.freedesktop.org/software/systemd/man/pam_systemd.html)
    processes these JSON records for users that log in, and applies various
@@ -70,14 +71,13 @@
 
 4. Default parameters for backup applications and similar
 
-Similar to JSON User Records there are also [JSON Group
-Records](https://systemd.io/GROUP_RECORD) that encapsulate UNIX groups.
+Similar to JSON User Records there are also
+[JSON Group Records](GROUP_RECORD.md) that encapsulate UNIX groups.
 
 JSON User Records may be transferred or written to disk in various protocols
 and formats. To inquire about such records defined on the local system use the
-[User/Group Lookup API via
-Varlink](https://systemd.io/USER_GROUP_API). User/group records may also be
-dropped in number of drop-in directories as files. See
+[User/Group Lookup API via Varlink](USER_GROUP_API.md). User/group records may
+also be dropped in number of drop-in directories as files. See
 [`nss-systemd(8)`](https://www.freedesktop.org/software/systemd/man/nss-systemd.html)
 for details.
 
@@ -88,6 +88,11 @@
 popular in the web communities, which hopefully should make it easy to link
 user credential data from the web and from local systems more closely together.
 
+Please note that this specification assumes that JSON numbers may cover the full
+integer range of -2^63 … 2^64-1 without loss of precision (i.e. INT64_MIN …
+UINT64_MAX). Please read, write and process user records as defined by this
+specification only with JSON implementations that provide this number range.
+
 ## General Structure
 
 The JSON user records generated and processed by systemd follow a general
@@ -207,9 +212,9 @@
 
 `userName` → The UNIX user name for this record. Takes a string with a valid
 UNIX user name. This field is the only mandatory field, all others are
-optional. Corresponds with the `pw_name` field of of `struct passwd` and the
+optional. Corresponds with the `pw_name` field of `struct passwd` and the
 `sp_namp` field of `struct spwd` (i.e. the shadow user record stored in
-`/etc/shadow`). See [User/Group Name Syntax](https://systemd.io/USER_NAMES) for
+`/etc/shadow`). See [User/Group Name Syntax](USER_NAMES.md) for
 the (relaxed) rules the various systemd components enforce on user/group names.
 
 `realm` → The "realm" a user is defined in. This concept allows distinguishing
@@ -292,7 +297,7 @@
 
 `environment` → An array of strings, each containing an environment variable
 and its value to set for the user's login session, in a format compatible with
-[`putenv()`](http://man7.org/linux/man-pages/man3/putenv.3.html). Any
+[`putenv()`](https://man7.org/linux/man-pages/man3/putenv.3.html). Any
 environment variable listed here is automatically set by
 [`pam_systemd`](https://www.freedesktop.org/software/systemd/man/pam_systemd.html)
 for all login sessions of the user.
@@ -315,7 +320,7 @@
 [`pam_systemd`](https://www.freedesktop.org/software/systemd/man/pam_systemd.html)
 will automatically initialize the login process' nice level to this value with,
 which is then inherited by all the user's processes, see
-[`setpriority()`](http://man7.org/linux/man-pages/man2/setpriority.2.html) for
+[`setpriority()`](https://man7.org/linux/man-pages/man2/setpriority.2.html) for
 more information.
 
 `resourceLimits` → An object, where each key refers to a Linux resource limit
@@ -324,10 +329,10 @@
 [`pam_systemd`](https://www.freedesktop.org/software/systemd/man/pam_systemd.html)
 will automatically initialize the login process' resource limits to these
 values, which is then inherited by all the user's processes, see
-[`setrlimit()`](http://man7.org/linux/man-pages/man2/setrlimit.2.html) for more
+[`setrlimit()`](https://man7.org/linux/man-pages/man2/setrlimit.2.html) for more
 information.
 
-`locked` → A boolean value. If true the user account is locked, the user may
+`locked` → A boolean value. If true, the user account is locked, the user may
 not log in. If this field is missing it should be assumed to be false,
 i.e. logins are permitted. This field corresponds to the `sp_expire` field of
 `struct spwd` (i.e. the `/etc/shadow` data for a user) being set to zero or
@@ -353,11 +358,11 @@
 LUKS volume that is mounted as home directory, and `cifs` a home directory
 mounted from a Windows File Share. The five latter types are primarily used by
 `systemd-homed` when managing home directories, but may be used if other
-managers are used too. If this is not set `classic` is the implied default.
+managers are used too. If this is not set, `classic` is the implied default.
 
 `diskSize` → An unsigned 64bit integer, indicating the intended home directory
 disk space in bytes to assign to the user. Depending on the selected storage
-type this might be implement differently: for `luks` this is the intended size
+type this might be implemented differently: for `luks` this is the intended size
 of the file system and LUKS volume, while for the others this likely translates
 to classic file system quota settings.
 
@@ -410,11 +415,16 @@
 see above.
 
 `cifsService` → A string indicating the Windows File Share service (CIFS) to
-mount as home directory of the user on login.
+mount as home directory of the user on login. Should be in format
+`//<host>/<service>/<directory/…>`. The directory part is optional. If missing
+the top-level directory of the CIFS share is used.
+
+`cifsExtraMountOptions` → A string with additional mount options to pass to
+`mount.cifs` when mounting the home directory CIFS share.
 
 `imagePath` → A string with an absolute file system path to the file, directory
 or block device to use for storage backing the home directory. If the `luks`
-storage is used this refers to the loopback file or block device node to store
+storage is used, this refers to the loopback file or block device node to store
 the LUKS volume on. For `fscrypt`, `directory`, `subvolume` this refers to the
 directory to bind mount as home directory on login. Not defined for `classic`
 or `cifs`.
@@ -454,7 +464,7 @@
 referencing the file system UUID the home directory is located in. This is
 primarily relevant when the storage mechanism used is `luks`.
 
-`luksDiscard` → A boolean. If true and `luks` storage is used controls whether
+`luksDiscard` → A boolean. If true and `luks` storage is used, controls whether
 the loopback block devices, LUKS and the file system on top shall be used in
 `discard` mode, i.e. erased sectors should always be returned to the underlying
 storage. If false and `luks` storage is used turns this behavior off. In
@@ -465,6 +475,9 @@
 to trim/allocate the file system/backing file when deactivating the home
 directory.
 
+`luksExtraMountOptions` → A string with additional mount options to append to
+the default mount options for the file system in the LUKS volume.
+
 `luksCipher` → A string, indicating the cipher to use for the LUKS storage mechanism.
 
 `luksCipherMode` → A string, selecting the cipher mode to use for the LUKS storage mechanism.
@@ -477,9 +490,12 @@
 
 `luksPbkdfType` → A string, indicating the PBKDF type to use for the LUKS storage mechanism.
 
+`luksPbkdfForceIterations` → An unsigned 64bit integer, indicating the intended
+number of iterations for the PBKDF operation, when LUKS storage is used.
+
 `luksPbkdfTimeCostUSec` → An unsigned 64bit integer, indicating the intended
 time cost for the PBKDF operation, when the LUKS storage mechanism is used, in
-µs.
+µs. Ignored when `luksPbkdfForceIterations` is set.
 
 `luksPbkdfMemoryCost` → An unsigned 64bit integer, indicating the intended
 memory cost for the PBKDF operation, when LUKS storage is used, in bytes.
@@ -487,6 +503,22 @@
 `luksPbkdfParallelThreads` → An unsigned 64bit integer, indicating the intended
 required parallel threads for the PBKDF operation, when LUKS storage is used.
 
+`luksSectorSize` → An unsigned 64bit integer, indicating the sector size to
+use for the LUKS storage mechanism, in bytes. Must be a power of two between
+512 and 4096.
+
+`autoResizeMode` → A string, one of `off`, `grow`, `shrink-and-grow`. Unless
+set to `off`, controls whether the home area shall be grown automatically to
+the size configured in `diskSize` automatically at login time. If set to
+`shrink-and-grown` the home area is also shrunk to the minimal size possible
+(as dictated by used disk space and file system constraints) on logout.
+
+`rebalanceWeight` → An unsigned integer, `null` or a boolean. Configures the
+free disk space rebalancing weight for the home area. The integer must be in
+the range 1…10000 to configure an explicit weight. If unset, or set to `null`
+or `true` the default weight of 100 is implied. If set to 0 or `false`
+rebalancing is turned off for this home area.
+
 `service` → A string declaring the service that defines or manages this user
 record. It is recommended to use reverse domain name notation for this. For
 example, if `systemd-homed` manages a user a string of `io.systemd.Home` is
@@ -553,7 +585,7 @@
 private key found with it it is used.
 
 `fido2HmacCredential` → An array of strings, each with a Base64-encoded FIDO2
-credential ID that shell be used for authentication with FIDO2 devices that
+credential ID that shall be used for authentication with FIDO2 devices that
 implement the `hmac-secret` extension. The salt to pass to the FIDO2 device is
 found in `fido2HmacSalt`.
 
@@ -600,13 +632,13 @@
 
 `hashedPassword` → An array of strings, each containing a hashed UNIX password
 string, in the format
-[`crypt(3)`](http://man7.org/linux/man-pages/man3/crypt.3.html) generates. This
+[`crypt(3)`](https://man7.org/linux/man-pages/man3/crypt.3.html) generates. This
 corresponds with `sp_pwdp` field of `struct spwd` (and in a way the `pw_passwd`
 field of `struct passwd`).
 
 `sshAuthorizedKeys` → An array of strings, each listing an SSH public key that
 is authorized to access the account. The strings should follow the same format
-as the lines in the traditional `~/.ssh/authorized_key` file.
+as the lines in the traditional `~/.ssh/authorized_keys` file.
 
 `pkcs11EncryptedKey` → An array of objects. Each element of the array should be
 an object consisting of three string fields: `uri` shall contain a PKCS#11
@@ -704,15 +736,17 @@
 `notAfterUSec`, `storage`, `diskSize`, `diskSizeRelative`, `skeletonDirectory`,
 `accessMode`, `tasksMax`, `memoryHigh`, `memoryMax`, `cpuWeight`, `ioWeight`,
 `mountNoDevices`, `mountNoSuid`, `mountNoExecute`, `cifsDomain`,
-`cifsUserName`, `cifsService`, `imagePath`, `uid`, `gid`, `memberOf`,
-`fileSystemType`, `partitionUuid`, `luksUuid`, `fileSystemUuid`, `luksDiscard`,
-`luksOfflineDiscard`, `luksCipher`, `luksCipherMode`, `luksVolumeKeySize`,
-`luksPbkdfHashAlgorithm`, `luksPbkdfType`, `luksPbkdfTimeCostUSec`,
-`luksPbkdfMemoryCost`, `luksPbkdfParallelThreads`, `rateLimitIntervalUSec`,
-`rateLimitBurst`, `enforcePasswordPolicy`, `autoLogin`, `stopDelayUSec`,
-`killProcesses`, `passwordChangeMinUSec`, `passwordChangeMaxUSec`,
-`passwordChangeWarnUSec`, `passwordChangeInactiveUSec`, `passwordChangeNow`,
-`pkcs11TokenUri`, `fido2HmacCredential`.
+`cifsUserName`, `cifsService`, `cifsExtraMountOptions`, `imagePath`, `uid`,
+`gid`, `memberOf`, `fileSystemType`, `partitionUuid`, `luksUuid`,
+`fileSystemUuid`, `luksDiscard`, `luksOfflineDiscard`, `luksCipher`,
+`luksCipherMode`, `luksVolumeKeySize`, `luksPbkdfHashAlgorithm`,
+`luksPbkdfType`, `luksPbkdfForceIterations`, `luksPbkdfTimeCostUSec`, `luksPbkdfMemoryCost`,
+`luksPbkdfParallelThreads`, `luksSectorSize`, `autoResizeMode`, `rebalanceWeight`,
+`rateLimitIntervalUSec`, `rateLimitBurst`, `enforcePasswordPolicy`,
+`autoLogin`, `stopDelayUSec`, `killProcesses`, `passwordChangeMinUSec`,
+`passwordChangeMaxUSec`, `passwordChangeWarnUSec`,
+`passwordChangeInactiveUSec`, `passwordChangeNow`, `pkcs11TokenUri`,
+`fido2HmacCredential`.
 
 ## Fields in the `binding` section
 
@@ -851,6 +885,12 @@
 home directory remains in unclean state if the storage device is removed from
 the system by the user).
 
+`accessMode` → The access mode currently in effect for the home directory
+itself.
+
+`fileSystemType` → The file system type backing the home directory: a short
+string, such as "btrfs", "ext4", "xfs".
+
 ## Fields in the `signature` section
 
 As mentioned, the `signature` section of the user record may contain one or
diff --git a/docs/_config.yml b/docs/_config.yml
index a00cf52..412db1f 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -1,4 +1,5 @@
 # Site settings
+# SPDX-License-Identifier: LGPL-2.1-or-later
 title: systemd
 baseurl: "" # the subpath of your site, e.g. /blog/
 url: "https://systemd.io" # the base hostname & protocol for your site
diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html
index e103a27..3e5214e 100644
--- a/docs/_includes/footer.html
+++ b/docs/_includes/footer.html
@@ -1,5 +1,7 @@
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
 <footer class="site-footer">
-  <p>&copy; systemd, 2021</p>
+  <p>&copy; systemd, 2023</p>
 
   <p><a href="https://github.com/systemd/systemd/tree/main/docs">Website source</a></p>
 </footer>
diff --git a/docs/_includes/head.html b/docs/_includes/head.html
index 3ff4bbe..ae39a3c 100644
--- a/docs/_includes/head.html
+++ b/docs/_includes/head.html
@@ -1,16 +1,16 @@
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
 <head>
   <meta charset="utf-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="theme-color" content="#0021D8">
+  <meta name="theme-color" content="#201A26">
 
   <title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
 
   <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
-  <link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" />
 
   <link rel="stylesheet" href="{{ "/style.css" | prepend: site.baseurl }}">
-  
+
   <link rel="icon" type="image/png" href="/favicon.png" />
-  <link rel="icon" sizes="144x144" href="apple-touch-icon.png">
 </head>
diff --git a/docs/_includes/header.html b/docs/_includes/header.html
index 4e885fb..4f2f73b 100644
--- a/docs/_includes/header.html
+++ b/docs/_includes/header.html
@@ -1,9 +1,13 @@
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
 <header class="site-header">
 
   <div class="wrapper">
 
     <a class="page-logo" href="{{ site.baseurl }}/">
-      <img src="/assets/page-logo.svg" alt="systemd">
+      <svg width="202" height="26" viewBox="0 0 202 26">
+        <use href="/assets/systemd-logo.svg#systemd-logo"/>
+      </svg>
     </a>
 
   </div>
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
index 672aa0c..9e3b1b0 100644
--- a/docs/_layouts/default.html
+++ b/docs/_layouts/default.html
@@ -1,5 +1,7 @@
 <!DOCTYPE html>
-<html>
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<html lang="en">
 
   {% include head.html %}
 
diff --git a/docs/_layouts/forward.html b/docs/_layouts/forward.html
new file mode 100644
index 0000000..5d3799b
--- /dev/null
+++ b/docs/_layouts/forward.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0;url={{ page.target }}"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="theme-color" content="#201A26">
+    <meta name="robots" content="noindex,follow">
+    <link rel="stylesheet" href="{{ "/style.css" | prepend: site.baseurl }}">
+    <link rel="icon" type="image/png" href="/favicon.png" />
+    <link rel="canonical" href="{{ page.target }}"/>
+    <title>Redirecting to {{ page.target }}</title>
+  </head>
+  <body>
+    {% include header.html %}
+    <div class="container">
+      <p>
+        This document has moved.<br>
+        Redirecting to <a href="{{ page.target }}">{{ page.target }}</a>.
+      </p>
+    </div>
+  </body>
+</html>
diff --git a/docs/assets/page-logo.svg b/docs/assets/page-logo.svg
deleted file mode 100644
index e59c88a..0000000
--- a/docs/assets/page-logo.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="202" height="26">
-    <path overflow="visible" font-weight="400" d="M0 0v26h10v-4H4V4h6V0zm76 0v4h6v18h-6v4h10V0z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" color="#000" font-family="sans-serif" fill="#201a26"/>
-    <path word-spacing="0" letter-spacing=".2" font-size="12" font-weight="700" style="line-height:1.25;-inkscape-font-specification:'Heebo Bold';text-align:start" d="M113.498 14.926q-4.5-.96-4.5-3.878 0-1.079.609-1.981.621-.902 1.781-1.441 1.16-.54 2.707-.54 1.63 0 2.848.528 1.219.516 1.875 1.453.656.926.656 2.121h-3.539q0-.762-.457-1.183-.457-.434-1.394-.434-.774 0-1.243.363-.457.364-.457.938 0 .55.516.89.527.34 1.781.575 1.5.28 2.543.738 1.043.445 1.653 1.242.62.797.62 2.027 0 1.114-.667 2.004-.657.88-1.887 1.383-1.219.504-2.836.504-1.711 0-2.965-.621-1.242-.633-1.898-1.617-.645-.985-.645-2.051h3.34q.036.914.656 1.36.621.433 1.594.433.902 0 1.383-.34.492-.351.492-.937 0-.364-.223-.61-.21-.258-.773-.48-.55-.223-1.57-.446zm19.384-7.606l-5.086 14.58q-.293.831-.726 1.523-.434.703-1.266 1.195-.832.504-2.098.504-.457 0-.75-.048-.281-.046-.785-.176v-2.672q.176.02.527.02.95 0 1.418-.293.47-.293.715-.961l.352-.926-4.43-12.738h3.797l2.262 7.687 2.285-7.687zm5.884 7.606q-4.5-.96-4.5-3.878 0-1.079.61-1.981.62-.902 1.781-1.441 1.16-.54 2.707-.54 1.629 0 2.848.528 1.218.516 1.875 1.453.656.926.656 2.121h-3.539q0-.762-.457-1.183-.457-.434-1.395-.434-.773 0-1.242.363-.457.364-.457.938 0 .55.516.89.527.34 1.781.575 1.5.28 2.543.738 1.043.445 1.652 1.242.621.797.621 2.027 0 1.114-.668 2.004-.656.88-1.886 1.383-1.219.504-2.836.504-1.711 0-2.965-.621-1.242-.633-1.899-1.617-.644-.985-.644-2.051h3.34q.036.914.656 1.36.621.433 1.594.433.902 0 1.383-.34.492-.351.492-.937 0-.364-.223-.61-.21-.258-.773-.48-.551-.223-1.57-.446zm13.983 2.403q.574 0 .984-.082v2.66q-.914.328-2.086.328-3.727 0-3.727-3.797V9.899h-1.793V7.321h1.793v-3.14h3.54v3.14h2.132v2.578h-2.133v6.129q0 .75.293 1.031.293.27.997.27zm14.228-2.519h-8.016q.2 1.183.985 1.886.785.691 2.015.691.914 0 1.688-.34.785-.351 1.336-1.042l1.699 1.957q-.668.96-1.957 1.617-1.278.656-3 .656-1.946 0-3.387-.82-1.43-.82-2.203-2.227-.762-1.406-.762-3.105v-.446q0-1.898.715-3.386.715-1.489 2.063-2.32 1.347-.844 3.187-.844 1.793 0 3.059.761 1.265.762 1.922 2.168.656 1.395.656 3.293zm-3.469-2.65q-.024-1.03-.574-1.628-.54-.598-1.617-.598-1.008 0-1.582.668-.563.668-.739 1.84h4.512zm19.923-5.073q1.934 0 2.989 1.148 1.054 1.148 1.054 3.727v8.039h-3.539V11.95q0-.797-.21-1.23-.212-.446-.61-.61-.387-.164-.984-.164-.715 0-1.219.352-.504.34-.797.972.02.082.02.27V20h-3.54v-8.015q0-.797-.21-1.242-.211-.445-.61-.621-.386-.176-.996-.176-.68 0-1.183.304-.492.293-.797.844V20h-3.539V7.32h3.316l.118 1.419q.633-.797 1.547-1.22.926-.433 2.086-.433 1.172 0 2.016.48.855.47 1.312 1.442.633-.926 1.582-1.418.961-.504 2.203-.504zM201.398 2v18h-3.187l-.176-1.359q-1.243 1.594-3.212 1.594-1.535 0-2.66-.82-1.113-.832-1.699-2.285-.574-1.454-.574-3.317v-.246q0-1.934.574-3.398.586-1.465 1.7-2.274 1.124-.808 2.683-.808 1.805 0 3.012 1.37V2.001zm-5.672 15.376q1.488 0 2.133-1.266v-4.898q-.61-1.266-2.11-1.266-1.207 0-1.77.984-.55.985-.55 2.637v.246q0 1.629.54 2.602.55.96 1.757.96z" font-family="Heebo" fill="#201a26"/>
-    <path d="M45 13L63 3v20z" fill="#30d475"/>
-    <circle cx="30.001" cy="13.001" r="9" fill="#30d475"/>
-</svg>
diff --git a/docs/assets/systemd-logo.svg b/docs/assets/systemd-logo.svg
new file mode 100644
index 0000000..a8af438
--- /dev/null
+++ b/docs/assets/systemd-logo.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="202" height="26" viewBox="0 0 202 26" id="systemd-logo">
+    <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+    <path d="M0 0v26h10v-4H4V4h6V0zm76 0v4h6v18h-6v4h10V0z" fill="currentColor"/>
+    <path d="M113.498 14.926q-4.5-.96-4.5-3.878 0-1.079.609-1.981.621-.902 1.781-1.441 1.16-.54 2.707-.54 1.63 0 2.848.528 1.219.516 1.875 1.453.656.926.656 2.121h-3.539q0-.762-.457-1.183-.457-.434-1.394-.434-.774 0-1.243.363-.457.364-.457.938 0 .55.516.89.527.34 1.781.575 1.5.28 2.543.738 1.043.445 1.653 1.242.62.797.62 2.027 0 1.114-.667 2.004-.657.88-1.887 1.383-1.219.504-2.836.504-1.711 0-2.965-.621-1.242-.633-1.898-1.617-.645-.985-.645-2.051h3.34q.036.914.656 1.36.621.433 1.594.433.902 0 1.383-.34.492-.351.492-.937 0-.364-.223-.61-.21-.258-.773-.48-.55-.223-1.57-.446zm19.384-7.606l-5.086 14.58q-.293.831-.726 1.523-.434.703-1.266 1.195-.832.504-2.098.504-.457 0-.75-.048-.281-.046-.785-.176v-2.672q.176.02.527.02.95 0 1.418-.293.47-.293.715-.961l.352-.926-4.43-12.738h3.797l2.262 7.687 2.285-7.687zm5.884 7.606q-4.5-.96-4.5-3.878 0-1.079.61-1.981.62-.902 1.781-1.441 1.16-.54 2.707-.54 1.629 0 2.848.528 1.218.516 1.875 1.453.656.926.656 2.121h-3.539q0-.762-.457-1.183-.457-.434-1.395-.434-.773 0-1.242.363-.457.364-.457.938 0 .55.516.89.527.34 1.781.575 1.5.28 2.543.738 1.043.445 1.652 1.242.621.797.621 2.027 0 1.114-.668 2.004-.656.88-1.886 1.383-1.219.504-2.836.504-1.711 0-2.965-.621-1.242-.633-1.899-1.617-.644-.985-.644-2.051h3.34q.036.914.656 1.36.621.433 1.594.433.902 0 1.383-.34.492-.351.492-.937 0-.364-.223-.61-.21-.258-.773-.48-.551-.223-1.57-.446zm13.983 2.403q.574 0 .984-.082v2.66q-.914.328-2.086.328-3.727 0-3.727-3.797V9.899h-1.793V7.321h1.793v-3.14h3.54v3.14h2.132v2.578h-2.133v6.129q0 .75.293 1.031.293.27.997.27zm14.228-2.519h-8.016q.2 1.183.985 1.886.785.691 2.015.691.914 0 1.688-.34.785-.351 1.336-1.042l1.699 1.957q-.668.96-1.957 1.617-1.278.656-3 .656-1.946 0-3.387-.82-1.43-.82-2.203-2.227-.762-1.406-.762-3.105v-.446q0-1.898.715-3.386.715-1.489 2.063-2.32 1.347-.844 3.187-.844 1.793 0 3.059.761 1.265.762 1.922 2.168.656 1.395.656 3.293zm-3.469-2.65q-.024-1.03-.574-1.628-.54-.598-1.617-.598-1.008 0-1.582.668-.563.668-.739 1.84h4.512zm19.923-5.073q1.934 0 2.989 1.148 1.054 1.148 1.054 3.727v8.039h-3.539V11.95q0-.797-.21-1.23-.212-.446-.61-.61-.387-.164-.984-.164-.715 0-1.219.352-.504.34-.797.972.02.082.02.27V20h-3.54v-8.015q0-.797-.21-1.242-.211-.445-.61-.621-.386-.176-.996-.176-.68 0-1.183.304-.492.293-.797.844V20h-3.539V7.32h3.316l.118 1.419q.633-.797 1.547-1.22.926-.433 2.086-.433 1.172 0 2.016.48.855.47 1.312 1.442.633-.926 1.582-1.418.961-.504 2.203-.504zM201.398 2v18h-3.187l-.176-1.359q-1.243 1.594-3.212 1.594-1.535 0-2.66-.82-1.113-.832-1.699-2.285-.574-1.454-.574-3.317v-.246q0-1.934.574-3.398.586-1.465 1.7-2.274 1.124-.808 2.683-.808 1.805 0 3.012 1.37V2.001zm-5.672 15.376q1.488 0 2.133-1.266v-4.898q-.61-1.266-2.11-1.266-1.207 0-1.77.984-.55.985-.55 2.637v.246q0 1.629.54 2.602.55.96 1.757.96z" fill="currentColor"/>
+    <path d="M45 13L63 3v20z" fill="#30d475"/>
+    <circle cx="30" cy="13" r="9" fill="#30d475"/>
+</svg>
diff --git a/docs/favicon.svg b/docs/favicon.svg
index 9ffaf59..37985c3 100644
--- a/docs/favicon.svg
+++ b/docs/favicon.svg
@@ -1,4 +1,5 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
+    <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
     <g transform="translate(380 -506.52)">
         <rect ry="16.875" rx="16.875" y="2409.281" x="4128.568" height="90" width="90" fill="#201a26" transform="matrix(.17778 0 0 .17778 -1113.968 78.203)" stroke-width="5.625"/>
         <g fill="none" stroke="#fff" stroke-width="2">
diff --git a/docs/index.md b/docs/index.md
index c5d7f84..1b48630 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,10 +1,13 @@
 ---
 layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
 ---
 
+# System and Service Manager
+
 systemd is a suite of basic building blocks for a Linux system. It provides a system and service manager that runs as PID 1 and starts the rest of the system.
-  
-systemd provides aggressive parallelization capabilities, uses socket and D-Bus activation for starting services, offers on-demand starting of daemons, keeps track of processes using Linux control groups, maintains mount and automount points, and implements an elaborate transactional dependency-based service control logic. systemd supports SysV and LSB init scripts and works as a replacement for sysvinit. 
+
+systemd provides aggressive parallelization capabilities, uses socket and D-Bus activation for starting services, offers on-demand starting of daemons, keeps track of processes using Linux control groups, maintains mount and automount points, and implements an elaborate transactional dependency-based service control logic. systemd supports SysV and LSB init scripts and works as a replacement for sysvinit.
 
 Other parts include a logging daemon, utilities to control basic system configuration like the hostname, date, locale, maintain a list of logged-in users and running containers and virtual machines, system accounts, runtime directories and settings, and daemons to manage simple network configuration, network time synchronization, log forwarding, and name resolution.
 
@@ -30,63 +33,63 @@
 
 ---
 
-<pre style="color:white; background-color:black; font-size:smaller; padding:6pt 8pt">
-Welcome to <span style="color:blue">Fedora 20 (Heisenbug)</span>!
+<pre class="intro-code-block">
+Welcome to <span class="color-blue">Fedora 20 (Heisenbug)</span>!
 
-[  <span style="color:green">OK</span>  ] Reached target Remote File Systems.
-[  <span style="color:green">OK</span>  ] Listening on Delayed Shutdown Socket.
-[  <span style="color:green">OK</span>  ] Listening on /dev/initctl Compatibility Named Pipe.
-[  <span style="color:green">OK</span>  ] Reached target Paths.
-[  <span style="color:green">OK</span>  ] Reached target Encrypted Volumes.
-[  <span style="color:green">OK</span>  ] Listening on Journal Socket.
+[  <span class="color-green">OK</span>  ] Reached target Remote File Systems.
+[  <span class="color-green">OK</span>  ] Listening on Delayed Shutdown Socket.
+[  <span class="color-green">OK</span>  ] Listening on /dev/initctl Compatibility Named Pipe.
+[  <span class="color-green">OK</span>  ] Reached target Paths.
+[  <span class="color-green">OK</span>  ] Reached target Encrypted Volumes.
+[  <span class="color-green">OK</span>  ] Listening on Journal Socket.
          Mounting Huge Pages File System...
          Mounting POSIX Message Queue File System...
          Mounting Debug File System...
          Starting Journal Service...
-[  <span style="color:green">OK</span>  ] Started Journal Service.
+[  <span class="color-green">OK</span>  ] Started Journal Service.
          Mounting Configuration File System...
          Mounting FUSE Control File System...
-[  <span style="color:green">OK</span>  ] Created slice Root Slice.
-[  <span style="color:green">OK</span>  ] Created slice User and Session Slice.
-[  <span style="color:green">OK</span>  ] Created slice System Slice.
-[  <span style="color:green">OK</span>  ] Reached target Slices.
-[  <span style="color:green">OK</span>  ] Reached target Swap.
+[  <span class="color-green">OK</span>  ] Created slice Root Slice.
+[  <span class="color-green">OK</span>  ] Created slice User and Session Slice.
+[  <span class="color-green">OK</span>  ] Created slice System Slice.
+[  <span class="color-green">OK</span>  ] Reached target Slices.
+[  <span class="color-green">OK</span>  ] Reached target Swap.
          Mounting Temporary Directory...
-[  <span style="color:green">OK</span>  ] Reached target Local File Systems (Pre).
+[  <span class="color-green">OK</span>  ] Reached target Local File Systems (Pre).
          Starting Load Random Seed...
          Starting Load/Save Random Seed...
-[  <span style="color:green">OK</span>  ] Mounted Huge Pages File System.
-[  <span style="color:green">OK</span>  ] Mounted POSIX Message Queue File System.
-[  <span style="color:green">OK</span>  ] Mounted Debug File System.
-[  <span style="color:green">OK</span>  ] Mounted Configuration File System.
-[  <span style="color:green">OK</span>  ] Mounted FUSE Control File System.
-[  <span style="color:green">OK</span>  ] Mounted Temporary Directory.
-[  <span style="color:green">OK</span>  ] Started Load Random Seed.
-[  <span style="color:green">OK</span>  ] Started Load/Save Random Seed.
-[  <span style="color:green">OK</span>  ] Reached target Local File Systems.
+[  <span class="color-green">OK</span>  ] Mounted Huge Pages File System.
+[  <span class="color-green">OK</span>  ] Mounted POSIX Message Queue File System.
+[  <span class="color-green">OK</span>  ] Mounted Debug File System.
+[  <span class="color-green">OK</span>  ] Mounted Configuration File System.
+[  <span class="color-green">OK</span>  ] Mounted FUSE Control File System.
+[  <span class="color-green">OK</span>  ] Mounted Temporary Directory.
+[  <span class="color-green">OK</span>  ] Started Load Random Seed.
+[  <span class="color-green">OK</span>  ] Started Load/Save Random Seed.
+[  <span class="color-green">OK</span>  ] Reached target Local File Systems.
          Starting Recreate Volatile Files and Directories...
          Starting Trigger Flushing of Journal to Persistent Storage...
-[  <span style="color:green">OK</span>  ] Started Recreate Volatile Files and Directories.
+[  <span class="color-green">OK</span>  ] Started Recreate Volatile Files and Directories.
          Starting Record System Reboot/Shutdown in UTMP...
-[  <span style="color:green">OK</span>  ] Started Trigger Flushing of Journal to Persistent Storage.
-[  <span style="color:green">OK</span>  ] Started Record System Reboot/Shutdown in UTMP.
-[  <span style="color:green">OK</span>  ] Reached target System Initialization.
-[  <span style="color:green">OK</span>  ] Reached target Timers.
-[  <span style="color:green">OK</span>  ] Listening on D-Bus System Message Bus Socket.
-[  <span style="color:green">OK</span>  ] Reached target Sockets.
-[  <span style="color:green">OK</span>  ] Reached target Basic System.
+[  <span class="color-green">OK</span>  ] Started Trigger Flushing of Journal to Persistent Storage.
+[  <span class="color-green">OK</span>  ] Started Record System Reboot/Shutdown in UTMP.
+[  <span class="color-green">OK</span>  ] Reached target System Initialization.
+[  <span class="color-green">OK</span>  ] Reached target Timers.
+[  <span class="color-green">OK</span>  ] Listening on D-Bus System Message Bus Socket.
+[  <span class="color-green">OK</span>  ] Reached target Sockets.
+[  <span class="color-green">OK</span>  ] Reached target Basic System.
          Starting Permit User Sessions...
          Starting D-Bus System Message Bus...
-[  <span style="color:green">OK</span>  ] Started D-Bus System Message Bus.
+[  <span class="color-green">OK</span>  ] Started D-Bus System Message Bus.
          Starting Login Service...
          Starting Cleanup of Temporary Directories...
-[  <span style="color:green">OK</span>  ] Started Permit User Sessions.
-[  <span style="color:green">OK</span>  ] Started Cleanup of Temporary Directories.
+[  <span class="color-green">OK</span>  ] Started Permit User Sessions.
+[  <span class="color-green">OK</span>  ] Started Cleanup of Temporary Directories.
          Starting Console Getty...
-[  <span style="color:green">OK</span>  ] Started Console Getty.
-[  <span style="color:green">OK</span>  ] Reached target Login Prompts.
-[  <span style="color:green">OK</span>  ] Started Login Service.
-[  <span style="color:green">OK</span>  ] Reached target Multi-User System.
+[  <span class="color-green">OK</span>  ] Started Console Getty.
+[  <span class="color-green">OK</span>  ] Reached target Login Prompts.
+[  <span class="color-green">OK</span>  ] Started Login Service.
+[  <span class="color-green">OK</span>  ] Reached target Multi-User System.
 
 Fedora release 20 (Heisenbug)
 Kernel 3.9.2-200.fc18.x86_64 on an x86_64 (console)
diff --git a/docs/style.css b/docs/style.css
index 951e3f5..ee0fc7f 100644
--- a/docs/style.css
+++ b/docs/style.css
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
 @font-face {
     font-family: 'Heebo';
     src: url('fonts/heebo-regular.woff');
@@ -10,6 +12,58 @@
     font-weight: 600;
 }
 
+/* Variables */
+:root {
+  --sd-brand-black: hsl(270, 19%, 13%); /* #201A26; */
+  --sd-brand-green: hsl(145, 66%, 51%); /* #30D475; */
+  --sd-brand-white: #fff;
+
+  --sd-black: hsl(270, 7%, 13%);
+  --sd-green: hsl(145, 66%, 43%); /* #26b763 */
+  --sd-gray-extralight: hsl(30, 10%, 96%); /* #f6f5f4 */
+  --sd-gray-light: hsl(30, 10%, 92%);
+  --sd-gray: hsl(30, 10%, 85%);
+  --sd-gray-dark: hsl(257, 23%, 20%);
+  --sd-gray-extradark: hsl(257, 23%, 16%); /* #241f31 */
+  --sd-blue: hsl(200, 66%, 55%);
+
+  --sd-highlight-bg-light: rgba(255, 255, 255, 1);
+  --sd-highlight-bg-dark: rgba(0, 0, 0, .6);
+  --sd-highlight-inline-bg-light: rgba(0, 0, 0, 0.07);
+  --sd-highlight-inline-bg-dark: rgba(255, 255, 255, 0.1);
+
+  --sd-font-weight-normal: 400;
+  --sd-font-weight-bold: 600;
+
+  /* Light mode variables */
+  --sd-foreground-color: var(--sd-gray-extradark);
+  --sd-background-color: var(--sd-gray-extralight);
+  --sd-logo-color: var(--sd-brand-black);
+  --sd-link-color: var(--sd-green);
+  --sd-small-color: var(--sd-gray-dark);
+  --sd-highlight-bg: var(--sd-highlight-bg-light);
+  --sd-highlight-inline-bg: var(--sd-highlight-inline-bg-light);
+  --sd-link-font-weight: var(--sd-font-weight-bold);
+  --sd-table-row-bg: var(--sd-highlight-inline-bg-light);
+  --sd-table-row-hover-bg: var(--sd-gray);
+}
+
+@media (prefers-color-scheme: dark) {
+  :root {
+    color-scheme: dark;
+    --sd-foreground-color: var(--sd-gray);
+    --sd-background-color: var(--sd-black);
+    --sd-logo-color: var(--sd-brand-white);
+    --sd-link-color: var(--sd-brand-green);
+    --sd-small-color: var(--sd-gray);
+    --sd-highlight-bg: var(--sd-highlight-bg-dark);
+    --sd-highlight-inline-bg: var(--sd-highlight-inline-bg-dark);
+    --sd-link-font-weight: var(--sd-font-weight-normal);
+    --sd-table-row-bg: var(--sd-highlight-inline-bg-dark);
+    --sd-table-row-hover-bg: var(--sd-highlight-bg-dark);
+  }
+}
+
 /* Typography */
 * {
   -moz-box-sizing: border-box;
@@ -19,42 +73,43 @@
 html, body {
   margin: 0;
   padding: 0;
-  font-size: 16px;
+  font-size: 1rem;
   font-family: "Heebo", sans-serif;
   font-weight: 400;
   line-height: 1.6;
 }
 body {
-  color: #241f31;
-  background-color: #f6f5f4;
+  color: var(--sd-foreground-color);
+  background-color: var(--sd-background-color);
 }
 h1, h2, h3, h4, h5, h6 {
-  margin: 1rem 0 10px;
+  margin: 1rem 0 0.625rem;
   font-weight: 600;
   line-height: 1.25;
 }
 h1 {
   text-align: center;
-  font-size: 30px;
-  font-weight: 100;
+  font-size: 1.87rem;
+  font-weight: 400;
   font-style: normal;
   margin-bottom: 2rem;
 }
 @media screen and (min-width: 650px) {
   h1 {
-    margin-left: 10%;
-    margin-right: 10%;
-    font-size: 38px;
+    font-size: 2.375em;
   }
 }
 h2 {
-  margin-top: 3rem;
-  font-size: 1.2rem;
+  font-size: 1.25rem;
+  margin-top: 2.5em;
+}
+h3 {
+  font-size: 1.15rem;
 }
 a {
-  font-weight: 600;
+  font-weight: var(--sd-link-font-weight);
   text-decoration: none;
-  color: #26b763;
+  color: var(--sd-link-color);
   cursor: pointer;
 }
 a:hover {
@@ -64,7 +119,7 @@
   font-weight: 600;
 }
 small {
-  color: #777;
+  color: var(--sd-small-color);
 }
 hr {
   margin: 3rem auto 4rem;
@@ -73,34 +128,109 @@
 }
 
 /* Layout */
-.container {
+.container > * {
   width: 80%;
   margin-left: auto;
   margin-right: auto;
   max-width: 720px;
 }
 
+.container > table {
+  max-width: 1600px;
+}
+
+.container > h1 {
+  max-width: 530px;
+}
+
+/* Tables */
+table {
+  width: auto !important;
+  border-collapse: separate;
+  border-spacing: 0;
+  margin-top: 2em;
+  margin-bottom: 3em;
+  overflow-x: auto;
+  display: block; /* required for overflow-x auto on tables */
+}
+@media screen and (min-width: 768px) {
+  table {
+    display: table;
+    border-left: 1rem solid transparent;
+    border-right: 1rem solid transparent;
+  }
+}
+
+thead tr,
+tbody:first-child tr:nth-child(odd),
+thead + tbody tr:nth-child(even) {
+  background-color: var(--sd-table-row-bg);
+}
+
+tbody tr:hover {
+  background-color: var(--sd-table-row-hover-bg) !important;
+}
+
+th, td {
+  vertical-align: top;
+  text-align: left;
+  padding: .5rem;
+}
+
+th:first-child, td:first-child {
+  padding-left: 0.75rem;
+}
+
+th:last-child, td:last-child {
+  padding-right: 0.75rem;
+}
+
+/* Custom content */
+.intro-code-block {
+  background-color: var(--sd-brand-black);
+  color: var(--sd-brand-white);
+  font-size: 0.875rem;
+  padding: 1em;
+  overflow-x: auto;
+}
+@media (prefers-color-scheme: dark) {
+  .intro-code-block {
+    background-color: var(--sd-highlight-bg);
+  }
+}
+
 /* Singletons */
 .page-logo {
   display: block;
   padding: 5rem 0 3rem;
+  color: var(--sd-logo-color);
 }
-.page-logo > img {
+.page-logo > svg {
   display: block;
+  width: 12.625em;
+  height: auto;
   margin: 0 auto;
 }
 
 .brand-white {
-  background-color: #fff;
+  background-color: var(--sd-brand-white);
 }
 
 .brand-green {
-  background-color: #30D475;
+  background-color: var(--sd-brand-green);
 }
 
 .brand-black {
-  background-color: #201A26;
-  color: white;
+  background-color: var(--sd-brand-black);
+  color: var(--sd-brand-white);
+}
+
+.color-green {
+  color: var(--sd-brand-green);
+}
+
+.color-blue {
+  color: var(--sd-blue);
 }
 
 .page-link::after {
@@ -121,232 +251,324 @@
   vertical-align: top;
 }
 
-/* Github Code Highlighting */
+/* Rouge Code Highlight, github style */
+/* Generated with: rougify style github | sed '/background-color: #f8f8f8/d' */
 .highlight table td { padding: 5px; }
 .highlight table pre { margin: 0; }
-.highlight .cm {
-  color: #999988;
-  font-style: italic;
-}
-.highlight .cp {
-  color: #999999;
-  font-weight: bold;
-}
-.highlight .c1 {
-  color: #999988;
-  font-style: italic;
-}
-.highlight .cs {
-  color: #999999;
-  font-weight: bold;
-  font-style: italic;
-}
-.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf {
-  color: #999988;
-  font-style: italic;
-}
-.highlight .err {
-  color: #a61717;
-  background-color: #e3d2d2;
-}
-.highlight .gd {
-  color: #000000;
-  background-color: #ffdddd;
-}
-.highlight .ge {
-  color: #000000;
-  font-style: italic;
-}
-.highlight .gr {
-  color: #aa0000;
-}
-.highlight .gh {
-  color: #999999;
-}
-.highlight .gi {
-  color: #000000;
-  background-color: #ddffdd;
-}
-.highlight .go {
-  color: #888888;
-}
-.highlight .gp {
-  color: #555555;
-}
-.highlight .gs {
-  font-weight: bold;
-}
-.highlight .gu {
-  color: #aaaaaa;
-}
-.highlight .gt {
-  color: #aa0000;
-}
-.highlight .kc {
-  color: #000000;
-  font-weight: bold;
-}
-.highlight .kd {
-  color: #000000;
-  font-weight: bold;
-}
-.highlight .kn {
-  color: #000000;
-  font-weight: bold;
-}
-.highlight .kp {
-  color: #000000;
-  font-weight: bold;
-}
-.highlight .kr {
-  color: #000000;
-  font-weight: bold;
-}
-.highlight .kt {
-  color: #445588;
-  font-weight: bold;
-}
-.highlight .k, .highlight .kv {
-  color: #000000;
-  font-weight: bold;
-}
-.highlight .mf {
-  color: #009999;
-}
-.highlight .mh {
-  color: #009999;
-}
-.highlight .il {
-  color: #009999;
-}
-.highlight .mi {
-  color: #009999;
-}
-.highlight .mo {
-  color: #009999;
-}
-.highlight .m, .highlight .mb, .highlight .mx {
-  color: #009999;
-}
-.highlight .sb {
-  color: #d14;
-}
-.highlight .sc {
-  color: #d14;
-}
-.highlight .sd {
-  color: #d14;
-}
-.highlight .s2 {
-  color: #d14;
-}
-.highlight .se {
-  color: #d14;
-}
-.highlight .sh {
-  color: #d14;
-}
-.highlight .si {
-  color: #d14;
-}
-.highlight .sx {
-  color: #d14;
-}
-.highlight .sr {
-  color: #009926;
-}
-.highlight .s1 {
-  color: #d14;
-}
-.highlight .ss {
-  color: #990073;
-}
-.highlight .s, .highlight .sa, .highlight .dl {
-  color: #d14;
-}
-.highlight .na {
-  color: #008080;
-}
-.highlight .bp {
-  color: #999999;
-}
-.highlight .nb {
-  color: #0086B3;
-}
-.highlight .nc {
-  color: #445588;
-  font-weight: bold;
-}
-.highlight .no {
-  color: #008080;
-}
-.highlight .nd {
-  color: #3c5d5d;
-  font-weight: bold;
-}
-.highlight .ni {
-  color: #800080;
-}
-.highlight .ne {
-  color: #990000;
-  font-weight: bold;
-}
-.highlight .nf, .highlight .fm {
-  color: #990000;
-  font-weight: bold;
-}
-.highlight .nl {
-  color: #990000;
-  font-weight: bold;
-}
-.highlight .nn {
-  color: #555555;
-}
-.highlight .nt {
-  color: #000080;
-}
-.highlight .vc {
-  color: #008080;
-}
-.highlight .vg {
-  color: #008080;
-}
-.highlight .vi {
-  color: #008080;
-}
-.highlight .nv, .highlight .vm {
-  color: #008080;
-}
-.highlight .ow {
-  color: #000000;
-  font-weight: bold;
-}
-.highlight .o {
-  color: #000000;
-  font-weight: bold;
-}
-.highlight .w {
-  color: #bbbbbb;
-}
-.highlight {
-  background-color: #f8f8f8;
+
+@media (prefers-color-scheme: light) {
+  .highlight .cm {
+    color: #999988;
+    font-style: italic;
+  }
+  .highlight .cp {
+    color: #999999;
+    font-weight: bold;
+  }
+  .highlight .c1 {
+    color: #999988;
+    font-style: italic;
+  }
+  .highlight .cs {
+    color: #999999;
+    font-weight: bold;
+    font-style: italic;
+  }
+  .highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf {
+    color: #999988;
+    font-style: italic;
+  }
+  .highlight .err {
+    color: #a61717;
+    background-color: #e3d2d2;
+  }
+  .highlight .gd {
+    color: #000000;
+    background-color: #ffdddd;
+  }
+  .highlight .ge {
+    color: #000000;
+    font-style: italic;
+  }
+  .highlight .gr {
+    color: #aa0000;
+  }
+  .highlight .gh {
+    color: #999999;
+  }
+  .highlight .gi {
+    color: #000000;
+    background-color: #ddffdd;
+  }
+  .highlight .go {
+    color: #888888;
+  }
+  .highlight .gp {
+    color: #555555;
+  }
+  .highlight .gs {
+    font-weight: bold;
+  }
+  .highlight .gu {
+    color: #aaaaaa;
+  }
+  .highlight .gt {
+    color: #aa0000;
+  }
+  .highlight .kc {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .kd {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .kn {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .kp {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .kr {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .kt {
+    color: #445588;
+    font-weight: bold;
+  }
+  .highlight .k, .highlight .kv {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .mf {
+    color: #009999;
+  }
+  .highlight .mh {
+    color: #009999;
+  }
+  .highlight .il {
+    color: #009999;
+  }
+  .highlight .mi {
+    color: #009999;
+  }
+  .highlight .mo {
+    color: #009999;
+  }
+  .highlight .m, .highlight .mb, .highlight .mx {
+    color: #009999;
+  }
+  .highlight .sa {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .sb {
+    color: #d14;
+  }
+  .highlight .sc {
+    color: #d14;
+  }
+  .highlight .sd {
+    color: #d14;
+  }
+  .highlight .s2 {
+    color: #d14;
+  }
+  .highlight .se {
+    color: #d14;
+  }
+  .highlight .sh {
+    color: #d14;
+  }
+  .highlight .si {
+    color: #d14;
+  }
+  .highlight .sx {
+    color: #d14;
+  }
+  .highlight .sr {
+    color: #009926;
+  }
+  .highlight .s1 {
+    color: #d14;
+  }
+  .highlight .ss {
+    color: #990073;
+  }
+  .highlight .s, .highlight .dl {
+    color: #d14;
+  }
+  .highlight .na {
+    color: #008080;
+  }
+  .highlight .bp {
+    color: #999999;
+  }
+  .highlight .nb {
+    color: #0086B3;
+  }
+  .highlight .nc {
+    color: #445588;
+    font-weight: bold;
+  }
+  .highlight .no {
+    color: #008080;
+  }
+  .highlight .nd {
+    color: #3c5d5d;
+    font-weight: bold;
+  }
+  .highlight .ni {
+    color: #800080;
+  }
+  .highlight .ne {
+    color: #990000;
+    font-weight: bold;
+  }
+  .highlight .nf, .highlight .fm {
+    color: #990000;
+    font-weight: bold;
+  }
+  .highlight .nl {
+    color: #990000;
+    font-weight: bold;
+  }
+  .highlight .nn {
+    color: #555555;
+  }
+  .highlight .nt {
+    color: #000080;
+  }
+  .highlight .vc {
+    color: #008080;
+  }
+  .highlight .vg {
+    color: #008080;
+  }
+  .highlight .vi {
+    color: #008080;
+  }
+  .highlight .nv, .highlight .vm {
+    color: #008080;
+  }
+  .highlight .ow {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .o {
+    color: #000000;
+    font-weight: bold;
+  }
+  .highlight .w {
+    color: #bbbbbb;
+  }
 }
 
+@media (prefers-color-scheme: dark) {
+  /* rouge "base16.dark" code highlight */
+  /* generated with: rougify style base16.dark | sed '/background-color: #151515/d' */
+  .highlight, .highlight .w {
+    color: #d0d0d0;
+  }
+  .highlight .err {
+    color: #151515;
+    background-color: #ac4142;
+  }
+  .highlight .c, .highlight .ch, .highlight .cd, .highlight .cm, .highlight .cpf, .highlight .c1, .highlight .cs {
+    color: #505050;
+  }
+  .highlight .cp {
+    color: #f4bf75;
+  }
+  .highlight .nt {
+    color: #f4bf75;
+  }
+  .highlight .o, .highlight .ow {
+    color: #d0d0d0;
+  }
+  .highlight .p, .highlight .pi {
+    color: #d0d0d0;
+  }
+  .highlight .gi {
+    color: #90a959;
+  }
+  .highlight .gd {
+    color: #ac4142;
+  }
+  .highlight .gh {
+    color: #6a9fb5;
+    font-weight: bold;
+  }
+  .highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {
+    color: #aa759f;
+  }
+  .highlight .kc {
+    color: #d28445;
+  }
+  .highlight .kt {
+    color: #d28445;
+  }
+  .highlight .kd {
+    color: #d28445;
+  }
+  .highlight .s, .highlight .sb, .highlight .sc, .highlight .dl, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {
+    color: #90a959;
+  }
+  .highlight .sa {
+    color: #aa759f;
+  }
+  .highlight .sr {
+    color: #75b5aa;
+  }
+  .highlight .si {
+    color: #8f5536;
+  }
+  .highlight .se {
+    color: #8f5536;
+  }
+  .highlight .nn {
+    color: #f4bf75;
+  }
+  .highlight .nc {
+    color: #f4bf75;
+  }
+  .highlight .no {
+    color: #f4bf75;
+  }
+  .highlight .na {
+    color: #6a9fb5;
+  }
+  .highlight .m, .highlight .mb, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mx {
+    color: #90a959;
+  }
+  .highlight .ss {
+    color: #90a959;
+  }
+}
 
 /* Code Blocks */
 .highlighter-rouge {
   padding: 2px 1rem;
   border-radius: 5px;
-  background-color: white;
+  color: var(--sd-foreground-color);
+  background-color: var(--sd-highlight-bg);
 
   overflow: auto;
 }
-.highlighter-rouge * {
-  background-color: white;
+.highlighter-rouge .highlight .err {
+  background: transparent !important;
+  color: inherit !important;
 }
 
 /* Inline Code */
 code.highlighter-rouge {
   padding: 2px 6px;
-  background-color: rgba(0,0,0, 0.07);
+  background-color: var(--sd-highlight-inline-bg);
+}
+
+a code.highlighter-rouge {
+  color: inherit;
 }
diff --git a/docs/sysvinit/meson.build b/docs/sysvinit/meson.build
index 0a19353..64476a5 100644
--- a/docs/sysvinit/meson.build
+++ b/docs/sysvinit/meson.build
@@ -4,7 +4,6 @@
         'README',
         input : 'README.in',
         output : 'README',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : conf.get('HAVE_SYSV_COMPAT') == 1,
         install_dir : sysvinit_path)
diff --git a/docs/var-log/README b/docs/var-log/README.logs
similarity index 100%
rename from docs/var-log/README
rename to docs/var-log/README.logs
diff --git a/docs/var-log/meson.build b/docs/var-log/meson.build
index ba79577..35f756c 100644
--- a/docs/var-log/meson.build
+++ b/docs/var-log/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 if conf.get('HAVE_SYSV_COMPAT') == 1 and get_option('create-log-dirs')
-        install_data('README',
-                     install_dir : '/var/log')
+        install_data('README.logs',
+                     install_dir : docdir)
 endif
diff --git a/factory/templates/locale.conf.in b/factory/templates/locale.conf.in
new file mode 100644
index 0000000..af93d04
--- /dev/null
+++ b/factory/templates/locale.conf.in
@@ -0,0 +1,3 @@
+# This is the fallback locale configuration provided by systemd.
+
+LANG="{{ SYSTEMD_DEFAULT_LOCALE }}"
diff --git a/factory/templates/meson.build b/factory/templates/meson.build
new file mode 100644
index 0000000..ece2c64
--- /dev/null
+++ b/factory/templates/meson.build
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+factory_etc_dir = factorydir / 'etc'
+
+custom_target(
+        'locale.conf',
+        input : 'locale.conf.in',
+        output : 'locale.conf',
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
+        install : true,
+        install_dir : factory_etc_dir)
diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb
index aaa3326..69b00c9 100644
--- a/hwdb.d/20-OUI.hwdb
+++ b/hwdb.d/20-OUI.hwdb
@@ -987,7 +987,7 @@
  ID_OUI_FROM_DATABASE=Tesco Controls, Inc.
 
 OUI:000147*
- ID_OUI_FROM_DATABASE=Zhone Technologies
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:000148*
  ID_OUI_FROM_DATABASE=X-traWeb Inc.
@@ -1881,7 +1881,7 @@
  ID_OUI_FROM_DATABASE=Crewave Co., Ltd.
 
 OUI:000271*
- ID_OUI_FROM_DATABASE=Zhone Technologies
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:000272*
  ID_OUI_FROM_DATABASE=CC&C Technologies, Inc.
@@ -2427,7 +2427,7 @@
  ID_OUI_FROM_DATABASE=Iwasaki Information Systems Co., Ltd.
 
 OUI:000327*
- ID_OUI_FROM_DATABASE=ACT'L
+ ID_OUI_FROM_DATABASE=HMS Industrial Networks
 
 OUI:000328*
  ID_OUI_FROM_DATABASE=Mace Group, Inc.
@@ -2553,7 +2553,7 @@
  ID_OUI_FROM_DATABASE=BTICINO SPA
 
 OUI:000351*
- ID_OUI_FROM_DATABASE=Diebold, Inc.
+ ID_OUI_FROM_DATABASE=Diebold Nixdorf
 
 OUI:000352*
  ID_OUI_FROM_DATABASE=Colubris Networks
@@ -2568,7 +2568,7 @@
  ID_OUI_FROM_DATABASE=TeraBeam Internet Systems
 
 OUI:000356*
- ID_OUI_FROM_DATABASE=Wincor Nixdorf International GmbH
+ ID_OUI_FROM_DATABASE=Diebold Nixdorf
 
 OUI:000357*
  ID_OUI_FROM_DATABASE=Intervoice-Brite, Inc.
@@ -2841,7 +2841,7 @@
  ID_OUI_FROM_DATABASE=Xsense Technology Corp.
 
 OUI:0003B1*
- ID_OUI_FROM_DATABASE=Hospira Inc.
+ ID_OUI_FROM_DATABASE=ICU Medical, Inc.
 
 OUI:0003B2*
  ID_OUI_FROM_DATABASE=Radware
@@ -6882,7 +6882,7 @@
  ID_OUI_FROM_DATABASE=Helix Technology Inc.
 
 OUI:00090F*
- ID_OUI_FROM_DATABASE=Fortinet Inc.
+ ID_OUI_FROM_DATABASE=Fortinet, Inc.
 
 OUI:000910*
  ID_OUI_FROM_DATABASE=Simple Access Inc.
@@ -7032,7 +7032,7 @@
  ID_OUI_FROM_DATABASE=AGFEO GmbH & Co. KG
 
 OUI:000941*
- ID_OUI_FROM_DATABASE=Allied Telesis R&D Center K.K.
+ ID_OUI_FROM_DATABASE=Allied Telesis K.K.
 
 OUI:000942*
  ID_OUI_FROM_DATABASE=Wireless Technologies, Inc
@@ -7506,7 +7506,7 @@
  ID_OUI_FROM_DATABASE=Samjin Information & Communications Co., Ltd.
 
 OUI:0009DF*
- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
+ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
 
 OUI:0009E0*
  ID_OUI_FROM_DATABASE=XEMICS S.A.
@@ -8544,7 +8544,7 @@
  ID_OUI_FROM_DATABASE=Keisoku Giken Co.,Ltd.
 
 OUI:000B3A*
- ID_OUI_FROM_DATABASE=PESA
+ ID_OUI_FROM_DATABASE=PESA Inc.
 
 OUI:000B3B*
  ID_OUI_FROM_DATABASE=devolo AG
@@ -9114,7 +9114,7 @@
  ID_OUI_FROM_DATABASE=NIDEK CO.,LTD
 
 OUI:000BF8*
- ID_OUI_FROM_DATABASE=Infinera
+ ID_OUI_FROM_DATABASE=Infinera, Inc.
 
 OUI:000BF9*
  ID_OUI_FROM_DATABASE=Gemstone Communications, Inc.
@@ -9828,7 +9828,7 @@
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
 OUI:000CE6*
- ID_OUI_FROM_DATABASE=Fortinet Inc.
+ ID_OUI_FROM_DATABASE=Fortinet, Inc.
 
 OUI:000CE7*
  ID_OUI_FROM_DATABASE=MediaTek Inc.
@@ -10917,7 +10917,7 @@
  ID_OUI_FROM_DATABASE=Thomson Telecom Belgium
 
 OUI:000E51*
- ID_OUI_FROM_DATABASE=tecna elettronica srl
+ ID_OUI_FROM_DATABASE=TECNA SpA
 
 OUI:000E52*
  ID_OUI_FROM_DATABASE=Optium Corporation
@@ -12918,7 +12918,7 @@
  ID_OUI_FROM_DATABASE=SELSIUS SYSTEMS, INC.
 
 OUI:0010EC*
- ID_OUI_FROM_DATABASE=RPCG, LLC
+ ID_OUI_FROM_DATABASE=Embedded Planet
 
 OUI:0010ED*
  ID_OUI_FROM_DATABASE=SUNDANCE TECHNOLOGY, INC.
@@ -14475,7 +14475,7 @@
  ID_OUI_FROM_DATABASE=Brocade Communications Systems LLC
 
 OUI:0012F3*
- ID_OUI_FROM_DATABASE=connectBlue AB
+ ID_OUI_FROM_DATABASE=u-blox AG
 
 OUI:0012F4*
  ID_OUI_FROM_DATABASE=Belco International Co.,Ltd.
@@ -15717,7 +15717,7 @@
  ID_OUI_FROM_DATABASE=ASP Corporation
 
 OUI:001491*
- ID_OUI_FROM_DATABASE=Daniels Electronics Ltd. dbo Codan Rado Communications
+ ID_OUI_FROM_DATABASE=Daniels Electronics Ltd. dba Codan Radio Communications
 
 OUI:001492*
  ID_OUI_FROM_DATABASE=Liteon, Mobile Media Solution SBU
@@ -16377,7 +16377,7 @@
  ID_OUI_FROM_DATABASE=SANE SYSTEM CO., LTD
 
 OUI:00156D*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:00156E*
  ID_OUI_FROM_DATABASE=A. W. Communication Systems Ltd
@@ -16884,7 +16884,7 @@
  ID_OUI_FROM_DATABASE=Nittan Company, Limited
 
 OUI:001616*
- ID_OUI_FROM_DATABASE=BROWAN COMMUNICATION INC.
+ ID_OUI_FROM_DATABASE=BROWAN COMMUNICATIONS INCORPORATION
 
 OUI:001617*
  ID_OUI_FROM_DATABASE=MSI
@@ -18390,7 +18390,7 @@
  ID_OUI_FROM_DATABASE=Brilliant Telecommunications
 
 OUI:00180C*
- ID_OUI_FROM_DATABASE=Optelian Access Networks
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:00180D*
  ID_OUI_FROM_DATABASE=Terabytes Server Storage Tech Corp
@@ -19842,7 +19842,7 @@
  ID_OUI_FROM_DATABASE=SHENZHEN LINNKING ELECTRONICS CO.,LTD
 
 OUI:0019F0*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:0019F1*
  ID_OUI_FROM_DATABASE=Star Communication Network Technology Co.,Ltd
@@ -19935,7 +19935,7 @@
  ID_OUI_FROM_DATABASE=Cheng Uei Precision Industry Co.,Ltd
 
 OUI:001A0F*
- ID_OUI_FROM_DATABASE=Sistemas Avanzados de Control, S.A.
+ ID_OUI_FROM_DATABASE=ARTECHE GROUP
 
 OUI:001A10*
  ID_OUI_FROM_DATABASE=LUCENT TRANS ELECTRONICS CO.,LTD
@@ -20388,7 +20388,7 @@
  ID_OUI_FROM_DATABASE=BRN Phoenix
 
 OUI:001AA6*
- ID_OUI_FROM_DATABASE=Telefunken Radio Communication Systems GmbH &CO.KG
+ ID_OUI_FROM_DATABASE=Elbit Systems Deutschland GmbH & Co. KG
 
 OUI:001AA7*
  ID_OUI_FROM_DATABASE=Torian Wireless
@@ -20595,7 +20595,7 @@
  ID_OUI_FROM_DATABASE=Radio Terminal Systems Pty Ltd
 
 OUI:001AEB*
- ID_OUI_FROM_DATABASE=Allied Telesis R&D Center K.K.
+ ID_OUI_FROM_DATABASE=Allied Telesis K.K.
 
 OUI:001AEC*
  ID_OUI_FROM_DATABASE=Keumbee Electronics Co.,Ltd.
@@ -20751,7 +20751,7 @@
  ID_OUI_FROM_DATABASE=HART Communication Foundation
 
 OUI:001B1F*
- ID_OUI_FROM_DATABASE=DELTA - Danish Electronics, Light & Acoustics
+ ID_OUI_FROM_DATABASE=FORCE Technology
 
 OUI:001B20*
  ID_OUI_FROM_DATABASE=TPine Technology
@@ -23763,7 +23763,7 @@
  ID_OUI_FROM_DATABASE=Teltonika
 
 OUI:001E43*
- ID_OUI_FROM_DATABASE=AISIN AW CO.,LTD.
+ ID_OUI_FROM_DATABASE=AISIN CORPORATION
 
 OUI:001E44*
  ID_OUI_FROM_DATABASE=SANTEC
@@ -23898,7 +23898,7 @@
  ID_OUI_FROM_DATABASE=Magna-Power Electronics, Inc.
 
 OUI:001E70*
- ID_OUI_FROM_DATABASE=Cobham Antenna Systems
+ ID_OUI_FROM_DATABASE=Chelton Limited
 
 OUI:001E71*
  ID_OUI_FROM_DATABASE=MIrcom Group of Companies
@@ -27999,7 +27999,7 @@
  ID_OUI_FROM_DATABASE=SMC Corporation
 
 OUI:0023C7*
- ID_OUI_FROM_DATABASE=AVSystem
+ ID_OUI_FROM_DATABASE=AVSystem sp. z o. o.
 
 OUI:0023C8*
  ID_OUI_FROM_DATABASE=TEAM-R
@@ -28041,7 +28041,7 @@
  ID_OUI_FROM_DATABASE=Texas Instruments
 
 OUI:0023D5*
- ID_OUI_FROM_DATABASE=WAREMA electronic GmbH
+ ID_OUI_FROM_DATABASE=WAREMA Renkhoff SE
 
 OUI:0023D6*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -28734,7 +28734,7 @@
  ID_OUI_FROM_DATABASE=Sony Corporation
 
 OUI:0024BF*
- ID_OUI_FROM_DATABASE=CIAT
+ ID_OUI_FROM_DATABASE=Carrier Culoz SA
 
 OUI:0024C0*
  ID_OUI_FROM_DATABASE=NTI COMODO INC
@@ -29592,7 +29592,7 @@
  ID_OUI_FROM_DATABASE=Probits Co., LTD.
 
 OUI:0025DF*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Taser International Inc.
 
 OUI:0025E0*
  ID_OUI_FROM_DATABASE=CeedTec Sdn Bhd
@@ -30063,7 +30063,7 @@
  ID_OUI_FROM_DATABASE=PARROT SA
 
 OUI:00267F*
- ID_OUI_FROM_DATABASE=Zenterio AB
+ ID_OUI_FROM_DATABASE=Oregan Networks Ltd.
 
 OUI:002680*
  ID_OUI_FROM_DATABASE=SIL3 Pty.Ltd
@@ -30552,7 +30552,7 @@
  ID_OUI_FROM_DATABASE=Shenzhen Baoan Fenda Industrial Co., Ltd
 
 OUI:002722*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:002790*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -30587,6 +30587,9 @@
 OUI:002B67*
  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
 
+OUI:002BF5*
+ ID_OUI_FROM_DATABASE=BUFFALO.INC
+
 OUI:002CC8*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -30735,7 +30738,7 @@
  ID_OUI_FROM_DATABASE=SOUTHERN INFORMATION
 
 OUI:00302B*
- ID_OUI_FROM_DATABASE=INALP NETWORKS, INC.
+ ID_OUI_FROM_DATABASE=Inalp Solutions AG
 
 OUI:00302C*
  ID_OUI_FROM_DATABASE=SYLANTRO SYSTEMS CORPORATION
@@ -30852,7 +30855,7 @@
  ID_OUI_FROM_DATABASE=ORBIT AVIONIC & COMMUNICATION
 
 OUI:003052*
- ID_OUI_FROM_DATABASE=ELASTIC NETWORKS
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:003053*
  ID_OUI_FROM_DATABASE=Basler AG
@@ -31373,6 +31376,9 @@
 OUI:0030FF*
  ID_OUI_FROM_DATABASE=DataFab Systems Inc.
 
+OUI:003126*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:003146*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
@@ -31475,6 +31481,9 @@
 OUI:003DE8*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
+OUI:003E73*
+ ID_OUI_FROM_DATABASE=Mist Systems, Inc.
+
 OUI:003EE1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -32877,7 +32886,7 @@
  ID_OUI_FROM_DATABASE=MASPRO DENKOH CORP.
 
 OUI:0050CA*
- ID_OUI_FROM_DATABASE=NET TO NET TECHNOLOGIES
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:0050CB*
  ID_OUI_FROM_DATABASE=JETTER
@@ -33101,6 +33110,9 @@
 OUI:00562B*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:00566D*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:0056CD*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -33110,6 +33122,9 @@
 OUI:0057D2*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:005828*
+ ID_OUI_FROM_DATABASE=Axon Networks Inc.
+
 OUI:00583F*
  ID_OUI_FROM_DATABASE=PC Aquarius
 
@@ -33143,6 +33158,9 @@
 OUI:005CB1*
  ID_OUI_FROM_DATABASE=Gospell DIGITAL TECHNOLOGY CO., LTD
 
+OUI:005CC2*
+ ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+
 OUI:005D03*
  ID_OUI_FROM_DATABASE=Xilinx, Inc
 
@@ -34913,8 +34931,11 @@
 OUI:0081F9*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:00841E*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
 OUI:0084ED*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=LEXMARK INTERNATIONAL, INC.
 
 OUI:00869C*
  ID_OUI_FROM_DATABASE=Palo Alto Networks
@@ -35756,6 +35777,9 @@
 OUI:00927D*
  ID_OUI_FROM_DATABASE=Ficosa Internationa(Taicang) C0.,Ltd.
 
+OUI:0092A5*
+ ID_OUI_FROM_DATABASE=LG Innotek
+
 OUI:0092FA*
  ID_OUI_FROM_DATABASE=SHENZHEN WISKY TECHNOLOGY CO.,LTD
 
@@ -35886,7 +35910,7 @@
  ID_OUI_FROM_DATABASE=BINAR ELEKTRONIK AB
 
 OUI:00A01B*
- ID_OUI_FROM_DATABASE=PREMISYS COMMUNICATIONS, INC.
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:00A01C*
  ID_OUI_FROM_DATABASE=NASCENT NETWORKS CORPORATION
@@ -37077,7 +37101,7 @@
  ID_OUI_FROM_DATABASE=Teridian Semiconductor Corporation
 
 OUI:00C03A*
- ID_OUI_FROM_DATABASE=MEN-MIKRO ELEKTRONIK GMBH
+ ID_OUI_FROM_DATABASE=duagon Germany GmbH
 
 OUI:00C03B*
  ID_OUI_FROM_DATABASE=MULTIACCESS COMPUTING CORP.
@@ -37679,6 +37703,9 @@
 OUI:00C1B1*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:00C28F*
+ ID_OUI_FROM_DATABASE=Allied Telesis K.K.
+
 OUI:00C2C6*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -37694,6 +37721,9 @@
 OUI:00C52C*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:00C585*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:00C5DB*
  ID_OUI_FROM_DATABASE=Datatech Sistemas Digitales Avanzados SL
 
@@ -39300,7 +39330,7 @@
  ID_OUI_FROM_DATABASE=DATAX NV
 
 OUI:00E0DF*
- ID_OUI_FROM_DATABASE=DZS GmbH
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:00E0E0*
  ID_OUI_FROM_DATABASE=SI ELECTRONICS, LTD.
@@ -39428,6 +39458,9 @@
 OUI:00E5F1*
  ID_OUI_FROM_DATABASE=BUFFALO.INC
 
+OUI:00E60E*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:00E666*
  ID_OUI_FROM_DATABASE=ARIMA Communications Corp.
 
@@ -39530,6 +39563,9 @@
 OUI:00FAB6*
  ID_OUI_FROM_DATABASE=Kontakt Micro-Location Sp z o.o.
 
+OUI:00FBF9*
+ ID_OUI_FROM_DATABASE=Axiado Corporation
+
 OUI:00FC58*
  ID_OUI_FROM_DATABASE=WebSilicon Ltd.
 
@@ -39596,15 +39632,24 @@
 OUI:02E6D3*
  ID_OUI_FROM_DATABASE=NIXDORF COMPUTER CORP.
 
+OUI:040067*
+ ID_OUI_FROM_DATABASE=Stanley Black & Decker
+
 OUI:04021F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:0402CA*
  ID_OUI_FROM_DATABASE=Shenzhen Vtsonic Co.,ltd
 
+OUI:040312*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:0403D6*
  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
 
+OUI:0404B8*
+ ID_OUI_FROM_DATABASE=China Hualu Panasonic AVC Networks Co., LTD.
+
 OUI:0404EA*
  ID_OUI_FROM_DATABASE=Valens Semiconductor Ltd.
 
@@ -39698,11 +39743,14 @@
 OUI:04180F*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:041892*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:0418B6*
  ID_OUI_FROM_DATABASE=Private
 
 OUI:0418D6*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:04197F*
  ID_OUI_FROM_DATABASE=Grasphere Japan
@@ -39791,9 +39839,15 @@
 OUI:043110*
  ID_OUI_FROM_DATABASE=Inspur Group Co., Ltd.
 
+OUI:043201*
+ ID_OUI_FROM_DATABASE=Broadcom Limited
+
 OUI:0432F4*
  ID_OUI_FROM_DATABASE=Partron
 
+OUI:04331F*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:043385*
  ID_OUI_FROM_DATABASE=Nanchang BlackShark Co.,Ltd.
 
@@ -39809,6 +39863,9 @@
 OUI:043604*
  ID_OUI_FROM_DATABASE=Gyeyoung I&T
 
+OUI:0436B8*
+ ID_OUI_FROM_DATABASE=I&C Technology
+
 OUI:043855*
  ID_OUI_FROM_DATABASE=SCOPUS INTERNATIONAL-BELGIUM
 
@@ -39836,6 +39893,9 @@
 OUI:04421A*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:0443FD*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:0444A1*
  ID_OUI_FROM_DATABASE=TELECON GALICIA,S.A.
 
@@ -39851,6 +39911,9 @@
 OUI:0446CF*
  ID_OUI_FROM_DATABASE=Beijing Venustech Cybervision Co.,Ltd.
 
+OUI:04472A*
+ ID_OUI_FROM_DATABASE=Palo Alto Networks
+
 OUI:04489A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -39866,6 +39929,9 @@
 OUI:044AC6*
  ID_OUI_FROM_DATABASE=Aipon Electronics Co., Ltd
 
+OUI:044BA5*
+ ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+
 OUI:044BED*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -39929,6 +39995,9 @@
 OUI:04572F*
  ID_OUI_FROM_DATABASE=Sertel Electronics UK Ltd
 
+OUI:045747*
+ ID_OUI_FROM_DATABASE=GoPro
+
 OUI:04586F*
  ID_OUI_FROM_DATABASE=Sichuan Whayer information industry Co.,LTD
 
@@ -40010,6 +40079,9 @@
 OUI:046E49*
  ID_OUI_FROM_DATABASE=TaiYear Electronic Technology (Suzhou) Co., Ltd
 
+OUI:047056*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
 OUI:0470BC*
  ID_OUI_FROM_DATABASE=Globalstar Inc.
 
@@ -40119,7 +40191,7 @@
  ID_OUI_FROM_DATABASE=moobox CO., Ltd.
 
 OUI:047F0E*
- ID_OUI_FROM_DATABASE=Barrot Technology Limited
+ ID_OUI_FROM_DATABASE=Barrot Technology Co.,LTD
 
 OUI:04819B*
  ID_OUI_FROM_DATABASE=SKY UK LIMITED
@@ -40130,6 +40202,9 @@
 OUI:04848A*
  ID_OUI_FROM_DATABASE=7INOVA TECHNOLOGY LIMITED
 
+OUI:048680*
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
+
 OUI:04885F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -40208,6 +40283,9 @@
 OUI:049C62*
  ID_OUI_FROM_DATABASE=BMT Medical Technology s.r.o.
 
+OUI:049D05*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:049DFE*
  ID_OUI_FROM_DATABASE=Hivesystem
 
@@ -40215,7 +40293,7 @@
  ID_OUI_FROM_DATABASE=Smobile Co., Ltd.
 
 OUI:049F15*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Humane
 
 OUI:049F81*
  ID_OUI_FROM_DATABASE=NETSCOUT SYSTEMS INC
@@ -40238,15 +40316,24 @@
 OUI:04A3F3*
  ID_OUI_FROM_DATABASE=Emicon
 
+OUI:04A526*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:04A741*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:04A81C*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:04A82A*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
 OUI:04AAE1*
  ID_OUI_FROM_DATABASE=BEIJING MICROVISION TECHNOLOGY CO.,LTD
 
+OUI:04AB08*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
+
 OUI:04AB18*
  ID_OUI_FROM_DATABASE=ELECOM CO.,LTD.
 
@@ -40274,6 +40361,9 @@
 OUI:04B466*
  ID_OUI_FROM_DATABASE=BSP Co., Ltd.
 
+OUI:04B4FE*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
 OUI:04B648*
  ID_OUI_FROM_DATABASE=ZENNER
 
@@ -40304,6 +40394,9 @@
 OUI:04BBF9*
  ID_OUI_FROM_DATABASE=Pavilion Data Systems Inc
 
+OUI:04BC6D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:04BC87*
  ID_OUI_FROM_DATABASE=Shenzhen JustLink Technology Co., LTD
 
@@ -40322,6 +40415,9 @@
 OUI:04BDBF*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:04BF1B*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:04BF6D*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
@@ -40434,7 +40530,7 @@
  ID_OUI_FROM_DATABASE=Silicon Laboratories
 
 OUI:04CE09*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:04CE14*
  ID_OUI_FROM_DATABASE=Wilocity LTD.
@@ -40550,6 +40646,9 @@
 OUI:04D9F5*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:04DA28*
+ ID_OUI_FROM_DATABASE=Chongqing Zhouhai Intelligent Technology Co., Ltd
+
 OUI:04DAD2*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -40724,6 +40823,9 @@
 OUI:04F5F4*
  ID_OUI_FROM_DATABASE=Proxim Wireless
 
+OUI:04F778*
+ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
+
 OUI:04F7E4*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -40742,6 +40844,9 @@
 OUI:04F9D9*
  ID_OUI_FROM_DATABASE=Speaker Electronic(Jiashan) Co.,Ltd
 
+OUI:04F9F8*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
 OUI:04FA3F*
  ID_OUI_FROM_DATABASE=Opticore Inc.
 
@@ -41204,6 +41309,9 @@
 OUI:080371*
  ID_OUI_FROM_DATABASE=KRG CORPORATE
 
+OUI:0804B4*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:080581*
  ID_OUI_FROM_DATABASE=Roku, Inc.
 
@@ -41213,6 +41321,9 @@
 OUI:0805E2*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:08085C*
+ ID_OUI_FROM_DATABASE=Luna Products
+
 OUI:0808C2*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -41261,6 +41372,9 @@
 OUI:08152F*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd. ARTIK
 
+OUI:0815AE*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
 OUI:081605*
  ID_OUI_FROM_DATABASE=Vodafone Italia S.p.A.
 
@@ -41285,6 +41399,12 @@
 OUI:0819A6*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:081A1E*
+ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
+
+OUI:081AFD*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:081C6E*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
@@ -41318,6 +41438,9 @@
 OUI:082525*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:082573*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:082697*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
@@ -41372,6 +41495,9 @@
 OUI:0827CE*
  ID_OUI_FROM_DATABASE=NAGANO KEIKI CO., LTD.
 
+OUI:082802*
+ ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+
 OUI:082AD0*
  ID_OUI_FROM_DATABASE=SRD Innovations Inc.
 
@@ -41444,6 +41570,9 @@
 OUI:083A88*
  ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
 
+OUI:083A8D*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:083AB8*
  ID_OUI_FROM_DATABASE=Shinoda Plasma Co., Ltd.
 
@@ -41477,6 +41606,9 @@
 OUI:0840F3*
  ID_OUI_FROM_DATABASE=Tenda Technology Co.,Ltd.Dongguan branch
 
+OUI:084218*
+ ID_OUI_FROM_DATABASE=Asyril SA
+
 OUI:084296*
  ID_OUI_FROM_DATABASE=Mobile Technology Solutions LLC
 
@@ -41486,6 +41618,9 @@
 OUI:084656*
  ID_OUI_FROM_DATABASE=VEO-LABS
 
+OUI:0846C7*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:08474C*
  ID_OUI_FROM_DATABASE=Nokia
 
@@ -41525,12 +41660,18 @@
 OUI:085240*
  ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH
 
+OUI:085411*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:0854BB*
  ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
 
 OUI:085531*
  ID_OUI_FROM_DATABASE=Routerboard.com
 
+OUI:08569B*
+ ID_OUI_FROM_DATABASE=WiZ
+
 OUI:085700*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -41576,6 +41717,9 @@
 OUI:086361*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:086518*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:0865F0*
  ID_OUI_FROM_DATABASE=JM Zengge Co., Ltd
 
@@ -41618,6 +41762,9 @@
 OUI:086DF2*
  ID_OUI_FROM_DATABASE=Shenzhen MIMOWAVE Technology Co.,Ltd
 
+OUI:086E9C*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:086F48*
  ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
 
@@ -41657,6 +41804,9 @@
 OUI:087A4C*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:087B12*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:087BAA*
  ID_OUI_FROM_DATABASE=SVYAZKOMPLEKTSERVICE, LLC
 
@@ -41729,6 +41879,12 @@
 OUI:0890BA*
  ID_OUI_FROM_DATABASE=Danlaw Inc
 
+OUI:089115*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
+OUI:0891A3*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:089204*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -41741,6 +41897,9 @@
 OUI:08952A*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:089542*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:0896AD*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -41894,6 +42053,9 @@
 OUI:08BFA0*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:08BFB8*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
 OUI:08C021*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -41903,6 +42065,9 @@
 OUI:08C0EB*
  ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
 
+OUI:08C3B3*
+ ID_OUI_FROM_DATABASE=TCL King Electrical Appliances(Huizhou)Co.,Ltd
+
 OUI:08C5E1*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
@@ -41919,7 +42084,7 @@
  ID_OUI_FROM_DATABASE=Toyou Feiji Electronics Co., Ltd.
 
 OUI:08CBE5*
- ID_OUI_FROM_DATABASE=R3 - Reliable Realtime Radio Communications GmbH
+ ID_OUI_FROM_DATABASE=R3 Solutions GmbH
 
 OUI:08CC27*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
@@ -41927,6 +42092,9 @@
 OUI:08CC68*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:08CC81*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:08CCA7*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -41990,6 +42158,9 @@
 OUI:08E689*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:08E6C9*
+ ID_OUI_FROM_DATABASE=Business-intelligence of Oriental Nations Corporation Ltd.
+
 OUI:08E7E5*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -42086,6 +42257,9 @@
 OUI:08EFAB*
  ID_OUI_FROM_DATABASE=SAYME WIRELESS SENSOR NETWORK
 
+OUI:08F1B3*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
 OUI:08F1B7*
  ID_OUI_FROM_DATABASE=Towerstream Corpration
 
@@ -42177,11 +42351,14 @@
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:08FF24*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:08FF44*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:0C014B*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:0C01DB*
  ID_OUI_FROM_DATABASE=Infinix mobility limited
 
@@ -42302,6 +42479,9 @@
 OUI:0C2D89*
  ID_OUI_FROM_DATABASE=QiiQ Communications Inc.
 
+OUI:0C2E57*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:0C2FB0*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -42311,6 +42491,9 @@
 OUI:0C31DC*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:0C3526*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:0C354F*
  ID_OUI_FROM_DATABASE=Nokia
 
@@ -42518,6 +42701,9 @@
 OUI:0C63FC*
  ID_OUI_FROM_DATABASE=Nanjing Signway Technology Co., Ltd
 
+OUI:0C6422*
+ ID_OUI_FROM_DATABASE=Beijing Wiseasy Technology Co.,Ltd.
+
 OUI:0C6803*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -42545,6 +42731,9 @@
 OUI:0C722C*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:0C7274*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
 OUI:0C72D9*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -42585,7 +42774,7 @@
  ID_OUI_FROM_DATABASE=Beijing L&S Lancom Platform Tech. Co., Ltd.
 
 OUI:0C73EBA*
- ID_OUI_FROM_DATABASE=Pi Innovo LLC
+ ID_OUI_FROM_DATABASE=Dana
 
 OUI:0C73EBB*
  ID_OUI_FROM_DATABASE=Synaccess Networks
@@ -42839,6 +43028,9 @@
 OUI:0C93FB*
  ID_OUI_FROM_DATABASE=BNS Solutions
 
+OUI:0C9505*
+ ID_OUI_FROM_DATABASE=The Chamberlain Group, Inc
+
 OUI:0C9541*
  ID_OUI_FROM_DATABASE=CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
 
@@ -42875,6 +43067,9 @@
 OUI:0C9E91*
  ID_OUI_FROM_DATABASE=Sankosha Corporation
 
+OUI:0C9F71*
+ ID_OUI_FROM_DATABASE=Dolphin Electronics (DongGuan) Co., Ltd.
+
 OUI:0CA06C*
  ID_OUI_FROM_DATABASE=Industrial Cyber Sensing Inc.
 
@@ -42911,6 +43106,9 @@
 OUI:0CAEBD*
  ID_OUI_FROM_DATABASE=Edifier International
 
+OUI:0CAF31*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:0CAF5A*
  ID_OUI_FROM_DATABASE=GENUS POWER INFRASTRUCTURES LIMITED
 
@@ -42968,6 +43166,9 @@
 OUI:0CBD51*
  ID_OUI_FROM_DATABASE=TCT mobile ltd
 
+OUI:0CBD75*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:0CBEF1*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -43037,6 +43238,51 @@
 OUI:0CCC26*
  ID_OUI_FROM_DATABASE=Airenetworks
 
+OUI:0CCC470*
+ ID_OUI_FROM_DATABASE=Shenzhen Jooan Technology  Co., Ltd
+
+OUI:0CCC471*
+ ID_OUI_FROM_DATABASE=General Industrial Controls Pvt Ltd
+
+OUI:0CCC472*
+ ID_OUI_FROM_DATABASE=Sun Yan International Trading Ltd.
+
+OUI:0CCC473*
+ ID_OUI_FROM_DATABASE=Shimane Masuda Electronics CO.,LTD.
+
+OUI:0CCC474*
+ ID_OUI_FROM_DATABASE=Qingdao Geesatcom Technology Co., Ltd
+
+OUI:0CCC475*
+ ID_OUI_FROM_DATABASE=DMECOM TELECOM CO.,LTD.
+
+OUI:0CCC476*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:0CCC477*
+ ID_OUI_FROM_DATABASE=Cyrus Audio LTD
+
+OUI:0CCC478*
+ ID_OUI_FROM_DATABASE=NINGBO QIXIANG INFORMATION TECHNOLOGY CO., LTD
+
+OUI:0CCC479*
+ ID_OUI_FROM_DATABASE=OptConnect
+
+OUI:0CCC47A*
+ ID_OUI_FROM_DATABASE=Rich Source Precision IND., Co., LTD.
+
+OUI:0CCC47B*
+ ID_OUI_FROM_DATABASE=Spot AI, Inc.
+
+OUI:0CCC47C*
+ ID_OUI_FROM_DATABASE=KUMI ELECTRONIC COMPONENTS
+
+OUI:0CCC47D*
+ ID_OUI_FROM_DATABASE=GODOX Photo Equipment Co., Ltd.
+
+OUI:0CCC47E*
+ ID_OUI_FROM_DATABASE=Foxconn Brasil Industria e Comercio Ltda
+
 OUI:0CCDD3*
  ID_OUI_FROM_DATABASE=EASTRIVER TECHNOLOGY CO., LTD.
 
@@ -43079,6 +43325,9 @@
 OUI:0CD86C*
  ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
 
+OUI:0CD923*
+ ID_OUI_FROM_DATABASE=GOCLOUD Networks(GAOKE Networks)
+
 OUI:0CD996*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -43244,6 +43493,9 @@
 OUI:0CF9C0*
  ID_OUI_FROM_DATABASE=SKY UK LIMITED
 
+OUI:0CFC18*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:0CFC83*
  ID_OUI_FROM_DATABASE=Airoha Technology Corp.,
 
@@ -43398,7 +43650,7 @@
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
 OUI:10090C*
- ID_OUI_FROM_DATABASE=Janome Sewing Machine Co., Ltd.
+ ID_OUI_FROM_DATABASE=JANOME Corporation
 
 OUI:1009F9*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
@@ -43454,6 +43706,9 @@
 OUI:1012B4*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
 
+OUI:1012D0*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:1012FB*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
@@ -43463,6 +43718,9 @@
 OUI:1013EE*
  ID_OUI_FROM_DATABASE=Justec International Technology INC.
 
+OUI:1015C1*
+ ID_OUI_FROM_DATABASE=Zhanzuo (Beijing) Technology Co., Ltd.
+
 OUI:10189E*
  ID_OUI_FROM_DATABASE=Elmo Motion Control
 
@@ -43538,6 +43796,9 @@
 OUI:102D96*
  ID_OUI_FROM_DATABASE=Looxcie Inc.
 
+OUI:102E00*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:102EAF*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -43655,6 +43916,9 @@
 OUI:104B46*
  ID_OUI_FROM_DATABASE=Mitsubishi Electric Corporation
 
+OUI:104C43*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:104D15*
  ID_OUI_FROM_DATABASE=Viaanix Inc
 
@@ -43734,7 +43998,7 @@
  ID_OUI_FROM_DATABASE=COSMO AIOT TECHNOLOGY CO LTD
 
 OUI:1055E4*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:105611*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -43769,6 +44033,9 @@
 OUI:105DDC*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:105F02*
+ ID_OUI_FROM_DATABASE=Private
+
 OUI:105F06*
  ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
 
@@ -43811,9 +44078,15 @@
 OUI:1065CF*
  ID_OUI_FROM_DATABASE=IQSIM
 
+OUI:106650*
+ ID_OUI_FROM_DATABASE=Robert Bosch JuP1
+
 OUI:106682*
  ID_OUI_FROM_DATABASE=NEC Platforms, Ltd.
 
+OUI:106838*
+ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+
 OUI:10683F*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
@@ -43895,6 +44168,9 @@
 OUI:1081B4*
  ID_OUI_FROM_DATABASE=Hunan Greatwall Galaxy Science and Technology Co.,Ltd.
 
+OUI:10823D*
+ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
+
 OUI:108286*
  ID_OUI_FROM_DATABASE=Luxshare Precision Industry Co.,Ltd
 
@@ -43964,6 +44240,9 @@
 OUI:1097BD*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:109826*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:109836*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -43985,6 +44264,12 @@
 OUI:109E3A*
  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
 
+OUI:109F41*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:109F4F*
+ ID_OUI_FROM_DATABASE=New H3C Intelligence Terminal Co., Ltd.
+
 OUI:109FA9*
  ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
 
@@ -44021,11 +44306,17 @@
 OUI:10A743*
  ID_OUI_FROM_DATABASE=SK Mtek Limited
 
+OUI:10A793*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
+OUI:10A829*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:10A932*
  ID_OUI_FROM_DATABASE=Beijing Cyber Cloud Technology Co. ,Ltd.
 
 OUI:10AE60*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
 OUI:10AEA5*
  ID_OUI_FROM_DATABASE=Duskrise inc.
@@ -44057,6 +44348,9 @@
 OUI:10B3D6*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:10B588*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:10B713*
  ID_OUI_FROM_DATABASE=Private
 
@@ -44078,21 +44372,33 @@
 OUI:10BAA5*
  ID_OUI_FROM_DATABASE=GANA I&C CO., LTD
 
+OUI:10BBF3*
+ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
+
 OUI:10BC97*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
 OUI:10BD18*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:10BD3A*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:10BD55*
  ID_OUI_FROM_DATABASE=Q-Lab Corporation
 
+OUI:10BE99*
+ ID_OUI_FROM_DATABASE=Netberg
+
 OUI:10BEF5*
  ID_OUI_FROM_DATABASE=D-Link International
 
 OUI:10BF48*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:10BF67*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:10C07C*
  ID_OUI_FROM_DATABASE=Blu-ray Disc Association
 
@@ -44114,6 +44420,9 @@
 OUI:10C3AB*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:10C4CA*
+ ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
+
 OUI:10C586*
  ID_OUI_FROM_DATABASE=BIO SOUND LAB CO., LTD.
 
@@ -44174,6 +44483,9 @@
 OUI:10CEE9*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:10CF0F*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:10D07A*
  ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
 
@@ -44192,6 +44504,9 @@
 OUI:10D561*
  ID_OUI_FROM_DATABASE=Tuya Smart Inc.
 
+OUI:10D680*
+ ID_OUI_FROM_DATABASE=Tendyron Corporation
+
 OUI:10D7B0*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -44205,10 +44520,10 @@
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
 OUI:10DCB60*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Apex Supply Chain Technologies
 
 OUI:10DCB61*
- ID_OUI_FROM_DATABASE=ABB Switzerland Ltd.
+ ID_OUI_FROM_DATABASE=Hitachi Energy Switzerland Ltd
 
 OUI:10DCB62*
  ID_OUI_FROM_DATABASE=CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
@@ -44267,6 +44582,9 @@
 OUI:10E177*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:10E2C9*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:10E2D5*
  ID_OUI_FROM_DATABASE=Qi Hardware Inc.
 
@@ -44291,6 +44609,9 @@
 OUI:10E7C6*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:10E840*
+ ID_OUI_FROM_DATABASE=ZOWEE TECHNOLOGY(HEYUAN) CO., LTD.
+
 OUI:10E878*
  ID_OUI_FROM_DATABASE=Nokia
 
@@ -44360,6 +44681,9 @@
 OUI:10FBF0*
  ID_OUI_FROM_DATABASE=KangSheng LTD.
 
+OUI:10FC33*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:10FC54*
  ID_OUI_FROM_DATABASE=Shany Electronic Co., Ltd.
 
@@ -44397,7 +44721,7 @@
  ID_OUI_FROM_DATABASE=SNK Technologies Co.,Ltd.
 
 OUI:140708*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=CP PLUS GMBH & CO. KG
 
 OUI:1407E0*
  ID_OUI_FROM_DATABASE=Abrantix AG
@@ -44426,6 +44750,9 @@
 OUI:140F42*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:140FA6*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
 OUI:14109F*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -44486,9 +44813,15 @@
 OUI:141A51*
  ID_OUI_FROM_DATABASE=Treetech Sistemas Digitais
 
+OUI:141A97*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:141AA3*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
+OUI:141AAA*
+ ID_OUI_FROM_DATABASE=Metal Work SpA
+
 OUI:141B30*
  ID_OUI_FROM_DATABASE=Shenzhen Yipingfang Network Technology Co., Ltd.
 
@@ -44552,6 +44885,9 @@
 OUI:14205E*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:142103*
+ ID_OUI_FROM_DATABASE=Calix Inc.
+
 OUI:142233*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -44567,6 +44903,9 @@
 OUI:1423D7*
  ID_OUI_FROM_DATABASE=EUTRONIX CO., LTD.
 
+OUI:1423F2*
+ ID_OUI_FROM_DATABASE=Broadcom Limited
+
 OUI:142475*
  ID_OUI_FROM_DATABASE=4DReplay, Inc
 
@@ -44594,6 +44933,9 @@
 OUI:142D4D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:142D79*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:142D8B*
  ID_OUI_FROM_DATABASE=Incipio Technologies, Inc
 
@@ -44708,6 +45050,9 @@
 OUI:1449BC*
  ID_OUI_FROM_DATABASE=DrayTek Corp.
 
+OUI:1449D4*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:1449E0*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
@@ -44855,9 +45200,15 @@
 OUI:14612F*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
+OUI:1461A4*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
 OUI:146308*
  ID_OUI_FROM_DATABASE=JABIL CIRCUIT (SHANGHAI) LTD.
 
+OUI:14656A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:1466B7*
  ID_OUI_FROM_DATABASE=Advanced Design Technology Pty Ltd
 
@@ -44918,12 +45269,24 @@
 OUI:147EA1*
  ID_OUI_FROM_DATABASE=Britania Eletrônicos S.A.
 
+OUI:147F0F*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:14825B*
  ID_OUI_FROM_DATABASE=Hefei Radio Communication Technology Co., Ltd
 
 OUI:148430*
  ID_OUI_FROM_DATABASE=MITAC COMPUTING TECHNOLOGY CORPORATION
 
+OUI:148473*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:148477*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
+OUI:148509*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:14857F*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -44984,6 +45347,9 @@
 OUI:1495CE*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:14962D*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:1496E5*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -45023,6 +45389,9 @@
 OUI:149F3C*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:149F43*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
 OUI:149FB6*
  ID_OUI_FROM_DATABASE=GUANGDONG GENIUS TECHNOLOGY CO., LTD.
 
@@ -45047,6 +45416,9 @@
 OUI:14A3B4*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:14A417*
+ ID_OUI_FROM_DATABASE=Shenzhen Belon Technology CO.,LTD
+
 OUI:14A51A*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -45077,9 +45449,15 @@
 OUI:14ABC5*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:14ABEC*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:14ABF0*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:14AC60*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:14ADCA*
  ID_OUI_FROM_DATABASE=China Mobile Iot Limited company
 
@@ -45146,6 +45524,9 @@
 OUI:14B370*
  ID_OUI_FROM_DATABASE=Gigaset Digital Technology (Shenzhen) Co., Ltd.
 
+OUI:14B3A1*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:14B457*
  ID_OUI_FROM_DATABASE=Silicon Laboratories
 
@@ -45194,6 +45575,9 @@
 OUI:14C21D*
  ID_OUI_FROM_DATABASE=Sabtech Industries
 
+OUI:14C35E*
+ ID_OUI_FROM_DATABASE=FibRSol Global Network Limited
+
 OUI:14C3C2*
  ID_OUI_FROM_DATABASE=K.A. Schmersal GmbH & Co. KG
 
@@ -45245,6 +45629,9 @@
 OUI:14D19E*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:14D424*
+ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+
 OUI:14D4FE*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -45260,9 +45647,15 @@
 OUI:14DB85*
  ID_OUI_FROM_DATABASE=S NET MEDIA
 
+OUI:14DC51*
+ ID_OUI_FROM_DATABASE=Xiamen Cheerzing IOT Technology Co.,Ltd.
+
 OUI:14DCE2*
  ID_OUI_FROM_DATABASE=THALES AVS France
 
+OUI:14DD02*
+ ID_OUI_FROM_DATABASE=Liangang Optoelectronic Technology CO., Ltd.
+
 OUI:14DD9C*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
@@ -45326,6 +45719,9 @@
 OUI:14F592*
  ID_OUI_FROM_DATABASE=Shenzhen SDG DONZHI Technology Co., Ltd
 
+OUI:14F5F9*
+ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
+
 OUI:14F65A*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
@@ -45428,9 +45824,15 @@
 OUI:18146C*
  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
 
+OUI:1814AE*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:1816C9*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:1816E8*
+ ID_OUI_FROM_DATABASE=Siliconware Precision Industries Co., Ltd.
+
 OUI:181714*
  ID_OUI_FROM_DATABASE=DAEWOOIS
 
@@ -45438,7 +45840,7 @@
  ID_OUI_FROM_DATABASE=Cameo Communications, Inc.
 
 OUI:18188B*
- ID_OUI_FROM_DATABASE=FUJITSU CONNECTED TECHNOLOGIES LIMITED
+ ID_OUI_FROM_DATABASE=FCNT LMITED
 
 OUI:18193F*
  ID_OUI_FROM_DATABASE=Tamtron Oy
@@ -45485,6 +45887,9 @@
 OUI:182649*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:182654*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:182666*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -45506,6 +45911,9 @@
 OUI:182B05*
  ID_OUI_FROM_DATABASE=8D Technologies
 
+OUI:182C65*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:182C91*
  ID_OUI_FROM_DATABASE=Concept Development, Inc.
 
@@ -45689,6 +46097,9 @@
 OUI:1848D8*
  ID_OUI_FROM_DATABASE=Fastback Networks
 
+OUI:184A53*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:184A6F*
  ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
 
@@ -45885,7 +46296,7 @@
  ID_OUI_FROM_DATABASE=CT Company
 
 OUI:1874E24*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Aggressive Electronics Manufacturing Services Pvt Limited
 
 OUI:1874E25*
  ID_OUI_FROM_DATABASE=HANGZHOU ZHOUJU ELECTRONIC TECHNOLOGICAL CO.,LTD
@@ -45977,6 +46388,9 @@
 OUI:188410*
  ID_OUI_FROM_DATABASE=CoreTrust Inc.
 
+OUI:1884C1*
+ ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+
 OUI:18863A*
  ID_OUI_FROM_DATABASE=DIGITAL ART SYSTEM
 
@@ -46109,6 +46523,9 @@
 OUI:189E2C*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:189EAD*
+ ID_OUI_FROM_DATABASE=Shenzhen Chengqian Information Technology Co., Ltd
+
 OUI:189EFC*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -46188,7 +46605,7 @@
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
 OUI:18AA1E*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:18AA45*
  ID_OUI_FROM_DATABASE=Fon Technology
@@ -46310,6 +46727,51 @@
 OUI:18C300*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:18C3F40*
+ ID_OUI_FROM_DATABASE=Scati Labs, S.A.
+
+OUI:18C3F41*
+ ID_OUI_FROM_DATABASE=Enertex Bayern GmbH
+
+OUI:18C3F42*
+ ID_OUI_FROM_DATABASE=Changsha Kiloview Electronics Co., Ltd.
+
+OUI:18C3F43*
+ ID_OUI_FROM_DATABASE=General Test Systems
+
+OUI:18C3F44*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:18C3F45*
+ ID_OUI_FROM_DATABASE=Synaptics, Inc
+
+OUI:18C3F46*
+ ID_OUI_FROM_DATABASE=VeriFone Systems (China), Inc.
+
+OUI:18C3F47*
+ ID_OUI_FROM_DATABASE=Shenzhen Yecon-Tech Co.,Ltd.
+
+OUI:18C3F48*
+ ID_OUI_FROM_DATABASE=Shenzhen Liandian Communication Technology Co.LTD
+
+OUI:18C3F49*
+ ID_OUI_FROM_DATABASE=Ningbo Yuda Communication Technology Co.,Ltd
+
+OUI:18C3F4A*
+ ID_OUI_FROM_DATABASE=Shenzhen Yunlianxin Technology Co., Ltd.
+
+OUI:18C3F4B*
+ ID_OUI_FROM_DATABASE=VECTOR TECHNOLOGIES, LLC
+
+OUI:18C3F4C*
+ ID_OUI_FROM_DATABASE=HANGZHOU ZHONGKEJIGUANG TECHNOLOGY CO., LTD
+
+OUI:18C3F4D*
+ ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd.
+
+OUI:18C3F4E*
+ ID_OUI_FROM_DATABASE=SHENZHEN MEGMEET ELECTRICAL CO., LTD
+
 OUI:18C451*
  ID_OUI_FROM_DATABASE=Tucson Embedded Systems
 
@@ -46367,6 +46829,9 @@
 OUI:18D6CF*
  ID_OUI_FROM_DATABASE=Kurth Electronic GmbH
 
+OUI:18D6DD*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:18D717*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -46476,7 +46941,7 @@
  ID_OUI_FROM_DATABASE=Viking Electronics Inc.
 
 OUI:18E829*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:18E8DD*
  ID_OUI_FROM_DATABASE=MODULETEK
@@ -46520,6 +46985,9 @@
 OUI:18F46A*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:18F46B*
+ ID_OUI_FROM_DATABASE=Telenor Connexion AB
+
 OUI:18F643*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -46541,6 +47009,9 @@
 OUI:18FA6F*
  ID_OUI_FROM_DATABASE=ISC applied systems corp
 
+OUI:18FAB7*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:18FB7B*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -46676,6 +47147,9 @@
 OUI:1C19DE*
  ID_OUI_FROM_DATABASE=eyevis GmbH
 
+OUI:1C1A1B*
+ ID_OUI_FROM_DATABASE=Shanghai Sunmi Technology Co.,Ltd.
+
 OUI:1C1AC0*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -46763,6 +47237,9 @@
 OUI:1C21D1F*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:1C2285*
+ ID_OUI_FROM_DATABASE=Serrature Meroni SpA
+
 OUI:1C232C*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -46770,7 +47247,7 @@
  ID_OUI_FROM_DATABASE=EDMI  Europe Ltd
 
 OUI:1C24CD*
- ID_OUI_FROM_DATABASE=Askey Computer Corp.
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
 
 OUI:1C24EB*
  ID_OUI_FROM_DATABASE=Burlywood
@@ -46793,6 +47270,9 @@
 OUI:1C2AA3*
  ID_OUI_FROM_DATABASE=Shenzhen HongRui Optical Technology Co., Ltd.
 
+OUI:1C2AB0*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co.,Ltd
+
 OUI:1C2CE0*
  ID_OUI_FROM_DATABASE=Shanghai  Mountain View Silicon
 
@@ -46802,6 +47282,9 @@
 OUI:1C3008*
  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
 
+OUI:1C3283*
+ ID_OUI_FROM_DATABASE=COMTTI Intelligent Technology(Shenzhen) Co., Ltd.
+
 OUI:1C330E*
  ID_OUI_FROM_DATABASE=PernixData
 
@@ -46844,6 +47327,9 @@
 OUI:1C3ADE*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:1C3B62*
+ ID_OUI_FROM_DATABASE=HMD Global Oy
+
 OUI:1C3B8F*
  ID_OUI_FROM_DATABASE=Selve GmbH & Co. KG
 
@@ -47066,6 +47552,12 @@
 OUI:1C62B8*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:1C6349*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
+OUI:1C63A5*
+ ID_OUI_FROM_DATABASE=securityplatform
+
 OUI:1C63B7*
  ID_OUI_FROM_DATABASE=OpenProducts 237 AB
 
@@ -47084,9 +47576,15 @@
 OUI:1C66AA*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:1C674A*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:1C6758*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:1C6760*
+ ID_OUI_FROM_DATABASE=Phonesuite
+
 OUI:1C687E*
  ID_OUI_FROM_DATABASE=Shenzhen Qihu Intelligent Technology Company Limited
 
@@ -47096,6 +47594,9 @@
 OUI:1C69A5*
  ID_OUI_FROM_DATABASE=BlackBerry RTS
 
+OUI:1C6A76*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:1C6A7A*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -47105,6 +47606,9 @@
 OUI:1C6E4C*
  ID_OUI_FROM_DATABASE=Logistic Service & Engineering Co.,Ltd
 
+OUI:1C6E74*
+ ID_OUI_FROM_DATABASE=EnOcean Edge Inc.
+
 OUI:1C6E76*
  ID_OUI_FROM_DATABASE=Quarion Technology Inc
 
@@ -47237,6 +47741,9 @@
 OUI:1C8464*
  ID_OUI_FROM_DATABASE=FORMOSA WIRELESS COMMUNICATION CORP.
 
+OUI:1C8682*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:1C869A*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -47385,7 +47892,7 @@
  ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
 
 OUI:1C880C*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:1C88790*
  ID_OUI_FROM_DATABASE=Newps co.,ltd
@@ -47432,6 +47939,12 @@
 OUI:1C8879E*
  ID_OUI_FROM_DATABASE=Orion Labs inc
 
+OUI:1C8B76*
+ ID_OUI_FROM_DATABASE=Calix Inc.
+
+OUI:1C8BEF*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co.,Ltd
+
 OUI:1C8E5C*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -47444,6 +47957,9 @@
 OUI:1C90BE*
  ID_OUI_FROM_DATABASE=Ericsson AB
 
+OUI:1C90FF*
+ ID_OUI_FROM_DATABASE=Tuya Smart Inc.
+
 OUI:1C9148*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -47480,6 +47996,9 @@
 OUI:1C97C5*
  ID_OUI_FROM_DATABASE=Ynomia Pty Ltd
 
+OUI:1C97FB*
+ ID_OUI_FROM_DATABASE=CoolBitX Ltd.
+
 OUI:1C98C1*
  ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
 
@@ -47732,6 +48251,9 @@
 OUI:1CB857*
  ID_OUI_FROM_DATABASE=Becon Technologies Co,.Ltd.
 
+OUI:1CB8BA*
+ ID_OUI_FROM_DATABASE=XIAMEN LEELEN TECHNOLOGY CO., LTD
+
 OUI:1CB9C4*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -47817,7 +48339,7 @@
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
 OUI:1CC316*
- ID_OUI_FROM_DATABASE=MileSight Technology Co., Ltd.
+ ID_OUI_FROM_DATABASE=Xiamen Milesight IoT Co., Ltd.
 
 OUI:1CC3EB*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
@@ -47831,6 +48353,9 @@
 OUI:1CC72D*
  ID_OUI_FROM_DATABASE=Shenzhen Huapu Digital CO.,Ltd
 
+OUI:1CCA41*
+ ID_OUI_FROM_DATABASE=AO
+
 OUI:1CCAE30*
  ID_OUI_FROM_DATABASE=Private
 
@@ -48008,6 +48533,9 @@
 OUI:1CFA68*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:1CFC17*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:1CFCBB*
  ID_OUI_FROM_DATABASE=Realfiction ApS
 
@@ -48140,18 +48668,27 @@
 OUI:200B16*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:200BC5*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:200BC7*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:200BCF*
  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
 
+OUI:200C86*
+ ID_OUI_FROM_DATABASE=GX India Pvt Ltd
+
 OUI:200CC8*
  ID_OUI_FROM_DATABASE=NETGEAR
 
 OUI:200DB0*
  ID_OUI_FROM_DATABASE=Shenzhen Four Seas Global Link Network Technology Co., Ltd.
 
+OUI:200E2B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:200E95*
  ID_OUI_FROM_DATABASE=IEC – TC9 WG43
 
@@ -48173,9 +48710,15 @@
 OUI:2013E0*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:201582*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:20163D*
  ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
 
+OUI:201642*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:2016B9*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -48191,12 +48734,18 @@
 OUI:201A06*
  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
 
+OUI:201A94*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:201B88*
  ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co., Ltd.
 
 OUI:201BC9*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:201C3A*
+ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+
 OUI:201D03*
  ID_OUI_FROM_DATABASE=Elatec GmbH
 
@@ -48215,6 +48764,9 @@
 OUI:202027*
  ID_OUI_FROM_DATABASE=Shenzhen Sundray Technologies Company Limited
 
+OUI:202141*
+ ID_OUI_FROM_DATABASE=Universal Electronics BV
+
 OUI:2021A5*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
@@ -48236,6 +48788,9 @@
 OUI:2028BC*
  ID_OUI_FROM_DATABASE=Visionscape Co,. Ltd.
 
+OUI:2029B9*
+ ID_OUI_FROM_DATABASE=Ikotek technology SH Co., Ltd
+
 OUI:202AC5*
  ID_OUI_FROM_DATABASE=Petite-En
 
@@ -48260,6 +48815,9 @@
 OUI:20311C*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:20318D*
+ ID_OUI_FROM_DATABASE=Giax GmbH
+
 OUI:2031EB*
  ID_OUI_FROM_DATABASE=HDSN
 
@@ -48275,6 +48833,9 @@
 OUI:2034FB*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:203626*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:20365B*
  ID_OUI_FROM_DATABASE=Megafone Limited
 
@@ -48296,6 +48857,9 @@
 OUI:203A07*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:203A43*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:203AEF*
  ID_OUI_FROM_DATABASE=Sivantos GmbH
 
@@ -48320,6 +48884,9 @@
 OUI:204005*
  ID_OUI_FROM_DATABASE=feno GmbH
 
+OUI:20406A*
+ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
+
 OUI:20415A*
  ID_OUI_FROM_DATABASE=Smarteh d.o.o.
 
@@ -48332,6 +48899,9 @@
 OUI:204441*
  ID_OUI_FROM_DATABASE=Remote Solution
 
+OUI:204569*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
 OUI:2046A1*
  ID_OUI_FROM_DATABASE=VECOW Co., Ltd
 
@@ -48428,11 +48998,14 @@
 OUI:205E64*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:205E97*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:205EF7*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:205F3D*
- ID_OUI_FROM_DATABASE=Cambridge Communication Systems Ltd
+ ID_OUI_FROM_DATABASE=Adtran Inc
 
 OUI:206274*
  ID_OUI_FROM_DATABASE=Microsoft Corporation
@@ -48566,6 +49139,9 @@
 OUI:2083F8*
  ID_OUI_FROM_DATABASE=Advanced Digital Broadcast SA
 
+OUI:2084F5*
+ ID_OUI_FROM_DATABASE=Yufei Innovation Software(Shenzhen) Co., Ltd.
+
 OUI:20858C*
  ID_OUI_FROM_DATABASE=Assa
 
@@ -48633,7 +49209,7 @@
  ID_OUI_FROM_DATABASE=zte corporation
 
 OUI:20898A*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:208B37*
  ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
@@ -48665,6 +49241,9 @@
 OUI:20968A*
  ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd.
 
+OUI:209727*
+ ID_OUI_FROM_DATABASE=TELTONIKA NETWORKS UAB
+
 OUI:2098D8*
  ID_OUI_FROM_DATABASE=Shenzhen Yingdakang Technology CO., LTD
 
@@ -48701,6 +49280,9 @@
 OUI:20A2E7*
  ID_OUI_FROM_DATABASE=Lee-Dickens Ltd
 
+OUI:20A5CB*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:20A60C*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
@@ -48710,6 +49292,9 @@
 OUI:20A6CD*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
+OUI:20A766*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:20A783*
  ID_OUI_FROM_DATABASE=miControl GmbH
 
@@ -48773,6 +49358,9 @@
 OUI:20B868*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
+OUI:20BA36*
+ ID_OUI_FROM_DATABASE=u-blox AG
+
 OUI:20BB76*
  ID_OUI_FROM_DATABASE=COL GIOVANNI PAOLO SpA
 
@@ -48932,6 +49520,9 @@
 OUI:20DCFD*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:20DE1E*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:20DE88*
  ID_OUI_FROM_DATABASE=IC Realtime LLC
 
@@ -48953,12 +49544,18 @@
 OUI:20E407*
  ID_OUI_FROM_DATABASE=Spark srl
 
+OUI:20E46F*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:20E52A*
  ID_OUI_FROM_DATABASE=NETGEAR
 
 OUI:20E564*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:20E6DF*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:20E791*
  ID_OUI_FROM_DATABASE=Siemens Healthcare Diagnostics, Inc
 
@@ -49019,6 +49616,9 @@
 OUI:20F543*
  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
 
+OUI:20F597*
+ ID_OUI_FROM_DATABASE=Maasiv, LLC
+
 OUI:20F77C*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
@@ -49079,6 +49679,9 @@
 OUI:240917*
  ID_OUI_FROM_DATABASE=Devlin Electronics Limited
 
+OUI:240935*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:240995*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -49133,6 +49736,9 @@
 OUI:241148*
  ID_OUI_FROM_DATABASE=Entropix, LLC
 
+OUI:241153*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:2411D0*
  ID_OUI_FROM_DATABASE=Chongqing Ehs Science and Technology Development Co.,Ltd.
 
@@ -49167,7 +49773,7 @@
  ID_OUI_FROM_DATABASE=SuZhou A-rack Information Technology Co.,Ltd
 
 OUI:2415108*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Medicomp, Inc
 
 OUI:2415109*
  ID_OUI_FROM_DATABASE=Topgolf Sweden AB
@@ -49187,6 +49793,12 @@
 OUI:241510E*
  ID_OUI_FROM_DATABASE=Satellite Link Technology CO.,LTD
 
+OUI:241551*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
+OUI:24161B*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:24166D*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -49256,6 +49868,9 @@
 OUI:2426D6*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:242730*
+ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+
 OUI:2428FD*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
@@ -49265,6 +49880,9 @@
 OUI:2429FE*
  ID_OUI_FROM_DATABASE=KYOCERA Corporation
 
+OUI:242A04*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:242CFE*
  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
 
@@ -49346,6 +49964,9 @@
 OUI:24470E*
  ID_OUI_FROM_DATABASE=PentronicAB
 
+OUI:244845*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:24497B*
  ID_OUI_FROM_DATABASE=Innovative Converged Devices Inc
 
@@ -49431,7 +50052,7 @@
  ID_OUI_FROM_DATABASE=White Sky Inc. Limited
 
 OUI:245A4C*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:245AB5*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -49448,6 +50069,9 @@
 OUI:245CBF*
  ID_OUI_FROM_DATABASE=NCSE
 
+OUI:245CC5*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:245CCB*
  ID_OUI_FROM_DATABASE=AXIe Consortium, Inc.
 
@@ -49577,6 +50201,9 @@
 OUI:247189*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:24724A*
+ ID_OUI_FROM_DATABASE=Nile Global Inc
+
 OUI:247260*
  ID_OUI_FROM_DATABASE=IOTTECH Corp
 
@@ -49598,6 +50225,9 @@
 OUI:247703*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:247823*
+ ID_OUI_FROM_DATABASE=Panasonic Entertainment & Communication Co., Ltd.
+
 OUI:24792A*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -49661,6 +50291,9 @@
 OUI:248BE0*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
 
+OUI:249038*
+ ID_OUI_FROM_DATABASE=Universal Biosensors Pty Ltd
+
 OUI:2491BB*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -49685,6 +50318,9 @@
 OUI:249504*
  ID_OUI_FROM_DATABASE=SFR
 
+OUI:24952F*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:249745*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -49692,7 +50328,7 @@
  ID_OUI_FROM_DATABASE=Techvision Intelligent Technology Limited
 
 OUI:249AC8*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:249AD8*
  ID_OUI_FROM_DATABASE=YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
@@ -49713,10 +50349,10 @@
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:24A42C*
- ID_OUI_FROM_DATABASE=KOUKAAM a.s.
+ ID_OUI_FROM_DATABASE=NETIO products a.s.
 
 OUI:24A43C*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:24A487*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
@@ -49733,6 +50369,9 @@
 OUI:24A65E*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:24A6FA*
+ ID_OUI_FROM_DATABASE=WEIFANG GOERTEK ELECTRONICS CO.,LTD
+
 OUI:24A799*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -49778,6 +50417,9 @@
 OUI:24B72A*
  ID_OUI_FROM_DATABASE=China Dragon Technology Limited
 
+OUI:24B7DA*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:24B88C*
  ID_OUI_FROM_DATABASE=Crenus Co.,Ltd.
 
@@ -49793,6 +50435,9 @@
 OUI:24BBC1*
  ID_OUI_FROM_DATABASE=Absolute Analysis
 
+OUI:24BBC9*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
 OUI:24BC82*
  ID_OUI_FROM_DATABASE=Dali Wireless, Inc.
 
@@ -49806,7 +50451,7 @@
  ID_OUI_FROM_DATABASE=DADOUTEK COMPANY LIMITED
 
 OUI:24BF74*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Hamamatsu Photonics K.K.
 
 OUI:24C0B3*
  ID_OUI_FROM_DATABASE=RSF
@@ -49874,6 +50519,9 @@
 OUI:24D2CC*
  ID_OUI_FROM_DATABASE=SmartDrive Systems Inc.
 
+OUI:24D337*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:24D3F2*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -49883,6 +50531,9 @@
 OUI:24D76B*
  ID_OUI_FROM_DATABASE=Syntronic AB
 
+OUI:24D79C*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:24D7EB*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -49916,6 +50567,9 @@
 OUI:24DBED*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:24DC0F*
+ ID_OUI_FROM_DATABASE=Phytium Technology Co.,Ltd.
+
 OUI:24DEC6*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
@@ -49934,12 +50588,21 @@
 OUI:24E314*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:24E3DE*
+ ID_OUI_FROM_DATABASE=China Telecom Fufu Information Technology Co., Ltd.
+
 OUI:24E43F*
  ID_OUI_FROM_DATABASE=Wenzhou Kunmei Communication Technology Co.,Ltd.
 
 OUI:24E4C8*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:24E4CE*
+ ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
+
+OUI:24E50F*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:24E5AA*
  ID_OUI_FROM_DATABASE=Philips Oral Healthcare, Inc.
 
@@ -49949,6 +50612,9 @@
 OUI:24E853*
  ID_OUI_FROM_DATABASE=LG Innotek
 
+OUI:24E8E5*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
+
 OUI:24E927*
  ID_OUI_FROM_DATABASE=TomTom International BV
 
@@ -49988,6 +50654,9 @@
 OUI:24F094*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:24F0D3*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:24F0FF*
  ID_OUI_FROM_DATABASE=GHT Co., Ltd.
 
@@ -50039,9 +50708,15 @@
 OUI:24FD5B*
  ID_OUI_FROM_DATABASE=SmartThings, Inc.
 
+OUI:24FE9A*
+ ID_OUI_FROM_DATABASE=CyberTAN Technology Inc.
+
 OUI:28011C*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:28022E*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:280244*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -50069,12 +50744,18 @@
 OUI:28070D*
  ID_OUI_FROM_DATABASE=GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.
 
+OUI:280AEE*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
 OUI:280B5C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:280C28*
  ID_OUI_FROM_DATABASE=Unigen DataStorage Corporation
 
+OUI:280C2D*
+ ID_OUI_FROM_DATABASE=QUALVISION TECHNOLOGY CO.,LTD
+
 OUI:280CB8*
  ID_OUI_FROM_DATABASE=Mikrosay Yazilim ve Elektronik A.S.
 
@@ -50165,6 +50846,9 @@
 OUI:28285D*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
+OUI:282947*
+ ID_OUI_FROM_DATABASE=Chipsea Technologies (Shenzhen) Corp.
+
 OUI:282986*
  ID_OUI_FROM_DATABASE=APC by Schneider Electric
 
@@ -50180,6 +50864,9 @@
 OUI:282B96*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:282BB9*
+ ID_OUI_FROM_DATABASE=Shenzhen Xiongxin Technology Co.,Ltd
+
 OUI:282C020*
  ID_OUI_FROM_DATABASE=SAKATA DENKI Co., Ltd.
 
@@ -50534,6 +51221,9 @@
 OUI:286F7F*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:28704E*
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
+
 OUI:287184*
  ID_OUI_FROM_DATABASE=Spire Payments
 
@@ -50552,6 +51242,9 @@
 OUI:287610*
  ID_OUI_FROM_DATABASE=IgniteNet
 
+OUI:287681*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:2876CD*
  ID_OUI_FROM_DATABASE=Funshion Online Technologies Co.,Ltd
 
@@ -50576,6 +51269,9 @@
 OUI:287CDB*
  ID_OUI_FROM_DATABASE=Hefei  Toycloud Technology Co.,ltd
 
+OUI:287E80*
+ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+
 OUI:287FCF*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -50585,6 +51281,9 @@
 OUI:288088*
  ID_OUI_FROM_DATABASE=NETGEAR
 
+OUI:28808A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:2880A2*
  ID_OUI_FROM_DATABASE=Novatel Wireless Solutions, Inc.
 
@@ -50615,6 +51314,12 @@
 OUI:288CB8*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:288EEC*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:288FF6*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:2891D0*
  ID_OUI_FROM_DATABASE=Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH
 
@@ -50744,6 +51449,9 @@
 OUI:28B4FB*
  ID_OUI_FROM_DATABASE=Sprocomm Technologies CO.,LTD.
 
+OUI:28B5E8*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:28B77C0*
  ID_OUI_FROM_DATABASE=SHENZHEN EVIEW GPS TECHNOLOGY
 
@@ -50789,6 +51497,9 @@
 OUI:28B77CE*
  ID_OUI_FROM_DATABASE=Ray Pte Ltd
 
+OUI:28B829*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:28B9D9*
  ID_OUI_FROM_DATABASE=Radisys Corporation
 
@@ -50822,11 +51533,14 @@
 OUI:28BE9B*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:28BEF3*
+ ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD
+
 OUI:28BF89*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
 OUI:28C01B*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:28C0DA*
  ID_OUI_FROM_DATABASE=Juniper Networks
@@ -50834,6 +51548,9 @@
 OUI:28C13C*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
 
+OUI:28C1A0*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:28C21F*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
@@ -50843,6 +51560,9 @@
 OUI:28C538*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:28C5D2*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:28C63F*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -50903,6 +51623,9 @@
 OUI:28CF08*
  ID_OUI_FROM_DATABASE=ESSYS
 
+OUI:28CF51*
+ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+
 OUI:28CFDA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -50913,7 +51636,7 @@
  ID_OUI_FROM_DATABASE=Shenzhen Xinyin technology company
 
 OUI:28D0CB*
- ID_OUI_FROM_DATABASE=Cambridge Communication Systems Ltd
+ ID_OUI_FROM_DATABASE=Adtran Inc
 
 OUI:28D0EA*
  ID_OUI_FROM_DATABASE=Intel Corporate
@@ -50976,7 +51699,7 @@
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:28E297*
- ID_OUI_FROM_DATABASE=Shanghai InfoTM Microelectronics Co.,Ltd.
+ ID_OUI_FROM_DATABASE=Shanghai InfoTM Microelectronics Co.,Ltd
 
 OUI:28E31F*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
@@ -50987,6 +51710,9 @@
 OUI:28E34E*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:28E424*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:28E476*
  ID_OUI_FROM_DATABASE=Pi-Coral
 
@@ -50999,6 +51725,9 @@
 OUI:28E6E9*
  ID_OUI_FROM_DATABASE=SIS Sat Internet Services GmbH
 
+OUI:28E71D*
+ ID_OUI_FROM_DATABASE=Arista Networks
+
 OUI:28E794*
  ID_OUI_FROM_DATABASE=Microtime Computer Inc.
 
@@ -51008,9 +51737,15 @@
 OUI:28E98E*
  ID_OUI_FROM_DATABASE=Mitsubishi Electric Corporation
 
+OUI:28EA0B*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:28EA2D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:28EBA6*
+ ID_OUI_FROM_DATABASE=Nex-T LLC
+
 OUI:28EC95*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -51200,6 +51935,9 @@
 OUI:28FFB2*
  ID_OUI_FROM_DATABASE=Toshiba Corp.
 
+OUI:2C002A*
+ ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
+
 OUI:2C002C*
  ID_OUI_FROM_DATABASE=UNOWHY
 
@@ -51245,6 +51983,9 @@
 OUI:2C088C*
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
 
+OUI:2C08B4*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:2C094D*
  ID_OUI_FROM_DATABASE=Raptor Engineering, LLC
 
@@ -51323,6 +52064,9 @@
 OUI:2C17E0*
  ID_OUI_FROM_DATABASE=SYSTEMES ET TECHNOLOGIES IDENTIFICATION (STid)
 
+OUI:2C1809*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:2C1875*
  ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
 
@@ -51512,6 +52256,9 @@
 OUI:2C3124*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:2C326A*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:2C3311*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -51719,12 +52466,18 @@
 OUI:2C56DC*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:2C572C*
+ ID_OUI_FROM_DATABASE=Allwinner Technology Co., Ltd
+
 OUI:2C5731*
  ID_OUI_FROM_DATABASE=Wingtech Group (HongKong）Limited
 
 OUI:2C5741*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:2C57CE*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:2C584F*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -51788,15 +52541,69 @@
 OUI:2C641F*
  ID_OUI_FROM_DATABASE=Vizio, Inc
 
+OUI:2C64F6*
+ ID_OUI_FROM_DATABASE=Wu Qi Technologies,Inc.
+
 OUI:2C6798*
  ID_OUI_FROM_DATABASE=InTalTech Ltd.
 
+OUI:2C67AB*
+ ID_OUI_FROM_DATABASE=EZELINK TELECOM
+
 OUI:2C67FB*
  ID_OUI_FROM_DATABASE=ShenZhen Zhengjili Electronics Co., LTD
 
+OUI:2C691D0*
+ ID_OUI_FROM_DATABASE=Hunan Xiangjiang Kunpeng Information Technology Co., Ltd.
+
+OUI:2C691D1*
+ ID_OUI_FROM_DATABASE=KATEK SE
+
+OUI:2C691D2*
+ ID_OUI_FROM_DATABASE=Abode Systems Inc
+
+OUI:2C691D3*
+ ID_OUI_FROM_DATABASE=Sunsa, Inc
+
+OUI:2C691D4*
+ ID_OUI_FROM_DATABASE=SPEEDTECH CORP.
+
+OUI:2C691D5*
+ ID_OUI_FROM_DATABASE=LG Electronics Inc.
+
+OUI:2C691D6*
+ ID_OUI_FROM_DATABASE=Carnegie Robotics
+
+OUI:2C691D7*
+ ID_OUI_FROM_DATABASE=Shenzhen Gigalight Technology Co., Ltd
+
+OUI:2C691D8*
+ ID_OUI_FROM_DATABASE=IBM
+
+OUI:2C691D9*
+ ID_OUI_FROM_DATABASE=SHENZHEN EX-LINK TECHNOLOGY CO.,LTD
+
+OUI:2C691DA*
+ ID_OUI_FROM_DATABASE=Panasonic Appliances Marketing Asia Pacific
+
+OUI:2C691DB*
+ ID_OUI_FROM_DATABASE=Shenzhen Daren HI-Tech Electronics Co., Ltd.
+
+OUI:2C691DC*
+ ID_OUI_FROM_DATABASE=Aparian, Inc.
+
+OUI:2C691DD*
+ ID_OUI_FROM_DATABASE=Ascentac Inc.
+
+OUI:2C691DE*
+ ID_OUI_FROM_DATABASE=Chengdu Qianhong Communication Co., Ltd.
+
 OUI:2C69BA*
  ID_OUI_FROM_DATABASE=RF Controls, LLC
 
+OUI:2C69CC*
+ ID_OUI_FROM_DATABASE=Valeo Detection Systems
+
 OUI:2C6A6F0*
  ID_OUI_FROM_DATABASE=Shanghai Shuncom Electronic Technology Co.,Ltd
 
@@ -51857,12 +52664,18 @@
 OUI:2C6E85*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:2C6F4E*
+ ID_OUI_FROM_DATABASE=Hubei Yuan Times Technology Co.,Ltd.
+
 OUI:2C6F51*
  ID_OUI_FROM_DATABASE=Herospeed Digital Technology Limited
 
 OUI:2C6FC9*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:2C704F*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:2C7155*
  ID_OUI_FROM_DATABASE=HiveMotion
 
@@ -51881,6 +52694,12 @@
 OUI:2C750F*
  ID_OUI_FROM_DATABASE=Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.
 
+OUI:2C75CB*
+ ID_OUI_FROM_DATABASE=Novitec Co., Ltd.
+
+OUI:2C7600*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:2C768A*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
@@ -51905,6 +52724,9 @@
 OUI:2C7CE4*
  ID_OUI_FROM_DATABASE=Wuhan Tianyu Information Industry Co., Ltd.
 
+OUI:2C7CF2*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:2C7E81*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -51926,9 +52748,15 @@
 OUI:2C8A72*
  ID_OUI_FROM_DATABASE=HTC Corporation
 
+OUI:2C8AC7*
+ ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
+
 OUI:2C8BF2*
  ID_OUI_FROM_DATABASE=Hitachi Metals America Ltd
 
+OUI:2C8D37*
+ ID_OUI_FROM_DATABASE=Virtium
+
 OUI:2C8DB1*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -51944,6 +52772,9 @@
 OUI:2C93FB*
  ID_OUI_FROM_DATABASE=Sercomm France Sarl
 
+OUI:2C9452*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:2C9464*
  ID_OUI_FROM_DATABASE=Cincoze Co., Ltd.
 
@@ -51956,6 +52787,9 @@
 OUI:2C9662*
  ID_OUI_FROM_DATABASE=Invenit BV
 
+OUI:2C9682*
+ ID_OUI_FROM_DATABASE=MitraStar Technology Corp.
+
 OUI:2C9717*
  ID_OUI_FROM_DATABASE=I.C.Y. B.V.
 
@@ -51965,6 +52799,9 @@
 OUI:2C97ED*
  ID_OUI_FROM_DATABASE=Sony Imaging Products & Solutions Inc.
 
+OUI:2C9811*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:2C9924*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -51977,6 +52814,9 @@
 OUI:2C9D65*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:2C9E00*
+ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
+
 OUI:2C9E5F*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -52025,6 +52865,9 @@
 OUI:2CA79E*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:2CA7EF*
+ ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
+
 OUI:2CA835*
  ID_OUI_FROM_DATABASE=RIM
 
@@ -52085,6 +52928,9 @@
 OUI:2CB69D*
  ID_OUI_FROM_DATABASE=RED Digital Cinema
 
+OUI:2CB6C8*
+ ID_OUI_FROM_DATABASE=Raisecom Technology CO., LTD
+
 OUI:2CB8ED*
  ID_OUI_FROM_DATABASE=SonicWall
 
@@ -52103,6 +52949,9 @@
 OUI:2CBEEB*
  ID_OUI_FROM_DATABASE=Nothing Technology Limited
 
+OUI:2CC253*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:2CC260*
  ID_OUI_FROM_DATABASE=Oracle Corporation
 
@@ -52118,12 +52967,18 @@
 OUI:2CC5D3*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
+OUI:2CC6A0*
+ ID_OUI_FROM_DATABASE=Lumacron Technology Ltd.
+
 OUI:2CC81B*
  ID_OUI_FROM_DATABASE=Routerboard.com
 
 OUI:2CCA0C*
  ID_OUI_FROM_DATABASE=WITHUS PLANET
 
+OUI:2CCA75*
+ ID_OUI_FROM_DATABASE=Robert Bosch GmbH AnP
+
 OUI:2CCC15*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -52205,6 +53060,9 @@
 OUI:2CD141F*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:2CD1C6*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
 OUI:2CD1DA*
  ID_OUI_FROM_DATABASE=Keysight Technologies, Inc.
 
@@ -52220,6 +53078,9 @@
 OUI:2CD444*
  ID_OUI_FROM_DATABASE=FUJITSU LIMITED
 
+OUI:2CD7FF*
+ ID_OUI_FROM_DATABASE=LANCOM Systems GmbH
+
 OUI:2CD974*
  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
 
@@ -52298,6 +53159,9 @@
 OUI:2CF295*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:2CF2A5*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:2CF432*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -52334,6 +53198,9 @@
 OUI:2CFDB4*
  ID_OUI_FROM_DATABASE=Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
 
+OUI:2CFE4F*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:2CFF65*
  ID_OUI_FROM_DATABASE=Oki Electric Industry Co., Ltd.
 
@@ -52416,7 +53283,7 @@
  ID_OUI_FROM_DATABASE=Advanced Electronic Designs, Inc.
 
 OUI:300A603*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Intergard do Brasil Ind e Com de Eletr e Mec Ltda
 
 OUI:300A604*
  ID_OUI_FROM_DATABASE=AVIC JONHON OPTRONIC TECHNOLOGY CO., LTD.
@@ -52508,15 +53375,24 @@
 OUI:301966*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:301984*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:301A28*
  ID_OUI_FROM_DATABASE=Mako Networks Ltd
 
 OUI:301A30*
  ID_OUI_FROM_DATABASE=Mako Networks Ltd
 
+OUI:301ABA*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:301B97*
  ID_OUI_FROM_DATABASE=Lierda Science & Technology Group Co.,Ltd
 
+OUI:301F48*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:301F9A0*
  ID_OUI_FROM_DATABASE=ILSAN ELECTRONICS
 
@@ -52545,7 +53421,7 @@
  ID_OUI_FROM_DATABASE=FINE TRIUMPH TECHNOLOGY CORP.,LTD.
 
 OUI:301F9A9*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Deep Sentinel
 
 OUI:301F9AA*
  ID_OUI_FROM_DATABASE=HUNAN CHANGSHA HENGJIAN TECHNOLDGY DEVELPMENT CO.,LTD.
@@ -52581,7 +53457,7 @@
  ID_OUI_FROM_DATABASE=HP Inc.
 
 OUI:3027CF*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Canopy Growth Corp
 
 OUI:302952*
  ID_OUI_FROM_DATABASE=Hillstone Networks Inc
@@ -52598,6 +53474,9 @@
 OUI:30317D*
  ID_OUI_FROM_DATABASE=Hosiden Corporation
 
+OUI:303180*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
+
 OUI:303235*
  ID_OUI_FROM_DATABASE=Qingdao Intelligent&Precise Electronics Co.,Ltd.
 
@@ -52652,6 +53531,51 @@
 OUI:303D08*
  ID_OUI_FROM_DATABASE=GLINTT TES S.A.
 
+OUI:303D510*
+ ID_OUI_FROM_DATABASE=Fink Telecom Services GmbH
+
+OUI:303D511*
+ ID_OUI_FROM_DATABASE=SHENZHEN WLINK TECHNOLOGY CO., LTD.
+
+OUI:303D512*
+ ID_OUI_FROM_DATABASE=Harman Connected Services Corporation India Pvt. Ltd.
+
+OUI:303D513*
+ ID_OUI_FROM_DATABASE=S & A Systems
+
+OUI:303D514*
+ ID_OUI_FROM_DATABASE=Dspread Technology (Beijing) Inc.
+
+OUI:303D515*
+ ID_OUI_FROM_DATABASE=Media Hub Digital Smart Home Pty Ltd.
+
+OUI:303D516*
+ ID_OUI_FROM_DATABASE=Amber-Link Network Technology Co.,Ltd.
+
+OUI:303D517*
+ ID_OUI_FROM_DATABASE=Destiny Automate Limited
+
+OUI:303D518*
+ ID_OUI_FROM_DATABASE=The Heil Co dba AWTI 3rd Eye Cam
+
+OUI:303D519*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:303D51A*
+ ID_OUI_FROM_DATABASE=TeraNXT Global India Pvt Ltd.
+
+OUI:303D51B*
+ ID_OUI_FROM_DATABASE=Labman Automation
+
+OUI:303D51C*
+ ID_OUI_FROM_DATABASE=TalkGo, Inc.
+
+OUI:303D51D*
+ ID_OUI_FROM_DATABASE=XOR UK Corporation Limited
+
+OUI:303D51E*
+ ID_OUI_FROM_DATABASE=Percent.com
+
 OUI:303EA7*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -52667,6 +53591,9 @@
 OUI:303FBB*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
+OUI:304074*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:304174*
  ID_OUI_FROM_DATABASE=ALTEC LANSING LLC
 
@@ -52725,7 +53652,7 @@
  ID_OUI_FROM_DATABASE=Guangdong Hongqin Telecom  Technology Co. Ltd.
 
 OUI:304449*
- ID_OUI_FROM_DATABASE=PLATH GmbH
+ ID_OUI_FROM_DATABASE=PLATH Signal Products GmbH & Co. KG
 
 OUI:304487*
  ID_OUI_FROM_DATABASE=Hefei Radio Communication Technology Co., Ltd
@@ -52812,7 +53739,7 @@
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
 OUI:304F75*
- ID_OUI_FROM_DATABASE=DASAN Network Solutions
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:305075*
  ID_OUI_FROM_DATABASE=GN Audio A/S
@@ -52973,6 +53900,9 @@
 OUI:30809B*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
+OUI:308216*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:308398*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -52991,6 +53921,9 @@
 OUI:30862D*
  ID_OUI_FROM_DATABASE=Arista Network, Inc.
 
+OUI:3086F1*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:308730*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -53135,12 +54068,18 @@
 OUI:30AEF6*
  ID_OUI_FROM_DATABASE=Radio Mobile Access
 
+OUI:30AF7E*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:30AFCE*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
 OUI:30B037*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
+OUI:30B0EA*
+ ID_OUI_FROM_DATABASE=Shenzhen Chuangxin Internet Communication Technology Co., Ltd
+
 OUI:30B164*
  ID_OUI_FROM_DATABASE=Power Electronics International Inc.
 
@@ -53148,7 +54087,7 @@
  ID_OUI_FROM_DATABASE=Arcadyan Corporation
 
 OUI:30B216*
- ID_OUI_FROM_DATABASE=Hitachi Energy
+ ID_OUI_FROM_DATABASE=Hitachi Energy Germany AG
 
 OUI:30B237*
  ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
@@ -53204,6 +54143,9 @@
 OUI:30C50F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:30C6D7*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:30C6F7*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -53267,15 +54209,24 @@
 OUI:30D6C9*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:30D7A1*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:30D941*
  ID_OUI_FROM_DATABASE=Raydium Semiconductor Corp.
 
 OUI:30D9D9*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:30DE4B*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:30DE86*
  ID_OUI_FROM_DATABASE=Cedac Software S.r.l.
 
+OUI:30DF17*
+ ID_OUI_FROM_DATABASE=ALPSALPINE CO,.LTD
+
 OUI:30DF8D*
  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
 
@@ -53285,6 +54236,9 @@
 OUI:30E171*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:30E1F1*
+ ID_OUI_FROM_DATABASE=Intelbras
+
 OUI:30E283*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -53342,6 +54296,9 @@
 OUI:30F6B9*
  ID_OUI_FROM_DATABASE=Ecocentric Energy
 
+OUI:30F6EF*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:30F70D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -53366,6 +54323,9 @@
 OUI:30FAB7*
  ID_OUI_FROM_DATABASE=Tunai Creative
 
+OUI:30FB10*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:30FB94*
  ID_OUI_FROM_DATABASE=Shanghai Fangzhiwei Information Technology CO.,Ltd.
 
@@ -53558,6 +54518,9 @@
 OUI:341513*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:341593*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:34159E*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -53573,6 +54536,9 @@
 OUI:341B22*
  ID_OUI_FROM_DATABASE=Grandbeing Technology Co., Ltd
 
+OUI:341B2D*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:341CF0*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
@@ -53603,6 +54569,9 @@
 OUI:34255D*
  ID_OUI_FROM_DATABASE=Shenzhen Loadcom Technology Co.,Ltd
 
+OUI:3425B4*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:3425BE*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -53724,7 +54693,7 @@
  ID_OUI_FROM_DATABASE=Hamee Corp.
 
 OUI:3438AF*
- ID_OUI_FROM_DATABASE=Inlab Software GmbH
+ ID_OUI_FROM_DATABASE=Inlab Networks GmbH
 
 OUI:3438B7*
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
@@ -53759,6 +54728,9 @@
 OUI:3446EC*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:34479A*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:3448ED*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -53873,6 +54845,9 @@
 OUI:3464A9*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:346679*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:3466EA*
  ID_OUI_FROM_DATABASE=VERTU INTERNATIONAL CORPORATION LIMITED
 
@@ -53963,6 +54938,9 @@
 OUI:347C25*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:347DE4*
+ ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.，LTD
+
 OUI:347DF6*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -54009,7 +54987,7 @@
  ID_OUI_FROM_DATABASE=Texas Instruments
 
 OUI:348511*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:348518*
  ID_OUI_FROM_DATABASE=Espressif Inc.
@@ -54024,7 +55002,7 @@
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
 OUI:34873D*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
 OUI:34885D*
  ID_OUI_FROM_DATABASE=Logitech Far East
@@ -54071,6 +55049,9 @@
 OUI:3497FB*
  ID_OUI_FROM_DATABASE=ADVANCED RF TECHNOLOGIES INC
 
+OUI:34987A*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:3498B5*
  ID_OUI_FROM_DATABASE=NETGEAR
 
@@ -54138,7 +55119,7 @@
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:34AA31*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:34AA8B*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -54167,6 +55148,9 @@
 OUI:34AF2C*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
+OUI:34AFA3*
+ ID_OUI_FROM_DATABASE=Recogni Inc
+
 OUI:34AFB3*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -54272,6 +55256,9 @@
 OUI:34C9F0*
  ID_OUI_FROM_DATABASE=LM Technologies Ltd
 
+OUI:34CA81*
+ ID_OUI_FROM_DATABASE=New H3C Intelligence Terminal Co., Ltd.
+
 OUI:34CB1A*
  ID_OUI_FROM_DATABASE=Procter & Gamble Company
 
@@ -54398,6 +55385,9 @@
 OUI:34DE34*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:34DF20*
+ ID_OUI_FROM_DATABASE=Shenzhen Comstar .Technology Co.,Ltd
+
 OUI:34DF2A*
  ID_OUI_FROM_DATABASE=Fujikon Industrial Co.,Limited
 
@@ -54521,6 +55511,9 @@
 OUI:34F150*
  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
 
+OUI:34F223*
+ ID_OUI_FROM_DATABASE=Fujian Newland Communication Science Technology Co.,Ltd.
+
 OUI:34F39A*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -54611,6 +55604,9 @@
 OUI:3806B4*
  ID_OUI_FROM_DATABASE=A.D.C. GmbH
 
+OUI:380716*
+ ID_OUI_FROM_DATABASE=FREEBOX SAS
+
 OUI:3807D4*
  ID_OUI_FROM_DATABASE=Zeppelin Systems GmbH
 
@@ -54650,6 +55646,9 @@
 OUI:380F4A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:380FAD*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:380FE4*
  ID_OUI_FROM_DATABASE=Dedicated Network Partners Oy
 
@@ -54662,12 +55661,18 @@
 OUI:38127B*
  ID_OUI_FROM_DATABASE=Crenet Labs Co., Ltd.
 
+OUI:38141B*
+ ID_OUI_FROM_DATABASE=Secure Letter Inc.
+
 OUI:381428*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
 OUI:38144E*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:381672*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
 OUI:3816D1*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -54833,6 +55838,12 @@
 OUI:38384B*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:3838A6*
+ ID_OUI_FROM_DATABASE=Arista Networks
+
+OUI:38396C*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:383A210*
  ID_OUI_FROM_DATABASE=R3C Information(Shenzhen) Co.，Ltd.
 
@@ -54932,6 +55943,9 @@
 OUI:3847BC*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:3847F2*
+ ID_OUI_FROM_DATABASE=Recogni Inc
+
 OUI:38484C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -54962,6 +55976,9 @@
 OUI:385247*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:385319*
+ ID_OUI_FROM_DATABASE=34ED LLC DBA Centegix
+
 OUI:38539C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -55016,6 +56033,12 @@
 OUI:3863F6*
  ID_OUI_FROM_DATABASE=3NOD MULTIMEDIA(SHENZHEN)CO.,LTD
 
+OUI:386407*
+ ID_OUI_FROM_DATABASE=Qingdao Intelligent&Precise Electronics Co.,Ltd.
+
+OUI:386504*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
 OUI:3865B2*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -55032,7 +56055,7 @@
  ID_OUI_FROM_DATABASE=Intel Corporate
 
 OUI:3868A4*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:3868BE*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
@@ -55061,6 +56084,9 @@
 OUI:386EA2*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:386F6B*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:38700C*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -55133,6 +56159,9 @@
 OUI:387B47*
  ID_OUI_FROM_DATABASE=AKELA, Inc.
 
+OUI:387C76*
+ ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
+
 OUI:3880DF*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
@@ -55221,7 +56250,7 @@
  ID_OUI_FROM_DATABASE=NETGEAR
 
 OUI:389592*
- ID_OUI_FROM_DATABASE=Beijing Tendyron Corporation
+ ID_OUI_FROM_DATABASE=Tendyron Corporation
 
 OUI:3897A4*
  ID_OUI_FROM_DATABASE=ELECOM CO.,LTD.
@@ -55241,6 +56270,9 @@
 OUI:389D92*
  ID_OUI_FROM_DATABASE=Seiko Epson Corporation
 
+OUI:389E80*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:389F5A*
  ID_OUI_FROM_DATABASE=C-Kur TV Inc.
 
@@ -55272,11 +56304,14 @@
  ID_OUI_FROM_DATABASE=SKY UK LIMITED
 
 OUI:38A851*
- ID_OUI_FROM_DATABASE=Moog, Ing
+ ID_OUI_FROM_DATABASE=Quickset Defense Technologies, LLC
 
 OUI:38A86B*
  ID_OUI_FROM_DATABASE=Orga BV
 
+OUI:38A89B*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:38A8CD0*
  ID_OUI_FROM_DATABASE=ACiiST Smart Networks Ltd.
 
@@ -55329,11 +56364,14 @@
  ID_OUI_FROM_DATABASE=Actifio Inc
 
 OUI:38A9EA*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=HK DAPU ELECTRONIC TECHNOLOGY CO., LIMITED
 
 OUI:38AA3C*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
 
+OUI:38AB16*
+ ID_OUI_FROM_DATABASE=NPO RTT LLC
+
 OUI:38AB41*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -55418,6 +56456,9 @@
 OUI:38B5BD*
  ID_OUI_FROM_DATABASE=E.G.O. Elektro-Ger
 
+OUI:38B5C9*
+ ID_OUI_FROM_DATABASE=INGRAM MICRO SERVICES
+
 OUI:38B5D3*
  ID_OUI_FROM_DATABASE=SecuWorks
 
@@ -55493,6 +56534,12 @@
 OUI:38BC1A*
  ID_OUI_FROM_DATABASE=MEIZU Technology Co., Ltd.
 
+OUI:38BC61*
+ ID_OUI_FROM_DATABASE=Starkoff Co., Ltd.
+
+OUI:38BD7A*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:38BEAB*
  ID_OUI_FROM_DATABASE=AltoBeam (China) Inc.
 
@@ -55532,6 +56579,9 @@
 OUI:38CA73*
  ID_OUI_FROM_DATABASE=Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
 
+OUI:38CA84*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
 OUI:38CA97*
  ID_OUI_FROM_DATABASE=Contour Design LLC
 
@@ -55748,6 +56798,9 @@
 OUI:38F8CA*
  ID_OUI_FROM_DATABASE=OWIN Inc.
 
+OUI:38F8F6*
+ ID_OUI_FROM_DATABASE=Adtran Inc
+
 OUI:38F9D3*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -55757,6 +56810,9 @@
 OUI:38FB14*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:38FC34*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:38FC98*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -55823,6 +56879,9 @@
 OUI:3C01EF*
  ID_OUI_FROM_DATABASE=Sony Corporation
 
+OUI:3C0268*
+ ID_OUI_FROM_DATABASE=Infinera, Inc.
+
 OUI:3C02B1*
  ID_OUI_FROM_DATABASE=Creation Technologies LP
 
@@ -55835,12 +56894,18 @@
 OUI:3C0518*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:3C058E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:3C05AB*
  ID_OUI_FROM_DATABASE=Product Creation Studio
 
 OUI:3C0630*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:3C0664*
+ ID_OUI_FROM_DATABASE=Beijing Leagrid Technology Co.,Ltd.
+
 OUI:3C06A7*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -55869,7 +56934,7 @@
  ID_OUI_FROM_DATABASE=Tiny Mesh AS
 
 OUI:3C0CDB*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:3C0E23*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -55889,6 +56954,9 @@
 OUI:3C11B2*
  ID_OUI_FROM_DATABASE=Fraunhofer FIT
 
+OUI:3C135A*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:3C13CC*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -55934,6 +57002,9 @@
 OUI:3C1A9E*
  ID_OUI_FROM_DATABASE=VitalThings AS
 
+OUI:3C1BF8*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:3C1CBE*
  ID_OUI_FROM_DATABASE=JADAK LLC
 
@@ -55943,6 +57014,9 @@
 OUI:3C1E13*
  ID_OUI_FROM_DATABASE=HANGZHOU SUNRISE TECHNOLOGY CO., LTD
 
+OUI:3C1EB5*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:3C2093*
  ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
 
@@ -56030,6 +57104,9 @@
 OUI:3C2C99*
  ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
 
+OUI:3C2CA6*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co.,Ltd
+
 OUI:3C2DB7*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -56048,6 +57125,9 @@
 OUI:3C306F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:3C3174*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:3C3178*
  ID_OUI_FROM_DATABASE=Qolsys Inc.
 
@@ -56078,6 +57158,9 @@
 OUI:3C39C3*
  ID_OUI_FROM_DATABASE=JW Electronics Co., Ltd.
 
+OUI:3C39C8*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:3C39E70*
  ID_OUI_FROM_DATABASE=Hannstar Display Corp
 
@@ -56126,6 +57209,12 @@
 OUI:3C3A73*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
+OUI:3C3B4D*
+ ID_OUI_FROM_DATABASE=Toyo Seisakusho Kaisha, Limited
+
+OUI:3C3B99*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
 OUI:3C3F51*
  ID_OUI_FROM_DATABASE=2CRSI
 
@@ -56189,6 +57278,9 @@
 OUI:3C4645*
  ID_OUI_FROM_DATABASE=Shanghai Infinity Wireless Technologies Co.,Ltd.
 
+OUI:3C46A1*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:3C46D8*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -56249,6 +57341,9 @@
 OUI:3C57D5*
  ID_OUI_FROM_DATABASE=FiveCo
 
+OUI:3C585D*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:3C58C2*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -56354,6 +57449,9 @@
 OUI:3C6A2CE*
  ID_OUI_FROM_DATABASE=Beijing Donghua Hongtai Polytron Technologies Inc
 
+OUI:3C6A48*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
 OUI:3C6A7D*
  ID_OUI_FROM_DATABASE=Niigata Power Systems Co., Ltd.
 
@@ -56363,12 +57461,18 @@
 OUI:3C6AA7*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:3C6D89*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:3C6E63*
  ID_OUI_FROM_DATABASE=Mitron OY
 
 OUI:3C6F45*
  ID_OUI_FROM_DATABASE=Fiberpro Inc.
 
+OUI:3C6F9B*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:3C6FEA*
  ID_OUI_FROM_DATABASE=Panasonic India Pvt. Ltd.
 
@@ -56396,6 +57500,9 @@
 OUI:3C7873*
  ID_OUI_FROM_DATABASE=Airsonics
 
+OUI:3C792B*
+ ID_OUI_FROM_DATABASE=Dongguan Auklink TechnologyCo.,Ltd
+
 OUI:3C7A8A*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -56534,6 +57641,9 @@
 OUI:3C98BF*
  ID_OUI_FROM_DATABASE=Quest Controls, Inc.
 
+OUI:3C998C*
+ ID_OUI_FROM_DATABASE=Houwa System Design Corp.
+
 OUI:3C99F7*
  ID_OUI_FROM_DATABASE=Lansentechnology AB
 
@@ -56570,6 +57680,9 @@
 OUI:3CA161*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:3CA2C3*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:3CA308*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -56600,6 +57713,9 @@
 OUI:3CA72B*
  ID_OUI_FROM_DATABASE=MRV Communications (Networks) LTD
 
+OUI:3CA7AE*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:3CA82A*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
@@ -56621,6 +57737,9 @@
 OUI:3CAE69*
  ID_OUI_FROM_DATABASE=ESA Elektroschaltanlagen Grimma GmbH
 
+OUI:3CB07E*
+ ID_OUI_FROM_DATABASE=Arounds Intelligent Equipment Co., Ltd.
+
 OUI:3CB15B*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
@@ -56657,6 +57776,9 @@
 OUI:3CBBFD*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:3CBCD0*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:3CBD3E*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co., Ltd.
 
@@ -56774,6 +57896,9 @@
 OUI:3CDFBD*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:3CE002*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:3CE038*
  ID_OUI_FROM_DATABASE=Omnifi Inc.
 
@@ -56792,6 +57917,9 @@
 OUI:3CE3E7*
  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
 
+OUI:3CE441*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:3CE4B0*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -56849,6 +57977,9 @@
 OUI:3CF652*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:3CF692*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:3CF72A*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -56867,6 +57998,12 @@
 OUI:3CF862*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:3CF9F0*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:3CFA06*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:3CFA43*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -57062,6 +58199,9 @@
 OUI:401920*
  ID_OUI_FROM_DATABASE=Movon Corporation
 
+OUI:401A58*
+ ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
+
 OUI:401B5F*
  ID_OUI_FROM_DATABASE=WEIFANG GOERTEK ELECTRONICS CO.,LTD
 
@@ -57173,6 +58313,9 @@
 OUI:40329D*
  ID_OUI_FROM_DATABASE=Union Image Co.,Ltd
 
+OUI:403306*
+ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+
 OUI:40331A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -57215,6 +58358,9 @@
 OUI:404101*
  ID_OUI_FROM_DATABASE=Rockwell Automation
 
+OUI:40410D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:404229*
  ID_OUI_FROM_DATABASE=Layer3TV, Inc
 
@@ -57224,9 +58370,15 @@
 OUI:4044FD*
  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
 
+OUI:4045C4*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:4045DA*
  ID_OUI_FROM_DATABASE=Spreadtrum Communications (Shanghai) Co., Ltd.
 
+OUI:40475E*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:40476A*
  ID_OUI_FROM_DATABASE=Astro Gaming
 
@@ -57293,6 +58445,9 @@
 OUI:404C77*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:404CCA*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:404D7F*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -57305,6 +58460,9 @@
 OUI:404EEB*
  ID_OUI_FROM_DATABASE=Higher Way Electronic Co., Ltd.
 
+OUI:404F42*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:4050B5*
  ID_OUI_FROM_DATABASE=Shenzhen New Species Technology Co., Ltd.
 
@@ -57396,7 +58554,7 @@
  ID_OUI_FROM_DATABASE=mediola - connected living AG
 
 OUI:40679B*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:406826*
  ID_OUI_FROM_DATABASE=Thales UK Limited
@@ -57434,6 +58592,9 @@
 OUI:4074E0*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:4075C3*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:4076A9*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -57458,6 +58619,9 @@
 OUI:407D0F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:407F5F*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:407FE0*
  ID_OUI_FROM_DATABASE=Glory Star Technics (ShenZhen) Limited
 
@@ -57506,15 +58670,24 @@
 OUI:408D5C*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
+OUI:408E2C*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:408EDF*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:408EF6*
+ ID_OUI_FROM_DATABASE=Infinix mobility limited
+
 OUI:408F9D*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
 OUI:409151*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:40921A*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:409505*
  ID_OUI_FROM_DATABASE=ACOINFO TECHNOLOGY CO.,LTD
 
@@ -57617,6 +58790,9 @@
 OUI:40A3CC*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:40A53B*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:40A5EF*
  ID_OUI_FROM_DATABASE=Shenzhen Four Seas Global Link Network Technology Co., Ltd.
 
@@ -57668,6 +58844,9 @@
 OUI:40B0FA*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
+OUI:40B15C*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:40B2C8*
  ID_OUI_FROM_DATABASE=Nortel Networks
 
@@ -57695,6 +58874,9 @@
 OUI:40B5C1*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:40B607*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:40B688*
  ID_OUI_FROM_DATABASE=LEGIC Identsystems AG
 
@@ -57743,9 +58925,15 @@
 OUI:40BF17*
  ID_OUI_FROM_DATABASE=Digistar Telecom. SA
 
+OUI:40C1F6*
+ ID_OUI_FROM_DATABASE=Shenzhen Jingxun Technology Co., Ltd.
+
 OUI:40C245*
  ID_OUI_FROM_DATABASE=Shenzhen Hexicom Technology Co., Ltd.
 
+OUI:40C2BA*
+ ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+
 OUI:40C3BC*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -57845,6 +59033,9 @@
 OUI:40DF02*
  ID_OUI_FROM_DATABASE=LINE BIZ Plus
 
+OUI:40E11C*
+ ID_OUI_FROM_DATABASE=shenzhen Cloud High Communication Technology Co.,Ltd
+
 OUI:40E171*
  ID_OUI_FROM_DATABASE=Jiangsu Huitong Group Co.,Ltd.
 
@@ -57923,6 +59114,9 @@
 OUI:40ED98E*
  ID_OUI_FROM_DATABASE=BORDA TECHNOLOGY
 
+OUI:40EDCF*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:40EE15*
  ID_OUI_FROM_DATABASE=Zioncom Electronics (Shenzhen) Ltd.
 
@@ -57948,7 +59142,7 @@
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
 OUI:40F21C*
- ID_OUI_FROM_DATABASE=DASAN Zhone Solutions
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:40F2E9*
  ID_OUI_FROM_DATABASE=IBM
@@ -58014,7 +59208,7 @@
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:40F4FD*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:40F520*
  ID_OUI_FROM_DATABASE=Espressif Inc.
@@ -58037,15 +59231,24 @@
 OUI:40FA7F*
  ID_OUI_FROM_DATABASE=Preh Car Connect GmbH
 
+OUI:40FAFE*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
 OUI:40FC89*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:40FDF3*
+ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
+
 OUI:40FE0D*
  ID_OUI_FROM_DATABASE=MAXIO
 
 OUI:40FE95*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
+OUI:40FF40*
+ ID_OUI_FROM_DATABASE=GloquadTech
+
 OUI:440010*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -58112,6 +59315,9 @@
 OUI:440444*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
+OUI:4405E8*
+ ID_OUI_FROM_DATABASE=twareLAB
+
 OUI:44070B*
  ID_OUI_FROM_DATABASE=Google, Inc.
 
@@ -58119,7 +59325,7 @@
  ID_OUI_FROM_DATABASE=Salcomp (Shenzhen) CO., LTD.
 
 OUI:440CEE*
- ID_OUI_FROM_DATABASE=Robert Bosch Elektronika Kft
+ ID_OUI_FROM_DATABASE=Robert Bosch Elektronikai Kft.
 
 OUI:440CFD*
  ID_OUI_FROM_DATABASE=NetMan Co., Ltd.
@@ -58133,6 +59339,9 @@
 OUI:4411C2*
  ID_OUI_FROM_DATABASE=Telegartner Karl Gartner GmbH
 
+OUI:441244*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:441319*
  ID_OUI_FROM_DATABASE=WKK TECHNOLOGY LTD.
 
@@ -58145,6 +59354,9 @@
 OUI:441622*
  ID_OUI_FROM_DATABASE=Microsoft Corporation
 
+OUI:4416FA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:441793*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -58187,6 +59399,9 @@
 OUI:441EA1*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:442063*
+ ID_OUI_FROM_DATABASE=Continental Automotive Technologies GmbH
+
 OUI:44227C*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -58205,6 +59420,9 @@
 OUI:4425BB*
  ID_OUI_FROM_DATABASE=Bamboo Entertainment Corporation
 
+OUI:44272E*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:4427F3*
  ID_OUI_FROM_DATABASE=70mai Co.,Ltd.
 
@@ -58235,6 +59453,9 @@
 OUI:44322A*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
+OUI:443262*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:4432C2*
  ID_OUI_FROM_DATABASE=GOAL Co., Ltd.
 
@@ -58286,12 +59507,21 @@
 OUI:443D21*
  ID_OUI_FROM_DATABASE=Nuvolt
 
+OUI:443D54*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:443E07*
  ID_OUI_FROM_DATABASE=Electrolux
 
 OUI:443EB2*
  ID_OUI_FROM_DATABASE=DEOTRON Co., LTD.
 
+OUI:4441F0*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:444201*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:44422F*
  ID_OUI_FROM_DATABASE=TESTOP CO.,LTD.
 
@@ -58319,12 +59549,18 @@
 OUI:4448FF*
  ID_OUI_FROM_DATABASE=Qingdao Haier Technology Co.,Ltd
 
+OUI:444988*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:444A65*
  ID_OUI_FROM_DATABASE=Silverflare Ltd.
 
 OUI:444AB0*
  ID_OUI_FROM_DATABASE=Zhejiang Moorgen Intelligence Technology Co., Ltd
 
+OUI:444AD6*
+ ID_OUI_FROM_DATABASE=Shenzhen Rinocloud Technology Co.,Ltd.
+
 OUI:444ADB*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -58385,6 +59621,9 @@
 OUI:4459E3*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:445ADF*
+ ID_OUI_FROM_DATABASE=MIKAMI & CO., LTD.
+
 OUI:445BED*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
@@ -58415,6 +59654,12 @@
 OUI:446246*
  ID_OUI_FROM_DATABASE=Comat AG
 
+OUI:446370*
+ ID_OUI_FROM_DATABASE=LCFC(Hefei) Electronics Technology Co., Ltd
+
+OUI:44643C*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:44650D*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -58520,6 +59765,9 @@
 OUI:447098*
  ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
 
+OUI:447147*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co.,Ltd
+
 OUI:4473D6*
  ID_OUI_FROM_DATABASE=Logitech
 
@@ -58595,6 +59843,9 @@
 OUI:448C52*
  ID_OUI_FROM_DATABASE=KTIS CO., Ltd
 
+OUI:448CAB*
+ ID_OUI_FROM_DATABASE=Beijing Flitlink Vientiane Technology Co., LTD
+
 OUI:448DBF*
  ID_OUI_FROM_DATABASE=Rhino Mobility LLC
 
@@ -58604,6 +59855,9 @@
 OUI:448E81*
  ID_OUI_FROM_DATABASE=VIG
 
+OUI:448EEC*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
 OUI:448F17*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd. ARTIK
 
@@ -58655,6 +59909,9 @@
 OUI:44A191*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:44A3C7*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:44A42D*
  ID_OUI_FROM_DATABASE=TCT mobile ltd
 
@@ -58793,6 +60050,9 @@
 OUI:44B6BE*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:44B7D0*
+ ID_OUI_FROM_DATABASE=Microchip Technology Inc.
+
 OUI:44B994*
  ID_OUI_FROM_DATABASE=Douglas Lighting Controls
 
@@ -58865,6 +60125,9 @@
 OUI:44D244*
  ID_OUI_FROM_DATABASE=Seiko Epson Corporation
 
+OUI:44D267*
+ ID_OUI_FROM_DATABASE=Snorble
+
 OUI:44D2CA*
  ID_OUI_FROM_DATABASE=Anvia TV Oy
 
@@ -58886,6 +60149,9 @@
 OUI:44D4E0*
  ID_OUI_FROM_DATABASE=Sony Corporation
 
+OUI:44D506*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:44D5A5*
  ID_OUI_FROM_DATABASE=AddOn Computer
 
@@ -58956,7 +60222,7 @@
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:44D9E7*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:44DA30*
  ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -58964,6 +60230,9 @@
 OUI:44DB60*
  ID_OUI_FROM_DATABASE=Nanjing Baihezhengliu Technology Co., Ltd
 
+OUI:44DBD2*
+ ID_OUI_FROM_DATABASE=YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+
 OUI:44DC4E*
  ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
 
@@ -58973,12 +60242,18 @@
 OUI:44DCCB*
  ID_OUI_FROM_DATABASE=SEMINDIA SYSTEMS PVT LTD
 
+OUI:44DF65*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
 OUI:44E08E*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
 OUI:44E137*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:44E2F1*
+ ID_OUI_FROM_DATABASE=NewRadio Technologies Co. , Ltd.
+
 OUI:44E49A*
  ID_OUI_FROM_DATABASE=OMNITRONICS PTY LTD
 
@@ -59016,7 +60291,7 @@
  ID_OUI_FROM_DATABASE=Texas Instruments
 
 OUI:44EB2E*
- ID_OUI_FROM_DATABASE=ALPSALPINE CO .,LTD
+ ID_OUI_FROM_DATABASE=ALPSALPINE CO,.LTD
 
 OUI:44ECCE*
  ID_OUI_FROM_DATABASE=Juniper Networks
@@ -59027,6 +60302,9 @@
 OUI:44EE02*
  ID_OUI_FROM_DATABASE=MTI Ltd.
 
+OUI:44EE14*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:44EE30*
  ID_OUI_FROM_DATABASE=Budelmann Elektronik GmbH
 
@@ -59204,15 +60482,24 @@
 OUI:481A84*
  ID_OUI_FROM_DATABASE=Pointer Telocation Ltd
 
+OUI:481B40*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:481BD2*
  ID_OUI_FROM_DATABASE=Intron Scientific co., ltd.
 
+OUI:481CB9*
+ ID_OUI_FROM_DATABASE=SZ DJI TECHNOLOGY CO.,LTD
+
 OUI:481D70*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
 OUI:481F2D*
  ID_OUI_FROM_DATABASE=Shenzhen Jie Shi Lian Industrial Co.,LTD
 
+OUI:481F66*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
 OUI:48210B*
  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
 
@@ -59222,12 +60509,18 @@
 OUI:482218*
  ID_OUI_FROM_DATABASE=Shenzhen Yipingfang Network Technology Co., Ltd.
 
+OUI:482254*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:482335*
  ID_OUI_FROM_DATABASE=Dialog Semiconductor Hellas SA
 
 OUI:482567*
  ID_OUI_FROM_DATABASE=Poly
 
+OUI:4825F3*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:48262C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -59252,8 +60545,11 @@
 OUI:482952*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:4829D6*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:4829E4*
- ID_OUI_FROM_DATABASE=ZAO NPK Rotek
+ ID_OUI_FROM_DATABASE=AO
 
 OUI:482AE3*
  ID_OUI_FROM_DATABASE=Wistron InfoComm(Kunshan)Co.,Ltd.
@@ -59276,6 +60572,12 @@
 OUI:482FD7*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:483177*
+ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+
+OUI:4831DB*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:4833DD*
  ID_OUI_FROM_DATABASE=ZENNIO AVANCE Y TECNOLOGIA, S.L.
 
@@ -59294,6 +60596,9 @@
 OUI:483871*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:4838B6*
+ ID_OUI_FROM_DATABASE=Auhui Taoyun Technology Co., Ltd
+
 OUI:483974*
  ID_OUI_FROM_DATABASE=Proware Technologies Co., Ltd.
 
@@ -59333,6 +60638,9 @@
 OUI:484520*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:4845CF*
+ ID_OUI_FROM_DATABASE=LLC Proizvodstvennaya Kompania TransService
+
 OUI:48468D*
  ID_OUI_FROM_DATABASE=Zepcam B.V.
 
@@ -59405,6 +60713,9 @@
 OUI:48555C*
  ID_OUI_FROM_DATABASE=Wu Qi Technologies,Inc.
 
+OUI:48555E*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
+
 OUI:48555F*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -59423,6 +60734,9 @@
 OUI:4859A4*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:485A0D*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:485A3F*
  ID_OUI_FROM_DATABASE=WISOL
 
@@ -59438,6 +60752,9 @@
 OUI:485B39*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:485D35*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
 OUI:485D36*
  ID_OUI_FROM_DATABASE=Verizon
 
@@ -59447,6 +60764,9 @@
 OUI:485DEB*
  ID_OUI_FROM_DATABASE=Just Add Power
 
+OUI:485DED*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:485F99*
  ID_OUI_FROM_DATABASE=Cloud Network Technology (Samoa) Limited
 
@@ -59523,7 +60843,7 @@
  ID_OUI_FROM_DATABASE=Fleetwood Group Inc.
 
 OUI:486DBB*
- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
+ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
 
 OUI:486E70*
  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
@@ -59534,6 +60854,9 @@
 OUI:486EFB*
  ID_OUI_FROM_DATABASE=Davit System Technology Co., Ltd.
 
+OUI:486F33*
+ ID_OUI_FROM_DATABASE=KYUNGWOO.SYSTEM, INC.
+
 OUI:486FD2*
  ID_OUI_FROM_DATABASE=StorSimple Inc
 
@@ -59546,6 +60869,9 @@
 OUI:487119*
  ID_OUI_FROM_DATABASE=SGB GROUP LTD.
 
+OUI:487310*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:487397*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
@@ -59564,6 +60890,9 @@
 OUI:487604*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:487706*
+ ID_OUI_FROM_DATABASE=NXP Semiconductor (Tianjin) LTD.
+
 OUI:487746*
  ID_OUI_FROM_DATABASE=Calix Inc.
 
@@ -59600,6 +60929,12 @@
 OUI:487E48*
  ID_OUI_FROM_DATABASE=Earda Technologies co Ltd
 
+OUI:48814E*
+ ID_OUI_FROM_DATABASE=E&M SOLUTION CO,.Ltd
+
+OUI:4881D4*
+ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
+
 OUI:488244*
  ID_OUI_FROM_DATABASE=Life Fitness / Div. of Brunswick
 
@@ -59642,6 +60977,9 @@
 OUI:488AD2*
  ID_OUI_FROM_DATABASE=MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
 
+OUI:488AE8*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:488B0A*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -59657,6 +60995,9 @@
 OUI:488EEF*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:488F4C*
+ ID_OUI_FROM_DATABASE=shenzhen trolink  Technology Co.,Ltd
+
 OUI:488F5A*
  ID_OUI_FROM_DATABASE=Routerboard.com
 
@@ -59666,6 +61007,9 @@
 OUI:489153*
  ID_OUI_FROM_DATABASE=Weinmann Geräte für Medizin GmbH + Co. KG
 
+OUI:4891D5*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:4891F6*
  ID_OUI_FROM_DATABASE=Shenzhen Reach software technology CO.,LTD
 
@@ -59696,9 +61040,15 @@
 OUI:489DD1*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:489E9D*
+ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+
 OUI:489EBD*
  ID_OUI_FROM_DATABASE=HP Inc.
 
+OUI:489ECB*
+ ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+
 OUI:48A0F8*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -59747,6 +61097,9 @@
 OUI:48A91C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:48A98A*
+ ID_OUI_FROM_DATABASE=Routerboard.com
+
 OUI:48A9D2*
  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
 
@@ -59798,6 +61151,9 @@
 OUI:48BCA6*
  ID_OUI_FROM_DATABASE=​ASUNG TECHNO CO.,Ltd
 
+OUI:48BCE1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:48BD0E*
  ID_OUI_FROM_DATABASE=Quanta Storage Inc.
 
@@ -59807,6 +61163,12 @@
 OUI:48BD4A*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:48BDA7*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
+OUI:48BDCE*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:48BE2D*
  ID_OUI_FROM_DATABASE=Symanitron
 
@@ -59825,6 +61187,12 @@
 OUI:48C1AC*
  ID_OUI_FROM_DATABASE=PLANTRONICS, INC.
 
+OUI:48C1EE*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
+OUI:48C35A*
+ ID_OUI_FROM_DATABASE=LENOVO(BEIJING)CO., LTD.
+
 OUI:48C3B0*
  ID_OUI_FROM_DATABASE=Pharos Co.Ltd
 
@@ -59844,7 +61212,7 @@
  ID_OUI_FROM_DATABASE=SysTec GmbH
 
 OUI:48CAC6*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:48CB6E*
  ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd
@@ -59927,6 +61295,9 @@
 OUI:48DF37*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
+OUI:48E15C*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:48E1AF*
  ID_OUI_FROM_DATABASE=Vity
 
@@ -59945,6 +61316,9 @@
 OUI:48E6C0*
  ID_OUI_FROM_DATABASE=SIMCom Wireless Solutions Co.,Ltd.
 
+OUI:48E729*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:48E7DA*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
@@ -60056,6 +61430,9 @@
 OUI:4C034F*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:4C0617*
+ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+
 OUI:4C068A*
  ID_OUI_FROM_DATABASE=Basler Electric Company
 
@@ -60173,9 +61550,18 @@
 OUI:4C2258*
  ID_OUI_FROM_DATABASE=cozybit, Inc.
 
+OUI:4C22F3*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
+OUI:4C231A*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:4C2498*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:4C24CE*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
 OUI:4C2578*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -60228,7 +61614,7 @@
  ID_OUI_FROM_DATABASE=Intel Corporate
 
 OUI:4C364E*
- ID_OUI_FROM_DATABASE=Panasonic Corporation  Connected Solutions Company
+ ID_OUI_FROM_DATABASE=Panasonic Connect Co., Ltd.
 
 OUI:4C38D5*
  ID_OUI_FROM_DATABASE=MITAC COMPUTING TECHNOLOGY CORPORATION
@@ -60263,6 +61649,9 @@
 OUI:4C4088*
  ID_OUI_FROM_DATABASE=SANSHIN ELECTRONICS CO.,LTD.
 
+OUI:4C421E*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:4C445B*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -60380,6 +61769,12 @@
 OUI:4C57CA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:4C5BB3*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
+OUI:4C5CDF*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
 OUI:4C5D3C*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -60389,6 +61784,9 @@
 OUI:4C5E0C*
  ID_OUI_FROM_DATABASE=Routerboard.com
 
+OUI:4C5ED3*
+ ID_OUI_FROM_DATABASE=Unisyue Technologies Co; LTD.
+
 OUI:4C5FD2*
  ID_OUI_FROM_DATABASE=Alcatel-Lucent
 
@@ -60410,6 +61808,9 @@
 OUI:4C6371*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:4C63AD*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:4C63EB*
  ID_OUI_FROM_DATABASE=Application Solutions (Electronics and Vision) Ltd
 
@@ -60512,6 +61913,51 @@
 OUI:4C7487*
  ID_OUI_FROM_DATABASE=Leader Phone Communication Technology Co., Ltd.
 
+OUI:4C74A70*
+ ID_OUI_FROM_DATABASE=Shenzhen Timekettle Technologies Co.,Ltd
+
+OUI:4C74A71*
+ ID_OUI_FROM_DATABASE=Shenzhen Hollyland Technology Co.,Ltd
+
+OUI:4C74A72*
+ ID_OUI_FROM_DATABASE=Cyanview
+
+OUI:4C74A73*
+ ID_OUI_FROM_DATABASE=GoCodeIT Inc
+
+OUI:4C74A74*
+ ID_OUI_FROM_DATABASE=Wuxi Micro Innovation Integrated Circuit Design Co., Ltd
+
+OUI:4C74A75*
+ ID_OUI_FROM_DATABASE=AGILITY ROBOTICS, INC.
+
+OUI:4C74A76*
+ ID_OUI_FROM_DATABASE=ABB LV Installation Materials Co., Ltd. Beijing
+
+OUI:4C74A77*
+ ID_OUI_FROM_DATABASE=COREIP TECHNOLOGY PRIVATE LIMITED
+
+OUI:4C74A78*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:4C74A79*
+ ID_OUI_FROM_DATABASE=Suzhou XiongLi Technology Inc.
+
+OUI:4C74A7A*
+ ID_OUI_FROM_DATABASE=RAONARK
+
+OUI:4C74A7B*
+ ID_OUI_FROM_DATABASE=traplinked Gmbh
+
+OUI:4C74A7C*
+ ID_OUI_FROM_DATABASE=N3com
+
+OUI:4C74A7D*
+ ID_OUI_FROM_DATABASE=ddcpersia
+
+OUI:4C74A7E*
+ ID_OUI_FROM_DATABASE=KYOCERA CORPORATION
+
 OUI:4C74BF*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -60575,6 +62021,9 @@
 OUI:4C8120*
  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
 
+OUI:4C82A9*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:4C82CF*
  ID_OUI_FROM_DATABASE=Dish Technologies Corp
 
@@ -60584,6 +62033,9 @@
 OUI:4C875D*
  ID_OUI_FROM_DATABASE=Bose Corporation
 
+OUI:4C889E*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:4C8B30*
  ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
 
@@ -60675,7 +62127,7 @@
  ID_OUI_FROM_DATABASE=4TheWall - 4D Sistem A.S
 
 OUI:4C93A65*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Fastenal IP Company
 
 OUI:4C93A66*
  ID_OUI_FROM_DATABASE=Shandong Senter Electronic Co., Ltd
@@ -60710,9 +62162,15 @@
 OUI:4C962D*
  ID_OUI_FROM_DATABASE=Fresh AB
 
+OUI:4C968A*
+ ID_OUI_FROM_DATABASE=Wacom Co.,Ltd.
+
 OUI:4C98EF*
  ID_OUI_FROM_DATABASE=Zeo
 
+OUI:4C9B63*
+ ID_OUI_FROM_DATABASE=LG Innotek
+
 OUI:4C9D22*
  ID_OUI_FROM_DATABASE=ACES Co.,Ltd
 
@@ -60734,6 +62192,9 @@
 OUI:4CA161*
  ID_OUI_FROM_DATABASE=Rain Bird Corporation
 
+OUI:4CA3A7*
+ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+
 OUI:4CA515*
  ID_OUI_FROM_DATABASE=Baikal Electronics JSC
 
@@ -60788,6 +62249,9 @@
 OUI:4CB008*
  ID_OUI_FROM_DATABASE=Shenzhen Gwelltimes Technology Co.,Ltd
 
+OUI:4CB087*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:4CB0E8*
  ID_OUI_FROM_DATABASE=Beijing RongZhi xinghua technology co., LTD
 
@@ -60836,6 +62300,9 @@
 OUI:4CB9EA*
  ID_OUI_FROM_DATABASE=iRobot Corporation
 
+OUI:4CBA7D*
+ ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
+
 OUI:4CBAA3*
  ID_OUI_FROM_DATABASE=Bison Electronics Inc.
 
@@ -60935,6 +62402,9 @@
 OUI:4CC7D6*
  ID_OUI_FROM_DATABASE=FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
 
+OUI:4CC844*
+ ID_OUI_FROM_DATABASE=Maipu Communication Technology Co.,Ltd.
+
 OUI:4CC8A1*
  ID_OUI_FROM_DATABASE=Cisco Meraki
 
@@ -61076,6 +62546,9 @@
 OUI:4CE6C0*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:4CE705*
+ ID_OUI_FROM_DATABASE=Siemens Industrial Automation Products Ltd., Chengdu
+
 OUI:4CE933*
  ID_OUI_FROM_DATABASE=RailComm, LLC
 
@@ -61154,6 +62627,9 @@
 OUI:4CFBFE*
  ID_OUI_FROM_DATABASE=Sercomm Japan Corporation
 
+OUI:4CFC22*
+ ID_OUI_FROM_DATABASE=SHANGHAI HI-TECH CONTROL SYSTEM CO.,LTD.
+
 OUI:4CFCAA*
  ID_OUI_FROM_DATABASE=Tesla,Inc.
 
@@ -61193,6 +62669,9 @@
 OUI:5006AB*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:5007C3*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:500959*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
@@ -61202,6 +62681,9 @@
 OUI:500A52*
  ID_OUI_FROM_DATABASE=Huiwan Technologies Co. Ltd
 
+OUI:500B26*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:500B32*
  ID_OUI_FROM_DATABASE=Foxda Technology Industrial(ShenZhen)Co.,LTD
 
@@ -61277,6 +62759,9 @@
 OUI:5014B5*
  ID_OUI_FROM_DATABASE=Richfit Information Technology Co., Ltd
 
+OUI:5014C1*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:5017FF*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -61316,6 +62801,9 @@
 OUI:502267*
  ID_OUI_FROM_DATABASE=PixeLINK
 
+OUI:50236D*
+ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+
 OUI:5023A2*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -61325,6 +62813,12 @@
 OUI:502690*
  ID_OUI_FROM_DATABASE=FUJITSU LIMITED
 
+OUI:5026EF*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
+OUI:5027A9*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:5027C7*
  ID_OUI_FROM_DATABASE=TECHNART Co.,Ltd
 
@@ -61385,6 +62879,9 @@
 OUI:502FA8*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:5030F4*
+ ID_OUI_FROM_DATABASE=Exascend, Inc.
+
 OUI:5031AD*
  ID_OUI_FROM_DATABASE=ABB Global Industries and Services Private Limited
 
@@ -61421,6 +62918,9 @@
 OUI:503CC4*
  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
 
+OUI:503CCA*
+ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+
 OUI:503CEA*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -61442,6 +62942,9 @@
 OUI:503EAA*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:503F50*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:503F56*
  ID_OUI_FROM_DATABASE=Syncmold Enterprise Corp
 
@@ -61454,6 +62957,9 @@
 OUI:50411C*
  ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
 
+OUI:504172*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:5041B9*
  ID_OUI_FROM_DATABASE=I-O DATA DEVICE,INC.
 
@@ -61466,6 +62972,9 @@
 OUI:5043B9*
  ID_OUI_FROM_DATABASE=OktoInform RUS
 
+OUI:504594*
+ ID_OUI_FROM_DATABASE=Radisys
+
 OUI:5045F7*
  ID_OUI_FROM_DATABASE=Liuhe Intelligence Technology Ltd.
 
@@ -61478,9 +62987,15 @@
 OUI:5046AE*
  ID_OUI_FROM_DATABASE=MERCURY CORPORATION
 
+OUI:504877*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
 OUI:5048EB*
  ID_OUI_FROM_DATABASE=BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.
 
+OUI:504921*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:5049B0*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -61568,6 +63083,9 @@
 OUI:505967*
  ID_OUI_FROM_DATABASE=Intent Solutions Inc
 
+OUI:505A65*
+ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+
 OUI:505AC6*
  ID_OUI_FROM_DATABASE=GUANGDONG SUPER TELECOM CO.,LTD.
 
@@ -61581,7 +63099,7 @@
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:505FB5*
- ID_OUI_FROM_DATABASE=Askey Computer Corp.
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
 
 OUI:506028*
  ID_OUI_FROM_DATABASE=Xirrus Inc.
@@ -61646,6 +63164,9 @@
 OUI:506313*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:506391*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:50642B*
  ID_OUI_FROM_DATABASE=XIAOMI Electronics,CO.,LTD
 
@@ -61658,6 +63179,9 @@
 OUI:5065F3*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:5066E5*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:506787*
  ID_OUI_FROM_DATABASE=Planet Networks
 
@@ -61758,7 +63282,7 @@
  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
 
 OUI:50804A*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
 OUI:508140*
  ID_OUI_FROM_DATABASE=HP Inc.
@@ -61799,6 +63323,9 @@
 OUI:508ACB*
  ID_OUI_FROM_DATABASE=SHENZHEN MAXMADE TECHNOLOGY CO., LTD.
 
+OUI:508BB9*
+ ID_OUI_FROM_DATABASE=Tuya Smart Inc.
+
 OUI:508C77*
  ID_OUI_FROM_DATABASE=DIRMEIER Schanktechnik GmbH &Co KG
 
@@ -62129,6 +63656,9 @@
 OUI:50D37F*
  ID_OUI_FROM_DATABASE=Yu Fly Mikly Way Science and Technology Co., Ltd.
 
+OUI:50D45C*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:50D4F7*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -62231,6 +63761,9 @@
 OUI:50E24E*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:50E538*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:50E549*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
@@ -62333,6 +63866,9 @@
 OUI:50FC9F*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:50FDD5*
+ ID_OUI_FROM_DATABASE=SJI Industry Company
+
 OUI:50FEF2*
  ID_OUI_FROM_DATABASE=Sify Technologies Ltd
 
@@ -62387,6 +63923,9 @@
 OUI:540237*
  ID_OUI_FROM_DATABASE=Teltronic AG
 
+OUI:540295*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:540384*
  ID_OUI_FROM_DATABASE=Hongkong Nano IC Technologies Co., Ltd
 
@@ -62417,6 +63956,54 @@
 OUI:540764*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:54077D*
+ ID_OUI_FROM_DATABASE=NETGEAR
+
+OUI:54083B0*
+ ID_OUI_FROM_DATABASE=Shenzhen Liandian Communication Technology Co.LTD
+
+OUI:54083B1*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:54083B2*
+ ID_OUI_FROM_DATABASE=NAVITUS LT
+
+OUI:54083B3*
+ ID_OUI_FROM_DATABASE=Dhyan Networks and Technologies, Inc
+
+OUI:54083B4*
+ ID_OUI_FROM_DATABASE=Toray Medical Company Limited
+
+OUI:54083B5*
+ ID_OUI_FROM_DATABASE=shenzhen HAIOT technology co.,ltd
+
+OUI:54083B6*
+ ID_OUI_FROM_DATABASE=Vector Atomic
+
+OUI:54083B7*
+ ID_OUI_FROM_DATABASE=ASCS Sp. z o.o.
+
+OUI:54083B8*
+ ID_OUI_FROM_DATABASE=Update Systems Inc.
+
+OUI:54083B9*
+ ID_OUI_FROM_DATABASE=Unicompute Technology Co.,Ltd.
+
+OUI:54083BA*
+ ID_OUI_FROM_DATABASE=Silex Ipari Automatizálási Zrt.
+
+OUI:54083BB*
+ ID_OUI_FROM_DATABASE=Korea Bus Broadcasting
+
+OUI:54083BC*
+ ID_OUI_FROM_DATABASE=FairPhone B.V.
+
+OUI:54083BD*
+ ID_OUI_FROM_DATABASE=BHS Corrugated Maschinen- und Anlagenbau GmbH
+
+OUI:54083BE*
+ ID_OUI_FROM_DATABASE=Sinclair Technologies
+
 OUI:540910*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -62438,6 +64025,9 @@
 OUI:540F57*
  ID_OUI_FROM_DATABASE=Silicon Laboratories
 
+OUI:54102E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:541031*
  ID_OUI_FROM_DATABASE=SMARTO
 
@@ -62447,6 +64037,12 @@
 OUI:54112F*
  ID_OUI_FROM_DATABASE=Sulzer Pump Solutions Finland Oy
 
+OUI:541149*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
+OUI:541159*
+ ID_OUI_FROM_DATABASE=Nettrix Information Industry co.LTD
+
 OUI:54115F*
  ID_OUI_FROM_DATABASE=Atamo Pty Ltd
 
@@ -62459,6 +64055,9 @@
 OUI:541473*
  ID_OUI_FROM_DATABASE=Wingtech Group (HongKong）Limited
 
+OUI:5414A7*
+ ID_OUI_FROM_DATABASE=Nanjing Qinheng Microelectronics Co., Ltd.
+
 OUI:5414F3*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -62561,6 +64160,9 @@
 OUI:5431D4*
  ID_OUI_FROM_DATABASE=TGW Mechanics GmbH
 
+OUI:5432C7*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:5433CB*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -62627,6 +64229,9 @@
 OUI:544741*
  ID_OUI_FROM_DATABASE=XCHENG HOLDING
 
+OUI:5447CC*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:5447D3*
  ID_OUI_FROM_DATABASE=TSAT AS
 
@@ -62669,6 +64274,9 @@
 OUI:545146*
  ID_OUI_FROM_DATABASE=AMG Systems Ltd.
 
+OUI:5451DE*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:545284*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -62687,6 +64295,9 @@
 OUI:545AA6*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:545DD9*
+ ID_OUI_FROM_DATABASE=EDISTEC
+
 OUI:545EBD*
  ID_OUI_FROM_DATABASE=NL Technologies
 
@@ -62708,8 +64319,11 @@
 OUI:5464D9*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:5464DE*
+ ID_OUI_FROM_DATABASE=u-blox AG
+
 OUI:546503*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
 OUI:5465DE*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -62750,6 +64364,9 @@
 OUI:546F71*
  ID_OUI_FROM_DATABASE=uAvionix Corporation
 
+OUI:547068*
+ ID_OUI_FROM_DATABASE=VTech Communications Limited
+
 OUI:5471DD*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -62757,7 +64374,7 @@
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:54725E*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:547398*
  ID_OUI_FROM_DATABASE=Toyo Electronics Corporation
@@ -62837,6 +64454,9 @@
 OUI:5488DE*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:5488FE*
+ ID_OUI_FROM_DATABASE=Xiaoniu network technology (Shanghai) Co., Ltd.
+
 OUI:548922*
  ID_OUI_FROM_DATABASE=Zelfy Inc
 
@@ -62846,6 +64466,9 @@
 OUI:548ABA*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:548C81*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:548CA0*
  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
 
@@ -63068,6 +64691,9 @@
 OUI:54B753*
  ID_OUI_FROM_DATABASE=Hunan Fenghui Yinjia Science And Technology Co.,Ltd
 
+OUI:54B7BD*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
 OUI:54B7E5*
  ID_OUI_FROM_DATABASE=Rayson Technology Co., Ltd.
 
@@ -63101,12 +64727,18 @@
 OUI:54C415*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
+OUI:54C45B*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
 OUI:54C480*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:54C57A*
  ID_OUI_FROM_DATABASE=Sunnovo International Limited
 
+OUI:54C6FF*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:54C80F*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -63155,6 +64787,9 @@
 OUI:54D751*
  ID_OUI_FROM_DATABASE=Proximus
 
+OUI:54D7E3*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:54D9C6*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -63200,6 +64835,9 @@
 OUI:54E1AD*
  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
 
+OUI:54E1B6*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
 OUI:54E2C8*
  ID_OUI_FROM_DATABASE=Dongguan Aoyuan Electronics Technology Co., Ltd
 
@@ -63236,6 +64874,9 @@
 OUI:54EAA8*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:54EBE9*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:54EC2F*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -63248,6 +64889,9 @@
 OUI:54EF33*
  ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.，LTD
 
+OUI:54EF43*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:54EF44*
  ID_OUI_FROM_DATABASE=Lumi United Technology Co., Ltd
 
@@ -63287,6 +64931,9 @@
 OUI:54F876*
  ID_OUI_FROM_DATABASE=ABB AG
 
+OUI:54F8F0*
+ ID_OUI_FROM_DATABASE=Tesla Inc
+
 OUI:54FA3E*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -63347,6 +64994,9 @@
 OUI:580AD4*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:581031*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision IND.CO.,LTD
+
 OUI:58108C*
  ID_OUI_FROM_DATABASE=Intelbras
 
@@ -63401,6 +65051,9 @@
 OUI:582059*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:582071*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:58208A0*
  ID_OUI_FROM_DATABASE=Annapurna labs
 
@@ -63485,6 +65138,9 @@
 OUI:582FF7*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:58305B*
+ ID_OUI_FROM_DATABASE=Shanghai Junqian Sensing Technology Co.,LTD
+
 OUI:583112*
  ID_OUI_FROM_DATABASE=DRUST
 
@@ -63542,6 +65198,45 @@
 OUI:584704*
  ID_OUI_FROM_DATABASE=Shenzhen Webridge Technology Co.,Ltd
 
+OUI:5847CA0*
+ ID_OUI_FROM_DATABASE=LITUM BILGI TEKNOLOJILERI SAN. VE TIC. A.S.
+
+OUI:5847CA1*
+ ID_OUI_FROM_DATABASE=Hexagon Metrology Services Ltd.
+
+OUI:5847CA2*
+ ID_OUI_FROM_DATABASE=ONAWHIM (OAW) INC.
+
+OUI:5847CA4*
+ ID_OUI_FROM_DATABASE=Future Tech Development FZC LLC
+
+OUI:5847CA6*
+ ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd.
+
+OUI:5847CA7*
+ ID_OUI_FROM_DATABASE=Shenzhen Meigao Electronic Equipment Co.,Ltd
+
+OUI:5847CA8*
+ ID_OUI_FROM_DATABASE=Birger Engineering, Inc.
+
+OUI:5847CA9*
+ ID_OUI_FROM_DATABASE=Kingnuo Intelligent Technology (Jiaxing) Co., Ltd.
+
+OUI:5847CAA*
+ ID_OUI_FROM_DATABASE=Powder Watts, LLC
+
+OUI:5847CAB*
+ ID_OUI_FROM_DATABASE=Suzhou Laisai Intelligence Technology Co.,Ltd
+
+OUI:5847CAC*
+ ID_OUI_FROM_DATABASE=SMS ELECTRIC CO., LTD ZHENGZHOU
+
+OUI:5847CAD*
+ ID_OUI_FROM_DATABASE=PRACTEK Technology Co., Ltd.
+
+OUI:5847CAE*
+ ID_OUI_FROM_DATABASE=AZURE SUMMIT TECHNOLOGY
+
 OUI:584822*
  ID_OUI_FROM_DATABASE=Sony Corporation
 
@@ -63644,9 +65339,15 @@
 OUI:58570D*
  ID_OUI_FROM_DATABASE=Danfoss Solar Inverters
 
+OUI:5858CD*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:5859C2*
  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
 
+OUI:585B69*
+ ID_OUI_FROM_DATABASE=TVT CO., LTD
+
 OUI:585FF6*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -63665,6 +65366,9 @@
 OUI:58639A*
  ID_OUI_FROM_DATABASE=TPL SYSTEMES
 
+OUI:5864C4*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:5865E6*
  ID_OUI_FROM_DATABASE=infomark
 
@@ -63695,15 +65399,27 @@
 OUI:586C25*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:586D67*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:586D8F*
  ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
 
 OUI:586ED6*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:58707F*
+ ID_OUI_FROM_DATABASE=Ericsson AB
+
 OUI:5870C6*
  ID_OUI_FROM_DATABASE=Shanghai Xiaoyi Technology Co., Ltd.
 
+OUI:5873D1*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:5873D8*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:587521*
  ID_OUI_FROM_DATABASE=CJSC RTSoft
 
@@ -63806,6 +65522,9 @@
 OUI:58920D*
  ID_OUI_FROM_DATABASE=Kinetic Avionics Limited
 
+OUI:589351*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:589396*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -63827,6 +65546,9 @@
 OUI:5894CF*
  ID_OUI_FROM_DATABASE=Vertex Standard LMR, Inc.
 
+OUI:58957E*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:5895D80*
  ID_OUI_FROM_DATABASE=Shenzhen DOOGEE Hengtong Technology CO.,LTD
 
@@ -63890,6 +65612,9 @@
 OUI:58986F*
  ID_OUI_FROM_DATABASE=Revolution Display
 
+OUI:589A3E*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:589B0B*
  ID_OUI_FROM_DATABASE=Shineway Technologies, Inc.
 
@@ -63977,6 +65702,9 @@
 OUI:58B961*
  ID_OUI_FROM_DATABASE=SOLEM Electronique
 
+OUI:58B965*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:58B9E1*
  ID_OUI_FROM_DATABASE=Crystalfontz America, Inc.
 
@@ -64035,7 +65763,7 @@
  ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd.
 
 OUI:58C935*
- ID_OUI_FROM_DATABASE=Chiun Mai Communication Systems, Inc
+ ID_OUI_FROM_DATABASE=Chiun Mai Communication System, Inc
 
 OUI:58CB52*
  ID_OUI_FROM_DATABASE=Google, Inc.
@@ -64062,7 +65790,7 @@
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:58D391*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
 OUI:58D50A*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
@@ -64109,9 +65837,18 @@
 OUI:58E326*
  ID_OUI_FROM_DATABASE=Compass Technologies Inc.
 
+OUI:58E403*
+ ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
+
+OUI:58E434*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:58E476*
  ID_OUI_FROM_DATABASE=CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD
 
+OUI:58E488*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:58E636*
  ID_OUI_FROM_DATABASE=EVRsafe Technologies
 
@@ -64197,7 +65934,7 @@
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
 OUI:58F387*
- ID_OUI_FROM_DATABASE=HCCP
+ ID_OUI_FROM_DATABASE=Airios
 
 OUI:58F39C*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -64211,6 +65948,12 @@
 OUI:58F6BF*
  ID_OUI_FROM_DATABASE=Kyoto University
 
+OUI:58F85C*
+ ID_OUI_FROM_DATABASE=LLC Proizvodstvennaya Kompania TransService
+
+OUI:58F8D7*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:58F987*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -64310,6 +66053,9 @@
 OUI:5C045A*
  ID_OUI_FROM_DATABASE=Company NA Stage & Light
 
+OUI:5C0758*
+ ID_OUI_FROM_DATABASE=Ufispace Co., LTD.
+
 OUI:5C076F*
  ID_OUI_FROM_DATABASE=Thought Creator
 
@@ -64355,6 +66101,9 @@
 OUI:5C15E1*
  ID_OUI_FROM_DATABASE=AIDC TECHNOLOGY (S) PTE LTD
 
+OUI:5C1648*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:5C16C7*
  ID_OUI_FROM_DATABASE=Arista Networks
 
@@ -64388,9 +66137,15 @@
 OUI:5C20D0*
  ID_OUI_FROM_DATABASE=Asoni Communication Co., Ltd.
 
+OUI:5C2167*
+ ID_OUI_FROM_DATABASE=Rockwell Automation
+
 OUI:5C22C4*
  ID_OUI_FROM_DATABASE=DAE EUN ELETRONICS CO., LTD
 
+OUI:5C22DA*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:5C2316*
  ID_OUI_FROM_DATABASE=Squirrels Research Labs LLC
 
@@ -64412,9 +66167,15 @@
 OUI:5C2623*
  ID_OUI_FROM_DATABASE=WaveLynx Technologies Corporation
 
+OUI:5C2763*
+ ID_OUI_FROM_DATABASE=Itibia Technologies
+
 OUI:5C27D4*
  ID_OUI_FROM_DATABASE=Shenzhen Qihu Intelligent Technology Company Limited
 
+OUI:5C2886*
+ ID_OUI_FROM_DATABASE=Inventec(Chongqing) Corporation
+
 OUI:5C2AEF*
  ID_OUI_FROM_DATABASE=r2p Asia-Pacific Pty Ltd
 
@@ -64427,6 +66188,9 @@
 OUI:5C2ED2*
  ID_OUI_FROM_DATABASE=ABC(XiSheng) Electronics Co.,Ltd
 
+OUI:5C2FAF*
+ ID_OUI_FROM_DATABASE=HomeWizard B.V.
+
 OUI:5C313E*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -64448,6 +66212,9 @@
 OUI:5C3400*
  ID_OUI_FROM_DATABASE=Hisense Electric Co.,Ltd
 
+OUI:5C345B*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:5C353B*
  ID_OUI_FROM_DATABASE=Compal Broadband Networks, Inc.
 
@@ -64472,6 +66239,12 @@
 OUI:5C3C27*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:5C3E06*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:5C3E1B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:5C4058*
  ID_OUI_FROM_DATABASE=Jefferson Audio Video Systems, Inc.
 
@@ -64493,6 +66266,9 @@
 OUI:5C46B0*
  ID_OUI_FROM_DATABASE=SIMCom Wireless Solutions Limited
 
+OUI:5C475E*
+ ID_OUI_FROM_DATABASE=Ring LLC
+
 OUI:5C4979*
  ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
 
@@ -64511,6 +66287,9 @@
 OUI:5C4CA9*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:5C4DBF*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:5C5015*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -64532,6 +66311,9 @@
 OUI:5C5230*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:5C5284*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:5C53C3*
  ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
 
@@ -64589,6 +66371,9 @@
 OUI:5C625A*
  ID_OUI_FROM_DATABASE=CANON INC.
 
+OUI:5C628B*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:5C63BF*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -64601,6 +66386,12 @@
 OUI:5C648E*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
+OUI:5C64F1*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:5C64F3*
+ ID_OUI_FROM_DATABASE=sywinkey HongKong Co,. Limited?
+
 OUI:5C666C*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -64619,6 +66410,51 @@
 OUI:5C6A80*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
+OUI:5C6AEC0*
+ ID_OUI_FROM_DATABASE=Acuity Brands Lighting
+
+OUI:5C6AEC1*
+ ID_OUI_FROM_DATABASE=Shanghai Smilembb Technology Co.,LTD
+
+OUI:5C6AEC2*
+ ID_OUI_FROM_DATABASE=Shenzhen Mingyue Technology lnnovation Co.,Ltd
+
+OUI:5C6AEC3*
+ ID_OUI_FROM_DATABASE=Shanghai Yunsilicon Technology Co., Ltd.
+
+OUI:5C6AEC4*
+ ID_OUI_FROM_DATABASE=GeneTouch Corp.
+
+OUI:5C6AEC5*
+ ID_OUI_FROM_DATABASE=Exaterra Ltd.
+
+OUI:5C6AEC6*
+ ID_OUI_FROM_DATABASE=FEMTOCELL
+
+OUI:5C6AEC7*
+ ID_OUI_FROM_DATABASE=Nippon Pulse Motor Co., Ltd.
+
+OUI:5C6AEC8*
+ ID_OUI_FROM_DATABASE=Optiver Services B.V.
+
+OUI:5C6AEC9*
+ ID_OUI_FROM_DATABASE=Shanghai Alway Information Technology Co., Ltd
+
+OUI:5C6AECA*
+ ID_OUI_FROM_DATABASE=Shenzhen Olax Technology CO.,Ltd
+
+OUI:5C6AECB*
+ ID_OUI_FROM_DATABASE=Shenzhen Anked vision Electronics Co.Ltd
+
+OUI:5C6AECC*
+ ID_OUI_FROM_DATABASE=Suzhou Huaqi Intelligent Technology Co., Ltd.
+
+OUI:5C6AECD*
+ ID_OUI_FROM_DATABASE=DarkVision Technologies Inc.
+
+OUI:5C6AECE*
+ ID_OUI_FROM_DATABASE=Saab Seaeye Ltd
+
 OUI:5C6B32*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -64646,6 +66482,9 @@
 OUI:5C710D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:5C7545*
+ ID_OUI_FROM_DATABASE=Wayties, Inc.
+
 OUI:5C75AF*
  ID_OUI_FROM_DATABASE=Fitbit, Inc.
 
@@ -64655,6 +66494,9 @@
 OUI:5C7695*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:5C76D5*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:5C7757*
  ID_OUI_FROM_DATABASE=Haivision Network Video
 
@@ -64772,6 +66614,9 @@
 OUI:5C8A38*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:5C8B6B*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:5C8C30*
  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
 
@@ -64805,6 +66650,9 @@
 OUI:5C93A2*
  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
 
+OUI:5C9462*
+ ID_OUI_FROM_DATABASE=Shenzhen Jiuzhou Electric Co.,LTD
+
 OUI:5C95AE*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -64832,6 +66680,9 @@
 OUI:5C9AD8*
  ID_OUI_FROM_DATABASE=FUJITSU LIMITED
 
+OUI:5CA06C*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:5CA176*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
 
@@ -64877,6 +66728,9 @@
 OUI:5CAAFD*
  ID_OUI_FROM_DATABASE=Sonos, Inc.
 
+OUI:5CAC3D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:5CAC4C*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -64895,6 +66749,9 @@
 OUI:5CB066*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:5CB12E*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:5CB13E*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -64940,6 +66797,9 @@
 OUI:5CBAEF*
  ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
 
+OUI:5CBBEE*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:5CBD9A*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -64973,6 +66833,9 @@
 OUI:5CC6E9*
  ID_OUI_FROM_DATABASE=Edifier International
 
+OUI:5CC7C1*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:5CC7D7*
  ID_OUI_FROM_DATABASE=AZROAD TECHNOLOGY COMPANY LIMITED
 
@@ -65255,6 +67118,9 @@
 OUI:5CFC66*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:5CFC6E*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:5CFE9E*
  ID_OUI_FROM_DATABASE=Wiwynn Corporation Tainan Branch
 
@@ -65267,6 +67133,9 @@
 OUI:600194*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:6001B1*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:600292*
  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
 
@@ -65276,6 +67145,9 @@
 OUI:600308*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:60030C*
+ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+
 OUI:600347*
  ID_OUI_FROM_DATABASE=Billion Electric Co. Ltd.
 
@@ -65336,6 +67208,9 @@
 OUI:6014B3*
  ID_OUI_FROM_DATABASE=CyberTAN Technology Inc.
 
+OUI:601521*
+ ID_OUI_FROM_DATABASE=Redarc Electronics
+
 OUI:6015920*
  ID_OUI_FROM_DATABASE=S Labs sp. z o.o.
 
@@ -65355,7 +67230,7 @@
  ID_OUI_FROM_DATABASE=BEIJING KUANGSHI TECHNOLOGY CO., LTD
 
 OUI:6015927*
- ID_OUI_FROM_DATABASE=Faster CZ spol. s r.o.
+ ID_OUI_FROM_DATABASE=Unipi Technology s.r.o.
 
 OUI:6015928*
  ID_OUI_FROM_DATABASE=Yangzhou Wanfang Electronic Technology,CO .,Ltd.
@@ -65408,6 +67283,9 @@
 OUI:601971*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:601B52*
+ ID_OUI_FROM_DATABASE=Vodafone Italia S.p.A.
+
 OUI:601D0F*
  ID_OUI_FROM_DATABASE=Midnite Solar
 
@@ -65433,7 +67311,7 @@
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
 OUI:602232*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:6023A4*
  ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
@@ -65450,9 +67328,15 @@
 OUI:60271C*
  ID_OUI_FROM_DATABASE=VIDEOR E. Hartig GmbH
 
+OUI:60292B*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
 OUI:6029D5*
  ID_OUI_FROM_DATABASE=DAVOLINK Inc.
 
+OUI:602A1B*
+ ID_OUI_FROM_DATABASE=JANCUS
+
 OUI:602A54*
  ID_OUI_FROM_DATABASE=CardioTek B.V.
 
@@ -65558,6 +67442,9 @@
 OUI:604826*
  ID_OUI_FROM_DATABASE=Newbridge Technologies Int. Ltd.
 
+OUI:60489C*
+ ID_OUI_FROM_DATABASE=YIPPEE ELECTRONICS CO.,LIMITED
+
 OUI:6049C1*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
@@ -65597,15 +67484,24 @@
 OUI:605661*
  ID_OUI_FROM_DATABASE=IXECLOUD Tech
 
+OUI:60567D*
+ ID_OUI_FROM_DATABASE=AM Telecom co., Ltd.
+
 OUI:605699*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Marelli Morocco LLC SARL
 
 OUI:605718*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:605747*
+ ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD
+
 OUI:60577D*
  ID_OUI_FROM_DATABASE=eero inc.
 
+OUI:605801*
+ ID_OUI_FROM_DATABASE=Shandong ZTop Microelectronics Co., Ltd.
+
 OUI:605B30*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -65672,15 +67568,24 @@
 OUI:606D3C*
  ID_OUI_FROM_DATABASE=Luxshare Precision Industry Company Limited
 
+OUI:606D9D*
+ ID_OUI_FROM_DATABASE=Otto Bock Healthcare Products GmbH
+
 OUI:606DC7*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:606E41*
+ ID_OUI_FROM_DATABASE=Barrot Technology Co.,LTD
+
 OUI:606ED0*
  ID_OUI_FROM_DATABASE=SEAL AG
 
 OUI:606EE8*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:60706C*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:607072*
  ID_OUI_FROM_DATABASE=SHENZHEN HONGDE SMART LINK TECHNOLOGY CO., LTD
 
@@ -65732,6 +67637,9 @@
 OUI:6081F9*
  ID_OUI_FROM_DATABASE=Helium Systems, Inc
 
+OUI:608246*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:608334*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -65858,6 +67766,9 @@
 OUI:609620*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:6096A4*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:6097DD*
  ID_OUI_FROM_DATABASE=MicroSys Electronics GmbH
 
@@ -65900,6 +67811,9 @@
 OUI:60A11E*
  ID_OUI_FROM_DATABASE=Wuhan Maxsine Electric Co.,Ltd.
 
+OUI:60A2C6*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:60A37D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -65969,6 +67883,9 @@
 OUI:60B617*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:60B647*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:60B6E1*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -66026,9 +67943,15 @@
 OUI:60C658*
  ID_OUI_FROM_DATABASE=PHYTRONIX Co.,Ltd.
 
+OUI:60C727*
+ ID_OUI_FROM_DATABASE=Digiboard Eletronica da Amazonia Ltda
+
 OUI:60C798*
  ID_OUI_FROM_DATABASE=Verifone
 
+OUI:60C7BE*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:60C980*
  ID_OUI_FROM_DATABASE=Trymus
 
@@ -66056,6 +67979,9 @@
 OUI:60D02C*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
+OUI:60D039*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:60D0A9*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -66158,6 +68084,9 @@
 OUI:60DB98*
  ID_OUI_FROM_DATABASE=Calix Inc.
 
+OUI:60DC81*
+ ID_OUI_FROM_DATABASE=AltoBeam Inc.
+
 OUI:60DD70*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -66173,6 +68102,9 @@
 OUI:60DEF3*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:60DEF4*
+ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
+
 OUI:60E00E*
  ID_OUI_FROM_DATABASE=SHINSEI ELECTRONICS CO LTD
 
@@ -66215,9 +68147,15 @@
 OUI:60EE5C*
  ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
 
+OUI:60EFAB*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:60EFC6*
  ID_OUI_FROM_DATABASE=Shenzhen Chima Technologies Co Limited
 
+OUI:60F04D*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
 OUI:60F13D*
  ID_OUI_FROM_DATABASE=JABLOCOM s.r.o.
 
@@ -66266,6 +68204,9 @@
 OUI:60FA9D*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:60FAB1*
+ ID_OUI_FROM_DATABASE=Kempower Oyj
+
 OUI:60FACD*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -66321,7 +68262,7 @@
  ID_OUI_FROM_DATABASE=NEW LIGHT LED
 
 OUI:6405E4*
- ID_OUI_FROM_DATABASE=ALPSALPINE CO .,LTD
+ ID_OUI_FROM_DATABASE=ALPSALPINE CO,.LTD
 
 OUI:6405E9*
  ID_OUI_FROM_DATABASE=Shenzhen WayOS Technology Crop., Ltd.
@@ -66386,6 +68327,9 @@
 OUI:641331*
  ID_OUI_FROM_DATABASE=Bosch Car Multimedia (Wuhu) Co. Ltd.
 
+OUI:64135A*
+ ID_OUI_FROM_DATABASE=Itectra A/S
+
 OUI:64136C*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -66413,6 +68357,9 @@
 OUI:641ABA*
  ID_OUI_FROM_DATABASE=Dryad Networks GmbH
 
+OUI:641C10*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:641C67*
  ID_OUI_FROM_DATABASE=DIGIBRAS INDUSTRIA DO BRASILS/A
 
@@ -66464,6 +68411,9 @@
 OUI:642753*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:642943*
+ ID_OUI_FROM_DATABASE=D-Link Corporation
+
 OUI:6429ED*
  ID_OUI_FROM_DATABASE=AO PKK Milandr
 
@@ -66590,6 +68540,9 @@
 OUI:64351C*
  ID_OUI_FROM_DATABASE=e-CON SYSTEMS INDIA PVT LTD
 
+OUI:6437A4*
+ ID_OUI_FROM_DATABASE=TOKYOSHUHA CO.,LTD.
+
 OUI:643AB1*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
 
@@ -66612,7 +68565,7 @@
  ID_OUI_FROM_DATABASE=GuangDong Quick Network Computer CO.,LTD
 
 OUI:6444D5*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=TD Tech
 
 OUI:6447E0*
  ID_OUI_FROM_DATABASE=Feitian Technologies Co., Ltd
@@ -66650,6 +68603,9 @@
 OUI:64517E*
  ID_OUI_FROM_DATABASE=LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.
 
+OUI:645234*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:645299*
  ID_OUI_FROM_DATABASE=The Chamberlain Group, Inc
 
@@ -66797,6 +68753,9 @@
 OUI:64680C*
  ID_OUI_FROM_DATABASE=Comtrend Corporation
 
+OUI:646876*
+ ID_OUI_FROM_DATABASE=Edifier International
+
 OUI:64694E*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -66824,6 +68783,9 @@
 OUI:646D6C*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:646E60*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:646E69*
  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
 
@@ -66887,6 +68849,9 @@
 OUI:647C34*
  ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
 
+OUI:647CE8*
+ ID_OUI_FROM_DATABASE=Palo Alto Networks
+
 OUI:647D81*
  ID_OUI_FROM_DATABASE=YOKOTA INDUSTRIAL CO,.LTD
 
@@ -66917,9 +68882,15 @@
 OUI:6489F1*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:648CBB*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:648D9E*
  ID_OUI_FROM_DATABASE=IVT Electronic Co.,Ltd
 
+OUI:648F3E*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:6490C1*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
@@ -67037,6 +69008,9 @@
 OUI:64B21D*
  ID_OUI_FROM_DATABASE=Chengdu Phycom Tech Co., Ltd.
 
+OUI:64B2B4*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:64B310*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -67052,12 +69026,18 @@
 OUI:64B5C6*
  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
 
+OUI:64B5F2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:64B623*
  ID_OUI_FROM_DATABASE=Schrack Seconet Care Communication GmbH
 
 OUI:64B64A*
  ID_OUI_FROM_DATABASE=ViVOtech, Inc.
 
+OUI:64B708*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:64B853*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -67115,6 +69095,9 @@
 OUI:64C6AF*
  ID_OUI_FROM_DATABASE=AXERRA Networks Ltd
 
+OUI:64C6D2*
+ ID_OUI_FROM_DATABASE=Seiko Epson Corporation
+
 OUI:64C753*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -67169,6 +69152,9 @@
 OUI:64D2C4*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:64D315*
+ ID_OUI_FROM_DATABASE=HMD Global Oy
+
 OUI:64D4BD*
  ID_OUI_FROM_DATABASE=ALPSALPINE CO,.LTD
 
@@ -67199,6 +69185,9 @@
 OUI:64DB18*
  ID_OUI_FROM_DATABASE=OpenPattern
 
+OUI:64DB38*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:64DB43*
  ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
 
@@ -67211,6 +69200,9 @@
 OUI:64DBA0*
  ID_OUI_FROM_DATABASE=Select Comfort
 
+OUI:64DBF7*
+ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+
 OUI:64DC01*
  ID_OUI_FROM_DATABASE=Static Systems Group PLC
 
@@ -67233,7 +69225,7 @@
  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
 
 OUI:64E0AB*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:64E161*
  ID_OUI_FROM_DATABASE=DEP Corp.
@@ -67241,6 +69233,12 @@
 OUI:64E172*
  ID_OUI_FROM_DATABASE=Shenzhen Qihoo Intelligent Technology Co.,Ltd
 
+OUI:64E204*
+ ID_OUI_FROM_DATABASE=NTN Technical Service Corporation
+
+OUI:64E220*
+ ID_OUI_FROM_DATABASE=Qisda Corporation
+
 OUI:64E599*
  ID_OUI_FROM_DATABASE=EFM Networks
 
@@ -67253,6 +69251,9 @@
 OUI:64E7D8*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:64E833*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:64E84F*
  ID_OUI_FROM_DATABASE=Serialway Communication Technology Co. Ltd
 
@@ -67274,6 +69275,9 @@
 OUI:64EB8C*
  ID_OUI_FROM_DATABASE=Seiko Epson Corporation
 
+OUI:64EC65*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:64ED57*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -67424,6 +69428,9 @@
 OUI:681324*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:6813E2*
+ ID_OUI_FROM_DATABASE=Eltex Enterprise LTD
+
 OUI:681401*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -67448,6 +69455,9 @@
 OUI:6819AC*
  ID_OUI_FROM_DATABASE=Guangzhou Xianyou Intelligent Technogoly CO., LTD
 
+OUI:681AA4*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
+
 OUI:681AB2*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -67481,6 +69491,9 @@
 OUI:68234B*
  ID_OUI_FROM_DATABASE=Nihon Dengyo Kousaku
 
+OUI:682624*
+ ID_OUI_FROM_DATABASE=Ergatta
+
 OUI:68262A*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
 
@@ -67490,6 +69503,9 @@
 OUI:682737*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:68275F*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:6828BA*
  ID_OUI_FROM_DATABASE=Dejai
 
@@ -67568,6 +69584,9 @@
 OUI:68403C*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:68418F*
+ ID_OUI_FROM_DATABASE=Telechips, Inc.
+
 OUI:684352*
  ID_OUI_FROM_DATABASE=Bhuu Limited
 
@@ -67586,6 +69605,9 @@
 OUI:684898*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:684992*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
 OUI:6849B2*
  ID_OUI_FROM_DATABASE=CARLO GAVAZZI LTD
 
@@ -67649,6 +69671,9 @@
 OUI:6858C5*
  ID_OUI_FROM_DATABASE=ZF TRW Automotive
 
+OUI:685932*
+ ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd
+
 OUI:68597F*
  ID_OUI_FROM_DATABASE=Alcatel Lucent
 
@@ -67676,6 +69701,9 @@
 OUI:686359*
  ID_OUI_FROM_DATABASE=Advanced Digital Broadcast SA
 
+OUI:686372*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:68644B*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -67697,6 +69725,9 @@
 OUI:6869F2*
  ID_OUI_FROM_DATABASE=ComAp s.r.o.
 
+OUI:686CE6*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:686DBC*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
@@ -67707,7 +69738,7 @@
  ID_OUI_FROM_DATABASE=Prophet Electronic Technology Corp.,Ltd
 
 OUI:687251*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:6872C3*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -67724,6 +69755,9 @@
 OUI:687724*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:6877DA*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:687848*
  ID_OUI_FROM_DATABASE=WESTUNITIS CO., LTD.
 
@@ -67811,6 +69845,9 @@
 OUI:68831A*
  ID_OUI_FROM_DATABASE=Pandora Mobility Corporation
 
+OUI:6883CB*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:688470*
  ID_OUI_FROM_DATABASE=eSSys Co.,Ltd
 
@@ -67823,12 +69860,18 @@
 OUI:68856A*
  ID_OUI_FROM_DATABASE=OuterLink Corporation
 
+OUI:6885A4*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:6886A7*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:6886E7*
  ID_OUI_FROM_DATABASE=Orbotix, Inc.
 
+OUI:68871C*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
 OUI:68876B*
  ID_OUI_FROM_DATABASE=INQ Mobile Limited
 
@@ -67922,6 +69965,9 @@
 OUI:689423*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:68962E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:68966A*
  ID_OUI_FROM_DATABASE=OHSUNG
 
@@ -67940,6 +69986,9 @@
 OUI:6899CD*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:689A21*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:689A87*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -67985,6 +70034,9 @@
 OUI:68A40E*
  ID_OUI_FROM_DATABASE=BSH Hausgeräte GmbH
 
+OUI:68A46A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:68A47D*
  ID_OUI_FROM_DATABASE=Sun Cupid Technology (HK) LTD
 
@@ -68006,6 +70058,9 @@
 OUI:68A8E1*
  ID_OUI_FROM_DATABASE=Wacom Co.,Ltd.
 
+OUI:68AAC4*
+ ID_OUI_FROM_DATABASE=Altice Labs S.A.
+
 OUI:68AAD2*
  ID_OUI_FROM_DATABASE=DATECS LTD.,
 
@@ -68051,6 +70106,9 @@
 OUI:68B6FC*
  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
 
+OUI:68B8BB*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co.,Ltd
+
 OUI:68B8D9*
  ID_OUI_FROM_DATABASE=Act KDE, Inc.
 
@@ -68114,6 +70172,9 @@
 OUI:68D247*
  ID_OUI_FROM_DATABASE=Portalis LC
 
+OUI:68D40C*
+ ID_OUI_FROM_DATABASE=TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO
+
 OUI:68D482*
  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
 
@@ -68124,7 +70185,7 @@
  ID_OUI_FROM_DATABASE=GooWi Wireless Technology Co., Limited
 
 OUI:68D79A*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:68D925*
  ID_OUI_FROM_DATABASE=ProSys Development Services
@@ -68168,6 +70229,9 @@
 OUI:68E166*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:68E1DC*
+ ID_OUI_FROM_DATABASE=BUFFALO.INC
+
 OUI:68E209*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -68207,6 +70271,9 @@
 OUI:68EDA4*
  ID_OUI_FROM_DATABASE=Shenzhen Seavo Technology Co.,Ltd
 
+OUI:68EE4B*
+ ID_OUI_FROM_DATABASE=Sharetronic Data Technology Co.,Ltd
+
 OUI:68EE88*
  ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
 
@@ -68234,6 +70301,12 @@
 OUI:68F38E*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:68F543*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:68F63B*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:68F728*
  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
 
@@ -68252,6 +70325,9 @@
 OUI:68FCB3*
  ID_OUI_FROM_DATABASE=Next Level Security Systems, Inc.
 
+OUI:68FCB6*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:68FCCA*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -68276,6 +70352,9 @@
 OUI:6C0309*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:6C0370*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:6C0460*
  ID_OUI_FROM_DATABASE=RBH Access Technologies Inc.
 
@@ -68303,6 +70382,9 @@
 OUI:6C0B84*
  ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
 
+OUI:6C0C9A*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:6C0D34*
  ID_OUI_FROM_DATABASE=Nokia
 
@@ -68438,6 +70520,9 @@
 OUI:6C22AB*
  ID_OUI_FROM_DATABASE=Ainsworth Game Technology
 
+OUI:6C2316*
+ ID_OUI_FROM_DATABASE=TATUNG Technology Inc.,
+
 OUI:6C23B9*
  ID_OUI_FROM_DATABASE=Sony Corporation
 
@@ -68468,6 +70553,9 @@
 OUI:6C2995*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:6C29D2*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:6C2ACB*
  ID_OUI_FROM_DATABASE=Paxton Access Ltd
 
@@ -68543,6 +70631,9 @@
 OUI:6C3C7C*
  ID_OUI_FROM_DATABASE=CANON INC.
 
+OUI:6C3C8C*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:6C3E6D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -68609,6 +70700,9 @@
 OUI:6C4E86*
  ID_OUI_FROM_DATABASE=Third Millennium Systems Ltd.
 
+OUI:6C4EF6*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:6C504D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -68618,6 +70712,9 @@
 OUI:6C54CD*
  ID_OUI_FROM_DATABASE=LAMPEX ELECTRONICS LIMITED
 
+OUI:6C5563*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:6C558D*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -68696,6 +70793,9 @@
 OUI:6C5C3DE*
  ID_OUI_FROM_DATABASE=Clinton Electronics Corporation
 
+OUI:6C5CB1*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:6C5CDE*
  ID_OUI_FROM_DATABASE=SunReports, Inc.
 
@@ -68735,6 +70835,9 @@
 OUI:6C641A*
  ID_OUI_FROM_DATABASE=Penguin Computing
 
+OUI:6C6567*
+ ID_OUI_FROM_DATABASE=BELIMO Automation AG
+
 OUI:6C67EF*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -68762,6 +70865,9 @@
 OUI:6C709F*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:6C70CB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:6C710D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -68780,6 +70886,9 @@
 OUI:6C724A*
  ID_OUI_FROM_DATABASE=Onkyo Technology K.K.
 
+OUI:6C72E2*
+ ID_OUI_FROM_DATABASE=amitek
+
 OUI:6C72E7*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -68795,6 +70904,9 @@
 OUI:6C79B8*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:6C7E67*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:6C81FE*
  ID_OUI_FROM_DATABASE=Mitsuba Corporation
 
@@ -68831,6 +70943,9 @@
 OUI:6C8DC1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:6C8F4E*
+ ID_OUI_FROM_DATABASE=Chongqing Yipingfang Technology Co., Ltd.
+
 OUI:6C8FB5*
  ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
 
@@ -68838,7 +70953,7 @@
  ID_OUI_FROM_DATABASE=SanLogic Inc
 
 OUI:6C9106*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Katena Computing Technologies
 
 OUI:6C92BF*
  ID_OUI_FROM_DATABASE=Inspur Electronic Information Industry Co.,Ltd.
@@ -68909,6 +71024,9 @@
 OUI:6C976D*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
+OUI:6C97AA*
+ ID_OUI_FROM_DATABASE=AI TECHNOLOGY CO.,LTD.
+
 OUI:6C98EB*
  ID_OUI_FROM_DATABASE=Riverbed Technology, Inc.
 
@@ -68999,6 +71117,9 @@
 OUI:6CAC60*
  ID_OUI_FROM_DATABASE=Venetex Corp
 
+OUI:6CACC2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:6CAD3F*
  ID_OUI_FROM_DATABASE=Hubbell Building Automation, Inc.
 
@@ -69029,6 +71150,9 @@
 OUI:6CB0FD*
  ID_OUI_FROM_DATABASE=Shenzhen Xinghai Iot Technology Co.,Ltd
 
+OUI:6CB133*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:6CB158*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -69062,6 +71186,9 @@
 OUI:6CB749*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:6CB7E2*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:6CB7F4*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -69090,7 +71217,7 @@
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
 OUI:6CC242*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:6CC26B*
  ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -69128,6 +71255,9 @@
 OUI:6CD146*
  ID_OUI_FROM_DATABASE=FRAMOS GmbH
 
+OUI:6CD199*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:6CD1B0*
  ID_OUI_FROM_DATABASE=WING SING ELECTRONICS HONG KONG LIMITED
 
@@ -69146,6 +71276,9 @@
 OUI:6CD68A*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
+OUI:6CD6E3*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:6CD704*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -69338,6 +71471,9 @@
 OUI:700258*
  ID_OUI_FROM_DATABASE=01DB-METRAVIB
 
+OUI:70033F*
+ ID_OUI_FROM_DATABASE=Pimax Technology(ShangHai)Co.,Ltd
+
 OUI:70037E*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
@@ -69353,6 +71489,45 @@
 OUI:700514*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
+OUI:7006920*
+ ID_OUI_FROM_DATABASE=Techology, LLC
+
+OUI:7006921*
+ ID_OUI_FROM_DATABASE=Beijing Fortech Microsystems., Co., Ltd.
+
+OUI:7006922*
+ ID_OUI_FROM_DATABASE=Scud (Fujian) Electronics Co.,Ltd
+
+OUI:7006923*
+ ID_OUI_FROM_DATABASE=BOSSCCTV CO., LTD
+
+OUI:7006924*
+ ID_OUI_FROM_DATABASE=Fusiostor Technologies Private Limited
+
+OUI:7006925*
+ ID_OUI_FROM_DATABASE=CANAAN CREATIVE CO.,LTD.
+
+OUI:7006926*
+ ID_OUI_FROM_DATABASE=Hangzhou Clounix Technology Limited
+
+OUI:7006928*
+ ID_OUI_FROM_DATABASE=JMA Wireless
+
+OUI:7006929*
+ ID_OUI_FROM_DATABASE=Shenzhen Lingwei Technology Co., Ltd
+
+OUI:700692A*
+ ID_OUI_FROM_DATABASE=Munters
+
+OUI:700692B*
+ ID_OUI_FROM_DATABASE=SWIT Electronics Co.,Ltd
+
+OUI:700692C*
+ ID_OUI_FROM_DATABASE=ScoreBird, LLC
+
+OUI:700692D*
+ ID_OUI_FROM_DATABASE=Skyware Protech Limited
+
 OUI:7006AC*
  ID_OUI_FROM_DATABASE=Eastcompeace Technology Co., Ltd
 
@@ -69386,6 +71561,9 @@
 OUI:70106F*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
+OUI:70110E*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:701124*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -69404,6 +71582,9 @@
 OUI:70169F*
  ID_OUI_FROM_DATABASE=EtherCAT Technology Group
 
+OUI:7017D7*
+ ID_OUI_FROM_DATABASE=Shanghai Enflame Technology Co., Ltd.
+
 OUI:70188B*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -69455,6 +71636,9 @@
 OUI:702084*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
 
+OUI:7022FE*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:702393*
  ID_OUI_FROM_DATABASE=fos4X GmbH
 
@@ -69467,6 +71651,9 @@
 OUI:702605*
  ID_OUI_FROM_DATABASE=SONY Visual Products Inc.
 
+OUI:702804*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:70288B*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -69590,12 +71777,21 @@
 OUI:7041B7*
  ID_OUI_FROM_DATABASE=Edwards Lifesciences LLC
 
+OUI:7042D3*
+ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
+
 OUI:70441C*
  ID_OUI_FROM_DATABASE=SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
 
 OUI:704642*
  ID_OUI_FROM_DATABASE=CHYNG HONG ELECTRONIC CO., LTD.
 
+OUI:704698*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:704777*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:7047E9*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
@@ -69626,6 +71822,9 @@
 OUI:704D7B*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:704DE7*
+ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+
 OUI:704E01*
  ID_OUI_FROM_DATABASE=KWANGWON TECH CO., LTD.
 
@@ -69704,8 +71903,11 @@
 OUI:705425*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:705464*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:7054B4*
- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
+ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
 
 OUI:7054D2*
  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
@@ -69725,6 +71927,9 @@
 OUI:705812*
  ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
 
+OUI:705846*
+ ID_OUI_FROM_DATABASE=Trig Avionics Limited
+
 OUI:705896*
  ID_OUI_FROM_DATABASE=InShow Technology
 
@@ -69737,6 +71942,51 @@
 OUI:705A0F*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:705A6F0*
+ ID_OUI_FROM_DATABASE=Thyracont Vacuum Instruments GmbH
+
+OUI:705A6F1*
+ ID_OUI_FROM_DATABASE=BMR s.r.o.
+
+OUI:705A6F2*
+ ID_OUI_FROM_DATABASE=Tyromotion GmbH
+
+OUI:705A6F3*
+ ID_OUI_FROM_DATABASE=Wavelab Telecom Equipment (GZ) Ltd.
+
+OUI:705A6F4*
+ ID_OUI_FROM_DATABASE=Vaiotik Co., Ltd
+
+OUI:705A6F5*
+ ID_OUI_FROM_DATABASE=Acer Connect
+
+OUI:705A6F6*
+ ID_OUI_FROM_DATABASE=Earfun Technology (HK) Limited
+
+OUI:705A6F7*
+ ID_OUI_FROM_DATABASE=WiBASE Industrial Solutions Inc.
+
+OUI:705A6F8*
+ ID_OUI_FROM_DATABASE=LUAN Industry and Commerce Co., Ltd
+
+OUI:705A6F9*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:705A6FA*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:705A6FB*
+ ID_OUI_FROM_DATABASE=Callidus trading, spol. s r.o.
+
+OUI:705A6FC*
+ ID_OUI_FROM_DATABASE=CoolR Group Inc
+
+OUI:705A6FD*
+ ID_OUI_FROM_DATABASE=PICadvanced SA
+
+OUI:705A6FE*
+ ID_OUI_FROM_DATABASE=Hall Technologies
+
 OUI:705A9E*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
@@ -69800,6 +72050,9 @@
 OUI:706655*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
+OUI:7066B9*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:7066E1*
  ID_OUI_FROM_DATABASE=dnt Innovation GmbH
 
@@ -69899,6 +72152,9 @@
 OUI:7072CF*
  ID_OUI_FROM_DATABASE=EdgeCore Networks
 
+OUI:7072FE*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:7073CB*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -69941,6 +72197,9 @@
 OUI:707C69*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
+OUI:707CE3*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:707D95*
  ID_OUI_FROM_DATABASE=Shenzhen City LinwlanTechnology Co. Ltd.
 
@@ -70088,6 +72347,9 @@
 OUI:709BFC*
  ID_OUI_FROM_DATABASE=Bryton Inc.
 
+OUI:709C45*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:709C8F*
  ID_OUI_FROM_DATABASE=Nero AG
 
@@ -70128,7 +72390,7 @@
  ID_OUI_FROM_DATABASE=Intel Corporate
 
 OUI:70A741*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:70A84C*
  ID_OUI_FROM_DATABASE=MONAD., Inc.
@@ -70154,6 +72416,9 @@
 OUI:70AD54*
  ID_OUI_FROM_DATABASE=Malvern Instruments Ltd
 
+OUI:70AED5*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:70AF24*
  ID_OUI_FROM_DATABASE=TP Vision Belgium NV
 
@@ -70178,6 +72443,9 @@
 OUI:70B265*
  ID_OUI_FROM_DATABASE=Hiltron s.r.l.
 
+OUI:70B306*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:70B317*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -71022,10 +73290,10 @@
  ID_OUI_FROM_DATABASE=Macromatic Industrial Controls, Inc.
 
 OUI:70B3D5119*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=YPP Corporation
 
 OUI:70B3D511A*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Mahindra Electric Mobility Limited
 
 OUI:70B3D511B*
  ID_OUI_FROM_DATABASE=HoseoTelnet Inc...
@@ -71592,7 +73860,7 @@
  ID_OUI_FROM_DATABASE=MacGray Services
 
 OUI:70B3D51D7*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=BAE Systems Apllied Intelligence
 
 OUI:70B3D51D8*
  ID_OUI_FROM_DATABASE=Blue Skies Global LLC
@@ -71952,7 +74220,7 @@
  ID_OUI_FROM_DATABASE=Datum Electronics Limited
 
 OUI:70B3D5251*
- ID_OUI_FROM_DATABASE=PixelApps s.r.o.
+ ID_OUI_FROM_DATABASE=Tap Home, s.r.o.
 
 OUI:70B3D5252*
  ID_OUI_FROM_DATABASE=Sierra Nevada Corporation
@@ -72069,7 +74337,7 @@
  ID_OUI_FROM_DATABASE=Voltaware Limited
 
 OUI:70B3D5278*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Medicomp, Inc
 
 OUI:70B3D5279*
  ID_OUI_FROM_DATABASE=Medicomp, Inc
@@ -72516,7 +74784,7 @@
  ID_OUI_FROM_DATABASE=Fiberbase
 
 OUI:70B3D530E*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Ecolonum Inc.
 
 OUI:70B3D530F*
  ID_OUI_FROM_DATABASE=Cardinal Scales Manufacturing Co
@@ -73314,7 +75582,7 @@
  ID_OUI_FROM_DATABASE=DEV Systemtechnik GmbH& Co KG
 
 OUI:70B3D541A*
- ID_OUI_FROM_DATABASE=HYOSUNG Power & Industrial Systems
+ ID_OUI_FROM_DATABASE=HYOSUNG Heavy Industries Corporation
 
 OUI:70B3D541B*
  ID_OUI_FROM_DATABASE=SYS TEC electronic GmbH
@@ -73974,7 +76242,7 @@
  ID_OUI_FROM_DATABASE=Foxtel srl
 
 OUI:70B3D54F8*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=SICPA SA - GSS
 
 OUI:70B3D54F9*
  ID_OUI_FROM_DATABASE=OptoPrecision GmbH
@@ -74433,7 +76701,7 @@
  ID_OUI_FROM_DATABASE=812th AITS
 
 OUI:70B3D5591*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Medicomp, Inc
 
 OUI:70B3D5592*
  ID_OUI_FROM_DATABASE=CRDE
@@ -74562,7 +76830,7 @@
  ID_OUI_FROM_DATABASE=Olympus NDT Canada
 
 OUI:70B3D55BC*
- ID_OUI_FROM_DATABASE=LAMTEC Meß- und Regeltechnik für Feuerungen GmbH & Co. KG
+ ID_OUI_FROM_DATABASE=LAMTEC Mess- und Regeltechnik für Feuerungen GmbH & Co. KG
 
 OUI:70B3D55BD*
  ID_OUI_FROM_DATABASE=nexgenwave
@@ -74649,7 +76917,7 @@
  ID_OUI_FROM_DATABASE=LYNX Technik AG
 
 OUI:70B3D55D9*
- ID_OUI_FROM_DATABASE=olympus-ossa
+ ID_OUI_FROM_DATABASE=Evident Scientific, Inc.
 
 OUI:70B3D55DA*
  ID_OUI_FROM_DATABASE=Valk Welding B.V.
@@ -75084,7 +77352,7 @@
  ID_OUI_FROM_DATABASE=Panoramic Power
 
 OUI:70B3D566A*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Nomadic
 
 OUI:70B3D566B*
  ID_OUI_FROM_DATABASE=Innitive B.V.
@@ -75498,7 +77766,7 @@
  ID_OUI_FROM_DATABASE=iungo
 
 OUI:70B3D56F4*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=WDI Wise Device Inc.
 
 OUI:70B3D56F5*
  ID_OUI_FROM_DATABASE=Cominfo, Inc.
@@ -76542,7 +78810,7 @@
  ID_OUI_FROM_DATABASE=REO AG
 
 OUI:70B3D5851*
- ID_OUI_FROM_DATABASE=EXASCEND (Wuhan) Co., Ltd
+ ID_OUI_FROM_DATABASE=Exascend, Inc.
 
 OUI:70B3D5852*
  ID_OUI_FROM_DATABASE=NetBoxSC, LLC
@@ -77063,6 +79331,9 @@
 OUI:70B3D58FF*
  ID_OUI_FROM_DATABASE=IMST GmbH
 
+OUI:70B3D5900*
+ ID_OUI_FROM_DATABASE=DCS Corp
+
 OUI:70B3D5901*
  ID_OUI_FROM_DATABASE=ATS-CONVERS,LLC
 
@@ -77976,7 +80247,7 @@
  ID_OUI_FROM_DATABASE=SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
 
 OUI:70B3D5A31*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Wise Ally Holdings Limited
 
 OUI:70B3D5A32*
  ID_OUI_FROM_DATABASE=Toughdog Security Systems
@@ -79704,7 +81975,7 @@
  ID_OUI_FROM_DATABASE=Qtechnology A/S
 
 OUI:70B3D5C75*
- ID_OUI_FROM_DATABASE=BIT Group USA, Inc.
+ ID_OUI_FROM_DATABASE=Planet Innovation Products Inc.
 
 OUI:70B3D5C76*
  ID_OUI_FROM_DATABASE=ELA INNOVATION
@@ -79902,7 +82173,7 @@
  ID_OUI_FROM_DATABASE=Kuebrich Ingeniergesellschaft mbh & Co. KG
 
 OUI:70B3D5CB7*
- ID_OUI_FROM_DATABASE=HKC Limited
+ ID_OUI_FROM_DATABASE=HKC Security Ltd.
 
 OUI:70B3D5CB8*
  ID_OUI_FROM_DATABASE=Verti Tecnologia
@@ -79920,7 +82191,7 @@
  ID_OUI_FROM_DATABASE=Procon Electronics Pty Ltd
 
 OUI:70B3D5CBD*
- ID_OUI_FROM_DATABASE=Preo Industries Far East Limited
+ ID_OUI_FROM_DATABASE=PREO INDUSTRIES FAR EAST LTD
 
 OUI:70B3D5CBE*
  ID_OUI_FROM_DATABASE=Ensura Solutions BV
@@ -79983,7 +82254,7 @@
  ID_OUI_FROM_DATABASE=Cannex Technology Inc.
 
 OUI:70B3D5CD2*
- ID_OUI_FROM_DATABASE=HBH Microwave GmbH
+ ID_OUI_FROM_DATABASE=TRUMPF Huttinger GmbH + Co. KG,
 
 OUI:70B3D5CD3*
  ID_OUI_FROM_DATABASE=Controlrad
@@ -81024,7 +83295,7 @@
  ID_OUI_FROM_DATABASE=Fourth Frontier Technologies Private Limited
 
 OUI:70B3D5E2D*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=BAE Systems Apllied Intelligence
 
 OUI:70B3D5E2E*
  ID_OUI_FROM_DATABASE=Merz s.r.o.
@@ -81750,7 +84021,7 @@
  ID_OUI_FROM_DATABASE=ATX NETWORKS LTD
 
 OUI:70B3D5F1F*
- ID_OUI_FROM_DATABASE=HKC Limited
+ ID_OUI_FROM_DATABASE=HKC Security Ltd.
 
 OUI:70B3D5F21*
  ID_OUI_FROM_DATABASE=dds
@@ -82427,12 +84698,18 @@
 OUI:70B64F*
  ID_OUI_FROM_DATABASE=Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
 
+OUI:70B651*
+ ID_OUI_FROM_DATABASE=Eight Sleep
+
 OUI:70B7AA*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
 OUI:70B7E2*
  ID_OUI_FROM_DATABASE=Jiangsu Miter Technology Co.,Ltd.
 
+OUI:70B7E4*
+ ID_OUI_FROM_DATABASE=Broadcom Limited
+
 OUI:70B8F6*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -82475,6 +84752,9 @@
 OUI:70C833*
  ID_OUI_FROM_DATABASE=Wirepas Oy
 
+OUI:70C932*
+ ID_OUI_FROM_DATABASE=Dreame Technology (Suzhou) Limited
+
 OUI:70C94E*
  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
 
@@ -82652,6 +84932,9 @@
 OUI:70F82B*
  ID_OUI_FROM_DATABASE=DWnet Technologies(Suzhou) Corporation
 
+OUI:70F8AE*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:70F8E70*
  ID_OUI_FROM_DATABASE=SHENZHEN Xin JiuNing Electronics Co Ltd
 
@@ -82736,9 +85019,15 @@
 OUI:7404F1*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:74057C*
+ ID_OUI_FROM_DATABASE=Qorvo International Pte. Ltd.
+
 OUI:7405A5*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:7408DE*
+ ID_OUI_FROM_DATABASE=Fujian Landi Commercial Technology Co., Ltd.
+
 OUI:7409AC*
  ID_OUI_FROM_DATABASE=Quext, LLC
 
@@ -82775,9 +85064,15 @@
 OUI:7415E2*
  ID_OUI_FROM_DATABASE=Tri-Sen Systems Corporation
 
+OUI:7415F5*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:741865*
  ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd
 
+OUI:74190A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:7419F80*
  ID_OUI_FROM_DATABASE=Marmitek
 
@@ -82892,6 +85187,9 @@
 OUI:742344*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:74249F*
+ ID_OUI_FROM_DATABASE=TIBRO Corp.
+
 OUI:74258A*
  ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
 
@@ -82934,9 +85232,15 @@
 OUI:742F68*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
+OUI:7430AF*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:743170*
  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
 
+OUI:743174*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:743256*
  ID_OUI_FROM_DATABASE=NT-ware Systemprg GmbH
 
@@ -82991,9 +85295,15 @@
 OUI:743E2B*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
+OUI:743E39*
+ ID_OUI_FROM_DATABASE=YUSUR Technology Co., Ltd.
+
 OUI:743ECB*
  ID_OUI_FROM_DATABASE=Gentrice tech
 
+OUI:743FC2*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:7440BB*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -83039,6 +85349,9 @@
 OUI:744D28*
  ID_OUI_FROM_DATABASE=Routerboard.com
 
+OUI:744D6D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:744D79*
  ID_OUI_FROM_DATABASE=Arrive Systems Inc.
 
@@ -83069,6 +85382,9 @@
 OUI:745798*
  ID_OUI_FROM_DATABASE=TRUMPF Laser GmbH + Co. KG
 
+OUI:745889*
+ ID_OUI_FROM_DATABASE=Multilaser Industrial S.A.
+
 OUI:7458F3*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -83237,6 +85553,9 @@
 OUI:747336*
  ID_OUI_FROM_DATABASE=MICRODIGTAL Inc
 
+OUI:7473B4*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:747446*
  ID_OUI_FROM_DATABASE=Google, Inc.
 
@@ -83273,6 +85592,9 @@
 OUI:747E2D*
  ID_OUI_FROM_DATABASE=Beijing Thomson CITIC Digital Technology Co. LTD.
 
+OUI:74803F*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
 OUI:748114*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -83280,7 +85602,7 @@
  ID_OUI_FROM_DATABASE=PT. Hartono Istana Teknologi
 
 OUI:7483C2*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:7483EF*
  ID_OUI_FROM_DATABASE=Arista Networks
@@ -83300,12 +85622,18 @@
 OUI:74860B*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:748669*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:74867A*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
 OUI:7486E2*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
+OUI:74872E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:7487A9*
  ID_OUI_FROM_DATABASE=OCT Technology Co., Ltd.
 
@@ -83354,6 +85682,9 @@
 OUI:748F4D*
  ID_OUI_FROM_DATABASE=duagon Germany GmbH
 
+OUI:748FC2*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:74901F*
  ID_OUI_FROM_DATABASE=Ragile Networks Inc.
 
@@ -83369,12 +85700,18 @@
 OUI:7493A4*
  ID_OUI_FROM_DATABASE=Zebra Technologies Corp.
 
+OUI:7493DA*
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+
 OUI:74943D*
  ID_OUI_FROM_DATABASE=AgJunction
 
 OUI:749552*
  ID_OUI_FROM_DATABASE=Xuzhou WIKA Electronics Control Technology Co., Ltd.
 
+OUI:7495A7*
+ ID_OUI_FROM_DATABASE=Keyence Corporation
+
 OUI:7495EC*
  ID_OUI_FROM_DATABASE=ALPSALPINE CO,.LTD
 
@@ -83411,6 +85748,9 @@
 OUI:749DDC*
  ID_OUI_FROM_DATABASE=2Wire Inc
 
+OUI:749E75*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:749EA5*
  ID_OUI_FROM_DATABASE=OHSUNG
 
@@ -83441,6 +85781,12 @@
 OUI:74A528*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:74A58C*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
+OUI:74A6CD*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:74A722*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
@@ -83457,7 +85803,7 @@
  ID_OUI_FROM_DATABASE=Qiku Internet Network Scientific (Shenzhen) Co., Ltd.
 
 OUI:74ACB9*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:74AD98*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -83492,6 +85838,9 @@
 OUI:74B7E6*
  ID_OUI_FROM_DATABASE=Zegna-Daidong Limited
 
+OUI:74B839*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:74B91E*
  ID_OUI_FROM_DATABASE=Nanjing Bestway Automation System Co., Ltd
 
@@ -83573,12 +85922,18 @@
 OUI:74D285*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:74D423*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:74D435*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
 OUI:74D4DD*
  ID_OUI_FROM_DATABASE=Quanta Computer Inc.
 
+OUI:74D558*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:74D637*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -83591,9 +85946,15 @@
 OUI:74D6CB*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
+OUI:74D6E5*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:74D6EA*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:74D713*
+ ID_OUI_FROM_DATABASE=Huaqin Technology Co.,Ltd
+
 OUI:74D7CA*
  ID_OUI_FROM_DATABASE=Panasonic Corporation Automotive
 
@@ -83603,6 +85964,9 @@
 OUI:74D850*
  ID_OUI_FROM_DATABASE=Evrisko Systems
 
+OUI:74D873*
+ ID_OUI_FROM_DATABASE=GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+
 OUI:74D9EB*
  ID_OUI_FROM_DATABASE=Petabit Scale, Inc.
 
@@ -83765,6 +86129,9 @@
 OUI:74EE2A*
  ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.，LTD
 
+OUI:74EE8D*
+ ID_OUI_FROM_DATABASE=Apollo Intelligent Connectivity (Beijing) Technology Co., Ltd.
+
 OUI:74EF4B*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -83912,9 +86279,15 @@
 OUI:7806C9*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:78071C*
+ ID_OUI_FROM_DATABASE=Green Energy Options Ltd
+
 OUI:780738*
  ID_OUI_FROM_DATABASE=Z.U.K. Elzab S.A.
 
+OUI:78084D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:780AC7*
  ID_OUI_FROM_DATABASE=Baofeng TV Co., Ltd.
 
@@ -84053,6 +86426,9 @@
 OUI:7823AE*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:782459*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent Enterprise
+
 OUI:7824AF*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
@@ -84104,6 +86480,9 @@
 OUI:7830E1*
  ID_OUI_FROM_DATABASE=UltraClenz, LLC
 
+OUI:7830F5*
+ ID_OUI_FROM_DATABASE=TBT Inc.
+
 OUI:78312B*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -84149,6 +86528,9 @@
 OUI:783E53*
  ID_OUI_FROM_DATABASE=SKY UK LIMITED
 
+OUI:783EA1*
+ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+
 OUI:783F15*
  ID_OUI_FROM_DATABASE=EasySYNC Ltd.
 
@@ -84171,7 +86553,7 @@
  ID_OUI_FROM_DATABASE=Biamp Systems
 
 OUI:784558*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:784561*
  ID_OUI_FROM_DATABASE=CyberTAN Technology Inc.
@@ -84203,12 +86585,18 @@
 OUI:78491D*
  ID_OUI_FROM_DATABASE=The Will-Burt Company
 
+OUI:784946*
+ ID_OUI_FROM_DATABASE=Cambridge Mobile Telematics, Inc.
+
 OUI:784B08*
  ID_OUI_FROM_DATABASE=f.robotics acquisitions ltd
 
 OUI:784B87*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
+OUI:784F24*
+ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+
 OUI:784F43*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -84234,7 +86622,7 @@
  ID_OUI_FROM_DATABASE=Shenzhen Hojy Software Co., Ltd.
 
 OUI:78530D*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:785364*
  ID_OUI_FROM_DATABASE=SHIFT GmbH
@@ -84278,6 +86666,9 @@
 OUI:785C28*
  ID_OUI_FROM_DATABASE=Prime Motion Inc.
 
+OUI:785C5E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:785C72*
  ID_OUI_FROM_DATABASE=Hioso Technology Co., Ltd.
 
@@ -84333,11 +86724,14 @@
  ID_OUI_FROM_DATABASE=Suzhou Tianping Advanced Digital Technologies Co.Ltd
 
 OUI:785F36*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:785F4C*
  ID_OUI_FROM_DATABASE=Argox Information Co., Ltd.
 
+OUI:78605B*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
 OUI:78617C*
  ID_OUI_FROM_DATABASE=MITSUMI ELECTRIC CO.,LTD.
 
@@ -84371,6 +86765,9 @@
 OUI:7867D7*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:786829*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:7868F7*
  ID_OUI_FROM_DATABASE=YSTen Technology Co.,Ltd
 
@@ -84386,6 +86783,9 @@
 OUI:786C1C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:786C84*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:786D94*
  ID_OUI_FROM_DATABASE=Palo Alto Networks
 
@@ -84449,6 +86849,9 @@
 OUI:787264E*
  ID_OUI_FROM_DATABASE=Heltec Automation
 
+OUI:787689*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:7876D9*
  ID_OUI_FROM_DATABASE=EXARA Group
 
@@ -84510,7 +86913,10 @@
  ID_OUI_FROM_DATABASE=CMC
 
 OUI:788A20*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
+
+OUI:788A86*
+ ID_OUI_FROM_DATABASE=China Dragon Technology Limited
 
 OUI:788B2A*
  ID_OUI_FROM_DATABASE=Zhen Shi Information Technology (Shanghai) Co., Ltd.
@@ -84527,6 +86933,9 @@
 OUI:788C77*
  ID_OUI_FROM_DATABASE=LEXMARK INTERNATIONAL, INC.
 
+OUI:788CB5*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:788DF7*
  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
 
@@ -84563,6 +86972,9 @@
 OUI:789684*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:7896A3*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:7897C3*
  ID_OUI_FROM_DATABASE=DINGXIN INFORMATION TECHNOLOGY CO.,LTD
 
@@ -84740,6 +87152,9 @@
 OUI:78C1A7*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:78C1AE*
+ ID_OUI_FROM_DATABASE=Hangzhou Ezviz Software Co.,Ltd.
+
 OUI:78C213*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -84803,6 +87218,9 @@
 OUI:78C4AB*
  ID_OUI_FROM_DATABASE=Shenzhen Runsil Technology Co.,Ltd
 
+OUI:78C57D*
+ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+
 OUI:78C5E5*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -84974,6 +87392,9 @@
 OUI:78D6B2*
  ID_OUI_FROM_DATABASE=Toshiba
 
+OUI:78D6D6*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:78D6DC*
  ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
 
@@ -85034,6 +87455,9 @@
 OUI:78D800E*
  ID_OUI_FROM_DATABASE=CL International
 
+OUI:78D840*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:78D99F*
  ID_OUI_FROM_DATABASE=NuCom HK Ltd.
 
@@ -85127,6 +87551,9 @@
 OUI:78F09B*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:78F1C6*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:78F235*
  ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
 
@@ -85280,6 +87707,9 @@
 OUI:7C1689*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:7C1779*
+ ID_OUI_FROM_DATABASE=EM Microelectronic
+
 OUI:7C18CD*
  ID_OUI_FROM_DATABASE=E-TRON Co.,Ltd.
 
@@ -85358,12 +87788,21 @@
 OUI:7C2664*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:7C273C*
+ ID_OUI_FROM_DATABASE=Shenzhen Yunlink Technology Co., Ltd
+
 OUI:7C27BC*
  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
 
+OUI:7C296F*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:7C2A31*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:7C2ACA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:7C2ADB*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
@@ -85445,6 +87884,51 @@
 OUI:7C45D0*
  ID_OUI_FROM_DATABASE=Shenzhen Wewins Wireless Co., ltd
 
+OUI:7C45F90*
+ ID_OUI_FROM_DATABASE=SENSeOR
+
+OUI:7C45F91*
+ ID_OUI_FROM_DATABASE=Hunan Shengyun Photoelectric Technology Co., LTD
+
+OUI:7C45F92*
+ ID_OUI_FROM_DATABASE=Dongguan Boyye Industrial Co., Ltd
+
+OUI:7C45F93*
+ ID_OUI_FROM_DATABASE=Hangzhou LUXAR Technologies Co., Ltd
+
+OUI:7C45F94*
+ ID_OUI_FROM_DATABASE=SPECS Surface Nano Analysis GmbH
+
+OUI:7C45F95*
+ ID_OUI_FROM_DATABASE=Interactive Technologies, Inc.
+
+OUI:7C45F96*
+ ID_OUI_FROM_DATABASE=HANK ELECTRONICS CO., LTD
+
+OUI:7C45F97*
+ ID_OUI_FROM_DATABASE=Georg Fischer Piping Systems Ltd.
+
+OUI:7C45F98*
+ ID_OUI_FROM_DATABASE=Feller AG
+
+OUI:7C45F99*
+ ID_OUI_FROM_DATABASE=MIJ CO LTD
+
+OUI:7C45F9A*
+ ID_OUI_FROM_DATABASE=qiio AG
+
+OUI:7C45F9B*
+ ID_OUI_FROM_DATABASE=IngDan China-chip Electronic Technology(Wuxi) Co.,Ltd.
+
+OUI:7C45F9C*
+ ID_OUI_FROM_DATABASE=Xemex NV
+
+OUI:7C45F9D*
+ ID_OUI_FROM_DATABASE=Mobilaris Industrial Solutions
+
+OUI:7C45F9E*
+ ID_OUI_FROM_DATABASE=Scania CV AB
+
 OUI:7C4685*
  ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
 
@@ -85517,6 +88001,9 @@
 OUI:7C4CA5*
  ID_OUI_FROM_DATABASE=SKY UK LIMITED
 
+OUI:7C4D8F*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
 OUI:7C4E09*
  ID_OUI_FROM_DATABASE=Shenzhen Skyworth Wireless Technology Co.,Ltd
 
@@ -85533,7 +88020,7 @@
  ID_OUI_FROM_DATABASE=Intel Corporate
 
 OUI:7C50DA*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=E.J Ward
 
 OUI:7C5189*
  ID_OUI_FROM_DATABASE=SG Wireless Limited
@@ -85556,6 +88043,9 @@
 OUI:7C574E*
  ID_OUI_FROM_DATABASE=COBI GmbH
 
+OUI:7C5758*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
 OUI:7C5A1C*
  ID_OUI_FROM_DATABASE=Sophos Ltd
 
@@ -85583,6 +88073,12 @@
 OUI:7C6456*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:7C646C*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
+OUI:7C669A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:7C669D*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -85742,6 +88238,9 @@
 OUI:7C79E8*
  ID_OUI_FROM_DATABASE=PayRange Inc.
 
+OUI:7C7A3C*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:7C7A53*
  ID_OUI_FROM_DATABASE=Phytrex Technology Corp.
 
@@ -85823,6 +88322,9 @@
 OUI:7C87CE*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:7C8931*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:7C8956*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -85856,6 +88358,9 @@
 OUI:7C942A*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:7C949F*
+ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
+
 OUI:7C94B2*
  ID_OUI_FROM_DATABASE=Philips Healthcare PCCI
 
@@ -85907,6 +88412,9 @@
 OUI:7CA29B*
  ID_OUI_FROM_DATABASE=D.SignT GmbH & Co. KG
 
+OUI:7CA449*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:7CA61D*
  ID_OUI_FROM_DATABASE=MHL, LLC
 
@@ -86090,9 +88598,15 @@
 OUI:7CBF88*
  ID_OUI_FROM_DATABASE=Mobilicom LTD
 
+OUI:7CBFAE*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
 OUI:7CBFB1*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:7CC06F*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:7CC177*
  ID_OUI_FROM_DATABASE=INGRAM MICRO SERVICES
 
@@ -86129,6 +88643,9 @@
 OUI:7CC709*
  ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
 
+OUI:7CC74A*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:7CC77E*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -86255,6 +88772,9 @@
 OUI:7CDB98*
  ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
 
+OUI:7CDCCC*
+ ID_OUI_FROM_DATABASE=BEIJING STARBLAZE TECHNOLOGY CO.,LTD
+
 OUI:7CDD11*
  ID_OUI_FROM_DATABASE=Chongqing MAS SCI&TECH.Co.,Ltd
 
@@ -86285,6 +88805,9 @@
 OUI:7CE1FF*
  ID_OUI_FROM_DATABASE=Computer Performance, Inc. DBA Digital Loggers, Inc.
 
+OUI:7CE269*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:7CE2CA*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
@@ -86297,6 +88820,9 @@
 OUI:7CE56B*
  ID_OUI_FROM_DATABASE=ESEN Optoelectronics Technology Co.,Ltd.
 
+OUI:7CE87F*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:7CE97C*
  ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
 
@@ -86324,6 +88850,9 @@
 OUI:7CED8D*
  ID_OUI_FROM_DATABASE=Microsoft
 
+OUI:7CEDC6*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:7CEF18*
  ID_OUI_FROM_DATABASE=Creative Product Design Pty. Ltd.
 
@@ -86615,11 +89144,14 @@
 OUI:802689*
  ID_OUI_FROM_DATABASE=D-Link International
 
+OUI:80276C*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:802994*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
 OUI:802AA8*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:802AFA*
  ID_OUI_FROM_DATABASE=Germaneers GmbH
@@ -86672,12 +89204,18 @@
 OUI:8038BC*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:8038D4*
+ ID_OUI_FROM_DATABASE=Fibercentury Network Technology Co.,Ltd.
+
 OUI:8038FB*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
 OUI:8038FD*
  ID_OUI_FROM_DATABASE=LeapFrog Enterprises, Inc.
 
+OUI:80398C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:8039E5*
  ID_OUI_FROM_DATABASE=PATLITE CORPORATION
 
@@ -86720,6 +89258,9 @@
 OUI:80427C*
  ID_OUI_FROM_DATABASE=Adolf Tedsen GmbH & Co. KG
 
+OUI:80433F*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:8044FD*
  ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd.
 
@@ -86741,6 +89282,9 @@
 OUI:804A14*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:804AF2*
+ ID_OUI_FROM_DATABASE=Sonos, Inc.
+
 OUI:804B20*
  ID_OUI_FROM_DATABASE=Ventilation Control
 
@@ -86774,6 +89318,12 @@
 OUI:8054D9*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:8054E3*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:80563C*
+ ID_OUI_FROM_DATABASE=ZF
+
 OUI:8056F2*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -86804,6 +89354,9 @@
 OUI:805EC0*
  ID_OUI_FROM_DATABASE=YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
 
+OUI:805F8E*
+ ID_OUI_FROM_DATABASE=Huizhou BYD Electronic Co., Ltd.
+
 OUI:805FC5*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -86819,12 +89372,18 @@
 OUI:80615F*
  ID_OUI_FROM_DATABASE=Beijing Sinead Technology Co., Ltd.
 
+OUI:80616C*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:80618F*
  ID_OUI_FROM_DATABASE=Shenzhen sangfei consumer communications co.,ltd
 
 OUI:806459*
  ID_OUI_FROM_DATABASE=Nimbus Inc.
 
+OUI:80646F*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:80647A*
  ID_OUI_FROM_DATABASE=Ola Sense Inc
 
@@ -86909,6 +89468,9 @@
 OUI:807693*
  ID_OUI_FROM_DATABASE=Newag SA
 
+OUI:8076C2*
+ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+
 OUI:8077A4*
  ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
 
@@ -86981,6 +89543,9 @@
 OUI:807B85F*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:807C62*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:807D14*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -87008,6 +89573,9 @@
 OUI:808287*
  ID_OUI_FROM_DATABASE=ATCOM Technology Co.Ltd.
 
+OUI:8082F5*
+ ID_OUI_FROM_DATABASE=STMicrolectronics International NV
+
 OUI:8084A9*
  ID_OUI_FROM_DATABASE=oshkosh Corporation
 
@@ -87108,7 +89676,7 @@
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
 OUI:80A796*
- ID_OUI_FROM_DATABASE=Neurotek LLC
+ ID_OUI_FROM_DATABASE=Neuralink Corp.
 
 OUI:80A85D*
  ID_OUI_FROM_DATABASE=Osterhout Design Group
@@ -87116,18 +89684,27 @@
 OUI:80AAA4*
  ID_OUI_FROM_DATABASE=USAG
 
+OUI:80AB4D*
+ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
+
 OUI:80AC7C*
  ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
 
 OUI:80ACAC*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:80ACC8*
+ ID_OUI_FROM_DATABASE=Phyplus Microelectronics Limited
+
 OUI:80AD16*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
 OUI:80AD67*
  ID_OUI_FROM_DATABASE=Kasda Networks Inc
 
+OUI:80AFCA*
+ ID_OUI_FROM_DATABASE=Shenzhen Cudy Technology Co., Ltd.
+
 OUI:80B03D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -87167,6 +89744,9 @@
 OUI:80B745*
  ID_OUI_FROM_DATABASE=The Silk Technologies ILC LTD
 
+OUI:80B946*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:80B95C*
  ID_OUI_FROM_DATABASE=ELFTECH Co., Ltd.
 
@@ -87182,14 +89762,23 @@
 OUI:80BBEB*
  ID_OUI_FROM_DATABASE=Satmap Systems Ltd
 
+OUI:80BC37*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:80BE05*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:80BEAF*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:80C16E*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
 OUI:80C3BA*
- ID_OUI_FROM_DATABASE=Sennheiser Consumer Audio GmbH
+ ID_OUI_FROM_DATABASE=Sonova Consumer Hearing GmbH
+
+OUI:80C45D*
+ ID_OUI_FROM_DATABASE=IPG Laser GmbH
 
 OUI:80C501*
  ID_OUI_FROM_DATABASE=OctoGate IT Security Systems GmbH
@@ -87272,6 +89861,9 @@
 OUI:80D21D*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
+OUI:80D266*
+ ID_OUI_FROM_DATABASE=ScaleFlux
+
 OUI:80D2E5*
  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
 
@@ -87299,9 +89891,15 @@
 OUI:80DAC2*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:80DB17*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:80DB31*
  ID_OUI_FROM_DATABASE=Power Quotient International Co., Ltd.
 
+OUI:80DECC*
+ ID_OUI_FROM_DATABASE=HYBE Co.,LTD
+
 OUI:80E01D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -87390,11 +89988,14 @@
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:80EE25*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:80EE73*
  ID_OUI_FROM_DATABASE=Shuttle Inc.
 
+OUI:80F1A4*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:80F1F1*
  ID_OUI_FROM_DATABASE=Tech4home, Lda
 
@@ -87402,7 +90003,7 @@
  ID_OUI_FROM_DATABASE=Kyynel
 
 OUI:80F3EF*
- ID_OUI_FROM_DATABASE=Facebook Technologies, LLC
+ ID_OUI_FROM_DATABASE=Meta Platforms Technologies, LLC
 
 OUI:80F503*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -87416,6 +90017,9 @@
 OUI:80F62E*
  ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
 
+OUI:80F7A6*
+ ID_OUI_FROM_DATABASE=Shenzhen C-Data Technology Co., Ltd.
+
 OUI:80F8EB*
  ID_OUI_FROM_DATABASE=RayTight
 
@@ -87426,7 +90030,7 @@
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:80FBF0*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
 OUI:80FBF1*
  ID_OUI_FROM_DATABASE=Freescale Semiconductor (China) Ltd.
@@ -87434,6 +90038,9 @@
 OUI:80FD7A*
  ID_OUI_FROM_DATABASE=BLU Products Inc
 
+OUI:80FD7B*
+ ID_OUI_FROM_DATABASE=BLU Products Inc
+
 OUI:80FFA8*
  ID_OUI_FROM_DATABASE=UNIDIS
 
@@ -87461,6 +90068,9 @@
 OUI:8406FA*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:8407C4*
+ ID_OUI_FROM_DATABASE=Carrier Corporation
+
 OUI:840B2D*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
 
@@ -87590,6 +90200,9 @@
 OUI:84225E*
  ID_OUI_FROM_DATABASE=SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.
 
+OUI:842289*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:842388*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -87686,6 +90299,9 @@
 OUI:843838*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
+OUI:84398F*
+ ID_OUI_FROM_DATABASE=Fortinet, Inc.
+
 OUI:8439BE0*
  ID_OUI_FROM_DATABASE=HINO ENGINEERING, INC
 
@@ -87734,6 +90350,9 @@
 OUI:843B10*
  ID_OUI_FROM_DATABASE=LVSWITCHES INC.
 
+OUI:843C4C*
+ ID_OUI_FROM_DATABASE=Robert Bosch SRL
+
 OUI:843DC6*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -87758,6 +90377,9 @@
 OUI:8444AF*
  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
 
+OUI:844693*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
 OUI:8446FE*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -87779,6 +90401,9 @@
 OUI:844BF5*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:844DBE*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:844F03*
  ID_OUI_FROM_DATABASE=Ablelink Electronics Ltd
 
@@ -87803,6 +90428,9 @@
 OUI:845787*
  ID_OUI_FROM_DATABASE=DVR C&C Co., Ltd.
 
+OUI:845A3E*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:845A81*
  ID_OUI_FROM_DATABASE=ffly4u
 
@@ -87822,7 +90450,7 @@
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:846082*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Hyperloop Technologies, Inc dba Virgin Hyperloop
 
 OUI:8461A0*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -87836,6 +90464,9 @@
 OUI:8463D6*
  ID_OUI_FROM_DATABASE=Microsoft Corporation
 
+OUI:8464DD*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:846569*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
@@ -87881,6 +90512,9 @@
 OUI:847207*
  ID_OUI_FROM_DATABASE=I&C Technology
 
+OUI:847293*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:847303*
  ID_OUI_FROM_DATABASE=Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.
 
@@ -87974,6 +90608,9 @@
 OUI:8486F3*
  ID_OUI_FROM_DATABASE=Greenvity Communications
 
+OUI:8488E1*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:8489AD*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -88079,6 +90716,9 @@
 OUI:848DC7*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
+OUI:848DCE*
+ ID_OUI_FROM_DATABASE=Ciena Corporation
+
 OUI:848E0C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -88094,6 +90734,9 @@
 OUI:849000*
  ID_OUI_FROM_DATABASE=Arnold&Richter Cine Technik GmbH & Co. Betriebs KG
 
+OUI:84900A*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
 OUI:84930C*
  ID_OUI_FROM_DATABASE=InCoax Networks Europe AB
 
@@ -88187,6 +90830,9 @@
 OUI:84AA9C*
  ID_OUI_FROM_DATABASE=MitraStar Technology Corp.
 
+OUI:84AAA4*
+ ID_OUI_FROM_DATABASE=SONoC Corp.
+
 OUI:84AB1A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -88217,12 +90863,57 @@
 OUI:84B153*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:84B1E4*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:84B261*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:84B31B*
  ID_OUI_FROM_DATABASE=Kinexon GmbH
 
+OUI:84B3860*
+ ID_OUI_FROM_DATABASE=Nan Jing WZX Technology Limited
+
+OUI:84B3861*
+ ID_OUI_FROM_DATABASE=Sichuan Huakun Zhenyu Intelligent Technology Co., Ltd
+
+OUI:84B3862*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:84B3863*
+ ID_OUI_FROM_DATABASE=Phonesuite
+
+OUI:84B3865*
+ ID_OUI_FROM_DATABASE=Fusus
+
+OUI:84B3866*
+ ID_OUI_FROM_DATABASE=ALPHA Corporation
+
+OUI:84B3867*
+ ID_OUI_FROM_DATABASE=FOTILE GROUP NINGBO FOTILE KITCHENWARE Co.,Ltd
+
+OUI:84B3868*
+ ID_OUI_FROM_DATABASE=NetworX
+
+OUI:84B3869*
+ ID_OUI_FROM_DATABASE=Weiss Robotics GmbH & Co. KG
+
+OUI:84B386A*
+ ID_OUI_FROM_DATABASE=Velocio Networks, Inc.
+
+OUI:84B386B*
+ ID_OUI_FROM_DATABASE=Sineng electric CO., Ltd
+
+OUI:84B386C*
+ ID_OUI_FROM_DATABASE=Palomar Products Inc
+
+OUI:84B386D*
+ ID_OUI_FROM_DATABASE=Dongguan Amsamotion Automation Technology Co., Ltd
+
+OUI:84B386E*
+ ID_OUI_FROM_DATABASE=NINGBO XINSUAN TECHNOLOGY CO.,LTD
+
 OUI:84B4DB*
  ID_OUI_FROM_DATABASE=Silicon Laboratories
 
@@ -88322,6 +91013,9 @@
 OUI:84D343*
  ID_OUI_FROM_DATABASE=Calix Inc.
 
+OUI:84D352*
+ ID_OUI_FROM_DATABASE=Tonly Technology Co. Ltd
+
 OUI:84D3D5*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -88358,6 +91052,9 @@
 OUI:84DB9E*
  ID_OUI_FROM_DATABASE=Pink Nectarine Health AB
 
+OUI:84DBA4*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:84DBAC*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -88445,6 +91142,9 @@
 OUI:84E629*
  ID_OUI_FROM_DATABASE=Bluwan SA
 
+OUI:84E657*
+ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
+
 OUI:84E714*
  ID_OUI_FROM_DATABASE=Liang Herng Enterprise,Co.Ltd.
 
@@ -88478,18 +91178,27 @@
 OUI:84EF18*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:84F117*
+ ID_OUI_FROM_DATABASE=Newseason
+
 OUI:84F129*
  ID_OUI_FROM_DATABASE=Metrascale Inc.
 
 OUI:84F147*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:84F175*
+ ID_OUI_FROM_DATABASE=Jiangxi Xunte Intelligent Terminal Co., Ltd
+
 OUI:84F1D0*
  ID_OUI_FROM_DATABASE=EHOOME IOT PRIVATE LIMITED
 
 OUI:84F3EB*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:84F44C*
+ ID_OUI_FROM_DATABASE=International Integrated Systems., Inc.
+
 OUI:84F493*
  ID_OUI_FROM_DATABASE=OMS spol. s.r.o.
 
@@ -88505,9 +91214,15 @@
 OUI:84F883*
  ID_OUI_FROM_DATABASE=Luminar Technologies
 
+OUI:84FB43*
+ ID_OUI_FROM_DATABASE=Central Denshi Seigyo
+
 OUI:84FCAC*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:84FCE6*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:84FCFE*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -88544,6 +91259,9 @@
 OUI:88074B*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
+OUI:880894*
+ ID_OUI_FROM_DATABASE=Skullcandy
+
 OUI:880905*
  ID_OUI_FROM_DATABASE=MTMCommunications
 
@@ -88607,9 +91325,18 @@
 OUI:881DFC*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:881E59*
+ ID_OUI_FROM_DATABASE=Onion Corporation
+
+OUI:881E5A*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:881FA1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:88200D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:882012*
  ID_OUI_FROM_DATABASE=LMI Technologies
 
@@ -88631,6 +91358,9 @@
 OUI:8823FE*
  ID_OUI_FROM_DATABASE=TTTech Computertechnik AG
 
+OUI:882508*
+ ID_OUI_FROM_DATABASE=Meta Platforms Technologies, LLC
+
 OUI:882510*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
@@ -88640,9 +91370,15 @@
 OUI:882593*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:88287D*
+ ID_OUI_FROM_DATABASE=AltoBeam (China) Inc.
+
 OUI:8828B3*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:8828FB*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:882949*
  ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
 
@@ -88709,12 +91445,63 @@
 OUI:883C1C*
  ID_OUI_FROM_DATABASE=MERCURY CORPORATION
 
+OUI:883C93*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent Enterprise
+
+OUI:883CC50*
+ ID_OUI_FROM_DATABASE=Chengdu Data Sky Technology Co., Ltd.
+
+OUI:883CC51*
+ ID_OUI_FROM_DATABASE=Hanwei Electronics Group Corporation
+
+OUI:883CC52*
+ ID_OUI_FROM_DATABASE=NETGEN HITECH SOLUTIONS LLP
+
+OUI:883CC53*
+ ID_OUI_FROM_DATABASE=shenzhen Feng Jing Sheng Electronics Technology Co.,Ltd
+
+OUI:883CC54*
+ ID_OUI_FROM_DATABASE=Swabian Instruments GmbH
+
+OUI:883CC55*
+ ID_OUI_FROM_DATABASE=Shanghai Ucan Automation Equipment Co., Ltd.
+
+OUI:883CC56*
+ ID_OUI_FROM_DATABASE=mfJebsen Electronics Ltd.
+
+OUI:883CC57*
+ ID_OUI_FROM_DATABASE=KMtronic ltd
+
+OUI:883CC58*
+ ID_OUI_FROM_DATABASE=Wuhan Guangying Intelligence Technology Co., Ltd
+
+OUI:883CC59*
+ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+
+OUI:883CC5A*
+ ID_OUI_FROM_DATABASE=Corigine,Inc.
+
+OUI:883CC5B*
+ ID_OUI_FROM_DATABASE=Shenzhen shijia chuangxin Technology Co., Ltd
+
+OUI:883CC5C*
+ ID_OUI_FROM_DATABASE=HDL da Amazônia Industria Eletrônica Ltda
+
+OUI:883CC5D*
+ ID_OUI_FROM_DATABASE=Lenard Enterprises Inc
+
+OUI:883CC5E*
+ ID_OUI_FROM_DATABASE=myUpTech AB
+
 OUI:883D24*
  ID_OUI_FROM_DATABASE=Google, Inc.
 
 OUI:883F0C*
  ID_OUI_FROM_DATABASE=system a.v. co., ltd.
 
+OUI:883F37*
+ ID_OUI_FROM_DATABASE=UHTEK CO., LTD.
+
 OUI:883F4A*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -88814,6 +91601,9 @@
 OUI:8857EE*
  ID_OUI_FROM_DATABASE=BUFFALO.INC
 
+OUI:8858BE*
+ ID_OUI_FROM_DATABASE=kuosheng.com
+
 OUI:885A06*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -88928,6 +91718,9 @@
 OUI:88615A*
  ID_OUI_FROM_DATABASE=Siano Mobile Silicon Ltd.
 
+OUI:88625D*
+ ID_OUI_FROM_DATABASE=BITNETWORKS CO.,LTD
+
 OUI:8863DF*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -88943,6 +91736,12 @@
 OUI:8866A5*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:8867DC*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:88684B*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:88685C*
  ID_OUI_FROM_DATABASE=Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd
 
@@ -88967,6 +91766,12 @@
 OUI:886B76*
  ID_OUI_FROM_DATABASE=CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD
 
+OUI:886D2D*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
+OUI:886EDD*
+ ID_OUI_FROM_DATABASE=Micronet union Technology(Chengdu)Co., Ltd.
+
 OUI:886EE1*
  ID_OUI_FROM_DATABASE=Erbe Elektromedizin GmbH
 
@@ -88997,6 +91802,9 @@
 OUI:887398*
  ID_OUI_FROM_DATABASE=K2E Tekpoint
 
+OUI:887477*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:887556*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -89093,6 +91901,9 @@
 OUI:88947E*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:88948E*
+ ID_OUI_FROM_DATABASE=Max Weishaupt GmbH
+
 OUI:88948F*
  ID_OUI_FROM_DATABASE=Xi'an Zhisensor Technologies Co.,Ltd
 
@@ -89135,6 +91946,9 @@
 OUI:889CA6*
  ID_OUI_FROM_DATABASE=BTB Korea INC
 
+OUI:889CAD*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:889D98*
  ID_OUI_FROM_DATABASE=Allied-telesisK.K.
 
@@ -89258,6 +92072,9 @@
 OUI:88AEDD*
  ID_OUI_FROM_DATABASE=EliteGroup Computer Systems Co., LTD
 
+OUI:88AF7B*
+ ID_OUI_FROM_DATABASE=Nanjing Powercore Tech Co.,Ltd
+
 OUI:88B111*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -89274,23 +92091,32 @@
  ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
 
 OUI:88B436*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=FUJIFILM Corporation
 
 OUI:88B4A6*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
+OUI:88B4BE*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:88B627*
  ID_OUI_FROM_DATABASE=Gembird Europe BV
 
 OUI:88B66B*
  ID_OUI_FROM_DATABASE=easynetworks
 
+OUI:88B6BD*
+ ID_OUI_FROM_DATABASE=Flaircomm Microelectronics, Inc.
+
 OUI:88B6EE*
  ID_OUI_FROM_DATABASE=Dish Technologies Corp
 
 OUI:88B863*
  ID_OUI_FROM_DATABASE=HISENSE VISUAL TECHNOLOGY CO.,LTD
 
+OUI:88B86F*
+ ID_OUI_FROM_DATABASE=Infinix mobility limited
+
 OUI:88B8D0*
  ID_OUI_FROM_DATABASE=Dongguan Koppo Electronic Co.,Ltd
 
@@ -89348,6 +92174,9 @@
 OUI:88C663*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:88C6E8*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:88C9B30*
  ID_OUI_FROM_DATABASE=ADOPT NETTECH PVT LTD
 
@@ -89379,7 +92208,7 @@
  ID_OUI_FROM_DATABASE=Richbeam (Beijing) Technology Co., Ltd.
 
 OUI:88C9B3A*
- ID_OUI_FROM_DATABASE=Gefran Drive & Motion srl
+ ID_OUI_FROM_DATABASE=WEG AUTOMATION EUROPE S.R.L.
 
 OUI:88C9B3B*
  ID_OUI_FROM_DATABASE=Shenzhen MMUI Co.,Ltd
@@ -89408,6 +92237,9 @@
 OUI:88CC45*
  ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
 
+OUI:88CE3F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:88CEFA*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -89472,7 +92304,7 @@
  ID_OUI_FROM_DATABASE=Voltaire
 
 OUI:88DE7C*
- ID_OUI_FROM_DATABASE=Askey Computer Corp.
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
 
 OUI:88DEA9*
  ID_OUI_FROM_DATABASE=Roku, Inc.
@@ -89579,6 +92411,9 @@
 OUI:8C006D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:8C02CD*
+ ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD
+
 OUI:8C02FA*
  ID_OUI_FROM_DATABASE=COMMANDO Networks Limited
 
@@ -89591,6 +92426,9 @@
 OUI:8C0551*
  ID_OUI_FROM_DATABASE=Koubachi AG
 
+OUI:8C06CB*
+ ID_OUI_FROM_DATABASE=Toradex AG
+
 OUI:8C078C*
  ID_OUI_FROM_DATABASE=FLOW DATA INC
 
@@ -89643,7 +92481,7 @@
  ID_OUI_FROM_DATABASE=Nio
 
 OUI:8C147D1*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Schneider Electric - Triconex
 
 OUI:8C147D2*
  ID_OUI_FROM_DATABASE=Agilent S.p.A
@@ -89819,6 +92657,15 @@
 OUI:8C1F64003*
  ID_OUI_FROM_DATABASE=Brighten Controls LLP
 
+OUI:8C1F64009*
+ ID_OUI_FROM_DATABASE=Converging Systems Inc.
+
+OUI:8C1F6400C*
+ ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd.
+
+OUI:8C1F64011*
+ ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
+
 OUI:8C1F64017*
  ID_OUI_FROM_DATABASE=Farmote Limited
 
@@ -89828,15 +92675,39 @@
 OUI:8C1F6401E*
  ID_OUI_FROM_DATABASE=SCIREQ Scientific Respiratory Equipment  Inc
 
+OUI:8C1F64024*
+ ID_OUI_FROM_DATABASE=Shin Nihon Denshi Co., Ltd.
+
+OUI:8C1F64025*
+ ID_OUI_FROM_DATABASE=SMITEC S.p.A.
+
+OUI:8C1F6402F*
+ ID_OUI_FROM_DATABASE=SOLIDpower SpA
+
+OUI:8C1F64033*
+ ID_OUI_FROM_DATABASE=IQ Home Kft.
+
+OUI:8C1F64043*
+ ID_OUI_FROM_DATABASE=AperNet, LLC
+
 OUI:8C1F64045*
  ID_OUI_FROM_DATABASE=VEILUX INC.
 
+OUI:8C1F64046*
+ ID_OUI_FROM_DATABASE=American Fullway Corp.
+
+OUI:8C1F64056*
+ ID_OUI_FROM_DATABASE=DONG GUAN YUNG FU ELECTRONICS LTD.
+
 OUI:8C1F64059*
  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
 
 OUI:8C1F6405F*
  ID_OUI_FROM_DATABASE=ESCAD AUTOMATION GmbH
 
+OUI:8C1F6406B*
+ ID_OUI_FROM_DATABASE=Sanwa Supply Inc.
+
 OUI:8C1F6406D*
  ID_OUI_FROM_DATABASE=Monnit Corporation
 
@@ -89846,6 +92717,9 @@
 OUI:8C1F64077*
  ID_OUI_FROM_DATABASE=Engage Technologies
 
+OUI:8C1F6407A*
+ ID_OUI_FROM_DATABASE=Flextronics International Kft
+
 OUI:8C1F6407E*
  ID_OUI_FROM_DATABASE=FLOYD inc.
 
@@ -89861,9 +92735,24 @@
 OUI:8C1F6408B*
  ID_OUI_FROM_DATABASE=Shanghai Shenxu Technology Co., Ltd
 
+OUI:8C1F6408D*
+ ID_OUI_FROM_DATABASE=NEETRA SRL SB
+
+OUI:8C1F6408E*
+ ID_OUI_FROM_DATABASE=qiio AG
+
 OUI:8C1F6408F*
  ID_OUI_FROM_DATABASE=AixControl GmbH
 
+OUI:8C1F64092*
+ ID_OUI_FROM_DATABASE=Gogo BA
+
+OUI:8C1F64097*
+ ID_OUI_FROM_DATABASE=FoMa Systems GmbH
+
+OUI:8C1F64098*
+ ID_OUI_FROM_DATABASE=Agvolution GmbH
+
 OUI:8C1F64099*
  ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd
 
@@ -89876,6 +92765,9 @@
 OUI:8C1F640A8*
  ID_OUI_FROM_DATABASE=SamabaNova Systems
 
+OUI:8C1F640AA*
+ ID_OUI_FROM_DATABASE=DI3 INFOTECH LLP
+
 OUI:8C1F640AB*
  ID_OUI_FROM_DATABASE=Norbit ODM AS
 
@@ -89888,9 +92780,15 @@
 OUI:8C1F640B0*
  ID_OUI_FROM_DATABASE=Bunka Shutter Co., Ltd.
 
+OUI:8C1F640B7*
+ ID_OUI_FROM_DATABASE=TIAMA
+
 OUI:8C1F640B8*
  ID_OUI_FROM_DATABASE=Signatrol Ltd
 
+OUI:8C1F640BB*
+ ID_OUI_FROM_DATABASE=InfraChen Technology Co., Ltd.
+
 OUI:8C1F640BE*
  ID_OUI_FROM_DATABASE=BNB
 
@@ -89900,9 +92798,15 @@
 OUI:8C1F640C5*
  ID_OUI_FROM_DATABASE=TechnipFMC
 
+OUI:8C1F640D5*
+ ID_OUI_FROM_DATABASE=RealD, Inc.
+
 OUI:8C1F640D6*
  ID_OUI_FROM_DATABASE=AVD INNOVATION LIMITED
 
+OUI:8C1F640D8*
+ ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+
 OUI:8C1F640E0*
  ID_OUI_FROM_DATABASE=Autopharma
 
@@ -89912,9 +92816,24 @@
 OUI:8C1F640EA*
  ID_OUI_FROM_DATABASE=SmartSky Networks LLC
 
+OUI:8C1F640EE*
+ ID_OUI_FROM_DATABASE=Rich Source Precision IND., Co., LTD.
+
+OUI:8C1F640EF*
+ ID_OUI_FROM_DATABASE=DAVE SRL
+
 OUI:8C1F640F0*
  ID_OUI_FROM_DATABASE=Xylon
 
+OUI:8C1F640F2*
+ ID_OUI_FROM_DATABASE=Graphimecc Group SRL
+
+OUI:8C1F640F4*
+ ID_OUI_FROM_DATABASE=AW-SOM Technologies LLC
+
+OUI:8C1F640F5*
+ ID_OUI_FROM_DATABASE=Vishay Nobel AB
+
 OUI:8C1F640F9*
  ID_OUI_FROM_DATABASE=ikan International LLC
 
@@ -89927,9 +92846,15 @@
 OUI:8C1F64111*
  ID_OUI_FROM_DATABASE=ISAC SRL
 
+OUI:8C1F64113*
+ ID_OUI_FROM_DATABASE=Timberline Manufacturing
+
 OUI:8C1F64115*
  ID_OUI_FROM_DATABASE=Neuralog LP
 
+OUI:8C1F64117*
+ ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
+
 OUI:8C1F64118*
  ID_OUI_FROM_DATABASE=Automata GmbH & Co. KG
 
@@ -89942,15 +92867,36 @@
 OUI:8C1F6412B*
  ID_OUI_FROM_DATABASE=Beijing Tongtech Technology Co., Ltd.
 
+OUI:8C1F6412E*
+ ID_OUI_FROM_DATABASE=inomatic GmbH
+
+OUI:8C1F64133*
+ ID_OUI_FROM_DATABASE=Vtron Pty Ltd
+
 OUI:8C1F64135*
  ID_OUI_FROM_DATABASE=Yuval Fichman
 
+OUI:8C1F64138*
+ ID_OUI_FROM_DATABASE=Vissavi sp. z o.o.
+
 OUI:8C1F64144*
  ID_OUI_FROM_DATABASE=Langfang ENN lntelligent Technology Co.,Ltd.
 
+OUI:8C1F64145*
+ ID_OUI_FROM_DATABASE=Spectrum FiftyNine BV
+
+OUI:8C1F6414B*
+ ID_OUI_FROM_DATABASE=Potter Electric Signal Company
+
 OUI:8C1F64151*
  ID_OUI_FROM_DATABASE=Gogo Business Aviation
 
+OUI:8C1F64154*
+ ID_OUI_FROM_DATABASE=Flextronics International Kft
+
+OUI:8C1F6415C*
+ ID_OUI_FROM_DATABASE=TRON FUTURE TECH INC.
+
 OUI:8C1F6415E*
  ID_OUI_FROM_DATABASE=Dynomotion, Inc
 
@@ -89960,12 +92906,30 @@
 OUI:8C1F64166*
  ID_OUI_FROM_DATABASE=Hikari Alphax Inc.
 
+OUI:8C1F6416D*
+ ID_OUI_FROM_DATABASE=Xiamen Rgblink Science & Technology Co., Ltd.
+
 OUI:8C1F6416E*
  ID_OUI_FROM_DATABASE=Benchmark Electronics BV
 
 OUI:8C1F64177*
  ID_OUI_FROM_DATABASE=Emcom Systems
 
+OUI:8C1F64179*
+ ID_OUI_FROM_DATABASE=Agrowtek Inc.
+
+OUI:8C1F6417C*
+ ID_OUI_FROM_DATABASE=Zelp Ltd
+
+OUI:8C1F6417E*
+ ID_OUI_FROM_DATABASE=MI Inc.
+
+OUI:8C1F64187*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
+OUI:8C1F6418B*
+ ID_OUI_FROM_DATABASE=M-Pulse GmbH & Co.KG
+
 OUI:8C1F64193*
  ID_OUI_FROM_DATABASE=Sicon srl
 
@@ -89981,27 +92945,54 @@
 OUI:8C1F6419C*
  ID_OUI_FROM_DATABASE=Aton srl
 
+OUI:8C1F641A5*
+ ID_OUI_FROM_DATABASE=DIALTRONICS SYSTEMS PVT LTD
+
+OUI:8C1F641A7*
+ ID_OUI_FROM_DATABASE=aelettronica group srl
+
 OUI:8C1F641AF*
  ID_OUI_FROM_DATABASE=EnviroNode IoT Solutions
 
+OUI:8C1F641B2*
+ ID_OUI_FROM_DATABASE=Rapid-e-Engineering Steffen Kramer
+
+OUI:8C1F641B5*
+ ID_OUI_FROM_DATABASE=Xicato
+
 OUI:8C1F641B6*
  ID_OUI_FROM_DATABASE=Red Sensors Limited
 
+OUI:8C1F641B7*
+ ID_OUI_FROM_DATABASE=Rax-Tech International
+
 OUI:8C1F641BB*
  ID_OUI_FROM_DATABASE=Renwei Electronics Technology (Shenzhen) Co.,LTD.
 
+OUI:8C1F641BD*
+ ID_OUI_FROM_DATABASE=DORLET SAU
+
 OUI:8C1F641BF*
  ID_OUI_FROM_DATABASE=Ossia Inc
 
+OUI:8C1F641C0*
+ ID_OUI_FROM_DATABASE=INVENTIA Sp. z o.o.
+
 OUI:8C1F641C2*
  ID_OUI_FROM_DATABASE=Solid Invent Ltda.
 
 OUI:8C1F641CB*
  ID_OUI_FROM_DATABASE=SASYS e.K.
 
+OUI:8C1F641D0*
+ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+
 OUI:8C1F641D1*
  ID_OUI_FROM_DATABASE=AS Strömungstechnik GmbH
 
+OUI:8C1F641D8*
+ ID_OUI_FROM_DATABASE=Mesomat inc.
+
 OUI:8C1F641DA*
  ID_OUI_FROM_DATABASE=Chongqing Huaxiu Technology Co.,Ltd
 
@@ -90014,9 +93005,27 @@
 OUI:8C1F641EF*
  ID_OUI_FROM_DATABASE=Tantronic AG
 
+OUI:8C1F641F0*
+ ID_OUI_FROM_DATABASE=AVCOMM Technologies Inc
+
+OUI:8C1F641F5*
+ ID_OUI_FROM_DATABASE=NanoThings Inc.
+
+OUI:8C1F641FE*
+ ID_OUI_FROM_DATABASE=Burk Technology
+
 OUI:8C1F64204*
  ID_OUI_FROM_DATABASE=castcore
 
+OUI:8C1F64208*
+ ID_OUI_FROM_DATABASE=Sichuan AnSphere Technology Co. Ltd.
+
+OUI:8C1F6420E*
+ ID_OUI_FROM_DATABASE=Alpha Bridge Technologies Private Limited
+
+OUI:8C1F64211*
+ ID_OUI_FROM_DATABASE=Bipom Electronics, Inc.
+
 OUI:8C1F64219*
  ID_OUI_FROM_DATABASE=Guangzhou Desam Audio Co.,Ltd
 
@@ -90032,9 +93041,24 @@
 OUI:8C1F6422E*
  ID_OUI_FROM_DATABASE=Jide Car Rastreamento e Monitoramento LTDA
 
+OUI:8C1F6423D*
+ ID_OUI_FROM_DATABASE=Mokila Networks Pvt Ltd
+
+OUI:8C1F64240*
+ ID_OUI_FROM_DATABASE=HuiTong intelligence Company
+
 OUI:8C1F64242*
  ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA
 
+OUI:8C1F6424C*
+ ID_OUI_FROM_DATABASE=Shenzhen Link-All Technolgy Co., Ltd
+
+OUI:8C1F64251*
+ ID_OUI_FROM_DATABASE=Watchdog Systems
+
+OUI:8C1F64252*
+ ID_OUI_FROM_DATABASE=TYT Electronics CO., LTD
+
 OUI:8C1F64254*
  ID_OUI_FROM_DATABASE=Zhuhai Yunzhou Intelligence Technology Ltd.
 
@@ -90044,24 +93068,48 @@
 OUI:8C1F6425A*
  ID_OUI_FROM_DATABASE=Wuhan Xingtuxinke ELectronic Co.,Ltd
 
+OUI:8C1F6425C*
+ ID_OUI_FROM_DATABASE=TimeMachines Inc.
+
 OUI:8C1F6425E*
  ID_OUI_FROM_DATABASE=R2Sonic, LLC
 
 OUI:8C1F64264*
  ID_OUI_FROM_DATABASE=BR. Voss Ingenjörsfirma AB
 
+OUI:8C1F64268*
+ ID_OUI_FROM_DATABASE=Astro Machine Corporation
+
+OUI:8C1F6426E*
+ ID_OUI_FROM_DATABASE=Koizumi Lighting Technology Corp.
+
 OUI:8C1F64270*
  ID_OUI_FROM_DATABASE=Xi‘an Hangguang Satellite and Control Technology Co.,Ltd
 
 OUI:8C1F64274*
  ID_OUI_FROM_DATABASE=INVIXIUM ACCESS INC
 
+OUI:8C1F64281*
+ ID_OUI_FROM_DATABASE=NVP TECO LTD
+
+OUI:8C1F64286*
+ ID_OUI_FROM_DATABASE=i2s
+
+OUI:8C1F64289*
+ ID_OUI_FROM_DATABASE=Craft4 Digital GmbH
+
 OUI:8C1F6428A*
  ID_OUI_FROM_DATABASE=Arcopie
 
 OUI:8C1F6428C*
  ID_OUI_FROM_DATABASE=Sakura Seiki Co.,Ltd.
 
+OUI:8C1F6428D*
+ ID_OUI_FROM_DATABASE=AVA Monitoring AB
+
+OUI:8C1F64293*
+ ID_OUI_FROM_DATABASE=Landis+Gyr Equipamentos de Medição Ltda
+
 OUI:8C1F64296*
  ID_OUI_FROM_DATABASE=Roog zhi tong Technology(Beijing) Co.,Ltd
 
@@ -90071,12 +93119,21 @@
 OUI:8C1F6429F*
  ID_OUI_FROM_DATABASE=NAGTECH LLC
 
+OUI:8C1F642A1*
+ ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd
+
 OUI:8C1F642A5*
  ID_OUI_FROM_DATABASE=Nonet Inc
 
+OUI:8C1F642A9*
+ ID_OUI_FROM_DATABASE=Elbit Systems of America, LLC
+
 OUI:8C1F642B6*
  ID_OUI_FROM_DATABASE=Stercom Power Solutions GmbH
 
+OUI:8C1F642BB*
+ ID_OUI_FROM_DATABASE=Chakra Technology Ltd
+
 OUI:8C1F642C2*
  ID_OUI_FROM_DATABASE=TEX COMPUTER SRL
 
@@ -90086,9 +93143,21 @@
 OUI:8C1F642C5*
  ID_OUI_FROM_DATABASE=SYSN
 
+OUI:8C1F642C6*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
 OUI:8C1F642C8*
  ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
 
+OUI:8C1F642CD*
+ ID_OUI_FROM_DATABASE=Taiwan Vtron
+
+OUI:8C1F642D8*
+ ID_OUI_FROM_DATABASE=CONTROL SYSTEMS Srl
+
+OUI:8C1F642E2*
+ ID_OUI_FROM_DATABASE=Mark Roberts Motion Control
+
 OUI:8C1F642E8*
  ID_OUI_FROM_DATABASE=Sonora Network Solutions
 
@@ -90098,9 +93167,21 @@
 OUI:8C1F642F5*
  ID_OUI_FROM_DATABASE=Florida R&D Associates LLC
 
+OUI:8C1F642FB*
+ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+
+OUI:8C1F642FC*
+ ID_OUI_FROM_DATABASE=Unimar, Inc.
+
 OUI:8C1F642FD*
  ID_OUI_FROM_DATABASE=Enestone Corporation
 
+OUI:8C1F642FE*
+ ID_OUI_FROM_DATABASE=VERSITRON, Inc.
+
+OUI:8C1F64300*
+ ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
+
 OUI:8C1F64301*
  ID_OUI_FROM_DATABASE=Agar Corporation Inc.
 
@@ -90108,44 +93189,113 @@
  ID_OUI_FROM_DATABASE=Jemac Sweden AB
 
 OUI:8C1F64306*
- ID_OUI_FROM_DATABASE=Corigine, Inc
+ ID_OUI_FROM_DATABASE=Corigine,Inc.
+
+OUI:8C1F64309*
+ ID_OUI_FROM_DATABASE=MECT SRL
 
 OUI:8C1F6430A*
  ID_OUI_FROM_DATABASE=XCOM Labs
 
+OUI:8C1F64314*
+ ID_OUI_FROM_DATABASE=Cedel BV
+
 OUI:8C1F64316*
  ID_OUI_FROM_DATABASE=Potter Electric Signal Company
 
+OUI:8C1F64317*
+ ID_OUI_FROM_DATABASE=Bacancy Systems LLP
+
 OUI:8C1F6431A*
  ID_OUI_FROM_DATABASE=Asiga Pty Ltd
 
+OUI:8C1F6431B*
+ ID_OUI_FROM_DATABASE=joint analytical systems GmbH
+
+OUI:8C1F64324*
+ ID_OUI_FROM_DATABASE=Kinetic Technologies
+
 OUI:8C1F64328*
  ID_OUI_FROM_DATABASE=Com Video Security Systems Co., Ltd.
 
+OUI:8C1F64329*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
+OUI:8C1F6432B*
+ ID_OUI_FROM_DATABASE=Shenyang Taihua Technology Co., Ltd.
+
+OUI:8C1F6432C*
+ ID_OUI_FROM_DATABASE=Taiko Audio B.V.
+
+OUI:8C1F6432F*
+ ID_OUI_FROM_DATABASE=DEUTA Controls GmbH
+
 OUI:8C1F64330*
  ID_OUI_FROM_DATABASE=Vision Systems Safety Tech
 
+OUI:8C1F64349*
+ ID_OUI_FROM_DATABASE=WAVES SYSTEM
+
+OUI:8C1F6434C*
+ ID_OUI_FROM_DATABASE=Kyushu Keisokki Co.,Ltd.
+
+OUI:8C1F6434D*
+ ID_OUI_FROM_DATABASE=biosilver .co.,ltd
+
+OUI:8C1F64350*
+ ID_OUI_FROM_DATABASE=biosilver .co.,ltd
+
+OUI:8C1F64354*
+ ID_OUI_FROM_DATABASE=Paul Tagliamonte
+
 OUI:8C1F6435C*
  ID_OUI_FROM_DATABASE=Opgal Optronic Industries ltd
 
 OUI:8C1F6435D*
  ID_OUI_FROM_DATABASE=Security&Best
 
+OUI:8C1F64365*
+ ID_OUI_FROM_DATABASE=VECTOR TECHNOLOGIES, LLC
+
+OUI:8C1F64366*
+ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+
+OUI:8C1F64367*
+ ID_OUI_FROM_DATABASE=LAMTEC Mess- und Regeltechnik für Feuerungen GmbH & Co. KG
+
+OUI:8C1F64369*
+ ID_OUI_FROM_DATABASE=Orbital Astronautics Ltd
+
+OUI:8C1F6436A*
+ ID_OUI_FROM_DATABASE=INVENTIS S.r.l.
+
 OUI:8C1F64370*
  ID_OUI_FROM_DATABASE=WOLF Advanced Technology
 
 OUI:8C1F64372*
  ID_OUI_FROM_DATABASE=WINK Streaming
 
+OUI:8C1F64376*
+ ID_OUI_FROM_DATABASE=DIAS Infrared GmbH
+
+OUI:8C1F6437F*
+ ID_OUI_FROM_DATABASE=Scarlet Tech Co., Ltd.
+
 OUI:8C1F64382*
  ID_OUI_FROM_DATABASE=Shenzhen ROLSTONE Technology Co., Ltd
 
 OUI:8C1F64385*
  ID_OUI_FROM_DATABASE=Multilane Inc
 
+OUI:8C1F64387*
+ ID_OUI_FROM_DATABASE=OMNIVISION
+
 OUI:8C1F6438B*
  ID_OUI_FROM_DATABASE=Borrell USA Corp
 
+OUI:8C1F6438C*
+ ID_OUI_FROM_DATABASE=XIAMEN ZHIXIAOJIN INTELLIGENT TECHNOLOGY CO., LTD
+
 OUI:8C1F6438D*
  ID_OUI_FROM_DATABASE=Wilson Electronics
 
@@ -90161,6 +93311,12 @@
 OUI:8C1F64398*
  ID_OUI_FROM_DATABASE=Software Systems Plus
 
+OUI:8C1F6439A*
+ ID_OUI_FROM_DATABASE=Golding Audio Ltd
+
+OUI:8C1F6439E*
+ ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
+
 OUI:8C1F643A4*
  ID_OUI_FROM_DATABASE=QLM Technology Ltd
 
@@ -90170,12 +93326,27 @@
 OUI:8C1F643AD*
  ID_OUI_FROM_DATABASE=TowerIQ
 
+OUI:8C1F643AF*
+ ID_OUI_FROM_DATABASE=PSA Technology Ltda.
+
+OUI:8C1F643B0*
+ ID_OUI_FROM_DATABASE=Flextronics International Kft
+
 OUI:8C1F643B2*
  ID_OUI_FROM_DATABASE=Real Digital
 
 OUI:8C1F643B5*
  ID_OUI_FROM_DATABASE=SVMS
 
+OUI:8C1F643B6*
+ ID_OUI_FROM_DATABASE=TEX COMPUTER SRL
+
+OUI:8C1F643B7*
+ ID_OUI_FROM_DATABASE=AI-BLOX
+
+OUI:8C1F643BB*
+ ID_OUI_FROM_DATABASE=Clausal Computing Oy
+
 OUI:8C1F643C4*
  ID_OUI_FROM_DATABASE=NavSys Technology Inc.
 
@@ -90185,6 +93356,9 @@
 OUI:8C1F643C6*
  ID_OUI_FROM_DATABASE=Wavestream Corp
 
+OUI:8C1F643CD*
+ ID_OUI_FROM_DATABASE=Sejong security system Cor.
+
 OUI:8C1F643D1*
  ID_OUI_FROM_DATABASE=EMIT GmbH
 
@@ -90203,18 +93377,36 @@
 OUI:8C1F643F4*
  ID_OUI_FROM_DATABASE=ACTELSER S.L.
 
+OUI:8C1F643FC*
+ ID_OUI_FROM_DATABASE=STV Electronic GmbH
+
 OUI:8C1F643FE*
  ID_OUI_FROM_DATABASE=Plum sp. z.o.o.
 
 OUI:8C1F643FF*
  ID_OUI_FROM_DATABASE=UISEE(SHANGHAI) AUTOMOTIVE TECHNOLOGIES LTD.
 
+OUI:8C1F64402*
+ ID_OUI_FROM_DATABASE=Integer.pl S.A.
+
+OUI:8C1F64406*
+ ID_OUI_FROM_DATABASE=ANDA TELECOM PVT LTD
+
+OUI:8C1F64408*
+ ID_OUI_FROM_DATABASE=techone system
+
 OUI:8C1F6440C*
  ID_OUI_FROM_DATABASE=Sichuan Aiyijan Technology Company Ltd.
 
+OUI:8C1F6440D*
+ ID_OUI_FROM_DATABASE=PROFITT Ltd
+
 OUI:8C1F6440E*
  ID_OUI_FROM_DATABASE=Baker Hughes EMEA
 
+OUI:8C1F64412*
+ ID_OUI_FROM_DATABASE=Comercial Electronica Studio-2 s.l.
+
 OUI:8C1F64414*
  ID_OUI_FROM_DATABASE=INSEVIS GmbH
 
@@ -90224,6 +93416,9 @@
 OUI:8C1F6441D*
  ID_OUI_FROM_DATABASE=Aspen Spectra Sdn Bhd
 
+OUI:8C1F64423*
+ ID_OUI_FROM_DATABASE=Hiwin Mikrosystem Corp.
+
 OUI:8C1F64426*
  ID_OUI_FROM_DATABASE=eumig industrie-TV GmbH.
 
@@ -90236,12 +93431,27 @@
 OUI:8C1F64438*
  ID_OUI_FROM_DATABASE=Integer.pl S.A.
 
+OUI:8C1F64439*
+ ID_OUI_FROM_DATABASE=BORNICO
+
+OUI:8C1F6443D*
+ ID_OUI_FROM_DATABASE=Solid State Supplies Ltd
+
 OUI:8C1F64445*
  ID_OUI_FROM_DATABASE=Figment Design Laboratories
 
+OUI:8C1F6444E*
+ ID_OUI_FROM_DATABASE=GVA Lighting, Inc.
+
+OUI:8C1F6444F*
+ ID_OUI_FROM_DATABASE=RealD, Inc.
+
 OUI:8C1F64454*
  ID_OUI_FROM_DATABASE=KJ Klimateknik A/S
 
+OUI:8C1F6445B*
+ ID_OUI_FROM_DATABASE=Beijing Aoxing Technology Co.,Ltd
+
 OUI:8C1F6445D*
  ID_OUI_FROM_DATABASE=Fuzhou Tucsen Photonics Co.,Ltd
 
@@ -90251,12 +93461,21 @@
 OUI:8C1F64460*
  ID_OUI_FROM_DATABASE=Solace Systems Inc.
 
+OUI:8C1F64462*
+ ID_OUI_FROM_DATABASE=REO AG
+
 OUI:8C1F64466*
  ID_OUI_FROM_DATABASE=Intamsys Technology Co.Ltd
 
+OUI:8C1F6446A*
+ ID_OUI_FROM_DATABASE=Pharsighted LLC
+
 OUI:8C1F64472*
  ID_OUI_FROM_DATABASE=Surge Networks, Inc.
 
+OUI:8C1F64475*
+ ID_OUI_FROM_DATABASE=Alpine Quantum Technologies GmbH
+
 OUI:8C1F6447A*
  ID_OUI_FROM_DATABASE=Missing Link Electronics, Inc.
 
@@ -90272,6 +93491,12 @@
 OUI:8C1F644AC*
  ID_OUI_FROM_DATABASE=Vekto
 
+OUI:8C1F644AE*
+ ID_OUI_FROM_DATABASE=KCS Co., Ltd.
+
+OUI:8C1F644AF*
+ ID_OUI_FROM_DATABASE=miniDSP
+
 OUI:8C1F644B0*
  ID_OUI_FROM_DATABASE=U -MEI-DAH INT'L ENTERPRISE CO.,LTD.
 
@@ -90296,6 +93521,9 @@
 OUI:8C1F644DB*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:8C1F644DC*
+ ID_OUI_FROM_DATABASE=BESO sp. z o.o.
+
 OUI:8C1F644DD*
  ID_OUI_FROM_DATABASE=Griffyn Robotech Private Limited
 
@@ -90305,30 +93533,54 @@
 OUI:8C1F644E5*
  ID_OUI_FROM_DATABASE=Renukas Castle Hard- and Software
 
+OUI:8C1F644E7*
+ ID_OUI_FROM_DATABASE=Circuit Solutions
+
+OUI:8C1F644E9*
+ ID_OUI_FROM_DATABASE=EERS GLOBAL TECHNOLOGIES INC.
+
 OUI:8C1F644EC*
  ID_OUI_FROM_DATABASE=XOR UK Corporation Limited
 
 OUI:8C1F644F0*
  ID_OUI_FROM_DATABASE=Tieline Research Pty Ltd
 
+OUI:8C1F644F7*
+ ID_OUI_FROM_DATABASE=SmartD Technologies Inc
+
+OUI:8C1F644F9*
+ ID_OUI_FROM_DATABASE=Photonic Science and Engineering Ltd
+
 OUI:8C1F644FA*
  ID_OUI_FROM_DATABASE=Sanskruti
 
+OUI:8C1F644FB*
+ ID_OUI_FROM_DATABASE=MESA TECHNOLOGIES LLC
+
 OUI:8C1F64504*
  ID_OUI_FROM_DATABASE=EA Elektroautomatik GmbH & Co. KG
 
 OUI:8C1F6450A*
  ID_OUI_FROM_DATABASE=BELLCO TRADING COMPANY (PVT) LTD
 
+OUI:8C1F6450E*
+ ID_OUI_FROM_DATABASE=Panoramic Power
+
 OUI:8C1F64510*
  ID_OUI_FROM_DATABASE=Novanta Corp / Novanta IMS
 
+OUI:8C1F64511*
+ ID_OUI_FROM_DATABASE=Control Aut Tecnologia em Automação LTDA
+
 OUI:8C1F64512*
  ID_OUI_FROM_DATABASE=Blik Sensing B.V.
 
 OUI:8C1F64517*
  ID_OUI_FROM_DATABASE=Smart Radar System, Inc
 
+OUI:8C1F64518*
+ ID_OUI_FROM_DATABASE=Wagner Group GmbH
+
 OUI:8C1F64521*
  ID_OUI_FROM_DATABASE=MP-SENSOR GmbH
 
@@ -90338,6 +93590,9 @@
 OUI:8C1F6452D*
  ID_OUI_FROM_DATABASE=Cubic ITS, Inc. dba GRIDSMART Technologies
 
+OUI:8C1F6452E*
+ ID_OUI_FROM_DATABASE=CLOUD TELECOM Inc.
+
 OUI:8C1F64534*
  ID_OUI_FROM_DATABASE=SURYA ELECTRONICS
 
@@ -90362,30 +93617,51 @@
 OUI:8C1F64542*
  ID_OUI_FROM_DATABASE=Landis+Gyr Equipamentos de Medição Ltda
 
+OUI:8C1F64544*
+ ID_OUI_FROM_DATABASE=Tinkerbee Innovations Private Limited
+
 OUI:8C1F64549*
  ID_OUI_FROM_DATABASE=Brad Technology
 
+OUI:8C1F6454A*
+ ID_OUI_FROM_DATABASE=Belden India Private Limited
+
 OUI:8C1F6454C*
  ID_OUI_FROM_DATABASE=Gemini Electronics B.V.
 
 OUI:8C1F6454F*
  ID_OUI_FROM_DATABASE=Toolplanet Co., Ltd.
 
+OUI:8C1F64550*
+ ID_OUI_FROM_DATABASE=ard sa
+
 OUI:8C1F64552*
  ID_OUI_FROM_DATABASE=Proterra, Inc
 
+OUI:8C1F64553*
+ ID_OUI_FROM_DATABASE=ENIGMA SOI Sp. z o.o.
+
+OUI:8C1F64556*
+ ID_OUI_FROM_DATABASE=BAE Systems
+
 OUI:8C1F64557*
  ID_OUI_FROM_DATABASE=In-lite Design BV
 
 OUI:8C1F6455E*
  ID_OUI_FROM_DATABASE=HANATEKSYSTEM
 
+OUI:8C1F6456C*
+ ID_OUI_FROM_DATABASE=ELTEK SpA
+
 OUI:8C1F6456D*
  ID_OUI_FROM_DATABASE=ACOD
 
 OUI:8C1F64572*
  ID_OUI_FROM_DATABASE=ZMBIZI APP LLC
 
+OUI:8C1F64573*
+ ID_OUI_FROM_DATABASE=Ingenious Technology LLC
+
 OUI:8C1F64575*
  ID_OUI_FROM_DATABASE=Yu-Heng Electric Co., LTD
 
@@ -90398,6 +93674,24 @@
 OUI:8C1F64581*
  ID_OUI_FROM_DATABASE=SpectraDynamics, Inc.
 
+OUI:8C1F6458C*
+ ID_OUI_FROM_DATABASE=Ear Micro LLC
+
+OUI:8C1F6458E*
+ ID_OUI_FROM_DATABASE=Novanta IMS
+
+OUI:8C1F64591*
+ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+
+OUI:8C1F64593*
+ ID_OUI_FROM_DATABASE=Brillian Network & Automation Integrated System Co., Ltd.
+
+OUI:8C1F64596*
+ ID_OUI_FROM_DATABASE=RF Code
+
+OUI:8C1F6459A*
+ ID_OUI_FROM_DATABASE=Primalucelab isrl
+
 OUI:8C1F6459F*
  ID_OUI_FROM_DATABASE=Delta Computers LLC.
 
@@ -90407,21 +93701,60 @@
 OUI:8C1F645AE*
  ID_OUI_FROM_DATABASE=Suzhou Motorcomm Electronic Technology Co., Ltd
 
+OUI:8C1F645AF*
+ ID_OUI_FROM_DATABASE=Teq Diligent Product Solutions Pvt. Ltd.
+
 OUI:8C1F645B3*
  ID_OUI_FROM_DATABASE=eumig industrie-TV GmbH.
 
 OUI:8C1F645BC*
  ID_OUI_FROM_DATABASE=HEITEC AG
 
+OUI:8C1F645C9*
+ ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
+
+OUI:8C1F645CB*
+ ID_OUI_FROM_DATABASE=dinosys
+
+OUI:8C1F645CE*
+ ID_OUI_FROM_DATABASE=Packetalk LLC
+
 OUI:8C1F645D3*
  ID_OUI_FROM_DATABASE=Eloy Water
 
+OUI:8C1F645D6*
+ ID_OUI_FROM_DATABASE=Portrait Displays, Inc.
+
+OUI:8C1F645DA*
+ ID_OUI_FROM_DATABASE=White2net srl
+
+OUI:8C1F645DB*
+ ID_OUI_FROM_DATABASE=GlobalInvacom
+
+OUI:8C1F645E3*
+ ID_OUI_FROM_DATABASE=Nixer Ltd
+
 OUI:8C1F645E5*
  ID_OUI_FROM_DATABASE=Telemetrics Inc.
 
+OUI:8C1F645E7*
+ ID_OUI_FROM_DATABASE=HOSCH Gebäude Automation Neue Produkte GmbH
+
+OUI:8C1F645EA*
+ ID_OUI_FROM_DATABASE=BTG Instruments AB
+
+OUI:8C1F645EB*
+ ID_OUI_FROM_DATABASE=TIAMA
+
 OUI:8C1F645F5*
  ID_OUI_FROM_DATABASE=HongSeok Ltd.
 
+OUI:8C1F645F7*
+ ID_OUI_FROM_DATABASE=Eagle Harbor Technologies, Inc.
+
+OUI:8C1F645FA*
+ ID_OUI_FROM_DATABASE=PolCam Systems Sp. z o.o.
+
 OUI:8C1F64600*
  ID_OUI_FROM_DATABASE=Anhui Chaokun Testing Equipment Co., Ltd
 
@@ -90437,12 +93770,18 @@
 OUI:8C1F6460E*
  ID_OUI_FROM_DATABASE=ICT International
 
+OUI:8C1F64610*
+ ID_OUI_FROM_DATABASE=Beijing Zhongzhi Huida Technology Co., Ltd
+
 OUI:8C1F64611*
  ID_OUI_FROM_DATABASE=Siemens Industry Software Inc.
 
 OUI:8C1F64619*
  ID_OUI_FROM_DATABASE=Labtrino AB
 
+OUI:8C1F6461C*
+ ID_OUI_FROM_DATABASE=Automata GmbH & Co. KG
+
 OUI:8C1F6461F*
  ID_OUI_FROM_DATABASE=Lightworks GmbH
 
@@ -90452,63 +93791,117 @@
 OUI:8C1F64625*
  ID_OUI_FROM_DATABASE=Stresstech OY
 
+OUI:8C1F64626*
+ ID_OUI_FROM_DATABASE=CSIRO
+
+OUI:8C1F6462D*
+ ID_OUI_FROM_DATABASE=Embeddded Plus Plus
+
 OUI:8C1F64634*
  ID_OUI_FROM_DATABASE=AML
 
+OUI:8C1F64636*
+ ID_OUI_FROM_DATABASE=Europe Trade
+
 OUI:8C1F64638*
  ID_OUI_FROM_DATABASE=THUNDER DATA TAIWAN CO., LTD.
 
 OUI:8C1F6463B*
  ID_OUI_FROM_DATABASE=TIAMA
 
+OUI:8C1F6463F*
+ ID_OUI_FROM_DATABASE=PREO INDUSTRIES FAR EAST LTD
+
 OUI:8C1F64641*
  ID_OUI_FROM_DATABASE=biosilver .co.,ltd
 
 OUI:8C1F64647*
  ID_OUI_FROM_DATABASE=Senior Group LLC
 
+OUI:8C1F6464E*
+ ID_OUI_FROM_DATABASE=Nilfisk Food
+
 OUI:8C1F64650*
  ID_OUI_FROM_DATABASE=L tec Co.,Ltd
 
+OUI:8C1F64653*
+ ID_OUI_FROM_DATABASE=P5
+
 OUI:8C1F64655*
  ID_OUI_FROM_DATABASE=S.E.I. CO.,LTD.
 
 OUI:8C1F64656*
  ID_OUI_FROM_DATABASE=Optotune Switzerland AG
 
+OUI:8C1F6465D*
+ ID_OUI_FROM_DATABASE=Action Streamer LLC
+
 OUI:8C1F6465F*
  ID_OUI_FROM_DATABASE=Astrometric Instruments, Inc.
 
 OUI:8C1F64660*
  ID_OUI_FROM_DATABASE=LLC NTPC
 
+OUI:8C1F64662*
+ ID_OUI_FROM_DATABASE=Suzhou Leamore Optronics Co., Ltd.
+
 OUI:8C1F64663*
  ID_OUI_FROM_DATABASE=mal-tech Technological Solutions Ltd/CRISP
 
 OUI:8C1F6466C*
  ID_OUI_FROM_DATABASE=LINEAGE POWER PVT LTD.,
 
+OUI:8C1F6466D*
+ ID_OUI_FROM_DATABASE=VT100 SRL
+
+OUI:8C1F6466F*
+ ID_OUI_FROM_DATABASE=Elix Systems SA
+
 OUI:8C1F64672*
  ID_OUI_FROM_DATABASE=Farmobile LLC
 
 OUI:8C1F64675*
  ID_OUI_FROM_DATABASE=Transit Solutions, LLC.
 
+OUI:8C1F64676*
+ ID_OUI_FROM_DATABASE=sdt.net AG
+
 OUI:8C1F6467A*
  ID_OUI_FROM_DATABASE=MG s.r.l.
 
+OUI:8C1F6467C*
+ ID_OUI_FROM_DATABASE=Ensto Protrol AB
+
 OUI:8C1F6467F*
  ID_OUI_FROM_DATABASE=Hamamatsu Photonics K.K.
 
 OUI:8C1F64683*
  ID_OUI_FROM_DATABASE=SLAT
 
+OUI:8C1F64685*
+ ID_OUI_FROM_DATABASE=Sanchar Communication Systems
+
+OUI:8C1F64691*
+ ID_OUI_FROM_DATABASE=Wende Tan
+
+OUI:8C1F64692*
+ ID_OUI_FROM_DATABASE=Nexilis Electronics India Pvt Ltd (PICSYS)
+
 OUI:8C1F64697*
  ID_OUI_FROM_DATABASE=Sontay Ltd.
 
+OUI:8C1F64698*
+ ID_OUI_FROM_DATABASE=Arcus-EDS GmbH
+
+OUI:8C1F64699*
+ ID_OUI_FROM_DATABASE=FIDICA GmbH & Co. KG
+
 OUI:8C1F6469E*
  ID_OUI_FROM_DATABASE=AT-Automation Technology GmbH
 
+OUI:8C1F646A0*
+ ID_OUI_FROM_DATABASE=Avionica
+
 OUI:8C1F646A8*
  ID_OUI_FROM_DATABASE=Bulwark
 
@@ -90518,6 +93911,9 @@
 OUI:8C1F646AE*
  ID_OUI_FROM_DATABASE=Bray International
 
+OUI:8C1F646B1*
+ ID_OUI_FROM_DATABASE=Specialist Mechanical Engineers (PTY)LTD
+
 OUI:8C1F646B3*
  ID_OUI_FROM_DATABASE=Feritech Ltd.
 
@@ -90527,21 +93923,45 @@
 OUI:8C1F646B9*
  ID_OUI_FROM_DATABASE=GS Industrie-Elektronik GmbH
 
+OUI:8C1F646BB*
+ ID_OUI_FROM_DATABASE=Season Electronics Ltd
+
 OUI:8C1F646C6*
  ID_OUI_FROM_DATABASE=FIT
 
+OUI:8C1F646CB*
+ ID_OUI_FROM_DATABASE=GJD Manufacturing
+
 OUI:8C1F646CD*
  ID_OUI_FROM_DATABASE=Wuhan Xingtuxinke ELectronic Co.,Ltd
 
 OUI:8C1F646CF*
  ID_OUI_FROM_DATABASE=Italora
 
+OUI:8C1F646D0*
+ ID_OUI_FROM_DATABASE=ABB
+
+OUI:8C1F646D5*
+ ID_OUI_FROM_DATABASE=HTK Hamburg GmbH
+
+OUI:8C1F646D9*
+ ID_OUI_FROM_DATABASE=Khimo
+
+OUI:8C1F646E2*
+ ID_OUI_FROM_DATABASE=SCU Co., Ltd.
+
 OUI:8C1F646E3*
  ID_OUI_FROM_DATABASE=ViewSonic International Corporation
 
+OUI:8C1F646E4*
+ ID_OUI_FROM_DATABASE=RAB Microfluidics R&D Company Ltd
+
 OUI:8C1F646EA*
  ID_OUI_FROM_DATABASE=KMtronic ltd
 
+OUI:8C1F646EC*
+ ID_OUI_FROM_DATABASE=Bit Trade One, Ltd.
+
 OUI:8C1F646F4*
  ID_OUI_FROM_DATABASE=Elsist Srl
 
@@ -90551,6 +93971,9 @@
 OUI:8C1F646FC*
  ID_OUI_FROM_DATABASE=HM Systems A/S
 
+OUI:8C1F64700*
+ ID_OUI_FROM_DATABASE=QUANTAFLOW
+
 OUI:8C1F64702*
  ID_OUI_FROM_DATABASE=AIDirections
 
@@ -90569,9 +93992,15 @@
 OUI:8C1F64712*
  ID_OUI_FROM_DATABASE=Nexion Data Systems P/L
 
+OUI:8C1F6471B*
+ ID_OUI_FROM_DATABASE=Adasky Ltd.
+
 OUI:8C1F64721*
  ID_OUI_FROM_DATABASE=M/S MILIND RAMACHANDRA RAJWADE
 
+OUI:8C1F64723*
+ ID_OUI_FROM_DATABASE=Celestica Inc.
+
 OUI:8C1F64726*
  ID_OUI_FROM_DATABASE=DAVE SRL
 
@@ -90581,9 +94010,21 @@
 OUI:8C1F6472C*
  ID_OUI_FROM_DATABASE=Antai technology Co.,Ltd
 
+OUI:8C1F64731*
+ ID_OUI_FROM_DATABASE=ehoosys Co.,LTD.
+
+OUI:8C1F64733*
+ ID_OUI_FROM_DATABASE=Video Network Security
+
 OUI:8C1F64737*
  ID_OUI_FROM_DATABASE=Vytahy-Vymyslicky s.r.o.
 
+OUI:8C1F64739*
+ ID_OUI_FROM_DATABASE=Monnit Corporation
+
+OUI:8C1F6473B*
+ ID_OUI_FROM_DATABASE=Fink Zeitsysteme GmbH
+
 OUI:8C1F6473C*
  ID_OUI_FROM_DATABASE=REO AG
 
@@ -90593,15 +94034,27 @@
 OUI:8C1F6473F*
  ID_OUI_FROM_DATABASE=UBISCALE
 
+OUI:8C1F64740*
+ ID_OUI_FROM_DATABASE=Norvento Tecnología, S.L.
+
+OUI:8C1F64744*
+ ID_OUI_FROM_DATABASE=CHASEO CONNECTOME
+
 OUI:8C1F64746*
  ID_OUI_FROM_DATABASE=Sensus Healthcare
 
 OUI:8C1F64747*
  ID_OUI_FROM_DATABASE=VisionTIR Multispectral Technology
 
+OUI:8C1F64756*
+ ID_OUI_FROM_DATABASE=Star Systems International Limited
+
 OUI:8C1F6475F*
  ID_OUI_FROM_DATABASE=ASTRACOM Co. Ltd
 
+OUI:8C1F64764*
+ ID_OUI_FROM_DATABASE=nanoTRONIX Computing Inc.
+
 OUI:8C1F64765*
  ID_OUI_FROM_DATABASE=Micro Electroninc Products
 
@@ -90614,6 +94067,9 @@
 OUI:8C1F64775*
  ID_OUI_FROM_DATABASE=Becton Dickinson
 
+OUI:8C1F6477B*
+ ID_OUI_FROM_DATABASE=DB SAS
+
 OUI:8C1F6477C*
  ID_OUI_FROM_DATABASE=Orange Tree Technologies Ltd
 
@@ -90629,6 +94085,15 @@
 OUI:8C1F64787*
  ID_OUI_FROM_DATABASE=Tabology
 
+OUI:8C1F6478F*
+ ID_OUI_FROM_DATABASE=Connection Systems
+
+OUI:8C1F64793*
+ ID_OUI_FROM_DATABASE=Aditec GmbH
+
+OUI:8C1F6479B*
+ ID_OUI_FROM_DATABASE=Foerster-Technik GmbH
+
 OUI:8C1F6479D*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -90638,6 +94103,9 @@
 OUI:8C1F647A1*
  ID_OUI_FROM_DATABASE=Guardian Controls International Ltd
 
+OUI:8C1F647A4*
+ ID_OUI_FROM_DATABASE=Hirotech inc.
+
 OUI:8C1F647A6*
  ID_OUI_FROM_DATABASE=OTMetric
 
@@ -90650,6 +94118,15 @@
 OUI:8C1F647AF*
  ID_OUI_FROM_DATABASE=E VISION INDIA PVT LTD
 
+OUI:8C1F647B0*
+ ID_OUI_FROM_DATABASE=AXID SYSTEM
+
+OUI:8C1F647B5*
+ ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd.
+
+OUI:8C1F647B6*
+ ID_OUI_FROM_DATABASE=KEYLINE S.P.A.
+
 OUI:8C1F647B7*
  ID_OUI_FROM_DATABASE=Weidmann Tecnologia Electrica de Mexico
 
@@ -90659,6 +94136,9 @@
 OUI:8C1F647B9*
  ID_OUI_FROM_DATABASE=Deviceroy
 
+OUI:8C1F647BC*
+ ID_OUI_FROM_DATABASE=GO development GmbH
+
 OUI:8C1F647C8*
  ID_OUI_FROM_DATABASE=Jacquet Dechaume
 
@@ -90671,27 +94151,57 @@
 OUI:8C1F647D3*
  ID_OUI_FROM_DATABASE=Suntech Engineering
 
+OUI:8C1F647D4*
+ ID_OUI_FROM_DATABASE=Penteon Corporation
+
 OUI:8C1F647D6*
  ID_OUI_FROM_DATABASE=Algodue Elettronica Srl
 
+OUI:8C1F647D8*
+ ID_OUI_FROM_DATABASE=HIROSAWA ELECTRIC Co.,Ltd.
+
+OUI:8C1F647D9*
+ ID_OUI_FROM_DATABASE=Noisewave Corporation
+
+OUI:8C1F647DC*
+ ID_OUI_FROM_DATABASE=LINEAGE POWER PVT LTD.,
+
 OUI:8C1F647DD*
  ID_OUI_FROM_DATABASE=TAKASAKI KYODO COMPUTING CENTER Co.,LTD.
 
 OUI:8C1F647DE*
  ID_OUI_FROM_DATABASE=SOCNOC AI Inc
 
+OUI:8C1F647E0*
+ ID_OUI_FROM_DATABASE=Colombo Sales & Engineering, Inc.
+
+OUI:8C1F647E2*
+ ID_OUI_FROM_DATABASE=Aaronn Electronic GmbH
+
+OUI:8C1F647E7*
+ ID_OUI_FROM_DATABASE=robert juliat
+
 OUI:8C1F647EC*
  ID_OUI_FROM_DATABASE=Methods2Business B.V.
 
+OUI:8C1F647EE*
+ ID_OUI_FROM_DATABASE=Orange Precision Measurement LLC
+
 OUI:8C1F647F1*
  ID_OUI_FROM_DATABASE=AEM Singapore Pte Ltd
 
 OUI:8C1F64801*
  ID_OUI_FROM_DATABASE=Zhejiang Laolan Information Technology Co., Ltd
 
+OUI:8C1F64803*
+ ID_OUI_FROM_DATABASE=MOSCA Elektronik und Antriebstechnik GmbH
+
 OUI:8C1F64807*
  ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA
 
+OUI:8C1F64811*
+ ID_OUI_FROM_DATABASE=Panoramic Power
+
 OUI:8C1F64817*
  ID_OUI_FROM_DATABASE=nke marine electronics
 
@@ -90701,8 +94211,14 @@
 OUI:8C1F64820*
  ID_OUI_FROM_DATABASE=TIAMA
 
+OUI:8C1F64825*
+ ID_OUI_FROM_DATABASE=MTU Aero Engines AG
+
+OUI:8C1F64830*
+ ID_OUI_FROM_DATABASE=Vtron Pty Ltd
+
 OUI:8C1F64837*
- ID_OUI_FROM_DATABASE=Rumble, Inc
+ ID_OUI_FROM_DATABASE=runZero, Inc
 
 OUI:8C1F6483A*
  ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
@@ -90710,15 +94226,30 @@
 OUI:8C1F6483C*
  ID_OUI_FROM_DATABASE=Xtend Technologies Pvt Ltd
 
+OUI:8C1F6483D*
+ ID_OUI_FROM_DATABASE=L-signature
+
+OUI:8C1F6483E*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
+OUI:8C1F64842*
+ ID_OUI_FROM_DATABASE=Potter Electric Signal Co. LLC
+
 OUI:8C1F64848*
  ID_OUI_FROM_DATABASE=Jena-Optronik GmbH
 
+OUI:8C1F6484A*
+ ID_OUI_FROM_DATABASE=Bitmapper Integration Technologies Private Limited
+
 OUI:8C1F6484C*
  ID_OUI_FROM_DATABASE=AvMap srlu
 
 OUI:8C1F6484E*
  ID_OUI_FROM_DATABASE=West Pharmaceutical Services, Inc.
 
+OUI:8C1F64852*
+ ID_OUI_FROM_DATABASE=ABB
+
 OUI:8C1F64855*
  ID_OUI_FROM_DATABASE=e.kundenservice Netz GmbH
 
@@ -90728,18 +94259,42 @@
 OUI:8C1F6485B*
  ID_OUI_FROM_DATABASE=Atlantic Pumps Ltd
 
+OUI:8C1F64867*
+ ID_OUI_FROM_DATABASE=Forever Engineering Systems Pvt. Ltd.
+
+OUI:8C1F6486A*
+ ID_OUI_FROM_DATABASE=VisionTools Bildanalyse Systeme GmbH
+
 OUI:8C1F64878*
  ID_OUI_FROM_DATABASE=Green Access Ltd
 
+OUI:8C1F64879*
+ ID_OUI_FROM_DATABASE=ASHIDA Electronics Pvt. Ltd
+
+OUI:8C1F64882*
+ ID_OUI_FROM_DATABASE=TMY TECHNOLOGY INC.
+
 OUI:8C1F64883*
  ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
 
+OUI:8C1F6488B*
+ ID_OUI_FROM_DATABASE=Taiwan Aulisa Medical Devices Technologies, Inc
+
 OUI:8C1F6488D*
  ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd
 
+OUI:8C1F6488E*
+ ID_OUI_FROM_DATABASE=CubeWorks, Inc.
+
+OUI:8C1F64890*
+ ID_OUI_FROM_DATABASE=WonATech Co., Ltd.
+
 OUI:8C1F64892*
  ID_OUI_FROM_DATABASE=MDI Industrial
 
+OUI:8C1F64895*
+ ID_OUI_FROM_DATABASE=Dacom West GmbH
+
 OUI:8C1F6489E*
  ID_OUI_FROM_DATABASE=Cinetix Srl
 
@@ -90764,6 +94319,9 @@
 OUI:8C1F648B5*
  ID_OUI_FROM_DATABASE=Ashton Bentley Collaboration Spaces
 
+OUI:8C1F648B9*
+ ID_OUI_FROM_DATABASE=Zynex Monitoring Solutions
+
 OUI:8C1F648C2*
  ID_OUI_FROM_DATABASE=Cirrus Systems, Inc.
 
@@ -90776,24 +94334,54 @@
 OUI:8C1F648CF*
  ID_OUI_FROM_DATABASE=Diffraction Limited
 
+OUI:8C1F648D0*
+ ID_OUI_FROM_DATABASE=Enerthing GmbH
+
 OUI:8C1F648D1*
  ID_OUI_FROM_DATABASE=Orlaco Products B.V.
 
 OUI:8C1F648D4*
  ID_OUI_FROM_DATABASE=Recab Sweden AB
 
+OUI:8C1F648D5*
+ ID_OUI_FROM_DATABASE=Agramkow A/S
+
 OUI:8C1F648D9*
  ID_OUI_FROM_DATABASE=Pietro Fiorentini Spa
 
+OUI:8C1F648DA*
+ ID_OUI_FROM_DATABASE=Dart Systems Ltd
+
+OUI:8C1F648DE*
+ ID_OUI_FROM_DATABASE=Iconet Services
+
+OUI:8C1F648DF*
+ ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
+
 OUI:8C1F648E2*
  ID_OUI_FROM_DATABASE=ALPHA Corporation
 
+OUI:8C1F648E3*
+ ID_OUI_FROM_DATABASE=UniTik Technology Co., Limited
+
+OUI:8C1F648E5*
+ ID_OUI_FROM_DATABASE=Druck Ltd.
+
 OUI:8C1F648E9*
  ID_OUI_FROM_DATABASE=Vesperix Corporation
 
+OUI:8C1F648EB*
+ ID_OUI_FROM_DATABASE=Numa Products LLC
+
 OUI:8C1F648EE*
  ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
 
+OUI:8C1F648F4*
+ ID_OUI_FROM_DATABASE=Loadrite (Auckland) Limited
+
+OUI:8C1F648F6*
+ ID_OUI_FROM_DATABASE=Idneo Technologies S.A.U.
+
 OUI:8C1F648F8*
  ID_OUI_FROM_DATABASE=HIGHVOLT Prüftechnik
 
@@ -90803,33 +94391,60 @@
 OUI:8C1F64905*
  ID_OUI_FROM_DATABASE=Qualitrol LLC
 
+OUI:8C1F64907*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
 OUI:8C1F64909*
  ID_OUI_FROM_DATABASE=MATELEX
 
+OUI:8C1F6490C*
+ ID_OUI_FROM_DATABASE=Cool Air Incorporated
+
+OUI:8C1F6490D*
+ ID_OUI_FROM_DATABASE=Algodue Elettronica Srl
+
 OUI:8C1F6490E*
  ID_OUI_FROM_DATABASE=Xacti Corporation
 
+OUI:8C1F6490F*
+ ID_OUI_FROM_DATABASE=BELIMO Automation AG
+
 OUI:8C1F64911*
  ID_OUI_FROM_DATABASE=EOLANE
 
 OUI:8C1F64918*
  ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
 
+OUI:8C1F6491A*
+ ID_OUI_FROM_DATABASE=Profcon AB
+
+OUI:8C1F6491D*
+ ID_OUI_FROM_DATABASE=enlighten
+
 OUI:8C1F64923*
  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
 
+OUI:8C1F64928*
+ ID_OUI_FROM_DATABASE=ITG Co.Ltd
+
 OUI:8C1F6492A*
  ID_OUI_FROM_DATABASE=Thermo Onix Ltd
 
 OUI:8C1F6492D*
  ID_OUI_FROM_DATABASE=IVOR Intelligent Electrical Appliance Co., Ltd
 
+OUI:8C1F64931*
+ ID_OUI_FROM_DATABASE=Noptel Oy
+
 OUI:8C1F64939*
  ID_OUI_FROM_DATABASE=SPIT Technology, Inc
 
 OUI:8C1F64943*
  ID_OUI_FROM_DATABASE=Autark GmbH
 
+OUI:8C1F64946*
+ ID_OUI_FROM_DATABASE=UniJet Co., Ltd.
+
 OUI:8C1F64947*
  ID_OUI_FROM_DATABASE=LLC TC Vympel
 
@@ -90851,42 +94466,87 @@
 OUI:8C1F6495A*
  ID_OUI_FROM_DATABASE=Shenzhen Longyun Lighting Electric Appliances Co., Ltd
 
+OUI:8C1F64963*
+ ID_OUI_FROM_DATABASE=Gogo Business Aviation
+
 OUI:8C1F64967*
  ID_OUI_FROM_DATABASE=DAVE SRL
 
+OUI:8C1F64968*
+ ID_OUI_FROM_DATABASE=IAV ENGINEERING SARL
+
 OUI:8C1F64971*
  ID_OUI_FROM_DATABASE=INFRASAFE/ ADVANTOR SYSTEMS
 
 OUI:8C1F64973*
  ID_OUI_FROM_DATABASE=Dorsett Technologies Inc
 
+OUI:8C1F64978*
+ ID_OUI_FROM_DATABASE=Planet Innovation Products Inc.
+
 OUI:8C1F6497C*
  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
 
+OUI:8C1F6497D*
+ ID_OUI_FROM_DATABASE=KSE GmbH
+
+OUI:8C1F6497F*
+ ID_OUI_FROM_DATABASE=Talleres de Escoriaza SA
+
 OUI:8C1F64984*
  ID_OUI_FROM_DATABASE=Abacus Peripherals Pvt Ltd
 
+OUI:8C1F6498F*
+ ID_OUI_FROM_DATABASE=Breas Medical AB
+
 OUI:8C1F64991*
  ID_OUI_FROM_DATABASE=DB Systel GmbH
 
 OUI:8C1F64998*
  ID_OUI_FROM_DATABASE=EVLO Stockage Énergie
 
+OUI:8C1F6499E*
+ ID_OUI_FROM_DATABASE=EIDOS s.r.l.
+
+OUI:8C1F649A4*
+ ID_OUI_FROM_DATABASE=LabLogic Systems
+
 OUI:8C1F649A6*
  ID_OUI_FROM_DATABASE=INSTITUTO DE GESTÃO, REDES TECNOLÓGICAS E NERGIAS
 
+OUI:8C1F649AB*
+ ID_OUI_FROM_DATABASE=DAVE SRL
+
+OUI:8C1F649B2*
+ ID_OUI_FROM_DATABASE=Emerson Rosemount Analytical
+
+OUI:8C1F649B3*
+ ID_OUI_FROM_DATABASE=Böckelt GmbH
+
+OUI:8C1F649B6*
+ ID_OUI_FROM_DATABASE=GS Elektromedizinsiche Geräte G. Stemple GmbH
+
 OUI:8C1F649BA*
  ID_OUI_FROM_DATABASE=WINTUS SYSTEM
 
 OUI:8C1F649BD*
  ID_OUI_FROM_DATABASE=ATM SOLUTIONS
 
+OUI:8C1F649BF*
+ ID_OUI_FROM_DATABASE=ArgusEye TECH. INC
+
+OUI:8C1F649C0*
+ ID_OUI_FROM_DATABASE=Header Rhyme
+
 OUI:8C1F649C1*
  ID_OUI_FROM_DATABASE=RealWear
 
 OUI:8C1F649C3*
  ID_OUI_FROM_DATABASE=Camozzi Automation SpA
 
+OUI:8C1F649CB*
+ ID_OUI_FROM_DATABASE=Shanghai Sizhong Information Technology Co., Ltd
+
 OUI:8C1F649CE*
  ID_OUI_FROM_DATABASE=Exi Flow Measurement Ltd
 
@@ -90899,27 +94559,54 @@
 OUI:8C1F649D8*
  ID_OUI_FROM_DATABASE=Integer.pl S.A.
 
+OUI:8C1F649E2*
+ ID_OUI_FROM_DATABASE=Technology for Energy Corp
+
+OUI:8C1F649E8*
+ ID_OUI_FROM_DATABASE=GHM Messtechnik GmbH
+
 OUI:8C1F649F0*
  ID_OUI_FROM_DATABASE=ePlant, Inc.
 
 OUI:8C1F649F2*
  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
 
+OUI:8C1F649F4*
+ ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
+
+OUI:8C1F649F6*
+ ID_OUI_FROM_DATABASE=Vision Systems Safety Tech
+
 OUI:8C1F649FA*
  ID_OUI_FROM_DATABASE=METRONA-Union GmbH
 
+OUI:8C1F649FB*
+ ID_OUI_FROM_DATABASE=CI SYSTEMS ISRAEL LTD
+
 OUI:8C1F649FD*
  ID_OUI_FROM_DATABASE=Vishay Nobel AB
 
 OUI:8C1F649FE*
  ID_OUI_FROM_DATABASE=Metroval Controle de Fluidos Ltda
 
+OUI:8C1F649FF*
+ ID_OUI_FROM_DATABASE=Satelles Inc
+
+OUI:8C1F64A00*
+ ID_OUI_FROM_DATABASE=BITECHNIK GmbH
+
 OUI:8C1F64A01*
  ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd.
 
 OUI:8C1F64A07*
  ID_OUI_FROM_DATABASE=GJD Manufacturing
 
+OUI:8C1F64A0A*
+ ID_OUI_FROM_DATABASE=Shanghai Wise-Tech Intelligent Technology Co.,Ltd.
+
+OUI:8C1F64A0D*
+ ID_OUI_FROM_DATABASE=Lumiplan Duhamel
+
 OUI:8C1F64A1B*
  ID_OUI_FROM_DATABASE=Zilica Limited
 
@@ -90932,12 +94619,18 @@
 OUI:8C1F64A2D*
  ID_OUI_FROM_DATABASE=ACSL Ltd.
 
+OUI:8C1F64A31*
+ ID_OUI_FROM_DATABASE=Zing Communications Inc
+
 OUI:8C1F64A32*
  ID_OUI_FROM_DATABASE=Nautel LTD
 
 OUI:8C1F64A38*
  ID_OUI_FROM_DATABASE=NuGrid Power
 
+OUI:8C1F64A3B*
+ ID_OUI_FROM_DATABASE=Fujian Satlink Electronics Co., Ltd
+
 OUI:8C1F64A42*
  ID_OUI_FROM_DATABASE=Rodgers Instruments US LLC
 
@@ -90950,6 +94643,12 @@
 OUI:8C1F64A4E*
  ID_OUI_FROM_DATABASE=Syscom Instruments SA
 
+OUI:8C1F64A51*
+ ID_OUI_FROM_DATABASE=BABTEL
+
+OUI:8C1F64A56*
+ ID_OUI_FROM_DATABASE=Flextronics International Kft.
+
 OUI:8C1F64A57*
  ID_OUI_FROM_DATABASE=EkspertStroyProekt
 
@@ -90959,6 +94658,12 @@
 OUI:8C1F64A5D*
  ID_OUI_FROM_DATABASE=Shenzhen zhushida Technology lnformation Co.,Ltd
 
+OUI:8C1F64A5E*
+ ID_OUI_FROM_DATABASE=XTIA Ltd.
+
+OUI:8C1F64A60*
+ ID_OUI_FROM_DATABASE=Active Optical Systems, LLC
+
 OUI:8C1F64A6A*
  ID_OUI_FROM_DATABASE=Sphere Com Services Pvt Ltd
 
@@ -90968,6 +94673,15 @@
 OUI:8C1F64A76*
  ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
 
+OUI:8C1F64A77*
+ ID_OUI_FROM_DATABASE=Rax-Tech International
+
+OUI:8C1F64A81*
+ ID_OUI_FROM_DATABASE=3D perception AS
+
+OUI:8C1F64A83*
+ ID_OUI_FROM_DATABASE=EkspertStroyProekt
+
 OUI:8C1F64A84*
  ID_OUI_FROM_DATABASE=Beijing Wenrise Technology Co., Ltd.
 
@@ -90980,9 +94694,21 @@
 OUI:8C1F64A9A*
  ID_OUI_FROM_DATABASE=Signasystems Elektronik San. ve Tic. Ltd. Sti.
 
+OUI:8C1F64A9C*
+ ID_OUI_FROM_DATABASE=Upstart Power
+
+OUI:8C1F64A9E*
+ ID_OUI_FROM_DATABASE=Optimum Instruments Inc.
+
+OUI:8C1F64AA3*
+ ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG
+
 OUI:8C1F64AA4*
  ID_OUI_FROM_DATABASE=HEINEN ELEKTRONIK GmbH
 
+OUI:8C1F64AA8*
+ ID_OUI_FROM_DATABASE=axelife
+
 OUI:8C1F64AAB*
  ID_OUI_FROM_DATABASE=BlueSword Intelligent Technology Co., Ltd.
 
@@ -90992,12 +94718,24 @@
 OUI:8C1F64AB5*
  ID_OUI_FROM_DATABASE=JUSTMORPH PTE. LTD.
 
+OUI:8C1F64AB7*
+ ID_OUI_FROM_DATABASE=MClavis Co.,Ltd.
+
 OUI:8C1F64AC0*
  ID_OUI_FROM_DATABASE=AIQuatro
 
+OUI:8C1F64AC3*
+ ID_OUI_FROM_DATABASE=WAVES SYSTEM
+
+OUI:8C1F64AC4*
+ ID_OUI_FROM_DATABASE=comelec
+
 OUI:8C1F64AC5*
  ID_OUI_FROM_DATABASE=Forever Engineering Systems Pvt. Ltd.
 
+OUI:8C1F64AC9*
+ ID_OUI_FROM_DATABASE=ShenYang LeShun Technology Co.,Ltd
+
 OUI:8C1F64ACE*
  ID_OUI_FROM_DATABASE=Rayhaan Networks
 
@@ -91010,30 +94748,60 @@
 OUI:8C1F64AE8*
  ID_OUI_FROM_DATABASE=ADETEC SAS
 
+OUI:8C1F64AEA*
+ ID_OUI_FROM_DATABASE=INHEMETER Co.,Ltd
+
 OUI:8C1F64AED*
  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
 
 OUI:8C1F64AEF*
  ID_OUI_FROM_DATABASE=Scenario Automation
 
+OUI:8C1F64AF0*
+ ID_OUI_FROM_DATABASE=MinebeaMitsumi Inc.
+
+OUI:8C1F64AF5*
+ ID_OUI_FROM_DATABASE=SANMINA ISRAEL MEDICAL SYSTEMS LTD
+
 OUI:8C1F64AF7*
  ID_OUI_FROM_DATABASE=ard sa
 
+OUI:8C1F64AFD*
+ ID_OUI_FROM_DATABASE=Universal Robots A/S
+
+OUI:8C1F64AFF*
+ ID_OUI_FROM_DATABASE=Qtechnology A/S
+
 OUI:8C1F64B01*
  ID_OUI_FROM_DATABASE=noah
 
 OUI:8C1F64B03*
  ID_OUI_FROM_DATABASE=Shenzhen Pisoftware Technology Co.,Ltd.
 
+OUI:8C1F64B08*
+ ID_OUI_FROM_DATABASE=Cronus Electronics
+
 OUI:8C1F64B0C*
  ID_OUI_FROM_DATABASE=Barkodes Bilgisayar Sistemleri Bilgi Iletisim ve Y
 
+OUI:8C1F64B0F*
+ ID_OUI_FROM_DATABASE=HKC Security Ltd.
+
 OUI:8C1F64B10*
  ID_OUI_FROM_DATABASE=MTU Aero Engines AG
 
+OUI:8C1F64B13*
+ ID_OUI_FROM_DATABASE=Abode Systems Inc
+
+OUI:8C1F64B14*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing CO., Ltd.
+
 OUI:8C1F64B22*
  ID_OUI_FROM_DATABASE=BLIGHTER SURVEILLANCE SYSTEMS LTD
 
+OUI:8C1F64B2B*
+ ID_OUI_FROM_DATABASE=Rhombus Europe
+
 OUI:8C1F64B2C*
  ID_OUI_FROM_DATABASE=SANMINA ISRAEL MEDICAL SYSTEMS LTD
 
@@ -91049,12 +94817,27 @@
 OUI:8C1F64B4C*
  ID_OUI_FROM_DATABASE=Picocom Technology Ltd
 
+OUI:8C1F64B55*
+ ID_OUI_FROM_DATABASE=Sanchar Telesystems limited
+
 OUI:8C1F64B56*
  ID_OUI_FROM_DATABASE=Arcvideo
 
 OUI:8C1F64B64*
  ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH
 
+OUI:8C1F64B65*
+ ID_OUI_FROM_DATABASE=HomyHub SL
+
+OUI:8C1F64B67*
+ ID_OUI_FROM_DATABASE=M2M craft Co., Ltd.
+
+OUI:8C1F64B69*
+ ID_OUI_FROM_DATABASE=Quanxing Tech Co.,LTD
+
+OUI:8C1F64B6E*
+ ID_OUI_FROM_DATABASE=Loop Technologies
+
 OUI:8C1F64B73*
  ID_OUI_FROM_DATABASE=Comm-ence, Inc.
 
@@ -91067,6 +94850,9 @@
 OUI:8C1F64B7C*
  ID_OUI_FROM_DATABASE=EVERNET CO,.LTD TAIWAN
 
+OUI:8C1F64B7D*
+ ID_OUI_FROM_DATABASE=Scheurich GmbH
+
 OUI:8C1F64B82*
  ID_OUI_FROM_DATABASE=Seed Core Co., LTD.
 
@@ -91085,9 +94871,18 @@
 OUI:8C1F64B9A*
  ID_OUI_FROM_DATABASE=QUERCUS TECHNOLOGIES, S.L.
 
+OUI:8C1F64B9E*
+ ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+
 OUI:8C1F64BA3*
  ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
 
+OUI:8C1F64BB3*
+ ID_OUI_FROM_DATABASE=Zaruc Tecnologia LTDA
+
+OUI:8C1F64BBC*
+ ID_OUI_FROM_DATABASE=Liberator Pty Ltd
+
 OUI:8C1F64BBF*
  ID_OUI_FROM_DATABASE=Retency
 
@@ -91097,9 +94892,21 @@
 OUI:8C1F64BC2*
  ID_OUI_FROM_DATABASE=Huz Electronics Ltd
 
+OUI:8C1F64BC3*
+ ID_OUI_FROM_DATABASE=FoxIoT OÜ
+
 OUI:8C1F64BC6*
  ID_OUI_FROM_DATABASE=Chengdu ZiChen Time&Frequency Technology Co.,Ltd
 
+OUI:8C1F64BC9*
+ ID_OUI_FROM_DATABASE=GL TECH CO.,LTD
+
+OUI:8C1F64BCB*
+ ID_OUI_FROM_DATABASE=A&T Corporation
+
+OUI:8C1F64BCC*
+ ID_OUI_FROM_DATABASE=Sound Health Systems
+
 OUI:8C1F64BD3*
  ID_OUI_FROM_DATABASE=IO Master Technology
 
@@ -91109,12 +94916,24 @@
 OUI:8C1F64BD7*
  ID_OUI_FROM_DATABASE=Union Electronic.
 
+OUI:8C1F64BDB*
+ ID_OUI_FROM_DATABASE=Cardinal Scales Manufacturing Co
+
+OUI:8C1F64BE8*
+ ID_OUI_FROM_DATABASE=TECHNOLOGIES BACMOVE INC.
+
 OUI:8C1F64BEE*
  ID_OUI_FROM_DATABASE=Sirius LLC
 
 OUI:8C1F64BF0*
  ID_OUI_FROM_DATABASE=Newtec A/S
 
+OUI:8C1F64BF1*
+ ID_OUI_FROM_DATABASE=Soha Jin
+
+OUI:8C1F64BF3*
+ ID_OUI_FROM_DATABASE=Alphatek AS
+
 OUI:8C1F64BF4*
  ID_OUI_FROM_DATABASE=Fluid Components Intl
 
@@ -91127,9 +94946,30 @@
 OUI:8C1F64C03*
  ID_OUI_FROM_DATABASE=Abiman Engineering
 
+OUI:8C1F64C04*
+ ID_OUI_FROM_DATABASE=SANWA CORPORATION
+
+OUI:8C1F64C05*
+ ID_OUI_FROM_DATABASE=SkyCell AG
+
+OUI:8C1F64C06*
+ ID_OUI_FROM_DATABASE=Tardis Technology
+
+OUI:8C1F64C07*
+ ID_OUI_FROM_DATABASE=HYOSUNG Heavy Industries Corporation
+
 OUI:8C1F64C0C*
  ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA
 
+OUI:8C1F64C0E*
+ ID_OUI_FROM_DATABASE=Goodtech AS dep Fredrikstad
+
+OUI:8C1F64C12*
+ ID_OUI_FROM_DATABASE=PHYSEC GmbH
+
+OUI:8C1F64C1E*
+ ID_OUI_FROM_DATABASE=VA SYD
+
 OUI:8C1F64C1F*
  ID_OUI_FROM_DATABASE=Esys Srl
 
@@ -91145,6 +94985,9 @@
 OUI:8C1F64C2F*
  ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
 
+OUI:8C1F64C35*
+ ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG
+
 OUI:8C1F64C38*
  ID_OUI_FROM_DATABASE=ECO-ADAPT
 
@@ -91157,18 +95000,39 @@
 OUI:8C1F64C41*
  ID_OUI_FROM_DATABASE=Katronic AG & Co. KG
 
+OUI:8C1F64C44*
+ ID_OUI_FROM_DATABASE=Sypris Electronics
+
 OUI:8C1F64C4C*
  ID_OUI_FROM_DATABASE=Lumiplan Duhamel
 
 OUI:8C1F64C50*
  ID_OUI_FROM_DATABASE=Spacee
 
+OUI:8C1F64C51*
+ ID_OUI_FROM_DATABASE=EPC Energy Inc
+
+OUI:8C1F64C52*
+ ID_OUI_FROM_DATABASE=Invendis Technologies India Pvt Ltd
+
 OUI:8C1F64C54*
  ID_OUI_FROM_DATABASE=First Mode
 
 OUI:8C1F64C57*
  ID_OUI_FROM_DATABASE=Strategic Robotic Systems
 
+OUI:8C1F64C59*
+ ID_OUI_FROM_DATABASE=Tunstall A/S
+
+OUI:8C1F64C5D*
+ ID_OUI_FROM_DATABASE=Alfa Proxima d.o.o.
+
+OUI:8C1F64C61*
+ ID_OUI_FROM_DATABASE=Beijing Ceresdate Technology Co.,LTD
+
+OUI:8C1F64C64*
+ ID_OUI_FROM_DATABASE=Ajeco Oy
+
 OUI:8C1F64C68*
  ID_OUI_FROM_DATABASE=FIBERME COMMUNICATIONS LLC
 
@@ -91181,9 +95045,18 @@
 OUI:8C1F64C80*
  ID_OUI_FROM_DATABASE=VECOS Europe B.V.
 
+OUI:8C1F64C81*
+ ID_OUI_FROM_DATABASE=Taolink Technologies Corporation
+
+OUI:8C1F64C85*
+ ID_OUI_FROM_DATABASE=Potter Electric Signal Co. LLC
+
 OUI:8C1F64C8F*
  ID_OUI_FROM_DATABASE=JW Froehlich Maschinenfabrik GmbH
 
+OUI:8C1F64C91*
+ ID_OUI_FROM_DATABASE=Soehnle Industrial Solutions GmbH
+
 OUI:8C1F64C97*
  ID_OUI_FROM_DATABASE=Magnet-Physik Dr. Steingroever GmbH
 
@@ -91193,14 +95066,38 @@
 OUI:8C1F64CA6*
  ID_OUI_FROM_DATABASE=ReliaSpeak Information Technology Co., Ltd.
 
+OUI:8C1F64CAB*
+ ID_OUI_FROM_DATABASE=Spyder Controls Corp.
+
 OUI:8C1F64CAD*
  ID_OUI_FROM_DATABASE=General Motors
 
+OUI:8C1F64CAF*
+ ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
+
+OUI:8C1F64CB2*
+ ID_OUI_FROM_DATABASE=Dyncir Soluções Tecnológicas Ltda
+
+OUI:8C1F64CB5*
+ ID_OUI_FROM_DATABASE=Gamber-Johnson LLC
+
+OUI:8C1F64CB7*
+ ID_OUI_FROM_DATABASE=ARKRAY,Inc.Kyoto Laboratory
+
 OUI:8C1F64CBE*
  ID_OUI_FROM_DATABASE=Circa Enterprises Inc
 
+OUI:8C1F64CC1*
+ ID_OUI_FROM_DATABASE=VITREA Smart Home Technologies Ltd.
+
+OUI:8C1F64CC2*
+ ID_OUI_FROM_DATABASE=TOYOGIKEN CO.,LTD.
+
+OUI:8C1F64CC5*
+ ID_OUI_FROM_DATABASE=Potter Electric Signal Co. LLC
+
 OUI:8C1F64CC6*
- ID_OUI_FROM_DATABASE=Genius vision digital private limted
+ ID_OUI_FROM_DATABASE=Genius Vision Digital Private Limited
 
 OUI:8C1F64CCB*
  ID_OUI_FROM_DATABASE=suzhou yuecrown Electronic Technology Co.,LTD
@@ -91226,6 +95123,12 @@
 OUI:8C1F64CE3*
  ID_OUI_FROM_DATABASE=Pixel Design & Manufacturing Sdn. Bhd.
 
+OUI:8C1F64CE4*
+ ID_OUI_FROM_DATABASE=SL USA, LLC
+
+OUI:8C1F64CEB*
+ ID_OUI_FROM_DATABASE=EUREKA FOR SMART PROPERTIES CO. W.L.L
+
 OUI:8C1F64CEE*
  ID_OUI_FROM_DATABASE=DISPLAX S.A.
 
@@ -91238,6 +95141,15 @@
 OUI:8C1F64CF3*
  ID_OUI_FROM_DATABASE=ABB S.p.A.
 
+OUI:8C1F64CF4*
+ ID_OUI_FROM_DATABASE=NT
+
+OUI:8C1F64CF7*
+ ID_OUI_FROM_DATABASE=BusPas
+
+OUI:8C1F64CFA*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
 OUI:8C1F64D02*
  ID_OUI_FROM_DATABASE=Flextronics International Kft
 
@@ -91250,33 +95162,66 @@
 OUI:8C1F64D13*
  ID_OUI_FROM_DATABASE=EYatsko Individual
 
+OUI:8C1F64D20*
+ ID_OUI_FROM_DATABASE=NAS Engineering PRO
+
+OUI:8C1F64D21*
+ ID_OUI_FROM_DATABASE=AMETEK CTS GMBH
+
 OUI:8C1F64D29*
  ID_OUI_FROM_DATABASE=Secure Bits
 
+OUI:8C1F64D2A*
+ ID_OUI_FROM_DATABASE=Anteus Kft.
+
+OUI:8C1F64D3A*
+ ID_OUI_FROM_DATABASE=Applied Materials
+
 OUI:8C1F64D3C*
  ID_OUI_FROM_DATABASE=KIB Energo LLC
 
 OUI:8C1F64D40*
  ID_OUI_FROM_DATABASE=Breas Medical AB
 
+OUI:8C1F64D42*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
 OUI:8C1F64D44*
  ID_OUI_FROM_DATABASE=Monarch Instrument
 
+OUI:8C1F64D46*
+ ID_OUI_FROM_DATABASE=End 2 End Technologies
+
 OUI:8C1F64D4A*
  ID_OUI_FROM_DATABASE=Caproc Oy
 
+OUI:8C1F64D51*
+ ID_OUI_FROM_DATABASE=ZIGEN Lighting Solution co., ltd.
+
 OUI:8C1F64D52*
  ID_OUI_FROM_DATABASE=Critical Software SA
 
+OUI:8C1F64D53*
+ ID_OUI_FROM_DATABASE=Gridnt
+
 OUI:8C1F64D54*
  ID_OUI_FROM_DATABASE=Grupo Epelsa S.L.
 
 OUI:8C1F64D56*
  ID_OUI_FROM_DATABASE=Wisdom Audio
 
+OUI:8C1F64D5B*
+ ID_OUI_FROM_DATABASE=Local Security
+
+OUI:8C1F64D5E*
+ ID_OUI_FROM_DATABASE=Integer.pl S.A.
+
 OUI:8C1F64D69*
  ID_OUI_FROM_DATABASE=ADiCo Corporation
 
+OUI:8C1F64D73*
+ ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
+
 OUI:8C1F64D78*
  ID_OUI_FROM_DATABASE=Hunan Oushi Electronic Technology Co.,Ltd
 
@@ -91286,24 +95231,42 @@
 OUI:8C1F64D7E*
  ID_OUI_FROM_DATABASE=Thales Belgium
 
+OUI:8C1F64D7F*
+ ID_OUI_FROM_DATABASE=Fiberstory communications Pvt Ltd
+
 OUI:8C1F64D88*
  ID_OUI_FROM_DATABASE=University of Geneva - Department of Particle Physics
 
 OUI:8C1F64D92*
  ID_OUI_FROM_DATABASE=Mitsubishi Electric India Pvt. Ltd.
 
+OUI:8C1F64D98*
+ ID_OUI_FROM_DATABASE=Gnewtek photoelectric technology Ltd.
+
 OUI:8C1F64D9A*
  ID_OUI_FROM_DATABASE=Beijing Redlink Information Technology Co., Ltd.
 
+OUI:8C1F64D9C*
+ ID_OUI_FROM_DATABASE=Relcom, Inc.
+
+OUI:8C1F64DA6*
+ ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+
 OUI:8C1F64DAA*
  ID_OUI_FROM_DATABASE=Davetech Limited
 
 OUI:8C1F64DAE*
  ID_OUI_FROM_DATABASE=Mainco automotion s.l.
 
+OUI:8C1F64DAF*
+ ID_OUI_FROM_DATABASE=Zhuhai Lonl electric Co.,Ltd
+
 OUI:8C1F64DB5*
  ID_OUI_FROM_DATABASE=victtron
 
+OUI:8C1F64DB7*
+ ID_OUI_FROM_DATABASE=Lambda Systems Inc.
+
 OUI:8C1F64DB9*
  ID_OUI_FROM_DATABASE=Ermes Elettronica s.r.l.
 
@@ -91313,21 +95276,36 @@
 OUI:8C1F64DC0*
  ID_OUI_FROM_DATABASE=Pigs Can Fly Labs LLC
 
+OUI:8C1F64DC2*
+ ID_OUI_FROM_DATABASE=Procon Electronics Pty Ltd
+
 OUI:8C1F64DC9*
  ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG
 
 OUI:8C1F64DCA*
  ID_OUI_FROM_DATABASE=Porsche engineering
 
+OUI:8C1F64DD4*
+ ID_OUI_FROM_DATABASE=Midlands Technical Co., Ltd.
+
 OUI:8C1F64DD5*
  ID_OUI_FROM_DATABASE=Cardinal Scales Manufacturing Co
 
+OUI:8C1F64DD7*
+ ID_OUI_FROM_DATABASE=KST technology
+
+OUI:8C1F64DDE*
+ ID_OUI_FROM_DATABASE=Jemac Sweden AB
+
 OUI:8C1F64DE1*
  ID_OUI_FROM_DATABASE=Franke Aquarotter GmbH
 
 OUI:8C1F64DF8*
  ID_OUI_FROM_DATABASE=Wittra Networks AB
 
+OUI:8C1F64DFB*
+ ID_OUI_FROM_DATABASE=Bobeesc Co.
+
 OUI:8C1F64DFE*
  ID_OUI_FROM_DATABASE=Nuvation Energy
 
@@ -91337,9 +95315,21 @@
 OUI:8C1F64E0E*
  ID_OUI_FROM_DATABASE=Nokeval Oy
 
+OUI:8C1F64E10*
+ ID_OUI_FROM_DATABASE=Scenario Automation
+
+OUI:8C1F64E12*
+ ID_OUI_FROM_DATABASE=Pixus Technologies Inc.
+
 OUI:8C1F64E21*
  ID_OUI_FROM_DATABASE=LG-LHT Aircraft Solutions GmbH
 
+OUI:8C1F64E24*
+ ID_OUI_FROM_DATABASE=COMETA SAS
+
+OUI:8C1F64E2D*
+ ID_OUI_FROM_DATABASE=Private
+
 OUI:8C1F64E30*
  ID_OUI_FROM_DATABASE=VMukti Solutions Private Limited
 
@@ -91349,6 +95339,9 @@
 OUI:8C1F64E43*
  ID_OUI_FROM_DATABASE=Daedalean AG
 
+OUI:8C1F64E46*
+ ID_OUI_FROM_DATABASE=Nautel LTD
+
 OUI:8C1F64E49*
  ID_OUI_FROM_DATABASE=Samwell International Inc
 
@@ -91358,6 +95351,9 @@
 OUI:8C1F64E52*
  ID_OUI_FROM_DATABASE=LcmVeloci ApS
 
+OUI:8C1F64E53*
+ ID_OUI_FROM_DATABASE=T PROJE MUHENDISLIK DIS TIC. LTD. STI.
+
 OUI:8C1F64E5C*
  ID_OUI_FROM_DATABASE=Scientific Lightning Solutions
 
@@ -91370,6 +95366,9 @@
 OUI:8C1F64E61*
  ID_OUI_FROM_DATABASE=Stange Elektronik GmbH
 
+OUI:8C1F64E62*
+ ID_OUI_FROM_DATABASE=Axcend
+
 OUI:8C1F64E64*
  ID_OUI_FROM_DATABASE=Indefac company
 
@@ -91385,15 +95384,27 @@
 OUI:8C1F64E7C*
  ID_OUI_FROM_DATABASE=Ashinne Technology Co., Ltd
 
+OUI:8C1F64E86*
+ ID_OUI_FROM_DATABASE=ComVetia AG
+
 OUI:8C1F64E90*
  ID_OUI_FROM_DATABASE=MHE Electronics
 
+OUI:8C1F64E92*
+ ID_OUI_FROM_DATABASE=EA Elektro-Automatik
+
+OUI:8C1F64E94*
+ ID_OUI_FROM_DATABASE=ZIN TECHNOLOGIES
+
 OUI:8C1F64E98*
  ID_OUI_FROM_DATABASE=Luxshare Electronic Technology (Kunshan) LTD
 
 OUI:8C1F64E99*
  ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd
 
+OUI:8C1F64EA8*
+ ID_OUI_FROM_DATABASE=Zumbach Electronic AG
+
 OUI:8C1F64EAA*
  ID_OUI_FROM_DATABASE=KB Modul, LLC
 
@@ -91418,15 +95429,27 @@
 OUI:8C1F64EC1*
  ID_OUI_FROM_DATABASE=Actronika SAS
 
+OUI:8C1F64ECF*
+ ID_OUI_FROM_DATABASE=Monnit Corporation
+
 OUI:8C1F64ED4*
  ID_OUI_FROM_DATABASE=ZHEJIANG CHITIC-SAFEWAY NEW ENERGY TECHNICAL CO.,LTD.
 
 OUI:8C1F64ED9*
  ID_OUI_FROM_DATABASE=NETGEN HITECH SOLUTIONS LLP
 
+OUI:8C1F64EDA*
+ ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
+
 OUI:8C1F64EE0*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:8C1F64EE1*
+ ID_OUI_FROM_DATABASE=PuS GmbH und Co. KG
+
+OUI:8C1F64EE6*
+ ID_OUI_FROM_DATABASE=LYNKX
+
 OUI:8C1F64EE8*
  ID_OUI_FROM_DATABASE=Global Organ Group B.V.
 
@@ -91439,12 +95462,33 @@
 OUI:8C1F64EF1*
  ID_OUI_FROM_DATABASE=BIOTAGE GB LTD
 
+OUI:8C1F64EF8*
+ ID_OUI_FROM_DATABASE=Northwest Central Indiana Community Partnerships Inc dba Wabash Heartland Innovation Network (WHIN)
+
 OUI:8C1F64EFB*
  ID_OUI_FROM_DATABASE=WARECUBE,INC
 
 OUI:8C1F64F04*
  ID_OUI_FROM_DATABASE=IoTSecure, LLC
 
+OUI:8C1F64F09*
+ ID_OUI_FROM_DATABASE=Texi AS
+
+OUI:8C1F64F10*
+ ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH
+
+OUI:8C1F64F12*
+ ID_OUI_FROM_DATABASE=CAITRON GmbH
+
+OUI:8C1F64F22*
+ ID_OUI_FROM_DATABASE=Voyage Audio LLC
+
+OUI:8C1F64F23*
+ ID_OUI_FROM_DATABASE=IDEX India Pvt Ltd
+
+OUI:8C1F64F24*
+ ID_OUI_FROM_DATABASE=Albotronic
+
 OUI:8C1F64F25*
  ID_OUI_FROM_DATABASE=Misaka Network, Inc.
 
@@ -91454,42 +95498,81 @@
 OUI:8C1F64F2C*
  ID_OUI_FROM_DATABASE=Tunstall A/S
 
+OUI:8C1F64F2D*
+ ID_OUI_FROM_DATABASE=HUERNER Schweisstechnik GmbH
+
+OUI:8C1F64F2F*
+ ID_OUI_FROM_DATABASE=Quantum Technologies Inc
+
 OUI:8C1F64F31*
  ID_OUI_FROM_DATABASE=International Water Treatment Maritime AS
 
 OUI:8C1F64F32*
  ID_OUI_FROM_DATABASE=Shenzhen INVT Electric Co.,Ltd
 
+OUI:8C1F64F39*
+ ID_OUI_FROM_DATABASE=Weinan Wins Future Technology Co.,Ltd
+
+OUI:8C1F64F3B*
+ ID_OUI_FROM_DATABASE=??????????
+
 OUI:8C1F64F3C*
  ID_OUI_FROM_DATABASE=Microlynx Systems Ltd
 
+OUI:8C1F64F3D*
+ ID_OUI_FROM_DATABASE=Byte Lab Grupa d.o.o.
+
 OUI:8C1F64F3F*
  ID_OUI_FROM_DATABASE=Industrial Laser Machines, LLC
 
 OUI:8C1F64F41*
  ID_OUI_FROM_DATABASE=AUTOMATIZACION Y CONECTIVIDAD SA DE CV
 
+OUI:8C1F64F43*
+ ID_OUI_FROM_DATABASE=wtec GmbH
+
 OUI:8C1F64F45*
  ID_OUI_FROM_DATABASE=JBF
 
+OUI:8C1F64F4C*
+ ID_OUI_FROM_DATABASE=inomatic GmbH
+
 OUI:8C1F64F4E*
  ID_OUI_FROM_DATABASE=ADAMCZEWSKI elektronische Messtechnik GmbH
 
+OUI:8C1F64F50*
+ ID_OUI_FROM_DATABASE=Vigor Electric Corp.
+
 OUI:8C1F64F52*
  ID_OUI_FROM_DATABASE=AMF Medical SA
 
+OUI:8C1F64F56*
+ ID_OUI_FROM_DATABASE=KC5 International Sdn Bhd
+
+OUI:8C1F64F57*
+ ID_OUI_FROM_DATABASE=EA Elektro-Automatik
+
 OUI:8C1F64F59*
  ID_OUI_FROM_DATABASE=Inovonics Inc.
 
 OUI:8C1F64F5A*
  ID_OUI_FROM_DATABASE=Telco Antennas Pty Ltd
 
+OUI:8C1F64F5B*
+ ID_OUI_FROM_DATABASE=SemaConnect, Inc
+
 OUI:8C1F64F5C*
  ID_OUI_FROM_DATABASE=Flextronics International Kft
 
+OUI:8C1F64F5F*
+ ID_OUI_FROM_DATABASE=TR7 Siber Savunma A.S.
+
 OUI:8C1F64F65*
  ID_OUI_FROM_DATABASE=Talleres de Escoriaza SA
 
+OUI:8C1F64F70*
+ ID_OUI_FROM_DATABASE=Vision Systems Safety Tech
+
 OUI:8C1F64F72*
  ID_OUI_FROM_DATABASE=Contrader
 
@@ -91499,9 +95582,15 @@
 OUI:8C1F64F78*
  ID_OUI_FROM_DATABASE=Ternary Research Corporation
 
+OUI:8C1F64F79*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
 OUI:8C1F64F7A*
  ID_OUI_FROM_DATABASE=SiEngine Technology Co., Ltd.
 
+OUI:8C1F64F84*
+ ID_OUI_FROM_DATABASE=KST technology
+
 OUI:8C1F64F86*
  ID_OUI_FROM_DATABASE=INFOSTECH Co., Ltd.
 
@@ -91517,6 +95606,9 @@
 OUI:8C1F64FA2*
  ID_OUI_FROM_DATABASE=AZD Praha s.r.o., ZOZ Olomouc
 
+OUI:8C1F64FA4*
+ ID_OUI_FROM_DATABASE=China Information Technology Designing &Consulting Institute Co.,Ltd.
+
 OUI:8C1F64FA8*
  ID_OUI_FROM_DATABASE=Unitron Systems b.v.
 
@@ -91529,6 +95621,12 @@
 OUI:8C1F64FB1*
  ID_OUI_FROM_DATABASE=ABB
 
+OUI:8C1F64FB4*
+ ID_OUI_FROM_DATABASE=Thales Nederland BV
+
+OUI:8C1F64FB5*
+ ID_OUI_FROM_DATABASE=Bavaria Digital Technik GmbH
+
 OUI:8C1F64FB7*
  ID_OUI_FROM_DATABASE=Grace Design/Lunatec LLC
 
@@ -91538,6 +95636,12 @@
 OUI:8C1F64FBD*
  ID_OUI_FROM_DATABASE=SAN-AI Electronic Industries Co.,Ltd.
 
+OUI:8C1F64FC2*
+ ID_OUI_FROM_DATABASE=I/O Controls
+
+OUI:8C1F64FCC*
+ ID_OUI_FROM_DATABASE=GREDMANN TAIWAN LTD.
+
 OUI:8C1F64FCD*
  ID_OUI_FROM_DATABASE=elbit systems - EW and sigint - Elisra
 
@@ -91550,12 +95654,21 @@
 OUI:8C1F64FD4*
  ID_OUI_FROM_DATABASE=EMBSYS SISTEMAS EMBARCADOS
 
+OUI:8C1F64FD7*
+ ID_OUI_FROM_DATABASE=Beijing Yahong Century Technology Co., Ltd
+
+OUI:8C1F64FDC*
+ ID_OUI_FROM_DATABASE=Nuphoton Technologies
+
 OUI:8C1F64FE0*
  ID_OUI_FROM_DATABASE=Potter Electric Signal Company
 
 OUI:8C1F64FE3*
  ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
 
+OUI:8C1F64FE9*
+ ID_OUI_FROM_DATABASE=ALZAJEL MODERN TELECOMMUNICATION
+
 OUI:8C1F64FED*
  ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH
 
@@ -91565,6 +95678,9 @@
 OUI:8C1F64FF6*
  ID_OUI_FROM_DATABASE=Ascon Tecnologic S.r.l.
 
+OUI:8C1F64FFC*
+ ID_OUI_FROM_DATABASE=Invendis Technologies India Pvt Ltd
+
 OUI:8C1F94*
  ID_OUI_FROM_DATABASE=RF Surgical System Inc.
 
@@ -91619,6 +95735,9 @@
 OUI:8C3579*
  ID_OUI_FROM_DATABASE=QDIQO Sp. z o.o.
 
+OUI:8C3592*
+ ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+
 OUI:8C367A*
  ID_OUI_FROM_DATABASE=Palo Alto Networks
 
@@ -91796,6 +95915,9 @@
 OUI:8C5109E*
  ID_OUI_FROM_DATABASE=IROOTELLUCKY Corp.
 
+OUI:8C5219*
+ ID_OUI_FROM_DATABASE=SHARP Corporation
+
 OUI:8C53C3*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
@@ -91910,6 +96032,51 @@
 OUI:8C5D60*
  ID_OUI_FROM_DATABASE=UCI Corporation Co.,Ltd.
 
+OUI:8C5DB20*
+ ID_OUI_FROM_DATABASE=NPP NTT LLC
+
+OUI:8C5DB21*
+ ID_OUI_FROM_DATABASE=DAYOUPLUS
+
+OUI:8C5DB22*
+ ID_OUI_FROM_DATABASE=F+ Networks
+
+OUI:8C5DB23*
+ ID_OUI_FROM_DATABASE=Yuzhou Zhongnan lnformation Technology Co.,Ltd
+
+OUI:8C5DB24*
+ ID_OUI_FROM_DATABASE=CoreTigo
+
+OUI:8C5DB25*
+ ID_OUI_FROM_DATABASE=Unite Audio
+
+OUI:8C5DB26*
+ ID_OUI_FROM_DATABASE=SmartMore Corporation Limited
+
+OUI:8C5DB27*
+ ID_OUI_FROM_DATABASE=Cleartex s.r.o.
+
+OUI:8C5DB28*
+ ID_OUI_FROM_DATABASE=Guangzhou Phimax Electronic Technology Co.,Ltd
+
+OUI:8C5DB29*
+ ID_OUI_FROM_DATABASE=ISSENDORFF KG
+
+OUI:8C5DB2A*
+ ID_OUI_FROM_DATABASE=Beijing Scistor Technologies Co., Ltd
+
+OUI:8C5DB2B*
+ ID_OUI_FROM_DATABASE=NADDOD
+
+OUI:8C5DB2C*
+ ID_OUI_FROM_DATABASE=HEXIN Technologies Co., Ltd.
+
+OUI:8C5DB2D*
+ ID_OUI_FROM_DATABASE=Guandong Yuhang Automation Technology Co.,Ltd
+
+OUI:8C5DB2E*
+ ID_OUI_FROM_DATABASE=Surbhi Satcom Pvt Ltd
+
 OUI:8C5EBD*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -91961,6 +96128,9 @@
 OUI:8C68C8*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:8C6A3B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:8C6A8D*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
@@ -91979,6 +96149,9 @@
 OUI:8C6DC4*
  ID_OUI_FROM_DATABASE=Megapixel VR
 
+OUI:8C6FB9*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:8C705A*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -92009,12 +96182,18 @@
 OUI:8C78D7*
  ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
 
+OUI:8C7909*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:8C7967*
  ID_OUI_FROM_DATABASE=zte corporation
 
 OUI:8C79F5*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:8C7A00*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:8C7A15*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -92072,6 +96251,9 @@
 OUI:8C8401*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:8C8442*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:8C8580*
  ID_OUI_FROM_DATABASE=Smart Innovation LLC
 
@@ -92114,6 +96296,9 @@
 OUI:8C8D28*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:8C8E0D*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:8C8E76*
  ID_OUI_FROM_DATABASE=taskit GmbH
 
@@ -92144,6 +96329,9 @@
 OUI:8C941F*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:8C946A*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:8C94CC*
  ID_OUI_FROM_DATABASE=SFR
 
@@ -92159,6 +96347,9 @@
 OUI:8C9806*
  ID_OUI_FROM_DATABASE=SHENZHEN SEI ROBOTICS CO.,LTD
 
+OUI:8C986B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:8C99E6*
  ID_OUI_FROM_DATABASE=TCT mobile ltd
 
@@ -92274,7 +96465,7 @@
  ID_OUI_FROM_DATABASE=Intel Corporate
 
 OUI:8CBA25*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:8CBE24*
  ID_OUI_FROM_DATABASE=Tashang Semiconductor(Shanghai) Co., Ltd.
@@ -92291,6 +96482,9 @@
 OUI:8CC121*
  ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
 
+OUI:8CC58C*
+ ID_OUI_FROM_DATABASE=ShenZhen Elsky Technology Co.,LTD
+
 OUI:8CC5B4*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -92340,7 +96534,7 @@
  ID_OUI_FROM_DATABASE=SHENZHEN D-light Technolgy Limited
 
 OUI:8CC8F47*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=TableSafe
 
 OUI:8CC8F48*
  ID_OUI_FROM_DATABASE=Strongbyte Solutions Limited
@@ -92372,6 +96566,9 @@
 OUI:8CCDE8*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
+OUI:8CCDFE*
+ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
+
 OUI:8CCE4E*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -92387,6 +96584,9 @@
 OUI:8CCF8F*
  ID_OUI_FROM_DATABASE=ITC Systems
 
+OUI:8CD0B2*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
 OUI:8CD17B*
  ID_OUI_FROM_DATABASE=CG Mobile
 
@@ -92432,9 +96632,15 @@
 OUI:8CDEF9*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
+OUI:8CDF2C*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:8CDF9D*
  ID_OUI_FROM_DATABASE=NEC Corporation
 
+OUI:8CE042*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:8CE081*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -92498,6 +96704,9 @@
 OUI:8CF319*
  ID_OUI_FROM_DATABASE=Siemens Industrial Automation Products Ltd., Chengdu
 
+OUI:8CF3E7*
+ ID_OUI_FROM_DATABASE=solidotech
+
 OUI:8CF5A3*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
@@ -92528,6 +96737,9 @@
 OUI:8CFABA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:8CFADD*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:8CFCA0*
  ID_OUI_FROM_DATABASE=Shenzhen Smart Device Technology Co., LTD.
 
@@ -92558,6 +96770,9 @@
 OUI:9000DB*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:900117*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:90013B*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -92585,12 +96800,18 @@
 OUI:900628*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:9006F2*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:900917*
  ID_OUI_FROM_DATABASE=Far-sighted mobile
 
 OUI:9009D0*
  ID_OUI_FROM_DATABASE=Synology Incorporated
 
+OUI:9009DF*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:900A1A*
  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
 
@@ -92600,6 +96821,9 @@
 OUI:900A3A*
  ID_OUI_FROM_DATABASE=PSG Plastic Service GmbH
 
+OUI:900A62*
+ ID_OUI_FROM_DATABASE=Inventus Power Eletronica do Brasil LTDA
+
 OUI:900A84*
  ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
 
@@ -92711,15 +96935,24 @@
 OUI:9023EC*
  ID_OUI_FROM_DATABASE=Availink, Inc.
 
+OUI:9025F2*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:90272B*
  ID_OUI_FROM_DATABASE=Algorab S.r.l.
 
 OUI:902759*
  ID_OUI_FROM_DATABASE=Nanjing Jiahao Technology Co., Ltd.
 
+OUI:902778*
+ ID_OUI_FROM_DATABASE=Open Infrastructure
+
 OUI:9027E4*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:902AEE*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:902B34*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
@@ -92741,6 +96974,9 @@
 OUI:902E87*
  ID_OUI_FROM_DATABASE=LabJack
 
+OUI:90314B*
+ ID_OUI_FROM_DATABASE=AltoBeam Inc.
+
 OUI:9031CD*
  ID_OUI_FROM_DATABASE=Onyx Healthcare Inc.
 
@@ -92768,6 +97004,9 @@
 OUI:9038DF*
  ID_OUI_FROM_DATABASE=Changzhou Tiannengbo System Co. Ltd.
 
+OUI:90395E*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:903A72*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -92777,6 +97016,9 @@
 OUI:903AE6*
  ID_OUI_FROM_DATABASE=PARROT SA
 
+OUI:903C1D*
+ ID_OUI_FROM_DATABASE=HISENSE VISUAL TECHNOLOGY CO.,LTD
+
 OUI:903C92*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -92825,6 +97067,9 @@
 OUI:90473C*
  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
 
+OUI:904846*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:90486C*
  ID_OUI_FROM_DATABASE=Ring LLC
 
@@ -92909,6 +97154,9 @@
 OUI:90513F*
  ID_OUI_FROM_DATABASE=Elettronica Santerno SpA
 
+OUI:9052BF*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:905446*
  ID_OUI_FROM_DATABASE=TES ELECTRONIC SOLUTIONS
 
@@ -92969,6 +97217,9 @@
 OUI:906560*
  ID_OUI_FROM_DATABASE=EM Microelectronic
 
+OUI:906584*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:906717*
  ID_OUI_FROM_DATABASE=Alphion India Private Limited
 
@@ -93065,9 +97316,15 @@
 OUI:907AF1*
  ID_OUI_FROM_DATABASE=Wally
 
+OUI:907BC6*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:907E30*
  ID_OUI_FROM_DATABASE=LARS
 
+OUI:907E43*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:907EBA*
  ID_OUI_FROM_DATABASE=UTEK TECHNOLOGY (SHENZHEN) CO.,LTD
 
@@ -93185,6 +97442,9 @@
 OUI:909864*
  ID_OUI_FROM_DATABASE=Impex-Sat GmbH&amp;Co KG
 
+OUI:909877*
+ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
+
 OUI:909916*
  ID_OUI_FROM_DATABASE=ELVEES NeoTek OJSC
 
@@ -93194,6 +97454,9 @@
 OUI:909A77*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:909B6F*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:909C4A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -93236,9 +97499,15 @@
 OUI:90A62F*
  ID_OUI_FROM_DATABASE=NAVER
 
+OUI:90A6BF*
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
+
 OUI:90A783*
  ID_OUI_FROM_DATABASE=JSW PACIFIC CORPORATION
 
+OUI:90A7BF*
+ ID_OUI_FROM_DATABASE=EM Microelectronic
+
 OUI:90A7C1*
  ID_OUI_FROM_DATABASE=Pakedge Device and Software Inc.
 
@@ -93251,6 +97520,9 @@
 OUI:90AAC3*
  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
 
+OUI:90AB96*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:90AC3F*
  ID_OUI_FROM_DATABASE=BrightSign LLC
 
@@ -93294,7 +97566,7 @@
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:90B67A*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:90B686*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
@@ -93315,7 +97587,7 @@
  ID_OUI_FROM_DATABASE=Johnson Outdoors Marine Electronics d/b/a Minnkota
 
 OUI:90BDE6*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
 OUI:90C115*
  ID_OUI_FROM_DATABASE=Sony Corporation
@@ -93389,9 +97661,15 @@
 OUI:90C99B*
  ID_OUI_FROM_DATABASE=Tesorion Nederland B.V.
 
+OUI:90CAFA*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:90CC24*
  ID_OUI_FROM_DATABASE=Synaptics, Inc
 
+OUI:90CC7A*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:90CCDF*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -93401,6 +97679,9 @@
 OUI:90CDB6*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:90CEB8*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:90CF15*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -93416,6 +97697,9 @@
 OUI:90D473*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:90D689*
+ ID_OUI_FROM_DATABASE=Huahao Fangzhou Technology Co.,Ltd
+
 OUI:90D74F*
  ID_OUI_FROM_DATABASE=Bookeen
 
@@ -93440,6 +97724,9 @@
 OUI:90DA6A*
  ID_OUI_FROM_DATABASE=FOCUS H&S Co., Ltd.
 
+OUI:90DAF9*
+ ID_OUI_FROM_DATABASE=Siemens Rail Automation SAU
+
 OUI:90DB46*
  ID_OUI_FROM_DATABASE=E-LEAD ELECTRONIC CO., LTD
 
@@ -93527,6 +97814,9 @@
 OUI:90E868*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
+OUI:90E95E*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:90EA60*
  ID_OUI_FROM_DATABASE=SPI Lasers Ltd
 
@@ -93539,6 +97829,9 @@
 OUI:90EC77*
  ID_OUI_FROM_DATABASE=silicom
 
+OUI:90ECEA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:90EEC7*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -93590,6 +97883,9 @@
 OUI:90F7B2*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
+OUI:90F82E*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:90F891*
  ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
 
@@ -93705,7 +98001,7 @@
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
 
 OUI:9409C9*
- ID_OUI_FROM_DATABASE=ALPSALPINE CO .,LTD
+ ID_OUI_FROM_DATABASE=ALPSALPINE CO,.LTD
 
 OUI:9409D3*
  ID_OUI_FROM_DATABASE=shenzhen maxtopic technology co.,ltd
@@ -93731,6 +98027,9 @@
 OUI:940E6B*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:940EE7*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:94103E*
  ID_OUI_FROM_DATABASE=Belkin International Inc.
 
@@ -93770,6 +98069,9 @@
 OUI:941F3A*
  ID_OUI_FROM_DATABASE=Ambiq
 
+OUI:941FA2*
+ ID_OUI_FROM_DATABASE=Wuhan YuXin Semiconductor Co., Ltd.
+
 OUI:942053*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -93813,7 +98115,7 @@
  ID_OUI_FROM_DATABASE=Diversey Inc
 
 OUI:942A6F*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:942CB3*
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
@@ -93863,18 +98165,27 @@
 OUI:943BB1*
  ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
 
+OUI:943C96*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:943CC6*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
 OUI:943DC9*
  ID_OUI_FROM_DATABASE=Asahi Net, Inc.
 
+OUI:943EE4*
+ ID_OUI_FROM_DATABASE=WiSA Technologies Inc
+
 OUI:943FBB*
  ID_OUI_FROM_DATABASE=JSC RPC Istok named after Shokin
 
 OUI:943FC2*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
+OUI:943FD6*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:9440A2*
  ID_OUI_FROM_DATABASE=Anywave Communication Technologies, Inc.
 
@@ -94013,12 +98324,18 @@
 OUI:946AB0*
  ID_OUI_FROM_DATABASE=Arcadyan Corporation
 
+OUI:946DAE*
+ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
+
 OUI:9470D2*
  ID_OUI_FROM_DATABASE=WINFIRM TECHNOLOGY
 
 OUI:9471AC*
  ID_OUI_FROM_DATABASE=TCT mobile ltd
 
+OUI:94720F*
+ ID_OUI_FROM_DATABASE=Guangdong Nanguang Photo&Video Systems Co., Ltd.
+
 OUI:94756E*
  ID_OUI_FROM_DATABASE=QinetiQ North America
 
@@ -94028,6 +98345,12 @@
 OUI:94772B*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:947806*
+ ID_OUI_FROM_DATABASE=NINGBO SUNVOT TECHNOLOGY CO.,LTD
+
+OUI:947BAE*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:947BBE*
  ID_OUI_FROM_DATABASE=Ubicquia LLC
 
@@ -94037,6 +98360,9 @@
 OUI:947C3E*
  ID_OUI_FROM_DATABASE=Polewall Norge AS
 
+OUI:947D77*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:947EB9*
  ID_OUI_FROM_DATABASE=National Narrowband Network Communications Pty Ltd
 
@@ -94044,7 +98370,7 @@
  ID_OUI_FROM_DATABASE=Shenzhen Fastrain Technology Co., Ltd.
 
 OUI:947FD8*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:9481A4*
  ID_OUI_FROM_DATABASE=Azuray Technologies
@@ -94127,9 +98453,15 @@
 OUI:9495A0*
  ID_OUI_FROM_DATABASE=Google, Inc.
 
+OUI:9497AE*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:949869*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:94988F*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:9498A2*
  ID_OUI_FROM_DATABASE=Shanghai LISTEN TECH.LTD
 
@@ -94166,6 +98498,9 @@
 OUI:94A04E*
  ID_OUI_FROM_DATABASE=Bostex Technology Co., LTD
 
+OUI:94A07D*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:94A1A2*
  ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
 
@@ -94208,6 +98543,9 @@
 OUI:94ACCA*
  ID_OUI_FROM_DATABASE=trivum technologies GmbH
 
+OUI:94AD23*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:94AE61*
  ID_OUI_FROM_DATABASE=Alcatel Lucent
 
@@ -94262,6 +98600,9 @@
 OUI:94BBAE*
  ID_OUI_FROM_DATABASE=Husqvarna AB
 
+OUI:94BE09*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
 OUI:94BE46*
  ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
 
@@ -94344,10 +98685,10 @@
  ID_OUI_FROM_DATABASE=MAMMOTHTEK CLOUD(DONG GUAN)TECHNOLOGY CO., LTD
 
 OUI:94C9B78*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=OSOM Products Inc
 
 OUI:94C9B79*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Titanium union(shenzhen)technology co.,ltd
 
 OUI:94C9B7A*
  ID_OUI_FROM_DATABASE=ShenZhen Beide Technology Co.,LTD
@@ -94367,6 +98708,9 @@
 OUI:94CA0F*
  ID_OUI_FROM_DATABASE=Honeywell Analytics
 
+OUI:94CBCD*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:94CC040*
  ID_OUI_FROM_DATABASE=Hangzhou Yongkong Technology Co., Ltd.
 
@@ -94454,6 +98798,9 @@
 OUI:94D505*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:94D54D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:94D60E*
  ID_OUI_FROM_DATABASE=shenzhen yunmao information technologies co., ltd
 
@@ -94469,6 +98816,9 @@
 OUI:94D859*
  ID_OUI_FROM_DATABASE=TCT mobile ltd
 
+OUI:94D86B*
+ ID_OUI_FROM_DATABASE=nass magnet Hungária Kft.
+
 OUI:94D93C*
  ID_OUI_FROM_DATABASE=ENELPS
 
@@ -94493,6 +98843,9 @@
 OUI:94DD3F*
  ID_OUI_FROM_DATABASE=A+V Link Technologies, Corp.
 
+OUI:94DDF8*
+ ID_OUI_FROM_DATABASE=Brother Industries, LTD.
+
 OUI:94DE0E*
  ID_OUI_FROM_DATABASE=SmartOptics AS
 
@@ -94502,6 +98855,9 @@
 OUI:94DEB8*
  ID_OUI_FROM_DATABASE=Silicon Laboratories
 
+OUI:94DF34*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:94DF4E*
  ID_OUI_FROM_DATABASE=Wistron InfoComm(Kunshan)Co.,Ltd.
 
@@ -94598,6 +98954,12 @@
 OUI:94F2BB*
  ID_OUI_FROM_DATABASE=Valeo Vision Systems
 
+OUI:94F392*
+ ID_OUI_FROM_DATABASE=Fortinet, Inc.
+
+OUI:94F524*
+ ID_OUI_FROM_DATABASE=Chengdu BeiZhongWangXin Technology Co.Ltd
+
 OUI:94F551*
  ID_OUI_FROM_DATABASE=Cadi Scientific Pte Ltd
 
@@ -94763,6 +99125,9 @@
 OUI:9802D8F*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:98038A*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:98039B*
  ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
 
@@ -94829,6 +99194,9 @@
 OUI:9809CF*
  ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
 
+OUI:980C33*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:980C82*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
 
@@ -94844,6 +99212,9 @@
 OUI:980D67*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
+OUI:980D6F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:980E24*
  ID_OUI_FROM_DATABASE=Phytium Technology Co.,Ltd.
 
@@ -94868,6 +99239,9 @@
 OUI:9816EC*
  ID_OUI_FROM_DATABASE=IC Intracom
 
+OUI:9817F1*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:981888*
  ID_OUI_FROM_DATABASE=Cisco Meraki
 
@@ -94892,9 +99266,15 @@
 OUI:981FB1*
  ID_OUI_FROM_DATABASE=Shenzhen Lemon Network Technology Co.,Ltd
 
+OUI:982044*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:98208E*
  ID_OUI_FROM_DATABASE=Definium Technologies
 
+OUI:98226E*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:9822EF*
  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
 
@@ -94991,6 +99371,9 @@
 OUI:983071*
  ID_OUI_FROM_DATABASE=DAIKYUNG VASCOM
 
+OUI:98348C*
+ ID_OUI_FROM_DATABASE=Teleepoch Ltd
+
 OUI:98349D*
  ID_OUI_FROM_DATABASE=Krauss Maffei Technologies GmbH
 
@@ -95063,6 +99446,9 @@
 OUI:98473C*
  ID_OUI_FROM_DATABASE=SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
 
+OUI:984744*
+ ID_OUI_FROM_DATABASE=Shenzhen Boomtech Industrial Corporation
+
 OUI:984827*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -95072,6 +99458,9 @@
 OUI:984914*
  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
 
+OUI:984925*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:98499F*
  ID_OUI_FROM_DATABASE=Domo Tactical Communications
 
@@ -95081,6 +99470,9 @@
 OUI:984A47*
  ID_OUI_FROM_DATABASE=CHG Hospital Beds
 
+OUI:984B06*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:984B4A*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -95165,6 +99557,9 @@
 OUI:9860CA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:986610*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:9866EA*
  ID_OUI_FROM_DATABASE=Industrial Control Communications, Inc.
 
@@ -95375,6 +99770,9 @@
 OUI:9880EE*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:98818A*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:988217*
  ID_OUI_FROM_DATABASE=Disruptive Ltd
 
@@ -95387,12 +99785,18 @@
 OUI:98865D*
  ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
 
+OUI:98868B*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:9886B1*
  ID_OUI_FROM_DATABASE=Flyaudio corporation (China)
 
 OUI:988744*
  ID_OUI_FROM_DATABASE=Wuxi Hongda Science and Technology Co.,LTD
 
+OUI:988924*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:9889ED*
  ID_OUI_FROM_DATABASE=Anadem Information Inc.
 
@@ -95408,6 +99812,9 @@
 OUI:988BAD*
  ID_OUI_FROM_DATABASE=Corintech Ltd.
 
+OUI:988CB3*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:988D46*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -95501,6 +99908,9 @@
 OUI:989D5D*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:989DE5*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:989E63*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -95576,6 +99986,9 @@
 OUI:98AAFCE*
  ID_OUI_FROM_DATABASE=Comarch S.A.
 
+OUI:98ACEF*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:98AD1D*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -95594,6 +100007,9 @@
 OUI:98B177*
  ID_OUI_FROM_DATABASE=LANDIS + GYR
 
+OUI:98B379*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:98B3EF*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -95633,6 +100049,9 @@
 OUI:98BEDC*
  ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
 
+OUI:98BFF4*
+ ID_OUI_FROM_DATABASE=MARKIN co., Ltd.
+
 OUI:98C0EB*
  ID_OUI_FROM_DATABASE=Global Regency Ltd
 
@@ -95652,7 +100071,7 @@
  ID_OUI_FROM_DATABASE=PacketAccess
 
 OUI:98C854*
- ID_OUI_FROM_DATABASE=Chiun MaiCommunication System, Inc
+ ID_OUI_FROM_DATABASE=Chiun Mai Communication System, Inc
 
 OUI:98C8B8*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
@@ -95675,6 +100094,12 @@
 OUI:98CC4D*
  ID_OUI_FROM_DATABASE=Shenzhen mantunsci co., LTD
 
+OUI:98CCD9*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
+OUI:98CCE4*
+ ID_OUI_FROM_DATABASE=Shenzhen Mindray Animal Medical Technology Co.,LTD
+
 OUI:98CDAC*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -95885,6 +100310,9 @@
 OUI:98F9C7E*
  ID_OUI_FROM_DATABASE=NC-LINK Technology Co., Ltd.
 
+OUI:98F9CC*
+ ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
+
 OUI:98FA9B*
  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
 
@@ -95984,6 +100412,12 @@
 OUI:9C0567*
  ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
 
+OUI:9C0591*
+ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
+
+OUI:9C05D6*
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
+
 OUI:9C061B*
  ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
 
@@ -95993,6 +100427,9 @@
 OUI:9C0B05*
  ID_OUI_FROM_DATABASE=eero inc.
 
+OUI:9C0C35*
+ ID_OUI_FROM_DATABASE=Shenzhenshi Xinzhongxin Technology Co.Ltd
+
 OUI:9C0CDF*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -96092,6 +100529,9 @@
 OUI:9C2BA6*
  ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
 
+OUI:9C2DCD*
+ ID_OUI_FROM_DATABASE=LCFC(Hefei) Electronics Technology Co., Ltd
+
 OUI:9C2DCF*
  ID_OUI_FROM_DATABASE=Shishi Tongyun Technology(Chengdu)Co.,Ltd.
 
@@ -96263,14 +100703,23 @@
 OUI:9C52F8*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:9C5322*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:9C53CD*
  ID_OUI_FROM_DATABASE=ENGICAM s.r.l.
 
+OUI:9C5416*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:9C541C*
  ID_OUI_FROM_DATABASE=Shenzhen My-power Technology Co.,Ltd
 
 OUI:9C5440*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=ChengDu TD Tech
+
+OUI:9C5467*
+ ID_OUI_FROM_DATABASE=Nokia
 
 OUI:9C54C2*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
@@ -96281,6 +100730,9 @@
 OUI:9C54DA*
  ID_OUI_FROM_DATABASE=SkyBell Technologies Inc.
 
+OUI:9C558F*
+ ID_OUI_FROM_DATABASE=Lockin Technology(Beijing) Co.,Ltd.
+
 OUI:9C55B4*
  ID_OUI_FROM_DATABASE=I.S.E. S.r.l.
 
@@ -96341,6 +100793,9 @@
 OUI:9C62AB*
  ID_OUI_FROM_DATABASE=Sumavision Technologies Co.,Ltd
 
+OUI:9C635B*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:9C63ED*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -96354,11 +100809,14 @@
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:9C65EE*
- ID_OUI_FROM_DATABASE=DASAN Network Solutions
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:9C65F9*
  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
 
+OUI:9C65FA*
+ ID_OUI_FROM_DATABASE=AcSiP
+
 OUI:9C6650*
  ID_OUI_FROM_DATABASE=Glodio Technolies Co.,Ltd Tianjin Branch
 
@@ -96503,6 +100961,9 @@
 OUI:9C83BF*
  ID_OUI_FROM_DATABASE=PRO-VISION, Inc.
 
+OUI:9C84B6*
+ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
+
 OUI:9C84BF*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -96512,6 +100973,9 @@
 OUI:9C86DA*
  ID_OUI_FROM_DATABASE=Phoenix Geophysics Ltd.
 
+OUI:9C8824*
+ ID_OUI_FROM_DATABASE=PetroCloud LLC
+
 OUI:9C8888*
  ID_OUI_FROM_DATABASE=Simac Techniek NV
 
@@ -96557,6 +101021,9 @@
 OUI:9C9019*
  ID_OUI_FROM_DATABASE=Beyless
 
+OUI:9C924F*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:9C934E*
  ID_OUI_FROM_DATABASE=Xerox Corporation
 
@@ -96678,7 +101145,7 @@
  ID_OUI_FROM_DATABASE=Ubiquitous Computing Technology Corporation
 
 OUI:9CB206*
- ID_OUI_FROM_DATABASE=PROCENTEC
+ ID_OUI_FROM_DATABASE=HMS Industrial Networks
 
 OUI:9CB2B2*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -96740,6 +101207,9 @@
 OUI:9CC7D1*
  ID_OUI_FROM_DATABASE=SHARP Corporation
 
+OUI:9CC893*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:9CC8AE*
  ID_OUI_FROM_DATABASE=Becton, Dickinson  and Company
 
@@ -96755,12 +101225,18 @@
 OUI:9CCAD9*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:9CCBF7*
+ ID_OUI_FROM_DATABASE=CLOUD STAR TECHNOLOGY CO., LTD.
+
 OUI:9CCC83*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
 OUI:9CCD82*
  ID_OUI_FROM_DATABASE=CHENG UEI PRECISION INDUSTRY CO.,LTD
 
+OUI:9CD1D0*
+ ID_OUI_FROM_DATABASE=Guangzhou Ronsuo Electronic Technology Co.,Ltd
+
 OUI:9CD21E*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -96785,6 +101261,9 @@
 OUI:9CD643*
  ID_OUI_FROM_DATABASE=D-Link International
 
+OUI:9CD8E3*
+ ID_OUI_FROM_DATABASE=Wuhan Huazhong Numerical Control Co., Ltd
+
 OUI:9CD917*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
@@ -96795,7 +101274,10 @@
  ID_OUI_FROM_DATABASE=Intel Corporate
 
 OUI:9CDB07*
- ID_OUI_FROM_DATABASE=Thum+Mahr GmbH
+ ID_OUI_FROM_DATABASE=Yellowtec GmbH
+
+OUI:9CDBAF*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:9CDBCB*
  ID_OUI_FROM_DATABASE=Wuhan Funshion Online Technologies Co.,Ltd
@@ -96806,6 +101288,9 @@
 OUI:9CDD1F*
  ID_OUI_FROM_DATABASE=Intelligent Steward Co.,Ltd
 
+OUI:9CDE4D*
+ ID_OUI_FROM_DATABASE=ML vision Co.,LTD
+
 OUI:9CDF03*
  ID_OUI_FROM_DATABASE=Harman/Becker Automotive Systems GmbH
 
@@ -96941,12 +101426,18 @@
 OUI:9CF6DDE*
  ID_OUI_FROM_DATABASE=Shanxi ZhuoZhi fei High Electronic Technology Co. Ltd.
 
+OUI:9CF86B*
+ ID_OUI_FROM_DATABASE=AgiTech Distribution Limited
+
 OUI:9CF8DB*
  ID_OUI_FROM_DATABASE=shenzhen eyunmei technology co,.ltd
 
 OUI:9CF938*
  ID_OUI_FROM_DATABASE=AREVA NP GmbH
 
+OUI:9CFA3C*
+ ID_OUI_FROM_DATABASE=Daeyoung Electronics
+
 OUI:9CFBD5*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
@@ -96990,7 +101481,7 @@
  ID_OUI_FROM_DATABASE=Argos Solutions AS
 
 OUI:A0024A5*
- ID_OUI_FROM_DATABASE=Donguan Amsamotion Automation Technology Co., Ltd
+ ID_OUI_FROM_DATABASE=Dongguan Amsamotion Automation Technology Co., Ltd
 
 OUI:A0024A6*
  ID_OUI_FROM_DATABASE=Xiaojie Technology (Shenzhen) Co., Ltd
@@ -97061,6 +101552,9 @@
 OUI:A00F37*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:A01077*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:A01081*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -97082,6 +101576,9 @@
 OUI:A0165C*
  ID_OUI_FROM_DATABASE=Triteka LTD
 
+OUI:A017F1*
+ ID_OUI_FROM_DATABASE=Allwinner Technology Co., Ltd
+
 OUI:A01828*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -97146,7 +101643,7 @@
  ID_OUI_FROM_DATABASE=NIMAX TELECOM CO.,LTD.
 
 OUI:A01C87*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:A01C8D*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -97160,6 +101657,9 @@
 OUI:A020A6*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:A0218B*
+ ID_OUI_FROM_DATABASE=ACE Antenna Co., ltd
+
 OUI:A02195*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -97170,7 +101670,7 @@
  ID_OUI_FROM_DATABASE=Kyung In Electronics
 
 OUI:A0224E1*
- ID_OUI_FROM_DATABASE=rNET Controls
+ ID_OUI_FROM_DATABASE=PoE Texas
 
 OUI:A0224E2*
  ID_OUI_FROM_DATABASE=Closed Joint-Stock Company NORSI-TRANS
@@ -97220,6 +101720,9 @@
 OUI:A0239F*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:A024F9*
+ ID_OUI_FROM_DATABASE=Chengdu InnovaTest Technology Co., Ltd
+
 OUI:A027B6*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -97292,9 +101795,15 @@
 OUI:A02EF3*
  ID_OUI_FROM_DATABASE=United Integrated Services Co., Led.
 
+OUI:A03131*
+ ID_OUI_FROM_DATABASE=Procenne Digital Security
+
 OUI:A031DB*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:A031EB*
+ ID_OUI_FROM_DATABASE=Semikron Elektronik GmbH & Co. KG
+
 OUI:A03299*
  ID_OUI_FROM_DATABASE=Lenovo (Beijing) Co., Ltd.
 
@@ -97319,6 +101828,9 @@
 OUI:A038F8*
  ID_OUI_FROM_DATABASE=OURA Health Oy
 
+OUI:A03975*
+ ID_OUI_FROM_DATABASE=Leo Bodnar Electronics Ltd
+
 OUI:A039EE*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -97439,6 +101951,12 @@
 OUI:A04466*
  ID_OUI_FROM_DATABASE=Intellics
 
+OUI:A044F3*
+ ID_OUI_FROM_DATABASE=RafaelMicro
+
+OUI:A0465A*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
 OUI:A047D7*
  ID_OUI_FROM_DATABASE=Best IT World (India) Pvt Ltd
 
@@ -97449,7 +101967,7 @@
  ID_OUI_FROM_DATABASE=Microsoft Corporation
 
 OUI:A04C0C*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:A04C5B*
  ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
@@ -97520,6 +102038,9 @@
 OUI:A05E6B*
  ID_OUI_FROM_DATABASE=MELPER Co., Ltd.
 
+OUI:A06032*
+ ID_OUI_FROM_DATABASE=Amcrest Technologies
+
 OUI:A06090*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -97541,6 +102062,9 @@
 OUI:A06610*
  ID_OUI_FROM_DATABASE=FUJITSU LIMITED
 
+OUI:A06636*
+ ID_OUI_FROM_DATABASE=Intracom SA Telecom Solutions
+
 OUI:A06720*
  ID_OUI_FROM_DATABASE=China Dragon Technology Limited
 
@@ -97667,6 +102191,9 @@
 OUI:A088B4*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:A088C2*
+ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
+
 OUI:A089E4*
  ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
 
@@ -97679,6 +102206,9 @@
 OUI:A08C9B*
  ID_OUI_FROM_DATABASE=Xtreme Technologies Corp
 
+OUI:A08CF2*
+ ID_OUI_FROM_DATABASE=YINUOLINK CO.,LTD
+
 OUI:A08CF8*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -97688,6 +102218,9 @@
 OUI:A08D16*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:A08E24*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:A08E78*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -97721,6 +102254,9 @@
 OUI:A0950C*
  ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
 
+OUI:A0957F*
+ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+
 OUI:A09805*
  ID_OUI_FROM_DATABASE=OpenVox Communication Co Ltd
 
@@ -97760,6 +102296,9 @@
 OUI:A09F7A*
  ID_OUI_FROM_DATABASE=D-Link Middle East FZCO
 
+OUI:A0A001*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:A0A0DC*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -97775,6 +102314,9 @@
 OUI:A0A33B*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:A0A3B3*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:A0A3B8*
  ID_OUI_FROM_DATABASE=WISCLOUD
 
@@ -97811,6 +102353,9 @@
 OUI:A0ADA1*
  ID_OUI_FROM_DATABASE=JMR Electronics, Inc
 
+OUI:A0AF12*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:A0AFBD*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -97922,6 +102467,9 @@
 OUI:A0BFA5*
  ID_OUI_FROM_DATABASE=CORESYS
 
+OUI:A0C20D*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:A0C2DE*
  ID_OUI_FROM_DATABASE=Costar Video Systems
 
@@ -98126,6 +102674,9 @@
 OUI:A0ECF9*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:A0ED6D*
+ ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
+
 OUI:A0EDCD*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -98186,6 +102737,9 @@
 OUI:A0FE91*
  ID_OUI_FROM_DATABASE=AVAT Automation GmbH
 
+OUI:A0FF0C*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:A0FF22*
  ID_OUI_FROM_DATABASE=SHENZHEN APICAL TECHNOLOGY CO., LTD
 
@@ -98246,6 +102800,9 @@
 OUI:A40E2B*
  ID_OUI_FROM_DATABASE=Facebook Inc
 
+OUI:A40E75*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:A40F98*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -98303,6 +102860,9 @@
 OUI:A41194*
  ID_OUI_FROM_DATABASE=Lenovo
 
+OUI:A411BB*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:A41232*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -98321,6 +102881,9 @@
 OUI:A41588*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:A416C0*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:A416E7*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -98339,6 +102902,9 @@
 OUI:A41875*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:A41894*
+ ID_OUI_FROM_DATABASE=Bosch Security Systems B.V.
+
 OUI:A41908*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -98351,6 +102917,9 @@
 OUI:A41BC0*
  ID_OUI_FROM_DATABASE=Fastec Imaging Corporation
 
+OUI:A41CB4*
+ ID_OUI_FROM_DATABASE=DFI Inc
+
 OUI:A41EE1*
  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
 
@@ -98516,6 +103085,9 @@
 OUI:A43EA0*
  ID_OUI_FROM_DATABASE=iComm HK LIMITED
 
+OUI:A43F51*
+ ID_OUI_FROM_DATABASE=Shenzhen Benew Technology  Co.,Ltd.
+
 OUI:A44027*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -98627,6 +103199,9 @@
 OUI:A45129*
  ID_OUI_FROM_DATABASE=XAG
 
+OUI:A4515E*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:A4516F*
  ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
 
@@ -98750,6 +103325,9 @@
 OUI:A45D36*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:A45D5E*
+ ID_OUI_FROM_DATABASE=Wilk Elektronik S.A.
+
 OUI:A45DA1*
  ID_OUI_FROM_DATABASE=ADB Broadband Italia
 
@@ -98789,6 +103367,9 @@
 OUI:A46BB6*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:A46C24*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:A46C2A*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -98801,6 +103382,9 @@
 OUI:A46DA4*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:A46DD4*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:A46E79*
  ID_OUI_FROM_DATABASE=DFT System Co.Ltd
 
@@ -98831,6 +103415,9 @@
 OUI:A47886*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
+OUI:A47952*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:A479E4*
  ID_OUI_FROM_DATABASE=KLINFO Corp
 
@@ -98892,7 +103479,7 @@
  ID_OUI_FROM_DATABASE=Q Electronics Ltd
 
 OUI:A486AE*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
 OUI:A48873*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -98900,6 +103487,9 @@
 OUI:A4895B*
  ID_OUI_FROM_DATABASE=ARK INFOSOLUTIONS PVT LTD
 
+OUI:A4897E*
+ ID_OUI_FROM_DATABASE=Guangzhou Yuhong Technology Co.,Ltd.
+
 OUI:A48CC0*
  ID_OUI_FROM_DATABASE=JLG Industries, Inc.
 
@@ -98975,6 +103565,12 @@
 OUI:A49D49*
  ID_OUI_FROM_DATABASE=Ketra, Inc.
 
+OUI:A49DDD*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:A49E69*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:A49EDB*
  ID_OUI_FROM_DATABASE=AutoCrib, Inc.
 
@@ -99002,6 +103598,9 @@
 OUI:A4A4D3*
  ID_OUI_FROM_DATABASE=Bluebank Communication Technology Co.Ltd
 
+OUI:A4A528*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:A4A6A9*
  ID_OUI_FROM_DATABASE=Private
 
@@ -99104,6 +103703,9 @@
 OUI:A4C138*
  ID_OUI_FROM_DATABASE=Telink Semiconductor (Taipei) Co. Ltd.
 
+OUI:A4C23E*
+ ID_OUI_FROM_DATABASE=Huizhou Speed Wireless Technology Co.,Ltd
+
 OUI:A4C2AB*
  ID_OUI_FROM_DATABASE=Hangzhou LEAD-IT Information & Technology Co.,Ltd
 
@@ -99128,12 +103730,18 @@
 OUI:A4C69A*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:A4C6F0*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:A4C74B*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
 OUI:A4C7DE*
  ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
 
+OUI:A4C7F6*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:A4C939*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -99185,6 +103793,9 @@
 OUI:A4D578*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:A4D5C2*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:A4D73C*
  ID_OUI_FROM_DATABASE=Seiko Epson Corporation
 
@@ -99317,6 +103928,9 @@
 OUI:A4E7E4*
  ID_OUI_FROM_DATABASE=Connex GmbH
 
+OUI:A4E8A3*
+ ID_OUI_FROM_DATABASE=Fujian Newland Auto-ID Tech Co.,Ltd.
+
 OUI:A4E975*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -99428,6 +104042,9 @@
 OUI:A4FB8D*
  ID_OUI_FROM_DATABASE=Hangzhou Dunchong Technology Co.Ltd
 
+OUI:A4FC14*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:A4FC77*
  ID_OUI_FROM_DATABASE=Mega Well Limited
 
@@ -99455,6 +104072,9 @@
 OUI:A80600*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:A80C03*
+ ID_OUI_FROM_DATABASE=Florawise
+
 OUI:A80C0D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -99485,6 +104105,9 @@
 OUI:A815D6*
  ID_OUI_FROM_DATABASE=Shenzhen Meione Technology CO., LTD
 
+OUI:A8169D*
+ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+
 OUI:A816B2*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
@@ -99497,6 +104120,9 @@
 OUI:A81758*
  ID_OUI_FROM_DATABASE=Elektronik System i Umeå AB
 
+OUI:A81AF1*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:A81B18*
  ID_OUI_FROM_DATABASE=XTS CORP
 
@@ -99584,9 +104210,15 @@
 OUI:A83A48*
  ID_OUI_FROM_DATABASE=Ubiqcom India Pvt Ltd
 
+OUI:A83A79*
+ ID_OUI_FROM_DATABASE=Mist Systems, Inc.
+
 OUI:A83B5C*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:A83B76*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:A83CCB*
  ID_OUI_FROM_DATABASE=ROSSMA
 
@@ -99638,6 +104270,9 @@
 OUI:A83FA1E*
  ID_OUI_FROM_DATABASE=Guangzhou Navigateworx Technologies Co., Limited
 
+OUI:A8400B*
+ ID_OUI_FROM_DATABASE=Visteon Corporation
+
 OUI:A84025*
  ID_OUI_FROM_DATABASE=Oxide Computer Company
 
@@ -99710,6 +104345,9 @@
 OUI:A851AB*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:A852D4*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:A8537D*
  ID_OUI_FROM_DATABASE=Mist Systems, Inc.
 
@@ -99881,6 +104519,12 @@
 OUI:A870A5*
  ID_OUI_FROM_DATABASE=UniComm Inc.
 
+OUI:A87116*
+ ID_OUI_FROM_DATABASE=Earda Technologies co Ltd
+
+OUI:A8727E*
+ ID_OUI_FROM_DATABASE=WISDRI (wuhan) Automation Company Limited
+
 OUI:A87285*
  ID_OUI_FROM_DATABASE=IDT, INC.
 
@@ -99914,6 +104558,9 @@
 OUI:A87C01*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:A87CF8*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:A87D12*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -99926,6 +104573,9 @@
 OUI:A88038*
  ID_OUI_FROM_DATABASE=ShenZhen MovingComm Technology Co., Limited
 
+OUI:A88055*
+ ID_OUI_FROM_DATABASE=Tuya Smart Inc.
+
 OUI:A8817E*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -99959,6 +104609,9 @@
 OUI:A88808*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:A8881F*
+ ID_OUI_FROM_DATABASE=SERVERCOM (INDIA) PRIVATE LIMITED
+
 OUI:A88940*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -99974,6 +104627,9 @@
 OUI:A88E24*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:A88FD9*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:A89008*
  ID_OUI_FROM_DATABASE=Beijing Yuecheng Technology Co. Ltd.
 
@@ -100079,9 +104735,18 @@
 OUI:A8A795*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:A8AA7C*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
+OUI:A8ABB5*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:A8AD3D*
  ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
 
+OUI:A8B028*
+ ID_OUI_FROM_DATABASE=CubePilot Pty Ltd
+
 OUI:A8B088*
  ID_OUI_FROM_DATABASE=eero inc.
 
@@ -100094,6 +104759,9 @@
 OUI:A8B1D4*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:A8B271*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:A8B2DA*
  ID_OUI_FROM_DATABASE=FUJITSU LIMITED
 
@@ -100125,7 +104793,7 @@
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
 OUI:A8BD3A*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:A8BE27*
  ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -100148,6 +104816,12 @@
 OUI:A8C266*
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
 
+OUI:A8C56F*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
+OUI:A8C647*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:A8C83A*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -100220,6 +104894,9 @@
 OUI:A8DB03*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
+OUI:A8DC5A*
+ ID_OUI_FROM_DATABASE=Digital Watchdog
+
 OUI:A8DE68*
  ID_OUI_FROM_DATABASE=Beijing Wide Technology Co.,Ltd
 
@@ -100265,6 +104942,9 @@
 OUI:A8E978*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:A8EE6D*
+ ID_OUI_FROM_DATABASE=Fine Point-High Export
+
 OUI:A8EEC6*
  ID_OUI_FROM_DATABASE=Muuselabs NV/SA
 
@@ -100274,6 +104954,9 @@
 OUI:A8F038*
  ID_OUI_FROM_DATABASE=SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD
 
+OUI:A8F1B2*
+ ID_OUI_FROM_DATABASE=Allwinner Technology Co., Ltd
+
 OUI:A8F266*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -100298,6 +104981,9 @@
 OUI:A8F7E0*
  ID_OUI_FROM_DATABASE=PLANET Technology Corporation
 
+OUI:A8F8C9*
+ ID_OUI_FROM_DATABASE=NXP Semiconductor (Tianjin) LTD.
+
 OUI:A8F94B*
  ID_OUI_FROM_DATABASE=Eltex Enterprise Ltd.
 
@@ -100331,6 +105017,9 @@
 OUI:AA0004*
  ID_OUI_FROM_DATABASE=DIGITAL EQUIPMENT CORPORATION
 
+OUI:AC007A*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:AC00D0*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -100385,6 +105074,9 @@
 OUI:AC122F*
  ID_OUI_FROM_DATABASE=Fantasia Trading LLC
 
+OUI:AC128E*
+ ID_OUI_FROM_DATABASE=Shanghai Baud Data Communication Co.,Ltd.
+
 OUI:AC139C*
  ID_OUI_FROM_DATABASE=Adtran Inc
 
@@ -100403,12 +105095,18 @@
 OUI:AC15F4*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:AC1615*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:AC162D*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
 OUI:AC1702*
  ID_OUI_FROM_DATABASE=Fibar Group sp. z o.o.
 
+OUI:AC1754*
+ ID_OUI_FROM_DATABASE=tiko Energy Solutions AG
+
 OUI:AC17C8*
  ID_OUI_FROM_DATABASE=Cisco Meraki
 
@@ -100421,6 +105119,9 @@
 OUI:AC199F*
  ID_OUI_FROM_DATABASE=SUNGROW POWER SUPPLY CO.,LTD.
 
+OUI:AC1A3D*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:AC1D06*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -100470,7 +105171,7 @@
  ID_OUI_FROM_DATABASE=Duravit AG
 
 OUI:AC1E92*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:AC1E9E*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
@@ -100541,6 +105242,9 @@
 OUI:AC2FA8*
  ID_OUI_FROM_DATABASE=Humannix Co.,Ltd.
 
+OUI:AC3184*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:AC319D*
  ID_OUI_FROM_DATABASE=Shenzhen TG-NET Botone Technology Co.,Ltd.
 
@@ -100598,6 +105302,12 @@
 OUI:AC3D75*
  ID_OUI_FROM_DATABASE=HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.
 
+OUI:AC3D94*
+ ID_OUI_FROM_DATABASE=Arista Networks
+
+OUI:AC3EB1*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:AC3FA4*
  ID_OUI_FROM_DATABASE=TAIYO YUDEN CO.,LTD
 
@@ -100616,6 +105326,9 @@
 OUI:AC44F2*
  ID_OUI_FROM_DATABASE=YAMAHA CORPORATION
 
+OUI:AC4500*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:AC471B*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -100643,6 +105356,9 @@
 OUI:AC4BC8*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:AC4CA5*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:AC4D16*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -100677,7 +105393,7 @@
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:AC51EE*
- ID_OUI_FROM_DATABASE=Cambridge Communication Systems Ltd
+ ID_OUI_FROM_DATABASE=Adtran Inc
 
 OUI:AC5474*
  ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
@@ -100901,6 +105617,9 @@
 OUI:AC7A56*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:AC7A94*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:AC7BA1*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -100913,12 +105632,18 @@
 OUI:AC7F3E*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:AC800A*
+ ID_OUI_FROM_DATABASE=Sony Corporation
+
 OUI:AC80AE*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
 OUI:AC80D6*
  ID_OUI_FROM_DATABASE=Hexatronic AB
 
+OUI:AC80FB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:AC8112*
  ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
 
@@ -100958,6 +105683,9 @@
 OUI:AC867E*
  ID_OUI_FROM_DATABASE=Create New Technology (HK) Limited Company
 
+OUI:AC86A3*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:AC87A3*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -100967,6 +105695,9 @@
 OUI:AC8995*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
+OUI:AC89D2*
+ ID_OUI_FROM_DATABASE=Ciena Corporation
+
 OUI:AC8ACD*
  ID_OUI_FROM_DATABASE=ROGER D.Wensker, G.Wensker sp.j.
 
@@ -100977,7 +105708,7 @@
  ID_OUI_FROM_DATABASE=Primera Technology, Inc.
 
 OUI:AC8BA9*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:AC8D14*
  ID_OUI_FROM_DATABASE=Smartrove Inc
@@ -100991,9 +105722,18 @@
 OUI:AC8FF8*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:AC9073*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:AC9085*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:AC919B*
+ ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
+
+OUI:AC91A1*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:AC9232*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -101012,6 +105752,9 @@
 OUI:AC9572*
  ID_OUI_FROM_DATABASE=Jovision Technology Co., Ltd.
 
+OUI:AC965B*
+ ID_OUI_FROM_DATABASE=Lucid Motors
+
 OUI:AC976C*
  ID_OUI_FROM_DATABASE=Greenliant
 
@@ -101081,12 +105824,18 @@
 OUI:ACACE2*
  ID_OUI_FROM_DATABASE=CHANGHONG (HONGKONG) TRADING LIMITED
 
+OUI:ACAD4B*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:ACAE19*
  ID_OUI_FROM_DATABASE=Roku, Inc
 
 OUI:ACAFB9*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:ACB181*
+ ID_OUI_FROM_DATABASE=Belden Mooresville
+
 OUI:ACB1EE*
  ID_OUI_FROM_DATABASE=SHENZHEN FENDA TECHNOLOGY CO., LTD
 
@@ -101102,6 +105851,9 @@
 OUI:ACB57D*
  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
 
+OUI:ACB687*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
 OUI:ACB74F*
  ID_OUI_FROM_DATABASE=METEL s.r.o.
 
@@ -101117,6 +105869,9 @@
 OUI:ACBC32*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:ACBCB5*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:ACBCD9*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -101150,6 +105905,9 @@
 OUI:ACC358*
  ID_OUI_FROM_DATABASE=Continental Automotive Czech Republic s.r.o.
 
+OUI:ACC4A9*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:ACC4BD*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -101168,6 +105926,9 @@
 OUI:ACC73F*
  ID_OUI_FROM_DATABASE=VITSMO CO., LTD.
 
+OUI:ACC906*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:ACC935*
  ID_OUI_FROM_DATABASE=Ness Corporation
 
@@ -101186,6 +105947,9 @@
 OUI:ACCB09*
  ID_OUI_FROM_DATABASE=Hefcom Metering (Pty) Ltd
 
+OUI:ACCB36*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:ACCB51*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
@@ -101204,6 +105968,9 @@
 OUI:ACCF5C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:ACCF7B*
+ ID_OUI_FROM_DATABASE=INGRAM MICRO SERVICES
+
 OUI:ACCF85*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -101261,6 +106028,9 @@
 OUI:ACE069*
  ID_OUI_FROM_DATABASE=ISAAC Instruments
 
+OUI:ACE0D6*
+ ID_OUI_FROM_DATABASE=koreabts
+
 OUI:ACE14F*
  ID_OUI_FROM_DATABASE=Autonomic Controls, Inc.
 
@@ -101276,6 +106046,9 @@
 OUI:ACE348*
  ID_OUI_FROM_DATABASE=MadgeTech, Inc
 
+OUI:ACE403*
+ ID_OUI_FROM_DATABASE=Shenzhen Visteng Technology CO.,LTD
+
 OUI:ACE42E*
  ID_OUI_FROM_DATABASE=SK hynix
 
@@ -101321,6 +106094,9 @@
 OUI:ACEE3B*
  ID_OUI_FROM_DATABASE=6harmonics Inc
 
+OUI:ACEE64*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
 OUI:ACEE70*
  ID_OUI_FROM_DATABASE=Fontem Ventures BV
 
@@ -101363,6 +106139,9 @@
 OUI:ACFAA5*
  ID_OUI_FROM_DATABASE=digitron
 
+OUI:ACFC82*
+ ID_OUI_FROM_DATABASE=Shenzhen Sundray Technologies Company Limited
+
 OUI:ACFD93*
  ID_OUI_FROM_DATABASE=WEIFANG GOERTEK ELECTRONICS CO.,LTD
 
@@ -101375,6 +106154,9 @@
 OUI:ACFE05*
  ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
 
+OUI:ACFF6B*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:B00073*
  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
 
@@ -101453,6 +106235,9 @@
 OUI:B01F29*
  ID_OUI_FROM_DATABASE=Helvetia INC.
 
+OUI:B01F47*
+ ID_OUI_FROM_DATABASE=Heights Telecom T ltd
+
 OUI:B01F810*
  ID_OUI_FROM_DATABASE=Dalian GigaTec Electronics Co.,Ltd
 
@@ -101504,6 +106289,9 @@
 OUI:B01F8C*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
+OUI:B0216F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:B0227A*
  ID_OUI_FROM_DATABASE=HP Inc.
 
@@ -101618,6 +106406,9 @@
 OUI:B04414*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
+OUI:B0449C*
+ ID_OUI_FROM_DATABASE=Assa Abloy AB - Yale
+
 OUI:B04502*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -101657,6 +106448,9 @@
 OUI:B04A6A*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:B04B68*
+ ID_OUI_FROM_DATABASE=NAKAYO Inc
+
 OUI:B04BBF*
  ID_OUI_FROM_DATABASE=PT HAN SUNG ELECTORONICS INDONESIA
 
@@ -101735,6 +106529,9 @@
 OUI:B0672F*
  ID_OUI_FROM_DATABASE=Bowers & Wilkins
 
+OUI:B067B5*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B068B6*
  ID_OUI_FROM_DATABASE=Hangzhou OYE Technology Co. Ltd
 
@@ -101747,6 +106544,9 @@
 OUI:B06A41*
  ID_OUI_FROM_DATABASE=Google, Inc.
 
+OUI:B06BB3*
+ ID_OUI_FROM_DATABASE=GRT
+
 OUI:B06CBF*
  ID_OUI_FROM_DATABASE=3ality Digital Systems GmbH
 
@@ -101789,6 +106589,9 @@
 OUI:B077AC*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:B07839*
+ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+
 OUI:B07870*
  ID_OUI_FROM_DATABASE=Wi-NEXT, Inc.
 
@@ -101828,6 +106631,9 @@
 OUI:B0808C*
  ID_OUI_FROM_DATABASE=Laser Light Engines
 
+OUI:B08101*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
 OUI:B081D8*
  ID_OUI_FROM_DATABASE=I-sys Corp
 
@@ -101855,6 +106661,9 @@
 OUI:B08B92*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:B08BBE*
+ ID_OUI_FROM_DATABASE=ABL GmbH
+
 OUI:B08BCF*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -101897,6 +106706,9 @@
 OUI:B0966C*
  ID_OUI_FROM_DATABASE=Lanbowan Technology Ltd.
 
+OUI:B09738*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
+
 OUI:B0973A*
  ID_OUI_FROM_DATABASE=E-Fuel Corporation
 
@@ -101951,6 +106763,9 @@
 OUI:B0A72A*
  ID_OUI_FROM_DATABASE=Ensemble Designs, Inc.
 
+OUI:B0A732*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:B0A737*
  ID_OUI_FROM_DATABASE=Roku, Inc.
 
@@ -101990,6 +106805,9 @@
 OUI:B0B194*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:B0B21C*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:B0B28F*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -102071,6 +106889,9 @@
 OUI:B0BBE5*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:B0BC7A*
+ ID_OUI_FROM_DATABASE=Harman/Becker Automotive Systems GmbH
+
 OUI:B0BD1B*
  ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co., Ltd.
 
@@ -102203,6 +107024,9 @@
 OUI:B0CF4D*
  ID_OUI_FROM_DATABASE=MI-Zone Technology Ireland
 
+OUI:B0CFCB*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:B0D09C*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -102278,6 +107102,9 @@
 OUI:B0E5ED*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:B0E5EF*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B0E5F9*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -102305,6 +107132,9 @@
 OUI:B0EB57*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:B0EB7F*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:B0EC71*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -102362,6 +107192,9 @@
 OUI:B0FC36*
  ID_OUI_FROM_DATABASE=CyberTAN Technology Inc.
 
+OUI:B0FC88*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:B0FD0B0*
  ID_OUI_FROM_DATABASE=TAE HYUNG Industrial Electronics Co., Ltd.
 
@@ -102428,6 +107261,9 @@
 OUI:B40418*
  ID_OUI_FROM_DATABASE=Smartchip Integrated Inc.
 
+OUI:B40421*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:B4055D*
  ID_OUI_FROM_DATABASE=Inspur Electronic Information Industry Co.,Ltd.
 
@@ -102446,6 +107282,9 @@
 OUI:B40AC6*
  ID_OUI_FROM_DATABASE=DEXON Systems Ltd.
 
+OUI:B40B1D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:B40B44*
  ID_OUI_FROM_DATABASE=Smartisan Technology Co., Ltd.
 
@@ -102495,7 +107334,7 @@
  ID_OUI_FROM_DATABASE=DTI Group Ltd
 
 OUI:B417A8*
- ID_OUI_FROM_DATABASE=Facebook Technologies, LLC
+ ID_OUI_FROM_DATABASE=Meta Platforms Technologies, LLC
 
 OUI:B418D1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -102590,6 +107429,9 @@
 OUI:B4346C*
  ID_OUI_FROM_DATABASE=MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED
 
+OUI:B43522*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:B43564*
  ID_OUI_FROM_DATABASE=Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.
 
@@ -102671,6 +107513,9 @@
 OUI:B43A28*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:B43A31*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:B43AE2*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -102794,6 +107639,12 @@
 OUI:B456E3*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:B456FA*
+ ID_OUI_FROM_DATABASE=IOPSYS Software Solutions
+
+OUI:B457E6*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:B45861*
  ID_OUI_FROM_DATABASE=CRemote, LLC
 
@@ -102815,6 +107666,12 @@
 OUI:B460ED*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
+OUI:B46142*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:B461E9*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
 OUI:B461FF*
  ID_OUI_FROM_DATABASE=Lumigon A/S
 
@@ -102827,6 +107684,9 @@
 OUI:B462AD*
  ID_OUI_FROM_DATABASE=Elysia Germany GmbH
 
+OUI:B4636F*
+ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
+
 OUI:B46698*
  ID_OUI_FROM_DATABASE=Zealabs srl
 
@@ -102851,6 +107711,9 @@
 OUI:B46D83*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:B46DC2*
+ ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.，LTD
+
 OUI:B46E08*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -102926,6 +107789,9 @@
 OUI:B48351*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:B484D5*
+ ID_OUI_FROM_DATABASE=GooWi Wireless Technology Co., Limited
+
 OUI:B48547*
  ID_OUI_FROM_DATABASE=Amptown System Company GmbH
 
@@ -102962,6 +107828,9 @@
 OUI:B49842*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:B49882*
+ ID_OUI_FROM_DATABASE=Brusa HyPower AG
+
 OUI:B4994C*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -102983,6 +107852,9 @@
 OUI:B49DB4*
  ID_OUI_FROM_DATABASE=Axion Technologies Inc.
 
+OUI:B49DFD*
+ ID_OUI_FROM_DATABASE=Shenzhen SDMC Technology CO.,Ltd.
+
 OUI:B49E80*
  ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
 
@@ -103106,6 +107978,9 @@
 OUI:B4AC8C*
  ID_OUI_FROM_DATABASE=Bern University of Applied Sciences
 
+OUI:B4AC9D*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:B4ADA3*
  ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
 
@@ -103115,6 +107990,9 @@
 OUI:B4AE6F*
  ID_OUI_FROM_DATABASE=Circle Reliance, Inc DBA Cranberry Networks
 
+OUI:B4AEC1*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B4B017*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
@@ -103166,6 +108044,9 @@
 OUI:B4B88D*
  ID_OUI_FROM_DATABASE=Thuh Company
 
+OUI:B4B9E6*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:B4BA02*
  ID_OUI_FROM_DATABASE=Agatel Ltd
 
@@ -103190,6 +108071,9 @@
 OUI:B4C26A*
  ID_OUI_FROM_DATABASE=Garmin International
 
+OUI:B4C2F7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:B4C44E*
  ID_OUI_FROM_DATABASE=VXL eTech Pvt Ltd
 
@@ -103217,6 +108101,9 @@
 OUI:B4CB57*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
+OUI:B4CBB8*
+ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
+
 OUI:B4CC04*
  ID_OUI_FROM_DATABASE=Piranti
 
@@ -103265,6 +108152,9 @@
 OUI:B4D8DE*
  ID_OUI_FROM_DATABASE=iota Computing, Inc.
 
+OUI:B4DB91*
+ ID_OUI_FROM_DATABASE=CELESTICA INC.
+
 OUI:B4DC09*
  ID_OUI_FROM_DATABASE=Guangzhou Dawei Communication Co.,Ltd
 
@@ -103302,7 +108192,7 @@
  ID_OUI_FROM_DATABASE=Private
 
 OUI:B4E265*
- ID_OUI_FROM_DATABASE=Shenzhen SDMC Technology Co.,LTD
+ ID_OUI_FROM_DATABASE=Shenzhen SDMC Technology CO.,Ltd.
 
 OUI:B4E3F9*
  ID_OUI_FROM_DATABASE=Silicon Laboratories
@@ -103310,6 +108200,12 @@
 OUI:B4E454*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
+OUI:B4E46B*
+ ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+
+OUI:B4E54C*
+ ID_OUI_FROM_DATABASE=LLC Elektra
+
 OUI:B4E62A*
  ID_OUI_FROM_DATABASE=LG Innotek
 
@@ -103346,6 +108242,9 @@
 OUI:B4ED54*
  ID_OUI_FROM_DATABASE=Wohler Technologies
 
+OUI:B4EDD5*
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
+
 OUI:B4EE25*
  ID_OUI_FROM_DATABASE=Shenzhen Belon Technology CO.,LTD
 
@@ -103407,7 +108306,7 @@
  ID_OUI_FROM_DATABASE=AltoBeam (China) Inc.
 
 OUI:B4FBE4*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:B4FBF9*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -103472,6 +108371,9 @@
 OUI:B81413*
  ID_OUI_FROM_DATABASE=Keen High Holding(HK) Ltd.
 
+OUI:B8144D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B8145C*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -103481,6 +108383,9 @@
 OUI:B81619*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:B8165F*
+ ID_OUI_FROM_DATABASE=LG Innotek
+
 OUI:B816DB*
  ID_OUI_FROM_DATABASE=CHANT SINCERE CO.,LTD
 
@@ -103503,7 +108408,7 @@
  ID_OUI_FROM_DATABASE=Apption Labs Limited
 
 OUI:B8208E*
- ID_OUI_FROM_DATABASE=Panasonic Corporation  Connected Solutions Company
+ ID_OUI_FROM_DATABASE=Panasonic Connect Co., Ltd.
 
 OUI:B820E7*
  ID_OUI_FROM_DATABASE=Guangzhou Horizontal Information & Network Integration Co. Ltd
@@ -103586,12 +108491,18 @@
 OUI:B83765*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
+OUI:B837B2*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:B83861*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:B838CA*
  ID_OUI_FROM_DATABASE=Kyokko Tsushin System CO.,LTD
 
+OUI:B838EF*
+ ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd.
+
 OUI:B83A08*
  ID_OUI_FROM_DATABASE=Tenda Technology Co.,Ltd.Dongguan branch
 
@@ -103607,9 +108518,15 @@
 OUI:B83BCC*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:B83C28*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B83D4E*
  ID_OUI_FROM_DATABASE=Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch
 
+OUI:B83DFB*
+ ID_OUI_FROM_DATABASE=Bouffalo Lab (Nanjing) Co., Ltd.
+
 OUI:B83E59*
  ID_OUI_FROM_DATABASE=Roku, Inc.
 
@@ -103643,6 +108560,9 @@
 OUI:B848AA*
  ID_OUI_FROM_DATABASE=EM Microelectronic
 
+OUI:B8496D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B84D43*
  ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
 
@@ -103697,12 +108617,18 @@
 OUI:B85AFE*
  ID_OUI_FROM_DATABASE=Handaer Communication Technology (Beijing) Co., Ltd
 
+OUI:B85CEE*
+ ID_OUI_FROM_DATABASE=Baidu Online Network Technology (Beijing) Co., Ltd
+
 OUI:B85D0A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:B85DC3*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:B85E71*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:B85E7B*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -103712,6 +108638,9 @@
 OUI:B85FB0*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:B86061*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
 OUI:B86091*
  ID_OUI_FROM_DATABASE=Onnet Technologies and Innovations LLC
 
@@ -103751,6 +108680,9 @@
 OUI:B86A97*
  ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
 
+OUI:B86AF1*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:B86B23*
  ID_OUI_FROM_DATABASE=Toshiba
 
@@ -103796,6 +108728,9 @@
 OUI:B87C6F*
  ID_OUI_FROM_DATABASE=NXP (China) Management Ltd.
 
+OUI:B87CD0*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:B87CF2*
  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
 
@@ -103904,6 +108839,9 @@
 OUI:B894D2*
  ID_OUI_FROM_DATABASE=Retail Innovation HTT AB
 
+OUI:B894D9*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:B894E7*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
@@ -103976,12 +108914,18 @@
 OUI:B8A44F*
  ID_OUI_FROM_DATABASE=Axis Communications AB
 
+OUI:B8A535*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:B8A58D*
  ID_OUI_FROM_DATABASE=Axe Group Holdings Limited
 
 OUI:B8A8AF*
  ID_OUI_FROM_DATABASE=Logic S.p.A.
 
+OUI:B8AB62*
+ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+
 OUI:B8AC6F*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -104009,6 +108953,9 @@
 OUI:B8B2EB*
  ID_OUI_FROM_DATABASE=Googol Technology (HK) Limited
 
+OUI:B8B2F7*
+ ID_OUI_FROM_DATABASE=DRIMAES INC.
+
 OUI:B8B2F8*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -104135,6 +109082,9 @@
 OUI:B8D06F*
  ID_OUI_FROM_DATABASE=GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE
 
+OUI:B8D0F0*
+ ID_OUI_FROM_DATABASE=FCNT LMITED
+
 OUI:B8D309*
  ID_OUI_FROM_DATABASE=Cox Communications, Inc
 
@@ -104144,6 +109094,9 @@
 OUI:B8D49D*
  ID_OUI_FROM_DATABASE=M Seven System Ltd.
 
+OUI:B8D4BC*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:B8D4E7*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
@@ -104267,6 +109220,9 @@
 OUI:B8E937*
  ID_OUI_FROM_DATABASE=Sonos, Inc.
 
+OUI:B8EA98*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:B8EAAA*
  ID_OUI_FROM_DATABASE=ICG NETWORKS CO.,ltd
 
@@ -104288,6 +109244,9 @@
 OUI:B8F009*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:B8F015*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:B8F080*
  ID_OUI_FROM_DATABASE=SPS, INC.
 
@@ -104363,6 +109322,9 @@
 OUI:BC024A*
  ID_OUI_FROM_DATABASE=HMD Global Oy
 
+OUI:BC026E*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:BC0358*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -104396,6 +109358,9 @@
 OUI:BC0FA7*
  ID_OUI_FROM_DATABASE=Ouster
 
+OUI:BC107B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:BC125E*
  ID_OUI_FROM_DATABASE=Beijing  WisVideo  INC.
 
@@ -104411,6 +109376,9 @@
 OUI:BC14EF*
  ID_OUI_FROM_DATABASE=ITON Technology Limited
 
+OUI:BC1541*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:BC15A6*
  ID_OUI_FROM_DATABASE=Taiwan Jantek Electronics,Ltd.
 
@@ -104531,9 +109499,15 @@
 OUI:BC325F*
  ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
 
+OUI:BC32B2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:BC3329*
  ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
 
+OUI:BC3340*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
 OUI:BC33AC*
  ID_OUI_FROM_DATABASE=Silicon Laboratories
 
@@ -104651,12 +109625,18 @@
 OUI:BC455B*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:BC458C*
+ ID_OUI_FROM_DATABASE=Shenzhen Topwise Communication Co.,Ltd
+
 OUI:BC4699*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
 OUI:BC4760*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:BC49B2*
+ ID_OUI_FROM_DATABASE=SHENZHEN ALONG COMMUNICATION TECH CO., LTD
+
 OUI:BC4A56*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -104681,6 +109661,9 @@
 OUI:BC51FE*
  ID_OUI_FROM_DATABASE=Swann communications Pty Ltd
 
+OUI:BC5274*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:BC52B4*
  ID_OUI_FROM_DATABASE=Nokia
 
@@ -104717,6 +109700,9 @@
 OUI:BC5DA3*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
 
+OUI:BC5E33*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:BC5EA1*
  ID_OUI_FROM_DATABASE=PsiKick, Inc.
 
@@ -104753,6 +109739,9 @@
 OUI:BC644B*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:BC64D9*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:BC66410*
  ID_OUI_FROM_DATABASE=InSync Technology Ltd
 
@@ -104834,6 +109823,9 @@
 OUI:BC6B4D*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:BC6BFF*
+ ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+
 OUI:BC6C21*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -104858,6 +109850,9 @@
 OUI:BC72B1*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:BC73A4*
+ ID_OUI_FROM_DATABASE=ANDA TELECOM PVT LTD
+
 OUI:BC74D7*
  ID_OUI_FROM_DATABASE=HangZhou JuRu Technology CO.,LTD
 
@@ -104936,6 +109931,9 @@
 OUI:BC88C3*
  ID_OUI_FROM_DATABASE=Ningbo Dooya Mechanic & Electronic Technology Co., Ltd
 
+OUI:BC89A7*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:BC8AA3*
  ID_OUI_FROM_DATABASE=NHN Entertainment
 
@@ -104960,6 +109958,9 @@
 OUI:BC926B*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:BC9307*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:BC9325*
  ID_OUI_FROM_DATABASE=Ningbo Joyson Preh Car Connect Co.,Ltd.
 
@@ -105053,6 +110054,12 @@
 OUI:BC9DA5*
  ID_OUI_FROM_DATABASE=DASCOM Europe GmbH
 
+OUI:BC9E2C*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
+OUI:BC9EBB*
+ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+
 OUI:BC9FE4*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
@@ -105098,6 +110105,9 @@
 OUI:BCAD28*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
+OUI:BCAD90*
+ ID_OUI_FROM_DATABASE=Kymeta Purchasing
+
 OUI:BCADAB*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
@@ -105116,6 +110126,9 @@
 OUI:BCB181*
  ID_OUI_FROM_DATABASE=SHARP CORPORATION
 
+OUI:BCB1D3*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
 OUI:BCB1F3*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -105131,6 +110144,9 @@
 OUI:BCB863*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:BCB923*
+ ID_OUI_FROM_DATABASE=Alta Networks
+
 OUI:BCBAC2*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
@@ -105143,6 +110159,9 @@
 OUI:BCBC46*
  ID_OUI_FROM_DATABASE=SKS Welding Systems GmbH
 
+OUI:BCBD84*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:BCBD9E*
  ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
 
@@ -105161,6 +110180,9 @@
 OUI:BCC342*
  ID_OUI_FROM_DATABASE=Panasonic Communications Co., Ltd.
 
+OUI:BCC427*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:BCC493*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -105197,6 +110219,9 @@
 OUI:BCD074*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:BCD0EB*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:BCD11F*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -105222,7 +110247,7 @@
  ID_OUI_FROM_DATABASE=Owl Labs
 
 OUI:BCD767*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=BAE Systems Apllied Intelligence
 
 OUI:BCD7A5*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
@@ -105245,6 +110270,9 @@
 OUI:BCDF58*
  ID_OUI_FROM_DATABASE=Google, Inc.
 
+OUI:BCE001*
+ ID_OUI_FROM_DATABASE=SHENZHEN NETIS TECHNOLOGY CO.,LTD
+
 OUI:BCE09D*
  ID_OUI_FROM_DATABASE=Eoslink
 
@@ -105272,6 +110300,9 @@
 OUI:BCE796*
  ID_OUI_FROM_DATABASE=Wireless CCTV Ltd
 
+OUI:BCE8FA*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:BCE92F*
  ID_OUI_FROM_DATABASE=HP Inc.
 
@@ -105317,6 +110348,9 @@
 OUI:BCF45F*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:BCF499*
+ ID_OUI_FROM_DATABASE=Rockwell Automation
+
 OUI:BCF4D4*
  ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
 
@@ -105329,6 +110363,9 @@
 OUI:BCF685*
  ID_OUI_FROM_DATABASE=D-Link International
 
+OUI:BCF730*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:BCF811*
  ID_OUI_FROM_DATABASE=Xiamen DNAKE Technology Co.,Ltd
 
@@ -105413,6 +110450,9 @@
 OUI:C0174D*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:C01754*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:C01803*
  ID_OUI_FROM_DATABASE=HP Inc.
 
@@ -105485,6 +110525,9 @@
 OUI:C02BFC*
  ID_OUI_FROM_DATABASE=iNES. applied informatics GmbH
 
+OUI:C02C17*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:C02C5C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -105498,7 +110541,7 @@
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
 OUI:C02E26*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=iRhythm Technologies, Inc.
 
 OUI:C02FF1*
  ID_OUI_FROM_DATABASE=Volta Networks
@@ -105602,6 +110645,9 @@
 OUI:C04754*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:C04884*
+ ID_OUI_FROM_DATABASE=Sigma Bilisim Sist. Tekn. Elk. Enj. ve San. D??. Tic. Ltd. ?ti.
+
 OUI:C048E6*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -105629,6 +110675,12 @@
 OUI:C04E30*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:C04E8A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:C0515C*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:C0517E*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
@@ -105656,6 +110708,9 @@
 OUI:C06118*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:C0613D*
+ ID_OUI_FROM_DATABASE=BioIntelliSense, Inc.
+
 OUI:C0619A0*
  ID_OUI_FROM_DATABASE=Paragon Robotics LLC
 
@@ -105722,6 +110777,9 @@
 OUI:C067AF*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:C068CC*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
+
 OUI:C06911*
  ID_OUI_FROM_DATABASE=Arista Networks
 
@@ -105743,6 +110801,9 @@
 OUI:C07009*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:C071AA*
+ ID_OUI_FROM_DATABASE=ShenZhen OnMicro Electronics Co.,Ltd.
+
 OUI:C0742B*
  ID_OUI_FROM_DATABASE=SHENZHEN XUNLONG SOFTWARE CO.,LIMITED
 
@@ -105833,6 +110894,9 @@
 OUI:C08488*
  ID_OUI_FROM_DATABASE=Finis Inc
 
+OUI:C084E0*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:C0854C*
  ID_OUI_FROM_DATABASE=Ragentek Technology Group
 
@@ -105863,6 +110927,9 @@
 OUI:C08B05*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:C08B2A*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:C08B6F*
  ID_OUI_FROM_DATABASE=S I Sistemas Inteligentes Eletrônicos Ltda
 
@@ -105876,7 +110943,7 @@
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
 OUI:C08F20*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:C09132*
  ID_OUI_FROM_DATABASE=Patriot Memory
@@ -105884,6 +110951,9 @@
 OUI:C09134*
  ID_OUI_FROM_DATABASE=ProCurve Networking by HP
 
+OUI:C091B9*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:C09296*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -105893,6 +110963,12 @@
 OUI:C094AD*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:C0956D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:C09573*
+ ID_OUI_FROM_DATABASE=AIxLink
+
 OUI:C095DA*
  ID_OUI_FROM_DATABASE=NXP India Private Limited
 
@@ -106016,6 +111092,9 @@
 OUI:C0A5DD*
  ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
 
+OUI:C0A5E8*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:C0A600*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -106049,6 +111128,9 @@
 OUI:C0B357*
  ID_OUI_FROM_DATABASE=Yoshiki Electronics Industry Ltd.
 
+OUI:C0B3C8*
+ ID_OUI_FROM_DATABASE=LLC NTC Rotek
+
 OUI:C0B47D*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -106094,6 +111176,9 @@
 OUI:C0BFA7*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:C0BFAC*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:C0BFC0*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -106118,6 +111203,9 @@
 OUI:C0C687*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
+OUI:C0C70A*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:C0C946*
  ID_OUI_FROM_DATABASE=MITSUYA LABORATORIES INC.
 
@@ -106203,7 +111291,7 @@
  ID_OUI_FROM_DATABASE=Alpha Audiotronics, Inc.
 
 OUI:C0D391B*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Celliber Technologies Pvt Limited
 
 OUI:C0D391C*
  ID_OUI_FROM_DATABASE=Zhinengguo technology company limited
@@ -106248,7 +111336,7 @@
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:C0DD8A*
- ID_OUI_FROM_DATABASE=Facebook Technologies, LLC
+ ID_OUI_FROM_DATABASE=Meta Platforms Technologies, LLC
 
 OUI:C0DF77*
  ID_OUI_FROM_DATABASE=Conrad Electronic SE
@@ -106289,6 +111377,51 @@
 OUI:C0E911*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:C0EAC30*
+ ID_OUI_FROM_DATABASE=Anhui Shengjiaruiduo Electronic Technology Co., Ltd.
+
+OUI:C0EAC31*
+ ID_OUI_FROM_DATABASE=Dongguan Wecxw CO.,Ltd.
+
+OUI:C0EAC32*
+ ID_OUI_FROM_DATABASE=NEXSEC Incorporated
+
+OUI:C0EAC33*
+ ID_OUI_FROM_DATABASE=Hangzhou Qixun Technology Co., Ltd
+
+OUI:C0EAC34*
+ ID_OUI_FROM_DATABASE=Tokoz a.s.
+
+OUI:C0EAC35*
+ ID_OUI_FROM_DATABASE=Techem Energy Services GmbH
+
+OUI:C0EAC36*
+ ID_OUI_FROM_DATABASE=Worldpass industrial Company Limited
+
+OUI:C0EAC37*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:C0EAC38*
+ ID_OUI_FROM_DATABASE=CDSTech
+
+OUI:C0EAC39*
+ ID_OUI_FROM_DATABASE=OLEDCOMM
+
+OUI:C0EAC3A*
+ ID_OUI_FROM_DATABASE=VOLT EQUIPAMENTOS ELETRONICOS LTDA
+
+OUI:C0EAC3B*
+ ID_OUI_FROM_DATABASE=SeongHo Information and Communication Corp.
+
+OUI:C0EAC3C*
+ ID_OUI_FROM_DATABASE=Trumeter
+
+OUI:C0EAC3D*
+ ID_OUI_FROM_DATABASE=Kontron Asia Technology Inc.
+
+OUI:C0EAC3E*
+ ID_OUI_FROM_DATABASE=Beijing Zhongyuanyishang Technology Co Ltd
+
 OUI:C0EAE4*
  ID_OUI_FROM_DATABASE=Sonicwall
 
@@ -106439,6 +111572,9 @@
 OUI:C4047B*
  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
 
+OUI:C404D8*
+ ID_OUI_FROM_DATABASE=Aviva Links Inc.
+
 OUI:C40528*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -106613,6 +111749,9 @@
 OUI:C4346B*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:C435D9*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:C43655*
  ID_OUI_FROM_DATABASE=Shenzhen Fenglian Technology Co., Ltd.
 
@@ -106674,7 +111813,7 @@
  ID_OUI_FROM_DATABASE=Belkin International Inc.
 
 OUI:C44137*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
 OUI:C44202*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -106742,6 +111881,9 @@
 OUI:C4518D*
  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
 
+OUI:C45379*
+ ID_OUI_FROM_DATABASE=Micronview Limited Liability Company
+
 OUI:C45444*
  ID_OUI_FROM_DATABASE=Quanta Computer Inc.
 
@@ -106772,6 +111914,9 @@
 OUI:C45A86*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:C45AB1*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:C45BBE*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -106793,6 +111938,9 @@
 OUI:C4618B*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:C461C7*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:C4626B*
  ID_OUI_FROM_DATABASE=ZPT Vigantice
 
@@ -106814,12 +111962,18 @@
 OUI:C464E3*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:C464F2*
+ ID_OUI_FROM_DATABASE=Infinix mobility limited
+
 OUI:C46516*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
 OUI:C46699*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:C4678B*
+ ID_OUI_FROM_DATABASE=Alphabet Capital Sdn Bhd
+
 OUI:C467B5*
  ID_OUI_FROM_DATABASE=Libratone A/S
 
@@ -106886,6 +112040,9 @@
 OUI:C475AB*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:C475EA*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:C477AB*
  ID_OUI_FROM_DATABASE=Beijing ASU Tech Co.,Ltd
 
@@ -106895,9 +112052,15 @@
 OUI:C478A2*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:C47905*
+ ID_OUI_FROM_DATABASE=Zhejiang Uniview Technologies Co.,Ltd.
+
 OUI:C47B2F*
  ID_OUI_FROM_DATABASE=Beijing JoinHope Image Technology Ltd.
 
+OUI:C47B80*
+ ID_OUI_FROM_DATABASE=Protempis, LLC
+
 OUI:C47BA3*
  ID_OUI_FROM_DATABASE=NAVIS Inc.
 
@@ -106979,6 +112142,51 @@
 OUI:C4836F*
  ID_OUI_FROM_DATABASE=Ciena Corporation
 
+OUI:C483720*
+ ID_OUI_FROM_DATABASE=Compumedics Germany GmbH
+
+OUI:C483721*
+ ID_OUI_FROM_DATABASE=Shenzhen King Will Technology Co., LTD
+
+OUI:C483722*
+ ID_OUI_FROM_DATABASE=AI-RIDER CORPORATION
+
+OUI:C483723*
+ ID_OUI_FROM_DATABASE=NextSilicon
+
+OUI:C483724*
+ ID_OUI_FROM_DATABASE=Transact Technologies Inc
+
+OUI:C483725*
+ ID_OUI_FROM_DATABASE=Wuhan Da Ta Technologies Co.,Ltd.
+
+OUI:C483726*
+ ID_OUI_FROM_DATABASE=Netplus Co., Ltd.
+
+OUI:C483727*
+ ID_OUI_FROM_DATABASE=clk2.inc
+
+OUI:C483728*
+ ID_OUI_FROM_DATABASE=ACCELECOM LTD.
+
+OUI:C483729*
+ ID_OUI_FROM_DATABASE=Biwave Technologies, Inc.
+
+OUI:C48372A*
+ ID_OUI_FROM_DATABASE=VIE STYLE,INC,
+
+OUI:C48372B*
+ ID_OUI_FROM_DATABASE=care.ai
+
+OUI:C48372C*
+ ID_OUI_FROM_DATABASE=Acenew technology(shenzhen) limited company
+
+OUI:C48372D*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:C48372E*
+ ID_OUI_FROM_DATABASE=Suzhou LZY technology Co.,Ltd
+
 OUI:C48466*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -107099,9 +112307,57 @@
 OUI:C49886*
  ID_OUI_FROM_DATABASE=Qorvo International Pte. Ltd.
 
+OUI:C498940*
+ ID_OUI_FROM_DATABASE=Shenzhen Megmeet Drive Technology Co.,Ltd.
+
+OUI:C498941*
+ ID_OUI_FROM_DATABASE=SEAVIEW TELECOM
+
+OUI:C498942*
+ ID_OUI_FROM_DATABASE=Metasphere Ltd
+
+OUI:C498943*
+ ID_OUI_FROM_DATABASE=BTL Industries JSC
+
+OUI:C498944*
+ ID_OUI_FROM_DATABASE=Alpine Electronics Marketing, Inc.
+
+OUI:C498945*
+ ID_OUI_FROM_DATABASE=shenzhen lanodo technology Co., Ltd
+
+OUI:C498946*
+ ID_OUI_FROM_DATABASE=Aetina Corporation
+
+OUI:C498947*
+ ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd.
+
+OUI:C498948*
+ ID_OUI_FROM_DATABASE=Pliem (Shanghai) Intelligent Technology Co., Ltd
+
+OUI:C498949*
+ ID_OUI_FROM_DATABASE=Shenzhen  Hexin Automation Technology Co.,Ltd.
+
+OUI:C49894A*
+ ID_OUI_FROM_DATABASE=Neron Informatics Pvt Ltd
+
+OUI:C49894B*
+ ID_OUI_FROM_DATABASE=Shanghai YVR Technology Co., Ltd.
+
+OUI:C49894C*
+ ID_OUI_FROM_DATABASE=Zhejiang Rexense loT Technology Co., Ltd
+
+OUI:C49894D*
+ ID_OUI_FROM_DATABASE=Jiangsu AIDriving Co.,Ltd.
+
+OUI:C49894E*
+ ID_OUI_FROM_DATABASE=Hans Sasserath GmbH & Co. KG
+
 OUI:C49A02*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
+OUI:C49D08*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:C49DED*
  ID_OUI_FROM_DATABASE=Microsoft Corporation
 
@@ -107114,8 +112370,11 @@
 OUI:C49FF3*
  ID_OUI_FROM_DATABASE=Mciao Technologies, Inc.
 
+OUI:C4A052*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
 OUI:C4A10E0*
- ID_OUI_FROM_DATABASE=HYOSUNG HEAVY INDUSTRIES
+ ID_OUI_FROM_DATABASE=HYOSUNG Heavy Industries Corporation
 
 OUI:C4A10E1*
  ID_OUI_FROM_DATABASE=BARTEC PIXAVI AS
@@ -107162,12 +112421,63 @@
 OUI:C4A151*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
 
+OUI:C4A1AE*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:C4A366*
  ID_OUI_FROM_DATABASE=zte corporation
 
 OUI:C4A402*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:C4A5590*
+ ID_OUI_FROM_DATABASE=Archermind Japan Co.,Ltd.
+
+OUI:C4A5591*
+ ID_OUI_FROM_DATABASE=Motive Technologies, Inc.
+
+OUI:C4A5592*
+ ID_OUI_FROM_DATABASE=SHENZHEN ORFA TECH CO., LTD
+
+OUI:C4A5593*
+ ID_OUI_FROM_DATABASE=X-speed lnformation Technology Co.,Ltd
+
+OUI:C4A5594*
+ ID_OUI_FROM_DATABASE=Private
+
+OUI:C4A5595*
+ ID_OUI_FROM_DATABASE=Moultrie Mobile
+
+OUI:C4A5596*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:C4A5597*
+ ID_OUI_FROM_DATABASE=Aviron Interactive Inc.
+
+OUI:C4A5598*
+ ID_OUI_FROM_DATABASE=METICS
+
+OUI:C4A5599*
+ ID_OUI_FROM_DATABASE=Shenzhen Meishifu Technology Co.,Ltd.
+
+OUI:C4A559A*
+ ID_OUI_FROM_DATABASE=Hebei Far-East Communication System Engineerning Co.,Ltd.
+
+OUI:C4A559B*
+ ID_OUI_FROM_DATABASE=SMH Technologies SRL
+
+OUI:C4A559C*
+ ID_OUI_FROM_DATABASE=ALTAM SYSTEMS SL
+
+OUI:C4A559D*
+ ID_OUI_FROM_DATABASE=MINOLTA SECURITY
+
+OUI:C4A559E*
+ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+
+OUI:C4A64E*
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
+
 OUI:C4A72B*
  ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
 
@@ -107177,12 +112487,18 @@
 OUI:C4AAA1*
  ID_OUI_FROM_DATABASE=SUMMIT DEVELOPMENT, spol.s r.o.
 
+OUI:C4AAC4*
+ ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
+
 OUI:C4ABB2*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
 OUI:C4AC59*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
+OUI:C4ACAA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:C4AD21*
  ID_OUI_FROM_DATABASE=MEDIAEDGE Corporation
 
@@ -107252,6 +112568,9 @@
 OUI:C4C138*
  ID_OUI_FROM_DATABASE=OWLink Technology Inc
 
+OUI:C4C17D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:C4C19F*
  ID_OUI_FROM_DATABASE=National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
 
@@ -107285,6 +112604,9 @@
 OUI:C4CB6B*
  ID_OUI_FROM_DATABASE=Airista Flow, Inc.
 
+OUI:C4CBE1*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:C4CD45*
  ID_OUI_FROM_DATABASE=Beijing Boomsense Technology CO.,LTD.
 
@@ -107297,12 +112619,18 @@
 OUI:C4D197*
  ID_OUI_FROM_DATABASE=Ventia Utility Services
 
+OUI:C4D36A*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:C4D438*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:C4D489*
  ID_OUI_FROM_DATABASE=JiangSu Joyque Information Industry Co.,Ltd
 
+OUI:C4D496*
+ ID_OUI_FROM_DATABASE=Shenzhen Excelsecu Data Technology Co.,Ltd
+
 OUI:C4D655*
  ID_OUI_FROM_DATABASE=Tercel technology co.,ltd
 
@@ -107324,6 +112652,9 @@
 OUI:C4DA7D*
  ID_OUI_FROM_DATABASE=Ivium Technologies B.V.
 
+OUI:C4DB04*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:C4DD57*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -107363,6 +112694,9 @@
 OUI:C4E532*
  ID_OUI_FROM_DATABASE=Arcadyan Corporation
 
+OUI:C4E5B1*
+ ID_OUI_FROM_DATABASE=Suzhou PanKore Integrated Circuit Technology Co. Ltd.
+
 OUI:C4E7BE*
  ID_OUI_FROM_DATABASE=SCSpro Co.,Ltd
 
@@ -107381,6 +112715,15 @@
 OUI:C4EB39*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:C4EB41*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
+OUI:C4EB42*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
+OUI:C4EB43*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:C4EBE3*
  ID_OUI_FROM_DATABASE=RRCN SAS
 
@@ -107396,6 +112739,9 @@
 OUI:C4EF70*
  ID_OUI_FROM_DATABASE=Home Skinovations
 
+OUI:C4EFDA*
+ ID_OUI_FROM_DATABASE=Honeywell
+
 OUI:C4F081*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -107435,6 +112781,9 @@
 OUI:C4FBC8*
  ID_OUI_FROM_DATABASE=Shenzhen Candour Co., Ltd.
 
+OUI:C4FC22*
+ ID_OUI_FROM_DATABASE=YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+
 OUI:C4FCE4*
  ID_OUI_FROM_DATABASE=DishTV NZ Ltd
 
@@ -107537,6 +112886,9 @@
 OUI:C809A8*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:C80A35*
+ ID_OUI_FROM_DATABASE=Qingdao Hisense Smart Life Technology Co., Ltd
+
 OUI:C80AA9*
  ID_OUI_FROM_DATABASE=Quanta Computer Inc.
 
@@ -107562,7 +112914,7 @@
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:C8138B*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:C81451*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -107603,6 +112955,9 @@
 OUI:C81E8E*
  ID_OUI_FROM_DATABASE=ADV Security (S) Pte Ltd
 
+OUI:C81EC2*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
 OUI:C81EE7*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -107633,15 +112988,27 @@
 OUI:C82832*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co., Ltd.
 
+OUI:C828E5*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:C8292A*
  ID_OUI_FROM_DATABASE=Barun Electronics
 
+OUI:C829C8*
+ ID_OUI_FROM_DATABASE=Palo Alto Networks
+
 OUI:C82A14*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:C82ADD*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:C82AF1*
  ID_OUI_FROM_DATABASE=TCT mobile ltd
 
+OUI:C82B6B*
+ ID_OUI_FROM_DATABASE=shenzhen worldelite electronics co., LTD
+
 OUI:C82B96*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -107714,6 +113081,9 @@
 OUI:C835B8*
  ID_OUI_FROM_DATABASE=Ericsson, EAB/RWI/K
 
+OUI:C836A3*
+ ID_OUI_FROM_DATABASE=GERTEC BRASIL LTDA
+
 OUI:C83870*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -107765,6 +113135,9 @@
 OUI:C84029*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:C84052*
+ ID_OUI_FROM_DATABASE=PAX Computer Technology(Shenzhen) Ltd.
+
 OUI:C8418A*
  ID_OUI_FROM_DATABASE=Samsung Electronics.,LTD
 
@@ -107786,6 +113159,9 @@
 OUI:C848F5*
  ID_OUI_FROM_DATABASE=MEDISON Xray Co., Ltd
 
+OUI:C84AA0*
+ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
+
 OUI:C84BD6*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -107951,6 +113327,9 @@
 OUI:C86F1D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:C870D4*
+ ID_OUI_FROM_DATABASE=IBO Technology Co,Ltd
+
 OUI:C87125*
  ID_OUI_FROM_DATABASE=Johnson Outdoors Marine Electronics d/b/a Minnkota
 
@@ -107972,6 +113351,9 @@
 OUI:C8778B*
  ID_OUI_FROM_DATABASE=Mercury Systems – Trusted Mission Solutions, Inc.
 
+OUI:C8787D*
+ ID_OUI_FROM_DATABASE=D-Link Corporation
+
 OUI:C87B23*
  ID_OUI_FROM_DATABASE=Bose Corporation
 
@@ -107990,6 +113372,9 @@
 OUI:C87EA1*
  ID_OUI_FROM_DATABASE=TCL MOKA International Limited
 
+OUI:C87F54*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
 OUI:C88314*
  ID_OUI_FROM_DATABASE=Tempo Communications
 
@@ -107999,6 +113384,9 @@
 OUI:C88447*
  ID_OUI_FROM_DATABASE=Beautiful Enterprise Co., Ltd
 
+OUI:C8848C*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:C884A1*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -108086,6 +113474,9 @@
 OUI:C8903E*
  ID_OUI_FROM_DATABASE=Pakton Technologies
 
+OUI:C8908A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:C891F9*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -108104,12 +113495,18 @@
 OUI:C894D2*
  ID_OUI_FROM_DATABASE=Jiangsu Datang  Electronic Products Co., Ltd
 
+OUI:C8965A*
+ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+
 OUI:C89665*
  ID_OUI_FROM_DATABASE=Microsoft Corporation
 
 OUI:C8979F*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:C89828*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:C899B2*
  ID_OUI_FROM_DATABASE=Arcadyan Corporation
 
@@ -108380,6 +113777,9 @@
 OUI:C8DDC9*
  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
 
+OUI:C8DE41*
+ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+
 OUI:C8DE51*
  ID_OUI_FROM_DATABASE=IntegraOptics
 
@@ -108404,6 +113804,9 @@
 OUI:C8E265*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:C8E306*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:C8E42F*
  ID_OUI_FROM_DATABASE=Technical Research Design and Development
 
@@ -108425,6 +113828,9 @@
 OUI:C8EBEC*
  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
 
+OUI:C8EDFC*
+ ID_OUI_FROM_DATABASE=Shenzhen Ideaform Industrial Product Design Co., Ltd
+
 OUI:C8EE08*
  ID_OUI_FROM_DATABASE=TANGTOP TECHNOLOGY CO.,LTD
 
@@ -108437,12 +113843,21 @@
 OUI:C8EF2E*
  ID_OUI_FROM_DATABASE=Beijing Gefei Tech. Co., Ltd
 
+OUI:C8EFBC*
+ ID_OUI_FROM_DATABASE=Inspur Communication Technology Co.,Ltd.
+
 OUI:C8F09E*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:C8F225*
+ ID_OUI_FROM_DATABASE=EM Microelectronic
+
 OUI:C8F230*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
+OUI:C8F2B4*
+ ID_OUI_FROM_DATABASE=Guizhou Huaxin Information Technology Co., Ltd.
+
 OUI:C8F319*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
@@ -108563,6 +113978,9 @@
 OUI:CC0080*
  ID_OUI_FROM_DATABASE=BETTINI SRL
 
+OUI:CC00F1*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:CC037B*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -108593,12 +114011,18 @@
 OUI:CC07E4*
  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
 
+OUI:CC087B*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:CC088D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:CC08E0*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:CC08FA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:CC08FB*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -108686,6 +114110,9 @@
 OUI:CC1BE0F*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:CC1E97*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:CC1EFF*
  ID_OUI_FROM_DATABASE=Metrological Group BV
 
@@ -108767,6 +114194,9 @@
 OUI:CC2A80*
  ID_OUI_FROM_DATABASE=Micro-Biz intelligence solutions Co.,Ltd
 
+OUI:CC2AAC*
+ ID_OUI_FROM_DATABASE=Yunjing lntelligent Technology(Dongguan).,Ltd
+
 OUI:CC2C83*
  ID_OUI_FROM_DATABASE=DarkMatter L.L.C
 
@@ -108848,6 +114278,9 @@
 OUI:CC3D82*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:CC3DD1*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:CC3E5F*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
@@ -108869,6 +114302,9 @@
 OUI:CC418E*
  ID_OUI_FROM_DATABASE=MSA Innovation
 
+OUI:CC4210*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:CC43E3*
  ID_OUI_FROM_DATABASE=Trump s.a.
 
@@ -108887,6 +114323,9 @@
 OUI:CC4703*
  ID_OUI_FROM_DATABASE=Intercon Systems Co., Ltd.
 
+OUI:CC4740*
+ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+
 OUI:CC4792*
  ID_OUI_FROM_DATABASE=ASIX Electronics Corporation
 
@@ -108908,6 +114347,9 @@
 OUI:CC4D38*
  ID_OUI_FROM_DATABASE=Carnegie Technologies
 
+OUI:CC4D74*
+ ID_OUI_FROM_DATABASE=Fujian Newland Payment Technology Co., Ltd.
+
 OUI:CC4E24*
  ID_OUI_FROM_DATABASE=Brocade Communications Systems LLC
 
@@ -108986,6 +114428,9 @@
 OUI:CC55AD*
  ID_OUI_FROM_DATABASE=RIM
 
+OUI:CC5830*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:CC593E*
  ID_OUI_FROM_DATABASE=Sensium Healthcare Limited
 
@@ -109013,6 +114458,9 @@
 OUI:CC5D78*
  ID_OUI_FROM_DATABASE=JTD Consulting
 
+OUI:CC5EF8*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:CC5FBF*
  ID_OUI_FROM_DATABASE=Topwise 3G Communication Co., Ltd.
 
@@ -109025,6 +114473,9 @@
 OUI:CC61E5*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
+OUI:CC62FE*
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
+
 OUI:CC64A6*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -109094,6 +114545,9 @@
 OUI:CC7669*
  ID_OUI_FROM_DATABASE=SEETECH
 
+OUI:CC77C9*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:CC785F*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -109106,6 +114560,9 @@
 OUI:CC79CF*
  ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
 
+OUI:CC79D7*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:CC7A30*
  ID_OUI_FROM_DATABASE=CMAX Wireless Co., Ltd.
 
@@ -109175,6 +114632,9 @@
 OUI:CC8CE3*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:CC8DB5*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
 OUI:CC8E71*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -109208,6 +114668,9 @@
 OUI:CC96A0*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:CC96E5*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:CC988B*
  ID_OUI_FROM_DATABASE=SONY Visual Products Inc.
 
@@ -109236,7 +114699,7 @@
  ID_OUI_FROM_DATABASE=Transbit Sp. z o.o.
 
 OUI:CC9F7A*
- ID_OUI_FROM_DATABASE=Chiun Mai Communication Systems, Inc
+ ID_OUI_FROM_DATABASE=Chiun Mai Communication System, Inc
 
 OUI:CCA0E5*
  ID_OUI_FROM_DATABASE=DZG Metering GmbH
@@ -109244,6 +114707,9 @@
 OUI:CCA12B*
  ID_OUI_FROM_DATABASE=TCL King Electrical Appliances (Huizhou) Co., Ltd
 
+OUI:CCA174*
+ ID_OUI_FROM_DATABASE=Meta Platforms Technologies, LLC
+
 OUI:CCA219*
  ID_OUI_FROM_DATABASE=SHENZHEN ALONG INVESTMENT CO.,LTD
 
@@ -109274,6 +114740,9 @@
 OUI:CCAB2C*
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
 
+OUI:CCACFE*
+ ID_OUI_FROM_DATABASE=Telink Semiconductor (Shanghai) Co., Ltd.
+
 OUI:CCAF78*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -109298,6 +114767,9 @@
 OUI:CCB3F8*
  ID_OUI_FROM_DATABASE=FUJITSU ISOTEC LIMITED
 
+OUI:CCB54C*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:CCB55A*
  ID_OUI_FROM_DATABASE=Fraunhofer ITWM
 
@@ -109307,6 +114779,12 @@
 OUI:CCB691*
  ID_OUI_FROM_DATABASE=NECMagnusCommunications
 
+OUI:CCB6C8*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:CCB7C4*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:CCB888*
  ID_OUI_FROM_DATABASE=AnB Securite s.a.
 
@@ -109316,6 +114794,9 @@
 OUI:CCB8F1*
  ID_OUI_FROM_DATABASE=EAGLE KINGDOM TECHNOLOGIES LIMITED
 
+OUI:CCBA6F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:CCBBFE*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -109415,6 +114896,9 @@
 OUI:CCCC4E*
  ID_OUI_FROM_DATABASE=Sun Fountainhead USA. Corp
 
+OUI:CCCC77*
+ ID_OUI_FROM_DATABASE=Zaram Technology. Inc.
+
 OUI:CCCC81*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -109430,6 +114914,9 @@
 OUI:CCCE40*
  ID_OUI_FROM_DATABASE=Janteq Corp
 
+OUI:CCCF83*
+ ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD
+
 OUI:CCD083*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
@@ -109530,7 +115017,7 @@
  ID_OUI_FROM_DATABASE=Shanghai tongli information technology co. LTD
 
 OUI:CCD3C1*
- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
+ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
 
 OUI:CCD3E2*
  ID_OUI_FROM_DATABASE=Jiangsu Yinhe  Electronics Co.,Ltd.
@@ -109577,6 +115064,9 @@
 OUI:CCDD58*
  ID_OUI_FROM_DATABASE=Robert Bosch GmbH
 
+OUI:CCDEDE*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:CCE0C3*
  ID_OUI_FROM_DATABASE=EXTEN Technologies, Inc.
 
@@ -109595,6 +115085,9 @@
 OUI:CCE236*
  ID_OUI_FROM_DATABASE=Hangzhou Yaguan Technology Co. LTD
 
+OUI:CCE686*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:CCE798*
  ID_OUI_FROM_DATABASE=My Social Stuff
 
@@ -109637,6 +115130,9 @@
 OUI:CCF3A5*
  ID_OUI_FROM_DATABASE=Chi Mei Communication Systems, Inc
 
+OUI:CCF3C8*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:CCF407*
  ID_OUI_FROM_DATABASE=EUKREA ELECTROMATIQUE SARL
 
@@ -109655,6 +115151,9 @@
 OUI:CCF735*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
+OUI:CCF826*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:CCF841*
  ID_OUI_FROM_DATABASE=Lumewave
 
@@ -109721,12 +115220,18 @@
 OUI:D005E4*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:D0066A*
+ ID_OUI_FROM_DATABASE=Cornelis Networks, Inc.
+
 OUI:D00790*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
 OUI:D007CA*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:D009C8*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:D00AAB*
  ID_OUI_FROM_DATABASE=Yokogawa Digital Computer Corporation
 
@@ -109808,6 +115313,51 @@
 OUI:D016B4*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:D016F00*
+ ID_OUI_FROM_DATABASE=Shenzhen Lesingle Technology CO., LTD.
+
+OUI:D016F01*
+ ID_OUI_FROM_DATABASE=QBIC COMMUNICATIONS DMCC
+
+OUI:D016F02*
+ ID_OUI_FROM_DATABASE=RYSE Inc.
+
+OUI:D016F03*
+ ID_OUI_FROM_DATABASE=Sofinet LLC
+
+OUI:D016F04*
+ ID_OUI_FROM_DATABASE=BEIJING XIAOYUAN WENHUA CULTURE COMMUNICATION CO., LTD.
+
+OUI:D016F05*
+ ID_OUI_FROM_DATABASE=wuxi high information Security Technolog
+
+OUI:D016F06*
+ ID_OUI_FROM_DATABASE=Tornado Modular Systems
+
+OUI:D016F07*
+ ID_OUI_FROM_DATABASE=Hydac Electronic
+
+OUI:D016F08*
+ ID_OUI_FROM_DATABASE=Shenzhen DOOGEE Hengtong Technology CO.,LTD
+
+OUI:D016F09*
+ ID_OUI_FROM_DATABASE=Crystal Alarm AB
+
+OUI:D016F0A*
+ ID_OUI_FROM_DATABASE=OPTITERA GLOBAL NETWORKS PRIVATE LIMITED
+
+OUI:D016F0B*
+ ID_OUI_FROM_DATABASE=worldcns inc.
+
+OUI:D016F0C*
+ ID_OUI_FROM_DATABASE=Peralex Electronics (Pty) Ltd
+
+OUI:D016F0D*
+ ID_OUI_FROM_DATABASE=Top Guard Technologies
+
+OUI:D016F0E*
+ ID_OUI_FROM_DATABASE=BBPOS International Limited
+
 OUI:D01769*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -109820,6 +115370,9 @@
 OUI:D0196A*
  ID_OUI_FROM_DATABASE=Ciena Corporation
 
+OUI:D019D3*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
 OUI:D01AA7*
  ID_OUI_FROM_DATABASE=UniPrint
 
@@ -109842,7 +115395,7 @@
  ID_OUI_FROM_DATABASE=Yohana
 
 OUI:D021F9*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:D022120*
  ID_OUI_FROM_DATABASE=Spirit IT B.V.
@@ -109943,6 +115496,9 @@
 OUI:D03761*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:D03957*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
 OUI:D03972*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -109952,6 +115508,9 @@
 OUI:D039EA*
  ID_OUI_FROM_DATABASE=NetApp
 
+OUI:D039FA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:D03C1F*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -109973,6 +115532,9 @@
 OUI:D03FAA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:D040BE*
+ ID_OUI_FROM_DATABASE=NPO RPS LLC
+
 OUI:D040EF*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -110009,6 +115571,12 @@
 OUI:D04E50*
  ID_OUI_FROM_DATABASE=Mobiwire Mobiles (NingBo) Co., LTD
 
+OUI:D04E99*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:D04F58*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:D04F7E*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -110060,6 +115628,9 @@
 OUI:D05875*
  ID_OUI_FROM_DATABASE=Active Control Technology Inc.
 
+OUI:D058A5*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:D058A8*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -110282,6 +115853,9 @@
 OUI:D07AB5*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:D07B6F*
+ ID_OUI_FROM_DATABASE=Zhuhai Yunmai Technology Co.,Ltd
+
 OUI:D07C2D*
  ID_OUI_FROM_DATABASE=Leie IOT technology Co., Ltd
 
@@ -110291,6 +115865,9 @@
 OUI:D07DE5*
  ID_OUI_FROM_DATABASE=Forward Pay Systems, Inc.
 
+OUI:D07E01*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:D07E28*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
@@ -110351,6 +115928,51 @@
 OUI:D09380*
  ID_OUI_FROM_DATABASE=Ducere Technologies Pvt. Ltd.
 
+OUI:D093950*
+ ID_OUI_FROM_DATABASE=Zhejiang Ruiyi lntelligent Technology Co. Ltd
+
+OUI:D093951*
+ ID_OUI_FROM_DATABASE=Hefei Siqiang Electronic Technology Co.,Ltd
+
+OUI:D093952*
+ ID_OUI_FROM_DATABASE=AT&T
+
+OUI:D093953*
+ ID_OUI_FROM_DATABASE=Nesecure Telecom Pvt Ltd
+
+OUI:D093954*
+ ID_OUI_FROM_DATABASE=DAESUNG CELTIC ENERSYS
+
+OUI:D093955*
+ ID_OUI_FROM_DATABASE=FungHwa i-Link Technology CO., LTD
+
+OUI:D093956*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:D093957*
+ ID_OUI_FROM_DATABASE=iSolution Technologies Co.,Ltd.
+
+OUI:D093958*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:D093959*
+ ID_OUI_FROM_DATABASE=NINGBO SUNNY OPOTECH CO.,LTD
+
+OUI:D09395A*
+ ID_OUI_FROM_DATABASE=Automatic Devices
+
+OUI:D09395B*
+ ID_OUI_FROM_DATABASE=Invendis Technologies India Pvt Ltd
+
+OUI:D09395C*
+ ID_OUI_FROM_DATABASE=BRICK4U GmbH
+
+OUI:D09395D*
+ ID_OUI_FROM_DATABASE=T-COM LLC
+
+OUI:D09395E*
+ ID_OUI_FROM_DATABASE=Shenzhen Hotack Technology Co.,Ltd
+
 OUI:D093F8*
  ID_OUI_FROM_DATABASE=Stonestreet One LLC
 
@@ -110360,8 +115982,53 @@
 OUI:D095C7*
  ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
 
+OUI:D096860*
+ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+
+OUI:D096861*
+ ID_OUI_FROM_DATABASE=PROVCOM LTD
+
+OUI:D096862*
+ ID_OUI_FROM_DATABASE=TMLake Technology Ltd.,
+
+OUI:D096863*
+ ID_OUI_FROM_DATABASE=EPHI B.V.
+
+OUI:D096864*
+ ID_OUI_FROM_DATABASE=Houston Radar LLC
+
+OUI:D096865*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:D096866*
+ ID_OUI_FROM_DATABASE=Shenzhen Ntmer Technology Co., Ltd.
+
+OUI:D096867*
+ ID_OUI_FROM_DATABASE=Private
+
+OUI:D096868*
+ ID_OUI_FROM_DATABASE=Energiekonzepte Deutschland GmbH
+
+OUI:D096869*
+ ID_OUI_FROM_DATABASE=Camfil
+
+OUI:D09686A*
+ ID_OUI_FROM_DATABASE=Hero Health Inc.
+
+OUI:D09686B*
+ ID_OUI_FROM_DATABASE=Changsha keruijie lnformation Technology Co.,Ltd
+
+OUI:D09686C*
+ ID_OUI_FROM_DATABASE=ECS s.r.l.
+
+OUI:D09686D*
+ ID_OUI_FROM_DATABASE=CertusNet Information Technology Co.,LTD
+
+OUI:D09686E*
+ ID_OUI_FROM_DATABASE=withnetworks
+
 OUI:D096FB*
- ID_OUI_FROM_DATABASE=DASAN Network Solutions
+ ID_OUI_FROM_DATABASE=DZS Inc.
 
 OUI:D097FE*
  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
@@ -110453,6 +116120,9 @@
 OUI:D0A637*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:D0A9D3*
+ ID_OUI_FROM_DATABASE=EM Microelectronic
+
 OUI:D0ABD5*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -110612,6 +116282,9 @@
 OUI:D0CDE1*
  ID_OUI_FROM_DATABASE=Scientech Electronics
 
+OUI:D0CF0E*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:D0CF5E*
  ID_OUI_FROM_DATABASE=Energy Micro AS
 
@@ -110619,7 +116292,7 @@
  ID_OUI_FROM_DATABASE=Huizhou Boshijie Technology Co.,Ltd
 
 OUI:D0D003*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:D0D04B*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -110702,6 +116375,9 @@
 OUI:D0D94FE*
  ID_OUI_FROM_DATABASE=APPOTRONICS CO., LTD
 
+OUI:D0DAD7*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:D0DB32*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -110771,6 +116447,9 @@
 OUI:D0F3F5*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:D0F4F7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:D0F520*
  ID_OUI_FROM_DATABASE=KYOCERA Corporation
 
@@ -110819,6 +116498,9 @@
 OUI:D404CD*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:D404E6*
+ ID_OUI_FROM_DATABASE=Broadcom Limited
+
 OUI:D404FF*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
@@ -110897,6 +116579,45 @@
 OUI:D41F0C*
  ID_OUI_FROM_DATABASE=JAI Manufacturing
 
+OUI:D420000*
+ ID_OUI_FROM_DATABASE=Wattsense
+
+OUI:D420001*
+ ID_OUI_FROM_DATABASE=Zelus(HuangZhou) Technology Ltd.
+
+OUI:D420002*
+ ID_OUI_FROM_DATABASE=Shenzhen AI Develop & Manufacture Co.,LTD.
+
+OUI:D420003*
+ ID_OUI_FROM_DATABASE=Arbe Robotics Ltd.
+
+OUI:D420004*
+ ID_OUI_FROM_DATABASE=EVOC VIN Technology Co.,Ltd
+
+OUI:D420005*
+ ID_OUI_FROM_DATABASE=Monolith Electric?Changzhou?Co.,Ltd.
+
+OUI:D420006*
+ ID_OUI_FROM_DATABASE=HiAR Information Technology Co.,Ltd
+
+OUI:D420007*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:D420008*
+ ID_OUI_FROM_DATABASE=Dalian Baishengyuan Technology Co.,Ltd
+
+OUI:D42000B*
+ ID_OUI_FROM_DATABASE=Shenzhen Volt IoT technology co.,ltd.
+
+OUI:D42000C*
+ ID_OUI_FROM_DATABASE=Gentec Systems  Co.
+
+OUI:D42000D*
+ ID_OUI_FROM_DATABASE=ZUUM
+
+OUI:D42000E*
+ ID_OUI_FROM_DATABASE=RPUSI Communication Technology  Co.,Ltd.
+
 OUI:D4206D*
  ID_OUI_FROM_DATABASE=HTC Corporation
 
@@ -110991,11 +116712,14 @@
  ID_OUI_FROM_DATABASE=BUFFALO.INC
 
 OUI:D42DC5*
- ID_OUI_FROM_DATABASE=Panasonic i-PRO Sensing Solutions Co., Ltd.
+ ID_OUI_FROM_DATABASE=i-PRO Co., Ltd.
 
 OUI:D42F23*
  ID_OUI_FROM_DATABASE=Akenori PTE Ltd
 
+OUI:D42FCA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:D4319D*
  ID_OUI_FROM_DATABASE=Sinwatec
 
@@ -111023,15 +116747,24 @@
 OUI:D437D7*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:D43844*
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
+
 OUI:D4389C*
  ID_OUI_FROM_DATABASE=Sony Corporation
 
 OUI:D439B8*
  ID_OUI_FROM_DATABASE=Ciena Corporation
 
+OUI:D43A2C*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:D43A2E*
  ID_OUI_FROM_DATABASE=SHENZHEN MTC CO LTD
 
+OUI:D43A2F*
+ ID_OUI_FROM_DATABASE=SHENZHEN MTC CO LTD
+
 OUI:D43A65*
  ID_OUI_FROM_DATABASE=IGRS Engineering Lab Ltd.
 
@@ -111053,6 +116786,9 @@
 OUI:D43DF3*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
+OUI:D43F32*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:D43FCB*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -111131,9 +116867,15 @@
 OUI:D45297*
  ID_OUI_FROM_DATABASE=nSTREAMS Technologies, Inc.
 
+OUI:D452C7*
+ ID_OUI_FROM_DATABASE=Beijing L&S Lancom Platform Tech. Co., Ltd.
+
 OUI:D452EE*
  ID_OUI_FROM_DATABASE=SKY UK LIMITED
 
+OUI:D45347*
+ ID_OUI_FROM_DATABASE=Merytronic 2012, S.L.
+
 OUI:D45383*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -111191,6 +116933,51 @@
 OUI:D46132*
  ID_OUI_FROM_DATABASE=Pro Concept Manufacturer Co.,Ltd.
 
+OUI:D461370*
+ ID_OUI_FROM_DATABASE=Wistron Corporation
+
+OUI:D461371*
+ ID_OUI_FROM_DATABASE=Shenzhen smart-core technology co.,ltd.
+
+OUI:D461372*
+ ID_OUI_FROM_DATABASE=Robert Bosch Elektronikai Kft.
+
+OUI:D461373*
+ ID_OUI_FROM_DATABASE=APPOTRONICS CO., LTD
+
+OUI:D461374*
+ ID_OUI_FROM_DATABASE=Beijing TAIXINYUN Technology Co.,Ltd
+
+OUI:D461375*
+ ID_OUI_FROM_DATABASE=Estelle AB
+
+OUI:D461376*
+ ID_OUI_FROM_DATABASE=Securus CCTV India
+
+OUI:D461377*
+ ID_OUI_FROM_DATABASE=Beijing Shudun Information Technology Co., Ltd
+
+OUI:D461378*
+ ID_OUI_FROM_DATABASE=Beijing Digital China Yunke Technology Limited
+
+OUI:D461379*
+ ID_OUI_FROM_DATABASE=Private
+
+OUI:D46137A*
+ ID_OUI_FROM_DATABASE=Shenzhen Xunjie International Trade Co., LTD
+
+OUI:D46137B*
+ ID_OUI_FROM_DATABASE=KunPeng Instrument (Dalian)Co.,Ltd.
+
+OUI:D46137C*
+ ID_OUI_FROM_DATABASE=MUSASHI ENGINEERING,INC.
+
+OUI:D46137D*
+ ID_OUI_FROM_DATABASE=IPTECHVIEW
+
+OUI:D46137E*
+ ID_OUI_FROM_DATABASE=UAB Brolis sensor technology
+
 OUI:D4619D*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -111203,6 +116990,9 @@
 OUI:D462EA*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:D46352*
+ ID_OUI_FROM_DATABASE=Vutility Inc.
+
 OUI:D463C6*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
@@ -111458,6 +117248,12 @@
 OUI:D49234*
  ID_OUI_FROM_DATABASE=NEC Corporation
 
+OUI:D4925E*
+ ID_OUI_FROM_DATABASE=Technicolor Delivery Technologies Belgium NV
+
+OUI:D492B9*
+ ID_OUI_FROM_DATABASE=ORION NOVA, S.L.
+
 OUI:D49390*
  ID_OUI_FROM_DATABASE=CLEVO CO.
 
@@ -111491,12 +117287,18 @@
 OUI:D4970B*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:D4996C*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:D49A20*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:D49AA0*
  ID_OUI_FROM_DATABASE=VNPT TECHNOLOGY
 
+OUI:D49AF6*
+ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+
 OUI:D49B5C*
  ID_OUI_FROM_DATABASE=Chongqing Miedu Technology Co., Ltd.
 
@@ -111566,6 +117368,9 @@
 OUI:D4AC4E*
  ID_OUI_FROM_DATABASE=BODi rS, LLC
 
+OUI:D4AD20*
+ ID_OUI_FROM_DATABASE=Jinan USR IOT Technology Limited
+
 OUI:D4AD2D*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -111576,7 +117381,7 @@
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:D4ADFC*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Shenzhen Intellirocks Tech co.,ltd
 
 OUI:D4AE05*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -111614,6 +117419,51 @@
 OUI:D4B92F*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:D4BABA0*
+ ID_OUI_FROM_DATABASE=SHENZHEN ACTION TECHNOLOGIES CO., LTD.
+
+OUI:D4BABA1*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:D4BABA2*
+ ID_OUI_FROM_DATABASE=GuangZhou Ostec Electronic Technology Co.,Limited
+
+OUI:D4BABA3*
+ ID_OUI_FROM_DATABASE=Shenzhen Pu Ying Innovation Technology Corporation Limited
+
+OUI:D4BABA4*
+ ID_OUI_FROM_DATABASE=Beijing Yuanxin Junsheng Technology Co.,ltd
+
+OUI:D4BABA5*
+ ID_OUI_FROM_DATABASE=ReeR SpA
+
+OUI:D4BABA6*
+ ID_OUI_FROM_DATABASE=Shenzhen Yueer Innovation Technology Co., Ltd
+
+OUI:D4BABA7*
+ ID_OUI_FROM_DATABASE=Shenzhen Double Better Technology Co., Ltd
+
+OUI:D4BABA8*
+ ID_OUI_FROM_DATABASE=Chengdu Ba SAN SI YI Information Technology Co., LTD
+
+OUI:D4BABA9*
+ ID_OUI_FROM_DATABASE=Shenzhen Chuangyou Acoustic Technology Co., Ltd.
+
+OUI:D4BABAA*
+ ID_OUI_FROM_DATABASE=Actiontec Electronics Inc.
+
+OUI:D4BABAB*
+ ID_OUI_FROM_DATABASE=Qingdao Vzense Technology Co., Ltd.
+
+OUI:D4BABAC*
+ ID_OUI_FROM_DATABASE=Rusatom Automated Control Systems, Joint-Stock Company
+
+OUI:D4BABAD*
+ ID_OUI_FROM_DATABASE=AADONA Communication Pvt Ltd
+
+OUI:D4BABAE*
+ ID_OUI_FROM_DATABASE=Camozzi Automation SpA
+
 OUI:D4BBC8*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
@@ -111698,6 +117548,9 @@
 OUI:D4D2E5*
  ID_OUI_FROM_DATABASE=BKAV Corporation
 
+OUI:D4D4DA*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:D4D50D*
  ID_OUI_FROM_DATABASE=Southwest Microwave, Inc
 
@@ -111722,6 +117575,9 @@
 OUI:D4D919*
  ID_OUI_FROM_DATABASE=GoPro
 
+OUI:D4DA21*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
 OUI:D4DACD*
  ID_OUI_FROM_DATABASE=SKY UK LIMITED
 
@@ -111767,6 +117623,12 @@
 OUI:D4E90B*
  ID_OUI_FROM_DATABASE=CVT CO.,LTD
 
+OUI:D4E95E*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
+OUI:D4E98A*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:D4EA0E*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
@@ -111797,6 +117659,9 @@
 OUI:D4F0B4*
  ID_OUI_FROM_DATABASE=Napco Security Technologies
 
+OUI:D4F0C9*
+ ID_OUI_FROM_DATABASE=KYOCERA Document Solutions Inc.
+
 OUI:D4F0EA*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
@@ -111806,6 +117671,9 @@
 OUI:D4F207*
  ID_OUI_FROM_DATABASE=DIAODIAO(Beijing)Technology CO.,Ltd
 
+OUI:D4F242*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:D4F337*
  ID_OUI_FROM_DATABASE=Xunison Ltd.
 
@@ -111857,6 +117725,12 @@
 OUI:D80093*
  ID_OUI_FROM_DATABASE=Aurender Inc.
 
+OUI:D8028A*
+ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+
+OUI:D8031A*
+ ID_OUI_FROM_DATABASE=Laird Connectivity
+
 OUI:D8052E*
  ID_OUI_FROM_DATABASE=Skyviia Corporation
 
@@ -111881,6 +117755,9 @@
 OUI:D80A60*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:D80AE6*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:D80B9A*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -111896,6 +117773,9 @@
 OUI:D80DE3*
  ID_OUI_FROM_DATABASE=FXI TECHNOLOGIES AS
 
+OUI:D80E29*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:D80F99*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -111941,6 +117821,9 @@
 OUI:D819CE*
  ID_OUI_FROM_DATABASE=Telesquare
 
+OUI:D81BB5*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:D81BFE*
  ID_OUI_FROM_DATABASE=TWINLINX CORPORATION
 
@@ -111977,6 +117860,9 @@
 OUI:D824BD*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:D824EC*
+ ID_OUI_FROM_DATABASE=Plenom A/S
+
 OUI:D82522*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -112019,6 +117905,9 @@
 OUI:D83062*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:D8312C*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:D83134*
  ID_OUI_FROM_DATABASE=Roku, Inc
 
@@ -112040,6 +117929,12 @@
 OUI:D833B7*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:D8341C*
+ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+
+OUI:D834D1*
+ ID_OUI_FROM_DATABASE=Shenzhen Orange Digital Technology Co.,Ltd
+
 OUI:D834EE*
  ID_OUI_FROM_DATABASE=SHURE INCORPORATED
 
@@ -112058,6 +117953,9 @@
 OUI:D838FC*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
+OUI:D83ADD*
+ ID_OUI_FROM_DATABASE=Raspberry Pi Trading Ltd
+
 OUI:D83AF5*
  ID_OUI_FROM_DATABASE=Wideband Labs LLC
 
@@ -112097,6 +117995,9 @@
 OUI:D84732*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:D8478F*
+ ID_OUI_FROM_DATABASE=Microchip Technology Inc.
+
 OUI:D847BB*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -112139,9 +118040,15 @@
 OUI:D8539A*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:D853BC*
+ ID_OUI_FROM_DATABASE=Lenovo Information Products (Shenzhen)Co.,Ltd
+
 OUI:D8543A*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:D85482*
+ ID_OUI_FROM_DATABASE=Oxit, LLC
+
 OUI:D854A2*
  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
 
@@ -112154,12 +118061,18 @@
 OUI:D857EF*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:D858C6*
+ ID_OUI_FROM_DATABASE=Katch Asset Tracking Pty Limited
+
 OUI:D858D7*
  ID_OUI_FROM_DATABASE=CZ.NIC, z.s.p.o.
 
 OUI:D85982*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:D85B22*
+ ID_OUI_FROM_DATABASE=Shenzhen Hohunet Technology Co., Ltd
+
 OUI:D85B2A*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -112199,9 +118112,15 @@
 OUI:D862DB*
  ID_OUI_FROM_DATABASE=Eno Inc.
 
+OUI:D8630D*
+ ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+
 OUI:D86375*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:D8638C*
+ ID_OUI_FROM_DATABASE=Shenzhen Dttek Technology Co., Ltd.
+
 OUI:D86595*
  ID_OUI_FROM_DATABASE=Toy's Myth Inc.
 
@@ -112277,6 +118196,9 @@
 OUI:D87988*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:D87A3B*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:D87CDD*
  ID_OUI_FROM_DATABASE=SANIX INCORPORATED
 
@@ -112307,6 +118229,9 @@
 OUI:D881CE*
  ID_OUI_FROM_DATABASE=AHN INC.
 
+OUI:D88332*
+ ID_OUI_FROM_DATABASE=TaiXin Semiconductor Co., Ltd
+
 OUI:D88466*
  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
 
@@ -112385,6 +118310,9 @@
 OUI:D88DC8*
  ID_OUI_FROM_DATABASE=Atil Technology Co., LTD
 
+OUI:D88ED4*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:D88F76*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -112469,6 +118397,9 @@
 OUI:D8A01D*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:D8A0E8*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:D8A105*
  ID_OUI_FROM_DATABASE=Syslane, Co., Ltd.
 
@@ -112505,6 +118436,9 @@
 OUI:D8AA59*
  ID_OUI_FROM_DATABASE=Tonly Technology Co. Ltd
 
+OUI:D8AD49*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
 OUI:D8ADDD*
  ID_OUI_FROM_DATABASE=Sonavation, Inc.
 
@@ -112518,7 +118452,7 @@
  ID_OUI_FROM_DATABASE=Hangzhou Bigbright Integrated communications system Co.,Ltd
 
 OUI:D8AF81*
- ID_OUI_FROM_DATABASE=ZAO NPK Rotek
+ ID_OUI_FROM_DATABASE=AO
 
 OUI:D8AFF1*
  ID_OUI_FROM_DATABASE=Panasonic Appliances Company
@@ -112541,6 +118475,12 @@
 OUI:D8B190*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:D8B249*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
+OUI:D8B370*
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
+
 OUI:D8B377*
  ID_OUI_FROM_DATABASE=HTC Corporation
 
@@ -112724,6 +118664,9 @@
 OUI:D8E2DF*
  ID_OUI_FROM_DATABASE=Microsoft Corporation
 
+OUI:D8E35E*
+ ID_OUI_FROM_DATABASE=LG Innotek
+
 OUI:D8E3AE*
  ID_OUI_FROM_DATABASE=CIRTEC MEDICAL SYSTEMS
 
@@ -112784,6 +118727,9 @@
 OUI:D8F3DB*
  ID_OUI_FROM_DATABASE=Post CH AG
 
+OUI:D8F507*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:D8F710*
  ID_OUI_FROM_DATABASE=Libre Wireless Technologies Inc.
 
@@ -112847,9 +118793,15 @@
 OUI:DC05ED*
  ID_OUI_FROM_DATABASE=Nabtesco  Corporation
 
+OUI:DC0682*
+ ID_OUI_FROM_DATABASE=Accessia Technology Ltd.
+
 OUI:DC07C1*
  ID_OUI_FROM_DATABASE=HangZhou QiYang Technology Co.,Ltd.
 
+OUI:DC07F8*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:DC080F*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -113009,6 +118961,9 @@
 OUI:DC360C*
  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
 
+OUI:DC3642*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:DC36430*
  ID_OUI_FROM_DATABASE=Meier Tobler AG
 
@@ -113159,6 +119114,9 @@
 OUI:DC4517*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:DC45B8*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:DC4628*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -113306,6 +119264,9 @@
 OUI:DC68EB*
  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
 
+OUI:DC6AE7*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:DC6AEA*
  ID_OUI_FROM_DATABASE=Infinix mobility limited
 
@@ -113354,6 +119315,9 @@
 OUI:DC774C*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:DC7794*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:DC7834*
  ID_OUI_FROM_DATABASE=LOGICOM SA
 
@@ -113456,11 +119420,14 @@
 OUI:DC9C9F*
  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
 
+OUI:DC9EAB*
+ ID_OUI_FROM_DATABASE=Chongqing Yipingfang Technology Co., Ltd.
+
 OUI:DC9FA4*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
 OUI:DC9FDB*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:DCA120*
  ID_OUI_FROM_DATABASE=Nokia
@@ -113468,6 +119435,9 @@
 OUI:DCA266*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:DCA313*
+ ID_OUI_FROM_DATABASE=Shenzhen Changjin Communication Technology Co.,Ltd
+
 OUI:DCA333*
  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
 
@@ -113513,6 +119483,12 @@
 OUI:DCA989*
  ID_OUI_FROM_DATABASE=MACANDC
 
+OUI:DCAA43*
+ ID_OUI_FROM_DATABASE=Shenzhen Terca Information Technology Co., Ltd.
+
+OUI:DCAC6F*
+ ID_OUI_FROM_DATABASE=Everytale Inc
+
 OUI:DCAD9E*
  ID_OUI_FROM_DATABASE=GreenPriz
 
@@ -113534,6 +119510,9 @@
 OUI:DCB131*
  ID_OUI_FROM_DATABASE=SHENZHEN HUARUIAN TECHNOLOGY CO.,LTD
 
+OUI:DCB347*
+ ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
+
 OUI:DCB3B4*
  ID_OUI_FROM_DATABASE=Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.
 
@@ -113549,6 +119528,9 @@
 OUI:DCB72E*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:DCB7AC*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:DCB7FC*
  ID_OUI_FROM_DATABASE=Alps Electric (Ireland) Ltd
 
@@ -113582,6 +119564,9 @@
 OUI:DCC101*
  ID_OUI_FROM_DATABASE=SOLiD Technologies, Inc.
 
+OUI:DCC2C9*
+ ID_OUI_FROM_DATABASE=CANON INC.
+
 OUI:DCC422*
  ID_OUI_FROM_DATABASE=Systembase Limited
 
@@ -113636,6 +119621,9 @@
 OUI:DCD2FC*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:DCD2FD*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:DCD321*
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
 
@@ -113669,12 +119657,18 @@
 OUI:DCDA80*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
+OUI:DCDB27*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:DCDB70*
  ID_OUI_FROM_DATABASE=Tonfunk Systementwicklung und Service GmbH
 
 OUI:DCDC07*
  ID_OUI_FROM_DATABASE=TRP Systems BV
 
+OUI:DCDCC3*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:DCDCE2*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -113703,7 +119697,7 @@
  ID_OUI_FROM_DATABASE=Lumens Digital Optics Inc.
 
 OUI:DCE305*
- ID_OUI_FROM_DATABASE=ZAO NPK Rotek
+ ID_OUI_FROM_DATABASE=AO
 
 OUI:DCE5330*
  ID_OUI_FROM_DATABASE=FLYHT Aerospace
@@ -113756,6 +119750,9 @@
 OUI:DCE578*
  ID_OUI_FROM_DATABASE=Experimental Factory of Scientific Engineering and Special Design Department
 
+OUI:DCE650*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:DCE71C*
  ID_OUI_FROM_DATABASE=AUG Elektronik GmbH
 
@@ -113777,6 +119774,9 @@
 OUI:DCEC06*
  ID_OUI_FROM_DATABASE=Heimi Network Technology Co., Ltd.
 
+OUI:DCECE3*
+ ID_OUI_FROM_DATABASE=LYOTECH LABS LLC
+
 OUI:DCED83*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
@@ -113843,6 +119843,9 @@
 OUI:DCFB48*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:DCFBB8*
+ ID_OUI_FROM_DATABASE=Meizhou Guo Wei Electronics Co., Ltd
+
 OUI:DCFE07*
  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
 
@@ -113855,6 +119858,9 @@
 OUI:E00084*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:E001A6*
+ ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
+
 OUI:E002A5*
  ID_OUI_FROM_DATABASE=ABB Robotics
 
@@ -113966,12 +119972,18 @@
 OUI:E01F2B*
  ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
 
+OUI:E01F6A*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:E01F88*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
 OUI:E01FED*
  ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
 
+OUI:E01FFC*
+ ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+
 OUI:E02202*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -114009,7 +120021,7 @@
  ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
 
 OUI:E028B1*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:E02967*
  ID_OUI_FROM_DATABASE=HMD Global Oy
@@ -114032,6 +120044,9 @@
 OUI:E02CF3*
  ID_OUI_FROM_DATABASE=MRS Electronic GmbH
 
+OUI:E02DF0*
+ ID_OUI_FROM_DATABASE=ALPSALPINE CO,.LTD
+
 OUI:E02E0B*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -114074,12 +120089,102 @@
 OUI:E037BF*
  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
 
+OUI:E0382D0*
+ ID_OUI_FROM_DATABASE=Beijing Cgprintech Technology Co.,Ltd
+
+OUI:E0382D1*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:E0382D2*
+ ID_OUI_FROM_DATABASE=Xi'an Xiangxun Technology Co., Ltd.
+
+OUI:E0382D3*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:E0382D4*
+ ID_OUI_FROM_DATABASE=Qingdao Unovo Technologies Co., Ltd
+
+OUI:E0382D5*
+ ID_OUI_FROM_DATABASE=Weishi Intelligent Information Technology (Guangzhou) Co., LTD
+
+OUI:E0382D6*
+ ID_OUI_FROM_DATABASE=iTracxing
+
+OUI:E0382D7*
+ ID_OUI_FROM_DATABASE=Famar Fueguina S.A.
+
+OUI:E0382D8*
+ ID_OUI_FROM_DATABASE=Shenzhen iTest Technology Co.,Ltd
+
+OUI:E0382D9*
+ ID_OUI_FROM_DATABASE=Velvac Incorporated
+
+OUI:E0382DA*
+ ID_OUI_FROM_DATABASE=4D Photonics GmbH
+
+OUI:E0382DB*
+ ID_OUI_FROM_DATABASE=SERCOMM PHILIPPINES INC
+
+OUI:E0382DC*
+ ID_OUI_FROM_DATABASE=SiLAND Chengdu Technology Co., Ltd
+
+OUI:E0382DD*
+ ID_OUI_FROM_DATABASE=KEPLER COMMUNICATIONS INC.
+
+OUI:E0382DE*
+ ID_OUI_FROM_DATABASE=Anysafe
+
 OUI:E0383F*
  ID_OUI_FROM_DATABASE=zte corporation
 
 OUI:E039D7*
  ID_OUI_FROM_DATABASE=Plexxi, Inc.
 
+OUI:E03C1C0*
+ ID_OUI_FROM_DATABASE=Scangrip
+
+OUI:E03C1C1*
+ ID_OUI_FROM_DATABASE=Shikino High-Tech Co., Ltd.
+
+OUI:E03C1C2*
+ ID_OUI_FROM_DATABASE=Hoplite Industries, Inc.
+
+OUI:E03C1C3*
+ ID_OUI_FROM_DATABASE=Dewetron GmbH
+
+OUI:E03C1C4*
+ ID_OUI_FROM_DATABASE=Earable Inc.
+
+OUI:E03C1C5*
+ ID_OUI_FROM_DATABASE=Semic Inc.
+
+OUI:E03C1C6*
+ ID_OUI_FROM_DATABASE=GhinF Digital information technology (hangzhou) Co., Ltd
+
+OUI:E03C1C7*
+ ID_OUI_FROM_DATABASE=Tap Home, s.r.o.
+
+OUI:E03C1C8*
+ ID_OUI_FROM_DATABASE=Jiangsu Riying Electronics Co.,Ltd.
+
+OUI:E03C1C9*
+ ID_OUI_FROM_DATABASE=Ocamar Technologies (Shanghai) Co.,Ltd.
+
+OUI:E03C1CA*
+ ID_OUI_FROM_DATABASE=MELAG Medizintechnik GmbH & Co. KG
+
+OUI:E03C1CB*
+ ID_OUI_FROM_DATABASE=Hangzhou Uni-Ubi Co.,Ltd.
+
+OUI:E03C1CC*
+ ID_OUI_FROM_DATABASE=Meferi Technologies Co.,Ltd.
+
+OUI:E03C1CD*
+ ID_OUI_FROM_DATABASE=Sprintshield d.o.o.
+
+OUI:E03C1CE*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
 OUI:E03C5B*
  ID_OUI_FROM_DATABASE=SHENZHEN JIAXINJIE ELECTRON CO.,LTD
 
@@ -114119,6 +120224,9 @@
 OUI:E046EE*
  ID_OUI_FROM_DATABASE=NETGEAR
 
+OUI:E04735*
+ ID_OUI_FROM_DATABASE=Ericsson AB
+
 OUI:E048AF*
  ID_OUI_FROM_DATABASE=Premietech Limited
 
@@ -114131,6 +120239,9 @@
 OUI:E049ED*
  ID_OUI_FROM_DATABASE=Audeze LLC
 
+OUI:E04B41*
+ ID_OUI_FROM_DATABASE=Hangzhou Beilian Low Carbon Technology Co., Ltd.
+
 OUI:E04B45*
  ID_OUI_FROM_DATABASE=Hi-P Electronics Pte Ltd
 
@@ -114161,12 +120272,18 @@
 OUI:E05597*
  ID_OUI_FROM_DATABASE=Emergent Vision Technologies Inc.
 
+OUI:E05694*
+ ID_OUI_FROM_DATABASE=Yunhight Microelectronics
+
 OUI:E056F4*
  ID_OUI_FROM_DATABASE=AxesNetwork Solutions inc.
 
 OUI:E0589E*
  ID_OUI_FROM_DATABASE=Laerdal Medical
 
+OUI:E05A1B*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:E05A9F0*
  ID_OUI_FROM_DATABASE=Annapurna labs
 
@@ -114246,7 +120363,7 @@
  ID_OUI_FROM_DATABASE=Jinan Jovision Science & Technology Co., Ltd.
 
 OUI:E063DA*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:E063E5*
  ID_OUI_FROM_DATABASE=Sony Corporation
@@ -114305,9 +120422,15 @@
 OUI:E0735F*
  ID_OUI_FROM_DATABASE=NUCOM
 
+OUI:E073E7*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
 OUI:E0750A*
  ID_OUI_FROM_DATABASE=ALPSALPINE CO,.LTD
 
+OUI:E07526*
+ ID_OUI_FROM_DATABASE=China Dragon Technology Limited
+
 OUI:E0757D*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
@@ -114425,6 +120548,9 @@
 OUI:E09971*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:E09B27*
+ ID_OUI_FROM_DATABASE=Ciena Corporation
+
 OUI:E09C8D*
  ID_OUI_FROM_DATABASE=Seakeeper, Inc.
 
@@ -114446,6 +120572,9 @@
 OUI:E0A198*
  ID_OUI_FROM_DATABASE=NOJA Power Switchgear Pty Ltd
 
+OUI:E0A1CE*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:E0A1D7*
  ID_OUI_FROM_DATABASE=SFR
 
@@ -114524,6 +120653,9 @@
 OUI:E0B655*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co., Ltd.
 
+OUI:E0B668*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:E0B6F50*
  ID_OUI_FROM_DATABASE=BeSTAR Corporation
 
@@ -114581,6 +120713,9 @@
 OUI:E0B94D*
  ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.，LTD
 
+OUI:E0B98A*
+ ID_OUI_FROM_DATABASE=Shenzhen Taike industrial automation company,Ltd
+
 OUI:E0B9A5*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
@@ -114590,6 +120725,9 @@
 OUI:E0B9E5*
  ID_OUI_FROM_DATABASE=Technicolor Delivery Technologies Belgium NV
 
+OUI:E0BAAD*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:E0BAB4*
  ID_OUI_FROM_DATABASE=Arrcus, Inc
 
@@ -114602,12 +120740,18 @@
 OUI:E0BC43*
  ID_OUI_FROM_DATABASE=C2 Microsystems, Inc.
 
+OUI:E0BDA0*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:E0BE03*
  ID_OUI_FROM_DATABASE=Lite-On Network Communication (Dongguan) Limited
 
 OUI:E0C0D1*
  ID_OUI_FROM_DATABASE=CK Telecom (Shenzhen) Limited
 
+OUI:E0C264*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:E0C286*
  ID_OUI_FROM_DATABASE=Aisai Communication Technology Co., Ltd.
 
@@ -114644,14 +120788,20 @@
 OUI:E0C97A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:E0CA3C*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:E0CA4D*
  ID_OUI_FROM_DATABASE=Shenzhen Unistar Communication Co.,LTD
 
 OUI:E0CA94*
  ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
 
+OUI:E0CB19*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:E0CB1D*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
 OUI:E0CB4E*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
@@ -114719,6 +120869,9 @@
 OUI:E0D848*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
+OUI:E0D8C4*
+ ID_OUI_FROM_DATABASE=Qingdao Intelligent&Precise Electronics Co.,Ltd.
+
 OUI:E0D9A2*
  ID_OUI_FROM_DATABASE=Hippih aps
 
@@ -114744,7 +120897,7 @@
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
 OUI:E0DCA0*
- ID_OUI_FROM_DATABASE=Siemens Industrial Automation Products Ltd Chengdu
+ ID_OUI_FROM_DATABASE=Siemens Industrial Automation Products Ltd., Chengdu
 
 OUI:E0DCFF*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
@@ -114809,12 +120962,18 @@
 OUI:E0EE1B*
  ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Company of America
 
+OUI:E0EF02*
+ ID_OUI_FROM_DATABASE=Chengdu Quanjing Intelligent Technology Co.,Ltd
+
 OUI:E0EF25*
  ID_OUI_FROM_DATABASE=Lintes Technology Co., Ltd.
 
 OUI:E0F211*
  ID_OUI_FROM_DATABASE=Digitalwatt
 
+OUI:E0F318*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:E0F379*
  ID_OUI_FROM_DATABASE=Vaddio
 
@@ -114872,6 +121031,9 @@
 OUI:E40CFD*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
+OUI:E40D36*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:E40EEE*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -114885,7 +121047,7 @@
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:E41289*
- ID_OUI_FROM_DATABASE=topsystem Systemhaus GmbH
+ ID_OUI_FROM_DATABASE=topsystem GmbH
 
 OUI:E415F6*
  ID_OUI_FROM_DATABASE=Texas Instruments
@@ -114962,9 +121124,15 @@
 OUI:E41FE9*
  ID_OUI_FROM_DATABASE=Dunkermotoren GmbH
 
+OUI:E42150*
+ ID_OUI_FROM_DATABASE=Shanghai Chint low voltage electrical technology Co.,Ltd.
+
 OUI:E422A5*
  ID_OUI_FROM_DATABASE=PLANTRONICS, INC.
 
+OUI:E4233C*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:E42354*
  ID_OUI_FROM_DATABASE=SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD
 
@@ -114983,6 +121151,9 @@
 OUI:E4268B*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:E426D5*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
 OUI:E42761*
  ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
 
@@ -115052,8 +121223,11 @@
 OUI:E437D7*
  ID_OUI_FROM_DATABASE=HENRI DEPAEPE S.A.S.
 
+OUI:E4387E*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:E43883*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:E4388C*
  ID_OUI_FROM_DATABASE=Digital Products Limited
@@ -115196,6 +121370,9 @@
 OUI:E450EB*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:E4521E*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:E454E8*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -115247,18 +121424,27 @@
 OUI:E45F01*
  ID_OUI_FROM_DATABASE=Raspberry Pi Trading Ltd
 
+OUI:E46017*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:E46059*
  ID_OUI_FROM_DATABASE=Pingtek Co., Ltd.
 
 OUI:E46251*
  ID_OUI_FROM_DATABASE=HAO CHENG GROUP LIMITED
 
+OUI:E462C4*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:E46449*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
 OUI:E46564*
  ID_OUI_FROM_DATABASE=SHENZHEN KTC TECHNOLOGY CO.,LTD
 
+OUI:E466AB*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:E4671E*
  ID_OUI_FROM_DATABASE=SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd.
 
@@ -115277,6 +121463,9 @@
 OUI:E46C21*
  ID_OUI_FROM_DATABASE=messMa GmbH
 
+OUI:E46D7F*
+ ID_OUI_FROM_DATABASE=Ciena Corporation
+
 OUI:E46F13*
  ID_OUI_FROM_DATABASE=D-Link International
 
@@ -115376,9 +121565,18 @@
 OUI:E48C0F*
  ID_OUI_FROM_DATABASE=Discovery Insure
 
+OUI:E48C73*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:E48D8C*
  ID_OUI_FROM_DATABASE=Routerboard.com
 
+OUI:E48E10*
+ ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD
+
+OUI:E48EBB*
+ ID_OUI_FROM_DATABASE=Rockwell Automation
+
 OUI:E48F1D*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -115481,6 +121679,12 @@
 OUI:E49ADC*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:E49C67*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:E49D73*
+ ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
+
 OUI:E49E12*
  ID_OUI_FROM_DATABASE=FREEBOX SAS
 
@@ -115502,6 +121706,9 @@
 OUI:E4A5EF*
  ID_OUI_FROM_DATABASE=TRON LINK ELECTRONICS CO., LTD.
 
+OUI:E4A634*
+ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
+
 OUI:E4A749*
  ID_OUI_FROM_DATABASE=Palo Alto Networks
 
@@ -115568,12 +121775,21 @@
 OUI:E4BAD9*
  ID_OUI_FROM_DATABASE=360 Fly Inc.
 
+OUI:E4BC96*
+ ID_OUI_FROM_DATABASE=DAP B.V.
+
+OUI:E4BCAA*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:E4BD4B*
  ID_OUI_FROM_DATABASE=zte corporation
 
 OUI:E4BEED*
  ID_OUI_FROM_DATABASE=Netcore Technology Inc.
 
+OUI:E4BEFB*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E4BFFA*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
@@ -115647,7 +121863,7 @@
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:E4D3AA*
- ID_OUI_FROM_DATABASE=FUJITSU CONNECTED TECHNOLOGIES LIMITED
+ ID_OUI_FROM_DATABASE=FCNT LMITED
 
 OUI:E4D3F1*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -115664,6 +121880,9 @@
 OUI:E4DB6D*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co., Ltd.
 
+OUI:E4DBAE*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
 OUI:E4DC43*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -115703,6 +121922,9 @@
 OUI:E4EC10*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:E4ECE8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:E4EEFD*
  ID_OUI_FROM_DATABASE=MR&D Manufacturing
 
@@ -115850,6 +122072,9 @@
 OUI:E8102E*
  ID_OUI_FROM_DATABASE=Really Simple Software, Inc
 
+OUI:E81098*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:E81132*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -115952,11 +122177,17 @@
 OUI:E820E2*
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
 
+OUI:E824A6*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:E82689*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
+OUI:E8268D*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
 OUI:E826B6*
- ID_OUI_FROM_DATABASE=Inside Biometrics International Limited
+ ID_OUI_FROM_DATABASE=Companies House to GlucoRx Technologies Ltd.
 
 OUI:E82877*
  ID_OUI_FROM_DATABASE=TMY Co., Ltd.
@@ -116003,6 +122234,9 @@
 OUI:E8377A*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
+OUI:E838A0*
+ ID_OUI_FROM_DATABASE=Vizio, Inc
+
 OUI:E83935*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
@@ -116036,6 +122270,9 @@
 OUI:E840F2*
  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
 
+OUI:E84368*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:E843B6*
  ID_OUI_FROM_DATABASE=QNAP Systems, Inc.
 
@@ -116045,6 +122282,9 @@
 OUI:E84727*
  ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
+OUI:E8473A*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co.,LTD
+
 OUI:E8481F*
  ID_OUI_FROM_DATABASE=Advanced Automotive Antennas
 
@@ -116054,6 +122294,9 @@
 OUI:E84943*
  ID_OUI_FROM_DATABASE=YUGE Information technology Co. Ltd
 
+OUI:E84C4A*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:E84C56*
  ID_OUI_FROM_DATABASE=INTERCEPT SERVICES LIMITED
 
@@ -116153,9 +122396,15 @@
 OUI:E861BE*
  ID_OUI_FROM_DATABASE=Melec Inc.
 
+OUI:E86538*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:E86549*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:E8655F*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:E865D4*
  ID_OUI_FROM_DATABASE=Tenda Technology Co.,Ltd.Dongguan branch
 
@@ -116193,7 +122442,7 @@
  ID_OUI_FROM_DATABASE=KLAB
 
 OUI:E86CC77*
- ID_OUI_FROM_DATABASE=Huaqin Technology Co.,Ltd
+ ID_OUI_FROM_DATABASE=Huaqin Technology Co.,Ltd.
 
 OUI:E86CC78*
  ID_OUI_FROM_DATABASE=Lighthouse EIP
@@ -116237,6 +122486,9 @@
 OUI:E86DE9*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:E86E3A*
+ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
+
 OUI:E86E44*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -116292,7 +122544,7 @@
  ID_OUI_FROM_DATABASE=METZ CONNECT GmbH
 
 OUI:E87829B*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Ampner Ltd
 
 OUI:E87829C*
  ID_OUI_FROM_DATABASE=FairPhone B.V.
@@ -116309,6 +122561,9 @@
 OUI:E878A1*
  ID_OUI_FROM_DATABASE=BEOVIEW INTERCOM DOO
 
+OUI:E878EE*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:E87AF3*
  ID_OUI_FROM_DATABASE=S5 Tech S.r.l.
 
@@ -116321,6 +122576,9 @@
 OUI:E8802E*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:E88088*
+ ID_OUI_FROM_DATABASE=LCFC(Hefei) Electronics Technology Co., Ltd
+
 OUI:E880D8*
  ID_OUI_FROM_DATABASE=GNTEK Electronics Co.,Ltd.
 
@@ -116345,9 +122603,15 @@
 OUI:E8854B*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:E886CF*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:E887A3*
  ID_OUI_FROM_DATABASE=Loxley Public Company Limited
 
+OUI:E88843*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:E8886C*
  ID_OUI_FROM_DATABASE=Shenzhen SC Technologies Co.,LTD
 
@@ -116363,6 +122627,12 @@
 OUI:E88E60*
  ID_OUI_FROM_DATABASE=NSD Corporation
 
+OUI:E88F6F*
+ ID_OUI_FROM_DATABASE=TCT mobile ltd
+
+OUI:E88FC4*
+ ID_OUI_FROM_DATABASE=MOBIWIRE MOBILES(NINGBO) CO.,LTD
+
 OUI:E8910F*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -116399,6 +122669,9 @@
 OUI:E8979A*
  ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
 
+OUI:E897B8*
+ ID_OUI_FROM_DATABASE=Chiun Mai Communication System, Inc
+
 OUI:E8986D*
  ID_OUI_FROM_DATABASE=Palo Alto Networks
 
@@ -116441,12 +122714,18 @@
 OUI:E8A0CD*
  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
 
+OUI:E8A0ED*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:E8A1F8*
  ID_OUI_FROM_DATABASE=zte corporation
 
 OUI:E8A245*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:E8A34E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E8A364*
  ID_OUI_FROM_DATABASE=Signal Path International / Peachtree Audio
 
@@ -116471,6 +122750,9 @@
 OUI:E8A7F2*
  ID_OUI_FROM_DATABASE=sTraffic
 
+OUI:E8AACB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:E8ABF3*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -116492,6 +122774,9 @@
 OUI:E8B1FC*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:E8B265*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:E8B2AC*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -116567,6 +122852,9 @@
 OUI:E8BA70*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:E8BAE2*
+ ID_OUI_FROM_DATABASE=Xplora Technologies AS
+
 OUI:E8BB3D*
  ID_OUI_FROM_DATABASE=Sino Prime-Tech Limited
 
@@ -116579,6 +122867,9 @@
 OUI:E8BE81*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:E8BFDB*
+ ID_OUI_FROM_DATABASE=Inodesign Group
+
 OUI:E8C1B8*
  ID_OUI_FROM_DATABASE=Nanjing Bangzhong Electronic Commerce Limited
 
@@ -116625,7 +122916,7 @@
  ID_OUI_FROM_DATABASE=Micronet  LTD
 
 OUI:E8CC8C*
- ID_OUI_FROM_DATABASE=Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
+ ID_OUI_FROM_DATABASE=Chengdu Jiarui Hualian Communication Technology Co
 
 OUI:E8CD2D*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -116666,6 +122957,9 @@
 OUI:E8D765*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:E8D775*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E8D819*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
@@ -116768,6 +123062,9 @@
 OUI:E8EBD3*
  ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
 
+OUI:E8EBDD*
+ ID_OUI_FROM_DATABASE=Guangzhou Qingying Acoustics Technology Co., Ltd
+
 OUI:E8ECA3*
  ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co.Ltd
 
@@ -116786,6 +123083,9 @@
 OUI:E8EF05*
  ID_OUI_FROM_DATABASE=MIND TECH INTERNATIONAL LIMITED
 
+OUI:E8EF22*
+ ID_OUI_FROM_DATABASE=Siemens Numerical Control Ltd., Nanjing
+
 OUI:E8EF89*
  ID_OUI_FROM_DATABASE=OPMEX Tech.
 
@@ -116816,6 +123116,9 @@
 OUI:E8F791*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:E8F8D0*
+ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+
 OUI:E8F928*
  ID_OUI_FROM_DATABASE=RFTECH SRL
 
@@ -116855,6 +123158,9 @@
 OUI:E8FDF8*
  ID_OUI_FROM_DATABASE=Shanghai High-Flying Electronics  Technology Co., Ltd
 
+OUI:E8FF98*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:EC0133*
  ID_OUI_FROM_DATABASE=TRINUS SYSTEMS INC.
 
@@ -116921,6 +123227,9 @@
 OUI:EC1766*
  ID_OUI_FROM_DATABASE=Research Centre Module
 
+OUI:EC1A02*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:EC1A59*
  ID_OUI_FROM_DATABASE=Belkin International Inc.
 
@@ -116936,12 +123245,18 @@
 OUI:EC1D8B*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:EC1D9E*
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
+
 OUI:EC1F72*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
 OUI:EC2125*
  ID_OUI_FROM_DATABASE=Toshiba Corp.
 
+OUI:EC2150*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:EC219F*
  ID_OUI_FROM_DATABASE=VidaBox LLC
 
@@ -116975,6 +123290,9 @@
 OUI:EC26FB*
  ID_OUI_FROM_DATABASE=TECC CO.,LTD.
 
+OUI:EC28D3*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:EC2A72*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -116988,7 +123306,10 @@
  ID_OUI_FROM_DATABASE=CWD INNOVATION LIMITED
 
 OUI:EC2C49*
- ID_OUI_FROM_DATABASE=University of Tokyo
+ ID_OUI_FROM_DATABASE=NakaoLab, The University of Tokyo
+
+OUI:EC2C73*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:EC2CE2*
  ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -117056,6 +123377,9 @@
 OUI:EC4118*
  ID_OUI_FROM_DATABASE=XIAOMI Electronics,CO.,LTD
 
+OUI:EC41CA*
+ ID_OUI_FROM_DATABASE=Shenzhen TecAnswer Technology co.,ltd
+
 OUI:EC4269*
  ID_OUI_FROM_DATABASE=HMD Global Oy
 
@@ -117209,6 +123533,12 @@
 OUI:EC71DB*
  ID_OUI_FROM_DATABASE=Reolink Innovation Limited
 
+OUI:EC7379*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:EC7427*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:EC74BA*
  ID_OUI_FROM_DATABASE=Hirschmann Automation and Control GmbH
 
@@ -117254,6 +123584,9 @@
 OUI:EC8009*
  ID_OUI_FROM_DATABASE=NovaSparks
 
+OUI:EC8150*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:EC8193*
  ID_OUI_FROM_DATABASE=Logitech, Inc
 
@@ -117269,6 +123602,9 @@
 OUI:EC836C*
  ID_OUI_FROM_DATABASE=RM Tech Co., Ltd.
 
+OUI:EC83B7*
+ ID_OUI_FROM_DATABASE=PUWELL CLOUD TECH LIMITED
+
 OUI:EC83D5*
  ID_OUI_FROM_DATABASE=GIRD Systems Inc
 
@@ -117290,6 +123626,9 @@
 OUI:EC89F5*
  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
 
+OUI:EC8A48*
+ ID_OUI_FROM_DATABASE=Arista Networks
+
 OUI:EC8A4C*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -117341,6 +123680,9 @@
 OUI:EC9681*
  ID_OUI_FROM_DATABASE=2276427 Ontario Inc
 
+OUI:EC96BF*
+ ID_OUI_FROM_DATABASE=eSystems MTG GmbH
+
 OUI:EC97B2*
  ID_OUI_FROM_DATABASE=SUMEC Machinery & Electric Co.,Ltd.
 
@@ -117419,6 +123761,9 @@
 OUI:EC9F0DE*
  ID_OUI_FROM_DATABASE=MAX Technologies
 
+OUI:ECA138*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:ECA1D1*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -117431,6 +123776,9 @@
 OUI:ECA62F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:ECA7AD*
+ ID_OUI_FROM_DATABASE=Barrot Technology Co.,Ltd.
+
 OUI:ECA81F*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
@@ -117449,6 +123797,9 @@
 OUI:ECAA25*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:ECAA8F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:ECAAA0*
  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
 
@@ -117504,17 +123855,23 @@
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:ECBE5F*
- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
+ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
 
 OUI:ECBEDD*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:ECC018*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:ECC01B*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:ECC06A*
  ID_OUI_FROM_DATABASE=PowerChord Group Limited
 
+OUI:ECC07A*
+ ID_OUI_FROM_DATABASE=Laird Connectivity
+
 OUI:ECC1AB*
  ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
 
@@ -117524,6 +123881,9 @@
 OUI:ECC38A*
  ID_OUI_FROM_DATABASE=Accuenergy (CANADA) Inc
 
+OUI:ECC3B0*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:ECC40D*
  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
 
@@ -117575,6 +123935,9 @@
 OUI:ECD9D1*
  ID_OUI_FROM_DATABASE=Shenzhen TG-NET Botone Technology Co.,Ltd.
 
+OUI:ECDA3B*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:ECDA59*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
@@ -117587,6 +123950,9 @@
 OUI:ECDF3A*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:ECDFC9*
+ ID_OUI_FROM_DATABASE=Hangzhou Microimage Software Co., Ltd
+
 OUI:ECE09B*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -117605,6 +123971,9 @@
 OUI:ECE555*
  ID_OUI_FROM_DATABASE=Hirschmann Automation
 
+OUI:ECE61D*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:ECE6A2*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -117629,6 +123998,9 @@
 OUI:ECEBB8*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
+OUI:ECED73*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
 OUI:ECEED8*
  ID_OUI_FROM_DATABASE=ZTLX Network Technology Co.,Ltd
 
@@ -117665,6 +124037,9 @@
 OUI:ECF72B*
  ID_OUI_FROM_DATABASE=HD DIGITAL TECH CO., LTD.
 
+OUI:ECF8D0*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:ECF8EB*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
 
@@ -117755,6 +124130,9 @@
 OUI:F01898*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:F01AA0*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:F01B6C*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
@@ -117776,12 +124154,60 @@
 OUI:F01FAF*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
+OUI:F01FC7*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:F0219D*
  ID_OUI_FROM_DATABASE=Cal-Comp Electronics & Communications Company Ltd.
 
 OUI:F021E0*
  ID_OUI_FROM_DATABASE=eero inc.
 
+OUI:F0221D0*
+ ID_OUI_FROM_DATABASE=THANHBINH COMPANY - E111 FACTORY
+
+OUI:F0221D1*
+ ID_OUI_FROM_DATABASE=Dr. Eberl MBE Komponenten GmbH
+
+OUI:F0221D2*
+ ID_OUI_FROM_DATABASE=Chonel Industry?shanghai?Co., Ltd.
+
+OUI:F0221D3*
+ ID_OUI_FROM_DATABASE=ShenZhen Shizao Electronic Technology
+
+OUI:F0221D4*
+ ID_OUI_FROM_DATABASE=Synergies Intelligent Systems Inc.
+
+OUI:F0221D5*
+ ID_OUI_FROM_DATABASE=Shenzhen SuyuVisonTechnology Co.,Ltd
+
+OUI:F0221D6*
+ ID_OUI_FROM_DATABASE=Vcognition Technologies Inc.
+
+OUI:F0221D7*
+ ID_OUI_FROM_DATABASE=Bulat Co., Limited
+
+OUI:F0221D8*
+ ID_OUI_FROM_DATABASE=Shenzhen Glazero Technology Co., Ltd.
+
+OUI:F0221D9*
+ ID_OUI_FROM_DATABASE=Shanghai Gfanxvision Intelligent Technology Co.Ltd
+
+OUI:F0221DA*
+ ID_OUI_FROM_DATABASE=Hangzhou Gold Electronic Equipment Co., Ltd
+
+OUI:F0221DB*
+ ID_OUI_FROM_DATABASE=LK Systems AB
+
+OUI:F0221DC*
+ ID_OUI_FROM_DATABASE=Estone Technology LTD
+
+OUI:F0221DD*
+ ID_OUI_FROM_DATABASE=Schleissheimer Soft- und Hardwareentwicklung GmbH
+
+OUI:F0221DE*
+ ID_OUI_FROM_DATABASE=oToBrite Electronics, Inc.
+
 OUI:F0224E*
  ID_OUI_FROM_DATABASE=Esan electronic co.
 
@@ -117860,6 +124286,9 @@
 OUI:F0264C*
  ID_OUI_FROM_DATABASE=Sigrist-Photometer AG
 
+OUI:F026F8*
+ ID_OUI_FROM_DATABASE=Worldcns Co.,Ltd.
+
 OUI:F0272D*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -118055,6 +124484,9 @@
 OUI:F04A2B*
  ID_OUI_FROM_DATABASE=PYRAMID Computer GmbH
 
+OUI:F04A3D*
+ ID_OUI_FROM_DATABASE=Bosch Thermotechnik GmbH
+
 OUI:F04B3A*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
@@ -118196,6 +124628,9 @@
 OUI:F07485*
  ID_OUI_FROM_DATABASE=NGD Systems, Inc.
 
+OUI:F0748D*
+ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
+
 OUI:F074E4*
  ID_OUI_FROM_DATABASE=Thundercomm Technology Co., Ltd
 
@@ -118229,6 +124664,9 @@
 OUI:F079E8*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
+OUI:F07B65*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:F07BCB*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -118256,6 +124694,9 @@
 OUI:F08261*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:F082C0*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:F0842F*
  ID_OUI_FROM_DATABASE=ADB Broadband Italia
 
@@ -118344,11 +124785,14 @@
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:F09FC2*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:F09FFC*
  ID_OUI_FROM_DATABASE=SHARP Corporation
 
+OUI:F0A0B1*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:F0A225*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -118544,6 +124988,12 @@
 OUI:F0C478*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:F0C725*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:F0C745*
+ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+
 OUI:F0C77F*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -118565,6 +125015,9 @@
 OUI:F0CBA1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:F0CCE0*
+ ID_OUI_FROM_DATABASE=Shenzhen All-Smartlink Technology Co.,Ltd.
+
 OUI:F0CD31*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -118583,6 +125036,9 @@
 OUI:F0D2F1*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
+OUI:F0D31F*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:F0D3A7*
  ID_OUI_FROM_DATABASE=CobaltRay Co., Ltd
 
@@ -118610,6 +125066,9 @@
 OUI:F0D767*
  ID_OUI_FROM_DATABASE=Axema Passagekontroll AB
 
+OUI:F0D793*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:F0D7AA*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
@@ -118709,6 +125168,9 @@
 OUI:F0ED1E*
  ID_OUI_FROM_DATABASE=Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.
 
+OUI:F0EDB8*
+ ID_OUI_FROM_DATABASE=SERVERCOM (INDIA) PRIVATE LIMITED
+
 OUI:F0EE10*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -118757,6 +125219,9 @@
 OUI:F0F669*
  ID_OUI_FROM_DATABASE=Motion Analysis Corporation
 
+OUI:F0F69C*
+ ID_OUI_FROM_DATABASE=NIO Co., Ltd.
+
 OUI:F0F6C1*
  ID_OUI_FROM_DATABASE=Sonos, Inc.
 
@@ -118793,6 +125258,9 @@
 OUI:F0FEE7*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:F40046*
+ ID_OUI_FROM_DATABASE=ON Semiconductor
+
 OUI:F40223*
  ID_OUI_FROM_DATABASE=PAX Computer Technology(Shenzhen) Ltd.
 
@@ -118820,6 +125288,9 @@
 OUI:F4044C*
  ID_OUI_FROM_DATABASE=ValenceTech Limited
 
+OUI:F40595*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:F40616*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -118910,12 +125381,18 @@
 OUI:F40F9B*
  ID_OUI_FROM_DATABASE=WAVELINK
 
+OUI:F412DA*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:F412FA*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
 OUI:F41399*
  ID_OUI_FROM_DATABASE=Aerospace new generation communications Co.,Ltd
 
+OUI:F41532*
+ ID_OUI_FROM_DATABASE=PETAiO (NanJing), Inc.
+
 OUI:F41535*
  ID_OUI_FROM_DATABASE=SPON Communication Technology Co.,Ltd
 
@@ -118931,9 +125408,18 @@
 OUI:F419E2*
  ID_OUI_FROM_DATABASE=Volterra
 
+OUI:F41A9C*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
+OUI:F41AB0*
+ ID_OUI_FROM_DATABASE=Shenzhen Xingguodu Technology Co., Ltd.
+
 OUI:F41BA1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:F41C71*
+ ID_OUI_FROM_DATABASE=SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD
+
 OUI:F41C95*
  ID_OUI_FROM_DATABASE=BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
 
@@ -118961,12 +125447,18 @@
 OUI:F421AE*
  ID_OUI_FROM_DATABASE=Shanghai Xiaodu Technology Limited
 
+OUI:F421CA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:F4227A*
  ID_OUI_FROM_DATABASE=Guangdong Seneasy Intelligent Technology Co., Ltd.
 
 OUI:F4239C*
  ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
 
+OUI:F42462*
+ ID_OUI_FROM_DATABASE=Selcom Electronics (Shanghai) Co., Ltd
+
 OUI:F42679*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -118988,9 +125480,15 @@
 OUI:F42B48*
  ID_OUI_FROM_DATABASE=Ubiqam
 
+OUI:F42B7D*
+ ID_OUI_FROM_DATABASE=Chipsguide technology CO.,LTD.
+
 OUI:F42C56*
  ID_OUI_FROM_DATABASE=SENOR TECH CO LTD
 
+OUI:F42D06*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:F42E7F*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
@@ -119006,6 +125504,9 @@
 OUI:F4323D*
  ID_OUI_FROM_DATABASE=Sichuan tianyi kanghe communications co., LTD
 
+OUI:F4331C*
+ ID_OUI_FROM_DATABASE=Toast, Inc.
+
 OUI:F43328*
  ID_OUI_FROM_DATABASE=CIMCON Lighting Inc.
 
@@ -119099,6 +125600,12 @@
 OUI:F44D30*
  ID_OUI_FROM_DATABASE=Elitegroup Computer Systems Co.,Ltd.
 
+OUI:F44D5C*
+ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+
+OUI:F44DAD*
+ ID_OUI_FROM_DATABASE=Cable Matters Inc.
+
 OUI:F44E05*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -119180,6 +125687,12 @@
 OUI:F463E7*
  ID_OUI_FROM_DATABASE=Nanjing Maxon O.E. Tech. Co., LTD
 
+OUI:F463FC*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
+OUI:F46412*
+ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
+
 OUI:F4645D*
  ID_OUI_FROM_DATABASE=Toshiba
 
@@ -119442,7 +125955,7 @@
  ID_OUI_FROM_DATABASE=Fractyl Labs
 
 OUI:F490CBA*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Fend Incorporated
 
 OUI:F490CBB*
  ID_OUI_FROM_DATABASE=A-dec Inc.
@@ -119463,7 +125976,10 @@
  ID_OUI_FROM_DATABASE=ZHUHAI EWPE INFORMATION TECHNOLOGY INC
 
 OUI:F492BF*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
+
+OUI:F4931C*
+ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
 
 OUI:F4939F*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
@@ -119492,6 +126008,9 @@
 OUI:F49C12*
  ID_OUI_FROM_DATABASE=Structab AB
 
+OUI:F49DA7*
+ ID_OUI_FROM_DATABASE=Private
+
 OUI:F49EEF*
  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
 
@@ -119501,6 +126020,9 @@
 OUI:F49FF3*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:F4A17F*
+ ID_OUI_FROM_DATABASE=Marquardt Electronics Technology (Shanghai) Co.Ltd
+
 OUI:F4A294*
  ID_OUI_FROM_DATABASE=EAGLE WORLD DEVELOPMENT CO., LIMITED
 
@@ -119570,6 +126092,9 @@
 OUI:F4A997*
  ID_OUI_FROM_DATABASE=CANON INC.
 
+OUI:F4AAD0*
+ ID_OUI_FROM_DATABASE=OHSUNG
+
 OUI:F4ACC1*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -119636,6 +126161,9 @@
 OUI:F4B8A7*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:F4BBC7*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:F4BC97*
  ID_OUI_FROM_DATABASE=Shenzhen Crave Communication Co., LTD
 
@@ -119738,6 +126266,9 @@
 OUI:F4D488*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:F4D580*
+ ID_OUI_FROM_DATABASE=YAMAHA CORPORATION
+
 OUI:F4D620*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -119745,7 +126276,7 @@
  ID_OUI_FROM_DATABASE=LGS Innovations, LLC
 
 OUI:F4D9C6*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:F4D9FB*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -119790,7 +126321,7 @@
  ID_OUI_FROM_DATABASE=COYOTE SYSTEM
 
 OUI:F4E2C6*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:F4E3FB*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -119813,9 +126344,15 @@
 OUI:F4E6D7*
  ID_OUI_FROM_DATABASE=Solar Power Technologies, Inc.
 
+OUI:F4E8C7*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:F4E926*
  ID_OUI_FROM_DATABASE=Tianjin Zanpu Technology Inc.
 
+OUI:F4E975*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:F4E9D4*
  ID_OUI_FROM_DATABASE=QLogic Corporation
 
@@ -119843,6 +126380,9 @@
 OUI:F4EE14*
  ID_OUI_FROM_DATABASE=MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
 
+OUI:F4EE31*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:F4EF9E*
  ID_OUI_FROM_DATABASE=SGSG SCIENCE & TECHNOLOGY CO. LTD
 
@@ -119852,6 +126392,9 @@
 OUI:F4F197*
  ID_OUI_FROM_DATABASE=EMTAKE Inc
 
+OUI:F4F19E*
+ ID_OUI_FROM_DATABASE=Wistron InforComm (Zhongshan) Corporation
+
 OUI:F4F1E1*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
@@ -119906,6 +126449,9 @@
 OUI:F4FEFB*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:F8009D*
+ ID_OUI_FROM_DATABASE=INTRACOM DEFENSE S.A.
+
 OUI:F800A1*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -119972,6 +126518,9 @@
 OUI:F8051C*
  ID_OUI_FROM_DATABASE=DRS Imaging and Targeting Solutions
 
+OUI:F8075D*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:F8084F*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -119996,6 +126545,9 @@
 OUI:F80D60*
  ID_OUI_FROM_DATABASE=CANON INC.
 
+OUI:F80DA9*
+ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+
 OUI:F80DAC*
  ID_OUI_FROM_DATABASE=HP Inc.
 
@@ -120030,7 +126582,7 @@
  ID_OUI_FROM_DATABASE=Nokia
 
 OUI:F814FE*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+ ID_OUI_FROM_DATABASE=UNION MAN TECHNOLOGY CO.,LTD
 
 OUI:F81547*
  ID_OUI_FROM_DATABASE=Avaya Inc
@@ -120122,6 +126674,9 @@
 OUI:F820A9*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:F82229*
+ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+
 OUI:F82285*
  ID_OUI_FROM_DATABASE=Cypress Technology CO., LTD.
 
@@ -120134,6 +126689,9 @@
 OUI:F82441*
  ID_OUI_FROM_DATABASE=Yeelink
 
+OUI:F824E4*
+ ID_OUI_FROM_DATABASE=Beyonics Technology Electronic (Changshu) Co., Ltd
+
 OUI:F82551*
  ID_OUI_FROM_DATABASE=Seiko Epson Corporation
 
@@ -120167,6 +126725,9 @@
 OUI:F82DC0*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:F82E0C*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:F82E3F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -120212,6 +126773,12 @@
 OUI:F83441*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:F83451*
+ ID_OUI_FROM_DATABASE=Comcast-SRL
+
+OUI:F8345A*
+ ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
+
 OUI:F83553*
  ID_OUI_FROM_DATABASE=Magenta Research Ltd.
 
@@ -120233,6 +126800,9 @@
 OUI:F83B7E*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:F83C80*
+ ID_OUI_FROM_DATABASE=MITSUMI ELECTRIC CO.,LTD.
+
 OUI:F83CBF*
  ID_OUI_FROM_DATABASE=BOTATO ELECTRONICS SDN BHD
 
@@ -120356,6 +126926,12 @@
 OUI:F85B3B*
  ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
 
+OUI:F85B6E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F85B9B*
+ ID_OUI_FROM_DATABASE=iMercury
+
 OUI:F85B9C*
  ID_OUI_FROM_DATABASE=SB SYSTEMS Co.,Ltd
 
@@ -120371,6 +126947,9 @@
 OUI:F85C7D*
  ID_OUI_FROM_DATABASE=Shenzhen Honesty Electronics Co.,Ltd.
 
+OUI:F85C7E*
+ ID_OUI_FROM_DATABASE=Shenzhen Honesty Electronics Co.,Ltd.
+
 OUI:F85E0B*
  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
 
@@ -120422,6 +127001,9 @@
 OUI:F86971*
  ID_OUI_FROM_DATABASE=Seibu Electric Co.,
 
+OUI:F86B14*
+ ID_OUI_FROM_DATABASE=Barrot Technology Co.,LTD
+
 OUI:F86BD9*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -120446,6 +127028,9 @@
 OUI:F86FDE*
  ID_OUI_FROM_DATABASE=Shenzhen Goodix Technology Co.,Ltd.
 
+OUI:F8710C*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:F871FE*
  ID_OUI_FROM_DATABASE=The Goldman Sachs Group, Inc.
 
@@ -120470,9 +127055,18 @@
 OUI:F877B8*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:F87907*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:F8790A*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:F87928*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:F87999*
+ ID_OUI_FROM_DATABASE=Guangdong Jiuzhi Technology Co.,Ltd
+
 OUI:F87A41*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -120491,6 +127085,9 @@
 OUI:F87B8C*
  ID_OUI_FROM_DATABASE=Amped Wireless
 
+OUI:F87D76*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:F87FA5*
  ID_OUI_FROM_DATABASE=GREATEK
 
@@ -120644,9 +127241,15 @@
 OUI:F89955*
  ID_OUI_FROM_DATABASE=Fortress Technology Inc
 
+OUI:F89A25*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:F89A78*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:F89B6E*
+ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
+
 OUI:F89D0D*
  ID_OUI_FROM_DATABASE=Control Technology Inc.
 
@@ -120686,6 +127289,12 @@
 OUI:F8A45F*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:F8A475*
+ ID_OUI_FROM_DATABASE=PT Indoreka Jaya Wutama
+
+OUI:F8A4FB*
+ ID_OUI_FROM_DATABASE=Nanjing Decowell Automation Co.,LTD
+
 OUI:F8A5C5*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -120713,6 +127322,9 @@
 OUI:F8AA8A*
  ID_OUI_FROM_DATABASE=Axview Technology (Shenzhen) Co.,Ltd
 
+OUI:F8AAB3*
+ ID_OUI_FROM_DATABASE=DESSMANN (China) Machinery & Electronic  Co., Ltd
+
 OUI:F8AB05*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -120816,7 +127428,7 @@
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:F8B8B4*
- ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
 
 OUI:F8B95A*
  ID_OUI_FROM_DATABASE=LG Innotek
@@ -120855,7 +127467,7 @@
  ID_OUI_FROM_DATABASE=Xi'an Link-Science Technology Co.,Ltd
 
 OUI:F8C249*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=AMPERE COMPUTING LLC
 
 OUI:F8C288*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -120914,6 +127526,9 @@
 OUI:F8D111*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:F8D2AC*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:F8D3A9*
  ID_OUI_FROM_DATABASE=AXAN Networks
 
@@ -120926,6 +127541,9 @@
 OUI:F8D756*
  ID_OUI_FROM_DATABASE=Simm Tronic Limited
 
+OUI:F8D758*
+ ID_OUI_FROM_DATABASE=Veratron AG
+
 OUI:F8D7BF*
  ID_OUI_FROM_DATABASE=REV Ritter GmbH
 
@@ -120956,6 +127574,9 @@
 OUI:F8DC7A*
  ID_OUI_FROM_DATABASE=Variscite LTD
 
+OUI:F8DE73*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:F8DF15*
  ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd
 
@@ -121025,6 +127646,9 @@
 OUI:F8EDA5*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:F8EDAE*
+ ID_OUI_FROM_DATABASE=MOBIWIRE MOBILES(NINGBO) CO.,LTD
+
 OUI:F8F005*
  ID_OUI_FROM_DATABASE=Newport Media Inc.
 
@@ -121034,6 +127658,9 @@
 OUI:F8F082*
  ID_OUI_FROM_DATABASE=NAGTECH LLC
 
+OUI:F8F0C5*
+ ID_OUI_FROM_DATABASE=Suzhou Kuhan Information Technologies Co.,Ltd.
+
 OUI:F8F1B6*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
@@ -121109,6 +127736,9 @@
 OUI:FC06ED*
  ID_OUI_FROM_DATABASE=M2Motive Technology Inc.
 
+OUI:FC0736*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:FC07A0*
  ID_OUI_FROM_DATABASE=LRE Medical GmbH
 
@@ -121148,6 +127778,9 @@
 OUI:FC10C6*
  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
 
+OUI:FC1165*
+ ID_OUI_FROM_DATABASE=Cambium Networks Limited
+
 OUI:FC1186*
  ID_OUI_FROM_DATABASE=Logic3 plc
 
@@ -121157,6 +127790,9 @@
 OUI:FC122C*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:FC1263*
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+
 OUI:FC1349*
  ID_OUI_FROM_DATABASE=Global Apps Corp.
 
@@ -121175,6 +127811,9 @@
 OUI:FC1794*
  ID_OUI_FROM_DATABASE=InterCreative Co., Ltd
 
+OUI:FC1803*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:FC183C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -121205,6 +127844,9 @@
 OUI:FC1D2A*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:FC1D3A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:FC1D43*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -121226,6 +127868,12 @@
 OUI:FC229C*
  ID_OUI_FROM_DATABASE=Han Kyung I Net Co.,Ltd.
 
+OUI:FC22D3*
+ ID_OUI_FROM_DATABASE=FDSYS
+
+OUI:FC22F4*
+ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+
 OUI:FC2325*
  ID_OUI_FROM_DATABASE=EosTek (Shenzhen) Co., Ltd.
 
@@ -121241,6 +127889,9 @@
 OUI:FC29F3*
  ID_OUI_FROM_DATABASE=McPay Co.,LTD.
 
+OUI:FC2A46*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:FC2A54*
  ID_OUI_FROM_DATABASE=Connected Data, Inc.
 
@@ -121250,6 +127901,9 @@
 OUI:FC2BB2*
  ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
 
+OUI:FC2CFD*
+ ID_OUI_FROM_DATABASE=dormakaba Canada Inc. - Keyscan
+
 OUI:FC2D5E*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -121271,12 +127925,18 @@
 OUI:FC2FEF*
  ID_OUI_FROM_DATABASE=UTT Technologies Co., Ltd.
 
+OUI:FC315D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:FC3288*
  ID_OUI_FROM_DATABASE=CELOT Wireless Co., Ltd
 
 OUI:FC3342*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:FC3357*
+ ID_OUI_FROM_DATABASE=KAGA FEI Co., Ltd.
+
 OUI:FC335F*
  ID_OUI_FROM_DATABASE=Polyera
 
@@ -121287,7 +127947,7 @@
  ID_OUI_FROM_DATABASE=Favite Inc.
 
 OUI:FC35E6*
- ID_OUI_FROM_DATABASE=Visteon corp
+ ID_OUI_FROM_DATABASE=Visteon Corporation
 
 OUI:FC372B*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
@@ -121310,6 +127970,9 @@
 OUI:FC3F7C*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:FC3FA6*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:FC3FAB*
  ID_OUI_FROM_DATABASE=Henan Lanxin Technology Co., Ltd
 
@@ -121346,6 +128009,12 @@
 OUI:FC45C3*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:FC47D8*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:FC48C9*
+ ID_OUI_FROM_DATABASE=Yobiiq Intelligence B.V.
+
 OUI:FC48EF*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -121394,6 +128063,9 @@
 OUI:FC55DC*
  ID_OUI_FROM_DATABASE=Baltic Latvian Universal Electronics LLC
 
+OUI:FC5703*
+ ID_OUI_FROM_DATABASE=Hisense broadband multimedia technology Co.,Ltd
+
 OUI:FC584A*
  ID_OUI_FROM_DATABASE=xiamenshi c-chip technology co., ltd
 
@@ -121463,9 +128135,18 @@
 OUI:FC6179A*
  ID_OUI_FROM_DATABASE=Shenzhen Dptek Technology Co., Ltd.
 
+OUI:FC6179B*
+ ID_OUI_FROM_DATABASE=Fulian Precision Electronics(Tianjin) Co., Ltd
+
+OUI:FC6179C*
+ ID_OUI_FROM_DATABASE=Shenzhen Xmitech Electronic Co.,Ltd
+
 OUI:FC6179D*
  ID_OUI_FROM_DATABASE=Int'Act Pty Ltd
 
+OUI:FC6179E*
+ ID_OUI_FROM_DATABASE=ACCO Brands USA LLC
+
 OUI:FC6198*
  ID_OUI_FROM_DATABASE=NEC Personal Products, Ltd
 
@@ -121493,6 +128174,9 @@
 OUI:FC66CF*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:FC671F*
+ ID_OUI_FROM_DATABASE=Tuya Smart Inc.
+
 OUI:FC683E*
  ID_OUI_FROM_DATABASE=Directed Perception, Inc
 
@@ -121502,6 +128186,9 @@
 OUI:FC698C*
  ID_OUI_FROM_DATABASE=ANDREAS STIHL AG & Co. KG
 
+OUI:FC6A1C*
+ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
+
 OUI:FC6BF0*
  ID_OUI_FROM_DATABASE=TOPWELL INTERNATIONAL HOLDINDS LIMITED
 
@@ -121541,6 +128228,9 @@
 OUI:FC790B*
  ID_OUI_FROM_DATABASE=Hitachi High Technologies America, Inc.
 
+OUI:FC7A58*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital  Technology  CO., Ltd
+
 OUI:FC7C02*
  ID_OUI_FROM_DATABASE=Phicomm (Shanghai) Co., Ltd.
 
@@ -121568,6 +128258,9 @@
 OUI:FC8417*
  ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
 
+OUI:FC84A7*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
 OUI:FC8596*
  ID_OUI_FROM_DATABASE=Axonne Inc.
 
@@ -121610,6 +128303,9 @@
 OUI:FC9114*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:FC9189*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+
 OUI:FC923B*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -121649,6 +128345,9 @@
 OUI:FC9C98*
  ID_OUI_FROM_DATABASE=Arlo Technology
 
+OUI:FC9CA7*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:FC9DD8*
  ID_OUI_FROM_DATABASE=Beijing TongTongYiLian Science and Technology Ltd.
 
@@ -121658,9 +128357,15 @@
 OUI:FC9FE1*
  ID_OUI_FROM_DATABASE=CONWIN.Tech. Ltd
 
+OUI:FC9FFD*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:FCA05A*
  ID_OUI_FROM_DATABASE=Oray.com co., LTD.
 
+OUI:FCA0F3*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:FCA13E*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -121781,6 +128486,9 @@
 OUI:FCB0C4*
  ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd
 
+OUI:FCB0DE*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:FCB10D*
  ID_OUI_FROM_DATABASE=Shenzhen Tian Kun Technology Co.,LTD.
 
@@ -121959,7 +128667,7 @@
  ID_OUI_FROM_DATABASE=Messana Air.Ray Conditioning s.r.l.
 
 OUI:FCD5D9*
- ID_OUI_FROM_DATABASE=Shenzhen SDMC Technology Co., Ltd.
+ ID_OUI_FROM_DATABASE=Shenzhen SDMC Technology CO.,Ltd.
 
 OUI:FCD6BD*
  ID_OUI_FROM_DATABASE=Robert Bosch GmbH
@@ -121967,6 +128675,9 @@
 OUI:FCD733*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:FCD749*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:FCD817*
  ID_OUI_FROM_DATABASE=Beijing Hesun Technologies Co.Ltd.
 
@@ -121994,6 +128705,9 @@
 OUI:FCDE90*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:FCDF00*
+ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+
 OUI:FCE14F*
  ID_OUI_FROM_DATABASE=BRK Brands, Inc.
 
@@ -122033,11 +128747,14 @@
 OUI:FCE998*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:FCE9D8*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:FCEA50*
  ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
 
 OUI:FCECDA*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ ID_OUI_FROM_DATABASE=Ubiquiti Inc
 
 OUI:FCEDB9*
  ID_OUI_FROM_DATABASE=Arrayent
diff --git a/hwdb.d/20-acpi-vendor.hwdb b/hwdb.d/20-acpi-vendor.hwdb
index e23dbbb..ce57ffc 100644
--- a/hwdb.d/20-acpi-vendor.hwdb
+++ b/hwdb.d/20-acpi-vendor.hwdb
@@ -66,6 +66,9 @@
 acpi:BRCM*:
  ID_VENDOR_FROM_DATABASE=Broadcom Corporation
 
+acpi:CIXH*:
+ ID_VENDOR_FROM_DATABASE=Cix Technology (Shanghai) Co., Ltd.
+
 acpi:CMHR*:
  ID_VENDOR_FROM_DATABASE=COMHEAR, INC.
 
@@ -99,9 +102,15 @@
 acpi:ELAN*:
  ID_VENDOR_FROM_DATABASE=ELAN MICROELECTRONICS CORPORATION
 
+acpi:ELAS*:
+ ID_VENDOR_FROM_DATABASE=Elliptic Laboratories AS
+
 acpi:ESSX*:
  ID_VENDOR_FROM_DATABASE=Everest Semiconductor Co., Ltd.
 
+acpi:ETDS*:
+ ID_VENDOR_FROM_DATABASE=EyeTech Digital Systems
+
 acpi:EXAR*:
  ID_VENDOR_FROM_DATABASE=Exar Corporation
 
@@ -123,6 +132,9 @@
 acpi:GOOG*:
  ID_VENDOR_FROM_DATABASE=Google, Inc.
 
+acpi:GOUP*:
+ ID_VENDOR_FROM_DATABASE=GoUp Co.,Ltd
+
 acpi:GTCH*:
  ID_VENDOR_FROM_DATABASE=G2touch Co., LTD
 
@@ -183,6 +195,9 @@
 acpi:IPHI*:
  ID_VENDOR_FROM_DATABASE=Inphi Corporation
 
+acpi:JMIC*:
+ ID_VENDOR_FROM_DATABASE=Shenzhen Jaguar Microsystems Co.,Ltd.
+
 acpi:JSYS*:
  ID_VENDOR_FROM_DATABASE=Juniper Systems, Inc.
 
@@ -204,6 +219,9 @@
 acpi:MCHP*:
  ID_VENDOR_FROM_DATABASE=Microchip Technology Inc
 
+acpi:MCRY*:
+ ID_VENDOR_FROM_DATABASE=Micro Crystal AG
+
 acpi:MIPI*:
  ID_VENDOR_FROM_DATABASE=MIPI Alliance
 
@@ -1080,6 +1098,9 @@
 acpi:BCI*:
  ID_VENDOR_FROM_DATABASE=Broadata Communications Inc.
 
+acpi:BCK*:
+ ID_VENDOR_FROM_DATABASE=Beck GmbH & Co. Elektronik Bauelemente KG
+
 acpi:BCM*:
  ID_VENDOR_FROM_DATABASE=Broadcom
 
@@ -1131,6 +1152,9 @@
 acpi:BIC*:
  ID_VENDOR_FROM_DATABASE=Big Island Communications
 
+acpi:BIG*:
+ ID_VENDOR_FROM_DATABASE=Bigscreen, Inc.
+
 acpi:BII*:
  ID_VENDOR_FROM_DATABASE=Boeckeler Instruments Inc
 
@@ -2238,6 +2262,9 @@
 acpi:DYX*:
  ID_VENDOR_FROM_DATABASE=Dynax Electronics (HK) Ltd
 
+acpi:EAC*:
+ ID_VENDOR_FROM_DATABASE=Emotiva Audio Corp.
+
 acpi:EAG*:
  ID_VENDOR_FROM_DATABASE=ELTEC Elektronik AG
 
@@ -2523,6 +2550,9 @@
 acpi:ETD*:
  ID_VENDOR_FROM_DATABASE=ELAN MICROELECTRONICS CORPORATION
 
+acpi:ETG*:
+ ID_VENDOR_FROM_DATABASE=Eizo Technologies GmbH
+
 acpi:ETH*:
  ID_VENDOR_FROM_DATABASE=Etherboot Project
 
@@ -2550,6 +2580,9 @@
 acpi:EVI*:
  ID_VENDOR_FROM_DATABASE=eviateg GmbH
 
+acpi:EVP*:
+ ID_VENDOR_FROM_DATABASE=EverPro Technologies Company Limited
+
 acpi:EVX*:
  ID_VENDOR_FROM_DATABASE=Everex
 
@@ -3018,6 +3051,9 @@
 acpi:GUD*:
  ID_VENDOR_FROM_DATABASE=Guntermann & Drunck GmbH
 
+acpi:GUP*:
+ ID_VENDOR_FROM_DATABASE=GoUp Co.,Ltd
+
 acpi:GUZ*:
  ID_VENDOR_FROM_DATABASE=Guzik Technical Enterprises
 
@@ -3027,6 +3063,9 @@
 acpi:GVL*:
  ID_VENDOR_FROM_DATABASE=Global Village Communication
 
+acpi:GVS*:
+ ID_VENDOR_FROM_DATABASE=G.VISION
+
 acpi:GWI*:
  ID_VENDOR_FROM_DATABASE=GW Instruments
 
@@ -3036,6 +3075,9 @@
 acpi:GWY*:
  ID_VENDOR_FROM_DATABASE=Gateway 2000
 
+acpi:GXL*:
+ ID_VENDOR_FROM_DATABASE=Galaxy Microsystems Ltd.
+
 acpi:GZE*:
  ID_VENDOR_FROM_DATABASE=GUNZE Limited
 
@@ -3498,6 +3540,9 @@
 acpi:IMT*:
  ID_VENDOR_FROM_DATABASE=Inmax Technology Corporation
 
+acpi:IMX*:
+ ID_VENDOR_FROM_DATABASE=arpara Technology Co., Ltd.
+
 acpi:IMS*:
  ID_VENDOR_FROM_DATABASE=Integrated Micro Solution Inc.
 
@@ -3879,6 +3924,9 @@
 acpi:KIS*:
  ID_VENDOR_FROM_DATABASE=KiSS Technology A/S
 
+acpi:KLT*:
+ ID_VENDOR_FROM_DATABASE=Colorlight
+
 acpi:KMC*:
  ID_VENDOR_FROM_DATABASE=Mitsumi Company Ltd
 
@@ -4089,6 +4137,9 @@
 acpi:LGD*:
  ID_VENDOR_FROM_DATABASE=LG Display
 
+acpi:LGD*:
+ ID_VENDOR_FROM_DATABASE=LG Display
+
 acpi:LGI*:
  ID_VENDOR_FROM_DATABASE=Logitech Inc
 
@@ -4647,6 +4698,9 @@
 acpi:MRD*:
  ID_VENDOR_FROM_DATABASE=MicroDisplay Corporation
 
+acpi:MRG*:
+ ID_VENDOR_FROM_DATABASE=Nreal
+
 acpi:MRK*:
  ID_VENDOR_FROM_DATABASE=Maruko & Company Ltd
 
@@ -4887,6 +4941,9 @@
 acpi:NCT*:
  ID_VENDOR_FROM_DATABASE=NEC CustomTechnica, Ltd.
 
+acpi:NCV*:
+ ID_VENDOR_FROM_DATABASE=NewCoSemi (Beijing) Technology CO.,Ltd.
+
 acpi:NDC*:
  ID_VENDOR_FROM_DATABASE=National DataComm Corporaiton
 
@@ -5079,6 +5136,9 @@
 acpi:NVO*:
  ID_VENDOR_FROM_DATABASE=Netvio Ltd.
 
+acpi:NVR*:
+ ID_VENDOR_FROM_DATABASE=NOLO CO., LTD.
+
 acpi:NVT*:
  ID_VENDOR_FROM_DATABASE=Navatek Engineering Corporation
 
@@ -5148,6 +5208,9 @@
 acpi:OEI*:
  ID_VENDOR_FROM_DATABASE=Optum Engineering Inc.
 
+acpi:OFI*:
+ ID_VENDOR_FROM_DATABASE=Jiangxi Jinghao Optical Co., Ltd.
+
 acpi:OHW*:
  ID_VENDOR_FROM_DATABASE=M-Labs Limited
 
@@ -5286,6 +5349,9 @@
 acpi:OZC*:
  ID_VENDOR_FROM_DATABASE=OZ Corporation
 
+acpi:OZD*:
+ ID_VENDOR_FROM_DATABASE=OZO Co.Ltd
+
 acpi:OZO*:
  ID_VENDOR_FROM_DATABASE=Tribe Computer Works Inc
 
@@ -5655,9 +5721,18 @@
 acpi:PTS*:
  ID_VENDOR_FROM_DATABASE=Plain Tree Systems Inc
 
+acpi:PTW*:
+ ID_VENDOR_FROM_DATABASE=DO NOT USE - PTW
+
+acpi:PTX*:
+ ID_VENDOR_FROM_DATABASE=Printronix LLC
+
 acpi:PUL*:
  ID_VENDOR_FROM_DATABASE=Pulse-Eight Ltd
 
+acpi:PVC*:
+ ID_VENDOR_FROM_DATABASE=DO NOT USE - PVC
+
 acpi:PVG*:
  ID_VENDOR_FROM_DATABASE=Proview Global Co., Ltd
 
@@ -5805,6 +5880,9 @@
 acpi:RDI*:
  ID_VENDOR_FROM_DATABASE=Rainbow Displays, Inc.
 
+acpi:RDL*:
+ ID_VENDOR_FROM_DATABASE=Riedel Communications Canada Inc.
+
 acpi:RDM*:
  ID_VENDOR_FROM_DATABASE=Tremon Enterprises Company Ltd
 
@@ -6198,6 +6276,9 @@
 acpi:SGM*:
  ID_VENDOR_FROM_DATABASE=SAGEM
 
+acpi:SGN*:
+ ID_VENDOR_FROM_DATABASE=Shenzhen Soogeen Electronics Co., LTD.
+
 acpi:SGO*:
  ID_VENDOR_FROM_DATABASE=Logos Design A/S
 
@@ -6501,6 +6582,9 @@
 acpi:SSE*:
  ID_VENDOR_FROM_DATABASE=Samsung Electronic Co.
 
+acpi:SSG*:
+ ID_VENDOR_FROM_DATABASE=Steelseries ApS
+
 acpi:SSI*:
  ID_VENDOR_FROM_DATABASE=S-S Technology Inc
 
@@ -6936,6 +7020,9 @@
 acpi:TLY*:
  ID_VENDOR_FROM_DATABASE=Truly Semiconductors Ltd.
 
+acpi:TMA*:
+ ID_VENDOR_FROM_DATABASE=Tianma Microelectronics Ltd.
+
 acpi:TMC*:
  ID_VENDOR_FROM_DATABASE=Techmedia Computer Systems Corporation
 
@@ -7482,6 +7569,9 @@
 acpi:VNC*:
  ID_VENDOR_FROM_DATABASE=Vinca Corporation
 
+acpi:VNX*:
+ ID_VENDOR_FROM_DATABASE=Venetex Corporation
+
 acpi:VOB*:
  ID_VENDOR_FROM_DATABASE=MaxData Computer AG
 
@@ -7632,6 +7722,9 @@
 acpi:WLF*:
  ID_VENDOR_FROM_DATABASE=WOLF Advanced Technology
 
+acpi:WMI*:
+ ID_VENDOR_FROM_DATABASE=Weidmuller Interface GmbH & Co. KG
+
 acpi:WML*:
  ID_VENDOR_FROM_DATABASE=Wolfson Microelectronics Ltd
 
diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch
index 79683c2..6d4e61c 100644
--- a/hwdb.d/20-acpi-vendor.hwdb.patch
+++ b/hwdb.d/20-acpi-vendor.hwdb.patch
@@ -1,5 +1,5 @@
---- 20-acpi-vendor.hwdb.base	2022-04-28 19:44:19.217010343 +0200
-+++ 20-acpi-vendor.hwdb	2022-04-28 19:44:19.224010434 +0200
+--- 20-acpi-vendor.hwdb.base	2023-02-15 18:03:45.791408751 +0000
++++ 20-acpi-vendor.hwdb	2023-02-15 18:03:45.799408909 +0000
 @@ -3,6 +3,8 @@
  # Data imported from:
  #     https://uefi.org/uefi-pnp-export
@@ -19,7 +19,7 @@
  acpi:AMDI*:
   ID_VENDOR_FROM_DATABASE=AMD
  
-@@ -334,6 +333,9 @@
+@@ -352,6 +351,9 @@
  acpi:AAA*:
   ID_VENDOR_FROM_DATABASE=Avolites Ltd
  
@@ -29,7 +29,7 @@
  acpi:AAE*:
   ID_VENDOR_FROM_DATABASE=Anatek Electronics Inc.
  
-@@ -361,6 +363,9 @@
+@@ -379,6 +381,9 @@
  acpi:ABO*:
   ID_VENDOR_FROM_DATABASE=D-Link Systems Inc
  
@@ -39,7 +39,7 @@
  acpi:ABS*:
   ID_VENDOR_FROM_DATABASE=Abaco Systems, Inc.
  
-@@ -406,7 +411,7 @@
+@@ -424,7 +429,7 @@
  acpi:ACO*:
   ID_VENDOR_FROM_DATABASE=Allion Computer Inc.
  
@@ -48,7 +48,7 @@
   ID_VENDOR_FROM_DATABASE=Aspen Tech Inc
  
  acpi:ACR*:
-@@ -682,6 +687,9 @@
+@@ -700,6 +705,9 @@
  acpi:AMT*:
   ID_VENDOR_FROM_DATABASE=AMT International Industry
  
@@ -58,7 +58,7 @@
  acpi:AMX*:
   ID_VENDOR_FROM_DATABASE=AMX LLC
  
-@@ -730,6 +738,9 @@
+@@ -748,6 +756,9 @@
  acpi:AOA*:
   ID_VENDOR_FROM_DATABASE=AOpen Inc.
  
@@ -68,7 +68,7 @@
  acpi:AOE*:
   ID_VENDOR_FROM_DATABASE=Advanced Optics Electronics, Inc.
  
-@@ -739,6 +750,9 @@
+@@ -757,6 +768,9 @@
  acpi:AOT*:
   ID_VENDOR_FROM_DATABASE=Alcatel
  
@@ -78,7 +78,7 @@
  acpi:APC*:
   ID_VENDOR_FROM_DATABASE=American Power Conversion
  
-@@ -917,7 +931,7 @@
+@@ -935,7 +949,7 @@
   ID_VENDOR_FROM_DATABASE=ALPS ALPINE CO., LTD.
  
  acpi:AUO*:
@@ -87,7 +87,7 @@
  
  acpi:AUR*:
   ID_VENDOR_FROM_DATABASE=Aureal Semiconductor
-@@ -997,6 +1011,9 @@
+@@ -1015,6 +1029,9 @@
  acpi:AXE*:
   ID_VENDOR_FROM_DATABASE=Axell Corporation
  
@@ -97,7 +97,7 @@
  acpi:AXI*:
   ID_VENDOR_FROM_DATABASE=American Magnetics
  
-@@ -1147,6 +1164,9 @@
+@@ -1171,6 +1188,9 @@
  acpi:BML*:
   ID_VENDOR_FROM_DATABASE=BIOMED Lab
  
@@ -107,7 +107,7 @@
  acpi:BMS*:
   ID_VENDOR_FROM_DATABASE=BIOMEDISYS
  
-@@ -1159,6 +1179,9 @@
+@@ -1183,6 +1203,9 @@
  acpi:BNO*:
   ID_VENDOR_FROM_DATABASE=Bang & Olufsen
  
@@ -117,7 +117,7 @@
  acpi:BNS*:
   ID_VENDOR_FROM_DATABASE=Boulder Nonlinear Systems
  
-@@ -1402,6 +1425,9 @@
+@@ -1426,6 +1449,9 @@
  acpi:CHA*:
   ID_VENDOR_FROM_DATABASE=Chase Research PLC
  
@@ -127,7 +127,7 @@
  acpi:CHD*:
   ID_VENDOR_FROM_DATABASE=ChangHong Electric Co.,Ltd
  
-@@ -1564,6 +1590,9 @@
+@@ -1588,6 +1614,9 @@
  acpi:COD*:
   ID_VENDOR_FROM_DATABASE=CODAN Pty. Ltd.
  
@@ -137,7 +137,7 @@
  acpi:COI*:
   ID_VENDOR_FROM_DATABASE=Codec Inc.
  
-@@ -1973,7 +2002,7 @@
+@@ -1997,7 +2026,7 @@
   ID_VENDOR_FROM_DATABASE=Dragon Information Technology
  
  acpi:DJE*:
@@ -146,7 +146,7 @@
  
  acpi:DJP*:
   ID_VENDOR_FROM_DATABASE=Maygay Machines, Ltd
-@@ -2311,6 +2340,9 @@
+@@ -2338,6 +2367,9 @@
  acpi:EIN*:
   ID_VENDOR_FROM_DATABASE=Elegant Invention
  
@@ -156,7 +156,7 @@
  acpi:EKA*:
   ID_VENDOR_FROM_DATABASE=MagTek Inc.
  
-@@ -2575,6 +2607,9 @@
+@@ -2608,6 +2640,9 @@
  acpi:FCG*:
   ID_VENDOR_FROM_DATABASE=First International Computer Ltd
  
@@ -166,7 +166,7 @@
  acpi:FCS*:
   ID_VENDOR_FROM_DATABASE=Focus Enhancements, Inc.
  
-@@ -2951,7 +2986,7 @@
+@@ -2984,7 +3019,7 @@
   ID_VENDOR_FROM_DATABASE=General Standards Corporation
  
  acpi:GSM*:
@@ -175,7 +175,7 @@
  
  acpi:GSN*:
   ID_VENDOR_FROM_DATABASE=Grandstream Networks, Inc.
-@@ -3052,6 +3087,9 @@
+@@ -3094,6 +3129,9 @@
  acpi:HEC*:
   ID_VENDOR_FROM_DATABASE=Hisense Electric Co., Ltd.
  
@@ -185,7 +185,7 @@
  acpi:HEL*:
   ID_VENDOR_FROM_DATABASE=Hitachi Micro Systems Europe Ltd
  
-@@ -3184,6 +3222,9 @@
+@@ -3226,6 +3264,9 @@
  acpi:HSD*:
   ID_VENDOR_FROM_DATABASE=HannStar Display Corp
  
@@ -195,7 +195,7 @@
  acpi:HSM*:
   ID_VENDOR_FROM_DATABASE=AT&T Microelectronics
  
-@@ -3310,6 +3351,9 @@
+@@ -3352,6 +3393,9 @@
  acpi:ICI*:
   ID_VENDOR_FROM_DATABASE=Infotek Communication Inc
  
@@ -205,7 +205,7 @@
  acpi:ICM*:
   ID_VENDOR_FROM_DATABASE=Intracom SA
  
-@@ -3406,6 +3450,9 @@
+@@ -3448,6 +3492,9 @@
  acpi:IKE*:
   ID_VENDOR_FROM_DATABASE=Ikegami Tsushinki Co. Ltd.
  
@@ -215,9 +215,9 @@
  acpi:IKS*:
   ID_VENDOR_FROM_DATABASE=Ikos Systems Inc
  
-@@ -3451,6 +3498,9 @@
- acpi:IMT*:
-  ID_VENDOR_FROM_DATABASE=Inmax Technology Corporation
+@@ -3496,6 +3543,9 @@
+ acpi:IMX*:
+  ID_VENDOR_FROM_DATABASE=arpara Technology Co., Ltd.
  
 +acpi:IMS*:
 + ID_VENDOR_FROM_DATABASE=Integrated Micro Solution Inc.
@@ -225,7 +225,7 @@
  acpi:INA*:
   ID_VENDOR_FROM_DATABASE=Inventec Corporation
  
-@@ -3967,6 +4017,9 @@
+@@ -4015,6 +4065,9 @@
  acpi:LAN*:
   ID_VENDOR_FROM_DATABASE=Sodeman Lancom Inc
  
@@ -235,7 +235,7 @@
  acpi:LAS*:
   ID_VENDOR_FROM_DATABASE=LASAT Comm. A/S
  
-@@ -4015,6 +4068,9 @@
+@@ -4063,6 +4116,9 @@
  acpi:LED*:
   ID_VENDOR_FROM_DATABASE=Long Engineering Design Inc
  
@@ -245,9 +245,9 @@
  acpi:LEG*:
   ID_VENDOR_FROM_DATABASE=Legerity, Inc
  
-@@ -4030,6 +4086,9 @@
- acpi:LGC*:
-  ID_VENDOR_FROM_DATABASE=Logic Ltd
+@@ -4081,6 +4137,9 @@
+ acpi:LGD*:
+  ID_VENDOR_FROM_DATABASE=LG Display
  
 +acpi:LGD*:
 + ID_VENDOR_FROM_DATABASE=LG Display
@@ -255,7 +255,7 @@
  acpi:LGI*:
   ID_VENDOR_FROM_DATABASE=Logitech Inc
  
-@@ -4087,6 +4146,9 @@
+@@ -4138,6 +4197,9 @@
  acpi:LND*:
   ID_VENDOR_FROM_DATABASE=Land Computer Company Ltd
  
@@ -265,7 +265,7 @@
  acpi:LNK*:
   ID_VENDOR_FROM_DATABASE=Link Tech Inc
  
-@@ -4121,7 +4183,7 @@
+@@ -4172,7 +4234,7 @@
   ID_VENDOR_FROM_DATABASE=Design Technology
  
  acpi:LPL*:
@@ -274,7 +274,7 @@
  
  acpi:LSC*:
   ID_VENDOR_FROM_DATABASE=LifeSize Communications
-@@ -4297,6 +4359,9 @@
+@@ -4348,6 +4410,9 @@
  acpi:MCX*:
   ID_VENDOR_FROM_DATABASE=Millson Custom Solutions Inc.
  
@@ -284,7 +284,7 @@
  acpi:MDA*:
   ID_VENDOR_FROM_DATABASE=Media4 Inc
  
-@@ -4537,6 +4602,9 @@
+@@ -4588,6 +4653,9 @@
  acpi:MOM*:
   ID_VENDOR_FROM_DATABASE=Momentum Data Systems
  
@@ -294,7 +294,7 @@
  acpi:MOS*:
   ID_VENDOR_FROM_DATABASE=Moses Corporation
  
-@@ -4771,6 +4839,9 @@
+@@ -4825,6 +4893,9 @@
  acpi:NAL*:
   ID_VENDOR_FROM_DATABASE=Network Alchemy
  
@@ -304,7 +304,7 @@
  acpi:NAT*:
   ID_VENDOR_FROM_DATABASE=NaturalPoint Inc.
  
-@@ -5293,6 +5364,9 @@
+@@ -5359,6 +5430,9 @@
  acpi:PCX*:
   ID_VENDOR_FROM_DATABASE=PC Xperten
  
@@ -314,7 +314,7 @@
  acpi:PDM*:
   ID_VENDOR_FROM_DATABASE=Psion Dacom Plc.
  
-@@ -5356,9 +5430,6 @@
+@@ -5422,9 +5496,6 @@
  acpi:PHE*:
   ID_VENDOR_FROM_DATABASE=Philips Medical Systems Boeblingen GmbH
  
@@ -324,7 +324,7 @@
  acpi:PHL*:
   ID_VENDOR_FROM_DATABASE=Philips Consumer Electronics Company
  
-@@ -5449,9 +5520,6 @@
+@@ -5515,9 +5586,6 @@
  acpi:PNL*:
   ID_VENDOR_FROM_DATABASE=Panelview, Inc.
  
@@ -334,23 +334,7 @@
  acpi:PNR*:
   ID_VENDOR_FROM_DATABASE=Planar Systems, Inc.
  
-@@ -5587,15 +5655,9 @@
- acpi:PTS*:
-  ID_VENDOR_FROM_DATABASE=Plain Tree Systems Inc
- 
--acpi:PTW*:
-- ID_VENDOR_FROM_DATABASE=DO NOT USE - PTW
--
- acpi:PUL*:
-  ID_VENDOR_FROM_DATABASE=Pulse-Eight Ltd
- 
--acpi:PVC*:
-- ID_VENDOR_FROM_DATABASE=DO NOT USE - PVC
--
- acpi:PVG*:
-  ID_VENDOR_FROM_DATABASE=Proview Global Co., Ltd
- 
-@@ -5911,9 +5973,6 @@
+@@ -5983,9 +6051,6 @@
  acpi:RTI*:
   ID_VENDOR_FROM_DATABASE=Rancho Tech Inc
  
@@ -360,7 +344,7 @@
  acpi:RTL*:
   ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Company Ltd
  
-@@ -6085,9 +6144,6 @@
+@@ -6157,9 +6222,6 @@
  acpi:SEE*:
   ID_VENDOR_FROM_DATABASE=SeeColor Corporation
  
@@ -370,7 +354,7 @@
  acpi:SEI*:
   ID_VENDOR_FROM_DATABASE=Seitz & Associates Inc
  
-@@ -6559,6 +6615,9 @@
+@@ -6637,6 +6699,9 @@
  acpi:SVD*:
   ID_VENDOR_FROM_DATABASE=SVD Computer
  
@@ -380,7 +364,7 @@
  acpi:SVI*:
   ID_VENDOR_FROM_DATABASE=Sun Microsystems
  
-@@ -6643,6 +6702,9 @@
+@@ -6721,6 +6786,9 @@
  acpi:SZM*:
   ID_VENDOR_FROM_DATABASE=Shenzhen MTC Co., Ltd
  
@@ -390,7 +374,7 @@
  acpi:TAA*:
   ID_VENDOR_FROM_DATABASE=Tandberg
  
-@@ -6733,6 +6795,9 @@
+@@ -6811,6 +6879,9 @@
  acpi:TDG*:
   ID_VENDOR_FROM_DATABASE=Six15 Technologies
  
@@ -400,7 +384,7 @@
  acpi:TDM*:
   ID_VENDOR_FROM_DATABASE=Tandem Computer Europe Inc
  
-@@ -6775,6 +6840,9 @@
+@@ -6853,6 +6924,9 @@
  acpi:TEV*:
   ID_VENDOR_FROM_DATABASE=Televés, S.A.
  
@@ -410,7 +394,7 @@
  acpi:TEZ*:
   ID_VENDOR_FROM_DATABASE=Tech Source Inc.
  
-@@ -6898,9 +6966,6 @@
+@@ -6979,9 +7053,6 @@
  acpi:TNC*:
   ID_VENDOR_FROM_DATABASE=TNC Industrial Company Ltd
  
@@ -420,7 +404,7 @@
  acpi:TNM*:
   ID_VENDOR_FROM_DATABASE=TECNIMAGEN SA
  
-@@ -7210,14 +7275,14 @@
+@@ -7291,14 +7362,14 @@
  acpi:UNC*:
   ID_VENDOR_FROM_DATABASE=Unisys Corporation
  
@@ -441,7 +425,7 @@
  
  acpi:UNI*:
   ID_VENDOR_FROM_DATABASE=Uniform Industry Corp.
-@@ -7252,6 +7317,9 @@
+@@ -7333,6 +7404,9 @@
  acpi:USA*:
   ID_VENDOR_FROM_DATABASE=Utimaco Safeware AG
  
@@ -451,7 +435,7 @@
  acpi:USD*:
   ID_VENDOR_FROM_DATABASE=U.S. Digital Corporation
  
-@@ -7507,9 +7575,6 @@
+@@ -7591,9 +7665,6 @@
  acpi:WAL*:
   ID_VENDOR_FROM_DATABASE=Wave Access
  
@@ -461,7 +445,7 @@
  acpi:WAV*:
   ID_VENDOR_FROM_DATABASE=Wavephore
  
-@@ -7634,7 +7699,7 @@
+@@ -7721,7 +7792,7 @@
   ID_VENDOR_FROM_DATABASE=WyreStorm Technologies LLC
  
  acpi:WYS*:
@@ -470,7 +454,7 @@
  
  acpi:WYT*:
   ID_VENDOR_FROM_DATABASE=Wooyoung Image & Information Co.,Ltd.
-@@ -7648,9 +7713,6 @@
+@@ -7735,9 +7806,6 @@
  acpi:XDM*:
   ID_VENDOR_FROM_DATABASE=XDM Ltd.
  
@@ -480,7 +464,7 @@
  acpi:XES*:
   ID_VENDOR_FROM_DATABASE=Extreme Engineering Solutions, Inc.
  
-@@ -7681,9 +7743,6 @@
+@@ -7768,9 +7836,6 @@
  acpi:XNT*:
   ID_VENDOR_FROM_DATABASE=XN Technologies, Inc.
  
@@ -490,7 +474,7 @@
  acpi:XQU*:
   ID_VENDOR_FROM_DATABASE=SHANGHAI SVA-DAV ELECTRONICS CO., LTD
  
-@@ -7750,6 +7809,9 @@
+@@ -7837,6 +7902,9 @@
  acpi:ZBX*:
   ID_VENDOR_FROM_DATABASE=Zebax Technologies
  
diff --git a/hwdb.d/20-dmi-id.hwdb b/hwdb.d/20-dmi-id.hwdb
index a614473..905d692 100644
--- a/hwdb.d/20-dmi-id.hwdb
+++ b/hwdb.d/20-dmi-id.hwdb
@@ -1,6 +1,33 @@
 # This file is part of systemd
 
+# Filter out mostly meaningless names
+dmi:*:svnDefaultstring:*
+dmi:*:svnN/A:*
+dmi:*:svnO.E.M.:*
+dmi:*:svnOEM:*
+dmi:*:svnSystemmanufacturer:*
+dmi:*:svnSystemManufacturer:*
+dmi:*:svnTobefilledbyO.E.M.:*
+dmi:*:svnToBeFilledByO.E.M.:*
+    ID_SYS_VENDOR_IS_RUBBISH=1
+
+dmi:*:pnDefaultstring:*
+dmi:*:pnN/A:*
+dmi:*:pnO.E.M.:*
+dmi:*:pnOEM:*
+dmi:*:pnSystemproductname:*
+dmi:*:pnSystemProductName:*
+dmi:*:pnSystemname:*
+dmi:*:pnSystemName:*
+dmi:*:pnTobefilledbyO.E.M.:*
+dmi:*:pnToBeFilledByO.E.M.:*
+    ID_PRODUCT_NAME_IS_RUBBISH=1
+
 # Fix "Lenovo" capitalization in /sys/class/dmi/id/sys_vendor
 dmi:bvnLENOVO*
     ID_SYSFS_ATTRIBUTE_MODEL=product_version
     ID_VENDOR_FROM_DATABASE=Lenovo
+
+# Microsoft Surface 1's chassis type
+dmi:bvnMicrosoft Corporation*:pvrSurface with Windows 8 Pro*
+    ID_CHASSIS=tablet
diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb
index b55bd82..c43385d 100644
--- a/hwdb.d/20-pci-vendor-model.hwdb
+++ b/hwdb.d/20-pci-vendor-model.hwdb
@@ -122,6 +122,15 @@
 pci:v000001DE*
  ID_VENDOR_FROM_DATABASE=Oxide Computer Company
 
+pci:v000001DEd00000000*
+ ID_MODEL_FROM_DATABASE=Propolis NVMe Controller
+
+pci:v000001DEd00000001*
+ ID_MODEL_FROM_DATABASE=Propolis xHCI Controller
+
+pci:v000001DEd00000002*
+ ID_MODEL_FROM_DATABASE=Propolis PCI-PCI Bridge
+
 pci:v00000200*
  ID_VENDOR_FROM_DATABASE=Dell (wrong ID)
 
@@ -131,6 +140,12 @@
 pci:v0000021Bd00008139*
  ID_MODEL_FROM_DATABASE=HNE-300 (RealTek RTL8139c) [iPaq Networking]
 
+pci:v0000025E*
+ ID_VENDOR_FROM_DATABASE=Solidigm
+
+pci:v0000025Ed00000B70*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [Yorktown controller]
+
 pci:v00000270*
  ID_VENDOR_FROM_DATABASE=Hauppauge computer works Inc. (Wrong ID)
 
@@ -170,6 +185,12 @@
 pci:v00000497*
  ID_VENDOR_FROM_DATABASE=Dell Inc. (wrong ID)
 
+pci:v0000060E*
+ ID_VENDOR_FROM_DATABASE=Lightelligence
+
+pci:v0000060Ed00000001*
+ ID_MODEL_FROM_DATABASE=Hummingbird ES
+
 pci:v00000675*
  ID_VENDOR_FROM_DATABASE=Dynalink
 
@@ -221,6 +242,9 @@
 pci:v00000731d00009100sv00000731sd00009102*
  ID_MODEL_FROM_DATABASE=JM9100 (-I)
 
+pci:v00000731d00009100sv00000731sd00009103*
+ ID_MODEL_FROM_DATABASE=JM9100 (M)
+
 pci:v00000731d0000910A*
  ID_MODEL_FROM_DATABASE=JH910
 
@@ -293,6 +317,9 @@
 pci:v00000731d0000930Asv00000731sd0000930B*
  ID_MODEL_FROM_DATABASE=JH930-I (JH930-M)
 
+pci:v00000731d0000930Asv00000731sd0000930C*
+ ID_MODEL_FROM_DATABASE=JH930-I (JH930)
+
 pci:v00000731d0000930B*
  ID_MODEL_FROM_DATABASE=JH930-M
 
@@ -365,6 +392,9 @@
 pci:v00000B0Bd00000A06*
  ID_MODEL_FROM_DATABASE=RCB672FXX 672-channel modular analog telephony card
 
+pci:v00000BAE*
+ ID_VENDOR_FROM_DATABASE=Bachmann electronic GmbH
+
 pci:v00000CCD*
  ID_VENDOR_FROM_DATABASE=Preferred Networks, Inc.
 
@@ -677,9 +707,15 @@
 pci:v00000E11d0000B203*
  ID_MODEL_FROM_DATABASE=Integrated Lights Out Controller
 
+pci:v00000E11d0000B203sv0000103Csd00003305*
+ ID_MODEL_FROM_DATABASE=Integrated Lights Out Controller (iLO2)
+
 pci:v00000E11d0000B204*
  ID_MODEL_FROM_DATABASE=Integrated Lights Out  Processor
 
+pci:v00000E11d0000B204sv0000103Csd00003305*
+ ID_MODEL_FROM_DATABASE=Integrated Lights Out  Processor (iLO2)
+
 pci:v00000E11d0000C000*
  ID_MODEL_FROM_DATABASE=Remote Insight Lights-Out Edition
 
@@ -1361,6 +1397,9 @@
 pci:v00001000d0000005Dsv00001028sd00001FD1*
  ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3108 [Invader] (PERC H730P MX)
 
+pci:v00001000d0000005Dsv00001734sd000011F6*
+ ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3108 [Invader] (PRAID EP400i)
+
 pci:v00001000d0000005Dsv000017AAsd00001052*
  ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3108 [Invader] (ThinkServer RAID 720i)
 
@@ -1562,6 +1601,9 @@
 pci:v00001000d00000072*
  ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon]
 
+pci:v00001000d00000072sv00001000sd00003020*
+ ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (9211-8i)
+
 pci:v00001000d00000072sv00001000sd00003040*
  ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (9210-8i)
 
@@ -2093,6 +2135,9 @@
 pci:v00001000d000000A5sv00001000sd000046D0*
  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9600-8i8e Tri-Mode Storage Adapter)
 
+pci:v00001000d000000A5sv00001000sd000046E0*
+ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9602W-16e Tri-Mode Storage Adapter)
+
 pci:v00001000d000000A5sv00001028sd00002114*
  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965i Adapter)
 
@@ -2124,10 +2169,19 @@
  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i Front)
 
 pci:v00001000d000000A5sv00001028sd00002141*
- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H360 MX)
+ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i MX)
 
 pci:v00001000d000000A5sv00001028sd00002142*
- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA 465e Adapter)
+ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465e Adapter)
+
+pci:v00001000d000000A5sv00001028sd00002209*
+ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465i Adapter)
+
+pci:v00001000d000000A5sv00001028sd0000220A*
+ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465i Front)
+
+pci:v00001000d000000A5sv00001D49sd0000020A*
+ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (ThinkSystem 450W-16e SAS/SATA PCIe Gen4 24Gb HBA)
 
 pci:v00001000d000000AB*
  ID_MODEL_FROM_DATABASE=SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC)
@@ -2360,6 +2414,9 @@
 pci:v00001000d000000E6sv00001028sd00002197*
  ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i MM LP)
 
+pci:v00001000d000000E6sv00001028sd00002212*
+ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA355e-s Adapter)
+
 pci:v00001000d000000E6sv00001D49sd00000205*
  ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA)
 
@@ -2411,6 +2468,9 @@
 pci:v00001000d000002B1sv00001D49sd00000004*
  ID_MODEL_FROM_DATABASE=Virtual Endpoint on PCIe Switch (9749) (ThinkSystem 1610-8P NVMe Switch Adapter)
 
+pci:v00001000d000002B2*
+ ID_MODEL_FROM_DATABASE=Virtual PCIe Placeholder Endpoint
+
 pci:v00001000d00000407*
  ID_MODEL_FROM_DATABASE=MegaRAID
 
@@ -2756,6 +2816,9 @@
 pci:v00001000d000010E6*
  ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx
 
+pci:v00001000d000010E6sv00001000sd000040E0*
+ ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (MegaRAID 9540-2M2)
+
 pci:v00001000d000010E6sv00001028sd00002172*
  ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (PERC H355 Adapter)
 
@@ -2826,17 +2889,122 @@
  ID_MODEL_FROM_DATABASE=DX1 Multiformat Broadcast HD/SD Encoder/Decoder
 
 pci:v00001000d0000C010*
- ID_MODEL_FROM_DATABASE=PEX88048 50 lane, 50 port, PCI Express Gen 4.0 ExpressFabric Platform
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch
+
+pci:v00001000d0000C010sv00001000sd0000100B*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88000 PCIe Gen 4 Virtual Upstream/Downstream Port)
+
+pci:v00001000d0000C010sv00001000sd00002004*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88000 Virtual PCIe TWC/NT2 Endpoint)
+
+pci:v00001000d0000C010sv00001000sd00002005*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88000 Virtual PCIe gDMA Endpoint)
+
+pci:v00001000d0000C010sv00001000sd0000A024*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88024 24 lane/port PCIe Gen 4.0 Switch)
+
+pci:v00001000d0000C010sv00001000sd0000A032*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88032 32 lane/port PCIe Gen 4 Switch)
+
+pci:v00001000d0000C010sv00001000sd0000A048*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88048 50 lane/port PCIe Gen 4.0 Switch)
+
+pci:v00001000d0000C010sv00001000sd0000A064*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88064 64 lane/port PCIe Gen 4 Switch)
+
+pci:v00001000d0000C010sv00001000sd0000A080*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88080 80 lane/port PCIe Gen 4 Switch)
+
+pci:v00001000d0000C010sv00001000sd0000A096*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88096 98 lane/port PCIe Gen 4.0 Switch)
 
 pci:v00001000d0000C012*
  ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch
 
+pci:v00001000d0000C012sv00001000sd0000100B*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88000 PCIe Gen 4 Virtual Upstream/Downstream Port)
+
+pci:v00001000d0000C012sv00001000sd00002004*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88000 Virtual PCIe TWC/NT2 Endpoint)
+
+pci:v00001000d0000C012sv00001000sd00002005*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88000 Virtual PCIe gDMA Endpoint)
+
+pci:v00001000d0000C012sv00001000sd0000A024*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88024 24 lane/port PCIe Gen 4.0 Switch)
+
+pci:v00001000d0000C012sv00001000sd0000A032*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88032 32 lane/port PCIe Gen 4.0 Switch)
+
+pci:v00001000d0000C012sv00001000sd0000A048*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88048 48 lane/port PCIe Gen 4.0 Switch)
+
+pci:v00001000d0000C012sv00001000sd0000A064*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88064 64 lane/port PCIe Gen 4.0 Switch)
+
+pci:v00001000d0000C012sv00001000sd0000A080*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88080 80 lane/port PCIe Gen 4.0 Switch)
+
+pci:v00001000d0000C012sv00001000sd0000A096*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (PEX88096 96 lane/port PCIe Gen 4.0 Switch)
+
 pci:v00001000d0000C012sv00001D49sd00000003*
  ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter)
 
 pci:v00001000d0000C030*
  ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch
 
+pci:v00001000d0000C030sv00001000sd00000024*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89024 PCIe Gen 5 24 port/lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C030sv00001000sd00000032*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89032 PCIe Gen 5 32 port/lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C030sv00001000sd00000048*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89048 PCIe Gen 5 48 port/lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C030sv00001000sd00000072*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89072 PCIe Gen 5 36 port/72 lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C030sv00001000sd00000088*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89088 PCIe Gen 5 44 port/88 lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C030sv00001000sd00000104*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89104 PCIe Gen 5 52 port/104 lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C030sv00001000sd00000144*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89144 PCIe Gen 5 72 port/144 lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C030sv00001000sd0000100B*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89000 PCIe Gen 5 Virtual Upstream/Downstream Port)
+
+pci:v00001000d0000C030sv00001000sd00002004*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89000 Virtual PCIe TWC/NT 2.0 Endpoint)
+
+pci:v00001000d0000C030sv00001000sd00002005*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89000 Virtual PCIe gDMA Endpoint)
+
+pci:v00001000d0000C034*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch
+
+pci:v00001000d0000C034sv00001000sd00000024*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89024 PCIe Gen 5 24 port/lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C034sv00001000sd00000032*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89032 PCIe Gen 5 32 port/lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C034sv00001000sd00000048*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89048 PCIe Gen 5 48 port/lane Switch Upstream/Downstream Port)
+
+pci:v00001000d0000C034sv00001000sd0000100B*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89000 PCIe Gen 5 Virtual Upstream/Downstream Port)
+
+pci:v00001000d0000C034sv00001000sd00002004*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89000 Virtual PCIe TWC/NT 2.0 Endpoint)
+
+pci:v00001000d0000C034sv00001000sd00002005*
+ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch (PEX89000 Virtual PCIe gDMA Endpoint)
+
 pci:v00001001*
  ID_VENDOR_FROM_DATABASE=Kolter Electronic
 
@@ -2952,10 +3120,13 @@
  ID_MODEL_FROM_DATABASE=Kaveri [Radeon R6 Graphics]
 
 pci:v00001002d000013E9*
- ID_MODEL_FROM_DATABASE=Ariel
+ ID_MODEL_FROM_DATABASE=Ariel/Navi10Lite
+
+pci:v00001002d000013F9*
+ ID_MODEL_FROM_DATABASE=Oberon/Navi12Lite
 
 pci:v00001002d000013FE*
- ID_MODEL_FROM_DATABASE=Cyan Skillfish
+ ID_MODEL_FROM_DATABASE=Cyan Skillfish [BC-250]
 
 pci:v00001002d00001478*
  ID_MODEL_FROM_DATABASE=Navi 10 XL Upstream Port of PCI Express Switch
@@ -2963,6 +3134,9 @@
 pci:v00001002d00001479*
  ID_MODEL_FROM_DATABASE=Navi 10 XL Downstream Port of PCI Express Switch
 
+pci:v00001002d00001506*
+ ID_MODEL_FROM_DATABASE=Mendocino
+
 pci:v00001002d0000154C*
  ID_MODEL_FROM_DATABASE=Kryptos [Radeon RX 350]
 
@@ -2981,6 +3155,9 @@
 pci:v00001002d00001561*
  ID_MODEL_FROM_DATABASE=Anubis
 
+pci:v00001002d000015BF*
+ ID_MODEL_FROM_DATABASE=Phoenix
+
 pci:v00001002d000015D8*
  ID_MODEL_FROM_DATABASE=Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series]
 
@@ -2993,6 +3170,9 @@
 pci:v00001002d000015D8sv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series] (ThinkPad E595)
 
+pci:v00001002d000015D8sv00001DC2sd00002209*
+ ID_MODEL_FROM_DATABASE=Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series] (Avita Pura 14 Notebook)
+
 pci:v00001002d000015D8sv0000EA50sd0000CC10*
  ID_MODEL_FROM_DATABASE=Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series] (RXi2-BP)
 
@@ -3038,6 +3218,9 @@
 pci:v00001002d000015E7*
  ID_MODEL_FROM_DATABASE=Barcelo
 
+pci:v00001002d000015E7sv0000103Csd00008B17*
+ ID_MODEL_FROM_DATABASE=Barcelo (ProBook 445 G9/455 G9 [Ryzen 7 Integrated Radeon GPU])
+
 pci:v00001002d000015FF*
  ID_MODEL_FROM_DATABASE=Fenghuang [Zhongshan Subor Z+]
 
@@ -3051,7 +3234,10 @@
  ID_MODEL_FROM_DATABASE=Renoir Radeon High Definition Audio Controller
 
 pci:v00001002d00001638*
- ID_MODEL_FROM_DATABASE=Cezanne
+ ID_MODEL_FROM_DATABASE=Cezanne [Radeon Vega Series / Radeon Vega Mobile Series]
+
+pci:v00001002d00001638sv00001043sd000016C2*
+ ID_MODEL_FROM_DATABASE=Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (Radeon Vega 8)
 
 pci:v00001002d0000163F*
  ID_MODEL_FROM_DATABASE=VanGogh [AMD Custom GPU 0405]
@@ -3065,6 +3251,12 @@
 pci:v00001002d0000164D*
  ID_MODEL_FROM_DATABASE=Rembrandt
 
+pci:v00001002d0000164E*
+ ID_MODEL_FROM_DATABASE=Raphael
+
+pci:v00001002d0000164F*
+ ID_MODEL_FROM_DATABASE=Phoenix
+
 pci:v00001002d00001681*
  ID_MODEL_FROM_DATABASE=Rembrandt [Radeon 680M]
 
@@ -4613,6 +4805,9 @@
 pci:v00001002d00004C4Dsv000013BDsd00001019*
  ID_MODEL_FROM_DATABASE=Rage Mobility AGP 2x Series (PC-AR10)
 
+pci:v00001002d00004C4E*
+ ID_MODEL_FROM_DATABASE=Rage Mobility L AGP 2x
+
 pci:v00001002d00004C50*
  ID_MODEL_FROM_DATABASE=Rage 3 LT [3D Rage LT PRO PCI]
 
@@ -5096,6 +5291,9 @@
 pci:v00001002d0000515Esv0000103Csd00001304*
  ID_MODEL_FROM_DATABASE=ES1000 (Integrity iLO2 Advanced KVM VGA [AD307A])
 
+pci:v00001002d0000515Esv0000103Csd000031FB*
+ ID_MODEL_FROM_DATABASE=ES1000 (ProLiant DL360 G5)
+
 pci:v00001002d0000515Esv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=ES1000 (X7DVL-E-O motherboard)
 
@@ -5460,7 +5658,7 @@
  ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Radeon 9200 SE / TD / 128M)
 
 pci:v00001002d00005964sv00001458sd00004018*
- ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (R92S128T (Radeon 9200 SE 128MB))
+ ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (R92S128T [Radeon 9200 SE 128MB])
 
 pci:v00001002d00005964sv00001458sd00004032*
  ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Radeon 9200 SE 128MB)
@@ -5972,6 +6170,9 @@
 pci:v00001002d00006613sv00001DCFsd00003000*
  ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520]
 
+pci:v00001002d00006617*
+ ID_MODEL_FROM_DATABASE=Oland LE [Radeon R7 240]
+
 pci:v00001002d00006631*
  ID_MODEL_FROM_DATABASE=Oland
 
@@ -6144,13 +6345,13 @@
  ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M240]
 
 pci:v00001002d00006665*
- ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile]
+ ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520/610 Mobile]
 
 pci:v00001002d00006665sv000017AAsd00001309*
- ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile] (Z50-75 Radeon R7 M260DX)
+ ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520/610 Mobile] (Z50-75 Radeon R7 M260DX)
 
 pci:v00001002d00006665sv000017AAsd0000368F*
- ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile] (Radeon R5 A230)
+ ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520/610 Mobile] (Radeon R5 A230)
 
 pci:v00001002d00006667*
  ID_MODEL_FROM_DATABASE=Jet ULT [Radeon R5 M230]
@@ -7749,7 +7950,7 @@
  ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X] (Double D HD 7970)
 
 pci:v00001002d00006798sv00001787sd0000201C*
- ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X] (HD 7970 IceQ X²)
+ ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X] (HD 7970 IceQ XÂ²)
 
 pci:v00001002d00006798sv00001787sd00002317*
  ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X] (Radeon HD 7990)
@@ -7935,7 +8136,7 @@
  ID_MODEL_FROM_DATABASE=Hawaii XT / Grenada XT [Radeon R9 290X/390X] (Grenada XT2 [Radeon R9 390X])
 
 pci:v00001002d000067B0sv00001787sd00002020*
- ID_MODEL_FROM_DATABASE=Hawaii XT / Grenada XT [Radeon R9 290X/390X] (R9 290X IceQ X² Turbo)
+ ID_MODEL_FROM_DATABASE=Hawaii XT / Grenada XT [Radeon R9 290X/390X] (R9 290X IceQ XÂ² Turbo)
 
 pci:v00001002d000067B0sv00001787sd00002357*
  ID_MODEL_FROM_DATABASE=Hawaii XT / Grenada XT [Radeon R9 290X/390X] (Grenada XT [Radeon R9 390X])
@@ -8877,16 +9078,16 @@
  ID_MODEL_FROM_DATABASE=Thames [Radeon HD 7670M]
 
 pci:v00001002d00006860*
- ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Instinct MI25]
+ ID_MODEL_FROM_DATABASE=Vega 10 [Instinct MI25/MI25x2/V340/V320]
 
 pci:v00001002d00006860sv00001002sd00000C35*
- ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Instinct MI25] (Radeon PRO V320)
+ ID_MODEL_FROM_DATABASE=Vega 10 [Instinct MI25/MI25x2/V340/V320] (Radeon PRO V320)
 
 pci:v00001002d00006860sv00001002sd00006C75*
- ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Instinct MI25] (Radeon PRO V320)
+ ID_MODEL_FROM_DATABASE=Vega 10 [Instinct MI25/MI25x2/V340/V320] (Radeon PRO V320)
 
 pci:v00001002d00006860sv0000106Bsd0000017C*
- ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Instinct MI25] (Radeon Pro Vega 64)
+ ID_MODEL_FROM_DATABASE=Vega 10 [Instinct MI25/MI25x2/V340/V320] (Radeon Pro Vega 64)
 
 pci:v00001002d00006861*
  ID_MODEL_FROM_DATABASE=Vega 10 XT [Radeon PRO WX 9100]
@@ -8898,7 +9099,7 @@
  ID_MODEL_FROM_DATABASE=Vega 10 XTX [Radeon Vega Frontier Edition]
 
 pci:v00001002d00006864*
- ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Pro V340]
+ ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Pro V340/Instinct MI25x2]
 
 pci:v00001002d00006867*
  ID_MODEL_FROM_DATABASE=Vega 10 XL [Radeon Pro Vega 56]
@@ -8916,7 +9117,7 @@
  ID_MODEL_FROM_DATABASE=Vega 10 XTXA [Radeon Pro Vega 64X]
 
 pci:v00001002d0000686C*
- ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Instinct MI25 MxGPU]
+ ID_MODEL_FROM_DATABASE=Vega 10 [Instinct MI25 MxGPU/MI25x2 MxGPU/V340 MxGPU/V340L MxGPU]
 
 pci:v00001002d0000686D*
  ID_MODEL_FROM_DATABASE=Vega 10 GLXTA
@@ -8976,7 +9177,7 @@
  ID_MODEL_FROM_DATABASE=Cypress XT [Radeon HD 5870]
 
 pci:v00001002d00006898sv00001002sd00000B00*
- ID_MODEL_FROM_DATABASE=Cypress XT [Radeon HD 5870] (Radeon HD 5870 Eyefinity⁶ Edition)
+ ID_MODEL_FROM_DATABASE=Cypress XT [Radeon HD 5870] (Radeon HD 5870 Eyefinity Edition)
 
 pci:v00001002d00006898sv0000106Bsd000000D0*
  ID_MODEL_FROM_DATABASE=Cypress XT [Radeon HD 5870] (Radeon HD 5870 Mac Edition)
@@ -10590,7 +10791,7 @@
  ID_MODEL_FROM_DATABASE=R520 [Radeon X1800 GTO]
 
 pci:v00001002d0000710Asv00001002sd00000B12*
- ID_MODEL_FROM_DATABASE=R520 [Radeon X1800 GTO] (Radeon X1800 GTO²)
+ ID_MODEL_FROM_DATABASE=R520 [Radeon X1800 GTO] (Radeon X1800 GTOÂ²)
 
 pci:v00001002d0000710B*
  ID_MODEL_FROM_DATABASE=R520 [Radeon X1800 GTO]
@@ -10970,6 +11171,9 @@
 pci:v00001002d00007300*
  ID_MODEL_FROM_DATABASE=Fiji [Radeon R9 FURY / NANO Series]
 
+pci:v00001002d00007300sv00001002sd00000B35*
+ ID_MODEL_FROM_DATABASE=Fiji [Radeon R9 FURY / NANO Series] (FirePro S9300 X2)
+
 pci:v00001002d00007300sv00001002sd00000B36*
  ID_MODEL_FROM_DATABASE=Fiji [Radeon R9 FURY / NANO Series] (Radeon R9 FURY X / NANO)
 
@@ -10994,6 +11198,9 @@
 pci:v00001002d00007314*
  ID_MODEL_FROM_DATABASE=Navi 10 USB
 
+pci:v00001002d0000731E*
+ ID_MODEL_FROM_DATABASE=TDC-150
+
 pci:v00001002d0000731F*
  ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
 
@@ -11003,6 +11210,12 @@
 pci:v00001002d0000731Fsv00001458sd00002313*
  ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (Radeon RX 5700 XT Gaming OC)
 
+pci:v00001002d0000731Fsv00001458sd0000231D*
+ ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (Radeon RX 5600 XT/REV 2.0 [Windforce 6GB OC])
+
+pci:v00001002d0000731Fsv0000148Csd00002398*
+ ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (AXRX 5700 XT 8GBD6-3DHE/OC [PowerColor Red Devil Radeon RX 5700 XT])
+
 pci:v00001002d0000731Fsv00001682sd00005701*
  ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (RX 5700 XT RAW II)
 
@@ -11012,6 +11225,9 @@
 pci:v00001002d0000731Fsv00001DA2sd0000E409*
  ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (Sapphire Technology Limited Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT])
 
+pci:v00001002d0000731Fsv00001DA2sd0000E410*
+ ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (Sapphire NITRO+ RX 5700 XT)
+
 pci:v00001002d0000731Fsv00001DA2sd0000E411*
  ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (Radeon RX 5600 XT)
 
@@ -11028,10 +11244,10 @@
  ID_MODEL_FROM_DATABASE=Navi 14 [Radeon Pro W5300M]
 
 pci:v00001002d00007360*
- ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M / V520]
+ ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M/V520/BC-160]
 
 pci:v00001002d00007362*
- ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro V520]
+ ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro V520/V540]
 
 pci:v00001002d00007388*
  ID_MODEL_FROM_DATABASE=Arcturus GL-XL
@@ -11042,6 +11258,9 @@
 pci:v00001002d0000738E*
  ID_MODEL_FROM_DATABASE=Arcturus GL-XL [Instinct MI100]
 
+pci:v00001002d000073A1*
+ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon Pro V620]
+
 pci:v00001002d000073A2*
  ID_MODEL_FROM_DATABASE=Navi 21 Pro-XTA [Radeon Pro W6900X]
 
@@ -11054,9 +11273,15 @@
 pci:v00001002d000073A5*
  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6950 XT]
 
+pci:v00001002d000073A5sv00001DA2sd0000441D*
+ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6950 XT] (Navi 21 [Sapphire Nitro+ Radeon RX 6950 XT])
+
 pci:v00001002d000073AB*
  ID_MODEL_FROM_DATABASE=Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo]
 
+pci:v00001002d000073AE*
+ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon Pro V620 MxGPU]
+
 pci:v00001002d000073AF*
  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 XT]
 
@@ -11072,8 +11297,17 @@
 pci:v00001002d000073BFsv0000148Csd00002408*
  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Red Devil AMD Radeon RX 6900 XT)
 
+pci:v00001002d000073BFsv00001DA2sd0000440F*
+ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (TOXIC RX 6900 XT)
+
+pci:v00001002d000073BFsv00001DA2sd0000E437*
+ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Pulse Radeon RX 6800)
+
 pci:v00001002d000073BFsv00001EAEsd00006701*
- ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black)
+ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Speedster MERC 319 AMD Radeon RX 6800 XT Black)
+
+pci:v00001002d000073BFsv00001EAEsd00006901*
+ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Speedster MERC 319 AMD Radeon RX 6900 XT Black)
 
 pci:v00001002d000073C3*
  ID_MODEL_FROM_DATABASE=Navi 22
@@ -11081,8 +11315,26 @@
 pci:v00001002d000073C4*
  ID_MODEL_FROM_DATABASE=Navi 22 USB
 
+pci:v00001002d000073CE*
+ ID_MODEL_FROM_DATABASE=Navi22-XL SRIOV MxGPU
+
 pci:v00001002d000073DF*
- ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M]
+ ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT]
+
+pci:v00001002d000073DFsv00001043sd000016C2*
+ ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] (Radeon RX 6800M)
+
+pci:v00001002d000073DFsv00001458sd00002408*
+ ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] (Radeon RX 6750 XT GAMING OC 12G)
+
+pci:v00001002d000073DFsv00001849sd00005219*
+ ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] (Radeon RX 6700 XT Challenger D)
+
+pci:v00001002d000073DFsv00001DA2sd0000E445*
+ ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] (Sapphire Radeon RX 6700)
+
+pci:v00001002d000073DFsv00001EAEsd00006601*
+ ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] (Speedster QICK 319 RX 6700 XT)
 
 pci:v00001002d000073E0*
  ID_MODEL_FROM_DATABASE=Navi 23
@@ -11099,26 +11351,56 @@
 pci:v00001002d000073EF*
  ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6650 XT]
 
+pci:v00001002d000073EFsv00001002sd000073EF*
+ ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6650 XT] (Navi 23 [Radeon RX 6700S / 6800S / 6650 XT])
+
+pci:v00001002d000073EFsv00001458sd00002405*
+ ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6650 XT]
+
 pci:v00001002d000073FF*
  ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6600/6600 XT/6600M]
 
+pci:v00001002d000073FFsv00001462sd00005022*
+ ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6600/6600 XT/6600M] (RX 6600 MECH 2X)
+
 pci:v00001002d000073FFsv0000148Csd00002412*
  ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6600/6600 XT/6600M] (PowerColor Red Devil RX 6600 XT)
 
+pci:v00001002d000073FFsv00001849sd00005218*
+ ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6600/6600 XT/6600M] (Radeon RX 6600 Challenger ITX 8GB)
+
 pci:v00001002d00007408*
- ID_MODEL_FROM_DATABASE=Aldebaran
+ ID_MODEL_FROM_DATABASE=Aldebaran/MI200 [Instinct MI250X]
 
 pci:v00001002d0000740C*
- ID_MODEL_FROM_DATABASE=Aldebaran
+ ID_MODEL_FROM_DATABASE=Aldebaran/MI200 [Instinct MI250X/MI250]
 
 pci:v00001002d0000740F*
- ID_MODEL_FROM_DATABASE=Aldebaran
+ ID_MODEL_FROM_DATABASE=Aldebaran/MI200 [Instinct MI210]
+
+pci:v00001002d00007421*
+ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6500M]
+
+pci:v00001002d00007422*
+ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6400]
+
+pci:v00001002d00007423*
+ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6300/W6300M]
+
+pci:v00001002d00007424*
+ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6300]
 
 pci:v00001002d0000743F*
- ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT]
+ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400/6500 XT/6500M]
 
 pci:v00001002d0000743Fsv00001DA2sd0000E457*
- ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT] (PULSE AMD Radeon RX 6500 XT)
+ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400/6500 XT/6500M] (PULSE AMD Radeon RX 6500 XT)
+
+pci:v00001002d0000744C*
+ ID_MODEL_FROM_DATABASE=Navi 31 [Radeon RX 7900 XT/7900 XTX]
+
+pci:v00001002d0000744Csv00001DA2sd0000E471*
+ ID_MODEL_FROM_DATABASE=Navi 31 [Radeon RX 7900 XT/7900 XTX] (NITRO+ RX 7900 XTX Vapor-X)
 
 pci:v00001002d00007833*
  ID_MODEL_FROM_DATABASE=RS350 Host Bridge
@@ -11511,79 +11793,79 @@
  ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4330/4350/4550] (Radeon HD 4350/4550 HyperMemory DDR2)
 
 pci:v00001002d00009553*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v]
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v]
 
 pci:v00001002d00009553sv00001025sd0000015E*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570)
 
 pci:v00001002d00009553sv00001025sd0000017D*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570)
 
 pci:v00001002d00009553sv00001025sd00000205*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570 / 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570 / 545v)
 
 pci:v00001002d00009553sv00001025sd00000206*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570)
 
 pci:v00001002d00009553sv00001025sd00000237*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570)
 
 pci:v00001002d00009553sv00001028sd000002BE*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570 / 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570 / 545v)
 
 pci:v00001002d00009553sv00001028sd000002E8*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4530)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4530)
 
 pci:v00001002d00009553sv0000103Csd0000143C*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 545v)
 
 pci:v00001002d00009553sv0000103Csd00001446*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 545v)
 
 pci:v00001002d00009553sv0000103Csd00003624*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4530)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4530)
 
 pci:v00001002d00009553sv0000103Csd00003628*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4530)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4530)
 
 pci:v00001002d00009553sv0000103Csd00003636*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4530)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4530)
 
 pci:v00001002d00009553sv00001043sd00001B32*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570)
 
 pci:v00001002d00009553sv00001043sd00001B42*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570)
 
 pci:v00001002d00009553sv0000104Dsd00009056*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 4570)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 4570)
 
 pci:v00001002d00009553sv00001179sd0000FF82*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Satellite L505-13T GPU (Mobility Radeon HD 5145))
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Satellite L505-13T GPU (Mobility Radeon HD 5145))
 
 pci:v00001002d00009553sv0000144Dsd0000C07F*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 545v)
 
 pci:v00001002d00009553sv0000144Dsd0000C571*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 545v)
 
 pci:v00001002d00009553sv00001462sd00001006*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 545v)
 
 pci:v00001002d00009553sv000017AAsd00002129*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 545v)
 
 pci:v00001002d00009553sv000017AAsd0000215B*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 545v)
 
 pci:v00001002d00009553sv000017AAsd000021BB*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v] (Mobility Radeon HD 545v)
+ ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] (Mobility Radeon HD 545v)
 
 pci:v00001002d00009555*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4350/4550]
+ ID_MODEL_FROM_DATABASE=RV711/M93 [Mobility Radeon HD 4350/4550/530v/540v/545v / FirePro RG220]
 
 pci:v00001002d00009555sv0000103Csd00001411*
- ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4350/4550] (ProBook 4720s GPU (Mobility Radeon HD 4350))
+ ID_MODEL_FROM_DATABASE=RV711/M93 [Mobility Radeon HD 4350/4550/530v/540v/545v / FirePro RG220] (ProBook 4720s GPU (Mobility Radeon HD 4350))
 
 pci:v00001002d00009557*
  ID_MODEL_FROM_DATABASE=RV711/M93 GL [FirePro RG220]
@@ -14160,7 +14442,7 @@
  ID_MODEL_FROM_DATABASE=Zeppelin/Renoir PCIe Dummy Function
 
 pci:v00001022d00001456*
- ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) Platform Security Processor
+ ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) Platform Security Processor (PSP) 3.0 Device
 
 pci:v00001022d00001457*
  ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) HD Audio Controller
@@ -14181,7 +14463,7 @@
  ID_MODEL_FROM_DATABASE=Zeppelin Switch Downstream (PCIE SW.DS)
 
 pci:v00001022d0000145F*
- ID_MODEL_FROM_DATABASE=Zeppelin USB 3.0 Host controller
+ ID_MODEL_FROM_DATABASE=Zeppelin USB 3.0 xHCI Compliant Host Controller
 
 pci:v00001022d00001460*
  ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 0
@@ -14234,6 +14516,9 @@
 pci:v00001022d00001483*
  ID_MODEL_FROM_DATABASE=Starship/Matisse GPP Bridge
 
+pci:v00001022d00001483sv000001DEsd0000FFF9*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse GPP Bridge (Gimlet Baseboard)
+
 pci:v00001022d00001484*
  ID_MODEL_FROM_DATABASE=Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
 
@@ -14321,6 +14606,24 @@
 pci:v00001022d0000149D*
  ID_MODEL_FROM_DATABASE=Vangogh CVIP
 
+pci:v00001022d000014B5*
+ ID_MODEL_FROM_DATABASE=Family 17h-19h PCIe Root Complex
+
+pci:v00001022d000014B6*
+ ID_MODEL_FROM_DATABASE=Family 17h-19h IOMMU
+
+pci:v00001022d000014B7*
+ ID_MODEL_FROM_DATABASE=Family 17h-19h PCIe Dummy Host Bridge
+
+pci:v00001022d000014B9*
+ ID_MODEL_FROM_DATABASE=Family 17h-19h Internal PCIe GPP Bridge
+
+pci:v00001022d000014BA*
+ ID_MODEL_FROM_DATABASE=Family 17h-19h PCIe GPP Bridge
+
+pci:v00001022d000014CD*
+ ID_MODEL_FROM_DATABASE=Family 19h USB4/Thunderbolt PCIe tunnel
+
 pci:v00001022d00001510*
  ID_MODEL_FROM_DATABASE=Family 14h Processor Root Complex
 
@@ -14609,6 +14912,12 @@
 pci:v00001022d000015D5*
  ID_MODEL_FROM_DATABASE=FireFlight USB 3.1
 
+pci:v00001022d000015D6*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4 XHCI controller #5
+
+pci:v00001022d000015D7*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4 XHCI controller #6
+
 pci:v00001022d000015DA*
  ID_MODEL_FROM_DATABASE=Raven/Raven2 PCIe Dummy Host Bridge
 
@@ -14684,6 +14993,9 @@
 pci:v00001022d000015E3sv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d000015E3sv0000103Csd00008B17*
+ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (ProBook 445 G9/455 G9)
+
 pci:v00001022d000015E3sv00001043sd000086C7*
  ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (PRIME B450M-A Motherboard)
 
@@ -14825,6 +15137,24 @@
 pci:v00001022d0000160F*
  ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 7
 
+pci:v00001022d0000161A*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4 XHCI controller #1
+
+pci:v00001022d0000161B*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4 XHCI controller #2
+
+pci:v00001022d0000161C*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4 XHCI controller #7
+
+pci:v00001022d0000161D*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4 XHCI controller #3
+
+pci:v00001022d0000161E*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4 XHCI controller #4
+
+pci:v00001022d0000161F*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4 XHCI controller #8
+
 pci:v00001022d00001620*
  ID_MODEL_FROM_DATABASE=Anubis HT Configuration
 
@@ -14861,6 +15191,15 @@
 pci:v00001022d0000162B*
  ID_MODEL_FROM_DATABASE=Arden PCIe Non-Transparent Bridge
 
+pci:v00001022d0000162C*
+ ID_MODEL_FROM_DATABASE=VanGogh USB2
+
+pci:v00001022d0000162E*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4/Thunderbolt NHI controller #1
+
+pci:v00001022d0000162F*
+ ID_MODEL_FROM_DATABASE=Rembrandt USB4/Thunderbolt NHI controller #2
+
 pci:v00001022d00001630*
  ID_MODEL_FROM_DATABASE=Renoir/Cezanne Root Complex
 
@@ -14912,9 +15251,18 @@
 pci:v00001022d00001644*
  ID_MODEL_FROM_DATABASE=Renoir I2S
 
-pci:v00001022d00001648*
+pci:v00001022d00001645*
  ID_MODEL_FROM_DATABASE=VanGogh Root Complex
 
+pci:v00001022d00001646*
+ ID_MODEL_FROM_DATABASE=VanGogh IOMMU
+
+pci:v00001022d00001647*
+ ID_MODEL_FROM_DATABASE=VanGogh PCIe GPP Bridge
+
+pci:v00001022d00001648*
+ ID_MODEL_FROM_DATABASE=VanGogh Internal PCIe GPP Bridge to Bus
+
 pci:v00001022d00001649*
  ID_MODEL_FROM_DATABASE=VanGogh PSP/CCP
 
@@ -14945,6 +15293,30 @@
 pci:v00001022d00001657*
  ID_MODEL_FROM_DATABASE=Milan Data Fabric; Function 7
 
+pci:v00001022d00001660*
+ ID_MODEL_FROM_DATABASE=VanGogh Data Fabric; Function 0
+
+pci:v00001022d00001661*
+ ID_MODEL_FROM_DATABASE=VanGogh Data Fabric; Function 1
+
+pci:v00001022d00001662*
+ ID_MODEL_FROM_DATABASE=VanGogh Data Fabric; Function 2
+
+pci:v00001022d00001663*
+ ID_MODEL_FROM_DATABASE=VanGogh Data Fabric; Function 3
+
+pci:v00001022d00001664*
+ ID_MODEL_FROM_DATABASE=VanGogh Data Fabric; Function 4
+
+pci:v00001022d00001665*
+ ID_MODEL_FROM_DATABASE=VanGogh Data Fabric; Function 5
+
+pci:v00001022d00001666*
+ ID_MODEL_FROM_DATABASE=VanGogh Data Fabric; Function 6
+
+pci:v00001022d00001667*
+ ID_MODEL_FROM_DATABASE=VanGogh Data Fabric; Function 7
+
 pci:v00001022d0000166A*
  ID_MODEL_FROM_DATABASE=Cezanne Data Fabric; Function 0
 
@@ -14969,6 +15341,30 @@
 pci:v00001022d00001671*
  ID_MODEL_FROM_DATABASE=Cezanne Data Fabric; Function 7
 
+pci:v00001022d00001679*
+ ID_MODEL_FROM_DATABASE=Rembrandt Data Fabric: Device 18h; Function 0
+
+pci:v00001022d0000167A*
+ ID_MODEL_FROM_DATABASE=Rembrandt Data Fabric: Device 18h; Function 1
+
+pci:v00001022d0000167B*
+ ID_MODEL_FROM_DATABASE=Rembrandt Data Fabric: Device 18h; Function 2
+
+pci:v00001022d0000167C*
+ ID_MODEL_FROM_DATABASE=Rembrandt Data Fabric: Device 18h; Function 3
+
+pci:v00001022d0000167D*
+ ID_MODEL_FROM_DATABASE=Rembrandt Data Fabric: Device 18h; Function 4
+
+pci:v00001022d0000167E*
+ ID_MODEL_FROM_DATABASE=Rembrandt Data Fabric: Device 18h; Function 5
+
+pci:v00001022d0000167F*
+ ID_MODEL_FROM_DATABASE=Rembrandt Data Fabric: Device 18h; Function 6
+
+pci:v00001022d00001680*
+ ID_MODEL_FROM_DATABASE=Rembrandt Data Fabric: Device 18h; Function 7
+
 pci:v00001022d00001700*
  ID_MODEL_FROM_DATABASE=Family 12h/14h Processor Function 0
 
@@ -15213,7 +15609,7 @@
  ID_MODEL_FROM_DATABASE=400 Series Chipset SATA Controller
 
 pci:v00001022d000043D5*
- ID_MODEL_FROM_DATABASE=400 Series Chipset USB 3.1 XHCI Controller
+ ID_MODEL_FROM_DATABASE=400 Series Chipset USB 3.1 xHCI Compliant Host Controller
 
 pci:v00001022d000043E9*
  ID_MODEL_FROM_DATABASE=500 Series Chipset Switch Upstream Port
@@ -15617,6 +16013,9 @@
 pci:v00001022d0000790Bsv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=FCH SMBus Controller (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d0000790Bsv0000103Csd00008B17*
+ ID_MODEL_FROM_DATABASE=FCH SMBus Controller (ProBook 445 G9/455 G9)
+
 pci:v00001022d0000790Bsv00001043sd0000876B*
  ID_MODEL_FROM_DATABASE=FCH SMBus Controller (PRIME Motherboard)
 
@@ -15888,7 +16287,16 @@
  ID_MODEL_FROM_DATABASE=CyberBlade XP2
 
 pci:v00001024*
- ID_VENDOR_FROM_DATABASE=Zenith Data Systems
+ ID_VENDOR_FROM_DATABASE=Beijing Dajia Internet Information Technology Co.
+
+pci:v00001024d00000101*
+ ID_MODEL_FROM_DATABASE=StreamLake 200 AI-VPU
+
+pci:v00001024d00000101sv00001024sd00000201*
+ ID_MODEL_FROM_DATABASE=StreamLake 200 AI-VPU (SL200-NP)
+
+pci:v00001024d00000101sv00001024sd00000301*
+ ID_MODEL_FROM_DATABASE=StreamLake 200 AI-VPU (SL200-P)
 
 pci:v00001025*
  ID_VENDOR_FROM_DATABASE=Acer Incorporated [ALI]
@@ -16190,6 +16598,24 @@
 pci:v00001028d00000073*
  ID_MODEL_FROM_DATABASE=NV-RAM Adapter
 
+pci:v00001028d00001028*
+ ID_MODEL_FROM_DATABASE=PCIe Bridge riser
+
+pci:v00001028d00002600*
+ ID_MODEL_FROM_DATABASE=ENT NVMe RT1
+
+pci:v00001028d00002600sv00001028sd0000215E*
+ ID_MODEL_FROM_DATABASE=ENT NVMe RT1 (RI 3.84TB)
+
+pci:v00001028d00002600sv00001028sd0000215F*
+ ID_MODEL_FROM_DATABASE=ENT NVMe RT1 (RI 7.68TB)
+
+pci:v00001028d00002600sv00001028sd00002160*
+ ID_MODEL_FROM_DATABASE=ENT NVMe RT1 (FIPS RI 3.84TB)
+
+pci:v00001028d00002600sv00001028sd00002161*
+ ID_MODEL_FROM_DATABASE=ENT NVMe RT1 (FIPS RI 7.68TB)
+
 pci:v00001029*
  ID_VENDOR_FROM_DATABASE=Siemens Nixdorf IS
 
@@ -19904,6 +20330,9 @@
 pci:v0000104Dd000090BC*
  ID_MODEL_FROM_DATABASE=SxS Pro+ memory card
 
+pci:v0000104Dd000090C0*
+ ID_MODEL_FROM_DATABASE=PCIe x8 XAVC Codec Board
+
 pci:v0000104Dd000090C8*
  ID_MODEL_FROM_DATABASE=Belize ACPI
 
@@ -20099,6 +20528,12 @@
 pci:v00001055*
  ID_VENDOR_FROM_DATABASE=Microchip Technology / SMSC
 
+pci:v00001055d00007430*
+ ID_MODEL_FROM_DATABASE=LAN7430
+
+pci:v00001055d00007431*
+ ID_MODEL_FROM_DATABASE=LAN7431
+
 pci:v00001055d00009130*
  ID_MODEL_FROM_DATABASE=SLC90E66 [Victory66] IDE
 
@@ -21167,6 +21602,12 @@
 pci:v0000106Bd00000074*
  ID_MODEL_FROM_DATABASE=U4 HT Bridge
 
+pci:v0000106Bd0000100C*
+ ID_MODEL_FROM_DATABASE=Apple Silicon PCI Express Root Port
+
+pci:v0000106Bd00001010*
+ ID_MODEL_FROM_DATABASE=Apple Silicon USB4/Thunderbolt PCI Express Root Port
+
 pci:v0000106Bd00001645*
  ID_MODEL_FROM_DATABASE=Broadcom NetXtreme BCM5701 Gigabit Ethernet
 
@@ -21609,7 +22050,7 @@
  ID_MODEL_FROM_DATABASE=ISP2812-based 64/32G Fibre Channel to PCIe Controller (SN1610Q - 1P Enhanced 32GFC Single Port Fibre Channel Host Bus Adapter)
 
 pci:v00001077d00002281sv00001590sd000002D4*
- ID_MODEL_FROM_DATABASE=ISP2812-based 64/32G Fibre Channel to PCIe Controller (SN1610Q – 2P Enhanced 32GFC Dual Port Fibre Channel Host Bus Adapter)
+ ID_MODEL_FROM_DATABASE=ISP2812-based 64/32G Fibre Channel to PCIe Controller (SN1610Q â€“ 2P Enhanced 32GFC Dual Port Fibre Channel Host Bus Adapter)
 
 pci:v00001077d00002289*
  ID_MODEL_FROM_DATABASE=ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption
@@ -22347,7 +22788,7 @@
  ID_MODEL_FROM_DATABASE=EBUS
 
 pci:v0000108Ed00001000*
- ID_MODEL_FROM_DATABASE=EBUS
+ ID_MODEL_FROM_DATABASE=STP2003QFP [PCIO] EBUS
 
 pci:v0000108Ed00001001*
  ID_MODEL_FROM_DATABASE=Happy Meal 10/100 Ethernet [hme]
@@ -24959,6 +25400,9 @@
 pci:v00001095d00000240*
  ID_MODEL_FROM_DATABASE=Adaptec AAR-1210SA SATA HostRAID Controller
 
+pci:v00001095d00000242*
+ ID_MODEL_FROM_DATABASE=AAR-1220SA SATA RAID Controller
+
 pci:v00001095d00000640*
  ID_MODEL_FROM_DATABASE=PCI0640
 
@@ -26355,16 +26799,16 @@
  ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Alpermann+Velte PCL PCIe D: Timecode Reader Board)
 
 pci:v000010B5d00009056sv000010B5sd00003354*
- ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Alpermann+Velte PCL PCIe LV: Timecode Reader Board)
+ ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Plura PCL PCIe LV: Timecode Reader Board)
 
 pci:v000010B5d00009056sv000010B5sd00003355*
- ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Alpermann+Velte PCL PCIe L: Timecode Reader Board)
+ ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Plura PCL PCIe L: Timecode Reader Board)
 
 pci:v000010B5d00009056sv000010B5sd00003415*
- ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Alpermann+Velte PCIe TS: Time Synchronisation Board)
+ ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Plura PCIe TS: Time Synchronisation Board)
 
 pci:v000010B5d00009056sv000010B5sd00003493*
- ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Alpermann+Velte PCL PCIe 3G: Timecode Reader Board)
+ ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Plura PCL PCIe 3G: Timecode Reader Board)
 
 pci:v000010B5d00009056sv000010B5sd00003565*
  ID_MODEL_FROM_DATABASE=PCI9056 32-bit 66MHz PCI <-> IOBus Bridge (Cambridge Pixel HPx Radar Output Card)
@@ -27266,18 +27710,12 @@
 pci:v000010B9d00005237sv0000104Dsd0000810F*
  ID_MODEL_FROM_DATABASE=USB 1.1 Controller (VAIO PCG-U1 USB/OHCI Revision 1.0)
 
-pci:v000010B9d00005237sv000010B9sd00005237*
- ID_MODEL_FROM_DATABASE=USB 1.1 Controller (ASRock 939Dual-SATA2 Motherboard)
-
 pci:v000010B9d00005237sv00001849sd00005237*
  ID_MODEL_FROM_DATABASE=USB 1.1 Controller (ASRock 939Dual-SATA2 Motherboard)
 
 pci:v000010B9d00005239*
  ID_MODEL_FROM_DATABASE=USB 2.0 Controller
 
-pci:v000010B9d00005239sv000010B9sd00005239*
- ID_MODEL_FROM_DATABASE=USB 2.0 Controller (ASRock 939Dual-SATA2 Motherboard)
-
 pci:v000010B9d00005239sv00001849sd00005239*
  ID_MODEL_FROM_DATABASE=USB 2.0 Controller (ASRock 939Dual-SATA2 Motherboard)
 
@@ -28589,6 +29027,9 @@
 pci:v000010DEd00000093*
  ID_MODEL_FROM_DATABASE=G70 [GeForce 7800 GS]
 
+pci:v000010DEd00000094*
+ ID_MODEL_FROM_DATABASE=High Definition Audio
+
 pci:v000010DEd00000095*
  ID_MODEL_FROM_DATABASE=G70 [GeForce 7800 SLI]
 
@@ -32573,6 +33014,9 @@
 pci:v000010DEd0000086F*
  ID_MODEL_FROM_DATABASE=MCP79 [GeForce 8200M G]
 
+pci:v000010DEd0000086Fsv00001043sd000016B2*
+ ID_MODEL_FROM_DATABASE=MCP79 [GeForce 8200M G] (F5GL Notebook)
+
 pci:v000010DEd00000870*
  ID_MODEL_FROM_DATABASE=C79 [GeForce 9400M]
 
@@ -32951,18 +33395,27 @@
 pci:v000010DEd00000A98*
  ID_MODEL_FROM_DATABASE=MCP79 Memory Controller
 
+pci:v000010DEd00000A98sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 Memory Controller (F5GL Notebook)
+
 pci:v000010DEd00000A98sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 Memory Controller (iMac 9,1)
 
 pci:v000010DEd00000AA0*
  ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge
 
+pci:v000010DEd00000AA0sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge (F5GL Notebook)
+
 pci:v000010DEd00000AA0sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge (Apple iMac 9,1)
 
 pci:v000010DEd00000AA2*
  ID_MODEL_FROM_DATABASE=MCP79 SMBus
 
+pci:v000010DEd00000AA2sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 SMBus (F5GL Notebook)
+
 pci:v000010DEd00000AA2sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 SMBus (Apple iMac 9,1)
 
@@ -32972,6 +33425,9 @@
 pci:v000010DEd00000AA3*
  ID_MODEL_FROM_DATABASE=MCP79 Co-processor
 
+pci:v000010DEd00000AA3sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 Co-processor (F5GL Notebook)
+
 pci:v000010DEd00000AA3sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 Co-processor (Apple iMac 9,1)
 
@@ -32981,12 +33437,18 @@
 pci:v000010DEd00000AA4*
  ID_MODEL_FROM_DATABASE=MCP79 Memory Controller
 
+pci:v000010DEd00000AA4sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 Memory Controller (F5GL Notebook)
+
 pci:v000010DEd00000AA4sv000019DAsd0000A123*
  ID_MODEL_FROM_DATABASE=MCP79 Memory Controller (IONITX-F-E)
 
 pci:v000010DEd00000AA5*
  ID_MODEL_FROM_DATABASE=MCP79 OHCI USB 1.1 Controller
 
+pci:v000010DEd00000AA5sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 OHCI USB 1.1 Controller (F5GL Notebook)
+
 pci:v000010DEd00000AA5sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 OHCI USB 1.1 Controller (Apple iMac 9,1)
 
@@ -32996,6 +33458,9 @@
 pci:v000010DEd00000AA6*
  ID_MODEL_FROM_DATABASE=MCP79 EHCI USB 2.0 Controller
 
+pci:v000010DEd00000AA6sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 EHCI USB 2.0 Controller (F5GL Notebook)
+
 pci:v000010DEd00000AA6sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 EHCI USB 2.0 Controller (Apple iMac 9,1)
 
@@ -33029,6 +33494,9 @@
 pci:v000010DEd00000AAB*
  ID_MODEL_FROM_DATABASE=MCP79 PCI Bridge
 
+pci:v000010DEd00000AABsv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 PCI Bridge (F5GL Notebook)
+
 pci:v000010DEd00000AABsv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 PCI Bridge (Apple iMac 9,1)
 
@@ -33044,6 +33512,9 @@
 pci:v000010DEd00000AAE*
  ID_MODEL_FROM_DATABASE=MCP79 LPC Bridge
 
+pci:v000010DEd00000AAEsv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 LPC Bridge (F5GL Notebook)
+
 pci:v000010DEd00000AAEsv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 LPC Bridge (Apple iMac 9,1)
 
@@ -33053,6 +33524,9 @@
 pci:v000010DEd00000AB0*
  ID_MODEL_FROM_DATABASE=MCP79 Ethernet
 
+pci:v000010DEd00000AB0sv00001043sd00001215*
+ ID_MODEL_FROM_DATABASE=MCP79 Ethernet (F5GL Notebook)
+
 pci:v000010DEd00000AB0sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 Ethernet (Apple iMac 9,1)
 
@@ -33086,6 +33560,9 @@
 pci:v000010DEd00000AB8*
  ID_MODEL_FROM_DATABASE=MCP79 AHCI Controller
 
+pci:v000010DEd00000AB8sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 AHCI Controller (F5GL Notebook)
+
 pci:v000010DEd00000AB9*
  ID_MODEL_FROM_DATABASE=MCP79 AHCI Controller
 
@@ -33113,6 +33590,9 @@
 pci:v000010DEd00000AC0*
  ID_MODEL_FROM_DATABASE=MCP79 High Definition Audio
 
+pci:v000010DEd00000AC0sv00001043sd00001903*
+ ID_MODEL_FROM_DATABASE=MCP79 High Definition Audio (F5GL Notebook)
+
 pci:v000010DEd00000AC0sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 High Definition Audio (Apple iMac 9,1)
 
@@ -33137,12 +33617,18 @@
 pci:v000010DEd00000AC6*
  ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge
 
+pci:v000010DEd00000AC6sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge (F5GL Notebook)
+
 pci:v000010DEd00000AC6sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge (Apple iMac 9,1)
 
 pci:v000010DEd00000AC7*
  ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge
 
+pci:v000010DEd00000AC7sv00001043sd00001A87*
+ ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge (F5GL Notebook)
+
 pci:v000010DEd00000AC7sv000010DEsd0000CB79*
  ID_MODEL_FROM_DATABASE=MCP79 PCI Express Bridge (Apple iMac 9,1)
 
@@ -33714,7 +34200,7 @@
  ID_MODEL_FROM_DATABASE=GK107GL [GRID K100 vGPU] (GRID K100)
 
 pci:v000010DEd00000FE8*
- ID_MODEL_FROM_DATABASE=GK107M
+ ID_MODEL_FROM_DATABASE=GK107M [N14P-GS]
 
 pci:v000010DEd00000FE9*
  ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 750M Mac Edition]
@@ -35267,6 +35753,9 @@
 pci:v000010DEd000011A7*
  ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 675MX]
 
+pci:v000010DEd000011A8*
+ ID_MODEL_FROM_DATABASE=GK104GLM [Quadro K5100M]
+
 pci:v000010DEd000011A9*
  ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 870M]
 
@@ -35850,7 +36339,7 @@
  ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 980M]
 
 pci:v000010DEd000013D8*
- ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 970M]
+ ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 960 OEM / 970M]
 
 pci:v000010DEd000013D9*
  ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 965M]
@@ -36053,6 +36542,9 @@
 pci:v000010DEd00001AEF*
  ID_MODEL_FROM_DATABASE=GA102 High Definition Audio Controller
 
+pci:v000010DEd00001AF1*
+ ID_MODEL_FROM_DATABASE=GA100 [A100 NVSwitch]
+
 pci:v000010DEd00001B00*
  ID_MODEL_FROM_DATABASE=GP102 [TITAN X]
 
@@ -36446,6 +36938,9 @@
 pci:v000010DEd00001DBAsv000010DEsd000012EB*
  ID_MODEL_FROM_DATABASE=GV100GL [Quadro GV100] (TITAN V CEO Edition)
 
+pci:v000010DEd00001DBE*
+ ID_MODEL_FROM_DATABASE=GV100 Engineering Sample
+
 pci:v000010DEd00001DF0*
  ID_MODEL_FROM_DATABASE=GV100GL [Tesla PG500-216]
 
@@ -36461,6 +36956,9 @@
 pci:v000010DEd00001E02*
  ID_MODEL_FROM_DATABASE=TU102 [TITAN RTX]
 
+pci:v000010DEd00001E03*
+ ID_MODEL_FROM_DATABASE=TU102 [GeForce RTX 2080 Ti 12GB]
+
 pci:v000010DEd00001E04*
  ID_MODEL_FROM_DATABASE=TU102 [GeForce RTX 2080 Ti]
 
@@ -36492,19 +36990,28 @@
  ID_MODEL_FROM_DATABASE=TU102GL [Quadro RTX 6000]
 
 pci:v000010DEd00001E37*
- ID_MODEL_FROM_DATABASE=TU102GL [GRID RTX T10-4/T10-8/T10-16]
+ ID_MODEL_FROM_DATABASE=TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8]
+
+pci:v000010DEd00001E37sv000010DEsd00001304*
+ ID_MODEL_FROM_DATABASE=TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8] (Tesla T10 16GB)
 
 pci:v000010DEd00001E37sv000010DEsd00001347*
- ID_MODEL_FROM_DATABASE=TU102GL [GRID RTX T10-4/T10-8/T10-16] (GRID RTX T10-8)
+ ID_MODEL_FROM_DATABASE=TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8] (GRID RTX T10-8)
 
 pci:v000010DEd00001E37sv000010DEsd00001348*
- ID_MODEL_FROM_DATABASE=TU102GL [GRID RTX T10-4/T10-8/T10-16] (GRID RTX T10-4)
+ ID_MODEL_FROM_DATABASE=TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8] (GRID RTX T10-4)
+
+pci:v000010DEd00001E37sv000010DEsd00001349*
+ ID_MODEL_FROM_DATABASE=TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8] (GRID RTX T10-2)
 
 pci:v000010DEd00001E37sv000010DEsd00001370*
- ID_MODEL_FROM_DATABASE=TU102GL [GRID RTX T10-4/T10-8/T10-16] (GRID RTX T10-16)
+ ID_MODEL_FROM_DATABASE=TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8] (Tesla T10 16GB)
+
+pci:v000010DEd00001E37sv000010DEsd000013A5*
+ ID_MODEL_FROM_DATABASE=TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8] (GRID RTX T10-8)
 
 pci:v000010DEd00001E38*
- ID_MODEL_FROM_DATABASE=TU102GL
+ ID_MODEL_FROM_DATABASE=TU102GL [Tesla T10 24GB]
 
 pci:v000010DEd00001E3C*
  ID_MODEL_FROM_DATABASE=TU102GL
@@ -36552,7 +37059,7 @@
  ID_MODEL_FROM_DATABASE=TU104M
 
 pci:v000010DEd00001EAE*
- ID_MODEL_FROM_DATABASE=TU104M
+ ID_MODEL_FROM_DATABASE=TU104M [GeForce GTX 2080 Engineering Sample]
 
 pci:v000010DEd00001EB0*
  ID_MODEL_FROM_DATABASE=TU104GL [Quadro RTX 5000]
@@ -36575,6 +37082,9 @@
 pci:v000010DEd00001EB9*
  ID_MODEL_FROM_DATABASE=TU104GL
 
+pci:v000010DEd00001EBA*
+ ID_MODEL_FROM_DATABASE=TU104GL [PG189 SKU600]
+
 pci:v000010DEd00001EBE*
  ID_MODEL_FROM_DATABASE=TU104GL
 
@@ -36674,6 +37184,9 @@
 pci:v000010DEd00001F82*
  ID_MODEL_FROM_DATABASE=TU117 [GeForce GTX 1650]
 
+pci:v000010DEd00001F83*
+ ID_MODEL_FROM_DATABASE=TU117 [GeForce GTX 1630]
+
 pci:v000010DEd00001F91*
  ID_MODEL_FROM_DATABASE=TU117M [GeForce GTX 1650 Mobile / Max-Q]
 
@@ -36710,6 +37223,9 @@
 pci:v000010DEd00001FA0*
  ID_MODEL_FROM_DATABASE=TU117M [GeForce MX550]
 
+pci:v000010DEd00001FA1*
+ ID_MODEL_FROM_DATABASE=TU117M
+
 pci:v000010DEd00001FAE*
  ID_MODEL_FROM_DATABASE=TU117GL
 
@@ -36725,6 +37241,9 @@
 pci:v000010DEd00001FB6*
  ID_MODEL_FROM_DATABASE=TU117GLM [T600 Laptop GPU]
 
+pci:v000010DEd00001FB6sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=TU117GLM [T600 Laptop GPU] (Precision 3571)
+
 pci:v000010DEd00001FB7*
  ID_MODEL_FROM_DATABASE=TU117GLM [T550 Laptop GPU]
 
@@ -36774,7 +37293,7 @@
  ID_MODEL_FROM_DATABASE=GA100 [A100 SXM4 80GB]
 
 pci:v000010DEd000020B3*
- ID_MODEL_FROM_DATABASE=GA100 [PG506-242/243]
+ ID_MODEL_FROM_DATABASE=GA100 [A100-SXM-64GB]
 
 pci:v000010DEd000020B5*
  ID_MODEL_FROM_DATABASE=GA100 [A100 PCIe 80GB]
@@ -36812,6 +37331,15 @@
 pci:v000010DEd000020F2*
  ID_MODEL_FROM_DATABASE=GA100 [A100-PG506-217]
 
+pci:v000010DEd000020F3*
+ ID_MODEL_FROM_DATABASE=GA100 [A800-SXM4-80GB]
+
+pci:v000010DEd000020F5*
+ ID_MODEL_FROM_DATABASE=GA100 [A800 80GB PCIe]
+
+pci:v000010DEd000020F6*
+ ID_MODEL_FROM_DATABASE=GA100 [A800 40GB PCIe]
+
 pci:v000010DEd00002182*
  ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1660 Ti]
 
@@ -36878,6 +37406,9 @@
 pci:v000010DEd00002206sv00001462sd00003892*
  ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080] (RTX 3080 10GB GAMING X TRIO)
 
+pci:v000010DEd00002207*
+ ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3070 Ti]
+
 pci:v000010DEd00002208*
  ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 Ti]
 
@@ -36926,14 +37457,35 @@
 pci:v000010DEd0000228B*
  ID_MODEL_FROM_DATABASE=GA104 High Definition Audio Controller
 
+pci:v000010DEd0000228E*
+ ID_MODEL_FROM_DATABASE=GA106 High Definition Audio Controller
+
 pci:v000010DEd00002296*
  ID_MODEL_FROM_DATABASE=Tegra PCIe Endpoint Virtual Network
 
+pci:v000010DEd000022BA*
+ ID_MODEL_FROM_DATABASE=AD102 High Definition Audio Controller
+
 pci:v000010DEd00002302*
- ID_MODEL_FROM_DATABASE=GA103
+ ID_MODEL_FROM_DATABASE=GH100
+
+pci:v000010DEd00002313*
+ ID_MODEL_FROM_DATABASE=GH100 [H100 CNX]
 
 pci:v000010DEd00002321*
- ID_MODEL_FROM_DATABASE=GA103
+ ID_MODEL_FROM_DATABASE=GH100
+
+pci:v000010DEd00002322*
+ ID_MODEL_FROM_DATABASE=GH100 [H800]
+
+pci:v000010DEd00002330*
+ ID_MODEL_FROM_DATABASE=GH100[H100 SXM5 80GB]
+
+pci:v000010DEd00002331*
+ ID_MODEL_FROM_DATABASE=GH100 [H100 PCIe]
+
+pci:v000010DEd00002336*
+ ID_MODEL_FROM_DATABASE=GH100 [H100]
 
 pci:v000010DEd00002414*
  ID_MODEL_FROM_DATABASE=GA103 [GeForce RTX 3060 Ti]
@@ -36965,6 +37517,9 @@
 pci:v000010DEd00002486*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti]
 
+pci:v000010DEd00002486sv000019DAsd00006630*
+ ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti] (ZT-A30610H-10M [RTX 3060 Ti Twin Edge OC])
+
 pci:v000010DEd00002487*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060]
 
@@ -36989,6 +37544,9 @@
 pci:v000010DEd000024A0*
  ID_MODEL_FROM_DATABASE=GA104 [Geforce RTX 3070 Ti Laptop GPU]
 
+pci:v000010DEd000024A4*
+ ID_MODEL_FROM_DATABASE=GA104M
+
 pci:v000010DEd000024AC*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 30x0 Engineering Sample]
 
@@ -37025,12 +37583,18 @@
 pci:v000010DEd000024BF*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Engineering Sample]
 
+pci:v000010DEd000024C9*
+ ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti]
+
 pci:v000010DEd000024DC*
  ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
 
 pci:v000010DEd000024DD*
  ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
 
+pci:v000010DEd000024DF*
+ ID_MODEL_FROM_DATABASE=GA104M
+
 pci:v000010DEd000024E0*
  ID_MODEL_FROM_DATABASE=GA104M [Geforce RTX 3070 Ti Laptop GPU]
 
@@ -37052,9 +37616,18 @@
 pci:v000010DEd00002507*
  ID_MODEL_FROM_DATABASE=GA106 [Geforce RTX 3050]
 
+pci:v000010DEd00002508*
+ ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3050 OEM]
+
+pci:v000010DEd00002509*
+ ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060 12GB Rev. 2]
+
 pci:v000010DEd00002520*
  ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q]
 
+pci:v000010DEd00002521*
+ ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Laptop GPU]
+
 pci:v000010DEd00002523*
  ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3050 Ti Mobile / Max-Q]
 
@@ -37064,17 +37637,26 @@
 pci:v000010DEd00002531*
  ID_MODEL_FROM_DATABASE=GA106 [RTX A2000]
 
+pci:v000010DEd00002544*
+ ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060]
+
 pci:v000010DEd00002560*
  ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q]
 
+pci:v000010DEd00002561*
+ ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Laptop GPU]
+
 pci:v000010DEd00002563*
  ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3050 Ti Mobile / Max-Q]
 
 pci:v000010DEd00002571*
  ID_MODEL_FROM_DATABASE=GA106 [RTX A2000 12GB]
 
+pci:v000010DEd00002582*
+ ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050 8GB]
+
 pci:v000010DEd00002583*
- ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050]
+ ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050 4GB]
 
 pci:v000010DEd000025A0*
  ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 3050 Ti Mobile]
@@ -37103,6 +37685,15 @@
 pci:v000010DEd000025AA*
  ID_MODEL_FROM_DATABASE=GA107M [GeForce MX570 A]
 
+pci:v000010DEd000025AB*
+ ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 3050 4GB Laptop GPU]
+
+pci:v000010DEd000025AC*
+ ID_MODEL_FROM_DATABASE=GN20-P0-R-K2 [GeForce RTX 3050 6GB Laptop GPU]
+
+pci:v000010DEd000025AD*
+ ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 2050]
+
 pci:v000010DEd000025AF*
  ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050 Engineering Sample]
 
@@ -37121,6 +37712,12 @@
 pci:v000010DEd000025BA*
  ID_MODEL_FROM_DATABASE=GA107GLM [RTX A2000 8GB Laptop GPU]
 
+pci:v000010DEd000025BB*
+ ID_MODEL_FROM_DATABASE=GA107GLM [RTX A500 Laptop GPU]
+
+pci:v000010DEd000025BC*
+ ID_MODEL_FROM_DATABASE=GA107
+
 pci:v000010DEd000025E0*
  ID_MODEL_FROM_DATABASE=GA107BM [GeForce RTX 3050 Ti Mobile]
 
@@ -37130,12 +37727,99 @@
 pci:v000010DEd000025E5*
  ID_MODEL_FROM_DATABASE=GA107BM [GeForce RTX 3050 Mobile]
 
+pci:v000010DEd000025EC*
+ ID_MODEL_FROM_DATABASE=GN20-P0-R-K2 [GeForce RTX 3050 6GB Laptop GPU]
+
+pci:v000010DEd000025ED*
+ ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 2050]
+
 pci:v000010DEd000025F9*
  ID_MODEL_FROM_DATABASE=GA107 [RTX A1000 Embedded GPU ]
 
 pci:v000010DEd000025FA*
  ID_MODEL_FROM_DATABASE=GA107 [RTX A2000 Embedded GPU]
 
+pci:v000010DEd000025FB*
+ ID_MODEL_FROM_DATABASE=GA107 [RTX A500 Embedded GPU]
+
+pci:v000010DEd00002681*
+ ID_MODEL_FROM_DATABASE=AD102 [RTX TITAN Ada]
+
+pci:v000010DEd00002684*
+ ID_MODEL_FROM_DATABASE=AD102 [GeForce RTX 4090]
+
+pci:v000010DEd000026B1*
+ ID_MODEL_FROM_DATABASE=AD102GL [L6000 / RTX 6000 Ada Generation]
+
+pci:v000010DEd000026B5*
+ ID_MODEL_FROM_DATABASE=AD102GL [L40]
+
+pci:v000010DEd000026B8*
+ ID_MODEL_FROM_DATABASE=AD102GL [L40G]
+
+pci:v000010DEd000026F5*
+ ID_MODEL_FROM_DATABASE=AD102GL [L40 CNX]
+
+pci:v000010DEd00002704*
+ ID_MODEL_FROM_DATABASE=AD103 [GeForce RTX 4080]
+
+pci:v000010DEd00002717*
+ ID_MODEL_FROM_DATABASE=GN21-X11 [GeForce RTX 4090 Laptop GPU]
+
+pci:v000010DEd00002730*
+ ID_MODEL_FROM_DATABASE=AD103GLM [RTX 5000 Ada Generation Laptop GPU]
+
+pci:v000010DEd00002757*
+ ID_MODEL_FROM_DATABASE=GN21-X11
+
+pci:v000010DEd00002782*
+ ID_MODEL_FROM_DATABASE=AD104 [GeForce RTX 4070 Ti]
+
+pci:v000010DEd00002785*
+ ID_MODEL_FROM_DATABASE=AD104
+
+pci:v000010DEd00002786*
+ ID_MODEL_FROM_DATABASE=AD104 [GeForce RTX 4070]
+
+pci:v000010DEd000027A0*
+ ID_MODEL_FROM_DATABASE=GN21-X9
+
+pci:v000010DEd000027B8*
+ ID_MODEL_FROM_DATABASE=AD104GL [L4]
+
+pci:v000010DEd000027BA*
+ ID_MODEL_FROM_DATABASE=AD104
+
+pci:v000010DEd000027BB*
+ ID_MODEL_FROM_DATABASE=AD104GLM [RTX 3500 Ada Generation Laptop GPU]
+
+pci:v000010DEd000027E0*
+ ID_MODEL_FROM_DATABASE=GN21-X9
+
+pci:v000010DEd00002820*
+ ID_MODEL_FROM_DATABASE=GN21-X6
+
+pci:v000010DEd00002838*
+ ID_MODEL_FROM_DATABASE=AD106GLM [RTX 3000 Ada Generation Laptop GPU]
+
+pci:v000010DEd00002860*
+ ID_MODEL_FROM_DATABASE=GN21-X6
+
+pci:v000010DEd000028A0*
+ ID_MODEL_FROM_DATABASE=GN21-X4
+
+pci:v000010DEd000028A1*
+ ID_MODEL_FROM_DATABASE=GN21-X2
+
+pci:v000010DEd000028B8*
+ ID_MODEL_FROM_DATABASE=AD107GLM [RTX 2000 Ada Generation Laptop GPU]
+
+pci:v000010DEd000028E0*
+ ID_MODEL_FROM_DATABASE=GN21-X4
+
+pci:v000010DEd000028E1*
+ ID_MODEL_FROM_DATABASE=GN21-X2
+
 pci:v000010DF*
  ID_VENDOR_FROM_DATABASE=Emulex Corporation
 
@@ -37829,6 +38513,9 @@
 pci:v000010ECd0000525Asv00001028sd000009BE*
  ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader (Latitude 7410)
 
+pci:v000010ECd0000525Asv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader (Precision 3571)
+
 pci:v000010ECd0000525Asv000017AAsd0000224F*
  ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader (ThinkPad X1 Carbon 5th Gen)
 
@@ -38141,9 +38828,15 @@
 pci:v000010ECd00008168sv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Pavilion Laptop 15-cw1xxx)
 
+pci:v000010ECd00008168sv0000103Csd000086D4*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Pavilion Laptop 15-ec0xxx)
+
 pci:v000010ECd00008168sv0000103Csd00008882*
  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (HP ProDesk 405 G8 Desktop Mini PC)
 
+pci:v000010ECd00008168sv0000103Csd00008B17*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (ProBook 445 G9/455 G9 [RTL8111HSH-CG GbE Controller])
+
 pci:v000010ECd00008168sv00001043sd000011F5*
  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Notebook motherboard (one of many models))
 
@@ -38409,7 +39102,7 @@
  ID_MODEL_FROM_DATABASE=RTL8822BE 802.11a/b/g/n/ac WiFi adapter
 
 pci:v000010ECd0000B822sv0000103Csd0000831B*
- ID_MODEL_FROM_DATABASE=RTL8822BE 802.11a/b/g/n/ac WiFi adapter (Realtek RTL8822BE 802.11ac 2 × 2 Wi-Fi + Bluetooth 4.2 Combo Adapter (MU-MIMO supported))
+ ID_MODEL_FROM_DATABASE=RTL8822BE 802.11a/b/g/n/ac WiFi adapter (Realtek RTL8822BE 802.11ac 2 Ã— 2 Wi-Fi + Bluetooth 4.2 Combo Adapter (MU-MIMO supported))
 
 pci:v000010ECd0000B822sv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=RTL8822BE 802.11a/b/g/n/ac WiFi adapter (ThinkPad E595)
@@ -38489,9 +39182,33 @@
 pci:v000010EEd00003FC6*
  ID_MODEL_FROM_DATABASE=RME Hammerfall DSP MADI
 
+pci:v000010EEd00005000*
+ ID_MODEL_FROM_DATABASE=Alveo U200 XDMA Platform
+
+pci:v000010EEd00005004*
+ ID_MODEL_FROM_DATABASE=Alveo U250 XDMA Platform
+
 pci:v000010EEd00005005*
  ID_MODEL_FROM_DATABASE=Alveo U250
 
+pci:v000010EEd0000500C*
+ ID_MODEL_FROM_DATABASE=Alveo U280 XDMA Platform
+
+pci:v000010EEd00005020*
+ ID_MODEL_FROM_DATABASE=Alveo U50 XMDA Platform
+
+pci:v000010EEd0000505C*
+ ID_MODEL_FROM_DATABASE=Alveo U55C
+
+pci:v000010EEd00006987*
+ ID_MODEL_FROM_DATABASE=SmartSSD
+
+pci:v000010EEd00006988*
+ ID_MODEL_FROM_DATABASE=SmartSSD
+
+pci:v000010EEd00007011*
+ ID_MODEL_FROM_DATABASE=7-Series FPGA Hard PCIe block (AXI/debug)
+
 pci:v000010EEd00007038*
  ID_MODEL_FROM_DATABASE=FPGA Card XC7VX690T
 
@@ -38510,6 +39227,27 @@
 pci:v000010EEd00008381*
  ID_MODEL_FROM_DATABASE=Ellips Santos Frame Grabber
 
+pci:v000010EEd00009134*
+ ID_MODEL_FROM_DATABASE=SmartSSD
+
+pci:v000010EEd00009234*
+ ID_MODEL_FROM_DATABASE=SmartSSD
+
+pci:v000010EEd00009434*
+ ID_MODEL_FROM_DATABASE=SmartSSD
+
+pci:v000010EEd0000D000*
+ ID_MODEL_FROM_DATABASE=Alveo U200 Golden Image
+
+pci:v000010EEd0000D004*
+ ID_MODEL_FROM_DATABASE=Alveo U250 Golden Image
+
+pci:v000010EEd0000D00C*
+ ID_MODEL_FROM_DATABASE=Alveo U280 Golden Image
+
+pci:v000010EEd0000D020*
+ ID_MODEL_FROM_DATABASE=Alveo U50 Golden Image
+
 pci:v000010EEd0000D154*
  ID_MODEL_FROM_DATABASE=Copley Controls CAN card (PCI-CAN-02)
 
@@ -38982,10 +39720,13 @@
  ID_MODEL_FROM_DATABASE=EMU20k2 [Sound Blaster X-Fi Titanium Series] (SB1270 [SoundBlaster X-Fi Titanium HD])
 
 pci:v00001102d00000012*
- ID_MODEL_FROM_DATABASE=Sound Core3D [Sound Blaster Recon3D / Z-Series]
+ ID_MODEL_FROM_DATABASE=CA0132 Sound Core3D [Sound Blaster Recon3D / Z-Series / Sound BlasterX AE-5 Plus]
 
 pci:v00001102d00000012sv00001102sd00000010*
- ID_MODEL_FROM_DATABASE=Sound Core3D [Sound Blaster Recon3D / Z-Series] (SB1570 SB Audigy Fx)
+ ID_MODEL_FROM_DATABASE=CA0132 Sound Core3D [Sound Blaster Recon3D / Z-Series / Sound BlasterX AE-5 Plus] (SB1570 SB Audigy Fx)
+
+pci:v00001102d00000012sv00001102sd00000191*
+ ID_MODEL_FROM_DATABASE=CA0132 Sound Core3D [Sound Blaster Recon3D / Z-Series / Sound BlasterX AE-5 Plus] (CA0132 Sound Core3D - CA0113 [ Sound BlasterX AE-5 Plus])
 
 pci:v00001102d00004001*
  ID_MODEL_FROM_DATABASE=SB Audigy FireWire Port
@@ -39191,6 +39932,9 @@
 pci:v00001103d00007505*
  ID_MODEL_FROM_DATABASE=SSD7505 PCIe Gen4 x16 4-Port M.2 NVMe RAID Controller
 
+pci:v00001103d00007540*
+ ID_MODEL_FROM_DATABASE=SSD7540 PCIe Gen4 x16 8-Port M.2 NVMe RAID Controller
+
 pci:v00001104*
  ID_VENDOR_FROM_DATABASE=RasterOps Corp.
 
@@ -39983,6 +40727,9 @@
 pci:v00001106d00003059sv00001695sd0000300C*
  ID_MODEL_FROM_DATABASE=VT8233/A/8235/8237 AC97 Audio Controller (Realtek ALC655 audio on EP-8KRA series mainboard)
 
+pci:v00001106d00003059sv000016F3sd00004170*
+ ID_MODEL_FROM_DATABASE=VT8233/A/8235/8237 AC97 Audio Controller (J7F2 motherboard)
+
 pci:v00001106d00003059sv00001849sd00000850*
  ID_MODEL_FROM_DATABASE=VT8233/A/8235/8237 AC97 Audio Controller (ASRock 775Dual-880 Pro onboard audio (Realtek ALC850))
 
@@ -40350,22 +41097,22 @@
  ID_MODEL_FROM_DATABASE=K8T800M Host Bridge
 
 pci:v00001106d00003227*
- ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890 South]
+ ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890/CN700 South]
 
 pci:v00001106d00003227sv00001043sd000080ED*
- ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890 South] (A7V600/K8V-X/A8V Deluxe motherboard)
+ ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890/CN700 South] (A7V600/K8V-X/A8V Deluxe motherboard)
 
 pci:v00001106d00003227sv00001106sd00003227*
- ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890 South] (DFI KT600-AL / Soltek SL-B9D-FGR Motherboard)
+ ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890/CN700 South] (VT8237 ISA bridge)
 
 pci:v00001106d00003227sv00001458sd00005001*
- ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890 South] (GA-7VT600 Motherboard)
+ ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890/CN700 South] (GA-7VT600 Motherboard)
 
 pci:v00001106d00003227sv0000147Bsd00001407*
- ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890 South] (KV8-MAX3 motherboard)
+ ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890/CN700 South] (KV8-MAX3 motherboard)
 
 pci:v00001106d00003227sv00001849sd00003227*
- ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890 South] (K7VT4 motherboard)
+ ID_MODEL_FROM_DATABASE=VT8237 ISA bridge [KT600/K8T800/K8T890/CN700 South] (K7VT4 motherboard)
 
 pci:v00001106d00003230*
  ID_MODEL_FROM_DATABASE=K8M890CE/K8N890CE [Chrome 9]
@@ -41793,7 +42540,10 @@
  ID_VENDOR_FROM_DATABASE=Hermes Electronics Company, Ltd.
 
 pci:v0000112B*
- ID_VENDOR_FROM_DATABASE=Heidelberger Druckmaschinen AGHeidelberger Druckmaschinen AG
+ ID_VENDOR_FROM_DATABASE=Heidelberger Druckmaschinen AG
+
+pci:v0000112Bd00000001*
+ ID_MODEL_FROM_DATABASE=SCU5
 
 pci:v0000112C*
  ID_VENDOR_FROM_DATABASE=Zenith Data Systems
@@ -44321,6 +45071,12 @@
 pci:v00001179d00000115*
  ID_MODEL_FROM_DATABASE=XG4 NVMe SSD Controller
 
+pci:v00001179d00000116*
+ ID_MODEL_FROM_DATABASE=XG5 NVMe SSD Controller
+
+pci:v00001179d00000116sv00001179sd00000001*
+ ID_MODEL_FROM_DATABASE=XG5 NVMe SSD Controller
+
 pci:v00001179d0000011A*
  ID_MODEL_FROM_DATABASE=XG6 NVMe SSD Controller
 
@@ -49430,6 +50186,9 @@
 pci:v0000129Ad00000615*
  ID_MODEL_FROM_DATABASE=PBT-615 PCI-X Bus Analyzer
 
+pci:v0000129Ad00000715*
+ ID_MODEL_FROM_DATABASE=cPCI Bus Analyzer
+
 pci:v0000129Ad00001100*
  ID_MODEL_FROM_DATABASE=PMC-FPGA05
 
@@ -50925,11 +51684,179 @@
  ID_MODEL_FROM_DATABASE=9200 MAX NVMe SSD
 
 pci:v00001344d000051A2*
- ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD
+ ID_MODEL_FROM_DATABASE=7300 PRO NVMe SSD
+
+pci:v00001344d000051A2sv00001344sd00002000*
+ ID_MODEL_FROM_DATABASE=7300 PRO NVMe SSD (960GB U.2)
+
+pci:v00001344d000051A2sv00001344sd00003000*
+ ID_MODEL_FROM_DATABASE=7300 PRO NVMe SSD (1920GB U.2)
+
+pci:v00001344d000051A2sv00001344sd00004000*
+ ID_MODEL_FROM_DATABASE=7300 PRO NVMe SSD (3480GB U.2)
+
+pci:v00001344d000051A2sv00001344sd00005000*
+ ID_MODEL_FROM_DATABASE=7300 PRO NVMe SSD (7680GB U.2)
 
 pci:v00001344d000051A3*
+ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD
+
+pci:v00001344d000051A3sv00001344sd00001100*
+ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD (400GB M.2)
+
+pci:v00001344d000051A3sv00001344sd00002000*
+ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD (800GB U.2)
+
+pci:v00001344d000051A3sv00001344sd00002100*
+ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD (800GB M.2)
+
+pci:v00001344d000051A3sv00001344sd00003000*
+ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD (1600GB U.2)
+
+pci:v00001344d000051A3sv00001344sd00004000*
+ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD (3200GB U.2)
+
+pci:v00001344d000051A3sv00001344sd00005000*
+ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD (6400GB U.2)
+
+pci:v00001344d000051B1*
+ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD
+
+pci:v00001344d000051B1sv00001344sd00004000*
+ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (3.84TB U.2)
+
+pci:v00001344d000051B1sv00001344sd00005000*
+ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (7.68TB U.2)
+
+pci:v00001344d000051B1sv00001344sd00006000*
+ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (15.36TB U.2)
+
+pci:v00001344d000051B2*
  ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD
 
+pci:v00001344d000051B2sv00001344sd00004000*
+ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (3.2TB U.2)
+
+pci:v00001344d000051B2sv00001344sd00005000*
+ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (6.4 TB U.2)
+
+pci:v00001344d000051B2sv00001344sd00006000*
+ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (12.8TB U.2)
+
+pci:v00001344d000051C0*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD
+
+pci:v00001344d000051C0sv00001028sd00002162*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe OPAL 7400 RI M.2 480GB)
+
+pci:v00001344d000051C0sv00001028sd00002163*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe OPAL 7400 RI M.2 960GB)
+
+pci:v00001344d000051C0sv00001028sd00002164*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe ISE 7400 RI M.2 480GB)
+
+pci:v00001344d000051C0sv00001028sd00002165*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe ISE 7400 RI M.2 960GB)
+
+pci:v00001344d000051C0sv00001028sd0000216C*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe ISE 7400 RI M.2 110 1.92TB)
+
+pci:v00001344d000051C0sv00001028sd0000216D*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe ISE 7400 RI M.2 110 3.84TB)
+
+pci:v00001344d000051C0sv00001028sd0000216E*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe OPAL 7400 RI M.2 110 1.92TB)
+
+pci:v00001344d000051C0sv00001028sd0000216F*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe OPAL 7400 RI M.2 110 3.84TB)
+
+pci:v00001344d000051C0sv00001028sd00002197*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe OPAL 7400 RI M.2 110 960GB)
+
+pci:v00001344d000051C0sv00001028sd0000224D*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (EC NVMe ISE 7400 RI M.2 110 960GB)
+
+pci:v00001344d000051C0sv00001344sd00001100*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 480GB)
+
+pci:v00001344d000051C0sv00001344sd00002000*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 960GB)
+
+pci:v00001344d000051C0sv00001344sd00002100*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 960GB)
+
+pci:v00001344d000051C0sv00001344sd00002600*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.S 960GB)
+
+pci:v00001344d000051C0sv00001344sd00002B00*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 1920GB)
+
+pci:v00001344d000051C0sv00001344sd00002D00*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.2 1920GB)
+
+pci:v00001344d000051C0sv00001344sd00003000*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 1920GB)
+
+pci:v00001344d000051C0sv00001344sd00003E00*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 3840GB)
+
+pci:v00001344d000051C0sv00001344sd00003F00*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.S 3840GB)
+
+pci:v00001344d000051C0sv00001344sd00004000*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 3840GB)
+
+pci:v00001344d000051C0sv00001344sd00005000*
+ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 7680GB)
+
+pci:v00001344d000051C1*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD
+
+pci:v00001344d000051C1sv00001028sd0000216A*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (EC NVMe ISE 7400 MU M.2 80 800GB)
+
+pci:v00001344d000051C1sv00001028sd0000216B*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (EC NVMe OPAL 7400 MU M.2 80 800GB)
+
+pci:v00001344d000051C1sv00001344sd00001100*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 400GB)
+
+pci:v00001344d000051C1sv00001344sd00002000*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 800GB)
+
+pci:v00001344d000051C1sv00001344sd00002100*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 800GB)
+
+pci:v00001344d000051C1sv00001344sd00002600*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 800GB)
+
+pci:v00001344d000051C1sv00001344sd00002B00*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 1600GB)
+
+pci:v00001344d000051C1sv00001344sd00002D00*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 1600GB)
+
+pci:v00001344d000051C1sv00001344sd00003000*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 1600GB)
+
+pci:v00001344d000051C1sv00001344sd00003E00*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 3200GB)
+
+pci:v00001344d000051C1sv00001344sd00003F00*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 3200GB)
+
+pci:v00001344d000051C1sv00001344sd00004000*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 3200GB)
+
+pci:v00001344d000051C1sv00001344sd00005000*
+ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 6400GB)
+
+pci:v00001344d000051C3*
+ ID_MODEL_FROM_DATABASE=7450 PRO NVMe SSD
+
+pci:v00001344d000051C4*
+ ID_MODEL_FROM_DATABASE=7450 MAX NVMe SSD
+
 pci:v00001345*
  ID_VENDOR_FROM_DATABASE=Arescom Inc
 
@@ -53135,6 +54062,9 @@
 pci:v00001414d0000008C*
  ID_MODEL_FROM_DATABASE=Basic Render Driver
 
+pci:v00001414d0000008E*
+ ID_MODEL_FROM_DATABASE=Basic Render Driver
+
 pci:v00001414d00005353*
  ID_MODEL_FROM_DATABASE=Hyper-V virtual VGA
 
@@ -55430,6 +56360,12 @@
 pci:v00001425d0000608A*
  ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Ethernet Controller
 
+pci:v00001425d00006092*
+ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller
+
+pci:v00001425d00006092sv000001DEsd0000FFF9*
+ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet Baseboard)
+
 pci:v00001425d00006401*
  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Ethernet Controller
 
@@ -55502,6 +56438,12 @@
 pci:v00001425d0000648A*
  ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Ethernet Controller
 
+pci:v00001425d00006492*
+ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller
+
+pci:v00001425d00006492sv000001DEsd0000FFF9*
+ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet Baseboard)
+
 pci:v00001425d00006501*
  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Storage Controller
 
@@ -55574,6 +56516,9 @@
 pci:v00001425d0000658A*
  ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Storage Controller
 
+pci:v00001425d00006592*
+ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Storage Controller
+
 pci:v00001425d00006601*
  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Storage Controller
 
@@ -55646,6 +56591,9 @@
 pci:v00001425d0000668A*
  ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Storage Controller
 
+pci:v00001425d00006692*
+ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Storage Controller
+
 pci:v00001425d00006801*
  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Ethernet Controller [VF]
 
@@ -55922,6 +56870,12 @@
 pci:v0000144Dd0000A544*
  ID_MODEL_FROM_DATABASE=Exynos 8890 PCIe Root Complex
 
+pci:v0000144Dd0000A575*
+ ID_MODEL_FROM_DATABASE=Exynos 7420 PCIe Root Complex
+
+pci:v0000144Dd0000A5E3*
+ ID_MODEL_FROM_DATABASE=Exynos 5433 PCIe Root Complex
+
 pci:v0000144Dd0000A800*
  ID_MODEL_FROM_DATABASE=XP941 PCIe SSD
 
@@ -55941,7 +56895,7 @@
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM981/PM981/PM983
 
 pci:v0000144Dd0000A808sv0000144Dsd0000A801*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM981/PM981/PM983 (SSD 970 EVO Plus 1TB)
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM981/PM981/PM983 (SSD 970 EVO)
 
 pci:v0000144Dd0000A808sv00001D49sd0000403B*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM981/PM981/PM983 (Thinksystem U.2 PM983 NVMe SSD)
@@ -55979,6 +56933,9 @@
 pci:v0000144Dd0000A80Asv0000144Dsd0000A813*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM9A1/PM9A3/980PRO (General DC NVMe PM9A3)
 
+pci:v0000144Dd0000A80B*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM9B1
+
 pci:v0000144Dd0000A820*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller 171X
 
@@ -56459,6 +57416,9 @@
 pci:v0000148Cd00002391*
  ID_MODEL_FROM_DATABASE=Radeon RX 590 [Red Devil]
 
+pci:v0000148Cd00002398*
+ ID_MODEL_FROM_DATABASE=AXRX 5700 XT 8GBD6-3DHE/OC [PowerColor Red Devil Radeon RX 5700 XT]
+
 pci:v0000148D*
  ID_VENDOR_FROM_DATABASE=DIGICOM Systems, Inc.
 
@@ -56754,7 +57714,7 @@
  ID_VENDOR_FROM_DATABASE=MEDIATEK Corp.
 
 pci:v000014C3d00000608*
- ID_MODEL_FROM_DATABASE=RZ608 Wi-Fi 6E 80MHz
+ ID_MODEL_FROM_DATABASE=MT7921K (RZ608) Wi-Fi 6E 80MHz
 
 pci:v000014C3d00000616*
  ID_MODEL_FROM_DATABASE=MT7922 802.11ax PCI Express Wireless Network Adapter
@@ -57083,6 +58043,12 @@
 pci:v000014E4d00001614*
  ID_MODEL_FROM_DATABASE=BCM57454 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet
 
+pci:v000014E4d00001614sv000014E4sd0000D140*
+ ID_MODEL_FROM_DATABASE=BCM57454 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet (NetXtreme-E Quad-port 10GBASE-T Ethernet PCIe Adapter (BCM957454-P410SDBT))
+
+pci:v000014E4d00001614sv000014E4sd0000D340*
+ ID_MODEL_FROM_DATABASE=BCM57454 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet (NetXtreme-E Quad-port 10GBASE-T Ethernet OCP 3.0 Adapter (BCM957454-N410SDBT))
+
 pci:v000014E4d00001615*
  ID_MODEL_FROM_DATABASE=BCM70015 Video Decoder [Crystal HD]
 
@@ -57497,6 +58463,12 @@
 pci:v000014E4d00001657sv000014E4sd00001904*
  ID_MODEL_FROM_DATABASE=NetXtreme BCM5719 Gigabit Ethernet PCIe (4-port 1Gb Ethernet Adapter)
 
+pci:v000014E4d00001657sv000014E4sd00001909*
+ ID_MODEL_FROM_DATABASE=NetXtreme BCM5719 Gigabit Ethernet PCIe (Broadcom NetXtreme 5719 Quad Port Gigabit NIC)
+
+pci:v000014E4d00001657sv0000193Dsd00001025*
+ ID_MODEL_FROM_DATABASE=NetXtreme BCM5719 Gigabit Ethernet PCIe (NIC-ETH330T-LP-4P)
+
 pci:v000014E4d00001659*
  ID_MODEL_FROM_DATABASE=NetXtreme BCM5721 Gigabit Ethernet PCI Express
 
@@ -58289,6 +59261,9 @@
 pci:v000014E4d000016D6*
  ID_MODEL_FROM_DATABASE=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller
 
+pci:v000014E4d000016D6sv0000117Csd000000CD*
+ ID_MODEL_FROM_DATABASE=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (FastFrame N4S2 Dual-port 10Gb Ethernet Adapter)
+
 pci:v000014E4d000016D6sv000014E4sd00001202*
  ID_MODEL_FROM_DATABASE=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (BCM957412M4122C OCP 1x25G Type1 wRoCE)
 
@@ -58310,6 +59285,9 @@
 pci:v000014E4d000016D7*
  ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller
 
+pci:v000014E4d000016D7sv0000117Csd000000CC*
+ ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (FastFrame N422 Dual-port 25Gb Ethernet Adapter)
+
 pci:v000014E4d000016D7sv000014E4sd00001402*
  ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (BCM957414A4142CC 10Gb/25Gb Ethernet PCIe)
 
@@ -58331,8 +59309,17 @@
 pci:v000014E4d000016D7sv00001590sd00000211*
  ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (Ethernet 25Gb 2-port 631FLR-SFP28 Adapter)
 
+pci:v000014E4d000016D7sv0000193Dsd00001033*
+ ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (NIC-ETH630F-LP-2P)
+
+pci:v000014E4d000016D7sv00001BD4sd0000008E*
+ ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (ENFB2251-SP2)
+
+pci:v000014E4d000016D7sv00001BD4sd0000008F*
+ ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (ENPB2251-SP2)
+
 pci:v000014E4d000016D7sv00001EECsd00000101*
- ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe)
+ ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (VSE-225-31S Dual-port 10Gb/25Gb Ethernet PCIe)
 
 pci:v000014E4d000016D8*
  ID_MODEL_FROM_DATABASE=BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller
@@ -58340,6 +59327,9 @@
 pci:v000014E4d000016D8sv00001028sd00001FEB*
  ID_MODEL_FROM_DATABASE=BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller (NetXtreme-E 10Gb SFP+ Adapter)
 
+pci:v000014E4d000016D8sv0000117Csd000000CE*
+ ID_MODEL_FROM_DATABASE=BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller (FastFrame N4T2 Dual-port 10GBASE-T Ethernet Adapter)
+
 pci:v000014E4d000016D8sv000014E4sd00004163*
  ID_MODEL_FROM_DATABASE=BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller (NetXtreme-E Dual-port 10GBASE-T Ethernet OCP 2.0 Adapter (BCM957416M4163C))
 
@@ -58493,6 +59483,9 @@
 pci:v000014E4d00001750*
  ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
 
+pci:v000014E4d00001750sv0000117Csd000000CF*
+ ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (FastFrame N412 Dual-port 100Gb Ethernet Adapter)
+
 pci:v000014E4d00001750sv000014E4sd00002100*
  ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (NetXtreme-E Dual-port 100G QSFP56 Ethernet PCIe4.0 x16 Adapter (BCM957508-P2100G))
 
@@ -58503,7 +59496,7 @@
  ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (NetXtreme-E P2100D BCM57508 2x100G QSFP PCIE)
 
 pci:v000014E4d00001750sv000014E4sd0000DF24*
- ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet)
+ ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (NetXtreme-E NGM2100D BCM57508 2x100G KR Mezz Ethernet)
 
 pci:v000014E4d00001751*
  ID_MODEL_FROM_DATABASE=BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
@@ -58514,6 +59507,12 @@
 pci:v000014E4d00001751sv000014E4sd00005045*
  ID_MODEL_FROM_DATABASE=BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (NetXtreme-E BCM57504 4x25G OCP3.0)
 
+pci:v000014E4d00001751sv000014E4sd00005100*
+ ID_MODEL_FROM_DATABASE=BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (NetXtreme-E Single-port 100G QSFP56 Ethernet OCP 3.0 Adapter (BCM957504-N1100G))
+
+pci:v000014E4d00001751sv000014E4sd00005105*
+ ID_MODEL_FROM_DATABASE=BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (NetXtreme-E Single-port 100G DSFP Ethernet OCP 3.0 Adapter (BCM957504-N1100GD))
+
 pci:v000014E4d00001751sv000014E4sd00005250*
  ID_MODEL_FROM_DATABASE=BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet (NetXtreme-E BCM57504 4x25G KR Mezz)
 
@@ -59342,6 +60341,15 @@
 pci:v000014E4d00005E88*
  ID_MODEL_FROM_DATABASE=Viper Offload Engine
 
+pci:v000014E4d00005F69*
+ ID_MODEL_FROM_DATABASE=BRCM4378 Bluetooth Controller
+
+pci:v000014E4d00005F71*
+ ID_MODEL_FROM_DATABASE=BRCM4387 Bluetooth Controller
+
+pci:v000014E4d00005FA0*
+ ID_MODEL_FROM_DATABASE=BRCM4377 Bluetooth Controller
+
 pci:v000014E4d00008602*
  ID_MODEL_FROM_DATABASE=BCM7400/BCM7405 Serial ATA Controller
 
@@ -59447,6 +60455,9 @@
 pci:v000014E4d0000D804*
  ID_MODEL_FROM_DATABASE=BCM58804 Stingray 100Gb Ethernet SoC
 
+pci:v000014E4d0000F800*
+ ID_MODEL_FROM_DATABASE=BCM78800 switch ASIC for f800
+
 pci:v000014E5*
  ID_VENDOR_FROM_DATABASE=Pixelfusion Ltd
 
@@ -61523,6 +62534,18 @@
 pci:v000015B3d00000259*
  ID_MODEL_FROM_DATABASE=Abir Chiplet
 
+pci:v000015B3d0000025B*
+ ID_MODEL_FROM_DATABASE=Quantum-3 in Flash Recovery Mode
+
+pci:v000015B3d0000025C*
+ ID_MODEL_FROM_DATABASE=Quantum-3 RMA
+
+pci:v000015B3d0000025D*
+ ID_MODEL_FROM_DATABASE=Quantum-3CPO in Flash Recovery Mode
+
+pci:v000015B3d0000025E*
+ ID_MODEL_FROM_DATABASE=Quantum-3CPO RMA
+
 pci:v000015B3d00000262*
  ID_MODEL_FROM_DATABASE=MT27710 [ConnectX-4 Lx Programmable] EN
 
@@ -61550,6 +62573,12 @@
 pci:v000015B3d00000281*
  ID_MODEL_FROM_DATABASE=NPS-600 Flash Recovery
 
+pci:v000015B3d00000282*
+ ID_MODEL_FROM_DATABASE=ArcusE Flash recovery
+
+pci:v000015B3d00000283*
+ ID_MODEL_FROM_DATABASE=ArcusE RMA
+
 pci:v000015B3d00001002*
  ID_MODEL_FROM_DATABASE=MT25400 Family [ConnectX-2 Virtual Function]
 
@@ -61583,6 +62612,9 @@
 pci:v000015B3d00001003sv000015B3sd00000028*
  ID_MODEL_FROM_DATABASE=MT27500 Family [ConnectX-3] (ConnectX-3 VPI Dual QSFP+ Port QDR Infiniband 40Gb/s or 10Gb Ethernet)
 
+pci:v000015B3d00001003sv000015B3sd00000055*
+ ID_MODEL_FROM_DATABASE=MT27500 Family [ConnectX-3] (ConnectX-3 10 GbE Single Port SFP+ Adapter)
+
 pci:v000015B3d00001003sv000015B3sd00000059*
  ID_MODEL_FROM_DATABASE=MT27500 Family [ConnectX-3] (ConnectX-3 VPI IB FDR/40 GbE Single Port QSFP+ Mezzanine Card)
 
@@ -61649,6 +62681,9 @@
 pci:v000015B3d00001007sv000015B3sd00000006*
  ID_MODEL_FROM_DATABASE=MT27520 Family [ConnectX-3 Pro] (Mellanox Technologies ConnectX-3 Pro Stand-up dual-port 40GbE MCX314A-BCCT)
 
+pci:v000015B3d00001007sv000015B3sd0000000C*
+ ID_MODEL_FROM_DATABASE=MT27520 Family [ConnectX-3 Pro] (ConnectX-3 Pro 10 GbE Dual Port SFP+ Adapter revision A1)
+
 pci:v000015B3d00001007sv000015B3sd00000078*
  ID_MODEL_FROM_DATABASE=MT27520 Family [ConnectX-3 Pro] (ConnectX-3 Pro 10 GbE Dual Port KR Mezzanine Card)
 
@@ -61770,16 +62805,16 @@
  ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5]
 
 pci:v000015B3d00001017sv000015B3sd00000006*
- ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (ConnectX®-5 EN network interface card, 100GbE single-port QSFP28, PCIe3.0 x16, tall bracket; MCX515A-CCAT)
+ ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (ConnectXÂ®-5 EN network interface card, 100GbE single-port QSFP28, PCIe3.0 x16, tall bracket; MCX515A-CCAT)
 
 pci:v000015B3d00001017sv000015B3sd00000007*
- ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (Mellanox ConnectX®-5 MCX516A-CCAT)
+ ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (Mellanox ConnectXÂ®-5 MCX516A-CCAT)
 
 pci:v000015B3d00001017sv000015B3sd00000020*
- ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (ConnectX®-5 EN network interface card, 10/25GbE dual-port SFP28, PCIe3.0 x8, tall bracket ; MCX512A-ACAT)
+ ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (ConnectXÂ®-5 EN network interface card, 10/25GbE dual-port SFP28, PCIe3.0 x8, tall bracket ; MCX512A-ACAT)
 
 pci:v000015B3d00001017sv000015B3sd00000068*
- ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (ConnectX®-5 EN network interface card for OCP2.0, Type 1, with host management, 25GbE dual-port SFP28, PCIe3.0 x8, no bracket Halogen free ; MCX542B-ACAN)
+ ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (ConnectXÂ®-5 EN network interface card for OCP2.0, Type 1, with host management, 25GbE dual-port SFP28, PCIe3.0 x8, no bracket Halogen free ; MCX542B-ACAN)
 
 pci:v000015B3d00001017sv0000193Dsd00001051*
  ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (NIC-IB1040i-Mb-2P)
@@ -62051,6 +63086,9 @@
 pci:v000015B3d0000A2DF*
  ID_MODEL_FROM_DATABASE=BF4 Family integrated network controller [BlueField-4 integrated network controller]
 
+pci:v000015B3d0000B200*
+ ID_MODEL_FROM_DATABASE=ArcusE
+
 pci:v000015B3d0000C2D2*
  ID_MODEL_FROM_DATABASE=MT416842 BlueField SoC management interfac
 
@@ -62108,6 +63146,12 @@
 pci:v000015B3d0000D2F2*
  ID_MODEL_FROM_DATABASE=Quantum-2 NDR (400Gbps) switch
 
+pci:v000015B3d0000D2F4*
+ ID_MODEL_FROM_DATABASE=Quantum-3
+
+pci:v000015B3d0000D2F6*
+ ID_MODEL_FROM_DATABASE=Quantum-3CPO
+
 pci:v000015B4*
  ID_VENDOR_FROM_DATABASE=CCI/TRIAD
 
@@ -62346,7 +63390,7 @@
  ID_VENDOR_FROM_DATABASE=Genrad Inc
 
 pci:v000015CF*
- ID_VENDOR_FROM_DATABASE=Hilscher Gesellschaft für Systemautomation mbH
+ ID_VENDOR_FROM_DATABASE=Hilscher Gesellschaft fÃ¼r Systemautomation mbH
 
 pci:v000015CFd00000000*
  ID_MODEL_FROM_DATABASE=CIFX PCI/PCIe
@@ -62378,6 +63422,9 @@
 pci:v000015D9*
  ID_VENDOR_FROM_DATABASE=Super Micro Computer Inc
 
+pci:v000015D9d00001B67*
+ ID_MODEL_FROM_DATABASE=AOC-S3916L-H16iR-32DD
+
 pci:v000015DA*
  ID_VENDOR_FROM_DATABASE=Cyberfirm Inc
 
@@ -63732,7 +64779,7 @@
  ID_MODEL_FROM_DATABASE=AR93xx Wireless Network Adapter
 
 pci:v0000168Cd00000030sv0000103Csd00001627*
- ID_MODEL_FROM_DATABASE=AR93xx Wireless Network Adapter (AR9380/HB112 802.11abgn 3×3 Wi-Fi Adapter)
+ ID_MODEL_FROM_DATABASE=AR93xx Wireless Network Adapter (AR9380/HB112 802.11abgn 3Ã—3 Wi-Fi Adapter)
 
 pci:v0000168Cd00000030sv0000106Bsd0000009A*
  ID_MODEL_FROM_DATABASE=AR93xx Wireless Network Adapter (AirPort Extreme)
@@ -63753,7 +64800,7 @@
  ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter (Wireless 1506 WLAN Half Mini-Card)
 
 pci:v0000168Cd00000032sv0000103Csd00001838*
- ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter (AR9485/HB125 802.11bgn 1×1 Wi-Fi Adapter)
+ ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter (AR9485/HB125 802.11bgn 1Ã—1 Wi-Fi Adapter)
 
 pci:v0000168Cd00000032sv0000105Bsd0000E044*
  ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter (Unex DHXA-225)
@@ -64296,7 +65343,184 @@
  ID_VENDOR_FROM_DATABASE=PIKA Technologies Inc.
 
 pci:v000016E2*
- ID_VENDOR_FROM_DATABASE=Geotest-MTS
+ ID_VENDOR_FROM_DATABASE=Marvin Test Solutions
+
+pci:v000016E2d00001034*
+ ID_MODEL_FROM_DATABASE=GX1034 Certification and Verification Module PXI Board
+
+pci:v000016E2d00001100*
+ ID_MODEL_FROM_DATABASE=GX1100 Arbitrary Waveform and Function Generator PXI Board
+
+pci:v000016E2d00001120*
+ ID_MODEL_FROM_DATABASE=GX1120 Arbitrary Waveform and Function Generator PXI Board
+
+pci:v000016E2d00001164*
+ ID_MODEL_FROM_DATABASE=GX1164 Multi-Channel Programmable Resistor PXI Board
+
+pci:v000016E2d00001632*
+ ID_MODEL_FROM_DATABASE=GX1632e 32-Channel Arbitrary Analog Output PXIe Board
+
+pci:v000016E2d00001648*
+ ID_MODEL_FROM_DATABASE=GX1648 64-Channel Analog Output PXI Board
+
+pci:v000016E2d00001649*
+ ID_MODEL_FROM_DATABASE=GX1649 64-Channel Arbitrary Analog Output PXI Board
+
+pci:v000016E2d00001838*
+ ID_MODEL_FROM_DATABASE=GX1838 Precision DC Source PXI Board
+
+pci:v000016E2d00002065*
+ ID_MODEL_FROM_DATABASE=GX2065 Digital Multimeter PXI Board
+
+pci:v000016E2d00002200*
+ ID_MODEL_FROM_DATABASE=GTX2200 High Resolution Universal Time Interval Counter PXI Board
+
+pci:v000016E2d00002201*
+ ID_MODEL_FROM_DATABASE=GC2200 High Resolution Universal Time Interval Counter PCI Board
+
+pci:v000016E2d00003104*
+ ID_MODEL_FROM_DATABASE=GX3104 4-Channel 20V, 250mA Per Channel SMU PXI Board
+
+pci:v000016E2d00003108*
+ ID_MODEL_FROM_DATABASE=GX3108 4-Channel Source Measure Unit PXI Board
+
+pci:v000016E2d00003116*
+ ID_MODEL_FROM_DATABASE=GX3116e 16-Channel DUT Power Supply PXIe Board
+
+pci:v000016E2d00003348*
+ ID_MODEL_FROM_DATABASE=GX3348 Multi-Channel DC Source and Switch Matrix Board
+
+pci:v000016E2d00003500*
+ ID_MODEL_FROM_DATABASE=GX3500 Digital I/O FLEX FPGA Board
+
+pci:v000016E2d00003700*
+ ID_MODEL_FROM_DATABASE=GX3700e Digital I/O FLEX FPGA PXIe Board
+
+pci:v000016E2d00003701*
+ ID_MODEL_FROM_DATABASE=GX3700 Digital I/O FLEX FPGA PXI Board
+
+pci:v000016E2d00003800*
+ ID_MODEL_FROM_DATABASE=GX3800e Digital I/O FLEX FPGA PXIe Board
+
+pci:v000016E2d00004943*
+ ID_MODEL_FROM_DATABASE=GX4943 HellFire/Longbow Serial Communication Board
+
+pci:v000016E2d00005050*
+ ID_MODEL_FROM_DATABASE=GC5050 Dynamic Digital I/O with Algorithmic Sequencer PCI Board
+
+pci:v000016E2d00005055*
+ ID_MODEL_FROM_DATABASE=GX5055 Dynamic Digital I/O with Pin Electronics PXI Board
+
+pci:v000016E2d00005083*
+ ID_MODEL_FROM_DATABASE=GX5083 Dynamic Digital I/O with Algorithmic Sequencer PXI Board
+
+pci:v000016E2d00005106*
+ ID_MODEL_FROM_DATABASE=GX5106 High-Speed Digital I/O Cycle Timing (Master) Module PXI Board
+
+pci:v000016E2d00005151*
+ ID_MODEL_FROM_DATABASE=GX5150/1 High Speed Digital I/O (50/100MHz) PXI Board
+
+pci:v000016E2d00005152*
+ ID_MODEL_FROM_DATABASE=GX5152/3 DSR High Speed Digital Stimulus/Response PXI Board
+
+pci:v000016E2d00005250*
+ ID_MODEL_FROM_DATABASE=GX5250 Digital I/O Streaming PXI Board
+
+pci:v000016E2d00005280*
+ ID_MODEL_FROM_DATABASE=GX5280 High-Speed Digital I/O PXI Board
+
+pci:v000016E2d00005290*
+ ID_MODEL_FROM_DATABASE=GX5290 High-Speed Dynamic Digital I/O PXI Board
+
+pci:v000016E2d00005294*
+ ID_MODEL_FROM_DATABASE=GX5294 High-Speed Digital I/O PXI Board
+
+pci:v000016E2d00005295*
+ ID_MODEL_FROM_DATABASE=GX5295 Digital I/O with Pin Electronics and PMU PXI Board
+
+pci:v000016E2d00005296*
+ ID_MODEL_FROM_DATABASE=GX5296 Digital I/O with Pin Electronics and PMU PXI Board
+
+pci:v000016E2d00005550*
+ ID_MODEL_FROM_DATABASE=GX5050 Dynamic Digital I/O with Algorithmic Sequencer PXI Board
+
+pci:v000016E2d00005641*
+ ID_MODEL_FROM_DATABASE=GX5641/2 Bi-directional Differential-TTL I/O PXI Board
+
+pci:v000016E2d00005731*
+ ID_MODEL_FROM_DATABASE=GX5731 Digital I/O with 128 TTL Channels and 3x32 Customizable Channels PXI Board
+
+pci:v000016E2d00005732*
+ ID_MODEL_FROM_DATABASE=GX5732 224-Channel Static Digital I/O PXI Board
+
+pci:v000016E2d00005733*
+ ID_MODEL_FROM_DATABASE=GX5733 Digital I/O with 96 TTL Channels and 32 Customizable Channels PXI Board
+
+pci:v000016E2d00005960*
+ ID_MODEL_FROM_DATABASE=GX5961/4 Digital I/O Timing/Sync with Pin Electronics and PMU PXI Board
+
+pci:v000016E2d00006021*
+ ID_MODEL_FROM_DATABASE=GX6021 20-Channel RF Multiplexer PXI Board
+
+pci:v000016E2d00006062*
+ ID_MODEL_FROM_DATABASE=GX6062 60-Channel RF Multiplexer PXI Board
+
+pci:v000016E2d00006115*
+ ID_MODEL_FROM_DATABASE=GX6115 15-Channel High Current SPDT Form-C Relay PXI Board
+
+pci:v000016E2d00006125*
+ ID_MODEL_FROM_DATABASE=GX6125 25-Channel High-Density SPDT Form-C Relay PXI Board
+
+pci:v000016E2d00006138*
+ ID_MODEL_FROM_DATABASE=GX6138 38-Channel SPST Form-A Relay PXI Board
+
+pci:v000016E2d00006188*
+ ID_MODEL_FROM_DATABASE=GX6188 104-Channel 8x8 Multiplexer/Matrix PXI Board
+
+pci:v000016E2d00006192*
+ ID_MODEL_FROM_DATABASE=GX6192 16, 16x2 High Frequency, High Density Multiplexer PXI Board
+
+pci:v000016E2d00006196*
+ ID_MODEL_FROM_DATABASE=GX6196 96-Channel DPST Form-A Relay Carrier PXI Board
+
+pci:v000016E2d00006256*
+ ID_MODEL_FROM_DATABASE=GX6256 16, 16x2 Low Frequency, High Density Multiplexer PXI Board
+
+pci:v000016E2d00006264*
+ ID_MODEL_FROM_DATABASE=GX6264 128-Channel Scanner/Multiplexer Board
+
+pci:v000016E2d00006315*
+ ID_MODEL_FROM_DATABASE=GX6315 45-Channel High Current SPDT Form-C Relay Board
+
+pci:v000016E2d00006325*
+ ID_MODEL_FROM_DATABASE=GX6325 75-Channel High-Density SPDT Form-C Relay Board
+
+pci:v000016E2d00006338*
+ ID_MODEL_FROM_DATABASE=GX6338 114-Channel SPST Form-A Relay PXI Board
+
+pci:v000016E2d00006377*
+ ID_MODEL_FROM_DATABASE=GX6377 Multifunction Switching PXI Board
+
+pci:v000016E2d00006384*
+ ID_MODEL_FROM_DATABASE=GX6384 Configurable High-Density Switch Matrix PXI Board
+
+pci:v000016E2d00006616*
+ ID_MODEL_FROM_DATABASE=GX6616 6x2:16 Switch Matrix PXI Board
+
+pci:v000016E2d00006864*
+ ID_MODEL_FROM_DATABASE=GX6864 Video Switching PXI Board
+
+pci:v000016E2d00007400*
+ ID_MODEL_FROM_DATABASE=GX7400 Dual-Output Programmable Power Supply PXI Board
+
+pci:v000016E2d00007404*
+ ID_MODEL_FROM_DATABASE=GX7404 Prototyping and Power Interface PXI Board
+
+pci:v000016E2d00007777*
+ ID_MODEL_FROM_DATABASE=GX7777 Generic Interface PXI Board
+
+pci:v000016E2d00007779*
+ ID_MODEL_FROM_DATABASE=GX7779 Backplane Tester PXI Board
 
 pci:v000016E3*
  ID_VENDOR_FROM_DATABASE=European Space Agency
@@ -65147,6 +66371,9 @@
 pci:v000017AA*
  ID_VENDOR_FROM_DATABASE=Lenovo
 
+pci:v000017AAd00000005*
+ ID_MODEL_FROM_DATABASE=LENSE30256GMSP34MEAT3TA
+
 pci:v000017AAd00003181*
  ID_MODEL_FROM_DATABASE=ThinkCentre M75n IoT
 
@@ -65189,8 +66416,11 @@
 pci:v000017C2*
  ID_VENDOR_FROM_DATABASE=Newisys, Inc.
 
+pci:v000017C3*
+ ID_VENDOR_FROM_DATABASE=Protogate, Inc.
+
 pci:v000017CB*
- ID_VENDOR_FROM_DATABASE=Qualcomm
+ ID_VENDOR_FROM_DATABASE=Qualcomm Technologies, Inc
 
 pci:v000017CBd00000001*
  ID_MODEL_FROM_DATABASE=AGN100 802.11 a/b/g True MIMO Wireless Card
@@ -65375,6 +66605,18 @@
 pci:v000017D3d0000188A*
  ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller
 
+pci:v000017D3d0000188Asv000017D3sd00001217*
+ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1217 4-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller)
+
+pci:v000017D3d0000188Asv000017D3sd00001227*
+ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1227 8-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller)
+
+pci:v000017D3d0000188Asv000017D3sd00001686*
+ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1686 PCIe 4.0 to SAS/SATA 12/6Gb Tape drive Controller)
+
+pci:v000017D3d0000188Asv000017D3sd00001886*
+ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1886 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller)
+
 pci:v000017D5*
  ID_VENDOR_FROM_DATABASE=Exar Corp.
 
@@ -66629,6 +67871,9 @@
 pci:v000018F4d000001E5*
  ID_MODEL_FROM_DATABASE=NT100A01 Network Adapter
 
+pci:v000018F4d00000225*
+ ID_MODEL_FROM_DATABASE=NT40A11 Network Adapter
+
 pci:v000018F6*
  ID_VENDOR_FROM_DATABASE=NextIO
 
@@ -67212,7 +68457,7 @@
  ID_VENDOR_FROM_DATABASE=MAXIM Integrated Products
 
 pci:v0000193D*
- ID_VENDOR_FROM_DATABASE=Hangzhou H3C Technologies Co., Ltd.
+ ID_VENDOR_FROM_DATABASE=New H3C Technologies Co., Ltd.
 
 pci:v0000193F*
  ID_VENDOR_FROM_DATABASE=AHA Products Group
@@ -68186,6 +69431,18 @@
 pci:v000019E5d00000212sv000019E5sd0000D306*
  ID_MODEL_FROM_DATABASE=Hi1822 Family (2*8G FC) (Hi1822 SP523 (2*8G FC))
 
+pci:v000019E5d00000222*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family
+
+pci:v000019E5d00000222sv000019E5sd00000051*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (Hi1822 SP681 (2*25/10GE))
+
+pci:v000019E5d00000222sv000019E5sd00000052*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (Hi1822 SP680 (4*25/10GE))
+
+pci:v000019E5d00000222sv000019E5sd000000A1*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (Hi1822 SP670 (2*100GE))
+
 pci:v000019E5d00001710*
  ID_MODEL_FROM_DATABASE=iBMA Virtual Network Adapter
 
@@ -68249,9 +69506,15 @@
 pci:v000019E5d0000375E*
  ID_MODEL_FROM_DATABASE=Hi1822 Family Virtual Function
 
+pci:v000019E5d0000375F*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family Virtual Function
+
 pci:v000019E5d0000379E*
  ID_MODEL_FROM_DATABASE=Hi1822 Family Virtual Function
 
+pci:v000019E5d0000379F*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family Virtual Function
+
 pci:v000019E5d0000A120*
  ID_MODEL_FROM_DATABASE=HiSilicon PCIe Root Port with Gen4
 
@@ -68732,9 +69995,21 @@
 pci:v00001AA9d00000014*
  ID_MODEL_FROM_DATABASE=SEL-3390T Time and Ethernet Adapter
 
+pci:v00001AA9d00000015*
+ ID_MODEL_FROM_DATABASE=SEL-3350 Mainboard
+
+pci:v00001AA9d00000016*
+ ID_MODEL_FROM_DATABASE=SEL-3350 Serial Expansion Board
+
+pci:v00001AA9d00000017*
+ ID_MODEL_FROM_DATABASE=SEL-3350 GPIO Expansion Board
+
 pci:v00001AA9d00000018*
  ID_MODEL_FROM_DATABASE=SEL-3390E4 Ethernet Adapter
 
+pci:v00001AA9d0000001C*
+ ID_MODEL_FROM_DATABASE=SEL-3390E4 Ethernet Adapter
+
 pci:v00001AAE*
  ID_VENDOR_FROM_DATABASE=Global Velocity, Inc.
 
@@ -68801,6 +70076,9 @@
 pci:v00001AE0*
  ID_VENDOR_FROM_DATABASE=Google, Inc.
 
+pci:v00001AE0d0000001F*
+ ID_MODEL_FROM_DATABASE=NVMe device
+
 pci:v00001AE0d00000042*
  ID_MODEL_FROM_DATABASE=Compute Engine Virtual Ethernet [gVNIC]
 
@@ -69005,9 +70283,15 @@
 pci:v00001AF4d00001000*
  ID_MODEL_FROM_DATABASE=Virtio network device
 
+pci:v00001AF4d00001000sv000001DEsd0000FFFB*
+ ID_MODEL_FROM_DATABASE=Virtio network device (Propolis Virtio network device)
+
 pci:v00001AF4d00001001*
  ID_MODEL_FROM_DATABASE=Virtio block device
 
+pci:v00001AF4d00001001sv000001DEsd0000FFFA*
+ ID_MODEL_FROM_DATABASE=Virtio block device (Propolis Virtio block device)
+
 pci:v00001AF4d00001002*
  ID_MODEL_FROM_DATABASE=Virtio memory balloon
 
@@ -69068,6 +70352,9 @@
 pci:v00001AFA*
  ID_VENDOR_FROM_DATABASE=J & W Electronics Co., Ltd.
 
+pci:v00001B00*
+ ID_VENDOR_FROM_DATABASE=Montage Technology Co., Ltd.
+
 pci:v00001B03*
  ID_VENDOR_FROM_DATABASE=Magnum Semiconductor, Inc,
 
@@ -69107,6 +70394,9 @@
 pci:v00001B21d00000612sv00001849sd00000612*
  ID_MODEL_FROM_DATABASE=ASM1062 Serial ATA Controller (Motherboard)
 
+pci:v00001B21d00000625*
+ ID_MODEL_FROM_DATABASE=106x SATA/RAID Controller
+
 pci:v00001B21d00001040*
  ID_MODEL_FROM_DATABASE=ASM1040 XHCI Controller
 
@@ -69159,10 +70449,10 @@
  ID_MODEL_FROM_DATABASE=ASM1812 6-Port PCIe x4 Gen2 Packet Switch
 
 pci:v00001B21d00002142*
- ID_MODEL_FROM_DATABASE=ASM2142 USB 3.1 Host Controller
+ ID_MODEL_FROM_DATABASE=ASM2142/ASM3142 USB 3.1 Host Controller
 
 pci:v00001B21d00002142sv00001462sd00007A72*
- ID_MODEL_FROM_DATABASE=ASM2142 USB 3.1 Host Controller (H270 PC MATE)
+ ID_MODEL_FROM_DATABASE=ASM2142/ASM3142 USB 3.1 Host Controller (H270 PC MATE)
 
 pci:v00001B21d00002824*
  ID_MODEL_FROM_DATABASE=ASM2824 PCIe Gen3 Packet Switch
@@ -69380,6 +70670,9 @@
 pci:v00001B4Bd00002241sv00001028sd00002196*
  ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ROR-N100)
 
+pci:v00001B4Bd00002241sv00001B4Bsd00002241*
+ ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (Santa Cruz NVMe Host Adapter)
+
 pci:v00001B4Bd00002241sv00001D49sd00000306*
  ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit)
 
@@ -69455,6 +70748,12 @@
 pci:v00001B4Bd00009230sv00001028sd00002010*
  ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (BOSS-S2 Adapter)
 
+pci:v00001B4Bd00009230sv00001028sd00002260*
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (BOSS-S1 Modular)
+
+pci:v00001B4Bd00009230sv00001028sd00002261*
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (BOSS-S2 Adapter)
+
 pci:v00001B4Bd00009230sv00001BD4sd00000073*
  ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (RS0200L6R2iM2)
 
@@ -69923,6 +71222,12 @@
 pci:v00001BD0d0000100A*
  ID_MODEL_FROM_DATABASE=NG1 Series Avionics Converter
 
+pci:v00001BD0d0000100B*
+ ID_MODEL_FROM_DATABASE=LE5 429 Databus Interface Card
+
+pci:v00001BD0d0000100C*
+ ID_MODEL_FROM_DATABASE=LE5 1553 Databus Interface Card
+
 pci:v00001BD0d00001101*
  ID_MODEL_FROM_DATABASE=OmniBus II PCIe Multi-Protocol Interface Card
 
@@ -70043,6 +71348,9 @@
 pci:v00001C1Fd0000001F*
  ID_MODEL_FROM_DATABASE=FD940
 
+pci:v00001C1Fd00000020*
+ ID_MODEL_FROM_DATABASE=FD2110
+
 pci:v00001C28*
  ID_VENDOR_FROM_DATABASE=Lite-On IT Corp. / Plextor
 
@@ -70106,6 +71414,12 @@
 pci:v00001C2Cd00001001*
  ID_MODEL_FROM_DATABASE=SmartNIC N5011 w/2xE810 4x100Gb
 
+pci:v00001C2Cd00001002*
+ ID_MODEL_FROM_DATABASE=SmartNIC N5013 4x100Gb
+
+pci:v00001C2Cd00001003*
+ ID_MODEL_FROM_DATABASE=SmartNIC N5014 w/2xE810 4x100Gb
+
 pci:v00001C2Cd0000A000*
  ID_MODEL_FROM_DATABASE=FBC2CGG3 Capture 2x40Gb [Mango_02]
 
@@ -70221,13 +71535,19 @@
  ID_MODEL_FROM_DATABASE=BC511
 
 pci:v00001C5Cd00001504*
- ID_MODEL_FROM_DATABASE=SC300 512GB M.2 2280 SATA Solid State Drive
+ ID_MODEL_FROM_DATABASE=PC400 NVMe SSD
 
 pci:v00001C5Cd00001527*
  ID_MODEL_FROM_DATABASE=PC401 NVMe Solid State Drive 256GB
 
 pci:v00001C5Cd0000174A*
- ID_MODEL_FROM_DATABASE=Gold P31 SSD
+ ID_MODEL_FROM_DATABASE=Gold P31/PC711 NVMe Solid State Drive
+
+pci:v00001C5Cd00001959*
+ ID_MODEL_FROM_DATABASE=Platinum P41 NVMe Solid State Drive 2TB
+
+pci:v00001C5Cd00002204*
+ ID_MODEL_FROM_DATABASE=960GB TLC PCIe Gen3 x4 NVMe M.2 22110
 
 pci:v00001C5Cd0000243B*
  ID_MODEL_FROM_DATABASE=PE6110 NVMe Solid State Drive
@@ -70268,12 +71588,39 @@
 pci:v00001C5Cd00002849*
  ID_MODEL_FROM_DATABASE=PE81x0 U.2/3 NVMe Solid State Drive
 
+pci:v00001C5Cd00002849sv00001C5Csd00000101*
+ ID_MODEL_FROM_DATABASE=PE81x0 U.2/3 NVMe Solid State Drive
+
 pci:v00001C5F*
  ID_VENDOR_FROM_DATABASE=Beijing Memblaze Technology Co. Ltd.
 
 pci:v00001C5Fd0000000D*
  ID_MODEL_FROM_DATABASE=PBlaze5 520/526
 
+pci:v00001C5Fd0000000Dsv00001C5Fsd00000220*
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526 (NVMe SSD PBlaze5 520 1920G AIC)
+
+pci:v00001C5Fd0000000Dsv00001C5Fsd00000221*
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526 (NVMe SSD PBlaze5 520 1920G 2.5" U.2)
+
+pci:v00001C5Fd0000000Dsv00001C5Fsd00000230*
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526 (NVMe SSD PBlaze5 520 3840G AIC)
+
+pci:v00001C5Fd0000000Dsv00001C5Fsd00000231*
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526 (NVMe SSD PBlaze5 520 3840G 2.5" U.2)
+
+pci:v00001C5Fd0000000Dsv00001C5Fsd00004220*
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526 (NVMe SSD PBlaze5 526 1600G AIC)
+
+pci:v00001C5Fd0000000Dsv00001C5Fsd00004221*
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526 (NVMe SSD PBlaze5 526 1600G 2.5" U.2)
+
+pci:v00001C5Fd0000000Dsv00001C5Fsd00004230*
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526 (NVMe SSD PBlaze5 526 3200G AIC)
+
+pci:v00001C5Fd0000000Dsv00001C5Fsd00004231*
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526 (NVMe SSD PBlaze5 526 3200G 2.5" U.2)
+
 pci:v00001C5Fd0000000E*
  ID_MODEL_FROM_DATABASE=PBlaze6 6530
 
@@ -70283,53 +71630,155 @@
 pci:v00001C5Fd0000000Esv00001C5Fsd00000B21*
  ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1920G 2.5" U.2)
 
+pci:v00001C5Fd0000000Esv00001C5Fsd00000B25*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1920G E1.S)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00000B27*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6630 1920G 2.5" U.2)
+
 pci:v00001C5Fd0000000Esv00001C5Fsd00000B30*
  ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3840G AIC)
 
 pci:v00001C5Fd0000000Esv00001C5Fsd00000B31*
  ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3840G 2.5" U.2)
 
+pci:v00001C5Fd0000000Esv00001C5Fsd00000B35*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3840G E1.S)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00000B37*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6630 3840G 2.5" U.2)
+
 pci:v00001C5Fd0000000Esv00001C5Fsd00000B40*
  ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 7680G AIC)
 
 pci:v00001C5Fd0000000Esv00001C5Fsd00000B41*
  ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 7680G 2.5" U.2)
 
+pci:v00001C5Fd0000000Esv00001C5Fsd00000B47*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6630 7680G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00001331*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6531 3840G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00001341*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6531 7680G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00001431*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6541 3840G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00001441*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6541 7680G 2.5" U.2)
+
 pci:v00001C5Fd0000000Esv00001C5Fsd00004B20*
- ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1600G AIC)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6536 1600G AIC)
 
 pci:v00001C5Fd0000000Esv00001C5Fsd00004B21*
- ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1600G 2.5" U.2)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6536 1600G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00004B25*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6536 1600G E1.S)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00004B27*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6636 1600G 2.5" U.2)
 
 pci:v00001C5Fd0000000Esv00001C5Fsd00004B30*
- ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3200G AIC)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6536 3200G AIC)
 
 pci:v00001C5Fd0000000Esv00001C5Fsd00004B31*
- ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3200G 2.5" U.2)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6536 3200G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00004B35*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6536 3200G E1.S)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00004B37*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6636 3200G 2.5" U.2)
 
 pci:v00001C5Fd0000000Esv00001C5Fsd00004B40*
- ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 6400G AIC)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6536 6400G AIC)
 
 pci:v00001C5Fd0000000Esv00001C5Fsd00004B41*
- ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 6400G 2.5" U.2)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6536 6400G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00004B47*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6636 6400G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00005331*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6537 3200G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00005341*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6537 6400G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00005431*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6547 3200G 2.5" U.2)
+
+pci:v00001C5Fd0000000Esv00001C5Fsd00005441*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6547 6400G 2.5" U.2)
 
 pci:v00001C5Fd0000003D*
  ID_MODEL_FROM_DATABASE=PBlaze5 920/926
 
+pci:v00001C5Fd0000003Dsv00001C5Fsd00000A30*
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926 (NVMe SSD PBlaze5 920 3840G AIC)
+
+pci:v00001C5Fd0000003Dsv00001C5Fsd00000A31*
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926 (NVMe SSD PBlaze5 920 3840G 2.5" U.2)
+
+pci:v00001C5Fd0000003Dsv00001C5Fsd00000A40*
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926 (NVMe SSD PBlaze5 920 7680G AIC)
+
+pci:v00001C5Fd0000003Dsv00001C5Fsd00000A41*
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926 (NVMe SSD PBlaze5 920 7680G 2.5" U.2)
+
+pci:v00001C5Fd0000003Dsv00001C5Fsd00004A30*
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926 (NVMe SSD PBlaze5 926 3200G AIC)
+
+pci:v00001C5Fd0000003Dsv00001C5Fsd00004A31*
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926 (NVMe SSD PBlaze5 926 3200G 2.5" U.2)
+
+pci:v00001C5Fd0000003Dsv00001C5Fsd00004A40*
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926 (NVMe SSD PBlaze5 926 6400G AIC)
+
+pci:v00001C5Fd0000003Dsv00001C5Fsd00004A41*
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926 (NVMe SSD PBlaze5 926 6400G 2.5" U.2)
+
 pci:v00001C5Fd0000003E*
- ID_MODEL_FROM_DATABASE=PBlaze6 6920
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930
 
 pci:v00001C5Fd0000003Esv00001C5Fsd00000A31*
- ID_MODEL_FROM_DATABASE=PBlaze6 6920 (NVMe SSD PBlaze6 6920 3840GB 2.5" U.2)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6920 3840GB 2.5" U.2)
 
 pci:v00001C5Fd0000003Esv00001C5Fsd00000A41*
- ID_MODEL_FROM_DATABASE=PBlaze6 6920 (NVMe SSD PBlaze6 6920 7680GB 2.5" U.2)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6920 7680GB 2.5" U.2)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00000B31*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6930 3840GB 2.5" U.3)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00000B41*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6930 7680GB 2.5" U.3)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00000B51*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6930 15360GB 2.5" U.3)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00000B61*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6930 30720GB 2.5" U.3)
 
 pci:v00001C5Fd0000003Esv00001C5Fsd00004A31*
- ID_MODEL_FROM_DATABASE=PBlaze6 6920 (NVMe SSD PBlaze6 6920 3200GB 2.5" U.2)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6920 3200GB 2.5" U.2)
 
 pci:v00001C5Fd0000003Esv00001C5Fsd00004A41*
- ID_MODEL_FROM_DATABASE=PBlaze6 6920 (NVMe SSD PBlaze6 6920 6400GB 2.5" U.2)
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6920 6400GB 2.5" U.2)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00004B41*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6936 6400GB 2.5" U.3)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00004B51*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6936 12800GB 2.5" U.3)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00004B61*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920/6930 (NVMe SSD PBlaze6 6936 25600GB 2.5" U.3)
+
+pci:v00001C5Fd0000003F*
+ ID_MODEL_FROM_DATABASE=PBlaze7 7940/7946
 
 pci:v00001C5Fd00000540*
  ID_MODEL_FROM_DATABASE=PBlaze4 NVMe SSD
@@ -70436,6 +71885,12 @@
 pci:v00001CC1*
  ID_VENDOR_FROM_DATABASE=ADATA Technology Co., Ltd.
 
+pci:v00001CC1d000033F8*
+ ID_MODEL_FROM_DATABASE=IM2P33F8ABR1 NVMe SSD
+
+pci:v00001CC1d00005350*
+ ID_MODEL_FROM_DATABASE=XPG GAMMIX S50 NVMe SSD
+
 pci:v00001CC1d00005766*
  ID_MODEL_FROM_DATABASE=ADATA XPG GAMMIXS1 1L Media
 
@@ -70443,7 +71898,7 @@
  ID_MODEL_FROM_DATABASE=XPG SX8200 Pro PCIe Gen3x4 M.2 2280 Solid State Drive
 
 pci:v00001CC4*
- ID_VENDOR_FROM_DATABASE=Union Memory (Shenzhen)
+ ID_VENDOR_FROM_DATABASE=Shenzhen Unionmemory Information System Ltd.
 
 pci:v00001CC4d00001203*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series
@@ -70475,6 +71930,15 @@
 pci:v00001CC4d00001203sv00001CC4sd0000A214*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 6400GB)
 
+pci:v00001CC4d00001203sv00001CC4sd0000E122*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UH711a series U.2 1920GB)
+
+pci:v00001CC4d00001203sv00001CC4sd0000E123*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UH711a series U.2 3840GB)
+
+pci:v00001CC4d00001203sv00001CC4sd0000E124*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UH711a series U.2 7680GB)
+
 pci:v00001CC4d000017AB*
  ID_MODEL_FROM_DATABASE=NVMe 256G SSD device
 
@@ -70485,7 +71949,10 @@
  ID_VENDOR_FROM_DATABASE=Embedded Intelligence, Inc.
 
 pci:v00001CC5d00000100*
- ID_MODEL_FROM_DATABASE=CAN-PCIe-02
+ ID_MODEL_FROM_DATABASE=PCIe-CAN-02 Dual CAN bus (9-pin male). PCI Express x1.
+
+pci:v00001CC5d00000101*
+ ID_MODEL_FROM_DATABASE=PCIe-CAN-01 Single CAN bus (9-pin male). PCI Express x1.
 
 pci:v00001CC7*
  ID_VENDOR_FROM_DATABASE=Radian Memory Systems Inc.
@@ -70613,6 +72080,18 @@
 pci:v00001D0F*
  ID_VENDOR_FROM_DATABASE=Amazon.com, Inc.
 
+pci:v00001D0Fd00007064*
+ ID_MODEL_FROM_DATABASE=NeuronDevice (Inferentia)
+
+pci:v00001D0Fd00007164*
+ ID_MODEL_FROM_DATABASE=NeuronDevice (Trainium)
+
+pci:v00001D0Fd00007164sv00001D0Fsd00000000*
+ ID_MODEL_FROM_DATABASE=NeuronDevice (Trainium) (Trainium)
+
+pci:v00001D0Fd00007264*
+ ID_MODEL_FROM_DATABASE=NeuronDevice (Inferentia2)
+
 pci:v00001D0Fd00008061*
  ID_MODEL_FROM_DATABASE=NVMe EBS Controller
 
@@ -70628,6 +72107,9 @@
 pci:v00001D0Fd0000EFA1*
  ID_MODEL_FROM_DATABASE=Elastic Fabric Adapter (EFA)
 
+pci:v00001D0Fd0000EFA2*
+ ID_MODEL_FROM_DATABASE=Elastic Fabric Adapter (EFA)
+
 pci:v00001D17*
  ID_VENDOR_FROM_DATABASE=Zhaoxin
 
@@ -70656,28 +72138,28 @@
  ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
 
 pci:v00001D17d00000717*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
+ ID_MODEL_FROM_DATABASE=KX-5000/KX-6000/KX-6000G Express Root Port
 
 pci:v00001D17d00000718*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
+ ID_MODEL_FROM_DATABASE=KX-5000/KX-6000/KX-6000G Express Root Port
 
 pci:v00001D17d00000719*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
+ ID_MODEL_FROM_DATABASE=KX-5000/KX-6000/KX-6000G Express Root Port
 
 pci:v00001D17d0000071A*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
+ ID_MODEL_FROM_DATABASE=KX-5000/KX-6000/KX-6000G Express Root Port
 
 pci:v00001D17d0000071B*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
+ ID_MODEL_FROM_DATABASE=KX-5000/KX-6000/KX-6000G Express Root Port
 
 pci:v00001D17d0000071C*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
+ ID_MODEL_FROM_DATABASE=KX-5000/KX-6000/KX-6000G Express Root Port
 
 pci:v00001D17d0000071D*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
+ ID_MODEL_FROM_DATABASE=KX-5000/KX-6000/KX-6000G Express Root Port
 
 pci:v00001D17d0000071E*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
+ ID_MODEL_FROM_DATABASE=KX-5000/KX-6000/KX-6000G Express Root Port
 
 pci:v00001D17d0000071F*
  ID_MODEL_FROM_DATABASE=ZX-200 Upstream Port of PCI Express Switch
@@ -70700,6 +72182,9 @@
 pci:v00001D17d00001003*
  ID_MODEL_FROM_DATABASE=ZX-E Standard Host Bridge
 
+pci:v00001D17d00001006*
+ ID_MODEL_FROM_DATABASE=KX-6000G Standard Host Bridge
+
 pci:v00001D17d00003001*
  ID_MODEL_FROM_DATABASE=ZX-100 Standard Host Bridge
 
@@ -70707,40 +72192,40 @@
  ID_MODEL_FROM_DATABASE=ZX-100 Miscellaneous Bus
 
 pci:v00001D17d00003038*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/ZX-E Standard Universal PCI to USB Host Controller
+ ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/KX-6000/KX-6000G Standard Universal PCI to USB Host Controller
 
 pci:v00001D17d00003104*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/ZX-E Standard Enhanced PCI to USB Host Controller
+ ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/KX-6000/KX-6000G Standard Enhanced PCI to USB Host Controller
 
 pci:v00001D17d000031B0*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D Standard Host Bridge
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G Standard Host Bridge
 
 pci:v00001D17d000031B1*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D Standard Host Bridge
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G Standard Host Bridge
 
 pci:v00001D17d000031B2*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D DRAM Controller
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G DRAM Controller
 
 pci:v00001D17d000031B3*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D Power Management Controller
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G Power Management Controller
 
 pci:v00001D17d000031B4*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D I/O APIC
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G I/O APIC
 
 pci:v00001D17d000031B5*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D Scratch Device
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G Scratch Device
 
 pci:v00001D17d000031B7*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E Standard Host Bridge
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G Standard Host Bridge
 
 pci:v00001D17d000031B8*
  ID_MODEL_FROM_DATABASE=ZX-100/ZX-D PCI to PCI Bridge
 
 pci:v00001D17d00003288*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E High Definition Audio Controller
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G High Definition Audio Controller
 
 pci:v00001D17d0000345B*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E Miscellaneous Bus
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G Miscellaneous Bus
 
 pci:v00001D17d00003A02*
  ID_MODEL_FROM_DATABASE=ZX-100 C-320 GPU
@@ -70751,11 +72236,20 @@
 pci:v00001D17d00003A04*
  ID_MODEL_FROM_DATABASE=ZX-E C-960 GPU
 
+pci:v00001D17d00003C02*
+ ID_MODEL_FROM_DATABASE=KX-6000G DRAM Controller
+
+pci:v00001D17d00003D01*
+ ID_MODEL_FROM_DATABASE=KX-6000G C-1080 GPU
+
 pci:v00001D17d00009002*
  ID_MODEL_FROM_DATABASE=ZX-100/ZX-200 EIDE Controller
 
 pci:v00001D17d00009003*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-E EIDE Controller
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-6000/KX-6000G EIDE Controller
+
+pci:v00001D17d00009043*
+ ID_MODEL_FROM_DATABASE=KX-6000G RAID Controller
 
 pci:v00001D17d00009045*
  ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E RAID Accelerator 0
@@ -70764,7 +72258,7 @@
  ID_MODEL_FROM_DATABASE=ZX-D/ZX-E RAID Accelerator 1
 
 pci:v00001D17d00009083*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/ZX-E StorX AHCI Controller
+ ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/KX-6000/KX-6000G StorX AHCI Controller
 
 pci:v00001D17d00009084*
  ID_MODEL_FROM_DATABASE=ZX-100 StorX AHCI Controller
@@ -70784,6 +72278,9 @@
 pci:v00001D17d00009144*
  ID_MODEL_FROM_DATABASE=ZX-E High Definition Audio Controller
 
+pci:v00001D17d00009145*
+ ID_MODEL_FROM_DATABASE=KX-6000G High Definition Audio Controller
+
 pci:v00001D17d00009180*
  ID_MODEL_FROM_DATABASE=ZX-200 Networking Gigabit Ethernet Adapter
 
@@ -70794,19 +72291,19 @@
  ID_MODEL_FROM_DATABASE=ZX-200 USB eXtensible Host Controller
 
 pci:v00001D17d00009204*
- ID_MODEL_FROM_DATABASE=ZX-E USB eXtensible Host Controller
+ ID_MODEL_FROM_DATABASE=KX-6000/KX-6000G USB eXtensible Host Controller
 
 pci:v00001D17d00009286*
  ID_MODEL_FROM_DATABASE=ZX-D eMMC Host Controller
 
 pci:v00001D17d00009300*
- ID_MODEL_FROM_DATABASE=ZX-D/ZX-E eSPI Host Controller
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G eSPI Host Controller
 
 pci:v00001D17d000095D0*
  ID_MODEL_FROM_DATABASE=ZX-100 Universal SD Host Controller
 
 pci:v00001D17d0000F410*
- ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E PCI Com Port
+ ID_MODEL_FROM_DATABASE=ZX-100/KX-5000/KX-6000/KX-6000G PCI Com Port
 
 pci:v00001D18*
  ID_VENDOR_FROM_DATABASE=RME
@@ -71072,6 +72569,18 @@
 pci:v00001D6Cd0000101F*
  ID_MODEL_FROM_DATABASE=AR-TK242 [2x100GbE Packet Capture Device]
 
+pci:v00001D6Cd00001020*
+ ID_MODEL_FROM_DATABASE=AR-GP-PF [General-Purpose Physical Function]
+
+pci:v00001D6Cd00001021*
+ ID_MODEL_FROM_DATABASE=AR-MGMT-PF [Board-Generic Management Physical Function]
+
+pci:v00001D6Cd00001022*
+ ID_MODEL_FROM_DATABASE=AR-ARKA-FX2 [Arkville 128B DPDK Data Mover for Agilex]
+
+pci:v00001D6Cd00001023*
+ ID_MODEL_FROM_DATABASE=AR-BD-FX1 [BufferDirect Zero-Bounce Data Motion Endpoint]
+
 pci:v00001D6Cd00004200*
  ID_MODEL_FROM_DATABASE=A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
 
@@ -71120,6 +72629,153 @@
 pci:v00001D78d00001512sv00001D78sd00003107*
  ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5457 U.2 6.4TB NVMe SSD)
 
+pci:v00001D78d00001512sv00001D78sd00003108*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5437 U.2 7.68TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005003*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5447 HHHL 1.6TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005004*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5427 HHHL 1.92TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005005*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5447 HHHL 3.2TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005006*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5427 HHHL 3.84TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005007*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5447 HHHL 6.4TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005008*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5427 HHHL 7.68TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005103*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5447 U.2 1.6TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005105*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5447 U.2 3.2TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005106*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (AF3UP34DTCUN3T8B SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005107*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5447 U.2 6.4TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005114*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5427 U.2 1.92TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005116*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5427 U.2 3.84TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00005118*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5427 U.2 7.68TB NVMe SSD)
+
+pci:v00001D78d00001512sv00001D78sd00008107*
+ ID_MODEL_FROM_DATABASE=TAI NVMe Controller (D5457 U.2 6.4TB NVMe SSD)
+
+pci:v00001D78d00001513*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller
+
+pci:v00001D78d00001513sv00001D78sd00006015*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6456 HHHL 3.2TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006016*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6436 HHHL 3.84TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006017*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6456 HHHL 6.4TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006018*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6436 HHHL 7.68TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006105*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6457 U.2 3.2TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006106*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6437 U.2 3.84TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006107*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6457 U.2 6.4TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006108*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6437 U.2 7.68TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006115*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6456 U.2 3.2TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006116*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6436 U.2 3.84TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006117*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6456 U.2 6.4TB NVMe SSD)
+
+pci:v00001D78d00001513sv00001D78sd00006118*
+ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (D6436 U.2 7.68TB NVMe SSD)
+
+pci:v00001D78d00001515*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller
+
+pci:v00001D78d00001515sv00001D78sd00007002*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7436 HHHL 1.92TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007003*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7456 HHHL 1.6TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007004*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7436 HHHL 3.84TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007005*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7456 HHHL 3.2TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007007*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7456 HHHL 6.4TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007008*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7436 HHHL 7.68TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007009*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7456 HHHL 12.8TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd0000700A*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7436 HHHL 15.36TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007102*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7436 U.2 15mm 1.92TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007103*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7456 U.2 15mm 1.6TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007104*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7436 U.2 15mm 3.84TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007105*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7456 U.2 15mm 3.2TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007107*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7456 U.2 15mm 6.4TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007108*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7436 U.2 15mm 7.68TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007109*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7456 U.2 15mm 12.8TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd0000710A*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (D7436 U.2 15mm 15.36TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007202*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (Aliflash V2 U.2 15mm 1.92TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007204*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (Aliflash V2 U.2 15mm 3.84TB NVMe SSD)
+
+pci:v00001D78d00001515sv00001D78sd00007208*
+ ID_MODEL_FROM_DATABASE=DERA EMEI NVMe Controller (Aliflash V2 U.2 15mm 7.68TB NVMe SSD)
+
+pci:v00001D79*
+ ID_VENDOR_FROM_DATABASE=Transcend Information, Inc.
+
 pci:v00001D7C*
  ID_VENDOR_FROM_DATABASE=Aerotech, Inc.
 
@@ -71138,6 +72794,9 @@
 pci:v00001D82d00000202*
  ID_MODEL_FROM_DATABASE=Codensity T408 Video Encoding-Decoding Accelerator
 
+pci:v00001D82d00000401*
+ ID_MODEL_FROM_DATABASE=Quadra Video Processing Unit (VPU)
+
 pci:v00001D87*
  ID_VENDOR_FROM_DATABASE=Rockchip Electronics Co., Ltd
 
@@ -71147,9 +72806,15 @@
 pci:v00001D87d00001808*
  ID_MODEL_FROM_DATABASE=RK1808 Neural Network Processor Card
 
+pci:v00001D87d00003528*
+ ID_MODEL_FROM_DATABASE=RK3528 PCI Express Root Port
+
 pci:v00001D87d00003566*
  ID_MODEL_FROM_DATABASE=RK3568 Remote Signal Processor
 
+pci:v00001D87d00003588*
+ ID_MODEL_FROM_DATABASE=RK3588
+
 pci:v00001D89*
  ID_VENDOR_FROM_DATABASE=YEESTOR Microelectronics Co., Ltd
 
@@ -71271,7 +72936,7 @@
  ID_MODEL_FROM_DATABASE=SM2263EN/SM2263XT-based OEM SSD
 
 pci:v00001D9B*
- ID_VENDOR_FROM_DATABASE=Facebook, Inc.
+ ID_VENDOR_FROM_DATABASE=Meta Platforms, Inc.
 
 pci:v00001D9Bd00000010*
  ID_MODEL_FROM_DATABASE=Networking DOM Engine
@@ -71288,18 +72953,30 @@
 pci:v00001DA2d0000E26A*
  ID_MODEL_FROM_DATABASE=Radeon R7 250
 
+pci:v00001DA2d0000E445*
+ ID_MODEL_FROM_DATABASE=Sapphire Radeon RX 6700
+
 pci:v00001DA3*
  ID_VENDOR_FROM_DATABASE=Habana Labs Ltd.
 
 pci:v00001DA3d00000001*
  ID_MODEL_FROM_DATABASE=HL-1000 AI Inference Accelerator [Goya]
 
+pci:v00001DA3d00000030*
+ ID_MODEL_FROM_DATABASE=Greco AI Inference Accelerator
+
 pci:v00001DA3d00001000*
  ID_MODEL_FROM_DATABASE=HL-2000 AI Training Accelerator [Gaudi]
 
 pci:v00001DA3d00001010*
  ID_MODEL_FROM_DATABASE=HL-2000 AI Training Accelerator [Gaudi secured]
 
+pci:v00001DA3d00001020*
+ ID_MODEL_FROM_DATABASE=Gaudi2 AI Training Accelerator
+
+pci:v00001DA8*
+ ID_VENDOR_FROM_DATABASE=Corigine, Inc.
+
 pci:v00001DAD*
  ID_VENDOR_FROM_DATABASE=Fungible
 
@@ -71321,6 +72998,9 @@
 pci:v00001DB7d0000DC23*
  ID_MODEL_FROM_DATABASE=I2S/DMA Controller [X100 Series]
 
+pci:v00001DB7d0000DC24*
+ ID_MODEL_FROM_DATABASE=NPU Controller [X100 Series]
+
 pci:v00001DB7d0000DC26*
  ID_MODEL_FROM_DATABASE=SATA Controller [X100 Series]
 
@@ -71375,12 +73055,36 @@
 pci:v00001DBB*
  ID_VENDOR_FROM_DATABASE=NGD Systems, Inc.
 
+pci:v00001DBE*
+ ID_VENDOR_FROM_DATABASE=INNOGRIT Corporation
+
+pci:v00001DBEd00005636*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD IG5636
+
+pci:v00001DBEd00005636sv00001DBEsd00000001*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD IG5636 (DONGTING-N1 DC SSD U.2)
+
+pci:v00001DBEd00005636sv00001DBEsd00001001*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD IG5636 (DONGHU-Z1 DC ZNS SSD U.2)
+
+pci:v00001DBEd00005638*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD IG5638
+
+pci:v00001DBEd00005638sv00001DBEsd00002001*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD IG5638 (DONGTING-N1 DC SSD U.2)
+
+pci:v00001DBEd00005638sv00001DBEsd00003001*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD IG5638 (DONGHU-Z1 DC ZNS SSD U.2)
+
 pci:v00001DBF*
  ID_VENDOR_FROM_DATABASE=Guizhou Huaxintong Semiconductor Technology Co., Ltd
 
 pci:v00001DBFd00000401*
  ID_MODEL_FROM_DATABASE=StarDragon4800 PCI Express Root Port
 
+pci:v00001DC2*
+ ID_VENDOR_FROM_DATABASE=Alco Digital Devices Limited
+
 pci:v00001DC5*
  ID_VENDOR_FROM_DATABASE=FADU Inc.
 
@@ -71393,8 +73097,11 @@
 pci:v00001DD3*
  ID_VENDOR_FROM_DATABASE=Sage Microelectronics Corp.
 
+pci:v00001DD4*
+ ID_VENDOR_FROM_DATABASE=Swissbit AG
+
 pci:v00001DD8*
- ID_VENDOR_FROM_DATABASE=Pensando Systems
+ ID_VENDOR_FROM_DATABASE=AMD Pensando Systems
 
 pci:v00001DD8d00000002*
  ID_MODEL_FROM_DATABASE=DSC2 Elba Upstream Port
@@ -71405,6 +73112,12 @@
 pci:v00001DD8d00000002sv00001DD8sd00005003*
  ID_MODEL_FROM_DATABASE=DSC2 Elba Upstream Port (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
 
+pci:v00001DD8d00000002sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC2 Elba Upstream Port (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00000002sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC2 Elba Upstream Port (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
 pci:v00001DD8d00001000*
  ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port
 
@@ -71477,6 +73190,12 @@
 pci:v00001DD8d00001001sv00001DD8sd00005003*
  ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
 
+pci:v00001DD8d00001001sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00001001sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
 pci:v00001DD8d00001002*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller
 
@@ -71516,6 +73235,12 @@
 pci:v00001DD8d00001002sv00001DD8sd00005003*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
 
+pci:v00001DD8d00001002sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00001002sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
 pci:v00001DD8d00001003*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF
 
@@ -71555,6 +73280,12 @@
 pci:v00001DD8d00001003sv00001DD8sd00005003*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
 
+pci:v00001DD8d00001003sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00001003sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
 pci:v00001DD8d00001004*
  ID_MODEL_FROM_DATABASE=DSC Management Controller
 
@@ -71594,6 +73325,12 @@
 pci:v00001DD8d00001004sv00001DD8sd00005003*
  ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
 
+pci:v00001DD8d00001004sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00001004sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
 pci:v00001DD8d00001005*
  ID_MODEL_FROM_DATABASE=DSC NVMe Controller
 
@@ -71603,6 +73340,12 @@
 pci:v00001DD8d00001005sv00001DD8sd00005003*
  ID_MODEL_FROM_DATABASE=DSC NVMe Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
 
+pci:v00001DD8d00001005sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC NVMe Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00001005sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC NVMe Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
 pci:v00001DD8d00001006*
  ID_MODEL_FROM_DATABASE=DSC NVMe Controller VF
 
@@ -71612,6 +73355,12 @@
 pci:v00001DD8d00001006sv00001DD8sd00005003*
  ID_MODEL_FROM_DATABASE=DSC NVMe Controller VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
 
+pci:v00001DD8d00001006sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC NVMe Controller VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00001006sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC NVMe Controller VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
 pci:v00001DD8d00001007*
  ID_MODEL_FROM_DATABASE=DSC Storage Accelerator
 
@@ -71651,6 +73400,87 @@
 pci:v00001DD8d00001007sv00001DD8sd00005003*
  ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
 
+pci:v00001DD8d00001007sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00001007sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
+pci:v00001DD8d00001009*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller UPT
+
+pci:v00001DD8d00001009sv00001DD8sd00005001*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller UPT (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d00001009sv00001DD8sd00005003*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller UPT (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d00001009sv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller UPT (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d00001009sv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller UPT (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
+pci:v00001DD8d0000100A*
+ ID_MODEL_FROM_DATABASE=DSC Serial Port Controller
+
+pci:v00001DD8d0000100Asv00001DD8sd00005001*
+ ID_MODEL_FROM_DATABASE=DSC Serial Port Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d0000100Asv00001DD8sd00005003*
+ ID_MODEL_FROM_DATABASE=DSC Serial Port Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d0000100Asv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC Serial Port Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d0000100Asv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC Serial Port Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
+pci:v00001DD8d0000100B*
+ ID_MODEL_FROM_DATABASE=DSC vDPA Network Device VF
+
+pci:v00001DD8d0000100Bsv00001DD8sd00005001*
+ ID_MODEL_FROM_DATABASE=DSC vDPA Network Device VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d0000100Bsv00001DD8sd00005003*
+ ID_MODEL_FROM_DATABASE=DSC vDPA Network Device VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d0000100Bsv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC vDPA Network Device VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d0000100Bsv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC vDPA Network Device VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
+pci:v00001DD8d0000100C*
+ ID_MODEL_FROM_DATABASE=DSC PDS Core Management
+
+pci:v00001DD8d0000100Csv00001DD8sd00005001*
+ ID_MODEL_FROM_DATABASE=DSC PDS Core Management (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d0000100Csv00001DD8sd00005003*
+ ID_MODEL_FROM_DATABASE=DSC PDS Core Management (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d0000100Csv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC PDS Core Management (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d0000100Csv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC PDS Core Management (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
+pci:v00001DD8d0000100D*
+ ID_MODEL_FROM_DATABASE=DSC Virtio Network Device VF
+
+pci:v00001DD8d0000100Dsv00001DD8sd00005001*
+ ID_MODEL_FROM_DATABASE=DSC Virtio Network Device VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d0000100Dsv00001DD8sd00005003*
+ ID_MODEL_FROM_DATABASE=DSC Virtio Network Device VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card)
+
+pci:v00001DD8d0000100Dsv00001DD8sd0000500A*
+ ID_MODEL_FROM_DATABASE=DSC Virtio Network Device VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2)
+
+pci:v00001DD8d0000100Dsv00001DD8sd0000500B*
+ ID_MODEL_FROM_DATABASE=DSC Virtio Network Device VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU)
+
 pci:v00001DDD*
  ID_VENDOR_FROM_DATABASE=Thorlabs
 
@@ -71658,7 +73488,19 @@
  ID_VENDOR_FROM_DATABASE=Groq
 
 pci:v00001DE0d00000000*
- ID_MODEL_FROM_DATABASE=TSP100 Tensor Streaming Processor
+ ID_MODEL_FROM_DATABASE=TSP [GroqChip]
+
+pci:v00001DE0d00000000sv00001DE0sd00000000*
+ ID_MODEL_FROM_DATABASE=TSP [GroqChip] (GC1-010X-ES [GroqCard])
+
+pci:v00001DE0d00000000sv00001DE0sd0000C005*
+ ID_MODEL_FROM_DATABASE=TSP [GroqChip] (GC1-010B [GroqCard])
+
+pci:v00001DE0d00000000sv00001DE0sd0000C006*
+ ID_MODEL_FROM_DATABASE=TSP [GroqChip] (GC1-0109 [GroqCard])
+
+pci:v00001DE0d00000000sv00001DE0sd0000C007*
+ ID_MODEL_FROM_DATABASE=TSP [GroqChip] (GC1-0100 [GroqCard])
 
 pci:v00001DE1*
  ID_VENDOR_FROM_DATABASE=Tekram Technology Co.,Ltd.
@@ -71894,6 +73736,27 @@
 pci:v00001DF7d00000003*
  ID_MODEL_FROM_DATABASE=alst4x
 
+pci:v00001DF8*
+ ID_VENDOR_FROM_DATABASE=V&G Information System Co.,Ltd
+
+pci:v00001DF8d0000C000*
+ ID_MODEL_FROM_DATABASE=DC NVMe SSD
+
+pci:v00001DF8d0000C000sv00001DF8sd0000C600*
+ ID_MODEL_FROM_DATABASE=DC NVMe SSD (Enterprise U.2 NVMe SSD)
+
+pci:v00001DF8d0000D000*
+ ID_MODEL_FROM_DATABASE=PC NVMe SSD
+
+pci:v00001DF8d0000D000sv00001DF8sd0000D100*
+ ID_MODEL_FROM_DATABASE=PC NVMe SSD (M.2 NVMe SSD)
+
+pci:v00001DF8d0000D000sv00001DF8sd0000D201*
+ ID_MODEL_FROM_DATABASE=PC NVMe SSD (M.2 NVMe SSD)
+
+pci:v00001DF8d0000D000sv00001DF8sd0000D600*
+ ID_MODEL_FROM_DATABASE=PC NVMe SSD (M.2 NVMe SSD)
+
 pci:v00001DFC*
  ID_VENDOR_FROM_DATABASE=JSC NT-COM
 
@@ -71903,6 +73766,9 @@
 pci:v00001E0F*
  ID_VENDOR_FROM_DATABASE=KIOXIA Corporation
 
+pci:v00001E0Fd00000001*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller BG4
+
 pci:v00001E0Fd00000007*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6
 
@@ -72005,6 +73871,15 @@
 pci:v00001E0Fd00000011sv00001028sd00002192*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 15.36TB)
 
+pci:v00001E0Fd00000011sv00001028sd00002193*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (NVMe CD7 E3.S 1.92TB)
+
+pci:v00001E0Fd00000011sv00001028sd00002194*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (NVMe CD7 E3.S 3.84TB)
+
+pci:v00001E0Fd00000011sv00001028sd00002195*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (NVMe CD7 E3.S 7.68TB)
+
 pci:v00001E17*
  ID_VENDOR_FROM_DATABASE=Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
 
@@ -72081,191 +73956,236 @@
  ID_VENDOR_FROM_DATABASE=DapuStor Corporation
 
 pci:v00001E3Bd00000600*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600
+
+pci:v00001E3Bd00000600sv00001E3Bsd00000010*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.84TB (R5102))
+
+pci:v00001E3Bd00000600sv00001E3Bsd00000013*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.20TB (R5302))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000030*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.84TB (J5100))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.84TB (J5100))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000031*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 7.68TB (J5100))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 7.68TB (J5100))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000032*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 15.36TB (J5100))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 15.36TB (J5100))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000033*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.20TB (J5300))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.20TB (J5300))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000034*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 6.40TB (J5300))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 6.40TB (J5300))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000035*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 12.80TB (J5300))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 12.80TB (J5300))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000036*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD AIC 7.68TB (J5110))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD AIC 7.68TB (J5110))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000037*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD AIC 6.40TB (J5310))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD AIC 6.40TB (J5310))
+
+pci:v00001E3Bd00000600sv00001E3Bsd00000038*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.84TB (J5100D))
+
+pci:v00001E3Bd00000600sv00001E3Bsd00000039*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 7.68TB (J5100D))
+
+pci:v00001E3Bd00000600sv00001E3Bsd0000003B*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.20TB (J5300D))
+
+pci:v00001E3Bd00000600sv00001E3Bsd0000003C*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 6.40TB (J5300D))
 
 pci:v00001E3Bd00000600sv00001E3Bsd0000003E*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD AIC 3.84TB (J5110))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD AIC 3.84TB (J5110))
 
 pci:v00001E3Bd00000600sv00001E3Bsd0000003F*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD AIC 3.20TB (J5310))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD AIC 3.20TB (J5310))
+
+pci:v00001E3Bd00000600sv00001E3Bsd0000004C*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 QDP 1.92TB (J5100))
+
+pci:v00001E3Bd00000600sv00001E3Bsd0000004D*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 QDP 1.60TB (J5300))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000050*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.84TB (R5100))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.84TB (R5100))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000051*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 7.68TB (R5100))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 7.68TB (R5100))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000052*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 15.36TB (R5100))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 15.36TB (R5100))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000053*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.20TB (R5300))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.20TB (R5300))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000054*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 6.40TB (R5300))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 6.40TB (R5300))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000055*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 12.80TB (R5300))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 12.80TB (R5300))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000056*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.84TB (R5101))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.84TB (R5101))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000059*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.20TB (R5301))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.20TB (R5301))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000060*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.84TB (R5100D))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.84TB (R5100D))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000061*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 7.68TB (R5100D))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 7.68TB (R5100D))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000063*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.20TB (R5300D))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.20TB (R5300D))
 
 pci:v00001E3Bd00000600sv00001E3Bsd00000064*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 6.40TB (R5300D))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 6.40TB (R5300D))
+
+pci:v00001E3Bd00000600sv00001E3Bsd00000066*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.84TB (R5101D))
+
+pci:v00001E3Bd00000600sv00001E3Bsd00000069*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.20TB (R5301D))
+
+pci:v00001E3Bd00000600sv00001E3Bsd0000006C*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 1.92TB (R5101))
+
+pci:v00001E3Bd00000600sv00001E3Bsd0000006D*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 1.60TB (J5301))
 
 pci:v00001E3Bd00000600sv00001E3Bsd000000F0*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 0.40TB (X2900))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 0.40TB (X2900))
 
 pci:v00001E3Bd00000600sv00001E3Bsd000000F1*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 0.80TB (X2900))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 0.80TB (X2900))
 
 pci:v00001E3Bd00000600sv00001E3Bsd000000F2*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 1.60TB (X2900))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 1.60TB (X2900))
 
 pci:v00001E3Bd00000600sv00001E3Bsd000000F3*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 3.20TB (X2900))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 3.20TB (X2900))
 
 pci:v00001E3Bd00000600sv00001E3Bsd000000F5*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 0.40TB (X2900P))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 0.40TB (X2900P))
 
 pci:v00001E3Bd00000600sv00001E3Bsd000000F6*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 (Enterprise NVMe SSD U.2 0.80TB (X2900P))
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller DP600 (Enterprise NVMe SSD U.2 0.80TB (X2900P))
 
 pci:v00001E3Bd00001098*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000001*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H2100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H2100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000002*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.96TB (H2200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 0.96TB (H2200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000004*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H2100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H2100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000005*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.92TB (H2200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 1.92TB (H2200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000009*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H3100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H3100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000000A*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.96TB (H3200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 0.96TB (H3200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000000C*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H3100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H3100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000000D*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.92TB (H3200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 1.92TB (H3200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000014*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 3.2TB (H3100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 3.2TB (H3100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000015*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 3.84TB (H3200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 3.84TB (H3200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000021*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 6.4TB (H3100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 6.4TB (H3100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000022*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 7.68TB (H3200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 7.68TB (H3200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000052*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H3900))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H3900))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000053*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H3900))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H3900))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000059*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.75TB (H3900))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD U.2 0.75TB (H3900))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000061*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H2100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H2100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000062*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.96TB (H2200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 0.96TB (H2200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000064*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H2100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H2100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000065*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.92TB (H2200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 1.92TB (H2200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000006C*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H3100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H3100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000006D*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.96TB (H3200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 0.96TB (H3200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000006F*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H3100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H3100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000070*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.92TB (H3200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 1.92TB (H3200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000007C*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 3.2TB (H3100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 3.2TB (H3100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000007D*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 3.84TB (H3200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 3.84TB (H3200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000007F*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 6.4TB (H3100))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 6.4TB (H3100))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000080*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 7.68TB (H3200))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 7.68TB (H3200))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000008A*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H3900))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H3900))
 
 pci:v00001E3Bd00001098sv00001E3Bsd0000008B*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H3900))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H3900))
 
 pci:v00001E3Bd00001098sv00001E3Bsd00000091*
- ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.75TB (H3900))
+ ID_MODEL_FROM_DATABASE=Haishen3 NVMe SSD (Enterprise NVMe SSD HHHL 0.75TB (H3900))
+
+pci:v00001E3Bd00001333*
+ ID_MODEL_FROM_DATABASE=Haishen5 NVMe SSD
 
 pci:v00001E3D*
  ID_VENDOR_FROM_DATABASE=Burlywood, Inc
 
+pci:v00001E44*
+ ID_VENDOR_FROM_DATABASE=Valve Software
+
 pci:v00001E49*
  ID_VENDOR_FROM_DATABASE=Yangtze Memory Technologies Co.,Ltd
 
+pci:v00001E49d00000021*
+ ID_MODEL_FROM_DATABASE=ZHITAI TiPro5000 NVMe SSD
+
 pci:v00001E49d00000041*
  ID_MODEL_FROM_DATABASE=ZHITAI TiPro7000
 
@@ -72302,6 +74222,9 @@
 pci:v00001E4Cd00000010sv00001E4Csd00000120*
  ID_MODEL_FROM_DATABASE=APU [Leda] (SE120)
 
+pci:v00001E50*
+ ID_VENDOR_FROM_DATABASE=IP3 Tech (HK) Limited
+
 pci:v00001E57*
  ID_VENDOR_FROM_DATABASE=Beijing Panyi Technology Co., Ltd
 
@@ -72332,6 +74255,12 @@
 pci:v00001E60d00002864*
  ID_MODEL_FROM_DATABASE=Hailo-8 AI Processor
 
+pci:v00001E67*
+ ID_VENDOR_FROM_DATABASE=Untether AI
+
+pci:v00001E67d00000002*
+ ID_MODEL_FROM_DATABASE=runAI200 AI Inference Accelerator
+
 pci:v00001E68*
  ID_VENDOR_FROM_DATABASE=Jiangsu Xinsheng Intelligent Technology Co., Ltd
 
@@ -72347,6 +74276,15 @@
 pci:v00001E7Cd0000BCA1*
  ID_MODEL_FROM_DATABASE=AKD1000 Neural Network Coprocessor [Akida]
 
+pci:v00001E7E*
+ ID_VENDOR_FROM_DATABASE=Pliops
+
+pci:v00001E7Ed00009034*
+ ID_MODEL_FROM_DATABASE=Pliops Extreme Data Processor [XDP1.0]
+
+pci:v00001E7F*
+ ID_VENDOR_FROM_DATABASE=Jiangsu Huacun Elec. Tech. Co., Ltd.
+
 pci:v00001E81*
  ID_VENDOR_FROM_DATABASE=Ramaxel Technology(Shenzhen) Limited
 
@@ -72360,25 +74298,31 @@
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 1920GB)
 
 pci:v00001E81d00001203sv00001E81sd0000A123*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 3840GB)
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 3840GBÂ)
 
 pci:v00001E81d00001203sv00001E81sd0000A124*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 7680GB)
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 7680GBÂ)
 
 pci:v00001E81d00001203sv00001E81sd0000A125*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 15360GB)
 
 pci:v00001E81d00001203sv00001E81sd0000A211*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 800GBÂ)
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 800GBÃ‚Â)
 
 pci:v00001E81d00001203sv00001E81sd0000A212*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 1600GB)
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 1600GBÂ)
 
 pci:v00001E81d00001203sv00001E81sd0000A213*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 3200GB)
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 3200GBÂ)
 
 pci:v00001E81d00001203sv00001E81sd0000A214*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 6400GB)
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD UHXXXa series U.2 6400GBÂ)
+
+pci:v00001E81d00001203sv00001E81sd0000F123*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller UHXXXa series (NVMe SSD TP6500 series U.2 3840GB)
+
+pci:v00001E83*
+ ID_VENDOR_FROM_DATABASE=Huaqin Technology Co.Ltd
 
 pci:v00001E85*
  ID_VENDOR_FROM_DATABASE=Heitec AG
@@ -72392,6 +74336,9 @@
 pci:v00001E89d00000003*
  ID_MODEL_FROM_DATABASE=Quantis-PCIe-240M
 
+pci:v00001E93*
+ ID_VENDOR_FROM_DATABASE=Beijing Bytedance Network Technology Co., Ltd.
+
 pci:v00001E94*
  ID_VENDOR_FROM_DATABASE=Calian SED
 
@@ -72399,10 +74346,13 @@
  ID_VENDOR_FROM_DATABASE=Solid State Storage Technology Corporation
 
 pci:v00001E95d00001002*
- ID_MODEL_FROM_DATABASE=NVMe Datacenter LJ1 SSD [3DNAND, Rainier Controller]
+ ID_MODEL_FROM_DATABASE=NVMe SSD [3DNAND] 2.5" U.2 (LJ1)
+
+pci:v00001E95d00001002sv00001E95sd00001101*
+ ID_MODEL_FROM_DATABASE=NVMe SSD [3DNAND] 2.5" U.2 (LJ1)
 
 pci:v00001E95d00001002sv00001EA0sd00005636*
- ID_MODEL_FROM_DATABASE=NVMe Datacenter LJ1 SSD [3DNAND, Rainier Controller] (TP1500 Series U.2 NVMe Datacenter SSD)
+ ID_MODEL_FROM_DATABASE=NVMe SSD [3DNAND] 2.5" U.2 (LJ1) (TP1500 Series U.2 NVMe Datacenter SSD)
 
 pci:v00001E9F*
  ID_VENDOR_FROM_DATABASE=Lynxi Technologies Co., Ltd.
@@ -72416,6 +74366,9 @@
 pci:v00001EA0d00002A18*
  ID_MODEL_FROM_DATABASE=Video Transcode Controller
 
+pci:v00001EA0d00002A20*
+ ID_MODEL_FROM_DATABASE=Cloud Intelligent Inference and Training Controller
+
 pci:v00001EA7*
  ID_VENDOR_FROM_DATABASE=Intelliprop, Inc
 
@@ -72464,6 +74417,42 @@
 pci:v00001EBDd00000101*
  ID_MODEL_FROM_DATABASE=Seirios 2063 Video Codec
 
+pci:v00001EC8*
+ ID_VENDOR_FROM_DATABASE=Innosilicon Co Ltd
+
+pci:v00001EC8d00008800*
+ ID_MODEL_FROM_DATABASE=Fantasy I
+
+pci:v00001EC8d00008800sv00001EC8sd000012A2*
+ ID_MODEL_FROM_DATABASE=Fantasy I (Device)
+
+pci:v00001EC8d00009800*
+ ID_MODEL_FROM_DATABASE=Fantasy II
+
+pci:v00001EC8d00009800sv00001EC8sd000012A2*
+ ID_MODEL_FROM_DATABASE=Fantasy II (Device)
+
+pci:v00001EC8d00009802*
+ ID_MODEL_FROM_DATABASE=Fantasy II
+
+pci:v00001EC8d00009802sv00001EC8sd000012A2*
+ ID_MODEL_FROM_DATABASE=Fantasy II (Device)
+
+pci:v00001EC8d00009804*
+ ID_MODEL_FROM_DATABASE=Fantasy II
+
+pci:v00001EC8d00009804sv00001EC8sd000012A2*
+ ID_MODEL_FROM_DATABASE=Fantasy II (Device)
+
+pci:v00001EC9*
+ ID_VENDOR_FROM_DATABASE=Wingtech Group(HongKong)Limited
+
+pci:v00001ECA*
+ ID_VENDOR_FROM_DATABASE=Lightmatter
+
+pci:v00001ECAd00000000*
+ ID_MODEL_FROM_DATABASE=Envise-B
+
 pci:v00001ED2*
  ID_VENDOR_FROM_DATABASE=FuriosaAI, Inc.
 
@@ -72503,6 +74492,39 @@
 pci:v00001ED5d00000123*
  ID_MODEL_FROM_DATABASE=MTT S2000
 
+pci:v00001ED5d000001FF*
+ ID_MODEL_FROM_DATABASE=MTT HDMI/DP Audio
+
+pci:v00001ED5d00000200*
+ ID_MODEL_FROM_DATABASE=MTT S80 Engineering Sample
+
+pci:v00001ED5d00000201*
+ ID_MODEL_FROM_DATABASE=MTT S80
+
+pci:v00001ED5d00000202*
+ ID_MODEL_FROM_DATABASE=MTT S70
+
+pci:v00001ED5d00000203*
+ ID_MODEL_FROM_DATABASE=MTT S60
+
+pci:v00001ED5d00000211*
+ ID_MODEL_FROM_DATABASE=G2D40
+
+pci:v00001ED5d00000221*
+ ID_MODEL_FROM_DATABASE=G2S80
+
+pci:v00001ED5d00000222*
+ ID_MODEL_FROM_DATABASE=MTT S3000
+
+pci:v00001ED5d00000223*
+ ID_MODEL_FROM_DATABASE=G2S4
+
+pci:v00001ED5d00000251*
+ ID_MODEL_FROM_DATABASE=G2N10
+
+pci:v00001ED5d000002FF*
+ ID_MODEL_FROM_DATABASE=MTT HDMI/DP Audio
+
 pci:v00001ED8*
  ID_VENDOR_FROM_DATABASE=Digiteq Automotive
 
@@ -72512,6 +74534,27 @@
 pci:v00001ED9*
  ID_VENDOR_FROM_DATABASE=Myrtle.ai
 
+pci:v00001EE1*
+ ID_VENDOR_FROM_DATABASE=Suzhou Kuhan Information Technologies
+
+pci:v00001EE1d00000050*
+ ID_MODEL_FROM_DATABASE=Aurora NVMe SSD Controller
+
+pci:v00001EE1d00000050sv00001EE1sd00000009*
+ ID_MODEL_FROM_DATABASE=Aurora NVMe SSD Controller (Airglow A430 NVMe SSD U.2 1.6TB)
+
+pci:v00001EE1d00000050sv00001EE1sd0000000A*
+ ID_MODEL_FROM_DATABASE=Aurora NVMe SSD Controller (Airglow A430 NVMe SSD U.2 3.2TB)
+
+pci:v00001EE1d00000050sv00001EE1sd0000000B*
+ ID_MODEL_FROM_DATABASE=Aurora NVMe SSD Controller (Airglow A430 NVMe SSD U.2 4.8TB)
+
+pci:v00001EE4*
+ ID_VENDOR_FROM_DATABASE=PETAIO INC
+
+pci:v00001EE4d00001180*
+ ID_MODEL_FROM_DATABASE=P8118 U.2 Single Port SSD
+
 pci:v00001EE9*
  ID_VENDOR_FROM_DATABASE=SUSE LLC
 
@@ -72525,13 +74568,55 @@
  ID_MODEL_FROM_DATABASE=VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
 
 pci:v00001EED*
- ID_VENDOR_FROM_DATABASE=Xiangdixian Computing Technology (Chongqing) Ltd.
+ ID_VENDOR_FROM_DATABASE=XDX Computing Technology Ltd.
 
-pci:v00001EEDd00000100*
- ID_MODEL_FROM_DATABASE=XDX P100 VGA controller
+pci:v00001EEDd000010A0*
+ ID_MODEL_FROM_DATABASE=XDX110 Graphic/VGA Controller
 
-pci:v00001EEDd00000101*
- ID_MODEL_FROM_DATABASE=XDX P101 High Definition Audio Controller
+pci:v00001EEDd000010A1*
+ ID_MODEL_FROM_DATABASE=XDX110 Audio Controller
+
+pci:v00001EEDd00001140*
+ ID_MODEL_FROM_DATABASE=XDX120 Graphic/VGA Controller
+
+pci:v00001EEDd00001141*
+ ID_MODEL_FROM_DATABASE=XDX120 Audio Controller
+
+pci:v00001EEDd00001320*
+ ID_MODEL_FROM_DATABASE=XDX150 Graphic/VGA Controller
+
+pci:v00001EEDd00001321*
+ ID_MODEL_FROM_DATABASE=XDX150 Audio Controller
+
+pci:v00001EEDd000013C0*
+ ID_MODEL_FROM_DATABASE=XDX160 Graphic/VGA Controller
+
+pci:v00001EEDd000013C1*
+ ID_MODEL_FROM_DATABASE=XDX160 Audio Controller
+
+pci:v00001EEDd000013D0*
+ ID_MODEL_FROM_DATABASE=XDX161 Graphic/VGA Controller
+
+pci:v00001EEDd000013D1*
+ ID_MODEL_FROM_DATABASE=XDX161 Audio Controller
+
+pci:v00001EEDd00001500*
+ ID_MODEL_FROM_DATABASE=XDX180 Graphic/VGA Controller
+
+pci:v00001EEDd00001501*
+ ID_MODEL_FROM_DATABASE=XDX180 Audio Controller
+
+pci:v00001EEDd000015A0*
+ ID_MODEL_FROM_DATABASE=XDX190 Graphic/VGA Controller
+
+pci:v00001EEDd000015A1*
+ ID_MODEL_FROM_DATABASE=XDX190 Audio Controller
+
+pci:v00001EF6*
+ ID_VENDOR_FROM_DATABASE=GrAI Matter Labs
+
+pci:v00001EF7*
+ ID_VENDOR_FROM_DATABASE=Shenzhen Gunnir Technology Development Co., Ltd
 
 pci:v00001EFB*
  ID_VENDOR_FROM_DATABASE=Flexxon Pte Ltd
@@ -72563,6 +74648,57 @@
 pci:v00001F03d00005636*
  ID_MODEL_FROM_DATABASE=IG5636-Based NVMe SSD
 
+pci:v00001F0F*
+ ID_VENDOR_FROM_DATABASE=NebulaMatrix Technology
+
+pci:v00001F0Fd00001041*
+ ID_MODEL_FROM_DATABASE=D1055AS vDPA Ethernet Controller
+
+pci:v00001F0Fd00001041sv00001F0Fsd00000001*
+ ID_MODEL_FROM_DATABASE=D1055AS vDPA Ethernet Controller
+
+pci:v00001F0Fd00001042*
+ ID_MODEL_FROM_DATABASE=D1055AS vDPA Storage Controller
+
+pci:v00001F0Fd00001042sv00001F0Fsd00000001*
+ ID_MODEL_FROM_DATABASE=D1055AS vDPA Storage Controller
+
+pci:v00001F0Fd00001220*
+ ID_MODEL_FROM_DATABASE=D1055AS Ethernet Controller
+
+pci:v00001F0Fd00001221*
+ ID_MODEL_FROM_DATABASE=D1055AS Ethernet Controller
+
+pci:v00001F0Fd00001222*
+ ID_MODEL_FROM_DATABASE=D1055AS Ethernet Controller
+
+pci:v00001F0Fd00001223*
+ ID_MODEL_FROM_DATABASE=D1055AS Ethernet Controller
+
+pci:v00001F0Fd00001600*
+ ID_MODEL_FROM_DATABASE=M16104 Family
+
+pci:v00001F0Fd00001601*
+ ID_MODEL_FROM_DATABASE=M16104 Family Virtual Function
+
+pci:v00001F0Fd00002022*
+ ID_MODEL_FROM_DATABASE=D1055AS PCI Express Switch Upstream Port
+
+pci:v00001F0Fd00009088*
+ ID_MODEL_FROM_DATABASE=D1055AS PCI Express Switch Downstream Port
+
+pci:v00001F24*
+ ID_VENDOR_FROM_DATABASE=xFusion Digital Technologies Co., Ltd.
+
+pci:v00001F24d00001058*
+ ID_MODEL_FROM_DATABASE=EP500/EP600 NVMe SSD
+
+pci:v00001F24d00001058sv00001F24sd00001114*
+ ID_MODEL_FROM_DATABASE=EP500/EP600 NVMe SSD (EP500 NVMe SSD(RI))
+
+pci:v00001F24d00001058sv00001F24sd00001115*
+ ID_MODEL_FROM_DATABASE=EP500/EP600 NVMe SSD (EP600 NVMe SSD(MU))
+
 pci:v00001F2F*
  ID_VENDOR_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co.Ltd.
 
@@ -72584,12 +74720,159 @@
 pci:v00001F2Fd00001513sv00001F2Fsd00006118*
  ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 7.68TB NVMe SSD)
 
+pci:v00001F3F*
+ ID_VENDOR_FROM_DATABASE=3SNIC Ltd
+
+pci:v00001F3Fd00002100*
+ ID_MODEL_FROM_DATABASE=SSSHBA SAS/SATA HBA
+
+pci:v00001F3Fd00002100sv00001F3Fsd00000120*
+ ID_MODEL_FROM_DATABASE=SSSHBA SAS/SATA HBA (HBA 32 Ports)
+
+pci:v00001F3Fd00002100sv00001F3Fsd00000125*
+ ID_MODEL_FROM_DATABASE=SSSHBA SAS/SATA HBA (HBA 40 Ports)
+
+pci:v00001F3Fd00002100sv00001F3Fsd00000180*
+ ID_MODEL_FROM_DATABASE=SSSHBA SAS/SATA HBA (HBA 16 Ports)
+
+pci:v00001F3Fd00002100sv00001F3Fsd00000185*
+ ID_MODEL_FROM_DATABASE=SSSHBA SAS/SATA HBA (HBA 8 Ports)
+
+pci:v00001F3Fd00002200*
+ ID_MODEL_FROM_DATABASE=SSSRAID RAID controller
+
+pci:v00001F3Fd00002200sv00001F3Fsd00000185*
+ ID_MODEL_FROM_DATABASE=SSSRAID RAID controller (RAID Controller 16 Ports with 2G Cache)
+
+pci:v00001F3Fd00002200sv00001F3Fsd000001A1*
+ ID_MODEL_FROM_DATABASE=SSSRAID RAID controller (RAID Controller 40 Ports with 2G Cache)
+
+pci:v00001F3Fd00002200sv00001F3Fsd000001A4*
+ ID_MODEL_FROM_DATABASE=SSSRAID RAID controller (RAID Controller 16 Ports with 4G Cache)
+
+pci:v00001F3Fd00002200sv00001F3Fsd000001A8*
+ ID_MODEL_FROM_DATABASE=SSSRAID RAID controller (RAID Controller 32 Ports with 4G Cache)
+
+pci:v00001F3Fd00002200sv00001F3Fsd000001AD*
+ ID_MODEL_FROM_DATABASE=SSSRAID RAID controller (RAID Controller 40 Ports with 4G Cache)
+
+pci:v00001F3Fd00009001*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet VF
+
+pci:v00001F3Fd00009001sv00001F3Fsd00001000*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet VF (Ethernet VF)
+
+pci:v00001F3Fd00009002*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet VF Hyper-V
+
+pci:v00001F3Fd00009002sv00001F3Fsd00001000*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet VF Hyper-V (Ethernet VF Hyper-V)
+
+pci:v00001F3Fd00009003*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet SDI VF
+
+pci:v00001F3Fd00009003sv00001F3Fsd00001000*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet SDI VF (Ethernet SDI VF)
+
+pci:v00001F3Fd00009004*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet SDI VF Hyper-V
+
+pci:v00001F3Fd00009004sv00001F3Fsd00001000*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet SDI VF Hyper-V (Ethernet SDI VF Hyper-V)
+
+pci:v00001F3Fd00009008*
+ ID_MODEL_FROM_DATABASE=SSSFC VF
+
+pci:v00001F3Fd00009008sv00001F3Fsd00001000*
+ ID_MODEL_FROM_DATABASE=SSSFC VF (3SFC VF)
+
+pci:v00001F3Fd00009009*
+ ID_MODEL_FROM_DATABASE=SSSFC VF Hyper-V
+
+pci:v00001F3Fd00009009sv00001F3Fsd00001000*
+ ID_MODEL_FROM_DATABASE=SSSFC VF Hyper-V (3SFC VF Hyper-V)
+
+pci:v00001F3Fd00009010*
+ ID_MODEL_FROM_DATABASE=SSSFC FC Controller
+
+pci:v00001F3Fd00009010sv00001F3Fsd00000041*
+ ID_MODEL_FROM_DATABASE=SSSFC FC Controller (Dual Port 16GE FC to PCIe Gen4 x16 Adapter)
+
+pci:v00001F3Fd00009010sv00001F3Fsd00000061*
+ ID_MODEL_FROM_DATABASE=SSSFC FC Controller (Dual Port 32GE FC to PCIe Gen4 x16 Adapter)
+
+pci:v00001F3Fd00009020*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet Network Adapter
+
+pci:v00001F3Fd00009020sv00001F3Fsd00000051*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet Network Adapter (Dual Port 25GE Ethernet Network Adapter)
+
+pci:v00001F3Fd00009020sv00001F3Fsd00000052*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet Network Adapter (Quad Port 25GE Ethernet Network Adapter)
+
+pci:v00001F3Fd00009020sv00001F3Fsd000000A1*
+ ID_MODEL_FROM_DATABASE=SSSNIC Ethernet Network Adapter (Dual Port 100GE Ethernet Network Adapter)
+
+pci:v00001F3Fd00009030*
+ ID_MODEL_FROM_DATABASE=SSSNIC IPU
+
+pci:v00001F3Fd00009030sv00001F3Fsd00000051*
+ ID_MODEL_FROM_DATABASE=SSSNIC IPU (Dual Port 25GE IPU)
+
+pci:v00001F3Fd00009031*
+ ID_MODEL_FROM_DATABASE=SSSNIC SDI5.0
+
+pci:v00001F3Fd00009031sv00001F3Fsd00000051*
+ ID_MODEL_FROM_DATABASE=SSSNIC SDI5.0 (Dual Port 25GE SDI5.0lite)
+
+pci:v00001F3Fd00009031sv00001F3Fsd000000A1*
+ ID_MODEL_FROM_DATABASE=SSSNIC SDI5.0 (Dual Port 100GE SDI5.0)
+
+pci:v00001F3Fd00009032*
+ ID_MODEL_FROM_DATABASE=SSSNIC SDI5.1
+
+pci:v00001F3Fd00009032sv00001F3Fsd000000A1*
+ ID_MODEL_FROM_DATABASE=SSSNIC SDI5.1 (Dual Port 100GE SDI5.1)
+
+pci:v00001F40*
+ ID_VENDOR_FROM_DATABASE=Netac Technology Co.,Ltd
+
+pci:v00001F44*
+ ID_VENDOR_FROM_DATABASE=VVDN Technologies Private Limited
+
+pci:v00001F4B*
+ ID_VENDOR_FROM_DATABASE=Axera Semiconductor Co., Ltd
+
+pci:v00001F52*
+ ID_VENDOR_FROM_DATABASE=MangoBoost Inc.
+
+pci:v00001F60*
+ ID_VENDOR_FROM_DATABASE=Accelecom
+
+pci:v00001F60d00000001*
+ ID_MODEL_FROM_DATABASE=XELE-NIC 25K5
+
+pci:v00001F60d00000054*
+ ID_MODEL_FROM_DATABASE=XELE-NIC 25K5
+
+pci:v00001FAA*
+ ID_VENDOR_FROM_DATABASE=Hexaflake (Shanghai) Information Technology Co., Ltd.
+
+pci:v00001FAAd00000C10*
+ ID_MODEL_FROM_DATABASE=Compass C10 PF
+
+pci:v00001FAAd00000C11*
+ ID_MODEL_FROM_DATABASE=Compass C10 VF
+
 pci:v00001FAB*
  ID_VENDOR_FROM_DATABASE=Unifabrix Ltd.
 
 pci:v00001FABd00000000*
  ID_MODEL_FROM_DATABASE=Nexus Alpha IVPU
 
+pci:v00001FABd00000100*
+ ID_MODEL_FROM_DATABASE=NoX Gamma
+
 pci:v00001FC0*
  ID_VENDOR_FROM_DATABASE=Ascom (Finland) Oy
 
@@ -72848,6 +75131,9 @@
 pci:v00002646d0000500E*
  ID_MODEL_FROM_DATABASE=SNVS2000G [NV1 NVMe PCIe SSD 2TB]
 
+pci:v00002646d00005012*
+ ID_MODEL_FROM_DATABASE=DC1500M U.2 Enterprise SSD
+
 pci:v0000270B*
  ID_VENDOR_FROM_DATABASE=Xantel Corporation
 
@@ -72857,6 +75143,9 @@
 pci:v00002711*
  ID_VENDOR_FROM_DATABASE=AVID Technology Inc.
 
+pci:v00002782*
+ ID_VENDOR_FROM_DATABASE=Emdoor Digital Technology Co., Ltd
+
 pci:v00002955*
  ID_VENDOR_FROM_DATABASE=Connectix Virtual PC
 
@@ -74802,13 +77091,19 @@
  ID_MODEL_FROM_DATABASE=Arise-GT-10C0
 
 pci:v00006766d00003D02*
- ID_MODEL_FROM_DATABASE=Arise 1020
+ ID_MODEL_FROM_DATABASE=Arise1020
+
+pci:v00006766d00003D03*
+ ID_MODEL_FROM_DATABASE=Arise-GT-1040
+
+pci:v00006766d00003D04*
+ ID_MODEL_FROM_DATABASE=Arise1010
 
 pci:v00006766d00003D40*
  ID_MODEL_FROM_DATABASE=Arise-GT-10C0 High Definition Audio Controller
 
 pci:v00006766d00003D41*
- ID_MODEL_FROM_DATABASE=Arise 1020 High Definition Audio Controller
+ ID_MODEL_FROM_DATABASE=Arise1020 High Definition Audio Controller
 
 pci:v00006899*
  ID_VENDOR_FROM_DATABASE=ZT Systems
@@ -74837,6 +77132,9 @@
 pci:v00007357d00007910*
  ID_MODEL_FROM_DATABASE=7910 [Althea]
 
+pci:v00007377*
+ ID_VENDOR_FROM_DATABASE=Shenzhen Colorful Yugong Technology and Development Co.
+
 pci:v00007401*
  ID_VENDOR_FROM_DATABASE=EndRun Technologies
 
@@ -74858,6 +77156,9 @@
 pci:v00007604*
  ID_VENDOR_FROM_DATABASE=O.N. Electronic Co Ltd.
 
+pci:v000078C0*
+ ID_VENDOR_FROM_DATABASE=Herrick Technology Laboratories, Inc. [HTL]
+
 pci:v00007BDE*
  ID_VENDOR_FROM_DATABASE=MIDAC Corporation
 
@@ -75722,6 +78023,9 @@
 pci:v00008086d00000684*
  ID_MODEL_FROM_DATABASE=H470 Chipset LPC/eSPI Controller
 
+pci:v00008086d00000685*
+ ID_MODEL_FROM_DATABASE=Z490 Chipset LPC/eSPI Controller
+
 pci:v00008086d00000687*
  ID_MODEL_FROM_DATABASE=Q470 Chipset LPC/eSPI Controller
 
@@ -75752,6 +78056,12 @@
 pci:v00008086d000006B0*
  ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #9
 
+pci:v00008086d000006BA*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #1
+
+pci:v00008086d000006BB*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #4
+
 pci:v00008086d000006BD*
  ID_MODEL_FROM_DATABASE=Comet Lake PCIe Port #6
 
@@ -76604,6 +78914,30 @@
 pci:v00008086d00000964*
  ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge
 
+pci:v00008086d00000998*
+ ID_MODEL_FROM_DATABASE=Ice Lake IEH
+
+pci:v00008086d000009A2*
+ ID_MODEL_FROM_DATABASE=Ice Lake Memory Map/VT-d
+
+pci:v00008086d000009A3*
+ ID_MODEL_FROM_DATABASE=Ice Lake RAS
+
+pci:v00008086d000009A4*
+ ID_MODEL_FROM_DATABASE=Ice Lake Mesh 2 PCIe
+
+pci:v00008086d000009A6*
+ ID_MODEL_FROM_DATABASE=Ice Lake MSM
+
+pci:v00008086d000009A7*
+ ID_MODEL_FROM_DATABASE=Ice Lake PMON MSM
+
+pci:v00008086d000009AB*
+ ID_MODEL_FROM_DATABASE=RST VMD Managed Controller
+
+pci:v00008086d000009C4*
+ ID_MODEL_FROM_DATABASE=PAC with Intel Arria 10 GX FPGA
+
 pci:v00008086d00000A03*
  ID_MODEL_FROM_DATABASE=Haswell-ULT Thermal Subsystem
 
@@ -76823,12 +79157,18 @@
 pci:v00008086d00000A55sv00001028sd00001FE9*
  ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (Express Flash NVMe 4.0TB HHHL AIC (P4600))
 
+pci:v00008086d00000B00*
+ ID_MODEL_FROM_DATABASE=Ice Lake CBDMA [QuickData Technology]
+
 pci:v00008086d00000B26*
  ID_MODEL_FROM_DATABASE=Thunderbolt 4 Bridge [Goshen Ridge 2020]
 
 pci:v00008086d00000B27*
  ID_MODEL_FROM_DATABASE=Thunderbolt 4 USB Controller [Goshen Ridge 2020]
 
+pci:v00008086d00000B2B*
+ ID_MODEL_FROM_DATABASE=PAC with Intel Stratix 10 SX FPGA [FPGA PAC D5005]
+
 pci:v00008086d00000B60*
  ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller]
 
@@ -76899,10 +79239,28 @@
  ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe Datacenter SSD [3DNAND] SE U.2 15mm (P5530))
 
 pci:v00008086d00000BD0*
- ID_MODEL_FROM_DATABASE=Ponte Vecchio 2T
+ ID_MODEL_FROM_DATABASE=Ponte Vecchio XL (2 Tile)
 
 pci:v00008086d00000BD5*
- ID_MODEL_FROM_DATABASE=Ponte Vecchio 1T
+ ID_MODEL_FROM_DATABASE=Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1550]
+
+pci:v00008086d00000BD6*
+ ID_MODEL_FROM_DATABASE=Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1550]
+
+pci:v00008086d00000BD7*
+ ID_MODEL_FROM_DATABASE=Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1350]
+
+pci:v00008086d00000BD8*
+ ID_MODEL_FROM_DATABASE=Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1350]
+
+pci:v00008086d00000BD9*
+ ID_MODEL_FROM_DATABASE=Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100]
+
+pci:v00008086d00000BDA*
+ ID_MODEL_FROM_DATABASE=Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100]
+
+pci:v00008086d00000BDB*
+ ID_MODEL_FROM_DATABASE=Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100]
 
 pci:v00008086d00000BE0*
  ID_MODEL_FROM_DATABASE=Atom Processor D2xxx/N2xxx Integrated Graphics Controller
@@ -77183,6 +79541,9 @@
 pci:v00008086d00000D4D*
  ID_MODEL_FROM_DATABASE=Ethernet Connection (11) I219-V
 
+pci:v00008086d00000D4Dsv00008086sd00000D4D*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection (11) I219-V
+
 pci:v00008086d00000D4E*
  ID_MODEL_FROM_DATABASE=Ethernet Connection (10) I219-LM
 
@@ -77207,6 +79568,9 @@
 pci:v00008086d00000D9F*
  ID_MODEL_FROM_DATABASE=Ethernet Controller (2) I225-IT
 
+pci:v00008086d00000DCD*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection C825-X
+
 pci:v00008086d00000DD2*
  ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710
 
@@ -77240,6 +79604,9 @@
 pci:v00008086d00000DDAsv00001BD4sd00000076*
  ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+ (Ethernet Connection F102IX722 for 10GbE SFP)
 
+pci:v00008086d00000DDAsv00001BD4sd00000082*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+ (Ethernet Connection F102IX722 for 10GbE SFP)
+
 pci:v00008086d00000E00*
  ID_MODEL_FROM_DATABASE=Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
 
@@ -79359,7 +81726,7 @@
  ID_MODEL_FROM_DATABASE=82815 815 Chipset Host Bridge and Memory Controller Hub (Travelmate 612 TX)
 
 pci:v00008086d00001130sv00001043sd00008027*
- ID_MODEL_FROM_DATABASE=82815 815 Chipset Host Bridge and Memory Controller Hub (TUSL2-C Mainboard)
+ ID_MODEL_FROM_DATABASE=82815 815 Chipset Host Bridge and Memory Controller Hub (CUSL2-C/TUSL2-C Mainboard)
 
 pci:v00008086d00001130sv0000104Dsd000080DF*
  ID_MODEL_FROM_DATABASE=82815 815 Chipset Host Bridge and Memory Controller Hub (Vaio PCG-FX403)
@@ -80006,6 +82373,9 @@
 pci:v00008086d00001237*
  ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma]
 
+pci:v00008086d00001237sv000001DEsd0000FFFE*
+ ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma] (Propolis Virtual 440FX)
+
 pci:v00008086d00001237sv00001AF4sd00001100*
  ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma] (Qemu virtual machine)
 
@@ -80048,6 +82418,12 @@
 pci:v00008086d00001250*
  ID_MODEL_FROM_DATABASE=430HX - 82439HX TXC [Triton II]
 
+pci:v00008086d0000125B*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller I226-LM
+
+pci:v00008086d0000125C*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller I226-V
+
 pci:v00008086d00001360*
  ID_MODEL_FROM_DATABASE=82806AA PCI64 Hub PCI Bridge
 
@@ -80321,6 +82697,12 @@
 pci:v00008086d00001521sv00001BD4sd00000066*
  ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (F014I350)
 
+pci:v00008086d00001521sv00001BD4sd0000008A*
+ ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (F012I350)
+
+pci:v00008086d00001521sv00001BD4sd0000008D*
+ ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (ENFI1100-T4)
+
 pci:v00008086d00001521sv00008086sd00000001*
  ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Ethernet Server Adapter I350-T4)
 
@@ -80540,9 +82922,18 @@
 pci:v00008086d00001533sv000010A9sd0000802D*
  ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (UV3000 BaseIO GbE Network)
 
+pci:v00008086d00001533sv000017AAsd00001059*
+ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
+
 pci:v00008086d00001533sv000017AAsd00001100*
  ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (ThinkServer Ethernet Server Adapter)
 
+pci:v00008086d00001533sv000017AAsd00001509*
+ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
+
+pci:v00008086d00001533sv000017AAsd0000404D*
+ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (I210 PCIe 1Gb 1-Port RJ45 LOM)
+
 pci:v00008086d00001533sv00008086sd00000001*
  ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (Ethernet Server Adapter I210-T1)
 
@@ -80682,61 +83073,61 @@
  ID_MODEL_FROM_DATABASE=Ethernet Controller X540
 
 pci:v00008086d00001563*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550
 
 pci:v00008086d00001563sv00001028sd00001FA8*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 4P X550/I350 rNDC)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 4P X550/I350 rNDC)
 
 pci:v00008086d00001563sv00001028sd00001FA9*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 4P X550 rNDC)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 4P X550 rNDC)
 
 pci:v00008086d00001563sv00001137sd000002B2*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550-TX 10 Gig LOM)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550-TX 10 Gig LOM)
 
 pci:v00008086d00001563sv00001137sd000002B3*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550-TX 10 Gig LOM)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550-TX 10 Gig LOM)
 
 pci:v00008086d00001563sv00001170sd00000001*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Intel Ethernet Controller X550-T2 OCP card)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Intel Ethernet Controller X550-T2 OCP card)
 
 pci:v00008086d00001563sv000014C0sd00001201*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550 10Gb 2P RJ45 OCP Mezz)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550 10Gb 2P RJ45 OCP Mezz)
 
 pci:v00008086d00001563sv00001590sd000000D1*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10Gb 2-port 562T Adapter)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10Gb 2-port 562T Adapter)
 
 pci:v00008086d00001563sv00001590sd000000D2*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10Gb 2-port 562FLR-T Adapter)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10Gb 2-port 562FLR-T Adapter)
 
 pci:v00008086d00001563sv000016B8sd00007217*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Twin10G Thunderbolt 3 Edition)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Twin10G Thunderbolt 3 Edition)
 
 pci:v00008086d00001563sv000018D4sd00000C08*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550 10Gb 2-port RJ45 OCP Mezz Card MOP81-I-10GT2)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550 10Gb 2-port RJ45 OCP Mezz Card MOP81-I-10GT2)
 
 pci:v00008086d00001563sv0000193Dsd00001008*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (560T-B)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (560T-B)
 
 pci:v00008086d00001563sv0000193Dsd00001009*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (560T-L)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (560T-L)
 
 pci:v00008086d00001563sv0000193Dsd00001011*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (UN-NIC-ETH563T-sL-2P)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (UN-NIC-ETH563T-sL-2P)
 
 pci:v00008086d00001563sv00008086sd00000001*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2)
 
 pci:v00008086d00001563sv00008086sd0000001A*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2)
 
 pci:v00008086d00001563sv00008086sd0000001B*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Server Adapter X550-T2 for OCP)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Server Adapter X550-T2 for OCP)
 
 pci:v00008086d00001563sv00008086sd0000001D*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 2P X550-t Adapter)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 2P X550-t Adapter)
 
 pci:v00008086d00001563sv00008086sd00000022*
- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2)
 
 pci:v00008086d00001564*
  ID_MODEL_FROM_DATABASE=X550 Virtual Function
@@ -80858,6 +83249,9 @@
 pci:v00008086d00001572sv00001BD4sd00000074*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Network Adapter X710-BM2 for lldp)
 
+pci:v00008086d00001572sv00001BD4sd0000008B*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (F102IX710)
+
 pci:v00008086d00001572sv00008086sd00000000*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Converged Network Adapter X710)
 
@@ -81209,12 +83603,21 @@
 pci:v00008086d0000158Bsv00008086sd0000000A*
  ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet 25G 2P XXV710 OCP)
 
+pci:v00008086d0000158Bsv00008086sd0000000C*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet Network Adapter XXV710-DA2 for OCP 3.0)
+
+pci:v00008086d0000158Bsv00008086sd0000000D*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet 25G 2P XXV710 OCP)
+
 pci:v00008086d0000158Bsv00008086sd00004001*
  ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet Network Adapter XXV710-2)
 
 pci:v00008086d00001591*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for backplane
 
+pci:v00008086d00001591sv00008086sd0000BCCE*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for backplane (Ethernet Controller E810-C for Intel(R) Open FPGA Stack)
+
 pci:v00008086d00001592*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP
 
@@ -81266,6 +83669,9 @@
 pci:v00008086d00001592sv00008086sd00000011*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q1 for OCP3.0)
 
+pci:v00008086d00001592sv00008086sd00000012*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet 100G 2P E810-C-st Adapter)
+
 pci:v00008086d00001593*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP
 
@@ -81335,6 +83741,9 @@
 pci:v00008086d0000159Bsv00001137sd000002BE*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (E810XXVDA2 2x25/10 GbE SFP28 PCIe NIC)
 
+pci:v00008086d0000159Bsv0000193Dsd00001085*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (NIC-ETH660F-3S-2P)
+
 pci:v00008086d0000159Bsv00001BD4sd00000057*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXVAM2)
 
@@ -81344,8 +83753,11 @@
 pci:v00008086d0000159Bsv00001BD4sd0000006E*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXVAM2 for BD)
 
+pci:v00008086d0000159Bsv00001BD4sd00000083*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXVAM2 for lldp)
+
 pci:v00008086d0000159Bsv00001EECsd00000102*
- ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (VSE250241E Dual-port 10Gb/25Gb Ethernet PCIe)
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (VSE-225-41E Dual-port 10Gb/25Gb Etherent PCIe)
 
 pci:v00008086d0000159Bsv00008086sd00000001*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet 25G 2P E810-XXV OCP)
@@ -81704,6 +84116,9 @@
 pci:v00008086d000015FFsv00008086sd0000000C*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-T2L for OCP 3.0)
 
+pci:v00008086d000015FFsv00008086sd0000000D*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet 10G 2P X710-T2L-t OCP)
+
 pci:v00008086d000015FFsv00008086sd0000000F*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-T2L for OCP 3.0)
 
@@ -81836,6 +84251,24 @@
 pci:v00008086d00001889*
  ID_MODEL_FROM_DATABASE=Ethernet Adaptive Virtual Function
 
+pci:v00008086d0000188A*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for backplane
+
+pci:v00008086d0000188B*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for QSFP
+
+pci:v00008086d0000188C*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for SFP
+
+pci:v00008086d0000188Csv00001028sd00000ABD*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for SFP (Ethernet Connection 25G 4P E823-C LOM)
+
+pci:v00008086d0000188D*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C/X557-AT 10GBASE-T
+
+pci:v00008086d0000188E*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C 1GbE
+
 pci:v00008086d00001890*
  ID_MODEL_FROM_DATABASE=Ethernet Connection E822-C for backplane
 
@@ -81941,6 +84374,9 @@
 pci:v00008086d00001909*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x4)
 
+pci:v00008086d0000190B*
+ ID_MODEL_FROM_DATABASE=HD Graphics 510
+
 pci:v00008086d0000190C*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 
@@ -82040,6 +84476,9 @@
 pci:v00008086d00001921*
  ID_MODEL_FROM_DATABASE=HD Graphics 520
 
+pci:v00008086d00001923*
+ ID_MODEL_FROM_DATABASE=HD Graphics 535
+
 pci:v00008086d00001926*
  ID_MODEL_FROM_DATABASE=Iris Graphics 540
 
@@ -82301,6 +84740,9 @@
 pci:v00008086d00001A1E*
  ID_MODEL_FROM_DATABASE=Ethernet Connection (16) I219-LM
 
+pci:v00008086d00001A1Esv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection (16) I219-LM (Precision 3571)
+
 pci:v00008086d00001A1F*
  ID_MODEL_FROM_DATABASE=Ethernet Connection (16) I219-V
 
@@ -83840,6 +86282,9 @@
 pci:v00008086d0000208E*
  ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
 
+pci:v00008086d00002240*
+ ID_MODEL_FROM_DATABASE=Larrabee
+
 pci:v00008086d00002241*
  ID_MODEL_FROM_DATABASE=Larrabee
 
@@ -84165,7 +86610,7 @@
  ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (e-pc 40)
 
 pci:v00008086d00002442sv00001043sd00008027*
- ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (TUSL2-C Mainboard)
+ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (CUSL2-C/TUSL2-C Mainboard)
 
 pci:v00008086d00002442sv0000104Dsd000080DF*
  ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Vaio PCG-FX403)
@@ -84210,7 +86655,7 @@
  ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (e-pc 40)
 
 pci:v00008086d00002443sv00001043sd00008027*
- ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (TUSL2-C Mainboard)
+ ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (CUSL2-C/TUSL2-C Mainboard)
 
 pci:v00008086d00002443sv0000104Dsd000080DF*
  ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (Vaio PCG-FX403)
@@ -84252,7 +86697,7 @@
  ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (e-pc 40)
 
 pci:v00008086d00002444sv00001043sd00008027*
- ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (TUSL2-C Mainboard)
+ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (CUSL2-C/TUSL2-C Mainboard)
 
 pci:v00008086d00002444sv0000104Dsd000080DF*
  ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Vaio PCG-FX403)
@@ -84293,6 +86738,9 @@
 pci:v00008086d00002445sv0000104Dsd000080DF*
  ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (Vaio PCG-FX403)
 
+pci:v00008086d00002445sv000011D4sd00005340*
+ ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (AD1885 AC97 codec)
+
 pci:v00008086d00002445sv00001462sd00003370*
  ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (STAC9721 AC)
 
@@ -84516,7 +86964,7 @@
  ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (e-pc 40)
 
 pci:v00008086d0000244Bsv00001043sd00008027*
- ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (TUSL2-C Mainboard)
+ ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (CUSL2-C/TUSL2-C Mainboard)
 
 pci:v00008086d0000244Bsv0000147Bsd00000505*
  ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (BL7 motherboard)
@@ -86678,6 +89126,9 @@
 pci:v00008086d000025D8*
  ID_MODEL_FROM_DATABASE=5000P Chipset Memory Controller Hub
 
+pci:v00008086d000025D8sv0000103Csd000031FD*
+ ID_MODEL_FROM_DATABASE=5000P Chipset Memory Controller Hub (ProLiant DL360 G5)
+
 pci:v00008086d000025D8sv000015D9sd00009680*
  ID_MODEL_FROM_DATABASE=5000P Chipset Memory Controller Hub (X7DBN Motherboard)
 
@@ -86709,7 +89160,7 @@
  ID_MODEL_FROM_DATABASE=5000 Series Chipset FSB Registers (PowerEdge 1955 FSB Registers)
 
 pci:v00008086d000025F0sv0000103Csd000031FD*
- ID_MODEL_FROM_DATABASE=5000 Series Chipset FSB Registers (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=5000 Series Chipset FSB Registers (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d000025F0sv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=5000 Series Chipset FSB Registers (X7DVL-E-O motherboard)
@@ -86724,7 +89175,7 @@
  ID_MODEL_FROM_DATABASE=5000 Series Chipset Reserved Registers
 
 pci:v00008086d000025F1sv0000103Csd000031FD*
- ID_MODEL_FROM_DATABASE=5000 Series Chipset Reserved Registers (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=5000 Series Chipset Reserved Registers (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d000025F1sv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=5000 Series Chipset Reserved Registers (X7DVL-E-O motherboard)
@@ -86739,7 +89190,7 @@
  ID_MODEL_FROM_DATABASE=5000 Series Chipset Reserved Registers
 
 pci:v00008086d000025F3sv0000103Csd000031FD*
- ID_MODEL_FROM_DATABASE=5000 Series Chipset Reserved Registers (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=5000 Series Chipset Reserved Registers (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d000025F3sv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=5000 Series Chipset Reserved Registers (X7DVL-E-O motherboard)
@@ -86754,7 +89205,7 @@
  ID_MODEL_FROM_DATABASE=5000 Series Chipset FBD Registers
 
 pci:v00008086d000025F5sv0000103Csd000031FD*
- ID_MODEL_FROM_DATABASE=5000 Series Chipset FBD Registers (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=5000 Series Chipset FBD Registers (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d000025F5sv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=5000 Series Chipset FBD Registers (X7DVL-E-O motherboard)
@@ -86769,7 +89220,7 @@
  ID_MODEL_FROM_DATABASE=5000 Series Chipset FBD Registers
 
 pci:v00008086d000025F6sv0000103Csd000031FD*
- ID_MODEL_FROM_DATABASE=5000 Series Chipset FBD Registers (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=5000 Series Chipset FBD Registers (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d000025F6sv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=5000 Series Chipset FBD Registers (X7DVL-E-O motherboard)
@@ -87468,7 +89919,7 @@
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #1 (PowerEdge R900 onboard USB)
 
 pci:v00008086d00002688sv0000103Csd000031FE*
- ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #1 (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #1 (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d00002688sv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #1 (X7DVL-E-O motherboard)
@@ -87489,7 +89940,7 @@
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #2 (PowerEdge R900 onboard USB)
 
 pci:v00008086d00002689sv0000103Csd000031FE*
- ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #2 (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #2 (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d00002689sv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #2 (X7DVL-E-O motherboard)
@@ -87507,7 +89958,7 @@
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #3 (PowerEdge R900 onboard USB)
 
 pci:v00008086d0000268Asv0000103Csd000031FE*
- ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #3 (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #3 (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d0000268Asv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #3 (X7DVL-E-O motherboard)
@@ -87524,6 +89975,9 @@
 pci:v00008086d0000268Bsv00001028sd000001F0*
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #4 (PowerEdge R900 onboard USB)
 
+pci:v00008086d0000268Bsv0000103Csd000031FE*
+ ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #4 (ProLiant DL360 G5)
+
 pci:v00008086d0000268Bsv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset UHCI USB Controller #4 (X7DVL-E-O motherboard)
 
@@ -87540,7 +89994,7 @@
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset EHCI USB2 Controller (PowerEdge R900 onboard USB)
 
 pci:v00008086d0000268Csv0000103Csd000031FE*
- ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset EHCI USB2 Controller (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset EHCI USB2 Controller (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d0000268Csv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=631xESB/632xESB/3100 Chipset EHCI USB2 Controller (X7DVL-E-O motherboard)
@@ -87600,7 +90054,7 @@
  ID_MODEL_FROM_DATABASE=631xESB/632xESB IDE Controller
 
 pci:v00008086d0000269Esv0000103Csd000031FE*
- ID_MODEL_FROM_DATABASE=631xESB/632xESB IDE Controller (ProLiant DL140 G3)
+ ID_MODEL_FROM_DATABASE=631xESB/632xESB IDE Controller (ProLiant DL140 G3, DL360 G5)
 
 pci:v00008086d0000269Esv000015D9sd00008680*
  ID_MODEL_FROM_DATABASE=631xESB/632xESB IDE Controller (X7DVL-E-O motherboard)
@@ -87642,7 +90096,7 @@
  ID_MODEL_FROM_DATABASE=Wi-Fi 6 AX200
 
 pci:v00008086d00002723sv00001A56sd00001654*
- ID_MODEL_FROM_DATABASE=Wi-Fi 6 AX200 (Killer™ Wi-Fi 6 AX1650x (AX200NGW))
+ ID_MODEL_FROM_DATABASE=Wi-Fi 6 AX200 (Killerâ„¢ Wi-Fi 6 AX1650x (AX200NGW))
 
 pci:v00008086d00002723sv00008086sd00000084*
  ID_MODEL_FROM_DATABASE=Wi-Fi 6 AX200 (NGW)
@@ -92124,10 +94578,28 @@
  ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor USB 3.0 xHCI Controller
 
 pci:v00008086d000031AC*
- ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO I2C Host Controller
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 0
 
 pci:v00008086d000031AE*
- ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO I2C Host Controller
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 1
+
+pci:v00008086d000031B0*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 2
+
+pci:v00008086d000031B2*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 3
+
+pci:v00008086d000031B4*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 4
+
+pci:v00008086d000031B6*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 5
+
+pci:v00008086d000031B8*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 6
+
+pci:v00008086d000031BA*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 7
 
 pci:v00008086d000031BC*
  ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO UART Host Controller
@@ -92417,6 +94889,15 @@
 pci:v00008086d00003438*
  ID_MODEL_FROM_DATABASE=7500/5520/5500/X58 I/O Hub Throttle Registers
 
+pci:v00008086d00003440*
+ ID_MODEL_FROM_DATABASE=Ice Lake UPI Misc
+
+pci:v00008086d00003441*
+ ID_MODEL_FROM_DATABASE=Ice Lake UPI Link/Phy0
+
+pci:v00008086d00003456*
+ ID_MODEL_FROM_DATABASE=Ice Lake NorthPeak
+
 pci:v00008086d0000347E*
  ID_MODEL_FROM_DATABASE=Ice Lake Xeon Non-Transparent Bridge
 
@@ -94373,24 +96854,45 @@
 pci:v00008086d00003E93*
  ID_MODEL_FROM_DATABASE=CoffeeLake-S GT1 [UHD Graphics 610]
 
+pci:v00008086d00003E94*
+ ID_MODEL_FROM_DATABASE=Coffee Lake-S GT2 [UHD Graphics P630]
+
 pci:v00008086d00003E96*
  ID_MODEL_FROM_DATABASE=CoffeeLake-S GT2 [UHD Graphics P630]
 
 pci:v00008086d00003E98*
  ID_MODEL_FROM_DATABASE=CoffeeLake-S GT2 [UHD Graphics 630]
 
+pci:v00008086d00003E9A*
+ ID_MODEL_FROM_DATABASE=Coffee Lake-S GT2 [UHD Graphics P630]
+
 pci:v00008086d00003E9B*
  ID_MODEL_FROM_DATABASE=CoffeeLake-H GT2 [UHD Graphics 630]
 
+pci:v00008086d00003E9C*
+ ID_MODEL_FROM_DATABASE=Coffee Lake-S GT1 [UHD Graphics 610]
+
 pci:v00008086d00003EA0*
  ID_MODEL_FROM_DATABASE=WhiskeyLake-U GT2 [UHD Graphics 620]
 
 pci:v00008086d00003EA0sv00001028sd0000089E*
  ID_MODEL_FROM_DATABASE=WhiskeyLake-U GT2 [UHD Graphics 620] (Inspiron 5482)
 
+pci:v00008086d00003EA1*
+ ID_MODEL_FROM_DATABASE=Whiskey Lake-U GT1 [UHD Graphics 610]
+
 pci:v00008086d00003EA5*
  ID_MODEL_FROM_DATABASE=CoffeeLake-U GT3e [Iris Plus Graphics 655]
 
+pci:v00008086d00003EA6*
+ ID_MODEL_FROM_DATABASE=Coffee Lake-U GT3 [Iris Plus Graphics 645]
+
+pci:v00008086d00003EA8*
+ ID_MODEL_FROM_DATABASE=Coffee Lake-U GT3 [Iris Plus Graphics 655]
+
+pci:v00008086d00003EA9*
+ ID_MODEL_FROM_DATABASE=Coffee Lake-U GT2 [UHD Graphics 620]
+
 pci:v00008086d00003EC2*
  ID_MODEL_FROM_DATABASE=8th Gen Core Processor Host Bridge/DRAM Registers
 
@@ -94826,6 +97328,9 @@
 pci:v00008086d000043E8*
  ID_MODEL_FROM_DATABASE=Tiger Lake-H Serial IO I2C Controller #0
 
+pci:v00008086d000043E9*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Serial IO I2C Controller #1
+
 pci:v00008086d000043ED*
  ID_MODEL_FROM_DATABASE=Tiger Lake-H USB 3.2 Gen 2x1 xHCI Host Controller
 
@@ -94847,51 +97352,99 @@
 pci:v00008086d000043F0sv00008086sd000002A4*
  ID_MODEL_FROM_DATABASE=Tiger Lake PCH CNVi WiFi (Wireless-AC 9462)
 
+pci:v00008086d000043FC*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Integrated Sensor Hub
+
 pci:v00008086d0000444E*
  ID_MODEL_FROM_DATABASE=Turbo Memory Controller
 
+pci:v00008086d00004511*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake Gaussian and Neural Accelerator
+
+pci:v00008086d00004538*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake PCI-e Root Complex
+
+pci:v00008086d00004555*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake [UHD Graphics Gen11 16EU]
+
+pci:v00008086d00004571*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake [UHD Graphics Gen11 32EU]
+
 pci:v00008086d0000460D*
  ID_MODEL_FROM_DATABASE=12th Gen Core Processor PCI Express x16 Controller #1
 
 pci:v00008086d0000461D*
  ID_MODEL_FROM_DATABASE=Alder Lake Innovation Platform Framework Processor Participant
 
+pci:v00008086d0000461Dsv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake Innovation Platform Framework Processor Participant (Precision 3571)
+
 pci:v00008086d0000461E*
  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 USB Controller
 
+pci:v00008086d0000461Esv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 USB Controller (Precision 3571)
+
 pci:v00008086d0000461F*
  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #3
 
 pci:v00008086d00004626*
  ID_MODEL_FROM_DATABASE=Alder Lake-P Integrated Graphics Controller
 
+pci:v00008086d00004628*
+ ID_MODEL_FROM_DATABASE=Alder Lake-UP3 GT2 [UHD Graphics]
+
 pci:v00008086d00004629*
  ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers
 
+pci:v00008086d0000462A*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [UHD Graphics]
+
 pci:v00008086d0000462F*
  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #2
 
+pci:v00008086d00004636*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [UHD Graphics]
+
+pci:v00008086d00004638*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [UHD Graphics]
+
+pci:v00008086d0000463A*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [UHD Graphics]
+
 pci:v00008086d0000463D*
  ID_MODEL_FROM_DATABASE=12th Gen Core Processor PCI Express x4 Controller #2
 
 pci:v00008086d0000463E*
  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 NHI #0
 
+pci:v00008086d0000463Esv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 NHI #0 (Precision 3571)
+
 pci:v00008086d0000463F*
  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #1
 
 pci:v00008086d00004641*
  ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers
 
+pci:v00008086d00004641sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers (Precision 3571)
+
 pci:v00008086d0000464D*
  ID_MODEL_FROM_DATABASE=12th Gen Core Processor PCI Express x4 Controller #0
 
 pci:v00008086d0000464F*
  ID_MODEL_FROM_DATABASE=12th Gen Core Processor Gaussian & Neural Accelerator
 
+pci:v00008086d0000464Fsv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=12th Gen Core Processor Gaussian & Neural Accelerator (Precision 3571)
+
 pci:v00008086d00004660*
  ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers
 
+pci:v00008086d00004668*
+ ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers
+
 pci:v00008086d0000466D*
  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 NHI #1
 
@@ -94907,6 +97460,27 @@
 pci:v00008086d00004680*
  ID_MODEL_FROM_DATABASE=AlderLake-S GT1
 
+pci:v00008086d00004682*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S GT1 [UHD Graphics 730]
+
+pci:v00008086d00004688*
+ ID_MODEL_FROM_DATABASE=Alder Lake-HX GT1 [UHD Graphics 770]
+
+pci:v00008086d0000468A*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S [UHD Graphics]
+
+pci:v00008086d0000468B*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S [UHD Graphics]
+
+pci:v00008086d00004690*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S GT1 [UHD Graphics 770]
+
+pci:v00008086d00004692*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S GT1 [UHD Graphics 730]
+
+pci:v00008086d00004693*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S GT1 [UHD Graphics 710]
+
 pci:v00008086d000046A0*
  ID_MODEL_FROM_DATABASE=AlderLake-P GT2
 
@@ -94919,9 +97493,48 @@
 pci:v00008086d000046A6*
  ID_MODEL_FROM_DATABASE=Alder Lake-P Integrated Graphics Controller
 
+pci:v00008086d000046A8*
+ ID_MODEL_FROM_DATABASE=Alder Lake-UP3 GT2 [Iris Xe Graphics]
+
+pci:v00008086d000046AA*
+ ID_MODEL_FROM_DATABASE=Alder Lake-UP4 GT2 [Iris Xe Graphics]
+
+pci:v00008086d000046B0*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [Iris Xe Graphics]
+
+pci:v00008086d000046B1*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [Iris Xe Graphics]
+
+pci:v00008086d000046B3*
+ ID_MODEL_FROM_DATABASE=Alder Lake-UP3 GT1 [UHD Graphics]
+
+pci:v00008086d000046B6*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [Iris Xe Graphics]
+
+pci:v00008086d000046B8*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [Iris Xe Graphics]
+
+pci:v00008086d000046BA*
+ ID_MODEL_FROM_DATABASE=AlderLake-P [Iris Xe Graphics]
+
 pci:v00008086d000046C0*
  ID_MODEL_FROM_DATABASE=AlderLake-M GT1
 
+pci:v00008086d000046C1*
+ ID_MODEL_FROM_DATABASE=AlderLake-M [Iris Xe Graphics]
+
+pci:v00008086d000046C3*
+ ID_MODEL_FROM_DATABASE=Alder Lake-UP4 GT1 [UHD Graphics]
+
+pci:v00008086d000046D0*
+ ID_MODEL_FROM_DATABASE=Alder Lake-N [UHD Graphics]
+
+pci:v00008086d000046D1*
+ ID_MODEL_FROM_DATABASE=Alder Lake-N [UHD Graphics]
+
+pci:v00008086d000046D2*
+ ID_MODEL_FROM_DATABASE=Alder Lake-N [UHD Graphics]
+
 pci:v00008086d00004905*
  ID_MODEL_FROM_DATABASE=DG1 [Iris Xe MAX Graphics]
 
@@ -94937,6 +97550,42 @@
 pci:v00008086d00004908*
  ID_MODEL_FROM_DATABASE=DG1 [Iris Xe Graphics]
 
+pci:v00008086d00004909*
+ ID_MODEL_FROM_DATABASE=DG1 [Iris Xe MAX 100]
+
+pci:v00008086d00004B00*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake eSPI Controller
+
+pci:v00008086d00004B23*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake SMBus Controller
+
+pci:v00008086d00004B24*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake SPI (Flash) Controller
+
+pci:v00008086d00004B38*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake PCH PCI Express Root Port #0
+
+pci:v00008086d00004B39*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake PCH PCI Express Root Port #1
+
+pci:v00008086d00004B3E*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake PCH PCI Express Root Port #6
+
+pci:v00008086d00004B58*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake High Density Audio bus interface
+
+pci:v00008086d00004B63*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake SATA AHCI
+
+pci:v00008086d00004B70*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake Management Engine Interface
+
+pci:v00008086d00004B7D*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake USB 3.10 XHCI
+
+pci:v00008086d00004B7F*
+ ID_MODEL_FROM_DATABASE=Elkhart Lake PMC SRAM
+
 pci:v00008086d00004C3D*
  ID_MODEL_FROM_DATABASE=Volume Management Device NVMe RAID Controller
 
@@ -94997,6 +97646,15 @@
 pci:v00008086d00004F82*
  ID_MODEL_FROM_DATABASE=DG2
 
+pci:v00008086d00004F90*
+ ID_MODEL_FROM_DATABASE=DG2 Audio Controller
+
+pci:v00008086d00004F91*
+ ID_MODEL_FROM_DATABASE=DG2 Audio Controller
+
+pci:v00008086d00004F92*
+ ID_MODEL_FROM_DATABASE=DG2 Audio Controller
+
 pci:v00008086d00005001*
  ID_MODEL_FROM_DATABASE=LE80578
 
@@ -95144,18 +97802,30 @@
 pci:v00008086d00005182*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH eSPI Controller
 
+pci:v00008086d00005182sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCH eSPI Controller (Precision 3571)
+
 pci:v00008086d000051A3*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH-P SMBus Host Controller
 
+pci:v00008086d000051A3sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCH-P SMBus Host Controller (Precision 3571)
+
 pci:v00008086d000051A4*
  ID_MODEL_FROM_DATABASE=Alder Lake-P PCH SPI Controller
 
+pci:v00008086d000051A4sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P PCH SPI Controller (Precision 3571)
+
 pci:v00008086d000051A8*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH UART #0
 
 pci:v00008086d000051A9*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH UART #1
 
+pci:v00008086d000051B1*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCI Express x1 Root Port #10
+
 pci:v00008086d000051BF*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH-P PCI Express Root Port #9
 
@@ -95168,18 +97838,45 @@
 pci:v00008086d000051C8*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH-P High Definition Audio Controller
 
+pci:v00008086d000051C8sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCH-P High Definition Audio Controller (Precision 3571)
+
 pci:v00008086d000051D3*
  ID_MODEL_FROM_DATABASE=Alder Lake-P SATA AHCI Controller
 
+pci:v00008086d000051D3sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P SATA AHCI Controller (Precision 3571)
+
+pci:v00008086d000051D8*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #2
+
+pci:v00008086d000051D9*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #3
+
 pci:v00008086d000051E0*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH HECI Controller
 
+pci:v00008086d000051E0sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCH HECI Controller (Precision 3571)
+
+pci:v00008086d000051E3*
+ ID_MODEL_FROM_DATABASE=Alder Lake AMT SOL Redirection
+
+pci:v00008086d000051E3sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake AMT SOL Redirection (Precision 3571)
+
 pci:v00008086d000051E8*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH Serial IO I2C Controller #0
 
+pci:v00008086d000051E8sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCH Serial IO I2C Controller #0 (Precision 3571)
+
 pci:v00008086d000051E9*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH Serial IO I2C Controller #1
 
+pci:v00008086d000051E9sv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCH Serial IO I2C Controller #1 (Precision 3571)
+
 pci:v00008086d000051EA*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH Serial IO I2C Controller #2
 
@@ -95189,9 +97886,15 @@
 pci:v00008086d000051ED*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH USB 3.2 xHCI Host Controller
 
+pci:v00008086d000051EDsv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCH USB 3.2 xHCI Host Controller (Precision 3571)
+
 pci:v00008086d000051EF*
  ID_MODEL_FROM_DATABASE=Alder Lake PCH Shared SRAM
 
+pci:v00008086d000051EFsv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake PCH Shared SRAM (Precision 3571)
+
 pci:v00008086d000051F0*
  ID_MODEL_FROM_DATABASE=Alder Lake-P PCH CNVi WiFi
 
@@ -95204,9 +97907,21 @@
 pci:v00008086d000051F0sv00008086sd00000074*
  ID_MODEL_FROM_DATABASE=Alder Lake-P PCH CNVi WiFi (Wi-Fi 6 AX201 160MHz)
 
+pci:v00008086d000051F0sv00008086sd00000094*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P PCH CNVi WiFi (Wi-Fi 6E AX211 160MHz)
+
 pci:v00008086d000051F0sv00008086sd00004070*
  ID_MODEL_FROM_DATABASE=Alder Lake-P PCH CNVi WiFi (Wi-Fi 6 AX201 160MHz)
 
+pci:v00008086d000051F0sv00008086sd00004090*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P PCH CNVi WiFi (Wi-Fi 6E AX211 160MHz)
+
+pci:v00008086d000051FC*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P Integrated Sensor Hub
+
+pci:v00008086d000051FCsv00001028sd00000B10*
+ ID_MODEL_FROM_DATABASE=Alder Lake-P Integrated Sensor Hub (Precision 3571)
+
 pci:v00008086d00005200*
  ID_MODEL_FROM_DATABASE=EtherExpress PRO/100 Intelligent Server PCI Bridge
 
@@ -95222,8 +97937,68 @@
 pci:v00008086d00005502*
  ID_MODEL_FROM_DATABASE=Ethernet Controller (2) I225-LMvP
 
-pci:v00008086d00005504*
- ID_MODEL_FROM_DATABASE=Ethernet Controller I226-K
+pci:v00008086d00005502sv00001AB6sd00000225*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller (2) I225-LMvP (TS4 On-Board 2.5GbE Ethernet Adaptor)
+
+pci:v00008086d00005690*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A770M]
+
+pci:v00008086d00005691*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A730M]
+
+pci:v00008086d00005692*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A550M]
+
+pci:v00008086d00005693*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A370M]
+
+pci:v00008086d00005694*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A350M]
+
+pci:v00008086d00005695*
+ ID_MODEL_FROM_DATABASE=DG2 [Iris Xe MAX A200M]
+
+pci:v00008086d000056A0*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A770]
+
+pci:v00008086d000056A1*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A750]
+
+pci:v00008086d000056A2*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A580]
+
+pci:v00008086d000056A5*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A380]
+
+pci:v00008086d000056A6*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc A310]
+
+pci:v00008086d000056B0*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc Pro A30M]
+
+pci:v00008086d000056B1*
+ ID_MODEL_FROM_DATABASE=DG2 [Arc Pro A40/A50]
+
+pci:v00008086d000056C0*
+ ID_MODEL_FROM_DATABASE=Data Center GPU Flex 170
+
+pci:v00008086d000056C1*
+ ID_MODEL_FROM_DATABASE=Data Center GPU Flex 140
+
+pci:v00008086d0000579C*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E825-C for backplane
+
+pci:v00008086d0000579D*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E825-C for QSFP
+
+pci:v00008086d0000579E*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection E825-C for SFP
+
+pci:v00008086d000057B1*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E610 1GBASE T
+
+pci:v00008086d000057B1sv00008086sd00000000*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E610 1GBASE T (Ethernet Converged Network Adapter E610)
 
 pci:v00008086d00005845*
  ID_MODEL_FROM_DATABASE=QEMU NVM Express Controller
@@ -95255,9 +98030,15 @@
 pci:v00008086d00005905*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v6/7th Gen Core Processor PCIe Controller (x8)
 
+pci:v00008086d00005906*
+ ID_MODEL_FROM_DATABASE=HD Graphics 610
+
 pci:v00008086d00005909*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v6/7th Gen Core Processor PCIe Controller (x4)
 
+pci:v00008086d0000590B*
+ ID_MODEL_FROM_DATABASE=HD Graphics 610
+
 pci:v00008086d0000590C*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
 
@@ -95324,6 +98105,9 @@
 pci:v00008086d0000591F*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
 
+pci:v00008086d00005921*
+ ID_MODEL_FROM_DATABASE=HD Graphics 620
+
 pci:v00008086d00005923*
  ID_MODEL_FROM_DATABASE=HD Graphics 635
 
@@ -95334,7 +98118,7 @@
  ID_MODEL_FROM_DATABASE=Iris Plus Graphics 650
 
 pci:v00008086d00005A84*
- ID_MODEL_FROM_DATABASE=Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller
+ ID_MODEL_FROM_DATABASE=Apollo Lake [HD Graphics 505]
 
 pci:v00008086d00005A85*
  ID_MODEL_FROM_DATABASE=HD Graphics 500
@@ -96044,6 +98828,9 @@
 pci:v00008086d00007000*
  ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II]
 
+pci:v00008086d00007000sv000001DEsd0000FFFD*
+ ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II] (Propolis Virtual PIIX3 ISA Controller)
+
 pci:v00008086d00007000sv00001AF4sd00001100*
  ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II] (Qemu virtual machine)
 
@@ -96095,6 +98882,9 @@
 pci:v00008086d00007113*
  ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI
 
+pci:v00008086d00007113sv000001DEsd0000FFFC*
+ ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI (Propolis Virtual PIIX4 PM Controller)
+
 pci:v00008086d00007113sv000015ADsd00001976*
  ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI (Virtual Machine Chipset)
 
@@ -96263,6 +99053,9 @@
 pci:v00008086d00007360*
  ID_MODEL_FROM_DATABASE=XMM7360 LTE Advanced Modem
 
+pci:v00008086d00007560*
+ ID_MODEL_FROM_DATABASE=XMM7560 LTE Advanced Pro Modem
+
 pci:v00008086d00007600*
  ID_MODEL_FROM_DATABASE=82372FB PIIX5 ISA
 
@@ -96311,14 +99104,47 @@
 pci:v00008086d00007AA7*
  ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Shared SRAM
 
+pci:v00008086d00007AA8*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Serial IO UART #0
+
+pci:v00008086d00007AAB*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Serial IO SPI Controller #1
+
+pci:v00008086d00007AB0*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #9
+
 pci:v00008086d00007AB4*
  ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #13
 
+pci:v00008086d00007AB8*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #1
+
+pci:v00008086d00007AB9*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #2
+
+pci:v00008086d00007ABC*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #5
+
 pci:v00008086d00007ABD*
  ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #6
 
+pci:v00008086d00007ABF*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #8
+
+pci:v00008086d00007AC8*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #25
+
 pci:v00008086d00007ACC*
- ID_MODEL_FROM_DATABASE=Alder Lake-S PCH I2C Controller #0
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Serial IO I2C Controller #0
+
+pci:v00008086d00007ACD*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Serial IO I2C Controller #1
+
+pci:v00008086d00007ACE*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Serial IO I2C Controller #2
+
+pci:v00008086d00007ACF*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Serial IO I2C Controller #3
 
 pci:v00008086d00007AD0*
  ID_MODEL_FROM_DATABASE=Alder Lake-S HD Audio Controller
@@ -96335,9 +99161,102 @@
 pci:v00008086d00007AF0*
  ID_MODEL_FROM_DATABASE=Alder Lake-S PCH CNVi WiFi
 
+pci:v00008086d00007AF0sv00008086sd00000034*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH CNVi WiFi (Wireless-AC 9560)
+
+pci:v00008086d00007AF0sv00008086sd00000070*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH CNVi WiFi (Wi-Fi 6 AX201 160MHz)
+
 pci:v00008086d00007AF0sv00008086sd00000094*
  ID_MODEL_FROM_DATABASE=Alder Lake-S PCH CNVi WiFi (Wi-Fi 6 AX201 160MHz)
 
+pci:v00008086d00007AFC*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Serial IO I2C Controller #4
+
+pci:v00008086d00007AFD*
+ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Serial IO I2C Controller #5
+
+pci:v00008086d00007D0B*
+ ID_MODEL_FROM_DATABASE=Volume Management Device NVMe RAID Controller Intel Corporation
+
+pci:v00008086d00007E01*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P LPC/eSPI Controller
+
+pci:v00008086d00007E22*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P SMBus Controller
+
+pci:v00008086d00007E23*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P SPI Controller
+
+pci:v00008086d00007E24*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Trace Hub
+
+pci:v00008086d00007E25*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO UART Controller #0
+
+pci:v00008086d00007E26*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO UART Controller #1
+
+pci:v00008086d00007E27*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO SPI Controller #0
+
+pci:v00008086d00007E28*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P HD Audio Controller
+
+pci:v00008086d00007E30*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO SPI Controller #1
+
+pci:v00008086d00007E46*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO SPI Controller #2
+
+pci:v00008086d00007E50*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO I2C Controller #4
+
+pci:v00008086d00007E51*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO I2C Controller #5
+
+pci:v00008086d00007E52*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO UART Controller #2
+
+pci:v00008086d00007E78*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO I2C Controller #0
+
+pci:v00008086d00007E79*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO I2C Controller #1
+
+pci:v00008086d00007E7A*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO I2C Controller #2
+
+pci:v00008086d00007E7B*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Serial IO I2C Controller #3
+
+pci:v00008086d00007E7D*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P USB 3.2 Gen 2x1 xHCI Host Controller
+
+pci:v00008086d00007E7E*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P USB Device Controller
+
+pci:v00008086d00007EC0*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Thunderbolt 4 USB Controller
+
+pci:v00008086d00007EC2*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Thunderbolt 4 NHI #0
+
+pci:v00008086d00007EC3*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Thunderbolt 4 NHI #1
+
+pci:v00008086d00007EC4*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Thunderbolt 4 PCI Express Root Port #0
+
+pci:v00008086d00007EC5*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Thunderbolt 4 PCI Express Root Port #1
+
+pci:v00008086d00007EC6*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Thunderbolt 4 PCI Express Root Port #2
+
+pci:v00008086d00007EC7*
+ ID_MODEL_FROM_DATABASE=Meteor Lake-P Thunderbolt 4 PCI Express Root Port #3
+
 pci:v00008086d00008002*
  ID_MODEL_FROM_DATABASE=Trusted Execution Technology Registers
 
@@ -96467,6 +99386,9 @@
 pci:v00008086d000087C0*
  ID_MODEL_FROM_DATABASE=UHD Graphics 617
 
+pci:v00008086d000087CA*
+ ID_MODEL_FROM_DATABASE=UHD Graphics 617
+
 pci:v00008086d00008800*
  ID_MODEL_FROM_DATABASE=Platform Controller Hub EG20T PCI Express Port
 
@@ -96545,9 +99467,15 @@
 pci:v00008086d00008819*
  ID_MODEL_FROM_DATABASE=Platform Controller Hub EG20T IEEE 1588 Hardware Assist
 
+pci:v00008086d00008A03*
+ ID_MODEL_FROM_DATABASE=Processor Power and Thermal Controller
+
 pci:v00008086d00008A0D*
  ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 NHI #1
 
+pci:v00008086d00008A11*
+ ID_MODEL_FROM_DATABASE=GNA Scoring Accelerator Module
+
 pci:v00008086d00008A12*
  ID_MODEL_FROM_DATABASE=Ice Lake-LP Processor Host Bridge/DRAM Registers
 
@@ -96587,6 +99515,9 @@
 pci:v00008086d00008A56*
  ID_MODEL_FROM_DATABASE=Iris Plus Graphics G1 (Ice Lake)
 
+pci:v00008086d00008A58*
+ ID_MODEL_FROM_DATABASE=Ice Lake-Y GT1 [UHD Graphics G1]
+
 pci:v00008086d00008A5A*
  ID_MODEL_FROM_DATABASE=Iris Plus Graphics G4 (Ice Lake)
 
@@ -97331,6 +100262,12 @@
 pci:v00008086d000096A1*
  ID_MODEL_FROM_DATABASE=Integrated RAID
 
+pci:v00008086d00009840*
+ ID_MODEL_FROM_DATABASE=Lakefield GT2 [UHD Graphics]
+
+pci:v00008086d00009841*
+ ID_MODEL_FROM_DATABASE=Lakefield GT1.5 [UHD Graphics]
+
 pci:v00008086d00009A01*
  ID_MODEL_FROM_DATABASE=11th Gen Core Processor PCIe Controller #1
 
@@ -97406,6 +100343,9 @@
 pci:v00008086d00009A36*
  ID_MODEL_FROM_DATABASE=11th Gen Core Processor Host Bridge/DRAM Registers
 
+pci:v00008086d00009A40*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-UP4 GT2 [Iris Xe Graphics]
+
 pci:v00008086d00009A49*
  ID_MODEL_FROM_DATABASE=TigerLake-LP GT2 [Iris Xe Graphics]
 
@@ -97415,6 +100355,15 @@
 pci:v00008086d00009A68*
  ID_MODEL_FROM_DATABASE=TigerLake-H GT1 [UHD Graphics]
 
+pci:v00008086d00009A70*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H GT1 [UHD Graphics]
+
+pci:v00008086d00009A78*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP GT2 [UHD Graphics G4]
+
+pci:v00008086d00009B21*
+ ID_MODEL_FROM_DATABASE=Comet Lake-U GT2 [UHD Graphics 620]
+
 pci:v00008086d00009B33*
  ID_MODEL_FROM_DATABASE=Comet Lake-S 6c Host Bridge/DRAM Controller
 
@@ -97427,6 +100376,9 @@
 pci:v00008086d00009B41sv00001028sd000009BE*
  ID_MODEL_FROM_DATABASE=CometLake-U GT2 [UHD Graphics] (Latitude 7410)
 
+pci:v00008086d00009B43*
+ ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
+
 pci:v00008086d00009B44*
  ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
 
@@ -97448,21 +100400,42 @@
 pci:v00008086d00009B64*
  ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
 
+pci:v00008086d00009BA4*
+ ID_MODEL_FROM_DATABASE=Comet Lake-H GT1 [UHD Graphics 610]
+
 pci:v00008086d00009BA8*
  ID_MODEL_FROM_DATABASE=CometLake-S GT1 [UHD Graphics 610]
 
+pci:v00008086d00009BAA*
+ ID_MODEL_FROM_DATABASE=Comet Lake UHD Graphics
+
+pci:v00008086d00009BAC*
+ ID_MODEL_FROM_DATABASE=Comet Lake UHD Graphics
+
 pci:v00008086d00009BC4*
  ID_MODEL_FROM_DATABASE=CometLake-H GT2 [UHD Graphics]
 
 pci:v00008086d00009BC5*
  ID_MODEL_FROM_DATABASE=CometLake-S GT2 [UHD Graphics 630]
 
+pci:v00008086d00009BC6*
+ ID_MODEL_FROM_DATABASE=Comet Lake-S GT2 [UHD Graphics P630]
+
 pci:v00008086d00009BC8*
  ID_MODEL_FROM_DATABASE=CometLake-S GT2 [UHD Graphics 630]
 
 pci:v00008086d00009BCA*
  ID_MODEL_FROM_DATABASE=Comet Lake UHD Graphics
 
+pci:v00008086d00009BCC*
+ ID_MODEL_FROM_DATABASE=Comet Lake UHD Graphics
+
+pci:v00008086d00009BE6*
+ ID_MODEL_FROM_DATABASE=Comet Lake-S GT2 [UHD Graphics P630]
+
+pci:v00008086d00009BF6*
+ ID_MODEL_FROM_DATABASE=Coffee Lake-S GT2 [UHD Graphics P630]
+
 pci:v00008086d00009C00*
  ID_MODEL_FROM_DATABASE=8 Series SATA Controller 1 [IDE mode]
 
@@ -98399,6 +101372,9 @@
 pci:v00008086d0000A0C8*
  ID_MODEL_FROM_DATABASE=Tiger Lake-LP Smart Sound Technology Audio Controller
 
+pci:v00008086d0000A0D3*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP SATA Controller
+
 pci:v00008086d0000A0E0*
  ID_MODEL_FROM_DATABASE=Tiger Lake-LP Management Engine Interface
 
@@ -99371,9 +102347,57 @@
 pci:v00008086d0000A620*
  ID_MODEL_FROM_DATABASE=6400/6402 Advanced Memory Buffer (AMB)
 
+pci:v00008086d0000A720*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-P [UHD Graphics]
+
+pci:v00008086d0000A721*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-P [UHD Graphics]
+
+pci:v00008086d0000A77F*
+ ID_MODEL_FROM_DATABASE=Volume Management Device NVMe RAID Controller Intel Corporation
+
+pci:v00008086d0000A780*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-S GT1 [UHD Graphics 770]
+
+pci:v00008086d0000A781*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-S UHD Graphics
+
+pci:v00008086d0000A782*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-S UHD Graphics
+
+pci:v00008086d0000A783*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-S UHD Graphics
+
+pci:v00008086d0000A788*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-S UHD Graphics
+
+pci:v00008086d0000A789*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-S UHD Graphics
+
+pci:v00008086d0000A78A*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-S UHD Graphics
+
+pci:v00008086d0000A78B*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-S UHD Graphics
+
+pci:v00008086d0000A7A0*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-P [Iris Xe Graphics]
+
+pci:v00008086d0000A7A1*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-P [Iris Xe Graphics]
+
+pci:v00008086d0000A7A8*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-P [UHD Graphics]
+
+pci:v00008086d0000A7A9*
+ ID_MODEL_FROM_DATABASE=Raptor Lake-P [UHD Graphics]
+
 pci:v00008086d0000ABC0*
  ID_MODEL_FROM_DATABASE=Omni-Path Fabric Switch Silicon 100 Series
 
+pci:v00008086d0000AD0B*
+ ID_MODEL_FROM_DATABASE=Volume Management Device NVMe RAID Controller Intel Corporation
+
 pci:v00008086d0000B152*
  ID_MODEL_FROM_DATABASE=21152 PCI-to-PCI Bridge
 
@@ -99635,6 +102659,12 @@
 pci:v00008088d00001001*
  ID_MODEL_FROM_DATABASE=Ethernet Controller RP1000 for 10GbE SFP+
 
+pci:v00008088d00001001sv00001BD4sd00000084*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller RP1000 for 10GbE SFP+ ((lldp))
+
+pci:v00008088d00001001sv00001BD4sd00000085*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller RP1000 for 10GbE SFP+ (Ethernet Controller SP1000A for 10GBASE-T)
+
 pci:v00008088d00001001sv00008088sd00000000*
  ID_MODEL_FROM_DATABASE=Ethernet Controller RP1000 for 10GbE SFP+ (Ethernet Network Adaptor RP1000 for 10GbE SFP+)
 
@@ -99687,7 +102717,28 @@
  ID_MODEL_FROM_DATABASE=Mako Front Side Motor Controller [cPCI]
 
 pci:v00008848*
- ID_VENDOR_FROM_DATABASE=Wuxi Micro Innovation Integrated Circuit Design Co.,Ltd
+ ID_VENDOR_FROM_DATABASE=MUCSE
+
+pci:v00008848d00001000*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller N10 Series for 10GbE or 40GbE (Dual-port)
+
+pci:v00008848d00001001*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller N400 Series for 1GbE (Dual-port)
+
+pci:v00008848d00001020*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller N10 Series for 10GbE (Quad-port)
+
+pci:v00008848d00001021*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller N400 Series for 1GbE (Quad-port)
+
+pci:v00008848d00001060*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller N10 Series for 10GbE (8-port)
+
+pci:v00008848d00001080*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller N10 Series Virtual Function
+
+pci:v00008848d00001081*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller N400 Series Virtual Function
 
 pci:v00008866*
  ID_VENDOR_FROM_DATABASE=T-Square Design Inc.
@@ -100805,6 +103856,18 @@
 pci:v00009005d0000028Fsv00001BD4sd00000080*
  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0804M5R16iM)
 
+pci:v00009005d0000028Fsv00001BD4sd00000086*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RT0800M7E)
+
+pci:v00009005d0000028Fsv00001BD4sd00000087*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RT0800M7H)
+
+pci:v00009005d0000028Fsv00001BD4sd00000088*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RT0804M7R)
+
+pci:v00009005d0000028Fsv00001BD4sd00000089*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RT0808M7R)
+
 pci:v00009005d0000028Fsv00001CC4sd00000101*
  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (Ramaxel FBGF-RAD PM8204)
 
@@ -100955,6 +104018,9 @@
 pci:v00009005d0000028Fsv00009005sd00001472*
  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (SmartRAID 3258-16i /e)
 
+pci:v00009005d0000028Fsv00009005sd00001475*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (SmartRAID 3254-16e /e)
+
 pci:v00009005d0000028Fsv00009005sd000014A0*
  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (SmartRAID 3254-8i)
 
@@ -100964,12 +104030,27 @@
 pci:v00009005d0000028Fsv00009005sd000014A2*
  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (SmartRAID 3252-8i)
 
+pci:v00009005d0000028Fsv00009005sd000014A4*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (SmartRAID 3254-8i /e)
+
+pci:v00009005d0000028Fsv00009005sd000014A5*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (SmartRAID 3252-8i /e)
+
+pci:v00009005d0000028Fsv00009005sd000014A6*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (SmartRAID 3204-8i /e)
+
 pci:v00009005d0000028Fsv00009005sd000014C0*
  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (SmartHBA 2200-16i)
 
 pci:v00009005d0000028Fsv00009005sd000014C1*
  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (HBA 1200-16i)
 
+pci:v00009005d0000028Fsv00009005sd000014C3*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (HBA 1200-16e)
+
+pci:v00009005d0000028Fsv00009005sd000014C4*
+ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (HBA 1200-8e)
+
 pci:v00009005d00000410*
  ID_MODEL_FROM_DATABASE=AIC-9410W SAS (Razor HBA RAID)
 
@@ -101274,7 +104355,7 @@
  ID_MODEL_FROM_DATABASE=MCS9922 PCIe Multi-I/O Controller
 
 pci:v00009710d00009990*
- ID_MODEL_FROM_DATABASE=MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
+ ID_MODEL_FROM_DATABASE=MCS9990 PCIe to 4â€Port USB 2.0 Host Controller
 
 pci:v00009850*
  ID_VENDOR_FROM_DATABASE=3Com (wrong ID)
@@ -101315,6 +104396,21 @@
 pci:v00009D32d00001204*
  ID_MODEL_FROM_DATABASE=STAR1200E NVMe SSD
 
+pci:v00009D32d00001500*
+ ID_MODEL_FROM_DATABASE=STAR1500 PCIe NVMe SSD Controller
+
+pci:v00009D32d00001501*
+ ID_MODEL_FROM_DATABASE=STAR1500C NVMe SSD
+
+pci:v00009D32d00001502*
+ ID_MODEL_FROM_DATABASE=STAR1500E NVMe SSD
+
+pci:v00009D32d00002000*
+ ID_MODEL_FROM_DATABASE=STAR2000 NVMe Controller
+
+pci:v00009D32d00002001*
+ ID_MODEL_FROM_DATABASE=STAR2000E NVMe SSD
+
 pci:v0000A000*
  ID_VENDOR_FROM_DATABASE=Asix Electronics Corporation (Wrong ID)
 
@@ -101576,6 +104672,9 @@
 pci:v0000C0A9d00002263*
  ID_MODEL_FROM_DATABASE=P1 NVMe PCIe SSD
 
+pci:v0000C0A9d00005407*
+ ID_MODEL_FROM_DATABASE=P5 Plus NVMe PCIe SSD
+
 pci:v0000C0A9d0000540A*
  ID_MODEL_FROM_DATABASE=P2 NVMe PCIe SSD
 
@@ -101648,6 +104747,9 @@
 pci:v0000CF86d00000276*
  ID_MODEL_FROM_DATABASE=Spectrum-4TOR in Flash Recovery Mode
 
+pci:v0000D063*
+ ID_VENDOR_FROM_DATABASE=SolidRun
+
 pci:v0000D161*
  ID_VENDOR_FROM_DATABASE=Digium, Inc.
 
diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb
index c0e6f59..c2fbbc9 100644
--- a/hwdb.d/20-usb-vendor-model.hwdb
+++ b/hwdb.d/20-usb-vendor-model.hwdb
@@ -14,6 +14,9 @@
 usb:v0002p0002*
  ID_MODEL_FROM_DATABASE=passport00
 
+usb:v0002p7007*
+ ID_MODEL_FROM_DATABASE=HPRT XT300
+
 usb:v0003*
  ID_VENDOR_FROM_DATABASE=Club Mac
 
@@ -26,6 +29,15 @@
 usb:v0011p7788*
  ID_MODEL_FROM_DATABASE=counterfeit flash drive
 
+usb:v0040*
+ ID_VENDOR_FROM_DATABASE=Anyware Corporation
+
+usb:v0040p073D*
+ ID_MODEL_FROM_DATABASE=Mini Multimedia 2.4GHz Wireless Keyboard with Touch Pad
+
+usb:v0042*
+ ID_VENDOR_FROM_DATABASE=DMT
+
 usb:v0053*
  ID_VENDOR_FROM_DATABASE=Planex
 
@@ -122,6 +134,9 @@
 usb:v0218p0301*
  ID_MODEL_FROM_DATABASE=MIDI Port
 
+usb:v0231*
+ ID_VENDOR_FROM_DATABASE=Sonuus Limited
+
 usb:v02AD*
  ID_VENDOR_FROM_DATABASE=HUMAX Co., Ltd.
 
@@ -158,6 +173,12 @@
 usb:v03C3p120E*
  ID_MODEL_FROM_DATABASE=ASI120MC-S Planetary Camera
 
+usb:v03C3p1F10*
+ ID_MODEL_FROM_DATABASE=EFF
+
+usb:v03C3p294F*
+ ID_MODEL_FROM_DATABASE=ASI294MC Pro
+
 usb:v03D9*
  ID_VENDOR_FROM_DATABASE=Shenzhen Sinote Tech-Electron Co., Ltd
 
@@ -624,7 +645,7 @@
  ID_MODEL_FROM_DATABASE=Digital Drive Flash Reader
 
 usb:v03F0p022A*
- ID_MODEL_FROM_DATABASE=Laserjet CP1525nw
+ ID_MODEL_FROM_DATABASE=LaserJet CP1525nw/x
 
 usb:v03F0p0241*
  ID_MODEL_FROM_DATABASE=Link-5 micro dongle
@@ -773,6 +794,9 @@
 usb:v03F0p0817*
  ID_MODEL_FROM_DATABASE=LaserJet 3300
 
+usb:v03F0p0853*
+ ID_MODEL_FROM_DATABASE=ENVY 5000 series
+
 usb:v03F0p0901*
  ID_MODEL_FROM_DATABASE=ScanJet 2300c
 
@@ -1313,6 +1337,9 @@
 usb:v03F0p2D17*
  ID_MODEL_FROM_DATABASE=Printing Support
 
+usb:v03F0p2D2A*
+ ID_MODEL_FROM_DATABASE=LaserJet Pro MFP M225dw
+
 usb:v03F0p2E11*
  ID_MODEL_FROM_DATABASE=PSC 1000
 
@@ -1508,6 +1535,9 @@
 usb:v03F0p3E02*
  ID_MODEL_FROM_DATABASE=PhotoSmart 7550
 
+usb:v03F0p3E07*
+ ID_MODEL_FROM_DATABASE=x755w Flash Drive
+
 usb:v03F0p3E17*
  ID_MODEL_FROM_DATABASE=LaserJet P1006
 
@@ -1598,6 +1628,9 @@
 usb:v03F0p4811*
  ID_MODEL_FROM_DATABASE=PSC 1600
 
+usb:v03F0p484A*
+ ID_MODEL_FROM_DATABASE=Elite Dock G4
+
 usb:v03F0p4911*
  ID_MODEL_FROM_DATABASE=PSC 2350
 
@@ -2357,8 +2390,11 @@
 usb:v0403p6015*
  ID_MODEL_FROM_DATABASE=Bridge(I2C/SPI/UART/FIFO)
 
+usb:v0403p601E*
+ ID_MODEL_FROM_DATABASE=FT600 16-bit FIFO IC
+
 usb:v0403p601F*
- ID_MODEL_FROM_DATABASE=Myriad-RF LimeSDR-Mini
+ ID_MODEL_FROM_DATABASE=FT601 32-bit FIFO IC
 
 usb:v0403p6EE0*
  ID_MODEL_FROM_DATABASE=EZO Carrier Board
@@ -2627,6 +2663,9 @@
 usb:v0403pD578*
  ID_MODEL_FROM_DATABASE=Accesio USB-COM-4SM
 
+usb:v0403pD678*
+ ID_MODEL_FROM_DATABASE=GammaScout
+
 usb:v0403pD6F8*
  ID_MODEL_FROM_DATABASE=UNI Black BOX
 
@@ -3554,9 +3593,15 @@
 usb:v040Dp3184*
  ID_MODEL_FROM_DATABASE=VNT VT6656 USB-802.11 Wireless LAN Adapter
 
+usb:v040Dp340B*
+ ID_MODEL_FROM_DATABASE=FX-Audio DAC-X6
+
 usb:v040Dp340F*
  ID_MODEL_FROM_DATABASE=Audinst HUD-mx2
 
+usb:v040Dp6204*
+ ID_MODEL_FROM_DATABASE=Vectro VT6204 IDE bridge
+
 usb:v040Dp6205*
  ID_MODEL_FROM_DATABASE=USB 2.0 Card Reader
 
@@ -3966,7 +4011,7 @@
  ID_MODEL_FROM_DATABASE=SD Card Reader
 
 usb:v0416pB23C*
- ID_MODEL_FROM_DATABASE=KT108 keyboard
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard
 
 usb:v0416pC141*
  ID_MODEL_FROM_DATABASE=Barcode Scanner
@@ -4088,6 +4133,9 @@
 usb:v041Ep3040*
  ID_MODEL_FROM_DATABASE=SoundBlaster Live! 24-bit External SB0490
 
+usb:v041Ep3042*
+ ID_MODEL_FROM_DATABASE=Sound Blaster X-Fi Surround 5.1
+
 usb:v041Ep3060*
  ID_MODEL_FROM_DATABASE=Sound Blaster Audigy 2 ZS External
 
@@ -4136,6 +4184,9 @@
 usb:v041Ep3F07*
  ID_MODEL_FROM_DATABASE=E-Mu Xmidi 1x1
 
+usb:v041Ep3F0A*
+ ID_MODEL_FROM_DATABASE=E-Mu Tracker Pre
+
 usb:v041Ep3F0E*
  ID_MODEL_FROM_DATABASE=Xmidi 1x1 Tab
 
@@ -4320,7 +4371,7 @@
  ID_MODEL_FROM_DATABASE=Live! Cam Sync HD [VF0770]
 
 usb:v041Ep4097*
- ID_MODEL_FROM_DATABASE=Live! Cam Chat HD [VF0700]
+ ID_MODEL_FROM_DATABASE=Live! Cam Chat HD [VF0700/VF0790]
 
 usb:v041Ep4099*
  ID_MODEL_FROM_DATABASE=Creative VF0800 [RealSense Camera SR300]
@@ -4943,6 +4994,9 @@
 usb:v0424p0001*
  ID_MODEL_FROM_DATABASE=Integrated Hub
 
+usb:v0424p0007*
+ ID_MODEL_FROM_DATABASE=ULPI Transciever [USB3320]
+
 usb:v0424p0140*
  ID_MODEL_FROM_DATABASE=LPC47M14x hub
 
@@ -5216,6 +5270,9 @@
 usb:v0430p0100*
  ID_MODEL_FROM_DATABASE=3-button Mouse
 
+usb:v0430p0406*
+ ID_MODEL_FROM_DATABASE=KVM Switch
+
 usb:v0430p0502*
  ID_MODEL_FROM_DATABASE=Panasonic CF-19 HID Touch Panel
 
@@ -5738,6 +5795,9 @@
 usb:v043Dp01FA*
  ID_MODEL_FROM_DATABASE=S310 series
 
+usb:v043Dp020E*
+ ID_MODEL_FROM_DATABASE=RICOH Aficio SP 4410SF
+
 usb:v043Dp4303*
  ID_MODEL_FROM_DATABASE=Xerox WorkCentre Pro 412
 
@@ -6227,6 +6287,15 @@
 usb:v0456*
  ID_VENDOR_FROM_DATABASE=Analog Devices, Inc.
 
+usb:v0456p7031*
+ ID_MODEL_FROM_DATABASE=FX2 SPI/I2C Interface
+
+usb:v0456pB672*
+ ID_MODEL_FROM_DATABASE=Libiio based instrument [ADALM2000]
+
+usb:v0456pB673*
+ ID_MODEL_FROM_DATABASE=LibIIO based AD9363 Software Defined Radio [ADALM-PLUTO]
+
 usb:v0456pF000*
  ID_MODEL_FROM_DATABASE=FT2232 JTAG ICE [gnICE]
 
@@ -6530,6 +6599,9 @@
 usb:v0458p7029*
  ID_MODEL_FROM_DATABASE=Genius Look 320s (SN9C201 + HV7131R)
 
+usb:v0458p702C*
+ ID_MODEL_FROM_DATABASE=Trek 320R Camera
+
 usb:v0458p702F*
  ID_MODEL_FROM_DATABASE=Genius Slim 322
 
@@ -6963,7 +7035,7 @@
  ID_MODEL_FROM_DATABASE=Xbox360 Controller
 
 usb:v045Ep028F*
- ID_MODEL_FROM_DATABASE=Xbox360 Wireless Controller
+ ID_MODEL_FROM_DATABASE=Xbox360 Wireless Controller via Plug & Charge Cable
 
 usb:v045Ep0290*
  ID_MODEL_FROM_DATABASE=Xbox360 Performance Pipe (PIX)
@@ -7025,6 +7097,9 @@
 usb:v045Ep02DD*
  ID_MODEL_FROM_DATABASE=Xbox One Controller (Firmware 2015)
 
+usb:v045Ep02E0*
+ ID_MODEL_FROM_DATABASE=Xbox One Wireless Controller
+
 usb:v045Ep02E3*
  ID_MODEL_FROM_DATABASE=Xbox One Elite Controller
 
@@ -7037,6 +7112,12 @@
 usb:v045Ep02FD*
  ID_MODEL_FROM_DATABASE=Xbox One S Controller [Bluetooth]
 
+usb:v045Ep02FE*
+ ID_MODEL_FROM_DATABASE=Xbox Wireless Adapter for Windows
+
+usb:v045Ep02FF*
+ ID_MODEL_FROM_DATABASE=Xbox One S Controller [Bluetooth]
+
 usb:v045Ep0400*
  ID_MODEL_FROM_DATABASE=Windows Powered Pocket PC 2002
 
@@ -7601,6 +7682,21 @@
 usb:v045Ep0957*
  ID_MODEL_FROM_DATABASE=Hub
 
+usb:v045Ep097A*
+ ID_MODEL_FROM_DATABASE=Generic Superspeed Hub [Azure Kinect]
+
+usb:v045Ep097B*
+ ID_MODEL_FROM_DATABASE=Generic Hub [Azure Kinect]
+
+usb:v045Ep097C*
+ ID_MODEL_FROM_DATABASE=Azure Kinect Depth Camera
+
+usb:v045Ep097D*
+ ID_MODEL_FROM_DATABASE=Azure Kinect 4K Camera
+
+usb:v045Ep097E*
+ ID_MODEL_FROM_DATABASE=Azure Kinect Microphone Array
+
 usb:v045Ep09A0*
  ID_MODEL_FROM_DATABASE=RTL8153B GigE [Surface Ethernet Adapter]
 
@@ -7608,7 +7704,10 @@
  ID_MODEL_FROM_DATABASE=Surface Type Cover
 
 usb:v045Ep0A00*
- ID_MODEL_FROM_DATABASE=Lumia 950 Dual SIM (RM-1118)
+ ID_MODEL_FROM_DATABASE=Lumia 950 (RM-1104/RM-1118)
+
+usb:v045Ep0B00*
+ ID_MODEL_FROM_DATABASE=Xbox Elite Series 2 Controller (model 1797)
 
 usb:v045Ep0B12*
  ID_MODEL_FROM_DATABASE=Xbox Wireless Controller (model 1914)
@@ -7805,6 +7904,9 @@
 usb:v0461p4D62*
  ID_MODEL_FROM_DATABASE=HP Laser Mobile Mini Mouse
 
+usb:v0461p4D64*
+ ID_MODEL_FROM_DATABASE=Asus wired optical mouse - Model MOEWUO
+
 usb:v0461p4D75*
  ID_MODEL_FROM_DATABASE=Rocketfish RF-FLBTAD Bluetooth Adapter
 
@@ -7835,6 +7937,9 @@
 usb:v0461p4E22*
  ID_MODEL_FROM_DATABASE=Dell Mouse, 2 Buttons, Modell: MS111-P
 
+usb:v0461p4E26*
+ ID_MODEL_FROM_DATABASE=Asus wired keyboard - model KB73211
+
 usb:v0461p4E6F*
  ID_MODEL_FROM_DATABASE=Acer Wired Keyboard Model KBAY211
 
@@ -7910,15 +8015,87 @@
 usb:v046Ap0041*
  ID_MODEL_FROM_DATABASE=G86 6240 Keyboard
 
+usb:v046Ap0076*
+ ID_MODEL_FROM_DATABASE=MX-Board 3.0 G80-3850
+
+usb:v046Ap0077*
+ ID_MODEL_FROM_DATABASE=MX BOARD 3.0S FL NBL Keyboard
+
+usb:v046Ap0079*
+ ID_MODEL_FROM_DATABASE=MX BOARD 3.0S FL RGB Keyboard
+
 usb:v046Ap0080*
  ID_MODEL_FROM_DATABASE=eHealth Terminal ST 1503
 
 usb:v046Ap0081*
  ID_MODEL_FROM_DATABASE=eHealth Keyboard G87 1504
 
+usb:v046Ap0083*
+ ID_MODEL_FROM_DATABASE=MX BOARD 3.0S FL RGB (KOREAN) Keyboard
+
+usb:v046Ap0084*
+ ID_MODEL_FROM_DATABASE=eHealth Terminal ST1506
+
+usb:v046Ap0085*
+ ID_MODEL_FROM_DATABASE=eHealth PIN-Pad PP1516
+
 usb:v046Ap00A1*
  ID_MODEL_FROM_DATABASE=SmartCard Reader Keyboard KC 1000 SC
 
+usb:v046Ap00AB*
+ ID_MODEL_FROM_DATABASE=MX 1.0 FL BL Keyboard
+
+usb:v046Ap00AC*
+ ID_MODEL_FROM_DATABASE=MX BOARD 1.0 TKL RGB Keyboard
+
+usb:v046Ap00B7*
+ ID_MODEL_FROM_DATABASE=MX BOARD 8.0 TKL RGB Keyboard
+
+usb:v046Ap00BB*
+ ID_MODEL_FROM_DATABASE=MX BOARD 10.0 FL RGB Keyboard
+
+usb:v046Ap00C3*
+ ID_MODEL_FROM_DATABASE=G80 3000 TKL NBL Keyboard
+
+usb:v046Ap00C4*
+ ID_MODEL_FROM_DATABASE=MX BOARD 2.0S FL RGB Keyboard
+
+usb:v046Ap00C5*
+ ID_MODEL_FROM_DATABASE=G80 3000 TKL RGB Keyboard
+
+usb:v046Ap00C7*
+ ID_MODEL_FROM_DATABASE=MV BOARD 3.0 FL RGB
+
+usb:v046Ap00C9*
+ ID_MODEL_FROM_DATABASE=CCF MX 8.0 TKL BL Keyboard
+
+usb:v046Ap00CA*
+ ID_MODEL_FROM_DATABASE=CCF MX 1.0 TKL BL Keyboard
+
+usb:v046Ap00CB*
+ ID_MODEL_FROM_DATABASE=CCF MX 1.0 TKL NBL Keyboard
+
+usb:v046Ap00CD*
+ ID_MODEL_FROM_DATABASE=G80 3000 TKL NBL (KOREAN) Keyboard
+
+usb:v046Ap00CE*
+ ID_MODEL_FROM_DATABASE=MX BOARD 2.0S FL NBL Keyboard
+
+usb:v046Ap00D2*
+ ID_MODEL_FROM_DATABASE=MX 1.0 FL NBL Keyboard
+
+usb:v046Ap00D3*
+ ID_MODEL_FROM_DATABASE=MX 1.0 FL RGB Keyboard
+
+usb:v046Ap00DD*
+ ID_MODEL_FROM_DATABASE=G80-3000N RGB TKL Keyboard
+
+usb:v046Ap00DE*
+ ID_MODEL_FROM_DATABASE=G80-3000N FL RGB Keyboard
+
+usb:v046Ap00DF*
+ ID_MODEL_FROM_DATABASE=MX BOARD 10.0N FL RGB Keyboard
+
 usb:v046Ap0106*
  ID_MODEL_FROM_DATABASE=R-300 Wireless Mouse Receiver
 
@@ -7928,12 +8105,24 @@
 usb:v046Ap0180*
  ID_MODEL_FROM_DATABASE=Strait 3.0
 
+usb:v046Ap01A4*
+ ID_MODEL_FROM_DATABASE=MC 2.1 Mouse
+
+usb:v046Ap01A6*
+ ID_MODEL_FROM_DATABASE=MX BOARD 2.0S FL RGB DE Keyboard
+
 usb:v046ApB090*
  ID_MODEL_FROM_DATABASE=Keyboard
 
 usb:v046ApB091*
  ID_MODEL_FROM_DATABASE=Mouse
 
+usb:v046ApC099*
+ ID_MODEL_FROM_DATABASE=Stream Keyboard TKL
+
+usb:v046ApC110*
+ ID_MODEL_FROM_DATABASE=KC 4500 Ergo Keyboard
+
 usb:v046B*
  ID_VENDOR_FROM_DATABASE=American Megatrends, Inc.
 
@@ -8063,6 +8252,12 @@
 usb:v046Dp0837*
  ID_MODEL_FROM_DATABASE=BCC950 ConferenceCam
 
+usb:v046Dp0838*
+ ID_MODEL_FROM_DATABASE=BCC950 ConferenceCam audio
+
+usb:v046Dp0839*
+ ID_MODEL_FROM_DATABASE=BCC950 ConferenceCam integated hub
+
 usb:v046Dp0840*
  ID_MODEL_FROM_DATABASE=QuickCam Express
 
@@ -8096,6 +8291,9 @@
 usb:v046Dp085E*
  ID_MODEL_FROM_DATABASE=BRIO Ultra HD Webcam
 
+usb:v046Dp086B*
+ ID_MODEL_FROM_DATABASE=BRIO 4K Stream Edition
+
 usb:v046Dp0870*
  ID_MODEL_FROM_DATABASE=QuickCam Express
 
@@ -8429,6 +8627,9 @@
 usb:v046Dp0A4D*
  ID_MODEL_FROM_DATABASE=G430 Surround Sound Gaming Headset
 
+usb:v046Dp0A4F*
+ ID_MODEL_FROM_DATABASE=MINI BOOM
+
 usb:v046Dp0A5B*
  ID_MODEL_FROM_DATABASE=G933 Wireless Headset Dongle
 
@@ -8441,6 +8642,9 @@
 usb:v046Dp0A8F*
  ID_MODEL_FROM_DATABASE=H390 headset with microphone
 
+usb:v046Dp0A90*
+ ID_MODEL_FROM_DATABASE=Zone Receiver
+
 usb:v046Dp0AAA*
  ID_MODEL_FROM_DATABASE=Logitech G PRO X Gaming Headset
 
@@ -8678,6 +8882,9 @@
 usb:v046DpC084*
  ID_MODEL_FROM_DATABASE=G203 Gaming Mouse
 
+usb:v046DpC088*
+ ID_MODEL_FROM_DATABASE=G Pro Wireless gaming mouse (wired mode)
+
 usb:v046DpC08B*
  ID_MODEL_FROM_DATABASE=G502 SE HERO Gaming Mouse
 
@@ -9129,7 +9336,7 @@
  ID_MODEL_FROM_DATABASE=Cordless Mouse Receiver
 
 usb:v046DpC539*
- ID_MODEL_FROM_DATABASE=Cordless Mouse Receiver
+ ID_MODEL_FROM_DATABASE=Lightspeed Receiver
 
 usb:v046DpC53A*
  ID_MODEL_FROM_DATABASE=PowerPlay Wireless Charging System
@@ -9137,6 +9344,12 @@
 usb:v046DpC53D*
  ID_MODEL_FROM_DATABASE=G631 Keyboard
 
+usb:v046DpC542*
+ ID_MODEL_FROM_DATABASE=M185 compact wireless mouse
+
+usb:v046DpC548*
+ ID_MODEL_FROM_DATABASE=Logi Bolt Receiver
+
 usb:v046DpC603*
  ID_MODEL_FROM_DATABASE=3Dconnexion Spacemouse Plus XT
 
@@ -10031,6 +10244,9 @@
 usb:v047FpAD01*
  ID_MODEL_FROM_DATABASE=GameCom 777 5.1 Headset
 
+usb:v047FpAF00*
+ ID_MODEL_FROM_DATABASE=DA70
+
 usb:v047FpAF01*
  ID_MODEL_FROM_DATABASE=DA80
 
@@ -10043,6 +10259,9 @@
 usb:v047FpC03B*
  ID_MODEL_FROM_DATABASE=HD1
 
+usb:v047FpC053*
+ ID_MODEL_FROM_DATABASE=Blackwire C5220 headset (remote control and 3.5mm audio adapter)
+
 usb:v047FpCA01*
  ID_MODEL_FROM_DATABASE=Calisto 800 Series
 
@@ -10313,6 +10532,9 @@
 usb:v0483pA2E0*
  ID_MODEL_FROM_DATABASE=BMeasure instrument
 
+usb:v0483pA43F*
+ ID_MODEL_FROM_DATABASE=inbed.io - Unified Controller (Gen 2)
+
 usb:v0483pDF11*
  ID_MODEL_FROM_DATABASE=STM Device in DFU Mode
 
@@ -10385,6 +10607,15 @@
 usb:v0489pE055*
  ID_MODEL_FROM_DATABASE=BCM43142A0 broadcom bluetooth
 
+usb:v0489pE07A*
+ ID_MODEL_FROM_DATABASE=Broadcom BCM20702A1 Bluetooth
+
+usb:v0489pE0C8*
+ ID_MODEL_FROM_DATABASE=MediaTek MT7921 Bluetooth
+
+usb:v0489pE0CD*
+ ID_MODEL_FROM_DATABASE=MediaTek Bluetooth Adapter
+
 usb:v048A*
  ID_VENDOR_FROM_DATABASE=S-MOS Systems, Inc.
 
@@ -10409,6 +10640,12 @@
 usb:v048Dp1345*
  ID_MODEL_FROM_DATABASE=Multi Cardreader
 
+usb:v048Dp5702*
+ ID_MODEL_FROM_DATABASE=RGB LED Controller
+
+usb:v048Dp6008*
+ ID_MODEL_FROM_DATABASE=8291 RGB keyboard backlight controller
+
 usb:v048Dp8297*
  ID_MODEL_FROM_DATABASE=IT8297 RGB LED Controller
 
@@ -11033,6 +11270,9 @@
 usb:v04A7*
  ID_VENDOR_FROM_DATABASE=Visioneer
 
+usb:v04A7p0063*
+ ID_MODEL_FROM_DATABASE=Visioneer DocuMate 152i
+
 usb:v04A7p0100*
  ID_MODEL_FROM_DATABASE=StrobePro
 
@@ -13247,6 +13487,9 @@
 usb:v04A9p32DB*
  ID_MODEL_FROM_DATABASE=SELPHY CP1300
 
+usb:v04A9p3302*
+ ID_MODEL_FROM_DATABASE=SELPHY CP1500
+
 usb:v04AA*
  ID_VENDOR_FROM_DATABASE=DaeWoo Telecom, Ltd
 
@@ -13484,6 +13727,9 @@
 usb:v04B0p0430*
  ID_MODEL_FROM_DATABASE=D7100
 
+usb:v04B0p0434*
+ ID_MODEL_FROM_DATABASE=D610
+
 usb:v04B0p0436*
  ID_MODEL_FROM_DATABASE=D810
 
@@ -13532,6 +13778,9 @@
 usb:v04B3p301C*
  ID_MODEL_FROM_DATABASE=Enhanced Performance Keyboard
 
+usb:v04B3p301E*
+ ID_MODEL_FROM_DATABASE=Keyboard with UltraNav (SK-8845RC)
+
 usb:v04B3p3020*
  ID_MODEL_FROM_DATABASE=Enhanced Performance Keyboard
 
@@ -14351,6 +14600,9 @@
 usb:v04B8p1114*
  ID_MODEL_FROM_DATABASE=XP-440 [Expression Home Small-in-One Printer]
 
+usb:v04B8p1115*
+ ID_MODEL_FROM_DATABASE=ES-0133 [Expression Home XP-342]
+
 usb:v04B8p1129*
  ID_MODEL_FROM_DATABASE=ET-4750 [WorkForce ET-4750 EcoTank All-in-One]
 
@@ -14771,6 +15023,9 @@
 usb:v04CAp008A*
  ID_MODEL_FROM_DATABASE=Acer Wired Mouse Model SM-9023
 
+usb:v04CAp00F9*
+ ID_MODEL_FROM_DATABASE=Multimedia Keyboard
+
 usb:v04CAp1766*
  ID_MODEL_FROM_DATABASE=HID Monitor Controls
 
@@ -14813,6 +15068,9 @@
 usb:v04CAp7054*
  ID_MODEL_FROM_DATABASE=HP HD Webcam
 
+usb:v04CAp705A*
+ ID_MODEL_FROM_DATABASE=HD Webcam (960×540)
+
 usb:v04CAp9304*
  ID_MODEL_FROM_DATABASE=Hub
 
@@ -15218,6 +15476,12 @@
 usb:v04D6*
  ID_VENDOR_FROM_DATABASE=Mentor Graphics
 
+usb:v04D6pE301*
+ ID_MODEL_FROM_DATABASE=Bio-Key TouchLock XL All Weather Keyless Bio-Lock with Fingerprint Recognition
+
+usb:v04D6pE302*
+ ID_MODEL_FROM_DATABASE=ZC3202 [4GB Green Book Digital Quran Reading Pen For Home Teaching Quran]
+
 usb:v04D7*
  ID_VENDOR_FROM_DATABASE=Oki Semiconductor
 
@@ -15248,6 +15512,9 @@
 usb:v04D8p0036*
  ID_MODEL_FROM_DATABASE=PICkit Serial Analyzer
 
+usb:v04D8p00DD*
+ ID_MODEL_FROM_DATABASE=MCP2221(a) UART/I2C Bridge
+
 usb:v04D8p00E0*
  ID_MODEL_FROM_DATABASE=PIC32 Starter Board
 
@@ -15293,6 +15560,15 @@
 usb:v04D8pE11C*
  ID_MODEL_FROM_DATABASE=TL866CS EEPROM Programmer [MiniPRO]
 
+usb:v04D8pE72E*
+ ID_MODEL_FROM_DATABASE=YuanCon
+
+usb:v04D8pE7EE*
+ ID_MODEL_FROM_DATABASE=travisgeis.com Bike Light
+
+usb:v04D8pEC72*
+ ID_MODEL_FROM_DATABASE=Joystick with Rotary Switch Creative Electronics Ltd
+
 usb:v04D8pED16*
  ID_MODEL_FROM_DATABASE=BeamiRC 2.0 CNC remote controller analoge
 
@@ -15368,6 +15644,12 @@
 usb:v04D9p0129*
  ID_MODEL_FROM_DATABASE=Keyboard [KBPV8000]
 
+usb:v04D9p0169*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
+usb:v04D9p0198*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
 usb:v04D9p0348*
  ID_MODEL_FROM_DATABASE=Keyboard
 
@@ -16638,7 +16920,7 @@
  ID_MODEL_FROM_DATABASE=GT-I9100 / GT-C3350 Phones (USB Debugging mode)
 
 usb:v04E8p6860*
- ID_MODEL_FROM_DATABASE=Galaxy A5 (MTP)
+ ID_MODEL_FROM_DATABASE=Galaxy series, misc. (MTP mode)
 
 usb:v04E8p6863*
  ID_MODEL_FROM_DATABASE=Galaxy series, misc. (tethering mode)
@@ -17111,6 +17393,12 @@
 usb:v04F2pB681*
  ID_MODEL_FROM_DATABASE=ThinkPad T490 Webcam
 
+usb:v04F2pB71A*
+ ID_MODEL_FROM_DATABASE=Integrated IR Camera
+
+usb:v04F2pB76B*
+ ID_MODEL_FROM_DATABASE=SunplusIT Inc [HP HD Camera]
+
 usb:v04F3*
  ID_VENDOR_FROM_DATABASE=Elan Microelectronics Corp.
 
@@ -17162,6 +17450,9 @@
 usb:v04F3p0C28*
  ID_MODEL_FROM_DATABASE=fingerprint sensor [FeinTech FPS00200]
 
+usb:v04F3p0C3D*
+ ID_MODEL_FROM_DATABASE=Elan:Fingerprint
+
 usb:v04F3p2234*
  ID_MODEL_FROM_DATABASE=Touchscreen
 
@@ -17954,6 +18245,9 @@
 usb:v04F9p0248*
  ID_MODEL_FROM_DATABASE=DCP-7055 scanner/printer
 
+usb:v04F9p024A*
+ ID_MODEL_FROM_DATABASE=DCP-7065DN
+
 usb:v04F9p024E*
  ID_MODEL_FROM_DATABASE=MFC-7460DN
 
@@ -18782,6 +19076,9 @@
 usb:v04F9p204D*
  ID_MODEL_FROM_DATABASE=QL-720NW Label Printer (mass storage mode)
 
+usb:v04F9p2060*
+ ID_MODEL_FROM_DATABASE=PT-E550W P-touch Label Printer
+
 usb:v04F9p2061*
  ID_MODEL_FROM_DATABASE=PT-P700 P-touch Label Printer
 
@@ -19751,6 +20048,9 @@
 usb:v0536p01A0*
  ID_MODEL_FROM_DATABASE=PDT
 
+usb:v0536p01CA*
+ ID_MODEL_FROM_DATABASE=IT4800 Area Imager
+
 usb:v0537*
  ID_VENDOR_FROM_DATABASE=Inventec Corp.
 
@@ -20570,9 +20870,15 @@
 usb:v054Cp0541*
  ID_MODEL_FROM_DATABASE=DSC-HX100V [Cybershot Digital Still Camera]
 
+usb:v054Cp0568*
+ ID_MODEL_FROM_DATABASE=DSC-H100 in Mass Storage mode
+
 usb:v054Cp05C4*
  ID_MODEL_FROM_DATABASE=DualShock 4 [CUH-ZCT1x]
 
+usb:v054Cp0643*
+ ID_MODEL_FROM_DATABASE=DSC-H100 in PTP/MTP mode
+
 usb:v054Cp0689*
  ID_MODEL_FROM_DATABASE=Walkman NWZ-B173F
 
@@ -20612,9 +20918,15 @@
 usb:v054Cp094E*
  ID_MODEL_FROM_DATABASE=ILCE-6000 (aka Alpha-6000) in PC Remote mode
 
+usb:v054Cp098D*
+ ID_MODEL_FROM_DATABASE=Walkman NWZ-B183F
+
 usb:v054Cp0994*
  ID_MODEL_FROM_DATABASE=ILCE-6000 (aka Alpha-6000) in charging mode
 
+usb:v054Cp09C2*
+ ID_MODEL_FROM_DATABASE=D33021 Storage
+
 usb:v054Cp09CC*
  ID_MODEL_FROM_DATABASE=DualShock 4 [CUH-ZCT2x]
 
@@ -21725,12 +22037,24 @@
 usb:v056Ap03AC*
  ID_MODEL_FROM_DATABASE=DTH-W1620 [MobileStudio Pro 16] touchscreen
 
+usb:v056Ap03B2*
+ ID_MODEL_FROM_DATABASE=DTH167 [Cintiq Pro 16] tablet
+
+usb:v056Ap03B3*
+ ID_MODEL_FROM_DATABASE=DTH167 [Cintiq Pro 16] touchscreen
+
 usb:v056Ap03C5*
  ID_MODEL_FROM_DATABASE=CTL-4100WL [Intuos BT (S)]
 
 usb:v056Ap03C7*
  ID_MODEL_FROM_DATABASE=CTL-6100WL [Intuos BT (M)]
 
+usb:v056Ap03DC*
+ ID_MODEL_FROM_DATABASE=PTH-460 [Intuos Pro (S)] tablet
+
+usb:v056Ap03DD*
+ ID_MODEL_FROM_DATABASE=PTH-460 [Intuos Pro BT (S)] tablet
+
 usb:v056Ap0400*
  ID_MODEL_FROM_DATABASE=PenPartner 4x5
 
@@ -22250,6 +22574,9 @@
 usb:v0572p1328*
  ID_MODEL_FROM_DATABASE=TrendNet TFM-561 modem
 
+usb:v0572p1340*
+ ID_MODEL_FROM_DATABASE=CX93010 ACF Modem
+
 usb:v0572p1804*
  ID_MODEL_FROM_DATABASE=HP Dock Audio
 
@@ -22635,7 +22962,7 @@
  ID_MODEL_FROM_DATABASE=RVT-H Reader
 
 usb:v057Ep0305*
- ID_MODEL_FROM_DATABASE=Broadcom BCM2045A Bluetooth Radio [Nintendo Wii]
+ ID_MODEL_FROM_DATABASE=Broadcom BCM2045A Bluetooth Radio [Nintendo Wii/Wii U]
 
 usb:v057Ep0306*
  ID_MODEL_FROM_DATABASE=Wii Remote Controller RVL-003
@@ -22643,6 +22970,9 @@
 usb:v057Ep0337*
  ID_MODEL_FROM_DATABASE=Wii U GameCube Controller Adapter
 
+usb:v057Ep0341*
+ ID_MODEL_FROM_DATABASE=DRH GamePad Host [Nintendo Wii U]
+
 usb:v057Ep2000*
  ID_MODEL_FROM_DATABASE=Switch
 
@@ -23390,6 +23720,9 @@
 usb:v0584pB020*
  ID_MODEL_FROM_DATABASE=REX-USB60F
 
+usb:v0584pB022*
+ ID_MODEL_FROM_DATABASE=RTX-USB60F
+
 usb:v0585*
  ID_VENDOR_FROM_DATABASE=FlashPoint Technology, Inc.
 
@@ -24089,6 +24422,9 @@
 usb:v059Fp106E*
  ID_MODEL_FROM_DATABASE=Porsche Design Desktop Drive
 
+usb:v059Fp1093*
+ ID_MODEL_FROM_DATABASE=Rugged
+
 usb:v059Fp1094*
  ID_MODEL_FROM_DATABASE=Rugged THB
 
@@ -24185,6 +24521,9 @@
 usb:v05A6p0008*
  ID_MODEL_FROM_DATABASE=STA1520 Tuning Adapter
 
+usb:v05A6p0009*
+ ID_MODEL_FROM_DATABASE=Console
+
 usb:v05A6p0A00*
  ID_MODEL_FROM_DATABASE=Integrated Management Controller Hub
 
@@ -24216,7 +24555,7 @@
  ID_MODEL_FROM_DATABASE=SoundLink Color II speaker in DFU mode
 
 usb:v05A7p40FE*
- ID_MODEL_FROM_DATABASE=SoundLink Color II speaker
+ ID_MODEL_FROM_DATABASE=SoundLink Color II / Flex
 
 usb:v05A7pBC50*
  ID_MODEL_FROM_DATABASE=SoundLink Wireless Mobile speaker
@@ -24566,6 +24905,12 @@
 usb:v05ACp1008*
  ID_MODEL_FROM_DATABASE=Mini DisplayPort to Dual-Link DVI Adapter
 
+usb:v05ACp1009*
+ ID_MODEL_FROM_DATABASE=iBus Hub
+
+usb:v05ACp100C*
+ ID_MODEL_FROM_DATABASE=Nova Hub
+
 usb:v05ACp1101*
  ID_MODEL_FROM_DATABASE=Speakers
 
@@ -24695,6 +25040,9 @@
 usb:v05ACp129C*
  ID_MODEL_FROM_DATABASE=iPhone 4(CDMA)
 
+usb:v05ACp129D*
+ ID_MODEL_FROM_DATABASE=iPhone
+
 usb:v05ACp129E*
  ID_MODEL_FROM_DATABASE=iPod Touch 4.Gen
 
@@ -24704,6 +25052,9 @@
 usb:v05ACp12A0*
  ID_MODEL_FROM_DATABASE=iPhone 4S
 
+usb:v05ACp12A1*
+ ID_MODEL_FROM_DATABASE=iPhone
+
 usb:v05ACp12A2*
  ID_MODEL_FROM_DATABASE=iPad 2 (3G; 64GB)
 
@@ -24719,8 +25070,11 @@
 usb:v05ACp12A6*
  ID_MODEL_FROM_DATABASE=iPad 3 (3G, 16 GB)
 
+usb:v05ACp12A7*
+ ID_MODEL_FROM_DATABASE=TV Device
+
 usb:v05ACp12A8*
- ID_MODEL_FROM_DATABASE=iPhone 5/5C/5S/6/SE
+ ID_MODEL_FROM_DATABASE=iPhone 5/5C/5S/6/SE/7/8/X
 
 usb:v05ACp12A9*
  ID_MODEL_FROM_DATABASE=iPad 2
@@ -24731,6 +25085,15 @@
 usb:v05ACp12AB*
  ID_MODEL_FROM_DATABASE=iPad 4/Mini1
 
+usb:v05ACp12AC*
+ ID_MODEL_FROM_DATABASE=iPhone
+
+usb:v05ACp12AF*
+ ID_MODEL_FROM_DATABASE=Watch
+
+usb:v05ACp12B0*
+ ID_MODEL_FROM_DATABASE=HomePod
+
 usb:v05ACp1300*
  ID_MODEL_FROM_DATABASE=iPod Shuffle
 
@@ -24761,9 +25124,24 @@
 usb:v05ACp1402*
  ID_MODEL_FROM_DATABASE=Ethernet Adapter [A1277]
 
+usb:v05ACp1460*
+ ID_MODEL_FROM_DATABASE=Digital AV Multiport Adapter
+
+usb:v05ACp1461*
+ ID_MODEL_FROM_DATABASE=VGA Multiport Adapter
+
+usb:v05ACp1463*
+ ID_MODEL_FROM_DATABASE=HDMI Adapter
+
 usb:v05ACp1500*
  ID_MODEL_FROM_DATABASE=SuperDrive [A1379]
 
+usb:v05ACp1624*
+ ID_MODEL_FROM_DATABASE=Nova
+
+usb:v05ACp1625*
+ ID_MODEL_FROM_DATABASE=iBus
+
 usb:v05ACp8005*
  ID_MODEL_FROM_DATABASE=OHCI Root Hub Simulation
 
@@ -24845,6 +25223,9 @@
 usb:v05ACp828C*
  ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
 
+usb:v05ACp828D*
+ ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
+
 usb:v05ACp8290*
  ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
 
@@ -25262,6 +25643,9 @@
 usb:v05C8p03CB*
  ID_MODEL_FROM_DATABASE=HP Wide Vision HD Integrated Webcam
 
+usb:v05C8p03D2*
+ ID_MODEL_FROM_DATABASE=HP TrueVision HD Camera
+
 usb:v05C8p0403*
  ID_MODEL_FROM_DATABASE=Webcam
 
@@ -26132,6 +26516,9 @@
 usb:v05DCpB051*
  ID_MODEL_FROM_DATABASE=microSD RDR UHS-I Card Reader [LRWM03U-7000]
 
+usb:v05DCpB054*
+ ID_MODEL_FROM_DATABASE=Dual-Slot Reader [LRW400U]
+
 usb:v05DCpBA02*
  ID_MODEL_FROM_DATABASE=Workflow CFR1
 
@@ -26751,7 +27138,7 @@
  ID_MODEL_FROM_DATABASE=Mouse
 
 usb:v0603p8611*
- ID_MODEL_FROM_DATABASE=NTK96550 based camera
+ ID_MODEL_FROM_DATABASE=NTK96550-based camera (mass storage mode)
 
 usb:v0604*
  ID_VENDOR_FROM_DATABASE=Jean Co., Ltd
@@ -51843,7 +52230,7 @@
  ID_MODEL_FROM_DATABASE=URTC-1000
 
 usb:v1395*
- ID_VENDOR_FROM_DATABASE=Sennheiser Communications
+ ID_VENDOR_FROM_DATABASE=DSEA A/S
 
 usb:v1395p0025*
  ID_MODEL_FROM_DATABASE=Headset [PC 8]
@@ -51969,7 +52356,7 @@
  ID_MODEL_FROM_DATABASE=SP 20 D MS
 
 usb:v1395p006B*
- ID_MODEL_FROM_DATABASE=SC5x5 MS
+ ID_MODEL_FROM_DATABASE=SC6x5
 
 usb:v1395p0072*
  ID_MODEL_FROM_DATABASE=Headset
@@ -52446,7 +52833,7 @@
  ID_MODEL_FROM_DATABASE=ZALMAN ZM-VE350
 
 usb:v13FE*
- ID_VENDOR_FROM_DATABASE=Kingston Technology Company Inc.
+ ID_VENDOR_FROM_DATABASE=Phison Electronics Corp.
 
 usb:v13FEp1A00*
  ID_MODEL_FROM_DATABASE=512MB/1GB Flash Drive
@@ -64613,6 +65000,24 @@
 usb:v2304p2304*
  ID_MODEL_FROM_DATABASE=1689
 
+usb:v2309*
+ ID_VENDOR_FROM_DATABASE=TimeLink Technology Co., Ltd
+
+usb:v2309p1001*
+ ID_MODEL_FROM_DATABASE=Touch Device(hid)
+
+usb:v2309p1005*
+ ID_MODEL_FROM_DATABASE=Touch Device
+
+usb:v2309p1006*
+ ID_MODEL_FROM_DATABASE=Touch Device(2)
+
+usb:v2309p1007*
+ ID_MODEL_FROM_DATABASE=MulTouch Device(hid)
+
+usb:v2309p1009*
+ ID_MODEL_FROM_DATABASE=Touch Device(hid)
+
 usb:v230D*
  ID_VENDOR_FROM_DATABASE=Teracom
 
@@ -66939,7 +67344,7 @@
  ID_MODEL_FROM_DATABASE=TimVideos' HDMI2USB Opsis (FX2) - HDMI/DVI Capture Device
 
 usb:v2A1D*
- ID_VENDOR_FROM_DATABASE=Oxford Nanopore Technologies, Ltd
+ ID_VENDOR_FROM_DATABASE=Oxford Nanopore Technologies plc
 
 usb:v2A1Dp0000*
  ID_MODEL_FROM_DATABASE=MinION
@@ -66959,6 +67364,12 @@
 usb:v2A1Dp0021*
  ID_MODEL_FROM_DATABASE=GridION
 
+usb:v2A1Dp0120*
+ ID_MODEL_FROM_DATABASE=GridION Mk1 Bay
+
+usb:v2A1Dp0121*
+ ID_MODEL_FROM_DATABASE=GridION Mk1 Bay
+
 usb:v2A37*
  ID_VENDOR_FROM_DATABASE=RTD Embedded Technologies, Inc.
 
@@ -69132,16 +69543,19 @@
  ID_MODEL_FROM_DATABASE=Touchscreen
 
 usb:v5986*
- ID_VENDOR_FROM_DATABASE=Acer, Inc
+ ID_VENDOR_FROM_DATABASE=Bison Electronics Inc.
 
 usb:v5986p0100*
- ID_MODEL_FROM_DATABASE=Orbicam
+ ID_MODEL_FROM_DATABASE=Acer Orbicam
 
 usb:v5986p0101*
  ID_MODEL_FROM_DATABASE=USB2.0 Camera
 
 usb:v5986p0102*
- ID_MODEL_FROM_DATABASE=Crystal Eye Webcam
+ ID_MODEL_FROM_DATABASE=Acer Crystal Eye Webcam
+
+usb:v5986p0105*
+ ID_MODEL_FROM_DATABASE=Acer Crystal Eye Webcam
 
 usb:v5986p0137*
  ID_MODEL_FROM_DATABASE=HP Webcam
@@ -69165,7 +69579,7 @@
  ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
 
 usb:v5986p0200*
- ID_MODEL_FROM_DATABASE=OrbiCam
+ ID_MODEL_FROM_DATABASE=Acer OrbiCam
 
 usb:v5986p0202*
  ID_MODEL_FROM_DATABASE=Fujitsu Webcam
diff --git a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
index 9704680..a5cc894 100644
--- a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
+++ b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
@@ -71,7 +71,7 @@
  ID_PERSIST=0
 
 # Supported by libfprint driver aes4000
-usb:v5501p08FF*
+usb:v08FFp5501*
  ID_AUTOSUSPEND=1
  ID_PERSIST=0
 
@@ -150,6 +150,9 @@
 usb:v04F3p0C7D*
 usb:v04F3p0C7E*
 usb:v04F3p0C82*
+usb:v04F3p0C88*
+usb:v04F3p0C8C*
+usb:v04F3p0C8D*
  ID_AUTOSUSPEND=1
  ID_PERSIST=0
 
@@ -158,10 +161,24 @@
  ID_AUTOSUSPEND=1
  ID_PERSIST=0
 
+# Supported by libfprint driver fpcmoc
+usb:v10A5pFFE0*
+usb:v10A5pA305*
+usb:v10A5pDA04*
+usb:v10A5pD805*
+usb:v10A5pD205*
+ ID_AUTOSUSPEND=1
+ ID_PERSIST=0
+
 # Supported by libfprint driver goodixmoc
 usb:v27C6p5840*
+usb:v27C6p6014*
+usb:v27C6p6094*
 usb:v27C6p609C*
 usb:v27C6p60A2*
+usb:v27C6p631C*
+usb:v27C6p634C*
+usb:v27C6p6384*
 usb:v27C6p639C*
 usb:v27C6p63AC*
 usb:v27C6p63BC*
@@ -171,6 +188,7 @@
 usb:v27C6p658C*
 usb:v27C6p6592*
 usb:v27C6p6594*
+usb:v27C6p659A*
 usb:v27C6p659C*
 usb:v27C6p6A94*
  ID_AUTOSUSPEND=1
@@ -194,6 +212,8 @@
 usb:v06CBp0126*
 usb:v06CBp0129*
 usb:v06CBp0168*
+usb:v06CBp015F*
+usb:v06CBp0104*
  ID_AUTOSUSPEND=1
  ID_PERSIST=0
 
@@ -206,6 +226,7 @@
 
 # Supported by libfprint driver upektc
 usb:v0483p2015*
+usb:v0483p2017*
 usb:v147Ep3001*
  ID_AUTOSUSPEND=1
  ID_PERSIST=0
@@ -261,12 +282,19 @@
  ID_PERSIST=0
 
 # Known unsupported devices
+usb:v04E8p730B*
 usb:v04F3p036B*
 usb:v04F3p0C00*
 usb:v04F3p0C4C*
 usb:v04F3p0C57*
 usb:v04F3p0C5E*
+usb:v04F3p0C5A*
+usb:v04F3p0C70*
+usb:v04F3p0C72*
 usb:v04F3p2706*
+usb:v04F3p3057*
+usb:v04F3p3104*
+usb:v04F3p310D*
 usb:v06CBp0081*
 usb:v06CBp0088*
 usb:v06CBp008A*
@@ -283,6 +311,7 @@
 usb:v06CBp00D8*
 usb:v06CBp00DA*
 usb:v06CBp00DC*
+usb:v06CBp00E4*
 usb:v06CBp00E7*
 usb:v06CBp00E9*
 usb:v06CBp00FD*
@@ -298,6 +327,7 @@
 usb:v0BDAp5812*
 usb:v10A5p0007*
 usb:v10A5p9200*
+usb:v10A5p9800*
 usb:v1188p9545*
 usb:v138Ap0007*
 usb:v138Ap003A*
@@ -319,24 +349,32 @@
 usb:v27C6p5042*
 usb:v27C6p5110*
 usb:v27C6p5117*
+usb:v27C6p5120*
+usb:v27C6p5125*
 usb:v27C6p5201*
 usb:v27C6p521D*
 usb:v27C6p5301*
 usb:v27C6p530C*
 usb:v27C6p532D*
+usb:v27C6p5335*
 usb:v27C6p533C*
 usb:v27C6p5381*
 usb:v27C6p5385*
 usb:v27C6p538C*
 usb:v27C6p538D*
 usb:v27C6p5395*
+usb:v27C6p5503*
+usb:v27C6p550A*
+usb:v27C6p550C*
 usb:v27C6p5584*
 usb:v27C6p55A2*
 usb:v27C6p55A4*
 usb:v27C6p55B4*
 usb:v27C6p5740*
 usb:v27C6p5E0A*
+usb:v27C6p581A*
 usb:v2808p9338*
+usb:v2808p93A9*
 usb:v298Dp2020*
 usb:v298Dp2033*
 usb:v3538p0930*
diff --git a/hwdb.d/60-autosuspend.hwdb b/hwdb.d/60-autosuspend.hwdb
index e9304f4..cfb6084 100644
--- a/hwdb.d/60-autosuspend.hwdb
+++ b/hwdb.d/60-autosuspend.hwdb
@@ -24,13 +24,17 @@
 #
 # Allowed properties are:
 #    ID_AUTOSUSPEND=1
+#    ID_AUTOSUSPEND_DELAY_MS=####
 #    ID_PERSIST=0
 #
+# ID_AUTOSUSPEND_DELAY_MS adjusts the delay for autosuspend to something
+# different than the kernel default of 2000ms.
+#
 # ID_PERSIST=0 allows disabling the kernels USB "persist" feature, which allows
 # the continued use of devices after a power loss (due to suspend). Disable it
 # if the device will loose state without a USB power session and the driver
 # is unable to recover the state when resuming. See
-#   https://www.kernel.org/doc/html/latest/driver-api/usb/persist.html
+#   https://docs.kernel.org/driver-api/usb/persist.html
 
 # Sort by brand, model
 
@@ -53,6 +57,14 @@
  ID_AUTOSUSPEND=1
 
 #########################################
+# Microsoft
+#########################################
+
+# Surface Pro (2017) Type Cover
+usb:v045Ep09C0*
+ ID_AUTOSUSPEND=1
+
+#########################################
 # QEMU
 #########################################
 
@@ -63,13 +75,18 @@
  ID_AUTOSUSPEND=1
 
 #########################################
-# Sierra Wireless
+# WWAN
 #########################################
 
 # Sierra Wireless EM7345 4G LTE modem
 usb:v1199pA001*
  ID_AUTOSUSPEND=1
 
+# Fibocom LG850-GL
+usb:v2CB7p0007*
+ ID_AUTOSUSPEND=1
+ ID_AUTOSUSPEND_DELAY_MS=7000
+
 #########################################
 # Wacom
 #########################################
diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb
index 96c5da1..56cb3d3 100644
--- a/hwdb.d/60-evdev.hwdb
+++ b/hwdb.d/60-evdev.hwdb
@@ -1,16 +1,34 @@
 # This file is part of systemd.
 #
+# ########################### MATCHING #######################################
+#
 # The lookup keys are composed in:
 #   60-evdev.rules
 #
-# Note: The format of the "evdev:" prefix match key is a contract between the
-# rules file and the hardware data, it might change in later revisions to
-# support more or better matches, it is not necessarily expected to be a stable
-# ABI.
+# Supported hardware matches are:
+#  - Generic input devices match:
+#      evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
+#    This matches on the kernel modalias of the input-device, mainly:
+#    ZZZZ is the bus-id (see /usr/include/linux/input.h BUS_*), YYYY, XXXX and
+#    WWWW are the 4-digit hex uppercase vendor, product and version ID and VVVV
+#    is a variable-length input-modalias describing the device capabilities.
+#    The vendor, product and version ID for a device node "eventX" is listed
+#    in /sys/class/input/eventX/device/id.
 #
-# Match string formats:
-# evdev:<modalias>
-# evdev:name:<device name>:dmi:<dmi string>
+#  - Input driver device name and DMI data match:
+#      evdev:name:<input device name>:dmi:bvn*:bvr*:bd*:svn<vendor>:pn*
+#    <input device name> is the name device specified by the
+#    driver, <vendor> is the firmware-provided string exported
+#    by the kernel DMI modalias, see /sys/class/dmi/id/modalias.
+#
+#  - Extended input driver device name, properties and DMI data match:
+#      evdev:name:<input device name>:phys:<phys>:ev:<ev>:dmi:bvn*:bvr*:bd*:svn<vendor>:pn*
+#    <input device name> is the name device specified by the
+#    driver, <phys> is the physical-device-path, "cat
+#    /sys/class/input/input?/phys", <ev> is the event bitmask, "cat
+#    /sys/class/input/input?/capabilities/ev" and <vendor> is the
+#    firmware-provided string exported by the kernel DMI modalias,
+#    see /sys/class/dmi/id/modalias.
 #
 # To add local entries, create a new file
 #   /etc/udev/hwdb.d/61-evdev-local.hwdb
@@ -166,10 +184,11 @@
  EVDEV_ABS_35=::18
  EVDEV_ABS_36=::16
 
-# Asus X550CC, S550CB and N550JV
+# Asus X550CC, S550CB, N550JV and GA402
 evdev:name:ETPS/2 Elantech Touchpad:dmi:*:svnASUSTeKCOMPUTERINC.:pnX550CC:*
 evdev:name:ETPS/2 Elantech Touchpad:dmi:*:svnASUSTeKCOMPUTERINC.:pnS550CB:*
 evdev:name:ETPS/2 Elantech Touchpad:dmi:*:svnASUSTeKCOMPUTERINC.:pnN550JV:*
+evdev:name:ASUE120A:00 04F3:319B Touchpad:dmi:*svnASUSTeKCOMPUTERINC.:*pnROGZephyrusG14GA402R*
  EVDEV_ABS_00=::31
  EVDEV_ABS_01=::30
  EVDEV_ABS_35=::31
@@ -189,6 +208,24 @@
  EVDEV_ABS_35=0:3097:32
  EVDEV_ABS_36=0:2119:33
 
+# Asus UX362FA
+evdev:name:ELAN1401:00 04F3:30DC Touchpad:dmi:*:svnASUSTeKCOMPUTERINC.:pnZenBookUX362FA_UX362FA:*
+ EVDEV_ABS_00=:::8
+ EVDEV_ABS_01=:::8
+ EVDEV_ABS_35=:::8
+ EVDEV_ABS_36=:::8
+
+#########################################
+# Avita
+#########################################
+
+# Avita Liber (NS13A2)
+evdev:name:093A6113:00 093A:2342 Touchpad:dmi:*svnAVITA:*pnNS13A2**
+ EVDEV_ABS_00=::19
+ EVDEV_ABS_01=::20
+ EVDEV_ABS_35=::19
+ EVDEV_ABS_36=::20
+
 #########################################
 # Bangho
 #########################################
@@ -223,6 +260,13 @@
  EVDEV_ABS_35=::24
  EVDEV_ABS_36=::34
 
+# Dell Inspiron N4010
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:bvn*:bvr*:bd*:svnDellInc.:pnInspironN4010:*
+ EVDEV_ABS_00=1188:5797:49
+ EVDEV_ABS_01=893:4894:80
+ EVDEV_ABS_35=1188:5797:49
+ EVDEV_ABS_36=893:4894:80
+
 # Dell Inspiron N5040
 evdev:name:AlpsPS/2 ALPS DualPoint TouchPad:dmi:bvn*:bvr*:bd*:svnDellInc.:pnInspironN5040:*
  EVDEV_ABS_00=25:2000:22
@@ -324,6 +368,54 @@
  EVDEV_ABS_36=::10
 
 #########################################
+# Granite Devices Simucube wheel bases
+#########################################
+
+# Granite Devices Simucube 1
+evdev:input:b0003v16D0p0D5A*
+ EVDEV_ABS_00=:::0:0
+ EVDEV_ABS_01=:::0:0
+ EVDEV_ABS_02=:::0:0
+ EVDEV_ABS_03=:::0:0
+ EVDEV_ABS_04=:::0:0
+ EVDEV_ABS_05=:::0:0
+ EVDEV_ABS_06=:::0:0
+ EVDEV_ABS_07=:::0:0
+
+# Granite Devices Simucube 2 Sport
+evdev:input:b0003v16D0p0D61*
+ EVDEV_ABS_00=:::0:0
+ EVDEV_ABS_01=:::0:0
+ EVDEV_ABS_02=:::0:0
+ EVDEV_ABS_03=:::0:0
+ EVDEV_ABS_04=:::0:0
+ EVDEV_ABS_05=:::0:0
+ EVDEV_ABS_06=:::0:0
+ EVDEV_ABS_07=:::0:0
+
+# Granite Devices Simucube 2 Pro
+evdev:input:b0003v16D0p0D60*
+ EVDEV_ABS_00=:::0:0
+ EVDEV_ABS_01=:::0:0
+ EVDEV_ABS_02=:::0:0
+ EVDEV_ABS_03=:::0:0
+ EVDEV_ABS_04=:::0:0
+ EVDEV_ABS_05=:::0:0
+ EVDEV_ABS_06=:::0:0
+ EVDEV_ABS_07=:::0:0
+
+# Granite Devices Simucube 2 Ultimate
+evdev:input:b0003v16D0p0D5F*
+ EVDEV_ABS_00=:::0:0
+ EVDEV_ABS_01=:::0:0
+ EVDEV_ABS_02=:::0:0
+ EVDEV_ABS_03=:::0:0
+ EVDEV_ABS_04=:::0:0
+ EVDEV_ABS_05=:::0:0
+ EVDEV_ABS_06=:::0:0
+ EVDEV_ABS_07=:::0:0
+
+#########################################
 # HP
 #########################################
 
@@ -370,13 +462,23 @@
  EVDEV_ABS_36=1083:4808:65
 
 # HP Envy x360
-evdev:name:SynPS/2 Synaptics TouchPad:*svnHP:pnHPENVYx360Convertible15m-cn0xxx:*
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnHP:pnHPENVYx360Convertible15m-cn0xxx:*
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnHP:pnHPENVYx360Convertible15-cn0xxx**
  EVDEV_ABS_00=1302:5640:36
  EVDEV_ABS_01=1119:4741:61
  EVDEV_ABS_35=1302:5640:36
  EVDEV_ABS_36=1119:4741:61
 
 #########################################
+# HUION
+#########################################
+
+# HUION Inpiroy H420X
+evdev:input:b0003v256Cp0064*
+ EVDEV_ABS_00=::200
+ EVDEV_ABS_01=::200
+
+#########################################
 # Lenovo
 #########################################
 
@@ -416,6 +518,14 @@
  EVDEV_ABS_35=::41
  EVDEV_ABS_36=::37
 
+# Lenovo T440* series
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadT440:*
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadT440?:*
+ EVDEV_ABS_00=:::13
+ EVDEV_ABS_01=:::13
+ EVDEV_ABS_35=:::13
+ EVDEV_ABS_36=:::13
+
 # Lenovo X240 series
 evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX240:*
 evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX240?:*
@@ -473,6 +583,13 @@
  EVDEV_ABS_35=::12
  EVDEV_ABS_36=::11
 
+# Lenovo Thinkpad L14 Gen1 (AMD)
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*pvrThinkPadL14Gen1**
+ EVDEV_ABS_00=::44
+ EVDEV_ABS_01=::50
+ EVDEV_ABS_35=::44
+ EVDEV_ABS_36=::50
+
 # Lenovo T460
 evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pn*ThinkPad*T460:*
  EVDEV_ABS_00=1266:5677:44
@@ -567,14 +684,23 @@
  EVDEV_ABS_35=117:3958:36
  EVDEV_ABS_36=104:1960:26
 
-# Lenovo Thinkpad T490 and T14 Gen1
+# Lenovo Thinkpad T490 and T14/P14s Gen1/2
 evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadT490:*
 evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadT14Gen1:*
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadP14sGen1:*
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadP14sGen2a:*
  EVDEV_ABS_00=::44
  EVDEV_ABS_01=::52
  EVDEV_ABS_35=::44
  EVDEV_ABS_36=::52
 
+# Lenovo ThinkPad T15g Gen1
+evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*pvrThinkPadT15gGen1**
+ EVDEV_ABS_00=::44
+ EVDEV_ABS_01=::50
+ EVDEV_ABS_35=::44
+ EVDEV_ABS_36=::50
+
 # Lenovo Legion Y9000X2020
 evdev:name:MSFT0001:02 04F3:304B Touchpad:dmi:*svnLENOVO:*pvrLenovoLegionY9000X2020:*
  EVDEV_ABS_00=::31
@@ -582,6 +708,31 @@
  EVDEV_ABS_35=::31
  EVDEV_ABS_36=::30
 
+# Lenovo g580
+evdev:name:ETPS/2 Elantech Touchpad:dmi:*svnLENOVO:*pvrLenovoG580**
+ EVDEV_ABS_00=-170:2950:24
+ EVDEV_ABS_01=-591:700:25
+ EVDEV_ABS_35=-170:2950:24
+ EVDEV_ABS_36=-591:700:25
+
+#########################################
+# Microsoft
+#########################################
+
+# Surface Laptop 2 (13")
+evdev:name:Microsoft Surface 045E:0933 Touchpad:dmi:*svnMicrosoftCorporation:*pnSurfaceLaptop2**
+ EVDEV_ABS_00=::38
+ EVDEV_ABS_01=::38
+ EVDEV_ABS_35=::38
+ EVDEV_ABS_36=::38
+
+# Surface Laptop 3 (15")
+evdev:name:Microsoft Surface 045E:09AF Touchpad:dmi:*svnMicrosoftCorporation:*pnSurfaceLaptop3**
+ EVDEV_ABS_00=::39
+ EVDEV_ABS_01=::37
+ EVDEV_ABS_35=::39
+ EVDEV_ABS_36=::37
+
 #########################################
 # NEWYES
 #########################################
@@ -591,6 +742,17 @@
  EVDEV_ABS_00=::152
  EVDEV_ABS_01=::244
 
+#########################################
+# Packard Bell
+#########################################
+
+# EASYNOTE_TS11HR-200GE
+evdev:name:ETPS/2 Elantech Touchpad:dmi:bvnPackardBell:bvr*:br*:svnPackardBell:pnEasyNoteTS11HR:*
+ EVDEV_ABS_00=0:2472:31
+ EVDEV_ABS_01=-524:528:31
+ EVDEV_ABS_35=0:2472:31
+ EVDEV_ABS_36=-524:528:31
+
 ###########################################################
 # Pine64
 ###########################################################
@@ -603,6 +765,17 @@
  EVDEV_ABS_36=::15
 
 #########################################
+# Positivo-Vaio
+#########################################
+
+# Vaio FE14
+evdev:name:SYNA3602:00 0911:5288 Touchpad:dmi:*svnPositivoBahia-VAIO:pnVJFE41F11*
+ EVDEV_ABS_00=::28
+ EVDEV_ABS_01=::27
+ EVDEV_ABS_35=::28
+ EVDEV_ABS_36=::27
+
+#########################################
 # Razer
 #########################################
 
diff --git a/hwdb.d/60-input-id.hwdb b/hwdb.d/60-input-id.hwdb
index 2b1aa45..802ed9a 100644
--- a/hwdb.d/60-input-id.hwdb
+++ b/hwdb.d/60-input-id.hwdb
@@ -3,11 +3,6 @@
 # The lookup keys are composed in:
 #   60-input-id.rules
 #
-# Note: The format of the "input-id:" prefix match key is a contract between
-# the rules file and the hardware data, it might change in later revisions to
-# support more or better matches, it is not necessarily expected to be a stable
-# ABI.
-#
 # Match string formats:
 # id-input:modalias:<modalias>
 #
@@ -56,11 +51,6 @@
 
 # Sort by brand, model
 
-# UC-Logic TABLET 1060N Pad
-id-input:modalias:input:b0003v5543p0081*
- ID_INPUT_TABLET=1
- ID_INPUT_TABLET_PAD=1
-
 # XP-PEN STAR 06
 id-input:modalias:input:b0003v28bdp0078*
  ID_INPUT_TABLET=1
@@ -75,4 +65,13 @@
 
 # Logitech MX Keys
 id-input:modalias:input:b0003v046Dp408Ae0111*
- ID_INPUT_MOUSE=0 
+ ID_INPUT_MOUSE=0
+
+# Logitech Craft Keyboard
+id-input:modalias:input:b0003v046Dp4066e0111*
+ ID_INPUT_MOUSE=0
+
+# CH Products Pro Pedals
+id-input:modalias:input:b0003v068Ep00F2e0100*
+ ID_INPUT_ACCELEROMETER=0
+ ID_INPUT_JOYSTICK=1
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 2e06143..7195217 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -13,25 +13,20 @@
 # The lookup keys are composed in:
 #   60-evdev.rules
 #
-# Note: The format of the "evdev:" prefix match key is a contract between the
-# rules file and the hardware data, it might change in later revisions to
-# support more or better matches, it is not necessarily expected to be a stable
-# ABI.
-#
 # Supported hardware matches are:
 #  - Generic input devices match:
 #      evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
 #    This matches on the kernel modalias of the input-device, mainly:
 #    ZZZZ is the bus-id (see /usr/include/linux/input.h BUS_*), YYYY, XXXX and
 #    WWWW are the 4-digit hex uppercase vendor, product and version ID and VVVV
-#    is an arbitrary length input-modalias describing the device capabilities.
+#    is a variable-length input-modalias describing the device capabilities.
 #    The vendor, product and version ID for a device node "eventX" is listed
 #    in /sys/class/input/eventX/device/id.
 #
 #  - AT keyboard DMI data matches:
 #      evdev:atkbd:dmi:bvn*:bvr*:bd*:svn<vendor>:pn<product>:pvr*
 #    <vendor> and <product> are the firmware-provided strings
-#    exported by the kernel DMI modalias, see /sys/class/dmi/id/modalias
+#    exported by the kernel DMI modalias, see /sys/class/dmi/id/modalias.
 #
 #  - Input driver device name and DMI data match:
 #      evdev:name:<input device name>:dmi:bvn*:bvr*:bd*:svn<vendor>:pn*
@@ -46,7 +41,22 @@
 #    /sys/class/input/input?/phys", <ev> is the event bitmask, "cat
 #    /sys/class/input/input?/capabilities/ev" and <vendor> is the
 #    firmware-provided string exported by the kernel DMI modalias,
-#    see /sys/class/dmi/id/modalias
+#    see /sys/class/dmi/id/modalias.
+#
+# To add local entries, create a new file
+#   /etc/udev/hwdb.d/61-keyboard-local.hwdb
+# and add your rules there. To load the new rules execute (as root):
+#   systemd-hwdb update
+#   udevadm trigger /dev/input/eventXX
+# where /dev/input/eventXX is the keyboard in question. If in doubt, simply use
+# /dev/input/event* to reload all input rules.
+#
+# If your changes are generally applicable, preferably send them as a pull
+# request to
+#   https://github.com/systemd/systemd
+# or create a bug report on https://github.com/systemd/systemd/issues and
+# include your new rules, a description of the device, and the output of
+#   udevadm info /dev/input/eventXX.
 
 # ######################### KEY MAPPING ######################################
 #
@@ -81,22 +91,6 @@
 # Examples of such devices: Chromebooks where the top row is used for both
 # media and F1-F10 keys.
 
-# To update this file, create a new file
-#   /etc/udev/hwdb.d/70-keyboard.hwdb
-# and add your rules there. To load the new rules execute (as root):
-#   systemd-hwdb update
-#   udevadm trigger /dev/input/eventXX
-# where /dev/input/eventXX is the keyboard in question. If in
-# doubt, simply reload all input rules
-#   udevadm trigger --verbose --sysname-match="event*"
-#
-# If your changes are generally applicable, preferably send them as a pull
-# request to
-#   https://github.com/systemd/systemd
-# or create a bug report on https://github.com/systemd/systemd/issues and
-# include your new rules, a description of the device, and the output of
-#   udevadm info /dev/input/eventXX.
-
 ##########################################
 # Acer
 ##########################################
@@ -105,7 +99,7 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pn*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnGateway*:pnA0A1*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:*
- KEYBOARD_KEY_86=wlan                                   # Fn+F3 or Fn+Q for comunication key
+ KEYBOARD_KEY_86=wlan                                   # Fn+F3 or Fn+Q for communication key
  KEYBOARD_KEY_a5=help                                   # Fn+F1
  KEYBOARD_KEY_a6=setup                                  # Fn+F2 Acer eSettings
  KEYBOARD_KEY_a7=battery                                # Fn+F3 Power Management
@@ -159,11 +153,37 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*7750G:*
  KEYBOARD_KEY_e0=!pageup
 
+# Acer Aspire 3 A317-33
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspireA317-33:*
+ KEYBOARD_KEY_55=power
+
+# Acer Aspire One AO532h
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO532h:*
+ KEYBOARD_KEY_84=bluetooth
+ KEYBOARD_KEY_ce=unknown  # Brightness Up, also emitted by acpi-video, ignore
+ KEYBOARD_KEY_ef=unknown  # Brightness Down, also emitted by acpi-video, ignore
+
+# Acer Aspire One AOD270 (Atom N2600) and its Packard Bell Dot SC rebrand
+evdev:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svnAcer*:pnAOD270*:*
+evdev:name:Acer WMI hotkeys:dmi:*:svnPackardBell:pndots:*:rvnPackardBell:rnSJE01_CT:*
+ KEYBOARD_KEY_61=switchvideomode
+
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAOD270*:*
+evdev:atkbd:dmi:*:svnPackardBell:pndots:*:rvnPackardBell:rnSJE01_CT:*
+ KEYBOARD_KEY_ce=unknown  # Brightness Up, also emitted by acpi-video, ignore
+ KEYBOARD_KEY_ef=unknown  # Brightness Down, also emitted by acpi-video, ignore
+
 # Predator PH 315-52
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredator*PH*315-52:*
  KEYBOARD_KEY_ef=kbdillumup                             # Fn+F10
  KEYBOARD_KEY_f0=kbdillumdown                           # Fn+F9
 
+# Travelmate B311-31, B311R-31, B311RN-31
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311-31*:pvr*
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311R-31*:pvr*
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311RN-31*:pvr*
+ KEYBOARD_KEY_8a=f20                                    # Microphone mute
+
 # Travelmate C300
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:*
  KEYBOARD_KEY_67=f24                                    # FIXME: rotate screen
@@ -195,7 +215,7 @@
 # Packard Bell and Gateway models
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnGateway*:pn*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnPackard*Bell*:pn*:*
- KEYBOARD_KEY_86=wlan                                   # Fn+F3 or Fn+Q for comunication key
+ KEYBOARD_KEY_86=wlan                                   # Fn+F3 or Fn+Q for communication key
 
 ###########################################################
 # Alienware
@@ -226,11 +246,20 @@
 evdev:name:Eee PC WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
 evdev:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
  KEYBOARD_KEY_6b=f21                                    # Touchpad Toggle
+ KEYBOARD_KEY_7c=f20                                    # Remap micmute to f20
 
 # USB keyboard in Asus FX503VD
 evdev:input:b0003v0B05p1869*
  KEYBOARD_KEY_ff31007c=f20                              # Remap micmute to f20
 
+# Asus TF103C misses the home button in its PNP0C40 GPIO resources
+# causing the volume-button mappings to be off by one, correct this
+evdev:name:gpio-keys:phys:gpio-keys/input0:ev:3:dmi:*:svnASUSTeKCOMPUTERINC.:pnTF103C*:*
+ KEYBOARD_KEY_1=volumeup
+
+evdev:name:gpio-keys:phys:gpio-keys/input0:ev:100003:dmi:*:svnASUSTeKCOMPUTERINC.:pnTF103C*:*
+ KEYBOARD_KEY_0=volumedown
+
 ###########################################################
 # BenQ
 ###########################################################
@@ -248,6 +277,13 @@
  KEYBOARD_KEY_ae=!volumedown
  KEYBOARD_KEY_b0=!volumeup
 
+evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNS50_70MU:*
+evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4XMB,ME,MZ:*
+evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNS5x_NS7xPU:*
+evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4xPZ:*
+ KEYBOARD_KEY_f7=f21                                    # Touchpad Toggle
+ KEYBOARD_KEY_f8=f21                                    # Touchpad Toggle
+
 ###########################################################
 # Compal
 ###########################################################
@@ -266,7 +302,11 @@
  KEYBOARD_KEY_9e=email
  KEYBOARD_KEY_9f=homepage
 
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnCompaq:pn*:pvr*:rvn*:rnN14KP6*
+ KEYBOARD_KEY_76=f21                                    # Fn+f2 toggle touchpad
+
 evdev:input:b0003v049Fp0051*
+evdev:input:b0003v049Fp008D*
  KEYBOARD_KEY_0c0011=presentation
  KEYBOARD_KEY_0c0012=addressbook
  KEYBOARD_KEY_0c0013=info
@@ -376,16 +416,26 @@
  KEYBOARD_KEY_88=wlan
  KEYBOARD_KEY_65=direction                              # Screen Rotate
 
+# Dell G16 microphone mute
+evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnDellG16*:*
 # Dell Latitude microphone mute
 evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
 # Dell Precision microphone mute
 evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
+# Dell XPS microphone mute
+evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS*:*
  KEYBOARD_KEY_100150=f20                                # Mic mute toggle, should be micmute
 
 # Dell Latitude privacy microphone mute
 evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
+# Dell Precision privacy microphone mute
+evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
  KEYBOARD_KEY_120001=f20                                # Mic mute toggle, should be micmute
 
+# Dell Professional Sound Bar AE515
+evdev:input:b0003v413CpA506*
+ KEYBOARD_KEY_b002f=f20                                # Mic mute toggle, should be micmute
+
 ###########################################################
 # Everex
 ###########################################################
@@ -491,11 +541,25 @@
  KEYBOARD_KEY_0900fc=screenlock
 
 ###########################################################
-# Hewlett Packard
+# Google
 ###########################################################
 
-evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
- KEYBOARD_KEY_8=unknown                                 # Use hp-wireless instead
+# Google Hangouts Meet speakermic and Google Meet speakermic
+evdev:input:b0003v18D1p8001*
+evdev:input:b0003v18D1p8007*
+ KEYBOARD_KEY_b002f=reserved                            # Disable micmute key
+
+###########################################################
+# Haier
+###########################################################
+
+# 7G-Series
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHaierComputer:pn7G-Series:*
+ KEYBOARD_KEY_91=wlan
+
+###########################################################
+# Hewlett Packard
+###########################################################
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
@@ -551,6 +615,13 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPENVYx360Convertible13*:*
  KEYBOARD_KEY_82=f20                                    # Microphone mute button, should be micmute
 
+# Spectre x360 16 2022
+evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*HP[sS][pP][eE][cC][tT][rR][eE]*x3602-in-1*:*
+# ENVY x360
+evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pnHPENVYx360Convertible*:*
+evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pnHPENVYx3602-in-1*:*
+ KEYBOARD_KEY_08=unknown                                #  Prevents random airplane mode activation
+
 # HP Elite x2 1013 G3
 evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHPElitex21013G3:*
  KEYBOARD_KEY_f8=unknown                               # rfkill is also reported by HP Wireless hotkeys
@@ -560,8 +631,9 @@
  KEYBOARD_KEY_92=brightnessdown
  KEYBOARD_KEY_97=brightnessup
 
-evdev:name:Intel HID events:dmi:bvn*:bvr*:svnHP*:pnHPElitex21013G3:*
- KEYBOARD_KEY_08=unknown                               # rfkill is also reported by HP Wireless hotkeys
+# HP Laptop 15s-eq0023nl
+evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHPLaptop15s-eq0*:sku9MG38EA#ABZ:*
+ KEYBOARD_KEY_9d=102nd                                  # Greater than/Less than
 
 # Elitebook
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*Compaq*:*
@@ -586,6 +658,18 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2570p*:*
  KEYBOARD_KEY_f8=wlan                                   # Wireless HW switch button
 
+# Elitebook 2760p
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2760p*:*
+ KEYBOARD_KEY_89=battery                                # Fn+F8
+ KEYBOARD_KEY_f8=unknown                                # rfkill is also reported by HP Wireless hotkeys
+ KEYBOARD_KEY_86=volumeup
+ KEYBOARD_KEY_87=volumedown
+ KEYBOARD_KEY_92=brightnessdown
+ KEYBOARD_KEY_97=brightnessup
+ KEYBOARD_KEY_d8=!f23                                   # touchpad off
+ KEYBOARD_KEY_d9=!f22                                   # touchpad on
+ KEYBOARD_KEY_b3=unknown                                # FIXME: Auto brightness
+
 # TX2
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[tT][xX]2*:*
  KEYBOARD_KEY_c2=media
@@ -623,6 +707,8 @@
 # HP EliteBook
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPEliteBook*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook*:*
+# HP Elite x360
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPElite*x360*:*
 # HP Elite Dragonfly
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteDragonfly*:*
 # HP ProBook 440 G2
@@ -666,6 +752,10 @@
  KEYBOARD_KEY_64=calendar
  KEYBOARD_KEY_81=f20
 
+# HP EliteBook 845 G7
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook845G7*:pvr*
+ KEYBOARD_KEY_68=unknown                                # Fn+F12 HP Programmable Key
+
 # HP ProBook 650
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*ProBook*650*:*
  KEYBOARD_KEY_f8=wlan                                   # Wireless HW switch button
@@ -691,6 +781,11 @@
  KEYBOARD_KEY_85=unknown                                # lid close; also reported via special evdev
  KEYBOARD_KEY_f8=wlan                                   # Wireless HW switch button
 
+# HP ProBook 11G2
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPProBook11G2*:pvr*
+ KEYBOARD_KEY_d8=!f23                                   # Fn+F2: touchpad off
+ KEYBOARD_KEY_d9=!f22                                   # Fn+F2: touchpad on
+
 # HP mt44 Mobile Thin Client
 evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*mt44*Mobile*Thin*Client*:*
  KEYBOARD_KEY_64=calendar                               # Calendar icon (Fn + F12)
@@ -709,6 +804,28 @@
 evdev:name:gpio-keys:phys:gpio-keys/input0:ev:23:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:*
  KEYBOARD_KEY_0=unknown
 
+# HP Omen
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnOMEN*:pvr*
+ KEYBOARD_KEY_a1=!calc
+
+# HP Dev One
+evdev:atkbd:dmi:*:rvnHP:rn8A78:*
+ KEYBOARD_KEY_81=f20                                    # Fn+F8; Microphone mute button
+ KEYBOARD_KEY_f9=prog1                                  # Fn+F12; Programmable hotkey
+
+# HP Victus
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnVictus*:pvr*
+ KEYBOARD_KEY_a1=!calc
+
+# HP Elite Dragonfly G2
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteDragonflyG2*:pvr*
+ KEYBOARD_KEY_f8=unknown                                # rfkill is also reported by HP Wireless hotkeys
+ KEYBOARD_KEY_68=prog1                                  # Fn+F12 HP Programmable Key
+
+# HP Elite Dragonfly G2
+evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteDragonflyG2*:pvr*
+ KEYBOARD_KEY_08=unknown                                # rfkill is also reported by HP Wireless hotkeys
+
 ##########################################################
 # Huawei
 ##########################################################
@@ -794,6 +911,11 @@
  KEYBOARD_KEY_17=prog1
  KEYBOARD_KEY_1a=f20                                    # Microphone mute button; should be micmute
  KEYBOARD_KEY_45=bookmarks
+ KEYBOARD_KEY_46=prog2                                  # Fn + PrtSc, on Windows: Snipping tool
+ KEYBOARD_KEY_4a=prog3                                  # Fn + Right shift, on Windows: No idea
+ KEYBOARD_KEY_4b=chat                                   # Fn + F9, on Windows: Notifications panel key
+ KEYBOARD_KEY_4c=connect                                # Fn + F10, on Windows: Answer (Teams) call
+ KEYBOARD_KEY_4d=cancel                                 # Fn + F11, on Windows: Hangup/decline (Teams) call
 
 # ThinkPad Keyboard with TrackPoint
 evdev:input:b0003v17EFp6009*
@@ -822,7 +944,7 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn0769AP2:pvr3000N200:*
  KEYBOARD_KEY_b4=prog1
 
-# lenovo-ideapad
+# Lenovo IdeaPad
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnS10-*:*
  KEYBOARD_KEY_81=rfkill                                 # does nothing in BIOS
@@ -833,8 +955,12 @@
  KEYBOARD_KEY_f2=f21                                    # touchpad toggle (key alternately emits F2 and F3)
  KEYBOARD_KEY_f3=f21
 
+# Lenovo IdeaPad 5
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrIdeaPad5*:*
+ KEYBOARD_KEY_81=insert
+
 # Thinkpad X200_Tablet
-evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*Tablet*:*
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*T*:*
  KEYBOARD_KEY_5d=menu
  KEYBOARD_KEY_63=fn
  KEYBOARD_KEY_66=screenlock
@@ -880,6 +1006,11 @@
  KEYBOARD_KEY_ae=!volumedown
  KEYBOARD_KEY_b0=!volumeup
 
+evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*IdeaPadFlex5*:*
+ KEYBOARD_KEY_a0=!mute
+ KEYBOARD_KEY_ae=!volumedown
+ KEYBOARD_KEY_b0=!volumeup
+
 evdev:atkbd:dmi:*:svnLENOVO:*:pvrLenovoYoga300-11IBR:*
  KEYBOARD_KEY_62=unknown  # Touchpad on, also emitted by "Ideapad extra buttons", ignore
  KEYBOARD_KEY_63=unknown  # Touchpad off, also emitted by "Ideapad extra buttons", ignore
@@ -921,6 +1052,15 @@
 evdev:name:SIPODEV Lenovo HID Device:dmi:*:svnLENOVO:*:pvrLenovoideapadD330-10IGM:*
  KEYBOARD_KEY_70073=f21                                 # Fn+Supr (Touchpad toggle)
 
+###########################################################
+# LG
+###########################################################
+
+# LG Gram
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLGElectronics:pn1*.AAS*:*
+ KEYBOARD_KEY_a0=!mute
+ KEYBOARD_KEY_ae=!volumedown
+ KEYBOARD_KEY_b0=!volumeup
 
 ###########################################################
 # Logitech
@@ -1266,6 +1406,8 @@
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pn*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*:*
+ KEYBOARD_KEY_76=f21                                    # Toggle touchpad, sends meta+ctrl+toggle
+ KEYBOARD_KEY_91=config                                 # MSIControl Center
  KEYBOARD_KEY_a0=mute                                   # Fn+F9
  KEYBOARD_KEY_ae=volumedown                             # Fn+F7
  KEYBOARD_KEY_b0=volumeup                               # Fn+F8
@@ -1276,6 +1418,8 @@
  KEYBOARD_KEY_e4=f21                                    # Fn+F3 Touchpad disable
  KEYBOARD_KEY_ec=email                                  # envelope button
  KEYBOARD_KEY_ee=camera                                 # Fn+F6 camera disable
+ KEYBOARD_KEY_f1=f20                                    # Microphone mute
+ KEYBOARD_KEY_f2=rotate_display                         # Rotate screen
  KEYBOARD_KEY_f6=wlan                                   # satellite dish1
  KEYBOARD_KEY_f7=brightnessdown                         # Fn+F4
  KEYBOARD_KEY_f8=brightnessup                           # Fn+F5
@@ -1303,8 +1447,6 @@
 # Keymaps MSI Prestige And MSI Modern FnKeys and Special keys
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Prestige*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Modern*:*
- KEYBOARD_KEY_f1=f20                                    # Fn+F5 Micmute
- KEYBOARD_KEY_76=f21                                    # Fn+F4 Toggle touchpad, sends meta+ctrl+toggle
  KEYBOARD_KEY_91=prog1                                  # Fn+F7 Creation Center, sometime F7
  KEYBOARD_KEY_f2=prog2                                  # Fn+F12 Screen rotation
  KEYBOARD_KEY_8d=prog3                                  # Fn+A Change True Color selections
@@ -1317,6 +1459,17 @@
  KEYBOARD_KEY_0213=f22
  KEYBOARD_KEY_0214=f23
 
+##########################################
+# NEC
+##########################################
+
+# VersaPro VG-S
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnNEC:pnPC-VK22TGSGS:pvr*
+ KEYBOARD_KEY_a8=f21                                    # Fn+Space touchpad toggle
+ KEYBOARD_KEY_67=brightnessdown                         # Fn+F7 brightness down
+ KEYBOARD_KEY_65=brightnessup                           # Fn+F8 brightness up
+ KEYBOARD_KEY_71=battery                                # Fn+F4 ECO
+
 ###########################################################
 # Olimex
 ###########################################################
@@ -1484,7 +1637,7 @@
 
 # If you're using an us layout keyboard in one of the below models of
 # Purism Librem 13 consider copying this file to /etc/systemd/hwdb.d/
-# to enable the following rule acording to your model.
+# to enable the following rule according to your model.
 #
 # There's a bug in the keyboards firmware and the additional rule
 # will make your keyboard behave as expected.
@@ -1628,6 +1781,14 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:*
  KEYBOARD_KEY_ad=leftmeta
 
+# Galaxy Book (2021) NP750XDA-KD4SE
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn750XDA:pvr*
+ KEYBOARD_KEY_81=!esc
+ KEYBOARD_KEY_ce=!prog1 	# Fn+F1 launch settings
+ KEYBOARD_KEY_ae=!volumedown 	# Fn+F7 volume down
+ KEYBOARD_KEY_b0=!volumeup	# Fn+F8 volume up
+
+
 ###########################################################
 # SONY
 ###########################################################
@@ -1684,6 +1845,10 @@
  KEYBOARD_KEY_f7=f21                                    # Touchpad toggle
  KEYBOARD_KEY_f8=f21                                    # Touchpad toggle
 
+# Pangolin 12
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang12*
+ KEYBOARD_KEY_76=f21                                    # Touchpad toggle
+
 ###########################################################
 # T-bao
 ###########################################################
@@ -1856,6 +2021,58 @@
  KEYBOARD_KEY_70046=f6
 
 ###########################################################
+# CZC
+###########################################################
+
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnCZC:pnODEON*TPC-10:*
+ KEYBOARD_KEY_01=leftmeta                               # Home button held for 2s
+ KEYBOARD_KEY_db=prog1                                  # Home button
+ KEYBOARD_KEY_dd=rfkill                                 # Second button labeled Wi-Fi
+
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnViewSonic:pnVPAD10:*
+ KEYBOARD_KEY_01=leftmeta                               # Home button held for 2s
+ KEYBOARD_KEY_db=prog1                                  # Home button
+ KEYBOARD_KEY_dd=back                                   # Second button labeled Back
+
+###########################################################
+# Positivo-Vaio
+###########################################################
+# Vaio Pro (VJPW11F11X, VJPW12F11X)
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJPW1[12]F11X*:pvr*:*
+# Vaio FE14 (VJFE41F11X, VJE42F11X, VJFE44F11X, VJFE54F11X)
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFE*:pvr*:*
+ KEYBOARD_KEY_76=f21		                        # Fn+F1 toggle touchpad
+
+###########################################################
+# Positivo
+###########################################################
+# Positivo MASTER-N1110
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivoTecnologiaSA:pn*:pvr*:rvnPositivoTecnologiaSA:rnNP11G-E*
+# Positivo DUO (k116)
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivoTecnologiaSA:pn*:pvr*:rvnPositivoTecnologiaSA:rnK116*
+ KEYBOARD_KEY_76=f21                                    # Fn+F1 toggle touchpad
+
+# Positivo Motion (N14DP6, N14DP7, N14DP7-V2, N14DP9, N14JP6, N14KP6)
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnN14[DJK]P*
+ KEYBOARD_KEY_76=f21                                    # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_67=prog1                                  # Programmable button
+ KEYBOARD_KEY_68=prog2                                  # Programmable button
+ KEYBOARD_KEY_69=prog3                                  # Programmable button
+ KEYBOARD_KEY_6a=prog4                                  # Programmable button
+
+# Positivo Motion (K142, K142-V2)
+evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnK142*
+# Positivo Motion (N14ZP6, N14ZP7)
+evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnN14ZP[67]*
+# Positivo Motion (CW14Q01P) (CW14Q01P-V2)
+evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnCW14Q01P*
+ KEYBOARD_KEY_70073=f21                                 # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_7006b=prog1                               # Programmable button
+ KEYBOARD_KEY_7006c=prog2                               # Programmable button
+ KEYBOARD_KEY_7006d=prog3                               # Programmable button
+ KEYBOARD_KEY_7006e=prog4                               # Programmable button
+
+###########################################################
 # Other
 ###########################################################
 
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index e06d204..2c19ab3 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -3,16 +3,14 @@
 # The lookup keys are composed in:
 #   60-sensor.rules
 #
-# Note: The format of the "sensor:" prefix match key is a contract between the
-# rules file and the hardware data, it might change in later revisions to
-# support more or better matches, it is not necessarily expected to be a stable
-# ABI.
-#
 # Match string formats:
+# sensor:<label>:modalias:<parent modalias pattern>:dmi:<dmi pattern>
 # sensor:modalias:<parent modalias pattern>:dmi:<dmi pattern>
 #
 # The device modalias can be seen in the `modalias` file of the sensor parent,
+# and the device label can be seen in the `label` file of the sensor,
 # for example:
+#   cat /sys/`udevadm info -q path -n /dev/iio:device0`/label
 #   cat /sys/`udevadm info -q path -n /dev/iio:device0`/../modalias
 #
 # The full DMI string of the running machine can be read from
@@ -47,8 +45,8 @@
 # subsystem[1]. The default, when unset, is equivalent to:
 #   ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 1, 0; 0, 0, 1
 # eg. the identity matrix,
-# and <value> is an integer value above which an object is considered
-# close by a proximity sensor:
+# and <value> is an integer value above or equal to which an object is
+# considered close by a proximity sensor:
 #   PROXIMITY_NEAR_LEVEL=100
 #
 # [1]: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=dfc57732ad38f93ae6232a3b4e64fd077383a0f1
@@ -94,6 +92,9 @@
 sensor:modalias:acpi:BOSC0200*:dmi:*svnAcer*:*TP-SW5-017-17BU:*
  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, -1
 
+sensor:modalias:acpi:BOSC0200*:dmi:*:svnAcer:pnSW5-017:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+
 sensor:modalias:acpi:BMA250E*:dmi:*:svnAcer:pnIconiaW1-810:*
  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
 
@@ -112,6 +113,14 @@
  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
 
 #########################################
+# Aquarius
+#########################################
+
+# Aquarius NS483
+sensor:modalias:acpi:MXC6655*:dmi:*:svnAquarius*:pnNS483:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+
+#########################################
 # Archos
 #########################################
 sensor:modalias:acpi:SMO8500*:dmi:*:svnARCHOS:pnARCHOS80Cesium:*
@@ -128,6 +137,8 @@
 
 sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnM80TA:*
 sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TA:*
+sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAF:*
+sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAM:*
 sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA:*
  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
 
@@ -167,6 +178,18 @@
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
 
 #########################################
+# AYANEO
+#########################################
+
+# AYANEO AIR
+sensor:modalias:acpi:BMI0160*:dmi:*:svnAYANEO:pnAIR*:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+
+# AYANEO NEXT
+sensor:modalias:acpi:BMI0160*:dmi:*:svnAYANEO:pn*NEXT*:*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+
+#########################################
 # Chuwi
 #########################################
 
@@ -198,7 +221,11 @@
 sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvrP02A_C106.60E:*:svnDefaultstring:pnDefaultstring:*
  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
 
-# Chuwi Hi10 Pro
+# Chuwi Hi10 Plus (CWI527)
+sensor:modalias:acpi:BOSC0200*:dmi:*:svnCHUWIINNOVATIONANDTECHNOLOGY*:pnHi10plustablet:*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+
+# Chuwi Hi10 Pro (CWI529)
 sensor:modalias:acpi:BOSC0200*:dmi:*:svn*CHUWIINNOVATIONANDTECHNOLOGY*:pnHi10protablet:*
  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
 
@@ -206,6 +233,14 @@
 sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10X:*
  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
 
+# Chuwi Hi10 X (N4120 processor version)
+sensor:modalias:acpi:KIOX000A*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10X:*
+ ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
+
+# Chuwi Hi10 Go
+sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIINNOVATIONLIMITED:pnHi10Go:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0,-1, 0; 0, 0, 1
+
 # Chuwi Hi12
 sensor:modalias:acpi:BOSC0200*:dmi:*:svnHampoo:pnP02BD6_HI-122LP:*
 sensor:modalias:acpi:BOSC0200*:dmi:*:svnDefaultstring:pnDefaultstring:*
@@ -242,6 +277,10 @@
 sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvrY13D_KB133.103:bd06/01/2018:*svnHampoo:pnDefaultstring:pvrV100:rvnHampoo:rnY13D_KB133:rvrV100:cvnDefaultstring:ct9:cvrDefaultstring:*
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
 
+# Chuwi SurBook Mini (CWI540)
+sensor:modalias:acpi:BOSC0200*:dmi:*:svnHampoo*:pnC3W6_AP108_4GB:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+
 #########################################
 # Connect
 #########################################
@@ -249,6 +288,13 @@
  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
 
 #########################################
+# CSL Computer
+#########################################
+# CSL Panther Tab HD
+sensor:modalias:acpi:KIOX000A*:dmi:*:svnCSL*Computer*:pnCSL*Panther*Tab*HD:*
+ ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
+
+#########################################
 # Cube
 #########################################
 
@@ -269,6 +315,7 @@
 
 # Cube iWork 10 Flagship
 sensor:modalias:acpi:BOSC0200*:dmi:*:svnCube:pnI15-TC:*
+sensor:modalias:acpi:BOSC0200*:dmi:*:svnALLDOCUBE:pnI15-TG:*
  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
 
 # Cube iWork 11 Stylus
@@ -280,6 +327,14 @@
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
 
 #########################################
+# Cyberbook
+#########################################
+
+# Cyberbook T116
+sensor:modalias:acpi:KIOX000A*:dmi:*:rvnDefaultstring:rnCherryTrailCR:*:sku20170531:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+
+#########################################
 # Cytrix (Mytrix)
 #########################################
 sensor:modalias:acpi:*KIOX000A*:dmi:*svn*CytrixTechnology:*pn*Complex11t:*
@@ -289,12 +344,17 @@
 # Dell
 #########################################
 sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnVostro5581:*
- ACCEL_LOCATION=base
-
-sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnLatitude9520:*:ct10:*
- ACCEL_LOCATION=base
-
-sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnLatitude7420:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0A36:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0A3E:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0B09:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0B0B:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0B0D:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0B11:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0C00:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0C02:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0C40:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0C41:*
+sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0C42:*
  ACCEL_LOCATION=base
 
 # Dell Venue 8 Pro 3845
@@ -306,6 +366,14 @@
  ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, 1
 
 #########################################
+# DERE
+#########################################
+
+# DBook D10 / Juno Tablet
+sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInternational,LLC.:bvrJP2V*:svnDefaultstring:*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+
+#########################################
 # DEXP
 #########################################
 sensor:modalias:acpi:SMO8500*:dmi:*svn*DEXP*:*pn*DEXPOEM:*
@@ -364,20 +432,20 @@
 #########################################
 # Google Chromebooks
 #########################################
-sensor:modalias:platform:cros-ec-accel:dmi:*:svnGOOGLE:*
+
+# CrOS EC & kernel drivers internally correct for per-board sensor orientations,
+# but they return values in the inverse direction (Android & W3C specs vs HID).
+sensor:modalias:platform:cros-ec-accel:*
+sensor:modalias:platform:cros-ec-accel-legacy:*
+sensor:accel-display:modalias:platform:cros-ec-accel:*
+sensor:accel-display:modalias:platform:cros-ec-accel-legacy:*
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
 
-# caroline board (Samsung Chromebook Pro) reports itself as svnGoogle
-sensor:modalias:platform:cros-ec-accel:dmi:*:svnGoogle:pnCaroline*:*
- ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
-
-# Dell Inspiron Chromebook 14 2-in-1
-sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnVayne*:*
- ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
-
-# nocturne board (Google Pixel Slate)
-sensor:modalias:platform:cros-ec-accel:dmi:*Google_Nocturne*:*
- ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+# Base accel reports the same as display when lid angle is 180 degrees (vs 0),
+# so it needs an additional 180 degree rotation around the X axis.
+sensor:accel-base:modalias:platform:cros-ec-accel:*
+sensor:accel-base:modalias:platform:cros-ec-accel-legacy:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
 
 #########################################
 # GP-electronic
@@ -406,6 +474,20 @@
 sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInc.:bvr5.11:bd05/25/2017:*svnDefaultstring:pnDefaultstring:pvrDefaultstring:rvnAMICorporation:rnDefaultstring:rvrDefaultstring:cvnDefaultstring:ct3:cvrDefaultstring:*
  ACCEL_LOCATION=base
 
+# GPD Pocket 3
+sensor:modalias:acpi:MXC6655*:dmi:*:svnGPD:pnG1621-02:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+
+#########################################
+# Hometech
+########################################
+
+# Nobody bothered to use Linux on any device of this manufacturer
+# so current marks might be too general and need fixes.
+# These values are based on Wi101 model.
+sensor:modalias:acpi:BMA250E*:dmi:*:svnInsyde*:pni101c:*
+ ACCEL_MOUNT_MATRIX=0,1,0;-1,0,0;-1,0,0
+
 #########################################
 # HP
 #########################################
@@ -420,10 +502,16 @@
 sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:*
  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
 
-# HP Pavillion X2 10-n000nd
+# HP Pavilion X2 10-n000nd
 sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachable:*:rn815D:*
+# HP Pavilion X2 10-k010nr
+sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2DetachablePC10:*
  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
 
+# HP Pro Tablet 408 G1
+sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPProTablet408:*:rn8048:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
+
 #########################################
 # I.T.Works
 #########################################
@@ -513,6 +601,10 @@
 sensor:modalias:acpi:BOSC0200*:dmi:*:svnLENOVO:*pvrThinkPadYoga11e4thGen:*
  ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, -1
 
+# Lenovo ThinkPad Yoga 11e 5th Gen (20LN-S14900)
+sensor:modalias:acpi:BOSC0200*:dmi:*pvrThinkPadYoga11e5thGen:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1
+
 # Miix3-1030
 sensor:modalias:acpi:BMA250E*:dmi:bvnLENOVO:*:pvrLenovoMIIX3-1030:*
  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
@@ -556,6 +648,10 @@
  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 1, 0; 0, 0, -1
  ACCEL_LOCATION=base
 
+# IdeaPad Duet 3 10IGL5 (82AT)
+sensor:modalias:acpi:SMO8B30*:dmi:*:svnLENOVO*:pn82AT:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
+
 #########################################
 # LINX
 #########################################
@@ -564,6 +660,10 @@
 sensor:modalias:acpi:BOSC0200*:dmi:*:svnLINX*:pnLINX1010B:*
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1
 
+# Linx 1020
+sensor:modalias:acpi:MIRAACC*:dmi:*:svnLINX*:pnLINX1020:*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, -1
+
 # Linx 12X64, 12V64 and Vision 8
 sensor:modalias:acpi:KIOX000A*:dmi:*:svnLINX*:pnLINX12*64:*
 sensor:modalias:acpi:KIOX000A*:dmi:*:svnLINX:pnVISION004:*
@@ -604,12 +704,15 @@
 sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE*:*
 # Medion Akoya E3222 MD62450
 sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnMEDION*:*
+# and rebrands of the above
+sensor:modalias:acpi:KIOX010A*:dmi:*:rvnMEDION:rnMEDION*:*
  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
  ACCEL_LOCATION=display
 
 # Same as above, but for base sensor
 sensor:modalias:acpi:KIOX020A*:dmi:*:svnMEDION:pnE*:*
 sensor:modalias:acpi:KIOX020A*:dmi:*:svnMEDION:pnMEDION*:*
+sensor:modalias:acpi:KIOX020A*:dmi:*:rvnMEDION:rnMEDION*:*
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1
  ACCEL_LOCATION=base
 
@@ -701,6 +804,10 @@
 sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvr5.12:bd07/17/2019:*svnDefaultstring:pnDefaultstring:pvrDefaultstring:rvnDefaultstring:rnDefaultstring:rvrDefaultstring:cvnDefaultstring:ct3:cvrDefaultstring:*
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
 
+# One-Netbook OneXPlayer Mini (and maybe others)
+sensor:modalias:acpi:BMI0160*:dmi:*:rnONEXPLAYER:rvrV01:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1
+
 #########################################
 # Peaq
 #########################################
@@ -713,6 +820,10 @@
 sensor:modalias:acpi:KIOX000A*:dmi:*:svnPIPO:pnW2S:*
  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
 
+# Pipo W2Pro
+sensor:modalias:acpi:KIOX0008*:dmi:*svnPIPO:pnW2pro:*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+
 # Pipo W4
 sensor:modalias:acpi:SMO8500*:dmi:*:bvrV8L_WIN32_CHIPHD_*_DX:*:rvnAMICorporation:rnAptioCRB:*
  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
@@ -743,7 +854,16 @@
 sensor:modalias:i2c:bmc150_accel:dmi:bvnINSYDECorp.:*:svnInsyde:pnBayTrail:*:rvn105B:rn0E57:*
  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
 
+##########################################
+# Positivo
 #########################################
+
+# Positivo Duo K116R
+sensor:modalias:acpi:KIOX010A*:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvnPositivoTecnologiaSA:rnK116R*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+ ACCEL_LOCATION=display
+
+########################################
 # Predia
 #########################################
 
@@ -809,6 +929,10 @@
 sensor:modalias:acpi:SMO8500*:dmi:*bd12/19/2014:*:rvnTECLAST:rntPAD:*
  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
 
+# Teclast X98 Air 3G (C5J6), "tPAD" is too generic also match on newest BIOS date
+sensor:modalias:acpi:SMO8500*:dmi:*bd05/05/2015:*:rvnTECLAST:rntPAD:*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+
 # Teclast X98 Plus I (A5C6), generic DMI strings, match entire dmi modalias inc. bios-date
 # '*' in ":*svn" is there because kernels >= 5.8 have inserted a br field there
 sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInc.:bvr5.011:bd11/03/2015:*svnTobefilledbyO.E.M.:pnTobefilledbyO.E.M.:pvrTobefilledbyO.E.M.:rvnAMICorporation:rnCherryTrailCR:rvrTobefilledbyO.E.M.:cvnToBeFilledByO.E.M.:ct3:cvrToBeFilledByO.E.M.:*
@@ -885,6 +1009,9 @@
 sensor:modalias:acpi:SMO8500*:dmi:*:svnUMAX:pnVisionBook10WiPlus:*
  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
 
+sensor:modalias:acpi:MXC6655*:dmi:*:svnUMAX:pnVisionbook12WrTab:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+
 #########################################
 # Voyo
 #########################################
diff --git a/hwdb.d/70-analyzers.hwdb b/hwdb.d/70-analyzers.hwdb
index 899ece3..821ebcb 100644
--- a/hwdb.d/70-analyzers.hwdb
+++ b/hwdb.d/70-analyzers.hwdb
@@ -1,14 +1,22 @@
 # This file is part of systemd.
 #
 # Database for signal analyzers (protocol analyzers, logic analyzers,
-# oscilloscopes, multimeters, bench power supplies, etc.) that should
-# be accessible to the seat owner.
+# oscilloscopes, multimeters, bench power supplies, etc.) or just
+# anything that has to do with electronics and that should be
+# accessible to the seat owner.
 #
 # Permitted keys:
 #   Specify if a device is a signal analyzer
 #   ID_SIGNAL_ANALYZER=1|0
 
 ###########################################################
+# Greaseweazle
+###########################################################
+# Greaseweazle
+usb:v1209p4D69*
+ ID_SIGNAL_ANALYZER=1
+
+###########################################################
 # Total Phase
 ###########################################################
 # Aarvark I2C/SPI Host Adapter
@@ -29,7 +37,6 @@
 
 # Power Delivery Analyzers
 usb:v1679p6003*
-usb:v0483pDF11*
  ID_SIGNAL_ANALYZER=1
 
 ###########################################################
diff --git a/hwdb.d/70-av-production.hwdb b/hwdb.d/70-av-production.hwdb
index 17ac1b4..f89f26e 100644
--- a/hwdb.d/70-av-production.hwdb
+++ b/hwdb.d/70-av-production.hwdb
@@ -2,7 +2,8 @@
 #
 # Database for AV production controllers that should be accessible to the seat owner.
 #
-# This covers DJ tables, and music-oriented key pads
+# This covers DJ tables, music-oriented key pads, and streaming-oriented key pads
+# such as Elgato Stream Deck
 #
 # To add local entries, copy this file to
 #   /etc/udev/hwdb.d/
@@ -24,6 +25,37 @@
 usb:v1157p0300*
  ID_AV_PRODUCTION_CONTROLLER=1
 
+################
+# Elgato
+################
+# Stream Deck Original (gen 1)
+usb:v0FD9p0060*
+ ID_AV_PRODUCTION_CONTROLLER=1
+
+# Stream Deck Mini
+usb:v0FD9p0063*
+ ID_AV_PRODUCTION_CONTROLLER=1
+
+# Stream Deck XL
+usb:v0FD9p006C*
+ ID_AV_PRODUCTION_CONTROLLER=1
+
+# Stream Deck XL (gen 2)
+usb:v0FD9p008F*
+ ID_AV_PRODUCTION_CONTROLLER=1
+
+# Stream Deck Original (gen 2)
+usb:v0FD9p006D*
+ ID_AV_PRODUCTION_CONTROLLER=1
+
+# Stream Deck MK.2
+usb:v0FD9p0080*
+ ID_AV_PRODUCTION_CONTROLLER=1
+
+# Stream Deck Pedal
+usb:v0FD9p0086*
+ ID_AV_PRODUCTION_CONTROLLER=1
+
 #############################
 # Hercules (Guillemot Corp)
 #############################
diff --git a/hwdb.d/70-joystick.hwdb b/hwdb.d/70-joystick.hwdb
index 9d5c4fc..8e942c8 100644
--- a/hwdb.d/70-joystick.hwdb
+++ b/hwdb.d/70-joystick.hwdb
@@ -5,11 +5,6 @@
 # The lookup keys are composed in:
 #   70-joystick.rules
 #
-# Note: The format of the "joystick:" prefix match key is a
-# contract between the rules file and the hardware data, it might
-# change in later revisions to support more or better matches, it
-# is not necessarily expected to be a stable ABI.
-#
 # Match string format:
 # joystick:<bustype>:v<vid>p<pid>:name:<name>:
 #
diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb
index b14ad6f..e0a9454 100644
--- a/hwdb.d/70-mouse.hwdb
+++ b/hwdb.d/70-mouse.hwdb
@@ -6,11 +6,6 @@
 # The lookup keys are composed in:
 #   70-mouse.rules
 #
-# Note: The format of the "mouse:" prefix match key is a contract between the
-# rules file and the hardware data, it might change in later revisions to
-# support more or better matches, it is not necessarily expected to be a stable
-# ABI.
-#
 # Match key format:
 # mouse:<subsystem>:v<vid>p<pid>:name:<name>:
 #
@@ -159,6 +154,15 @@
  MOUSE_DPI=1300@1000
 
 ##########################################
+# Cherry
+##########################################
+
+# Cherry MW 2310
+mouse:usb:v1A81p1701:name:G-Tech Wireless Dongle Mouse:*
+ KEYBOARD_KEY_90005=back
+ KEYBOARD_KEY_90004=forward
+
+##########################################
 # Chicony
 ##########################################
 
@@ -167,6 +171,14 @@
  MOUSE_DPI=1000@142
 
 ##########################################
+# CST
+##########################################
+
+# CST Laser Trackball
+mouse:usb:v5332p1400:name:Clearly Superior Technologies. CST Laser Trackball:*
+ MOUSE_DPI=400@1000 *800@1000 1600@1000
+
+##########################################
 # Dell
 ##########################################
 
@@ -198,6 +210,17 @@
 mouse:usb:v056ep010d:name:ELECOM TrackBall Mouse HUGE TrackBall:*
  MOUSE_DPI=500@125 *1000@125 1500@125
 
+# Elecom DEFT Pro TrackBall (M-DPT1MR)
+mouse:usb:v056ep0131:name:ELECOM TrackBall Mouse DEFT Pro TrackBall Mouse:*
+ MOUSE_DPI=*500 1000 1500
+ MOUSE_WHEEL_CLICK_ANGLE=10
+
+# Elecom Relacon (M-RT1DR)
+mouse:usb:v056ep0155:name:ELECOM ELECOM Relacon:*
+ ID_INPUT_TRACKBALL=1
+ MOUSE_DPI=*500 1000 1500
+ MOUSE_WHEEL_CLICK_ANGLE=30
+
 ##########################################
 # Fujitsu Siemens
 ##########################################
@@ -274,6 +297,8 @@
 
 # Kensington Expert Mouse trackball
 mouse:usb:v047dp1020:*Kensington Expert Mouse*:*
+mouse:usb:v047dp8018:name:Kensington Expert Wireless TB Mouse:*
+mouse:bluetooth:v047dp8019:name:Expert Wireless TB Mouse:*
  ID_INPUT_TRACKBALL=1
  MOUSE_DPI=400@125
 
@@ -372,6 +397,12 @@
 mouse:usb:v046dpc08b:name:Logitech G502 HERO Gaming Mouse:*
  MOUSE_DPI=1200@1000 *2400@1000 3200@1000 6400@1000
 
+# Logitech G502 X (Wired)
+mouse:usb:v046dpc098:name:Logitech, Inc. G502 X LIGHTSPEED:*
+# Logitech G502 X (Wireless)
+mouse:usb:v046dpc547:name:Logitech USB Receiver:*
+ MOUSE_DPI=1200@1000 *2400@1000 3200@1000 6400@1000
+
 # Logitech G700 Laser Mouse (Wired)
 mouse:usb:v046dpc06b:name:Logitech G700 Laser Mouse:*
 # Logitech G700 Laser Mouse (Wireless)
@@ -523,6 +554,10 @@
 mouse:usb:v046dpc01b:name:Logitech USB-PS/2 Optical Mouse:*
  MOUSE_DPI=400@125
 
+# Logitech USB-PS/2 M-BT96A
+mouse:usb:v046dpc03d:name:Logitech USB-PS/2 Optical Mouse:*
+ MOUSE_DPI=400@125
+
 # Logitech USB-PS/2 M-BT58
 mouse:usb:v046dpc03e:name:Logitech USB-PS/2 Optical Mouse:*
  MOUSE_DPI=400@125
diff --git a/hwdb.d/70-pda.hwdb b/hwdb.d/70-pda.hwdb
new file mode 100644
index 0000000..3fdb4ef
--- /dev/null
+++ b/hwdb.d/70-pda.hwdb
@@ -0,0 +1,50 @@
+# This file is part of systemd.
+#
+# Database for handhelds (PDAs, calculators, etc.) that should be accessible
+# the seat owner.
+#
+# Permitted keys:
+#   Specify if a device is a handheld
+#   ID_PDA=1|0
+
+###########################################################
+# HP Inc.
+###########################################################
+# HP x9G+ Calculator
+usb:v03F0p0121*
+ ID_PDA=1
+
+# HP Prime
+usb:v03F0p1541*
+ ID_PDA=1
+
+###########################################################
+# Texas Instruments
+###########################################################
+# SilverLink
+usb:v0451pE001*
+ ID_PDA=1
+
+# TI-84 Plus DirectLink
+usb:v0451pE003*
+ ID_PDA=1
+
+# TI-89 Titanium DirectLink
+usb:v0451pE004*
+ ID_PDA=1
+
+# TI-84 Plus Silver Edition DirectLink
+usb:v0451pE008*
+ ID_PDA=1
+
+# TI-Nspire DirectLink
+usb:v0451pE012*
+ ID_PDA=1
+
+# TI-Nspire Lab Cradle
+usb:v0451pE01C*
+ ID_PDA=1
+
+# TI-Nspire CX II DirectLink
+usb:v0451pE022*
+ ID_PDA=1
diff --git a/hwdb.d/70-pointingstick.hwdb b/hwdb.d/70-pointingstick.hwdb
index b427f21..a78d088 100644
--- a/hwdb.d/70-pointingstick.hwdb
+++ b/hwdb.d/70-pointingstick.hwdb
@@ -1,23 +1,21 @@
 # This file is part of systemd.
 #
 # Pointingstick const-accel configuration, to make different brand / model
-# laptop pointingsticks have the same speed / feel, and per model adjustment
-# of the IBM TrackPoint driver's sensitivity setting
+# laptop pointingsticks have the same speed / feel, and per model adjustment of
+# the IBM TrackPoint and Dell DualPoint Stick driver's sensitivity setting.
+#
+# ########################### MATCHING #######################################
 #
 # The lookup keys are composed in:
 #   60-evdev.rules
 #
-# Note: The format of the "evdev:" prefix match key is a contract between the
-# rules file and the hardware data, it might change in later revisions to
-# support more or better matches, it is not necessarily a stable ABI.
-#
 # Supported hardware matches are:
 #  - Generic input devices match:
 #      evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
 #    This matches on the kernel modalias of the input-device, mainly:
 #    ZZZZ is the bus-id (see /usr/include/linux/input.h BUS_*), YYYY, XXXX and
 #    WWW are the 4-digit hex uppercase vendor, product and version ID and VVVV
-#    is an arbitrary length input-modalias describing the device capabilities.
+#    is a variable-length input-modalias describing the device capabilities.
 #    The vendor, product and version ID for a device node "eventX" is listed
 #    in /sys/class/input/eventX/device/id.
 #
@@ -25,15 +23,24 @@
 #      evdev:name:<input device name>:dmi:bvn*:bvr*:bd*:svn<vendor>:pn*:*
 #    <input device name> is the name device specified by the driver,
 #    <vendor> is the firmware-provided string from the kernel DMI modalias,
-#    see /sys/class/dmi/id/modalias
+#    see /sys/class/dmi/id/modalias.
+#
+#  - Extended input driver device name, properties and DMI data match:
+#      evdev:name:<input device name>:phys:<phys>:ev:<ev>:dmi:bvn*:bvr*:bd*:svn<vendor>:pn*
+#    <input device name> is the name device specified by the
+#    driver, <phys> is the physical-device-path, "cat
+#    /sys/class/input/input?/phys", <ev> is the event bitmask, "cat
+#    /sys/class/input/input?/capabilities/ev" and <vendor> is the
+#    firmware-provided string exported by the kernel DMI modalias,
+#    see /sys/class/dmi/id/modalias.
 #
 # To add local entries, create a new file
 #   /etc/udev/hwdb.d/71-pointingstick-local.hwdb
 # and add your rules there. To load the new rules execute (as root):
 #   systemd-hwdb update
 #   udevadm trigger /dev/input/eventXX
-# where /dev/input/eventXX is the pointingstick in question. If in
-# doubt, simply use /dev/input/event* to reload all input rules.
+# where /dev/input/eventXX is the pointingstick in question. If in doubt, simply
+# use /dev/input/event* to reload all input rules.
 #
 # If your changes are generally applicable, preferably send them as a pull
 # request to
@@ -43,6 +50,7 @@
 #   udevadm info /dev/input/eventXX.
 #
 # Allowed properties are:
+#   ID_INPUT_POINTINGSTICK
 #   POINTINGSTICK_CONST_ACCEL (deprecated)
 #   POINTINGSTICK_SENSITIVITY
 #
@@ -78,6 +86,13 @@
 
 # Sort by brand, model
 
+##########################################
+# Generic
+##########################################
+evdev:name:*[tT]rack[pP]oint*:*
+evdev:name:*[dD]ual[pP]oint [sS]tick*:*
+ ID_INPUT_POINTINGSTICK=1
+
 #########################################
 # Dell
 #########################################
diff --git a/hwdb.d/70-touchpad.hwdb b/hwdb.d/70-touchpad.hwdb
index 8194d98..262bca3 100644
--- a/hwdb.d/70-touchpad.hwdb
+++ b/hwdb.d/70-touchpad.hwdb
@@ -5,11 +5,6 @@
 # The lookup keys are composed in:
 #   70-touchpad.rules
 #
-# Note: The format of the "touchpad:" prefix match key is a
-# contract between the rules file and the hardware data, it might
-# change in later revisions to support more or better matches, it
-# is not necessarily expected to be a stable ABI.
-#
 # Match string format:
 # touchpad:<subsystem>:v<vid>p<pid>:name:<name>:
 #
diff --git a/hwdb.d/80-ieee1394-unit-function.hwdb b/hwdb.d/80-ieee1394-unit-function.hwdb
index aa00711..cf55f55 100644
--- a/hwdb.d/80-ieee1394-unit-function.hwdb
+++ b/hwdb.d/80-ieee1394-unit-function.hwdb
@@ -42,11 +42,16 @@
 # * Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading Association, TA Document
 #   1999027)
 #
+# Exceptional layout of configuration ROM for legacy device is described in annex of the above
+# document. The layout has some entries for model information in vendor directory instead of root
+# or unit directories. For the case, Linux FireWire subsystem don't detect Model_ID and model name,
+# thus node key without 'mo' field is detected. Wild card pattern is used to match the case with and
+# without mo field in customized key for node device.
 
 # Just for backward compatibility. Please invalidate IEEE1394_UNIT_FUNCTION_VIDEO by adding entries
 # if it is inconvenient.
-ieee1394:node:ven*mo*units*0x00a02d:0x010001*
-ieee1394:ven*mo*sp0000A02Dver00010001
+ieee1394:node:ven*units*0x00a02d:0x010001*
+ieee1394:ven*sp0000A02Dver00010001
  IEEE1394_UNIT_FUNCTION_VIDEO=1
 
 #
@@ -55,14 +60,14 @@
 #
 
 # Please invalidate IEEE1394_UNIT_FUNCTION_VIDEO by adding entries if it is inconvenient.
-ieee1394:node:ven*mo*units*0x00a02d:0x014000*
-ieee1394:ven*mo*sp0000A02Dver00014000
+ieee1394:node:ven*units*0x00a02d:0x014000*
+ieee1394:ven*sp0000A02Dver00014000
  IEEE1394_UNIT_FUNCTION_VIDEO=1
 
 # Just for backward compatibility. Please invalidate IEEE1394_UNIT_FUNCTION_VIDEO by adding entries
 # if it is inconvenient.
-ieee1394:node:ven*mo*units*0x00a02d:0x014001*
-ieee1394:ven*mo*sp0000A02Dver00014001
+ieee1394:node:ven*units*0x00a02d:0x014001*
+ieee1394:ven*sp0000A02Dver00014001
  IEEE1394_UNIT_FUNCTION_VIDEO=1
 
 #
@@ -112,14 +117,6 @@
 # BridgeCo. Enhancement BreakOut Box (BeBoB) for DM1000, DM1100, and DM1500 ASICs.
 #
 
-# Match to eAR Master One, Eroica, Figaro, and Ciaccona.
-ieee1394:node:ven0x000aacmo0x000002units0x00a02d:0x010001
-ieee1394:ven00000AACmo00000002sp0000A02Dver00010001
- ID_VENDOR_FROM_DATABASE=Acoustic Reality
- ID_MODEL_FROM_DATABASE=eAR FireWire Audio
- IEEE1394_UNIT_FUNCTION_AUDIO=1
- IEEE1394_UNIT_FUNCTION_VIDEO=0
-
 ieee1394:node:ven0x0003dbmo0x01eeeeunits0x00a02d:0x010001
 ieee1394:ven000003DBmo0001EEEEsp0000A02Dver00010001
  ID_VENDOR_FROM_DATABASE=Apogee Electronics
@@ -322,7 +319,7 @@
  IEEE1394_UNIT_FUNCTION_AUDIO=1
  IEEE1394_UNIT_FUNCTION_VIDEO=0
 
-# An extension card for Mackie d.2.
+# An extension card for Mackie d.2. Mackie d.2 Pro is preinstalled model.
 ieee1394:node:ven0x000ff2mo0x010067units0x00a02d:0x010001
 ieee1394:ven00000FF2mo00010067sp0000A02Dver00010001
  ID_VENDOR_FROM_DATABASE=Loud Technologies
@@ -330,8 +327,41 @@
  IEEE1394_UNIT_FUNCTION_AUDIO=1
  IEEE1394_UNIT_FUNCTION_VIDEO=0
 
-# Match to FireFly 202, 302, 808, and 808 Universal.
-# Match to HelixBoard 12 mk II, 18 mk II, 24 mk II, 12 Universal, 18 Universal, and 24 Universal.
+ieee1394:node:ven0x001496mo0x050000units0x00a02d:0x010001
+ieee1394:ven00001496mo00050000sp0000A02Dver00010001
+ ID_VENDOR_FROM_DATABASE=Phonic
+ ID_MODEL_FROM_DATABASE=Helixboard 12 FireWire MkII
+ IEEE1394_UNIT_FUNCTION_MIDI=1
+ IEEE1394_UNIT_FUNCTION_AUDIO=1
+ IEEE1394_UNIT_FUNCTION_VIDEO=0
+
+ieee1394:node:ven0x001496mo0x060000units0x00a02d:0x010001
+ieee1394:ven00001496mo00060000sp0000A02Dver00010001
+ ID_VENDOR_FROM_DATABASE=Phonic
+ ID_MODEL_FROM_DATABASE=Helixboard 18 FireWire MkII
+ IEEE1394_UNIT_FUNCTION_MIDI=1
+ IEEE1394_UNIT_FUNCTION_AUDIO=1
+ IEEE1394_UNIT_FUNCTION_VIDEO=0
+
+ieee1394:node:ven0x001496mo0x070000units0x00a02d:0x010001
+ieee1394:ven00001496mo00070000sp0000A02Dver00010001
+ ID_VENDOR_FROM_DATABASE=Phonic
+ ID_MODEL_FROM_DATABASE=Helixboard 24 FireWire MkII
+ IEEE1394_UNIT_FUNCTION_MIDI=1
+ IEEE1394_UNIT_FUNCTION_AUDIO=1
+ IEEE1394_UNIT_FUNCTION_VIDEO=0
+
+ieee1394:node:ven0x001496mo0x080000units0x00a02d:0x010001
+ieee1394:ven00001496mo00080000sp0000A02Dver00010001
+ ID_VENDOR_FROM_DATABASE=Phonic
+ ID_MODEL_FROM_DATABASE=Firefly 808 FireWire
+ IEEE1394_UNIT_FUNCTION_MIDI=1
+ IEEE1394_UNIT_FUNCTION_AUDIO=1
+ IEEE1394_UNIT_FUNCTION_VIDEO=0
+
+# Match to FireFly 202, 302, 808 Universal.
+# Match to HelixBoard 12 FireWire, 18 FireWire, 24 FireWire.
+# Match to HelixBoard 12 Universal, 18 Universal, and 24 Universal.
 ieee1394:node:ven0x001496mo0x000000units0x00a02d:0x010001
 ieee1394:ven00001496mo00000000sp0000A02Dver00010001
  ID_VENDOR_FROM_DATABASE=Phonic
@@ -386,6 +416,15 @@
  IEEE1394_UNIT_FUNCTION_AUDIO=1
  IEEE1394_UNIT_FUNCTION_VIDEO=0
 
+# Match to TerraTec Aureon 7.1 FireWire.
+# Match to eAR Master One, Eroica, Figaro, and Ciaccona. OEM by TerraTec perhaps.
+ieee1394:node:ven0x000aacmo0x000002units0x00a02d:0x010001
+ieee1394:ven00000AACmo00000002sp0000A02Dver00010001
+ ID_VENDOR_FROM_DATABASE=TerraTec
+ ID_MODEL_FROM_DATABASE=Aureon 7.1 FireWire
+ IEEE1394_UNIT_FUNCTION_AUDIO=1
+ IEEE1394_UNIT_FUNCTION_VIDEO=0
+
 ieee1394:node:ven0x000aacmo0x000003units0x00a02d:0x010001
 ieee1394:ven00000AACmo00000003sp0000A02Dver00010001
  ID_VENDOR_FROM_DATABASE=TerraTec Electronic
@@ -545,6 +584,7 @@
  IEEE1394_UNIT_FUNCTION_AUDIO=1
  IEEE1394_UNIT_FUNCTION_VIDEO=0
 
+# Match to former model of Onyx 1640i.
 ieee1394:node:ven0x000ff2mo0x001640units0x00a02d:0x010001
 ieee1394:ven00000FF2mo00001640sp0000A02Dver00010001
  ID_VENDOR_FROM_DATABASE=Loud Technologies
@@ -707,7 +747,7 @@
  ID_MODEL_FROM_DATABASE=Mackie Onyx Blackbird
  IEEE1394_UNIT_FUNCTION_AUDIO=1
 
-# Match to Onyx 1640i, and latter models of Onyx 820i, 1220i, and 1620i.
+# Match to latter models of Onyx 820i, 1220i, 1620i, and 1640i.
 ieee1394:node:ven0x000ff2mo0x000006units0x000ff2:0x000001
 ieee1394:ven00000FF2mo00000006sp00000FF2ver00000001
  ID_VENDOR_FROM_DATABASE=Loud Technologies
@@ -1054,6 +1094,20 @@
  IEEE1394_UNIT_FUNCTION_MIDI=1
  IEEE1394_UNIT_FUNCTION_AUDIO=1
 
+ieee1394:node:ven0x0001f2units0x0001f2:0x000037
+ieee1394:ven000001F2mo00102800sp000001F2ver00000037
+ ID_VENDOR_FROM_DATABASE=MOTU
+ ID_MODEL_FROM_DATABASE=MOTU 896 mk3 Hybrid
+ IEEE1394_UNIT_FUNCTION_MIDI=1
+ IEEE1394_UNIT_FUNCTION_AUDIO=1
+
+ieee1394:node:ven0x0001f2units0x0001f2:0x000039
+ieee1394:ven000001F2mo*sp000001F2ver00000039
+ ID_VENDOR_FROM_DATABASE=MOTU
+ ID_MODEL_FROM_DATABASE=Track 16
+ IEEE1394_UNIT_FUNCTION_MIDI=1
+ IEEE1394_UNIT_FUNCTION_AUDIO=1
+
 ieee1394:node:ven0x0001f2units0x0001f2:0x000045
 ieee1394:ven000001F2mo*sp000001F2ver00000045
  ID_VENDOR_FROM_DATABASE=MOTU
@@ -1262,6 +1316,17 @@
  IEEE1394_UNIT_FUNCTION_VIDEO=1
 
 #
+# Legacy layout of configuration ROM described in Annex 1 of 'Configuration ROM for AV/C Devices
+# 1.0 (December 12, 2000, 1394 Trading Association, TA Document 1999027)'.
+#
+
+ieee1394:node:ven0x080046units0x00a02d:0x010001
+ieee1394:ven00080046mo00000000sp0000A02Dver00010001
+ ID_VENDOR_FROM_DATABASE=Sony Corporation
+ ID_MODEL_FROM_DATABASE=DCR-TRV310
+ IEEE1394_UNIT_FUNCTION_VIDEO=1
+
+#
 # Node with multiple units for several functions.
 #
 # When deciding the type of unit, please cooperate with kernel developers working for driver.
diff --git a/hwdb.d/acpi-update.py b/hwdb.d/acpi-update.py
index 7bdd3f9..e669d0d 100755
--- a/hwdb.d/acpi-update.py
+++ b/hwdb.d/acpi-update.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
 
 from html.parser import HTMLParser
 from enum import Enum
diff --git a/hwdb.d/acpi_id_registry.html b/hwdb.d/acpi_id_registry.html
index cd4ac8c..5573580 100644
--- a/hwdb.d/acpi_id_registry.html
+++ b/hwdb.d/acpi_id_registry.html
@@ -113,6 +113,12 @@
  <tr class="odd"><td>Shanghai Aiwei Electronic Technology Co., Ltd.</td><td>AWDZ</td><td>12/31/2021</td> </tr>
  <tr class="even"><td>Silicom Ltd. Connectivity Solutions</td><td>SILC</td><td>03/28/2022</td> </tr>
  <tr class="odd"><td>NOLO Co., Ltd.</td><td>NOLO</td><td>03/28/2022</td> </tr>
+ <tr class="even"><td>GoUp Co.,Ltd</td><td>GOUP</td><td>06/24/2022</td> </tr>
+ <tr class="odd"><td>Shenzhen Jaguar Microsystems Co.,Ltd.</td><td>JMIC</td><td>09/23/2022</td> </tr>
+ <tr class="even"><td>Elliptic Laboratories AS</td><td>ELAS</td><td>10/20/2022</td> </tr>
+ <tr class="odd"><td>Micro Crystal AG</td><td>MCRY</td><td>11/10/2022</td> </tr>
+ <tr class="even"><td>Cix Technology (Shanghai) Co., Ltd. </td><td>CIXH</td><td>11/16/2022</td> </tr>
+ <tr class="odd"><td>EyeTech Digital Systems</td><td>ETDS</td><td>11/29/2022</td> </tr>
       </tbody>
     </table>
   </body>
diff --git a/hwdb.d/ids_parser.py b/hwdb.d/ids_parser.py
index e30c6b9..ed2c615 100755
--- a/hwdb.d/ids_parser.py
+++ b/hwdb.d/ids_parser.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
 
 import re
 import sys
diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt
index 67fd6c1..90962c6 100644
--- a/hwdb.d/ma-large.txt
+++ b/hwdb.d/ma-large.txt
@@ -1,191034 +1,199713 @@
-OUI/MA-L                                                    Organization                                 
-company_id                                                  Organization                                 
-                                                            Address                                      
-
-00-22-72   (hex)		American Micro-Fuel Device Corp.
-002272     (base 16)		American Micro-Fuel Device Corp.
-				2181 Buchanan Loop
-				Ferndale  WA  98248
-				US
-
-00-D0-EF   (hex)		IGT
-00D0EF     (base 16)		IGT
-				9295 PROTOTYPE DRIVE
-				RENO  NV  89511
-				US
-
-08-61-95   (hex)		Rockwell Automation
-086195     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-F4-BD-9E   (hex)		Cisco Systems, Inc
-F4BD9E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-85-E9   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
-5885E9     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
-				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
-				Chongqing  China  401120
-				CN
-
-BC-23-92   (hex)		BYD Precision Manufacture Company Ltd.
-BC2392     (base 16)		BYD Precision Manufacture Company Ltd.
-				No.3001, Bao He Road, Baolong Industrial, Longgang Street,Longgang Zone, Shenzhen
-				shenzhen    518116
-				CN
-
-40-55-82   (hex)		Nokia
-405582     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-A4-E3-1B   (hex)		Nokia
-A4E31B     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-D8-97-90   (hex)		Commonwealth Scientific and Industrial Research Organisation
-D89790     (base 16)		Commonwealth Scientific and Industrial Research Organisation
-				GPO Box 1700
-				Canberra  ACT  2601
-				AU
-
-88-3A-30   (hex)		Aruba, a Hewlett Packard Enterprise Company
-883A30     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-B8-A5-8D   (hex)		Axe Group Holdings Limited
-B8A58D     (base 16)		Axe Group Holdings Limited
-				Road Town
-				tortola    VG1110
-				VG
-
-50-CE-E3   (hex)		Gigafirm.co.LTD
-50CEE3     (base 16)		Gigafirm.co.LTD
-				3-21-8,kisonishi
-				machida-city  tokyo  1940037
-				JP
-
-98-E7-43   (hex)		Dell Inc.
-98E743     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-C4-19-D1   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
-C419D1     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
-				No. 1500 Zuchongzhi Rd, Building #3
-				Shanghai    201203
-				CN
-
-88-7E-25   (hex)		Extreme Networks, Inc.
-887E25     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-08-60-83   (hex)		zte corporation
-086083     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E0-19-54   (hex)		zte corporation
-E01954     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-10-32-7E   (hex)		Huawei Device Co., Ltd.
-10327E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F8-08-4F   (hex)		Sagemcom Broadband SAS
-F8084F     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-30-FB-B8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-30FBB8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-97-C2   (hex)		Nebulon Inc
-F497C2     (base 16)		Nebulon Inc
-				3089 Skyway Court
-				Fremont  CA  94539
-				US
-
-A4-45-19   (hex)		Xiaomi Communications Co Ltd
-A44519     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-68-DB-F5   (hex)		Amazon Technologies Inc.
-68DBF5     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-24-46-C8   (hex)		Motorola Mobility LLC, a Lenovo Company
-2446C8     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-18-02-AE   (hex)		vivo Mobile Communication Co., Ltd.
-1802AE     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-0C-20-D3   (hex)		vivo Mobile Communication Co., Ltd.
-0C20D3     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-44-D7-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-44D791     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-46-FE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8446FE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-29-18   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D82918     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-D0-03   (hex)		Samsung Electronics Co.,LTD
-D0D003     (base 16)		Samsung Electronics Co.,LTD
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-64-B2-1D   (hex)		Chengdu Phycom Tech Co., Ltd.
-64B21D     (base 16)		Chengdu Phycom Tech Co., Ltd.
-				No.216 beisen road
-				Chengdu  Sichuan  610000
-				CN
-
-C4-29-96   (hex)		Signify B.V.
-C42996     (base 16)		Signify B.V.
-				High Tech Campus 7
-				Eindhoven    5656AE
-				NL
-
-98-06-37   (hex)		IEEE Registration Authority
-980637     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-B8-4A   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-8CB84A     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-98-E8-FA   (hex)		Nintendo Co.,Ltd
-98E8FA     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-38-C4-E8   (hex)		NSS Sp. z o.o.
-38C4E8     (base 16)		NSS Sp. z o.o.
-				Modularna 11
-				Warszawa    02-238
-				PL
-
-34-DD-7E   (hex)		Umeox Innovations Co.,Ltd
-34DD7E     (base 16)		Umeox Innovations Co.,Ltd
-				Room 1208-09, Research Building, Tsinghua Information Port, No. 1, Xindong Road, Nanshan District, Shenzhen
-				Shenzhen  Guangdong  518000
-				CN
-
-CC-CD-64   (hex)		SM-Electronic GmbH
-CCCD64     (base 16)		SM-Electronic GmbH
-				Waldweg 2
-				Stapelfeld / Braak    22145
-				DE
-
-24-DF-A7   (hex)		Hangzhou BroadLink Technology Co.,Ltd
-24DFA7     (base 16)		Hangzhou BroadLink Technology Co.,Ltd
-				Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China
-				Hangzhou  Zhejiang  310052
-				CN
-
-B0-65-F1   (hex)		WIO Manufacturing HK Limited
-B065F1     (base 16)		WIO Manufacturing HK Limited
-				15/F OTB Building, 160 Glocester Road
-				Hong Kong    00000
-				HK
-
-90-12-34   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-901234     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-54-2A-1B   (hex)		Sonos, Inc.
-542A1B     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-5C-92-5E   (hex)		Zioncom Electronics (Shenzhen) Ltd.
-5C925E     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
-				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-08-4F-A9   (hex)		Cisco Systems, Inc
-084FA9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-4F-F9   (hex)		Cisco Systems, Inc
-084FF9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-50-98-B8   (hex)		New H3C Technologies Co., Ltd
-5098B8     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-11-00-AA   (hex)		Private
-1100AA     (base 16)		Private
-
-B8-4D-EE   (hex)		Hisense broadband multimedia technology Co.,Ltd
-B84DEE     (base 16)		Hisense broadband multimedia technology Co.,Ltd
-				Song ling Road 399
-				Qingdao    266000
-				CN
-
-A8-93-52   (hex)		SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
-A89352     (base 16)		SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
-				RM510,418 Guiping Road,xuhui-Park
-				shanghai  shanghai  200233
-				CN
-
-E4-CC-9D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-E4CC9D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-A8-D0-E3   (hex)		Systech Electronics Ltd
-A8D0E3     (base 16)		Systech Electronics Ltd
-				Lever Tech Centre, 69-71 King Yip Street,
-				,    852
-				HK
-
-98-BA-39   (hex)		Doro AB
-98BA39     (base 16)		Doro AB
-				Jörgen Kocksgatan 1B
-				Malmö  Skane  211 20
-				SE
-
-D4-6B-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D46BA6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-05-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CC0577     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-8B-B2   (hex)		Cisco Systems, Inc
-308BB2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-EB-62   (hex)		Shanghai Hulu Devices Co., Ltd
-E0EB62     (base 16)		Shanghai Hulu Devices Co., Ltd
-				509 Caobao Road,  Rm 101-2 Bld 9
-				Shanghai    200233
-				CN
-
-08-68-8D   (hex)		New H3C Technologies Co., Ltd
-08688D     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-E8-6F-38   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-E86F38     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-48-21-6C   (hex)		China Mobile IOT Company Limited
-48216C     (base 16)		China Mobile IOT Company Limited
-				Building D3,No.8 Yangliu North Road,Yubei District 
-				CHONGQING  CHONGQING  401121
-				CN
-
-8C-BE-24   (hex)		Tashang Semiconductor(Shanghai) Co., Ltd.
-8CBE24     (base 16)		Tashang Semiconductor(Shanghai) Co., Ltd.
-				Room 903, Building 5, Minggu Science Park,No. 7001, Zhong Chun Road, Minhang District ,Shanghai 201101, P.R. China
-				Shanghai    123456
-				CN
-
-08-B3-AF   (hex)		vivo Mobile Communication Co., Ltd.
-08B3AF     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-30-86-2D   (hex)		Arista Network, Inc.
-30862D     (base 16)		Arista Network, Inc.
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-6C-E8-C6   (hex)		Earda Technologies co Ltd
-6CE8C6     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-1C-41-76   (hex)		China Mobile Group Device Co.,Ltd.
-1C4176     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-60-8B-0E   (hex)		Apple, Inc.
-608B0E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-71-D5   (hex)		Hazens Automotive Electronics(SZ)Co.,Ltd.
-1871D5     (base 16)		Hazens Automotive Electronics(SZ)Co.,Ltd.
-				C8 Building, Building 13, Zhongxin Innovation Industry City, No.12, Ganli No.6 Road, Ganli Industrial Park, Buji Street, Longgang District 
-				Shenzhen  Guangdong  518100
-				CN
-
-AC-B1-EE   (hex)		SHENZHEN FENDA TECHNOLOGY CO., LTD
-ACB1EE     (base 16)		SHENZHEN FENDA TECHNOLOGY CO., LTD
-				Fenda Hi-Tech Park, Zhoushi Road, Shiyan, Baoan
-				ShenZhen  GuangDong  518108
-				CN
-
-F8-AD-CB   (hex)		HMD Global Oy
-F8ADCB     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-D4-62-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D462EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-BA-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-54BAD6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-DC-4E   (hex)		AEV, spol. s r. o.
-94DC4E     (base 16)		AEV, spol. s r. o.
-				Jozky Silneho 2783/9
-				Kromeriz    76701
-				CZ
-
-14-42-FC   (hex)		Texas Instruments
-1442FC     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-AC-5D-5C   (hex)		FN-LINK TECHNOLOGY LIMITED
-AC5D5C     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-54-DE-D0   (hex)		Sevio Srl
-54DED0     (base 16)		Sevio Srl
-				Via Dei Caniana 6/A
-				Bergamo  Bergamo  24127
-				IT
-
-6C-5E-3B   (hex)		Cisco Systems, Inc
-6C5E3B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-40-19-20   (hex)		Movon Corporation
-401920     (base 16)		Movon Corporation
-				3Fl, Hyunjuk Bldg. 7 selleung-ro, 94gil,  Gangnam-gu
-				Seoul    06161
-				KR
-
-D0-37-45   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D03745     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-60-3A-7C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-603A7C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-01-78   (hex)		MARGI Systems, Inc.
-000178     (base 16)		MARGI Systems, Inc.
-				3155 Kearney Street. - Ste.#200
-				Fremont  CA  94538
-				US
-
-0C-B7-71   (hex)		ARRIS Group, Inc.
-0CB771     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-58-C8-76   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-58C876     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-2C-1E-4F   (hex)		Chengdu Qianli Network Technology Co., Ltd.
-2C1E4F     (base 16)		Chengdu Qianli Network Technology Co., Ltd.
-				Room 1208, 4 Building, Ideal Center, NO.38 Tianyi Street, Chengdu High-tech Zone
-				Chengdu  Sichuan  610000
-				CN
-
-00-90-52   (hex)		SELCOM ELETTRONICA S.R.L.
-009052     (base 16)		SELCOM ELETTRONICA S.R.L.
-				VIA GRANDI, 5
-				40013 CASTELMAGGIORE BO    
-				IT
-
-00-1A-83   (hex)		Pegasus Technologies Inc.
-001A83     (base 16)		Pegasus Technologies Inc.
-				108 Pawnook Farm Rd.
-				Lenoir City  TN  37771
-				US
-
-24-16-6D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24166D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-94-0B-19   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-940B19     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-70-C7-F2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-70C7F2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-38-94-ED   (hex)		NETGEAR
-3894ED     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-70-04-33   (hex)		California Things Inc.
-700433     (base 16)		California Things Inc.
-				650 main st
-				redwood city  CA  94063
-				US
-
-DC-A6-32   (hex)		Raspberry Pi Trading Ltd
-DCA632     (base 16)		Raspberry Pi Trading Ltd
-				Maurice Wilkes Building, Cowley Road
-				Cambridge    CB4 0DS
-				GB
-
-88-F5-6E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88F56E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-BC-97-E1   (hex)		Broadcom Limited
-BC97E1     (base 16)		Broadcom Limited
-				15191 Alton Parkway
-				Irvine  CA  92618
-				US
-
-28-D1-B7   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-28D1B7     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-C8-C2-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C8C2FA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-88-B3-62   (hex)		Nokia Shanghai Bell Co., Ltd.
-88B362     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai 201206,P.R.China
-				Shanghai   Pudong  201206
-				CN
-
-08-47-D0   (hex)		Nokia Shanghai Bell Co., Ltd.
-0847D0     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai 201206,P.R.China
-				Shanghai   Pudong  201206
-				CN
-
-08-9C-86   (hex)		Nokia Shanghai Bell Co., Ltd.
-089C86     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai 201206,P.R.China
-				Shanghai   Pudong  201206
-				CN
-
-7C-89-56   (hex)		Samsung Electronics Co.,Ltd
-7C8956     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-93-E4   (hex)		Private
-9C93E4     (base 16)		Private
-
-88-29-9C   (hex)		Samsung Electronics Co.,Ltd
-88299C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-90-93   (hex)		Hansong Tehnologies
-CC9093     (base 16)		Hansong Tehnologies
-				8 Kangping road, New development zone
-				Nanjing  Jiangsu  210006
-				CN
-
-CC-64-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CC64A6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-31-7D   (hex)		Hosiden Corporation
-30317D     (base 16)		Hosiden Corporation
-				4-33, Kitakyuhoji 1-chome
-				Yao  Osaka  5810071
-				JP
-
-F0-A9-68   (hex)		Antailiye Technology Co.,Ltd
-F0A968     (base 16)		Antailiye Technology Co.,Ltd
-				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen
-				SHEN ZHEN  GUANGDONG  518000
-				CN
-
-48-E1-E9   (hex)		Chengdu Meross Technology Co., Ltd.
-48E1E9     (base 16)		Chengdu Meross Technology Co., Ltd.
-				No. 25, Yizhou Avenue, Gaoxin
-				Chengdu  Sichuan  610000
-				CN
-
-D8-13-99   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-D81399     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-54-E0-19   (hex)		Ring LLC
-54E019     (base 16)		Ring LLC
-				1523 26th St
-				Santa Monica  CA  90404
-				US
-
-14-84-30   (hex)		MITAC COMPUTING TECHNOLOGY CORPORATION
-148430     (base 16)		MITAC COMPUTING TECHNOLOGY CORPORATION
-				3F., NO.1, R&D ROAD 2, HSINCHU SCIENCE PARK
-				HSINCHU    30076
-				TW
-
-B8-A4-4F   (hex)		Axis Communications AB
-B8A44F     (base 16)		Axis Communications AB
-				Emdalavägen 14
-				LUND    22369
-				SE
-
-00-24-EB   (hex)		ClearPath Networks, Inc.
-0024EB     (base 16)		ClearPath Networks, Inc.
-				1940 E. Mariposa Ave
-				El Segundo  CA  90245
-				US
-
-50-AF-4D   (hex)		zte corporation
-50AF4D     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C8-EA-F8   (hex)		zte corporation
-C8EAF8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-70-9F-2D   (hex)		zte corporation
-709F2D     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-3B-26   (hex)		Jiangsu Qinheng Co., Ltd.
-383B26     (base 16)		Jiangsu Qinheng Co., Ltd.
-				No. 18, Ningshuang Road
-				Nanjing  Jiangsu  210012
-				CN
-
-5C-FA-FB   (hex)		Acubit
-5CFAFB     (base 16)		Acubit
-				Afred Nobels Vej 21A
-				Aalborg Ø    9220
-				DK
-
-9C-7B-EF   (hex)		Hewlett Packard
-9C7BEF     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-74-2E-DB   (hex)		Perinet GmbH
-742EDB     (base 16)		Perinet GmbH
-				Rudower Chaussee 29
-				Berlin  Berlin  12489
-				DE
-
-20-17-42   (hex)		LG Electronics
-201742     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-CC-88-26   (hex)		LG Innotek
-CC8826     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-EC-5B-73   (hex)		Advanced & Wise Technology Corp.
-EC5B73     (base 16)		Advanced & Wise Technology Corp.
-				5F, No. 3-2, Industry East 9th Road, Hsinchu Science Park,
-				Hsinchu City  Hsinchu  30075
-				TW
-
-E0-CB-1D   (hex)		Private
-E0CB1D     (base 16)		Private
-
-84-8B-CD   (hex)		IEEE Registration Authority
-848BCD     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-14-C0-3E   (hex)		ARRIS Group, Inc.
-14C03E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-C0-89-AB   (hex)		ARRIS Group, Inc.
-C089AB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D4-4D-A4   (hex)		Murata Manufacturing Co., Ltd.
-D44DA4     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-F8-E5-CF   (hex)		CGI IT UK LIMITED
-F8E5CF     (base 16)		CGI IT UK LIMITED
-				20 Fenchurch Street, 14th Floor
-				London    EC3M 3BY
-				GB
-
-68-82-F2   (hex)		grandcentrix GmbH
-6882F2     (base 16)		grandcentrix GmbH
-				Holzmarkt 1 
-				Cologne  NW  50676
-				DE
-
-D4-20-B0   (hex)		Mist Systems, Inc.
-D420B0     (base 16)		Mist Systems, Inc.
-				1601 South De Anza Blvd, Suite 248
-				Cupertino  CA  95014
-				US
-
-08-ED-ED   (hex)		Zhejiang Dahua Technology Co., Ltd.
-08EDED     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-60-92-F5   (hex)		ARRIS Group, Inc.
-6092F5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-22-AF   (hex)		Safety Vision, LLC
-0022AF     (base 16)		Safety Vision, LLC
-				6100 W. Sam Houston Pkwy. North
-				Houston    77041
-				US
-
-A0-91-A2   (hex)		OnePlus Electronics (Shenzhen) Co., Ltd.
-A091A2     (base 16)		OnePlus Electronics (Shenzhen) Co., Ltd.
-				Room 201, Block A, No.1, 1st Qian Wan Road, Qianhai Shenzhen-Hong Kong Cooperation Zone, Shenzhen, China.
-				Shenzhen  Guangdong  518000
-				CN
-
-00-80-B5   (hex)		UNITED NETWORKS INC.
-0080B5     (base 16)		UNITED NETWORKS INC.
-				2178 PARAGON DRIVE
-				SAN JOSE  CA  95131
-				US
-
-1C-69-7A   (hex)		EliteGroup Computer Systems Co., LTD
-1C697A     (base 16)		EliteGroup Computer Systems Co., LTD
-				No.239, Sec. 2, TiDing Blvd. Nei-Hu Dist.
-				Taipei  Taiwan  11439
-				TW
-
-4C-17-44   (hex)		Amazon Technologies Inc.
-4C1744     (base 16)		Amazon Technologies Inc.
-				P.O. Box 8102
-				Reno  NV  89507
-				US
-
-B0-30-55   (hex)		China Mobile IOT Company Limited
-B03055     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-90-5C-34   (hex)		Sirius Electronic Systems Srl
-905C34     (base 16)		Sirius Electronic Systems Srl
-				via Robinie, 33
-				Gravellona Toce  VB  28883
-				IT
-
-D4-6A-35   (hex)		Cisco Systems, Inc
-D46A35     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D0-9C-7A   (hex)		Xiaomi Communications Co Ltd
-D09C7A     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-C8-2C-2B   (hex)		IEEE Registration Authority
-C82C2B     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-80-20-DA   (hex)		Sagemcom Broadband SAS
-8020DA     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-68-84-7E   (hex)		FUJITSU LIMITED
-68847E     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-00-30-85   (hex)		Cisco Systems, Inc
-003085     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-60-5F-8D   (hex)		eero inc.
-605F8D     (base 16)		eero inc.
-				500 Howard Street, Suite 900
-				SAN FRANCISCO  CA  94105
-				US
-
-C4-B3-6A   (hex)		Cisco Systems, Inc
-C4B36A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-70-F7-54   (hex)		AMPAK Technology,Inc.
-70F754     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-6C-8B-D3   (hex)		Cisco Systems, Inc
-6C8BD3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-68-97-4B   (hex)		Shenzhen Costar Electronics Co. Ltd.
-68974B     (base 16)		Shenzhen Costar Electronics Co. Ltd.
-				No.94 Fuyuan 1st Road,Yuyuan Industrial Park,
-				Shenzhen   Guangdong  518103
-				CN
-
-34-E1-D1   (hex)		IEEE Registration Authority
-34E1D1     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-21-B7   (hex)		LEXMARK INTERNATIONAL, INC.
-0021B7     (base 16)		LEXMARK INTERNATIONAL, INC.
-				740 West New Circle Road
-				Lexington  KY  40550
-				US
-
-00-A0-B0   (hex)		I-O DATA DEVICE,INC.
-00A0B0     (base 16)		I-O DATA DEVICE,INC.
-				24-1, SAKURADA-MACHI
-				KANAZAWA, ISHIKAWA 920    na
-				JP
-
-24-79-F3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-2479F3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-80-A2-35   (hex)		Edgecore Networks Corporation
-80A235     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-30-EA-26   (hex)		Sycada BV
-30EA26     (base 16)		Sycada BV
-				Burgemeester Stramanweg 105B
-				Amsterdam    1101 AA
-				NL
-
-9C-49-7F   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-9C497F     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-C4-E3-9F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-C4E39F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-F8-9A-78   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F89A78     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-F8-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88F872     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-56-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC5623     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-86-BC   (hex)		Cisco Systems, Inc
-5486BC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-40-23-43   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-402343     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-18-F1-8E   (hex)		ChipER Technology co. ltd
-18F18E     (base 16)		ChipER Technology co. ltd
-				907 University Ave#299
-				Middleton  WI  53562
-				US
-
-00-04-22   (hex)		Studio Technologies, Inc
-000422     (base 16)		Studio Technologies, Inc
-				7440 Frontage Rd
-				Skokie  IL   60077-3212
-				US
-
-80-DA-13   (hex)		eero inc.
-80DA13     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-50-EC-50   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-50EC50     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-60-61-DF   (hex)		Z-meta Research LLC
-6061DF     (base 16)		Z-meta Research LLC
-				8365 Quay Drive
-				Arvada  CO  80003
-				US
-
-70-57-BF   (hex)		New H3C Technologies Co., Ltd
-7057BF     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-10-82-86   (hex)		Luxshare Precision Industry Co.,Ltd
-108286     (base 16)		Luxshare Precision Industry Co.,Ltd
-				2nd floor, A building, Sanyo New Industrial Area, West of Maoyi, Shajing  Baoan District
-				Shenzhen  Shenzhen  518104
-				CN
-
-14-B4-57   (hex)		Silicon Laboratories
-14B457     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-DC-96-2C   (hex)		NST Audio Ltd
-DC962C     (base 16)		NST Audio Ltd
-				32 Whitewall
-				Norton  North Yorkshire  YO17 9EH
-				GB
-
-18-02-2D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-18022D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-BC-59   (hex)		Shenzhen DAPU Microelectronics Co., Ltd
-D8BC59     (base 16)		Shenzhen DAPU Microelectronics Co., Ltd
-				Room B 503, No.2 Building, Tian’an Digital New Town, Huangge Middle Road, Longgang District
-				Shenzhen  Guangdong  518100
-				CN
-
-08-97-98   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-089798     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU  215300
-				CN
-
-24-6F-28   (hex)		Espressif Inc.
-246F28     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-8C-79-F5   (hex)		Samsung Electronics Co.,Ltd
-8C79F5     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-48-F8-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48F8DB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-12-2A   (hex)		VTech Telecommunications Ltd.
-00122A     (base 16)		VTech Telecommunications Ltd.
-				23/F, Tai Ping Industrial Centre, Block 1
-				 NA    00000
-				HK
-
-B0-51-8E   (hex)		Holl technology CO.Ltd.
-B0518E     (base 16)		Holl technology CO.Ltd.
-				F2,Bld 27,Anle Industrial Park,Nantou Guankou No.2 Road
-				Shenzhen  Guangdong  518052
-				CN
-
-28-52-E0   (hex)		Layon international Electronic & Telecom Co.,Ltd
-2852E0     (base 16)		Layon international Electronic & Telecom Co.,Ltd
-				4rd Floor, Building 15, Juda Industrial Zone, ShiBei Industrial Road, HuiJiang , Da Shi Street, PanYu District,Guangzhou,China
-				guangzhou  guangdong  511430
-				CN
-
-58-CB-52   (hex)		Google, Inc.
-58CB52     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-7C-61-66   (hex)		Amazon Technologies Inc.
-7C6166     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-98-9B-CB   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-989BCB     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-94-F7-AD   (hex)		Juniper Networks
-94F7AD     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-60-63-F9   (hex)		Ciholas, Inc.
-6063F9     (base 16)		Ciholas, Inc.
-				3700 Bell Rd
-				Newburgh  IN  47630-7907
-				US
-
-AC-8F-F8   (hex)		Nokia
-AC8FF8     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-60-03-A6   (hex)		Inteno Broadband Technology AB
-6003A6     (base 16)		Inteno Broadband Technology AB
-				Stensätravägen 13
-				Skärholmen  SE  127 39 
-				SE
-
-7C-52-59   (hex)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
-7C5259     (base 16)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
-				No. 259, Jiuzhou Road
-				Mianyang City  Sichuan Province  621000
-				CN
-
-44-B2-95   (hex)		Sichuan AI-Link Technology Co., Ltd.
-44B295     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-94-24-E1   (hex)		Alcatel-Lucent Enterprise
-9424E1     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Rd
-				Calabasas  CA  91301
-				US
-
-F8-CA-59   (hex)		NetComm Wireless
-F8CA59     (base 16)		NetComm Wireless
-				LEVEL 5, 18-20 ORION RD. LANE COVE
-				LANE COVE WEST  NSW  2066
-				AU
-
-88-B2-91   (hex)		Apple, Inc.
-88B291     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C4-2A-D0   (hex)		Apple, Inc.
-C42AD0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-D2-81   (hex)		Apple, Inc.
-CCD281     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-0D-B0   (hex)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
-200DB0     (base 16)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
-				Room 607-610, Block B, TAOJINDI Electronic Business Incubation Base
-				Tenglong Road, Longhua District,   Shenzhen Guangdong  518000
-				CN
-
-D8-1E-DD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-D81EDD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-D4-3F-CB   (hex)		ARRIS Group, Inc.
-D43FCB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-5C-76-95   (hex)		Technicolor CH USA Inc.
-5C7695     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-F8-4D-33   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-F84D33     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-C0-8A-CD   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
-C08ACD     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-AC-F6-F7   (hex)		LG Electronics (Mobile Communications)
-ACF6F7     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-48-E6-C0   (hex)		SIMCom Wireless Solutions Co.,Ltd.
-48E6C0     (base 16)		SIMCom Wireless Solutions Co.,Ltd.
-				Building B,SIM Technology Building,No.633,Jinzhong Road
-				Shanghai    200335
-				CN
-
-38-3C-9C   (hex)		Fujian Newland Payment Technology Co.,Ltd.
-383C9C     (base 16)		Fujian Newland Payment Technology Co.,Ltd.
-				No. B602,Building #1,Haixia Jingmao Plaza,Fuzhou Bonded Area
-				Fuzhou  Fujian  350015
-				CN
-
-C0-2E-25   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-C02E25     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-10-77-17   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-107717     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-A8-6D-5F   (hex)		Raisecom Technology CO., LTD
-A86D5F     (base 16)		Raisecom Technology CO., LTD
-				No. 11, East Area, No. 10 Block, East Xibeiwang Road
-				Beijing    100094
-				CN
-
-58-EC-ED   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-58ECED     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-50-79   (hex)		Private
-005079     (base 16)		Private
-
-10-0C-6B   (hex)		NETGEAR
-100C6B     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-50-5F-B5   (hex)		Askey Computer Corp.
-505FB5     (base 16)		Askey Computer Corp.
-				10F, NO. 119, JIANKANG RD., ZHONGHE DIST.
-				NEW TAIPEI     235
-				TW
-
-C4-F0-EC   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-C4F0EC     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E8-0F-C8   (hex)		Universal Electronics, Inc.
-E80FC8     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-E4-5D-37   (hex)		Juniper Networks
-E45D37     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-EE-AB   (hex)		Cisco Systems, Inc
-00EEAB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-54-A7-03   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-54A703     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-90-7A-58   (hex)		Zegna-Daidong Limited
-907A58     (base 16)		Zegna-Daidong Limited
-				 Rooms 14-17, 18/F, Nan Fung Commercial, Centre 19 Lam Lok Street, Kowloon Bay
-				Hong Kong    999077
-				HK
-
-E0-09-BF   (hex)		SHENZHEN TONG BO WEI TECHNOLOGY Co.,LTD
-E009BF     (base 16)		SHENZHEN TONG BO WEI TECHNOLOGY Co.,LTD
-				5th floor building 4 pengtengda industrial，langkou community，dalang street longhua newly developed area
-				Shenzhen  GuangDong  518000
-				CN
-
-00-13-1E   (hex)		peiker acustic GmbH
-00131E     (base 16)		peiker acustic GmbH
-				Max-Planck-Strasse 28-32
-				Friedrichsdorf    61381
-				DE
-
-84-69-91   (hex)		Nokia
-846991     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-1B-F7   (hex)		Lund IP Products AB
-001BF7     (base 16)		Lund IP Products AB
-				Dalbyv. 1
-				Lund  Skåne  224 60
-				SE
-
-78-36-07   (hex)		Cermate Technologies Inc.
-783607     (base 16)		Cermate Technologies Inc.
-				7F-1, No 168 Lien-Chen Rd.
-				Chung-Ho Dist  New Taipei City  
-				TW
-
-B0-00-73   (hex)		Wistron Neweb Corporation
-B00073     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-D8-8D-C8   (hex)		Atil Technology Co., LTD
-D88DC8     (base 16)		Atil Technology Co., LTD
-				Rm. 3, 21F., No.93, Sec. 2, Roosevelt Rd.,
-				Da’an Dist., Taipei City    106
-				TW
-
-88-DE-7C   (hex)		Askey Computer Corp.
-88DE7C     (base 16)		Askey Computer Corp.
-				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
-				NEW TAIPEI CITY    23585
-				TW
-
-A8-E2-C1   (hex)		Texas Instruments
-A8E2C1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-90-9A-77   (hex)		Texas Instruments
-909A77     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-04-EE-03   (hex)		Texas Instruments
-04EE03     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-4C-24-98   (hex)		Texas Instruments
-4C2498     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-7C-D9-5C   (hex)		Google, Inc.
-7CD95C     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-C8-AA-CC   (hex)		Private
-C8AACC     (base 16)		Private
-
-00-21-67   (hex)		HWA JIN T&I Corp.
-002167     (base 16)		HWA JIN T&I Corp.
-				5F., SEHWA Bldg 164-24, Poi-dong, Gangnam-gu, Seoul, Korea
-				Gangnam-gu  Seoul  135-960
-				KR
-
-00-0B-86   (hex)		Aruba, a Hewlett Packard Enterprise Company
-000B86     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-DC-31-D1   (hex)		vivo Mobile Communication Co., Ltd.
-DC31D1     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-C8-F7-50   (hex)		Dell Inc.
-C8F750     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-D4-92-34   (hex)		NEC Corporation
-D49234     (base 16)		NEC Corporation
-				7-1 Shiba 5-chome
-				Minato-Ku  Tokyo  108-8001
-				JP
-
-00-07-CB   (hex)		FREEBOX SAS
-0007CB     (base 16)		FREEBOX SAS
-				8 rue de la Ville l'Eveque
-				Paris    75008
-				FR
-
-14-9F-B6   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-149FB6     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-				#126,BBK Road,Wusha,Chang'An
-				Dong Guan   Guang Dong  523860
-				CN
-
-00-11-5A   (hex)		Ivoclar Vivadent AG
-00115A     (base 16)		Ivoclar Vivadent AG
-				Bendererstrasse 2
-				Schaan    9494
-				LI
-
-4C-AE-A3   (hex)		Hewlett Packard Enterprise
-4CAEA3     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-1C-2E-1B   (hex)		Suzhou Tremenet Communication Technology Co., Ltd.
-1C2E1B     (base 16)		Suzhou Tremenet Communication Technology Co., Ltd.
-				Room 413, Nangong Building, 399 Linquan Street, SIP
-				Suzhou  Jiangsu  215123
-				CN
-
-1C-24-EB   (hex)		Burlywood
-1C24EB     (base 16)		Burlywood
-				1501 S Sunset Street
-				Longmont  CO  80501
-				US
-
-00-10-13   (hex)		Kontron America, Inc.
-001013     (base 16)		Kontron America, Inc.
-				14118 Stowe Drive
-				Poway,  CA  9206
-				US
-
-2C-2B-F9   (hex)		LG Innotek
-2C2BF9     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-D8-C7-C8   (hex)		Aruba, a Hewlett Packard Enterprise Company
-D8C7C8     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-70-3A-0E   (hex)		Aruba, a Hewlett Packard Enterprise Company
-703A0E     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-20-4C-03   (hex)		Aruba, a Hewlett Packard Enterprise Company
-204C03     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-58-C6-F0   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-58C6F0     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-84-A0-6E   (hex)		Sagemcom Broadband SAS
-84A06E     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-A4-3E-A0   (hex)		iComm HK LIMITED
-A43EA0     (base 16)		iComm HK LIMITED
-				Room 702 Kowloon Building 555 Nathan Road Kowloon HongKong
-				Kowloon    NA
-				HK
-
-64-C2-DE   (hex)		LG Electronics (Mobile Communications)
-64C2DE     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-8C-44-4F   (hex)		HUMAX Co., Ltd.
-8C444F     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-00-67-62   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-006762     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-2C-C4-07   (hex)		machineQ
-2CC407     (base 16)		machineQ
-				1900 market st
-				philadelphia  PA  19103
-				US
-
-B4-ED-19   (hex)		Pie Digital, Inc.
-B4ED19     (base 16)		Pie Digital, Inc.
-				575 Market st., 8th floor
-				San Francisco  CA  94105-2823
-				US
-
-40-DF-02   (hex)		LINE BIZ Plus
-40DF02     (base 16)		LINE BIZ Plus
-				Alphadom Tower IV (6F), Bundangnaegok-ro 117, Bundang-gu
-				Seongnam  Gyeonggi  13529
-				KR
-
-CC-E1-94   (hex)		Juniper Networks
-CCE194     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-14-4E-2A   (hex)		Ciena Corporation
-144E2A     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-84-13-9F   (hex)		zte corporation
-84139F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F0-51-EA   (hex)		Fitbit, Inc.
-F051EA     (base 16)		Fitbit, Inc.
-				199 Fremont Street, 14th Fl
-				San Francisco  CA  94105
-				US
-
-50-33-F0   (hex)		YICHEN (SHENZHEN) TECHNOLOGY CO.LTD
-5033F0     (base 16)		YICHEN (SHENZHEN) TECHNOLOGY CO.LTD
-				23F, Building C1, Nanshan iPark, No. 1001 Xueyuan Road, Nanshan District, Shenzhen City, Guangdong, China
-				shenzhen    518044
-				CN
-
-FC-2B-B2   (hex)		Actiontec Electronics, Inc
-FC2BB2     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-E0-9F-2A   (hex)		Iton Technology Corp. 
-E09F2A     (base 16)		Iton Technology Corp. 
-				Room 1302, Block A, Building 4，Huangge Road, Longgang District
-				Shenzhen   Guangdong   518116
-				CN
-
-4C-E1-9E   (hex)		TECNO MOBILE LIMITED
-4CE19E     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-AC-5A-EE   (hex)		China Mobile Group Device Co.,Ltd.
-AC5AEE     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-70-BC-10   (hex)		Microsoft Corporation
-70BC10     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-88-4A-18   (hex)		Opulinks
-884A18     (base 16)		Opulinks
-				F 28, No.328, Huashan Rd
-				Shanghai    200040
-				CN
-
-9C-69-B4   (hex)		IEEE Registration Authority
-9C69B4     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-50-00-84   (hex)		Siemens Canada
-500084     (base 16)		Siemens Canada
-				300 Applewood Crescent
-				Concord  Ontario  L4K 5C7
-				CA
-
-44-B4-33   (hex)		tide.co.,ltd
-44B433     (base 16)		tide.co.,ltd
-				9F Kapeul GreatValley A-dong, Digitalro 9-ghil 32, Geumcheon-gu
-				seoul  seoul  ASIKRKS006
-				KR
-
-D8-A6-FD   (hex)		Ghost Locomotion
-D8A6FD     (base 16)		Ghost Locomotion
-				800 California St.  Suite 200
-				Mountain View  CA  94041
-				US
-
-DC-21-B9   (hex)		Sentec Co.Ltd
-DC21B9     (base 16)		Sentec Co.Ltd
-				10, Baekseokgongdan 1-ro, Seobuk-gu
-				 Cheonan-si  Chungcheongnam-do  31094
-				KR
-
-6C-DF-FB   (hex)		IEEE Registration Authority
-6CDFFB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-24-7D-4D   (hex)		Texas Instruments
-247D4D     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-88-50-F6   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-8850F6     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan Distric
-				Shenzhen  Guangdong  518055
-				CN
-
-E4-98-BB   (hex)		Phyplus Microelectronics Limited
-E498BB     (base 16)		Phyplus Microelectronics Limited
-				304 Building 1 No.608 Sheng Xia Road
-				Shanghai    200000
-				CN
-
-60-A1-1E   (hex)		Wuhan Maxsine Electric Co.,Ltd.
-60A11E     (base 16)		Wuhan Maxsine Electric Co.,Ltd.
-				Building A6, Hangyu Building, No 7, Wuhan University Science Park Road, East Lake Development District,Wuhan,China.
-				Wuhan  Hubei  430000
-				CN
-
-C4-5B-F7   (hex)		ants
-C45BF7     (base 16)		ants
-				1164-21,Haeun-daero, Haeundae-gu,
-				Busan    48069
-				KR
-
-8C-DF-9D   (hex)		NEC Corporation
-8CDF9D     (base 16)		NEC Corporation
-				7-1, Shiba 5-chome,
-				Tokyo  Tokyo  108-8001
-				JP
-
-5C-41-5A   (hex)		Amazon.com, LLC
-5C415A     (base 16)		Amazon.com, LLC
-				1200 12th Ave. South, Suite 1200
-				Seattle    98144
-				US
-
-70-5E-55   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
-705E55     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
-				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
-				Chongqing  China  401120
-				CN
-
-B0-D5-68   (hex)		Shenzhen Cultraview Digital Technology Co., Ltd
-B0D568     (base 16)		Shenzhen Cultraview Digital Technology Co., Ltd
-				F6,M6,Maqueling, High-tech park, Nanshan district
-				Shenzhen  Guangdong  518057
-				CN
-
-F0-0E-BF   (hex)		ZettaHash Inc.
-F00EBF     (base 16)		ZettaHash Inc.
-				6F Chiyoda Ogawamachi Crosta, 1-11, Kanda Ogawamachi
-				Chiyoda-ku  Tokyo  101-0052
-				JP
-
-70-35-09   (hex)		Cisco Systems, Inc
-703509     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-1A-FA   (hex)		New H3C Technologies Co., Ltd
-441AFA     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-04-07-2E   (hex)		VTech Electronics Ltd.
-04072E     (base 16)		VTech Electronics Ltd.
-				23rd Floor, Block 1, Tai Ping Industrial Centre, 57 Ting Kok Road
-				Tai Po, N.T.    NA
-				HK
-
-78-0E-D1   (hex)		TRUMPF Werkzeugmaschinen GmbH+Co.KG
-780ED1     (base 16)		TRUMPF Werkzeugmaschinen GmbH+Co.KG
-				Johann-Maus-Straße 2
-				Ditzingen    71254
-				DE
-
-44-EC-CE   (hex)		Juniper Networks
-44ECCE     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-F8-2F-08   (hex)		Molex CMS
-F82F08     (base 16)		Molex CMS
-				2222 Wellington Court
-				Lisle  IL  60532
-				US
-
-44-1C-12   (hex)		Technicolor CH USA Inc.
-441C12     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-44-28-A3   (hex)		Jiangsu fulian  Communication Technology Co., Ltd.
-4428A3     (base 16)		Jiangsu fulian  Communication Technology Co., Ltd.
-				The south of lanling road, yongan new district
-				Danyang   Jiangsu  212300
-				CN
-
-10-C5-95   (hex)		Lenovo
-10C595     (base 16)		Lenovo
-				1009 Think Place
-				Morrisvilee  NC  27560
-				US
-
-20-32-33   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-203233     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-68-29-DC   (hex)		Ficosa Electronics S.L.U.
-6829DC     (base 16)		Ficosa Electronics S.L.U.
-				Pol.Ind Can Mitjans s/n Viladecavalls Barcelona
-				Viladecavalls  Barcelona  ES08232
-				ES
-
-94-54-DF   (hex)		YST CORP.
-9454DF     (base 16)		YST CORP.
-				A-1407, 767, Sinsu-ro, Suji-gu,
-				Yongin-si  Gyeonggi-do  16827
-				KR
-
-7C-BC-84   (hex)		IEEE Registration Authority
-7CBC84     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F8-0D-F1   (hex)		Sontex SA
-F80DF1     (base 16)		Sontex SA
-				rue de la gare
-				sonceboz  Bern  2605
-				CH
-
-A4-94-26   (hex)		Elgama-Elektronika Ltd.
-A49426     (base 16)		Elgama-Elektronika Ltd.
-				Visoriu str. 2
-				Vilnius    LT-08300
-				LT
-
-E4-F1-4C   (hex)		Private
-E4F14C     (base 16)		Private
-
-A8-B4-56   (hex)		Cisco Systems, Inc
-A8B456     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-A9-F0   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-2CA9F0     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-54-9B-72   (hex)		Ericsson AB
-549B72     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-A0-47-D7   (hex)		Best IT World (India) Pvt Ltd
-A047D7     (base 16)		Best IT World (India) Pvt Ltd
-				87, Mistry Complex,, Midc Cross Road A, Andheri-East
-				Mumbai  Maharashtra  400093
-				IN
-
-68-99-CD   (hex)		Cisco Systems, Inc
-6899CD     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-10-40-F3   (hex)		Apple, Inc.
-1040F3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-6B-14   (hex)		Apple, Inc.
-586B14     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-B8-63   (hex)		Apple, Inc.
-BCB863     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-1C-F6   (hex)		Alien Green LLC
-2C1CF6     (base 16)		Alien Green LLC
-				A. Kazbegi Ave., No24g, apt 227
-				Tbilisi  Tbilisi  0160
-				GE
-
-6C-2B-59   (hex)		Dell Inc.
-6C2B59     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-44-E6-6E   (hex)		Apple, Inc.
-44E66E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-E8-62   (hex)		Apple, Inc.
-C0E862     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-06-16   (hex)		Apple, Inc.
-F40616     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-FE-5D   (hex)		IEEE Registration Authority
-0CFE5D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-3C-8D-20   (hex)		Google, Inc.
-3C8D20     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-60-1D-91   (hex)		Motorola Mobility LLC, a Lenovo Company
-601D91     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-D4-C9-4B   (hex)		Motorola Mobility LLC, a Lenovo Company
-D4C94B     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-08-35-1B   (hex)		Shenzhen Jialihua Electronic Technology Co., Ltd
-08351B     (base 16)		Shenzhen Jialihua Electronic Technology Co., Ltd
-				Building 26,Xin'e Industrial Area,E'gongling Village,Pinghu Town,Longgang District
-				Shenzhen  Guangdong  518111
-				CN
-
-AC-15-85   (hex)		silergy corp
-AC1585     (base 16)		silergy corp
-				Oleander  Way，802 West  Bay  Road，P.O. BOX    32052
-				Grand   Cayman  KYI-1208，Cayman Islands    32052
-				US
-
-AC-50-93   (hex)		Magna Electronics Europe GmbH & Co. OHG
-AC5093     (base 16)		Magna Electronics Europe GmbH & Co. OHG
-				Kurfürst-Eppstein-Ring 9
-				Sailauf  Bavaria  63877
-				DE
-
-70-BB-E9   (hex)		Xiaomi Communications Co Ltd
-70BBE9     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-50-A0-A4   (hex)		Nokia
-50A0A4     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-D0-2D   (hex)		Resideo
-00D02D     (base 16)		Resideo
-				2 Corporate Center Dr.
-				Melville  NY  11747
-				US
-
-80-69-40   (hex)		LEXAR CO.,LIMITED
-806940     (base 16)		LEXAR CO.,LIMITED
-				10TH FLOOR,CHINA AEROSPACE CENTRE,143 HOI BUN ROAD,KWUN TONG,KOWLOON, HONG KONG
-				HONG KONG    999077
-				HK
-
-64-F8-1C   (hex)		Huawei Technologies Co., Ltd.
-64F81C     (base 16)		Huawei Technologies Co., Ltd.
-				 Bantian, Longgang District, Shenzhen, 518129, P.R.C
-				Shenzhen  GUANGDONG Province  518000
-				CN
-
-10-98-C3   (hex)		Murata Manufacturing Co., Ltd.
-1098C3     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-9C-C8-FC   (hex)		ARRIS Group, Inc.
-9CC8FC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-B0-7E-11   (hex)		Texas Instruments
-B07E11     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-10-C7-53   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-10C753     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-				No.218 Qianwangang Road
-				Qingdao  Shangdong  266510
-				CN
-
-F4-95-1B   (hex)		Hefei Radio Communication Technology Co., Ltd 
-F4951B     (base 16)		Hefei Radio Communication Technology Co., Ltd 
-				 No.108, YinXing Road, High-tech Development Zone 
-				Hefei  Anhui  230088
-				CN
-
-6C-38-45   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-6C3845     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-2C-61-04   (hex)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
-2C6104     (base 16)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
-				ORIENTAL CYBERPORT, HIGHTECH 6 ROAD
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-BC-93-25   (hex)		Ningbo Joyson Preh Car Connect Co.,Ltd.  
-BC9325     (base 16)		Ningbo Joyson Preh Car Connect Co.,Ltd.  
-				No. 99, Qingyi Road
-				Ningbo   Zhejiang  315040
-				CN
-
-D0-B6-0A   (hex)		Xingluo Technology Company  Limited
-D0B60A     (base 16)		Xingluo Technology Company  Limited
-				28F, Building A, Aerospace Science And Technology Square, Nanshan District
-				ShenZhen  GuangDong   518067
-				CN
-
-04-92-26   (hex)		ASUSTek COMPUTER INC.
-049226     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-E8-AD-A6   (hex)		Sagemcom Broadband SAS
-E8ADA6     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-0C-1C-19   (hex)		LONGCONN ELECTRONICS(SHENZHEN) CO.,LTD
-0C1C19     (base 16)		LONGCONN ELECTRONICS(SHENZHEN) CO.,LTD
-				Building B, No. 42 Xingye Road, Phoenix First Industrial Zone, Fuyong, Baoan District
-				Shenzhen  Guangdong  518103
-				CN
-
-90-E7-10   (hex)		New H3C Technologies Co., Ltd
-90E710     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-30-29-52   (hex)		Hillstone Networks Inc
-302952     (base 16)		Hillstone Networks Inc
-				North Olympic Science & Technology Park Building #20， Floor #5, SouthBaosheng
-				Beijing    100192
-				CN
-
-E0-13-B5   (hex)		vivo Mobile Communication Co., Ltd.
-E013B5     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-E0-79-5E   (hex)		Wuxi Xiaohu Technology Co.,Ltd.
-E0795E     (base 16)		Wuxi Xiaohu Technology Co.,Ltd.
-				FL.2, Building A10, 777 West Jianzhu Road, Binhu District
-				Wuxi  Jiangsu Province  214000
-				CN
-
-00-B1-E3   (hex)		Cisco Systems, Inc
-00B1E3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-11-94   (hex)		Lenovo
-A41194     (base 16)		Lenovo
-				1009 Think Place
-				Morrisvilee  NC  27560
-				US
-
-00-CB-00   (hex)		Private
-00CB00     (base 16)		Private
-
-DC-F4-01   (hex)		Dell Inc.
-DCF401     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-0C-41-01   (hex)		Ruichi Auto Technology (Guangzhou) Co., Ltd.
-0C4101     (base 16)		Ruichi Auto Technology (Guangzhou) Co., Ltd.
-				No. 171 Haibin Road, Nansha District, Guangzhou, China
-				Guangzhou  Guangdong Province  511400
-				CN
-
-00-B7-71   (hex)		Cisco Systems, Inc
-00B771     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E4-B2-FB   (hex)		Apple, Inc.
-E4B2FB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-CA-0C   (hex)		WITHUS PLANET
-2CCA0C     (base 16)		WITHUS PLANET
-				1604, O'BIZTOWER, Pyeong Chon, 126, Beolmal-ro, Dongan-gu
-				Anyang-si  Gyeonggi-do  14057
-				KR
-
-84-32-6F   (hex)		GUANGZHOU AVA ELECTRONICS TECHNOLOGY CO.,LTD 
-84326F     (base 16)		GUANGZHOU AVA ELECTRONICS TECHNOLOGY CO.,LTD 
-				Science town luogang district guangzhou city branch bead road 232 profit people park 301, building 2
-				guangzhou   guangdong  510000
-				CN
-
-C8-9C-13   (hex)		Inspiremobile
-C89C13     (base 16)		Inspiremobile
-				Rm1412, Daeryung Techno-Town, 15th, 401 , Simin-daero, Dongan-gu
-				Anyang-si  Gyeonggi-do  14057
-				KR
-
-8C-85-E6   (hex)		Cleondris GmbH
-8C85E6     (base 16)		Cleondris GmbH
-				Zuercherstrasse 42
-				Uitikon  ZH  8142
-				CH
-
-80-7D-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-807D14     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-28-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-20283E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-FC-77   (hex)		Mega Well Limited
-A4FC77     (base 16)		Mega Well Limited
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-4C-56-9D   (hex)		Apple, Inc.
-4C569D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-53-9C   (hex)		Apple, Inc.
-38539C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-26-19   (hex)		Apple, Inc.
-402619     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-E8-5C   (hex)		Apple, Inc.
-6CE85C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-91-62   (hex)		Microchip Technology Inc.
-049162     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-F8-38-80   (hex)		Apple, Inc.
-F83880     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-79-D7   (hex)		Sagemcom Broadband SAS
-2C79D7     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-B4-F5   (hex)		DongGuan Siyoto Electronics Co., Ltd       
-00B4F5     (base 16)		DongGuan Siyoto Electronics Co., Ltd       
-				Hecheng Industrial District, QiaoTou Town
-				DongGuan City  Guangdong  523520
-				CN
-
-BC-3F-4E   (hex)		Teleepoch Ltd
-BC3F4E     (base 16)		Teleepoch Ltd
-				No.13 Langshan Rd,HiTech Park,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-18-38-AE   (hex)		CONSPIN SOLUTION
-1838AE     (base 16)		CONSPIN SOLUTION
-				2F, Geonwoong Bldg. 109, Gwanak-ro, Gwanak-gu
-				Seoul    08833
-				KR
-
-04-CF-8C   (hex)		XIAOMI Electronics,CO.,LTD
-04CF8C     (base 16)		XIAOMI Electronics,CO.,LTD
-				Xiaomi Building, No.68 Qinghe Middle Street
-				Haidian District  Beijing  100085
-				CN
-
-0C-75-12   (hex)		Shenzhen Kunlun TongTai Technology  Co.,Ltd.
-0C7512     (base 16)		Shenzhen Kunlun TongTai Technology  Co.,Ltd.
-				Room 2401,B,Building 3,Tianan Yungu Industry Park,Gangtou community,bantian streets,Longgang District
-				Shenzhen  Guangdong  518129
-				CN
-
-74-83-C2   (hex)		Ubiquiti Networks Inc.
-7483C2     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-E0-63-DA   (hex)		Ubiquiti Networks Inc.
-E063DA     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-50-57-9C   (hex)		Seiko Epson Corporation
-50579C     (base 16)		Seiko Epson Corporation
-				2070 Kotobuki Koaka
-				Matsumoto-shi  Nagano-ken  399-8702
-				JP
-
-54-27-8D   (hex)		NXP (China) Management Ltd.
-54278D     (base 16)		NXP (China) Management Ltd.
-				21F, BM InterContinental Business Center, 100 Yu Tong Road
-				Shanghai  Shanghai  200070
-				CN
-
-B0-BE-76   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-B0BE76     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-44-47-CC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-4447CC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-4C-D9-8F   (hex)		Dell Inc.
-4CD98F     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-B0-AE-25   (hex)		Varikorea
-B0AE25     (base 16)		Varikorea
-				#505 kolon digital tower aston, gasan, geumcheon
-				seoul    08502
-				KR
-
-4C-1B-86   (hex)		Arcadyan Corporation
-4C1B86     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-EC-C4-0D   (hex)		Nintendo Co.,Ltd
-ECC40D     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-44-00-49   (hex)		Amazon Technologies Inc.
-440049     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-E8-6A-64   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-E86A64     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-10-A2-4E   (hex)		GOLD3LINK ELECTRONICS CO., LTD
-10A24E     (base 16)		GOLD3LINK ELECTRONICS CO., LTD
-				No.90,Sec.1,Com Lin Rd,Taipei 114,Taiwan,R.O.C
-				Taipei  Taiwan  114
-				TW
-
-CC-C5-E5   (hex)		Dell Inc.
-CCC5E5     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-6C-C3-74   (hex)		Texas Instruments
-6CC374     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-68-47-49   (hex)		Texas Instruments
-684749     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F8-D9-B8   (hex)		Open Mesh, Inc.
-F8D9B8     (base 16)		Open Mesh, Inc.
-				111 SW 5th Ave Ste1150
-				Portland  OR  97204
-				US
-
-7C-69-6B   (hex)		Atmosic Technologies
-7C696B     (base 16)		Atmosic Technologies
-				12930 Saratoga Ave, Suite B6
-				Saratoga  CA  95070
-				US
-
-5C-D2-0B   (hex)		Yytek Co., Ltd.
-5CD20B     (base 16)		Yytek Co., Ltd.
-				No.1 Bao Sheng South Road, Room 401, Ao Bei Technology Park, Ling Zhi Center
-				Beijing    100192
-				CN
-
-70-03-7E   (hex)		Technicolor CH USA Inc.
-70037E     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-D0-03-DF   (hex)		Samsung Electronics Co.,Ltd
-D003DF     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-C4-23-A2   (hex)		PT. Emsonic Indonesia
-C423A2     (base 16)		PT. Emsonic Indonesia
-				Jl.Timor Blok E5, MM2100 Industrial Town Jatiwangi Cikarang Barat
-				Bekasi  Jawa Barat  17530
-				ID
-
-B4-CB-57   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B4CB57     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-4C-12-65   (hex)		ARRIS Group, Inc.
-4C1265     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-50-0C   (hex)		e-Tek Labs, Inc.
-00500C     (base 16)		e-Tek Labs, Inc.
-				1057 EAST HENRIETTA RD.
-				ROCHESTER  NY  14623
-				US
-
-48-5F-99   (hex)		Cloud Network Technology (Samoa) Limited
-485F99     (base 16)		Cloud Network Technology (Samoa) Limited
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-88-34-FE   (hex)		Bosch Automotive Products (Suzhou) Co. Ltd
-8834FE     (base 16)		Bosch Automotive Products (Suzhou) Co. Ltd
-				No. 455 Xing Long Street,Suzhou Industrial Park,Suzhou P.R., 215021 China
-				Suzhou  Jiangsu  215021
-				CN
-
-88-F7-BF   (hex)		vivo Mobile Communication Co., Ltd.
-88F7BF     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-D8-7D-7F   (hex)		Sagemcom Broadband SAS
-D87D7F     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-05-1A   (hex)		3COM EUROPE LTD
-00051A     (base 16)		3COM EUROPE LTD
-				3COM CENTRE
-				vvvvv  UNITED  KINGDOM
-				GB
-
-08-00-4E   (hex)		3COM EUROPE LTD
-08004E     (base 16)		3COM EUROPE LTD
-				3COM CENTRE
-				vvvvv  UNITED  KINGDOM
-				GB
-
-00-30-1E   (hex)		3COM EUROPE LTD
-00301E     (base 16)		3COM EUROPE LTD
-				BOUNDARY WAY
-				vvvvv  UNITED  KINGDOM
-				GB
-
-00-50-04   (hex)		3COM
-005004     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-01-03   (hex)		3COM
-000103     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-58-B5-68   (hex)		SECURITAS DIRECT ESPAÑA, SAU
-58B568     (base 16)		SECURITAS DIRECT ESPAÑA, SAU
-				C/ Priégola, 2
-				Pozuelo de Alarcon  Madrid  28224
-				ES
-
-48-4A-E9   (hex)		Hewlett Packard Enterprise
-484AE9     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-84-6A-66   (hex)		Sumitomo Kizai  Co.,Ltd.
-846A66     (base 16)		Sumitomo Kizai  Co.,Ltd.
-				1-45-1higashiikebukuro
-				tosimaku  tokyo  170-0013
-				JP
-
-18-D7-17   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-18D717     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-80-B6-24   (hex)		IVS
-80B624     (base 16)		IVS
-				807-809 , Woorim E-biz center, 35, Gwangnaru-ro 6-gil
-				Seoul  Seongdong-gu  04799
-				KR
-
-DC-F5-05   (hex)		AzureWave Technology Inc.
-DCF505     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-CC-F0-FD   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-CCF0FD     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District, Hangzhou, Zhejiang
-				Hangzhou  Zhejiang  310000
-				CN
-
-84-89-EC   (hex)		IEEE Registration Authority
-8489EC     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-88-10-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88108F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-63-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4631F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-9B-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A49B4F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-07-3A   (hex)		INVENTEL
-00073A     (base 16)		INVENTEL
-				35, rue Toumefort
-				000    0000
-				FR
-
-00-26-6C   (hex)		INVENTEC CORPORATION
-00266C     (base 16)		INVENTEC CORPORATION
-				Inventec Building, 66 Hou-Kang Street Shih-Lin District,
-				Taipei    111
-				TW
-
-00-8C-FA   (hex)		INVENTEC CORPORATION
-008CFA     (base 16)		INVENTEC CORPORATION
-				No. 255, Jen-Ho Road Sec. 2, 33547,
-				Tachi  Taoyuan  33547
-				TW
-
-5C-FB-7C   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-5CFB7C     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-FC-03-9F   (hex)		Samsung Electronics Co.,Ltd
-FC039F     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-02-C0-8C   (hex)		3COM
-02C08C     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-57-C1   (hex)		LG Electronics (Mobile Communications)
-0057C1     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-7C-24-0C   (hex)		Telechips, Inc.
-7C240C     (base 16)		Telechips, Inc.
-				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
-				Seoul  Seoul  05510
-				KR
-
-00-20-3D   (hex)		Honeywell Environmental & Combustion Controls
-00203D     (base 16)		Honeywell Environmental & Combustion Controls
-				1985 Douglas Drive
-				Golden Valley  MN  55422
-				US
-
-A4-D9-90   (hex)		Samsung Electronics Co.,Ltd
-A4D990     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-60-87   (hex)		KANSAI ELECTRIC CO., LTD.
-006087     (base 16)		KANSAI ELECTRIC CO., LTD.
-				6-14-9 MIDORII, ASAMINAMI-KU
-				HIROSHIMA 731-01    
-				JO
-
-DC-F7-19   (hex)		Cisco Systems, Inc
-DCF719     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-95-0C   (hex)		China Mobile IOT Company Limited
-A0950C     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-D4-74-1B   (hex)		Beijing HuaDa ZhiBao Electronic System Co.,Ltd.
-D4741B     (base 16)		Beijing HuaDa ZhiBao Electronic System Co.,Ltd.
-				No.1 Gaojiayuan,Chaoyang District,Beijing,China
-				Beijing  Beijing  100015
-				CN
-
-00-1B-C0   (hex)		Juniper Networks
-001BC0     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-2C-15-E1   (hex)		Phicomm (Shanghai) Co., Ltd.
-2C15E1     (base 16)		Phicomm (Shanghai) Co., Ltd.
-				3666 SiXian Rd.,Songjiang District
-				Shanghai  Shanghai  201616
-				CN
-
-30-D1-6B   (hex)		Liteon Technology Corporation
-30D16B     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-98-AE-71   (hex)		VVDN Technologies Pvt Ltd
-98AE71     (base 16)		VVDN Technologies Pvt Ltd
-				B-22, Sec-34 , Info-city -I
-				Gurugram  Haryana  122001
-				IN
-
-A4-56-CC   (hex)		Technicolor CH USA Inc.
-A456CC     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-AC-6E-1A   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-AC6E1A     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
-				Shenzhen  Guangdong  518067
-				CN
-
-00-80-EB   (hex)		COMPCONTROL B.V.
-0080EB     (base 16)		COMPCONTROL B.V.
-				STRATUMSED K31
-				  THE  
-				NL
-
-00-02-EB   (hex)		Pico Communications
-0002EB     (base 16)		Pico Communications
-				20085 Stevens Creek Blvd.
-				Cupertino  CA  95014
-				US
-
-34-2E-B6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-342EB6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-92-32   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC9232     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-0F-B0   (hex)		Compal Electronics INC.
-000FB0     (base 16)		Compal Electronics INC.
-				No.8 , Nandong Road , PingZhen Dist.
-				Taoyuan   Taiwan   32455
-				TW
-
-00-02-3F   (hex)		Compal Electronics INC.
-00023F     (base 16)		Compal Electronics INC.
-				No.8 , Nandong Road , PingZhen Dist.
-				Taoyuan   Taiwan   32455
-				TW
-
-68-A8-E1   (hex)		Wacom Co.,Ltd.
-68A8E1     (base 16)		Wacom Co.,Ltd.
-				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
-				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
-				JP
-
-30-D3-2D   (hex)		devolo AG
-30D32D     (base 16)		devolo AG
-				Charlottenburger Allee 67
-				Aachen  NRW  52068
-				DE
-
-BC-F2-AF   (hex)		devolo AG
-BCF2AF     (base 16)		devolo AG
-				Charlottenburger Allee 67
-				Aachen  NRW  52068
-				DE
-
-E0-AF-4F   (hex)		Deutsche Telekom AG
-E0AF4F     (base 16)		Deutsche Telekom AG
-				Friedrich-Ebert-Allee 140
-				Bonn    53113
-				DE
-
-B8-69-F4   (hex)		Routerboard.com
-B869F4     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-28-3A-4D   (hex)		Cloud Network Technology (Samoa) Limited
-283A4D     (base 16)		Cloud Network Technology (Samoa) Limited
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-B8-7C-6F   (hex)		NXP (China) Management Ltd.
-B87C6F     (base 16)		NXP (China) Management Ltd.
-				21F, BM InterContinental Business Center, 100 Yu Tong Road
-				Shanghai  Shanghai  200070
-				CN
-
-30-5D-A6   (hex)		ADVALY SYSTEM Inc.
-305DA6     (base 16)		ADVALY SYSTEM Inc.
-				7 KITA2 NISHI2 CYUO-KU
-				SAPPORO  HOKKAIDO  060-0002
-				JP
-
-BC-30-D9   (hex)		Arcadyan Corporation
-BC30D9     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-04-79-B7   (hex)		Texas Instruments
-0479B7     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-C0-D0-FF   (hex)		China Mobile IOT Company Limited
-C0D0FF     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-88-DF-9E   (hex)		New H3C Technologies Co., Ltd
-88DF9E     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-2C-7C-E4   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
-2C7CE4     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
-				HUST Industry Park, East-Lake Development Zone
-				Wuhan  Hubei  430223
-				CN
-
-58-03-FB   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-5803FB     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-14-48-02   (hex)		THE YEOLRIM Co.,Ltd.
-144802     (base 16)		THE YEOLRIM Co.,Ltd.
-				D-311,H Business Park,26,Beobwon-ro 9-gil Songpa-gu,Seoul Korea
-				Seoul    05836
-				KR
-
-40-31-3C   (hex)		XIAOMI Electronics,CO.,LTD
-40313C     (base 16)		XIAOMI Electronics,CO.,LTD
-				Xiaomi Building, No.68 Qinghe Middle Street
-				Haidian District  Beijing  100085
-				CN
-
-FC-45-96   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-FC4596     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				 NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZON
-				KUNSHAN  SUZHOU  215300
-				CN
-
-A0-E5-34   (hex)		Stratec Biomedical AG
-A0E534     (base 16)		Stratec Biomedical AG
-				Gewerbestrasse 37
-				Birkenfeld  Baden Wuertemberg  75217
-				DE
-
-44-4B-5D   (hex)		GE Healthcare
-444B5D     (base 16)		GE Healthcare
-				Kuortaneenkatu 2
-				Helsinki    00510
-				FI
-
-00-15-55   (hex)		DFM GmbH
-001555     (base 16)		DFM GmbH
-				Lahrer Strasse 6
-				Lahr  Baden-Württemberg  77933
-				US
-
-1C-75-08   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-1C7508     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU   215300 
-				CN
-
-00-1B-38   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-001B38     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD AVENUE
-				KUNSHAN CITY  SUZHOU PROVINCE  215300
-				CN
-
-00-23-5A   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-00235A     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO 25, The 3rd street,
-				KuanShan  SUZHOU  215300
-				CN
-
-24-D7-6B   (hex)		Syntronic AB
-24D76B     (base 16)		Syntronic AB
-				Utmarksvägen 33c
-				Gävle    80291
-				SE
-
-C4-FE-E2   (hex)		AMICCOM Electronics Corporation
-C4FEE2     (base 16)		AMICCOM Electronics Corporation
-				10F, No.18, Taiyuan St., Zhubei City
-				Hsinchu Country  Taiwan  30265
-				TW
-
-78-0C-F0   (hex)		Cisco Systems, Inc
-780CF0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-0C-8C-24   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-0C8C24     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-8C-6D-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8C6D77     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-C5-7A   (hex)		Ufispace Co., LTD.
-E8C57A     (base 16)		Ufispace Co., LTD.
-				9F., No. 81 Jhongcheng Rd., Tucheng Dist.,
-				New Taipei    23674
-				TW
-
-E0-12-83   (hex)		 Shenzhen Fanzhuo Communication Technology Co., Lt
-E01283     (base 16)		 Shenzhen Fanzhuo Communication Technology Co., Lt
-				 No.1003 Kesi Road, Hi-Tech Park, 
-				Shenzhen  Nanshan District  2602-2603
-				CN
-
-A0-CF-5B   (hex)		Cisco Systems, Inc
-A0CF5B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-21   (hex)		MICRO-STAR INT'L CO., LTD.
-002421     (base 16)		MICRO-STAR INT'L CO., LTD.
-				No.69, Li-De St
-				Taipei Hsien    235
-				TW
-
-00-60-D1   (hex)		CASCADE COMMUNICATIONS
-0060D1     (base 16)		CASCADE COMMUNICATIONS
-				6 TECHNOLOGY PARK DRIVE
-				WESTFORD  MA  01886
-				US
-
-84-C9-C6   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-84C9C6     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-88-B6-6B   (hex)		easynetworks
-88B66B     (base 16)		easynetworks
-				 Rd kaituo 1# kaituohuiyuan B 1020, shangdi
-				Beijing    100084
-				CN
-
-24-F5-7E   (hex)		HWH CO., LTD.
-24F57E     (base 16)		HWH CO., LTD.
-				102-708, Digital Empire2, Sin-dong, Youngtong-gu
-				Suwon-si  Gyeonggi-do  443-734
-				KR
-
-8C-A0-48   (hex)		Beijing NeTopChip Technology Co.,LTD
-8CA048     (base 16)		Beijing NeTopChip Technology Co.,LTD
-				309,Intergration Building Olympic Center, No.1 An Ding Road,Chao Yang District,, 
-				Beijing    100029
-				CN
-
-24-D3-F2   (hex)		zte corporation
-24D3F2     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D4-69-A5   (hex)		Miura Systems Ltd.
-D469A5     (base 16)		Miura Systems Ltd.
-				Axis 40, Oxford Road, Stokenchurch
-				High Wycombe  Buckinghamshire  HP143SX
-				GB
-
-8C-81-26   (hex)		ARCOM
-8C8126     (base 16)		ARCOM
-				ZAC de la Loyère
-				FRAGNES LA LOYERE    71530
-				FR
-
-D4-7C-44   (hex)		IEEE Registration Authority
-D47C44     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-80-5E-4F   (hex)		FN-LINK TECHNOLOGY LIMITED
-805E4F     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-84-17-EF   (hex)		Technicolor CH USA Inc.
-8417EF     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-38-56-B5   (hex)		Peerbridge Health Inc
-3856B5     (base 16)		Peerbridge Health Inc
-				3 Columbus Circle 15th Fl
-				New York  NY  10019
-				US
-
-7C-96-D2   (hex)		Fihonest communication co.,Ltd
-7C96D2     (base 16)		Fihonest communication co.,Ltd
-				The Frist Building ,ShangKeng Industrial Zone,  Changping Town
-				Dongguan  Guangdong  523560
-				CN
-
-C0-42-D0   (hex)		Juniper Networks
-C042D0     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-D0-C5-D8   (hex)		LATECOERE
-D0C5D8     (base 16)		LATECOERE
-				135 Rue de Périole, BP25211
-				Toulouse Cedex 5  31 Haute-Garonne  31079
-				FR
-
-70-54-B4   (hex)		Vestel Elektronik San ve Tic. A.Ş.
-7054B4     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
-				Organize san
-				Manisa  Turket  45030
-				TR
-
-20-A6-0C   (hex)		Xiaomi Communications Co Ltd
-20A60C     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-48-8A-D2   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-488AD2     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-DC-E8-38   (hex)		CK Telecom (Shenzhen) Limited
-DCE838     (base 16)		CK Telecom (Shenzhen) Limited
-				Floor 9th, Building 4C,Software Industry Base, Xuefu Road, Hi-Tech Park, Nanshan Dist.
-				Shenzhen  Guangdong  518057
-				CN
-
-A8-D4-98   (hex)		Avira Operations GmbH & Co. KG
-A8D498     (base 16)		Avira Operations GmbH & Co. KG
-				Kaplaneiweg 1
-				Tettnang  Baden-Wuerttermberg  88069
-				DE
-
-50-59-67   (hex)		Intent Solutions Inc
-505967     (base 16)		Intent Solutions Inc
-				730 Peachtree St NE, Suite 550
-				ATLANTA  GA  30308
-				US
-
-00-06-80   (hex)		Card Access, Inc.
-000680     (base 16)		Card Access, Inc.
-				11778 S. Election Rd
-				Salt Lake City  UT  80420
-				US
-
-3C-57-6C   (hex)		Samsung Electronics Co.,Ltd
-3C576C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-84-17-66   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-841766     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Wei Fang  Shan Dong  
-				CN
-
-2C-4D-79   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-2C4D79     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				No.268 Dongfang Road
-				Weifang  Shandong  261000
-				CN
-
-00-0C-42   (hex)		Routerboard.com
-000C42     (base 16)		Routerboard.com
-				Pernavas 46
-				Riga    LV-1009
-				LV
-
-00-26-BD   (hex)		JTEC Card &amp; Communication Co., Ltd
-0026BD     (base 16)		JTEC Card &amp; Communication Co., Ltd
-				Dabo Bldg, 4F, 61-1, Gyesu-dong, Sosa-gu
-				Bucheon  Gyunggi-do  422-070
-				KR
-
-60-D0-2C   (hex)		Ruckus Wireless
-60D02C     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-14-57-9F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14579F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-43-26   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B44326     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-D2-94   (hex)		NETGEAR
-78D294     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-70-9F-A9   (hex)		TECNO MOBILE LIMITED
-709FA9     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-0C-01-DB   (hex)		Infinix mobility limited
-0C01DB     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-08-C5-E1   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-08C5E1     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-18-66-C7   (hex)		Shenzhen Libre Technology Co., Ltd
-1866C7     (base 16)		Shenzhen Libre Technology Co., Ltd
-				634, Tian Hui Building #B, You Song Lu, Long Hua District
-				Shenzhen    511700
-				CN
-
-5C-B3-F6   (hex)		Human, Incorporated
-5CB3F6     (base 16)		Human, Incorporated
-				3100 Airport Way S, 25-512
-				Seattle  WA  98134
-				US
-
-2C-48-35   (hex)		IEEE Registration Authority
-2C4835     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-48-2A-E3   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
-482AE3     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
-				168# First Avenue,Kunshan Integrated Free Trade Zone,Kunshan,Jiangsu,China
-				Kunshan  Jiangsu  215300
-				CN
-
-FC-A6-CD   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-FCA6CD     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-44-C8-74   (hex)		China Mobile Group Device Co.,Ltd.
-44C874     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-74-C1-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-74C14F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-EB-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B0EB57     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-69-DA   (hex)		China Mobile Group Device Co.,Ltd.
-1869DA     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-F8-5C-4D   (hex)		Nokia
-F85C4D     (base 16)		Nokia
-				1 Robbins Road
-				Westford  MA  01886-4113
-				US
-
-2C-58-4F   (hex)		ARRIS Group, Inc.
-2C584F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F0-4B-3A   (hex)		Juniper Networks
-F04B3A     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-54-BF-64   (hex)		Dell Inc.
-54BF64     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-A8-5B-6C   (hex)		Robert Bosch Gmbh, CM-CI2
-A85B6C     (base 16)		Robert Bosch Gmbh, CM-CI2
-				Renningen
-				Stuttgart    D-70465 
-				DE
-
-C8-B1-EE   (hex)		Qorvo
-C8B1EE     (base 16)		Qorvo
-				1 Changi Business Park Crescent, Avenue 1, #04-01
-				NA    486058
-				SG
-
-00-FC-BA   (hex)		Cisco Systems, Inc
-00FCBA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-CB-B4   (hex)		SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD
-00CBB4     (base 16)		SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD
-				4-5F,E1 Building,TCL International E City,No.1001 Zhongshanyuan Road,Nanshan District,Shenzhen
-				SHENZHEN  GUANGDONG  518052
-				CN
-
-4C-C0-0A   (hex)		vivo Mobile Communication Co., Ltd.
-4CC00A     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-9C-E8-2B   (hex)		vivo Mobile Communication Co., Ltd.
-9CE82B     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-70-79-B3   (hex)		Cisco Systems, Inc
-7079B3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D8-18-D3   (hex)		Juniper Networks
-D818D3     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-14-9B-2F   (hex)		JiangSu ZhongXie Intelligent Technology co., LTD
-149B2F     (base 16)		JiangSu ZhongXie Intelligent Technology co., LTD
-				Room 201,building 15, 16,FengJi set avenue (C08),YuHua district economic development zone ,NanJing city,JiangSu province,China,PRC.
-				NanJing   JiangSu   210000
-				CN
-
-38-35-FB   (hex)		Sagemcom Broadband SAS
-3835FB     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-48-DD-9D   (hex)		ITEL MOBILE LIMITED
-48DD9D     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-A0-75-EA   (hex)		BoxLock, Inc.
-A075EA     (base 16)		BoxLock, Inc.
-				931 Monroe Dr Ste A 102-405
-				Atlanta  GA  30308
-				US
-
-F0-4C-D5   (hex)		Maxlinear, Inc
-F04CD5     (base 16)		Maxlinear, Inc
-				5966 La Place Ct. Ste# 100
-				Carlsbad  CA  92008
-				US
-
-00-01-AE   (hex)		Trex Enterprises
-0001AE     (base 16)		Trex Enterprises
-				590 Lipoa Parkway
-				Kihei  HI  96753
-				US
-
-00-E0-09   (hex)		Stratus Technologies
-00E009     (base 16)		Stratus Technologies
-				5 Mill and Main Place, Suite 500
-				Maynard  MA  01754
-				US
-
-E4-EA-83   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-E4EA83     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-74-EC-42   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-74EC42     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-D4-FC-13   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D4FC13     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-80-7D-3A   (hex)		Espressif Inc.
-807D3A     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-EC-AF-97   (hex)		GIT
-ECAF97     (base 16)		GIT
-				05655, GIT Bldg., 87, Macheon-ro, Songpa-gu, Seoul, Korea
-				Songpa-gu  Seoul  05655
-				KR
-
-A0-B0-45   (hex)		Halong Mining
-A0B045     (base 16)		Halong Mining
-				13/F TCL Tower,  No.8 Tai Chung Road 
-				Tsuen Wan New Territories    Tsuen Wan New Territories
-				HK
-
-E0-BA-B4   (hex)		Arrcus, Inc
-E0BAB4     (base 16)		Arrcus, Inc
-				2077 Gateway Pl, Suite 250,
-				San Jose  CA  95110
-				US
-
-58-9B-0B   (hex)		Shineway Technologies, Inc.
-589B0B     (base 16)		Shineway Technologies, Inc.
-				Floor 5, Huanxing Building
-				Beijing    100191
-				CN
-
-D8-16-0A   (hex)		Nippon Electro-Sensory Devices
-D8160A     (base 16)		Nippon Electro-Sensory Devices
-				Itachibori 2-5-12
-				Nishi-ku  Osaka  550-0012
-				JP
-
-10-C0-7C   (hex)		Blu-ray Disc Association
-10C07C     (base 16)		Blu-ray Disc Association
-				4444 Riverside Drive #103
-				Burbank  California  91505
-				US
-
-40-A6-77   (hex)		Juniper Networks
-40A677     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-E4-B0-21   (hex)		Samsung Electronics Co.,Ltd
-E4B021     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-7F-57   (hex)		UNIC Memory Technology Co Ltd
-9C7F57     (base 16)		UNIC Memory Technology Co Ltd
-				15/F, Building B, Truth Plaza, No.7 Zhichun Road
-				Beijing  Haidian District  102208
-				CN
-
-B4-E0-1D   (hex)		CONCEPTION ELECTRONIQUE
-B4E01D     (base 16)		CONCEPTION ELECTRONIQUE
-				3 boulevard de l'europe
-				NEUFCHATEL EN BRAY    76270
-				FR
-
-1C-00-42   (hex)		NARI Technology Co., Ltd.
-1C0042     (base 16)		NARI Technology Co., Ltd.
-				NO.19 Chengxin Avenue, Nanjing
-				Nanjing    211106
-				CN
-
-44-34-A7   (hex)		ARRIS Group, Inc.
-4434A7     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-3C-E1-A1   (hex)		Universal Global Scientific Industrial Co., Ltd.
-3CE1A1     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
-				Nan-Tou  Taiwan  54261
-				TW
-
-F8-98-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F898EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-F9-87   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-58F987     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-F5-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A8F5AC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-BA-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-58BAD4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-1D-08   (hex)		99IOT Shenzhen co.,ltd
-701D08     (base 16)		99IOT Shenzhen co.,ltd
-				609C north block, Cangsong Building, Tairan Seven Road, Futian District
-				Shenzhen  Guangdong  518000
-				CN
-
-74-12-BB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-7412BB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-00-10-27   (hex)		L-3 COMMUNICATIONS EAST
-001027     (base 16)		L-3 COMMUNICATIONS EAST
-				ONE FEDERAL STREET - A&E-3ES
-				CAMDEN  NJ  08102
-				US
-
-BC-26-43   (hex)		Elprotronic Inc.
-BC2643     (base 16)		Elprotronic Inc.
-				35 Austin Rumble Crt.
-				King City  ON  L7B0B2
-				CA
-
-04-E2-29   (hex)		Qingdao Haier Technology Co.,Ltd
-04E229     (base 16)		Qingdao Haier Technology Co.,Ltd
-				Building A01,Haier Information Park, No.1 Haier Road,
-				Qingdao  Shandong  266101
-				CN
-
-34-8B-75   (hex)		LAVA INTERNATIONAL(H.K) LIMITED
-348B75     (base 16)		LAVA INTERNATIONAL(H.K) LIMITED
-				UNIT L 1/F MAU LAM COMM BLDG 16-18 MAU LAM ST, JORDAN KL, HK
-				Hong kong    999077
-				CN
-
-9C-E8-95   (hex)		New H3C Technologies Co., Ltd
-9CE895     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-00-58-3F   (hex)		PC Aquarius
-00583F     (base 16)		PC Aquarius
-				Comcity Office Park, Kievskoe shosse, est.6, bld. 1, Rumyantsevo, Moscow, 108811, RF
-				Moscow    108811
-				RU
-
-90-3D-68   (hex)		G-Printec, Inc.
-903D68     (base 16)		G-Printec, Inc.
-				Kawasaki Tech Center 5F, 580-16, Horikawacho
-				Saiwai-ku, Kawasaki-shi  Kanagawa  212-0013
-				JP
-
-10-94-BB   (hex)		Apple, Inc.
-1094BB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-1D-4A   (hex)		zte corporation
-781D4A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-94-E1-AC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-94E1AC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-34-E8-94   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-34E894     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-F8-6F-C1   (hex)		Apple, Inc.
-F86FC1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-FF-3C   (hex)		Apple, Inc.
-28FF3C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-99-B6   (hex)		Apple, Inc.
-F099B6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-E9-FE   (hex)		Apple, Inc.
-88E9FE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-89-2C   (hex)		Apple, Inc.
-38892C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-9E-AF   (hex)		Apple, Inc.
-749EAF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-BF-2D   (hex)		Apple, Inc.
-94BF2D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-CA-E4   (hex)		Cisco Systems, Inc
-68CAE4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-BE-3B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-00BE3B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-A1-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7CA177     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-2E-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-242E02     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-B6-EC   (hex)		Scuf Gaming International LLC
-78B6EC     (base 16)		Scuf Gaming International LLC
-				3970 Johns Creek Court Suite 325 Suwanee
-				Atlanta  GA  30024
-				US
-
-80-35-C1   (hex)		Xiaomi Communications Co Ltd
-8035C1     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-58-B3-FC   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-58B3FC     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-20-47-DA   (hex)		Xiaomi Communications Co Ltd
-2047DA     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-24-29-FE   (hex)		KYOCERA Corporation 
-2429FE     (base 16)		KYOCERA Corporation 
-				30 Hoji
-				Kitami,  Hokkaido  099-1595
-				JP
-
-7C-49-EB   (hex)		XIAOMI Electronics,CO.,LTD
-7C49EB     (base 16)		XIAOMI Electronics,CO.,LTD
-				Xiaomi Building, No.68 Qinghe Middle Street
-				Haidian District  Beijing  100085
-				CN
-
-C4-33-06   (hex)		China Mobile Group Device Co.,Ltd.
-C43306     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-08-DF-CB   (hex)		Systrome Networks
-08DFCB     (base 16)		Systrome Networks
-				Sohna Road
-				Gurgaon  Haryana  122018
-				IN
-
-A4-93-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4933F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-AC-9E   (hex)		Cisco Systems, Inc
-28AC9E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-68-D4-82   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-68D482     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-98-45-62   (hex)		Shanghai Baud Data Communication Co.,Ltd.
-984562     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
-				NO.123 JULI RD
-				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
-				CN
-
-E4-C4-83   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-E4C483     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-00-1F-BA   (hex)		Boyoung Tech
-001FBA     (base 16)		Boyoung Tech
-				Youngdeungpo-Gu Munrae3ga 84-2
-				Seoul    150-093
-				KR
-
-A4-33-D7   (hex)		MitraStar Technology Corp.
-A433D7     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-B0-AC-D2   (hex)		zte corporation
-B0ACD2     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-20-0F-70   (hex)		FOXTECH
-200F70     (base 16)		FOXTECH
-				152-160 City Road
-				LONDON  KEMP HOUSE  EC1V 2NX
-				GB
-
-20-2D-23   (hex)		Collinear Networks Inc.
-202D23     (base 16)		Collinear Networks Inc.
-				2901 Tasman Drive
-				Santa Clara  CA  95054
-				US
-
-90-83-4B   (hex)		BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
-90834B     (base 16)		BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
-				1-411Room 19#Building No.26 Xihuan South Rd. BDA Daxing District,
-				BEIJING    100176
-				CN
-
-18-50-2A   (hex)		SOARNEX
-18502A     (base 16)		SOARNEX
-				NO.158, RUIHU ST., NEIHU DIST.,
-				TAIPEI CITY  TAIWAN (R.O.C.)  11494
-				TW
-
-A8-36-7A   (hex)		frogblue TECHNOLOGY GmbH
-A8367A     (base 16)		frogblue TECHNOLOGY GmbH
-				Luxemburger Straße 6
-				Kaiserslautern  Rheinland-Pfalz  67657
-				DE
-
-6C-E4-DA   (hex)		NEC Platforms, Ltd.
-6CE4DA     (base 16)		NEC Platforms, Ltd.
-				2-3 Kandatsukasamachi
-				Chiyodaku  Tokyo  101-8532
-				JP
-
-10-E7-C6   (hex)		Hewlett Packard
-10E7C6     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-18-31-BF   (hex)		ASUSTek COMPUTER INC.
-1831BF     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-C8-FA-E1   (hex)		ARQ Digital LLC
-C8FAE1     (base 16)		ARQ Digital LLC
-				2430 Auto Park Way
-				Escondido  CA  92029
-				US
-
-DC-A3-33   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-DCA333     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-78-8C-54   (hex)		Ping Communication
-788C54     (base 16)		Ping Communication
-				Brenden 18
-				Appenzell Meistersrüte  AI  9050
-				CH
-
-B8-AF-67   (hex)		Hewlett Packard
-B8AF67     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-C0-98-DA   (hex)		China Mobile IOT Company Limited
-C098DA     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-F0-0F-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F00FEC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-07-5F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC075F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-48-E6   (hex)		Samsung Electronics Co.,Ltd
-C048E6     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-88-2E-5A   (hex)		storONE
-882E5A     (base 16)		storONE
-				POB 2660
-				Ra'anana    
-				IL
-
-00-71-47   (hex)		Amazon Technologies Inc.
-007147     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-BE-75   (hex)		Cisco Systems, Inc
-00BE75     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-64-DB-8B   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-64DB8B     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-78-25-7A   (hex)		LEO Innovation Lab
-78257A     (base 16)		LEO Innovation Lab
-				Silkegade 8
-				Copenhagen K  Denmark  1113
-				DK
-
-10-A4-B9   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
-10A4B9     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
-				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
-				 Beijing    100085
-				CN
-
-50-1C-B0   (hex)		Cisco Systems, Inc
-501CB0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-04-AC-44   (hex)		Holtek Semiconductor Inc.
-04AC44     (base 16)		Holtek Semiconductor Inc.
-				No.3, Creation Rd. II, Science Park
-				Hsinchu    300
-				TW
-
-F4-DC-A5   (hex)		DAWON DNS
-F4DCA5     (base 16)		DAWON DNS
-				217ho, Sauphwajiwon-dong, KETI, 226, Cheomdangwagi-ro, Buk-gu
-				Gwangju    61011
-				KR
-
-80-CE-62   (hex)		Hewlett Packard
-80CE62     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-80-1F-12   (hex)		Microchip Technology Inc.
-801F12     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-50-6C-BE   (hex)		InnosiliconTechnology Ltd
-506CBE     (base 16)		InnosiliconTechnology Ltd
-				WuHan East Lake Wuhan New Technology Development Zone 
-				Wuhan  Hubei Province  430223
-				CN
-
-24-7E-12   (hex)		Cisco Systems, Inc
-247E12     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-04-C2-41   (hex)		Nokia
-04C241     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-3C-47-9B   (hex)		Theissen Training Systems, Inc.
-3C479B     (base 16)		Theissen Training Systems, Inc.
-				1225 SE 4th Terrace
-				Chiefland  FL  32626
-				US
-
-60-6B-FF   (hex)		Nintendo Co.,Ltd
-606BFF     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-8C-F7-10   (hex)		AMPAK Technology, Inc.
-8CF710     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-30-7B-AC   (hex)		New H3C Technologies Co., Ltd
-307BAC     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-78-5D-C8   (hex)		LG Electronics
-785DC8     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-3C-04-61   (hex)		ARRIS Group, Inc.
-3C0461     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-88-3D-24   (hex)		Google, Inc.
-883D24     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-E8-C1-B8   (hex)		 Nanjing Bangzhong Electronic Commerce Limited
-E8C1B8     (base 16)		 Nanjing Bangzhong Electronic Commerce Limited
-				No.22, Liuzhou East Road, High - tech Zone
-				Nanjing    210000
-				CN
-
-D8-D7-75   (hex)		Sagemcom Broadband SAS
-D8D775     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-E8-33-0D   (hex)		Xaptec GmbH
-E8330D     (base 16)		Xaptec GmbH
-				Neidenburger Str. 10
-				Gelsenkirchen    45897
-				DE
-
-D4-60-E3   (hex)		Sercomm Corporation.
-D460E3     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-B4-A8-B9   (hex)		Cisco Systems, Inc
-B4A8B9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-50-DC-E7   (hex)		Amazon Technologies Inc.
-50DCE7     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-64-98-29   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-649829     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-08-1D-C4   (hex)		Thermo Fisher Scientific Messtechnik GmbH
-081DC4     (base 16)		Thermo Fisher Scientific Messtechnik GmbH
-				Frauenauracher Strasse 96
-				Erlangen    91056
-				DE
-
-78-53-64   (hex)		SHIFT GmbH
-785364     (base 16)		SHIFT GmbH
-				Am Gänsemarkt 6
-				Wabern Falkenberg  Hessen  34590
-				DE
-
-38-E6-0A   (hex)		Xiaomi Communications Co Ltd
-38E60A     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-40-CB-C0   (hex)		Apple, Inc.
-40CBC0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C4-61-8B   (hex)		Apple, Inc.
-C4618B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-6E-A4   (hex)		Samsung Electronics Co.,Ltd
-CC6EA4     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-80-3A-59   (hex)		AT&T
-803A59     (base 16)		AT&T
-				1025 Lenox Park Blvd
-				Atlanta  GA  30319
-				US
-
-58-8D-64   (hex)		Xi'an Clevbee Technology Co.,Ltd
-588D64     (base 16)		Xi'an Clevbee Technology Co.,Ltd
-				FLOOR 7, TOWER B, POSCO CENTER, NO. 13 ZONE FOUR WANGJING EAST PARK, CHAOYANG DISTRICT, BEIJING
-				Beijing    100012
-				CN
-
-00-5D-73   (hex)		Cisco Systems, Inc
-005D73     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-60-6D-3C   (hex)		Luxshare Precision Industry Company Limited
-606D3C     (base 16)		Luxshare Precision Industry Company Limited
-				Floor 2, Block A, Sanyo New Industrial Area
-				West Haoyi Community, Shajing Subdistrict Office  Bao'an District, Shenzhen, Guangdong  523000
-				CN
-
-44-F0-34   (hex)		Kaonmedia CO., LTD.
-44F034     (base 16)		Kaonmedia CO., LTD.
-				884-3, Seongnam-daero, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13517
-				KR
-
-00-27-90   (hex)		Cisco Systems, Inc
-002790     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-BA-38   (hex)		PAL MOHAN ELECTRONICS PVT LTD
-34BA38     (base 16)		PAL MOHAN ELECTRONICS PVT LTD
-				40 DLF, INDUSTRIAL AREA, KIRTI NAGAR
-				NEW DELHI  DELHI  110015
-				IN
-
-98-29-A6   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-9829A6     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU  215300
-				CN
-
-CC-4D-38   (hex)		Carnegie Technologies
-CC4D38     (base 16)		Carnegie Technologies
-				9737 Great Hills Trail #260
-				Austin  TX  78759
-				US
-
-08-E6-89   (hex)		Apple, Inc.
-08E689     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-56-E7   (hex)		Apple, Inc.
-DC56E7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-16-D0   (hex)		Samsung Electronics Co.,Ltd
-A816D0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-6C-F1   (hex)		Samsung Electronics Co.,Ltd
-A46CF1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-AE-D6   (hex)		Samsung Electronics Co.,Ltd
-08AED6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-BF-E9   (hex)		Motorola Mobility LLC, a Lenovo Company
-DCBFE9     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-B4-2D-56   (hex)		Extreme Networks, Inc.
-B42D56     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-40-64-A4   (hex)		THE FURUKAWA ELECTRIC CO., LTD
-4064A4     (base 16)		THE FURUKAWA ELECTRIC CO., LTD
-				2-2-3,Marunouchi
-				Chiyoda-ku  Tokyo  100-8322
-				JP
-
-6C-B2-AE   (hex)		Cisco Systems, Inc
-6CB2AE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B0-98-2B   (hex)		Sagemcom Broadband SAS
-B0982B     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-34-FA-9F   (hex)		Ruckus Wireless
-34FA9F     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F0-65-C2   (hex)		Yanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.
-F065C2     (base 16)		Yanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.
-				1001 North Qin Zhou Road
-				Shang Hai    200233
-				CN
-
-70-B7-E2   (hex)		Jiangsu Miter Technology Co.,Ltd.
-70B7E2     (base 16)		Jiangsu Miter Technology Co.,Ltd.
-				No.86 fuyuan community,the town of houbei
-				Jurong  Jiangsu  212400
-				CN
-
-80-8D-B7   (hex)		Hewlett Packard Enterprise
-808DB7     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-A0-9D-86   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-A09D86     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-00-C0-FF   (hex)		Seagate Cloud Systems Inc
-00C0FF     (base 16)		Seagate Cloud Systems Inc
-				6305 El Camino Real
-				Carlsbad  CA  92009
-				US
-
-D4-5D-DF   (hex)		PEGATRON CORPORATION
-D45DDF     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-F8-B5-68   (hex)		IEEE Registration Authority
-F8B568     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-2C-6B-7D   (hex)		Texas Instruments
-2C6B7D     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-88-D1-71   (hex)		BEGHELLI S.P.A
-88D171     (base 16)		BEGHELLI S.P.A
-				VIA MOZZEGHINE 13/15
-				LOCALITA' MONTEVEGLIO - COMUNE VALSAMOGGIA  BOLOGNA  40053
-				IT
-
-A0-9D-C1   (hex)		China Dragon Technology Limited
-A09DC1     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-2C-42-05   (hex)		Lytx
-2C4205     (base 16)		Lytx
-				9785 Towne Centre Drive
-				San Diego  CA  92121
-				US
-
-A8-25-EB   (hex)		Cambridge Industries(Group) Co.,Ltd.
-A825EB     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				5/F,Building 8, 2388 ChenHang Road, MinHang District
-				shanghai    201114
-				CN
-
-34-E3-80   (hex)		Genexis B.V.
-34E380     (base 16)		Genexis B.V.
-				Lodewijkstraat 1A
-				Eindhoven    5652AC
-				NL
-
-5C-58-19   (hex)		Jingsheng Technology Co., Ltd.
-5C5819     (base 16)		Jingsheng Technology Co., Ltd.
-				Linyin street 5#
-				chengdu  sichuan  610000
-				CN
-
-B8-CA-04   (hex)		Holtek Semiconductor Inc.
-B8CA04     (base 16)		Holtek Semiconductor Inc.
-				No.3, Creation Rd. II, Science Park
-				Hsinchu    300
-				TW
-
-C4-C5-63   (hex)		TECNO MOBILE LIMITED
-C4C563     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-80-B7-08   (hex)		Blue Danube Systems, Inc
-80B708     (base 16)		Blue Danube Systems, Inc
-				3131 Jay Street, Suite 201
-				Santa Clara  CA  95054
-				US
-
-08-BC-20   (hex)		Hangzhou Royal Cloud Technology Co., Ltd
-08BC20     (base 16)		Hangzhou Royal Cloud Technology Co., Ltd
-				Hangzhou Xixi Road 957, 24, Unit 2, 302
-				Hangzhou    310030
-				CN
-
-94-2A-3F   (hex)		Diversey Inc
-942A3F     (base 16)		Diversey Inc
-				2415 Cascade Pointe Blvd
-				Charlotte  NC  28208
-				US
-
-20-31-EB   (hex)		HDSN
-2031EB     (base 16)		HDSN
-				4 allée des roseaux
-				Saint mitre les remparts  BDR  13920
-				FR
-
-F8-C9-6C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-F8C96C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-84-48-23   (hex)		WOXTER TECHNOLOGY Co. Ltd
-844823     (base 16)		WOXTER TECHNOLOGY Co. Ltd
-				23F Doushiyangguang, Chegongmiao
-				Shenzhen    518040
-				CN
-
-F4-1E-5E   (hex)		RtBrick Inc.
-F41E5E     (base 16)		RtBrick Inc.
-				26 Kingston Terrace
-				Princeton  NJ  08540
-				US
-
-6C-76-60   (hex)		KYOCERA CORPORATION 
-6C7660     (base 16)		KYOCERA CORPORATION 
-				2-1-1 Kagahara
-				Yokohama-shi  Kanagawa  224-8502
-				JP
-
-00-21-02   (hex)		UpdateLogic Inc.
-002102     (base 16)		UpdateLogic Inc.
-				2 Willow Street, Suite 101
-				Southborough  MA  01745
-				US
-
-50-58-00   (hex)		WyTec International, Inc.
-505800     (base 16)		WyTec International, Inc.
-				19206 Huebner Rd Suite 202
-				San Antonio  Texas  78258
-				US
-
-C8-D1-2A   (hex)		Comtrend Corporation
-C8D12A     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-0C-EA-C9   (hex)		ARRIS Group, Inc.
-0CEAC9     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E8-2A-44   (hex)		Liteon Technology Corporation
-E82A44     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-10-A4-BE   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-10A4BE     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-EC-C0-6A   (hex)		PowerChord Group Limited
-ECC06A     (base 16)		PowerChord Group Limited
-				1 Blythe Road
-				London    W14 0HG
-				GB
-
-94-49-96   (hex)		WiSilica Inc
-944996     (base 16)		WiSilica Inc
-				23282 Mill Creek Dr #340
-				Laguna Hills  CA  92653
-				US
-
-F8-1D-0F   (hex)		Hitron Technologies. Inc
-F81D0F     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-58-C9-35   (hex)		Chiun Mai Communication Systems, Inc
-58C935     (base 16)		Chiun Mai Communication Systems, Inc
-				No.4, Minsheng St., Tucheng District
-				New Taipei City    23678
-				TW
-
-00-94-A1   (hex)		F5 Networks, Inc.
-0094A1     (base 16)		F5 Networks, Inc.
-				401 Elliott Ave. W.
-				Seattle  WA  98119
-				US
-
-BC-F2-92   (hex)		PLANTRONICS, INC.
-BCF292     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-04-50-DA   (hex)		Qiku Internet Network Scientific (Shenzhen) Co., Ltd
-0450DA     (base 16)		Qiku Internet Network Scientific (Shenzhen) Co., Ltd
-				Building A2, Chi Yuen Technology Park  1001 College Avenue, Nanshan District Shenzhen, Guangdong 
-				 Shenzhen  Guangdong   518000
-				CN
-
-E8-20-E2   (hex)		HUMAX Co., Ltd.
-E820E2     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-00-26-A8   (hex)		DAEHAP HYPER-TECH
-0026A8     (base 16)		DAEHAP HYPER-TECH
-				Mega center #1108, SK Techno-Park, #190-1, Sangdaewon-Dong, Jungwon-Gu
-				Seongnam  Gyeonggi-Do  462-807
-				KR
-
-78-5C-28   (hex)		Prime Motion Inc.
-785C28     (base 16)		Prime Motion Inc.
-				Akaho 1134-12
-				Komagane  Nagano  399-4117
-				JP
-
-8C-5B-F0   (hex)		ARRIS Group, Inc.
-8C5BF0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-18-90-D8   (hex)		Sagemcom Broadband SAS
-1890D8     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-88-83-5D   (hex)		FN-LINK TECHNOLOGY LIMITED
-88835D     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyang Economic & Technical Development Zone
-				ChangSha  Hu Nan  410300
-				CN
-
-EC-9F-0D   (hex)		IEEE Registration Authority
-EC9F0D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E0-78-A3   (hex)		Shanghai Winner Information Technology Co.,Inc
-E078A3     (base 16)		Shanghai Winner Information Technology Co.,Inc
-				Lujiazui Software Park,No.190,Lane 91,Eshan Road,Pudong New Area
-				Shanghai  Shanghai  200127
-				CN
-
-00-05-A7   (hex)		HYPERCHIP Inc.
-0005A7     (base 16)		HYPERCHIP Inc.
-				180 Peel Street - Ste. #333
-				123    H3C 2G7
-				CA
-
-08-84-66   (hex)		Novartis Pharma AG
-088466     (base 16)		Novartis Pharma AG
-				Lichtstrasse 35
-				Basel    4056
-				CH
-
-30-9F-FB   (hex)		Ardomus Networks Corporation
-309FFB     (base 16)		Ardomus Networks Corporation
-				4F,No. 6 Innovation Road II, Hsinchu Science Park  
-				Hsinchu    300
-				TW
-
-28-23-73   (hex)		Digita
-282373     (base 16)		Digita
-				Jämsänkatu 2
-				Helsinki  Uusimaa  00520
-				FI
-
-64-9A-08   (hex)		Shenzhen SuperElectron Technology Co.,LTD
-649A08     (base 16)		Shenzhen SuperElectron Technology Co.,LTD
-				Layer 13,Haosheng Business Center,Dongbin Road,Nanshan District
-				Shenzhen  guangdong  518052
-				CN
-
-68-A6-82   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-68A682     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-58-7A-62   (hex)		Texas Instruments
-587A62     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-54-7A-52   (hex)		CTE International srl
-547A52     (base 16)		CTE International srl
-				Via Sevardi 7
-				Reggio Emilia    42124
-				IT
-
-F0-6E-0B   (hex)		Microsoft Corporation
-F06E0B     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND    98052
-				US
-
-34-6F-ED   (hex)		Enovation Controls
-346FED     (base 16)		Enovation Controls
-				5311 S. 122nd E. Ave. 
-				Tulsa  OK  74146
-				US
-
-54-33-CB   (hex)		Apple, Inc.
-5433CB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-08-BC   (hex)		Apple, Inc.
-3408BC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-36-BB   (hex)		Apple, Inc.
-1C36BB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-2E-FF   (hex)		Apple, Inc.
-3C2EFF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-E0-25   (hex)		dit Co., Ltd.
-00E025     (base 16)		dit Co., Ltd.
-				Premier Toyocho Building
-				Koto-ku  Tokyo  135-0056
-				JP
-
-AC-84-C6   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-AC84C6     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-15-30   (hex)		Dell EMC
-001530     (base 16)		Dell EMC
-				176 South Street
-				Hopkinton  MA  01748
-				US
-
-0C-B2-B7   (hex)		Texas Instruments
-0CB2B7     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-24-F6-77   (hex)		Apple, Inc.
-24F677     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-CA-68   (hex)		Apple, Inc.
-B0CA68     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-3C-85   (hex)		Apple, Inc.
-C83C85     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-87-0D   (hex)		Unifiedgateways India Private Limited
-78870D     (base 16)		Unifiedgateways India Private Limited
-				25 1st Floor 4th Cross KR Road Jayanagar 7th Block West
-				Bangalore  Karnataka  560082
-				IN
-
-A8-82-00   (hex)		Hisense Electric Co.,Ltd
-A88200     (base 16)		Hisense Electric Co.,Ltd
-				Qianwangang Roard 218
-				Qingdao  Shandong  266510
-				CN
-
-38-20-A8   (hex)		ColorTokens, Inc.
-3820A8     (base 16)		ColorTokens, Inc.
-				2101 Tasman Dr. Suite 200A
-				Santa Clara  CA  95054
-				US
-
-70-58-96   (hex)		InShow Technology
-705896     (base 16)		InShow Technology
-				Jinqi Zhigu Building, Chongwen Garden, Liuxian Avenue, Nanshan District
-				shenzhen  Guangdong  518055
-				CN
-
-00-05-89   (hex)		National Datacomputer
-000589     (base 16)		National Datacomputer
-				900 Middlesex Tpk.
-				Billerica  MA  01821
-				US
-
-3C-A6-16   (hex)		vivo Mobile Communication Co., Ltd.
-3CA616     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-9C-E0-63   (hex)		Samsung Electronics Co.,Ltd
-9CE063     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-31-69   (hex)		Samsung Electronics Co.,Ltd
-D03169     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-24-F2-7F   (hex)		Hewlett Packard Enterprise
-24F27F     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-BC-05-43   (hex)		AVM GmbH
-BC0543     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin    10559
-				DE
-
-00-B6-9F   (hex)		Latch
-00B69F     (base 16)		Latch
-				450 W 33rd  St
-				New York  NY  10001
-				US
-
-84-2C-80   (hex)		Sichuan Changhong Electric Ltd.
-842C80     (base 16)		Sichuan Changhong Electric Ltd.
-				No.35,East MianXin Road,MianYang,Sichaun,China.
-				MianYang  SiChuan  PRC 621000
-				CN
-
-3C-C0-79   (hex)		Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd
-3CC079     (base 16)		Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd
-				Office 3015, Chuangxingda Business Building, No.36. Liuxian 3 Road, Baoan District
-				Shenzhen  Guangdong  518133
-				CN
-
-98-C5-DB   (hex)		Ericsson AB
-98C5DB     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-14-9F-3C   (hex)		Samsung Electronics Co.,Ltd
-149F3C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-EE-E6   (hex)		FORMIKE ELECTRONIC CO., LTD
-FCEEE6     (base 16)		FORMIKE ELECTRONIC CO., LTD
-				Flats 401-403, Block B, iPARK Building, 26 Dengliang Rd., NanShan Distric
-				Shenzhen  Guang Dong  518054
-				CN
-
-84-E3-27   (hex)		TAILYN TECHNOLOGIES INC
-84E327     (base 16)		TAILYN TECHNOLOGIES INC
-				NO 10 RUNG-AN ROAD, LU-ZHU DISTRICT
-				TAOYUAN CITY  TAIWAN ROC  33852
-				TW
-
-00-21-B8   (hex)		Inphi Corporation
-0021B8     (base 16)		Inphi Corporation
-				112 S. Lakeview Canyon Rd., Suite 100
-				Westlake Village  CA  91362
-				US
-
-0C-91-60   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-0C9160     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-D8-ED-1C   (hex)		Magna Technology SL
-D8ED1C     (base 16)		Magna Technology SL
-				C/Principe de Vergara, 55. 3ª planta
-				Madrid    28006
-				ES
-
-40-8B-F6   (hex)		Shenzhen TCL New Technology Co., Ltd
-408BF6     (base 16)		Shenzhen TCL New Technology Co., Ltd
-				TCL Building, #5 Central Nanhai Road, Nanshan District,
-				Shenzhen,  Guangdong,   518067
-				CN
-
-00-00-6B   (hex)		Silicon Graphics
-00006B     (base 16)		Silicon Graphics
-				2011 NORTH SHORELINE BLVD.
-				MOUNTAIN VIEW  CA  94039-7311
-				US
-
-74-37-3B   (hex)		UNINET Co.,Ltd.
-74373B     (base 16)		UNINET Co.,Ltd.
-				#1803, Daerung Techno Town15, 401, Simin-daero, Dongan-gu
-				Anyang-si  Gyunggi-do  14057
-				KR
-
-7C-64-56   (hex)		Samsung Electronics Co.,Ltd
-7C6456     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-F4-6E-24   (hex)		NEC Personal Computers, Ltd.
-F46E24     (base 16)		NEC Personal Computers, Ltd.
-				Akihabara UDX,14-1, Sotokanda 4-Chome
-				Chiyoda-ku  Tokyo  101-0021
-				JP
-
-88-82-79   (hex)		Shenzhen RB-LINK Intelligent Technology Co.Ltd
-888279     (base 16)		Shenzhen RB-LINK Intelligent Technology Co.Ltd
-				Second floor, No 22, Wanfeng the third industry area, Shajing , BaoAn district
-				Shenzhen City    518125
-				CN
-
-68-C6-3A   (hex)		Espressif Inc.
-68C63A     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-A0-64-8F   (hex)		ASKEY COMPUTER CORP
-A0648F     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-C8-50-E9   (hex)		Raisecom Technology CO., LTD
-C850E9     (base 16)		Raisecom Technology CO., LTD
-				No. 11, East Area, No. 10 Block, East Xibeiwang Road
-				Beijing    100094
-				CN
-
-10-F1-63   (hex)		TNK CO.,LTD
-10F163     (base 16)		TNK CO.,LTD
-				1 Kasugayama.Iitoyo
-				Tenei-village.Iwase-country  Fukushima-prefecture  962-0512
-				JP
-
-98-EF-9B   (hex)		OHSUNG
-98EF9B     (base 16)		OHSUNG
-				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
-				GUMI  GYEONG BUK  730-030
-				KR
-
-14-CF-8D   (hex)		OHSUNG
-14CF8D     (base 16)		OHSUNG
-				181
-				GUMI  KYUNGBUK  730-030
-				KR
-
-10-44-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-104400     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-E1-7E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B0E17E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-A7-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E4A7C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-8D-2D   (hex)		Shanghai Wellpay Information Technology Co., Ltd
-5C8D2D     (base 16)		Shanghai Wellpay Information Technology Co., Ltd
-				 Loushanguan Road 523, Jin Hongqiao International Center Building, 1501
-				Shanghai    200000
-				CN
-
-90-FD-9F   (hex)		Silicon Laboratories
-90FD9F     (base 16)		Silicon Laboratories
-				400 W. Cesar Chavez St.
-				Austin  TX  78701
-				US
-
-B4-30-C0   (hex)		York Instruments Ltd
-B430C0     (base 16)		York Instruments Ltd
-				The Biocentre, York Science Park
-				York  North Yorkshire  YO10 5NY
-				GB
-
-E8-1D-A8   (hex)		Ruckus Wireless
-E81DA8     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F0-3D-03   (hex)		TECNO MOBILE LIMITED
-F03D03     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-DC-F0-90   (hex)		Nubia Technology Co.,Ltd.
-DCF090     (base 16)		Nubia Technology Co.,Ltd.
-				6/F-8/F 10/F-11/F A Tower,6/F B Tower,6/F-10/F C Tower Dazu Innovation Mansion, North Ring Rd,No.9018,High-Tech Park Nanshan District
-				Shenzhen  Guandong  518057
-				CN
-
-A0-FE-61   (hex)		Vivint Wireless Inc. 
-A0FE61     (base 16)		Vivint Wireless Inc. 
-				4931 N 300 W
-				Provo  UT  84604
-				US
-
-5C-2B-F5   (hex)		Vivint Wireless Inc. 
-5C2BF5     (base 16)		Vivint Wireless Inc. 
-				4931 N 300 W
-				Provo  UT  84604
-				US
-
-CC-5A-53   (hex)		Cisco Systems, Inc
-CC5A53     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-60-88   (hex)		Analog Devices, Inc.
-006088     (base 16)		Analog Devices, Inc.
-				410 AMHERST STREET-STE #325
-				NASHUA  NH  03063
-				US
-
-08-4A-CF   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-084ACF     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-2C-27-9E   (hex)		IEEE Registration Authority
-2C279E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-5F-48   (hex)		Continental Intelligent Transportation Systems LLC
-8C5F48     (base 16)		Continental Intelligent Transportation Systems LLC
-				3901 North First Street
-				San Jose  CA  95134
-				US
-
-94-7E-B9   (hex)		National Narrowband Network Communications Pty Ltd
-947EB9     (base 16)		National Narrowband Network Communications Pty Ltd
-				Unit 10, 1 Talavera Road
-				Macquarie Park  New South Wales  2113
-				AU
-
-64-6E-69   (hex)		Liteon Technology Corporation
-646E69     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-70-6B-B9   (hex)		Cisco Systems, Inc
-706BB9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-C0-EE   (hex)		KYOCERA Display Corporation
-00C0EE     (base 16)		KYOCERA Display Corporation
-				2-14-9 TAMAGAWADAI
-				tokyo  158  0000
-				JP
-
-24-5F-DF   (hex)		KYOCERA CORPORATION 
-245FDF     (base 16)		KYOCERA CORPORATION 
-				2-1-1,Kagahara,
-				Yokohama-shi  Kanagawa  224-8502
-				JP
-
-9C-63-ED   (hex)		zte corporation
-9C63ED     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-74-F6-61   (hex)		Schneider Electric Fire & Security Oy
-74F661     (base 16)		Schneider Electric Fire & Security Oy
-				Sokerilinnantie 11 C
-				Espoo    02650
-				FI
-
-B8-63-4D   (hex)		Apple, Inc.
-B8634D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-C4-2F   (hex)		Philips Lifeline
-24C42F     (base 16)		Philips Lifeline
-				111 Lawrence st
-				Framingham  MA  01702
-				US
-
-2C-B2-1A   (hex)		Phicomm (Shanghai) Co., Ltd.
-2CB21A     (base 16)		Phicomm (Shanghai) Co., Ltd.
-				3666 SiXian Rd.,Songjiang District
-				Shanghai  Shanghai  201616
-				CN
-
-A4-E9-75   (hex)		Apple, Inc.
-A4E975     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-35-AD   (hex)		Apple, Inc.
-3035AD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-41-67   (hex)		Apple, Inc.
-844167     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-00-C6   (hex)		Apple, Inc.
-9800C6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-1F-74   (hex)		Apple, Inc.
-AC1F74     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-5C-2C   (hex)		Apple, Inc.
-A85C2C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-DB-70   (hex)		Apple, Inc.
-00DB70     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-E5-57   (hex)		Nokia Corporation
-FCE557     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu  Ou  90590
-				FI
-
-48-C5-8D   (hex)		Lear Corporation GmbH
-48C58D     (base 16)		Lear Corporation GmbH
-				Industriestrasse 48
-				Kronach  Bavaria  96317
-				DE
-
-00-28-9F   (hex)		Semptian Co., Ltd.
-00289F     (base 16)		Semptian Co., Ltd.
-				Block 5D, 8/F, Software Industry Park, No.14, Haitian 2nd Road, GaoxinSouth, Nanshan District, Shenzhen, China
-				Shen Zhen  GuangDong  518061
-				CN
-
-9C-30-5B   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-9C305B     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-10-4E-89   (hex)		Garmin International
-104E89     (base 16)		Garmin International
-				1200 E. 151st St
-				Olathe  KS  66062
-				US
-
-D8-C4-97   (hex)		Quanta Computer Inc.
-D8C497     (base 16)		Quanta Computer Inc.
-				No. 211, Wen-Hwa 2nd Rd.,Kuei-Shan Dist.
-				Taoyuan City  Taiwan  33377
-				TW
-
-BC-C3-42   (hex)		Panasonic Communications Co., Ltd.
-BCC342     (base 16)		Panasonic Communications Co., Ltd.
-				4-1-62 Minoshima Hakata-ku
-				Fukuoka city  Fukuoka  812-8531
-				JP
-
-00-1B-D3   (hex)		Panasonic Corporation AVC Networks Company
-001BD3     (base 16)		Panasonic Corporation AVC Networks Company
-				1-15 Matsuo-cho
-				Kadoma  Osaka  571-8504
-				JP
-
-CC-7E-E7   (hex)		Panasonic Corporation AVC Networks Company
-CC7EE7     (base 16)		Panasonic Corporation AVC Networks Company
-				1-15 Matsuo-cho
-				Kadoma City  Osaka  571-8504
-				JP
-
-20-C6-EB   (hex)		Panasonic Corporation AVC Networks Company
-20C6EB     (base 16)		Panasonic Corporation AVC Networks Company
-				1-15 Matsuo-cho
-				Kadoma  Osaka  571-8504
-				JP
-
-64-B5-C6   (hex)		Nintendo Co.,Ltd
-64B5C6     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-28-30-AC   (hex)		Frontiir Co. Ltd.
-2830AC     (base 16)		Frontiir Co. Ltd.
-				5 Bayint Naung Road, Hlaing Township
-				Yangon    11052
-				MM
-
-D4-D2-E5   (hex)		BKAV Corporation
-D4D2E5     (base 16)		BKAV Corporation
-				2nd floor - HH1 Building - Yen Hoa Urban Area, Yen Hoa Ward, Cau Giay District
-				HaNoi    100000
-				VN
-
-00-50-B5   (hex)		FICHET SECURITE ELECTRONIQUE
-0050B5     (base 16)		FICHET SECURITE ELECTRONIQUE
-				15-17 AVE. MORANE-SAULNIER
-				    
-				FR
-
-00-14-39   (hex)		Blonder Tongue Laboratories, Inc
-001439     (base 16)		Blonder Tongue Laboratories, Inc
-				One Jake Brown Road
-				Old Bridge    08857
-				US
-
-20-A6-CD   (hex)		Hewlett Packard Enterprise
-20A6CD     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-84-80-2D   (hex)		Cisco Systems, Inc
-84802D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-19-87   (hex)		Panasonic Mobile Communications Co.,Ltd.
-001987     (base 16)		Panasonic Mobile Communications Co.,Ltd.
-				600 Saedo-cho, Tsuzuki-ku,
-				Yokohama City  Kanagawa Prefecture  224-8539
-				JP
-
-74-1C-27   (hex)		ITEL MOBILE LIMITED
-741C27     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-00-A0-AC   (hex)		GILAT SATELLITE NETWORKS, LTD.
-00A0AC     (base 16)		GILAT SATELLITE NETWORKS, LTD.
-				24A HABARZEL STREET
-				    
-				IL
-
-00-26-09   (hex)		Phyllis Co., Ltd.
-002609     (base 16)		Phyllis Co., Ltd.
-				9th Fl., Room 3/4, No. 52, Sec. 2, Chung Shan North Road,
-				Taipei    104
-				TW
-
-28-F5-37   (hex)		IEEE Registration Authority
-28F537     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-94-D9-B3   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-94D9B3     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-C8-40-29   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-C84029     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-F8-6E-EE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F86EEE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-02-B1   (hex)		Cisco Systems, Inc
-7802B1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B4-0F-3B   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-B40F3B     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-00-18-8D   (hex)		Nokia Danmark A/S
-00188D     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    1790
-				DK
-
-00-15-AB   (hex)		PRO CO SOUND INC
-0015AB     (base 16)		PRO CO SOUND INC
-				225 PARSONS STREET
-				KALAMAZOO  MICHIGAN  49008
-				US
-
-58-76-C5   (hex)		DIGI I'S LTD
-5876C5     (base 16)		DIGI I'S LTD
-				31, Takahata, Maesawa
-				Oshu  Iwate  029-4204
-				JP
-
-A8-B2-DA   (hex)		FUJITSU LIMITED
-A8B2DA     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-00-13-54   (hex)		Zcomax Technologies, Inc.
-001354     (base 16)		Zcomax Technologies, Inc.
-				98 Ford Road
-				Denville  NJ  07834
-				US
-
-78-D8-00   (hex)		IEEE Registration Authority
-78D800     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-08-35-B2   (hex)		CoreEdge Networks Co., Ltd
-0835B2     (base 16)		CoreEdge Networks Co., Ltd
-				#806 G Plus Tower, 123, Digital-ro 26gil, Guro-gu
-				Seoul    08390
-				KR
-
-4C-49-E3   (hex)		Xiaomi Communications Co Ltd
-4C49E3     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-24-58-80   (hex)		VIZEO
-245880     (base 16)		VIZEO
-				13 rue Emile Decorps
-				Villeurbanne    69100
-				FR
-
-54-66-6C   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-54666C     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-A8-96-75   (hex)		Motorola Mobility LLC, a Lenovo Company
-A89675     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-38-9A-F6   (hex)		Samsung Electronics Co.,Ltd
-389AF6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E0-AA-96   (hex)		Samsung Electronics Co.,Ltd
-E0AA96     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-77-05   (hex)		Samsung Electronics Co.,Ltd
-507705     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-28-D4-36   (hex)		Jiangsu dewosi electric co., LTD
-28D436     (base 16)		Jiangsu dewosi electric co., LTD
-				Dantu district fengjingchengbang  xibanya 503, building 6
-				Zhenjiang  Jiangsu  212028
-				CN
-
-D4-B2-7A   (hex)		ARRIS Group, Inc.
-D4B27A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-44-EA-4B   (hex)		Actlas Inc.
-44EA4B     (base 16)		Actlas Inc.
-				2-2-32, Asahikawa,
-				Yokote  Akita  013-0033
-				JP
-
-C4-CB-6B   (hex)		Airista Flow, Inc.
-C4CB6B     (base 16)		Airista Flow, Inc.
-				913 Ridgebrook Road Suite 110
-				Sparks  MD  21152
-				US
-
-18-80-90   (hex)		Cisco Systems, Inc
-188090     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-78-62-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-786256     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-55-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B05508     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-75-C0   (hex)		PayPal, Inc.
-B875C0     (base 16)		PayPal, Inc.
-				2211 North 1st Street
-				San Jose  California  95131
-				US
-
-00-1C-71   (hex)		Emergent Electronics
-001C71     (base 16)		Emergent Electronics
-				Bldg 2 Level 3 Suite 305
-				Sewickley  PA  15143
-				US
-
-00-1A-93   (hex)		ERCO Leuchten GmbH
-001A93     (base 16)		ERCO Leuchten GmbH
-				Brockhauser Weg 80-82
-				Lüdenscheid  NRW  D-58507
-				DE
-
-94-F6-65   (hex)		Ruckus Wireless
-94F665     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-B0-90-D4   (hex)		Shenzhen Hoin Internet Technology Co., Ltd
-B090D4     (base 16)		Shenzhen Hoin Internet Technology Co., Ltd
-				Xusheng Building, No. 4004, Bao’an, Room 1616 Bao’an District
-				Shenzhen  Guangdong  518000
-				CN
-
-8C-9F-3B   (hex)		Qingdao Hisense Communications Co.,Ltd.
-8C9F3B     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-00-14-B8   (hex)		Hill-Rom
-0014B8     (base 16)		Hill-Rom
-				1125 E. Pearl Street
-				Batesville  IN  47006
-				US
-
-AC-ED-5C   (hex)		Intel Corporate
-ACED5C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-84-20-96   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-842096     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-B4-C1-70   (hex)		Yi chip Microelectronics (Hangzhou) Co., Ltd
-B4C170     (base 16)		Yi chip Microelectronics (Hangzhou) Co., Ltd
-				Suite 401, Building #13, No. 498 Guoshoujing Rd., Pudong
-				Shanghai    201210
-				CN
-
-AC-67-06   (hex)		Ruckus Wireless
-AC6706     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-04-4F-AA   (hex)		Ruckus Wireless
-044FAA     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-58-93-96   (hex)		Ruckus Wireless
-589396     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-00-1F-41   (hex)		Ruckus Wireless
-001F41     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-C4-10-8A   (hex)		Ruckus Wireless
-C4108A     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F0-B0-52   (hex)		Ruckus Wireless
-F0B052     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-70-DF-2F   (hex)		Cisco Systems, Inc
-70DF2F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-38-94-E0   (hex)		Syrotech Networks. Ltd.
-3894E0     (base 16)		Syrotech Networks. Ltd.
-				UNIT NO.-5 20F, KIN WING INDUSTERIAL BUILDING,33 KIN WING STREET
-				TUEN MUN    999077
-				HK
-
-34-F6-4B   (hex)		Intel Corporate
-34F64B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-F4-6B-EF   (hex)		Sagemcom Broadband SAS
-F46BEF     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-10-CD-B6   (hex)		Essential Products, Inc.
-10CDB6     (base 16)		Essential Products, Inc.
-				380 Portage Avenue
-				Palo Alto  CA  94306
-				US
-
-A4-F3-E7   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-A4F3E7     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-E4-3A-6E   (hex)		Shenzhen Zeroone Technology CO.,LTD
-E43A6E     (base 16)		Shenzhen Zeroone Technology CO.,LTD
-				9/F.,Building B Tianan Cyber Park ,North Huangge Road,Longgang District
-				Shenzhen  Guangdong  518000
-				CN
-
-7C-E2-CA   (hex)		Juniper Networks
-7CE2CA     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-90-61-AE   (hex)		Intel Corporate
-9061AE     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-6C-F9-D2   (hex)		CHENGDU POVODO ELECTRONIC TECHNOLOGY CO., LTD
-6CF9D2     (base 16)		CHENGDU POVODO ELECTRONIC TECHNOLOGY CO., LTD
-				High - West West West Center Road on the 4th
-				 Chengdu   Sichuan  611731
-				CN
-
-30-B6-2D   (hex)		 Mojo Networks, Inc.
-30B62D     (base 16)		 Mojo Networks, Inc.
-				339 N.Bernardo Ave
-				Mountain View  CA  94043
-				US
-
-50-18-4C   (hex)		Platina Systems Inc.
-50184C     (base 16)		Platina Systems Inc.
-				3180 De La Cruz Blvd. Ste# 110
-				Santa Clara  CA  95054
-				US
-
-F4-B7-B3   (hex)		vivo Mobile Communication Co., Ltd.
-F4B7B3     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-FC-A6-67   (hex)		Amazon Technologies Inc.
-FCA667     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-C8-1F-EA   (hex)		Avaya Inc
-C81FEA     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-00-27-E3   (hex)		Cisco Systems, Inc
-0027E3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-18-AE   (hex)		TVT CO.,LTD
-0018AE     (base 16)		TVT CO.,LTD
-				5/F,North Block,CE Lighting House
-				shenzhen  guangdong  518026
-				CN
-
-88-91-DD   (hex)		Racktivity
-8891DD     (base 16)		Racktivity
-				Hertstokweg 5
-				Ternat  Flanders  1741
-				BE
-
-1C-45-93   (hex)		Texas Instruments
-1C4593     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-90-EC-50   (hex)		C.O.B.O. SPA
-90EC50     (base 16)		C.O.B.O. SPA
-				via Tito Speri, 10
-				Leno  Brescia  25024
-				IT
-
-E0-D8-48   (hex)		Dell Inc.
-E0D848     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-60-27-1C   (hex)		VIDEOR E. Hartig GmbH
-60271C     (base 16)		VIDEOR E. Hartig GmbH
-				Carl-Zeiss-Straße 8
-				Rödermark  Hessen  63322
-				DE
-
-00-EC-0A   (hex)		Xiaomi Communications Co Ltd
-00EC0A     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-C8-D7-B0   (hex)		Samsung Electronics Co.,Ltd
-C8D7B0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-6C-60-EB   (hex)		ZHI YUAN ELECTRONICS CO., LIMITED
-6C60EB     (base 16)		ZHI YUAN ELECTRONICS CO., LIMITED
-				UNIT 2508A 25/F BANK OF AMERICA TOWER， 12 HARCOURT RD CENTRAL 
-				HONGKONG    999077
-				HK
-
-74-DA-DA   (hex)		D-Link International
-74DADA     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-D8-F1-F0   (hex)		Pepxim International Limited
-D8F1F0     (base 16)		Pepxim International Limited
-				A5, 5/F, HK Spinners Industrial Building, Phase 6
-				Cheung Sha Wan  Hong Kong  0
-				HK
-
-DC-C8-F5   (hex)		Shanghai UMEinfo CO.,LTD.
-DCC8F5     (base 16)		Shanghai UMEinfo CO.,LTD.
-				16/F,Building B ,NO.15 Changyi Road ,Baoshan District,
-				Shanghai    200441
-				CN
-
-88-D7-F6   (hex)		ASUSTek COMPUTER INC.
-88D7F6     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-90-97-F3   (hex)		Samsung Electronics Co.,Ltd
-9097F3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-1C-68   (hex)		Samsung Electronics Co.,Ltd
-7C1C68     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C0-87-EB   (hex)		Samsung Electronics Co.,Ltd
-C087EB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-04-71-4B   (hex)		IEEE Registration Authority
-04714B     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-2C-41-A1   (hex)		Bose Corporation
-2C41A1     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-4C-38-D8   (hex)		ARRIS Group, Inc.
-4C38D8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-44-7B-BB   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-447BBB     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-9C-7B-D2   (hex)		NEOLAB Convergence
-9C7BD2     (base 16)		NEOLAB Convergence
-				4F Yujung bldg.,
-				Seoul    137-070
-				KR
-
-D0-F8-8C   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-D0F88C     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-2C-B1-15   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-2CB115     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-10-D0-7A   (hex)		AMPAK Technology, Inc.
-10D07A     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-D4-C1-C8   (hex)		zte corporation
-D4C1C8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-88-D2-74   (hex)		zte corporation
-88D274     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-24-49   (hex)		Shen Zhen Lite Star Electronics Technology Co., Ltd
-002449     (base 16)		Shen Zhen Lite Star Electronics Technology Co., Ltd
-				Xinghong Science Park,1st Ind.Area,
-				ShenZhen  GuangDong  518102
-				CN
-
-00-E1-8C   (hex)		Intel Corporate
-00E18C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-84-79-33   (hex)		profichip GmbH
-847933     (base 16)		profichip GmbH
-				Einsteinstrasse 6
-				Herzogenaurach    91074
-				DE
-
-88-15-44   (hex)		Cisco Meraki
-881544     (base 16)		Cisco Meraki
-				660 Alabama St
-				San Francisco  CA  94110
-				US
-
-C4-AB-B2   (hex)		vivo Mobile Communication Co., Ltd.
-C4ABB2     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-80-B2-34   (hex)		Technicolor CH USA Inc.
-80B234     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-44-B4-12   (hex)		SIUS AG
-44B412     (base 16)		SIUS AG
-				Im Langhag 1
-				Effretikon    8307
-				CH
-
-0C-B9-12   (hex)		JM-DATA GmbH
-0CB912     (base 16)		JM-DATA GmbH
-				Hackl-Str. 1
-				Traun  Upper Austria  4050
-				AT
-
-3C-A3-08   (hex)		Texas Instruments
-3CA308     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F4-3E-61   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-F43E61     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				2F Baiying Building
-				Shenzhen  Guangdong  518067
-				CN
-
-B4-41-7A   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-B4417A     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				4F,Baiying Building, No.1019,Nanhai RD,Shekou
-				ShenZhen  GuangDong  518067
-				CN
-
-00-00-62   (hex)		BULL HN INFORMATION SYSTEMS
-000062     (base 16)		BULL HN INFORMATION SYSTEMS
-				300 CONCORD ROAD M/S 864A
-				BILLERICA  MA  01821
-				US
-
-E8-C1-D7   (hex)		Philips
-E8C1D7     (base 16)		Philips
-				TussenDiepen 4
-				Drachten  Friesland  9206 AD  
-				NL
-
-4C-81-20   (hex)		Taicang T&W Electronics
-4C8120     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-28-A6-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-28A6DB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-A0-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14A0F8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-F8-6D   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-C8F86D     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-60-45-CB   (hex)		ASUSTek COMPUTER INC.
-6045CB     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-00-11-8B   (hex)		Alcatel-Lucent Enterprise
-00118B     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Road
-				Calabasas  CA  91301
-				US
-
-00-E0-B1   (hex)		Alcatel-Lucent Enterprise
-00E0B1     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Road
-				Calabasas  CA  91301
-				US
-
-00-E0-DA   (hex)		Alcatel-Lucent Enterprise
-00E0DA     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Road
-				CALABASAS  CA  91301
-				US
-
-F8-BE-0D   (hex)		A2UICT Co.,Ltd.
-F8BE0D     (base 16)		A2UICT Co.,Ltd.
-				1202, OWNER'S TOWER, 28,
-				Hwangsaeul-ro 200 beon-gil, Bundang-gu,  Seongnam-si, Gyeonggi-do  13595
-				KR
-
-E4-42-A6   (hex)		Intel Corporate
-E442A6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-3C-67-8C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C678C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-50-3F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-D4503F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-38-8C-50   (hex)		LG Electronics
-388C50     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-DC-08-56   (hex)		Alcatel-Lucent Enterprise
-DC0856     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Rd
-				Calabasas  CA  91301
-				US
-
-1C-DA-27   (hex)		vivo Mobile Communication Co., Ltd.
-1CDA27     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-90-F3-05   (hex)		HUMAX Co., Ltd.
-90F305     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-40-95-BD   (hex)		NTmore.Co.,Ltd
-4095BD     (base 16)		NTmore.Co.,Ltd
-				38, Heungan-daero 427 beon-gil, Dongan-gu
-				Anyang  Gyeonggi  431-801
-				KR
-
-98-AA-FC   (hex)		IEEE Registration Authority
-98AAFC     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-14-3F   (hex)		Hotway Technology Corporation
-00143F     (base 16)		Hotway Technology Corporation
-				3F.-4, No.81, Sec. 1, Xintai 5th Rd.
-				Xizhi Dist.  New Taipei City  22101
-				TW
-
-D0-55-B2   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-D055B2     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-14-4F-D7   (hex)		IEEE Registration Authority
-144FD7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B8-55-10   (hex)		Zioncom Electronics (Shenzhen) Ltd.
-B85510     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
-				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street,
-				Shenzhen  Guangdong  518000
-				CN
-
-04-95-73   (hex)		zte corporation
-049573     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F0-D7-AA   (hex)		Motorola Mobility LLC, a Lenovo Company
-F0D7AA     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-F8-FF-0B   (hex)		Electronic Technology Inc.
-F8FF0B     (base 16)		Electronic Technology Inc.
-				511 Lyons Ave
-				Irvington  NJ  07111
-				US
-
-7C-6B-F7   (hex)		NTI co., ltd.
-7C6BF7     (base 16)		NTI co., ltd.
-				5th floor takei building 2-19-6
-				taito  taito-ku , Tokyo  1100016
-				JP
-
-00-D3-18   (hex)		SPG Controls
-00D318     (base 16)		SPG Controls
-				Blue gates business park Stortford road
-				Dunmow  Essex  CM61SN
-				GB
-
-30-96-FB   (hex)		Samsung Electronics Co.,Ltd
-3096FB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-48-27-EA   (hex)		Samsung Electronics Co.,Ltd
-4827EA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-78-7E   (hex)		Samsung Electronics Co.,Ltd
-7C787E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-24-5B-A7   (hex)		Apple, Inc.
-245BA7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-F0-87   (hex)		Apple, Inc.
-70F087     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-0C-46   (hex)		Allied Telesyn Inc.
-000C46     (base 16)		Allied Telesyn Inc.
-				960 Stewart Drive, Suite B
-				Sunnyvale  California  94085
-				US
-
-00-1F-72   (hex)		QingDao Hiphone Technology Co,.Ltd
-001F72     (base 16)		QingDao Hiphone Technology Co,.Ltd
-				NO.106,JiangXi Road
-				QingDao  ShanDong  266071
-				CN
-
-00-23-65   (hex)		Insta Elektro GmbH
-002365     (base 16)		Insta Elektro GmbH
-				Hohe Steinert 10
-				Luedenscheid  NRW  58509
-				DE
-
-60-91-F3   (hex)		vivo Mobile Communication Co., Ltd.
-6091F3     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-28-39-5E   (hex)		Samsung Electronics Co.,Ltd
-28395E     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-38-29-5A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-38295A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-88-E6-28   (hex)		Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd
-88E628     (base 16)		Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd
-				Floor 3, Bldg. 5, Area B, Xinfu Industrial Park, Chongqing Rd., Baoan Dist,Shenzhen,Guangdong, China
-				Shenzhen   Guangdong  518103
-				CN
-
-58-23-8C   (hex)		Technicolor CH USA Inc.
-58238C     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-CC-82-EB   (hex)		KYOCERA CORPORATION 
-CC82EB     (base 16)		KYOCERA CORPORATION 
-				 2-1-1,Kagahara, Tsuzuki-ku,
-				Yokohama-shi  Kanagawa  224-8502
-				JP
-
-14-98-7D   (hex)		Technicolor CH USA Inc.
-14987D     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-D4-CF-37   (hex)		Symbolic IO
-D4CF37     (base 16)		Symbolic IO
-				101 Crawfords Corner Rd.
-				Holmdel  NJ  07733
-				US
-
-D4-7D-FC   (hex)		TECNO MOBILE LIMITED
-D47DFC     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-40-9F-38   (hex)		AzureWave Technology Inc.
-409F38     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-BC-2F-3D   (hex)		vivo Mobile Communication Co., Ltd.
-BC2F3D     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-40-FA-7F   (hex)		Preh Car Connect GmbH
-40FA7F     (base 16)		Preh Car Connect GmbH
-				Gewerbepark 5
-				Dresden    01156
-				DE
-
-00-0D-BB   (hex)		Nippon Dentsu Co.,Ltd.
-000DBB     (base 16)		Nippon Dentsu Co.,Ltd.
-				2-21-1,Isoji
-				Osaka    552-0003
-				JP
-
-2C-7E-81   (hex)		ARRIS Group, Inc.
-2C7E81     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-40-7D-0F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-407D0F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-CC-6E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-68CC6E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-34-D2   (hex)		Availink, Inc.
-3034D2     (base 16)		Availink, Inc.
-				Scotia Centre P.O. Box 268GT,Grand Cayman, Cayman Islands
-				Grand Cayman  Grand Cayman  999159
-				KY
-
-50-40-61   (hex)		Nokia
-504061     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-10-8E   (hex)		HUGH SYMONS CONCEPT Technologies Ltd.
-00108E     (base 16)		HUGH SYMONS CONCEPT Technologies Ltd.
-				Alder Hills Park
-				Poole, Dorset BM12 4AR    
-				GB
-
-E0-51-63   (hex)		Arcadyan Corporation
-E05163     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-54-E3-F6   (hex)		Alcatel-Lucent
-54E3F6     (base 16)		Alcatel-Lucent
-				777 East Middlefield Road
-				Mountain View  CA  94043
-				US
-
-40-B0-34   (hex)		Hewlett Packard
-40B034     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-B8-16-DB   (hex)		CHANT SINCERE CO.,LTD
-B816DB     (base 16)		CHANT SINCERE CO.,LTD
-				7F-2,NO.188,SEC.3,TA TUNG ROAD
-				XIZHI DISTRICT, NEW TAIPEI CITY  TAIWAN,ROC  22103
-				TW
-
-40-B4-CD   (hex)		Amazon Technologies Inc.
-40B4CD     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-D4-81-D7   (hex)		Dell Inc.
-D481D7     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-F4-2B-48   (hex)		Ubiqam
-F42B48     (base 16)		Ubiqam
-				15 Gonen 
-				Petah Tiqva    4925915
-				IL
-
-50-F1-4A   (hex)		Texas Instruments
-50F14A     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-04-DE-F2   (hex)		Shenzhen ECOM Technology Co. Ltd
-04DEF2     (base 16)		Shenzhen ECOM Technology Co. Ltd
-				Longhua Street Qinghu Community Longhu Junhui Fashion Apartment
-				 Longhua New District, Shenzhen  Guangdong  518012
-				CN
-
-78-C1-A7   (hex)		zte corporation
-78C1A7     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-4C-78-72   (hex)		Cav. Uff. Giacomo Cimberio S.p.A. 
-4C7872     (base 16)		Cav. Uff. Giacomo Cimberio S.p.A. 
-				Via Torchio, 57
-				San Maurizio d'Opaglio  (Novara)  28017
-				IT
-
-8C-F5-A3   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-8CF5A3     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-8C-C8-F4   (hex)		IEEE Registration Authority
-8CC8F4     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F4-83-E1   (hex)		Shanghai Clouder Semiconductor Co.,Ltd
-F483E1     (base 16)		Shanghai Clouder Semiconductor Co.,Ltd
-				Room515,No.8,Wuzhong Rd,Xuhui District
-				Shanghai  Shanghai  200336
-				CN
-
-08-3E-5D   (hex)		Sagemcom Broadband SAS
-083E5D     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-3C-BD-3E   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-3CBD3E     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-64-1A-22   (hex)		Heliospectra AB
-641A22     (base 16)		Heliospectra AB
-				Frans Perssons väg 6
-				    
-				SE
-
-A0-84-CB   (hex)		SonicSensory,Inc.
-A084CB     (base 16)		SonicSensory,Inc.
-				1161 Logan St
-				Los Angeles  CA  90026
-				US
-
-D4-7A-E2   (hex)		Samsung Electronics Co.,Ltd
-D47AE2     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-68-54-FD   (hex)		Amazon Technologies Inc.
-6854FD     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-03-BC   (hex)		COT GmbH
-0003BC     (base 16)		COT GmbH
-				Güterstraße 5
-				    
-				DE
-
-D4-B1-69   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-D4B169     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-				,Le Shi Building, No.105 Yaojiayuan Road,Chaoyang District,Beijing,China
-				beijing  beijing  100025
-				CN
-
-E4-47-90   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-E44790     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-38-45-4C   (hex)		Light Labs, Inc.
-38454C     (base 16)		Light Labs, Inc.
-				636 Ramona St.
-				Palo Alto  CA  94301
-				US
-
-00-0A-49   (hex)		F5 Networks, Inc.
-000A49     (base 16)		F5 Networks, Inc.
-				401 Elliott Ave. W.
-				Seattle  WA  98119
-				US
-
-00-A0-C8   (hex)		Adtran Inc
-00A0C8     (base 16)		Adtran Inc
-				901 EXPLORER BLVD.
-				HUNTSVILLE  AL  35806-2807
-				US
-
-F4-96-51   (hex)		NAKAYO Inc
-F49651     (base 16)		NAKAYO Inc
-				1-3-2, Soja-machi
-				Maebashi-shi  Gunma  371-0853
-				JP
-
-44-62-46   (hex)		Comat AG
-446246     (base 16)		Comat AG
-				Bernstrasse 4
-				Worb    3076
-				CH
-
-34-FC-B9   (hex)		Hewlett Packard Enterprise
-34FCB9     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-70-91-8F   (hex)		Weber-Stephen Products LLC
-70918F     (base 16)		Weber-Stephen Products LLC
-				1415 S. Roselle Rd
-				Palatine  IL  60067
-				US
-
-D8-E0-E1   (hex)		Samsung Electronics Co.,Ltd
-D8E0E1     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-7C-10-15   (hex)		Brilliant Home Technology, Inc.
-7C1015     (base 16)		Brilliant Home Technology, Inc.
-				762 Judith Ct
-				Incline Village  NV  89451
-				US
-
-D8-C7-71   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D8C771     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-2A-82   (hex)		Universal Global Scientific Industrial Co., Ltd.
-E02A82     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351,SEC.1, TAIPING RD.
-				TSAOTUEN,  NANTOU  54261
-				TW
-
-B0-F9-63   (hex)		Hangzhou H3C Technologies Co., Limited
-B0F963     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-D4-90-E0   (hex)		Topcon Electronics GmbH & Co. KG
-D490E0     (base 16)		Topcon Electronics GmbH & Co. KG
-				Industriestraße 7
-				Geisenheim    65366
-				DE
-
-A8-40-41   (hex)		Dragino Technology Co., Limited
-A84041     (base 16)		Dragino Technology Co., Limited
-				303, Block B, No 8; 349, Jian'An 1 Road,Bao'An
-				Shenzhen  GuangDong  518101
-				CN
-
-E0-22-02   (hex)		ARRIS Group, Inc.
-E02202     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D8-25-B0   (hex)		Rockeetech Systems Co.,Ltd.
-D825B0     (base 16)		Rockeetech Systems Co.,Ltd.
-				Unit 201, #6 Lane 51, Shuicheng S Rd.
-				Shanghai    201103
-				CN
-
-74-61-4B   (hex)		Chongqing Huijiatong Information Technology Co., Ltd.
-74614B     (base 16)		Chongqing Huijiatong Information Technology Co., Ltd.
-				Yubei District Longxi Street Hongjin Road No. 498, building  Jialeziguang No.1 12-12, 12-13, 12-13, 12-14, 12-15
-				Chongqing  Chongqing City  401120
-				CN
-
-98-D2-93   (hex)		Google, Inc.
-98D293     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-CC-B8-A8   (hex)		AMPAK Technology, Inc.
-CCB8A8     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-10-77-B0   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-1077B0     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-F0-1D-BC   (hex)		Microsoft Corporation
-F01DBC     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-34-04-9E   (hex)		IEEE Registration Authority
-34049E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-94-FB-29   (hex)		Zebra Technologies Inc.
-94FB29     (base 16)		Zebra Technologies Inc.
-				ONE ZEBRA PLAZA
-				HOLTSVILLE  NY  11742
-				US
-
-B0-70-2D   (hex)		Apple, Inc.
-B0702D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-19-C0   (hex)		Apple, Inc.
-6C19C0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-20-4F   (hex)		DEUTSCHE AEROSPACE AG
-00204F     (base 16)		DEUTSCHE AEROSPACE AG
-				GESCHAEFTSFELD
-				  BUNDESREPUBLIK  DEUTSCHLAND
-				DE
-
-00-DB-DF   (hex)		Intel Corporate
-00DBDF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-94-A0-4E   (hex)		Bostex Technology Co., LTD
-94A04E     (base 16)		Bostex Technology Co., LTD
-				NO.148 West MinZhou Road
-				Cixi City  Zhejiang Province  315301
-				CN
-
-8C-E1-17   (hex)		zte corporation
-8CE117     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-68-8A-F0   (hex)		zte corporation
-688AF0     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C0-21-0D   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-C0210D     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-50-4B-5B   (hex)		CONTROLtronic GmbH
-504B5B     (base 16)		CONTROLtronic GmbH
-				Schragenhofstr. 35
-				Munich    80992
-				DE
-
-B4-74-47   (hex)		CoreOS
-B47447     (base 16)		CoreOS
-				PO Box 7775 #55097
-				San Francisco  CA  94120-7775
-				US
-
-80-D4-A5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-80D4A5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-B0-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04B0E7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-6A-2E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-446A2E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-58-7B   (hex)		JCT Healthcare
-AC587B     (base 16)		JCT Healthcare
-				1/25 London Road
-				Mile End South  South Australia  5031
-				AU
-
-10-62-EB   (hex)		D-Link International
-1062EB     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-00-08-94   (hex)		InnoVISION Multimedia Ltd.
-000894     (base 16)		InnoVISION Multimedia Ltd.
-				Rm 608, 6/F Tins Enterprises Centre,
-				Kowloon,    
-				HK
-
-48-00-33   (hex)		Technicolor CH USA Inc.
-480033     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-A0-6F-AA   (hex)		LG Innotek
-A06FAA     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-00-26-AB   (hex)		Seiko Epson Corporation
-0026AB     (base 16)		Seiko Epson Corporation
-				3-3-5 OWA
-				SUWA-SHI  NAGANO-KEN  392-8502
-				JP
-
-FC-10-C6   (hex)		Taicang T&W Electronics
-FC10C6     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-2C-6F-C9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-2C6FC9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-58-EF-68   (hex)		Belkin International Inc.
-58EF68     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista  null  90094
-				US
-
-00-0B-4F   (hex)		Verifone
-000B4F     (base 16)		Verifone
-				2099 Gateway Place
-				San Jose    95110
-				US
-
-60-C7-98   (hex)		Verifone
-60C798     (base 16)		Verifone
-				2455 Augustine Drive
-				Santa Clara  California  95054
-				
-
-C8-66-2C   (hex)		Beijing Haitai Fangyuan High Technology Co,.Ltd.
-C8662C     (base 16)		Beijing Haitai Fangyuan High Technology Co,.Ltd.
-				B1st&2nd  floor,Unit E，NO.9 Building,Zhongguancun Software Park,Dongbeiwang West Road 8.Haidian District,Beijing
-				Bei Jing    100094
-				CN
-
-80-96-CA   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-8096CA     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-18-65-71   (hex)		Top Victory Electronics (Taiwan) Co., Ltd.
-186571     (base 16)		Top Victory Electronics (Taiwan) Co., Ltd.
-				14F,No.166,Jian 1st Rd
-				New Taipei City  Taiwan  23511
-				TW
-
-F8-3F-51   (hex)		Samsung Electronics Co.,Ltd
-F83F51     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-50-D7-53   (hex)		CONELCOM GmbH
-50D753     (base 16)		CONELCOM GmbH
-				Trientlgasse 18c
-				Innsbruck    6020
-				AT
-
-0C-C4-7A   (hex)		Super Micro Computer, Inc.
-0CC47A     (base 16)		Super Micro Computer, Inc.
-				980 Rock Avenue
-				San Jose  California  95131
-				US
-
-34-D2-70   (hex)		Amazon Technologies Inc.
-34D270     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-50-79-5B   (hex)		Interexport Telecomunicaciones S.A.
-50795B     (base 16)		Interexport Telecomunicaciones S.A.
-				Cerro Colorado 5240 piso 14
-				Santiago  Region Metropolitana  8320000
-				US
-
-00-16-D9   (hex)		NINGBO BIRD CO.,LTD.
-0016D9     (base 16)		NINGBO BIRD CO.,LTD.
-				No.999 Dacheng East Road
-				Fenghua  Zhejiang  315500
-				CN
-
-6C-A7-FA   (hex)		YOUNGBO ENGINEERING INC.
-6CA7FA     (base 16)		YOUNGBO ENGINEERING INC.
-				132, Haewian-gil, Dunpo-myeon
-				Asan-si  Chungcheongnam-do  336-873
-				KR
-
-8C-7E-B3   (hex)		Lytro, Inc.
-8C7EB3     (base 16)		Lytro, Inc.
-				1300  Terra Bella Avenue
-				Mountain View  California  94043
-				US
-
-B4-B3-84   (hex)		ShenZhen Figigantic Electronic Co.,Ltd
-B4B384     (base 16)		ShenZhen Figigantic Electronic Co.,Ltd
-				5F NO.1 Bld East,Guole Industrial Zone,Lirong Road,Longhua New
-				ShenZhen  GuangDong  518109
-				CN
-
-78-28-CA   (hex)		Sonos, Inc.
-7828CA     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-00-C0-03   (hex)		GLOBALNET COMMUNICATIONS
-00C003     (base 16)		GLOBALNET COMMUNICATIONS
-				912, PLACE TRANS CANADA
-				CANADA  J4G  2M1
-				CA
-
-00-23-4A   (hex)		Private
-00234A     (base 16)		Private
-
-2C-40-2B   (hex)		Smart iBlue Technology Limited
-2C402B     (base 16)		Smart iBlue Technology Limited
-				Unit 12, 10/F., Hong Man Industrial Centre,2 Hong Man Street, Chai Wan, Hong Kong
-				Hong Kong    000
-				HK
-
-5C-6B-4F   (hex)		Hello Inc.
-5C6B4F     (base 16)		Hello Inc.
-				438 Shotwell Street
-				San Francisco  CA  94110
-				US
-
-2C-99-24   (hex)		ARRIS Group, Inc.
-2C9924     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D0-58-A8   (hex)		zte corporation
-D058A8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D0-71-C4   (hex)		zte corporation
-D071C4     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A0-CC-2B   (hex)		Murata Manufacturing Co., Ltd.
-A0CC2B     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-50-01-D9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5001D9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-27-1C   (hex)		MERCURY CORPORATION
-00271C     (base 16)		MERCURY CORPORATION
-				90, Gajaeul-ro, Seo-gu
-				INCHEON    22830
-				KR
-
-E0-D9-E3   (hex)		Eltex Enterprise Ltd.
-E0D9E3     (base 16)		Eltex Enterprise Ltd.
-				Okruzhnaya st. 29v
-				Novosibirsk    630020
-				RU
-
-80-5E-C0   (hex)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
-805EC0     (base 16)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
-				309, 3th Floor, No.16, Yun Ding North Road, Huli District
-				xiamen  Fujian  361015
-				CN
-
-00-7B-18   (hex)		SENTRY Co., LTD.
-007B18     (base 16)		SENTRY Co., LTD.
-				792,Pyeongcheon-ro,Wonmi-gu
-				Bucheon-si, Gyeonggi-do    420-805
-				KR
-
-14-4D-67   (hex)		Zioncom Electronics (Shenzhen) Ltd.
-144D67     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
-				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-4C-E1-73   (hex)		IEEE Registration Authority
-4CE173     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-0C-D8-6C   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-0CD86C     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-04-97-90   (hex)		Lartech telecom LLC
-049790     (base 16)		Lartech telecom LLC
-				Bolshoi Sampsonievski 68, lit. N, office 237
-				Saint-Petersburg    194100
-				RU
-
-28-EE-D3   (hex)		Shenzhen Super D Technology Co., Ltd
-28EED3     (base 16)		Shenzhen Super D Technology Co., Ltd
-				Room 201 , Building A former Qianhai Shenzhen-Hong Kong cooperation zone Shenzhen Bay all the way to No. 1 ( settled in Shenzhen Qianhai Business Secretary , Ltd. )
-				Shenzhen  Guangdong  518000
-				CN
-
-24-C4-4A   (hex)		zte corporation
-24C44A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-98-54-1B   (hex)		Intel Corporate
-98541B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-1C-40-E8   (hex)		SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD
-1C40E8     (base 16)		SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD
-				9F, K1 Mall, Xinsha street, Shajing District, Baoan
-				Shenzhen  Guangdong  518000
-				CN
-
-00-23-D2   (hex)		Inhand Electronics, Inc.
-0023D2     (base 16)		Inhand Electronics, Inc.
-				30 West Gude Drive
-				Rockville  Maryland  20850
-				US
-
-DC-0B-34   (hex)		LG Electronics (Mobile Communications)
-DC0B34     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-40-4E-36   (hex)		HTC Corporation
-404E36     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-A8-E7-05   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-A8E705     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-98-40-BB   (hex)		Dell Inc.
-9840BB     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-60-D6   (hex)		NovAtel Inc.
-0060D6     (base 16)		NovAtel Inc.
-				SUITE 200, 6715-8TH STREET NE
-				CALGARY, ALBERTA T2E 8M4    0000
-				CA
-
-50-3A-A0   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-503AA0     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-95-8E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-B0958E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-C0-25-E9   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-C025E9     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-80-2A-A8   (hex)		Ubiquiti Networks Inc.
-802AA8     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Parkway
-				San Jose  CA  95131
-				US
-
-F0-9F-C2   (hex)		Ubiquiti Networks Inc.
-F09FC2     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Parkway
-				San Jose  CA  95131
-				US
-
-18-8B-15   (hex)		ShenZhen ZhongRuiJing Technology co.,LTD
-188B15     (base 16)		ShenZhen ZhongRuiJing Technology co.,LTD
-				4th Floor,Building 3,Meng Liyuan Industrial Park, Yousong Road, Longhua New District,Shenzhen,Guangdong Province,China
-				Shenzhen  Guangdong  518109
-				CN
-
-78-8A-20   (hex)		Ubiquiti Networks Inc.
-788A20     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-88-6B-0F   (hex)		Bluegiga Technologies OY
-886B0F     (base 16)		Bluegiga Technologies OY
-				P.O. BOX 120
-				FIN-02631  Espoo  
-				FI
-
-AC-84-C9   (hex)		Sagemcom Broadband SAS
-AC84C9     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-24-5C-BF   (hex)		NCSE
-245CBF     (base 16)		NCSE
-				Future of China Electronics Science & Technology
-				Beijing  Changping District  102200
-				CN
-
-2C-33-61   (hex)		Apple, Inc.
-2C3361     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-A4-D0   (hex)		Samsung Electronics Co.,Ltd
-60A4D0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-87-01   (hex)		Samsung Electronics Co.,Ltd
-008701     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-5C-99-60   (hex)		Samsung Electronics Co.,Ltd
-5C9960     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-62-AB   (hex)		Sumavision Technologies Co.,Ltd
-9C62AB     (base 16)		Sumavision Technologies Co.,Ltd
-				6F, Block A2, Power Creative Building,No.1 Shangdi East Road, Haidian District
-				Beijing    100085
-				CN
-
-C8-F9-46   (hex)		LOCOSYS Technology Inc.
-C8F946     (base 16)		LOCOSYS Technology Inc.
-				20F.-13, No. 79, Sec. 1, Xintai 5th Rd, Xizhi Dist.
-				New Taipei City  Taiwan  22101
-				TW
-
-48-7B-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-487B6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-3F-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-883FD3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-0D-65   (hex)		Shenzhen Vsun Communication Technology Co., Ltd.
-240D65     (base 16)		Shenzhen Vsun Communication Technology Co., Ltd.
-				3/F., 19 Block, Wisdomland Business Park, No.2 Nantou Gateway Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-00-0B-14   (hex)		ViewSonic Corporation
-000B14     (base 16)		ViewSonic Corporation
-				381 Brea Canyon Road
-				Walnut  California  91789
-				US
-
-C8-02-8F   (hex)		Nova Electronics (Shanghai) Co., Ltd.
-C8028F     (base 16)		Nova Electronics (Shanghai) Co., Ltd.
-				Room B706, 7th Floor, MET Plaza, No.268 Tongxie Road
-				Shanghai  Changning District  200335
-				CN
-
-A4-60-11   (hex)		Verifone
-A46011     (base 16)		Verifone
-				2099 Gateway Place
-				San Jose  CA  95110
-				US
-
-5C-A9-33   (hex)		Luma Home
-5CA933     (base 16)		Luma Home
-				75 5th St
-				Atlanta  GA  30308
-				US
-
-00-13-7E   (hex)		CorEdge Networks, Inc.
-00137E     (base 16)		CorEdge Networks, Inc.
-				7600 Boone Ave N
-				Brooklyn Park  MN  55428
-				US
-
-D8-14-D6   (hex)		SURE SYSTEM Co Ltd
-D814D6     (base 16)		SURE SYSTEM Co Ltd
-				Bakurou-machi 4-7-5
-				Cyuou-ku  Osaka  541-0059
-				JP
-
-6C-EF-C6   (hex)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
-6CEFC6     (base 16)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
-				Nangang Industrial Building, Tangtou Industrial Park, Shiyan, Baoan
-				Shenzhen  Guangdong  518108
-				CN
-
-10-1D-C0   (hex)		Samsung Electronics Co.,Ltd
-101DC0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-23-41   (hex)		Vanderbilt International (SWE) AB 
-002341     (base 16)		Vanderbilt International (SWE) AB 
-				Englundavaegen 7
-				Solna    SE-171 41 
-				SE
-
-40-7C-7D   (hex)		Nokia
-407C7D     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-24-59-0B   (hex)		White Sky Inc. Limited
-24590B     (base 16)		White Sky Inc. Limited
-				Floor 5, Building 1, No. 6, Lane 365, Xinhua Road
-				Shanghai    200052
-				CN
-
-68-EB-AE   (hex)		Samsung Electronics Co.,Ltd
-68EBAE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-44-4E-1A   (hex)		Samsung Electronics Co.,Ltd
-444E1A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-33-65   (hex)		TEM Mobile Limited
-143365     (base 16)		TEM Mobile Limited
-				RM1703, North Block, Cangsong Building, Tairan 6 road, Futian District, Shenzhen.
-				Shenzhen  Guangdong  518000
-				CN
-
-80-18-44   (hex)		Dell Inc.
-801844     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-78-47-1D   (hex)		Samsung Electronics Co.,Ltd
-78471D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A0-75-91   (hex)		Samsung Electronics Co.,Ltd
-A07591     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-DF-A4   (hex)		Samsung Electronics Co.,Ltd
-0CDFA4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-72-BF   (hex)		Murata Manufacturing Co., Ltd.
-B072BF     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-70-1D-C4   (hex)		NorthStar Battery Company, LLC
-701DC4     (base 16)		NorthStar Battery Company, LLC
-				4000 Continental Way
-				Springfield  MO  65803
-				US
-
-64-DA-A0   (hex)		Robert Bosch Smart Home GmbH
-64DAA0     (base 16)		Robert Bosch Smart Home GmbH
-				Schockenriedstraße 17
-				Stuttgart    70565
-				DE
-
-14-B8-37   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-14B837     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-5C-86-13   (hex)		Beijing Zhoenet Technology Co., Ltd
-5C8613     (base 16)		Beijing Zhoenet Technology Co., Ltd
-				Room B16,No. 8 WenHua East Road,Changping District
-				Beijing  Beijing  102208
-				CN
-
-CC-73-14   (hex)		HONG KONG WHEATEK TECHNOLOGY LIMITED
-CC7314     (base 16)		HONG KONG WHEATEK TECHNOLOGY LIMITED
-				Building 20，No.2277, ZuChongZhi Road, PuDong District, Shanghai
-				shanghai    201203
-				CN
-
-B8-EE-65   (hex)		Liteon Technology Corporation
-B8EE65     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-98-5B-B0   (hex)		KMDATA INC.
-985BB0     (base 16)		KMDATA INC.
-				505-2, Daeryung Techno Town 1cha, 18, Gasan Digital 2-ro, Geumcheon-gu
-				Seoul    153771
-				KR
-
-E0-06-E6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-E006E6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-BC-85-56   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-BC8556     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-34-23-87   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-342387     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-26-37   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-002637     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Metan dong
-				Suwon  Kyung-ki do  443-743
-				KR
-
-00-21-19   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-002119     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Metan 3 dong
-				Suwon  Kyung-gi do  443-743
-				KR
-
-F4-D9-FB   (hex)		Samsung Electronics Co.,Ltd
-F4D9FB     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu,
-				Suwon  Gyeonggi-do  443-742
-				KR
-
-3C-62-00   (hex)		Samsung Electronics Co.,Ltd
-3C6200     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu,
-				Suwon-City  Gyeonggi-do  443-742
-				KR
-
-C4-17-FE   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-C417FE     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-94-39-E5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-9439E5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-64-27-37   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-642737     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-A4-17-31   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-A41731     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-5C-A3-9D   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-5CA39D     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				Suwon    443-743
-				US
-
-90-18-7C   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-90187C     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				Suwon  KYUNGGI-DO  443-743
-				KR
-
-50-CC-F8   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-50CCF8     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				Metan Dong 314, Youngtong Gu
-				Suwon  Kyung-gi Do.  443-743
-				KR
-
-00-22-3B   (hex)		Communication Networks, LLC
-00223B     (base 16)		Communication Networks, LLC
-				3 Corporate Drive
-				Danbury  CT  06810
-				US
-
-C0-F8-DA   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-C0F8DA     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-11-FF   (hex)		Digitro Tecnologia Ltda
-0011FF     (base 16)		Digitro Tecnologia Ltda
-				Rua: Professora Sofia Quint de Souza, 167
-				Florianópolis  Santa Catarina  88085-040
-				BR
-
-00-1B-94   (hex)		T.E.M.A. S.p.A.
-001B94     (base 16)		T.E.M.A. S.p.A.
-				via della Scienza 21 A/C
-				Castelnuovo Rangone  Modena  41051
-				IT
-
-F0-F0-02   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-F0F002     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C0-CB-38   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-C0CB38     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-F0-7B-CB   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-F07BCB     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-50-B7-C3   (hex)		Samsung Electronics Co.,Ltd
-50B7C3     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3Dong, Yeongtong-Gu
-				Suwon  Geyonggi  443742
-				KR
-
-1C-5A-3E   (hex)		Samsung Electronics Co.,Ltd
-1C5A3E     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3dong, Yeongtong-Gu
-				Suwon    443742
-				US
-
-A0-21-95   (hex)		Samsung Electronics Co.,Ltd
-A02195     (base 16)		Samsung Electronics Co.,Ltd
-				#416, Maetan 3-dong
-				Suwon-si  Gyeonggi-do  443-742
-				KR
-
-B0-78-70   (hex)		Wi-NEXT, Inc.
-B07870     (base 16)		Wi-NEXT, Inc.
-				530 Lytton Avenue
-				Palo Alto  CA  94301
-				US
-
-E4-7C-F9   (hex)		Samsung Electronics Co.,Ltd
-E47CF9     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu
-				Suwon  Gyeonggi-do  443742
-				KR
-
-48-44-F7   (hex)		Samsung Electronics Co.,Ltd
-4844F7     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu
-				Suwon  Gyeonggi-do  443742
-				KR
-
-00-13-77   (hex)		Samsung Electronics Co.,Ltd
-001377     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3Dong, Yeongtong-Gu
-				Suwon  Geyonggi  443742
-				KR
-
-00-24-54   (hex)		Samsung Electronics Co.,Ltd
-002454     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3Dong, Yeongtong-Gu
-				Suwon  Geyonggi  443742
-				KR
-
-E8-11-32   (hex)		Samsung Electronics Co.,Ltd
-E81132     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3Dong, Yeongtong-Gu
-				Suwon  Geyonggi  443742
-				KR
-
-C0-65-99   (hex)		Samsung Electronics Co.,Ltd
-C06599     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-79-AD   (hex)		Samsung Electronics Co.,Ltd
-BC79AD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-4C-3C-16   (hex)		Samsung Electronics Co.,Ltd
-4C3C16     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-73-E0   (hex)		Samsung Electronics Co.,Ltd
-0073E0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-17-D5   (hex)		Samsung Electronics Co.,Ltd
-0017D5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1
-				Gumi-City  Gyeong-Buk  730-350
-				KR
-
-00-1E-7D   (hex)		Samsung Electronics Co.,Ltd
-001E7D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-1D-F6   (hex)		Samsung Electronics Co.,Ltd
-001DF6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-08-F1   (hex)		Samsung Electronics Co.,Ltd
-F008F1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-58-C3-8B   (hex)		Samsung Electronics Co.,Ltd
-58C38B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-E3-B2   (hex)		Samsung Electronics Co.,Ltd
-00E3B2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-19-66   (hex)		Samsung Electronics Co.,Ltd
-301966     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-E7-7E   (hex)		Samsung Electronics Co.,Ltd
-F0E77E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-35-0A   (hex)		Samsung Electronics Co.,Ltd
-94350A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-1D-25   (hex)		Samsung Electronics Co.,Ltd
-001D25     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-C1-F1   (hex)		SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd  
-E4C1F1     (base 16)		SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd  
-				10F, Block D, 5th Building, Shenzhen Software Industrial Base, Haitian 2nd Rd,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-24-0A-C4   (hex)		Espressif Inc.
-240AC4     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-34-31-11   (hex)		Samsung Electronics Co.,Ltd
-343111     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-FD-0E   (hex)		Samsung Electronics Co.,Ltd
-08FD0E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-04-1B-BA   (hex)		Samsung Electronics Co.,Ltd
-041BBA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-9B-39   (hex)		Samsung Electronics Co.,Ltd
-889B39     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-32-CB   (hex)		Samsung Electronics Co.,Ltd
-E432CB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-8C-CD   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-BC8CCD     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong    24180
-				US
-
-D0-22-BE   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-D022BE     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong    24180
-				US
-
-EC-9B-F3   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-EC9BF3     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-F4-09-D8   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-F409D8     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-10-D5-42   (hex)		Samsung Electronics Co.,Ltd
-10D542     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A0-82-1F   (hex)		Samsung Electronics Co.,Ltd
-A0821F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-6B-CA   (hex)		Samsung Electronics Co.,Ltd
-F06BCA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-AC-36-13   (hex)		Samsung Electronics Co.,Ltd
-AC3613     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-26-11   (hex)		Licera AB
-002611     (base 16)		Licera AB
-				Teknikringen 1C
-				Linköping    58330
-				SE
-
-00-50-94   (hex)		ARRIS Group, Inc.
-005094     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E0-B7-B1   (hex)		ARRIS Group, Inc.
-E0B7B1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D8-25-22   (hex)		ARRIS Group, Inc.
-D82522     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F0-03-8C   (hex)		AzureWave Technology Inc.
-F0038C     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-18-D2-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-18D276     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-52-18   (hex)		Wuxi Keboda Electron Co.Ltd
-005218     (base 16)		Wuxi Keboda Electron Co.Ltd
-				No.155 Chunhui Road, Xishan District, 
-				Wuxi  Jiangsu  214101
-				CN
-
-00-1E-81   (hex)		CNB Technology Inc.
-001E81     (base 16)		CNB Technology Inc.
-				#701 Star Valley, 60-11 Gasan-Dong,
-				Seoul    153777
-				KR
-
-7C-A9-7D   (hex)		Objenious
-7CA97D     (base 16)		Objenious
-				20 rue de Troyon
-				SEVRES    92310
-				FR
-
-A8-A6-48   (hex)		Qingdao Hisense Communications Co.,Ltd.
-A8A648     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Jiangxi Road
-				Qingdao  Shandong  266071
-				CN
-
-98-5D-AD   (hex)		Texas Instruments
-985DAD     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D4-36-39   (hex)		Texas Instruments
-D43639     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-BC-28-2C   (hex)		e-Smart Systems Pvt. Ltd
-BC282C     (base 16)		e-Smart Systems Pvt. Ltd
-				483 FIE, , Patparganj Industrial Area
-				Delhi  Delhi  110092
-				IN
-
-A4-0D-BC   (hex)		Xiamen Intretech Inc.
-A40DBC     (base 16)		Xiamen Intretech Inc.
-				 FL 7 NO 588 JIAHE RD TORCH CARDEN HIGH-TECH ZONE
-				Xiamen  FUJIAN  361006
-				CN
-
-84-EF-18   (hex)		Intel Corporate
-84EF18     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-84-C1-C1   (hex)		Juniper Networks
-84C1C1     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-A8-1B-6A   (hex)		Texas Instruments
-A81B6A     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-34-3D-C4   (hex)		BUFFALO.INC
-343DC4     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-B0-F8-93   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
-B0F893     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
-				9th Floor, No. 5 Building, 2145 Jinshajiang Rd., Putuo District
-				Shanghai    200333
-				CN
-
-C4-11-E0   (hex)		Bull Group Co., Ltd
-C411E0     (base 16)		Bull Group Co., Ltd
-				No.32 Sanhai Road,East Guanhaiwei Industrial Zone, Cixi City, Zhejiang, P.R.China
-				Cixi  Zhejiang  315314
-				CN
-
-28-C8-7A   (hex)		ARRIS Group, Inc.
-28C87A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-48-FD-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48FD8E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-06-23   (hex)		Ultra Electronics Sonar System Division
-7C0623     (base 16)		Ultra Electronics Sonar System Division
-				419 Bridport Road
-				Greenford  Middlesex  UB6 8UA
-				GB
-
-28-AC-67   (hex)		Mach Power, Rappresentanze Internazionali s.r.l.
-28AC67     (base 16)		Mach Power, Rappresentanze Internazionali s.r.l.
-				CUPA S.ANIELLO, 112
-				NAPOLI  Napoli  80146
-				IT
-
-14-82-5B   (hex)		Hefei Radio Communication Technology Co., Ltd 
-14825B     (base 16)		Hefei Radio Communication Technology Co., Ltd 
-				No.108, YinXing Road, High-tech Development Zone, Hefei, Anhui Province, China
-				Hefei  Anhui Province  230088
-				CN
-
-64-12-69   (hex)		ARRIS Group, Inc.
-641269     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-02-C9   (hex)		Mellanox Technologies, Inc.
-0002C9     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-08-00-51   (hex)		ExperData
-080051     (base 16)		ExperData
-				88, RUE BRILLAT SAVARIN
-				0000    0000
-				FR
-
-00-12-6C   (hex)		Visonic Technologies 1993 Ltd.
-00126C     (base 16)		Visonic Technologies 1993 Ltd.
-				24 Habarzel St.
-				Tel Aviv    69710
-				IL
-
-AC-61-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC6175     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-44-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-244427     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-80-C7   (hex)		XIRCOM
-0080C7     (base 16)		XIRCOM
-				26025 MUREAU ROAD
-				CALABASAS  CA  91302
-				US
-
-00-01-38   (hex)		XAVi Technologies Corp.
-000138     (base 16)		XAVi Technologies Corp.
-				9F, No. 129, Hsing Te Rd,
-				241 TAIWAN  241 TAIWAN  R.O.C.
-				TW
-
-00-16-6D   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-00166D     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-				8/F.high Tech Plaza,TianAn Cyberpark,Chegongmiao
-				Shenzhen  Guangdong  518040
-				CN
-
-3C-91-57   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-3C9157     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-				5F Building 2,No.56,Liuhe Road,Xihu District
-				Hangzhou  Zhejiang  310023
-				CN
-
-00-00-D8   (hex)		Novell, Inc.
-0000D8     (base 16)		Novell, Inc.
-				122 EAST 1700 SOUTH M/S:E-12-1
-				PROVO  UT  84601
-				US
-
-00-1F-46   (hex)		Nortel Networks
-001F46     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson    75082
-				US
-
-00-30-93   (hex)		Sonnet Technologies, Inc
-003093     (base 16)		Sonnet Technologies, Inc
-				8 Autry
-				Irvine,  CA  92618
-				US
-
-00-03-4B   (hex)		Nortel Networks
-00034B     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-25-61   (hex)		ProCurve Networking by HP
-002561     (base 16)		ProCurve Networking by HP
-				60 Alexandra Terrace
-				0000    118502
-				SG
-
-00-80-58   (hex)		PRINTER SYSTEMS CORP.
-008058     (base 16)		PRINTER SYSTEMS CORP.
-				207 PARRY PARKWAY
-				GAITHERSBURG  MD  20877
-				US
-
-00-15-7D   (hex)		POSDATA
-00157D     (base 16)		POSDATA
-				276-2,Seohyeon-dong,Bundang-gu,
-				Seongnam-City  Kyeonggi-Do  463-775
-				KR
-
-48-49-C7   (hex)		Samsung Electronics Co.,Ltd
-4849C7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-84-98-66   (hex)		Samsung Electronics Co.,Ltd
-849866     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-1C-9C   (hex)		Nortel Networks
-001C9C     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1B-25   (hex)		Nortel Networks
-001B25     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-19-E1   (hex)		Nortel Networks
-0019E1     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1D-42   (hex)		Nortel Networks
-001D42     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-14-0D   (hex)		Nortel Networks
-00140D     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-0E-40   (hex)		Nortel Networks
-000E40     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-FC-B0-C4   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
-FCB0C4     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
-				22F Info-Tech Building
-				Shanghai  Shanghai  200092
-				CN
-
-A8-9D-D2   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
-A89DD2     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
-				22F Info-Tech Building
-				Shanghai  Shanghai  200092
-				CN
-
-00-E0-0F   (hex)		Shanghai Baud Data Communication Co.,Ltd.
-00E00F     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
-				COMMUNICATION DEVELOPMENT CORP
-				SHANGHAI    0000
-				CN
-
-28-BE-03   (hex)		TCT mobile ltd
-28BE03     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-90-3A-E6   (hex)		PARROT SA
-903AE6     (base 16)		PARROT SA
-				174 Quai de Jemmapes
-				Paris    75010
-				FR
-
-A0-98-ED   (hex)		Shandong Intelligent Optical Communication Development Co., Ltd.
-A098ED     (base 16)		Shandong Intelligent Optical Communication Development Co., Ltd.
-				No.149 Yingcui Road,Torch Town,Advanced Technique Development Area
-				Jining  Shandong  272023
-				CN
-
-00-0E-F4   (hex)		Kasda Networks Inc
-000EF4     (base 16)		Kasda Networks Inc
-				B-31 Building, Tanglang Industry Zone
-				Shenzhen  Guangdong Province  518055
-				CN
-
-00-16-7A   (hex)		Skyworth Overseas Development Ltd.
-00167A     (base 16)		Skyworth Overseas Development Ltd.
-				Room 1505-06,Westlands Centre
-				0000    0000
-				HK
-
-A4-29-40   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-A42940     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-E4-A3-87   (hex)		Control Solutions LLC
-E4A387     (base 16)		Control Solutions LLC
-				2520 Diehl Rd
-				Aurora  IL  60502
-				US
-
-18-80-F5   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-1880F5     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-10-E8-78   (hex)		Nokia
-10E878     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-10-F9-6F   (hex)		LG Electronics (Mobile Communications)
-10F96F     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-C4-43-8F   (hex)		LG Electronics (Mobile Communications)
-C4438F     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-A0-91-69   (hex)		LG Electronics (Mobile Communications)
-A09169     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-28-6C-07   (hex)		XIAOMI Electronics,CO.,LTD
-286C07     (base 16)		XIAOMI Electronics,CO.,LTD
-				Xiaomi Building, No.68 Qinghe Middle Street
-				Haidian District  Beijing  100085
-				CN
-
-00-22-80   (hex)		A2B Electronics AB
-002280     (base 16)		A2B Electronics AB
-				Box 14
-				Motala    S-591 21
-				SE
-
-40-4A-D4   (hex)		Widex A/S
-404AD4     (base 16)		Widex A/S
-				Nymoellevej 6
-				Lynge  Alleroed  DK3540
-				DK
-
-98-93-CC   (hex)		LG ELECTRONICS INC
-9893CC     (base 16)		LG ELECTRONICS INC
-				19-1, Cheongho-ri, Jinwi-myeon
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-3C-CD-93   (hex)		LG ELECTRONICS INC
-3CCD93     (base 16)		LG ELECTRONICS INC
-				19-1, CHEONGHO-RI, JINWI-MYEON
-				PYEONGTAEK  GYEONGGI-DO  451-713
-				KR
-
-20-21-A5   (hex)		LG Electronics (Mobile Communications)
-2021A5     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-6C-D6-8A   (hex)		LG Electronics (Mobile Communications)
-6CD68A     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-CC-79-CF   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-CC79CF     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,Shenzhen,P.R.C
-				ShenZhen  Guangdong  518000
-				CN
-
-00-19-25   (hex)		Intelicis Corporation
-001925     (base 16)		Intelicis Corporation
-				4633 Old Ironsides Drive, Suite 150
-				Santa Clara  CA  95054
-				US
-
-94-76-B7   (hex)		Samsung Electronics Co.,Ltd
-9476B7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-2C-54-CF   (hex)		LG Electronics (Mobile Communications)
-2C54CF     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-48-59-29   (hex)		LG Electronics (Mobile Communications)
-485929     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-58-A2-B5   (hex)		LG Electronics (Mobile Communications)
-58A2B5     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-24-83   (hex)		LG Electronics (Mobile Communications)
-002483     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-1F-E3   (hex)		LG Electronics (Mobile Communications)
-001FE3     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-F0-42-1C   (hex)		Intel Corporate
-F0421C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-0F-62   (hex)		Alcatel Bell Space N.V.
-000F62     (base 16)		Alcatel Bell Space N.V.
-				Berkenrodelei 33
-				Hoboken  Antwerpen  B-2660
-				BE
-
-00-1C-D8   (hex)		BlueAnt Wireless
-001CD8     (base 16)		BlueAnt Wireless
-				245 St.Kilda Rd, St Kilda
-				Melbourne  Victoria  3182
-				AU
-
-00-19-AB   (hex)		Raycom CO ., LTD
-0019AB     (base 16)		Raycom CO ., LTD
-				A,3-4/FL, Building 1,27 Chuangxin Road,
-				Beijing    102200
-				CN
-
-4C-33-4E   (hex)		HIGHTECH
-4C334E     (base 16)		HIGHTECH
-				No202.gsif, 4 Gyeonggang-ro 2326 beon-gil
-				Gangneung-si  Gangwon-do  25570
-				KR
-
-7C-70-BC   (hex)		IEEE Registration Authority
-7C70BC     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E8-18-63   (hex)		IEEE Registration Authority
-E81863     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-2C-D1-41   (hex)		IEEE Registration Authority
-2CD141     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-3C-39-E7   (hex)		IEEE Registration Authority
-3C39E7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-BC-66-41   (hex)		IEEE Registration Authority
-BC6641     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-80-E4-DA   (hex)		IEEE Registration Authority
-80E4DA     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-88-5D-90   (hex)		IEEE Registration Authority
-885D90     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C8-8E-D1   (hex)		IEEE Registration Authority
-C88ED1     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B0-1F-81   (hex)		IEEE Registration Authority
-B01F81     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-54-9A-11   (hex)		IEEE Registration Authority
-549A11     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B8-D8-12   (hex)		IEEE Registration Authority
-B8D812     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-1C-21-D1   (hex)		IEEE Registration Authority
-1C21D1     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-28-36-38   (hex)		IEEE Registration Authority
-283638     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F4-85-C6   (hex)		FDT Technologies
-F485C6     (base 16)		FDT Technologies
-				14027 Memorial Drive #132
-				Houston  TX  77024
-				US
-
-D4-04-FF   (hex)		Juniper Networks
-D404FF     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C8-75-5B   (hex)		Quantify Technology Pty. Ltd.
-C8755B     (base 16)		Quantify Technology Pty. Ltd.
-				Suite 1, 4 Sarich Way
-				Bentley  Western Australia  6102
-				AU
-
-88-12-4E   (hex)		Qualcomm Inc.
-88124E     (base 16)		Qualcomm Inc.
-				1700 Technology Drive
-				San Jose  CA  95110
-				US
-
-00-14-28   (hex)		Vocollect Inc
-001428     (base 16)		Vocollect Inc
-				703 Rodi Road
-				Pittsburgh  PA  15235
-				US
-
-00-6B-9E   (hex)		Vizio, Inc
-006B9E     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-4C-66-41   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-4C6641     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-5C-A8-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CA86A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-1B-32   (hex)		QLogic Corporation
-001B32     (base 16)		QLogic Corporation
-				26650 Aliso Viejo Parkway
-				Aliso Viejo  CA  92656
-				US
-
-00-17-CA   (hex)		Qisda Corporation
-0017CA     (base 16)		Qisda Corporation
-				157 Shan Ying Road,
-				GueiShan  Taoyuan,  333
-				TW
-
-70-F3-95   (hex)		Universal Global Scientific Industrial Co., Ltd.
-70F395     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351,SEC.1, TAIPING RD.
-				TSAOTUEN,  NANTOU  54261
-				TW
-
-48-F7-C0   (hex)		Technicolor CH USA Inc.
-48F7C0     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-00-15-B7   (hex)		Toshiba
-0015B7     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome    1988710
-				JP
-
-E8-9D-87   (hex)		Toshiba
-E89D87     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-E0-95-79   (hex)		ORTHOsoft inc, d/b/a Zimmer CAS
-E09579     (base 16)		ORTHOsoft inc, d/b/a Zimmer CAS
-				75 Queen Street, Suite 3300
-				Montreal  Quebec  H3C 2N6
-				CA
-
-A0-AD-A1   (hex)		JMR Electronics, Inc
-A0ADA1     (base 16)		JMR Electronics, Inc
-				8968 Fullbright Avenue
-				Chatsworth  California  91311
-				US
-
-BC-C0-0F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-BCC00F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-9C-A5-C0   (hex)		vivo Mobile Communication Co., Ltd.
-9CA5C0     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong  523860
-				CN
-
-80-C6-AB   (hex)		Technicolor CH USA Inc.
-80C6AB     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-90-A4-DE   (hex)		Wistron Neweb Corporation
-90A4DE     (base 16)		Wistron Neweb Corporation
-				20 Park Avenue II, Hsinchu Science Park, 
-				Hsinchu     308
-				TW
-
-70-E2-84   (hex)		Wistron Infocomm (Zhongshan) Corporation
-70E284     (base 16)		Wistron Infocomm (Zhongshan) Corporation
-				No.38,East Keji Road,Zhongshan Torch Development Zone,Zhongshan City,Guangdong,China
-				Zhongshan  Guangdong  528437
-				CN
-
-A8-54-B2   (hex)		Wistron Neweb Corporation
-A854B2     (base 16)		Wistron Neweb Corporation
-				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
-				HsinChu  Taiwan  308
-				TW
-
-30-44-A1   (hex)		Shanghai Nanchao Information Technology
-3044A1     (base 16)		Shanghai Nanchao Information Technology
-				Floor 1th, building 13, No.368 Zhangjiang Road, Pudong New District, Shanghai
-				shanghai    200000
-				CN
-
-CC-03-FA   (hex)		Technicolor CH USA Inc.
-CC03FA     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-E0-AC-F1   (hex)		Cisco Systems, Inc
-E0ACF1     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-01-5B   (hex)		ITALTEL S.p.A/RF-UP-I
-00015B     (base 16)		ITALTEL S.p.A/RF-UP-I
-				20019 Cast.Settimo M.se (MI)
-				    
-				IT
-
-00-A0-A8   (hex)		RENEX CORPORATION
-00A0A8     (base 16)		RENEX CORPORATION
-				2750 KILLARNEY DRIVE
-				WOODBRIDGE  VA  22192
-				US
-
-00-C0-AB   (hex)		Telco Systems, Inc. 
-00C0AB     (base 16)		Telco Systems, Inc. 
-				15 Berkshire Road
-				Mansfield  MA  02048
-				US
-
-00-23-F8   (hex)		Zyxel Communications Corporation
-0023F8     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-00-19-CB   (hex)		Zyxel Communications Corporation
-0019CB     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-2C-09-4D   (hex)		Raptor Engineering, LLC
-2C094D     (base 16)		Raptor Engineering, LLC
-				2556 Anderson Dr.
-				Belvidere  IL  61008
-				US
-
-AC-37-43   (hex)		HTC Corporation
-AC3743     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-00-1D-7E   (hex)		Cisco-Linksys, LLC
-001D7E     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-E4-FB-8F   (hex)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
-E4FB8F     (base 16)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
-				No.999,Dacheng East Road,Fenghua City,Zhejiang Province,China.
-				Fenghua  Zhejiang  315500
-				CN
-
-10-BD-55   (hex)		Q-Lab Corporation
-10BD55     (base 16)		Q-Lab Corporation
-				800 Canterbury Rd
-				Westlake  OH  44145
-				US
-
-C4-49-BB   (hex)		MITSUMI ELECTRIC CO.,LTD.
-C449BB     (base 16)		MITSUMI ELECTRIC CO.,LTD.
-				2-11-2, Tsurumaki
-				Tama-shi  Tokyo  206-8567
-				JP
-
-FC-2D-5E   (hex)		zte corporation
-FC2D5E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B4-04-18   (hex)		Smartchip Integrated Inc.
-B40418     (base 16)		Smartchip Integrated Inc.
-				9B,Science Plaza,1355 JinJiHu Avenue,Suzhou Industrial Park
-				Suzhou  Jiangsu  215021
-				CN
-
-90-CF-7D   (hex)		Qingdao Hisense Communications Co.,Ltd.
-90CF7D     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-F4-0A-4A   (hex)		INDUSNET Communication Technology Co.,LTD
-F40A4A     (base 16)		INDUSNET Communication Technology Co.,LTD
-				3th floor A block,No11 Gaopeng st,Wuhou district
-				chengdu  sichuan  610041
-				CN
-
-F8-5A-00   (hex)		Sanford LP
-F85A00     (base 16)		Sanford LP
-				6655 Peachtree Dunwoody Road
-				Atlanta  GA  30228
-				US
-
-FC-55-DC   (hex)		Baltic Latvian Universal Electronics LLC
-FC55DC     (base 16)		Baltic Latvian Universal Electronics LLC
-				5706 Corsa Avenue Suite 102
-				Westlake Village  CA  91362
-				US
-
-94-18-82   (hex)		Hewlett Packard Enterprise
-941882     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-60-38-E0   (hex)		Belkin International Inc.
-6038E0     (base 16)		Belkin International Inc.
-				12045 E. Waterfront Drive
-				Playa Vista  CA  90094
-				US
-
-88-50-DD   (hex)		Infiniband Trade Association 
-8850DD     (base 16)		Infiniband Trade Association 
-				3855 SW 153rd Drive
-				Beaverton  OR  97003
-				US
-
-D0-B2-C4   (hex)		Technicolor CH USA Inc.
-D0B2C4     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-50-AB-3E   (hex)		Qibixx AG
-50AB3E     (base 16)		Qibixx AG
-				Bahnhofstrasse 2
-				Buchs  SG  9471
-				CH
-
-38-76-CA   (hex)		Shenzhen Smart Intelligent Technology Co.Ltd
-3876CA     (base 16)		Shenzhen Smart Intelligent Technology Co.Ltd
-				Gaoxin South 4th Road Hi-Tech Industry Park, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-04-27-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-042758     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-E3-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9CE374     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-8C-D2-E9   (hex)		YOKOTE SEIKO CO., LTD.
-8CD2E9     (base 16)		YOKOTE SEIKO CO., LTD.
-				10-18 Minami-Gosyono Yasumoto
-				Yokote-City  Akita  013-0811
-				JP
-
-B8-BB-AF   (hex)		Samsung Electronics Co.,Ltd
-B8BBAF     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-60-C5-AD   (hex)		Samsung Electronics Co.,Ltd
-60C5AD     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-44-2C-05   (hex)		AMPAK Technology, Inc.
-442C05     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-8C-89-7A   (hex)		AUGTEK
-8C897A     (base 16)		AUGTEK
-				Tuanjie Road No.100, Building C, Room 521 
-				Nanjing  Jiangsu  211899
-				CN
-
-F8-45-AD   (hex)		Konka Group Co., Ltd.
-F845AD     (base 16)		Konka Group Co., Ltd.
-				Shenzhen Konka R & D Building, 28th floor 15-24
-				Nanshan District  Guangdong  00000
-				CN
-
-00-0F-E2   (hex)		Hangzhou H3C Technologies Co., Limited
-000FE2     (base 16)		Hangzhou H3C Technologies Co., Limited
-				Oriental Electronic Bld., NO.2,Chuangye Road
-				Hai-Dian District  Beijing  100085
-				CN
-
-80-F6-2E   (hex)		Hangzhou H3C Technologies Co., Limited
-80F62E     (base 16)		Hangzhou H3C Technologies Co., Limited
-				310 Liuhe Road, Zhijiang Science Park
-				Hangzhou  Zhejiang,   310053
-				CN
-
-60-8D-17   (hex)		Sentrus Government Systems Division, Inc
-608D17     (base 16)		Sentrus Government Systems Division, Inc
-				141 Chesterfield Industrial Blvd
-				Chesterfield  MO  63005-1219
-				US
-
-EC-AD-B8   (hex)		Apple, Inc.
-ECADB8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-01-A7   (hex)		Apple, Inc.
-9801A7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-79-ED   (hex)		SHARP Corporation
-6879ED     (base 16)		SHARP Corporation
-				22-22,Nagaike-cho
-				Osaka city  Osaka prefecture  545-8522
-				JP
-
-00-23-82   (hex)		Lih Rong electronic Enterprise Co., Ltd.
-002382     (base 16)		Lih Rong electronic Enterprise Co., Ltd.
-				No. 2, Lane 387, Hsin Shu Rd.
-				Hsin Chuang City,  Taipei  242
-				TW
-
-24-F0-94   (hex)		Apple, Inc.
-24F094     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-6D-41   (hex)		Apple, Inc.
-086D41     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-D5-BD   (hex)		Intel Corporate
-B4D5BD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-98-AA-3C   (hex)		Will i-tech Co., Ltd.
-98AA3C     (base 16)		Will i-tech Co., Ltd.
-				34, Deokcheon-ro, Manan-gu, Anyang-si, Gyeonggi-do, Korea
-				Anyang    14088
-				KR
-
-BC-AD-28   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-BCAD28     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-F4-91-1E   (hex)		ZHUHAI EWPE INFORMATION TECHNOLOGY INC
-F4911E     (base 16)		ZHUHAI EWPE INFORMATION TECHNOLOGY INC
-				Room 409,NO.10,Technology 1st Road, Gangwan Av.,Tangjia Bay Town,Zhuhai,Guangdong,China
-				Zhuhai  Guangdong  519070
-				CN
-
-00-25-52   (hex)		VXi Corporation
-002552     (base 16)		VXi Corporation
-				271 Locust Street
-				Dover  NH  03820
-				US
-
-6C-E9-83   (hex)		Gastron Co., LTD.
-6CE983     (base 16)		Gastron Co., LTD.
-				#75-10, Palgok2-dong, Sangnok-gu, 
-				Ansan-city  Kyunggi-do  426-190
-				KR
-
-28-E3-1F   (hex)		Xiaomi Communications Co Ltd
-28E31F     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-98-90-96   (hex)		Dell Inc.
-989096     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-DC-37-52   (hex)		GE
-DC3752     (base 16)		GE
-				650 Markland Street
-				Markham  Ontario  L6C 0M1
-				CA
-
-DC-D9-16   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DCD916     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-02-2E   (hex)		TEAC Corp. R& D
-00022E     (base 16)		TEAC Corp. R& D
-				857 Koyata, Iruma
-				    
-				JP
-
-00-60-B0   (hex)		Hewlett Packard
-0060B0     (base 16)		Hewlett Packard
-				MS 42LE
-				CUPERTINO  CA  95014
-				US
-
-7C-73-8B   (hex)		Cocoon Alarm Ltd
-7C738B     (base 16)		Cocoon Alarm Ltd
-				46 The Calls
-				Leeds  West Yorkshire  LS2 7EY
-				GB
-
-F8-0F-84   (hex)		Natural Security SAS
-F80F84     (base 16)		Natural Security SAS
-				165 Avenue de Bretagne
-				Lille    59000
-				FR
-
-44-A4-2D   (hex)		TCT mobile ltd
-44A42D     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-70-F9-6D   (hex)		Hangzhou H3C Technologies Co., Limited
-70F96D     (base 16)		Hangzhou H3C Technologies Co., Limited
-				310 Liuhe Road, Zhijiang Science Park
-				Hangzhou  Zhejiang,   310053
-				CN
-
-BC-6A-44   (hex)		Commend International GmbH
-BC6A44     (base 16)		Commend International GmbH
-				Saalachstrasse 51
-				Salzburg  Salzburg  A-5020
-				AT
-
-F0-EE-58   (hex)		PACE Telematics GmbH
-F0EE58     (base 16)		PACE Telematics GmbH
-				Haid-und-Neu-Str. 18
-				Karlsruhe    76131
-				DE
-
-08-3F-BC   (hex)		zte corporation
-083FBC     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-C0-F0   (hex)		Kingston Technology Company, Inc.
-00C0F0     (base 16)		Kingston Technology Company, Inc.
-				17600 NEWHOPE STREET
-				FOUNTAIN VALLEY  CA  92708
-				US
-
-94-3B-B1   (hex)		Kaonmedia CO., LTD.
-943BB1     (base 16)		Kaonmedia CO., LTD.
-				KAONMEDIA Building 513-4
-				Sungnam-City  Kyonggi-Do  463-839, KOREA
-				KR
-
-00-18-D7   (hex)		JAVAD GNSS, Inc.
-0018D7     (base 16)		JAVAD GNSS, Inc.
-				1731 Technology Drive, Suite 680
-				San Jose  CA  95110
-				US
-
-00-1F-09   (hex)		Jastec
-001F09     (base 16)		Jastec
-				Jastec B/D 2F, 92-7 Kumgok-dong, 
-				Boondang-gu,    463-804
-				KR
-
-AC-62-0D   (hex)		Jabil Circuit(Wuxi) Co.,Ltd
-AC620D     (base 16)		Jabil Circuit(Wuxi) Co.,Ltd
-				Lot J9, J10 Export Processing Zone
-				Wuxi City  Jiangsu  214028
-				CN
-
-08-00-0D   (hex)		International Computers, Ltd
-08000D     (base 16)		International Computers, Ltd
-				WENLOCK WAY
-				na  UNITED  KINGDOM
-				GB
-
-1C-73-70   (hex)		Neotech
-1C7370     (base 16)		Neotech
-				104, 37 Yaeun-ro
-				Gumi-si  Gyoungsangbuk-do  730-711
-				KR
-
-30-E3-7A   (hex)		Intel Corporate
-30E37A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-00-C9   (hex)		Emulex Corporation
-0000C9     (base 16)		Emulex Corporation
-				3333 Susan Street
-				Costa Mesa  CA  92626
-				US
-
-00-40-AA   (hex)		Valmet Automation
-0040AA     (base 16)		Valmet Automation
-				Lentokentänkatu 11, P.O.Box 237
-				Tampere    FIN-3310
-				FI
-
-D0-B0-CD   (hex)		Moen
-D0B0CD     (base 16)		Moen
-				25300 Al Moen Dr
-				North Olmstead  OH  44070-8022
-				US
-
-F4-EF-9E   (hex)		SGSG SCIENCE & TECHNOLOGY CO. LTD
-F4EF9E     (base 16)		SGSG SCIENCE & TECHNOLOGY CO. LTD
-				3RD Fl, Bldg A3, No.1 software Park Rd
-				Zhuhai  Guangdong  519085
-				CN
-
-1C-74-0D   (hex)		Zyxel Communications Corporation
-1C740D     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-60-3E-CA   (hex)		Cambridge Medical Robotics Ltd
-603ECA     (base 16)		Cambridge Medical Robotics Ltd
-				Unit 2, Crome Lea Business Park
-				Madingley Road  Cambridgeshire  CB23 7PH
-				GB
-
-00-1F-1F   (hex)		Edimax Technology Co. Ltd.
-001F1F     (base 16)		Edimax Technology Co. Ltd.
-				No. 278, Xinhu 1st Road
-				Taipei City  Neihu Dist  248
-				TW
-
-00-02-0E   (hex)		ECI Telecom Ltd.
-00020E     (base 16)		ECI Telecom Ltd.
-				30 Hasivim St
-				Petach-Tikva 49133    49133
-				IL
-
-20-0A-5E   (hex)		Xiangshan Giant Eagle Technology Developing Co., Ltd.
-200A5E     (base 16)		Xiangshan Giant Eagle Technology Developing Co., Ltd.
-				Juexi Road no.9 Juexi street 
-				Ningbo  Zhejiang  315708
-				CN
-
-9C-74-1A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C741A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-A8-B6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E4A8B6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-4C-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-244C07     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-6F-F7   (hex)		Wistron Neweb Corporation
-746FF7     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-B8-AE-ED   (hex)		Elitegroup Computer Systems Co.,Ltd.
-B8AEED     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No. 239, Sec. 2, Ti Ding Blvd.,
-				Taipei    11493
-				TW
-
-00-0D-B0   (hex)		Olym-tech Co.,Ltd.
-000DB0     (base 16)		Olym-tech Co.,Ltd.
-				Room 401/402,No.1,Songling Road,Hi-tech
-				Shenzhen  Guangdong  518031
-				CN
-
-30-F6-B9   (hex)		Ecocentric Energy
-30F6B9     (base 16)		Ecocentric Energy
-				E3 The Innovation Centre, 9 De Laeter Way, Technology Park
-				Bentley  Western Australia  6102
-				AU
-
-84-7B-EB   (hex)		Dell Inc.
-847BEB     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-54-51-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-54511B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-53-6C   (hex)		SPnS Co.,Ltd
-68536C     (base 16)		SPnS Co.,Ltd
-				#315, Woolim Lions Valley 2nd, Gasan-dong, Geumcheon-gu
-				Seoul    08591
-				KR
-
-1C-EA-1B   (hex)		Nokia
-1CEA1B     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-D4-61-2E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D4612E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-E2-E5   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-B0E2E5     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-00-1F-A7   (hex)		Sony Interactive Entertainment Inc.
-001FA7     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-90-46-A2   (hex)		Tedipay UK Ltd
-9046A2     (base 16)		Tedipay UK Ltd
-				Level 39, One Canada Square
-				London    E14 5AB
-				GB
-
-64-79-A7   (hex)		Phison Electronics Corp.   
-6479A7     (base 16)		Phison Electronics Corp.   
-				No.1, Qun Yi Rd., Jhunan,
-				Miaoli    350
-				TW
-
-CC-B1-1A   (hex)		Samsung Electronics Co.,Ltd
-CCB11A     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-70-3C-03   (hex)		RadiAnt Co.,Ltd
-703C03     (base 16)		RadiAnt Co.,Ltd
-				102-610, 36, Bucheon-ro 198beon-gil, Wonmi-gu
-				Bucheon-si  Gyeonggi-do  14557
-				KR
-
-00-C1-64   (hex)		Cisco Systems, Inc
-00C164     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-DC-2D-CB   (hex)		Beijing Unis HengYue Technology Co., Ltd.
-DC2DCB     (base 16)		Beijing Unis HengYue Technology Co., Ltd.
-				Room 402, No. 2 Block, No. 1 yard, Zhongguancun east road, Haidian District
-				Beijing    100190
-				CN
-
-2C-96-62   (hex)		Invenit BV
-2C9662     (base 16)		Invenit BV
-				Lange Broekstraat 3
-				Raamsdonk  Noord-Brabant  4944 XH
-				NL
-
-CC-D3-E2   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
-CCD3E2     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
-				No.188 Nanhuan Road, TangQiao Town
-				Zhangjiagang   Jiangsu   215611
-				CN
-
-E4-FA-ED   (hex)		Samsung Electronics Co.,Ltd
-E4FAED     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-28-83-35   (hex)		Samsung Electronics Co.,Ltd
-288335     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-CF-96   (hex)		Samsung Electronics Co.,Ltd
-DCCF96     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-AC-44-F2   (hex)		YAMAHA CORPORATION
-AC44F2     (base 16)		YAMAHA CORPORATION
-				10-1 Nakazawa-cho, Naka-ku
-				Hamamatsu  Shizuoka  430-8650
-				JP
-
-1C-5F-2B   (hex)		D-Link International
-1C5F2B     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-1C-98-EC   (hex)		Hewlett Packard Enterprise
-1C98EC     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-70-66-1B   (hex)		Sonova AG
-70661B     (base 16)		Sonova AG
-				Laubisruetistrasse 28
-				Staefa    8712
-				CH
-
-B0-7F-B9   (hex)		NETGEAR
-B07FB9     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-04-7E-4A   (hex)		moobox CO., Ltd.
-047E4A     (base 16)		moobox CO., Ltd.
-				No 801, Yanchang Zhong Road
-				Shanghai  Shanghai  200072
-				CN
-
-00-80-E5   (hex)		NetApp
-0080E5     (base 16)		NetApp
-				1395 Crossman Ave
-				Sunnyvale,  CA  94089
-				US
-
-9C-5C-8E   (hex)		ASUSTek COMPUTER INC.
-9C5C8E     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-C8-87-22   (hex)		Lumenpulse
-C88722     (base 16)		Lumenpulse
-				1751 Richardson, suite 1505
-				Montreal  Quebec  H3K 1G6
-				CA
-
-84-68-3E   (hex)		Intel Corporate
-84683E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-E0-CD-FD   (hex)		Beijing E3Control Technology Co, LTD
-E0CDFD     (base 16)		Beijing E3Control Technology Co, LTD
-				1 Shangdi East Rd, Building A, Rm 205
-				Beijing  Beijing  100085
-				CN
-
-00-08-95   (hex)		DIRC Technologie GmbH & Co.KG
-000895     (base 16)		DIRC Technologie GmbH & Co.KG
-				Borsigstraße 13
-				Ratingen  NRW  40880
-				DE
-
-60-AC-C8   (hex)		KunTeng Inc.
-60ACC8     (base 16)		KunTeng Inc.
-				Room302, 3rd Floor, Building1 ,No.8 NongDa South street
-				HaiDian District  BeiJing  100084
-				CN
-
-CC-B3-AB   (hex)		shenzhen Biocare Bio-Medical Equipment Co.,Ltd.
-CCB3AB     (base 16)		shenzhen Biocare Bio-Medical Equipment Co.,Ltd.
-				#A735, 7/F, Block A, Shenzhen Mingyou Industrial Products Exhibition & Procurement  Center, Baoyuan Road, Xixiang Sub-district, Bao'an District, 518102 Shenzhen, P.R. China
-				Shenzhen    518000
-				CN
-
-E4-B3-18   (hex)		Intel Corporate
-E4B318     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-74-3E-2B   (hex)		Ruckus Wireless
-743E2B     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-E0-C7-67   (hex)		Apple, Inc.
-E0C767     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-ED-2C   (hex)		Apple, Inc.
-80ED2C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-34-04   (hex)		TCT mobile ltd
-F03404     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-80-D1-60   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-80D160     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-30-78-5C   (hex)		Partow Tamas Novin (Parman)
-30785C     (base 16)		Partow Tamas Novin (Parman)
-				UNIT 32 NO.31 26TH WEST AVE ,ALLAMEH TABATABAIE ST.SAADAT ABAD
-				Tehran  Tehran  1997968413
-				IR
-
-24-69-68   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-246968     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-8C-A2-FD   (hex)		Starry, Inc.
-8CA2FD     (base 16)		Starry, Inc.
-				PO Box 52226
-				Boston  MA  02205
-				US
-
-84-BA-3B   (hex)		CANON INC.
-84BA3B     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-00-05-85   (hex)		Juniper Networks
-000585     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-20-4E-71   (hex)		Juniper Networks
-204E71     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-19-4F   (hex)		Nokia Danmark A/S
-00194F     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-BD-3A   (hex)		Nokia Corporation
-00BD3A     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-80-50-1B   (hex)		Nokia Corporation
-80501B     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-A0-4E-04   (hex)		Nokia Corporation
-A04E04     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-00-12-62   (hex)		Nokia Danmark A/S
-001262     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-14-A7   (hex)		Nokia Danmark A/S
-0014A7     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-15-A0   (hex)		Nokia Danmark A/S
-0015A0     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-16-BC   (hex)		Nokia Danmark A/S
-0016BC     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-17-4B   (hex)		Nokia Danmark A/S
-00174B     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-26-69   (hex)		Nokia Danmark A/S
-002669     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-AC-61-EA   (hex)		Apple, Inc.
-AC61EA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-B5-4D   (hex)		Apple, Inc.
-38B54D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-5C-F2   (hex)		Apple, Inc.
-1C5CF2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-7E-33   (hex)		Nokia Danmark A/S
-A87E33     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-24-03   (hex)		Nokia Danmark A/S
-002403     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-24-04   (hex)		Nokia Danmark A/S
-002404     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-19-B7   (hex)		Nokia Danmark A/S
-0019B7     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-17-B0   (hex)		Nokia Danmark A/S
-0017B0     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-21-09   (hex)		Nokia Danmark A/S
-002109     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-21-08   (hex)		Nokia Danmark A/S
-002108     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1B-33   (hex)		Nokia Danmark A/S
-001B33     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-15-DE   (hex)		Nokia Danmark A/S
-0015DE     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-02-EE   (hex)		Nokia Danmark A/S
-0002EE     (base 16)		Nokia Danmark A/S
-				Frederikskaj, Copenhagen V
-				copenhagen    12345
-				DK
-
-D8-F7-10   (hex)		Libre Wireless Technologies Inc.
-D8F710     (base 16)		Libre Wireless Technologies Inc.
-				5405 Alton Parkway
-				Irvine, CA  CA  92604
-				US
-
-3C-59-1E   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-3C591E     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-				7/FTCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Road, Nanshan 
-				Shenzhen   Guangdong    518052
-				CN
-
-C4-36-55   (hex)		Shenzhen Fenglian Technology Co., Ltd.
-C43655     (base 16)		Shenzhen Fenglian Technology Co., Ltd.
-				Room 302, 3F, Block 2, Oriental Cyberport, No. 2, Xinxi Road
-				Shenzhen   Guangdong  518057
-				CN
-
-00-30-DA   (hex)		Comtrend Corporation
-0030DA     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-64-68-0C   (hex)		Comtrend Corporation
-64680C     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-38-72-C0   (hex)		Comtrend Corporation
-3872C0     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-A8-06-00   (hex)		Samsung Electronics Co.,Ltd
-A80600     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-26-82   (hex)		Gemtek Technology Co., Ltd.
-002682     (base 16)		Gemtek Technology Co., Ltd.
-				No.1 Jen Ai Road, Hsinchu Industrial Park,
-				Hukou,  Hsinchu  303
-				TW
-
-00-09-E1   (hex)		Gemtek Technology Co., Ltd.
-0009E1     (base 16)		Gemtek Technology Co., Ltd.
-				No.1 Jen Ai Road
-				Hukou  Hsinchu  303
-				TW
-
-14-C1-26   (hex)		Nokia Corporation
-14C126     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-60-01-94   (hex)		Espressif Inc.
-600194     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-F0-5A-09   (hex)		Samsung Electronics Co.,Ltd
-F05A09     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-32-75   (hex)		Samsung Electronics Co.,Ltd
-503275     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-FC-88   (hex)		Samsung Electronics Co.,Ltd
-08FC88     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-02-70-B3   (hex)		DATA RECALL LTD.
-0270B3     (base 16)		DATA RECALL LTD.
-				SONDES PLACE
-				12345  UNITED  KINGDOM
-				GB
-
-00-01-36   (hex)		CyberTAN Technology Inc.
-000136     (base 16)		CyberTAN Technology Inc.
-				99, Park Avenue III
-				Hsinchu    12345
-				TW
-
-D0-4D-2C   (hex)		Roku, Inc.
-D04D2C     (base 16)		Roku, Inc.
-				12980 Saratoga Ave
-				Saratoga  CA  95070
-				US
-
-B0-A7-37   (hex)		Roku, Inc.
-B0A737     (base 16)		Roku, Inc.
-				12980 Saratoga Ave
-				Saratoga  CA  95070
-				US
-
-14-0C-76   (hex)		FREEBOX SAS
-140C76     (base 16)		FREEBOX SAS
-				16 rue de la Ville l'Eveque
-				PARIS    75008
-				FR
-
-00-1B-E9   (hex)		Broadcom
-001BE9     (base 16)		Broadcom
-				16215 Alton Parkway
-				Irvine  CA  92618
-				US
-
-00-19-C7   (hex)		Cambridge Industries(Group) Co.,Ltd.
-0019C7     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				Room 309,333 Hong Qiao Road
-				Shanghai    200030
-				CN
-
-70-D9-31   (hex)		Cambridge Industries(Group) Co.,Ltd.
-70D931     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				22Floor,Qilai Tower;889Yishan Road
-				shanghai    200233
-				CN
-
-02-9D-8E   (hex)		CARDIAC RECORDERS, INC.
-029D8E     (base 16)		CARDIAC RECORDERS, INC.
-				34 SCARBORO RD
-				UK  UNITED  KINGDOM
-				GB
-
-00-40-2A   (hex)		Canoga Perkins Corporation
-00402A     (base 16)		Canoga Perkins Corporation
-				21012 LASSEN STREET
-				CHATSWORTH  CA  91311-4241
-				US
-
-A4-C7-DE   (hex)		Cambridge Industries(Group) Co.,Ltd.
-A4C7DE     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				22 Floor,Qilai Tower;889 Yishan Road
-				Shanghai    200233
-				CN
-
-D8-B8-F6   (hex)		Nantworks
-D8B8F6     (base 16)		Nantworks
-				12230 El Camino Real, Suite 400
-				San Diego  CA  92130
-				US
-
-00-80-77   (hex)		Brother industries, LTD.
-008077     (base 16)		Brother industries, LTD.
-				RESEARCH LABORATORY
-				piscatawa    12345
-				JP
-
-24-F5-AA   (hex)		Samsung Electronics Co.,Ltd
-24F5AA     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-98-83-89   (hex)		Samsung Electronics Co.,Ltd
-988389     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-84-A4-66   (hex)		Samsung Electronics Co.,Ltd
-84A466     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-C4-57-6E   (hex)		Samsung Electronics Co.,Ltd
-C4576E     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-50-85-69   (hex)		Samsung Electronics Co.,Ltd
-508569     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-00-60-BB   (hex)		Cabletron Systems, Inc.
-0060BB     (base 16)		Cabletron Systems, Inc.
-				35 INDUSTRIAL WAY
-				ROCHESTER  NH  03866-5005
-				US
-
-F8-D0-BD   (hex)		Samsung Electronics Co.,Ltd
-F8D0BD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-78-59-5E   (hex)		Samsung Electronics Co.,Ltd
-78595E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-14-20   (hex)		Samsung Electronics Co.,Ltd
-0C1420     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-B1-0A   (hex)		Samsung Electronics Co.,Ltd
-94B10A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-3C-BB-FD   (hex)		Samsung Electronics Co.,Ltd
-3CBBFD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-84-31   (hex)		Samsung Electronics Co.,Ltd
-A48431     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A0-B4-A5   (hex)		Samsung Electronics Co.,Ltd
-A0B4A5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-F8-EF   (hex)		Samsung Electronics Co.,Ltd
-E4F8EF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-44-6D   (hex)		Allwinner Technology Co., Ltd
-DC446D     (base 16)		Allwinner Technology Co., Ltd
-				No.9 Technology Road 2, High-Tech Zone
-				Zhuhai  Guangdong  519085
-				CN
-
-74-5A-AA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-745AAA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-FE-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04FE8D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-13-33   (hex)		BaudTec Corporation
-001333     (base 16)		BaudTec Corporation
-				12F, NO.181, Sec.  1. Tatung Rd.,
-				Hsichih  Taipei Hsien  221
-				TW
-
-58-67-1A   (hex)		Barnes&Noble
-58671A     (base 16)		Barnes&Noble
-				400 HAMILTON AVENUE
-				PALO ALTO  CA  94301
-				US
-
-00-26-75   (hex)		Aztech Electronics Pte Ltd
-002675     (base 16)		Aztech Electronics Pte Ltd
-				31 Ubi Road 1
-				Singapore    408694
-				SG
-
-00-24-FE   (hex)		AVM GmbH
-0024FE     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin    10559
-				DE
-
-C0-25-06   (hex)		AVM GmbH
-C02506     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin    10559
-				DE
-
-40-5D-82   (hex)		NETGEAR
-405D82     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-DC-EF-09   (hex)		NETGEAR
-DCEF09     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-DC-64-B8   (hex)		Shenzhen JingHanDa Electronics Co.Ltd
-DC64B8     (base 16)		Shenzhen JingHanDa Electronics Co.Ltd
-				5th Floor,No 4 ,Road 1,ShangXue Technology industrial Park,LongGang district,ShenZhen,GuangDong,China
-				ShenZhen  GuangDong  518129
-				CN
-
-00-0D-92   (hex)		ARIMA Communications Corp.
-000D92     (base 16)		ARIMA Communications Corp.
-				16, lane 658, Ying-Tao Road
-				Yingko  Taipei County  23943
-				TW
-
-00-21-63   (hex)		ASKEY COMPUTER CORP
-002163     (base 16)		ASKEY COMPUTER CORP
-				10F,NO.119.CHIENKANG RD,CHUNG-HO,
-				taipei  TAIPEI  235
-				TW
-
-A8-D3-F7   (hex)		Arcadyan Technology Corporation
-A8D3F7     (base 16)		Arcadyan Technology Corporation
-				No.8, Sec.2, Guangfu Rd.,
-				Hsinchu City  Hsinchu  30071
-				TW
-
-4C-60-DE   (hex)		NETGEAR
-4C60DE     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-C4-3D-C7   (hex)		NETGEAR
-C43DC7     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-48-9D-24   (hex)		BlackBerry RTS
-489D24     (base 16)		BlackBerry RTS
-				451 Phillip Street
-				Waterloo  ON  N2L 3X2
-				CA
-
-08-BD-43   (hex)		NETGEAR
-08BD43     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-44-EE-02   (hex)		MTI Ltd.
-44EE02     (base 16)		MTI Ltd.
-				Nishi-shinjuku Tokyo Opera City Tower 3-20-2 35F
-				Shinjuku-ku  Tokyo  163-1435
-				JP
-
-58-56-E8   (hex)		ARRIS Group, Inc.
-5856E8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-0B-BE   (hex)		ARRIS Group, Inc.
-F80BBE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-DC-45-17   (hex)		ARRIS Group, Inc.
-DC4517     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-C8-AA-21   (hex)		ARRIS Group, Inc.
-C8AA21     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-17-EE   (hex)		ARRIS Group, Inc.
-0017EE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-11-1A   (hex)		ARRIS Group, Inc.
-00111A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-0F-9F   (hex)		ARRIS Group, Inc.
-000F9F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-04-BD   (hex)		ARRIS Group, Inc.
-0004BD     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-26-42   (hex)		ARRIS Group, Inc.
-002642     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-24-A1   (hex)		ARRIS Group, Inc.
-0024A1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-22-10   (hex)		ARRIS Group, Inc.
-002210     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-22-B4   (hex)		ARRIS Group, Inc.
-0022B4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-14-9A   (hex)		ARRIS Group, Inc.
-00149A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-14-E8   (hex)		ARRIS Group, Inc.
-0014E8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-19-C0   (hex)		ARRIS Group, Inc.
-0019C0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-E0-6F   (hex)		ARRIS Group, Inc.
-00E06F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-80-96-B1   (hex)		ARRIS Group, Inc.
-8096B1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-70-7E-43   (hex)		ARRIS Group, Inc.
-707E43     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-2F   (hex)		ARRIS Group, Inc.
-00152F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1F-C4   (hex)		ARRIS Group, Inc.
-001FC4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1C-FB   (hex)		ARRIS Group, Inc.
-001CFB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-95   (hex)		ARRIS Group, Inc.
-002395     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-AF   (hex)		ARRIS Group, Inc.
-0023AF     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-7B-7A   (hex)		ARRIS Group, Inc.
-F87B7A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-00-F4   (hex)		Allied Telesis, Inc.
-0000F4     (base 16)		Allied Telesis, Inc.
-				CORPORATION
-				SUNNYVALE  CA  94086
-				US
-
-00-15-77   (hex)		Allied Telesis, Inc.
-001577     (base 16)		Allied Telesis, Inc.
-				3200 North First Street
-				San Jose    95134
-				US
-
-00-1A-EB   (hex)		Allied Telesis R&D Center K.K.
-001AEB     (base 16)		Allied Telesis R&D Center K.K.
-				No.2 TOC Bldg.
-				Shinagawa-ku  Tokyo  141-0031
-				JP
-
-70-3C-39   (hex)		SEAWING Kft
-703C39     (base 16)		SEAWING Kft
-				Palánkai utca 5.
-				Székesfehérvár  Fejér  8000
-				HU
-
-90-97-D5   (hex)		Espressif Inc.
-9097D5     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-AC-D0-74   (hex)		Espressif Inc.
-ACD074     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-38-E3-C5   (hex)		Taicang T&W Electronics
-38E3C5     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-00-15-CE   (hex)		ARRIS Group, Inc.
-0015CE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-A2   (hex)		ARRIS Group, Inc.
-0015A2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-A3   (hex)		ARRIS Group, Inc.
-0015A3     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-A4   (hex)		ARRIS Group, Inc.
-0015A4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-00-CA   (hex)		ARRIS Group, Inc.
-0000CA     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-70-9E-29   (hex)		Sony Interactive Entertainment Inc.
-709E29     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-A4-DB-30   (hex)		Liteon Technology Corporation
-A4DB30     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-40-F0-2F   (hex)		Liteon Technology Corporation
-40F02F     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-74-C2-46   (hex)		Amazon Technologies Inc.
-74C246     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-0F-A3   (hex)		Alpha Networks Inc.
-000FA3     (base 16)		Alpha Networks Inc.
-				No.8 Li-shing 7th Rd.,Science-based Industrial Park
-				Hsinchu    300
-				TW
-
-00-1D-6A   (hex)		Alpha Networks Inc.
-001D6A     (base 16)		Alpha Networks Inc.
-				No.8 Li-shing Seventh Road,Science-based
-				Hsinchu    300
-				US
-
-00-1A-80   (hex)		Sony Corporation
-001A80     (base 16)		Sony Corporation
-				Gotenyama Tec, 5-1-2 Kitashinagawa
-				Tokyo    141-0001
-				JP
-
-88-41-FC   (hex)		AirTies Wireless Networks
-8841FC     (base 16)		AirTies Wireless Networks
-				Gulbahar Mahallesi, Avni Diligil Sokak
-				ISTANBUL  ISTANBUL  34394
-				TR
-
-00-30-D3   (hex)		Agilent Technologies, Inc.
-0030D3     (base 16)		Agilent Technologies, Inc.
-				1501 Page Mill Road
-				Palo Alto  CA  94304-1126
-				US
-
-00-A0-2F   (hex)		ADB Broadband Italia
-00A02F     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				20126 MILAN    12345
-				IT
-
-98-74-3D   (hex)		Shenzhen Jun Kai Hengye Technology Co. Ltd
-98743D     (base 16)		Shenzhen Jun Kai Hengye Technology Co. Ltd
-				5th floor,Yahua Building,#1Hongwan Gonghegongye RD,Xixiang Gushu Community,Baoan District,Shenzhen
-				Shenzhen  Guangdong  518000
-				CN
-
-A0-F4-59   (hex)		FN-LINK TECHNOLOGY LIMITED
-A0F459     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				5th Floor, A Building, Haoye Logistics Park, Shugang Channel, Bao'an District,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-58-63-56   (hex)		FN-LINK TECHNOLOGY LIMITED
-586356     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				5th Floor, A Building, Haoye Logistics Park, Shugang Channel, Bao'an District,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-8C-B8-64   (hex)		AcSiP Technology Corp.
-8CB864     (base 16)		AcSiP Technology Corp.
-				3F., No.22, Dalin Rd., 
-				Taoyuan City    330
-				TW
-
-5C-E2-F4   (hex)		AcSiP Technology Corp.
-5CE2F4     (base 16)		AcSiP Technology Corp.
-				3F., No.22, Dalin Rd.
-				Taoyuan  Taoyuan County  33067
-				TW
-
-B8-61-6F   (hex)		Accton Technology Corp
-B8616F     (base 16)		Accton Technology Corp
-				No.1 Creation Rd III, Science-based Industrial Park
-				Hsinchu    30077
-				TW
-
-00-12-CF   (hex)		Accton Technology Corp
-0012CF     (base 16)		Accton Technology Corp
-				No. 1 Creation Rd. III, Science-based Industrial Park
-				Hsinchu    300
-				TW
-
-00-30-F1   (hex)		Accton Technology Corp
-0030F1     (base 16)		Accton Technology Corp
-				No. 1, Creation Rd. IV
-				Hsinchu    12345
-				TW
-
-70-5A-0F   (hex)		Hewlett Packard
-705A0F     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-44-95-FA   (hex)		Qingdao Santong Digital Technology Co.Ltd
-4495FA     (base 16)		Qingdao Santong Digital Technology Co.Ltd
-				Room701, No.1£¬Fu Ying Building,No.443East Changjiang Road,Qingdao Economic and Technological Development District
-				Qingdao  Shandong  266555
-				CN
-
-00-25-D3   (hex)		AzureWave Technology Inc.
-0025D3     (base 16)		AzureWave Technology Inc.
-				8F ., No.94, Baozhong Rd.
-				Xindian City    231
-				TW
-
-1C-4B-D6   (hex)		AzureWave Technology Inc.
-1C4BD6     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baoshong Rd.
-				Xindian City, Taipei County    231
-				TW
-
-08-A9-5A   (hex)		AzureWave Technology Inc.
-08A95A     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baoshong Rd.
-				Xindian City, Taipei County    231
-				TW
-
-94-DB-C9   (hex)		AzureWave Technology Inc.
-94DBC9     (base 16)		AzureWave Technology Inc.
-				8F No94 Baozhong Rd
-				XindianDistrict, New Taipei City    231
-				TW
-
-24-0A-64   (hex)		AzureWave Technology Inc.
-240A64     (base 16)		AzureWave Technology Inc.
-				9F.,No.92,Baozhong Rd
-				Xindian  NewTaipeiCity  231
-				TW
-
-40-E2-30   (hex)		AzureWave Technology Inc.
-40E230     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.,
-				New Taipei City  Taiwan  231
-				TW
-
-80-D2-1D   (hex)		AzureWave Technology Inc.
-80D21D     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-D4-D1-84   (hex)		ADB Broadband Italia
-D4D184     (base 16)		ADB Broadband Italia
-				via Sarca 222
-				Milano    20126
-				IT
-
-A0-4F-D4   (hex)		ADB Broadband Italia
-A04FD4     (base 16)		ADB Broadband Italia
-				VIALE SARCA 336
-				MILANO    20126
-				IT
-
-D0-0E-D9   (hex)		Taicang T&W Electronics
-D00ED9     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD, Lu Du
-				Taicang  Jiangsu  215412
-				CN
-
-54-14-73   (hex)		 Wingtech Group (HongKong）Limited
-541473     (base 16)		 Wingtech Group (HongKong）Limited
-				FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
-				HongKong    999077
-				HK
-
-80-86-F2   (hex)		Intel Corporate
-8086F2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-E0-94-67   (hex)		Intel Corporate
-E09467     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-08-D4-0C   (hex)		Intel Corporate
-08D40C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-6C-88-14   (hex)		Intel Corporate
-6C8814     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-30-3A-64   (hex)		Intel Corporate
-303A64     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-AC-FD-CE   (hex)		Intel Corporate
-ACFDCE     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-7C-CC-B8   (hex)		Intel Corporate
-7CCCB8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-F4-06-69   (hex)		Intel Corporate
-F40669     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1D-E1   (hex)		Intel Corporate
-001DE1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-90-E2-BA   (hex)		Intel Corporate
-90E2BA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-26-C7   (hex)		Intel Corporate
-0026C7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-26-C6   (hex)		Intel Corporate
-0026C6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-0C-CC-26   (hex)		Airenetworks
-0CCC26     (base 16)		Airenetworks
-				Ramon y Cajal 11
-				Elche  Alicante  03203
-				ES
-
-E0-9D-31   (hex)		Intel Corporate
-E09D31     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-88-53-2E   (hex)		Intel Corporate
-88532E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-74-C9-9A   (hex)		Ericsson AB
-74C99A     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-5C-C2-13   (hex)		Fr. Sauter AG
-5CC213     (base 16)		Fr. Sauter AG
-				Im Surinam 55
-				Basel  BS  CH4016
-				CH
-
-28-10-1B   (hex)		MagnaCom
-28101B     (base 16)		MagnaCom
-				9 Bareket Street
-				Petah Tikva    4951777
-				IL
-
-00-16-76   (hex)		Intel Corporate
-001676     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-16-EA   (hex)		Intel Corporate
-0016EA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1B-77   (hex)		Intel Corporate
-001B77     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1C-C0   (hex)		Intel Corporate
-001CC0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-10-4A-7D   (hex)		Intel Corporate
-104A7D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1A-A0   (hex)		Dell Inc.
-001AA0     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-00-19-B9   (hex)		Dell Inc.
-0019B9     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-B0-D0   (hex)		Dell Inc.
-00B0D0     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-C0-4F   (hex)		Dell Inc.
-00C04F     (base 16)		Dell Inc.
-				1807 WEST BRAKER LANE-BLDG.
-				AUSTIN  TX  78758-3610
-				US
-
-B0-79-94   (hex)		Motorola Mobility LLC, a Lenovo Company
-B07994     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				600 North US Hwy 45
-				Libertyville  IL  60048
-				US
-
-A4-70-D6   (hex)		Motorola Mobility LLC, a Lenovo Company
-A470D6     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 Merchandise Mart Plaza, Suite 1800
-				Chicago  IL  60654
-				US
-
-74-86-7A   (hex)		Dell Inc.
-74867A     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-18-03-73   (hex)		Dell Inc.
-180373     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-14-FE-B5   (hex)		Dell Inc.
-14FEB5     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-78-2B-CB   (hex)		Dell Inc.
-782BCB     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-1F-3B   (hex)		Intel Corporate
-001F3B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-21-5D   (hex)		Intel Corporate
-00215D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-21-6A   (hex)		Intel Corporate
-00216A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1C-23   (hex)		Dell Inc.
-001C23     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-A4-BA-DB   (hex)		Dell Inc.
-A4BADB     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock    78682
-				US
-
-00-25-64   (hex)		Dell Inc.
-002564     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock    78682
-				US
-
-A4-1F-72   (hex)		Dell Inc.
-A41F72     (base 16)		Dell Inc.
-				One Dell way
-				Round Rock     78682
-				US
-
-C4-66-99   (hex)		vivo Mobile Communication Co., Ltd.
-C46699     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-C8-F2-30   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-C8F230     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD
-				DONGGUAN  GUANGDONG  523860
-				CN
-
-8C-0E-E3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-8C0EE3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN
-				DONGGUAN  GUANGDONG  523860
-				CN
-
-C8-CD-72   (hex)		Sagemcom Broadband SAS
-C8CD72     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-F8-2C-18   (hex)		2Wire Inc
-F82C18     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-18-01-7D   (hex)		Harbin Arteor technology co., LTD
-18017D     (base 16)		Harbin Arteor technology co., LTD
-				Yushan Road 49-2
-				Harbin  Heilongjiang  150090
-				CN
-
-00-15-56   (hex)		Sagemcom Broadband SAS
-001556     (base 16)		Sagemcom Broadband SAS
-				Le Ponnant de Paris
-				CEDEX  Paris  75512
-				FR
-
-C0-D0-44   (hex)		Sagemcom Broadband SAS
-C0D044     (base 16)		Sagemcom Broadband SAS
-				250, Route de l'Empereur
-				RUEIL-MALMAISON    92500
-				FR
-
-A0-1B-29   (hex)		Sagemcom Broadband SAS
-A01B29     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-74-E1-4A   (hex)		IEEE Registration Authority
-74E14A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-0C-EF-AF   (hex)		IEEE Registration Authority
-0CEFAF     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F8-02-78   (hex)		IEEE Registration Authority
-F80278     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A0-BB-3E   (hex)		IEEE Registration Authority
-A0BB3E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-88-4A-EA   (hex)		Texas Instruments
-884AEA     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-00-22-A4   (hex)		2Wire Inc
-0022A4     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-98-2C-BE   (hex)		2Wire Inc
-982CBE     (base 16)		2Wire Inc
-				1764 Automation Pkwy
-				San Jose  CA  95131
-				US
-
-64-0F-28   (hex)		2Wire Inc
-640F28     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose   CA  95131
-				US
-
-00-12-3F   (hex)		Dell Inc.
-00123F     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-0B-DB   (hex)		Dell Inc.
-000BDB     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-20-47-47   (hex)		Dell Inc.
-204747     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-14-95   (hex)		2Wire Inc
-001495     (base 16)		2Wire Inc
-				1704 Automation Parkway
-				San Jose  CA  95131
-				US
-
-34-8A-AE   (hex)		Sagemcom Broadband SAS
-348AAE     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-7C-03-D8   (hex)		Sagemcom Broadband SAS
-7C03D8     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-C0-AC-54   (hex)		Sagemcom Broadband SAS
-C0AC54     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison  HAUTS DE SEINE  92848
-				FR
-
-2C-39-96   (hex)		Sagemcom Broadband SAS
-2C3996     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison  HAUTS DE SEINE  92848
-				FR
-
-F0-82-61   (hex)		Sagemcom Broadband SAS
-F08261     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison  HAUTS DE SEINE  92848
-				FR
-
-00-30-C5   (hex)		CADENCE DESIGN SYSTEMS, INC.
-0030C5     (base 16)		CADENCE DESIGN SYSTEMS, INC.
-				555 RIVER OAKS PARKWAY
-				SAN JOSE  CA  95134
-				US
-
-D0-8C-B5   (hex)		Texas Instruments
-D08CB5     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-18-2F   (hex)		Texas Instruments
-00182F     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-EA   (hex)		Texas Instruments
-0017EA     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-21-BA   (hex)		Texas Instruments
-0021BA     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-BC-0D-A5   (hex)		Texas Instruments
-BC0DA5     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-CC-8C-E3   (hex)		Texas Instruments
-CC8CE3     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-E0-D7-BA   (hex)		Texas Instruments
-E0D7BA     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-1C-E2-CC   (hex)		Texas Instruments
-1CE2CC     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-98-59-45   (hex)		Texas Instruments
-985945     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-94-44-52   (hex)		Belkin International Inc.
-944452     (base 16)		Belkin International Inc.
-				12045 E. Waterfront Drive
-				Playa Vista  CA  90094
-				US
-
-B0-B4-48   (hex)		Texas Instruments
-B0B448     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-D4-94-A1   (hex)		Texas Instruments
-D494A1     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-14-BF   (hex)		Cisco-Linksys, LLC
-0014BF     (base 16)		Cisco-Linksys, LLC
-				121 Theory Dr.
-				Irvine  CA  92612
-				US
-
-CC-B2-55   (hex)		D-Link International
-CCB255     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-28-10-7B   (hex)		D-Link International
-28107B     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-FC-75-16   (hex)		D-Link International
-FC7516     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-84-C9-B2   (hex)		D-Link International
-84C9B2     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-C8-D3-A3   (hex)		D-Link International
-C8D3A3     (base 16)		D-Link International
-				1 Internal Business Park, #03-12. The Synergy Singapore
-				Singapore    609917
-				US
-
-3C-BB-73   (hex)		Shenzhen Xinguodu Technology Co., Ltd.
-3CBB73     (base 16)		Shenzhen Xinguodu Technology Co., Ltd.
-				F17A, JinSong Building, Tairan Industrial & Trade Park, Chegongmiao, Shennan Road，Futian District
-				Shenzhen  Guangdong  518040
-				CN
-
-0C-47-C9   (hex)		Amazon Technologies Inc.
-0C47C9     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-50-BA   (hex)		D-Link Corporation
-0050BA     (base 16)		D-Link Corporation
-				2F, NO. 233L-2, PAO-CHIAO RD.
-				TAIPEI    0000
-				TW
-
-00-17-9A   (hex)		D-Link Corporation
-00179A     (base 16)		D-Link Corporation
-				No. 289, Sinhu 3rd Rd., Neihu District,
-				Taipei    114
-				TW
-
-00-1C-F0   (hex)		D-Link Corporation
-001CF0     (base 16)		D-Link Corporation
-				NO.289, Sinhu 3rd Rd.,
-				Neihu District,  Taipei City  114
-				TW
-
-00-1E-58   (hex)		D-Link Corporation
-001E58     (base 16)		D-Link Corporation
-				NO.289, Sinhu 3rd Rd.,
-				Neihu District,  Taipei City  114
-				TW
-
-00-22-B0   (hex)		D-Link Corporation
-0022B0     (base 16)		D-Link Corporation
-				No.289, Sinhu 3rd RD.,
-				Neihu District,  Taipei City  114
-				TW
-
-00-24-01   (hex)		D-Link Corporation
-002401     (base 16)		D-Link Corporation
-				No.289, Sinhu 3rd RD.,
-				Neihu District,  Taipei City  114
-				TW
-
-1C-AF-F7   (hex)		D-Link International
-1CAFF7     (base 16)		D-Link International
-				1 INTERNATIONAL  BUSINESS  PARK,
-				SINGAPORE    609917
-				SG
-
-14-D6-4D   (hex)		D-Link International
-14D64D     (base 16)		D-Link International
-				1 INTERNATIONAL BUSINESS PARK
-				SINGAPORE    609917
-				SG
-
-90-94-E4   (hex)		D-Link International
-9094E4     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-B4-99-BA   (hex)		Hewlett Packard
-B499BA     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-04-78-63   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
-047863     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
-				9th Floor, No. 5 Building, 2145 Jinshajiang Rd., Putuo District
-				Shanghai    200333
-				CN
-
-40-9F-87   (hex)		Jide Technology (Hong Kong) Limited
-409F87     (base 16)		Jide Technology (Hong Kong) Limited
-				jiahua Mansion 3F, 133 North 4th Ring Road East, Chaoyang District
-				Beijing    100101
-				CN
-
-4C-FF-12   (hex)		Fuze Entertainment Co., ltd
-4CFF12     (base 16)		Fuze Entertainment Co., ltd
-				3rd Floor Harbour Centre
-				George Town  George Town  P.O. Box 613GT
-				KY
-
-AC-9A-22   (hex)		NXP Semiconductors
-AC9A22     (base 16)		NXP Semiconductors
-				411 E. Plumeria Drive
-				San Jose  CA  95134
-				US
-
-28-7C-DB   (hex)		Hefei  Toycloud Technology Co.,ltd
-287CDB     (base 16)		Hefei  Toycloud Technology Co.,ltd
-				FLOOR 13,XUNFEI BUILDING,NO.666 WANGJIANG ROAD,HIGH & NEW TECHNOLOGY DEVELOPMENT ZONE.HEFEI.
-				Hefei  Anhui  230088
-				CN
-
-48-AD-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48AD08     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-FB-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CFB45     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-00-9A-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-009ACD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-3C-5A-B4   (hex)		Google, Inc.
-3C5AB4     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View    94043
-				US
-
-F4-F5-E8   (hex)		Google, Inc.
-F4F5E8     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View    94043
-				US
-
-94-EB-2C   (hex)		Google, Inc.
-94EB2C     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View    94043
-				US
-
-0C-C7-31   (hex)		Currant, Inc.
-0CC731     (base 16)		Currant, Inc.
-				927 Industrial Ave
-				Palo Alto  CA  94303
-				US
-
-70-B3-D5   (hex)		IEEE Registration Authority
-70B3D5     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-28-ED-6A   (hex)		Apple, Inc.
-28ED6A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-56-E3   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-C056E3     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-EC-3E-F7   (hex)		Juniper Networks
-EC3EF7     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-0C-F8-93   (hex)		ARRIS Group, Inc.
-0CF893     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-3C-DF-A9   (hex)		ARRIS Group, Inc.
-3CDFA9     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-84-61-A0   (hex)		ARRIS Group, Inc.
-8461A0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-D1   (hex)		ARRIS Group, Inc.
-0015D1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-D0   (hex)		ARRIS Group, Inc.
-001DD0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-D3   (hex)		ARRIS Group, Inc.
-001DD3     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-AC-B3-13   (hex)		ARRIS Group, Inc.
-ACB313     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-38-F2-3E   (hex)		Microsoft Mobile Oy
-38F23E     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				Espoo    02150
-				FI
-
-E4-F8-9C   (hex)		Intel Corporate
-E4F89C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-6C-A1-00   (hex)		Intel Corporate
-6CA100     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-2C-41-38   (hex)		Hewlett Packard
-2C4138     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-44-1E-A1   (hex)		Hewlett Packard
-441EA1     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-78-E7-D1   (hex)		Hewlett Packard
-78E7D1     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-5C-8F-E0   (hex)		ARRIS Group, Inc.
-5C8FE0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-90-C7-92   (hex)		ARRIS Group, Inc.
-90C792     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-BC-CA-B5   (hex)		ARRIS Group, Inc.
-BCCAB5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D0-39-B3   (hex)		ARRIS Group, Inc.
-D039B3     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-0F-CC   (hex)		ARRIS Group, Inc.
-000FCC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-12-F0   (hex)		Intel Corporate
-0012F0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-07-40   (hex)		BUFFALO.INC
-000740     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref.  460-8315
-				JP
-
-00-24-A5   (hex)		BUFFALO.INC
-0024A5     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref.  460-8315
-				JP
-
-CC-E1-D5   (hex)		BUFFALO.INC
-CCE1D5     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg.,30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref  460-8315
-				JP
-
-A4-02-B9   (hex)		Intel Corporate
-A402B9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-DC-53-60   (hex)		Intel Corporate
-DC5360     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1C-C4   (hex)		Hewlett Packard
-001CC4     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-1E-0B   (hex)		Hewlett Packard
-001E0B     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-22-64   (hex)		Hewlett Packard
-002264     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-25-B3   (hex)		Hewlett Packard
-0025B3     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-0C-F1   (hex)		Intel Corporation
-000CF1     (base 16)		Intel Corporation
-				MS: JF3-420
-				Hillsboro  OR  97124
-				US
-
-78-48-59   (hex)		Hewlett Packard
-784859     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-58-DC-6D   (hex)		Exceptional Innovation, Inc.
-58DC6D     (base 16)		Exceptional Innovation, Inc.
-				480 Olde Worthington Rd, Suite 350
-				Westerville  OH  43082
-				US
-
-90-21-55   (hex)		HTC Corporation
-902155     (base 16)		HTC Corporation
-				No.23 Xinghua Road
-				Taoyuan County    330
-				TW
-
-64-31-50   (hex)		Hewlett Packard
-643150     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-7C-B1-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7CB15D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-00-26-5E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-00265E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-24-2C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-00242C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-D8-B3-77   (hex)		HTC Corporation
-D8B377     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., 
-				Taoyuan City    330
-				TW
-
-B0-F1-A3   (hex)		Fengfan (BeiJing) Technology Co., Ltd. 
-B0F1A3     (base 16)		Fengfan (BeiJing) Technology Co., Ltd. 
-				Room518,Dianzichengdasha Town,No12,Jiuxianqiao Road
-				Beijing  Chaoyang District  100016
-				CN
-
-34-64-A9   (hex)		Hewlett Packard
-3464A9     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-38-63-BB   (hex)		Hewlett Packard
-3863BB     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-5C-B9-01   (hex)		Hewlett Packard
-5CB901     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-DC-4A-3E   (hex)		Hewlett Packard
-DC4A3E     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-B0-5A-DA   (hex)		Hewlett Packard
-B05ADA     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-10-83   (hex)		Hewlett Packard
-001083     (base 16)		Hewlett Packard
-				MAIL STOP 42LE
-				CUPERTINO  CA  95014
-				US
-
-A0-B3-CC   (hex)		Hewlett Packard
-A0B3CC     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-EC-B1-D7   (hex)		Hewlett Packard
-ECB1D7     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-9C-B6-54   (hex)		Hewlett Packard
-9CB654     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-6C-3B-E5   (hex)		Hewlett Packard
-6C3BE5     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-B0-AA-36   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B0AA36     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD
-				DONGGUAN  GUANGDONG  523860
-				CN
-
-78-4B-87   (hex)		Murata Manufacturing Co., Ltd.
-784B87     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1,Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-E4-CE-02   (hex)		WyreStorm Technologies Ltd
-E4CE02     (base 16)		WyreStorm Technologies Ltd
-				Tech Valley Park, 23 Wood Road
-				Round Lake  New York  12151
-				GB
-
-40-F3-08   (hex)		Murata Manufacturing Co., Ltd.
-40F308     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1 Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-80-89-17   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-808917     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-A0-93-47   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A09347     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
-				DONGGUAN  GUANGDONG  523860
-				CN
-
-E8-BB-A8   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-E8BBA8     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
-				DONGGUAN  GUANGDONG  523860
-				CN
-
-94-2C-B3   (hex)		HUMAX Co., Ltd.
-942CB3     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-00-27-19   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-002719     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 7, Second Part, Honghualing Industrial Zone
-				Shenzhen  Guangdong  518057
-				CN
-
-40-16-9F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-40169F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
-				Shenzhen  Guangdong  518000
-				CN
-
-F4-EC-38   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F4EC38     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
-				Shenzhen  Guangdong  518000
-				CN
-
-14-04-67   (hex)		SNK Technologies Co.,Ltd.
-140467     (base 16)		SNK Technologies Co.,Ltd.
-				#1001, Byuksan Sunyoung Technopia, A-dong, 13
-				Ojeongongeop-gil, Uiwang-si,  Gyeonggi-do  16072
-				KR
-
-80-30-DC   (hex)		Texas Instruments
-8030DC     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A4-D5-78   (hex)		Texas Instruments
-A4D578     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-14-CF-92   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-14CF92     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
-				shenzhen  guangdong Province  518057
-				CN
-
-20-DC-E6   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-20DCE6     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
-				shenzhen  guangdong Province  518057
-				CN
-
-14-CC-20   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-14CC20     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-24-60-81   (hex)		razberi technologies
-246081     (base 16)		razberi technologies
-				13755 Hutton Drive Suite 500
-				Farmers Branch  TX  75234
-				US
-
-A4-D1-8C   (hex)		Apple, Inc.
-A4D18C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-F6-52   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-90F652     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan,
-				Shenzhen  Guangdong Province,  518057
-				CN
-
-24-1E-EB   (hex)		Apple, Inc.
-241EEB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-25-EF   (hex)		Apple, Inc.
-CC25EF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-CF-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88CF98     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-0D-43   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-F80D43     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-38-F8-89   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-38F889     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-7A-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D07AB5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-19-C6   (hex)		zte corporation
-0019C6     (base 16)		zte corporation
-				Technology Management Department, 
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1D-D9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-001DD9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-19-7D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-00197D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-14-A4   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-0014A4     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-78-DD-08   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-78DD08     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-9C-D2-1E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-9CD21E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-B4-30-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B43052     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-D0-9B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-80D09B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-8E-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C8E5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-74-2A   (hex)		zte corporation
-84742A     (base 16)		zte corporation
-				12/F.,zte R&D building,kejinan Road,
-				shenzhen  guangdong  518057
-				CN
-
-9C-D2-4B   (hex)		zte corporation
-9CD24B     (base 16)		zte corporation
-				12/F.,zte R&D building,kejinan Road,
-				shenzhen  guangdong  518057
-				CN
-
-C8-7B-5B   (hex)		zte corporation
-C87B5B     (base 16)		zte corporation
-				12/F.,zte R&D building,kejinan Road,
-				shenzhen  guangdong  518057
-				CN
-
-00-07-D8   (hex)		Hitron Technologies. Inc
-0007D8     (base 16)		Hitron Technologies. Inc
-				135-220 Hitron B/D 726-5
-				Seoul    13456
-				KR
-
-90-4E-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-904E2B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-08-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2008ED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-34-FE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0034FE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-51-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C85195     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-40-CB-A8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-40CBA8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
-				Shenzhen  GuangDong  518057
-				CN
-
-D4-6E-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D46E5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
-				Shenzhen  GuangDong  518057
-				CN
-
-88-53-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8853D4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-04-C0-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04C06F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-20-2B-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-202BC1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-54-A5-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-54A51B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-00-25-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-002568     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-78-1D-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-781DBA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				HUAWEI Industrial Base Bantian,Longgang
-				Shenzhen  guangdong  518129
-				CN
-
-00-25-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-00259E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				B1-7,Huawei Base,Bantian, Longgang District,ShenZhen,GuangDong,CHINA
-				ShenZhen  GuangDong  518129
-				CN
-
-00-6B-8E   (hex)		Shanghai Feixun Communication Co.,Ltd.
-006B8E     (base 16)		Shanghai Feixun Communication Co.,Ltd.
-				Building 90,No,4855,Guangfulin Road
-				shanghai  Shanghai  201616
-				CN
-
-D4-6A-A8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D46AA8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen    518129
-				CN
-
-BC-AD-AB   (hex)		Avaya Inc
-BCADAB     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-FC-A8-41   (hex)		Avaya Inc
-FCA841     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-3C-B1-5B   (hex)		Avaya Inc
-3CB15B     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-34-75-C7   (hex)		Avaya Inc
-3475C7     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-B0-AD-AA   (hex)		Avaya Inc
-B0ADAA     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-B4-47-5E   (hex)		Avaya Inc
-B4475E     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-B8-BC-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B8BC1B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-2A-F7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-582AF7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-D9-21   (hex)		Avaya Inc
-24D921     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-84-83-71   (hex)		Avaya Inc
-848371     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-00-1B-4F   (hex)		Avaya Inc
-001B4F     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-4C-8B-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4C8BEF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-50-06-AB   (hex)		Cisco Systems, Inc
-5006AB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-FC-48-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC48EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-70-7B-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-707BE8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-4C-1F-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4C1FCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-00-90-6D   (hex)		Cisco Systems, Inc
-00906D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-90-AB   (hex)		Cisco Systems, Inc
-0090AB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-50-54   (hex)		Cisco Systems, Inc
-005054     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-50-0B   (hex)		Cisco Systems, Inc
-00500B     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-03-DD   (hex)		Comark Interactive Solutions
-0003DD     (base 16)		Comark Interactive Solutions
-				93 West St.
-				Medfield  MA  02052
-				US
-
-00-50-53   (hex)		Cisco Systems, Inc
-005053     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-50-50   (hex)		Cisco Systems, Inc
-005050     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-B1-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D4B110     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-E4-68-A3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E468A3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-24-71-89   (hex)		Texas Instruments
-247189     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-98-7B-F3   (hex)		Texas Instruments
-987BF3     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-A0-F6-FD   (hex)		Texas Instruments
-A0F6FD     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-D0-B5-C2   (hex)		Texas Instruments
-D0B5C2     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-78-A5-04   (hex)		Texas Instruments
-78A504     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-6C-EC-EB   (hex)		Texas Instruments
-6CECEB     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-34-00-A3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3400A3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				Shenzhen  Guangdong  518129
-				CN
-
-00-90-2B   (hex)		Cisco Systems, Inc
-00902B     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-E0-8F   (hex)		Cisco Systems, Inc
-00E08F     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-18-68   (hex)		Cisco SPVTG
-001868     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-88-75-56   (hex)		Cisco Systems, Inc
-887556     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-FC-99-47   (hex)		Cisco Systems, Inc
-FC9947     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-6C-20-56   (hex)		Cisco Systems, Inc
-6C2056     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-15-F2   (hex)		ASUSTek COMPUTER INC.
-0015F2     (base 16)		ASUSTek COMPUTER INC.
-				No.5 Shing Yeh Street,Kwei Shan Hsiang,Taoyuan
-				Taipei    333
-				TW
-
-90-E6-BA   (hex)		ASUSTek COMPUTER INC.
-90E6BA     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
-				Taipei  Taiwan  112
-				TW
-
-00-26-18   (hex)		ASUSTek COMPUTER INC.
-002618     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
-				Taipei  Taiwan  112
-				TW
-
-F4-6D-04   (hex)		ASUSTek COMPUTER INC.
-F46D04     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,
-				Taipei    112
-				TW
-
-00-E0-18   (hex)		ASUSTek COMPUTER INC.
-00E018     (base 16)		ASUSTek COMPUTER INC.
-				150 LI-TE RD.
-				PEITOU, TAIPEI    77777
-				TW
-
-00-0C-6E   (hex)		ASUSTek COMPUTER INC.
-000C6E     (base 16)		ASUSTek COMPUTER INC.
-				150, Li-Te Rd., PeiTou
-				Taipei    112
-				TW
-
-00-0E-A6   (hex)		ASUSTek COMPUTER INC.
-000EA6     (base 16)		ASUSTek COMPUTER INC.
-				150, Li-Te Rd., PeiTou
-				Taipei    112
-				TW
-
-00-1D-60   (hex)		ASUSTek COMPUTER INC.
-001D60     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou
-				Taipei    112
-				TW
-
-6C-41-6A   (hex)		Cisco Systems, Inc
-6C416A     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-EC-E1-A9   (hex)		Cisco Systems, Inc
-ECE1A9     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-C0-67-AF   (hex)		Cisco Systems, Inc
-C067AF     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-AC-F2-C5   (hex)		Cisco Systems, Inc
-ACF2C5     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-24-01-C7   (hex)		Cisco Systems, Inc
-2401C7     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-68-86-A7   (hex)		Cisco Systems, Inc
-6886A7     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-C0-25-5C   (hex)		Cisco Systems, Inc
-C0255C     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-3C-0E-23   (hex)		Cisco Systems, Inc
-3C0E23     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-08-CC-68   (hex)		Cisco Systems, Inc
-08CC68     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-0C-27-24   (hex)		Cisco Systems, Inc
-0C2724     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-6C-FA-89   (hex)		Cisco Systems, Inc
-6CFA89     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-E0-A3   (hex)		Cisco Systems, Inc
-00E0A3     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-60-2A-D0   (hex)		Cisco SPVTG
-602AD0     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-74-5E-1C   (hex)		PIONEER CORPORATION
-745E1C     (base 16)		PIONEER CORPORATION
-				1-1 Shin-ogura
-				Kawasaki-shi  Kanagawa Prefecture  2120031
-				JP
-
-04-62-73   (hex)		Cisco Systems, Inc
-046273     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-D8-B1-90   (hex)		Cisco Systems, Inc
-D8B190     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-80-E8-6F   (hex)		Cisco Systems, Inc
-80E86F     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-AC-7E-8A   (hex)		Cisco Systems, Inc
-AC7E8A     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-1C-E8-5D   (hex)		Cisco Systems, Inc
-1CE85D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-A8-9D-21   (hex)		Cisco Systems, Inc
-A89D21     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-68-9C-E2   (hex)		Cisco Systems, Inc
-689CE2     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-23-BE   (hex)		Cisco SPVTG
-0023BE     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-18-59-33   (hex)		Cisco SPVTG
-185933     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-44-58-29   (hex)		Cisco SPVTG
-445829     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-F4-4E-05   (hex)		Cisco Systems, Inc
-F44E05     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-88-1D-FC   (hex)		Cisco Systems, Inc
-881DFC     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-10-11   (hex)		Cisco Systems, Inc
-001011     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-00-0C   (hex)		Cisco Systems, Inc
-00000C     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-28-CF-E9   (hex)		Apple, Inc.
-28CFE9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-A0-40   (hex)		Apple, Inc.
-00A040     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-F8-49   (hex)		Cisco Systems, Inc
-A0F849     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-3C-D0-F8   (hex)		Apple, Inc.
-3CD0F8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-09-27   (hex)		Apple, Inc.
-680927     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-C2-6B   (hex)		Apple, Inc.
-6CC26B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-D8-84   (hex)		Apple, Inc.
-44D884     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-26-08   (hex)		Apple, Inc.
-002608     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-26-B0   (hex)		Apple, Inc.
-0026B0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-26-BB   (hex)		Apple, Inc.
-0026BB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-9A-20   (hex)		Apple, Inc.
-D49A20     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-1E-DF   (hex)		Apple, Inc.
-F81EDF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-2A-14   (hex)		Apple, Inc.
-C82A14     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-07-54   (hex)		Apple, Inc.
-3C0754     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-B1-97   (hex)		Apple, Inc.
-A4B197     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-B4-79   (hex)		Apple, Inc.
-F0B479     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-93-E9   (hex)		Apple, Inc.
-1093E9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-2A-60   (hex)		Apple, Inc.
-442A60     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-D1-D2   (hex)		Apple, Inc.
-A4D1D2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-CF-DA   (hex)		Apple, Inc.
-28CFDA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-30-65   (hex)		Apple, Inc.
-003065     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-14-51   (hex)		Apple, Inc.
-001451     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1E-52   (hex)		Apple, Inc.
-001E52     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-21-E9   (hex)		Apple, Inc.
-0021E9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-08-E0   (hex)		Apple, Inc.
-CC08E0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-54-53   (hex)		Apple, Inc.
-045453     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-F9-51   (hex)		Apple, Inc.
-F4F951     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-63-94   (hex)		Apple, Inc.
-C06394     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-AF-8F   (hex)		Apple, Inc.
-18AF8F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-B5-B7   (hex)		Apple, Inc.
-C8B5B7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-B2-1F   (hex)		Apple, Inc.
-90B21F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-F7-C5   (hex)		Apple, Inc.
-30F7C5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-B3-95   (hex)		Apple, Inc.
-40B395     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-FB-42   (hex)		Apple, Inc.
-44FB42     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-8D-28   (hex)		Apple, Inc.
-E88D28     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-94-26   (hex)		Apple, Inc.
-949426     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-7D-74   (hex)		Apple, Inc.
-207D74     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-F1-5A   (hex)		Apple, Inc.
-F4F15A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-6F-1D   (hex)		Apple, Inc.
-C86F1D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-90-AB   (hex)		Apple, Inc.
-3090AB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-2D-AA   (hex)		Apple, Inc.
-8C2DAA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-85-06   (hex)		Apple, Inc.
-848506     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-FE-94   (hex)		Apple, Inc.
-98FE94     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-00-4D   (hex)		Apple, Inc.
-D8004D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-20-0C   (hex)		Apple, Inc.
-64200C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-33-4B   (hex)		Apple, Inc.
-C8334B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-E6-82   (hex)		Apple, Inc.
-64E682     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-E8-56   (hex)		Apple, Inc.
-B8E856     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-96-95   (hex)		Apple, Inc.
-D89695     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-99-E2   (hex)		Apple, Inc.
-1499E2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-18-D1   (hex)		Apple, Inc.
-B418D1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-20-7B   (hex)		Apple, Inc.
-9C207B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-65-BD   (hex)		Apple, Inc.
-B065BD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-26-96   (hex)		Apple, Inc.
-542696     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-A3-CB   (hex)		Apple, Inc.
-64A3CB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-3C-92   (hex)		Apple, Inc.
-903C92     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-1D-72   (hex)		Apple, Inc.
-D81D72     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-12-98   (hex)		Apple, Inc.
-341298     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-E7-2C   (hex)		Apple, Inc.
-70E72C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-EC-E4   (hex)		Apple, Inc.
-70ECE4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-AE-20   (hex)		Apple, Inc.
-68AE20     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-87-A3   (hex)		Apple, Inc.
-AC87A3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-BB-2C   (hex)		Apple, Inc.
-D8BB2C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-4F-7E   (hex)		Apple, Inc.
-D04F7E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-78-F0   (hex)		Apple, Inc.
-2078F0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-AC-CB   (hex)		Apple, Inc.
-E0ACCB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-99-9B   (hex)		Apple, Inc.
-A0999B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-24-0E   (hex)		Apple, Inc.
-24240E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-DB-F8   (hex)		Apple, Inc.
-F0DBF8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-74-6E   (hex)		Apple, Inc.
-48746E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-AE-27   (hex)		Apple, Inc.
-54AE27     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-E9-98   (hex)		Apple, Inc.
-FCE998     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-BC-9F   (hex)		Apple, Inc.
-0CBC9F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-36-3B   (hex)		Apple, Inc.
-34363B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-A6-37   (hex)		Apple, Inc.
-D0A637     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-9F-70   (hex)		Apple, Inc.
-789F70     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-F3-87   (hex)		Apple, Inc.
-9CF387     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-5B-78   (hex)		Apple, Inc.
-A85B78     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-F6-50   (hex)		Apple, Inc.
-C8F650     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-8E-24   (hex)		Apple, Inc.
-A88E24     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-4A-39   (hex)		BITA
-6C4A39     (base 16)		BITA
-				6/F, New Century Hotel Office Tower
-				  BEI JING  100044
-				CN
-
-84-7D-50   (hex)		Holley Metering Limited
-847D50     (base 16)		Holley Metering Limited
-				181 Wuchang Avenue
-				Hangzhou  Zhejiang  310023
-				CN
-
-50-D5-9C   (hex)		Thai Habel Industrial Co., Ltd.
-50D59C     (base 16)		Thai Habel Industrial Co., Ltd.
-				3/1 - 3/3 RAMA 3 RD,
-				ฺBangkholaem  Bangkok  10120
-				TH
-
-20-89-6F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-20896F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-30-52-CB   (hex)		Liteon Technology Corporation
-3052CB     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-04-96-45   (hex)		WUXI SKY CHIP INTERCONNECTION TECHNOLOGY CO.,LTD.
-049645     (base 16)		WUXI SKY CHIP INTERCONNECTION TECHNOLOGY CO.,LTD.
-				Building F12, China Sensor Network International Innovation park,200# Linghu Avenue,Wuxi.
-				WUXI  Jiangsu  214135
-				CN
-
-1C-CD-E5   (hex)		Shanghai Wind Technologies Co.,Ltd
-1CCDE5     (base 16)		Shanghai Wind Technologies Co.,Ltd
-				Room 208,Section A, Building 3#, No.7 GuiQing Road, Xuhui District, Shanghai, China(Headquarter)
-				Shanghai  Shanghai  200233
-				CN
-
-68-14-01   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-681401     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-50-A9-DE   (hex)		Smartcom - Bulgaria AD
-50A9DE     (base 16)		Smartcom - Bulgaria AD
-				BIC IZOT, Building 1, Floor 3, Office 317
-				Sofia  Sofia  1784
-				BG
-
-AC-1F-D7   (hex)		Real Vision Technology Co.,Ltd.
-AC1FD7     (base 16)		Real Vision Technology Co.,Ltd.
-				A-805, 537, Dunchon-daero, Jungwon-gu
-				Seongnam-si  Gyeonggi-do  13216
-				KR
-
-88-C2-42   (hex)		Poynt Co.
-88C242     (base 16)		Poynt Co.
-				490 S. California Avenue
-				Palo Alto  California  94306
-				US
-
-14-02-EC   (hex)		Hewlett Packard Enterprise
-1402EC     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-E0-34-E4   (hex)		Feit Electric Company, Inc.
-E034E4     (base 16)		Feit Electric Company, Inc.
-				4901 Gregg Road
-				Pico Rivera  CA  90660
-				US
-
-34-C9-F0   (hex)		LM Technologies Ltd
-34C9F0     (base 16)		LM Technologies Ltd
-				Unit 19 Spectrum House
-				London  England  NW5 1LP
-				GB
-
-68-A8-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-68A828     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-20-E8   (hex)		Apple, Inc.
-CC20E8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-BF-74   (hex)		Baicells Technologies Co.,LTD
-48BF74     (base 16)		Baicells Technologies Co.,LTD
-				10F,Dinghao Electronics Plaza-B,No.3 Haidian St.,Haidian Dist.,Beijing,China
-				Beijing  Beijing  10080
-				CN
-
-6C-93-54   (hex)		Yaojin Technology (Shenzhen) Co., LTD.
-6C9354     (base 16)		Yaojin Technology (Shenzhen) Co., LTD.
-				 No.18,Zhulong Tian Road,Shuitian No.4 Industrial Area,Shiyan Street, Baoan District,Shenzhen,China
-				Shenzhen  Guangdong  518108
-				CN
-
-DC-DC-07   (hex)		TRP Systems BV
-DCDC07     (base 16)		TRP Systems BV
-				Televisieweg 159 1322 BH  Almere
-				Almere  -  -
-				NL
-
-38-91-D5   (hex)		Hangzhou H3C Technologies Co., Limited
-3891D5     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-8C-E2-DA   (hex)		Circle Media Inc
-8CE2DA     (base 16)		Circle Media Inc
-				1319 SE Martin Luther King Jr. Blvd.
-				Portland  Oregon  97214
-				US
-
-38-21-87   (hex)		Midea Group Co., Ltd.
-382187     (base 16)		Midea Group Co., Ltd.
-				No. 6 Midea Avenue,
-				Foshan  Guangdong  528311
-				CN
-
-78-D6-B2   (hex)		Toshiba
-78D6B2     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-E8-DE-D6   (hex)		Intrising Networks, Inc.
-E8DED6     (base 16)		Intrising Networks, Inc.
-				8F., No.67, Shitan Rd., Neihu Dist., Taipei City 11469
-				Taipei    
-				TW
-
-DC-82-F6   (hex)		iPort
-DC82F6     (base 16)		iPort
-				236 Calle Pintoresco
-				San Clemente  CA  92672
-				US
-
-70-48-0F   (hex)		Apple, Inc.
-70480F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-B7-2B   (hex)		PLUMgrid Inc
-3CB72B     (base 16)		PLUMgrid Inc
-				5155 OLD IRONSIDES DR
-				Santa Clara  CA  95054
-				US
-
-48-9A-42   (hex)		Technomate Ltd
-489A42     (base 16)		Technomate Ltd
-				Unit 11 Nobel Road
-				London    N18 3BH
-				GB
-
-20-D1-60   (hex)		Private
-20D160     (base 16)		Private
-
-BC-9C-31   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC9C31     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-8B-4C   (hex)		KingTing Tech.
-D88B4C     (base 16)		KingTing Tech.
-				8 Holly St
-				Irvine  California  92612
-				US
-
-38-4C-90   (hex)		ARRIS Group, Inc.
-384C90     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F0-B0-E7   (hex)		Apple, Inc.
-F0B0E7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-1C-23   (hex)		Hilan Technology CO.,LTD
-381C23     (base 16)		Hilan Technology CO.,LTD
-				604,Block 1,Kai Da Er Building,No.168 TongSha Road,XiLi Town,Nanshan,Shenzhen,P.R.C
-				Shenzhen  Guandong  518055
-				CN
-
-64-9A-12   (hex)		P2 Mobile Technologies Limited
-649A12     (base 16)		P2 Mobile Technologies Limited
-				Unit 708, 7/F, Bio-Informatics Centre, No.2 Science Park West Avenue,
-				Hong Kong  Hong Kong  00000
-				HK
-
-AC-89-95   (hex)		AzureWave Technology Inc.
-AC8995     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-04-69-F8   (hex)		Apple, Inc.
-0469F8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-29-BE   (hex)		Shanghai MRDcom Co.,Ltd
-3029BE     (base 16)		Shanghai MRDcom Co.,Ltd
-				NO.123 JULI RD
-				SHANGHAI  PUDONG ZHANGJIANG HIGH-TECH PARK  201203
-				CN
-
-20-C3-A4   (hex)		RetailNext
-20C3A4     (base 16)		RetailNext
-				60 S. Market St, 10th Floor
-				San Jose  CA  95113
-				US
-
-E4-C2-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E4C2D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-F4-BE   (hex)		Palo Alto Networks
-D4F4BE     (base 16)		Palo Alto Networks
-				4401 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-48-B6-20   (hex)		ROLI Ltd.
-48B620     (base 16)		ROLI Ltd.
-				2 Glebe Road
-				London    E8 4BD
-				GB
-
-D8-88-CE   (hex)		RF Technology Pty Ltd
-D888CE     (base 16)		RF Technology Pty Ltd
-				46/7 Sefton Rd
-				Thornleigh  NSW  2120
-				AU
-
-30-7C-B2   (hex)		ANOV FRANCE
-307CB2     (base 16)		ANOV FRANCE
-				100 CHEMIN DE BAILLOT
-				MONTAUBAN  TARN ET GARONNE  82000
-				FR
-
-84-79-73   (hex)		Shanghai Baud Data Communication Co.,Ltd.
-847973     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
-				NO.123 JULI RD
-				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
-				CN
-
-E8-B4-C8   (hex)		Samsung Electronics Co.,Ltd
-E8B4C8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-87-E2   (hex)		Samsung Electronics Co.,Ltd
-D087E2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-5B-7B   (hex)		Samsung Electronics Co.,Ltd
-F05B7B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-47-BF   (hex)		Samsung Electronics Co.,Ltd
-B047BF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-0B-C6   (hex)		Samsung Electronics Co.,Ltd
-7C0BC6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-FE-90   (hex)		Mellanox Technologies, Inc.
-7CFE90     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-84-5B-12   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-845B12     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-55-31   (hex)		Samsung Electronics Co.,Ltd
-205531     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-86-8C   (hex)		ARRIS Group, Inc.
-10868C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-44-FD-A3   (hex)		Everysight LTD.
-44FDA3     (base 16)		Everysight LTD.
-				Advanced Technology Center P.O.B 539
-				Haifa  Haifa  31053
-				IL
-
-A8-A7-95   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-A8A795     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-90-6F-A9   (hex)		NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.
-906FA9     (base 16)		NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.
-				No.1 Putian Road,Yuhuamenwai,Nanjing
-				Nan Jing  Jiang Su  210022
-				CN
-
-60-FD-56   (hex)		WOORISYSTEMS CO., Ltd
-60FD56     (base 16)		WOORISYSTEMS CO., Ltd
-				357-4, Neungpyeong-ri, Opo-eup
-				Gwangjiu-si  Gyeonggi-do  464-921
-				KR
-
-98-70-E8   (hex)		INNATECH SDN BHD
-9870E8     (base 16)		INNATECH SDN BHD
-				2, JALAN TIARA 3, TIARA SQUARE
-				SUBANG JAYA  SELANGOR  47600
-				MY
-
-44-65-6A   (hex)		Mega Video Electronic(HK) Industry Co., Ltd
-44656A     (base 16)		Mega Video Electronic(HK) Industry Co., Ltd
-				Room 503, No.43 Fushun Street, Huanghai West Road,
-				Dalian  Liaoning  116600
-				CN
-
-78-EB-39   (hex)		Instituto Nacional de Tecnología Industrial
-78EB39     (base 16)		Instituto Nacional de Tecnología Industrial
-				Av. Gral. Paz 5445
-				San Martín  Buenos Aires  1650
-				AR
-
-0C-75-6C   (hex)		Anaren Microwave, Inc.
-0C756C     (base 16)		Anaren Microwave, Inc.
-				6635 Kirkville Road
-				East Syracuse  NY  13057
-				US
-
-D4-7B-B0   (hex)		ASKEY COMPUTER CORP
-D47BB0     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-F0-22-4E   (hex)		Esan electronic co.
-F0224E     (base 16)		Esan electronic co.
-				D&I Building 2nd floor
-				Gun-Po  Kyunggido  435-862
-				KR
-
-CC-5F-BF   (hex)		Topwise 3G Communication Co., Ltd.
-CC5FBF     (base 16)		Topwise 3G Communication Co., Ltd.
-				6 Floor, A8 Music Building, Keyuan Road, High-Tech Park, Nanshan District, Shenzhen, China
-				Shenzhen  Guangdong  518000
-				CN
-
-C8-F9-C8   (hex)		NewSharp Technology(SuZhou)Co,Ltd
-C8F9C8     (base 16)		NewSharp Technology(SuZhou)Co,Ltd
-				1st/f.building 7th No.328 XingHu street SuZhou City
-				SuZhou City  JiangSu Province  215123
-				CN
-
-80-C5-E6   (hex)		Microsoft Corporation
-80C5E6     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-10-DF-8B   (hex)		Shenzhen CareDear Communication Technology Co.,Ltd
-10DF8B     (base 16)		Shenzhen CareDear Communication Technology Co.,Ltd
-				No.605,6th floor, 1st Section, 25th Building, Science and Technology Park Industrial Zone, median space, High-tech Zone
-				ShenZhen  Guangdong  518000
-				CN
-
-C4-12-F5   (hex)		D-Link International
-C412F5     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-5C-45-27   (hex)		Juniper Networks
-5C4527     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-E0-2C-B2   (hex)		Lenovo Mobile Communication (Wuhan) Company Limited
-E02CB2     (base 16)		Lenovo Mobile Communication (Wuhan) Company Limited
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan, China  430205
-				Wuhan  Hubei  430205
-				CN
-
-60-6D-C7   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-606DC7     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-68-ED-A4   (hex)		Shenzhen Seavo Technology Co.,Ltd
-68EDA4     (base 16)		Shenzhen Seavo Technology Co.,Ltd
-				5H,West Building,NO.210,Terra Hi-Tech Industrial Park,
-				Shenzhen  Guangdong  518040
-				CN
-
-2C-C5-D3   (hex)		Ruckus Wireless
-2CC5D3     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F4-57-3E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-F4573E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-D0-43-1E   (hex)		Dell Inc.
-D0431E     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-54-CD-10   (hex)		Panasonic Mobile Communications Co.,Ltd.
-54CD10     (base 16)		Panasonic Mobile Communications Co.,Ltd.
-				600 Saedo-cho Tsuzuki-ku
-				Yokohama City  Kanagawa  224-8539
-				JP
-
-40-8D-5C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-408D5C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-FC-E1-FB   (hex)		Array Networks
-FCE1FB     (base 16)		Array Networks
-				1371 McCarthy Blvd
-				Milpitas  California  95035
-				US
-
-E8-91-20   (hex)		Motorola Mobility LLC, a Lenovo Company
-E89120     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-D4-F9-A1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D4F9A1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-40-AD   (hex)		Samsung Electronics Co.,Ltd
-5440AD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-24-DD   (hex)		Cambrionix Ltd
-A424DD     (base 16)		Cambrionix Ltd
-				St Johns Innovation Centre
-				Cambridge  Cambridgeshire  CB4 0WS
-				GB
-
-14-5A-83   (hex)		Logi-D inc
-145A83     (base 16)		Logi-D inc
-				5550 Des Rossignol Blvd
-				Laval  Quebec  H7L 5W6
-				CA
-
-80-4E-81   (hex)		Samsung Electronics Co.,Ltd
-804E81     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C0-9A-71   (hex)		XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD
-C09A71     (base 16)		XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD
-				1-3F, Block2, No.6 Wanghai Rd,Siming District, Xiamen, Fujian, China (”MEITU”)
-				Xiamen  Fujian  361008
-				CN
-
-64-16-7F   (hex)		Polycom
-64167F     (base 16)		Polycom
-				6001 America Center Drive
-				San Jose  CA  95002
-				US
-
-34-0B-40   (hex)		MIOS ELETTRONICA SRL
-340B40     (base 16)		MIOS ELETTRONICA SRL
-				VIA ARCHIMEDE, 10
-				SAN MARTINO B.A. (VR)  VERONA  37036
-				IT
-
-48-06-6A   (hex)		Tempered Networks, Inc.
-48066A     (base 16)		Tempered Networks, Inc.
-				100 West Harrison St
-				Seattle  WA  98119
-				US
-
-BC-F8-11   (hex)		Xiamen DNAKE Technology Co.,Ltd
-BCF811     (base 16)		Xiamen DNAKE Technology Co.,Ltd
-				5F,Xingtel Building,Chuangxin Rd.
-				Xiamen  Fujian  361006
-				CN
-
-90-0A-39   (hex)		Wiio, Inc.
-900A39     (base 16)		Wiio, Inc.
-				99 S. Almaden Boulevard
-				San Jose  California  95113
-				US
-
-D0-C0-BF   (hex)		Actions Microelectronics Co., Ltd
-D0C0BF     (base 16)		Actions Microelectronics Co., Ltd
-				201, No 9 Building, Software Park,Kejizhonger Rd.,
-				Shenzhen  Gangdong  518057
-				CN
-
-E8-61-BE   (hex)		Melec Inc.
-E861BE     (base 16)		Melec Inc.
-				516-10 Higashiasakawamachi
-				Hachioji  Tokyo  193-0834
-				JP
-
-58-70-C6   (hex)		Shanghai Xiaoyi Technology Co., Ltd.
-5870C6     (base 16)		Shanghai Xiaoyi Technology Co., Ltd.
-				Shanghai Zhangjiang hi-tech park of Pudong New Area
-				Shanghai  Shanghai  201120
-				CN
-
-FC-8F-90   (hex)		Samsung Electronics Co.,Ltd
-FC8F90     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-74-04-2B   (hex)		Lenovo Mobile Communication (Wuhan) Company Limited
-74042B     (base 16)		Lenovo Mobile Communication (Wuhan) Company Limited
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan, China  430205
-				Wuhan  Hubei  430205
-				CN
-
-F8-7A-EF   (hex)		Rosonix Technology, Inc.
-F87AEF     (base 16)		Rosonix Technology, Inc.
-				10F, No.235, Sec. 4, Chengde Rd., 
-				Taipei  Taiwan  11167
-				TW
-
-20-28-BC   (hex)		Visionscape Co,. Ltd.
-2028BC     (base 16)		Visionscape Co,. Ltd.
-				503, 145, Gasan Digital 1-ro, Geumcheon-gu,
-				Seoul  Korea  153-787
-				KR
-
-24-1C-04   (hex)		SHENZHEN JEHE TECHNOLOGY DEVELOPMENT CO., LTD.
-241C04     (base 16)		SHENZHEN JEHE TECHNOLOGY DEVELOPMENT CO., LTD.
-				2/F, Block A, Tsinghua Information Harbor, North Section
-				Shenzhen  Guangdong  518057
-				CN
-
-D0-5C-7A   (hex)		Sartura d.o.o.
-D05C7A     (base 16)		Sartura d.o.o.
-				Kuniscak 28
-				  Zagreb  10000
-				HR
-
-88-70-33   (hex)		Hangzhou Silan Microelectronic Inc
-887033     (base 16)		Hangzhou Silan Microelectronic Inc
-				No.4 HuangGuShan Road
-				Hangzhou  Zhejiang  310012
-				CN
-
-DC-56-E6   (hex)		Shenzhen Bococom Technology Co.,LTD
-DC56E6     (base 16)		Shenzhen Bococom Technology Co.,LTD
-				303, Dongjiang Environmental Build, LangShan Road.
-				Shenzhen  Guangdong  518000
-				CN
-
-CC-96-35   (hex)		LVS Co.,Ltd.
-CC9635     (base 16)		LVS Co.,Ltd.
-				SmartValley B # 801
-				Incheon    406-840
-				KR
-
-44-80-EB   (hex)		Motorola Mobility LLC, a Lenovo Company
-4480EB     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-40-28-14   (hex)		RFI Engineering
-402814     (base 16)		RFI Engineering
-				Markerkant 13-76
-				Almere  Flevoland  1314AN
-				NL
-
-14-41-46   (hex)		Honeywell (China) Co., LTD
-144146     (base 16)		Honeywell (China) Co., LTD
-				No. 100, Zunyi Road, Changning District
-				Shanghai  Shanghai  200051
-				CN
-
-94-F1-9E   (hex)		HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD
-94F19E     (base 16)		HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD
-				China Guangdong Huizhou
-				Huizhou  Guangdong  516000
-				CN
-
-B8-56-BD   (hex)		ITT LLC
-B856BD     (base 16)		ITT LLC
-				1-ya Brestkaya St, building 35
-				  Moscow  125047
-				RU
-
-40-A5-EF   (hex)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
-40A5EF     (base 16)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
-				Room 607-610, Block B, TAOJINDI Electronic Business Incubation Base
-				Tenglong Road, Longhua District,   Shenzhen Guangdong  518000
-				CN
-
-C4-92-4C   (hex)		KEISOKUKI CENTER CO.,LTD.
-C4924C     (base 16)		KEISOKUKI CENTER CO.,LTD.
-				2-6-7 SAKANE
-				KAWANISHI-CITY  HYOGO  666-0021
-				JP
-
-74-9C-E3   (hex)		KodaCloud Canada, Inc
-749CE3     (base 16)		KodaCloud Canada, Inc
-				Suite 310
-				Ottawa  Ontario  K2K3G4
-				CA
-
-D4-55-56   (hex)		Fiber Mountain Inc.
-D45556     (base 16)		Fiber Mountain Inc.
-				700 W Johnson Ave
-				Cheshire  CT  06410
-				US
-
-50-50-2A   (hex)		Egardia
-50502A     (base 16)		Egardia
-				Kleine Landtong 19
-				Gorinchem  Zuid Holland  4201 HL
-				NL
-
-74-96-37   (hex)		Todaair Electronic Co., Ltd
-749637     (base 16)		Todaair Electronic Co., Ltd
-				F.6 Electronic Building, No.1 Shuinan Guangdeli Road，Peng’Jiang District, Jiangmen, Guangdong, China
-				JiangMen  Guangdong  529000
-				CN
-
-88-E6-03   (hex)		Avotek corporation
-88E603     (base 16)		Avotek corporation
-				9-17, Dongil-ro 174-gil, Nowon-gu, Seoul
-				Seoul  Seoul  139-808
-				KR
-
-2C-AD-13   (hex)		SHENZHEN ZHILU TECHNOLOGY CO.,LTD
-2CAD13     (base 16)		SHENZHEN ZHILU TECHNOLOGY CO.,LTD
-				B2-402 Kexin Science Park, Keyuan Road, Hi-tech Park, Nanshan District, Shenzhen
-				shenzhen  Guangdong  518052
-				CN
-
-78-AC-BF   (hex)		Igneous Systems
-78ACBF     (base 16)		Igneous Systems
-				2401 4th Ave
-				Seattle  WA  98121
-				US
-
-C4-8E-8F   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-C48E8F     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C4-36-6C   (hex)		LG Innotek
-C4366C     (base 16)		LG Innotek
-				Jangduk-dong 978-1
-				Gwang-ju  Gwangsan-gu  506-731
-				KR
-
-54-36-9B   (hex)		1Verge Internet Technology (Beijing) Co., Ltd.
-54369B     (base 16)		1Verge Internet Technology (Beijing) Co., Ltd.
-				5th Floor, Sinosteel International Plaza
-				Haidian District  Beijing  
-				CN
-
-40-D2-8A   (hex)		Nintendo Co., Ltd.
-40D28A     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-40-62-B6   (hex)		Tele system communication
-4062B6     (base 16)		Tele system communication
-				5F, No.437, Tao Ying Rd
-				Taoyuan    33068
-				TW
-
-60-12-8B   (hex)		CANON INC.
-60128B     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-84-C3-E8   (hex)		Vaillant GmbH
-84C3E8     (base 16)		Vaillant GmbH
-				Berghauser Straße 40
-				Remscheid  NRW  D-42859
-				DE
-
-9C-D3-5B   (hex)		Samsung Electronics Co.,Ltd
-9CD35B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-9F-BA   (hex)		Samsung Electronics Co.,Ltd
-A89FBA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B8-8E-C6   (hex)		Stateless Networks
-B88EC6     (base 16)		Stateless Networks
-				388 Market Street
-				San Francisco  CA  94111
-				US
-
-BC-D1-65   (hex)		Cisco SPVTG
-BCD165     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-28-E4-76   (hex)		Pi-Coral
-28E476     (base 16)		Pi-Coral
-				2130 Gold Street, Ste. 200
-				San Jose  CA - California  95002
-				US
-
-4C-A5-15   (hex)		Baikal Electronics JSC
-4CA515     (base 16)		Baikal Electronics JSC
-				Highway Baltic 26 km, BC 'RigaLand, Block B, 3-rd entrance, 2-nd floor.
-				Krasnogorsk district  Moscow region  143421
-				RU
-
-7C-3C-B6   (hex)		Shenzhen Homecare Technology Co.,Ltd.
-7C3CB6     (base 16)		Shenzhen Homecare Technology Co.,Ltd.
-				Homecare Industrial Zone,NO.30,Langdong road,Yangchuan,Songgang Town,Bao'an Distric ,
-				Shenzhen  Guangdong  5108105
-				CN
-
-20-C0-6D   (hex)		SHENZHEN SPACETEK TECHNOLOGY CO.,LTD
-20C06D     (base 16)		SHENZHEN SPACETEK TECHNOLOGY CO.,LTD
-				3F, NO.2, ChaXiSanWei Industrial Park, Gushu Community, XiXiang Street, BaoAn District
-				ShenZhen  GuangDong  518100
-				
-
-48-86-E8   (hex)		Microsoft Corporation
-4886E8     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-74-A3-4A   (hex)		ZIMI CORPORATION
-74A34A     (base 16)		ZIMI CORPORATION
-				Room A913, 159 Chengjiang Road, Jiangyin City, Jiangsu Province, P, R.China
-				    214400
-				CN
-
-A8-64-05   (hex)		nimbus 9, Inc
-A86405     (base 16)		nimbus 9, Inc
-				29 W. Cimarron St.
-				Colorado Springs  CO  80903
-				US
-
-30-D5-87   (hex)		Samsung Electronics Co.,Ltd
-30D587     (base 16)		Samsung Electronics Co.,Ltd
-				#416, Maetan 3-dong
-				Suwon-si  Gyeonggi-do  443-742
-				KR
-
-68-28-F6   (hex)		Vubiq Networks, Inc.
-6828F6     (base 16)		Vubiq Networks, Inc.
-				9231 Irvine Blvd.
-				Irvine  California  92618
-				US
-
-DC-60-A1   (hex)		Teledyne DALSA Professional Imaging
-DC60A1     (base 16)		Teledyne DALSA Professional Imaging
-				High Tech Campus 27
-				Eindhoven  NB  5656 AE
-				NL
-
-10-A6-59   (hex)		Mobile Create Co.,Ltd.
-10A659     (base 16)		Mobile Create Co.,Ltd.
-				Kakukita 2-20-8
-				Oita    870-0848
-				JP
-
-58-85-6E   (hex)		QSC AG
-58856E     (base 16)		QSC AG
-				Mathias-Brueggen-Str. 55
-				Köln    50829
-				DE
-
-8C-91-09   (hex)		Toyoshima Electric Technoeogy(Suzhou) Co.,Ltd.
-8C9109     (base 16)		Toyoshima Electric Technoeogy(Suzhou) Co.,Ltd.
-				No.399,Baisheng Road,Jinxi Town
-				Kunshan  Jiangsu  215324
-				CN
-
-54-09-8D   (hex)		deister electronic GmbH
-54098D     (base 16)		deister electronic GmbH
-				Hermann-Bahlsen-Str. 11
-				Barsinghausen  Niedersachsen  30890
-				DE
-
-D0-5B-A8   (hex)		zte corporation
-D05BA8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E4-BA-D9   (hex)		360 Fly Inc.
-E4BAD9     (base 16)		360 Fly Inc.
-				1000 Town Center Blvd
-				Canonsburg  PA  15317
-				US
-
-EC-59-E7   (hex)		Microsoft Corporation
-EC59E7     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-C0-35-C5   (hex)		Prosoft Systems LTD
-C035C5     (base 16)		Prosoft Systems LTD
-				Volgogradskaya 194-a
-				Ekaterinburg  Sverdlovskay  620102
-				RU
-
-A0-A3-E2   (hex)		Actiontec Electronics, Inc
-A0A3E2     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-74-54-7D   (hex)		Cisco SPVTG
-74547D     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-00-E6-E8   (hex)		Netzin Technology Corporation,.Ltd.
-00E6E8     (base 16)		Netzin Technology Corporation,.Ltd.
-				4F-17, No. 26, Lane 321, Yang-Kuang St.,Neihu District, Taipei, Taiwan,
-				Taiwan Taipei  Taiwan Taipei  11491
-				TW
-
-50-F4-3C   (hex)		Leeo Inc
-50F43C     (base 16)		Leeo Inc
-				989 Comercial St
-				Palo Alto  CA  94303
-				US
-
-E8-87-A3   (hex)		Loxley Public Company Limited
-E887A3     (base 16)		Loxley Public Company Limited
-				102 Na Ranong Road, Klongtoey,
-				  Bangkok  10110
-				TH
-
-10-C6-7E   (hex)		SHENZHEN JUCHIN TECHNOLOGY CO., LTD
-10C67E     (base 16)		SHENZHEN JUCHIN TECHNOLOGY CO., LTD
-				Unit 423 4/B NO.1, Central Business District
-				Shenzhen  Guangdong  518000
-				CN
-
-08-A5-C8   (hex)		Sunnovo International Limited
-08A5C8     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-F8-84-79   (hex)		Yaojin Technology(Shenzhen)Co.,Ltd
-F88479     (base 16)		Yaojin Technology(Shenzhen)Co.,Ltd
-				Yaojin Park, Shui Tian No.4 Industrial Area ShiYan Tow,
-				SHENZHEN  GUANGDONG  518108
-				CN
-
-2C-29-97   (hex)		Microsoft Corporation
-2C2997     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-D4-61-32   (hex)		Pro Concept Manufacturer Co.,Ltd.
-D46132     (base 16)		Pro Concept Manufacturer Co.,Ltd.
-				88/1 Moo12 Soi Phetkasem120
-				Kratumbaen  Samutsakorn  74130
-				TH
-
-54-A0-50   (hex)		ASUSTek COMPUTER INC.
-54A050     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-4C-2C-83   (hex)		Zhejiang KaNong Network Technology Co.,Ltd.
-4C2C83     (base 16)		Zhejiang KaNong Network Technology Co.,Ltd.
-				Room 633, Building B, ShunFan Technology Park,JingChang Road No.768, YuHang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-90-8C-09   (hex)		Total Phase
-908C09     (base 16)		Total Phase
-				735 Palomar Ave
-				Sunnyvale  CA  94085
-				US
-
-DC-2F-03   (hex)		Step forward Group Co., Ltd.
-DC2F03     (base 16)		Step forward Group Co., Ltd.
-				1/3 Park Village Rama2 Floor 2   C2-2
-				Bangkok  Bangkok  10150
-				TH
-
-38-0E-7B   (hex)		V.P.S. Thai Co., Ltd
-380E7B     (base 16)		V.P.S. Thai Co., Ltd
-				279-281 Mangkorn Rd., Pomprab District
-				Bangkok  Bangkok  10100
-				TH
-
-2C-37-96   (hex)		CYBO CO.,LTD.
-2C3796     (base 16)		CYBO CO.,LTD.
-				218 MOO 3 LAEM CHA BANG
-				SRIRACHA  CHONBURI  20230
-				TH
-
-58-7F-B7   (hex)		SONAR INDUSTRIAL CO., LTD.
-587FB7     (base 16)		SONAR INDUSTRIAL CO., LTD.
-				29, 29/1, 29/2, MOO.3, THATALAD,
-				SAMPRAN  NAKORN PATHOM  73110
-				TH
-
-08-EB-29   (hex)		Jiangsu Huitong Group Co.,Ltd.
-08EB29     (base 16)		Jiangsu Huitong Group Co.,Ltd.
-				No. 24, Block 2, Taohuawu New District
-				Zhenjiang  Jiangsu  212003
-				CN
-
-40-9B-0D   (hex)		Shenzhen Yourf Kwan Industrial Co., Ltd
-409B0D     (base 16)		Shenzhen Yourf Kwan Industrial Co., Ltd
-				MCN Edifice 5D, R1 Building, No.21 4th Hi-tech Road South, High-tech Industrial Park(south)
-				Shenzhen  Guangdong  518057
-				CN
-
-D8-CB-8A   (hex)		Micro-Star INTL CO., LTD.
-D8CB8A     (base 16)		Micro-Star INTL CO., LTD.
-				No.69, Lide St.,
-				New Taipei City  Taiwan  235
-				TW
-
-70-FC-8C   (hex)		OneAccess SA
-70FC8C     (base 16)		OneAccess SA
-				381 avenue du général de Gaulle
-				CLAMART   France  92140
-				FR
-
-58-10-8C   (hex)		Intelbras
-58108C     (base 16)		Intelbras
-				BR 101, km 210, S/N°
-				São José  Santa Catarina  88104800
-				BR
-
-4C-74-03   (hex)		BQ
-4C7403     (base 16)		BQ
-				c Sofía 10. Polígono Európolis
-				Las Rozas de Madrid  Madrid  28230
-				ES
-
-8C-5D-60   (hex)		UCI Corporation Co.,Ltd.
-8C5D60     (base 16)		UCI Corporation Co.,Ltd.
-				299/195-7, Chaengwattana Road,
-				Bangkok  Bangkok  10210
-				TH
-
-BC-6B-4D   (hex)		Nokia
-BC6B4D     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-C8-D0-19   (hex)		Shanghai Tigercel Communication Technology Co.,Ltd
-C8D019     (base 16)		Shanghai Tigercel Communication Technology Co.,Ltd
-				Room 805, building 1
-				  Shanghai  200235
-				CN
-
-90-21-81   (hex)		Shanghai Huaqin Telecom Technology Co.,Ltd
-902181     (base 16)		Shanghai Huaqin Telecom Technology Co.,Ltd
-				No.1 Building,399 Keyuan Road, Zhangjian Hi-Tech Park,
-				shanghai  shanghai  201203
-				CN
-
-84-96-81   (hex)		Cathay Communication Co.,Ltd
-849681     (base 16)		Cathay Communication Co.,Ltd
-				Tsinghua Institude A319 of Hi-tech Park,Nanshan district,Shenzhen China
-				Shenzhen  Canton  0755
-				CN
-
-2C-A3-0E   (hex)		POWER DRAGON DEVELOPMENT LIMITED
-2CA30E     (base 16)		POWER DRAGON DEVELOPMENT LIMITED
-				Room D, 10/F Tower A, Billion Centre, 1 Wang Kwong Road, Kowloon Bay
-				HONG KONG  HONG KONG  999077
-				CN
-
-84-86-F3   (hex)		Greenvity Communications
-8486F3     (base 16)		Greenvity Communications
-				673 S. Milpitas Blvd Suite 204
-				Milpitas  California  95035
-				US
-
-1C-52-16   (hex)		DONGGUAN HELE ELECTRONICS CO., LTD
-1C5216     (base 16)		DONGGUAN HELE ELECTRONICS CO., LTD
-				Lijiangwei Group,
-				Dongguan City  Guangdong  86
-				CN
-
-60-99-D1   (hex)		Vuzix / Lenovo
-6099D1     (base 16)		Vuzix / Lenovo
-				2166 Brighton Henrietta Town Line Road
-				Rochester  NY  14623
-				US
-
-B0-45-15   (hex)		mira fitness,LLC.
-B04515     (base 16)		mira fitness,LLC.
-				1925 West Field Court Suite100
-				Lake Forest  IL  60045
-				US
-
-14-48-8B   (hex)		Shenzhen Doov Technology Co.,Ltd
-14488B     (base 16)		Shenzhen Doov Technology Co.,Ltd
-				11st Floor,East,2nd Phase
-				 Futian District, Shenzhen  Guangdong  518040
-				CN
-
-20-12-D5   (hex)		Scientech Materials Corporation
-2012D5     (base 16)		Scientech Materials Corporation
-				No.7, Hejiang 2nd Rd., Chungli , Taoyuan Hsien 320, Taiwan
-				Taoyuan Hsien  Chungli  320
-				TW
-
-6C-6E-FE   (hex)		Core Logic Inc.
-6C6EFE     (base 16)		Core Logic Inc.
-				11th Fl., 1-B U-SPACE Bldg.
-				Seongnam  Gyeonggi-do  463-400
-				KR
-
-38-08-FD   (hex)		Silca Spa
-3808FD     (base 16)		Silca Spa
-				Via Podgora, 20 (Z.I.)
-				Vittorio Veneto  TV  31029
-				IT
-
-78-45-61   (hex)		CyberTAN Technology Inc.
-784561     (base 16)		CyberTAN Technology Inc.
-				99 Park Ave III, Hsinchu Science Park
-				Hsinchu    308
-				TW
-
-94-CE-31   (hex)		CTS Limited
-94CE31     (base 16)		CTS Limited
-				1st district, 23D, 21
-				Moscow  -  142784
-				RU
-
-80-F8-EB   (hex)		RayTight
-80F8EB     (base 16)		RayTight
-				Room 1-216, Building 25, No 9, Anningzhuang West Road
-				Haidian District  Beijing  100085
-				CN
-
-D4-37-D7   (hex)		zte corporation
-D437D7     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-2C-01-0B   (hex)		NASCENT Technology, LLC - RemKon
-2C010B     (base 16)		NASCENT Technology, LLC - RemKon
-				2744 Yorkmont Road
-				Charlotte  NC  28208
-				
-
-04-DE-DB   (hex)		Rockport Networks Inc
-04DEDB     (base 16)		Rockport Networks Inc
-				515 Legget Dr., Suite 600
-				Kanata  ON  K2K 3G4
-				CA
-
-1C-48-40   (hex)		IMS Messsysteme GmbH
-1C4840     (base 16)		IMS Messsysteme GmbH
-				Dieselstr. 55
-				Heiligenhaus  NRW  D-42579
-				DE
-
-60-50-C1   (hex)		Kinetek Sports
-6050C1     (base 16)		Kinetek Sports
-				16885 Via Del Campo Ct.
-				San Diego  Ca  92127
-				US
-
-2C-1A-31   (hex)		Electronics Company Limited
-2C1A31     (base 16)		Electronics Company Limited
-				Units 12,15&16,8/F,Metro Centre 2
-				Kowloon Bay  HongKong  852
-				CN
-
-90-B6-86   (hex)		Murata Manufacturing Co., Ltd.
-90B686     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-EC-D9-D1   (hex)		Shenzhen TG-NET Botone Technology Co.,Ltd.
-ECD9D1     (base 16)		Shenzhen TG-NET Botone Technology Co.,Ltd.
-				East F/3,No.38 Huarong Second Industry Zone
-				Shenzhen  Guangdong  518109
-				CN
-
-6C-02-73   (hex)		Shenzhen Jin Yun Video Equipment Co., Ltd.
-6C0273     (base 16)		Shenzhen Jin Yun Video Equipment Co., Ltd.
-				4th floor, 78th, Matou Road
-				Shenzhen  Guangdong  518000
-				CN
-
-54-DF-00   (hex)		Ulterius Technologies, LLC
-54DF00     (base 16)		Ulterius Technologies, LLC
-				1625 N. Waterfront Parkway
-				Wichita  KS  67206
-				US
-
-20-ED-74   (hex)		Ability enterprise co.,Ltd.
-20ED74     (base 16)		Ability enterprise co.,Ltd.
-				4F., No.8, Ln.7, Wuquan Rd, Wugu Dist, New Taipei City 24886, Taiwan(R.O.C)
-				Taipei  Taipei  24886
-				TW
-
-A0-56-B2   (hex)		Harman/Becker Automotive Systems GmbH
-A056B2     (base 16)		Harman/Becker Automotive Systems GmbH
-				Becker-Göring-Straße 16
-				Karlsbad  Baden-Württemberg  76307
-				DE
-
-44-66-6E   (hex)		IP-LINE
-44666E     (base 16)		IP-LINE
-				#204, Gangseo B/D
-				Guro-gu  Seoul  152-826
-				KR
-
-24-4F-1D   (hex)		iRule LLC
-244F1D     (base 16)		iRule LLC
-				1555 Broadway St
-				Detroit  MI  48226
-				US
-
-94-AE-E3   (hex)		Belden Hirschmann Industries (Suzhou) Ltd.
-94AEE3     (base 16)		Belden Hirschmann Industries (Suzhou) Ltd.
-				333 Yanhu Road, Huaqiao Town
-				Kunshan  Jiangsu  215332
-				CN
-
-5C-B6-CC   (hex)		NovaComm Technologies Inc.
-5CB6CC     (base 16)		NovaComm Technologies Inc.
-				902A, #560 Shengxia Rd., ZJ Inno Park
-				  Shanghai  201203
-				CN
-
-70-5B-2E   (hex)		M2Communication Inc.
-705B2E     (base 16)		M2Communication Inc.
-				Room 12, 18F., No.65, Gaotie 7th Road
-				Zhubei City  Hsinchu County  302
-				TW
-
-5C-15-15   (hex)		ADVAN
-5C1515     (base 16)		ADVAN
-				Wisma SMR.JL.Yos Sudarso Kav 89,Lt8.Suite 804,Jakarta Utara 10730
-				Jakarta  Jakarta Utara  １４３５０
-				ID
-
-D0-59-E4   (hex)		Samsung Electronics Co.,Ltd
-D059E4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-A3-64   (hex)		Samsung Electronics Co.,Ltd
-14A364     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-0A-C6   (hex)		DEXON Systems Ltd.
-B40AC6     (base 16)		DEXON Systems Ltd.
-				Baross u. 165
-				Budaors  Pest  H-2040
-				HU
-
-D8-66-EE   (hex)		BOXIN COMMUNICATION CO.,LTD.
-D866EE     (base 16)		BOXIN COMMUNICATION CO.,LTD.
-				Room 309，Block A，New materials business building
-				Haidian District  Beijing  100094
-				CN
-
-28-29-CC   (hex)		Corsa Technology Incorporated
-2829CC     (base 16)		Corsa Technology Incorporated
-				505 March Road
-				Ottawa  Ontario  K2K 3A4
-				CA
-
-18-4A-6F   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-184A6F     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-10-C3-7B   (hex)		ASUSTek COMPUTER INC.
-10C37B     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-E8-5D-6B   (hex)		Luminate Wireless
-E85D6B     (base 16)		Luminate Wireless
-				20823 Stevens Creek Blvd, Suite 300
-				Cupertino  CA  95014
-				US
-
-B4-0B-44   (hex)		Smartisan Technology Co., Ltd.
-B40B44     (base 16)		Smartisan Technology Co., Ltd.
-				7/F, Motorola Bldg., 1st Wangjing East Rd,
-				Beijing    100102
-				CN
-
-34-31-C4   (hex)		AVM GmbH
-3431C4     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-50-FE-F2   (hex)		Sify Technologies Ltd
-50FEF2     (base 16)		Sify Technologies Ltd
-				II floor, TIDEL Park,
-				chennai  Tamilnadu  600113
-				IN
-
-34-C5-D0   (hex)		Hagleitner Hygiene International GmbH
-34C5D0     (base 16)		Hagleitner Hygiene International GmbH
-				Lunastrasse 5
-				Zell am See  Salzburg  5700
-				AT
-
-A0-12-DB   (hex)		TABUCHI ELECTRIC CO.,LTD
-A012DB     (base 16)		TABUCHI ELECTRIC CO.,LTD
-				4-2-21
-				  OSAKA  532-0003
-				JP
-
-48-1A-84   (hex)		Pointer Telocation Ltd
-481A84     (base 16)		Pointer Telocation Ltd
-				14 Hamelacha Street,
-				Rosh Ha’ayin  Israel  48091
-				IL
-
-DC-66-3A   (hex)		Apacer Technology Inc.
-DC663A     (base 16)		Apacer Technology Inc.
-				1F., No.32, Zhongcheng Rd., Tucheng Dist.,
-				New Taipei City  Taiwan R.O.C.  236
-				TW
-
-08-DF-1F   (hex)		Bose Corporation
-08DF1F     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-58-1F-67   (hex)		Open-m technology limited
-581F67     (base 16)		Open-m technology limited
-				logan century buildding ,No.23 of Hai xiu road
-				Shenzhen  Guangdong  518000
-				CN
-
-48-26-E8   (hex)		Tek-Air Systems, Inc.
-4826E8     (base 16)		Tek-Air Systems, Inc.
-				41 Eagle Road
-				Danbury  CT  06810
-				US
-
-D0-5A-F1   (hex)		Shenzhen Pulier Tech CO.,Ltd
-D05AF1     (base 16)		Shenzhen Pulier Tech CO.,Ltd
-				3rd Floor, NO. B Buliding, District A, Shajing minzhu jiujiu industrial park , Shenzhen, China
-				Shenzhen  Guangdong  518104
-				CN
-
-FC-E1-86   (hex)		A3M Co., LTD
-FCE186     (base 16)		A3M Co., LTD
-				KeumJeong Highview 2F #205,
-				Gunpo  Gyeonggi  435-845
-				KR
-
-54-EF-92   (hex)		Shenzhen Elink Technology Co., LTD
-54EF92     (base 16)		Shenzhen Elink Technology Co., LTD
-				A531, Famous, No 168 Bao Yuan Road,
-				Shenzhen  Guangdong  518000
-				CN
-
-EC-E5-12   (hex)		tado GmbH
-ECE512     (base 16)		tado GmbH
-				Lindwurmstr. 76
-				Munich  Bavaria  80337
-				DE
-
-5C-F4-AB   (hex)		Zyxel Communications Corporation
-5CF4AB     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-08-B2-A3   (hex)		Cynny Italia S.r.L.
-08B2A3     (base 16)		Cynny Italia S.r.L.
-				Via delle Mantellate, 8
-				Firenze  FI  59021
-				IT
-
-70-30-5D   (hex)		Ubiquoss Inc
-70305D     (base 16)		Ubiquoss Inc
-				8F Ubiquoss B/D, 68, Pangyo-ro 255beon-gil, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-48-82-44   (hex)		Life Fitness / Div. of Brunswick
-488244     (base 16)		Life Fitness / Div. of Brunswick
-				10601 W. Belmont Ave
-				Franklin Park  IL  60131
-				US
-
-C8-31-68   (hex)		eZEX corporation
-C83168     (base 16)		eZEX corporation
-				Rm 508, Ssangyong IT Twin-Tower II, 442-5
-				Seongnam-si  Gyeonggi-do  462-120
-				KR
-
-40-B3-CD   (hex)		Chiyoda Electronics Co.,Ltd.
-40B3CD     (base 16)		Chiyoda Electronics Co.,Ltd.
-				1-3-11 Nishiki-cho
-				Warabi  Saitama  
-				JP
-
-24-33-6C   (hex)		Private
-24336C     (base 16)		Private
-
-20-25-64   (hex)		PEGATRON CORPORATION
-202564     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-C8-D5-90   (hex)		FLIGHT DATA SYSTEMS
-C8D590     (base 16)		FLIGHT DATA SYSTEMS
-				31 MCGREGORS DRIVE
-				KEILOR PARK  VICTORIA  3042
-				AU
-
-7C-FF-62   (hex)		Huizhou Super Electron Technology Co.,Ltd.
-7CFF62     (base 16)		Huizhou Super Electron Technology Co.,Ltd.
-				10F,Financial Tower,No.23,Xiapu Road
-				Huizhou City  Guangdong Province  516001
-				CN
-
-84-B5-9C   (hex)		Juniper Networks
-84B59C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C0-9D-26   (hex)		Topicon HK Lmd.
-C09D26     (base 16)		Topicon HK Lmd.
-				302, 3F, Lee Loong Building
-				Central  Hong Kong  0000
-				US
-
-44-29-38   (hex)		NietZsche enterprise Co.Ltd.
-442938     (base 16)		NietZsche enterprise Co.Ltd.
-				4F. No.560 Sec2 Chung Shan Rd.
-				New Taipei City Taiwan R.O.C  Taipei ( 臺 北 縣 / 市 )  220
-				TW
-
-A0-DA-92   (hex)		Nanjing Glarun Atten Technology Co. Ltd.
-A0DA92     (base 16)		Nanjing Glarun Atten Technology Co. Ltd.
-				Dinghuai men No. 1, Gulou District
-				    
-				CN
-
-EC-F7-2B   (hex)		HD DIGITAL TECH CO., LTD.
-ECF72B     (base 16)		HD DIGITAL TECH CO., LTD.
-				Room 602, Baoyuan road, Banan District
-				Shenzhen  Guangdong  518102
-				US
-
-4C-F4-5B   (hex)		Blue Clover Devices
-4CF45B     (base 16)		Blue Clover Devices
-				1001 Bayhill Dr
-				San Bruno  CA  94066
-				US
-
-B0-69-71   (hex)		DEI Sales, Inc.
-B06971     (base 16)		DEI Sales, Inc.
-				1 Viper Way
-				Vista  CA  92081
-				US
-
-18-89-DF   (hex)		CerebrEX Inc.
-1889DF     (base 16)		CerebrEX Inc.
-				Central Shin-Osaka Building 10F
-				Osaka  Osaka  532-0003
-				JP
-
-54-C8-0F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-54C80F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-E4-D3-32   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-E4D332     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-0C-20-26   (hex)		noax Technologies AG
-0C2026     (base 16)		noax Technologies AG
-				Am Forst 6
-				Ebersberg    85560
-				DE
-
-28-3B-96   (hex)		Cool Control LTD
-283B96     (base 16)		Cool Control LTD
-				Mivtahim 2
-				Petah Tikva  Israel  4951774
-				IL
-
-64-8D-9E   (hex)		IVT Electronic Co.,Ltd
-648D9E     (base 16)		IVT Electronic Co.,Ltd
-				F building Dongxing Insdustrial Area
-				Dongguan City  Guangdong provice  523457
-				CN
-
-CC-95-D7   (hex)		Vizio, Inc
-CC95D7     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-FC-09-F6   (hex)		GUANGDONG TONZE ELECTRIC CO.,LTD
-FC09F6     (base 16)		GUANGDONG TONZE ELECTRIC CO.,LTD
-				No.12-12 Block,Jinyuan Industrical City,Chaoshan Road,Shantou,Guangdong,china
-				Shantou  Guangdong  515021
-				CN
-
-BC-F6-1C   (hex)		Geomodeling Wuxi Technology Co. Ltd.
-BCF61C     (base 16)		Geomodeling Wuxi Technology Co. Ltd.
-				Room1708, 17/F, North Star Times Tower, No.8 BeiChen East Road
-				  Beijing  100101
-				CN
-
-FC-92-3B   (hex)		Nokia Corporation
-FC923B     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-E0-3F-49   (hex)		ASUSTek COMPUTER INC.
-E03F49     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-88-A7-3C   (hex)		Ragentek Technology Group
-88A73C     (base 16)		Ragentek Technology Group
-				D10/D11, No.3188, Xiupu Road
-				  Shanghai  201315
-				CN
-
-88-D9-62   (hex)		Canopus Systems US LLC
-88D962     (base 16)		Canopus Systems US LLC
-				Nasa Ames Research Park
-				Moffett Field  CALIFORNIA  94035
-				US
-
-D0-9C-30   (hex)		Foster Electric Company, Limited
-D09C30     (base 16)		Foster Electric Company, Limited
-				1-1-109, Tsutsujigaoka
-				Akishima  Tokyo  196-8550
-				JP
-
-94-9F-3F   (hex)		Optek Digital Technology company limited
-949F3F     (base 16)		Optek Digital Technology company limited
-				Room508 Build A, Shennan Garden, Shenzhen Science and Industry Park, Nanshan
-				Shenzhen  GuangDong  518057
-				CN
-
-78-FE-E2   (hex)		Shanghai Diveo Technology Co., Ltd
-78FEE2     (base 16)		Shanghai Diveo Technology Co., Ltd
-				No.8,Lane 777,LongWu Rd
-				  Shanghai  200232
-				CN
-
-08-6D-F2   (hex)		Shenzhen MIMOWAVE Technology Co.,Ltd
-086DF2     (base 16)		Shenzhen MIMOWAVE Technology Co.,Ltd
-				
-				Shenzhen  Guangdong  518172
-				CN
-
-48-D0-CF   (hex)		Universal Electronics, Inc.
-48D0CF     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-9C-3E-AA   (hex)		EnvyLogic Co.,Ltd.
-9C3EAA     (base 16)		EnvyLogic Co.,Ltd.
-				#605,Gwanyang Doosan Ven Digm B/D
-				Anyang-si  Gyeonggi-do  431-810
-				KR
-
-1C-FC-BB   (hex)		Realfiction ApS
-1CFCBB     (base 16)		Realfiction ApS
-				Oester Alle 42, 5
-				Copenhagen  OE  2100
-				DK
-
-F8-F0-05   (hex)		Newport Media Inc.
-F8F005     (base 16)		Newport Media Inc.
-				1 Spectrum Pointe Drive Suite 225
-				Lake Forest  CA  92630
-				US
-
-28-65-6B   (hex)		Keystone Microtech Corporation
-28656B     (base 16)		Keystone Microtech Corporation
-				9F., No.255, Dong Sec. 1,
-				Jhubei City, Hsinchu County    302
-				TW
-
-CC-9F-35   (hex)		Transbit Sp. z o.o.
-CC9F35     (base 16)		Transbit Sp. z o.o.
-				Przyczolkowa 109A
-				Warsaw     02-968
-				PL
-
-DC-C7-93   (hex)		Nokia Corporation
-DCC793     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-44-48-91   (hex)		HDMI Licensing, LLC
-444891     (base 16)		HDMI Licensing, LLC
-				1140 East Arques, Suite 100
-				Sunnyvale  CA  94085
-				US
-
-5C-25-4C   (hex)		Avire Global Pte Ltd
-5C254C     (base 16)		Avire Global Pte Ltd
-				8 Admiralty Street
-				Singapore    757438
-				SG
-
-D4-2F-23   (hex)		Akenori PTE Ltd
-D42F23     (base 16)		Akenori PTE Ltd
-				176 Joo Chiat Road, #02-02
-				Singapore    427447
-				SG
-
-98-C0-EB   (hex)		Global Regency Ltd
-98C0EB     (base 16)		Global Regency Ltd
-				20F, Phase A, Wenjin Plaza,
-				Shen Zhen  Guangdong  518000
-				CN
-
-F0-3F-F8   (hex)		R L Drake
-F03FF8     (base 16)		R L Drake
-				1 Jake Brown Road
-				Old Bridge  NJ  08857
-				US
-
-B0-C5-54   (hex)		D-Link International
-B0C554     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-48-EE-86   (hex)		UTStarcom (China) Co.,Ltd
-48EE86     (base 16)		UTStarcom (China) Co.,Ltd
-				25 Floor,A Block,1#Building,TianZuo International Center,
-				Haidian District  BeiJing  100081
-				CN
-
-88-89-14   (hex)		All Components Incorporated
-888914     (base 16)		All Components Incorporated
-				828 New Meister Lane
-				Pflugerville  TX  78660
-				US
-
-F0-32-1A   (hex)		Mita-Teknik A/S
-F0321A     (base 16)		Mita-Teknik A/S
-				Aktieselskabet af 12.12.2006
-				Roedkaersbro    8840
-				DK
-
-A8-81-F1   (hex)		BMEYE B.V.
-A881F1     (base 16)		BMEYE B.V.
-				Hoogoorddreef 60
-				Amsterdam    1101BE
-				NL
-
-C4-E9-84   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-C4E984     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-D0-69-D0   (hex)		Verto Medical Solutions, LLC
-D069D0     (base 16)		Verto Medical Solutions, LLC
-				900 Spruce St., Suite 550
-				St. Louis  Missouri  63012
-				US
-
-FC-13-49   (hex)		Global Apps Corp.
-FC1349     (base 16)		Global Apps Corp.
-				12F., No 225, Sec. 5 Nanjing E. Rd
-				Taipei    105
-				TW
-
-84-84-33   (hex)		Paradox Engineering SA
-848433     (base 16)		Paradox Engineering SA
-				Via Passeggiata, 7
-				Novazzano  Ticino  6883
-				CH
-
-44-C3-06   (hex)		SIFROM Inc.
-44C306     (base 16)		SIFROM Inc.
-				1201 N. Orange St., Ste 700 #7112
-				Wilmington  DE  19801-1186
-				US
-
-60-21-03   (hex)		I4VINE, INC
-602103     (base 16)		I4VINE, INC
-				TLI Building 6th floor, 195
-				Seongnam-si  Gyeonggi-do  462-100
-				KR
-
-FC-07-A0   (hex)		LRE Medical GmbH
-FC07A0     (base 16)		LRE Medical GmbH
-				Hofer Strasse 5
-				Noerdlingen  Bavaria  86720
-				DE
-
-1C-EE-E8   (hex)		Ilshin Elecom
-1CEEE8     (base 16)		Ilshin Elecom
-				2973, Hagun-ri, Yangchon-eup
-				Gimpo-si  Gyeonggi-do  415-843
-				KR
-
-90-31-CD   (hex)		Onyx Healthcare Inc.
-9031CD     (base 16)		Onyx Healthcare Inc.
-				2F ,No135, Lane235,
-				New Taipei City    231
-				TW
-
-E4-81-84   (hex)		Nokia
-E48184     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-14-C0-89   (hex)		DUNE HD LTD
-14C089     (base 16)		DUNE HD LTD
-				2F., No.297, Sec. 2, Tiding Blvd.,
-				Taipei    11493
-				TW
-
-F4-B6-E5   (hex)		TerraSem Co.,Ltd
-F4B6E5     (base 16)		TerraSem Co.,Ltd
-				9,Gwahaksaneop 5-ro
-				Cheongwon-Gu  ChungBuk  363-885
-				KR
-
-60-FF-DD   (hex)		C.E. ELECTRONICS, INC
-60FFDD     (base 16)		C.E. ELECTRONICS, INC
-				2107 INDUSTRIAL DR
-				BRYAN  OHIO  43506
-				US
-
-24-05-0F   (hex)		MTN Electronic Co. Ltd
-24050F     (base 16)		MTN Electronic Co. Ltd
-				MTN Industrial Park,No 3, Fuhua Road,
-				Shenzhen  Guangdong Province  518117
-				CN
-
-AC-2D-A3   (hex)		TXTR GmbH
-AC2DA3     (base 16)		TXTR GmbH
-				Rosenthaler Str. 13
-				Berlin    10119
-				DE
-
-88-9C-A6   (hex)		BTB Korea INC
-889CA6     (base 16)		BTB Korea INC
-				#1001, Suntech City 1st
-				Sungnam  Kyunggido  462-725
-				KR
-
-90-83-7A   (hex)		General Electric Water & Process Technologies
-90837A     (base 16)		General Electric Water & Process Technologies
-				6060 Spine Road
-				Boulder  Colorado  80301-3687
-				US
-
-80-BA-E6   (hex)		Neets
-80BAE6     (base 16)		Neets
-				Langballe 4
-				Horsens  Jylland  8700
-				DK
-
-F8-A2-B4   (hex)		RHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG
-F8A2B4     (base 16)		RHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG
-				Feldstr. 17
-				Mettmann    40822
-				DE
-
-E0-56-F4   (hex)		AxesNetwork Solutions inc.
-E056F4     (base 16)		AxesNetwork Solutions inc.
-				410 pepin
-				Sherbrooke  qc  j1l2y8
-				CA
-
-84-56-9C   (hex)		Coho Data, Inc.,
-84569C     (base 16)		Coho Data, Inc.,
-				1230 Midas Way, Suite 110
-				Sunnyvale  CA  94085
-				US
-
-78-AE-0C   (hex)		Far South Networks
-78AE0C     (base 16)		Far South Networks
-				49 Bell Crescent
-				Westlake  Western Cape  7945
-				ZA
-
-B0-24-F3   (hex)		Progeny Systems
-B024F3     (base 16)		Progeny Systems
-				9500 Innovation Drive
-				Manassas  VA  20110
-				US
-
-0C-54-A5   (hex)		PEGATRON CORPORATION
-0C54A5     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-8C-4D-B9   (hex)		Unmonday Ltd
-8C4DB9     (base 16)		Unmonday Ltd
-				Laivakatu 3
-				Helsinki  Uusimaa  00150
-				FI
-
-78-CA-5E   (hex)		ELNO
-78CA5E     (base 16)		ELNO
-				43 rue Michel Carré
-				Argenteuil  -  F95102
-				US
-
-2C-5A-05   (hex)		Nokia Corporation
-2C5A05     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-D4-81-CA   (hex)		iDevices, LLC
-D481CA     (base 16)		iDevices, LLC
-				136 Simsbury, Rd
-				Avon  CT  06001
-				US
-
-D8-58-D7   (hex)		CZ.NIC, z.s.p.o.
-D858D7     (base 16)		CZ.NIC, z.s.p.o.
-				Americka 23
-				  Prague  12000
-				CZ
-
-B0-D7-C5   (hex)		Logipix Ltd
-B0D7C5     (base 16)		Logipix Ltd
-				Kesmark utca 11-13
-				Budapest  -  1158
-				HU
-
-A4-3A-69   (hex)		Vers Inc
-A43A69     (base 16)		Vers Inc
-				PO Box 5265
-				Wayland  MA  01778
-				US
-
-9C-44-A6   (hex)		SwiftTest, Inc.
-9C44A6     (base 16)		SwiftTest, Inc.
-				3255 Scott Blvd.
-				Santa Clara  California  95054
-				US
-
-4C-D9-C4   (hex)		Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd
-4CD9C4     (base 16)		Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd
-				Building B10, No.8 Jinghu Road
-				Guangzhou  Guangdong  510800
-				CN
-
-50-E0-C7   (hex)		TurControlSystme AG
-50E0C7     (base 16)		TurControlSystme AG
-				Geschwister-Scholl-Strasse 7
-				Genthin  Sachsen-Anhalt  39307
-				DE
-
-B4-82-7B   (hex)		AKG Acoustics GmbH
-B4827B     (base 16)		AKG Acoustics GmbH
-				Lemboeckgasse 21-25
-				  Vienna  1230
-				AT
-
-DC-5E-36   (hex)		Paterson Technology
-DC5E36     (base 16)		Paterson Technology
-				23490 SE 51st Pl
-				Issaquah  WA  98029
-				US
-
-DC-AD-9E   (hex)		GreenPriz
-DCAD9E     (base 16)		GreenPriz
-				549, boulevard Pierre Sauvaigo
-				La Colle sur Loup    06480
-				FR
-
-B8-DF-6B   (hex)		SpotCam Co., Ltd.
-B8DF6B     (base 16)		SpotCam Co., Ltd.
-				12F.-1, No.125, Jianguo Rd.
-				New Taipei City    239
-				TW
-
-9C-88-88   (hex)		Simac Techniek NV
-9C8888     (base 16)		Simac Techniek NV
-				De Run 1101
-				Veldhoven  NB  5503LB
-				NL
-
-10-B2-6B   (hex)		base Co.,Ltd.
-10B26B     (base 16)		base Co.,Ltd.
-				F1 92 building taoyuancun longzhu road
-				Shenzhen  Guangdong  518000
-				CN
-
-4C-F0-2E   (hex)		Vifa Denmark A/S
-4CF02E     (base 16)		Vifa Denmark A/S
-				Mariendalsvej 2A
-				Viborg    DK-8800
-				US
-
-28-8A-1C   (hex)		Juniper Networks
-288A1C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-DC-CE-BC   (hex)		Shenzhen JSR Technology Co.,Ltd.
-DCCEBC     (base 16)		Shenzhen JSR Technology Co.,Ltd.
-				2-3F,E building,Yu Jianfeng science and industry park
-				Shenzhen City  Guangdong  518109
-				CN
-
-18-C8-E7   (hex)		Shenzhen Hualistone Technology Co.,Ltd
-18C8E7     (base 16)		Shenzhen Hualistone Technology Co.,Ltd
-				1708RM,Huafeng HQ Economic Building,
-				Shenzhen  Guangdong  518102
-				CN
-
-A0-3B-1B   (hex)		Inspire Tech
-A03B1B     (base 16)		Inspire Tech
-				No.588-10,Zhongzheng Rd.,Xinzhuang Dist
-				New Taipei  Taiwan  24255
-				TW
-
-7C-CD-3C   (hex)		Guangzhou Juzing Technology Co., Ltd
-7CCD3C     (base 16)		Guangzhou Juzing Technology Co., Ltd
-				Building C Rm 1906-1909
-				Guangzhou  Guangdong  510630
-				US
-
-98-43-DA   (hex)		INTERTECH
-9843DA     (base 16)		INTERTECH
-				3F. 14-9 Sarihyun-Ro. Ilsandong-Gu
-				Goyang-Si  Gyeonggi-Do  410-821
-				KR
-
-08-CA-45   (hex)		Toyou Feiji Electronics Co., Ltd.
-08CA45     (base 16)		Toyou Feiji Electronics Co., Ltd.
-				No.2 Building No.9 Yard, Dijin Road,
-				  Beijing  100095
-				CN
-
-3C-CA-87   (hex)		Iders Incorporated
-3CCA87     (base 16)		Iders Incorporated
-				27047 Oakwood Rd
-				Oakbank  Manitoba  R0E 1J2
-				CA
-
-7C-6A-B3   (hex)		IBC TECHNOLOGIES INC.
-7C6AB3     (base 16)		IBC TECHNOLOGIES INC.
-				1445 CHARLES STREET
-				Vancouver  British Columbia  V5L2S7
-				CA
-
-18-1B-EB   (hex)		Actiontec Electronics, Inc
-181BEB     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-84-A7-83   (hex)		Alcatel Lucent
-84A783     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-04-1A-04   (hex)		WaveIP
-041A04     (base 16)		WaveIP
-				1 Sky street
-				Misgav    20179
-				IL
-
-34-A5-E1   (hex)		Sensorist ApS
-34A5E1     (base 16)		Sensorist ApS
-				Nyhavn 16
-				Copenhagen K  Sjaelland  1051
-				DK
-
-80-79-AE   (hex)		ShanDong Tecsunrise  Co.,Ltd
-8079AE     (base 16)		ShanDong Tecsunrise  Co.,Ltd
-				B316,F-2,QiLu Soft Park,
-				JiNan  ShanDong  250101
-				CN
-
-7C-BD-06   (hex)		AE REFUsol
-7CBD06     (base 16)		AE REFUsol
-				Uracher Str. 91
-				Metzingen  Baden-Württemberg  72555
-				DE
-
-94-BA-56   (hex)		Shenzhen Coship Electronics Co., Ltd.
-94BA56     (base 16)		Shenzhen Coship Electronics Co., Ltd.
-				Rainbow Bldg., North, Hi-Tech Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-38-DB-BB   (hex)		Sunbow Telecom Co., Ltd.
-38DBBB     (base 16)		Sunbow Telecom Co., Ltd.
-				3F, 501-21, Chung Cheng Rd., Hsin Tien Dist.
-				New Taipei City    23148
-				TW
-
-44-8A-5B   (hex)		Micro-Star INT'L CO., LTD.
-448A5B     (base 16)		Micro-Star INT'L CO., LTD.
-				No69, LIde St.
-				Taipei    235
-				TW
-
-6C-4B-7F   (hex)		Vossloh-Schwabe Deutschland GmbH
-6C4B7F     (base 16)		Vossloh-Schwabe Deutschland GmbH
-				Wasenstrasse 25
-				Urbach    73660
-				DE
-
-90-8C-44   (hex)		H.K ZONGMU TECHNOLOGY CO., LTD.
-908C44     (base 16)		H.K ZONGMU TECHNOLOGY CO., LTD.
-				ROOM 604, BUILDING B, 977 SHANGFENG RD
-				  SHANGHAI  201201
-				CN
-
-68-8A-B5   (hex)		EDP Servicos
-688AB5     (base 16)		EDP Servicos
-				Rua Castilho, número 165, 5º andar
-				Lisboa    1070-050
-				PT
-
-24-93-CA   (hex)		Voxtronic Austria
-2493CA     (base 16)		Voxtronic Austria
-				Modecenterstrasse 17  Objekt 1
-				Vienna    1110
-				AT
-
-0C-CB-8D   (hex)		ASCO Numatics GmbH
-0CCB8D     (base 16)		ASCO Numatics GmbH
-				Otto-Hahn-Str. 7-11
-				Oelbronn-Duerrn    75248
-				DE
-
-90-79-90   (hex)		Benchmark Electronics Romania SRL
-907990     (base 16)		Benchmark Electronics Romania SRL
-				Aeroportului no 6 Ghimbav
-				Brasov    507075
-				US
-
-74-0E-DB   (hex)		Optowiz Co., Ltd
-740EDB     (base 16)		Optowiz Co., Ltd
-				D-901 Bundang Techno Park
-				Seongnam-si  Kyeonggi-do  463-760
-				KR
-
-6C-83-66   (hex)		Nanjing SAC Power Grid Automation Co., Ltd.
-6C8366     (base 16)		Nanjing SAC Power Grid Automation Co., Ltd.
-				No.11 Phoenix Road
-				Nanjing  Jiangsu Provience  211100
-				CN
-
-F8-3D-4E   (hex)		Softlink Automation System Co., Ltd
-F83D4E     (base 16)		Softlink Automation System Co., Ltd
-				No.12, Hi-tech South 7th Rd.,
-				Shenzhen  GuangDong  518057
-				CN
-
-74-D4-35   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-74D435     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-78-D9-9F   (hex)		NuCom HK Ltd.
-78D99F     (base 16)		NuCom HK Ltd.
-				Unit B 11/F, Eton Bldg, 288 Des Voeux Rd. Central
-				Hong Kong  Hong Kong  00852
-				CN
-
-14-2B-D2   (hex)		Armtel Ltd.
-142BD2     (base 16)		Armtel Ltd.
-				 33A Smolenskaya str.
-				St.  Petersburg    196084
-				RU
-
-9C-A1-0A   (hex)		SCLE SFE
-9CA10A     (base 16)		SCLE SFE
-				Parc des Aygalades – Bât 10
-				MARSEILLE  PACA  13014
-				FR
-
-88-78-9C   (hex)		Game Technologies SA
-88789C     (base 16)		Game Technologies SA
-				Plac W. Andersa 3
-				Poznan    61894
-				PL
-
-A4-89-5B   (hex)		ARK INFOSOLUTIONS PVT LTD
-A4895B     (base 16)		ARK INFOSOLUTIONS PVT LTD
-				4428, GANESH BAZAR CLOTH MARKET
-				  DELHI  110006
-				IN
-
-D0-9D-0A   (hex)		LINKCOM
-D09D0A     (base 16)		LINKCOM
-				11 Rue du Soleil Levant
-				Clamart    92140
-				FR
-
-EC-21-9F   (hex)		VidaBox LLC
-EC219F     (base 16)		VidaBox LLC
-				240 Madison Ave
-				Garden City Park  NEW YORK  11040
-				US
-
-A8-CC-C5   (hex)		Saab AB (publ)
-A8CCC5     (base 16)		Saab AB (publ)
-				Nobymalmsvagen
-				Linkoping    SE-581 82
-				SE
-
-58-46-8F   (hex)		Koncar Electronics and Informatics
-58468F     (base 16)		Koncar Electronics and Informatics
-				Fallerovo setaliste 22
-				Zagreb  Drvinje  10000
-				HR
-
-98-5D-46   (hex)		PeopleNet Communication
-985D46     (base 16)		PeopleNet Communication
-				4400 Baker Road
-				Minnetonka  Minnesota  55343
-				US
-
-F8-9F-B8   (hex)		YAZAKI Energy System Corporation
-F89FB8     (base 16)		YAZAKI Energy System Corporation
-				1-7-1 YOKOI
-				Shimada -shi,Shizuoka    427-8555
-				JP
-
-F0-F5-AE   (hex)		Adaptrum Inc.
-F0F5AE     (base 16)		Adaptrum Inc.
-				25 E Trimble Rd.
-				San Jose  California  95131
-				US
-
-FC-3F-AB   (hex)		Henan Lanxin Technology Co., Ltd
-FC3FAB     (base 16)		Henan Lanxin Technology Co., Ltd
-				4/F-B, Building No.1, 863 Central China Software Park, No.6 Cuizhu Street, High &amp; New Technology Industries Development Zone
-				Zhengzhou  Henan  450001
-				CN
-
-98-8E-4A   (hex)		NOXUS(BEIJING) TECHNOLOGY CO.,LTD
-988E4A     (base 16)		NOXUS(BEIJING) TECHNOLOGY CO.,LTD
-				02-1205,11/F, No.2 Building,No.8,Worker’s Stadium North Road Chaoyang District
-				  Beijing  100027
-				CN
-
-EC-2A-F0   (hex)		Ypsomed AG
-EC2AF0     (base 16)		Ypsomed AG
-				Brunnmattstrasse 6
-				Burgdorf  BE  3400
-				CH
-
-F8-54-AF   (hex)		ECI Telecom Ltd.
-F854AF     (base 16)		ECI Telecom Ltd.
-				30 Hasivim St.
-				Petah Tikva    49133
-				IL
-
-54-BE-F7   (hex)		PEGATRON CORPORATION
-54BEF7     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-50-B8-88   (hex)		wi2be Tecnologia S/A
-50B888     (base 16)		wi2be Tecnologia S/A
-				Rua Manoel Valdomiro de Macedo, 2285
-				Curitiba  Parana  81170-150
-				BR
-
-7C-83-06   (hex)		Glen Dimplex Nordic as
-7C8306     (base 16)		Glen Dimplex Nordic as
-				Postboks 16
-				Stjoerdal  N-T  7501
-				NO
-
-44-2A-FF   (hex)		E3 Technology, Inc.
-442AFF     (base 16)		E3 Technology, Inc.
-				Martell-house 2F, 2-28-3 Sekimachi-Kita,
-				Nerima-ku  Tokyo  177-0051
-				JP
-
-14-0D-4F   (hex)		Flextronics International
-140D4F     (base 16)		Flextronics International
-				Stretton Green Distribution Centre Langford Way
-				Warrington  Cheshire  WA4 4TQ
-				GB
-
-44-67-55   (hex)		Orbit Irrigation
-446755     (base 16)		Orbit Irrigation
-				P.O. Box 328
-				Bountiful  Utah  84011
-				US
-
-E0-FA-EC   (hex)		Platan sp. z o.o. sp. k.
-E0FAEC     (base 16)		Platan sp. z o.o. sp. k.
-				ul.Platanowa 2
-				Sopot  pomorskie  81-855
-				PL
-
-7C-E5-6B   (hex)		ESEN Optoelectronics Technology Co.,Ltd.
-7CE56B     (base 16)		ESEN Optoelectronics Technology Co.,Ltd.
-				Houcheng Yuanjiaqiao ,Jingang Town
-				Zhangjiagang  Jiangsu  215631
-				CN
-
-D4-4C-9C   (hex)		Shenzhen YOOBAO Technology Co.Ltd
-D44C9C     (base 16)		Shenzhen YOOBAO Technology Co.Ltd
-				F3,A5,Hua Tong Yuan Logistics Center,Minzhi Street,Longhua Town,Bao’an District,Shenzhen City,China
-				Shenzhen  Guangdong  518000
-				CN
-
-20-CE-C4   (hex)		Peraso Technologies
-20CEC4     (base 16)		Peraso Technologies
-				144 Front St. West, Suite 685
-				Toronto  ON  M5J 2L7
-				CA
-
-CC-47-03   (hex)		Intercon Systems Co., Ltd.
-CC4703     (base 16)		Intercon Systems Co., Ltd.
-				#915 Hanlim Human Tower,1-40 Geumjeong-dong
-				Gunpo-si  Gyeonggi-do  435-824
-				KR
-
-AC-CA-8E   (hex)		ODA Technologies
-ACCA8E     (base 16)		ODA Technologies
-				607-A Woorim Lions Valley, #425
-				Incheon    KSXX0009
-				KR
-
-08-8E-4F   (hex)		SF Software Solutions
-088E4F     (base 16)		SF Software Solutions
-				Buchenweg 32
-				Großbettlingen  Baden-Württemberg  72663
-				US
-
-54-05-36   (hex)		Vivago Oy
-540536     (base 16)		Vivago Oy
-				Itsehallintokuja 6
-				  Espoo  FI-02600
-				FI
-
-6C-90-B1   (hex)		SanLogic Inc
-6C90B1     (base 16)		SanLogic Inc
-				2350 Mission College Blvd
-				Santa Clara  CA  95054
-				US
-
-CC-7B-35   (hex)		zte corporation
-CC7B35     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-04-D4-37   (hex)		ZNV
-04D437     (base 16)		ZNV
-				4/F, W1-A, Bldg, Gaoxin S, 1st Ave., Hi-tech Park, Nanshan District, Shenzhen, P.R.C
-				Shenzhen  Guangdong  518057
-				US
-
-CC-F4-07   (hex)		EUKREA ELECTROMATIQUE SARL
-CCF407     (base 16)		EUKREA ELECTROMATIQUE SARL
-				74 AVENUE JEAN JAURES
-				PESSAC  GIRONDE  33600
-				FR
-
-DC-17-92   (hex)		Captivate Network
-DC1792     (base 16)		Captivate Network
-				2 Executive Drive Suite 301
-				Chelmsford  Massachusetts  01824
-				US
-
-28-A2-41   (hex)		exlar corp
-28A241     (base 16)		exlar corp
-				18400 west 77th street
-				chanhassen  mn  55317
-				US
-
-50-98-71   (hex)		Inventum Technologies Private Limited
-509871     (base 16)		Inventum Technologies Private Limited
-				C-70, Phase 2 Extension
-				NOIDA  Uttar Pradesh  201305
-				IN
-
-04-8C-03   (hex)		ThinPAD Technology (Shenzhen)CO.,LTD
-048C03     (base 16)		ThinPAD Technology (Shenzhen)CO.,LTD
-				Room 2305, Xingji Building, Xinsha Road
-				Shenzhen  Guangdong  518104
-				CN
-
-88-46-2A   (hex)		Telechips Inc.
-88462A     (base 16)		Telechips Inc.
-				Luther Building,7-20, Sincheon-dong,Songpa-gu,
-				Seoul  Seoul  138-240
-				KR
-
-C8-02-58   (hex)		ITW GSE ApS
-C80258     (base 16)		ITW GSE ApS
-				Smedebakken 31-33
-				Odense N    5270
-				DK
-
-30-78-6B   (hex)		TIANJIN Golden Pentagon Electronics Co., Ltd.
-30786B     (base 16)		TIANJIN Golden Pentagon Electronics Co., Ltd.
-				No. 196 Rixin Road, Binhai Science Park,
-				  Tianjin  300457
-				CN
-
-20-DF-3F   (hex)		Nanjing SAC Power Grid Automation Co., Ltd.
-20DF3F     (base 16)		Nanjing SAC Power Grid Automation Co., Ltd.
-				No.11 Phoenix Road
-				Nanjing  Jiangsu  211106
-				CN
-
-F8-51-6D   (hex)		Denwa Technology Corp.
-F8516D     (base 16)		Denwa Technology Corp.
-				1931 NW 150 TH AVE
-				Penbroke Pines  Florida  33028
-				US
-
-44-4A-65   (hex)		Silverflare Ltd.
-444A65     (base 16)		Silverflare Ltd.
-				2 Bakers Yard
-				Uxbridge  Greater London  UB8 1JZ
-				GB
-
-74-4B-E9   (hex)		EXPLORER HYPERTECH CO.,LTD
-744BE9     (base 16)		EXPLORER HYPERTECH CO.,LTD
-				7F.-9,NO.112,Xinmin St
-				New Taipei City    235
-				TW
-
-FC-60-18   (hex)		Zhejiang Kangtai Electric Co., Ltd.
-FC6018     (base 16)		Zhejiang Kangtai Electric Co., Ltd.
-				No.5, Kangtai Rd
-				Yueqing  Zhejiang  325605
-				CN
-
-F4-20-12   (hex)		Cuciniale GmbH
-F42012     (base 16)		Cuciniale GmbH
-				Heuriedweg 65
-				Lindau    88131
-				DE
-
-98-B0-39   (hex)		Nokia
-98B039     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-B8-30-A8   (hex)		Road-Track Telematics Development
-B830A8     (base 16)		Road-Track Telematics Development
-				15th Keren Hayesod St.
-				Tirat Hacarmel  Israel  15223
-				IL
-
-4C-D6-37   (hex)		Qsono Electronics Co., Ltd
-4CD637     (base 16)		Qsono Electronics Co., Ltd
-				2nd Floor,Dingxin Industry park,jiayuan Road,East Lake Development Zone
-				Wuhan  Hubei  430074
-				CN
-
-94-36-E0   (hex)		Sichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd
-9436E0     (base 16)		Sichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd
-				Guanghan City, Sichuan province Zhongshan road south three period of 36
-				Deyang Guanghan  Sichuan Province  618300
-				CN
-
-54-22-F8   (hex)		zte corporation
-5422F8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-48-6E-73   (hex)		Pica8, Inc.
-486E73     (base 16)		Pica8, Inc.
-				1032 Elwell Court, Suite 105
-				Palo Alto  CA  94303
-				US
-
-64-05-BE   (hex)		NEW LIGHT LED
-6405BE     (base 16)		NEW LIGHT LED
-				No.50, Siyuan Rd
-				New Taipei    24251
-				TW
-
-64-6E-EA   (hex)		Iskratel d.o.o.
-646EEA     (base 16)		Iskratel d.o.o.
-				Ljubljanska cesta 24a
-				Kranj    4000
-				SI
-
-D0-73-7F   (hex)		Mini-Circuits
-D0737F     (base 16)		Mini-Circuits
-				50 Yosef Levi Street
-				Kiryat Bialik Industrial Zone    27000
-				US
-
-E8-BB-3D   (hex)		Sino Prime-Tech Limited
-E8BB3D     (base 16)		Sino Prime-Tech Limited
-				Room 418, Building 1, Hua Mei Ju (D),
-				Shenzhen  Guangdong  518101
-				CN
-
-28-28-5D   (hex)		Zyxel Communications Corporation
-28285D     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-0C-F0-19   (hex)		Malgn Technology Co., Ltd.
-0CF019     (base 16)		Malgn Technology Co., Ltd.
-				Star Tower #305, 223-25
-				Seongnam-Si  Kyounggi-Do  462-738
-				KR
-
-94-9F-B4   (hex)		ChengDu JiaFaAnTai Technology Co.,Ltd
-949FB4     (base 16)		ChengDu JiaFaAnTai Technology Co.,Ltd
-				8th Floor, Building No.2, Zone A of Wisdom Valley
-				Chengdu  Sichuan  610000
-				CN
-
-40-68-26   (hex)		Thales UK Limited
-406826     (base 16)		Thales UK Limited
-				1 Linthouse Road
-				Glasgow  Scotland  G51 4BZ
-				GB
-
-F8-2B-C8   (hex)		Jiangsu Switter Co., Ltd
-F82BC8     (base 16)		Jiangsu Switter Co., Ltd
-				Room 512, Buliding 8, 118 Nanyuanbei Road
-				Suzhou City  Jiangsu Province  215006
-				CN
-
-60-C3-97   (hex)		2Wire Inc
-60C397     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-E0-7F-88   (hex)		EVIDENCE Network SIA
-E07F88     (base 16)		EVIDENCE Network SIA
-				Zilupes 4A
-				  Rīga  LV-1019
-				LV
-
-1C-7C-C7   (hex)		Coriant GmbH
-1C7CC7     (base 16)		Coriant GmbH
-				St.-Martin-Str. 76
-				Munich  Germany  81541
-				DE
-
-34-1B-22   (hex)		Grandbeing Technology Co., Ltd
-341B22     (base 16)		Grandbeing Technology Co., Ltd
-				B-301,Science and Technology Building Phase II
-				Shenzhen  Guangdong  518000
-				CN
-
-40-56-0C   (hex)		In Home Displays Ltd
-40560C     (base 16)		In Home Displays Ltd
-				Waterside House
-				Edinburgh  Lothian  EH6 6QU
-				GB
-
-58-E0-2C   (hex)		Micro Technic A/S
-58E02C     (base 16)		Micro Technic A/S
-				Smedevaenget 5
-				Aarup    5560
-				DK
-
-78-B3-CE   (hex)		Elo touch solutions
-78B3CE     (base 16)		Elo touch solutions
-				1033 McCarthy Boulevard
-				Milpitas  CA  95035
-				US
-
-88-14-2B   (hex)		Protonic Holland
-88142B     (base 16)		Protonic Holland
-				Factorij 36
-				Zwaag NH  Netherlands  1689 AL
-				NL
-
-A4-FC-CE   (hex)		Security Expert Ltd.
-A4FCCE     (base 16)		Security Expert Ltd.
-				75, Ekaterininskaya Street, of. 105
-				Perm  Perm region  614000
-				RU
-
-34-A6-8C   (hex)		Shine Profit Development Limited
-34A68C     (base 16)		Shine Profit Development Limited
-				Unit 1401B Telecom Tower
-				Kwun Tong  Kowloon  000001
-				HK
-
-34-1A-4C   (hex)		SHENZHEN WEIBU ELECTRONICS CO.,LTD.
-341A4C     (base 16)		SHENZHEN WEIBU ELECTRONICS CO.,LTD.
-				3/F, Block 132,Jindi Industrial Zone
-				Shenzhen  Guangdong  518048
-				CN
-
-04-88-E2   (hex)		Beats Electronics LLC
-0488E2     (base 16)		Beats Electronics LLC
-				1601 Cloverfield Blvd.
-				Santa Monica  California  90404
-				US
-
-A4-7A-CF   (hex)		VIBICOM COMMUNICATIONS INC.
-A47ACF     (base 16)		VIBICOM COMMUNICATIONS INC.
-				900 CORPORATE DRIVE
-				MAHWAH  NEW JERSEY  074030
-				US
-
-BC-26-1D   (hex)		HONG KONG TECON TECHNOLOGY
-BC261D     (base 16)		HONG KONG TECON TECHNOLOGY
-				ROOM 2802,BLOCK A,SHEN FANG OLAZA
-				Shenzhen  Guangdong  518000
-				CN
-
-E8-CE-06   (hex)		SkyHawke Technologies, LLC.
-E8CE06     (base 16)		SkyHawke Technologies, LLC.
-				274 Commerce Park Drive
-				Ridgeland  MS  39157
-				US
-
-C8-F3-86   (hex)		Shenzhen Xiaoniao Technology Co.,Ltd
-C8F386     (base 16)		Shenzhen Xiaoniao Technology Co.,Ltd
-				Floor 13 C-D Yunsong Buliding
-				Futian District, Shenzhen  Guangdong  518040
-				CN
-
-E0-DC-A0   (hex)		Siemens Industrial Automation Products Ltd Chengdu
-E0DCA0     (base 16)		Siemens Industrial Automation Products Ltd Chengdu
-				Tianyuan Road 99
-				Cheng Du  Si Chuan  611731
-				CN
-
-84-2F-75   (hex)		Innokas Group
-842F75     (base 16)		Innokas Group
-				Tarjusojantie 12
-				Kempele  Oulu  90440
-				FI
-
-CC-3C-3F   (hex)		SA.S.S. Datentechnik AG
-CC3C3F     (base 16)		SA.S.S. Datentechnik AG
-				Talhofstr. 32
-				Gilching  Bayern  82205
-				DE
-
-2C-69-BA   (hex)		RF Controls, LLC
-2C69BA     (base 16)		RF Controls, LLC
-				622 Bates Street
-				Saint Louis  Missouri  63111
-				US
-
-D4-BF-7F   (hex)		UPVEL
-D4BF7F     (base 16)		UPVEL
-				13139 Ramona Blvd. #F
-				Irwindale  CA  91706
-				US
-
-2C-72-C3   (hex)		Soundmatters
-2C72C3     (base 16)		Soundmatters
-				8060 Double R Blvd Suite 100
-				Reno  NV  89511
-				US
-
-C4-48-38   (hex)		Satcom Direct, Inc.
-C44838     (base 16)		Satcom Direct, Inc.
-				1901 Hwy A1A
-				Satellite Beach  FL  32937
-				US
-
-C8-DD-C9   (hex)		Lenovo Mobile Communication Technology Ltd.
-C8DDC9     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999,Qishan North 2nd Road,
-				Xiamen   Fujian  361006
-				US
-
-6C-86-86   (hex)		Technonia
-6C8686     (base 16)		Technonia
-				#1101, Hanshin IT Tower 235
-				  Seoul  152-768
-				KR
-
-D4-AC-4E   (hex)		BODi rS, LLC
-D4AC4E     (base 16)		BODi rS, LLC
-				7622 Rickenbacker Drive
-				Gaithersburg  MD  20879
-				US
-
-20-4C-6D   (hex)		Hugo Brennenstuhl Gmbh & Co. KG.
-204C6D     (base 16)		Hugo Brennenstuhl Gmbh & Co. KG.
-				Seestr. 1-3
-				Tuebingen  Baden-Wuerttemberg  72074
-				DE
-
-40-C4-D6   (hex)		ChongQing Camyu Technology Development Co.,Ltd.
-40C4D6     (base 16)		ChongQing Camyu Technology Development Co.,Ltd.
-				4th Floor,Tower of Venus Technology Building ,NO 60 Xing Guang Road
-				  Chong Qing  401121
-				CN
-
-A8-29-4C   (hex)		Precision Optical Transceivers, Inc.
-A8294C     (base 16)		Precision Optical Transceivers, Inc.
-				2328 Innovation Way
-				Rochester  NY  14624
-				US
-
-70-C6-AC   (hex)		Bosch Automotive Aftermarket
-70C6AC     (base 16)		Bosch Automotive Aftermarket
-				Franz Oechsle Str. 4
-				Plochingen    D-73201
-				DE
-
-7C-05-07   (hex)		PEGATRON CORPORATION
-7C0507     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-88-09-05   (hex)		MTMCommunications
-880905     (base 16)		MTMCommunications
-				2-3-10 Honmachi
-				Ichinomiya-shi  Aichi-ken  491-0853
-				US
-
-30-D4-6A   (hex)		Autosales Incorporated
-30D46A     (base 16)		Autosales Incorporated
-				1200 Souteat Avenue
-				Tallmadge  Ohio  44278
-				US
-
-28-2C-B2   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-282CB2     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-64-E5-99   (hex)		EFM Networks
-64E599     (base 16)		EFM Networks
-				6F, Benposra II 1197-1 Bojeong Giheung Gu
-				Yong In  Kyunggi do  446913
-				KR
-
-30-89-99   (hex)		Guangdong East Power Co.,
-308999     (base 16)		Guangdong East Power Co.,
-				No.6 Northern Industry Road,Songshan lake SCI&TECH Industry Park
-				DongGuan  GuangDong  523808
-				CN
-
-C8-93-46   (hex)		MXCHIP Company Limited
-C89346     (base 16)		MXCHIP Company Limited
-				Room 811,Tongpu Building,
-				Shanghai  Shanghai  200333
-				CN
-
-F4-B3-81   (hex)		WindowMaster A/S
-F4B381     (base 16)		WindowMaster A/S
-				Skelstedet 13
-				Vedbaek    2950
-				DK
-
-74-F1-02   (hex)		Beijing HCHCOM Technology Co., Ltd
-74F102     (base 16)		Beijing HCHCOM Technology Co., Ltd
-				Patton Building 8 floor,11# Wan liu zhong lu,Haidian District,Beijing,China
-				Beijing  China  100089
-				CN
-
-A0-86-1D   (hex)		Chengdu Fuhuaxin Technology co.,Ltd
-A0861D     (base 16)		Chengdu Fuhuaxin Technology co.,Ltd
-				Room 1608,Building G1,No.1800 of Yizhou Ave
-				Chengdu  Sichuan  610041
-				CN
-
-50-8D-6F   (hex)		CHAHOO Limited
-508D6F     (base 16)		CHAHOO Limited
-				B-4thFloor, 631
-				Sungnam  Gyeonggi  463-400
-				KR
-
-E8-DE-27   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-E8DE27     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-94-AC-CA   (hex)		trivum technologies GmbH
-94ACCA     (base 16)		trivum technologies GmbH
-				Heusteigstraße 37
-				Stuttgart    70108
-				DE
-
-90-82-60   (hex)		IEEE 1904.1 Working Group
-908260     (base 16)		IEEE 1904.1 Working Group
-				1351 Redwood Way,
-				Petaluma  CA  94954
-				US
-
-D4-EE-07   (hex)		HIWIFI Co., Ltd.
-D4EE07     (base 16)		HIWIFI Co., Ltd.
-				Room 1002, Zhongguancun e-Plaza A,
-				Haidian District  Beijing  100080
-				CN
-
-FC-AD-0F   (hex)		QTS NETWORKS
-FCAD0F     (base 16)		QTS NETWORKS
-				Jinyanlong Plaza, Huilongguan,
-				  Beijing  100092
-				CN
-
-98-4C-04   (hex)		Zhangzhou Keneng Electrical Equipment Co Ltd
-984C04     (base 16)		Zhangzhou Keneng Electrical Equipment Co Ltd
-				Keneng Technology Park,No.12 Wuqiao Zhong Rd
-				Zhangzhou  Fujian  363005
-				CN
-
-A4-E9-91   (hex)		SISTEMAS AUDIOVISUALES ITELSIS S.L.
-A4E991     (base 16)		SISTEMAS AUDIOVISUALES ITELSIS S.L.
-				POL.IND. DEL TAMBRE
-				SANTIAGO COMPOSTELA  A CORUÑA  15890
-				ES
-
-3C-86-A8   (hex)		Sangshin elecom .co,, LTD
-3C86A8     (base 16)		Sangshin elecom .co,, LTD
-				614-1 Wolhari Suhmyon
-				  Choongnam  339-814
-				KR
-
-84-F4-93   (hex)		OMS spol. s.r.o.
-84F493     (base 16)		OMS spol. s.r.o.
-				Dojc 419
-				Dojc  Slovakia  90602
-				SK
-
-BC-D1-77   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-BCD177     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-AC-DB-DA   (hex)		Shenzhen Geniatech Inc, Ltd
-ACDBDA     (base 16)		Shenzhen Geniatech Inc, Ltd
-				18th F, GDC Building,No.9 ,Gaoxin Central Avenue 3rd
-				Shenzhen  GuangDong  518057
-				CN
-
-D4-27-51   (hex)		Infopia Co., Ltd
-D42751     (base 16)		Infopia Co., Ltd
-				891, Hogye-dong, Dongan-gu
-				Anyang  Gyeonggi  431-080
-				KR
-
-10-3D-EA   (hex)		HFC Technology (Beijing) Ltd. Co.
-103DEA     (base 16)		HFC Technology (Beijing) Ltd. Co.
-				Building #3, Room 1214
-				Beijing  AP (Area Pacific)  100193
-				CN
-
-F0-5D-C8   (hex)		Duracell Powermat
-F05DC8     (base 16)		Duracell Powermat
-				230 Park Ave, suit 910
-				new york  NY  10169
-				US
-
-CC-5D-57   (hex)		Information  System Research Institute,Inc.
-CC5D57     (base 16)		Information  System Research Institute,Inc.
-				Metro city minamiikebukuro-bldg.5F
-				Toshima-ku  Tokyo  171-0022
-				JP
-
-64-C6-67   (hex)		Barnes&Noble
-64C667     (base 16)		Barnes&Noble
-				400 Hamilton Avenue
-				Palo Alto  CA  94301
-				US
-
-F0-F2-60   (hex)		Mobitec AB
-F0F260     (base 16)		Mobitec AB
-				Box 97
-				Herrljunga  VG  52421
-				SE
-
-04-4C-EF   (hex)		Fujian Sanao Technology Co.,Ltd
-044CEF     (base 16)		Fujian Sanao Technology Co.,Ltd
-				Fuzhou shibei bicyclic road no. 117
-				Fuzhou  Fujian  350000
-				CN
-
-4C-80-4F   (hex)		Armstrong Monitoring Corp
-4C804F     (base 16)		Armstrong Monitoring Corp
-				215 Colonnade Rd
-				Nepean  Ontario  K2E 7K3
-				CA
-
-7C-D7-62   (hex)		Freestyle Technology Pty Ltd
-7CD762     (base 16)		Freestyle Technology Pty Ltd
-				1A 24 Ricketts Road
-				Mount Waverley  Victoria  3149
-				AU
-
-90-1D-27   (hex)		zte corporation
-901D27     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-9C-31-78   (hex)		Foshan Huadian Intelligent Communications Teachnologies Co.,Ltd
-9C3178     (base 16)		Foshan Huadian Intelligent Communications Teachnologies Co.,Ltd
-				Building B,No.8 of Shishan Industrial Avenue
-				Foshan  Guangdong  528225
-				CN
-
-B0-C9-5B   (hex)		Beijing Symtech CO.,LTD
-B0C95B     (base 16)		Beijing Symtech CO.,LTD
-				Technology Park Building 2-1,The Hung Fu Pioneer Park
-				  Beijing  102209
-				CN
-
-4C-CA-53   (hex)		Skyera, Inc.
-4CCA53     (base 16)		Skyera, Inc.
-				1704 Automation Pkwy
-				San Jose  CA  95131
-				US
-
-90-FF-79   (hex)		Metro Ethernet Forum
-90FF79     (base 16)		Metro Ethernet Forum
-				6033 W. Century Boulevard
-				Los Angeles  California  90045
-				US
-
-B0-14-08   (hex)		LIGHTSPEED INTERNATIONAL CO.
-B01408     (base 16)		LIGHTSPEED INTERNATIONAL CO.
-				No.20, LANE 526 NIUPU East RD.
-				Hsinchu  Not US/Canada  30091
-				TW
-
-08-1D-FB   (hex)		Shanghai Mexon Communication Technology Co.,Ltd
-081DFB     (base 16)		Shanghai Mexon Communication Technology Co.,Ltd
-				Floor4-5, Unit B, Building 5 ,Lane 128, Jiujing Road
-				Shanghai  Shanghai  201615
-				CN
-
-98-3F-9F   (hex)		China SSJ (Suzhou) Network Technology Inc.
-983F9F     (base 16)		China SSJ (Suzhou) Network Technology Inc.
-				399 Linquan St., Dongnan Building 411
-				Suzhou  Jiangsu  215123
-				CN
-
-B8-38-CA   (hex)		Kyokko Tsushin System CO.,LTD
-B838CA     (base 16)		Kyokko Tsushin System CO.,LTD
-				2-25-7 sakado,Takatsu-ku
-				Kawasaki  Kanagawa  213-0012
-				JP
-
-C4-4E-AC   (hex)		Shenzhen Shiningworth Technology Co., Ltd.
-C44EAC     (base 16)		Shenzhen Shiningworth Technology Co., Ltd.
-				Room 610, Block B, Huameiju Business Center,
-				Shenzhen  Guangdong  518000
-				CN
-
-A8-01-80   (hex)		IMAGO Technologies GmbH
-A80180     (base 16)		IMAGO Technologies GmbH
-				Strassheimer Str. 45
-				Friedberg  Hessen  61169
-				DE
-
-0C-55-21   (hex)		Axiros GmbH
-0C5521     (base 16)		Axiros GmbH
-				Altlaufstrasse 34
-				Munich Hoehenkirchen  Bavaria  85635
-				DE
-
-68-A4-0E   (hex)		BSH Hausgeräte GmbH
-68A40E     (base 16)		BSH Hausgeräte GmbH
-				Im Gewerbepark B35
-				Regensburg  Bayern  93059
-				DE
-
-F4-C6-D7   (hex)		blackned GmbH
-F4C6D7     (base 16)		blackned GmbH
-				Am Hartholz 21
-				Alling  Bavaria  82239
-				DE
-
-D4-CA-6E   (hex)		u-blox AG
-D4CA6E     (base 16)		u-blox AG
-				Zuercherstrasse 68
-				Thalwil    8800
-				CH
-
-5C-43-D2   (hex)		HAZEMEYER
-5C43D2     (base 16)		HAZEMEYER
-				ZI Route de Grugies
-				GAUCHY  FRANCE  02430
-				FR
-
-D8-09-C3   (hex)		Cercacor Labs
-D809C3     (base 16)		Cercacor Labs
-				189 Technology Dr
-				Irvine  CA  92618
-				US
-
-E0-C2-B7   (hex)		Masimo Corporation
-E0C2B7     (base 16)		Masimo Corporation
-				40 Parker
-				Irvine  CA  92618
-				US
-
-A0-19-17   (hex)		Bertel S.p.a.
-A01917     (base 16)		Bertel S.p.a.
-				Frazione Rimale, Via Emilia Ovest 61
-				Fidenza  Parma  43036
-				IT
-
-68-B8-D9   (hex)		Act KDE, Inc.
-68B8D9     (base 16)		Act KDE, Inc.
-				196-14, Bangi-dong, Songpa-gu
-				Seoul    138-834
-				KR
-
-90-CC-24   (hex)		Synaptics, Inc
-90CC24     (base 16)		Synaptics, Inc
-				1251 McKay Drive
-				San Jose  CA   95131-1709
-				US
-
-2C-E8-71   (hex)		Alert Metalguard ApS
-2CE871     (base 16)		Alert Metalguard ApS
-				Vester Voldgade 104, st, th
-				Copenhagen V    1552
-				DK
-
-F8-7B-62   (hex)		FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch
-F87B62     (base 16)		FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch
-				6F., No.118, Ln. 235, Baociao Rd., Sindian City, Taipei County 231, Taiwan  R.O.C.
-				Taipei    231
-				TW
-
-40-27-0B   (hex)		Mobileeco Co., Ltd
-40270B     (base 16)		Mobileeco Co., Ltd
-				#2126, IT Tower B, Keumkang Penterium Bldg, 810
-				Anyang City  Kyunggi-Do  431810
-				KR
-
-74-FE-48   (hex)		ADVANTECH CO., LTD.
-74FE48     (base 16)		ADVANTECH CO., LTD.
-				NO.1, Alley 20, Lane 26
-				  TAIPEI  231
-				TW
-
-80-B9-5C   (hex)		ELFTECH Co., Ltd.
-80B95C     (base 16)		ELFTECH Co., Ltd.
-				174, Daehyeon Techno World 6F 609,
-				Uiwang-Si  Gyeonggi-Do  437-753
-				KR
-
-38-B5-BD   (hex)		E.G.O. Elektro-Ger
-38B5BD     (base 16)		E.G.O. Elektro-Ger
-				Einkauf
-				Oberderdingen    75038
-				DE
-
-20-91-8A   (hex)		PROFALUX
-20918A     (base 16)		PROFALUX
-				377 rue des Cypr
-				THYEZ  Haute Savoie  74300
-				FR
-
-E4-EE-FD   (hex)		MR&D Manufacturing
-E4EEFD     (base 16)		MR&D Manufacturing
-				Viale dell'Unione Europea, 8
-				Gallarate  Varese  21013
-				US
-
-10-5C-BF   (hex)		DuroByte Inc
-105CBF     (base 16)		DuroByte Inc
-				875 Foster Ave, Unit 101
-				Windsor  Ontario  N8X4W3
-				CA
-
-A4-6E-79   (hex)		DFT System Co.Ltd
-A46E79     (base 16)		DFT System Co.Ltd
-				Room 6B XINHAOFANG Building
-				SHENZHEN  GUANGDONG  518052
-				CN
-
-C8-8A-83   (hex)		Dongguan HuaHong Electronics Co.,Ltd
-C88A83     (base 16)		Dongguan HuaHong Electronics Co.,Ltd
-				NO.25,Xing Er Road,Chen Wu Industrial Zone,Wusha Village,Chang£§an Town
-				Dongguan City  China/Guangdong  523858
-				CN
-
-8C-C5-E1   (hex)		ShenZhen Konka Telecommunication Technology Co.,Ltd
-8CC5E1     (base 16)		ShenZhen Konka Telecommunication Technology Co.,Ltd
-				No.9008 Shennan Road
-				ShenZhen  GuangDong  518053
-				CN
-
-64-A3-41   (hex)		Wonderlan (Beijing) Technology Co., Ltd.
-64A341     (base 16)		Wonderlan (Beijing) Technology Co., Ltd.
-				Room 04D, Building D, KeShi Plaza
-				 Haidian District  Beijing  100085
-				CN
-
-78-98-FD   (hex)		Q9 Networks Inc.
-7898FD     (base 16)		Q9 Networks Inc.
-				Suite 4400, PO Box 235
-				Toronto  ON  M5K 1J3
-				CA
-
-D0-63-B4   (hex)		SolidRun Ltd.
-D063B4     (base 16)		SolidRun Ltd.
-				P.O Box 50782
-				Nazareth  ISRAEL  16165
-				IL
-
-9C-54-1C   (hex)		Shenzhen My-power Technology Co.,Ltd
-9C541C     (base 16)		Shenzhen My-power Technology Co.,Ltd
-				202¬Building 3¬Shenzhen Software Park
-				Shenzhen  Nanshan  518000
-				CN
-
-8C-33-30   (hex)		EmFirst Co., Ltd.
-8C3330     (base 16)		EmFirst Co., Ltd.
-				701 Suwon Venture Center
-				Suwon  Gyeonggi-do  442-833
-				KR
-
-08-7B-AA   (hex)		SVYAZKOMPLEKTSERVICE, LLC
-087BAA     (base 16)		SVYAZKOMPLEKTSERVICE, LLC
-				Lenskaya 2-21
-				Moscow    129327
-				US
-
-24-F2-DD   (hex)		Radiant Zemax LLC
-24F2DD     (base 16)		Radiant Zemax LLC
-				22908 NE Alder Crest Dr NE Ste 100
-				Redmond  WA  98053
-				US
-
-20-B5-C6   (hex)		Mimosa Networks
-20B5C6     (base 16)		Mimosa Networks
-				656 N. Santa Cruz. Ave., Suite B
-				Los Gatos  CA  95030
-				US
-
-E4-E4-09   (hex)		LEIFHEIT AG
-E4E409     (base 16)		LEIFHEIT AG
-				Leifhheitstreet
-				Nassau  Rheinland-Pfalz  56377
-				DE
-
-B8-77-C3   (hex)		METER Group
-B877C3     (base 16)		METER Group
-				2365 NE Hopkins Court
-				Pullman  WA  99163
-				US
-
-00-4D-32   (hex)		Andon Health Co.,Ltd.
-004D32     (base 16)		Andon Health Co.,Ltd.
-				NO.3Jin PIng Road Ya An Street
-				Tianjin    300190
-				CN
-
-FC-A9-B0   (hex)		MIARTECH (SHANGHAI),INC.
-FCA9B0     (base 16)		MIARTECH (SHANGHAI),INC.
-				3F,Building 4,No 290 Zhangheng Road Zhangjiang Hi-Tech Park,Pudong New District Shanghai,P.R.China
-				SHANGHAI  SHANGHAI  201204
-				CN
-
-94-DE-80   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-94DE80     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				
-				Pin-Jen  Taoyuan  324
-				TW
-
-2C-44-1B   (hex)		Spectrum Medical Limited
-2C441B     (base 16)		Spectrum Medical Limited
-				Harrier 4, Meteor Business Park
-				Gloucester    GL2 9QL
-				US
-
-EC-49-93   (hex)		Qihan Technology Co., Ltd 
-EC4993     (base 16)		Qihan Technology Co., Ltd 
-				20th Floor,Times Technology BuildingNo.7028,Shennan Road,Futian,
-				Shenzhen  Guangdong  518040
-				CN
-
-B0-AC-FA   (hex)		FUJITSU LIMITED
-B0ACFA     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-8C-E0-81   (hex)		zte corporation
-8CE081     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A4-4E-2D   (hex)		Adaptive Wireless Solutions, LLC
-A44E2D     (base 16)		Adaptive Wireless Solutions, LLC
-				577 Main Street
-				Hudson  MA  01749
-				US
-
-0C-CD-FB   (hex)		EDIC Systems Inc.
-0CCDFB     (base 16)		EDIC Systems Inc.
-				1-3-7 Nakamachidai
-				Yokohama  Kanagawa  224-0041
-				JP
-
-9C-8D-1A   (hex)		INTEG process group inc
-9C8D1A     (base 16)		INTEG process group inc
-				2919 E Hardies Rd, First Floor
-				Gibsonia  PA  15044
-				US
-
-48-03-62   (hex)		DESAY ELECTRONICS(HUIZHOU)CO.,LTD
-480362     (base 16)		DESAY ELECTRONICS(HUIZHOU)CO.,LTD
-				BuildingA,No.3 Desay Industrial Zone
-				Huizhou  Guangdong  516029
-				CN
-
-18-67-3F   (hex)		Hanover Displays Limited
-18673F     (base 16)		Hanover Displays Limited
-				Unit 24
-				Lewes  East Sussex  BN8 6JL
-				GB
-
-7C-0A-50   (hex)		J-MEX Inc.
-7C0A50     (base 16)		J-MEX Inc.
-				B2, 3F, No.1, Li-Hsin 1st Road,
-				Hsinchu  Taiwan  300
-				TW
-
-50-11-EB   (hex)		SilverNet Ltd
-5011EB     (base 16)		SilverNet Ltd
-				16 Cocran Close
-				Milton Keynes  Bucks  MK8 0AJ
-				GB
-
-54-DF-63   (hex)		Intrakey technologies GmbH
-54DF63     (base 16)		Intrakey technologies GmbH
-				Wiener Strasse 114-116
-				Dresden  Saxony  01219
-				DE
-
-40-F2-E9   (hex)		IBM
-40F2E9     (base 16)		IBM
-				3039 E Cornwallis Rd
-				Research Triangle Park  NC  27709
-				US
-
-74-4D-79   (hex)		Arrive Systems Inc.
-744D79     (base 16)		Arrive Systems Inc.
-				1404 Franklin Street, # 350 
-				Oakland  CA  94612
-				US
-
-9C-04-73   (hex)		Tecmobile (International) Ltd. 
-9C0473     (base 16)		Tecmobile (International) Ltd. 
-				Unit L, Braintree Industrial Estate, 
-				    HA4 0EJ 
-				GB
-
-B4-DF-FA   (hex)		Litemax Electronics Inc.
-B4DFFA     (base 16)		Litemax Electronics Inc.
-				8F, No.137,Lane 235
-				Shin-dian-Dist  New Taipei  23145
-				TW
-
-68-1C-A2   (hex)		Rosewill Inc.
-681CA2     (base 16)		Rosewill Inc.
-				17708 Rowland St.,
-				City of Industry  CA  91748
-				US
-
-60-46-16   (hex)		XIAMEN VANN INTELLIGENT CO., LTD
-604616     (base 16)		XIAMEN VANN INTELLIGENT CO., LTD
-				UNIT 101£¬NO.28 GUANRI RD., SOFTWARE PARK ¢ò
-				XIAMEN  FUJIAN  361009
-				CN
-
-E4-56-14   (hex)		Suttle Apparatus
-E45614     (base 16)		Suttle Apparatus
-				1001 East Highway 212
-				Hector  MN  55342
-				US
-
-3C-83-B5   (hex)		Advance Vision Electronics Co. Ltd.
-3C83B5     (base 16)		Advance Vision Electronics Co. Ltd.
-				6F, No. 199, Lide St. Jhonghe Dist
-				New Taipei City, Jhonghe Dist    23556
-				TW
-
-28-A1-92   (hex)		GERP Solution
-28A192     (base 16)		GERP Solution
-				Rua Costa Aguiar, 1710
-				São Paulo  SP  04204002
-				BR
-
-10-6F-EF   (hex)		Ad-Sol Nissin Corp
-106FEF     (base 16)		Ad-Sol Nissin Corp
-				Rivage Shinagawa, 4-1-8 Kounan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-6C-40-C6   (hex)		Nimbus Data, Inc.
-6C40C6     (base 16)		Nimbus Data, Inc.
-				5151 California Ave, Ste 100
-				Irvine  CA  92617
-				US
-
-10-48-B1   (hex)		Beijing Duokan Technology Limited
-1048B1     (base 16)		Beijing Duokan Technology Limited
-				Room 1105, Changxin Building, No.39 Anding Road
-				Chaoyang District  Beijing  100029
-				CN
-
-D4-93-A0   (hex)		Fidelix Oy
-D493A0     (base 16)		Fidelix Oy
-				Martinkyläntie 41
-				VANTAA  International  01720
-				FI
-
-08-EB-ED   (hex)		World Elite Technology Co.,LTD
-08EBED     (base 16)		World Elite Technology Co.,LTD
-				6/F Liyuan floor ,Dragon City North Road on the 3rd
-				ShenZhen  GuangDong  518100
-				CN
-
-DC-9F-A4   (hex)		Nokia Corporation
-DC9FA4     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-44-C3-9B   (hex)		OOO RUBEZH NPO
-44C39B     (base 16)		OOO RUBEZH NPO
-				Pionerskaya 11a
-				Bratsk  Irkutsk  665717
-				RU
-
-C4-45-67   (hex)		SAMBON PRECISON and ELECTRONICS
-C44567     (base 16)		SAMBON PRECISON and ELECTRONICS
-				204, Samjeong-dong, Ojeong-gu
-				Bucheon-city   Kyeonggi-do  421-810
-				KR
-
-48-F8-B3   (hex)		Cisco-Linksys, LLC
-48F8B3     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-D8-D2-7C   (hex)		JEMA ENERGY, SA
-D8D27C     (base 16)		JEMA ENERGY, SA
-				Pº Circuito nº10
-				Lasarte-Oria  Guipuzcoa  20160
-				ES
-
-B0-12-03   (hex)		Dynamics Hong Kong Limited
-B01203     (base 16)		Dynamics Hong Kong Limited
-				Room A4, 3/F, Friend's House , No.6A Carnarvon Road,
-				    999077
-				HK
-
-98-86-B1   (hex)		Flyaudio corporation (China)
-9886B1     (base 16)		Flyaudio corporation (China)
-				No.16 Mingzhu RD Economic&Technology
-				Guangzhou  Guangdong Province  510730
-				CN
-
-70-93-F8   (hex)		Space Monkey, Inc.
-7093F8     (base 16)		Space Monkey, Inc.
-				7707 south main street
-				Midvale  Utah  84047
-				US
-
-28-B3-AB   (hex)		Genmark Automation
-28B3AB     (base 16)		Genmark Automation
-				1201 Cadillac Ct
-				Milpitas  CA  95035
-				US
-
-C4-E7-BE   (hex)		SCSpro Co.,Ltd
-C4E7BE     (base 16)		SCSpro Co.,Ltd
-				#1203, KCC welltz valley 470-8
-				Seoul  Korea  153-710
-				KR
-
-58-87-4C   (hex)		LITE-ON CLEAN ENERGY TECHNOLOGY CORP.
-58874C     (base 16)		LITE-ON CLEAN ENERGY TECHNOLOGY CORP.
-				3F, 392, Ruey Kuang Road, Neihu,
-				Taipei    11492
-				TW
-
-28-91-D0   (hex)		Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH
-2891D0     (base 16)		Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH
-				Tabbertstraße 10
-				Berlin    12459
-				DE
-
-C0-BD-42   (hex)		ZPA Smart Energy a.s.
-C0BD42     (base 16)		ZPA Smart Energy a.s.
-				Komenskeho 821
-				Trutnov    54101
-				CZ
-
-FC-52-CE   (hex)		Control iD
-FC52CE     (base 16)		Control iD
-				Rua Hungria, 574
-				São Paulo  SP  01455-000
-				BR
-
-5C-4A-26   (hex)		Enguity Technology Corp
-5C4A26     (base 16)		Enguity Technology Corp
-				2020 Pennsylvania Ave., NW
-				Washington  DC  20006
-				US
-
-60-F2-EF   (hex)		VisionVera International Co., Ltd.
-60F2EF     (base 16)		VisionVera International Co., Ltd.
-				A1103 Gehua Building
-				  Beijing  100007
-				CN
-
-C0-3F-2A   (hex)		Biscotti, Inc.
-C03F2A     (base 16)		Biscotti, Inc.
-				5900 South Lake Forest Drive
-				McKinney  TX  75070
-				US
-
-38-1C-4A   (hex)		SIMCom Wireless Solutions Co.,Ltd.
-381C4A     (base 16)		SIMCom Wireless Solutions Co.,Ltd.
-				Building A,SIM Technology Building,No.633,Jinzhong Road,
-				  Shanghai  200335
-				CN
-
-D8-C6-91   (hex)		Hichan Technology Corp.
-D8C691     (base 16)		Hichan Technology Corp.
-				12F., No.2, Jian 8th Rd., Zhonghe Dist
-				New Taipei City    23511
-				TW
-
-E4-3F-A2   (hex)		Wuxi DSP Technologies Inc.
-E43FA2     (base 16)		Wuxi DSP Technologies Inc.
-				Rm A801,530Mansion,International High-Tech Park,Qingyuan Road
-				Wuxi  Jiangsu  214000
-				US
-
-F4-B7-2A   (hex)		TIME INTERCONNECT LTD
-F4B72A     (base 16)		TIME INTERCONNECT LTD
-				6/F, Photonics Centre
-				    
-				HK
-
-74-99-75   (hex)		IBM Corporation
-749975     (base 16)		IBM Corporation
-				4400 North First Street
-				San Jose  CA  95134
-				US
-
-2C-62-5A   (hex)		Finest Security Systems Co., Ltd
-2C625A     (base 16)		Finest Security Systems Co., Ltd
-				12F, No.103, Sec3, Nan King E. RD
-				Taipei    104
-				US
-
-20-74-CF   (hex)		Shenzhen Voxtech Co.,Ltd
-2074CF     (base 16)		Shenzhen Voxtech Co.,Ltd
-				4/F East, Building 4, Minqi Science&Technology Park, Pingshan,
-				Shenzhen  Guangdong  518055
-				CN
-
-E0-F5-CA   (hex)		CHENG UEI PRECISION INDUSTRY CO.,LTD.
-E0F5CA     (base 16)		CHENG UEI PRECISION INDUSTRY CO.,LTD.
-				No. 18, ZhongShan Rd., TuCheng Dist.,
-				New Taipei City  Taiwan  23680
-				TW
-
-A8-EF-26   (hex)		Tritonwave
-A8EF26     (base 16)		Tritonwave
-				795 Lakeshore Dr, Suite 307
-				  Quebec  H9S 0A8
-				CA
-
-20-DC-93   (hex)		Cheetah Hi-Tech, Inc.
-20DC93     (base 16)		Cheetah Hi-Tech, Inc.
-				Rm 804, No. 5, Sec. 2, Anhe Rd.
-				Taipei  Taiwan  10680
-				TW
-
-44-23-AA   (hex)		Farmage Co., Ltd.
-4423AA     (base 16)		Farmage Co., Ltd.
-				166-8 Kanazawa Toubetsu
-				  Hokkaido  061-0212
-				JP
-
-7C-FE-28   (hex)		Salutron Inc.
-7CFE28     (base 16)		Salutron Inc.
-				40979 Encyclopedia Circle
-				Fremont  CA  94538
-				US
-
-E8-10-2E   (hex)		Really Simple Software, Inc
-E8102E     (base 16)		Really Simple Software, Inc
-				P.O. Box 1086
-				Tiburon  California  94920
-				US
-
-0C-56-5C   (hex)		HyBroad Vision (Hong Kong) Technology Co Ltd
-0C565C     (base 16)		HyBroad Vision (Hong Kong) Technology Co Ltd
-				Unit 1808 18/F Tower 3 Enterprise Square
-				Kowloon Bay    
-				HK
-
-8C-6A-E4   (hex)		Viogem Limited
-8C6AE4     (base 16)		Viogem Limited
-				Paddock House
-				Orlingbury  Northamptonshire  NN141JH
-				GB
-
-54-39-68   (hex)		Edgewater Networks Inc
-543968     (base 16)		Edgewater Networks Inc
-				2895 Northwestern Parkway
-				Santa Clara  CA  95051
-				US
-
-44-0C-FD   (hex)		NetMan Co., Ltd.
-440CFD     (base 16)		NetMan Co., Ltd.
-				Rm 406, DIP, 2139, Daemyeong-dong,
-				Daegu    705-701
-				KR
-
-8C-D3-A2   (hex)		VisSim AS
-8CD3A2     (base 16)		VisSim AS
-				Vollveien 5
-				Horten  Vestfold  3183
-				NO
-
-D8-2D-E1   (hex)		Tricascade Inc.
-D82DE1     (base 16)		Tricascade Inc.
-				5020 Campus Drv.
-				Newport Beach  CA  92660
-				US
-
-14-35-8B   (hex)		Mediabridge Products, LLC.
-14358B     (base 16)		Mediabridge Products, LLC.
-				1951 Old Cuthbert Rd
-				Cherry Hill  New Jersey  08034
-				US
-
-00-F4-03   (hex)		Orbis Systems Oy
-00F403     (base 16)		Orbis Systems Oy
-				Taivaltie 5
-				Vantaa    01610
-				FI
-
-54-73-98   (hex)		Toyo Electronics Corporation
-547398     (base 16)		Toyo Electronics Corporation
-				1860-38, Simoakasaka
-				Kawagoe  Saitama  3501155
-				JP
-
-E0-A3-0F   (hex)		Pevco
-E0A30F     (base 16)		Pevco
-				1401 Tangier Drive
-				Baltimore  MD  21220
-				US
-
-20-44-3A   (hex)		Schneider Electric Asia Pacific Ltd
-20443A     (base 16)		Schneider Electric Asia Pacific Ltd
-				13F East Wing, Warwick House, Taikoo Place
-				Quarry Bay    
-				HK
-
-C4-39-3A   (hex)		SMC Networks Inc
-C4393A     (base 16)		SMC Networks Inc
-				20 Mason
-				Irvine  CA  92618
-				US
-
-5C-24-79   (hex)		Baltech AG
-5C2479     (base 16)		Baltech AG
-				Lilienthalstrasse 27
-				Hallbergmoos    85399
-				DE
-
-EC-93-27   (hex)		MEMMERT GmbH + Co. KG
-EC9327     (base 16)		MEMMERT GmbH + Co. KG
-				Aeussere Rittersbacher Strasse 38
-				Schwabach  Bavaria  91126
-				DE
-
-A0-EF-84   (hex)		Seine Image Int'l Co., Ltd
-A0EF84     (base 16)		Seine Image Int'l Co., Ltd
-				6F,4Building, NO.63,Mingz North Road
-				ZhuHai    519075
-				CN
-
-64-51-7E   (hex)		LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.
-64517E     (base 16)		LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.
-				NO.19.Jian she Road,Shi ma Village,Tang xia  Town,Dong guan,Guang dong,China
-				Dong guan  Guang dong  523731
-				CN
-
-D4-3D-7E   (hex)		Micro-Star Int'l Co, Ltd
-D43D7E     (base 16)		Micro-Star Int'l Co, Ltd
-				No.69, Lide St., Jhonghe City
-				Taipei County    235
-				US
-
-AC-D9-D6   (hex)		tci GmbH
-ACD9D6     (base 16)		tci GmbH
-				Ludwig-Rinn-Straße 10-14
-				Heuchelheim  Hessen  35452
-				US
-
-48-28-2F   (hex)		zte corporation
-48282F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-60-CB-FB   (hex)		AirScape Inc.
-60CBFB     (base 16)		AirScape Inc.
-				625 Charles Way
-				Medford  OR  97501
-				US
-
-7C-16-0D   (hex)		Saia-Burgess Controls AG
-7C160D     (base 16)		Saia-Burgess Controls AG
-				Bahnhofstrasse 18
-				Murten  FR  3280
-				CH
-
-A4-97-BB   (hex)		Hitachi Industrial Equipment Systems Co.,Ltd
-A497BB     (base 16)		Hitachi Industrial Equipment Systems Co.,Ltd
-				3, Kanda Neribei-cho
-				Chiyoda-ku  Tokyo  101-0022
-				US
-
-4C-54-27   (hex)		Linepro Sp. z o.o.
-4C5427     (base 16)		Linepro Sp. z o.o.
-				ul. Miedziana 11
-				Warszawa  mazowieckie  00-835
-				PL
-
-80-D1-8B   (hex)		Hangzhou I'converge Technology Co.,Ltd
-80D18B     (base 16)		Hangzhou I'converge Technology Co.,Ltd
-				No.618 Xixi Road,
-				Hangzhou  Zhejiang  310012
-				CN
-
-40-88-E0   (hex)		Beijing Ereneben Information Technology Limited Shenzhen Branch
-4088E0     (base 16)		Beijing Ereneben Information Technology Limited Shenzhen Branch
-				Room 14A, Building A, Honglong Central Plaza, No.3001,Heping Road, Luohu District, Shenzhen City
-				Shenzhen  Guangdong  518001
-				CN
-
-E8-54-84   (hex)		NEO Information Systems Co., Ltd.
-E85484     (base 16)		NEO Information Systems Co., Ltd.
-				609, Junganginduspia, #517-13, Sangdaeweon-Dong, Jungweon-Gu
-				Seongnam  Gyunggi-Do  462-713
-				KR
-
-74-AE-76   (hex)		iNovo Broadband, Inc.
-74AE76     (base 16)		iNovo Broadband, Inc.
-				3475 Corporate Way
-				Duluth  Georgia  30096
-				US
-
-EC-1A-59   (hex)		Belkin International Inc.
-EC1A59     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista  Ca.   90094
-				US
-
-88-10-36   (hex)		Panodic(ShenZhen) Electronics Limted
-881036     (base 16)		Panodic(ShenZhen) Electronics Limted
-				Floor 12, Grentech Building, Keji.C. Road 
-				ShenZhen  GuangDong   518052
-				CN
-
-68-B6-FC   (hex)		Hitron Technologies. Inc
-68B6FC     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-EC-A2-9B   (hex)		Kemppi Oy
-ECA29B     (base 16)		Kemppi Oy
-				Kempinkatu 1
-				Lahti  Lahti  15810
-				FI
-
-04-CE-14   (hex)		Wilocity LTD.
-04CE14     (base 16)		Wilocity LTD.
-				21 Bareket St.
-				Caesarea  Israel  38900
-				US
-
-C4-BA-99   (hex)		I+ME Actia Informatik und Mikro-Elektronik GmbH
-C4BA99     (base 16)		I+ME Actia Informatik und Mikro-Elektronik GmbH
-				Dresdenstrasse 17/18
-				Braunschweig  Niedersachsen  38690
-				DE
-
-A4-93-4C   (hex)		Cisco Systems, Inc
-A4934C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D0-D2-12   (hex)		K2NET Co.,Ltd.
-D0D212     (base 16)		K2NET Co.,Ltd.
-				K2Net Building
-				  Seoul  158-092
-				KR
-
-B0-43-5D   (hex)		NuLEDs, Inc.
-B0435D     (base 16)		NuLEDs, Inc.
-				1497 Poinsettia Ave.
-				Vista  CA  92081
-				US
-
-08-08-EA   (hex)		AMSC
-0808EA     (base 16)		AMSC
-				15775 W Schaefer Court
-				New Berlin  WI  53151
-				US
-
-E8-D4-83   (hex)		ULTIMATE Europe Transportation Equipment GmbH
-E8D483     (base 16)		ULTIMATE Europe Transportation Equipment GmbH
-				Industriestraße 3
-				3300  Niederösterreich  3300
-				AT
-
-1C-84-64   (hex)		FORMOSA WIRELESS COMMUNICATION CORP.
-1C8464     (base 16)		FORMOSA WIRELESS COMMUNICATION CORP.
-				11F., No.3-2, Yuanqu St., Nangang Dist.,
-				  Taipei City  115
-				TW
-
-34-6E-8A   (hex)		Ecosense
-346E8A     (base 16)		Ecosense
-				1414 Kolon science vallet-II., #811
-				Seoul  Guro-gu  152-878
-				KR
-
-64-F2-42   (hex)		Gerdes Aktiengesellschaft
-64F242     (base 16)		Gerdes Aktiengesellschaft
-				Bergerwiesenstraße 9
-				Meckenheim  NRW  53340
-				DE
-
-60-F2-81   (hex)		TRANWO TECHNOLOGY CO., LTD.
-60F281     (base 16)		TRANWO TECHNOLOGY CO., LTD.
-				No.236, Sec.3, Huanbei Rd.
-				Jubei City  Hsinchu County  30265
-				TW
-
-94-21-97   (hex)		Stalmart Technology Limited
-942197     (base 16)		Stalmart Technology Limited
-				Rm1106-1107E, Building F, Xihaimingzhu, No.1, Taoyuan Road
-				Shenzhen  Gunagdong  518052
-				CN
-
-A0-C3-DE   (hex)		Triton Electronic Systems Ltd.
-A0C3DE     (base 16)		Triton Electronic Systems Ltd.
-				620063, Ekaterinburg, P/O box 522
-				Ekaterinburg  Sverdlovskaya obl.  620063
-				RU
-
-D0-69-9E   (hex)		LUMINEX Lighting Control Equipment
-D0699E     (base 16)		LUMINEX Lighting Control Equipment
-				Berkenlaan 8 A
-				Hechtel - Eksel  Limburg  3940
-				BE
-
-0C-C0-C0   (hex)		MAGNETI MARELLI SISTEMAS ELECTRONICOS MEXICO
-0CC0C0     (base 16)		MAGNETI MARELLI SISTEMAS ELECTRONICOS MEXICO
-				AV. INDUSTRIA 20/21
-				TEPOTZOTLAN  MEXICO  54600
-				MX
-
-08-37-9C   (hex)		Topaz Co. LTD.
-08379C     (base 16)		Topaz Co. LTD.
-				B305-22, Acrotower, 1591 Gwanyang-dong
-				Anyang-si  Gyeonggi-Do  431-060
-				KR
-
-D8-0D-E3   (hex)		FXI TECHNOLOGIES AS
-D80DE3     (base 16)		FXI TECHNOLOGIES AS
-				Postboks 609
-				TRONDHEIM  Norge  7406
-				NO
-
-B0-D2-F5   (hex)		Vello Systems, Inc.
-B0D2F5     (base 16)		Vello Systems, Inc.
-				1530 O'Brien Drive
-				Menlo Park  California  94025
-				US
-
-70-9A-0B   (hex)		Italian Institute of Technology
-709A0B     (base 16)		Italian Institute of Technology
-				Via Morego 30
-				Genova  GE  16163
-				IT
-
-F0-FD-A0   (hex)		Acurix Networks Pty Ltd
-F0FDA0     (base 16)		Acurix Networks Pty Ltd
-				Unit 5, 348 Victoria Road,
-				Malaga, Perth  Western Austraila  6090
-				NZ
-
-B4-55-70   (hex)		Borea
-B45570     (base 16)		Borea
-				Mlaka 1b
-				Begunje    SI-4275
-				SI
-
-10-0D-2F   (hex)		Online Security Pty. Ltd.
-100D2F     (base 16)		Online Security Pty. Ltd.
-				5/21-25 Redland Drive
-				Mitcham  VIC  3132
-				AU
-
-14-2D-F5   (hex)		Amphitech
-142DF5     (base 16)		Amphitech
-				1, rue Robert & Sonia DELAUNAY
-				Paris    75011
-				FR
-
-50-57-A8   (hex)		Cisco Systems, Inc
-5057A8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-DE-FB   (hex)		Cisco Systems, Inc
-00DEFB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-3C-A3-15   (hex)		Bless Information & Communications Co., Ltd
-3CA315     (base 16)		Bless Information & Communications Co., Ltd
-				#64-1, Wonhyoro 3-ga, Yongsan-gu,
-				Seoul    140-848
-				KR
-
-F8-30-94   (hex)		Alcatel-Lucent Telecom Limited
-F83094     (base 16)		Alcatel-Lucent Telecom Limited
-				The Quadrant, Stonehill Green 
-				SWINDON    SN5 7DJ
-				GB
-
-10-A9-32   (hex)		Beijing Cyber Cloud Technology Co. ,Ltd.
-10A932     (base 16)		Beijing Cyber Cloud Technology Co. ,Ltd.
-				2/F, Tower B, Jingmeng High-tech Building. No. 5 Shangdi East Road, Haidian District.
-				Beijing    100085
-				CN
-
-34-FC-6F   (hex)		ALCEA
-34FC6F     (base 16)		ALCEA
-				3 Rue Joly de Bammeville
-				91460  Marcoussis  
-				FR
-
-C0-B3-57   (hex)		Yoshiki Electronics Industry Ltd.
-C0B357     (base 16)		Yoshiki Electronics Industry Ltd.
-				Ooicyoyo Building 7f
-				Shinagawa-ku  Tokyo  140-0011
-				JP
-
-3C-98-BF   (hex)		Quest Controls, Inc.
-3C98BF     (base 16)		Quest Controls, Inc.
-				208 9th Street Dr. West
-				Palmetto  FL  34221
-				US
-
-D0-AE-EC   (hex)		Alpha Networks Inc.
-D0AEEC     (base 16)		Alpha Networks Inc.
-				No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C
-				Hsinchu  Taiwan  300
-				TW
-
-E8-13-24   (hex)		GuangZhou Bonsoninfo System CO.,LTD
-E81324     (base 16)		GuangZhou Bonsoninfo System CO.,LTD
-				4/F,NO.1029/31,GaoPu Road,GaoTang New Building District
-				Guangzhou  Guangdong  510663
-				CN
-
-E4-77-D4   (hex)		Minrray Industry Co.,Ltd 
-E477D4     (base 16)		Minrray Industry Co.,Ltd 
-				C5, Building 2, ZhongHaiXin  ,Science&Technology Park, Ganli Rd, LiLang Blvd., Buji
-				Shenzhen  GuangDong  518112
-				CN
-
-38-E0-8E   (hex)		Mitsubishi Electric Corporation
-38E08E     (base 16)		Mitsubishi Electric Corporation
-				2-7-3 Marunouchi Chiyoda-ku
-				Tokyo    100-8310
-				JP
-
-E4-C8-06   (hex)		Ceiec Electric Technology Inc.
-E4C806     (base 16)		Ceiec Electric Technology Inc.
-				8/F West Side, Building 201, Terra Industrial & Tradepark, Che Gong Miao,
-				Shenzhen  Guangdong  518040
-				CN
-
-E0-F9-BE   (hex)		Cloudena Corp.
-E0F9BE     (base 16)		Cloudena Corp.
-				6F., No. 5, Alley 22, Lane 513
-				Taipei City    114
-				TW
-
-B8-8F-14   (hex)		Analytica GmbH
-B88F14     (base 16)		Analytica GmbH
-				Vorholzstraße 36
-				Karlsruhe  Baden-Württemberg  76137
-				DE
-
-7C-94-B2   (hex)		Philips Healthcare PCCI
-7C94B2     (base 16)		Philips Healthcare PCCI
-				2271 Cosmos Ct
-				Carlsbad  CA  92011
-				US
-
-44-2B-03   (hex)		Cisco Systems, Inc
-442B03     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-73-CA   (hex)		Conversion Sound Inc.
-F473CA     (base 16)		Conversion Sound Inc.
-				960 N. Northwest Hwy
-				Park Ridge  IL  60068
-				US
-
-F8-F7-FF   (hex)		SYN-TECH SYSTEMS INC
-F8F7FF     (base 16)		SYN-TECH SYSTEMS INC
-				100 FOUR POINTS WAY
-				TALLAHASSEE  FL  32305
-				US
-
-A8-17-58   (hex)		Elektronik System i Umeå AB
-A81758     (base 16)		Elektronik System i Umeå AB
-				Box 7978
-				Umeå  Västerbotten  907 19
-				SE
-
-88-20-12   (hex)		LMI Technologies
-882012     (base 16)		LMI Technologies
-				1673 Cliveden Avenue
-				Delta  British Columbia  V3M 6V5
-				CA
-
-60-E9-56   (hex)		Ayla Networks, Inc
-60E956     (base 16)		Ayla Networks, Inc
-				218 Morgan Lane
-				Menlo Park  CA  94025
-				US
-
-EC-11-20   (hex)		FloDesign Wind Turbine Corporation
-EC1120     (base 16)		FloDesign Wind Turbine Corporation
-				Papirfabrikken 28
-				Silkeborg    8600
-				DK
-
-F8-97-CF   (hex)		DAESHIN-INFORMATION TECHNOLOGY CO., LTD.
-F897CF     (base 16)		DAESHIN-INFORMATION TECHNOLOGY CO., LTD.
-				6F, Chungwon Bldg., 828-5 Yuksam-Dong,Kangnam-Gu,
-				Seoul    135935
-				KR
-
-08-B4-CF   (hex)		Abicom International
-08B4CF     (base 16)		Abicom International
-				The Old Grammar School
-				Market Drayton  Shropshire  TF9 1JR
-				GB
-
-C4-95-A2   (hex)		SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD
-C495A2     (base 16)		SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD
-				ROOM 1713,BAOHUA BUILDING, HUAQIANG NORTH ROAD, FUTIAN DISTRICT, 
-				SHENZHEN  GUANGDONG  518031
-				CN
-
-8C-68-78   (hex)		Nortek-AS
-8C6878     (base 16)		Nortek-AS
-				Vangkroken 2
-				  Akreshus  1351 RUD
-				NO
-
-20-25-98   (hex)		Teleview
-202598     (base 16)		Teleview
-				#401 Sehwa, 355-1
-				Sungnam  Gyeonggi  463-828
-				KR
-
-38-F8-B7   (hex)		V2COM PARTICIPACOES S.A.
-38F8B7     (base 16)		V2COM PARTICIPACOES S.A.
-				Rua Cunha Gago, 700
-				São Paulo    05421001
-				BR
-
-F8-D4-62   (hex)		Pumatronix Equipamentos Eletronicos Ltda.
-F8D462     (base 16)		Pumatronix Equipamentos Eletronicos Ltda.
-				Rua Bartolomeu Lourenco de Gusmao 2021
-				Curitiba  PR  81650050
-				BR
-
-A0-DC-04   (hex)		Becker-Antriebe GmbH
-A0DC04     (base 16)		Becker-Antriebe GmbH
-				Friedrich-Ebert-Straße 2 - 4
-				35764 Sinn  Hessen  DE811177977
-				DE
-
-40-60-5A   (hex)		Hawkeye Tech Co. Ltd
-40605A     (base 16)		Hawkeye Tech Co. Ltd
-				13F-5, No. 736 Chung Cheng Road, Chung He
-				New Taipei    23511
-				TW
-
-A0-4C-C1   (hex)		Helixtech Corp.
-A04CC1     (base 16)		Helixtech Corp.
-				6F Lions bldg., 160-2 Gangnam-daero,
-				Seoul    137-888
-				KR
-
-34-A7-BA   (hex)		Fischer International Systems Corporation
-34A7BA     (base 16)		Fischer International Systems Corporation
-				5801 Pelican Bay Boulevard #300
-				Naples  Florida  34108
-				US
-
-04-63-E0   (hex)		Nome Oy
-0463E0     (base 16)		Nome Oy
-				Lunkintie 9
-				Oulunsalo  Oulun lللni  90460
-				FI
-
-B4-9E-E6   (hex)		SHENZHEN TECHNOLOGY CO LTD
-B49EE6     (base 16)		SHENZHEN TECHNOLOGY CO LTD
-				NO34 SHILONG RD
-				SHENZHEN  GUANGDONG  91732
-				CN
-
-BC-4B-79   (hex)		SensingTek
-BC4B79     (base 16)		SensingTek
-				2F, No.6-2,Dusing Rd.,Hsinchu Science Park, 
-				Hsinchu    30078
-				TW
-
-A4-90-05   (hex)		CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD
-A49005     (base 16)		CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD
-				409,2#,Greatwall Bldg,No.3 Kefa Road,Science & Industry Park,Nanshan District,
-				Shenzhen  Guangdong  51807
-				CN
-
-C4-0A-CB   (hex)		Cisco Systems, Inc
-C40ACB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-68-16-05   (hex)		Systems And Electronic Development FZCO
-681605     (base 16)		Systems And Electronic Development FZCO
-				Roundabout no. 8
-				Jebel Ali free Zone  Dubai  P.O.Box 61129
-				AE
-
-D4-A0-2A   (hex)		Cisco Systems, Inc
-D4A02A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-3C-4E-47   (hex)		Etronic A/S
-3C4E47     (base 16)		Etronic A/S
-				Rødeledsvej 95
-				Svendborg  South Denmark  5700
-				DK
-
-F4-87-71   (hex)		Infoblox
-F48771     (base 16)		Infoblox
-				4750 Patrick Henry Drive
-				Santa Clara  California  95054
-				US
-
-54-53-ED   (hex)		Sony Corporation
-5453ED     (base 16)		Sony Corporation
-				Gotenyama Tec 5-1-2
-				Tokyo  Shinagawa-ku  141-0001
-				JP
-
-00-37-6D   (hex)		Murata Manufacturing Co., Ltd.
-00376D     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-50-00-8C   (hex)		Hong Kong Telecommunications (HKT) Limited
-50008C     (base 16)		Hong Kong Telecommunications (HKT) Limited
-				41/F, PCCW Tower, Taikoo Place,
-				    
-				HK
-
-90-2B-34   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-902B34     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, 
-				Pin-Jen  Taoyuan  324
-				TW
-
-88-C3-6E   (hex)		Beijing Ereneben lnformation Technology Limited
-88C36E     (base 16)		Beijing Ereneben lnformation Technology Limited
-				Room 14F,Building F,Honglong Central Plaza,NO,3001,Heping Road,LuoHu 
-				ShenZhen  GuangDong  518110
-				CN
-
-4C-9E-80   (hex)		KYOKKO ELECTRIC Co., Ltd.
-4C9E80     (base 16)		KYOKKO ELECTRIC Co., Ltd.
-				5-7-20, Motomachi-dori, Chuo-Ku
-				Kobe  Hyogo  6500022
-				JP
-
-5C-EB-4E   (hex)		R. STAHL HMI Systems GmbH
-5CEB4E     (base 16)		R. STAHL HMI Systems GmbH
-				Im Gewerbegebiet Pesch 14
-				Cologne    50767
-				DE
-
-34-AA-99   (hex)		Nokia
-34AA99     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-64-55-63   (hex)		Intelight Inc.
-645563     (base 16)		Intelight Inc.
-				3450 S Broadmont Drive  #126
-				Tucson  Arizona  85713
-				US
-
-94-3A-F0   (hex)		Nokia Corporation
-943AF0     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-64-54-22   (hex)		Equinox Payments
-645422     (base 16)		Equinox Payments
-				8888 E. Raintree Dr., Suite 300
-				Scottsdale  Arizona  85260
-				US
-
-08-0D-84   (hex)		GECO, Inc.
-080D84     (base 16)		GECO, Inc.
-				1754 N. 48th St.
-				Mesa  AZ  85205
-				US
-
-88-E7-12   (hex)		Whirlpool Corporation
-88E712     (base 16)		Whirlpool Corporation
-				750 Monte Dr.
-				Benton Harbor  Michigan  49022
-				US
-
-D4-12-BB   (hex)		Quadrant Components Inc. Ltd
-D412BB     (base 16)		Quadrant Components Inc. Ltd
-				Unit 5, 17/F, Metro Loft,
-				Kwai Chung,  New Territory  
-				HK
-
-24-B8-8C   (hex)		Crenus Co.,Ltd.
-24B88C     (base 16)		Crenus Co.,Ltd.
-				Mario Tower 814, 222-12
-				Seoul    152-050
-				KR
-
-BC-FE-8C   (hex)		Altronic, LLC
-BCFE8C     (base 16)		Altronic, LLC
-				712 Trumbull Ave
-				Girard  Ohio  44420
-				US
-
-64-9E-F3   (hex)		Cisco Systems, Inc
-649EF3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-BB-C1   (hex)		Absolute Analysis
-24BBC1     (base 16)		Absolute Analysis
-				2393 Teller Road Ste #109
-				Newbury Park  California  91320
-				US
-
-9C-CA-D9   (hex)		Nokia Corporation
-9CCAD9     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-04-6D-42   (hex)		Bryston Ltd.
-046D42     (base 16)		Bryston Ltd.
-				P.O. Box 2170
-				Peterborough  Ontario  K9J  7Y4
-				CA
-
-D8-E7-43   (hex)		Wush, Inc
-D8E743     (base 16)		Wush, Inc
-				17F.No 268, Liancheng Rd., Zhonghe District
-				New  Taipei City     235
-				TW
-
-64-4D-70   (hex)		dSPACE GmbH
-644D70     (base 16)		dSPACE GmbH
-				Rathenaustraße 26
-				Paderborn    33102
-				DE
-
-DC-C1-01   (hex)		SOLiD Technologies, Inc.
-DCC101     (base 16)		SOLiD Technologies, Inc.
-				9th Floor, SOLiD Space, Pangyoyeok-ro 220
-				Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-3C-E6-24   (hex)		LG Display 
-3CE624     (base 16)		LG Display 
-				9th, Fl., LG U+ building, 65-228, Hangangro, 3-ga, Yongsan-gu
-				Seoul    140-716
-				KR
-
-D8-F0-F2   (hex)		Zeebo Inc
-D8F0F2     (base 16)		Zeebo Inc
-				5405 Morehouse Drive
-				San Diego  California  92121
-				US
-
-80-60-07   (hex)		RIM
-806007     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-38-A8-51   (hex)		Moog, Ing
-38A851     (base 16)		Moog, Ing
-				3650 Woodhead Drive
-				Northbrook  IL  60062
-				US
-
-94-E0-D0   (hex)		HealthStream Taiwan Inc.
-94E0D0     (base 16)		HealthStream Taiwan Inc.
-				16-3, Zichiang 1st Road
-				Jhongli, Taoyuan county    32063
-				TW
-
-D8-05-2E   (hex)		Skyviia Corporation
-D8052E     (base 16)		Skyviia Corporation
-				No. 10-1, Lixing 1st Rd., Science Park,
-				Hsinchu City    300
-				TW
-
-80-94-6C   (hex)		TOKYO RADAR CORPORATION
-80946C     (base 16)		TOKYO RADAR CORPORATION
-				15-7 Nishikubo-cho
-				Hodogaya-ku, Yokohama-shi  Kanagawa  240-0022
-				JP
-
-D0-CF-5E   (hex)		Energy Micro AS
-D0CF5E     (base 16)		Energy Micro AS
-				Sandakerveien 118
-				Oslo    N-0484
-				NO
-
-18-03-FA   (hex)		IBT Interfaces
-1803FA     (base 16)		IBT Interfaces
-				Im Taubhaus 19
-				Roedermark  Hessen  63322
-				DE
-
-30-6E-5C   (hex)		Validus Technologies
-306E5C     (base 16)		Validus Technologies
-				420 North Main Street
-				East Peoria  Illinois  61611
-				US
-
-C8-94-D2   (hex)		Jiangsu Datang  Electronic Products Co., Ltd
-C894D2     (base 16)		Jiangsu Datang  Electronic Products Co., Ltd
-				NO.20
-				Nanjing  Jiangsu  211800
-				CN
-
-C8-A6-20   (hex)		Nebula, Inc
-C8A620     (base 16)		Nebula, Inc
-				215 Castro St
-				Mountain View  CA  94041
-				US
-
-EC-62-64   (hex)		Global411 Internet Services, LLC
-EC6264     (base 16)		Global411 Internet Services, LLC
-				10400 W Overland Rd #371
-				Boise  Idaho  83709
-				US
-
-00-F0-51   (hex)		KWB Gmbh
-00F051     (base 16)		KWB Gmbh
-				Industriestraße 235
-				St. Margarethen  Styria  8321
-				AT
-
-FC-94-6C   (hex)		UBIVELOX
-FC946C     (base 16)		UBIVELOX
-				#1301 KOLONG Digital Villent 222-7 Guro-dong Guro-gu
-				SEOUL    152-777
-				KR
-
-40-7B-1B   (hex)		Mettle Networks Inc.
-407B1B     (base 16)		Mettle Networks Inc.
-				111 N. Market St STE 300
-				San Jose   CA  95113
-				US
-
-40-D5-59   (hex)		MICRO S.E.R.I.
-40D559     (base 16)		MICRO S.E.R.I.
-				24, rue Henri FARMAN
-				TREMBLAY EN FRANCE  Ile de France  93290
-				FR
-
-30-6C-BE   (hex)		Skymotion Technology (HK) Limited
-306CBE     (base 16)		Skymotion Technology (HK) Limited
-				Unit 2603, 26/F, Metropole Square,
-				    852
-				HK
-
-18-38-25   (hex)		Wuhan Lingjiu High-tech Co.,Ltd.
-183825     (base 16)		Wuhan Lingjiu High-tech Co.,Ltd.
-				No.718
-				Wuhan  Hubei  430074
-				CN
-
-7C-4B-78   (hex)		Red Sun Synthesis Pte Ltd
-7C4B78     (base 16)		Red Sun Synthesis Pte Ltd
-				639, #11-544
-				    510539
-				SG
-
-64-A0-E7   (hex)		Cisco Systems, Inc
-64A0E7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-DC-F8-58   (hex)		Lorent Networks, Inc.
-DCF858     (base 16)		Lorent Networks, Inc.
-				Third Floor, Technology Complex, HAO Science Park
-				Foshan  Guangdong Province  528200
-				CN
-
-94-0B-2D   (hex)		NetView Technologies(Shenzhen) Co., Ltd
-940B2D     (base 16)		NetView Technologies(Shenzhen) Co., Ltd
-				RM2902,East Tower, Nanshan Software Park
-				Shenzhen  Guangdong  518052
-				CN
-
-80-3F-5D   (hex)		Winstars Technology Ltd
-803F5D     (base 16)		Winstars Technology Ltd
-				Block4,Taisong Industrial Park, DaLang Street, LongHua Town , Bao'an District
-				Shenzhen  Guangdong  518109
-				CN
-
-40-BF-17   (hex)		Digistar Telecom. SA
-40BF17     (base 16)		Digistar Telecom. SA
-				Av. Theodomiro Porto da Fonseca, 3101
-				Sao Leopoldo  RS  9302080
-				BR
-
-78-07-38   (hex)		Z.U.K. Elzab S.A.
-780738     (base 16)		Z.U.K. Elzab S.A.
-				ul. Kruczkowskiego 39
-				Zabrze    41-813
-				PL
-
-20-37-BC   (hex)		Kuipers Electronic Engineering BV
-2037BC     (base 16)		Kuipers Electronic Engineering BV
-				Houtkopersstraat 6
-				Zwijndrecht  Zuid-Holland  3334 KD
-				NL
-
-94-31-9B   (hex)		Alphatronics BV
-94319B     (base 16)		Alphatronics BV
-				Watergoorweg 71
-				NIJKERK  Gld  3861 MA
-				NL
-
-00-E1-75   (hex)		AK-Systems Ltd
-00E175     (base 16)		AK-Systems Ltd
-				off 62, 27/29 Pavlovskaya str.
-				Moscow    115093
-				RU
-
-CC-50-1C   (hex)		KVH Industries, Inc.
-CC501C     (base 16)		KVH Industries, Inc.
-				50 Enterprise Center
-				Middletown  RI  02842-5279
-				US
-
-04-D7-83   (hex)		Y&H E&C Co.,LTD.
-04D783     (base 16)		Y&H E&C Co.,LTD.
-				1501 Daerung Technotown 224-5
-				Anyang-city  Gyeonggi-do  431-062
-				KR
-
-54-A9-D4   (hex)		Minibar Systems
-54A9D4     (base 16)		Minibar Systems
-				7340 Westmore Road
-				Rockville  MD  20850
-				US
-
-B0-E5-0E   (hex)		NRG SYSTEMS INC
-B0E50E     (base 16)		NRG SYSTEMS INC
-				PO BOX 0509
-				Hinesburg  VT  054610509
-				US
-
-64-80-8B   (hex)		VG Controls, Inc.
-64808B     (base 16)		VG Controls, Inc.
-				11 Butternut Drive
-				Vernon  NJ  07462
-				US
-
-48-C1-AC   (hex)		PLANTRONICS, INC.
-48C1AC     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-98-58-8A   (hex)		SYSGRATION Ltd.
-98588A     (base 16)		SYSGRATION Ltd.
-				10Fl.NO.868-3.Chung Cheng Rd.
-				NewTaipei City    235
-				TW
-
-24-37-EF   (hex)		EMC Electronic Media Communication SA
-2437EF     (base 16)		EMC Electronic Media Communication SA
-				Via Cantonale 4
-				S. Antonino  Ticino  6592
-				CH
-
-28-B0-CC   (hex)		Xenya d.o.o.
-28B0CC     (base 16)		Xenya d.o.o.
-				Celovska cesta 172
-				Ljubljana    1000
-				SI
-
-20-5B-5E   (hex)		Shenzhen Wonhe Technology Co., Ltd
-205B5E     (base 16)		Shenzhen Wonhe Technology Co., Ltd
-				South Block 10th floor, Yuanxing Building, No. 1
-				Shenzhen  Guangdong  518057
-				CN
-
-C0-58-A7   (hex)		Pico Systems Co., Ltd.
-C058A7     (base 16)		Pico Systems Co., Ltd.
-				332-7 Kouya
-				Matsudo  Chiba pref.  270-0017
-				JP
-
-EC-3F-05   (hex)		Institute 706, The Second Academy China Aerospace Science & Industry Corp
-EC3F05     (base 16)		Institute 706, The Second Academy China Aerospace Science & Industry Corp
-				YongDing Road ,HaiDian District.BeiJing ,No.51
-				BeiJing    100854
-				CN
-
-48-9B-E2   (hex)		SCI Innovations Ltd
-489BE2     (base 16)		SCI Innovations Ltd
-				16C Hurst End
-				Newport Pagnell  Buckinghamshire  MK16 9HS
-				GB
-
-80-FF-A8   (hex)		UNIDIS
-80FFA8     (base 16)		UNIDIS
-				4 floors(401), 144-4, Gumi-dong
-				Sungnam-si  Gyeonggi-do  463-810
-				KR
-
-E4-35-FB   (hex)		Sabre Technology (Hull) Ltd
-E435FB     (base 16)		Sabre Technology (Hull) Ltd
-				3a Newlands Science Park
-				Hull  East Yorkshire  HU6 7TQ
-				GB
-
-C8-3B-45   (hex)		JRI
-C83B45     (base 16)		JRI
-				16 rue louis rameau
-				Bezons Cedex    95872
-				FR
-
-E8-78-A1   (hex)		BEOVIEW INTERCOM DOO
-E878A1     (base 16)		BEOVIEW INTERCOM DOO
-				TRESNJINOG CVETA 5/17
-				BELGRADE    11070
-				RS
-
-CC-EF-48   (hex)		Cisco Systems, Inc
-CCEF48     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F0-4B-6A   (hex)		Scientific Production Association Siberian Arsenal, Ltd.
-F04B6A     (base 16)		Scientific Production Association Siberian Arsenal, Ltd.
-				Bld.8A, Gorskiy Microdistrict
-				Novosibirsk    630073
-				RU
-
-64-AE-0C   (hex)		Cisco Systems, Inc
-64AE0C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E8-DA-96   (hex)		Zhuhai Tianrui Electrical Power Tech. Co., Ltd.
-E8DA96     (base 16)		Zhuhai Tianrui Electrical Power Tech. Co., Ltd.
-				Minying Technology Zone, 10# Keji 1 Road, Gangwan Main Road, Tangjia
-				Zhuhai  Guangdong  519085
-				CN
-
-B4-D8-DE   (hex)		iota Computing, Inc.
-B4D8DE     (base 16)		iota Computing, Inc.
-				2275 East Bayshore Road
-				Palo Alto  CA  94303-3222
-				US
-
-C8-90-3E   (hex)		Pakton Technologies
-C8903E     (base 16)		Pakton Technologies
-				1 Helium St
-				Narangba  QLD  4504
-				AU
-
-54-CD-A7   (hex)		Fujian Shenzhou Electronic Co.,Ltd
-54CDA7     (base 16)		Fujian Shenzhou Electronic Co.,Ltd
-				Quanzhou Economical&Technological Development Zone,Quanzhou,Fujian,China
-				QUANZHOU  FUJIAN  362005
-				CN
-
-88-6B-76   (hex)		CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD
-886B76     (base 16)		CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD
-				Shunde District of Foshan City, Guangdong Province, Guangxi Rong Ronggui Town Road, No. 148
-				Foshan  GuangDong  528305
-				CN
-
-78-F7-D0   (hex)		Silverbrook Research
-78F7D0     (base 16)		Silverbrook Research
-				3 Montague Street
-				Balmain  New South Wales  2041
-				AU
-
-20-76-00   (hex)		Actiontec Electronics, Inc
-207600     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-F0-13-C3   (hex)		SHENZHEN FENDA TECHNOLOGY CO., LTD
-F013C3     (base 16)		SHENZHEN FENDA TECHNOLOGY CO., LTD
-				Fenda Hi-Tech Park, Zhoushi Road, Shiyan, Baoan
-				ShenZhen  GuangDong  518108
-				CN
-
-04-A8-2A   (hex)		Nokia Corporation
-04A82A     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-E4-4E-18   (hex)		Gardasoft VisionLimited
-E44E18     (base 16)		Gardasoft VisionLimited
-				Units 1 and 2, Castle Acres
-				Cambridge    CB23 4JQ
-				GB
-
-20-46-A1   (hex)		VECOW Co., Ltd
-2046A1     (base 16)		VECOW Co., Ltd
-				7F., No.105, Zhongcheng Rd., Tucheng Dist.,
-				New Taipei City     23674
-				TW
-
-FC-01-CD   (hex)		FUNDACION TEKNIKER
-FC01CD     (base 16)		FUNDACION TEKNIKER
-				Avenida Otaola, 20
-				Eibar  Gipuzkoa  20600
-				ES
-
-9C-8B-F1   (hex)		The Warehouse Limited
-9C8BF1     (base 16)		The Warehouse Limited
-				Suite 601, City Point, 1600 Zhonghua Road, Huangpu District
-				Shanghai    200010
-				CN
-
-DC-2E-6A   (hex)		HCT. Co., Ltd.
-DC2E6A     (base 16)		HCT. Co., Ltd.
-				105-1, Jangam-ri, Majang-myen
-				Icheon-si  Gyeonggi-do  467-811
-				KR
-
-14-8A-70   (hex)		ADS GmbH
-148A70     (base 16)		ADS GmbH
-				Im Rohnweiher 39
-				Lohmar  Germany  D-53797
-				DE
-
-00-B3-38   (hex)		Kontron Asia Pacific Design Sdn. Bhd
-00B338     (base 16)		Kontron Asia Pacific Design Sdn. Bhd
-				Plot 554, Lorong Perusahaan 4
-				Prai Free Trade Zone  Prai, Penang  13600
-				MY
-
-84-24-8D   (hex)		Zebra Technologies Inc
-84248D     (base 16)		Zebra Technologies Inc
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-FC-E8-92   (hex)		Hangzhou Lancable Technology Co.,Ltd
-FCE892     (base 16)		Hangzhou Lancable Technology Co.,Ltd
-				Zone A,Floor 16,Zhongcai Building,68#,Tonghe Road,Binjiang District,
-				Hangzhou  Zhejiang  310051
-				CN
-
-10-71-F9   (hex)		Cloud Telecomputers, LLC
-1071F9     (base 16)		Cloud Telecomputers, LLC
-				1032 Elwell Court
-				Palo Alto  CA  94303
-				US
-
-B8-62-1F   (hex)		Cisco Systems, Inc
-B8621F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F0-02-2B   (hex)		Chrontel
-F0022B     (base 16)		Chrontel
-				2210 OToole Ave., Suite 100
-				San Jose  CA  95131
-				US
-
-D4-53-AF   (hex)		VIGO System S.A.
-D453AF     (base 16)		VIGO System S.A.
-				129/133 Poznanska str
-				Ozarow Mazowiecki  Mazowieckie  05-850
-				PL
-
-18-AD-4D   (hex)		Polostar Technology Corporation
-18AD4D     (base 16)		Polostar Technology Corporation
-				2F, No.351, Yangguang St.
-				Taipei    11491
-				TW
-
-94-C6-EB   (hex)		NOVA electronics, Inc.
-94C6EB     (base 16)		NOVA electronics, Inc.
-				Grand Axe Bldg. 3F.
-				Shibuya-ku  Tokyo  151-0064
-				JP
-
-84-3F-4E   (hex)		Tri-Tech Manufacturing, Inc.
-843F4E     (base 16)		Tri-Tech Manufacturing, Inc.
-				333 Turbine Drive
-				Rapid City  SD  57703
-				US
-
-C8-32-32   (hex)		Hunting Innova
-C83232     (base 16)		Hunting Innova
-				8383 N Sam Houston Pkwy West
-				Houston  Texas  77064
-				US
-
-54-94-78   (hex)		Silvershore Technology Partners
-549478     (base 16)		Silvershore Technology Partners
-				800 High Street
-				Palo Alto  CA  94301
-				US
-
-A0-6E-50   (hex)		Nanotek Elektronik Sistemler Ltd. Sti.
-A06E50     (base 16)		Nanotek Elektronik Sistemler Ltd. Sti.
-				Ivedik Organize Sanayi
-				Ankara    06370
-				TR
-
-4C-77-4F   (hex)		Embedded Wireless Labs 
-4C774F     (base 16)		Embedded Wireless Labs 
-				702 Level 7 Uptown 2 No.2 
-				Petaling Jaya  Selangor  47400
-				MY
-
-D0-C2-82   (hex)		Cisco Systems, Inc
-D0C282     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-14-7D-B3   (hex)		JOA TELECOM.CO.,LTD
-147DB3     (base 16)		JOA TELECOM.CO.,LTD
-				1007,Sicox tower,513-14,Sangdaewon-dong,Jungwon-gu
-				Seongnam-si  Gyeonggi-do  462-806
-				KR
-
-EC-BD-09   (hex)		FUSION Electronics Ltd
-ECBD09     (base 16)		FUSION Electronics Ltd
-				PO Box 137 - 142
-				Auckland    1151
-				NZ
-
-94-46-96   (hex)		BaudTec Corporation
-944696     (base 16)		BaudTec Corporation
-				12F, No.181, Sec.1.Tatung Rd.
-				Hsi-chih  Taipei  221
-				TW
-
-54-84-7B   (hex)		Digital Devices GmbH
-54847B     (base 16)		Digital Devices GmbH
-				Moewestr 45 A
-				Muenchen    81827
-				DE
-
-3C-27-63   (hex)		SLE quality engineering GmbH & Co. KG
-3C2763     (base 16)		SLE quality engineering GmbH & Co. KG
-				Josef-Buchinger-Str. 9
-				Grafenau  Bavaria  94481
-				DE
-
-B0-F1-BC   (hex)		Dhemax Ingenieros Ltda
-B0F1BC     (base 16)		Dhemax Ingenieros Ltda
-				Siete Oriente 1234
-				Vina del Mar  Region de Valparaiso  2530954
-				CL
-
-B8-28-8B   (hex)		Parker Hannifin Manufacturing (UK) Ltd
-B8288B     (base 16)		Parker Hannifin Manufacturing (UK) Ltd
-				Condition Monitoring Centre
-				Thetford  Norfolk  IP24 1HP
-				GB
-
-90-D1-1B   (hex)		Palomar Medical Technologies
-90D11B     (base 16)		Palomar Medical Technologies
-				15 Network Drive
-				Burlington  MA  01803
-				US
-
-34-A5-5D   (hex)		TECHNOSOFT INTERNATIONAL SRL
-34A55D     (base 16)		TECHNOSOFT INTERNATIONAL SRL
-				RO6640904
-				  Bucuresti - Sector 6  061992
-				RO
-
-80-2E-14   (hex)		azeti Networks AG
-802E14     (base 16)		azeti Networks AG
-				Am Brambusch 1a
-				Luenen  NRW  44536
-				DE
-
-D4-C1-FC   (hex)		Nokia Corporation
-D4C1FC     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-34-BC-A6   (hex)		Beijing Ding Qing Technology, Ltd.
-34BCA6     (base 16)		Beijing Ding Qing Technology, Ltd.
-				218 Han Tai Hua Office Building, 13 Huan Yuan Lu,
-				Haidian District  Beijing  100083
-				CN
-
-58-35-D9   (hex)		Cisco Systems, Inc
-5835D9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-64-D9-12   (hex)		Solidica, Inc.
-64D912     (base 16)		Solidica, Inc.
-				5840 Interface Drive
-				Ann Arbor  Michigan  48103
-				US
-
-C4-7B-2F   (hex)		Beijing JoinHope Image Technology Ltd.
-C47B2F     (base 16)		Beijing JoinHope Image Technology Ltd.
-				624 Room .Automation Building.95# Zhong Guancun East Road.Haidian District
-				Beijing    100190
-				CN
-
-50-8A-CB   (hex)		SHENZHEN MAXMADE TECHNOLOGY CO., LTD.
-508ACB     (base 16)		SHENZHEN MAXMADE TECHNOLOGY CO., LTD.
-				Building 3,No.5 Fuqiao Industrial Estate,
-				Shenzhen  Guangdong  518103
-				CN
-
-3C-D1-6E   (hex)		Telepower Communication Co., Ltd
-3CD16E     (base 16)		Telepower Communication Co., Ltd
-				5/F,Zonghe Building, Hantian Technology Town,Guiping RD,Nanhai District,F
-				Foshan City  Guangdong  528251
-				CN
-
-FC-2E-2D   (hex)		Lorom Industrial Co.LTD.
-FC2E2D     (base 16)		Lorom Industrial Co.LTD.
-				F1.13,Rm.2,No.78,Sec.2,An-HoRd.
-				Taipei    106
-				TW
-
-40-04-0C   (hex)		A&T
-40040C     (base 16)		A&T
-				#411, Will Town, 402-3
-				Bucheon-Si  Gyeonggi-Do  420-814
-				KR
-
-DC-3C-84   (hex)		Ticom Geomatics, Inc.
-DC3C84     (base 16)		Ticom Geomatics, Inc.
-				9130 Jollyville Rd. Ste. 300
-				Austin  Texas  78759
-				US
-
-D0-13-1E   (hex)		Sunrex Technology Corp
-D0131E     (base 16)		Sunrex Technology Corp
-				No. 188-1,Chung Cheng Road.,Ta Ya Shiang
-				Taichung    428
-				TW
-
-00-FC-70   (hex)		Intrepid Control Systems, Inc.
-00FC70     (base 16)		Intrepid Control Systems, Inc.
-				31601 Research Park Dr.
-				Madison Heights  MI  48071
-				US
-
-70-3A-D8   (hex)		Shenzhen Afoundry Electronic Co., Ltd
-703AD8     (base 16)		Shenzhen Afoundry Electronic Co., Ltd
-				201, A Building, Bole Industrial Zone, Bantian, Longgang District
-				Shenzhen   Guangdong  518129
-				CN
-
-70-4A-AE   (hex)		Xstream Flow (Pty) Ltd
-704AAE     (base 16)		Xstream Flow (Pty) Ltd
-				Room 123, Building 16, CSIR campus
-				Pretoria  Gauteng  0184
-				ZA
-
-40-B3-FC   (hex)		Logital Co. Limited 
-40B3FC     (base 16)		Logital Co. Limited 
-				Rm 901-902, 9/F, Nathan Centre, 
-				Kowloon    
-				HK
-
-A4-13-4E   (hex)		Luxul 
-A4134E     (base 16)		Luxul 
-				14203 Minuteman Drive
-				Draper  UT  84020
-				US
-
-B0-99-28   (hex)		FUJITSU LIMITED
-B09928     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-04-E1-C8   (hex)		IMS Soluções em Energia Ltda.
-04E1C8     (base 16)		IMS Soluções em Energia Ltda.
-				Av. Bernardino Silveira Pastoriza, 720
-				Porto Alegre  RS  91160-310
-				BR
-
-94-8F-EE   (hex)		Verizon Telematics
-948FEE     (base 16)		Verizon Telematics
-				2002 Summit Blvd
-				Atlanta  GA  30319
-				US
-
-50-D6-D7   (hex)		Takahata Precision
-50D6D7     (base 16)		Takahata Precision
-				4-17-1 Suniyoshi
-				Kofu    400-0851
-				JP
-
-88-F0-77   (hex)		Cisco Systems, Inc
-88F077     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-75-21   (hex)		CJSC RTSoft
-587521     (base 16)		CJSC RTSoft
-				Nikitinskaya str., 3
-				Moscow    105037
-				RU
-
-C4-0F-09   (hex)		Hermes electronic GmbH
-C40F09     (base 16)		Hermes electronic GmbH
-				Am Handwerkerpark 1
-				Essen  NRW  45309
-				DE
-
-48-F4-7D   (hex)		TechVision Holding  Internation Limited
-48F47D     (base 16)		TechVision Holding  Internation Limited
-				Offshore Incorporations Centre
-				Road Town  Tortola  VG1110
-				VG
-
-F0-81-AF   (hex)		IRZ AUTOMATION TECHNOLOGIES LTD
-F081AF     (base 16)		IRZ AUTOMATION TECHNOLOGIES LTD
-				Unit 9-10 27/F Seapower Tower
-				  Kowloon  
-				HK
-
-70-14-04   (hex)		Limited Liability Company
-701404     (base 16)		Limited Liability Company
-				I.Yakovleva St., 1
-				Cheboksary Chuvash Republic    428003
-				RU
-
-B4-35-F7   (hex)		Zhejiang Pearmain Electronics Co.ltd.
-B435F7     (base 16)		Zhejiang Pearmain Electronics Co.ltd.
-				4F Yitai Mansion, 76 Gucui Road,
-				Hangzhou  Zhejiang  310012
-				CN
-
-98-66-EA   (hex)		Industrial Control Communications, Inc.
-9866EA     (base 16)		Industrial Control Communications, Inc.
-				1600 Aspen Commons
-				Middleton  WI  53562
-				US
-
-98-30-00   (hex)		Beijing KEMACOM Technologies Co., Ltd.
-983000     (base 16)		Beijing KEMACOM Technologies Co., Ltd.
-				Room 208, Building 6, No.50, Xi San Huan Bei Road 
-				Beijing    100044
-				CN
-
-90-CF-15   (hex)		Nokia Corporation
-90CF15     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-94-8B-03   (hex)		EAGET Innovation and Technology Co., Ltd.
-948B03     (base 16)		EAGET Innovation and Technology Co., Ltd.
-				3/F, Building 4, Lianchuang Technology Park,Buji Town,
-				Shenzhen  Guangdong  518112
-				CN
-
-2C-00-33   (hex)		EControls, LLC
-2C0033     (base 16)		EControls, LLC
-				5757 Farinon Dr
-				San Antonio  TX  78249
-				US
-
-AC-19-9F   (hex)		SUNGROW POWER SUPPLY CO.,LTD.
-AC199F     (base 16)		SUNGROW POWER SUPPLY CO.,LTD.
-				NO.2 Tianhu Road, New and High Technology Industrial Development Zone
-				Hefei  Anhui  230088
-				CN
-
-7C-4A-82   (hex)		Portsmith LLC
-7C4A82     (base 16)		Portsmith LLC
-				850 E. Franklin Road
-				Meridian  ID  83642
-				US
-
-94-E8-48   (hex)		FYLDE MICRO LTD
-94E848     (base 16)		FYLDE MICRO LTD
-				8 AVROE CRESCENT
-				BLACKPOOL  LANCASHIRE  FY4 2DP
-				GB
-
-AC-5E-8C   (hex)		Utillink
-AC5E8C     (base 16)		Utillink
-				817 Woolim Lions Valley 1, 311-3 Sangdaewon-dong Jungwon-gu
-				Seongnam-si  Gyeonggi-do  462160
-				KR
-
-18-E2-88   (hex)		STT Condigi
-18E288     (base 16)		STT Condigi
-				Agnesfridsvagen 113 A
-				Malmö  Skåne  21237
-				SE
-
-1C-35-F1   (hex)		NEW Lift Neue Elektronische Wege Steuerungsbau GmbH
-1C35F1     (base 16)		NEW Lift Neue Elektronische Wege Steuerungsbau GmbH
-				Lochhamer Schlag 8
-				Graefelfing  Bavaria  82166
-				DE
-
-80-34-57   (hex)		OT Systems Limited
-803457     (base 16)		OT Systems Limited
-				Unit 1023, 10/F., Landmark North,
-				Sheung Shui, N. T.    
-				HK
-
-5C-0C-BB   (hex)		CELIZION Inc.
-5C0CBB     (base 16)		CELIZION Inc.
-				#206 Lordland EZ Tower, GuMi-Dong 153 BunDang-Gu
-				SeongNam-Si   GyeongGi-Do  463-870
-				KR
-
-C4-24-2E   (hex)		Galvanic Applied Sciences Inc
-C4242E     (base 16)		Galvanic Applied Sciences Inc
-				7000 Fisher Road SE
-				Calgary  Alberta  T2H 0W3
-				CA
-
-24-C8-6E   (hex)		Chaney Instrument Co.
-24C86E     (base 16)		Chaney Instrument Co.
-				965 Wells Street
-				Lake Geneva  WI  53147
-				US
-
-F0-AE-51   (hex)		Xi3 Corp
-F0AE51     (base 16)		Xi3 Corp
-				299 S. Main St.
-				Salt Lake City  UT  84111
-				US
-
-B8-0B-9D   (hex)		ROPEX Industrie-Elektronik GmbH
-B80B9D     (base 16)		ROPEX Industrie-Elektronik GmbH
-				Adolf-Heim-Str. 4
-				Bietigheim-Bissingen  Baden Wuerttemberg  74321
-				DE
-
-30-61-18   (hex)		Paradom Inc.
-306118     (base 16)		Paradom Inc.
-				8F, N0. 178, Sec-2, Gongdaowu Rd.
-				Hsinchu City    300
-				TW
-
-4C-73-67   (hex)		Genius Bytes Software Solutions GmbH
-4C7367     (base 16)		Genius Bytes Software Solutions GmbH
-				Merianstraße 30
-				Bochum  NRW  44801
-				DE
-
-90-EA-60   (hex)		SPI Lasers Ltd 
-90EA60     (base 16)		SPI Lasers Ltd 
-				6 wellington Park
-				Southampton  Hampshire  S0302QU
-				GB
-
-50-70-E5   (hex)		He Shan World Fair Electronics Technology Limited
-5070E5     (base 16)		He Shan World Fair Electronics Technology Limited
-				New Material Base, Gonghe Town
-				Jiangmen  Guangdong  529728
-				CN
-
-80-22-75   (hex)		Beijing Beny Wave Technology Co Ltd
-802275     (base 16)		Beijing Beny Wave Technology Co Ltd
-				No.55, Jiachuang Road
-				Tongzhou District  Beijing  101111
-				CN
-
-CC-F3-A5   (hex)		Chi Mei Communication Systems, Inc
-CCF3A5     (base 16)		Chi Mei Communication Systems, Inc
-				No.4
-				Tucheng City  Taipei County   23678
-				TW
-
-14-A9-E3   (hex)		MST CORPORATION
-14A9E3     (base 16)		MST CORPORATION
-				4th Floor Lawford House
-				London  England  N3 1 RL
-				GB
-
-F8-EA-0A   (hex)		Dipl.-Math. Michael Rauch
-F8EA0A     (base 16)		Dipl.-Math. Michael Rauch
-				Kapellenstraße 31
-				Bretten  BaWü  75015
-				DE
-
-38-31-AC   (hex)		WEG
-3831AC     (base 16)		WEG
-				Av. Pref. Waldemar Grubba, 3000
-				Jaraguá do Sul  Santa Catarina  89256-900
-				BR
-
-58-4C-19   (hex)		Chongqing Guohong Technology Development Company Limited
-584C19     (base 16)		Chongqing Guohong Technology Development Company Limited
-				Rongzhi Building, Science & Technology Venture Center,
-				Chongqing    401336
-				CN
-
-64-69-BC   (hex)		Hytera Communications Co .,ltd
-6469BC     (base 16)		Hytera Communications Co .,ltd
-				HYT Tower ,Hi-Tech Industrial Park North,Nanshan District,
-				Shenzhen  Guangdong  518057
-				CN
-
-B4-F3-23   (hex)		PETATEL INC.
-B4F323     (base 16)		PETATEL INC.
-				#322 THE O VILLE 720-25, YEOKSAM-DONG
-				GANGNAM-GU  SEOUL  135080
-				KR
-
-28-51-32   (hex)		Shenzhen Prayfly Technology Co.,Ltd
-285132     (base 16)		Shenzhen Prayfly Technology Co.,Ltd
-				16F B International Chamber of Commerce Building
-				Shenzhen  Guangdong Province   518048
-				CN
-
-E4-2F-F6   (hex)		Unicore communication Inc.
-E42FF6     (base 16)		Unicore communication Inc.
-				Rm.312 Building 2 IRICO, No.11St.4,Shangdi, Haidian District,
-				Beijing    100085
-				CN
-
-84-D9-C8   (hex)		Unipattern Co.,
-84D9C8     (base 16)		Unipattern Co.,
-				16F., No.30., Beiping E. Rd., Zhongzheng Dist.,
-				Taipei    100
-				TW
-
-94-AA-B8   (hex)		Joview(Beijing) Technology Co. Ltd.
-94AAB8     (base 16)		Joview(Beijing) Technology Co. Ltd.
-				Room 302, South Building
-				Beijing    100081
-				CN
-
-28-F3-58   (hex)		2C - Trifonov & Co
-28F358     (base 16)		2C - Trifonov & Co
-				133, Tsarigradsko Shose Blvd, BIZ IZOT, 
-				Sofia    1784
-				BG
-
-14-C2-1D   (hex)		Sabtech Industries
-14C21D     (base 16)		Sabtech Industries
-				23231 La Palma Ave
-				Yorba Linda  Ca.  92887-4788
-				US
-
-C8-84-39   (hex)		Sunrise Technologies
-C88439     (base 16)		Sunrise Technologies
-				54 Commercial Street
-				Raynham  MA  02767
-				US
-
-F0-BF-97   (hex)		Sony Corporation
-F0BF97     (base 16)		Sony Corporation
-				Gotenyama Tec 5-1-2
-				Tokyo  Shinagawa-ku  141-0001
-				JP
-
-C4-4A-D0   (hex)		FIREFLIES SYSTEMS
-C44AD0     (base 16)		FIREFLIES SYSTEMS
-				3 CHEMIN DU PRE CARRE
-				MEYLAN    38240
-				FR
-
-EC-7D-9D   (hex)		CPI
-EC7D9D     (base 16)		CPI
-				3222 Phoenixville Pike Suite 200
-				Malvern  PA  19355
-				US
-
-C8-1E-8E   (hex)		ADV Security (S) Pte Ltd
-C81E8E     (base 16)		ADV Security (S) Pte Ltd
-				56 Dunlop Street
-				    209386
-				SG
-
-A8-87-92   (hex)		Broadband Antenna Tracking Systems
-A88792     (base 16)		Broadband Antenna Tracking Systems
-				8902 Vincennes Circle, Suite D-2
-				Indianapolis  IN  46268
-				US
-
-14-F0-C5   (hex)		Xtremio Ltd.
-14F0C5     (base 16)		Xtremio Ltd.
-				POB 5246
-				Herzelyia    46152
-				IL
-
-E8-C2-29   (hex)		H-Displays (MSC) Bhd
-E8C229     (base 16)		H-Displays (MSC) Bhd
-				No. 31 & 32, Jalan Gangsa Dua
-				Johor Bahru    81700
-				MY
-
-3C-A7-2B   (hex)		MRV Communications (Networks) LTD
-3CA72B     (base 16)		MRV Communications (Networks) LTD
-				P.O Box 614
-				Yokneam     20692
-				IL
-
-04-E6-62   (hex)		Acroname Inc.
-04E662     (base 16)		Acroname Inc.
-				4822 Sterling Drive
-				Boulder  CO  80301-2350
-				US
-
-F8-7B-8C   (hex)		Amped Wireless
-F87B8C     (base 16)		Amped Wireless
-				13089 Peyton Dr. #C307
-				Chino Hills  CA  91709
-				US
-
-28-34-10   (hex)		Enigma Diagnostics Limited
-283410     (base 16)		Enigma Diagnostics Limited
-				Building 224
-				DSTL Porton Down  Salisbury  SP4 0JQ
-				GB
-
-0C-E8-2F   (hex)		Bonfiglioli Vectron GmbH
-0CE82F     (base 16)		Bonfiglioli Vectron GmbH
-				Europark Fichtenhain B6
-				Krefeld  NRW  47807
-				DE
-
-40-F4-EC   (hex)		Cisco Systems, Inc
-40F4EC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-14-B7-3D   (hex)		ARCHEAN Technologies
-14B73D     (base 16)		ARCHEAN Technologies
-				1899 avenue d'Italie
-				MONTAUBAN    82000
-				FR
-
-94-8D-50   (hex)		Beamex Oy Ab
-948D50     (base 16)		Beamex Oy Ab
-				Ristisuonraitti 10
-				Pietarsaari    FI-68600
-				FI
-
-A4-33-D1   (hex)		Fibrlink Communications Co.,Ltd.
-A433D1     (base 16)		Fibrlink Communications Co.,Ltd.
-				28F Ages Wealth World, No.1 Hangfeng Road
-				Beijing    100070
-				CN
-
-5C-BD-9E   (hex)		HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED
-5CBD9E     (base 16)		HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED
-				FLAT RM 2103,  EASEY COMMERCIAL BLDG,253-261 HENNESSY RD,  
-				  WANCHAI  999077
-				HK
-
-08-E6-72   (hex)		JEBSEE ELECTRONICS CO.,LTD.
-08E672     (base 16)		JEBSEE ELECTRONICS CO.,LTD.
-				24-3, SIN LE ROAD, 
-				TAINAN    70268
-				TW
-
-B8-E5-89   (hex)		Payter BV
-B8E589     (base 16)		Payter BV
-				Rozenlaan 115
-				Rotterdam  Zuid-Holland  3051 LP
-				NL
-
-88-E0-A0   (hex)		Shenzhen VisionSTOR Technologies Co., Ltd
-88E0A0     (base 16)		Shenzhen VisionSTOR Technologies Co., Ltd
-				12/F, East Tower,Nanshan Software Park
-				Shenzhen  Guangdong  518000
-				CN
-
-FC-10-BD   (hex)		Control Sistematizado S.A.
-FC10BD     (base 16)		Control Sistematizado S.A.
-				Cra 43 N 31 52
-				Medellin  Antioquia  10101
-				CO
-
-F0-C2-7C   (hex)		Mianyang Netop Telecom Equipment Co.,Ltd.
-F0C27C     (base 16)		Mianyang Netop Telecom Equipment Co.,Ltd.
-				No.111,East section of Puming South Road,
-				Mianyang City  Sichuan Province,   621000
-				CN
-
-24-1A-8C   (hex)		Squarehead Technology AS
-241A8C     (base 16)		Squarehead Technology AS
-				PO Box 13 Nydalen
-				Oslo    NO-0410
-				NO
-
-D4-4F-80   (hex)		Kemper Digital GmbH
-D44F80     (base 16)		Kemper Digital GmbH
-				Koenigswall 16-18
-				Recklinghausen  North-Rhine-Westphalia  45657
-				DE
-
-A4-1B-C0   (hex)		Fastec Imaging Corporation
-A41BC0     (base 16)		Fastec Imaging Corporation
-				17150 Via Del Campo
-				San Diego  California  92127
-				US
-
-20-5B-2A   (hex)		Private
-205B2A     (base 16)		Private
-
-F4-03-21   (hex)		BeNeXt B.V.
-F40321     (base 16)		BeNeXt B.V.
-				Ter Gouwstraat 3
-				Amsterdam  NH  1093JX
-				NL
-
-A0-71-A9   (hex)		Nokia Corporation
-A071A9     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-A4-E3-2E   (hex)		Silicon & Software Systems Ltd.
-A4E32E     (base 16)		Silicon & Software Systems Ltd.
-				South County Business Park
-				Leopardstown  Dublin  18
-				IE
-
-C8-C1-26   (hex)		ZPM Industria e Comercio Ltda
-C8C126     (base 16)		ZPM Industria e Comercio Ltda
-				Rua Araguaia, 175
-				Canoas  RS  92410-000
-				BR
-
-64-DE-1C   (hex)		Kingnetic Pte Ltd
-64DE1C     (base 16)		Kingnetic Pte Ltd
-				47 Kaki Bukit Place
-				    416225
-				SG
-
-A8-62-A2   (hex)		JIWUMEDIA CO., LTD.
-A862A2     (base 16)		JIWUMEDIA CO., LTD.
-				#902, Daerug Techno Town 13'th, 664
-				Geumcheon-gu  Seoul  153-803
-				KR
-
-98-4E-97   (hex)		Starlight Marketing (H. K.) Ltd.
-984E97     (base 16)		Starlight Marketing (H. K.) Ltd.
-				5/F., Shing Dao Industrial Building, 
-				    
-				HK
-
-64-DC-01   (hex)		Static Systems Group PLC
-64DC01     (base 16)		Static Systems Group PLC
-				Heathmill Road
-				Wolverhampton  West Midlands  WV5 8AN
-				GB
-
-FC-1F-C0   (hex)		EURECAM
-FC1FC0     (base 16)		EURECAM
-				BAT 9 - Miniparc
-				LES ULIS    91940
-				FR
-
-BC-67-84   (hex)		Environics Oy
-BC6784     (base 16)		Environics Oy
-				Graanintie 5
-				Mikkeli    50190
-				FI
-
-68-DC-E8   (hex)		PacketStorm Communications
-68DCE8     (base 16)		PacketStorm Communications
-				20 Meridian Rd
-				Eatontown  NJ  07724
-				US
-
-48-8E-42   (hex)		DIGALOG GmbH
-488E42     (base 16)		DIGALOG GmbH
-				Wattstraße 11-13
-				Berlin    D-13355
-				DE
-
-60-76-88   (hex)		Velodyne
-607688     (base 16)		Velodyne
-				345 Digital Drive
-				Morgan Hill  CA  95037
-				US
-
-78-CD-8E   (hex)		SMC Networks Inc
-78CD8E     (base 16)		SMC Networks Inc
-				20 Mason
-				Irvine  CA  92618
-				US
-
-2C-80-65   (hex)		HARTING Inc. of North America
-2C8065     (base 16)		HARTING Inc. of North America
-				1370 Bowes Road
-				Elgin  Illinois  60123
-				US
-
-3C-C0-C6   (hex)		d&b audiotechnik GmbH
-3CC0C6     (base 16)		d&b audiotechnik GmbH
-				Eugen Adolff Str 134
-				Backnang  Baden Wuerttemberg  71522
-				DE
-
-44-68-AB   (hex)		JUIN COMPANY, LIMITED
-4468AB     (base 16)		JUIN COMPANY, LIMITED
-				2FL, 1075-1, Wonpyeong-Dong
-				Gumi City  Gyeongsangbuk-Do  730-010
-				KR
-
-F8-10-37   (hex)		Atopia Systems, LP
-F81037     (base 16)		Atopia Systems, LP
-				681 N. Plano Road
-				Richardson  TX  75082
-				US
-
-78-A6-83   (hex)		Precidata
-78A683     (base 16)		Precidata
-				CP 672
-				2002  NE  2002
-				CH
-
-F0-25-72   (hex)		Cisco Systems, Inc
-F02572     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-04-FF-51   (hex)		NOVAMEDIA INNOVISION SP. Z O.O.
-04FF51     (base 16)		NOVAMEDIA INNOVISION SP. Z O.O.
-				WODNA 7 
-				KALISZ  WIELKOPOLSKA  62-800
-				PL
-
-4C-B4-EA   (hex)		HRD (S) PTE., LTD.
-4CB4EA     (base 16)		HRD (S) PTE., LTD.
-				Lot 7, Block 9, Phase 1, Cavite Eco-Zone,
-				Rosario  Cavite  4106
-				PH
-
-D4-4C-24   (hex)		Vuppalamritha Magnetic Components LTD
-D44C24     (base 16)		Vuppalamritha Magnetic Components LTD
-				3rd Floor, 307 ,My Home Ashoka Chambers,S.P Road, 
-				Secunderabad  AndhraPradesh  500003
-				IN
-
-F8-C6-78   (hex)		Carefusion
-F8C678     (base 16)		Carefusion
-				10020 Pacific Mesa Blvd
-				San Diego  CA  92121
-				US
-
-6C-AB-4D   (hex)		Digital Payment Technologies
-6CAB4D     (base 16)		Digital Payment Technologies
-				4105 Grandview Hwy
-				Burnaby  BC  V5C 6B4
-				CA
-
-2C-B0-DF   (hex)		Soliton Technologies Pvt Ltd
-2CB0DF     (base 16)		Soliton Technologies Pvt Ltd
-				# 683, 15th Cross 
-				Bangalore  Karnataka  560 078
-				IN
-
-EC-E5-55   (hex)		Hirschmann Automation
-ECE555     (base 16)		Hirschmann Automation
-				Stuttgarter Straße 45-51
-				Neckartenzlingen  Baden-Württemberg  72654
-				DE
-
-58-F9-8E   (hex)		SECUDOS GmbH
-58F98E     (base 16)		SECUDOS GmbH
-				Rhenus-Platz 2
-				Holzwickede  NRW  59439
-				DE
-
-B4-C4-4E   (hex)		VXL eTech Pvt Ltd
-B4C44E     (base 16)		VXL eTech Pvt Ltd
-				#91, 11th Main, Begur Main Road
-				Bangalore  Karnataka  560068
-				IN
-
-70-7E-DE   (hex)		NASTEC LTD.
-707EDE     (base 16)		NASTEC LTD.
-				111-D, Krasnorechenskaya str.
-				Khabarovsk    680006
-				RU
-
-C0-7E-40   (hex)		SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD
-C07E40     (base 16)		SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD
-				XDK BUILDING,NO.1 INDUSTRIAL AREA,BANTIAN,LONGGANG DISTRICT
-				SHENZHEN  GUANGDONG  518129
-				CN
-
-E4-4F-29   (hex)		MA Lighting Technology GmbH
-E44F29     (base 16)		MA Lighting Technology GmbH
-				Dachdeckerstraße16
-				Waldbüttelbrunn  Bavaria  97297
-				DE
-
-B4-74-9F   (hex)		ASKEY COMPUTER CORP
-B4749F     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-7C-4A-A8   (hex)		MindTree Wireless PVT Ltd
-7C4AA8     (base 16)		MindTree Wireless PVT Ltd
-				LGF, Phase III, Mindtree West Campus, 
-				Bangalore  Karnataka  560 059
-				IN
-
-80-91-C0   (hex)		AgileMesh, Inc.
-8091C0     (base 16)		AgileMesh, Inc.
-				1671 International Pkwy
-				Richardson  TX  75081
-				US
-
-E0-5F-B9   (hex)		Cisco Systems, Inc
-E05FB9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-14-3E   (hex)		Modoosis Inc.
-E0143E     (base 16)		Modoosis Inc.
-				#302, Samil Bldg., 656-282
-				Seoul    133-110
-				KR
-
-90-D8-52   (hex)		Comtec Co., Ltd.
-90D852     (base 16)		Comtec Co., Ltd.
-				 3F., No.81, Jiankang Rd.,
-				Zhonghe City  Taipei County  23586
-				TW
-
-38-01-97   (hex)		TSST Global,Inc
-380197     (base 16)		TSST Global,Inc
-				14 Floor, Bldg. No. 102, Digital Empire2, 486, Sin-dong, Yeongtong-gu, Suwon-si,
-				Su-won  Gyeonggi  443-734
-				KR
-
-AC-02-CF   (hex)		RW Tecnologia Industria e Comercio Ltda
-AC02CF     (base 16)		RW Tecnologia Industria e Comercio Ltda
-				Centro Empresarial Paulo Frederico de Toledo, 80 A
-				Santa Rita do Sapucai  Minas Gerais   37540000
-				BR
-
-D4-12-96   (hex)		Anobit Technologies Ltd.
-D41296     (base 16)		Anobit Technologies Ltd.
-				8 Hasadnaot St.
-				Herzeliya Pituach     46728
-				IL
-
-48-17-4C   (hex)		MicroPower technologies
-48174C     (base 16)		MicroPower technologies
-				4225 Executive Sq.
-				La Jolla  California  92037
-				US
-
-34-9A-0D   (hex)		ZBD Displays Ltd
-349A0D     (base 16)		ZBD Displays Ltd
-				Orchard Lea
-				Windsor  Berkshire  SL4 4RU
-				GB
-
-90-50-7B   (hex)		Advanced PANMOBIL Systems GmbH & Co. KG
-90507B     (base 16)		Advanced PANMOBIL Systems GmbH & Co. KG
-				Hansestraße 91
-				Cologne  NRW  51149
-				DE
-
-08-76-FF   (hex)		Thomson Telecom Belgium
-0876FF     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				Edegem  Antwerp  B-2650
-				BE
-
-1C-7C-11   (hex)		EID 
-1C7C11     (base 16)		EID 
-				Rua Quinta dos Medronheiros 
-				Charneca da Caparica     2820-486
-				PT
-
-20-AA-25   (hex)		IP-NET LLC
-20AA25     (base 16)		IP-NET LLC
-				10256 N.W. 47th St.
-				Sunrise  FL  33351
-				US
-
-C4-EE-F5   (hex)		II-VI Incorporated
-C4EEF5     (base 16)		II-VI Incorporated
-				Network Solutions,343 Daniel Zenker Dr., Suite 102
-				Horseheads  NY  14845
-				US
-
-E0-CF-2D   (hex)		Gemintek Corporation
-E0CF2D     (base 16)		Gemintek Corporation
-				5F-1, No.8, Alley 30, Lane 358, Rueiguang Rd.
-				Taipei    114
-				TW
-
-D4-91-AF   (hex)		Electroacustica General Iberica, S.A.
-D491AF     (base 16)		Electroacustica General Iberica, S.A.
-				Avda. Almozara, 79
-				Zaragoza    50003
-				ES
-
-C4-B5-12   (hex)		General Electric Digital Energy
-C4B512     (base 16)		General Electric Digital Energy
-				4200 Wildwood Pkwy
-				Atlanta  GA  30339
-				US
-
-00-34-F1   (hex)		Radicom Research, Inc.
-0034F1     (base 16)		Radicom Research, Inc.
-				2148 Bering Drive
-				San Jose  Ca  95131
-				US
-
-94-33-DD   (hex)		Taco Inc
-9433DD     (base 16)		Taco Inc
-				1160 Cranston Street
-				Cranston  RI  02920
-				US
-
-E0-25-38   (hex)		Titan Pet Products
-E02538     (base 16)		Titan Pet Products
-				6521 Creedmoor Rd. Suite 101
-				Raleigh  NC  27613
-				US
-
-CC-7A-30   (hex)		CMAX Wireless Co., Ltd.
-CC7A30     (base 16)		CMAX Wireless Co., Ltd.
-				KT Bongduk B/D 9F, 627-15, Bongduk-dong
-				Namgu  Daegu  705710
-				KR
-
-B8-8E-3A   (hex)		Infinite Technologies JLT
-B88E3A     (base 16)		Infinite Technologies JLT
-				Office 3203, Level 32
-				Jumeirah Lake Towers  Dubai  
-				AE
-
-58-8D-09   (hex)		Cisco Systems, Inc
-588D09     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C0-C1-C0   (hex)		Cisco-Linksys, LLC
-C0C1C0     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-60-15-C7   (hex)		IdaTech
-6015C7     (base 16)		IdaTech
-				63065 NE 18th St.
-				Bend  OR  97701
-				US
-
-DC-20-08   (hex)		ASD Electronics Ltd 
-DC2008     (base 16)		ASD Electronics Ltd 
-				DEDE INDUSTRIAL PARK,JIAN'AN ROAD,HIGH-TECH
-				Shenzhen   Guang Dong  518103
-				CN
-
-1C-83-B0   (hex)		Linked IP GmbH
-1C83B0     (base 16)		Linked IP GmbH
-				Kirchenstrasse 9
-				Anif / Niederalm  SBG  5081
-				AT
-
-A4-D1-D1   (hex)		ECOtality North America
-A4D1D1     (base 16)		ECOtality North America
-				430 S 2nd Avenue
-				Phoenix  AZ  85003
-				US
-
-C4-93-13   (hex)		100fio networks technology llc
-C49313     (base 16)		100fio networks technology llc
-				2534 crescent st. apt 3F
-				Astoria  New york  11102
-				US
-
-7C-39-20   (hex)		SSOMA SECURITY
-7C3920     (base 16)		SSOMA SECURITY
-				Unit 703, Daeryung Technotown 13th, 
-				Geumcheongu  Seoul  153754
-				KR
-
-28-C0-DA   (hex)		Juniper Networks
-28C0DA     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-9C-77-AA   (hex)		NADASNV
-9C77AA     (base 16)		NADASNV
-				2203, T-dong, Poonglim I-won Plus
-				Seongnam-si  Gyeonggi-do  463-862
-				KR
-
-10-E8-EE   (hex)		PhaseSpace
-10E8EE     (base 16)		PhaseSpace
-				1933 Davis St Suite 312
-				San Leandro  CA  94577
-				US
-
-A4-7C-1F   (hex)		Cobham plc
-A47C1F     (base 16)		Cobham plc
-				3985 Gateway Centre Blvd
-				Pinellas Park  FL  33782
-				US
-
-D4-6C-DA   (hex)		CSM GmbH
-D46CDA     (base 16)		CSM GmbH
-				Raiffeisenstraße 34
-				Filderstadt  Baden-Württemberg  70794
-				DE
-
-5C-D9-98   (hex)		D-Link Corporation
-5CD998     (base 16)		D-Link Corporation
-				No.289, Sinhu 3rd Rd., Neihu District, 
-				Taipei City     114
-				TW
-
-68-59-7F   (hex)		Alcatel Lucent
-68597F     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-F0-65-DD   (hex)		Primax Electronics Ltd.
-F065DD     (base 16)		Primax Electronics Ltd.
-				669, Ruey Kuang Road, Neihu
-				Taipei    114
-				TW
-
-70-65-82   (hex)		Suzhou Hanming Technologies Co., Ltd.
-706582     (base 16)		Suzhou Hanming Technologies Co., Ltd.
-				Suite 407, No. 166, Ren Ai Road
-				Suzhou  Jiangsu  215123
-				CN
-
-34-D2-C4   (hex)		RENA GmbH Print Systeme
-34D2C4     (base 16)		RENA GmbH Print Systeme
-				Hienlohestrasse 24
-				Otterfing  Bavaria  83624
-				DE
-
-D4-CB-AF   (hex)		Nokia Corporation
-D4CBAF     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-04-5D-56   (hex)		camtron industrial inc.
-045D56     (base 16)		camtron industrial inc.
-				5F, Kuem-Ah B/D, 31-3, Karak-dong, Songpa-gu
-				Seoul    138-801
-				KR
-
-68-23-4B   (hex)		Nihon Dengyo Kousaku
-68234B     (base 16)		Nihon Dengyo Kousaku
-				shinmachi 21-1
-				kawagoe-shi  saitama  350-1107
-				JP
-
-1C-3D-E7   (hex)		Sigma Koki Co.,Ltd.
-1C3DE7     (base 16)		Sigma Koki Co.,Ltd.
-				1-19-9 Midori
-				Sumida-ku  Tokyo  130-0021
-				JP
-
-58-BC-27   (hex)		Cisco Systems, Inc
-58BC27     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-D6-07   (hex)		Nokia Corporation
-20D607     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-6C-E0-B0   (hex)		SOUND4
-6CE0B0     (base 16)		SOUND4
-				11 quai Joseph Gillet
-				LYON    69004
-				FR
-
-9C-FF-BE   (hex)		OTSL Inc.
-9CFFBE     (base 16)		OTSL Inc.
-				HANROKU Bldg. 2F, 2-1-2
-				Shinjuku-ku  Tokyo  160-0021
-				JP
-
-00-F8-60   (hex)		PT. Panggung Electric Citrabuana
-00F860     (base 16)		PT. Panggung Electric Citrabuana
-				Jl. Raya Waru no. 1
-				Sidoarjo  Jawa Timur  61256
-				ID
-
-B8-BA-72   (hex)		Cynove
-B8BA72     (base 16)		Cynove
-				10 cite rougemont
-				Paris    75009
-				FR
-
-44-3D-21   (hex)		Nuvolt
-443D21     (base 16)		Nuvolt
-				8087 Boul. de la Rive Sud
-				Levis  Quebec  G6V 9G9
-				CA
-
-30-49-3B   (hex)		Nanjing Z-Com Wireless Co.,Ltd
-30493B     (base 16)		Nanjing Z-Com Wireless Co.,Ltd
-				Z-Com Building,NO.30 Jiangsu Software Park,NO.699-22 Xuanwu Avenue,
-				Nanjing  Jiangsu  210042
-				CN
-
-A4-5C-27   (hex)		Nintendo Co., Ltd.
-A45C27     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-6C-04-60   (hex)		RBH Access Technologies Inc.
-6C0460     (base 16)		RBH Access Technologies Inc.
-				2 Automatic Road
-				Brampton  Ontario  L6S 6K8
-				CA
-
-70-64-17   (hex)		ORBIS TECNOLOGIA ELECTRICA S.A.
-706417     (base 16)		ORBIS TECNOLOGIA ELECTRICA S.A.
-				Lerida, 61
-				Madrid  Madrid  E28020
-				US
-
-18-EF-63   (hex)		Cisco Systems, Inc
-18EF63     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-6F-EC   (hex)		Braemac CA LLC
-206FEC     (base 16)		Braemac CA LLC
-				43134 Osgood Road
-				Fremont  CA  94539
-				US
-
-10-0D-32   (hex)		Embedian, Inc.
-100D32     (base 16)		Embedian, Inc.
-				10F., 95, Nanjing E. Rd. Sec. 4, 
-				Taipei    10580
-				TW
-
-88-AC-C1   (hex)		Generiton Co., Ltd. 
-88ACC1     (base 16)		Generiton Co., Ltd. 
-				8F-1, No. 81, Shuili Rd., 
-				Hsinchu City,     30059 
-				TW
-
-88-18-AE   (hex)		Tamron Co., Ltd
-8818AE     (base 16)		Tamron Co., Ltd
-				1385,Hasunuma, Minuma-ku
-				Saitama-shi  Saitama  337-8556
-				JP
-
-7C-ED-8D   (hex)		Microsoft
-7CED8D     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-A4-BE-61   (hex)		EutroVision System, Inc.
-A4BE61     (base 16)		EutroVision System, Inc.
-				Rm 403,Building33,No.680 GuipingRd,Xuhui,
-				Shanghai    200233
-				CN
-
-D0-7D-E5   (hex)		Forward Pay Systems, Inc.
-D07DE5     (base 16)		Forward Pay Systems, Inc.
-				9531 West 78th St., #245
-				Eden Prairie  MN  55344
-				US
-
-04-DD-4C   (hex)		Velocytech
-04DD4C     (base 16)		Velocytech
-				Poppelgårdvej 11
-				Søborg  DK  2860
-				DK
-
-A4-0C-C3   (hex)		Cisco Systems, Inc
-A40CC3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-4C-BA-A3   (hex)		Bison Electronics Inc.
-4CBAA3     (base 16)		Bison Electronics Inc.
-				3F., No.28, Lane 583, Rueiguang Rd., Neihu District
-				Taipei City    11492
-				TW
-
-A8-B1-D4   (hex)		Cisco Systems, Inc
-A8B1D4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-EC-7C-74   (hex)		Justone Technologies Co., Ltd.
-EC7C74     (base 16)		Justone Technologies Co., Ltd.
-				Tongguang Building F19, 12# South Agriculture Exhibition Center Road, 
-				Beijing    100125
-				CN
-
-CC-FC-B1   (hex)		Wireless Technology, Inc.
-CCFCB1     (base 16)		Wireless Technology, Inc.
-				2064 Eastman Ave. #113
-				Ventura  CA  93003-7787
-				US
-
-3C-1A-79   (hex)		Huayuan Technology CO.,LTD
-3C1A79     (base 16)		Huayuan Technology CO.,LTD
-				R308 Block Jingmeng High-Tech Building,NO.5-1 Shangdi East Road,
-				Beijing    100085
-				CN
-
-7C-F0-98   (hex)		Bee Beans Technologies, Inc.
-7CF098     (base 16)		Bee Beans Technologies, Inc.
-				TCI B5
-				Tsukuba City  Ibaraki  305-0047
-				JP
-
-EC-66-D1   (hex)		B&W Group LTD
-EC66D1     (base 16)		B&W Group LTD
-				Dale Road
-				Worthing  Sussex  BN11 2BH
-				GB
-
-38-5F-C3   (hex)		Yu Jeong System, Co.Ltd
-385FC3     (base 16)		Yu Jeong System, Co.Ltd
-				#503, Dong il B/D, 826, Guro-3dong, 
-				Seoul    152-879
-				KR
-
-88-8B-5D   (hex)		Storage Appliance Corporation 
-888B5D     (base 16)		Storage Appliance Corporation 
-				29 Su Zhou Jie, Haidian Dist.
-				Beijing     100080
-				CN
-
-84-A9-91   (hex)		Cyber Trans Japan Co.,Ltd.
-84A991     (base 16)		Cyber Trans Japan Co.,Ltd.
-				
-				Setagaya-ku  Tokyo  155-0031
-				JP
-
-68-78-4C   (hex)		Nortel Networks
-68784C     (base 16)		Nortel Networks
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-F8-D7-56   (hex)		Simm Tronic Limited 
-F8D756     (base 16)		Simm Tronic Limited 
-				Unit 3, Waterside
-				Hoddesdon  Hertfordshire  EN11 0QR
-				GB
-
-04-A3-F3   (hex)		Emicon
-04A3F3     (base 16)		Emicon
-				shelkovskoe shosse, 77
-				Moscow    107241
-				RU
-
-1C-17-D3   (hex)		Cisco Systems, Inc
-1C17D3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-7C-E0-44   (hex)		NEON Inc
-7CE044     (base 16)		NEON Inc
-				5340 Airport Boulevard
-				Boulder  CO  80301
-				US
-
-28-4C-53   (hex)		Intune Networks
-284C53     (base 16)		Intune Networks
-				9B Beckett Way
-				Dublin     12
-				IE
-
-90-51-3F   (hex)		Elettronica Santerno SpA
-90513F     (base 16)		Elettronica Santerno SpA
-				Via della Concia 7
-				Castel Guelfo (BO)    40026
-				IT
-
-88-41-C1   (hex)		ORBISAT DA AMAZONIA IND E AEROL SA
-8841C1     (base 16)		ORBISAT DA AMAZONIA IND E AEROL SA
-				AV SHISHIMA HIFUMI, 2911
-				SAO JOSE DOS CAMPOS  São Paulo  12244-000
-				BR
-
-9C-75-14   (hex)		Wildix srl
-9C7514     (base 16)		Wildix srl
-				loc. Le Basse, 3
-				Trento  TN  38100
-				IT
-
-4C-F7-37   (hex)		SamJi Electronics Co., Ltd
-4CF737     (base 16)		SamJi Electronics Co., Ltd
-				459-21, Gasan-dong, Gumchun-ku
-				Seoul    153-803
-				KR
-
-F0-D7-67   (hex)		Axema Passagekontroll AB
-F0D767     (base 16)		Axema Passagekontroll AB
-				Box 90 215
-				Stockholm    120 23 
-				SE
-
-C8-4C-75   (hex)		Cisco Systems, Inc
-C84C75     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C8-02-A6   (hex)		Beijing Newmine Technology
-C802A6     (base 16)		Beijing Newmine Technology
-				10 floor,Keshi Plaza
-				Beijing    100085
-				CN
-
-4C-8B-55   (hex)		Grupo Digicon
-4C8B55     (base 16)		Grupo Digicon
-				Rua Nissin Castiel, 640
-				Gravataí  Rio Grande do Sul  94045420
-				BR
-
-6C-5C-DE   (hex)		SunReports, Inc.
-6C5CDE     (base 16)		SunReports, Inc.
-				1406 Cedarwood Dr.
-				San Mateo  CA  94403
-				US
-
-34-F3-9B   (hex)		WizLAN Ltd.
-34F39B     (base 16)		WizLAN Ltd.
-				P.O.Box 7948
-				Haifa    31078
-				IL
-
-E8-6C-DA   (hex)		Supercomputers and Neurocomputers Research Center
-E86CDA     (base 16)		Supercomputers and Neurocomputers Research Center
-				2, Chekhov st
-				Taganrog   Rostov-on-Don region   347922 
-				RU
-
-24-0B-2A   (hex)		Viettel Group
-240B2A     (base 16)		Viettel Group
-				Center for Research and Development
-				Hanoi    1111
-				VN
-
-00-B5-D6   (hex)		Omnibit Inc.
-00B5D6     (base 16)		Omnibit Inc.
-				2-7-9, Soto-Kanda
-				Chiyoda-ku  Tokyo  101-0021
-				JP
-
-54-89-22   (hex)		Zelfy Inc
-548922     (base 16)		Zelfy Inc
-				4655 Old Ironsides Dr, Suite#200
-				Santa Clara  Ca  95054
-				US
-
-50-C5-8D   (hex)		Juniper Networks
-50C58D     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-24-A4-2C   (hex)		KOUKAAM a.s.
-24A42C     (base 16)		KOUKAAM a.s.
-				U vinnych sklepu 7
-				Prague    190 00
-				CZ
-
-4C-30-89   (hex)		Thales Transportation Systems GmbH
-4C3089     (base 16)		Thales Transportation Systems GmbH
-				Bierweg 2
-				Arnstadt  Thuringia  99310
-				DE
-
-48-12-49   (hex)		Luxcom Technologies Inc.
-481249     (base 16)		Luxcom Technologies Inc.
-				102 Walgreen Road
-				Ottawa  Ontario  K0A 1L0
-				CA
-
-24-A9-37   (hex)		PURE Storage
-24A937     (base 16)		PURE Storage
-				650 Castro Street
-				Mt. View  CA  94041
-				US
-
-34-83-02   (hex)		iFORCOM Co., Ltd
-348302     (base 16)		iFORCOM Co., Ltd
-				1326
-				Sagamihara  Kanagawa  252-0157
-				JP
-
-B4-3D-B2   (hex)		Degreane Horizon
-B43DB2     (base 16)		Degreane Horizon
-				730 Rue de l'Initiative
-				Cuers  Var  83390
-				FR
-
-84-F6-4C   (hex)		Cross Point BV
-84F64C     (base 16)		Cross Point BV
-				Postbus 2112
-				Emmen  Drenthe  7801 CC
-				NL
-
-C0-8B-6F   (hex)		S I Sistemas Inteligentes Eletrônicos Ltda
-C08B6F     (base 16)		S I Sistemas Inteligentes Eletrônicos Ltda
-				Rua Amadeu Piotto 161
-				Curitiba  Paraná  81280020
-				BR
-
-F8-6E-CF   (hex)		Arcx Inc
-F86ECF     (base 16)		Arcx Inc
-				151 Amber St, Unit 1
-				Markham  ON  L3R 3B3
-				CA
-
-8C-84-01   (hex)		Private
-8C8401     (base 16)		Private
-
-40-84-93   (hex)		Clavister AB
-408493     (base 16)		Clavister AB
-				Sjogatan 6J
-				Ornskoldsvik    89160
-				SE
-
-78-A6-BD   (hex)		DAEYEON Control&Instrument Co,.Ltd
-78A6BD     (base 16)		DAEYEON Control&Instrument Co,.Ltd
-				ACETECHNOTOWER 2-108, 197-7, Guro3-Dong, Guro-Gu, 
-				Seoul    152-766
-				KR
-
-3C-19-15   (hex)		GFI Chrono Time
-3C1915     (base 16)		GFI Chrono Time
-				121 rue des Guillees
-				CHAURAY    79180
-				FR
-
-EC-B1-06   (hex)		Acuro Networks, Inc
-ECB106     (base 16)		Acuro Networks, Inc
-				42808 Christy St., Suite 100
-				Fremont  CA  94538
-				US
-
-C8-35-B8   (hex)		Ericsson, EAB/RWI/K
-C835B8     (base 16)		Ericsson, EAB/RWI/K
-				Skolgången 17
-				    SE-800 06
-				SE
-
-F8-9D-0D   (hex)		Control Technology Inc.
-F89D0D     (base 16)		Control Technology Inc.
-				7608 North Hudson Ave
-				Oklahoma City  OK  73116
-				US
-
-2C-3F-3E   (hex)		Alge-Timing GmbH
-2C3F3E     (base 16)		Alge-Timing GmbH
-				Rotkreuzstrasse 39
-				Lustenau    6890
-				AT
-
-08-9F-97   (hex)		LEROY AUTOMATION
-089F97     (base 16)		LEROY AUTOMATION
-				35, Boulevard du Libre Echange
-				Saint Orens de Gameville    31650
-				FR
-
-34-BA-51   (hex)		Se-Kure Controls, Inc.
-34BA51     (base 16)		Se-Kure Controls, Inc.
-				3714 Runge Street
-				Franklin Park  IL  60131
-				US
-
-6C-70-39   (hex)		Novar GmbH
-6C7039     (base 16)		Novar GmbH
-				Johannes-Mauthe-Str. 14
-				Albstadt  Baden-Württemberg  72458
-				DE
-
-98-2D-56   (hex)		Resolution Audio
-982D56     (base 16)		Resolution Audio
-				88 Hoff Street #106
-				San Francisco  CA  94110
-				US
-
-14-73-73   (hex)		TUBITAK UEKAE
-147373     (base 16)		TUBITAK UEKAE
-				ANIBAL ST.
-				KOCAELI    41470
-				TR
-
-FC-CF-62   (hex)		IBM Corp
-FCCF62     (base 16)		IBM Corp
-				2051 Mission College Blvd 
-				Santa Clara  CA  95054
-				US
-
-08-4E-1C   (hex)		H2A Systems, LLC
-084E1C     (base 16)		H2A Systems, LLC
-				7545 Irvine Center Drive
-				Irvine  CA  92618
-				US
-
-88-B6-27   (hex)		Gembird Europe BV
-88B627     (base 16)		Gembird Europe BV
-				Wittevrouwen 56
-				Almere  Flevoland  1358CD
-				NL
-
-F0-68-53   (hex)		Integrated Corporation
-F06853     (base 16)		Integrated Corporation
-				3/F, Shun On Commercial Bldg., 
-				Cetnral,    
-				HK
-
-A4-AD-B8   (hex)		Vitec Group, Camera Dynamics Ltd
-A4ADB8     (base 16)		Vitec Group, Camera Dynamics Ltd
-				William Vinten Building
-				Bury St Edmunds  Suffolk  IP33 3TB
-				GB
-
-A4-B1-21   (hex)		Arantia 2010 S.L.
-A4B121     (base 16)		Arantia 2010 S.L.
-				Volta do Castro s/n
-				Santiago de Compostela  A Coruña  15706
-				ES
-
-E0-26-36   (hex)		Nortel Networks
-E02636     (base 16)		Nortel Networks
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-5C-57-C8   (hex)		Nokia Corporation
-5C57C8     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-D4-6C-BF   (hex)		Goodrich ISR
-D46CBF     (base 16)		Goodrich ISR
-				6600 Gulton Crt
-				Albuquerque  NM  87109
-				US
-
-E0-26-30   (hex)		Intrigue Technologies, Inc.
-E02630     (base 16)		Intrigue Technologies, Inc.
-				800 Old Pond Road
-				Bridgeville  PA  15017
-				US
-
-EC-C8-82   (hex)		Cisco Systems, Inc
-ECC882     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-FD-B9   (hex)		Proware Technologies Co Ltd.
-6CFDB9     (base 16)		Proware Technologies Co Ltd.
-				2nd F1 East Wing,South Section,Factory Building 24,Science&Technology Park
-				Shenzhen  Guangdong  518000
-				CN
-
-10-18-9E   (hex)		Elmo Motion Control
-10189E     (base 16)		Elmo Motion Control
-				64 Gisin St.
-				Petach Tikva    49103
-				IL
-
-8C-56-C5   (hex)		Nintendo Co., Ltd.
-8C56C5     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-CC-B8-88   (hex)		AnB Securite s.a.
-CCB888     (base 16)		AnB Securite s.a.
-				Rue de Joie,38-40
-				Liege    4000
-				BE
-
-6C-5E-7A   (hex)		Ubiquitous Internet Telecom Co., Ltd
-6C5E7A     (base 16)		Ubiquitous Internet Telecom Co., Ltd
-				#512, 5th Floor, Kolon Digital Valley,Guro 3(sam)-dong, Guro-gu
-				Seoul    152-777
-				KR
-
-B4-2C-BE   (hex)		Direct Payment Solutions Limited
-B42CBE     (base 16)		Direct Payment Solutions Limited
-				98 Anzac Avenue
-				Auckland    1035
-				NZ
-
-CC-22-18   (hex)		InnoDigital Co., Ltd.
-CC2218     (base 16)		InnoDigital Co., Ltd.
-				No.310 3F Kofomo Tower
-				Sungnam-city  Kyunggi-do  463-825
-				KR
-
-C8-6C-1E   (hex)		Display Systems Ltd
-C86C1E     (base 16)		Display Systems Ltd
-				16-Parkovaja Street 26
-				Moscow    105484
-				RU
-
-A0-18-59   (hex)		Shenzhen Yidashi Electronics Co Ltd
-A01859     (base 16)		Shenzhen Yidashi Electronics Co Ltd
-				Building A10, Fukang Industrial Zone
-				Shenzhen   Guangdong   518110
-				CN
-
-E8-05-6D   (hex)		Nortel Networks
-E8056D     (base 16)		Nortel Networks
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-C4-59-76   (hex)		Fugoo Coorporation
-C45976     (base 16)		Fugoo Coorporation
-				8001 Irvine Center Drive
-				Irvine  CA  62618
-				US
-
-90-A7-C1   (hex)		Pakedge Device and Software Inc.
-90A7C1     (base 16)		Pakedge Device and Software Inc.
-				1011 Edwards Road
-				Burlingame  CA  94010
-				US
-
-80-BA-AC   (hex)		TeleAdapt Ltd
-80BAAC     (base 16)		TeleAdapt Ltd
-				Axis 5
-				Watford  Hertfordshire  WD244YW
-				GB
-
-50-2D-F4   (hex)		Phytec Messtechnik GmbH
-502DF4     (base 16)		Phytec Messtechnik GmbH
-				Robert-Koch-Straße 39
-				Mainz  Rheinland-Pfalz  55129
-				DE
-
-2C-CD-27   (hex)		Precor Inc
-2CCD27     (base 16)		Precor Inc
-				20031 142nd Avenue NE
-				Woodinville  WA  98072
-				US
-
-10-43-69   (hex)		Soundmax Electronic Limited 
-104369     (base 16)		Soundmax Electronic Limited 
-				Room#1505, Oriental plaza, #1072 JianShe Road
-				SHENZHEN   Guangdong  518001
-				CN
-
-C0-6C-0F   (hex)		Dobbs Stanford
-C06C0F     (base 16)		Dobbs Stanford
-				2715 Electronic Lane
-				Dallas  Texas  75220
-				US
-
-C8-6C-B6   (hex)		Optcom Co., Ltd.
-C86CB6     (base 16)		Optcom Co., Ltd.
-				792-3 Tomigaoka
-				Iwata  Shizuoka  438-0803
-				JP
-
-58-49-BA   (hex)		Chitai Electronic Corp.
-5849BA     (base 16)		Chitai Electronic Corp.
-				5F., No. 1 Lane 123, Pao-Chung Rd., Hsin-Tien City 
-				Taiepi    23144
-				TW
-
-00-D1-1C   (hex)		ACETEL
-00D11C     (base 16)		ACETEL
-				#1006, World Merdian 2-cha, 426-5,
-				Seoul    153-759
-				KR
-
-60-1D-0F   (hex)		Midnite Solar
-601D0F     (base 16)		Midnite Solar
-				17722 67th Ave NE #C
-				Arlington  WA  98223
-				US
-
-A8-F9-4B   (hex)		Eltex Enterprise Ltd.
-A8F94B     (base 16)		Eltex Enterprise Ltd.
-				Okruzhnaya st. 29v
-				Novosibirsk    630020
-				RU
-
-0C-82-30   (hex)		SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD
-0C8230     (base 16)		SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD
-				c-504,Skyworth Building,No.8 Road,High-tech south,Nanshan District,
-				Shenzhen  Guangdong  518057
-				CN
-
-74-6B-82   (hex)		MOVEK 
-746B82     (base 16)		MOVEK 
-				6517 Navaho Trail
-				Edina  Minnesota  55439
-				US
-
-9C-C0-77   (hex)		PrintCounts, LLC
-9CC077     (base 16)		PrintCounts, LLC
-				5109 W Lemon St
-				Tampa  FL  33609
-				US
-
-3C-B1-7F   (hex)		Wattwatchers Pty Ld
-3CB17F     (base 16)		Wattwatchers Pty Ld
-				22 Woodbury Rd St. Ives
-				Sydney  NSW  2075
-				AU
-
-CC-54-59   (hex)		OnTime Networks AS
-CC5459     (base 16)		OnTime Networks AS
-				Gladsvei 20
-				Oslo    0489
-				NO
-
-F8-DC-7A   (hex)		Variscite LTD
-F8DC7A     (base 16)		Variscite LTD
-				60 Medinat Hayehudim st.
-				Hertzelia    46722
-				IL
-
-D4-F1-43   (hex)		IPROAD.,Inc
-D4F143     (base 16)		IPROAD.,Inc
-				#505 Byuksan digital valley 7, 170-13,
-				Seoul    152-847
-				KR
-
-B8-F7-32   (hex)		Aryaka Networks Inc
-B8F732     (base 16)		Aryaka Networks Inc
-				691 S. Milpitas Blvd., 
-				Milpitas   CA  95035
-				US
-
-E8-DF-F2   (hex)		PRF Co., Ltd.
-E8DFF2     (base 16)		PRF Co., Ltd.
-				#510, Leaders B/D, Yatop-dong
-				Seongnam-city  Gyeonggi-do  463-828
-				KR
-
-B4-ED-54   (hex)		Wohler Technologies
-B4ED54     (base 16)		Wohler Technologies
-				31055 Huntwood Avenue
-				Hayward  CA  94544
-				US
-
-00-64-40   (hex)		Cisco Systems, Inc
-006440     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-94-C4-E9   (hex)		PowerLayer Microsystems HongKong Limited
-94C4E9     (base 16)		PowerLayer Microsystems HongKong Limited
-				23 Zhichun Rd,Liangziyinzuo Rm1009
-				Beijing    100083
-				CN
-
-88-43-E1   (hex)		Cisco Systems, Inc
-8843E1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-86-2A   (hex)		Heinz Lackmann GmbH & Co KG
-34862A     (base 16)		Heinz Lackmann GmbH & Co KG
-				Harkortstraße 15
-				Münster  NRW  48163
-				DE
-
-AC-E3-48   (hex)		MadgeTech, Inc
-ACE348     (base 16)		MadgeTech, Inc
-				879 Maple St
-				Contoocook  NH  03229
-				US
-
-54-9A-16   (hex)		Uzushio Electric Co.,Ltd.
-549A16     (base 16)		Uzushio Electric Co.,Ltd.
-				105
-				Imabari-city  Ehime pref.  7948582
-				JP
-
-90-18-AE   (hex)		Shanghai Meridian Technologies, Co. Ltd.
-9018AE     (base 16)		Shanghai Meridian Technologies, Co. Ltd.
-				Suite 6A Tongsheng Tower
-				Pudong  shanghai  200122
-				CN
-
-04-94-A1   (hex)		CATCH THE WIND INC
-0494A1     (base 16)		CATCH THE WIND INC
-				10781 JAMES PAYNE COURT
-				MANASSAS  VA  20110
-				US
-
-00-3A-99   (hex)		Cisco Systems, Inc
-003A99     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-3A-9A   (hex)		Cisco Systems, Inc
-003A9A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-3A-98   (hex)		Cisco Systems, Inc
-003A98     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-50-A6-E3   (hex)		David Clark Company
-50A6E3     (base 16)		David Clark Company
-				360 Franklin St.
-				Worcester  MA  01615
-				US
-
-50-93-4F   (hex)		Gradual Tecnologia Ltda.
-50934F     (base 16)		Gradual Tecnologia Ltda.
-				Rua Attilio Giaretta, 110
-				Itatiba  SP  13257-584
-				BR
-
-B8-B1-C7   (hex)		BT&COM CO.,LTD
-B8B1C7     (base 16)		BT&COM CO.,LTD
-				#1103, E&C Venture Dream Tower II
-				Seoul    152-719
-				KR
-
-DC-2C-26   (hex)		Iton Technology Limited
-DC2C26     (base 16)		Iton Technology Limited
-				Room 10E, JingFeng Building, 
-				ShenZhen  GuangDong  518034
-				CN
-
-D4-11-D6   (hex)		ShotSpotter, Inc.
-D411D6     (base 16)		ShotSpotter, Inc.
-				1060 Terra Bella Ave.
-				Mountain View  CA  94043
-				US
-
-9C-AF-CA   (hex)		Cisco Systems, Inc
-9CAFCA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-1C-0F-CF   (hex)		Sypro Optics GmbH
-1C0FCF     (base 16)		Sypro Optics GmbH
-				Carl-Zeiss-Promenade 10
-				Jena  Thuringia  07745
-				DE
-
-9C-4E-8E   (hex)		ALT Systems Ltd
-9C4E8E     (base 16)		ALT Systems Ltd
-				PoBox 17
-				Helsinki    00761
-				FI
-
-70-72-CF   (hex)		EdgeCore Networks
-7072CF     (base 16)		EdgeCore Networks
-				20 Mason
-				Irvine  CA  92618
-				US
-
-EC-D0-0E   (hex)		MiraeRecognition Co., Ltd.
-ECD00E     (base 16)		MiraeRecognition Co., Ltd.
-				PrimeBank Bldg. Annex-3F, #278-3
-				Seoul    135-833
-				KR
-
-A4-AD-00   (hex)		Ragsdale Technology
-A4AD00     (base 16)		Ragsdale Technology
-				505 Echo Lane
-				Big Bear Lake  CA  92315
-				US
-
-4C-9E-E4   (hex)		Hanyang Navicom Co.,Ltd.
-4C9EE4     (base 16)		Hanyang Navicom Co.,Ltd.
-				713, Gwanpyeong-dong, Yusung-gu
-				Daejeon    305-509
-				KR
-
-C8-72-48   (hex)		Aplicom Oy
-C87248     (base 16)		Aplicom Oy
-				Rautatienkatu 56
-				Äänekoski  Länsi-Suomi  44101
-				FI
-
-C4-7D-4F   (hex)		Cisco Systems, Inc
-C47D4F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-3C-DF-1E   (hex)		Cisco Systems, Inc
-3CDF1E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-98-6D-C8   (hex)		TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION
-986DC8     (base 16)		TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION
-				 TOKYO SQUARE GARDEN
-				 3-1-1 Kyobashi, CHUO-KU  Tokyo  104-0031
-				JP
-
-6C-AC-60   (hex)		Venetex Corp
-6CAC60     (base 16)		Venetex Corp
-				8-3-9,Shin-machi
-				Ome-shi,  Tokyo  198-0024
-				JP
-
-F0-4B-F2   (hex)		JTECH Communications, Inc.
-F04BF2     (base 16)		JTECH Communications, Inc.
-				6413 Congress Ave.
-				Boca Raton  FL  33487
-				US
-
-04-2B-BB   (hex)		PicoCELA, Inc.
-042BBB     (base 16)		PicoCELA, Inc.
-				3-8-33, Momochihama
-				Fukuoka-city  Fukuoka  814-0001
-				JP
-
-FC-08-77   (hex)		Prentke Romich Company
-FC0877     (base 16)		Prentke Romich Company
-				1022 Heyl Rd
-				Wooster  OH  44691
-				US
-
-64-F9-70   (hex)		Kenade Electronics Technology Co.,LTD.
-64F970     (base 16)		Kenade Electronics Technology Co.,LTD.
-				F/G room,11/F,Hangdu building,Huafu Rd, Futian district,
-				ShenZhen  GuangDong  518028
-				CN
-
-C8-2E-94   (hex)		Halfa Enterprise Co., Ltd.
-C82E94     (base 16)		Halfa Enterprise Co., Ltd.
-				5F, No.102, Ming Chuan Road
-				Hsin Tien  Taipei County  23141
-				TW
-
-80-17-7D   (hex)		Nortel Networks
-80177D     (base 16)		Nortel Networks
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-7C-7B-E4   (hex)		Z'SEDAI KENKYUSHO CORPORATION
-7C7BE4     (base 16)		Z'SEDAI KENKYUSHO CORPORATION
-				Meikai sannomiya 2nd Bldg. 11th/fl.
-				Kobe  Hyogo  650-0034
-				JP
-
-F0-DE-71   (hex)		Shanghai EDO Technologies Co.,Ltd.
-F0DE71     (base 16)		Shanghai EDO Technologies Co.,Ltd.
-				Unit 12302, Building 12,498 Guoshoujing Road, Pudong New Area
-				Shanghai    201203
-				CN
-
-60-D3-0A   (hex)		Quatius Limited
-60D30A     (base 16)		Quatius Limited
-				Units 05-07, 16/F, Greenfield Tower, Concordia Plaza,
-				Kowloon    
-				HK
-
-24-CF-21   (hex)		Shenzhen State Micro Technology Co., Ltd
-24CF21     (base 16)		Shenzhen State Micro Technology Co., Ltd
-				SSMEC Building2/F, Gao Xin Nan First Avenue, Hi-Tech Park South, Nanshan
-				Shenzhen City  Guangdong Province  518057
-				CN
-
-10-BA-A5   (hex)		GANA I&C CO., LTD
-10BAA5     (base 16)		GANA I&C CO., LTD
-				154-17 kyoungdong B/D 3F karak-dong songpa-gu
-				Seoul  Korea  138-160
-				KR
-
-BC-9D-A5   (hex)		DASCOM Europe GmbH
-BC9DA5     (base 16)		DASCOM Europe GmbH
-				Heuweg 3
-				Ulm  Baden-Württemberg  89079
-				DE
-
-28-FB-D3   (hex)		Ragentek Technology Group
-28FBD3     (base 16)		Ragentek Technology Group
-				D10/D11，No.3188, Xiupu Road, PuDong District, Shanghai
-				Shanghai    201703
-				CN
-
-58-6E-D6   (hex)		Private
-586ED6     (base 16)		Private
-
-EC-30-91   (hex)		Cisco Systems, Inc
-EC3091     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-64-BC-11   (hex)		CombiQ AB
-64BC11     (base 16)		CombiQ AB
-				Science Park
-				Jonkoping    553 18
-				SE
-
-C8-C1-3C   (hex)		RuggedTek Hangzhou Co., Ltd
-C8C13C     (base 16)		RuggedTek Hangzhou Co., Ltd
-				Zhejiang University National Science Park
-				Hangzhou  Zhejiang  310013
-				CN
-
-F4-AC-C1   (hex)		Cisco Systems, Inc
-F4ACC1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-40-97-D1   (hex)		BK Electronics cc
-4097D1     (base 16)		BK Electronics cc
-				150 Swaardlelie Ave
-				Pretoria  Gauteng  0184
-				ZA
-
-0C-E9-36   (hex)		ELIMOS srl
-0CE936     (base 16)		ELIMOS srl
-				Area Science Park - Padriciano 99
-				TRIESTE    34149
-				IT
-
-A0-2E-F3   (hex)		United Integrated Services Co., Led.
-A02EF3     (base 16)		United Integrated Services Co., Led.
-				5F No 3 Lane 7 Packao Road Hsintien
-				Taipei Hsien    23144
-				TW
-
-A0-98-05   (hex)		OpenVox Communication Co Ltd
-A09805     (base 16)		OpenVox Communication Co Ltd
-				F2,Building No.14,Shangsha Science &
-				ShenZhen  GuangDong  518031
-				CN
-
-60-39-1F   (hex)		ABB Ltd
-60391F     (base 16)		ABB Ltd
-				Distribution Automation
-				Vadodara  Gujarat  390013
-				IN
-
-E8-A4-C1   (hex)		Deep Sea Electronics Ltd
-E8A4C1     (base 16)		Deep Sea Electronics Ltd
-				Highfield House
-				Hunmanby  North Yorkshire  YO14 0PH
-				GB
-
-C8-D2-C1   (hex)		Jetlun (Shenzhen) Corporation
-C8D2C1     (base 16)		Jetlun (Shenzhen) Corporation
-				1008A Skyworth Building, Gao-xin Rd South
-				Shenzhen    518057
-				CN
-
-E0-91-53   (hex)		XAVi Technologies Corp.
-E09153     (base 16)		XAVi Technologies Corp.
-				9F., No129, Xingde RD.,Sanchong Dist.,
-				New Taipei  Taiwan  24158
-				TW
-
-88-A5-BD   (hex)		QPCOM INC.
-88A5BD     (base 16)		QPCOM INC.
-				6030 NW 99 AVE
-				DORAL  FLORIDA  33178
-				US
-
-D4-C7-66   (hex)		Acentic GmbH
-D4C766     (base 16)		Acentic GmbH
-				Venloer Strasse 151-153
-				Cologne    50672
-				DE
-
-00-27-12   (hex)		MaxVision LLC
-002712     (base 16)		MaxVision LLC
-				495 Production Ave
-				Madison  AL  35758
-				US
-
-00-27-1F   (hex)		MIPRO Electronics Co., Ltd
-00271F     (base 16)		MIPRO Electronics Co., Ltd
-				814,Peikang Road
-				Chiayi    60096
-				TW
-
-00-27-0C   (hex)		Cisco Systems, Inc
-00270C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-26-CF   (hex)		DEKA R&D
-0026CF     (base 16)		DEKA R&D
-				340 Commercial Street
-				Manchester  NH  03101
-				US
-
-00-26-E7   (hex)		Shanghai ONLAN Communication Tech. Co., Ltd.
-0026E7     (base 16)		Shanghai ONLAN Communication Tech. Co., Ltd.
-				3F, 6C, No. 1658, Gumei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-00-26-E0   (hex)		ASITEQ
-0026E0     (base 16)		ASITEQ
-				5F, DONGYOUNG Bldg,382-6,Yatap dong
-				Sung Nam si  Kyounggi-do  463-827
-				KR
-
-00-27-03   (hex)		Testech Electronics Pte Ltd
-002703     (base 16)		Testech Electronics Pte Ltd
-				Block 118, #05-110,
-				Singapore    380118
-				SG
-
-00-26-F3   (hex)		SMC Networks
-0026F3     (base 16)		SMC Networks
-				20 Mason
-				Irvine  CA  92618
-				US
-
-00-26-A5   (hex)		MICROROBOT.CO.,LTD
-0026A5     (base 16)		MICROROBOT.CO.,LTD
-				167-3 Gungpyeong-ri
-				Gwangju-si  Gyeonggi-Do  464-881
-				KR
-
-00-26-A3   (hex)		FQ Ingenieria Electronica S.A.
-0026A3     (base 16)		FQ Ingenieria Electronica S.A.
-				Avda. Roquetes 9
-				Sant Pere de Ribes  Barcelona  08812
-				ES
-
-00-26-9D   (hex)		M2Mnet Co., Ltd.
-00269D     (base 16)		M2Mnet Co., Ltd.
-				607 Downtown Bld. 1043-1 Hogye-Dong Dongan-Gu
-				Anyang-City  Kyunggi-Do  431-080
-				KR
-
-00-26-97   (hex)		Alpha  Technologies Inc.
-002697     (base 16)		Alpha  Technologies Inc.
-				3767 Alpha Way
-				Bellingham  WA  98226 
-				US
-
-00-26-8A   (hex)		Terrier SC Ltd
-00268A     (base 16)		Terrier SC Ltd
-				Strettit Farm
-				East Peckham  Kent  TN12 5EE
-				GB
-
-00-26-89   (hex)		General Dynamics Robotic Systems
-002689     (base 16)		General Dynamics Robotic Systems
-				1231 Tech Court
-				Westminster  MD  21157
-				US
-
-00-26-C5   (hex)		Guangdong Gosun Telecommunications Co.,Ltd
-0026C5     (base 16)		Guangdong Gosun Telecommunications Co.,Ltd
-				Guangdong software park D, No.11, CaiPing road , Guangzhou science city
-				Guangzhou  Guangdong  510663
-				CN
-
-00-26-C4   (hex)		Cadmos microsystems S.r.l.
-0026C4     (base 16)		Cadmos microsystems S.r.l.
-				Via Pietro Frattini, 255
-				Roma    00149
-				IT
-
-00-26-C8   (hex)		System Sensor
-0026C8     (base 16)		System Sensor
-				3825 Ohio Avenue
-				Saint Charles  IL  60174
-				US
-
-00-26-7A   (hex)		wuhan hongxin telecommunication technologies co.,ltd
-00267A     (base 16)		wuhan hongxin telecommunication technologies co.,ltd
-				No.5 Donxin Road,Wuhan East Lake High-Tech Development Zone
-				Wuhan  Hubei  430073
-				CN
-
-00-26-C2   (hex)		SCDI Co. LTD
-0026C2     (base 16)		SCDI Co. LTD
-				#451, Hagal-Dong, Giheung-Gu,
-				Yongin-Si  Gyeonggi-Do  446-930
-				KR
-
-00-26-85   (hex)		Digital Innovation
-002685     (base 16)		Digital Innovation
-				Travbaneveien 6
-				Trondheim    7044
-				NO
-
-00-26-A9   (hex)		Strong Technologies Pty Ltd
-0026A9     (base 16)		Strong Technologies Pty Ltd
-				60 Wedgewood Road
-				Hallam  Victoria  3803
-				AU
-
-00-26-72   (hex)		AAMP of America
-002672     (base 16)		AAMP of America
-				13190 56th Court
-				Clearwater  Florida  33760
-				US
-
-00-25-FD   (hex)		OBR Centrum Techniki Morskiej S.A.
-0025FD     (base 16)		OBR Centrum Techniki Morskiej S.A.
-				Dickmana 62
-				Gdynia    81-109
-				US
-
-00-26-00   (hex)		TEAC Australia Pty Ltd.
-002600     (base 16)		TEAC Australia Pty Ltd.
-				75 Northgate Drive
-				Thomastown  Victoria  3074
-				AU
-
-00-25-FF   (hex)		CreNova Multimedia Co., Ltd
-0025FF     (base 16)		CreNova Multimedia Co., Ltd
-				7/F, Hana EZ Tower, Gumi-Dong 10, Sungnam Rd 43,
-				Sungnam-Si  Kyunggi-Do  463-870
-				KR
-
-00-26-59   (hex)		Nintendo Co., Ltd.
-002659     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-26-51   (hex)		Cisco Systems, Inc
-002651     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-26-12   (hex)		Space Exploration Technologies
-002612     (base 16)		Space Exploration Technologies
-				1 Rocket Road
-				Hawthorne  CA  90250
-				US
-
-00-26-16   (hex)		Rosemount Inc.
-002616     (base 16)		Rosemount Inc.
-				8200 Market Boulevard
-				Chanhassen  MN  55317
-				US
-
-00-26-0B   (hex)		Cisco Systems, Inc
-00260B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-26-23   (hex)		JRD Communication Inc
-002623     (base 16)		JRD Communication Inc
-				16/F, TCL Tower, Gaoxin Nanyi Road, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-00-26-27   (hex)		Truesell
-002627     (base 16)		Truesell
-				301 Sungyun Bldg, 89-2
-				Seocho-gu,  Seoul  137-130
-				KR
-
-00-26-4F   (hex)		Krüger &Gothe GmbH
-00264F     (base 16)		Krüger &Gothe GmbH
-				Atzendorfer Straße 19
-				Staßfurt  Sachsen Anhalt  39418
-				DE
-
-00-26-21   (hex)		InteliCloud Technology Inc.
-002621     (base 16)		InteliCloud Technology Inc.
-				895 Dove St.
-				Newport Beach  CA  92660
-				US
-
-00-26-1C   (hex)		NEOVIA INC.
-00261C     (base 16)		NEOVIA INC.
-				503 LOTTE IT CASTLE 1DONG,550-1
-				SEOUL    153-768
-				KR
-
-00-26-64   (hex)		Core System Japan
-002664     (base 16)		Core System Japan
-				Bunshu Bldg,2-27-6,Myojin
-				Hachioji  Tokyo  1920046
-				JP
-
-00-26-39   (hex)		T.M. Electronics, Inc.
-002639     (base 16)		T.M. Electronics, Inc.
-				45 Main St
-				Boylston  MA  01505
-				US
-
-00-25-C6   (hex)		kasercorp, ltd
-0025C6     (base 16)		kasercorp, ltd
-				South 20,Gaobu Road,Gaobu Town
-				Dongwan  Guangdong  523000
-				CN
-
-00-25-C5   (hex)		Star Link Communication Pvt. Ltd.
-0025C5     (base 16)		Star Link Communication Pvt. Ltd.
-				HR114/6 & Hr132/6, Pulprehladpur,
-				New Delhi    110044
-				IN
-
-00-25-C7   (hex)		altek Corporation
-0025C7     (base 16)		altek Corporation
-				3F, No. 10, Li-Hsin Road, Science-Based Industrial Park,
-				Hsinchu    
-				TW
-
-00-25-E6   (hex)		Belgian Monitoring Systems bvba
-0025E6     (base 16)		Belgian Monitoring Systems bvba
-				Th. Sevenslaan 106
-				Kortrijk  WVL  8500
-				BE
-
-00-25-E0   (hex)		CeedTec Sdn Bhd
-0025E0     (base 16)		CeedTec Sdn Bhd
-				303-4-5, Krystal Point Business Center
-				Bayan Lepas  Penang  11900
-				MY
-
-00-25-DE   (hex)		Probits Co., LTD.
-0025DE     (base 16)		Probits Co., LTD.
-				#1502, Kolon Science Valley II, 811
-				Seoul    152-878
-				KR
-
-00-25-B0   (hex)		Schmartz Inc
-0025B0     (base 16)		Schmartz Inc
-				2307 Valerian Trl
-				Round Rock  TX  78665
-				US
-
-00-25-AD   (hex)		Manufacturing Resources International
-0025AD     (base 16)		Manufacturing Resources International
-				6415 Shiloh Road East
-				Alpharetta  GA  30005
-				US
-
-00-25-AC   (hex)		I-Tech corporation
-0025AC     (base 16)		I-Tech corporation
-				1-15 Shin-ogawa machi
-				Shinjyuku-ku  Tokyo  162-0814
-				JP
-
-00-25-AB   (hex)		AIO LCD PC BU / TPV
-0025AB     (base 16)		AIO LCD PC BU / TPV
-				10F., No., 230, Liancheng Rd.
-				Zhonghe City  Taipei Taiwan  23553
-				TW
-
-00-25-EC   (hex)		Humanware
-0025EC     (base 16)		Humanware
-				445 rue du Parc Industriel
-				Longueuil  Québec  J4H 3V7
-				CA
-
-00-25-ED   (hex)		NuVo Technologies LLC
-0025ED     (base 16)		NuVo Technologies LLC
-				3015 Kustom Drive
-				Hebron  KY  41048
-				US
-
-00-25-E9   (hex)		i-mate Development, Inc.
-0025E9     (base 16)		i-mate Development, Inc.
-				8383 158th Ave. N.E., Suite 300, Redmond,
-				Washington  WA  98052-3871
-				US
-
-00-25-BA   (hex)		Alcatel-Lucent IPD
-0025BA     (base 16)		Alcatel-Lucent IPD
-				701 E. Middlefield Rd.
-				Mountain View  CA  94043
-				US
-
-00-25-BB   (hex)		INNERINT Co., Ltd.
-0025BB     (base 16)		INNERINT Co., Ltd.
-				Dongyoung CentralTower #202, Geumjung-dong,
-				Gunpo-si  Kyunggi-do  430050
-				KR
-
-00-25-B8   (hex)		Agile Communications, Inc.
-0025B8     (base 16)		Agile Communications, Inc.
-				810 Lawrence Dr
-				Thousand Oaks  California  91320
-				US
-
-00-25-B1   (hex)		Maya-Creation Corporation
-0025B1     (base 16)		Maya-Creation Corporation
-				3F, Building M-10, Centre od Hi-Tech Ind. Dist.
-				Shenzhen    518057
-				CN
-
-00-25-A1   (hex)		Enalasys
-0025A1     (base 16)		Enalasys
-				250 Avenida Campillo
-				Calexico  California  92231
-				US
-
-00-25-F3   (hex)		Nordwestdeutsche Zählerrevision
-0025F3     (base 16)		Nordwestdeutsche Zählerrevision
-				Ing. Aug. Knemeyer GmbH & Co. KG
-				Bad Laer  Niedersachsen  49196
-				DE
-
-00-25-DD   (hex)		SUNNYTEK INFORMATION CO., LTD.
-0025DD     (base 16)		SUNNYTEK INFORMATION CO., LTD.
-				12F, NO. 88, HSIN-TE ROAD
-				TAIPEI HSIEN    241
-				TW
-
-00-25-CE   (hex)		InnerSpace
-0025CE     (base 16)		InnerSpace
-				PO Box 2186
-				Grand Rapids  MI  49501
-				US
-
-00-25-49   (hex)		Jeorich Tech. Co.,Ltd.
-002549     (base 16)		Jeorich Tech. Co.,Ltd.
-				4F., No.6, Ln. 70, Sec. 2, Academia Rd., Nangang District, Taipei City 115, Taiwan (R.O.C.)
-				Taipei  Taiwan  110
-				TW
-
-00-25-39   (hex)		IfTA GmbH
-002539     (base 16)		IfTA GmbH
-				Industriestraße 33
-				Groebenzell  Bavaria  82194
-				DE
-
-00-25-37   (hex)		Runcom Technologies Ltd.
-002537     (base 16)		Runcom Technologies Ltd.
-				11 Moshe Levi Str. 11th Flr.
-				Rishon Le Zion    75658
-				IL
-
-00-25-38   (hex)		Samsung Electronics Co., Ltd., Memory Division
-002538     (base 16)		Samsung Electronics Co., Ltd., Memory Division
-				San #16 Banwol-Dong, Taean-Gu
-				Hwasung City  Gyeonggi Do  445-701
-				KR
-
-00-25-44   (hex)		LoJack Corporation
-002544     (base 16)		LoJack Corporation
-				780 Dedham Street
-				Canton  MA  02021
-				US
-
-00-25-32   (hex)		Digital Recorders
-002532     (base 16)		Digital Recorders
-				4018 Patriot Drive
-				Durham  NC  27709
-				US
-
-00-25-5D   (hex)		Morningstar Corporation
-00255D     (base 16)		Morningstar Corporation
-				10611 Iron Bridge Road
-				Jessup  MD  20794
-				US
-
-00-25-58   (hex)		MPEDIA
-002558     (base 16)		MPEDIA
-				Shinyoung Tower 12F 246-2
-				Seongnam  Gyeonggi-do  463-824
-				KR
-
-00-25-4A   (hex)		RingCube Technologies, Inc.
-00254A     (base 16)		RingCube Technologies, Inc.
-				100 West Evelyn Ave, Suite 210
-				Mountain View  CA  94041
-				US
-
-00-25-4F   (hex)		ELETTROLAB Srl
-00254F     (base 16)		ELETTROLAB Srl
-				Via Dell'Industria 25
-				San Vendemiano  Treviso  31020
-				IT
-
-00-25-83   (hex)		Cisco Systems, Inc
-002583     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-25-91   (hex)		NEXTEK, Inc.
-002591     (base 16)		NEXTEK, Inc.
-				410 Douglass Street
-				Reading  PA  19601
-				US
-
-00-25-8D   (hex)		Haier
-00258D     (base 16)		Haier
-				No.1,Haier Road
-				Qingdao  Shandong  266101
-				CN
-
-00-25-71   (hex)		Zhejiang Tianle Digital Electric Co.,Ltd
-002571     (base 16)		Zhejiang Tianle Digital Electric Co.,Ltd
-				No.8 Tianle Rd,Economic Development Zone
-				Shengzhou  Zhejiang  312400
-				CN
-
-00-25-9A   (hex)		CEStronics GmbH
-00259A     (base 16)		CEStronics GmbH
-				Friedrichstraße 243
-				Velbert    42551
-				DE
-
-00-25-02   (hex)		NaturalPoint
-002502     (base 16)		NaturalPoint
-				PO Box 2317
-				Corvallis  OR  97339
-				US
-
-00-24-F8   (hex)		Technical Solutions Company Ltd.
-0024F8     (base 16)		Technical Solutions Company Ltd.
-				Box 31750
-				Whitehorse  Yukon  Y1A 6L3
-				CA
-
-00-24-F9   (hex)		Cisco Systems, Inc
-0024F9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-F2   (hex)		Uniphone Telecommunication Co., Ltd.
-0024F2     (base 16)		Uniphone Telecommunication Co., Ltd.
-				No. 25, Chu-Kung 3rd Lane, Chu-Hou Tsung, Jen-Wu Hsiang,
-				Kaohsiung Hsien    81448
-				TW
-
-00-25-14   (hex)		PC Worth Int'l Co., Ltd.
-002514     (base 16)		PC Worth Int'l Co., Ltd.
-				18F, No.100, Sec. 1, Xintai 5th Rd., Xizhi Dist.,
-				New Taipei City  Taipei  22102
-				TW
-
-00-25-0B   (hex)		CENTROFACTOR  INC
-00250B     (base 16)		CENTROFACTOR  INC
-				Road Town, Tortola, P.O.Box 3161,
-				Tortola    194295
-				VG
-
-00-25-06   (hex)		A.I. ANTITACCHEGGIO ITALIA SRL
-002506     (base 16)		A.I. ANTITACCHEGGIO ITALIA SRL
-				VICOLO DELLE DAME 4
-				BOLOGNA    40124
-				IT
-
-00-25-1C   (hex)		EDT
-00251C     (base 16)		EDT
-				1400 SW Compton
-				Beaverton  OR  97008
-				US
-
-00-25-1A   (hex)		Psiber Data Systems Inc.
-00251A     (base 16)		Psiber Data Systems Inc.
-				7075-K Mission Gorge Rd
-				San Diego  CA  92120
-				US
-
-00-24-E1   (hex)		Convey Computer Corp.
-0024E1     (base 16)		Convey Computer Corp.
-				1302 E. Collins Blvd.
-				Richardson  TX  75081
-				US
-
-00-24-EE   (hex)		Wynmax Inc.
-0024EE     (base 16)		Wynmax Inc.
-				18F., No. 75, Sec. 1, XinTai 5th  Rd.,
-				Xizhi  City,  Taipei County  221
-				TW
-
-00-24-E3   (hex)		CAO Group
-0024E3     (base 16)		CAO Group
-				4628 West Skyhawk Drive
-				West Jordan  UT  84084
-				US
-
-00-25-07   (hex)		ASTAK Inc.
-002507     (base 16)		ASTAK Inc.
-				1911 Hartog Drive
-				San Jose  CA  95131
-				US
-
-00-24-D9   (hex)		BICOM, Inc.
-0024D9     (base 16)		BICOM, Inc.
-				755 Main Street
-				Monroe  CT  06468
-				US
-
-00-24-8E   (hex)		Infoware ZRt.
-00248E     (base 16)		Infoware ZRt.
-				Huseg u. 10/a
-				Budapest    1223
-				HU
-
-00-24-94   (hex)		Shenzhen Baoxin Tech CO., Ltd.
-002494     (base 16)		Shenzhen Baoxin Tech CO., Ltd.
-				6F Huale BLDG., Zhonghangbei Rd.,
-				Shenzhen  GuangDong  518028
-				CN
-
-00-24-89   (hex)		Vodafone Omnitel N.V.
-002489     (base 16)		Vodafone Omnitel N.V.
-				Via Jervis 13
-				10015  Ivrea  Torino
-				IT
-
-00-24-6F   (hex)		Onda Communication spa
-00246F     (base 16)		Onda Communication spa
-				via del lavoro 9
-				pordenone    33170
-				IT
-
-00-24-7F   (hex)		Nortel Networks
-00247F     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75081
-				US
-
-00-24-75   (hex)		Compass System(Embedded Dept.)
-002475     (base 16)		Compass System(Embedded Dept.)
-				1403 ACE TechnoTower 8th
-				Seoul    152-050
-				KR
-
-00-24-C3   (hex)		Cisco Systems, Inc
-0024C3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-B5   (hex)		Nortel Networks
-0024B5     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75081
-				US
-
-00-24-B0   (hex)		ESAB AB
-0024B0     (base 16)		ESAB AB
-				Box 8004
-				Göteborg    SE-402 77
-				SE
-
-00-24-C4   (hex)		Cisco Systems, Inc
-0024C4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-9D   (hex)		NES Technology Inc.
-00249D     (base 16)		NES Technology Inc.
-				#205 ACE Technotower 10, 470-5 Gasan-dong
-				Seoul    153-789
-				KR
-
-00-24-64   (hex)		Bridge Technologies Co AS
-002464     (base 16)		Bridge Technologies Co AS
-				Mølleparken 4
-				Oslo    0459
-				NO
-
-00-24-62   (hex)		Rayzone Corporation
-002462     (base 16)		Rayzone Corporation
-				#2008, B-Dong, Samho BLDG
-				Seoul    137-941
-				KR
-
-00-24-20   (hex)		NetUP Inc.
-002420     (base 16)		NetUP Inc.
-				Olof Palme st., 1, sect. 7
-				Moscow    119311
-				RU
-
-00-24-1E   (hex)		Nintendo Co., Ltd.
-00241E     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-24-1F   (hex)		DCT-Delta GmbH
-00241F     (base 16)		DCT-Delta GmbH
-				Bodanrückstraße 1
-				Bodman - Ludwigshafen  Baden-Württemberg  78351
-				DE
-
-00-24-0E   (hex)		Inventec Besta Co., Ltd.
-00240E     (base 16)		Inventec Besta Co., Ltd.
-				10FL, No.36, Lane 513, Rui Guang Road, Nei Hu Dist.
-				Taipei    114
-				TW
-
-00-24-60   (hex)		Giaval Science Development Co. Ltd.
-002460     (base 16)		Giaval Science Development Co. Ltd.
-				58 Bei Si Huan Xi Rd
-				  Beijing  100080
-				CN
-
-00-24-5C   (hex)		Design-Com Technologies Pty. Ltd.
-00245C     (base 16)		Design-Com Technologies Pty. Ltd.
-				14 Redland Drive
-				Mitcham  Victoria  3132
-				AU
-
-00-24-3D   (hex)		Emerson Appliance Motors and Controls
-00243D     (base 16)		Emerson Appliance Motors and Controls
-				1901 South St.
-				Elgin  IL  60123
-				US
-
-00-24-37   (hex)		Motorola - BSG
-002437     (base 16)		Motorola - BSG
-				1101 Marina Village Pkwy
-				Alameda  CA  94501
-				US
-
-00-24-44   (hex)		Nintendo Co., Ltd.
-002444     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-24-13   (hex)		Cisco Systems, Inc
-002413     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-4F   (hex)		Asantron Technologies Ltd.
-00244F     (base 16)		Asantron Technologies Ltd.
-				3F-1, No.30 Jihe Rd., 111
-				Taipei    11166
-				TW
-
-00-23-DD   (hex)		ELGIN S.A.
-0023DD     (base 16)		ELGIN S.A.
-				RUA BARAO DE CAMPINAS, 305
-				São Paulo    01201-901
-				BR
-
-00-23-DE   (hex)		Ansync Inc.
-0023DE     (base 16)		Ansync Inc.
-				4970 Robert J Matthews Pky
-				El Dorado Hills  CA  95762
-				US
-
-00-23-D9   (hex)		Banner Engineering
-0023D9     (base 16)		Banner Engineering
-				9714 10th Ave. N.
-				Plymouth  MN  55441
-				US
-
-00-23-DA   (hex)		Industrial Computer Source (Deutschland)GmbH
-0023DA     (base 16)		Industrial Computer Source (Deutschland)GmbH
-				Marie-Curie-Straße 9
-				Pulheim  NRW  50259
-				DE
-
-00-24-05   (hex)		Dilog Nordic AB
-002405     (base 16)		Dilog Nordic AB
-				Faktorvägen 9
-				Kungsbacka  Halland  439 34
-				SE
-
-00-23-E8   (hex)		Demco Corp.
-0023E8     (base 16)		Demco Corp.
-				#919, Doosan Venturedigm, 126-1
-				Anyang-Si  Kyungki-Do  431-070
-				US
-
-00-23-E3   (hex)		Microtronic AG
-0023E3     (base 16)		Microtronic AG
-				Duennernstrasse 32
-				Oensingen  Solothurn  4702
-				CH
-
-00-23-B7   (hex)		Q-Light Co., Ltd.
-0023B7     (base 16)		Q-Light Co., Ltd.
-				178-1 Woogye-Ri, Sangdong-Myun,
-				Gimhae-Si  GyungsangNam-Do  621-812
-				KR
-
-00-23-FD   (hex)		AFT Atlas Fahrzeugtechnik GmbH
-0023FD     (base 16)		AFT Atlas Fahrzeugtechnik GmbH
-				Gewerbestraße 14
-				Werdohl    58791
-				DE
-
-00-23-EF   (hex)		Zuend Systemtechnik AG
-0023EF     (base 16)		Zuend Systemtechnik AG
-				Industriestrasse 8
-				Altstaetten  SG  9450
-				CH
-
-00-23-AC   (hex)		Cisco Systems, Inc
-0023AC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-23-D8   (hex)		Ball-It Oy
-0023D8     (base 16)		Ball-It Oy
-				Uusikatu 24 G 76
-				Oulu    90100
-				FI
-
-00-23-9F   (hex)		Institut für Prüftechnik
-00239F     (base 16)		Institut für Prüftechnik
-				Schulstraße 3
-				Todtenweis  Bayern  86447
-				DE
-
-00-23-9D   (hex)		Mapower Electronics Co., Ltd
-00239D     (base 16)		Mapower Electronics Co., Ltd
-				No. 50 Minquan Road
-				Taoyuan County    33846
-				TW
-
-00-23-9C   (hex)		Juniper Networks
-00239C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-23-98   (hex)		Vutlan sro
-002398     (base 16)		Vutlan sro
-				ul. Svornosti 43
-				Bratislava  BA  82 106
-				SK
-
-00-23-5B   (hex)		Gulfstream
-00235B     (base 16)		Gulfstream
-				32 Lummus Drive
-				Savannah  GA  31407
-				US
-
-00-23-59   (hex)		Benchmark Electronics ( Thailand ) Public Company Limited
-002359     (base 16)		Benchmark Electronics ( Thailand ) Public Company Limited
-				94 Moo 1, Hi-Tech Industrial Estate
-				Bang Pa-in  Ayudhaya  13160
-				TH
-
-00-23-57   (hex)		Pitronot Technologies and Engineering P.T.E. Ltd.
-002357     (base 16)		Pitronot Technologies and Engineering P.T.E. Ltd.
-				8 Hatut st
-				Pardesiya    42815
-				IL
-
-00-23-55   (hex)		Kinco Automation(Shanghai) Ltd.
-002355     (base 16)		Kinco Automation(Shanghai) Ltd.
-				Bldg1, No.1387, Zhangdong Road,
-				  Shanghai  201203
-				CN
-
-00-23-73   (hex)		GridIron Systems, Inc.
-002373     (base 16)		GridIron Systems, Inc.
-				726 Palomar Ave
-				Sunnyvale  CA  94085
-				US
-
-00-23-67   (hex)		UniControls a.s.
-002367     (base 16)		UniControls a.s.
-				Krenicka 2257
-				Prague 10    100 00
-				CZ
-
-00-23-68   (hex)		Zebra Technologies Inc
-002368     (base 16)		Zebra Technologies Inc
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-00-23-6E   (hex)		Burster GmbH & Co KG
-00236E     (base 16)		Burster GmbH & Co KG
-				Talstraße 1-5
-				Gernsbach  Baden-Württemberg  76593
-				DE
-
-00-23-66   (hex)		Beijing Siasun Electronic System Co.,Ltd.
-002366     (base 16)		Beijing Siasun Electronic System Co.,Ltd.
-				Rm.1018 Huatian Bldg, No.6 Bei Xiaomachang
-				Beijing    100038
-				CN
-
-00-23-8F   (hex)		NIDEC COPAL CORPORATION
-00238F     (base 16)		NIDEC COPAL CORPORATION
-				2-18-10,SHIMURA
-				ITABASHI-KU  TOKYO  174-8550
-				JP
-
-00-23-80   (hex)		Nanoteq
-002380     (base 16)		Nanoteq
-				 PO Box 7991
-				Centurion  Gauteng  0046
-				ZA
-
-00-23-3D   (hex)		Laird Technologies
-00233D     (base 16)		Laird Technologies
-				Meesmannstrasse 103
-				Bochum    44807
-				DE
-
-00-23-3F   (hex)		Purechoice Inc
-00233F     (base 16)		Purechoice Inc
-				11481 Rupp Drive
-				Burnsville  MN  55337
-				US
-
-00-23-1B   (hex)		Danaher Motion - Kollmorgen
-00231B     (base 16)		Danaher Motion - Kollmorgen
-				201 W. Rock Road
-				Radford  VA  24141
-				US
-
-00-23-1E   (hex)		Cezzer Multimedia Technologies
-00231E     (base 16)		Cezzer Multimedia Technologies
-				Pépinière d'entreprises CREATIC
-				Plouzané    29280
-				FR
-
-00-23-1F   (hex)		Guangda Electronic & Telecommunication Technology Development Co., Ltd.
-00231F     (base 16)		Guangda Electronic & Telecommunication Technology Development Co., Ltd.
-				#8 Gaopengdong Road, Gaoxin District
-				Chengdu  Sichuan  610041
-				CN
-
-00-22-70   (hex)		ABK North America, LLC
-002270     (base 16)		ABK North America, LLC
-				440 North Wolfe Rd.
-				Sunnyvale  CA  94085
-				US
-
-00-23-13   (hex)		Qool Technologies Ltd.
-002313     (base 16)		Qool Technologies Ltd.
-				Gotanda Chuo Bldg 8f, 2-3-5
-				Shinagawa-ku  Tokyo  141-0022
-				JP
-
-00-23-10   (hex)		LNC Technology Co., Ltd.
-002310     (base 16)		LNC Technology Co., Ltd.
-				19F, No. 78-2, Sec. 3, Taichung Kang Rd.
-				Taichung    40764
-				TW
-
-00-22-CD   (hex)		Ared Technology Co., Ltd.
-0022CD     (base 16)		Ared Technology Co., Ltd.
-				6F-8 No.83 Sec.1, Nankan Rd. Luzhu Shiang
-				Taoyuan County  Taiwan  33859
-				TW
-
-00-22-CC   (hex)		SciLog, Inc.
-0022CC     (base 16)		SciLog, Inc.
-				8845 South Greenview Drive
-				Middleton  Wisconsin  53562
-				US
-
-00-22-CB   (hex)		IONODES Inc.
-0022CB     (base 16)		IONODES Inc.
-				4001 boulevard Industriel
-				Laval  Quebec  H7L4S3
-				CA
-
-00-22-C6   (hex)		Sutus Inc
-0022C6     (base 16)		Sutus Inc
-				301-3999 Henning Drive
-				Burnaby  British Columbia  V5C 6P9
-				CA
-
-00-22-E8   (hex)		Applition Co., Ltd.
-0022E8     (base 16)		Applition Co., Ltd.
-				509-1, Bundang Techno Park D-dong,
-				SeongNam  Kyunggi-do  463-760
-				KR
-
-00-22-E9   (hex)		ProVision Communications
-0022E9     (base 16)		ProVision Communications
-				1 Portland Square
-				Bristol    BS2 8RR
-				GB
-
-00-22-E6   (hex)		Intelligent Data
-0022E6     (base 16)		Intelligent Data
-				Edf. Inverinnova – Avda. Punto Mobi, 4. Parque Científico Tecnológico
-				Alcalá de Henares  Madrid  28805
-				ES
-
-00-22-E3   (hex)		Amerigon
-0022E3     (base 16)		Amerigon
-				21680 Haggerty Road
-				Northville  Michigan  48167
-				US
-
-00-22-EB   (hex)		Data Respons A/S
-0022EB     (base 16)		Data Respons A/S
-				Ellekær 6
-				Herlev    2730
-				DK
-
-00-22-EF   (hex)		iWDL Technologies
-0022EF     (base 16)		iWDL Technologies
-				10522 Meinert Rd
-				Wexford  PA  15090
-				US
-
-00-22-F2   (hex)		SunPower Corp
-0022F2     (base 16)		SunPower Corp
-				1414 Harbour Way South
-				Richmond  CA  94804
-				US
-
-00-22-E2   (hex)		WABTEC Transit Division
-0022E2     (base 16)		WABTEC Transit Division
-				130 Ridgeview Circle
-				Duncan  SC  29334
-				US
-
-00-23-01   (hex)		Witron Technology Limited
-002301     (base 16)		Witron Technology Limited
-				6/F, Xin Rui Building, 32 Tao Hua Road, Futian Free Trade Zone,
-				  Shenzhen  86
-				CN
-
-00-22-F7   (hex)		Conceptronic
-0022F7     (base 16)		Conceptronic
-				Databankweg 7
-				AMERSFOORT  utrecht  3821 AL
-				NL
-
-00-23-0C   (hex)		CLOVER ELECTRONICS CO.,LTD.
-00230C     (base 16)		CLOVER ELECTRONICS CO.,LTD.
-				AKENO 306-1
-				ISE City  MIE Prefecture  519-0501
-				JP
-
-00-23-34   (hex)		Cisco Systems, Inc
-002334     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-22-C8   (hex)		Applied Instruments B.V.
-0022C8     (base 16)		Applied Instruments B.V.
-				Dynamoweg 3
-				Vlissingen  Zeeland  NL-4382WZ
-				NL
-
-00-22-C0   (hex)		Shenzhen Forcelink Electronic Co, Ltd
-0022C0     (base 16)		Shenzhen Forcelink Electronic Co, Ltd
-				2nd and 3rd floor, Hasse manufacture building, Hasee industrial park
-				Shenzhen  Guangdong  518112
-				CN
-
-00-22-A6   (hex)		Sony Computer Entertainment America
-0022A6     (base 16)		Sony Computer Entertainment America
-				919 East Hillsdale Blvd
-				Foster City  California  94404-2175
-				US
-
-00-22-A7   (hex)		Tyco Electronics AMP GmbH
-0022A7     (base 16)		Tyco Electronics AMP GmbH
-				Amperestraße 12-14
-				Bensheim  Hessen  64625
-				DE
-
-00-22-A1   (hex)		Huawei Symantec Technologies Co.,Ltd.
-0022A1     (base 16)		Huawei Symantec Technologies Co.,Ltd.
-				Building 1,The West Zone Science Park of UESTC,No.88,Tianchen Road
-				Chengdu  Sichuan  611731
-				CN
-
-00-22-9D   (hex)		PYUNG-HWA IND.CO.,LTD
-00229D     (base 16)		PYUNG-HWA IND.CO.,LTD
-				230-1
-				HWASUNG-SI  KYUNGGI-DO  445-912
-				KR
-
-00-22-96   (hex)		LinoWave Corporation
-002296     (base 16)		LinoWave Corporation
-				1001-101 Champlain Avenue
-				Burlington  Ontario  L7L 5Z4
-				CA
-
-00-22-44   (hex)		Chengdu Linkon Communications Device Co., Ltd
-002244     (base 16)		Chengdu Linkon Communications Device Co., Ltd
-				5f-02, Juntong Building, No. 53,Shuangfeng Road, Wuhou District,
-				Chengdu  Sichuan  610041
-				CN
-
-00-22-50   (hex)		Point Six Wireless, LLC
-002250     (base 16)		Point Six Wireless, LLC
-				2333 Alumni Park Plaza
-				Lexington  KY  40517
-				US
-
-00-22-6F   (hex)		3onedata Technology Co. Ltd.
-00226F     (base 16)		3onedata Technology Co. Ltd.
-				3/F, B/2, Jiuxiangling Industrial District, Xili Town, Nanshan District,
-				Shenzhen  Guangdong  518055
-				CN
-
-00-22-78   (hex)		Shenzhen  Tongfang Multimedia  Technology Co.,Ltd.
-002278     (base 16)		Shenzhen  Tongfang Multimedia  Technology Co.,Ltd.
-				2f Sector D of TongFang Information Harbor
-				Nanshan District, Shenzhen  GuangDong  518058
-				CN
-
-00-22-7A   (hex)		Telecom Design
-00227A     (base 16)		Telecom Design
-				Za Remora
-				33170  Gradignan  
-				FR
-
-00-22-60   (hex)		AFREEY Inc.
-002260     (base 16)		AFREEY Inc.
-				6F, No.249, Chien I Road
-				Chung Ho City  Taipei County  235
-				TW
-
-00-21-EF   (hex)		Kapsys
-0021EF     (base 16)		Kapsys
-				790 Av du Docteur Maurice Donat
-				06250 Mougins  Sophia Antipolis  
-				FR
-
-00-21-ED   (hex)		Telegesis
-0021ED     (base 16)		Telegesis
-				84 Station Road
-				Marlow  Bucks  SL7 1NX
-				GB
-
-00-21-EB   (hex)		ESP SYSTEMS, LLC
-0021EB     (base 16)		ESP SYSTEMS, LLC
-				1422 East Fourth Street
-				Charlotte  NC  28204
-				US
-
-00-22-37   (hex)		Shinhint Group
-002237     (base 16)		Shinhint Group
-				Unit 1506, 15/F, Nanyang Plaza,, 57 Hung To Road,
-				    
-				HK
-
-00-22-2F   (hex)		Open Grid Computing, Inc.
-00222F     (base 16)		Open Grid Computing, Inc.
-				4030-1 West Braker Lane STE130
-				Austin  TX  78759
-				US
-
-00-21-F6   (hex)		Oracle Corporation
-0021F6     (base 16)		Oracle Corporation
-				900 Chelmsford Street
-				Lowell  MA  01851
-				US
-
-00-22-06   (hex)		Cyberdyne Inc.
-002206     (base 16)		Cyberdyne Inc.
-				504 @C49-2
-				Tsukuba-shi  Ibaraki-ken  305-0817
-				JP
-
-00-22-02   (hex)		Excito Elektronik i Skåne AB
-002202     (base 16)		Excito Elektronik i Skåne AB
-				Box 126
-				Löddeköpinge    246 22
-				SE
-
-00-22-27   (hex)		uv-electronic GmbH
-002227     (base 16)		uv-electronic GmbH
-				Grosswiesenstraße 20
-				Durchhausen  Baden-Württemberg  78591
-				DE
-
-00-22-1E   (hex)		Media Devices Co., Ltd.
-00221E     (base 16)		Media Devices Co., Ltd.
-				Rm1002 Ace TechnoTower(9th) 345-30
-				Seoul    153-802
-				KR
-
-00-22-25   (hex)		Thales Avionics Ltd
-002225     (base 16)		Thales Avionics Ltd
-				86 Bushey Road
-				London    SW20 0JW
-				GB
-
-00-22-20   (hex)		Mitac Technology Corp
-002220     (base 16)		Mitac Technology Corp
-				9th Fl., #75, Min-sheng E. Road, Sec. 3,
-				Taipei    104
-				TW
-
-00-22-0E   (hex)		Indigo Security Co., Ltd.
-00220E     (base 16)		Indigo Security Co., Ltd.
-				2nd Floor, 277-169 Sungsoo2-Ga, Sungdong-Gu
-				Seoul    133-832
-				KR
-
-00-22-07   (hex)		Inteno Broadband Technology AB
-002207     (base 16)		Inteno Broadband Technology AB
-				Stensätravägen 13
-				Skärholmen  SE  127 39 
-				SE
-
-00-22-3E   (hex)		IRTrans GmbH
-00223E     (base 16)		IRTrans GmbH
-				Einsteinstrasse 14
-				Unterschleissheim  BAYERN  85716
-				DE
-
-00-21-CE   (hex)		NTC-Metrotek
-0021CE     (base 16)		NTC-Metrotek
-				9, Nevzorovoy street
-				Saint-Petersburg    192148
-				RU
-
-00-21-CA   (hex)		ART System Co., Ltd.
-0021CA     (base 16)		ART System Co., Ltd.
-				Mobile Techno Bldg Room 910
-				Dae-Gu    702-020
-				KR
-
-00-21-CB   (hex)		SMS TECNOLOGIA ELETRONICA LTDA
-0021CB     (base 16)		SMS TECNOLOGIA ELETRONICA LTDA
-				Av. Pirâmide, 661
-				DIADEMA  São Paulo  09970330
-				BR
-
-00-21-C8   (hex)		LOHUIS Networks
-0021C8     (base 16)		LOHUIS Networks
-				2681 TV Monster
-				Votlaan 408  Votlaan  31
-				NL
-
-00-21-DB   (hex)		Santachi Video Technology (Shenzhen) Co., Ltd.
-0021DB     (base 16)		Santachi Video Technology (Shenzhen) Co., Ltd.
-				Santachi Building,#14 Kaifeng Road,Meilin,
-				Shenzhen  Guangdong  518049
-				CN
-
-00-21-BF   (hex)		Hitachi High-Tech Control Systems Corporation
-0021BF     (base 16)		Hitachi High-Tech Control Systems Corporation
-				500,Miyu-cho
-				Mito-shi  Ibaraki-ken  319-0316
-				JP
-
-00-21-BC   (hex)		ZALA COMPUTER
-0021BC     (base 16)		ZALA COMPUTER
-				EL BOUNI
-				ANNABA    23000
-				DZ
-
-00-21-B4   (hex)		APRO MEDIA CO., LTD
-0021B4     (base 16)		APRO MEDIA CO., LTD
-				#13-5,Dodang-Dong,Wonmi-Gu,
-				Bucheon-City  Kyunggi-Do  420-801
-				KR
-
-00-21-A8   (hex)		Telephonics Corporation
-0021A8     (base 16)		Telephonics Corporation
-				815 Broad Hollow Road
-				Farmingdale  New York  11790
-				US
-
-00-21-A9   (hex)		Mobilink Telecom Co.,Ltd
-0021A9     (base 16)		Mobilink Telecom Co.,Ltd
-				292-3 Sindang-ri, Sandong-myun
-				Gumi  Gyeongbuk  730-853
-				KR
-
-00-21-8D   (hex)		AP Router Ind. Eletronica LTDA
-00218D     (base 16)		AP Router Ind. Eletronica LTDA
-				Av. Lomanto Junior, 1000
-				Ilheus  Bahia  45654-000
-				BR
-
-00-21-90   (hex)		Goliath Solutions
-002190     (base 16)		Goliath Solutions
-				3082 Sterling Circle
-				Boulder  Colorado  80301
-				US
-
-00-21-85   (hex)		MICRO-STAR INT'L CO.,LTD.
-002185     (base 16)		MICRO-STAR INT'L CO.,LTD.
-				No.69,Li-De St,Jung-Ho City
-				Taipei Hsien    235
-				TW
-
-00-21-9F   (hex)		SATEL OY
-00219F     (base 16)		SATEL OY
-				Meriniitynkatu 17
-				SALO  Lansi-Suomen Laani  24100
-				FI
-
-00-21-96   (hex)		Telsey  S.p.A.
-002196     (base 16)		Telsey  S.p.A.
-				Viale dell'Industria, 1
-				Quinto  DiTreviso  31055
-				IT
-
-00-21-82   (hex)		SandLinks Systems, Ltd.
-002182     (base 16)		SandLinks Systems, Ltd.
-				P.O.Box 4629
-				Petah-Tiqwa  Israel  49277
-				IL
-
-00-21-83   (hex)		ANDRITZ HYDRO GmbH
-002183     (base 16)		ANDRITZ HYDRO GmbH
-				Eibesbrunnergasse 20
-				Vienna    1120
-				AT
-
-00-21-DF   (hex)		Martin Christ GmbH
-0021DF     (base 16)		Martin Christ GmbH
-				An der Unteren Soese 50
-				Osterode  Niedersachsen  37520
-				DE
-
-00-21-D4   (hex)		Vollmer Werke GmbH
-0021D4     (base 16)		Vollmer Werke GmbH
-				Maschinenfabrik
-				Biberach  Baden-Württemberg  88400
-				DE
-
-00-21-D6   (hex)		LXI Consortium
-0021D6     (base 16)		LXI Consortium
-				P.O. Box 1016
-				Niwot  CO  80544-1016
-				US
-
-00-21-A6   (hex)		Videotec Spa
-0021A6     (base 16)		Videotec Spa
-				Via Friuli,6
-				Schio  Vicenza  36015
-				IT
-
-00-21-59   (hex)		Juniper Networks
-002159     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-21-55   (hex)		Cisco Systems, Inc
-002155     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-21-57   (hex)		National Datacast, Inc.
-002157     (base 16)		National Datacast, Inc.
-				2100 Crystal Drive, Suite 750
-				Arlington  VA  22202
-				US
-
-00-21-3B   (hex)		Berkshire Products, Inc
-00213B     (base 16)		Berkshire Products, Inc
-				PO Box 2819
-				Cumming  GA  30028
-				US
-
-00-21-37   (hex)		Bay Controls, LLC
-002137     (base 16)		Bay Controls, LLC
-				6528 Weatherfield Ct
-				Maumee  OH  43537
-				US
-
-00-21-39   (hex)		Escherlogic Inc.
-002139     (base 16)		Escherlogic Inc.
-				1481 Rosebank Rd.
-				Pickering  Ontario  L1V 1P3
-				CA
-
-00-21-2C   (hex)		SemIndia System Private Limited
-00212C     (base 16)		SemIndia System Private Limited
-				No. 1106/9, A.M Industrial Estate, Garvebhavipalya
-				Bangalore  Karnataka  560 068
-				IN
-
-00-21-2B   (hex)		MSA Auer
-00212B     (base 16)		MSA Auer
-				Thiemannstraße 1
-				Berlin    12059
-				DE
-
-00-21-74   (hex)		AvaLAN Wireless
-002174     (base 16)		AvaLAN Wireless
-				958 San Leandro Ave, Suite 900
-				Mountain View  CA  94043
-				US
-
-00-21-79   (hex)		IOGEAR, Inc.
-002179     (base 16)		IOGEAR, Inc.
-				23 Hubble
-				Irvine  CA  92618
-				US
-
-00-21-68   (hex)		iVeia, LLC
-002168     (base 16)		iVeia, LLC
-				51 Franklin Street
-				Annapolis  MD  21401
-				US
-
-00-21-50   (hex)		EYEVIEW ELECTRONICS
-002150     (base 16)		EYEVIEW ELECTRONICS
-				3 Floor, No. 86, Kung Yeh 32 Road
-				TAICHUNG    407
-				TW
-
-00-21-4D   (hex)		Guangzhou Skytone Transmission Technology Com. Ltd.
-00214D     (base 16)		Guangzhou Skytone Transmission Technology Com. Ltd.
-				3/F West, Block 4, Huangzhou
-				Guangzhou  Guangdong  510660
-				CN
-
-00-21-2A   (hex)		Audiovox Corporation
-00212A     (base 16)		Audiovox Corporation
-				150 Marcus Blvd
-				Hauppauge  NY  11788
-				US
-
-00-21-5E   (hex)		IBM Corp
-00215E     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-1F-F6   (hex)		PS Audio International
-001FF6     (base 16)		PS Audio International
-				4826 Sterling Drive
-				Boulder  CO  80301
-				US
-
-00-21-10   (hex)		Clearbox Systems
-002110     (base 16)		Clearbox Systems
-				Suite 2, Level 2
-				Macquarie Park  NSW  2113
-				AU
-
-00-21-0C   (hex)		Cymtec Systems, Inc.
-00210C     (base 16)		Cymtec Systems, Inc.
-				10845 Olive Bouleveard
-				St Louis  MO  63141
-				US
-
-00-21-0B   (hex)		GEMINI TRAZE RFID PVT. LTD.
-00210B     (base 16)		GEMINI TRAZE RFID PVT. LTD.
-				1, DR. RANGA ROAD
-				CHENNAI  TAMILNADU  600018
-				IN
-
-00-1F-DD   (hex)		GDI LLC
-001FDD     (base 16)		GDI LLC
-				One MidAmerica Plaza
-				Oakbrook Terrace  IL  60181
-				US
-
-00-1F-DA   (hex)		Nortel Networks
-001FDA     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75081
-				US
-
-00-21-04   (hex)		Gigaset Communications GmbH
-002104     (base 16)		Gigaset Communications GmbH
-				Frankenstrasse 2
-				46395  Bocholt  
-				DE
-
-00-1F-FB   (hex)		Green Packet Bhd
-001FFB     (base 16)		Green Packet Bhd
-				Lot 1-4, Incubator 2, Technology Park Malaysia
-				Kuala Lumpur  Wilayah Persekutuan  57000
-				MY
-
-00-1F-E9   (hex)		Printrex, Inc.
-001FE9     (base 16)		Printrex, Inc.
-				276 East Gish Road
-				San Jose  CA  95112
-				US
-
-00-1F-F0   (hex)		Audio Partnership
-001FF0     (base 16)		Audio Partnership
-				Gallery Court
-				London    SE1 4BB
-				GB
-
-00-1F-EA   (hex)		Applied Media Technologies Corporation
-001FEA     (base 16)		Applied Media Technologies Corporation
-				4091 AMTC Center Drive
-				Clearwater  FL  33764
-				US
-
-00-1F-D9   (hex)		RSD Communications Ltd
-001FD9     (base 16)		RSD Communications Ltd
-				8 Borrowmeadow Road
-				Stirling  Scotland  FK7 7UW
-				GB
-
-00-1F-CE   (hex)		QTECH LLC
-001FCE     (base 16)		QTECH LLC
-				Novozavodskaya st. 18 build. 1
-				Moscow  Moscow region  121309
-				RU
-
-00-1F-8B   (hex)		Cache IQ
-001F8B     (base 16)		Cache IQ
-				8834 North Capital of Texas Hwy
-				Austin  Texas  78759
-				US
-
-00-1F-85   (hex)		Apriva ISS, LLC
-001F85     (base 16)		Apriva ISS, LLC
-				6900 E Camelback Rd
-				Scottsdale  AZ  85251
-				US
-
-00-1F-87   (hex)		Skydigital Inc.
-001F87     (base 16)		Skydigital Inc.
-				#28-9 Wonhyoro1-ga, Yongsan-gu,
-				Seoul    140-846
-				KR
-
-00-1F-88   (hex)		FMS Force Measuring Systems AG
-001F88     (base 16)		FMS Force Measuring Systems AG
-				Aspstrasse 6
-				Oberglatt  Zurich  8154
-				CH
-
-00-1F-86   (hex)		digEcor
-001F86     (base 16)		digEcor
-				1625 N. 1100 W.
-				Springville  UT  84663
-				US
-
-00-1F-A1   (hex)		Gtran Inc
-001FA1     (base 16)		Gtran Inc
-				2651 Lavery Court
-				Newbury Park  CA  91320
-				US
-
-00-1F-9F   (hex)		Thomson Telecom Belgium
-001F9F     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				Edegem  Antwerp  B-2650
-				BE
-
-00-1F-99   (hex)		SERONICS co.ltd
-001F99     (base 16)		SERONICS co.ltd
-				#401 Technopolis,
-				Daegu  Gyeong-buk  704-230
-				KR
-
-00-1F-80   (hex)		Lucas Holding bv
-001F80     (base 16)		Lucas Holding bv
-				Domein 28
-				Gemert  NB  5421AR
-				NL
-
-00-1B-58   (hex)		ACE CAD Enterprise Co., Ltd.
-001B58     (base 16)		ACE CAD Enterprise Co., Ltd.
-				2F, No. 94, Bao Chung Road,
-				Hsin Tien City,  Taipei Hsien  23144
-				TW
-
-00-1F-B0   (hex)		TimeIPS, Inc.
-001FB0     (base 16)		TimeIPS, Inc.
-				3522 N Comotara St
-				Wichita  KS  67226
-				US
-
-00-1F-AE   (hex)		Blick South Africa (Pty) Ltd
-001FAE     (base 16)		Blick South Africa (Pty) Ltd
-				PO Box 1908
-				Johannesburg  Gauteng  2108
-				ZA
-
-00-1F-79   (hex)		Lodam Electronics A/S
-001F79     (base 16)		Lodam Electronics A/S
-				Kærvej 77
-				Sønderborg  Als  DK-6400
-				DK
-
-00-1F-71   (hex)		xG Technology, Inc.
-001F71     (base 16)		xG Technology, Inc.
-				240 S. Pineapple Avenue
-				Sarasota  FL  34236
-				US
-
-00-1F-A5   (hex)		Blue-White Industries
-001FA5     (base 16)		Blue-White Industries
-				5300 Business Drive
-				Huntington Beach  CA  92649
-				US
-
-00-1F-9D   (hex)		Cisco Systems, Inc
-001F9D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1F-96   (hex)		APROTECH CO.LTD
-001F96     (base 16)		APROTECH CO.LTD
-				KOLONDIGITAL TOWER ASTON 201, 505-14
-				SEOUL    KSXX 0022
-				KR
-
-00-1F-6C   (hex)		Cisco Systems, Inc
-001F6C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1F-6F   (hex)		Fujian Sunnada Communication Co.,Ltd.
-001F6F     (base 16)		Fujian Sunnada Communication Co.,Ltd.
-				7/F Main Building,Fujian Torch Hi-Tech Innovation Park No.611 Industrial Road,Fuzhou Fuzhou Fujian China  350002 
-				Fuzhou  Fujian  350002
-				CN
-
-00-1F-60   (hex)		COMPASS SYSTEMS CORP.
-001F60     (base 16)		COMPASS SYSTEMS CORP.
-				6F, No. 413, Sec. 2, Ti-Ding Blvd.,
-				Taipei  NeihuDist  114
-				TW
-
-00-1F-6A   (hex)		PacketFlux Technologies, Inc.
-001F6A     (base 16)		PacketFlux Technologies, Inc.
-				50 11th Avenue
-				Helena  MT  59601
-				US
-
-00-1F-65   (hex)		KOREA ELECTRIC TERMINAL CO., LTD.
-001F65     (base 16)		KOREA ELECTRIC TERMINAL CO., LTD.
-				#7-38 SONGDO-DONG
-				YEONSU-GU  INCHEON  406-840
-				KR
-
-00-1F-17   (hex)		IDX Company, Ltd.
-001F17     (base 16)		IDX Company, Ltd.
-				6-28-11 Shukugawara, Tana-ku
-				Kawasaki-Shi  Kanagawa-Ken  2140021
-				JP
-
-00-1F-1B   (hex)		RoyalTek Company Ltd.
-001F1B     (base 16)		RoyalTek Company Ltd.
-				Suite 9F-1, No. 1071, Chung Cheng Rd.
-				Taoyuan Shien  Taoyuan  330
-				TW
-
-00-1F-5E   (hex)		Dyna Technology Co.,Ltd.
-001F5E     (base 16)		Dyna Technology Co.,Ltd.
-				HaoHai Building 1F,No.7,5th Street,Shangdi,
-				Beijing    100085
-				CN
-
-00-1F-55   (hex)		Honeywell Security (China) Co., Ltd.
-001F55     (base 16)		Honeywell Security (China) Co., Ltd.
-				Block 28, Section 2, Huai  De Cui Gang Industrial  Estate, Fu Yong, Bao An, ShenZhen, P.R. China
-				ShenZhen  GuangDong  518103
-				CN
-
-00-1F-54   (hex)		Lorex Technology Inc.
-001F54     (base 16)		Lorex Technology Inc.
-				250 Royal Crest Court
-				Markham  Ontario  L3R3S1
-				CA
-
-00-1F-2E   (hex)		Triangle Research Int'l Pte Ltd
-001F2E     (base 16)		Triangle Research Int'l Pte Ltd
-				10 Ubi Crescent #05-83
-				Ubi Techpark  SG  408664
-				SG
-
-00-1F-4B   (hex)		Lineage Power
-001F4B     (base 16)		Lineage Power
-				3000 Skyline Dr.
-				Mesquite  TX  75149
-				US
-
-00-1F-0D   (hex)		L3 Communications - Telemetry West
-001F0D     (base 16)		L3 Communications - Telemetry West
-				9020 Balboa Ave
-				San Diego  CA  92123
-				US
-
-00-1E-FC   (hex)		JSC MASSA-K
-001EFC     (base 16)		JSC MASSA-K
-				15, A, Pirogovskaya nab.
-				Saint-Petersburg  Leningradskiy reg.  194044
-				RU
-
-00-1F-23   (hex)		Interacoustics
-001F23     (base 16)		Interacoustics
-				Drejervaenget 8
-				Assens  DK  5610
-				DK
-
-00-1F-06   (hex)		Integrated Dispatch Solutions
-001F06     (base 16)		Integrated Dispatch Solutions
-				645 Mountain Ave
-				Wyckoff  NJ  07481
-				US
-
-00-1E-BA   (hex)		High Density Devices AS
-001EBA     (base 16)		High Density Devices AS
-				Vestre Strandgate 26
-				Kristiansand    4611
-				NO
-
-00-1E-B8   (hex)		Aloys, Inc
-001EB8     (base 16)		Aloys, Inc
-				#3F HANWHA TECHWIN R&D BLDG. 4-5, YANGHYEON-RO 405 BEON-GIL,
-				JUNGWON-GU, SEONGNAM-SI  GYEONGGI-DO  13438
-				KR
-
-00-1E-B4   (hex)		UNIFAT TECHNOLOGY LTD.
-001EB4     (base 16)		UNIFAT TECHNOLOGY LTD.
-				7/FLOOR, SUI HONG IND. BLDG.,
-				KWAI CHUNG  N.T.  
-				HK
-
-00-1E-DA   (hex)		Wesemann Elektrotechniek B.V.
-001EDA     (base 16)		Wesemann Elektrotechniek B.V.
-				Droogbloem 31
-				Rotterdam  Zuid-Holland  3068 AW
-				NL
-
-00-1E-D7   (hex)		H-Stream Wireless, Inc.
-001ED7     (base 16)		H-Stream Wireless, Inc.
-				2595 East Bayshore Road
-				Palo Alto  CA  94303
-				US
-
-00-1E-D5   (hex)		Tekon-Automatics
-001ED5     (base 16)		Tekon-Automatics
-				Zelenograd, 512-29
-				Moscow    124482
-				RU
-
-00-1E-E8   (hex)		Mytek
-001EE8     (base 16)		Mytek
-				151 Lafayette Str 3 Fl
-				New York  NY  10013
-				US
-
-00-1E-EE   (hex)		ETL Systems Ltd
-001EEE     (base 16)		ETL Systems Ltd
-				Coldwell Radio Station
-				Hereford  Herefordshire  HR2 9NE
-				GB
-
-00-1E-FA   (hex)		PROTEI Ltd.
-001EFA     (base 16)		PROTEI Ltd.
-				60A B.Sampsonievsky,  Business Center
-				St.Petersburg  RU  194044
-				RU
-
-00-1E-FB   (hex)		Trio Motion Technology Ltd
-001EFB     (base 16)		Trio Motion Technology Ltd
-				Shannon Way
-				Tewkesbury  Gloucestershire  GL20 8ND
-				GB
-
-00-1E-F8   (hex)		Emfinity Inc.
-001EF8     (base 16)		Emfinity Inc.
-				1305 Kelly Lake Road
-				Sudbury  Ontario  P3E5P5
-				CA
-
-00-1E-CB   (hex)		RPC Energoautomatika Ltd
-001ECB     (base 16)		RPC Energoautomatika Ltd
-				Krasnokazarmennaya st., 13/1
-				Moscow    111250
-				RU
-
-00-1E-A8   (hex)		Datang Mobile Communications Equipment CO.,LTD
-001EA8     (base 16)		Datang Mobile Communications Equipment CO.,LTD
-				No.29,Xueyuan Rd.
-				Beijing    100083
-				CN
-
-00-1E-AB   (hex)		TeleWell Oy
-001EAB     (base 16)		TeleWell Oy
-				Alahotie 14 b
-				Jarvenpaa  Uusimaa  04430
-				FI
-
-00-1E-9F   (hex)		Visioneering Systems, Inc.
-001E9F     (base 16)		Visioneering Systems, Inc.
-				5931 Sea Lion Place
-				Carlsbad  California  92010
-				US
-
-00-1E-6B   (hex)		Cisco SPVTG
-001E6B     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-00-1E-70   (hex)		Cobham Antenna Systems
-001E70     (base 16)		Cobham Antenna Systems
-				Cobham Centre, Fourth Avenue
-				Marlow  Buckinghamshire  SL7 1TF
-				GB
-
-00-1E-61   (hex)		ITEC GmbH
-001E61     (base 16)		ITEC GmbH
-				Lassnitzthal 300
-				  A-8200   Gleisdorf
-				AT
-
-00-1E-3E   (hex)		KMW Inc.
-001E3E     (base 16)		KMW Inc.
-				65 Youngchun-ri, Dongtan-myun
-				Hwasung-si  Kyungki-do  445-813
-				KR
-
-00-1E-38   (hex)		Bluecard Software Technology Co., Ltd.
-001E38     (base 16)		Bluecard Software Technology Co., Ltd.
-				D-801 Shangdi Science Building
-				Beijing    100085
-				CN
-
-00-1E-47   (hex)		PT. Hariff Daya Tunggal Engineering
-001E47     (base 16)		PT. Hariff Daya Tunggal Engineering
-				Jl. Soekarno Hatta No. 450
-				Bandung  Jawa Barat  40266
-				ID
-
-00-1E-48   (hex)		Wi-Links
-001E48     (base 16)		Wi-Links
-				332 Ayiou street
-				Limassol    3725
-				CY
-
-00-1E-8A   (hex)		eCopy, Inc
-001E8A     (base 16)		eCopy, Inc
-				1 Oracle Dr
-				Nashua  NH  03062
-				US
-
-00-1E-9B   (hex)		San-Eisha, Ltd.
-001E9B     (base 16)		San-Eisha, Ltd.
-				2-1 Ebara 5-chome
-				Shinagawa-ku  Tokyo  142-8611
-				JP
-
-00-1E-96   (hex)		Sepura Plc
-001E96     (base 16)		Sepura Plc
-				Radio House
-				Cambridge  CAMBRIDGESHIRE  CB4 1GR
-				GB
-
-00-1E-59   (hex)		Silicon Turnkey Express, LLC
-001E59     (base 16)		Silicon Turnkey Express, LLC
-				749 Miner Road
-				Highland Heights  Ohio  44143
-				US
-
-00-1E-51   (hex)		Converter Industry Srl
-001E51     (base 16)		Converter Industry Srl
-				Via Euclide, 12
-				Forli'  FC  47100
-				IT
-
-00-1E-71   (hex)		MIrcom Group of Companies
-001E71     (base 16)		MIrcom Group of Companies
-				25 Interchange Way
-				  Vaughan, Ontario  l4K 5W3
-				CA
-
-00-1D-C4   (hex)		AIOI Systems Co., Ltd.
-001DC4     (base 16)		AIOI Systems Co., Ltd.
-				KDX Omori, Bldg 8F
-				Tokyo    140-0016
-				JP
-
-00-1D-C0   (hex)		Enphase Energy
-001DC0     (base 16)		Enphase Energy
-				201 1st Street, Suite 111
-				Petaluma  CA  94952
-				US
-
-00-1D-BD   (hex)		Versamed Inc.
-001DBD     (base 16)		Versamed Inc.
-				2 Blue Hill Plaza
-				Pearl River  NY  10965
-				US
-
-00-1D-F8   (hex)		Webpro Vision Technology Corporation
-001DF8     (base 16)		Webpro Vision Technology Corporation
-				4F., No.573, Cingping Rd.
-				Anping District    708
-				TW
-
-00-1D-F9   (hex)		Cybiotronics (Far East) Limited
-001DF9     (base 16)		Cybiotronics (Far East) Limited
-				Unit 1906, Eastern Centre,
-				Quarry Bay    
-				HK
-
-00-1D-F7   (hex)		R. STAHL Schaltgeräte GmbH
-001DF7     (base 16)		R. STAHL Schaltgeräte GmbH
-				am Bahnhof 30
-				Waldenburg  Baden-Württemberg  74638
-				DE
-
-00-1E-05   (hex)		Xseed Technologies & Computing
-001E05     (base 16)		Xseed Technologies & Computing
-				Topaz House, MATAM
-				Haifa    39100
-				IL
-
-00-1E-07   (hex)		Winy Technology Co., Ltd.
-001E07     (base 16)		Winy Technology Co., Ltd.
-				305-303, Bucheon Techno-park, #365
-				Bucheon  Gyeonggi-do  421-741
-				KR
-
-00-1E-0A   (hex)		Syba Tech Limited
-001E0A     (base 16)		Syba Tech Limited
-				RM1301, Vanta Industrial Centre,
-				Kwai Chung    
-				HK
-
-00-1E-03   (hex)		LiComm Co., Ltd.
-001E03     (base 16)		LiComm Co., Ltd.
-				908-1 SEO-RI, IDONG-MYEON
-				YONGIN-SI  GYEONGGI-DO  449-834
-				KR
-
-00-1E-1B   (hex)		Digital Stream Technology, Inc.
-001E1B     (base 16)		Digital Stream Technology, Inc.
-				4,5,6th Fl., TaeChang B/D, 451-1
-				Seoul    134-030
-				KR
-
-00-1E-17   (hex)		STN BV
-001E17     (base 16)		STN BV
-				Amerikaweg 4
-				Hulst  Zeeland  4561 PB
-				NL
-
-00-1E-18   (hex)		Radio Activity srl
-001E18     (base 16)		Radio Activity srl
-				Via De Notaris 50
-				Milano  MI  20128
-				IT
-
-00-1E-15   (hex)		Beech Hill Electronics
-001E15     (base 16)		Beech Hill Electronics
-				Beechcroft, Beech Hill Road
-				Reading  Berkshire  RG7 2AU
-				GB
-
-00-1E-30   (hex)		Shireen Inc
-001E30     (base 16)		Shireen Inc
-				8531 Ziggy Lane
-				Gaithersburg  MD  20877
-				US
-
-00-1E-2E   (hex)		SIRTI S.p.A.
-001E2E     (base 16)		SIRTI S.p.A.
-				Via Bombrini 11/3
-				GENOA    16149
-				IT
-
-00-1D-DC   (hex)		HangZhou DeChangLong Tech&Info Co.,Ltd
-001DDC     (base 16)		HangZhou DeChangLong Tech&Info Co.,Ltd
-				Room 1102,KeJi Mansion,
-				HangZhou  ZheJiang  310012
-				CN
-
-00-1D-EB   (hex)		DINEC International
-001DEB     (base 16)		DINEC International
-				Rue de la Gare, 30
-				BRAINE L'ALLEUD  BRABANT WALLON  1420
-				BE
-
-00-1D-9A   (hex)		GODEX INTERNATIONAL CO., LTD
-001D9A     (base 16)		GODEX INTERNATIONAL CO., LTD
-				4F. NO.168, Lian-Cheng Road Chung-Ho City,
-				Taipei  Hsien  235
-				US
-
-00-1D-97   (hex)		Alertus Technologies LLC
-001D97     (base 16)		Alertus Technologies LLC
-				11785 Beltsville Drive
-				Beltsville  MD  20705
-				US
-
-00-1D-91   (hex)		Digitize, Inc
-001D91     (base 16)		Digitize, Inc
-				158 Edison Road
-				Lake Hopatcong  New Jersey  07849
-				US
-
-00-1D-95   (hex)		Flash, Inc.
-001D95     (base 16)		Flash, Inc.
-				3703 N. 200th St.
-				Elkhorn  NE  68022-2922
-				US
-
-00-1D-9D   (hex)		ARTJOY INTERNATIONAL LIMITED
-001D9D     (base 16)		ARTJOY INTERNATIONAL LIMITED
-				Room 1601,No.239 ZhongXing Road,LuoHu District
-				Shenzhen  Guangdong  518001
-				CN
-
-00-1D-9E   (hex)		AXION TECHNOLOGIES
-001D9E     (base 16)		AXION TECHNOLOGIES
-				151 RUE PARC INNOVATION
-				LA POCATIERE  QUEBEC  G0R1Z0
-				US
-
-00-1D-70   (hex)		Cisco Systems, Inc
-001D70     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-78   (hex)		Invengo Information Technology Co.,Ltd
-001D78     (base 16)		Invengo Information Technology Co.,Ltd
-				3/F,No.T2-B,High-Tech Industrial Park South
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1D-6F   (hex)		Chainzone Technology Co., Ltd
-001D6F     (base 16)		Chainzone Technology Co., Ltd
-				Chainzone Tech. Ind Park, Nanxin 1st Rd.
-				Foshan  Guangdong  528200
-				CN
-
-00-1D-7F   (hex)		Tekron International Ltd
-001D7F     (base 16)		Tekron International Ltd
-				409 Cuba Street, Alicetown
-				Lower Hutt  Wellington  5010
-				NZ
-
-00-1D-79   (hex)		SIGNAMAX LLC
-001D79     (base 16)		SIGNAMAX LLC
-				1090 Vermont Avenue
-				Washington  Washington D.C.  20005
-				US
-
-00-1D-AE   (hex)		CHANG TSENG TECHNOLOGY CO., LTD
-001DAE     (base 16)		CHANG TSENG TECHNOLOGY CO., LTD
-				2F NO.160 BACK BUILDING, LEN CHENG RD., CHUNG HO CITY
-				TAIPEI  HSIEN  235
-				TW
-
-00-1D-A6   (hex)		Media Numerics Limited
-001DA6     (base 16)		Media Numerics Limited
-				Rodenbacher Chaussee 6
-				Hanau  Hessen  63457
-				DE
-
-00-1D-62   (hex)		InPhase Technologies
-001D62     (base 16)		InPhase Technologies
-				2000 Pike Road
-				Longmont  Colorado  80501
-				US
-
-00-1D-63   (hex)		Miele & Cie. KG
-001D63     (base 16)		Miele & Cie. KG
-				Carl-Miele-Straße 29
-				Gütersloh    33332
-				DE
-
-00-1D-B7   (hex)		Tendril Networks, Inc.
-001DB7     (base 16)		Tendril Networks, Inc.
-				5700-D Flatiron Parkway
-				Boulder  CO  80301
-				US
-
-00-1D-8D   (hex)		Fluke Process Instruments GmbH
-001D8D     (base 16)		Fluke Process Instruments GmbH
-				Blankenburger Str. 135
-				Berlin    13127
-				DE
-
-00-1D-1F   (hex)		Siauliu Tauro Televizoriai, JSC
-001D1F     (base 16)		Siauliu Tauro Televizoriai, JSC
-				Pramones,15
-				Siauliai    LT-57318
-				LT
-
-00-1D-43   (hex)		Shenzhen G-link Digital Technology Co., Ltd.
-001D43     (base 16)		Shenzhen G-link Digital Technology Co., Ltd.
-				4F, E Building,Huachuang Da Technology Zone ,Hangcheng Highway,Gushu,Xixiang ,
-				shenzhen  GuangDong  518126
-				CN
-
-00-1D-3F   (hex)		Mitron Pty Ltd
-001D3F     (base 16)		Mitron Pty Ltd
-				Unit 11
-				Artarmon  NSW  2065
-				AU
-
-00-1D-39   (hex)		MOOHADIGITAL CO., LTD
-001D39     (base 16)		MOOHADIGITAL CO., LTD
-				Seoul Hightech Venture Center C-307 647-26
-				SEOUL    157-030
-				KR
-
-00-1D-37   (hex)		Thales-Panda Transportation System
-001D37     (base 16)		Thales-Panda Transportation System
-				6th floor, HUIJIE Plaza, 268 Zhongshan Rd.
-				nanjing  jiangsu  210008
-				CN
-
-00-1D-13   (hex)		NextGTV
-001D13     (base 16)		NextGTV
-				13F Byucksan/Kyungin Digital Valley ll
-				Seoul    153-803
-				KR
-
-00-1D-14   (hex)		SPERADTONE INFORMATION TECHNOLOGY LIMITED
-001D14     (base 16)		SPERADTONE INFORMATION TECHNOLOGY LIMITED
-				Room 1001 NO.418 Gui Ping Road,
-				Shanghai    200233
-				CN
-
-00-1D-10   (hex)		LightHaus Logic, Inc.
-001D10     (base 16)		LightHaus Logic, Inc.
-				126-1020 Mainland Street
-				Vancouver  BC  V6B 2T4
-				CA
-
-00-1D-04   (hex)		Zipit Wireless, Inc.
-001D04     (base 16)		Zipit Wireless, Inc.
-				49 Salters Road.
-				Greenville  SC  29607
-				US
-
-00-1C-F2   (hex)		Tenlon Technology Co.,Ltd.
-001CF2     (base 16)		Tenlon Technology Co.,Ltd.
-				4/F.,Shenhua Bldg,No.3155,Binhe Road,Futian District
-				Shenzhen  Guangdong  518033
-				CN
-
-00-1D-30   (hex)		YX Wireless S.A.
-001D30     (base 16)		YX Wireless S.A.
-				Av. Vicuña Mackenna #4860
-				Santiago    8580710
-				US
-
-00-1C-B2   (hex)		BPT SPA
-001CB2     (base 16)		BPT SPA
-				Via Stazione,48
-				Sesto al Reghena  Pordenone  33079
-				IT
-
-00-1C-B5   (hex)		Neihua Network Technology Co.,LTD.(NHN)
-001CB5     (base 16)		Neihua Network Technology Co.,LTD.(NHN)
-				Plot Xinmei Road 102-Q,New District
-				WuXi  Jiangsu  214028
-				CN
-
-00-1C-B4   (hex)		Iridium Satellite LLC
-001CB4     (base 16)		Iridium Satellite LLC
-				8440 S. River Parkway
-				Tempe  AZ  85284
-				US
-
-00-1C-B6   (hex)		Duzon CNT Co., Ltd.
-001CB6     (base 16)		Duzon CNT Co., Ltd.
-				14th Floor, IRE building 2
-				Seoul    150-967
-				KR
-
-00-1C-C7   (hex)		Rembrandt Technologies, LLC d/b/a REMSTREAM
-001CC7     (base 16)		Rembrandt Technologies, LLC d/b/a REMSTREAM
-				140 South Beverly Drive
-				Beverly Hills  CA  90212
-				US
-
-00-1C-BB   (hex)		MusicianLink
-001CBB     (base 16)		MusicianLink
-				2401 Cory Ave.
-				San Jose  CA  95128
-				US
-
-00-1C-8D   (hex)		Mesa Imaging
-001C8D     (base 16)		Mesa Imaging
-				Badenerstrasse 569
-				Zürich  ZH  8048
-				CH
-
-00-1C-89   (hex)		Force Communications, Inc.
-001C89     (base 16)		Force Communications, Inc.
-				3810 Arbordale Lane
-				Sachse  TX  75048
-				US
-
-00-1C-87   (hex)		Uriver Inc.
-001C87     (base 16)		Uriver Inc.
-				3rd., Fl., Bogwang Bldg., Poi-dong, 238-7 Gangnam-gu,
-				Seoul    135-964
-				KR
-
-00-1C-CD   (hex)		Alektrona Corporation
-001CCD     (base 16)		Alektrona Corporation
-				95 Hathaway Street, Suite 10
-				Providence  RI  02907
-				US
-
-00-1C-EC   (hex)		Mobilesoft (Aust.) Pty Ltd
-001CEC     (base 16)		Mobilesoft (Aust.) Pty Ltd
-				Suite 2, 27-35 Grosvenor Street
-				Sydney  NSW  2089
-				AU
-
-00-1C-E8   (hex)		Cummins Inc
-001CE8     (base 16)		Cummins Inc
-				1400 73rd Ave NE
-				Fridley  MN  55432
-				US
-
-00-1C-D0   (hex)		Circleone Co.,Ltd.
-001CD0     (base 16)		Circleone Co.,Ltd.
-				860-1,Noda
-				Beppu-shi  Ooita-ken  874-0016
-				JP
-
-00-1C-9F   (hex)		Razorstream, LLC
-001C9F     (base 16)		Razorstream, LLC
-				2381-C Renaissance Drive
-				Las Vegas  NV  89119
-				US
-
-00-1C-7D   (hex)		Excelpoint Manufacturing Pte Ltd
-001C7D     (base 16)		Excelpoint Manufacturing Pte Ltd
-				15, Changi Business Park
-				    486057
-				SG
-
-00-1C-5C   (hex)		Integrated Medical Systems, Inc.
-001C5C     (base 16)		Integrated Medical Systems, Inc.
-				1984 Obispo Avenue
-				Signal Hill  CA  90755
-				US
-
-00-1C-52   (hex)		VISIONEE SRL
-001C52     (base 16)		VISIONEE SRL
-				VIALE DELLA REPUBBLICA, 22
-				VILLORBA  TREVISO  31050
-				IT
-
-00-1C-47   (hex)		Hangzhou Hollysys Automation Co., Ltd
-001C47     (base 16)		Hangzhou Hollysys Automation Co., Ltd
-				No.10 Middle Road, Jiancaicheng, Haidian District,
-				Beijing    100096
-				CN
-
-00-1C-16   (hex)		ThyssenKrupp Elevator
-001C16     (base 16)		ThyssenKrupp Elevator
-				9280 Crestwyn Hills Drive
-				Memphis  TN  38125
-				US
-
-00-1C-19   (hex)		secunet Security Networks AG
-001C19     (base 16)		secunet Security Networks AG
-				Kronprinzenstraße 30
-				Essen  NRW  45128
-				DE
-
-00-1C-6C   (hex)		30805
-001C6C     (base 16)		30805
-				128, Jun Cheng Road,uangzhou Economic and Technological Development District
-				Guangzhou  Guangdong  510530
-				CN
-
-00-1C-61   (hex)		Galaxy  Microsystems LImited
-001C61     (base 16)		Galaxy  Microsystems LImited
-				Room 1101-03, 11/F Enterprise Square Two
-				Kowloon Bay  Kowloon  
-				HK
-
-00-1C-3B   (hex)		AmRoad Technology Inc.
-001C3B     (base 16)		AmRoad Technology Inc.
-				18F-3 No. 150 , Chien I Rd
-				Chung Ho  Taipei Hsien  23511
-				TW
-
-00-1C-3F   (hex)		International Police Technologies, Inc.
-001C3F     (base 16)		International Police Technologies, Inc.
-				4150 S. 87th E. Avenue
-				Tulsa  OK  74145
-				US
-
-00-1C-28   (hex)		Sphairon Technologies GmbH 
-001C28     (base 16)		Sphairon Technologies GmbH 
-				Philipp-Reis-Strasse 1
-				Bautzen  Saxony  02625    
-				DE
-
-00-1C-1F   (hex)		Quest Retail Technology Pty Ltd
-001C1F     (base 16)		Quest Retail Technology Pty Ltd
-				37-39 Walsh Street
-				Thebarton  SA  5031
-				AU
-
-00-1C-32   (hex)		Telian Corporation
-001C32     (base 16)		Telian Corporation
-				4FL. Namjeon Bldg. 53-3 Haandong
-				Kwangmyungsi  Kyoungkido  423060
-				KR
-
-00-1C-2B   (hex)		Alertme.com Limited
-001C2B     (base 16)		Alertme.com Limited
-				30 Station Road
-				Cambridge  Cambridgeshire  CB1 2RE
-				GB
-
-00-1C-77   (hex)		Prodys
-001C77     (base 16)		Prodys
-				C/Trigo 54 Pol. Ind. Polvoranca
-				Leganes  MADRID  28914
-				ES
-
-00-1C-6F   (hex)		Emfit Ltd
-001C6F     (base 16)		Emfit Ltd
-				Konttisentie 8 B
-				Vaajakoski    40800
-				FI
-
-00-1C-49   (hex)		Zoltan Technology Inc.
-001C49     (base 16)		Zoltan Technology Inc.
-				4F, No.30, Wunsi St.
-				Jhubei  Hsinchu  302
-				TW
-
-00-1C-63   (hex)		TRUEN
-001C63     (base 16)		TRUEN
-				4F SAMWON BLDG., 451-7
-				SEOUL    137-818
-				KR
-
-00-1B-DF   (hex)		Iskra Sistemi d.d.
-001BDF     (base 16)		Iskra Sistemi d.d.
-				Stegne 21
-				Ljubljana  Slovenia  1000
-				SI
-
-00-1B-D9   (hex)		Edgewater Wireless Systems Inc
-001BD9     (base 16)		Edgewater Wireless Systems Inc
-				50 HInes Road Suite 200
-				Ottawa  Ontario  K2K-2M5
-				CA
-
-00-1B-C7   (hex)		StarVedia Technology Inc.
-001BC7     (base 16)		StarVedia Technology Inc.
-				3F, No. 247, Done Sec. 1, Guangming 6th Rd.
-				Jhubei  Hsin-Chu County  302
-				TW
-
-00-1B-EC   (hex)		Netio Technologies Co., Ltd
-001BEC     (base 16)		Netio Technologies Co., Ltd
-				4F-1, No. 582, Rueiguang Rd., Neihu District
-				Taipei    11492
-				TW
-
-00-1C-09   (hex)		SAE Electronic Co.,Ltd.
-001C09     (base 16)		SAE Electronic Co.,Ltd.
-				23/F,Ying Long Zhan Ye Building,
-				Shenzhen  Guang Dong  518040
-				CN
-
-00-1C-0C   (hex)		TANITA Corporation
-001C0C     (base 16)		TANITA Corporation
-				1-14-2,Maeno-cho
-				Tokyo    174-8630
-				JP
-
-00-1B-A6   (hex)		intotech inc.
-001BA6     (base 16)		intotech inc.
-				 13F DMC R&D Center E3-2 Building Land Development District Sangam-Dong
-				Mapogu  Seoul  121-270
-				KR
-
-00-1B-A4   (hex)		S.A.E Afikim
-001BA4     (base 16)		S.A.E Afikim
-				Kibutz Afikim
-				Kibutz Afikim    15148
-				IL
-
-00-1B-B4   (hex)		Airvod Limited
-001BB4     (base 16)		Airvod Limited
-				Heather House
-				Sandyford Ind Est  Dublin 18  D18
-				IE
-
-00-1B-B6   (hex)		Bird Electronic Corp.
-001BB6     (base 16)		Bird Electronic Corp.
-				30303 Aurora Road
-				Solon  Ohio  44139
-				US
-
-00-1B-E8   (hex)		Ultratronik GmbH
-001BE8     (base 16)		Ultratronik GmbH
-				Dornierstr. 9
-				Gilching    822205
-				DE
-
-00-1B-E1   (hex)		ViaLogy
-001BE1     (base 16)		ViaLogy
-				2400 Lincoln Ave
-				Altadena  CA  91001
-				US
-
-00-1B-93   (hex)		JC Decaux SA DNT
-001B93     (base 16)		JC Decaux SA DNT
-				21 rue claude Bernard
-				MAUREPAS    78310
-				FR
-
-00-1B-9B   (hex)		Hose-McCann Communications
-001B9B     (base 16)		Hose-McCann Communications
-				1241 West Newport Center Drive
-				Deerfield Beach  FL  33442
-				US
-
-00-1B-9C   (hex)		SATEL sp. z o.o.
-001B9C     (base 16)		SATEL sp. z o.o.
-				Schuberta 79
-				Gdansk  pomorskie  80-172
-				PL
-
-00-1B-92   (hex)		l-acoustics
-001B92     (base 16)		l-acoustics
-				parc de la fontaine de jouvence
-				marcoussis  essonne  91462
-				FR
-
-00-1B-8E   (hex)		Hulu Sweden AB
-001B8E     (base 16)		Hulu Sweden AB
-				Box 12328, 10228
-				Kista  Stockholm  164 40
-				SE
-
-00-1B-45   (hex)		ABB AS, Division Automation Products
-001B45     (base 16)		ABB AS, Division Automation Products
-				Bergerveien 12
-				Billingstad    NO-1375
-				NO
-
-00-1B-3F   (hex)		ProCurve Networking by HP
-001B3F     (base 16)		ProCurve Networking by HP
-				60 Alexandra Terrace
-				    118502
-				SG
-
-00-1B-41   (hex)		General Infinity Co.,Ltd.
-001B41     (base 16)		General Infinity Co.,Ltd.
-				3F,No.169, Xing-ai Rd,
-				Taipei    114
-				TW
-
-00-1B-50   (hex)		Nizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)
-001B50     (base 16)		Nizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)
-				174, Gagarina Avenue
-				Nizhny Novgorod  Russia  603950
-				RU
-
-00-1B-47   (hex)		Futarque A/S
-001B47     (base 16)		Futarque A/S
-				Aagade 15B
-				Aalborg    9000
-				DK
-
-00-1B-6C   (hex)		LookX Digital Media BV
-001B6C     (base 16)		LookX Digital Media BV
-				Roekenveldweg 1
-				Brunssum  Limburg  6446DK
-				NL
-
-00-1B-6B   (hex)		Swyx Solutions AG
-001B6B     (base 16)		Swyx Solutions AG
-				Joseph-von-Fraunhofer-straße 13a
-				Dortmund    44227
-				DE
-
-00-1B-69   (hex)		Equaline Corporation
-001B69     (base 16)		Equaline Corporation
-				9F, No. 234, Section 4, Cheng-De Road,
-				  Taipei Hsien  25162
-				TW
-
-00-1B-76   (hex)		Ripcode, Inc.
-001B76     (base 16)		Ripcode, Inc.
-				1130 E. Arapaho Road
-				Richardson  TX  75081
-				US
-
-00-1B-70   (hex)		IRI Ubiteq, INC.
-001B70     (base 16)		IRI Ubiteq, INC.
-				Shinjuku-Nomura Bldg. 47F,
-				Shinjuku-ku  Tokyo  163-0547
-				JP
-
-00-1B-68   (hex)		Modnnet Co., Ltd
-001B68     (base 16)		Modnnet Co., Ltd
-				2139 Daemyung-Dong DIP main B/D Room#505, Namgu
-				Daegu  Kyungsang Bookdo  705-701
-				KR
-
-00-1B-62   (hex)		JHT Optoelectronics Co.,Ltd.
-001B62     (base 16)		JHT Optoelectronics Co.,Ltd.
-				Hetian Industrial Park 2rd,Houjie Town, Donguan,
-				Dongguan  Guangdong  523945
-				CN
-
-00-1B-8A   (hex)		2M Electronic A/S
-001B8A     (base 16)		2M Electronic A/S
-				Malervej 10
-				Taastrup    2630
-				DK
-
-00-1B-80   (hex)		LORD Corporation
-001B80     (base 16)		LORD Corporation
-				2000 West Grandview Blvd
-				Erie  Pa  16509
-				US
-
-00-1B-3E   (hex)		Curtis, Inc.
-001B3E     (base 16)		Curtis, Inc.
-				2405 Annapolis Lane
-				Minneapolis  MN  55441
-				US
-
-00-1B-37   (hex)		Computec Oy
-001B37     (base 16)		Computec Oy
-				Juholankatu 8
-				Kouvola  Kymi  45200
-				FI
-
-00-1B-07   (hex)		Mendocino Software
-001B07     (base 16)		Mendocino Software
-				47001 Benecia St.
-				Fremont  CA  94538
-				US
-
-00-1B-08   (hex)		Danfoss Drives A/S
-001B08     (base 16)		Danfoss Drives A/S
-				Ulsnaes 1
-				Graasten  6300  
-				DK
-
-00-1B-01   (hex)		Applied Radio Technologies
-001B01     (base 16)		Applied Radio Technologies
-				1124 South Service Road West
-				Oakville  Ontario  L6L 5T7
-				CA
-
-00-1B-02   (hex)		ED Co.Ltd
-001B02     (base 16)		ED Co.Ltd
-				517-15 SangDaeWon-Dong
-				SeongNam-City  GyeongGi-Do  462-806
-				KR
-
-00-1A-FC   (hex)		ModusLink Corporation
-001AFC     (base 16)		ModusLink Corporation
-				2905 Prestonwood Drive
-				Plano  Texas  75093
-				US
-
-00-1B-10   (hex)		ShenZhen Kang Hui Technology Co.,ltd
-001B10     (base 16)		ShenZhen Kang Hui Technology Co.,ltd
-				China  GuangDong
-				ShenZhen  GuangDong  518109
-				CN
-
-00-1B-0B   (hex)		Phidgets Inc.
-001B0B     (base 16)		Phidgets Inc.
-				2715A 16A Street N.W.
-				Calgary  Alberta  T2M 3R7
-				CA
-
-00-1B-0C   (hex)		Cisco Systems, Inc
-001B0C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-E0   (hex)		Mythology Tech Express Inc.
-001AE0     (base 16)		Mythology Tech Express Inc.
-				2F, No.10, Lane 235, Bao Chiao road,
-				Taipei    231
-				TW
-
-00-1A-E2   (hex)		Cisco Systems, Inc
-001AE2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-D7   (hex)		Christie Digital Systems, Inc.
-001AD7     (base 16)		Christie Digital Systems, Inc.
-				809 Wellington Street North
-				Kitchener  Ontario  N2G 4Y7
-				CA
-
-00-1B-23   (hex)		SimpleComTools
-001B23     (base 16)		SimpleComTools
-				598 Indian Trail Rd S.
-				Indian Trail  NC  28079
-				US
-
-00-1A-F6   (hex)		Woven Systems, Inc.
-001AF6     (base 16)		Woven Systems, Inc.
-				2455 Augustine Drive
-				Santa Clara  CA  95054
-				US
-
-00-1A-F9   (hex)		AeroVIronment (AV Inc)
-001AF9     (base 16)		AeroVIronment (AV Inc)
-				4685 Industrial St
-				Simi Valley  CA  93063
-				US
-
-00-1B-30   (hex)		Solitech Inc.
-001B30     (base 16)		Solitech Inc.
-				1838 Main Street
-				Stevensville  MD  21666
-				US
-
-00-1B-18   (hex)		Tsuken Electric Ind. Co.,Ltd
-001B18     (base 16)		Tsuken Electric Ind. Co.,Ltd
-				3-9 Akedouri Izumi-ku
-				Sendai City  Miyagi  981-3206
-				JP
-
-00-1A-E7   (hex)		Aztek Networks, Inc.
-001AE7     (base 16)		Aztek Networks, Inc.
-				2477 55th St. #202
-				Boulder  CO  80301
-				US
-
-00-1A-95   (hex)		Hisense Mobile Communications Technoligy Co.,Ltd.
-001A95     (base 16)		Hisense Mobile Communications Technoligy Co.,Ltd.
-				11,JiangXi Road,
-				QingDao  ShanDong  266071
-				CN
-
-00-1A-81   (hex)		Zelax
-001A81     (base 16)		Zelax
-				2nd buid., 1B, Zavodskaya st.,
-				Moscow    124681
-				RU
-
-00-1A-87   (hex)		Canhold International Limited
-001A87     (base 16)		Canhold International Limited
-				Flat 4, 13/F., Block 4, Tai Ping Industrial Centre
-				    00852
-				HK
-
-00-1A-88   (hex)		Venergy,Co,Ltd
-001A88     (base 16)		Venergy,Co,Ltd
-				West 6th Floor,M-8 Building Maqueling Zone,
-				shenzhen  guangdong  518000
-				CN
-
-00-1A-C1   (hex)		3Com Ltd
-001AC1     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-1A-BB   (hex)		Fontal Technology Incorporation
-001ABB     (base 16)		Fontal Technology Incorporation
-				Rm.522, Bldg. 52, 195, Sec. 4, ChungHsing Rd., Chutung
-				Hsinchu    310
-				TW
-
-00-1A-BD   (hex)		Impatica Inc.
-001ABD     (base 16)		Impatica Inc.
-				205-1725 St. Laurent Blvd.
-				Ottawa  ON  K1G 3V4
-				CA
-
-00-1A-AE   (hex)		Savant Systems LLC
-001AAE     (base 16)		Savant Systems LLC
-				45 Perseverance Way
-				Hyannis  Massachusetts  02601
-				US
-
-00-1A-CD   (hex)		Tidel Engineering LP
-001ACD     (base 16)		Tidel Engineering LP
-				2025 W Belt Line Road Suite 114
-				Carrollton  TX  75019
-				US
-
-00-1A-C9   (hex)		SUZUKEN CO.,LTD
-001AC9     (base 16)		SUZUKEN CO.,LTD
-				SUZUKEN TOMEI BLDG.
-				NAGOYA-SI  AICHI-KEN  465-0045
-				JP
-
-00-1A-79   (hex)		TELECOMUNICATION TECHNOLOGIES LTD.
-001A79     (base 16)		TELECOMUNICATION TECHNOLOGIES LTD.
-				4D ZHUKOVA BLV.
-				ODESSA    65121
-				UA
-
-00-1A-AA   (hex)		Analogic Corp.
-001AAA     (base 16)		Analogic Corp.
-				8 Centennial Drive
-				Peabody  MA  01960
-				US
-
-00-1A-8B   (hex)		CHUNIL ELECTRIC IND., CO.
-001A8B     (base 16)		CHUNIL ELECTRIC IND., CO.
-				308,ByuckSan Digital Valley,132-7,Gamjeon-Dong,Sasang-Gu
-				Busan  GyeongSangNamDo  617-800
-				KR
-
-00-1A-8D   (hex)		AVECS Bergen GmbH
-001A8D     (base 16)		AVECS Bergen GmbH
-				Billrothstraße 11 a
-				Bergen auf Rügen  M/V  18528
-				DE
-
-00-1A-B4   (hex)		FFEI Ltd.
-001AB4     (base 16)		FFEI Ltd.
-				Graphics House
-				Hemel Hempstead  Hertfordshire  HP2 7SU
-				GB
-
-00-1A-B5   (hex)		Home Network System
-001AB5     (base 16)		Home Network System
-				107, Hyundai I-Vally
-				Seongnam-si  Gyeonggi-do  462-714
-				KR
-
-00-1A-A4   (hex)		Future University-Hakodate
-001AA4     (base 16)		Future University-Hakodate
-				116-2 Kamedanakano-cho
-				Hakodate  Hokkaido  041-8655
-				JP
-
-00-1A-9F   (hex)		A-Link Ltd
-001A9F     (base 16)		A-Link Ltd
-				Kylavainiontie 20
-				Espoo    FI-02760
-				FI
-
-00-1A-74   (hex)		Procare International Co
-001A74     (base 16)		Procare International Co
-				5F, No.88, Jhouzih Street, Neihu District
-				Taipei    114
-				TW
-
-00-1A-BE   (hex)		COMPUTER HI-TECH INC.
-001ABE     (base 16)		COMPUTER HI-TECH INC.
-				HigashiUeno3-18-7
-				Taitoku  Tokyo  110-0015
-				JP
-
-00-1A-19   (hex)		Computer Engineering Limited
-001A19     (base 16)		Computer Engineering Limited
-				PO Box 493
-				Auckland  AK  2340
-				NZ
-
-00-1A-18   (hex)		Advanced Simulation Technology inc.
-001A18     (base 16)		Advanced Simulation Technology inc.
-				500A Huntmar Park Drive
-				Herndon  VA  20170
-				US
-
-00-1A-58   (hex)		CCV Deutschland GmbH - Celectronic eHealth Div.
-001A58     (base 16)		CCV Deutschland GmbH - Celectronic eHealth Div.
-				Gertraudenstrasse 18
-				Berlin    D-10178
-				DE
-
-00-1A-5E   (hex)		Thincom Technology Co.,Ltd
-001A5E     (base 16)		Thincom Technology Co.,Ltd
-				17F-3, No.398, Huanbei Rd.,
-				Zhongli City  Taoyuan Contry  320
-				TW
-
-00-1A-5C   (hex)		Euchner GmbH+Co. KG
-001A5C     (base 16)		Euchner GmbH+Co. KG
-				Kohlhammerstraße 16
-				Leinfelden-Echterdingen  BW  70771
-				DE
-
-00-1A-5B   (hex)		NetCare Service Co., Ltd.
-001A5B     (base 16)		NetCare Service Co., Ltd.
-				5-13-16 Shimizu, Asahi-ku
-				Osaka    535-0021
-				JP
-
-00-1A-24   (hex)		Galaxy Telecom Technologies Ltd
-001A24     (base 16)		Galaxy Telecom Technologies Ltd
-				No.25, The 1st Gaoxin Road
-				Xi'an City  Shannxi  710075
-				CN
-
-00-1A-20   (hex)		CMOTECH Co. Ltd.
-001A20     (base 16)		CMOTECH Co. Ltd.
-				5F Etronix Bldg. 17-10
-				Youngdungpo-Gu  Seoul  150-874
-				KR
-
-00-1A-4E   (hex)		NTI AG / LinMot
-001A4E     (base 16)		NTI AG / LinMot
-				Haerdlistrasse 15
-				Spreitenbach  AG  8957
-				CH
-
-00-1A-52   (hex)		Meshlinx Wireless Inc.
-001A52     (base 16)		Meshlinx Wireless Inc.
-				1410 G Avenue, Suite T
-				Plano  Texas  75074
-				US
-
-00-1A-13   (hex)		Wanlida Group Co., LTD
-001A13     (base 16)		Wanlida Group Co., LTD
-				Jiahe Road No.618
-				Xiamen  Fujian  361006
-				CN
-
-00-1A-0F   (hex)		Sistemas Avanzados de Control, S.A.
-001A0F     (base 16)		Sistemas Avanzados de Control, S.A.
-				calle Colquide 6
-				Las Rozas  Madrid  28230
-				ES
-
-00-1A-43   (hex)		Logical Link Communications
-001A43     (base 16)		Logical Link Communications
-				1909 Central Drive Suite 205
-				Bedford  TX  76021
-				US
-
-00-1A-47   (hex)		Agami Systems, Inc.
-001A47     (base 16)		Agami Systems, Inc.
-				1269 Innsbruck Drive
-				Sunnyvale  California  94089
-				US
-
-00-1A-2D   (hex)		The Navvo Group
-001A2D     (base 16)		The Navvo Group
-				4400 Baker Road
-				Minnetonka  MN  55343
-				US
-
-00-1A-2F   (hex)		Cisco Systems, Inc
-001A2F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-A9   (hex)		Cisco Systems, Inc
-0019A9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-AE   (hex)		Hopling Technologies b.v.
-0019AE     (base 16)		Hopling Technologies b.v.
-				Camerastraat 10
-				Almere  Flevoland  1322 BC
-				NL
-
-00-19-AF   (hex)		Rigol Technologies, Inc.
-0019AF     (base 16)		Rigol Technologies, Inc.
-				No. 156 Cai He Village, Sha He Town
-				Beijing    102206
-				CN
-
-00-19-DE   (hex)		MOBITEK
-0019DE     (base 16)		MOBITEK
-				5F,No.60,Lane 321,Yang-Kwang Street
-				Taipei    114
-				US
-
-00-19-E5   (hex)		Lynx Studio Technology, Inc.
-0019E5     (base 16)		Lynx Studio Technology, Inc.
-				1540 Barton Rd # 268
-				Redlands  CA  92373
-				US
-
-00-19-DB   (hex)		MICRO-STAR INTERNATIONAL CO., LTD.
-0019DB     (base 16)		MICRO-STAR INTERNATIONAL CO., LTD.
-				NO. 69, LI-DE ST.
-				JUNG-HE CITY  TAIPEI HSIEN  235
-				TW
-
-00-1A-03   (hex)		Angel Electronics Co., Ltd.
-001A03     (base 16)		Angel Electronics Co., Ltd.
-				17, Lane 134, Shou Shan Road, Tai Shan,
-				Taipei    243
-				TW
-
-00-19-F9   (hex)		TDK-Lambda
-0019F9     (base 16)		TDK-Lambda
-				405 Essex Road
-				Neptune  NJ  07753
-				US
-
-00-19-CE   (hex)		Progressive Gaming International
-0019CE     (base 16)		Progressive Gaming International
-				920 Pilot Road
-				Las Vegas  NV  89119
-				US
-
-00-19-BD   (hex)		New Media Life
-0019BD     (base 16)		New Media Life
-				Hea Ju Bild, 5F, 837-7, Yeoksam-dong
-				Kangnam-gu  Seoul  135-080
-				KR
-
-00-19-F2   (hex)		Teradyne K.K.
-0019F2     (base 16)		Teradyne K.K.
-				272-13, Heisei, Takaono
-				Kikuchi-gun  Kumamoto  869-1232
-				JP
-
-00-19-A7   (hex)		ITU-T
-0019A7     (base 16)		ITU-T
-				Place des Nations
-				Geneva 20    CH-1211
-				CH
-
-00-19-9F   (hex)		DKT A/S
-00199F     (base 16)		DKT A/S
-				Fanoevej 6
-				Kr. Saaby    DK-4060
-				DK
-
-00-19-8D   (hex)		Ocean Optics, Inc.
-00198D     (base 16)		Ocean Optics, Inc.
-				830 Douglas Ave
-				Dunedin  FL  34698
-				US
-
-00-19-82   (hex)		SmarDTV
-001982     (base 16)		SmarDTV
-				Route de Genève 22
-				Cheseaux    CH-1033 
-				CH
-
-00-19-85   (hex)		IT Watchdogs, Inc
-001985     (base 16)		IT Watchdogs, Inc
-				12885 Research, Suite 210B
-				Austin  TX  78750
-				US
-
-00-19-51   (hex)		NETCONS, s.r.o.
-001951     (base 16)		NETCONS, s.r.o.
-				Stara Vajnorska 37
-				Bratislava  Slovakia  831 04
-				SK
-
-00-19-57   (hex)		Saafnet Canada Inc.
-001957     (base 16)		Saafnet Canada Inc.
-				107-1089 East Kent Ave (N)
-				Vancouver  BC  V5X 4V9
-				CA
-
-00-19-58   (hex)		Bluetooth SIG, Inc.
-001958     (base 16)		Bluetooth SIG, Inc.
-				5209 Lake Washington Blvd NE
-				Kirkland  WA  98033
-				US
-
-00-19-56   (hex)		Cisco Systems, Inc
-001956     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-6B   (hex)		Danpex Corporation
-00196B     (base 16)		Danpex Corporation
-				2114 Ringwood Avenue
-				San Jose  California  95131
-				US
-
-00-19-3D   (hex)		GMC Guardian Mobility Corp.
-00193D     (base 16)		GMC Guardian Mobility Corp.
-				Suite 200
-				Ottawa  ON  K2E 7Y8
-				CA
-
-00-19-86   (hex)		Cheng Hongjian
-001986     (base 16)		Cheng Hongjian
-				Rm.2305B.Sege Plaza,Huaqiang North Rd.,
-				Shenzhen  Guangdong  518057
-				US
-
-00-19-9E   (hex)		Nifty
-00199E     (base 16)		Nifty
-				miwa4-2-22-105
-				  Nagano  3800803
-				JP
-
-00-19-6A   (hex)		MikroM GmbH
-00196A     (base 16)		MikroM GmbH
-				Dovestraße 1
-				Berlin    10587
-				DE
-
-00-18-FF   (hex)		PowerQuattro Co.
-0018FF     (base 16)		PowerQuattro Co.
-				János u. 175.
-				Budapest    H-1161
-				HU
-
-00-18-F4   (hex)		EO TECHNICS Co., Ltd.
-0018F4     (base 16)		EO TECHNICS Co., Ltd.
-				91, Dongpyeon-ro
-				Anyang  Kyeonggi-Do  431-803
-				KR
-
-00-18-FC   (hex)		Altec Electronic AG
-0018FC     (base 16)		Altec Electronic AG
-				Lenggenbachstrasse 3
-				Fahrweid  Zürich  CH-8951
-				CH
-
-00-18-F6   (hex)		Thomson Telecom Belgium
-0018F6     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				Edegem  Antwerp  B-2650
-				BE
-
-00-18-F5   (hex)		Shenzhen Streaming Video Technology Company Limited
-0018F5     (base 16)		Shenzhen Streaming Video Technology Company Limited
-				5/F, Block 3, Software Part No.1, Keji Middle 2 Road,
-				Shenzhen  GaungDong  518057
-				CN
-
-00-18-F9   (hex)		VVOND, Inc.
-0018F9     (base 16)		VVOND, Inc.
-				3000 Bridge Parkway
-				Redwood City  CA  94065
-				US
-
-00-19-3B   (hex)		LigoWave
-00193B     (base 16)		LigoWave
-				138 Mountain Brook Drive
-				Canton  GA  30115
-				US
-
-00-19-35   (hex)		DUERR DENTAL AG
-001935     (base 16)		DUERR DENTAL AG
-				Hoepfigheimer Strasse 17
-				Bietigheim-Bissingen  Baden-Wuerttemberg  74321
-				DE
-
-00-19-10   (hex)		Knick Elektronische Messgeraete GmbH & Co. KG
-001910     (base 16)		Knick Elektronische Messgeraete GmbH & Co. KG
-				Beuckestraße 22
-				Berlin    14163
-				DE
-
-00-19-13   (hex)		Chuang-Yi Network Equipment Co.Ltd.
-001913     (base 16)		Chuang-Yi Network Equipment Co.Ltd.
-				238 TianMuShan Rd., West Lake district
-				HangZhou  ZheJiang  310000
-				CN
-
-00-18-FA   (hex)		Yushin Precision Equipment Co.,Ltd.
-0018FA     (base 16)		Yushin Precision Equipment Co.,Ltd.
-				11-260 KOGAHONMACHI
-				KYOTO    612-8492 JAP
-				JP
-
-00-18-EA   (hex)		Alltec GmbH
-0018EA     (base 16)		Alltec GmbH
-				An der Trave 27-31
-				Selmsdorf  Mecklenburg-Vorpommern  23923
-				DE
-
-00-18-E8   (hex)		Hacetron Corporation
-0018E8     (base 16)		Hacetron Corporation
-				No. 542,
-				Yang-Mei,  Tao-Yuan,  326
-				TW
-
-00-19-14   (hex)		Winix Co., Ltd
-001914     (base 16)		Winix Co., Ltd
-				363 Angade Bldg., Yangjae-dong
-				Seoul    137-898
-				KR
-
-00-19-06   (hex)		Cisco Systems, Inc
-001906     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-01   (hex)		F1MEDIA
-001901     (base 16)		F1MEDIA
-				610, Keumkang Hightech ¥±, 138-1 Sangdaewon-Dong, Jungwon-Gu
-				Seongnam-Si  Gyeonggi-Do  462-707
-				KR
-
-00-19-31   (hex)		Balluff GmbH
-001931     (base 16)		Balluff GmbH
-				Schurwaldstraße 9
-				Neuhausen  BW  73765
-				DE
-
-00-18-E3   (hex)		Visualgate Systems, Inc.
-0018E3     (base 16)		Visualgate Systems, Inc.
-				64 Bakersfield Street
-				Toronto  Ontario  M3J 2W7
-				CA
-
-00-18-9F   (hex)		Lenntek Corporation
-00189F     (base 16)		Lenntek Corporation
-				4F, 125 GuangMing 3rd. Road
-				Jhu Bei  Hsin Chu  302
-				TW
-
-00-18-99   (hex)		ShenZhen jieshun Science&Technology Industry CO,LTD.
-001899     (base 16)		ShenZhen jieshun Science&Technology Industry CO,LTD.
-				China GuangDong state Shenzhen City Futian section NO17. Meilin Road
-				Shenzhen  GuangDong  518049
-				CN
-
-00-18-6D   (hex)		Zhenjiang Sapphire Electronic Industry CO.
-00186D     (base 16)		Zhenjiang Sapphire Electronic Industry CO.
-				Wei San Road,Dingmao Develop Area
-				zhenjiang  jiangsu  212009
-				CN
-
-00-18-6F   (hex)		Setha Industria Eletronica LTDA
-00186F     (base 16)		Setha Industria Eletronica LTDA
-				Rua Alvaro de Macedo 134
-				Rio de Janeiro  RJ  21.250-620
-				BR
-
-00-18-75   (hex)		AnaCise Testnology Pte Ltd
-001875     (base 16)		AnaCise Testnology Pte Ltd
-				3 Bishan Place #02-06
-				    579838
-				SG
-
-00-18-C1   (hex)		Almitec Informática e Comércio
-0018C1     (base 16)		Almitec Informática e Comércio
-				461, Francisco de Morais St.
-				São Paulo    04714-010
-				BR
-
-00-18-C4   (hex)		Raba Technologies LLC
-0018C4     (base 16)		Raba Technologies LLC
-				8830 Stanford Blvd Suite 205
-				Columbia  Maryland  21045
-				US
-
-00-18-C9   (hex)		EOps Technology Limited
-0018C9     (base 16)		EOps Technology Limited
-				Room 2001, Fairmont House,
-				Hong Kong    
-				HK
-
-00-18-D8   (hex)		ARCH METER Corporation
-0018D8     (base 16)		ARCH METER Corporation
-				4F, No.3-2, Industry E. Rd.
-				Hsinchu    
-				TW
-
-00-18-D9   (hex)		Santosha Internatonal, Inc
-0018D9     (base 16)		Santosha Internatonal, Inc
-				3843 S. Bristol St. #242
-				Santa Ana  CA  92704
-				US
-
-00-18-CF   (hex)		Baldor Electric Company
-0018CF     (base 16)		Baldor Electric Company
-				600 S. Zero St.
-				Fort Smith  AR  72901
-				US
-
-00-18-BC   (hex)		ZAO NVP Bolid
-0018BC     (base 16)		ZAO NVP Bolid
-				Pionerskaya str., 4
-				Korolyov  Moscow region  141070
-				RU
-
-00-18-B7   (hex)		D3 LED, LLC
-0018B7     (base 16)		D3 LED, LLC
-				380 Mountain Rd
-				Union City  NJ  07087
-				US
-
-00-18-95   (hex)		Hansun Technologies Inc.
-001895     (base 16)		Hansun Technologies Inc.
-				Room 301, Building 103, Wangjingkejiyuan, Chaoyang District
-				Beijing    100102
-				CN
-
-00-18-83   (hex)		FORMOSA21 INC.
-001883     (base 16)		FORMOSA21 INC.
-				8F-6, NO.351, CHUNG SHAN RD., SEC.2
-				TAIPEI    235
-				TW
-
-00-18-8E   (hex)		Ekahau, Inc.
-00188E     (base 16)		Ekahau, Inc.
-				Hiilikatu 3
-				HELSINKI  UUSIMAA  00180
-				FI
-
-00-18-14   (hex)		Mitutoyo Corporation
-001814     (base 16)		Mitutoyo Corporation
-				20-1, Sakado 1-chome, Takatsu-ku,
-				Kawasaki-shi    213-8533
-				JP
-
-00-18-17   (hex)		D. E. Shaw Research, LLC
-001817     (base 16)		D. E. Shaw Research, LLC
-				120 W. 45th St., 33rd Floor
-				New York  NY  10036
-				US
-
-00-18-11   (hex)		Neuros Technology International, LLC.
-001811     (base 16)		Neuros Technology International, LLC.
-				650 W Lake St
-				Chicago  IL  60661
-				US
-
-00-17-DE   (hex)		Advantage Six Ltd
-0017DE     (base 16)		Advantage Six Ltd
-				208 George St
-				OLDHAM  Lancs  OL2 8DR
-				GB
-
-00-17-D7   (hex)		ION Geophysical Corporation Inc.
-0017D7     (base 16)		ION Geophysical Corporation Inc.
-				850 Dorothy
-				Richardson  Texas  75081
-				US
-
-00-18-37   (hex)		Universal ABIT Co., Ltd.
-001837     (base 16)		Universal ABIT Co., Ltd.
-				7F, No. 323 Yangguang St.,
-				Neihu  Taipei  114
-				TW
-
-00-18-22   (hex)		CEC TELECOM CO.,LTD.
-001822     (base 16)		CEC TELECOM CO.,LTD.
-				10thFL.CEC Building,6 Zhongguancun South Street
-				Beijing    100086
-				CN
-
-00-18-20   (hex)		w5networks
-001820     (base 16)		w5networks
-				48389 Fremont Blvd
-				Fremont  CA  94538
-				US
-
-00-18-5D   (hex)		TAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.
-00185D     (base 16)		TAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.
-				No. 23, The Third Industrial Park of Xia Village,
-				Shenzhen City,  Guangdong,  815106
-				CN
-
-00-18-5E   (hex)		Nexterm Inc.
-00185E     (base 16)		Nexterm Inc.
-				1-12-3, Shibaura, Minato-ku,
-				Tokyo    105-0023
-				JP
-
-00-18-28   (hex)		e2v technologies (UK) ltd.
-001828     (base 16)		e2v technologies (UK) ltd.
-				106 Waterhouse Lane
-				Chelmsford  Essex  CM1 2QU
-				GB
-
-00-18-35   (hex)		Thoratec / ITC
-001835     (base 16)		Thoratec / ITC
-				2656 Patton Road
-				Roseville  MN  55113
-				US
-
-00-18-01   (hex)		Actiontec Electronics, Inc
-001801     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-17-F3   (hex)		Harris Corporation
-0017F3     (base 16)		Harris Corporation
-				1025 West NASA Blvd
-				Melbourne  FL  32919
-				US
-
-00-18-4A   (hex)		Catcher, Inc.
-00184A     (base 16)		Catcher, Inc.
-				5864 Owens Ave.
-				Carlsbad  CA  92008
-				US
-
-00-18-4B   (hex)		Las Vegas Gaming, Inc.
-00184B     (base 16)		Las Vegas Gaming, Inc.
-				4000 West Ali Baba Lane, Suite D
-				Las Vegas  Nevada  89118
-				US
-
-00-18-0E   (hex)		Avega Systems
-00180E     (base 16)		Avega Systems
-				59 Victoria Street
-				McMahons Point  NSW  2060
-				AU
-
-00-17-BC   (hex)		Touchtunes Music Corporation
-0017BC     (base 16)		Touchtunes Music Corporation
-				3 Place du Commerce
-				Montréal  Québec  H3E 1H7
-				CA
-
-00-17-C1   (hex)		CM Precision Technology LTD.
-0017C1     (base 16)		CM Precision Technology LTD.
-				2 Fl, No. 177, Chien-E Road, Chung-Ho City
-				Taipei Hsien    235
-				TW
-
-00-17-B2   (hex)		SK Telesys
-0017B2     (base 16)		SK Telesys
-				4F, Kyungdong bldg, 4-4, Sunae-Dong, Pundang-Gu
-				Sungnam-City  Kunggi-Do  463-825
-				KR
-
-00-17-B1   (hex)		ACIST Medical Systems, Inc.
-0017B1     (base 16)		ACIST Medical Systems, Inc.
-				7450 Flying Cloud Drive
-				Eden Prairie  MN  55344
-				US
-
-00-17-A3   (hex)		MIX s.r.l.
-0017A3     (base 16)		MIX s.r.l.
-				Via Caldera, 21
-				Milan    I-20153
-				IT
-
-00-17-A6   (hex)		YOSIN ELECTRONICS CO., LTD.
-0017A6     (base 16)		YOSIN ELECTRONICS CO., LTD.
-				6F-2, No.17, Lan 174,Shin-Ming Road
-				Taipei    114
-				TW
-
-00-17-9C   (hex)		DEPRAG SCHULZ GMBH u. CO.
-00179C     (base 16)		DEPRAG SCHULZ GMBH u. CO.
-				Kurfürstenringg 12.18
-				Amberg  Bayern  92224
-				DE
-
-00-17-96   (hex)		Rittmeyer AG
-001796     (base 16)		Rittmeyer AG
-				Inwilerriedstrasse 57
-				Baar  ZG  CH-6341
-				CH
-
-00-17-E1   (hex)		DACOS Technologies Co., Ltd.
-0017E1     (base 16)		DACOS Technologies Co., Ltd.
-				104 Daeryung-Technotown III 448
-				SEOUL  Keumcheon-Gu  153-772
-				KR
-
-00-17-E0   (hex)		Cisco Systems, Inc
-0017E0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-17-D2   (hex)		THINLINX PTY LTD
-0017D2     (base 16)		THINLINX PTY LTD
-				31 Carwoola Crescent
-				Mooloolaba  Queensland  4557
-				AU
-
-00-17-85   (hex)		Sparr Electronics Ltd
-001785     (base 16)		Sparr Electronics Ltd
-				Sparr Electronics Ltd
-				Bangalore  Karnataka  560054
-				IN
-
-00-17-75   (hex)		TTE Germany GmbH
-001775     (base 16)		TTE Germany GmbH
-				Hermann-Schwer-Straße 3
-				Villingen-Schwenningen  Baden-Württemberg  78048
-				DE
-
-00-17-B8   (hex)		NOVATRON CO., LTD.
-0017B8     (base 16)		NOVATRON CO., LTD.
-				#601 polaris bldg., 15-3 jeongja-dong, bundang-gu
-				Seong Nam  Gyeonggi Do  463-811
-				KR
-
-00-17-BB   (hex)		Syrinx Industrial Electronics
-0017BB     (base 16)		Syrinx Industrial Electronics
-				De Factorij 13
-				Zwaag  Noord Holland  1689 AK
-				NL
-
-00-17-7C   (hex)		Smartlink Network Systems Limited
-00177C     (base 16)		Smartlink Network Systems Limited
-				L-7, Verna Electronic city
-				Nagoa  Goa  403 722
-				IN
-
-00-17-81   (hex)		Greystone Data System, Inc.
-001781     (base 16)		Greystone Data System, Inc.
-				40800 Encycopedia Circle
-				Fremont  CA  94538
-				US
-
-00-17-8D   (hex)		Checkpoint Systems, Inc.
-00178D     (base 16)		Checkpoint Systems, Inc.
-				101 Wolf Drive
-				Thorofare  NJ  08086
-				US
-
-00-17-8E   (hex)		Gunnebo Cash Automation AB
-00178E     (base 16)		Gunnebo Cash Automation AB
-				Fabriksgatan 10
-				Göteborg    402 27
-				SE
-
-00-17-C7   (hex)		MARA Systems Consulting AB
-0017C7     (base 16)		MARA Systems Consulting AB
-				Instrumentvägen 45
-				Stockholm    126 53
-				SE
-
-00-17-5D   (hex)		Dongseo system.
-00175D     (base 16)		Dongseo system.
-				974-21 Mansu-dong Namdong-gu
-				Incheon  In-Cheon  405-865
-				KR
-
-00-17-50   (hex)		GSI Group, MicroE Systems
-001750     (base 16)		GSI Group, MicroE Systems
-				8 Erie Drive
-				Natick  MA  01760
-				US
-
-00-17-55   (hex)		GE Security
-001755     (base 16)		GE Security
-				12345 SW Leveton Drive
-				Tualatin  OR  97062
-				US
-
-00-17-1D   (hex)		DIGIT
-00171D     (base 16)		DIGIT
-				Via Pasteur , 1/3
-				S.Pietro Mosezzo  NOVARA  28060
-				IT
-
-00-17-18   (hex)		Vansco Electronics Oy
-001718     (base 16)		Vansco Electronics Oy
-				Tiilenlyojankatu 5
-				FORSSA    30101
-				FI
-
-00-17-19   (hex)		Audiocodes USA, Inc
-001719     (base 16)		Audiocodes USA, Inc
-				27 World's Fair Drive
-				Somerset  NJ  08873
-				US
-
-00-17-76   (hex)		Meso Scale Diagnostics, LLC
-001776     (base 16)		Meso Scale Diagnostics, LLC
-				9238 Gaither Rd.
-				Gaithersburg  MD  20877
-				US
-
-00-17-79   (hex)		QuickTel
-001779     (base 16)		QuickTel
-				Cornishe El-Nile, Maasara
-				Cairo    11743
-				EG
-
-00-17-67   (hex)		Earforce AS
-001767     (base 16)		Earforce AS
-				P.O.Box 4
-				Bryne    4349
-				NO
-
-00-17-39   (hex)		Bright Headphone Electronics Company
-001739     (base 16)		Bright Headphone Electronics Company
-				8F, 109, Li De Street
-				Chung Ho City  Taipei County  235
-				TW
-
-00-17-2C   (hex)		TAEJIN INFOTECH
-00172C     (base 16)		TAEJIN INFOTECH
-				6F Woolim e-Biz Center, 170-5
-				Seoul    152-769
-				KR
-
-00-17-51   (hex)		Online Corporation
-001751     (base 16)		Online Corporation
-				22F-3, No. 398, Huan Pei Road,
-				Chung Li  Taoyuan  320
-				TW
-
-00-17-4C   (hex)		Millipore
-00174C     (base 16)		Millipore
-				1, rue Jacques Monod
-				Guyancourt    78280
-				FR
-
-00-17-45   (hex)		INNOTZ CO., Ltd
-001745     (base 16)		INNOTZ CO., Ltd
-				14F, Prime Center 546-4 Guui-Dong Kwanggin-Gu
-				Seoul  Seoul  
-				KR
-
-00-17-48   (hex)		Neokoros Brasil Ltda
-001748     (base 16)		Neokoros Brasil Ltda
-				Rua 86, numero 501, Setor Sul
-				Goiania  Goias  74083-330
-				BR
-
-00-17-63   (hex)		Essentia S.p.A.
-001763     (base 16)		Essentia S.p.A.
-				Via G.B. Vico, 29
-				Cella (RE)  Reggio Emilia  42040
-				IT
-
-00-17-01   (hex)		KDE, Inc.
-001701     (base 16)		KDE, Inc.
-				KDE TOWN, 42-7, Mangwol-dong
-				Hanam  Gyeonggi-do  465-150
-				KR
-
-00-16-F6   (hex)		Video Products Group
-0016F6     (base 16)		Video Products Group
-				1600 Emerson Avenue
-				Oxnard  California  93033
-				US
-
-00-16-EE   (hex)		Royaldigital Inc.
-0016EE     (base 16)		Royaldigital Inc.
-				8F., No.308, Sec.1, Neihu Rd.
-				Taipei City    114
-				TW
-
-00-16-DE   (hex)		FAST Inc
-0016DE     (base 16)		FAST Inc
-				905 Honeyspot Rd
-				Stratford  CT  06615
-				US
-
-00-16-DA   (hex)		Futronic Technology Co. Ltd.
-0016DA     (base 16)		Futronic Technology Co. Ltd.
-				Room 1016A, 10/F., Profit Ind. Bldg.,
-				Kwai Chung    00000
-				HK
-
-00-16-D4   (hex)		Compal Communications, Inc.
-0016D4     (base 16)		Compal Communications, Inc.
-				7th, FL, No. 319, Sec. 4, Pa-Teh rd.
-				Taipei    886
-				TW
-
-00-16-D7   (hex)		Sunways AG
-0016D7     (base 16)		Sunways AG
-				Macairestraße 3-5
-				Konstanz  Baden-Württemberg  78467
-				DE
-
-00-16-FF   (hex)		Wamin Optocomm Mfg Corp
-0016FF     (base 16)		Wamin Optocomm Mfg Corp
-				No. 239 Qiaohe Road
-				Zhonghe City  Taipei County  235
-				TW
-
-00-16-D1   (hex)		ZAT a.s.
-0016D1     (base 16)		ZAT a.s.
-				K Podlesi 541
-				Pribram VI    26180
-				CZ
-
-00-16-C5   (hex)		Shenzhen Xing Feng Industry Co.,Ltd
-0016C5     (base 16)		Shenzhen Xing Feng Industry Co.,Ltd
-				Floor 1 - 4, Block 25, Hongtian Jinyuan Industrial,
-				Shenzhen  GuangDong  86
-				CN
-
-00-16-CC   (hex)		Xcute Mobile Corp.
-0016CC     (base 16)		Xcute Mobile Corp.
-				3F. No.25, Ally15, Lane 120, Sec.1, Neihu Rd.
-				Taipei    114
-				TW
-
-00-17-17   (hex)		Leica Geosystems AG
-001717     (base 16)		Leica Geosystems AG
-				Heinrich Wild Strasse
-				Heerbrugg  St. Gallen  CH-9435
-				CH
-
-00-17-15   (hex)		Qstik
-001715     (base 16)		Qstik
-				Cartel Business Estate
-				Harlow  Essex  CM20 2TT
-				GB
-
-00-17-0E   (hex)		Cisco Systems, Inc
-00170E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-17-05   (hex)		Methode Electronics
-001705     (base 16)		Methode Electronics
-				7401 W. Wilson
-				Chicago  IL  60706
-				US
-
-00-16-AA   (hex)		Kei Communication Technology Inc.
-0016AA     (base 16)		Kei Communication Technology Inc.
-				8-BAN CHUOU
-				KOBE  HYOGO  650-0024
-				JP
-
-00-16-A8   (hex)		CWT CO., LTD.
-0016A8     (base 16)		CWT CO., LTD.
-				10F No. 74 Sec. 1 Chung-Hua Rd.
-				Taipei    108
-				TW
-
-00-16-A6   (hex)		Dovado FZ-LLC
-0016A6     (base 16)		Dovado FZ-LLC
-				Al-Thuraya Tower 1, office 504
-				Dubai    
-				AE
-
-00-16-ED   (hex)		Utility, Inc
-0016ED     (base 16)		Utility, Inc
-				250 E Ponce de Leon Ave Suite 700
-				Decatur  GA  30030
-				US
-
-00-16-C7   (hex)		Cisco Systems, Inc
-0016C7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-16-71   (hex)		Symphox Information Co.
-001671     (base 16)		Symphox Information Co.
-				15F, No. 51, Sec. 3, Minsheng E. Road
-				Taipei City    104
-				TW
-
-00-16-69   (hex)		MRV Communication (Networks) LTD
-001669     (base 16)		MRV Communication (Networks) LTD
-				P.O Box 614
-				Yokneam    20692
-				US
-
-00-16-68   (hex)		Eishin Electronics
-001668     (base 16)		Eishin Electronics
-				Nishiku Miyashita 1-19
-				Kobe City  Hyogo Prefecture  651-2146
-				JP
-
-00-16-40   (hex)		Asmobile Communication Inc.
-001640     (base 16)		Asmobile Communication Inc.
-				No.11 Lane 120, Li-Te Rd., Peitou 112, Taipei, Taiwan, R.O.C
-				Taipei    112
-				TW
-
-00-16-3C   (hex)		Rebox B.V.
-00163C     (base 16)		Rebox B.V.
-				Hendrik Figeeweg 1X
-				Haarlem  Noord-Holland  2031 BJ
-				NL
-
-00-16-7D   (hex)		Sky-Line Information Co., Ltd.
-00167D     (base 16)		Sky-Line Information Co., Ltd.
-				8F.,No.38,Sihyuan Rd.,
-				Sinihuang  Taipei  242
-				TW
-
-00-16-77   (hex)		Bihl + Wiedemann GmbH
-001677     (base 16)		Bihl + Wiedemann GmbH
-				Flosswoerthstr 41
-				Mannheim    68199
-				DE
-
-00-16-55   (hex)		FUHO TECHNOLOGY Co., LTD
-001655     (base 16)		FUHO TECHNOLOGY Co., LTD
-				No. 30, Lane 726, Jinma Rd, Sec. 3
-				Chang Hua    500
-				TW
-
-00-16-46   (hex)		Cisco Systems, Inc
-001646     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-16-48   (hex)		SSD Company Limited
-001648     (base 16)		SSD Company Limited
-				3-3-4 Higashiyagura
-				Kusatsu-city  Shiga  525-0054
-				JP
-
-00-16-72   (hex)		Zenway enterprise ltd
-001672     (base 16)		Zenway enterprise ltd
-				6F., No.20, Lane 150, Jhongsing Rd., Sijhih City
-				Taipei    886
-				TW
-
-00-16-5A   (hex)		Harman Specialty Group
-00165A     (base 16)		Harman Specialty Group
-				3 Oak Park Drive
-				Bedford  MA  01730
-				US
-
-00-16-59   (hex)		Z.M.P. RADWAG
-001659     (base 16)		Z.M.P. RADWAG
-				Bracka 28 street
-				RADOM  Mazowieckie  26-600
-				PL
-
-00-16-A2   (hex)		CentraLite Systems, Inc.
-0016A2     (base 16)		CentraLite Systems, Inc.
-				6420 Wall Street
-				Mobile  AL  36695
-				US
-
-00-16-95   (hex)		AVC Technology (International) Limited
-001695     (base 16)		AVC Technology (International) Limited
-				6/F Enterprise Square III
-				Kowloon Bay    
-				HK
-
-00-15-D8   (hex)		Interlink Electronics
-0015D8     (base 16)		Interlink Electronics
-				546 Flynn Road
-				Camarillo  CA  93012
-				US
-
-00-15-D4   (hex)		Emitor AB
-0015D4     (base 16)		Emitor AB
-				Sjöviksbacken 14
-				Stockholm    117 43
-				SE
-
-00-15-D5   (hex)		NICEVT
-0015D5     (base 16)		NICEVT
-				Warshawskoe shosse 125
-				Moscow    117405
-				RU
-
-00-16-0C   (hex)		LPL  DEVELOPMENT S.A. DE C.V
-00160C     (base 16)		LPL  DEVELOPMENT S.A. DE C.V
-				LAGO GINEBRA 380 P3
-				  D.F.  11480
-				MX
-
-00-16-0B   (hex)		TVWorks LLC
-00160B     (base 16)		TVWorks LLC
-				Two Belvedere Place, #200
-				Mill Valley  CA  94941
-				US
-
-00-16-03   (hex)		COOLKSKY Co., LTD
-001603     (base 16)		COOLKSKY Co., LTD
-				Shingsung offcetel A511, 1588-1 Secho
-				  Seoul  137-070
-				KR
-
-00-15-EA   (hex)		Tellumat (Pty) Ltd
-0015EA     (base 16)		Tellumat (Pty) Ltd
-				64/74 White Road
-				Cape Town  Western Province  7945
-				ZA
-
-00-15-E2   (hex)		Dr.Ing. Herbert Knauer GmbH
-0015E2     (base 16)		Dr.Ing. Herbert Knauer GmbH
-				Hegauer Weg 38
-				Berlin    14163
-				DE
-
-00-15-E1   (hex)		Picochip Ltd
-0015E1     (base 16)		Picochip Ltd
-				Upper Borough Court
-				Bath    BA1 1RG
-				GB
-
-00-15-DF   (hex)		Clivet S.p.A.
-0015DF     (base 16)		Clivet S.p.A.
-				via Camp Lonc 25
-				Feltre  Belluno  32030
-				IT
-
-00-16-1D   (hex)		Innovative Wireless Technologies, Inc.
-00161D     (base 16)		Innovative Wireless Technologies, Inc.
-				1047 Vista Park Dr.
-				Forest  VA  24551
-				US
-
-00-16-11   (hex)		Altecon Srl
-001611     (base 16)		Altecon Srl
-				Via F.lli Cairoli, 17
-				Lissone  Milano  20035
-				IT
-
-00-16-09   (hex)		Unitech electronics co., ltd.
-001609     (base 16)		Unitech electronics co., ltd.
-				5F,No.136,Lane 235 ,Pao-chiao Rd.,
-				Hsin-Tien city  Taipei Hsien  231
-				TW
-
-00-15-F5   (hex)		Sustainable Energy Systems
-0015F5     (base 16)		Sustainable Energy Systems
-				#500, 609 14th Street NW
-				Calgary  Ab  T2T 1P3
-				CA
-
-00-15-F1   (hex)		KYLINK Communications Corp.
-0015F1     (base 16)		KYLINK Communications Corp.
-				8F-8, No. 351, Sec. 2, Zhongshan Rd., Zhonghe City
-				    23504
-				TW
-
-00-16-23   (hex)		Interval Media
-001623     (base 16)		Interval Media
-				3200 Ash Street
-				Palo Alto  CA  94306
-				US
-
-00-16-19   (hex)		Lancelan Technologies S.L.
-001619     (base 16)		Lancelan Technologies S.L.
-				C/Angel Guimera 208 bis
-				Terrassa  Barcelona  08223
-				ES
-
-00-16-25   (hex)		Impinj, Inc.
-001625     (base 16)		Impinj, Inc.
-				400 Fairview Ave N, Suite 1200
-				Seattle  WA  98109
-				US
-
-00-15-86   (hex)		Xiamen Overseas Chinese Electronic Co., Ltd.
-001586     (base 16)		Xiamen Overseas Chinese Electronic Co., Ltd.
-				No. 22, Huli Street,
-				Xiamen  Fujian  361006
-				CN
-
-00-15-7E   (hex)		Weidmüller Interface GmbH & Co. KG
-00157E     (base 16)		Weidmüller Interface GmbH & Co. KG
-				Klingenbergstraße 16
-				Detmold    32758
-				DE
-
-00-15-80   (hex)		U-WAY CORPORATION
-001580     (base 16)		U-WAY CORPORATION
-				3F-2, NO. 125, LANE 235, PAO-CHIAO
-				HSINTIEN CITY  TAIPEI HSIEN  231
-				TW
-
-00-15-7C   (hex)		Dave Networks, Inc.
-00157C     (base 16)		Dave Networks, Inc.
-				2151 O'tool Avenue
-				San Jose  CA  95131
-				US
-
-00-15-7F   (hex)		ChuanG International Holding CO.,LTD.
-00157F     (base 16)		ChuanG International Holding CO.,LTD.
-				1F, NO.12, Alley 1, Lane 125, Guolian Street 4Lirn, Wuhan Village
-				Taoyuan  Longtan  325
-				US
-
-00-15-B3   (hex)		Caretech AB
-0015B3     (base 16)		Caretech AB
-				Nyborgsvägen 197
-				Kalix    95291
-				SE
-
-00-15-AA   (hex)		Rextechnik International Co.,
-0015AA     (base 16)		Rextechnik International Co.,
-				Room 5-3, No.51, Section 2, Keelung Road
-				Taipei    110
-				TW
-
-00-15-A6   (hex)		Digital Electronics Products Ltd.
-0015A6     (base 16)		Digital Electronics Products Ltd.
-				Room 301, 3 rd Floor, Tsun Yip Centre
-				Kwun Tong    852
-				HK
-
-00-15-9D   (hex)		Tripp Lite 
-00159D     (base 16)		Tripp Lite 
-				1111 W 35th Street
-				Chicago  IL  60609
-				US
-
-00-15-D6   (hex)		OSLiNK Sp. z o.o.
-0015D6     (base 16)		OSLiNK Sp. z o.o.
-				ul. Marsa 27
-				Gdansk    80299
-				PL
-
-00-15-92   (hex)		Facom UK Ltd (Melksham)
-001592     (base 16)		Facom UK Ltd (Melksham)
-				Lancaster House
-				Melksham  Wiltshire  SN104FB
-				US
-
-00-15-8B   (hex)		Park Air Systems Ltd
-00158B     (base 16)		Park Air Systems Ltd
-				Northfields
-				Peterborough    PE6 8UE
-				GB
-
-00-15-76   (hex)		LABiTec - Labor Biomedical Technologies GmbH
-001576     (base 16)		LABiTec - Labor Biomedical Technologies GmbH
-				An der Strusbek 6
-				    
-				DE
-
-00-15-BE   (hex)		Iqua Ltd.
-0015BE     (base 16)		Iqua Ltd.
-				Hyvoninkatu 1
-				Salo  Varsinais-Suomi  24240
-				US
-
-00-15-C7   (hex)		Cisco Systems, Inc
-0015C7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-5E   (hex)		Morgan Stanley
-00155E     (base 16)		Morgan Stanley
-				750 7th Avenue
-				New York  NY  10019
-				US
-
-00-15-0B   (hex)		SAGE INFOTECH LTD.
-00150B     (base 16)		SAGE INFOTECH LTD.
-				3F, No30, INDUSTRY E. 9TH RD.,SCIENCE-BASED
-				HSIN-CHU  TAIWAN  300
-				TW
-
-00-15-07   (hex)		Renaissance Learning Inc
-001507     (base 16)		Renaissance Learning Inc
-				2911 Peach Street
-				Wisconsin Rapids  Wisconsin  54494
-				US
-
-00-15-08   (hex)		Global Target Enterprise Inc
-001508     (base 16)		Global Target Enterprise Inc
-				5F, No. 186, Sec. 2, Chung-Hsing Rd.,
-				Hsin Tien,  Taipei county  231
-				TW
-
-00-15-02   (hex)		BETA tech
-001502     (base 16)		BETA tech
-				15 rue d'apollo
-				L'UNION    31240
-				FR
-
-00-14-FD   (hex)		Thecus Technology Corp.
-0014FD     (base 16)		Thecus Technology Corp.
-				15F.,No. 79,Sec. 1,Sintai 5th RD.,
-				Sijhih City  Taipei County  221
-				TW
-
-00-14-FC   (hex)		Extandon, Inc.
-0014FC     (base 16)		Extandon, Inc.
-				39350 Civic Center Drive Ste. 160
-				Fremont  CA  94538
-				US
-
-00-14-F8   (hex)		Scientific Atlanta
-0014F8     (base 16)		Scientific Atlanta
-				5030 Sugarloaf Parkway
-				Lawrenceville  Ga  30042
-				US
-
-00-14-F7   (hex)		CREVIS Co., LTD
-0014F7     (base 16)		CREVIS Co., LTD
-				157-1, Hagal-Dong
-				Youngin  Kyungki  446930
-				KR
-
-00-15-15   (hex)		Leipold+Co.GmbH
-001515     (base 16)		Leipold+Co.GmbH
-				Kreuzwiese 12
-				Rockenhausen  RLP  D-67806
-				DE
-
-00-15-0F   (hex)		mingjong
-00150F     (base 16)		mingjong
-				8F,NO.1,LANE 16,SZE CHUAN ROAD,SEC.2,PANCHIAO CITY.
-				TAIPEI    220
-				TW
-
-00-15-5C   (hex)		Dresser Wayne
-00155C     (base 16)		Dresser Wayne
-				3814 Jarrett Way
-				Austin  Texas  78728
-				US
-
-00-15-59   (hex)		Securaplane Technologies, Inc.
-001559     (base 16)		Securaplane Technologies, Inc.
-				10800 N. Mavinee Dr.
-				Tucson  AZ  85737
-				US
-
-00-15-57   (hex)		Olivetti
-001557     (base 16)		Olivetti
-				Via Jervis 77
-				Ivrea  Torino  10015
-				IT
-
-00-15-54   (hex)		Atalum Wireless S.A.
-001554     (base 16)		Atalum Wireless S.A.
-				C/ Orellana 5, 1º I
-				Madrid    28004
-				ES
-
-00-15-3B   (hex)		EMH metering GmbH & Co. KG
-00153B     (base 16)		EMH metering GmbH & Co. KG
-				Neu- Galliner Weg 1
-				  Mecklenburg-Vorpommern  
-				DE
-
-00-15-37   (hex)		Ventus Networks
-001537     (base 16)		Ventus Networks
-				800 Connecticut Ave
-				Norwalk  CT  06854
-				US
-
-00-15-33   (hex)		NADAM.CO.,LTD
-001533     (base 16)		NADAM.CO.,LTD
-				#91-3 Wangrim-Li
-				Hwaseong  Gyeonggi  445-895
-				KR
-
-00-15-34   (hex)		A Beltrónica-Companhia de Comunicações, Lda
-001534     (base 16)		A Beltrónica-Companhia de Comunicações, Lda
-				Rua Dr. José Baptista de Sousa, 27
-				Lisbon    1549-002 Lis
-				PT
-
-00-15-3F   (hex)		Alcatel Alenia Space Italia
-00153F     (base 16)		Alcatel Alenia Space Italia
-				Strada Padana Superiore 290
-				Vimodrone  MI  20090
-				IT
-
-00-15-18   (hex)		Shenzhen 10MOONS Technology Development CO.,Ltd
-001518     (base 16)		Shenzhen 10MOONS Technology Development CO.,Ltd
-				Add:3F,Huaxing building, QiaoXiang road,
-				shenzhen  guangdong  518053
-				CN
-
-00-15-26   (hex)		Remote Technologies Inc
-001526     (base 16)		Remote Technologies Inc
-				 5775 12th Ave E, Suite 180
-				Shakopee  MN  55379
-				US
-
-00-14-F1   (hex)		Cisco Systems, Inc
-0014F1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-14-EA   (hex)		S Digm Inc. (Safe Paradigm Inc.)
-0014EA     (base 16)		S Digm Inc. (Safe Paradigm Inc.)
-				5F, Shin-an Bldg. 89-8,
-				Songpa-Gu  Seoul  138-201
-				KR
-
-00-14-E5   (hex)		Alticast
-0014E5     (base 16)		Alticast
-				16th floor, Nara Bldg, 1328-3
-				  Seoul  137-070
-				KR
-
-00-14-9F   (hex)		System and Chips, Inc.
-00149F     (base 16)		System and Chips, Inc.
-				4F,No. 1, Lane 50, NanKang Road, Section 3,
-				Taipei    115
-				TW
-
-00-14-B3   (hex)		CoreStar International Corp
-0014B3     (base 16)		CoreStar International Corp
-				1044 Sandy Hill Rd
-				Irwin  PA  15642
-				US
-
-00-14-B1   (hex)		Axell Wireless Limited
-0014B1     (base 16)		Axell Wireless Limited
-				Aerial HOuse
-				Chesham  Buckinghamshire  HP5 2QD
-				GB
-
-00-14-E0   (hex)		LET'S Corporation
-0014E0     (base 16)		LET'S Corporation
-				Bancho Bldg. 4F, 2-18-20 Marunouchi, Naka
-				Nagoya  Aichi  460-0002
-				JP
-
-00-14-E2   (hex)		datacom systems inc.
-0014E2     (base 16)		datacom systems inc.
-				9 adler drive
-				east syracuse  n.y.  13057
-				US
-
-00-14-E4   (hex)		infinias, LLC
-0014E4     (base 16)		infinias, LLC
-				857 West Carmel Drive
-				Carmel  IN  46032
-				US
-
-00-14-CC   (hex)		Zetec, Inc.
-0014CC     (base 16)		Zetec, Inc.
-				8226 Bracken Place SE
-				Snoqualmie  WA  98065
-				US
-
-00-14-CB   (hex)		LifeSync Corporation
-0014CB     (base 16)		LifeSync Corporation
-				1 E Broward Boulevard, Suite 1701
-				Fort Lauderdale  Florida  33301
-				US
-
-00-14-C6   (hex)		Quixant Ltd
-0014C6     (base 16)		Quixant Ltd
-				61A Mount Pleasant
-				England  Kent  TN16 3TP
-				GB
-
-00-14-98   (hex)		Viking Design Technology
-001498     (base 16)		Viking Design Technology
-				2F, No.2, Lane 42,
-				Taipei    111
-				TW
-
-00-14-96   (hex)		Phonic Corp.
-001496     (base 16)		Phonic Corp.
-				12thFl, 59 Tung Hsing Rd
-				Taipei    110
-				TW
-
-00-14-93   (hex)		Systimax Solutions
-001493     (base 16)		Systimax Solutions
-				1300 E Lookout Drive
-				Richardson  Texas  75082
-				US
-
-00-14-DB   (hex)		Elma Trenew Electronic GmbH
-0014DB     (base 16)		Elma Trenew Electronic GmbH
-				Stuttgarter Straße 11
-				Pforzheim    75179
-				DE
-
-00-14-3A   (hex)		RAYTALK INTERNATIONAL SRL
-00143A     (base 16)		RAYTALK INTERNATIONAL SRL
-				St. Marecchia 79
-				  Verucchio (RN)  47826
-				IT
-
-00-14-36   (hex)		Qwerty Elektronik AB
-001436     (base 16)		Qwerty Elektronik AB
-				Gryt 44
-				Ösmo    610 60
-				SE
-
-00-14-6B   (hex)		Anagran, Inc.
-00146B     (base 16)		Anagran, Inc.
-				580 North Pastoria Av
-				Sunnyvale  CA  94085
-				US
-
-00-14-61   (hex)		CORONA CORPORATION
-001461     (base 16)		CORONA CORPORATION
-				7-7, HIGASHI-SHINBO
-				SANJO-SHI  NIIGATA  955-8510
-				JP
-
-00-14-62   (hex)		Digiwell Technology, inc
-001462     (base 16)		Digiwell Technology, inc
-				4F, No.1, Prosperity 1st Road
-				  Hsinchu Science Park  300
-				TW
-
-00-14-63   (hex)		IDCS N.V.
-001463     (base 16)		IDCS N.V.
-				Hellebeemden 9
-				Hasselt  Limburg  3500
-				BE
-
-00-14-65   (hex)		Novo Nordisk A/S
-001465     (base 16)		Novo Nordisk A/S
-				Novo Alle
-				Bagsvaerd    2880
-				DK
-
-00-14-74   (hex)		K40 Electronics
-001474     (base 16)		K40 Electronics
-				600 Tollgate Rd. Unit A
-				Elgin  IL  60123
-				US
-
-00-14-6F   (hex)		Kohler Co
-00146F     (base 16)		Kohler Co
-				444 Highland Drive
-				Kohler  WI  53044
-				US
-
-00-14-66   (hex)		Kleinhenz Elektronik GmbH
-001466     (base 16)		Kleinhenz Elektronik GmbH
-				Greinerberg 14
-				Munich    81371
-				DE
-
-00-14-7F   (hex)		Thomson Telecom Belgium
-00147F     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				Edegem  Antwerp  B-2650
-				BE
-
-00-14-75   (hex)		Wiline Networks, Inc.
-001475     (base 16)		Wiline Networks, Inc.
-				741 Alexander Rd
-				Princeton  NJ  08540
-				US
-
-00-14-86   (hex)		Echo Digital Audio Corporation
-001486     (base 16)		Echo Digital Audio Corporation
-				402 E Carrillo St
-				Santa Barbara  CA  93101
-				US
-
-00-14-82   (hex)		Aurora Networks
-001482     (base 16)		Aurora Networks
-				5400 Betsy Ross Drive
-				Santa Clara  CA  95054
-				US
-
-00-14-55   (hex)		Coder Electronics Corporation
-001455     (base 16)		Coder Electronics Corporation
-				Takeda Bldg, 1-30-6 Shirasagi,
-				Nakano-ku  Tokyo  165-0035
-				JP
-
-00-14-4E   (hex)		SRISA
-00144E     (base 16)		SRISA
-				36/1, Nakhimovskiy pr-t
-				  Moscow  117218
-				RU
-
-00-14-8D   (hex)		Cubic Defense Simulation Systems
-00148D     (base 16)		Cubic Defense Simulation Systems
-				2001 W. Oakridge Road
-				Orlando  FL  32809
-				US
-
-00-14-3D   (hex)		Aevoe Inc.
-00143D     (base 16)		Aevoe Inc.
-				11F, No 23, Keelung Road
-				Taipei  HsinYi District  110
-				TW
-
-00-14-15   (hex)		Intec Automation inc.
-001415     (base 16)		Intec Automation inc.
-				2751 Arbutus Rd.
-				Victoria  British Columbia  V8N 5X7
-				CA
-
-00-14-10   (hex)		Suzhou Keda Technology CO.,Ltd
-001410     (base 16)		Suzhou Keda Technology CO.,Ltd
-				131,Jinshan Road
-				Suzhou  JiangSu  215011
-				CN
-
-00-14-17   (hex)		RSE Informations Technologie GmbH
-001417     (base 16)		RSE Informations Technologie GmbH
-				Silberbergstrasse 9
-				Wolfsberg  Kärnten  9400
-				AT
-
-00-14-33   (hex)		Empower Technologies(Canada) Inc.
-001433     (base 16)		Empower Technologies(Canada) Inc.
-				Unit 405 - 5600 Parkwood Way,
-				Richmond  British Columbia  V6V 2M2
-				CA
-
-00-14-34   (hex)		Keri Systems, Inc
-001434     (base 16)		Keri Systems, Inc
-				2305 Bering Dr
-				San Jose  CA  95131
-				US
-
-00-13-DE   (hex)		Adapt4, LLC
-0013DE     (base 16)		Adapt4, LLC
-				1050 W Nasa Blvd,
-				Melbourne  FL  32901
-				US
-
-00-13-DD   (hex)		Abbott Diagnostics
-0013DD     (base 16)		Abbott Diagnostics
-				5440 Patrick Henry Drive
-				Santa Clara  CA  95054
-				US
-
-00-13-D7   (hex)		SPIDCOM Technologies SA
-0013D7     (base 16)		SPIDCOM Technologies SA
-				137 avenue du General LECLERC
-				BOURG LA REINE    92340
-				FR
-
-00-13-C7   (hex)		IONOS Co.,Ltd.
-0013C7     (base 16)		IONOS Co.,Ltd.
-				1-36-18 Miyasaka
-				Setagaya-ku  Tokyo  156-0051
-				JP
-
-00-14-23   (hex)		J-S Co. NEUROCOM
-001423     (base 16)		J-S Co. NEUROCOM
-				Energeticheskii proezd, 6
-				Moscow    111250
-				RU
-
-00-14-25   (hex)		Galactic Computing Corp.
-001425     (base 16)		Galactic Computing Corp.
-				1/F
-				Chai Wan District    
-				HK
-
-00-14-19   (hex)		SIDSA
-001419     (base 16)		SIDSA
-				PTM - TORRES QUEVEDO 1
-				TRES CANTOS  MADRID  28760
-				ES
-
-00-13-EE   (hex)		JBX Designs Inc.
-0013EE     (base 16)		JBX Designs Inc.
-				PO Box 970158
-				Boca Raton  FL  33497
-				US
-
-00-13-E5   (hex)		TENOSYS, INC.
-0013E5     (base 16)		TENOSYS, INC.
-				Seojin B/D, 1564-1, Seocho-dong,
-				  Seoul  137-070
-				KR
-
-00-13-E2   (hex)		GeoVision Inc.
-0013E2     (base 16)		GeoVision Inc.
-				9F.,No.246,Sec.1,
-				Taipei    114
-				TW
-
-00-14-02   (hex)		kk-electronic a/s
-001402     (base 16)		kk-electronic a/s
-				Cypresvej 6
-				Herning    7400
-				DK
-
-00-13-FF   (hex)		Dage-MTI of MC, Inc.
-0013FF     (base 16)		Dage-MTI of MC, Inc.
-				701 N. Roeske Ave.
-				Michigan City  IN  46360
-				US
-
-00-13-BC   (hex)		Artimi Ltd
-0013BC     (base 16)		Artimi Ltd
-				Betjeman House
-				Cambridge  Cambridgeshire  CB2 1LQ
-				GB
-
-00-14-08   (hex)		Eka Systems Inc.
-001408     (base 16)		Eka Systems Inc.
-				20251 Century Blvd
-				Germantown  MD  20874
-				US
-
-00-13-A7   (hex)		BATTELLE MEMORIAL INSTITUTE
-0013A7     (base 16)		BATTELLE MEMORIAL INSTITUTE
-				505 KING AVE
-				COLUMBUS  OHIO  43201
-				US
-
-00-13-A6   (hex)		Extricom Ltd
-0013A6     (base 16)		Extricom Ltd
-				Glil Yam
-				Herzlia    46905
-				IL
-
-00-13-A2   (hex)		MaxStream, Inc
-0013A2     (base 16)		MaxStream, Inc
-				355 South 520 West Suite 180
-				Lindon  Ut  84042
-				US
-
-00-13-9F   (hex)		Electronics Design Services, Co., Ltd.
-00139F     (base 16)		Electronics Design Services, Co., Ltd.
-				5-10-20 Tokumaru
-				Itabashi-ku  Tokyo  175-0083
-				JP
-
-00-13-A0   (hex)		ALGOSYSTEM Co., Ltd.
-0013A0     (base 16)		ALGOSYSTEM Co., Ltd.
-				656 kobirao mihara-cho
-				sakai  osaka  587-0021
-				JP
-
-00-13-9B   (hex)		ioIMAGE Ltd.
-00139B     (base 16)		ioIMAGE Ltd.
-				3 Maskit Street
-				Herzliya Pituach  IL  46733
-				IL
-
-00-13-96   (hex)		Acbel Polytech Inc.
-001396     (base 16)		Acbel Polytech Inc.
-				No.159,Sec.3, Tam-King Rd.,
-				Tamsui  Taipei  251
-				TW
-
-00-13-93   (hex)		Panta Systems, Inc.
-001393     (base 16)		Panta Systems, Inc.
-				20450 Stevens Creek Blvd.
-				Cupertino  California  95014
-				US
-
-00-13-8B   (hex)		Phantom Technologies LLC
-00138B     (base 16)		Phantom Technologies LLC
-				7825 Fay Avenue, Suite 200
-				La Jolla  CA  92037
-				US
-
-00-13-88   (hex)		WiMedia Alliance
-001388     (base 16)		WiMedia Alliance
-				2400 Camino Ramon
-				San Ramon  CA  94583
-				US
-
-00-13-6E   (hex)		Techmetro Corp.
-00136E     (base 16)		Techmetro Corp.
-				4F. Dongam B/D., 264-5, YangJae-Dong
-				Seoul    137-130
-				KR
-
-00-13-6D   (hex)		Tentaculus AB
-00136D     (base 16)		Tentaculus AB
-				Studiegangen 3
-				Ostersund  Jamtland  SE - 831 40
-				SE
-
-00-13-6A   (hex)		Hach Lange Sarl
-00136A     (base 16)		Hach Lange Sarl
-				6, route de Compois
-				VESENAZ  GENEVA  1222
-				CH
-
-00-13-B2   (hex)		Carallon Limited
-0013B2     (base 16)		Carallon Limited
-				Studio G20 Shepherds Building
-				  London  W14 0DA
-				GB
-
-00-13-AD   (hex)		Sendo Ltd
-0013AD     (base 16)		Sendo Ltd
-				Hatchford Brook
-				Birmingham  West Midlands  B26 3RZ
-				GB
-
-00-13-AA   (hex)		ALS  & TEC Ltd.
-0013AA     (base 16)		ALS  & TEC Ltd.
-				6 B. Kazachya str.
-				Saratov  Saratov region  410600
-				RU
-
-00-13-A4   (hex)		KeyEye Communications
-0013A4     (base 16)		KeyEye Communications
-				9785 Goethe
-				Sacramento  CA  95827
-				US
-
-00-13-4D   (hex)		Inepro BV
-00134D     (base 16)		Inepro BV
-				Pondweg 7
-				  Nieuw- Vennep  
-				NL
-
-00-13-4B   (hex)		ToGoldenNet Technology Inc.
-00134B     (base 16)		ToGoldenNet Technology Inc.
-				5F-1 No.25,Pu-ding.,
-				Hsin-Chu    300
-				TW
-
-00-13-84   (hex)		Advanced Motion Controls
-001384     (base 16)		Advanced Motion Controls
-				3805 Calle Tecate
-				Camarillo  California  93012
-				US
-
-00-13-7B   (hex)		Movon Corporation
-00137B     (base 16)		Movon Corporation
-				5th, Hyunjuk B/D
-				Seoul    135-092
-				KR
-
-00-13-53   (hex)		HYDAC Filtertechnik GMBH
-001353     (base 16)		HYDAC Filtertechnik GMBH
-				Industriegebiet
-				Sulzbach/Saar  Saarland  66280
-				DE
-
-00-13-63   (hex)		Verascape, Inc.
-001363     (base 16)		Verascape, Inc.
-				1101 31st St., Suite #190
-				Downers Grove  IL  60515
-				US
-
-00-13-03   (hex)		GateConnect
-001303     (base 16)		GateConnect
-				Eisenhutweg 69
-				12487 Berlin    12487
-				DE
-
-00-13-04   (hex)		Flaircomm Technologies Co. LTD
-001304     (base 16)		Flaircomm Technologies Co. LTD
-				2088 Huashan Road
-				Shanghai    200030
-				CN
-
-00-12-F9   (hex)		URYU SEISAKU, LTD.
-0012F9     (base 16)		URYU SEISAKU, LTD.
-				1-2-11
-				HIGASHINARI-KU  OSAKA  537-0002
-				JP
-
-00-12-F3   (hex)		connectBlue AB
-0012F3     (base 16)		connectBlue AB
-				Norra Vallgatan 64
-				Malmoe    SE-211 22
-				SE
-
-00-13-37   (hex)		Orient Power Home Network Ltd.
-001337     (base 16)		Orient Power Home Network Ltd.
-				307 Harbour Centre, Tower 1,
-				    
-				HK
-
-00-13-34   (hex)		Arkados, Inc.
-001334     (base 16)		Arkados, Inc.
-				948 US HWY 22
-				North Plainfield  NJ  07060
-				US
-
-00-13-32   (hex)		Beijing Topsec Network Security Technology Co., Ltd.
-001332     (base 16)		Beijing Topsec Network Security Technology Co., Ltd.
-				Huakong Tower
-				Haidian District  Beijing  100085
-				CN
-
-00-13-1F   (hex)		NxtPhase T&D, Corp.
-00131F     (base 16)		NxtPhase T&D, Corp.
-				3040 E. Broadway
-				Vancouver  BC  V5M 1Z4
-				CA
-
-00-12-DC   (hex)		SunCorp Industrial Limited
-0012DC     (base 16)		SunCorp Industrial Limited
-				No.68 Guowei Road,
-				Liantang Industrial District,  Shenzhen,  
-				CN
-
-00-12-FF   (hex)		Lely Industries N.V.
-0012FF     (base 16)		Lely Industries N.V.
-				Weverskade 110
-				Maassluis  Zuid-Holland  3147PA
-				NL
-
-00-13-3A   (hex)		VadaTech Inc.
-00133A     (base 16)		VadaTech Inc.
-				11540 S. Eastern Avenue
-				Henderson  Nevada  89052
-				US
-
-00-13-2A   (hex)		Sitronics Telecom Solutions
-00132A     (base 16)		Sitronics Telecom Solutions
-				Michelska 60
-				Prague  Prague 4 - Michle  140 00
-				CZ
-
-00-12-E5   (hex)		Time America, Inc.
-0012E5     (base 16)		Time America, Inc.
-				51 W. 3rd Street #310
-				Tempe  AZ  85281
-				US
-
-00-13-0E   (hex)		Focusrite Audio Engineering Limited
-00130E     (base 16)		Focusrite Audio Engineering Limited
-				19 Lincoln Road
-				High Wycombe  Bucks  HP12 3FX
-				GB
-
-00-13-09   (hex)		Ocean Broadband Networks
-001309     (base 16)		Ocean Broadband Networks
-				2078 Walsh Ave, Suite B
-				Santa Clara  California  95050
-				US
-
-00-13-19   (hex)		Cisco Systems, Inc
-001319     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-13-1C   (hex)		LiteTouch, Inc.
-00131C     (base 16)		LiteTouch, Inc.
-				3400 South West Temple
-				Salt Lake City  UT  84115
-				US
-
-00-13-4A   (hex)		Engim, Inc.
-00134A     (base 16)		Engim, Inc.
-				40 Nagog Park
-				Acton  MA  01720
-				US
-
-00-12-D7   (hex)		Invento Networks, Inc.
-0012D7     (base 16)		Invento Networks, Inc.
-				377 Simarano Drive
-				Marlborough  MA  01752
-				US
-
-00-12-C4   (hex)		Viseon, Inc.
-0012C4     (base 16)		Viseon, Inc.
-				8445 Freeport Parkway
-				Irving  Texas  75063
-				US
-
-00-12-94   (hex)		SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC
-001294     (base 16)		SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC
-				1000 Kamisukiawara,Showa-cho
-				Nakakoma-gun  Yamanashi  409-3883
-				JP
-
-00-12-96   (hex)		Addlogix
-001296     (base 16)		Addlogix
-				459 Wald
-				Irvine  CA  92618
-				US
-
-00-12-B3   (hex)		Advance Wireless Technology Corp.
-0012B3     (base 16)		Advance Wireless Technology Corp.
-				12F No. 27-6, Sec. 2, Chung Cheng East Road
-				Tamshui    251
-				TW
-
-00-12-B0   (hex)		Efore Oyj   (Plc)
-0012B0     (base 16)		Efore Oyj   (Plc)
-				Quartetto Business Park
-				Espoo    FI - 02600
-				FI
-
-00-12-7F   (hex)		Cisco Systems, Inc
-00127F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-12-A6   (hex)		Dolby Australia
-0012A6     (base 16)		Dolby Australia
-				Level 6
-				Surry Hills  NSW  2010
-				AU
-
-00-12-A4   (hex)		ThingMagic, LLC
-0012A4     (base 16)		ThingMagic, LLC
-				One Broadway
-				Cambridge  MA  02142
-				US
-
-00-12-A9   (hex)		3Com Ltd
-0012A9     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-12-D0   (hex)		Gossen-Metrawatt-GmbH
-0012D0     (base 16)		Gossen-Metrawatt-GmbH
-				Thomas-Mann-Straße 16-20
-				Nürnberg  Bavaria  90471
-				DE
-
-00-12-99   (hex)		Ktech Telecommunications Inc
-001299     (base 16)		Ktech Telecommunications Inc
-				21540 Prairie Street Unit B
-				Chatsworth  CA  91311
-				US
-
-00-12-8C   (hex)		Woodward Governor
-00128C     (base 16)		Woodward Governor
-				1000 E. Drake Road
-				Ft. Collins  CO  80525
-				US
-
-00-12-B8   (hex)		G2 Microsystems
-0012B8     (base 16)		G2 Microsystems
-				408 Euclid Ave
-				Oakland  CA  94610
-				US
-
-00-12-7B   (hex)		VIA Networking Technologies, Inc.
-00127B     (base 16)		VIA Networking Technologies, Inc.
-				8F,533, Chung-Cheng Road, Hsin-Tien
-				Taipei    231
-				TW
-
-00-12-80   (hex)		Cisco Systems, Inc
-001280     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-12-75   (hex)		Sentilla Corporation
-001275     (base 16)		Sentilla Corporation
-				201 Marshall Street
-				Redwood City  CA  94063
-				US
-
-00-12-76   (hex)		CG Power Systems Ireland Limited
-001276     (base 16)		CG Power Systems Ireland Limited
-				Herbert House., Harmony Row, 
-				Dublin    D2
-				IE
-
-00-12-71   (hex)		Measurement Computing Corp
-001271     (base 16)		Measurement Computing Corp
-				10 Commerce Way
-				Norton  MA  02766
-				US
-
-00-12-73   (hex)		Stoke Inc
-001273     (base 16)		Stoke Inc
-				2189 Leghorn Street
-				Mountain View  CA  94043
-				US
-
-00-12-69   (hex)		Value Electronics
-001269     (base 16)		Value Electronics
-				Dong-kwan B/D, 5F, 1566-2
-				seoul    137-874
-				KR
-
-00-12-50   (hex)		Tokyo Aircaft Instrument Co., Ltd.
-001250     (base 16)		Tokyo Aircaft Instrument Co., Ltd.
-				1-35-1, Izumi-Honcho
-				Komae-Shi  Tokyo  201-8555
-				JP
-
-00-12-52   (hex)		Citronix, LLC
-001252     (base 16)		Citronix, LLC
-				2214 South Watson Road
-				Arlington  Texas  76010
-				US
-
-00-12-40   (hex)		AMOI ELECTRONICS CO.,LTD
-001240     (base 16)		AMOI ELECTRONICS CO.,LTD
-				295 Lane,Zuchongzhi Road,Zhang jiang,
-				Shanghai    201203
-				CN
-
-00-12-2E   (hex)		Signal Technology - AISD
-00122E     (base 16)		Signal Technology - AISD
-				1820 Preston Park Blvd.
-				Plano  TX  75093
-				US
-
-00-12-64   (hex)		daum electronic gmbh
-001264     (base 16)		daum electronic gmbh
-				flugplatzstraße 100
-				FÃƒÂ¼rth  Bavaria  90768
-				DE
-
-00-12-61   (hex)		Adaptix, Inc
-001261     (base 16)		Adaptix, Inc
-				1407 116th Ave. NE
-				Bellevue  WA  98004
-				US
-
-00-12-60   (hex)		Stanton Magnetics,inc.
-001260     (base 16)		Stanton Magnetics,inc.
-				3000 SW 42nd Street
-				Hollywood  FL  33312
-				US
-
-00-12-31   (hex)		Motion Control Systems, Inc.
-001231     (base 16)		Motion Control Systems, Inc.
-				PO Box 115
-				New River  VA  24129
-				US
-
-00-12-4B   (hex)		Texas Instruments
-00124B     (base 16)		Texas Instruments
-				Gaustadalleen 21
-				Oslo    N-0349
-				NO
-
-00-12-4A   (hex)		Dedicated Devices, Inc.
-00124A     (base 16)		Dedicated Devices, Inc.
-				5680 E. Franklin Road
-				Nampa  Idaho  83687
-				US
-
-00-12-43   (hex)		Cisco Systems, Inc
-001243     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-D9   (hex)		TiVo
-0011D9     (base 16)		TiVo
-				2160 Gold Ave
-				Alviso  CA  95002-2160
-				US
-
-00-11-D2   (hex)		Perception Digital Ltd
-0011D2     (base 16)		Perception Digital Ltd
-				Flat A, 8/F, Shaw House
-				Clear Water Bay  NT  
-				HK
-
-00-11-CF   (hex)		Thrane & Thrane A/S
-0011CF     (base 16)		Thrane & Thrane A/S
-				Lundtoftegårdsvej 93D
-				Lyngby  København  2800
-				DK
-
-00-11-D4   (hex)		NetEnrich, Inc
-0011D4     (base 16)		NetEnrich, Inc
-				890 Hillview Ct.
-				Milpitas  CA  95035
-				US
-
-00-11-D5   (hex)		Hangzhou Sunyard System Engineering Co.,Ltd.
-0011D5     (base 16)		Hangzhou Sunyard System Engineering Co.,Ltd.
-				Sunyard Science & Technology Building Hi-Tech Software Park(Second Land Consolidation)
-				Hangzhou  Zhejiang  310053
-				CN
-
-00-11-F8   (hex)		AIRAYA Corp
-0011F8     (base 16)		AIRAYA Corp
-				637 Adair Court
-				Morgan Hill  CA  95037
-				US
-
-00-11-F4   (hex)		woori-net
-0011F4     (base 16)		woori-net
-				#508, Hankook Moolyu, 853-1 Dongchun-Dong
-				Yongin-Si  Kyungki-Do  449-843
-				KR
-
-00-11-F6   (hex)		Asia Pacific Microsystems , Inc.
-0011F6     (base 16)		Asia Pacific Microsystems , Inc.
-				No.2,R&D Road 6 ,Science-Based Industrial Park,
-				Hsinchu    300
-				TW
-
-00-11-F0   (hex)		Wideful Limited
-0011F0     (base 16)		Wideful Limited
-				F5, 3/F., Phase II, Superluck Industrial Centre, 
-				    
-				HK
-
-00-11-F1   (hex)		QinetiQ Ltd
-0011F1     (base 16)		QinetiQ Ltd
-				Room E601
-				Malvern  Worcestershire  WR14 3PS
-				GB
-
-00-11-ED   (hex)		802 Global
-0011ED     (base 16)		802 Global
-				Studio 11,Intec 2,Wade Road
-				Hampshire    RG24 BNE
-				GB
-
-00-12-11   (hex)		Protechna Herbst GmbH & Co. KG
-001211     (base 16)		Protechna Herbst GmbH & Co. KG
-				Otto Hahn Str. 26
-				Ottobrunn  Germany/Bavaria  85521
-				DE
-
-00-12-19   (hex)		General Datacomm LLC
-001219     (base 16)		General Datacomm LLC
-				353 Christian Street, Suite 4
-				Oxford  CT  06478
-				US
-
-00-12-16   (hex)		ICP Internet Communication Payment AG
-001216     (base 16)		ICP Internet Communication Payment AG
-				Wilhelm-Stein-Weg 24
-				Hamburg    D-22339
-				DE
-
-00-12-15   (hex)		iStor Networks, Inc.
-001215     (base 16)		iStor Networks, Inc.
-				7585 Irvine Center Drive
-				Irvine  CA  92618
-				US
-
-00-12-03   (hex)		ActivNetworks
-001203     (base 16)		ActivNetworks
-				BAT L - 1 rue de Terre Neuve
-				COURTABOEUF    91944
-				FR
-
-00-11-CC   (hex)		Guangzhou Jinpeng Group Co.,Ltd.
-0011CC     (base 16)		Guangzhou Jinpeng Group Co.,Ltd.
-				No.9 Shenzhou Road,Guangzhou Science City
-				Guangzhou  Guangdong  510663
-				CN
-
-00-11-C7   (hex)		Raymarine UK Ltd
-0011C7     (base 16)		Raymarine UK Ltd
-				Marine House
-				Fareham  Hampshire  PO15 5RJ
-				GB
-
-00-11-C9   (hex)		MTT Corporation
-0011C9     (base 16)		MTT Corporation
-				2-7-12
-				Nishi-ku  Kobe  651-2241
-				JP
-
-00-11-DB   (hex)		Land-Cellular Corporation
-0011DB     (base 16)		Land-Cellular Corporation
-				12054 Miramar Parkway
-				Miramar  FL  33025
-				US
-
-00-12-24   (hex)		NexQL Corporation
-001224     (base 16)		NexQL Corporation
-				12250 Inwood Road #6
-				Dallas  TX  75244
-				US
-
-00-11-BD   (hex)		Bombardier Transportation
-0011BD     (base 16)		Bombardier Transportation
-				1501 Lebanon Church Road
-				Pittsburgh  PA  15236
-				US
-
-00-11-AA   (hex)		Uniclass Technology, Co., LTD
-0011AA     (base 16)		Uniclass Technology, Co., LTD
-				4F, No. 98, Ming chuan Rd
-				Hsintien City  Taipei Hsien  231
-				TW
-
-00-11-79   (hex)		Singular Technology Co. Ltd.
-001179     (base 16)		Singular Technology Co. Ltd.
-				21F, No.37, Sec.2, San Min Rd.,
-				Taipei    220
-				TW
-
-00-11-8A   (hex)		Viewtran Technology Limited
-00118A     (base 16)		Viewtran Technology Limited
-				3/F, R2-A builiding, High Tech Industrial Park,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-11-84   (hex)		Humo Laboratory,Ltd.
-001184     (base 16)		Humo Laboratory,Ltd.
-				Nishiogi-Kita 5-19-11
-				Suginami-ku  Tokyo  167-0042
-				JP
-
-00-11-B1   (hex)		BlueExpert Technology Corp.
-0011B1     (base 16)		BlueExpert Technology Corp.
-				8F,No.16,Lane 77,Xing-Ai Rd,Nei-Hu District
-				Taipei    11494
-				TW
-
-00-11-A6   (hex)		Sypixx Networks
-0011A6     (base 16)		Sypixx Networks
-				108 Bank Street
-				Waterbury  CT  06702
-				US
-
-00-11-B5   (hex)		Shenzhen Powercom Co.,Ltd
-0011B5     (base 16)		Shenzhen Powercom Co.,Ltd
-				Floor 16,Tower B,Zhongyin Building,North Caitian Road,Futian District,Shenzhen,P.R.China
-				Shenzhen  Guangdong province  518028
-				CN
-
-00-11-BB   (hex)		Cisco Systems, Inc
-0011BB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-66   (hex)		Taelim Electronics Co., Ltd.
-001166     (base 16)		Taelim Electronics Co., Ltd.
-				196-5, ANYANG7-DONG MANAN-GU
-				ANYANG-SI  KYUGGI-DO  430-817
-				KR
-
-00-11-64   (hex)		ACARD Technology Corp.
-001164     (base 16)		ACARD Technology Corp.
-				6F No.78 Sec1 Kwang Fu Road, Sanchung,
-				Taipei Hsien    241
-				TW
-
-00-11-A2   (hex)		Manufacturing Technology Inc
-0011A2     (base 16)		Manufacturing Technology Inc
-				70 Ready Ave NW
-				Fort Walton Beach  FL  32548
-				US
-
-00-11-9E   (hex)		Solectron Brazil
-00119E     (base 16)		Solectron Brazil
-				Rod. Campinas Mogi Mirim
-				Jaguariuna  SP  13820-000
-				BR
-
-00-11-73   (hex)		SMART Storage Systems
-001173     (base 16)		SMART Storage Systems
-				2600 W Geronimo Place
-				Chandler  AZ  85224
-				US
-
-00-11-25   (hex)		IBM Corp
-001125     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-11-1C   (hex)		Pleora Technologies Inc.
-00111C     (base 16)		Pleora Technologies Inc.
-				359 Terry Fox Drive, Suite 230
-				Kanata  ON  K2K 2E7
-				CA
-
-00-11-1F   (hex)		Doremi Labs, Inc.
-00111F     (base 16)		Doremi Labs, Inc.
-				306 E. Alameda Ave.
-				Burbank  CA  91502
-				US
-
-00-11-1D   (hex)		Hectrix Limited
-00111D     (base 16)		Hectrix Limited
-				Unit 906-911, 9/F, Stanhope Hosue,
-				North Point  Hong Kong  
-				CN
-
-00-11-19   (hex)		Solteras, Inc.
-001119     (base 16)		Solteras, Inc.
-				900 W. Santa Anita Street
-				San Gabriel  CA  91776
-				US
-
-00-11-50   (hex)		Belkin Corporation
-001150     (base 16)		Belkin Corporation
-				501 West Walnut Street
-				Compton  CA  90220-5221
-				US
-
-00-11-46   (hex)		Telecard-Pribor Ltd
-001146     (base 16)		Telecard-Pribor Ltd
-				Lustdorfskaya doroga, 162
-				Odessa    65115
-				UA
-
-00-11-0D   (hex)		SANBlaze Technology, Inc.
-00110D     (base 16)		SANBlaze Technology, Inc.
-				2 Clock Tower Place
-				Maynard  MA  01748
-				US
-
-00-11-06   (hex)		Siemens NV (Belgium)
-001106     (base 16)		Siemens NV (Belgium)
-				Atealaan 34
-				Herentals  Antwerp  2200
-				BE
-
-00-0F-F4   (hex)		Guntermann & Drunck GmbH
-000FF4     (base 16)		Guntermann & Drunck GmbH
-				Obere Leimbach 9
-				Siegen  NRW  57074
-				DE
-
-00-0F-F8   (hex)		Cisco Systems, Inc
-000FF8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-2C   (hex)		IZT GmbH
-00112C     (base 16)		IZT GmbH
-				Am Weichselgarten 5
-				Erlangen  Bavaria  91058
-				DE
-
-00-11-0E   (hex)		Tsurusaki Sealand Transportation Co. Ltd.
-00110E     (base 16)		Tsurusaki Sealand Transportation Co. Ltd.
-				1000 Misa
-				Oita    8700196
-				JP
-
-00-11-4C   (hex)		caffeina applied research ltd.
-00114C     (base 16)		caffeina applied research ltd.
-				125 baird ave
-				cochrane  alberta  t4c 1c7
-				CA
-
-00-11-41   (hex)		GoodMan Corporation
-001141     (base 16)		GoodMan Corporation
-				2F, No.572, Sec.1, Ming-Sheng N Road, Kwei-Shan Hsiang
-				Taoyuan Hsien    33300
-				TW
-
-00-11-55   (hex)		Sevis Systems
-001155     (base 16)		Sevis Systems
-				2805 N Dallas Parkway, STE 530
-				Plano  Texas  75093
-				US
-
-00-11-52   (hex)		Eidsvoll Electronics AS
-001152     (base 16)		Eidsvoll Electronics AS
-				Nedre Vilberg vei 8
-				Eidsvoll    N-2080
-				NO
-
-00-0F-CF   (hex)		DataWind Research
-000FCF     (base 16)		DataWind Research
-				555 Rene-Levesque West
-				Montreal  Quebec  H2Z 1B1
-				CA
-
-00-0F-D2   (hex)		EWA Technologies, Inc.
-000FD2     (base 16)		EWA Technologies, Inc.
-				13873 Park Center Road
-				Herndon  VA  20171
-				US
-
-00-0F-CE   (hex)		Kikusui Electronics Corp.
-000FCE     (base 16)		Kikusui Electronics Corp.
-				1-1-3,Higashi yamata
-				Yokohama  Kanagawa  224-0023
-				JP
-
-00-0F-EB   (hex)		Cylon Controls
-000FEB     (base 16)		Cylon Controls
-				Clonshaugh Industrial Estate
-				Dublin 17    
-				IE
-
-00-0F-DC   (hex)		Ueda Japan  Radio Co., Ltd.
-000FDC     (base 16)		Ueda Japan  Radio Co., Ltd.
-				Fumiiri 2-10-19
-				Ueda city  Nagano prefecture  386-8608
-				JP
-
-00-0F-8E   (hex)		DONGYANG TELECOM CO.,LTD.
-000F8E     (base 16)		DONGYANG TELECOM CO.,LTD.
-				642-7, DEUNGCHON-DONG, KANGSEO-GU
-				SEOUL  KANGSE-GU  157-841
-				KR
-
-00-0F-91   (hex)		Aerotelecom Co.,Ltd.
-000F91     (base 16)		Aerotelecom Co.,Ltd.
-				195-58 Anyang 7 Dong
-				Anyang  Kyunggi  430-817
-				US
-
-00-0F-87   (hex)		Maxcess International
-000F87     (base 16)		Maxcess International
-				222 W. Memorial Road
-				Oklahoma City  OK  73114
-				US
-
-00-0F-A1   (hex)		Gigabit Systems Inc.
-000FA1     (base 16)		Gigabit Systems Inc.
-				Fuyoh Video Building 3F
-				Yokohama  Kanagawa  241-0826
-				JP
-
-00-0F-99   (hex)		APAC opto Electronics Inc.
-000F99     (base 16)		APAC opto Electronics Inc.
-				3 Tzu Chiang Road, Hsinchu Industrial Park
-				Hukow, Hsinchu Hsien    303
-				TW
-
-00-0F-F5   (hex)		GN&S company
-000FF5     (base 16)		GN&S company
-				301 Ansan S/W center, 643-7 wongok-dong
-				Ansan city  Gyeonggi-do  425-130
-				KR
-
-00-0F-E8   (hex)		Lobos, Inc.
-000FE8     (base 16)		Lobos, Inc.
-				U&T Bldg 3F, 1-2-3 Sarugaku-cho, Chiyoda-ku,
-				Tokyo    101-0064
-				JP
-
-00-0F-B2   (hex)		Broadband Pacenet (India) Pvt. Ltd.
-000FB2     (base 16)		Broadband Pacenet (India) Pvt. Ltd.
-				7-B, Shah Industrial Estate, Off Veera Desai Road
-				Mumbai  Maharashtra  400 053
-				IN
-
-00-0F-D7   (hex)		Harman Music Group
-000FD7     (base 16)		Harman Music Group
-				8760 Sandy Parkway
-				Sandy  Utah  84070
-				US
-
-00-0F-D4   (hex)		Soundcraft
-000FD4     (base 16)		Soundcraft
-				Cranborne House
-				Potters Bar  Hertfordshire  EN6 3JN
-				GB
-
-00-0F-AF   (hex)		Dialog Inc.
-000FAF     (base 16)		Dialog Inc.
-				1-47-9
-				Toshima-ku  Tokyo  1700013
-				JP
-
-00-0F-A5   (hex)		BWA Technology GmbH
-000FA5     (base 16)		BWA Technology GmbH
-				Johann-Krane-Weg 21
-				Muenster    48149
-				DE
-
-00-0F-80   (hex)		Trinity Security Systems,Inc.
-000F80     (base 16)		Trinity Security Systems,Inc.
-				Alte Building Higashi Kanda 8F
-				Chiyoda-ku  Tokyo  101-0031
-				JP
-
-00-0F-2A   (hex)		Cableware Electronics
-000F2A     (base 16)		Cableware Electronics
-				1702 Western Ave.
-				Las Vegas  Nevada  89102
-				US
-
-00-0F-29   (hex)		Augmentix Corporation
-000F29     (base 16)		Augmentix Corporation
-				4030 W Braker Ln
-				Austin  Texas  78759
-				US
-
-00-0F-27   (hex)		TEAL Electronics, Inc.
-000F27     (base 16)		TEAL Electronics, Inc.
-				10350 Sorrento Valley Road
-				San Diego  California  92121
-				US
-
-00-0F-43   (hex)		Wasabi Systems Inc.
-000F43     (base 16)		Wasabi Systems Inc.
-				500 E. Main Street
-				Norfolk  VA  23510
-				US
-
-00-0F-48   (hex)		Polypix Inc.
-000F48     (base 16)		Polypix Inc.
-				1Fl, Sungdo Venture Tower, 165-2 Samsung-Dong, Kangnam-Ku
-				Seoul    135-881
-				KR
-
-00-0F-50   (hex)		StreamScale Limited
-000F50     (base 16)		StreamScale Limited
-				The Court, Alexandra Park
-				St Helens    WA10 3TP
-				GB
-
-00-0F-4E   (hex)		Cellink
-000F4E     (base 16)		Cellink
-				Catherinalaan 37
-				Rotselaar  Vlaams Brabant  B-3110
-				BE
-
-00-0F-47   (hex)		ROBOX SPA
-000F47     (base 16)		ROBOX SPA
-				via Sempione 82
-				Castelletto S.Ticino  NO  28053
-				IT
-
-00-0F-18   (hex)		Industrial Control Systems
-000F18     (base 16)		Industrial Control Systems
-				Houtschelf 1
-				Hardinxveld  Zuid-Holland  NL-3371 KB
-				NL
-
-00-0F-1D   (hex)		Cosmo Techs Co., Ltd.
-000F1D     (base 16)		Cosmo Techs Co., Ltd.
-				2-6-1, Matsue
-				Atsugi-shi  Kanagawa-ken  243-0005
-				JP
-
-00-0F-1B   (hex)		Ego Systems Inc.
-000F1B     (base 16)		Ego Systems Inc.
-				1206 Woolim e-Biz Center II
-				Seoul    150-834
-				KR
-
-00-0F-78   (hex)		Datacap Systems Inc
-000F78     (base 16)		Datacap Systems Inc
-				100 New Britain Blvd
-				Chalfont  PA  18914
-				US
-
-00-0F-70   (hex)		Wintec Industries, inc.
-000F70     (base 16)		Wintec Industries, inc.
-				675 Sycamore Drive
-				Milpitas,  CA  95035
-				US
-
-00-0F-74   (hex)		Qamcom Technology AB
-000F74     (base 16)		Qamcom Technology AB
-				Gruvgatan 8
-				Vastra  Frolunda  
-				SE
-
-00-0F-6D   (hex)		Midas Engineering
-000F6D     (base 16)		Midas Engineering
-				Ace Techno-Tower V #906 197-22
-				Seoul    152-848
-				KR
-
-00-0F-5F   (hex)		Nicety Technologies Inc. (NTS)
-000F5F     (base 16)		Nicety Technologies Inc. (NTS)
-				792-3 Tomioka Toyoda-cho
-				Iwata-gun  Shizuoka  438-0803
-				JP
-
-00-0F-5A   (hex)		Peribit Networks
-000F5A     (base 16)		Peribit Networks
-				2855 Bowers Ave
-				Santa Clara  CA  95051
-				US
-
-00-0F-31   (hex)		Allied Vision Technologies Canada Inc
-000F31     (base 16)		Allied Vision Technologies Canada Inc
-				101-3750 North Fraser Way
-				Burnaby  BC  V5J 5E9
-				CA
-
-00-0F-73   (hex)		RS Automation Co., Ltd
-000F73     (base 16)		RS Automation Co., Ltd
-				447-6, Gongse-Dong , Giheung-Gu
-				Youngin-City  Gyeonggi-Do  449-902
-				KR
-
-00-0F-3C   (hex)		Endeleo Limited
-000F3C     (base 16)		Endeleo Limited
-				78 Cannon Street
-				London  England  EC4N 6NQ
-				GB
-
-00-0E-AB   (hex)		Cray Inc
-000EAB     (base 16)		Cray Inc
-				901 Fifth Avenue
-				Seattle  WA  98104
-				US
-
-00-0E-AD   (hex)		Metanoia Technologies, Inc.
-000EAD     (base 16)		Metanoia Technologies, Inc.
-				5918 W. courtyard Dr.
-				Austin  TX  78730
-				US
-
-00-0E-AF   (hex)		CASTEL
-000EAF     (base 16)		CASTEL
-				ZI Saint Lambert des Levées
-				SAUMUR  Maine et Loire  49412
-				FR
-
-00-0E-F8   (hex)		SBC ASI
-000EF8     (base 16)		SBC ASI
-				Network & Infrastructure Technical Support
-				San Antonio  Texas  78215
-				US
-
-00-0E-F9   (hex)		REA Elektronik GmbH
-000EF9     (base 16)		REA Elektronik GmbH
-				Teichwiesenstraße 1
-				Muehltal  Hessen  64367
-				DE
-
-00-0E-E6   (hex)		Adimos Systems LTD
-000EE6     (base 16)		Adimos Systems LTD
-				17 Atirey-Yeda Street
-				Kfar-Saba    44643
-				IL
-
-00-0E-F6   (hex)		E-TEN Information Systems Co., Ltd.
-000EF6     (base 16)		E-TEN Information Systems Co., Ltd.
-				No. 256, Yangguang Street, Neihu Chiu
-				Taipei    114
-				TW
-
-00-0E-EA   (hex)		Shadong Luneng Jicheng Electronics,Co.,Ltd
-000EEA     (base 16)		Shadong Luneng Jicheng Electronics,Co.,Ltd
-				No.188,east,Huayuan Road
-				Jinan  Shandong  250100
-				CN
-
-00-0F-0F   (hex)		Real ID Technology Co., Ltd.
-000F0F     (base 16)		Real ID Technology Co., Ltd.
-				9F Hanmi B/D 192-19
-				Gangnam-Gu  Seoul  135-010
-				KR
-
-00-0F-16   (hex)		JAY HOW TECHNOLOGY CO.,
-000F16     (base 16)		JAY HOW TECHNOLOGY CO.,
-				NO.486,SEC. 1, WAN SHOU RD., KUEI
-				TAOYUAN HSIEN    333
-				TW
-
-00-0E-C6   (hex)		ASIX ELECTRONICS CORP.
-000EC6     (base 16)		ASIX ELECTRONICS CORP.
-				4F, NO.8, HSIN ANN RD.,
-				HSINCHU    300
-				TW
-
-00-0E-BF   (hex)		Remsdaq Limited
-000EBF     (base 16)		Remsdaq Limited
-				Parkway
-				Deeside  Flintshire  CH5 2NL
-				GB
-
-00-0E-FF   (hex)		Megasolution,Inc.
-000EFF     (base 16)		Megasolution,Inc.
-				2-7-10 Shitaya
-				Taito  TOKYO  110-0004
-				JP
-
-00-0E-E0   (hex)		Mcharge
-000EE0     (base 16)		Mcharge
-				Firstec Bldg,. 15-4 Youido-Dong
-				seoul  Youido  150-010
-				KR
-
-00-0E-9F   (hex)		TEMIC SDS GmbH
-000E9F     (base 16)		TEMIC SDS GmbH
-				Soeflinger Strasse 100
-				Ulm    89077
-				DE
-
-00-0E-96   (hex)		Cubic Defense Applications, Inc.
-000E96     (base 16)		Cubic Defense Applications, Inc.
-				P.O. Box 85587
-				San Diego  CA  92186-5587
-				US
-
-00-0E-8E   (hex)		SparkLAN Communications, Inc.
-000E8E     (base 16)		SparkLAN Communications, Inc.
-				3Fl . , No. 246, Sec. 1, Neihu Road., Neihu Chiu,
-				Taipei    114
-				TW
-
-00-0E-91   (hex)		Navico Auckland Ltd
-000E91     (base 16)		Navico Auckland Ltd
-				17-21 Kawana St
-				Northcote  Auckland  
-				NZ
-
-00-0E-48   (hex)		Lipman TransAction Solutions
-000E48     (base 16)		Lipman TransAction Solutions
-				11 Haamal St.
-				 Rosh-Haayin    48092
-				IL
-
-00-0E-3E   (hex)		Sun Optronics Inc
-000E3E     (base 16)		Sun Optronics Inc
-				4-38-4 Fuchinobe-honchou
-				Sagamihara  Kanagawa  229-0002
-				JP
-
-00-0E-33   (hex)		Shuko Electronics Co.,Ltd
-000E33     (base 16)		Shuko Electronics Co.,Ltd
-				TOHSHIN HIGASHI-IKEBUKURO Building 3F
-				TOKYO  KANTOH  170-0063
-				JP
-
-00-0E-75   (hex)		New York Air Brake Corp.
-000E75     (base 16)		New York Air Brake Corp.
-				748 Starbuck Ave.
-				Watertown  NY  13601
-				US
-
-00-0E-7C   (hex)		Televes S.A.
-000E7C     (base 16)		Televes S.A.
-				Rua Benefica Conxo 17
-				Santiago de Compostela  Coruña  15706
-				ES
-
-00-0E-66   (hex)		Hitachi Industry & Control Solutions, Ltd.
-000E66     (base 16)		Hitachi Industry & Control Solutions, Ltd.
-				5-1-26, Omika-cho, Hitachi-shi, Ibaraki
-				    319-1221
-				JP
-
-00-0E-68   (hex)		E-TOP Network Technology Inc.
-000E68     (base 16)		E-TOP Network Technology Inc.
-				No. 7, Shin Shin Rd.,
-				Tainan    702
-				TW
-
-00-0E-5E   (hex)		Raisecom Technology
-000E5E     (base 16)		Raisecom Technology
-				2 Floor, South Building of Rainbow Plaza
-				Haidian District  Beijing  100085
-				CN
-
-00-0E-56   (hex)		4G Systems GmbH & Co. KG
-000E56     (base 16)		4G Systems GmbH & Co. KG
-				Jarrestrasse 2-6
-				22303  Hamburg  
-				DE
-
-00-0E-55   (hex)		AUVITRAN
-000E55     (base 16)		AUVITRAN
-				7c chemin des Prés
-				MEYLAN    38410
-				FR
-
-00-0E-73   (hex)		Tpack A/S
-000E73     (base 16)		Tpack A/S
-				Lautrupbjerg 7 - 11
-				DK 2750  Ballerup    DK 2750
-				DK
-
-00-0E-72   (hex)		CTS electronics
-000E72     (base 16)		CTS electronics
-				Corso Vercelli 332
-				Ivrea  Torino  10015
-				IT
-
-00-0E-6E   (hex)		MAT S.A. (Mircrelec Advanced Technology)
-000E6E     (base 16)		MAT S.A. (Mircrelec Advanced Technology)
-				Mousounitsis 15
-				Peristeri  Athens  
-				GR
-
-00-0E-84   (hex)		Cisco Systems, Inc
-000E84     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-87   (hex)		adp Gauselmann GmbH
-000E87     (base 16)		adp Gauselmann GmbH
-				Boschstraße 8
-				Luebbecke  NRW  32312
-				DE
-
-00-0E-92   (hex)		Open Telecom
-000E92     (base 16)		Open Telecom
-				803-804 Daeryung Techno-town II
-				Keuncheon-Ku  Seoul  153-771
-				KR
-
-00-0E-53   (hex)		AV TECH CORPORATION
-000E53     (base 16)		AV TECH CORPORATION
-				10F,E Building,No.19-11 San Chung Rd.,NanKang
-				Taipei    115
-				TW
-
-00-0D-F9   (hex)		NDS Limited
-000DF9     (base 16)		NDS Limited
-				One Heathrow Boulevard
-				West Drayton  Middlesex  UB7 0DQ
-				GB
-
-00-0D-FD   (hex)		Huges Hi-Tech Inc.,
-000DFD     (base 16)		Huges Hi-Tech Inc.,
-				7F, 188, Sec. 2, Chung Hsing Road.
-				Hsin Tien  Taipei Hsien  231
-				TW
-
-00-0D-FB   (hex)		Komax AG
-000DFB     (base 16)		Komax AG
-				Industriestrasse 6
-				Dierikon  LU  6036
-				CH
-
-00-0E-00   (hex)		Atrie
-000E00     (base 16)		Atrie
-				10th Floor, 14, Lane 609, Sec. 5, Chung Hsin Rd., San Chung City,
-				Taipei Hsien  San Chung  241
-				TW
-
-00-0D-F4   (hex)		Watertek Co.
-000DF4     (base 16)		Watertek Co.
-				Room 1006,Haitai building,north si Huan
-				Beijing    100083
-				CN
-
-00-0D-FA   (hex)		Micro Control Systems Ltd.
-000DFA     (base 16)		Micro Control Systems Ltd.
-				8-7 Sakurai
-				Saku-shi  Nagano  385-0056
-				JP
-
-00-0D-FC   (hex)		ITFOR Inc.
-000DFC     (base 16)		ITFOR Inc.
-				Ichibancho Tokyu Bidg.,
-				  Tokyo  102-0082
-				JP
-
-00-0D-FE   (hex)		Hauppauge Computer Works, Inc.
-000DFE     (base 16)		Hauppauge Computer Works, Inc.
-				91 Cabot Court
-				Hauppauge  New York  11788
-				US
-
-00-0D-D6   (hex)		ITI    LTD
-000DD6     (base 16)		ITI    LTD
-				R&D,ITI Bangalore Complex
-				Dooravani Nagar, Bangalore  Karnataka State  560016
-				IN
-
-00-0D-D5   (hex)		O'RITE TECHNOLOGY CO.,LTD
-000DD5     (base 16)		O'RITE TECHNOLOGY CO.,LTD
-				4f-8,NO 80,GUANGFU RD.SEC 2,SANCHUNG
-				TAIPEI COUNTY    241
-				TW
-
-00-0E-0F   (hex)		ERMME
-000E0F     (base 16)		ERMME
-				9 rue Lavoisier
-				Vert-Le-Petit    91710
-				FR
-
-00-0E-10   (hex)		C-guys, Inc.
-000E10     (base 16)		C-guys, Inc.
-				Izumi Garden Wing 1F, 1-6-3
-				Tokyo    106-0032
-				JP
-
-00-0E-0A   (hex)		SAKUMA DESIGN OFFICE
-000E0A     (base 16)		SAKUMA DESIGN OFFICE
-				674-11
-				KUKI-SHI  SAITAMA  346-0029
-				JP
-
-00-0E-0E   (hex)		ESA elettronica S.P.A.
-000E0E     (base 16)		ESA elettronica S.P.A.
-				
-				Mariano Comense  CO  22066
-				IT
-
-00-0E-18   (hex)		MyA Technology
-000E18     (base 16)		MyA Technology
-				2100 Muirwood Way
-				San Jose  CA  95132
-				US
-
-00-0E-14   (hex)		Visionary Solutions, Inc.
-000E14     (base 16)		Visionary Solutions, Inc.
-				4193 Carpinteria Ave
-				Carpinteria  CA  93013
-				US
-
-00-0E-1B   (hex)		IAV GmbH
-000E1B     (base 16)		IAV GmbH
-				Carnotstraße 1
-				Berlin    10587
-				DE
-
-00-0E-13   (hex)		Accu-Sort Systems inc.
-000E13     (base 16)		Accu-Sort Systems inc.
-				511 School House Road
-				Telford  PA  18969
-				US
-
-00-0D-DE   (hex)		Joyteck Co., Ltd.
-000DDE     (base 16)		Joyteck Co., Ltd.
-				19F, No.4, Sec. 3, Min Chuan East Rd.
-				Taipei    105
-				TW
-
-00-0D-E2   (hex)		CMZ Sistemi Elettronici
-000DE2     (base 16)		CMZ Sistemi Elettronici
-				Via dell'Artiginato, 21
-				Vascon di Carbonera  Treviso  31050
-				IT
-
-00-0D-DA   (hex)		ALLIED TELESIS K.K.
-000DDA     (base 16)		ALLIED TELESIS K.K.
-				PIAZZA TIRANA N. 24/4 B
-				MILANO    20147
-				IT
-
-00-0D-CD   (hex)		GROUPE TXCOM
-000DCD     (base 16)		GROUPE TXCOM
-				ZI DU PETIT CLAMART
-				LE PLESSIS ROBINSON  HAUTS-DE-SEINE  92350
-				FR
-
-00-0D-CA   (hex)		Tait Electronics
-000DCA     (base 16)		Tait Electronics
-				535 Wairakei Rd
-				Christchurch  Canterbury  8005
-				NZ
-
-00-0D-CF   (hex)		Cidra Corp.
-000DCF     (base 16)		Cidra Corp.
-				50 Barns Park North
-				Wallingford  CT  06492
-				US
-
-00-0E-3A   (hex)		Cirrus Logic
-000E3A     (base 16)		Cirrus Logic
-				2901 Via Fortuna
-				Austin  TX  78746
-				US
-
-00-0E-3B   (hex)		Hawking Technologies, Inc.
-000E3B     (base 16)		Hawking Technologies, Inc.
-				15281A Barranca Parkway
-				Irvine  CA  92618
-				US
-
-00-0D-EC   (hex)		Cisco Systems, Inc
-000DEC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0D-F2   (hex)		Private
-000DF2     (base 16)		Private
-
-00-0E-27   (hex)		Crere Networks, Inc.
-000E27     (base 16)		Crere Networks, Inc.
-				Room 110 ETRI TBI, 52 Eoeun-dong
-				Daejeon    305-333
-				KR
-
-00-0D-A0   (hex)		NEDAP N.V.
-000DA0     (base 16)		NEDAP N.V.
-				P.O.Box 103
-				GROENLO  GLD  7141 AC
-				NL
-
-00-0D-8E   (hex)		Koden Electronics Co., Ltd.
-000D8E     (base 16)		Koden Electronics Co., Ltd.
-				5278 Uenohara
-				  Yamanashi-Ken  409-0112
-				JP
-
-00-0D-8A   (hex)		Winners Electronics Co., Ltd.
-000D8A     (base 16)		Winners Electronics Co., Ltd.
-				#340-5,Wonchun-Dong,Paldal-Gu
-				Suwon-City  Kyungki-Do  442-823
-				KR
-
-00-0D-7E   (hex)		Axiowave Networks, Inc.
-000D7E     (base 16)		Axiowave Networks, Inc.
-				200 Nickerson Road
-				Marlborough  MA  01752
-				US
-
-00-0D-71   (hex)		boca systems
-000D71     (base 16)		boca systems
-				1065 s. rogers circle
-				boca raton  fl  33487
-				US
-
-00-0D-5A   (hex)		Tiesse SpA
-000D5A     (base 16)		Tiesse SpA
-				Via Asti
-				Ivrea  TO  10015
-				IT
-
-00-0D-B8   (hex)		SCHILLER AG
-000DB8     (base 16)		SCHILLER AG
-				Altgasse 68
-				Baar  Zug  6300
-				CH
-
-00-0D-C4   (hex)		Emcore Corporation
-000DC4     (base 16)		Emcore Corporation
-				1600 Eubank Blvd, SE
-				Albuquerque  New Mexico  87123
-				US
-
-00-0D-9B   (hex)		Heraeus Electro-Nite International N.V.
-000D9B     (base 16)		Heraeus Electro-Nite International N.V.
-				Centrum Zuid 1105
-				Houthalen    3530
-				BE
-
-00-0D-7C   (hex)		Codian Ltd
-000D7C     (base 16)		Codian Ltd
-				14 Waterside Drive
-				Langley  Slough  SL3 6EZ
-				GB
-
-00-0D-6B   (hex)		Mita-Teknik A/S
-000D6B     (base 16)		Mita-Teknik A/S
-				Haandvaerkervej 1
-				Roedkaersbro    DK-8840
-				DK
-
-00-0D-43   (hex)		DRS Tactical Systems Inc.
-000D43     (base 16)		DRS Tactical Systems Inc.
-				3520 U.S. Highway 1
-				Palm Bay  FL  32905
-				US
-
-00-0D-44   (hex)		Audio BU - Logitech
-000D44     (base 16)		Audio BU - Logitech
-				1499 SE Tech Center Place
-				Vancouver  WA  98683
-				US
-
-00-0D-36   (hex)		Wu Han Routon Electronic Co., Ltd
-000D36     (base 16)		Wu Han Routon Electronic Co., Ltd
-				Miao Shan District, East Lake Hi-Tech
-				Wuhan  Hubei  430223
-				CN
-
-00-0D-3D   (hex)		Hammerhead Systems, Inc.
-000D3D     (base 16)		Hammerhead Systems, Inc.
-				640 Clyde Court
-				Mountain View  California  94043
-				US
-
-00-0D-3E   (hex)		APLUX Communications Ltd.
-000D3E     (base 16)		APLUX Communications Ltd.
-				10F, No. 166, Dah-Yeh Rd., Peitou
-				Taipei    112
-				TW
-
-00-0D-0D   (hex)		ITSupported, LLC
-000D0D     (base 16)		ITSupported, LLC
-				4989 Peachtree Parkway
-				Norcross  GA  30092
-				US
-
-00-0D-06   (hex)		Compulogic Limited
-000D06     (base 16)		Compulogic Limited
-				Unit W3, MK TWO Business Centre
-				Water Eaton  Milton Keynes  MK2 3HU
-				GB
-
-00-0D-4A   (hex)		Steag ETA-Optik
-000D4A     (base 16)		Steag ETA-Optik
-				Borsigstrasse 78.-80
-				Heinsberg    52525
-				DE
-
-00-0D-4F   (hex)		Kenwood Corporation
-000D4F     (base 16)		Kenwood Corporation
-				2967-3, Ishikawa-machi
-				Hachioji-shi  Tokyo  192-8525
-				JP
-
-00-0D-47   (hex)		Collex
-000D47     (base 16)		Collex
-				13F-3,No.142,Sec.1,Huamei W,St.,Shi Chiu
-				Taichung    403
-				TW
-
-00-0D-61   (hex)		Giga-Byte Technology Co., Ltd.
-000D61     (base 16)		Giga-Byte Technology Co., Ltd.
-				No 6, Bau Chiang Road, Hsin-Tien
-				Taipei Hsien    9999
-				TW
-
-00-0D-3B   (hex)		Microelectronics Technology Inc.
-000D3B     (base 16)		Microelectronics Technology Inc.
-				No1, Innovation Road II
-				    300
-				TW
-
-00-0D-2D   (hex)		NCT Deutschland GmbH
-000D2D     (base 16)		NCT Deutschland GmbH
-				Wildenbruchstraße 15
-				Jena  Thüringen  07745
-				DE
-
-00-0D-1E   (hex)		Control Techniques
-000D1E     (base 16)		Control Techniques
-				The Gro
-				Newtown  Powys  SY16 3BE
-				GB
-
-00-0D-52   (hex)		Comart system
-000D52     (base 16)		Comart system
-				No. 211, Ace Techno Tower III, 197-48
-				Seoul    152-050
-				KR
-
-00-0D-1A   (hex)		Mustek System Inc.
-000D1A     (base 16)		Mustek System Inc.
-				No. 25, R&D Road, Science-Based Industri
-				Hsin-Chu    300
-				TW
-
-00-0C-B8   (hex)		MEDION AG
-000CB8     (base 16)		MEDION AG
-				Am Zehnthof 77
-				Essen  NRW  45307
-				DE
-
-00-0C-BB   (hex)		ISKRAEMECO
-000CBB     (base 16)		ISKRAEMECO
-				Savska loka 4
-				Kranj  Gorenjska  4000
-				SI
-
-00-0C-C0   (hex)		Genera Oy
-000CC0     (base 16)		Genera Oy
-				Niittylanpolku 16
-				Helsinki    00621
-				FI
-
-00-0C-A8   (hex)		Garuda Networks Corporation
-000CA8     (base 16)		Garuda Networks Corporation
-				48499 Milmont Drive
-				Fremont  CA  94538
-				US
-
-00-0D-03   (hex)		Matrics, Inc.
-000D03     (base 16)		Matrics, Inc.
-				8850 Stanford Blvd
-				Columbia  MD  21045
-				US
-
-00-0C-FF   (hex)		MRO-TEK Realty Limited
-000CFF     (base 16)		MRO-TEK Realty Limited
-				#6, New BEL Road
-				Chikkamaranahalli  Bangalore  560 054
-				IN
-
-00-0C-FA   (hex)		Digital Systems Corp
-000CFA     (base 16)		Digital Systems Corp
-				3 North Main Street
-				Walkersville  Maryland  21793
-				US
-
-00-0C-FD   (hex)		Hyundai ImageQuest Co.,Ltd.
-000CFD     (base 16)		Hyundai ImageQuest Co.,Ltd.
-				San 136-1, Ami-ri, Bubal-eub
-				Ichon-si  Kyoung ki-do  467-701
-				KR
-
-00-0C-D3   (hex)		Prettl Elektronik Radeberg GmbH
-000CD3     (base 16)		Prettl Elektronik Radeberg GmbH
-				Robert-Bosch-Str. 10
-				Radeberg  Saxony  D-01454
-				DE
-
-00-0C-D7   (hex)		Nallatech Ltd
-000CD7     (base 16)		Nallatech Ltd
-				Boolean House
-				Glasgow  Scotland  G68 0BH
-				GB
-
-00-0C-D4   (hex)		Positron Public Safety Systems inc.
-000CD4     (base 16)		Positron Public Safety Systems inc.
-				5101 Buchan
-				Montreal  Quebec  H4P 2R9
-				CA
-
-00-0C-D6   (hex)		PARTNER TECH
-000CD6     (base 16)		PARTNER TECH
-				10F, NO.233-2,PAO CHIAO ROAD, SHIN TIEN
-				TAIPEI    231
-				TW
-
-00-0C-B9   (hex)		LEA
-000CB9     (base 16)		LEA
-				Bat LA FAYETTE
-				Paris  RP  924051
-				FR
-
-00-0C-BD   (hex)		Interface Masters, Inc
-000CBD     (base 16)		Interface Masters, Inc
-				2381 Zanker Rd., Suite 130
-				San Jose  California  95131
-				US
-
-00-0C-B2   (hex)		UNION co., ltd.
-000CB2     (base 16)		UNION co., ltd.
-				14Beon-Gil 17, UiChang-Gu,
-				GyeongSnagNam-Do    641-846
-				KR
-
-00-0C-EB   (hex)		CNMP Networks, Inc.
-000CEB     (base 16)		CNMP Networks, Inc.
-				1245 S. Winchester Blvd.
-				San Jose  CA  95128
-				US
-
-00-0C-CC   (hex)		Aeroscout Ltd.
-000CCC     (base 16)		Aeroscout Ltd.
-				3 Pekeris St.
-				Rehovot    76701
-				IL
-
-00-0C-C7   (hex)		Intelligent Computer Solutions Inc.
-000CC7     (base 16)		Intelligent Computer Solutions Inc.
-				9350 Eton St.
-				Chatsworth  CA  91301
-				US
-
-00-0C-BE   (hex)		Innominate Security Technologies AG
-000CBE     (base 16)		Innominate Security Technologies AG
-				Rudower Chaussee 13
-				12489  Berlin  
-				DE
-
-00-0C-A7   (hex)		Metro (Suzhou) Technologies Co., Ltd.
-000CA7     (base 16)		Metro (Suzhou) Technologies Co., Ltd.
-				No.221 Xinghai Street, Suzhou Industrial Park
-				Suzhou  Jiang Su Province  215021
-				CN
-
-00-0C-EF   (hex)		Open Networks Engineering Ltd
-000CEF     (base 16)		Open Networks Engineering Ltd
-				Classic House
-				Bishop's Stortford  Hertfordshire  CM23 5PD
-				GB
-
-00-0C-64   (hex)		X2 MSA Group
-000C64     (base 16)		X2 MSA Group
-				Care of: Agilent Technologies
-				Ipswich,  Suffolk  IP1 5PB
-				GB
-
-00-0C-A0   (hex)		StorCase Technology, Inc.
-000CA0     (base 16)		StorCase Technology, Inc.
-				17600 Newhope St.
-				Fountain Valley  CA  92708
-				US
-
-00-0C-99   (hex)		HITEL LINK Co.,Ltd
-000C99     (base 16)		HITEL LINK Co.,Ltd
-				Samsung Omni Tower 4th Fl., 395-62
-				Seoul    156-010
-				KR
-
-00-0C-5A   (hex)		IBSmm Embedded Electronics Consulting
-000C5A     (base 16)		IBSmm Embedded Electronics Consulting
-				Teufelsgrabenweg 1
-				Valley  Bavaria  D-83626
-				DE
-
-00-0C-5E   (hex)		Calypso Medical
-000C5E     (base 16)		Calypso Medical
-				2101 Fourth Avenue, Suite 1550
-				Seattle  WA  98121
-				US
-
-00-0C-61   (hex)		AC Tech corporation DBA Advanced Digital
-000C61     (base 16)		AC Tech corporation DBA Advanced Digital
-				1250-G Avenida Acaso
-				Camarillo  CA  93010
-				US
-
-00-0C-5F   (hex)		Avtec, Inc.
-000C5F     (base 16)		Avtec, Inc.
-				4335 Augusta Hwy
-				Gilbert  SC  29054
-				US
-
-00-0C-4B   (hex)		Cheops Elektronik
-000C4B     (base 16)		Cheops Elektronik
-				Jeschkenstrasse 32
-				Geretsried  Bayern  82538
-				DE
-
-00-0C-45   (hex)		Animation Technologies Inc.
-000C45     (base 16)		Animation Technologies Inc.
-				8F,No.138,Lane 235,Paochiao Road,
-				Taipei Hsien    231
-				TW
-
-00-0C-3C   (hex)		MediaChorus, Inc.
-000C3C     (base 16)		MediaChorus, Inc.
-				#205, ETRI TBI 2 Center
-				Daejon  DJ  305-333
-				KR
-
-00-0C-7C   (hex)		Internet Information Image Inc.
-000C7C     (base 16)		Internet Information Image Inc.
-				Fl. 6, No. 1, Alley 20, Lane 26, Rueigua
-				Taipei    114
-				TW
-
-00-0C-7B   (hex)		ALPHA PROJECT Co.,Ltd.
-000C7B     (base 16)		ALPHA PROJECT Co.,Ltd.
-				834 Sekishi,Higashi-ku,Hamamatsu-city
-				Shizuoka    431-3114
-				JP
-
-00-0C-77   (hex)		Life Racing Ltd
-000C77     (base 16)		Life Racing Ltd
-				Unit 6 Repton Close
-				Basildon  Essex  SS13 1LE
-				GB
-
-00-0C-69   (hex)		National Radio Astronomy Observatory
-000C69     (base 16)		National Radio Astronomy Observatory
-				P.O. Box O
-				Socorro  NM  87801
-				US
-
-00-0C-66   (hex)		Pronto Networks Inc
-000C66     (base 16)		Pronto Networks Inc
-				4637 Chabot Dr
-				Pleasanton  CA  94588
-				US
-
-00-0C-88   (hex)		Apache Micro Peripherals, Inc.
-000C88     (base 16)		Apache Micro Peripherals, Inc.
-				17526 Von Karman Ave
-				Irvine  CA  92614
-				US
-
-00-0C-82   (hex)		NETWORK TECHNOLOGIES INC
-000C82     (base 16)		NETWORK TECHNOLOGIES INC
-				1275 DANNER DRIVE
-				AURORA  OH  44202
-				US
-
-00-0C-8D   (hex)		MATRIX VISION GmbH
-000C8D     (base 16)		MATRIX VISION GmbH
-				Talstrasse 16
-				Oppenweiler  Baden-Württemberg  D-71570
-				DE
-
-00-0C-89   (hex)		AC Electric Vehicles, Ltd.
-000C89     (base 16)		AC Electric Vehicles, Ltd.
-				Markkinakuja 3
-				Jokela    05400
-				FI
-
-00-0C-4E   (hex)		Winbest Technology CO,LT
-000C4E     (base 16)		Winbest Technology CO,LT
-				7F-5No.736 Chung ChengRd.,ChungHo
-				Taipei    235
-				TW
-
-00-0B-FE   (hex)		CASTEL Broadband Limited
-000BFE     (base 16)		CASTEL Broadband Limited
-				9/F., Sui Ying Industrial Building.,
-				Tokwawan  Kowloon  150
-				HK
-
-00-0B-F5   (hex)		Shanghai Sibo Telecom Technology Co.,Ltd
-000BF5     (base 16)		Shanghai Sibo Telecom Technology Co.,Ltd
-				Floor 6 Building 18,300 Tianlin Rd.
-				Shanghai    200233
-				CN
-
-00-0C-27   (hex)		Sammy Corporation
-000C27     (base 16)		Sammy Corporation
-				SUN SHINE60 45F,3-1-1,HIGASHI-IKEBUKURO
-				TOSHIMA-KU  TOKYO  170-6045
-				JP
-
-00-0C-2A   (hex)		OCTTEL Communication Co., Ltd.
-000C2A     (base 16)		OCTTEL Communication Co., Ltd.
-				7F-1, No.300, Daduen 10th St.
-				Taichung City    408
-				TW
-
-00-0C-1C   (hex)		MicroWeb Co., Ltd.
-000C1C     (base 16)		MicroWeb Co., Ltd.
-				403 T/S/S/C, 23-14 Jang-dong, Yusong-gu,
-				Daejeon  ChoongChungDo  305-343
-				KR
-
-00-0B-DF   (hex)		Shenzhen RouterD Networks Limited
-000BDF     (base 16)		Shenzhen RouterD Networks Limited
-				8/F, Building A, Tsinghua Hi-Tech Park
-				Shenzhen    
-				CN
-
-00-0B-E6   (hex)		Datel Electronics
-000BE6     (base 16)		Datel Electronics
-				Stafford Road
-				Stone  Staffordshire  ST15 0DG
-				GB
-
-00-0B-F2   (hex)		Chih-Kan Technology Co., Ltd.
-000BF2     (base 16)		Chih-Kan Technology Co., Ltd.
-				No. 24-1, Pei Shih Chou, Ming Ho Vill.
-				Shan Sun Hsiang  Tainan Hsien  180
-				TW
-
-00-0B-EB   (hex)		Systegra AG
-000BEB     (base 16)		Systegra AG
-				Burgunderstrasse 15
-				Bellach  SO  4512
-				CH
-
-00-0B-EF   (hex)		Code Corporation
-000BEF     (base 16)		Code Corporation
-				11814 S. Election Rd., Ste 200
-				Draper  Utah  84020
-				US
-
-00-0C-05   (hex)		RPA Reserch Co., Ltd.
-000C05     (base 16)		RPA Reserch Co., Ltd.
-				4F, 90-7, Yangjae-Dong, Seocho-Ku
-				Seoul    137-130
-				US
-
-00-0C-22   (hex)		Double D Electronics Ltd
-000C22     (base 16)		Double D Electronics Ltd
-				Unit 6, Robins Wharf
-				Northfleet  Kent  DA11 9AX
-				GB
-
-00-0C-0F   (hex)		Techno-One Co., Ltd
-000C0F     (base 16)		Techno-One Co., Ltd
-				9-17-1 Higashi Sonoda
-				Amagasaki  Hyogo  661-0953
-				JP
-
-00-0C-38   (hex)		TelcoBridges Inc.
-000C38     (base 16)		TelcoBridges Inc.
-				586 Du Chenal
-				Repentigny  Quebec  J6A 7C5
-				CA
-
-00-0B-AF   (hex)		WOOJU COMMUNICATIONS Co,.Ltd
-000BAF     (base 16)		WOOJU COMMUNICATIONS Co,.Ltd
-				B-713, SK Twin Tech Tower, 345-9, Ga-San
-				Seoul    153-802
-				KR
-
-00-0B-B6   (hex)		Metalligence Technology Corp.
-000BB6     (base 16)		Metalligence Technology Corp.
-				9, Park Avenue II, Science-Based Industr
-				Hsinchu    300
-				TW
-
-00-0B-B3   (hex)		RiT technologies Ltd.
-000BB3     (base 16)		RiT technologies Ltd.
-				24 Raoul Walenberg  St.
-				Tel Aviv    69719
-				IL
-
-00-0B-B7   (hex)		Micro Systems Co.,Ltd.
-000BB7     (base 16)		Micro Systems Co.,Ltd.
-				2-15-34 Nishikubo
-				Musashino-City  Tokyo  180-0013
-				JP
-
-00-0B-BA   (hex)		Harmonic, Inc
-000BBA     (base 16)		Harmonic, Inc
-				4300 North First Street
-				San Jose  CA  95134
-				US
-
-00-0B-62   (hex)		ib-mohnen KG
-000B62     (base 16)		ib-mohnen KG
-				Stich 30 e
-				52249  Eschweiler  
-				DE
-
-00-0B-64   (hex)		Kieback & Peter GmbH & Co KG
-000B64     (base 16)		Kieback & Peter GmbH & Co KG
-				Tempelhofer Weg 50
-				Berlin    12347
-				DE
-
-00-0B-67   (hex)		Topview Technology Corporation
-000B67     (base 16)		Topview Technology Corporation
-				No. 8,Wu-Chuan Road,Wu Ku Industrial Par
-				Wu Ku Hsiang,Taipei Hsien,    248
-				TW
-
-00-0B-7D   (hex)		SOLOMON EXTREME INTERNATIONAL LTD.
-000B7D     (base 16)		SOLOMON EXTREME INTERNATIONAL LTD.
-				3F, No.20, Lane 165, Duenhua N. Rd., Sun
-				Taipei    
-				TW
-
-00-0B-94   (hex)		Digital Monitoring Products, Inc.
-000B94     (base 16)		Digital Monitoring Products, Inc.
-				2500 N. Partnership Boulevard
-				Springfield  Missouri  65803
-				US
-
-00-0B-AE   (hex)		Vitals System Inc.
-000BAE     (base 16)		Vitals System Inc.
-				Jooheung B/D 4FL. 1005-1, Youngtong-Dong
-				Suwon City  Kyonggi-Do  442-813
-				KR
-
-00-0B-D9   (hex)		General Hydrogen
-000BD9     (base 16)		General Hydrogen
-				13120 Vanier Place
-				Richmond  British Columbia  V6V 2J2
-				CA
-
-00-0B-AB   (hex)		Advantech Technology (CHINA) Co., Ltd.
-000BAB     (base 16)		Advantech Technology (CHINA) Co., Ltd.
-				No.666, Han-Pu Rd. Yu-Shan
-				Kun-Shan  Jiang Su  215316
-				CN
-
-00-0B-6D   (hex)		SOLECTRON JAPAN NAKANIIDA
-000B6D     (base 16)		SOLECTRON JAPAN NAKANIIDA
-				325 GANBARA
-				KAMIGUN  MIYAGIKEN  981-4263
-				JP
-
-00-0B-C4   (hex)		BIOTRONIK GmbH & Co
-000BC4     (base 16)		BIOTRONIK GmbH & Co
-				Woermannkehre 1
-				Berlin    12359
-				DE
-
-00-0B-57   (hex)		Silicon Laboratories
-000B57     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-00-0B-51   (hex)		Micetek International Inc.
-000B51     (base 16)		Micetek International Inc.
-				7F-1, #237, Sec. 1, wu Chuan W. Rd.
-				Taichung    403
-				TW
-
-00-0B-53   (hex)		INITIUM Co., Ltd.
-000B53     (base 16)		INITIUM Co., Ltd.
-				8F. Gongduck Bldg. 272-6 Seohyun Bundang
-				Sungnam  Kyunggi  463-824
-				KR
-
-00-0A-FB   (hex)		Ambri Limited
-000AFB     (base 16)		Ambri Limited
-				126 Greville Street
-				Chatswood  NSW  2067
-				AU
-
-00-0A-FF   (hex)		Kilchherr Elektronik AG
-000AFF     (base 16)		Kilchherr Elektronik AG
-				Aeschistrasse 25
-				Muensingen  BE  3110
-				CH
-
-00-0B-4A   (hex)		Visimetrics (UK) Ltd
-000B4A     (base 16)		Visimetrics (UK) Ltd
-				Skye House
-				Prestwick  Ayrshire  KA9 2TA
-				GB
-
-00-0B-48   (hex)		sofrel
-000B48     (base 16)		sofrel
-				2 rue du plessis
-				vern sur seiche  ille et vilaine  35770
-				FR
-
-00-0B-1E   (hex)		KAPPA opto-electronics GmbH
-000B1E     (base 16)		KAPPA opto-electronics GmbH
-				Kleines Feld 6
-				Gleichen  Niedersachsen  
-				DE
-
-00-0B-1C   (hex)		SIBCO bv
-000B1C     (base 16)		SIBCO bv
-				Schoonhout 46
-				Etten-Leur  NB  4872 ME
-				NL
-
-00-0B-37   (hex)		MANUFACTURE DES MONTRES ROLEX SA
-000B37     (base 16)		MANUFACTURE DES MONTRES ROLEX SA
-				LA HAUTE-ROUTE 82
-				BIEL-BIENNE  BE  2502
-				CH
-
-00-0A-F8   (hex)		American Telecare Inc.
-000AF8     (base 16)		American Telecare Inc.
-				7640 Golden Triangle Drive
-				Eden Prairie  MN  55344
-				US
-
-00-0B-17   (hex)		MKS Instruments
-000B17     (base 16)		MKS Instruments
-				651 Lowell Street
-				Methuen  MA  01844
-				US
-
-00-0B-2D   (hex)		Danfoss Inc.
-000B2D     (base 16)		Danfoss Inc.
-				7941 Corporate Dr
-				Baltimore  MD  21236
-				US
-
-00-0A-A3   (hex)		SHIMAFUJI ELECTRIC CO.,LTD.
-000AA3     (base 16)		SHIMAFUJI ELECTRIC CO.,LTD.
-				Daihyaku-seimei Kamata Bldg.3F
-				  Tokyo  144-0051
-				JP
-
-00-0A-A7   (hex)		FEI Electron Optics
-000AA7     (base 16)		FEI Electron Optics
-				Achtseweg Noord 5
-				Eindhoven    5651GG
-				NL
-
-00-0A-A6   (hex)		Hochiki Corporation
-000AA6     (base 16)		Hochiki Corporation
-				246, TSURUMA
-				MACHIDA  TOKYO  194-8577
-				JP
-
-00-0A-9A   (hex)		Aiptek International Inc
-000A9A     (base 16)		Aiptek International Inc
-				No 5-1 Innovation Rd 1
-				Hsin-Chu    300
-				TW
-
-00-0A-94   (hex)		ShangHai cellink CO., LTD
-000A94     (base 16)		ShangHai cellink CO., LTD
-				C3 MeiLong ZhongXin Industrial Park,No.1
-				ShangHai    200237
-				US
-
-00-0A-97   (hex)		SONICblue, Inc.
-000A97     (base 16)		SONICblue, Inc.
-				2841 Mission College Blvd.
-				Santa Clara  CA  95054
-				US
-
-00-0A-92   (hex)		Presonus Corporation
-000A92     (base 16)		Presonus Corporation
-				7257 Florida Blvd.
-				Baton Rouge  Louisiana  70806
-				US
-
-00-0A-85   (hex)		PLAT'C2,Inc
-000A85     (base 16)		PLAT'C2,Inc
-				2-3-6 SOTOKANDA
-				CHIYODA-KU  TOKYO  101-0021
-				JP
-
-00-0A-D0   (hex)		Niigata Develoment Center,  F.I.T. Co., Ltd.
-000AD0     (base 16)		Niigata Develoment Center,  F.I.T. Co., Ltd.
-				Akane-Niigata Building 2F
-				Niigata  Niigata Prefecture  950-0944
-				JP
-
-00-0A-D4   (hex)		CoreBell Systems Inc.
-000AD4     (base 16)		CoreBell Systems Inc.
-				HTVC 2317 KAIST
-				Yuseong-Gu  Daejeon  305-701
-				KR
-
-00-0A-CA   (hex)		YOKOYAMA SHOKAI CO.,Ltd.
-000ACA     (base 16)		YOKOYAMA SHOKAI CO.,Ltd.
-				6-96 Matsumura
-				Kanazawa  Ishikawa  920-0348
-				JP
-
-00-0A-CE   (hex)		RADIANTECH, INC.
-000ACE     (base 16)		RADIANTECH, INC.
-				2-1, INDUSTRY EAST RD. 1, SCIENCE-BASED
-				HSIN CHU    300
-				TW
-
-00-0A-C7   (hex)		Unication Group
-000AC7     (base 16)		Unication Group
-				3F., No. 6, Wu-Kung 5Rd., Hsinchuang Cit
-				Taipei    242
-				TW
-
-00-0A-DE   (hex)		Happy Communication Co., Ltd.
-000ADE     (base 16)		Happy Communication Co., Ltd.
-				42-11 WonMi-Dong
-				Bucheon-City  KyungGi-Do  420-110
-				KR
-
-00-0A-E2   (hex)		Binatone Electronics International, Ltd
-000AE2     (base 16)		Binatone Electronics International, Ltd
-				Floor 23A, 9 Des Voeux Road West
-				Hong Kong  China  
-				HK
-
-00-0A-DB   (hex)		Trilliant
-000ADB     (base 16)		Trilliant
-				401 Harrison Oaks Blvd. Suite 300
-				Cary  NC  27513
-				US
-
-00-0A-B8   (hex)		Cisco Systems, Inc
-000AB8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0A-AC   (hex)		TerraTec Electronic GmbH
-000AAC     (base 16)		TerraTec Electronic GmbH
-				Herrenpfad 38
-				Nettetal    41334
-				DE
-
-00-0A-BF   (hex)		HIROTA SS
-000ABF     (base 16)		HIROTA SS
-				Matukawa-Kougyoudanchi
-				Suzaka-shi  Nagano  382-0005
-				JP
-
-00-0A-BC   (hex)		Seabridge Ltd.
-000ABC     (base 16)		Seabridge Ltd.
-				3 Hanagar St.
-				Hod-Hasharon  Israel  45241
-				IL
-
-00-0A-50   (hex)		REMOTEK CORPORATION
-000A50     (base 16)		REMOTEK CORPORATION
-				6F-6, No 77, Sec 1, HSIN TAI WU ROAD,
-				HSI-CHIH  TAIPEI HSIEN  221
-				TW
-
-00-0A-58   (hex)		Freyer & Siegel Elektronik GmbH & Co. KG
-000A58     (base 16)		Freyer & Siegel Elektronik GmbH & Co. KG
-				Neuendorfstraße 18 b
-				Hennigsdorf  Brandenburg  16761
-				DE
-
-00-0A-4E   (hex)		UNITEK Electronics INC.
-000A4E     (base 16)		UNITEK Electronics INC.
-				1-18-4
-				Ohta-ku  Tokyo  143-0016
-				US
-
-00-0A-62   (hex)		Crinis Networks, Inc.
-000A62     (base 16)		Crinis Networks, Inc.
-				2099 N. Collins Blvd, Suite 200
-				Richardson  TX  75080
-				US
-
-00-0A-6A   (hex)		SVM Microwaves s.r.o.
-000A6A     (base 16)		SVM Microwaves s.r.o.
-				U Mrazovky 5
-				Praha 5    15000
-				CZ
-
-00-0A-66   (hex)		MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.
-000A66     (base 16)		MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.
-				1-4-13 OOYODONAKA,KITA-KU
-				OSAKA    531-0076
-				JP
-
-00-0A-31   (hex)		HCV Consulting
-000A31     (base 16)		HCV Consulting
-				P O Box 3692
-				Queensland     4212
-				AU
-
-00-42-52   (hex)		RLX Technologies
-004252     (base 16)		RLX Technologies
-				25231 Grograns Mill Rd
-				The Woodlands  Tx  77380
-				US
-
-00-0A-70   (hex)		MPLS Forum
-000A70     (base 16)		MPLS Forum
-				39355 California Street
-				Fremont  CA  94538
-				US
-
-00-0A-72   (hex)		STEC, INC.
-000A72     (base 16)		STEC, INC.
-				3001 Daimler Street
-				Santa Ana  CA  92705
-				US
-
-00-0A-3D   (hex)		Elo Sistemas Eletronicos S.A.
-000A3D     (base 16)		Elo Sistemas Eletronicos S.A.
-				Rua Edu Chaves, 547
-				Porto Alegre  RS  90.240-620
-				BR
-
-00-0A-46   (hex)		ARO WELDING TECHNOLOGIES SAS
-000A46     (base 16)		ARO WELDING TECHNOLOGIES SAS
-				1, avenue de Tours
-				Chateau du Loir  sarthe  72500
-				FR
-
-00-0A-71   (hex)		Avrio Technologies, Inc
-000A71     (base 16)		Avrio Technologies, Inc
-				2655 A Park Center Drive
-				Simi Valley  CA  91356
-				US
-
-00-0A-64   (hex)		Eracom Technologies
-000A64     (base 16)		Eracom Technologies
-				28 Greg Chappell Drive
-				Burleigh Heads  Qld  4220
-				AU
-
-00-0A-83   (hex)		SALTO SYSTEMS S.L.
-000A83     (base 16)		SALTO SYSTEMS S.L.
-				Arkotz, 9
-				Polígonoo Lanbarren  Oiartzun  20180
-				ES
-
-00-0A-86   (hex)		Lenze
-000A86     (base 16)		Lenze
-				PO box 101352
-				Hameln  Lower Saxony  31763
-				DE
-
-00-0A-3F   (hex)		Data East Corporation
-000A3F     (base 16)		Data East Corporation
-				4-41-10 Minami-Ogikubo
-				Suginami-ku  TOKYO  167-0052
-				JP
-
-00-0A-0C   (hex)		Scientific Research Corporation
-000A0C     (base 16)		Scientific Research Corporation
-				2300 Windy Ridge Parkway
-				Atlanta  GA  30339
-				US
-
-00-09-F6   (hex)		Shenzhen Eastern Digital Tech Ltd.
-0009F6     (base 16)		Shenzhen Eastern Digital Tech Ltd.
-				Shenzhen Futian Chegongmiao Tairan
-				Shenzhen  Guangdong  518048
-				CN
-
-00-0A-20   (hex)		SVA Networks, Inc.
-000A20     (base 16)		SVA Networks, Inc.
-				840 F Ave., Suite 104
-				Plano  TX  75074
-				US
-
-00-0A-24   (hex)		Octave Communications
-000A24     (base 16)		Octave Communications
-				85 Northwest Boulevard
-				Nashua  NH  03063
-				US
-
-00-0A-19   (hex)		Valere Power, Inc.
-000A19     (base 16)		Valere Power, Inc.
-				661 N. Plano Rd.
-				Richardson  Texas  75081
-				US
-
-00-09-DE   (hex)		Samjin Information & Communications Co., Ltd.
-0009DE     (base 16)		Samjin Information & Communications Co., Ltd.
-				MajangMyun DukPyungRi 235-2
-				Ichon  KyongGi  467-812
-				KR
-
-00-09-E0   (hex)		XEMICS S.A.
-0009E0     (base 16)		XEMICS S.A.
-				Rue de la Maladiere 71
-				CH-2007 Neuchatel  Neuchatel  2007
-				CH
-
-00-0A-01   (hex)		SOHOware, Inc.
-000A01     (base 16)		SOHOware, Inc.
-				3050 Coronado Drive
-				Santa Clara  CA  95054
-				US
-
-00-09-EC   (hex)		Daktronics, Inc.
-0009EC     (base 16)		Daktronics, Inc.
-				315 32nd Ave
-				Brookings  SD  57006
-				US
-
-00-09-EE   (hex)		MEIKYO ELECTRIC CO.,LTD
-0009EE     (base 16)		MEIKYO ELECTRIC CO.,LTD
-				4-27-2 Higashiogu
-				Arakawa-ku  Tokyo  116-0012
-				JP
-
-00-09-CA   (hex)		iMaxNetworks(Shenzhen)Limited.
-0009CA     (base 16)		iMaxNetworks(Shenzhen)Limited.
-				4/B,South Bldg of 29th,South District of
-				Shenzhen  GuangDong  518057
-				CN
-
-00-09-CF   (hex)		iAd GmbH
-0009CF     (base 16)		iAd GmbH
-				Unterschlauersbacher Hauptstraße 10
-				Grosshabersdorf  Bavaria  90613
-				DE
-
-00-0A-11   (hex)		ExPet Technologies, Inc
-000A11     (base 16)		ExPet Technologies, Inc
-				6F, Kyonggi Small Business Center
-				Suwon, Kyonggi-do, 442-270    442-770
-				KR
-
-00-0A-0F   (hex)		Ilryung Telesys, Inc
-000A0F     (base 16)		Ilryung Telesys, Inc
-				Ilryung bldg, 34-2, Cheonho-dong
-				SEOUL    134-861
-				KR
-
-00-09-E7   (hex)		ADC Techonology
-0009E7     (base 16)		ADC Techonology
-				Sakae Members Office Bld. 4-16-8, Sakae,
-				Nagoya  Aichi  4600008
-				JP
-
-00-09-93   (hex)		Visteon Corporation
-000993     (base 16)		Visteon Corporation
-				16630 Southfield Road
-				Allen Park  Michigan  48101
-				US
-
-00-09-99   (hex)		CP GEORGES RENAULT
-000999     (base 16)		CP GEORGES RENAULT
-				38 Rue Bobby Sands
-				44800  Saint Herblain  
-				FR
-
-00-09-94   (hex)		Cronyx Engineering
-000994     (base 16)		Cronyx Engineering
-				Marshala Sokolovskogo str. 4
-				Moscow    123063
-				RU
-
-00-09-B9   (hex)		Action Imaging Solutions
-0009B9     (base 16)		Action Imaging Solutions
-				Kings Hall, St Ives Business Park
-				Huntingdon  Cambridgeshire  PE27 4WY
-				GB
-
-00-09-AC   (hex)		LANVOICE
-0009AC     (base 16)		LANVOICE
-				1364-39 SeochoDong, #201 Jihun Bldg
-				Seoul    137-072
-				KR
-
-00-09-B1   (hex)		Kanematsu Electronics, Ltd.
-0009B1     (base 16)		Kanematsu Electronics, Ltd.
-				17-5, Kyobashi 2-chome
-				Chuo-ku  Tokyo  104-8338
-				JP
-
-00-09-79   (hex)		Advanced Television Systems Committee, Inc.
-000979     (base 16)		Advanced Television Systems Committee, Inc.
-				1750 K Street NW
-				Washington  DC  20006
-				US
-
-00-09-63   (hex)		Dominion Lasercom Inc.
-000963     (base 16)		Dominion Lasercom Inc.
-				1716 Briarcrest Dr. Ste. 210
-				Bryan  TX  77802
-				US
-
-00-09-66   (hex)		TRIMBLE EUROPE BV
-000966     (base 16)		TRIMBLE EUROPE BV
-				Meerheide 45
-				Eersel  DZ  5521
-				NL
-
-00-09-C1   (hex)		PROCES-DATA A/S
-0009C1     (base 16)		PROCES-DATA A/S
-				Navervej 8
-				Silkeborg    DK-8600
-				DK
-
-00-09-BB   (hex)		MathStar, Inc.
-0009BB     (base 16)		MathStar, Inc.
-				5900 Green Oak Drive
-				Minneapolis  MN  55343
-				US
-
-00-09-68   (hex)		TECHNOVENTURE, INC.
-000968     (base 16)		TECHNOVENTURE, INC.
-				P. O. Box 5641
-				Pasadena  Texas  77508-5641
-				US
-
-00-09-61   (hex)		Switchgear and Instrumentation Ltd
-000961     (base 16)		Switchgear and Instrumentation Ltd
-				Ripley Road
-				Bradford  West Yorkshire  BD4 7EH
-				GB
-
-00-09-7C   (hex)		Cisco Systems, Inc
-00097C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-7B   (hex)		Cisco Systems, Inc
-00097B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-9D   (hex)		Haliplex Communications
-00099D     (base 16)		Haliplex Communications
-				PO Box 147
-				Mooroolbark  Vic  3138
-				AU
-
-00-09-9E   (hex)		Testech, Inc.
-00099E     (base 16)		Testech, Inc.
-				Bundang-Technopark, C-Dong, 702-Ho, #145
-				Sungnam-City  Kyungki-Do  463-070
-				KR
-
-00-09-88   (hex)		Nudian Electron Co., Ltd.
-000988     (base 16)		Nudian Electron Co., Ltd.
-				797-28 Bangbae-Dong, Seocho-Gu
-				Seoul    137-060
-				KR
-
-00-09-8E   (hex)		ipcas GmbH
-00098E     (base 16)		ipcas GmbH
-				Wetterkreuz 17
-				Erlangen  Bavaria  91058
-				DE
-
-00-09-AB   (hex)		Netcontrol Oy
-0009AB     (base 16)		Netcontrol Oy
-				Karvaamokuja 3
-				Helsinki    FIN 00380
-				FI
-
-00-09-60   (hex)		YOZAN Inc.
-000960     (base 16)		YOZAN Inc.
-				YOZAN Bld.,3-5-18, Kitazawa
-				Setagaya-ku  Tokyo  155-0031
-				JP
-
-00-09-56   (hex)		Network Systems Group, Ltd. (NSG)
-000956     (base 16)		Network Systems Group, Ltd. (NSG)
-				39 Kirpichnaya St., Suite 1302
-				Moscow    105187
-				RU
-
-00-09-00   (hex)		TMT
-000900     (base 16)		TMT
-				11 Kiryat Mada, POB 45199
-				Jerusalem    91450
-				IL
-
-00-09-01   (hex)		Shenzhen Shixuntong Information & Technoligy Co
-000901     (base 16)		Shenzhen Shixuntong Information & Technoligy Co
-				Room 403,617 Bldg;Bagua 1 Road ,Shenzhen
-				Shenzhen  Guangdong  518029
-				CN
-
-00-09-13   (hex)		SystemK Corporation
-000913     (base 16)		SystemK Corporation
-				238-9 Higashi 1, Kita 15, Higashi-ku
-				Sapporo  Hokkaido  065-0015
-				JP
-
-00-09-0E   (hex)		Helix Technology Inc.
-00090E     (base 16)		Helix Technology Inc.
-				5F, No. 6, Sec 1, Jung-Shing Rd., Wugu-S
-				Taipei    248
-				TW
-
-00-09-3C   (hex)		Jacques Technologies P/L
-00093C     (base 16)		Jacques Technologies P/L
-				268 Montague Rd
-				West End  Queensland  4101
-				AU
-
-00-09-35   (hex)		Sandvine Incorporated
-000935     (base 16)		Sandvine Incorporated
-				170 Columbia St. W.
-				Waterloo  ON  N2L 3L3
-				CA
-
-00-09-36   (hex)		Ipetronik GmbH & Co. KG
-000936     (base 16)		Ipetronik GmbH & Co. KG
-				Im Rollfeld 28
-				Baden-Baden  Baden-Württemberg  76532
-				DE
-
-00-09-37   (hex)		Inventec Appliance Corp
-000937     (base 16)		Inventec Appliance Corp
-				113, Wugung 1 RD., WuKu Industrial nPark
-				Taipei    
-				TW
-
-00-09-46   (hex)		Cluster Labs GmbH
-000946     (base 16)		Cluster Labs GmbH
-				Dauerwaldweg 1
-				Berlin  Berlin  14055
-				DE
-
-00-09-3F   (hex)		Double-Win Enterpirse CO., LTD
-00093F     (base 16)		Double-Win Enterpirse CO., LTD
-				NO.300, Sec 1, Chung Feng Rd.
-				Ping Chen City  Taoyuan Hsien  324
-				TW
-
-00-09-48   (hex)		Vista Control Systems, Corp.
-000948     (base 16)		Vista Control Systems, Corp.
-				2001 West Melinda Lane
-				Phoenix  AZ  85027
-				US
-
-00-09-49   (hex)		Glyph Technologies Inc.
-000949     (base 16)		Glyph Technologies Inc.
-				735 W. Clinton Street
-				Ithaca  NY  14850
-				US
-
-00-09-2A   (hex)		MYTECS Co.,Ltd.
-00092A     (base 16)		MYTECS Co.,Ltd.
-				1-12-39, Taishidou
-				Setagaya-ku  Tokyo  154-0004
-				JP
-
-00-09-25   (hex)		VSN Systemen BV
-000925     (base 16)		VSN Systemen BV
-				Keizersveld 83
-				Venray  Limburg  5803 AP
-				NL
-
-00-08-E0   (hex)		ATO Technology Ltd.
-0008E0     (base 16)		ATO Technology Ltd.
-				Rm. 1314-1346, Block B1, Yau Tong Ind. C
-				Hong Kong    
-				HK
-
-00-08-E4   (hex)		Envenergy Inc
-0008E4     (base 16)		Envenergy Inc
-				6307 Carpinteria Ave
-				Carpinteria  CA  93013
-				US
-
-00-08-E3   (hex)		Cisco Systems, Inc
-0008E3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-E5   (hex)		IDK Corporation
-0008E5     (base 16)		IDK Corporation
-				6-7-10
-				Yamato  Kanagawa  242-0007
-				JP
-
-00-08-D9   (hex)		Mitadenshi Co.,LTD
-0008D9     (base 16)		Mitadenshi Co.,LTD
-				1-8-6 Furuichi Asaminamiku
-				Hiroshima    731-0123
-				JP
-
-00-08-91   (hex)		Lyan Inc.
-000891     (base 16)		Lyan Inc.
-				5F-1, NO.51, SEC.2, KEELUNG RD.
-				TAIPEI    110
-				TW
-
-00-08-92   (hex)		EM Solutions
-000892     (base 16)		EM Solutions
-				101 Hyde Rd
-				Yeronga  Brisbane, QLD  4104
-				AU
-
-00-08-8C   (hex)		Quanta Network Systems Inc.
-00088C     (base 16)		Quanta Network Systems Inc.
-				13, 13F, Sec. 2, Pei-Tou Rd
-				Taipei    112
-				TW
-
-00-08-8A   (hex)		Minds@Work
-00088A     (base 16)		Minds@Work
-				15550 Rockfield Blvd. Suite C
-				Irvine  CA  92618
-				US
-
-00-08-FD   (hex)		BlueKorea Co., Ltd.
-0008FD     (base 16)		BlueKorea Co., Ltd.
-				3F, sejong Building, 379-15, Seokyo-Dong
-				Seoul    121-839
-				KR
-
-00-08-F8   (hex)		UTC CCS
-0008F8     (base 16)		UTC CCS
-				791 Commerce Blvd
-				Boca Raton  FL  33497
-				US
-
-00-08-D5   (hex)		Vanguard Networks Solutions, LLC
-0008D5     (base 16)		Vanguard Networks Solutions, LLC
-				25 Forbes Boulevard
-				Foxboro  MA  02035
-				US
-
-00-08-CD   (hex)		With-Net Inc
-0008CD     (base 16)		With-Net Inc
-				4FL B&B B/D 1403-4
-				Anyang  Kyonggi  431-061
-				US
-
-00-08-CC   (hex)		Remotec, Inc.
-0008CC     (base 16)		Remotec, Inc.
-				114 Union Valley Road
-				Oakridge  TN  37830
-				US
-
-00-08-D1   (hex)		KAREL INC.
-0008D1     (base 16)		KAREL INC.
-				ORGANIZE SANAYI BOLGESI
-				ANKARA    06935
-				TR
-
-00-08-A7   (hex)		iLogic Inc.
-0008A7     (base 16)		iLogic Inc.
-				Rm#318, TechnoComplex Bldg., 126-16, 5-g
-				Seoul    136-701
-				KR
-
-00-08-99   (hex)		Netbind, Inc.
-000899     (base 16)		Netbind, Inc.
-				5 Marine View Plaza
-				Hoboken  NJ  07030
-				US
-
-00-08-A0   (hex)		Stotz Feinmesstechnik GmbH
-0008A0     (base 16)		Stotz Feinmesstechnik GmbH
-				Hermann-Dreher Str. 6
-				Gerlingen    70839
-				DE
-
-00-08-BC   (hex)		Ilevo AB
-0008BC     (base 16)		Ilevo AB
-				Box 1561
-				Karlstad  Värmland  S-651 21
-				SE
-
-00-08-BD   (hex)		TEPG-US
-0008BD     (base 16)		TEPG-US
-				100 Simplex Drive
-				Westminster  MA  01441
-				US
-
-00-08-AE   (hex)		PacketFront Network Products AB
-0008AE     (base 16)		PacketFront Network Products AB
-				PO 1217
-				Kistagangen 2, IV  Kista Stockholm SE -16428  
-				SE
-
-00-08-C3   (hex)		Contex A/S
-0008C3     (base 16)		Contex A/S
-				Svanevang 2
-				Allerod  DK  3450
-				DK
-
-00-08-F3   (hex)		WANY
-0008F3     (base 16)		WANY
-				CEEI Cap Alpha
-				Montpellier  Herault  34940
-				FR
-
-00-08-DE   (hex)		3UP Systems
-0008DE     (base 16)		3UP Systems
-				6 Results Way
-				Cupertino  CA  95014
-				US
-
-00-08-22   (hex)		InPro Comm
-000822     (base 16)		InPro Comm
-				11F, No. 93 Shuei-Yuan Street
-				    
-				TW
-
-00-08-23   (hex)		Texa Corp.
-000823     (base 16)		Texa Corp.
-				Nara Bldg. 3F, 2-2-8 Shin-Yokohama,
-				    222-0033
-				JP
-
-00-08-1D   (hex)		Ipsil, Incorporated
-00081D     (base 16)		Ipsil, Incorporated
-				7945 MacArthur Blvd.
-				Cabin John  MD  20818
-				US
-
-00-08-2D   (hex)		Indus Teqsite Private Limited
-00082D     (base 16)		Indus Teqsite Private Limited
-				#7, Arya Gowder Road,
-				Tamil Nadu    600033
-				IN
-
-00-08-20   (hex)		Cisco Systems, Inc
-000820     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-28   (hex)		Koei Engineering Ltd.
-000828     (base 16)		Koei Engineering Ltd.
-				3-40, 5-Chome
-				Osaku    547-0026
-				JP
-
-00-08-24   (hex)		Nuance Document Imaging
-000824     (base 16)		Nuance Document Imaging
-				8390 Mayrand Street
-				Montreal   Quebec  H4P 2C9
-				CA
-
-00-08-6C   (hex)		Plasmon LMS
-00086C     (base 16)		Plasmon LMS
-				4425 ArrowsWest Drive
-				Colorado Springs  CO  80907
-				US
-
-00-08-68   (hex)		PurOptix
-000868     (base 16)		PurOptix
-				1945 Camino Vida Roble
-				Carlsbad  CA  92008
-				US
-
-00-08-69   (hex)		Command-e Technology Co.,Ltd.
-000869     (base 16)		Command-e Technology Co.,Ltd.
-				Suite 1108, Zhongsheng Mansion,
-				Beijing    100038
-				CN
-
-00-08-62   (hex)		NEC Eluminant Technologies, Inc.
-000862     (base 16)		NEC Eluminant Technologies, Inc.
-				14700 Avion Parkway
-				Chantilly  VA  20151
-				US
-
-00-08-03   (hex)		Cos Tron
-000803     (base 16)		Cos Tron
-				4F Boolim B/D, 1431-22,
-				Anyang    431-061
-				KR
-
-00-08-05   (hex)		Techno-Holon Corporation
-000805     (base 16)		Techno-Holon Corporation
-				3-19-2, Takamatsu-cho
-				Tokyo    190-0011
-				JP
-
-00-08-08   (hex)		PPT Vision, Inc.
-000808     (base 16)		PPT Vision, Inc.
-				12988 Valley View Rd.
-				Eden Prairie  MN  55344
-				US
-
-00-08-14   (hex)		TIL Technologies
-000814     (base 16)		TIL Technologies
-				Europark DePichaury, BAT 9
-				    
-				FR
-
-00-08-5C   (hex)		Shanghai Dare Technologies Co. Ltd.
-00085C     (base 16)		Shanghai Dare Technologies Co. Ltd.
-				23F, China Merchants Tower,
-				Pudong New Area,  Shanghai  
-				CN
-
-00-08-2C   (hex)		Homag AG
-00082C     (base 16)		Homag AG
-				Abt. Ess-Mp., Homag Str. 3-5
-				    
-				DE
-
-00-08-21   (hex)		Cisco Systems, Inc
-000821     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-87   (hex)		Maschinenfabrik Reinhausen GmbH
-000887     (base 16)		Maschinenfabrik Reinhausen GmbH
-				Falkensteinstraße 8
-				Regensburg  Bavaria  93059
-				DE
-
-00-08-77   (hex)		Liebert-Hiross Spa
-000877     (base 16)		Liebert-Hiross Spa
-				Via Leonardo da Vinci 8
-				Piove di Sacco  Z.I. Tognana  35020
-				IT
-
-00-08-7B   (hex)		RTX Telecom A/S
-00087B     (base 16)		RTX Telecom A/S
-				Stroemmen 6
-				    
-				DK
-
-00-08-61   (hex)		SoftEnergy Co., Ltd.
-000861     (base 16)		SoftEnergy Co., Ltd.
-				346 Sangwangsipli-Dong,
-				    
-				KR
-
-00-08-4F   (hex)		Qualstar Corporation
-00084F     (base 16)		Qualstar Corporation
-				3990B Heritage Oak Court
-				Simi Valley  CA  93063
-				US
-
-00-08-54   (hex)		Netronix, Inc.
-000854     (base 16)		Netronix, Inc.
-				3F-1, No. 31, Hsin-Tai Road,
-				    
-				TW
-
-00-08-76   (hex)		SDSystem
-000876     (base 16)		SDSystem
-				613,Hyundai I Valley,223-12,
-				Seongnam  Gyeonggi-Do  462-807
-				KR
-
-00-08-70   (hex)		Rasvia Systems, Inc.
-000870     (base 16)		Rasvia Systems, Inc.
-				3255-3 Scott Blvd.
-				Santa Clara  CA  95054
-				US
-
-00-08-6E   (hex)		Hyglo AB
-00086E     (base 16)		Hyglo AB
-				Vastberga alle 60
-				    
-				SE
-
-00-07-FD   (hex)		LANergy Ltd.
-0007FD     (base 16)		LANergy Ltd.
-				Rudloe Manor
-				    
-				GB
-
-00-07-FE   (hex)		Rigaku Corporation
-0007FE     (base 16)		Rigaku Corporation
-				3-9-12, Matsubara-cho
-				Tokyo    196-8666
-				JP
-
-00-07-BF   (hex)		Armillaire Technologies, Inc.
-0007BF     (base 16)		Armillaire Technologies, Inc.
-				10411 Motor City Drive
-				Bethesda  MD  20817
-				US
-
-00-07-BB   (hex)		Candera Inc.
-0007BB     (base 16)		Candera Inc.
-				673 South Milpitas Blvd.
-				Milpitas  CA  95035
-				US
-
-00-07-BD   (hex)		Radionet Ltd.
-0007BD     (base 16)		Radionet Ltd.
-				Keilaranta 6
-				    
-				FI
-
-00-07-C4   (hex)		JEAN Co. Ltd.
-0007C4     (base 16)		JEAN Co. Ltd.
-				7F, 2, Rei Kuang Road,
-				Taipei    
-				TW
-
-00-07-B6   (hex)		Telecom Technology Ltd.
-0007B6     (base 16)		Telecom Technology Ltd.
-				Docklands Innovation Park
-				Dublin 3    
-				IE
-
-00-07-B7   (hex)		Samurai Ind. Prods Eletronicos Ltda
-0007B7     (base 16)		Samurai Ind. Prods Eletronicos Ltda
-				R-Nebraska, 443 S/2 2o Andar
-				    04560-011
-				BR
-
-00-07-B0   (hex)		Office Details, Inc.
-0007B0     (base 16)		Office Details, Inc.
-				25 Ottawa
-				Grand Rapids  MI  49503
-				US
-
-00-07-D9   (hex)		Splicecom
-0007D9     (base 16)		Splicecom
-				Little Gillions, The Green
-				Herts    WD3 3HY
-				GB
-
-00-07-DA   (hex)		Neuro Telecom Co., Ltd.
-0007DA     (base 16)		Neuro Telecom Co., Ltd.
-				2F Misung B/D, 938-7
-				Kyunggi-do    
-				KR
-
-00-07-CD   (hex)		Kumoh Electronic Co, Ltd
-0007CD     (base 16)		Kumoh Electronic Co, Ltd
-				154-2 Chunui-dong
-				Gyeonggi-do    
-				KR
-
-00-07-CF   (hex)		Anoto AB
-0007CF     (base 16)		Anoto AB
-				Solvegatan 41
-				    
-				SE
-
-00-07-D2   (hex)		Logopak Systeme GmbH & Co. KG
-0007D2     (base 16)		Logopak Systeme GmbH & Co. KG
-				Dorfstraße 40
-				    
-				DE
-
-00-07-C9   (hex)		Technol Seven Co., Ltd.
-0007C9     (base 16)		Technol Seven Co., Ltd.
-				25-16 Tobehon-cho, Nisi-ku,
-				    
-				JP
-
-00-07-C7   (hex)		Synectics Systems Limited
-0007C7     (base 16)		Synectics Systems Limited
-				3 Acorn Business Park
-				    S8 OTB
-				GB
-
-00-07-C3   (hex)		Thomson
-0007C3     (base 16)		Thomson
-				5-7, rue Salomon de Rothschild
-				    92150
-				FR
-
-00-07-A5   (hex)		Y.D.K Co. Ltd.
-0007A5     (base 16)		Y.D.K Co. Ltd.
-				1705, Oshitate, Inagi-City,
-				    
-				JP
-
-00-07-9C   (hex)		Golden Electronics Technology Co., Ltd.
-00079C     (base 16)		Golden Electronics Technology Co., Ltd.
-				No. 29, 21st Road,
-				    
-				TW
-
-00-07-E4   (hex)		SoftRadio Co., Ltd.
-0007E4     (base 16)		SoftRadio Co., Ltd.
-				2F, Dong-Bok B/D 645-18
-				Seoul    
-				KR
-
-00-07-54   (hex)		Xyterra Computing, Inc.
-000754     (base 16)		Xyterra Computing, Inc.
-				14505 Hayden Rd.,
-				Scottsdale  AZ  85260-6953
-				US
-
-00-07-57   (hex)		Topcall International AG
-000757     (base 16)		Topcall International AG
-				Talpagasse 1
-				    
-				AT
-
-00-07-53   (hex)		Beijing Qxcomm Technology Co., Ltd.
-000753     (base 16)		Beijing Qxcomm Technology Co., Ltd.
-				4F Tower B, TongTai Building No. 33,
-				Beijing 100032    
-				CN
-
-00-07-4C   (hex)		Beicom Inc.
-00074C     (base 16)		Beicom Inc.
-				114 King Street
-				Alexandria  VA  22314
-				US
-
-00-07-4D   (hex)		Zebra Technologies Corp.
-00074D     (base 16)		Zebra Technologies Corp.
-				333 Corporate Woods Parkway
-				Vernon Hills  IL  60061
-				US
-
-00-07-32   (hex)		AAEON Technology Inc.
-000732     (base 16)		AAEON Technology Inc.
-				5F, #135, Lane 235, Pao Chiao Road
-				Taipei    
-				TW
-
-00-07-25   (hex)		Bematech International Corp.
-000725     (base 16)		Bematech International Corp.
-				5895 Shiloh Road
-				Alpharetta  GA  30005
-				US
-
-00-07-23   (hex)		ELCON Systemtechnik GmbH
-000723     (base 16)		ELCON Systemtechnik GmbH
-				Obere Hauptstraße10
-				    
-				DE
-
-00-07-1D   (hex)		Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.
-00071D     (base 16)		Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.
-				c/, Alejandro Moran, 56
-				    
-				ES
-
-00-07-20   (hex)		Trutzschler GmbH & Co. KG
-000720     (base 16)		Trutzschler GmbH & Co. KG
-				Duvenstraße 82-92
-				    
-				DE
-
-00-07-6E   (hex)		Sinetica Corporation Limited
-00076E     (base 16)		Sinetica Corporation Limited
-				Willow House
-				Monmouthshire  Usk  NP15 1HY
-				GB
-
-00-07-6F   (hex)		Synoptics Limited
-00076F     (base 16)		Synoptics Limited
-				Beacon House, Nuffield Road,
-				    
-				GB
-
-00-07-73   (hex)		Ascom Powerline Communications Ltd.
-000773     (base 16)		Ascom Powerline Communications Ltd.
-				Belpstr. 37
-				    
-				CH
-
-00-07-6C   (hex)		Daehanet, Inc.
-00076C     (base 16)		Daehanet, Inc.
-				#8-2 Chung Jung Rd 2- Ga
-				Seoul    120-012
-				KR
-
-00-07-5D   (hex)		Celleritas Inc.
-00075D     (base 16)		Celleritas Inc.
-				c/o Celeritas Ltd.
-				    
-				IL
-
-00-07-3F   (hex)		Woojyun Systec Co., Ltd.
-00073F     (base 16)		Woojyun Systec Co., Ltd.
-				4F Han Yang B/D, Yoido-dong
-				Seoul    150-010
-				KR
-
-00-07-28   (hex)		Neo Telecom
-000728     (base 16)		Neo Telecom
-				East Building 9F, 1T
-				Songpa-gu, Seoul    
-				KR
-
-00-07-2C   (hex)		Fabricom
-00072C     (base 16)		Fabricom
-				Rue Gatti De Gamond 254
-				    
-				BE
-
-00-07-2D   (hex)		CNSystems
-00072D     (base 16)		CNSystems
-				Baumkircherstrasse 1
-				    
-				AT
-
-00-07-2F   (hex)		Intransa, Inc.
-00072F     (base 16)		Intransa, Inc.
-				2670 Zanker
-				San Jose  CA  95134
-				US
-
-00-07-80   (hex)		Bluegiga Technologies OY
-000780     (base 16)		Bluegiga Technologies OY
-				P.O. BOX 120
-				FIN-02631  Espoo  
-				FI
-
-00-07-77   (hex)		Motah Ltd.
-000777     (base 16)		Motah Ltd.
-				4-4-5 Koishikawa
-				    112-0002
-				JP
-
-00-07-24   (hex)		Telemax Co., Ltd.
-000724     (base 16)		Telemax Co., Ltd.
-				6th Fl. Sungwoo B/D, 1099-1
-				Kyungki-Do,    435-040
-				KR
-
-00-07-1B   (hex)		CDVI Americas Ltd
-00071B     (base 16)		CDVI Americas Ltd
-				1637 Autoroute Laval West
-				Laval  Quebec  H7L 3W3
-				CA
-
-00-07-15   (hex)		General Research of Electronics, Inc.
-000715     (base 16)		General Research of Electronics, Inc.
-				3-12-17, Mita, Minato-ku
-				Tokyo    108-0073
-				JP
-
-00-07-37   (hex)		Soriya Co. Ltd.
-000737     (base 16)		Soriya Co. Ltd.
-				2, 8th Floor Hanshin B/O, 136-1,
-				Seoul,    
-				KR
-
-00-07-34   (hex)		ONStor, Inc.
-000734     (base 16)		ONStor, Inc.
-				130-B Knowles Drive
-				Los Gatos  CA  95032
-				US
-
-00-07-65   (hex)		Jade Quantum Technologies, Inc.
-000765     (base 16)		Jade Quantum Technologies, Inc.
-				5F, No. 116, Hsien Fu Rd.,
-				    
-				TW
-
-00-05-EA   (hex)		Rednix
-0005EA     (base 16)		Rednix
-				502, Dong-A Resort Officetel
-				Taejon    305-709
-				KR
-
-00-06-C9   (hex)		Technical Marketing Research, Inc.
-0006C9     (base 16)		Technical Marketing Research, Inc.
-				Shin Nihon Gijutsu Bldg.
-				Tokyo 105-0012    105-0012
-				JP
-
-00-06-C8   (hex)		Sumitomo Metal Micro Devices, Inc.
-0006C8     (base 16)		Sumitomo Metal Micro Devices, Inc.
-				1, Higashimukojima Higashino-cho
-				    
-				JP
-
-00-06-F1   (hex)		Optillion
-0006F1     (base 16)		Optillion
-				Kronborgsgr.9
-				    
-				SE
-
-00-06-A7   (hex)		Primarion
-0006A7     (base 16)		Primarion
-				3450 Torrance Blvd.
-				Torrance  CA  90503
-				US
-
-00-06-A9   (hex)		Universal Instruments Corp.
-0006A9     (base 16)		Universal Instruments Corp.
-				PO Box 825
-				Binghamton  NY  13902
-				US
-
-00-06-9E   (hex)		UNIQA, Inc.
-00069E     (base 16)		UNIQA, Inc.
-				477 Valley Way
-				Milpitas  CA  95035
-				US
-
-00-06-B1   (hex)		Sonicwall
-0006B1     (base 16)		Sonicwall
-				1160 Bordeaux Dr.
-				Sunnyvale  CA  94089
-				US
-
-00-06-AD   (hex)		KB Electronics Ltd.
-0006AD     (base 16)		KB Electronics Ltd.
-				150 Bluewater Rd.
-				    B4B 1G9
-				CA
-
-00-06-AF   (hex)		Xalted Networks
-0006AF     (base 16)		Xalted Networks
-				2901 Dallas Parkway
-				Plano  TX  75093
-				US
-
-00-06-D7   (hex)		Cisco Systems, Inc
-0006D7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-06-D5   (hex)		Diamond Systems Corp.
-0006D5     (base 16)		Diamond Systems Corp.
-				8430-D Central Ave.
-				Newark  CA  94560
-				US
-
-00-06-FD   (hex)		Comjet Information Systems Corp.
-0006FD     (base 16)		Comjet Information Systems Corp.
-				7Fl., No. 103, Fen Liao Street
-				    
-				TW
-
-00-06-F9   (hex)		Mitsui Zosen Systems Research Inc.
-0006F9     (base 16)		Mitsui Zosen Systems Research Inc.
-				11-1, Uno 1-chome
-				    706-0011
-				JP
-
-00-06-C0   (hex)		United Internetworks, Inc.
-0006C0     (base 16)		United Internetworks, Inc.
-				5072 North 300 West, Suite 2N
-				Provo  UT  84604
-				US
-
-00-06-E0   (hex)		MAT Co., Ltd.
-0006E0     (base 16)		MAT Co., Ltd.
-				864-3 Kwanyang-dong
-				Kyunggi-do    431-060
-				KR
-
-00-D0-B9   (hex)		MICROTEK INTERNATIONAL, INC.
-00D0B9     (base 16)		MICROTEK INTERNATIONAL, INC.
-				NO. 6 INDUSTRY EAST ROAD 3
-				TAIWAN 30077  TAIWAN 30077  R.O.C.
-				TW
-
-00-D0-5F   (hex)		VALCOM, INC.
-00D05F     (base 16)		VALCOM, INC.
-				1111 INDUSTRY AVENUE
-				ROANOKE  VA  24013
-				US
-
-00-06-75   (hex)		Banderacom, Inc.
-000675     (base 16)		Banderacom, Inc.
-				9211 Waterford Centre Blvd.
-				Austin  TX  78758
-				US
-
-00-06-98   (hex)		egnite GmbH
-000698     (base 16)		egnite GmbH
-				Erinstraße 9
-				Castrop-Rauxel    D-44575
-				DE
-
-00-06-9C   (hex)		Transmode Systems AB
-00069C     (base 16)		Transmode Systems AB
-				Jakobsdalsvagen 17
-				  Hägersten  SE-126 53
-				SE
-
-00-06-43   (hex)		SONO Computer Co., Ltd.
-000643     (base 16)		SONO Computer Co., Ltd.
-				1F., No. 8, Alley 35, Lane 91,
-				Taipei    
-				TW
-
-00-06-49   (hex)		3M Deutschland GmbH
-000649     (base 16)		3M Deutschland GmbH
-				Carl-Schurz-Str. 1
-				Neuss    D-41453
-				DE
-
-00-06-3E   (hex)		Opthos Inc.
-00063E     (base 16)		Opthos Inc.
-				590 Taylor Way
-				San Carlos  CA  94070
-				US
-
-00-06-3B   (hex)		Arcturus Networks Inc.
-00063B     (base 16)		Arcturus Networks Inc.
-				701 Evans Ave. - Suite 300
-				Toronto  Ontario  M9C 1A3
-				CA
-
-00-06-7B   (hex)		Toplink C&C Corporation
-00067B     (base 16)		Toplink C&C Corporation
-				6F-15, No. 12, Lane 609, Sec. 5
-				Taipei Hsien 241    
-				TW
-
-00-06-70   (hex)		Upponetti Oy
-000670     (base 16)		Upponetti Oy
-				Tykistokatu 4D
-				    
-				FI
-
-00-06-6F   (hex)		Korea Data Systems
-00066F     (base 16)		Korea Data Systems
-				170, Gongdan-Dong, Gumi-Si
-				Kyungbuk    730-030
-				KR
-
-00-06-68   (hex)		Vicon Industries Inc.
-000668     (base 16)		Vicon Industries Inc.
-				89 Arkay Drive
-				Hauppauge  NY  11788
-				US
-
-00-06-6D   (hex)		Compuprint S.P.A.
-00066D     (base 16)		Compuprint S.P.A.
-				Via Martiri D'Italia 26
-				    
-				IT
-
-00-06-26   (hex)		MWE GmbH
-000626     (base 16)		MWE GmbH
-				Olbrichtstraße 21
-				    
-				DE
-
-00-06-20   (hex)		Serial System Ltd.
-000620     (base 16)		Serial System Ltd.
-				76 Playfair Road
-				    367996
-				SG
-
-00-06-18   (hex)		DigiPower Manufacturing Inc.
-000618     (base 16)		DigiPower Manufacturing Inc.
-				No. 114, Floor 13, Sec. 1,
-				Taipei    
-				TW
-
-00-06-33   (hex)		Cross Match Technologies GmbH
-000633     (base 16)		Cross Match Technologies GmbH
-				Unstrutweg 4
-				  Jena  07743
-				DE
-
-00-06-86   (hex)		ZARDCOM Co., Ltd.
-000686     (base 16)		ZARDCOM Co., Ltd.
-				4F, 1548-1, Seocho Dong, Seocho-Gu
-				Seoul    
-				KR
-
-00-06-89   (hex)		yLez Technologies Pte Ltd
-000689     (base 16)		yLez Technologies Pte Ltd
-				No. 1, Tannery Road, Cencon 1,
-				    
-				SG
-
-00-06-81   (hex)		Goepel Electronic GmbH
-000681     (base 16)		Goepel Electronic GmbH
-				Goeschwitzer Str. 58-60
-				    
-				DE
-
-00-06-58   (hex)		Helmut Fischer GmbH Institut für Elektronik und Messtechnik
-000658     (base 16)		Helmut Fischer GmbH Institut für Elektronik und Messtechnik
-				Industriestraße 21
-				    
-				DE
-
-00-05-D3   (hex)		eProduction Solutions, Inc.
-0005D3     (base 16)		eProduction Solutions, Inc.
-				22001 North Park Drive
-				Kingwood  TX  77339-3804
-				US
-
-00-06-04   (hex)		@Track Communications, Inc.
-000604     (base 16)		@Track Communications, Inc.
-				1155 Kas Dr.
-				Richardson  TX  75081
-				US
-
-00-06-06   (hex)		RapidWAN, Inc.
-000606     (base 16)		RapidWAN, Inc.
-				2085 Hamilton Ave.
-				San Jose  CA  95125
-				US
-
-00-06-03   (hex)		Baker Hughes Inc.
-000603     (base 16)		Baker Hughes Inc.
-				2001 Rankin Rd.
-				Houston  TX  77073
-				US
-
-00-06-07   (hex)		Omni Directional Control Technology Inc.
-000607     (base 16)		Omni Directional Control Technology Inc.
-				8F-2, No. 94, Pao-Chung Rd.
-				Taipei  Hsien,  
-				TW
-
-00-05-F7   (hex)		Analog Devices, Inc.
-0005F7     (base 16)		Analog Devices, Inc.
-				Three Technology Way
-				Norwood   MA  02062-2666
-				US
-
-00-05-9C   (hex)		Kleinknecht GmbH, Ing. Büro
-00059C     (base 16)		Kleinknecht GmbH, Ing. Büro
-				Bachstraße 30
-				    
-				DE
-
-00-05-AE   (hex)		Mediaport USA
-0005AE     (base 16)		Mediaport USA
-				17151 Newhope Ave. #202
-				Fountain Valley  CA  92708
-				US
-
-00-05-B0   (hex)		Korea Computer Technology Co., Ltd.
-0005B0     (base 16)		Korea Computer Technology Co., Ltd.
-				KCT Bldg, 111-3 Yangjae-Dong,
-				    
-				KR
-
-00-05-B2   (hex)		Medison Co., Ltd.
-0005B2     (base 16)		Medison Co., Ltd.
-				997-4, Saechi-Dong,
-				    135-280
-				KR
-
-00-05-97   (hex)		Eagle Traffic Control Systems
-000597     (base 16)		Eagle Traffic Control Systems
-				8004 Cameron Road
-				Austin  TX  78754
-				US
-
-00-05-B5   (hex)		Broadcom Technologies
-0005B5     (base 16)		Broadcom Technologies
-				137-060
-				Secho-Gu  Seoul,  
-				KR
-
-00-05-CB   (hex)		ROIS Technologies, Inc.
-0005CB     (base 16)		ROIS Technologies, Inc.
-				6th F Changhyun B/D, 960-1
-				    431-080
-				KR
-
-00-05-C8   (hex)		VERYTECH
-0005C8     (base 16)		VERYTECH
-				#402, Jang Young Shil Kwan,
-				    
-				KR
-
-00-05-CD   (hex)		D&M Holdings Inc.
-0005CD     (base 16)		D&M Holdings Inc.
-				D&M Building, 2-1 Nisshin-cho
-				Kawasaki-shi  Kanagawa   210-8569
-				JP
-
-00-05-A2   (hex)		CELOX Networks
-0005A2     (base 16)		CELOX Networks
-				940 West Port Plaza - Ste. #300
-				St. Louis  MO  63146
-				US
-
-00-05-AA   (hex)		Moore Industries International Inc.
-0005AA     (base 16)		Moore Industries International Inc.
-				16650 Schoenborn St.
-				North Hills  CA  91343
-				US
-
-00-05-E7   (hex)		Netrake an AudioCodes Company
-0005E7     (base 16)		Netrake an AudioCodes Company
-				3000 Technology Drive
-				Plano  TX  75074
-				US
-
-00-05-F4   (hex)		System Base Co., Ltd.
-0005F4     (base 16)		System Base Co., Ltd.
-				475-22, BangBae 2 dong,
-				    
-				KR
-
-00-05-E1   (hex)		Trellis Photonics, Ltd.
-0005E1     (base 16)		Trellis Photonics, Ltd.
-				P.O.B. 36
-				    
-				IL
-
-00-05-E2   (hex)		Creativ Network Technologies
-0005E2     (base 16)		Creativ Network Technologies
-				1755 St. Regis Suite 240
-				  Quebec  H9B-2M9
-				CA
-
-00-06-13   (hex)		Kawasaki Microelectronics Incorporated
-000613     (base 16)		Kawasaki Microelectronics Incorporated
-				MTG B-5, 1-3, Nakase,
-				Mihama-ku  Chiba  261-8501
-				JP
-
-00-06-17   (hex)		Redswitch Inc.
-000617     (base 16)		Redswitch Inc.
-				1815 McCandless Drive
-				Milpitas  CA  95035-8046
-				US
-
-00-05-51   (hex)		F & S Elektronik Systeme GmbH
-000551     (base 16)		F & S Elektronik Systeme GmbH
-				Untere Waldplaetze 23
-				Stuttgart    70569
-				DE
-
-00-05-4D   (hex)		Brans Technologies, Inc.
-00054D     (base 16)		Brans Technologies, Inc.
-				501 Boramae Academy Tower
-				    
-				KR
-
-00-05-47   (hex)		Starent Networks
-000547     (base 16)		Starent Networks
-				30 International Place
-				Tewksbury  MA  01876
-				US
-
-00-05-4E   (hex)		Philips
-00054E     (base 16)		Philips
-				1000 West Maude Avenue
-				Sunnyvale  CA  94085-2810
-				US
-
-00-05-46   (hex)		KDDI Network & Solultions Inc.
-000546     (base 16)		KDDI Network & Solultions Inc.
-				2-3-1, Nishishinjunku-ku,
-				  Tokyo  163-0907
-				JP
-
-00-05-40   (hex)		FAST Corporation
-000540     (base 16)		FAST Corporation
-				2791-5 Shimo-Tsuruma
-				    242-0001
-				JP
-
-00-05-3C   (hex)		XIRCOM
-00053C     (base 16)		XIRCOM
-				2300 CORPORATE CENTER DR.
-				THOUSAND OAKS  CA  91320
-				US
-
-00-05-44   (hex)		Valley Technologies, Inc.
-000544     (base 16)		Valley Technologies, Inc.
-				1006 West College Ave.
-				State College  PA  16801
-				US
-
-00-05-2E   (hex)		Cinta Networks
-00052E     (base 16)		Cinta Networks
-				3010 North First Street
-				San Jose  CA  95134
-				US
-
-00-05-2F   (hex)		Leviton Network Solutions
-00052F     (base 16)		Leviton Network Solutions
-				2222 222nd Street S.E.
-				Bothell  WA  98021
-				US
-
-00-05-3B   (hex)		Harbour Networks Ltd., Co. Beijing
-00053B     (base 16)		Harbour Networks Ltd., Co. Beijing
-				13/F, JiuLing Building, No. 21,
-				    100089
-				CN
-
-00-05-28   (hex)		New Focus, Inc.
-000528     (base 16)		New Focus, Inc.
-				2630 Walsh Ave.
-				Santa Clara  CA  95051
-				US
-
-00-05-6B   (hex)		C.P. Technology Co., Ltd.
-00056B     (base 16)		C.P. Technology Co., Ltd.
-				12F, No. 86, Hsin Tai Wu Rd.,
-				    221
-				TW
-
-00-05-60   (hex)		LEADER COMM.CO., LTD
-000560     (base 16)		LEADER COMM.CO., LTD
-				234, Komae-ri, Kiheung-eup,
-				    449-900
-				KR
-
-00-05-5E   (hex)		Cisco Systems, Inc
-00055E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-96   (hex)		Genotech Co., Ltd.
-000596     (base 16)		Genotech Co., Ltd.
-				#308 Gunkook Bldg.,
-				Gumchon-Gu  Seoul  
-				KR
-
-00-05-79   (hex)		Universal Control Solution Corp.
-000579     (base 16)		Universal Control Solution Corp.
-				12843 Foothill Blvd.
-				Sylmar  CA  91342
-				US
-
-00-05-7F   (hex)		Acqis Technology
-00057F     (base 16)		Acqis Technology
-				1621 West El Camino Real
-				Mt. View  CA  94040
-				US
-
-00-05-73   (hex)		Cisco Systems, Inc
-000573     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-75   (hex)		CDS-Electronics BV
-000575     (base 16)		CDS-Electronics BV
-				Mozart laan 330
-				    
-				NL
-
-00-05-56   (hex)		360 Systems
-000556     (base 16)		360 Systems
-				31355 Agoura Road
-				Westlake Village  CA  91361
-				US
-
-00-05-59   (hex)		Intracom S.A.
-000559     (base 16)		Intracom S.A.
-				19 5 KM Markopoulou Ave.
-				Attika    
-				GR
-
-00-05-8C   (hex)		Opentech Inc.
-00058C     (base 16)		Opentech Inc.
-				6F, DongWon Bldg., 275
-				Seoul    137-130
-				KR
-
-00-04-C9   (hex)		Micro Electron Co., Ltd.
-0004C9     (base 16)		Micro Electron Co., Ltd.
-				13-1-205 Aobaokakita
-				Suita-city  Osaka  
-				JP
-
-00-04-BE   (hex)		OptXCon, Inc.
-0004BE     (base 16)		OptXCon, Inc.
-				P.O. Box 13449
-				Research Triangle Park  NC  27709-3449
-				US
-
-00-04-C4   (hex)		Audiotonix Group Limited
-0004C4     (base 16)		Audiotonix Group Limited
-				Unit 10, Silverglade Business Park
-				Chessington  Surrey  KT9 2QL
-				GB
-
-00-04-C1   (hex)		Cisco Systems, Inc
-0004C1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-D6   (hex)		Takagi Industrial Co., Ltd.
-0004D6     (base 16)		Takagi Industrial Co., Ltd.
-				Electronic Instrument Div.
-				418-0103  418-0103  
-				JP
-
-00-04-D1   (hex)		Drew Technologies, Inc.
-0004D1     (base 16)		Drew Technologies, Inc.
-				3915 Research Park Dr
-				Ann Arbor  MI  48108
-				US
-
-00-04-D0   (hex)		Softlink s.r.o.
-0004D0     (base 16)		Softlink s.r.o.
-				Tomkova 409
-				  Czech  Republic
-				CZ
-
-00-80-87   (hex)		OKI ELECTRIC INDUSTRY CO., LTD
-008087     (base 16)		OKI ELECTRIC INDUSTRY CO., LTD
-				10-3 SHIBAURA 4-CHOME
-				    
-				JP
-
-00-04-D9   (hex)		Titan Electronics, Inc.
-0004D9     (base 16)		Titan Electronics, Inc.
-				Rm 7, 11 Fl., No. 398,
-				Taoyuan  Taoyuan  TAIWAN
-				TW
-
-00-04-D8   (hex)		IPWireless, Inc.
-0004D8     (base 16)		IPWireless, Inc.
-				4 Landsowne Court
-				SN14  GRZ  UK
-				GB
-
-00-05-24   (hex)		BTL System (HK) Limited
-000524     (base 16)		BTL System (HK) Limited
-				14/F., Blk. B, Vita Tower,
-				Aberdeen    
-				HK
-
-00-05-22   (hex)		LEA*D Corporation, Inc.
-000522     (base 16)		LEA*D Corporation, Inc.
-				Advatech Bldg.
-				    
-				IL
-
-00-05-20   (hex)		Smartronix, Inc.
-000520     (base 16)		Smartronix, Inc.
-				22685 Three Notch Rd.
-				California  MD  20619
-				US
-
-00-04-EB   (hex)		Paxonet Communications, Inc.
-0004EB     (base 16)		Paxonet Communications, Inc.
-				4046 Clipper Court
-				Fremont  CA  94538
-				US
-
-00-04-EF   (hex)		Polestar Corp.
-0004EF     (base 16)		Polestar Corp.
-				RM #802 SeoGeon B/D, 1480,
-				  Korea  (ROK)
-				KR
-
-00-05-14   (hex)		KDT Systems Co., Ltd.
-000514     (base 16)		KDT Systems Co., Ltd.
-				102-6, Chobu-Li, Mohyun-Myun,
-				    
-				KR
-
-00-05-0B   (hex)		SICOM Systems, Inc.
-00050B     (base 16)		SICOM Systems, Inc.
-				4140 Skyron Drive
-				Doylestown  PA  18901
-				US
-
-00-05-05   (hex)		Systems Integration Solutions, Inc.
-000505     (base 16)		Systems Integration Solutions, Inc.
-				3922 Coconut Palm Drive,
-				Tampa  FL  33619
-				US
-
-00-04-FE   (hex)		Pelago Networks
-0004FE     (base 16)		Pelago Networks
-				701 E. Plano Parkway - Ste. #205
-				Plano  TX  75074
-				US
-
-00-05-18   (hex)		Jupiters Technology
-000518     (base 16)		Jupiters Technology
-				PO Box 12693
-				    
-				AU
-
-00-04-B7   (hex)		AMB i.t. Holding
-0004B7     (base 16)		AMB i.t. Holding
-				Zuiderhoutlaan 4
-				  PJ Haarlem  2012
-				NL
-
-00-04-B9   (hex)		S.I. Soubou, Inc.
-0004B9     (base 16)		S.I. Soubou, Inc.
-				4-2586-8
-				Tokorozawa  Sitama  359-0047
-				JP
-
-00-04-BB   (hex)		Bardac Corporation
-0004BB     (base 16)		Bardac Corporation
-				40 Log Canoe Circle
-				Stevensville  MD  21666
-				US
-
-00-04-BC   (hex)		Giantec, Inc.
-0004BC     (base 16)		Giantec, Inc.
-				4F, No. 3, Lane 123,
-				TAIWAN 231  TAIWAN 231  R.O.C.
-				TW
-
-00-04-AF   (hex)		Digital Fountain, Inc.
-0004AF     (base 16)		Digital Fountain, Inc.
-				600 Alabama St.
-				San Francisco  CA  94110
-				US
-
-00-04-56   (hex)		Cambium Networks Limited
-000456     (base 16)		Cambium Networks Limited
-				Unit B2, Linhay Business Park,
-				Ashburton  Devon  TQ13 7UP
-				GB
-
-00-04-58   (hex)		Fusion X Co., Ltd.
-000458     (base 16)		Fusion X Co., Ltd.
-				#905 Hansol Techno Town
-				  Zip  435-030
-				KR
-
-00-04-4F   (hex)		Schubert System Elektronik Gmbh
-00044F     (base 16)		Schubert System Elektronik Gmbh
-				Rudolf-Diesel-Str. 17
-				    
-				DE
-
-00-04-46   (hex)		CYZENTECH Co., Ltd.
-000446     (base 16)		CYZENTECH Co., Ltd.
-				601 Eunkyeong B/D 141-31,
-				  135-876  KOREA
-				KR
-
-00-04-4A   (hex)		iPolicy Networks, Inc.
-00044A     (base 16)		iPolicy Networks, Inc.
-				47467 Fremont Blvd.
-				Fremont  CA  94538
-				US
-
-00-04-40   (hex)		cyberPIXIE, Inc.
-000440     (base 16)		cyberPIXIE, Inc.
-				68 E. Wacker Place,
-				Chicago  IL  60601
-				US
-
-00-04-3C   (hex)		SONOS Co., Ltd.
-00043C     (base 16)		SONOS Co., Ltd.
-				#725 Pungsan Apt. Factory
-				Rep. of KOREA Zip  Code:  411-815
-				KR
-
-00-04-B2   (hex)		ESSEGI SRL
-0004B2     (base 16)		ESSEGI SRL
-				Via Del Cavaratori, 17
-				    
-				IT
-
-00-04-B4   (hex)		CIAC
-0004B4     (base 16)		CIAC
-				18 rue Joseph BARA
-				    
-				FR
-
-00-04-AD   (hex)		Malibu Networks
-0004AD     (base 16)		Malibu Networks
-				26637 Agoura Rd.
-				Calabasas  CA  91302
-				US
-
-00-04-A9   (hex)		SandStream Technologies, Inc.
-0004A9     (base 16)		SandStream Technologies, Inc.
-				1955 Lakeway Dr.
-				Lewisville  TX  75057
-				US
-
-00-04-61   (hex)		EPOX Computer Co., Ltd.
-000461     (base 16)		EPOX Computer Co., Ltd.
-				11F, #346, Chung San Rd.
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-04-62   (hex)		DAKOS Data & Communication Co., Ltd.
-000462     (base 16)		DAKOS Data & Communication Co., Ltd.
-				2nd Floor Bethel Building 324-1
-				Zip  code:  137-130
-				TW
-
-00-04-5F   (hex)		Avalue Technology, Inc.
-00045F     (base 16)		Avalue Technology, Inc.
-				7F, 228, Lian-Cheng Road
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-04-9C   (hex)		Surgient Networks, Inc.
-00049C     (base 16)		Surgient Networks, Inc.
-				3520 Executive Center Drive
-				Austin  TX  78731
-				US
-
-00-04-9D   (hex)		Ipanema Technologies
-00049D     (base 16)		Ipanema Technologies
-				28, Rue De La Redoute
-				    
-				FR
-
-00-04-60   (hex)		Knilink Technology, Inc.
-000460     (base 16)		Knilink Technology, Inc.
-				10F, #96, Hsin Tai Wu Rd.,
-				    TAIWAN
-				TW
-
-00-04-8F   (hex)		TD Systems Corporation
-00048F     (base 16)		TD Systems Corporation
-				100 Bearfoot Rd.
-				Hudson  MA  01749
-				US
-
-00-04-95   (hex)		Tejas Networks India Limited
-000495     (base 16)		Tejas Networks India Limited
-				#58, 1st Main Road, J.P. Nagar, 
-				Bangalore   560078  
-				IN
-
-00-04-6F   (hex)		Digitel S/A Industria Eletronica
-00046F     (base 16)		Digitel S/A Industria Eletronica
-				R. Doutor Joao Ignacio, 1165
-				  Zip:  90230.181
-				BR
-
-00-04-69   (hex)		Innocom, Inc.
-000469     (base 16)		Innocom, Inc.
-				655-2 Naebalsan-Dong
-				157-280  157-280  KOREA
-				KR
-
-00-04-87   (hex)		Cogency Semiconductor, Inc.
-000487     (base 16)		Cogency Semiconductor, Inc.
-				362 Terry Fox Drive, Suite 210
-				    
-				CA
-
-00-04-68   (hex)		Vivity, Inc.
-000468     (base 16)		Vivity, Inc.
-				3360 Mitchell Lane
-				Boulder  CO  80301
-				US
-
-00-03-E1   (hex)		Winmate Communication, Inc.
-0003E1     (base 16)		Winmate Communication, Inc.
-				9F,No.111-6,Shing-De Rd
-				Taipei     241
-				TW
-
-00-03-E4   (hex)		Cisco Systems, Inc
-0003E4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-DC   (hex)		Lexar Media, Inc.
-0003DC     (base 16)		Lexar Media, Inc.
-				47421 Bayside Parkway
-				Fremont  CA  94538
-				US
-
-00-03-D8   (hex)		iMPath Networks, Inc.
-0003D8     (base 16)		iMPath Networks, Inc.
-				1431 Merivale Rd.
-				CANADA  K2E  1B9
-				CA
-
-00-03-D5   (hex)		Advanced Communications Co., Ltd.
-0003D5     (base 16)		Advanced Communications Co., Ltd.
-				2876-1 Ooka
-				Shizuoka  41-0022  
-				JP
-
-00-03-F7   (hex)		Plast-Control GmbH
-0003F7     (base 16)		Plast-Control GmbH
-				Walter-Freitag-Str. 15
-				    
-				DE
-
-00-03-FC   (hex)		Intertex Data AB
-0003FC     (base 16)		Intertex Data AB
-				Rissneleden 45
-				    
-				SE
-
-00-03-EF   (hex)		Oneline AG
-0003EF     (base 16)		Oneline AG
-				Steinfeldstraße 3
-				    
-				DE
-
-00-03-F1   (hex)		Cicada Semiconductor, Inc.
-0003F1     (base 16)		Cicada Semiconductor, Inc.
-				811 Barton Springs Rd.
-				Austin  TX  78704
-				US
-
-00-04-30   (hex)		Netgem
-000430     (base 16)		Netgem
-				27 rue d'Orleans
-				    
-				FR
-
-00-04-2C   (hex)		Minet, Inc.
-00042C     (base 16)		Minet, Inc.
-				3F Se-A Venture Tower
-				    KOREA
-				KR
-
-00-04-2A   (hex)		Wireless Networks, Inc.
-00042A     (base 16)		Wireless Networks, Inc.
-				2322 El Camino Real
-				San Mateo  CA  94403
-				US
-
-00-04-2B   (hex)		IT Access Co., Ltd.
-00042B     (base 16)		IT Access Co., Ltd.
-				3-17-6, Shinyokohama, Kouhoku-ku
-				Yokohama-shi  Kanagawa  222-8545
-				JP
-
-00-03-D6   (hex)		RADVision, Ltd.
-0003D6     (base 16)		RADVision, Ltd.
-				24 Raul Wallenberg St.
-				    
-				IL
-
-00-03-D4   (hex)		Alloptic, Inc.
-0003D4     (base 16)		Alloptic, Inc.
-				6960 Koll Center Parkway
-				Pleasanton  CA  94566
-				US
-
-00-03-CE   (hex)		ETEN Technologies, Inc.
-0003CE     (base 16)		ETEN Technologies, Inc.
-				2F, No. 9, Lane 235, Pao-Chiao Rd.,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-03-C8   (hex)		CML Emergency Services
-0003C8     (base 16)		CML Emergency Services
-				75 Boulevard la Technologies
-				    
-				CA
-
-00-03-C3   (hex)		Micronik Multimedia
-0003C3     (base 16)		Micronik Multimedia
-				Brückenstraße 2
-				    
-				DE
-
-00-04-19   (hex)		Fibercycle Networks, Inc.
-000419     (base 16)		Fibercycle Networks, Inc.
-				20 South Santa Cruz Ave.
-				Los Gatos  CA  95030
-				US
-
-00-04-1C   (hex)		ipDialog, Inc.
-00041C     (base 16)		ipDialog, Inc.
-				1762 Technology Drive
-				San Jose  CA  95110
-				US
-
-00-04-18   (hex)		Teltronic S.A.U.
-000418     (base 16)		Teltronic S.A.U.
-				Poligono de Malpica
-				    
-				ES
-
-00-03-70   (hex)		NXTV, Inc.
-000370     (base 16)		NXTV, Inc.
-				5955 De Soto Ave, #160
-				Woodland Hills  CA  91367
-				US
-
-00-04-02   (hex)		Nexsan Technologies, Ltd.
-000402     (base 16)		Nexsan Technologies, Ltd.
-				Parker Centre
-				Derby    DE21 4SZ
-				GB
-
-00-03-ED   (hex)		Shinkawa Electric Co., Ltd.
-0003ED     (base 16)		Shinkawa Electric Co., Ltd.
-				3-2-24 3 chome
-				    
-				JP
-
-00-03-BD   (hex)		OmniCluster Technologies, Inc.
-0003BD     (base 16)		OmniCluster Technologies, Inc.
-				4950 Blue Lake Drive
-				Boca Raton  FL  33431
-				US
-
-00-03-C0   (hex)		RFTNC Co., Ltd.
-0003C0     (base 16)		RFTNC Co., Ltd.
-				3F, 1624-24, Bongchen-dong
-				  SOUTH  KOREA
-				KR
-
-00-03-B8   (hex)		NetKit Solutions, LLC
-0003B8     (base 16)		NetKit Solutions, LLC
-				26630 Agoura Road
-				Calabasas  CA  91302
-				US
-
-00-03-B7   (hex)		ZACCESS Systems
-0003B7     (base 16)		ZACCESS Systems
-				275 Shoreline Drive, #110
-				Redwood City  CA  94065
-				US
-
-00-03-A0   (hex)		Cisco Systems, Inc
-0003A0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-A2   (hex)		Catapult Communications
-0003A2     (base 16)		Catapult Communications
-				160 S. Whisman Rd.
-				Mountain View  CA  94041
-				US
-
-00-03-9C   (hex)		OptiMight Communications, Inc.
-00039C     (base 16)		OptiMight Communications, Inc.
-				980 Linda Vista Avenue
-				Mountain View  CA  94043
-				US
-
-00-03-B0   (hex)		Xsense Technology Corp.
-0003B0     (base 16)		Xsense Technology Corp.
-				11 F, 232, Sec. 3, ChengTeh Rd.
-				Taipei  TAIWAN,  103
-				TW
-
-00-03-AA   (hex)		Watlow
-0003AA     (base 16)		Watlow
-				1241 Bundy Blvd.
-				Winona  MN  55987
-				US
-
-00-03-A8   (hex)		IDOT Computers, Inc.
-0003A8     (base 16)		IDOT Computers, Inc.
-				3F., No. 137, Lane 235
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-03-55   (hex)		TeraBeam Internet Systems
-000355     (base 16)		TeraBeam Internet Systems
-				14833 NE 87th St., Bldg. C
-				Redmond  WA  98052
-				US
-
-00-03-69   (hex)		Nippon Antenna Co., Ltd.
-000369     (base 16)		Nippon Antenna Co., Ltd.
-				No. 49-8, Nishiogu,
-				Tokyo    116-8561
-				JP
-
-00-03-73   (hex)		Aselsan A.S
-000373     (base 16)		Aselsan A.S
-				Mehmet Akif Ersoy Mah.
-				    
-				TR
-
-00-03-77   (hex)		Gigabit Wireless
-000377     (base 16)		Gigabit Wireless
-				3099 N. First Street
-				San Jose  CA  95134
-				US
-
-00-03-65   (hex)		Kira Information & Communications, Ltd.
-000365     (base 16)		Kira Information & Communications, Ltd.
-				6th Fl. Anam Tower,
-				    
-				KR
-
-00-03-85   (hex)		Actelis Networks, Inc.
-000385     (base 16)		Actelis Networks, Inc.
-				1 Bazel St., P.O.B. 10173
-				    
-				IL
-
-00-03-54   (hex)		Fiber Logic Communications
-000354     (base 16)		Fiber Logic Communications
-				5F-3, No. 9, Prosperity Road One,
-				Hsinchu    
-				TW
-
-00-03-50   (hex)		BTICINO SPA
-000350     (base 16)		BTICINO SPA
-				Via L. Manara, 4
-				    
-				IT
-
-00-03-51   (hex)		Diebold, Inc.
-000351     (base 16)		Diebold, Inc.
-				5995 Mayfair Road
-				North Canton  OH  44720
-				US
-
-00-03-4E   (hex)		Pos Data Company, Ltd.
-00034E     (base 16)		Pos Data Company, Ltd.
-				276-2, Seo-Hyun Dong,
-				    
-				KR
-
-00-03-48   (hex)		Norscan Instruments, Ltd.
-000348     (base 16)		Norscan Instruments, Ltd.
-				7 Terracon Place
-				    R2J 4B3
-				CA
-
-00-03-46   (hex)		Hitachi Kokusai Electric, Inc.
-000346     (base 16)		Hitachi Kokusai Electric, Inc.
-				1-6-10 Uchikanda
-				    
-				JP
-
-00-03-44   (hex)		Tietech.Co., Ltd.
-000344     (base 16)		Tietech.Co., Ltd.
-				2-13-1 Chikamatoori Minamiku
-				    
-				JP
-
-00-02-E6   (hex)		Gould Instrument Systems, Inc.
-0002E6     (base 16)		Gould Instrument Systems, Inc.
-				8333 Rockside Road
-				Valley View  OH  44125
-				US
-
-00-02-E4   (hex)		JC HYUN Systems, Inc.
-0002E4     (base 16)		JC HYUN Systems, Inc.
-				Shinbong Bldg, 736-6,
-				Seoul    (135-080)
-				KR
-
-00-02-DE   (hex)		Astrodesign, Inc.
-0002DE     (base 16)		Astrodesign, Inc.
-				2-22-12 Kamikodana Ka
-				Kanagawa    
-				JP
-
-00-02-E2   (hex)		NDC Infared Engineering
-0002E2     (base 16)		NDC Infared Engineering
-				5314 N. Irwindale Ave.
-				Irwindale  CA  91706
-				US
-
-00-02-E1   (hex)		Integrated Network Corporation
-0002E1     (base 16)		Integrated Network Corporation
-				757 Route 202/206
-				Bridgewater  NJ  08807
-				US
-
-00-02-F7   (hex)		ARM
-0002F7     (base 16)		ARM
-				110, Fulbourn Road
-				    CB1 9NJ
-				GB
-
-00-D0-24   (hex)		Cognex Corporation
-00D024     (base 16)		Cognex Corporation
-				Modular Vision Systems Division
-				Portland  OR  97224
-				US
-
-00-02-F1   (hex)		Pinetron Co., Ltd.
-0002F1     (base 16)		Pinetron Co., Ltd.
-				Bldg. #1599-11,
-				Seoul    137-073
-				KR
-
-00-02-ED   (hex)		DXO Telecom Co., Ltd.
-0002ED     (base 16)		DXO Telecom Co., Ltd.
-				8F, 300-11, Yumgok-Dong,
-				    
-				KR
-
-00-02-EC   (hex)		Maschoff Design Engineering
-0002EC     (base 16)		Maschoff Design Engineering
-				1325 Kenilworth Drive
-				Woodbury  MN  55125
-				US
-
-00-03-36   (hex)		Zetes Technologies
-000336     (base 16)		Zetes Technologies
-				3 Rue De Stras Bourg
-				    
-				BE
-
-00-03-37   (hex)		Vaone, Inc.
-000337     (base 16)		Vaone, Inc.
-				6F Kyemong Art Center,
-				    135-082
-				KR
-
-00-03-3B   (hex)		TAMI Tech Co., Ltd.
-00033B     (base 16)		TAMI Tech Co., Ltd.
-				4F, Chungdo Bencher Town
-				Taejon    
-				KR
-
-00-03-2D   (hex)		IBASE Technology, Inc.
-00032D     (base 16)		IBASE Technology, Inc.
-				5F, No. 221,
-				Taipei    
-				TW
-
-00-B0-52   (hex)		Atheros Communications
-00B052     (base 16)		Atheros Communications
-				5955 T.G. Lee Blvd, Ste. 600
-				Ocala  FL  32822
-				US
-
-00-03-43   (hex)		Martin Professional A/S
-000343     (base 16)		Martin Professional A/S
-				Olof Palmes Alle 18
-				    
-				DK
-
-00-03-35   (hex)		Mirae Technology
-000335     (base 16)		Mirae Technology
-				211-15, Hon Hyun-dong,
-				Seoul    
-				KR
-
-00-02-F8   (hex)		SEAKR Engineering, Inc.
-0002F8     (base 16)		SEAKR Engineering, Inc.
-				12847 E. Peakview Ave.
-				Englewood  CO  80111
-				US
-
-00-03-14   (hex)		Teleware Network Systems
-000314     (base 16)		Teleware Network Systems
-				#7806 7th Dongil Technotown,
-				    431-062
-				KR
-
-00-03-2F   (hex)		Global Sun Technology, Inc.
-00032F     (base 16)		Global Sun Technology, Inc.
-				No. 13, Tung Yuan Rd.,
-				    
-				TW
-
-00-02-DC   (hex)		Fujitsu General Limited
-0002DC     (base 16)		Fujitsu General Limited
-				1116, Suenaga, Takatsu-Ku,
-				  213-8502  
-				JP
-
-00-02-D7   (hex)		EMPEG Ltd
-0002D7     (base 16)		EMPEG Ltd
-				1 Signet Court
-				    CB5 8LA
-				GB
-
-00-02-D3   (hex)		NetBotz, Inc.
-0002D3     (base 16)		NetBotz, Inc.
-				110044 Research Blvd.
-				Austin  TX  78759
-				US
-
-00-02-DA   (hex)		ExiO Communications, Inc.
-0002DA     (base 16)		ExiO Communications, Inc.
-				2362 Qume Drive
-				San Jose  CA  95131
-				US
-
-00-02-D4   (hex)		PDA Peripherals, Inc.
-0002D4     (base 16)		PDA Peripherals, Inc.
-				205 Orange St.
-				New Haven  CT  06510
-				US
-
-00-02-D6   (hex)		NICE Systems
-0002D6     (base 16)		NICE Systems
-				8 Hapnina St., POB 690
-				    
-				IL
-
-00-02-7D   (hex)		Cisco Systems, Inc
-00027D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-7C   (hex)		Trilithic, Inc.
-00027C     (base 16)		Trilithic, Inc.
-				9202 E. 33rd Street
-				Indianapolis  IN  46235
-				US
-
-00-02-8B   (hex)		VDSL Systems OY
-00028B     (base 16)		VDSL Systems OY
-				Tekniikantie 12
-				    
-				FI
-
-00-02-8C   (hex)		Micrel-Synergy Semiconductor
-00028C     (base 16)		Micrel-Synergy Semiconductor
-				3250 Scott Boulevard
-				Santa Clara  CA  95054
-				US
-
-00-02-8D   (hex)		Movita Technologies, Inc.
-00028D     (base 16)		Movita Technologies, Inc.
-				No. 26 Wu-Chuan 7th Road,
-				Taipei  Taiwan,  R.O.C.
-				TW
-
-00-02-98   (hex)		Broadframe Corporation
-000298     (base 16)		Broadframe Corporation
-				5828 Moonstone Ave.
-				Alta Loma  CA  91701
-				US
-
-00-02-97   (hex)		C-COR.net
-000297     (base 16)		C-COR.net
-				60 Decibel Road
-				State College  PA  16801
-				US
-
-00-02-91   (hex)		Open Network Co., Ltd.
-000291     (base 16)		Open Network Co., Ltd.
-				Seishin Bldg., 2-5-10 Shinjuku
-				  JAPAN  160-0022
-				JP
-
-00-02-C1   (hex)		Innovative Electronic Designs, Inc.
-0002C1     (base 16)		Innovative Electronic Designs, Inc.
-				9701 Taylorsville Rd.
-				Louisville  KY  40299
-				US
-
-00-02-C0   (hex)		Bencent Tzeng Industry Co., Ltd.
-0002C0     (base 16)		Bencent Tzeng Industry Co., Ltd.
-				3rd fl., No. 3 Ruey Kuang Rd.,
-				Taiwan  Taiwan  R.O.C.
-				TW
-
-00-02-99   (hex)		Apex, Inc.
-000299     (base 16)		Apex, Inc.
-				9911 Willows Rd. N.E.
-				Redmond  WA  95052
-				US
-
-00-02-75   (hex)		SMART Technologies, Inc.
-000275     (base 16)		SMART Technologies, Inc.
-				3636 Research  Road NW
-				Calgary, Alberta    T2L1Y1
-				CA
-
-00-02-C6   (hex)		Data Track Technology PLC
-0002C6     (base 16)		Data Track Technology PLC
-				153 Somerford Road
-				  UNITED  KINGDOM
-				GB
-
-00-02-A6   (hex)		Effinet Systems Co., Ltd.
-0002A6     (base 16)		Effinet Systems Co., Ltd.
-				Yugong Bldg. 502
-				    Korea
-				KR
-
-00-02-5F   (hex)		Nortel Networks
-00025F     (base 16)		Nortel Networks
-				9300 trans-CANADA Highway
-				H4S  1KS  
-				CA
-
-00-02-5C   (hex)		SCI Systems (Kunshan) Co., Ltd.
-00025C     (base 16)		SCI Systems (Kunshan) Co., Ltd.
-				312 QING YANG ROAD
-				CHINA  CHINA  215300
-				CN
-
-00-00-87   (hex)		HITACHI, LTD.
-000087     (base 16)		HITACHI, LTD.
-				NETWORK ENGINEERING DIV.
-				  TOKYO 140  
-				JP
-
-00-02-58   (hex)		Flying Packets Communications
-000258     (base 16)		Flying Packets Communications
-				388 Market Street
-				San Francisco  CA  94111
-				US
-
-00-02-4E   (hex)		Datacard Group
-00024E     (base 16)		Datacard Group
-				11111 Bren Road West
-				Minnetonka  MN  55343
-				US
-
-00-02-42   (hex)		Videoframe Systems
-000242     (base 16)		Videoframe Systems
-				101 Providence Mine Road
-				Nevada City  CA  95959
-				US
-
-00-02-44   (hex)		SURECOM Technology Co.
-000244     (base 16)		SURECOM Technology Co.
-				6F, No. 125, Sec. 2, Datung Rd.
-				Taiwan  Taiwan  R.O.C.
-				TW
-
-00-02-3E   (hex)		Selta Telematica S.p.a
-00023E     (base 16)		Selta Telematica S.p.a
-				Via Nazionale km 404.5
-				    
-				IT
-
-00-02-41   (hex)		Amer.com
-000241     (base 16)		Amer.com
-				7259 Bryan Dairy Road
-				Largo  FL  33777
-				US
-
-00-02-07   (hex)		VisionGlobal Network Corp.
-000207     (base 16)		VisionGlobal Network Corp.
-				826 E. Stale Road
-				American Fork  UT  84003
-				US
-
-00-02-08   (hex)		Unify Networks, Inc.
-000208     (base 16)		Unify Networks, Inc.
-				3160 De La Cruz Blvd.
-				Santa Clara  CA  95054
-				US
-
-00-02-04   (hex)		Bodmann Industries Elektronik GmbH
-000204     (base 16)		Bodmann Industries Elektronik GmbH
-				Messerschmittring 33
-				    
-				DE
-
-00-02-29   (hex)		Adtec Corporation
-000229     (base 16)		Adtec Corporation
-				3F Megurohigashiyama Blg
-				    
-				JP
-
-00-02-2D   (hex)		Agere Systems
-00022D     (base 16)		Agere Systems
-				P.O. Box 755
-				    
-				NL
-
-00-02-26   (hex)		XESystems, Inc.
-000226     (base 16)		XESystems, Inc.
-				317 Main Street
-				East Rochester  NY  14445
-				US
-
-00-02-25   (hex)		One Stop Systems
-000225     (base 16)		One Stop Systems
-				2235 Enterprise Street
-				Escondido  CA  92029
-				US
-
-00-02-11   (hex)		Nature Worldwide Technology Corp.
-000211     (base 16)		Nature Worldwide Technology Corp.
-				No. 1, Min-Chuan Street
-				Taiwan  Taiwan  R.O.C.
-				TW
-
-00-02-12   (hex)		SierraCom
-000212     (base 16)		SierraCom
-				99 South Street
-				Hopkinton  Ma  01748
-				US
-
-00-02-17   (hex)		Cisco Systems, Inc
-000217     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-01-7A   (hex)		Chengdu Maipu Electric Industrial Co., Ltd.
-00017A     (base 16)		Chengdu Maipu Electric Industrial Co., Ltd.
-				NANYI BUILDING, CONSULATE RD.,
-				  P.R.  
-				CN
-
-00-02-38   (hex)		Serome Technology, Inc.
-000238     (base 16)		Serome Technology, Inc.
-				555-14, Baekang B/D 7F
-				Seoul  Korea  135-120
-				KR
-
-00-02-69   (hex)		Nadatel Co., Ltd
-000269     (base 16)		Nadatel Co., Ltd
-				9F CoWell Bldg, 66-1 Banpo-Dong
-				  KOREA  137-040
-				KR
-
-00-02-64   (hex)		AudioRamp.com
-000264     (base 16)		AudioRamp.com
-				15941 Red Hill Suite 205
-				Tustin  CA  92780
-				US
-
-00-02-55   (hex)		IBM Corp
-000255     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-02-52   (hex)		Carrier Corporation
-000252     (base 16)		Carrier Corporation
-				One Carrier Place
-				Farmington  CT  06034-4015
-				US
-
-00-02-20   (hex)		CANON FINETECH INC.
-000220     (base 16)		CANON FINETECH INC.
-				717, Yaguchi, Misato-shi,
-				Saitama    341-8527
-				JP
-
-00-02-0D   (hex)		Micronpc.com
-00020D     (base 16)		Micronpc.com
-				900 E. Karcher Rd.
-				Nampa  IA  83687
-				US
-
-00-01-D4   (hex)		Leisure Time, Inc.
-0001D4     (base 16)		Leisure Time, Inc.
-				4258 Communications Drive
-				Norcross  GA  30093
-				US
-
-00-01-DD   (hex)		Avail Networks
-0001DD     (base 16)		Avail Networks
-				305 E. Eisenhower Parkway
-				Ann Arbor  MI  48108
-				US
-
-00-01-D5   (hex)		HAEDONG INFO & COMM CO., LTD
-0001D5     (base 16)		HAEDONG INFO & COMM CO., LTD
-				#801 The Corporation Center for Universi
-				Taejeon  Republic  of Korea 305
-				KR
-
-00-01-D7   (hex)		F5 Networks, Inc.
-0001D7     (base 16)		F5 Networks, Inc.
-				1322 N. Whitman Lane
-				Liberty Lake  WA  99019
-				US
-
-00-01-DE   (hex)		Trango Systems, Inc.
-0001DE     (base 16)		Trango Systems, Inc.
-				9939 V/A Pasar
-				San Diego  CA  92126
-				US
-
-00-01-DC   (hex)		Activetelco
-0001DC     (base 16)		Activetelco
-				43222 Christy Street
-				Fremont  CA  94538
-				US
-
-00-01-F9   (hex)		TeraGlobal Communications Corp.
-0001F9     (base 16)		TeraGlobal Communications Corp.
-				9171 Towne Centre Drive
-				San Diego  CA  92122
-				US
-
-00-01-FB   (hex)		DoTop Technology, Inc.
-0001FB     (base 16)		DoTop Technology, Inc.
-				10F, No. 100, Min-Chyuan Road
-				    TAIWAN
-				TW
-
-00-01-F8   (hex)		TEXIO TECHNOLOGY CORPORATION
-0001F8     (base 16)		TEXIO TECHNOLOGY CORPORATION
-				2-18-13 Shin Yokohama,
-				    222-0033
-				JP
-
-00-01-BE   (hex)		Gigalink Co., Ltd.
-0001BE     (base 16)		Gigalink Co., Ltd.
-				6th F/L Diplomatic Center 1376-1
-				    KOREA
-				KR
-
-00-01-B1   (hex)		General Bandwidth
-0001B1     (base 16)		General Bandwidth
-				12303-B Technology Blvd.
-				Austin  TX  78727
-				US
-
-00-01-BF   (hex)		Teleforce Co., Ltd.
-0001BF     (base 16)		Teleforce Co., Ltd.
-				721 yoshioka-cho kanonji-city
-				    
-				JP
-
-00-01-B4   (hex)		Wayport, Inc.
-0001B4     (base 16)		Wayport, Inc.
-				1609 Shoal Creek Blvd.
-				Austin  TX  78701
-				US
-
-00-01-BA   (hex)		IC-Net, Inc.
-0001BA     (base 16)		IC-Net, Inc.
-				5 Fl. Seasung Bldg., 311-27 Noryangjin-D
-				    KOREA
-				KR
-
-00-01-CF   (hex)		Alpha Data Parallel Systems, Ltd.
-0001CF     (base 16)		Alpha Data Parallel Systems, Ltd.
-				58 Timber Bush
-				  UNITED  KINGDOM
-				GB
-
-00-01-D0   (hex)		VitalPoint, Inc.
-0001D0     (base 16)		VitalPoint, Inc.
-				15770 Hopper Road
-				Peyton  CO  80831
-				US
-
-00-01-B0   (hex)		Fulltek Technology Co., Ltd.
-0001B0     (base 16)		Fulltek Technology Co., Ltd.
-				3F No. 8, Lane 130, Min Chuan Rd., Hsint
-				  TAIWAN  R.O.C.
-				TW
-
-00-01-A9   (hex)		BMW AG
-0001A9     (base 16)		BMW AG
-				Dept. FG-322
-				80788  Munich  
-				DE
-
-00-01-AA   (hex)		Airspan Communications, Ltd.
-0001AA     (base 16)		Airspan Communications, Ltd.
-				Cambridge House, Oxford Rd.,
-				    
-				GB
-
-00-01-9E   (hex)		ESS Technology, Inc.
-00019E     (base 16)		ESS Technology, Inc.
-				48401 Fremont Blvd.
-				Fremont  CA  94538
-				US
-
-00-01-7D   (hex)		ThermoQuest
-00017D     (base 16)		ThermoQuest
-				355 River Oaks Parkway
-				San Jose  CA  95134
-				US
-
-00-01-81   (hex)		Nortel Networks
-000181     (base 16)		Nortel Networks
-				1100 Technology Park Drive
-				Billerica  MA  01821
-				US
-
-00-01-94   (hex)		Capital Equipment Corporation
-000194     (base 16)		Capital Equipment Corporation
-				900 Middlesex Turnpike - Bldg. 2
-				Billerica  MA  01821
-				US
-
-00-01-98   (hex)		Darim Vision
-000198     (base 16)		Darim Vision
-				Taejon Expo Venture Town
-				    KOREA
-				KR
-
-00-01-E8   (hex)		Force10 Networks, Inc.
-0001E8     (base 16)		Force10 Networks, Inc.
-				1440 McCarthy Blvd.
-				Milpitas  CA  95035
-				US
-
-00-01-E9   (hex)		Litton Marine Systems B.V.
-0001E9     (base 16)		Litton Marine Systems B.V.
-				118 Burlington Road
-				ENGLAND  KT3  4NR
-				GB
-
-00-01-E5   (hex)		Supernet, Inc.
-0001E5     (base 16)		Supernet, Inc.
-				135-080 Daemeong Bldg.
-				    KOREA
-				KR
-
-00-01-A2   (hex)		Logical Co., Ltd.
-0001A2     (base 16)		Logical Co., Ltd.
-				4598 Murakushi-cho
-				  431-1207  
-				JP
-
-00-01-85   (hex)		Hitachi Aloka Medical, Ltd.
-000185     (base 16)		Hitachi Aloka Medical, Ltd.
-				3-7-19, Imai Ome-city
-				  198-8577  
-				JP
-
-00-01-C7   (hex)		Cisco Systems, Inc
-0001C7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-01-21   (hex)		WatchGuard Technologies, Inc.
-000121     (base 16)		WatchGuard Technologies, Inc.
-				605 Fifth Ave. S
-				Seattle  WA  98104-3892
-				US
-
-00-01-29   (hex)		DFI Inc.
-000129     (base 16)		DFI Inc.
-				100, Huan-Ho Street
-				Hsi-Chih City  Taipei Hsien  
-				TW
-
-00-01-19   (hex)		RTUnet (Australia)
-000119     (base 16)		RTUnet (Australia)
-				8/3-5 Gilda Court
-				Mulgrave  Vic  3170
-				AU
-
-00-01-22   (hex)		Trend Communications, Ltd.
-000122     (base 16)		Trend Communications, Ltd.
-				Knaves Beech Estate
-				Bucks, HP10 9QZ    
-				GB
-
-00-01-1A   (hex)		Hoffmann und Burmeister GbR
-00011A     (base 16)		Hoffmann und Burmeister GbR
-				Niederberger Str. 75
-				D-53909 Zuelpich    
-				DE
-
-00-01-0A   (hex)		CIS TECHNOLOGY INC.
-00010A     (base 16)		CIS TECHNOLOGY INC.
-				16F, No. 75 Hsin Tai Wu Road
-				Taipei Hsien 221    
-				TW
-
-00-01-67   (hex)		HIOKI E.E. CORPORATION
-000167     (base 16)		HIOKI E.E. CORPORATION
-				81 Koizumi, Ueda, Nagano
-				386-1192  386-1192  
-				JP
-
-00-01-68   (hex)		VITANA CORPORATION
-000168     (base 16)		VITANA CORPORATION
-				2500 Don Reid Drive
-				K1H 1E1  K1H 1E1  
-				CA
-
-00-01-62   (hex)		Cygnet Technologies, Inc.
-000162     (base 16)		Cygnet Technologies, Inc.
-				1411 LeMay Drive #301
-				Carrollton  TX  75007
-				US
-
-00-01-54   (hex)		G3M Corporation
-000154     (base 16)		G3M Corporation
-				4320 Stevens Creek Blvd. - Ste. #275
-				San Jose  CA  95129
-				US
-
-00-01-52   (hex)		CHROMATEK INC.
-000152     (base 16)		CHROMATEK INC.
-				6-10, Miyazaki 2-Chome
-				    
-				JP
-
-00-01-50   (hex)		GILAT COMMUNICATIONS, LTD.
-000150     (base 16)		GILAT COMMUNICATIONS, LTD.
-				21/D Yegia Kapayim Street
-				    
-				IL
-
-00-01-51   (hex)		Ensemble Communications
-000151     (base 16)		Ensemble Communications
-				6256 Greenman Drive - Ste. #400
-				San Diego  CA  92122
-				US
-
-00-01-15   (hex)		EXTRATECH CORPORATION
-000115     (base 16)		EXTRATECH CORPORATION
-				760 Thornton St., Unit 2
-				Post Falls  ID  83854
-				US
-
-00-01-01   (hex)		Private
-000101     (base 16)		Private
-
-00-01-0D   (hex)		Teledyne DALSA Inc.
-00010D     (base 16)		Teledyne DALSA Inc.
-				880 McCaffrey
-				St-Laurent  Quebec  H4T 2C7
-				CA
-
-00-01-05   (hex)		Beckhoff Automation GmbH
-000105     (base 16)		Beckhoff Automation GmbH
-				Eiserstraße 5
-				Verl  NRW  33415
-				DE
-
-00-B0-17   (hex)		InfoGear Technology Corp.
-00B017     (base 16)		InfoGear Technology Corp.
-				2055 Woodside Road
-				Redwood City  CA  94061
-				US
-
-00-01-2C   (hex)		Aravox Technologies, Inc.
-00012C     (base 16)		Aravox Technologies, Inc.
-				16725 40th Place North
-				Plymouth  MN  55446
-				US
-
-00-01-42   (hex)		Cisco Systems, Inc
-000142     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-01-64   (hex)		Cisco Systems, Inc
-000164     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-01-5F   (hex)		DIGITAL DESIGN GmbH
-00015F     (base 16)		DIGITAL DESIGN GmbH
-				Rauchstr. 21
-				  Berlin  D-10787
-				DE
-
-00-01-2B   (hex)		TELENET Co., Ltd.
-00012B     (base 16)		TELENET Co., Ltd.
-				
-				    
-				
-
-00-01-3F   (hex)		Neighbor World Co., Ltd.
-00013F     (base 16)		Neighbor World Co., Ltd.
-				114A YERC, 134, Shinchon_dong
-				120-749  120-749  KOREA
-				KR
-
-00-01-24   (hex)		Acer Incorporated
-000124     (base 16)		Acer Incorporated
-				21F, 88, Sec.1
-				Taipei Hsien 221    
-				TW
-
-00-30-88   (hex)		Ericsson
-003088     (base 16)		Ericsson
-				250 Holger Way
-				SAN JOSE  CA  95134
-				US
-
-00-30-20   (hex)		TSI, Inc..
-003020     (base 16)		TSI, Inc..
-				500 Cardigan Road
-				Shoreview  MN  55126
-				US
-
-00-30-95   (hex)		Procomp Informatics, Ltd.
-003095     (base 16)		Procomp Informatics, Ltd.
-				5F, 69-10, Sec. 2,
-				Tamshui, Taipei, Hsien    
-				TW
-
-00-30-CA   (hex)		Discovery Com
-0030CA     (base 16)		Discovery Com
-				4935 Century Street
-				Huntsville  AL  35816
-				US
-
-00-30-CE   (hex)		Zaffire
-0030CE     (base 16)		Zaffire
-				2630 Orchard Parkway
-				San Jose  CA  95134-2020
-				US
-
-00-30-7B   (hex)		Cisco Systems, Inc
-00307B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-B5   (hex)		Tadiran Microwave Networks
-0030B5     (base 16)		Tadiran Microwave Networks
-				4000 Greenbriar Drive
-				Stafford  TX  77477
-				US
-
-00-30-B8   (hex)		RiverDelta Networks
-0030B8     (base 16)		RiverDelta Networks
-				Three Highwood Drive East
-				Tewksbury  MA  01876
-				US
-
-00-30-71   (hex)		Cisco Systems, Inc
-003071     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-3A   (hex)		MAATEL
-00303A     (base 16)		MAATEL
-				495 RUE DE POMMARIN
-				38360 VOREPPE    
-				FR
-
-00-30-4E   (hex)		BUSTEC PRODUCTION LTD.
-00304E     (base 16)		BUSTEC PRODUCTION LTD.
-				WORLD AVIATION PARK
-				Shannon  County Clare  
-				IE
-
-00-30-A4   (hex)		Woodwind Communications System
-0030A4     (base 16)		Woodwind Communications System
-				20300 Century Blvd., Suite 200B
-				Germantown  MD  20874
-				US
-
-00-30-3B   (hex)		PowerCom Technology
-00303B     (base 16)		PowerCom Technology
-				2F, No. 34, Industry E. Road IV
-				Hsinchu 300    
-				TW
-
-00-30-BC   (hex)		Optronic AG
-0030BC     (base 16)		Optronic AG
-				untereggerstrasse 53
-				9403 Goldach    
-				CH
-
-00-B0-2D   (hex)		ViaGate Technologies, Inc.
-00B02D     (base 16)		ViaGate Technologies, Inc.
-				745 Route 202/206
-				Bridgewater  NJ  08807
-				US
-
-00-30-EE   (hex)		DSG Technology, Inc.
-0030EE     (base 16)		DSG Technology, Inc.
-				6F-4 No. 270, Chwig Hsiao
-				 Taipei    
-				TW
-
-00-30-9E   (hex)		WORKBIT CORPORATION.
-00309E     (base 16)		WORKBIT CORPORATION.
-				1-2-2 Chuou, Yamato
-				Kanagawa  242-0021    
-				JP
-
-00-30-DE   (hex)		WAGO Kontakttechnik GmbH
-0030DE     (base 16)		WAGO Kontakttechnik GmbH
-				Hansastrasse 27
-				32423 Minden    
-				DE
-
-00-30-3E   (hex)		Radcom Ltd.
-00303E     (base 16)		Radcom Ltd.
-				12 Hanechoshet Street
-				Tel-Aviv 69710    
-				IL
-
-00-30-D7   (hex)		Innovative Systems, L.L.C.
-0030D7     (base 16)		Innovative Systems, L.L.C.
-				1000 Innovative Drive
-				Mitchell  SD  57301
-				US
-
-00-B0-CE   (hex)		Viveris Technologies
-00B0CE     (base 16)		Viveris Technologies
-				1 rue Traversiere BP 20327
-				Rungis Cedex    94598
-				FR
-
-00-B0-1C   (hex)		Westport Technologies
-00B01C     (base 16)		Westport Technologies
-				15 Capella Court, Unit 116
-				Nepean  Ontario  
-				CA
-
-00-B0-4A   (hex)		Cisco Systems, Inc
-00B04A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-B0-48   (hex)		Marconi Communications Inc.
-00B048     (base 16)		Marconi Communications Inc.
-				8616 Freeport Parkway
-				Irving  TX  75063
-				US
-
-00-30-1B   (hex)		SHUTTLE, INC.
-00301B     (base 16)		SHUTTLE, INC.
-				5F, No. 34, Lane 60
-				Taipei    
-				TW
-
-00-30-21   (hex)		HSING TECH. ENTERPRISE CO.,LTD
-003021     (base 16)		HSING TECH. ENTERPRISE CO.,LTD
-				2F, NO. 22, ALLLEY 38, LANE 91
-				TAIPEI    
-				TW
-
-00-30-2C   (hex)		SYLANTRO SYSTEMS CORPORATION
-00302C     (base 16)		SYLANTRO SYSTEMS CORPORATION
-				1686 DELL AVENUE
-				CAMPBELL  CA  95008
-				US
-
-00-30-DF   (hex)		KB/TEL TELECOMUNICACIONES
-0030DF     (base 16)		KB/TEL TELECOMUNICACIONES
-				S.A. DE C.V.
-				Mexico City 14060    
-				MX
-
-00-30-30   (hex)		HARMONIX CORPORATION
-003030     (base 16)		HARMONIX CORPORATION
-				1755 OSGOOD STREET
-				NORTH ANDOVER  MA  01845
-				US
-
-00-30-63   (hex)		SANTERA SYSTEMS, INC.
-003063     (base 16)		SANTERA SYSTEMS, INC.
-				2901 SUMMIT AVENUE - STE. #100
-				PLANO  TX  75074
-				US
-
-00-30-A3   (hex)		Cisco Systems, Inc
-0030A3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-DD   (hex)		INDIGITA CORPORATION
-0030DD     (base 16)		INDIGITA CORPORATION
-				30 Corporate Park Drive
-				Irvine  CA  92606
-				US
-
-00-30-99   (hex)		BOENIG UND KALLENBACH OHG
-003099     (base 16)		BOENIG UND KALLENBACH OHG
-				AM SPOERKEL 100
-				    
-				DE
-
-00-30-F2   (hex)		Cisco Systems, Inc
-0030F2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-51   (hex)		ORBIT AVIONIC & COMMUNICATION
-003051     (base 16)		ORBIT AVIONIC & COMMUNICATION
-				SYSTEMS, LTD.
-				    
-				IL
-
-00-30-8E   (hex)		CROSS MATCH TECHNOLOGIES, INC.
-00308E     (base 16)		CROSS MATCH TECHNOLOGIES, INC.
-				3960 RCA Blvd., Suite 6001
-				Palm Beach  FL  33410
-				US
-
-00-30-27   (hex)		KERBANGO, INC.
-003027     (base 16)		KERBANGO, INC.
-				21771 STEVENS CREEK BLVD. #100
-				CUPERTINO  CA  95014
-				US
-
-00-30-33   (hex)		ORIENT TELECOM CO., LTD.
-003033     (base 16)		ORIENT TELECOM CO., LTD.
-				MISUNG BULDING 115-7
-				    KOREA
-				KR
-
-00-30-08   (hex)		AVIO DIGITAL, INC.
-003008     (base 16)		AVIO DIGITAL, INC.
-				957 INDUSTRIAL ROAD
-				SAN CARLOS  CA  94070
-				US
-
-00-30-1D   (hex)		SKYSTREAM, INC.
-00301D     (base 16)		SKYSTREAM, INC.
-				455 DeGuigne Drive
-				Sunnyvale  CA  94086-3835
-				US
-
-00-30-BA   (hex)		AC&T SYSTEM CO., LTD.
-0030BA     (base 16)		AC&T SYSTEM CO., LTD.
-				ROOM 702, KEUM-WHA PLAZA
-				435-040  SOUTH  KOREA
-				KR
-
-00-30-FD   (hex)		INTEGRATED SYSTEMS DESIGN
-0030FD     (base 16)		INTEGRATED SYSTEMS DESIGN
-				3650-G CENTRE CIRCLE DRIVE
-				FORT MILL  SC  29715
-				US
-
-00-30-B9   (hex)		ECTEL
-0030B9     (base 16)		ECTEL
-				22240 COMSAT DRIVE
-				CLARKSBURG  MD  20871
-				US
-
-00-30-7D   (hex)		GRE AMERICA, INC.
-00307D     (base 16)		GRE AMERICA, INC.
-				425 HARBOR BLVD.
-				BELMONT  CA  94002
-				US
-
-00-30-EF   (hex)		NEON TECHNOLOGY, INC.
-0030EF     (base 16)		NEON TECHNOLOGY, INC.
-				85 WEST MONTAGUE EXPRESSWAY
-				MILPITAS  CA  95035
-				US
-
-00-30-96   (hex)		Cisco Systems, Inc
-003096     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-39   (hex)		SOFTBOOK PRESS
-003039     (base 16)		SOFTBOOK PRESS
-				7745 HERSCHEL AVENUE
-				LA JOLLA  CA  92037
-				US
-
-00-D0-F8   (hex)		FUJIAN STAR TERMINAL
-00D0F8     (base 16)		FUJIAN STAR TERMINAL
-				DEVICE CO., LTD.
-				FUZHOU  FUJIAN,  CHINA 350002
-				CN
-
-00-D0-ED   (hex)		XIOX
-00D0ED     (base 16)		XIOX
-				150 DOW STREET
-				MANCHESTER  NH  03101
-				US
-
-00-D0-97   (hex)		Cisco Systems, Inc
-00D097     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-8E   (hex)		Grass Valley, A Belden Brand
-00D08E     (base 16)		Grass Valley, A Belden Brand
-				3499, Douglas B. Floreani
-				Montreal  Quebec  H4S 2C6
-				CA
-
-00-D0-56   (hex)		SOMAT CORPORATION
-00D056     (base 16)		SOMAT CORPORATION
-				702 KILLARNEY STREET
-				URBANA  IL  61801
-				US
-
-00-D0-E0   (hex)		DOOIN ELECTRONICS CO.
-00D0E0     (base 16)		DOOIN ELECTRONICS CO.
-				DOOIN BLDG. 16-6, SOONAE-DONG
-				  KOREA  463-020
-				KR
-
-00-D0-00   (hex)		FERRAN SCIENTIFIC, INC.
-00D000     (base 16)		FERRAN SCIENTIFIC, INC.
-				11558 SORRENTO VALLEY ROAD
-				SAN DIEGO  CA  92121
-				US
-
-00-D0-D0   (hex)		ZHONGXING TELECOM LTD.
-00D0D0     (base 16)		ZHONGXING TELECOM LTD.
-				8-9F BUILDING 54,301#
-				    
-				CN
-
-00-D0-53   (hex)		CONNECTED SYSTEMS
-00D053     (base 16)		CONNECTED SYSTEMS
-				126 W. FIGUEROA STREET
-				SANTA BARBARA  CA  93101
-				US
-
-00-D0-33   (hex)		DALIAN DAXIAN NETWORK
-00D033     (base 16)		DALIAN DAXIAN NETWORK
-				SYSTEM CO., LTD.
-				    
-				CN
-
-00-D0-D6   (hex)		AETHRA TELECOMUNICAZIONI
-00D0D6     (base 16)		AETHRA TELECOMUNICAZIONI
-				VIA MATTEO RICCI, 10
-				    
-				IT
-
-00-D0-63   (hex)		Cisco Systems, Inc
-00D063     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-47   (hex)		XN TECHNOLOGIES
-00D047     (base 16)		XN TECHNOLOGIES
-				P.O. BOX 350
-				CHENEY  WA  99004
-				US
-
-00-D0-55   (hex)		KATHREIN-WERKE KG
-00D055     (base 16)		KATHREIN-WERKE KG
-				ANTON-KATHREIN-STRASS 1-3
-				    
-				DE
-
-00-D0-3B   (hex)		VISION PRODUCTS PTY. LTD.
-00D03B     (base 16)		VISION PRODUCTS PTY. LTD.
-				SECOND AVENUE, TECHNOLOGY PARK
-				  AUSTRALIA  5095
-				AU
-
-00-D0-B3   (hex)		DRS Technologies Canada Ltd
-00D0B3     (base 16)		DRS Technologies Canada Ltd
-				700 Palladium Drive
-				Ottawa  Ontario  K2V 1C6
-				CA
-
-00-D0-AF   (hex)		CUTLER-HAMMER, INC.
-00D0AF     (base 16)		CUTLER-HAMMER, INC.
-				PMP CENTER
-				PITTSBURGH  PA  15205
-				US
-
-00-D0-52   (hex)		ASCEND COMMUNICATIONS, INC.
-00D052     (base 16)		ASCEND COMMUNICATIONS, INC.
-				1701 HARBOR BAY PARKWAY
-				ALAMEDA  CA  94502
-				US
-
-00-D0-AD   (hex)		TL INDUSTRIES
-00D0AD     (base 16)		TL INDUSTRIES
-				2541 TRACY ROAD
-				NORTHWOOD  OH  43619
-				US
-
-00-D0-A4   (hex)		ALANTRO COMMUNICATIONS
-00D0A4     (base 16)		ALANTRO COMMUNICATIONS
-				141 STONY CIRCLE,  STE. #210
-				SANTAROSA  CA  95401
-				US
-
-00-D0-B0   (hex)		BITSWITCH LTD.
-00D0B0     (base 16)		BITSWITCH LTD.
-				3 MEADOW COURT, AMOS ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-D0-30   (hex)		Safetran Systems Corp
-00D030     (base 16)		Safetran Systems Corp
-				10655 7th Street
-				Rancho Cucamonga  CA  91730
-				US
-
-00-30-2A   (hex)		SOUTHERN INFORMATION
-00302A     (base 16)		SOUTHERN INFORMATION
-				SYSTEM, INC.
-				HSINCHU  TAIWAN,  R.O.C.
-				TW
-
-00-30-E1   (hex)		Network Equipment Technologies, Inc.
-0030E1     (base 16)		Network Equipment Technologies, Inc.
-				6900 Paseo Padre Parkway
-				Fremont  CA  94555
-				US
-
-00-30-2B   (hex)		INALP NETWORKS, INC.
-00302B     (base 16)		INALP NETWORKS, INC.
-				MERIEDWEG 7
-				    
-				CH
-
-00-30-01   (hex)		SMP
-003001     (base 16)		SMP
-				22, RUE DES COSMONAUTES
-				    
-				FR
-
-00-D0-8B   (hex)		ADVA Optical Networking Ltd.
-00D08B     (base 16)		ADVA Optical Networking Ltd.
-				ADVAntage House
-				York    YO30 4RY
-				GB
-
-00-D0-E4   (hex)		Cisco Systems, Inc
-00D0E4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-5A   (hex)		SYMBIONICS, LTD.
-00D05A     (base 16)		SYMBIONICS, LTD.
-				ST. JOHN'S INNOVATION PARK
-				    ENGLAND
-				GB
-
-00-D0-79   (hex)		Cisco Systems, Inc
-00D079     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-21   (hex)		REGENT ELECTRONICS CORP.
-00D021     (base 16)		REGENT ELECTRONICS CORP.
-				200 CENTENNIAL AVE.-STE. #201
-				PISCATAWAY  NJ  08854
-				US
-
-00-D0-9F   (hex)		NOVTEK TEST SYSTEMS
-00D09F     (base 16)		NOVTEK TEST SYSTEMS
-				2170 PARAGON DRIVE
-				SAN JOSE  CA  95131
-				US
-
-00-D0-FE   (hex)		ASTRAL POINT
-00D0FE     (base 16)		ASTRAL POINT
-				COMMUNICATIONS, INC.
-				CHELMSFORD  MA  01824
-				US
-
-00-D0-D4   (hex)		V-BITS, INC.
-00D0D4     (base 16)		V-BITS, INC.
-				2150 TRADE ZONE BLVD.
-				SAN JOSE  CA  95131
-				US
-
-00-D0-84   (hex)		NEXCOMM SYSTEMS, INC.
-00D084     (base 16)		NEXCOMM SYSTEMS, INC.
-				SUIT #NAL-903,
-				SUNGNAM-CITY  SUNGNAM-CITY  KYUNGGI-DO,K
-				KR
-
-00-D0-99   (hex)		Elcard Wireless Systems Oy
-00D099     (base 16)		Elcard Wireless Systems Oy
-				P.O. BOX 120/BECKERINTIC 38
-				    
-				FI
-
-00-D0-E7   (hex)		VCON TELECOMMUNICATION LTD.
-00D0E7     (base 16)		VCON TELECOMMUNICATION LTD.
-				22 MASKIT STREET
-				    
-				IL
-
-00-D0-1B   (hex)		MIMAKI ENGINEERING CO., LTD.
-00D01B     (base 16)		MIMAKI ENGINEERING CO., LTD.
-				5-9-41 KITA SHINAGAWA
-				    
-				JP
-
-00-D0-0D   (hex)		MICROMERITICS INSTRUMENT
-00D00D     (base 16)		MICROMERITICS INSTRUMENT
-				CORPORATION
-				NORCROSS  GA  30093-1877
-				US
-
-00-D0-54   (hex)		SAS INSTITUTE INC.
-00D054     (base 16)		SAS INSTITUTE INC.
-				SAS CAMPUS DRIVE, R4
-				CARY  NC  27511
-				US
-
-00-D0-09   (hex)		HSING TECH. ENTERPRISE CO. LTD
-00D009     (base 16)		HSING TECH. ENTERPRISE CO. LTD
-				NO.2, LANE 128, SEC. 2
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-D0-F4   (hex)		CARINTHIAN TECH INSTITUTE
-00D0F4     (base 16)		CARINTHIAN TECH INSTITUTE
-				RICHARD-WAGNER STR. 19
-				    
-				AT
-
-00-D0-7D   (hex)		COSINE COMMUNICATIONS
-00D07D     (base 16)		COSINE COMMUNICATIONS
-				1200 BRIDGE PARKWAY
-				REDWOOD CITY  CA  94065
-				US
-
-00-D0-83   (hex)		INVERTEX, INC.
-00D083     (base 16)		INVERTEX, INC.
-				1012 MORSE AVENUE- STE.#9
-				SUNNYVALE  CA  94089
-				US
-
-00-D0-BA   (hex)		Cisco Systems, Inc
-00D0BA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-98   (hex)		Photon Dynamics Canada Inc.
-00D098     (base 16)		Photon Dynamics Canada Inc.
-				221 Whitehall Drive
-				    L3R 9T1
-				CA
-
-00-D0-BE   (hex)		EMUTEC INC.
-00D0BE     (base 16)		EMUTEC INC.
-				P.O. BOX 3035
-				EVERETT  WA  98203
-				US
-
-00-D0-92   (hex)		GLENAYRE WESTERN MULTIPLEX
-00D092     (base 16)		GLENAYRE WESTERN MULTIPLEX
-				1196 BORREGAS AVENUE
-				SUNNYVALE  CA  94089
-				US
-
-00-50-9D   (hex)		THE INDUSTREE B.V.
-00509D     (base 16)		THE INDUSTREE B.V.
-				P.O. BOX 462
-				  THE  
-				NL
-
-00-D0-B8   (hex)		Iomega Corporation
-00D0B8     (base 16)		Iomega Corporation
-				1821 West 4000 South
-				Roy  UT  84067
-				US
-
-00-50-CB   (hex)		JETTER
-0050CB     (base 16)		JETTER
-				GRAETERSTRASSE 2
-				    
-				DE
-
-00-50-58   (hex)		Sangoma Technologies
-005058     (base 16)		Sangoma Technologies
-				100 Renfrew Drive, Suite 100
-				Markham  ON  L3R 9R6
-				CA
-
-00-50-74   (hex)		ADVANCED HI-TECH CORP.
-005074     (base 16)		ADVANCED HI-TECH CORP.
-				1990 EAST GRAND AVE.
-				EL SEGUNDO  CA  90505
-				US
-
-00-50-0A   (hex)		IRIS TECHNOLOGIES, INC.
-00500A     (base 16)		IRIS TECHNOLOGIES, INC.
-				WESTMORELAND INDUSRIAL PARK
-				GREENSBURG  PA  15601
-				US
-
-00-50-6D   (hex)		VIDEOJET SYSTEMS
-00506D     (base 16)		VIDEOJET SYSTEMS
-				INTERNATIONAL INC.
-				WOODDALE  IL  60091-1073
-				US
-
-00-50-CA   (hex)		NET TO NET TECHNOLOGIES
-0050CA     (base 16)		NET TO NET TECHNOLOGIES
-				680 CENTRAL AVENUE - STE. #301
-				DOVER  NH  03820
-				US
-
-00-D0-C7   (hex)		PATHWAY, INC.
-00D0C7     (base 16)		PATHWAY, INC.
-				777 BETA DRIVE
-				MAYFIELD VILLAGE  OH  44143
-				US
-
-00-D0-7A   (hex)		AMAQUEST COMPUTER CORP.
-00D07A     (base 16)		AMAQUEST COMPUTER CORP.
-				8/F, 79 HSIN-TAI
-				  TAIWAN  R.O.C.
-				TW
-
-00-50-3F   (hex)		ANCHOR GAMES
-00503F     (base 16)		ANCHOR GAMES
-				815 PILOT ROAD - STE
-				LAS VEGAS  NV  89119
-				US
-
-00-50-32   (hex)		PICAZO COMMUNICATIONS, INC.
-005032     (base 16)		PICAZO COMMUNICATIONS, INC.
-				61 DAGGETT DRIVE
-				SAN JOSE  CA  95134
-				US
-
-00-D0-4A   (hex)		PRESENCE TECHNOLOGY GMBH
-00D04A     (base 16)		PRESENCE TECHNOLOGY GMBH
-				+ CO. KG
-				    
-				DE
-
-00-D0-74   (hex)		TAQUA SYSTEMS, INC.
-00D074     (base 16)		TAQUA SYSTEMS, INC.
-				1600 FALMOUTH RD. - STE
-				CENTERVILLE  MA  02632
-				US
-
-00-50-4D   (hex)		Tokyo Electron Device Limited
-00504D     (base 16)		Tokyo Electron Device Limited
-				1, Higashikata-machi, Tsuzuki-ku,
-				Yokohama-shi  Kanagawa-ken  
-				JP
-
-00-50-70   (hex)		CHAINTECH COMPUTER CO., LTD.
-005070     (base 16)		CHAINTECH COMPUTER CO., LTD.
-				5TH F, ALLEY 2, LANE 222
-				  TAIWAN  R.O.C.
-				TW
-
-00-50-23   (hex)		PG DESIGN ELECTRONICS, INC.
-005023     (base 16)		PG DESIGN ELECTRONICS, INC.
-				48700 STRUCTURAL DRIVE
-				CHESTERFIELD  MI  48051
-				US
-
-00-50-9E   (hex)		Les Technologies SoftAcoustik Inc.
-00509E     (base 16)		Les Technologies SoftAcoustik Inc.
-				
-				Quebec G1K  3P6    
-				CA
-
-00-50-71   (hex)		AIWA CO., LTD.
-005071     (base 16)		AIWA CO., LTD.
-				1-11, KAMITOMATSURI 4-CHOME
-				UTSUNOMIYA-SHI, TOCHIGI-KEN 320-85    
-				JP
-
-00-50-5F   (hex)		BRAND INNOVATORS
-00505F     (base 16)		BRAND INNOVATORS
-				Steenovenweg 5
-				Helmond    5708 HN
-				NL
-
-00-50-B4   (hex)		SATCHWELL CONTROL SYSTEMS, LTD
-0050B4     (base 16)		SATCHWELL CONTROL SYSTEMS, LTD
-				P.O. BOX 57,  94 FARNHAM ROAD
-				BERKSHIRE SL1 4UH    
-				GB
-
-00-50-D6   (hex)		ATLAS COPCO TOOLS AB
-0050D6     (base 16)		ATLAS COPCO TOOLS AB
-				
-				S-105 23 STOCKHOLM    
-				SE
-
-00-50-82   (hex)		FORESSON CORPORATION
-005082     (base 16)		FORESSON CORPORATION
-				3F, NO.9 SEC.1
-				TAIPEI 10404    
-				TW
-
-00-50-DF   (hex)		AirFiber, Inc.
-0050DF     (base 16)		AirFiber, Inc.
-				P.O. BOX 502148
-				SAN DIEGO  CA  92150-2148
-				US
-
-00-50-C5   (hex)		ADS Technologies, Inc
-0050C5     (base 16)		ADS Technologies, Inc
-				12627 Hiddencreek Way
-				Cerritos  CA  90703
-				US
-
-00-50-8E   (hex)		OPTIMATION, INC.
-00508E     (base 16)		OPTIMATION, INC.
-				P.O. BOX 14357
-				HUNTSVILLE  AL  35815
-				US
-
-00-50-28   (hex)		AVAL COMMUNICATIONS
-005028     (base 16)		AVAL COMMUNICATIONS
-				1777 NORTH CALIFORNIA BLVD.
-				WALNUT CREEK  CA  94596
-				US
-
-00-50-2F   (hex)		TollBridge Technologies, Inc.
-00502F     (base 16)		TollBridge Technologies, Inc.
-				872 HERMOSA DRIVE
-				SUNNYVALE  CA  94086
-				US
-
-00-50-FE   (hex)		PCTVnet ASA
-0050FE     (base 16)		PCTVnet ASA
-				STRANDVEILEN 50
-				N-1324 LYSAKER    
-				NO
-
-00-50-AB   (hex)		NALTEC, Inc.
-0050AB     (base 16)		NALTEC, Inc.
-				1-1-15, Nakanogo, Shimizu-ku
-				Shizuoka-shi  Shizuoka  424-0888
-				JP
-
-00-50-37   (hex)		KOGA ELECTRONICS CO.
-005037     (base 16)		KOGA ELECTRONICS CO.
-				5-8-10, TEHARA, RITTO-CHO
-				SHIGA, 420-3047    
-				JP
-
-00-50-A8   (hex)		OpenCon Systems, Inc.
-0050A8     (base 16)		OpenCon Systems, Inc.
-				377 HOES LANE
-				PISCATAWAY  NJ  08854
-				US
-
-00-50-9C   (hex)		BETA RESEARCH
-00509C     (base 16)		BETA RESEARCH
-				BETASTR. 1
-				85774 UNTERFOEHRING    
-				DE
-
-00-50-B1   (hex)		GIDDINGS & LEWIS
-0050B1     (base 16)		GIDDINGS & LEWIS
-				660 S. MILITARY RD.
-				FOND DU LAC  WI  54935
-				US
-
-00-50-06   (hex)		TAC AB
-005006     (base 16)		TAC AB
-				JAGERSHILLGATON 18
-				21375 MALMO    
-				SE
-
-00-50-09   (hex)		PHILIPS BROADBAND NETWORKS
-005009     (base 16)		PHILIPS BROADBAND NETWORKS
-				64 PERIMETER CENTRE EAST
-				ATLANTA  GA  30346
-				US
-
-00-50-30   (hex)		FUTURE PLUS SYSTEMS
-005030     (base 16)		FUTURE PLUS SYSTEMS
-				36 OLDE ENGLISH RD.
-				BEDFORD  NH  03110
-				US
-
-00-50-78   (hex)		MEGATON HOUSE, LTD.
-005078     (base 16)		MEGATON HOUSE, LTD.
-				ZIP: 224 NO.1-3-5 NAKAMACHIBAI
-				YOKOHAMA    
-				JP
-
-00-50-02   (hex)		OMNISEC AG
-005002     (base 16)		OMNISEC AG
-				RIETSTRASSE 14
-				CH-8108 DAELLIKON    
-				CH
-
-00-50-6A   (hex)		EDEVA, INC.
-00506A     (base 16)		EDEVA, INC.
-				298 S. SUNNYVALE AVE. - #208
-				SUNNYVALE  CA  94086
-				US
-
-00-50-AA   (hex)		KONICA MINOLTA HOLDINGS, INC.
-0050AA     (base 16)		KONICA MINOLTA HOLDINGS, INC.
-				1-6-1, Marunouchi,
-				Tokyo    100-0005
-				JP
-
-00-50-38   (hex)		DAIN TELECOM CO., LTD.
-005038     (base 16)		DAIN TELECOM CO., LTD.
-				2ND Flr., OH-SUNG BLDG. #2-28
-				YANGJAE-DONG, SEOCHO-GU  SEOUL  
-				KR
-
-00-50-B7   (hex)		BOSER TECHNOLOGY CO., LTD.
-0050B7     (base 16)		BOSER TECHNOLOGY CO., LTD.
-				15F-6, 77 HSIN TAI WU ROAD
-				TAIPEI HSIEN    
-				TW
-
-00-90-88   (hex)		BAXALL SECURITY LTD.
-009088     (base 16)		BAXALL SECURITY LTD.
-				UNIT 1 CASTLEHILL
-				STOCKPORT  Great Britain SK6 2SV  
-				GB
-
-00-90-6C   (hex)		Sartorius Hamburg GmbH
-00906C     (base 16)		Sartorius Hamburg GmbH
-				Meiendorferstraße 205
-				Hamburg    D-22145
-				DE
-
-00-90-A4   (hex)		ALTIGA NETWORKS
-0090A4     (base 16)		ALTIGA NETWORKS
-				124 GROVE STREET
-				FRANKLIN  MA  02038-3206
-				US
-
-00-90-F9   (hex)		Imagine Communications
-0090F9     (base 16)		Imagine Communications
-				3001 Dallas Parkway, Suite 300
-				Frisco  TX  75034
-				US
-
-00-90-89   (hex)		SOFTCOM MICROSYSTEMS, INC.
-009089     (base 16)		SOFTCOM MICROSYSTEMS, INC.
-				47509 SEABRIDGE DRIVE
-				FREMONT  CA  94538
-				US
-
-00-90-EE   (hex)		PERSONAL COMMUNICATIONS TECHNOLOGIES
-0090EE     (base 16)		PERSONAL COMMUNICATIONS TECHNOLOGIES
-				50 STILES ROAD
-				SALEM  NH  03079
-				US
-
-00-90-80   (hex)		NOT LIMITED, INC.
-009080     (base 16)		NOT LIMITED, INC.
-				500 ALLERTON STREET, STE #102
-				REDWOOD CITY  CA  94063
-				US
-
-00-90-E8   (hex)		MOXA TECHNOLOGIES CORP., LTD.
-0090E8     (base 16)		MOXA TECHNOLOGIES CORP., LTD.
-				7F, NO. 2, ALY6, LN 235
-				SHIENG-TIEN CITY  TAIPEI  
-				TW
-
-00-90-A1   (hex)		Flying Pig Systems/High End Systems Inc.
-0090A1     (base 16)		Flying Pig Systems/High End Systems Inc.
-				2105 Gracy Farms Lane
-				Austin  TX  78758
-				US
-
-00-90-79   (hex)		ClearOne, Inc.
-009079     (base 16)		ClearOne, Inc.
-				299 WASHINGTON STREET
-				WOBURN  MA  01801
-				US
-
-00-90-9A   (hex)		ONE WORLD SYSTEMS, INC.
-00909A     (base 16)		ONE WORLD SYSTEMS, INC.
-				1144 EAST ARQUES AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-90-C2   (hex)		JK microsystems, Inc.
-0090C2     (base 16)		JK microsystems, Inc.
-				1275 YUBA AVENUE
-				SAN PABLO  CA  94806
-				US
-
-00-50-D0   (hex)		MINERVA SYSTEMS
-0050D0     (base 16)		MINERVA SYSTEMS
-				1585 CHARLESTON ROAD
-				MOUNTAIN VIEW  CA  84943
-				US
-
-00-50-D8   (hex)		UNICORN COMPUTER CORP.
-0050D8     (base 16)		UNICORN COMPUTER CORP.
-				7 FL.,  NO. 96 KWANG FU NORTH ROAD
-				TAIPEI    
-				TW
-
-00-50-B2   (hex)		BRODEL GmbH
-0050B2     (base 16)		BRODEL GmbH
-				Distelbusch 24
-				Velbert  NRW  42549
-				DE
-
-00-90-76   (hex)		FMT AIRCRAFT GATE SUPPORT SYSTEMS AB
-009076     (base 16)		FMT AIRCRAFT GATE SUPPORT SYSTEMS AB
-				
-				SE-231 32 TRELLEBORG    
-				SE
-
-00-90-17   (hex)		Zypcom, Inc
-009017     (base 16)		Zypcom, Inc
-				28400 Kohoutek Way
-				Union City  CA  94587-1212
-				US
-
-00-90-49   (hex)		ENTRIDIA CORPORATION
-009049     (base 16)		ENTRIDIA CORPORATION
-				101 PARK CENTER PLAZA
-				SAN JOSE  CA  95113-2218
-				US
-
-00-90-E6   (hex)		ALi Corporation
-0090E6     (base 16)		ALi Corporation
-				6F, 246 NeiHu Road, Sec. 1
-				Taipei    114
-				TW
-
-00-90-70   (hex)		NEO NETWORKS, INC.
-009070     (base 16)		NEO NETWORKS, INC.
-				10300 BREN ROAD EAST
-				MINNETONKA  MN  55343
-				US
-
-00-90-30   (hex)		HONEYWELL-DATING
-009030     (base 16)		HONEYWELL-DATING
-				VIA TINTORETTO, 15
-				21012 CASSANO MAGNAGO (VA)    
-				IT
-
-00-90-08   (hex)		HanA Systems Inc.
-009008     (base 16)		HanA Systems Inc.
-				EAHO B/D 740-1
-				SEOUL    
-				KR
-
-00-90-AC   (hex)		OPTIVISION, INC.
-0090AC     (base 16)		OPTIVISION, INC.
-				3450 HILLVIEW AVENUE
-				PALO ALTO  CA  94304
-				US
-
-00-90-4E   (hex)		DELEM BV
-00904E     (base 16)		DELEM BV
-				LUCHTHAVEN WEG 42
-				5657 EB EINDHOVEN    
-				NL
-
-00-90-ED   (hex)		CENTRAL SYSTEM RESEARCH CO., LTD.
-0090ED     (base 16)		CENTRAL SYSTEM RESEARCH CO., LTD.
-				4-13-2 HIYOSHICHO
-				KOKUBUNJI-CITY  TOKYO 18500032  
-				JP
-
-00-90-1E   (hex)		Selesta Ingegneria S.p.A.
-00901E     (base 16)		Selesta Ingegneria S.p.A.
-				via di Francia, 28
-				Genova    16149
-				IT
-
-00-90-75   (hex)		NEC DO BRASIL S.A.
-009075     (base 16)		NEC DO BRASIL S.A.
-				RODOVIA PRESIDENTE DUTRA, KM 218
-				São Paulo-SP  CEP - 07210-902  
-				BR
-
-00-90-AD   (hex)		ASPECT ELECTRONICS, INC.
-0090AD     (base 16)		ASPECT ELECTRONICS, INC.
-				12740 EARHART AVE.
-				AUBURN  CA  95602
-				US
-
-00-90-01   (hex)		NISHIMU ELECTRONICS INDUSTRIES CO., LTD.
-009001     (base 16)		NISHIMU ELECTRONICS INDUSTRIES CO., LTD.
-				700 TATENO MITAGAWA-CHO
-				KANZAKI-GUN SAGA PREF.    
-				JP
-
-00-90-43   (hex)		Tattile SRL 
-009043     (base 16)		Tattile SRL 
-				1-13-10 SHIROGANE  CHUO-KU
-				FUKUOKA-CITY    
-				JP
-
-00-90-CB   (hex)		Wireless OnLine, Inc.
-0090CB     (base 16)		Wireless OnLine, Inc.
-				4410 EL CAMINO REAL,  STE #101
-				LOS ALTOS  CA  94022
-				US
-
-00-10-63   (hex)		STARGUIDE DIGITAL NETWORKS
-001063     (base 16)		STARGUIDE DIGITAL NETWORKS
-				5754 PACIFIC CENTER BLVD.
-				SAN DIEGO  CA  92121
-				US
-
-00-10-23   (hex)		Network Equipment Technologies
-001023     (base 16)		Network Equipment Technologies
-				6900 Paseo Padre Parkway
-				Freemont  CA  94555-3660
-				US
-
-00-10-2B   (hex)		UMAX DATA SYSTEMS, INC.
-00102B     (base 16)		UMAX DATA SYSTEMS, INC.
-				NO. 1-1, R&D ROAD 2
-				HSINCHU    
-				TW
-
-00-90-8A   (hex)		BAYLY COMMUNICATIONS, INC.
-00908A     (base 16)		BAYLY COMMUNICATIONS, INC.
-				105 GREEN COURT
-				AJAX  Ontario  L1S 6W9  
-				CA
-
-00-90-0E   (hex)		HANDLINK TECHNOLOGIES, INC.
-00900E     (base 16)		HANDLINK TECHNOLOGIES, INC.
-				5F, 24-2, Industry E. Road IV,
-				Hsinchu 30077    
-				TW
-
-00-90-C1   (hex)		Peco II, Inc.
-0090C1     (base 16)		Peco II, Inc.
-				7060 Huntley Road
-				Columbus  OH  43229
-				US
-
-00-10-8D   (hex)		Johnson Controls, Inc.
-00108D     (base 16)		Johnson Controls, Inc.
-				507 E. Michigan St.
-				Milwaukee  WI  53201
-				US
-
-00-10-45   (hex)		Nortel Networks
-001045     (base 16)		Nortel Networks
-				OPTera Solutions Division
-				Kanata  Ontario K2K-2X3  
-				CA
-
-00-10-7D   (hex)		AURORA COMMUNICATIONS, LTD.
-00107D     (base 16)		AURORA COMMUNICATIONS, LTD.
-				P.O. BOX 1942
-				NSW 2113    
-				AU
-
-00-90-E4   (hex)		NEC AMERICA, INC.
-0090E4     (base 16)		NEC AMERICA, INC.
-				3100 N.E. SHUTE ROAD
-				HILLSBORO  OR  97124
-				US
-
-00-90-40   (hex)		Siemens Network Convergence LLC
-009040     (base 16)		Siemens Network Convergence LLC
-				Ten Technology Park Drive
-				Westford  MA  01886-3146
-				US
-
-00-90-C8   (hex)		WAVERIDER COMMUNICATIONS (CANADA) INC.
-0090C8     (base 16)		WAVERIDER COMMUNICATIONS (CANADA) INC.
-				
-				  British Columbia V1E 4R9  
-				CA
-
-00-90-1B   (hex)		DIGITAL CONTROLS
-00901B     (base 16)		DIGITAL CONTROLS
-				305 PIONEER BLVD.
-				SPRINGBORO  OH  45066-1100
-				US
-
-00-90-F7   (hex)		NBASE COMMUNICATIONS LTD.
-0090F7     (base 16)		NBASE COMMUNICATIONS LTD.
-				INDUSTRIAL PARK
-				    
-				IL
-
-00-90-12   (hex)		GLOBESPAN SEMICONDUCTOR, INC.
-009012     (base 16)		GLOBESPAN SEMICONDUCTOR, INC.
-				100 SCHULZ DRIVE
-				RED BANK  NJ  07701
-				US
-
-00-90-B7   (hex)		DIGITAL LIGHTWAVE, INC.
-0090B7     (base 16)		DIGITAL LIGHTWAVE, INC.
-				601 CLEVELAND STREET- 5TH FL.
-				CLEARWATER  FL  33755
-				US
-
-00-90-A0   (hex)		8X8 INC.
-0090A0     (base 16)		8X8 INC.
-				2445 MISSION COLLEGE BLVD.
-				SANTA CLARA  CA  95054
-				US
-
-00-90-47   (hex)		GIGA FAST E. LTD.
-009047     (base 16)		GIGA FAST E. LTD.
-				14F, NO.112, SEC. 1
-				Hsi-Chih  Taipei Hsien  
-				TW
-
-00-90-E1   (hex)		TELENA S.P.A.
-0090E1     (base 16)		TELENA S.P.A.
-				VIA SAVONA, 146
-				20144 MILANO    
-				IT
-
-00-90-32   (hex)		PELCOMBE GROUP LTD.
-009032     (base 16)		PELCOMBE GROUP LTD.
-				MAIN ROAD
-				  ESSEX C012 4LP  
-				GB
-
-00-10-62   (hex)		NX SERVER, ILNC.
-001062     (base 16)		NX SERVER, ILNC.
-				5401 E. LA PALMA AVE.
-				ANAHEIM  CA  92807
-				US
-
-00-10-F0   (hex)		RITTAL-WERK RUDOLF LOH GmbH & Co.
-0010F0     (base 16)		RITTAL-WERK RUDOLF LOH GmbH & Co.
-				AUF DEM STUTZELBERG
-				D-35745 HERBORN    
-				DE
-
-00-10-01   (hex)		Citel
-001001     (base 16)		Citel
-				Loughborough Innovation Centre
-				Loughborough    LE11 3EH
-				GB
-
-00-10-5C   (hex)		QUANTUM DESIGNS (H.K.) LTD.
-00105C     (base 16)		QUANTUM DESIGNS (H.K.) LTD.
-				5/F., SOMERSET HOUSE, TAIKOO PLACE
-				QUARRY BAY    
-				HK
-
-00-10-CF   (hex)		FIBERLANE COMMUNICATIONS
-0010CF     (base 16)		FIBERLANE COMMUNICATIONS
-				1318 REDWOOD WAY, #200
-				PETALUMA  CA  94954
-				US
-
-00-10-69   (hex)		HELIOSS COMMUNICATIONS, INC.
-001069     (base 16)		HELIOSS COMMUNICATIONS, INC.
-				391 TOTTEM POND RD.- STE#303
-				WALTHAM  MA  02154
-				US
-
-00-10-BF   (hex)		InterAir Wireless
-0010BF     (base 16)		InterAir Wireless
-				485 CAYUGA ROAD
-				BUFFALO  NY  14225-0222
-				US
-
-00-10-26   (hex)		ACCELERATED NETWORKS, INC.
-001026     (base 16)		ACCELERATED NETWORKS, INC.
-				31238 VIA COLINAS, UNIT
-				WESTLAKE VILLAGE  CA  91362
-				US
-
-00-10-36   (hex)		INTER-TEL INTEGRATED SYSTEMS
-001036     (base 16)		INTER-TEL INTEGRATED SYSTEMS
-				7300 W. BOSTON STREET
-				CHANDLER  AZ  85226
-				US
-
-00-10-39   (hex)		Vectron Systems AG
-001039     (base 16)		Vectron Systems AG
-				Willy-Brandt-Weg 41
-				48155 Muenster    
-				DE
-
-00-10-B6   (hex)		ENTRATA COMMUNICATIONS CORP.
-0010B6     (base 16)		ENTRATA COMMUNICATIONS CORP.
-				574 HERITAGE RD.
-				SOUTHBURY  CT  06488
-				US
-
-00-10-EC   (hex)		RPCG, LLC
-0010EC     (base 16)		RPCG, LLC
-				749 MINER ROAD
-				HIGHLAND HTS  OH  44143-2117
-				US
-
-00-10-59   (hex)		DIABLO RESEARCH CO. LLC
-001059     (base 16)		DIABLO RESEARCH CO. LLC
-				825 STEWART DRIVE
-				SUNNYVALE  CA  94086
-				US
-
-00-10-FC   (hex)		BROADBAND NETWORKS, INC.
-0010FC     (base 16)		BROADBAND NETWORKS, INC.
-				37 STEVENSON ROAD
-				WINNIPEG, MANITOBA R3H 0H9    
-				CA
-
-00-10-31   (hex)		OBJECTIVE COMMUNICATIONS, INC.
-001031     (base 16)		OBJECTIVE COMMUNICATIONS, INC.
-				75 ROCHESTER AVE.
-				PORTSMOUTH  NH  03801
-				US
-
-00-10-6D   (hex)		Axxcelera Broadband Wireless
-00106D     (base 16)		Axxcelera Broadband Wireless
-				1600 East Parham Road
-				Richmond  VA  23228
-				US
-
-00-10-4C   (hex)		Teledyne LeCroy, Inc
-00104C     (base 16)		Teledyne LeCroy, Inc
-				3385 Scott Blvd.
-				Santa Clara  CA  95054
-				US
-
-00-10-CC   (hex)		CLP COMPUTER LOGISTIK PLANUNG GmbH
-0010CC     (base 16)		CLP COMPUTER LOGISTIK PLANUNG GmbH
-				BASSERMANNSTR. 21
-				 D-81245 MUENCHEN    
-				DE
-
-00-10-30   (hex)		EION Inc.
-001030     (base 16)		EION Inc.
-				320 March Road
-				Ottawa  ON  K2K 2E3
-				CA
-
-00-10-D0   (hex)		WITCOM, LTD.
-0010D0     (base 16)		WITCOM, LTD.
-				P.O.B. 2250
-				HAIFA  31021    
-				IL
-
-00-10-93   (hex)		CMS COMPUTERS, LTD.
-001093     (base 16)		CMS COMPUTERS, LTD.
-				201 ARCADIA
-				MUMBAI 400 0021    
-				IN
-
-00-10-8F   (hex)		RAPTOR SYSTEMS
-00108F     (base 16)		RAPTOR SYSTEMS
-				69 HICKORY AVE.
-				WALTHAM  MA  02154
-				US
-
-00-10-A4   (hex)		XIRCOM
-0010A4     (base 16)		XIRCOM
-				2300 CORPORATE CENTER DR.
-				THOUSAND OAKS  CA  91320
-				US
-
-00-10-F1   (hex)		I-O CORPORATION
-0010F1     (base 16)		I-O CORPORATION
-				2256 SOUTH 3600 WEST
-				SALT LAKE CITY  UT  84119
-				US
-
-00-10-66   (hex)		ADVANCED CONTROL SYSTEMS, INC.
-001066     (base 16)		ADVANCED CONTROL SYSTEMS, INC.
-				2755 NORTHWOODS PARKWAY
-				NORCROSS  GA  30071
-				US
-
-00-10-AC   (hex)		IMCI TECHNOLOGIES
-0010AC     (base 16)		IMCI TECHNOLOGIES
-				8401 OLD COURT HKOUSE RD
-				VIENNA  VA  22182
-				US
-
-00-10-B1   (hex)		FOR-A CO., LTD.
-0010B1     (base 16)		FOR-A CO., LTD.
-				2-3-3 OOSAKU
-				CHIBA PREF. 285    
-				JP
-
-00-10-EE   (hex)		CTI PRODUCTS, INC.
-0010EE     (base 16)		CTI PRODUCTS, INC.
-				1211 W. SHARON RD.
-				CINCINNATI  OH  45240
-				US
-
-00-10-41   (hex)		BRISTOL BABCOCK, INC.
-001041     (base 16)		BRISTOL BABCOCK, INC.
-				1100 BUCKINGHAM STREET
-				WATERTOWN  CT  06795
-				US
-
-00-10-AA   (hex)		MEDIA4, INC.
-0010AA     (base 16)		MEDIA4, INC.
-				250 14TH ST. NW - STE #4002
-				ATLANTA  GA  30318
-				US
-
-00-10-E8   (hex)		TELOCITY, INCORPORATED
-0010E8     (base 16)		TELOCITY, INCORPORATED
-				992 SOUTH DE ANZA BLVD
-				SAN JOSE  CA  95129
-				US
-
-00-10-A2   (hex)		TNS
-0010A2     (base 16)		TNS
-				800 Third Street, Suite B100
-				HERNDON  VA  20170
-				US
-
-00-10-65   (hex)		RADYNE CORPORATION
-001065     (base 16)		RADYNE CORPORATION
-				5225 S. 37TH STREET
-				PHOENIX  AZ  85040
-				US
-
-00-10-9F   (hex)		PAVO, INC.
-00109F     (base 16)		PAVO, INC.
-				95 YESLER WAY
-				SEATTLE  WA  98104
-				US
-
-00-10-1D   (hex)		WINBOND ELECTRONICS CORP.
-00101D     (base 16)		WINBOND ELECTRONICS CORP.
-				NO. 4, CREATION RD. III
-				HSIN CHU    
-				TW
-
-00-10-84   (hex)		K-BOT COMMUNICATIONS
-001084     (base 16)		K-BOT COMMUNICATIONS
-				P.O. BOX 410
-				NORTON  MA  02766
-				US
-
-00-10-00   (hex)		CABLE TELEVISION LABORATORIES, INC.
-001000     (base 16)		CABLE TELEVISION LABORATORIES, INC.
-				858 Coal Creek Circle
-				Louisville  CO  80027
-				US
-
-00-10-09   (hex)		HORANET
-001009     (base 16)		HORANET
-				 ZI Route de Niort – BP 70328
-				FONTENAY LE COMTE CEDEX  VENDEE   85206
-				FR
-
-00-10-F8   (hex)		TEXIO TECHNOLOGY CORPORATION
-0010F8     (base 16)		TEXIO TECHNOLOGY CORPORATION
-				2-18-13 Shin Yokohama,
-				    222-0033
-				JP
-
-00-10-C0   (hex)		ARMA, Inc.
-0010C0     (base 16)		ARMA, Inc.
-				4851 Northshore Lane
-				North Little Rock  AR  72118
-				US
-
-00-10-5B   (hex)		NET INSIGHT AB
-00105B     (base 16)		NET INSIGHT AB
-				Västberga Allé 9
-				SE-1260  30 Hägersten  
-				SE
-
-00-10-02   (hex)		ACTIA
-001002     (base 16)		ACTIA
-				25 CHEMIN DE POUVOURVILLE
-				31432 TOULOUSE,  CEDEX 04    
-				FR
-
-00-10-EB   (hex)		SELSIUS SYSTEMS, INC.
-0010EB     (base 16)		SELSIUS SYSTEMS, INC.
-				5057 KELLER SPRINGS RD.
-				DALLAS  TX  75248
-				US
-
-00-10-57   (hex)		Rebel.com, Inc.
-001057     (base 16)		Rebel.com, Inc.
-				150 ISABELLA STREET--STE. 1000
-				OTTAWA, ONTARIO K1S 1V7    
-				CA
-
-00-10-F9   (hex)		UNIQUE SYSTEMS, INC.
-0010F9     (base 16)		UNIQUE SYSTEMS, INC.
-				181 DON PARK RD
-				MARKHAM, ONTARIO L3R 1C2    
-				CA
-
-00-10-75   (hex)		Segate Technology LLC
-001075     (base 16)		Segate Technology LLC
-				10200 S De Anza Blvd
-				Cupertino  CA  95014
-				US
-
-00-E0-03   (hex)		NOKIA WIRELESS BUSINESS COMMUN
-00E003     (base 16)		NOKIA WIRELESS BUSINESS COMMUN
-				ACCESS POINT PRODUCTS GROUP
-				CB4 0WS    
-				GB
-
-00-E0-F3   (hex)		WebSprint Communications, Inc.
-00E0F3     (base 16)		WebSprint Communications, Inc.
-				3026 SCOTT BLVD.
-				SANTA CLARA  CA  95054
-				US
-
-08-BB-CC   (hex)		AK-NORD EDV VERTRIEBSGES. mbH
-08BBCC     (base 16)		AK-NORD EDV VERTRIEBSGES. mbH
-				FRIEDRICHSTRASSE 10
-				25436 TORNESCH    
-				DE
-
-00-E0-DB   (hex)		ViaVideo Communications, Inc.
-00E0DB     (base 16)		ViaVideo Communications, Inc.
-				8900 SHOAL CREEK BLVD.
-				AUSTIN  TX  78757
-				US
-
-00-E0-A6   (hex)		TELOGY NETWORKS, INC.
-00E0A6     (base 16)		TELOGY NETWORKS, INC.
-				20250 CENTURY BLVD.
-				GERMANTOWN  MD  20874
-				US
-
-00-E0-9F   (hex)		PIXEL VISION
-00E09F     (base 16)		PIXEL VISION
-				43 NAGOG PARK
-				ACTON  MA  01720
-				US
-
-00-E0-CC   (hex)		HERO SYSTEMS, LTD.
-00E0CC     (base 16)		HERO SYSTEMS, LTD.
-				THE BARNES, COOMBELANDS LANE,
-				SURREY KT15 1HY  ENGLAND  
-				GB
-
-00-E0-80   (hex)		CONTROL RESOURCES CORPORATION
-00E080     (base 16)		CONTROL RESOURCES CORPORATION
-				16-00 POLLITT DRIVE
-				FAIR LAWN  NJ  07410
-				US
-
-00-E0-04   (hex)		PMC-SIERRA, INC.
-00E004     (base 16)		PMC-SIERRA, INC.
-				105-8555 BAXTER PLACE
-				BURNABY, BC V5A 4V7    
-				CA
-
-00-E0-3B   (hex)		PROMINET CORPORATION
-00E03B     (base 16)		PROMINET CORPORATION
-				110 TURNPIKE RD. - STE. #208
-				WESTBOROUGH  MA  01581
-				US
-
-00-E0-F5   (hex)		TELES AG
-00E0F5     (base 16)		TELES AG
-				DOVESTR. 2-4
-				10587 BERLIN    
-				DE
-
-00-E0-D7   (hex)		SUNSHINE ELECTRONICS, INC.
-00E0D7     (base 16)		SUNSHINE ELECTRONICS, INC.
-				46560 FREMONT BLVD. -STE. #113
-				FREMONT  CA  94538
-				US
-
-00-E0-B5   (hex)		ARDENT COMMUNICATIONS CORP.
-00E0B5     (base 16)		ARDENT COMMUNICATIONS CORP.
-				3801 ZANKER ROAD,  Suite A
-				SAN JOSE  CA  95134
-				US
-
-00-E0-68   (hex)		MERRIMAC SYSTEMS INC.
-00E068     (base 16)		MERRIMAC SYSTEMS INC.
-				2144 MC COY ROAD
-				CARROLLTON  TX  75006
-				US
-
-00-E0-49   (hex)		MICROWI ELECTRONIC GmbH
-00E049     (base 16)		MICROWI ELECTRONIC GmbH
-				ZUSAMSTRASSE 8
-				D 86165 AUGSBURG    
-				DE
-
-00-E0-95   (hex)		ADVANCED-VISION TECHNOLGIES CORP.
-00E095     (base 16)		ADVANCED-VISION TECHNOLGIES CORP.
-				8F-1, 87 SECTION 3, CHUNG YANG RD,
-				Tu Cheng  Taipei  
-				TW
-
-00-E0-0E   (hex)		AVALON IMAGING SYSTEMS, INC.
-00E00E     (base 16)		AVALON IMAGING SYSTEMS, INC.
-				3133 INDIAN ROAD
-				BOULDER  CO  80301
-				US
-
-00-E0-48   (hex)		SDL COMMUNICATIONS, INC.
-00E048     (base 16)		SDL COMMUNICATIONS, INC.
-				P.O. BOX 1303
-				EASTON  MA  02334
-				US
-
-00-E0-CB   (hex)		RESON, INC.
-00E0CB     (base 16)		RESON, INC.
-				300 LOPEZ ROAD
-				GOLETA  CA  93117
-				US
-
-00-E0-C8   (hex)		VIRTUAL ACCESS, LTD.
-00E0C8     (base 16)		VIRTUAL ACCESS, LTD.
-				WOODSIDE HOUSE, WINKFIELD,
-				WINDSOR, BERKSHIRE SL4 2DX  ENGLAND  
-				GB
-
-00-E0-06   (hex)		SILICON INTEGRATED SYS. CORP.
-00E006     (base 16)		SILICON INTEGRATED SYS. CORP.
-				16, CREATION RD. I
-				HSIN CHU    
-				TW
-
-00-E0-AC   (hex)		MIDSCO, INC.
-00E0AC     (base 16)		MIDSCO, INC.
-				710 ROUTE 46 EAST
-				FAIRFIELD  NJ  07004
-				US
-
-00-E0-08   (hex)		AMAZING CONTROLS! INC.
-00E008     (base 16)		AMAZING CONTROLS! INC.
-				1615 WYATT DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-E0-AE   (hex)		XAQTI CORPORATION
-00E0AE     (base 16)		XAQTI CORPORATION
-				 1630 OAKLAND RD. #A-214
-				SAN JOSE  CA  95131
-				US
-
-00-E0-E0   (hex)		SI ELECTRONICS, LTD.
-00E0E0     (base 16)		SI ELECTRONICS, LTD.
-				28-16, SHIMOMARUKO 2-CHOME,
-				TOKYO 146    
-				JP
-
-00-E0-50   (hex)		EXECUTONE INFORMATION SYSTEMS, INC.
-00E050     (base 16)		EXECUTONE INFORMATION SYSTEMS, INC.
-				478 WHEELERS FARMS ROAD
-				MILFORD  CT  06460
-				US
-
-00-E0-23   (hex)		TELRAD
-00E023     (base 16)		TELRAD
-				P.O. BOX 50
-				LOD 71100    
-				IL
-
-00-E0-2C   (hex)		AST COMPUTER
-00E02C     (base 16)		AST COMPUTER
-				16215 ALTON PARKWAY
-				IRVINE  CA  92718
-				US
-
-00-E0-67   (hex)		eac AUTOMATION-CONSULTING GmbH
-00E067     (base 16)		eac AUTOMATION-CONSULTING GmbH
-				HERMSDORFER DAMM 222
-				73467 BERLIN    
-				DE
-
-00-E0-FA   (hex)		TRL TECHNOLOGY, LTD.
-00E0FA     (base 16)		TRL TECHNOLOGY, LTD.
-				SHANNON WAY, ASHCHURCH,
-				TEWKESBURY, GLOS. GL20 8ND    
-				GB
-
-00-E0-2A   (hex)		TANDBERG TELEVISION AS
-00E02A     (base 16)		TANDBERG TELEVISION AS
-				PHILIP PEDERSENS V 20
-				N-1324 LYSAKER    
-				NO
-
-00-E0-4E   (hex)		SANYO DENKI CO., LTD.
-00E04E     (base 16)		SANYO DENKI CO., LTD.
-				812-3, Shimonogou, Ueda-Shi
-				Nagano    386-1211
-				JP
-
-00-E0-12   (hex)		PLUTO TECHNOLOGIES INTERNATIONAL INC.
-00E012     (base 16)		PLUTO TECHNOLOGIES INTERNATIONAL INC.
-				2511 55TH STREET
-				BOULDER  CO  80301
-				US
-
-00-E0-4C   (hex)		REALTEK SEMICONDUCTOR CORP.
-00E04C     (base 16)		REALTEK SEMICONDUCTOR CORP.
-				1F, NO. 11, INDUSTRY E. RD. IX
-				HSINCHU 300    
-				TW
-
-00-E0-51   (hex)		TALX CORPORATION
-00E051     (base 16)		TALX CORPORATION
-				1850 BORMAN COURT
-				ST. LOUIS  MO  63146
-				US
-
-00-60-6B   (hex)		Synclayer Inc.
-00606B     (base 16)		Synclayer Inc.
-				1-20 Himegaoka
-				GIFU 509-0249    
-				JP
-
-00-60-3B   (hex)		AMTEC spa
-00603B     (base 16)		AMTEC spa
-				LOC. S. MARTINO
-				53025 PIANCASTAGNAIO (SIENA)    
-				IT
-
-00-E0-39   (hex)		PARADYNE CORP.
-00E039     (base 16)		PARADYNE CORP.
-				8545 126TH AVENUE NORTH
-				LARGO  FL  33773
-				US
-
-00-60-0B   (hex)		LOGWARE GmbH
-00600B     (base 16)		LOGWARE GmbH
-				SCHWEDENSTR. 9
-				D-13359 BERLIN    
-				DE
-
-00-E0-C7   (hex)		EUROTECH SRL
-00E0C7     (base 16)		EUROTECH SRL
-				VIA JACOPO LINUSSIO 1
-				33030 AMAROO (UD)    
-				IT
-
-00-E0-AF   (hex)		GENERAL DYNAMICS INFORMATION SYSTEMS
-00E0AF     (base 16)		GENERAL DYNAMICS INFORMATION SYSTEMS
-				COMPUTING DEVICES, LTD.
-				FALLS CHURCH  VA  22042-4523
-				US
-
-00-E0-54   (hex)		KODAI HITEC CO., LTD.
-00E054     (base 16)		KODAI HITEC CO., LTD.
-				2-45 ONUMA HANYU CITY
-				SAITAMA.348    
-				JP
-
-00-E0-B9   (hex)		BYAS SYSTEMS
-00E0B9     (base 16)		BYAS SYSTEMS
-				2250 MONROE STREET,  #371
-				SANTA CLARA  CA  95050
-				US
-
-00-60-4B   (hex)		Safe-com GmbH & Co. KG
-00604B     (base 16)		Safe-com GmbH & Co. KG
-				Burg Lichtenfels 1
-				35104 Lichtenfels    
-				DE
-
-00-E0-EF   (hex)		DIONEX
-00E0EF     (base 16)		DIONEX
-				PO BOX 3603
-				SUNNYVALE  CA  94088-3603
-				US
-
-00-E0-2D   (hex)		InnoMediaLogic, Inc.
-00E02D     (base 16)		InnoMediaLogic, Inc.
-				3653 CHEMIN CHAMBLY
-				LONGUEUIL, QUEBEC J4L J4L    IN9
-				CA
-
-00-E0-35   (hex)		Artesyn Embedded Technologies
-00E035     (base 16)		Artesyn Embedded Technologies
-				2900 S. Diablo Way
-				Tempe  AZ  85282
-				US
-
-00-E0-90   (hex)		BECKMAN LAB. AUTOMATION DIV.
-00E090     (base 16)		BECKMAN LAB. AUTOMATION DIV.
-				90 BOROLINE ROAD
-				ALLENDALE  NJ  07401
-				US
-
-00-60-01   (hex)		InnoSys, Inc.
-006001     (base 16)		InnoSys, Inc.
-				3095 RICHMOND PKWY #207
-				RICHMOND  CA  94806
-				US
-
-00-60-FE   (hex)		LYNX SYSTEM DEVELOPERS, INC.
-0060FE     (base 16)		LYNX SYSTEM DEVELOPERS, INC.
-				175N NEW BOSTON STREET
-				WOBURN  MA  01801
-				US
-
-00-60-BD   (hex)		Enginuity Communications
-0060BD     (base 16)		Enginuity Communications
-				3545 Stern Avenue
-				St Charles  IL  60174
-				US
-
-00-08-00   (hex)		MULTITECH SYSTEMS, INC.
-000800     (base 16)		MULTITECH SYSTEMS, INC.
-				2205 WOODALE DRIVE
-				MOUNDS VIEW  MN  55112
-				US
-
-00-E0-85   (hex)		GLOBAL MAINTECH, INC.
-00E085     (base 16)		GLOBAL MAINTECH, INC.
-				6468 CITY WEST PARKWAY
-				EDEN PRAIRIE  MN  55344
-				US
-
-00-E0-BE   (hex)		GENROCO INTERNATIONAL, INC.
-00E0BE     (base 16)		GENROCO INTERNATIONAL, INC.
-				255 ENDERS COURT
-				SLINGER  WI  53086
-				US
-
-00-E0-B6   (hex)		Entrada Networks
-00E0B6     (base 16)		Entrada Networks
-				9020 JUNCTION DRIVE
-				ANNAPOLIS JUNCTION  MD  20701
-				US
-
-00-E0-F4   (hex)		INSIDE Technology A/S
-00E0F4     (base 16)		INSIDE Technology A/S
-				VENLIGHEDSVEJ 6
-				DK-2970 HOERSHOLM    
-				DK
-
-00-E0-A0   (hex)		WILTRON CO.
-00E0A0     (base 16)		WILTRON CO.
-				490 JARVIS DRIVE
-				MORGAN HILL  CA  95037
-				US
-
-00-E0-F1   (hex)		THAT CORPORATION
-00E0F1     (base 16)		THAT CORPORATION
-				734 FOREST STREET
-				MARLBOROUGH  MA  01752
-				US
-
-00-60-D5   (hex)		AMADA MIYACHI Co., Ltd
-0060D5     (base 16)		AMADA MIYACHI Co., Ltd
-				95-3, FUTASUZUKA NODA
-				CHIBA    278-0016
-				JP
-
-00-60-3F   (hex)		PATAPSCO DESIGNS
-00603F     (base 16)		PATAPSCO DESIGNS
-				5350 PARTNERS COURT
-				FREDERICK  MD  21703
-				US
-
-00-60-B5   (hex)		KEBA GmbH
-0060B5     (base 16)		KEBA GmbH
-				GEWERBEPARK URFAHR
-				A-4041 LINZ    
-				AT
-
-00-60-14   (hex)		EDEC CO., LTD.
-006014     (base 16)		EDEC CO., LTD.
-				9F OF T.O.C. BUILDING
-				SHINAGAWAKU,  TOKYO    
-				JP
-
-00-60-AC   (hex)		RESILIENCE CORPORATION
-0060AC     (base 16)		RESILIENCE CORPORATION
-				1755 EMBARCADERO ROAD-STE #120
-				PALO ALTO  CA  94303
-				US
-
-00-60-4E   (hex)		CYCLE COMPUTER CORPORATION, INC.
-00604E     (base 16)		CYCLE COMPUTER CORPORATION, INC.
-				20245 STEVENS CREEK BLVD.
-				CUPERTINO  CA  95014
-				US
-
-00-60-E1   (hex)		ORCKIT COMMUNICATIONS LTD.
-0060E1     (base 16)		ORCKIT COMMUNICATIONS LTD.
-				38 NAHALAT YIZHAK STREET
-				TEL-AVIV  67448    
-				IL
-
-00-60-D2   (hex)		LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD.
-0060D2     (base 16)		LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD.
-				#2, INNOVATION ROAD II
-				HSIN CHU    
-				TW
-
-00-60-42   (hex)		TKS (USA), INC.
-006042     (base 16)		TKS (USA), INC.
-				1201 COMMERCE
-				RICHARDSON  TX  75081
-				US
-
-00-60-79   (hex)		Mainstream Data, Inc.
-006079     (base 16)		Mainstream Data, Inc.
-				375 Chipeta Way, Suite B
-				Salt Lake City  UT  84108
-				US
-
-00-60-9A   (hex)		NJK TECHNO CO.
-00609A     (base 16)		NJK TECHNO CO.
-				N1-25 KAMIYASATO
-				KOMATSU  #923    
-				JP
-
-00-60-2B   (hex)		PEAK AUDIO
-00602B     (base 16)		PEAK AUDIO
-				1790 30TH STREET STE #414
-				BOULDER  CO  80301
-				US
-
-00-60-F1   (hex)		EXP COMPUTER, INC.
-0060F1     (base 16)		EXP COMPUTER, INC.
-				141 EILEEN WAY
-				SYOSSET  NY  11791
-				US
-
-00-60-E6   (hex)		SHOMITI SYSTEMS INCORPORATED
-0060E6     (base 16)		SHOMITI SYSTEMS INCORPORATED
-				2099 GATEWAY PLACE - STE.#220
-				SAN JOSE  CA  95110
-				US
-
-00-60-FF   (hex)		QuVis, Inc.
-0060FF     (base 16)		QuVis, Inc.
-				2921 SW WANAMAKER DRIVE
-				TOPEKA  KS  66614
-				US
-
-00-60-67   (hex)		ACER NETXUS INC.
-006067     (base 16)		ACER NETXUS INC.
-				5F-3, 5 HSIN ANN ROAD  SBIP
-				HSINCHU 300    
-				TJ
-
-00-60-9F   (hex)		PHAST CORPORATION
-00609F     (base 16)		PHAST CORPORATION
-				79 WEST 4500 SOUTH - BLDG.#14
-				SALT LAKE CITY  UT  84107
-				US
-
-00-60-40   (hex)		NETRO CORP.
-006040     (base 16)		NETRO CORP.
-				3120 SCOTT BLVD.
-				SANTA CLARA  CA  95054
-				US
-
-00-60-CC   (hex)		EMTRAK, INCORPORATED
-0060CC     (base 16)		EMTRAK, INCORPORATED
-				7150 CAMPUS DRIVE, STE #180
-				COLORADO SPRINGS  CO  80920
-				US
-
-00-60-2C   (hex)		LINX Data Terminals, Inc.
-00602C     (base 16)		LINX Data Terminals, Inc.
-				625 DIGITAL DRIVE-STE #100
-				PLANO  TX  75075
-				US
-
-00-60-7E   (hex)		GIGALABS, INC.
-00607E     (base 16)		GIGALABS, INC.
-				290 SANTA ANA COURT
-				SUNNYVALE  CA  94086
-				US
-
-00-60-CD   (hex)		VideoServer, Inc.
-0060CD     (base 16)		VideoServer, Inc.
-				5 FORBES ROAD
-				LEXINGTON  MA  02173
-				US
-
-00-60-AA   (hex)		INTELLIGENT DEVICES INC. (IDI)
-0060AA     (base 16)		INTELLIGENT DEVICES INC. (IDI)
-				1718-L BELMONT AVENUE
-				BALTIMORE  MD  21244
-				US
-
-00-60-25   (hex)		ACTIVE IMAGING PLC
-006025     (base 16)		ACTIVE IMAGING PLC
-				HATTORI HOUSE
-				MAIDENHEAD  Berkshire SL6 4UB  
-				GB
-
-00-60-A7   (hex)		MICROSENS GmbH & CO. KG
-0060A7     (base 16)		MICROSENS GmbH & CO. KG
-				Kueferstrasse 16
-				D-59067 Hamm    
-				DE
-
-00-05-A8   (hex)		WYLE ELECTRONICS
-0005A8     (base 16)		WYLE ELECTRONICS
-				3000 BOWERS AVENUE
-				SANTA CLARA  CA  95051-0919
-				US
-
-00-60-E5   (hex)		FUJI AUTOMATION CO., LTD.
-0060E5     (base 16)		FUJI AUTOMATION CO., LTD.
-				3-23-10, NEGISHI
-				URAWA-SHI, 336 SAITAMA    
-				US
-
-00-60-5E   (hex)		LIBERTY TECHNOLOGY NETWORKING
-00605E     (base 16)		LIBERTY TECHNOLOGY NETWORKING
-				P.O. BOX 11566
-				HATFIELD, PRETORIA 0028    
-				ZA
-
-00-60-C6   (hex)		DCS AG
-0060C6     (base 16)		DCS AG
-				SALZACHSTRASS 31
-				D-14129  BERLIN    
-				DE
-
-00-60-1E   (hex)		SOFTLAB, INC.
-00601E     (base 16)		SOFTLAB, INC.
-				P.O. BOX 8
-				CHIMNEY ROCK  CO  81127
-				US
-
-00-60-5D   (hex)		SCANIVALVE CORP.
-00605D     (base 16)		SCANIVALVE CORP.
-				1722 N. MADSON STREET
-				LIBERTY LAKE  WA  99019
-				US
-
-00-60-6F   (hex)		CLARION CORPORATION OF AMERICA
-00606F     (base 16)		CLARION CORPORATION OF AMERICA
-				25 Commerce Drive
-				Allendale  NJ  07401
-				US
-
-00-A0-10   (hex)		SYSLOGIC DATENTECHNIK AG
-00A010     (base 16)		SYSLOGIC DATENTECHNIK AG
-				Bruggerstrasse 69
-				CH-5400 Baden    
-				CH
-
-00-A0-59   (hex)		HAMILTON HALLMARK
-00A059     (base 16)		HAMILTON HALLMARK
-				2105 LUNDY AVENUE
-				SAN JOSE  CA  95131
-				US
-
-00-A0-39   (hex)		ROSS TECHNOLOGY, INC.
-00A039     (base 16)		ROSS TECHNOLOGY, INC.
-				5316 HWY 290 WEST - STE. #500
-				AUSTIN  TX  78735
-				US
-
-00-A0-AD   (hex)		MARCONI SPA
-00A0AD     (base 16)		MARCONI SPA
-				VIA NEGRONE, 1A
-				16153 GENOVA CORNIGLIANO    
-				IT
-
-00-A0-D6   (hex)		SBE, Inc.
-00A0D6     (base 16)		SBE, Inc.
-				4000 Executive Parkway
-				San Ramon  CA  94583
-				US
-
-00-A0-2E   (hex)		BRAND COMMUNICATIONS, LTD.
-00A02E     (base 16)		BRAND COMMUNICATIONS, LTD.
-				ENTERPRISE HOUSE, CHIVERS WAY,
-				HISTON, CAMBRIDGE CB4 4ZR    
-				GB
-
-00-60-4A   (hex)		SAIC IDEAS GROUP
-00604A     (base 16)		SAIC IDEAS GROUP
-				7120 COLUMBIA GATEWAY DRIVE
-				COLUMBIA  MD  21046
-				US
-
-00-A0-BD   (hex)		I-TECH CORP.
-00A0BD     (base 16)		I-TECH CORP.
-				10200 VALLEY VIEW ROAD
-				EDEN PRAIRIE  MN  55344
-				US
-
-00-60-90   (hex)		Artiza Networks Inc
-006090     (base 16)		Artiza Networks Inc
-				Faret Tachikawa Center Square, 2-36-2 Akebono-cho, 
-				Tachikawa-shi,  Tokyo   190-0012
-				JP
-
-00-60-0D   (hex)		Digital Logic GmbH
-00600D     (base 16)		Digital Logic GmbH
-				Stahlwerkstraße 25
-				Mudersbach    57555
-				DE
-
-00-60-30   (hex)		VILLAGE TRONIC ENTWICKLUNG
-006030     (base 16)		VILLAGE TRONIC ENTWICKLUNG
-				WELLWEG 95
-				31157 SARSTEDT    
-				DE
-
-00-A0-8D   (hex)		JACOMO CORPORATION
-00A08D     (base 16)		JACOMO CORPORATION
-				26900 E. PINK HILL ROAD
-				INDEPENDENCE  MO  64057
-				US
-
-00-A0-8E   (hex)		Check Point Software Technologies
-00A08E     (base 16)		Check Point Software Technologies
-				8333 Ridgepoint Dr.
-				Irving  TX  75063
-				US
-
-00-A0-FC   (hex)		IMAGE SCIENCES, INC.
-00A0FC     (base 16)		IMAGE SCIENCES, INC.
-				7500 INNOVATION WAY
-				MASON  OH  45040
-				US
-
-00-A0-9C   (hex)		Xyplex, Inc.
-00A09C     (base 16)		Xyplex, Inc.
-				25 FOSTER STREET
-				LITTLETON  MA  01460
-				US
-
-00-A0-0D   (hex)		THE PANDA PROJECT
-00A00D     (base 16)		THE PANDA PROJECT
-				5201 CONGRESS AVE. - C-100
-				BOCA RATON  FL  33487
-				US
-
-00-A0-E9   (hex)		ELECTRONIC RETAILING SYSTEMS INTERNATIONAL
-00A0E9     (base 16)		ELECTRONIC RETAILING SYSTEMS INTERNATIONAL
-				372 DANBURY ROAD
-				WILTON  CT  06897-2523
-				US
-
-00-A0-BE   (hex)		INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP
-00A0BE     (base 16)		INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP
-				1271 PARKMOOR AVENUE
-				SAN JOSE  CA  95126-3448
-				US
-
-00-A0-16   (hex)		MICROPOLIS CORP.
-00A016     (base 16)		MICROPOLIS CORP.
-				21211 NORDHOFF STREET
-				CHATSWORTH  CA  91311
-				US
-
-00-A0-48   (hex)		QUESTECH, LTD.
-00A048     (base 16)		QUESTECH, LTD.
-				EASTHEATH AVENUE
-				 BERKS, RG11 2PP    
-				GB
-
-00-A0-03   (hex)		Siemens Switzerland Ltd., I B T HVP
-00A003     (base 16)		Siemens Switzerland Ltd., I B T HVP
-				Building Technologies Division, International Headquarters
-				Zug    6301
-				CH
-
-00-A0-F9   (hex)		BINTEC COMMUNICATIONS GMBH
-00A0F9     (base 16)		BINTEC COMMUNICATIONS GMBH
-				SUEDWESTPARK 94
-				90449 NUERNBERG    
-				DE
-
-00-A0-F5   (hex)		RADGUARD LTD.
-00A0F5     (base 16)		RADGUARD LTD.
-				8 HANECHOSHET STREET
-				TEL-AVIV  69710    
-				IL
-
-00-A0-CA   (hex)		FUJITSU DENSO LTD.
-00A0CA     (base 16)		FUJITSU DENSO LTD.
-				3055 ORCHARD DRIVE
-				SAN JOSE  CA  95134
-				US
-
-00-A0-22   (hex)		CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING
-00A022     (base 16)		CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING
-				UNIVERSITY OF POONA CAMPUS
-				GANESH KHIND, Pune - 411 008    
-				IN
-
-00-A0-B6   (hex)		SANRITZ AUTOMATION CO., LTD.
-00A0B6     (base 16)		SANRITZ AUTOMATION CO., LTD.
-				4-21 MINAMI NARUSE
-				    
-				
-
-00-A0-79   (hex)		ALPS ELECTRIC (USA), INC.
-00A079     (base 16)		ALPS ELECTRIC (USA), INC.
-				3553 NORTH 1ST STREET
-				SAN JOSE  CA  95134
-				US
-
-00-A0-C0   (hex)		DIGITAL LINK CORP.
-00A0C0     (base 16)		DIGITAL LINK CORP.
-				217 HUMBOLDT COURT
-				SUNNYVALE  CA  94089
-				US
-
-00-A0-1E   (hex)		EST CORPORATION
-00A01E     (base 16)		EST CORPORATION
-				120 ROYALL STREET
-				CANTON  MA  02021
-				US
-
-00-A0-AE   (hex)		NUCOM SYSTEMS, INC.
-00A0AE     (base 16)		NUCOM SYSTEMS, INC.
-				9F-6, NO 4, LANE
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-A0-62   (hex)		AES PRODATA
-00A062     (base 16)		AES PRODATA
-				249 BALCATTA ROAD
-				WESTERN  AUSTRALIA  6021
-				AU
-
-00-A0-76   (hex)		CARDWARE LAB, INC.
-00A076     (base 16)		CARDWARE LAB, INC.
-				285 SOBRANTE WAY, STE.
-				SUNNYVALE  CA  94086
-				VI
-
-00-A0-A1   (hex)		EPIC DATA INC.
-00A0A1     (base 16)		EPIC DATA INC.
-				7280 RIVER ROAD
-				CANADA  V6X  1X5
-				
-
-00-A0-44   (hex)		NTT IT CO., LTD.
-00A044     (base 16)		NTT IT CO., LTD.
-				
-				  231  
-				JP
-
-00-A0-11   (hex)		MUTOH INDUSTRIES LTD.
-00A011     (base 16)		MUTOH INDUSTRIES LTD.
-				253 KANAGAWA-KEN,
-				    
-				JP
-
-00-A0-BA   (hex)		PATTON ELECTRONICS CO.
-00A0BA     (base 16)		PATTON ELECTRONICS CO.
-				7622 RICKENBACKER DRIVE
-				GAITHERSBURG  MD  20879
-				US
-
-00-A0-B5   (hex)		3H TECHNOLOGY
-00A0B5     (base 16)		3H TECHNOLOGY
-				3375 SCOTT BLVD. #336
-				SANTA CLARA  CA  95054
-				US
-
-00-A0-4D   (hex)		EDA INSTRUMENTS, INC.
-00A04D     (base 16)		EDA INSTRUMENTS, INC.
-				4 THORNCLIFFE PARK DRIVE
-				    M4H 1H1
-				CA
-
-00-A0-86   (hex)		AMBER WAVE SYSTEMS, INC.
-00A086     (base 16)		AMBER WAVE SYSTEMS, INC.
-				403 MASSACHUSETTS AVENUE
-				ACTON  MA  01720
-				US
-
-00-A0-AF   (hex)		WMS INDUSTRIES
-00A0AF     (base 16)		WMS INDUSTRIES
-				3401 N. CALIFORNIA
-				CHICAGO  IL  60618
-				US
-
-00-A0-57   (hex)		LANCOM Systems GmbH
-00A057     (base 16)		LANCOM Systems GmbH
-				Adenauer Straße 20 /B2
-				Würselen    52146
-				DE
-
-00-A0-30   (hex)		CAPTOR NV/SA
-00A030     (base 16)		CAPTOR NV/SA
-				DE HENE 13
-				    
-				BE
-
-00-A0-DE   (hex)		YAMAHA CORPORATION
-00A0DE     (base 16)		YAMAHA CORPORATION
-				10-1 Nakazawa-cho, Naka-ku
-				Hamamatsu  Shizuoka  430-8650
-				JP
-
-00-A0-84   (hex)		Dataplex Pty Ltd
-00A084     (base 16)		Dataplex Pty Ltd
-				Ground floor,
-				MACQUARIE PARK  NSW  2113
-				AU
-
-00-A0-49   (hex)		DIGITECH INDUSTRIES, INC.
-00A049     (base 16)		DIGITECH INDUSTRIES, INC.
-				PO BOX 2267
-				DANBURY  CT  06810
-				US
-
-00-A0-9D   (hex)		JOHNATHON FREEMAN TECHNOLOGIES
-00A09D     (base 16)		JOHNATHON FREEMAN TECHNOLOGIES
-				P.O. BOX 880114
-				SAN FRANCISCO  CA  94188
-				US
-
-00-A0-6B   (hex)		DMS DORSCH MIKROSYSTEM GMBH
-00A06B     (base 16)		DMS DORSCH MIKROSYSTEM GMBH
-				HOLMLUECK 13-15
-				    
-				DE
-
-00-A0-F8   (hex)		Zebra Technologies Inc
-00A0F8     (base 16)		Zebra Technologies Inc
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-00-A0-9F   (hex)		COMMVISION CORP.
-00A09F     (base 16)		COMMVISION CORP.
-				510 LOGUE AVE.
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-A0-6E   (hex)		AUSTRON, INC.
-00A06E     (base 16)		AUSTRON, INC.
-				P.O. BOX 14766
-				AUSTIN  TX  78761-4766
-				US
-
-00-20-22   (hex)		NMS Communications
-002022     (base 16)		NMS Communications
-				100 Crossing Boulevard
-				Framingham  MA  01702
-				US
-
-00-20-AE   (hex)		ORNET DATA COMMUNICATION TECH.
-0020AE     (base 16)		ORNET DATA COMMUNICATION TECH.
-				P.O. BOX 323
-				    
-				IL
-
-00-20-AA   (hex)		Ericsson Television Limited
-0020AA     (base 16)		Ericsson Television Limited
-				Solution Area Media
-				Comines Way, Hedge End  Southhampton  SO 30 4DA
-				GB
-
-00-20-A4   (hex)		MULTIPOINT NETWORKS
-0020A4     (base 16)		MULTIPOINT NETWORKS
-				19 DAVIS DRIVE
-				BELMONT  CA  94002-3001
-				US
-
-00-02-67   (hex)		NODE RUNNER, INC.
-000267     (base 16)		NODE RUNNER, INC.
-				2202 N. FORBES BLVD.
-				TUCSON  AZ  85745
-				US
-
-00-20-B1   (hex)		COMTECH RESEARCH INC.
-0020B1     (base 16)		COMTECH RESEARCH INC.
-				24271 TAHOE
-				LAGUNA NIGUEL  CA  92656
-				US
-
-00-20-32   (hex)		ALCATEL TAISEL
-002032     (base 16)		ALCATEL TAISEL
-				4, MING SHENG STREET TU-CHENG
-				  TAIWAN  ROC
-				TW
-
-00-20-E9   (hex)		DANTEL
-0020E9     (base 16)		DANTEL
-				P.O. BOX 55013
-				FRESNO  CA  93727-1388
-				US
-
-00-20-38   (hex)		VME MICROSYSTEMS INTERNATIONAL CORPORATION
-002038     (base 16)		VME MICROSYSTEMS INTERNATIONAL CORPORATION
-				12090 S. MEMORIAL PARKWAY
-				HUNTSVILLE  AL  35803
-				US
-
-00-20-A3   (hex)		Harmonic, Inc
-0020A3     (base 16)		Harmonic, Inc
-				4300 North First Street
-				San Jose  CA  95134
-				US
-
-00-20-59   (hex)		MIRO COMPUTER PRODUCTS AG
-002059     (base 16)		MIRO COMPUTER PRODUCTS AG
-				CARL MIELE STR. 4
-				D-38112 BRAUNSCHWEIG    
-				DE
-
-00-20-34   (hex)		ROTEC INDUSTRIEAUTOMATION GMBH
-002034     (base 16)		ROTEC INDUSTRIEAUTOMATION GMBH
-				GUTENBERGSTR. 15
-				    
-				DE
-
-00-20-79   (hex)		MIKRON GMBH
-002079     (base 16)		MIKRON GMBH
-				BRESLAUERSTR. 1-3
-				85386 ECHING    
-				DE
-
-00-20-05   (hex)		SIMPLE TECHNOLOGY
-002005     (base 16)		SIMPLE TECHNOLOGY
-				3001 DAIMLER ROAD
-				SANTA ANA  CA  92705
-				US
-
-00-20-18   (hex)		CIS TECHNOLOGY INC.
-002018     (base 16)		CIS TECHNOLOGY INC.
-				FL. 9-1, NO. 94, PAO CHUNG RD.
-				TAIPEI HSIEN    
-				TW
-
-00-20-98   (hex)		HECTRONIC AB
-002098     (base 16)		HECTRONIC AB
-				BOX 3002
-				S-75003 UPPSALA    
-				SE
-
-00-20-FD   (hex)		ITV TECHNOLOGIES, INC.
-0020FD     (base 16)		ITV TECHNOLOGIES, INC.
-				6800 OWENSMOUTH AVE.  #230
-				CANOGA PARK  CA  91303
-				US
-
-00-20-FA   (hex)		GDE SYSTEMS, INC.
-0020FA     (base 16)		GDE SYSTEMS, INC.
-				P.O. BOX 85468 - BLDG.#61
-				SAN DIEGO  CA  92186-5468
-				US
-
-00-20-C1   (hex)		SAXA, Inc.
-0020C1     (base 16)		SAXA, Inc.
-				NBF Platinum Tower 1-17-3 Shirokane
-				Tokyo    108-8050
-				JP
-
-00-20-80   (hex)		SYNERGY (UK) LTD.
-002080     (base 16)		SYNERGY (UK) LTD.
-				HARTCRAN HOUSE
-				WATFORD HERTS.  WD1 5EZ    
-				GB
-
-00-C0-23   (hex)		TUTANKHAMON ELECTRONICS
-00C023     (base 16)		TUTANKHAMON ELECTRONICS
-				2446 ESTAND WAY
-				PLEASANT HILL  CA  94523
-				US
-
-00-C0-8B   (hex)		RISQ MODULAR SYSTEMS, INC.
-00C08B     (base 16)		RISQ MODULAR SYSTEMS, INC.
-				39899 BALENTINE DRIVE-STE #375
-				NEWARK  CA  94560
-				US
-
-00-20-C4   (hex)		INET,INC.
-0020C4     (base 16)		INET,INC.
-				801 E. CAMPBELL-STE.#330
-				RICHARDSON  TX  75081
-				US
-
-00-20-74   (hex)		SUNGWOON SYSTEMS
-002074     (base 16)		SUNGWOON SYSTEMS
-				YUSUN BLDG.44-4
-				    KOREA
-				KR
-
-00-20-3C   (hex)		EUROTIME AB
-00203C     (base 16)		EUROTIME AB
-				BOX 277
-				    
-				SE
-
-00-20-28   (hex)		WEST EGG SYSTEMS, INC.
-002028     (base 16)		WEST EGG SYSTEMS, INC.
-				65 HIGH RIDGE ROAD-STE.#286
-				STAMFORD  CT  06905
-				US
-
-00-20-68   (hex)		ISDYNE
-002068     (base 16)		ISDYNE
-				11 ROXBURY AVENUE
-				NATICK  MA  01760
-				US
-
-00-20-C8   (hex)		LARSCOM INCORPORATED
-0020C8     (base 16)		LARSCOM INCORPORATED
-				4600 PATRICK HENRY DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-20-9D   (hex)		LIPPERT AUTOMATIONSTECHNIK
-00209D     (base 16)		LIPPERT AUTOMATIONSTECHNIK
-				D-68165 MANNHEIM
-				    
-				DE
-
-00-20-9C   (hex)		PRIMARY ACCESS CORP.
-00209C     (base 16)		PRIMARY ACCESS CORP.
-				10080 CARROLL CANYON RD
-				SAN DIEGO  CA  92131
-				US
-
-00-20-6D   (hex)		DATA RACE, INC.
-00206D     (base 16)		DATA RACE, INC.
-				11550 IH-10WEST  STE#395
-				SAN ANTONIO  TX  78230
-				US
-
-00-20-3A   (hex)		DIGITAL BI0METRICS INC.
-00203A     (base 16)		DIGITAL BI0METRICS INC.
-				5600 ROWLAND ROAD- STE.#205
-				MINNETONKA  MN  55364
-				US
-
-00-20-48   (hex)		Marconi Communications
-002048     (base 16)		Marconi Communications
-				1000 Fore Drive
-				Warrendale  PA  15086-7502
-				US
-
-00-20-DC   (hex)		DENSITRON TAIWAN LTD.
-0020DC     (base 16)		DENSITRON TAIWAN LTD.
-				KYOWA NANABANKAN 5F
-				    
-				JP
-
-00-20-0C   (hex)		ADASTRA SYSTEMS CORP.
-00200C     (base 16)		ADASTRA SYSTEMS CORP.
-				28310 INDUSTRIAL BLVD.-STE-K
-				HAYWARD  CA  94545
-				US
-
-00-20-11   (hex)		CANOPUS CO., LTD.
-002011     (base 16)		CANOPUS CO., LTD.
-				KOBE HI-TECH PARK
-				  651-22  
-				JP
-
-00-20-51   (hex)		Verilink Corporation
-002051     (base 16)		Verilink Corporation
-				127 Jetplex Circle
-				Madison  AL  35758
-				US
-
-00-20-3B   (hex)		WISDM LTD.
-00203B     (base 16)		WISDM LTD.
-				ST. JOHNS INNOVATION CENTRE
-				    ENGLAND
-				GB
-
-00-20-BA   (hex)		CENTER FOR HIGH PERFORMANCE
-0020BA     (base 16)		CENTER FOR HIGH PERFORMANCE
-				COMPUTING OF WPI
-				MARLBORO  MA  01752
-				US
-
-00-20-F5   (hex)		PANDATEL AG
-0020F5     (base 16)		PANDATEL AG
-				FASANENWEG 25
-				    
-				DE
-
-00-20-0E   (hex)		NSSLGlobal Technologies AS
-00200E     (base 16)		NSSLGlobal Technologies AS
-				Martin Linges vei 25
-				Fornebu    1364 
-				NO
-
-00-20-E7   (hex)		B&W NUCLEAR SERVICE COMPANY
-0020E7     (base 16)		B&W NUCLEAR SERVICE COMPANY
-				SPECIAL PRODUCTS & INTEG.SVCS.
-				LYNCHBURG  VA  24502
-				US
-
-00-20-F0   (hex)		UNIVERSAL MICROELECTRONICS CO.
-0020F0     (base 16)		UNIVERSAL MICROELECTRONICS CO.
-				3, 27TH RD., TAICHUNG IND.PARK
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-20-89   (hex)		T3PLUS NETWORKING, INC.
-002089     (base 16)		T3PLUS NETWORKING, INC.
-				2840 SAN TOMAS EXPRESSWAY
-				SANTA CLARA  CA  95051
-				US
-
-00-20-61   (hex)		GarrettCom, Inc.
-002061     (base 16)		GarrettCom, Inc.
-				47823 Westinghouse Dr.
-				Fremont  CA  94539
-				US
-
-00-C0-80   (hex)		NETSTAR, INC.
-00C080     (base 16)		NETSTAR, INC.
-				CEDAR BUSINESS CENTER
-				MINNEAPOLIS  MN  55425-1235
-				US
-
-00-C0-B4   (hex)		MYSON TECHNOLOGY, INC.
-00C0B4     (base 16)		MYSON TECHNOLOGY, INC.
-				2F, NO. 3, INDUSTRY E. RD.IV
-				    TAIWAN
-				TW
-
-00-C0-45   (hex)		ISOLATION SYSTEMS, LTD.
-00C045     (base 16)		ISOLATION SYSTEMS, LTD.
-				26 SIX POINT ROAD
-				CANADA  M8Z  2W9
-				CA
-
-00-70-B3   (hex)		DATA RECALL LTD.
-0070B3     (base 16)		DATA RECALL LTD.
-				SONDES PLACE
-				  UNITED  KINGDOM
-				GB
-
-00-70-B0   (hex)		M/A-COM INC. COMPANIES
-0070B0     (base 16)		M/A-COM INC. COMPANIES
-				11717 EXPLORATION LANE
-				GERMANTOWN  MD  20767
-				US
-
-00-E6-D3   (hex)		NIXDORF COMPUTER CORP.
-00E6D3     (base 16)		NIXDORF COMPUTER CORP.
-				2520 MISSION COLLEGE ROAD
-				SANTA CLARA  CA  95054
-				US
-
-00-C0-C3   (hex)		ACUSON COMPUTED SONOGRAPHY
-00C0C3     (base 16)		ACUSON COMPUTED SONOGRAPHY
-				1220 CHARLESTON ROAD
-				MOUNTAIN VIEW  CA  94039-7393
-				US
-
-00-C0-B3   (hex)		COMSTAT DATACOMM CORPORATION
-00C0B3     (base 16)		COMSTAT DATACOMM CORPORATION
-				1720 SPECTRUM DRIVE
-				LAWRENCEVILLE  GA  30243
-				US
-
-00-C0-E5   (hex)		GESPAC, S.A.
-00C0E5     (base 16)		GESPAC, S.A.
-				CHEMIN DES AULX 18
-				    
-				CH
-
-00-C0-4D   (hex)		MITEC, INC.
-00C04D     (base 16)		MITEC, INC.
-				BR-KAMEIDO 1 BUILDING
-				    
-				JP
-
-00-C0-47   (hex)		UNIMICRO SYSTEMS, INC.
-00C047     (base 16)		UNIMICRO SYSTEMS, INC.
-				44382 S. GRIMMER BLVD.
-				FREMONT  CA  94538
-				US
-
-00-C0-84   (hex)		DATA LINK CORP. LTD.
-00C084     (base 16)		DATA LINK CORP. LTD.
-				3-15-3 MIDORICHO
-				    
-				JP
-
-00-C0-41   (hex)		DIGITAL TRANSMISSION SYSTEMS
-00C041     (base 16)		DIGITAL TRANSMISSION SYSTEMS
-				4830 RIVER GREEN PARKWAY
-				DULUTH  GA  30136
-				US
-
-00-C0-1F   (hex)		S.E.R.C.E.L.
-00C01F     (base 16)		S.E.R.C.E.L.
-				B.P. 439
-				    
-				FR
-
-00-60-86   (hex)		LOGIC REPLACEMENT TECH. LTD.
-006086     (base 16)		LOGIC REPLACEMENT TECH. LTD.
-				14 ARKWRIGHT ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-C0-59   (hex)		DENSO CORPORATION
-00C059     (base 16)		DENSO CORPORATION
-				1-1, Showa-cho,
-				Kariya-shi,  Aichi  448-8661
-				JP
-
-00-C0-F1   (hex)		SHINKO ELECTRIC CO., LTD.
-00C0F1     (base 16)		SHINKO ELECTRIC CO., LTD.
-				COMPUTER SYSTEM DIVISION
-				  JAPAN  441-31
-				JP
-
-00-C0-A1   (hex)		TOKYO DENSHI SEKEI CO.
-00C0A1     (base 16)		TOKYO DENSHI SEKEI CO.
-				255-1 RENKOJI, TAMA-SHI
-				  JAPAN  206
-				JP
-
-00-C0-2E   (hex)		NETWIZ
-00C02E     (base 16)		NETWIZ
-				26 GOLOMB STREET
-				    
-				IL
-
-00-C0-0D   (hex)		ADVANCED LOGIC RESEARCH, INC.
-00C00D     (base 16)		ADVANCED LOGIC RESEARCH, INC.
-				9401 JERONIMO
-				IRVINE  CA  92618
-				US
-
-00-C0-81   (hex)		METRODATA LTD.
-00C081     (base 16)		METRODATA LTD.
-				BLENHEIM HOUSE
-				TW20 8RY  TW20 8RY  ENGLAND
-				GB
-
-00-C0-3B   (hex)		MULTIACCESS COMPUTING CORP.
-00C03B     (base 16)		MULTIACCESS COMPUTING CORP.
-				5350 HOLLISTER AVE., STE.
-				SANTA BARBARA  CA  93111
-				US
-
-00-C0-82   (hex)		MOORE PRODUCTS CO.
-00C082     (base 16)		MOORE PRODUCTS CO.
-				SUMNEYTOWN PIKE
-				SPRING HOUSE  PA  19477
-				US
-
-00-C0-99   (hex)		YOSHIKI INDUSTRIAL CO.,LTD.
-00C099     (base 16)		YOSHIKI INDUSTRIAL CO.,LTD.
-				1-38 MATSUGASAKI 2-CHOME
-				  992  
-				JP
-
-00-C0-01   (hex)		DIATEK PATIENT MANAGMENT
-00C001     (base 16)		DIATEK PATIENT MANAGMENT
-				SYSTEMS, INC.
-				SAN DIEGO  CA  92121-1723
-				US
-
-00-C0-F4   (hex)		INTERLINK SYSTEM CO., LTD.
-00C0F4     (base 16)		INTERLINK SYSTEM CO., LTD.
-				INTERLINK B/D, 476-20
-				    KOREA
-				KR
-
-00-C0-E2   (hex)		CALCOMP, INC.
-00C0E2     (base 16)		CALCOMP, INC.
-				2411 W. LAPALMA AVENUE
-				ANAHEIM  CA  92803-3250
-				US
-
-00-C0-7B   (hex)		ASCEND COMMUNICATIONS, INC.
-00C07B     (base 16)		ASCEND COMMUNICATIONS, INC.
-				1701 HARBOR BAY PARKWAY
-				ALAMEDA  CA  94502
-				US
-
-00-C0-3C   (hex)		TOWER TECH S.R.L.
-00C03C     (base 16)		TOWER TECH S.R.L.
-				VIA RIDOLFI 6,8
-				    
-				IT
-
-00-C0-1D   (hex)		GRAND JUNCTION NETWORKS, INC.
-00C01D     (base 16)		GRAND JUNCTION NETWORKS, INC.
-				3101 WHIPPLE RD., #27
-				UNION CITY  CA  94587
-				US
-
-00-C0-35   (hex)		QUINTAR COMPANY
-00C035     (base 16)		QUINTAR COMPANY
-				370 AMAPOLA AVE., STE.#106
-				TORRANCE  CA  90501
-				US
-
-00-C0-70   (hex)		SECTRA SECURE-TRANSMISSION AB
-00C070     (base 16)		SECTRA SECURE-TRANSMISSION AB
-				TEKNIKRINGEN 2
-				    
-				SE
-
-00-C0-6D   (hex)		BOCA RESEARCH, INC.
-00C06D     (base 16)		BOCA RESEARCH, INC.
-				6401 CONGRESS AVENUE
-				BOCA RATON  FL  33487
-				US
-
-00-C0-EA   (hex)		ARRAY TECHNOLOGY LTD.
-00C0EA     (base 16)		ARRAY TECHNOLOGY LTD.
-				145 FRIMLEY ROAD
-				ENGLAND  GU15  2PS
-				GB
-
-00-C0-09   (hex)		KT TECHNOLOGY (S) PTE LTD
-00C009     (base 16)		KT TECHNOLOGY (S) PTE LTD
-				KT BUILDING
-				  SINGAPORE  0511
-				SG
-
-00-C0-D6   (hex)		J1 SYSTEMS, INC.
-00C0D6     (base 16)		J1 SYSTEMS, INC.
-				3 DUNWOODY PARK-STE.#103
-				ATLANTA  GA  30338
-				US
-
-00-C0-DC   (hex)		EOS TECHNOLOGIES, INC.
-00C0DC     (base 16)		EOS TECHNOLOGIES, INC.
-				3945 FREEDOM CIRCLE, STE.#770
-				SANTA CLARA  CA  95054
-				US
-
-00-C0-72   (hex)		KNX LTD.
-00C072     (base 16)		KNX LTD.
-				HOLLINGWOOD HOUSE
-				LS21 3HA  UNITED  KINGDOM
-				GB
-
-00-C0-AE   (hex)		TOWERCOM CO. INC. DBA PC HOUSE
-00C0AE     (base 16)		TOWERCOM CO. INC. DBA PC HOUSE
-				841 E. ARTESIA BLVD.
-				CARSON  CA  90746
-				US
-
-00-C0-C2   (hex)		INFINITE NETWORKS LTD.
-00C0C2     (base 16)		INFINITE NETWORKS LTD.
-				19 BROOKSIDE ROAD, OXHEY
-				  UNITED  KINGDOM
-				GB
-
-00-C0-AF   (hex)		TEKLOGIX INC.
-00C0AF     (base 16)		TEKLOGIX INC.
-				2100 MEADOWVALE BOULEVARD
-				CANADA  L5N  7J9
-				CA
-
-00-C0-7A   (hex)		PRIVA B.V.
-00C07A     (base 16)		PRIVA B.V.
-				P.O. BOX 18
-				    
-				NL
-
-00-C0-F6   (hex)		CELAN TECHNOLOGY INC.
-00C0F6     (base 16)		CELAN TECHNOLOGY INC.
-				NO. 101, MIN-HSIANG ST.
-				TAIWAN  TAIWAN  R.O.C.
-				CN
-
-00-C0-F8   (hex)		ABOUT COMPUTING INC.
-00C0F8     (base 16)		ABOUT COMPUTING INC.
-				P.O. BOX 172
-				BELMONT  MA  02178
-				US
-
-00-C0-78   (hex)		COMPUTER SYSTEMS ENGINEERING
-00C078     (base 16)		COMPUTER SYSTEMS ENGINEERING
-				46791 FREMONT BLVD.
-				FREMONT  CA  94538
-				US
-
-00-C0-9A   (hex)		PHOTONICS CORPORATION
-00C09A     (base 16)		PHOTONICS CORPORATION
-				2940 NORTH FIRST STREET
-				SAN JOSE  CA  95123-2021
-				US
-
-00-C0-1A   (hex)		COROMETRICS MEDICAL SYSTEMS
-00C01A     (base 16)		COROMETRICS MEDICAL SYSTEMS
-				61 BARNES PARK ROAD NORTH
-				WALLINGFORD  CT  06492-0333
-				US
-
-00-C0-68   (hex)		HME Clear-Com LTD.
-00C068     (base 16)		HME Clear-Com LTD.
-				7400 Beach Drive
-				Cambridgeshire    CB25 9TP
-				GB
-
-00-C0-D8   (hex)		UNIVERSAL DATA SYSTEMS
-00C0D8     (base 16)		UNIVERSAL DATA SYSTEMS
-				5000 BRADFORD DRIVE
-				HUNTSVILLE  AL  35805-1993
-				US
-
-00-40-16   (hex)		ADC - Global Connectivity Solutions Division
-004016     (base 16)		ADC - Global Connectivity Solutions Division
-				P.O. Box 1101
-				Minneapolis  MN  55440-1101
-				US
-
-00-40-6A   (hex)		KENTEK INFORMATION SYSTEMS,INC
-00406A     (base 16)		KENTEK INFORMATION SYSTEMS,INC
-				2945 WILDERNESS PLACE
-				BOULDER  CO  80301
-				US
-
-00-40-0A   (hex)		PIVOTAL TECHNOLOGIES, INC.
-00400A     (base 16)		PIVOTAL TECHNOLOGIES, INC.
-				100 W. RINCON AVENUE-STE #211
-				CAMPBELL  CA  95008
-				US
-
-00-40-99   (hex)		NEWGEN SYSTEMS CORP.
-004099     (base 16)		NEWGEN SYSTEMS CORP.
-				17580 NEWHOPE STREET
-				FOUNTAIN VALLEY  CA  92708
-				US
-
-00-40-11   (hex)		ANDOVER CONTROLS CORPORATION
-004011     (base 16)		ANDOVER CONTROLS CORPORATION
-				300 BRICKSTONE SQUARE
-				ANDOVER  MA  01810
-				US
-
-00-40-A1   (hex)		ERGO COMPUTING
-0040A1     (base 16)		ERGO COMPUTING
-				ONE INTERCONTINENTAL WAY
-				PEABODY  MA  01960
-				US
-
-00-40-81   (hex)		MANNESMANN SCANGRAPHIC GMBH
-004081     (base 16)		MANNESMANN SCANGRAPHIC GMBH
-				RISSENER STRASSE 112-114
-				    
-				DE
-
-00-C0-8C   (hex)		PERFORMANCE TECHNOLOGIES, INC.
-00C08C     (base 16)		PERFORMANCE TECHNOLOGIES, INC.
-				315 SCIENCE PARKWAY
-				ROCHESTER  NY  14620
-				US
-
-00-C0-07   (hex)		PINNACLE DATA SYSTEMS, INC.
-00C007     (base 16)		PINNACLE DATA SYSTEMS, INC.
-				1350 WEST FIFTH AVENUE
-				COLUMBUS  OH  43212
-				US
-
-00-C0-98   (hex)		CHUNTEX ELECTRONIC CO., LTD.
-00C098     (base 16)		CHUNTEX ELECTRONIC CO., LTD.
-				6F., NO.2, ALLEY 6, LANE 235
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-C0-BE   (hex)		ALCATEL - SEL
-00C0BE     (base 16)		ALCATEL - SEL
-				LORENZ STR
-				    
-				DE
-
-00-C0-6E   (hex)		HAFT TECHNOLOGY, INC.
-00C06E     (base 16)		HAFT TECHNOLOGY, INC.
-				DAINI-DOHO BLDG.
-				  305  
-				JP
-
-00-C0-8A   (hex)		Lauterbach GmbH
-00C08A     (base 16)		Lauterbach GmbH
-				Altlaufstraße 40
-				  Höhenkirchen-Siegertsbrunn  85635
-				DE
-
-00-C0-F7   (hex)		ENGAGE COMMUNICATION, INC.
-00C0F7     (base 16)		ENGAGE COMMUNICATION, INC.
-				9053 SOQUEL DRIVE
-				APTOS  CA  95003-4034
-				US
-
-00-40-B7   (hex)		STEALTH COMPUTER SYSTEMS
-0040B7     (base 16)		STEALTH COMPUTER SYSTEMS
-				2341 REGINA CT.
-				SANTA CLARA  CA  95054
-				US
-
-00-40-AC   (hex)		SUPER WORKSTATION, INC.
-0040AC     (base 16)		SUPER WORKSTATION, INC.
-				2190 PARAGON DRIVE
-				SAN JOSE  CA  95131
-				US
-
-10-00-5A   (hex)		IBM Corp
-10005A     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-40-D1   (hex)		FUKUDA DENSHI CO., LTD.
-0040D1     (base 16)		FUKUDA DENSHI CO., LTD.
-				R & D DEPARTMENT NO. 1
-				    
-				JP
-
-00-40-69   (hex)		LEMCOM SYSTEMS, INC.
-004069     (base 16)		LEMCOM SYSTEMS, INC.
-				2104 WEST PEORIA AVENUE
-				PHOENIX  AZ  85029
-				US
-
-00-40-3B   (hex)		SYNERJET INTERNATIONAL CORP.
-00403B     (base 16)		SYNERJET INTERNATIONAL CORP.
-				5F, NO 35, KUANG FU S. ROAD
-				TAIWAN  R.  O. C.
-				TW
-
-00-80-3B   (hex)		APT COMMUNICATIONS, INC.
-00803B     (base 16)		APT COMMUNICATIONS, INC.
-				9607 DR. PERRY ROAD
-				IJAMSVILLE  MD  21754
-				US
-
-00-80-6A   (hex)		ERI (EMPAC RESEARCH INC.)
-00806A     (base 16)		ERI (EMPAC RESEARCH INC.)
-				47560 SEABRIDGE DRIVE
-				FREMONT  CA  94538
-				US
-
-00-C0-A8   (hex)		GVC CORPORATION
-00C0A8     (base 16)		GVC CORPORATION
-				1961 CONCOURSE DRIVE-STE
-				SAN JOSE  CA  95131
-				US
-
-00-40-E0   (hex)		ATOMWIDE LTD.
-0040E0     (base 16)		ATOMWIDE LTD.
-				23 THE GREENWAY
-				  UNITED  KINGDOM
-				GB
-
-00-40-A8   (hex)		IMF INTERNATIONAL LTD.
-0040A8     (base 16)		IMF INTERNATIONAL LTD.
-				NO.5 2/F KINGSFORD IND. CENTRE
-				  HONG  KONG
-				HK
-
-00-40-70   (hex)		INTERWARE CO., LTD.
-004070     (base 16)		INTERWARE CO., LTD.
-				7F KUDAN NEW CENTRAL BLDG.,
-				TOKYO 102  TOKYO 102  
-				JP
-
-00-40-8A   (hex)		TPS TELEPROCESSING SYS. GMBH
-00408A     (base 16)		TPS TELEPROCESSING SYS. GMBH
-				SCHWADERMUCHLSTRASSE 4-8
-				    
-				DE
-
-00-40-FD   (hex)		LXE
-0040FD     (base 16)		LXE
-				303 RESEARCH DRIVE
-				NORCROSS  GA  30092
-				US
-
-00-40-3F   (hex)		SSANGYONG COMPUTER SYSTEMS
-00403F     (base 16)		SSANGYONG COMPUTER SYSTEMS
-				CORPORATION
-				  KOREA  100-705
-				KR
-
-00-40-82   (hex)		LABORATORY EQUIPMENT CORP.
-004082     (base 16)		LABORATORY EQUIPMENT CORP.
-				1-7-3 MINATOMACHI
-				  300  
-				JP
-
-00-40-F1   (hex)		CHUO ELECTRONICS CO., LTD.
-0040F1     (base 16)		CHUO ELECTRONICS CO., LTD.
-				1-9-9, MOTOHONGO-CHO
-				    
-				JP
-
-00-40-A9   (hex)		DATACOM INC.
-0040A9     (base 16)		DATACOM INC.
-				146 HIGHWAY ROUTE 34 - STE 250
-				HOLMDEL  NJ  07733
-				US
-
-00-40-E3   (hex)		QUIN SYSTEMS LTD
-0040E3     (base 16)		QUIN SYSTEMS LTD
-				OAKLANDS BUSINESS CENTRE
-				  UNITED  KINGDOM
-				GB
-
-00-40-91   (hex)		PROCOMP INDUSTRIA ELETRONICA
-004091     (base 16)		PROCOMP INDUSTRIA ELETRONICA
-				AV. KENKITI SIMOMOTO, 767
-				    
-				BR
-
-00-40-EA   (hex)		PLAIN TREE SYSTEMS INC
-0040EA     (base 16)		PLAIN TREE SYSTEMS INC
-				CHIEF EXECTUVIE OFFICER
-				    
-				CA
-
-00-40-A7   (hex)		ITAUTEC PHILCO S.A.
-0040A7     (base 16)		ITAUTEC PHILCO S.A.
-				GRUPO ITAUTEC PHILCO
-				    
-				BR
-
-00-40-64   (hex)		KLA INSTRUMENTS CORPORATION
-004064     (base 16)		KLA INSTRUMENTS CORPORATION
-				160 RIO ROBLES
-				SAN JOSE  CA  95161-9055
-				US
-
-00-40-43   (hex)		Nokia Siemens Networks GmbH & Co. KG.
-004043     (base 16)		Nokia Siemens Networks GmbH & Co. KG.
-				Werner-von-Siemens Straße 2-6
-				Bruchsal  Baden-Württemberg  76646
-				DE
-
-00-40-5A   (hex)		GOLDSTAR INFORMATION & COMM.
-00405A     (base 16)		GOLDSTAR INFORMATION & COMM.
-				533, HOGAE-DONG, ANYANG-SHI
-				    KOREA
-				KR
-
-00-40-13   (hex)		NTT DATA COMM. SYSTEMS CORP.
-004013     (base 16)		NTT DATA COMM. SYSTEMS CORP.
-				DEVELOPMENT HEADQUARTERS
-				TOKYO 135  TOKYO 135  
-				JP
-
-00-40-0C   (hex)		GENERAL MICRO SYSTEMS, INC.
-00400C     (base 16)		GENERAL MICRO SYSTEMS, INC.
-				P.O. BOX 3689
-				RANCHO CUCAMONGA  CA  91729
-				US
-
-00-40-5E   (hex)		NORTH HILLS ISRAEL
-00405E     (base 16)		NORTH HILLS ISRAEL
-				P.O. BOX 1280
-				    
-				IL
-
-00-40-FA   (hex)		MICROBOARDS, INC.
-0040FA     (base 16)		MICROBOARDS, INC.
-				31-8, TAKASECHO,FUNABASHI-CITY
-				CHIBA 273  CHIBA 273  
-				JP
-
-00-40-14   (hex)		COMSOFT GMBH
-004014     (base 16)		COMSOFT GMBH
-				WACHHAUSSTR. 5A
-				    
-				DE
-
-00-40-00   (hex)		PCI COMPONENTES DA AMZONIA LTD
-004000     (base 16)		PCI COMPONENTES DA AMZONIA LTD
-				RUA JOSEF KRYSS
-				  01140  BRASIL
-				BR
-
-00-40-6C   (hex)		COPERNIQUE
-00406C     (base 16)		COPERNIQUE
-				6, MAIL DE L'EUROPE BP 25
-				    
-				FR
-
-00-40-75   (hex)		Tattile SRL 
-004075     (base 16)		Tattile SRL 
-				11-12 NORTHFIELD PROSPECT
-				  UNITED  KINGDOM
-				GB
-
-00-40-53   (hex)		AMPRO COMPUTERS
-004053     (base 16)		AMPRO COMPUTERS
-				990 ALMONDOR AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-80-38   (hex)		DATA RESEARCH & APPLICATIONS
-008038     (base 16)		DATA RESEARCH & APPLICATIONS
-				9041 EXECUTIVE PARK DR.
-				KNOXVILLE  TN  37923-4609
-				US
-
-00-80-5E   (hex)		LSI LOGIC CORPORATION
-00805E     (base 16)		LSI LOGIC CORPORATION
-				1551 MCCARTHY BOULEVARD
-				MILPITAS  CA  95035
-				US
-
-00-80-60   (hex)		NETWORK INTERFACE CORPORATION
-008060     (base 16)		NETWORK INTERFACE CORPORATION
-				15019 WEST 95 STREET
-				LENEXA  KS  66215
-				US
-
-00-80-C3   (hex)		BICC INFORMATION SYSTEMS & SVC
-0080C3     (base 16)		BICC INFORMATION SYSTEMS & SVC
-				500 CAPABILITY GREEN, LUTON
-				ENGLAND  LU1  3LT
-				GB
-
-00-80-44   (hex)		SYSTECH COMPUTER CORP.
-008044     (base 16)		SYSTECH COMPUTER CORP.
-				6465 NANCY RIDGE DRIVE
-				SAN DIEGO  CA  92121
-				US
-
-00-80-06   (hex)		COMPUADD CORPORATION
-008006     (base 16)		COMPUADD CORPORATION
-				ENGINEERING
-				AUSTIN  TX  78727
-				US
-
-00-80-9B   (hex)		JUSTSYSTEM CORPORATION
-00809B     (base 16)		JUSTSYSTEM CORPORATION
-				3-46 OKINOHAMAHIGASHI
-				    
-				JP
-
-00-80-DF   (hex)		ADC CODENOLL TECHNOLOGY CORP.
-0080DF     (base 16)		ADC CODENOLL TECHNOLOGY CORP.
-				200 CORPORATE BLVD. SO.
-				YONKERS  NY  10701
-				US
-
-00-80-28   (hex)		TRADPOST (HK) LTD
-008028     (base 16)		TRADPOST (HK) LTD
-				5/F, STAR CENTRE
-				  HONG  KONG
-				HK
-
-00-80-61   (hex)		LITTON SYSTEMS, INC.
-008061     (base 16)		LITTON SYSTEMS, INC.
-				M/S 44-20
-				AGOURA HILLS  CA  91301-0500
-				US
-
-00-80-F5   (hex)		Quantel Ltd
-0080F5     (base 16)		Quantel Ltd
-				Turnpike Road
-				Newbury  Berkshire  RG14 2NX
-				GB
-
-00-80-B9   (hex)		ARCHE TECHNOLIGIES INC.
-0080B9     (base 16)		ARCHE TECHNOLIGIES INC.
-				48502 KATO ROAD
-				FREMONT  CA  94538
-				US
-
-00-40-63   (hex)		VIA TECHNOLOGIES, INC.
-004063     (base 16)		VIA TECHNOLOGIES, INC.
-				5020 BRANDIN COURT
-				FREMONT  CA  94538
-				US
-
-00-80-8A   (hex)		SUMMIT MICROSYSTEMS CORP.
-00808A     (base 16)		SUMMIT MICROSYSTEMS CORP.
-				710 LAKEWAY-STE.#150
-				SUNNYVALE  CA  940867
-				US
-
-00-80-A7   (hex)		Honeywell International Inc
-0080A7     (base 16)		Honeywell International Inc
-				Vancouver Center of Excellence 
-				North Vancouver    V7J 3S4 
-				CA
-
-00-80-66   (hex)		ARCOM CONTROL SYSTEMS, LTD.
-008066     (base 16)		ARCOM CONTROL SYSTEMS, LTD.
-				UNIT 8, CLIFTON ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-80-CB   (hex)		FALCO DATA PRODUCTS
-0080CB     (base 16)		FALCO DATA PRODUCTS
-				440 POTRERO AVENUE
-				SUNNYVALE  CA  94086-4196
-				US
-
-00-80-07   (hex)		DLOG NC-SYSTEME
-008007     (base 16)		DLOG NC-SYSTEME
-				WERNER-VON-SIEMENS STRASSE 13
-				    GERMANY
-				
-
-00-80-62   (hex)		INTERFACE  CO.
-008062     (base 16)		INTERFACE  CO.
-				8-26 OZU 5-CHOME MINAMI-KU
-				    
-				JP
-
-00-80-1E   (hex)		XINETRON, INC.
-00801E     (base 16)		XINETRON, INC.
-				2330 B. WALSH AVE.
-				SANTA CLARA  CA  95051
-				US
-
-00-80-E2   (hex)		T.D.I. CO., LTD.
-0080E2     (base 16)		T.D.I. CO., LTD.
-				DEVELOPMENT DIV.  #3 FUJI BLDG
-				    
-				JP
-
-00-80-49   (hex)		NISSIN ELECTRIC CO., LTD.
-008049     (base 16)		NISSIN ELECTRIC CO., LTD.
-				47, UMEZU - TAKASE - CHO
-				    
-				JP
-
-00-80-C1   (hex)		LANEX CORPORATION
-0080C1     (base 16)		LANEX CORPORATION
-				10727 TUCKER STREET
-				BELTSVILLE  MD  20705
-				US
-
-00-80-A3   (hex)		Lantronix
-0080A3     (base 16)		Lantronix
-				15353 Barranca Parkway
-				Irvine  CA  92618
-				US
-
-00-80-BC   (hex)		HITACHI ENGINEERING CO., LTD
-0080BC     (base 16)		HITACHI ENGINEERING CO., LTD
-				4-8-26, OMIKACHO
-				    
-				JP
-
-00-80-36   (hex)		REFLEX MANUFACTURING SYSTEMS
-008036     (base 16)		REFLEX MANUFACTURING SYSTEMS
-				UNIT D, THE FLEMING CENTRE,
-				    ENGLAND
-				GB
-
-00-80-83   (hex)		AMDAHL
-008083     (base 16)		AMDAHL
-				1250 EAST ARQUES AVENUE
-				SUNNYVALE  CA  94088-3470
-				US
-
-00-80-B8   (hex)		DMG MORI B.U.G. CO., LTD.
-0080B8     (base 16)		DMG MORI B.U.G. CO., LTD.
-				1-1-14 Techno park,
-				Shimonopporo, Atsubetsuku, Sapporo  Hokkaido  004-0015
-				JP
-
-00-80-4D   (hex)		CYCLONE MICROSYSTEMS, INC.
-00804D     (base 16)		CYCLONE MICROSYSTEMS, INC.
-				25 SCIENCE PARK
-				NEW HAVEN  CT  06511
-				US
-
-00-80-D4   (hex)		CHASE RESEARCH LTD.
-0080D4     (base 16)		CHASE RESEARCH LTD.
-				7 CHINEHAM BUSINESS PARK
-				    ENGLAND
-				GB
-
-00-80-3D   (hex)		SURIGIKEN CO.,  LTD.
-00803D     (base 16)		SURIGIKEN CO.,  LTD.
-				YOUTH BLDG, 4-1-9 SHINJUKU
-				    
-				JP
-
-00-80-8B   (hex)		DACOLL LIMITED
-00808B     (base 16)		DACOLL LIMITED
-				DACOLL HOUSE, GARDNERS LANE
-				SCOTLAND  EH48  1TP
-				GB
-
-00-80-B2   (hex)		NETWORK EQUIPMENT TECHNOLOGIES
-0080B2     (base 16)		NETWORK EQUIPMENT TECHNOLOGIES
-				6900 PASEO PADRE PARKWAY
-				FREMONT  CA  94555
-				US
-
-00-80-76   (hex)		MCNC
-008076     (base 16)		MCNC
-				P.O. BOX 12889
-				RTP  NC  27709
-				US
-
-00-80-0B   (hex)		CSK CORPORATION
-00800B     (base 16)		CSK CORPORATION
-				18F MATSUSHITA IMP BLDG,
-				  JAPAN  540
-				JP
-
-00-80-18   (hex)		KOBE STEEL, LTD.
-008018     (base 16)		KOBE STEEL, LTD.
-				KOBE ISUZU RECRUIT BLDG.
-				    
-				JP
-
-00-80-68   (hex)		YAMATECH SCIENTIFIC LTD.
-008068     (base 16)		YAMATECH SCIENTIFIC LTD.
-				1255 LAIRD, SUITE 260
-				    
-				CA
-
-00-80-A8   (hex)		VITACOM CORPORATION
-0080A8     (base 16)		VITACOM CORPORATION
-				1330 CHARLESTON ROAD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-80-33   (hex)		EMS Aviation, Inc.
-008033     (base 16)		EMS Aviation, Inc.
-				121 WHITTENDALE DRIVE
-				MOORESTOWN  NJ  08057
-				US
-
-00-80-7C   (hex)		FIBERCOM, INC.
-00807C     (base 16)		FIBERCOM, INC.
-				3353 ORANGE AVENUE NE
-				ROANOKE  VA  24012
-				US
-
-00-80-91   (hex)		TOKYO ELECTRIC CO.,LTD
-008091     (base 16)		TOKYO ELECTRIC CO.,LTD
-				10-14 UCHIKANDA
-				TOKYO  JAPAN  101
-				JP
-
-00-00-8E   (hex)		SOLBOURNE COMPUTER, INC.
-00008E     (base 16)		SOLBOURNE COMPUTER, INC.
-				1900 PIKE ROAD
-				LONGMONT  COLORADO  80501
-				US
-
-00-00-DC   (hex)		HAYES MICROCOMPUTER PRODUCTS
-0000DC     (base 16)		HAYES MICROCOMPUTER PRODUCTS
-				P.O. BOX 105203
-				ATLANTA  GA  30348
-				US
-
-00-00-63   (hex)		BARCO CONTROL ROOMS GMBH
-000063     (base 16)		BARCO CONTROL ROOMS GMBH
-				An der Rossweid 5
-				Karlsruhe    D-76229
-				DE
-
-00-00-4E   (hex)		AMPEX CORPORATION
-00004E     (base 16)		AMPEX CORPORATION
-				581 CONFERENCE PLACE
-				GOLDEN  CO  80401
-				US
-
-00-00-2E   (hex)		SOCIETE EVIRA
-00002E     (base 16)		SOCIETE EVIRA
-				ZONE PORTUAIRE DE BREGAILLON
-				    
-				FR
-
-00-00-3F   (hex)		SYNTREX, INC.
-00003F     (base 16)		SYNTREX, INC.
-				246 INDUSTRIAL WAY WEST
-				EATONTOWN  NJ  07724
-				US
-
-00-80-9D   (hex)		Commscraft Ltd.
-00809D     (base 16)		Commscraft Ltd.
-				PO BOX 160
-				    
-				AU
-
-00-80-F4   (hex)		TELEMECANIQUE ELECTRIQUE
-0080F4     (base 16)		TELEMECANIQUE ELECTRIQUE
-				33 BIS AVENUE,
-				    
-				FR
-
-00-80-22   (hex)		SCAN-OPTICS
-008022     (base 16)		SCAN-OPTICS
-				201 TECHNOLOGY DRIVE
-				IRVINE  CA  92718
-				US
-
-00-00-CD   (hex)		Allied Telesis Labs Ltd
-0000CD     (base 16)		Allied Telesis Labs Ltd
-				27 Nazareth Avenue
-				Middleton  Christchurch  8024
-				NZ
-
-00-80-DD   (hex)		GMX INC/GIMIX
-0080DD     (base 16)		GMX INC/GIMIX
-				3223 ARNOLD LANE
-				NORTHBROOK  IL  60062-2406
-				US
-
-00-80-FB   (hex)		BVM LIMITED
-0080FB     (base 16)		BVM LIMITED
-				Lakeside House, Brickyard Road,
-				Swanmore  SOUTHAMPTON  SO32 2SA
-				GB
-
-00-80-B4   (hex)		SOPHIA SYSTEMS
-0080B4     (base 16)		SOPHIA SYSTEMS
-				3337 KIFER ROAD
-				SANTA CLARA  CA  95051
-				US
-
-00-80-7F   (hex)		DY-4 INCORPORATED
-00807F     (base 16)		DY-4 INCORPORATED
-				333 PALLADIUM DRIVE, MS 312
-				    
-				CA
-
-00-80-2D   (hex)		XYLOGICS INC
-00802D     (base 16)		XYLOGICS INC
-				53 THIRD AVENUE
-				BURLINGTON  MA  01803
-				US
-
-00-00-61   (hex)		GATEWAY COMMUNICATIONS
-000061     (base 16)		GATEWAY COMMUNICATIONS
-				2941 ALTON AVENUE
-				IRVINE  CA  92714
-				US
-
-00-00-EA   (hex)		UPNOD AB
-0000EA     (base 16)		UPNOD AB
-				BOX 23051
-				    
-				SE
-
-00-00-43   (hex)		MICRO TECHNOLOGY
-000043     (base 16)		MICRO TECHNOLOGY
-				4905 EAST LAPALMA
-				ANAHEIM  CA  92807
-				US
-
-00-00-17   (hex)		Oracle
-000017     (base 16)		Oracle
-				4200 Network Circle
-				Santa Clara  CA  95054
-				US
-
-00-00-B2   (hex)		TELEVIDEO SYSTEMS, INC.
-0000B2     (base 16)		TELEVIDEO SYSTEMS, INC.
-				550 E. BROKAW ROAD
-				SAN JOSE  CA  95161-9048
-				US
-
-00-00-EE   (hex)		NETWORK DESIGNERS, LTD.
-0000EE     (base 16)		NETWORK DESIGNERS, LTD.
-				UNIT 1A, HORNBEAM PARK
-				UNITED KINGDOM  HG2  8QT
-				GB
-
-00-00-E5   (hex)		SIGMEX LTD.
-0000E5     (base 16)		SIGMEX LTD.
-				SIGMA HOUSE
-				RH12  4UZ  ENGLAND
-				GB
-
-00-00-89   (hex)		CAYMAN SYSTEMS INC.
-000089     (base 16)		CAYMAN SYSTEMS INC.
-				26 LANSDOWNE STREET
-				CAMBRIDGE  MA  02139
-				US
-
-00-00-FF   (hex)		CAMTEC ELECTRONICS LTD.
-0000FF     (base 16)		CAMTEC ELECTRONICS LTD.
-				101 VAUGHAN WAY
-				    ENGLAND
-				GB
-
-00-00-B7   (hex)		DOVE COMPUTER CORPORATION
-0000B7     (base 16)		DOVE COMPUTER CORPORATION
-				1200 NORTH 23RD STREET
-				WILMINGTON  NC  28405
-				US
-
-00-00-F2   (hex)		SPIDER COMMUNICATIONS
-0000F2     (base 16)		SPIDER COMMUNICATIONS
-				7491 BRIAR ROAD
-				    
-				CA
-
-00-00-CC   (hex)		DENSAN CO., LTD.
-0000CC     (base 16)		DENSAN CO., LTD.
-				1-23-11, KAMITAKAIDO
-				    
-				JP
-
-00-00-A4   (hex)		ACORN COMPUTERS LIMITED
-0000A4     (base 16)		ACORN COMPUTERS LIMITED
-				FULBOURN ROAD, CHERRY HINTON
-				    ENGLAND
-				GB
-
-00-00-DB   (hex)		British Telecommunications plc
-0000DB     (base 16)		British Telecommunications plc
-				81 New Gate St
-				    England
-				GB
-
-00-00-C1   (hex)		Madge Ltd.
-0000C1     (base 16)		Madge Ltd.
-				Madge House
-				Maindenhead  Berkshire  SL6 2HP
-				GB
-
-00-00-F6   (hex)		APPLIED MICROSYSTEMS CORP.
-0000F6     (base 16)		APPLIED MICROSYSTEMS CORP.
-				5020 148 AVENUE, N.E.
-				REDMOND  WA  98073-9702
-				US
-
-00-00-77   (hex)		INTERPHASE CORPORATION
-000077     (base 16)		INTERPHASE CORPORATION
-				13800 SENLAC
-				DALLAS  TX  75234
-				US
-
-00-00-A2   (hex)		Bay Networks
-0000A2     (base 16)		Bay Networks
-				PO Box 58185
-				Santa Clara  CA  95052-8185
-				US
-
-00-00-EC   (hex)		MICROPROCESS
-0000EC     (base 16)		MICROPROCESS
-				97 BIS, RUE DE COLOMBES
-				    
-				FR
-
-00-00-C2   (hex)		INFORMATION PRESENTATION TECH.
-0000C2     (base 16)		INFORMATION PRESENTATION TECH.
-				23801 CALABASAS ROAD
-				CALABASAS  CA  91302
-				US
-
-00-00-FC   (hex)		MEIKO
-0000FC     (base 16)		MEIKO
-				650 AZTEC WEST
-				  UNITED  KINGDOM
-				GB
-
-00-00-6D   (hex)		CRAY COMMUNICATIONS, LTD.
-00006D     (base 16)		CRAY COMMUNICATIONS, LTD.
-				P.O. BOX 254, CAXTON WAY
-				  UNITED  KINGDOM
-				GB
-
-00-00-DA   (hex)		ATEX
-0000DA     (base 16)		ATEX
-				15 CROSBY DRIVE
-				BEDFORD  MA  01730
-				US
-
-00-00-DD   (hex)		TCL INCORPORATED
-0000DD     (base 16)		TCL INCORPORATED
-				41829 ALBRAE STREET
-				FREMONT  CA  94538
-				US
-
-00-00-AE   (hex)		DASSAULT ELECTRONIQUE
-0000AE     (base 16)		DASSAULT ELECTRONIQUE
-				55, QUAI MARCEL DASSAULT
-				    
-				FR
-
-00-00-A0   (hex)		SANYO Electric Co., Ltd.
-0000A0     (base 16)		SANYO Electric Co., Ltd.
-				5-5, Keihan-hondori 2-chome,
-				Moriguchi City  Osaka  570-8677
-				JP
-
-00-00-C0   (hex)		WESTERN DIGITAL CORPORATION
-0000C0     (base 16)		WESTERN DIGITAL CORPORATION
-				8105 IRVINE CENTER DRIVE
-				IRVINE  CA  92718
-				US
-
-00-00-33   (hex)		EGAN MACHINERY COMPANY
-000033     (base 16)		EGAN MACHINERY COMPANY
-				SOUTH ADAMSVILLE ROAD
-				SOMMERVILLE  NJ  08876
-				US
-
-00-00-9D   (hex)		LOCUS COMPUTING CORPORATION
-00009D     (base 16)		LOCUS COMPUTING CORPORATION
-				9800 LA CIENEGA
-				INGLEWOOD  CA  90301
-				US
-
-00-00-FD   (hex)		HIGH LEVEL HARDWARE
-0000FD     (base 16)		HIGH LEVEL HARDWARE
-				PO BOX 170 WINDMILL ROAD
-				    ENGLAND
-				GB
-
-00-00-65   (hex)		Network General Corporation
-000065     (base 16)		Network General Corporation
-				178 E Tsaman Dr
-				San Jose  CA  95134
-				US
-
-00-00-11   (hex)		NORMEREL SYSTEMES
-000011     (base 16)		NORMEREL SYSTEMES
-				58 RUE POTTIER
-				    
-				FR
-
-00-00-10   (hex)		SYTEK INC.
-000010     (base 16)		SYTEK INC.
-				1225 CHARLESTON ROAD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-00-BC   (hex)		Rockwell Automation
-0000BC     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-08-00-7E   (hex)		AMALGAMATED WIRELESS(AUS) LTD
-08007E     (base 16)		AMALGAMATED WIRELESS(AUS) LTD
-				NORTH RYDE DIVISION
-				  AUSTRALIA  2113
-				AU
-
-08-00-7F   (hex)		CARNEGIE-MELLON UNIVERSITY
-08007F     (base 16)		CARNEGIE-MELLON UNIVERSITY
-				INFORMATION TECHNOLOGY
-				PITTSBURGE  PA  15213
-				US
-
-00-00-99   (hex)		MTX, INC.
-000099     (base 16)		MTX, INC.
-				3301 TERMINAL DRIVE
-				RALEIGH  NC  27604
-				US
-
-00-00-C4   (hex)		WATERS DIV. OF MILLIPORE
-0000C4     (base 16)		WATERS DIV. OF MILLIPORE
-				34 MAPLE STREET
-				MILFORD  MA  01757
-				US
-
-00-00-EB   (hex)		MATSUSHITA COMM. IND. CO. LTD.
-0000EB     (base 16)		MATSUSHITA COMM. IND. CO. LTD.
-				3-1  4-CHOME
-				    
-				JP
-
-00-00-28   (hex)		PRODIGY SYSTEMS CORPORATION
-000028     (base 16)		PRODIGY SYSTEMS CORPORATION
-				2601 CASEY DRIVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-08-00-3B   (hex)		TORUS SYSTEMS LIMITED
-08003B     (base 16)		TORUS SYSTEMS LIMITED
-				SCIENCE PARK
-				  UNITED  KINGDOM
-				GB
-
-08-00-3C   (hex)		SCHLUMBERGER WELL SERVICES
-08003C     (base 16)		SCHLUMBERGER WELL SERVICES
-				AUSTIN ENGINEERING SERVICES
-				AUSTIN  TX  78720-0015
-				US
-
-08-00-34   (hex)		FILENET CORPORATION
-080034     (base 16)		FILENET CORPORATION
-				1575 CORPORATE DRIVE
-				COSTA MESA  CA  92626
-				US
-
-08-00-36   (hex)		INTERGRAPH CORPORATION
-080036     (base 16)		INTERGRAPH CORPORATION
-				ONE MADISON INDUSTRIAL PARK
-				HUNTSVILLE  AL  35807
-				US
-
-08-00-33   (hex)		BAUSCH & LOMB
-080033     (base 16)		BAUSCH & LOMB
-				INTERACTIVE GRAPHICS DIVISION
-				AUSITN  TX  78671
-				US
-
-08-00-48   (hex)		EUROTHERM GAUGING SYSTEMS
-080048     (base 16)		EUROTHERM GAUGING SYSTEMS
-				900 MIDDLESEX TURNPIKE, BDG. 6
-				BILLERICA  MA  01821
-				US
-
-08-00-43   (hex)		PIXEL COMPUTER INC.
-080043     (base 16)		PIXEL COMPUTER INC.
-				260 FORDHAM ROAD
-				WILMINGTON  MA  01887
-				US
-
-08-00-45   (hex)		CONCURRENT COMPUTER CORP.
-080045     (base 16)		CONCURRENT COMPUTER CORP.
-				2 CRESCENT PLACE
-				OCEANPORT  NJ  07757
-				US
-
-08-00-78   (hex)		ACCELL CORPORATION
-080078     (base 16)		ACCELL CORPORATION
-				50 SAGINAW DRIVE
-				ROCHESTER  NY  14623
-				US
-
-08-00-6D   (hex)		WHITECHAPEL COMPUTER WORKS
-08006D     (base 16)		WHITECHAPEL COMPUTER WORKS
-				75 WHITECHAPEL ROAD
-				LONDON  E1  1DU
-				GB
-
-08-00-30   (hex)		NETWORK RESEARCH CORPORATION
-080030     (base 16)		NETWORK RESEARCH CORPORATION
-				2380 N. ROSE AVENUE
-				OXNARD  CA  93010
-				US
-
-08-00-31   (hex)		LITTLE MACHINES INC.
-080031     (base 16)		LITTLE MACHINES INC.
-				4141 JUTLAND DRIVE
-				SAN DIEGO  CA  92117
-				US
-
-08-00-2E   (hex)		METAPHOR COMPUTER SYSTEMS
-08002E     (base 16)		METAPHOR COMPUTER SYSTEMS
-				2500 GARCIA AVENUE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-08-00-56   (hex)		STANFORD LINEAR ACCEL. CENTER
-080056     (base 16)		STANFORD LINEAR ACCEL. CENTER
-				2575 SANDHILL ROAD
-				MENLO PARK  CA  94025
-				US
-
-08-00-4F   (hex)		CYGNET SYSTEMS
-08004F     (base 16)		CYGNET SYSTEMS
-				2560 JUNCTION AVENUE
-				SAN JOSE  CA  95134
-				US
-
-08-00-50   (hex)		DAISY SYSTEMS CORP.
-080050     (base 16)		DAISY SYSTEMS CORP.
-				139 KIFER COURT
-				SUNNYVALE  CA  94086
-				US
-
-08-00-5E   (hex)		COUNTERPOINT COMPUTER INC.
-08005E     (base 16)		COUNTERPOINT COMPUTER INC.
-				2127 RINGWOOD AVENUE
-				SAN JOSE  CA  95131
-				US
-
-08-00-76   (hex)		PC LAN TECHNOLOGIES
-080076     (base 16)		PC LAN TECHNOLOGIES
-				5780 LINCOLN DRIVE SUITE 106
-				MINNEAPOLIS  MN  55436
-				US
-
-08-00-75   (hex)		DANSK DATA ELECTRONIK
-080075     (base 16)		DANSK DATA ELECTRONIK
-				HERLEV HOVEDGADE 199
-				    
-				DK
-
-08-00-2B   (hex)		DIGITAL EQUIPMENT CORPORATION
-08002B     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				LKG 1-2/A19
-				LITTLETON  MA  01460-1289
-				US
-
-08-00-29   (hex)		Megatek Corporation
-080029     (base 16)		Megatek Corporation
-				16868 Via Del Campo Court
-				San Diego  CA  92127
-				US
-
-02-70-B0   (hex)		M/A-COM INC. COMPANIES
-0270B0     (base 16)		M/A-COM INC. COMPANIES
-				11717 EXPLORATION LANE
-				GERMANTOWN  MD  20767
-				US
-
-00-00-53   (hex)		COMPUCORP
-000053     (base 16)		COMPUCORP
-				2211 MICHIGAN AVENUE
-				SANTA MONICA  CA  90404
-				US
-
-08-00-90   (hex)		SONOMA SYSTEMS
-080090     (base 16)		SONOMA SYSTEMS
-				4640 ADMIRALTY WAY,  STE. #600
-				MARINA DEL REY  CA  90292-6695
-				US
-
-08-00-0A   (hex)		NESTAR SYSTEMS INCORPORATED
-08000A     (base 16)		NESTAR SYSTEMS INCORPORATED
-				2585 EAST BAYSHORE ROAD
-				PALO ALTO  CA  94303
-				US
-
-00-80-0F   (hex)		STANDARD MICROSYSTEMS
-00800F     (base 16)		STANDARD MICROSYSTEMS
-				300 KENNEDY DRIVE
-				HAUPPAUGE  NY  11788
-				US
-
-00-40-6B   (hex)		SYSGEN
-00406B     (base 16)		SYSGEN
-				556 GIBRALTAR DRIVE
-				MILPITAS  CA  95035
-				US
-
-08-00-0F   (hex)		MITEL CORPORATION
-08000F     (base 16)		MITEL CORPORATION
-				350 LEGGET DRIVE
-				CANADA  K2K  1X3
-				CA
-
-08-00-23   (hex)		Panasonic Communications Co., Ltd.
-080023     (base 16)		Panasonic Communications Co., Ltd.
-				4-1-62 Minoshima Hakata Fukuoka
-				    812-8531
-				JP
-
-B0-4F-C3   (hex)		Shenzhen NVC Cloud Technology Co., Ltd.
-B04FC3     (base 16)		Shenzhen NVC Cloud Technology Co., Ltd.
-				Rm. 1406, Bld. 11A, Shenzhen Bay Eco-Technology Park, Nanshan Dist.,
-				Shenzhen  Guangdong  518063
-				CN
-
-08-00-1C   (hex)		KDD-KOKUSAI DEBNSIN DENWA CO.
-08001C     (base 16)		KDD-KOKUSAI DEBNSIN DENWA CO.
-				FUJI XEROX CO., LTD. TELEGRAPH
-				  107  
-				JP
-
-00-DD-0C   (hex)		UNGERMANN-BASS INC.
-00DD0C     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-08-00-18   (hex)		PIRELLI FOCOM NETWORKS
-080018     (base 16)		PIRELLI FOCOM NETWORKS
-				DENTON DRIVE
-				    ENGLAND
-				GB
-
-00-00-A6   (hex)		NETWORK GENERAL CORPORATION
-0000A6     (base 16)		NETWORK GENERAL CORPORATION
-				1296 B LAWRENCE STATION ROAD
-				SUNNYVALE  CA  94089
-				US
-
-00-BB-F0   (hex)		UNGERMANN-BASS INC.
-00BBF0     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-40-8E   (hex)		Tattile SRL 
-00408E     (base 16)		Tattile SRL 
-				2360 MARYLAND ROAD
-				WILLOW GROVE  PA  19090
-				US
-
-00-00-04   (hex)		XEROX CORPORATION
-000004     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-00-DD-0E   (hex)		UNGERMANN-BASS INC.
-00DD0E     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-88-57-1D   (hex)		Seongji Industry Company
-88571D     (base 16)		Seongji Industry Company
-				 54-33, Dongtanhana 1-gil
-				Hwaseong-si  Gyeonggi-do  18423
-				KR
-
-7C-F3-1B   (hex)		LG Electronics (Mobile Communications)
-7CF31B     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-01-C8   (hex)		THOMAS CONRAD CORP.
-0001C8     (base 16)		THOMAS CONRAD CORP.
-				1908-R KRAMER LANE
-				AUSTIN  TX  78758
-				US
-
-CC-EF-03   (hex)		Hunan Keyshare Communication Technology Co., Ltd.
-CCEF03     (base 16)		Hunan Keyshare Communication Technology Co., Ltd.
-				No. 19 Building, CEC Software Park, No. 39 jianshan Rd
-				Changsha  Hunan  410205
-				CN
-
-10-2F-A3   (hex)		Shenzhen Uvision-tech Technology Co.Ltd
-102FA3     (base 16)		Shenzhen Uvision-tech Technology Co.Ltd
-				shenzhen longhua Street
-				shenzhen  GuangDong  518000
-				CN
-
-70-48-F7   (hex)		Nintendo Co.,Ltd
-7048F7     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-18-E1-CA   (hex)		wanze
-18E1CA     (base 16)		wanze
-				wanjinglu
-				dandong  Liaoning  118000
-				CN
-
-EC-BE-DD   (hex)		Sagemcom Broadband SAS
-ECBEDD     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-C0-B6   (hex)		HVE, Inc. 
-00C0B6     (base 16)		HVE, Inc. 
-				Suite 2, 100 Executive Court
-				Waxahachie  TX  75165
-				US
-
-30-91-76   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-309176     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-78-C8-81   (hex)		Sony Interactive Entertainment Inc.
-78C881     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-D4-4F-68   (hex)		Eidetic Communications Inc
-D44F68     (base 16)		Eidetic Communications Inc
-				3553 31st NW
-				Calgary  Alberta  T2L2K7
-				CA
-
-74-9E-A5   (hex)		OHSUNG
-749EA5     (base 16)		OHSUNG
-				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
-				GUMI  GYEONG BUK  730-030
-				KR
-
-8C-C8-4B   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-8CC84B     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-0C-2F-B0   (hex)		Samsung Electronics Co.,Ltd
-0C2FB0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-02-16   (hex)		Cisco Systems, Inc
-B40216     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-54-A4-93   (hex)		IEEE Registration Authority
-54A493     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-6C-1C-71   (hex)		Zhejiang Dahua Technology Co., Ltd.
-6C1C71     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-CC-6A-10   (hex)		The Chamberlain Group, Inc
-CC6A10     (base 16)		The Chamberlain Group, Inc
-				300 Windsor Drive
-				Oak Brook  IL  60523
-				US
-
-F0-3F-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F03F95     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-56-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-185644     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-69-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C69D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-5A-58   (hex)		Dell Inc.
-185A58     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-C4-3A-35   (hex)		FN-LINK TECHNOLOGY LIMITED
-C43A35     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-04-D1-6E   (hex)		IEEE Registration Authority
-04D16E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-04-0E-3C   (hex)		HP Inc.
-040E3C     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-C4-E0-DE   (hex)		Zhengzhou XindaJiean Information Technology Co.,Ltd.
-C4E0DE     (base 16)		Zhengzhou XindaJiean Information Technology Co.,Ltd.
-				Tianli building A, wisdom park, no. 139, yangjin road, jinshui district
-				Zhengzhou  Henan  450003
-				CN
-
-90-1A-4F   (hex)		EM Microelectronic
-901A4F     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-C8-4F-0E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-C84F0E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-6C-D2-BA   (hex)		zte corporation
-6CD2BA     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-30-3A-BA   (hex)		Guangzhou BaoLun Electronics Co., Ltd
-303ABA     (base 16)		Guangzhou BaoLun Electronics Co., Ltd
-				No.1 Building B Block, Zhongcun Street, Panyu District
-				Guangzhou  guangdong  511400
-				CN
-
-D8-8A-DC   (hex)		Huawei Device Co., Ltd.
-D88ADC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-10-E9-53   (hex)		Huawei Device Co., Ltd.
-10E953     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-7C-48-B2   (hex)		Vida Resources Lte Ltd
-7C48B2     (base 16)		Vida Resources Lte Ltd
-				10 Anson road, unit #16-20 International Plaza
-				Singapore    079903
-				SG
-
-2C-AB-33   (hex)		Texas Instruments
-2CAB33     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B8-87-C6   (hex)		Prudential Technology co.,LTD
-B887C6     (base 16)		Prudential Technology co.,LTD
-				UNIT 4,7/F BRIGHT WAY TOWER, NO33 MONG KOK RD, 
-				Hong Kong    999077 
-				CN
-
-EC-9C-32   (hex)		Sichuan AI-Link Technology Co., Ltd.
-EC9C32     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-4C-AD-A8   (hex)		PANOPTICS CORP.
-4CADA8     (base 16)		PANOPTICS CORP.
-				D-908 Bundang Technopark, 700 Pangyoro, Bundang
-				Seongnam  Gyeonggi  13516
-				KR
-
-FC-1C-A1   (hex)		Nokia
-FC1CA1     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-D4-2D-C5   (hex)		Panasonic i-PRO Sensing Solutions Co., Ltd.
-D42DC5     (base 16)		Panasonic i-PRO Sensing Solutions Co., Ltd.
-				4-1-62 Minoshima, Hakata-ku
-				Fukuoka City     812-8531
-				JP
-
-E8-D0-3C   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-E8D03C     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-1C-1A-DF   (hex)		Microsoft Corporation
-1C1ADF     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-D4-F5-47   (hex)		Google, Inc.
-D4F547     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-98-1B-B5   (hex)		ASSA ABLOY Korea Co., Ltd iRevo
-981BB5     (base 16)		ASSA ABLOY Korea Co., Ltd iRevo
-				10F of JEI PLATZ Bldg., 186, Gasandigital-ro, Geumcheon-gu
-				Seoul    08502
-				KR
-
-34-CB-1A   (hex)		Procter & Gamble Company
-34CB1A     (base 16)		Procter & Gamble Company
-				2 Procter & Gamble Plaza
-				Cincinnati  OH  45202
-				US
-
-F0-B1-07   (hex)		Ericsson AB
-F0B107     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-78-4F-9B   (hex)		Juniper Networks
-784F9B     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-78-3A-6C   (hex)		TECNO MOBILE LIMITED
-783A6C     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-E0-40-07   (hex)		Huawei Device Co., Ltd.
-E04007     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-38-3F-B3   (hex)		Technicolor CH USA Inc.
-383FB3     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-70-CE-8C   (hex)		Samsung Electronics Co.,Ltd
-70CE8C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-40-70-F5   (hex)		Apple, Inc.
-4070F5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-35-B5   (hex)		Apple, Inc.
-B035B5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-AF-D1   (hex)		netKTI Co., Ltd
-90AFD1     (base 16)		netKTI Co., Ltd
-				7-10F THE-ONE SQUARE, 135, Unjung-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13461
-				KR
-
-80-0C-67   (hex)		Apple, Inc.
-800C67     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-81-2A   (hex)		Apple, Inc.
-90812A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-17-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7817BE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F0-72-EA   (hex)		Google, Inc.
-F072EA     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-B8-7B-C5   (hex)		Apple, Inc.
-B87BC5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-51-36   (hex)		TCT mobile ltd
-F05136     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-B8-C9-B5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B8C9B5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-88-AC-C0   (hex)		Zyxel Communications Corporation
-88ACC0     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-90-FD-73   (hex)		zte corporation
-90FD73     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-1C-1E-38   (hex)		PCCW Global, Inc.
-1C1E38     (base 16)		PCCW Global, Inc.
-				475 Spring Park Pl Suite 100 Herndon VA 20170
-				Herndon  WA  20170
-				US
-
-3C-41-0E   (hex)		Cisco Systems, Inc
-3C410E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-88-D9-8F   (hex)		Juniper Networks
-88D98F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-45-E2   (hex)		CyberTAN Technology Inc.
-0045E2     (base 16)		CyberTAN Technology Inc.
-				99 Park Ave III, Hsinchu Science Park
-				Hsinchu    308
-				TW
-
-00-69-67   (hex)		IEEE Registration Authority
-006967     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F8-6F-DE   (hex)		Shenzhen Goodix Technology Co.,Ltd.
-F86FDE     (base 16)		Shenzhen Goodix Technology Co.,Ltd.
-				 F13,Phase B,Tengfei Industrial Building,Futian Free Trade Zone,Shenzhen,China
-				Shenzhen  Guangdong  518045
-				CN
-
-64-66-24   (hex)		Sagemcom Broadband SAS
-646624     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-B0-F5-30   (hex)		Hitron Technologies. Inc
-B0F530     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-74-0A-E1   (hex)		Huawei Device Co., Ltd.
-740AE1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B4-A8-98   (hex)		Huawei Device Co., Ltd.
-B4A898     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-0C-E4-A0   (hex)		Huawei Device Co., Ltd.
-0CE4A0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-BC-1A-E4   (hex)		Huawei Device Co., Ltd.
-BC1AE4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-3F-72   (hex)		Mellanox Technologies, Inc.
-043F72     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-1C-4D-66   (hex)		Amazon Technologies Inc.
-1C4D66     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-50-2C-C6   (hex)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
-502CC6     (base 16)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
-				Jinji West Road, Qianshan,
-				Zhuhai  Guangdong  519070
-				CN
-
-F4-FE-FB   (hex)		Samsung Electronics Co.,Ltd
-F4FEFB     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-98-49-14   (hex)		Wistron Neweb Corporation
-984914     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-0C-EE-99   (hex)		Amazon Technologies Inc.
-0CEE99     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-11-7E   (hex)		Midmark Corp
-00117E     (base 16)		Midmark Corp
-				1001 Asbury Dr
-				Buffalo Grove  IL  60089
-				US
-
-D0-28-BA   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
-D028BA     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
-				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
-				Chongqing  China  401120
-				CN
-
-A4-28-B7   (hex)		Yangtze Memory Technologies Co., Ltd.
-A428B7     (base 16)		Yangtze Memory Technologies Co., Ltd.
-				No.88 Weilai 3rd Road, East Lake High-tech Development Zone, Wuhan, Hubei, POC
-				Wuhan  Hubei  430078
-				CN
-
-94-92-D2   (hex)		KCF Technologies, Inc.
-9492D2     (base 16)		KCF Technologies, Inc.
-				336 S Fraser Street
-				State College  PA  16801
-				US
-
-E4-A8-DF   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-E4A8DF     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU  215300
-				CN
-
-8C-53-C3   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-8C53C3     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-70-2F-35   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-702F35     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-14-B8   (hex)		Nokia
-C014B8     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-76-3D   (hex)		Veea
-00763D     (base 16)		Veea
-				164 E 83rd Street
-				New York  NY  10028
-				US
-
-30-93-BC   (hex)		Sagemcom Broadband SAS
-3093BC     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-FC-F5-C4   (hex)		Espressif Inc.
-FCF5C4     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-E8-26-B6   (hex)		Inside Biometrics International Limited
-E826B6     (base 16)		Inside Biometrics International Limited
-				Strathpeffer Road
-				Dingwall  Scotland  IV159QF
-				GB
-
-54-CE-69   (hex)		Hikari Trading Co.,Ltd.
-54CE69     (base 16)		Hikari Trading Co.,Ltd.
-				Hikari Building,7-4-14,Ginza,Chuo-ku
-				Tokyo    104-0061
-				JP
-
-6C-C6-3B   (hex)		Taicang T&W Electronics
-6CC63B     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-58-8E-81   (hex)		Silicon Laboratories
-588E81     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-48-B0-2D   (hex)		NVIDIA Corporation
-48B02D     (base 16)		NVIDIA Corporation
-				2701 San Tomas Expressway
-				Santa Clara  CA  95050
-				US
-
-4C-E1-76   (hex)		Cisco Systems, Inc
-4CE176     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-AE-F6   (hex)		eero inc.
-6CAEF6     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-FC-8E-6E   (hex)		StreamCCTV, LLC
-FC8E6E     (base 16)		StreamCCTV, LLC
-				1129 Northern Blvd, STE. 404
-				Manhasset    11030
-				US
-
-E0-2A-E6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E02AE6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-64-12-36   (hex)		Technicolor CH USA Inc.
-641236     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-78-8B-2A   (hex)		Zhen Shi Information Technology (Shanghai) Co., Ltd.
-788B2A     (base 16)		Zhen Shi Information Technology (Shanghai) Co., Ltd.
-				5F, Building 3?No. 401 Caobao Road, Xuhui District, Shanghai, China
-				Shanghai  Shanghai  200233
-				CN
-
-AC-64-CF   (hex)		FN-LINK TECHNOLOGY LIMITED
-AC64CF     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-F0-67-28   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-F06728     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-BC-D7-67   (hex)		Private
-BCD767     (base 16)		Private
-
-9C-E1-76   (hex)		Cisco Systems, Inc
-9CE176     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-10-29-59   (hex)		Apple, Inc.
-102959     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-76-84   (hex)		Apple, Inc.
-E47684     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-1A-1D   (hex)		Samsung Electronics Co.,Ltd
-B41A1D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-5C-D5   (hex)		Apple, Inc.
-F05CD5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-DA-6D   (hex)		Tiandy Technologies CO.,LTD
-3CDA6D     (base 16)		Tiandy Technologies CO.,LTD
-				NO.8,haitai huake rd2 (outside ring road),huayuan new technology industrial park
-				Tianjin  Tianjin  300384
-				CN
-
-F8-0D-F0   (hex)		zte corporation
-F80DF0     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-9C-E9-1C   (hex)		zte corporation
-9CE91C     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-5C-17-CF   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-5C17CF     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-A4-FA-76   (hex)		New H3C Technologies Co., Ltd
-A4FA76     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-70-EA-5A   (hex)		Apple, Inc.
-70EA5A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-FA-D3   (hex)		IEEE Registration Authority
-3CFAD3     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-60-78   (hex)		Swissbit AG
-8C6078     (base 16)		Swissbit AG
-				Industriestrasse 4
-				Bronschhofen    CH-9552
-				CH
-
-00-DD-25   (hex)		Shenzhen hechengdong Technology Co., Ltd
-00DD25     (base 16)		Shenzhen hechengdong Technology Co., Ltd
-				302, floor 3, no.90-5, Dayang Road, Xintian community, Fuhai street, Bao'an District
-				Shenzhen  GuangDong  518100
-				CN
-
-80-20-E1   (hex)		BVBA DPTechnics
-8020E1     (base 16)		BVBA DPTechnics
-				Westkapellestraat 396/44
-				Knokke-Heist  West-Vlaanderen  8300
-				BE
-
-04-45-A1   (hex)		NIRIT- Xinwei  Telecom Technology Co., Ltd.
-0445A1     (base 16)		NIRIT- Xinwei  Telecom Technology Co., Ltd.
-				2-? ??????????? ??????, ?.12, ???.2
-				Moscow    115432
-				RU
-
-8C-97-EA   (hex)		FREEBOX SAS
-8C97EA     (base 16)		FREEBOX SAS
-				16 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-30-AB-6A   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-30AB6A     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-74-9B-E8   (hex)		Hitron Technologies. Inc
-749BE8     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-5C-BA-EF   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-5CBAEF     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-4C-63-71   (hex)		Xiaomi Communications Co Ltd
-4C6371     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-D8-4D-B9   (hex)		Wu Qi Technologies,Inc.
-D84DB9     (base 16)		Wu Qi Technologies,Inc.
-				14/F, 107 Middle Road, Xiantao Big Data Valley, Yubei District
-				Chongqing  Chongqing  401120
-				CN
-
-A0-4F-85   (hex)		LG Electronics (Mobile Communications)
-A04F85     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-D8-07-B6   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D807B6     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-64-6E-97   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-646E97     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-78-50-7C   (hex)		Juniper Networks
-78507C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-12-58   (hex)		TechVoIP Sp z o.o.
-001258     (base 16)		TechVoIP Sp z o.o.
-				Os. Boleslawa Chrobrego 117 
-				Poznan  Wielkopolska  60-681
-				PL
-
-6C-16-32   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C1632     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-1A-01   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2C1A01     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-78-39   (hex)		zte corporation
-347839     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-24-16-9D   (hex)		Cisco Systems, Inc
-24169D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-19-E2   (hex)		Volterra
-F419E2     (base 16)		Volterra
-				2550 Great America Way #350
-				Santa Clara  CA  95054
-				US
-
-4C-A0-03   (hex)		VITEC
-4CA003     (base 16)		VITEC
-				99 rue Pierre Semard
-				Chatillon    92320
-				FR
-
-64-F2-FB   (hex)		Hangzhou Ezviz Software Co.,Ltd.
-64F2FB     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
-				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-30-80-9B   (hex)		New H3C Technologies Co., Ltd
-30809B     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-74-22-BB   (hex)		Huawei Device Co., Ltd.
-7422BB     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-6C-0D-34   (hex)		Nokia
-6C0D34     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-4C-45-76   (hex)		China Mobile(Hangzhou) Information Technology Co.,Ltd.
-4C4576     (base 16)		China Mobile(Hangzhou) Information Technology Co.,Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-B4-40-A4   (hex)		Apple, Inc.
-B440A4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-B8-A3   (hex)		Apple, Inc.
-48B8A3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-DB-E3   (hex)		Apple, Inc.
-F4DBE3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-7C-C7   (hex)		Juniper Networks
-F07CC7     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-D4-5E-EC   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-D45EEC     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-74-C9-29   (hex)		Zhejiang Dahua Technology Co., Ltd.
-74C929     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-D4-CF-F9   (hex)		Shenzhen SEI Robotics Co.,Ltd
-D4CFF9     (base 16)		Shenzhen SEI Robotics Co.,Ltd
-				501,Productivity Building A, #5 Hi-Tech Middle 2nd Road
-				Shenzhen  Guangdong  518057
-				CN
-
-5C-B2-9E   (hex)		ASCO Power Technologies
-5CB29E     (base 16)		ASCO Power Technologies
-				160 Park Avenue
-				Florham Park  NJ  07932
-				US
-
-9C-C9-EB   (hex)		NETGEAR
-9CC9EB     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-94-CC-04   (hex)		IEEE Registration Authority
-94CC04     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-90-EC-77   (hex)		silicom
-90EC77     (base 16)		silicom
-				14 Atir-Yeda St/
-				Kfar-Sava  Israel  44000
-				IL
-
-88-C3-97   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-88C397     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-F0-F6-C1   (hex)		Sonos, Inc.
-F0F6C1     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-60-68-4E   (hex)		Samsung Electronics Co.,Ltd
-60684E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-20-FD   (hex)		Samsung Electronics Co.,Ltd
-8020FD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-CE-40   (hex)		Samsung Electronics Co.,Ltd
-B4CE40     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-03-84   (hex)		Hongkong Nano IC Technologies Co., Ltd
-540384     (base 16)		Hongkong Nano IC Technologies Co., Ltd
-				Rm. 19C, Lockhart Ctr., 301-307 Lockhart Rd., Wan Chai, Hong Kong
-				Hong Kong  Hong Kong  999077
-				CN
-
-04-BD-BF   (hex)		Samsung Electronics Co.,Ltd
-04BDBF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-7A-BF   (hex)		Samsung Electronics Co.,Ltd
-BC7ABF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-09-31   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B40931     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-E7-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94E7EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-E4-BA   (hex)		Huawei Device Co., Ltd.
-94E4BA     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-34-71-46   (hex)		Huawei Device Co., Ltd.
-347146     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-2C-C5-46   (hex)		Huawei Device Co., Ltd.
-2CC546     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-0C-83-9A   (hex)		Huawei Device Co., Ltd.
-0C839A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E0-E0-FC   (hex)		Huawei Device Co., Ltd.
-E0E0FC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-30-50-75   (hex)		GN Audio A/S
-305075     (base 16)		GN Audio A/S
-				Lautrupbjerg 7
-				Ballerup    DK-2750
-				DK
-
-F4-B7-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4B78D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-16-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A416E7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-B9-B0   (hex)		Intracom Asia Co., Ltd
-30B9B0     (base 16)		Intracom Asia Co., Ltd
-				4F., No77, Sec. 1, Xintai 5th Rd., Xizhi Dist.
-				New Taipei City  Taiwan  221
-				TW
-
-0C-35-FE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-0C35FE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-8C-83-DF   (hex)		Nokia
-8C83DF     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-AC-4B-1E   (hex)		Integri-Sys.Com LLC
-AC4B1E     (base 16)		Integri-Sys.Com LLC
-				9130 South Dadeland Bvld. Suite 1509
-				Miami  FL  33156
-				US
-
-B0-E4-D5   (hex)		Google, Inc.
-B0E4D5     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-68-69-CA   (hex)		Hitachi, Ltd.
-6869CA     (base 16)		Hitachi, Ltd.
-				27-18, Minami Oi 6-chome, Shinagawa-ku
-				Tokyo    140-8572
-				JP
-
-AC-4A-56   (hex)		Cisco Systems, Inc
-AC4A56     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-EA-B5   (hex)		Extreme Networks, Inc.
-F4EAB5     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-00-19-77   (hex)		Extreme Networks, Inc.
-001977     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-08-EA-44   (hex)		Extreme Networks, Inc.
-08EA44     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-B0-B5-C3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B0B5C3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-70-4A-0E   (hex)		AMPAK Technology,Inc.
-704A0E     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-08-30-6B   (hex)		Palo Alto Networks
-08306B     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-00-86-9C   (hex)		Palo Alto Networks
-00869C     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-4C-B9-11   (hex)		Raisecom Technology CO.,LTD
-4CB911     (base 16)		Raisecom Technology CO.,LTD
-				No. 11, East Area, No. 10 Block, East Xibeiwang Road
-				Beijing    100094
-				CN
-
-40-47-6A   (hex)		Astro Gaming
-40476A     (base 16)		Astro Gaming
-				340 Bryant St., Suite 101
-				San Francisco  CA  94107
-				US
-
-4C-CE-2D   (hex)		Danlaw Inc
-4CCE2D     (base 16)		Danlaw Inc
-				23700 research Dr.
-				Farmington Hills  MI  48335
-				US
-
-30-B2-37   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-30B237     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-BC-5A-56   (hex)		Cisco Systems, Inc
-BC5A56     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B8-7C-F2   (hex)		Extreme Networks, Inc.
-B87CF2     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-88-2B-94   (hex)		MADOKA SYSTEM Co.,Ltd.
-882B94     (base 16)		MADOKA SYSTEM Co.,Ltd.
-				2-105 Hanasakidai Moriyama-ku
-				Nagoya    463-0808
-				JP
-
-7C-EF-61   (hex)		STR Elektronik Josef Schlechtinger GmbH
-7CEF61     (base 16)		STR Elektronik Josef Schlechtinger GmbH
-				Auf dem Ohl 9
-				Wenden    57482
-				DE
-
-64-A9-65   (hex)		Linkflow Co., Ltd.
-64A965     (base 16)		Linkflow Co., Ltd.
-				54, Nonhyeon-ro 2-gil, Gangnam-gu
-				Seoul    06313
-				KR
-
-24-62-CE   (hex)		Aruba, a Hewlett Packard Enterprise Company
-2462CE     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-68-E2-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-68E209     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-40-05-89   (hex)		T-Mobile, USA
-400589     (base 16)		T-Mobile, USA
-				3625 132nd Ave SE
-				BELLEVUE  WA  98006
-				US
-
-C0-9B-F4   (hex)		IEEE Registration Authority
-C09BF4     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F4-30-8B   (hex)		Xiaomi Communications Co Ltd
-F4308B     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-DC-6B-12   (hex)		worldcns inc.
-DC6B12     (base 16)		worldcns inc.
-				174, Namjo-ro 1-gil, Jocheon-eup
-				Jeju-si  Jeju-do  63335
-				KR
-
-70-03-9F   (hex)		Espressif Inc.
-70039F     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-A0-DE-0F   (hex)		Huawei Device Co., Ltd.
-A0DE0F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F4-87-C5   (hex)		Huawei Device Co., Ltd.
-F487C5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-08-00-88   (hex)		Brocade Communications Systems LLC
-080088     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-01-0F   (hex)		Brocade Communications Systems LLC
-00010F     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-08-B0-55   (hex)		ASKEY COMPUTER CORP
-08B055     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-04-5F-B9   (hex)		Cisco Systems, Inc
-045FB9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-CC-4E-24   (hex)		Brocade Communications Systems LLC
-CC4E24     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-E0-52   (hex)		Brocade Communications Systems LLC
-00E052     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-98-DF-82   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-98DF82     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-3C-F6-52   (hex)		zte corporation
-3CF652     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-5C-0F-FB   (hex)		Amino Communications Ltd
-5C0FFB     (base 16)		Amino Communications Ltd
-				1010 Cambourne Business Park
-				Cambourne  Cambs  CB23 6DP
-				GB
-
-74-58-F3   (hex)		Amazon Technologies Inc.
-7458F3     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-06-31   (hex)		Calix Inc.
-000631     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-A8-05-77   (hex)		Netlist, Inc.
-A80577     (base 16)		Netlist, Inc.
-				175 Technology
-				Irvine  CA  92618
-				US
-
-E4-3A-65   (hex)		MofiNetwork Inc
-E43A65     (base 16)		MofiNetwork Inc
-				11 Boynton Cir
-				Markham  Ontario  L6C 1A8
-				CA
-
-08-AA-55   (hex)		Motorola Mobility LLC, a Lenovo Company
-08AA55     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-54-21-9D   (hex)		Samsung Electronics Co.,Ltd
-54219D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C8-8B-E8   (hex)		Masimo Corporation
-C88BE8     (base 16)		Masimo Corporation
-				40 Parker
-				Irvine  CA  92618
-				US
-
-F0-41-C6   (hex)		Heat Tech Company, Ltd.
-F041C6     (base 16)		Heat Tech Company, Ltd.
-				221A, Tikhookeanskaya st.
-				Khabarovsk    680033
-				RU
-
-40-40-28   (hex)		ZIV
-404028     (base 16)		ZIV
-				Polígono Parque Tecnológico, 210
-				ZAMUDIO  VIZCAYA  48170
-				ES
-
-F8-6C-03   (hex)		Shenzhen Teleone Technology Co., Ltd
-F86C03     (base 16)		Shenzhen Teleone Technology Co., Ltd
-				TOWER B 5/F, SHANSHUI BUILDING, NANSHAN YUNGU INNOVATION INDUSTRY PARK, 1183 LIUXIAN AVENUE, NANSHAN, SHENZHEN, CHINA
-				Shenzhen    518000
-				CN
-
-D8-71-4D   (hex)		Texas Instruments
-D8714D     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-0C-EC-80   (hex)		Texas Instruments
-0CEC80     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-10-5D-DC   (hex)		Huawei Device Co., Ltd.
-105DDC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-73-85   (hex)		Huawei Device Co., Ltd.
-DC7385     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-55-D5   (hex)		Huawei Device Co., Ltd.
-5455D5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-15-D2   (hex)		Xantech Corporation
-0015D2     (base 16)		Xantech Corporation
-				5919 Sea Otter Place
-				Carlsbad  CA  92010
-				US
-
-00-1F-40   (hex)		Speakercraft Inc.
-001F40     (base 16)		Speakercraft Inc.
-				5919 Sea Otter Place
-				Carlsbad  CA  92010
-				US
-
-18-45-93   (hex)		Taicang T&W Electronics
-184593     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-CC-9E-CA   (hex)		HMD Global Oy
-CC9ECA     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo  Espoo  02600
-				FI
-
-3C-30-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C306F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-EA-E7   (hex)		Shanghai High-Flying Electronics  Technology Co., Ltd
-34EAE7     (base 16)		Shanghai High-Flying Electronics  Technology Co., Ltd
-				Room 1002,#1Building,No.3000 Longdong Avenue,Pudong
-				Shanghai  Shanghai  201202
-				CN
-
-D4-AB-CD   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-D4ABCD     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-80-E1-BF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-80E1BF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-2C-D0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-482CD0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-19-32   (hex)		Gude Systems GmbH
-001932     (base 16)		Gude Systems GmbH
-				Von-der-Wettern-Str. 23
-				Cologne  NRW  51149
-				DE
-
-A0-CA-A5   (hex)		INTELLIGENCE TECHNOLOGY OF CEC CO., LTD
-A0CAA5     (base 16)		INTELLIGENCE TECHNOLOGY OF CEC CO., LTD
-				Tower A, NO.2 Lutuan Road, The sountern Of Future Science and Tech Zone, Changping District
-				Beijing  Beijing  102209
-				CN
-
-5C-5F-67   (hex)		Intel Corporate
-5C5F67     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-0C-54-15   (hex)		Intel Corporate
-0C5415     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-30-24-32   (hex)		Intel Corporate
-302432     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-DC-8B-28   (hex)		Intel Corporate
-DC8B28     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-1C-1B-B5   (hex)		Intel Corporate
-1C1BB5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-F8-34-41   (hex)		Intel Corporate
-F83441     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-E4-70-B8   (hex)		Intel Corporate
-E470B8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-E0-0E-E4   (hex)		DWnet Technologies(Suzhou) Corporation
-E00EE4     (base 16)		DWnet Technologies(Suzhou) Corporation
-				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
-				Suzhou    21500
-				CN
-
-E8-85-4B   (hex)		Apple, Inc.
-E8854B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-EC-95   (hex)		Apple, Inc.
-28EC95     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-FD-B1   (hex)		LG Electronics
-58FDB1     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-E0-2B-96   (hex)		Apple, Inc.
-E02B96     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-46-9D   (hex)		Cisco Meraki
-A8469D     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-6C-DE-A9   (hex)		Cisco Meraki
-6CDEA9     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-8C-CE-FD   (hex)		Shenzhen zhouhai technology co.,LTD
-8CCEFD     (base 16)		Shenzhen zhouhai technology co.,LTD
-				401-403,415-416, Area A, Block B, West Silicon Valley, 5010 Baoan Avenue, Baoan District, Shenzhen, China
-				Shenzhen  Guangdong  518110
-				CN
-
-50-FB-19   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-50FB19     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
-				SHEN ZHEN  GUANG DONG  518000
-				CN
-
-D0-AB-D5   (hex)		Intel Corporate
-D0ABD5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-68-17-29   (hex)		Intel Corporate
-681729     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-B8-08-CF   (hex)		Intel Corporate
-B808CF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-DC-71-96   (hex)		Intel Corporate
-DC7196     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-50-E0-85   (hex)		Intel Corporate
-50E085     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-94-08-C7   (hex)		Huawei Device Co., Ltd.
-9408C7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C8-CA-63   (hex)		Huawei Device Co., Ltd.
-C8CA63     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-3B-8F   (hex)		Intel Corporate
-983B8F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-D0-C6-37   (hex)		Intel Corporate
-D0C637     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-04-EA-56   (hex)		Intel Corporate
-04EA56     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-D4-3B-04   (hex)		Intel Corporate
-D43B04     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-38-68-93   (hex)		Intel Corporate
-386893     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-D8-3B-BF   (hex)		Intel Corporate
-D83BBF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-14-F6-D8   (hex)		Intel Corporate
-14F6D8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-E0-D4-E8   (hex)		Intel Corporate
-E0D4E8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-94-E6-F7   (hex)		Intel Corporate
-94E6F7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-4C-1D-96   (hex)		Intel Corporate
-4C1D96     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-70-3A-A6   (hex)		New H3C Technologies Co., Ltd
-703AA6     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-94-37-F7   (hex)		Huawei Device Co., Ltd.
-9437F7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-6C-59   (hex)		Intel Corporate
-046C59     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-90-3F-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-903FEA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-AB-48   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-20AB48     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-D7-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CCD73C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-40-D0   (hex)		OCOSMOS Co., LTD
-D440D0     (base 16)		OCOSMOS Co., LTD
-				(Tamnip-Dong) #1, 263-1 Techno 2-Ro Yuseong-Gu
-				Daejeon  Daejeon  34026
-				KR
-
-94-E7-0B   (hex)		Intel Corporate
-94E70B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-00-1E-E0   (hex)		Urmet SpA
-001EE0     (base 16)		Urmet SpA
-				Via Bologna 188/C
-				Torino  TO  I-10154
-				IT
-
-DC-D9-AE   (hex)		Nokia Shanghai Bell Co., Ltd.
-DCD9AE     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-98-B8-BC   (hex)		Samsung Electronics Co.,Ltd
-98B8BC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-4E-16   (hex)		Samsung Electronics Co.,Ltd
-184E16     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C0-3D-03   (hex)		Samsung Electronics Co.,Ltd
-C03D03     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-97-B1   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-A497B1     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-BC-A9-93   (hex)		Cambium Networks Limited
-BCA993     (base 16)		Cambium Networks Limited
-				Unit B2, Linhay Business Park,
-				Ashburton  Devon  TQ13 7UP
-				GB
-
-10-74-6F   (hex)		MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.
-10746F     (base 16)		MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.
-				INNOPLEX, NO. 2A, MEDAN BAYAN LEPAS, BAYAN LEPAS TECHNOPLEX
-				BAYAN LEPAS  PENANG  11900
-				MY
-
-00-92-7D   (hex)		Ficosa Internationa(Taicang) C0.,Ltd.
-00927D     (base 16)		Ficosa Internationa(Taicang) C0.,Ltd.
-				No.518, Middle Suzhou Rd., Taicang Economy Developing Area,  Taicang,
-				Suzhou  Jiangsu  215400
-				CN
-
-44-16-22   (hex)		Microsoft Corporation
-441622     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-44-E6-B0   (hex)		China Mobile IOT Company Limited
-44E6B0     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-74-7A-90   (hex)		Murata Manufacturing Co., Ltd.
-747A90     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-24-E9-CA   (hex)		Huawei Device Co., Ltd.
-24E9CA     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-14-00-7D   (hex)		zte corporation
-14007D     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-94-AE-F0   (hex)		Cisco Systems, Inc
-94AEF0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-1C-08-C1   (hex)		LG Innotek
-1C08C1     (base 16)		LG Innotek
-				978-1 Jangduk dong, Gwangsangu
-				Gwangju  Gwangju  506-731
-				KR
-
-34-87-3D   (hex)		Quectel Wireless Solutions Co., Ltd.
-34873D     (base 16)		Quectel Wireless Solutions Co., Ltd.
-				RM501,Building 13,No.99 TianZhou Road,Xuhui District,Shanghai,China
-				Shanghai  Shanghai  200233
-				CN
-
-9C-F6-1A   (hex)		Carrier Fire & Security
-9CF61A     (base 16)		Carrier Fire & Security
-				Kelvinstraat 7
-				DH Weert    6003
-				NL
-
-58-B6-23   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-58B623     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District
-				Beijing  Beijing  100085
-				CN
-
-FC-73-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC73FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-45-62   (hex)		ANDRA Sp. z o. o.
-044562     (base 16)		ANDRA Sp. z o. o.
-				Pryzmaty 6/8
-				Warszawa    02-226
-				PL
-
-00-26-9E   (hex)		Quanta Computer Inc.
-00269E     (base 16)		Quanta Computer Inc.
-				NO. 211, WEN HWA 2RD., KUEI SHAN HSIANG, TAIPEI, SHIEN
-				TAO YUAN    333
-				TW
-
-C4-54-44   (hex)		Quanta Computer Inc.
-C45444     (base 16)		Quanta Computer Inc.
-				No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang, Tao Yuan Shien, Taiwan, R. O. C.
-				Taoyuan  Taiwan  33377
-				TW
-
-00-C0-9F   (hex)		Quanta Computer Inc.
-00C09F     (base 16)		Quanta Computer Inc.
-				7F., 116, HOU-KANG ST.,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-1B-24   (hex)		Quanta Computer Inc.
-001B24     (base 16)		Quanta Computer Inc.
-				No. 211, Wen Hwa 2nd Rd.,
-				Kuei Shan Hsiang  Tao Yuan Shien  333
-				TW
-
-C8-0A-A9   (hex)		Quanta Computer Inc.
-C80AA9     (base 16)		Quanta Computer Inc.
-				211, Wen Hwa 2nd Rd.,
-				Tao Yuan  Kuei Shan  33377
-				TW
-
-60-EB-69   (hex)		Quanta Computer Inc.
-60EB69     (base 16)		Quanta Computer Inc.
-				211, Wen Hwa 2nd Rd.,Kuei Shan, 
-				Tao Yuan    33377
-				TW
-
-C0-8F-20   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-C08F20     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-74-F7-F6   (hex)		Shanghai Sunmi Technology Co.,Ltd.
-74F7F6     (base 16)		Shanghai Sunmi Technology Co.,Ltd.
-				Room 505, KIC Plaza, No.388 Song Hu Road, Yang Pu District, Shanghai, China
-				Shanghai  Yang Pu District  200433
-				CN
-
-24-1A-E6   (hex)		Huawei Device Co., Ltd.
-241AE6     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-60-B7-6E   (hex)		Google, Inc.
-60B76E     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-B4-23-30   (hex)		Itron Inc
-B42330     (base 16)		Itron Inc
-				2111 N Molter Rd
-				Liberty Lake  WA  99019
-				US
-
-08-4E-BF   (hex)		Sumitomo Electric Industries, Ltd
-084EBF     (base 16)		Sumitomo Electric Industries, Ltd
-				1-1-3, Shimaya, Konohana-ku
-				Osaka    554-0024
-				JP
-
-A8-02-DB   (hex)		zte corporation
-A802DB     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-1C-5D-80   (hex)		Mitubishi Hitachi Power Systems Industries Co., Ltd.
-1C5D80     (base 16)		Mitubishi Hitachi Power Systems Industries Co., Ltd.
-				Nakaku Aioimachi
-				Yokohama    2310012
-				JP
-
-80-16-05   (hex)		Vodafone Italia S.p.A.
-801605     (base 16)		Vodafone Italia S.p.A.
-				Via Lorenteggio nr. 240
-				Milan  Italy  20147
-				IT
-
-3C-9C-0F   (hex)		Intel Corporate
-3C9C0F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-5C-44-3E   (hex)		Skullcandy
-5C443E     (base 16)		Skullcandy
-				6301 N. Landmark Dr. 
-				Park City  UT  84098
-				US
-
-F8-82-00   (hex)		CaptionCall
-F88200     (base 16)		CaptionCall
-				4215 Riverboat Road
-				Salt Lake City  UT  84123
-				US
-
-08-FB-EA   (hex)		AMPAK Technology,Inc.
-08FBEA     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-34-0F-66   (hex)		Web Sensing LLC
-340F66     (base 16)		Web Sensing LLC
-				P.O. Box 692
-				Hanover  NH  03755
-				US
-
-58-65-E6   (hex)		infomark
-5865E6     (base 16)		infomark
-				#801, KINS TOWER, JEONGJA-DONG
-				SEONGNAM  GYOUNGGI  463-847
-				KR
-
-00-50-F1   (hex)		Maxlinear, Inc
-0050F1     (base 16)		Maxlinear, Inc
-				94 Em-Hamoshavot Way.
-				Petach-Tikva    
-				IL
-
-F4-E5-78   (hex)		LLC Proizvodstvennaya Kompania TransService
-F4E578     (base 16)		LLC Proizvodstvennaya Kompania TransService
-				Ulitsa Podolskih Kursantov,  build. 3, of. 133
-				Moscow  Moscow  117545
-				RU
-
-08-54-BB   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-0854BB     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-60-EB-5A   (hex)		Asterfusion Data Technologies Co.,Ltd
-60EB5A     (base 16)		Asterfusion Data Technologies Co.,Ltd
-				B401, Building 2, Creative Industry Park, No.328 Xinghu Street, SIP, Suzhou
-				suzhou    215123
-				CN
-
-E4-D3-73   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E4D373     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-BC-9A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0BC9A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-2C-09   (hex)		Nintendo Co.,Ltd
-702C09     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-E8-1B-69   (hex)		Sercomm Corporation.
-E81B69     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-68-52-D6   (hex)		UGame Technology Co.,Ltd
-6852D6     (base 16)		UGame Technology Co.,Ltd
-				3F, Bld.7, F518 Idea Land, No. 1065 Baoyuan Road, Xixiang Street, Baoan District
-				Shenzhen    518102
-				CN
-
-90-12-A1   (hex)		We Corporation Inc.
-9012A1     (base 16)		We Corporation Inc.
-				201, 33, Deokcheon-ro, Manan-gu
-				Anyang-si  Gyeonggi-do  14088
-				KR
-
-B8-80-35   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
-B88035     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
-				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
-				Shenzhen  Guangdong  518057
-				CN
-
-00-17-11   (hex)		Cytiva Sweden AB
-001711     (base 16)		Cytiva Sweden AB
-				Björkgatan 30
-				Uppsala  SE  75184
-				SE
-
-B4-C2-6A   (hex)		Garmin International
-B4C26A     (base 16)		Garmin International
-				1200 E. 151st St
-				Olathe  KS  66062
-				US
-
-E8-9F-80   (hex)		Belkin International Inc.
-E89F80     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista    90094
-				US
-
-BC-5C-4C   (hex)		ELECOM CO.,LTD.
-BC5C4C     (base 16)		ELECOM CO.,LTD.
-				2F Kudan First Place Bldg. 4-1-28
-				Chiyoda-ku  Kudan Kita  102-0073
-				JP
-
-04-AB-18   (hex)		ELECOM CO.,LTD.
-04AB18     (base 16)		ELECOM CO.,LTD.
-				2F Kudan First Place Bldg. 4-1-28
-				Chiyoda-ku  Kudan Kita  102-0073
-				JP
-
-6C-E5-F7   (hex)		New H3C Technologies Co., Ltd
-6CE5F7     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-B8-DD-71   (hex)		zte corporation
-B8DD71     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-78-F8-B8   (hex)		Rako Controls Ltd
-78F8B8     (base 16)		Rako Controls Ltd
-				Knight Road
-				Rochester  Kent  ME2 2AH
-				GB
-
-00-16-12   (hex)		Otsuka Electronics Co., Ltd.
-001612     (base 16)		Otsuka Electronics Co., Ltd.
-				1-10 Sasagaoka, Minakuchi
-				kouka  shiga  528-0061
-				JP
-
-A4-51-29   (hex)		XAG
-A45129     (base 16)		XAG
-				Block C, 115 Gaopu Road
-				Guangzhou    510663
-				CN
-
-5C-02-72   (hex)		Silicon Laboratories
-5C0272     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-FC-4A-E9   (hex)		Castlenet Technology Inc.
-FC4AE9     (base 16)		Castlenet Technology Inc.
-				5F., No. 10, Daye Rd., Beitou Dist.
-				Taipei City    112030
-				TW
-
-04-46-CF   (hex)		Beijing Venustech Cybervision Co.,Ltd.
-0446CF     (base 16)		Beijing Venustech Cybervision Co.,Ltd.
-				Venus Plaza No.21Zhongguancun Software Park,No.8 Dongbeiwang Xilu, Haidian District
-				Beijing  Beijing  100193
-				CN
-
-CC-87-4A   (hex)		Nokia
-CC874A     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-07-8E   (hex)		Garz & Fricke GmbH
-00078E     (base 16)		Garz & Fricke GmbH
-				Schlachthofstrasse 20
-				Hamburg  Hamburg  21079
-				DE
-
-B4-36-D1   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-B436D1     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-61-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-006151     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-76-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC76C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-DC-77-4C   (hex)		Cisco Systems, Inc
-DC774C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-44-41   (hex)		Remote Solution
-204441     (base 16)		Remote Solution
-				71, Gunpo Cheom Dan San eop 2-ro
-				Gunpo-si  Gyeonggi-do  15880
-				KR
-
-B8-5F-98   (hex)		Amazon Technologies Inc.
-B85F98     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-A0-85-FC   (hex)		Microsoft Corporation
-A085FC     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-C4-98-86   (hex)		Qorvo International Pte. Ltd.
-C49886     (base 16)		Qorvo International Pte. Ltd.
-				1 Changi Business Park Avenue 1
-				#04-01    486058
-				SG
-
-94-FF-61   (hex)		China Mobile Group Device Co.,Ltd.
-94FF61     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-10-19-65   (hex)		New H3C Technologies Co., Ltd
-101965     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-24-5A-4C   (hex)		Ubiquiti Networks Inc.
-245A4C     (base 16)		Ubiquiti Networks Inc.
-				685 Third Avenue, 27th Floor
-				New York  NY  10017
-				US
-
-80-F1-F1   (hex)		Tech4home, Lda
-80F1F1     (base 16)		Tech4home, Lda
-				Rua de Fundoes N151
-				Sao Joao da Madeira  Aveiro  3700-121
-				PT
-
-14-A9-D0   (hex)		F5 Networks, Inc.
-14A9D0     (base 16)		F5 Networks, Inc.
-				801 5th Avenue
-				Seattle  WA  98104
-				US
-
-1C-50-1E   (hex)		Sunplus Technology Co., Ltd.
-1C501E     (base 16)		Sunplus Technology Co., Ltd.
-				19, Innovation First Road, Hsinchu Science Park
-				Hsinchu    300
-				TW
-
-40-95-05   (hex)		ACOINFO TECHNOLOGY CO.,LTD
-409505     (base 16)		ACOINFO TECHNOLOGY CO.,LTD
-				Building No.12,Zhongguancun Cuihu Technology Park,Haidian District,Beijing,China
-				Beijing    100095
-				CN
-
-FC-66-CF   (hex)		Apple, Inc.
-FC66CF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-1D-06   (hex)		Apple, Inc.
-AC1D06     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-A8-FC   (hex)		Apple, Inc.
-44A8FC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-10-93   (hex)		Apple, Inc.
-F81093     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-D8-9E   (hex)		Huawei Device Co., Ltd.
-5CD89E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-05-DD   (hex)		Shenzhen Cultraview Digital Technology Co., Ltd
-0405DD     (base 16)		Shenzhen Cultraview Digital Technology Co., Ltd
-				F6,M6,Maqueling, High-tech park, Nanshan district
-				Shenzhen  Guangdong  518057
-				CN
-
-38-97-A4   (hex)		ELECOM CO.,LTD.
-3897A4     (base 16)		ELECOM CO.,LTD.
-				2F Kudan First Place Bldg. 4-1-28
-				Chiyoda-ku  Kudan Kita  102-0073
-				JP
-
-E4-33-AE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-E433AE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-DC-E9-94   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-DCE994     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-38-7A-3C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-387A3C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-8C-CE-4E   (hex)		Espressif Inc.
-8CCE4E     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-B8-2D-28   (hex)		AMPAK Technology,Inc.
-B82D28     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-C4-41-37   (hex)		Quectel Wireless Solutions Co., Ltd.
-C44137     (base 16)		Quectel Wireless Solutions Co., Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-EC-C8-9C   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-ECC89C     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-F0-13-C1   (hex)		Hannto Technology Co., Ltd
-F013C1     (base 16)		Hannto Technology Co., Ltd
-				Rm 704,No.1,Lane 88,Shengrong Road, Free Trade Pilot Area,
-				Shanghai  Shanghai  200120
-				CN
-
-F8-0D-AC   (hex)		HP Inc.
-F80DAC     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-88-DA-1A   (hex)		Redpine Signals, Inc.
-88DA1A     (base 16)		Redpine Signals, Inc.
-				Plot 87, Sagar Society 
-				Hyderabad  AP  500034
-				IN
-
-40-B5-C1   (hex)		Cisco Systems, Inc
-40B5C1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E4-47-91   (hex)		Iris ID Systems, Inc.
-E44791     (base 16)		Iris ID Systems, Inc.
-				8 Clarke Drive
-				Cranbury    08512
-				US
-
-00-60-65   (hex)		B&R Industrial Automation GmbH 
-006065     (base 16)		B&R Industrial Automation GmbH 
-				B&R Straße 1
-				Eggelsberg    5142
-				AT
-
-84-9D-C2   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
-849DC2     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
-				9th Floor, No. 5 Building, 2145 Jinshajiang Rd., Putuo District
-				Shanghai    200333
-				CN
-
-18-45-16   (hex)		Texas Instruments
-184516     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D0-2E-AB   (hex)		Texas Instruments
-D02EAB     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-84-54-DF   (hex)		Huawei Device Co., Ltd.
-8454DF     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F0-F7-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F0F7E7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-8C-55-BB   (hex)		Songwoo Information & Technology Co., Ltd
-8C55BB     (base 16)		Songwoo Information & Technology Co., Ltd
-				24-9, Jinju-daero 404beon-gil, Jinju-si, Gyeongsangnam-do, Korea 
-				Jinju  Gyeongsangnam-do  52826
-				KR
-
-7C-8F-DE   (hex)		DWnet Technologies(Suzhou) Corporation
-7C8FDE     (base 16)		DWnet Technologies(Suzhou) Corporation
-				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
-				Suzhou    21500
-				CN
-
-98-F1-81   (hex)		New H3C Technologies Co., Ltd
-98F181     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-90-80-8F   (hex)		Huawei Device Co., Ltd.
-90808F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-40-A9-CF   (hex)		Amazon Technologies Inc.
-40A9CF     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-58-95-D8   (hex)		IEEE Registration Authority
-5895D8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-08-38-E6   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-0838E6     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-E8-C2-DD   (hex)		Infinix mobility limited
-E8C2DD     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-48-D8-90   (hex)		FN-LINK TECHNOLOGY LIMITED
-48D890     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-78-1F-11   (hex)		RAB Lighting
-781F11     (base 16)		RAB Lighting
-				Northvale (NJ) 141 Legrand  Ave. Northvale, NJ 07647
-				 Northvale  NJ  07647
-				US
-
-F8-B9-5A   (hex)		LG Innotek
-F8B95A     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-C4-1C-9C   (hex)		JiQiDao
-C41C9C     (base 16)		JiQiDao
-				No.19, SuYuan Avenue, Jiangning District
-				NanJing  Jiangsu  210000
-				CN
-
-D4-4F-67   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D44F67     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-FF-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B4FF98     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-71-27   (hex)		Silicon Laboratories
-847127     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-00-26-4E   (hex)		r2p GmbH
-00264E     (base 16)		r2p GmbH
-				Norderhofenden 12-13
-				Flensburg    24937
-				DE
-
-B0-BB-E5   (hex)		Sagemcom Broadband SAS
-B0BBE5     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-90-B4-DD   (hex)		Private
-90B4DD     (base 16)		Private
-
-C4-18-E9   (hex)		Samsung Electronics Co.,Ltd
-C418E9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-E5-7F   (hex)		Samsung Electronics Co.,Ltd
-1CE57F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-C5-3C   (hex)		Cisco Systems, Inc
-B0C53C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-EC-CE-13   (hex)		Cisco Systems, Inc
-ECCE13     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-10-71-00   (hex)		Huawei Device Co., Ltd.
-107100     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-8C-FD-DE   (hex)		Sagemcom Broadband SAS
-8CFDDE     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-A4-68-BC   (hex)		Oakley Inc.
-A468BC     (base 16)		Oakley Inc.
-				1 Icon
-				Foothill Ranch  CA  92610
-				US
-
-60-7E-A4   (hex)		Shanghai Imilab Technology Co.Ltd
-607EA4     (base 16)		Shanghai Imilab Technology Co.Ltd
-				29F, A Tower, New Caohejing International Business Center, Guiping Road, Xuhui District
-				Shanghai  Shanghai  200000
-				CN
-
-78-95-EB   (hex)		ITEL MOBILE LIMITED
-7895EB     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-1C-9F-4E   (hex)		COOSEA GROUP (HK) COMPANY LIMITED
-1C9F4E     (base 16)		COOSEA GROUP (HK) COMPANY LIMITED
-				UNIT 5-6 16/F MULTIFIELD PLAZA 3-7A PRAT AVENUE TSIMSHATSUI
-				KL    999077
-				HK
-
-14-AB-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14AB02     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-5B-D5   (hex)		ARRIS Group, Inc.
-BC5BD5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-08-55-31   (hex)		Routerboard.com
-085531     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-3C-61-05   (hex)		Espressif Inc.
-3C6105     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-24-06-AA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-2406AA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-84-30-95   (hex)		Hon Hai Precision IND.CO.,LTD
-843095     (base 16)		Hon Hai Precision IND.CO.,LTD
-				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
-				TAIPEI  TAIWAN  33859
-				CN
-
-08-65-F0   (hex)		JM Zengge Co., Ltd
-0865F0     (base 16)		JM Zengge Co., Ltd
-				5/F Torch building, Jinou Road#288, Jianghai District
-				Jiangmen  Guangdong  529080
-				CN
-
-AC-47-1B   (hex)		Huawei Device Co., Ltd.
-AC471B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-31-92   (hex)		TP-Link Corporation Limited
-003192     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-A4-CC-B9   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-A4CCB9     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-90-FF-D6   (hex)		Honor Device Co., Ltd.
-90FFD6     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-6C-B8-81   (hex)		zte corporation
-6CB881     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-98-9A-B9   (hex)		zte corporation
-989AB9     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-8A-55   (hex)		Huawei Device Co., Ltd.
-008A55     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-A2-8A   (hex)		Huawei Device Co., Ltd.
-64A28A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B4-56-E3   (hex)		Apple, Inc.
-B456E3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-20-B8   (hex)		Apple, Inc.
-4C20B8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-88-E6   (hex)		Apple, Inc.
-1488E6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-0F-9A   (hex)		D-Link International
-BC0F9A     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-94-7B-BE   (hex)		Ubicquia LLC
-947BBE     (base 16)		Ubicquia LLC
-				BoA Building–Suite 1750, 401 E. Las Olas Boulevard
-				Fort Lauderdale  FL  33301
-				US
-
-24-64-9F   (hex)		Huawei Device Co., Ltd.
-24649F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-0C-17-73   (hex)		Huawei Device Co., Ltd.
-0C1773     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E8-1E-92   (hex)		Huawei Device Co., Ltd.
-E81E92     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-88-8E-68   (hex)		Huawei Device Co., Ltd.
-888E68     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-80-74-84   (hex)		ALL Winner (Hong Kong) Limited
-807484     (base 16)		ALL Winner (Hong Kong) Limited
-				Unit No.1301,13F,Sunbeam Plaza,1155 Canton Road,Mongkok,Kowloon,Hong Kong
-				Hong Kong    999077
-				CN
-
-04-98-F3   (hex)		ALPSALPINE CO,.LTD
-0498F3     (base 16)		ALPSALPINE CO,.LTD
-				6-1 NISHIDA
-				KAKUDA  MIYAGI PREF  9876-8501
-				JP
-
-64-D4-BD   (hex)		ALPSALPINE CO,.LTD
-64D4BD     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				KAKUDA-CITY  MIYAGI-PREF  981-1595
-				JP
-
-34-C7-31   (hex)		ALPSALPINE CO,.LTD
-34C731     (base 16)		ALPSALPINE CO,.LTD
-				6-3-36 Furukawanakazato,
-				Osaki  Miyagi-pref  989-6181
-				JP
-
-00-06-F5   (hex)		ALPSALPINE CO,.LTD
-0006F5     (base 16)		ALPSALPINE CO,.LTD
-				6-3-36 Furukawanakazato,
-				Osaki  Miyagi-pref  989-6181
-				JP
-
-00-07-04   (hex)		ALPSALPINE CO,.LTD
-000704     (base 16)		ALPSALPINE CO,.LTD
-				6-3-36 Furukawanakazato,
-				Osaki  Miyagi-pref  989-6181
-				JP
-
-00-06-F7   (hex)		ALPSALPINE CO,.LTD
-0006F7     (base 16)		ALPSALPINE CO,.LTD
-				6-3-36 Furukawanakazato,
-				Osaki  Miyagi-pref  989-6181
-				JP
-
-88-23-8C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-88238C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-20-FF-36   (hex)		IFLYTEK CO.,LTD.
-20FF36     (base 16)		IFLYTEK CO.,LTD.
-				National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
-				Hefei  An hui  230088
-				CN
-
-BC-42-8C   (hex)		ALPSALPINE CO,.LTD
-BC428C     (base 16)		ALPSALPINE CO,.LTD
-				nishida  6-1 
-				Kakuda-City  Miyagi-Pref  981-1595
-				JP
-
-74-95-EC   (hex)		ALPSALPINE CO,.LTD
-7495EC     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				Kakuda  Miyagi-Pref  981-1595
-				JP
-
-98-ED-7E   (hex)		eero inc.
-98ED7E     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-8C-AE-49   (hex)		IEEE Registration Authority
-8CAE49     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-21-4F   (hex)		ALPSALPINE CO,.LTD
-00214F     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi,
-				Soma-city,  Fukushima-pref.,  976-8501
-				JP
-
-78-CF-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-78CF2F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-3B-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A83B5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-EE-7B   (hex)		Roku, Inc
-B0EE7B     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-D8-31-34   (hex)		Roku, Inc
-D83134     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-64-05-E4   (hex)		ALPSALPINE CO .,LTD
-6405E4     (base 16)		ALPSALPINE CO .,LTD
-				nishida 6-1
-				kakuda-City  Miyagi-Pref  981-1595
-				JP
-
-10-59-32   (hex)		Roku, Inc
-105932     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-A8-CC-6F   (hex)		HMD Global Oy
-A8CC6F     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-5C-6F-69   (hex)		Broadcom Limited
-5C6F69     (base 16)		Broadcom Limited
-				15191 Alton Parkway
-				Irvine  CA  92618
-				US
-
-D0-12-CB   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-D012CB     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-FC-44-82   (hex)		Intel Corporate
-FC4482     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-D8-F8-83   (hex)		Intel Corporate
-D8F883     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E8-84-A5   (hex)		Intel Corporate
-E884A5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E8-F4-08   (hex)		Intel Corporate
-E8F408     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-74-8B-29   (hex)		Micobiomed
-748B29     (base 16)		Micobiomed
-				54 Changeop-ro
-				54 Changeop-ro  Gyeonggi-do  13449
-				KR
-
-00-25-50   (hex)		Riverbed Technology, Inc.
-002550     (base 16)		Riverbed Technology, Inc.
-				680 Folsom St
-				San Francisco  CA  94107
-				US
-
-58-B0-FE   (hex)		Team EPS GmbH
-58B0FE     (base 16)		Team EPS GmbH
-				Am Herdicksbach 2 - Halle 9
-				Waltrop    45731
-				DE
-
-14-3F-A6   (hex)		Sony Home Entertainment&Sound Products Inc
-143FA6     (base 16)		Sony Home Entertainment&Sound Products Inc
-				Sony City Osaki 2-10-1 Osaki Shinagawa-ku
-				Tokyo  Japan  141-8610
-				JP
-
-F0-FE-E7   (hex)		Huawei Device Co., Ltd.
-F0FEE7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-21-1D   (hex)		Huawei Device Co., Ltd.
-54211D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-49-5D   (hex)		Huawei Device Co., Ltd.
-04495D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-44-D4-53   (hex)		Sagemcom Broadband SAS
-44D453     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-DC-A1-20   (hex)		Nokia
-DCA120     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-50-52-3B   (hex)		Nokia
-50523B     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-DC-CD-74   (hex)		Japan E.M.Solutions Co., Ltd.
-DCCD74     (base 16)		Japan E.M.Solutions Co., Ltd.
-				35 Saho
-				Kato    673-1447
-				JP
-
-A0-3B-01   (hex)		Kyung In Electronics
-A03B01     (base 16)		Kyung In Electronics
-				#1411, Byucksan Digital Valley 2, 184, Gasan Digital2-ro, Geumcheon-gu
-				 Seoul    08501
-				KR
-
-18-18-8B   (hex)		FUJITSU CONNECTED TECHNOLOGIES LIMITED
-18188B     (base 16)		FUJITSU CONNECTED TECHNOLOGIES LIMITED
-				Sanki Yamato Building, 7-10-1 Chuorinkan
-				Yamato  Kanagawa  242-8588
-				JP
-
-14-5E-69   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-145E69     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-48-4C-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-484C29     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-D4-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4D438     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-28-0B   (hex)		Honor Device Co., Ltd.
-C0280B     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-9C-EA-97   (hex)		Honor Device Co., Ltd.
-9CEA97     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-EC-0D-E4   (hex)		Amazon Technologies Inc.
-EC0DE4     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-0C-96-CD   (hex)		MERCURY CORPORATION
-0C96CD     (base 16)		MERCURY CORPORATION
-				90, Gajaeul-ro, Seo-gu
-				INCHEON    22830
-				KR
-
-E8-D2-FF   (hex)		Sagemcom Broadband SAS
-E8D2FF     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-C4-E2-87   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4E287     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-B3-01   (hex)		Intel Corporate
-F4B301     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-5C-DE-34   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-5CDE34     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-E8-A0-CD   (hex)		Nintendo Co.,Ltd
-E8A0CD     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-A0-A3-F0   (hex)		D-Link International
-A0A3F0     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-84-65-69   (hex)		New H3C Technologies Co., Ltd
-846569     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-34-F7-16   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-34F716     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-9C-82-3F   (hex)		Huawei Device Co., Ltd.
-9C823F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-F6-07   (hex)		Huawei Device Co., Ltd.
-54F607     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-68-78-48   (hex)		WESTUNITIS CO., LTD.
-687848     (base 16)		WESTUNITIS CO., LTD.
-				29F Grand Front Osaka Tower-A, 4-20, Ofukacho,
-				Osaka  Kita-ku  530-0011
-				JP
-
-08-FF-24   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-08FF24     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-50-55-8D   (hex)		China Mobile IOT Company Limited
-50558D     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-64-26-56   (hex)		Shenzhen Fanweitai Technology Service Co.,Ltd
-642656     (base 16)		Shenzhen Fanweitai Technology Service Co.,Ltd
-				Room 408, 4 / F, Jinqi Zhigu Building, 1 Tangling Road, Nanshan District, Shenzhen
-				 Shenzhen    518000
-				CN
-
-F0-25-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F0258E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-74-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C746F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-E0-03   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-64E003     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-18-CE-94   (hex)		Samsung Electronics Co.,Ltd
-18CE94     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-78-37-16   (hex)		Samsung Electronics Co.,Ltd
-783716     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-28-1B-04   (hex)		Zalliant LLC
-281B04     (base 16)		Zalliant LLC
-				425 Truax Road
-				Amsterdam  NY  12010
-				US
-
-7C-50-79   (hex)		Intel Corporate
-7C5079     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-80-38-FB   (hex)		Intel Corporate
-8038FB     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-08-B4-B1   (hex)		Google, Inc.
-08B4B1     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-34-58-7C   (hex)		MIRAE INFORMATION TECHNOLOGY CO., LTD.
-34587C     (base 16)		MIRAE INFORMATION TECHNOLOGY CO., LTD.
-				GYEONGGI-DO
-				SEONGNAM-SI  JUNGWON-GU  13376
-				KR
-
-AC-82-47   (hex)		Intel Corporate
-AC8247     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-74-9A-C0   (hex)		Cachengo, Inc.
-749AC0     (base 16)		Cachengo, Inc.
-				9575 Hwy 22
-				Huntingdon  TN  38344
-				US
-
-A4-5E-5A   (hex)		ACTIVIO Inc.
-A45E5A     (base 16)		ACTIVIO Inc.
-				Takeuchi Lorie Bldg. Room 503, 1-34-12, Takadanobaba
-				Shinjuku-ku  Tokyo  1690075
-				JP
-
-5C-56-A4   (hex)		Wanan Hongsheng Electronic Co.Ltd
-5C56A4     (base 16)		Wanan Hongsheng Electronic Co.Ltd
-				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
-				Wanan  China/jiangxi  343800
-				CN
-
-B4-85-E1   (hex)		Apple, Inc.
-B485E1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-19-F8   (hex)		Apple, Inc.
-0C19F8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-1F-C6   (hex)		Apple, Inc.
-501FC6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-9B-C6   (hex)		Huawei Device Co., Ltd.
-3C9BC6     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-09-10   (hex)		Apple, Inc.
-540910     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-FC-28   (hex)		Apple, Inc.
-9CFC28     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-69-FA   (hex)		Apple, Inc.
-CC69FA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-CE-E9   (hex)		Apple, Inc.
-10CEE9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-8D-DB   (hex)		Cisco Meraki
-0C8DDB     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-CC-03-D9   (hex)		Cisco Meraki
-CC03D9     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-00-36-BE   (hex)		Northwest Towers
-0036BE     (base 16)		Northwest Towers
-				12119 NE 99th St, Suite 2000
-				Vancouver  WA  98682
-				US
-
-A8-77-E5   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-A877E5     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-10-A4-DA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-10A4DA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-38-20-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-382028     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-77-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E47727     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-51-07   (hex)		Intel Corporate
-105107     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-AC-74-C4   (hex)		Maytronics Ltd.
-AC74C4     (base 16)		Maytronics Ltd.
-				Kibbutz Yizrael
-				Kibbutz Yizrael    1935000
-				IL
-
-84-D6-08   (hex)		Wingtech Mobile Communications Co., Ltd.
-84D608     (base 16)		Wingtech Mobile Communications Co., Ltd.
-				No.777,Yazhong Road,Nanhu District,
-				Jiaxing  Zhejiang  314006
-				CN
-
-34-68-93   (hex)		Tecnovideo Srl
-346893     (base 16)		Tecnovideo Srl
-				Via A. De Gasperi, 3
-				Villaverla  Vicenza  36030
-				IT
-
-3C-7A-AA   (hex)		China Dragon Technology Limited
-3C7AAA     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-6C-47-60   (hex)		Sunitec Enterprise Co.,Ltd
-6C4760     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-18-32-19   (hex)		EM Microelectronic
-183219     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-28-D3-EA   (hex)		Huawei Device Co., Ltd.
-28D3EA     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A8-F2-66   (hex)		Huawei Device Co., Ltd.
-A8F266     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-84-26-7A   (hex)		GUANGDONG TAIDE ZHILIAN TECHNOLOGY CO.,LTD
-84267A     (base 16)		GUANGDONG TAIDE ZHILIAN TECHNOLOGY CO.,LTD
-				Taide Technology Park,Jinfenghuang Industrial District, Fenggang Town,
-				Dongguan  GUANGDONG  523000 
-				CN
-
-D8-EC-5E   (hex)		Belkin International Inc.
-D8EC5E     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista    90094
-				US
-
-84-FD-27   (hex)		Silicon Laboratories
-84FD27     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin    78701
-				US
-
-CC-9C-3E   (hex)		Cisco Meraki
-CC9C3E     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-48-29-E4   (hex)		   ZAO NPK Rotek
-4829E4     (base 16)		   ZAO NPK Rotek
-				Prospekt Mira
-				Moscow    129223
-				RU
-
-FC-A9-DC   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-FCA9DC     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-FC-58-4A   (hex)		xiamenshi c-chip technology co., ltd
-FC584A     (base 16)		xiamenshi c-chip technology co., ltd
-				Baoyuan Road
-				Shenzhen City  Guangdong Province  518101
-				CN
-
-78-65-3B   (hex)		Shaoxing Ourten Electronics Co., Ltd.
-78653B     (base 16)		Shaoxing Ourten Electronics Co., Ltd.
-				3rd Floor # 7, No. 1732 Yanhua industrial park West Renmin Road,Shangyu
-				Shaoxing  Zhejiang  312000
-				CN
-
-E0-E6-56   (hex)		Nethesis  srl
-E0E656     (base 16)		Nethesis  srl
-				strada degli olmi 12
-				Pesaro  Pesaro e Urbino  61122
-				IT
-
-90-23-B4   (hex)		New H3C Technologies Co., Ltd
-9023B4     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-88-2A-5E   (hex)		New H3C Technologies Co., Ltd
-882A5E     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-84-1E-A3   (hex)		Sagemcom Broadband SAS
-841EA3     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-F4-02-23   (hex)		PAX Computer Technology(Shenzhen) Ltd.
-F40223     (base 16)		PAX Computer Technology(Shenzhen) Ltd.
-				4/F, No.3 Building, Software Park, Second Central Science-Tech Road, High-Tech
-				Shenzhen  GuangDong  518057
-				CN
-
-64-6E-E0   (hex)		Intel Corporate
-646EE0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-04-56-E5   (hex)		Intel Corporate
-0456E5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-08-10-86   (hex)		NEC Platforms, Ltd.
-081086     (base 16)		NEC Platforms, Ltd.
-				2-3 Kandatsukasamachi
-				Chiyodaku  Tokyo  101-8532
-				JP
-
-64-79-F0   (hex)		Intel Corporate
-6479F0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-1C-D1-E0   (hex)		Cisco Systems, Inc
-1CD1E0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-45-6B   (hex)		Huawei Device Co., Ltd.
-24456B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-48-38-71   (hex)		Huawei Device Co., Ltd.
-483871     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-44-BD-DE   (hex)		BHTC GmbH
-44BDDE     (base 16)		BHTC GmbH
-				Hansastrasse 40
-				Lippstadt    59557
-				DE
-
-8C-2A-8E   (hex)		DongGuan Ramaxel Memory Technology
-8C2A8E     (base 16)		DongGuan Ramaxel Memory Technology
-				No.32, Industrial East Road,Innovation Park, High-tech Industrial Development Zone, Songshan Lake, Dongguan City, Guangdong Province,China
-				DongGuan  Guangdong  523808
-				CN
-
-40-44-FD   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-4044FD     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-E8-FD-35   (hex)		Huawei Device Co., Ltd.
-E8FD35     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-EC-C5-D2   (hex)		Huawei Device Co., Ltd.
-ECC5D2     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B4-60-8C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-B4608C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-B8-14-DB   (hex)		OHSUNG
-B814DB     (base 16)		OHSUNG
-				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
-				GUMI  GYEONG BUK  730-030
-				KR
-
-80-07-1B   (hex)		VSOLUTION TELECOMMUNICATION TECHNOLOGY CO.,LTD.
-80071B     (base 16)		VSOLUTION TELECOMMUNICATION TECHNOLOGY CO.,LTD.
-				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
-				Guangzhou  Guangdong  510663
-				CN
-
-FC-13-F0   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
-FC13F0     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
-				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
-				Nanjing  Jiangsu  211800
-				CN
-
-1C-6E-E6   (hex)		NHNETWORKS
-1C6EE6     (base 16)		NHNETWORKS
-				54,Chemdanyeonsin-ro 30beon-gil,Buk-gu
-				Gwangju    61080
-				KR
-
-08-F6-06   (hex)		zte corporation
-08F606     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E8-9E-0C   (hex)		MAX8USA DISTRIBUTORS INC.
-E89E0C     (base 16)		MAX8USA DISTRIBUTORS INC.
-				4757 NW 72ND AVENUE
-				MIAMI  FL  33166
-				US
-
-FC-9C-98   (hex)		Arlo Technology
-FC9C98     (base 16)		Arlo Technology
-				3030 Orchard Parkway
-				San Jose  CA  95134
-				US
-
-A0-70-B7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A070B7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-B5-54   (hex)		Huawei Device Co., Ltd.
-78B554     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-68-9E-6A   (hex)		Huawei Device Co., Ltd.
-689E6A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-28-2B-96   (hex)		Huawei Device Co., Ltd.
-282B96     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-CC-68-B6   (hex)		TP-Link Corporation Limited
-CC68B6     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-64-64-4A   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-64644A     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-A4-39-B6   (hex)		SHENZHEN PEIZHE MICROELECTRONICS CO .LTD
-A439B6     (base 16)		SHENZHEN PEIZHE MICROELECTRONICS CO .LTD
-				1110 Nanshan Street, Nanshan District, Shenzhen, China Petroleum Building 2012
-				Shenzhen    518000
-				CN
-
-F4-FB-B8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4FBB8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-33-31   (hex)		Texas Instruments
-CC3331     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-2C-B8-ED   (hex)		SonicWall
-2CB8ED     (base 16)		SonicWall
-				1033 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-C8-9B-AD   (hex)		Honor Device Co., Ltd.
-C89BAD     (base 16)		Honor Device Co., Ltd.
-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District,Shenzhen, Guangdong 518040, People's Republic of China
-				Shenzhen    518040
-				CN
-
-C4-5B-BE   (hex)		Espressif Inc.
-C45BBE     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-88-90-09   (hex)		Juniper Networks
-889009     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-90-B6-7A   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-90B67A     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-7C-D9-F4   (hex)		UAB Teltonika Telematics
-7CD9F4     (base 16)		UAB Teltonika Telematics
-				Saltoniskiu  str. 9B-1
-				Vilnius    LT-08105
-				LT
-
-C8-C6-4A   (hex)		Flextronics Tech.(Ind) Pvt Ltd
-C8C64A     (base 16)		Flextronics Tech.(Ind) Pvt Ltd
-				365, Benjamin Road
-				Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646
-				IN
-
-FC-4E-A4   (hex)		Apple, Inc.
-FC4EA4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-BE-EC   (hex)		Apple, Inc.
-F4BEEC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-FF-4D   (hex)		Espressif Inc.
-BCFF4D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-54-E6-1B   (hex)		Apple, Inc.
-54E61B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-9A-C1   (hex)		Nokia
-D89AC1     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-F0-B1-1D   (hex)		Nokia
-F0B11D     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-04-7D   (hex)		Motorola Solutions Inc.
-00047D     (base 16)		Motorola Solutions Inc.
-				500 W Monroe Street, Ste 4400 
-				Chicago  IL  60661-3781
-				US
-
-A4-D7-95   (hex)		Wingtech Mobile Communications Co.,Ltd
-A4D795     (base 16)		Wingtech Mobile Communications Co.,Ltd
-				No.777,Yazhong Road,Nanhu District
-				Jiaxing  Zhejiang  314001
-				CN
-
-84-AB-26   (hex)		Tiinlab Corporation
-84AB26     (base 16)		Tiinlab Corporation
-				35F,Tower A,Tanglang City,3333 Liuxian Avenue,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-F8-97-53   (hex)		Huawei Device Co., Ltd.
-F89753     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-58-94-AE   (hex)		Huawei Device Co., Ltd.
-5894AE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B0-3A-CE   (hex)		Huawei Device Co., Ltd.
-B03ACE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-34-AB-95   (hex)		Espressif Inc.
-34AB95     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-C4-91-CF   (hex)		Luxul 
-C491CF     (base 16)		Luxul 
-				12884 Frontrunner Blvd, Suite 201
-				Draper  UT  84020
-				US
-
-58-35-6B   (hex)		TECNO MOBILE LIMITED
-58356B     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-F8-4C-DA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F84CDA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-93-4A   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-A8934A     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-A4-05-6E   (hex)		Tiinlab Corporation
-A4056E     (base 16)		Tiinlab Corporation
-				35F,Tower A,Tanglang City,3333 Liuxian Avenue,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-8C-19-B5   (hex)		Arcadyan Corporation
-8C19B5     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-C8-7B-23   (hex)		Bose Corporation
-C87B23     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-78-D9-E9   (hex)		MOMENTUM IOT
-78D9E9     (base 16)		MOMENTUM IOT
-				100 W. BROADWAY, STE. 500
-				LONG BEACH  CA  90802
-				US
-
-2C-08-23   (hex)		Sercomm France Sarl
-2C0823     (base 16)		Sercomm France Sarl
-				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
-				Moulineaux    92370
-				FR
-
-9C-1C-37   (hex)		AltoBeam (China) Inc.
-9C1C37     (base 16)		AltoBeam (China) Inc.
-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
-				Beijing  Beijing  100083
-				CN
-
-8C-E7-48   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-8CE748     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-98-42-65   (hex)		Sagemcom Broadband SAS
-984265     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-B8-A3-77   (hex)		Cisco Systems, Inc
-B8A377     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E4-4E-2D   (hex)		Cisco Systems, Inc
-E44E2D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-CC-34   (hex)		Juniper Networks
-00CC34     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-1C-D1-07   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-1CD107     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-10-3D-1C   (hex)		Intel Corporate
-103D1C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-38-87-D5   (hex)		Intel Corporate
-3887D5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-80-65-59   (hex)		EM Microelectronic
-806559     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-D0-47-C1   (hex)		Elma Electronic AG
-D047C1     (base 16)		Elma Electronic AG
-				Hofstrasse 93
-				Wetzikon  Zuerich  8620
-				CH
-
-C0-CC-42   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-C0CC42     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-C4-23-60   (hex)		Intel Corporate
-C42360     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-08-01-0F   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-08010F     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-18-52-07   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-185207     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-E0-C6-3C   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-E0C63C     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-DC-21-5C   (hex)		Intel Corporate
-DC215C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-BC-EC-A0   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-BCECA0     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU  215300
-				CN
-
-F8-BA-E6   (hex)		Nokia
-F8BAE6     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-58-FD-5D   (hex)		Hangzhou Xinyun technology Co., Ltd.
-58FD5D     (base 16)		Hangzhou Xinyun technology Co., Ltd.
-				Room 803, Block 8, Singapore Science & Technology Park
-				Hangzhou  Zhejiang  310018
-				CN
-
-24-A7-99   (hex)		Huawei Device Co., Ltd.
-24A799     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-7C-3E-74   (hex)		Huawei Device Co., Ltd.
-7C3E74     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-14-89-19   (hex)		2bps
-148919     (base 16)		2bps
-				#1502 , T-dong, Pungrim I-want, 170, Seohyeon-ro
-				Seongnam-si  Gyeonggi-do  13590
-				KR
-
-4C-71-67   (hex)		PoLabs d.o.o.
-4C7167     (base 16)		PoLabs d.o.o.
-				Volavlje 30
-				Ljubljana    1000
-				SI
-
-04-71-53   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-047153     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-48-E7-DA   (hex)		AzureWave Technology Inc.
-48E7DA     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-40-C4-8C   (hex)		N-iTUS CO.,LTD.
-40C48C     (base 16)		N-iTUS CO.,LTD.
-				NiTUS 85, Deokcheon-ro
-				Anyang-si  Gyeonggi-do, Korea  14086
-				KR
-
-48-22-18   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
-482218     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
-				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
-				Shenzhen  Nanshan District  518000
-				CN
-
-30-A1-76   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-30A176     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E4-0C-FD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-E40CFD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-58-D6-97   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-58D697     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-54-37-BB   (hex)		Taicang T&W Electronics
-5437BB     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-60-F8-F2   (hex)		Synaptec
-60F8F2     (base 16)		Synaptec
-				204 George Street
-				Glasgow    G1 1XW
-				GB
-
-AC-74-B1   (hex)		Intel Corporate
-AC74B1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-1C-3C-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C3CD4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-E4-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4E451     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-26-EF   (hex)		Aruba, a Hewlett Packard Enterprise Company
-6026EF     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-F4-60-77   (hex)		Texas Instruments
-F46077     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-24-9A-C8   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-249AC8     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-C0-3C-04   (hex)		Sagemcom Broadband SAS
-C03C04     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-A4-D7-3C   (hex)		Seiko Epson Corporation
-A4D73C     (base 16)		Seiko Epson Corporation
-				2070 Kotobuki Koaka
-				Matsumoto-shi  Nagano-ken  399-8702
-				JP
-
-6C-10-8B   (hex)		WeLink Communications
-6C108B     (base 16)		WeLink Communications
-				4186 N Red Maple Court
-				Lehi  UT  84043
-				US
-
-F8-8E-A1   (hex)		Edgecore Networks Corporation
-F88EA1     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-7C-85-30   (hex)		Nokia
-7C8530     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-F4-63-E7   (hex)		Nanjing Maxon O.E. Tech. Co., LTD
-F463E7     (base 16)		Nanjing Maxon O.E. Tech. Co., LTD
-				6/F, Building A3, Zidong International Creative Park, Zidong Road, Qixia District, Nanjing
-				NAN JING  JIANG SU  210000
-				CN
-
-24-28-FD   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-2428FD     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-88-AE-DD   (hex)		EliteGroup Computer Systems Co., LTD
-88AEDD     (base 16)		EliteGroup Computer Systems Co., LTD
-				No. 239, Sec. 2, Ti ding Blvd.
-				Taipei City    11493
-				TW
-
-64-D0-2D   (hex)		NEXT GENERATION INTEGRATION LIMITED (NGI)
-64D02D     (base 16)		NEXT GENERATION INTEGRATION LIMITED (NGI)
-				Unit 1102, 11 / F, 29 Austin Road, TSIM SHA TSUI
-				KOWLOON  Hong Kong  999077
-				HK
-
-A0-E7-0B   (hex)		Intel Corporate
-A0E70B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-B0-D8-88   (hex)		Panasonic Corporation Automotive
-B0D888     (base 16)		Panasonic Corporation Automotive
-				5652
-				Matsumoto City  Nagano  399-8730
-				JP
-
-04-EE-EE   (hex)		Laplace System Co., Ltd.
-04EEEE     (base 16)		Laplace System Co., Ltd.
-				1-245 Kyo-machi
-				Fushimi, Kyoto  Kyoto  6128083
-				JP
-
-68-96-6A   (hex)		OHSUNG
-68966A     (base 16)		OHSUNG
-				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
-				GUMI  GYEONG BUK  730-030
-				KR
-
-90-2E-16   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-902E16     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-78-06-C9   (hex)		Huawei Device Co., Ltd.
-7806C9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E8-A6-CA   (hex)		Huawei Device Co., Ltd.
-E8A6CA     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-CC-FA-66   (hex)		Huawei Device Co., Ltd.
-CCFA66     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-7D-22   (hex)		FUJIFILM Business Innovation Corp.
-1C7D22     (base 16)		FUJIFILM Business Innovation Corp.
-				6-1 Minatomirai, Nishi-ku
-				Yokohama  Kanagawa  220-8668
-				JP
-
-34-FE-9E   (hex)		Fujitsu Limited
-34FE9E     (base 16)		Fujitsu Limited
-				4-1-1 Kamikodanaka, Nakahara-ku
-				Kawasaki-shi  Kanagawa  211-8588
-				JP
-
-0C-71-8C   (hex)		TCT mobile ltd
-0C718C     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-E0-30-F9   (hex)		Juniper Networks
-E030F9     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-24-08-5D   (hex)		Continental Aftermarket & Services GmbH
-24085D     (base 16)		Continental Aftermarket & Services GmbH
-				Sodener Strasse 9
-				Schwalbach am Taunus  Hessen  65824
-				DE
-
-34-24-3E   (hex)		zte corporation
-34243E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-45-3B   (hex)		Ruckus Wireless
-38453B     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-78-13-05   (hex)		IEEE Registration Authority
-781305     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-20-54-76   (hex)		Sony Corporation
-205476     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-30-17-C8   (hex)		Sony Corporation
-3017C8     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-6C-23-B9   (hex)		Sony Corporation
-6C23B9     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-6C-0E-0D   (hex)		Sony Corporation
-6C0E0D     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-19-63   (hex)		Sony Corporation
-001963     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-00-16-20   (hex)		Sony Corporation
-001620     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-00-12-EE   (hex)		Sony Corporation
-0012EE     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-D4-38-9C   (hex)		Sony Corporation
-D4389C     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-68-1B-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-681BEF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-23-45   (hex)		Sony Corporation
-002345     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-1F-E4   (hex)		Sony Corporation
-001FE4     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-F4-46-37   (hex)		Intel Corporate
-F44637     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-64-50-D6   (hex)		Liquidtool Systems
-6450D6     (base 16)		Liquidtool Systems
-				Winterseistrasse 22
-				Hasle-Rüegsau  Bern  3415
-				CH
-
-68-76-4F   (hex)		Sony Corporation
-68764F     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-38-A6-59   (hex)		Sagemcom Broadband SAS
-38A659     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-60-61-34   (hex)		Genesis Technical Systems Corp
-606134     (base 16)		Genesis Technical Systems Corp
-				Suite 1720, 510 5th St SW
-				Calgary  Alberta  T2P 3S2
-				CA
-
-A8-48-FA   (hex)		Espressif Inc.
-A848FA     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-50-5D-7A   (hex)		zte corporation
-505D7A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-FC-58-DF   (hex)		Interphone Service
-FC58DF     (base 16)		Interphone Service
-				Inwestorow, 8
-				Mielec  Select a state or province  39-300
-				PL
-
-98-10-82   (hex)		Nsolution Co., Ltd.
-981082     (base 16)		Nsolution Co., Ltd.
-				1001-1, 387, Simin-daero, Dongan-gu
-				Anyang-si  Gyeonggi-do  14057
-				KR
-
-C4-12-34   (hex)		Apple, Inc.
-C41234     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-A6-F6   (hex)		Apple, Inc.
-3CA6F6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-AB-4F   (hex)		Apple, Inc.
-4CAB4F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-58-3C   (hex)		Apple, Inc.
-9C583C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-DC-5F   (hex)		Cofractal, Inc.
-E4DC5F     (base 16)		Cofractal, Inc.
-				209 E Java Dr. #61593
-				Sunnyvale  CA  94089
-				US
-
-50-81-40   (hex)		HP Inc.
-508140     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-CC-89-6C   (hex)		GN Hearing A/S
-CC896C     (base 16)		GN Hearing A/S
-				Lautrupbjerg 7
-				Ballerup    2750
-				DK
-
-48-F3-F3   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
-48F3F3     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
-				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
-				 Beijing    100085
-				CN
-
-D4-73-50   (hex)		DBG Commnunications Technology  Co., Ltd.
-D47350     (base 16)		DBG Commnunications Technology  Co., Ltd.
-				Building A, No. 5 (DBG Factory), Yongda Road, Xiangshui River,West District of Daya Bay
-				Huizhou  Guangdong  516083
-				CN
-
-3C-7A-F0   (hex)		ITEL MOBILE LIMITED
-3C7AF0     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-70-DA-17   (hex)		Austrian Audio GmbH
-70DA17     (base 16)		Austrian Audio GmbH
-				Eitnergasse 15
-				Vienna  Vienna  1230
-				AT
-
-50-41-1C   (hex)		AMPAK Technology,Inc.
-50411C     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-8C-1E-D9   (hex)		Beijing Unigroup Tsingteng Microsystem Co., LTD.
-8C1ED9     (base 16)		Beijing Unigroup Tsingteng Microsystem Co., LTD.
-				06F, West District, block D, Tsinghua Tongfang science and Technology Plaza, 1 Wangzhuang Road, Haidian District,
-				Beijing  Beijing  1000083
-				CN
-
-B0-37-95   (hex)		LG Electronics
-B03795     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-A4-FF-95   (hex)		Nokia
-A4FF95     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-F4-26-79   (hex)		Intel Corporate
-F42679     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-38-61-A5   (hex)		Grabango Co
-3861A5     (base 16)		Grabango Co
-				2000 Allston Way #60
-				Berkeley  CA  94701
-				US
-
-D0-8E-79   (hex)		Dell Inc.
-D08E79     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-78-D3-ED   (hex)		NORMA
-78D3ED     (base 16)		NORMA
-				Achasan-ro 7na-gil, Seongdong-Gu
-				Seoul    04795
-				KR
-
-34-B4-72   (hex)		Espressif Inc.
-34B472     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-F8-0C-58   (hex)		Taicang T&W Electronics
-F80C58     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-FC-19-99   (hex)		Xiaomi Communications Co Ltd
-FC1999     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-24-11-45   (hex)		Xiaomi Communications Co Ltd
-241145     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-50-78-B0   (hex)		Huawei Device Co., Ltd.
-5078B0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E4-07-2B   (hex)		Huawei Device Co., Ltd.
-E4072B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-FC-A8-9B   (hex)		Texas Instruments
-FCA89B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-98-F0-7B   (hex)		Texas Instruments
-98F07B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-24-46-E4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2446E4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-F0-D0   (hex)		SkyBell Technologies Inc.
-68F0D0     (base 16)		SkyBell Technologies Inc.
-				1 Jenner 
-				Irvine  CA  92618
-				US
-
-BC-D7-A5   (hex)		Aruba, a Hewlett Packard Enterprise Company
-BCD7A5     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-4C-F2-02   (hex)		Xiaomi Communications Co Ltd
-4CF202     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-88-46-04   (hex)		Xiaomi Communications Co Ltd
-884604     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-A4-55-90   (hex)		Xiaomi Communications Co Ltd
-A45590     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-08-1C-6E   (hex)		Xiaomi Communications Co Ltd
-081C6E     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-84-AC-16   (hex)		Apple, Inc.
-84AC16     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-BC-87   (hex)		Apple, Inc.
-2CBC87     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-A9-2C   (hex)		IEEE Registration Authority
-44A92C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D8-80-83   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-D88083     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-AC-B9-2F   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-ACB92F     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-18-77-58   (hex)		Audoo Limited (UK)
-187758     (base 16)		Audoo Limited (UK)
-				Unit 23 – Tileyard London, Tileyard Road
-				London  UK  N7 9AH
-				GB
-
-90-E8-68   (hex)		AzureWave Technology Inc.
-90E868     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-4C-50-F1   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4C50F1     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-FC-42-65   (hex)		Zhejiang Tmall Technology Co., Ltd.
-FC4265     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-B4-E4-54   (hex)		Amazon Technologies Inc.
-B4E454     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-0C-43-F9   (hex)		Amazon Technologies Inc.
-0C43F9     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-68-87-C6   (hex)		Cisco Systems, Inc
-6887C6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-80-24-8F   (hex)		Cisco Systems, Inc
-80248F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-94-FB   (hex)		Continental Automotive Systems Inc.
-D494FB     (base 16)		Continental Automotive Systems Inc.
-				21440 W. Lake Cook Rd.
-				Deer Park  IL  60010
-				US
-
-44-D4-54   (hex)		Sagemcom Broadband SAS
-44D454     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-E8-95-26   (hex)		Luxshare Precision Industry CO., LTD.
-E89526     (base 16)		Luxshare Precision Industry CO., LTD.
-				East Jinshang Road, Jinxi Town, Kunshan City
-				Jiangsu    215324
-				CN
-
-C8-C9-A3   (hex)		Espressif Inc.
-C8C9A3     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-E4-3B-C9   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
-E43BC9     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-D4-93-90   (hex)		CLEVO CO.
-D49390     (base 16)		CLEVO CO.
-				NO. 129, XINGDE ROAD
-				New TAIPEI CITY    241
-				TW
-
-BC-06-2D   (hex)		Wacom Co.,Ltd.
-BC062D     (base 16)		Wacom Co.,Ltd.
-				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
-				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
-				JP
-
-10-41-21   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-104121     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-				Av. Buriti, 1900 – Setor B – Distrito Industrial
-				Manaus  Amazonas  69075-000
-				BR
-
-50-E7-A0   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-50E7A0     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-13-98   (hex)		TrafficSim Co.,Ltd
-001398     (base 16)		TrafficSim Co.,Ltd
-				1-19-56 Taiko, Nakamura-ku
-				Nagoya  Aichi prefecture  453-0801
-				JP
-
-50-0A-52   (hex)		Huiwan Technologies Co. Ltd
-500A52     (base 16)		Huiwan Technologies Co. Ltd
-				A603,Wuhan University SZ IER Bldg., 6 Yuexing 2nd Rd., Nanshan Dist., Shenzhen
-				Shenzhen  Guang Dong  518108
-				CN
-
-40-9C-A6   (hex)		Curvalux
-409CA6     (base 16)		Curvalux
-				Electric Works, 3 Concourse Way,  
-				Sheffield    S1 2BJ
-				GB
-
-9C-97-26   (hex)		Technicolor Delivery Technologies Belgium NV
-9C9726     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-30-91-8F   (hex)		Technicolor Delivery Technologies Belgium NV
-30918F     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-E0-B9-E5   (hex)		Technicolor Delivery Technologies Belgium NV
-E0B9E5     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-80-7E-B4   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-807EB4     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-50-4B-9E   (hex)		Huawei Device Co., Ltd.
-504B9E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-7A-AE   (hex)		Huawei Device Co., Ltd.
-047AAE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-3C-93-F4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C93F4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-33-B5   (hex)		IEEE Registration Authority
-6433B5     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-4B-14   (hex)		Espressif Inc.
-8C4B14     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-D4-E8-53   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-D4E853     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-18-E2-15   (hex)		Nokia
-18E215     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-4C-E2-F1   (hex)		Udino srl
-4CE2F1     (base 16)		Udino srl
-				Via Amedeo Avogadro 24
-				Torino    10121
-				IT
-
-B8-8C-29   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-B88C29     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-BC-6A-D1   (hex)		Xiaomi Communications Co Ltd
-BC6AD1     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-84-27-B6   (hex)		China Mobile IOT Company Limited
-8427B6     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-54-44-A3   (hex)		Samsung Electronics Co.,Ltd
-5444A3     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-64-B6-23   (hex)		Schrack Seconet Care Communication GmbH
-64B623     (base 16)		Schrack Seconet Care Communication GmbH
-				Eibesbrunnergasse 18 
-				Vienna    1120
-				AT
-
-08-45-D1   (hex)		Cisco Systems, Inc
-0845D1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-40-CD   (hex)		Synclayer Inc.
-9C40CD     (base 16)		Synclayer Inc.
-				1-20 Himegaoka
-				Kani  Gifu  5090249
-				JP
-
-78-5E-E8   (hex)		IEEE Registration Authority
-785EE8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-CC-BC-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CCBCE3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-9E-84   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-089E84     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-82-D7   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-1082D7     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-30-03-C8   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-3003C8     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-08-8E-DC   (hex)		Apple, Inc.
-088EDC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-50-2E   (hex)		Apple, Inc.
-98502E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-0A-D4   (hex)		Apple, Inc.
-580AD4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-77-F3   (hex)		Apple, Inc.
-A477F3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-4A-28   (hex)		Apple, Inc.
-A84A28     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-BE-1F   (hex)		Apple, Inc.
-D8BE1F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-B7-A8   (hex)		CableFree Networks Limited
-10B7A8     (base 16)		CableFree Networks Limited
-				G6, Magdalen Centre, The Oxford Science Park, Robert Robinson Avenue
-				Oxford  ---  OX4 4GA
-				GB
-
-08-9B-F1   (hex)		eero inc.
-089BF1     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-00-11-14   (hex)		EverFocus Electronics Corp.
-001114     (base 16)		EverFocus Electronics Corp.
-				2F., No.8, Ln. 270, Sec. 3, Beishen Rd.,
-				New Taipei City  Shenkeng Dist.  222
-				TW
-
-D0-3F-27   (hex)		Wyze Labs Inc
-D03F27     (base 16)		Wyze Labs Inc
-				4030 Lake Washington Boulevard NE
-				Kirkland  WA  98033
-				US
-
-50-29-7B   (hex)		China Mobile Group Device Co.,Ltd.
-50297B     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-6C-DD-EF   (hex)		EPCOMM Inc.
-6CDDEF     (base 16)		EPCOMM Inc.
-				31072 San Antonio Street
-				Hayward  CA  94544
-				US
-
-D0-F1-21   (hex)		Xi'an LINKSCI Technology Co., Ltd
-D0F121     (base 16)		Xi'an LINKSCI Technology Co., Ltd
-				C301, block C, main building, ZTE Industrial Park, No.10, Tangyan South Road, Hi-tech Zone
-				Xi'an  Shanxi  710076
-				CN
-
-EC-1C-5D   (hex)		Siemens AG
-EC1C5D     (base 16)		Siemens AG
-				Werner-von-Siemens-Str. 50
-				Amberg    92224
-				DE
-
-78-44-4A   (hex)		Shenzhen Aiwinn information Technology Co., Ltd.
-78444A     (base 16)		Shenzhen Aiwinn information Technology Co., Ltd.
-				Room 1001, 10th floor, Building G3, TCL International E city, Shuguang community, Xili street, Nanshan district,
-				Shenzhen  GuangDong  518000
-				CN
-
-8C-B8-7E   (hex)		Intel Corporate
-8CB87E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-70-1A-B8   (hex)		Intel Corporate
-701AB8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-5C-DF-89   (hex)		Ruckus Wireless
-5CDF89     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-70-B6-4F   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
-70B64F     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
-				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
-				Guangzhou  Guangdong  510663
-				CN
-
-B4-20-5B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B4205B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-18-7A-3B   (hex)		Aruba, a Hewlett Packard Enterprise Company
-187A3B     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-70-B9-BB   (hex)		Shenzhen Hankvision Technology CO.,LTD
-70B9BB     (base 16)		Shenzhen Hankvision Technology CO.,LTD
-				Huolibao Building, Gaoxin North Sixth Road, Nanshan District, Shenzhen
-				Shenzhen    518000
-				CN
-
-A4-C6-9A   (hex)		Samsung Electronics Co.,Ltd
-A4C69A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-F5-20   (hex)		KYOCERA Corporation 
-D0F520     (base 16)		KYOCERA Corporation 
-				30 Hoji
-				Kitami,  Hokkaido  099-1595
-				JP
-
-B8-94-70   (hex)		Calix Inc.
-B89470     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-94-7F-1D   (hex)		Shenzhen Fastrain Technology Co., Ltd.
-947F1D     (base 16)		Shenzhen Fastrain Technology Co., Ltd.
-				No.3 Baolong 4th Rd., Baolong Industrial Area, Longgang District,
-				Shenzhen  GuangDong  518000
-				CN
-
-60-7D-DD   (hex)		Shenzhen Shichuangyi Electronics Co.,Ltd
-607DDD     (base 16)		Shenzhen Shichuangyi Electronics Co.,Ltd
-				East Shangnan Road,Xinqiao Street Bao An District
-				Shenzhen  Guangdong  518101
-				CN
-
-24-0F-9B   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-240F9B     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-E4-29-3D   (hex)		Shenzhen Sy-Fiber Optical Communication Technology.Co.,Ltd
-E4293D     (base 16)		Shenzhen Sy-Fiber Optical Communication Technology.Co.,Ltd
-				11/F,  Manjinghua Yingshuo Commercial Building, Songgang Street, Baoan District
-				Shenzhen City  Guangdong Provicne  518105
-				CN
-
-AC-5E-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC5E14     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-DF-73   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-20DF73     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-12-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48128F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-56-36   (hex)		Huawei Device Co., Ltd.
-9C5636     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-40-CA-63   (hex)		Seongji Industry Company
-40CA63     (base 16)		Seongji Industry Company
-				 54-33, Dongtanhana 1-gil
-				Hwaseong-si  Gyeonggi-do  18423
-				KR
-
-D4-8A-3B   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-D48A3B     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-40-06-D5   (hex)		Cisco Systems, Inc
-4006D5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-22-DE   (hex)		vivo Mobile Communication Co., Ltd.
-A022DE     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-14-DD-9C   (hex)		vivo Mobile Communication Co., Ltd.
-14DD9C     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-2C-48-81   (hex)		vivo Mobile Communication Co., Ltd.
-2C4881     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-94-31-CB   (hex)		vivo Mobile Communication Co., Ltd.
-9431CB     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-20-74-54   (hex)		vivo Mobile Communication Co., Ltd.
-207454     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-BC-22-28   (hex)		D-Link International
-BC2228     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-10-3C-59   (hex)		zte corporation
-103C59     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C4-CA-2B   (hex)		Arista Networks
-C4CA2B     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-00-24-69   (hex)		Fasttel - Smart Doorphones
-002469     (base 16)		Fasttel - Smart Doorphones
-				Klipsenstraat 18A
-				Lokeren    9160
-				BE
-
-B4-3D-08   (hex)		GX International BV
-B43D08     (base 16)		GX International BV
-				Waldfeuchterbaan 124
-				Maria Hoop  Maria Hoop  6105 BP
-				NL
-
-70-89-F5   (hex)		Dongguan Lingjie IOT Co., LTD
-7089F5     (base 16)		Dongguan Lingjie IOT Co., LTD
-				A-708, Zhongke innovation Plaza, Songshan Lake, Dongguan City
-				dongguan  Guangdong  523945
-				CN
-
-88-DC-96   (hex)		EnGenius Technologies, Inc.
-88DC96     (base 16)		EnGenius Technologies, Inc.
-				No. 500, Fusing 3rd Rd., Hwa-Ya Technology Park
-				Kuei-Shan Hsiang  TaoYuan County  333
-				TW
-
-40-B0-A1   (hex)		VALCOM CO.,LTD.
-40B0A1     (base 16)		VALCOM CO.,LTD.
-				7-25 MINOWA 3-CHOME
-				TOYONAKA CITY,OSAKA    560-0035
-				JP
-
-B8-20-8E   (hex)		Panasonic Corporation  Connected Solutions Company
-B8208E     (base 16)		Panasonic Corporation  Connected Solutions Company
-				4-1-62 Minoshima, Hakata-ku
-				Fukuoka-shi  Fukuoka  812-8531
-				JP
-
-90-38-0C   (hex)		Espressif Inc.
-90380C     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-84-7B-57   (hex)		Intel Corporate
-847B57     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-64-CB-E9   (hex)		LG Innotek
-64CBE9     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-9C-75-6E   (hex)		Ajax Systems DMCC
-9C756E     (base 16)		Ajax Systems DMCC
-				Mazaya Business Avenue
-				Dubai    04201
-				AE
-
-F0-6C-73   (hex)		Nokia
-F06C73     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-E8-F9-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8F9D4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-C7-87   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B0C787     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-4F-9B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C4F9B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-21-4A   (hex)		Intel Corporate
-7C214A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-50-84-92   (hex)		Intel Corporate
-508492     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-48-2F-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-482FD7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-D8-1E   (hex)		MirWifi,Joint-Stock Company
-24D81E     (base 16)		MirWifi,Joint-Stock Company
-				Krasnobogatyrskaya st, building 6/1
-				Moscow     107564
-				RU
-
-98-80-BB   (hex)		IEEE Registration Authority
-9880BB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D8-B0-53   (hex)		Xiaomi Communications Co Ltd
-D8B053     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-6C-F7-84   (hex)		Xiaomi Communications Co Ltd
-6CF784     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-04-2B-58   (hex)		Shenzhen Hanzsung Technology Co.,Ltd
-042B58     (base 16)		Shenzhen Hanzsung Technology Co.,Ltd
-				8F,Bldg 3,Guole Technopark,Western Huaning Rd,Dalang,Longhua New District,Shenzhen,China
-				Shenzhen  GuangDong  518109
-				CN
-
-28-C0-1B   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-28C01B     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-B8-12-DA   (hex)		 LVSWITCHES INC.
-B812DA     (base 16)		 LVSWITCHES INC.
-				F1 building,New light source base Luocun town,Nanhai district
-				Foshan  Guangdong  528000
-				CN
-
-A0-D7-F3   (hex)		Samsung Electronics Co.,Ltd
-A0D7F3     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-E8-6D-6E   (hex)		voestalpine Signaling UK Ltd.
-E86D6E     (base 16)		voestalpine Signaling UK Ltd.
-				Unit 1, Fulcrum 4, Solent Way
-				Whiteley  Hampshire  PO15 7FT
-				GB
-
-28-2A-87   (hex)		ITEL MOBILE LIMITED
-282A87     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-A8-B5-7C   (hex)		Roku, Inc
-A8B57C     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-78-C6-BB   (hex)		Analog Devices, Inc.
-78C6BB     (base 16)		Analog Devices, Inc.
-				5635 Jefferson St. NE, Suite A
-				Albuquerque  NM  87109
-				US
-
-24-26-BA   (hex)		Shenzhen Toptel Technology Co., Ltd.
-2426BA     (base 16)		Shenzhen Toptel Technology Co., Ltd.
-				Floor 6th, Building C, Guancheng Low-carbon Industrial Park, Guangming District
-				Shenzhen  GuangDong  518107
-				CN
-
-54-6C-EB   (hex)		Intel Corporate
-546CEB     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-00-93-37   (hex)		Intel Corporate
-009337     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-78-90-A2   (hex)		zte corporation
-7890A2     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-60-22-32   (hex)		Ubiquiti Networks Inc.
-602232     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-AC-BC-D9   (hex)		Cisco Systems, Inc
-ACBCD9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-CE-2A   (hex)		Intel Corporate
-58CE2A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-10-A5-1D   (hex)		Intel Corporate
-10A51D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-08-8E-90   (hex)		Intel Corporate
-088E90     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C0-44-42   (hex)		Apple, Inc.
-C04442     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-68-AA   (hex)		Apple, Inc.
-D468AA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-DD-60   (hex)		Apple, Inc.
-98DD60     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-C3-CC   (hex)		Apple, Inc.
-F8C3CC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-1A-28   (hex)		Mako Networks Ltd
-301A28     (base 16)		Mako Networks Ltd
-				1355 North Maclean Blvd
-				Elgin  IL  60123
-				US
-
-30-5A-99   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-305A99     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-60-4D-E1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-604DE1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-4E-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-704E6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-C6-DD   (hex)		New H3C Technologies Co., Ltd
-70C6DD     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-18-5B-00   (hex)		Nokia
-185B00     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-6C-C4-9F   (hex)		Aruba, a Hewlett Packard Enterprise Company
-6CC49F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-60-3D-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-603D29     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-C4-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-54C480     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-61-DF   (hex)		China Mobile Group Device Co.,Ltd.
-A861DF     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-7C-A6-2A   (hex)		Hewlett Packard Enterprise
-7CA62A     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-1C-45-86   (hex)		Nintendo Co.,Ltd
-1C4586     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-50-7C-6F   (hex)		Intel Corporate
-507C6F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-58-9B-4A   (hex)		DWnet Technologies(Suzhou) Corporation
-589B4A     (base 16)		DWnet Technologies(Suzhou) Corporation
-				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
-				Suzhou    21500
-				CN
-
-5C-83-CD   (hex)		New platforms
-5C83CD     (base 16)		New platforms
-				Warshavskoe shosse, 35 bld 1
-				Moscow    117105
-				RU
-
-38-4B-24   (hex)		SIEMENS AG
-384B24     (base 16)		SIEMENS AG
-				Oestliche Rheinbrückenstraße 50
-				Karlsruhe  Baden-Württemberg  76181
-				DE
-
-F0-AE-66   (hex)		Cosonic Intelligent Technologies Co., Ltd.
-F0AE66     (base 16)		Cosonic Intelligent Technologies Co., Ltd.
-				Room 506, No.1 Building, No.6, South Industrial Road, Songshan Lake National High-tech Industrial Development Zone
-				Dongguan City, Guangdong Province    523808
-				CN
-
-20-80-97   (hex)		Shenzhen OXO Technology limited
-208097     (base 16)		Shenzhen OXO Technology limited
-				Room 1712-2, Building 4, Tian 'an Yungu Industrial Park, Gangtou Community, Bantian Street, Longgang District
-				Shenzhen  Guangdong  518000
-				CN
-
-7C-16-89   (hex)		Sagemcom Broadband SAS
-7C1689     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-40-11-C3   (hex)		Samsung Electronics Co.,Ltd
-4011C3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-7D-9F   (hex)		Samsung Electronics Co.,Ltd
-C47D9F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-54-40   (hex)		Private
-9C5440     (base 16)		Private
-
-3C-A9-16   (hex)		Huawei Device Co., Ltd.
-3CA916     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-1C-07   (hex)		Samsung Electronics Co.,Ltd
-C41C07     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-58-FC-C6   (hex)		TOZO INC
-58FCC6     (base 16)		TOZO INC
-				1546 NW 56TH ST # 743
-				SEATTLE  WA  98107-5209
-				US
-
-00-40-36   (hex)		Minim Inc.
-004036     (base 16)		Minim Inc.
-				848 Elm Street
-				Manchester  NH  03101
-				US
-
-44-85-02   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-448502     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-A4-EF-15   (hex)		AltoBeam (China) Inc.
-A4EF15     (base 16)		AltoBeam (China) Inc.
-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
-				Beijing  Beijing  100083
-				CN
-
-D4-94-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D49400     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-15-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8415D3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-6C-65   (hex)		Texas Instruments
-A06C65     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F4-A4-54   (hex)		IEEE Registration Authority
-F4A454     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-10-E8-A7   (hex)		Wistron Neweb Corporation
-10E8A7     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-D4-2C-46   (hex)		BUFFALO.INC
-D42C46     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-10-91-A8   (hex)		Espressif Inc.
-1091A8     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-6C-3A-36   (hex)		Glowforge Inc
-6C3A36     (base 16)		Glowforge Inc
-				2200 1st Ave S
-				Seattle  WA  98134
-				US
-
-80-6A-00   (hex)		Cisco Systems, Inc
-806A00     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-6C-6D   (hex)		ARRIS Group, Inc.
-D46C6D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A0-E7-AE   (hex)		ARRIS Group, Inc.
-A0E7AE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-EC-50-AA   (hex)		Aruba, a Hewlett Packard Enterprise Company
-EC50AA     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-B4-45-06   (hex)		Dell Inc.
-B44506     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-CC-A3-BD   (hex)		ITEL MOBILE LIMITED
-CCA3BD     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-D4-35-4A   (hex)		ALAXALA Networks Corporation
-D4354A     (base 16)		ALAXALA Networks Corporation
-				Shinkawasaki Mitsui Bldg. West Tower.13F, 1-1-2 Kashimada, Saiwai-ku
-				Kawasaki-shi  Kanagawa-ken  212-0058
-				JP
-
-40-E9-9B   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-40E99B     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-78-04-7A   (hex)		Edge Networks LLC
-78047A     (base 16)		Edge Networks LLC
-				14 Whistler Hill Lane 
-				HUNTINGTON  NY  11743
-				US
-
-BC-AF-87   (hex)		smartAC.com, Inc.
-BCAF87     (base 16)		smartAC.com, Inc.
-				5302 Egbert St, SmartACcom
-				Houston  TX  77007
-				US
-
-C0-2B-31   (hex)		Phytium Technology Co.,Ltd.
-C02B31     (base 16)		Phytium Technology Co.,Ltd.
-				Building5,XinAn Business Square,Haiyuan Middle Road Binhai New District,
-				Tianjin    300450
-				CN
-
-58-CF-79   (hex)		Espressif Inc.
-58CF79     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-4C-C4-49   (hex)		Icotera A/S
-4CC449     (base 16)		Icotera A/S
-				Vibeholms Allé 16
-				Brøndby    2605
-				DK
-
-BC-45-5B   (hex)		Samsung Electronics Co.,Ltd
-BC455B     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-B0-3C-DC   (hex)		Intel Corporate
-B03CDC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-00-09-B0   (hex)		Onkyo Technology K.K.
-0009B0     (base 16)		Onkyo Technology K.K.
-				Lux Building (5th floor),1-1-41 Kawamata
-				Higashiosaka City  Osaka  577-0063
-				JP
-
-08-F8-0D   (hex)		IEEE Registration Authority
-08F80D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-78-62-99   (hex)		BITSTREAM sp. z o.o.
-786299     (base 16)		BITSTREAM sp. z o.o.
-				Melgiewska, 7/9
-				Lublin    20-209
-				PL
-
-CC-5B-31   (hex)		Nintendo Co.,Ltd
-CC5B31     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-0C-1E-F7   (hex)		Omni-ID
-0C1EF7     (base 16)		Omni-ID
-				Omni-ID, The Enterprise Center, Coxbridge Business Park, Alton Road
-				Farnham  Surrey  GU105EH
-				GB
-
-E0-6D-18   (hex)		PIONEERCORPORATION
-E06D18     (base 16)		PIONEERCORPORATION
-				25-1,yamada
-				kawagoe-shi  saitama  3508555
-				JP
-
-8C-F8-C5   (hex)		Intel Corporate
-8CF8C5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-34-5D-9E   (hex)		Sagemcom Broadband SAS
-345D9E     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-A4-5F-B9   (hex)		DreamBig Semiconductor, Inc.
-A45FB9     (base 16)		DreamBig Semiconductor, Inc.
-				2860 Zanker Road, Suite 210
-				San Jose  CA  95134
-				US
-
-B4-D2-86   (hex)		Telechips, Inc.
-B4D286     (base 16)		Telechips, Inc.
-				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
-				Seoul  Seoul  05510
-				KR
-
-00-0F-32   (hex)		Lootom Telcovideo Network (Wuxi) Co Ltd
-000F32     (base 16)		Lootom Telcovideo Network (Wuxi) Co Ltd
-				5F, 9Building,
-				WuXi  JiangSu  214072
-				CN
-
-18-C2-3C   (hex)		Lumi United Technology Co., Ltd
-18C23C     (base 16)		Lumi United Technology Co., Ltd
-				8th Floor, JinQi Wisdom Valley, No.1 TangLing Road, LinXian Ave, Taoyuan Residential District,Nanshan District
-				ShenZhen  GuangDong  518055
-				CN
-
-04-75-F9   (hex)		Taicang T&W Electronics
-0475F9     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-E8-51-77   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-E85177     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-				No.218 Qianwangang Road
-				Qingdao  Shangdong  266510
-				CN
-
-38-8A-21   (hex)		UAB Teltonika Telematics
-388A21     (base 16)		UAB Teltonika Telematics
-				Saltoniskiu  str. 9B-1
-				Vilnius    LT-08105
-				LT
-
-A0-59-50   (hex)		Intel Corporate
-A05950     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-50-87-4D   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-50874D     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-50-89-D1   (hex)		Huawei Device Co., Ltd.
-5089D1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-62-0B   (hex)		Broadcom Limited
-00620B     (base 16)		Broadcom Limited
-				15191 Alton Parkway
-				Irvine  CA  92618
-				US
-
-A4-17-52   (hex)		Hifocus Electronics India Private Limited
-A41752     (base 16)		Hifocus Electronics India Private Limited
-				No. 3 Sunguvar Street, Chintadripet
-				Chennai  Tamil Nadu  600002
-				IN
-
-40-FE-95   (hex)		New H3C Technologies Co., Ltd
-40FE95     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-BC-D0-74   (hex)		Apple, Inc.
-BCD074     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-61-C0   (hex)		Aruba, a Hewlett Packard Enterprise Company
-F061C0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-DC-CC-E6   (hex)		Samsung Electronics Co.,Ltd
-DCCCE6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-65-AE   (hex)		Samsung Electronics Co.,Ltd
-F065AE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-70-C9   (hex)		Jiangsu Aisida Electronic Co., Ltd
-1C70C9     (base 16)		Jiangsu Aisida Electronic Co., Ltd
-				Aisida Industrial Park,Lanling Road,Danyang Development Zone
-				DanYang  JiangSu  212300
-				CN
-
-9C-B8-B4   (hex)		AMPAK Technology,Inc.
-9CB8B4     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-00-40-84   (hex)		Honeywell
-004084     (base 16)		Honeywell
-				512 Virginia Dr Ste A
-				Fort Washington  PA  19034
-				US
-
-A0-53-94   (hex)		Shenzhen zediel co., Ltd.
-A05394     (base 16)		Shenzhen zediel co., Ltd.
-				Xixiang
-				Shenzhen  guangdong  518000
-				CN
-
-04-EE-E8   (hex)		IEEE Registration Authority
-04EEE8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-3C-F7-D1   (hex)		OMRON Corporation
-3CF7D1     (base 16)		OMRON Corporation
-				Shiokoji Horikawa, Shimogyo-ku
-				Kyoto    600-8530
-				JP
-
-84-B4-DB   (hex)		Silicon Laboratories
-84B4DB     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-38-C8-04   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-38C804     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-E0-07-C2   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-E007C2     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-2C-FD-B4   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-2CFDB4     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-B4-F2-67   (hex)		Compal Broadband Networks, Inc.
-B4F267     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-C0-BA-E6   (hex)		Application Solutions (Safety and Security) Ltd
-C0BAE6     (base 16)		Application Solutions (Safety and Security) Ltd
-				Unit 17, Cliffe Industrial Estate 
-				Lewes  East Sussex  BN8 6JL
-				GB
-
-18-D7-93   (hex)		IEEE Registration Authority
-18D793     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-09-E5   (hex)		Hottinger Brüel & Kjaer GmbH
-0009E5     (base 16)		Hottinger Brüel & Kjaer GmbH
-				Im Tiefen See 45
-				Darmstadt    D-64293
-				DE
-
-D8-B6-73   (hex)		Texas Instruments
-D8B673     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-98-50-A3   (hex)		SIGNALTEK JSC
-9850A3     (base 16)		SIGNALTEK JSC
-				2 Ivovaya street, floor 4, office 1,  Room 45
-				Moscow   2 Ivovaya street, floor 4, office 1,  Room 45    129329
-				RU
-
-C0-FB-C1   (hex)		ITEL MOBILE LIMITED
-C0FBC1     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-E8-17-FC   (hex)		Fujitsu Cloud Technologies Limited
-E817FC     (base 16)		Fujitsu Cloud Technologies Limited
-				JR Kawasaki Tower, 1-5, Omiyacho, Saiwai-ku
-				Kawasaki-shi  Kanagawa-ken,   212-0014
-				JP
-
-B0-DD-74   (hex)		Heimgard Technologies AS
-B0DD74     (base 16)		Heimgard Technologies AS
-				Dronning Mauds gate 15
-				Oslo   Norway  0250 
-				NO
-
-DC-36-43   (hex)		IEEE Registration Authority
-DC3643     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-10-2C-8D   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-102C8D     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-94-E6-86   (hex)		Espressif Inc.
-94E686     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-F8-28-C9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F828C9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-B3-B4   (hex)		Shenzhen Furuilian Electronic Co.,Ltd.
-50B3B4     (base 16)		Shenzhen Furuilian Electronic Co.,Ltd.
-				3/F, No.5 Building Workshop, No.123, Shuitian Industrial Zone,Baoshi East Road, Shuitian Community, Shiyan Street, Bao'an District,
-				Shenzhen    518000
-				CN
-
-B4-8C-9D   (hex)		AzureWave Technology Inc.
-B48C9D     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-FC-11-93   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC1193     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-38-83   (hex)		Ubiquiti Networks Inc.
-E43883     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-34-B8-83   (hex)		Cisco Systems, Inc
-34B883     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C0-79-82   (hex)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
-C07982     (base 16)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
-				B Area, 10th floor, TCL multimedia Building, TCL International E City, #1001 Zhonshanyuan road,Shenzhen
-				guangdong  China  518058
-				CN
-
-D0-ED-FF   (hex)		ZF CVCS
-D0EDFF     (base 16)		ZF CVCS
-				Am Lindener Hafen 21
-				Hannover    30453
-				DE
-
-F8-A9-1F   (hex)		ZVISION Technologies Co., Ltd
-F8A91F     (base 16)		ZVISION Technologies Co., Ltd
-				108, No.1, Block A,  Zhongguancun Software Park, Haidian District
-				Beijing  Beijing  100085
-				CN
-
-4C-BA-D7   (hex)		LG Innotek
-4CBAD7     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-7C-C9-5E   (hex)		Dongguan Liesheng Electronic Co., Ltd.
-7CC95E     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
-				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
-				dongguan   guangdong  523000
-				CN
-
-7C-CC-FC   (hex)		Quectel Wireless Solutions Co.,Ltd.
-7CCCFC     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-98-8F-E0   (hex)		IEEE Registration Authority
-988FE0     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-34-D7-37   (hex)		IBG Industriebeteiligungsgesellschaft mbH &b Co. KG
-34D737     (base 16)		IBG Industriebeteiligungsgesellschaft mbH &b Co. KG
-				Pferdmengestr. 1
-				Cologne  NRW  50968
-				DE
-
-2C-33-41   (hex)		China Mobile IOT Company Limited
-2C3341     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-AC-56-7B   (hex)		Sunnovo International Limited
-AC567B     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-9C-C1-2D   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-9CC12D     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-80-65-7C   (hex)		Apple, Inc.
-80657C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-80-84   (hex)		Apple, Inc.
-DC8084     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-C7-C3   (hex)		NETLINK ICT 
-8CC7C3     (base 16)		NETLINK ICT 
-				Jupitor Jn,Near Time kids Koothattukulam - Piravom Rd
-				Ernakulam  KL  686662
-				IN
-
-E4-DA-DF   (hex)		Taicang T&W Electronics
-E4DADF     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-7C-35-F8   (hex)		Zhejiang Tmall Technology Co., Ltd.
-7C35F8     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310024
-				CN
-
-74-26-FF   (hex)		zte corporation
-7426FF     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C4-27-28   (hex)		zte corporation
-C42728     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C8-58-95   (hex)		Motorola Mobility LLC, a Lenovo Company
-C85895     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-A8-53-7D   (hex)		Mist Systems, Inc.
-A8537D     (base 16)		Mist Systems, Inc.
-				1601 South De Anza Blvd, Suite 248
-				Cupertino  CA  95014
-				US
-
-30-34-22   (hex)		eero inc.
-303422     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-08-E0-21   (hex)		Honor Device Co., Ltd.
-08E021     (base 16)		Honor Device Co., Ltd.
-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
-				Shenzhen   Guangdong  518040
-				CN
-
-B0-5C-16   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-B05C16     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E8-D3-22   (hex)		Cisco Systems, Inc
-E8D322     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-30-2B-DC   (hex)		Top-Unum Electronics Co., LTD
-302BDC     (base 16)		Top-Unum Electronics Co., LTD
-				No. 58, Ln. 137, Jianshan Rd., Yingge Dist., 
-				New Taipei City 239,  Taiwan  239
-				CN
-
-8C-15-53   (hex)		Beijing Memblaze Technology Co Ltd
-8C1553     (base 16)		Beijing Memblaze Technology Co Ltd
-				Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian
-				Beijing  Beijing  100192
-				CN
-
-D4-BD-4F   (hex)		Ruckus Wireless
-D4BD4F     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-5C-C9-C0   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-5CC9C0     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-6C-B1-58   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-6CB158     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-E8-81-AB   (hex)		Beijing Sankuai Online Technology Co.,Ltd
-E881AB     (base 16)		Beijing Sankuai Online Technology Co.,Ltd
-				BC Building, China Electronic Science Taiji Information Technology Industry Base, Yard 7, Rongda Road, Chaoyang District
-				Beijing    100102
-				CN
-
-1C-47-F6   (hex)		Zhidao Network Technology(Shenzhen) Co.,Ltd
-1C47F6     (base 16)		Zhidao Network Technology(Shenzhen) Co.,Ltd
-				B3, 11 / F, Exiang Technology Building, No. 31, Zhongsi Road, Gaoxin, Maling Community, Yuehai Street, Nanshan District
-				Shenzhen    518000
-				CN
-
-A0-B4-BF   (hex)		InfiNet LLC
-A0B4BF     (base 16)		InfiNet LLC
-				Office 425, 69/75 Vavilova str.
-				Moscow\    117335
-				RU
-
-E8-EB-D3   (hex)		Mellanox Technologies, Inc.
-E8EBD3     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-C0-06-0C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0060C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-A4-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B0A4F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-75-3A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-24753A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-90-F7-B2   (hex)		New H3C Technologies Co., Ltd
-90F7B2     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-04-E3-1A   (hex)		Sagemcom Broadband SAS
-04E31A     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-6C-99-9D   (hex)		Amazon Technologies Inc.
-6C999D     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-7C-6A-60   (hex)		China Mobile Group Device Co.,Ltd.
-7C6A60     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-68-18-D9   (hex)		Hill AFB - CAPRE Group
-6818D9     (base 16)		Hill AFB - CAPRE Group
-				7278 4th Street
-				Hill AFB  UT  84056
-				US
-
-18-BC-57   (hex)		ADVA Optical Networking Ltd.
-18BC57     (base 16)		ADVA Optical Networking Ltd.
-				ADVAntage House
-				York    YO30 4RY
-				GB
-
-9C-A2-F4   (hex)		TP-Link Corporation Limited
-9CA2F4     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-1C-61-B4   (hex)		TP-Link Corporation Limited
-1C61B4     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-B4-69-5F   (hex)		TCT mobile ltd
-B4695F     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-D8-E2-DF   (hex)		Microsoft Corporation
-D8E2DF     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-6C-93-08   (hex)		IEEE Registration Authority
-6C9308     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-38-8F-30   (hex)		Samsung Electronics Co.,Ltd
-388F30     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-24-06-F2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-2406F2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-84-C6-92   (hex)		Texas Instruments
-84C692     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-6C-B2-FD   (hex)		Texas Instruments
-6CB2FD     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-6C-0F-61   (hex)		Hypervolt Ltd
-6C0F61     (base 16)		Hypervolt Ltd
-				25 Churchill Place
-				London    E14 5EY
-				GB
-
-A0-44-66   (hex)		Intellics
-A04466     (base 16)		Intellics
-				697, Pangyo-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13511
-				KR
-
-CC-66-18   (hex)		Adtran Inc
-CC6618     (base 16)		Adtran Inc
-				901 Explorer Blvd.
-				Huntsville  AL  35806-2807
-				US
-
-C0-C1-70   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-C0C170     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-50-42-89   (hex)		zte corporation
-504289     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-30-8E-7A   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-308E7A     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-2C-DD-5F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-2CDD5F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-C0-6D-ED   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-C06DED     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-44-6D-7F   (hex)		Amazon Technologies Inc.
-446D7F     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno    89507
-				US
-
-E0-27-6C   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
-E0276C     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-90-93-5A   (hex)		ARRIS Group, Inc.
-90935A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-AC-8F-A9   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-AC8FA9     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-4C-73-4F   (hex)		Juniper Networks
-4C734F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-24-EB-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24EBED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-51-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC51AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-CD-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48CDD3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-AD-24   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-F8AD24     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-A8-C9-8A   (hex)		New H3C Technologies Co., Ltd
-A8C98A     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-44-29-1E   (hex)		AltoBeam (China) Inc.
-44291E     (base 16)		AltoBeam (China) Inc.
-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
-				Beijing  Beijing  100083
-				CN
-
-DC-8E-95   (hex)		Silicon Laboratories
-DC8E95     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-7C-EF-40   (hex)		Nextorage Corporation
-7CEF40     (base 16)		Nextorage Corporation
-				Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku
-				Kawasaki City  Kanagawa  210-0007
-				JP
-
-28-BE-43   (hex)		vivo Mobile Communication Co., Ltd.
-28BE43     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-2C-FC-8B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-2CFC8B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-28-74-F5   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-2874F5     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-B0-1F-8C   (hex)		Aruba, a Hewlett Packard Enterprise Company
-B01F8C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-C0-E0-1C   (hex)		IoT Security Group, SL
-C0E01C     (base 16)		IoT Security Group, SL
-				Calle Pez Dorado, 27, local 2
-				Torremolinos  Malaga  29620
-				ES
-
-00-26-04   (hex)		WorldCast Systems
-002604     (base 16)		WorldCast Systems
-				20 Avenue Neil Armstrong 
-				Mérignac    33700
-				FR
-
-00-CB-7A   (hex)		Technicolor CH USA Inc.
-00CB7A     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-F8-AB-82   (hex)		Xiaomi Communications Co Ltd
-F8AB82     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-EC-30-B3   (hex)		Xiaomi Communications Co Ltd
-EC30B3     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-1C-AF-4A   (hex)		Samsung Electronics Co.,Ltd
-1CAF4A     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-C8-12-0B   (hex)		Samsung Electronics Co.,Ltd
-C8120B     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-90-2C-FB   (hex)		CanTops Co,.Ltd.
-902CFB     (base 16)		CanTops Co,.Ltd.
-				A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil
-				Yeongtong-gu  Suwon-si, Gyonggi-do  1660
-				KR
-
-A8-A2-37   (hex)		Arcadyan Corporation
-A8A237     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-00-00-BD   (hex)		RYOSEI, Ltd.
-0000BD     (base 16)		RYOSEI, Ltd.
-				16-4, kitahatsushima-cho
-				Amagasaki-shi  Hyogo   660-0834
-				JP
-
-AC-CC-FC   (hex)		Amazon Technologies Inc.
-ACCCFC     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-08-E6-3B   (hex)		zte corporation
-08E63B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-88-C1-74   (hex)		zte corporation
-88C174     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C8-9E-61   (hex)		Lyngsoe Systems LTd
-C89E61     (base 16)		Lyngsoe Systems LTd
-				101 Simona Dr., Unit 2
-				Bolton  Ontario  L7E 4E8
-				CA
-
-9C-57-BC   (hex)		eero inc.
-9C57BC     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-2C-82-17   (hex)		Apple, Inc.
-2C8217     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-2D-4D   (hex)		Apple, Inc.
-142D4D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-42-CC   (hex)		Apple, Inc.
-EC42CC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-21-1C   (hex)		Apple, Inc.
-B8211C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-5A-3F   (hex)		Juniper Networks
-D45A3F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-E8-DC-6C   (hex)		Cisco Systems, Inc
-E8DC6C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-48-B4-C3   (hex)		Aruba, a Hewlett Packard Enterprise Company
-48B4C3     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-B0-3F-64   (hex)		Apple, Inc.
-B03F64     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-A7-B4   (hex)		Honor Device Co., Ltd.
-68A7B4     (base 16)		Honor Device Co., Ltd.
-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
-				Shenzhen   Guangdong  518040
-				CN
-
-80-3C-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-803C20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-DD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4DD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-28-B1   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-E028B1     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-C0-8D-51   (hex)		Amazon Technologies Inc.
-C08D51     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-44-B4-B2   (hex)		Amazon Technologies Inc.
-44B4B2     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-6C-15-24   (hex)		IEEE Registration Authority
-6C1524     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-78-03-4F   (hex)		Nokia
-78034F     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-12-93   (hex)		ABB Switzerland Ltd.
-001293     (base 16)		ABB Switzerland Ltd.
-				Via Luserte Sud 9  Quartino 
-				Quartino     6572
-				CH
-
-C0-E9-11   (hex)		Private
-C0E911     (base 16)		Private
-
-14-F5-92   (hex)		Shenzhen SDG DONZHI Technology Co., Ltd
-14F592     (base 16)		Shenzhen SDG DONZHI Technology Co., Ltd
-				1001 SDG Information Technology Building, No.2 Qiongyu Road, Science park Community, Yuehai Street, Nanshan District,
-				Shenzhen  GuangDong  518000
-				CN
-
-4C-09-FA   (hex)		FRONTIER SMART TECHNOLOGIES LTD
-4C09FA     (base 16)		FRONTIER SMART TECHNOLOGIES LTD
-				17 Waterloo Place
-				London    SW1Y 4AR
-				GB
-
-24-2C-FE   (hex)		Zhejiang Tmall Technology Co., Ltd.
-242CFE     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310024
-				CN
-
-A0-42-D1   (hex)		Huawei Device Co., Ltd.
-A042D1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-2C-DC-78   (hex)		Descartes Systems (USA) LLC
-2CDC78     (base 16)		Descartes Systems (USA) LLC
-				2030 Powers Ferry Road SE
-				Atlanta  GA  303339
-				US
-
-58-87-9F   (hex)		Huawei Device Co., Ltd.
-58879F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E8-D8-7E   (hex)		Amazon Technologies Inc.
-E8D87E     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-9C-1F-CA   (hex)		Hangzhou AlmightyDigit Technology Co., Ltd
-9C1FCA     (base 16)		Hangzhou AlmightyDigit Technology Co., Ltd
-				Room A0041, 10 / F, building 1, Haizhi center, Cangqian street, Yuhang District
-				Hangzhou  Zhejiang   310000
-				CN
-
-84-70-D7   (hex)		eero inc.
-8470D7     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-E0-6C-4E   (hex)		Shenzhen TINNO Mobile Technology Corp.
-E06C4E     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-58-1D-D8   (hex)		Sagemcom Broadband SAS
-581DD8     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-80-6A-B0   (hex)		Shenzhen TINNO Mobile Technology Corp.
-806AB0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-F4-B3-B1   (hex)		Silicon Laboratories
-F4B3B1     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-04-69-8F   (hex)		Juniper Networks
-04698F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-14-9B-F3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-149BF3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-10-07-1D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-10071D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-10-B2-32   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-10B232     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-				No.218 Qianwangang Road
-				Qingdao  Shangdong  266510
-				CN
-
-B8-50-D8   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-B850D8     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-C0-9F-51   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-C09F51     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-80-02-F4   (hex)		IEEE Registration Authority
-8002F4     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A0-CD-F3   (hex)		Murata Manufacturing Co., Ltd.
-A0CDF3     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-B4-8A-0A   (hex)		Espressif Inc.
-B48A0A     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-C8-3A-1B   (hex)		Toshiba TEC Corporation Inc
-C83A1B     (base 16)		Toshiba TEC Corporation Inc
-				Oval Court Ohsaki Mark East
-				Shinagawa-ku  Tokyo  141-8664
-				JP
-
-EC-A6-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ECA62F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-5A-F0   (hex)		LG Electronics
-AC5AF0     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-5C-53-C3   (hex)		Ubee Interactive Co., Limited
-5C53C3     (base 16)		Ubee Interactive Co., Limited
-				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
-				North Point    00000
-				HK
-
-24-32-AE   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-2432AE     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-38-22-F4   (hex)		Huawei Device Co., Ltd.
-3822F4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-0C-BE-F1   (hex)		Huawei Device Co., Ltd.
-0CBEF1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-AC-93-6A   (hex)		Huawei Device Co., Ltd.
-AC936A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-38-A4-4B   (hex)		Huawei Device Co., Ltd.
-38A44B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-0E-D3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-1C0ED3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-7C-4C-A5   (hex)		SKY UK LIMITED
-7C4CA5     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-C0-3E-0F   (hex)		SKY UK LIMITED
-C03E0F     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-0C-F9-C0   (hex)		SKY UK LIMITED
-0CF9C0     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-70-50-AF   (hex)		SKY UK LIMITED
-7050AF     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-24-29-34   (hex)		Google, Inc.
-242934     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-38-0A-4F   (hex)		PRACHI ENTERPRISES
-380A4F     (base 16)		PRACHI ENTERPRISES
-				B-141, 2nd FLOOR SECTOR-6 NOIDA
-				NOIDA  UTTARPRADESH  201301
-				IN
-
-80-19-70   (hex)		Samsung Electronics Co.,Ltd
-801970     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E0-F7-28   (hex)		Amazon Technologies Inc.
-E0F728     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-B8-FB-AF   (hex)		Xiamen IPRT Technology CO.,LTD
-B8FBAF     (base 16)		Xiamen IPRT Technology CO.,LTD
-				3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China.
-				xiamen  fujian  361000
-				CN
-
-34-85-18   (hex)		Espressif Inc.
-348518     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-D4-DA-CD   (hex)		SKY UK LIMITED
-D4DACD     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-B0-45-30   (hex)		SKY UK LIMITED
-B04530     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-6C-A0-B4   (hex)		SKY UK LIMITED
-6CA0B4     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-3C-9E-C7   (hex)		SKY UK LIMITED
-3C9EC7     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-EC-E6-A2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-ECE6A2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-04-E8-B9   (hex)		Intel Corporate
-04E8B9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E0-2E-0B   (hex)		Intel Corporate
-E02E0B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-A4-AE-11   (hex)		Hon Hai Precision Industry Co., Ltd.
-A4AE11     (base 16)		Hon Hai Precision Industry Co., Ltd.
-				GuangDongShenZhen
-				ShenZhen  GuangDong  518109
-				CN
-
-D0-58-FC   (hex)		SKY UK LIMITED
-D058FC     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-90-02-18   (hex)		SKY UK LIMITED
-900218     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-38-5C-FB   (hex)		Silicon Laboratories
-385CFB     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-C4-3D-1A   (hex)		Intel Corporate
-C43D1A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-BC-F8-8B   (hex)		zte corporation
-BCF88B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-68-53-9D   (hex)		EM Microelectronic
-68539D     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-E4-65-64   (hex)		SHENZHEN KTC TECHNOLOGY CO.,LTD
-E46564     (base 16)		SHENZHEN KTC TECHNOLOGY CO.,LTD
-				Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China
-				SHEN ZHEN  GUANG DONG  518100
-				CN
-
-C8-BF-4C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-C8BF4C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-E8-CC-8C   (hex)		Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
-E8CC8C     (base 16)		Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
-				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
-				Chengdu  Sichuan  610000
-				CN
-
-58-1C-F8   (hex)		Intel Corporate
-581CF8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-AC-19-8E   (hex)		Intel Corporate
-AC198E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C8-5E-A9   (hex)		Intel Corporate
-C85EA9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-3C-E0-64   (hex)		Texas Instruments
-3CE064     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-E0-92-8F   (hex)		Texas Instruments
-E0928F     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-CC-03-7B   (hex)		Texas Instruments
-CC037B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-E0-51-D8   (hex)		China Dragon Technology Limited
-E051D8     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-CC-29-BD   (hex)		zte corporation
-CC29BD     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-7C-DE-78   (hex)		New H3C Technologies Co., Ltd
-7CDE78     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-5C-60-BA   (hex)		HP Inc.
-5C60BA     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-20-9C-B4   (hex)		Aruba, a Hewlett Packard Enterprise Company
-209CB4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-9C-FF-C2   (hex)		AVI Systems GmbH
-9CFFC2     (base 16)		AVI Systems GmbH
-				Dr. Franz Wilhelmstraße 2A
-				Krems a. d. Donau    3500
-				AT
-
-44-D8-78   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-44D878     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-A0-D8-07   (hex)		Huawei Device Co., Ltd.
-A0D807     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-2C-78-0E   (hex)		Huawei Device Co., Ltd.
-2C780E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-34-B2-0A   (hex)		Huawei Device Co., Ltd.
-34B20A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-F4-AB   (hex)		Espressif Inc.
-98F4AB     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-D8-BF-C0   (hex)		Espressif Inc.
-D8BFC0     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-20-26-81   (hex)		TECNO MOBILE LIMITED
-202681     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-F4-D6-20   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-F4D620     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-64-FB-92   (hex)		PPC Broadband Inc.
-64FB92     (base 16)		PPC Broadband Inc.
-				6176 E Molloy Rd
-				East Syracuse  NY  13057
-				US
-
-14-13-46   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-141346     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-94-90-34   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-949034     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-98-7A-10   (hex)		Ericsson AB
-987A10     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-54-2B-DE   (hex)		New H3C Technologies Co., Ltd
-542BDE     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-98-F7-81   (hex)		ARRIS Group, Inc.
-98F781     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-78-97-C3   (hex)		DINGXIN INFORMATION TECHNOLOGY CO.,LTD
-7897C3     (base 16)		DINGXIN INFORMATION TECHNOLOGY CO.,LTD
-				No.6 huasui Road,ZhuJiang Xincheng
-				Guangzhou  Guangdong  510623
-				CN
-
-4C-90-DB   (hex)		JL Audio
-4C90DB     (base 16)		JL Audio
-				10369 N Commerce Pkwy
-				Mirimar  FL  33025
-				US
-
-B8-99-AE   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-B899AE     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-				Chudong science and technology park, 111 shaxin road, tangxia town,
-				dongguan city  guangdong province  523710
-				CN
-
-E8-D0-B9   (hex)		Taicang T&W Electronics
-E8D0B9     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-3C-8F-06   (hex)		Shenzhen Libtor Technology Co.,Ltd
-3C8F06     (base 16)		Shenzhen Libtor Technology Co.,Ltd
-				Room 608, Building A
-				Shenzhen City  Guangdong Province  518000
-				CN
-
-B0-08-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B00875     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-8C-F1-12   (hex)		Motorola Mobility LLC, a Lenovo Company
-8CF112     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-84-76-37   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-847637     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-FC-94-35   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC9435     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-24-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E02481     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-C0-EA   (hex)		Pepwave Limited
-A8C0EA     (base 16)		Pepwave Limited
-				A5, 5/F, HK Spinners Industrial Building, Phase 6, 481 Castle Peak Road
-				Cheung Sha Wan  Hong Kong  0
-				HK
-
-18-2A-D3   (hex)		Juniper Networks
-182AD3     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-80-B0-7B   (hex)		zte corporation
-80B07B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C8-5A-9F   (hex)		zte corporation
-C85A9F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-44-AE-AB   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-44AEAB     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-A4-F0-5E   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A4F05E     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-1C-68-7E   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
-1C687E     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
-				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
-				Shenzhen  Guangdong  518057
-				CN
-
-C0-36-56   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-C03656     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-58-85-A2   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
-5885A2     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
-				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
-				Chongqing  China  401120
-				CN
-
-2C-F8-9B   (hex)		Cisco Systems, Inc
-2CF89B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-1C   (hex)		AT&T
-00071C     (base 16)		AT&T
-				3300 E Renner Road
-				Richardson  TX  75082
-				US
-
-E0-E8-E6   (hex)		Shenzhen C-Data Technology Co., Ltd.
-E0E8E6     (base 16)		Shenzhen C-Data Technology Co., Ltd.
-				#601, Fl6, Bldg F, No.1008  Yangguang Community, Xili, Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-50-02-91   (hex)		Espressif Inc.
-500291     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-00-1D-DF   (hex)		Sunitec Enterprise Co.,Ltd
-001DDF     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F., No. 98-1, Mincyuan Rd.
-				Sindian City  Taipei County  231
-				TW
-
-8C-0F-FA   (hex)		Hutec co.,ltd
-8C0FFA     (base 16)		Hutec co.,ltd
-				46, Gunpocheomdansaneop 2-ro
-				Gunpo-si  Gyeonggi-do  15880
-				KR
-
-AC-FE-05   (hex)		ITEL MOBILE LIMITED
-ACFE05     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-78-2A-79   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-782A79     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-78-65-59   (hex)		Sagemcom Broadband SAS
-786559     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-50-D2-F5   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-50D2F5     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-24-52-6A   (hex)		Zhejiang Dahua Technology Co., Ltd.
-24526A     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-20-DF-B9   (hex)		Google, Inc.
-20DFB9     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-5C-CA-D3   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-5CCAD3     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
-				SHEN ZHEN  GUANG DONG  518000
-				CN
-
-28-16-7F   (hex)		Xiaomi Communications Co Ltd
-28167F     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-5C-E8-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CE883     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-01-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-100177     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-A1-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-44A191     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-23-A4   (hex)		Sichuan AI-Link Technology Co., Ltd.
-6023A4     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-A4-53-0E   (hex)		Cisco Systems, Inc
-A4530E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-40-3A   (hex)		IMPACT TECHNOLOGIES
-00403A     (base 16)		IMPACT TECHNOLOGIES
-				6 RUE DE L'ACADIE
-				    
-				FR
-
-F8-87-F1   (hex)		Apple, Inc.
-F887F1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-28-BF   (hex)		Continental Automotive Czech Republic s.r.o.
-9C28BF     (base 16)		Continental Automotive Czech Republic s.r.o.
-				Průmyslová 1851
-				Brandýs nad Labem    250 01
-				CZ
-
-74-D6-37   (hex)		Amazon Technologies Inc.
-74D637     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-D0-5F-64   (hex)		IEEE Registration Authority
-D05F64     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-BC-C3-1B   (hex)		Kygo Life A
-BCC31B     (base 16)		Kygo Life A
-				Sjolyst Plass 3
-				Oslo    0278
-				NO
-
-64-DF-10   (hex)		JingLue Semiconductor(SH) Ltd.
-64DF10     (base 16)		JingLue Semiconductor(SH) Ltd.
-				No.800 Naxian Rd
-				Shanghai    201210
-				CN
-
-C4-63-FB   (hex)		Neatframe AS
-C463FB     (base 16)		Neatframe AS
-				Martin Linges Vei 25
-				Fornebu  Fornebu  1364
-				NO
-
-0C-81-26   (hex)		Juniper Networks
-0C8126     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-30-57-14   (hex)		Apple, Inc.
-305714     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-44-7A   (hex)		Water-i.d. GmbH
-60447A     (base 16)		Water-i.d. GmbH
-				Daimlerstr. 20
-				Eggenstein    76344
-				DE
-
-C8-B1-CD   (hex)		Apple, Inc.
-C8B1CD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-60-CB   (hex)		Apple, Inc.
-1460CB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-F1-2A   (hex)		Apple, Inc.
-B8F12A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-AB-6A   (hex)		Chun-il Co.,Ltd.
-04AB6A     (base 16)		Chun-il Co.,Ltd.
-				13-7, Gimhae-daero 2694 beon-gil,
-				Gimhae-si  Gyeongsangnam-do  50936
-				KR
-
-54-4E-45   (hex)		Private
-544E45     (base 16)		Private
-
-04-C8-07   (hex)		Xiaomi Communications Co Ltd
-04C807     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-04-A2-22   (hex)		Arcadyan Corporation
-04A222     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-48-9B-D5   (hex)		Extreme Networks, Inc.
-489BD5     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-3C-8C-93   (hex)		Juniper Networks
-3C8C93     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-28-FE-65   (hex)		DongGuan Siyoto Electronics Co., Ltd       
-28FE65     (base 16)		DongGuan Siyoto Electronics Co., Ltd       
-				Hecheng Industrial District, QiaoTou Town
-				DongGuan City  Guangdong  523520
-				CN
-
-18-06-F5   (hex)		RAD Data Communications, Ltd.
-1806F5     (base 16)		RAD Data Communications, Ltd.
-				24 Raoul Wallenberg St.
-				Tel Aviv    69719
-				IL
-
-74-84-E1   (hex)		Dongguan Haoyuan Electronics Co.,Ltd
-7484E1     (base 16)		Dongguan Haoyuan Electronics Co.,Ltd
-				NO.161 Kejizhong RoadLiuwu Shijie Town
-				Dongguan  Guangdong  523290
-				CN
-
-44-FB-5A   (hex)		zte corporation
-44FB5A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-44-59-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4459E3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-DC-54-D7   (hex)		Amazon Technologies Inc.
-DC54D7     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-44-D3-CA   (hex)		Cisco Systems, Inc
-44D3CA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-88-9F-AA   (hex)		Hella Gutmann Solutions GmbH 
-889FAA     (base 16)		Hella Gutmann Solutions GmbH 
-				Am Krebsbach 2
-				Ihringen   Baden Württemberg  79241
-				DE
-
-E4-54-E8   (hex)		Dell Inc.
-E454E8     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-20-96-8A   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-20968A     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-8C-18-50   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-8C1850     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Hangzhou  310000
-				CN
-
-D8-D4-E6   (hex)		Hytec Inter Co., Ltd.
-D8D4E6     (base 16)		Hytec Inter Co., Ltd.
-				3-28-6 Yoyogi
-				Shibuya-ku  Tokyo  1510053
-				JP
-
-68-3F-1E   (hex)		EFFECT Photonics B.V.
-683F1E     (base 16)		EFFECT Photonics B.V.
-				Kastanjelaan 400
-				Eindhoven  Noord-Brabant  5616 LZ
-				NL
-
-00-35-FF   (hex)		Texas Instruments
-0035FF     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F8-E7-A0   (hex)		vivo Mobile Communication Co., Ltd.
-F8E7A0     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-2C-FF-EE   (hex)		vivo Mobile Communication Co., Ltd.
-2CFFEE     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-84-0B-7C   (hex)		Hitron Technologies. Inc
-840B7C     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-48-A7-3C   (hex)		Sichuan tianyi kanghe communications co., LTD
-48A73C     (base 16)		Sichuan tianyi kanghe communications co., LTD
-				No.198, section 1, xueshan avenue, jinyuan town, dayi county
-				chengdu  sichuan  611330
-				CN
-
-C8-5D-38   (hex)		HUMAX Co., Ltd.
-C85D38     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-F8-A7-63   (hex)		Zhejiang Tmall Technology Co., Ltd.
-F8A763     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-A4-98-13   (hex)		ARRIS Group, Inc.
-A49813     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-6C-29-90   (hex)		WiZ Connected Lighting Company Limited
-6C2990     (base 16)		WiZ Connected Lighting Company Limited
-				Room 3805, 148 Electric Road
-				Hong Kong  0000  0000
-				HK
-
-98-35-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9835ED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-08-4F-0A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-084F0A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-49-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A8494D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-00-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-44004D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-CF-24   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-18CF24     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-9B-3B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D89B3B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-88-40-3B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88403B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-FC-87-43   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC8743     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-80-76-93   (hex)		Newag SA
-807693     (base 16)		Newag SA
-				Wyspianskiego 3
-				Nowy Sacz  woj. Malopolskie  33-300
-				PL
-
-BC-97-40   (hex)		IEEE Registration Authority
-BC9740     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-04-88-5F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04885F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-C8-50-CE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C850CE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-50-F8-A5   (hex)		eWBM Co., Ltd.
-50F8A5     (base 16)		eWBM Co., Ltd.
-				14F, 9, Teheran-ro 20-gil
-				Gangnam-gu, Seoul    06236
-				KR
-
-14-49-BC   (hex)		DrayTek Corp.
-1449BC     (base 16)		DrayTek Corp.
-				No. 26, Fushing Rd., Hukou, Hsinchu Industrial Park,
-				Hsinchu county    30352
-				TW
-
-20-F4-78   (hex)		Xiaomi Communications Co Ltd
-20F478     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-90-73-5A   (hex)		Motorola Mobility LLC, a Lenovo Company
-90735A     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-1C-82-59   (hex)		IEEE Registration Authority
-1C8259     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-04-DF   (hex)		TERACOM TELEMATICA S.A
-0004DF     (base 16)		TERACOM TELEMATICA S.A
-				RUA AMERICA N.1000
-				Eldorado do Sul - RS    Brazil
-				BR
-
-74-38-B7   (hex)		CANON INC.
-7438B7     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-8C-04-BA   (hex)		Dell Inc.
-8C04BA     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-FA-21   (hex)		Samsung Electronics Co.,Ltd
-00FA21     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-23-02   (hex)		Samsung Electronics Co.,Ltd
-7C2302     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-B6-F7   (hex)		NEW POS TECHNOLOGY LIMITED
-18B6F7     (base 16)		NEW POS TECHNOLOGY LIMITED
-				AB Unit, 14th Floor,Block A, Financial Technology Building.No. 11 Keyuan Rd
-				Shenzhen    518057
-				CN
-
-5C-B1-5F   (hex)		Oceanblue Cloud Technology Limited
-5CB15F     (base 16)		Oceanblue Cloud Technology Limited
-				253-261 Hennessy Road
-				Hong Kong  Hong Kong  999077
-				HK
-
-18-AA-CA   (hex)		Sichuan tianyi kanghe communications co., LTD
-18AACA     (base 16)		Sichuan tianyi kanghe communications co., LTD
-				No.198, section 1, xueshan avenue, jinyuan town, dayi county, sichuan province
-				chengdu  sichuan  611330
-				CN
-
-D4-9D-C0   (hex)		Samsung Electronics Co.,Ltd
-D49DC0     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-D0-19-6A   (hex)		Ciena Corporation
-D0196A     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-44-13-D0   (hex)		zte corporation
-4413D0     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-24-62-AB   (hex)		Espressif Inc.
-2462AB     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-88-B4-36   (hex)		Private
-88B436     (base 16)		Private
-
-6C-AB-05   (hex)		Cisco Systems, Inc
-6CAB05     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-E4   (hex)		Hosiden Corporation
-000BE4     (base 16)		Hosiden Corporation
-				4-33
-				Yao-city  Osaka  581-0071
-				JP
-
-60-D2-48   (hex)		ARRIS Group, Inc.
-60D248     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-48-5D-EB   (hex)		Just Add Power
-485DEB     (base 16)		Just Add Power
-				12505 STARKEY RD STE A
-				LARGO  FL  33773
-				US
-
-50-13-95   (hex)		Sichuan AI-Link Technology Co., Ltd.
-501395     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-18-D9-EF   (hex)		Shuttle Inc.
-18D9EF     (base 16)		Shuttle Inc.
-				No. 30 Lane 76, Rei Kuang Rd
-				Taipei    114
-				TW
-
-88-DA-33   (hex)		Beijing Xiaoyuer Network Technology Co., Ltd
-88DA33     (base 16)		Beijing Xiaoyuer Network Technology Co., Ltd
-				Block K1, North American International Business Centre, 86 Beiyuan Road, Chaoyang District
-				Beijing  Beijing  100012
-				CN
-
-50-41-B9   (hex)		I-O DATA DEVICE,INC.
-5041B9     (base 16)		I-O DATA DEVICE,INC.
-				3-10,Sakurada-machi
-				Kanazawa  Ishikawa  920-8512
-				JP
-
-80-DA-BC   (hex)		Megafone Limited
-80DABC     (base 16)		Megafone Limited
-				Unit 702,7/F,Bankok Bank Building,NO.18 Bonham Strand West
-				Hong Kong    999077
-				HK
-
-C0-9F-E1   (hex)		zte corporation
-C09FE1     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-18-46-44   (hex)		Home Control Singapore Pte Ltd
-184644     (base 16)		Home Control Singapore Pte Ltd
-				151 Lorong Chuan
-				Singapore    556741
-				SG
-
-B0-70-0D   (hex)		Nokia
-B0700D     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-34-6B-5B   (hex)		New H3C Technologies Co., Ltd
-346B5B     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-84-E8-92   (hex)		Actiontec Electronics, Inc
-84E892     (base 16)		Actiontec Electronics, Inc
-				301 Olcott St
-				Santa Clara  CA  95054
-				US
-
-78-E2-BD   (hex)		Vodafone Automotive S.p.A.
-78E2BD     (base 16)		Vodafone Automotive S.p.A.
-				via Astico 41
-				Varese  Italy/VA  21100
-				IT
-
-F8-48-FD   (hex)		China Mobile Group Device Co.,Ltd.
-F848FD     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-20-DA-22   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-20DA22     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-21-DA   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-C821DA     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-E0-B6-55   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-E0B655     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-00-21-75   (hex)		Pacific Satellite International Ltd.
-002175     (base 16)		Pacific Satellite International Ltd.
-				20/F Tai Tung Building,
-				Wanchai    100000
-				HK
-
-88-97-46   (hex)		Sichuan AI-Link Technology Co., Ltd.
-889746     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-1C-DE-57   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-1CDE57     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E0-DC-FF   (hex)		Xiaomi Communications Co Ltd
-E0DCFF     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-00-77-8D   (hex)		Cisco Systems, Inc
-00778D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-8C   (hex)		Siemens AG
-000E8C     (base 16)		Siemens AG
-				Siemensstraße 10
-				Regensburg    93055
-				DE
-
-00-87-64   (hex)		Cisco Systems, Inc
-008764     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-FC-33-42   (hex)		Juniper Networks
-FC3342     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C4-68-D0   (hex)		VTech Telecommunications Ltd.
-C468D0     (base 16)		VTech Telecommunications Ltd.
-				23/F, Tai Ping Industrial Centre, Block 1,
-				HONG KONG  NA  000000
-				HK
-
-14-AE-DB   (hex)		VTech Telecommunications Ltd.
-14AEDB     (base 16)		VTech Telecommunications Ltd.
-				23/F, Tai Ping Industrial Centre, Block 1,
-				HONG KONG  NA  000000
-				HK
-
-78-DB-2F   (hex)		Texas Instruments
-78DB2F     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-8C-0F-A0   (hex)		di-soric GmbH & Co. KG
-8C0FA0     (base 16)		di-soric GmbH & Co. KG
-				Steinbeisstrasse 6
-				Urbach    73660
-				DE
-
-DC-B8-08   (hex)		Extreme Networks, Inc.
-DCB808     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-B0-E7-1D   (hex)		Shanghai Maigantech Co.,Ltd
-B0E71D     (base 16)		Shanghai Maigantech Co.,Ltd
-				Room 2211,No.88 Caoxi North Rd,Xuhui District
-				Shanghai  Shanghai  200030
-				CN
-
-F8-BB-BF   (hex)		eero inc.
-F8BBBF     (base 16)		eero inc.
-				500 Howard St Suite 900
-				San Francisco  CA  94105
-				US
-
-84-6F-CE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-846FCE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-20-65-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-20658E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-3D-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-183D5E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-DC-71-37   (hex)		zte corporation
-DC7137     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-84-7C-9B   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-847C9B     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-34-41-A8   (hex)		ER-Telecom
-3441A8     (base 16)		ER-Telecom
-				Ovchinnikovskaya embankment, 20, Building 1 
-				Moscow    115324
-				RU
-
-34-DB-9C   (hex)		Sagemcom Broadband SAS
-34DB9C     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-74-40-BE   (hex)		LG Innotek
-7440BE     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-04-D4-C4   (hex)		ASUSTek COMPUTER INC.
-04D4C4     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-F0-D4-E2   (hex)		Dell Inc.
-F0D4E2     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-A8-E2-C3   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-A8E2C3     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-90-20-C2   (hex)		Aruba, a Hewlett Packard Enterprise Company
-9020C2     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-0C-A0-6C   (hex)		Industrial Cyber Sensing Inc.
-0CA06C     (base 16)		Industrial Cyber Sensing Inc.
-				Unit 1A - 343 Montrose Street North
-				Cambridge  Ontario  N3H 2H6
-				CA
-
-FC-D2-B6   (hex)		IEEE Registration Authority
-FCD2B6     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-80-4A-14   (hex)		Apple, Inc.
-804A14     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-3C-69   (hex)		Apple, Inc.
-703C69     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-2D-A9   (hex)		TECNO MOBILE LIMITED
-AC2DA9     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-48-04-9F   (hex)		ELECOM CO., LTD
-48049F     (base 16)		ELECOM CO., LTD
-				9FLand Axis Tower.1-1 fushimi machi,4-chome chuoku
-				osaka    5418765
-				JP
-
-08-7F-98   (hex)		vivo Mobile Communication Co., Ltd.
-087F98     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-C8-52-61   (hex)		ARRIS Group, Inc.
-C85261     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-74-88-BB   (hex)		Cisco Systems, Inc
-7488BB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-CF-12   (hex)		Espressif Inc.
-A4CF12     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-4C-6A-F6   (hex)		HMD Global Oy
-4C6AF6     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-48-9D-D1   (hex)		Samsung Electronics Co.,Ltd
-489DD1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-6F-E0   (hex)		Samsung Electronics Co.,Ltd
-B06FE0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-44-B9-94   (hex)		Douglas Lighting Controls
-44B994     (base 16)		Douglas Lighting Controls
-				280 - 3605 Gilmore Way
-				Burnaby  BC  V5G4X5
-				CA
-
-40-A9-3F   (hex)		Pivotal Commware, Inc.
-40A93F     (base 16)		Pivotal Commware, Inc.
-				1555 132nd Ave. NE
-				Bellevue  WA  98005
-				US
-
-70-BF-92   (hex)		GN Audio A/S
-70BF92     (base 16)		GN Audio A/S
-				Lautrupbjerg 7
-				Ballerup    DK-2750
-				DK
-
-C0-8C-71   (hex)		Motorola Mobility LLC, a Lenovo Company
-C08C71     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-F4-6F-4E   (hex)		Echowell
-F46F4E     (base 16)		Echowell
-				7F-8, No. 8, Sec 1, JunShing Rd.
-				New Taipei City    24872
-				TW
-
-5C-88-16   (hex)		Rockwell Automation
-5C8816     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-00-2F-5C   (hex)		Cisco Systems, Inc
-002F5C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-64-5D   (hex)		Toshiba
-F4645D     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-38-F8-5E   (hex)		HUMAX Co., Ltd.
-38F85E     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-AC-BB-61   (hex)		YSTen Technology Co.,Ltd
-ACBB61     (base 16)		YSTen Technology Co.,Ltd
-				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
-				Beijing    100101
-				CN
-
-24-79-F8   (hex)		KUPSON spol. s r.o.
-2479F8     (base 16)		KUPSON spol. s r.o.
-				Hradecka 787/14
-				Opava  Czech Republic  74601
-				CZ
-
-7C-FD-82   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-7CFD82     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-				No.168, Middle Road Of East Gate
-				Xiaobian Community  Chang'an Town  523851
-				CN
-
-18-0D-2C   (hex)		Intelbras
-180D2C     (base 16)		Intelbras
-				BR 101, km 210, S/N°
-				São José  Santa Catarina  88104800
-				BR
-
-04-2D-B4   (hex)		First Property (Beijing) Co., Ltd Modern MOMA Branch
-042DB4     (base 16)		First Property (Beijing) Co., Ltd Modern MOMA Branch
-				Room 301A，Building No.10, No.1 Xiangheyuan Road, Dongcheng District, Beijing City
-				Beijing  Beijing  100028
-				CN
-
-04-E0-B0   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-04E0B0     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-08-EC-F5   (hex)		Cisco Systems, Inc
-08ECF5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D0-76-50   (hex)		IEEE Registration Authority
-D07650     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-60-D0-A9   (hex)		Samsung Electronics Co.,Ltd
-60D0A9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-CE-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88CEFA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-27-06   (hex)		YOISYS
-002706     (base 16)		YOISYS
-				309-52 SUNGSU-2GA, 1DONG, SUNGDONG-GU
-				SEOUL    133-827
-				KR
-
-00-CB-51   (hex)		Sagemcom Broadband SAS
-00CB51     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-C4-64-B7   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-C464B7     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-EC-41-18   (hex)		XIAOMI Electronics,CO.,LTD
-EC4118     (base 16)		XIAOMI Electronics,CO.,LTD
-				Xiaomi Building, No.68 Qinghe Middle Street
-				Haidian District  Beijing  100085
-				CN
-
-D8-86-0B   (hex)		IEEE Registration Authority
-D8860B     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-34-20-03   (hex)		Shenzhen Feitengyun Technology Co.,LTD
-342003     (base 16)		Shenzhen Feitengyun Technology Co.,LTD
-				7F 4building,Yalianhaoshida industrial Park
-				Shenzhen  Guangdong  518100
-				CN
-
-F0-7D-68   (hex)		D-Link Corporation
-F07D68     (base 16)		D-Link Corporation
-				No.289, Sinhu 3rd Rd., Neihu District, 
-				Taipei City    114
-				TW
-
-40-E3-D6   (hex)		Aruba, a Hewlett Packard Enterprise Company
-40E3D6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-B4-5D-50   (hex)		Aruba, a Hewlett Packard Enterprise Company
-B45D50     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-78-DA-A2   (hex)		Cynosure Technologies Co.,Ltd
-78DAA2     (base 16)		Cynosure Technologies Co.,Ltd
-				Room 2708/2710, Building No.9A, Shenzhen Bay Science and Technology Ecological Park，Nanshan 
-				Shenzhen city  Guangdong Province  518057
-				CN
-
-38-B1-9E   (hex)		IEEE Registration Authority
-38B19E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-38-E2-6E   (hex)		ShenZhen Sweet Rain Electronics Co.,Ltd.
-38E26E     (base 16)		ShenZhen Sweet Rain Electronics Co.,Ltd.
-				Xinghua Road
-				Shenzhen  Bao'an  518101
-				CN
-
-00-D0-50   (hex)		Iskratel d.o.o.
-00D050     (base 16)		Iskratel d.o.o.
-				Ljubljanska cesta 24a
-				Kranj    4000
-				SI
-
-70-C9-C6   (hex)		Cisco Systems, Inc
-70C9C6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-B9-2F   (hex)		Technicolor CH USA Inc.
-D4B92F     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-68-9A-87   (hex)		Amazon Technologies Inc.
-689A87     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-64-AE-88   (hex)		Polytec GmbH
-64AE88     (base 16)		Polytec GmbH
-				Polytec Platz 1-7
-				Waldbronn  BW  76337
-				DE
-
-AC-A3-1E   (hex)		Aruba, a Hewlett Packard Enterprise Company
-ACA31E     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-00-17-7B   (hex)		Azalea Networks inc
-00177B     (base 16)		Azalea Networks inc
-				673 S Milpitas Blvd
-				Milpitas  CA  95035
-				US
-
-98-DA-C4   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-98DAC4     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-50-2B-98   (hex)		Es-tech International
-502B98     (base 16)		Es-tech International
-				228-70, Saneop-ro 155beon-gil, Gwonseon-gu, Suwon-si, Gyeonggi-do, Korea
-				Suwon    16648
-				KR
-
-C8-28-32   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-C82832     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-94-6A-77   (hex)		Technicolor CH USA Inc.
-946A77     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-C4-34-6B   (hex)		Hewlett Packard
-C4346B     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-80-84-A9   (hex)		oshkosh Corporation
-8084A9     (base 16)		oshkosh Corporation
-				2307 Oregon Street
-				Oshkosh  WI  54902
-				US
-
-F4-6E-95   (hex)		Extreme Networks, Inc.
-F46E95     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose    95119
-				US
-
-4C-C7-D6   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-4CC7D6     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
-				Zhuhai  Guangdong  519180
-				CN
-
-C8-08-73   (hex)		Ruckus Wireless
-C80873     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-70-1B-FB   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-701BFB     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-1B-B5   (hex)		Cherry GmbH
-001BB5     (base 16)		Cherry GmbH
-				Cherrystraße 1
-				Auerbach i. d. Opf.  Bayern  D-91275
-				DE
-
-D0-51-57   (hex)		LEAX Arkivator Telecom
-D05157     (base 16)		LEAX Arkivator Telecom
-				NanShan District YueHaiMen Street
-				ShenZhen  GuangDong  518061
-				CN
-
-28-80-88   (hex)		NETGEAR
-288088     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-64-CE-6E   (hex)		Sierra Wireless
-64CE6E     (base 16)		Sierra Wireless
-				13811 Wireless Way
-				Richmond  BC  V6V 3A4
-				CA
-
-1C-34-77   (hex)		Innovation Wireless
-1C3477     (base 16)		Innovation Wireless
-				11869 Teale Street
-				Culver City  CA  90230
-				US
-
-BC-3E-07   (hex)		Hitron Technologies. Inc
-BC3E07     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-48-FD-A3   (hex)		Xiaomi Communications Co Ltd
-48FDA3     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-00-16-97   (hex)		NEC Corporation
-001697     (base 16)		NEC Corporation
-				7-1, Shiba 5-chome Minato-ku,
-				tokyo  Tokyo  108-8001
-				JP
-
-00-30-13   (hex)		NEC Corporation
-003013     (base 16)		NEC Corporation
-				1-10 Nisshincho, Fuchu
-				Tokyo 183-8501    0000
-				JP
-
-04-9D-FE   (hex)		Hivesystem
-049DFE     (base 16)		Hivesystem
-				816 Kranz-techno Bldg. 388 dunchondaero, jun
-				Gyeonggi-do    KSXX0024
-				KR
-
-9C-DB-07   (hex)		Thum+Mahr GmbH
-9CDB07     (base 16)		Thum+Mahr GmbH
-				Heinrich-Hertz-Strasse 1-3
-				Monheim am Rhein  NRW  40789
-				DE
-
-DC-EB-69   (hex)		Technicolor CH USA Inc.
-DCEB69     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-00-4E-35   (hex)		Hewlett Packard Enterprise
-004E35     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-F8-13-08   (hex)		Nokia
-F81308     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-F8-A2-D6   (hex)		Liteon Technology Corporation
-F8A2D6     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-18-2A-44   (hex)		HIROSE ELECTRONIC SYSTEM
-182A44     (base 16)		HIROSE ELECTRONIC SYSTEM
-				1-9-6 Ebisuminami
-				Shibuya  Tokyo  150-0022
-				JP
-
-FC-94-CE   (hex)		zte corporation
-FC94CE     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-90-86-9B   (hex)		zte corporation
-90869B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E0-18-9F   (hex)		EM Microelectronic
-E0189F     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-74-36-6D   (hex)		Vodafone Italia S.p.A.
-74366D     (base 16)		Vodafone Italia S.p.A.
-				Via Lorenteggio nr. 240
-				Milan  Italy  20147
-				IT
-
-84-DB-2F   (hex)		Sierra Wireless
-84DB2F     (base 16)		Sierra Wireless
-				1381 Wireless Way
-				Richmond  BC  V6V 3A4
-				CA
-
-94-58-CB   (hex)		Nintendo Co.,Ltd
-9458CB     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-28-EC-9A   (hex)		Texas Instruments
-28EC9A     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-FC-BE-7B   (hex)		vivo Mobile Communication Co., Ltd.
-FCBE7B     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-B4-0F-B3   (hex)		vivo Mobile Communication Co., Ltd.
-B40FB3     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-EC-5C-68   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-EC5C68     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-C4-E5-06   (hex)		Piper Networks, Inc.
-C4E506     (base 16)		Piper Networks, Inc.
-				3636 Nobel Drive
-				San Diego  CA  92122
-				US
-
-30-EB-5A   (hex)		LANDIS + GYR
-30EB5A     (base 16)		LANDIS + GYR
-				78th km Old National Road Athens-Corinth 
-				Corinth     20100
-				GR
-
-F8-0F-6F   (hex)		Cisco Systems, Inc
-F80F6F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-80-E3   (hex)		CORAL NETWORK CORPORATION
-0080E3     (base 16)		CORAL NETWORK CORPORATION
-				(NOW BAY NETWORKS)
-				SANTA CLARA  CA  95052-8185
-				US
-
-B4-C6-2E   (hex)		Molex CMS
-B4C62E     (base 16)		Molex CMS
-				2222 Wellington Court
-				Lisle  IL  60532
-				US
-
-B8-25-9A   (hex)		Thalmic Labs 
-B8259A     (base 16)		Thalmic Labs 
-				24 Charles Street West 
-				Kitchener   Ontario   N2G 1H2
-				CA
-
-28-25-36   (hex)		SHENZHEN HOLATEK CO.,LTD
-282536     (base 16)		SHENZHEN HOLATEK CO.,LTD
-				Rm.1001,Unit 4,Bld.B,Kexing Science Park,Keyuan Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-B8-A1-75   (hex)		Roku, Inc.
-B8A175     (base 16)		Roku, Inc.
-				12980 Saratoga Ave
-				Saratoga  CA  95070
-				US
-
-CC-D3-C1   (hex)		Vestel Elektronik San ve Tic. A.Ş.
-CCD3C1     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
-				Organize san
-				Manisa  Turket  45030
-				TR
-
-0C-D0-F8   (hex)		Cisco Systems, Inc
-0CD0F8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-5F-90   (hex)		LAM Technologies
-745F90     (base 16)		LAM Technologies
-				Viale Ludovico Ariosto, 492/D
-				Sesto Fiorentino  FIRENZE  50019
-				IT
-
-A4-26-55   (hex)		LTI Motion (Shanghai) Co., Ltd.
-A42655     (base 16)		LTI Motion (Shanghai) Co., Ltd.
-				NO.80, Lane 2927, LaiYang Road Pudong New District
-				Shanghai  Shanghai  200137
-				CN
-
-60-A7-30   (hex)		Shenzhen Yipinfang Internet Technology Co.,Ltd
-60A730     (base 16)		Shenzhen Yipinfang Internet Technology Co.,Ltd
-				Shenzhen Konka R & D Building, 28th floor 21
-				GuangDong  Nanshan District  518000
-				CN
-
-3C-9B-D6   (hex)		Vizio, Inc
-3C9BD6     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-F8-5B-9C   (hex)		SB SYSTEMS Co.,Ltd
-F85B9C     (base 16)		SB SYSTEMS Co.,Ltd
-				2F Ventureforum, 323, Pangyo-ro, Bundang-gu
-				Seongnam-si  Gyeonngi-do  453-400
-				KR
-
-6C-A9-28   (hex)		HMD Global Oy
-6CA928     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-00-D8-61   (hex)		Micro-Star INTL CO., LTD.
-00D861     (base 16)		Micro-Star INTL CO., LTD.
-				No.69, Lide St.,
-				New Taipei City  Taiwan  235
-				TW
-
-74-C1-7D   (hex)		Infinix mobility limited
-74C17D     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-88-71-B1   (hex)		ARRIS Group, Inc.
-8871B1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F0-AF-85   (hex)		ARRIS Group, Inc.
-F0AF85     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-FC-AE-34   (hex)		ARRIS Group, Inc.
-FCAE34     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-DC-DA-80   (hex)		New H3C Technologies Co., Ltd
-DCDA80     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-CC-72-86   (hex)		Xi'an Fengyu Information Technology Co., Ltd.
-CC7286     (base 16)		Xi'an Fengyu Information Technology Co., Ltd.
-				5F, Block A, STRC, No.10, Zhangba 5th Road, Yanta
-				Xi'an  Shaanxi  710077
-				CN
-
-64-EE-B7   (hex)		Netcore Technology Inc
-64EEB7     (base 16)		Netcore Technology Inc
-				Building 6, Baolong Plant, Able Technology Park, Longgang District, 
-				Shenzhen    518116
-				CN
-
-38-81-D7   (hex)		Texas Instruments
-3881D7     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-18-04-ED   (hex)		Texas Instruments
-1804ED     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D4-32-60   (hex)		GoPro
-D43260     (base 16)		GoPro
-				3000 Clearview Way
-				San Mateo  CA  94402
-				US
-
-50-DB-3F   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-50DB3F     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-10-81-B4   (hex)		Hunan Greatwall Galaxy Science and Technology Co.,Ltd.
-1081B4     (base 16)		Hunan Greatwall Galaxy Science and Technology Co.,Ltd.
-				No. 39, Jian Shan Road
-				Changsha  Hunan  410205
-				CN
-
-00-42-79   (hex)		Sunitec Enterprise Co.,Ltd
-004279     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-00-B8-B3   (hex)		Cisco Systems, Inc
-00B8B3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-DD-9E   (hex)		GoPro
-F4DD9E     (base 16)		GoPro
-				3000 Clearview Way
-				San Mateo  CA  94402
-				US
-
-D4-D9-19   (hex)		GoPro
-D4D919     (base 16)		GoPro
-				3000 Clearview Way
-				San Mateo  CA  94402
-				US
-
-14-11-14   (hex)		TECNO MOBILE LIMITED
-141114     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-A4-50-46   (hex)		Xiaomi Communications Co Ltd
-A45046     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-1C-24-CD   (hex)		Askey Computer Corp.
-1C24CD     (base 16)		Askey Computer Corp.
-				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
-				NEW TAIPEI CITY    23585
-				TW
-
-00-7C-2D   (hex)		Samsung Electronics Co.,Ltd
-007C2D     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-B4-77-48   (hex)		Shenzhen Neoway Technology Co.,Ltd.
-B47748     (base 16)		Shenzhen Neoway Technology Co.,Ltd.
-				4F-2#,Lian Jian Science & Industry Park,Huarong Road,Dalang Street,Longhua District
-				Shenzhen  Guangdong  518000
-				CN
-
-F8-50-1C   (hex)		Tianjin Geneuo Technology Co.,Ltd
-F8501C     (base 16)		Tianjin Geneuo Technology Co.,Ltd
-				Technology Avenue South JingHai Economic Development Area,Tianjin China
-				Tianjin    301609
-				CN
-
-44-07-0B   (hex)		Google, Inc.
-44070B     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-F8-C2-49   (hex)		Private
-F8C249     (base 16)		Private
-
-B8-31-B5   (hex)		Microsoft Corporation
-B831B5     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-EC-F6-BD   (hex)		SNCF MOBILITÉS
-ECF6BD     (base 16)		SNCF MOBILITÉS
-				9 rue Jean-Philippe Rameau 
-				SAINT-DENIS    93200
-				FR
-
-38-B4-D3   (hex)		BSH Hausgeraete GmbH
-38B4D3     (base 16)		BSH Hausgeraete GmbH
-				Im Gewerbepark B10
-				Regensburg    93059
-				DE
-
-C8-47-82   (hex)		Areson Technology Corp.
-C84782     (base 16)		Areson Technology Corp.
-				11F., No. 646, Sec. 5, Chongxin Rd., Sanchong District
-				New Taipei City    24158
-				TW
-
-E8-93-63   (hex)		Nokia
-E89363     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-7C-0C-F6   (hex)		Guangdong Huiwei High-tech Co., Ltd.
-7C0CF6     (base 16)		Guangdong Huiwei High-tech Co., Ltd.
-				E Block No. 1 in Ecological Area in Puzhai NewArea
-				Fengshun County, Meizhou  Guangdong province  514000
-				CN
-
-74-9D-79   (hex)		Sercomm Corporation.
-749D79     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-00-D6-FE   (hex)		Cisco Systems, Inc
-00D6FE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-0C-BF-74   (hex)		Morse Micro
-0CBF74     (base 16)		Morse Micro
-				113 / 2-4 Cornwallis Street
-				Eveleigh  NSW  2015
-				AU
-
-FC-8F-7D   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-FC8F7D     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-24-BE-18   (hex)		DADOUTEK COMPANY LIMITED
-24BE18     (base 16)		DADOUTEK COMPANY LIMITED
-				14/F, Wilson Logistics Centre,No.24-28 Kung Yip St
-				Kwai Chung  New Territories  000
-				CN
-
-B4-1D-2B   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-B41D2B     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-14-C2-13   (hex)		Apple, Inc.
-14C213     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-D3-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-70D313     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-1D-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C1D36     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-BB-FE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CCBBFE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-D9-31   (hex)		Apple, Inc.
-A4D931     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-FE-D9   (hex)		Apple, Inc.
-BCFED9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-82-23   (hex)		Apple, Inc.
-808223     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-0A-60   (hex)		IEEE Registration Authority
-300A60     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-80-D0-65   (hex)		CKS Corporation
-80D065     (base 16)		CKS Corporation
-				1-24-11 Akebono
-				Tachikawa  Tokyo  190-0012
-				JP
-
-28-31-66   (hex)		vivo Mobile Communication Co., Ltd.
-283166     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-C0-40-04   (hex)		Medicaroid Corporation
-C04004     (base 16)		Medicaroid Corporation
-				1-6-4, Minatojima-minamimachi, Chuo-ku
-				Kobe    650-0047
-				JP
-
-20-AD-56   (hex)		Continental Automotive Systems Inc.
-20AD56     (base 16)		Continental Automotive Systems Inc.
-				21440 W. Lake Cook Rd.
-				Deer Park  IL  60010
-				US
-
-50-29-F5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-5029F5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-CC-08-FB   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-CC08FB     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-BC-AF-91   (hex)		TE Connectivity Sensor Solutions
-BCAF91     (base 16)		TE Connectivity Sensor Solutions
-				4 rue Gaye-Marie, CS 83163
-				Toulouse    31027
-				FR
-
-F0-D7-DC   (hex)		Wesine (Wuhan) Technology Co., Ltd.
-F0D7DC     (base 16)		Wesine (Wuhan) Technology Co., Ltd.
-				10th Floor, Building 2, SBI Venture Street, Hongshan District
-				Wuhan  Hubei  430074
-				CN
-
-00-72-04   (hex)		Samsung Electronics Co., Ltd. ARTIK
-007204     (base 16)		Samsung Electronics Co., Ltd. ARTIK
-				1-1, Samsungjeonja-ro
-				Hwaseong-si  Gyeonggi-do  18448
-				KR
-
-40-C8-1F   (hex)		Shenzhen Xinguodu Technology Co., Ltd.
-40C81F     (base 16)		Shenzhen Xinguodu Technology Co., Ltd.
-				F17A, JinSong Building, Tairan Industrial & Trade Park, Chegongmiao, Shennan Road，Futian District
-				Shenzhen  Guangdong  518040
-				CN
-
-14-59-C0   (hex)		NETGEAR
-1459C0     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-8C-61-A3   (hex)		ARRIS Group, Inc.
-8C61A3     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A8-10-87   (hex)		Texas Instruments
-A81087     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A0-28-33   (hex)		IEEE Registration Authority
-A02833     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C8-C2-F5   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-C8C2F5     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
-				Zhuhai  Guangdong  519180
-				CN
-
-F0-58-49   (hex)		CareView Communications
-F05849     (base 16)		CareView Communications
-				405 State HWY 121 BYP
-				Lewisville   Texas  75067
-				US
-
-34-E5-EC   (hex)		Palo Alto Networks
-34E5EC     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-A4-ED-43   (hex)		IEEE Registration Authority
-A4ED43     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-94-29-8D   (hex)		Shanghai AdaptComm Technology Co., Ltd.
-94298D     (base 16)		Shanghai AdaptComm Technology Co., Ltd.
-				3rd Floor, Building 14, No. 518 Xinzhuan Road, Songjiang District,
-				Shanghai    201600
-				CN
-
-00-AA-6E   (hex)		Cisco Systems, Inc
-00AA6E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-68-43-D7   (hex)		Agilecom Photonics Solutions Guangdong Limited
-6843D7     (base 16)		Agilecom Photonics Solutions Guangdong Limited
-				No.1-6, Shenwan Industrial Park, Shenwan Town
-				Zhongshan  Guangdong  528462
-				CN
-
-20-D8-0B   (hex)		Juniper Networks
-20D80B     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-8C-8F-8B   (hex)		China Mobile Chongqing branch
-8C8F8B     (base 16)		China Mobile Chongqing branch
-				6 building, No. 2, Xingguang three road
-				Yubei District  Chongqing  401120
-				CN
-
-B8-6A-97   (hex)		Edgecore Networks Corporation
-B86A97     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-00-0A-5E   (hex)		3COM
-000A5E     (base 16)		3COM
-				5400 Bayfront Plaza
-				Santa Clara  CA  95052-8145
-				US
-
-00-10-5A   (hex)		3COM
-00105A     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-60-97   (hex)		3COM
-006097     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-60-08   (hex)		3COM
-006008     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-1B-6E   (hex)		Keysight Technologies, Inc.
-001B6E     (base 16)		Keysight Technologies, Inc.
-				1400 Fountaingrove Pkwy.
-				Santa Rosa  CA  95403
-				US
-
-00-04-0B   (hex)		3COM EUROPE LTD
-00040B     (base 16)		3COM EUROPE LTD
-				BOUNDARY WAY
-				vvvvv  UNITED  KINGDOM
-				GB
-
-00-01-02   (hex)		3COM
-000102     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-8C-FE-74   (hex)		Ruckus Wireless
-8CFE74     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-A8-01-6D   (hex)		Aiwa Corporation
-A8016D     (base 16)		Aiwa Corporation
-				965 W Chicago Ave
-				Chicago  IL  60642
-				US
-
-04-40-A9   (hex)		New H3C Technologies Co., Ltd
-0440A9     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-4C-01-43   (hex)		eero inc.
-4C0143     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-E4-34-93   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E43493     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-29-12   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-342912     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-4B-AA   (hex)		Magic Leap, Inc.
-604BAA     (base 16)		Magic Leap, Inc.
-				1855 Griffin Rd, Room B454
-				Dania Beach  FL  33004
-				US
-
-4C-36-4E   (hex)		Panasonic Corporation  Connected Solutions Company
-4C364E     (base 16)		Panasonic Corporation  Connected Solutions Company
-				4-1-62 Minoshima, Hakata-ku
-				Fukuoka-shi  Fukuoka  812-8531
-				JP
-
-BC-A5-8B   (hex)		Samsung Electronics Co.,Ltd
-BCA58B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-CE-B9   (hex)		Samsung Electronics Co.,Ltd
-80CEB9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-D3-FC   (hex)		Mios, Ltd.
-D0D3FC     (base 16)		Mios, Ltd.
-				645 W. 9th St.
-				Los Angeles  CA  90015
-				US
-
-6C-6C-D3   (hex)		Cisco Systems, Inc
-6C6CD3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-49-ED   (hex)		Audeze LLC
-E049ED     (base 16)		Audeze LLC
-				3410 S Susan st
-				Santa Ana  CA  92704
-				US
-
-80-30-E0   (hex)		Hewlett Packard Enterprise
-8030E0     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-E8-5D-86   (hex)		CHANG YOW TECHNOLOGIES INTERNATIONAL CO.,LTD.
-E85D86     (base 16)		CHANG YOW TECHNOLOGIES INTERNATIONAL CO.,LTD.
-				 No 88 Shuren 6th St Wufong District
-				Taichung    413
-				TW
-
-14-37-19   (hex)		PT Prakarsa Visi Valutama
-143719     (base 16)		PT Prakarsa Visi Valutama
-				Jl. Cideng Timur No.11D
-				Jakarta Pusat  Indonesia  10130
-				ID
-
-58-2F-40   (hex)		Nintendo Co.,Ltd
-582F40     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-08-90-BA   (hex)		Danlaw Inc
-0890BA     (base 16)		Danlaw Inc
-				23700 research Dr.
-				Farmington Hills    48335
-				US
-
-94-A3-CA   (hex)		KonnectONE, LLC
-94A3CA     (base 16)		KonnectONE, LLC
-				30 N Gould Street STE 4004
-				Sheridan  WY  82801
-				US
-
-24-4C-E3   (hex)		Amazon Technologies Inc.
-244CE3     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno    89507
-				US
-
-B8-BE-F4   (hex)		devolo AG
-B8BEF4     (base 16)		devolo AG
-				Charlottenburger Allee 67
-				Aachen  NRW  52068
-				DE
-
-00-01-57   (hex)		SYSWAVE CO., LTD
-000157     (base 16)		SYSWAVE CO., LTD
-				Dongho B/D 5F, 221-2
-				  KOREA  135-010
-				KR
-
-58-FD-BE   (hex)		Shenzhen Taikaida Technology Co., Ltd
-58FDBE     (base 16)		Shenzhen Taikaida Technology Co., Ltd
-				Shenzhen Baoan District Fuyong town Fengtang road Xintian building 613
-				shenzhen    518102
-				CN
-
-F4-F1-97   (hex)		EMTAKE Inc
-F4F197     (base 16)		EMTAKE Inc
-				14, Pangyoyeok ro 192, Bundang gu
-				Seongnam city  Kyeonggi do  13524
-				KR
-
-6C-ED-51   (hex)		NEXCONTROL Co.,Ltd
-6CED51     (base 16)		NEXCONTROL Co.,Ltd
-				(#303-1007, Ssangyong 3th) 397, Seokcheon-ro
-				Bucheon-si  Gyeonggi-do  14449
-				KR
-
-04-C3-E6   (hex)		IEEE Registration Authority
-04C3E6     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-28-63-36   (hex)		Siemens AG
-286336     (base 16)		Siemens AG
-				Werner-von-Siemens Strasse 50
-				Amberg    92224
-				DE
-
-14-D1-69   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14D169     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-62-E5   (hex)		Hewlett Packard
-1062E5     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-00-20-B5   (hex)		YASKAWA ELECTRIC CORPORATION
-0020B5     (base 16)		YASKAWA ELECTRIC CORPORATION
-				2-1 Kurosakishiroishi, Yahatanishi-ku,
-				Kitakyushu    806-0004
-				JP
-
-E0-62-67   (hex)		Xiaomi Communications Co Ltd
-E06267     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-70-B7-AA   (hex)		vivo Mobile Communication Co., Ltd.
-70B7AA     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-84-B3-1B   (hex)		Kinexon GmbH
-84B31B     (base 16)		Kinexon GmbH
-				Schellingstrasse, 35
-				München    80799
-				DE
-
-08-25-25   (hex)		Xiaomi Communications Co Ltd
-082525     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-C4-95-00   (hex)		Amazon Technologies Inc.
-C49500     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-F4-60-E2   (hex)		Xiaomi Communications Co Ltd
-F460E2     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-E4-D1-24   (hex)		 Mojo Networks, Inc.
-E4D124     (base 16)		 Mojo Networks, Inc.
-				339 N.Bernardo Ave
-				Mountain View  CA  94043
-				US
-
-00-13-A3   (hex)		Siemens Home & Office Comm. Devices
-0013A3     (base 16)		Siemens Home & Office Comm. Devices
-				4849 Alpha Road
-				Dallas    75244
-				US
-
-B0-B8-67   (hex)		Hewlett Packard Enterprise
-B0B867     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-C0-03-80   (hex)		Juniper Networks
-C00380     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-98-BB-99   (hex)		Phicomm (Sichuan) Co.,Ltd.
-98BB99     (base 16)		Phicomm (Sichuan) Co.,Ltd.
-				125 longquan street park road,longquan district,chengdu city
-				Sichuan  Chengdu  610015
-				CN
-
-00-26-22   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-002622     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
-				KUNSHAN  SUZHOU  215300
-				CN
-
-F8-27-2E   (hex)		Mercku
-F8272E     (base 16)		Mercku
-				509 Beaver Creek Rd.
-				Waterloo  Ontario  N2V 2L3
-				CA
-
-9C-C9-50   (hex)		Baumer Holding
-9CC950     (base 16)		Baumer Holding
-				Hummelstrasse 17
-				Frauenfeld  Thurgau  8501
-				CH
-
-F8-99-10   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-F89910     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-50-E0-EF   (hex)		Nokia
-50E0EF     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-84-8A-8D   (hex)		Cisco Systems, Inc
-848A8D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-1C-C3-EB   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-1CC3EB     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-50-4C-7E   (hex)		THE 41ST INSTITUTE OF CETC
-504C7E     (base 16)		THE 41ST INSTITUTE OF CETC
-				No.98 Xiangjiang Road,Huangdao District,Qingdao,Shandong
-				Qingdao  Shangdong  266555
-				CN
-
-00-14-13   (hex)		Trebing & Himstedt Prozeßautomation GmbH & Co. KG
-001413     (base 16)		Trebing & Himstedt Prozeßautomation GmbH & Co. KG
-				Wilhelm Hennemann Straße 13
-				Schwerin  Mecklenburg-Vorpommern  19061
-				DE
-
-00-07-99   (hex)		Tipping Point Technologies, Inc.
-000799     (base 16)		Tipping Point Technologies, Inc.
-				7501 B N. Capital of TX Hwy.
-				Austin  TX  78731
-				US
-
-D0-1C-BB   (hex)		Beijing Ctimes Digital Technology Co., Ltd.
-D01CBB     (base 16)		Beijing Ctimes Digital Technology Co., Ltd.
-				7th Floor, Jinzhou Building, Suzhou Street, No.79, Haidian District, 
-				Beijing    100089
-				CN
-
-74-87-BB   (hex)		Ciena Corporation
-7487BB     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-68-DD-26   (hex)		Shanghai Focus Vision Security Technology Co.,Ltd
-68DD26     (base 16)		Shanghai Focus Vision Security Technology Co.,Ltd
-				No.4888 Hunan Rd, Pudong New District
-				Shanghai  Shanghai  201317
-				CN
-
-28-66-E3   (hex)		AzureWave Technology Inc.
-2866E3     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-60-F1-8A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60F18A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-38-73   (hex)		Juniper Networks
-EC3873     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-78-04-73   (hex)		Texas Instruments
-780473     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A8-3E-0E   (hex)		HMD Global Oy
-A83E0E     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-10-C1-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-10C172     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-15-1E   (hex)		ETHERNET Powerlink Standarization Group (EPSG)
-00151E     (base 16)		ETHERNET Powerlink Standarization Group (EPSG)
-				c/o Zurich University of Applied Sciences
-				Winterthur    CH-8401
-				CH
-
-00-11-1E   (hex)		ETHERNET Powerlink Standarization Group (EPSG)
-00111E     (base 16)		ETHERNET Powerlink Standarization Group (EPSG)
-				c/o University of Applied Sciences
-				Winterthur  ZH  CH-8401
-				CH
-
-00-40-9D   (hex)		DigiBoard
-00409D     (base 16)		DigiBoard
-				6400 FLYING CLOUD DRIVE
-				EDEN PRAIRIE  MN  55344
-				US
-
-CC-50-E3   (hex)		Espressif Inc.
-CC50E3     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-DC-E3-05   (hex)		   ZAO NPK Rotek
-DCE305     (base 16)		   ZAO NPK Rotek
-				Prospekt Mira
-				Moscow    129223
-				RU
-
-A4-DA-32   (hex)		Texas Instruments
-A4DA32     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-00-0E-EE   (hex)		Muco Industrie BV
-000EEE     (base 16)		Muco Industrie BV
-				Pleimuiden 12e
-				Amsterdam  NH  1046 AG
-				NL
-
-7C-1C-4E   (hex)		LG Innotek
-7C1C4E     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-D8-B6-B7   (hex)		Comtrend Corporation
-D8B6B7     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-00-21-06   (hex)		RIM Testing Services
-002106     (base 16)		RIM Testing Services
-				440 Phillip Street
-				Waterloo  ON  N2L 5R9
-				CA
-
-8C-14-B4   (hex)		zte corporation
-8C14B4     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-3C-98-72   (hex)		Sercomm Corporation.
-3C9872     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-40-C3-C6   (hex)		SnapRoute
-40C3C6     (base 16)		SnapRoute
-				3960 Freedom Circle, Suite 100
-				Santa Clara  CA  95054
-				US
-
-5C-96-56   (hex)		AzureWave Technology Inc.
-5C9656     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-E0-60-66   (hex)		Sercomm Corporation.
-E06066     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-14-93-46   (hex)		PNI sensor corporation
-149346     (base 16)		PNI sensor corporation
-				2331 Circadian Way
-				Santa Rosa  CA  95407
-				US
-
-DC-E0-EB   (hex)		Nanjing Aozheng Information Technology Co.Ltd
-DCE0EB     (base 16)		Nanjing Aozheng Information Technology Co.Ltd
-				#E1-453, Zidong Road #1,Qixia District
-				Nanjing  jiangsu  210000
-				CN
-
-EC-8C-9A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC8C9A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-86-55   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B48655     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-47-59   (hex)		Beijing MEGA preponderance Science & Technology Co. Ltd
-2C4759     (base 16)		Beijing MEGA preponderance Science & Technology Co. Ltd
-				Room 2201,No.8,Ruichuang International B Block,Wangjing East Road
-				Beijing    100102
-				CN
-
-A4-15-66   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-A41566     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Wei fang Export processing Zone
-				Wei Fang  Shan Dong  261205
-				CN
-
-1C-96-5A   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-1C965A     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Wei Fang  Shan Dong  261205
-				CN
-
-40-1B-5F   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-401B5F     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-A8-E5-52   (hex)		JUWEL Aquarium AG & Co. KG
-A8E552     (base 16)		JUWEL Aquarium AG & Co. KG
-				Karl-Göx-Straße 1
-				Rotenburg / Wümme    27356
-				DE
-
-5C-CD-7C   (hex)		MEIZU Technology Co.,Ltd.
-5CCD7C     (base 16)		MEIZU Technology Co.,Ltd.
-				MEIZU Tech Bldg., Technology& Innovation Coast
-				Zhuhai  Guangdong  519085
-				CN
-
-00-13-8A   (hex)		Qingdao GoerTek Technology Co., Ltd.
-00138A     (base 16)		Qingdao GoerTek Technology Co., Ltd.
-				Room 605,Innovation Building,Hi-tech Industrial Park,
-				QINGDAO  SHANDONG  266061
-				CN
-
-A8-30-AD   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-A830AD     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Wei fang Export processing Zone
-				Wei Fang  Shan Dong  261205
-				CN
-
-BC-5F-F6   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-BC5FF6     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-C8-E7-D8   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-C8E7D8     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				Mid-Fourth Flr., Building 28, Cui Xi Fourth Road，Ke Yuan West,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-60-D2-1C   (hex)		Sunnovo International Limited
-60D21C     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-CC-51-B4   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-CC51B4     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-C3-F4   (hex)		Samsung Electronics Co.,Ltd
-00C3F4     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-B8-8A-EC   (hex)		Nintendo Co.,Ltd
-B88AEC     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-D0-D7-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D0D783     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-3B-77   (hex)		Sagemcom Broadband SAS
-AC3B77     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-B0-FC-0D   (hex)		Amazon Technologies Inc.
-B0FC0D     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-CC-C9-2C   (hex)		Schindler - PORT Technology
-CCC92C     (base 16)		Schindler - PORT Technology
-				via della Pace 22
-				Locarno  Ticino  6600
-				CH
-
-00-1E-39   (hex)		Comsys Communication Ltd.
-001E39     (base 16)		Comsys Communication Ltd.
-				9 Hamenofim st.
-				Herzelia    46725
-				IL
-
-78-72-5D   (hex)		Cisco Systems, Inc
-78725D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-FC-E6-6A   (hex)		Industrial Software Co
-FCE66A     (base 16)		Industrial Software Co
-				85, Aleksandyr Malinov Blvd. Office 6
-				Sofia    1715
-				BG
-
-78-36-CC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-7836CC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-8C-CF-5C   (hex)		BEFEGA GmbH
-8CCF5C     (base 16)		BEFEGA GmbH
-				Reichenbacher Str. 22
-				Schwabach  Bavaria  91126
-				DE
-
-70-C8-33   (hex)		Wirepas Oy
-70C833     (base 16)		Wirepas Oy
-				Visiokatu 4
-				Tampere    33720
-				FI
-
-0C-73-EB   (hex)		IEEE Registration Authority
-0C73EB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-04-8A-E1   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-048AE1     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
-				Zhuhai  Guangdong  519180
-				CN
-
-F0-B5-D1   (hex)		Texas Instruments
-F0B5D1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-00-E0-00   (hex)		FUJITSU LIMITED
-00E000     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-90-84-8B   (hex)		HDR10+ Technologies, LLC
-90848B     (base 16)		HDR10+ Technologies, LLC
-				3855 SW 153rd Drive
-				Beaverton  OR  97006
-				US
-
-C8-D7-79   (hex)		QING DAO HAIER TELECOM CO.,LTD.
-C8D779     (base 16)		QING DAO HAIER TELECOM CO.,LTD.
-				No 1  Haier road,Hi-tech Zone，Qingdao，PR.China
-				Qingdao  Shandong  266101
-				CN
-
-10-B3-6F   (hex)		Bowei Technology Company Limited 
-10B36F     (base 16)		Bowei Technology Company Limited 
-				2F,Building No.6C,1658,Gumei Rd
-				Shanghai  Shanghai  200233
-				CN
-
-FC-9B-C6   (hex)		Sumavision Technologies Co.,Ltd
-FC9BC6     (base 16)		Sumavision Technologies Co.,Ltd
-				6F, Block A2, Power Creative Building,No.1 Shangdi East Road, Haidian District
-				Beijing    100085
-				CN
-
-C8-29-2A   (hex)		Barun Electronics
-C8292A     (base 16)		Barun Electronics
-				869, Jangji-ri, Dongtan-myeon
-				Hwaseong-si  Gyeonggi-do  445812
-				KR
-
-E4-82-CC   (hex)		Jumptronic GmbH
-E482CC     (base 16)		Jumptronic GmbH
-				An der Weide 5
-				Springe    31832
-				DE
-
-48-60-5F   (hex)		LG Electronics (Mobile Communications)
-48605F     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-B0-41-6F   (hex)		Shenzhen Maxtang Computer Co.,Ltd
-B0416F     (base 16)		Shenzhen Maxtang Computer Co.,Ltd
-				6/F, Bldg.3, Honghui Industrial Park, Liuxian 2nd Rd., Bao'an Dist.
-				Shenzhen  Guangdong  518101
-				CN
-
-50-1D-93   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-501D93     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-16-A8   (hex)		Microsoft Corporation
-2816A8     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-F8-F5-32   (hex)		ARRIS Group, Inc.
-F8F532     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-B0-83-D6   (hex)		ARRIS Group, Inc.
-B083D6     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-80-C7-C5   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-80C7C5     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E4-43-4B   (hex)		Dell Inc.
-E4434B     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-0C-F5-A4   (hex)		Cisco Systems, Inc
-0CF5A4     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-9C-2E-A1   (hex)		Xiaomi Communications Co Ltd
-9C2EA1     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-08-97-34   (hex)		Hewlett Packard Enterprise
-089734     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-F0-9C-D7   (hex)		Guangzhou Blue Cheetah Intelligent Technology Co., Ltd.
-F09CD7     (base 16)		Guangzhou Blue Cheetah Intelligent Technology Co., Ltd.
-				Panyu District, Guangzhou City Panyu Avenue North 555 Panyu Energy Technology Park,Industry Building 2 seats 406-407
-				Guangzhou  Guangdong   511400
-				CN
-
-BC-E1-43   (hex)		Apple, Inc.
-BCE143     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-70-33   (hex)		Apple, Inc.
-647033     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-68-78   (hex)		Apple, Inc.
-846878     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-D0-83   (hex)		Apple, Inc.
-C8D083     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-6A-BC   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-0C6ABC     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-00-80-BA   (hex)		SPECIALIX (ASIA) PTE, LTD
-0080BA     (base 16)		SPECIALIX (ASIA) PTE, LTD
-				3 WINTERSELLS ROAD
-				  UNITED  KINGDOM
-				US
-
-48-0B-B2   (hex)		IEEE Registration Authority
-480BB2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-CC-C0-79   (hex)		Murata Manufacturing Co., Ltd.
-CCC079     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-E0-19-D8   (hex)		BH TECHNOLOGIES
-E019D8     (base 16)		BH TECHNOLOGIES
-				12 RUE AMPERE
-				GRENOBLE    38000
-				FR
-
-60-30-D4   (hex)		Apple, Inc.
-6030D4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-95-EA   (hex)		Apple, Inc.
-F895EA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-F1-D8   (hex)		Apple, Inc.
-18F1D8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-CD-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3CCD5D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-76-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C7668     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-38-38   (hex)		Marking System Technology Co., Ltd.
-6C3838     (base 16)		Marking System Technology Co., Ltd.
-				76-1, Hirakawa Yokomichi
-				Joyo-shi  Kyoto  610-0101
-				JP
-
-30-D9-D9   (hex)		Apple, Inc.
-30D9D9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-0F-77   (hex)		HangZhou Gubei Electronics Technology Co.,Ltd
-780F77     (base 16)		HangZhou Gubei Electronics Technology Co.,Ltd
-				HangZhou City, Zhejiang province Binjiang District Jiang Hong Road 611 Building 1 room 106
-				Hangzhou  ZheJiang  310052
-				CN
-
-A4-38-CC   (hex)		Nintendo Co.,Ltd
-A438CC     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-74-72-1E   (hex)		Edison Labs Inc.
-74721E     (base 16)		Edison Labs Inc.
-				1122 Stanyan St
-				San Francisco  CA  94117
-				US
-
-8C-4C-DC   (hex)		PLANEX COMMUNICATIONS INC.
-8C4CDC     (base 16)		PLANEX COMMUNICATIONS INC.
-				Planex Volta Bldg., 2-11-9 Ebisu-Nishi,Shibuya-ku,Tokyo 150-0021,Japan
-				Tokyo  Tokyo  150-0021
-				JP
-
-50-65-F3   (hex)		Hewlett Packard
-5065F3     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-3C-95-09   (hex)		Liteon Technology Corporation
-3C9509     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-BC-AB-7C   (hex)		TRnP KOREA Co Ltd
-BCAB7C     (base 16)		TRnP KOREA Co Ltd
-				room1308,239 SoHyungRo,WonMiGu,
-				BuChunCity  KyungKiDo  1135
-				KR
-
-64-CB-5D   (hex)		SIA TeleSet
-64CB5D     (base 16)		SIA TeleSet
-				Krāslavas iela 5
-				Vecstropi, Naujenes par., Daugavpils distr.    LV-5413
-				LV
-
-58-21-E9   (hex)		TWPI
-5821E9     (base 16)		TWPI
-				PMB# 335; 1121 Annapolis Road
-				Odenton  MD  21113
-				US
-
-C4-9F-4C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C49F4C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-70-4A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C704A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F0-E3-DC   (hex)		Tecon MT, LLC
-F0E3DC     (base 16)		Tecon MT, LLC
-				3rd Khoroshevskaya st - 20
-				Moscow    123298
-				RU
-
-A8-DA-01   (hex)		Shenzhen NUOLIJIA Digital Technology Co.,Ltd
-A8DA01     (base 16)		Shenzhen NUOLIJIA Digital Technology Co.,Ltd
-				A Area of The Second Flood and D Area of The First Floor,Factory Building A,Youxinda Industrial Park,Gengyu Road,Tianliao Community,Gongming Street Office,Guangming New District,Shenzhen City,Guangdong,P.R.China
-				Shenzhen  Guangdong  518000
-				CN
-
-7C-25-86   (hex)		Juniper Networks
-7C2586     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-F0-41-C8   (hex)		IEEE Registration Authority
-F041C8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-CC-99-16   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-CC9916     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-EC-7F-C6   (hex)		ECCEL CORPORATION SAS
-EC7FC6     (base 16)		ECCEL CORPORATION SAS
-				CRA 106 15A 25 LT 88 MZ 17 BG 1, ZONA FRANCA BOGOTA
-				BOGOTA  D.C.  110921
-				CO
-
-4C-AB-FC   (hex)		zte corporation
-4CABFC     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-10-D8   (hex)		CALISTA
-0010D8     (base 16)		CALISTA
-				56A Packhorse Road
-				Bucks SL9 8EF  ENGLAND  
-				GB
-
-00-21-94   (hex)		Ping Communication
-002194     (base 16)		Ping Communication
-				Brenden 18
-				Appenzell Meistersrüte  AI  9050
-				CH
-
-5C-5A-EA   (hex)		FORD
-5C5AEA     (base 16)		FORD
-				17425 Federal Drive 
-				Allen Park  MI  48101
-				US
-
-00-0B-7B   (hex)		Test-Um Inc.
-000B7B     (base 16)		Test-Um Inc.
-				808 Calle Plano
-				Camarillo  CA  93012
-				US
-
-30-FD-38   (hex)		Google, Inc.
-30FD38     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-00-13-86   (hex)		ABB Inc/Totalflow
-001386     (base 16)		ABB Inc/Totalflow
-				123
-				Bartlesville  OK  74006
-				US
-
-00-3C-10   (hex)		Cisco Systems, Inc
-003C10     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-54-A6-5C   (hex)		Technicolor CH USA Inc.
-54A65C     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-BC-DD-C2   (hex)		Espressif Inc.
-BCDDC2     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-98-D8-63   (hex)		Shanghai High-Flying Electronics Technology Co., Ltd
-98D863     (base 16)		Shanghai High-Flying Electronics Technology Co., Ltd
-				Room 1002 ,#1Building,No.3000 Longdong Avenue,Pudong District,Shanghai,China
-				shanghai  shanghai  201203
-				CN
-
-0C-F3-46   (hex)		Xiaomi Communications Co Ltd
-0CF346     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-7C-FF-4D   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-7CFF4D     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-C8-8F-26   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-C88F26     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-70-3A-73   (hex)		Shenzhen Sundray Technologies Company Limited
-703A73     (base 16)		Shenzhen Sundray Technologies Company Limited
-				6th Floor,Block A1, Nanshan iPark, No.1001 XueYuan Road, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-10-F9-EB   (hex)		Industria Fueguina de Relojería Electrónica s.a.
-10F9EB     (base 16)		Industria Fueguina de Relojería Electrónica s.a.
-				Sarmiento 2920
-				Rio Grande  Tierra de Fuego  V9420GIV
-				AR
-
-80-AD-16   (hex)		Xiaomi Communications Co Ltd
-80AD16     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-04-4E-AF   (hex)		LG Innotek
-044EAF     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-18-94-C6   (hex)		ShenZhen Chenyee Technology Co., Ltd.
-1894C6     (base 16)		ShenZhen Chenyee Technology Co., Ltd.
-				32F, Tower A, East Pacific International Center, No.7888, Shennan Avenue, Futian District
-				Shenzhen    518040
-				CN
-
-40-BD-32   (hex)		Texas Instruments
-40BD32     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-CC-8E-71   (hex)		Cisco Systems, Inc
-CC8E71     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-38-F5-54   (hex)		HISENSE ELECTRIC CO.,LTD
-38F554     (base 16)		HISENSE ELECTRIC CO.,LTD
-				No. 218, Qianwangang Rd
-				Qingdao  Shandong  266555
-				CN
-
-88-E9-0F   (hex)		innomdlelab
-88E90F     (base 16)		innomdlelab
-				Unnam 1 gil, 3 
-				Seocho-gu  Seoul  06778
-				KR
-
-00-30-74   (hex)		EQUIINET LTD.
-003074     (base 16)		EQUIINET LTD.
-				EDISON HOUSE
-				 SWINDON, SN3 5JA    
-				GB
-
-EC-9B-8B   (hex)		Hewlett Packard Enterprise
-EC9B8B     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-B0-B3-AD   (hex)		HUMAX Co., Ltd.
-B0B3AD     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-18-A2-8A   (hex)		Essel-T Co., Ltd
-18A28A     (base 16)		Essel-T Co., Ltd
-				1211 kranztechno, 388 Dunchon-daero
-				Seongnam-si  Jungwon-gu, Gyeonggi-do  13403
-				KR
-
-20-36-5B   (hex)		Megafone Limited
-20365B     (base 16)		Megafone Limited
-				Unit 702,7/F,Bankok Bank Building,NO.18 Bonham Strand West
-				Hong Kong    999077
-				HK
-
-E8-DE-00   (hex)		ChongQing GuanFang Technology Co.,LTD
-E8DE00     (base 16)		ChongQing GuanFang Technology Co.,LTD
-				2F, A District,No.3 Middle Section of Mount Huangshan Avenue
-				ChongQing  ChongQing  401121
-				CN
-
-70-C9-4E   (hex)		Liteon Technology Corporation
-70C94E     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-70-D0-81   (hex)		Beijing Netpower Technologies Inc.
-70D081     (base 16)		Beijing Netpower Technologies Inc.
-				Room 201, Block B, NO. 15 Building, EastZone
-				Courtyard10, Xibeiwang East Road  Haidian District, Beijing  100094
-				CN
-
-FC-64-3A   (hex)		Samsung Electronics Co.,Ltd
-FC643A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-51-5B   (hex)		Samsung Electronics Co.,Ltd
-A8515B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-B7-E5   (hex)		Rayson Technology Co., Ltd.
-54B7E5     (base 16)		Rayson Technology Co., Ltd.
-				1F No.9 R&D Rd.II, Science-Based Industrial Park
-				Hsin-Chu    300
-				TW
-
-94-63-72   (hex)		vivo Mobile Communication Co., Ltd.
-946372     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-BC-0F-A7   (hex)		Ouster
-BC0FA7     (base 16)		Ouster
-				350 Treat Ave
-				San Francisco  CA  94110
-				US
-
-F8-C1-20   (hex)		Xi'an Link-Science Technology Co.,Ltd
-F8C120     (base 16)		Xi'an Link-Science Technology Co.,Ltd
-				1/F，Block F,Building zhichao Weilai,No.999,10#Caotan Road,Xi'an
-				xi'an    710016
-				CN
-
-F0-C9-D1   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-F0C9D1     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-34-7E-5C   (hex)		Sonos, Inc.
-347E5C     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-B4-FB-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B4FBF9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-6F-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-506F77     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-41-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C41E9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-E8-24   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3CE824     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-5A-06   (hex)		SHARP Corporation
-345A06     (base 16)		SHARP Corporation
-				1 Takumi-cho, Sakai-ku
-				Sakai City  Osaka  590-8522
-				JP
-
-00-19-36   (hex)		STERLITE OPTICAL TECHNOLOGIES LIMITED
-001936     (base 16)		STERLITE OPTICAL TECHNOLOGIES LIMITED
-				E-1,E-2,&E-3
-				AURANGABAD  MAHARASTRA  431136
-				IN
-
-B8-9F-09   (hex)		Wistron Neweb Corporation
-B89F09     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-04-02-CA   (hex)		Shenzhen Vtsonic Co.,ltd
-0402CA     (base 16)		Shenzhen Vtsonic Co.,ltd
-				No.35,the 2nd Industrial Zone,Tangxiayong Village,Songgang Town,Bao'an District,Shenzhen,China.
-				Shenzhen  Guangdong  518102
-				CN
-
-3C-FB-5C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-3CFB5C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-74-40-BB   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-7440BB     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-1C-11-61   (hex)		Ciena Corporation
-1C1161     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-B4-DE-31   (hex)		Cisco Systems, Inc
-B4DE31     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-40-27   (hex)		zte corporation
-A44027     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B4-F7-A1   (hex)		LG Electronics (Mobile Communications)
-B4F7A1     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-28-ED-E0   (hex)		AMPAK Technology, Inc.
-28EDE0     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-88-BD-45   (hex)		Samsung Electronics Co.,Ltd
-88BD45     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-FC-F0   (hex)		Samsung Electronics Co.,Ltd
-54FCF0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-6A-85   (hex)		Samsung Electronics Co.,Ltd
-306A85     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-4C-DD-31   (hex)		Samsung Electronics Co.,Ltd
-4CDD31     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-B6-EE   (hex)		Dish Technologies Corp
-88B6EE     (base 16)		Dish Technologies Corp
-				94 Inverness Terrace E
-				Englewood  CO  80112
-				US
-
-70-F2-20   (hex)		Actiontec Electronics, Inc
-70F220     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-D0-81-7A   (hex)		Apple, Inc.
-D0817A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-CA-33   (hex)		Apple, Inc.
-98CA33     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-AB-1E   (hex)		Apple, Inc.
-68AB1E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-EF-00   (hex)		Apple, Inc.
-70EF00     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-77-65   (hex)		Tiesse SpA
-C87765     (base 16)		Tiesse SpA
-				Via Asti
-				Ivrea  TO  10015
-				IT
-
-2C-37-C5   (hex)		Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd
-2C37C5     (base 16)		Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd
-				ingdao high-tech park haier road 1
-				Qingdao  Shandong  266101
-				CN
-
-CC-40-D0   (hex)		NETGEAR
-CC40D0     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-7C-76-30   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-7C7630     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-98-22-EF   (hex)		Liteon Technology Corporation
-9822EF     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-78-80-38   (hex)		FUNAI ELECTRIC CO., LTD.
-788038     (base 16)		FUNAI ELECTRIC CO., LTD.
-				7-1, NAKAGAITO 7-CHOME
-				DAITO  OSAKA  5740013
-				JP
-
-BC-FF-EB   (hex)		Motorola Mobility LLC, a Lenovo Company
-BCFFEB     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-00-01-30   (hex)		Extreme Networks, Inc.
-000130     (base 16)		Extreme Networks, Inc.
-				3585 Monroe Street
-				Santa Clara  CA  95051
-				US
-
-FC-0A-81   (hex)		Extreme Networks, Inc.
-FC0A81     (base 16)		Extreme Networks, Inc.
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-F0-45-DA   (hex)		Texas Instruments
-F045DA     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B8-07-16   (hex)		vivo Mobile Communication Co., Ltd.
-B80716     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-A8-EE-C6   (hex)		Muuselabs NV/SA
-A8EEC6     (base 16)		Muuselabs NV/SA
-				Rue du Tocsin 12
-				Brussels    1000
-				BE
-
-E4-F0-42   (hex)		Google, Inc.
-E4F042     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-40-48-FD   (hex)		IEEE Registration Authority
-4048FD     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-20-B3-99   (hex)		Enterasys
-20B399     (base 16)		Enterasys
-				50 Minuteman Rd
-				Andover  MA  01810
-				US
-
-CC-2D-21   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-CC2D21     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-00-40-97   (hex)		DATEX DIVISION OF
-004097     (base 16)		DATEX DIVISION OF
-				INSTRUMENTARIUM CORP.
-				    
-				FI
-
-9C-4F-CF   (hex)		TCT mobile ltd
-9C4FCF     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-D8-96-E0   (hex)		Alibaba Cloud Computing Ltd.
-D896E0     (base 16)		Alibaba Cloud Computing Ltd.
-				Yuhang District of Hangzhou Wenyi Road, Building 1, No. 969 Xixi Park, Zhejiang Province
-				Hangzhou  Zhejiang  310000
-				CN
-
-00-18-62   (hex)		Seagate Technology
-001862     (base 16)		Seagate Technology
-				1280 Disc Drive
-				Shakopee  MN  55379
-				US
-
-1C-EE-C9   (hex)		Elo touch solutions
-1CEEC9     (base 16)		Elo touch solutions
-				1033 McCarthy Boulevard
-				Milpitas  CA  95035
-				US
-
-00-0C-50   (hex)		Seagate Technology
-000C50     (base 16)		Seagate Technology
-				M/S NW1F01
-				Longmont  CO  80503
-				US
-
-34-2A-F1   (hex)		Texas Instruments
-342AF1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-C8-DE-C9   (hex)		Coriant
-C8DEC9     (base 16)		Coriant
-				1415 W. Diehl Rd
-				Naperville  IL  60563
-				US
-
-44-D5-A5   (hex)		AddOn Computer
-44D5A5     (base 16)		AddOn Computer
-				15775 Gateway cir
-				tustin  CA  92780
-				US
-
-38-F7-3D   (hex)		Amazon Technologies Inc.
-38F73D     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-C0-A0-0D   (hex)		ARRIS Group, Inc.
-C0A00D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-0C-61-11   (hex)		Anda Technologies SAC
-0C6111     (base 16)		Anda Technologies SAC
-				Av. Santa Cruz 888, Miraflores
-				Lima  Peru  Lima18
-				PE
-
-00-22-C4   (hex)		epro GmbH
-0022C4     (base 16)		epro GmbH
-				Joebkesweg 3
-				Gronau  NRW  48599
-				DE
-
-1C-33-0E   (hex)		PernixData
-1C330E     (base 16)		PernixData
-				1745 Technology Drive, Suite 800
-				San Jose  CA  95110
-				US
-
-B8-F7-4A   (hex)		RCNTEC
-B8F74A     (base 16)		RCNTEC
-				Polkovaya street 3
-				Moscow    127018
-				RU
-
-64-51-06   (hex)		Hewlett Packard
-645106     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-0C-15-39   (hex)		Apple, Inc.
-0C1539     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-56-97   (hex)		Amazon Technologies Inc.
-6C5697     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-05-FF   (hex)		SNS Solutions, Inc.
-0005FF     (base 16)		SNS Solutions, Inc.
-				2nd Fl. Hill House,
-				    
-				KR
-
-F8-7B-20   (hex)		Cisco Systems, Inc
-F87B20     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-AA-DB   (hex)		Nanjing PANENG Technology Development Co.,Ltd
-E0AADB     (base 16)		Nanjing PANENG Technology Development Co.,Ltd
-				NO.6 Paneng Road,Nanjing High-tech Zone,Jiang Su,China
-				Nanjing     210061
-				CN
-
-EC-F4-51   (hex)		Arcadyan Corporation
-ECF451     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-58-12-43   (hex)		AcSiP Technology Corp.
-581243     (base 16)		AcSiP Technology Corp.
-				3F., No.22, Dalin Rd.,
-				Taoyuan  Taoyuan County  33067
-				TW
-
-A8-9F-EC   (hex)		ARRIS Group, Inc.
-A89FEC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-BE-9E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-00BE9E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-54-C5-7A   (hex)		Sunnovo International Limited
-54C57A     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-58-C1-7A   (hex)		Cambium Networks Limited
-58C17A     (base 16)		Cambium Networks Limited
-				Unit B2, Linhay Business Park,
-				Ashburton  Devon  TQ13 7UP
-				GB
-
-38-01-9F   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-38019F     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-24-5C-CB   (hex)		AXIe Consortium, Inc.
-245CCB     (base 16)		AXIe Consortium, Inc.
-				P.O. Box 1016
-				Niwot  CO  80544-1016
-				US
-
-60-9B-C8   (hex)		Hipad Intelligent Technology Co., Ltd.
-609BC8     (base 16)		Hipad Intelligent Technology Co., Ltd.
-				No. 688, East of Huangtang Street, LinkongEconomy District
-				Nanchang  Jiangxi  330000
-				CN
-
-40-6A-8E   (hex)		Hangzhou Puwell OE Tech Ltd.
-406A8E     (base 16)		Hangzhou Puwell OE Tech Ltd.
-				Letel Technology Park, 500 Qiuyi Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-1C-0F-AF   (hex)		Lucid Vision Labs
-1C0FAF     (base 16)		Lucid Vision Labs
-				Unit 130 - 13200 Delf Place
-				Richmond  BC  V6V2A2
-				CA
-
-88-B4-A6   (hex)		Motorola Mobility LLC, a Lenovo Company
-88B4A6     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-28-CF-08   (hex)		ESSYS
-28CF08     (base 16)		ESSYS
-				gaetbeol-ro
-				Incheon    21999
-				KR
-
-00-21-28   (hex)		Oracle Corporation
-002128     (base 16)		Oracle Corporation
-				17 Network Circle
-				Menlo Park  CA  95025
-				US
-
-00-1C-73   (hex)		Arista Networks
-001C73     (base 16)		Arista Networks
-				5470 Great America Pkwy
-				Santa Clara    95054
-				US
-
-2C-8A-72   (hex)		HTC Corporation
-2C8A72     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-38-AD-8E   (hex)		New H3C Technologies Co., Ltd
-38AD8E     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-34-D0-B8   (hex)		IEEE Registration Authority
-34D0B8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D0-67-26   (hex)		Hewlett Packard Enterprise
-D06726     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-EC-FA-F4   (hex)		SenRa Tech Pvt. Ltd
-ECFAF4     (base 16)		SenRa Tech Pvt. Ltd
-				133, First Floor, Lane No. 1, Westend Marg, Saidulajab
-				New Delhi    110030
-				IN
-
-D8-8F-76   (hex)		Apple, Inc.
-D88F76     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-9C-28   (hex)		Apple, Inc.
-409C28     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-38-79   (hex)		RICOH COMPANY, LTD.
-583879     (base 16)		RICOH COMPANY, LTD.
-				1005, Shimo-ogino
-				Atsugi-City  Kanagawa-Pref.  243-0298
-				JP
-
-F4-4C-70   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-F44C70     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-C8-E7-F0   (hex)		Juniper Networks
-C8E7F0     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-B0-93-5B   (hex)		ARRIS Group, Inc.
-B0935B     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F4-49-EF   (hex)		EMSTONE
-F449EF     (base 16)		EMSTONE
-				#310, Ace Techno Tower 3rd, 38 Digital-ro-29-gil
-				Guro-Gu  Seoul  08381
-				KR
-
-54-DF-24   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-54DF24     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-AC-1D-DF   (hex)		IEEE Registration Authority
-AC1DDF     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E8-D8-19   (hex)		AzureWave Technology Inc.
-E8D819     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-78-2D-7E   (hex)		TRENDnet, Inc.
-782D7E     (base 16)		TRENDnet, Inc.
-				20675 Manhattan Place
-				Torrance  CA  90501
-				US
-
-74-1A-E0   (hex)		IEEE Registration Authority
-741AE0     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-24-B2-09   (hex)		Avaya Inc
-24B209     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-FC-65-DE   (hex)		Amazon Technologies Inc.
-FC65DE     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-B0-6E-BF   (hex)		ASUSTek COMPUTER INC.
-B06EBF     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-60-3D-26   (hex)		Technicolor CH USA Inc.
-603D26     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-BC-90-3A   (hex)		Robert Bosch GmbH
-BC903A     (base 16)		Robert Bosch GmbH
-				Postfach 1661
-				Leonberg    71226
-				DE
-
-D0-B1-28   (hex)		Samsung Electronics Co.,Ltd
-D0B128     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-54-51   (hex)		Samsung Electronics Co.,Ltd
-BC5451     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-74-86-0B   (hex)		Cisco Systems, Inc
-74860B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-18-2D-98   (hex)		Jinwoo Industrial system
-182D98     (base 16)		Jinwoo Industrial system
-				7F,Jinwoo Building,149 dosan-daero
-				seoul  gangnamgu  06036
-				KR
-
-D8-A5-34   (hex)		Spectronix Corporation
-D8A534     (base 16)		Spectronix Corporation
-				3-28-15, Tarumi-cho
-				Suita-city  Osaka  564-0062
-				JP
-
-EC-51-BC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-EC51BC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-F0-79-E8   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-F079E8     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-60-18-03   (hex)		Daikin Air-conditioning (Shanghai) Co., Ltd.
-601803     (base 16)		Daikin Air-conditioning (Shanghai) Co., Ltd.
-				318 Shen Fu Road, Xin Zhuang Industry Zone, Shanghai, 201108, China
-				Shanghai    201108
-				CN
-
-00-A0-96   (hex)		MITSUMI ELECTRIC CO.,LTD.
-00A096     (base 16)		MITSUMI ELECTRIC CO.,LTD.
-				2-11-2, Tsurumaki
-				Tama-shi  Tokyo  206-8567
-				JP
-
-78-61-7C   (hex)		MITSUMI ELECTRIC CO.,LTD.
-78617C     (base 16)		MITSUMI ELECTRIC CO.,LTD.
-				2-11-2, Tsurumaki
-				Tama-shi  Tokyo  206-8567
-				JP
-
-94-0E-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-940E6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-FB-50   (hex)		RoomReady/Zdi, Inc.
-64FB50     (base 16)		RoomReady/Zdi, Inc.
-				2200 N. Main Street
-				Normal  IL  61761
-				US
-
-74-EA-C8   (hex)		New H3C Technologies Co., Ltd
-74EAC8     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-B4-D6-4E   (hex)		Caldero Limited
-B4D64E     (base 16)		Caldero Limited
-				Concordia Works, 30 Sovereign Street
-				Leeds  West Yorkshire  LS1 4BA
-				GB
-
-F8-9D-BB   (hex)		Tintri
-F89DBB     (base 16)		Tintri
-				303 Ravendale Dr
-				Mountain View  CA  94070
-				US
-
-D8-A0-1D   (hex)		Espressif Inc.
-D8A01D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-C4-F3-12   (hex)		Texas Instruments
-C4F312     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-90-4E-91   (hex)		IEEE Registration Authority
-904E91     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-5C-E8-B7   (hex)		Oraimo Technology Limited
-5CE8B7     (base 16)		Oraimo Technology Limited
-				RMS 05-15，13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HONG KONG  HONG KONG  999077
-				HK
-
-3C-11-B2   (hex)		Fraunhofer FIT
-3C11B2     (base 16)		Fraunhofer FIT
-				Schloss Birlinghoven
-				Sankt Augustin    53754
-				DE
-
-10-4B-46   (hex)		Mitsubishi Electric Corporation
-104B46     (base 16)		Mitsubishi Electric Corporation
-				2-7-3
-				Chiyoda-ku  Tokyo  100-8310
-				JP
-
-DC-0C-2D   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-DC0C2D     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-D0-67-E5   (hex)		Dell Inc.
-D067E5     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-8C-FE-B4   (hex)		VSOONTECH ELECTRONICS CO., LIMITED
-8CFEB4     (base 16)		VSOONTECH ELECTRONICS CO., LIMITED
-				18th, Floor, On Hong Commericial Building, 145 Hennessy Road, Wanchai, HONG KONG
-				HongKong    999077
-				HK
-
-CC-66-B2   (hex)		Nokia
-CC66B2     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-9C-65-EE   (hex)		DASAN Network Solutions
-9C65EE     (base 16)		DASAN Network Solutions
-				DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu
-				Seongnam-si  Gyeonggi-do  13493
-				KR
-
-78-CA-04   (hex)		Nokia Corporation
-78CA04     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-34-29-8F   (hex)		IEEE Registration Authority
-34298F     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-5C-EA-1D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-5CEA1D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-18-14-56   (hex)		Nokia Corporation
-181456     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu  Ou  90590
-				FI
-
-00-17-C8   (hex)		KYOCERA Display Corporation
-0017C8     (base 16)		KYOCERA Display Corporation
-				2-14-9, Tamagawadai
-				Tokyo    158-8610
-				JP
-
-38-E2-DD   (hex)		zte corporation
-38E2DD     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-88-5D-FB   (hex)		zte corporation
-885DFB     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-58-B4-2D   (hex)		YSTen Technology Co.,Ltd
-58B42D     (base 16)		YSTen Technology Co.,Ltd
-				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
-				Beijing    100101
-				CN
-
-E0-48-D3   (hex)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
-E048D3     (base 16)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
-				No.999,Dacheng East Road,
-				Fenghua  Zhejiang  315500
-				CN
-
-58-E2-8F   (hex)		Apple, Inc.
-58E28F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-7B-8A   (hex)		Apple, Inc.
-787B8A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-16-FC   (hex)		Juniper Networks
-4C16FC     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-48-BC-A6   (hex)		​ASUNG TECHNO CO.,Ltd
-48BCA6     (base 16)		​ASUNG TECHNO CO.,Ltd
-				462, Dogok-ro, Songpa-gu, Seoul, Republic of Korea
-				SEOUL  Repubilc of KOREA  05574
-				KR
-
-B0-09-DA   (hex)		Ring Solutions
-B009DA     (base 16)		Ring Solutions
-				1200 Atwater Drive, Suite 225
-				Malvern  PA  19355
-				US
-
-00-05-4F   (hex)		Garmin International
-00054F     (base 16)		Garmin International
-				1200 E. 151st St
-				Olathe  KS  66062
-				US
-
-00-5C-86   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-005C86     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-30-05-3F   (hex)		JTI Co.,Ltd.
-30053F     (base 16)		JTI Co.,Ltd.
-				102-1508, 36, Bucheon-ro 198beon-gil, 
-				Buchcheon-si  Gyeonggi-do  14557
-				KR
-
-B8-DB-1C   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-B8DB1C     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-3C-10-E6   (hex)		PHAZR Inc.
-3C10E6     (base 16)		PHAZR Inc.
-				8, Presitige Circle, Suite 104
-				Allen  TX  75002
-				US
-
-90-45-06   (hex)		Tokyo Boeki Medisys Inc.
-904506     (base 16)		Tokyo Boeki Medisys Inc.
-				1-14-21, Higashitoyoda
-				 Hino  Tokyo  191-0052
-				JP
-
-00-21-A1   (hex)		Cisco Systems, Inc
-0021A1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-FC-B6-98   (hex)		Cambridge Industries(Group) Co.,Ltd.
-FCB698     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				22 Floor,Qilai Tower;889 Yishan Road
-				Shanghai  CHINA  200233
-				CN
-
-00-01-CD   (hex)		ARtem
-0001CD     (base 16)		ARtem
-				Olgastraße 152
-				    
-				DE
-
-5C-54-6D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5C546D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-A1-D1   (hex)		Sagemcom Broadband SAS
-84A1D1     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-90-9D-7D   (hex)		ARRIS Group, Inc.
-909D7D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-78-8C-4D   (hex)		Indyme Solutions, LLC
-788C4D     (base 16)		Indyme Solutions, LLC
-				8295 Aero Place Ste 260
-				San Diego  CA  92123
-				US
-
-78-BC-1A   (hex)		Cisco Systems, Inc
-78BC1A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-59   (hex)		Sagemcom Broadband SAS
-000E59     (base 16)		Sagemcom Broadband SAS
-				2, rue du petit Albi
-				CERGY SAINT CHRISTOPHE  val d'Oise  95800
-				FR
-
-10-1D-51   (hex)		8Mesh Networks Limited
-101D51     (base 16)		8Mesh Networks Limited
-				Unit 607, 6/F, Yen Sheng Centre,
-				64 Hoi Yuen Road  Kwun Tong  000
-				HK
-
-DC-EB-53   (hex)		Wuhan QianXiao Elecronic Technology CO.,LTD
-DCEB53     (base 16)		Wuhan QianXiao Elecronic Technology CO.,LTD
-				Guanggu Xinzhongxin, No.303 of Guanggu road, East lake development zone
-				wuhan  hubei  430000
-				CN
-
-EC-8A-C7   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-EC8AC7     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-88-36-5F   (hex)		LG Electronics (Mobile Communications)
-88365F     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-28-8C-B8   (hex)		zte corporation
-288CB8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-FC-7F-56   (hex)		CoSyst Control Systems GmbH
-FC7F56     (base 16)		CoSyst Control Systems GmbH
-				Martin-Albert-Str. 1
-				Nürnberg  Bayern  90491
-				DE
-
-2C-40-53   (hex)		Samsung Electronics Co.,Ltd
-2C4053     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-0C-8F-FF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C8FFF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-B1-21   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-54B121     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-81-02   (hex)		Sercomm Corporation.
-788102     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-84-AA-9C   (hex)		MitraStar Technology Corp.
-84AA9C     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-F0-EF-D2   (hex)		TF PAYMENT SERVICE CO., LTD
-F0EFD2     (base 16)		TF PAYMENT SERVICE CO., LTD
-				5F Shibadaimon Center Building, 1-10-11 Shibadaimon
-				Minato-ku  Tokyo  105-0012
-				JP
-
-24-B2-DE   (hex)		Espressif Inc.
-24B2DE     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-00-07-26   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-000726     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				A211-A213 & B201-B210, 2F, Baiying Building, 1019#, Nanhai RD, Shekou Party, Nanshan District, 
-				Shenzhen  Guangdong  518067
-				CN
-
-FC-8B-97   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-FC8B97     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
-				Shenzhen  Guangdong  518067
-				CN
-
-2C-AB-25   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-2CAB25     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
-				Shenzhen  Guangdong  518067
-				CN
-
-1C-A5-32   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-1CA532     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				1#SongGang RD, Bao'an Dist., Shenzhen, Guangdong,China
-				Shenzhen  Guangdong  518109
-				CN
-
-00-0C-03   (hex)		HDMI Licensing, LLC
-000C03     (base 16)		HDMI Licensing, LLC
-				1060 East Arques Ave.
-				Sunnyvale  CA  94085
-				US
-
-7C-BA-CC   (hex)		IEEE Registration Authority
-7CBACC     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-94-F1-28   (hex)		Hewlett Packard Enterprise
-94F128     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville    95747
-				US
-
-10-1B-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-101B54     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-A8-0C-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A80C63     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-C3-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CC307     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-10-7F   (hex)		Ruckus Wireless
-E0107F     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-C4-01-7C   (hex)		Ruckus Wireless
-C4017C     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-04-FA-3F   (hex)		Opticore Inc.
-04FA3F     (base 16)		Opticore Inc.
-				97 Jungbudaero448beongil, Yeongtonggu
-				Suwonsi  Gyeonggido  16521
-				KR
-
-54-02-37   (hex)		Teltronic AG
-540237     (base 16)		Teltronic AG
-				Gewerbestrasse 9
-				Biberist    4562
-				CH
-
-4C-B0-08   (hex)		Shenzhen Gwelltimes Technology Co.,Ltd
-4CB008     (base 16)		Shenzhen Gwelltimes Technology Co.,Ltd
-				A4 building 15floor Zhongying Jewelry Industrial Park Bulan Road No.31 Nanwan Street Longgang District Shenzhen City China
-				Shenzhen    518112
-				CN
-
-E8-6F-F2   (hex)		Actiontec Electronics, Inc
-E86FF2     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-50-18   (hex)		AMIT, Inc.
-005018     (base 16)		AMIT, Inc.
-				No.32, Huangong Rd.,
-				Yongkang City,  Tainan County  71041
-				TW
-
-70-DE-F9   (hex)		FAI WAH INTERNATIONAL (HONG KONG) LIMITED
-70DEF9     (base 16)		FAI WAH INTERNATIONAL (HONG KONG) LIMITED
-				Room 19, 8F.,Corporation Park, 11 On Lai Street,Shatin,Shek Mun,N.T.Hong Kong
-				Hong Kong    999077
-				HK
-
-B0-EA-BC   (hex)		ASKEY COMPUTER CORP
-B0EABC     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-94-C6-91   (hex)		EliteGroup Computer Systems Co., LTD
-94C691     (base 16)		EliteGroup Computer Systems Co., LTD
-				No.239, Sec. 2, TiDing Blvd. Nei-Hu Dist.
-				Taipei  Taiwan  11439
-				TW
-
-3C-F5-91   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-3CF591     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-60-21-01   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-602101     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-7C-EB-7F   (hex)		Dmet Products Corp.
-7CEB7F     (base 16)		Dmet Products Corp.
-				118, Fujisoft Akihabara Bldg 12F, Kanda Neribeicho 3
-				Chiyodaku  Tokyo  1010022
-				JP
-
-8C-85-80   (hex)		Smart Innovation LLC
-8C8580     (base 16)		Smart Innovation LLC
-				7F,Tower B,Jianxing
-				ShenZhen  GuangZhou  518055
-				CN
-
-40-42-29   (hex)		Layer3TV, Inc
-404229     (base 16)		Layer3TV, Inc
-				1660 Wynkoop St - Suite 800
-				Denver  CO  80202
-				US
-
-FC-2F-6B   (hex)		Everspin Technologies, Inc.
-FC2F6B     (base 16)		Everspin Technologies, Inc.
-				1347 N. Alma School Rd., Suite 220
-				Chandler  AZ  85224
-				US
-
-28-7B-09   (hex)		zte corporation
-287B09     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-25-C4   (hex)		Ruckus Wireless
-0025C4     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-C0-C5-20   (hex)		Ruckus Wireless
-C0C520     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-78-B2-8D   (hex)		Beijing Tengling Technology CO.Ltd 
-78B28D     (base 16)		Beijing Tengling Technology CO.Ltd 
-				beijing haidian shangdi san jie
-				beijing    100086
-				CN
-
-A8-80-38   (hex)		ShenZhen MovingComm Technology Co., Limited
-A88038     (base 16)		ShenZhen MovingComm Technology Co., Limited
-				5F, FuXinFa Industrial Park, LiuXianDong Industrial Zone,
-				ShenZhen  GuangDong   518055
-				CN
-
-F8-1D-90   (hex)		Solidwintech
-F81D90     (base 16)		Solidwintech
-				6th Floor, SOLiD Space 220 Pangyoyeok-ro, Bundang-gu
-				Seongnam-si  Gyeongi-do  13493
-				KR
-
-A0-6A-44   (hex)		Vizio, Inc
-A06A44     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-DC-BE-7A   (hex)		Zhejiang Nurotron Biotechnology Co.
-DCBE7A     (base 16)		Zhejiang Nurotron Biotechnology Co.
-				Building4, No.99 Xiaomao Rd
-				Hangzhou  zhejiang  310011
-				CN
-
-34-38-B7   (hex)		HUMAX Co., Ltd.
-3438B7     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-CC-06-77   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-CC0677     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-78-45-01   (hex)		Biamp Systems
-784501     (base 16)		Biamp Systems
-				9300 SW Gemini Dr
-				Beaverton  OR  97008
-				US
-
-30-9C-23   (hex)		Micro-Star INTL CO., LTD.
-309C23     (base 16)		Micro-Star INTL CO., LTD.
-				No.69, Lide St.,
-				New Taipei City  Taiwan  235
-				TW
-
-54-D7-51   (hex)		Proximus
-54D751     (base 16)		Proximus
-				Bld du Roi Albert II 27
-				Brussels    1030
-				BE
-
-14-78-0B   (hex)		Varex Imaging Deutschland AG
-14780B     (base 16)		Varex Imaging Deutschland AG
-				Zweigniederlassung/Branch Walluf
-				In der Rehbach 22  Walluf  65396
-				DE
-
-AC-AF-B9   (hex)		Samsung Electronics Co.,Ltd
-ACAFB9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-B1-11   (hex)		Intel Corporate
-88B111     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-8C-39-5C   (hex)		Bit4id Srl
-8C395C     (base 16)		Bit4id Srl
-				Via Diocleziano, 107
-				Naples    80125
-				IT
-
-D4-25-8B   (hex)		Intel Corporate
-D4258B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-04-1B-6D   (hex)		LG Electronics (Mobile Communications)
-041B6D     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-F4-41-56   (hex)		Arrikto Inc.
-F44156     (base 16)		Arrikto Inc.
-				3505 El Camino Real
-				Palo Alto  CA  94306
-				US
-
-68-8D-B6   (hex)		AETEK INC.
-688DB6     (base 16)		AETEK INC.
-				 3F, No.192, Lien-Cheng Rd., Chung-Ho,
-				 New Taipei City    23553
-				TW
-
-EC-F3-42   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-ECF342     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-50-FF-20   (hex)		Keenetic Limited
-50FF20     (base 16)		Keenetic Limited
-				1202, 12/F., AT TOWER, 180 ELECTRIC ROAD, NORTH POINT
-				HONG KONG    852
-				HK
-
-E4-57-40   (hex)		ARRIS Group, Inc.
-E45740     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-94-C2   (hex)		Intel Corporate
-F894C2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-70-D3-79   (hex)		Cisco Systems, Inc
-70D379     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-F8-2C   (hex)		Cisco Systems, Inc
-00F82C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-C1-B1   (hex)		Cisco Systems, Inc
-00C1B1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-FC-B1   (hex)		JJ Corp
-F4FCB1     (base 16)		JJ Corp
-				88 Soha-ro
-				Gwangmyeong-si    14316
-				KR
-
-D8-C8-E9   (hex)		Phicomm (Shanghai) Co., Ltd.
-D8C8E9     (base 16)		Phicomm (Shanghai) Co., Ltd.
-				3666 SiXian Rd.,Songjiang District
-				Shanghai  Shanghai  201616
-				CN
-
-7C-B9-60   (hex)		Shanghai X-Cheng telecom LTD
-7CB960     (base 16)		Shanghai X-Cheng telecom LTD
-				ROOM 401, Building 5, No.3000 LONG DONG Avenue, Pudong New District, Shanghai
-				Shanghai  Shanghai  201203
-				CN
-
-B0-3D-96   (hex)		Vision Valley FZ LLC
-B03D96     (base 16)		Vision Valley FZ LLC
-				Dubai Internet City
-				Dubai  Dubai  500294
-				AE
-
-98-6C-5C   (hex)		Jiangxi Gosun Guard Security Co.,Ltd
-986C5C     (base 16)		Jiangxi Gosun Guard Security Co.,Ltd
-				2rd floor,8 building Middle,Zhongxing Software Park,Changdong Avenue,Nanchang High Tech Zone,Nanchang city,Jiangxi province
-				Nan Chang City  Jiang Xi Province  330000
-				CN
-
-24-79-2A   (hex)		Ruckus Wireless
-24792A     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-30-D3-86   (hex)		zte corporation
-30D386     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-70-DB-98   (hex)		Cisco Systems, Inc
-70DB98     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B4-2A-0E   (hex)		Technicolor CH USA Inc.
-B42A0E     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-9C-C8-AE   (hex)		Becton, Dickinson  and Company
-9CC8AE     (base 16)		Becton, Dickinson  and Company
-				1 Becton Drive
-				Franklin Lakes  MA   07417-1880
-				US
-
-B0-35-9F   (hex)		Intel Corporate
-B0359F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-C0-D9-62   (hex)		ASKEY COMPUTER CORP
-C0D962     (base 16)		ASKEY COMPUTER CORP
-				10F,NO.119,JIANKANG RD.,ZHONGHE DIST XINBEI CITY
-				taipei  TAIPEI  23585
-				TW
-
-F8-0B-CB   (hex)		Cisco Systems, Inc
-F80BCB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-50-D3-7F   (hex)		Yu Fly Mikly Way Science and Technology Co., Ltd.
-50D37F     (base 16)		Yu Fly Mikly Way Science and Technology Co., Ltd.
-				6F, No. 1168 Huyi Road, Nanxiang Town Jiading District Shanghai 201800 CHINA
-				shanghai    201800
-				CN
-
-18-12-12   (hex)		Cepton Technologies
-181212     (base 16)		Cepton Technologies
-				103 Bonaventura Dr
-				San Jose  CA  95134
-				US
-
-70-D9-23   (hex)		vivo Mobile Communication Co., Ltd.
-70D923     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'an  DongGuan City,Guangdong  523860
-				CN
-
-B8-3A-08   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-B83A08     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-28-B4-48   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-28B448     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-05-01   (hex)		PEGATRON CORPORATION
-100501     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-2C-FA-A2   (hex)		Alcatel-Lucent Enterprise
-2CFAA2     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Rd
-				Calabasas  CA  91301
-				US
-
-A4-9B-F5   (hex)		Hybridserver Tec GmbH
-A49BF5     (base 16)		Hybridserver Tec GmbH
-				Gutenbergring 26a
-				Norderstedt  Schleswig-Holstein  22848
-				DE
-
-50-3D-A1   (hex)		Samsung Electronics Co.,Ltd
-503DA1     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-F0-97-E5   (hex)		TAMIO, INC
-F097E5     (base 16)		TAMIO, INC
-				12F-2, No.33, Sec. 1 , Mingsheng Rd.,Banqiao Dist
-				New Taipei City    22069
-				TW
-
-4C-1A-3D   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4C1A3D     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-08-02-8E   (hex)		NETGEAR
-08028E     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-E8-E7-32   (hex)		Alcatel-Lucent Enterprise
-E8E732     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Road
-				Calabasas  CA  91301
-				US
-
-B4-7C-9C   (hex)		Amazon Technologies Inc.
-B47C9C     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-F4-A7-39   (hex)		Juniper Networks
-F4A739     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-F4-70-AB   (hex)		vivo Mobile Communication Co., Ltd.
-F470AB     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-2C-5A-0F   (hex)		Cisco Systems, Inc
-2C5A0F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-31-24   (hex)		Cisco Systems, Inc
-2C3124     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-50-32-37   (hex)		Apple, Inc.
-503237     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-48-1A   (hex)		Apple, Inc.
-B0481A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-9C-DF   (hex)		Apple, Inc.
-B49CDF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-BF-6B   (hex)		Apple, Inc.
-48BF6B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-1D-B8   (hex)		ARRIS Group, Inc.
-2C1DB8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-58-82-1D   (hex)		H. Schomäcker GmbH
-58821D     (base 16)		H. Schomäcker GmbH
-				Heidestr. 183
-				Köln    51147
-				DE
-
-D8-A1-05   (hex)		Syslane, Co., Ltd.
-D8A105     (base 16)		Syslane, Co., Ltd.
-				#1201, Megacenter, SKntechno-park,, Sangdaeweon-dong, Joongweon-gu
-				Seongnam  Outside the US, Mexico, or Canada  462-721
-				KR
-
-BC-A0-42   (hex)		SHANGHAI FLYCO ELECTRICAL APPLIANCE CO.,LTD
-BCA042     (base 16)		SHANGHAI FLYCO ELECTRICAL APPLIANCE CO.,LTD
-				No.555,Guang Fu Lin east Road,Songjiang District
-				Shanghai  Shanghai  201613
-				CN
-
-3C-05-18   (hex)		Samsung Electronics Co.,Ltd
-3C0518     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-90-06-28   (hex)		Samsung Electronics Co.,Ltd
-900628     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-A9-FE   (hex)		GHIA Technology (Shenzhen) LTD
-B4A9FE     (base 16)		GHIA Technology (Shenzhen) LTD
-				RM 1606, BLDG 3rd, COFCO Clouds Mansion
-				Shenzhen    518101
-				CN
-
-08-B2-58   (hex)		Juniper Networks
-08B258     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-9C-84-BF   (hex)		Apple, Inc.
-9C84BF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-A0-D3   (hex)		IEEE Registration Authority
-1CA0D3     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-9C-FC-D1   (hex)		Aetheris Technology (Shanghai) Co., Ltd.
-9CFCD1     (base 16)		Aetheris Technology (Shanghai) Co., Ltd.
-				Room 225， Building No. 8, 433 Yuyuan Road
-				Shanghai  Shanghai  200040
-				CN
-
-CC-CE-1E   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-CCCE1E     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-0C-F4-D5   (hex)		Ruckus Wireless
-0CF4D5     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-7C-26-64   (hex)		Sagemcom Broadband SAS
-7C2664     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-AC-6B-0F   (hex)		CADENCE DESIGN SYSTEMS INC
-AC6B0F     (base 16)		CADENCE DESIGN SYSTEMS INC
-				2670 SEELY AVE
-				SAN JOSE  CA  95134
-				US
-
-C8-B5-AD   (hex)		Hewlett Packard Enterprise
-C8B5AD     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-7C-38-66   (hex)		Texas Instruments
-7C3866     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-0C-61-CF   (hex)		Texas Instruments
-0C61CF     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-9C-1D-58   (hex)		Texas Instruments
-9C1D58     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-38-05-AC   (hex)		Piller Group GmbH
-3805AC     (base 16)		Piller Group GmbH
-				Abgunst 24
-				Osterode    37520
-				DE
-
-34-6E-9D   (hex)		Ericsson AB
-346E9D     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-68-54-C1   (hex)		ColorTokens, Inc.
-6854C1     (base 16)		ColorTokens, Inc.
-				2101 Tasman Dr. Suite 200A
-				Santa Clara  CA  95054
-				US
-
-00-11-1B   (hex)		Targa Systems Div L-3 Communications
-00111B     (base 16)		Targa Systems Div L-3 Communications
-				2081 Merivale Rd
-				Ottawa  Ont  K2G 1G9
-				CA
-
-6C-75-0D   (hex)		WiFiSONG
-6C750D     (base 16)		WiFiSONG
-				Rm. 605, Building 3, No. 75 Wenyi West Road
-				Hangzhou  Zhejiang  310012
-				CN
-
-BC-3F-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC3F8F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-30-04   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-143004     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-DC-41   (hex)		YOUNGZONE CULTURE (SHANGHAI) CORP
-F4DC41     (base 16)		YOUNGZONE CULTURE (SHANGHAI) CORP
-				7-8th floor, #1 Building, 1006 Jinshajiang Road
-				Shanghai  Shanghai  200062
-				CN
-
-C4-83-6F   (hex)		Ciena Corporation
-C4836F     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-7C-C6-C4   (hex)		Kolff Computer Supplies b.v.
-7CC6C4     (base 16)		Kolff Computer Supplies b.v.
-				Kuipershaven 22
-				Dordrecht  Zuid-Holland  3311 AL
-				NL
-
-00-0F-4F   (hex)		PCS Systemtechnik GmbH
-000F4F     (base 16)		PCS Systemtechnik GmbH
-				66 Hillside Rd
-				Auckland    1310
-				NZ
-
-A8-0C-CA   (hex)		Shenzhen Sundray Technologies Company Limited
-A80CCA     (base 16)		Shenzhen Sundray Technologies Company Limited
-				6th Floor,Block A1, Nanshan iPark, No.1001 XueYuan Road, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-38-AA-3C   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-38AA3C     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				Suwon    443-743
-				US
-
-00-03-02   (hex)		Charles Industries, Ltd.
-000302     (base 16)		Charles Industries, Ltd.
-				5600 Apollo Drive
-				Rolling Meadows  IL  60008
-				US
-
-50-A4-D0   (hex)		IEEE Registration Authority
-50A4D0     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-80-00-10   (hex)		AT&T
-800010     (base 16)		AT&T
-				3300 E Renner Road
-				Richardson  TX  75082
-				US
-
-00-24-F1   (hex)		Shenzhen Fanhai Sanjiang Electronics Co., Ltd.
-0024F1     (base 16)		Shenzhen Fanhai Sanjiang Electronics Co., Ltd.
-				3Floor-Guangcai Xintiandi Building,Nanshan Rd,Nanshan,
-				Shenzhen  Guangdong  518054
-				CN
-
-14-2F-FD   (hex)		LT SECURITY INC
-142FFD     (base 16)		LT SECURITY INC
-				18738 SAN JOSE AVE
-				CITY OF INDUSTRY  CA  91748
-				US
-
-0C-3C-CD   (hex)		Universal Global Scientific Industrial Co., Ltd.
-0C3CCD     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
-				Nan-Tou  Taiwan  54261
-				TW
-
-14-AB-C5   (hex)		Intel Corporate
-14ABC5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-50-D2-13   (hex)		CviLux Corporation
-50D213     (base 16)		CviLux Corporation
-				9F,No.9,Lane 3,Sec.1,Chung-Cheng East Road, Tamshui
-				New Taipei City    25147
-				TW
-
-00-1E-29   (hex)		Hypertherm Inc
-001E29     (base 16)		Hypertherm Inc
-				15 Great Hollow Rd
-				Hanover  NH  03755
-				US
-
-50-04-B8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5004B8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-D0-B2   (hex)		Xiotech Corporation
-00D0B2     (base 16)		Xiotech Corporation
-				6455 FLYING CLOUD DRIVE
-				EDEN PRAIRIE  MN  55344
-				US
-
-5C-FF-35   (hex)		Wistron Corporation
-5CFF35     (base 16)		Wistron Corporation
-				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
-				Taipei Hsien    221
-				TW
-
-CC-9F-7A   (hex)		Chiun Mai Communication Systems, Inc
-CC9F7A     (base 16)		Chiun Mai Communication Systems, Inc
-				No.4, Minsheng St., Tucheng District
-				New Taipei City    23678
-				TW
-
-78-F2-9E   (hex)		PEGATRON CORPORATION
-78F29E     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-64-77-7D   (hex)		Hitron Technologies. Inc
-64777D     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-9C-50-EE   (hex)		Cambridge Industries(Group) Co.,Ltd.
-9C50EE     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				5/F,Building 8, 2388 ChenHang Road, MinHang District
-				shanghai    201114
-				CN
-
-40-ED-98   (hex)		IEEE Registration Authority
-40ED98     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C8-91-F9   (hex)		Sagemcom Broadband SAS
-C891F9     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison  HAUTS DE SEINE  92848
-				FR
-
-AC-DC-E5   (hex)		Procter & Gamble Company
-ACDCE5     (base 16)		Procter & Gamble Company
-				2 Procter & Gamble Plaza
-				Cincinnati  OH  45202
-				US
-
-00-B3-62   (hex)		Apple, Inc.
-00B362     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-E4-AB   (hex)		Apple, Inc.
-E4E4AB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-D2-62   (hex)		Tzukuri Pty Ltd
-60D262     (base 16)		Tzukuri Pty Ltd
-				6 Lenthall Street
-				Kensington  NSW  2033
-				AU
-
-84-04-D2   (hex)		Kirale Technologies SL
-8404D2     (base 16)		Kirale Technologies SL
-				General Vara de Rey 9, 5B
-				Logrono  La Rioja  26001
-				ES
-
-60-33-4B   (hex)		Apple, Inc.
-60334B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-AF-D7   (hex)		FUJITSU LIMITED
-38AFD7     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-28-99-3A   (hex)		Arista Networks
-28993A     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-64-EB-8C   (hex)		Seiko Epson Corporation
-64EB8C     (base 16)		Seiko Epson Corporation
-				80 Harashinden
-				Shiojiri-shi  Nagano-ken  399-0785
-				JP
-
-F4-8C-50   (hex)		Intel Corporate
-F48C50     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-DC-D2-55   (hex)		Kinpo Electronics, Inc.
-DCD255     (base 16)		Kinpo Electronics, Inc.
-				No.147, Sec. 3, Beishen Rd
-				Shenkeng Dist.  New Taipei City  222
-				TW
-
-A0-2C-36   (hex)		FN-LINK TECHNOLOGY LIMITED
-A02C36     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-00-03-20   (hex)		Xpeed, Inc.
-000320     (base 16)		Xpeed, Inc.
-				99 W. Tasman Drive
-				San Jose  CA  95134
-				US
-
-50-8A-0F   (hex)		SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.
-508A0F     (base 16)		SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.
-				No.6 Building, Longfu Industrial Area, Huarong Road, Tongsheng Community, Dalang Street, Longhua New District
-				Shenzhen  Guangdong  518000
-				CN
-
-7C-CB-E2   (hex)		IEEE Registration Authority
-7CCBE2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A8-A5-E2   (hex)		MSF-Vathauer Antriebstechnik GmbH & Co KG 
-A8A5E2     (base 16)		MSF-Vathauer Antriebstechnik GmbH & Co KG 
-				Am Hessentuch 6-8
-				Detmold  Nordrhein-Westfalen  32758
-				DE
-
-BC-A8-A6   (hex)		Intel Corporate
-BCA8A6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-74-FF-4C   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-74FF4C     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-68-AF-13   (hex)		Futura Mobility
-68AF13     (base 16)		Futura Mobility
-				515 PENNSYLVANIA AVE
-				FORT WASHINTON  PA  19034
-				US
-
-68-1A-B2   (hex)		zte corporation
-681AB2     (base 16)		zte corporation
-				12/F.,zte R&D building,kejinan Road,
-				shenzhen  guangdong  518057
-				CN
-
-7C-EB-AE   (hex)		Ridgeline Instruments
-7CEBAE     (base 16)		Ridgeline Instruments
-				4803 Innovation Drive, Suite 3B
-				Fort Collins  CO  80525
-				US
-
-E0-50-8B   (hex)		Zhejiang Dahua Technology Co., Ltd.
-E0508B     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-9C-1E-95   (hex)		Actiontec Electronics, Inc
-9C1E95     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-60-42-7F   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-60427F     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-E8-9E-B4   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-E89EB4     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-D4-6A-6A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-D46A6A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-98-FD-74   (hex)		ACT.CO.LTD
-98FD74     (base 16)		ACT.CO.LTD
-				3-RD Floor 93, Sanbon-ro
-				Gunpo-si  Gyeonggi-do  15849
-				KR
-
-64-DB-43   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-64DB43     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-00-0E-58   (hex)		Sonos, Inc.
-000E58     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-00-25-90   (hex)		Super Micro Computer, Inc.
-002590     (base 16)		Super Micro Computer, Inc.
-				980 Rock Avenue
-				San Jose  California  95131
-				US
-
-AC-1F-6B   (hex)		Super Micro Computer, Inc.
-AC1F6B     (base 16)		Super Micro Computer, Inc.
-				980 Rock Ave
-				San Jose  CA  95131
-				US
-
-00-0B-2E   (hex)		Cal-Comp Electronics & Communications Company Ltd.
-000B2E     (base 16)		Cal-Comp Electronics & Communications Company Ltd.
-				No.147, Sec. 3, Beishen Rd
-				Shenkeng Dist  New Taipei City  ---
-				TW
-
-48-65-EE   (hex)		IEEE Registration Authority
-4865EE     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D0-F7-3B   (hex)		Helmut Mauell GmbH Werk Weida
-D0F73B     (base 16)		Helmut Mauell GmbH Werk Weida
-				Am Rosenhügel 1-7
-				Velbert    42553
-				DE
-
-18-06-75   (hex)		Dilax Intelcom GmbH
-180675     (base 16)		Dilax Intelcom GmbH
-				Alt-Moabit 96b
-				Berlin    10559
-				DE
-
-00-0F-C2   (hex)		Uniwell Corporation
-000FC2     (base 16)		Uniwell Corporation
-				5-25, 3-chome, Tenma, Kita-ku
-				Osaka    530-0043
-				JP
-
-6C-EC-5A   (hex)		Hon Hai Precision Ind. CO.,Ltd.
-6CEC5A     (base 16)		Hon Hai Precision Ind. CO.,Ltd.
-				B22 Building, NO.52,Tongle Road, Foxconn Industrial Park, District Jiangnan, Nanning, Guangxi, China
-				Nanning  Guangxi  530031
-				CN
-
-44-C3-46   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-44C346     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-74-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-307496     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-8A-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-708A09     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-C5-EF   (hex)		Co-Comm Servicios Telecomunicaciones S.L.
-CCC5EF     (base 16)		Co-Comm Servicios Telecomunicaciones S.L.
-				Lisboa, 20 Las Rozas
-				Madrid  Madrid  28232
-				ES
-
-90-02-A9   (hex)		Zhejiang Dahua Technology Co., Ltd.
-9002A9     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				NO.1199 BinAn Road
-				Hangzhou  Zhejiang  310053
-				CN
-
-C0-28-8D   (hex)		Logitech, Inc
-C0288D     (base 16)		Logitech, Inc
-				4700 NW Camas Meadows Drive
-				Camas  WA  98607
-				US
-
-0C-49-33   (hex)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
-0C4933     (base 16)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
-				No. 259, Jiuzhou Road
-				Mianyang City  Sichuan Province  621000
-				CN
-
-00-00-64   (hex)		Yokogawa Digital Computer Corporation
-000064     (base 16)		Yokogawa Digital Computer Corporation
-				Shinjuku MIDWEST Bldg.4-30-3
-				Yoyogi  Shibuya-ku, Tokyo  151-0053
-				JP
-
-50-6B-8D   (hex)		Nutanix
-506B8D     (base 16)		Nutanix
-				1740 Technology Drive Ste #150
-				San Jose  CA  95110
-				US
-
-00-38-DF   (hex)		Cisco Systems, Inc
-0038DF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-CA-E5   (hex)		FREEBOX SAS
-F4CAE5     (base 16)		FREEBOX SAS
-				8 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-90-00-4E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-90004E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-7C-26-34   (hex)		ARRIS Group, Inc.
-7C2634     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-40-F4-13   (hex)		Rubezh
-40F413     (base 16)		Rubezh
-				Ulyanovskaya str. 28
-				Saratov    410056
-				RU
-
-C8-D3-FF   (hex)		Hewlett Packard
-C8D3FF     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-C4-BE-84   (hex)		Texas Instruments
-C4BE84     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas    75243
-				US
-
-F4-F5-24   (hex)		Motorola Mobility LLC, a Lenovo Company
-F4F524     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-00-BB-C1   (hex)		CANON INC.
-00BBC1     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-24-C1-BD   (hex)		CRRC DALIAN R&D CO.,LTD.
-24C1BD     (base 16)		CRRC DALIAN R&D CO.,LTD.
-				No.1 Haoyang North Street,Lvshun Economic Deveopment Zone
-				Dalian  Liaoning  116052
-				CN
-
-00-A2-EE   (hex)		Cisco Systems, Inc
-00A2EE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-59-DC   (hex)		Cisco Systems, Inc
-0059DC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-FD-45   (hex)		Hewlett Packard Enterprise
-00FD45     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-50-98-F3   (hex)		Rheem Australia Pty Ltd
-5098F3     (base 16)		Rheem Australia Pty Ltd
-				1 Alan Street
-				Rydalmere  NSW  2116
-				AU
-
-B4-D1-35   (hex)		Cloudistics
-B4D135     (base 16)		Cloudistics
-				116000 Sunrise Valley Dr Suite 210
-				Reston  VA  20190
-				US
-
-00-13-A5   (hex)		General Solutions, LTD.
-0013A5     (base 16)		General Solutions, LTD.
-				5902 Sovereign Drive
-				Houston  Texas  77036
-				US
-
-9C-3D-CF   (hex)		NETGEAR
-9C3DCF     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-24-88-94   (hex)		shenzhen lensun Communication Technology LTD
-248894     (base 16)		shenzhen lensun Communication Technology LTD
-				RM 201, Block 19, Zhiheng industry Park, Nantou Check point
-				Shenzhen   Guangdong  518000
-				CN
-
-B0-4B-BF   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
-B04BBF     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
-				JL.PALEM 1 BLOK DS-6
-				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
-				ID
-
-CC-2D-83   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-CC2D83     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-D4-6E-0E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D46E0E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-88-36-6C   (hex)		EFM Networks
-88366C     (base 16)		EFM Networks
-				6F, Benposra II 1197-1 Bojeong Giheung Gu
-				Yong In  Kyunggi do  446913
-				KR
-
-48-DA-96   (hex)		Eddy Smart Home Solutions Inc.
-48DA96     (base 16)		Eddy Smart Home Solutions Inc.
-				1600-25 Sheppard Avenue West
-				Toronto  Ontario  M2N 6S6
-				CA
-
-F0-74-E4   (hex)		Thundercomm Technology Co., Ltd
-F074E4     (base 16)		Thundercomm Technology Co., Ltd
-				Building NO.4, 99# Xiantao Data Valley Zhonglu, Yubei District, Chongqing, China 
-				chongqing    404100
-				CN
-
-A0-72-2C   (hex)		HUMAX Co., Ltd.
-A0722C     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-FC-D8-48   (hex)		Apple, Inc.
-FCD848     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-10-7B   (hex)		Samsung Electronics Co.,Ltd
-EC107B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-23-2C   (hex)		Samsung Electronics Co.,Ltd
-1C232C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E0-0D-B9   (hex)		Cree, Inc.
-E00DB9     (base 16)		Cree, Inc.
-				4600 Silicon Drive
-				Durham  NC  27703
-				US
-
-DC-0D-30   (hex)		Shenzhen Feasycom Technology Co., Ltd.
-DC0D30     (base 16)		Shenzhen Feasycom Technology Co., Ltd.
-				#2004, Huichao Science & Technology Building, Jinhai Road, Xixiang
-				Shenzhen  Guangdong  18000
-				CN
-
-F0-AC-D7   (hex)		IEEE Registration Authority
-F0ACD7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-94-95-A0   (hex)		Google, Inc.
-9495A0     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-00-A6-CA   (hex)		Cisco Systems, Inc
-00A6CA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-38-D5-47   (hex)		ASUSTek COMPUTER INC.
-38D547     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-FC-83-C6   (hex)		N-Radio Technologies Co., Ltd.
-FC83C6     (base 16)		N-Radio Technologies Co., Ltd.
-				2#, 7F, Satellite Buiding, Keyuan Road, Nanshan
-				ShenZhen  GuangDong  518000
-				CN
-
-30-B6-4F   (hex)		Juniper Networks
-30B64F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-1C-9D-3E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-1C9D3E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-F0-2F-A7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F02FA7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-DE-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-18DED7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-3D-D4   (hex)		CyberTAN Technology Inc.
-C83DD4     (base 16)		CyberTAN Technology Inc.
-				99 Park Ave III, Hsinchu Science Park
-				Hsinchu    308
-				TW
-
-E0-B9-4D   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-E0B94D     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-D8-45-2B   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-D8452B     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-E4-18-6B   (hex)		Zyxel Communications Corporation
-E4186B     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-00-87-31   (hex)		Cisco Systems, Inc
-008731     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-88-DE-A9   (hex)		Roku, Inc.
-88DEA9     (base 16)		Roku, Inc.
-				12980 Saratoga Ave
-				Saratoga  CA  95070
-				US
-
-78-88-8A   (hex)		CDR Sp. z o.o. Sp. k.
-78888A     (base 16)		CDR Sp. z o.o. Sp. k.
-				Palki 15
-				Zory    44-240
-				PL
-
-00-21-D1   (hex)		Samsung Electronics Co.,Ltd
-0021D1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-1F-CC   (hex)		Samsung Electronics Co.,Ltd
-001FCC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-29-83   (hex)		Boeing Defence Australia
-A42983     (base 16)		Boeing Defence Australia
-				GPO Box 767
-				Brisbane  Queensland  4001
-				AU
-
-EC-88-92   (hex)		Motorola Mobility LLC, a Lenovo Company
-EC8892     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 Merchandise Mart Plaza, Suite 1800
-				Chicago  IL  60654
-				US
-
-74-87-A9   (hex)		OCT Technology Co., Ltd.
-7487A9     (base 16)		OCT Technology Co., Ltd.
-				8F. -2, No. 94, Baojhong Rd. Sindian Dist.
-				New Taipei City    231
-				TW
-
-00-4A-77   (hex)		zte corporation
-004A77     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A4-14-37   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-A41437     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-60-A1-0A   (hex)		Samsung Electronics Co.,Ltd
-60A10A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-8C-71-F8   (hex)		Samsung Electronics Co.,Ltd
-8C71F8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-05-1B   (hex)		Samsung Electronics Co.,Ltd
-CC051B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-8C-77-12   (hex)		Samsung Electronics Co.,Ltd
-8C7712     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-63-D1   (hex)		Samsung Electronics Co.,Ltd
-9463D1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-21-D2   (hex)		Samsung Electronics Co.,Ltd
-0021D2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-5C-49-7D   (hex)		Samsung Electronics Co.,Ltd
-5C497D     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-98-23-4E   (hex)		Micromedia AG
-98234E     (base 16)		Micromedia AG
-				Gartenweg 46
-				Buonas  Zug  6343
-				CH
-
-50-3F-98   (hex)		CMITECH
-503F98     (base 16)		CMITECH
-				904-ho, 25, Simin-daero 248beon-gil, Dongan-gu
-				Anyang-si  Gyeonggi-do  14067
-				KR
-
-78-20-79   (hex)		ID Tech
-782079     (base 16)		ID Tech
-				10721 Walker St
-				Cypress  CA  90630
-				US
-
-0C-60-76   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-0C6076     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-0C-EE-E6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-0CEEE6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-E4-D5-3D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-E4D53D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C0-14-3D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-C0143D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C0-18-85   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-C01885     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-74-9C   (hex)		Ruijie Networks Co.,LTD
-00749C     (base 16)		Ruijie Networks Co.,LTD
-				19# Building,Star-net Science Plaza,Juyuanzhou, 618 Jinshan Road
-				Fuzhou  Fujian  350002
-				CN
-
-58-94-CF   (hex)		Vertex Standard LMR, Inc.
-5894CF     (base 16)		Vertex Standard LMR, Inc.
-				4-8-8 Nakameguro 
-				Meguro-ku   Tokyo  153-8644
-				JP
-
-20-F8-5E   (hex)		Delta Electronics
-20F85E     (base 16)		Delta Electronics
-				252 Shangying Road
-				Taoyuan County  Taiwan  33341
-				TW
-
-78-25-AD   (hex)		Samsung Electronics Co.,Ltd
-7825AD     (base 16)		Samsung Electronics Co.,Ltd
-				416, MAETAN-3DONG, PALDAL-GU
-				SUWON CITY  KYUNGKI-DO  442-742
-				KR
-
-EC-E0-9B   (hex)		Samsung Electronics Co.,Ltd
-ECE09B     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu,
-				Suwon-City  Gyeonggi-do  443-742
-				KR
-
-00-23-E4   (hex)		IPnect co. ltd.
-0023E4     (base 16)		IPnect co. ltd.
-				808 albatross B/D 237-18
-				Seoul    153-801
-				KR
-
-70-D4-F2   (hex)		RIM
-70D4F2     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-78-D6-F0   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-78D6F0     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				Metan Dong 314, Youngtong Gu
-				Suwon  Kyung-gi Do.  443-743
-				KR
-
-BC-20-A4   (hex)		Samsung Electronics Co.,Ltd
-BC20A4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-D4-2B   (hex)		Samsung Electronics Co.,Ltd
-08D42B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-78-9E-D0   (hex)		Samsung Electronics Co.,Ltd
-789ED0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-C4-E7   (hex)		Samsung Electronics Co.,Ltd
-B0C4E7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A0-07-98   (hex)		Samsung Electronics Co.,Ltd
-A00798     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-1F-CD   (hex)		Samsung Electronics Co.,Ltd
-001FCD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-38-EC-E4   (hex)		Samsung Electronics Co.,Ltd
-38ECE4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-51-03   (hex)		Samsung Electronics Co.,Ltd
-945103     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-24-90   (hex)		Samsung Electronics Co.,Ltd
-002490     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-23-D7   (hex)		Samsung Electronics Co.,Ltd
-0023D7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-9B-12   (hex)		Samsung Electronics Co.,Ltd
-549B12     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-A1-3E   (hex)		Samsung Electronics Co.,Ltd
-FCA13E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-24-C6-96   (hex)		Samsung Electronics Co.,Ltd
-24C696     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-D7-71   (hex)		Samsung Electronics Co.,Ltd
-94D771     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E8-4E-84   (hex)		Samsung Electronics Co.,Ltd
-E84E84     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-16-32   (hex)		Samsung Electronics Co.,Ltd
-001632     (base 16)		Samsung Electronics Co.,Ltd
-				416, METAN-3DONG,
-				SUWON  KYUNGKI-DO  442-742
-				KR
-
-E4-E0-C5   (hex)		Samsung Electronics Co.,Ltd
-E4E0C5     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu
-				Suwon  Gyeonggi-do  443742
-				KR
-
-C8-14-79   (hex)		Samsung Electronics Co.,Ltd
-C81479     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-AF-05   (hex)		Samsung Electronics Co.,Ltd
-1CAF05     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-16-DB   (hex)		Samsung Electronics Co.,Ltd
-0016DB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1
-				Gumi-City  Gyeong-Buk  730-350
-				KR
-
-00-1E-E2   (hex)		Samsung Electronics Co.,Ltd
-001EE2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-20-D5-BF   (hex)		Samsung Electronics Co.,Ltd
-20D5BF     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3dong, Yeongtong-Gu
-				Suwon  Gyeonggi-Do  443742
-				KR
-
-5C-E8-EB   (hex)		Samsung Electronics Co.,Ltd
-5CE8EB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C0-BD-D1   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-C0BDD1     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-B4-79-A7   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-B479A7     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-7C-11-CB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C11CB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-25-E1   (hex)		China Mobile IOT Company Limited
-1C25E1     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-C0-F6-36   (hex)		Hangzhou Kuaiyue Technologies, Ltd.
-C0F636     (base 16)		Hangzhou Kuaiyue Technologies, Ltd.
-				Dongguan Hitech Park, Building 1-805, 288 Qiuyi Rd, Bingjiang District
-				Hangzhou  Zhejiang  310053
-				CN
-
-00-1A-22   (hex)		eQ-3 Entwicklung GmbH
-001A22     (base 16)		eQ-3 Entwicklung GmbH
-				Maiburger Str. 36
-				Leer  Niedersachsen  D-26789
-				DE
-
-B0-DF-3A   (hex)		Samsung Electronics Co.,Ltd
-B0DF3A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-57-19   (hex)		Samsung Electronics Co.,Ltd
-805719     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-BE-00   (hex)		Samsung Electronics Co.,Ltd
-34BE00     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-E2-E0   (hex)		ARRIS Group, Inc.
-54E2E0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-34-7A-60   (hex)		ARRIS Group, Inc.
-347A60     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1C-C3   (hex)		ARRIS Group, Inc.
-001CC3     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-24-0D-C2   (hex)		TCT mobile ltd
-240DC2     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-78-52-1A   (hex)		Samsung Electronics Co.,Ltd
-78521A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-70-85-C6   (hex)		ARRIS Group, Inc.
-7085C6     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-20-BB-C6   (hex)		Jabil Circuit Hungary Ltd.
-20BBC6     (base 16)		Jabil Circuit Hungary Ltd.
-				Huszár Andor 1.
-				Tiszaújváros    H-3580
-				HU
-
-04-FE-A1   (hex)		Fihonest communication co.,Ltd
-04FEA1     (base 16)		Fihonest communication co.,Ltd
-				Room902,Park road,Zhixing business-building
-				Dongguan  Guangdong  523560
-				CN
-
-EC-8C-A2   (hex)		Ruckus Wireless
-EC8CA2     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-B8-00-18   (hex)		Htel
-B80018     (base 16)		Htel
-				Dunchon-dearo, Jungwon-gu
-				Seongnam-si  Gyeonggi-do  13229
-				KR
-
-74-72-B0   (hex)		Guangzhou Shiyuan Electronics Co., Ltd. 
-7472B0     (base 16)		Guangzhou Shiyuan Electronics Co., Ltd. 
-				No.6, 4th Yunpu Road, Yunpu Industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-54-6C-0E   (hex)		Texas Instruments
-546C0E     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-EC-8E-AE   (hex)		Nagravision SA
-EC8EAE     (base 16)		Nagravision SA
-				Route de Geneve 22-24, PO 7980
-				Cheseaux  Vaud  1033
-				CH
-
-A0-43-DB   (hex)		Sitael S.p.A.
-A043DB     (base 16)		Sitael S.p.A.
-				Via San Sabino, 21
-				Mola di Bari  BA  70042
-				IT
-
-E0-E7-BB   (hex)		Nureva, Inc.
-E0E7BB     (base 16)		Nureva, Inc.
-				1000, 1221 8th Street SW
-				Calgary  AB  T2R 0L4
-				CA
-
-00-10-87   (hex)		XSTREAMIS PLC
-001087     (base 16)		XSTREAMIS PLC
-				OXFORD SCIENCE PARK
-				OXFORD 0X4 4GA    00000
-				US
-
-00-B0-B3   (hex)		XSTREAMIS PLC
-00B0B3     (base 16)		XSTREAMIS PLC
-				Magdalen Centre
-				Oxford 0X4 4GA    0000
-				GB
-
-04-9F-CA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-049FCA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-01-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-50016B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-48-2D   (hex)		Ralinwi Nanjing Electronic Technology Co., Ltd.
-AC482D     (base 16)		Ralinwi Nanjing Electronic Technology Co., Ltd.
-				3rd Floor, Building B,R&D Block 3, Xuzhuang Software Park, No. 699-27, Xuanwu Avenue
-				Nanjing  Jiangsu  210046
-				CN
-
-00-23-63   (hex)		Zhuhai Raysharp Technology Co.,Ltd
-002363     (base 16)		Zhuhai Raysharp Technology Co.,Ltd
-				No.119 of Huawei Road, Qianshan Science & Technology Park,
-				Zhuhai  Guangdong  519070
-				CN
-
-00-00-1B   (hex)		Novell, Inc.
-00001B     (base 16)		Novell, Inc.
-				122 EAST 1700 SOUTH
-				PROVO  UT  84606
-				US
-
-00-90-58   (hex)		Ultra Electronics Command & Control Systems
-009058     (base 16)		Ultra Electronics Command & Control Systems
-				Knaves Beech Business Centre
-				Hemel Hemstead  Herts England  HP2 7BW
-				GB
-
-00-1C-FD   (hex)		Universal Electronics, Inc.
-001CFD     (base 16)		Universal Electronics, Inc.
-				6101 Gateway Drive
-				Cypress    90630
-				US
-
-08-00-87   (hex)		Xyplex, Inc.
-080087     (base 16)		Xyplex, Inc.
-				295 FOSTER STREET
-				LITTLETON  MA  01460
-				US
-
-DC-1A-01   (hex)		Ecoliv Technology ( Shenzhen ) Ltd.
-DC1A01     (base 16)		Ecoliv Technology ( Shenzhen ) Ltd.
-				B-734, Tianhui building, Longhua Street, Pine Road, Longhua District
-				Shenzhen  Guangdong  518109
-				CN
-
-00-54-9F   (hex)		Avaya Inc
-00549F     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-28-24-FF   (hex)		Wistron Neweb Corporation
-2824FF     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-38-25-6B   (hex)		Microsoft Mobile Oy
-38256B     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				Espoo    02150
-				FI
-
-00-1C-EF   (hex)		Primax Electronics Ltd.
-001CEF     (base 16)		Primax Electronics Ltd.
-				669, Ruey Kuang Road, Neihu
-				Taipei    114
-				TW
-
-00-02-76   (hex)		Primax Electronics Ltd.
-000276     (base 16)		Primax Electronics Ltd.
-				No. 669, Ruey Kuang Road, Neihu
-				Taipei  Taiwan,  R.O.C.
-				TW
-
-4C-B2-1C   (hex)		Maxphotonics Co.,Ltd
-4CB21C     (base 16)		Maxphotonics Co.,Ltd
-				Maxphotonics Industrial Park,Third Furong Road,Furong Industrial Area,Shajing,BaoAn
-				ShenZhen  GuangDong  518125
-				CN
-
-20-5E-F7   (hex)		Samsung Electronics Co.,Ltd
-205EF7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-1F-78   (hex)		Samsung Electronics Co.,Ltd
-141F78     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D8-47-10   (hex)		Sichuan Changhong Electric Ltd.
-D84710     (base 16)		Sichuan Changhong Electric Ltd.
-				35 East Mianxing Road,High-Tech Park,
-				MianYang  SiChuan  621000
-				CN
-
-00-19-72   (hex)		Plexus (Xiamen) Co.,ltd.
-001972     (base 16)		Plexus (Xiamen) Co.,ltd.
-				No.6 Xiangxing 2 Road
-				Xiamen  Fujian  361006
-				CN
-
-00-23-47   (hex)		ProCurve Networking by HP
-002347     (base 16)		ProCurve Networking by HP
-				60 Alexandra Terrace
-				0000    118502
-				SG
-
-00-24-A8   (hex)		ProCurve Networking by HP
-0024A8     (base 16)		ProCurve Networking by HP
-				60 Alexandra Terrace
-				0000    118502
-				SG
-
-C0-91-34   (hex)		ProCurve Networking by HP
-C09134     (base 16)		ProCurve Networking by HP
-				60 Alexandra Terrace
-				0000    118502
-				SG
-
-00-19-69   (hex)		Nortel Networks
-001969     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-18-B0   (hex)		Nortel Networks
-0018B0     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-16-CA   (hex)		Nortel Networks
-0016CA     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-0F-CD   (hex)		Nortel Networks
-000FCD     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1B-BA   (hex)		Nortel Networks
-001BBA     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-04-DC   (hex)		Nortel Networks
-0004DC     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-0C-F7   (hex)		Nortel Networks
-000CF7     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-14-0E   (hex)		Nortel Networks
-00140E     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1E-1F   (hex)		Nortel Networks
-001E1F     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-20-3A-EF   (hex)		Sivantos GmbH
-203AEF     (base 16)		Sivantos GmbH
-				Henri-Dunant-Strasse 100
-				Erlangen  Bavaria  91058
-				DE
-
-00-59-79   (hex)		Networked Energy Services
-005979     (base 16)		Networked Energy Services
-				5215 Hellyer Avenue
-				San Jose  CA  95138
-				US
-
-20-7C-8F   (hex)		Quanta Microsystems,Inc.
-207C8F     (base 16)		Quanta Microsystems,Inc.
-				No.5 Lane 91,Dongmei Rd.
-				Hsinchu    300
-				TW
-
-00-0B-34   (hex)		ShangHai Broadband Technologies CO.LTD
-000B34     (base 16)		ShangHai Broadband Technologies CO.LTD
-				17F,No.122,HuangXing Road
-				ShangHai    200090
-				CN
-
-74-B5-7E   (hex)		zte corporation
-74B57E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B8-BB-23   (hex)		Guangdong Nufront CSC Co., Ltd
-B8BB23     (base 16)		Guangdong Nufront CSC Co., Ltd
-				A403-414, Building 13, No.232 Waihuan East Road, Higher           Education Mega Center, Guangdong 510006, China
-				Guangzhou  Guangdong  510006
-				CN
-
-34-EA-34   (hex)		HangZhou Gubei Electronics Technology Co.,Ltd
-34EA34     (base 16)		HangZhou Gubei Electronics Technology Co.,Ltd
-				Room 106, No.611 Jianghong Road, Binjiang District, Hangzhou, Zhejiang, China
-				Hangzhou  ZheJiang  310052
-				CN
-
-30-92-F6   (hex)		SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
-3092F6     (base 16)		SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
-				Suite 604-605,Xing Yuan Technology Plaza 
-				00000  ShangHai  200233
-				CN
-
-A8-AD-3D   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-A8AD3D     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-24-AF-4A   (hex)		Alcatel-Lucent IPD
-24AF4A     (base 16)		Alcatel-Lucent IPD
-				701 E. Middlefield Rd.
-				Mountain View  CA  94043
-				US
-
-7C-20-64   (hex)		Alcatel-Lucent IPD
-7C2064     (base 16)		Alcatel-Lucent IPD
-				600 March Drive
-				Kanata  Ontario  K2K2E6
-				CA
-
-44-DC-91   (hex)		PLANEX COMMUNICATIONS INC.
-44DC91     (base 16)		PLANEX COMMUNICATIONS INC.
-				2F F-NISSAY Ebisu Bldg 3-16-3 Higashi, 
-				Shibuya-ku  Tokyo  150-0011
-				JP
-
-E0-9D-B8   (hex)		PLANEX COMMUNICATIONS INC.
-E09DB8     (base 16)		PLANEX COMMUNICATIONS INC.
-				Planex Volta Bldg., 2-11-9 Ebisu-Nishi,Shibuya-ku,
-				00000    1500021
-				US
-
-00-0F-59   (hex)		Phonak AG
-000F59     (base 16)		Phonak AG
-				Länggasse 17
-				Murten  FR  3280
-				CH
-
-00-14-78   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-001478     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				3/F,Bldg.R1-B,Hi-tech Industrial Park,
-				ShenZhen  GuangDong  518057
-				CN
-
-48-F8-E1   (hex)		Nokia
-48F8E1     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-8C-90-D3   (hex)		Nokia
-8C90D3     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-28-F8   (hex)		Intel Corporate
-0028F8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-58-BC-8F   (hex)		Cognitive Systems Corp.
-58BC8F     (base 16)		Cognitive Systems Corp.
-				560 Westmount Road North
-				Waterloo  Ontario  N2L 0A9
-				CA
-
-D4-55-BE   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-D455BE     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-64-0D-CE   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-640DCE     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-54-D2-72   (hex)		Nuki Home Solutions GmbH
-54D272     (base 16)		Nuki Home Solutions GmbH
-				Muenzgrabenstrasse 92
-				Graz    8010
-				AT
-
-EC-26-FB   (hex)		TECC CO.,LTD.
-EC26FB     (base 16)		TECC CO.,LTD.
-				Guam-ro 15-gil, Buk-gu
-				Daegu    720-849
-				KR
-
-00-20-F4   (hex)		SPECTRIX CORPORATION
-0020F4     (base 16)		SPECTRIX CORPORATION
-				106 WILMOT ROAD, SUITE 250
-				DEERFIELD  IL  60015-5150
-				US
-
-04-EE-91   (hex)		x-fabric GmbH
-04EE91     (base 16)		x-fabric GmbH
-				Nachodstraße 7
-				Berlin    10779
-				DE
-
-B4-74-43   (hex)		Samsung Electronics Co.,Ltd
-B47443     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-F6-47   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-FCF647     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-18-68-6A   (hex)		zte corporation
-18686A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C4-4B-D1   (hex)		Wallys Communications  Teachnologies Co.,Ltd.
-C44BD1     (base 16)		Wallys Communications  Teachnologies Co.,Ltd.
-				5-207, DongHong Pioneer Park, #99 YangYu Lane,
-				SuZhou  JiangSu  215000
-				CN
-
-6C-B9-C5   (hex)		Delta Networks, Inc.
-6CB9C5     (base 16)		Delta Networks, Inc.
-				256 Yang Guang Street, Neihu
-				Taipei  Taiwan  11491
-				TW
-
-30-76-6F   (hex)		LG Electronics (Mobile Communications)
-30766F     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-A8-92-2C   (hex)		LG Electronics (Mobile Communications)
-A8922C     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-F8-0C-F3   (hex)		LG Electronics (Mobile Communications)
-F80CF3     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-C4-9A-02   (hex)		LG Electronics (Mobile Communications)
-C49A02     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-1F-6B   (hex)		LG Electronics (Mobile Communications)
-001F6B     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-26-E2   (hex)		LG Electronics (Mobile Communications)
-0026E2     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-DC-44-27   (hex)		IEEE Registration Authority
-DC4427     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-BC-34-00   (hex)		IEEE Registration Authority
-BC3400     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E8-88-6C   (hex)		Shenzhen SC Technologies Co.,LTD
-E8886C     (base 16)		Shenzhen SC Technologies Co.,LTD
-				4/FL,2Block,LianChuang Industrial Park,Bulan Road,Longgang
-				Shenzhen   Guangdong Province  518112
-				CN
-
-00-24-FF   (hex)		QLogic Corporation
-0024FF     (base 16)		QLogic Corporation
-				26650 Aliso Viejo Parkway
-				Aliso Viejo  CA  92656
-				US
-
-00-1E-21   (hex)		Qisda Corporation
-001E21     (base 16)		Qisda Corporation
-				157 Shan-Ying Road, Gueishan
-				Taoyuan    333
-				TW
-
-00-03-9D   (hex)		Qisda Corporation
-00039D     (base 16)		Qisda Corporation
-				157 Shan Ying Road
-				GueiShan  Taoyuan  333
-				TW
-
-00-08-0D   (hex)		Toshiba
-00080D     (base 16)		Toshiba
-				2-9, Suehiro-cho,
-				Tokyo    198-8710
-				JP
-
-00-0E-7B   (hex)		Toshiba
-000E7B     (base 16)		Toshiba
-				2-9, Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-00-03-B2   (hex)		Radware
-0003B2     (base 16)		Radware
-				8 Hamrpe Hochvim
-				000    0000
-				IL
-
-00-A0-C6   (hex)		Qualcomm Inc.
-00A0C6     (base 16)		Qualcomm Inc.
-				6455 LUSK BLVD
-				SAN DIEGO  CA  92121
-				US
-
-64-9C-81   (hex)		Qualcomm Inc.
-649C81     (base 16)		Qualcomm Inc.
-				5665 Morehouse Drive
-				San Diego  CA  92071
-				US
-
-00-1A-6A   (hex)		Tranzas, Inc.
-001A6A     (base 16)		Tranzas, Inc.
-				Queens tower C17
-				Yokohama  Kanagawa-ken  220-6217
-				JP
-
-A4-71-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A47174     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-CB-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4CB52     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-08-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B808D7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-61-1E   (hex)		Wata Electronics Co.,Ltd. 
-94611E     (base 16)		Wata Electronics Co.,Ltd. 
-				No 142,South Tanshen Road, Tanzhou Town,Zhongshan City,Guangdong,China
-				Zhongshan  Guangdong  528467
-				CN
-
-00-C0-E4   (hex)		SIEMENS BUILDING
-00C0E4     (base 16)		SIEMENS BUILDING
-				TECHNOLOGIES, INC.
-				BUFFALO GROVE  IL  60089
-				US
-
-00-0D-10   (hex)		Embedtronics Oy
-000D10     (base 16)		Embedtronics Oy
-				Leväsentie 23
-				Kuopio    70780
-				FI
-
-00-1F-A8   (hex)		Smart Energy Instruments Inc.
-001FA8     (base 16)		Smart Energy Instruments Inc.
-				297 Lakeshore Road East
-				Oakville  Ontario  L6J 1J3
-				CA
-
-00-0F-DB   (hex)		Westell Technologies Inc.
-000FDB     (base 16)		Westell Technologies Inc.
-				750 N Commons Dr
-				Aurora  IL  60504
-				US
-
-3C-07-71   (hex)		Sony Corporation
-3C0771     (base 16)		Sony Corporation
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-80-41-4E   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-80414E     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
-				Dong Guan   Guang Dong  523860
-				CN
-
-24-94-42   (hex)		OPEN ROAD SOLUTIONS , INC.
-249442     (base 16)		OPEN ROAD SOLUTIONS , INC.
-				88-13 SHUILI  ROAD
-				HSINCHU    30059
-				TW
-
-C4-64-13   (hex)		Cisco Systems, Inc
-C46413     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-10-CA   (hex)		Telco Systems, Inc. 
-0010CA     (base 16)		Telco Systems, Inc. 
-				15 Berkshire Road
-				Mansfield,  MA  02048
-				US
-
-00-E0-9E   (hex)		Quantum Corporation
-00E09E     (base 16)		Quantum Corporation
-				500 McCarthy Boulevard
-				Milpitas  CA  95035
-				US
-
-20-6A-8A   (hex)		Wistron Infocomm (Zhongshan) Corporation
-206A8A     (base 16)		Wistron Infocomm (Zhongshan) Corporation
-				168# First Avenue,Kunshan Export Processing Zone
-				Kunshan  Jiangsu  215300
-				CN
-
-78-44-76   (hex)		Zioncom Electronics (Shenzhen) Ltd.
-784476     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
-				A1&A2 building,lantian technology park, xinyu road, xingqiao henggang block, shajing street, Baoan District
-				shenzhen  guangdong  518000
-				CN
-
-00-11-65   (hex)		ZNYX Networks, Inc.
-001165     (base 16)		ZNYX Networks, Inc.
-				48421 Milmont Drive
-				Fremont  CA  94538
-				US
-
-00-0A-68   (hex)		Solarflare Communications Inc.
-000A68     (base 16)		Solarflare Communications Inc.
-				Suite 100, 7505 Irvine Center Drive
-				Irvine  CA  92618
-				US
-
-00-21-86   (hex)		Universal Global Scientific Industrial Co., Ltd.
-002186     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, Sec.1, Taiping Road,
-				NANTOU    54261
-				TW
-
-18-39-19   (hex)		Unicoi Systems
-183919     (base 16)		Unicoi Systems
-				410 Peachtree Pkwy
-				Cumming  GA  30041
-				US
-
-E8-E0-B7   (hex)		Toshiba
-E8E0B7     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-68-07-15   (hex)		Intel Corporate
-680715     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-3C-B6-B7   (hex)		vivo Mobile Communication Co., Ltd.
-3CB6B7     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong  523860
-				CN
-
-C4-27-95   (hex)		Technicolor CH USA Inc.
-C42795     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-A0-20-A6   (hex)		Espressif Inc.
-A020A6     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-58-52-8A   (hex)		Mitsubishi Electric Corporation
-58528A     (base 16)		Mitsubishi Electric Corporation
-				2-7-3 Marunouchi Chiyoda-ku
-				Tokyo    100-8310
-				JP
-
-C4-F1-D1   (hex)		BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.
-C4F1D1     (base 16)		BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.
-				SOHU.COM INTERNET PLAZA, NO.1 PARK, ZHONGGUANCHUN EAST ROAD. HAIDIAN DISTRICT
-				Beijing    100000
-				CN
-
-2C-36-A0   (hex)		Capisco Limited
-2C36A0     (base 16)		Capisco Limited
-				PO Box 938
-				Auckland    0943
-				NZ
-
-B0-B2-DC   (hex)		Zyxel Communications Corporation
-B0B2DC     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-CC-5D-4E   (hex)		Zyxel Communications Corporation
-CC5D4E     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-40-4A-03   (hex)		Zyxel Communications Corporation
-404A03     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-C8-6C-87   (hex)		Zyxel Communications Corporation
-C86C87     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-00-1E-C0   (hex)		Microchip Technology Inc.
-001EC0     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-38-BC-1A   (hex)		MEIZU Technology Co., Ltd.
-38BC1A     (base 16)		MEIZU Technology Co., Ltd.
-				MEIZU Tech Bldg., Technology & Innovation Coast
-				Zhuhai  Guangdong  519085
-				CN
-
-80-29-94   (hex)		Technicolor CH USA Inc.
-802994     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-E0-88-5D   (hex)		Technicolor CH USA Inc.
-E0885D     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-34-0A-FF   (hex)		Qingdao Hisense Communications Co.,Ltd.
-340AFF     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-58-7E-61   (hex)		Qingdao Hisense Communications Co.,Ltd.
-587E61     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-C0-A1-A2   (hex)		MarqMetrix
-C0A1A2     (base 16)		MarqMetrix
-				410 West Harrison ST #200
-				Seattle  WA  98119
-				US
-
-08-D0-B7   (hex)		Qingdao Hisense Communications Co.,Ltd.
-08D0B7     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-EC-D6-8A   (hex)		Shenzhen JMicron Intelligent Technology Developmen
-ECD68A     (base 16)		Shenzhen JMicron Intelligent Technology Developmen
-				Futian District, 13th Floor , Block B Building Tai
-				Shenzhen  Guangdong Province  518040
-				CN
-
-50-52-D2   (hex)		Hangzhou Telin Technologies Co., Limited
-5052D2     (base 16)		Hangzhou Telin Technologies Co., Limited
-				8 floor,D Building,Paradise Software Park,No. 3 Xidoumen Road, Xihu District, Hangzhou
-				Hangzhou  Zhejiang  310013
-				CN
-
-90-EE-D9   (hex)		UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA
-90EED9     (base 16)		UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA
-				CRTA DE CASTELLAR, 298
-				TERRASSA  BARCELONA  08226
-				ES
-
-60-64-53   (hex)		AOD Co.,Ltd.
-606453     (base 16)		AOD Co.,Ltd.
-				No. 13155, Yuqing Street, High-Technology Development Zone,
-				Weifang  Shandong  261061
-				CN
-
-00-9E-1E   (hex)		Cisco Systems, Inc
-009E1E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-25-3E   (hex)		Sensus Metering Systems
-00253E     (base 16)		Sensus Metering Systems
-				10147 W. Emerald Street
-				Boise  Idaho  83704
-				US
-
-C8-AF-E3   (hex)		Hefei Radio Communication Technology Co., Ltd 
-C8AFE3     (base 16)		Hefei Radio Communication Technology Co., Ltd 
-				 No.108, YinXing Road, High-tech Development Zone 
-				Hefei  Anhui  230088
-				CN
-
-7C-57-4E   (hex)		COBI GmbH
-7C574E     (base 16)		COBI GmbH
-				Solmsstrasse 4
-				Frankfurt am Main    60486
-				DE
-
-28-F1-0E   (hex)		Dell Inc.
-28F10E     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-04-56-04   (hex)		Gionee Communication Equipment Co.,Ltd.
-045604     (base 16)		Gionee Communication Equipment Co.,Ltd.
-				21/F,Times Technology Building,No. 7028,Shennan Avenue,Futian District
-				Shenzhen    518000
-				CN
-
-34-C0-F9   (hex)		Rockwell Automation
-34C0F9     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-00-FE-C8   (hex)		Cisco Systems, Inc
-00FEC8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-5A-8D   (hex)		SYSTRONIK Elektronik u. Systemtechnik GmbH
-2C5A8D     (base 16)		SYSTRONIK Elektronik u. Systemtechnik GmbH
-				Gewerbestrasse 57
-				ILLMENSEE    88636
-				DE
-
-10-BE-F5   (hex)		D-Link International
-10BEF5     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-E4-7B-3F   (hex)		BEIJING CO-CLOUD TECHNOLOGY LTD.
-E47B3F     (base 16)		BEIJING CO-CLOUD TECHNOLOGY LTD.
-				903 Room，Power Create E ，No.1 Shangdi East Road
-				Beijing  Beijing  100085
-				CN
-
-0C-8A-87   (hex)		AgLogica Holdings, Inc
-0C8A87     (base 16)		AgLogica Holdings, Inc
-				333 Research Ct NW Ste 230
-				Norcross  GA  30092
-				US
-
-54-ED-A3   (hex)		Navdy, Inc.
-54EDA3     (base 16)		Navdy, Inc.
-				575 7th Street
-				San Francisco  CA  94103
-				US
-
-34-A2-A2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-34A2A2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-9D-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-749D8F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-59-07   (hex)		Shanghai HITE-BELDEN Network Technology Co., Ltd.
-945907     (base 16)		Shanghai HITE-BELDEN Network Technology Co., Ltd.
-				No. 777, Xinjun Ring Road, Pujiang Hi-Tech Park, Minhang District
-				Shanghai  Shanghai  201114
-				CN
-
-00-16-FB   (hex)		SHENZHEN MTC CO LTD
-0016FB     (base 16)		SHENZHEN MTC CO LTD
-				5/F BenYuan Bldg,6015 ShenNan Road
-				ShenZhen  GuangDong  518040
-				CN
-
-A0-41-5E   (hex)		Opsens Solution Inc.
-A0415E     (base 16)		Opsens Solution Inc.
-				2014 rue Cyrille-Duquet, suite 125
-				Quebec  QC  G1N 4N6
-				CA
-
-A8-60-B6   (hex)		Apple, Inc.
-A860B6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C4-B3-01   (hex)		Apple, Inc.
-C4B301     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-5F-45   (hex)		Apple, Inc.
-E05F45     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-CC-39   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-74CC39     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-38-22-D6   (hex)		Hangzhou H3C Technologies Co., Limited
-3822D6     (base 16)		Hangzhou H3C Technologies Co., Limited
-				310 Liuhe Road, Zhijiang Science Park
-				Hangzhou  Zhejiang,   310053
-				CN
-
-94-E8-C5   (hex)		ARRIS Group, Inc.
-94E8C5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-6C-3B-6B   (hex)		Routerboard.com
-6C3B6B     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-00-22-E7   (hex)		WPS Parking Systems
-0022E7     (base 16)		WPS Parking Systems
-				Hoevenweg 11
-				Eindhoven  Noord-Brabant  5652 AW
-				NL
-
-48-51-B7   (hex)		Intel Corporate
-4851B7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-B8-E7-79   (hex)		9Solutions Oy
-B8E779     (base 16)		9Solutions Oy
-				Teknologiantie 2
-				Oulu    90590
-				FI
-
-C8-64-C7   (hex)		zte corporation
-C864C7     (base 16)		zte corporation
-				12/F.,zte R&D building,kejinan Road,
-				shenzhen  guangdong  518057
-				CN
-
-48-3B-38   (hex)		Apple, Inc.
-483B38     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-91-48   (hex)		Apple, Inc.
-1C9148     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-5F-2E   (hex)		TCT mobile ltd
-905F2E     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-F8-23-B2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F823B2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-12-90   (hex)		Treeview Co.,Ltd.
-341290     (base 16)		Treeview Co.,Ltd.
-				106/29 BANGLAMUNG
-				BANGLAMUNG  CHONBURI  20150
-				TH
-
-7C-FE-4E   (hex)		Shenzhen Safe vision Technology Co.,LTD
-7CFE4E     (base 16)		Shenzhen Safe vision Technology Co.,LTD
-				Shenzhen ring view south road and 27 digital dragon industrial park industrial zone
-				shenzhen  Guangdong province  518110
-				CN
-
-64-4F-B0   (hex)		Hyunjin.com
-644FB0     (base 16)		Hyunjin.com
-				 Hyochang-dong 5-86, Yongsan-gu
-				Seoul    140-896
-				KR
-
-00-E0-E6   (hex)		INCAA Computers
-00E0E6     (base 16)		INCAA Computers
-				P.O. BOX 211
-				7300 AE APELDOORN    na
-				NL
-
-28-F3-66   (hex)		Shenzhen Bilian electronic CO.,LTD
-28F366     (base 16)		Shenzhen Bilian electronic CO.,LTD
-				NO 268，Fuqian Rd,Jutang Community,Guanlan town , LongHua new district,Shenzhen,518110,China.
-				Shenzhen    518110
-				CN
-
-E0-A3-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E0A3AC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-75-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC7574     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-A6-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-20A680     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-28-B3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8828B3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-E5-97   (hex)		Gessler GmbH
-A4E597     (base 16)		Gessler GmbH
-				Gutenbergring 14
-				Rodgau    63110
-				DE
-
-00-6C-BC   (hex)		Cisco Systems, Inc
-006CBC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-5C-70-A3   (hex)		LG Electronics (Mobile Communications)
-5C70A3     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-1D-08   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
-001D08     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
-				188 NANHUAN ROAD
-				ZHANGJIAGANG  JIANGSU  215611
-				CN
-
-00-1D-82   (hex)		GN Netcom A/S
-001D82     (base 16)		GN Netcom A/S
-				Lautrupbjerg 7
-				Ballerup    DK - 2750
-				DK
-
-00-13-17   (hex)		GN Netcom A/S
-001317     (base 16)		GN Netcom A/S
-				Metalbuen 66
-				Ballerup  Skovlunde  DK-2750
-				DK
-
-00-A0-A4   (hex)		Oracle Corporation 
-00A0A4     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-74-97-81   (hex)		zte corporation
-749781     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-01-F4   (hex)		Enterasys
-0001F4     (base 16)		Enterasys
-				35 Industrial Way
-				Rochester  NH  03867
-				US
-
-00-10-9B   (hex)		Emulex Corporation
-00109B     (base 16)		Emulex Corporation
-				3333 Susan Street
-				Costa Mesa  CA  92626
-				US
-
-00-14-2A   (hex)		Elitegroup Computer Systems Co.,Ltd.
-00142A     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No.22, Alley 38, Lane 91, Sec. 1,
-				Taipei    114
-				TW
-
-00-11-5B   (hex)		Elitegroup Computer Systems Co.,Ltd.
-00115B     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No.22, Alley 38, Lane 91, Sec. 1, Nei Hu
-				Taipei    114
-				TW
-
-C0-3F-D5   (hex)		Elitegroup Computer Systems Co.,Ltd.
-C03FD5     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No. 239, Sec. 2, Ti-Ding Blvd
-				Taipei    11493
-				TW
-
-EC-A8-6B   (hex)		Elitegroup Computer Systems Co.,Ltd.
-ECA86B     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				NO. 239, Sec. 2, Ti Ding Blvd.
-				Taipei    11493
-				TW
-
-C8-9C-DC   (hex)		Elitegroup Computer Systems Co.,Ltd.
-C89CDC     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				NO. 239, Sec. 2, Ti Ding Blvd.
-				Taipei    11493
-				TW
-
-00-25-11   (hex)		Elitegroup Computer Systems Co.,Ltd.
-002511     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				NO. 239, Sec. 2, Ti Ding Blvd.
-				Taipei  Taiwan  11493
-				TW
-
-44-87-FC   (hex)		Elitegroup Computer Systems Co.,Ltd.
-4487FC     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				NO. 239, Sec. 2, Ti Ding Blvd.
-				Taipei  Taiwan  11493
-				TW
-
-A8-6B-AD   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-A86BAD     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-D8-0F-99   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-D80F99     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-B4-B1-5A   (hex)		Siemens AG Energy Management Division
-B4B15A     (base 16)		Siemens AG Energy Management Division
-				Humboldtstr. 59
-				Nurnberg  Bavaria  90459
-				DE
-
-00-24-65   (hex)		Elentec
-002465     (base 16)		Elentec
-				401-13 Chunggye-Ri,Dongtan-Myun
-				Hwasung  Kyunggi  445-811
-				KR
-
-00-08-9F   (hex)		EFM Networks
-00089F     (base 16)		EFM Networks
-				403, 4th floor Elegance 1 Bldg.
-				Sungnam-si  Kyunggi-do  463-808
-				KR
-
-00-50-FC   (hex)		Edimax Technology Co. Ltd.
-0050FC     (base 16)		Edimax Technology Co. Ltd.
-				No. 278, Xinhu 1st Road
-				Taipei City  Neihu Dist  248
-				TW
-
-9C-DF-03   (hex)		Harman/Becker Automotive Systems GmbH
-9CDF03     (base 16)		Harman/Becker Automotive Systems GmbH
-				Becker-Göring-Straße 16
-				Karlsbad  Baden-Württemberg  76307
-				DE
-
-00-11-88   (hex)		Enterasys
-001188     (base 16)		Enterasys
-				35 Industrial Way
-				Rochester  NH  03867
-				US
-
-00-16-FA   (hex)		ECI Telecom Ltd.
-0016FA     (base 16)		ECI Telecom Ltd.
-				30 Hasivim St.
-				Petah Tikva    49133
-				US
-
-F8-A1-88   (hex)		LED Roadway Lighting
-F8A188     (base 16)		LED Roadway Lighting
-				115 Chain Lake Dr.
-				Halifax  NS  B3S 1B3
-				CA
-
-A0-82-AC   (hex)		Linear DMS Solutions Sdn. Bhd.
-A082AC     (base 16)		Linear DMS Solutions Sdn. Bhd.
-				135, Jalan Utara
-				PENANG  Pulau Pinang  11700
-				MY
-
-A8-6A-C1   (hex)		HanbitEDS Co., Ltd.
-A86AC1     (base 16)		HanbitEDS Co., Ltd.
-				44-10, Techno 10-ro, Yuseong-gu
-				Daejeon  Daejeon  34027
-				KR
-
-D4-63-FE   (hex)		Arcadyan Corporation
-D463FE     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-68-93-61   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-689361     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-BC-15-AC   (hex)		Vodafone Italia S.p.A.
-BC15AC     (base 16)		Vodafone Italia S.p.A.
-				Via Lorenteggio nr. 240
-				Milan  Italy  20147
-				IT
-
-00-BD-82   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-00BD82     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-94-51-3D   (hex)		iSmart Alarm, Inc.
-94513D     (base 16)		iSmart Alarm, Inc.
-				1290 Kifer Road Suite 306
-				Sunnyvale  CA  94086
-				US
-
-00-11-74   (hex)		 Mojo Networks, Inc.
-001174     (base 16)		 Mojo Networks, Inc.
-				339 N.Bernardo Ave
-				Mountain View  CA  94043
-				US
-
-00-19-54   (hex)		Leaf Corporation.
-001954     (base 16)		Leaf Corporation.
-				Amuze 1F
-				Isehara City  Kanagawa-Pref.  259-1117
-				JP
-
-94-66-E7   (hex)		WOM Engineering
-9466E7     (base 16)		WOM Engineering
-				13F., No. 192, Sec. 2, Zhongxing Rd., Xindian Dist.
-				New Taipei City  Taiwan  231
-				TW
-
-4C-B8-B5   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-4CB8B5     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-85-C2   (hex)		ASRock Incorporation
-7085C2     (base 16)		ASRock Incorporation
-				2F., No. 37, Sec. 2, Jhongyang S. Rd., Beitou District,
-				Taipei    112
-				TW
-
-EC-93-ED   (hex)		DDoS-Guard LTD
-EC93ED     (base 16)		DDoS-Guard LTD
-				goroda Volos, 6, 904
-				Rostov-on-Don    344010
-				RU
-
-30-FC-68   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-30FC68     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-8A-96   (hex)		Cisco Systems, Inc
-008A96     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-60-A7   (hex)		Sony Interactive Entertainment Inc.
-BC60A7     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-80-8C-97   (hex)		Kaonmedia CO., LTD.
-808C97     (base 16)		Kaonmedia CO., LTD.
-				884-3, Seongnam-daero, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13517
-				KR
-
-DC-EE-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DCEE06     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-52-C7   (hex)		Bose Corporation
-0452C7     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-F0-27-45   (hex)		F-Secure Corporation
-F02745     (base 16)		F-Secure Corporation
-				Tammasaarenkatu 7
-				Helsinki    00181
-				FI
-
-54-D0-B4   (hex)		Xiamen Four-Faith Communication Technology Co.,Ltd
-54D0B4     (base 16)		Xiamen Four-Faith Communication Technology Co.,Ltd
-				3rd Floor,No,44,GuanRi Road,Software Park,XiaMen
-				XiaMen  Fujian  361000
-				CN
-
-00-13-7C   (hex)		Kaicom co., Ltd.
-00137C     (base 16)		Kaicom co., Ltd.
-				#109, Gayang Techno Town 1487, Gayang-dong,Kangso-gu
-				Seoul    157-810
-				KR
-
-E8-56-59   (hex)		Advanced-Connectek Inc.
-E85659     (base 16)		Advanced-Connectek Inc.
-				No. 2,Alley 9, Lane 45, Baoxing Rd., Xiadian Dist.,
-				New Taipei City    231
-				TW
-
-34-BF-90   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-34BF90     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-CC-B3-F8   (hex)		FUJITSU ISOTEC LIMITED
-CCB3F8     (base 16)		FUJITSU ISOTEC LIMITED
-				135,Higashinozaki,Hobara-machi,
-				Date-shi  Fukushima  960-0695
-				JP
-
-E4-A4-71   (hex)		Intel Corporate
-E4A471     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-10-F0-05   (hex)		Intel Corporate
-10F005     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-64-CC-2E   (hex)		Xiaomi Communications Co Ltd
-64CC2E     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-88-01-F2   (hex)		Vitec System Engineering Inc.
-8801F2     (base 16)		Vitec System Engineering Inc.
-				203203 Kita-shinagawa
-				Shinagawa-ku  Tokyo  140-0001
-				JP
-
-14-D1-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14D11F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-DC-09-4C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DC094C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-67-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C6758     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-BC-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24BCF8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-04-3E   (hex)		Parker Hannifin Manufacturing Germany GmbH & Co. KG
-A0043E     (base 16)		Parker Hannifin Manufacturing Germany GmbH & Co. KG
-				Gutenbergstrasse 38
-				Kaarst  Select State  41564
-				DE
-
-C8-45-29   (hex)		IMK Networks Co.,Ltd
-C84529     (base 16)		IMK Networks Co.,Ltd
-				201-Ho jungribjunja, 16-3bunji, 
-				Seoul    143-816
-				KR
-
-7C-47-7C   (hex)		IEEE Registration Authority
-7C477C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F8-77-B8   (hex)		Samsung Electronics Co.,Ltd
-F877B8     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-F0-D2-F1   (hex)		Amazon Technologies Inc.
-F0D2F1     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-A8-E3-EE   (hex)		Sony Interactive Entertainment Inc.
-A8E3EE     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-00-24-8D   (hex)		Sony Interactive Entertainment Inc.
-00248D     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-00-04-1F   (hex)		Sony Interactive Entertainment Inc.
-00041F     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-20-A9-0E   (hex)		TCT mobile ltd
-20A90E     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-EC-43-8B   (hex)		YAPTV
-EC438B     (base 16)		YAPTV
-				623 GangNamDa-Ro
-				Seocho-Gu  Seoul  06524
-				KR
-
-98-0C-A5   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-980CA5     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-44-11-02   (hex)		EDMI  Europe Ltd
-441102     (base 16)		EDMI  Europe Ltd
-				The Grainger  Suite, Dobson House
-				Newcastle upon Tyne    NE3 3PF
-				GB
-
-A8-5E-E4   (hex)		12Sided Technology, LLC
-A85EE4     (base 16)		12Sided Technology, LLC
-				1 Penn Plaza, 36th Floor
-				New York  NY  10119
-				US
-
-18-21-95   (hex)		Samsung Electronics Co.,Ltd
-182195     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-44-78-3E   (hex)		Samsung Electronics Co.,Ltd
-44783E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-A2-F4   (hex)		Chameleon Technology (UK) Limited
-0CA2F4     (base 16)		Chameleon Technology (UK) Limited
-				Gardner House,  Hornbeam Park Avenue
-				Hornbeam Park  Harrogate  HG2 8NA
-				GB
-
-BC-44-B0   (hex)		Elastifile
-BC44B0     (base 16)		Elastifile
-				Abba Even 8
-				Herzlia    4672526
-				IL
-
-74-BF-B7   (hex)		Nusoft Corporation
-74BFB7     (base 16)		Nusoft Corporation
-				3F.-1, No. 880, Zhongzheng Rd.,
-				Zhonghe Dist., New Taipei City  Taiwan (R.O.C.)   235-86
-				TW
-
-50-DA-00   (hex)		Hangzhou H3C Technologies Co., Limited
-50DA00     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-F4-ED-5F   (hex)		SHENZHEN KTC TECHNOLOGY GROUP 
-F4ED5F     (base 16)		SHENZHEN KTC TECHNOLOGY GROUP 
-				Wuhe Street
-				Shenzhen  Guangdong  518129
-				CN
-
-00-E0-E4   (hex)		FANUC ROBOTICS NORTH AMERICA, Inc.
-00E0E4     (base 16)		FANUC ROBOTICS NORTH AMERICA, Inc.
-				3900 W. HAMLIN RD.
-				ROCHESTER HILLS  MI  48309-3253
-				US
-
-00-08-96   (hex)		Printronix, Inc.
-000896     (base 16)		Printronix, Inc.
-				14600 Myford Rd.
-				Irvine  California  92623-9559
-				US
-
-24-5E-BE   (hex)		QNAP Systems, Inc.
-245EBE     (base 16)		QNAP Systems, Inc.
-				2F., No.22, Zhongxing Rd., Xizhi Dist.
-				New Taipei City    221
-				TW
-
-04-04-EA   (hex)		Valens Semiconductor Ltd.
-0404EA     (base 16)		Valens Semiconductor Ltd.
-				8 Hanagar Street
-				Hod Hasharon  Hod Hasharon  4501309
-				IL
-
-80-0D-D7   (hex)		Latticework, Inc
-800DD7     (base 16)		Latticework, Inc
-				2210 O'Toole Ave, Suite 250
-				San Jose  CA  95131
-				US
-
-D0-B5-3D   (hex)		SEPRO ROBOTIQUE
-D0B53D     (base 16)		SEPRO ROBOTIQUE
-				ZI Acti-Est Les Ajoncs
-				LA ROCHE SUR YON    F85003
-				FR
-
-00-D0-EC   (hex)		NAKAYO Inc
-00D0EC     (base 16)		NAKAYO Inc
-				Development Support Center 165 Higashiomuro-machi
-				Maebashi-shi  Gunma  379-2105
-				JP
-
-4C-CC-6A   (hex)		Micro-Star INTL CO., LTD.
-4CCC6A     (base 16)		Micro-Star INTL CO., LTD.
-				No.69, Lide St.,
-				New Taipei City  Taiwan  235
-				TW
-
-30-63-6B   (hex)		Apple, Inc.
-30636B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-88-4D   (hex)		JAPAN RADIO CO., LTD.
-70884D     (base 16)		JAPAN RADIO CO., LTD.
-				5-1-1 SHIMORENJYAKU,
-				MITAKA-SHI, TOKYO    181-8510
-				JP
-
-A4-F1-E8   (hex)		Apple, Inc.
-A4F1E8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-67-51   (hex)		Compal Broadband Networks, Inc.
-546751     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-24-0B-0A   (hex)		Palo Alto Networks
-240B0A     (base 16)		Palo Alto Networks
-				4401 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-D0-99-D5   (hex)		Alcatel-Lucent
-D099D5     (base 16)		Alcatel-Lucent
-				777 East Middlefield Road
-				Mountain View  CA  94043
-				US
-
-14-C3-C2   (hex)		K.A. Schmersal GmbH & Co. KG
-14C3C2     (base 16)		K.A. Schmersal GmbH & Co. KG
-				Möddinghofe 30
-				Wuppertal  NRW  42279
-				DE
-
-10-78-5B   (hex)		Actiontec Electronics, Inc
-10785B     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-DC-00-77   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-DC0077     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-F4-F5-A5   (hex)		Nokia Corporation
-F4F5A5     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo    24101
-				FI
-
-EC-9B-5B   (hex)		Nokia Corporation
-EC9B5B     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-2C-CC-15   (hex)		Nokia Corporation
-2CCC15     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-14-BB-6E   (hex)		Samsung Electronics Co.,Ltd
-14BB6E     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-18-86-AC   (hex)		Nokia Danmark A/S
-1886AC     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790V
-				DK
-
-00-1F-5C   (hex)		Nokia Danmark A/S
-001F5C     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790V
-				DK
-
-00-1F-00   (hex)		Nokia Danmark A/S
-001F00     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790V
-				DK
-
-00-25-47   (hex)		Nokia Danmark A/S
-002547     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-18-C5   (hex)		Nokia Danmark A/S
-0018C5     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    1790
-				DK
-
-00-16-4E   (hex)		Nokia Danmark A/S
-00164E     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-26-68   (hex)		Nokia Danmark A/S
-002668     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-24-7D   (hex)		Nokia Danmark A/S
-00247D     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-22-65   (hex)		Nokia Danmark A/S
-002265     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-F8-80-96   (hex)		Elsys Equipamentos Eletrônicos Ltda
-F88096     (base 16)		Elsys Equipamentos Eletrônicos Ltda
-				Rod. Visconde de Porto Seguro, n.º 2.660, Sitio Recreio dos Cafezais
-				Valinhos  SP  13278327
-				BR
-
-A8-11-FC   (hex)		ARRIS Group, Inc.
-A811FC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-AA   (hex)		DrayTek Corp.
-001DAA     (base 16)		DrayTek Corp.
-				No. 26, Fu-Shing Road
-				Hsin-Chu    303
-				TW
-
-E4-98-D1   (hex)		Microsoft Mobile Oy
-E498D1     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				ESPOO    02150
-				FI
-
-6C-27-79   (hex)		Microsoft Mobile Oy
-6C2779     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				ESPOO    02150
-				FI
-
-00-CF-1C   (hex)		Communication Machinery Corporation
-00CF1C     (base 16)		Communication Machinery Corporation
-				1226 ANACAPA
-				SANTA BARBARA  CA  93101
-				US
-
-28-CC-01   (hex)		Samsung Electronics Co.,Ltd
-28CC01     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D8-FB-5E   (hex)		ASKEY COMPUTER CORP
-D8FB5E     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-00-23-26   (hex)		FUJITSU LIMITED
-002326     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-0C-BF-15   (hex)		Genetec Inc.
-0CBF15     (base 16)		Genetec Inc.
-				2280 boul Alfred-Nobel
-				St. Laurent  Quebec  H4S 2A4
-				CA
-
-00-0D-4B   (hex)		Roku, Inc.
-000D4B     (base 16)		Roku, Inc.
-				399 Sherman Ave. #12
-				Palo Alto  CA  94306
-				US
-
-00-40-FB   (hex)		CASCADE COMMUNICATIONS
-0040FB     (base 16)		CASCADE COMMUNICATIONS
-				PRODUCTION QUALITY ENGINEER
-				WESTFORD  MA  01886
-				US
-
-D0-54-2D   (hex)		Cambridge Industries(Group) Co.,Ltd.
-D0542D     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				22 Floor,Qilai Tower;889 Yishan Road
-				Shanghai    200233
-				CN
-
-74-4A-A4   (hex)		zte corporation
-744AA4     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-1B-A9   (hex)		Brother industries, LTD.
-001BA9     (base 16)		Brother industries, LTD.
-				Printing & Solutions Company, Development Management Dept.
-				Nagoya  Aichi  467-8561
-				JP
-
-30-A2-20   (hex)		ARG Telecom
-30A220     (base 16)		ARG Telecom
-				No.69, W. Lavasani St. ,
-				Tehran  Tehran  1936938194
-				IR
-
-6C-F3-73   (hex)		Samsung Electronics Co.,Ltd
-6CF373     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-3A-AF   (hex)		Samsung Electronics Co.,Ltd
-9C3AAF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-78-1F-DB   (hex)		Samsung Electronics Co.,Ltd
-781FDB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-4C-A5-6D   (hex)		Samsung Electronics Co.,Ltd
-4CA56D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B8-6C-E8   (hex)		Samsung Electronics Co.,Ltd
-B86CE8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-B3-19   (hex)		Samsung Electronics Co.,Ltd
-0CB319     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-3F-47   (hex)		Samsung Electronics Co.,Ltd
-183F47     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-62-93   (hex)		Samsung Electronics Co.,Ltd
-B46293     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-A4-C8   (hex)		Samsung Electronics Co.,Ltd
-50A4C8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-00-1D   (hex)		Cabletron Systems, Inc.
-00001D     (base 16)		Cabletron Systems, Inc.
-				35 INDUSTRIAL WAY
-				ROCHESTER  NH  03867
-				US
-
-18-67-B0   (hex)		Samsung Electronics Co.,Ltd
-1867B0     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-6C-83-36   (hex)		Samsung Electronics Co.,Ltd
-6C8336     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-D8-7C   (hex)		Beijing Jingdong Century Trading Co., LTD.
-DCD87C     (base 16)		Beijing Jingdong Century Trading Co., LTD.
-				28F,Building A Zhaolin Plaza,NO.19,Ronghua Middle road,BDA Beijing
-				Beijing    100176
-				CN
-
-C4-DA-7D   (hex)		Ivium Technologies B.V.
-C4DA7D     (base 16)		Ivium Technologies B.V.
-				De Zaale 11
-				Eindhoven  Noord Brabant  5612 AJ
-				NL
-
-00-0B-6A   (hex)		Asiarock Technology Limited
-000B6A     (base 16)		Asiarock Technology Limited
-				P.O. Box957, Offshore Incorporations Cen
-				Road Town  Tortola  12345
-				VG
-
-00-90-96   (hex)		ASKEY COMPUTER CORP
-009096     (base 16)		ASKEY COMPUTER CORP
-				2F, NO. 2, LANE 497
-				TAIPEI  23136    12345
-				TW
-
-00-1B-9E   (hex)		ASKEY COMPUTER CORP
-001B9E     (base 16)		ASKEY COMPUTER CORP
-				10F,NO.119,CHIENKANG RD,
-				CHUNG-HO,TPIPEI    235
-				TW
-
-E0-CA-94   (hex)		ASKEY COMPUTER CORP
-E0CA94     (base 16)		ASKEY COMPUTER CORP
-				10F,NO.119,CHIENKANG RD,CHUNG-HO,TAIPEI,
-				TAIWAN  TAIPEI  235
-				TW
-
-00-26-B6   (hex)		ASKEY COMPUTER CORP
-0026B6     (base 16)		ASKEY COMPUTER CORP
-				10F,NO.119,CHIENKANG RD,CHUNG-HO,TAIPEI,
-				TAIWAN  TAIPEI  235
-				TW
-
-00-25-57   (hex)		BlackBerry RTS
-002557     (base 16)		BlackBerry RTS
-				440 Phillip Street
-				Waterloo  Ontario  N2L 5W9
-				CA
-
-00-1C-CC   (hex)		BlackBerry RTS
-001CCC     (base 16)		BlackBerry RTS
-				305 Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-00-30-0A   (hex)		Aztech Electronics Pte Ltd
-00300A     (base 16)		Aztech Electronics Pte Ltd
-				31 UBI ROAD 1
-				singapore    408694
-				SG
-
-00-1F-3F   (hex)		AVM GmbH
-001F3F     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin    10559
-				DE
-
-24-65-11   (hex)		AVM GmbH
-246511     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin    10559
-				DE
-
-C0-FF-D4   (hex)		NETGEAR
-C0FFD4     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-6C-B0-CE   (hex)		NETGEAR
-6CB0CE     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-8E-F2   (hex)		NETGEAR
-008EF2     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-9C-D3-6D   (hex)		NETGEAR
-9CD36D     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-C4-04-15   (hex)		NETGEAR
-C40415     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-E8-FC-AF   (hex)		NETGEAR
-E8FCAF     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-84-1B-5E   (hex)		NETGEAR
-841B5E     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-2C-B0-5D   (hex)		NETGEAR
-2CB05D     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-A0-21-B7   (hex)		NETGEAR
-A021B7     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-24-B2   (hex)		NETGEAR
-0024B2     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-1B-2F   (hex)		NETGEAR
-001B2F     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-26-4D   (hex)		Arcadyan Technology Corporation
-00264D     (base 16)		Arcadyan Technology Corporation
-				4F., No. 9 , Park Avenue II ,
-				Hsinchu  Taiwan  300
-				TW
-
-84-9C-A6   (hex)		Arcadyan Technology Corporation
-849CA6     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-E0-3E-44   (hex)		Broadcom
-E03E44     (base 16)		Broadcom
-				190 Mathilda Place
-				Sunnyvale  CA  94086
-				US
-
-00-1F-33   (hex)		NETGEAR
-001F33     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-20-40   (hex)		ARRIS Group, Inc.
-002040     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-38-6B-BB   (hex)		ARRIS Group, Inc.
-386BBB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E8-6D-52   (hex)		ARRIS Group, Inc.
-E86D52     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-3C-75-4A   (hex)		ARRIS Group, Inc.
-3C754A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E4-83-99   (hex)		ARRIS Group, Inc.
-E48399     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-21-43   (hex)		ARRIS Group, Inc.
-002143     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-74-F6-12   (hex)		ARRIS Group, Inc.
-74F612     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-24-95   (hex)		ARRIS Group, Inc.
-002495     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-24-A0   (hex)		ARRIS Group, Inc.
-0024A0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-08-0E   (hex)		ARRIS Group, Inc.
-00080E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-90-9C   (hex)		ARRIS Group, Inc.
-00909C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-12-25   (hex)		ARRIS Group, Inc.
-001225     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-14-5B-D1   (hex)		ARRIS Group, Inc.
-145BD1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-6C-C1-D2   (hex)		ARRIS Group, Inc.
-6CC1D2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-1C-14-48   (hex)		ARRIS Group, Inc.
-1C1448     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-17-84   (hex)		ARRIS Group, Inc.
-001784     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1C-11   (hex)		ARRIS Group, Inc.
-001C11     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1E-46   (hex)		ARRIS Group, Inc.
-001E46     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-18-A4   (hex)		ARRIS Group, Inc.
-0018A4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-18-C0   (hex)		ARRIS Group, Inc.
-0018C0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-74   (hex)		ARRIS Group, Inc.
-002374     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-AC-E0-10   (hex)		Liteon Technology Corporation
-ACE010     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road, ChungHo
-				New Taipei City  Taiwan  23585
-				TW
-
-74-75-48   (hex)		Amazon Technologies Inc.
-747548     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-00-B1   (hex)		Alpha Micro
-0000B1     (base 16)		Alpha Micro
-				3501 SUNFLOWER
-				SANTA ANA  CA  92704
-				US
-
-00-18-02   (hex)		Alpha Networks Inc.
-001802     (base 16)		Alpha Networks Inc.
-				No.8 Li-shing Seventh Road,Science-based Industrial Park
-				Hsinchu    300
-				TW
-
-78-84-3C   (hex)		Sony Corporation
-78843C     (base 16)		Sony Corporation
-				Gotenyama Tec,5-1-12,
-				Shinagawa-ku  Tokyo  141-0001
-				JP
-
-00-13-A9   (hex)		Sony Corporation
-0013A9     (base 16)		Sony Corporation
-				Gotenyama Tec, 5-1-2 Kitashinagawa
-				Tokyo    141-0001
-				JP
-
-FC-0F-E6   (hex)		Sony Interactive Entertainment Inc.
-FC0FE6     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-74-DE-2B   (hex)		Liteon Technology Corporation
-74DE2B     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-00-22-5F   (hex)		Liteon Technology Corporation
-00225F     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-5C-93-A2   (hex)		Liteon Technology Corporation
-5C93A2     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road, ChungHo, TaiPei Hsien
-				TaiPei  TaiWan  23585
-				TW
-
-24-FD-52   (hex)		Liteon Technology Corporation
-24FD52     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo
-				New Taipei City  Taipei  23585
-				TW
-
-2C-D0-5A   (hex)		Liteon Technology Corporation
-2CD05A     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo
-				New Taipei City  Taipei  23585
-				TW
-
-74-E5-43   (hex)		Liteon Technology Corporation
-74E543     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo
-				New Taipei City  Taipei  23585
-				TW
-
-00-15-CF   (hex)		ARRIS Group, Inc.
-0015CF     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-6C-FA-A7   (hex)		AMPAK Technology, Inc.
-6CFAA7     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road
-				Hsinchu    30352
-				TW
-
-54-E4-BD   (hex)		FN-LINK TECHNOLOGY LIMITED
-54E4BD     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				5th Floor, A Building, Haoye Logistics Park, Shugang Channel, Bao'an District,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-54-14-FD   (hex)		Orbbec 3D Technology International
-5414FD     (base 16)		Orbbec 3D Technology International
-				950 Stephenson Hwy Suite 208
-				Troy  MI  48083
-				US
-
-90-0B-C1   (hex)		Sprocomm Technologies CO.,Ltd
-900BC1     (base 16)		Sprocomm Technologies CO.,Ltd
-				5D-506 F1.6 Block,Tianfa Building,Tianan Chegongmiao Industrial Park,Futian Dist,Shenzhen China
-				Shenzhen  Guangdong  518000
-				CN
-
-00-1C-A8   (hex)		AirTies Wireless Networks
-001CA8     (base 16)		AirTies Wireless Networks
-				Gulbahar Mahallesi, Avni Diligil Sokak
-				ISTANBUL  ISTANBUL  34394
-				TR
-
-48-5D-60   (hex)		AzureWave Technology Inc.
-485D60     (base 16)		AzureWave Technology Inc.
-				8F ., No.94, Baozhong Rd. 
-				Xindian City  Taipei County  231 
-				TW
-
-DC-85-DE   (hex)		AzureWave Technology Inc.
-DC85DE     (base 16)		AzureWave Technology Inc.
-				8F ., No.94, Baozhong RD, Sindian, 
-				New Taipei City    231
-				TW
-
-B0-EE-45   (hex)		AzureWave Technology Inc.
-B0EE45     (base 16)		AzureWave Technology Inc.
-				8F ., No.94, Baozhong Rd. , Xindian Dist., 
-				New Taipei City    231
-				US
-
-00-23-8E   (hex)		ADB Broadband Italia
-00238E     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-00-1D-8B   (hex)		ADB Broadband Italia
-001D8B     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-00-13-C8   (hex)		ADB Broadband Italia
-0013C8     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-DC-0B-1A   (hex)		ADB Broadband Italia
-DC0B1A     (base 16)		ADB Broadband Italia
-				via Sarca 222
-				Milano    20126
-				IT
-
-0C-6A-E6   (hex)		Stanley Security Solutions
-0C6AE6     (base 16)		Stanley Security Solutions
-				6161 East 75th Street
-				Indianapolis  IN  46250
-				US
-
-84-26-15   (hex)		ADB Broadband Italia
-842615     (base 16)		ADB Broadband Italia
-				VIALE SARCA 336
-				MILANO    20126
-				IT
-
-F0-84-2F   (hex)		ADB Broadband Italia
-F0842F     (base 16)		ADB Broadband Italia
-				VIALE SARCA 336
-				MILANO    20126
-				IT
-
-54-27-1E   (hex)		AzureWave Technology Inc.
-54271E     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City    231
-				TW
-
-28-C2-DD   (hex)		AzureWave Technology Inc.
-28C2DD     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.,
-				New Taipei City  Taiwan  231
-				TW
-
-80-A5-89   (hex)		AzureWave Technology Inc.
-80A589     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.,
-				New Taipei City  Taiwan  231
-				TW
-
-C4-09-38   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-C40938     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building,,Star-net Science Plaza
-				Fuzhou  Fujian  350002
-				CN
-
-00-1C-50   (hex)		TCL Technoly Electronics (Huizhou) Co., Ltd.
-001C50     (base 16)		TCL Technoly Electronics (Huizhou) Co., Ltd.
-				10/F, Block A , TCL Tower
-				Shenzhen  Guangdong  518057
-				CN
-
-00-AA-02   (hex)		Intel Corporation
-00AA02     (base 16)		Intel Corporation
-				445
-				piscataway  NJ  08554
-				US
-
-AC-E5-F0   (hex)		Doppler Labs
-ACE5F0     (base 16)		Doppler Labs
-				611 Broadway Suite 523
-				New York  NY  10012
-				US
-
-F4-8E-38   (hex)		Dell Inc.
-F48E38     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-74-C6-3B   (hex)		AzureWave Technology Inc.
-74C63B     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-7C-7A-91   (hex)		Intel Corporate
-7C7A91     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-AC-7B-A1   (hex)		Intel Corporate
-AC7BA1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-6C-29-95   (hex)		Intel Corporate
-6C2995     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-98-4F-EE   (hex)		Intel Corporate
-984FEE     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-E8-2A-EA   (hex)		Intel Corporate
-E82AEA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-60-57-18   (hex)		Intel Corporate
-605718     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-C4-D9-87   (hex)		Intel Corporate
-C4D987     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-FC-F8-AE   (hex)		Intel Corporate
-FCF8AE     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-60-36-DD   (hex)		Intel Corporate
-6036DD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-10-0B-A9   (hex)		Intel Corporate
-100BA9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-8C-70-5A   (hex)		Intel Corporate
-8C705A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-60-67-20   (hex)		Intel Corporate
-606720     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-7C-5C-F8   (hex)		Intel Corporate
-7C5CF8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-B4-E1-C4   (hex)		Microsoft Mobile Oy
-B4E1C4     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				Espoo    02150
-				FI
-
-E0-75-7D   (hex)		Motorola Mobility LLC, a Lenovo Company
-E0757D     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				600 North US Highway 45
-				Libertyville  IL  60048
-				US
-
-34-BB-26   (hex)		Motorola Mobility LLC, a Lenovo Company
-34BB26     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				600 North US Highway 45
-				Libertyville  IL  60048
-				US
-
-80-6C-1B   (hex)		Motorola Mobility LLC, a Lenovo Company
-806C1B     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 Merchandise Mart Plaza, Suite 1800
-				Chicago  IL  60654
-				US
-
-00-16-EB   (hex)		Intel Corporate
-0016EB     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-18-DE   (hex)		Intel Corporate
-0018DE     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-5C-E0-C5   (hex)		Intel Corporate
-5CE0C5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-58-A8-39   (hex)		Intel Corporate
-58A839     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1E-67   (hex)		Intel Corporate
-001E67     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-22-FA   (hex)		Intel Corporate
-0022FA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-15-00   (hex)		Intel Corporate
-001500     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-A0-88-B4   (hex)		Intel Corporate
-A088B4     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-64-80-99   (hex)		Intel Corporate
-648099     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-D0-7E-35   (hex)		Intel Corporate
-D07E35     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1E-65   (hex)		Intel Corporate
-001E65     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-34-84-46   (hex)		Ericsson AB
-348446     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-04-4E-06   (hex)		Ericsson AB
-044E06     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-00-27-0E   (hex)		Intel Corporate
-00270E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-26-B9   (hex)		Dell Inc.
-0026B9     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-64-00-6A   (hex)		Dell Inc.
-64006A     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-D0-9E   (hex)		2Wire Inc
-00D09E     (base 16)		2Wire Inc
-				694 TASMAN DRIVE
-				MILPITAS  CA  95035
-				US
-
-00-19-E4   (hex)		2Wire Inc
-0019E4     (base 16)		2Wire Inc
-				1704 Automation Parkway
-				San Jose  CA  94538
-				US
-
-00-1A-C4   (hex)		2Wire Inc
-001AC4     (base 16)		2Wire Inc
-				1704 Automation Parkway
-				San Jose  CA  94538
-				US
-
-00-1B-5B   (hex)		2Wire Inc
-001B5B     (base 16)		2Wire Inc
-				1704 Automation Parkway
-				San Jose  CA  95131
-				US
-
-3C-EA-4F   (hex)		2Wire Inc
-3CEA4F     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose    95131
-				US
-
-DC-7F-A4   (hex)		2Wire Inc
-DC7FA4     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose    95131
-				US
-
-B0-D5-CC   (hex)		Texas Instruments
-B0D5CC     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-38-29-DD   (hex)		ONvocal Inc
-3829DD     (base 16)		ONvocal Inc
-				104 Otis Street, Ste 28
-				Northborough  MA  01532
-				US
-
-00-1E-C7   (hex)		2Wire Inc
-001EC7     (base 16)		2Wire Inc
-				1704 Automation Prkwy
-				San Jose    95131
-				US
-
-00-26-50   (hex)		2Wire Inc
-002650     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-00-23-51   (hex)		2Wire Inc
-002351     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-00-1E-4F   (hex)		Dell Inc.
-001E4F     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock    78682
-				US
-
-5C-26-0A   (hex)		Dell Inc.
-5C260A     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock     78682
-				US
-
-78-45-C4   (hex)		Dell Inc.
-7845C4     (base 16)		Dell Inc.
-				One Dell way
-				Round Rock    78682
-				US
-
-C8-1F-66   (hex)		Dell Inc.
-C81F66     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-15-C5   (hex)		Dell Inc.
-0015C5     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-14-22   (hex)		Dell Inc.
-001422     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-10-98-36   (hex)		Dell Inc.
-109836     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-80-0A-80   (hex)		IEEE Registration Authority
-800A80     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F8-DB-88   (hex)		Dell Inc.
-F8DB88     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-3C-A3-48   (hex)		vivo Mobile Communication Co., Ltd.
-3CA348     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-E4-5A-A2   (hex)		vivo Mobile Communication Co., Ltd.
-E45AA2     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-CC-3B-3E   (hex)		Lester Electrical
-CC3B3E     (base 16)		Lester Electrical
-				625 W A Street
-				Lincoln  NE  68522
-				US
-
-20-82-C0   (hex)		Xiaomi Communications Co Ltd
-2082C0     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-DC-6D-CD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-DC6DCD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-C4-28-2D   (hex)		Embedded Intellect Pty Ltd
-C4282D     (base 16)		Embedded Intellect Pty Ltd
-				Level 32, 101 Miller Street
-				North Sydney  NSW  2060
-				AU
-
-58-46-E1   (hex)		Baxter International Inc
-5846E1     (base 16)		Baxter International Inc
-				One Baxter Parkway
-				Deerfield  IL  60015
-				US
-
-00-17-3F   (hex)		Belkin International Inc.
-00173F     (base 16)		Belkin International Inc.
-				501 West Walnut Street
-				Compton  CA  90220-5221
-				US
-
-00-1C-DF   (hex)		Belkin International Inc.
-001CDF     (base 16)		Belkin International Inc.
-				12045 E. Waterfront Drive
-				Playa Vista  CA  90094
-				US
-
-C0-56-27   (hex)		Belkin International Inc.
-C05627     (base 16)		Belkin International Inc.
-				12045 E. Waterfront Drive
-				Playa Vista  CA  90094
-				US
-
-4C-17-EB   (hex)		Sagemcom Broadband SAS
-4C17EB     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-CC-33-BB   (hex)		Sagemcom Broadband SAS
-CC33BB     (base 16)		Sagemcom Broadband SAS
-				250 ROUTE DE L'EMPEREUR
-				RUEIL MALMAISON CEDEX  Choisissez l'état / la province  92848
-				FR
-
-D8-6C-E9   (hex)		Sagemcom Broadband SAS
-D86CE9     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-E8-F1-B0   (hex)		Sagemcom Broadband SAS
-E8F1B0     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-5C-6B-32   (hex)		Texas Instruments
-5C6B32     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-84-DD-20   (hex)		Texas Instruments
-84DD20     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-18-31   (hex)		Texas Instruments
-001831     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-24-FD-5B   (hex)		SmartThings, Inc.
-24FD5B     (base 16)		SmartThings, Inc.
-				456 University Avenue
-				Palo Alto  CA  94301
-				US
-
-28-76-CD   (hex)		Funshion Online Technologies Co.,Ltd
-2876CD     (base 16)		Funshion Online Technologies Co.,Ltd
-				Tower B 1201, Jinqiu International Building, No.6, Zhichun Road, Haidian District
-				Beijing    100088
-				CN
-
-20-55-32   (hex)		Gotech International Technology Limited
-205532     (base 16)		Gotech International Technology Limited
-				Unit 2506, 25/F, Prosperity Place,6 Shing Yip Street, Kwun Tong,  Kowloon
-				Hong Kong    00000
-				CN
-
-2C-FF-65   (hex)		Oki Electric Industry Co., Ltd.
-2CFF65     (base 16)		Oki Electric Industry Co., Ltd.
-				1-7-12 Toranomon
-				Tokyo 105-8460    
-				JP
-
-2C-27-D7   (hex)		Hewlett Packard
-2C27D7     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-98-4B-E1   (hex)		Hewlett Packard
-984BE1     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-29-26   (hex)		Applied Optoelectronics, Inc Taiwan Branch
-002926     (base 16)		Applied Optoelectronics, Inc Taiwan Branch
-				No.18,Gong 4th Rd
-				New Taipei City  Linkou District  24452
-				TW
-
-24-BA-13   (hex)		RISO KAGAKU CORPORATION
-24BA13     (base 16)		RISO KAGAKU CORPORATION
-				2-8-1 Gakuen-minami
-				Thukuba-shi  Ibaraki  305-0818
-				JP
-
-00-17-E5   (hex)		Texas Instruments
-0017E5     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-EC   (hex)		Texas Instruments
-0017EC     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-E7   (hex)		Texas Instruments
-0017E7     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-E9   (hex)		Texas Instruments
-0017E9     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-1C-BA-8C   (hex)		Texas Instruments
-1CBA8C     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-15-E9   (hex)		D-Link Corporation
-0015E9     (base 16)		D-Link Corporation
-				2F, No.233-2, Pao-Chiao Road
-				Hsin-Tien,  Taipei  231
-				TW
-
-00-1B-11   (hex)		D-Link Corporation
-001B11     (base 16)		D-Link Corporation
-				NO.289, Sinhu 3rd Rd.,
-				Neihu District,  Taipei City  114
-				TW
-
-00-26-5A   (hex)		D-Link Corporation
-00265A     (base 16)		D-Link Corporation
-				No.289, Sinhu 3rd Rd.,
-				Neihu District    114
-				TW
-
-C8-BE-19   (hex)		D-Link International
-C8BE19     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-A4-BA-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4BA76     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-00-50-C2   (hex)		IEEE Registration Authority
-0050C2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-44-00-10   (hex)		Apple, Inc.
-440010     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-56-CD   (hex)		Apple, Inc.
-0056CD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-60-37   (hex)		NXP Semiconductors
-006037     (base 16)		NXP Semiconductors
-				High Tech Campus 32, Office 1.21
-				SAF  AD  13456
-				NL
-
-DC-C0-EB   (hex)		ASSA ABLOY CÔTE PICARDE
-DCC0EB     (base 16)		ASSA ABLOY CÔTE PICARDE
-				rue Alexandre Fichet
-				Oust-Marest    80460
-				FR
-
-28-BC-56   (hex)		EMAC, Inc.
-28BC56     (base 16)		EMAC, Inc.
-				2390 EMAC Way
-				Carbondale  IL  62902
-				US
-
-00-CD-FE   (hex)		Apple, Inc.
-00CDFE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-78-CD   (hex)		Ignition Design Labs
-0078CD     (base 16)		Ignition Design Labs
-				1550 Technology Drive
-				San Jose    95110
-				US
-
-B4-36-A9   (hex)		Fibocom Wireless Inc. 
-B436A9     (base 16)		Fibocom Wireless Inc. 
-				 5/F,Tower A,Technology Building II,1057# Nanhai Blvd
-				Shenzhen  GuangDong  518000
-				CN
-
-70-CA-4D   (hex)		Shenzhen lnovance Technology Co.,Ltd.
-70CA4D     (base 16)		Shenzhen lnovance Technology Co.,Ltd.
-				LiuXian 2 Road
-				Shenzhen  Guangdong  518000
-				CN
-
-00-1A-11   (hex)		Google, Inc.
-001A11     (base 16)		Google, Inc.
-				1600 Amphitheater Parkway
-				Mountain View  CA  94043
-				US
-
-48-DB-50   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48DB50     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-C8-47-8C   (hex)		Beken Corporation
-C8478C     (base 16)		Beken Corporation
-				Building 41, Capital of Tech Leaders, 1387 Zhangdong Road, Zhangjiang High-Tech Park, Pudong New District
-				Shanghai    201203
-				CN
-
-9C-EF-D5   (hex)		Panda Wireless, Inc.
-9CEFD5     (base 16)		Panda Wireless, Inc.
-				15559 Union Ave, Suite 300
-				Los Gatos  CA  95032
-				US
-
-9C-34-26   (hex)		ARRIS Group, Inc.
-9C3426     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-2C-6E-85   (hex)		Intel Corporate
-2C6E85     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1D-D1   (hex)		ARRIS Group, Inc.
-001DD1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-CF   (hex)		ARRIS Group, Inc.
-001DCF     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-D5   (hex)		ARRIS Group, Inc.
-001DD5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-D4   (hex)		ARRIS Group, Inc.
-001DD4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E4-98-D6   (hex)		Apple, Inc.
-E498D6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-22-83   (hex)		Juniper Networks
-002283     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-10-DB   (hex)		Juniper Networks
-0010DB     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-12-1E   (hex)		Juniper Networks
-00121E     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-CC-A4-62   (hex)		ARRIS Group, Inc.
-CCA462     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-48-45-20   (hex)		Intel Corporate
-484520     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-C8-0E-77   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-C80E77     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-				No.201-427,2F,Tthe Animation  Building B1 District£¬No. 126£¬Tianjin eco-city animation Road
-				Tianjin    300467
-				CN
-
-10-6F-3F   (hex)		BUFFALO.INC
-106F3F     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref.  460-8315
-				JP
-
-90-49-FA   (hex)		Intel Corporate
-9049FA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-BC-0F-64   (hex)		Intel Corporate
-BC0F64     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-00-C5   (hex)		ARRIS Group, Inc.
-0000C5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-64-55-B1   (hex)		ARRIS Group, Inc.
-6455B1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-02-B3   (hex)		Intel Corporation
-0002B3     (base 16)		Intel Corporation
-				M/S:  JF3-420
-				Hillsboro  OR  97124
-				US
-
-00-03-47   (hex)		Intel Corporation
-000347     (base 16)		Intel Corporation
-				M/S:  JF3-420
-				Hillsboro  OR  97124
-				US
-
-00-0E-0C   (hex)		Intel Corporation
-000E0C     (base 16)		Intel Corporation
-				2111 NE  25th Avenue
-				Hillsboro  OR  97124
-				US
-
-D8-D3-85   (hex)		Hewlett Packard
-D8D385     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-18-A9-05   (hex)		Hewlett Packard
-18A905     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-1B-78   (hex)		Hewlett Packard
-001B78     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-E4-FA-FD   (hex)		Intel Corporate
-E4FAFD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-94-65-9C   (hex)		Intel Corporate
-94659C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-B0-C7-45   (hex)		BUFFALO.INC
-B0C745     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg.,30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref  460-8315
-				JP
-
-14-CF-E2   (hex)		ARRIS Group, Inc.
-14CFE2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-44-E1-37   (hex)		ARRIS Group, Inc.
-44E137     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-13-20   (hex)		Intel Corporate
-001320     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-80-E1   (hex)		STMicroelectronics SRL
-0080E1     (base 16)		STMicroelectronics SRL
-				1000 AZTEC WEST
-				london    12345
-				GB
-
-F8-DB-7F   (hex)		HTC Corporation
-F8DB7F     (base 16)		HTC Corporation
-				No.23 Xinghua Road
-				Taoyuan County    330
-				TW
-
-64-A7-69   (hex)		HTC Corporation
-64A769     (base 16)		HTC Corporation
-				No.23 Xinghua Road
-				Taoyuan County    330
-				TW
-
-E8-99-C4   (hex)		HTC Corporation
-E899C4     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-BC-CF-CC   (hex)		HTC Corporation
-BCCFCC     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County    330
-				TW
-
-00-04-EA   (hex)		Hewlett Packard
-0004EA     (base 16)		Hewlett Packard
-				MAIL STOP 42LE
-				CUPERTINO  CA  95014
-				US
-
-00-12-79   (hex)		Hewlett Packard
-001279     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-13-21   (hex)		Hewlett Packard
-001321     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-08-02   (hex)		Hewlett Packard
-000802     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-02-A5   (hex)		Hewlett Packard
-0002A5     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-18-71   (hex)		Hewlett Packard
-001871     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-0E-7F   (hex)		Hewlett Packard
-000E7F     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-11-85   (hex)		Hewlett Packard
-001185     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-10-60-4B   (hex)		Hewlett Packard
-10604B     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-C8-CB-B8   (hex)		Hewlett Packard
-C8CBB8     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-84-34-97   (hex)		Hewlett Packard
-843497     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-6C-C2-17   (hex)		Hewlett Packard
-6CC217     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-14-58-D0   (hex)		Hewlett Packard
-1458D0     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-5C-8A-38   (hex)		Hewlett Packard
-5C8A38     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-EC-9A-74   (hex)		Hewlett Packard
-EC9A74     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-2C-59-E5   (hex)		Hewlett Packard
-2C59E5     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-D8-FC-38   (hex)		Giantec Semiconductor Inc
-D8FC38     (base 16)		Giantec Semiconductor Inc
-				No12, Lane647, Songtao Rd, Zhangjiang Hi-Tech Park
-				Shanghai  Shanghai  201203
-				CN
-
-AC-2A-0C   (hex)		CSR ZHUZHOU INSTITUTE CO.,LTD.
-AC2A0C     (base 16)		CSR ZHUZHOU INSTITUTE CO.,LTD.
-				Times Ave.,Zhuzhou,hunan,China
-				zhuzhou  Hunan  412001
-				CN
-
-2C-67-98   (hex)		InTalTech Ltd.
-2C6798     (base 16)		InTalTech Ltd.
-				Shlomo Ben David 5
-				Rishon LeZion    7536215
-				IL
-
-00-23-4D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-00234D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-25-56   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-002556     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-60-18-88   (hex)		zte corporation
-601888     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D8-60-B0   (hex)		bioMérieux Italia S.p.A.
-D860B0     (base 16)		bioMérieux Italia S.p.A.
-				Via di Campigliano, 58
-				Bagno a Ripoli  Firenze  50012
-				IT
-
-54-E6-FC   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-54E6FC     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
-				Shenzhen  Guangdong  518000
-				CN
-
-74-EA-3A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-74EA3A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 7, Second Part, Honghualing Industrial Zone
-				Shenzhen  Guangdong  518000
-				CN
-
-F8-1A-67   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F81A67     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan
-				shenzhen  guangdong Province  518057
-				CN
-
-EC-17-2F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-EC172F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan
-				shenzhen  guangdong Province  518057
-				CN
-
-84-77-78   (hex)		Cochlear Limited
-847778     (base 16)		Cochlear Limited
-				1 University Avenue
-				Sydney  New South Wales  2109
-				AU
-
-88-7F-03   (hex)		Comper Technology Investment Limited
-887F03     (base 16)		Comper Technology Investment Limited
-				Room 710, Wangjing SOHO Tower 1-B
-				Beijing  Beijing  100102
-				CN
-
-00-19-E0   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-0019E0     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				South Building, No.5 Keyuan Road
-				Nanshan  Shenzhen  518057
-				CN
-
-00-25-86   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-002586     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 7, Second Part, Honghualing Industrial Zone
-				Shenzhen  Guangdong  518057
-				CN
-
-F4-31-C3   (hex)		Apple, Inc.
-F431C3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-A5-C3   (hex)		Apple, Inc.
-64A5C3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-56-5A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-28565A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-6C-B5-6B   (hex)		HUMAX Co., Ltd.
-6CB56B     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village,216,Hwangsaeul-ro,Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-BC-3A-EA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-BC3AEA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
-				DONGGUAN  GUANGDONG  523860
-				CN
-
-E4-22-A5   (hex)		PLANTRONICS, INC.
-E422A5     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-D4-C9-B2   (hex)		Quanergy Systems Inc
-D4C9B2     (base 16)		Quanergy Systems Inc
-				482 Mercury Drive
-				Sunnyvale  California  94085
-				US
-
-60-21-C0   (hex)		Murata Manufacturing Co., Ltd.
-6021C0     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1 Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-88-30-8A   (hex)		Murata Manufacturing Co., Ltd.
-88308A     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1 Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-5C-DA-D4   (hex)		Murata Manufacturing Co., Ltd.
-5CDAD4     (base 16)		Murata Manufacturing Co., Ltd.
-				2288, Oaza-Ohshinohara, Yasu-cho,
-				Yasu-gun  Shiga  520-2393
-				JP
-
-00-26-E8   (hex)		Murata Manufacturing Co., Ltd.
-0026E8     (base 16)		Murata Manufacturing Co., Ltd.
-				2288, Oaza-Ohshinohara, Yasu-cho,
-				Yasu-gun  Shiga  520-2393
-				JP
-
-00-25-12   (hex)		zte corporation
-002512     (base 16)		zte corporation
-				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
-				Shenzhen  GUANGDONG  518057
-				CN
-
-00-1C-26   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-001C26     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-14-E6-E4   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-14E6E4     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan,
-				Shenzhen  Guangdong Province,  518057
-				CN
-
-34-4B-50   (hex)		zte corporation
-344B50     (base 16)		zte corporation
-				12/F,ZTE R&D Building,Kejinan Road,
-				Shenzhen  Guangdong  518057
-				CN
-
-FC-C8-97   (hex)		zte corporation
-FCC897     (base 16)		zte corporation
-				12/F.,zte R&D building,kejinan Road,
-				shenzhen  guangdong  518057
-				CN
-
-00-16-CE   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-0016CE     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-22-68   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-002268     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-18-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-001882     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				F1-20,Section F,Huawei Base,Bantian, Longgang District
-				ShenZhen  GuangDong  518129
-				CN
-
-D4-EA-0E   (hex)		Avaya Inc
-D4EA0E     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-6C-FA-58   (hex)		Avaya Inc
-6CFA58     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-20-F3-A3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-20F3A3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-0C-37-DC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C37DC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-BC-76-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC7670     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-24-DB-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24DBAC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-1C-1D-67   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C1D67     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-30-0E-D5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-300ED5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-48-5A-B6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-485AB6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-54-35-30   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-543530     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-F8-66-D1   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-F866D1     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-24-69-A5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2469A5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-EC-23-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC233D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-78-F5-FD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-78F5FD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-5C-7D-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5C7D5E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-90-67-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-90671C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-25-E0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC25E0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-E3-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4E3FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-2D-B3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D02DB3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
-				Shenzhen  GuangDong  518057
-				CN
-
-E8-CD-2D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8CD2D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
-				Shenzhen  GuangDong  518057
-				CN
-
-84-A8-E4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-84A8E4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-0C-96-BF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C96BF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-E7-01   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60E701     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-08-8B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8088B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-51-C6   (hex)		Avaya Inc
-A051C6     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-F0-EB-D0   (hex)		Shanghai Feixun Communication Co.,Ltd.
-F0EBD0     (base 16)		Shanghai Feixun Communication Co.,Ltd.
-				Building 90,No,4855,Guangfulin Road
-				shanghai  Shanghai  201616
-				CN
-
-64-3E-8C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-643E8C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				Shenzhen  Guangdong  518129
-				CN
-
-00-12-D2   (hex)		Texas Instruments
-0012D2     (base 16)		Texas Instruments
-				12500 TI Boulevard
-				Dallas    75243
-				US
-
-A8-63-F2   (hex)		Texas Instruments
-A863F2     (base 16)		Texas Instruments
-				12203 S.W.Freeway, MS728
-				Stafford    77477
-				US
-
-7C-60-97   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C6097     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-CC-53-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CC53B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-60-DE-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60DE44     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-10-51-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-105172     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				Shenzhen  Guangdong  518129
-				CN
-
-08-E8-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-08E84F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				Shenzhen  Guangdong  518129
-				CN
-
-88-86-03   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-888603     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen    518129
-				CN
-
-04-F9-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04F938     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen  Guangdong  518129
-				CN
-
-AC-85-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC853D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen  Guangdong  518129
-				CN
-
-48-46-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4846FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen  Guangdong  518129
-				CN
-
-D0-FF-50   (hex)		Texas Instruments
-D0FF50     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-20-C3-8F   (hex)		Texas Instruments
-20C38F     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-7C-66-9D   (hex)		Texas Instruments
-7C669D     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D8-DD-FD   (hex)		Texas Instruments
-D8DDFD     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D0-5F-B8   (hex)		Texas Instruments
-D05FB8     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-E0-24-7F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E0247F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-00-46-4B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-00464B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-80-FB-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-80FB06     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-6C-A8-49   (hex)		Avaya Inc
-6CA849     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-64-C3-54   (hex)		Avaya Inc
-64C354     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-50-CD-22   (hex)		Avaya Inc
-50CD22     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-B4-A9-5A   (hex)		Avaya Inc
-B4A95A     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-84-EB-18   (hex)		Texas Instruments
-84EB18     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-EC-11-27   (hex)		Texas Instruments
-EC1127     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-58-16-26   (hex)		Avaya Inc
-581626     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-70-E4-22   (hex)		Cisco Systems, Inc
-70E422     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-00-50-0F   (hex)		Cisco Systems, Inc
-00500F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-7C-1D-D9   (hex)		Xiaomi Communications Co Ltd
-7C1DD9     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-A0-86-C6   (hex)		Xiaomi Communications Co Ltd
-A086C6     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-9C-99-A0   (hex)		Xiaomi Communications Co Ltd
-9C99A0     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-58-44-98   (hex)		Xiaomi Communications Co Ltd
-584498     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-00-E0-B0   (hex)		Cisco Systems, Inc
-00E0B0     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-E0-FE   (hex)		Cisco Systems, Inc
-00E0FE     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-E0-34   (hex)		Cisco Systems, Inc
-00E034     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-E0-F9   (hex)		Cisco Systems, Inc
-00E0F9     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-C8-D7-19   (hex)		Cisco-Linksys, LLC
-C8D719     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine    92612
-				US
-
-00-10-79   (hex)		Cisco Systems, Inc
-001079     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-29   (hex)		Cisco Systems, Inc
-001029     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-0E-08   (hex)		Cisco-Linksys, LLC
-000E08     (base 16)		Cisco-Linksys, LLC
-				170 West Tasman Dr.
-				San Jose  CA  95134
-				US
-
-44-03-A7   (hex)		Cisco Systems, Inc
-4403A7     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-B0-FA-EB   (hex)		Cisco Systems, Inc
-B0FAEB     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-7C-AD-74   (hex)		Cisco Systems, Inc
-7CAD74     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-60-3E   (hex)		Cisco Systems, Inc
-00603E     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-60-2F   (hex)		Cisco Systems, Inc
-00602F     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-60-47   (hex)		Cisco Systems, Inc
-006047     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-50-A2   (hex)		Cisco Systems, Inc
-0050A2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-3D   (hex)		Cisco Systems, Inc
-00023D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-20-3A-07   (hex)		Cisco Systems, Inc
-203A07     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-50-2A   (hex)		Cisco Systems, Inc
-00502A     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-BC-16-F5   (hex)		Cisco Systems, Inc
-BC16F5     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-FC-5B-39   (hex)		Cisco Systems, Inc
-FC5B39     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-34-6F-90   (hex)		Cisco Systems, Inc
-346F90     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-5C-FC-66   (hex)		Cisco Systems, Inc
-5CFC66     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-D4-6D-50   (hex)		Cisco Systems, Inc
-D46D50     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-74-A0-2F   (hex)		Cisco Systems, Inc
-74A02F     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-88-90-8D   (hex)		Cisco Systems, Inc
-88908D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F0-78-16   (hex)		Cisco Systems, Inc
-F07816     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-22-3A   (hex)		Cisco SPVTG
-00223A     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-00-21-BE   (hex)		Cisco SPVTG
-0021BE     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-14-DA-E9   (hex)		ASUSTek COMPUTER INC.
-14DAE9     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,
-				Taipei    112
-				TW
-
-F4-CF-E2   (hex)		Cisco Systems, Inc
-F4CFE2     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-A8-0C-0D   (hex)		Cisco Systems, Inc
-A80C0D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-C0-7B-BC   (hex)		Cisco Systems, Inc
-C07BBC     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-24-E9-B3   (hex)		Cisco Systems, Inc
-24E9B3     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-11-D8   (hex)		ASUSTek COMPUTER INC.
-0011D8     (base 16)		ASUSTek COMPUTER INC.
-				No.150, Li-Te Rd., Peitou
-				Taipei    112
-				TW
-
-C0-8C-60   (hex)		Cisco Systems, Inc
-C08C60     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-E8-ED-F3   (hex)		Cisco Systems, Inc
-E8EDF3     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-E4-C7-22   (hex)		Cisco Systems, Inc
-E4C722     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-64-E9-50   (hex)		Cisco Systems, Inc
-64E950     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F4-1F-C2   (hex)		Cisco Systems, Inc
-F41FC2     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-44-AD-D9   (hex)		Cisco Systems, Inc
-44ADD9     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-0C-68-03   (hex)		Cisco Systems, Inc
-0C6803     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-1C-DE-A7   (hex)		Cisco Systems, Inc
-1CDEA7     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F0-7F-06   (hex)		Cisco Systems, Inc
-F07F06     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-88-F0-31   (hex)		Cisco Systems, Inc
-88F031     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-18-F3   (hex)		ASUSTek COMPUTER INC.
-0018F3     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou
-				Taipei    112
-				TW
-
-00-1A-92   (hex)		ASUSTek COMPUTER INC.
-001A92     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou
-				Taipei    112
-				TW
-
-00-0C-41   (hex)		Cisco-Linksys, LLC
-000C41     (base 16)		Cisco-Linksys, LLC
-				121 Theory Dr.
-				Irvine  CA  92612
-				US
-
-00-16-B6   (hex)		Cisco-Linksys, LLC
-0016B6     (base 16)		Cisco-Linksys, LLC
-				121 Theory Dr.
-				Irvine  CA  92612
-				US
-
-00-18-F8   (hex)		Cisco-Linksys, LLC
-0018F8     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  CA  92612
-				US
-
-00-25-2E   (hex)		Cisco SPVTG
-00252E     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-54-D4-6F   (hex)		Cisco SPVTG
-54D46F     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-A4-A2-4A   (hex)		Cisco SPVTG
-A4A24A     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-44-E0-8E   (hex)		Cisco SPVTG
-44E08E     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-00-E0-36   (hex)		PIONEER CORPORATION
-00E036     (base 16)		PIONEER CORPORATION
-				2610 Hanazono 4-Chome
-				Saitama Prefecture, 359-8    34567
-				JP
-
-00-E0-4F   (hex)		Cisco Systems, Inc
-00E04F     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-FF   (hex)		Cisco Systems, Inc
-0010FF     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-54   (hex)		Cisco Systems, Inc
-001054     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-F6   (hex)		Cisco Systems, Inc
-0010F6     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-A6   (hex)		Cisco Systems, Inc
-0010A6     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-BC-C8-10   (hex)		Cisco SPVTG
-BCC810     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-7C-B2-1B   (hex)		Cisco SPVTG
-7CB21B     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville    30044
-				US
-
-24-76-7D   (hex)		Cisco SPVTG
-24767D     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-48-1D-70   (hex)		Cisco SPVTG
-481D70     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-F0-B2-E5   (hex)		Cisco Systems, Inc
-F0B2E5     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-23-32   (hex)		Apple, Inc.
-002332     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-23-6C   (hex)		Apple, Inc.
-00236C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-23-DF   (hex)		Apple, Inc.
-0023DF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-25-00   (hex)		Apple, Inc.
-002500     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-25-BC   (hex)		Apple, Inc.
-0025BC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-97-BD   (hex)		Cisco Systems, Inc
-5897BD     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-5C-83-8F   (hex)		Cisco Systems, Inc
-5C838F     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-EC-BD-1D   (hex)		Cisco Systems, Inc
-ECBD1D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-19-E3   (hex)		Apple, Inc.
-0019E3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1B-63   (hex)		Apple, Inc.
-001B63     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1E-C2   (hex)		Apple, Inc.
-001EC2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1F-F3   (hex)		Apple, Inc.
-001FF3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-10-FA   (hex)		Apple, Inc.
-0010FA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-50-E4   (hex)		Apple, Inc.
-0050E4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-0D-93   (hex)		Apple, Inc.
-000D93     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-FA-DF   (hex)		Apple, Inc.
-7CFADF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-A3-E4   (hex)		Apple, Inc.
-78A3E4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-8F-C6   (hex)		Apple, Inc.
-148FC6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-6A-B8   (hex)		Apple, Inc.
-286AB8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-E0-2C   (hex)		Apple, Inc.
-28E02C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-B9-BA   (hex)		Apple, Inc.
-E0B9BA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-C6-10   (hex)		Apple, Inc.
-00C610     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-F6-B1   (hex)		Apple, Inc.
-B8F6B1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-FA-BA   (hex)		Apple, Inc.
-8CFABA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-D1-C3   (hex)		Apple, Inc.
-7CD1C3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-DC-E2   (hex)		Apple, Inc.
-F0DCE2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-AB-81   (hex)		Apple, Inc.
-24AB81     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-F8-47   (hex)		Apple, Inc.
-E0F847     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-E7-CF   (hex)		Apple, Inc.
-28E7CF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-CE-8F   (hex)		Apple, Inc.
-E4CE8F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-20-66   (hex)		Apple, Inc.
-A82066     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-52-B7   (hex)		Apple, Inc.
-BC52B7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-59-48   (hex)		Apple, Inc.
-5C5948     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-BC-C8   (hex)		Apple, Inc.
-C8BCC8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-04-0B   (hex)		Apple, Inc.
-E8040B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-5A-05   (hex)		Apple, Inc.
-145A05     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-AB-A7   (hex)		Apple, Inc.
-1CABA7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-84-7A   (hex)		Apple, Inc.
-C0847A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-15-9E   (hex)		Apple, Inc.
-34159E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-B0-35   (hex)		Apple, Inc.
-58B035     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-86-D8   (hex)		Apple, Inc.
-DC86D8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-B9-31   (hex)		Apple, Inc.
-90B931     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-E1-40   (hex)		Apple, Inc.
-D0E140     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-A2-E1   (hex)		Apple, Inc.
-24A2E1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-21-4C   (hex)		Insight Energy Ventures LLC
-04214C     (base 16)		Insight Energy Ventures LLC
-				123 W. Fifth St
-				Royal Oak  MI  48067
-				US
-
-F8-32-E4   (hex)		ASUSTek COMPUTER INC.
-F832E4     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-80-EA-96   (hex)		Apple, Inc.
-80EA96     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-03-08   (hex)		Apple, Inc.
-600308     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-F1-3E   (hex)		Apple, Inc.
-04F13E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-F0-AB   (hex)		Apple, Inc.
-98F0AB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-31-C1   (hex)		Apple, Inc.
-7831C1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-3A-84   (hex)		Apple, Inc.
-783A84     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-8D-4E   (hex)		Apple, Inc.
-5C8D4E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-63-DF   (hex)		Apple, Inc.
-8863DF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-1F-A1   (hex)		Apple, Inc.
-881FA1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-E0-EB   (hex)		Apple, Inc.
-C8E0EB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-B8-E3   (hex)		Apple, Inc.
-98B8E3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-53-95   (hex)		Apple, Inc.
-885395     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-6C-1C   (hex)		Apple, Inc.
-786C1C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-8D-79   (hex)		Apple, Inc.
-4C8D79     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-E6-2B   (hex)		Apple, Inc.
-1CE62B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-30-21   (hex)		Apple, Inc.
-0C3021     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-3E-9F   (hex)		Apple, Inc.
-0C3E9F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-FC-48   (hex)		Apple, Inc.
-FCFC48     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-29-3F   (hex)		Apple, Inc.
-9C293F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-A1-AB   (hex)		Intellisis
-80A1AB     (base 16)		Intellisis
-				10350 Science Center Dr
-				San Diego  CA  92121
-				US
-
-84-28-5A   (hex)		Saffron Solutions Inc
-84285A     (base 16)		Saffron Solutions Inc
-				1337 Mass Ave #273
-				Arlington  MA  02476
-				US
-
-D4-B8-FF   (hex)		Home Control Singapore Pte Ltd
-D4B8FF     (base 16)		Home Control Singapore Pte Ltd
-				620A Lorong 1 Toa Payoh
-				Singapore  Singapore  217909
-				SG
-
-08-74-02   (hex)		Apple, Inc.
-087402     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-F6-A3   (hex)		Apple, Inc.
-94F6A3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-E0-D9   (hex)		Apple, Inc.
-98E0D9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-29-F5   (hex)		Apple, Inc.
-CC29F5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-5A-EB   (hex)		Apple, Inc.
-285AEB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-24-75   (hex)		Apple, Inc.
-F02475     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-1F-23   (hex)		Apple, Inc.
-2C1F23     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-9F-13   (hex)		Apple, Inc.
-549F13     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-DB-E2   (hex)		Apple, Inc.
-F0DBE2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-81-14   (hex)		Apple, Inc.
-748114     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-F6-43   (hex)		Apple, Inc.
-18F643     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-5E-60   (hex)		Apple, Inc.
-A45E60     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-18-28   (hex)		Apple, Inc.
-A01828     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-03-4B   (hex)		Apple, Inc.
-D0034B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-41-7F   (hex)		Apple, Inc.
-10417F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-66-7F   (hex)		Apple, Inc.
-A8667F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-25-98   (hex)		Apple, Inc.
-D02598     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-BE-05   (hex)		Apple, Inc.
-80BE05     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-A0-74   (hex)		Apple, Inc.
-24A074     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-78-8B   (hex)		Apple, Inc.
-84788B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-A4-23   (hex)		Sagemcom Broadband SAS
-84A423     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-3C-78-73   (hex)		Airsonics
-3C7873     (base 16)		Airsonics
-				1289 Fordham Blvd.
-				Chapel Hill  NC  27514
-				US
-
-9C-88-AD   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-9C88AD     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-88-94-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-88947E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-C8-A2-CE   (hex)		Oasis Media Systems LLC
-C8A2CE     (base 16)		Oasis Media Systems LLC
-				1073 Barley Sheaf Rd
-				Flemington  NJ  08822
-				US
-
-58-F4-96   (hex)		Source Chain
-58F496     (base 16)		Source Chain
-				#407-4 eBIZ.Center
-				Seoul  seoul  ASI|KR|KS013|SEOUL
-				KR
-
-58-7F-57   (hex)		Apple, Inc.
-587F57     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-7C-2D   (hex)		Leie IOT technology Co., Ltd
-D07C2D     (base 16)		Leie IOT technology Co., Ltd
-				9th floor,Hongchengxintai building,No.105,Yaojiayuan Road,Chaoyang District,Beijing
-				Beijing  Beijing  100026
-				CN
-
-EC-64-E7   (hex)		MOCACARE Corporation
-EC64E7     (base 16)		MOCACARE Corporation
-				887 Federation Way
-				Palo Alto  CA  94303
-				US
-
-40-86-2E   (hex)		JDM MOBILE INTERNET SOLUTION CO., LTD.
-40862E     (base 16)		JDM MOBILE INTERNET SOLUTION CO., LTD.
-				
-				Jiashan  Zhejiang  314100
-				CN
-
-C4-BB-EA   (hex)		Pakedge Device and Software Inc
-C4BBEA     (base 16)		Pakedge Device and Software Inc
-				3847 Breakwater Ave
-				Hayward  CA  94545
-				US
-
-98-87-44   (hex)		Wuxi Hongda Science and Technology Co.,LTD
-988744     (base 16)		Wuxi Hongda Science and Technology Co.,LTD
-				No.10 An Nan Road, Nan Quan Town, Bin Hu District
-				WUXI  Jiangsu  214128
-				CN
-
-E8-34-3E   (hex)		Beijing Infosec Technologies Co., LTD.
-E8343E     (base 16)		Beijing Infosec Technologies Co., LTD.
-				Floor 4, Tower C, Global Finance and News Center
-				Beijing  Beijing  100052
-				CN
-
-34-69-87   (hex)		zte corporation
-346987     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-98-F4-28   (hex)		zte corporation
-98F428     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A4-CC-32   (hex)		Inficomm Co., Ltd
-A4CC32     (base 16)		Inficomm Co., Ltd
-				3F, B-31 Building, Tanglang Industry Park, Taoyuan Str, Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-00-6D-52   (hex)		Apple, Inc.
-006D52     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-32-99   (hex)		Lenovo (Beijing) Co., Ltd.
-A03299     (base 16)		Lenovo (Beijing) Co., Ltd.
-				No.6, ChuangYe Road,
-				Haidian District  Beijing  100085
-				CN
-
-40-54-E4   (hex)		Wearsafe Labs Inc
-4054E4     (base 16)		Wearsafe Labs Inc
-				1429 Park Street
-				Hartford  CT  06106
-				US
-
-DC-9A-8E   (hex)		Nanjing Cocomm electronics co., LTD
-DC9A8E     (base 16)		Nanjing Cocomm electronics co., LTD
-				Room 201,the Qinheng technology park building
-				Nanjing  Jiangsu  210012
-				CN
-
-AC-EE-9E   (hex)		Samsung Electronics Co.,Ltd
-ACEE9E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B8-57-D8   (hex)		Samsung Electronics Co.,Ltd
-B857D8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-70-BF-3E   (hex)		Charles River Laboratories
-70BF3E     (base 16)		Charles River Laboratories
-				1023 Wappoo Road Suite 43B
-				Charleston  SC  29407
-				US
-
-A8-C8-7F   (hex)		Roqos, Inc.
-A8C87F     (base 16)		Roqos, Inc.
-				1775 Greensboro Station Place
-				Mclean  Virginia  22102
-				US
-
-3C-83-1E   (hex)		CKD Corporation
-3C831E     (base 16)		CKD Corporation
-				250, Ouji 2-Chome
-				Komaki  Aichi  485-8551
-				JP
-
-90-DF-FB   (hex)		HOMERIDER SYSTEMS
-90DFFB     (base 16)		HOMERIDER SYSTEMS
-				12 RUE REMORA
-				GRADIGNAN  GIRONDE  33170
-				FR
-
-30-5A-3A   (hex)		ASUSTek COMPUTER INC.
-305A3A     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-2C-08-1C   (hex)		OVH
-2C081C     (base 16)		OVH
-				2, rue Kellermann
-				Roubaix  Nord  59100
-				FR
-
-C0-84-88   (hex)		Finis Inc
-C08488     (base 16)		Finis Inc
-				7085-E Las Positas Rd
-				Livermore  CA  94551
-				US
-
-38-F5-57   (hex)		JOLATA, INC.
-38F557     (base 16)		JOLATA, INC.
-				2262 N. FIRST ST.
-				SAN JOSE  CA  95134
-				US
-
-54-A3-FA   (hex)		BQT Solutions (Australia)Pty Ltd
-54A3FA     (base 16)		BQT Solutions (Australia)Pty Ltd
-				Unit 29, 1 Talavera Road
-				North Ryde  NSW  2113
-				AU
-
-24-6C-8A   (hex)		YUKAI Engineering
-246C8A     (base 16)		YUKAI Engineering
-				16-11-101, Tomihisa, Shinjuku
-				Tokyo  -  162-0067
-				
-
-AC-C5-1B   (hex)		Zhuhai Pantum Electronics Co., Ltd.
-ACC51B     (base 16)		Zhuhai Pantum Electronics Co., Ltd.
-				Area A, 3rd floor, Building No.1, No.3883, Zhuhai Avenue, Zhuhai, Guangdong, China
-				Zhuhai  Guangdong  519000
-				CN
-
-38-5F-66   (hex)		Cisco SPVTG
-385F66     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-B8-44-D9   (hex)		Apple, Inc.
-B844D9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-7A-03   (hex)		Ciena Corporation
-9C7A03     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-5C-CF-7F   (hex)		Espressif Inc.
-5CCF7F     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-68-12-95   (hex)		Lupine Lighting Systems GmbH
-681295     (base 16)		Lupine Lighting Systems GmbH
-				Winnberger Weg 11
-				Neumarkt  Bavaria  92318
-				DE
-
-70-11-AE   (hex)		Music Life LTD
-7011AE     (base 16)		Music Life LTD
-				Unit E, 31/F, Billion Centre Tower A
-				Kowloon  N/A  00000
-				HK
-
-04-1E-7A   (hex)		DSPWorks
-041E7A     (base 16)		DSPWorks
-				12/947, MHB Colony, Gorai Road
-				Mumbai    400091
-				IN
-
-84-A7-88   (hex)		Perples
-84A788     (base 16)		Perples
-				8F, 209 Dosan-daero,
-				Seoul    135-892
-				KR
-
-AC-60-B6   (hex)		Ericsson AB
-AC60B6     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-14-B3-70   (hex)		Gigaset Digital Technology (Shenzhen) Co., Ltd.
-14B370     (base 16)		Gigaset Digital Technology (Shenzhen) Co., Ltd.
-				11/F, Matsunichi Building, No.9996 Shen Nan Boulevard,  Nan Shan District, Shenzhen, China
-				ShenZhen  Guangdong  518000
-				CN
-
-68-89-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6889C1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-49-7B   (hex)		Gemtek Technology Co., Ltd.
-1C497B     (base 16)		Gemtek Technology Co., Ltd.
-				No. 1 Jen Ai Road Hsinchu Industrial Park Hukou, Hsinchu 30352 TAIWAN, REPUBLIC OF CHINA
-				Hsinchu  TAIWAN  30352
-				TW
-
-2C-CF-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2CCF58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-93-80   (hex)		Ducere Technologies Pvt. Ltd.
-D09380     (base 16)		Ducere Technologies Pvt. Ltd.
-				222B West Marredpally
-				Secunderabad  Telangana  500026
-				IN
-
-68-F9-56   (hex)		Objetivos y Servicio de Valor Añadido
-68F956     (base 16)		Objetivos y Servicio de Valor Añadido
-				c/Monte Esquinza, 28 1ºD
-				MADRID  MADRID  28010
-				ES
-
-C8-A9-FC   (hex)		Goyoo Networks Inc.
-C8A9FC     (base 16)		Goyoo Networks Inc.
-				Building D, Kelin Blocks, No.107, Dongsi North St,
-				Beijing  Beijing  100007
-				CN
-
-FC-FE-C2   (hex)		Invensys Controls UK Limited
-FCFEC2     (base 16)		Invensys Controls UK Limited
-				401 Southway Drive
-				Plymouth  Devon  Pl6 6QT
-				GB
-
-68-9A-B7   (hex)		Atelier Vision Corporation
-689AB7     (base 16)		Atelier Vision Corporation
-				888-340 Nakagawa
-				Hamamatsu  Shizuoka  431-1304
-				JP
-
-44-4C-A8   (hex)		Arista Networks
-444CA8     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-7C-2B-E1   (hex)		Shenzhen Ferex Electrical Co.,Ltd
-7C2BE1     (base 16)		Shenzhen Ferex Electrical Co.,Ltd
-				Block 2,Jiuzhou Industrial Park,Gongming
-				Shenzhen  Guangdong  518107
-				CN
-
-50-31-AD   (hex)		ABB Global Industries and Services Private Limited
-5031AD     (base 16)		ABB Global Industries and Services Private Limited
-				21st floor, World Trade Center
-				Bangalore  Karnataka  560055
-				IN
-
-14-3E-BF   (hex)		zte corporation
-143EBF     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-FC-2F-EF   (hex)		UTT Technologies Co., Ltd.
-FC2FEF     (base 16)		UTT Technologies Co., Ltd.
-				Room 301, Building 9, No. 518 Xinzhuan
-				Shanghai  Shanghai  201612
-				CN
-
-A4-C1-38   (hex)		Telink Semiconductor (Taipei) Co. Ltd.
-A4C138     (base 16)		Telink Semiconductor (Taipei) Co. Ltd.
-				Room 1050. 10F. Buld. H, No. 3-2 YuanQu St.,
-				Taipei  Taipei  11503
-				TW
-
-20-F5-10   (hex)		Codex Digital Limited
-20F510     (base 16)		Codex Digital Limited
-				60 Poland Street
-				London  Greater London  W1F 7NT
-				GB
-
-A8-74-1D   (hex)		PHOENIX CONTACT Electronics GmbH
-A8741D     (base 16)		PHOENIX CONTACT Electronics GmbH
-				Dringenauer Str. 30
-				Bad Pyrmont  -  D-31812
-				DE
-
-F0-9A-51   (hex)		Shanghai Viroyal Electronic Technology Company Limited
-F09A51     (base 16)		Shanghai Viroyal Electronic Technology Company Limited
-				LevelB,Building#3,401 Caobao Road,Shanghai,China
-				Shanghai  Shanghai  200233
-				CN
-
-4C-B8-2C   (hex)		Cambridge Mobile Telematics, Inc.
-4CB82C     (base 16)		Cambridge Mobile Telematics, Inc.
-				One Broadway, 14th Floor
-				Cambridge  MA  02142
-				US
-
-E4-A3-2F   (hex)		Shanghai Artimen Technology Co., Ltd.
-E4A32F     (base 16)		Shanghai Artimen Technology Co., Ltd.
-				Room 4462, Third Building, No. 505, Xinge Road, Xinqiao Town, SongJiang District, Shanghai City, China
-				Shanghai  Shanghai  201206
-				CN
-
-F4-67-2D   (hex)		ShenZhen Topstar Technology Company
-F4672D     (base 16)		ShenZhen Topstar Technology Company
-				5/F Buliding 204,Tai Ran ShenZhen Science&Industry Park
-				ShenZhen  GuangZhou  518042
-				CN
-
-A8-D8-28   (hex)		Ascensia Diabetes Care
-A8D828     (base 16)		Ascensia Diabetes Care
-				5 Wood Hollow Rd,
-				Parsippany  NJ  07054
-				US
-
-B8-69-C2   (hex)		Sunitec Enterprise Co., Ltd.
-B869C2     (base 16)		Sunitec Enterprise Co., Ltd.
-				1F., No.35, Dayong St., Zhonghe Dist.,
-				New Taipei City  Taiwan  235
-				TW
-
-88-CB-A5   (hex)		Suzhou Torchstar Intelligent Technology Co.,Ltd
-88CBA5     (base 16)		Suzhou Torchstar Intelligent Technology Co.,Ltd
-				Rm1704B,Business Building, No.181, Cuiyuan Rd.,SIP
-				Suzhou  Jiangsu Province  215000
-				CN
-
-7C-A2-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7CA23E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-1A-A5   (hex)		GN Netcom A/S
-501AA5     (base 16)		GN Netcom A/S
-				Lautrupbjerg 7
-				Ballerup  Ballerup  DK-2750
-				DK
-
-A4-8D-3B   (hex)		Vizio, Inc
-A48D3B     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-1C-56-FE   (hex)		Motorola Mobility LLC, a Lenovo Company
-1C56FE     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-B8-99-B0   (hex)		Cohere Technologies
-B899B0     (base 16)		Cohere Technologies
-				404 Saratoga Avenue
-				Santa Clara  CA  95050
-				US
-
-D8-5D-EF   (hex)		Busch-Jaeger Elektro GmbH
-D85DEF     (base 16)		Busch-Jaeger Elektro GmbH
-				Freisenbergstrasse 2
-				Luedenscheid  NRW  58513
-				DE
-
-88-A2-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88A2D7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-32-3A   (hex)		so-logic
-00323A     (base 16)		so-logic
-				Lustkandlgasse 52
-				Vienna  Vienna  1090
-				AT
-
-80-9F-AB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-809FAB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E0-03-70   (hex)		ShenZhen Continental Wireless Technology Co., Ltd.
-E00370     (base 16)		ShenZhen Continental Wireless Technology Co., Ltd.
-				North 23F, Dongfang Technology Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-04-61-69   (hex)		MEDIA GLOBAL LINKS CO., LTD.
-046169     (base 16)		MEDIA GLOBAL LINKS CO., LTD.
-				580-16, Horikawa-cho
-				Kawasaki  Kanagawa  212-0013
-				JP
-
-BC-EB-5F   (hex)		Fujian Beifeng Telecom Technology Co., Ltd.
-BCEB5F     (base 16)		Fujian Beifeng Telecom Technology Co., Ltd.
-				A-15, Huaqiao Economic Development Zone, Shuangyang, Luojiang,
-				quanzhou  fujian  362000
-				CN
-
-AC-5A-14   (hex)		Samsung Electronics Co.,Ltd
-AC5A14     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-AB-54   (hex)		MITSUMI ELECTRIC CO.,LTD.
-F0AB54     (base 16)		MITSUMI ELECTRIC CO.,LTD.
-				2-11-2, Tsurumaki
-				Tama-shi  Tokyo  206-8567
-				JP
-
-3C-31-78   (hex)		Qolsys Inc.
-3C3178     (base 16)		Qolsys Inc.
-				1900 The Alameda
-				San Jose  Ca  95126
-				US
-
-08-EC-A9   (hex)		Samsung Electronics Co.,Ltd
-08ECA9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E0-4B-45   (hex)		Hi-P Electronics Pte Ltd
-E04B45     (base 16)		Hi-P Electronics Pte Ltd
-				12 Ang Mo Kio Street 64
-				Singapore  Singapore  569088
-				SG
-
-F4-6A-92   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-F46A92     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-F0-D6-57   (hex)		ECHOSENS
-F0D657     (base 16)		ECHOSENS
-				30 Place d'Italie
-				PARIS 13  Ile de France  75013
-				FR
-
-9C-37-F4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C37F4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-47-11   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C4711     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-EB-68   (hex)		Cheerstar Technology Co., Ltd
-5CEB68     (base 16)		Cheerstar Technology Co., Ltd
-				5th Floor,Hongye Industrial Park,
-				ShenZhen  GuangDong  518006
-				CN
-
-AC-56-2C   (hex)		LAVA INTERNATIONAL(H.K) LIMITED
-AC562C     (base 16)		LAVA INTERNATIONAL(H.K) LIMITED
-				UNIT L 1/F MAU LAM COMM BLDG 16-18
-				Hong Kong    
-				CN
-
-FC-9A-FA   (hex)		Motus Global Inc.
-FC9AFA     (base 16)		Motus Global Inc.
-				5394 Merrick Road
-				Massapequa  NY  11758
-				US
-
-14-15-7C   (hex)		TOKYO COSMOS ELECTRIC CO.,LTD.
-14157C     (base 16)		TOKYO COSMOS ELECTRIC CO.,LTD.
-				2-268 Sobudai
-				Zama  Kanagawa  252-8550
-				JP
-
-20-E4-07   (hex)		Spark srl
-20E407     (base 16)		Spark srl
-				Via A. Gramsci 86/A
-				Reggio Emilia    42124
-				IT
-
-D0-9D-AB   (hex)		TCT mobile ltd
-D09DAB     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-88-73-84   (hex)		Toshiba
-887384     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-24-69-3E   (hex)		innodisk Corporation
-24693E     (base 16)		innodisk Corporation
-				5F., No. 237, Sec. 1, Datong Rd., Xizhi Dist.
-				New Taipei City  Taiwan  221
-				TW
-
-C0-DC-6A   (hex)		Qingdao Eastsoft Communication Technology Co.,LTD
-C0DC6A     (base 16)		Qingdao Eastsoft Communication Technology Co.,LTD
-				Shandong QINGDAO, No. 16A, Shangqing Road, Shibei District
-				QINGDAO  Shandong  266023
-				CN
-
-24-B0-A9   (hex)		Shanghai Mobiletek Communication Ltd.
-24B0A9     (base 16)		Shanghai Mobiletek Communication Ltd.
-				RM201, Building 9, No 99 Tianzhou RD, Shanghai China
-				Shanghai  Shanghai  200233
-				CN
-
-1C-C5-86   (hex)		Absolute Acoustics
-1CC586     (base 16)		Absolute Acoustics
-				Av. Corifeu de Azevedo Marques, 1703
-				  Sao Paulo  05581-001
-				BR
-
-40-7F-E0   (hex)		Glory Star Technics (ShenZhen) Limited
-407FE0     (base 16)		Glory Star Technics (ShenZhen) Limited
-				4/f, West Block, Xi Li Village, Xin Wu Industry Bldg., Nan Shan District, ShenZhen, China
-				Shenzhen  China  
-				CN
-
-C8-E1-30   (hex)		Milkyway Group Ltd
-C8E130     (base 16)		Milkyway Group Ltd
-				RM 405 Tung Ming Building
-				Hong Kong  Hong Kong  999077
-				HK
-
-48-6E-FB   (hex)		Davit System Technology Co., Ltd.
-486EFB     (base 16)		Davit System Technology Co., Ltd.
-				#304 Hanlim Human Tower, LS-Ro 172
-				Gunpo-si  Gyeonggi-Do  435-824
-				KR
-
-B0-96-6C   (hex)		Lanbowan Technology Ltd.
-B0966C     (base 16)		Lanbowan Technology Ltd.
-				No. 60 Langbao Xi Road
-				Foshan  Guangdong  528051
-				CN
-
-1C-F0-3E   (hex)		Wearhaus Inc.
-1CF03E     (base 16)		Wearhaus Inc.
-				2041 Bancroft Way
-				Berkeley  CA  94704
-				US
-
-88-3B-8B   (hex)		Cheering Connection Co. Ltd.
-883B8B     (base 16)		Cheering Connection Co. Ltd.
-				Room 602, Shenzhen Software Park T2-B
-				Shenzhen  Guangdong  518057
-				CN
-
-E4-F9-39   (hex)		Minxon Hotel Technology INC.
-E4F939     (base 16)		Minxon Hotel Technology INC.
-				3F, No.37, Dongxing Rd., Xinyi Dist.
-				Taipei  Taiwan  11070
-				TW
-
-14-6B-72   (hex)		Shenzhen Fortune Ship Technology Co., Ltd.
-146B72     (base 16)		Shenzhen Fortune Ship Technology Co., Ltd.
-				Room 701-716, 7th Floor,
-				Nanshan District, Shenzhen  Guangdong  518000
-				CN
-
-B8-F0-80   (hex)		SPS, INC.
-B8F080     (base 16)		SPS, INC.
-				70, Techno8-ro
-				Yuseong-gu  Daejeon  305-500
-				KR
-
-80-50-67   (hex)		W & D TECHNOLOGY CORPORATION
-805067     (base 16)		W & D TECHNOLOGY CORPORATION
-				1F., NO.22, GONGYEQU 31TH RD
-				TAICHUNG CITY  TAIWAN  40768
-				TW
-
-78-F9-44   (hex)		Private
-78F944     (base 16)		Private
-
-24-76-56   (hex)		Shanghai Net Miles Fiber Optics Technology Co., LTD.
-247656     (base 16)		Shanghai Net Miles Fiber Optics Technology Co., LTD.
-				Flat F, 17th Floor, Southern International Mansion
-				Shanghai  Shanghai  201401
-				CN
-
-F8-CF-C5   (hex)		Motorola Mobility LLC, a Lenovo Company
-F8CFC5     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-A4-7B-85   (hex)		ULTIMEDIA Co Ltd,
-A47B85     (base 16)		ULTIMEDIA Co Ltd,
-				Guro-Gu Saeaml-ro 102
-				Seoul    152770
-				KR
-
-5C-5B-35   (hex)		Mist Systems, Inc.
-5C5B35     (base 16)		Mist Systems, Inc.
-				1601 South De Anza Blvd, Suite 248
-				Cupertino  CA  95014
-				US
-
-EC-BA-FE   (hex)		GIROPTIC
-ECBAFE     (base 16)		GIROPTIC
-				165 avenue de Bretagne
-				Lille  Nord  59000
-				FR
-
-3C-2C-94   (hex)		杭州德澜科技有限公司（HangZhou Delan Technology Co.,Ltd）
-3C2C94     (base 16)		杭州德澜科技有限公司（HangZhou Delan Technology Co.,Ltd）
-				tianmushan road no.398,Xihu District, hangzhou city, zhejiang province, China
-				Hangzhou  ZheJiang  310013
-				CN
-
-24-1B-44   (hex)		Hangzhou Tuners Electronics Co., Ltd
-241B44     (base 16)		Hangzhou Tuners Electronics Co., Ltd
-				5/F,Building No.1,No.619
-				BinJiang District, Hangzhou  ZheJiang  310053
-				CN
-
-80-A8-5D   (hex)		Osterhout Design Group
-80A85D     (base 16)		Osterhout Design Group
-				153 Townsend Suite 570
-				San Francisco  CA  94107
-				US
-
-AC-CA-AB   (hex)		Virtual Electric Inc
-ACCAAB     (base 16)		Virtual Electric Inc
-				1314 Vanna Ct
-				San Jose  CA  95131
-				US
-
-48-54-15   (hex)		NET RULES TECNOLOGIA EIRELI
-485415     (base 16)		NET RULES TECNOLOGIA EIRELI
-				Rua Madre Cabrini, 240 - 7°andar
-				São Paulo  São Paulo  04020000
-				BR
-
-78-40-E4   (hex)		Samsung Electronics Co.,Ltd
-7840E4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E0-99-71   (hex)		Samsung Electronics Co.,Ltd
-E09971     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-70-DA-9C   (hex)		TECSEN
-70DA9C     (base 16)		TECSEN
-				$401, Jeongsu Bd, 94-70,
-				SEOUL  NA  150-037
-				KR
-
-2C-A2-B4   (hex)		Fortify Technologies, LLC
-2CA2B4     (base 16)		Fortify Technologies, LLC
-				6200 Shingle Creek Pkwy, Suite 400
-				Minneapolis  Minnesota  55430
-				US
-
-10-D3-8A   (hex)		Samsung Electronics Co.,Ltd
-10D38A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-85-01   (hex)		Geberit International AG
-E48501     (base 16)		Geberit International AG
-				Schachenstrasse 77
-				Jona  SG  8645
-				CH
-
-20-62-74   (hex)		Microsoft Corporation
-206274     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-E8-16-2B   (hex)		IDEO Security Co., Ltd.
-E8162B     (base 16)		IDEO Security Co., Ltd.
-				1404, Seoul Forest IT Valley, 77, Seongsuil-ro
-				Seongdong-gu,  SEOUL  133-822
-				KR
-
-B4-73-56   (hex)		Hangzhou Treebear Networking Co., Ltd.
-B47356     (base 16)		Hangzhou Treebear Networking Co., Ltd.
-				2F,Block A, Lianhe Building, 2#, Zijinghua RD, Xihu District
-				Hangzhou  Zhejiang  310012
-				CN
-
-34-68-95   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-346895     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-84-73-03   (hex)		Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.
-847303     (base 16)		Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.
-				5th floor,Hongchengxintai building,No.105,Yaojiayuan Road,Chaoyang District,Beijing
-				Beijing  Chaoyang  100025
-				CN
-
-3C-C2-E1   (hex)		XINHUA CONTROL ENGINEERING CO.,LTD
-3CC2E1     (base 16)		XINHUA CONTROL ENGINEERING CO.,LTD
-				160 Wenjing Road, Minhang
-				Shanghai  Shanghai  200245
-				CN
-
-8C-87-3B   (hex)		Leica Camera AG
-8C873B     (base 16)		Leica Camera AG
-				Am Leitz-Park 5
-				Wetzlar  Hessen  35578
-				DE
-
-44-F4-77   (hex)		Juniper Networks
-44F477     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-14-29-71   (hex)		NEMOA ELECTRONICS (HK) CO. LTD
-142971     (base 16)		NEMOA ELECTRONICS (HK) CO. LTD
-				ROOM 610, MINGYOU PURCHASING & DISPLAYING CENTER,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-78-E9-80   (hex)		RainUs Co.,Ltd
-78E980     (base 16)		RainUs Co.,Ltd
-				E-703, Digital Empire, 16, Deogyeong-daero
-				Suwon-si  Gyeonggi-do  443-702
-				KR
-
-E0-FF-F7   (hex)		Softiron Inc.
-E0FFF7     (base 16)		Softiron Inc.
-				6540 Central Avenue
-				Newark  California  94560
-				US
-
-3C-6A-9D   (hex)		Dexatek Technology LTD.
-3C6A9D     (base 16)		Dexatek Technology LTD.
-				15F, NO.81, Sec.1, Xizhi Dist.,
-				New Taipei City    221
-				TW
-
-34-9E-34   (hex)		Evervictory Electronic Co.Ltd
-349E34     (base 16)		Evervictory Electronic Co.Ltd
-				Chu-Chi management district Humen Town, DongGuan GuangDong Province, China
-				DongGuan  GuangDong  523000
-				CN
-
-70-0F-C7   (hex)		SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.
-700FC7     (base 16)		SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.
-				Room 8B,Building C, Tongfang Information Port, Langshan Road, Science
-				Shenzhen  Guangdong  518057
-				CN
-
-BC-74-D7   (hex)		HangZhou JuRu Technology CO.,LTD
-BC74D7     (base 16)		HangZhou JuRu Technology CO.,LTD
-				No.803 Room,Shuyu Building,No.98 Wenyi West Road,Hangzhou,Zhejiang,China
-				hangzhou  zhejiang  310053
-				CN
-
-78-EB-14   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-78EB14     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-3C-49-37   (hex)		ASSMANN Electronic GmbH
-3C4937     (base 16)		ASSMANN Electronic GmbH
-				Auf dem Schueffel 3
-				Luedenscheid  Germany  58513
-				DE
-
-84-44-64   (hex)		ServerU Inc
-844464     (base 16)		ServerU Inc
-				8100 NW 64th Street
-				Miami  FL  33166
-				US
-
-00-35-60   (hex)		Rosen Aviation
-003560     (base 16)		Rosen Aviation
-				1020 Owen Loop South
-				Eugene  Oregon  97402
-				US
-
-F8-BC-41   (hex)		Rosslare Enterprises Limited
-F8BC41     (base 16)		Rosslare Enterprises Limited
-				Flat 912 Wing Fat Industrial Building
-				Kowloon Bay  Kowloon  
-				HK
-
-3C-B7-92   (hex)		Hitachi Maxell, Ltd., Optronics Division
-3CB792     (base 16)		Hitachi Maxell, Ltd., Optronics Division
-				5030 Totsuka-cho, Totsuka-ku
-				Yokohama  Kanagawa  244-0003
-				JP
-
-F8-B2-F3   (hex)		GUANGZHOU BOSMA TECHNOLOGY CO.,LTD
-F8B2F3     (base 16)		GUANGZHOU BOSMA TECHNOLOGY CO.,LTD
-				FL.3,A5,No.11 Kaiyuan Ave., Scienc City,Guangzhou,CHINA
-				Guangzhou  GuangDong  510530
-				CN
-
-28-D9-8A   (hex)		Hangzhou Konke Technology Co.,Ltd.
-28D98A     (base 16)		Hangzhou Konke Technology Co.,Ltd.
-				Hangzhou cuibai road 7, ROOM 422
-				Hangzhou  Zhejiang  310012
-				CN
-
-D8-93-41   (hex)		General Electric Global Research
-D89341     (base 16)		General Electric Global Research
-				2623 Camino Ramon
-				San Ramon  CA  94583
-				US
-
-1C-9E-CB   (hex)		Beijing Nari Smartchip Microelectronics Company Limited
-1C9ECB     (base 16)		Beijing Nari Smartchip Microelectronics Company Limited
-				Northern Territory Xixiaokou Rd,Haidian district,Beijing 100192,China
-				beijing  beijing  100192
-				CN
-
-D4-8D-D9   (hex)		Meld Technology, Inc
-D48DD9     (base 16)		Meld Technology, Inc
-				725 San Aleso Ave
-				Sunnyvale  CA  94085
-				US
-
-DC-C6-22   (hex)		BUHEUNG SYSTEM
-DCC622     (base 16)		BUHEUNG SYSTEM
-				302, 45, Jeonpa-ro, 24 Beongil
-				Anyang-si  Gyeonggi-do  430-857
-				KR
-
-90-2C-C7   (hex)		C-MAX Asia Limited
-902CC7     (base 16)		C-MAX Asia Limited
-				Unit 117, 1/F, Liven House
-				Kwun Tong  Kowloon  852
-				HK
-
-88-70-EF   (hex)		SC Professional Trading Co., Ltd.
-8870EF     (base 16)		SC Professional Trading Co., Ltd.
-				2 Soi Krungthepkreetar 21
-				Sapansoong  Bangkok  10250
-				TH
-
-94-C0-38   (hex)		Tallac Networks
-94C038     (base 16)		Tallac Networks
-				6528 Lonetree Blvd.
-				Rocklin  CA  95765
-				US
-
-68-36-B5   (hex)		DriveScale, Inc.
-6836B5     (base 16)		DriveScale, Inc.
-				530 Lakeside Dr. #190
-				Sunnyvale  CALIFORNIA  94085
-				US
-
-C4-08-80   (hex)		Shenzhen UTEPO Tech Co., Ltd.
-C40880     (base 16)		Shenzhen UTEPO Tech Co., Ltd.
-				5/F Western Block, M-8 Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-D8-80-39   (hex)		Microchip Technology Inc.
-D88039     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-5C-96-6A   (hex)		RTNET
-5C966A     (base 16)		RTNET
-				827-64, Yeoksam-dong, Kangnam-Gu
-				Seoul  -  135-080
-				KR
-
-BC-BC-46   (hex)		SKS Welding Systems GmbH
-BCBC46     (base 16)		SKS Welding Systems GmbH
-				Marie-Curie-Str. 14
-				Kaiserslautern  Rheinlandpfalz  67661
-				DE
-
-98-16-EC   (hex)		IC Intracom
-9816EC     (base 16)		IC Intracom
-				550 Commerce Blvd
-				Oldsmar  Florida  34677
-				US
-
-D0-62-A0   (hex)		China Essence Technology (Zhumadian) Co., Ltd.
-D062A0     (base 16)		China Essence Technology (Zhumadian) Co., Ltd.
-				4th Floor, Administrative Service Center Office of Yicheng District
-				Zhumadian  Henan Province  463000
-				CN
-
-90-17-9B   (hex)		Nanomegas
-90179B     (base 16)		Nanomegas
-				BD Ed.Machtens 79/22
-				BXL  Molenbeek  1080
-				BE
-
-14-F8-93   (hex)		Wuhan FiberHome Digital Technology Co.,Ltd.
-14F893     (base 16)		Wuhan FiberHome Digital Technology Co.,Ltd.
-				No.88 YouKeyuan Road
-				Wuhan  Hubei  430074
-				CN
-
-58-21-36   (hex)		KMB systems, s.r.o.
-582136     (base 16)		KMB systems, s.r.o.
-				Dr. M. Horakove 559
-				Liberec  Czech Republic  46006
-				CZ
-
-80-09-02   (hex)		Keysight Technologies, Inc.
-800902     (base 16)		Keysight Technologies, Inc.
-				1400 Fountaingrove Pkwy.
-				Santa Rosa  CA  95403
-				US
-
-04-99-E6   (hex)		Shenzhen Yoostar Technology Co., Ltd
-0499E6     (base 16)		Shenzhen Yoostar Technology Co., Ltd
-				#503，Tower D, HUA HAN Innovation Park,
-				Shenzhen  Guangdong  518000
-				CN
-
-70-FF-5C   (hex)		Cheerzing Communication(Xiamen)Technology Co.,Ltd
-70FF5C     (base 16)		Cheerzing Communication(Xiamen)Technology Co.,Ltd
-				Room N514,North Torch Building,5 Torch Road
-				Xiamen  Fujian  361005
-				CN
-
-4C-48-DA   (hex)		Beijing Autelan Technology Co.,Ltd
-4C48DA     (base 16)		Beijing Autelan Technology Co.,Ltd
-				1-4F, 3rd Area, 9#Building Zhongguancun Software Park
-				  Beijing  100193
-				CN
-
-20-5C-FA   (hex)		Yangzhou ChangLian Network Technology Co,ltd.
-205CFA     (base 16)		Yangzhou ChangLian Network Technology Co,ltd.
-				No.60, Shangfang Temple Road
-				Yangzhou City  Jiangsu  225000
-				CN
-
-84-93-0C   (hex)		InCoax Networks Europe AB
-84930C     (base 16)		InCoax Networks Europe AB
-				Strommavagen 2
-				Gavle  Sweden  80309
-				SE
-
-1C-A2-B1   (hex)		ruwido austria gmbh
-1CA2B1     (base 16)		ruwido austria gmbh
-				Koestendorferstrasse 8
-				Neumarkt a.W.  Salzburg  5202
-				AT
-
-38-4B-76   (hex)		AIRTAME ApS
-384B76     (base 16)		AIRTAME ApS
-				Vestergade 20C
-				Copenhagen C  Copenhagen  1456
-				DK
-
-38-B1-DB   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-38B1DB     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-34-F6-D2   (hex)		Panasonic Taiwan Co.,Ltd.
-34F6D2     (base 16)		Panasonic Taiwan Co.,Ltd.
-				579,Yuan Shan Road
-				New Taipei  Taiwan  235
-				
-
-64-00-2D   (hex)		Powerlinq Co., LTD
-64002D     (base 16)		Powerlinq Co., LTD
-				13 PingDong Road 4 ,
-				Zhuhai  GD   519060
-				
-
-B4-7C-29   (hex)		Shenzhen Guzidi Technology Co.,Ltd
-B47C29     (base 16)		Shenzhen Guzidi Technology Co.,Ltd
-				South 6/F,Yingtang Building,No.5 Kejiyuan Road,Nanshan District,Shenzhen City,Guangdong Province,P.R. China
-				Shenzhen  Guangdong  518000
-				CN
-
-D4-8F-33   (hex)		Microsoft Corporation
-D48F33     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-54-F8-76   (hex)		ABB AG
-54F876     (base 16)		ABB AG
-				Trafoweg 4
-				Halle / Saale  Saxony-Anhalt  06112
-				DE
-
-34-B7-FD   (hex)		Guangzhou Younghead Electronic Technology Co.,Ltd
-34B7FD     (base 16)		Guangzhou Younghead Electronic Technology Co.,Ltd
-				Room 206,Wenzhenxin Building,Block 3, No.2 Kefa RD,Hi-Tech Park, Nanshan District, Shenzhen,China
-				Shenzhen  Guangdong  518052
-				CN
-
-B4-17-80   (hex)		DTI Group Ltd
-B41780     (base 16)		DTI Group Ltd
-				50 Affleck Rd
-				Perth Airport  Western Australia  6105
-				AU
-
-48-9D-18   (hex)		Flashbay Limited
-489D18     (base 16)		Flashbay Limited
-				6 The Fountain Centre
-				London  London  SW6 2TW
-				GB
-
-90-20-3A   (hex)		BYD Precision Manufacture Co.,Ltd
-90203A     (base 16)		BYD Precision Manufacture Co.,Ltd
-				Building 23#，NO.3009 BYD Road，Pingshan
-				Shenzhen  Guangdong  518118
-				CN
-
-80-EA-CA   (hex)		Dialog Semiconductor Hellas SA
-80EACA     (base 16)		Dialog Semiconductor Hellas SA
-				Leoforos Syggrou 143
-				Athens  Attiki  17121
-				GR
-
-20-A9-9B   (hex)		Microsoft Corporation
-20A99B     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-60-48-26   (hex)		Newbridge Technologies Int. Ltd.
-604826     (base 16)		Newbridge Technologies Int. Ltd.
-				35/F Central Plaza
-				Hong Kong    
-				CN
-
-38-F3-3F   (hex)		TATSUNO CORPORATION
-38F33F     (base 16)		TATSUNO CORPORATION
-				2-6,Mita 3-Chome,Minato-ku
-				  Tokyo  108-8520
-				JP
-
-D8-0C-CF   (hex)		C.G.V. S.A.S.
-D80CCF     (base 16)		C.G.V. S.A.S.
-				18, RUE THEODORE MONOD
-				OSTWALD CEDEX  BAS-RHIN  67541
-				FR
-
-4C-BB-58   (hex)		Chicony Electronics Co., Ltd.
-4CBB58     (base 16)		Chicony Electronics Co., Ltd.
-				No.25, Wugong 6th Rd., Wugu Dist.,
-				New Taipei City 248,  TAIWAN, REPUBLIC OF CHINA  248
-				TW
-
-A4-12-42   (hex)		NEC Platforms, Ltd.
-A41242     (base 16)		NEC Platforms, Ltd.
-				800 Shimomata
-				Kakegawa  Shizuoka  436-8501
-				JP
-
-D0-0A-AB   (hex)		Yokogawa Digital Computer Corporation
-D00AAB     (base 16)		Yokogawa Digital Computer Corporation
-				Shinjuku MIDWEST Bldg.4-30-3
-				Yoyogi  Shibuya-ku, Tokyo  151-0053
-				JP
-
-C4-00-06   (hex)		Lipi Data Systems Ltd.
-C40006     (base 16)		Lipi Data Systems Ltd.
-				Mewar Industrial Area (M.I.A)
-				UDAIPUR  RAJASTHAN  313003
-				IN
-
-38-26-2B   (hex)		UTran Technology
-38262B     (base 16)		UTran Technology
-				No.130, Guoji Rd., Tucheng Dist.,
-				New Taipei City    23650
-				TW
-
-48-0C-49   (hex)		NAKAYO Inc
-480C49     (base 16)		NAKAYO Inc
-				Development Support Center 165 Higashiomuro-machi
-				Maebashi-shi  Gunma  379-2105
-				JP
-
-3C-D9-CE   (hex)		Eclipse WiFi
-3CD9CE     (base 16)		Eclipse WiFi
-				68 S Service Rd
-				Melville  NY  11747
-				US
-
-60-77-E2   (hex)		Samsung Electronics Co.,Ltd
-6077E2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-19-10   (hex)		Samsung Electronics Co.,Ltd
-FC1910     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-79-0B   (hex)		Hitachi High Technologies America, Inc.
-FC790B     (base 16)		Hitachi High Technologies America, Inc.
-				208 Fairforest Way
-				Greenville  SC  29607
-				US
-
-60-81-F9   (hex)		Helium Systems, Inc
-6081F9     (base 16)		Helium Systems, Inc
-				717 Market Street
-				San Francisco  CA  94102
-				US
-
-84-01-A7   (hex)		Greyware Automation Products, Inc
-8401A7     (base 16)		Greyware Automation Products, Inc
-				308 Oriole Ct
-				Murphy  TX  75094
-				US
-
-98-F1-70   (hex)		Murata Manufacturing Co., Ltd.
-98F170     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-68-6E-48   (hex)		Prophet Electronic Technology Corp.,Ltd
-686E48     (base 16)		Prophet Electronic Technology Corp.,Ltd
-				9F ,3 Building,No 1535,Hongmei Road ,Xuhui District
-				Shanghai  Shanghai  200233
-				CN
-
-04-C9-91   (hex)		Phistek INC.
-04C991     (base 16)		Phistek INC.
-				5 Floor, No.188, Section 3, Datong Road
-				New Taipei City    221
-				TW
-
-3C-A1-0D   (hex)		Samsung Electronics Co.,Ltd
-3CA10D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-6C-B2   (hex)		Samsung Electronics Co.,Ltd
-646CB2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-68-05-71   (hex)		Samsung Electronics Co.,Ltd
-680571     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-B4-84   (hex)		Samsung Electronics Co.,Ltd
-14B484     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F4-C4-47   (hex)		Coagent International Enterprise Limited
-F4C447     (base 16)		Coagent International Enterprise Limited
-				FLAT/RM 2 6F CROWN TND BLDG 106 HOW MING ST KWUN TONG
-				Hong Kong  Hong Kong  528133
-				CN
-
-C8-E4-2F   (hex)		Technical Research Design and Development
-C8E42F     (base 16)		Technical Research Design and Development
-				186 Lincoln street
-				Boston  MA  02111
-				US
-
-C4-C9-EC   (hex)		Gugaoo   HK Limited
-C4C9EC     (base 16)		Gugaoo   HK Limited
-				Unit 04, 7/F BRIGHT WAY TOWER
-				Kowloon, Hongkong    
-				HK
-
-34-E4-2A   (hex)		Automatic Bar Controls Inc.
-34E42A     (base 16)		Automatic Bar Controls Inc.
-				790 Eubanks Dr
-				Vacaville  CA  95688
-				US
-
-30-59-B7   (hex)		Microsoft
-3059B7     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-20-A7-87   (hex)		Bointec Taiwan Corporation Limited
-20A787     (base 16)		Bointec Taiwan Corporation Limited
-				1F, A20, L790, SEC.5,
-				TAIPEI  TAIWAN  11082
-				TW
-
-A0-FC-6E   (hex)		Telegrafia a.s.
-A0FC6E     (base 16)		Telegrafia a.s.
-				Lomena 7
-				Kosice  Slovakia  040 01
-				
-
-20-53-CA   (hex)		Risk Technology Ltd
-2053CA     (base 16)		Risk Technology Ltd
-				Matrix House, Merlin Court
-				Altrincham  Cheshire  WA14 5NL
-				GB
-
-A4-3D-78   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A43D78     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-04-57-2F   (hex)		Sertel Electronics UK Ltd
-04572F     (base 16)		Sertel Electronics UK Ltd
-				Rutland House, 148 Edmund Street,
-				Birmingham    B3 2FD
-				GB
-
-D8-97-7C   (hex)		Grey Innovation
-D8977C     (base 16)		Grey Innovation
-				255 Mary St
-				Richmond  Victoria  3121
-				AU
-
-BC-8D-0E   (hex)		Nokia
-BC8D0E     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-A4-9F-85   (hex)		Lyve Minds, Inc
-A49F85     (base 16)		Lyve Minds, Inc
-				10001 N. De Anza Blvd, Ste 300
-				Cupertino  CA  95014
-				US
-
-78-92-3E   (hex)		Nokia Corporation
-78923E     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-AC-A9-A0   (hex)		Audioengine, Ltd.
-ACA9A0     (base 16)		Audioengine, Ltd.
-				1535 Dido Mt Salem Rd
-				Ackerman  Ms  39735
-				US
-
-A4-81-EE   (hex)		Nokia Corporation
-A481EE     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-78-D6-6F   (hex)		Aristocrat Technologies Australia Pty. Ltd.
-78D66F     (base 16)		Aristocrat Technologies Australia Pty. Ltd.
-				Building A, Pinnacle Office Park
-				North Ryde  N.S.W.  2113
-				AU
-
-44-1E-91   (hex)		ARVIDA Intelligent Electronics Technology  Co.,Ltd.
-441E91     (base 16)		ARVIDA Intelligent Electronics Technology  Co.,Ltd.
-				No.3 Qiliang Road.,
-				Danyang  Jiangsu  212300
-				CN
-
-C4-62-6B   (hex)		ZPT Vigantice
-C4626B     (base 16)		ZPT Vigantice
-				Vigantice 266
-				Roznov pod Radhostem    75661
-				CZ
-
-EC-17-66   (hex)		Research Centre Module
-EC1766     (base 16)		Research Centre Module
-				3 Eight March 4Th Street
-				Moscow  Moscow  125190
-				RU
-
-A0-D1-2A   (hex)		AXPRO Technology Inc.
-A0D12A     (base 16)		AXPRO Technology Inc.
-				8F, No.128, sec. 4 Chung Hsiao E. RD.,
-				Taipei city    10866
-				TW
-
-20-9A-E9   (hex)		Volacomm Co., Ltd
-209AE9     (base 16)		Volacomm Co., Ltd
-				15F-6., No.7, Sec.3, New Taipei Blvd., Xinzhuang Dist., New Taipei City 242., Taiwan (R.O.C)
-				Xinzhuang Dist.  New Taipei City  242
-				TW
-
-34-5D-10   (hex)		Wytek
-345D10     (base 16)		Wytek
-				10 rue jean jaures
-				Poitiers    86000
-				FR
-
-6C-14-F7   (hex)		Erhardt+Leimer GmbH
-6C14F7     (base 16)		Erhardt+Leimer GmbH
-				Albert-Leimer-Platz 1
-				Stadtbergen    86391
-				DE
-
-B0-D5-9D   (hex)		Shenzhen Zowee Technology Co., Ltd
-B0D59D     (base 16)		Shenzhen Zowee Technology Co., Ltd
-				Block 5   （ZOWEE Technology Building),
-				Pingshan, Xili Town, Nanshan District  Shenzhen, Guangdong  518055
-				CN
-
-68-28-BA   (hex)		Dejai
-6828BA     (base 16)		Dejai
-				PO Box 101
-				Toorak  Vic  3142
-				AU
-
-B0-57-06   (hex)		Vallox Oy
-B05706     (base 16)		Vallox Oy
-				Myllykylantie 9-11
-				Loimaa    32200
-				FI
-
-48-EE-07   (hex)		Silver Palm Technologies LLC
-48EE07     (base 16)		Silver Palm Technologies LLC
-				9639 DOCTOR PERRY RD STE 123N
-				IJAMSVILLE  Maryland  21754
-				US
-
-50-C7-BF   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-50C7BF     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-20-5A-00   (hex)		Coval
-205A00     (base 16)		Coval
-				ZA Les Petits Champs
-				MONTELIER  Drome  26120
-				FR
-
-A8-A6-68   (hex)		zte corporation
-A8A668     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-EE-BD   (hex)		HTC Corporation
-00EEBD     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-38-F7-08   (hex)		National Resource Management, Inc.
-38F708     (base 16)		National Resource Management, Inc.
-				480 Neponset St.  Bldg. #2
-				Canton  MA  02021
-				US
-
-E0-DB-88   (hex)		Open Standard Digital-IF Interface for SATCOM Systems
-E0DB88     (base 16)		Open Standard Digital-IF Interface for SATCOM Systems
-				3090 Raritan Ave
-				Aberdeen Proving Ground  MD  21001
-				US
-
-A8-BD-3A   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-A8BD3A     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				18F, HUAYANG TOWER,YANDAYI ROAD
-				Huizhou  Guangdong  516007
-				CN
-
-A8-24-EB   (hex)		ZAO NPO Introtest
-A824EB     (base 16)		ZAO NPO Introtest
-				Studencheskaya st. 55
-				Ekaterinburg  Sverdlovsk region  620078
-				RU
-
-C4-0E-45   (hex)		ACK Networks,Inc.
-C40E45     (base 16)		ACK Networks,Inc.
-				Floor3,Building B.,No.1 ShangDi XinXi Rd.
-				  Beijing  100085
-				CN
-
-3C-89-A6   (hex)		KAPELSE
-3C89A6     (base 16)		KAPELSE
-				5 Allee De Saint-Cloud 
-				54600 Villers Les Nancy    
-				FR
-
-A4-6C-C1   (hex)		LTi REEnergy GmbH
-A46CC1     (base 16)		LTi REEnergy GmbH
-				Heinrich-Hertz-Straße 18
-				Unna  North Rhine-Westfalia  59423
-				DE
-
-A8-B9-B3   (hex)		ESSYS
-A8B9B3     (base 16)		ESSYS
-				Daerung Post Tower 5 15F
-				Seoul  Gasan-Dong, Geumchen-gu  153-702
-				KR
-
-6C-09-D6   (hex)		Digiquest Electronics LTD
-6C09D6     (base 16)		Digiquest Electronics LTD
-				26 Park House
-				London    NW11 7PT
-				GB
-
-48-18-42   (hex)		Shanghai Winaas Co. Equipment Co. Ltd.
-481842     (base 16)		Shanghai Winaas Co. Equipment Co. Ltd.
-				8F Building A, WanDa Square
-				  Shanghai  200433
-				CN
-
-44-70-98   (hex)		MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
-447098     (base 16)		MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
-				Unit 906,South Block,Resources Tech Building,
-				Shenzhen  Guangdong province  518000
-				CN
-
-9C-BD-9D   (hex)		SkyDisk, Inc.
-9CBD9D     (base 16)		SkyDisk, Inc.
-				2F Tenjin central place,
-				Fukuoka-shi  Fukuoka  810-0001
-				JP
-
-74-C6-21   (hex)		Zhejiang Hite Renewable Energy Co.,LTD
-74C621     (base 16)		Zhejiang Hite Renewable Energy Co.,LTD
-				NO1320,2th Ring Road(South)
-				Tongxiang City  Zhejiang Province  314500
-				CN
-
-D4-31-9D   (hex)		Sinwatec
-D4319D     (base 16)		Sinwatec
-				76 Rikhard Zorge st.
-				Ufa  Bashkortostan  450075
-				RU
-
-B0-68-B6   (hex)		Hangzhou OYE Technology Co. Ltd
-B068B6     (base 16)		Hangzhou OYE Technology Co. Ltd
-				Room 202 Building 12 Wenxinrenjia,
-				Hangzhou  Zhejiang  310051
-				CN
-
-9C-65-F9   (hex)		AcSiP Technology Corp.
-9C65F9     (base 16)		AcSiP Technology Corp.
-				3F-1, No. 207, Fusing Rd.
-				Taoyuan  Taiwan  33066
-				TW
-
-48-76-04   (hex)		Private
-487604     (base 16)		Private
-
-2C-53-4A   (hex)		Shenzhen Winyao Electronic Limited
-2C534A     (base 16)		Shenzhen Winyao Electronic Limited
-				7B Block A Fuqiao Building Fuhua Road
-				Shen Zhen  Guangdong  518000
-				CN
-
-A4-BB-AF   (hex)		Lime Instruments
-A4BBAF     (base 16)		Lime Instruments
-				1187 Brittmoore Road
-				Houston  TX  77043
-				US
-
-F4-90-CA   (hex)		Tensorcom
-F490CA     (base 16)		Tensorcom
-				5900 Pastuer Ct., Suite 105
-				Carlsbad  CA  92008
-				US
-
-E4-4C-6C   (hex)		Shenzhen Guo Wei Electronic Co,. Ltd.
-E44C6C     (base 16)		Shenzhen Guo Wei Electronic Co,. Ltd.
-				No 3038, Lo Sha Road, Liantang
-				Shenzhen  Guangdong  518004
-				CN
-
-A8-57-4E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-A8574E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-B8-43-E4   (hex)		Vlatacom
-B843E4     (base 16)		Vlatacom
-				Milutina Milankovica 5
-				Belgrade  Serbia  11080
-				RS
-
-28-22-46   (hex)		Beijing Sinoix Communication Co., LTD
-282246     (base 16)		Beijing Sinoix Communication Co., LTD
-				Gehua Tower Room 603
-				  Beijing  100000
-				CN
-
-48-B9-77   (hex)		PulseOn Oy
-48B977     (base 16)		PulseOn Oy
-				Tekniikantie 12
-				ESPOO  Uusimaa  02150
-				FI
-
-70-71-B3   (hex)		Brain Corporation
-7071B3     (base 16)		Brain Corporation
-				5665 Morehouse Dr.
-				San Diego  CA  92121
-				US
-
-64-E6-25   (hex)		Woxu Wireless Co., Ltd
-64E625     (base 16)		Woxu Wireless Co., Ltd
-				B103 Building1 No.6 Changjianghoujie
-				Nanjing    210000
-				US
-
-10-B7-13   (hex)		Private
-10B713     (base 16)		Private
-
-10-0E-7E   (hex)		Juniper Networks
-100E7E     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-20-89-86   (hex)		zte corporation
-208986     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-44-C5-6F   (hex)		NGN Easy Satfinder (Tianjin) Electronic Co., Ltd
-44C56F     (base 16)		NGN Easy Satfinder (Tianjin) Electronic Co., Ltd
-				A4, Sifang Hi-tech Building, Nankai Hi-tech Industry Area, Ya'an Road, Nankai District
-				  Tianjin  300113
-				US
-
-B8-98-F7   (hex)		Gionee Communication Equipment Co,Ltd.ShenZhen
-B898F7     (base 16)		Gionee Communication Equipment Co,Ltd.ShenZhen
-				21/F Times Technology Building, 7028 Shennan Road,
-				Shenzhen  Guangdong  518040
-				CN
-
-84-83-36   (hex)		Newrun
-848336     (base 16)		Newrun
-				#803 IT Convergence Industry Bldg., Kyungpook National Univ.
-				Daegu  N/A  702-010
-				KR
-
-18-20-12   (hex)		Aztech Associates Inc.
-182012     (base 16)		Aztech Associates Inc.
-				805 Bayridge Dr.
-				Kingston  Ontario  K7P1T5
-				CA
-
-B8-26-6C   (hex)		ANOV France
-B8266C     (base 16)		ANOV France
-				Chemin de Baillot
-				Montauban  Tarn &amp; Garonne  82000
-				FR
-
-3C-30-0C   (hex)		Dewar Electronics Pty Ltd
-3C300C     (base 16)		Dewar Electronics Pty Ltd
-				32 Taylors Road
-				Croydon  Victoria  3136
-				AU
-
-98-FF-D0   (hex)		Lenovo Mobile Communication Technology Ltd.
-98FFD0     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999,Qishan North 2nd Road
-				Xiamen  Fujian  361006
-				CN
-
-A8-75-E2   (hex)		Aventura Technologies, Inc.
-A875E2     (base 16)		Aventura Technologies, Inc.
-				48 Mall Drive
-				Commack  NY  11725
-				US
-
-B8-7A-C9   (hex)		Siemens Ltd.
-B87AC9     (base 16)		Siemens Ltd.
-				885 Mountain Hwy
-				Bayswater  Victoria  3153
-				AU
-
-F0-61-30   (hex)		Advantage Pharmacy Services, LLC
-F06130     (base 16)		Advantage Pharmacy Services, LLC
-				PO Box 7
-				Madison  MO  39130-0007
-				US
-
-6C-3C-53   (hex)		SoundHawk Corp
-6C3C53     (base 16)		SoundHawk Corp
-				20380 Town Center Lane
-				Cupertino  Ca  95014
-				US
-
-08-40-27   (hex)		Gridstore Inc.
-084027     (base 16)		Gridstore Inc.
-				1975 Landings Dr.
-				Mountain View  CA  94043
-				US
-
-38-BF-2F   (hex)		Espec Corp.
-38BF2F     (base 16)		Espec Corp.
-				5-2-5 Kanokodai Minamimachi
-				Kobe City  Hyogo  561-1514
-				JP
-
-44-C4-A9   (hex)		Opticom Communication, LLC
-44C4A9     (base 16)		Opticom Communication, LLC
-				1050 Connecticut Avenue, NW
-				Washington  DC  20036
-				US
-
-C4-82-4E   (hex)		Changzhou Uchip Electronics Co., LTD.
-C4824E     (base 16)		Changzhou Uchip Electronics Co., LTD.
-				Room1801~1802,
-				  Shanghai  201206
-				CN
-
-A4-77-60   (hex)		Nokia Corporation
-A47760     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-C8-56-63   (hex)		Sunflex Europe GmbH
-C85663     (base 16)		Sunflex Europe GmbH
-				Konrad-Zuse-Str. 13
-				Schwerte  NRW  58239
-				DE
-
-88-FE-D6   (hex)		ShangHai WangYong Software Co., Ltd.
-88FED6     (base 16)		ShangHai WangYong Software Co., Ltd.
-				Shanghai Pudong Zhangjiang Hi-Tech Park,
-				Pudong Software Park 22301-283  ShangHai  201203
-				CN
-
-7C-72-E4   (hex)		Unikey Technologies
-7C72E4     (base 16)		Unikey Technologies
-				2250 Lee Rd
-				Winter Park  FL  32789
-				US
-
-7C-20-48   (hex)		KoamTac
-7C2048     (base 16)		KoamTac
-				116 Village Boulevard
-				Princeton  New Jersey  08540
-				US
-
-8C-B7-F7   (hex)		Shenzhen UniStrong Science & Technology Co., Ltd
-8CB7F7     (base 16)		Shenzhen UniStrong Science & Technology Co., Ltd
-				17/F, Global Digital Bldg, Hi-tech Park
-				Shen zhen  Guang dong  518000
-				CN
-
-38-B7-4D   (hex)		Fijowave Limited
-38B74D     (base 16)		Fijowave Limited
-				Synergy Centre
-				    Dublin 24
-				IE
-
-18-0C-14   (hex)		iSonea Limited
-180C14     (base 16)		iSonea Limited
-				125 South Tremont Street
-				Oceanside  CA  92054
-				US
-
-9C-A9-E4   (hex)		zte corporation
-9CA9E4     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-90-F3-B7   (hex)		Kirisun Communications Co., Ltd.
-90F3B7     (base 16)		Kirisun Communications Co., Ltd.
-				3-6Flrs, ROBETA Building, 1 QiMin Road, Songping Shan Area, Science & Industry Park, Nanshan District
-				Shenzhen  GuangDong  518057
-				US
-
-C4-E9-2F   (hex)		AB Sciex
-C4E92F     (base 16)		AB Sciex
-				71 Four Valley Drive
-				Concord  Ontario  L4K 4V8
-				US
-
-A8-8D-7B   (hex)		SunDroid Global limited.
-A88D7B     (base 16)		SunDroid Global limited.
-				Room 1305B, Fiyta Science Building,
-				Shenzhen  Guang Dong  518057
-				CN
-
-3C-F7-48   (hex)		Shenzhen Linsn Technology Development Co.,Ltd
-3CF748     (base 16)		Shenzhen Linsn Technology Development Co.,Ltd
-				Floor 4,Block 7,Zone 2,Baiwangxin Industrial Park
-				Shenzhen  Guangdong  518055
-				CN
-
-B0-79-08   (hex)		Cummings Engineering
-B07908     (base 16)		Cummings Engineering
-				145 S. 79th St., Ste. 26
-				Chandler  AZ  85226
-				US
-
-E4-77-23   (hex)		zte corporation
-E47723     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-1C-63-B7   (hex)		OpenProducts 237 AB
-1C63B7     (base 16)		OpenProducts 237 AB
-				Barsebäcksvägen 27
-				Löddeköpinge    24630
-				SE
-
-94-B9-B4   (hex)		Aptos Technology
-94B9B4     (base 16)		Aptos Technology
-				5F., No.65, Guangfu N. Rd., Zhongxing Vil.,
-				Hsinchu    303
-				TW
-
-6C-15-F9   (hex)		Nautronix Limited
-6C15F9     (base 16)		Nautronix Limited
-				Blackwood House
-				Aberdeen    AB10 6XU
-				GB
-
-18-AA-45   (hex)		Fon Technology
-18AA45     (base 16)		Fon Technology
-				C/Quintanavides, 15 Edificio 2 Planta 1
-				    
-				ES
-
-90-20-83   (hex)		General Engine Management Systems Ltd.
-902083     (base 16)		General Engine Management Systems Ltd.
-				GEMS
-				Egham  Surrey  TW208RN
-				GB
-
-14-B1-26   (hex)		Industrial Software Co
-14B126     (base 16)		Industrial Software Co
-				85, Aleksandyr Malinov Blvd. Office 6
-				Sofia    1715
-				BG
-
-D8-50-E6   (hex)		ASUSTek COMPUTER INC.
-D850E6     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-DC-3E-F8   (hex)		Nokia Corporation
-DC3EF8     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-A4-9F-89   (hex)		Shanghai Rui Rui Communication Technology Co.Ltd.
-A49F89     (base 16)		Shanghai Rui Rui Communication Technology Co.Ltd.
-				Room 1130,Building No.1
-				  ShangHai  201199
-				CN
-
-70-60-DE   (hex)		LaVision GmbH
-7060DE     (base 16)		LaVision GmbH
-				Anna-Vandenhoeck-Ring 19
-				Goettingen  Niedersachsen  37081
-				DE
-
-50-2E-5C   (hex)		HTC Corporation
-502E5C     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-FC-FE-77   (hex)		Hitachi Reftechno, Inc.
-FCFE77     (base 16)		Hitachi Reftechno, Inc.
-				709-2 Tomita
-				Tochigi-shi  Tochigi-ken  329-4404
-				JP
-
-70-53-3F   (hex)		Alfa Instrumentos Eletronicos Ltda.
-70533F     (base 16)		Alfa Instrumentos Eletronicos Ltda.
-				Rua Coronel Mario de Azevedo, 138
-				Sao Paulo  SP  02710-020
-				BR
-
-40-7A-80   (hex)		Nokia Corporation
-407A80     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-64-42-14   (hex)		Swisscom Energy Solutions AG
-644214     (base 16)		Swisscom Energy Solutions AG
-				Solothurnerstrasse 19
-				Olten    4600
-				CH
-
-0C-A6-94   (hex)		Sunitec Enterprise Co.,Ltd
-0CA694     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-18-44-62   (hex)		Riava Networks, Inc.
-184462     (base 16)		Riava Networks, Inc.
-				Kato Bldg. 1F, 6-12-4 Soto-Kanda
-				Chiyoda-ku  Tokyo  1010021
-				JP
-
-C0-35-80   (hex)		A&R TECH
-C03580     (base 16)		A&R TECH
-				Marksteinergasse 13
-				Vienna    1210
-				AT
-
-D0-8A-55   (hex)		Skullcandy
-D08A55     (base 16)		Skullcandy
-				1441 Ute blvd.
-				Park City  Utah  84098
-				US
-
-34-4F-3F   (hex)		IO-Power Technology Co., Ltd.
-344F3F     (base 16)		IO-Power Technology Co., Ltd.
-				1F., No.100,
-				Hsinchu City    30055
-				TW
-
-14-60-80   (hex)		zte corporation
-146080     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-9C-BB-98   (hex)		Shen Zhen RND Electronic Co.,LTD
-9CBB98     (base 16)		Shen Zhen RND Electronic Co.,LTD
-				G315,Hua Chuang Da business Certer
-				Shen Zhen  Guang Dong  518000
-				CN
-
-50-C2-71   (hex)		SECURETECH INC
-50C271     (base 16)		SECURETECH INC
-				#304, 799 Kwanyang-dong, Dongan-gu,
-				Anyang-ci  Gyunggi-do  431-767
-				KR
-
-CC-72-0F   (hex)		Viscount Systems Inc.
-CC720F     (base 16)		Viscount Systems Inc.
-				4585 Tillicum Street
-				Burnaby  British Columbia  V5J 5K9
-				CA
-
-74-2B-62   (hex)		FUJITSU LIMITED
-742B62     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-64-3F-5F   (hex)		Exablaze
-643F5F     (base 16)		Exablaze
-				Level 6
-				Sydney  NSW  2000
-				AU
-
-8C-2F-39   (hex)		IBA Dosimetry GmbH
-8C2F39     (base 16)		IBA Dosimetry GmbH
-				Bahnhofstrasse 5
-				Schwarzenbruck    90592
-				DE
-
-C0-A0-BB   (hex)		D-Link International
-C0A0BB     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-2C-CD-69   (hex)		Aqavi.com
-2CCD69     (base 16)		Aqavi.com
-				3 Riverway
-				Houston  TX  77056
-				US
-
-F4-5F-69   (hex)		Matsufu Electronics distribution Company
-F45F69     (base 16)		Matsufu Electronics distribution Company
-				Suites 1601~3, Kinwick Centre, 32 Hollywood Road, Hong Kong
-				Hong Kong    
-				HK
-
-28-A1-EB   (hex)		ETEK TECHNOLOGY (SHENZHEN) CO.,LTD
-28A1EB     (base 16)		ETEK TECHNOLOGY (SHENZHEN) CO.,LTD
-				A505-506、A509 Room,A5 Floor, Academy Of International Technology Innovation, Keji Nan 10th Road, Hi-Tech Industrial Park, Shenzhen, P.R.C.
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-B8-F8-28   (hex)		Changshu Gaoshida Optoelectronic Technology Co. Ltd.
-B8F828     (base 16)		Changshu Gaoshida Optoelectronic Technology Co. Ltd.
-				Baimao Industrail Park Changshu  Jiangsu
-				Changshu  Jiangsu  215500
-				CN
-
-3C-1A-57   (hex)		Cardiopulmonary Corp
-3C1A57     (base 16)		Cardiopulmonary Corp
-				200 Cascade Blvd
-				Milford  CT  06460
-				US
-
-54-1B-5D   (hex)		Techno-Innov
-541B5D     (base 16)		Techno-Innov
-				35 rue du champ Blanc
-				Meyzieu  Rhône  69330
-				FR
-
-9C-E7-BD   (hex)		Winduskorea co., Ltd
-9CE7BD     (base 16)		Winduskorea co., Ltd
-				RM313, Seoul-Garden Bldg,
-				Seoul    152-828
-				KR
-
-38-42-A6   (hex)		Ingenieurbuero Stahlkopf
-3842A6     (base 16)		Ingenieurbuero Stahlkopf
-				Ingenieurbuero Stahlkopf
-				Glockengießerweg 2  Bielefeld  33659
-				DE
-
-24-80-00   (hex)		Westcontrol AS
-248000     (base 16)		Westcontrol AS
-				Breivikvg 7
-				Joerpeland  -  4100
-				US
-
-1C-4B-B9   (hex)		SMG ENTERPRISE, LLC
-1C4BB9     (base 16)		SMG ENTERPRISE, LLC
-				865 LOVE ST
-				ELK GROVE VILLAGE  IL  60007
-				US
-
-34-61-78   (hex)		The Boeing Company
-346178     (base 16)		The Boeing Company
-				325 James S. McDonnell Blvd
-				Hazelwood  MO  63042-2513
-				US
-
-14-46-E4   (hex)		AVISTEL
-1446E4     (base 16)		AVISTEL
-				15 rue Auguste Bartholdi
-				Carrieres sur Seine    78420
-				FR
-
-D0-95-C7   (hex)		Pantech Co., Ltd.
-D095C7     (base 16)		Pantech Co., Ltd.
-				110-1 Ongjeong-Ri, Tongjin-Eup
-				Gimpo-Si  Gyounggi-Do  415-865
-				KR
-
-D0-2C-45   (hex)		littleBits Electronics, Inc.
-D02C45     (base 16)		littleBits Electronics, Inc.
-				60 E. 11th Street
-				New York  NY  10003
-				US
-
-04-4F-8B   (hex)		Adapteva, Inc.
-044F8B     (base 16)		Adapteva, Inc.
-				1666 Massachusetts Ave
-				Lexington  MA  02420
-				US
-
-B4-A8-2B   (hex)		Histar Digital Electronics Co., Ltd.
-B4A82B     (base 16)		Histar Digital Electronics Co., Ltd.
-				 Room 616,Block A,
-				Shenzhen  Baoan  518133
-				CN
-
-28-4D-92   (hex)		Luminator
-284D92     (base 16)		Luminator
-				900 Klein Road
-				Plano  Texas  75074
-				US
-
-54-FB-58   (hex)		WISEWARE, Lda
-54FB58     (base 16)		WISEWARE, Lda
-				Centro Social e Administrativo da ZIV
-				Zona Industrial de Vagos  Portugal  3840-385
-				PT
-
-94-0B-D5   (hex)		Himax Technologies, Inc
-940BD5     (base 16)		Himax Technologies, Inc
-				No.26, Zilian Rd., Xinshi Dist.
-				Tainan City    741
-				TW
-
-E0-D1-E6   (hex)		Aliph dba Jawbone
-E0D1E6     (base 16)		Aliph dba Jawbone
-				99 Rhode Island Street
-				San Francisco  California  94103
-				US
-
-D8-2D-9B   (hex)		Shenzhen G.Credit Communication Technology Co., Ltd
-D82D9B     (base 16)		Shenzhen G.Credit Communication Technology Co., Ltd
-				4/F, Suite A, XinNengYuan Building, 2239 Nanhai Rd., Nanshan Dist., Shenzhen, Guangdong,China
-				Shenzhen  Guangdong  518054
-				CN
-
-70-9B-FC   (hex)		Bryton Inc.
-709BFC     (base 16)		Bryton Inc.
-				6F., No. 100, Zhouzi St., Neihu Dist.
-				Taipei City    11493
-				US
-
-AC-E4-2E   (hex)		SK hynix
-ACE42E     (base 16)		SK hynix
-				SK u-Tower, 25-1, Jeongja-dong, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-844
-				KR
-
-78-FE-41   (hex)		Socus networks
-78FE41     (base 16)		Socus networks
-				2F.-2, No.215, Sec. 2, Chengde Rd., Datong Dist.,
-				Taipei City    103
-				TW
-
-20-57-21   (hex)		Salix Technology CO., Ltd.
-205721     (base 16)		Salix Technology CO., Ltd.
-				5F., No. 16, Lane 77, Hsing Ai Road
-				Taipei    114
-				TW
-
-88-36-12   (hex)		SRC Computers, LLC
-883612     (base 16)		SRC Computers, LLC
-				4240 N. Nevada Avenue
-				Colorado Springs  CO  80907
-				US
-
-08-35-71   (hex)		CASwell INC.
-083571     (base 16)		CASwell INC.
-				8F,No.242,Bo-Ai St., Shu-Lin Dist.,New Taipei City ,Taiwan.
-				New Taipei City  Taiwan  23845
-				TW
-
-98-76-B6   (hex)		Adafruit
-9876B6     (base 16)		Adafruit
-				150 Varick st
-				New York  NY  10013
-				US
-
-50-3C-C4   (hex)		Lenovo Mobile Communication Technology Ltd.
-503CC4     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,
-				Xiamen  Fujian  361006
-				US
-
-2C-7B-84   (hex)		OOO Petr Telegin
-2C7B84     (base 16)		OOO Petr Telegin
-				Gagarin avenue, 37, build P1
-				  Nizhny Novgorod  603009
-				RU
-
-A4-C0-C7   (hex)		ShenZhen Hitom Communication Technology Co..LTD
-A4C0C7     (base 16)		ShenZhen Hitom Communication Technology Co..LTD
-				Room 110,Unit A,No.1 Chuangye Building,43# YanShan Road,Shekou Area
-				ShenZhen  GuangDong  518052
-				CN
-
-30-61-12   (hex)		PAV GmbH
-306112     (base 16)		PAV GmbH
-				Georg-Kaindl-Straße 11
-				Otterfing    83624
-				DE
-
-78-9F-4C   (hex)		HOERBIGER Elektronik GmbH
-789F4C     (base 16)		HOERBIGER Elektronik GmbH
-				Justinus-Kernerstr. 7
-				Ammerbuch  Baden-Wuerttemberg  D-72119
-				DE
-
-18-10-4E   (hex)		CEDINT-UPM
-18104E     (base 16)		CEDINT-UPM
-				Campus de Montegancedo
-				  Madrid  
-				ES
-
-9C-14-65   (hex)		Edata Elektronik San. ve Tic. A.Ş.
-9C1465     (base 16)		Edata Elektronik San. ve Tic. A.Ş.
-				Tantavi Mahallesi Menteşoğlu Cad.
-				İstanbul  -  34764
-				TR
-
-4C-55-CC   (hex)		Zentri Pty Ltd
-4C55CC     (base 16)		Zentri Pty Ltd
-				Level 9, 191 Clarence St,
-				Sydney  NSW  2000
-				AU
-
-00-C5-DB   (hex)		Datatech Sistemas Digitales Avanzados SL
-00C5DB     (base 16)		Datatech Sistemas Digitales Avanzados SL
-				Cardenal Herrera Oria 165
-				  Madrid  28034
-				ES
-
-8C-F9-45   (hex)		Power Automation pte Ltd
-8CF945     (base 16)		Power Automation pte Ltd
-				28 Ayer Rajah Crescent
-				    139959
-				SG
-
-F8-42-FB   (hex)		Yasuda Joho Co.,ltd.
-F842FB     (base 16)		Yasuda Joho Co.,ltd.
-				1-11-1
-				Minato-ku  Tokyo  105-0022
-				JP
-
-88-73-98   (hex)		K2E Tekpoint
-887398     (base 16)		K2E Tekpoint
-				201,Winstower,278-51,Sungsoo2ga 3dong,Sungdong-gu,Seoul,S.Korea,133-123
-				Seoul  Sungdong-gu  133-123
-				KR
-
-2C-92-2C   (hex)		Kishu Giken Kogyou Company Ltd,.
-2C922C     (base 16)		Kishu Giken Kogyou Company Ltd,.
-				466 Nunohiki
-				Wakayama city  Wakayama prefecture  6410015
-				JP
-
-D8-FE-E3   (hex)		D-Link International
-D8FEE3     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-58-F3-87   (hex)		HCCP
-58F387     (base 16)		HCCP
-				Gabriel Metsulaan 4a
-				EINDHOVEN    5611SP
-				NL
-
-3C-97-7E   (hex)		IPS Technology Limited
-3C977E     (base 16)		IPS Technology Limited
-				7 Floor,E  block,Dong Hai Wang Building
-				Shenzhen  Guangodng  518000
-				CN
-
-A4-FB-8D   (hex)		Hangzhou Dunchong Technology Co.Ltd
-A4FB8D     (base 16)		Hangzhou Dunchong Technology Co.Ltd
-				Yitian Square 1#401A
-				hangzhou  zhejiang  310051
-				US
-
-F4-CD-90   (hex)		Vispiron Rotec GmbH
-F4CD90     (base 16)		Vispiron Rotec GmbH
-				Frankfurter Ring 224
-				München  Bayern  80807
-				DE
-
-80-6C-8B   (hex)		KAESER KOMPRESSOREN AG
-806C8B     (base 16)		KAESER KOMPRESSOREN AG
-				Carl-Kaeser-Strasse 26
-				Coburg  Bavaria  96450
-				DE
-
-04-3D-98   (hex)		ChongQing QingJia Electronics CO.,LTD
-043D98     (base 16)		ChongQing QingJia Electronics CO.,LTD
-				No.1,DianCe Village JiangBei District
-				  Chongqing city  400020
-				CN
-
-E0-3E-4A   (hex)		Cavanagh Group International
-E03E4A     (base 16)		Cavanagh Group International
-				9180 Four Mile Creek Rd.
-				Gainesville  GA  30506
-				US
-
-04-1B-94   (hex)		Host Mobility AB
-041B94     (base 16)		Host Mobility AB
-				Anders Personsgatan 12
-				Gothenburg  Vastra Gotaland  41664
-				SE
-
-A0-CE-C8   (hex)		CE LINK LIMITED
-A0CEC8     (base 16)		CE LINK LIMITED
-				2/F, Building G, Licheng Tech. Ind. Zone
-				Shenzhen  Guangdong  518104
-				CN
-
-90-7A-28   (hex)		Beijing Morncloud Information And Technology Co. Ltd.
-907A28     (base 16)		Beijing Morncloud Information And Technology Co. Ltd.
-				A#1107, XiaoYun center
-				Chaoyang District  Beijing  100125
-				CN
-
-10-01-CA   (hex)		Ashley Butterworth
-1001CA     (base 16)		Ashley Butterworth
-				P.O. Box 3410
-				Santa Clara  CA  95055
-				US
-
-24-6A-AB   (hex)		IT-IS International
-246AAB     (base 16)		IT-IS International
-				1 Wainstones Court
-				Middlesbrough  Cleveland  TS9 5JY
-				GB
-
-FC-4B-BC   (hex)		Sunplus Technology Co., Ltd.
-FC4BBC     (base 16)		Sunplus Technology Co., Ltd.
-				No.19, Innovation First Road
-				Hsinchu City    300
-				TW
-
-50-A0-BF   (hex)		Alba Fiber Systems Inc.
-50A0BF     (base 16)		Alba Fiber Systems Inc.
-				265 E. Merrick Rd
-				Valley Stream  NY  11580
-				US
-
-B8-36-D8   (hex)		Videoswitch
-B836D8     (base 16)		Videoswitch
-				Uspallata 3579
-				Buenos Aires  Capital Federal  C1437JCS
-				AR
-
-DC-6F-00   (hex)		Livescribe, Inc.
-DC6F00     (base 16)		Livescribe, Inc.
-				7677 Oakport Street
-				Oakland  California  94621
-				US
-
-54-E3-B0   (hex)		JVL Industri Elektronik
-54E3B0     (base 16)		JVL Industri Elektronik
-				Blokken 42
-				Birkeroed  Sjaelland  DK-3460
-				DK
-
-80-4B-20   (hex)		Ventilation Control
-804B20     (base 16)		Ventilation Control
-				Kronenstrasse 34
-				Villingen-Schwenningen  Baden-Wuerttemberg  78054
-				DE
-
-28-79-94   (hex)		Realplay Digital Technology(Shenzhen) Co.,Ltd
-287994     (base 16)		Realplay Digital Technology(Shenzhen) Co.,Ltd
-				7/F,Building E,SDG Information Port ,Kefeng Rd.,Hi-tech
-				Shenzhen  Guangdong  518057
-				CN
-
-10-7A-86   (hex)		U&U ENGINEERING INC.
-107A86     (base 16)		U&U ENGINEERING INC.
-				No.15, Gaoyang S. Rd
-				Taoyuan County    325-44
-				TW
-
-40-BD-9E   (hex)		Physio-Control, Inc
-40BD9E     (base 16)		Physio-Control, Inc
-				11811 Willows Rd NE
-				Redmond  WA  98052
-				US
-
-6C-57-79   (hex)		Aclima, Inc.
-6C5779     (base 16)		Aclima, Inc.
-				10 Lombard Street
-				San Francisco  California  94111
-				US
-
-C0-DA-74   (hex)		Hangzhou Sunyard Technology Co., Ltd.
-C0DA74     (base 16)		Hangzhou Sunyard Technology Co., Ltd.
-				No.3888 Jiangnan Ave, Binjiang District,
-				Hangzhou  Zhejiang  310053
-				CN
-
-18-D6-CF   (hex)		Kurth Electronic GmbH
-18D6CF     (base 16)		Kurth Electronic GmbH
-				Mühleweg 11
-				Eningen    72800
-				DE
-
-F4-81-39   (hex)		CANON INC.
-F48139     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-18-36-FC   (hex)		Elecsys International Corporation
-1836FC     (base 16)		Elecsys International Corporation
-				846 N Mart-Way Court
-				Olathe  KS  66061
-				US
-
-88-23-64   (hex)		Watchnet DVR Inc
-882364     (base 16)		Watchnet DVR Inc
-				Unit 5 - 351 Ferrier St.
-				Markham  Ontario  L3R 5Z2
-				CA
-
-58-1C-BD   (hex)		Affinegy
-581CBD     (base 16)		Affinegy
-				1705 S. Capital of Texas Hwy. Ste 310
-				Austin  Texas  78746
-				US
-
-28-4F-CE   (hex)		Liaoning Wontel Science and Technology Development Co.,Ltd.
-284FCE     (base 16)		Liaoning Wontel Science and Technology Development Co.,Ltd.
-				A704 Floor TaiHe building
-				Shenyang  Liaoning  110000
-				CN
-
-04-8D-38   (hex)		Netcore Technology Inc.
-048D38     (base 16)		Netcore Technology Inc.
-				9F,B block,Tsinghua Information Guard
-				Shenzhen  Guangdong  518057
-				CN
-
-2C-94-64   (hex)		Cincoze Co., Ltd.
-2C9464     (base 16)		Cincoze Co., Ltd.
-				7F., No. 4 Aly. 1 Ln. 235, Baociao Rd.,
-				New Taipei City    23145
-				US
-
-30-65-EC   (hex)		Wistron (ChongQing)
-3065EC     (base 16)		Wistron (ChongQing)
-				No.F08/F09,D zone,Konggang Functional Zone
-				  ChongQing  401120
-				CN
-
-54-2C-EA   (hex)		PROTECTRON
-542CEA     (base 16)		PROTECTRON
-				140 zone industriel
-				  CASABLANCA  18600
-				MA
-
-94-B8-C5   (hex)		RuggedCom Inc.
-94B8C5     (base 16)		RuggedCom Inc.
-				300 Applewood Crescent
-				Concord  Ontario  L4K 5C7
-				CA
-
-DC-82-5B   (hex)		JANUS, spol. s r.o.
-DC825B     (base 16)		JANUS, spol. s r.o.
-				Sarajevska 8
-				Prague  Czech Republic  12000
-				CZ
-
-9C-A5-77   (hex)		Osorno Enterprises Inc.
-9CA577     (base 16)		Osorno Enterprises Inc.
-				976 Elgin Ave
-				Winnipeg  MB  R3E 1B4
-				CA
-
-C0-43-01   (hex)		Epec Oy
-C04301     (base 16)		Epec Oy
-				P.O. Box 194
-				Seinäjoki    60101
-				FI
-
-E0-7C-62   (hex)		Whistle Labs, Inc.
-E07C62     (base 16)		Whistle Labs, Inc.
-				251 Rhode Island Street, Suite 211
-				San Francisco  CA  94013
-				US
-
-F0-7F-0C   (hex)		Leopold Kostal GmbH &Co. KG
-F07F0C     (base 16)		Leopold Kostal GmbH &Co. KG
-				An der Bellmerei 10
-				Luedenscheid  NRW  D-58513
-				DE
-
-4C-62-55   (hex)		SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.
-4C6255     (base 16)		SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.
-				Carretera Guadalajara-chapala km 15.5 #45
-				TLAJOMULCO  JALISCO  45640
-				MX
-
-08-27-19   (hex)		APS systems/electronic AG
-082719     (base 16)		APS systems/electronic AG
-				Neumatt 4
-				Niederbuchsiten  SO  4626
-				CH
-
-50-5A-C6   (hex)		GUANGDONG SUPER TELECOM CO.,LTD.
-505AC6     (base 16)		GUANGDONG SUPER TELECOM CO.,LTD.
-				4/F,NO.1025-1027 Gaopu Rd
-				Guangzhou  Guangdong  510663
-				CN
-
-9C-79-AC   (hex)		Suntec Software(Shanghai) Co., Ltd.
-9C79AC     (base 16)		Suntec Software(Shanghai) Co., Ltd.
-				17F New Hualian Mansion
-				  Shanghai  200020
-				CN
-
-4C-96-14   (hex)		Juniper Networks
-4C9614     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-B8-63-BC   (hex)		ROBOTIS, Co, Ltd
-B863BC     (base 16)		ROBOTIS, Co, Ltd
-				#1506 Ace high End Tower 3, 371-50
-				Seoul    153-787
-				KR
-
-98-0D-2E   (hex)		HTC Corporation
-980D2E     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-C4-19-EC   (hex)		Qualisys AB
-C419EC     (base 16)		Qualisys AB
-				Packhusgatan 6
-				Gothenburg    41113
-				SE
-
-60-4A-1C   (hex)		SUYIN Corporation
-604A1C     (base 16)		SUYIN Corporation
-				No.377,Fude 1st Rd
-				Taipei    221
-				TW
-
-D4-64-F7   (hex)		CHENGDU USEE DIGITAL TECHNOLOGY CO., LTD
-D464F7     (base 16)		CHENGDU USEE DIGITAL TECHNOLOGY CO., LTD
-				NO.6 CHUANGYE ROAD
-				CHENGDU  SICHUAN  610041
-				CN
-
-74-D0-2B   (hex)		ASUSTek COMPUTER INC.
-74D02B     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-60-1E-02   (hex)		EltexAlatau
-601E02     (base 16)		EltexAlatau
-				Ibragimova 9
-				Almaty  Province  050032
-				KZ
-
-E0-C6-B3   (hex)		MilDef AB
-E0C6B3     (base 16)		MilDef AB
-				Box 22079
-				Helsingborg  Skane  25022
-				SE
-
-64-72-D8   (hex)		GooWi Technology Co.,Limited
-6472D8     (base 16)		GooWi Technology Co.,Limited
-				Unit C8.,9/F,Hongming Fatoty Building
-				99 How Ming Street  Kwun Tong  999077
-				HK
-
-60-60-1F   (hex)		SZ DJI TECHNOLOGY CO.,LTD
-60601F     (base 16)		SZ DJI TECHNOLOGY CO.,LTD
-				6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd
-				shenzhen  guangdong  518057
-				CN
-
-5C-84-86   (hex)		Brightsource Industries Israel LTD
-5C8486     (base 16)		Brightsource Industries Israel LTD
-				11 Kiryat Mada st
-				Jerusalem    91450
-				IL
-
-50-CD-32   (hex)		NanJing Chaoran Science & Technology Co.,Ltd.
-50CD32     (base 16)		NanJing Chaoran Science & Technology Co.,Ltd.
-				 Block C,Floor 5,Tianzexingwang Building
-				NanJing City  JiangSu Province  210019
-				CN
-
-BC-BA-E1   (hex)		AREC Inc.
-BCBAE1     (base 16)		AREC Inc.
-				3F, No.367, Sec.2, Wenhua Rd
-				 Banqiao Dist  New Taipei City  220
-				TW
-
-18-FA-6F   (hex)		ISC applied systems corp
-18FA6F     (base 16)		ISC applied systems corp
-				295 Labrosse
-				Pointe-claire  QC  H9R-1A3
-				CA
-
-A0-1C-05   (hex)		NIMAX TELECOM CO.,LTD.
-A01C05     (base 16)		NIMAX TELECOM CO.,LTD.
-				1F. NO.308-7,SEC.1,DATONG RD
-				NEW TAIPEI CITY    221
-				TW
-
-60-E0-0E   (hex)		SHINSEI ELECTRONICS CO LTD
-60E00E     (base 16)		SHINSEI ELECTRONICS CO LTD
-				2-6-25
-				Amagasaki  Hyogo  660-0805
-				JP
-
-54-54-14   (hex)		Digital RF Corea, Inc
-545414     (base 16)		Digital RF Corea, Inc
-				2 Floor, SeMin B/D, 201, Jangdari-ro
-				Suwon-si  Gyeonggi-do  442-833
-				KR
-
-24-EB-65   (hex)		SAET I.S. S.r.l.
-24EB65     (base 16)		SAET I.S. S.r.l.
-				Via Leinì 1/B
-				San Maurizio C.se  TO  10077
-				IT
-
-D0-F2-7F   (hex)		SteadyServ Technoligies, LLC
-D0F27F     (base 16)		SteadyServ Technoligies, LLC
-				12895 Brighton Avenue
-				Carmel  IN  46032
-				US
-
-E8-94-F6   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-E894F6     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-18-84-10   (hex)		CoreTrust Inc.
-188410     (base 16)		CoreTrust Inc.
-				14F Saman Bldg. 945 Daechi-dong
-				Seoul  Republic of Korea  135-280
-				KR
-
-FC-22-9C   (hex)		Han Kyung I Net Co.,Ltd.
-FC229C     (base 16)		Han Kyung I Net Co.,Ltd.
-				3F,Seung Eun Bldg
-				Yu Seong-Gu  Dae Jeon  305-335
-				KR
-
-18-32-A2   (hex)		LAON TECHNOLOGY CO., LTD.
-1832A2     (base 16)		LAON TECHNOLOGY CO., LTD.
-				#1212 HO, BIZ CENTER, SKn TECHNOPARK
-				SEONGNAM  KYOUNGGI DO  462-721
-				KR
-
-D4-A4-99   (hex)		InView Technology Corporation
-D4A499     (base 16)		InView Technology Corporation
-				8900 Shoal Creek Blvd
-				Austin  TX  78757
-				US
-
-08-48-2C   (hex)		Raycore Taiwan Co., LTD.
-08482C     (base 16)		Raycore Taiwan Co., LTD.
-				3F-5, No.351, Sec.2, Zongshan Rd
-				New Taipei city    23504
-				TW
-
-DC-2B-CA   (hex)		Zera GmbH
-DC2BCA     (base 16)		Zera GmbH
-				Hauptstrasse 392
-				Koenigswinter  NRW  53639
-				DE
-
-94-98-A2   (hex)		Shanghai LISTEN TECH.LTD
-9498A2     (base 16)		Shanghai LISTEN TECH.LTD
-				7F,A#,NO.3699,Gonghexin Road
-				SHANGHAI  SHANGHAI  200435
-				CN
-
-E0-ED-C7   (hex)		Shenzhen Friendcom Technology Development Co., Ltd
-E0EDC7     (base 16)		Shenzhen Friendcom Technology Development Co., Ltd
-				6/F,17 Building, Guangqian Industrial Park,
-				Nanshan District, Shen Zhen CIty  Guang Dong  518055
-				CN
-
-B4-DD-15   (hex)		ControlThings Oy Ab
-B4DD15     (base 16)		ControlThings Oy Ab
-				Werner Söderströmin katu 24
-				Porvoo  Finland  06100
-				FI
-
-DC-1D-D4   (hex)		Microstep-MIS spol. s r.o.
-DC1DD4     (base 16)		Microstep-MIS spol. s r.o.
-				Cavojskeho 1
-				Bratislava    84104
-				SK
-
-FC-DD-55   (hex)		Shenzhen WeWins wireless Co.,Ltd
-FCDD55     (base 16)		Shenzhen WeWins wireless Co.,Ltd
-				6/F.,B Wing,Yuehai Piaza,Nanhai Road
-				Shenzhen  Guangdong  518000
-				CN
-
-B0-17-43   (hex)		EDISON GLOBAL CIRCUITS LLC
-B01743     (base 16)		EDISON GLOBAL CIRCUITS LLC
-				1475  Sawdust Rd
-				Spring  TX  77380-2974
-				US
-
-D0-BE-2C   (hex)		CNSLink Co., Ltd.
-D0BE2C     (base 16)		CNSLink Co., Ltd.
-				room 807, Jungang Induspia 5
-				Seongnam  Gyeonggi  462-807
-				US
-
-40-51-6C   (hex)		Grandex International Corporation
-40516C     (base 16)		Grandex International Corporation
-				4F, 525 Chung Cheng Road
-				Hsin Tien Dist.  New Taipei City  231
-				TW
-
-C0-88-5B   (hex)		SnD Tech Co., Ltd.
-C0885B     (base 16)		SnD Tech Co., Ltd.
-				 1140-4 Triple Tower C-406
-				Bucheon Si  Gyeonggi-Do  420-852
-				KR
-
-3C-FB-96   (hex)		Emcraft Systems LLC
-3CFB96     (base 16)		Emcraft Systems LLC
-				2191 S. El Camino Real
-				Oceanside  CA  92054
-				US
-
-84-62-23   (hex)		Shenzhen Coship Electronics Co., Ltd.
-846223     (base 16)		Shenzhen Coship Electronics Co., Ltd.
-				Rainbow Bldg., North, Hi-Tech Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-1C-FA-68   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-1CFA68     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-08-1F-3F   (hex)		WondaLink Inc.
-081F3F     (base 16)		WondaLink Inc.
-				2F, No. 23, R&D Road 2
-				Hsinchu    300
-				TW
-
-18-53-E0   (hex)		Hanyang Digitech Co.Ltd
-1853E0     (base 16)		Hanyang Digitech Co.Ltd
-				103, BANWOL-DONG, HWASEONG-SI, KYUNGGI-DO, KOREA
-				HWASEONG  KYUNGGI  445-330
-				KR
-
-00-C1-4F   (hex)		DDL Co,.ltd.
-00C14F     (base 16)		DDL Co,.ltd.
-				6F AFT BLDG.
-				SAPPORO  HOKKAIDO  060-0035
-				JP
-
-2C-26-C5   (hex)		zte corporation
-2C26C5     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-10-5F-06   (hex)		Actiontec Electronics, Inc
-105F06     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-08-79-99   (hex)		AIM GmbH
-087999     (base 16)		AIM GmbH
-				Sasbacherstraße 2
-				Freiburg  BW  79111
-				US
-
-C0-11-A6   (hex)		Fort-Telecom ltd.
-C011A6     (base 16)		Fort-Telecom ltd.
-				Hrustalnaya 8a
-				  Perm  614107
-				RU
-
-C0-4A-00   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-C04A00     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-04-5F-A7   (hex)		Shenzhen Yichen Technology Development Co.,LTD
-045FA7     (base 16)		Shenzhen Yichen Technology Development Co.,LTD
-				5/F Honghualing 2nd Industry Zone,Xili Town
-				Shenzhen  Guangdong  518055
-				CN
-
-94-C9-62   (hex)		Teseq AG
-94C962     (base 16)		Teseq AG
-				Nordstrasse 11F
-				Luterbach  Solothurn  4542
-				CH
-
-DC-2A-14   (hex)		Shanghai Longjing Technology Co.
-DC2A14     (base 16)		Shanghai Longjing Technology Co.
-				689 Chundong Road, Minhang District
-				  Shanghai  201108
-				CN
-
-68-86-E7   (hex)		Orbotix, Inc.
-6886E7     (base 16)		Orbotix, Inc.
-				1155 Canyon Blvd.
-				Boulder  CO  80302
-				US
-
-C0-5E-6F   (hex)		V. Stonkaus firma Kodinis Raktas
-C05E6F     (base 16)		V. Stonkaus firma Kodinis Raktas
-				Ateities 10
-				  Vilnius  08303
-				LT
-
-C0-B8-B1   (hex)		BitBox Ltd
-C0B8B1     (base 16)		BitBox Ltd
-				Whitney Road
-				Basingstoke  Hampshire  RG24 8NS
-				GB
-
-F8-2E-DB   (hex)		RTW GmbH & Co. KG
-F82EDB     (base 16)		RTW GmbH & Co. KG
-				Am Wassermann 25
-				Cologne  NRW  50829
-				DE
-
-80-8B-5C   (hex)		Shenzhen Runhuicheng Technology Co., Ltd
-808B5C     (base 16)		Shenzhen Runhuicheng Technology Co., Ltd
-				315.3rd Floor Taoyuan Commercial Building A2 ridgepole Guang Qian Industrial Estate XiLi
-				Shenzhen  Guangdong  518052
-				CN
-
-D8-19-CE   (hex)		Telesquare
-D819CE     (base 16)		Telesquare
-				670, Sampyeong-dong, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-E0-CE-C3   (hex)		ASKEY COMPUTER CORP
-E0CEC3     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-38-F5-97   (hex)		home2net GmbH
-38F597     (base 16)		home2net GmbH
-				Im Haslet 42
-				Woerth/Donau  Bayern  93086
-				DE
-
-80-7B-1E   (hex)		Corsair Memory, Inc.
-807B1E     (base 16)		Corsair Memory, Inc.
-				47100 Bayside Parkway
-				Fremont  CA  94538
-				US
-
-B4-AB-2C   (hex)		MtM Technology Corporation
-B4AB2C     (base 16)		MtM Technology Corporation
-				12F, No. 186, Fuxing Road
-				Taoyuan City  Taoyuan County  33066
-				TW
-
-74-37-2F   (hex)		Tongfang Shenzhen Cloudcomputing Technology Co.,Ltd
-74372F     (base 16)		Tongfang Shenzhen Cloudcomputing Technology Co.,Ltd
-				4,1 Building,FinanceBase,NO.8KeFaRoad,Science park
-				ShenZhen City  GuangDong  518057
-				US
-
-F0-21-9D   (hex)		Cal-Comp Electronics & Communications Company Ltd.
-F0219D     (base 16)		Cal-Comp Electronics & Communications Company Ltd.
-				No.147, Sec. 3, Beishen Rd
-				Shenkeng Dist  New Taipei City  ---
-				TW
-
-18-17-25   (hex)		Cameo Communications, Inc.
-181725     (base 16)		Cameo Communications, Inc.
-				No. 276, Sinhu 1st Rd., Neihu District,
-				Taipei    114
-				TW
-
-84-62-A6   (hex)		EuroCB (Phils), Inc.
-8462A6     (base 16)		EuroCB (Phils), Inc.
-				SFB No.2
-				Lapulapu CIty  Cebu  6015
-				PH
-
-E4-F3-65   (hex)		Time-O-Matic, Inc.
-E4F365     (base 16)		Time-O-Matic, Inc.
-				1015 Maple St.
-				Danville  IL  61832
-				US
-
-DC-C0-DB   (hex)		Shenzhen Kaiboer Technology Co., Ltd.
-DCC0DB     (base 16)		Shenzhen Kaiboer Technology Co., Ltd.
-				4/F, No. 11 Bldg., Yusheng Industrial Park, No. 467, Xixiang Sec.,
-				Shenzhen  Guangdong  518126
-				CN
-
-AC-5D-10   (hex)		Pace Americas
-AC5D10     (base 16)		Pace Americas
-				1764 Automation Parkway
-				San Jose  Ca  95131
-				US
-
-FC-62-6E   (hex)		Beijing MDC Telecom
-FC626E     (base 16)		Beijing MDC Telecom
-				26 Xiaoyun Road #B2808, Chaoyang
-				  Beijing  100016
-				CN
-
-84-C8-B1   (hex)		Incognito Software Systems Inc.
-84C8B1     (base 16)		Incognito Software Systems Inc.
-				#500 - 375 Water St
-				Vancouver  BC - British Columbia  V6B 5C6
-				CA
-
-E8-A3-64   (hex)		Signal Path International / Peachtree Audio
-E8A364     (base 16)		Signal Path International / Peachtree Audio
-				2045 120th Ave NE
-				Bellevue  Washington  98005
-				US
-
-BC-51-FE   (hex)		Swann communications Pty Ltd
-BC51FE     (base 16)		Swann communications Pty Ltd
-				Unit 13
-				Port Melbourne  Victoria  3207
-				AU
-
-88-F4-90   (hex)		Jetmobile Pte Ltd
-88F490     (base 16)		Jetmobile Pte Ltd
-				541 Orchard Road
-				Singapore    238881
-				SG
-
-1C-91-79   (hex)		Integrated System Technologies Ltd
-1C9179     (base 16)		Integrated System Technologies Ltd
-				Suite 5 Birch House
-				Aldridge  West Midlands  WS9 0NF
-				GB
-
-A0-BA-B8   (hex)		Pixon Imaging
-A0BAB8     (base 16)		Pixon Imaging
-				9530 Towne Center Dr.
-				San Diego  CA  92121
-				US
-
-74-E4-24   (hex)		APISTE CORPORATION
-74E424     (base 16)		APISTE CORPORATION
-				1-4-16 Dojimahama, Kita-ku
-				Osaka  Japan  530-0004
-				JP
-
-24-11-D0   (hex)		Chongqing Ehs Science and Technology Development Co.,Ltd.
-2411D0     (base 16)		Chongqing Ehs Science and Technology Development Co.,Ltd.
-				Saturn Business Center C3-15-7,Starlight No.5 Street
-				  Chongqing  400060
-				CN
-
-B4-61-FF   (hex)		Lumigon A/S
-B461FF     (base 16)		Lumigon A/S
-				Baadehavnsgade 2A
-				Copenhagen SV  Denmark  2450
-				DK
-
-A0-A1-30   (hex)		DLI Taiwan Branch office
-A0A130     (base 16)		DLI Taiwan Branch office
-				No.18-5, No.738. Zhong Zheng Rd
-				Taipei New City    23511
-				TW
-
-30-21-5B   (hex)		Shenzhen Ostar Display Electronic Co.,Ltd
-30215B     (base 16)		Shenzhen Ostar Display Electronic Co.,Ltd
-				Room218, CASTD Incubator Building, High-tech South Street No.1,
-				Shenzhen  Guangdong  518057
-				CN
-
-34-FA-40   (hex)		Guangzhou Robustel Technologies Co., Limited
-34FA40     (base 16)		Guangzhou Robustel Technologies Co., Limited
-				B301, Tianchang Shangmaoyuan
-				Guangzhou  Guangdong  510660
-				CN
-
-1C-5A-6B   (hex)		Philips Electronics Nederland BV
-1C5A6B     (base 16)		Philips Electronics Nederland BV
-				PO BOX 80045
-				 Eindhoven    5600 JZ
-				NL
-
-A8-75-D6   (hex)		FreeTek International Co., Ltd.
-A875D6     (base 16)		FreeTek International Co., Ltd.
-				Unit D, 15/F, Tai Ping Ind.Ctr., Blk 2, 55 Ting Kok Rd.,
-				Hong Kong  Hong KOng  1111
-				HK
-
-EC-E9-15   (hex)		STI Ltd
-ECE915     (base 16)		STI Ltd
-				Osborn Way
-				Hook  Hampshire  RG27 9HX
-				GB
-
-80-D7-33   (hex)		QSR Automations, Inc.
-80D733     (base 16)		QSR Automations, Inc.
-				2301 Stanley Gault Pkwy
-				Louisville  KY  40223
-				US
-
-30-3D-08   (hex)		GLINTT TES S.A.
-303D08     (base 16)		GLINTT TES S.A.
-				Beloura Office Park, Ed.10
-				Sintra    2710-693
-				PT
-
-A8-1F-AF   (hex)		KRYPTON POLSKA
-A81FAF     (base 16)		KRYPTON POLSKA
-				AL. JEROZOLIMSKIE 131
-				WARSZAWA  MAZOWIECKIE  02-304
-				PL
-
-30-D3-57   (hex)		Logosol, Inc.
-30D357     (base 16)		Logosol, Inc.
-				5041 ROBERT J. MATHEWS PARKWAY
-				EL DORADO HILLS  California  95762
-				US
-
-BC-39-A6   (hex)		CSUN System Technology Co.,LTD
-BC39A6     (base 16)		CSUN System Technology Co.,LTD
-				4-16-22,Chiyogaoka
-				Kawasaki-shi  Kanagawa Ken  2150005
-				JP
-
-EC-B5-41   (hex)		SHINANO E and E Co.Ltd.
-ECB541     (base 16)		SHINANO E and E Co.Ltd.
-				5511-6 Wada
-				Matsumoto City  Nagano  390-1242
-				JP
-
-D4-10-CF   (hex)		Huanshun Network Science and Technology Co., Ltd.
-D410CF     (base 16)		Huanshun Network Science and Technology Co., Ltd.
-				No. 218-1, North Binjiang Road
-				yuyao  zhejiang  315400
-				CN
-
-6C-B3-11   (hex)		Shenzhen Lianrui Electronics Co.,Ltd
-6CB311     (base 16)		Shenzhen Lianrui Electronics Co.,Ltd
-				Block C4 XinTang Industrial Park
-				Shenzhen  Guangdong  518000
-				CN
-
-10-A7-43   (hex)		SK Mtek Limited
-10A743     (base 16)		SK Mtek Limited
-				Flat/Rm 1808, 18F Tower II, Admirality
-				Hong Kong    
-				HK
-
-54-7F-A8   (hex)		TELCO systems, s.r.o.
-547FA8     (base 16)		TELCO systems, s.r.o.
-				Zvolenska cesta 20
-				Banska Bystrica  Slovak republic  974 05
-				SK
-
-54-74-E6   (hex)		Webtech Wireless
-5474E6     (base 16)		Webtech Wireless
-				215-4299 Canada Way
-				Burnaby  BC  V5G 1H3
-				CA
-
-C4-6D-F1   (hex)		DataGravity
-C46DF1     (base 16)		DataGravity
-				10 Tara Blvd
-				Nashua  NH  03062
-				US
-
-30-44-49   (hex)		PLATH GmbH
-304449     (base 16)		PLATH GmbH
-				Gotenstrasse 18
-				  Hamburg  20097
-				DE
-
-94-FD-2E   (hex)		Shanghai Uniscope Technologies Co.,Ltd
-94FD2E     (base 16)		Shanghai Uniscope Technologies Co.,Ltd
-				5th Floor, Building 10,
-				  Shanghai  200233
-				CN
-
-E4-C1-46   (hex)		Objetivos y Servicios de Valor A
-E4C146     (base 16)		Objetivos y Servicios de Valor A
-				C/ Monte Esquinza, 28, 1D
-				  Madrid  28017
-				ES
-
-D4-00-57   (hex)		MC Technologies GmbH
-D40057     (base 16)		MC Technologies GmbH
-				Kabelkamp 2
-				Hannover  Germany  30179
-				DE
-
-5C-E0-F6   (hex)		NIC.br- Nucleo de Informacao e Coordenacao do Ponto BR
-5CE0F6     (base 16)		NIC.br- Nucleo de Informacao e Coordenacao do Ponto BR
-				Av. das Nacoes Unidas, 11541, 7o andar
-				São Paulo  SP  04578-000
-				BR
-
-C8-3D-97   (hex)		Nokia Corporation
-C83D97     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-0C-F3-61   (hex)		Java Information
-0CF361     (base 16)		Java Information
-				Woolim Lions Valley 2nd B-1305
-				Seongnam-Si  Gyounggi-Do  462-120
-				KR
-
-60-0F-77   (hex)		SilverPlus, Inc
-600F77     (base 16)		SilverPlus, Inc
-				18 Technology Dr, #143
-				Irvine  CA  92618
-				US
-
-B0-35-8D   (hex)		Nokia Corporation
-B0358D     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-F8-E4-FB   (hex)		Actiontec Electronics, Inc
-F8E4FB     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-8C-4A-EE   (hex)		GIGA TMS INC
-8C4AEE     (base 16)		GIGA TMS INC
-				9F-2 NO.31 Lane 169 Kang-ning Street, Hsi-Chih
-				Taipei County 221    221
-				TW
-
-34-C9-9D   (hex)		EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.
-34C99D     (base 16)		EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.
-				Room 603, 6/F., Wanchai Central Building, 89 Lockhart Road, Wanchai, 
-				    
-				HK
-
-AC-E6-4B   (hex)		Shenzhen Baojia Battery Technology Co., Ltd.
-ACE64B     (base 16)		Shenzhen Baojia Battery Technology Co., Ltd.
-				Block A, Tongfuyu Industrial Zone
-				Shenzhen  Guangdong  518013
-				CN
-
-78-9F-87   (hex)		Siemens AG I IA PP PRM
-789F87     (base 16)		Siemens AG I IA PP PRM
-				Gleiwitzer Strasse 555
-				Nuremberg  Bavaria  90475
-				DE
-
-08-E5-DA   (hex)		NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD. 
-08E5DA     (base 16)		NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD. 
-				NO.1,XIANXIN MID-ROAD
-				NANJING  JIANGSU  210046
-				CN
-
-58-84-E4   (hex)		IP500 Alliance e.V.
-5884E4     (base 16)		IP500 Alliance e.V.
-				Scharnhorststraße 16
-				Berlin    10115
-				DE
-
-04-4B-FF   (hex)		GuangZhou Hedy Digital Technology Co., Ltd
-044BFF     (base 16)		GuangZhou Hedy Digital Technology Co., Ltd
-				B 701, Gaoke Building, TianHe Bei Road,
-				GuangZhou  GuangDong  510630
-				CN
-
-E8-71-8D   (hex)		Elsys Equipamentos Eletronicos Ltda
-E8718D     (base 16)		Elsys Equipamentos Eletronicos Ltda
-				Av. Torquato Tapajós, n. 1052 - B. Flores
-				Manaus  Amazonas  69.058-830
-				BR
-
-D0-73-8E   (hex)		DONG OH PRECISION CO., LTD. 
-D0738E     (base 16)		DONG OH PRECISION CO., LTD. 
-				#282 SHINGAL-RI, JICSAN-EUP
-				CHEONAN-SI  CHUNGCHEONGNAM-DO  331-814
-				KR
-
-64-C9-44   (hex)		LARK Technologies, Inc
-64C944     (base 16)		LARK Technologies, Inc
-				2570 W El Camino Real
-				Mountain View  CA  94040
-				US
-
-0C-93-FB   (hex)		BNS Solutions
-0C93FB     (base 16)		BNS Solutions
-				PO Box 508
-				Walpole  MA  02081
-				US
-
-E4-4F-5F   (hex)		EDS Elektronik Destek San.Tic.Ltd.Sti
-E44F5F     (base 16)		EDS Elektronik Destek San.Tic.Ltd.Sti
-				Meclis Mah. Hayran Sok. No:4
-				istanbul    34785
-				TR
-
-E8-6D-54   (hex)		Digit Mobile Inc
-E86D54     (base 16)		Digit Mobile Inc
-				5F.,No.550,Ruiguang Rd., Neihu Dist.,Taipei City 11492, Taiwan
-				Taipei  Taiwan  11492
-				TW
-
-90-B1-1C   (hex)		Dell Inc.
-90B11C     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-5D-03   (hex)		Xilinx, Inc
-005D03     (base 16)		Xilinx, Inc
-				2100 Logic drive
-				San Jose  CA  95124
-				US
-
-80-2F-DE   (hex)		Zurich Instruments AG
-802FDE     (base 16)		Zurich Instruments AG
-				Technoparkstrasse 1
-				  Zurich  8005
-				CH
-
-5C-38-E0   (hex)		Shanghai Super Electronics Technology Co.,LTD
-5C38E0     (base 16)		Shanghai Super Electronics Technology Co.,LTD
-				1/F Building A 39 Hongcao Road
-				Shanghai    200233
-				CN
-
-08-AF-78   (hex)		Totus Solutions, Inc.
-08AF78     (base 16)		Totus Solutions, Inc.
-				1505 Wallace Drive, Suite 102
-				Carrollton  TX  75006
-				US
-
-C8-C7-91   (hex)		Zero1.tv GmbH
-C8C791     (base 16)		Zero1.tv GmbH
-				Heinrich-Roller-Str. 16 B
-				  Berlin  10405
-				DE
-
-EC-D9-25   (hex)		RAMI
-ECD925     (base 16)		RAMI
-				7 RUE RAOUL FOLLEREAU
-				BUSSY ST GEORGES    77600
-				FR
-
-1C-94-92   (hex)		RUAG Schweiz AG
-1C9492     (base 16)		RUAG Schweiz AG
-				RUAG Defence 
-				Hombrechtikon  ZH  8634
-				CH
-
-B8-89-CA   (hex)		ILJIN ELECTRIC Co., Ltd.
-B889CA     (base 16)		ILJIN ELECTRIC Co., Ltd.
-				112-83, Annyeong-dong
-				Hwaseong  Gyeonggi-do  445-380
-				KR
-
-64-F5-0E   (hex)		Kinion Technology Company Limited
-64F50E     (base 16)		Kinion Technology Company Limited
-				ng Kon107A, 1/F, Enterprise Place,
-				    
-				HK
-
-D0-4C-C1   (hex)		SINTRONES Technology Corp.
-D04CC1     (base 16)		SINTRONES Technology Corp.
-				14F.-3, No.736, Zhongzheng Rd., Zhonghe Dist., New Taipei City 235, Taiwan (R.O.C.)
-				Taipei  N/A  235
-				TW
-
-50-3F-56   (hex)		Syncmold Enterprise Corp
-503F56     (base 16)		Syncmold Enterprise Corp
-				9F., No.168, Jiankang Rd., Zhonghe Dist.
-				Xinbei City    235
-				US
-
-8C-EE-C6   (hex)		Precepscion Pty. Ltd.
-8CEEC6     (base 16)		Precepscion Pty. Ltd.
-				Level 10
-				Melbourne  Victoria  3000
-				AU
-
-10-12-48   (hex)		ITG, Inc.
-101248     (base 16)		ITG, Inc.
-				YASUHARA BLDG 302, 1-42-6, ITABASHI,
-				ITABASHI-KU  TOKYO  173-0004
-				US
-
-18-48-D8   (hex)		Fastback Networks
-1848D8     (base 16)		Fastback Networks
-				2480 N 1st Street
-				San Jose  California  95131
-				US
-
-F0-D3-E7   (hex)		Sensometrix SA
-F0D3E7     (base 16)		Sensometrix SA
-				Rue Albert Richard 2
-				Geneva  GE  1201
-				CH
-
-B0-12-66   (hex)		Futaba-Kikaku
-B01266     (base 16)		Futaba-Kikaku
-				2-17-20-302 Yanaka
-				Taito-ku  Tokyo  110-0001
-				JP
-
-7C-C8-D0   (hex)		TIANJIN YAAN TECHNOLOGY CO., LTD.
-7CC8D0     (base 16)		TIANJIN YAAN TECHNOLOGY CO., LTD.
-				No.8 Ziyuan Road,Huayuan Industrial Zone
-				  Tianjin  300384
-				CN
-
-88-E9-17   (hex)		Tamaggo
-88E917     (base 16)		Tamaggo
-				2001 McGill College
-				Montreal  Quebec  H3A 3L3
-				CA
-
-88-61-5A   (hex)		Siano Mobile Silicon Ltd.
-88615A     (base 16)		Siano Mobile Silicon Ltd.
-				P.O. Box 8684
-				Netanya    42504
-				IL
-
-70-E2-4C   (hex)		SAE IT-systems GmbH & Co. KG
-70E24C     (base 16)		SAE IT-systems GmbH & Co. KG
-				Im Gewerbegebiet Pesch 14
-				Köln  NRW  50767
-				DE
-
-00-FD-4C   (hex)		NEVATEC
-00FD4C     (base 16)		NEVATEC
-				Lindaraja 2
-				Granada    18009
-				ES
-
-14-43-19   (hex)		Creative&Link Technology Limited
-144319     (base 16)		Creative&Link Technology Limited
-				 ROOM 704 HONG JIN GE BLD. NO.3018,YANHE SOUTH ROAD
-				Shenzhen  Guangdong  518002
-				US
-
-D8-AF-3B   (hex)		Hangzhou Bigbright Integrated communications system Co.,Ltd
-D8AF3B     (base 16)		Hangzhou Bigbright Integrated communications system Co.,Ltd
-				The 6floor ,Building1,No.1418-41,Moganshan Road
-				Hangzhou  Zhejiang  310015
-				CN
-
-60-32-F0   (hex)		Mplus technology
-6032F0     (base 16)		Mplus technology
-				#201  Gayang Dong, Gangsea Gu
-				Seoul    157-793
-				KR
-
-28-29-D9   (hex)		GlobalBeiMing technology (Beijing)Co. Ltd
-2829D9     (base 16)		GlobalBeiMing technology (Beijing)Co. Ltd
-				Beijing  Chaoyang District 8 Guanghua Road A seat 320 rooms
-				  Beijing   100026 
-				CN
-
-1C-C3-16   (hex)		MileSight Technology Co., Ltd.
-1CC316     (base 16)		MileSight Technology Co., Ltd.
-				202-2,No.21 Wanghai Road, 2nd Software Park
-				Xiamen  Fujian  361006
-				CN
-
-68-15-D3   (hex)		Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.
-6815D3     (base 16)		Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.
-				ul. Traugutta 7
-				Mielec    39-300
-				PL
-
-10-F3-DB   (hex)		Gridco Systems, Inc.
-10F3DB     (base 16)		Gridco Systems, Inc.
-				10-L Commerice Way
-				Woburn  MA   01801
-				US
-
-30-5D-38   (hex)		Beissbarth 
-305D38     (base 16)		Beissbarth 
-				Hanauer Str. 101
-				Muenchen    80993
-				DE
-
-60-D2-B9   (hex)		REALAND BIO CO., LTD.
-60D2B9     (base 16)		REALAND BIO CO., LTD.
-				Room 201A, N.set, Jinshan Bd., No.248 Wushan Rd., Tianhe District
-				Guangzhou  Guangdong  510630
-				CN
-
-30-FD-11   (hex)		MACROTECH (USA) INC.
-30FD11     (base 16)		MACROTECH (USA) INC.
-				1799 BAYSHORE HIGHWAY
-				BURLINGAME  CA  94010
-				US
-
-C4-DA-26   (hex)		NOBLEX SA
-C4DA26     (base 16)		NOBLEX SA
-				Vicente Padín Moreira 97
-				Ushuaia   Tierra del fuego  9410  
-				AR
-
-7C-C8-AB   (hex)		Acro Associates, Inc.
-7CC8AB     (base 16)		Acro Associates, Inc.
-				1990 Olivera Rd.
-				Concord  CA  94520
-				US
-
-60-19-29   (hex)		VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.
-601929     (base 16)		VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.
-				1-4F,Building 5,YuSheng Industrial Park,No.467,Section Xixiang,National Highway 107,Xixiang,Bao An District,Shenzhen,China
-				Shenzhen  Shenzhen  518000
-				CN
-
-48-B2-53   (hex)		Marketaxess Corporation
-48B253     (base 16)		Marketaxess Corporation
-				299 Park Avenue
-				New York  NY  10171
-				US
-
-74-94-3D   (hex)		AgJunction
-74943D     (base 16)		AgJunction
-				8444 N. 90th St
-				Scottsdale  AZ  85258
-				US
-
-58-CF-4B   (hex)		Lufkin Industries
-58CF4B     (base 16)		Lufkin Industries
-				811 Willow Oak Drive
-				Missouri City  Texas  77489
-				US
-
-68-B4-3A   (hex)		WaterFurnace International, Inc.
-68B43A     (base 16)		WaterFurnace International, Inc.
-				9000 Conservation Way
-				Fort Wayne  IN  46809
-				US
-
-4C-78-97   (hex)		Arrowhead Alarm Products Ltd
-4C7897     (base 16)		Arrowhead Alarm Products Ltd
-				344B Rosedale Road
-				Auckland  Auckland  0751
-				NZ
-
-44-E8-A5   (hex)		Myreka Technologies Sdn. Bhd.
-44E8A5     (base 16)		Myreka Technologies Sdn. Bhd.
-				2-13, JALAN MAYANG PASIR 1,
-				Bayan Baru  Penang  11950
-				MY
-
-D8-AF-F1   (hex)		Panasonic Appliances Company
-D8AFF1     (base 16)		Panasonic Appliances Company
-				2-3-1-2 Noji-higashi
-				Kusatsu City  Shiga  525-8555
-				JP
-
-2C-62-89   (hex)		Regenersis (Glenrothes) Ltd
-2C6289     (base 16)		Regenersis (Glenrothes) Ltd
-				1 James Watt Avenue
-				Glenrothes  Fife  KY7 4UA
-				GB
-
-58-EC-E1   (hex)		Newport Corporation
-58ECE1     (base 16)		Newport Corporation
-				1791 Deere Ave.
-				Irvine  California  92606
-				US
-
-4C-09-B4   (hex)		zte corporation
-4C09B4     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-60-D1-AA   (hex)		Vishal Telecommunications Pvt Ltd
-60D1AA     (base 16)		Vishal Telecommunications Pvt Ltd
-				25 Sitaram Building Dr D N Road
-				Mumbai  Maharastra  400001
-				IN
-
-70-9B-A5   (hex)		Shenzhen Y&D Electronics Co.,LTD.
-709BA5     (base 16)		Shenzhen Y&D Electronics Co.,LTD.
-				D zone3F,Shenzhen Academy of Aerospace Technology,Hi-Tech Park,south 10th Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-F4-54-33   (hex)		Rockwell Automation
-F45433     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-B4-89-10   (hex)		Coster T.E. S.P.A.
-B48910     (base 16)		Coster T.E. S.P.A.
-				Via San Giovanni Battista De La Salle 4/a
-				Milano  MI  20132
-				IT
-
-B0-C8-3F   (hex)		Jiangsu Cynray IOT Co., Ltd.
-B0C83F     (base 16)		Jiangsu Cynray IOT Co., Ltd.
-				Building D1, 1 Zidong road, Qixia district
-				Nanjing  Jiangsu  210000
-				CN
-
-3C-F3-92   (hex)		Virtualtek. Co. Ltd
-3CF392     (base 16)		Virtualtek. Co. Ltd
-				12F, ShinhanDm Bldg., 
-				  Seoul  121-708
-				KR
-
-B4-82-C5   (hex)		Relay2, Inc.
-B482C5     (base 16)		Relay2, Inc.
-				1525 McCarthy Blvd., 
-				Milpitas  CA  95035
-				US
-
-98-5E-1B   (hex)		ConversDigital Co., Ltd.
-985E1B     (base 16)		ConversDigital Co., Ltd.
-				5308 5th Bldg., Dong Seoul Univ.
-				Seongnam  Gyeonggi  461714
-				KR
-
-D4-8C-B5   (hex)		Cisco Systems, Inc
-D48CB5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-90-9D-E0   (hex)		Newland Design + Assoc. Inc.
-909DE0     (base 16)		Newland Design + Assoc. Inc.
-				3186-G Airway Ave.
-				Costa Mesa  CA  92626
-				US
-
-14-9F-E8   (hex)		Lenovo Mobile Communication Technology Ltd.
-149FE8     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone
-				Xiamen  Fujian  361006
-				CN
-
-BC-D9-40   (hex)		ASR Co,.Ltd.
-BCD940     (base 16)		ASR Co,.Ltd.
-				1-3-1 Sotokanda Chiyoda-ku
-				Tokyo    101-0021
-				JP
-
-04-9C-62   (hex)		BMT Medical Technology s.r.o.
-049C62     (base 16)		BMT Medical Technology s.r.o.
-				Cejl 50
-				Brno    65660
-				CZ
-
-0C-2A-69   (hex)		electric imp, incorporated
-0C2A69     (base 16)		electric imp, incorporated
-				5050 El Camino Real, Ste 221
-				Los Altos  California  94022
-				US
-
-C4-55-C2   (hex)		Bach-Simpson
-C455C2     (base 16)		Bach-Simpson
-				109 Meg Drive
-				London  Ontario  N6E3Z7
-				CA
-
-00-E8-AB   (hex)		Meggitt Training Systems, Inc.
-00E8AB     (base 16)		Meggitt Training Systems, Inc.
-				296 Brogdon Rd
-				Suwanee  GA  30024
-				US
-
-B4-21-8A   (hex)		Dog Hunter LLC
-B4218A     (base 16)		Dog Hunter LLC
-				8 Faneuil Hall SQ
-				Boston  MA  02109
-				US
-
-B4-A4-B5   (hex)		Zen Eye Co.,Ltd
-B4A4B5     (base 16)		Zen Eye Co.,Ltd
-				#401, 157-5 Chunui-dong
-				Bucheon-si  Gyeonggi-do  420-859
-				KR
-
-DC-37-D2   (hex)		Hunan HKT Electronic Technology Co., Ltd
-DC37D2     (base 16)		Hunan HKT Electronic Technology Co., Ltd
-				Room 428,4F,Hunan Environmental Science and Technology Committee Building,No 18 South of Wanjiali Road,Yuhua District,Changsha
-				Changsha  Hunan  410007
-				CN
-
-40-70-74   (hex)		Life Technology (China) Co., Ltd
-407074     (base 16)		Life Technology (China) Co., Ltd
-				No.1, 2F, Nanshan Digital Culture Industrial base (East Tower  Podium) 10128 Shennan Blvd, Nanshan Dist.
-				Shenzhen  Guangdong  518000
-				CN
-
-20-F0-02   (hex)		MTData Developments Pty. Ltd.
-20F002     (base 16)		MTData Developments Pty. Ltd.
-				20 Miles Street
-				Mulgrave  Victoria  3170
-				AU
-
-38-8A-B7   (hex)		ITC Networks
-388AB7     (base 16)		ITC Networks
-				3F Daiwa Shibaura Bldg
-				Tokyo    105-0023
-				JP
-
-BC-C2-3A   (hex)		Thomson Video Networks
-BCC23A     (base 16)		Thomson Video Networks
-				6, rue du Clos Courtel
-				Cesson Sevigne    35510
-				FR
-
-1C-F4-CA   (hex)		Private
-1CF4CA     (base 16)		Private
-
-AC-C2-EC   (hex)		CLT INT'L IND. CORP.
-ACC2EC     (base 16)		CLT INT'L IND. CORP.
-				11F-2, NO.1, ZHANQIAN
-				MIAOLI    36043
-				TW
-
-A8-65-B2   (hex)		DONGGUAN YISHANG ELECTRONIC TECHNOLOGY CO., LIMITED
-A865B2     (base 16)		DONGGUAN YISHANG ELECTRONIC TECHNOLOGY CO., LIMITED
-				3rd floor, B# Building ,Houdefu Logistics Park,Qingshuiao,
-				Dongguan  Guangdong  523062
-				CN
-
-E8-D0-FA   (hex)		MKS Instruments Deutschland GmbH
-E8D0FA     (base 16)		MKS Instruments Deutschland GmbH
-				Schatzbogen 43
-				Munich    81829 
-				DE
-
-98-26-2A   (hex)		Applied Research Associates, Inc
-98262A     (base 16)		Applied Research Associates, Inc
-				4300 San Mateo Boulevard NE
-				Albuquerque  NM  87110
-				US
-
-3C-91-74   (hex)		ALONG COMMUNICATION TECHNOLOGY
-3C9174     (base 16)		ALONG COMMUNICATION TECHNOLOGY
-				1301, Zhenye International Business Center,
-				Shenzhen  Guandong  518000
-				CN
-
-AC-EE-3B   (hex)		6harmonics Inc
-ACEE3B     (base 16)		6harmonics Inc
-				21 Concourse Gate - Suite 10
-				Ottawa  Ontario  K2E 7S4
-				CA
-
-1C-6B-CA   (hex)		Mitsunami Co., Ltd.
-1C6BCA     (base 16)		Mitsunami Co., Ltd.
-				2-30-11, Nishi-gotanda, Shinagawa-ku
-				Tokyo    141-0031
-				JP
-
-64-24-00   (hex)		Xorcom Ltd.
-642400     (base 16)		Xorcom Ltd.
-				Teradyon Industrial Park
-				D.N Misgav    20179
-				IL
-
-E8-3E-FB   (hex)		GEODESIC LTD.
-E83EFB     (base 16)		GEODESIC LTD.
-				18,10TH CROSS, MAYURA STREET
-				BANGALORE  KARNATAKA  560094
-				IN
-
-EC-D1-9A   (hex)		Zhuhai Liming Industries Co., Ltd
-ECD19A     (base 16)		Zhuhai Liming Industries Co., Ltd
-				No.6 Xinqing Rd,Xinqing Hi-Tech Industrial Park
-				Zhuhai  Guangdong  519100
-				CN
-
-34-81-37   (hex)		UNICARD SA
-348137     (base 16)		UNICARD SA
-				UL.WADOWICKA 12
-				KRAKOW  woj. malopolskie  30-415
-				PL
-
-38-B1-2D   (hex)		Sonotronic Nagel GmbH
-38B12D     (base 16)		Sonotronic Nagel GmbH
-				Becker-Goering-Str. 17-25
-				Karlsbad    76307
-				DE
-
-54-9D-85   (hex)		EnerAccess inc
-549D85     (base 16)		EnerAccess inc
-				3154 Le Corbusier Blvd
-				Laval  Quebec  H7L 4S8
-				CA
-
-B0-75-0C   (hex)		QA Cafe
-B0750C     (base 16)		QA Cafe
-				33 Jewell Court
-				Portsmouth  NH  03801
-				US
-
-B4-E1-EB   (hex)		Private
-B4E1EB     (base 16)		Private
-
-3C-36-3D   (hex)		Nokia Corporation
-3C363D     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-80-86-98   (hex)		Netronics Technologies Inc.
-808698     (base 16)		Netronics Technologies Inc.
-				600-15 Allstate Parkway
-				Markham  Ontario  L3R 5B4
-				CA
-
-9C-E1-0E   (hex)		NCTech Ltd
-9CE10E     (base 16)		NCTech Ltd
-				20-22 Braid Road
-				Edinburgh    EH10 6AD
-				GB
-
-A0-6D-09   (hex)		Intelcan Technosystems Inc.
-A06D09     (base 16)		Intelcan Technosystems Inc.
-				5490  Boul Thimens
-				Saint-Laurent  Quebec  H4R2K9
-				CA
-
-60-F3-DA   (hex)		Logic Way GmbH
-60F3DA     (base 16)		Logic Way GmbH
-				Hagenower Str. 73
-				Schwerin  Mecklenburg-West Pomerania  19061
-				DE
-
-FC-50-90   (hex)		SIMEX Sp. z o.o.
-FC5090     (base 16)		SIMEX Sp. z o.o.
-				ul. Wielopole 7
-				Gdañsk  pomorskie  80-556
-				PL
-
-60-B9-82   (hex)		RO.VE.R. Laboratories S.p.A.
-60B982     (base 16)		RO.VE.R. Laboratories S.p.A.
-				Via Parini, 2
-				Sirmione  Brescia  25019
-				IT
-
-B4-62-38   (hex)		Exablox
-B46238     (base 16)		Exablox
-				365 San Antonio Road
-				Mountain View  CA  94040
-				US
-
-C8-BB-D3   (hex)		Embrane
-C8BBD3     (base 16)		Embrane
-				2350 Mission College Blvd., Ste 703
-				Santa Clara  CA  95054
-				US
-
-8C-60-4F   (hex)		Cisco Systems, Inc
-8C604F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-B9-80   (hex)		Parking BOXX Inc.
-A4B980     (base 16)		Parking BOXX Inc.
-				382 NE 191st St. #93984
-				Miami  FL  33179-3899
-				US
-
-A4-7C-14   (hex)		ChargeStorm AB
-A47C14     (base 16)		ChargeStorm AB
-				Laxholmstorget 3
-				Norrköping    60221
-				SE
-
-80-20-AF   (hex)		Trade FIDES, a.s.
-8020AF     (base 16)		Trade FIDES, a.s.
-				Dornych 57
-				Brno    61700
-				CZ
-
-2C-75-0F   (hex)		Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.
-2C750F     (base 16)		Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.
-				NO.188,FengyeRoad,BaoshanDistrict
-				shanghai    200949
-				CN
-
-5C-50-15   (hex)		Cisco Systems, Inc
-5C5015     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-98-02-84   (hex)		Theobroma Systems GmbH
-980284     (base 16)		Theobroma Systems GmbH
-				Gutheil-Schoder Gasse 17
-				Wien    1230
-				US
-
-1C-D4-0C   (hex)		Kriwan Industrie-Elektronik GmbH
-1CD40C     (base 16)		Kriwan Industrie-Elektronik GmbH
-				Allmand 11
-				Forchtenberg  Baden-Würtemberg  D-74670
-				DE
-
-00-2D-76   (hex)		TITECH GmbH
-002D76     (base 16)		TITECH GmbH
-				Otto-Hahn-Str. 6
-				Muelheim-Kaerlich    56218
-				DE
-
-F8-DB-4C   (hex)		PNY Technologies, INC.
-F8DB4C     (base 16)		PNY Technologies, INC.
-				100 Jefferson Road
-				Parsippany  New Jersey  07054
-				US
-
-0C-9D-56   (hex)		Consort Controls Ltd
-0C9D56     (base 16)		Consort Controls Ltd
-				13 Campion Terrace
-				Leamington Spa    CV32 4SU
-				GB
-
-3C-B8-7A   (hex)		Private
-3CB87A     (base 16)		Private
-
-AC-14-61   (hex)		ATAW  Co., Ltd.
-AC1461     (base 16)		ATAW  Co., Ltd.
-				Dongan-gu Pyeongchon-dong 126-1
-				Anyang-si  Gyeonggi-do  431-755
-				KR
-
-E4-C6-E6   (hex)		Mophie, LLC
-E4C6E6     (base 16)		Mophie, LLC
-				2850 Red Hill Ave.
-				Santa Ana  CA  92705
-				US
-
-50-2D-1D   (hex)		Nokia Corporation
-502D1D     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-F4-8E-09   (hex)		Nokia Corporation
-F48E09     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-58-48-C0   (hex)		COFLEC
-5848C0     (base 16)		COFLEC
-				Parc d'activités du moulin de Massy
-				MASSY    91300
-				FR
-
-8C-57-FD   (hex)		LVX Western
-8C57FD     (base 16)		LVX Western
-				700 54th ave North
-				St. Cloud  MN  56303
-				US
-
-54-E6-3F   (hex)		ShenZhen LingKeWeiEr Technology Co., Ltd.
-54E63F     (base 16)		ShenZhen LingKeWeiEr Technology Co., Ltd.
-				Room 625, YiJing Building, MeiLin Rd., FuTian District
-				ShenZhen  GuandDong  518000
-				CN
-
-20-FA-BB   (hex)		Cambridge Executive Limited
-20FABB     (base 16)		Cambridge Executive Limited
-				St John's Innovation Centre
-				Cambridge  Cambridgeshire  CB40WS
-				GB
-
-14-1A-51   (hex)		Treetech Sistemas Digitais
-141A51     (base 16)		Treetech Sistemas Digitais
-				Praca Claudino Alves, 141
-				Atibaia  São Paulo  12940-800
-				BR
-
-58-7F-C8   (hex)		S2M
-587FC8     (base 16)		S2M
-				2 rue des champs
-				Saint Marcel    27950
-				FR
-
-20-05-05   (hex)		RADMAX COMMUNICATION PRIVATE LIMITED
-200505     (base 16)		RADMAX COMMUNICATION PRIVATE LIMITED
-				F-24/34, IIND FLOOR, SECTOR-7
-				DELHI  DELHI  110085
-				IN
-
-C0-35-BD   (hex)		Velocytech Aps
-C035BD     (base 16)		Velocytech Aps
-				Automatikvej 1, 3rd floor
-				SOEBORG    2860
-				DK
-
-28-71-84   (hex)		Spire Payments
-287184     (base 16)		Spire Payments
-				Units 3 & 6 Milford Trading Estate
-				Salisbury  Wiltshire  SP1 2UD
-				GB
-
-7C-B0-3E   (hex)		OSRAM GmbH
-7CB03E     (base 16)		OSRAM GmbH
-				Berliner Allee 65
-				Augsburg  Bayern  86136
-				DE
-
-3C-9F-81   (hex)		Shenzhen CATIC Bit Communications Technology Co.,Ltd
-3C9F81     (base 16)		Shenzhen CATIC Bit Communications Technology Co.,Ltd
-				in  Nanshan District,Shenzhen Software park Road 10 in Room 202
-				Shenzhen  Guangdong  518057
-				CN
-
-44-5F-7A   (hex)		Shihlin Electric & Engineering Corp.
-445F7A     (base 16)		Shihlin Electric & Engineering Corp.
-				16F  NO.88,  SEC,  6,  CHUNG  SHAN  N.  RD., TAIPEI  
-				HsinChu  HsinFun Shiang  304
-				TW
-
-44-13-19   (hex)		WKK TECHNOLOGY LTD.
-441319     (base 16)		WKK TECHNOLOGY LTD.
-				23/F., One Kowloon, No.1, Wang Yuen Street, 
-				    852
-				HK
-
-18-B5-91   (hex)		I-Storm
-18B591     (base 16)		I-Storm
-				Hogye-dong, Dongan-gu
-				Anyang-si  Gyeonggi-do  431-080
-				KR
-
-BC-8B-55   (hex)		NPP ELIKS America Inc. DBA T&M Atlantic
-BC8B55     (base 16)		NPP ELIKS America Inc. DBA T&M Atlantic
-				175 SW 7th St Suite 1812
-				Miami  FL  33130
-				US
-
-C0-49-3D   (hex)		MAITRISE TECHNOLOGIQUE
-C0493D     (base 16)		MAITRISE TECHNOLOGIQUE
-				224 RUE DE LA SAINTE BAUME
-				SAINT MAXIMIN LA SAINTE BAUME  VAR  83470
-				FR
-
-C8-45-44   (hex)		Asia Pacific CIS (Wuxi) Co, Ltd
-C84544     (base 16)		Asia Pacific CIS (Wuxi) Co, Ltd
-				No 11, Xikun Road, Wuxi New District
-				Wuxi  Jiangsu  214028
-				CN
-
-E0-EF-25   (hex)		Lintes Technology Co., Ltd.
-E0EF25     (base 16)		Lintes Technology Co., Ltd.
-				9F-1., No.150, Jian 1st Rd., Zhonghe Dist., 
-				 New Taipei City     23511
-				TW
-
-50-ED-94   (hex)		EGATEL SL
-50ED94     (base 16)		EGATEL SL
-				Parque Tecnologico de Galicia
-				Ourense    32901
-				ES
-
-48-A2-2D   (hex)		Shenzhen Huaxuchang Telecom Technology Co.,Ltd
-48A22D     (base 16)		Shenzhen Huaxuchang Telecom Technology Co.,Ltd
-				Room 501 Block B, Cyber Time Plaza
-				Shenzhen  Guangdong  518040
-				CN
-
-C8-60-00   (hex)		ASUSTek COMPUTER INC.
-C86000     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-AC-0D-FE   (hex)		Ekon GmbH - myGEKKO
-AC0DFE     (base 16)		Ekon GmbH - myGEKKO
-				Rienzfeldstraße 30
-				Bruneck  Südtirol (BZ)  39031
-				IT
-
-FC-5B-26   (hex)		MikroBits
-FC5B26     (base 16)		MikroBits
-				Jalan Petung 31 Papringan
-				Yogyakarta  DIY  55281
-				ID
-
-40-F4-07   (hex)		Nintendo Co., Ltd.
-40F407     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-B0-1C-91   (hex)		Elim Co
-B01C91     (base 16)		Elim Co
-				4F Gagu Plaza B/D 81-9, jeongja-dong, Jangan-gu, 
-				Suwon city  Gyeonggi-Do  440-300 
-				KR
-
-04-F1-7D   (hex)		Tarana Wireless
-04F17D     (base 16)		Tarana Wireless
-				2105 Martin Luther King Jr Way
-				Berkeley  CA  94704
-				US
-
-84-49-15   (hex)		vArmour Networks, Inc.
-844915     (base 16)		vArmour Networks, Inc.
-				4633 OLD IRONSIDES DR
-				SANTA CLARA  CA  95054-1807
-				US
-
-2C-BE-97   (hex)		Ingenieurbuero Bickele und Buehler GmbH
-2CBE97     (base 16)		Ingenieurbuero Bickele und Buehler GmbH
-				St.Poeltener Str. 70
-				Stuttgart  BW  70469
-				DE
-
-70-A6-6A   (hex)		Prox Dynamics AS
-70A66A     (base 16)		Prox Dynamics AS
-				Smedsvingen 4
-				Hvalstad  Akershus  1395
-				NO
-
-DC-3E-51   (hex)		Solberg & Andersen AS
-DC3E51     (base 16)		Solberg & Andersen AS
-				Litleaasvegen 61
-				Bergen    5132
-				NO
-
-90-0A-3A   (hex)		PSG Plastic Service GmbH
-900A3A     (base 16)		PSG Plastic Service GmbH
-				Pinaer Str. 12-16
-				Mannheim  BW  68309
-				DE
-
-28-CD-1C   (hex)		Espotel Oy
-28CD1C     (base 16)		Espotel Oy
-				Kappelitie 6
-				Espoo  Espoo  FI-02200
-				FI
-
-D4-43-A8   (hex)		Changzhou Haojie Electric Co., Ltd.
-D443A8     (base 16)		Changzhou Haojie Electric Co., Ltd.
-				No. 158,
-				Changzhou  Jiangsu  213022
-				CN
-
-BC-E5-9F   (hex)		WATERWORLD Technology Co.,LTD
-BCE59F     (base 16)		WATERWORLD Technology Co.,LTD
-				6 Floor,Block B,Digital Building,Garden City,No.1079,Nanhai Road,Nanshan District,
-				Shenzhen  Guangdong  518067
-				US
-
-70-41-B7   (hex)		Edwards Lifesciences LLC
-7041B7     (base 16)		Edwards Lifesciences LLC
-				One Edwards Way
-				Irvine  CA  92614
-				US
-
-DC-A8-CF   (hex)		New Spin Golf, LLC.
-DCA8CF     (base 16)		New Spin Golf, LLC.
-				1637 Burr Oak Drive
-				Libertyville  IL  60048
-				US
-
-A8-49-A5   (hex)		Lisantech Co., Ltd.
-A849A5     (base 16)		Lisantech Co., Ltd.
-				1108, STX V-Tower  Gasan-dong
-				Seoul    153-803
-				KR
-
-A0-5E-6B   (hex)		MELPER Co., Ltd.
-A05E6B     (base 16)		MELPER Co., Ltd.
-				207, 2nd FL.,Wonhyo Bldg.,1365-22
-				SEOUL    137-863
-				KR
-
-D8-78-E5   (hex)		KUHN SA
-D878E5     (base 16)		KUHN SA
-				4, impasse des fabriques
-				SAVERNE    67700
-				FR
-
-D8-24-BD   (hex)		Cisco Systems, Inc
-D824BD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-97-FB   (hex)		ADVANCED RF TECHNOLOGIES INC
-3497FB     (base 16)		ADVANCED RF TECHNOLOGIES INC
-				3116 W Vanowen St
-				Burbank  California  91505
-				US
-
-F0-3A-55   (hex)		Omega Elektronik AS
-F03A55     (base 16)		Omega Elektronik AS
-				Ege Serbest Bolgesi
-				Izmir    35410
-				TR
-
-98-BC-57   (hex)		SVA TECHNOLOGIES CO.LTD
-98BC57     (base 16)		SVA TECHNOLOGIES CO.LTD
-				5F No.192 Tinglin Road,
-				SHANGHAI    200233
-				CN
-
-DC-3C-2E   (hex)		Manufacturing System Insights, Inc.
-DC3C2E     (base 16)		Manufacturing System Insights, Inc.
-				2550 Ninth St.
-				Berkely  CA  94710
-				US
-
-F8-35-53   (hex)		Magenta Research Ltd.
-F83553     (base 16)		Magenta Research Ltd.
-				128 Litchfield Road
-				New Milford  CT  06776
-				US
-
-F4-04-4C   (hex)		ValenceTech Limited
-F4044C     (base 16)		ValenceTech Limited
-				Unit 1, 20/F., APEC Plaza
-				HONG KONG    NIL
-				CN
-
-C4-67-B5   (hex)		Libratone A/S
-C467B5     (base 16)		Libratone A/S
-				Marielundvej 43 A
-				2730 HERLEV    
-				DK
-
-4C-39-10   (hex)		Newtek Electronics co., Ltd.
-4C3910     (base 16)		Newtek Electronics co., Ltd.
-				Byucksan-Sunyoung Technopia 1004,
-				Uiwang-City  Kyunggi-Do  437-821
-				KR
-
-90-3A-A0   (hex)		Nokia
-903AA0     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-B0-6C-BF   (hex)		3ality Digital Systems GmbH
-B06CBF     (base 16)		3ality Digital Systems GmbH
-				Gut Mergenthau 1
-				Kissing  Bayern  86438
-				DE
-
-54-D0-ED   (hex)		AXIM Communications
-54D0ED     (base 16)		AXIM Communications
-				1F., No. 5, Aly. 12, Ln. 15, Sec. 6, Sinyi Rd., Sinyi Dist.,
-				Taipei    110
-				TW
-
-84-36-11   (hex)		hyungseul publishing networks
-843611     (base 16)		hyungseul publishing networks
-				526-4, paju bookcity, munbal-li, gyoha-eup
-				paju-si  Gyeonggi-do  413-832
-				KR
-
-34-40-B5   (hex)		IBM
-3440B5     (base 16)		IBM
-				3039 E Cornwallis Rd
-				Research Triangle Park  NC  27709
-				US
-
-D4-D7-48   (hex)		Cisco Systems, Inc
-D4D748     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-4F-69   (hex)		EKINOPS SAS
-344F69     (base 16)		EKINOPS SAS
-				3, Rue Blaise Pascal
-				LANNION  FRANCE  22300
-				FR
-
-F8-31-3E   (hex)		endeavour GmbH
-F8313E     (base 16)		endeavour GmbH
-				Max-Planck-Str. 04
-				Vreden  NRW  48691
-				DE
-
-14-36-05   (hex)		Nokia Corporation
-143605     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-C8-1A-FE   (hex)		DLOGIC GmbH
-C81AFE     (base 16)		DLOGIC GmbH
-				Rathausstrasse 14
-				Baar  ZG  6341
-				CH
-
-EC-63-E5   (hex)		ePBoard Design LLC
-EC63E5     (base 16)		ePBoard Design LLC
-				4065 E. La Palma Ave.
-				Anaheim  California  92807
-				US
-
-94-DB-49   (hex)		SITCORP
-94DB49     (base 16)		SITCORP
-				7 RUE CADET
-				PARIS    75015
-				FR
-
-F0-62-0D   (hex)		Shenzhen Egreat Tech Corp.,Ltd
-F0620D     (base 16)		Shenzhen Egreat Tech Corp.,Ltd
-				4F,1Building,Chuangye Industrial park
-				Shenzhen  Guangdong  518104
-				CN
-
-2C-67-FB   (hex)		ShenZhen Zhengjili Electronics Co., LTD
-2C67FB     (base 16)		ShenZhen Zhengjili Electronics Co., LTD
-				The Longhua Town Shenzhen City Streets huaning three house Science Park Road Chiayi Source fifth floor
-				Shenzhen  Guangdong  518000
-				CN
-
-3C-E5-B4   (hex)		KIDASEN INDUSTRIA E COMERCIO DE ANTENAS LTDA
-3CE5B4     (base 16)		KIDASEN INDUSTRIA E COMERCIO DE ANTENAS LTDA
-				AV SINCLER SAMBATTI, 1945
-				MARINGA  PARANA  87055-020
-				BR
-
-08-D0-9F   (hex)		Cisco Systems, Inc
-08D09F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-64-4B-F0   (hex)		CalDigit, Inc
-644BF0     (base 16)		CalDigit, Inc
-				1941 Miraloma Ave #B
-				Placentia  CA  92870
-				US
-
-64-ED-62   (hex)		WOORI SYSTEMS Co., Ltd
-64ED62     (base 16)		WOORI SYSTEMS Co., Ltd
-				101Ho #42-9, Jeongja-dong, Pundang-gu
-				Sungnam-si  Kyunggi-do  463-848
-				KR
-
-2C-00-2C   (hex)		UNOWHY
-2C002C     (base 16)		UNOWHY
-				11, rue Tronchet
-				Paris    75008
-				US
-
-5C-C9-D3   (hex)		PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA
-5CC9D3     (base 16)		PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA
-				AVENIDA BURITI, 4285
-				MANAUS  AMAZONAS  69075-000
-				BR
-
-C8-7C-BC   (hex)		Valink Co., Ltd. 
-C87CBC     (base 16)		Valink Co., Ltd. 
-				1F Dongwon Bldg. 90, Dangsan-Dong 3-Ga Youngdungpo-Gu
-				Seoul    150-803
-				KR
-
-B8-14-13   (hex)		Keen High Holding(HK) Ltd.
-B81413     (base 16)		Keen High Holding(HK) Ltd.
-				25th Floor, In-long Development Centre, No.6025 Shennan Ave
-				Shenzhen  Guangdong   518040
-				CN
-
-B4-94-4E   (hex)		WeTelecom Co., Ltd.
-B4944E     (base 16)		WeTelecom Co., Ltd.
-				The'O Plus #915
-				Gunpo-si  Kyunggi-do  435-805
-				KR
-
-E0-0B-28   (hex)		Inovonics
-E00B28     (base 16)		Inovonics
-				315 CTC Blvd
-				Louisville  CO  80027
-				US
-
-48-02-2A   (hex)		B-Link Electronic Limited
-48022A     (base 16)		B-Link Electronic Limited
-				NO 268,FuQian Rd, JuTang Community,GuanLan town BaoAn district,ShenZhen, 518110,China
-				Shen Zhen  Guang Dong  518110
-				CN
-
-18-E8-0F   (hex)		Viking Electronics Inc.
-18E80F     (base 16)		Viking Electronics Inc.
-				1531 Industrial St
-				Hudson  WI  54016
-				US
-
-CC-6B-F1   (hex)		Sound Masking Inc.
-CC6BF1     (base 16)		Sound Masking Inc.
-				47 - 23 - Glamis Drive Sw
-				Calgary  Alberta  T3E 6S3
-				CA
-
-2C-97-17   (hex)		I.C.Y. B.V.
-2C9717     (base 16)		I.C.Y. B.V.
-				Houtsaachmole 35
-				Lemmer  Friesland  8531 WC
-				NL
-
-2C-3F-38   (hex)		Cisco Systems, Inc
-2C3F38     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-40-50-E0   (hex)		Milton Security Group LLC
-4050E0     (base 16)		Milton Security Group LLC
-				111 North Harbor Blvd
-				Fullerton  CA  92832
-				US
-
-70-CA-9B   (hex)		Cisco Systems, Inc
-70CA9B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-78-BA   (hex)		Pantech Co., Ltd.
-A078BA     (base 16)		Pantech Co., Ltd.
-				110-1 Ongjeong-Ri, Tongjin-Eup
-				Gimpo-Si  Gyounggi-Do  415-865
-				KR
-
-68-BC-0C   (hex)		Cisco Systems, Inc
-68BC0C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-5B-11   (hex)		EVI HEAT AB
-345B11     (base 16)		EVI HEAT AB
-				Box 55
-				Kungsaengen    196 22
-				SE
-
-78-BA-D0   (hex)		Shinybow Technology Co. Ltd.
-78BAD0     (base 16)		Shinybow Technology Co. Ltd.
-				9Fl.,No.63,Ju Guang Rd.,Chung Ho Dist.
-				New Taipei    235
-				TW
-
-24-E6-BA   (hex)		JSC Zavod im. Kozitsky
-24E6BA     (base 16)		JSC Zavod im. Kozitsky
-				Bld. 70, 5th line, V.O, 
-				St.-Petersburg    199048
-				RU
-
-CC-A3-74   (hex)		Guangdong Guanglian Electronic Technology Co.Ltd
-CCA374     (base 16)		Guangdong Guanglian Electronic Technology Co.Ltd
-				B338,Block13,No.232 Waihuandonglu Road,High Education Mega Center
-				Guangzhou  Guangdong  510006
-				CN
-
-58-67-7F   (hex)		Clare Controls Inc.
-58677F     (base 16)		Clare Controls Inc.
-				7519 Pennsylvania Ave
-				Sarasota  FL  34243
-				US
-
-0C-5A-19   (hex)		Axtion Sdn Bhd
-0C5A19     (base 16)		Axtion Sdn Bhd
-				A13-07, Subang Avenue Serviced Suites
-				Subang Jaya  Selangor  47500
-				MY
-
-A8-BD-1A   (hex)		Honey Bee (Hong Kong) Limited
-A8BD1A     (base 16)		Honey Bee (Hong Kong) Limited
-				Flat L, 12/F., Phase 4, Kwun Tong Industrial Ctr.,
-				    
-				HK
-
-24-87-07   (hex)		SEnergy Corporation
-248707     (base 16)		SEnergy Corporation
-				Koizumi Bldg. 3F, 1-38-18
-				Yokohama city  Kanagawa Pref.  224-0003
-				JP
-
-C4-C1-9F   (hex)		National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
-C4C19F     (base 16)		National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
-				1200 Cypress Creek Rd.
-				Cedar Park  TX  78613
-				US
-
-00-08-30   (hex)		Cisco Systems, Inc
-000830     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C4-EE-AE   (hex)		VSS Monitoring
-C4EEAE     (base 16)		VSS Monitoring
-				1850 Gateway Dr, Suite 500
-				San Mateo  CA  94404
-				US
-
-F8-D3-A9   (hex)		AXAN Networks
-F8D3A9     (base 16)		AXAN Networks
-				2F Myungjin-Bldg Daechi-Dong Gangnam-Gu 
-				Seoul     135-845
-				KR
-
-BC-77-9F   (hex)		SBM Co., Ltd.
-BC779F     (base 16)		SBM Co., Ltd.
-				Hyunwoo Bldg 206, Anyang7-Dong
-				Anyang  Gyeonggi-Do  430-817
-				KR
-
-40-6A-AB   (hex)		RIM
-406AAB     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-9C-A3-BA   (hex)		SAKURA Internet Inc.
-9CA3BA     (base 16)		SAKURA Internet Inc.
-				7-20-1 Nishi-shinjuku
-				Shinjuku-ku  Tokyo  1600023
-				JP
-
-8C-8A-6E   (hex)		ESTUN AUTOMATION TECHNOLOY CO., LTD
-8C8A6E     (base 16)		ESTUN AUTOMATION TECHNOLOY CO., LTD
-				16,Shuige Road
-				Nanjing  Jiangsu  211106
-				CN
-
-98-82-17   (hex)		Disruptive Ltd
-988217     (base 16)		Disruptive Ltd
-				Windsor House
-				High Wycombe  Buckinghamshire  HP12 3NR
-				GB
-
-9C-5C-8D   (hex)		FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS  LTDA
-9C5C8D     (base 16)		FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS  LTDA
-				R: Vicente de Felice, 589 -  Jd.Ouro Verde
-				Limeira  São Paulo  13482-075
-				BR
-
-D4-20-6D   (hex)		HTC Corporation
-D4206D     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-7C-1E-52   (hex)		Microsoft
-7C1E52     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-DC-B4-C4   (hex)		Microsoft XCG
-DCB4C4     (base 16)		Microsoft XCG
-				1 Microsoft Way
-				Redmond  WA  98052
-				US
-
-AC-CB-09   (hex)		Hefcom Metering (Pty) Ltd
-ACCB09     (base 16)		Hefcom Metering (Pty) Ltd
-				PO Box 10770
-				Centurion  Gauteng  0046
-				ZA
-
-18-66-E3   (hex)		Veros Systems, Inc.
-1866E3     (base 16)		Veros Systems, Inc.
-				PO Box 10534
-				College Station  Texas  77842
-				US
-
-74-FD-A0   (hex)		Compupal (Group) Corporation 
-74FDA0     (base 16)		Compupal (Group) Corporation 
-				No.1555 Jiashan Avenue
-				Jiashan  Zhejiang  314113
-				CN
-
-CC-B8-F1   (hex)		EAGLE KINGDOM TECHNOLOGIES LIMITED
-CCB8F1     (base 16)		EAGLE KINGDOM TECHNOLOGIES LIMITED
-				FLAT/ RM B 26/F TWO CHINACHEM PLAZA 68 CONNAUGHT ROAD CENTRAL HK
-				    
-				HK
-
-A4-29-B7   (hex)		bluesky
-A429B7     (base 16)		bluesky
-				Rm1410 Tower A,Chengjian plaza,NO.18 beitaipingzhuang Road,Haidian district,
-				Beijing    100088
-				CN
-
-48-F3-17   (hex)		Private
-48F317     (base 16)		Private
-
-CC-F8-F0   (hex)		Xi'an HISU Multimedia Technology Co.,Ltd.
-CCF8F0     (base 16)		Xi'an HISU Multimedia Technology Co.,Ltd.
-				3 Floor , NO.1 Building , Modern Business Enterprise Centre (East) , NO.69, Jinye road , XiÂ¡Â¯an 
-				Xi'an City  Shanxi Province  710075
-				CN
-
-04-88-8C   (hex)		Eifelwerk Butler Systeme GmbH
-04888C     (base 16)		Eifelwerk Butler Systeme GmbH
-				Eifelwerkstrasse 1
-				Malbergweich    54655
-				DE
-
-D4-5A-B2   (hex)		Galleon Systems
-D45AB2     (base 16)		Galleon Systems
-				Unit 9, Fortnum Close
-				Birmingham  West Midlands  B33 0LG
-				GB
-
-30-DE-86   (hex)		Cedac Software S.r.l.
-30DE86     (base 16)		Cedac Software S.r.l.
-				Via Toscana, 3
-				Castiglione dei Pepoli  Bologna  40035
-				IT
-
-18-C4-51   (hex)		Tucson Embedded Systems
-18C451     (base 16)		Tucson Embedded Systems
-				5620 North Kolb Road
-				Tucson  AZ  85750
-				US
-
-70-46-42   (hex)		CHYNG HONG ELECTRONIC CO., LTD.
-704642     (base 16)		CHYNG HONG ELECTRONIC CO., LTD.
-				No.80, Lane 258, Sec. 3, Hansi W. Rd.,
-				Taichung    40647
-				TW
-
-D4-1C-1C   (hex)		RCF S.P.A.
-D41C1C     (base 16)		RCF S.P.A.
-				Via Raffaello Sanzio 13
-				Reggio Emilia  Italy  42124
-				IT
-
-58-92-0D   (hex)		Kinetic Avionics Limited
-58920D     (base 16)		Kinetic Avionics Limited
-				Elstree Aerodrome
-				Hertfordshire    WD6 3AW
-				GB
-
-AC-02-EF   (hex)		Comsis
-AC02EF     (base 16)		Comsis
-				3 rue Broussais
-				Paris    75014
-				FR
-
-B8-B4-2E   (hex)		Gionee Communication Equipment Co,Ltd.ShenZhen
-B8B42E     (base 16)		Gionee Communication Equipment Co,Ltd.ShenZhen
-				21/F Times Technology Building, 7028 Shennan Road, Futian District,
-				Shenzhen  Guangdong  518040
-				CN
-
-44-3E-B2   (hex)		DEOTRON Co., LTD.
-443EB2     (base 16)		DEOTRON Co., LTD.
-				506, Dain Bldg
-				Ansan  Kyonggi-do  425-856
-				KR
-
-D0-59-C3   (hex)		CeraMicro Technology Corporation
-D059C3     (base 16)		CeraMicro Technology Corporation
-				4F, No. 16-1, Sec. 6, Mingcyuan East Road
-				Taipei    114
-				TW
-
-18-2C-91   (hex)		Concept Development, Inc.
-182C91     (base 16)		Concept Development, Inc.
-				1881 Langley Avenue
-				Irvine  CA  92614-5623
-				US
-
-FC-17-94   (hex)		InterCreative Co., Ltd
-FC1794     (base 16)		InterCreative Co., Ltd
-				897-6, HoGye-Dong, DongAn-Gu,
-				AnYang-Si,  GyeongGi-Do,  431-836
-				KR
-
-B4-0B-7A   (hex)		Brusa Elektronik AG
-B40B7A     (base 16)		Brusa Elektronik AG
-				Neudorf 14
-				Sennwald  St. Gallen  9466
-				CH
-
-28-0C-B8   (hex)		Mikrosay Yazilim ve Elektronik A.S.
-280CB8     (base 16)		Mikrosay Yazilim ve Elektronik A.S.
-				Cevizli Mah. Tansel Cad. 
-				Istanbul    34846
-				TR
-
-3C-C9-9E   (hex)		Huiyang Technology Co., Ltd
-3CC99E     (base 16)		Huiyang Technology Co., Ltd
-				22D 7 Block ZhonghuiNewcity
-				Dongguan  Guangdong  523849
-				CN
-
-2C-1E-EA   (hex)		AERODEV
-2C1EEA     (base 16)		AERODEV
-				No.59,1985 Lane,Chunshen Road,
-				Shanghai    200237
-				CN
-
-1C-8E-8E   (hex)		DB Communication & Systems Co., ltd.
-1C8E8E     (base 16)		DB Communication & Systems Co., ltd.
-				3-3 Yeongdeok-dong, Giheung-gu
-				Yongin-si  Gyeonggi-do  449-908
-				KR
-
-24-EC-99   (hex)		ASKEY COMPUTER CORP
-24EC99     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-A4-4B-15   (hex)		Sun Cupid Technology (HK) LTD
-A44B15     (base 16)		Sun Cupid Technology (HK) LTD
-				Room 1201-3, 12/F., Tower 6
-				Tsim Sha Tsui    
-				HK
-
-48-C8-62   (hex)		Simo Wireless,Inc.
-48C862     (base 16)		Simo Wireless,Inc.
-				326#,Building 4,Zhongxing Industrial Park,Chuangye
-				Shenzhen  Guangdong  518054
-				CN
-
-78-BE-B6   (hex)		Enhanced Vision
-78BEB6     (base 16)		Enhanced Vision
-				5882 MACHINE DR.
-				Huntington Beach  California  92649
-				US
-
-44-9C-B5   (hex)		Alcomp, Inc
-449CB5     (base 16)		Alcomp, Inc
-				11537 Walnut Lane
-				Fort Atkinson  WI  53538
-				US
-
-B4-FC-75   (hex)		SEMA Electronics(HK) CO.,LTD
-B4FC75     (base 16)		SEMA Electronics(HK) CO.,LTD
-				Xialingbei Industrial Zone  Liaobu, 
-				Dongguan  Guangdong  523411
-				CN
-
-B0-BF-99   (hex)		WIZITDONGDO
-B0BF99     (base 16)		WIZITDONGDO
-				2F, 299-1, 3-DONG, SUNGSU 2-GA
-				SEOUL    133-833
-				KR
-
-B8-2A-DC   (hex)		EFR Europäische Funk-Rundsteuerung GmbH
-B82ADC     (base 16)		EFR Europäische Funk-Rundsteuerung GmbH
-				Nymphenburger Straße 20b
-				Munich    80335
-				DE
-
-40-F1-4C   (hex)		ISE Europe SPRL
-40F14C     (base 16)		ISE Europe SPRL
-				Fauvette 1
-				Uccle    1180
-				BE
-
-E8-94-4C   (hex)		Cogent Healthcare Systems Ltd
-E8944C     (base 16)		Cogent Healthcare Systems Ltd
-				69 Alma Road
-				Berkshire    SL4 3HT
-				GB
-
-90-67-F3   (hex)		Alcatel Lucent
-9067F3     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-D4-F0-B4   (hex)		Napco Security Technologies
-D4F0B4     (base 16)		Napco Security Technologies
-				333 Bayview Ave
-				Amityville  NY  11701
-				US
-
-68-F8-95   (hex)		Redflow Limited
-68F895     (base 16)		Redflow Limited
-				1/27 Counihan Rd 
-				Brisbane  Queensland  4073
-				AU
-
-70-B9-21   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-70B921     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-A0-E2-95   (hex)		DAT System Co.,Ltd
-A0E295     (base 16)		DAT System Co.,Ltd
-				Gun San Free Trade Area 511-1 ,
-				    573-540
-				KR
-
-A0-16-5C   (hex)		Triteka LTD
-A0165C     (base 16)		Triteka LTD
-				Malha Technology Park
-				Jerusalem    96951
-				IL
-
-9C-41-7C   (hex)		Hame  Technology Co.,  Limited 
-9C417C     (base 16)		Hame  Technology Co.,  Limited 
-				5F, No. 18 High Tech Middle Avenue One, High Tech Industrial Park, Nanshan District, 
-				Shenzhen  Guangdong  518057
-				CN
-
-9C-6A-BE   (hex)		QEES ApS.
-9C6ABE     (base 16)		QEES ApS.
-				Naverland 31, 2.tv
-				Glostrup  Hovedstaden  2600
-				DK
-
-9C-93-4E   (hex)		Xerox Corporation
-9C934E     (base 16)		Xerox Corporation
-				Mail Stop 0214 - 7E
-				Webster  NY  14580
-				US
-
-04-46-65   (hex)		Murata Manufacturing Co., Ltd.
-044665     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-2C-21-72   (hex)		Juniper Networks
-2C2172     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-90-09-17   (hex)		Far-sighted mobile
-900917     (base 16)		Far-sighted mobile
-				Technology Park Desay Building 6th-Floor
-				Shenzhen  Guangdong Province   518000
-				CN
-
-2C-8B-F2   (hex)		Hitachi Metals America Ltd
-2C8BF2     (base 16)		Hitachi Metals America Ltd
-				1920 Zanker Road
-				San Jose   CA  95112
-				US
-
-D8-97-3B   (hex)		Artesyn Embedded Technologies
-D8973B     (base 16)		Artesyn Embedded Technologies
-				16/F Lu Plaza Building
-				Kwun Tong  Kowloon  00000
-				HK
-
-38-26-CD   (hex)		ANDTEK
-3826CD     (base 16)		ANDTEK
-				Am Soeldnermoos 17
-				Hallbergmoos  Bavaria  85399
-				DE
-
-88-BF-D5   (hex)		Simple Audio Ltd
-88BFD5     (base 16)		Simple Audio Ltd
-				Unit 59 Elderpark Workspace
-				Glasgow    G51 3TR
-				GB
-
-24-CB-E7   (hex)		MYK, Inc.
-24CBE7     (base 16)		MYK, Inc.
-				4-60-30-108, Kamoi, 
-				Yokohama  Kanagawa  226-0003
-				JP
-
-B0-A1-0A   (hex)		Pivotal Systems Corporation
-B0A10A     (base 16)		Pivotal Systems Corporation
-				4683  Chabot Drive
-				Pleasanton  CA  94588
-				US
-
-80-2D-E1   (hex)		Solarbridge Technologies
-802DE1     (base 16)		Solarbridge Technologies
-				9229 Waterford Centre Blvd
-				Austin  TX  78758
-				US
-
-F4-A5-2A   (hex)		Hawa Technologies Inc
-F4A52A     (base 16)		Hawa Technologies Inc
-				336 Hayes St
-				San Francisco  California  94102
-				US
-
-0C-6E-4F   (hex)		PrimeVOLT Co., Ltd.
-0C6E4F     (base 16)		PrimeVOLT Co., Ltd.
-				2F-3, No. 9, Lane 3, Jihu Rd, Neihu
-				Taipei    11492
-				TW
-
-E8-B7-48   (hex)		Cisco Systems, Inc
-E8B748     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-99-BC   (hex)		FonSee Technology Inc.
-BC99BC     (base 16)		FonSee Technology Inc.
-				14F-2, No.32, Gaotie 2nd Rd.,
-				Zhubei City  Hsinchu County  302
-				TW
-
-78-3F-15   (hex)		EasySYNC Ltd.
-783F15     (base 16)		EasySYNC Ltd.
-				Unit 1, 2 Seaward Place
-				Glasgow  Scotland  G41 1HH
-				GB
-
-18-D0-71   (hex)		DASAN CO., LTD.
-18D071     (base 16)		DASAN CO., LTD.
-				DASAN Tower 7F, 49 Daewangpangyo-ro644beon-gil
-				Seongnam-si  Gyeonggi-do  463-760
-				KR
-
-58-E4-76   (hex)		CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD
-58E476     (base 16)		CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD
-				4th Floor,Jiaodajiepu Building,72# Kejierlu Road, 
-				Xi'an  Shaanxi Province  710100
-				CN
-
-44-7E-95   (hex)		Alpha and Omega, Inc
-447E95     (base 16)		Alpha and Omega, Inc
-				4735 Montview Blvd
-				Denver  CO  80207
-				US
-
-98-60-22   (hex)		EMW Co., Ltd.
-986022     (base 16)		EMW Co., Ltd.
-				80B-4L, 680-3 Gojan-Dong
-				Incheon    405-819
-				KR
-
-B8-D4-9D   (hex)		M Seven System Ltd.
-B8D49D     (base 16)		M Seven System Ltd.
-				24F, Trust Tower Bldg, 275-7, Yangjae2-Dong, Seocho-Gu
-				Seoul    137-739
-				KR
-
-3C-67-2C   (hex)		Sciovid Inc.
-3C672C     (base 16)		Sciovid Inc.
-				387 S Silverbrook Dr
-				Anaheim  CA  92807
-				US
-
-DC-9B-1E   (hex)		Intercom, Inc.
-DC9B1E     (base 16)		Intercom, Inc.
-				Sorimachi Bldg., 3-5, Taito 1-chome, 
-				Taito-ku  Tokyo  110-8654
-				JP
-
-BC-5F-F4   (hex)		ASRock Incorporation
-BC5FF4     (base 16)		ASRock Incorporation
-				2F.,No.37, Sec.2, Jhongyang S.Rd., Beitou Distric, 
-				Taipei    112
-				TW
-
-E8-B4-AE   (hex)		Shenzhen C&D Electronics Co.,Ltd
-E8B4AE     (base 16)		Shenzhen C&D Electronics Co.,Ltd
-				Building 2, Xia You Song Mountain Top Industrial District, You Song Village
-				Shenzhen  Guang Dong  518000
-				CN
-
-50-FA-AB   (hex)		L-tek d.o.o.
-50FAAB     (base 16)		L-tek d.o.o.
-				Obrtna cesta 18
-				Sentjernej    8310
-				SI
-
-38-91-FB   (hex)		Xenox Holding BV
-3891FB     (base 16)		Xenox Holding BV
-				Lingedijk 80
-				Tricht  Gelderland  4196 HC
-				NL
-
-A8-E0-18   (hex)		Nokia Corporation
-A8E018     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-78-1D-FD   (hex)		Jabil Inc
-781DFD     (base 16)		Jabil Inc
-				10500 Dr. Martin Luther King Jr. St. N.
-				St. Petersburg  Florida  33716
-				US
-
-18-AE-BB   (hex)		Siemens Convergence Creators GmbH&Co.KG
-18AEBB     (base 16)		Siemens Convergence Creators GmbH&Co.KG
-				Communications, Media and Technology
-				Hamburg    D-21079
-				DE
-
-B0-BD-A1   (hex)		ZAKLAD ELEKTRONICZNY SIMS
-B0BDA1     (base 16)		ZAKLAD ELEKTRONICZNY SIMS
-				POD SKARPA 51A
-				BYDGOSZCZ  KUJAWSKO-POMORSKIE  85-796
-				PL
-
-70-B2-65   (hex)		Hiltron s.r.l.
-70B265     (base 16)		Hiltron s.r.l.
-				Strada Provinciale di Caserta, 218
-				Naples    80144
-				IT
-
-CC-C6-2B   (hex)		Tri-Systems Corporation
-CCC62B     (base 16)		Tri-Systems Corporation
-				3-27-8 TRS Building 3F
-				Hachioji  Tokyo  192-0904
-				JP
-
-D8-C0-68   (hex)		Netgenetech.co.,ltd.
-D8C068     (base 16)		Netgenetech.co.,ltd.
-				704, Hanlim Venture Town., #689-6, 
-				Gunpo-si    435-862
-				KR
-
-60-11-99   (hex)		Siama Systems Inc
-601199     (base 16)		Siama Systems Inc
-				410 Saint-Nicolas Street
-				Montreal  Quebec  H2Y 2P5
-				CA
-
-6C-81-FE   (hex)		Mitsuba Corporation
-6C81FE     (base 16)		Mitsuba Corporation
-				1-2681
-				Kiryu  Gunma  376-8555
-				JP
-
-C0-27-B9   (hex)		Beijing National Railway Research & Design Institute  of Signal & Communication Co., Ltd.
-C027B9     (base 16)		Beijing National Railway Research & Design Institute  of Signal & Communication Co., Ltd.
-				Building No.18, Huayuan YiLi,Fengtai District,
-				Beijing    100073
-				CN
-
-14-74-11   (hex)		RIM
-147411     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-F8-A9-DE   (hex)		PUISSANCE PLUS
-F8A9DE     (base 16)		PUISSANCE PLUS
-				222 Impasse Louis Lépine
-				Montauban    82000
-				FR
-
-A8-8C-EE   (hex)		MicroMade Galka i Drozdz sp.j.
-A88CEE     (base 16)		MicroMade Galka i Drozdz sp.j.
-				ul. Wieniawskiego 16
-				Pila  Wielkopolskie  64-920
-				PL
-
-DC-2B-66   (hex)		InfoBLOCK S.A. de C.V.
-DC2B66     (base 16)		InfoBLOCK S.A. de C.V.
-				Hegel 229 - 10
-				Mexico City  Distrito Federal  11570
-				MX
-
-B8-87-1E   (hex)		Good Mind Industries Co., Ltd.
-B8871E     (base 16)		Good Mind Industries Co., Ltd.
-				22, Ta Yeou 2nd St, 
-				Kaohsiung    831
-				TW
-
-D4-F0-27   (hex)		Trust Power Ltd.
-D4F027     (base 16)		Trust Power Ltd.
-				13 Berkley Street
-				London    W1J 8DU
-				GB
-
-04-55-CA   (hex)		BriView (Xiamen) Corp.
-0455CA     (base 16)		BriView (Xiamen) Corp.
-				NO.1998 West of Fangshan Road,Xiang An Branch,Torch Hi-tech lndustrial Development Zone,
-				Xiamen city  Fujian Province  361102
-				CN
-
-14-35-B3   (hex)		Future Designs, Inc.
-1435B3     (base 16)		Future Designs, Inc.
-				2702 Triana Blvd
-				Huntsville  AL  35805
-				US
-
-AC-93-2F   (hex)		Nokia Corporation
-AC932F     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-00-54-AF   (hex)		Continental Automotive Systems Inc.
-0054AF     (base 16)		Continental Automotive Systems Inc.
-				21440 W. Lake Cook Rd.
-				Deer Park  IL  60010
-				US
-
-AC-CA-BA   (hex)		Midokura Co., Ltd. 
-ACCABA     (base 16)		Midokura Co., Ltd. 
-				7th Floor Azabudai Hinoki building
-				Tokyo    106-0041
-				JP
-
-0C-81-12   (hex)		Private
-0C8112     (base 16)		Private
-
-9C-95-F8   (hex)		SmartDoor Systems, LLC
-9C95F8     (base 16)		SmartDoor Systems, LLC
-				5711-A Center Lane
-				Falls Church  Virginia  22041
-				US
-
-78-19-F7   (hex)		Juniper Networks
-7819F7     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-64-09-4C   (hex)		Beijing Superbee Wireless Technology Co.,Ltd
-64094C     (base 16)		Beijing Superbee Wireless Technology Co.,Ltd
-				B7,Science-Tech Fortune Center,
-				Beijing    100192
-				CN
-
-7C-7D-41   (hex)		Jinmuyu Electronics Co., Ltd.
-7C7D41     (base 16)		Jinmuyu Electronics Co., Ltd.
-				Room 132, Building 16, Tianqiaowan
-				Beijing    101101
-				CN
-
-4C-14-80   (hex)		NOREGON SYSTEMS, INC
-4C1480     (base 16)		NOREGON SYSTEMS, INC
-				100 N. MAIN ST.  SUITE 2200
-				WINSTON - SALEM  NC  27101
-				US
-
-A4-85-6B   (hex)		Q Electronics Ltd
-A4856B     (base 16)		Q Electronics Ltd
-				Beck House, Hawksworth Road
-				Leeds  West Yorkshire  LS18 4JP
-				GB
-
-20-D5-AB   (hex)		Korea Infocom Co.,Ltd.
-20D5AB     (base 16)		Korea Infocom Co.,Ltd.
-				5F Wintek B/D 511
-				Uiwang  Kyunggi-Do  437-830
-				KR
-
-0C-F3-EE   (hex)		EM Microelectronic
-0CF3EE     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-64-D1-A3   (hex)		Sitecom Europe BV
-64D1A3     (base 16)		Sitecom Europe BV
-				Linatebaan 101
-				Rotterdam  Zuid Holland  3045 AH
-				NL
-
-F4-3E-9D   (hex)		Benu Networks, Inc.
-F43E9D     (base 16)		Benu Networks, Inc.
-				300 Rd., Suite 110
-				Billerica  MA  01821
-				US
-
-04-E2-F8   (hex)		AEP Ticketing solutions srl
-04E2F8     (base 16)		AEP Ticketing solutions srl
-				Via dei Colli, 240
-				Signa  Firenze  50058
-				IT
-
-EC-9E-CD   (hex)		Artesyn Embedded Technologies
-EC9ECD     (base 16)		Artesyn Embedded Technologies
-				2900 S. Diablo Way Suite 190
-				Tempe  Arizona  85282
-				US
-
-8C-51-05   (hex)		Shenzhen ireadygo Information Technology CO.,LTD.
-8C5105     (base 16)		Shenzhen ireadygo Information Technology CO.,LTD.
-				Room 02,11F,DESAY Building,No.1 Hi-Tech South Road
-				Shenzhen    518057
-				CN
-
-C8-20-8E   (hex)		Storagedata
-C8208E     (base 16)		Storagedata
-				Randstad 22117
-				Almere  Flevoland  1316BW
-				NL
-
-5C-5E-AB   (hex)		Juniper Networks
-5C5EAB     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-9C-80-7D   (hex)		SYSCABLE Korea Inc.
-9C807D     (base 16)		SYSCABLE Korea Inc.
-				2F KAMA Bldg 1461-15 Secho-3dong Seocho-Gu
-				Seoul    137-720
-				KR
-
-28-E2-97   (hex)		Shanghai InfoTM Microelectronics Co.,Ltd.
-28E297     (base 16)		Shanghai InfoTM Microelectronics Co.,Ltd.
-				building 11,NO.115,lane 572,BiBo Road,
-				ShangHai    201203
-				CN
-
-34-B5-71   (hex)		PLDS
-34B571     (base 16)		PLDS
-				Schanzenfeldstrasse 2
-				Wetzlar  Hessen  35578
-				DE
-
-3C-74-37   (hex)		RIM
-3C7437     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-EC-92-33   (hex)		Eddyfi NDT Inc
-EC9233     (base 16)		Eddyfi NDT Inc
-				2800, Louis-Lumiere street
-				Quebec  Quebec  G1P 0A4
-				CA
-
-74-38-89   (hex)		ANNAX Anzeigesysteme GmbH
-743889     (base 16)		ANNAX Anzeigesysteme GmbH
-				Wettersteinstrasse 18
-				Taufkirchen  Bavaria  82024
-				DE
-
-44-D2-CA   (hex)		Anvia TV Oy
-44D2CA     (base 16)		Anvia TV Oy
-				PO Box 29
-				SEINAJOKI    FIN60101
-				FI
-
-38-6E-21   (hex)		Wasion Group Ltd.
-386E21     (base 16)		Wasion Group Ltd.
-				No.468 West Tongzipo Road High-Tech Industrial Development Zone
-				Changsha City  Hunan Province,  410205 
-				CN
-
-28-72-F0   (hex)		ATHENA
-2872F0     (base 16)		ATHENA
-				42 RUE MONGE
-				PARIS    75005
-				FR
-
-1C-19-DE   (hex)		eyevis GmbH
-1C19DE     (base 16)		eyevis GmbH
-				Hundsschleestrasse 23
-				Reutlingen  BW  72766
-				DE
-
-60-9E-64   (hex)		Vivonic GmbH
-609E64     (base 16)		Vivonic GmbH
-				Kurfuerst-Eppstein-Ring 4
-				Sailauf  Bayern  63877
-				DE
-
-BC-15-A6   (hex)		Taiwan Jantek Electronics,Ltd.
-BC15A6     (base 16)		Taiwan Jantek Electronics,Ltd.
-				6F-1,No.1 Wu-Chuan 1St. Rd,Wu-Ku Industrial Park,
-				Sinchwang City  Taipei Hsien  24892
-				TW
-
-DC-DE-CA   (hex)		Akyllor
-DCDECA     (base 16)		Akyllor
-				Britannia House, 22, 2F, Cator Road
-				Bandar Seri Begawan BS    8811
-				BN
-
-A0-AA-FD   (hex)		EraThink Technologies Corp.
-A0AAFD     (base 16)		EraThink Technologies Corp.
-				289 Bisheng Road Building 4,Floor 4
-				Shanghai    201204
-				CN
-
-6C-A9-06   (hex)		Telefield Ltd
-6CA906     (base 16)		Telefield Ltd
-				Flat D,2/F., Valiant Industrial Centre,2-12 Au Pui Wan Street, 
-				Hongkong    852
-				CN
-
-78-22-3D   (hex)		Affirmed Networks
-78223D     (base 16)		Affirmed Networks
-				35 Nagog Park
-				Acton  MA  01720
-				US
-
-3C-02-B1   (hex)		Creation Technologies LP
-3C02B1     (base 16)		Creation Technologies LP
-				3939 North Fraser Way
-				Burnaby  BC  V5J 5J2
-				CA
-
-E4-41-E6   (hex)		Ottec Technology GmbH
-E441E6     (base 16)		Ottec Technology GmbH
-				Bünteweg 33
-				Gehrden  Lower Saxony  30989
-				DE
-
-BC-71-C1   (hex)		XTrillion, Inc.
-BC71C1     (base 16)		XTrillion, Inc.
-				1-12-3-4F 
-				Chiyoda-ku  Tokyo  101-0041
-				JP
-
-E0-E8-E8   (hex)		Olive Telecommunication Pvt. Ltd
-E0E8E8     (base 16)		Olive Telecommunication Pvt. Ltd
-				862, Udyog Vihar
-				Gurgaon  Haryana  122016
-				IN
-
-60-52-D0   (hex)		FACTS Engineering 
-6052D0     (base 16)		FACTS Engineering 
-				8049 Photonics Drive
-				New Port Richey  FL  34655
-				US
-
-B0-89-91   (hex)		LGE 
-B08991     (base 16)		LGE 
-				60-39 , Kasan -dong , Gumcheon-gu.
-				Seoul     153-801
-				KR
-
-30-14-2D   (hex)		Piciorgros GmbH
-30142D     (base 16)		Piciorgros GmbH
-				Claudiastrasse 5
-				Cologne  NRW  51149
-				DE
-
-50-AF-73   (hex)		Shenzhen Bitland Information Technology Co., Ltd.
-50AF73     (base 16)		Shenzhen Bitland Information Technology Co., Ltd.
-				1-4F,44 Building,Tanglang Industrial Park and 1-6F,#7 Building,XiLi Tongfuyu Industrial Town,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-5C-9A-D8   (hex)		FUJITSU LIMITED
-5C9AD8     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-A4-C0-E1   (hex)		Nintendo Co., Ltd.
-A4C0E1     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-4C-3B-74   (hex)		VOGTEC(H.K.) Co., Ltd
-4C3B74     (base 16)		VOGTEC(H.K.) Co., Ltd
-				Flat 01, 2/F, On Ning Building,
-				Hong Kong    999077
-				CN
-
-68-43-52   (hex)		Bhuu Limited
-684352     (base 16)		Bhuu Limited
-				Office 1, 465 Mt Eden Road
-				Auckland    1023
-				NZ
-
-EC-E9-0B   (hex)		SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH
-ECE90B     (base 16)		SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH
-				RUA GUERRA DE AGUIAR, 220
-				São Paulo  SP  08275-260
-				BR
-
-A0-8C-9B   (hex)		Xtreme Technologies Corp
-A08C9B     (base 16)		Xtreme Technologies Corp
-				200 4616 Valiant Dr NW
-				Calgary  AB  T3A0X9
-				CA
-
-A8-39-44   (hex)		Actiontec Electronics, Inc
-A83944     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-74-E0-6E   (hex)		Ergophone GmbH
-74E06E     (base 16)		Ergophone GmbH
-				Temmlerstrasse 5
-				Marburg  Hessen  35039
-				DE
-
-0C-F0-B4   (hex)		Globalsat International Technology Ltd
-0CF0B4     (base 16)		Globalsat International Technology Ltd
-				17th floor,China Youse Building,No.6013 Shennan Avenue,Futian District,
-				Shenzhen  Guangdong  518040
-				CN
-
-48-DF-1C   (hex)		Wuhan NEC Fibre Optic Communications industry Co. Ltd
-48DF1C     (base 16)		Wuhan NEC Fibre Optic Communications industry Co. Ltd
-				3rd Road Guanshan,
-				Wuhan  Hubei  430074
-				CN
-
-D4-9C-8E   (hex)		University of FUKUI
-D49C8E     (base 16)		University of FUKUI
-				3-9-1 Bunkyo
-				Fukui City    910-8507
-				JP
-
-F8-F0-14   (hex)		RackWare Inc.
-F8F014     (base 16)		RackWare Inc.
-				44053 Fremont Blvd.
-				Fremont  CA  94538
-				US
-
-28-26-A6   (hex)		PBR electronics GmbH
-2826A6     (base 16)		PBR electronics GmbH
-				Berliner Strasse 5
-				Sandhausen  Baden Wuertemmberg  69207
-				DE
-
-B4-28-F1   (hex)		E-Prime Co., Ltd.
-B428F1     (base 16)		E-Prime Co., Ltd.
-				Rm1207, Kolon Science Valley, 811,
-				Seoul    152050
-				KR
-
-C0-12-42   (hex)		Alpha Security Products
-C01242     (base 16)		Alpha Security Products
-				10715 Sikes Place, Ste. 200
-				Charlotte  NC  28277
-				US
-
-BC-20-BA   (hex)		Inspur (Shandong) Electronic Information Co., Ltd
-BC20BA     (base 16)		Inspur (Shandong) Electronic Information Co., Ltd
-				No.1036 Shunya Rd.
-				Jinan  Shandong  250101
-				CN
-
-1C-FE-A7   (hex)		IDentytech Solutins Ltd.
-1CFEA7     (base 16)		IDentytech Solutins Ltd.
-				14 Hadaya Street 
-				Ramat- Hasharon    47226
-				IL
-
-30-4E-C3   (hex)		Tianjin Techua Technology Co., Ltd.
-304EC3     (base 16)		Tianjin Techua Technology Co., Ltd.
-				12-1-1401 Tianlinyuan Fulicheng Gulouxi Road,Nankai District 
-				Tianjin    300101
-				CN
-
-B4-CF-DB   (hex)		Shenzhen Jiuzhou Electric Co.,LTD
-B4CFDB     (base 16)		Shenzhen Jiuzhou Electric Co.,LTD
-				6F,Jiuzhou Electric Building,Southern No.12RD.,Hi-Tech Industrial Park,Nanshan District,
-				Shenzhen  Guangdong  518057
-				CN
-
-FC-D4-F2   (hex)		The Coca Cola Company
-FCD4F2     (base 16)		The Coca Cola Company
-				One Coca Cola Plaza
-				Atlanta  GA  30313
-				US
-
-5C-6A-7D   (hex)		KENTKART EGE ELEKTRONIK SAN. VE TIC. LTD. STI. 
-5C6A7D     (base 16)		KENTKART EGE ELEKTRONIK SAN. VE TIC. LTD. STI. 
-				1370 SK, NO:42/304, 
-				MONTRO  IZMIR  35230
-				TR
-
-44-59-9F   (hex)		Criticare Systems, Inc
-44599F     (base 16)		Criticare Systems, Inc
-				20925 Crossroads Circle
-				Waukasha  WI  53186
-				US
-
-3C-2F-3A   (hex)		SFORZATO Corp.
-3C2F3A     (base 16)		SFORZATO Corp.
-				863
-				HINO-SHI  TOKYO  191-0022
-				JP
-
-74-CE-56   (hex)		Packet Force Technology Limited Company
-74CE56     (base 16)		Packet Force Technology Limited Company
-				 2F., No.25, Sec. 1, Shuangshi Rd., Central Dist., 
-				Taichung    40046
-				TW
-
-AC-2F-A8   (hex)		Humannix Co.,Ltd.
-AC2FA8     (base 16)		Humannix Co.,Ltd.
-				#402, 98-4, Songpa-Dong, Songpa-Gu
-				Seoul    138-170
-				KR
-
-10-64-E2   (hex)		ADFweb.com s.r.l.
-1064E2     (base 16)		ADFweb.com s.r.l.
-				Strada Nuova, 17
-				Mareno di Piave  Treviso  31010
-				IT
-
-CC-34-D7   (hex)		GEWISS S.P.A.
-CC34D7     (base 16)		GEWISS S.P.A.
-				VIA ALESSANDRO VOLTA 1
-				CENATE SOTTO    24069
-				IT
-
-F0-2A-61   (hex)		Waldo Networks, Inc.
-F02A61     (base 16)		Waldo Networks, Inc.
-				4505 Spicewood Springs Rd
-				Austin  Texas  78759
-				US
-
-C8-A7-0A   (hex)		Verizon Business
-C8A70A     (base 16)		Verizon Business
-				One Digex Plaza
-				Beltsville  MD  20705
-				US
-
-60-DA-23   (hex)		Estech Co.,Ltd
-60DA23     (base 16)		Estech Co.,Ltd
-				#717,133-1,Sangdaewon-Dong
-				Seongnam-Si  Gyeonggi-Do  462-120
-				KR
-
-44-DC-CB   (hex)		SEMINDIA SYSTEMS PVT LTD
-44DCCB     (base 16)		SEMINDIA SYSTEMS PVT LTD
-				1006/13, Sy No.49/1&3, 7th Mile, A.M Indl Estate,
-				Bangalore  Karnataka  560068
-				IN
-
-A0-DE-05   (hex)		JSC Irbis-T
-A0DE05     (base 16)		JSC Irbis-T
-				39, Gorodskoy lane
-				Tula    300012
-				RU
-
-08-17-F4   (hex)		IBM Corp
-0817F4     (base 16)		IBM Corp
-				2051 Mission College Blvd
-				Santa Clara  CA  95054
-				US
-
-CC-D8-11   (hex)		Aiconn Technology Corporation
-CCD811     (base 16)		Aiconn Technology Corporation
-				5F, NO. 9, Alley 2, Lane 35, Ji-Hu Rd., Nei-Hu, 
-				Taipei City    11494
-				TW
-
-F4-38-14   (hex)		Shanghai Howell Electronic Co.,Ltd
-F43814     (base 16)		Shanghai Howell Electronic Co.,Ltd
-				5-5/F, Bldg.1, No.788 Fengzhen Rd., 
-				Shanghai     200434
-				CN
-
-90-61-0C   (hex)		Fida International (S) Pte Ltd
-90610C     (base 16)		Fida International (S) Pte Ltd
-				Blk 16, Kallang Place 
-				    339156
-				SG
-
-3C-5F-01   (hex)		Synerchip Co., Ltd.
-3C5F01     (base 16)		Synerchip Co., Ltd.
-				c/o Synerchip USA Corp.
-				Sunnyvale  CA  94085
-				US
-
-EC-BB-AE   (hex)		Digivoice Tecnologia em Eletronica Ltda
-ECBBAE     (base 16)		Digivoice Tecnologia em Eletronica Ltda
-				Alameda Juru, 159 - Torreo
-				Barueri  São Paulo  06455-010
-				BR
-
-34-A1-83   (hex)		AWare, Inc
-34A183     (base 16)		AWare, Inc
-				614 Massachusetts Ave. 
-				Cambridge  MA  02139
-				US
-
-98-73-C4   (hex)		Sage Electronic Engineering LLC
-9873C4     (base 16)		Sage Electronic Engineering LLC
-				201 Terry St.
-				Longmont  CO  80501
-				US
-
-B4-01-42   (hex)		GCI Science & Technology Co.,LTD
-B40142     (base 16)		GCI Science & Technology Co.,LTD
-				No.381,xingangzhong road ,
-				GuangZhou  GuangDong  510310
-				CN
-
-74-0A-BC   (hex)		LightwaveRF Technology Ltd
-740ABC     (base 16)		LightwaveRF Technology Ltd
-				Innovation Campus Birmingham
-				Faraday Wharf, Holt Street  Birmingham  B4 4BB
-				GB
-
-10-A1-3B   (hex)		FUJIKURA RUBBER LTD.
-10A13B     (base 16)		FUJIKURA RUBBER LTD.
-				1-840,Mihashi,Omiya
-				Saitama     330-0856
-				JP
-
-F4-E1-42   (hex)		Delta Elektronika BV
-F4E142     (base 16)		Delta Elektronika BV
-				Vissersdijk 4
-				Zierikzee    4301 ND
-				NL
-
-AC-81-12   (hex)		Gemtek Technology Co., Ltd.
-AC8112     (base 16)		Gemtek Technology Co., Ltd.
-				No. 1 Jen Ai Road Hsinchu Industrial Park Hukou, Hsinchu 30352 TAIWAN, REPUBLIC OF CHINA
-				Hsinchu  TAIWAN  30352
-				TW
-
-68-63-59   (hex)		Advanced Digital Broadcast SA
-686359     (base 16)		Advanced Digital Broadcast SA
-				Avenue de Tournay 7
-				Pregny-Chambesy    1292
-				CH
-
-28-06-1E   (hex)		NINGBO GLOBAL USEFUL ELECTRIC CO.,LTD
-28061E     (base 16)		NINGBO GLOBAL USEFUL ELECTRIC CO.,LTD
-				No.88,Kechuang South Road,
-				Ningbo  Zhejiang  315000
-				CN
-
-64-E8-E6   (hex)		global moisture management system
-64E8E6     (base 16)		global moisture management system
-				11132 broad river road
-				irmo  sc  29063
-				US
-
-E0-D1-0A   (hex)		Katoudenkikougyousyo co ltd
-E0D10A     (base 16)		Katoudenkikougyousyo co ltd
-				oujihontyou1-4-13
-				kita-ku  tokyo-to  114-0022
-				JP
-
-C4-4B-44   (hex)		Omniprint Inc.
-C44B44     (base 16)		Omniprint Inc.
-				1923 East Deere Ave.
-				Santa Ana  CA  92705
-				US
-
-18-92-2C   (hex)		Virtual Instruments
-18922C     (base 16)		Virtual Instruments
-				100 Enterprise Way
-				Scotts Valley  CA  95066
-				US
-
-A4-9B-13   (hex)		Digital Check
-A49B13     (base 16)		Digital Check
-				630 Dundee Rd. Suite 210
-				Northbrook  IL  60062
-				US
-
-C8-EE-08   (hex)		TANGTOP TECHNOLOGY CO.,LTD
-C8EE08     (base 16)		TANGTOP TECHNOLOGY CO.,LTD
-				1F,NO.153,Ligon St.,Beitou District
-				Taipei City     112
-				TW
-
-74-72-F2   (hex)		Chipsip Technology Co., Ltd.
-7472F2     (base 16)		Chipsip Technology Co., Ltd.
-				8F-1, No.186, Jian-Yi Road, ChungHo City,
-				Taipei    235
-				TW
-
-48-C8-B6   (hex)		SysTec GmbH
-48C8B6     (base 16)		SysTec GmbH
-				Ludwig-Erhard-Strasse 6
-				Bergheim-Glessen  NRW  50129
-				DE
-
-3C-62-78   (hex)		SHENZHEN JETNET TECHNOLOGY CO.,LTD.
-3C6278     (base 16)		SHENZHEN JETNET TECHNOLOGY CO.,LTD.
-				Room 403,4th floor,Qinghua Information Building,Keyuan Road,North District of Tech-Park,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-C8-D5-FE   (hex)		Shenzhen Zowee Technology Co., Ltd
-C8D5FE     (base 16)		Shenzhen Zowee Technology Co., Ltd
-				Block 5, Science and Technology Industrial Park of
-				Shenzhen  GuangDong  518055
-				CN
-
-2C-30-68   (hex)		Pantech Co.,Ltd
-2C3068     (base 16)		Pantech Co.,Ltd
-				110-1 Ongjeong-Ri, Tongjin-Eup
-				Gimpo-Si  Gyounggi-Do  415-865
-				KR
-
-00-BD-27   (hex)		Exar Corp.
-00BD27     (base 16)		Exar Corp.
-				48720 Kato Rd.
-				Fremont  CA  94538
-				US
-
-5C-40-58   (hex)		Jefferson Audio Video Systems, Inc.
-5C4058     (base 16)		Jefferson Audio Video Systems, Inc.
-				13020 Middletown Industrial Blvd.
-				Louisville  Kentucky  40223
-				US
-
-58-D0-8F   (hex)		IEEE 1904.1 Working Group
-58D08F     (base 16)		IEEE 1904.1 Working Group
-				1351 Redwood Way,
-				Petaluma  CA  94954
-				US
-
-6C-9C-E9   (hex)		Nimble Storage
-6C9CE9     (base 16)		Nimble Storage
-				2645 Zanker Road
-				San Jose  CA  95134
-				US
-
-CC-09-C8   (hex)		IMAQLIQ LTD
-CC09C8     (base 16)		IMAQLIQ LTD
-				Obvodny Canal 93A
-				St.Petersburg    191119
-				RU
-
-9C-45-63   (hex)		DIMEP Sistemas
-9C4563     (base 16)		DIMEP Sistemas
-				Av. Mofarrej, 840
-				São Paulo    05311000
-				BR
-
-D4-3D-67   (hex)		Carma Industries Inc.
-D43D67     (base 16)		Carma Industries Inc.
-				132 Walsh Road
-				Lindsay  Ontario  K9V 4R3
-				CA
-
-E0-A6-70   (hex)		Nokia Corporation
-E0A670     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-58-DB-8D   (hex)		Fast Co., Ltd.
-58DB8D     (base 16)		Fast Co., Ltd.
-				2-11-1 Iwamotocho
-				Chiyoda-ku  Tokyo  101-0032
-				JP
-
-E4-46-BD   (hex)		C&C TECHNIC TAIWAN CO., LTD.
-E446BD     (base 16)		C&C TECHNIC TAIWAN CO., LTD.
-				ROOM6 13F, NO.2,Jian 8th ROAD
-				Taipei  Chungho City,   23511
-				TW
-
-8C-DD-8D   (hex)		Wifly-City System Inc.
-8CDD8D     (base 16)		Wifly-City System Inc.
-				4F.,-1,NO 106,RUEIGUANG Rd.Neihu District,
-				Taipei City     114
-				TW
-
-20-A2-E7   (hex)		Lee-Dickens Ltd
-20A2E7     (base 16)		Lee-Dickens Ltd
-				Rushton Rd
-				Kettering  Northamptonshire  NN14 2QW
-				GB
-
-FC-ED-B9   (hex)		Arrayent
-FCEDB9     (base 16)		Arrayent
-				570 El Camino Real #150-419
-				Redwood City  CA  94063
-				US
-
-44-ED-57   (hex)		Longicorn, inc.
-44ED57     (base 16)		Longicorn, inc.
-				Rm1001-2, 10F, Byuksan Digital Valley1
-				Seoul    152-775
-				KR
-
-EC-98-C1   (hex)		Beijing Risbo Network Technology Co.,Ltd
-EC98C1     (base 16)		Beijing Risbo Network Technology Co.,Ltd
-				1/F Yinyan Building 2A,No.23 Anningzhuangdonglu Haidian District 
-				Beijing    100085
-				CN
-
-38-A9-5F   (hex)		Actifio Inc
-38A95F     (base 16)		Actifio Inc
-				225 Wyman Street
-				Waltham  MA  02451
-				IN
-
-F4-DC-DA   (hex)		Zhuhai Jiahe Communication Technology Co., limited
-F4DCDA     (base 16)		Zhuhai Jiahe Communication Technology Co., limited
-				4/F,East Of B5,Sourth Software Park,Tangjia,
-				Zhuhai  Guangdong  519085
-				CN
-
-E8-04-62   (hex)		Cisco Systems, Inc
-E80462     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-DC-D0-F7   (hex)		Bentek Systems Ltd.
-DCD0F7     (base 16)		Bentek Systems Ltd.
-				315 - 3750 46th Ave. SE
-				Calgary  AB  T2B 0L1
-				CA
-
-D4-A9-28   (hex)		GreenWave Reality Inc
-D4A928     (base 16)		GreenWave Reality Inc
-				39 Parker
-				Irvine  California  92618
-				US
-
-E0-62-90   (hex)		Jinan Jovision Science & Technology Co., Ltd.
-E06290     (base 16)		Jinan Jovision Science & Technology Co., Ltd.
-				Room 407, Tower C, Cyber Port Building,
-				Jinan  Shandong  250013
-				CN
-
-10-0E-2B   (hex)		NEC CASIO Mobile Communications
-100E2B     (base 16)		NEC CASIO Mobile Communications
-				1753,Shimonumabe
-				Kawasaki-shi  Kanagawa  211-8666
-				JP
-
-70-E1-39   (hex)		3view Ltd
-70E139     (base 16)		3view Ltd
-				168-172 Old Street
-				London    EC1V 9BP
-				GB
-
-18-42-2F   (hex)		Alcatel Lucent
-18422F     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-C4-63-54   (hex)		U-Raku, Inc.
-C46354     (base 16)		U-Raku, Inc.
-				401-1 Deba
-				Ritto-shi  Shiga  520-3041
-				JP
-
-40-5F-BE   (hex)		RIM
-405FBE     (base 16)		RIM
-				295 Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-68-54-F5   (hex)		enLighted Inc
-6854F5     (base 16)		enLighted Inc
-				1451 Grant Rd
-				Mountain View  CA  94040
-				US
-
-7C-B5-42   (hex)		ACES Technology
-7CB542     (base 16)		ACES Technology
-				#928, Hyundai Venture Ville
-				Seoul    135-539
-				KR
-
-90-54-46   (hex)		TES ELECTRONIC SOLUTIONS
-905446     (base 16)		TES ELECTRONIC SOLUTIONS
-				Immeuble Odyssee
-				BRUZ    35170
-				FR
-
-54-4A-05   (hex)		wenglor sensoric gmbh
-544A05     (base 16)		wenglor sensoric gmbh
-				wenglor Str. 3
-				Tettnang    88069
-				DE
-
-98-E1-65   (hex)		Accutome
-98E165     (base 16)		Accutome
-				3222 Phoenixville Pike
-				Malvern  PA  19355
-				US
-
-78-57-12   (hex)		Mobile Integration Workgroup
-785712     (base 16)		Mobile Integration Workgroup
-				4580 Klahanie DR SE STE 106
-				Issaquah  WA  98029
-				US
-
-38-0A-0A   (hex)		Sky-City Communication and Electronics Limited Company
-380A0A     (base 16)		Sky-City Communication and Electronics Limited Company
-				1109, Building A, Kefa Industrial park, Huanguan south road, Guanlan, 
-				Shenzhen  Guangdong  518110
-				CN
-
-0C-D6-96   (hex)		Amimon Ltd
-0CD696     (base 16)		Amimon Ltd
-				2 Maskit st
-				Herzlia    46733
-				IL
-
-F4-DC-4D   (hex)		Beijing CCD Digital Technology Co., Ltd
-F4DC4D     (base 16)		Beijing CCD Digital Technology Co., Ltd
-				107 Dongsi North Street, Dongcheng District, 
-				Beijing    100007
-				CN
-
-40-13-D9   (hex)		Global ES
-4013D9     (base 16)		Global ES
-				Sinimäentie 8 b
-				Espoo    02631
-				FI
-
-AC-4F-FC   (hex)		SVS-VISTEK GmbH
-AC4FFC     (base 16)		SVS-VISTEK GmbH
-				Muehlbachstraße 20
-				Seefeld  BY  82229
-				DE
-
-B4-37-41   (hex)		Consert, Inc.
-B43741     (base 16)		Consert, Inc.
-				4700 Falls of Neuse Rd.
-				Raleigh  NC  27609
-				US
-
-94-85-7A   (hex)		Evantage Industries Corp
-94857A     (base 16)		Evantage Industries Corp
-				815 Bridge St. W.
-				Waterloo  Ontario  N2V 2M7
-				CA
-
-40-83-DE   (hex)		Zebra Technologies Inc
-4083DE     (base 16)		Zebra Technologies Inc
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-88-97-DF   (hex)		Entrypass Corporation Sdn. Bhd.
-8897DF     (base 16)		Entrypass Corporation Sdn. Bhd.
-				No.40, Jalan TPP 1/10,
-				Puchong  Selangor Darul Ehsan  47100
-				MY
-
-24-AF-54   (hex)		NEXGEN Mediatech Inc.
-24AF54     (base 16)		NEXGEN Mediatech Inc.
-				8F No. 150, Jianyi Rd., 
-				Chung Ho  Taipei Hsien  235
-				TW
-
-F0-F8-42   (hex)		KEEBOX, Inc.
-F0F842     (base 16)		KEEBOX, Inc.
-				10 Poppy Trail
-				Rolling Hills  California  90274
-				US
-
-DC-4E-DE   (hex)		SHINYEI TECHNOLOGY CO., LTD.
-DC4EDE     (base 16)		SHINYEI TECHNOLOGY CO., LTD.
-				6-5-2, MINATOJIMA-MINAMIMACHI, CHUO-KU
-				KOBE  HYOGO  650-0047
-				JP
-
-E0-87-B1   (hex)		Nata-Info Ltd.
-E087B1     (base 16)		Nata-Info Ltd.
-				28, Prokhorova str.
-				Yoshkar-Ola  Republic Mari-El  424007
-				RU
-
-44-7C-7F   (hex)		Innolight Technology Corporation
-447C7F     (base 16)		Innolight Technology Corporation
-				3 Results Way
-				Cupertino  CA  95014
-				US
-
-D4-96-DF   (hex)		SUNGJIN C&T CO.,LTD
-D496DF     (base 16)		SUNGJIN C&T CO.,LTD
-				Daeya
-				Sheung  Gyeonggi  429-809
-				KR
-
-5C-86-4A   (hex)		Secret Labs LLC
-5C864A     (base 16)		Secret Labs LLC
-				315 Bleecker St #308
-				New York  NY  10014
-				US
-
-F0-AD-4E   (hex)		Globalscale Technologies, Inc.
-F0AD4E     (base 16)		Globalscale Technologies, Inc.
-				5F, No. 2 Building, Minxing Industrial Park
-				Shenzhen  Guangdong  518109
-				CN
-
-90-3D-5A   (hex)		Shenzhen Wision Technology Holding Limited
-903D5A     (base 16)		Shenzhen Wision Technology Holding Limited
-				Room 26A, Jinrun Building, N0.6019, Shennan Rd., Futian District
-				Shenzhen  Guangdong  518040
-				CN
-
-7C-A2-9B   (hex)		D.SignT GmbH & Co. KG
-7CA29B     (base 16)		D.SignT GmbH & Co. KG
-				Marktstraße 10
-				Kerken    47647
-				DE
-
-A0-40-41   (hex)		SAMWONFA Co.,Ltd.
-A04041     (base 16)		SAMWONFA Co.,Ltd.
-				470-5, Moonhyun2-Dong
-				Busan    608-042
-				KR
-
-6C-22-AB   (hex)		Ainsworth Game Technology
-6C22AB     (base 16)		Ainsworth Game Technology
-				10 Holker Street 
-				Newington  New South Wales  2127
-				AU
-
-30-18-CF   (hex)		DEOS control systems GmbH
-3018CF     (base 16)		DEOS control systems GmbH
-				Birkenallee 113
-				Rheine  NRW  48432
-				DE
-
-08-FA-E0   (hex)		Fohhn Audio AG
-08FAE0     (base 16)		Fohhn Audio AG
-				Hohes Gestade 3-7
-				Nuertingen  BW  72622
-				DE
-
-58-B9-E1   (hex)		Crystalfontz America, Inc.
-58B9E1     (base 16)		Crystalfontz America, Inc.
-				12412 E. Saltese Ave.
-				Spokane Valley  WA  99216
-				US
-
-20-D9-06   (hex)		Iota, Inc.
-20D906     (base 16)		Iota, Inc.
-				2212 Queen Anne Ave. N., #348
-				Seattle  WA  98109
-				US
-
-F4-55-95   (hex)		HENGBAO Corporation LTD.
-F45595     (base 16)		HENGBAO Corporation LTD.
-				8th Floor,Tower B,Xinsheng Mansion No.5 Financial Street,
-				Beijing    100140
-				CN
-
-1C-3A-4F   (hex)		AccuSpec Electronics, LLC
-1C3A4F     (base 16)		AccuSpec Electronics, LLC
-				8140 Hawthorne Drive
-				Erie  Pennsylvania  16509
-				US
-
-9C-4E-20   (hex)		Cisco Systems, Inc
-9C4E20     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D8-75-33   (hex)		Nokia Corporation
-D87533     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-98-35-B8   (hex)		Assembled Products Corporation
-9835B8     (base 16)		Assembled Products Corporation
-				115 E. Linden
-				Rogers  Arkansas  72756
-				US
-
-28-89-15   (hex)		CashGuard Sverige AB
-288915     (base 16)		CashGuard Sverige AB
-				Finlandsgatan 16
-				Kista    16474
-				SE
-
-4C-5D-CD   (hex)		Oy Finnish Electric Vehicle Technologies Ltd
-4C5DCD     (base 16)		Oy Finnish Electric Vehicle Technologies Ltd
-				Majavantie 10
-				TUUSULA    FI-04320
-				FI
-
-70-D5-7E   (hex)		Scalar Corporation
-70D57E     (base 16)		Scalar Corporation
-				1F San-Ei Bldg
-				Shinjuku-ku  Tokyo  160-0023
-				JP
-
-B0-E3-9D   (hex)		CAT SYSTEM CO.,LTD.
-B0E39D     (base 16)		CAT SYSTEM CO.,LTD.
-				3-147-27 Higasi-sinmachi Hirohata-ku
-				Himeji  Hyogo  671-1121
-				JP
-
-7C-2E-0D   (hex)		Blackmagic Design
-7C2E0D     (base 16)		Blackmagic Design
-				11 Gateway Court
-				Melbourne  Victoria  3207
-				AU
-
-18-0C-77   (hex)		Westinghouse Electric Company, LLC
-180C77     (base 16)		Westinghouse Electric Company, LLC
-				1000 Westinghouse Drive
-				Cranberry Township  PA  16066
-				US
-
-68-CA-00   (hex)		Octopus Systems Limited
-68CA00     (base 16)		Octopus Systems Limited
-				36/F, 148 Electric Road
-				    
-				HK
-
-E0-58-9E   (hex)		Laerdal Medical
-E0589E     (base 16)		Laerdal Medical
-				Tanke Svilandsgate 30
-				Stavanger    4002
-				NO
-
-0C-1D-C2   (hex)		SeAH Networks
-0C1DC2     (base 16)		SeAH Networks
-				9F, IT Venture Tower East Wing 78 Garak-Dong,
-				Seoul  Songpa-gu  138-950
-				KR
-
-54-75-D0   (hex)		Cisco Systems, Inc
-5475D0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-60-89-B7   (hex)		KAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ
-6089B7     (base 16)		KAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ
-				Atatürk Mah. 78 sokak ,No:10, Büyükalan Mevkii
-				Izmir  Aegean  35175
-				TR
-
-30-52-5A   (hex)		NST Co., LTD
-30525A     (base 16)		NST Co., LTD
-				RM301,Daeryung Techno Town 2, 569-21
-				Seoul    153-771
-				KR
-
-2C-A7-80   (hex)		True Technologies Inc.
-2CA780     (base 16)		True Technologies Inc.
-				R476, AngelCity 1st,
-				Seongnam,  Kyungki  463-862
-				KR
-
-7C-6F-06   (hex)		Caterpillar Trimble Control Technologies
-7C6F06     (base 16)		Caterpillar Trimble Control Technologies
-				5475 Kellenburger Rd.
-				Dayton  OH  45424
-				US
-
-60-12-83   (hex)		TSB REAL TIME LOCATION SYSTEMS S.L.
-601283     (base 16)		TSB REAL TIME LOCATION SYSTEMS S.L.
-				Ronda Auguste y Louis Lumière 23, Nave 13
-				Parque Tecnológico de Valencia   Paterna (Valencia)  46980
-				ES
-
-98-DC-D9   (hex)		UNITEC Co., Ltd.
-98DCD9     (base 16)		UNITEC Co., Ltd.
-				1-2-1-Shinyokohama
-				Yokohama-shi  Kanagawa  222-0033
-				JP
-
-C0-CF-A3   (hex)		Creative Electronics & Software, Inc.
-C0CFA3     (base 16)		Creative Electronics & Software, Inc.
-				650 Sundown Road
-				South Elgin  IL  60177
-				US
-
-94-23-6E   (hex)		Shenzhen Junlan Electronic Ltd
-94236E     (base 16)		Shenzhen Junlan Electronic Ltd
-				Block C,No.2 Industrial District, Fuyuan, Tangwei,Fuyong, Bao'an
-				Shenzhen  Guangdong  518103
-				CN
-
-10-E6-AE   (hex)		Source Technologies, LLC
-10E6AE     (base 16)		Source Technologies, LLC
-				2910 Whitehall Park Drive
-				Charlotte  NC  28273
-				US
-
-FC-E1-92   (hex)		Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd
-FCE192     (base 16)		Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd
-				No.28,Xinchuang Rd.,West Gaoxin District
-				Chengdu  Sichuan  611731
-				CN
-
-40-8A-9A   (hex)		TITENG CO., Ltd.
-408A9A     (base 16)		TITENG CO., Ltd.
-				7Fl. Shindo B/D 10 Garak-dong
-				Seoul    138-160
-				KR
-
-F4-45-ED   (hex)		Portable Innovation Technology Ltd.
-F445ED     (base 16)		Portable Innovation Technology Ltd.
-				601-602, 6/F Park Building,
-				Kowloon    
-				HK
-
-5C-E2-86   (hex)		Nortel Networks
-5CE286     (base 16)		Nortel Networks
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-8C-64-0B   (hex)		Beyond Devices d.o.o.
-8C640B     (base 16)		Beyond Devices d.o.o.
-				Trzaska cesta 515
-				Brezovica pri Ljubljani    SI-1351
-				SI
-
-94-9C-55   (hex)		Alta Data Technologies
-949C55     (base 16)		Alta Data Technologies
-				4901 Rockaway Blvd, Building A
-				Rio Rancho  NM  87124
-				US
-
-D4-79-C3   (hex)		Cameronet GmbH & Co. KG
-D479C3     (base 16)		Cameronet GmbH & Co. KG
-				Elberfelder Strasse 96
-				Remscheid  NRW  42853
-				DE
-
-70-D5-E7   (hex)		Wellcore Corporation
-70D5E7     (base 16)		Wellcore Corporation
-				2870 Zanker Road
-				San Jose  CA  95134
-				US
-
-3C-F7-2A   (hex)		Nokia Corporation
-3CF72A     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-54-5F-A9   (hex)		Teracom Limited
-545FA9     (base 16)		Teracom Limited
-				B-84, Sector - 60,
-				Noida  Uttar Pradesh  201 301
-				IN
-
-6C-32-DE   (hex)		Indieon Technologies Pvt. Ltd.
-6C32DE     (base 16)		Indieon Technologies Pvt. Ltd.
-				601, Alpha 2, Gigaspace IT Park
-				Pune   Maharastra  411014
-				IN
-
-14-A6-2C   (hex)		S.M. Dezac S.A.
-14A62C     (base 16)		S.M. Dezac S.A.
-				Vial Sant jordi S/N
-				Viladecavalls  Barcelona  08232
-				ES
-
-54-7F-EE   (hex)		Cisco Systems, Inc
-547FEE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-AC-EA-6A   (hex)		GENIX INFOCOMM CO., LTD.
-ACEA6A     (base 16)		GENIX INFOCOMM CO., LTD.
-				2F, Daebo Bldg. #1009-34
-				Seoul    153-829
-				KR
-
-E0-BC-43   (hex)		C2 Microsystems, Inc.
-E0BC43     (base 16)		C2 Microsystems, Inc.
-				2833 Junction Avenue
-				San Jose  California  95134
-				US
-
-2C-A8-35   (hex)		RIM
-2CA835     (base 16)		RIM
-				295 Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-C4-1E-CE   (hex)		HMI Sources Ltd.
-C41ECE     (base 16)		HMI Sources Ltd.
-				5 Floor, Suite 2, 233 Hsin Yi Road, Section 4
-				Taipei    10681
-				TW
-
-A8-F4-70   (hex)		Fujian Newland Communication Science Technologies Co.,Ltd.
-A8F470     (base 16)		Fujian Newland Communication Science Technologies Co.,Ltd.
-				Newland Science & Technology Park No.1 Rujiang West Rd., Mawei, 
-				Fuzhou  Fujian  350015
-				CN
-
-8C-73-6E   (hex)		FUJITSU LIMITED
-8C736E     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-B8-64-91   (hex)		CK Telecom Ltd
-B86491     (base 16)		CK Telecom Ltd
-				Keji Avenue,Heyuan Hi-tech Development Zone
-				Heyuan   Guangdong Province  517000
-				CN
-
-50-F0-03   (hex)		Open Stack, Inc.
-50F003     (base 16)		Open Stack, Inc.
-				Advanced Research Center #411
-				Bun-Dang, Seong-Nam  Gyung-Gi  463-816
-				KR
-
-DC-49-C9   (hex)		CASCO SIGNAL LTD
-DC49C9     (base 16)		CASCO SIGNAL LTD
-				No.489 Xizang Bei Road
-				Shanghai    200071
-				CN
-
-70-D8-80   (hex)		Upos System sp. z o.o.
-70D880     (base 16)		Upos System sp. z o.o.
-				Sienkiewicza 13
-				Knurow  Slaskie  44-190
-				PL
-
-A0-5D-C1   (hex)		TMCT Co., LTD.
-A05DC1     (base 16)		TMCT Co., LTD.
-				5F-561, #19-11 SanChong Rd.
-				Taipei    115
-				TW
-
-58-3C-C6   (hex)		Omneality Ltd.
-583CC6     (base 16)		Omneality Ltd.
-				10B Glossop Road
-				South Croydon  Surrey  CR2 0PU
-				GB
-
-B0-C8-AD   (hex)		People Power Company
-B0C8AD     (base 16)		People Power Company
-				620 Lowell Ave
-				Palo Alto  CA  94301
-				US
-
-18-17-14   (hex)		DAEWOOIS
-181714     (base 16)		DAEWOOIS
-				7F Namkwang Centlex Bldg. 440-4 Cheongcheon2-dong 
-				Incheon  Pupyeong-gu  82
-				KR
-
-F0-EC-39   (hex)		Essec
-F0EC39     (base 16)		Essec
-				Schoebroekstraat 48
-				Paal  Limburg  3583
-				BE
-
-44-6C-24   (hex)		Reallin Electronic Co.,Ltd
-446C24     (base 16)		Reallin Electronic Co.,Ltd
-				2/F, Building 3, No.202 Zhengzhong Rd, XiHu industry Park
-				Hang Zhou  Zhe Jiang  310030
-				CN
-
-20-46-F9   (hex)		Advanced Network Devices (dba:AND)
-2046F9     (base 16)		Advanced Network Devices (dba:AND)
-				3820 Ventura Drive
-				Arlington Heights  IL  60004
-				US
-
-48-71-19   (hex)		SGB GROUP LTD.
-487119     (base 16)		SGB GROUP LTD.
-				13F,No.192,Sec.2,Chung Hsin Rd.,Hsin Tien City
-				Taipei     231
-				TW
-
-04-FE-7F   (hex)		Cisco Systems, Inc
-04FE7F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-B1-EE   (hex)		H. ZANDER GmbH & Co. KG
-A4B1EE     (base 16)		H. ZANDER GmbH & Co. KG
-				Am Gut Wolf 15
-				Aachen    52070
-				DE
-
-84-21-41   (hex)		Shenzhen Ginwave Technologies Ltd.
-842141     (base 16)		Shenzhen Ginwave Technologies Ltd.
-				4/F,R2-A,High-Tech Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-A0-23-1B   (hex)		TeleComp R&D Corp.
-A0231B     (base 16)		TeleComp R&D Corp.
-				102 SW Orange Blossom
-				Lake City  Florida  32025
-				US
-
-B8-A3-E0   (hex)		BenRui Technology Co.,Ltd
-B8A3E0     (base 16)		BenRui Technology Co.,Ltd
-				No.3A room A Unit Hongsong Building 
-				ShenZhen  GuangDong  518000
-				CN
-
-3C-F5-2C   (hex)		DSPECIALISTS GmbH
-3CF52C     (base 16)		DSPECIALISTS GmbH
-				Helmholtzstr. 2-9 L
-				Berlin    10587
-				DE
-
-EC-44-76   (hex)		Cisco Systems, Inc
-EC4476     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-18-11   (hex)		Decatur Electronics
-6C1811     (base 16)		Decatur Electronics
-				715 Bright Street
-				Decatur  IL  62522
-				US
-
-F8-E9-68   (hex)		Egker Kft.
-F8E968     (base 16)		Egker Kft.
-				Szuglo u. 49.
-				Budapest    1145
-				HU
-
-A8-99-5C   (hex)		aizo ag
-A8995C     (base 16)		aizo ag
-				Brandstrasse 33
-				Schlieren    8952
-				CH
-
-40-12-E4   (hex)		Compass-EOS
-4012E4     (base 16)		Compass-EOS
-				7 Giborei Israel
-				Natanya    42504
-				IL
-
-54-03-F5   (hex)		EBN Technology Corp.
-5403F5     (base 16)		EBN Technology Corp.
-				10F, No.90, Sec. 1, Sintai 5th Rd.
-				Sijhih City  Taipei County  22102
-				US
-
-04-C0-5B   (hex)		Tigo Energy
-04C05B     (base 16)		Tigo Energy
-				170 Knowles Dr
-				Los Gatos  CA  95032
-				US
-
-80-38-FD   (hex)		LeapFrog Enterprises, Inc.
-8038FD     (base 16)		LeapFrog Enterprises, Inc.
-				6401 Holis Street
-				Emeryville  CA  94608
-				US
-
-AC-BE-B6   (hex)		Visualedge Technology Co., Ltd.
-ACBEB6     (base 16)		Visualedge Technology Co., Ltd.
-				13FL.-1 No. 716, Zhongzheng Road, Zhonghe City,
-				Taipei County,     23511
-				TW
-
-2C-91-27   (hex)		Eintechno Corporation
-2C9127     (base 16)		Eintechno Corporation
-				3359-1, kako, Inami-cho
-				kako-gun  hyogo  675-1105
-				JP
-
-AC-58-3B   (hex)		Human Assembler, Inc.
-AC583B     (base 16)		Human Assembler, Inc.
-				2-1-11-6F
-				Shibuya-ku  Tokyo  150-0002
-				JP
-
-E8-E7-76   (hex)		Shenzhen Kootion Technology Co., Ltd
-E8E776     (base 16)		Shenzhen Kootion Technology Co., Ltd
-				3/F, Building #4, XinJianXing Industrial Park
-				Shenzhen  Guangdong Province  518108
-				CN
-
-68-1F-D8   (hex)		Siemens Industry, Inc.
-681FD8     (base 16)		Siemens Industry, Inc.
-				10670 Treena Street
-				San Diego  CA  92131
-				US
-
-40-01-C6   (hex)		3COM EUROPE LTD
-4001C6     (base 16)		3COM EUROPE LTD
-				Peoplebuilding 2
-				Hemel Hempstead  HERTS.  HP2 4NW
-				GB
-
-9C-5E-73   (hex)		Calibre UK LTD
-9C5E73     (base 16)		Calibre UK LTD
-				Cornwall House
-				Bradford  West Yorkshire  BD8 7JS
-				GB
-
-5C-14-37   (hex)		Thyssenkrupp Aufzugswerke GmbH
-5C1437     (base 16)		Thyssenkrupp Aufzugswerke GmbH
-				Bernhaeuser Str.45
-				Neuhausen a.d.F    73765
-				DE
-
-9C-55-B4   (hex)		I.S.E. S.r.l.
-9C55B4     (base 16)		I.S.E. S.r.l.
-				Via della Canapiglia 5
-				Migliarino Pisano  PISA  56010
-				IT
-
-70-2F-97   (hex)		Aava Mobile Oy
-702F97     (base 16)		Aava Mobile Oy
-				Nahkatehtaankatu 2
-				Oulu    90100
-				FI
-
-10-CA-81   (hex)		PRECIA
-10CA81     (base 16)		PRECIA
-				Le ruissol VEYRAS
-				PRIVAS    07001
-				FR
-
-40-A6-A4   (hex)		PassivSystems Ltd
-40A6A4     (base 16)		PassivSystems Ltd
-				Medway House
-				Newbury  Berks  RG14 2PZ
-				GB
-
-94-BA-31   (hex)		Visiontec da Amazônia Ltda.
-94BA31     (base 16)		Visiontec da Amazônia Ltda.
-				Rod. Geraldo Scavone, 2300 - Galpao 27
-				Jacareí  SP  12305-490
-				BR
-
-B8-94-D2   (hex)		Retail Innovation HTT AB
-B894D2     (base 16)		Retail Innovation HTT AB
-				Sjöängsvägen 2
-				Sollentuna    S-192 72
-				SE
-
-B0-E9-7E   (hex)		Advanced Micro Peripherals
-B0E97E     (base 16)		Advanced Micro Peripherals
-				Unit 1 Harrier House
-				Witchford  Cambridgeshire  CB6 2HY
-				GB
-
-F0-C2-4C   (hex)		Zhejiang FeiYue Digital Technology Co., Ltd
-F0C24C     (base 16)		Zhejiang FeiYue Digital Technology Co., Ltd
-				Baoting Industrial Park, 531 Jiaogong Road
-				 Hangzhou City  Zhejiang Province  310012
-				CN
-
-E4-75-1E   (hex)		Getinge Sterilization AB
-E4751E     (base 16)		Getinge Sterilization AB
-				Box 69
-				Getinge    31044
-				SE
-
-9C-5B-96   (hex)		NMR Corporation
-9C5B96     (base 16)		NMR Corporation
-				3F Esprit Build.,1-3-6 Nishi-Nippori
-				Arakawa-Ku  Tokyo  116-0013
-				JP
-
-60-F1-3D   (hex)		JABLOCOM s.r.o.
-60F13D     (base 16)		JABLOCOM s.r.o.
-				V Nivach 12
-				Jablonec nad Nisou    466 01
-				CZ
-
-50-25-2B   (hex)		Nethra Imaging Incorporated
-50252B     (base 16)		Nethra Imaging Incorporated
-				2855 Bowers Ave
-				Santa Clara  CA  95051
-				US
-
-F8-81-1A   (hex)		OVERKIZ
-F8811A     (base 16)		OVERKIZ
-				EUROPA 3
-				Archamps    74160
-				FR
-
-38-63-F6   (hex)		3NOD MULTIMEDIA(SHENZHEN)CO.,LTD
-3863F6     (base 16)		3NOD MULTIMEDIA(SHENZHEN)CO.,LTD
-				F6,Building11,Shenzhen Software Park
-				Shenzhen  Guangdong  518057
-				CN
-
-78-B8-1A   (hex)		INTER SALES A/S
-78B81A     (base 16)		INTER SALES A/S
-				Stavneagervej 22
-				Egaa    8250
-				DK
-
-CC-00-80   (hex)		BETTINI SRL
-CC0080     (base 16)		BETTINI SRL
-				VIA CESARE BATTISTI 22
-				CESANO MADERNO  MILAN  20031
-				IT
-
-64-4B-C3   (hex)		Shanghai WOASiS Telecommunications Ltd., Co.
-644BC3     (base 16)		Shanghai WOASiS Telecommunications Ltd., Co.
-				15F, Software Building,
-				Shanghai    200233
-				CN
-
-94-2E-63   (hex)		Finsécur
-942E63     (base 16)		Finsécur
-				52 rue Paul Lescop
-				Nanterre    92000
-				FR
-
-AC-83-17   (hex)		Shenzhen Furtunetel Communication Co., Ltd
-AC8317     (base 16)		Shenzhen Furtunetel Communication Co., Ltd
-				F19 building A zhongke plaza Nan yi street high-tech zone, Nanshan District, 
-				Shenzhen  Guangdong  518057
-				CN
-
-AC-D1-80   (hex)		Crexendo Business Solutions, Inc.
-ACD180     (base 16)		Crexendo Business Solutions, Inc.
-				10201 S. 5st  St.
-				Phoenix  AZ  85044
-				US
-
-CC-CC-4E   (hex)		Sun Fountainhead USA. Corp 
-CCCC4E     (base 16)		Sun Fountainhead USA. Corp 
-				801 S. Garfiled AVE # 236 
-				Los Angeles   California   91801
-				US
-
-68-85-40   (hex)		IGI Mobile, Inc.
-688540     (base 16)		IGI Mobile, Inc.
-				4F Kyongnam Bldg.,
-				Seoul    135-080
-				KR
-
-A0-9A-5A   (hex)		Time Domain
-A09A5A     (base 16)		Time Domain
-				330 Wynn Drive
-				Huntsville  AL  35805
-				US
-
-64-A8-37   (hex)		Juni Korea Co., Ltd
-64A837     (base 16)		Juni Korea Co., Ltd
-				E603 Bundang Techno-Park 151
-				Seongnam  Gyeonggi  463-760
-				KR
-
-20-2C-B7   (hex)		Kong Yue Electronics & Information Industry (Xinhui) Ltd.
-202CB7     (base 16)		Kong Yue Electronics & Information Industry (Xinhui) Ltd.
-				Kong Yue Industrial Park, 18 Kongyue Road, Jinguzhou
-				Jiangmen  Guangdong  529141
-				CN
-
-60-9F-9D   (hex)		CloudSwitch
-609F9D     (base 16)		CloudSwitch
-				200 Wheeler Rd
-				Burlington  MA  01803
-				US
-
-48-34-3D   (hex)		IEP GmbH
-48343D     (base 16)		IEP GmbH
-				Am Pferdemarkt 9c
-				Langenhagen  Niedersachsen  30853
-				DE
-
-D4-AA-FF   (hex)		MICRO WORLD 
-D4AAFF     (base 16)		MICRO WORLD 
-				19370 VAN NESS AVE 
-				TORRANCE   CA  90501
-				US
-
-74-E5-37   (hex)		RADSPIN
-74E537     (base 16)		RADSPIN
-				Songpa-gu Garak-dong 78
-				Seoul    138-950
-				KR
-
-00-26-E9   (hex)		SP Corp
-0026E9     (base 16)		SP Corp
-				Guro 3-dong ,Guro-gu
-				Seoul    152-780
-				KR
-
-00-26-EB   (hex)		Advanced Spectrum Technology Co., Ltd.
-0026EB     (base 16)		Advanced Spectrum Technology Co., Ltd.
-				1F., No.67 Jhongjheng Rd.
-				Sinjhuang  Taiwan  242
-				TW
-
-00-26-E1   (hex)		Stanford University, OpenFlow Group
-0026E1     (base 16)		Stanford University, OpenFlow Group
-				353 Serra Mall
-				Stanford  CA  94305-9030
-				US
-
-00-27-17   (hex)		CE Digital(Zhenjiang)Co.,Ltd
-002717     (base 16)		CE Digital(Zhenjiang)Co.,Ltd
-				Wei 3 Road, Dingmao, Eco.Dev.Zone,
-				Zhenjiang    212009
-				CN
-
-00-27-16   (hex)		Adachi-Syokai Co., Ltd.
-002716     (base 16)		Adachi-Syokai Co., Ltd.
-				228-2 Hazama Maki
-				Fukuchiyama-shi  Kyoto  620-0913
-				JP
-
-00-26-DC   (hex)		Optical Systems Design
-0026DC     (base 16)		Optical Systems Design
-				7/1 Vuko Place
-				Warriewood  NSW  2102
-				AU
-
-00-27-00   (hex)		Shenzhen Siglent Technology Co., Ltd.
-002700     (base 16)		Shenzhen Siglent Technology Co., Ltd.
-				BUILDING A8,TANGLANG INDUSTRIAL ZONE,XILI,NANSHAN
-				Shenzhen  Guangdong  518000
-				CN
-
-00-26-EC   (hex)		Legrand Home Systems, Inc
-0026EC     (base 16)		Legrand Home Systems, Inc
-				301 Fulling Mill Rd
-				Middletown  PA  17057
-				US
-
-00-26-D4   (hex)		IRCA SpA
-0026D4     (base 16)		IRCA SpA
-				Viale Venezia 31 - C.P. 248
-				San Vendemiano (Treviso)  Italy  31020
-				IT
-
-00-26-63   (hex)		Shenzhen Huitaiwei Tech. Ltd, co.
-002663     (base 16)		Shenzhen Huitaiwei Tech. Ltd, co.
-				JianDa Building,501-502
-				Shenzhen  Guangdong  518000
-				CN
-
-00-26-61   (hex)		Irumtek Co., Ltd.
-002661     (base 16)		Irumtek Co., Ltd.
-				Apt 708  513-22 Joongil Eines Platz
-				Seongnam-City  Gyunggi-do  462-120
-				KR
-
-00-26-5B   (hex)		Hitron Technologies. Inc
-00265B     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-00-26-56   (hex)		Sansonic Electronics USA
-002656     (base 16)		Sansonic Electronics USA
-				9950 Baldwin Place
-				El Monte  Cailfornia  91731
-				US
-
-00-26-7D   (hex)		A-Max Technology Macao Commercial Offshore Company Limited
-00267D     (base 16)		A-Max Technology Macao Commercial Offshore Company Limited
-				Avenida Da Praia Grande No. 409
-				Macau    
-				CN
-
-00-26-7C   (hex)		Metz-Werke GmbH & Co KG
-00267C     (base 16)		Metz-Werke GmbH & Co KG
-				Ohmstrasse 55
-				Zirndorf    90513
-				DE
-
-00-26-73   (hex)		RICOH COMPANY,LTD.
-002673     (base 16)		RICOH COMPANY,LTD.
-				810 Shimoimaizumi
-				Ebina-City  Kanagawa-Pref  243-0460
-				JP
-
-00-26-6D   (hex)		MobileAccess Networks
-00266D     (base 16)		MobileAccess Networks
-				8391 Old Courthouse Rd.
-				Vienna  VA  22182
-				US
-
-00-26-C0   (hex)		EnergyHub
-0026C0     (base 16)		EnergyHub
-				232 3rd St C201
-				Brooklyn  NY  11215
-				US
-
-00-26-C1   (hex)		ARTRAY CO., LTD.
-0026C1     (base 16)		ARTRAY CO., LTD.
-				5F Ueno Bldg, 1-17-5 Kouenjikita,
-				Tokyo    166-0002
-				JP
-
-00-26-BE   (hex)		Schoonderbeek Elektronica Systemen B.V.
-0026BE     (base 16)		Schoonderbeek Elektronica Systemen B.V.
-				Roggestraat 3-5
-				Nieuw Vennep  Noord Holland  2153GC
-				NL
-
-00-26-B5   (hex)		ICOMM Tele Ltd
-0026B5     (base 16)		ICOMM Tele Ltd
-				304, Trendset Towers,
-				Hyderabad  AP  500034
-				IN
-
-00-26-8C   (hex)		StarLeaf Ltd.
-00268C     (base 16)		StarLeaf Ltd.
-				Chaston House, Mill Court
-				Cambridge    CB22 5LD
-				GB
-
-00-26-8B   (hex)		Guangzhou Escene Computer Technology Limited
-00268B     (base 16)		Guangzhou Escene Computer Technology Limited
-				Room 209, No.54-56 Yuehe Building, Huacui Street, Tianhe Industrial Park
-				Guangzhou  Guangdong Province  510065
-				CN
-
-00-26-6F   (hex)		Coordiwise Technology Corp.
-00266F     (base 16)		Coordiwise Technology Corp.
-				2F., No.123, Sec. 1, Lioujia 5th Rd.
-				Jhubei City, Hsinchu County    30272
-				TW
-
-00-26-6E   (hex)		Nissho-denki Co.,LTD.
-00266E     (base 16)		Nissho-denki Co.,LTD.
-				3-7-6,chidori
-				ohta  Tokyo  146-0083
-				JP
-
-00-26-C3   (hex)		Insightek Corp.
-0026C3     (base 16)		Insightek Corp.
-				5F,NO.755,Chung Cheng Rd.,
-				Chung Ho City  Taipei Hsien  235
-				TW
-
-00-26-81   (hex)		Interspiro AB
-002681     (base 16)		Interspiro AB
-				Box 2853
-				Täby    18728
-				SE
-
-00-26-83   (hex)		Ajoho Enterprise Co., Ltd.
-002683     (base 16)		Ajoho Enterprise Co., Ltd.
-				7F., No.101, Ruihu St.
-				Taipei    114
-				TW
-
-00-26-7F   (hex)		Zenterio AB
-00267F     (base 16)		Zenterio AB
-				Diskettgatan 11B
-				Linköping    58335
-				SE
-
-00-26-98   (hex)		Cisco Systems, Inc
-002698     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-26-9B   (hex)		SOKRAT Ltd.
-00269B     (base 16)		SOKRAT Ltd.
-				Volkonskogo 2
-				Irkutsk    664007
-				RU
-
-00-26-A1   (hex)		Megger
-0026A1     (base 16)		Megger
-				4271 Bronze Way
-				Dallas  Texas  75237
-				US
-
-00-26-44   (hex)		Thomson Telecom Belgium
-002644     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				Edegem  Antwerp  B-2650
-				BE
-
-00-26-46   (hex)		SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED
-002646     (base 16)		SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED
-				No.10 Ping Nan East Road
-				Shenyang  Liao Ning  110014
-				CN
-
-00-26-3F   (hex)		LIOS Technology GmbH
-00263F     (base 16)		LIOS Technology GmbH
-				Schanzenstraße 39
-				Köln  Germany  D-51063
-				DE
-
-00-26-3B   (hex)		Onbnetech
-00263B     (base 16)		Onbnetech
-				506, Samsung IT Valley, 197-5
-				Guro-Gu  Seoul  152-848
-				KR
-
-00-26-58   (hex)		T-Platforms (Cyprus) Limited
-002658     (base 16)		T-Platforms (Cyprus) Limited
-				Themistokli Dervi 3, Julia House
-				Nicosia    P.C.-1066
-				CY
-
-00-26-4C   (hex)		Shanghai DigiVision Technology Co., Ltd.
-00264C     (base 16)		Shanghai DigiVision Technology Co., Ltd.
-				No. 333 Guangji Rd.
-				Shanghai    200083
-				CN
-
-00-26-2F   (hex)		HAMAMATSU TOA ELECTRONICS
-00262F     (base 16)		HAMAMATSU TOA ELECTRONICS
-				9162-1
-				HAMAMATSU  SIZUOKA  431-2102
-				JP
-
-00-26-31   (hex)		COMMTACT LTD
-002631     (base 16)		COMMTACT LTD
-				Nahal Snir 10
-				Yazne    81101
-				IL
-
-00-25-FB   (hex)		Tunstall Healthcare A/S
-0025FB     (base 16)		Tunstall Healthcare A/S
-				Stroemmen 6
-				Noerresundby    9400
-				DK
-
-00-25-F4   (hex)		KoCo Connector AG
-0025F4     (base 16)		KoCo Connector AG
-				Marienstraße 12
-				Berlin    10117
-				DE
-
-00-26-06   (hex)		RAUMFELD GmbH
-002606     (base 16)		RAUMFELD GmbH
-				Reichenberger Str. 124
-				Berlin    10999
-				DE
-
-00-26-07   (hex)		Enabling Technology Pty Ltd
-002607     (base 16)		Enabling Technology Pty Ltd
-				23/44 Kings Park Road
-				West Perth  Western Australia  6005
-				AU
-
-00-26-24   (hex)		Thomson Inc.
-002624     (base 16)		Thomson Inc.
-				101 West 103rd Street
-				Indianapolis  IN  46290
-				US
-
-00-26-05   (hex)		CC Systems AB
-002605     (base 16)		CC Systems AB
-				Box 83
-				Alfta    822 22
-				SE
-
-00-26-02   (hex)		SMART Temps LLC
-002602     (base 16)		SMART Temps LLC
-				435 PARK PL CIRCLE SUITE 100
-				Mishawaka  IN  46545
-				US
-
-00-26-1A   (hex)		Femtocomm System Technology Corp.
-00261A     (base 16)		Femtocomm System Technology Corp.
-				2F.-2,No.28, Taiyuan St.,
-				Jhubei City,  Hsinchu Country,  30288
-				TW
-
-00-26-34   (hex)		Infineta Systems, Inc
-002634     (base 16)		Infineta Systems, Inc
-				2870 Zanker Rd
-				San Jose  CA  95134
-				US
-
-00-25-99   (hex)		Hedon e.d. B.V.
-002599     (base 16)		Hedon e.d. B.V.
-				Elektronicaweg 15
-				Delft  Zuid Holland  2628 XG
-				NL
-
-00-25-97   (hex)		Kalki Communication Technologies
-002597     (base 16)		Kalki Communication Technologies
-				4th Floor, Survey. No. 17/1, Outer Ring Road
-				Opp. Prestige Cessna Park  Bangalore   560 103
-				IN
-
-00-25-92   (hex)		Guangzhou Shirui Electronic Co., Ltd
-002592     (base 16)		Guangzhou Shirui Electronic Co., Ltd
-				301D, No.9, Caipin Road,
-				Guangzhou  Guangdong  510663
-				CN
-
-00-25-94   (hex)		Eurodesign BG LTD
-002594     (base 16)		Eurodesign BG LTD
-				Business Park Sofia, Building 4, Floor 2
-				Sofia    1113
-				BG
-
-00-25-9F   (hex)		TechnoDigital Technologies GmbH
-00259F     (base 16)		TechnoDigital Technologies GmbH
-				Haesslerstraße 8
-				Erfurt  Thuringia  99096
-				DE
-
-00-25-9D   (hex)		Private
-00259D     (base 16)		Private
-
-00-25-98   (hex)		Zhong Shan City Litai Electronic Industrial Co. Ltd
-002598     (base 16)		Zhong Shan City Litai Electronic Industrial Co. Ltd
-				No.3 Industrial District, Wuguishan, Cheng gui Road
-				Zhong shan City  Guang dong Province  528458
-				CN
-
-00-25-E3   (hex)		Hanshinit Inc.
-0025E3     (base 16)		Hanshinit Inc.
-				Dong-Won Bld 3F, 395-13, Gal-Ma 2, Seo-Gu
-				Daejeon    302-809
-				KR
-
-00-25-D4   (hex)		General Dynamics Mission Systems
-0025D4     (base 16)		General Dynamics Mission Systems
-				150 Rustcraft Road
-				Dedham  MA  02026
-				US
-
-00-25-C2   (hex)		RingBell Co.,Ltd.
-0025C2     (base 16)		RingBell Co.,Ltd.
-				10586 KingGeorge Hwy
-				Surrey  B.C  V3T 2X3
-				CA
-
-00-25-A7   (hex)		itron
-0025A7     (base 16)		itron
-				5390 Triangle Parkway
-				Norcross  GA  30092
-				US
-
-00-25-A9   (hex)		Shanghai Embedway Information Technologies Co.,Ltd
-0025A9     (base 16)		Shanghai Embedway Information Technologies Co.,Ltd
-				2F,Building 9,Lujiazui Software Park, No.20,Lane 91,E'Shan Road
-				Shanghai    200127
-				CN
-
-00-25-B4   (hex)		Cisco Systems, Inc
-0025B4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-25-B2   (hex)		MBDA Deutschland GmbH
-0025B2     (base 16)		MBDA Deutschland GmbH
-				Hagenauer Forst 27
-				Schrobenhausen  Bavaria  86529
-				DE
-
-00-25-EF   (hex)		I-TEC Co., Ltd.
-0025EF     (base 16)		I-TEC Co., Ltd.
-				7/F,KAWARAMACHI KOYO BLDG.3-4-3,KAWARAMCHI,CHUO-KU,
-				OSAKA    541-0048
-				JP
-
-00-25-28   (hex)		Daido Signal Co., Ltd.
-002528     (base 16)		Daido Signal Co., Ltd.
-				6-17-19
-				Minato-ku  TOKYO  105-8650
-				JP
-
-00-25-26   (hex)		Genuine Technologies Co., Ltd.
-002526     (base 16)		Genuine Technologies Co., Ltd.
-				Klingelnberg Bldg.
-				Yokohama  Kanagawa  222-0033
-				JP
-
-00-25-6B   (hex)		ATENIX E.E. s.r.l.
-00256B     (base 16)		ATENIX E.E. s.r.l.
-				Via Torricelli, 15/b
-				VERONA  VR  37135
-				IT
-
-00-25-6E   (hex)		Van Breda B.V.
-00256E     (base 16)		Van Breda B.V.
-				Mercuriusweg 21
-				Brummen  Gelderland  6971 GV
-				NL
-
-00-25-65   (hex)		Vizimax Inc.
-002565     (base 16)		Vizimax Inc.
-				2284, rue de la Province
-				Longueuil  Québec  J4G 1G1
-				CA
-
-00-25-5E   (hex)		Shanghai Dare Technologies Co.,Ltd.
-00255E     (base 16)		Shanghai Dare Technologies Co.,Ltd.
-				22F,Info Tech Building, No.1555,Kongjiang Road,
-				  Shanghai  200092
-				CN
-
-00-25-3B   (hex)		din Dietmar Nocker Facilitymanagement GmbH
-00253B     (base 16)		din Dietmar Nocker Facilitymanagement GmbH
-				Kotzinastrasse 5
-				Linz  Upper Austria  4030
-				AT
-
-00-25-3D   (hex)		DRS Consolidated Controls
-00253D     (base 16)		DRS Consolidated Controls
-				21 South Street
-				Danbury  CT  06810-8147
-				US
-
-00-25-35   (hex)		Minimax GmbH & Co KG
-002535     (base 16)		Minimax GmbH & Co KG
-				Industriestrasse 10/12
-				Bad Oldesloe  SH  23840
-				DE
-
-00-25-84   (hex)		Cisco Systems, Inc
-002584     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-25-79   (hex)		J & F Labs
-002579     (base 16)		J & F Labs
-				1214 W. Boston Post Road
-				Mamaroneck  NY  10543
-				US
-
-00-25-7F   (hex)		CallTechSolution Co.,Ltd
-00257F     (base 16)		CallTechSolution Co.,Ltd
-				#123,Daewooprugio B/D,344-1, Seogyo-Dong,Mapo-gu
-				Seoul    121-837
-				KR
-
-00-25-77   (hex)		D-BOX Technologies
-002577     (base 16)		D-BOX Technologies
-				2172 de la Province
-				Longueuil  Quebec  J4G 1R7
-				CA
-
-00-25-72   (hex)		Nemo-Q International AB
-002572     (base 16)		Nemo-Q International AB
-				Box 210
-				Sollentuna    19123
-				SE
-
-00-25-29   (hex)		COMELIT GROUP S.P.A
-002529     (base 16)		COMELIT GROUP S.P.A
-				DON ARRIGONI N. 5
-				SAN LORENZO, ROVETTA  BERGAMO  24020
-				IT
-
-00-25-2A   (hex)		Chengdu GeeYa Technology Co.,LTD
-00252A     (base 16)		Chengdu GeeYa Technology Co.,LTD
-				50 Shuxi Road,
-				Chengdu  SiChuan  610091
-				CN
-
-00-25-8A   (hex)		Pole/Zero Corporation
-00258A     (base 16)		Pole/Zero Corporation
-				5530 Union Centre Drive
-				West Chester  OH  45069
-				US
-
-00-25-5F   (hex)		SenTec AG
-00255F     (base 16)		SenTec AG
-				Ringstrasse 39
-				Therwil    4106
-				CH
-
-00-24-EC   (hex)		United Information Technology Co.,Ltd.
-0024EC     (base 16)		United Information Technology Co.,Ltd.
-				5/F,9th Building,Software Park,2nd Keji-zhong Road,High-Tech Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-00-24-E6   (hex)		In Motion Technology Inc.
-0024E6     (base 16)		In Motion Technology Inc.
-				#350, 625 Agnes Street
-				New Westminster  BC  V3M 5Y4
-				CA
-
-00-24-E7   (hex)		Plaster Networks
-0024E7     (base 16)		Plaster Networks
-				935 Hamilton Avenue
-				Menlo Park  CA  94025-1431
-				US
-
-00-24-DE   (hex)		GLOBAL Technology Inc.
-0024DE     (base 16)		GLOBAL Technology Inc.
-				No.168,Shanshan Rd., Wangchun Industrial Park,
-				Ningbo    315176
-				CN
-
-00-24-DC   (hex)		Juniper Networks
-0024DC     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-24-DB   (hex)		Alcohol Monitoring Systems
-0024DB     (base 16)		Alcohol Monitoring Systems
-				1241 W. Mineral Avenue
-				Littleton  CO  80120
-				US
-
-00-25-21   (hex)		Logitek Electronic Systems, Inc.
-002521     (base 16)		Logitek Electronic Systems, Inc.
-				5622 Edgemoor Drive
-				Houston  Texas  77081
-				US
-
-00-25-1F   (hex)		ZYNUS VISION INC.
-00251F     (base 16)		ZYNUS VISION INC.
-				1-1-7-1A
-				SAGAMIHARA  KANAGAWA  229-0039
-				JP
-
-00-25-1E   (hex)		ROTEL TECHNOLOGIES
-00251E     (base 16)		ROTEL TECHNOLOGIES
-				CEVIZLIDERE 14.CD NO:2/19 BALGAT
-				ANKARA    06520
-				TR
-
-00-25-19   (hex)		Viaas Inc
-002519     (base 16)		Viaas Inc
-				3175 South Winchester Blvd
-				Campbell  CA  95008
-				US
-
-00-24-D5   (hex)		Winward Industrial Limited
-0024D5     (base 16)		Winward Industrial Limited
-				Rm.7, P Floor, Tower A,
-				HongKong    852
-				CN
-
-00-24-DD   (hex)		Centrak, Inc.
-0024DD     (base 16)		Centrak, Inc.
-				207 Penns Trail
-				Newtown  PA  18940
-				US
-
-00-24-EA   (hex)		iris-GmbH infrared & intelligent sensors
-0024EA     (base 16)		iris-GmbH infrared & intelligent sensors
-				Ostendstraße 1-14
-				Berlin    12459
-				DE
-
-00-24-ED   (hex)		YT Elec. Co,.Ltd.
-0024ED     (base 16)		YT Elec. Co,.Ltd.
-				Block B,2 Floor ,Bao Ying Industrial District,
-				Wu Lian Lu  Shenzhen  518116
-				CN
-
-00-25-03   (hex)		IBM Corp
-002503     (base 16)		IBM Corp
-				2051 Mission College Blvd 
-				Santa Clara  CA  95054
-				US
-
-00-25-04   (hex)		Valiant Communications Limited
-002504     (base 16)		Valiant Communications Limited
-				71-1 Shivaji Marg
-				New Delhi  Delhi  110015
-				IN
-
-00-25-13   (hex)		CXP DIGITAL BV
-002513     (base 16)		CXP DIGITAL BV
-				De Reulver 97A
-				Enschede    7544RT
-				NL
-
-00-24-A4   (hex)		Siklu Communication
-0024A4     (base 16)		Siklu Communication
-				7 Shoham St., , 3rd Floor
-				Petah Tikva    49517
-				IL
-
-00-24-9A   (hex)		Beijing Zhongchuang Telecommunication Test Co., Ltd.
-00249A     (base 16)		Beijing Zhongchuang Telecommunication Test Co., Ltd.
-				12-14,Block C,Beijing International Building,#18,Zhong Guan Cun Nan Road,
-				Beijing    100081
-				CN
-
-00-24-9E   (hex)		ADC-Elektronik GmbH
-00249E     (base 16)		ADC-Elektronik GmbH
-				Östingstraße 13b
-				Hamm  NRW  D-59063
-				DE
-
-00-24-9F   (hex)		RIM Testing Services
-00249F     (base 16)		RIM Testing Services
-				440 Phillip Street
-				Waterloo  Ontario  N2L 5R9
-				CA
-
-00-24-C2   (hex)		Asumo Co.,Ltd.
-0024C2     (base 16)		Asumo Co.,Ltd.
-				Oya-Kita 1-3-1
-				EBINA-CITY  KANAGAWA-PREF.  243-0419
-				JP
-
-00-24-BF   (hex)		CIAT
-0024BF     (base 16)		CIAT
-				30, Avenue Jean Falconnier
-				Culoz    01350
-				FR
-
-00-24-C0   (hex)		NTI COMODO INC
-0024C0     (base 16)		NTI COMODO INC
-				Rm#502, Kangyong Bldg, Sungnam-dong
-				Sungnam-si  Kyunggi-do  462-827
-				KR
-
-00-24-BB   (hex)		CENTRAL Corporation
-0024BB     (base 16)		CENTRAL Corporation
-				NISSO 17 Bldg.7F 2-14-30
-				Yokohama  Kanagawa  222-0033
-				JP
-
-00-24-BC   (hex)		HuRob Co.,Ltd
-0024BC     (base 16)		HuRob Co.,Ltd
-				2121, Jeongwang-Dong
-				Siheung-Si  Gyeonggi-Do  429-793
-				KR
-
-00-24-AD   (hex)		Adolf Thies Gmbh & Co. KG
-0024AD     (base 16)		Adolf Thies Gmbh & Co. KG
-				Hauptstraße 76
-				Göttingen    37083
-				DE
-
-00-24-A7   (hex)		Advanced Video Communications Inc.
-0024A7     (base 16)		Advanced Video Communications Inc.
-				633 W 5th Street
-				Los Angeles  CA  90017
-				US
-
-00-24-AB   (hex)		A7 Engineering, Inc.
-0024AB     (base 16)		A7 Engineering, Inc.
-				12127 Kirkham Road Suite 101
-				Poway  CA  92064
-				US
-
-00-24-66   (hex)		Unitron nv
-002466     (base 16)		Unitron nv
-				Franrkijklaan 27
-				Poperinge  W-vl  8970
-				BE
-
-00-24-5F   (hex)		Vine Telecom CO.,Ltd.
-00245F     (base 16)		Vine Telecom CO.,Ltd.
-				191-4, 4F, Anyang-dong, Manan-gu
-				Anyang-si  Gyeonggi-do  430-010
-				KR
-
-00-24-55   (hex)		MuLogic BV
-002455     (base 16)		MuLogic BV
-				Olivier van Noortstraat 4
-				Schiedam  ZH  3124LA
-				NL
-
-00-24-88   (hex)		Centre For Development Of Telematics
-002488     (base 16)		Centre For Development Of Telematics
-				B01, Electronic City, Phase 1
-				Bangalore  Karnataka  560100
-				IN
-
-00-24-8F   (hex)		DO-MONIX
-00248F     (base 16)		DO-MONIX
-				#501, Koreana B/D
-				Seongnam-si  Gyeonggi-do  82
-				KP
-
-00-24-79   (hex)		Optec Displays, Inc.
-002479     (base 16)		Optec Displays, Inc.
-				528 S. 6th Avenue
-				City of Industry  California  91746
-				US
-
-00-24-B7   (hex)		GridPoint, Inc.
-0024B7     (base 16)		GridPoint, Inc.
-				2801 Clarendon Blvd.
-				Arlington  VA  22201
-				US
-
-00-24-AE   (hex)		IDEMIA
-0024AE     (base 16)		IDEMIA
-				18 chaussee Jules Cesar
-				OSNY    95520
-				FR
-
-00-24-68   (hex)		Sumavision Technologies Co.,Ltd
-002468     (base 16)		Sumavision Technologies Co.,Ltd
-				6F, Block A2, Power Creative Building,No.1 Shangdi East Road, Haidian District
-				Beijing    100085
-				CN
-
-00-24-3A   (hex)		Ludl Electronic Products
-00243A     (base 16)		Ludl Electronic Products
-				171 Brady Ave
-				Hawthorne  NY  10532
-				US
-
-00-24-39   (hex)		Digital Barriers Advanced Technologies
-002439     (base 16)		Digital Barriers Advanced Technologies
-				4th Floor
-				Glasgow  Lanarkshire  G1 2QQ
-				GB
-
-00-24-34   (hex)		Lectrosonics, Inc.
-002434     (base 16)		Lectrosonics, Inc.
-				581 Laser Rd.
-				Rio Rancho  NM  87124
-				US
-
-00-24-5A   (hex)		Nanjing Panda Electronics Company Limited
-00245A     (base 16)		Nanjing Panda Electronics Company Limited
-				Zhongshan EastRoad 301,
-				NANJING  JIANGSU  210016
-				CN
-
-00-24-5B   (hex)		RAIDON TECHNOLOGY, INC.
-00245B     (base 16)		RAIDON TECHNOLOGY, INC.
-				4F-8, NO.16, Lane 609, Sec.5, Chung-Hsin Rd.,
-				San-Chung City  Taipei county,  24159
-				TW
-
-00-24-59   (hex)		ABB Automation products GmbH
-002459     (base 16)		ABB Automation products GmbH
-				Eppelheimer Strasse 82
-				Heidelberg    69123
-				DE
-
-00-24-4E   (hex)		RadChips, Inc.
-00244E     (base 16)		RadChips, Inc.
-				422 East Vermijo Ave.
-				Colorado Springs  CO  80903
-				US
-
-00-24-0D   (hex)		OnePath Networks LTD.
-00240D     (base 16)		OnePath Networks LTD.
-				8 Hartom St
-				Jerusalem    91450
-				IL
-
-00-24-0B   (hex)		Virtual Computer Inc.
-00240B     (base 16)		Virtual Computer Inc.
-				3 LAN Drive
-				Westford  MA  01886
-				US
-
-00-24-02   (hex)		Op-Tection GmbH
-002402     (base 16)		Op-Tection GmbH
-				Borsigstraße 80
-				Heinsberg  Germany  52525
-				DE
-
-00-24-2F   (hex)		Micron
-00242F     (base 16)		Micron
-				8000 S Federal Way
-				Boise  ID  83716
-				US
-
-00-24-26   (hex)		NOHMI BOSAI LTD.
-002426     (base 16)		NOHMI BOSAI LTD.
-				7-3,Kudan-Minami 4-Chome,
-				Tokyo    102-8277
-				JP
-
-00-24-18   (hex)		Nextwave Semiconductor
-002418     (base 16)		Nextwave Semiconductor
-				3610 Valley Centre Dr
-				San Diego  CA  92130
-				US
-
-00-24-12   (hex)		Benign Technologies Co, Ltd.
-002412     (base 16)		Benign Technologies Co, Ltd.
-				504 room, 5F, South building, Forsafe Tower,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-24-29   (hex)		MK MASTER INC.
-002429     (base 16)		MK MASTER INC.
-				6F, -1, NO. 110,SEC. 3, JHONGSHAN RD.,
-				JHONG-HE CITY,  TAIPEI COUNTY  235
-				TW
-
-00-23-DB   (hex)		saxnet gmbh
-0023DB     (base 16)		saxnet gmbh
-				Willy-Brandt-Ring 1
-				Oelsnitz  Sachsen  08606
-				DE
-
-00-23-C8   (hex)		TEAM-R
-0023C8     (base 16)		TEAM-R
-				Gragdanski str.111, A, 9-N
-				St. Petersburg    195265
-				RU
-
-00-23-EB   (hex)		Cisco Systems, Inc
-0023EB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-23-EC   (hex)		Algorithmix GmbH
-0023EC     (base 16)		Algorithmix GmbH
-				Klettgaustrasse 21
-				Waldshut-Tiengen  BW  79761
-				US
-
-00-23-C1   (hex)		Securitas Direct AB
-0023C1     (base 16)		Securitas Direct AB
-				Angbatsbron 1
-				Malmö    21120
-				SE
-
-00-23-AA   (hex)		HFR, Inc.
-0023AA     (base 16)		HFR, Inc.
-				5F, Hana EZ Tower
-				Sungnam-si  Kyunggi-do  463-870
-				KR
-
-00-23-A5   (hex)		SageTV, LLC
-0023A5     (base 16)		SageTV, LLC
-				9800 S. La Cienega Blvd
-				Inglewood  CA  90301
-				US
-
-00-23-9E   (hex)		Jiangsu Lemote Technology Corporation Limited
-00239E     (base 16)		Jiangsu Lemote Technology Corporation Limited
-				Menglan Industrial Park,Yushan
-				Changshu  Jiangsu  215500
-				CN
-
-00-23-FC   (hex)		Ultra Stereo Labs, Inc
-0023FC     (base 16)		Ultra Stereo Labs, Inc
-				181 Bonetti Drive
-				San Luis Obispo  CA  93401
-				US
-
-00-23-8D   (hex)		Techno Design Co., Ltd.
-00238D     (base 16)		Techno Design Co., Ltd.
-				312-2
-				Aso-gun  Kumamoto-ken  861-2401
-				JP
-
-00-23-87   (hex)		ThinkFlood, Inc.
-002387     (base 16)		ThinkFlood, Inc.
-				138 Claflin St
-				Belmont  MA  02478
-				US
-
-00-23-84   (hex)		GGH Engineering s.r.l.
-002384     (base 16)		GGH Engineering s.r.l.
-				Via Agucchi 84/2
-				Bologna    40133
-				IT
-
-00-23-91   (hex)		Maxian
-002391     (base 16)		Maxian
-				21th Fl. KINS tower, 25-1
-				Seongnam-city  Gyeonggi-do  463-847
-				KR
-
-00-23-92   (hex)		Proteus Industries Inc.
-002392     (base 16)		Proteus Industries Inc.
-				340 Pioneer Way
-				Mountain View  CA  94041
-				US
-
-00-23-93   (hex)		AJINEXTEK
-002393     (base 16)		AJINEXTEK
-				9-3, Holimdong, Dalseogu
-				Daegu    704-240
-				KR
-
-00-23-7F   (hex)		PLANTRONICS, INC.
-00237F     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-00-23-6F   (hex)		DAQ System
-00236F     (base 16)		DAQ System
-				Rm 913, SungNam Woolim Lions VAlley I, 311-3
-				Sungnam-Si  Kyunggi-Do,  462-806
-				KR
-
-00-23-30   (hex)		DIZIPIA, INC.
-002330     (base 16)		DIZIPIA, INC.
-				15th Floor, East Wing, IT Venture Tower
-				Seoul    138160
-				KR
-
-00-23-69   (hex)		Cisco-Linksys, LLC
-002369     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-00-22-F8   (hex)		PIMA Electronic Systems Ltd.
-0022F8     (base 16)		PIMA Electronic Systems Ltd.
-				5 Hatzoref St.
-				Holon    58856
-				IL
-
-00-23-1C   (hex)		Fourier Systems Ltd.
-00231C     (base 16)		Fourier Systems Ltd.
-				16 Hamelacha St
-				Rosh Haayin    48091
-				IL
-
-00-23-1D   (hex)		Deltacom Electronics Ltd
-00231D     (base 16)		Deltacom Electronics Ltd
-				2F,ZIT,7km Tzarigradsko Shose
-				Sofia  Sofia-grad  1784
-				BG
-
-00-22-D7   (hex)		Nintendo Co., Ltd.
-0022D7     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-22-D6   (hex)		Cypak AB
-0022D6     (base 16)		Cypak AB
-				P.O. BOX 2332
-				Stockholm    103 18
-				SE
-
-00-22-D0   (hex)		Polar Electro Oy
-0022D0     (base 16)		Polar Electro Oy
-				Professorintie 5
-				Kempele  Oulu  90440
-				FI
-
-00-23-0A   (hex)		ARBURG GmbH & Co KG
-00230A     (base 16)		ARBURG GmbH & Co KG
-				Arthur Hehl Straße
-				Lossburg    D-72290
-				DE
-
-00-22-C3   (hex)		Zeeport Technology Inc.
-0022C3     (base 16)		Zeeport Technology Inc.
-				1F,No231,Xianzheng 2nd Rd.
-				HsinChu  Taiwan  300
-				TW
-
-00-23-16   (hex)		KISAN ELECTRONICS CO
-002316     (base 16)		KISAN ELECTRONICS CO
-				317-15
-				SEOUNG-DONG GU  SEOUL  133-123
-				KR
-
-00-23-0F   (hex)		Hirsch Electronics Corporation
-00230F     (base 16)		Hirsch Electronics Corporation
-				1900 Carnegie, Bldg. B
-				Santa Ana  CA  92705
-				US
-
-00-23-2D   (hex)		SandForce
-00232D     (base 16)		SandForce
-				12950 Saratoga Ave.
-				Saratoga  California  95070-4658
-				US
-
-00-23-23   (hex)		Zylin AS
-002323     (base 16)		Zylin AS
-				Auglendsdalen 78
-				Stavanger    4017
-				NO
-
-00-22-DE   (hex)		OPPO Digital, Inc.
-0022DE     (base 16)		OPPO Digital, Inc.
-				2629B Terminal Blvd
-				Mountain View  CA  94043
-				US
-
-00-22-F1   (hex)		Private
-0022F1     (base 16)		Private
-
-00-22-A2   (hex)		Xtramus Technologies
-0022A2     (base 16)		Xtramus Technologies
-				5th Fl., No. 102, Lide St.,
-				Zhonghe City  Taipei County  235
-				TW
-
-00-22-9E   (hex)		Social Aid Research Co., Ltd.
-00229E     (base 16)		Social Aid Research Co., Ltd.
-				South 3, West 10, Chuo-ku
-				Sapporo  Hokkaido  060-0063
-				JP
-
-00-22-85   (hex)		NOMUS COMM SYSTEMS
-002285     (base 16)		NOMUS COMM SYSTEMS
-				601, Gunjan Tower,
-				Baroda  Gujarat  390023
-				IN
-
-00-22-81   (hex)		Daintree Networks Pty
-002281     (base 16)		Daintree Networks Pty
-				1 Dalmore Drive
-				Scoresby  Victoria  3179
-				AU
-
-00-22-55   (hex)		Cisco Systems, Inc
-002255     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-22-4E   (hex)		SEEnergy Corp.
-00224E     (base 16)		SEEnergy Corp.
-				4F, No.61, Dongsing RD.
-				Taipei    110
-				TW
-
-00-22-87   (hex)		Titan Wireless LLC
-002287     (base 16)		Titan Wireless LLC
-				3914 Gattis School Rd
-				Round Rock  Texas  78664
-				US
-
-00-22-88   (hex)		Sagrad, Inc.
-002288     (base 16)		Sagrad, Inc.
-				751 North Drive
-				Melbourne  FL  32934
-				US
-
-00-22-73   (hex)		Techway
-002273     (base 16)		Techway
-				Rm 1002, Daehyun Techno World Bd,
-				Uiwang-Si,  Kyungki-Do  437-820
-				KR
-
-00-22-6B   (hex)		Cisco-Linksys, LLC
-00226B     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-00-22-67   (hex)		Nortel Networks
-002267     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75081
-				US
-
-00-22-95   (hex)		SGM Technology for lighting spa
-002295     (base 16)		SGM Technology for lighting spa
-				Via Pio La Torre 1
-				Tavullia  PU  61010
-				IT
-
-00-22-5A   (hex)		Garde Security AB
-00225A     (base 16)		Garde Security AB
-				Box 78
-				Soderhamn    S-826 22
-				SE
-
-00-22-42   (hex)		Alacron Inc.
-002242     (base 16)		Alacron Inc.
-				71 Spit Brook Rd.
-				Nashua  NH  03060
-				US
-
-00-22-34   (hex)		Corventis Inc.
-002234     (base 16)		Corventis Inc.
-				1410 Energy Park Dr. Suite #1
-				St. Paul  Minnesota  55108
-				US
-
-00-21-F7   (hex)		HPN Supply Chain
-0021F7     (base 16)		HPN Supply Chain
-				8000 Foothills Blvd
-				Roseville  CA  95747
-				US
-
-00-21-F4   (hex)		INRange Systems, Inc
-0021F4     (base 16)		INRange Systems, Inc
-				3316 5th Avenue, Suite 100
-				Altoona  PA  16602
-				US
-
-00-21-F5   (hex)		Western Engravers Supply, Inc.
-0021F5     (base 16)		Western Engravers Supply, Inc.
-				17621 N Black Canyon Highway
-				Phoenix  AZ  85023
-				US
-
-00-22-32   (hex)		Design Design Technology Ltd
-002232     (base 16)		Design Design Technology Ltd
-				Unit 9, Ash Road South
-				Wrexham  North Wales  LL13 9UG
-				GB
-
-00-22-2B   (hex)		Nucomm, Inc.
-00222B     (base 16)		Nucomm, Inc.
-				101 Bilby Road
-				Hackettstown  NJ  07840
-				US
-
-00-22-26   (hex)		Avaak, Inc.
-002226     (base 16)		Avaak, Inc.
-				9645 Scranton Rd., Suitie 110
-				San Diego  CA  92121
-				US
-
-00-22-21   (hex)		ITOH DENKI CO,LTD.
-002221     (base 16)		ITOH DENKI CO,LTD.
-				1146-2, Asazuma-cho
-				Kasai  Hyogo  679-0180
-				JP
-
-00-22-1D   (hex)		Freegene Technology LTD
-00221D     (base 16)		Freegene Technology LTD
-				3/F ,C BLDG,Weipengda Industrial Park
-				Shenzhen  Gongdong  518109
-				CN
-
-00-22-24   (hex)		Good Will Instrument Co., Ltd.
-002224     (base 16)		Good Will Instrument Co., Ltd.
-				No. 7-1 Jhongsing Road,
-				Taipei    236
-				TW
-
-00-22-45   (hex)		Leine & Linde AB
-002245     (base 16)		Leine & Linde AB
-				Box 8
-				Strängnäs  Södermanland  SE-645 21
-				SE
-
-00-22-49   (hex)		HOME MULTIENERGY SL
-002249     (base 16)		HOME MULTIENERGY SL
-				Capitán HAYA 1
-				MADRID    28020
-				ES
-
-00-22-40   (hex)		Universal Telecom S/A
-002240     (base 16)		Universal Telecom S/A
-				Avenida Paulista, 2444 - 17 andar
-				São Paulo    01310-300
-				BR
-
-00-22-0F   (hex)		MoCA (Multimedia over Coax Alliance)
-00220F     (base 16)		MoCA (Multimedia over Coax Alliance)
-				90 Inverness Circle East
-				Englewood  CA  94583
-				US
-
-00-22-0A   (hex)		OnLive, Inc
-00220A     (base 16)		OnLive, Inc
-				1091 N Shoreline Blvd
-				Mountainview  California  94043
-				US
-
-00-22-03   (hex)		Glensound Electronics Ltd
-002203     (base 16)		Glensound Electronics Ltd
-				1 - 6 Brooks Place
-				Maidstone  Kent  ME17 1UN
-				GB
-
-00-22-04   (hex)		KORATEK
-002204     (base 16)		KORATEK
-				Geumjeong-dong
-				Gunpo-si  Gyeonggi-do  435-825
-				KR
-
-00-21-FF   (hex)		Cyfrowy Polsat SA
-0021FF     (base 16)		Cyfrowy Polsat SA
-				Łubinowa
-				Warsaw  Mazowieckie  03-878
-				PL
-
-00-21-E4   (hex)		I-WIN
-0021E4     (base 16)		I-WIN
-				27 Rue des Econdeaux
-				EPINAY SUR SEINE  Seine Saint Denis  93800
-				FR
-
-00-21-E5   (hex)		Display Solution AG
-0021E5     (base 16)		Display Solution AG
-				Talhofstraße 32a
-				Gilching  D  82205
-				DE
-
-00-22-1B   (hex)		Morega Systems
-00221B     (base 16)		Morega Systems
-				5770 Hurontario Street
-				Mississauga  Ontario  L5R 3G5
-				CA
-
-00-21-B2   (hex)		Fiberblaze A/S
-0021B2     (base 16)		Fiberblaze A/S
-				Kildevangsvej 9
-				Roskilde    4000
-				DK
-
-00-21-AC   (hex)		Infrared Integrated Systems Ltd
-0021AC     (base 16)		Infrared Integrated Systems Ltd
-				Park Circle, Tithe Barn Way
-				Northampton  Northants  NN4 9BG
-				GB
-
-00-21-8E   (hex)		MEKICS CO., LTD.
-00218E     (base 16)		MEKICS CO., LTD.
-				Industrial Zone 861-10, Taegye-Dong
-				Chunchon  Kangwon  200-944
-				KR
-
-00-21-8F   (hex)		Avantgarde Acoustic Lautsprechersysteme GmbH
-00218F     (base 16)		Avantgarde Acoustic Lautsprechersysteme GmbH
-				Nibelungenstraße 349
-				Lautertal - Reichenbach  Hessen  D-64686
-				DE
-
-00-21-7E   (hex)		Telit Communication s.p.a
-00217E     (base 16)		Telit Communication s.p.a
-				Via stazione di prosecco 5B
-				SGONICO  Trieste  34010
-				IT
-
-00-21-87   (hex)		Imacs GmbH
-002187     (base 16)		Imacs GmbH
-				Mittelfeldstrasse 25
-				Kornwestheim  Germany  D-70806
-				DE
-
-00-21-81   (hex)		Si2 Microsystems Limited
-002181     (base 16)		Si2 Microsystems Limited
-				No 84, Sy No 150, EPIP, Whitefield Industrial Area
-				Bangalore  Karnataka  560066
-				IN
-
-00-21-C2   (hex)		GL Communications Inc
-0021C2     (base 16)		GL Communications Inc
-				818 West Diamond Ave
-				Gaithersburg  MD  20878
-				US
-
-00-21-E2   (hex)		visago Systems & Controls GmbH & Co. KG
-0021E2     (base 16)		visago Systems & Controls GmbH & Co. KG
-				Neuwiesenstraße 20
-				Weilheim an der Teck    D-73235
-				DE
-
-00-21-DD   (hex)		Northstar Systems Corp
-0021DD     (base 16)		Northstar Systems Corp
-				5F, No.200 Gang Qian Rd
-				Taipei    114
-				TW
-
-00-21-D5   (hex)		X2E GmbH
-0021D5     (base 16)		X2E GmbH
-				Raiffeisenstrasse 9
-				Winden  Rheinland-Pfalz  76872
-				DE
-
-00-21-A2   (hex)		EKE-Electronics Ltd.
-0021A2     (base 16)		EKE-Electronics Ltd.
-				Piispanportti 7
-				ESPOO    02240
-				FI
-
-00-21-C9   (hex)		Wavecom Asia Pacific Limited
-0021C9     (base 16)		Wavecom Asia Pacific Limited
-				201 Bio-Informatics Centre,  No.2 Science Park West Ave
-				    
-				HK
-
-00-21-4A   (hex)		Pixel Velocity, Inc
-00214A     (base 16)		Pixel Velocity, Inc
-				3917 Research Park Dr.
-				Ann Arbor  MI  48108
-				US
-
-00-21-46   (hex)		Sanmina-SCI
-002146     (base 16)		Sanmina-SCI
-				13000 South Memorial Parkway
-				Huntsville  AL  35803
-				US
-
-00-21-6E   (hex)		Function ATI (Huizhou) Telecommunications Co., Ltd.
-00216E     (base 16)		Function ATI (Huizhou) Telecommunications Co., Ltd.
-				No. 8, Huitai Road, Huitai Industrial Zone
-				Huizhou City  Guangdong Province  516006
-				CN
-
-00-21-6D   (hex)		Soltech Co., Ltd.
-00216D     (base 16)		Soltech Co., Ltd.
-				#30-3,3F
-				Yongsan Ku  Seoul  140837
-				KR
-
-00-21-65   (hex)		Presstek Inc.
-002165     (base 16)		Presstek Inc.
-				55 Executive Drive
-				Hudson  New Hampshire  03051
-				US
-
-00-21-1F   (hex)		SHINSUNG DELTATECH CO.,LTD.
-00211F     (base 16)		SHINSUNG DELTATECH CO.,LTD.
-				44-10
-				CHANGWON-CITY  KYUNGNAM-DO  641-290
-				KR
-
-00-21-24   (hex)		Optos Plc
-002124     (base 16)		Optos Plc
-				Queensferry House
-				Dunfermline  Fife  KY11 8GR
-				GB
-
-00-21-33   (hex)		Building B, Inc
-002133     (base 16)		Building B, Inc
-				1000 NW 65th Street, Suite 300
-				Ft. Lauderdale  FL  33309
-				US
-
-00-21-34   (hex)		Brandywine Communications
-002134     (base 16)		Brandywine Communications
-				1153 Warner Ave
-				Tustin  CA  92780
-				US
-
-00-21-3A   (hex)		Winchester Systems Inc.
-00213A     (base 16)		Winchester Systems Inc.
-				101 Billerica Avenue
-				Billerica,  MA  01862
-				US
-
-00-21-2E   (hex)		dresden-elektronik
-00212E     (base 16)		dresden-elektronik
-				Enno-Heidebroek-Str. 12
-				Dresden  Saxony  D-01237
-				DE
-
-00-21-30   (hex)		Keico Hightech Inc.
-002130     (base 16)		Keico Hightech Inc.
-				Ace twin tower I, 12th Fl.
-				Seoul    152-050
-				KR
-
-00-21-5B   (hex)		SenseAnywhere
-00215B     (base 16)		SenseAnywhere
-				Lisztlaan 2
-				Roosendaal    4702 KJ
-				NL
-
-00-21-4E   (hex)		GS Yuasa Power Supply Ltd.
-00214E     (base 16)		GS Yuasa Power Supply Ltd.
-				1, Inobanba-cho, Nishinosho, Kisshoin, Minami-ku,
-				Kyoto    601-8520
-				JP
-
-00-21-42   (hex)		Advanced Control Systems doo
-002142     (base 16)		Advanced Control Systems doo
-				Bulevar Zorana Djindjica 8a
-				Belgrade  Serbia  11070
-				YU
-
-00-1F-FA   (hex)		Coretree, Co, Ltd
-001FFA     (base 16)		Coretree, Co, Ltd
-				#502 IT Venture Town, 694
-				Daejeon    305-510
-				KR
-
-00-1F-F2   (hex)		VIA Technologies, Inc.
-001FF2     (base 16)		VIA Technologies, Inc.
-				1F, 531, Chung-Cheng Road
-				Hsin-Tien  Taipei  231
-				TW
-
-00-21-01   (hex)		Aplicaciones Electronicas Quasar (AEQ)
-002101     (base 16)		Aplicaciones Electronicas Quasar (AEQ)
-				C/Rey Pastor 40
-				Leganes  Madrid  28914
-				ES
-
-00-21-03   (hex)		GHI Electronics, LLC
-002103     (base 16)		GHI Electronics, LLC
-				35555 Garfield Rd.
-				Clinton Township  MI  48035
-				US
-
-00-1F-F8   (hex)		Siemens AG, Sector Industry, Drive Technologies, Motion Control Systems
-001FF8     (base 16)		Siemens AG, Sector Industry, Drive Technologies, Motion Control Systems
-				Frauenauracherstraße 80
-				Erlangen  Bavaria  91056
-				DE
-
-00-1F-D0   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-001FD0     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				
-				Pin-Jen  Taoyuan  324
-				TW
-
-00-1F-D1   (hex)		OPTEX CO.,LTD.
-001FD1     (base 16)		OPTEX CO.,LTD.
-				5-8-12
-				Otsu  Shiga  520-0101
-				JP
-
-00-1F-C9   (hex)		Cisco Systems, Inc
-001FC9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1F-DC   (hex)		Mobile Safe Track Ltd
-001FDC     (base 16)		Mobile Safe Track Ltd
-				Niemenkatu 73
-				15149  Lahti  
-				FI
-
-00-1F-D6   (hex)		Shenzhen Allywll
-001FD6     (base 16)		Shenzhen Allywll
-				Kejiyuan Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-21-17   (hex)		Tellord
-002117     (base 16)		Tellord
-				Gurogu Gurodong 170-5 Woolim e-Biz Center 709
-				Seoul    152-050
-				KR
-
-00-21-0F   (hex)		Cernium Corp
-00210F     (base 16)		Cernium Corp
-				1943 Isaac Newton Sq
-				Reston  VA  20190
-				US
-
-00-1F-F1   (hex)		Paradox Hellas S.A.
-001FF1     (base 16)		Paradox Hellas S.A.
-				3 Korinthoy St
-				Athens  Attiki  14451
-				GR
-
-00-1F-E6   (hex)		Alphion Corporation
-001FE6     (base 16)		Alphion Corporation
-				196 Princeton Hightstown Rd.
-				Princeton Junction  NJ  08550
-				US
-
-00-1F-CF   (hex)		MSI Technology GmbH
-001FCF     (base 16)		MSI Technology GmbH
-				Hanauer Landstraße 328-330
-				Frankfurt am Main  Hessen  60314
-				DE
-
-00-1F-9C   (hex)		LEDCO
-001F9C     (base 16)		LEDCO
-				47801 W Anchor Court
-				Plymouth  MI  48170
-				US
-
-00-1F-90   (hex)		Actiontec Electronics, Inc
-001F90     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-1F-91   (hex)		DBS Lodging Technologies, LLC
-001F91     (base 16)		DBS Lodging Technologies, LLC
-				21196 Limber
-				Mission Viejo  CA  92692
-				US
-
-00-1F-98   (hex)		DAIICHI-DENTSU LTD.
-001F98     (base 16)		DAIICHI-DENTSU LTD.
-				OOMORI 690-1
-				KANI  GIFU  509-0238
-				JP
-
-00-1F-93   (hex)		Xiotech Corporation
-001F93     (base 16)		Xiotech Corporation
-				6455 Flying Cloud Drive
-				Eden Prairie  MN  55344
-				US
-
-00-1F-51   (hex)		HD Communications Corp
-001F51     (base 16)		HD Communications Corp
-				2180 Fifth Ave
-				Ronkonkoma  NY  11779
-				US
-
-00-1F-53   (hex)		GEMAC Chemnitz GmbH
-001F53     (base 16)		GEMAC Chemnitz GmbH
-				Zwickauer Straße 227
-				Chemnitz  Sachsen  09116
-				DE
-
-00-1F-50   (hex)		Swissdis AG
-001F50     (base 16)		Swissdis AG
-				Grasweg 7
-				Schwarzhaeusern  BE  4911
-				CH
-
-00-1F-4C   (hex)		Roseman Engineering Ltd
-001F4C     (base 16)		Roseman Engineering Ltd
-				65 Weizman Street
-				Givataim  Israel  53468
-				IL
-
-00-1F-A9   (hex)		Atlanta DTH, Inc.
-001FA9     (base 16)		Atlanta DTH, Inc.
-				5388 New Peachtree Rd
-				Chamblee  GA  30341
-				US
-
-00-1F-A3   (hex)		T&W Electronics(Shenzhen)Co.,Ltd.
-001FA3     (base 16)		T&W Electronics(Shenzhen)Co.,Ltd.
-				2F,Baiying Building, No.1019,
-				ShenZhen  GuangDong  518067
-				CN
-
-00-1F-A2   (hex)		Datron World Communications, Inc.
-001FA2     (base 16)		Datron World Communications, Inc.
-				3030 Enterprise Court
-				Vista  California  92081
-				US
-
-00-1F-70   (hex)		Botik Technologies LTD
-001F70     (base 16)		Botik Technologies LTD
-				Trudovaya, 1
-				Pereslavl-Zalessky  Yaroslavskaya  152020
-				RU
-
-00-1F-64   (hex)		Beijing Autelan Technology Inc.
-001F64     (base 16)		Beijing Autelan Technology Inc.
-				Room B-12B01, Keshi Plaza, Xinxi road,
-				Beijing    100085
-				CN
-
-00-1F-6D   (hex)		Cisco Systems, Inc
-001F6D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1F-24   (hex)		DIGITVIEW TECHNOLOGY CO., LTD.
-001F24     (base 16)		DIGITVIEW TECHNOLOGY CO., LTD.
-				NO. 14-22, TIAN-FU ,
-				TAIPEI COUNTY    237
-				TW
-
-00-1F-21   (hex)		Inner Mongolia Yin An Science & Technology Development Co.,L
-001F21     (base 16)		Inner Mongolia Yin An Science & Technology Development Co.,L
-				YinAn Building Yiwei Road.RuYi
-				Beijing    010010
-				CN
-
-00-1F-22   (hex)		Source Photonics, Inc.
-001F22     (base 16)		Source Photonics, Inc.
-				20550 Nordhoff Street
-				Chatsworth  CA  91311
-				US
-
-00-1F-1D   (hex)		Atlas Material Testing Technology LLC
-001F1D     (base 16)		Atlas Material Testing Technology LLC
-				4114 N. Ravenswood Ave.
-				Chicago  IL  60613
-				US
-
-00-1F-15   (hex)		Bioscrypt Inc
-001F15     (base 16)		Bioscrypt Inc
-				505 Cochrane Drive
-				Markham  Ontario  L3R 8E3
-				CA
-
-00-1F-2B   (hex)		Orange Logic
-001F2B     (base 16)		Orange Logic
-				#706 AceTechnoTower 10-cha,470-5
-				SEOUL    153-789
-				KR
-
-00-1F-2A   (hex)		ACCM
-001F2A     (base 16)		ACCM
-				Obour Industrial City, Industrial zone A, lot14, block 12006.
-				Cairo    
-				EG
-
-00-1F-30   (hex)		Travelping
-001F30     (base 16)		Travelping
-				
-				Chemnitz  Saxony  09113
-				DE
-
-00-1F-48   (hex)		Mojix Inc.
-001F48     (base 16)		Mojix Inc.
-				11075 Santa Monica Blvd.
-				Los Angeles  Ca  90025
-				US
-
-00-1F-3E   (hex)		RP-Technik e.K.
-001F3E     (base 16)		RP-Technik e.K.
-				Hermann-Staudinger-Str. 10-16
-				Rodgau  Hessen  63110
-				DE
-
-00-1E-F0   (hex)		Gigafin Networks
-001EF0     (base 16)		Gigafin Networks
-				19050 Pruneridge
-				Cupertino  CA  95014
-				US
-
-00-1E-F2   (hex)		Micro Motion Inc
-001EF2     (base 16)		Micro Motion Inc
-				7070 Winchester Circle
-				Boulder  CO  80301
-				US
-
-00-1F-37   (hex)		Genesis I&C
-001F37     (base 16)		Genesis I&C
-				#515 lisantekeunotaun
-				Goyang  Gyeonggi  410-722
-				KR
-
-00-1F-2C   (hex)		Starbridge Networks
-001F2C     (base 16)		Starbridge Networks
-				3265 Meridian Parkway
-				Weston  FL  33331
-				US
-
-00-1F-31   (hex)		Radiocomp
-001F31     (base 16)		Radiocomp
-				Krakesvej 17
-				Hilleroed  Copenhagen  3400
-				DK
-
-00-1F-12   (hex)		Juniper Networks
-001F12     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-1E-EA   (hex)		Sensor Switch, Inc.
-001EEA     (base 16)		Sensor Switch, Inc.
-				900 Northrop Road
-				Wallingford  CT  06492
-				US
-
-00-1F-04   (hex)		Granch Ltd.
-001F04     (base 16)		Granch Ltd.
-				40 Koroleva str.
-				Novosibirsk  NSO  630015
-				RU
-
-00-1E-94   (hex)		SUPERCOM TECHNOLOGY CORPORATION
-001E94     (base 16)		SUPERCOM TECHNOLOGY CORPORATION
-				8F, NO 100-1, Ming-Chuan Rd.
-				Shing Tien  Taipei  231
-				TW
-
-00-1E-8F   (hex)		CANON INC.
-001E8F     (base 16)		CANON INC.
-				3-30-2
-				Ohta-Ku  Tokyo  146-8501
-				JP
-
-00-1E-A5   (hex)		ROBOTOUS, Inc.
-001EA5     (base 16)		ROBOTOUS, Inc.
-				Nex Center-201(Lab.), SK n Technopark
-				Seongnam-si  Gyeonggi-do  462-120
-				KR
-
-00-1E-A7   (hex)		Actiontec Electronics, Inc
-001EA7     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-1E-A0   (hex)		XLN-t
-001EA0     (base 16)		XLN-t
-				Hoogstraat 52
-				Putte  Antwerp  B2580
-				BE
-
-00-1E-98   (hex)		GreenLine Communications
-001E98     (base 16)		GreenLine Communications
-				Alrabiah - Alrabeea Street
-				Amman  Central Region  11953
-				JO
-
-00-1E-9A   (hex)		HAMILTON Bonaduz AG
-001E9A     (base 16)		HAMILTON Bonaduz AG
-				Via Crusch 8
-				Bonaduz  Graubuenden  7402
-				CH
-
-00-1E-DF   (hex)		Master Industrialization Center Kista
-001EDF     (base 16)		Master Industrialization Center Kista
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-00-1E-E3   (hex)		T&W Electronics (ShenZhen) Co.,Ltd
-001EE3     (base 16)		T&W Electronics (ShenZhen) Co.,Ltd
-				2F Baiying Building, No.19, NanhaiRd., Nanshan Dist
-				ShenZhen  GuangDong  518052
-				CN
-
-00-1E-D9   (hex)		Mitsubishi Precision Co.,LTd.
-001ED9     (base 16)		Mitsubishi Precision Co.,LTd.
-				345 KAMIMACHIYA
-				KAMAKURA-City  KANAGAWA-Prefecture  247-8505
-				JP
-
-00-1E-D3   (hex)		Dot Technology Int'l Co., Ltd.
-001ED3     (base 16)		Dot Technology Int'l Co., Ltd.
-				Unit 1001, Fourseas Building 208-212, Nathan Road
-				Kowloon    
-				HK
-
-00-1E-A6   (hex)		Best IT World (India) Pvt. Ltd.
-001EA6     (base 16)		Best IT World (India) Pvt. Ltd.
-				87/70/93 Mistry Industrial Complex,
-				Mumbai  Maharashtra  400093
-				IN
-
-00-1E-83   (hex)		LAN/MAN Standards Association (LMSC)
-001E83     (base 16)		LAN/MAN Standards Association (LMSC)
-				C/O IEEE Standards Association
-				Piscataway  NJ  08855-1331
-				US
-
-00-1E-7C   (hex)		Taiwick Limited
-001E7C     (base 16)		Taiwick Limited
-				5/F., Block E, Hing Yip Factory Bldg.,
-				Hong Kong  China  852
-				HK
-
-00-1E-CF   (hex)		PHILIPS ELECTRONICS UK LTD
-001ECF     (base 16)		PHILIPS ELECTRONICS UK LTD
-				PHILIPS CENTRE
-				GUILDFORD  SURREY  GU2 8XH
-				GB
-
-00-1E-22   (hex)		ARVOO Imaging Products BV
-001E22     (base 16)		ARVOO Imaging Products BV
-				Tasveld 13
-				Montfoort  UT  3417 XS
-				NL
-
-00-1E-1A   (hex)		Best Source Taiwan Inc.
-001E1A     (base 16)		Best Source Taiwan Inc.
-				2F, No.16, Lane 56, Jhongjheng W. Rd.,
-				Jhubei City,  Hsinchu County  302
-				TW
-
-00-1E-19   (hex)		GTRI
-001E19     (base 16)		GTRI
-				M/S 0821
-				Atlanta  GA  30332
-				US
-
-00-1E-14   (hex)		Cisco Systems, Inc
-001E14     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-44   (hex)		SANTEC
-001E44     (base 16)		SANTEC
-				An der Strusbek 31
-				Ahrensburg  Schleswig Holstein  22926
-				DE
-
-00-1E-62   (hex)		Siemon
-001E62     (base 16)		Siemon
-				27 Siemon Company Drive
-				Watertown  CT  06795
-				US
-
-00-1E-5C   (hex)		RB GeneralEkonomik
-001E5C     (base 16)		RB GeneralEkonomik
-				Bulevar despota stefana 59a
-				Beograd  Serbia  11000
-				YU
-
-00-1E-5D   (hex)		Holosys d.o.o.
-001E5D     (base 16)		Holosys d.o.o.
-				Kovinska 4
-				Zagreb    10090
-				HR
-
-00-1E-78   (hex)		Owitek Technology Ltd.,
-001E78     (base 16)		Owitek Technology Ltd.,
-				No.2, Lane 78, Cingshan 6th St.,
-				Taoyuan County    32657
-				TW
-
-00-1E-7A   (hex)		Cisco Systems, Inc
-001E7A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-27   (hex)		SBN TECH Co.,Ltd.
-001E27     (base 16)		SBN TECH Co.,Ltd.
-				#706 Industrial Academic Center, Konkuk University, Hwayang-dong, Gwangjin-gu
-				Seoul    143-701
-				KR
-
-00-1E-60   (hex)		Digital Lighting Systems, Inc
-001E60     (base 16)		Digital Lighting Systems, Inc
-				12302 Sw 128th ct,   #105
-				Miami  FL  33186
-				US
-
-00-1E-6C   (hex)		Opaque Systems
-001E6C     (base 16)		Opaque Systems
-				4820 Fisher Road
-				Athens  OH  45701
-				US
-
-00-1E-2F   (hex)		DiMoto Pty Ltd
-001E2F     (base 16)		DiMoto Pty Ltd
-				7 Meljaren Place
-				Buderim  Queensland  4556
-				AU
-
-00-1E-36   (hex)		IPTE
-001E36     (base 16)		IPTE
-				Geleenlaan 5
-				Genk  Limburg  3600
-				BE
-
-00-1D-A7   (hex)		Seamless Internet
-001DA7     (base 16)		Seamless Internet
-				2050 Russett Way Suite 338
-				Carson City  Nevada  89703
-				US
-
-00-1D-A5   (hex)		WB Electronics
-001DA5     (base 16)		WB Electronics
-				Langelandsvej 1A
-				Herning  Herning  7400
-				DK
-
-00-1D-A8   (hex)		Takahata Electronics Co.,Ltd
-001DA8     (base 16)		Takahata Electronics Co.,Ltd
-				1188,Kubota,Kubota-machi
-				Yonezawa-shi  Yamagata-Pref.  992-0003
-				JP
-
-00-1D-A9   (hex)		Castles Technology, Co., LTD
-001DA9     (base 16)		Castles Technology, Co., LTD
-				2F, No.205, Sec 3 Beishin Rd.,
-				Hsin-Tien City  Taipei  231
-				TW
-
-00-1D-CB   (hex)		Exéns Development Oy
-001DCB     (base 16)		Exéns Development Oy
-				Kauppakatu 36
-				Kajaani  Kainuu  87100
-				FI
-
-00-1D-CA   (hex)		PAV Electronics Limited
-001DCA     (base 16)		PAV Electronics Limited
-				7 Laverock Road
-				Airdrie  Lanarkshire  ML6 7UD
-				GB
-
-00-1D-C2   (hex)		XORTEC OY
-001DC2     (base 16)		XORTEC OY
-				Höytämöntie 6
-				Lempäälä   Pirkanmaa  33880
-				FI
-
-00-1E-0E   (hex)		MAXI VIEW HOLDINGS LIMITED
-001E0E     (base 16)		MAXI VIEW HOLDINGS LIMITED
-				Suite 2302,23/F Great Eagle Centre, 23 Harbour Road, Wanchai
-				Hong Kong    
-				CN
-
-00-1E-0F   (hex)		Briot International
-001E0F     (base 16)		Briot International
-				2 rue roger Bonnet
-				Pont de l'Arche  Eure  27340
-				FR
-
-00-1D-E3   (hex)		Intuicom
-001DE3     (base 16)		Intuicom
-				4900 Nautilus CT N
-				Boulder  CO  80301
-				US
-
-00-1D-DE   (hex)		Zhejiang Broadcast&Television Technology Co.,Ltd.
-001DDE     (base 16)		Zhejiang Broadcast&Television Technology Co.,Ltd.
-				Building No.16,Xidoumen Industry Park,Wenyi Road,
-				Hangzhou  Zhejiang  310012
-				CN
-
-00-1D-E5   (hex)		Cisco Systems, Inc
-001DE5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-EC   (hex)		Marusys
-001DEC     (base 16)		Marusys
-				Eunsung Bldg. 5F
-				Seoul    135-763
-				KR
-
-00-1D-E8   (hex)		Nikko Denki Tsushin Corporation(NDTC)
-001DE8     (base 16)		Nikko Denki Tsushin Corporation(NDTC)
-				440 Kamoshida-town, Aoba-ku
-				Yokohama    227-0033
-				JP
-
-00-1D-DA   (hex)		Mikroelektronika spol. s r. o.
-001DDA     (base 16)		Mikroelektronika spol. s r. o.
-				Dráby 849
-				Vysoké Mýto  CZ  566 01
-				CZ
-
-00-1D-B0   (hex)		FuJian HengTong Information Technology Co.,Ltd
-001DB0     (base 16)		FuJian HengTong Information Technology Co.,Ltd
-				No.14-804,Building 2,JinXiuFuCheng,No.338,HuaLin Road
-				FuZhou City  FuJian Province  350001
-				CN
-
-00-1D-B8   (hex)		Intoto Inc.
-001DB8     (base 16)		Intoto Inc.
-				3100 De La Cruz Blvd.  #300
-				Santa Clara  CA  95054
-				US
-
-00-1D-F5   (hex)		Sunshine Co,LTD
-001DF5     (base 16)		Sunshine Co,LTD
-				1-3-5 Kojimachi
-				TOKYO  Kanto region  102-0083
-				JP
-
-00-1D-F0   (hex)		Vidient Systems, Inc.
-001DF0     (base 16)		Vidient Systems, Inc.
-				4000 Burton Drive
-				Santa Clara  CA  94054
-				US
-
-00-1D-FE   (hex)		Palm, Inc
-001DFE     (base 16)		Palm, Inc
-				950 West Maude Ave
-				Sunnyvale  CA  94085
-				US
-
-00-1D-52   (hex)		Defzone B.V.
-001D52     (base 16)		Defzone B.V.
-				Transportcentrum 10
-				Enschede  Overijssel  7547 RW
-				NL
-
-00-1D-4A   (hex)		Carestream Health, Inc.
-001D4A     (base 16)		Carestream Health, Inc.
-				150 Verona Street
-				Rochestser  NY  14608
-				US
-
-00-1D-96   (hex)		WatchGuard Video
-001D96     (base 16)		WatchGuard Video
-				3001 Summit Ave.
-				Plano  TX  75074
-				US
-
-00-1D-8F   (hex)		PureWave Networks
-001D8F     (base 16)		PureWave Networks
-				2660-C Marine Way
-				Mountain View  CA  94043
-				US
-
-00-1D-8C   (hex)		La Crosse Technology LTD
-001D8C     (base 16)		La Crosse Technology LTD
-				2809 Losey Blvd. So.
-				La Crosse  WI  54601
-				US
-
-00-1D-64   (hex)		Adam Communications Systems Int Ltd
-001D64     (base 16)		Adam Communications Systems Int Ltd
-				The Mission
-				Stockport  Cheshire  SK1 3AH
-				GB
-
-00-1D-5E   (hex)		COMING MEDIA CORP.
-001D5E     (base 16)		COMING MEDIA CORP.
-				BONA Bld. 4th Fl., 548-18
-				Seoul    135-158
-				KR
-
-00-1D-55   (hex)		ZANTAZ, Inc
-001D55     (base 16)		ZANTAZ, Inc
-				5758 W. Las Positas Avenue
-				Pleasanton  CA  94588
-				US
-
-00-1D-A1   (hex)		Cisco Systems, Inc
-001DA1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-71   (hex)		Cisco Systems, Inc
-001D71     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-65   (hex)		Microwave Radio Communications
-001D65     (base 16)		Microwave Radio Communications
-				101 Billerica Avemue, Bldg 6
-				N. Billerica  MA  01862
-				US
-
-00-1D-50   (hex)		SPINETIX SA
-001D50     (base 16)		SPINETIX SA
-				Parc Scientifique de l'EPFL, Bâtiment C
-				Lausanne  VD  1015
-				CH
-
-00-1D-45   (hex)		Cisco Systems, Inc
-001D45     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-69   (hex)		Knorr-Bremse IT-Services GmbH
-001D69     (base 16)		Knorr-Bremse IT-Services GmbH
-				Moosacher Str. 80
-				Muenchen  BY  80809
-				DE
-
-00-1C-F8   (hex)		Parade Technologies, Ltd.
-001CF8     (base 16)		Parade Technologies, Ltd.
-				C/O Parade Technologies, Inc.
-				Sunnyvale  CA  94085
-				US
-
-00-1C-F7   (hex)		AudioScience
-001CF7     (base 16)		AudioScience
-				729 west 16th st
-				Costa Mesa  California  92627
-				US
-
-00-1C-F6   (hex)		Cisco Systems, Inc
-001CF6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-F5   (hex)		Wiseblue Technology Limited
-001CF5     (base 16)		Wiseblue Technology Limited
-				Rm G5, 5/F, Kingsford Industrial Building Phase II, 26-32 Kwai Hei Street,
-				Kwai Chung  N.T.  
-				HK
-
-00-1C-EE   (hex)		SHARP Corporation
-001CEE     (base 16)		SHARP Corporation
-				22-22,Nagaike-cho
-				Osaka city  Osaka prefecture  545-8522
-				JP
-
-00-1D-07   (hex)		Shenzhen Sang Fei Consumer Communications Co.,Ltd
-001D07     (base 16)		Shenzhen Sang Fei Consumer Communications Co.,Ltd
-				11 Science and Technology Road,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1D-06   (hex)		HM Electronics, Inc.
-001D06     (base 16)		HM Electronics, Inc.
-				14110 Stowe Drive
-				Poway  CA  92064
-				US
-
-00-1D-01   (hex)		Neptune Digital
-001D01     (base 16)		Neptune Digital
-				Mednarodni mejni prehod 6
-				Vrtojba  Nova Gorica  5290
-				SI
-
-00-1D-33   (hex)		Maverick Systems Inc.
-001D33     (base 16)		Maverick Systems Inc.
-				908, Daerungposttower 2-cha, 182-13
-				Seoul    152-790
-				KR
-
-00-1D-2C   (hex)		Wavetrend Technologies (Pty) Limited
-001D2C     (base 16)		Wavetrend Technologies (Pty) Limited
-				Wavetrend House, Building 816/3
-				Gauteng    2021
-				ZA
-
-00-1C-CF   (hex)		LIMETEK
-001CCF     (base 16)		LIMETEK
-				#213-1, Byucksan Digital Valley II, 480-10, Gasan-dong,
-				Seoul    153-783
-				KR
-
-00-1D-24   (hex)		Aclara Power-Line Systems Inc.
-001D24     (base 16)		Aclara Power-Line Systems Inc.
-				945 Hornet Drive
-				Hazelwood  MO  63042
-				US
-
-00-1D-18   (hex)		Power Innovation GmbH
-001D18     (base 16)		Power Innovation GmbH
-				Rehland 2
-				Achim  Niedersachsen  28832
-				DE
-
-00-1D-1B   (hex)		Sangean Electronics Inc.
-001D1B     (base 16)		Sangean Electronics Inc.
-				No. 18, Lane 7, Li-De street
-				Chung Ho City  Taipei Hsien  235
-				TW
-
-00-1D-17   (hex)		Digital Sky Corporation
-001D17     (base 16)		Digital Sky Corporation
-				5-5-15 Sotokanda,
-				Chiyoda-ku  Tokyo  101-0021
-				JP
-
-00-1D-27   (hex)		NAC-INTERCOM
-001D27     (base 16)		NAC-INTERCOM
-				AVDA. RICARDO MELLA 123-B
-				VIGO  PONTEVEDRA  36330
-				ES
-
-00-1C-E3   (hex)		Optimedical Systems
-001CE3     (base 16)		Optimedical Systems
-				235 Hembree Park Drive
-				Roswell  GA  30076
-				US
-
-00-1C-DE   (hex)		Interactive Multimedia eXchange Inc.
-001CDE     (base 16)		Interactive Multimedia eXchange Inc.
-				NO. 165 Wenlin Road.
-				Taipei  Taiwan  111
-				TW
-
-00-1D-36   (hex)		ELECTRONICS CORPORATION OF INDIA LIMITED
-001D36     (base 16)		ELECTRONICS CORPORATION OF INDIA LIMITED
-				CONTROL AND AUTOMATION DIVISION-3
-				HYDERABAD  ANDHRA PRADESH  500 062
-				IN
-
-00-1C-80   (hex)		New Business Division/Rhea-Information CO., LTD.
-001C80     (base 16)		New Business Division/Rhea-Information CO., LTD.
-				4F 594 Yeong Pung Bldg, Gueui-Dong
-				Seoul  Gwangjin-Gu  143-200
-				KR
-
-00-1C-83   (hex)		New Level Telecom Co., Ltd.
-001C83     (base 16)		New Level Telecom Co., Ltd.
-				INNOPLEX 1-703
-				Seoul    153-803
-				KR
-
-00-1C-76   (hex)		The Wandsworth Group Ltd
-001C76     (base 16)		The Wandsworth Group Ltd
-				Albert Drive
-				Woking  Surrey  GU21 5SE
-				GB
-
-00-1C-72   (hex)		Mayer & Cie GmbH & Co KG
-001C72     (base 16)		Mayer & Cie GmbH & Co KG
-				Emil Mayer Strasse 10
-				Albstadt  Baden-Württemberg  72461
-				DE
-
-00-1C-AD   (hex)		Wuhan Telecommunication Devices Co.,Ltd
-001CAD     (base 16)		Wuhan Telecommunication Devices Co.,Ltd
-				88 Youkeyuan Road,Hongshan District
-				Wuhan  Hubei  430074
-				CN
-
-00-1C-A7   (hex)		International Quartz Limited
-001CA7     (base 16)		International Quartz Limited
-				2nd Floor, 2, Dai Wang Street,
-				  Hong Kong  852
-				CN
-
-00-1C-AB   (hex)		Meyer Sound Laboratories, Inc.
-001CAB     (base 16)		Meyer Sound Laboratories, Inc.
-				2832 San Pablo Ave.
-				Berkeley  CA  94702
-				US
-
-00-1C-9E   (hex)		Dualtech IT AB
-001C9E     (base 16)		Dualtech IT AB
-				Banehagsgatan 1F
-				GOTHENBURG  Västra Götaland  41451
-				SE
-
-00-1C-C8   (hex)		INDUSTRONIC Industrie-Electronic GmbH & Co. KG
-001CC8     (base 16)		INDUSTRONIC Industrie-Electronic GmbH & Co. KG
-				Carl-Jacob-Kolb-Weg 1
-				Wertheim  Baden-Württemberg  97877
-				DE
-
-00-1C-C6   (hex)		ProStor Systems
-001CC6     (base 16)		ProStor Systems
-				5555 Central Avenue
-				Boulder  Colorado  80301
-				US
-
-00-1C-BE   (hex)		Nintendo Co., Ltd.
-001CBE     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1C-94   (hex)		LI-COR Biosciences
-001C94     (base 16)		LI-COR Biosciences
-				4647 Superior Street
-				Lincoln  NE  68504
-				US
-
-00-1C-8C   (hex)		DIAL TECHNOLOGY LTD.
-001C8C     (base 16)		DIAL TECHNOLOGY LTD.
-				6F-4, NO.18, LANE.609, SEC.5, CHONGSIN RD.,
-				SANCHONG CITY  TAIPEI COUNTY  241
-				TW
-
-00-1C-CA   (hex)		Shanghai Gaozhi Science & Technology Development Co.
-001CCA     (base 16)		Shanghai Gaozhi Science & Technology Development Co.
-				No.283 Qin Jiang Rd. Shanghai,China
-				Shanghai    200233
-				CN
-
-00-1C-C9   (hex)		Kaise Electronic Technology Co., Ltd.
-001CC9     (base 16)		Kaise Electronic Technology Co., Ltd.
-				No.678, Wunsyue Rd., Zuoying District,
-				Kaohsiung    813
-				TW
-
-00-1C-93   (hex)		ExaDigm Inc
-001C93     (base 16)		ExaDigm Inc
-				2871 Pullman St
-				Santa Ana  CA  92705
-				US
-
-00-1C-85   (hex)		Eunicorn
-001C85     (base 16)		Eunicorn
-				226-16 unbo b/d suckchon-dong songpa-gu
-				seoul    138845
-				KR
-
-00-1C-67   (hex)		Pumpkin Networks, Inc.
-001C67     (base 16)		Pumpkin Networks, Inc.
-				3FL JungHo Bldg, 108-4 Sangdo-Dong, Dongjak-Gu
-				SEOUL    156-030
-				KR
-
-00-1C-60   (hex)		CSP Frontier Technologies,Inc.
-001C60     (base 16)		CSP Frontier Technologies,Inc.
-				3-2-3,Sasazuka
-				Shibuya-ku  Tokyo  151-0073
-				JP
-
-00-1C-6A   (hex)		Weiss Engineering Ltd.
-001C6A     (base 16)		Weiss Engineering Ltd.
-				Florastrasse 42
-				Uster  ZH  8610
-				CH
-
-00-1C-0A   (hex)		Shenzhen AEE Technology Co.,Ltd.
-001C0A     (base 16)		Shenzhen AEE Technology Co.,Ltd.
-				1st Floor B Building, Shenzhen,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1C-0D   (hex)		G-Technology, Inc.
-001C0D     (base 16)		G-Technology, Inc.
-				1653 Stanford Street
-				Santa Monica  CA  90404
-				US
-
-00-1C-03   (hex)		Betty TV Technology AG
-001C03     (base 16)		Betty TV Technology AG
-				Hardturmstrasse 2
-				Zurich    80005
-				CH
-
-00-1C-46   (hex)		QTUM
-001C46     (base 16)		QTUM
-				#507 Byucksan/Kyungin Digital Valley 2 481-10
-				Seoul    153-783
-				KR
-
-00-1C-42   (hex)		Parallels, Inc.
-001C42     (base 16)		Parallels, Inc.
-				660 SW 39h Street
-				Renton  WA  98057
-				US
-
-00-1C-3E   (hex)		ECKey Corporation
-001C3E     (base 16)		ECKey Corporation
-				206A W James St
-				Lancaster  PA  17603
-				US
-
-00-1C-51   (hex)		Celeno Communications
-001C51     (base 16)		Celeno Communications
-				22 Zarhin Street
-				Ra'anana    43665
-				IL
-
-00-1C-54   (hex)		Hillstone Networks Inc
-001C54     (base 16)		Hillstone Networks Inc
-				A-1905 e-Wing Center
-				Beijing    100086
-				CN
-
-00-1C-59   (hex)		DEVON IT
-001C59     (base 16)		DEVON IT
-				1100 FIRST AVENUE
-				KING OF PRUSSIA  PA  19406
-				US
-
-00-1C-22   (hex)		Aeris Elettronica s.r.l.
-001C22     (base 16)		Aeris Elettronica s.r.l.
-				Zona Ind.le Vallecupa
-				Colonnella  Teramo  64010
-				IT
-
-00-1C-1D   (hex)		CHENZHOU GOSPELL DIGITAL TECHNOLOGY CO.,LTD
-001C1D     (base 16)		CHENZHOU GOSPELL DIGITAL TECHNOLOGY CO.,LTD
-				BAILUTANG,SUXIAN DISTRICT,
-				CHENZHOU  HUNAN  423025
-				CN
-
-00-1C-39   (hex)		S Netsystems Inc.
-001C39     (base 16)		S Netsystems Inc.
-				10F Sungwon Bldg., 141 Samsung-Dong
-				Seoul    135-716
-				KR
-
-00-1C-37   (hex)		Callpod, Inc.
-001C37     (base 16)		Callpod, Inc.
-				850 W. Jackson
-				Chicago  IL  60607
-				US
-
-00-1C-33   (hex)		Sutron
-001C33     (base 16)		Sutron
-				21300 Ridgetop Cir
-				Sterling  VA  20166
-				US
-
-00-1B-F6   (hex)		CONWISE Technology Corporation Ltd.
-001BF6     (base 16)		CONWISE Technology Corporation Ltd.
-				2F No.44, Park Ave. 2, Hsinchu Science Park
-				Hsinchu City    30075
-				TW
-
-00-1B-F8   (hex)		Digitrax Inc.
-001BF8     (base 16)		Digitrax Inc.
-				2443 Transmitter Rd,
-				Panama City  FL  32404
-				US
-
-00-1C-2F   (hex)		Pfister GmbH
-001C2F     (base 16)		Pfister GmbH
-				Stätzlinger  SStraße 70
-				Augsburg  Bavaria  86165
-				DE
-
-00-1C-27   (hex)		Sunell Electronics Co.
-001C27     (base 16)		Sunell Electronics Co.
-				3rd Floor,Bldg.514,BaGua Rd
-				ShenZhen  Guangdong  518029
-				CN
-
-00-1C-0F   (hex)		Cisco Systems, Inc
-001C0F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-48   (hex)		WiDeFi, Inc.
-001C48     (base 16)		WiDeFi, Inc.
-				1333 Gateway Blvd
-				Melbourne  FL  32901
-				US
-
-00-1B-AD   (hex)		iControl Incorporated
-001BAD     (base 16)		iControl Incorporated
-				3235 Kifer Road
-				Santa Clara  California  95051
-				US
-
-00-1B-A7   (hex)		Lorica Solutions
-001BA7     (base 16)		Lorica Solutions
-				275 Northpointe Parkway
-				Amherst  NY  14228
-				US
-
-00-1B-A5   (hex)		MyungMin Systems, Inc.
-001BA5     (base 16)		MyungMin Systems, Inc.
-				#410,Doosan Venture Dime 2-cha,1307-37
-				Kyungki-do    431-060
-				KR
-
-00-1B-F1   (hex)		Nanjing SilverNet Software Co., Ltd.
-001BF1     (base 16)		Nanjing SilverNet Software Co., Ltd.
-				3/F, 10 building, Nanjing World Window Technology & Software Park
-				Nanjing  Jiangsu  210013
-				CN
-
-00-1B-EF   (hex)		Blossoms Digital Technology Co.,Ltd.
-001BEF     (base 16)		Blossoms Digital Technology Co.,Ltd.
-				BLK25,Hengfeng Ind.City,Hezhou
-				Shenzhen  Guangdong  518126
-				CN
-
-00-1B-EB   (hex)		DMP Electronics INC.
-001BEB     (base 16)		DMP Electronics INC.
-				8F., No.12, Wucyuan 7th Rd.,
-				Taipei County    248
-				TW
-
-00-1B-A2   (hex)		IDS Imaging Development Systems GmbH
-001BA2     (base 16)		IDS Imaging Development Systems GmbH
-				Dimbacher Str. 6
-				Obersulm  BW  74182
-				DE
-
-00-1B-9D   (hex)		Novus Security Sp. z o.o.
-001B9D     (base 16)		Novus Security Sp. z o.o.
-				ul. Puławska 431
-				Warsaw  woj. mazowieckie  02-801
-				PL
-
-00-1B-C9   (hex)		FSN DISPLAY INC
-001BC9     (base 16)		FSN DISPLAY INC
-				Baeksuk-Dong 1141-1, Ilsan Techno Town 1009
-				Koyang-si  Kyeonggi-Do  410722
-				KR
-
-00-1B-C3   (hex)		Mobisolution Co.,Ltd
-001BC3     (base 16)		Mobisolution Co.,Ltd
-				848-16
-				Gumi  Gyeongbuk  730-300
-				KR
-
-00-1B-CE   (hex)		Measurement Devices Ltd
-001BCE     (base 16)		Measurement Devices Ltd
-				Redwood House
-				York  Yorkshire  YO266QR
-				GB
-
-00-1B-B8   (hex)		BLUEWAY ELECTRONIC CO;LTD
-001BB8     (base 16)		BLUEWAY ELECTRONIC CO;LTD
-				Workshop B,Dong Feng Village,
-				HuiZhou  GuangDong  516008
-				CN
-
-00-1B-B2   (hex)		Intellect International NV
-001BB2     (base 16)		Intellect International NV
-				Kleine Kloosterstraat 23
-				Zaventem  Vlaamse brabant  1932
-				BE
-
-00-1B-E7   (hex)		Postek Electronics Co., Ltd.
-001BE7     (base 16)		Postek Electronics Co., Ltd.
-				Suite 510, Shanghang Building
-				Shen Zhen  Guang Dong  518028
-				CN
-
-00-1B-E3   (hex)		Health Hero Network, Inc.
-001BE3     (base 16)		Health Hero Network, Inc.
-				2000 Seaport Blvd.
-				Redwood City  CA  94063
-				US
-
-00-1B-DC   (hex)		Vencer Co., Ltd.
-001BDC     (base 16)		Vencer Co., Ltd.
-				20F-1, No.77, Sec.1, Hsin Tai Wu Rd.,
-				Hsi Chih  Taipei  221
-				TW
-
-00-1B-D5   (hex)		Cisco Systems, Inc
-001BD5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1B-95   (hex)		VIDEO SYSTEMS SRL
-001B95     (base 16)		VIDEO SYSTEMS SRL
-				Loc. Gorizzo, 16
-				CAMINO AL TAGLIAMENTO  UD  
-				IT
-
-00-1B-90   (hex)		Cisco Systems, Inc
-001B90     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1B-7F   (hex)		TMN Technologies Telecomunicacoes Ltda
-001B7F     (base 16)		TMN Technologies Telecomunicacoes Ltda
-				Rua Nilza, 422
-				São Paulo  SP  03651-120
-				BR
-
-00-1B-7E   (hex)		Beckmann GmbH
-001B7E     (base 16)		Beckmann GmbH
-				Brandtstraße 1
-				Hoevelhof  NRW  33161
-				DE
-
-00-1B-7A   (hex)		Nintendo Co., Ltd.
-001B7A     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1B-34   (hex)		Focus System Inc.
-001B34     (base 16)		Focus System Inc.
-				19F-1, No. 266 Wen Hwa 2nd Rd., Sec. 1
-				Linkou  Taipei County  
-				TW
-
-00-1B-3A   (hex)		SIMS Corp.
-001B3A     (base 16)		SIMS Corp.
-				RAON Bldg, 9F, 92-8, Wonhyoro-2ga, Yongsan-gu
-				Seoul    140-847
-				KR
-
-00-1B-5F   (hex)		Alien Technology
-001B5F     (base 16)		Alien Technology
-				18220 Butterfield Blvd.
-				Morgan Hill  CA  95037
-				US
-
-00-1B-61   (hex)		Digital Acoustics, LLC
-001B61     (base 16)		Digital Acoustics, LLC
-				37 Sherwood Terrace
-				Lake Bluff  IL  60044
-				US
-
-00-1B-5E   (hex)		BPL Limited
-001B5E     (base 16)		BPL Limited
-				BPL Towers
-				Bangalore  Karnataka  560001
-				IN
-
-00-1B-5C   (hex)		Azuretec Co., Ltd.
-001B5C     (base 16)		Azuretec Co., Ltd.
-				3F, No.8, Alley 8, Lane 45, Baoxing Rd., Xindian Dist.,
-				New Taipei City  Taiwan  231
-				TW
-
-00-1B-72   (hex)		Sicep s.p.a.
-001B72     (base 16)		Sicep s.p.a.
-				Via calabria, 14
-				Certaldo    50052
-				IT
-
-00-1B-74   (hex)		MiraLink Corporation
-001B74     (base 16)		MiraLink Corporation
-				111 SW 5th Ave.
-				Portland  OR  97204
-				US
-
-00-1B-6D   (hex)		Midtronics, Inc.
-001B6D     (base 16)		Midtronics, Inc.
-				7000 Monroe St.
-				Willowbrook  IL  60527
-				US
-
-00-1B-6F   (hex)		Teletrak Ltd
-001B6F     (base 16)		Teletrak Ltd
-				214 Kepa Road
-				Auckland    1071
-				NZ
-
-00-1B-4B   (hex)		SANION Co., Ltd.
-001B4B     (base 16)		SANION Co., Ltd.
-				#208 ACETECHNO TOWER, 55-7, MULLAE-DONG 3GA,
-				YEONGDEUNGPO-GU  SEOUL  150-992
-				KR
-
-00-1B-2D   (hex)		Med-Eng Systems Inc.
-001B2D     (base 16)		Med-Eng Systems Inc.
-				2400 St. Laurent Blvd.
-				Ottawa  Ontario  K1G 6C4
-				CA
-
-00-1B-87   (hex)		Deepsound Tech. Co., Ltd
-001B87     (base 16)		Deepsound Tech. Co., Ltd
-				3F No. 576 Sec. 1, Minsheng N. Rd., Gueishan Township,
-				Taoyuan    333
-				TW
-
-00-1B-4D   (hex)		Areca Technology Corporation
-001B4D     (base 16)		Areca Technology Corporation
-				8F., No. 22, Lane 35, Ji-Hu Rd.
-				Taipei    114
-				TW
-
-00-1A-E3   (hex)		Cisco Systems, Inc
-001AE3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-DF   (hex)		Interactivetv Pty Limited
-001ADF     (base 16)		Interactivetv Pty Limited
-				Suite 10 Level 3
-				Pyrmont, Sydney  NSW  2009
-				US
-
-00-1A-E1   (hex)		EDGE ACCESS INC
-001AE1     (base 16)		EDGE ACCESS INC
-				5440 BEAUMONT CENTER BLVD
-				TAMPA  FL  33634
-				US
-
-00-1A-E8   (hex)		Unify Software and Solutions GmbH & Co. KG
-001AE8     (base 16)		Unify Software and Solutions GmbH & Co. KG
-				 Mies-van-der-Rohe-Strasse 6
-				Munich    80807
-				DE
-
-00-1A-E9   (hex)		Nintendo Co., Ltd.
-001AE9     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1A-E5   (hex)		Mvox Technologies Inc.
-001AE5     (base 16)		Mvox Technologies Inc.
-				19050 Pruneridge Ave
-				Cupertino  CA  95014
-				US
-
-00-1A-E4   (hex)		Medicis Technologies Corporation
-001AE4     (base 16)		Medicis Technologies Corporation
-				11818 North Creek Parkway N.
-				Bothell  WA  98011
-				US
-
-00-1A-F8   (hex)		Copley Controls Corporation
-001AF8     (base 16)		Copley Controls Corporation
-				20 Dan Road
-				Canton  MA  02021
-				US
-
-00-1A-F5   (hex)		PENTAONE. CO., LTD.
-001AF5     (base 16)		PENTAONE. CO., LTD.
-				Hyo Chang Bldg, 3F, 1013-6, Inkye-dong Paldal-Gu,
-				Suwon City  Gyunggi-Do  422-833
-				KR
-
-00-1A-ED   (hex)		INCOTEC GmbH
-001AED     (base 16)		INCOTEC GmbH
-				Blomestrasse 25 - 27
-				Bielefeld  NRW  33609
-				DE
-
-00-1A-EE   (hex)		Shenztech Ltd
-001AEE     (base 16)		Shenztech Ltd
-				813, 8F, HOLLYWOOD PLAZA, 610 NATHAN ROAD,
-				KOWLOON    852
-				HK
-
-00-1A-CE   (hex)		YUPITERU CORPORATION
-001ACE     (base 16)		YUPITERU CORPORATION
-				3, Dannoue, Iwazu-cho, Okazaki-city, Aichi
-				Okazaki  Aichi  444-2144
-				JP
-
-00-1A-CC   (hex)		Celestial Semiconductor, Ltd
-001ACC     (base 16)		Celestial Semiconductor, Ltd
-				Ugland House, South Church Street,
-				George Town,   Cayman Islands  00000
-				KY
-
-00-1A-D2   (hex)		Eletronica Nitron Ltda
-001AD2     (base 16)		Eletronica Nitron Ltda
-				Rua Dr. Ulisses Escobar 415
-				Camanducaia  Minas Gerais  37650-000
-				BR
-
-00-1B-1D   (hex)		Phoenix International Co., Ltd
-001B1D     (base 16)		Phoenix International Co., Ltd
-				11F. No.42-1, Sec.1, Zhongyang N. Rd. Beitou
-				Taipei    112
-				TW
-
-00-1B-1A   (hex)		e-trees Japan, Inc.
-001B1A     (base 16)		e-trees Japan, Inc.
-				Oowada-cho 2-9-2
-				Hachioji-city  Tokyo  150-0001
-				JP
-
-00-1B-12   (hex)		Apprion
-001B12     (base 16)		Apprion
-				Nasa Ames Rerearch Center
-				Moffett Field  California  94035
-				US
-
-00-1A-FE   (hex)		SOFACREAL
-001AFE     (base 16)		SOFACREAL
-				149 avenue du MAINE
-				PARIS  Region Parisienne  75014
-				FR
-
-00-1A-F1   (hex)		Embedded Artists AB
-001AF1     (base 16)		Embedded Artists AB
-				Davidshallsgatan 16
-				Malmoe    21145
-				SE
-
-00-1B-0D   (hex)		Cisco Systems, Inc
-001B0D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1B-0A   (hex)		Intelligent Distributed Controls Ltd
-001B0A     (base 16)		Intelligent Distributed Controls Ltd
-				Keynes House, Chester Park
-				Derby  Derbyshire  DE21 4AS
-				GB
-
-00-1A-B1   (hex)		Asia Pacific Satellite Industries Co., Ltd.
-001AB1     (base 16)		Asia Pacific Satellite Industries Co., Ltd.
-				9th FL, IT Castle 2-Dong, #550-1, Gasan-Dong, GeumCheon-Gu,
-				Seoul    153-768
-				KR
-
-00-1A-B7   (hex)		Ethos Networks LTD.
-001AB7     (base 16)		Ethos Networks LTD.
-				2 Maskit St.
-				Herzlia    46766
-				IL
-
-00-1A-B2   (hex)		Cyber Solutions Inc.
-001AB2     (base 16)		Cyber Solutions Inc.
-				6-6-3, Minami Yoshinari
-				Sendai  Miyagi-ken  989-3204
-				JP
-
-00-1A-97   (hex)		fitivision technology Inc.
-001A97     (base 16)		fitivision technology Inc.
-				8F, No. 356, Sec. 1, Neihu Rd
-				Taipei    114
-				TW
-
-00-1A-90   (hex)		Trópico Sistemas e Telecomunicações da Amazônia LTDA. 
-001A90     (base 16)		Trópico Sistemas e Telecomunicações da Amazônia LTDA. 
-				Rod.  Campinas-Mogi-Mirim (SP 340)  Km 118,5
-				Campinas  São Paulo  13.086-902
-				BR
-
-00-1A-94   (hex)		Votronic GmbH
-001A94     (base 16)		Votronic GmbH
-				Saarbruecker Str. 8
-				St. Ingbert  Saarland  66386
-				DE
-
-00-1A-C7   (hex)		UNIPOINT
-001AC7     (base 16)		UNIPOINT
-				7F Gwangsung Bld 831-47 YeokSam-Dong
-				Seoul    135-936
-				KR
-
-00-1A-C0   (hex)		JOYBIEN TECHNOLOGIES CO., LTD.
-001AC0     (base 16)		JOYBIEN TECHNOLOGIES CO., LTD.
-				14F-7, NO.2, JIAN 8TH RD.,
-				NEW TAIPEI CITY  TAIWAN  23511
-				TW
-
-00-1A-9E   (hex)		ICON Digital International Limited
-001A9E     (base 16)		ICON Digital International Limited
-				Suite2209, 22/F., SkyLine Tower,
-				    
-				CN
-
-00-1A-98   (hex)		Asotel Communication Limited Taiwan Branch
-001A98     (base 16)		Asotel Communication Limited Taiwan Branch
-				3G17, No5, Hsin Yi Road, Sec. 5
-				Taipei    110
-				TW
-
-00-1A-72   (hex)		Mosart Semiconductor Corp.
-001A72     (base 16)		Mosart Semiconductor Corp.
-				23F., No.33, Sec.1,
-				Taipei    220
-				TW
-
-00-1A-68   (hex)		Weltec Enterprise Co., Ltd.
-001A68     (base 16)		Weltec Enterprise Co., Ltd.
-				2F, No. 351 Yung Ho Rd.
-				Chung Ho    235
-				TW
-
-00-1A-C2   (hex)		YEC Co.,Ltd.
-001AC2     (base 16)		YEC Co.,Ltd.
-				543-9 Tsuruma
-				Machida  Tokyo  194-0004
-				JP
-
-00-1A-A5   (hex)		BRN Phoenix
-001AA5     (base 16)		BRN Phoenix
-				2500 Augustine Drive, Suite 200
-				Santa Clara  CA  95054
-				US
-
-00-1A-A2   (hex)		Cisco Systems, Inc
-001AA2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-9C   (hex)		RightHand Technologies, Inc.
-001A9C     (base 16)		RightHand Technologies, Inc.
-				7450 W Wilson Avenue
-				Chicago  IL  60706
-				US
-
-00-1A-7E   (hex)		LN Srithai Comm Ltd.
-001A7E     (base 16)		LN Srithai Comm Ltd.
-				71/12 M.5, Bangna-Trad Rd, KM.52, Thakam
-				Bangpakong  Chachoengsao  24130
-				TH
-
-00-1A-5A   (hex)		Korea Electric Power Data Network  (KDN) Co., Ltd
-001A5A     (base 16)		Korea Electric Power Data Network  (KDN) Co., Ltd
-				665 NAESON-DONG,
-				GYEONGGI-DO  UIWANG-SI, NAESON-DONG  437-082
-				KR
-
-00-1A-5F   (hex)		KitWorks.fi Ltd.
-001A5F     (base 16)		KitWorks.fi Ltd.
-				Snowpolis
-				Vuokatti  Kainuu  88610
-				FI
-
-00-1A-37   (hex)		Lear Corporation
-001A37     (base 16)		Lear Corporation
-				Industriestrasse 48
-				Kronach  Bayern  96317
-				DE
-
-00-1A-38   (hex)		Sanmina-SCI
-001A38     (base 16)		Sanmina-SCI
-				13000 South Memorial Parkway
-				Huntsville  AL  35803
-				US
-
-00-1A-2B   (hex)		Ayecom Technology Co., Ltd.
-001A2B     (base 16)		Ayecom Technology Co., Ltd.
-				No. 25, R&D Road 2, Science-Based Industrial Park
-				Hsinchu    300
-				TW
-
-00-1A-28   (hex)		ASWT Co., LTD. Taiwan Branch H.K.
-001A28     (base 16)		ASWT Co., LTD. Taiwan Branch H.K.
-				7F., No.3 Lane 91, Dongmei Rd.
-				Hsinchu    30070
-				TW
-
-00-1A-2C   (hex)		SATEC Co.,LTD
-001A2C     (base 16)		SATEC Co.,LTD
-				358-4, Palgok2-Dong, Sangnok-Gu
-				Ansan-Si  Kyungki-Do  426-190
-				KR
-
-00-1A-27   (hex)		Ubistar
-001A27     (base 16)		Ubistar
-				8F, Seongo Building, 587-23
-				Seoul    135-747
-				KR
-
-00-1A-21   (hex)		Brookhuis Applied Technologies BV
-001A21     (base 16)		Brookhuis Applied Technologies BV
-				PO Box 79
-				Enschede    NL-7500
-				NL
-
-00-19-FF   (hex)		Finnzymes
-0019FF     (base 16)		Finnzymes
-				800 West Cummings Park
-				Woburn  MA  01801
-				US
-
-00-19-FA   (hex)		Cable Vision Electronics CO., LTD.
-0019FA     (base 16)		Cable Vision Electronics CO., LTD.
-				12F-3, No.16, Chien Pa Rd.
-				Chung Ho City  Taipei Hsien  235
-				TW
-
-00-1A-5D   (hex)		Mobinnova Corp.
-001A5D     (base 16)		Mobinnova Corp.
-				11F, 845, CHUNG SHAN RD
-				TAOYUAN    33059
-				TW
-
-00-1A-4D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-001A4D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				
-				Pin-Jen  Taoyuan  324
-				TW
-
-00-1A-48   (hex)		Takacom Corporation
-001A48     (base 16)		Takacom Corporation
-				304-709 Aza-Nishiyanma
-				Toki-shi  Gifu-ken  509-5202
-				JP
-
-00-1A-0B   (hex)		BONA TECHNOLOGY INC.
-001A0B     (base 16)		BONA TECHNOLOGY INC.
-				4F, E-Place Bldg., 719-24
-				Seoul    135-080
-				KR
-
-00-1A-06   (hex)		OpVista, Inc.
-001A06     (base 16)		OpVista, Inc.
-				870 North McCarthy Blvd.
-				Milpitas  California  95035
-				US
-
-00-1A-2E   (hex)		Ziova Coporation
-001A2E     (base 16)		Ziova Coporation
-				Unit 3, 7-9 Sherriffs road
-				Lonsdale  S.A.  5160
-				AU
-
-00-1A-32   (hex)		ACTIVA MULTIMEDIA
-001A32     (base 16)		ACTIVA MULTIMEDIA
-				SICP CSE
-				SANT JOAN DESPI  BARCELONA  08970
-				ES
-
-00-1A-00   (hex)		MATRIX INC.
-001A00     (base 16)		MATRIX INC.
-				AS bld.3-13-20
-				Osaka    530-0047
-				JP
-
-00-19-AD   (hex)		BOBST SA
-0019AD     (base 16)		BOBST SA
-				rte des flumeaux 50
-				PRILLY  VD  1008
-				CH
-
-00-19-A2   (hex)		ORDYN TECHNOLOGIES
-0019A2     (base 16)		ORDYN TECHNOLOGIES
-				Ozone Manay Tech Park, 
-				Bangalore     560 068
-				IN
-
-00-19-A5   (hex)		RadarFind Corporation
-0019A5     (base 16)		RadarFind Corporation
-				2100 Gateway Centre Blvd., Suite 150
-				Morrisville  NC  27560
-				US
-
-00-19-93   (hex)		Changshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea
-001993     (base 16)		Changshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea
-				No. 8 Jianye Road
-				Changshu  Jiangsu  215500
-				CN
-
-00-19-F1   (hex)		Star Communication Network Technology Co.,Ltd
-0019F1     (base 16)		Star Communication Network Technology Co.,Ltd
-				10/F,Tower B,SOHO New Town,No.88 jianguoRoad,Chaoyang District
-				Beijing    100022
-				CN
-
-00-19-EC   (hex)		Sagamore Systems, Inc.
-0019EC     (base 16)		Sagamore Systems, Inc.
-				55 Middlesex Street
-				North Chelmsford  MA  01863
-				US
-
-00-19-CC   (hex)		RCG (HK) Ltd
-0019CC     (base 16)		RCG (HK) Ltd
-				9/F., Core C, Cyberport 3
-				    
-				HK
-
-00-19-C8   (hex)		AnyDATA Corporation
-0019C8     (base 16)		AnyDATA Corporation
-				18902 Bardeen Ave.
-				Irvine  CA  91612
-				US
-
-00-19-C4   (hex)		Infocrypt Inc.
-0019C4     (base 16)		Infocrypt Inc.
-				711, BYUCKSAN DIGITAL VALLEY 1 212-16,
-				Seoul    152-050
-				KR
-
-00-19-BC   (hex)		ELECTRO CHANCE SRL
-0019BC     (base 16)		ELECTRO CHANCE SRL
-				CARHUE 3179
-				CAPITAL FEDERAL  BUENOS AIRES  1440
-				AR
-
-00-19-9B   (hex)		Diversified Technical Systems, Inc.
-00199B     (base 16)		Diversified Technical Systems, Inc.
-				909 Electric Avenue
-				Seal Beach  California  90740
-				US
-
-00-19-90   (hex)		ELM DATA Co., Ltd.
-001990     (base 16)		ELM DATA Co., Ltd.
-				2-15 TECHNO-PARK 1-CHOME
-				SAPPORO  HOKKAIDO  004-0015
-				JP
-
-00-19-8F   (hex)		Nokia Bell N.V.
-00198F     (base 16)		Nokia Bell N.V.
-				Copernicuslaan 50
-				Antwerp    B-2018
-				BE
-
-00-19-D8   (hex)		MAXFOR
-0019D8     (base 16)		MAXFOR
-				#E 809, Bundang, Techno-Park
-				Seongnam-City  Gyeonggi-Do  463-760
-				KR
-
-00-19-D5   (hex)		IP Innovations, Inc.
-0019D5     (base 16)		IP Innovations, Inc.
-				1517 146th Ave
-				Dorr  MI  49323
-				US
-
-00-19-A3   (hex)		asteel electronique atlantique
-0019A3     (base 16)		asteel electronique atlantique
-				za de la lande de saint jean
-				sainte marie de redon    35600
-				FR
-
-00-19-EA   (hex)		TeraMage Technologies Co., Ltd.
-0019EA     (base 16)		TeraMage Technologies Co., Ltd.
-				Golden Land Building Suite 907
-				Beijing    100016
-				CN
-
-00-19-6E   (hex)		Metacom (Pty) Ltd.
-00196E     (base 16)		Metacom (Pty) Ltd.
-				6 Ndabeni Business Park
-				Cape Town  Western Cape  7405
-				ZA
-
-00-19-65   (hex)		YuHua TelTech (ShangHai) Co., Ltd.
-001965     (base 16)		YuHua TelTech (ShangHai) Co., Ltd.
-				YuHua R&D Building,27 xin jin qiao road,
-				SHANGHAI    201206
-				CN
-
-00-19-66   (hex)		Asiarock Technology Limited
-001966     (base 16)		Asiarock Technology Limited
-				P.O. Box957, Offshore Incorporations Centre
-				Road Town  Tortola  
-				VG
-
-00-19-7B   (hex)		Picotest Corp.
-00197B     (base 16)		Picotest Corp.
-				8F-1, 286-9, Hsin-Ya Rd., 80673
-				Kaohsiung    80673
-				TW
-
-00-19-73   (hex)		Zeugma Systems
-001973     (base 16)		Zeugma Systems
-				Suite 250
-				Richmond  BC  V6V 2R2
-				CA
-
-00-19-75   (hex)		Beijing Huisen networks technology Inc
-001975     (base 16)		Beijing Huisen networks technology Inc
-				Jia#2 of Xili of Baiyun road,Xicheng district
-				Beijing    100045
-				CN
-
-00-19-40   (hex)		Rackable Systems
-001940     (base 16)		Rackable Systems
-				1933 Milmont Drive
-				Milpitas  CA  95035
-				US
-
-00-19-3C   (hex)		HighPoint Technologies Incorporated
-00193C     (base 16)		HighPoint Technologies Incorporated
-				1161 Cadillac Court
-				Milpitas  CA  95035
-				US
-
-00-19-5C   (hex)		Innotech Corporation
-00195C     (base 16)		Innotech Corporation
-				3-17-6
-				Yokohama  Kanagawa  222-8580
-				JP
-
-00-19-5F   (hex)		Valemount Networks Corporation
-00195F     (base 16)		Valemount Networks Corporation
-				1201- 5th Ave
-				Valemount  BC  V0E2Z0
-				CA
-
-00-19-48   (hex)		AireSpider Networks
-001948     (base 16)		AireSpider Networks
-				1171 Montague Express Way
-				Milpitas  CA  95035
-				US
-
-00-19-43   (hex)		Belden
-001943     (base 16)		Belden
-				793 Fort Mill Highway
-				Fort Mill  South Carolina  29715
-				US
-
-00-19-2E   (hex)		Spectral Instruments, Inc.
-00192E     (base 16)		Spectral Instruments, Inc.
-				420 N Bonita Ave
-				Tucson  AZ  85745
-				US
-
-00-19-2B   (hex)		Aclara RF Systems Inc.
-00192B     (base 16)		Aclara RF Systems Inc.
-				30400 Solon Road
-				Solon  OH  44139
-				US
-
-00-19-1E   (hex)		Beyondwiz Co., Ltd.
-00191E     (base 16)		Beyondwiz Co., Ltd.
-				3F, Daechang Bldg.,
-				Sungnam  Kyungki-do  463-825
-				KR
-
-00-19-81   (hex)		Vivox Inc
-001981     (base 16)		Vivox Inc
-				40 Speen Street
-				Framingham  MA  01701
-				US
-
-00-19-45   (hex)		RF COncepts, LLC
-001945     (base 16)		RF COncepts, LLC
-				1148 Wagner Drive 
-				Sevierville  TN  37862
-				US
-
-00-19-1F   (hex)		Microlink communications Inc.
-00191F     (base 16)		Microlink communications Inc.
-				8F , 31 , Hsintai Road , Chupei City , Hsinchu
-				Chupei  Taiwan  302
-				TW
-
-00-19-20   (hex)		KUME electric Co.,Ltd.
-001920     (base 16)		KUME electric Co.,Ltd.
-				4-2-24 Kitakawara
-				Itami-city  Hyougo  
-				JP
-
-00-19-26   (hex)		BitsGen Co., Ltd.
-001926     (base 16)		BitsGen Co., Ltd.
-				#502, Owner's Tower, #16-5, Sunea-dong
-				Bundang-gu  Seongnam-si  463-825
-				KR
-
-00-19-29   (hex)		2M2B Montadora de Maquinas Bahia Brasil LTDA
-001929     (base 16)		2M2B Montadora de Maquinas Bahia Brasil LTDA
-				Rua Djalma dutra, 668, Sete Portas
-				Salvador  Bahia  40240080
-				BR
-
-00-18-F1   (hex)		Chunichi Denshi Co.,LTD.
-0018F1     (base 16)		Chunichi Denshi Co.,LTD.
-				1 Denjiyama
-				Nagoya  Aichi  458-8525
-				JP
-
-00-18-F2   (hex)		Beijing Tianyu Communication Equipment Co., Ltd
-0018F2     (base 16)		Beijing Tianyu Communication Equipment Co., Ltd
-				27th Floor, Tengda Plaza
-				Beijing    100044
-				CN
-
-00-18-EC   (hex)		Welding Technology Corporation
-0018EC     (base 16)		Welding Technology Corporation
-				24775 Crestview Court
-				Farmington Hills  MI  48335
-				US
-
-00-18-ED   (hex)		Accutech Ultrasystems Co., Ltd.
-0018ED     (base 16)		Accutech Ultrasystems Co., Ltd.
-				11F-4, No. 150,
-				CHUNG-HO CITY,  TAIPEI HSIEN,  235
-				TW
-
-00-19-0B   (hex)		Southern Vision Systems, Inc.
-00190B     (base 16)		Southern Vision Systems, Inc.
-				8215 Madison Blvd, Suite 150
-				Madison  AL  35758
-				US
-
-00-19-03   (hex)		Bigfoot Networks Inc
-001903     (base 16)		Bigfoot Networks Inc
-				3925 West Braker Lane
-				Austin  TX  78759
-				US
-
-00-19-00   (hex)		Intelliverese - DBA Voicecom
-001900     (base 16)		Intelliverese - DBA Voicecom
-				5900 Windward Parkway
-				Alpharetta  Georgia  30005
-				US
-
-00-19-02   (hex)		Cambridge Consultants Ltd
-001902     (base 16)		Cambridge Consultants Ltd
-				Science Park
-				Cambridge  Cambs  CB4 0DW
-				GB
-
-00-19-2A   (hex)		Antiope Associates
-00192A     (base 16)		Antiope Associates
-				18 Clay Street
-				Fair Haven  New Jersey  07704
-				US
-
-00-19-0F   (hex)		Advansus Corp.
-00190F     (base 16)		Advansus Corp.
-				No.5 Shing Yeh Street, Kwei Hsiang
-				Taoyuan    333
-				TW
-
-00-19-11   (hex)		Just In Mobile Information Technologies (Shanghai) Co., Ltd.
-001911     (base 16)		Just In Mobile Information Technologies (Shanghai) Co., Ltd.
-				5th Floor, 2nd Area, Haiwangxing Building, 62 Xingguang Ave., N.High-Tech Park
-				Chongqing    401121
-				CN
-
-00-18-E0   (hex)		ANAVEO
-0018E0     (base 16)		ANAVEO
-				Les Carrés du parc
-				CHAMPAGNE au MONT D'OR  Rhône  F-69410
-				FR
-
-00-19-17   (hex)		Posiflex Inc.
-001917     (base 16)		Posiflex Inc.
-				6, Wu-Chuan Road
-				Taipei Hsien    248
-				TW
-
-00-19-18   (hex)		Interactive Wear AG
-001918     (base 16)		Interactive Wear AG
-				Petersbrunner Strasse 3
-				Starnberg  Bayern  82319
-				DE
-
-00-18-CB   (hex)		Tecobest Technology Limited
-0018CB     (base 16)		Tecobest Technology Limited
-				53/F.,Block A,United Plaza,
-				Shenzhen  Guangdong  518026
-				CN
-
-00-18-CE   (hex)		Dreamtech Co., Ltd
-0018CE     (base 16)		Dreamtech Co., Ltd
-				#340-5, Yang-dang Ri, Jik-san Myeon
-				Cheon-an si  Chung-Nam  330810
-				KR
-
-00-18-94   (hex)		NPCore, Inc.
-001894     (base 16)		NPCore, Inc.
-				1001, ISBIZ Tower
-				Youngdungpo Gu  Seoul  150-105
-				KR
-
-00-18-98   (hex)		KINGSTATE ELECTRONICS CORPORATION
-001898     (base 16)		KINGSTATE ELECTRONICS CORPORATION
-				10F, No.69-11, Sec.2, Chung Cheng E. Rd.,
-				Taipei County    251
-				TW
-
-00-18-92   (hex)		ads-tec GmbH
-001892     (base 16)		ads-tec GmbH
-				Raiffeisenstrasse 14
-				Leinfelden-Echterdingen  BW  70771
-				DE
-
-00-18-91   (hex)		Zhongshan General K-mate Electronics Co., Ltd
-001891     (base 16)		Zhongshan General K-mate Electronics Co., Ltd
-				3/F B1 Building, Fuwan Ind. Zone Sun Wen East Road
-				Zhongshan  Guangdong  528403
-				CN
-
-00-18-AD   (hex)		NIDEC SANKYO CORPORATION
-0018AD     (base 16)		NIDEC SANKYO CORPORATION
-				5329, Shimosuwa-machi, Suwa-gun
-				  Nagano  393-8511
-				JP
-
-00-18-AC   (hex)		Shanghai Jiao Da HISYS Technology Co. Ltd.
-0018AC     (base 16)		Shanghai Jiao Da HISYS Technology Co. Ltd.
-				7F Haoran HiTech Bldg., No.1954 Huashan Road
-				shanghai  xuhui  200030
-				US
-
-00-18-AB   (hex)		BEIJING LHWT MICROELECTRONICS INC.
-0018AB     (base 16)		BEIJING LHWT MICROELECTRONICS INC.
-				18/F,QUANTUM PLAZA,NO.27 ZHI CHUN RD.,HAI DIAN DISTRICT,BEIJING
-				    
-				CN
-
-00-18-A5   (hex)		ADigit Technologies Corp.
-0018A5     (base 16)		ADigit Technologies Corp.
-				Rm D302E,No.185 3F-2,Kur-Wong Road,
-				Tao-yuan,    325
-				TW
-
-00-18-78   (hex)		Mackware GmbH
-001878     (base 16)		Mackware GmbH
-				Schänzle 13
-				Waiblingen  Baden-Württemberg  71332
-				DE
-
-00-18-6A   (hex)		Global Link Digital Technology Co,.LTD
-00186A     (base 16)		Global Link Digital Technology Co,.LTD
-				Qibaoyiding Ind.Area
-				Dongguan  Guangdong  523051
-				CN
-
-00-18-6B   (hex)		Sambu Communics CO., LTD.
-00186B     (base 16)		Sambu Communics CO., LTD.
-				38B-1L Namdong Industrial Complex
-				Incheon    405-100
-				KR
-
-00-18-6E   (hex)		3Com Ltd
-00186E     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-18-A6   (hex)		Persistent Systems, LLC
-0018A6     (base 16)		Persistent Systems, LLC
-				118 N. Howard St. #72
-				Baltimore  MD  21201
-				US
-
-00-18-9B   (hex)		Thomson Inc.
-00189B     (base 16)		Thomson Inc.
-				101 West 103rd Street
-				Indianapolis  IN  46290-1102
-				US
-
-00-18-B2   (hex)		ADEUNIS RF
-0018B2     (base 16)		ADEUNIS RF
-				283 Rue NEEL
-				CROLLES  ISERE  38920
-				FR
-
-00-18-B3   (hex)		TEC WizHome Co., Ltd.
-0018B3     (base 16)		TEC WizHome Co., Ltd.
-				18fl., In-Song bldg., 194-15,
-				Seoul    100-952
-				KR
-
-00-18-BD   (hex)		SHENZHEN DVBWORLD TECHNOLOGY CO., LTD.
-0018BD     (base 16)		SHENZHEN DVBWORLD TECHNOLOGY CO., LTD.
-				2ND FLOOR, BUILDING A, QINGHU XINQIAO INDUSTRY AREA,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-00-18-67   (hex)		Datalogic ADC
-001867     (base 16)		Datalogic ADC
-				433 N. Fair Oaks Ave
-				Pasadena  CA  91103
-				US
-
-00-18-65   (hex)		Siemens Healthcare Diagnostics Manufacturing Ltd
-001865     (base 16)		Siemens Healthcare Diagnostics Manufacturing Ltd
-				Northern Road
-				Sudbury  Suffolk  C010 2XQ
-				GB
-
-00-18-77   (hex)		Amplex A/S
-001877     (base 16)		Amplex A/S
-				Silkeborgvej 2
-				Aarhus C    8000
-				DK
-
-00-18-89   (hex)		WinNet Solutions Limited
-001889     (base 16)		WinNet Solutions Limited
-				Rm804, Kornhill Metro Tower, Quarry Bay
-				  HK  852
-				HK
-
-00-17-F9   (hex)		Forcom Sp. z o.o.
-0017F9     (base 16)		Forcom Sp. z o.o.
-				Gajowa 6
-				Poznan  WLKP  60-815
-				PL
-
-00-17-F4   (hex)		ZERON ALLIANCE
-0017F4     (base 16)		ZERON ALLIANCE
-				 3F DOORI BUILD. 244-14 bunji, Poi-dong, Gangnam-gu
-				SEOUL    135-965
-				KR
-
-00-17-F7   (hex)		CEM Solutions Pvt Ltd
-0017F7     (base 16)		CEM Solutions Pvt Ltd
-				49,Kanija Bhavan
-				Bangalore  Karnataka  560 001
-				IN
-
-00-17-ED   (hex)		WooJooIT Ltd.
-0017ED     (base 16)		WooJooIT Ltd.
-				Hankooktire B/D 4th floor, 501-19,
-				Yangcheon-gu,  Seoul  158-839
-				KR
-
-00-18-43   (hex)		Dawevision Ltd
-001843     (base 16)		Dawevision Ltd
-				197 High Street
-				Cottenham  Cambridge  CB4 8RX
-				GB
-
-00-18-2C   (hex)		Ascend Networks, Inc.
-00182C     (base 16)		Ascend Networks, Inc.
-				No. 4 - 4, Lane 413, ChungChan Road,
-				BenQuao City  Taipei  220
-				TW
-
-00-18-1D   (hex)		ASIA ELECTRONICS CO.,LTD
-00181D     (base 16)		ASIA ELECTRONICS CO.,LTD
-				620-3 DOCHEON-DONG
-				GWANGJU    506-301
-				KR
-
-00-18-1F   (hex)		Palmmicro Communications
-00181F     (base 16)		Palmmicro Communications
-				Room 0611, Bldg.B Tsinghua Tongfang Technology Plaza
-				Beijing    100083
-				CN
-
-00-18-1B   (hex)		TaiJin Metal Co., Ltd.
-00181B     (base 16)		TaiJin Metal Co., Ltd.
-				#95-9, Hangdong7-Ga, Joong-Gu
-				In Cheon    400-037
-				KR
-
-00-18-05   (hex)		Beijing InHand Networking Technology Co.,Ltd.
-001805     (base 16)		Beijing InHand Networking Technology Co.,Ltd.
-				West Wing 11th Floor of Qiming International Mansion
-				Beijing    100085
-				CN
-
-00-18-0D   (hex)		Terabytes Server Storage Tech Corp
-00180D     (base 16)		Terabytes Server Storage Tech Corp
-				14257 E Don Julian Rd
-				City of Industry  CA  91746
-				US
-
-00-18-54   (hex)		Argard Co., Ltd
-001854     (base 16)		Argard Co., Ltd
-				2571 Lardprao Rd.
-				wangthonglang  Bangkok  10310
-				TH
-
-00-18-47   (hex)		AceNet Technology Inc.
-001847     (base 16)		AceNet Technology Inc.
-				133 Vienna Dr.
-				Milpitas  CA  95035
-				US
-
-00-18-36   (hex)		REJ Co.,Ltd
-001836     (base 16)		REJ Co.,Ltd
-				2-3-2 Fukuura, Kanazawa-ku
-				Yokohama  Kanagawa  236-8641
-				JP
-
-00-17-CC   (hex)		Alcatel-Lucent
-0017CC     (base 16)		Alcatel-Lucent
-				601 Data Dr.
-				Plano  TX  75075
-				US
-
-00-17-C4   (hex)		Quanta Microsystems, INC.
-0017C4     (base 16)		Quanta Microsystems, INC.
-				188 Wenhwa 2nd RD., Kueishan Hsiang
-				Taoyuan Shien    333
-				TW
-
-00-17-9E   (hex)		Sirit Inc
-00179E     (base 16)		Sirit Inc
-				2525 Meridian Parkway
-				Durham  NC  27713
-				US
-
-00-17-A7   (hex)		Mobile Computing Promotion Consortium
-0017A7     (base 16)		Mobile Computing Promotion Consortium
-				3-5-12 Shiba-Koen
-				Tokyo    105-0011
-				JP
-
-00-17-9F   (hex)		Apricorn
-00179F     (base 16)		Apricorn
-				12191 Kirkham RD
-				Poway  California  92064
-				US
-
-00-17-B4   (hex)		Remote Security Systems, LLC
-0017B4     (base 16)		Remote Security Systems, LLC
-				4806 Upper Brandon Place
-				Marietta  Georgia  30068
-				US
-
-00-17-AC   (hex)		O'Neil Product Development Inc.
-0017AC     (base 16)		O'Neil Product Development Inc.
-				8 Mason
-				Irvine  CA  92618
-				US
-
-00-17-AD   (hex)		AceNet Corporation
-0017AD     (base 16)		AceNet Corporation
-				7F-4, No.146, Wen-Shin Road
-				Gueishan  TAOYUAN  
-				TW
-
-00-17-DD   (hex)		Clipsal Australia
-0017DD     (base 16)		Clipsal Australia
-				33-37 Port Wakefield Rd
-				Gepps Cross  South Australia  5094
-				AU
-
-00-17-D9   (hex)		AAI Corporation
-0017D9     (base 16)		AAI Corporation
-				P.O. Box 126
-				Hunt Valley  Maryland  21030
-				US
-
-00-17-DC   (hex)		DAEMYUNG ZERO1
-0017DC     (base 16)		DAEMYUNG ZERO1
-				#809,Hyosung Intellian
-				Anyang-si  Gyeonggi-do  431-060
-				KR
-
-00-17-BF   (hex)		Coherent Research Limited
-0017BF     (base 16)		Coherent Research Limited
-				8 Princess Mews
-				Kingston upon Thames  Surrey  KT1 2SZ
-				GB
-
-00-17-BD   (hex)		Tibetsystem
-0017BD     (base 16)		Tibetsystem
-				6F IT Castle II 550-1 Gasan-dong
-				Seoul  Geumcheon-gu  153-803
-				KR
-
-00-17-A1   (hex)		3soft inc.
-0017A1     (base 16)		3soft inc.
-				shinyoung bldg 4f, chungdam-dong, gangnam-gu
-				seoul    135-100
-				KR
-
-00-17-92   (hex)		Falcom Wireless Comunications Gmbh
-001792     (base 16)		Falcom Wireless Comunications Gmbh
-				Gewerbering 6
-				Langewiesen  Thuringia  98704
-				DE
-
-00-17-97   (hex)		Telsy Elettronica S.p.A.
-001797     (base 16)		Telsy Elettronica S.p.A.
-				Corso Svizzera 185
-				Torino    10149
-				IT
-
-00-17-8C   (hex)		Independent Witness, Inc
-00178C     (base 16)		Independent Witness, Inc
-				1515 West 2200 South
-				Salt Lake City  UT  84119
-				US
-
-00-17-CB   (hex)		Juniper Networks
-0017CB     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-17-D3   (hex)		Etymotic Research, Inc.
-0017D3     (base 16)		Etymotic Research, Inc.
-				61 Martin Lane
-				Elk Grove Village  IL  60061
-				US
-
-00-17-88   (hex)		Philips Lighting BV
-001788     (base 16)		Philips Lighting BV
-				High Tech Campus 45
-				Eindhoven  Noord Brabant  5656 AE
-				NL
-
-00-17-3C   (hex)		Extreme Engineering Solutions
-00173C     (base 16)		Extreme Engineering Solutions
-				7878 Big Sky Drive
-				Madison  WI  53719
-				US
-
-00-17-36   (hex)		iiTron Inc.
-001736     (base 16)		iiTron Inc.
-				88 Mercy St.
-				Mountain View  CA  94041
-				US
-
-00-17-37   (hex)		Industrie Dial Face S.p.A.
-001737     (base 16)		Industrie Dial Face S.p.A.
-				via Canzo, 4
-				Peschiera Borromeo  Milano  20068
-				IT
-
-00-17-33   (hex)		SFR
-001733     (base 16)		SFR
-				42 Quai du point du jour
-				Boulogne Billancourt  Hauts de Seine  92659
-				FR
-
-00-17-58   (hex)		ThruVision Ltd
-001758     (base 16)		ThruVision Ltd
-				Central 127, No.18
-				Abingdon  Oxfordshire  OX14 4SA
-				GB
-
-00-17-4F   (hex)		iCatch Inc.
-00174F     (base 16)		iCatch Inc.
-				10F-2, No. 109, Sec. 6, Mincyuan E. Rd.,
-				Taipei    114
-				TW
-
-00-17-4A   (hex)		SOCOMEC
-00174A     (base 16)		SOCOMEC
-				rue de Westhouse
-				BENFELD CEDEX    67235
-				FR
-
-00-17-4E   (hex)		Parama-tech Co.,Ltd.
-00174E     (base 16)		Parama-tech Co.,Ltd.
-				2-19-8, Sharyo, Higashi-ku
-				Fukuoka    812-0068
-				JP
-
-00-17-6F   (hex)		PAX Computer Technology(Shenzhen) Ltd.
-00176F     (base 16)		PAX Computer Technology(Shenzhen) Ltd.
-				4/F, No.3 Building, Software Park, Second Central Science-Tech Road, High-Tech
-				Shenzhen  GuangDong  518057
-				CN
-
-00-17-71   (hex)		APD Communications Ltd
-001771     (base 16)		APD Communications Ltd
-				Newlands Centre
-				HULL    HU6 7TQ
-				GB
-
-00-17-5B   (hex)		ACS Solutions Switzerland Ltd.
-00175B     (base 16)		ACS Solutions Switzerland Ltd.
-				Frankenstrasse 70
-				Bern- Buempliz    3018
-				CH
-
-00-17-29   (hex)		Ubicod Co.LTD
-001729     (base 16)		Ubicod Co.LTD
-				7F Chun-gin Bldg, 53-5 Wonhyo-ro
-				Seoul    140-719
-				KR
-
-00-17-27   (hex)		Thermo Ramsey Italia s.r.l.
-001727     (base 16)		Thermo Ramsey Italia s.r.l.
-				Strada Rivoltana km 6/7
-				Rodano  Milano  20090
-				IT
-
-00-17-2A   (hex)		Proware Technology Corp.(By Unifosa)
-00172A     (base 16)		Proware Technology Corp.(By Unifosa)
-				6Fl., No. 4, Alley 1, Lane 235, PaoChao Rd., Sindian Dist.,
-				New Taipei City    231
-				TW
-
-00-17-25   (hex)		Liquid Computing
-001725     (base 16)		Liquid Computing
-				340 Terry Fox Drive
-				Ottawa  Ontario  K2K 3A2
-				CA
-
-00-17-64   (hex)		ATMedia GmbH
-001764     (base 16)		ATMedia GmbH
-				Stuhlsatzenhausweg 69
-				Saarbruecken  Saarland  66123
-				DE
-
-00-17-5E   (hex)		Zed-3
-00175E     (base 16)		Zed-3
-				501 Valley Way
-				Milpitas  CA  95035
-				US
-
-00-17-66   (hex)		Accense Technology, Inc.
-001766     (base 16)		Accense Technology, Inc.
-				35 Tansumachi
-				Shinjyuku-ku  Tokyo  1620833
-				JP
-
-00-16-D0   (hex)		ATech elektronika d.o.o.
-0016D0     (base 16)		ATech elektronika d.o.o.
-				Bac pri Materiji 30
-				Materija  SI  6242
-				SI
-
-00-16-C3   (hex)		BA Systems Inc
-0016C3     (base 16)		BA Systems Inc
-				6895 Via Del Oro
-				San Jose  CA  95119
-				US
-
-00-16-F0   (hex)		Dell
-0016F0     (base 16)		Dell
-				909 Hermosa Ct
-				Sunnyvale  CA  94085
-				US
-
-00-16-F8   (hex)		AVIQTECH TECHNOLOGY CO., LTD.
-0016F8     (base 16)		AVIQTECH TECHNOLOGY CO., LTD.
-				6F 12, Li-hsin Road, SBIP
-				Hsin-chu    300
-				TW
-
-00-17-03   (hex)		MOSDAN Internation Co.,Ltd
-001703     (base 16)		MOSDAN Internation Co.,Ltd
-				No.216 Xiwei,Shanhua Dist,
-				Tainan    741
-				TW
-
-00-16-FC   (hex)		TOHKEN CO.,LTD.
-0016FC     (base 16)		TOHKEN CO.,LTD.
-				2-16-20 Tamagawa
-				Chofu  Tokyo  182-0025
-				JP
-
-00-16-E9   (hex)		Tiba Medical Inc
-0016E9     (base 16)		Tiba Medical Inc
-				5024 Lakewood Drive
-				Plano  TX  75093
-				US
-
-00-16-DC   (hex)		ARCHOS
-0016DC     (base 16)		ARCHOS
-				12 rue AMPERE
-				IGNY  ESSONNES  91430
-				FR
-
-00-17-14   (hex)		BR Controls Nederland bv
-001714     (base 16)		BR Controls Nederland bv
-				Branderweg 1
-				Zwolle  Overijssel  8042 PD
-				NL
-
-00-17-1B   (hex)		Innovation Lab Corp.
-00171B     (base 16)		Innovation Lab Corp.
-				12FL., No. 285, Sec. 2, TiDing Blvd.,
-				Taipei    11493
-				TW
-
-00-17-09   (hex)		Exalt Communications
-001709     (base 16)		Exalt Communications
-				580 Division Street
-				Campbell  CA  95008
-				US
-
-00-16-C1   (hex)		Eleksen Ltd
-0016C1     (base 16)		Eleksen Ltd
-				Pinewood Studios
-				Iver  Bucks  SL0 0NH
-				US
-
-00-16-A9   (hex)		2EI
-0016A9     (base 16)		2EI
-				Rua dos Rubis, 77 - Assumpcao
-				Aguas de Lindoia  São Paulo  13940-000
-				BR
-
-00-16-B0   (hex)		VK Corporation
-0016B0     (base 16)		VK Corporation
-				VK B/D, 548-6, Anyang 8dong, Manan-gu
-				Anyang  Kyounggi  430-8903
-				KR
-
-00-16-B1   (hex)		KBS
-0016B1     (base 16)		KBS
-				88 rue Pierre Sémard
-				Moissy cedex  Ile de France  77552
-				FR
-
-00-16-AE   (hex)		INVENTEL
-0016AE     (base 16)		INVENTEL
-				35 rue Tournefort
-				PARIS    75005
-				FR
-
-00-16-AC   (hex)		Toho Technology Corp.
-0016AC     (base 16)		Toho Technology Corp.
-				HIGASHI 5-1
-				INAZAWA-CITY  AICHI  492-8501
-				JP
-
-00-16-83   (hex)		WEBIO International Co.,.Ltd.
-001683     (base 16)		WEBIO International Co.,.Ltd.
-				21F.,No.171 Songde Rd.,Sinyi District
-				Taipei    11085
-				TW
-
-00-16-84   (hex)		Donjin Co.,Ltd.
-001684     (base 16)		Donjin Co.,Ltd.
-				21F,Cangsong Building,Tairan,Futian
-				Shenzhen  Guangdong  518040
-				CN
-
-00-16-87   (hex)		Chubb CSC-Vendor AP
-001687     (base 16)		Chubb CSC-Vendor AP
-				Ottawa STN
-				Ottawa    K1G 6W6
-				CA
-
-00-16-7F   (hex)		Bluebird Soft Inc.
-00167F     (base 16)		Bluebird Soft Inc.
-				562-21 Gangnam-gu,
-				Seoul    135-890
-				KR
-
-00-16-4C   (hex)		PLANET INT Co., Ltd
-00164C     (base 16)		PLANET INT Co., Ltd
-				8th Floor, Saeum B/D, 1361-5
-				Seoul    137-070
-				KR
-
-00-16-49   (hex)		SetOne GmbH
-001649     (base 16)		SetOne GmbH
-				Hegenheimer Str. 2
-				Weil am Rhein    D-79576
-				DE
-
-00-16-47   (hex)		Cisco Systems, Inc
-001647     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-16-65   (hex)		Cellon France
-001665     (base 16)		Cellon France
-				Route d'Angers Le Mans cedex 9
-				Le Mans  Sarthe  72081
-				FR
-
-00-16-5F   (hex)		Fairmount Automation
-00165F     (base 16)		Fairmount Automation
-				4621 West Chester Pike
-				Newtown Square  PA  19073
-				US
-
-00-16-7C   (hex)		iRex Technologies BV
-00167C     (base 16)		iRex Technologies BV
-				HighTech Campus
-				Eindhoven  Brabant  5656AE
-				NL
-
-00-16-73   (hex)		Bury GmbH & Co. KG
-001673     (base 16)		Bury GmbH & Co. KG
-				Robert-Koch-Str. 1-7
-				Loehne  Germany  32584
-				DE
-
-00-16-94   (hex)		Sennheiser Communications A/S
-001694     (base 16)		Sennheiser Communications A/S
-				Langager 6
-				Solrød Strand  Copenhagen  2680
-				DK
-
-00-16-9C   (hex)		Cisco Systems, Inc
-00169C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-16-57   (hex)		Aegate Ltd
-001657     (base 16)		Aegate Ltd
-				Technology Centre
-				Melbourn  Hertfordshire  SG8 6DP
-				GB
-
-00-16-8C   (hex)		DSL Partner AS
-00168C     (base 16)		DSL Partner AS
-				Havreveien 49
-				Oslo    0680
-				NO
-
-00-16-1B   (hex)		Micronet Corporation
-00161B     (base 16)		Micronet Corporation
-				1788-388 Nomura Hirooka
-				Shiojiri-shi  Nagano-ken  399-0702
-				JP
-
-00-16-18   (hex)		HIVION Co., Ltd.
-001618     (base 16)		HIVION Co., Ltd.
-				2F., Akyung Bldg., 54-10, Munjeong-dong,
-				Songpa-Gu  Seoul  
-				KR
-
-00-16-1E   (hex)		Woojinnet
-00161E     (base 16)		Woojinnet
-				292 osan dongtan
-				hwaseong  kyonggi  445-813
-				KR
-
-00-16-1F   (hex)		SUNWAVETEC Co., Ltd.
-00161F     (base 16)		SUNWAVETEC Co., Ltd.
-				#823, Kwanyang-dong, Dongan-ku
-				Anyang-si  Kyungki-do  431-060
-				US
-
-00-16-14   (hex)		Picosecond Pulse Labs
-001614     (base 16)		Picosecond Pulse Labs
-				2500 55th Street
-				Boulder  CO  80301
-				US
-
-00-16-0E   (hex)		Optica Technologies Inc.
-00160E     (base 16)		Optica Technologies Inc.
-				2051 Dogwood Street
-				Louisville  CO  80027
-				US
-
-00-16-43   (hex)		Sunhillo Corporation
-001643     (base 16)		Sunhillo Corporation
-				444 Kelley Drive
-				West Berlin  New Jersey  08091
-				US
-
-00-16-44   (hex)		LITE-ON Technology Corp.
-001644     (base 16)		LITE-ON Technology Corp.
-				18F, No.392, Ruey Kuang Road, Niehu,
-				Taipei    114
-				TW
-
-00-16-3E   (hex)		Xensource, Inc.
-00163E     (base 16)		Xensource, Inc.
-				2300 Geng Rd.
-				Palo Alto  CA  94303
-				US
-
-00-15-FD   (hex)		Complete Media Systems
-0015FD     (base 16)		Complete Media Systems
-				Grove Place
-				Warninglid  West sussex  RH17 5SN
-				GB
-
-00-15-F6   (hex)		SCIENCE AND ENGINEERING SERVICES, INC.
-0015F6     (base 16)		SCIENCE AND ENGINEERING SERVICES, INC.
-				4015 PULASKI PIKE NW
-				HUNTSVILLE  AL  35810
-				US
-
-00-16-34   (hex)		Mathtech, Inc.
-001634     (base 16)		Mathtech, Inc.
-				6402 Arlington Blvd.,
-				Falls Church  Virginia  22042-2356
-				US
-
-00-16-2C   (hex)		Xanboo
-00162C     (base 16)		Xanboo
-				115 West 30th, 6th Fl
-				New York  NY  10001
-				US
-
-00-16-05   (hex)		YORKVILLE SOUND INC.
-001605     (base 16)		YORKVILLE SOUND INC.
-				4625 WITMER INDUSTRIAL ESTATE
-				NIAGARA FALLS  NY  14305
-				US
-
-00-15-F9   (hex)		Cisco Systems, Inc
-0015F9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-E3   (hex)		Dream Technologies Corporation
-0015E3     (base 16)		Dream Technologies Corporation
-				Ebisu Prime Square, 1-1-39 Hiroo
-				Tokyo    150-0012
-				JP
-
-00-15-E0   (hex)		Ericsson
-0015E0     (base 16)		Ericsson
-				Nya Vattentornet
-				Lund    SE-221 83
-				NO
-
-00-15-F3   (hex)		PELTOR AB
-0015F3     (base 16)		PELTOR AB
-				Box 2341
-				SE-331 02  Värnamo    SE-331 02
-				SE
-
-00-15-D3   (hex)		Pantech&Curitel Communications, Inc.
-0015D3     (base 16)		Pantech&Curitel Communications, Inc.
-				1451-34, Seocho-dong, Seocho-Gu
-				Seoul    137-070
-				KR
-
-00-15-AD   (hex)		Accedian Networks
-0015AD     (base 16)		Accedian Networks
-				4878 Levy, suite 202
-				St-Laurent  Quebec  H9P 2V4
-				CA
-
-00-15-AC   (hex)		Capelon AB
-0015AC     (base 16)		Capelon AB
-				Jägerhorns  väg 1
-				Kungens Kurva  Stockholm  S-141 75
-				SE
-
-00-15-A9   (hex)		KWANG WOO I&C CO.,LTD
-0015A9     (base 16)		KWANG WOO I&C CO.,LTD
-				898-23, Hogye-dong,Dongan-gu
-				    431-080
-				KR
-
-00-E0-A8   (hex)		SAT GmbH & Co.
-00E0A8     (base 16)		SAT GmbH & Co.
-				RUTHNERGASSE 1
-				VIENNA A-1210    
-				AT
-
-00-15-74   (hex)		Horizon Semiconductors Ltd.
-001574     (base 16)		Horizon Semiconductors Ltd.
-				9 Hamenofim St.
-				Herzliya    46120
-				IL
-
-00-15-8A   (hex)		SURECOM Technology Corp.
-00158A     (base 16)		SURECOM Technology Corp.
-				6F, No. 125, Sec. 2, Datung Rd.
-				Shijr City, Taipei County    221
-				TW
-
-00-15-8E   (hex)		Plustek.INC
-00158E     (base 16)		Plustek.INC
-				13F-1,No3(Building F) Yuan Qu Street
-				Taipei  Yuan Qu  115
-				TW
-
-00-15-89   (hex)		D-MAX Technology Co.,Ltd
-001589     (base 16)		D-MAX Technology Co.,Ltd
-				7F-6,NO.26,Lian Cheng RD.,Chung-Ho City
-				Taipei Hsien    235
-				US
-
-00-15-B4   (hex)		Polymap  Wireless LLC
-0015B4     (base 16)		Polymap  Wireless LLC
-				310 S. Williams Blvd. Ste. 350
-				Tucson  AZ  85711
-				US
-
-00-15-CA   (hex)		TeraRecon, Inc.
-0015CA     (base 16)		TeraRecon, Inc.
-				2955 Campus Drive, Suite 325
-				San Mateo  CA  94403
-				US
-
-00-15-98   (hex)		Kolektor group
-001598     (base 16)		Kolektor group
-				Vojkova 10
-				Idrija    5280
-				SI
-
-00-15-12   (hex)		Zurich University of Applied Sciences
-001512     (base 16)		Zurich University of Applied Sciences
-				Technikumstrasse 9
-				Winterthur  ZH  CH-8401
-				CH
-
-00-15-0A   (hex)		Sonoa Systems, Inc
-00150A     (base 16)		Sonoa Systems, Inc
-				3900 Freedom Circle
-				Santa Clara  CA  95054
-				US
-
-00-15-70   (hex)		Zebra Technologies Inc
-001570     (base 16)		Zebra Technologies Inc
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-00-15-6E   (hex)		A. W. Communication Systems Ltd
-00156E     (base 16)		A. W. Communication Systems Ltd
-				Crook Barn
-				Carlisle  Cumbria  CA6 6LH
-				GB
-
-00-15-68   (hex)		Dilithium Networks
-001568     (base 16)		Dilithium Networks
-				5401 Old Redwood Hwy
-				Petaluma  CA  94954
-				US
-
-00-15-4B   (hex)		Wonde Proud Technology Co., Ltd
-00154B     (base 16)		Wonde Proud Technology Co., Ltd
-				21F., No.100, Sec.1, Shintai 5th Rd
-				Sijhih city  Taipei County  221
-				TW
-
-00-15-48   (hex)		CUBE TECHNOLOGIES
-001548     (base 16)		CUBE TECHNOLOGIES
-				46 A CHEMIN DU MOULIN CARRON
-				69570 DARDILLY  FRANCE  
-				FR
-
-00-15-5F   (hex)		GreenPeak Technologies
-00155F     (base 16)		GreenPeak Technologies
-				Spinnerijstraat 14
-				Zele    9240
-				BE
-
-00-15-5A   (hex)		DAINIPPON PHARMACEUTICAL CO., LTD.
-00155A     (base 16)		DAINIPPON PHARMACEUTICAL CO., LTD.
-				2-6-8, DOSHOMACHI, CHUO-KU
-				OSAKA CITY  OSAKA PREF.  541-8524
-				JP
-
-00-15-1D   (hex)		M2I CORPORATION
-00151D     (base 16)		M2I CORPORATION
-				Kyonggi Venture Anyang technical center, 13th Floor, 572-5, Anyang 8-Dong, Manan-Gu
-				Anyang-Shi  Kyonggi-Do  430-731
-				KR
-
-00-15-3C   (hex)		Kprotech Co., Ltd.
-00153C     (base 16)		Kprotech Co., Ltd.
-				2nd Floor, # 202, Myoung-ji e-Space II
-				An-yang City  Gyeong-gi Do  430-817
-				KR
-
-00-15-3A   (hex)		Shenzhen Syscan Technology Co.,Ltd.
-00153A     (base 16)		Shenzhen Syscan Technology Co.,Ltd.
-				13F, Olympic Plaza,
-				Shenzhen  Guangdong  518034
-				CN
-
-00-15-32   (hex)		Consumer Technologies Group, LLC
-001532     (base 16)		Consumer Technologies Group, LLC
-				801 Brookhollow
-				Efland  NC  27243
-				US
-
-00-14-9B   (hex)		Nokota Communications, LLC
-00149B     (base 16)		Nokota Communications, LLC
-				200 Galleria Parkway
-				Atlanta  Georgia  30339
-				US
-
-00-14-A1   (hex)		Synchronous Communication Corp
-0014A1     (base 16)		Synchronous Communication Corp
-				9 floor, No168, Rueiguang Road, Neihu District
-				Taipei    114
-				TW
-
-00-14-9E   (hex)		UbONE Co., Ltd
-00149E     (base 16)		UbONE Co., Ltd
-				Shinyoung B.D. 602, SeoHyeon2-Dong
-				Seongnam-si  Gyeongg-do  463-824
-				KR
-
-00-14-A2   (hex)		Core Micro Systems Inc.
-0014A2     (base 16)		Core Micro Systems Inc.
-				Wacore Kaname-cho Bldg. 9F, 11-2, Nakamaru-cho
-				Itabashi-ku  Tokyo  173-0026
-				JP
-
-00-14-AD   (hex)		Gassner Wiege- und Meßtechnik GmbH
-0014AD     (base 16)		Gassner Wiege- und Meßtechnik GmbH
-				Münchner Bundesstraße
-				Salzburg    A-5020
-				AT
-
-00-14-AF   (hex)		Datasym POS Inc.
-0014AF     (base 16)		Datasym POS Inc.
-				45 Dalkeith Drive
-				Brantford  Ontario  N3P1M1
-				CA
-
-00-14-A9   (hex)		Cisco Systems, Inc
-0014A9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-14-FF   (hex)		Precise Automation, Inc.
-0014FF     (base 16)		Precise Automation, Inc.
-				1402 Alexandra Blvd
-				Crystal Lake  IL  60014
-				US
-
-00-14-FA   (hex)		AsGa S.A.
-0014FA     (base 16)		AsGa S.A.
-				Rod Roberto Moreira Km 04
-				Paulinia  São Paulo  13140-000
-				BR
-
-00-14-FB   (hex)		Technical Solutions Inc.
-0014FB     (base 16)		Technical Solutions Inc.
-				101-7188 Progress Way
-				Delta  BC  V4G 1M6
-				CA
-
-00-14-D2   (hex)		Kyuden Technosystems Corporation
-0014D2     (base 16)		Kyuden Technosystems Corporation
-				4-19-18 SHIMIZU,MINAMI-KU
-				FUKUOKA    815-0031
-				JP
-
-00-14-DC   (hex)		Communication System Design & Manufacturing (CSDM)
-0014DC     (base 16)		Communication System Design & Manufacturing (CSDM)
-				Postbus 181
-				Bussum  NH  1400 AD
-				NL
-
-00-14-CD   (hex)		DigitalZone Co., Ltd.
-0014CD     (base 16)		DigitalZone Co., Ltd.
-				No. 1001 E&C VentureDreamTower2
-				Seoul    152-848
-				KR
-
-00-14-C0   (hex)		Symstream Technology Group Ltd
-0014C0     (base 16)		Symstream Technology Group Ltd
-				Level 1, 3 Chester Street
-				Oakleigh  Victoria  3166
-				AU
-
-00-14-C1   (hex)		U.S. Robotics Corporation
-0014C1     (base 16)		U.S. Robotics Corporation
-				935 National Parkway
-				Schaumburg  IL  60173-5157
-				US
-
-00-14-C4   (hex)		Vitelcom Mobile Technology
-0014C4     (base 16)		Vitelcom Mobile Technology
-				PTA, Avda, Juan López Peñalver, nº 7
-				Campanillas.  Malaga.  
-				ES
-
-00-14-EC   (hex)		Acro Telecom
-0014EC     (base 16)		Acro Telecom
-				714 Woolim e-Biz Center 170-5 Guro-dong
-				Guro-Gu  Seoul  152-769
-				KR
-
-00-14-EB   (hex)		AwarePoint Corporation
-0014EB     (base 16)		AwarePoint Corporation
-				8899 University Center Lane
-				San Diego  CA  92122
-				US
-
-00-14-AB   (hex)		Senhai Electronic Technology Co., Ltd.
-0014AB     (base 16)		Senhai Electronic Technology Co., Ltd.
-				Rm.10A. 28/F.SEGPlaza Huaqiangbei Road
-				Shengzhen  Guangdong  518031
-				CN
-
-00-14-B0   (hex)		Naeil Community
-0014B0     (base 16)		Naeil Community
-				#506 AceTwin Tower 1, Guro-Dong
-				Seoul  Guro-Gu  152779
-				KR
-
-00-14-F4   (hex)		DekTec Digital Video B.V.
-0014F4     (base 16)		DekTec Digital Video B.V.
-				Van Riebeeckweg 43A
-				Hilversum  NH  1212AE
-				NL
-
-00-14-F5   (hex)		OSI Security Devices
-0014F5     (base 16)		OSI Security Devices
-				1580 Jayken Way
-				Chula Vista  California  91911
-				US
-
-00-14-8E   (hex)		Tele Power Inc.
-00148E     (base 16)		Tele Power Inc.
-				1-46-15#B1F
-				Nerima-ku  Tokyo  176-0005
-				JP
-
-00-14-8F   (hex)		Protronic (Far East) Ltd.
-00148F     (base 16)		Protronic (Far East) Ltd.
-				Rm. 2504, Nanyang Plaza,
-				Kwun Tong  Kowloon  
-				HK
-
-00-14-8C   (hex)		General Dynamics Mission Systems
-00148C     (base 16)		General Dynamics Mission Systems
-				150 Rustcraft Road
-				Dedham  MA  02026
-				US
-
-00-14-87   (hex)		American Technology Integrators
-001487     (base 16)		American Technology Integrators
-				1358 Rosalia Ave
-				San Jose  CA  95130
-				US
-
-00-14-44   (hex)		Grundfos Holding
-001444     (base 16)		Grundfos Holding
-				Poul Due Jensensvej 7
-				Bjerringbro    DK8850
-				DK
-
-00-14-37   (hex)		GSTeletech Co.,Ltd.
-001437     (base 16)		GSTeletech Co.,Ltd.
-				1385-14, Juan-Dong, Nam-gu
-				  Incheon  402-200
-				KR
-
-00-14-31   (hex)		PDL Electronics Ltd
-001431     (base 16)		PDL Electronics Ltd
-				81 Austin Street
-				Napier  Hawkes Bay  
-				NZ
-
-00-14-4D   (hex)		Intelligent Systems
-00144D     (base 16)		Intelligent Systems
-				11101 Johns Hopkins Road
-				Laurel  MD  20723
-				US
-
-00-14-4A   (hex)		Taiwan Thick-Film Ind. Corp.
-00144A     (base 16)		Taiwan Thick-Film Ind. Corp.
-				NO.126,Wuu Gong 2nd RD,
-				Taipei Hsien    248
-				TW
-
-00-14-45   (hex)		Telefon-Gradnja d.o.o.
-001445     (base 16)		Telefon-Gradnja d.o.o.
-				Plesivicka 3
-				Sveta Nedelja  Zupanija Zagrebacka  10431
-				HR
-
-00-14-68   (hex)		CelPlan International, Inc.
-001468     (base 16)		CelPlan International, Inc.
-				1920 Association Drive
-				Reston  VA  20191
-				US
-
-00-14-7C   (hex)		3Com Ltd
-00147C     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-14-81   (hex)		Multilink Inc
-001481     (base 16)		Multilink Inc
-				580 Ternes Ave
-				Elyria  OH  44035
-				US
-
-00-14-64   (hex)		Cryptosoft
-001464     (base 16)		Cryptosoft
-				Lermontova str, 3
-				  Penza region  440026
-				RU
-
-00-14-5E   (hex)		IBM Corp
-00145E     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-14-58   (hex)		HS Automatic ApS
-001458     (base 16)		HS Automatic ApS
-				Bjerringbrovej 70
-				Rodovre    2610
-				DK
-
-00-14-21   (hex)		Total Wireless Technologies Pte. Ltd.
-001421     (base 16)		Total Wireless Technologies Pte. Ltd.
-				Blk 1003, Bukit Merah Central, #04-18
-				    159836
-				SG
-
-00-14-20   (hex)		G-Links networking company
-001420     (base 16)		G-Links networking company
-				1FL. NO.15-49, MING DER SECOND ROAD,
-				Keelung    206
-				TW
-
-00-14-18   (hex)		C4Line
-001418     (base 16)		C4Line
-				1001 Hyundai Parisian,
-				Yangchun-Gu  Seoul  158-050
-				KR
-
-00-14-1B   (hex)		Cisco Systems, Inc
-00141B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-13-F0   (hex)		Wavefront Semiconductor
-0013F0     (base 16)		Wavefront Semiconductor
-				4746 44th Ave SW
-				Seattle  WA  98116
-				US
-
-00-13-EF   (hex)		Kingjon Digital Technology Co.,Ltd
-0013EF     (base 16)		Kingjon Digital Technology Co.,Ltd
-				Room 827,Huanan Dianli Bulding,No.2050
-				Shenzhen  GuangDong  518031
-				CN
-
-00-13-EB   (hex)		Sysmaster Corporation
-0013EB     (base 16)		Sysmaster Corporation
-				5801 Christie Ave.
-				Emeryville  CA  94608
-				US
-
-00-13-EC   (hex)		Netsnapper Technologies SARL
-0013EC     (base 16)		Netsnapper Technologies SARL
-				2160 Century Park East 1806
-				Los Angeles  CA  90067-2236
-				US
-
-00-14-2B   (hex)		Edata Communication Inc.
-00142B     (base 16)		Edata Communication Inc.
-				2F-1, No. 872, Chung-Cheng Rd
-				  Taipei Hsien  235
-				TW
-
-00-14-2C   (hex)		Koncept International, Inc.
-00142C     (base 16)		Koncept International, Inc.
-				2500 E Foothill Blvd. #407
-				Pasadena  CA  91107
-				US
-
-00-14-24   (hex)		Merry Electrics CO., LTD.
-001424     (base 16)		Merry Electrics CO., LTD.
-				NO.22,23rd ROAD
-				TAICHUNG CITY    40850
-				TW
-
-00-13-D0   (hex)		t+ Medical Ltd
-0013D0     (base 16)		t+ Medical Ltd
-				174E Milton Park
-				Abingdon    OX14 4SE
-				GB
-
-00-13-D2   (hex)		PAGE IBERICA, S.A.
-0013D2     (base 16)		PAGE IBERICA, S.A.
-				AV. DE LA INDUSTRIA, 24
-				TRES CANTOS  MADRID  28760
-				ES
-
-00-13-D1   (hex)		KIRK telecom A/S
-0013D1     (base 16)		KIRK telecom A/S
-				Langmarksvej 34
-				Horsens    8700
-				DK
-
-00-14-0F   (hex)		Federal State Unitary Enterprise Leningrad R&D Institute of
-00140F     (base 16)		Federal State Unitary Enterprise Leningrad R&D Institute of
-				11 Warshawskaya St.
-				  St. Petersburg  196128
-				RU
-
-00-14-07   (hex)		Sperian Protection Instrumentation
-001407     (base 16)		Sperian Protection Instrumentation
-				651 South Main Street
-				Middletown  CT  06457
-				US
-
-00-14-06   (hex)		Go Networks
-001406     (base 16)		Go Networks
-				126 Yigal Alon st.
-				Tel Aviv    67443
-				IL
-
-00-14-0A   (hex)		WEPIO Co., Ltd.
-00140A     (base 16)		WEPIO Co., Ltd.
-				#1125, Opus1, Gurodongcomplex building
-				Seoul    152-050
-				KR
-
-00-13-FA   (hex)		LifeSize Communications, Inc
-0013FA     (base 16)		LifeSize Communications, Inc
-				901 S. Mopac
-				Austin  TX  78746
-				US
-
-00-13-FB   (hex)		RKC INSTRUMENT INC.
-0013FB     (base 16)		RKC INSTRUMENT INC.
-				16-6, Kugahara 5-chome,
-				Ohta-ku  Tokyo  146-8515
-				JP
-
-00-13-DC   (hex)		IBTEK INC.
-0013DC     (base 16)		IBTEK INC.
-				16F, 30, Pei-Ping East Rd.,
-				Taipei    100
-				TW
-
-00-13-BA   (hex)		ReadyLinks Inc
-0013BA     (base 16)		ReadyLinks Inc
-				6595 Edenvale Boulevard
-				Eden Prairie  MN  55346
-				US
-
-00-13-B8   (hex)		RyCo Electronic Systems Limited
-0013B8     (base 16)		RyCo Electronic Systems Limited
-				Unit E, Cartel Business Estate
-				Harlow  Essex  CM20 2TT
-				GB
-
-00-13-B6   (hex)		Sling Media, Inc.
-0013B6     (base 16)		Sling Media, Inc.
-				1840 Gateway Center
-				San Mateo  CA  94404
-				US
-
-00-13-7D   (hex)		Dynalab, Inc.
-00137D     (base 16)		Dynalab, Inc.
-				555 Lancaster Ave.
-				Reynoldsburg  OH  43068
-				US
-
-00-13-83   (hex)		Application Technologies and Engineering Research Laboratory
-001383     (base 16)		Application Technologies and Engineering Research Laboratory
-				Shinjuku 1-chome Bldg.
-				Shinjuku-ku  Tokyo  160-0022
-				JP
-
-00-13-87   (hex)		27M Technologies AB
-001387     (base 16)		27M Technologies AB
-				Diskettgatan 11
-				Linköping     S-583 35
-				SE
-
-00-13-73   (hex)		BLwave Electronics Co., Ltd
-001373     (base 16)		BLwave Electronics Co., Ltd
-				23FGH, Block A,ZhenYe Building , BaoAn Nan Road , LuoHu , Shenzhen , China
-				ShenZhen  GuangDong  518000
-				CN
-
-00-13-66   (hex)		Neturity Technologies Inc.
-001366     (base 16)		Neturity Technologies Inc.
-				830 Stewart Drive
-				Sunnyvale  CA  94085
-				US
-
-00-13-5B   (hex)		PanelLink Cinema, LLC
-00135B     (base 16)		PanelLink Cinema, LLC
-				1070 E Arques Ave
-				Sunnyvale  CA  94085
-				US
-
-00-13-6F   (hex)		PacketMotion, Inc.
-00136F     (base 16)		PacketMotion, Inc.
-				2121 El Camino Real
-				San Mateo  CA  94403
-				US
-
-00-13-68   (hex)		Saab Danmark A/S
-001368     (base 16)		Saab Danmark A/S
-				Alsion 2
-				Soenderborg  DK  6400
-				DK
-
-00-13-AE   (hex)		Radiance Technologies, Inc.
-0013AE     (base 16)		Radiance Technologies, Inc.
-				350 Wynn Dr.
-				Huntsville  Alabama  35805
-				US
-
-00-13-97   (hex)		Oracle Corporation 
-001397     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-00-13-C3   (hex)		Cisco Systems, Inc
-0013C3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-13-BD   (hex)		HYMATOM SA
-0013BD     (base 16)		HYMATOM SA
-				Zone Industrielle
-				VENDARGUES  HERAULT  34740
-				FR
-
-00-13-91   (hex)		OUEN CO.,LTD.
-001391     (base 16)		OUEN CO.,LTD.
-				Gotanda NT Bldg.7F,
-				Shinagawa-ku  Tokyo  141-0022
-				JP
-
-00-13-23   (hex)		Cap Co., Ltd.
-001323     (base 16)		Cap Co., Ltd.
-				11F,684-2,deungchon 3-dong,gangseo-gu
-				Seoul    157-754
-				KR
-
-00-13-14   (hex)		Asiamajor Inc.
-001314     (base 16)		Asiamajor Inc.
-				6F-9, No. 268, Lian-Cheng Rd., Junghe City,
-				Taipei    235
-				TW
-
-00-13-16   (hex)		L-S-B Broadcast Technologies GmbH
-001316     (base 16)		L-S-B Broadcast Technologies GmbH
-				Gustav-Stresemann-Str. 8
-				Bingen  Rheinland-Pfalz  55411
-				DE
-
-00-13-12   (hex)		Amedia Networks Inc.
-001312     (base 16)		Amedia Networks Inc.
-				101 Crawfords Corner Rd
-				Holmdel  NJ  07733
-				US
-
-00-13-36   (hex)		Tianjin 712 Communication Broadcasting co., ltd.
-001336     (base 16)		Tianjin 712 Communication Broadcasting co., ltd.
-				No.185, Xinda Road, Hebei District
-				Tianjin    300140
-				CN
-
-00-13-5E   (hex)		EAB/RWI/K
-00135E     (base 16)		EAB/RWI/K
-				Färögatan 6
-				Stockholm  Kista  164 80
-				SE
-
-00-13-4E   (hex)		Valox Systems, Inc.
-00134E     (base 16)		Valox Systems, Inc.
-				#704, Ace Twin tower 2, 212-30, Guro-3dong, Guro-gu
-				Seoul    152-779
-				KR
-
-00-13-44   (hex)		Fargo Electronics Inc.
-001344     (base 16)		Fargo Electronics Inc.
-				6533 Flying Cloud Drive
-				Eden Prairie  MN  55344
-				US
-
-00-13-48   (hex)		Artila Electronics Co., Ltd.
-001348     (base 16)		Artila Electronics Co., Ltd.
-				2F., No.1, Alley 8, Siwei Lane, Zhongzheng Rd.,
-				Xindian City  Taipei County  231
-				TW
-
-00-12-EF   (hex)		OneAccess SA
-0012EF     (base 16)		OneAccess SA
-				28 rue de la Redoute
-				Fontenay aux Roses    92260
-				FR
-
-00-12-E9   (hex)		Abbey Systems Ltd
-0012E9     (base 16)		Abbey Systems Ltd
-				Level 4, 220 Willis St
-				Wellington    6030
-				NZ
-
-00-13-00   (hex)		IT-FACTORY, INC.
-001300     (base 16)		IT-FACTORY, INC.
-				1-16-26 TAKAGI MINAMI-KU
-				FUKUOKA-SHI  FUKUOKA-KEN  815-0004
-				JP
-
-00-13-22   (hex)		DAQ Electronics, Inc.
-001322     (base 16)		DAQ Electronics, Inc.
-				262B Old New Brunswick Road
-				Piscataway  NJ  08854
-				US
-
-00-12-D5   (hex)		Motion Reality Inc.
-0012D5     (base 16)		Motion Reality Inc.
-				200 North Cobb Parkway
-				Marietta  GA  30062
-				US
-
-00-12-D8   (hex)		International Games System Co., Ltd.
-0012D8     (base 16)		International Games System Co., Ltd.
-				No.130, Wu-Gung Rd., Wu-Gu Industrial Park,
-				Taipei    248
-				TW
-
-00-12-9A   (hex)		IRT Electronics Pty Ltd
-00129A     (base 16)		IRT Electronics Pty Ltd
-				26 Hotham Parade
-				Artarmon  NSW  2064
-				AU
-
-00-12-8D   (hex)		STB Datenservice GmbH
-00128D     (base 16)		STB Datenservice GmbH
-				Weinsbergstraße 190
-				Köln  NRW  50825
-				DE
-
-00-12-DB   (hex)		ZIEHL industrie-elektronik GmbH + Co KG
-0012DB     (base 16)		ZIEHL industrie-elektronik GmbH + Co KG
-				Daimlerstraße 13
-				Schwäbisch Hall    74523
-				DE
-
-00-12-D6   (hex)		Jiangsu Yitong High-Tech Co.,Ltd
-0012D6     (base 16)		Jiangsu Yitong High-Tech Co.,Ltd
-				No 216 Huanghe Road
-				Changshu  Jiangsu  215500
-				CN
-
-00-12-DA   (hex)		Cisco Systems, Inc
-0012DA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-12-D3   (hex)		Zetta Systems, Inc.
-0012D3     (base 16)		Zetta Systems, Inc.
-				17311 135th AVE NE
-				Woodinville  WA  98072
-				US
-
-00-12-A2   (hex)		VITA
-0012A2     (base 16)		VITA
-				PO Box 19658
-				Fountain Hills  AZ  85269
-				US
-
-00-12-A5   (hex)		Dolphin Interconnect Solutions AS
-0012A5     (base 16)		Dolphin Interconnect Solutions AS
-				NILS Hansens Vei 13
-				Oslo    0667
-				NO
-
-00-12-A8   (hex)		intec GmbH
-0012A8     (base 16)		intec GmbH
-				Rahmedestraße 90
-				Luedenscheid  NRW  58507
-				DE
-
-00-12-9E   (hex)		Surf Communications Inc.
-00129E     (base 16)		Surf Communications Inc.
-				Room 313, 3F, Bldg.52, No. 195, Chung Hsing Rd., Sec 4, Chutung, HsinChu, Taiwan
-				HsinChu    310
-				TW
-
-00-12-BA   (hex)		FSI Systems, Inc.
-0012BA     (base 16)		FSI Systems, Inc.
-				5847 County Road 41
-				Farmington  NY  14425
-				US
-
-00-12-B2   (hex)		AVOLITES LTD.
-0012B2     (base 16)		AVOLITES LTD.
-				184 PARK AVENUE
-				LONDON    NW10 7XL
-				GB
-
-00-12-AE   (hex)		HLS HARD-LINE Solutions Inc.
-0012AE     (base 16)		HLS HARD-LINE Solutions Inc.
-				53 Main Street
-				Dowling  Ontario  P0M 1R0
-				CA
-
-00-12-AF   (hex)		ELPRO Technologies
-0012AF     (base 16)		ELPRO Technologies
-				9 / 12 Billabong St.
-				Stafford  Queensland  4053
-				AU
-
-00-12-E6   (hex)		SPECTEC COMPUTER CO., LTD.
-0012E6     (base 16)		SPECTEC COMPUTER CO., LTD.
-				6F., No. 92, Nanking E. Rd. Sec. 5,
-				Taipei    105
-				TW
-
-00-12-36   (hex)		ConSentry Networks
-001236     (base 16)		ConSentry Networks
-				1690 McCandless Dr
-				Milipitas  CA  95035
-				US
-
-00-12-35   (hex)		Andrew Corporation
-001235     (base 16)		Andrew Corporation
-				2601 Telecom Pkwy
-				Richardson  TX  75082
-				US
-
-00-12-45   (hex)		Zellweger Analytics, Inc.
-001245     (base 16)		Zellweger Analytics, Inc.
-				405 Barclay Blvd.
-				Lincolnshire  Illinois  60069
-				US
-
-00-12-42   (hex)		Millennial Net
-001242     (base 16)		Millennial Net
-				 285 Billerica Road
-				Chelmsford  MA  01803
-				US
-
-00-12-41   (hex)		a2i marketing center
-001241     (base 16)		a2i marketing center
-				1024-4  Duksan Bldg Bangbaedong Seochogu Seoul Korea
-				SEOUL    137-060
-				KR
-
-00-12-3B   (hex)		KeRo Systems ApS
-00123B     (base 16)		KeRo Systems ApS
-				Allikevej 3
-				Hørsholm    2970
-				DK
-
-00-12-87   (hex)		Digital Everywhere Unterhaltungselektronik GmbH
-001287     (base 16)		Digital Everywhere Unterhaltungselektronik GmbH
-				Maria Gailer Strasse 16
-				Villach  Kärnten  9500
-				AT
-
-00-12-82   (hex)		Qovia
-001282     (base 16)		Qovia
-				7470 New Technology Way
-				Frederick  MD  21703
-				US
-
-00-12-85   (hex)		Gizmondo Europe Ltd
-001285     (base 16)		Gizmondo Europe Ltd
-				1 Meadow Gate Avenue
-				Farnborough  Hampshire  GU14 6FG
-				GB
-
-00-12-77   (hex)		Korenix Technologies Co., Ltd.
-001277     (base 16)		Korenix Technologies Co., Ltd.
-				11F-1, No. 108, MinQuan Rd.
-				Xindian City  Taipei  231
-				TW
-
-00-12-6D   (hex)		University of California, Berkeley
-00126D     (base 16)		University of California, Berkeley
-				EECS Department
-				Berkeley  CA  94720-1776
-				US
-
-00-12-67   (hex)		Panasonic Corporation
-001267     (base 16)		Panasonic Corporation
-				2460-1, Uegawa-Cho
-				Matsusaka-City  Mie  571-8506
-				JP
-
-00-12-65   (hex)		Enerdyne Technologies, Inc.
-001265     (base 16)		Enerdyne Technologies, Inc.
-				1935 Cordell Court
-				El Cajon  CA  92020
-				US
-
-00-12-57   (hex)		LeapComm Communication Technologies Inc.
-001257     (base 16)		LeapComm Communication Technologies Inc.
-				RM1804-05 South Tower Hong Kong Plaza, No.283 Huaihai Zhong Road
-				Shanghai    200021
-				CN
-
-00-12-51   (hex)		SILINK
-001251     (base 16)		SILINK
-				13 RUE POMEYS
-				LE TAILLAN    33320
-				FR
-
-00-12-8E   (hex)		Q-Free ASA
-00128E     (base 16)		Q-Free ASA
-				Th. Owesensgt. 35c
-				Trondheim    7443
-				NO
-
-00-12-92   (hex)		Griffin Technology
-001292     (base 16)		Griffin Technology
-				1930 Air Lane Drive
-				Nashville  TN  37210
-				US
-
-00-11-F3   (hex)		NeoMedia Europe AG
-0011F3     (base 16)		NeoMedia Europe AG
-				Jens-Otto-Krag-Straße 11
-				Würselen    52146
-				DE
-
-00-11-E9   (hex)		STARNEX CO., LTD.
-0011E9     (base 16)		STARNEX CO., LTD.
-				4th Floor, C&C Bldg, 228-2
-				Kwangjin-gu  Seoul  143-200
-				KR
-
-00-11-EC   (hex)		AVIX INC.
-0011EC     (base 16)		AVIX INC.
-				1-1, Fukuura, Kanazawa-ku
-				Yokohama-shi  Kanagawa  236-0004
-				JP
-
-00-11-E7   (hex)		WORLDSAT - Texas de France
-0011E7     (base 16)		WORLDSAT - Texas de France
-				220, rue Gustave Eiffel
-				Aix en Provence  Bouches du Rhone  13854
-				FR
-
-00-12-02   (hex)		Decrane Aerospace - Audio International Inc.
-001202     (base 16)		Decrane Aerospace - Audio International Inc.
-				7300 Industry Drive
-				North Little Rock  AR  72117
-				US
-
-00-11-FE   (hex)		Keiyo System Research, Inc.
-0011FE     (base 16)		Keiyo System Research, Inc.
-				Hamada park Bldg. 6F
-				Chiba-city  Chiba-pref  260-0028
-				JP
-
-00-11-FD   (hex)		KORG INC.
-0011FD     (base 16)		KORG INC.
-				4015-2, Yanokuchi
-				Inagi-City  TOKYO  206-0812
-				JP
-
-00-11-FA   (hex)		Rane Corporation
-0011FA     (base 16)		Rane Corporation
-				10802 47th Avenue West
-				Mukilteo  WA  98275-5098
-				US
-
-00-11-CE   (hex)		Ubisense Limited
-0011CE     (base 16)		Ubisense Limited
-				St. Andrews House
-				Chesterton  Cambridge  CB4 1DL
-				GB
-
-00-11-D0   (hex)		Tandberg Data ASA
-0011D0     (base 16)		Tandberg Data ASA
-				Kjelsåsveien 161
-				Oslo    0411
-				NO
-
-00-11-C3   (hex)		Transceiving System Technology Corporation
-0011C3     (base 16)		Transceiving System Technology Corporation
-				NO.85,Sec.2,Gongdaowu Rd.,
-				Hsinchu    300
-				TW
-
-00-11-C2   (hex)		United Fiber Optic Communication
-0011C2     (base 16)		United Fiber Optic Communication
-				13-1,NO.700,Jungjeng RD,Junghe City
-				Junghe City  Taipei  235
-				TW
-
-00-12-28   (hex)		Data Ltd.
-001228     (base 16)		Data Ltd.
-				J. Hagaru 9
-				Bratislava    830 05
-				SK
-
-00-12-1F   (hex)		Harding Instruments
-00121F     (base 16)		Harding Instruments
-				9431-41Ave
-				Edmonton  AB  T6E 5X7
-				CA
-
-00-12-20   (hex)		Cadco Systems
-001220     (base 16)		Cadco Systems
-				2363 Merritt Dr
-				Garland  Texas  75041
-				US
-
-00-12-29   (hex)		BroadEasy Technologies Co.,Ltd
-001229     (base 16)		BroadEasy Technologies Co.,Ltd
-				24th Floor,Tower A,JinShan Mansion,
-				Nanjing  Jiangsu  210009
-				CN
-
-00-12-26   (hex)		Japan Direx Corporation
-001226     (base 16)		Japan Direx Corporation
-				Kyocera Harajuku Bldg.
-				Shibuya-ku  Tokyo  150-0001
-				JP
-
-00-12-22   (hex)		Skardin (UK) Ltd
-001222     (base 16)		Skardin (UK) Ltd
-				No. 5 Greenway (RO24)
-				Harlow  Essex  CM19 5QB
-				GB
-
-00-11-E8   (hex)		Tixi.Com
-0011E8     (base 16)		Tixi.Com
-				Karmeliterweg 114
-				Berlin    13465
-				DE
-
-00-11-E0   (hex)		U-MEDIA Communications, Inc.
-0011E0     (base 16)		U-MEDIA Communications, Inc.
-				 9F, No.1 Jin-Shan St.
-				Hsinchu    300
-				TW
-
-00-12-0D   (hex)		Advanced Telecommunication Technologies, Inc.
-00120D     (base 16)		Advanced Telecommunication Technologies, Inc.
-				10390 Wilshire Boulevard
-				Los Angeles  California  90024
-				US
-
-00-12-0E   (hex)		AboCom
-00120E     (base 16)		AboCom
-				1F , No. 21, Yanfa 2nd Rd., SBIP
-				Hsinchu City    300
-				TW
-
-00-11-F2   (hex)		Institute of Network Technologies
-0011F2     (base 16)		Institute of Network Technologies
-				17-th Line Vasilevsky Ostrov, 54-1
-				St.Petersburg    199178
-				RU
-
-00-12-10   (hex)		WideRay Corp
-001210     (base 16)		WideRay Corp
-				25 Kearny Street
-				San Francisco  CA  94108
-				US
-
-00-11-A4   (hex)		JStream Technologies Inc.
-0011A4     (base 16)		JStream Technologies Inc.
-				Bldg.53, R405, 195 Sec.4, Chung Hsing Rd.
-				Chutung,   Hsinchu  310
-				TW
-
-00-11-98   (hex)		Prism Media Products Limited
-001198     (base 16)		Prism Media Products Limited
-				William James House
-				Cambridge  Cambridgeshire  CB4 0WX
-				GB
-
-00-11-97   (hex)		Monitoring Technologies Limited
-001197     (base 16)		Monitoring Technologies Limited
-				14 Attenburys Park Estate
-				Timperley  Cheshire  WA14 5QE
-				GB
-
-00-11-99   (hex)		2wcom Systems GmbH
-001199     (base 16)		2wcom Systems GmbH
-				Am Sophienhof 8
-				Flensburg    24941
-				DE
-
-00-11-A7   (hex)		Infilco Degremont Inc.
-0011A7     (base 16)		Infilco Degremont Inc.
-				8007 Discovery Dr.
-				Richmond  Virginia  23255-1390
-				US
-
-00-11-A9   (hex)		MOIMSTONE Co., LTD
-0011A9     (base 16)		MOIMSTONE Co., LTD
-				7th Floor JoongPyung Building 64-1
-				Seoul    137-900
-				KR
-
-00-11-A3   (hex)		LanReady Technologies Inc.
-0011A3     (base 16)		LanReady Technologies Inc.
-				4F, No. 337, SinHu 2nd Road., NeiHu District
-				  Taipei  114
-				TW
-
-00-11-76   (hex)		Intellambda Systems, Inc.
-001176     (base 16)		Intellambda Systems, Inc.
-				48501 Warm Springs Blvd, #107
-				Fremont  California  94539
-				US
-
-00-11-77   (hex)		Coaxial Networks, Inc.
-001177     (base 16)		Coaxial Networks, Inc.
-				4633 Old Ironsides Dr
-				Santa Clara  CA  95054
-				US
-
-00-11-70   (hex)		GSC SRL
-001170     (base 16)		GSC SRL
-				VIA PER VIMERCATE
-				USMATE VELATE  MILANO  20040
-				IT
-
-00-11-6B   (hex)		Digital Data Communications Asia Co.,Ltd
-00116B     (base 16)		Digital Data Communications Asia Co.,Ltd
-				8F,No.41,Lane 221,Kang-Chien RD.,Nei-Hu Dis.,
-				Taipei City    114
-				TW
-
-00-11-69   (hex)		EMS Satcom
-001169     (base 16)		EMS Satcom
-				Green Lane
-				Tewkesbury  Gloucestershire  GL20 8HD
-				GB
-
-00-11-62   (hex)		STAR MICRONICS CO.,LTD.
-001162     (base 16)		STAR MICRONICS CO.,LTD.
-				536 Shimizunanatsushinya
-				Shizuoka    424-0066
-				JP
-
-00-11-81   (hex)		InterEnergy Co.Ltd,
-001181     (base 16)		InterEnergy Co.Ltd,
-				3F Shinyokohama Bosei Bldg.
-				Yokohama city  Kanagawa  222-0033
-				JP
-
-00-11-94   (hex)		Chi Mei Communication Systems, Inc.
-001194     (base 16)		Chi Mei Communication Systems, Inc.
-				11F, No.39, Chung Hua RD. Sec 1
-				Taipei    100
-				TW
-
-00-11-BF   (hex)		AESYS S.p.A.
-0011BF     (base 16)		AESYS S.p.A.
-				Via Artigiani, 41
-				Brusaporto  Bergamo  24060
-				IT
-
-00-11-B7   (hex)		Octalix B.V.
-0011B7     (base 16)		Octalix B.V.
-				Molensteijn 60
-				De Meern    NL-3454 PT
-				NL
-
-00-11-B9   (hex)		Inner Range Pty. Ltd.
-0011B9     (base 16)		Inner Range Pty. Ltd.
-				1 Millenium Court
-				Knoxfield  Victoria  3180
-				AU
-
-00-11-09   (hex)		Micro-Star International
-001109     (base 16)		Micro-Star International
-				No 69, Li-De Street, Jung-He City,
-				Taipei    
-				TW
-
-00-11-04   (hex)		TELEXY
-001104     (base 16)		TELEXY
-				1116, HYUNDAI 41 TOWER, 917-9
-				SEOUL    158-723
-				KR
-
-00-11-61   (hex)		NetStreams, LLC
-001161     (base 16)		NetStreams, LLC
-				3600 W. Parmer Lane
-				Austin  TX  78727
-				US
-
-00-11-56   (hex)		Pharos Systems NZ
-001156     (base 16)		Pharos Systems NZ
-				Level 3, 123 Carlton Gore Road
-				Auckland  NZ  1001
-				NZ
-
-00-11-59   (hex)		MATISSE NETWORKS INC
-001159     (base 16)		MATISSE NETWORKS INC
-				339 N BERNARDO AVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-11-5C   (hex)		Cisco Systems, Inc
-00115C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-5D   (hex)		Cisco Systems, Inc
-00115D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-26   (hex)		Venstar Inc.
-001126     (base 16)		Venstar Inc.
-				9250 Owensmouth Ave.
-				Chatsworth  CA  91311
-				US
-
-00-11-2E   (hex)		CEICOM
-00112E     (base 16)		CEICOM
-				17 rue Gaston Evrard
-				Toulouse Cedex 1    31094
-				FR
-
-00-11-22   (hex)		CIMSYS Inc
-001122     (base 16)		CIMSYS Inc
-				#301,Sinsung-clean BLDG,140, Nongseo-Ri,Kiheung-Eup
-				Yongin-City  Kyunggi-Do  449-711
-				KR
-
-00-11-17   (hex)		CESNET
-001117     (base 16)		CESNET
-				Zikova 4
-				Praha 6    160 00
-				CZ
-
-00-11-16   (hex)		COTEAU VERT CO., LTD.
-001116     (base 16)		COTEAU VERT CO., LTD.
-				3-3-19 KACHIDOKI
-				CHUO-KU  TOKYO  104-0054
-				JP
-
-00-11-10   (hex)		Maxanna Technology Co., Ltd.
-001110     (base 16)		Maxanna Technology Co., Ltd.
-				Room201, No.42-3, Luyuan Road
-				Guangzhou    510095
-				CN
-
-00-11-3B   (hex)		Micronet Communications Inc.
-00113B     (base 16)		Micronet Communications Inc.
-				12F-1, No. 100, Min-Chuan Road
-				Hsin-Tien  Taipei  231
-				TW
-
-00-11-3D   (hex)		KN SOLTEC CO.,LTD.
-00113D     (base 16)		KN SOLTEC CO.,LTD.
-				98B-5L NAMDONG INDUSTRIAL COMPLEX #662-4 GOJAN-DONG
-				NAMDONG-GU  INCHEON  405-818
-				KR
-
-00-11-34   (hex)		MediaCell, Inc.
-001134     (base 16)		MediaCell, Inc.
-				600 17th St
-				Denver  CO  80202
-				US
-
-00-11-35   (hex)		Grandeye Ltd
-001135     (base 16)		Grandeye Ltd
-				6 Huxley Road
-				Guildford  Surrey  GU2 7RE
-				GB
-
-00-11-21   (hex)		Cisco Systems, Inc
-001121     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-49   (hex)		Proliphix Inc.
-001149     (base 16)		Proliphix Inc.
-				3 Lan Drive
-				Westford  MA  01886
-				US
-
-00-0F-C0   (hex)		DELCOMp
-000FC0     (base 16)		DELCOMp
-				Technologielaan 3
-				Leuven    B-3000
-				BE
-
-00-0F-BA   (hex)		Tevebox AB
-000FBA     (base 16)		Tevebox AB
-				Berglinds vag 13
-				warmdo    S-13900
-				SE
-
-00-0F-B8   (hex)		CallURL Inc.
-000FB8     (base 16)		CallURL Inc.
-				3F-11, No. 508 Sec.  5, Chung-Hsiao E. Rd.
-				Taipei    110
-				TW
-
-00-0F-B7   (hex)		Cavium
-000FB7     (base 16)		Cavium
-				2315 N First Street
-				San Jose  CA  95131
-				US
-
-00-0F-D3   (hex)		Digium
-000FD3     (base 16)		Digium
-				445 Jan Davis Drive NW
-				Huntsville  AL  35806
-				US
-
-00-0F-D1   (hex)		Applied Wireless Identifications Group, Inc.
-000FD1     (base 16)		Applied Wireless Identifications Group, Inc.
-				382 Route 59, Section 292
-				Monsey  New York  10952
-				US
-
-00-0F-C1   (hex)		WAVE Corporation
-000FC1     (base 16)		WAVE Corporation
-				3-25-5 Chidori
-				Ohta-ku  Tokyo  146-0083
-				JP
-
-00-11-00   (hex)		Schneider Electric
-001100     (base 16)		Schneider Electric
-				5460 Pottsville Pike
-				Leesport  PA  19533
-				US
-
-00-0F-FA   (hex)		Optinel Systems, Inc.
-000FFA     (base 16)		Optinel Systems, Inc.
-				6835 Deerpath Rd.
-				Elkridge  MD  21075
-				US
-
-00-0F-FD   (hex)		Glorytek Network Inc.
-000FFD     (base 16)		Glorytek Network Inc.
-				5F.-3, No.16, Sec. 1, Dongda Rd.,
-				Hsinchu    300
-				TW
-
-00-0F-F9   (hex)		Valcretec, Inc.
-000FF9     (base 16)		Valcretec, Inc.
-				Byucksan Digital Valley II 15F
-				Seoul    153-803
-				KR
-
-00-0F-C4   (hex)		NST co.,LTD.
-000FC4     (base 16)		NST co.,LTD.
-				4-3-1 SHINMIYAKODA
-				HAMAMATSU  SHIZUOKA  431-2103
-				JP
-
-00-0F-C9   (hex)		Allnet GmbH
-000FC9     (base 16)		Allnet GmbH
-				Maistraße 2
-				Germering  Bavaria  82110
-				DE
-
-00-0F-C6   (hex)		Eurocom Industries A/S
-000FC6     (base 16)		Eurocom Industries A/S
-				porsvej 2
-				Aalborg  NV  DK-9200
-				DK
-
-00-0F-BE   (hex)		e-w/you Inc.
-000FBE     (base 16)		e-w/you Inc.
-				3F FINE Bldg. 6-17-17
-				Shinagawa-ku,  Tokyo  140-0013
-				JP
-
-00-0F-A9   (hex)		PC Fabrik
-000FA9     (base 16)		PC Fabrik
-				Buchenstrasse 13-15
-				Dresden  Sachsen  01097
-				DE
-
-00-0F-9A   (hex)		Synchrony, Inc.
-000F9A     (base 16)		Synchrony, Inc.
-				6410 Commonwealth Drive
-				Roanoke  VA  24018
-				US
-
-00-0F-EA   (hex)		Giga-Byte Technology Co.,LTD.
-000FEA     (base 16)		Giga-Byte Technology Co.,LTD.
-				No.215,Nan-Ping Road,Ping-Jen City,
-				Ping-Jen  Taoyuan  324
-				TW
-
-00-0F-F7   (hex)		Cisco Systems, Inc
-000FF7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0F-D8   (hex)		Force, Inc.
-000FD8     (base 16)		Force, Inc.
-				825 Park Street
-				Christiansburg  Va  24073
-				US
-
-00-0F-8D   (hex)		FAST TV-Server AG
-000F8D     (base 16)		FAST TV-Server AG
-				Ruedesheimerstraße 11-13
-				Munich  Germany  80686
-				DE
-
-00-0F-85   (hex)		ADDO-Japan Corporation
-000F85     (base 16)		ADDO-Japan Corporation
-				Shin Edobashi Bldg. 4F, 8-6 Nihombashi Kobuna-cho
-				Chuo-ku  Tokyo  103-0024
-				JP
-
-00-0F-82   (hex)		Mortara Instrument, Inc.
-000F82     (base 16)		Mortara Instrument, Inc.
-				7865 N. 86th St.
-				Milwaukee  WI  53224
-				US
-
-00-0F-49   (hex)		Northover Solutions Limited
-000F49     (base 16)		Northover Solutions Limited
-				Heath Cottage
-				Larling  Norfolk  NR16 2RB
-				GB
-
-00-0F-4B   (hex)		Oracle Corporation
-000F4B     (base 16)		Oracle Corporation
-				900 Chelmsford Street
-				Lowell  MA  01851
-				US
-
-00-0F-44   (hex)		Tivella Inc.
-000F44     (base 16)		Tivella Inc.
-				795 Main Street
-				Half Moon Bay  CA  94019
-				US
-
-00-0F-4A   (hex)		Kyushu-kyohan co.,ltd
-000F4A     (base 16)		Kyushu-kyohan co.,ltd
-				2-6-3,Koganemachi
-				Kitakyushu-city  Fukuoka  802-0071
-				JP
-
-00-0F-81   (hex)		PAL Pacific Inc.
-000F81     (base 16)		PAL Pacific Inc.
-				79405 Highway 111
-				La Quinta  CA  92253
-				US
-
-00-0F-7F   (hex)		UBSTORAGE Co.,Ltd.
-000F7F     (base 16)		UBSTORAGE Co.,Ltd.
-				#A-108, Seoul_Sanup_Jiwon_Center
-				Ganseo-gu  Seoul  157-840
-				KR
-
-00-0F-95   (hex)		ELECOM Co.,LTD Laneed Division
-000F95     (base 16)		ELECOM Co.,LTD Laneed Division
-				8F Kanda-Muromachi Bldg.
-				Chiyoda-Ku, Tokyo.    101-0052
-				JP
-
-00-0F-55   (hex)		Datawire Communication Networks Inc.
-000F55     (base 16)		Datawire Communication Networks Inc.
-				10 Carlson Court, Suite 300
-				Toronto  Ontario  M9W 6L2
-				CA
-
-00-0F-56   (hex)		Continuum Photonics Inc
-000F56     (base 16)		Continuum Photonics Inc
-				5 Fortune Drive
-				Billerica  MA  01821
-				US
-
-00-0F-60   (hex)		Lifetron Co.,Ltd
-000F60     (base 16)		Lifetron Co.,Ltd
-				6-7,Tenjinnishimachi
-				Osaka  Osaka Prefecture  530-0045
-				JP
-
-00-0F-5B   (hex)		Delta Information Systems, Inc.
-000F5B     (base 16)		Delta Information Systems, Inc.
-				300 Welsh Road, Bldg. 3
-				Horsham  PA  19044-2273
-				US
-
-00-0F-8A   (hex)		WideView
-000F8A     (base 16)		WideView
-				F. 6, No. 8, Wu-chuan 2 Rd, Hsin-Chuang City
-				Taipei Country    242
-				TW
-
-00-0F-90   (hex)		Cisco Systems, Inc
-000F90     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0F-77   (hex)		DENTUM CO.,LTD
-000F77     (base 16)		DENTUM CO.,LTD
-				Wookyung B/D 602 #678-6
-				Seoul    157-030
-				KR
-
-00-0F-7B   (hex)		Arce Sistemas, S.A.
-000F7B     (base 16)		Arce Sistemas, S.A.
-				C/Padre Larramendi, 3 - 2º
-				Bilbao  Vizcaya  48012
-				ES
-
-00-0F-68   (hex)		Vavic Network Technology, Inc.
-000F68     (base 16)		Vavic Network Technology, Inc.
-				1st Floor, 15 Jiangong Road
-				Guangzhou  Guangdong  510665
-				CN
-
-00-0E-E2   (hex)		Custom Engineering
-000EE2     (base 16)		Custom Engineering
-				Via Beretttine 2/b
-				Fontevivo  Parma  43010
-				IT
-
-00-0E-E3   (hex)		Chiyu Technology Co.,Ltd
-000EE3     (base 16)		Chiyu Technology Co.,Ltd
-				No. 28, Renai Road, Chiayi, 600
-				Chiayi    600
-				TW
-
-00-0E-E5   (hex)		bitWallet, Inc.
-000EE5     (base 16)		bitWallet, Inc.
-				Gate City Ohsaki West Tower 18F, 1-11-1 Osaki, Shinagawa-ku
-				Tokyo    1410032
-				JP
-
-00-0E-DA   (hex)		C-TECH UNITED CORP.
-000EDA     (base 16)		C-TECH UNITED CORP.
-				5F, No 665, CHUNG CHEN RD.
-				HSIN CHUANG CITT  of TAIPEI HSIEN    242
-				TW
-
-00-0E-CF   (hex)		PROFIBUS Nutzerorganisation e.V.
-000ECF     (base 16)		PROFIBUS Nutzerorganisation e.V.
-				Haid-und-Neu-Straße 7
-				Karlsruhe  Baden-Württemberg  76131
-				DE
-
-00-0E-EB   (hex)		Sandmartin(zhong shan)Electronics Co.,Ltd
-000EEB     (base 16)		Sandmartin(zhong shan)Electronics Co.,Ltd
-				3st Industrial Area,Tan Zhou,
-				Zhongshan  Guangdong  528467
-				CN
-
-00-0E-EC   (hex)		Orban
-000EEC     (base 16)		Orban
-				1525 Alvarado St.
-				San Leandro  CA  94577
-				US
-
-00-0E-EF   (hex)		Private
-000EEF     (base 16)		Private
-
-00-0E-F1   (hex)		EZQUEST INC.
-000EF1     (base 16)		EZQUEST INC.
-				23311 E. LA PALMA AVE.
-				YORBA LINDA  CA  92887
-				US
-
-00-0E-E7   (hex)		AAC ELECTRONICS CORP.
-000EE7     (base 16)		AAC ELECTRONICS CORP.
-				FLOOR 7,SIXTH BUILDING OF NAIANYOU TNAN INDUSTRIAL AREA,NANSHAN DISTRICT
-				SHENZHEN  PROVINCE GUANGDONG  518054
-				CN
-
-00-0F-1C   (hex)		DigitAll World Co., Ltd
-000F1C     (base 16)		DigitAll World Co., Ltd
-				Sejin Bld 2F, 689 ilwon2-dong,
-				gangnam-gu  Seoul  135-946
-				KR
-
-00-0F-1A   (hex)		Gaming Support B.V.
-000F1A     (base 16)		Gaming Support B.V.
-				Industrie weg 29
-				  Rotterdam  3044 AS
-				NL
-
-00-0F-0A   (hex)		Clear Edge Networks
-000F0A     (base 16)		Clear Edge Networks
-				11250 El Camino Real
-				San Diego  CA  92130
-				US
-
-00-0F-02   (hex)		Digicube Technology Co., Ltd
-000F02     (base 16)		Digicube Technology Co., Ltd
-				8F,No. 51, Lane  35, Jihu Rd.,
-				Taipei    114
-				TW
-
-00-0F-2F   (hex)		W-LINX TECHNOLOGY CO., LTD.
-000F2F     (base 16)		W-LINX TECHNOLOGY CO., LTD.
-				 2F,ELLEN L. SKELTON BUILDING,FISHER LANE ROAD
-				TORTOLA    
-				VG
-
-00-0F-2D   (hex)		CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.
-000F2D     (base 16)		CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.
-				NO. 25, Wen-Te Rd., Lo-Shan Village
-				Kwei Shan Hsiang  Taoyuan Hsien  330
-				TW
-
-00-0E-F7   (hex)		Vulcan Portals Inc
-000EF7     (base 16)		Vulcan Portals Inc
-				505 5th Ave South, Suite 900
-				Seattle  WA  98104
-				US
-
-00-0E-F0   (hex)		Festo AG & Co. KG
-000EF0     (base 16)		Festo AG & Co. KG
-				Ruiterstraße 82
-				Esslingen    73734
-				DE
-
-00-0E-E9   (hex)		WayTech Development, Inc.
-000EE9     (base 16)		WayTech Development, Inc.
-				11Floor, 253 Min-Sheng Road
-				HsinChu    300
-				TW
-
-00-0F-40   (hex)		Optical Internetworking Forum
-000F40     (base 16)		Optical Internetworking Forum
-				48377 Fremont Blvd
-				Fremont  CA  94538
-				US
-
-00-0F-33   (hex)		DUALi Inc.
-000F33     (base 16)		DUALi Inc.
-				#505 Samsung Techno Park Bldg 471
-				Suwon  Gyeonggi-do  442-824
-				KR
-
-00-0F-05   (hex)		3B SYSTEM INC.
-000F05     (base 16)		3B SYSTEM INC.
-				1727, SANKYUK2-DONG, BUK-GU
-				DAEGU    702-845
-				KR
-
-00-0E-C9   (hex)		YOKO Technology Corp.
-000EC9     (base 16)		YOKO Technology Corp.
-				6F, No.10, Lane16, Sec2, Sze-Chuan Rd., Pan-
-				Taipei    886
-				TW
-
-00-0E-BD   (hex)		Burdick, a Quinton Compny
-000EBD     (base 16)		Burdick, a Quinton Compny
-				500 Burdick Parkway
-				Deerfield  WI  53531
-				US
-
-00-0E-B9   (hex)		HASHIMOTO Electronics Industry Co.,Ltd.
-000EB9     (base 16)		HASHIMOTO Electronics Industry Co.,Ltd.
-				3866-12 Takasu-cho
-				Matsusaka  Mie  515-0104
-				JP
-
-00-0E-B2   (hex)		Micro-Research Finland Oy
-000EB2     (base 16)		Micro-Research Finland Oy
-				Välitalontie 83 C
-				Helsinki    FIN-00660
-				FI
-
-00-0E-D0   (hex)		Privaris, Inc.
-000ED0     (base 16)		Privaris, Inc.
-				675 Peter Jefferson Pkwy, Ste 150
-				Charlottesville  Virginia  22911
-				US
-
-00-0E-C3   (hex)		Logic Controls, Inc.
-000EC3     (base 16)		Logic Controls, Inc.
-				355 Denton Avenue
-				New Hyde Park  NY  11040
-				US
-
-00-0E-C4   (hex)		Iskra Transmission d.d.
-000EC4     (base 16)		Iskra Transmission d.d.
-				Stegne 11
-				Ljubljana    1000
-				SI
-
-00-0E-C1   (hex)		MYNAH Technologies
-000EC1     (base 16)		MYNAH Technologies
-				504 Trade Center Blvd
-				Chesterfield  MO  63005
-				US
-
-00-0E-89   (hex)		CLEMATIC
-000E89     (base 16)		CLEMATIC
-				101 rue Pierre SEMARD
-				CHATILLON  R.P.  92320
-				US
-
-00-0E-79   (hex)		Ample Communications Inc.
-000E79     (base 16)		Ample Communications Inc.
-				4034 Clipper Ct.
-				Fremont  CA  94538
-				US
-
-00-0E-A1   (hex)		Formosa Teletek Corporation
-000EA1     (base 16)		Formosa Teletek Corporation
-				358,Huaya 2nd Rd.
-				Taoyuan    333
-				TW
-
-00-0E-98   (hex)		HME Clear-Com LTD.
-000E98     (base 16)		HME Clear-Com LTD.
-				7400 Beach Drive
-				Cambridgeshire    CB25 9TP
-				GB
-
-00-0E-99   (hex)		Spectrum Digital, Inc
-000E99     (base 16)		Spectrum Digital, Inc
-				12502 Exchange Drive, Suite 440
-				Stafford  TX  77477
-				US
-
-00-0E-95   (hex)		Fujiya Denki Seisakusho Co.,Ltd.
-000E95     (base 16)		Fujiya Denki Seisakusho Co.,Ltd.
-				8F Fukushima BLDG. 6-25-11,Nishi-Gotanda
-				Shinagawa-Ku  Tokyo  141-0031
-				JP
-
-00-0E-97   (hex)		Ultracker Technology CO., Inc
-000E97     (base 16)		Ultracker Technology CO., Inc
-				14F-1, No. 888, Jingguo Road, Taoyuan City,
-				Taoyuan    330
-				TW
-
-00-0E-A7   (hex)		Endace Technology
-000EA7     (base 16)		Endace Technology
-				85 Alexandra Street
-				Hamilton    3204
-				NZ
-
-00-0E-6F   (hex)		IRIS Corporation Berhad
-000E6F     (base 16)		IRIS Corporation Berhad
-				IRIS Smart Technology Complex
-				Kuala Lumpur  WP  57000
-				MY
-
-00-0E-B5   (hex)		Ecastle Electronics Co., Ltd.
-000EB5     (base 16)		Ecastle Electronics Co., Ltd.
-				#502, Namjang B/D, Bangbae-dong,
-				Seoul    137-818
-				KR
-
-00-0E-50   (hex)		Thomson Telecom Belgium
-000E50     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				Edegem  Antwerp  B-2650
-				BE
-
-00-0E-4B   (hex)		atrium c and i
-000E4B     (base 16)		atrium c and i
-				124-4, Ojeon-dong,
-				Uiwang-city  Kyunggi-Do  437-819
-				KR
-
-00-0E-2B   (hex)		Safari Technologies
-000E2B     (base 16)		Safari Technologies
-				63855 M40 Hwy
-				Lawton  MI  49065
-				US
-
-00-0E-28   (hex)		Dynamic Ratings P/L
-000E28     (base 16)		Dynamic Ratings P/L
-				C/O Wilson Transformer Co.
-				Glen Waverley  Victoria  3150
-				AU
-
-00-0E-24   (hex)		Huwell Technology Inc.
-000E24     (base 16)		Huwell Technology Inc.
-				1F 82-21, Majin Building
-				Seoul    135-010
-				KR
-
-00-0E-3F   (hex)		Soronti, Inc.
-000E3F     (base 16)		Soronti, Inc.
-				12159 Business Park Dr, Suite 140
-				Draper  Utah  84020
-				US
-
-00-0E-45   (hex)		Beijing Newtry Electronic Technology Ltd
-000E45     (base 16)		Beijing Newtry Electronic Technology Ltd
-				PO Box 95, No. 1 Bei Sha Tan,
-				Beijing    10083
-				CN
-
-00-0E-1D   (hex)		ARION Technology Inc.
-000E1D     (base 16)		ARION Technology Inc.
-				3F, Pica Bldg, 894-2, Hogye 2 Dong
-				An-Yang City  Gyeonggi-Do  
-				KR
-
-00-0E-12   (hex)		Adaptive Micro Systems Inc.
-000E12     (base 16)		Adaptive Micro Systems Inc.
-				7840 North 86th St.
-				Milwaukee  WI  53224
-				US
-
-00-0E-4F   (hex)		Trajet GmbH
-000E4F     (base 16)		Trajet GmbH
-				Rebenring 33
-				Braunschweig  Nds.  38106
-				DE
-
-00-0E-38   (hex)		Cisco Systems, Inc
-000E38     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-36   (hex)		HEINESYS, Inc.
-000E36     (base 16)		HEINESYS, Inc.
-				3F, Sungkwang Bldg. 456-13, Sungnae-dong
-				Seoul    134-848
-				KR
-
-00-0E-17   (hex)		Private
-000E17     (base 16)		Private
-
-00-0E-15   (hex)		Tadlys LTD
-000E15     (base 16)		Tadlys LTD
-				ISRAELI SHIMON 3
-				RISHON lEZYYON  ISRAEL  75654
-				US
-
-00-0E-01   (hex)		ASIP Technologies Inc.
-000E01     (base 16)		ASIP Technologies Inc.
-				10F-2, NO.322, Sec.1, Guangfu Rd.,
-				Hsinchu    300
-				TW
-
-00-0D-CB   (hex)		Petcomkorea Co., Ltd.
-000DCB     (base 16)		Petcomkorea Co., Ltd.
-				5F,689-47,Geumjeong-dong,Gunpo-si,Kyungg
-				Kyunggi-do  gunpo-si  435-050
-				KR
-
-00-0D-CC   (hex)		NEOSMART Corp.
-000DCC     (base 16)		NEOSMART Corp.
-				Yoon-B/D 4F, 475-31, Bangbae 2-dong
-				Seoul  Seocho-gu  147-819
-				KR
-
-00-0D-CE   (hex)		Dynavac Technology Pte Ltd
-000DCE     (base 16)		Dynavac Technology Pte Ltd
-				30 Tuas Avenue 9
-				    639183
-				SG
-
-00-0D-E8   (hex)		Nasaco Electronics Pte. Ltd
-000DE8     (base 16)		Nasaco Electronics Pte. Ltd
-				Level 4, Nasaco Tech Centre
-				    486056
-				SG
-
-00-0D-E9   (hex)		Napatech Aps
-000DE9     (base 16)		Napatech Aps
-				Rundofrbivej 271, 1
-				Naerum    2850
-				DK
-
-00-0D-E6   (hex)		YOUNGBO ENGINEERING CO.,LTD
-000DE6     (base 16)		YOUNGBO ENGINEERING CO.,LTD
-				Mt.22, Jaeunga-ri, Jigsan-Eup,
-				Cheonan-shi  Chungcheongnam-do  #330-810
-				KR
-
-00-0D-C3   (hex)		First Communication, Inc.
-000DC3     (base 16)		First Communication, Inc.
-				1F, No.36, Industry E. Rd. IV.,
-				Hsinchu    
-				TW
-
-00-0D-B9   (hex)		PC Engines GmbH
-000DB9     (base 16)		PC Engines GmbH
-				Flughofstrasse 58
-				8152  Glattbrugg  
-				CH
-
-00-0D-B7   (hex)		SANKO ELECTRIC CO,.LTD
-000DB7     (base 16)		SANKO ELECTRIC CO,.LTD
-				7-23 Tamanoi-cho Atsuta-ku
-				Nagoya-shi  Aichi  456-0025
-				JP
-
-00-0D-AC   (hex)		Japan CBM Corporation
-000DAC     (base 16)		Japan CBM Corporation
-				5-68-10 Nakano,
-				Nakano-Ku  Tokyo  164-0001
-				JP
-
-00-0D-DF   (hex)		Japan Image & Network Inc.
-000DDF     (base 16)		Japan Image & Network Inc.
-				5-29-12 Shiba
-				Minato-ku  Tokyo  108-0014
-				JP
-
-00-0D-DB   (hex)		AIRWAVE TECHNOLOGIES INC.
-000DDB     (base 16)		AIRWAVE TECHNOLOGIES INC.
-				3F,No.9,Industry E. 9th Road
-				Hsinchu    300
-				TW
-
-00-0E-04   (hex)		CMA/Microdialysis AB
-000E04     (base 16)		CMA/Microdialysis AB
-				Dalvägen  10 / Box 2
-				Solna    171 18
-				SE
-
-00-0D-2A   (hex)		Scanmatic AS
-000D2A     (base 16)		Scanmatic AS
-				Kilsund
-				Staubø    4920
-				NO
-
-00-0D-29   (hex)		Cisco Systems, Inc
-000D29     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0D-26   (hex)		Primagraphics Limited
-000D26     (base 16)		Primagraphics Limited
-				Cambridge House, No.2 Focus Four
-				Letchworth Garden City  Hertfordshire  SG6 2TU
-				GB
-
-00-0D-46   (hex)		Parker SSD Drives
-000D46     (base 16)		Parker SSD Drives
-				9225 Forsyth Park Drive
-				Charlotte  NC  28273-3884
-				US
-
-00-0D-41   (hex)		Siemens AG ICM MP UC RD IT KLF1
-000D41     (base 16)		Siemens AG ICM MP UC RD IT KLF1
-				Suedstrasse 9
-				Kamp-Lintfort  NRW  47475
-				DE
-
-00-0D-42   (hex)		Newbest Development Limited
-000D42     (base 16)		Newbest Development Limited
-				3/F  Unit 311-312
-				  Shatin  NT  
-				HK
-
-00-0D-3C   (hex)		i.Tech Dynamic Ltd
-000D3C     (base 16)		i.Tech Dynamic Ltd
-				Room 1112, Metroplaza Tower 2, 223 Hing
-				    852
-				HK
-
-00-0D-55   (hex)		SANYCOM Technology Co.,Ltd
-000D55     (base 16)		SANYCOM Technology Co.,Ltd
-				6F,Beijing Capital Times Square,88# Xich
-				Beijing    100031
-				CN
-
-00-0D-57   (hex)		Fujitsu I-Network Systems Limited.
-000D57     (base 16)		Fujitsu I-Network Systems Limited.
-				1-403 kosugi-cho nakahara-ku
-				kawasaki  kanagawa  211-0063
-				JP
-
-00-0D-58   (hex)		Private
-000D58     (base 16)		Private
-
-00-0D-51   (hex)		DIVR Systems, Inc.
-000D51     (base 16)		DIVR Systems, Inc.
-				2161 Saturn Ct.
-				Bakersfield  CA  93308
-				US
-
-00-0D-39   (hex)		Network Electronics
-000D39     (base 16)		Network Electronics
-				Box 1020
-				Sandefjord  Sandefjord  N3204
-				NO
-
-00-0D-35   (hex)		PAC International Ltd
-000D35     (base 16)		PAC International Ltd
-				1 Park Gate Close
-				Stockport  Cheshire  SK6 2SZ
-				GB
-
-00-0D-95   (hex)		Opti-cell, Inc.
-000D95     (base 16)		Opti-cell, Inc.
-				100 High Tower Blvd.,  Suite 301
-				Pittsburgh  PA  15205
-				US
-
-00-0D-91   (hex)		Eclipse (HQ Espana) S.L.
-000D91     (base 16)		Eclipse (HQ Espana) S.L.
-				CC de Negocios
-				Puerto de Banus  Marbella  29660
-				ES
-
-00-0D-62   (hex)		Funkwerk Dabendorf GmbH
-000D62     (base 16)		Funkwerk Dabendorf GmbH
-				Maerkische Strasse
-				Dabendorf  Brandenburg  15806
-				DE
-
-00-0D-65   (hex)		Cisco Systems, Inc
-000D65     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0D-45   (hex)		Tottori SANYO Electric Co., Ltd.
-000D45     (base 16)		Tottori SANYO Electric Co., Ltd.
-				3-201, Minami Yoshikata
-				Tottori City  Tottori  680-8634
-				JP
-
-00-0D-A1   (hex)		MIRAE ITS Co.,LTD.
-000DA1     (base 16)		MIRAE ITS Co.,LTD.
-				7F, ChangHyun B/D,960-1,HoGye1Dong
-				AnYang  KyongiGiDo  431-840
-				KR
-
-00-0D-80   (hex)		Online Development Inc
-000D80     (base 16)		Online Development Inc
-				7209 Chapman Hwy
-				Knoxville  Tn  37920
-				US
-
-00-0D-13   (hex)		Wilhelm Rutenbeck GmbH&Co.KG
-000D13     (base 16)		Wilhelm Rutenbeck GmbH&Co.KG
-				Niederworth 1-10
-				Schalksmühle  NRW  58579
-				DE
-
-00-0D-19   (hex)		ROBE Show lighting
-000D19     (base 16)		ROBE Show lighting
-				Hazovice 2090
-				Roznov pod Radhostem    756 61
-				US
-
-00-0D-1C   (hex)		Amesys Defense
-000D1C     (base 16)		Amesys Defense
-				1030 Av de la LAUZIERE
-				AIX en PROVENCE  Cedex 03  13794
-				FR
-
-00-0C-ED   (hex)		Real Digital Media
-000CED     (base 16)		Real Digital Media
-				485 North Keller Road
-				Maitland  FL  32751
-				US
-
-00-0C-F0   (hex)		M & N GmbH
-000CF0     (base 16)		M & N GmbH
-				Dieselstr 18
-				Rosbach v.d.H.    61191
-				DE
-
-00-0C-F4   (hex)		AKATSUKI ELECTRIC MFG.CO.,LTD.
-000CF4     (base 16)		AKATSUKI ELECTRIC MFG.CO.,LTD.
-				593-1,aoji­ cho
-				kusatsu shi  shiga  525-0041
-				JP
-
-00-0C-F3   (hex)		CALL IMAGE SA
-000CF3     (base 16)		CALL IMAGE SA
-				867 Route Imperiale
-				BAILLARGUES    34670
-				FR
-
-00-0C-CF   (hex)		Cisco Systems, Inc
-000CCF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0C-D8   (hex)		M. K. Juchheim GmbH & Co
-000CD8     (base 16)		M. K. Juchheim GmbH & Co
-				Moltkestraße 13 - 31
-				Fulda  Hessen  36039
-				DE
-
-00-0C-C6   (hex)		Ka-Ro electronics GmbH
-000CC6     (base 16)		Ka-Ro electronics GmbH
-				Pascalstraße 22
-				Aachen  NW  52076
-				DE
-
-00-0D-01   (hex)		P&E Microcomputer Systems, Inc.
-000D01     (base 16)		P&E Microcomputer Systems, Inc.
-				710 Commonwealth Ave
-				Boston  Ma  02215
-				US
-
-00-0D-00   (hex)		Seaway Networks Inc.
-000D00     (base 16)		Seaway Networks Inc.
-				1 Chrysalis Way
-				Ottawa  Ontario  K2G 6P9
-				CA
-
-00-0C-F9   (hex)		Xylem Water Solutions
-000CF9     (base 16)		Xylem Water Solutions
-				Gesallvagen
-				    
-				SE
-
-00-0C-C4   (hex)		Tiptel AG
-000CC4     (base 16)		Tiptel AG
-				Halskestrasse 1
-				Ratingen  NRW  40880
-				DE
-
-00-0C-BA   (hex)		Jamex, Inc.
-000CBA     (base 16)		Jamex, Inc.
-				2415 N Triphammer Rd
-				Ithaca  NY  14850
-				US
-
-00-0C-D1   (hex)		SFOM Technology Corp.
-000CD1     (base 16)		SFOM Technology Corp.
-				No.18, Lane 32, Wufu 1st Rd., Luju shian
-				Luju Shiang  Tauyuan County  338
-				TW
-
-00-0C-CE   (hex)		Cisco Systems, Inc
-000CCE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0C-E0   (hex)		Trek Diagnostics Inc.
-000CE0     (base 16)		Trek Diagnostics Inc.
-				982 Keynote Circle
-				Cleveland  Ohio  44131
-				US
-
-00-0C-E2   (hex)		Rolls-Royce
-000CE2     (base 16)		Rolls-Royce
-				105 N. Sandusky St.
-				Mt. Vernon  Ohio  43050
-				US
-
-00-0D-0C   (hex)		MDI Security Systems
-000D0C     (base 16)		MDI Security Systems
-				9518 Ninth Street
-				Rancho Cucamonga  CA  91730
-				US
-
-00-0D-16   (hex)		UHS Systems Pty Ltd
-000D16     (base 16)		UHS Systems Pty Ltd
-				PO Box 6264
-				Alexandria  NSW  2015
-				AU
-
-00-0D-1F   (hex)		AV Digital
-000D1F     (base 16)		AV Digital
-				Pottendorfer Strasse 25-27/4/1/1
-				Wien    1120
-				AT
-
-00-0C-AD   (hex)		BTU International
-000CAD     (base 16)		BTU International
-				23 Esquire Rd
-				North Billerica  MA  01862
-				US
-
-00-0C-AA   (hex)		Cubic Transportation Systems Inc
-000CAA     (base 16)		Cubic Transportation Systems Inc
-				1308 S. Washington Street
-				Tullahoma  TN  37388
-				US
-
-00-0C-AC   (hex)		Citizen Watch Co., Ltd.
-000CAC     (base 16)		Citizen Watch Co., Ltd.
-				6-1-12, Tanashi-cho
-				Nishi-Tokyo-shi  Tokyo  188-8511
-				JP
-
-00-0C-AE   (hex)		Ailocom Oy
-000CAE     (base 16)		Ailocom Oy
-				Hatanpaan valtatie 24
-				TAMPERE  FIN  33950
-				FI
-
-00-0C-A3   (hex)		Rancho Technology, Inc.
-000CA3     (base 16)		Rancho Technology, Inc.
-				10783 Bell Court
-				Rancho Cucamonga  CA  19730
-				US
-
-00-0C-9C   (hex)		Chongho information & communications
-000C9C     (base 16)		Chongho information & communications
-				Chongho Bldg, #7-61 Yangjae-dong, Seocho
-				Seoul    137-130
-				KR
-
-00-0C-97   (hex)		NV ADB TTV Technologies SA
-000C97     (base 16)		NV ADB TTV Technologies SA
-				LEUVENSESTEENWEG,585
-				ZAVENTEM  Vlaamse brabant  1930
-				BE
-
-00-0C-8F   (hex)		Nergal s.r.l.
-000C8F     (base 16)		Nergal s.r.l.
-				Viale Bardanzellu,8
-				Roma    00155
-				IT
-
-00-0C-92   (hex)		WolfVision Gmbh
-000C92     (base 16)		WolfVision Gmbh
-				VWP
-				Goetzis  Vorarlberg  A-6840
-				AT
-
-00-0C-93   (hex)		Xeline Co., Ltd.
-000C93     (base 16)		Xeline Co., Ltd.
-				7F. Chungjin Bldg., 475-22
-				Seoul    137-819
-				KR
-
-00-0C-7F   (hex)		synertronixx GmbH
-000C7F     (base 16)		synertronixx GmbH
-				Lange Laube 22
-				Hannover  Niedersachsen  30159
-				DE
-
-00-0C-81   (hex)		Schneider Electric (Australia) 
-000C81     (base 16)		Schneider Electric (Australia) 
-				80 Schneider Road
-				Eagle Farm   Qld  4009
-				AU
-
-00-0C-9E   (hex)		MemoryLink Corp.
-000C9E     (base 16)		MemoryLink Corp.
-				36 Jewelers Park Drive
-				Neenah  Wisconsin  54957
-				US
-
-00-0C-95   (hex)		PrimeNet
-000C95     (base 16)		PrimeNet
-				Hongik University, 72-1, Sangsu-Dong, Ma
-				Seoul    121-791
-				KR
-
-00-0C-76   (hex)		MICRO-STAR INTERNATIONAL CO., LTD.
-000C76     (base 16)		MICRO-STAR INTERNATIONAL CO., LTD.
-				No 69, Li-De Street, Jung-He City, Taipe
-				Taipei    
-				TW
-
-00-0C-80   (hex)		Opelcomm Inc.
-000C80     (base 16)		Opelcomm Inc.
-				46750 Fremont Blvd. Ste 210
-				Fremont  CA  94538
-				US
-
-00-0C-7D   (hex)		TEIKOKU ELECTRIC MFG. CO., LTD
-000C7D     (base 16)		TEIKOKU ELECTRIC MFG. CO., LTD
-				60,HIRANO
-				IBO-GUN  HYOGO  679-4395
-				JP
-
-00-0C-B7   (hex)		Nanjing Huazhuo Electronics Co., Ltd.
-000CB7     (base 16)		Nanjing Huazhuo Electronics Co., Ltd.
-				No.77 Gaohu Road
-				Nanjing  Jiangsu  211100
-				CN
-
-00-0C-68   (hex)		SigmaTel, Inc.
-000C68     (base 16)		SigmaTel, Inc.
-				201 Jones Road
-				Waltham  MA  02451
-				US
-
-00-0C-07   (hex)		Iftest AG
-000C07     (base 16)		Iftest AG
-				Schwimmbadstrasse 43
-				Wettingen  AG  5430
-				CH
-
-00-0C-0C   (hex)		APPRO TECHNOLOGY INC.
-000C0C     (base 16)		APPRO TECHNOLOGY INC.
-				13F, No. 66 Chung-Cheng Rd,
-				Hsin-Chuang  Taipei  242
-				TW
-
-00-0C-0E   (hex)		XtremeSpectrum, Inc.
-000C0E     (base 16)		XtremeSpectrum, Inc.
-				8133 Leesburg Pike
-				Vienna  VA  22182
-				US
-
-00-0C-12   (hex)		Micro-Optronic-Messtechnik GmbH
-000C12     (base 16)		Micro-Optronic-Messtechnik GmbH
-				Lessingstrasse 14
-				Langebrück  Saxony  D-01465
-				DE
-
-00-0C-10   (hex)		PNI Corporation
-000C10     (base 16)		PNI Corporation
-				5464 Skylane Blvd #A
-				Santa Rosa  CA  95403
-				US
-
-00-0C-40   (hex)		Altech Controls
-000C40     (base 16)		Altech Controls
-				1545 Industial Drive
-				Missouri City  Texas  77489
-				US
-
-00-0C-3E   (hex)		Crest Audio
-000C3E     (base 16)		Crest Audio
-				16-00 Pollitt Drive
-				Fair Lawn  NJ  07410
-				US
-
-00-0C-3A   (hex)		Oxance
-000C3A     (base 16)		Oxance
-				75-85 rue Richelieu
-				les Lucs sur Boulogne    85170
-				FR
-
-00-0C-35   (hex)		KaVo Dental GmbH & Co. KG
-000C35     (base 16)		KaVo Dental GmbH & Co. KG
-				Bismarkring 39
-				Biberach/Riss  Baden-Württemberg  88400
-				DE
-
-00-0C-56   (hex)		Megatel Computer (1986) Corp.
-000C56     (base 16)		Megatel Computer (1986) Corp.
-				586 Main Street
-				Glen Williams  Ontario  L7G 3T6
-				CA
-
-00-0C-57   (hex)		MACKIE Engineering Services Belgium BVBA
-000C57     (base 16)		MACKIE Engineering Services Belgium BVBA
-				Industriepark Noord 10
-				Sint Niklaas    B-9100
-				BE
-
-00-0C-23   (hex)		Beijing Lanchuan Tech. Co., Ltd.
-000C23     (base 16)		Beijing Lanchuan Tech. Co., Ltd.
-				Rm220,No.30 Shangyuancun,Gaoliangqiaolu,
-				Beijing    100044
-				CN
-
-00-0C-25   (hex)		Allied Telesis Labs, Inc. 
-000C25     (base 16)		Allied Telesis Labs, Inc. 
-				Suite 450
-				Raleigh  NC  27606
-				US
-
-00-0C-18   (hex)		Zenisu Keisoku Inc.
-000C18     (base 16)		Zenisu Keisoku Inc.
-				2-13-37
-				Fuchu-shi  Tokyo  183-0027
-				JP
-
-00-0C-0A   (hex)		Guangdong Province Electronic Technology Research Institute
-000C0A     (base 16)		Guangdong Province Electronic Technology Research Institute
-				Electronic Technology Building,NO.61-65,
-				Guangzhou  Guangdong  510630
-				CN
-
-00-0C-0B   (hex)		Broadbus Technologies
-000C0B     (base 16)		Broadbus Technologies
-				80 Central Street
-				Boxborough  Massachusetts  01719
-				US
-
-00-0C-4A   (hex)		Cygnus Microsystems (P) Limited
-000C4A     (base 16)		Cygnus Microsystems (P) Limited
-				93, Phase II,
-				Hyderabad  Andhra Pradesh  500051
-				IN
-
-00-0C-54   (hex)		Pedestal Networks, Inc
-000C54     (base 16)		Pedestal Networks, Inc
-				6503 Dumbarton Circle
-				Fremont  CA  94555
-				US
-
-00-0C-37   (hex)		Geomation, Inc.
-000C37     (base 16)		Geomation, Inc.
-				25188 Genesee Trail Road
-				Golden  CO  80401
-				US
-
-00-0B-E8   (hex)		AOIP
-000BE8     (base 16)		AOIP
-				6 rue Maryse BASTIE
-				COURCOURONNES  Idf  91080
-				FR
-
-00-0B-DC   (hex)		AKCP
-000BDC     (base 16)		AKCP
-				67/285  Muangake Village #8
-				Amphur Muang  Patomthanee  12000
-				TH
-
-00-0B-D8   (hex)		Industrial Scientific Corp.
-000BD8     (base 16)		Industrial Scientific Corp.
-				1001 Oakdale Road
-				Oakdale  PA  15071
-				US
-
-00-0B-D7   (hex)		DORMA Time + Access GmbH
-000BD7     (base 16)		DORMA Time + Access GmbH
-				Mainzer Straße 36-52
-				Bonn  Nordrheinwestfalen  53179
-				DE
-
-00-0B-DD   (hex)		TOHOKU RICOH Co., LTD.
-000BDD     (base 16)		TOHOKU RICOH Co., LTD.
-				3-1 Shinmeido
-				Shibata  Miyagi pref.  989-1695
-				JP
-
-00-0B-E5   (hex)		HIMS International Corporation
-000BE5     (base 16)		HIMS International Corporation
-				139-9
-				Daejeon  Daejeon  305-806
-				KR
-
-00-0B-E9   (hex)		Actel Corporation
-000BE9     (base 16)		Actel Corporation
-				200 Valley Road
-				Mt. Arlington  NJ  07856
-				US
-
-00-0B-E3   (hex)		Key Stream Co., Ltd.
-000BE3     (base 16)		Key Stream Co., Ltd.
-				No. 2 Nagaoka Bldg. 4F,  2-8-5 Hatchobor
-				Chuo-ku  Tokyo  104-0032
-				JP
-
-00-0B-D3   (hex)		cd3o
-000BD3     (base 16)		cd3o
-				402 W Broadway
-				San Deigo  CA  92101
-				US
-
-00-0B-D5   (hex)		Nvergence, Inc.
-000BD5     (base 16)		Nvergence, Inc.
-				Jeil Bldg. 4th, Samsung-dong 168-26, Kan
-				Seoul    135-090
-				KR
-
-00-0B-D1   (hex)		Aeronix, Inc.
-000BD1     (base 16)		Aeronix, Inc.
-				1775 W. Hibiscus Blvd,
-				Melbourne  FL  32901
-				US
-
-00-0B-D2   (hex)		Remopro Technology Inc.
-000BD2     (base 16)		Remopro Technology Inc.
-				No. 443, Huannan RD.,
-				Pingjen City  Taoyuan  324
-				TW
-
-00-0B-C7   (hex)		ICET S.p.A.
-000BC7     (base 16)		ICET S.p.A.
-				Via Quarto Negroni, 63
-				Cecchina di Ariccia  Roma  00040
-				IT
-
-00-0B-B8   (hex)		Kihoku Electronic Co.
-000BB8     (base 16)		Kihoku Electronic Co.
-				Marukatubiru 3F 4-9-6
-				Osakashi  Osaka-hu  556-0005
-				JP
-
-00-0B-C0   (hex)		China IWNComm Co., Ltd.
-000BC0     (base 16)		China IWNComm Co., Ltd.
-				4F.C Xietong Building,No.12 Gaoxin 2nd r
-				Xi'an  shaanxi  710075
-				CN
-
-00-0B-B0   (hex)		Sysnet Telematica srl
-000BB0     (base 16)		Sysnet Telematica srl
-				Viale Berbera, 49
-				Milan    20162
-				IT
-
-00-0B-B4   (hex)		RDC Semiconductor Inc.,
-000BB4     (base 16)		RDC Semiconductor Inc.,
-				6F-1 , No.2-1, Lihsin Rd, Science-Based
-				Hsin Chu    300
-				TW
-
-00-0B-CC   (hex)		JUSAN, S.A.
-000BCC     (base 16)		JUSAN, S.A.
-				Vivero, 5
-				MADRID    28040
-				ES
-
-00-0B-AC   (hex)		3Com Ltd
-000BAC     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-0B-F9   (hex)		Gemstone Communications, Inc.
-000BF9     (base 16)		Gemstone Communications, Inc.
-				6Fl., No. 102,  Hengyang Rd.
-				Taipei    100
-				TW
-
-00-0B-FC   (hex)		Cisco Systems, Inc
-000BFC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-EA   (hex)		Zultys Technologies
-000BEA     (base 16)		Zultys Technologies
-				785 Lucern Drive
-				Sunnyvale  CA  94085
-				US
-
-00-0B-9F   (hex)		Neue ELSA GmbH
-000B9F     (base 16)		Neue ELSA GmbH
-				Sonnenweg 11
-				Aachen    52070
-				DE
-
-00-0B-98   (hex)		NiceTechVision
-000B98     (base 16)		NiceTechVision
-				IntelZone 703
-				YongIn  Gugal-ri  Ki Heung  KyoungKiDo  354-2
-				KR
-
-00-0B-95   (hex)		eBet Gaming Systems Pty Ltd
-000B95     (base 16)		eBet Gaming Systems Pty Ltd
-				Suite D, 255 Rawson Street
-				Auburn  NSW  2144
-				AU
-
-00-0B-9E   (hex)		Yasing Technology Corp.
-000B9E     (base 16)		Yasing Technology Corp.
-				No. 50, Ta Hsueh Road, HsinChu, Taiwan
-				HsinChu    300
-				TW
-
-00-0B-88   (hex)		Vidisco ltd.
-000B88     (base 16)		Vidisco ltd.
-				17 Yechiel Dresner
-				Petach-Tikva    49277
-				IL
-
-00-0B-54   (hex)		BiTMICRO Networks, Inc.
-000B54     (base 16)		BiTMICRO Networks, Inc.
-				47929 Fremont Blvd
-				Fremont  CA  94538
-				US
-
-00-0B-8C   (hex)		Flextronics
-000B8C     (base 16)		Flextronics
-				Migdal HaEmek
-				23108  Hataasia 1  
-				IL
-
-00-0B-8A   (hex)		MITEQ Inc.
-000B8A     (base 16)		MITEQ Inc.
-				100 Davids Drive
-				Hauppauge  NY  11788-2034
-				US
-
-00-0B-90   (hex)		ADVA Optical Networking Ltd.
-000B90     (base 16)		ADVA Optical Networking Ltd.
-				ADVAntage House
-				York    YO30 4RY
-				GB
-
-00-0B-79   (hex)		X-COM, Inc.
-000B79     (base 16)		X-COM, Inc.
-				8809 Sudley Road
-				Manassas  VA  20110
-				US
-
-00-0B-4B   (hex)		VISIOWAVE SA
-000B4B     (base 16)		VISIOWAVE SA
-				Route de la Pierre 22
-				ECUBLENS  VAUD  CH-1024
-				CH
-
-00-0B-36   (hex)		Productivity Systems, Inc.
-000B36     (base 16)		Productivity Systems, Inc.
-				1711 Analog Drive
-				Richardson  TX  75081-1944
-				US
-
-00-0B-35   (hex)		Quad Bit System co., Ltd.
-000B35     (base 16)		Quad Bit System co., Ltd.
-				402 Gayang Technotown
-				Seoul  Kangseogu  157-810
-				KR
-
-00-0B-75   (hex)		Iosoft Ltd.
-000B75     (base 16)		Iosoft Ltd.
-				5 Woodlark Road
-				Cambridge  Cambs.  CB3 0HT
-				GB
-
-00-0B-70   (hex)		Load Technology, Inc.
-000B70     (base 16)		Load Technology, Inc.
-				4225 Production Court
-				Las Vegas  NV  89115
-				US
-
-00-0B-6F   (hex)		Media Streaming Networks Inc
-000B6F     (base 16)		Media Streaming Networks Inc
-				1905 Anam Tower, 702-10, Yeoksam dong, K
-				Seoul    135-080
-				KR
-
-00-0B-43   (hex)		Microscan Systems, Inc.
-000B43     (base 16)		Microscan Systems, Inc.
-				700 SW 39th St
-				Renton  WA  98057
-				US
-
-00-0B-45   (hex)		Cisco Systems, Inc
-000B45     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-4C   (hex)		Clarion (M) Sdn Bhd
-000B4C     (base 16)		Clarion (M) Sdn Bhd
-				Phase 3
-				Bayan Lepas  Penang  11900
-				MY
-
-00-0B-63   (hex)		Kaleidescape
-000B63     (base 16)		Kaleidescape
-				One First Street, Suite Sixteen
-				Los Altos  CA  94022
-				US
-
-00-0B-68   (hex)		Addvalue Communications Pte Ltd
-000B68     (base 16)		Addvalue Communications Pte Ltd
-				28,TAI SENG STREET #06-02
-				Singapore    534106
-				SG
-
-00-0B-58   (hex)		Astronautics C.A  LTD
-000B58     (base 16)		Astronautics C.A  LTD
-				23 hayarkon street
-				Bnei Brak    51261
-				IL
-
-00-0B-55   (hex)		ADInstruments
-000B55     (base 16)		ADInstruments
-				P. O. Box 587
-				Dunedin  Otago  9001
-				NZ
-
-00-0B-87   (hex)		American Reliance Inc.
-000B87     (base 16)		American Reliance Inc.
-				11801 Goldring Rd
-				Arcadia  CA  91006
-				US
-
-00-0B-0D   (hex)		Air2U, Inc.
-000B0D     (base 16)		Air2U, Inc.
-				No. 5-1 Innovation Rd 1, Science-based P
-				Hsin-Chu  Taiwan  300
-				TW
-
-00-0B-0B   (hex)		Corrent Corporation
-000B0B     (base 16)		Corrent Corporation
-				1711 W. Greentree Dr.
-				Tempe  AZ  85284-2717
-				US
-
-00-0B-08   (hex)		Pillar Data Systems
-000B08     (base 16)		Pillar Data Systems
-				1371 McCarthy Blvd.
-				Milpitas  CA  95035
-				US
-
-00-0B-27   (hex)		Scion Corporation
-000B27     (base 16)		Scion Corporation
-				82 Worman's Mill Court
-				Frederick  MD  21701
-				US
-
-00-0B-21   (hex)		G-Star Communications Inc.
-000B21     (base 16)		G-Star Communications Inc.
-				5F, 69-10, Sec. 2, Chung Cheng East Road
-				Taipei Hsien    251
-				TW
-
-00-0A-DA   (hex)		Vindicator Technologies
-000ADA     (base 16)		Vindicator Technologies
-				5307 Industrial Oaks Blvd.
-				Austin  Texas  78735
-				US
-
-00-0A-C9   (hex)		Zambeel Inc
-000AC9     (base 16)		Zambeel Inc
-				45700 Northport Loop East
-				Fremont  CA  94538
-				US
-
-00-0B-25   (hex)		Aeluros
-000B25     (base 16)		Aeluros
-				201 San Antonio Circle #172
-				Mountain View  CA  94040
-				US
-
-00-0B-1A   (hex)		Industrial Defender, Inc.
-000B1A     (base 16)		Industrial Defender, Inc.
-				16 Chestnut Street
-				Foxborough  MA  02035
-				US
-
-00-0B-18   (hex)		Private
-000B18     (base 16)		Private
-
-00-0B-15   (hex)		Platypus Technology
-000B15     (base 16)		Platypus Technology
-				4/1 Atchison St
-				St Leonards  NSW  2065
-				AU
-
-00-0A-FA   (hex)		Traverse Technologies Australia
-000AFA     (base 16)		Traverse Technologies Australia
-				Unit 13, 240 Sydney Rd
-				Coburg  Victoria  3058
-				AU
-
-00-0A-FC   (hex)		Core Tec Communications, LLC
-000AFC     (base 16)		Core Tec Communications, LLC
-				49 Leavenworth Street
-				Waterbury  CT  06702
-				US
-
-00-0A-EC   (hex)		Koatsu Gas Kogyo Co., Ltd.
-000AEC     (base 16)		Koatsu Gas Kogyo Co., Ltd.
-				1-5, Doyama-cho, Kita-ku, Osaka
-				Osaka    530-8411
-				JP
-
-00-0A-E7   (hex)		ELIOP S.A.
-000AE7     (base 16)		ELIOP S.A.
-				Avenida de Manoteras, 30
-				Madrid    E-28050
-				ES
-
-00-0A-E8   (hex)		Cathay Roxus Information Technology Co. LTD
-000AE8     (base 16)		Cathay Roxus Information Technology Co. LTD
-				Fuhua mansion building A/B 4F
-				Beijing    100027
-				CN
-
-00-0A-DD   (hex)		Allworx Corp.
-000ADD     (base 16)		Allworx Corp.
-				245 East Main Street
-				East Rochester  NY  14604
-				US
-
-00-0A-E1   (hex)		EG Technology
-000AE1     (base 16)		EG Technology
-				250 15th Street
-				Atlanta  GA  30318
-				US
-
-00-0A-DF   (hex)		Gennum Corporation
-000ADF     (base 16)		Gennum Corporation
-				P.O Box 489
-				Burlington  Ontario  L7R 3Y3
-				CA
-
-00-0B-3F   (hex)		Anthology Solutions Inc.
-000B3F     (base 16)		Anthology Solutions Inc.
-				1722 Ringwood Ave.
-				San Jose  CA  95131
-				US
-
-00-0B-3C   (hex)		Cygnal Integrated Products, Inc.
-000B3C     (base 16)		Cygnal Integrated Products, Inc.
-				4301 Westbank Drive
-				Austin  TX  78746
-				US
-
-00-0A-F1   (hex)		Clarity Design, Inc.
-000AF1     (base 16)		Clarity Design, Inc.
-				13029 Danielson Street
-				Poway  CA  92064-8810
-				US
-
-00-0A-F3   (hex)		Cisco Systems, Inc
-000AF3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0A-8D   (hex)		EUROTHERM LIMITED
-000A8D     (base 16)		EUROTHERM LIMITED
-				FARADAY CLOSE
-				WORTHING  WEST SUSSEX  BN13 3PL
-				GB
-
-00-0A-9F   (hex)		Pannaway Technologies, Inc.
-000A9F     (base 16)		Pannaway Technologies, Inc.
-				215 Commerce Way
-				Portsmouth  NH  03801
-				US
-
-00-0A-8F   (hex)		Aska International Inc.
-000A8F     (base 16)		Aska International Inc.
-				306 Riverseven
-				Kochi    780-8088
-				JP
-
-00-0A-A0   (hex)		Cedar Point Communications
-000AA0     (base 16)		Cedar Point Communications
-				16 Route 111, Bldg 3
-				Derry  NH  03038
-				US
-
-00-0A-8E   (hex)		Invacom Ltd
-000A8E     (base 16)		Invacom Ltd
-				Business and Technology Centre
-				Stevenage  Hertfordshire  SG1 2DX
-				GB
-
-00-0A-C1   (hex)		Futuretel
-000AC1     (base 16)		Futuretel
-				21580 Stevens Creek Blvd, Suite 208
-				Cupertino  CA  95014
-				US
-
-00-0A-BE   (hex)		OPNET Technologies CO., LTD.
-000ABE     (base 16)		OPNET Technologies CO., LTD.
-				3F, NO.5, Industry E. Rd. IX, Science-Ba
-				Hsinchu    300
-				TW
-
-00-0A-C3   (hex)		eM Technics Co., Ltd.
-000AC3     (base 16)		eM Technics Co., Ltd.
-				7F., IT Venture Tower., 78,
-				Seoul    138-803
-				KR
-
-00-0A-C4   (hex)		Daewoo Teletech Co., Ltd
-000AC4     (base 16)		Daewoo Teletech Co., Ltd
-				265-3, Seohyeon, Bundang
-				Seongnam  Gyeonggi  
-				KR
-
-00-0A-C0   (hex)		Fuyoh Video Industry CO., LTD.
-000AC0     (base 16)		Fuyoh Video Industry CO., LTD.
-				7-25 Higashi Kibogaoka
-				Yokohama-shi  Kanagawa-ken  246-0008
-				JP
-
-00-0A-AE   (hex)		Rosemount Process Analytical
-000AAE     (base 16)		Rosemount Process Analytical
-				6573A Cochran Rd.
-				Solon  Ohio  44139-3922
-				US
-
-00-0A-B3   (hex)		Fa. GIRA
-000AB3     (base 16)		Fa. GIRA
-				Dahlienstraße
-				Radevormwald  Nordrhein-Westfalen  42477
-				DE
-
-00-0A-BA   (hex)		Arcon Technology Limited
-000ABA     (base 16)		Arcon Technology Limited
-				Rm. 3711-12, 37/F., Cable TV Tower ,
-				Hong Kong    
-				CN
-
-00-0A-B6   (hex)		COMPUNETIX, INC
-000AB6     (base 16)		COMPUNETIX, INC
-				2420 MOSSIDE BLVD.
-				MONROEVILLE  PA  15146
-				US
-
-00-0A-AF   (hex)		Pipal Systems
-000AAF     (base 16)		Pipal Systems
-				2903 Bunker Hill Lane
-				Santa Clara  CA  95054
-				US
-
-00-0A-76   (hex)		Beida Jade Bird Huaguang Technology Co.,Ltd
-000A76     (base 16)		Beida Jade Bird Huaguang Technology Co.,Ltd
-				No.207 Chengfu Road, Haidian District
-				Beijing    100871
-				CN
-
-00-0A-B2   (hex)		Fresnel Wireless Systems
-000AB2     (base 16)		Fresnel Wireless Systems
-				1333 Gateway Drive
-				Melbourne  FL  32901
-				US
-
-00-0A-AA   (hex)		AltiGen Communications Inc.
-000AAA     (base 16)		AltiGen Communications Inc.
-				47427 Fremont Blvd.
-				Fremont  CA  94538
-				US
-
-00-0A-99   (hex)		Calamp Wireless Networks Inc
-000A99     (base 16)		Calamp Wireless Networks Inc
-				101-5540 Ferrier Street
-				Town of Mount-Royal  Quebec  H4P 1M2
-				CA
-
-00-0A-93   (hex)		W2 Networks, Inc.
-000A93     (base 16)		W2 Networks, Inc.
-				5808 NW Lac Leman Drive
-				Issaquah  Washington  98027
-				US
-
-00-0A-89   (hex)		Creval Systems, Inc.
-000A89     (base 16)		Creval Systems, Inc.
-				2F,24-4,Sanwolgok-Dong,Sungbuk-Ku,Seoul,
-				Seoul    136-120
-				KR
-
-00-0A-80   (hex)		Telkonet Inc.
-000A80     (base 16)		Telkonet Inc.
-				20374 Seneca Meadows Pkwy
-				Germantown  MD  21401
-				US
-
-00-0A-79   (hex)		corega K.K
-000A79     (base 16)		corega K.K
-				1-19-20, Shinyokohama
-				Yokohama-city  Kanagawa-ken  222-0033
-				JP
-
-00-0A-5C   (hex)		Carel s.p.a.
-000A5C     (base 16)		Carel s.p.a.
-				Via dell' Industria, 11
-				Brugine  Padova  35020
-				IT
-
-00-0A-5A   (hex)		GreenNET Technologies Co.,Ltd.
-000A5A     (base 16)		GreenNET Technologies Co.,Ltd.
-				No.10, Qiongyu Road,Sciences-based Indus
-				Shenzhen  Guangdong  518057
-				CN
-
-00-0A-56   (hex)		HITACHI Maxell Ltd.
-000A56     (base 16)		HITACHI Maxell Ltd.
-				6-20-1 Kinunodai
-				Yawara-mura, Tsukuba-gun  IBARAKI  300-2496
-				JP
-
-00-0A-51   (hex)		GyroSignal Technology Co., Ltd.
-000A51     (base 16)		GyroSignal Technology Co., Ltd.
-				5F,No. 77,Lide St.
-				Zhonghe City  Taipei County  23556
-				TW
-
-00-0A-2C   (hex)		Active Tchnology Corporation
-000A2C     (base 16)		Active Tchnology Corporation
-				16-23, Shibaura 2-Chome,
-				Tokyo  Tokyo  108-0023
-				JP
-
-00-0A-2A   (hex)		QSI Systems Inc.
-000A2A     (base 16)		QSI Systems Inc.
-				7 Raymond Avenue
-				Salem  NH  03079
-				US
-
-00-0A-23   (hex)		Parama Networks Inc
-000A23     (base 16)		Parama Networks Inc
-				1955 The Alameda
-				San Jose  CA  95126
-				US
-
-00-0A-1F   (hex)		ART WARE Telecommunication Co., Ltd.
-000A1F     (base 16)		ART WARE Telecommunication Co., Ltd.
-				806 Ace Techno Tower #1, 197-17
-				Seoul    152-050
-				KR
-
-00-0A-0A   (hex)		SUNIX Co., Ltd.
-000A0A     (base 16)		SUNIX Co., Ltd.
-				3Fl., No. 76, Baugau Rd.,
-				Shindian  Taipei  231
-				TW
-
-00-0A-05   (hex)		Widax Corp.
-000A05     (base 16)		Widax Corp.
-				269 Stevens Street
-				Hyannis  MA  02668
-				US
-
-00-0A-34   (hex)		Identicard Systems Incorporated
-000A34     (base 16)		Identicard Systems Incorporated
-				40 Citation Lane
-				Lancaster  Pennsylvania  17606
-				US
-
-00-0A-30   (hex)		Visteon Corporation
-000A30     (base 16)		Visteon Corporation
-				One Village Center Drive
-				Van Buren Twp  MI  48111
-				US
-
-00-0A-2F   (hex)		Artnix Inc.
-000A2F     (base 16)		Artnix Inc.
-				Chungjin B/D, 475-22 Bangbae, Seocho
-				Seoul    137-819
-				KR
-
-00-0A-15   (hex)		Silicon Data, Inc
-000A15     (base 16)		Silicon Data, Inc
-				4699 Old Ironsides Dr., #150
-				Santa Clara  CA  95054
-				US
-
-00-0A-1B   (hex)		Stream Labs
-000A1B     (base 16)		Stream Labs
-				Leninskie gori 1, bild 77
-				Moskow    119992
-				RU
-
-00-0A-1A   (hex)		Imerge Ltd
-000A1A     (base 16)		Imerge Ltd
-				Unit 6, Bar Hill Business Park
-				Bar Hill  Cambridge  CB3 8SL
-				GB
-
-00-0A-60   (hex)		Autostar Technology Pte Ltd
-000A60     (base 16)		Autostar Technology Pte Ltd
-				Unit 04-10 TECHplace II
-				Singapore  Singapore  569876
-				SG
-
-00-0A-5D   (hex)		FingerTec Worldwide Sdn Bhd
-000A5D     (base 16)		FingerTec Worldwide Sdn Bhd
-				No 6, 8 & 10
-				Bandar Kinrara 47100 PUchong  Selangor  
-				MY
-
-00-0A-39   (hex)		LoPA Information Technology
-000A39     (base 16)		LoPA Information Technology
-				710-9, Dae Lim 3-Dong
-				Young Deung po-gu  Seoul, Korea  150-814
-				KR
-
-00-0A-37   (hex)		Procera Networks, Inc.
-000A37     (base 16)		Procera Networks, Inc.
-				1299 Orleans Drive
-				Sunnyvale  CA  94089
-				US
-
-00-0A-53   (hex)		Intronics, Incorporated
-000A53     (base 16)		Intronics, Incorporated
-				2020 Lafayette Blvd.
-				Fredericksburg  Virginia  22401
-				US
-
-00-0A-4A   (hex)		Targa Systems Ltd.
-000A4A     (base 16)		Targa Systems Ltd.
-				1905 Grandtech Centre,
-				Shatin  N.T.  
-				HK
-
-00-09-D6   (hex)		KNC One GmbH
-0009D6     (base 16)		KNC One GmbH
-				Hohe Welle 10 B
-				Evessen    38173
-				DE
-
-00-09-C7   (hex)		Movistec
-0009C7     (base 16)		Movistec
-				110-5 Maryoung -ri Seosu-myun
-				Kunsan  Chonbuk  573-940
-				KR
-
-00-09-C9   (hex)		BlueWINC Co., Ltd.
-0009C9     (base 16)		BlueWINC Co., Ltd.
-				401 Korea Design Center
-				Seongnam City  Kyonggi杁o  463-828
-				KR
-
-00-09-D4   (hex)		Transtech Networks
-0009D4     (base 16)		Transtech Networks
-				100 Wood Avenue
-				Iselin  NJ  08830
-				US
-
-00-09-CB   (hex)		HBrain
-0009CB     (base 16)		HBrain
-				#705 Kwanglim Bldg 179 KumiDong
-				Seongnam  GyeonggiDo  463-810
-				KR
-
-00-09-F1   (hex)		Yamaki Electric Corporation
-0009F1     (base 16)		Yamaki Electric Corporation
-				3-7-22 Shimomeguro
-				Meguro-ku  Tokyo  153-0064
-				JP
-
-00-09-F4   (hex)		Alcon Laboratories, Inc.
-0009F4     (base 16)		Alcon Laboratories, Inc.
-				6201 South Freeway
-				Fort Worth  Tx  76134
-				US
-
-00-09-F5   (hex)		Emerson Network Power Co.,Ltd
-0009F5     (base 16)		Emerson Network Power Co.,Ltd
-				1/F,3/F Electric Building Huawei Base,Ba
-				ShenZhen  GuangDong  518029
-				CN
-
-00-09-EA   (hex)		YEM Inc.
-0009EA     (base 16)		YEM Inc.
-				1-3-33
-				Atsugi-shi  Kanagawa  243-0021
-				JP
-
-00-09-C5   (hex)		KINGENE Technology Corporation
-0009C5     (base 16)		KINGENE Technology Corporation
-				7F, No. 144, Minchuan E. Rd. Sec. 3
-				Taipei    105
-				TW
-
-00-09-CD   (hex)		HUDSON SOFT CO.,LTD.
-0009CD     (base 16)		HUDSON SOFT CO.,LTD.
-				C62,Geijutsu-no-mori
-				Sapporo  Hokkaido  005-0864
-				JP
-
-00-09-C0   (hex)		6WIND
-0009C0     (base 16)		6WIND
-				1, place Charles de Gaulle
-				Montigny-le-Bretonneux    78180
-				FR
-
-00-09-BF   (hex)		Nintendo Co., Ltd.
-0009BF     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-09-E3   (hex)		Angel Iglesias S.A.
-0009E3     (base 16)		Angel Iglesias S.A.
-				Polígono 27 Martutene
-				San Sebastián  Guipúzcoa  20014
-				ES
-
-00-09-B4   (hex)		KISAN TELECOM CO., LTD.
-0009B4     (base 16)		KISAN TELECOM CO., LTD.
-				9F, Teawon Bldg., 65 Bangyi-Dong
-				Songpa-Gu  Seoul  138-828
-				KR
-
-00-09-AE   (hex)		OKANO ELECTRIC CO.,LTD
-0009AE     (base 16)		OKANO ELECTRIC CO.,LTD
-				2-8-18 KANAYAMA-CHO
-				HIGASHIKURUME  TOKYO  203-0003
-				JP
-
-00-09-BA   (hex)		MAKU Informationstechik GmbH
-0009BA     (base 16)		MAKU Informationstechik GmbH
-				Gewerbehofstraße 7
-				Essen  NRW  45145
-				DE
-
-00-0A-04   (hex)		3Com Ltd
-000A04     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-09-71   (hex)		Time Management, Inc.
-000971     (base 16)		Time Management, Inc.
-				11 Lake Gatlin Road
-				Orlando  Florida  32806
-				US
-
-00-09-74   (hex)		Innopia Technologies, Inc.
-000974     (base 16)		Innopia Technologies, Inc.
-				5F., Institute of Technology
-				Seoul    133-791
-				KR
-
-00-09-8B   (hex)		Entropic Communications, Inc.
-00098B     (base 16)		Entropic Communications, Inc.
-				9276 Scranton Rd #200
-				San Diego  CA  92121
-				US
-
-00-09-7E   (hex)		IMI TECHNOLOGY CO., LTD
-00097E     (base 16)		IMI TECHNOLOGY CO., LTD
-				2nd floor, Eun Seok Building, 729-1
-				Gangnam-gu  Seoul  135-080
-				KR
-
-00-09-6A   (hex)		Cloverleaf Communications Inc.
-00096A     (base 16)		Cloverleaf Communications Inc.
-				2 Willow St.
-				Southborough  MA  01745-1027
-				US
-
-00-09-5A   (hex)		RACEWOOD TECHNOLOGY
-00095A     (base 16)		RACEWOOD TECHNOLOGY
-				5F-2,NO.6,CHUNG-HSING RD.,SEC.1,WU-GU
-				TAIPEI    248
-				TW
-
-00-09-4E   (hex)		BARTECH SYSTEMS INTERNATIONAL, INC
-00094E     (base 16)		BARTECH SYSTEMS INTERNATIONAL, INC
-				251 Najoles Rd Suite A
-				Millersville  Maryland  21108
-				US
-
-00-09-47   (hex)		Aztek, Inc.
-000947     (base 16)		Aztek, Inc.
-				23 Spectrum Pointe #209
-				Lake Forest  California  92630
-				US
-
-00-09-51   (hex)		Apogee Imaging Systems
-000951     (base 16)		Apogee Imaging Systems
-				151 Sunrise Avenue
-				Roseville  CA  95661
-				US
-
-00-09-3D   (hex)		Newisys,Inc.
-00093D     (base 16)		Newisys,Inc.
-				6200 Bridgepoint Parkway
-				Austin  TX  78730
-				US
-
-00-09-67   (hex)		Tachyon, Inc
-000967     (base 16)		Tachyon, Inc
-				9339 Carroll Park Drive
-				San Diego  CA  92121
-				US
-
-00-09-96   (hex)		RDI
-000996     (base 16)		RDI
-				20406 Earl St.
-				Torrance  CA  90503
-				US
-
-00-09-0C   (hex)		Mayekawa Mfg. Co. Ltd.
-00090C     (base 16)		Mayekawa Mfg. Co. Ltd.
-				16825 IH 35 North
-				Selma  Texas  78154
-				US
-
-00-09-0D   (hex)		LEADER ELECTRONICS CORP.
-00090D     (base 16)		LEADER ELECTRONICS CORP.
-				2-6-33, TSUNASHIMA-HIGASHI
-				YOKOHAMA  KANAGAWA  223-8505
-				JP
-
-00-08-FE   (hex)		UNIK C&C Co.,Ltd.
-0008FE     (base 16)		UNIK C&C Co.,Ltd.
-				706-13 UNIK BLDG 17F
-				SEOUL    135-080
-				KR
-
-00-08-FF   (hex)		Trilogy Communications Ltd
-0008FF     (base 16)		Trilogy Communications Ltd
-				26 Focus Way
-				Andover  Hampshire  SP10 5NY
-				GB
-
-00-09-04   (hex)		MONDIAL electronic
-000904     (base 16)		MONDIAL electronic
-				Eggelsberg 73
-				Eggelsberg  Oberoesterreich  5142
-				AT
-
-00-09-1F   (hex)		A&D Co., Ltd.
-00091F     (base 16)		A&D Co., Ltd.
-				1-243 Asahi
-				Kitamoto-shi  Saitama  364-8585
-				JP
-
-00-09-24   (hex)		Telebau GmbH
-000924     (base 16)		Telebau GmbH
-				Am Kraehenberg 1
-				Waldeck-Sachsenhausen  Germany  34513
-				DE
-
-00-09-21   (hex)		Planmeca Oy
-000921     (base 16)		Planmeca Oy
-				Asentajankatu 6
-				HELSINKI    00810 HELSIN
-				FI
-
-00-09-19   (hex)		MDS Gateways
-000919     (base 16)		MDS Gateways
-				Clonshaugh Industrial Estate
-				Dublin 17    
-				IE
-
-00-09-18   (hex)		SAMSUNG TECHWIN CO.,LTD
-000918     (base 16)		SAMSUNG TECHWIN CO.,LTD
-				42
-				CHANGWON  KYONGNAM  641-716
-				KR
-
-00-09-2F   (hex)		Akom Technology Corporation
-00092F     (base 16)		Akom Technology Corporation
-				5F, No. 323, Yang-Guang St.
-				Taipei    114
-				TW
-
-00-08-EF   (hex)		DIBAL,S.A.
-0008EF     (base 16)		DIBAL,S.A.
-				Astintze Kalea 24
-				Derio  Vizcaya  48160
-				ES
-
-00-08-F0   (hex)		Next Generation Systems, Inc.
-0008F0     (base 16)		Next Generation Systems, Inc.
-				PO BOX 31205
-				Dayton  OH  45437-0205
-				US
-
-00-08-E9   (hex)		NextGig
-0008E9     (base 16)		NextGig
-				9820-B Towne Centre Drive
-				San Diego  CA  92121
-				US
-
-00-09-10   (hex)		Simple Access Inc.
-000910     (base 16)		Simple Access Inc.
-				600 McCaffrey Street
-				St-Laurent  Quebec  H4T1N1
-				CA
-
-00-09-14   (hex)		COMPUTROLS INC.
-000914     (base 16)		COMPUTROLS INC.
-				221 Bark Drive
-				Harvey  LA  70058
-				US
-
-00-08-E7   (hex)		SHI ControlSystems,Ltd.
-0008E7     (base 16)		SHI ControlSystems,Ltd.
-				19,Natusima
-				Yokosuka  Kanagawa  237-8555
-				JP
-
-00-08-D7   (hex)		HOW CORPORATION
-0008D7     (base 16)		HOW CORPORATION
-				1-11-17 Chiyoda
-				Sagamihara  Kanagawa  229-0037
-				JP
-
-00-08-FC   (hex)		Gigaphoton Inc.
-0008FC     (base 16)		Gigaphoton Inc.
-				YOKOKURA SHINDEN400
-				OYAMA  TOTIGI  323-8558
-				JP
-
-00-09-38   (hex)		Allot Communications
-000938     (base 16)		Allot Communications
-				Hanagar 22 st'
-				Hod-Hasharon    45800
-				IL
-
-00-08-BF   (hex)		Aptus Elektronik AB
-0008BF     (base 16)		Aptus Elektronik AB
-				FO Petersons G 6
-				    
-				SE
-
-00-08-B8   (hex)		E.F. Johnson
-0008B8     (base 16)		E.F. Johnson
-				299 Johnson Ave.
-				Waseca  MN  56093
-				US
-
-00-08-BB   (hex)		NetExcell
-0008BB     (base 16)		NetExcell
-				15375 Barranca Pkwy, #E-106
-				Irvine  CA  92679
-				US
-
-00-08-BE   (hex)		XENPAK MSA Group
-0008BE     (base 16)		XENPAK MSA Group
-				Care of: Agilent Technologies
-				Ipswich  Suffolk  Ip1 5PB
-				GB
-
-00-08-C1   (hex)		Avistar Communications Corporation
-0008C1     (base 16)		Avistar Communications Corporation
-				15851 Dallas Pkwy.
-				Addison  TX  75001
-				US
-
-00-08-C6   (hex)		Philips Consumer Communications
-0008C6     (base 16)		Philips Consumer Communications
-				Route d'Angers
-				Cedex 9    
-				FR
-
-00-08-65   (hex)		JASCOM CO., LTD
-000865     (base 16)		JASCOM CO., LTD
-				JUAN INDUSTRIAL COMPLEX 330, 17-1,
-				JUAN-DONG NAM-GU  INCHEON  402-200
-				KR
-
-00-08-64   (hex)		Fasy S.p.A.
-000864     (base 16)		Fasy S.p.A.
-				Via Tognasca 7
-				Gallarate  Varese  21013
-				US
-
-00-08-60   (hex)		LodgeNet Entertainment Corp.
-000860     (base 16)		LodgeNet Entertainment Corp.
-				3900 W. Innovation Street
-				Sioux Falls  SD  57107
-				US
-
-00-08-97   (hex)		Quake Technologies
-000897     (base 16)		Quake Technologies
-				2880 Zanker Road
-				San Jose  CA  95134
-				US
-
-00-08-90   (hex)		AVILINKS SA
-000890     (base 16)		AVILINKS SA
-				Etic Center - CS 77 729
-				Cesson Sevigne Cedex    35577
-				FR
-
-00-08-8D   (hex)		Sigma-Links Inc.
-00088D     (base 16)		Sigma-Links Inc.
-				550-1 Higashiasakawa-cho,
-				Tokyo    193-8550
-				JP
-
-00-08-A8   (hex)		Systec Co., Ltd.
-0008A8     (base 16)		Systec Co., Ltd.
-				19 Nochidori, Nawa
-				Tokai  Aichi  476-0002
-				JP
-
-00-08-A4   (hex)		Cisco Systems, Inc
-0008A4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-00-6B   (hex)		ACCEL TECHNOLOGIES INC.
-08006B     (base 16)		ACCEL TECHNOLOGIES INC.
-				7358 TRADE STREET
-				SAN DIEGO  CA  92121
-				US
-
-00-08-84   (hex)		Index Braille AB
-000884     (base 16)		Index Braille AB
-				Box 155
-				    
-				SE
-
-00-07-E8   (hex)		EdgeWave
-0007E8     (base 16)		EdgeWave
-				15333 Avenue of Science
-				San Diego  CA  92128
-				US
-
-00-07-EB   (hex)		Cisco Systems, Inc
-0007EB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-EC   (hex)		Cisco Systems, Inc
-0007EC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-51   (hex)		Canadian Bank Note Company, Ltd.
-000851     (base 16)		Canadian Bank Note Company, Ltd.
-				18 Auriga Dr.
-				    K2E 7T9
-				CA
-
-00-08-59   (hex)		ShenZhen Unitone Electronics Co., Ltd.
-000859     (base 16)		ShenZhen Unitone Electronics Co., Ltd.
-				2 Southern Floor 702 Building
-				    
-				CN
-
-00-08-4E   (hex)		DivergeNet, Inc.
-00084E     (base 16)		DivergeNet, Inc.
-				2142 Bering Dr.
-				San Jose  CA  95131
-				US
-
-00-08-19   (hex)		Banksys
-000819     (base 16)		Banksys
-				Haachtsesteenweg 1442
-				    
-				BE
-
-00-08-1A   (hex)		Sanrad Intelligence Storage Communications (2000) Ltd.
-00081A     (base 16)		Sanrad Intelligence Storage Communications (2000) Ltd.
-				32 Habarzel St., Entrace B
-				    
-				IL
-
-00-08-10   (hex)		Key Technology, Inc.
-000810     (base 16)		Key Technology, Inc.
-				150 Avery St.
-				Walla Walla  WA  99362
-				US
-
-00-08-07   (hex)		Access Devices Limited
-000807     (base 16)		Access Devices Limited
-				Sixth Floor, 58 Oxbridge Road
-				    
-				GB
-
-00-07-FC   (hex)		Adept Systems Inc.
-0007FC     (base 16)		Adept Systems Inc.
-				2100 Boca Rio Rd.
-				Boca Raton  FL  33433
-				US
-
-00-08-25   (hex)		Acme Packet
-000825     (base 16)		Acme Packet
-				71 Third Avenue
-				Woburn  MA  01803
-				US
-
-00-07-DC   (hex)		Atek Co, Ltd.
-0007DC     (base 16)		Atek Co, Ltd.
-				B dong #205 hanyang venture park
-				Seoul    
-				KR
-
-00-08-1F   (hex)		Pou Yuen Tech Corp. Ltd.
-00081F     (base 16)		Pou Yuen Tech Corp. Ltd.
-				16F, No. 107, Sect. 3, Taichung Keng Rd.
-				    
-				TW
-
-00-07-C6   (hex)		VDS Vosskuhler GmbH
-0007C6     (base 16)		VDS Vosskuhler GmbH
-				Weibe Breite 7
-				    
-				DE
-
-00-07-F5   (hex)		Bridgeco Co AG
-0007F5     (base 16)		Bridgeco Co AG
-				Ringstr. 14
-				    
-				CH
-
-00-07-94   (hex)		Simple Devices, Inc.
-000794     (base 16)		Simple Devices, Inc.
-				111 Anza Blvd., Suite 120
-				Burlingame  CA  94010
-				US
-
-00-07-97   (hex)		Netpower Co., Ltd.
-000797     (base 16)		Netpower Co., Ltd.
-				Baekam Bldg., 6F
-				Seoul    138-162
-				KR
-
-00-07-8C   (hex)		Elektronikspecialisten i Borlange AB
-00078C     (base 16)		Elektronikspecialisten i Borlange AB
-				Box 50
-				    SE 780
-				SE
-
-00-07-CC   (hex)		Kaba Benzing GmbH
-0007CC     (base 16)		Kaba Benzing GmbH
-				Albertistrabe 3
-				    
-				DE
-
-00-07-C0   (hex)		NetZerver Inc.
-0007C0     (base 16)		NetZerver Inc.
-				26 West Lone Cactus Drive
-				Phoenix  AZ  85027
-				US
-
-00-04-7E   (hex)		Siqura B.V.
-00047E     (base 16)		Siqura B.V.
-				Zuidelijk Halfrond 4
-				    
-				NL
-
-00-07-BC   (hex)		Identix Inc.
-0007BC     (base 16)		Identix Inc.
-				6591 Sierra Lane
-				Dublin  CA  94568
-				US
-
-00-07-A9   (hex)		Novasonics
-0007A9     (base 16)		Novasonics
-				1390 Willow Road
-				Menlo Park  CA  94025
-				US
-
-00-07-A1   (hex)		VIASYS Healthcare GmbH
-0007A1     (base 16)		VIASYS Healthcare GmbH
-				Leibnizstraße 7
-				Hoechberg  Bavaria  97204
-				DE
-
-00-07-9E   (hex)		Ilinx Co., Ltd.
-00079E     (base 16)		Ilinx Co., Ltd.
-				4th Floor Korea Telecom, Yangjae Branch
-				Seoul    
-				KR
-
-00-07-A0   (hex)		e-Watch Inc.
-0007A0     (base 16)		e-Watch Inc.
-				7800 IH 10 West
-				San Antonio  TX  78229
-				US
-
-00-07-88   (hex)		Clipcomm, Inc.
-000788     (base 16)		Clipcomm, Inc.
-				5th Fl, Ssangyang Bldg.
-				Seoul    151-827
-				KR
-
-00-07-81   (hex)		Itron Inc.
-000781     (base 16)		Itron Inc.
-				2818 N. Sullivan Road
-				Spokane  WA  99216
-				US
-
-00-07-6B   (hex)		Stralfors AB
-00076B     (base 16)		Stralfors AB
-				Langgatan 21
-				    
-				SE
-
-00-07-68   (hex)		Danfoss A/S
-000768     (base 16)		Danfoss A/S
-				E16-N12, DK-6430 Nordborg
-				    
-				
-
-00-07-5F   (hex)		VCS Video Communication Systems AG
-00075F     (base 16)		VCS Video Communication Systems AG
-				Forchheimer Str. 4
-				    
-				DE
-
-00-07-B8   (hex)		Corvalent Corporation
-0007B8     (base 16)		Corvalent Corporation
-				1101 Arrow Point Dr #501
-				Cedar Park  TX  78613
-				US
-
-00-07-7B   (hex)		Millimetrix Broadband Networks
-00077B     (base 16)		Millimetrix Broadband Networks
-				Kibutz Givat Hashelosha 48800
-				    
-				IL
-
-00-07-69   (hex)		Italiana Macchi SpA
-000769     (base 16)		Italiana Macchi SpA
-				Via Matteotti 1
-				    
-				IT
-
-00-07-1A   (hex)		Finedigital Inc.
-00071A     (base 16)		Finedigital Inc.
-				4th Fl. Bomi Bldg., 661 Deungchon 3 Dong
-				Seoul    157-033
-				KR
-
-00-07-1E   (hex)		Tri-M Engineering / Nupak Dev. Corp.
-00071E     (base 16)		Tri-M Engineering / Nupak Dev. Corp.
-				6-1301 Ketch Court
-				    V3K 6X7
-				CA
-
-00-07-17   (hex)		Wieland Electric GmbH
-000717     (base 16)		Wieland Electric GmbH
-				Brennerstraße 10-14
-				    
-				DE
-
-00-07-11   (hex)		Acterna
-000711     (base 16)		Acterna
-				6620 Network Way
-				Indianapolis  IN  46278
-				US
-
-00-07-02   (hex)		Varex Imaging
-000702     (base 16)		Varex Imaging
-				1678 South Pioneer Road
-				Salt Lake City  UT  84104
-				US
-
-00-07-05   (hex)		Endress & Hauser GmbH & Co
-000705     (base 16)		Endress & Hauser GmbH & Co
-				Hauptstrabe 1 - Postfach 1261
-				    
-				DE
-
-00-06-FF   (hex)		Sheba Systems Co., Ltd.
-0006FF     (base 16)		Sheba Systems Co., Ltd.
-				5th Fl. Hyundai Jad B/D
-				Seoul    134-030
-				KR
-
-00-07-41   (hex)		Sierra Automated Systems
-000741     (base 16)		Sierra Automated Systems
-				2821 Burton Ave.
-				Burbank  CA  91504
-				US
-
-00-07-45   (hex)		Radlan Computer Communications Ltd.
-000745     (base 16)		Radlan Computer Communications Ltd.
-				Atidim Technology Park
-				Tel Aviv    61131
-				IL
-
-00-07-3E   (hex)		China Great-Wall Computer Shenzhen Co., Ltd.
-00073E     (base 16)		China Great-Wall Computer Shenzhen Co., Ltd.
-				Research & Development Center, Kefa Road
-				Shenzhen    518057
-				CN
-
-00-07-33   (hex)		DANCONTROL Engineering
-000733     (base 16)		DANCONTROL Engineering
-				Italiensvej 1-5
-				    
-				DK
-
-00-07-2B   (hex)		Jung Myung Telecom Co., Ltd.
-00072B     (base 16)		Jung Myung Telecom Co., Ltd.
-				5Fl Silla Technovil., 39-3 Dang-Dong
-				    
-				KR
-
-00-07-18   (hex)		iCanTek Co., Ltd.
-000718     (base 16)		iCanTek Co., Ltd.
-				2nd Fl. DK Plaza II, 376-5,
-				Sungman-si, Kyonggi-do    463-805
-				KR
-
-00-07-16   (hex)		J & S Marine Ltd.
-000716     (base 16)		J & S Marine Ltd.
-				Pottington Business Park
-				Devon    EX31 1LY
-				GB
-
-00-07-5C   (hex)		Eastman Kodak Company
-00075C     (base 16)		Eastman Kodak Company
-				343 State Street
-				Rochester  NY  146501245
-				US
-
-00-07-56   (hex)		Juyoung Telecom
-000756     (base 16)		Juyoung Telecom
-				#201, Dunsan Building
-				Taejon    302-846
-				KR
-
-00-07-5A   (hex)		Air Products and Chemicals, Inc.
-00075A     (base 16)		Air Products and Chemicals, Inc.
-				7201 Hamilton Blvd.
-				Allentown  PA  18195-1501
-				US
-
-00-07-48   (hex)		The Imaging Source Europe
-000748     (base 16)		The Imaging Source Europe
-				Sommerstraße 34-36
-				    
-				DE
-
-00-07-46   (hex)		TURCK, Inc.
-000746     (base 16)		TURCK, Inc.
-				3000 Campus Drive
-				Plymouth  MN  55441
-				US
-
-00-07-3B   (hex)		Tenovis GmbH & Co KG
-00073B     (base 16)		Tenovis GmbH & Co KG
-				Kleyerstraße 94
-				    
-				DE
-
-00-07-31   (hex)		Ophir-Spiricon LLC
-000731     (base 16)		Ophir-Spiricon LLC
-				3050 N 300 W
-				North Logan  UT  84341
-				US
-
-00-07-0A   (hex)		Unicom Automation Co., Ltd.
-00070A     (base 16)		Unicom Automation Co., Ltd.
-				Silk Bldg 3-31-11
-				Tokyo    164-0012
-				JP
-
-00-07-09   (hex)		Westerstrand Urfabrik AB
-000709     (base 16)		Westerstrand Urfabrik AB
-				Box 133
-				    
-				SE
-
-00-06-EB   (hex)		Global Data
-0006EB     (base 16)		Global Data
-				2250 Obispo Ave #105
-				Signal Hill  CA  90806
-				US
-
-00-06-D3   (hex)		Alpha Telecom, Inc. U.S.A.
-0006D3     (base 16)		Alpha Telecom, Inc. U.S.A.
-				1394 Borregor Ave.
-				Sunnyvale  CA  94089
-				US
-
-00-06-47   (hex)		Etrali S.A.
-000647     (base 16)		Etrali S.A.
-				221, Rue La Fontaine
-				    
-				FR
-
-00-06-A4   (hex)		INNOWELL Corp.
-0006A4     (base 16)		INNOWELL Corp.
-				#717 ChongGu Bluevill
-				    463-825
-				KR
-
-00-06-D6   (hex)		Cisco Systems, Inc
-0006D6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-06-CB   (hex)		Jotron Electronics A/S
-0006CB     (base 16)		Jotron Electronics A/S
-				Pob 54
-				    
-				NO
-
-00-06-CD   (hex)		Leaf Imaging Ltd.
-0006CD     (base 16)		Leaf Imaging Ltd.
-				7th Hatnufa st
-				Petach-Tikva    49002
-				IL
-
-00-06-95   (hex)		Ensure Technologies, Inc.
-000695     (base 16)		Ensure Technologies, Inc.
-				3526 West Liberty
-				Ann Arbor  MI  48103
-				US
-
-00-06-91   (hex)		PT Inovacao
-000691     (base 16)		PT Inovacao
-				Rua Eng. Jose F. Pinto Basto
-				    
-				PT
-
-00-06-92   (hex)		Intruvert Networks, Inc.
-000692     (base 16)		Intruvert Networks, Inc.
-				Suite 102
-				San Jose  CA  95131
-				US
-
-00-06-8B   (hex)		AirRunner Technologies, Inc.
-00068B     (base 16)		AirRunner Technologies, Inc.
-				2401 Lupine Trail
-				South Lake Tahoe  CA  96150
-				US
-
-00-06-88   (hex)		Telways Communication Co., Ltd.
-000688     (base 16)		Telways Communication Co., Ltd.
-				3F, No. 53, Lane 258
-				Taipei    114
-				TW
-
-00-06-AB   (hex)		W-Link Systems, Inc.
-0006AB     (base 16)		W-Link Systems, Inc.
-				No. 20, Park Ave. II,
-				Hsinchu    300
-				TW
-
-00-06-AC   (hex)		Intersoft Co.
-0006AC     (base 16)		Intersoft Co.
-				#1803 sun-kyoung Officetel
-				Seoul    
-				KR
-
-00-06-94   (hex)		Mobillian Corporation
-000694     (base 16)		Mobillian Corporation
-				11031 Via Frontera
-				San Diego  CA  92127
-				US
-
-00-06-C7   (hex)		RFNET Technologies Pte Ltd (S)
-0006C7     (base 16)		RFNET Technologies Pte Ltd (S)
-				Unit 233 Innovation Centre Blk 2
-				    637722
-				SG
-
-00-06-B9   (hex)		A5TEK Corp.
-0006B9     (base 16)		A5TEK Corp.
-				1233 Alderwood Ave.
-				Sunnyvale  CA  94089
-				US
-
-00-06-B3   (hex)		Diagraph Corporation
-0006B3     (base 16)		Diagraph Corporation
-				3401 Rider Trail South
-				Earth City  MO  63045-1110
-				US
-
-00-06-E3   (hex)		Quantitative Imaging Corporation
-0006E3     (base 16)		Quantitative Imaging Corporation
-				8081 Lougheed Highway
-				    
-				CA
-
-00-06-E4   (hex)		Citel Technologies Ltd.
-0006E4     (base 16)		Citel Technologies Ltd.
-				Wheatcroft Business Park
-				Nottigham    NG12 4DG
-				GB
-
-00-06-A1   (hex)		Celsian Technologies, Inc.
-0006A1     (base 16)		Celsian Technologies, Inc.
-				3002 Dow Ave., Unit 138
-				Tustin  CA  92780
-				US
-
-00-06-D9   (hex)		IPM-Net S.p.A.
-0006D9     (base 16)		IPM-Net S.p.A.
-				Via Remo De Feo
-				    
-				IT
-
-00-06-63   (hex)		Human Technology Co., Ltd.
-000663     (base 16)		Human Technology Co., Ltd.
-				3rd Fl, Hyungok Bldg.,
-				Kangnam-ku  Seoul  
-				KR
-
-00-06-65   (hex)		Sunny Giken, Inc.
-000665     (base 16)		Sunny Giken, Inc.
-				3-1-9 Nishidai Itami-shi
-				Hyogo-pref.    664-0858
-				JP
-
-00-06-69   (hex)		Datasound Laboratories Ltd
-000669     (base 16)		Datasound Laboratories Ltd
-				5 Business Park West, Avenue One
-				  ENGLAND  
-				GB
-
-00-06-6E   (hex)		Delta Electronics, Inc.
-00066E     (base 16)		Delta Electronics, Inc.
-				11F, 266 Wen-Hwa 2nd Road,
-				    
-				TW
-
-00-06-1B   (hex)		Notebook Development Lab.  Lenovo Japan Ltd.
-00061B     (base 16)		Notebook Development Lab.  Lenovo Japan Ltd.
-				1623-14 Shimotsuruma
-				    242-8502
-				JP
-
-00-06-0F   (hex)		Narad Networks Inc
-00060F     (base 16)		Narad Networks Inc
-				515 Groton Road
-				Westford  MA  01886
-				US
-
-00-06-10   (hex)		Abeona Networks Inc
-000610     (base 16)		Abeona Networks Inc
-				46117 Landing Parkway
-				Fremont  CA  94539
-				US
-
-00-06-11   (hex)		Zeus Wireless, Inc.
-000611     (base 16)		Zeus Wireless, Inc.
-				8325 Guilford Road
-				Columbia  MD  21046
-				US
-
-00-05-EC   (hex)		Mosaic Systems Inc.
-0005EC     (base 16)		Mosaic Systems Inc.
-				7 Campbell Park
-				Somerville  MA  02144
-				US
-
-00-06-62   (hex)		MBM Technology Ltd.
-000662     (base 16)		MBM Technology Ltd.
-				Victoria Rd.
-				    
-				GB
-
-00-06-5A   (hex)		Strix Systems
-00065A     (base 16)		Strix Systems
-				310 N. Westlake Blvd.
-				Westlake Village  CA  91362
-				US
-
-00-06-52   (hex)		Cisco Systems, Inc
-000652     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-06-56   (hex)		Tactel AB
-000656     (base 16)		Tactel AB
-				Norra Vallgatan 64
-				    
-				SE
-
-00-06-41   (hex)		ITCN
-000641     (base 16)		ITCN
-				8571 Gander Creek Drive
-				Miamisburg  OH  45342
-				US
-
-00-06-48   (hex)		Seedsware, Inc.
-000648     (base 16)		Seedsware, Inc.
-				 3-7-16 Technostage,
-				Izumi,  Osaka  594-1144
-				JP
-
-00-06-4C   (hex)		Invicta Networks, Inc.
-00064C     (base 16)		Invicta Networks, Inc.
-				13873 Park Center Road
-				Herndon  VA  20171
-				US
-
-00-06-74   (hex)		Spectrum Control, Inc.
-000674     (base 16)		Spectrum Control, Inc.
-				8061 Avonia Road
-				Fairview  PA  16415
-				US
-
-00-06-38   (hex)		Sungjin C&C Co., Ltd.
-000638     (base 16)		Sungjin C&C Co., Ltd.
-				1543-6, Seocho-dong, Seocho-gu,
-				Seoul    137-073
-				KR
-
-00-06-35   (hex)		PacketAir Networks, Inc.
-000635     (base 16)		PacketAir Networks, Inc.
-				11545 W. Bernardo Ct.
-				San Diego  CA  92127
-				US
-
-00-06-1A   (hex)		Zetari Inc.
-00061A     (base 16)		Zetari Inc.
-				411 Waverly Oaks Rd.
-				Waltham  MA  02452-8401
-				US
-
-00-06-1F   (hex)		Vision Components GmbH
-00061F     (base 16)		Vision Components GmbH
-				Ottostraße 2
-				    
-				DE
-
-00-06-87   (hex)		Omnitron Systems Technology, Inc.
-000687     (base 16)		Omnitron Systems Technology, Inc.
-				140 Technology
-				Irvine  CA  92618
-				US
-
-00-06-02   (hex)		Cirkitech Electronics Co.
-000602     (base 16)		Cirkitech Electronics Co.
-				B1-2, No. 361, Fu-Xing First Road
-				  Tao-Yuan  
-				TW
-
-00-05-C0   (hex)		Digital Network Alacarte Co., Ltd.
-0005C0     (base 16)		Digital Network Alacarte Co., Ltd.
-				A104, Seoul Business Incubator
-				Seoul    157-030,
-				KR
-
-00-05-B8   (hex)		Electronic Design Associates, Inc.
-0005B8     (base 16)		Electronic Design Associates, Inc.
-				331 Arcado Rd. NW
-				Lilburn  GA  30047-2841
-				US
-
-00-05-BA   (hex)		Area Netwoeks, Inc.
-0005BA     (base 16)		Area Netwoeks, Inc.
-				1148 Euclid Ave., Suite 400
-				Cleveland  OH  4415
-				US
-
-00-05-BF   (hex)		JustEzy Technology, Inc.
-0005BF     (base 16)		JustEzy Technology, Inc.
-				5F, No. 324, Sec. 1, Junghua Rd.
-				Hsinchu    
-				TW
-
-00-05-D5   (hex)		Speedcom Wireless
-0005D5     (base 16)		Speedcom Wireless
-				7020 Professional Pkwy East
-				Sarasota  FL  34240-8514
-				US
-
-00-05-C5   (hex)		Flaga HF
-0005C5     (base 16)		Flaga HF
-				Vesturhlid 7
-				    
-				IS
-
-00-05-CA   (hex)		Hitron Technology, Inc.
-0005CA     (base 16)		Hitron Technology, Inc.
-				HSINCHU SBIP SUBSIDIARY
-				Hsin-chu    
-				TW
-
-00-05-D2   (hex)		DAP Technologies
-0005D2     (base 16)		DAP Technologies
-				955 Fernand Dufour,
-				    G1M 3B2
-				CA
-
-00-05-B1   (hex)		ASB Technology BV
-0005B1     (base 16)		ASB Technology BV
-				De Ronde 15A
-				    
-				NL
-
-00-05-99   (hex)		DRS Test and Energy Management or DRS-TEM
-000599     (base 16)		DRS Test and Energy Management or DRS-TEM
-				110 Wynn Drive
-				Huntsville  AL  35805
-				US
-
-00-05-9A   (hex)		Cisco Systems, Inc
-00059A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-AB   (hex)		Cyber Fone, Inc.
-0005AB     (base 16)		Cyber Fone, Inc.
-				989 Old Eagle School Road
-				Wayne  PA  19087
-				US
-
-00-05-92   (hex)		Pultek Corp.
-000592     (base 16)		Pultek Corp.
-				74-1, Yamashita-cho,
-				    231-0023
-				JP
-
-00-05-8B   (hex)		IPmental, Inc.
-00058B     (base 16)		IPmental, Inc.
-				8F-9, No. 35, Hsin Tai Rd.
-				    
-				TW
-
-00-05-AC   (hex)		Northern Digital, Inc.
-0005AC     (base 16)		Northern Digital, Inc.
-				103 Randall Drive
-				Waterloo   Ontario  N2V 1C5
-				CA
-
-00-05-AD   (hex)		Topspin Communications, Inc.
-0005AD     (base 16)		Topspin Communications, Inc.
-				515 Ellis Street
-				Mountain View  CA  94043
-				US
-
-00-05-D1   (hex)		Metavector Technologies
-0005D1     (base 16)		Metavector Technologies
-				Steenweg Op Gierle, 100
-				    
-				BE
-
-00-05-FB   (hex)		ShareGate, Inc.
-0005FB     (base 16)		ShareGate, Inc.
-				9805 Double R Blvd.
-				Reno  NV  89511-5917
-				US
-
-00-05-FE   (hex)		Traficon N.V.
-0005FE     (base 16)		Traficon N.V.
-				Bissegemsestraat 45
-				    
-				BE
-
-00-05-F0   (hex)		SATEC
-0005F0     (base 16)		SATEC
-				P.O. Box 45022
-				  91450  
-				IL
-
-00-05-30   (hex)		Andiamo Systems, Inc.
-000530     (base 16)		Andiamo Systems, Inc.
-				375 E. Tasman Dr.
-				San Jose  CA  95134
-				US
-
-00-05-38   (hex)		Merilus, Inc.
-000538     (base 16)		Merilus, Inc.
-				#307-46165 Yale Road
-				    V2P 2P2
-				CA
-
-00-05-2B   (hex)		HORIBA, Ltd.
-00052B     (base 16)		HORIBA, Ltd.
-				2 Miyanohigashi, Kisshoin,
-				    601-8510
-				JP
-
-00-05-1D   (hex)		Airocon, Inc.
-00051D     (base 16)		Airocon, Inc.
-				116 Houghton Lane
-				Boxboro  MA  01719
-				US
-
-00-05-15   (hex)		Nuark Co., Ltd.
-000515     (base 16)		Nuark Co., Ltd.
-				12F, Anyang K center, 1591-9, Burim-dong
-				  Gunggi-do  431-065
-				KR
-
-00-05-16   (hex)		SMART Modular Technologies
-000516     (base 16)		SMART Modular Technologies
-				4305 Cushing Pkwy
-				Fremont  CA  94538
-				US
-
-00-05-77   (hex)		SM Information & Communication
-000577     (base 16)		SM Information & Communication
-				330-1 Yangjaedong
-				    137-130
-				KR
-
-00-05-70   (hex)		Baydel Ltd.
-000570     (base 16)		Baydel Ltd.
-				Baydel House
-				    
-				GB
-
-00-05-6E   (hex)		National Enhance Technology, Inc.
-00056E     (base 16)		National Enhance Technology, Inc.
-				2F, No. 196-3, Tatung Rd., Sec. 3,
-				    
-				TW
-
-00-05-6D   (hex)		Pacific Corporation
-00056D     (base 16)		Pacific Corporation
-				2-23-3 Ebisu-Minami Shibuya
-				    
-				JP
-
-00-05-81   (hex)		Snell
-000581     (base 16)		Snell
-				Southleigh Park House
-				Hampshire    P09 2PE
-				GB
-
-00-05-7D   (hex)		Sun Communications, Inc.
-00057D     (base 16)		Sun Communications, Inc.
-				Gloria Bldg 6th
-				Tokyo    162-082
-				JP
-
-00-05-86   (hex)		Lucent Technologies
-000586     (base 16)		Lucent Technologies
-				1701 Harbor Bay Parkway
-				Alameda  CA  94502
-				US
-
-00-05-7B   (hex)		Chung Nam Electronic Co., Ltd.
-00057B     (base 16)		Chung Nam Electronic Co., Ltd.
-				Unit 3, 1/F, Festigood Centre
-				Tsuen  Fanling,  
-				HK
-
-00-05-71   (hex)		Seiwa Electronics Co.
-000571     (base 16)		Seiwa Electronics Co.
-				757 Amabouki, Kukizaki-Machi
-				    300-1253
-				JP
-
-00-05-49   (hex)		Salira Optical Network Systems
-000549     (base 16)		Salira Optical Network Systems
-				2694 Orchard Parkway
-				San Jose  CA  95134
-				US
-
-00-05-4C   (hex)		RF Innovations Pty Ltd
-00054C     (base 16)		RF Innovations Pty Ltd
-				22 Boulder Road
-				Malaga  WA   6090
-				AU
-
-00-05-43   (hex)		IQ Wireless GmbH
-000543     (base 16)		IQ Wireless GmbH
-				Carl-Scheele-Str. 14
-				    
-				DE
-
-00-05-5C   (hex)		Kowa Company, Ltd.
-00055C     (base 16)		Kowa Company, Ltd.
-				Chofugaoka 3-3-1,
-				    182-0021
-				JP
-
-00-05-10   (hex)		Infinite Shanghai Communication Terminals Ltd.
-000510     (base 16)		Infinite Shanghai Communication Terminals Ltd.
-				777 Chungiao Road, Pudong
-				    
-				CN
-
-00-04-FF   (hex)		Acronet Co., Ltd.
-0004FF     (base 16)		Acronet Co., Ltd.
-				Saman B/D 2Fl
-				    137-064
-				KR
-
-00-05-01   (hex)		Cisco Systems, Inc
-000501     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-08   (hex)		Inetcam, Inc.
-000508     (base 16)		Inetcam, Inc.
-				10171 Pacific Mesa Blvd.
-				San Diego  CA  92121
-				US
-
-00-05-1B   (hex)		Magic Control Technology Corporation
-00051B     (base 16)		Magic Control Technology Corporation
-				6F, No. 120-11 Chung Shan Rd.
-				    
-				TW
-
-00-05-13   (hex)		VTLinx Multimedia Systems, Inc.
-000513     (base 16)		VTLinx Multimedia Systems, Inc.
-				8401 Colesville Road,
-				Silver Spring  MD  20910
-				US
-
-00-05-0E   (hex)		3ware, Inc.
-00050E     (base 16)		3ware, Inc.
-				701 E. Middlefield Rd.
-				Mt. View  CA  94043
-				US
-
-00-04-D7   (hex)		Omitec Instrumentation Ltd.
-0004D7     (base 16)		Omitec Instrumentation Ltd.
-				Hopton Industrial Est.
-				    ENGLAND
-				GB
-
-00-04-D4   (hex)		Proview Electronics Co., Ltd.
-0004D4     (base 16)		Proview Electronics Co., Ltd.
-				6F, No. 1, Pau-Sheng Road
-				    
-				TW
-
-00-04-DB   (hex)		Tellus Group Corp.
-0004DB     (base 16)		Tellus Group Corp.
-				4F, No. 15 Industry E. Rd., IX
-				Hsinchu  Hsinchu  Taiwan
-				TW
-
-00-04-E0   (hex)		Procket Networks
-0004E0     (base 16)		Procket Networks
-				1100 Cadillac Court
-				Milpitas  CA  95035
-				US
-
-00-04-DD   (hex)		Cisco Systems, Inc
-0004DD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-80-86   (hex)		COMPUTER GENERATION INC.
-008086     (base 16)		COMPUTER GENERATION INC.
-				3855 PRESIDENTIAL PARKWAY
-				ATLANTA  GA  30340
-				US
-
-00-05-04   (hex)		Naray Information & Communication Enterprise
-000504     (base 16)		Naray Information & Communication Enterprise
-				3F San Woo Bldg., 1543-11
-				Seoul 137-070    
-				KR
-
-00-05-09   (hex)		AVOC Nishimura Ltd.
-000509     (base 16)		AVOC Nishimura Ltd.
-				Jogasaki 4-16-14
-				    
-				JP
-
-00-04-FB   (hex)		Commtech, Inc.
-0004FB     (base 16)		Commtech, Inc.
-				9011 E. 37th Street
-				Wichita  KS  67226-2006
-				US
-
-00-04-C0   (hex)		Cisco Systems, Inc
-0004C0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-BA   (hex)		KDD Media Will Corporation
-0004BA     (base 16)		KDD Media Will Corporation
-				2-1-23 Nakameguro
-				  153-0061  
-				JP
-
-00-04-B6   (hex)		Stratex Networks, Inc.
-0004B6     (base 16)		Stratex Networks, Inc.
-				64 White Road
-				Cape Town    7945
-				ZA
-
-00-04-CD   (hex)		Extenway Solutions Inc
-0004CD     (base 16)		Extenway Solutions Inc
-				500 boul. Morgan
-				Baie-d'Urfe  Quebec H9X 3V1  
-				CA
-
-00-04-E9   (hex)		Infiniswitch Corporation
-0004E9     (base 16)		Infiniswitch Corporation
-				134 Flanders Road
-				Westborough  MA  01581
-				US
-
-00-04-E8   (hex)		IER, Inc.
-0004E8     (base 16)		IER, Inc.
-				4501 So. General Bruce Dr
-				Temple  TX  76502
-				US
-
-00-04-B3   (hex)		Videotek, Inc.
-0004B3     (base 16)		Videotek, Inc.
-				243 Shoemaker Rd.
-				Pottstown  PA  19464
-				US
-
-00-04-4C   (hex)		JENOPTIK
-00044C     (base 16)		JENOPTIK
-				Laser, Optik, Systeme GmbH
-				    
-				DE
-
-00-04-44   (hex)		Western Multiplex Corporation
-000444     (base 16)		Western Multiplex Corporation
-				1196 Borregas Avenue
-				Sunnyvale  CA  94089
-				US
-
-00-04-39   (hex)		Rosco Entertainment Technology, Inc.
-000439     (base 16)		Rosco Entertainment Technology, Inc.
-				2181 NW Front Ave.
-				Portland  OR  97209
-				US
-
-00-04-3A   (hex)		Intelligent Telecommunications, Inc.
-00043A     (base 16)		Intelligent Telecommunications, Inc.
-				1687-2, Sinil-dong
-				SOUTH  KOREA  306-230
-				KR
-
-00-04-92   (hex)		Hive Internet, Ltd.
-000492     (base 16)		Hive Internet, Ltd.
-				Unit 2, Church View Business Centre
-				Binbrook  Market Rasen, Lincolnshire  LN8 6BY
-				GB
-
-00-04-8C   (hex)		Nayna Networks, Inc.
-00048C     (base 16)		Nayna Networks, Inc.
-				157 Topaz St.
-				Milpitas  CA  95035
-				US
-
-00-04-91   (hex)		Technovision, Inc.
-000491     (base 16)		Technovision, Inc.
-				5155 Spectrum Way, Unit #31
-				L4W  5A1  
-				CA
-
-00-04-93   (hex)		Tsinghua Unisplendour Co., Ltd.
-000493     (base 16)		Tsinghua Unisplendour Co., Ltd.
-				Th-Unis Building Tsinghua
-				  P.R.  
-				CN
-
-00-04-94   (hex)		Breezecom, Ltd.
-000494     (base 16)		Breezecom, Ltd.
-				Atidim Technology Park
-				    
-				IL
-
-00-04-89   (hex)		YAFO Networks, Inc.
-000489     (base 16)		YAFO Networks, Inc.
-				1340F Charwood Rd.
-				Hanover  MD  21076
-				US
-
-00-04-8A   (hex)		Temia Vertriebs GmbH
-00048A     (base 16)		Temia Vertriebs GmbH
-				Landsbergerstraße 320
-				    
-				DE
-
-00-04-81   (hex)		Econolite Control Products, Inc.
-000481     (base 16)		Econolite Control Products, Inc.
-				3360 E. La Palma Ave.
-				Anaheim  CA  92806
-				US
-
-00-04-6C   (hex)		Cyber Technology Co., Ltd.
-00046C     (base 16)		Cyber Technology Co., Ltd.
-				1-45 Yeo Wol-Dong
-				Kyeong Gi-Do  Kyeong Gi-Do  KOREA
-				KR
-
-00-04-71   (hex)		IPrad
-000471     (base 16)		IPrad
-				24 Raoul Wallenberg St.
-				    
-				IL
-
-00-04-6E   (hex)		Cisco Systems, Inc
-00046E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-74   (hex)		LEGRAND
-000474     (base 16)		LEGRAND
-				145 Avenue De Lattre
-				    
-				FR
-
-00-04-2D   (hex)		Sarian Systems, Ltd.
-00042D     (base 16)		Sarian Systems, Ltd.
-				Beacon House
-				West Yorkshire  ENGLAND  LS29 8JZ
-				GB
-
-00-04-2E   (hex)		Netous Technologies, Ltd.
-00042E     (base 16)		Netous Technologies, Ltd.
-				1006, Block A,
-				  HONG  KONG
-				HK
-
-00-04-25   (hex)		Atmel Corporation
-000425     (base 16)		Atmel Corporation
-				Multimedia & Communications Group
-				Morrisville  NC  27560
-				US
-
-00-04-3F   (hex)		ESTeem Wireless Modems, Inc
-00043F     (base 16)		ESTeem Wireless Modems, Inc
-				415 N. Quay St., Suite 4
-				Kennewick  WA  99336
-				US
-
-00-04-33   (hex)		Cyberboard A/S
-000433     (base 16)		Cyberboard A/S
-				Kloevermarken 120
-				    
-				DK
-
-00-04-34   (hex)		Accelent Systems, Inc.
-000434     (base 16)		Accelent Systems, Inc.
-				2620 Ridgewood Rd.,
-				Akron  OH  44313
-				US
-
-00-04-77   (hex)		Scalant Systems, Inc.
-000477     (base 16)		Scalant Systems, Inc.
-				2040 Martin Avenue
-				Santa Clara  CA  95050
-				US
-
-00-04-73   (hex)		Photonex Corporation
-000473     (base 16)		Photonex Corporation
-				8C Preston Court
-				Bedford  MA  01730
-				US
-
-00-04-70   (hex)		ipUnplugged AB
-000470     (base 16)		ipUnplugged AB
-				Box 10160
-				    
-				SE
-
-00-04-5D   (hex)		BEKA Elektronik
-00045D     (base 16)		BEKA Elektronik
-				Siemenstraße 29
-				  Erftstadt  50374
-				DE
-
-00-04-59   (hex)		Veristar Corporation
-000459     (base 16)		Veristar Corporation
-				727 Allston Way
-				Berkeley  CA  94710
-				US
-
-00-04-A4   (hex)		NetEnabled, Inc.
-0004A4     (base 16)		NetEnabled, Inc.
-				1275 Kinnear Rd.
-				Columbus  OH  43212
-				US
-
-00-04-16   (hex)		Parks S/A Comunicacoes Digitais
-000416     (base 16)		Parks S/A Comunicacoes Digitais
-				Av. Pernambuco, 1001
-				    
-				BR
-
-00-04-0F   (hex)		Asus Network Technologies, Inc.
-00040F     (base 16)		Asus Network Technologies, Inc.
-				11-1, No. 675, Sec. 1, King-kuo Rd.,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-04-0A   (hex)		Sage Systems
-00040A     (base 16)		Sage Systems
-				1420 Harbor Bay Parkway
-				Alameda  CA  94502
-				US
-
-00-04-04   (hex)		Makino Milling Machine Co., Ltd.
-000404     (base 16)		Makino Milling Machine Co., Ltd.
-				4023 Nakatsu, Aikawa-machi
-				Aiko-gun  Kanagawa  243-0303
-				JP
-
-00-03-D0   (hex)		KOANKEISO Co., Ltd.
-0003D0     (base 16)		KOANKEISO Co., Ltd.
-				Zip Code 791-8042
-				    
-				JP
-
-00-03-CF   (hex)		Muxcom, Inc.
-0003CF     (base 16)		Muxcom, Inc.
-				D 602, Bundang Technopark #151
-				Kyungki Do  KOREA  463-070
-				KR
-
-00-03-D1   (hex)		Takaya Corporation
-0003D1     (base 16)		Takaya Corporation
-				Development Division
-				    
-				JP
-
-00-03-AD   (hex)		Emerson Energy Systems AB
-0003AD     (base 16)		Emerson Energy Systems AB
-				PO Box 92113
-				    
-				SE
-
-00-03-A7   (hex)		Unixtar Technology, Inc.
-0003A7     (base 16)		Unixtar Technology, Inc.
-				13F No. 100 Ming Chuan Road
-				    TAIWAN
-				TW
-
-00-03-AE   (hex)		Allied Advanced Manufacturing Pte, Ltd.
-0003AE     (base 16)		Allied Advanced Manufacturing Pte, Ltd.
-				7 International Business Park
-				  Singapore  609919
-				SG
-
-00-03-A3   (hex)		MAVIX, Ltd.
-0003A3     (base 16)		MAVIX, Ltd.
-				POB 217, Yokneam Illit,
-				    20692
-				IL
-
-00-03-B6   (hex)		QSI Corporation
-0003B6     (base 16)		QSI Corporation
-				2212 South West Temple #50
-				Salt Lake City  UT  84115
-				US
-
-00-03-B1   (hex)		Hospira Inc.
-0003B1     (base 16)		Hospira Inc.
-				755 Jarvis Drive
-				Morgan Hill  CA  95037
-				US
-
-00-03-B3   (hex)		IA Link Systems Co., Ltd.
-0003B3     (base 16)		IA Link Systems Co., Ltd.
-				6F-4, No. 81 Hsin Tai
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-03-EB   (hex)		Atrica
-0003EB     (base 16)		Atrica
-				5 Shenkar St. P.O.B. 12231
-				46733  46733  
-				IL
-
-00-03-E7   (hex)		Logostek Co. Ltd.
-0003E7     (base 16)		Logostek Co. Ltd.
-				19th 15 Sunusu-Academy Tower
-				Seoul  KOREA  133-123
-				KR
-
-00-03-E3   (hex)		Cisco Systems, Inc
-0003E3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-F4   (hex)		NetBurner
-0003F4     (base 16)		NetBurner
-				5405 Morehouse Drive
-				San Diego  CA  92121
-				US
-
-00-03-F2   (hex)		Seneca Networks
-0003F2     (base 16)		Seneca Networks
-				30 West Gude Dr.
-				Rockville  MD  20850
-				US
-
-00-03-F0   (hex)		Redfern Broadband Networks
-0003F0     (base 16)		Redfern Broadband Networks
-				Level 1, 1 Central Ave.,
-				    
-				AU
-
-00-03-DB   (hex)		Apogee Electronics Corp.
-0003DB     (base 16)		Apogee Electronics Corp.
-				1715 Berkeley St. 
-				Santa Monica  CA  90405-3210
-				US
-
-00-03-D2   (hex)		Crossbeam Systems, Inc.
-0003D2     (base 16)		Crossbeam Systems, Inc.
-				80 Central Street
-				Boxborough  MA  01719
-				US
-
-00-04-05   (hex)		ACN Technologies
-000405     (base 16)		ACN Technologies
-				9F, HeyKang B/D, 157-36
-				Seoul  KOREA  #135-090
-				KR
-
-00-04-01   (hex)		Osaki Electric Co., Ltd.
-000401     (base 16)		Osaki Electric Co., Ltd.
-				1131, Fujikubo, Miyoshimachi,
-				    
-				JP
-
-00-03-A1   (hex)		HIPER Information & Communication, Inc.
-0003A1     (base 16)		HIPER Information & Communication, Inc.
-				1675-7, Sinil-dong,
-				306-230  South  Korea
-				KR
-
-00-03-96   (hex)		EZ Cast Co., Ltd.
-000396     (base 16)		EZ Cast Co., Ltd.
-				6th Floor, JungAng Building,
-				    KOREA
-				KR
-
-00-03-9A   (hex)		SiConnect
-00039A     (base 16)		SiConnect
-				Delta 100
-				Swindon    SN5 7XP
-				GB
-
-00-03-63   (hex)		Miraesys Co., Ltd.
-000363     (base 16)		Miraesys Co., Ltd.
-				650-2 4 Fl. Daemyung Bldg.
-				    135-080
-				KR
-
-00-03-5F   (hex)		Prüftechnik Condition Monitoring GmbH & Co. KG
-00035F     (base 16)		Prüftechnik Condition Monitoring GmbH & Co. KG
-				Franz-Bayer-Straße 14
-				    
-				DE
-
-00-03-60   (hex)		PAC Interactive Technology, Inc.
-000360     (base 16)		PAC Interactive Technology, Inc.
-				6F, No. 30, Alley 18, Lane 478
-				Taipei    
-				TW
-
-00-03-61   (hex)		Widcomm, Inc.
-000361     (base 16)		Widcomm, Inc.
-				9645 Scranton Road
-				San Diego  CA  92121
-				US
-
-00-03-94   (hex)		Connect One
-000394     (base 16)		Connect One
-				2 Hanagar Street
-				    
-				IL
-
-00-03-8A   (hex)		America Online, Inc.
-00038A     (base 16)		America Online, Inc.
-				44900 Prentice Drive
-				Dulles  VA  20166
-				US
-
-00-03-8D   (hex)		PCS Revenue Control Systems, Inc.
-00038D     (base 16)		PCS Revenue Control Systems, Inc.
-				560 Sylvan Ave.
-				Englewood Cliffs  NJ  07632
-				US
-
-00-03-88   (hex)		Fastfame Technology Co., Ltd.
-000388     (base 16)		Fastfame Technology Co., Ltd.
-				7F, No. 111, Hsing De Rd.,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-03-59   (hex)		DigitalSis
-000359     (base 16)		DigitalSis
-				B-1405 Samho Bldg.
-				Seocho  Seoul,  
-				KR
-
-00-03-52   (hex)		Colubris Networks
-000352     (base 16)		Colubris Networks
-				440 Armand-Frappier
-				    H7V 4B4
-				CA
-
-00-03-4C   (hex)		Shanghai DigiVision Technology Co., Ltd.
-00034C     (base 16)		Shanghai DigiVision Technology Co., Ltd.
-				11F, Heng Tong
-				  Shanghai  200050
-				CN
-
-00-03-78   (hex)		HUMAX Co., Ltd.
-000378     (base 16)		HUMAX Co., Ltd.
-				271-2, Suh-hyun-Dong,
-				    
-				KR
-
-00-03-74   (hex)		Control Microsystems
-000374     (base 16)		Control Microsystems
-				48 Steacie Drive
-				Ottawa  Ontario  K2K 2A9
-				CA
-
-00-03-76   (hex)		Graphtec Technology, Inc.
-000376     (base 16)		Graphtec Technology, Inc.
-				45 Parker, Suite A
-				Irvine  CA  92618
-				US
-
-00-03-7E   (hex)		PORTech Communications, Inc.
-00037E     (base 16)		PORTech Communications, Inc.
-				150, Shiang-Shung N. Rd.,
-				Taichung  Taiwan  403, R.O.C.
-				TW
-
-00-03-6D   (hex)		Runtop, Inc.
-00036D     (base 16)		Runtop, Inc.
-				1, Lane 21, Hsin Hua Road, Kueishan
-				    
-				TW
-
-00-03-6E   (hex)		Nicon Systems (Pty) Limited
-00036E     (base 16)		Nicon Systems (Pty) Limited
-				11 Termo Street
-				    
-				ZA
-
-00-03-71   (hex)		Acomz Networks Corp.
-000371     (base 16)		Acomz Networks Corp.
-				7th Fl., Wooseok Bldg., 1007-37
-				Seoul    156-09
-				KR
-
-00-03-49   (hex)		Vidicode Datacommunicatie B.V.
-000349     (base 16)		Vidicode Datacommunicatie B.V.
-				Postbus 7164
-				    
-				NL
-
-00-03-3E   (hex)		Tateyama System Laboratory Co., Ltd.
-00033E     (base 16)		Tateyama System Laboratory Co., Ltd.
-				30 Shimonoban Oyama-cho
-				    930-1305
-				JP
-
-00-03-3C   (hex)		Daiden Co., Ltd.
-00033C     (base 16)		Daiden Co., Ltd.
-				2100-19 Tutumi, Kamimine-machi
-				    
-				JP
-
-00-03-25   (hex)		Arima Computer Corp.
-000325     (base 16)		Arima Computer Corp.
-				6th Fl., No. 327,
-				    
-				TW
-
-00-03-1F   (hex)		Condev Ltd.
-00031F     (base 16)		Condev Ltd.
-				200-1626 West 2nd Ave.
-				    
-				CA
-
-00-02-9F   (hex)		L-3 Communication Aviation Recorders
-00029F     (base 16)		L-3 Communication Aviation Recorders
-				P.O. Box 3041
-				Sarasota  FL  34230
-				US
-
-00-03-1B   (hex)		Cellvision Systems, Inc.
-00031B     (base 16)		Cellvision Systems, Inc.
-				3F-1, 75, Hsin Taiwu Road, Sec. 1
-				    
-				TW
-
-00-03-1C   (hex)		Svenska Hardvarufabriken AB
-00031C     (base 16)		Svenska Hardvarufabriken AB
-				Ole Romersvag 16, Ideon
-				    
-				SE
-
-00-01-A8   (hex)		Welltech Computer Co., Ltd.
-0001A8     (base 16)		Welltech Computer Co., Ltd.
-				13F-4, no. 150, Jian Yi Road
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-03-0C   (hex)		Telesoft Technologies Ltd.
-00030C     (base 16)		Telesoft Technologies Ltd.
-				Observatory House, Stour Park,
-				    
-				GB
-
-00-03-08   (hex)		AM Communications, Inc.
-000308     (base 16)		AM Communications, Inc.
-				100 Commerce Blvd.
-				Quakertown  PA  18951
-				US
-
-00-03-07   (hex)		Secure Works, Inc.
-000307     (base 16)		Secure Works, Inc.
-				11 Executive Drive
-				Atlanta  GA  30329
-				US
-
-00-03-06   (hex)		Fusion In Tech Co., Ltd.
-000306     (base 16)		Fusion In Tech Co., Ltd.
-				6Fl, Daeyoon Bldg. 1688-5, Seocho-dong
-				Seoul,    
-				KR
-
-00-02-FC   (hex)		Cisco Systems, Inc
-0002FC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-FA   (hex)		DX Antenna Co., Ltd.
-0002FA     (base 16)		DX Antenna Co., Ltd.
-				2-15 Hamazaki-Dori,
-				    
-				JP
-
-00-02-FB   (hex)		Baumuller Aulugen-Systemtechnik GmbH
-0002FB     (base 16)		Baumuller Aulugen-Systemtechnik GmbH
-				Ostendsts. 84
-				    
-				DE
-
-00-02-F6   (hex)		Equipe Communications
-0002F6     (base 16)		Equipe Communications
-				100 Nagog Park
-				Acton  MA  01720
-				US
-
-00-02-23   (hex)		ClickTV
-000223     (base 16)		ClickTV
-				Kemong Bldg., 4th Fl.,
-				Seoul  Korea  135-010
-				KR
-
-00-02-CB   (hex)		TriState Ltd.
-0002CB     (base 16)		TriState Ltd.
-				Shinonaga Blg. 4-11-19 Hokko-cho
-				053-0852  053-0852  
-				JP
-
-00-02-CA   (hex)		EndPoints, Inc.
-0002CA     (base 16)		EndPoints, Inc.
-				4 Preston Court
-				Bedford  MA  01730
-				US
-
-00-03-2A   (hex)		UniData Communication Systems, Inc.
-00032A     (base 16)		UniData Communication Systems, Inc.
-				2F, OhSung-Bldg, 82-15,
-				    
-				KR
-
-00-02-BF   (hex)		dotRocket, Inc.
-0002BF     (base 16)		dotRocket, Inc.
-				1901 S. Bascom, Suite 300
-				Campbell  CA  95008
-				US
-
-00-03-17   (hex)		Merlin Systems, Inc.
-000317     (base 16)		Merlin Systems, Inc.
-				3900 New Park Mall Rd.
-				Newark  CA  94560
-				US
-
-00-03-18   (hex)		Cyras Systems, Inc.
-000318     (base 16)		Cyras Systems, Inc.
-				47100 Bayside Parkway
-				Fremont  CA  94538
-				US
-
-00-02-E3   (hex)		LITE-ON Communications, Inc.
-0002E3     (base 16)		LITE-ON Communications, Inc.
-				736 S. Hillview Drive
-				Milpitas  CA  95035
-				US
-
-00-02-DD   (hex)		Bromax Communications, Ltd.
-0002DD     (base 16)		Bromax Communications, Ltd.
-				No. 20 Kuang Fu Road,
-				Hsin Chu 303    
-				TW
-
-00-02-47   (hex)		Great Dragon Information Technology (Group) Co., Ltd.
-000247     (base 16)		Great Dragon Information Technology (Group) Co., Ltd.
-				169 Beiyuan Rd.,
-				Beijing  100101,  
-				CN
-
-00-02-43   (hex)		Raysis Co., Ltd.
-000243     (base 16)		Raysis Co., Ltd.
-				997-10, Daechi-Dong, Kangnam-Ku,
-				Seoul  135-280,  South Korea
-				KR
-
-00-02-31   (hex)		Ingersoll-Rand
-000231     (base 16)		Ingersoll-Rand
-				1467 Route 31 South
-				Annandale  NJ  08801
-				US
-
-00-02-66   (hex)		Thermalogic Corporation
-000266     (base 16)		Thermalogic Corporation
-				22 Kane Industrial Drive
-				Hudson  MA  01749
-				US
-
-00-02-68   (hex)		Harris Government Communications
-000268     (base 16)		Harris Government Communications
-				Systems Division
-				Melbourne  FL  32902
-				US
-
-00-02-5E   (hex)		High Technology Ltd
-00025E     (base 16)		High Technology Ltd
-				Chongqing Jinghong
-				People's Republic  of  
-				CN
-
-00-02-60   (hex)		Accordion Networks, Inc.
-000260     (base 16)		Accordion Networks, Inc.
-				39899 Balentine Drive, #335
-				Newark  CA  94560
-				US
-
-00-02-83   (hex)		Spectrum Controls, Inc.
-000283     (base 16)		Spectrum Controls, Inc.
-				PO Box 5533
-				Bellevue  WA  98006
-				US
-
-00-02-84   (hex)		UK Grid Solutions Limited
-000284     (base 16)		UK Grid Solutions Limited
-				St Leonards Building  Redhill Business Park
-				Stafford    ST16 1TW
-				GB
-
-00-02-80   (hex)		Mu Net, Inc.
-000280     (base 16)		Mu Net, Inc.
-				442 Marrett Road
-				Lexington  MA  02421
-				US
-
-00-90-64   (hex)		Thomson Inc.
-009064     (base 16)		Thomson Inc.
-				101 West 103rd Street
-				Indianapolis  IN  46290-1102
-				US
-
-00-02-7A   (hex)		IOI Technology Corporation
-00027A     (base 16)		IOI Technology Corporation
-				4F-3 No. 125 Lane 235,
-				Taipei  TAIWAN,  R.O.C.
-				TW
-
-00-02-74   (hex)		Tommy Technologies Corp.
-000274     (base 16)		Tommy Technologies Corp.
-				#407 Heehoon Bld
-				Seoul  Seoul  KOREA
-				KR
-
-00-02-9E   (hex)		Information Equipment Co., Ltd.
-00029E     (base 16)		Information Equipment Co., Ltd.
-				740-1 Eaho Bldg., Yeok Sam-Dong
-				Seoul  Korea  #135-080
-				KR
-
-00-02-9B   (hex)		Kreatel Communications AB
-00029B     (base 16)		Kreatel Communications AB
-				Teknikringen 4C
-				    
-				SE
-
-00-02-95   (hex)		IP.Access Limited
-000295     (base 16)		IP.Access Limited
-				Melbourn Science Park
-				SG8 6EE  SG8 6EE  U.K.
-				GB
-
-00-02-72   (hex)		CC&C Technologies, Inc.
-000272     (base 16)		CC&C Technologies, Inc.
-				8F, 150, Chien I Rd., Chung Ho City,
-				Taipei County 235  Taiwan  R.O.C.
-				TW
-
-00-02-6D   (hex)		Adept Telecom
-00026D     (base 16)		Adept Telecom
-				Avenue de l'Europe
-				    
-				FR
-
-00-02-6B   (hex)		BCM Computers Co., Ltd.
-00026B     (base 16)		BCM Computers Co., Ltd.
-				6F-6, No. 66, Sec 2,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-02-93   (hex)		Solid Data Systems
-000293     (base 16)		Solid Data Systems
-				2945 Oakmead Village Court
-				Santa Clara  CA  95051
-				US
-
-00-02-89   (hex)		DNE Technologies
-000289     (base 16)		DNE Technologies
-				50 Barnes Park N
-				Wallingford  CT  06492
-				US
-
-00-01-2F   (hex)		Twinhead International Corp
-00012F     (base 16)		Twinhead International Corp
-				2FL, 2, Lane 235, Bao-Chiao Road
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-02-A7   (hex)		Vivace Networks
-0002A7     (base 16)		Vivace Networks
-				2730 Orchard Parkway
-				San Jose  CA  95134
-				US
-
-00-01-B2   (hex)		Digital Processing Systems, Inc.
-0001B2     (base 16)		Digital Processing Systems, Inc.
-				70 Valleywood Drive
-				  L3R  4T5
-				CA
-
-00-01-B8   (hex)		Netsensity, Inc.
-0001B8     (base 16)		Netsensity, Inc.
-				PO Box 1060
-				Lake Forest  CA  92630
-				US
-
-00-01-B9   (hex)		SKF (U.K.) Limited
-0001B9     (base 16)		SKF (U.K.) Limited
-				2 Michaelson Square Kirkton Campus
-				Livingston    West Lothian  EH54 7DP
-				GB
-
-00-01-B3   (hex)		Precision Electronic Manufacturing
-0001B3     (base 16)		Precision Electronic Manufacturing
-				P0187, P.O. 527948
-				Miami  FL  33152-7948
-				US
-
-00-01-BD   (hex)		Peterson Electro-Musical Products, Inc.
-0001BD     (base 16)		Peterson Electro-Musical Products, Inc.
-				11601 S. Mayfield Avenue
-				Alsip  IL  60803-2476
-				US
-
-00-02-09   (hex)		Shenzhen SED Information Technology Co., Ltd.
-000209     (base 16)		Shenzhen SED Information Technology Co., Ltd.
-				4/F., West Block, Block 414, Zhenhua Rd.
-				    
-				CN
-
-00-02-02   (hex)		Amino Communications, Ltd.
-000202     (base 16)		Amino Communications, Ltd.
-				Times House
-				UK  CB4  5LH
-				GB
-
-00-02-01   (hex)		IFM Electronic gmbh
-000201     (base 16)		IFM Electronic gmbh
-				Bechlingen 34
-				    
-				DE
-
-00-02-34   (hex)		Imperial Technology, Inc.
-000234     (base 16)		Imperial Technology, Inc.
-				2305 Utah Avenue
-				El Segundo  CA  90245
-				US
-
-00-02-36   (hex)		INIT GmbH
-000236     (base 16)		INIT GmbH
-				Kaeppelestraße 6
-				    
-				DE
-
-00-02-2B   (hex)		SAXA, Inc.
-00022B     (base 16)		SAXA, Inc.
-				NBF Platinum Tower 1-17-3 Shirokane
-				Minato-ku  Tokyo  108-8050
-				JP
-
-00-02-24   (hex)		C-COR
-000224     (base 16)		C-COR
-				15 Sterling Drive
-				Wallingford  CT  06492
-				US
-
-00-02-1F   (hex)		Aculab PLC
-00021F     (base 16)		Aculab PLC
-				Lakeside, Bramley Road
-				Milton Keynes    MK1 1PT
-				GB
-
-00-02-1A   (hex)		Zuma Networks
-00021A     (base 16)		Zuma Networks
-				8403 Fallbrook Ave.
-				West Hills  CA  91304
-				US
-
-00-01-CA   (hex)		Geocast Network Systems, Inc.
-0001CA     (base 16)		Geocast Network Systems, Inc.
-				190 Independence Drive
-				Menlo Park  CA  94025
-				US
-
-00-01-D1   (hex)		CoNet Communications, Inc.
-0001D1     (base 16)		CoNet Communications, Inc.
-				25 Mauchly, #320
-				Irvine  CA  92618
-				US
-
-00-02-22   (hex)		Chromisys, Inc.
-000222     (base 16)		Chromisys, Inc.
-				1012 Stewart Drive
-				Sunnyvale  CA  94086
-				US
-
-00-02-13   (hex)		S.D.E.L.
-000213     (base 16)		S.D.E.L.
-				Aeropole D2A
-				    
-				FR
-
-00-01-DB   (hex)		Freecom Technologies GmbH
-0001DB     (base 16)		Freecom Technologies GmbH
-				Obentrautstraße 72
-				    
-				DE
-
-00-01-DF   (hex)		ISDN Communications, Ltd.
-0001DF     (base 16)		ISDN Communications, Ltd.
-				The Stable Block, Ronans
-				    ENGLAND
-				GB
-
-00-01-EF   (hex)		Camtel Technology Corp.
-0001EF     (base 16)		Camtel Technology Corp.
-				No. 2, Wu-Kung 5 Rd., Wu-Ku
-				Taiwan  Taiwan  R.O.C.
-				TW
-
-00-02-0A   (hex)		Gefran Spa
-00020A     (base 16)		Gefran Spa
-				Via Sebina, 74
-				    
-				IT
-
-00-02-06   (hex)		Telital R&D Denmark A/S
-000206     (base 16)		Telital R&D Denmark A/S
-				9530 Stouring
-				    
-				DK
-
-00-01-79   (hex)		WIRELESS TECHNOLOGY, INC.
-000179     (base 16)		WIRELESS TECHNOLOGY, INC.
-				Anam Bldg. 2Fl, 154-17
-				    KOREA
-				KR
-
-00-01-60   (hex)		ELMEX Co., LTD.
-000160     (base 16)		ELMEX Co., LTD.
-				16-30 Kimachi
-				    
-				JP
-
-00-01-4E   (hex)		WIN Enterprises, Inc.
-00014E     (base 16)		WIN Enterprises, Inc.
-				300 Willow Street South
-				North Andover  MA  01845
-				US
-
-00-30-73   (hex)		International Microsystems, In
-003073     (base 16)		International Microsystems, In
-				521 Valley Way
-				Milpitas  CA  95035
-				US
-
-00-30-3F   (hex)		TurboComm Tech Inc.
-00303F     (base 16)		TurboComm Tech Inc.
-				4F-2, No 171, Sung-Tch Road
-				Taipei    
-				TW
-
-00-01-84   (hex)		SIEB & MEYER AG
-000184     (base 16)		SIEB & MEYER AG
-				Auf dem Schmaarkamp 21
-				    
-				DE
-
-00-01-95   (hex)		Sena Technologies, Inc.
-000195     (base 16)		Sena Technologies, Inc.
-				116-23 Shinlim-dong
-				    KOREA
-				KR
-
-00-01-A4   (hex)		Microlink Corporation
-0001A4     (base 16)		Microlink Corporation
-				11110 Ohio Ave., - Ste. #108
-				Los Angeles  CA  90034
-				US
-
-00-01-8E   (hex)		Logitec Corporation
-00018E     (base 16)		Logitec Corporation
-				8268 Rokudouhara, Misuzu
-				    
-				JP
-
-00-01-6D   (hex)		CarrierComm Inc.
-00016D     (base 16)		CarrierComm Inc.
-				2231 Rutherford, Suite 110
-				Carlsbad  CA  92008
-				US
-
-00-01-6F   (hex)		Inkel Corp.
-00016F     (base 16)		Inkel Corp.
-				CheongCheon-Dong, BuPyeong-Gu,
-				Incheon-Si    
-				KR
-
-00-01-70   (hex)		ESE Embedded System Engineer'g
-000170     (base 16)		ESE Embedded System Engineer'g
-				Mühlbachstraße 20
-				    
-				DE
-
-00-01-6A   (hex)		ALITEC
-00016A     (base 16)		ALITEC
-				Laval Technopole B.P. 102
-				    
-				FR
-
-00-01-53   (hex)		ARCHTEK TELECOM CORPORATION
-000153     (base 16)		ARCHTEK TELECOM CORPORATION
-				4F, No.9 Lane 130, Min-Chyuan Rd.
-				  231  TAIWAN
-				TW
-
-00-01-35   (hex)		KDC Corp.
-000135     (base 16)		KDC Corp.
-				200-11 AnYang 7 dong
-				    KOREA
-				KR
-
-00-01-41   (hex)		CABLE PRINT
-000141     (base 16)		CABLE PRINT
-				Jozef Cardynstraat 16
-				    
-				BE
-
-00-01-65   (hex)		AirSwitch Corporation
-000165     (base 16)		AirSwitch Corporation
-				37East 200South
-				Springville  UT  84663
-				US
-
-00-01-56   (hex)		FIREWIREDIRECT.COM, INC.
-000156     (base 16)		FIREWIREDIRECT.COM, INC.
-				4132 Spicewood Springs Rd - #I-4
-				Austin  TX  78759
-				US
-
-00-01-B7   (hex)		Centos, Inc.
-0001B7     (base 16)		Centos, Inc.
-				6F-1, NO. 15, LANE 360
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-01-B5   (hex)		Turin Networks, Inc.
-0001B5     (base 16)		Turin Networks, Inc.
-				1415 North McDowell Blvd.
-				Petaluma  CA  94954
-				US
-
-00-01-83   (hex)		ANITE TELECOMS
-000183     (base 16)		ANITE TELECOMS
-				127 Fleet Road, Fleet
-				  UNITED  KINGDOM
-				GB
-
-00-01-7E   (hex)		ADTEK System Science Co., Ltd.
-00017E     (base 16)		ADTEK System Science Co., Ltd.
-				YBP West Tower
-				  Hodogaya Yokohama  
-				JP
-
-00-01-0C   (hex)		System Talks Inc.
-00010C     (base 16)		System Talks Inc.
-				4F, PrimeNihonbashi Bld.
-				Chuo-ku Tokyo    
-				JP
-
-00-01-11   (hex)		iDigm Inc.
-000111     (base 16)		iDigm Inc.
-				7FL Sindo B/D 1604-22 Seocho-Dong
-				Seoul 137-070    
-				KR
-
-00-01-07   (hex)		Leiser GmbH
-000107     (base 16)		Leiser GmbH
-				Ilmstr. 7
-				85579 Neubiberg    
-				DE
-
-00-01-14   (hex)		KANDA TSUSHIN KOGYO CO., LTD.
-000114     (base 16)		KANDA TSUSHIN KOGYO CO., LTD.
-				23-2, Nishi-Gotanda 2-chome,
-				Tokyo 141-8533    
-				JP
-
-00-B0-F5   (hex)		NetWorth Technologies, Inc.
-00B0F5     (base 16)		NetWorth Technologies, Inc.
-				1000 Germantown Pike
-				Plymouth Metting  PA  19462
-				US
-
-00-B0-DB   (hex)		Nextcell, Inc.
-00B0DB     (base 16)		Nextcell, Inc.
-				651 East 18th Street
-				Plano  TX  75074
-				US
-
-00-B0-AE   (hex)		Symmetricom
-00B0AE     (base 16)		Symmetricom
-				2300 Orchard Parkway
-				San Jose  CA  95131
-				US
-
-00-B0-E7   (hex)		British Federal Ltd.
-00B0E7     (base 16)		British Federal Ltd.
-				Castle Mill Works
-				Dudley DY1 4DA  England  
-				GB
-
-00-B0-8E   (hex)		Cisco Systems, Inc
-00B08E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-5C   (hex)		SMAR Laboratories Corp.
-00305C     (base 16)		SMAR Laboratories Corp.
-				10960 Millridge North - Ste. #107
-				Houston  TX  77070
-				US
-
-00-30-04   (hex)		LEADTEK RESEARCH INC.
-003004     (base 16)		LEADTEK RESEARCH INC.
-				18F, No.166, Chien-Yi Road
-				Hsien    
-				TW
-
-00-30-F9   (hex)		Sollae Systems Co., Ltd.
-0030F9     (base 16)		Sollae Systems Co., Ltd.
-				607 Incheo IT Tower
-				Nam-gu  Incheon  
-				KR
-
-00-01-18   (hex)		EZ Digital Co., Ltd.
-000118     (base 16)		EZ Digital Co., Ltd.
-				Bitville Bldg. Room 703
-				Seoul    
-				KR
-
-00-01-1C   (hex)		Universal Talkware Corporation
-00011C     (base 16)		Universal Talkware Corporation
-				10 Second St. NE
-				Minneapolis  MN  55413
-				US
-
-00-01-28   (hex)		EnjoyWeb, Inc.
-000128     (base 16)		EnjoyWeb, Inc.
-				3000 Scott Blvd. #107
-				Santa Clara  CA  95054
-				US
-
-00-01-46   (hex)		Tesco Controls, Inc.
-000146     (base 16)		Tesco Controls, Inc.
-				P.O. Box 239012
-				Sacramento  CA  95823-9012
-				US
-
-00-01-49   (hex)		TDT AG
-000149     (base 16)		TDT AG
-				Siemensstraße 18
-				Essenbach    84051
-				DE
-
-00-01-31   (hex)		Bosch Security Systems, Inc.
-000131     (base 16)		Bosch Security Systems, Inc.
-				130 Perinton Parkway
-				Fairport  NY  14450
-				US
-
-00-30-BE   (hex)		City-Net Technology, Inc.
-0030BE     (base 16)		City-Net Technology, Inc.
-				135 E. Chesnut Ave., Ste.
-				Monrovia  CA  91016
-				US
-
-00-30-02   (hex)		Expand Networks
-003002     (base 16)		Expand Networks
-				Atidim Tech Park, Bldg. 4
-				Tel-Aviv 61580    
-				IL
-
-00-30-78   (hex)		Cisco Systems, Inc
-003078     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-B0-EC   (hex)		EACEM
-00B0EC     (base 16)		EACEM
-				Avenue Louise 140, Bte 6
-				B-1050 BRUSSELS    
-				BE
-
-00-B0-DF   (hex)		Starboard Storage Systems
-00B0DF     (base 16)		Starboard Storage Systems
-				12303 Airport Way
-				Broomfield  Co  80021
-				US
-
-00-01-0B   (hex)		Space CyberLink, Inc.
-00010B     (base 16)		Space CyberLink, Inc.
-				5th Fl. Guppyung Town B
-				Seoul    
-				KR
-
-00-30-9C   (hex)		Timing Applications, Inc.
-00309C     (base 16)		Timing Applications, Inc.
-				4775 Walnut St.
-				Boulder  CO  80301
-				US
-
-00-30-7E   (hex)		Redflex Communication Systems
-00307E     (base 16)		Redflex Communication Systems
-				11-29 Eastern Road
-				South Melbourne  Victoria 3205  
-				AU
-
-00-30-4F   (hex)		PLANET Technology Corporation
-00304F     (base 16)		PLANET Technology Corporation
-				11F, No. 96, Min-Chuan Road
-				Hsin-Tien Dist., New Taipei City    
-				TW
-
-00-30-22   (hex)		Fong Kai Industrial Co., Ltd.
-003022     (base 16)		Fong Kai Industrial Co., Ltd.
-				4F-3, No. 13, Wu Chuan 1st Road
-				Hsin Chuang City, Taipei Hsien    
-				TW
-
-00-30-70   (hex)		1Net Corporation
-003070     (base 16)		1Net Corporation
-				347 Elizabeth Avenue - Ste. #100
-				Somerset  NJ  08873
-				US
-
-00-30-F8   (hex)		Dynapro Systems, Inc.
-0030F8     (base 16)		Dynapro Systems, Inc.
-				800 Carleton Court
-				New Westminster  British Columbia V3M 6L3  
-				CA
-
-00-30-B7   (hex)		Teletrol Systems, Inc.
-0030B7     (base 16)		Teletrol Systems, Inc.
-				Technology Center
-				Manchester  NH  03101
-				US
-
-00-30-B3   (hex)		San Valley Systems, Inc.
-0030B3     (base 16)		San Valley Systems, Inc.
-				2105 S. Bascom Ave. - Ste. #390
-				Campbell  CA  95008
-				US
-
-00-30-09   (hex)		Tachion Networks, Inc.
-003009     (base 16)		Tachion Networks, Inc.
-				2 Meridian Road
-				Eatontown  NJ  07724
-				US
-
-00-30-7A   (hex)		Advanced Technology & Systems
-00307A     (base 16)		Advanced Technology & Systems
-				Yokohama Business Park East Tower 9F,
-				    240-0005
-				JP
-
-00-30-61   (hex)		MobyTEL
-003061     (base 16)		MobyTEL
-				4301 Connecticut Ave. NW
-				Washington  DC  20008
-				US
-
-00-30-0B   (hex)		mPHASE Technologies, Inc.
-00300B     (base 16)		mPHASE Technologies, Inc.
-				250 14th Street
-				Atlanta  GA  30318
-				US
-
-00-30-8F   (hex)		MICRILOR, Inc.
-00308F     (base 16)		MICRILOR, Inc.
-				17 Lakeside Office Park
-				Wakefield  MA  01880
-				US
-
-00-30-50   (hex)		Versa Technology
-003050     (base 16)		Versa Technology
-				4430 E. Miraloma Ave., - Ste.
-				Anaheim  CA  92807
-				US
-
-00-30-C0   (hex)		Lara Technology, Inc.
-0030C0     (base 16)		Lara Technology, Inc.
-				2345 North First Street
-				San Jose  CA  95131
-				US
-
-00-30-05   (hex)		Fujitsu Siemens Computers
-003005     (base 16)		Fujitsu Siemens Computers
-				Buergermeister ulrich 100
-				86199 Augsburg    
-				DE
-
-00-30-E0   (hex)		OXFORD SEMICONDUCTOR LTD.
-0030E0     (base 16)		OXFORD SEMICONDUCTOR LTD.
-				25 MILTON PARK
-				Abingdon  Oxon  OX14 4SH
-				GB
-
-00-30-64   (hex)		ADLINK TECHNOLOGY, INC.
-003064     (base 16)		ADLINK TECHNOLOGY, INC.
-				9F, NO. 166, JIEN-YI R.D.
-				CHUNG-HO CITY TAIPEI    
-				TW
-
-00-30-DB   (hex)		Mindready Solutions, Inc.
-0030DB     (base 16)		Mindready Solutions, Inc.
-				2800 Marie-Curie Avenue
-				Quebec    H4S 2C2
-				CA
-
-00-30-E7   (hex)		CNF MOBILE SOLUTIONS, INC.
-0030E7     (base 16)		CNF MOBILE SOLUTIONS, INC.
-				7722 E. GRAY ROAD
-				SCOTTSDALE  AZ  85260
-				US
-
-00-30-B4   (hex)		INTERSIL CORP.
-0030B4     (base 16)		INTERSIL CORP.
-				P.O. BOX 883
-				MELBOURNE  FL  32902
-				US
-
-00-30-B1   (hex)		TrunkNet
-0030B1     (base 16)		TrunkNet
-				Aubergenviller Allee 51
-				Dieburg    D-64807
-				DE
-
-00-30-60   (hex)		Powerfile, Inc.
-003060     (base 16)		Powerfile, Inc.
-				3350 Thomas Road
-				Santa Clara  CA  95054-2062
-				US
-
-00-30-A0   (hex)		TYCO SUBMARINE SYSTEMS, LTD.
-0030A0     (base 16)		TYCO SUBMARINE SYSTEMS, LTD.
-				250 INDUSTRIAL WAY WEST
-				EATONTOWN  NJ  07724
-				US
-
-00-30-15   (hex)		CP CLARE CORP.
-003015     (base 16)		CP CLARE CORP.
-				78 CHERRY HILL DRIVE
-				BEVERLY  MA  01915
-				US
-
-00-30-1F   (hex)		OPTICAL NETWORKS, INC.
-00301F     (base 16)		OPTICAL NETWORKS, INC.
-				166 BAYPOINTE PARKWAY
-				SAN JOSE  CA  95134
-				US
-
-00-30-FA   (hex)		TELICA, INC.
-0030FA     (base 16)		TELICA, INC.
-				734 FOREST STREET, BLDG.
-				MARLBORO  MA  01752
-				US
-
-00-30-4B   (hex)		ORBACOM SYSTEMS, INC.
-00304B     (base 16)		ORBACOM SYSTEMS, INC.
-				1704 TAYLORS LANE
-				CINNAMINSON  NJ  08077
-				US
-
-00-30-E9   (hex)		GMA COMMUNICATION MANUFACT'G
-0030E9     (base 16)		GMA COMMUNICATION MANUFACT'G
-				MARKETING, (1991) LTD.
-				ISRAEL  ISRAEL  49130
-				IL
-
-00-30-A5   (hex)		ACTIVE POWER
-0030A5     (base 16)		ACTIVE POWER
-				11525 STONEHOLLOW - STE.#255
-				AUSTIN  TX  78758
-				US
-
-00-30-84   (hex)		ALLIED TELESYN INTERNAIONAL
-003084     (base 16)		ALLIED TELESYN INTERNAIONAL
-				CORPORATION
-				SUNNYVALE  CA  94086
-				US
-
-00-30-43   (hex)		IDREAM TECHNOLOGIES, PTE. LTD.
-003043     (base 16)		IDREAM TECHNOLOGIES, PTE. LTD.
-				54 KALLANG BAHRU, #02-14
-				    
-				SG
-
-00-30-00   (hex)		ALLWELL TECHNOLOGY CORP.
-003000     (base 16)		ALLWELL TECHNOLOGY CORP.
-				4F, #15, LANE3, SEC.2
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-30-11   (hex)		HMS Industrial Networks   
-003011     (base 16)		HMS Industrial Networks   
-				P O Box 4126
-				    SE-300 04
-				SE
-
-00-30-68   (hex)		CYBERNETICS TECH. CO., LTD.
-003068     (base 16)		CYBERNETICS TECH. CO., LTD.
-				DAITOH BLDG. 4F 3-32-1
-				  JAPAN  171-0033
-				JP
-
-00-30-91   (hex)		TAIWAN FIRST LINE ELEC. CORP.
-003091     (base 16)		TAIWAN FIRST LINE ELEC. CORP.
-				40 Chung-Shan Road
-				Taipei County    
-				TW
-
-00-30-CD   (hex)		CONEXANT SYSTEMS, INC.
-0030CD     (base 16)		CONEXANT SYSTEMS, INC.
-				4311 JAMBOREE ROAD
-				NEWPORT BEACH  CA  92660
-				US
-
-00-30-1A   (hex)		SMARTBRIDGES PTE. LTD.
-00301A     (base 16)		SMARTBRIDGES PTE. LTD.
-				745 Toa Payoh Lorong 5
-				    319455
-				SG
-
-00-30-29   (hex)		OPICOM
-003029     (base 16)		OPICOM
-				ROOM #302, STYLE FACTORY 151
-				    KOREA
-				KR
-
-00-30-83   (hex)		Ivron Systems
-003083     (base 16)		Ivron Systems
-				19-20 YORK ROAD
-				    
-				IE
-
-00-30-B6   (hex)		Cisco Systems, Inc
-0030B6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-C7   (hex)		Macromate Corp.
-0030C7     (base 16)		Macromate Corp.
-				8F,Universal Center,Number 179
-				Taipei  Hsien  
-				TW
-
-00-30-E4   (hex)		CHIYODA SYSTEM RIKEN
-0030E4     (base 16)		CHIYODA SYSTEM RIKEN
-				2-7, KANDA-NISHIKI-CHO
-				    
-				JP
-
-00-30-66   (hex)		RFM
-003066     (base 16)		RFM
-				3079 Premiere Pkwy
-				Duluth  GA  30097
-				US
-
-00-30-31   (hex)		LIGHTWAVE COMMUNICATIONS, INC.
-003031     (base 16)		LIGHTWAVE COMMUNICATIONS, INC.
-				261 PEPE'S FARM ROAD
-				MILFORD  CT  06460
-				US
-
-00-D0-07   (hex)		MIC ASSOCIATES, INC.
-00D007     (base 16)		MIC ASSOCIATES, INC.
-				1510-1, KAIDOKI
-				JAPAN  JAPAN  206-0012
-				JP
-
-00-D0-FF   (hex)		Cisco Systems, Inc
-00D0FF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-28   (hex)		Harmonic, Inc
-00D028     (base 16)		Harmonic, Inc
-				965 Stewart Drive
-				Sunnyvale  CA  94086-3913
-				US
-
-00-D0-25   (hex)		XROSSTECH, INC.
-00D025     (base 16)		XROSSTECH, INC.
-				HABDONG B/D 5F 210-2
-				    KOREA
-				KR
-
-00-D0-44   (hex)		ALIDIAN NETWORKS, INC.
-00D044     (base 16)		ALIDIAN NETWORKS, INC.
-				1330 W. MIDDLEFIELD ROAD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-30-5B   (hex)		Toko Inc.
-00305B     (base 16)		Toko Inc.
-				18 COMIGAYA, TSURUGASHIMA-SHI
-				  JAPAN  350-2281
-				JP
-
-00-D0-49   (hex)		IMPRESSTEK CO., LTD.
-00D049     (base 16)		IMPRESSTEK CO., LTD.
-				6F, SPECIALTY CONSTRUCTION CTR
-				302-120  KOREA  (REP.)
-				KR
-
-00-D0-5B   (hex)		ACROLOOP MOTION CONTROL
-00D05B     (base 16)		ACROLOOP MOTION CONTROL
-				SYSTEMS
-				CHASKA  MN  55318
-				US
-
-00-D0-42   (hex)		MAHLO GMBH & CO. UG
-00D042     (base 16)		MAHLO GMBH & CO. UG
-				DONAUSTRASSE 12
-				    
-				DE
-
-00-D0-31   (hex)		INDUSTRIAL LOGIC CORPORATION
-00D031     (base 16)		INDUSTRIAL LOGIC CORPORATION
-				15 PIEDMONT CENTER-STE #700
-				ATLANTA  GA  30305
-				US
-
-00-D0-38   (hex)		FIVEMERE, LTD.
-00D038     (base 16)		FIVEMERE, LTD.
-				UNIT 1-HERON INDUSTRIAL ESTATE
-				RG7  1PJ  ENGLAND
-				GB
-
-00-D0-C6   (hex)		THOMAS & BETTS CORP.
-00D0C6     (base 16)		THOMAS & BETTS CORP.
-				Thomas & Betts Aust. Pty. Ltd.
-				Lidcombe  New South Wales  
-				AU
-
-00-D0-77   (hex)		LUCENT TECHNOLOGIES
-00D077     (base 16)		LUCENT TECHNOLOGIES
-				CLIENT ACCESS BUSINESS UNIT
-				HOLMDEL  NJ  07733
-				US
-
-00-D0-3E   (hex)		ROCKETCHIPS, INC.
-00D03E     (base 16)		ROCKETCHIPS, INC.
-				7901 XERXES AVE. S.
-				MINNEAPOLIS  MN  55431
-				US
-
-00-D0-93   (hex)		TQ - COMPONENTS GMBH
-00D093     (base 16)		TQ - COMPONENTS GMBH
-				GUT DELLING - MUHLSTR 2
-				    
-				DE
-
-00-D0-3F   (hex)		AMERICAN COMMUNICATION
-00D03F     (base 16)		AMERICAN COMMUNICATION
-				TECHNOLIGIES INTERNATIONAL INC
-				ROHNERT PARK  CA  94928
-				US
-
-00-D0-F7   (hex)		NEXT NETS CORPORATION
-00D0F7     (base 16)		NEXT NETS CORPORATION
-				MITA KOKUSAI BLDG. 17F
-				    
-				JP
-
-00-D0-6F   (hex)		KMC CONTROLS
-00D06F     (base 16)		KMC CONTROLS
-				P.O. BOX 497
-				NEW PARIS  IN  46553
-				US
-
-00-D0-FC   (hex)		GRANITE MICROSYSTEMS
-00D0FC     (base 16)		GRANITE MICROSYSTEMS
-				10202 N. ENTERPRISE DRIVE
-				MEQUON  WI  53092
-				US
-
-00-D0-A6   (hex)		LANBIRD TECHNOLOGY CO., LTD.
-00D0A6     (base 16)		LANBIRD TECHNOLOGY CO., LTD.
-				ROOM A-211, S.B.I.
-				  KOREA  157-030
-				KR
-
-00-D0-03   (hex)		COMDA ENTERPRISES CORP.
-00D003     (base 16)		COMDA ENTERPRISES CORP.
-				2F, NO. 501-18, CHUNGCHEN ROAD
-				TAIWAN  TAIWAN  ROC
-				TW
-
-00-D0-D2   (hex)		EPILOG CORPORATION
-00D0D2     (base 16)		EPILOG CORPORATION
-				500 CORPORATE CIRCLE - STE.
-				GOLDEN  CO  80401
-				US
-
-00-D0-F9   (hex)		ACUTE COMMUNICATIONS CORP.
-00D0F9     (base 16)		ACUTE COMMUNICATIONS CORP.
-				NO. 1, CREATION ROAD III
-				    TAIWAN
-				TW
-
-00-D0-CE   (hex)		iSystem Labs 
-00D0CE     (base 16)		iSystem Labs 
-				BRODISCE 7, 10C 
-				Trzin    1236
-				SI
-
-00-D0-18   (hex)		QWES. COM, INC.
-00D018     (base 16)		QWES. COM, INC.
-				14742 NEWPORT AVE. - STE. #203
-				TUSTIN  CA  92780
-				US
-
-00-01-A7   (hex)		UNEX TECHNOLOGY CORPORATION
-0001A7     (base 16)		UNEX TECHNOLOGY CORPORATION
-				8F-5, #130, SZE WEI RD.,
-				HSINCHU    
-				TW
-
-00-D0-8C   (hex)		GENOA TECHNOLOGY, INC.
-00D08C     (base 16)		GENOA TECHNOLOGY, INC.
-				5401 TECH CIRCLE
-				MOORPARK  CA  93021
-				US
-
-00-D0-59   (hex)		AMBIT MICROSYSTEMS CORP.
-00D059     (base 16)		AMBIT MICROSYSTEMS CORP.
-				5F-1, 5 HSIN-AN ROAD
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-D0-FD   (hex)		OPTIMA TELE.COM, INC.
-00D0FD     (base 16)		OPTIMA TELE.COM, INC.
-				4-20 Cachet Woods Court
-				Markham  ON  L6C 3G1
-				CA
-
-00-D0-A9   (hex)		SHINANO KENSHI CO., LTD.
-00D0A9     (base 16)		SHINANO KENSHI CO., LTD.
-				ELECTRONIC EQUIPMENT DIVISION
-				    
-				JP
-
-00-D0-DD   (hex)		SUNRISE TELECOM, INC.
-00D0DD     (base 16)		SUNRISE TELECOM, INC.
-				22 GREAT OAKS BLVD.
-				SAN JOSE  CA  95119
-				US
-
-00-D0-E6   (hex)		IBOND INC.
-00D0E6     (base 16)		IBOND INC.
-				3160, DE LA CRUZ BLVD.
-				SANTA CLARA  CA  95054
-				US
-
-00-D0-D1   (hex)		Sycamore Networks
-00D0D1     (base 16)		Sycamore Networks
-				220 Mill Rd
-				Chelmsford  MA  01824
-				US
-
-00-D0-87   (hex)		MICROFIRST INC.
-00D087     (base 16)		MICROFIRST INC.
-				11 EAST OAK STREET
-				OAKLAND  NJ  07436
-				US
-
-00-D0-80   (hex)		EXABYTE CORPORATION
-00D080     (base 16)		EXABYTE CORPORATION
-				1685 38TH STREET
-				BOULDER  CO  80301
-				US
-
-00-D0-91   (hex)		SMARTSAN SYSTEMS, INC.
-00D091     (base 16)		SMARTSAN SYSTEMS, INC.
-				4655 OLD IRONSIDES DR. #480
-				SANTA CLARA  CA  95054
-				US
-
-00-D0-4E   (hex)		LOGIBAG
-00D04E     (base 16)		LOGIBAG
-				2, Rue de la Mandinière
-				    
-				FR
-
-00-D0-27   (hex)		APPLIED AUTOMATION, INC.
-00D027     (base 16)		APPLIED AUTOMATION, INC.
-				P.O. BOX 9999
-				BARTLESVILLE  OK  74005-9999
-				US
-
-00-D0-72   (hex)		BROADLOGIC
-00D072     (base 16)		BROADLOGIC
-				463 S. MILPITAS BLVD.
-				MILPITAS  CA  95035
-				US
-
-00-D0-E2   (hex)		MRT MICRO, INC.
-00D0E2     (base 16)		MRT MICRO, INC.
-				14000 S. MILITARY TRAIL
-				DELRAY BEACH  FL  33484
-				US
-
-00-D0-6A   (hex)		LINKUP SYSTEMS CORPORATION
-00D06A     (base 16)		LINKUP SYSTEMS CORPORATION
-				1190 COLEMAN AVE.- STE #2C
-				SAN JOSE  CA  95110
-				US
-
-00-D0-89   (hex)		DYNACOLOR, INC.
-00D089     (base 16)		DYNACOLOR, INC.
-				No.116, Zhouzi St., Neihu Dist.
-				Taipei City    114
-				TW
-
-00-D0-2C   (hex)		CAMPBELL SCIENTIFIC, INC.
-00D02C     (base 16)		CAMPBELL SCIENTIFIC, INC.
-				815 W. 1800 N.
-				LOGAN  UT  84321-1784
-				US
-
-00-D0-CD   (hex)		ATAN TECHNOLOGY INC.
-00D0CD     (base 16)		ATAN TECHNOLOGY INC.
-				#5, ALLEY 18, LANE 81,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-D0-40   (hex)		SYSMATE CO., LTD.
-00D040     (base 16)		SYSMATE CO., LTD.
-				1091 WOLPYONG-DONG
-				  SOUTH  KOREA
-				KR
-
-00-D0-1A   (hex)		URMET  TLC S.P.A.
-00D01A     (base 16)		URMET  TLC S.P.A.
-				VIA DI CASTEL ROMANO 167
-				    
-				IT
-
-00-50-FF   (hex)		HAKKO ELECTRONICS CO., LTD.
-0050FF     (base 16)		HAKKO ELECTRONICS CO., LTD.
-				238, KAMIKASHIWANO-MACHI
-				MATTO-SHI, ISHIKAWA 924-0035    
-				JP
-
-00-50-D2   (hex)		CMC Electronics Inc
-0050D2     (base 16)		CMC Electronics Inc
-				600 Dr.Frederik-Philips Blvd
-				Montreal    QC H4M 2S9
-				CA
-
-00-50-F9   (hex)		Sensormatic Electronics LLC
-0050F9     (base 16)		Sensormatic Electronics LLC
-				1501 Yamato Rd
-				Boca Raton  FL  33431
-				US
-
-00-50-48   (hex)		INFOLIBRIA
-005048     (base 16)		INFOLIBRIA
-				411 WAVERLY OAKS RD-STE #323
-				WALTHAM  MA  02154-8414
-				US
-
-00-50-4E   (hex)		SIERRA MONITOR CORP.
-00504E     (base 16)		SIERRA MONITOR CORP.
-				1991 TAROB COURT
-				MILPITAS  CA  95035
-				US
-
-00-50-F6   (hex)		PAN-INTERNATIONAL INDUSTRIAL CORP.
-0050F6     (base 16)		PAN-INTERNATIONAL INDUSTRIAL CORP.
-				GF, NO. 176, CHANG CHUN RD.
-				TAIPEI    
-				TW
-
-00-50-6C   (hex)		Beijer Electronics Products AB
-00506C     (base 16)		Beijer Electronics Products AB
-				Box 426
-				SE-201 24  Malmoe  
-				SE
-
-00-50-D7   (hex)		TELSTRAT
-0050D7     (base 16)		TELSTRAT
-				3600 AVENUE
-				PLANO  TX  75074
-				US
-
-00-50-44   (hex)		ASACA CORPORATION
-005044     (base 16)		ASACA CORPORATION
-				420 CORPORATE CIRCLE, Unit H
-				GOLDEN  CO  80401
-				US
-
-00-50-E6   (hex)		HAKUSAN CORPORATION
-0050E6     (base 16)		HAKUSAN CORPORATION
-				J TOWER, 1-1, NIKKOU-CHO
-				    
-				JP
-
-00-50-3C   (hex)		TSINGHUA NOVEL ELECTRONICS
-00503C     (base 16)		TSINGHUA NOVEL ELECTRONICS
-				CO., LTD.
-				100084  100084  
-				CN
-
-00-50-60   (hex)		TANDBERG TELECOM AS
-005060     (base 16)		TANDBERG TELECOM AS
-				Philip Pedersens vei 20
-				1361  Lysaker  
-				NO
-
-00-50-EE   (hex)		TEK DIGITEL CORPORATION
-0050EE     (base 16)		TEK DIGITEL CORPORATION
-				20010 CENTURY BLVD. #300
-				GERMANTOWN  MD  20874
-				US
-
-00-50-45   (hex)		RIOWORKS SOLUTIONS, INC.
-005045     (base 16)		RIOWORKS SOLUTIONS, INC.
-				4F, NO.28, LANE 583
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-50-2B   (hex)		GENRAD LTD.
-00502B     (base 16)		GENRAD LTD.
-				ORION BUSINESS PARK
-				UNITED KINGDOM  SK3  OXG
-				GB
-
-00-50-2E   (hex)		CAMBEX CORPORATION
-00502E     (base 16)		CAMBEX CORPORATION
-				115 Flanders Road
-				Westborough  MA  01581
-				US
-
-00-50-6E   (hex)		CORDER ENGINEERING CORPORATION
-00506E     (base 16)		CORDER ENGINEERING CORPORATION
-				151 KALMUS DRIVE - STE #A103
-				COSTA MESA  CA  92626
-				US
-
-00-50-2C   (hex)		SOYO COMPUTER, INC.
-00502C     (base 16)		SOYO COMPUTER, INC.
-				NO. 21 WU-KUNG 5 RD.
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-50-77   (hex)		PROLIFIC TECHNOLOGY, INC.
-005077     (base 16)		PROLIFIC TECHNOLOGY, INC.
-				6F 1, LANE 51, SEC 1
-				    100
-				TW
-
-00-50-33   (hex)		MAYAN NETWORKS
-005033     (base 16)		MAYAN NETWORKS
-				3350 SCOTT BLVD. - BLDG. #9
-				SANTA CLARA  CA  95054
-				US
-
-00-50-0E   (hex)		CHROMATIS NETWORKS, INC.
-00500E     (base 16)		CHROMATIS NETWORKS, INC.
-				3 BETHESDA METRO CENTER
-				BETHESDA  MD  20814
-				US
-
-00-D0-CC   (hex)		TECHNOLOGIES LYRE INC.
-00D0CC     (base 16)		TECHNOLOGIES LYRE INC.
-				1200 ST-JEAN-BAPTISTE,
-				CANADA  G2E  5E8
-				CA
-
-00-50-EC   (hex)		OLICOM A/S
-0050EC     (base 16)		OLICOM A/S
-				NYBROVEJ 114
-				    
-				DK
-
-00-50-C9   (hex)		MASPRO DENKOH CORP.
-0050C9     (base 16)		MASPRO DENKOH CORP.
-				ASADA NISSHIN AICHI
-				    
-				JP
-
-00-50-BB   (hex)		CMS TECHNOLOGIES
-0050BB     (base 16)		CMS TECHNOLOGIES
-				13955 FARMINGTON RAOD
-				LIVONIA  MI  48154
-				US
-
-00-50-62   (hex)		KOUWELL ELECTRONICS CORP.  **
-005062     (base 16)		KOUWELL ELECTRONICS CORP.  **
-				7F, NO.99, NAN-KANG ROAD
-				    
-				TW
-
-00-50-D5   (hex)		AD SYSTEMS CORP.
-0050D5     (base 16)		AD SYSTEMS CORP.
-				1-4-1, NAKACHO, MUSASHINO CITY
-				TOKYO 180-0006    
-				JP
-
-00-50-F3   (hex)		GLOBAL NET INFORMATION CO., Ltd.
-0050F3     (base 16)		GLOBAL NET INFORMATION CO., Ltd.
-				NORTH TOWER- RM 1305
-				GUANG ZHOU 510095    
-				CN
-
-00-50-BE   (hex)		FAST MULTIMEDIA AG
-0050BE     (base 16)		FAST MULTIMEDIA AG
-				RUEDESHEIMERSTR. 11-13
-				80686 MUNICH    
-				DE
-
-00-50-6F   (hex)		G-CONNECT
-00506F     (base 16)		G-CONNECT
-				P.O. BOX 2200
-				HERZLIYA 46120    
-				IL
-
-00-50-F8   (hex)		ENTREGA TECHNOLOGIES, INC.
-0050F8     (base 16)		ENTREGA TECHNOLOGIES, INC.
-				25691 ATLANTIC OCEAN DRIVE
-				LAKE FOREST  CA  92630
-				US
-
-00-50-42   (hex)		SCI MANUFACTURING SINGAPORE PTE, LTD.
-005042     (base 16)		SCI MANUFACTURING SINGAPORE PTE, LTD.
-				3 DEPOT CLOSE
-				  SINGAPORE 109840  
-				SG
-
-00-50-C0   (hex)		GATAN, INC.
-0050C0     (base 16)		GATAN, INC.
-				5933 CORONADO LANE
-				PLEASANTON  CA  94588
-				US
-
-00-50-51   (hex)		IWATSU ELECTRIC CO., LTD.
-005051     (base 16)		IWATSU ELECTRIC CO., LTD.
-				7-41, KUGAYAMA 1-CHOME
-				SUGINAMI-KU, TOKYO 168-8501    
-				JP
-
-00-50-7D   (hex)		IFP
-00507D     (base 16)		IFP
-				LESSINGSTR. 4
-				D-78315 RADOLFZELL    
-				DE
-
-00-50-97   (hex)		MMC-EMBEDDED COMPUTERTECHNIK GmbH
-005097     (base 16)		MMC-EMBEDDED COMPUTERTECHNIK GmbH
-				ULRICHSBERGERSTR. 17
-				D-94469 DEGGENDORF    
-				DE
-
-00-50-10   (hex)		NovaNET Learning, Inc.
-005010     (base 16)		NovaNET Learning, Inc.
-				125 W. CHURCH STREET-STE. #300
-				CHAMPAIGN  IL  61820
-				US
-
-00-50-9A   (hex)		TAG ELECTRONIC SYSTEMS
-00509A     (base 16)		TAG ELECTRONIC SYSTEMS
-				GENESIS BUSINESS PARK
-				WOKING, SURREY GU21 5RW    
-				GB
-
-00-50-22   (hex)		ZONET TECHNOLOGY, INC.
-005022     (base 16)		ZONET TECHNOLOGY, INC.
-				830 ROOM, BLDG. 53, 195, SEC.4
-				HSINCHA    
-				TW
-
-00-50-07   (hex)		SIEMENS TELECOMMUNICATION SYSTEMS LIMITED
-005007     (base 16)		SIEMENS TELECOMMUNICATION SYSTEMS LIMITED
-				NO. 90, SEC. 1, CHIEN KUO NORTH ROAD
-				TAIPEI    
-				TW
-
-00-50-40   (hex)		Panasonic Electric Works Co., Ltd.
-005040     (base 16)		Panasonic Electric Works Co., Ltd.
-				Tsu-Factory, 1668, Fujikata
-				Tsu-shi  Mie-ken  514-8555
-				JP
-
-00-50-1C   (hex)		JATOM SYSTEMS, INC.
-00501C     (base 16)		JATOM SYSTEMS, INC.
-				99 MICHAEL COWPLAND DRIVE
-				ONTARIO, K2M 1X3    
-				CA
-
-00-50-92   (hex)		Rigaku Corporation Osaka Plant
-005092     (base 16)		Rigaku Corporation Osaka Plant
-				14-8 AKAOJI-CHO
-				TAKATSUKI-SHI, OSAKA 569-1146    
-				JP
-
-00-50-7A   (hex)		XPEED, INC.
-00507A     (base 16)		XPEED, INC.
-				4699 OLD IRONSIDES DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-50-69   (hex)		PixStream Incorporated
-005069     (base 16)		PixStream Incorporated
-				180 COLUMBIA ST. W.
-				Ontario N2L 3L3    
-				CA
-
-00-50-68   (hex)		ELECTRONIC INDUSTRIES ASSOCIATION
-005068     (base 16)		ELECTRONIC INDUSTRIES ASSOCIATION
-				2500 WILSON BLVD.
-				ARLINGTON  VA  22201
-				US
-
-00-50-BC   (hex)		HAMMER STORAGE SOLUTIONS
-0050BC     (base 16)		HAMMER STORAGE SOLUTIONS
-				8450 CENTRAL AVENUE
-				NEWARK  CA  94560
-				US
-
-00-90-71   (hex)		Applied Innovation Inc.
-009071     (base 16)		Applied Innovation Inc.
-				5800 Innovation Drive
-				Dublin  OH  43016-3271
-				US
-
-00-50-EB   (hex)		ALPHA-TOP CORPORATION
-0050EB     (base 16)		ALPHA-TOP CORPORATION
-				19F., NO. 2, LANE 150
-				TAIPEI    
-				TW
-
-00-50-EF   (hex)		SPE Systemhaus GmbH
-0050EF     (base 16)		SPE Systemhaus GmbH
-				WALDSTRASSE 7
-				63150 HEUSENSTAMM    
-				DE
-
-00-50-98   (hex)		GLOBALOOP, LTD.
-005098     (base 16)		GLOBALOOP, LTD.
-				12 HASHARON ROAD
-				KFAR SABA 44269    
-				IL
-
-00-50-4F   (hex)		OLENCOM ELECTRONICS
-00504F     (base 16)		OLENCOM ELECTRONICS
-				SOLTAM INDUSTRIAL PARK
-				YOKNEAM 20692    
-				IL
-
-00-90-FF   (hex)		TELLUS TECHNOLOGY INC.
-0090FF     (base 16)		TELLUS TECHNOLOGY INC.
-				40990 ENCYCLOPEDIA CIR.
-				FREMONT  CA  94538-2470
-				US
-
-00-90-3E   (hex)		N.V. PHILIPS INDUSTRIAL ACTIVITIES
-00903E     (base 16)		N.V. PHILIPS INDUSTRIAL ACTIVITIES
-				
-				B-3001 LEUVEN    
-				BE
-
-00-90-BA   (hex)		VALID NETWORKS, INC.
-0090BA     (base 16)		VALID NETWORKS, INC.
-				6 CROMWELL #102
-				IRVINE  CA  92618
-				US
-
-00-90-18   (hex)		ITO ELECTRIC INDUSTRY CO, LTD.
-009018     (base 16)		ITO ELECTRIC INDUSTRY CO, LTD.
-				4-26-12 MEIEKI NAKAMURA-KU
-				NAGOYA-CITY AICHI 450-0002    
-				JP
-
-00-90-CD   (hex)		ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.
-0090CD     (base 16)		ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.
-				R. ENG FREDERICO ULRICH -  APARTADO 3081
-				Guardeiras - 4470 Moreira Maia    
-				PT
-
-00-90-FB   (hex)		PORTWELL, INC.
-0090FB     (base 16)		PORTWELL, INC.
-				7F-4, NO. 160, SEC. 6
-				TAIPEI    
-				TW
-
-00-90-94   (hex)		OSPREY TECHNOLOGIES, INC.
-009094     (base 16)		OSPREY TECHNOLOGIES, INC.
-				600 AIRPORT BLVD. - STE. #900
-				MORRISVILLE  NC  27560
-				US
-
-00-90-B3   (hex)		AGRANAT SYSTEMS
-0090B3     (base 16)		AGRANAT SYSTEMS
-				1345 MAIN STREET
-				WALTHAM  MA  02154
-				US
-
-00-90-3C   (hex)		ATLANTIC NETWORK SYSTEMS
-00903C     (base 16)		ATLANTIC NETWORK SYSTEMS
-				IMMEUBLE Kennedy
-				  33700 MERIGNAC  
-				FR
-
-00-90-5D   (hex)		NETCOM SICHERHEITSTECHNIK GMBH
-00905D     (base 16)		NETCOM SICHERHEITSTECHNIK GMBH
-				BOPPSTRASSE 38
-				    
-				DE
-
-00-90-D1   (hex)		LEICHU ENTERPRISE CO., LTD.
-0090D1     (base 16)		LEICHU ENTERPRISE CO., LTD.
-				8F, NO. 203, PA-TEH ROAD, SEC.2
-				    
-				TW
-
-00-90-46   (hex)		DEXDYNE, LTD.
-009046     (base 16)		DEXDYNE, LTD.
-				15 MARKET PL.
-				GLOCESTERSHIRE GL7 2PB    
-				GB
-
-00-90-DA   (hex)		DYNARC, INC.
-0090DA     (base 16)		DYNARC, INC.
-				1887 LANDINGS DRIVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-90-E0   (hex)		SYSTRAN CORP.
-0090E0     (base 16)		SYSTRAN CORP.
-				4126 LINDEN AVENUE
-				DAYTON  OH  45432
-				US
-
-00-90-D0   (hex)		Thomson Telecom Belgium
-0090D0     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				B-2650 EDEGEM    
-				BE
-
-00-90-9B   (hex)		MARKEM-IMAJE
-00909B     (base 16)		MARKEM-IMAJE
-				Frihamnen 16A
-				Gothenburg    417 55
-				SE
-
-00-90-22   (hex)		IVEX
-009022     (base 16)		IVEX
-				4295 INTERNATIONAL BLVD.
-				NORCROSS  GA  30093
-				US
-
-00-90-16   (hex)		ZAC
-009016     (base 16)		ZAC
-				Stüvestraße 9
-				D-31141 Hildesheim    
-				DE
-
-00-90-A7   (hex)		CLIENTEC CORPORATION
-0090A7     (base 16)		CLIENTEC CORPORATION
-				8175 S. VIRGINIA ST.
-				RENO  NV  89511
-				US
-
-00-90-53   (hex)		DAEWOO ELECTRONICS CO., LTD.
-009053     (base 16)		DAEWOO ELECTRONICS CO., LTD.
-				DIT RESEARCH CENTER
-				CHUNG-GU  SEOUL 100-714  
-				KR
-
-00-90-DC   (hex)		TECO INFORMATION SYSTEMS
-0090DC     (base 16)		TECO INFORMATION SYSTEMS
-				CO., LTD.
-				SAN JOSE  CA  95134
-				US
-
-00-90-E2   (hex)		DISTRIBUTED PROCESSING TECHNOLOGY
-0090E2     (base 16)		DISTRIBUTED PROCESSING TECHNOLOGY
-				140 CANDACE DRIVE
-				ORLANDO  FL  32751
-				US
-
-00-90-85   (hex)		GOLDEN ENTERPRISES, INC.
-009085     (base 16)		GOLDEN ENTERPRISES, INC.
-				4450 WEST EAU GALLIE BLVD.
-				MELBOURNE  FL  32934
-				US
-
-00-90-C7   (hex)		ICOM INC.
-0090C7     (base 16)		ICOM INC.
-				6-9-16 KAMIHIGASHI
-				HIRANO-KU, OSAKA    
-				JP
-
-00-90-35   (hex)		ALPHA TELECOM, INC.
-009035     (base 16)		ALPHA TELECOM, INC.
-				2F, NO.2, LI HSIN ROAD
-				HSIN-CHU    
-				TW
-
-00-90-0F   (hex)		KAWASAKI HEAVY INDUSTRIES, LTD
-00900F     (base 16)		KAWASAKI HEAVY INDUSTRIES, LTD
-				ELEC. & CONTROL TECH CENTER
-				    
-				JP
-
-00-90-EA   (hex)		ALPHA TECHNOLOGIES, INC.
-0090EA     (base 16)		ALPHA TECHNOLOGIES, INC.
-				3767 ALPHA WAY
-				BELLINGHAM  WA  98226
-				US
-
-00-90-77   (hex)		ADVANCED FIBRE COMMUNICATIONS
-009077     (base 16)		ADVANCED FIBRE COMMUNICATIONS
-				PO BOX #751239
-				PETALUMA  CA  94975
-				US
-
-00-90-99   (hex)		ALLIED TELESIS, K.K.
-009099     (base 16)		ALLIED TELESIS, K.K.
-				NO. 2  TOC BUILDING, 7-21-11Nishi-Gotand
-				Shinagawa-Ku  Tokyo 141  
-				JP
-
-00-10-AD   (hex)		SOFTRONICS USB, INC.
-0010AD     (base 16)		SOFTRONICS USB, INC.
-				5085 LIST DRIVE
-				COLORADO SPRINGS  CO  80919
-				US
-
-00-10-A7   (hex)		UNEX TECHNOLOGY CORPORATION
-0010A7     (base 16)		UNEX TECHNOLOGY CORPORATION
-				8F-5, #130, SZE WEI RD.,
-				HSINCHU    
-				TW
-
-00-10-D5   (hex)		IMASDE CANARIAS, S.A.
-0010D5     (base 16)		IMASDE CANARIAS, S.A.
-				URB. EL CEBADAL
-				35008 LAS PALMAS G.C.    
-				ES
-
-00-10-55   (hex)		FUJITSU MICROELECTRONICS, INC.
-001055     (base 16)		FUJITSU MICROELECTRONICS, INC.
-				3545 NORTH FIRST STREET
-				SAN JOSE  CA  95134-1806
-				US
-
-00-90-7A   (hex)		Spectralink, Inc
-00907A     (base 16)		Spectralink, Inc
-				2560 55th Street
-				BOULDER  CO  80301
-				US
-
-00-90-F0   (hex)		Harmonic Video Systems Ltd.
-0090F0     (base 16)		Harmonic Video Systems Ltd.
-				19 ALON HATAVOR STREET
-				CAESAREA  Industrial Park    38900
-				IL
-
-00-90-20   (hex)		PHILIPS ANALYTICAL X-RAY B.V.
-009020     (base 16)		PHILIPS ANALYTICAL X-RAY B.V.
-				LELYWEG 1
-				7602 EA ALMELO    
-				NL
-
-00-10-A3   (hex)		OMNITRONIX, INC.
-0010A3     (base 16)		OMNITRONIX, INC.
-				760 HARRISON STREET
-				SEATTLE  WA  98109
-				US
-
-00-90-5C   (hex)		EDMI
-00905C     (base 16)		EDMI
-				626 OLD GYMPIE ROAD
-				NARANGBA  QLD 4504  
-				AU
-
-00-90-E3   (hex)		AVEX ELECTRONICS INC.
-0090E3     (base 16)		AVEX ELECTRONICS INC.
-				4807 BRADFORD DRIVE
-				HUNTSVILLE  AL  35805
-				US
-
-00-90-A9   (hex)		WESTERN DIGITAL
-0090A9     (base 16)		WESTERN DIGITAL
-				1599 NORTH BROADWAY
-				ROCHESTER  MN  55906
-				US
-
-00-90-F3   (hex)		ASPECT COMMUNICATIONS
-0090F3     (base 16)		ASPECT COMMUNICATIONS
-				1310 Ridder Park Drive
-				San Jose  CA  95131-2313
-				US
-
-00-90-4F   (hex)		ABB POWER T&D COMPANY, INC.
-00904F     (base 16)		ABB POWER T&D COMPANY, INC.
-				7036 SNOWDRIFT ROAD
-				ALLENTOWN  PA  18106
-				US
-
-00-90-60   (hex)		SYSTEM CREATE CORP.
-009060     (base 16)		SYSTEM CREATE CORP.
-				3-13-6 YOSHIKAWA BLD.
-				TOKYO    
-				JP
-
-00-90-13   (hex)		SAMSAN CORP.
-009013     (base 16)		SAMSAN CORP.
-				ELECTRONICS & COMM DIVISION
-				Kangdong-Gu  Seoul 134-050  
-				KR
-
-00-10-52   (hex)		METTLER-TOLEDO (ALBSTADT) GMBH
-001052     (base 16)		METTLER-TOLEDO (ALBSTADT) GMBH
-				P.O. BOX 2 50
-				D-72423 ALBSTADT    
-				DE
-
-00-10-6B   (hex)		SONUS NETWORKS, INC.
-00106B     (base 16)		SONUS NETWORKS, INC.
-				5 CARLISLE ROAD
-				WESTFORD  MA  01886
-				US
-
-00-10-C3   (hex)		CSI-CONTROL SYSTEMS
-0010C3     (base 16)		CSI-CONTROL SYSTEMS
-				INTERNATIONAL
-				DALLAS  TX  75229
-				US
-
-00-90-55   (hex)		PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION
-009055     (base 16)		PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION
-				5500 BUSINESS PARK DRIVE
-				ROHNERT PARK  CA  94928
-				US
-
-00-10-DD   (hex)		ENABLE SEMICONDUCTOR, INC.
-0010DD     (base 16)		ENABLE SEMICONDUCTOR, INC.
-				1740 TECHNOLOGY DRIVE
-				SAN JOSE  CA  95110
-				US
-
-00-10-2D   (hex)		HITACHI SOFTWARE ENGINEERING
-00102D     (base 16)		HITACHI SOFTWARE ENGINEERING
-				5-79, ONOECHO, NAKA-KU
-				YOKOHAMA 231    
-				JP
-
-00-10-33   (hex)		ACCESSLAN COMMUNICATIONS, INC.
-001033     (base 16)		ACCESSLAN COMMUNICATIONS, INC.
-				44 AIRPORT PARKWAY
-				SAN JOSE  CA  95110
-				US
-
-00-10-12   (hex)		PROCESSOR SYSTEMS (I) PVT LTD
-001012     (base 16)		PROCESSOR SYSTEMS (I) PVT LTD
-				24 RICHMOND ROAD
-				BANGALORE 560 025    
-				IN
-
-00-10-15   (hex)		OOmon Inc.
-001015     (base 16)		OOmon Inc.
-				PO BOX 8241
-				COBURG  OR  97408
-				US
-
-00-10-78   (hex)		NUERA COMMUNICATIONS, INC.
-001078     (base 16)		NUERA COMMUNICATIONS, INC.
-				10445 PACIFIC CENTER COURT
-				SAN DIEGO  CA  92121
-				US
-
-00-10-4F   (hex)		Oracle Corporation 
-00104F     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-00-10-7A   (hex)		AmbiCom, Inc.
-00107A     (base 16)		AmbiCom, Inc.
-				2450 SCOTT BLVD., #305
-				SANTA CLARA  CA  95050
-				US
-
-00-10-B9   (hex)		MAXTOR CORP.
-0010B9     (base 16)		MAXTOR CORP.
-				2190 MILLER DRIVE
-				LONGMONT  CO  80501-6744
-				US
-
-00-10-5D   (hex)		Draeger Medical
-00105D     (base 16)		Draeger Medical
-				Moislinger Allee 53-55
-				Luebeck    D-23542
-				DE
-
-00-10-91   (hex)		NO WIRES NEEDED BV
-001091     (base 16)		NO WIRES NEEDED BV
-				P.O. BOX 343
-				3720 AH BILTHOVEN    
-				NL
-
-00-10-1B   (hex)		CORNET TECHNOLOGY, INC.
-00101B     (base 16)		CORNET TECHNOLOGY, INC.
-				7F-4, NO. 46 CHUNG SHAN N.ROAD
-				SEC. 2, TAIPEI    
-				TJ
-
-00-10-DC   (hex)		MICRO-STAR INTERNATIONAL CO., LTD.
-0010DC     (base 16)		MICRO-STAR INTERNATIONAL CO., LTD.
-				NO. 69, LI-DE ST., JUNG-HE CITY
-				Taipei Hsien    
-				TW
-
-00-10-0A   (hex)		WILLIAMS COMMUNICATIONS GROUP
-00100A     (base 16)		WILLIAMS COMMUNICATIONS GROUP
-				ADVANCED TECHNOLOGIES
-				TULSA  OK  74103
-				US
-
-00-10-32   (hex)		ALTA TECHNOLOGY
-001032     (base 16)		ALTA TECHNOLOGY
-				9500 SOUTH 500 WEST - STE #212
-				SANDY  UT  84070
-				US
-
-00-10-80   (hex)		METAWAVE COMMUNICATIONS
-001080     (base 16)		METAWAVE COMMUNICATIONS
-				8700 148TH AVENUE N.E.
-				REDMOND  WA  98052
-				US
-
-00-10-F4   (hex)		Vertical Communications
-0010F4     (base 16)		Vertical Communications
-				3979 Freedom Circle #400
-				Santa Clara  CA  95054-1247
-				US
-
-00-10-77   (hex)		SAF DRIVE SYSTEMS, LTD.
-001077     (base 16)		SAF DRIVE SYSTEMS, LTD.
-				88 ARDELT AVE.
-				KITCHENER, ONTARIO N2C 2C9    
-				CA
-
-00-10-B3   (hex)		NOKIA MULTIMEDIA TERMINALS
-0010B3     (base 16)		NOKIA MULTIMEDIA TERMINALS
-				NOKIA HOME COMMUNICATIONS
-				SE-583 35 LINKOPING    
-				SE
-
-00-10-1E   (hex)		MATSUSHITA ELECTRONIC INSTRUMENTS CORP.
-00101E     (base 16)		MATSUSHITA ELECTRONIC INSTRUMENTS CORP.
-				23-9 KIYOHARA INDUSTRIAL PARK
-				UTSUNOMIYA Tochigi 321-32    
-				JP
-
-00-10-4D   (hex)		SURTEC INDUSTRIES, INC.
-00104D     (base 16)		SURTEC INDUSTRIES, INC.
-				NO.11, ALLEY 16, LANE 337
-				TAIPEI    
-				TW
-
-00-10-51   (hex)		CMICRO CORPORATION
-001051     (base 16)		CMICRO CORPORATION
-				17-20-2 KAMINO-CHO
-				TAKAMATSU-SHI, KAGAWA 761    
-				JP
-
-00-10-37   (hex)		CYQ've Technology Co., Ltd.
-001037     (base 16)		CYQ've Technology Co., Ltd.
-				COSMO BLDG. 10F, NO.1-7
-				SHINJUKU-KU,  TOKYO 160    
-				JP
-
-00-E0-BB   (hex)		NBX CORPORATION
-00E0BB     (base 16)		NBX CORPORATION
-				100 BRICKSTONE SQUARE
-				ANDOVER  MA  01810
-				US
-
-00-E0-8A   (hex)		GEC AVERY, LTD.
-00E08A     (base 16)		GEC AVERY, LTD.
-				FOUNDRY LANE
-				WEST MIDLANDS, B66 2LP  England  
-				GB
-
-00-E0-86   (hex)		Emerson Network Power, Avocent Division
-00E086     (base 16)		Emerson Network Power, Avocent Division
-				4991 Corporate Drive
-				HUNTSVILLE  AL  35805
-				US
-
-00-E0-1B   (hex)		SPHERE COMMUNICATIONS, INC.
-00E01B     (base 16)		SPHERE COMMUNICATIONS, INC.
-				2 ENERGY DRIVE
-				LAKE BLUFF  IL  60044
-				US
-
-00-E0-59   (hex)		CONTROLLED ENVIRONMENTS, LTD.
-00E059     (base 16)		CONTROLLED ENVIRONMENTS, LTD.
-				590 BERRY STREET
-				WINNEPEG R3H OR9    
-				CA
-
-00-E0-C5   (hex)		BCOM ELECTRONICS INC.
-00E0C5     (base 16)		BCOM ELECTRONICS INC.
-				8 FL, NO. 64, AN HO ROAD, SEC. 2
-				TAIPEI    
-				TW
-
-00-E0-EE   (hex)		MAREL HF
-00E0EE     (base 16)		MAREL HF
-				Austurhraun 9
-				Gardabaer    210
-				IS
-
-00-E0-8E   (hex)		UTSTARCOM
-00E08E     (base 16)		UTSTARCOM
-				33 WOOD AVE. SOUTH
-				ISELIN  NJ  08830
-				US
-
-00-E0-3F   (hex)		JATON CORPORATION
-00E03F     (base 16)		JATON CORPORATION
-				556 SOUTH MILPITAS BLVD.
-				MILPITAS  CA  95035
-				US
-
-00-E0-D4   (hex)		EXCELLENT COMPUTER
-00E0D4     (base 16)		EXCELLENT COMPUTER
-				551, M.K.N. ROAD
-				ALANDUR, CHENNAI 600016    
-				IN
-
-00-E0-7F   (hex)		LOGISTISTEM s.r.l.
-00E07F     (base 16)		LOGISTISTEM s.r.l.
-				VIA PANCIATICHI 94/18
-				50127 FIRENZE    
-				IT
-
-00-E0-13   (hex)		EASTERN ELECTRONIC CO., LTD.
-00E013     (base 16)		EASTERN ELECTRONIC CO., LTD.
-				NO. 4, SHIN-LONG ROAD,
-				TAO-YUAN    
-				TW
-
-00-E0-FD   (hex)		A-TREND TECHNOLOGY CO., LTD.
-00E0FD     (base 16)		A-TREND TECHNOLOGY CO., LTD.
-				10F, NO. 75, HSIN TAI WU RD.,
-				TAIPEI HSIEN 221    
-				TJ
-
-00-E0-BD   (hex)		INTERFACE SYSTEMS, INC.
-00E0BD     (base 16)		INTERFACE SYSTEMS, INC.
-				5855 INTERFACE DRIVE
-				ANN ARBOR  MI  48103-9515
-				US
-
-00-E0-6E   (hex)		FAR SYSTEMS S.p.A.
-00E06E     (base 16)		FAR SYSTEMS S.p.A.
-				VIA F. ZENI 8
-				3868 ROVERETO (TN)    
-				IT
-
-00-E0-6D   (hex)		COMPUWARE CORPORATION
-00E06D     (base 16)		COMPUWARE CORPORATION
-				One Campus Martius
-				Detroit  MI  48226
-				US
-
-00-E0-EA   (hex)		INNOVAT COMMUNICATIONS, INC.
-00E0EA     (base 16)		INNOVAT COMMUNICATIONS, INC.
-				1257 N. PLANO ROAD
-				RICHARDSON  TX  75081
-				US
-
-00-E0-64   (hex)		SAMSUNG ELECTRONICS
-00E064     (base 16)		SAMSUNG ELECTRONICS
-				99 W. TASMAN DRIVE
-				SAN JOSE  CA  95134
-				US
-
-00-E0-C9   (hex)		AutomatedLogic Corporation
-00E0C9     (base 16)		AutomatedLogic Corporation
-				1150 ROBERTS BOULEVARD
-				KENNESAW  GA  30144-3618
-				US
-
-00-E0-38   (hex)		PROXIMA CORPORATION
-00E038     (base 16)		PROXIMA CORPORATION
-				9440 CARROLL PARK DRIVE
-				SAN DIEGO  CA  92121-2298
-				US
-
-00-E0-9C   (hex)		MII
-00E09C     (base 16)		MII
-				LE parc du MOULIN
-				F95650 PUISEUX-POTOISE    
-				FR
-
-00-E0-E9   (hex)		DATA LABS, INC.
-00E0E9     (base 16)		DATA LABS, INC.
-				444 NORTH FREDERICK AVE.
-				GAITHERSBURG  MD  20877
-				US
-
-00-E0-0C   (hex)		MOTOROLA
-00E00C     (base 16)		MOTOROLA
-				5401 N. BEACH ST.  S243
-				FT. WORTH  TX  76137
-				US
-
-00-E0-0A   (hex)		DIBA, INC.
-00E00A     (base 16)		DIBA, INC.
-				3355 EDISON WAY
-				MENLO PARK  CA  94025
-				US
-
-00-E0-C4   (hex)		HORNER ELECTRIC, INC.
-00E0C4     (base 16)		HORNER ELECTRIC, INC.
-				1521 E. WASHINGTON ST.
-				INDIANAPOLIS  IN  46201
-				US
-
-00-E0-69   (hex)		JAYCOR
-00E069     (base 16)		JAYCOR
-				9775 TOWNE CENTRE DRIVE
-				SAN DIEGO  CA  92121
-				US
-
-00-E0-A4   (hex)		ESAOTE S.p.A.
-00E0A4     (base 16)		ESAOTE S.p.A.
-				via di CACIOLLE, 15
-				50127 FLORENCE    
-				IT
-
-00-E0-DE   (hex)		DATAX NV
-00E0DE     (base 16)		DATAX NV
-				RINGLAAN 51
-				B-2600 BERCHEM    
-				BE
-
-00-E0-A5   (hex)		ComCore Semiconductor, Inc.
-00E0A5     (base 16)		ComCore Semiconductor, Inc.
-				4505 LAS VIRGENES, Suite 202
-				CALABASAS  CA  91302
-				US
-
-00-E0-15   (hex)		HEIWA CORPORATION
-00E015     (base 16)		HEIWA CORPORATION
-				2-3014-8, HIROSAWA-CHO
-				GUNMA PREF. 376    
-				JP
-
-00-E0-E8   (hex)		GRETACODER Data Systems AG
-00E0E8     (base 16)		GRETACODER Data Systems AG
-				ALTHARDSTRASSE  150
-				CH-8105 REGENSDORF    
-				CH
-
-00-E0-16   (hex)		RAPID CITY COMMUNICATIONS
-00E016     (base 16)		RAPID CITY COMMUNICATIONS
-				555 CLYDE AVE.
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-E0-05   (hex)		TECHNICAL CORP.
-00E005     (base 16)		TECHNICAL CORP.
-				22-6 MINAMI SENGENCHO
-				KANAGAWA    
-				JP
-
-00-E0-C1   (hex)		MEMOREX TELEX JAPAN, LTD.
-00E0C1     (base 16)		MEMOREX TELEX JAPAN, LTD.
-				YAESUGUCHI KAIKAN, 1-7-20
-				TOKYO 103    
-				JP
-
-00-E0-A9   (hex)		FUNAI ELECTRIC CO., LTD.
-00E0A9     (base 16)		FUNAI ELECTRIC CO., LTD.
-				7-1, NAKAGAITO 7-CHOME, DAITO
-				OSAKA  574    
-				JP
-
-00-E0-84   (hex)		COMPULITE R&D
-00E084     (base 16)		COMPULITE R&D
-				3 HAROSHET STR. NEW IND. ZONE
-				RAMAT-HASHARON 47279    
-				IL
-
-00-E0-96   (hex)		SHIMADZU CORPORATION
-00E096     (base 16)		SHIMADZU CORPORATION
-				1, NISHINOKYO-KUWABARACHO
-				NAKAGYO-KU, KYOTO 604    
-				US
-
-00-E0-17   (hex)		EXXACT GmbH
-00E017     (base 16)		EXXACT GmbH
-				RHEINSTRASE 7
-				D-41836 HUCKELHOVEN    
-				DE
-
-00-60-7F   (hex)		AURORA TECHNOLOGIES, INC.
-00607F     (base 16)		AURORA TECHNOLOGIES, INC.
-				176 SECOND AVENUE
-				WALTHAM  MA  02154
-				US
-
-00-E0-29   (hex)		STANDARD MICROSYSTEMS CORP.
-00E029     (base 16)		STANDARD MICROSYSTEMS CORP.
-				6 HUGHES
-				IRVINE  CA  92718
-				US
-
-00-60-74   (hex)		QSC LLC
-006074     (base 16)		QSC LLC
-				1675 MACARTHUR BLVD
-				COSTA MESA  CA  92626
-				US
-
-00-60-76   (hex)		SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS
-006076     (base 16)		SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS
-				825-M GREENBRIER CIRCLE
-				CHESAPEAKE  VA  23320
-				US
-
-00-60-A1   (hex)		VPNet, Inc.
-0060A1     (base 16)		VPNet, Inc.
-				555 N. MATHILDA AVE.,-STE #110
-				SUNNYVALE  CA  94086
-				US
-
-00-60-27   (hex)		Superior Modular Products
-006027     (base 16)		Superior Modular Products
-				General Technology Division
-				MELBOURNE  FL  32940
-				US
-
-00-60-BC   (hex)		KeunYoung Electronics & Communication Co., Ltd.
-0060BC     (base 16)		KeunYoung Electronics & Communication Co., Ltd.
-				325-76, DAEHEUNG-DONG, MAPO-GU,
-				SEOUL    
-				KR
-
-00-60-A5   (hex)		PERFORMANCE TELECOM CORP.
-0060A5     (base 16)		PERFORMANCE TELECOM CORP.
-				10 CARLSON ROAD
-				ROCHESTER  NY  14610-1021
-				US
-
-00-60-05   (hex)		FEEDBACK DATA LTD.
-006005     (base 16)		FEEDBACK DATA LTD.
-				PARK ROAD
-				EAST SUSSEX, TN6 2QR    
-				GB
-
-00-60-2E   (hex)		CYCLADES CORPORATION
-00602E     (base 16)		CYCLADES CORPORATION
-				41934 CHRISTY STREET
-				FREMONT  CA  94538
-				US
-
-00-60-B6   (hex)		LAND COMPUTER CO., LTD.
-0060B6     (base 16)		LAND COMPUTER CO., LTD.
-				7-4-17 NISHINAKAJIMA
-				YODOGAWAKU 532    
-				JP
-
-00-60-6C   (hex)		ARESCOM
-00606C     (base 16)		ARESCOM
-				2833 JUNCTION AVE. - STE #206
-				SAN JOSE  CA  95134
-				US
-
-00-60-E3   (hex)		ARBIN INSTRUMENTS
-0060E3     (base 16)		ARBIN INSTRUMENTS
-				3206 LONGMIRE DRIVE
-				COLLEGE STATION  TX  77845
-				US
-
-00-60-71   (hex)		MIDAS LAB, INC.
-006071     (base 16)		MIDAS LAB, INC.
-				4 KATAMACHI,
-				  TOKYO 160  
-				JP
-
-00-60-61   (hex)		WHISTLE COMMUNICATIONS CORP.
-006061     (base 16)		WHISTLE COMMUNICATIONS CORP.
-				110 MARSH DRIVE-STE #100
-				FOSTER CITY  CA  94404
-				US
-
-00-60-1B   (hex)		MESA ELECTRONICS
-00601B     (base 16)		MESA ELECTRONICS
-				1323 61ST STREET
-				EMERYVILLE  CA  94608-2117
-				US
-
-00-60-C5   (hex)		ANCOT CORP.
-0060C5     (base 16)		ANCOT CORP.
-				115 CONSTITUTION DR.
-				MENLO PARK  CA  94025
-				US
-
-00-60-A9   (hex)		GESYTEC MBH
-0060A9     (base 16)		GESYTEC MBH
-				PASCALSTRASSE 6
-				D 52076 AACHEN    
-				DE
-
-00-60-F2   (hex)		LASERGRAPHICS, INC.
-0060F2     (base 16)		LASERGRAPHICS, INC.
-				20 ADA
-				IRVINE  CA  92718
-				US
-
-00-60-C3   (hex)		NETVISION CORPORATION
-0060C3     (base 16)		NETVISION CORPORATION
-				MS# 1A
-				RONKONKOMA  NY  11779
-				US
-
-00-60-29   (hex)		CARY PERIPHERALS INC.
-006029     (base 16)		CARY PERIPHERALS INC.
-				190 COLONNADE ROAD S, UNIT 9
-				NEPEAN, ONTARIO K2E 7J5    
-				CA
-
-00-60-A8   (hex)		TIDOMAT AB
-0060A8     (base 16)		TIDOMAT AB
-				
-				S-12089 STOCKHOLM    
-				SE
-
-00-60-FC   (hex)		CONSERVATION THROUGH INNOVATION LTD.
-0060FC     (base 16)		CONSERVATION THROUGH INNOVATION LTD.
-				1040 WHIPPLE ST.- STE. #225
-				PRESCOTT  AZ  86301
-				US
-
-00-60-18   (hex)		STELLAR ONE CORPORATION
-006018     (base 16)		STELLAR ONE CORPORATION
-				500 108TH AVE. NE--STE. #2200
-				BELLEVUE  WA  98004
-				US
-
-00-60-0A   (hex)		SORD COMPUTER CORPORATION
-00600A     (base 16)		SORD COMPUTER CORPORATION
-				20-7, MASAGO 5-CHOME
-				CHIBA 261    
-				JP
-
-00-60-A4   (hex)		GEW Technologies (PTY)Ltd
-0060A4     (base 16)		GEW Technologies (PTY)Ltd
-				BOX 912-561
-				SILVERTON  0127    
-				ZA
-
-00-60-64   (hex)		NETCOMM LIMITED
-006064     (base 16)		NETCOMM LIMITED
-				PO BOX 379
-				NORTH RYDE, NSW, 2113    
-				AU
-
-00-60-F9   (hex)		DIAMOND LANE COMMUNICATIONS
-0060F9     (base 16)		DIAMOND LANE COMMUNICATIONS
-				1310 REDWOOD WAY - STE.
-				PETALUMA  CA  94954
-				US
-
-00-60-EA   (hex)		StreamLogic
-0060EA     (base 16)		StreamLogic
-				21329 NORDHOFF STREET
-				CHATSWORTH  CA  91311
-				US
-
-00-60-82   (hex)		NOVALINK TECHNOLOGIES, INC.
-006082     (base 16)		NOVALINK TECHNOLOGIES, INC.
-				48511 WARM SPRINGS BLVD. #208
-				FREMONT  CA  94539
-				US
-
-00-60-E7   (hex)		RANDATA
-0060E7     (base 16)		RANDATA
-				PO BOX 209
-				HAWTHORN  VIC  3122    
-				AU
-
-00-60-D9   (hex)		TRANSYS NETWORKS INC.
-0060D9     (base 16)		TRANSYS NETWORKS INC.
-				3403 GRIFFITH
-				ST. LAURENT, QUEBEC H4T 1W5    
-				CA
-
-00-60-1F   (hex)		STALLION TECHNOLOGIES
-00601F     (base 16)		STALLION TECHNOLOGIES
-				33 WOODSTOCK ROAD
-				TOOWONG Q-L-D- 4066    
-				AU
-
-00-60-54   (hex)		CONTROLWARE GMBH
-006054     (base 16)		CONTROLWARE GMBH
-				WALDSTRASSE 92
-				63128 DIETZENBACH    
-				DE
-
-00-60-C2   (hex)		MPL AG
-0060C2     (base 16)		MPL AG
-				Taefernstrasse 20
-				CH-5405  Daettwil  
-				CH
-
-00-60-D4   (hex)		ELDAT COMMUNICATION LTD.
-0060D4     (base 16)		ELDAT COMMUNICATION LTD.
-				10 HAKISHON STREET
-				BNEI-BRAK  51203    
-				IL
-
-00-A0-4E   (hex)		VOELKER TECHNOLOGIES, INC.
-00A04E     (base 16)		VOELKER TECHNOLOGIES, INC.
-				22 NEW BOSTON COURT
-				DANVILLE  CA  94526
-				US
-
-00-A0-5A   (hex)		KOFAX IMAGE PRODUCTS
-00A05A     (base 16)		KOFAX IMAGE PRODUCTS
-				3 JENNER STREET
-				IRVINE  CA  92718-3807
-				US
-
-00-A0-52   (hex)		STANILITE ELECTRONICS PTY. LTD
-00A052     (base 16)		STANILITE ELECTRONICS PTY. LTD
-				424, LANE COVE ROAD
-				NORTH RYDE NSW 2113    
-				AU
-
-00-A0-5E   (hex)		MYRIAD LOGIC INC.
-00A05E     (base 16)		MYRIAD LOGIC INC.
-				1109 SPRING STREET
-				SILVER SPRING  MD  20910
-				US
-
-00-A0-95   (hex)		ACACIA NETWORKS, INC.
-00A095     (base 16)		ACACIA NETWORKS, INC.
-				831 WOBURN STREET
-				WILMINGTON  MA  01887
-				US
-
-00-A0-53   (hex)		COMPACT DEVICES, INC.
-00A053     (base 16)		COMPACT DEVICES, INC.
-				16795 LARK AVENUE
-				LOS GATOS  CA  95030
-				US
-
-00-A0-69   (hex)		Symmetricom, Inc.
-00A069     (base 16)		Symmetricom, Inc.
-				3750 Westwind Blvd.
-				Santa Rosa  CA  95403
-				US
-
-00-A0-7A   (hex)		ADVANCED PERIPHERALS TECHNOLOGIES, INC.
-00A07A     (base 16)		ADVANCED PERIPHERALS TECHNOLOGIES, INC.
-				
-				FUJISAWA-SHI, KANAGAWA-KEN 251    
-				JP
-
-00-60-9B   (hex)		AstroNova, Inc
-00609B     (base 16)		AstroNova, Inc
-				600 EAST GREENWICH AVE.
-				WEST WARWICK  RI  02893
-				US
-
-00-60-DB   (hex)		NTP ELEKTRONIK A/S
-0060DB     (base 16)		NTP ELEKTRONIK A/S
-				KNAPHOLM 7
-				DK-2730 HERLEV    
-				DK
-
-00-60-52   (hex)		PERIPHERALS ENTERPRISE CO., Ltd.
-006052     (base 16)		PERIPHERALS ENTERPRISE CO., Ltd.
-				3F, NO.10, ALLEY 6, LANE 45
-				TAIPEI    
-				TW
-
-00-60-B2   (hex)		PROCESS CONTROL CORP.
-0060B2     (base 16)		PROCESS CONTROL CORP.
-				6875 MIMMS DRIVE
-				ATLANTA  GA  30340
-				US
-
-00-60-81   (hex)		TV/COM INTERNATIONAL
-006081     (base 16)		TV/COM INTERNATIONAL
-				16516 VIA ESPRILLO
-				SAN DIEGO  CA  92127
-				US
-
-00-A0-05   (hex)		DANIEL INSTRUMENTS, LTD.
-00A005     (base 16)		DANIEL INSTRUMENTS, LTD.
-				TROLLSTRASSE 33
-				CH-8400 WINTERTHUR    
-				CH
-
-00-A0-F2   (hex)		INFOTEK COMMUNICATIONS, INC.
-00A0F2     (base 16)		INFOTEK COMMUNICATIONS, INC.
-				111 ANZA BLVD., #203
-				BURLINGAME  CA  94010
-				US
-
-00-A0-DF   (hex)		STS TECHNOLOGIES, INC.
-00A0DF     (base 16)		STS TECHNOLOGIES, INC.
-				13765 ST. CHARLES ROCK RD.
-				BRIDGETON  MO  63044
-				US
-
-00-A0-94   (hex)		COMSAT CORPORATION
-00A094     (base 16)		COMSAT CORPORATION
-				22300 COMSAT DRIVE
-				CLARKSBURG  MD  20871-9475
-				US
-
-00-A0-EF   (hex)		LUCIDATA LTD.
-00A0EF     (base 16)		LUCIDATA LTD.
-				LUCIDATA HOUSE
-				GREAT SHELFORD  CAMBBRIDGE CB2 5HA  
-				GB
-
-00-A0-20   (hex)		CITICORP/TTI
-00A020     (base 16)		CITICORP/TTI
-				3100 OCEAN PARK BLVD.
-				SANTA MONICA  CA  90405
-				US
-
-00-A0-CE   (hex)		Ecessa
-00A0CE     (base 16)		Ecessa
-				2800 Campus Drive 
-				Plymouth  MN  55441
-				US
-
-00-A0-28   (hex)		CONNER PERIPHERALS
-00A028     (base 16)		CONNER PERIPHERALS
-				3061 ZANKER ROAD
-				SAN JOSE  CA  95134-2128
-				US
-
-00-A0-9E   (hex)		ICTV
-00A09E     (base 16)		ICTV
-				14600 WINCHESTER BLVD.
-				LOS GATOS  CA  95030
-				US
-
-00-A0-99   (hex)		K-NET LTD.
-00A099     (base 16)		K-NET LTD.
-				SADDLERS HOUSE
-				YATELEY, SURREY GU17 7RX    
-				GB
-
-00-A0-EC   (hex)		TRANSMITTON LTD.
-00A0EC     (base 16)		TRANSMITTON LTD.
-				SMISBY ROAD
-				LEICESTERSHIRE LE65 2UG    
-				GB
-
-00-A0-67   (hex)		NETWORK SERVICES GROUP
-00A067     (base 16)		NETWORK SERVICES GROUP
-				3421 COMMISSION COURT-STE #202
-				WOODBRIDGE  VA  22192
-				US
-
-00-A0-E0   (hex)		TENNYSON TECHNOLOGIES PTY LTD
-00A0E0     (base 16)		TENNYSON TECHNOLOGIES PTY LTD
-				14 BUSINESS PARK DRIVE
-				VICTORIA - 3168    
-				AU
-
-00-A0-FD   (hex)		SCITEX DIGITAL PRINTING, INC.
-00A0FD     (base 16)		SCITEX DIGITAL PRINTING, INC.
-				3100 RESEARCH BLVD.
-				DAYTON  OH  45420
-				US
-
-00-A0-0F   (hex)		Broadband Technologies
-00A00F     (base 16)		Broadband Technologies
-				P.O. Box 13737
-				Research Triangle Park,  NC  27709-3737
-				US
-
-00-A0-02   (hex)		LEEDS & NORTHRUP AUSTRALIA PTY LTD
-00A002     (base 16)		LEEDS & NORTHRUP AUSTRALIA PTY LTD
-				PO BOX 4009
-				EIGHT MILE PLAINS  QLD 4113    
-				AU
-
-00-A0-E4   (hex)		OPTIQUEST
-00A0E4     (base 16)		OPTIQUEST
-				20490 BUSINESS PARKWAY
-				WALNUT  CA  91789
-				US
-
-00-A0-EE   (hex)		NASHOBA NETWORKS
-00A0EE     (base 16)		NASHOBA NETWORKS
-				9-11 GOLDSMITH ST.
-				LITTLETON  MA  01460
-				US
-
-00-A0-C3   (hex)		UNICOMPUTER GMBH
-00A0C3     (base 16)		UNICOMPUTER GMBH
-				LIMBURGER STRASSE 48
-				    
-				DE
-
-00-A0-0A   (hex)		Airspan
-00A00A     (base 16)		Airspan
-				Unitronics Building, Arava Street, Airport City
-				    70100
-				IL
-
-00-A0-E7   (hex)		CENTRAL DATA CORPORATION
-00A0E7     (base 16)		CENTRAL DATA CORPORATION
-				1602 NEWTON DRIVE
-				CHAMPAIGN  IL  61821
-				US
-
-00-A0-80   (hex)		Tattile SRL 
-00A080     (base 16)		Tattile SRL 
-				4000 Executive Parkway
-				San Ramon  CA  94583
-				US
-
-00-A0-2B   (hex)		TRANSITIONS RESEARCH CORP.
-00A02B     (base 16)		TRANSITIONS RESEARCH CORP.
-				SHELTER ROCK LANE
-				DANBURY  CT  06810
-				US
-
-00-A0-E8   (hex)		REUTERS HOLDINGS PLC
-00A0E8     (base 16)		REUTERS HOLDINGS PLC
-				85, FLEET STREET
-				    ENGLAND
-				GB
-
-00-A0-08   (hex)		NETCORP
-00A008     (base 16)		NETCORP
-				8 PLACE OF COMMERCE--STE #200
-				CANADA  J4W  3H2
-				CA
-
-00-A0-50   (hex)		CYPRESS SEMICONDUCTOR
-00A050     (base 16)		CYPRESS SEMICONDUCTOR
-				198 Champion Ct
-				SAN JOSE  CA  95134
-				US
-
-00-A0-DD   (hex)		AZONIX CORPORATION
-00A0DD     (base 16)		AZONIX CORPORATION
-				900 MIDDLESEX TURNPIKE
-				BILLERICA  MA  01821
-				US
-
-00-A0-75   (hex)		MICRON TECHNOLOGY, INC.
-00A075     (base 16)		MICRON TECHNOLOGY, INC.
-				8000 S. Federal Way
-				Boise  ID  83707-0006
-				US
-
-00-A0-09   (hex)		WHITETREE NETWORK
-00A009     (base 16)		WHITETREE NETWORK
-				TECHNOLOGIES, INC.
-				PALO ALTO  CA  94306
-				US
-
-00-A0-0C   (hex)		KINGMAX TECHNOLOGY, INC.
-00A00C     (base 16)		KINGMAX TECHNOLOGY, INC.
-				2FL., NO. 4, LANE 902, SEC.2
-				    
-				TW
-
-00-A0-66   (hex)		ISA CO., LTD.
-00A066     (base 16)		ISA CO., LTD.
-				SHINJUKU LAMBDAX BLDG. 5F.,
-				    
-				JP
-
-00-A0-AB   (hex)		NETCS INFORMATIONSTECHNIK GMBH
-00A0AB     (base 16)		NETCS INFORMATIONSTECHNIK GMBH
-				KATHARINENSTRASSE 17-18
-				    
-				DE
-
-00-A0-D8   (hex)		SPECTRA - TEK
-00A0D8     (base 16)		SPECTRA - TEK
-				OUTGANG LANE
-				ENGLAND  Y018  FJA
-				GB
-
-00-A0-FA   (hex)		Marconi Communication GmbH
-00A0FA     (base 16)		Marconi Communication GmbH
-				Gerberstrasse 33
-				    
-				DE
-
-00-A0-CB   (hex)		ARK TELECOMMUNICATIONS, INC.
-00A0CB     (base 16)		ARK TELECOMMUNICATIONS, INC.
-				124 CARMEN LANE--SUITE
-				SANTA MARIA  CA  93454
-				US
-
-00-A0-34   (hex)		AXEL
-00A034     (base 16)		AXEL
-				16, AVENUE DU QUEBEC
-				    
-				FR
-
-00-A0-01   (hex)		DRS Signal Solutions
-00A001     (base 16)		DRS Signal Solutions
-				700 Quince Orchard Road
-				Gaithersburg  MD  20878-1794
-				US
-
-00-20-B2   (hex)		GKD Gesellschaft Fur Kommunikation Und Datentechnik
-0020B2     (base 16)		GKD Gesellschaft Fur Kommunikation Und Datentechnik
-				SAARBURGER RING 10-12
-				 68229 MANNHEIM    
-				DE
-
-00-20-52   (hex)		RAGULA SYSTEMS
-002052     (base 16)		RAGULA SYSTEMS
-				4540 S. JUPITER DRIVE
-				SALT LAKE CITY  UT  84124
-				US
-
-00-20-FC   (hex)		MATROX
-0020FC     (base 16)		MATROX
-				1055 ST. REGIS,
-				DORVAL, QUEBEC  H9P-2T4    
-				CA
-
-00-20-FE   (hex)		TOPWARE INC. / GRAND COMPUTER
-0020FE     (base 16)		TOPWARE INC. / GRAND COMPUTER
-				CORPORATION
-				TAIPEI    R.O.C.
-				TW
-
-00-20-73   (hex)		FUSION SYSTEMS CORPORATION
-002073     (base 16)		FUSION SYSTEMS CORPORATION
-				7600 STANDISH PLACE
-				ROCKVILLE  MD  20855
-				US
-
-00-20-35   (hex)		IBM Corp
-002035     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-A0-17   (hex)		J B M CORPORATION
-00A017     (base 16)		J B M CORPORATION
-				10-1, ARAMOTOSHIN MACHI
-				    577
-				JP
-
-00-A0-25   (hex)		REDCOM LABS INC.
-00A025     (base 16)		REDCOM LABS INC.
-				ONE REDCOM CENTER
-				VICTOR  NY  14564-0995
-				US
-
-00-A0-BB   (hex)		HILAN GMBH
-00A0BB     (base 16)		HILAN GMBH
-				HAID-UND-NEU-STRASSE 7
-				    
-				DE
-
-00-A0-91   (hex)		APPLICOM INTERNATIONAL
-00A091     (base 16)		APPLICOM INTERNATIONAL
-				43, RUE MAZAGRAN
-				    
-				FR
-
-00-A0-A5   (hex)		TEKNOR MICROSYSTEME, INC.
-00A0A5     (base 16)		TEKNOR MICROSYSTEME, INC.
-				616 CURE BOIVIN
-				    J7G 2A7
-				CA
-
-00-20-B7   (hex)		NAMAQUA COMPUTERWARE
-0020B7     (base 16)		NAMAQUA COMPUTERWARE
-				P.O. BOX 7155
-				    
-				ZA
-
-00-20-E3   (hex)		MCD KENCOM CORPORATION
-0020E3     (base 16)		MCD KENCOM CORPORATION
-				20950 CASTLE ROCK ROAD
-				LAGUNA BEACH  CA  92651-1115
-				US
-
-00-20-13   (hex)		DIVERSIFIED TECHNOLOGY, INC.
-002013     (base 16)		DIVERSIFIED TECHNOLOGY, INC.
-				112 E. STATE STREET
-				RIDGELAND  MS  39157
-				US
-
-00-20-AB   (hex)		MICRO INDUSTRIES CORP.
-0020AB     (base 16)		MICRO INDUSTRIES CORP.
-				8399 GREEN MEADOWS DR. N.
-				WESTERVILLE  OH  43081
-				US
-
-00-20-8D   (hex)		CMD TECHNOLOGY
-00208D     (base 16)		CMD TECHNOLOGY
-				1 VANDERBILT
-				IRVINE  CA  92718
-				US
-
-00-20-DD   (hex)		Cybertec Pty Ltd
-0020DD     (base 16)		Cybertec Pty Ltd
-				Unit 11, 41 Higginbotham Road
-				Gladesville  NSW  2111
-				AU
-
-00-20-E6   (hex)		LIDKOPING MACHINE TOOLS AB
-0020E6     (base 16)		LIDKOPING MACHINE TOOLS AB
-				BOX 910
-				    
-				SE
-
-00-20-86   (hex)		MICROTECH ELECTRONICS LIMITED
-002086     (base 16)		MICROTECH ELECTRONICS LIMITED
-				LANCASTER ROAD
-				    KINGDOM
-				GB
-
-00-20-23   (hex)		T.C. TECHNOLOGIES PTY. LTD
-002023     (base 16)		T.C. TECHNOLOGIES PTY. LTD
-				6/60 FAIRFORD RD.
-				    
-				AU
-
-00-A0-54   (hex)		Private
-00A054     (base 16)		Private
-
-00-20-5A   (hex)		COMPUTER IDENTICS
-00205A     (base 16)		COMPUTER IDENTICS
-				5 SHAWMUT ROAD
-				CANTON  MA  02021
-				US
-
-00-20-00   (hex)		LEXMARK INTERNATIONAL, INC.
-002000     (base 16)		LEXMARK INTERNATIONAL, INC.
-				740 NEW CIRCLE ROAD
-				LEXINGTON  KY  40550
-				US
-
-00-20-1D   (hex)		KATANA PRODUCTS
-00201D     (base 16)		KATANA PRODUCTS
-				THE STUDIO, QUARRY HILL BOX,
-				WILTSHIRE SN14 9HT    
-				GB
-
-00-20-03   (hex)		PIXEL POWER LTD.
-002003     (base 16)		PIXEL POWER LTD.
-				Unit 5 College Business Park
-				CAMBRIDGE    CB1 3HD
-				GB
-
-00-20-46   (hex)		CIPRICO, INC.
-002046     (base 16)		CIPRICO, INC.
-				2800 CAMPUS DRIVE--SUITE #60
-				PLYMOUTH  MN  55441
-				US
-
-00-20-9B   (hex)		ERSAT ELECTRONIC GMBH
-00209B     (base 16)		ERSAT ELECTRONIC GMBH
-				HAARBERGSTR. 61
-				    
-				DE
-
-00-20-1C   (hex)		EXCEL, INC.
-00201C     (base 16)		EXCEL, INC.
-				355 OLD PLYMOUTH ROAD
-				SAGAMORE BEACH  MA  02562
-				US
-
-00-20-7F   (hex)		KYOEI SANGYO CO., LTD.
-00207F     (base 16)		KYOEI SANGYO CO., LTD.
-				DIR. & GEN'L MGR.IND. SYSTEMS
-				    TOKYO
-				JP
-
-00-20-C9   (hex)		VICTRON BV
-0020C9     (base 16)		VICTRON BV
-				POB 31
-				  THE  
-				NL
-
-00-20-77   (hex)		KARDIOS SYSTEMS CORP.
-002077     (base 16)		KARDIOS SYSTEMS CORP.
-				26 N SUMMIT AVE.
-				GAITHERSBURG  MD  20877
-				US
-
-00-20-7A   (hex)		WiSE Communications, Inc.
-00207A     (base 16)		WiSE Communications, Inc.
-				130 KNOWLES DRIVE
-				LOS GATOS  CA  95030
-				US
-
-00-20-3E   (hex)		LogiCan Technologies, Inc.
-00203E     (base 16)		LogiCan Technologies, Inc.
-				150 KARL CLARK ROAD
-				EDMONTON, ALBERTA T6N 1E2    
-				CA
-
-00-20-58   (hex)		ALLIED SIGNAL INC.
-002058     (base 16)		ALLIED SIGNAL INC.
-				ROUTE 46
-				TETERBORO  NJ  07608
-				US
-
-00-20-E1   (hex)		ALAMAR ELECTRONICS
-0020E1     (base 16)		ALAMAR ELECTRONICS
-				489 DIVISION STREET
-				CAMPBELL  CA  95008
-				US
-
-00-20-26   (hex)		AMKLY SYSTEMS, INC.
-002026     (base 16)		AMKLY SYSTEMS, INC.
-				15801 ROCKFIELD BLVD., #P
-				IRVINE  CA  92718
-				US
-
-00-20-65   (hex)		SUPERNET NETWORKING INC.
-002065     (base 16)		SUPERNET NETWORKING INC.
-				16 TOZERET HA'ARETZ ST.
-				TEL-AVIV 67891    
-				IL
-
-00-20-2A   (hex)		N.V. DZINE
-00202A     (base 16)		N.V. DZINE
-				KONING LEOPOLD III LAAN 2
-				    
-				BE
-
-00-20-83   (hex)		PRESTICOM INCORPORATED
-002083     (base 16)		PRESTICOM INCORPORATED
-				3275, 1ST STREET, STE. #1
-				CANADA  J3Y  8Y6
-				CA
-
-00-20-19   (hex)		OHLER GMBH
-002019     (base 16)		OHLER GMBH
-				MAYBACHSTRASE 30
-				71332 WAIBLINGEN    
-				DE
-
-00-20-9E   (hex)		BROWN'S OPERATING SYSTEM SERVICES, LTD.
-00209E     (base 16)		BROWN'S OPERATING SYSTEM SERVICES, LTD.
-				ST. AGNES HOUSE, CRESSWELL PK,
-				BLACKHEATH, London SE3 9RD    
-				GB
-
-00-20-8E   (hex)		CHEVIN SOFTWARE ENG. LTD.
-00208E     (base 16)		CHEVIN SOFTWARE ENG. LTD.
-				2 BOROUGHGATE, OTLEY,
-				LS21 3AL  UNITED  KINGDOM
-				GB
-
-00-20-97   (hex)		APPLIED SIGNAL TECHNOLOGY
-002097     (base 16)		APPLIED SIGNAL TECHNOLOGY
-				160 SOBRANTE WAY
-				SUNNYVALE  CA  94086
-				US
-
-00-C0-0B   (hex)		NORCONTROL A.S.
-00C00B     (base 16)		NORCONTROL A.S.
-				P.O. BOX 1024
-				    
-				NO
-
-00-20-B0   (hex)		GATEWAY DEVICES, INC.
-0020B0     (base 16)		GATEWAY DEVICES, INC.
-				2440 STANWELL DRIVE
-				CONCORD  CA  94520
-				US
-
-00-20-5B   (hex)		Kentrox, LLC
-00205B     (base 16)		Kentrox, LLC
-				20010 NW Tanasbourne Dr.
-				Hillsboro  OR  97124
-				US
-
-00-20-F6   (hex)		NET TEK  AND KARLNET, INC.
-0020F6     (base 16)		NET TEK  AND KARLNET, INC.
-				LITTLE STREAMS
-				  UNITED  KINGDOM
-				GB
-
-00-20-C6   (hex)		NECTEC
-0020C6     (base 16)		NECTEC
-				RAMA VI ROAD
-				    
-				TH
-
-00-20-08   (hex)		CABLE & COMPUTER TECHNOLOGY
-002008     (base 16)		CABLE & COMPUTER TECHNOLOGY
-				1555 SO. SINCLAIR STREET
-				ANAHEIM  CA  92806
-				US
-
-00-20-D3   (hex)		OST (OUEST STANDARD TELEMATIQU
-0020D3     (base 16)		OST (OUEST STANDARD TELEMATIQU
-				RUE DU BAS VILLAGE
-				    
-				FR
-
-00-C0-0E   (hex)		PSITECH, INC.
-00C00E     (base 16)		PSITECH, INC.
-				18368 BANDILIER CIRCLE
-				FOUNTAIN VALLEY  CA  92708
-				US
-
-00-C0-31   (hex)		DESIGN RESEARCH SYSTEMS, INC.
-00C031     (base 16)		DESIGN RESEARCH SYSTEMS, INC.
-				925 E. EXECUTIVE PARK DR.
-				SALT LAKE CITY  UT  84117
-				US
-
-00-07-01   (hex)		RACAL-DATACOM
-000701     (base 16)		RACAL-DATACOM
-				LAN INTERNETWORKING DIVISION
-				BOXBOROUGH  MA  01719
-				US
-
-00-C0-9C   (hex)		HIOKI E.E. CORPORATION
-00C09C     (base 16)		HIOKI E.E. CORPORATION
-				81 Koizumi, Ueda, Nagano
-				Tokyo    386-1192
-				JP
-
-00-C0-AA   (hex)		SILICON VALLEY COMPUTER
-00C0AA     (base 16)		SILICON VALLEY COMPUTER
-				441 N. WHISMAN RD., BLDG.#13
-				MT. VIEW  CA  94043
-				US
-
-00-C0-66   (hex)		DOCUPOINT, INC.
-00C066     (base 16)		DOCUPOINT, INC.
-				2701 BAYVIEW DRIVE
-				FREMONT  CA  94538
-				US
-
-00-C0-2D   (hex)		FUJI PHOTO FILM CO., LTD.
-00C02D     (base 16)		FUJI PHOTO FILM CO., LTD.
-				798 MIYANODAI KAISEI-MACHI
-				    
-				JP
-
-00-C0-F2   (hex)		TRANSITION NETWORKS
-00C0F2     (base 16)		TRANSITION NETWORKS
-				10900 Red Circle Dr.
-				MInnetonka  MN  55343
-				US
-
-00-C0-BD   (hex)		INEX TECHNOLOGIES, INC.
-00C0BD     (base 16)		INEX TECHNOLOGIES, INC.
-				3350 SCOTT BLVD.
-				SANTA CLARA  CA  95054
-				US
-
-00-C0-88   (hex)		EKF ELEKTRONIK GMBH
-00C088     (base 16)		EKF ELEKTRONIK GMBH
-				PHILIPP-REIS-STR. 4
-				    
-				DE
-
-00-C0-11   (hex)		INTERACTIVE COMPUTING DEVICES
-00C011     (base 16)		INTERACTIVE COMPUTING DEVICES
-				1735 TECHNOLOGY DRIVE-STE #720
-				SAN JOSE  CA  95110
-				US
-
-00-C0-3E   (hex)		FA. GEBR. HELLER GMBH
-00C03E     (base 16)		FA. GEBR. HELLER GMBH
-				P.O. BOX 1428, DEP. EE7
-				    
-				DE
-
-00-C0-FD   (hex)		PROSUM
-00C0FD     (base 16)		PROSUM
-				12 RUE SADI-CARNOT
-				    
-				FR
-
-00-C0-14   (hex)		TELEMATICS CALABASAS INT'L,INC
-00C014     (base 16)		TELEMATICS CALABASAS INT'L,INC
-				26630 AGOURA ROAD
-				CALABASAS  CA  91302-1988
-				US
-
-00-AA-3C   (hex)		OLIVETTI TELECOM SPA (OLTECO)
-00AA3C     (base 16)		OLIVETTI TELECOM SPA (OLTECO)
-				10062 MILLER AVE.-STE.#204
-				CUPERTINO  CA  95014
-				US
-
-00-C0-C9   (hex)		ELSAG BAILEY PROCESS
-00C0C9     (base 16)		ELSAG BAILEY PROCESS
-				AUTOMATION
-				WICKLIFFE  OH  44092
-				US
-
-00-C0-48   (hex)		BAY TECHNICAL ASSOCIATES
-00C048     (base 16)		BAY TECHNICAL ASSOCIATES
-				200 N. SECOND STREET
-				BAY ST. LOUIS  MS  39520
-				US
-
-00-C0-76   (hex)		I-DATA INTERNATIONAL A-S
-00C076     (base 16)		I-DATA INTERNATIONAL A-S
-				35-43 VADSTRUPVEJ
-				    
-				DK
-
-00-C0-46   (hex)		Blue Chip Technology Ltd
-00C046     (base 16)		Blue Chip Technology Ltd
-				Chowley Oak Lane
-				Chester  Cheshire  CH3 9EX
-				GB
-
-00-C0-97   (hex)		ARCHIPEL SA
-00C097     (base 16)		ARCHIPEL SA
-				1 RUE DU BULLOZ
-				    
-				FR
-
-00-C0-04   (hex)		JAPAN BUSINESS COMPUTER CO.LTD
-00C004     (base 16)		JAPAN BUSINESS COMPUTER CO.LTD
-				1368 FUTOO-CHO, KOHOKU-KU
-				  222  
-				JP
-
-00-C0-60   (hex)		ID SCANDINAVIA AS
-00C060     (base 16)		ID SCANDINAVIA AS
-				P.O. BOX 4227
-				    
-				NO
-
-00-40-CC   (hex)		SILCOM MANUF'G TECHNOLOGY INC.
-0040CC     (base 16)		SILCOM MANUF'G TECHNOLOGY INC.
-				5620 TIMBERLEA BOULEVARD
-				CANADA  L4W  4M6
-				CA
-
-00-C0-9E   (hex)		CACHE COMPUTERS, INC.
-00C09E     (base 16)		CACHE COMPUTERS, INC.
-				46600 LANDING PARKWAY
-				FREMONT  CA  94538
-				US
-
-00-C0-AC   (hex)		GAMBIT COMPUTER COMMUNICATIONS
-00C0AC     (base 16)		GAMBIT COMPUTER COMMUNICATIONS
-				SOLTAM INDUSTRIAL PARK
-				    
-				IL
-
-00-C0-34   (hex)		TRANSACTION NETWORK
-00C034     (base 16)		TRANSACTION NETWORK
-				SERVICES, INC.
-				LANSING  MI  48910-8356
-				US
-
-00-C0-93   (hex)		ALTA RESEARCH CORP.
-00C093     (base 16)		ALTA RESEARCH CORP.
-				614 SOUTH FEDERAL HIGHWAY
-				DEERFIELD BEACH  FL  33441
-				US
-
-00-40-E7   (hex)		ARNOS INSTRUMENTS & COMPUTER
-0040E7     (base 16)		ARNOS INSTRUMENTS & COMPUTER
-				SYSTEMS (GROUP) CO., LTD.
-				TSUEN WAN  N.T.  
-				HK
-
-00-40-87   (hex)		UBITREX CORPORATION
-004087     (base 16)		UBITREX CORPORATION
-				19TH FLOOR, 155 CARLTON STREET
-				CANADA  R3C  3H8
-				CA
-
-00-40-07   (hex)		TELMAT INFORMATIQUE
-004007     (base 16)		TELMAT INFORMATIQUE
-				6 RUE DE L'INDUSTRIE
-				    
-				FR
-
-00-40-7B   (hex)		SCIENTIFIC ATLANTA
-00407B     (base 16)		SCIENTIFIC ATLANTA
-				Information Technology
-				Norcross  GA  30091-6850
-				US
-
-00-40-2C   (hex)		ISIS DISTRIBUTED SYSTEMS, INC.
-00402C     (base 16)		ISIS DISTRIBUTED SYSTEMS, INC.
-				111 SOUTH CAYUGA STREET
-				ITHACA  NY  14850
-				US
-
-00-C0-DF   (hex)		KYE Systems Corp.
-00C0DF     (base 16)		KYE Systems Corp.
-				No. 492 Sec 5, Chung Hsin Road
-				Taipei  Hsien  241
-				TW
-
-00-C0-F5   (hex)		METACOMP, INC.
-00C0F5     (base 16)		METACOMP, INC.
-				10989 VIA FRONTERA
-				SAN DIEGO  CA  92127
-				US
-
-00-C0-91   (hex)		JABIL CIRCUIT, INC.
-00C091     (base 16)		JABIL CIRCUIT, INC.
-				32275 MALLY ROAD
-				MADISON HEIGHTS  MI  48071
-				US
-
-00-C0-49   (hex)		U.S. ROBOTICS, INC.
-00C049     (base 16)		U.S. ROBOTICS, INC.
-				8100 NORTH MCCORMICK BLVD.
-				SKOKIE  IL  60076-2999
-				US
-
-00-C0-9D   (hex)		DISTRIBUTED SYSTEMS INT'L, INC
-00C09D     (base 16)		DISTRIBUTED SYSTEMS INT'L, INC
-				531 WEST ROOSEVLET RD, STE #2
-				WHEATON  IL  60187
-				US
-
-00-C0-E9   (hex)		OAK SOLUTIONS, LTD.
-00C0E9     (base 16)		OAK SOLUTIONS, LTD.
-				BROADWAY HOUSE
-				    ENGLAND
-				GB
-
-00-C0-C5   (hex)		SID INFORMATICA
-00C0C5     (base 16)		SID INFORMATICA
-				RUA DR. GERALDO CAMPOS MOREIRA
-				    
-				BR
-
-00-C0-51   (hex)		ADVANCED INTEGRATION RESEARCH
-00C051     (base 16)		ADVANCED INTEGRATION RESEARCH
-				2188 DEL FRANCO STREET
-				SAN JOSE  CA  95131
-				US
-
-00-C0-85   (hex)		ELECTRONICS FOR IMAGING, INC.
-00C085     (base 16)		ELECTRONICS FOR IMAGING, INC.
-				2855 CAMPUS DRIVE
-				SAN MATEO  CA  94403
-				US
-
-00-C0-B2   (hex)		NORAND CORPORATION
-00C0B2     (base 16)		NORAND CORPORATION
-				550 2ND STREET SE
-				CEDAR RAPIDS  IA  52401
-				US
-
-00-C0-54   (hex)		NETWORK PERIPHERALS, LTD.
-00C054     (base 16)		NETWORK PERIPHERALS, LTD.
-				4TH FLOOR, 17 BOWATER RD.
-				    ENGLAND
-				GB
-
-00-C0-22   (hex)		LASERMASTER TECHNOLOGIES, INC.
-00C022     (base 16)		LASERMASTER TECHNOLOGIES, INC.
-				7156 SHADY OAK ROAD
-				EDEN PRAIRIE  MN  55344
-				US
-
-00-C0-25   (hex)		DATAPRODUCTS CORPORATION
-00C025     (base 16)		DATAPRODUCTS CORPORATION
-				6219 DESOTO AVENUE
-				WOODLAND HILLS  CA  91365-0746
-				US
-
-00-40-CF   (hex)		STRAWBERRY TREE, INC.
-0040CF     (base 16)		STRAWBERRY TREE, INC.
-				160 SOUTH WOLFE ROAD
-				SUNNYVALE  CA  94086
-				US
-
-00-40-77   (hex)		MAXTON TECHNOLOGY CORPORATION
-004077     (base 16)		MAXTON TECHNOLOGY CORPORATION
-				4FK, 249, SEC. 3,
-				    TAIWAN
-				TW
-
-00-C0-2C   (hex)		CENTRUM COMMUNICATIONS, INC.
-00C02C     (base 16)		CENTRUM COMMUNICATIONS, INC.
-				2880 ZANKER ROAD-STE #108
-				SAN JOSE  CA  95134
-				US
-
-00-C0-FB   (hex)		ADVANCED TECHNOLOGY LABS
-00C0FB     (base 16)		ADVANCED TECHNOLOGY LABS
-				22100 BOTHELL HIGHWAY S.E.
-				BOTHELL  WA  98041-3003
-				US
-
-00-C0-2B   (hex)		GERLOFF GESELLSCHAFT FUR
-00C02B     (base 16)		GERLOFF GESELLSCHAFT FUR
-				ELEKRONISCHE SYSTEMENTWICKLUNG
-				    
-				DE
-
-00-40-74   (hex)		CABLE AND WIRELESS
-004074     (base 16)		CABLE AND WIRELESS
-				COMMUNICATIONS, INC.
-				VIENNA  VA  22182-3964
-				US
-
-00-40-B8   (hex)		IDEA ASSOCIATES
-0040B8     (base 16)		IDEA ASSOCIATES
-				29 DUNHAM ROAD
-				BILLERICA  MA  01821
-				US
-
-00-40-E8   (hex)		CHARLES RIVER DATA SYSTEMS,INC
-0040E8     (base 16)		CHARLES RIVER DATA SYSTEMS,INC
-				983 CONCORD STREET
-				FRAMINGHAM  MA  01701
-				US
-
-00-40-C0   (hex)		VISTA CONTROLS CORPORATION
-0040C0     (base 16)		VISTA CONTROLS CORPORATION
-				27825 FREMONT COURT
-				VALENCIA  CA  91355
-				US
-
-00-C0-A0   (hex)		ADVANCE MICRO RESEARCH, INC.
-00C0A0     (base 16)		ADVANCE MICRO RESEARCH, INC.
-				2045 CORPORATE COURT
-				SAN JOSE  CA  95131
-				US
-
-00-C0-10   (hex)		HIRAKAWA HEWTECH CORP.
-00C010     (base 16)		HIRAKAWA HEWTECH CORP.
-				7F, BLDG.B, OMORI BELLPORT
-				    
-				JP
-
-00-C0-37   (hex)		DYNATEM
-00C037     (base 16)		DYNATEM
-				15795 ROCKFIELD BLVD.
-				IRVINE  CA  92718
-				US
-
-00-40-83   (hex)		TDA INDUSTRIA DE PRODUTOS
-004083     (base 16)		TDA INDUSTRIA DE PRODUTOS
-				ELETRONICOS S.A.
-				    
-				BR
-
-00-40-5B   (hex)		FUNASSET LIMITED
-00405B     (base 16)		FUNASSET LIMITED
-				ORCHARDS, 14 TOWNSEND
-				  UNITED  KINGDOM
-				GB
-
-00-40-73   (hex)		BASS ASSOCIATES
-004073     (base 16)		BASS ASSOCIATES
-				435 TASSO STREET, STE. #325
-				PALO ALTO  CA  94301
-				US
-
-00-40-7D   (hex)		EXTENSION TECHNOLOGY CORP.
-00407D     (base 16)		EXTENSION TECHNOLOGY CORP.
-				30 HOLLIS STREET
-				FRAMINGHAM  MA  01701
-				US
-
-00-80-D7   (hex)		Fantum Engineering
-0080D7     (base 16)		Fantum Engineering
-				
-				Rockwall  TX  75087
-				US
-
-00-80-7A   (hex)		AITECH SYSTEMS LTD.
-00807A     (base 16)		AITECH SYSTEMS LTD.
-				3080 OLCOTT STREET
-				SANTA CLARA  CA  95054
-				US
-
-00-80-DC   (hex)		PICKER INTERNATIONAL
-0080DC     (base 16)		PICKER INTERNATIONAL
-				595 MINER ROAD
-				CLEVELAND  OH  44143
-				US
-
-00-40-4D   (hex)		TELECOMMUNICATIONS TECHNIQUES
-00404D     (base 16)		TELECOMMUNICATIONS TECHNIQUES
-				M/S
-				GERMANTOWN  MD  20876
-				US
-
-00-40-0D   (hex)		LANNET DATA COMMUNICATIONS,LTD
-00400D     (base 16)		LANNET DATA COMMUNICATIONS,LTD
-				ATIDIM TECHNOLOG'L PARK, BG.#3
-				    
-				IL
-
-00-40-19   (hex)		AEON SYSTEMS, INC.
-004019     (base 16)		AEON SYSTEMS, INC.
-				8401 WASHINGTON PLACE NE
-				ALBUQUERQUE  NM  87113
-				US
-
-00-40-BE   (hex)		BOEING DEFENSE & SPACE
-0040BE     (base 16)		BOEING DEFENSE & SPACE
-				P.O. BOX 3999
-				SEATTLE  WA  98124-2499
-				US
-
-00-40-6E   (hex)		COROLLARY, INC.
-00406E     (base 16)		COROLLARY, INC.
-				2802 KELVIN
-				IRVINE  CA  92714
-				US
-
-00-40-76   (hex)		Sun Conversion Technologies
-004076     (base 16)		Sun Conversion Technologies
-				100 Commerce Boulevard
-				Quakertown  PA  78951-2237
-				US
-
-00-40-22   (hex)		KLEVER COMPUTERS, INC.
-004022     (base 16)		KLEVER COMPUTERS, INC.
-				1028 W. MAUDE AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-40-BF   (hex)		CHANNEL SYSTEMS INTERN'L INC.
-0040BF     (base 16)		CHANNEL SYSTEMS INTERN'L INC.
-				93 SO. LA PATERA LANE
-				SANTA BARBARA  CA  93117
-				US
-
-00-40-1E   (hex)		ICC
-00401E     (base 16)		ICC
-				8230 MONTGOMERY ROAD
-				CINCINNATI  OH  45236
-				US
-
-00-40-9A   (hex)		NETWORK EXPRESS, INC.
-00409A     (base 16)		NETWORK EXPRESS, INC.
-				2200 GREEN ROAD - STE
-				ANN ARBOR  MI  48170
-				US
-
-00-40-94   (hex)		SHOGRAPHICS, INC.
-004094     (base 16)		SHOGRAPHICS, INC.
-				1890 N. SHORELINE BLVD.
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-40-55   (hex)		METRONIX GMBH
-004055     (base 16)		METRONIX GMBH
-				NEUE KNOCHENHAUERSTRAßE 5
-				  WEST  
-				DE
-
-00-40-27   (hex)		SMC MASSACHUSETTS, INC.
-004027     (base 16)		SMC MASSACHUSETTS, INC.
-				25 WALKERS BROOK DRIVE
-				READING  MA  01867
-				US
-
-00-40-8B   (hex)		RAYLAN CORPORATION
-00408B     (base 16)		RAYLAN CORPORATION
-				120 INDEPENDENCE DRIVE
-				MENLO PARK  CA  94025
-				US
-
-00-40-EF   (hex)		HYPERCOM, INC.
-0040EF     (base 16)		HYPERCOM, INC.
-				2851 WEST KATHLEEN ROAD
-				PHOENIX  AZ  85023
-				US
-
-00-40-93   (hex)		PAXDATA NETWORKS LTD.
-004093     (base 16)		PAXDATA NETWORKS LTD.
-				COMMUNICATIONS HOUSE,
-				    ENGLAND
-				GB
-
-00-40-85   (hex)		SAAB INSTRUMENTS AB
-004085     (base 16)		SAAB INSTRUMENTS AB
-				P.O. BOX 1017
-				    
-				SE
-
-00-40-23   (hex)		LOGIC CORPORATION
-004023     (base 16)		LOGIC CORPORATION
-				3-14-10 MEIJI-SEIMEI BUILDING
-				    
-				JP
-
-00-40-A4   (hex)		ROSE ELECTRONICS
-0040A4     (base 16)		ROSE ELECTRONICS
-				P.O. BOX 742571
-				HOUSTON  TX  77274-2571
-				US
-
-00-40-08   (hex)		A PLUS INFO CORPORATION
-004008     (base 16)		A PLUS INFO CORPORATION
-				5F, NO.2, LANE 235
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-40-B5   (hex)		VIDEO TECHNOLOGY COMPUTERS LTD
-0040B5     (base 16)		VIDEO TECHNOLOGY COMPUTERS LTD
-				33/F., BLOCK #1,
-				N.T.  HONG  KONG
-				HK
-
-00-40-12   (hex)		WINDATA, INC.
-004012     (base 16)		WINDATA, INC.
-				10 BEARFOOT ROAD
-				NORTHBORO  MA  01532
-				US
-
-00-40-D5   (hex)		Sartorius Mechatronics T&H GmbH 
-0040D5     (base 16)		Sartorius Mechatronics T&H GmbH 
-				WEENDER LANDSTR: 94 - 108
-				    
-				DE
-
-00-40-10   (hex)		SONIC SYSTEMS, INC.
-004010     (base 16)		SONIC SYSTEMS, INC.
-				575 PASTORIA NORTH AVENUE
-				SUNNYVALE  CA  940867
-				US
-
-00-40-CA   (hex)		FIRST INTERNAT'L COMPUTER, INC
-0040CA     (base 16)		FIRST INTERNAT'L COMPUTER, INC
-				FIC Building
-				Neihu  Taipei 114  Taipei 114
-				TW
-
-00-40-C4   (hex)		KINKEI SYSTEM CORPORATION
-0040C4     (base 16)		KINKEI SYSTEM CORPORATION
-				1-22-17, KAMIKITA, HIRANOKU
-				    
-				JP
-
-00-40-5D   (hex)		STAR-TEK, INC.
-00405D     (base 16)		STAR-TEK, INC.
-				71 LYMAN STREET
-				NORTHBORO  MA  01532
-				US
-
-00-40-E2   (hex)		MESA RIDGE TECHNOLOGIES, INC.
-0040E2     (base 16)		MESA RIDGE TECHNOLOGIES, INC.
-				6725 MESA RIDGE ROAD-STE#100
-				SAN DIEGO  CA  92121
-				US
-
-00-40-8C   (hex)		AXIS COMMUNICATIONS AB
-00408C     (base 16)		AXIS COMMUNICATIONS AB
-				SCHEELEVAGEN 16
-				    
-				SE
-
-00-40-45   (hex)		TWINHEAD CORPORATION
-004045     (base 16)		TWINHEAD CORPORATION
-				1537 CENTRE POINTE DRIVE
-				MILPITAS  CA  95035
-				US
-
-00-40-28   (hex)		NETCOMM LIMITED
-004028     (base 16)		NETCOMM LIMITED
-				3 OLYMPIC BUSINESS CENTRE
-				  UNITED  KINGDOM
-				GB
-
-00-40-DD   (hex)		HONG TECHNOLOGIES
-0040DD     (base 16)		HONG TECHNOLOGIES
-				532 WEDDELL DRIVE
-				SUNNYVALE  CA  94089
-				US
-
-00-40-CB   (hex)		LANWAN TECHNOLOGIES
-0040CB     (base 16)		LANWAN TECHNOLOGIES
-				1566 LA PRADERA DRIVE
-				CAMPBELL  CA  95008
-				US
-
-00-40-B2   (hex)		SYSTEMFORSCHUNG
-0040B2     (base 16)		SYSTEMFORSCHUNG
-				KONIGSTRASSE 33A
-				    
-				DE
-
-00-40-E6   (hex)		C.A.E.N.
-0040E6     (base 16)		C.A.E.N.
-				2, CHEMIN LATERAL
-				    
-				FR
-
-00-40-F0   (hex)		MicroBrain,Inc.
-0040F0     (base 16)		MicroBrain,Inc.
-				Yuzan Bldg. 4F,
-				Aichi-gun AICHI    480-1117
-				JP
-
-00-40-89   (hex)		MEIDENSHA CORPORATION
-004089     (base 16)		MEIDENSHA CORPORATION
-				FACTORY NO.4, 515 KAMINAKAMIZO
-				    
-				JP
-
-00-40-15   (hex)		ASCOM INFRASYS AG
-004015     (base 16)		ASCOM INFRASYS AG
-				DPT. EASO 3726
-				    
-				CH
-
-00-80-95   (hex)		BASIC MERTON HANDELSGES.M.B.H.
-008095     (base 16)		BASIC MERTON HANDELSGES.M.B.H.
-				DURCHLASS-STRASSE 42
-				    
-				AT
-
-00-80-AE   (hex)		HUGHES NETWORK SYSTEMS
-0080AE     (base 16)		HUGHES NETWORK SYSTEMS
-				11717 EXPLORATION LANE
-				GERMANTOWN  MD  20876
-				US
-
-00-80-3A   (hex)		VARITYPER, INC.
-00803A     (base 16)		VARITYPER, INC.
-				900 MIDDLESEX TURNPIKE
-				BILLERICA  MA  01821
-				US
-
-00-80-1C   (hex)		NEWPORT SYSTEMS SOLUTIONS
-00801C     (base 16)		NEWPORT SYSTEMS SOLUTIONS
-				4019 WESTERLY AVENUE
-				NEWPORT BEACH  CA  92660
-				US
-
-00-80-56   (hex)		SPHINX Electronics GmbH & Co KG
-008056     (base 16)		SPHINX Electronics GmbH & Co KG
-				Tullastr. 3
-				    
-				DE
-
-00-80-31   (hex)		BASYS, CORP.
-008031     (base 16)		BASYS, CORP.
-				501 MACARA AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-80-DB   (hex)		GRAPHON CORPORATION
-0080DB     (base 16)		GRAPHON CORPORATION
-				1506 DELL AVE - #
-				CAMPBELL  CA  95008-6911
-				VE
-
-00-80-82   (hex)		PEP MODULAR COMPUTERS GMBH
-008082     (base 16)		PEP MODULAR COMPUTERS GMBH
-				APFELSTRANGER STR. 16
-				  WEST  
-				DE
-
-00-80-39   (hex)		ALCATEL STC AUSTRALIA
-008039     (base 16)		ALCATEL STC AUSTRALIA
-				252-280 BOTANY ROAD
-				    
-				AU
-
-00-80-23   (hex)		INTEGRATED BUSINESS NETWORKS
-008023     (base 16)		INTEGRATED BUSINESS NETWORKS
-				1BN THE SYSTEMS CENTRE
-				BUCKS HP19 3XN  -  ENGLAND
-				GB
-
-00-80-6B   (hex)		SCHMID TELECOMMUNICATION
-00806B     (base 16)		SCHMID TELECOMMUNICATION
-				BINZSTRASSE 35,
-				    
-				CH
-
-00-80-59   (hex)		STANLEY ELECTRIC CO., LTD
-008059     (base 16)		STANLEY ELECTRIC CO., LTD
-				R&D LABORATORY
-				    
-				JP
-
-00-80-41   (hex)		VEB KOMBINAT ROBOTRON
-008041     (base 16)		VEB KOMBINAT ROBOTRON
-				GRUNAER STRAßE 2, DRESDEN 8010
-				GDR  EAST  
-				DE
-
-00-80-80   (hex)		DATAMEDIA CORPORATION
-008080     (base 16)		DATAMEDIA CORPORATION
-				7401 CENTRAL HIGHWAY
-				PENNSAUKEN  NJ  08109
-				US
-
-00-80-3F   (hex)		TATUNG COMPANY
-00803F     (base 16)		TATUNG COMPANY
-				22 CHUNGSHANG N. RD. 3RD SEC.
-				TAIPEI  TAIWAN  R.O.C.
-				TW
-
-00-80-E6   (hex)		PEER NETWORKS, INC.
-0080E6     (base 16)		PEER NETWORKS, INC.
-				3350 SCOTT BLVD. BLDG. 14
-				SANTA CLARA  CA  95054
-				US
-
-00-80-E0   (hex)		XTP SYSTEMS, INC.
-0080E0     (base 16)		XTP SYSTEMS, INC.
-				1900 STATE STREET , STE
-				SANTA BARBARA  CA  93101
-				US
-
-00-80-88   (hex)		VICTOR COMPANY OF JAPAN, LTD.
-008088     (base 16)		VICTOR COMPANY OF JAPAN, LTD.
-				58-7 SHINMEI-CHO, YOKOSUKA
-				    
-				JP
-
-00-80-D8   (hex)		NETWORK PERIPHERALS INC.
-0080D8     (base 16)		NETWORK PERIPHERALS INC.
-				2890 ZONKER ROAD SUITE 209
-				SAN JOSE  CA  95134
-				US
-
-00-80-9E   (hex)		DATUS GMBH
-00809E     (base 16)		DATUS GMBH
-				INDUSTRIESTR. 2
-				  WEST  
-				DE
-
-00-80-2B   (hex)		INTEGRATED MARKETING CO
-00802B     (base 16)		INTEGRATED MARKETING CO
-				1360 BORDEAUX DRIVE
-				SUNNYVALE  CA  94089
-				US
-
-00-80-01   (hex)		PERIPHONICS CORPORATION
-008001     (base 16)		PERIPHONICS CORPORATION
-				4000 VETERANS MEMORIAL HIGHWAY
-				BOHEMIA  NEW YORK  11716
-				US
-
-00-80-97   (hex)		CENTRALP AUTOMATISMES
-008097     (base 16)		CENTRALP AUTOMATISMES
-				21, RUE MARCEL PAGNOL 69694
-				    
-				FR
-
-00-80-71   (hex)		SAI TECHNOLOGY
-008071     (base 16)		SAI TECHNOLOGY
-				4224 CAMPUS POINT COURT
-				SAN DIEGO  CA  92121-1513
-				US
-
-00-80-98   (hex)		TDK CORPORATION
-008098     (base 16)		TDK CORPORATION
-				CORP. R&D DEPT. TECH. HDQTERS.
-				CHIBA-KEN  272,  
-				JP
-
-00-80-CA   (hex)		NETCOM RESEARCH INCORPORATED
-0080CA     (base 16)		NETCOM RESEARCH INCORPORATED
-				201 TECHNOLOGY DRIVE
-				IRVINE  CA  92718
-				US
-
-00-80-D5   (hex)		CADRE TECHNOLOGIES
-0080D5     (base 16)		CADRE TECHNOLOGIES
-				19545 NW VON NEUMANN DRIVE
-				BEAVERTON  OR  97006
-				VU
-
-00-80-1B   (hex)		KODIAK TECHNOLOGY
-00801B     (base 16)		KODIAK TECHNOLOGY
-				2340 HARRIS WAY
-				SAN JOSE  CA  95131
-				US
-
-00-80-D3   (hex)		SHIVA CORP.
-0080D3     (base 16)		SHIVA CORP.
-				205 BURLINGTON ROAD
-				BEDFORD  MA  01730
-				US
-
-00-80-B3   (hex)		AVAL DATA CORPORATION
-0080B3     (base 16)		AVAL DATA CORPORATION
-				MACHIDA ENGINEERING CENTER
-				    
-				JP
-
-00-80-20   (hex)		NETWORK PRODUCTS
-008020     (base 16)		NETWORK PRODUCTS
-				DIVISION OF ANDREW CORPORATION
-				TORRANCE  CA  90503
-				US
-
-00-80-70   (hex)		COMPUTADORAS MICRON
-008070     (base 16)		COMPUTADORAS MICRON
-				GUERRERO 2001 - 19
-				    
-				MX
-
-00-80-08   (hex)		DYNATECH COMPUTER SYSTEMS
-008008     (base 16)		DYNATECH COMPUTER SYSTEMS
-				280 BERNARDO AVENUE
-				MOUNTAIN VIEW  CA  94039-7400
-				US
-
-00-00-E4   (hex)		IN2 GROUPE INTERTECHNIQUE
-0000E4     (base 16)		IN2 GROUPE INTERTECHNIQUE
-				IN2 - B.P.63
-				    
-				FR
-
-00-80-13   (hex)		THOMAS-CONRAD CORPORATION
-008013     (base 16)		THOMAS-CONRAD CORPORATION
-				1908-R KRAMER LANE
-				AUSTIN  TX  78758
-				US
-
-00-80-6E   (hex)		NIPPON STEEL CORPORATION
-00806E     (base 16)		NIPPON STEEL CORPORATION
-				31-1 SHINKAWA 2-CHOUME
-				    
-				JP
-
-00-80-10   (hex)		COMMODORE INTERNATIONAL
-008010     (base 16)		COMMODORE INTERNATIONAL
-				1200 WILSON DRIVE
-				WEST CHESTER  PA  19380
-				US
-
-00-80-47   (hex)		IN-NET CORP.
-008047     (base 16)		IN-NET CORP.
-				16720 WEST BERNARDO DRIVE
-				SAN DIEGO  CA  92127-1904
-				US
-
-00-80-67   (hex)		SQUARE D COMPANY
-008067     (base 16)		SQUARE D COMPANY
-				4041 NORTH RICHARD STREET
-				MILWAUKEE  WI  53201
-				US
-
-00-80-45   (hex)		MATSUSHITA ELECTRIC IND. CO
-008045     (base 16)		MATSUSHITA ELECTRIC IND. CO
-				COMPUTER DIVISION
-				OSAKA  571  
-				JP
-
-00-80-BF   (hex)		TAKAOKA ELECTRIC MFG. CO. LTD.
-0080BF     (base 16)		TAKAOKA ELECTRIC MFG. CO. LTD.
-				KANDA BRANCH OFFICE TONEN
-				    
-				JP
-
-00-80-F9   (hex)		HEURIKON CORPORATION
-0080F9     (base 16)		HEURIKON CORPORATION
-				8310 EXCELSIOR DRIVE
-				MADISON  WI  53717
-				US
-
-00-80-A1   (hex)		MICROTEST, INC.
-0080A1     (base 16)		MICROTEST, INC.
-				4747 N. 22ND STREET
-				PHOENIX  AZ  85016-4708
-				US
-
-00-80-A9   (hex)		CLEARPOINT RESEARCH
-0080A9     (base 16)		CLEARPOINT RESEARCH
-				190 NORTH MAIN STREET
-				  NATICK  MA
-				US
-
-00-80-17   (hex)		PFU LIMITED
-008017     (base 16)		PFU LIMITED
-				Nu 98-2 Unoke
-				Kahoku-shi, Ishikawa    929-1192
-				JP
-
-00-80-F8   (hex)		MIZAR, INC.
-0080F8     (base 16)		MIZAR, INC.
-				1419 DUNN DRIVE
-				CARROLLTON  TX  75006
-				US
-
-00-00-14   (hex)		NETRONIX
-000014     (base 16)		NETRONIX
-				1372 MCDOWELL BLVD.
-				PETULAMA  CA  94952
-				US
-
-00-00-72   (hex)		MINIWARE TECHNOLOGY
-000072     (base 16)		MINIWARE TECHNOLOGY
-				BEEMDENSTRAAT 38
-				  THE  
-				NL
-
-00-00-A1   (hex)		MARQUETTE ELECTRIC CO.
-0000A1     (base 16)		MARQUETTE ELECTRIC CO.
-				8200 WEST TOWER AVENUE
-				MILWAUKEE  WI  53223
-				US
-
-00-00-F5   (hex)		DIAMOND SALES LIMITED
-0000F5     (base 16)		DIAMOND SALES LIMITED
-				17, CHARTERHOUSE STREET
-				  UNITED  KINGDOM
-				GB
-
-00-00-5C   (hex)		TELEMATICS INTERNATIONAL INC.
-00005C     (base 16)		TELEMATICS INTERNATIONAL INC.
-				1201 CYPRESS CREEK RD
-				FT. LAUDERDALE  FL  33309
-				US
-
-00-00-AC   (hex)		CONWARE COMPUTER CONSULTING
-0000AC     (base 16)		CONWARE COMPUTER CONSULTING
-				KILLISFELDSTRAßE 64
-				    
-				DE
-
-00-00-94   (hex)		ASANTE TECHNOLOGIES
-000094     (base 16)		ASANTE TECHNOLOGIES
-				821 FOX LANE
-				SAN JOSE  CA  95131
-				US
-
-00-00-90   (hex)		MICROCOM
-000090     (base 16)		MICROCOM
-				500 RIVER RIDGE DRIVE
-				NORWOOD  MA  02062-5028
-				US
-
-00-00-47   (hex)		NICOLET INSTRUMENTS CORP.
-000047     (base 16)		NICOLET INSTRUMENTS CORP.
-				5225 VERONA ROAD
-				MADISON  WI  53711
-				US
-
-00-00-21   (hex)		SUREMAN COMP. & COMMUN. CORP.
-000021     (base 16)		SUREMAN COMP. & COMMUN. CORP.
-				10F-5 NO. 7,  SEC. 3
-				TAIPEI  TAIWAN,  R.O.C.
-				TW
-
-00-00-30   (hex)		VG LABORATORY SYSTEMS LTD
-000030     (base 16)		VG LABORATORY SYSTEMS LTD
-				TRIBUNE AVENUE
-				    ENGLAND
-				GB
-
-00-00-35   (hex)		SPECTRAGRAPHICS CORPORATION
-000035     (base 16)		SPECTRAGRAPHICS CORPORATION
-				    OR
-				SAN DIEGO  CA  92121
-				US
-
-00-00-26   (hex)		SHA-KEN CO., LTD.
-000026     (base 16)		SHA-KEN CO., LTD.
-				MINAMI-OTSUKA
-				  TOKYO  
-				JP
-
-00-00-B6   (hex)		MICRO-MATIC RESEARCH
-0000B6     (base 16)		MICRO-MATIC RESEARCH
-				AMBACHTENLAAN  21 B5
-				    
-				BE
-
-00-00-82   (hex)		LECTRA SYSTEMES SA
-000082     (base 16)		LECTRA SYSTEMES SA
-				CHEMIN DE MARTICOT
-				    
-				FR
-
-00-00-2B   (hex)		CRISP AUTOMATION, INC
-00002B     (base 16)		CRISP AUTOMATION, INC
-				5160 BLAZER PARKWAY
-				DUBLIN  OH  43017
-				US
-
-00-00-51   (hex)		HOB ELECTRONIC GMBH & CO. KG
-000051     (base 16)		HOB ELECTRONIC GMBH & CO. KG
-				BRANDSSTATTER-STR.2-10
-				    
-				DE
-
-00-00-A7   (hex)		NETWORK COMPUTING DEVICES INC.
-0000A7     (base 16)		NETWORK COMPUTING DEVICES INC.
-				350 NORTH BERNARDO
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-00-98   (hex)		CROSSCOMM CORPORATION
-000098     (base 16)		CROSSCOMM CORPORATION
-				450 DONALD LYNCH BOULEVARD
-				MARLBOROUGH  MA  01752
-				US
-
-00-00-C6   (hex)		EON SYSTEMS
-0000C6     (base 16)		EON SYSTEMS
-				10601 SOUTH DEANZA BLVD.
-				CUPERTINO  CA  95014
-				US
-
-00-00-70   (hex)		HCL LIMITED
-000070     (base 16)		HCL LIMITED
-				RESEARCH & DEVELOPMENT UNIT
-				    
-				IN
-
-00-00-8F   (hex)		Raytheon
-00008F     (base 16)		Raytheon
-				M/S 1-1-1119
-				Marlboro  MA  01752
-				US
-
-00-00-F1   (hex)		MAGNA COMPUTER CORPORATION
-0000F1     (base 16)		MAGNA COMPUTER CORPORATION
-				22 KEEWAYDIN DRIVE
-				SALEM  NH  03079
-				US
-
-00-00-54   (hex)		Schneider Electric
-000054     (base 16)		Schneider Electric
-				35 rue Joseph Monier
-				    
-				FR
-
-00-00-20   (hex)		DATAINDUSTRIER DIAB AB
-000020     (base 16)		DATAINDUSTRIER DIAB AB
-				BOX 2029
-				    
-				SE
-
-00-00-7A   (hex)		DANA COMPUTER INC.
-00007A     (base 16)		DANA COMPUTER INC.
-				550 DEL REY AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-00-45   (hex)		FORD AEROSPACE & COMM. CORP.
-000045     (base 16)		FORD AEROSPACE & COMM. CORP.
-				COLORADO SPRINGS OPERATION
-				COLORADO SPRINGS  CO  80908
-				US
-
-00-00-9C   (hex)		ROLM MIL-SPEC COMPUTERS
-00009C     (base 16)		ROLM MIL-SPEC COMPUTERS
-				3151 ZANKER ROAD
-				SAN JOSE  CA  95148
-				US
-
-00-00-7C   (hex)		AMPERE INCORPORATED
-00007C     (base 16)		AMPERE INCORPORATED
-				SHINJUKU ASAHI BLDG.
-				  TOKYO  
-				JP
-
-00-00-68   (hex)		ROSEMOUNT CONTROLS
-000068     (base 16)		ROSEMOUNT CONTROLS
-				1300 E. LAMBERT ROAD
-				LA HABRA  CA  90632
-				US
-
-00-00-E9   (hex)		ISICAD, INC.
-0000E9     (base 16)		ISICAD, INC.
-				1920 WEST CORPORATE WAY
-				ANAHEIM  CA  92803-6122
-				US
-
-00-00-9F   (hex)		AMERISTAR TECHNOLOGIES INC.
-00009F     (base 16)		AMERISTAR TECHNOLOGIES INC.
-				47 WHITTIER AVE.
-				MEDFORD  NY  11763
-				US
-
-00-00-E3   (hex)		INTEGRATED MICRO PRODUCTS LTD
-0000E3     (base 16)		INTEGRATED MICRO PRODUCTS LTD
-				IMP, NO. 1 INDUSTRIAL ESTATE
-				ENGLAND  ENGLAND  DH86TJ
-				GB
-
-00-00-AD   (hex)		BRUKER INSTRUMENTS INC.
-0000AD     (base 16)		BRUKER INSTRUMENTS INC.
-				MANNING PARK
-				BILLERICA  MA  01821
-				US
-
-00-00-74   (hex)		RICOH COMPANY LTD.
-000074     (base 16)		RICOH COMPANY LTD.
-				2446 TODA, ATSUGI CITY
-				  243  
-				JP
-
-00-00-46   (hex)		OLIVETTI NORTH AMERICA
-000046     (base 16)		OLIVETTI NORTH AMERICA
-				E 22425 APPLEWAY
-				LIBERTY LAKE  WA  99019
-				US
-
-00-00-8D   (hex)		Cryptek Inc.
-00008D     (base 16)		Cryptek Inc.
-				1501 Moran Road
-				Sterling  VA  20166
-				US
-
-00-00-3B   (hex)		i Controls, Inc.
-00003B     (base 16)		i Controls, Inc.
-				12F Doonsan building, 105-7
-				  KOREA  135-714
-				KR
-
-00-00-B3   (hex)		CIMLINC INCORPORATED
-0000B3     (base 16)		CIMLINC INCORPORATED
-				1957 CROOKS ROAD
-				TROY  MI  48084
-				US
-
-00-00-D3   (hex)		WANG LABORATORIES INC.
-0000D3     (base 16)		WANG LABORATORIES INC.
-				
-				    
-				
-
-00-00-D0   (hex)		DEVELCON ELECTRONICS LTD.
-0000D0     (base 16)		DEVELCON ELECTRONICS LTD.
-				856-51ST STREET EAST
-				    
-				CA
-
-00-00-93   (hex)		PROTEON INC.
-000093     (base 16)		PROTEON INC.
-				4 TECH CIRCLE
-				NATICK  MA  01760
-				US
-
-00-00-8B   (hex)		INFOTRON
-00008B     (base 16)		INFOTRON
-				9 NORTH OLNEY
-				CHERRY HILL  NJ  08003
-				US
-
-08-00-57   (hex)		Evans & Sutherland
-080057     (base 16)		Evans & Sutherland
-				
-				Salt Lake City  UT  
-				US
-
-08-00-5D   (hex)		GOULD INC.
-08005D     (base 16)		GOULD INC.
-				6901 WEST SUNRISE BLVD.
-				FT. LAUDERDALE  FL  33310-9148
-				US
-
-08-00-5B   (hex)		VTA TECHNOLOGIES INC.
-08005B     (base 16)		VTA TECHNOLOGIES INC.
-				2040 SHERMAN STREET
-				HOLLYWOOD  FL  33020
-				US
-
-08-00-71   (hex)		MATRA (DSIE)
-080071     (base 16)		MATRA (DSIE)
-				PARC D'AFFAIRES - B.P. 262
-				    
-				FR
-
-08-00-6C   (hex)		SUNTEK TECHNOLOGY INT'L
-08006C     (base 16)		SUNTEK TECHNOLOGY INT'L
-				586 NO. FIRST STREET
-				SAN JOSE  CA  95112
-				US
-
-08-00-67   (hex)		ComDesign
-080067     (base 16)		ComDesign
-				
-				Goleta  CA  
-				US
-
-08-00-8C   (hex)		NETWORK RESEARCH CORPORATION
-08008C     (base 16)		NETWORK RESEARCH CORPORATION
-				2380 N. ROSE AVENUE
-				OXNARD  CA  93010
-				US
-
-08-00-81   (hex)		ASTECH INC.
-080081     (base 16)		ASTECH INC.
-				670 NORTH COMMERCIAL STREET
-				MANCHESTER  NH  03101
-				US
-
-08-00-2D   (hex)		LAN-TEC INC.
-08002D     (base 16)		LAN-TEC INC.
-				2131 UNIVERSITY AVENUE
-				BERKELEY  CA  94704
-				US
-
-00-DD-00   (hex)		UNGERMANN-BASS INC.
-00DD00     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-00-AA   (hex)		XEROX CORPORATION
-0000AA     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-04-0A-E0   (hex)		XMIT AG COMPUTER NETWORKS
-040AE0     (base 16)		XMIT AG COMPUTER NETWORKS
-				11 AVENUE DE BAUMETTES
-				    
-				CH
-
-08-00-11   (hex)		TEKTRONIX INC.
-080011     (base 16)		TEKTRONIX INC.
-				TECHNICAL STANDARDS
-				BEAVERTON  OR  97077
-				US
-
-08-00-26   (hex)		NORSK DATA A.S.
-080026     (base 16)		NORSK DATA A.S.
-				P.O. BOX 25 BOGERUD
-				    
-				NO
-
-08-00-25   (hex)		CONTROL DATA
-080025     (base 16)		CONTROL DATA
-				4201 LEXINGTON AVE NORTH
-				ARDEN HILLS  MN  55112
-				US
-
-10-00-00   (hex)		Private
-100000     (base 16)		Private
-
-00-00-D7   (hex)		DARTMOUTH COLLEGE
-0000D7     (base 16)		DARTMOUTH COLLEGE
-				KIEWIT COMPUTER CENTER
-				HANOVER  NH  03755
-				US
-
-AA-00-04   (hex)		DIGITAL EQUIPMENT CORPORATION
-AA0004     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				LKG 1-2/A19
-				LITTLETON  MA  01460-1289
-				US
-
-08-00-0C   (hex)		MIKLYN DEVELOPMENT CO.
-08000C     (base 16)		MIKLYN DEVELOPMENT CO.
-				3613 ANDOVER DIVE
-				BEDFORD  TX  76021
-				US
-
-00-DD-05   (hex)		UNGERMANN-BASS INC.
-00DD05     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-08-00-1D   (hex)		ABLE COMMUNICATIONS INC.
-08001D     (base 16)		ABLE COMMUNICATIONS INC.
-				17891 CARTWRIGHT ROAD
-				IRVINE  CA  92714-6216
-				US
-
-00-DD-0B   (hex)		UNGERMANN-BASS INC.
-00DD0B     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-08-00-03   (hex)		ADVANCED COMPUTER COMM.
-080003     (base 16)		ADVANCED COMPUTER COMM.
-				720 SANTA BARBARA ST.
-				SANTA BARBARA  CA  93101
-				US
-
-00-DD-03   (hex)		UNGERMANN-BASS INC.
-00DD03     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-DD-0F   (hex)		UNGERMANN-BASS INC.
-00DD0F     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-00-01   (hex)		XEROX CORPORATION
-000001     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-08-00-17   (hex)		NATIONAL SEMICONDUCTOR
-080017     (base 16)		NATIONAL SEMICONDUCTOR
-				2900 SEMICONDUCTOR DRIVE
-				SANTA CLARA  CA  95051
-				US
-
-54-21-60   (hex)		Alula
-542160     (base 16)		Alula
-				2340 Energy Park Drive
-				St. Paul  MN  55108
-				US
-
-10-B3-C6   (hex)		Cisco Systems, Inc
-10B3C6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-10-B3-D6   (hex)		Cisco Systems, Inc
-10B3D6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-96-30   (hex)		Technicolor CH USA Inc.
-589630     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-F8-54-B8   (hex)		Amazon Technologies Inc.
-F854B8     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-78-17-35   (hex)		Nokia Shanghai Bell Co., Ltd.
-781735     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-3C-89-4D   (hex)		Dr. Ing. h.c. F. Porsche AG
-3C894D     (base 16)		Dr. Ing. h.c. F. Porsche AG
-				Porscheplatz 1
-				Stuttgart    70435
-				DE
-
-84-C8-07   (hex)		ADVA Optical Networking Ltd.
-84C807     (base 16)		ADVA Optical Networking Ltd.
-				ADVAntage House
-				York    YO30 4RY
-				GB
-
-A0-AB-51   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-A0AB51     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-64-C9-01   (hex)		INVENTEC Corporation
-64C901     (base 16)		INVENTEC Corporation
-				No.66, Hougang St., Shilin Dist., Taipei City 111, Taiwan (R.O.C.)
-				Taipei    111
-				TW
-
-74-9E-F5   (hex)		Samsung Electronics Co.,Ltd
-749EF5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-68-BF-C4   (hex)		Samsung Electronics Co.,Ltd
-68BFC4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-5E-45   (hex)		ASUSTek COMPUTER INC.
-A85E45     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-04-B1-A1   (hex)		Samsung Electronics Co.,Ltd
-04B1A1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-46-4E   (hex)		Samsung Electronics Co.,Ltd
-CC464E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F8-89-3C   (hex)		Inventec Appliances Corp.
-F8893C     (base 16)		Inventec Appliances Corp.
-				37 Wugong 5th road, New Taipei Industrial Park,
-				New Taipei City  Wugu District  24890
-				TW
-
-A0-DF-15   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A0DF15     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-AD-34   (hex)		Routerboard.com
-C4AD34     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-30-6F-07   (hex)		Nations Technologies Inc.
-306F07     (base 16)		Nations Technologies Inc.
-				18F, Nations Tower, Nanshan District
-				Shenzhen    518057
-				CN
-
-24-74-F7   (hex)		GoPro
-2474F7     (base 16)		GoPro
-				3000 Clearview Way
-				San Mateo  CA  94402
-				US
-
-7C-D5-66   (hex)		Amazon Technologies Inc.
-7CD566     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-68-63-50   (hex)		Hella India Automotive Pvt Ltd
-686350     (base 16)		Hella India Automotive Pvt Ltd
-				Unit no 201A to 201B  Nano Space Surveyno.5/1B/2 BanerBaner Pashan Link road
-				Pune  Maharastra  411045
-				IN
-
-5C-E5-0C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-5CE50C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-18-70-3B   (hex)		Huawei Device Co., Ltd.
-18703B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D8-9E-61   (hex)		Huawei Device Co., Ltd.
-D89E61     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-34-7E-00   (hex)		Huawei Device Co., Ltd.
-347E00     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-30-92   (hex)		Kontron Electronics AG
-003092     (base 16)		Kontron Electronics AG
-				Riedstrasse 1
-				Rotkreuz    CH-6343
-				CH
-
-E8-5A-8B   (hex)		Xiaomi Communications Co Ltd
-E85A8B     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-44-22-95   (hex)		China Mobile Iot Limited company
-442295     (base 16)		China Mobile Iot Limited company
-				No. 8 Yangliu North Road, Yubei District, Chongqing, China
-				Chong Qing  Chong Qing  401120
-				CN
-
-5C-71-0D   (hex)		Cisco Systems, Inc
-5C710D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-00-AB-48   (hex)		eero inc.
-00AB48     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-F8-55-CD   (hex)		Visteon Corporation
-F855CD     (base 16)		Visteon Corporation
-				One Village Center Drive
-				Van Buren Twp  MI  48111
-				US
-
-44-18-47   (hex)		HUNAN SCROWN ELECTRONIC INFORMATION TECH.CO.,LTD
-441847     (base 16)		HUNAN SCROWN ELECTRONIC INFORMATION TECH.CO.,LTD
-				Building No.4,Changsha Zhongdian Software Park No.39,Jianshan Road
-				Changsha  Hunan  410006
-				CN
-
-1C-C1-BC   (hex)		Yichip Microelectronics (Hangzhou) Co.,Ltd
-1CC1BC     (base 16)		Yichip Microelectronics (Hangzhou) Co.,Ltd
-				Room 401, Building 15, No.498 Guoshoujing Road, Pudong Software Park
-				Shanghai    200120
-				CN
-
-AC-61-B9   (hex)		WAMA Technology Limited
-AC61B9     (base 16)		WAMA Technology Limited
-				Room 2205, Westley Square, 48 Hoi Yuen Road, Kwun Tong, Kowloon
-				Hong Kong    00000
-				HK
-
-C4-D8-F3   (hex)		iZotope
-C4D8F3     (base 16)		iZotope
-				60 Hampshire St
-				Cambridge  MA  02139
-				US
-
-00-30-56   (hex)		HMS Industrial Networks
-003056     (base 16)		HMS Industrial Networks
-				P O Box 4126
-				Halmstad  Halland  300 04
-				SE
-
-68-0A-E2   (hex)		Silicon Laboratories
-680AE2     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-AC-8B-9C   (hex)		Primera Technology, Inc.
-AC8B9C     (base 16)		Primera Technology, Inc.
-				2 Carlson Parkway N, Ste 375
-				Plymouth  MN  55447
-				US
-
-2C-3A-FD   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-2C3AFD     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-34-49-5B   (hex)		Sagemcom Broadband SAS
-34495B     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-C8-F3-19   (hex)		LG Electronics (Mobile Communications)
-C8F319     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-80-16-09   (hex)		Sleep Number
-801609     (base 16)		Sleep Number
-				1001 Third Avenue South
-				Minneapolis  MN  55404
-				US
-
-04-5E-A4   (hex)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
-045EA4     (base 16)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
-				Building 6, Baolong Plant, Able Technology Park, Longgang District
-				SHENZHEN    518116
-				CN
-
-1C-BF-C0   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-1CBFC0     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-78-B4-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-78B46A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-EB-B6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6CEBB6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-F5-5B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CF55B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-3F-67   (hex)		Huawei Device Co., Ltd.
-E83F67     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-34-46-EC   (hex)		Huawei Device Co., Ltd.
-3446EC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-31-39   (hex)		IEEE Registration Authority
-643139     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A4-4B-D5   (hex)		Xiaomi Communications Co Ltd
-A44BD5     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-64-95-6C   (hex)		LG Electronics
-64956C     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-14-87-6A   (hex)		Apple, Inc.
-14876A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-B5-5F   (hex)		Apple, Inc.
-E0B55F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-FF-C2   (hex)		Apple, Inc.
-F8FFC2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-EB-40   (hex)		Apple, Inc.
-E0EB40     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-69-4E   (hex)		Texas Instruments
-64694E     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-94-D6-DB   (hex)		NexFi
-94D6DB     (base 16)		NexFi
-				Room 417, Building 14, No. 498, Guoshoujing Road, Pudong New Area
-				Shanghai    201203
-				CN
-
-B4-EC-F2   (hex)		Shanghai Listent Medical Tech Co., Ltd.
-B4ECF2     (base 16)		Shanghai Listent Medical Tech Co., Ltd.
-				No. 668 Qingdai Road Pudong District
-				Shanghai  Shanghai  201318
-				CN
-
-40-77-A9   (hex)		New H3C Technologies Co., Ltd
-4077A9     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-F8-33-31   (hex)		Texas Instruments
-F83331     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-C4-95-4D   (hex)		IEEE Registration Authority
-C4954D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C4-98-78   (hex)		SHANGHAI MOAAN INTELLIGENT TECHNOLOGY CO.,LTD
-C49878     (base 16)		SHANGHAI MOAAN INTELLIGENT TECHNOLOGY CO.,LTD
-				BLOCK B, 4TH FLOOR, BUILDING 2, NO. 401 CAOBAO ROAD, XUHUI DISTRICT, SHANGHAI
-				SHANGHAI    200030
-				CN
-
-6C-63-9C   (hex)		ARRIS Group, Inc.
-6C639C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A4-BB-6D   (hex)		Dell Inc.
-A4BB6D     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-6C-06-D6   (hex)		Huawei Device Co., Ltd.
-6C06D6     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-0C-8E-29   (hex)		Arcadyan Corporation
-0C8E29     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-A0-22-4E   (hex)		IEEE Registration Authority
-A0224E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-30-27-CF   (hex)		Private
-3027CF     (base 16)		Private
-
-38-43-E5   (hex)		Grotech Inc
-3843E5     (base 16)		Grotech Inc
-				19, Ojeongongeop-gil
-				Uiwang-si  Gyeonggi-do  16072
-				KR
-
-CC-59-3E   (hex)		Sensium Healthcare Limited
-CC593E     (base 16)		Sensium Healthcare Limited
-				115 MILTON PARK
-				ABINGDON  OXFORDSHIRE  OX14 4SA
-				GB
-
-5C-68-D0   (hex)		Aurora Innovation Inc.
-5C68D0     (base 16)		Aurora Innovation Inc.
-				1880 Embarcadero Rd.
-				Palo Alto  CA  94303
-				US
-
-10-36-4A   (hex)		Boston Dynamics
-10364A     (base 16)		Boston Dynamics
-				78 4TH AVE
-				Waltham  MA  02451
-				US
-
-00-B8-10   (hex)		Yichip Microelectronics (Hangzhou) Co.,Ltd
-00B810     (base 16)		Yichip Microelectronics (Hangzhou) Co.,Ltd
-				Room 401, Building 15, No.498 Guoshoujing Road, Pudong Software Park
-				Shanghai    200120
-				CN
-
-A4-B2-39   (hex)		Cisco Systems, Inc
-A4B239     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1B-B0   (hex)		Bharat Electronics Limited
-001BB0     (base 16)		Bharat Electronics Limited
-				JALAHALLI POST
-				BANGALORE  KARNATAKA  560013
-				IN
-
-68-AF-FF   (hex)		Shanghai Cambricon Information Technology Co., Ltd.
-68AFFF     (base 16)		Shanghai Cambricon Information Technology Co., Ltd.
-				888 West Huanhu Road No.2, Nanhui New Town, Pudong New Area
-				Shanghai  Shanghai  200000
-				CN
-
-DC-21-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DC21E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-FC-1B-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC1BD1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-25-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-582575     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-DE-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-28DEE5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-1C-3C   (hex)		TECNO MOBILE LIMITED
-D01C3C     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-18-C0-4D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-18C04D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-8C-AA-B5   (hex)		Espressif Inc.
-8CAAB5     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-40-2C-76   (hex)		IEEE Registration Authority
-402C76     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-44-C7-FC   (hex)		Huawei Device Co., Ltd.
-44C7FC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-78-85-F4   (hex)		Huawei Device Co., Ltd.
-7885F4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F4-49-55   (hex)		MIMO TECH Co., Ltd.
-F44955     (base 16)		MIMO TECH Co., Ltd.
-				21F.-6, No. 7, Sec. 3, New Taipei Blvd., Xinzhuang Dist.,
-				New Taipei City  Taiwan  24250
-				TW
-
-08-09-C7   (hex)		Zhuhai Unitech Power Technology Co., Ltd.
-0809C7     (base 16)		Zhuhai Unitech Power Technology Co., Ltd.
-				102, Yinhua Road
-				Zhuhai  Guangdong  519000
-				CN
-
-88-54-1F   (hex)		Google, Inc.
-88541F     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-90-0C-C8   (hex)		Google, Inc.
-900CC8     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-04-1D-C7   (hex)		zte corporation
-041DC7     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-68-21-5F   (hex)		Edgecore Networks Corporation
-68215F     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-3C-28-A6   (hex)		Alcatel-Lucent Enterprise (China)
-3C28A6     (base 16)		Alcatel-Lucent Enterprise (China)
-				2/F, Building 1, No.60 Naxian Road,Pudong
-				Shanghai  Shanghai  201210
-				CN
-
-50-50-A4   (hex)		Samsung Electronics Co.,Ltd
-5050A4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-86-D9   (hex)		Samsung Electronics Co.,Ltd
-8086D9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F4-17-B8   (hex)		AirTies Wireless Networks
-F417B8     (base 16)		AirTies Wireless Networks
-				Esentepe Mah., Kore Şehitleri Cad.
-				Istanbul  Şişli  34360
-				TR
-
-3C-BF-60   (hex)		Apple, Inc.
-3CBF60     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-15-F4   (hex)		Apple, Inc.
-AC15F4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-6A-77   (hex)		Samsung Electronics Co.,Ltd
-386A77     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-14-59   (hex)		Vodafone Italia S.p.A.
-141459     (base 16)		Vodafone Italia S.p.A.
-				Via Lorenteggio nr. 240
-				Milan  Italy  20147
-				IT
-
-50-43-B9   (hex)		OktoInform RUS
-5043B9     (base 16)		OktoInform RUS
-				Bolshoy Tishinskiy pereulok, d. 26, korp.13-14, ofis 4R
-				Moscow    123557
-				RU
-
-5C-27-D4   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
-5C27D4     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
-				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
-				Shenzhen  Guangdong  518057
-				CN
-
-88-A4-79   (hex)		Apple, Inc.
-88A479     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-72-95   (hex)		Apple, Inc.
-047295     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-46-E1   (hex)		Apple, Inc.
-D446E1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-D1-62   (hex)		Apple, Inc.
-78D162     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-F8-BC   (hex)		Apple, Inc.
-08F8BC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-A2-5B   (hex)		Apple, Inc.
-90A25B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-30-0C   (hex)		Hisense Electric Co.,Ltd
-18300C     (base 16)		Hisense Electric Co.,Ltd
-				Qianwangang Roard 218
-				Qingdao  Shandong  266510
-				CN
-
-44-A5-6E   (hex)		NETGEAR
-44A56E     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-1C-91-9D   (hex)		Dongguan Liesheng Electronic Co., Ltd.
-1C919D     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
-				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
-				dongguan   guangdong  523000
-				CN
-
-FC-F2-9F   (hex)		China Mobile Iot Limited company
-FCF29F     (base 16)		China Mobile Iot Limited company
-				No. 8 Yangliu North Road, Yubei District, Chongqing, China
-				Chong Qing  Chong Qing  401120
-				CN
-
-F8-1F-32   (hex)		Motorola Mobility LLC, a Lenovo Company
-F81F32     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-B0-0A-D5   (hex)		zte corporation
-B00AD5     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-20-11-4E   (hex)		MeteRSit S.R.L.
-20114E     (base 16)		MeteRSit S.R.L.
-				Viale dell'Industria 31
-				Padova    35129
-				IT
-
-2C-57-41   (hex)		Cisco Systems, Inc
-2C5741     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A8-4D-4A   (hex)		Audiowise Technology Inc.
-A84D4A     (base 16)		Audiowise Technology Inc.
-				2F, No 1-1, Innovation RD I, Hsinchu Science Park
-				Hsincu  Taiwan  30076
-				TW
-
-78-94-E8   (hex)		Radio Bridge
-7894E8     (base 16)		Radio Bridge
-				8601 73rd Ave N, Suite 38
-				Brooklyn Park  MN  55428
-				US
-
-48-4E-FC   (hex)		ARRIS Group, Inc.
-484EFC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-B0-B3-53   (hex)		IEEE Registration Authority
-B0B353     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-54-7F-BC   (hex)		iodyne
-547FBC     (base 16)		iodyne
-				35 Miller Ave #175
-				Mill Valley  CA  94941
-				US
-
-7C-DF-A1   (hex)		Espressif Inc.
-7CDFA1     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-98-00-6A   (hex)		zte corporation
-98006A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-26-74   (hex)		Hunter Douglas
-002674     (base 16)		Hunter Douglas
-				One Duette Way
-				Broomfield  CO  80020
-				US
-
-1C-97-C5   (hex)		Ynomia Pty Ltd
-1C97C5     (base 16)		Ynomia Pty Ltd
-				153 Tooronga Rd
-				Glen Iris    3146
-				AU
-
-5C-C1-D7   (hex)		Samsung Electronics Co.,Ltd
-5CC1D7     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-38-01-46   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-380146     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-88-96-55   (hex)		Zitte corporation
-889655     (base 16)		Zitte corporation
-				4F Yokohama Kusunoki-cho Building,4-7 Kusunoki-cho,Nishi-ku
-				Yokohama  Kanagawa  2200003
-				JP
-
-F4-A4-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4A4D6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-FC-E1-4F   (hex)		BRK Brands, Inc.
-FCE14F     (base 16)		BRK Brands, Inc.
-				3901 Liberty Street
-				Aurora  IL  60504
-				US
-
-74-B6-B6   (hex)		eero inc.
-74B6B6     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-EC-97-B2   (hex)		SUMEC Machinery & Electric Co.,Ltd.
-EC97B2     (base 16)		SUMEC Machinery & Electric Co.,Ltd.
-				198# ChangJiang Road, XuanWu District, 17F, SUMEC Building
-				Nanjing  JiangSu  210018
-				CN
-
-28-FA-7A   (hex)		Zhejiang Tmall Technology Co., Ltd.
-28FA7A     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-84-2E-14   (hex)		Silicon Laboratories
-842E14     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-10-05-E1   (hex)		Nokia
-1005E1     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-08-F4-58   (hex)		Huawei Device Co., Ltd.
-08F458     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-5C-BA-2C   (hex)		Hewlett Packard Enterprise
-5CBA2C     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-34-37-94   (hex)		Hamee Corp.
-343794     (base 16)		Hamee Corp.
-				Square O2 2-12-10 Sakae-cho
-				Odawara  Kanagawa  250-0011
-				JP
-
-EC-31-6D   (hex)		Hansgrohe
-EC316D     (base 16)		Hansgrohe
-				Auestraße 5-9
-				Schiltach    77761
-				DE
-
-44-10-FE   (hex)		Huizhou Foryou General Electronics Co., Ltd.
-4410FE     (base 16)		Huizhou Foryou General Electronics Co., Ltd.
-				North Shangxia Road, Dongjiang Hi-tech Industry Park
-				Huizhou  Guangdong  516000
-				CN
-
-7C-AB-60   (hex)		Apple, Inc.
-7CAB60     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-C6-5D   (hex)		Apple, Inc.
-44C65D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-7E-B9   (hex)		Apple, Inc.
-187EB9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-A6-4D   (hex)		Cisco Systems, Inc
-4CA64D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-CC-7F-75   (hex)		Cisco Systems, Inc
-CC7F75     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-E8-74   (hex)		Apple, Inc.
-20E874     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-3F-AA   (hex)		Apple, Inc.
-D03FAA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-B9-37   (hex)		Ubee Interactive Co., Limited
-0CB937     (base 16)		Ubee Interactive Co., Limited
-				Flat/RM 1202, 12/F, AT Tower 
-				North Point  Hong Kong  180
-				HK
-
-D4-DC-09   (hex)		Mist Systems, Inc.
-D4DC09     (base 16)		Mist Systems, Inc.
-				1601 South De Anza Blvd, Suite 248
-				Cupertino  CA  95014
-				US
-
-00-88-BA   (hex)		NC&C
-0088BA     (base 16)		NC&C
-				Gurogu
-				Seoul    08390
-				KR
-
-F4-73-35   (hex)		Logitech Far East
-F47335     (base 16)		Logitech Far East
-				#2 Creation Rd. 4,
-				Hsinchu    300
-				TW
-
-90-AD-FC   (hex)		Telechips, Inc.
-90ADFC     (base 16)		Telechips, Inc.
-				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
-				Seoul  Seoul  05510
-				KR
-
-5C-A6-2D   (hex)		Cisco Systems, Inc
-5CA62D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-40-2B-69   (hex)		Kumho Electric Inc.
-402B69     (base 16)		Kumho Electric Inc.
-				309, Bongmu-ro, Namsa-myeon, Cheoin-gu
-				Yongin-si  Gyeonggi-do  17118
-				KR
-
-E8-E9-8E   (hex)		SOLAR controls s.r.o.
-E8E98E     (base 16)		SOLAR controls s.r.o.
-				Brojova 25
-				Plzen    32600
-				CZ
-
-64-F6-BB   (hex)		Fibocom Wireless Inc.
-64F6BB     (base 16)		Fibocom Wireless Inc.
-				5/F,TowerA,Technology Building 2,1057 Nanhai Blvd, Nanshan
-				Shenzhen  518000  Guangdong
-				CN
-
-BC-16-95   (hex)		zte corporation
-BC1695     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-DC-35-F1   (hex)		Positivo Tecnologia S.A.
-DC35F1     (base 16)		Positivo Tecnologia S.A.
-				João Bettega, 5200
-				Curitiba  Paraná  81350-000
-				BR
-
-A4-08-01   (hex)		Amazon Technologies Inc.
-A40801     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-AC-1E-D0   (hex)		Temic Automotive Philippines Inc.
-AC1ED0     (base 16)		Temic Automotive Philippines Inc.
-				Bagsakan Road, FTI estate
-				Taguig    1630
-				PH
-
-2C-EA-7F   (hex)		Dell Inc.
-2CEA7F     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-34-51-80   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-345180     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-				10F, TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan District
-				Shenzhen  Guangdong  518052
-				CN
-
-A4-CF-D2   (hex)		Ubee Interactive Co., Limited
-A4CFD2     (base 16)		Ubee Interactive Co., Limited
-				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
-				North Point    00000
-				HK
-
-A8-A0-97   (hex)		ScioTeq bvba
-A8A097     (base 16)		ScioTeq bvba
-				President Kennedypark 35A
-				Kortrijk    8500
-				BE
-
-08-6B-D1   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-086BD1     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-AC-3A-67   (hex)		Cisco Systems, Inc
-AC3A67     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-3C-B5-3D   (hex)		HUNAN GOKE MICROELECTRONICS CO.,LTD
-3CB53D     (base 16)		HUNAN GOKE MICROELECTRONICS CO.,LTD
-				No.9, East 10th Road(South), Xingsha, Changsha
-				Changsha  HUNAN  410131 
-				CN
-
-98-0D-51   (hex)		Huawei Device Co., Ltd.
-980D51     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-AD-D5   (hex)		Huawei Device Co., Ltd.
-00ADD5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-90-5D-7C   (hex)		New H3C Technologies Co., Ltd
-905D7C     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-98-FA-A7   (hex)		INNONET
-98FAA7     (base 16)		INNONET
-				C-417, Munjeong Hyundai Knowledge Industry Center, Beobwon-ro 11-gil-7
-				Songpa-gu  Seoul  05836
-				KR
-
-48-7B-5E   (hex)		SMT TELECOMM HK
-487B5E     (base 16)		SMT TELECOMM HK
-				Unit C 8/F Charmhill Centre 50 Hillwood RD.
-				Tsim Sha Tsui  Kowloon  999077
-				HK
-
-B8-E3-B1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B8E3B1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-B7-A8   (hex)		Heinzinger electronic GmbH
-00B7A8     (base 16)		Heinzinger electronic GmbH
-				Anton Jakob Str.4
-				Rosenheim  BY  83026
-				DE
-
-EC-79-49   (hex)		FUJITSU LIMITED
-EC7949     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-D4-D2-D6   (hex)		FN-LINK TECHNOLOGY LIMITED
-D4D2D6     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-10-50-72   (hex)		Sercomm Corporation.
-105072     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-90-0A-84   (hex)		Mellanox Technologies, Inc.
-900A84     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-AC-4A-67   (hex)		Cisco Systems, Inc
-AC4A67     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-70-CA-97   (hex)		Ruckus Wireless
-70CA97     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-00-09-91   (hex)		Intelligent Platforms, LLC.
-000991     (base 16)		Intelligent Platforms, LLC.
-				2500 Austin Drive
-				Charlottesville  VA  22911
-				US
-
-C8-66-5D   (hex)		Extreme Networks, Inc.
-C8665D     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-E0-1C-41   (hex)		Extreme Networks, Inc.
-E01C41     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-D8-54-A2   (hex)		Extreme Networks, Inc.
-D854A2     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-08-66-1F   (hex)		Palo Alto Networks
-08661F     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-BC-F3-10   (hex)		Extreme Networks, Inc.
-BCF310     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-28-54-71   (hex)		Huawei Device Co., Ltd.
-285471     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B8-8E-82   (hex)		Huawei Device Co., Ltd.
-B88E82     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-33-3D   (hex)		Huawei Device Co., Ltd.
-DC333D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D8-78-7F   (hex)		Ubee Interactive Co., Limited
-D8787F     (base 16)		Ubee Interactive Co., Limited
-				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
-				North Point    00000
-				HK
-
-D4-1D-71   (hex)		Palo Alto Networks
-D41D71     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-08-87-C6   (hex)		INGRAM MICRO SERVICES
-0887C6     (base 16)		INGRAM MICRO SERVICES
-				100 CHEMIN DE BAILLOT
-				MONTAUBAN    82000
-				FR
-
-78-57-73   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-785773     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-60-89   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC6089     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-3E-92   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-843E92     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-8C-B6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-708CB6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-46-4A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-50464A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-A4-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4A402     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-15-FF   (hex)		Novatel Wireless Solutions, Inc.
-0015FF     (base 16)		Novatel Wireless Solutions, Inc.
-				9710 Scranton Rd., Suite 200
-				San Diego  CA  92121
-				US
-
-28-80-A2   (hex)		Novatel Wireless Solutions, Inc.
-2880A2     (base 16)		Novatel Wireless Solutions, Inc.
-				9710 Scranton Rd., Suite 200
-				San Diego  CA  92121
-				US
-
-68-33-2C   (hex)		KENSTEL NETWORKS LIMITED
-68332C     (base 16)		KENSTEL NETWORKS LIMITED
-				34D SECTOR 57 HSIIDC INDUSTRIAL AREA PHASE 4
-				KUNDLI  HARYANA  131028
-				IN
-
-14-5E-45   (hex)		Bamboo Systems Group
-145E45     (base 16)		Bamboo Systems Group
-				Sheraton House, Castle Park
-				Cambridge  CAMBRIDGESHIRE  CB3 0AX
-				GB
-
-70-61-7B   (hex)		Cisco Systems, Inc
-70617B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-98-59-49   (hex)		LUXOTTICA GROUP S.P.A.
-985949     (base 16)		LUXOTTICA GROUP S.P.A.
-				Piazzale Cadrona, 3
-				Milano  MI  20132
-				IT
-
-AC-67-B2   (hex)		Espressif Inc.
-AC67B2     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-9C-BD-6E   (hex)		DERA Co., Ltd
-9CBD6E     (base 16)		DERA Co., Ltd
-				Zhichun road NO7 Building B Room1203 Haidian District
-				Beijing    100191
-				CN
-
-4C-33-29   (hex)		Sweroam
-4C3329     (base 16)		Sweroam
-				Stortorget 16
-				Orebro  N/A  70211
-				SE
-
-64-E1-72   (hex)		Shenzhen Qihoo Intelligent Technology Co.,Ltd
-64E172     (base 16)		Shenzhen Qihoo Intelligent Technology Co.,Ltd
-				Room 201,Block A.No.1,Qianwan Road1 Qianhai Shenzhen-HONGKONG Cooperation Zone
-				Shenzhen  Guangdong  5181000
-				CN
-
-48-8F-5A   (hex)		Routerboard.com
-488F5A     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-10-06-45   (hex)		Sagemcom Broadband SAS
-100645     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-14-C9   (hex)		Brocade Communications Systems LLC
-0014C9     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-24-38   (hex)		Brocade Communications Systems LLC
-002438     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-74-8E-F8   (hex)		Brocade Communications Systems LLC
-748EF8     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-27-F8   (hex)		Brocade Communications Systems LLC
-0027F8     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-50-EB-1A   (hex)		Brocade Communications Systems LLC
-50EB1A     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-F8-4D-FC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-F84DFC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-84-9A-40   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-849A40     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-D8-1F-CC   (hex)		Brocade Communications Systems LLC
-D81FCC     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-C4-89-ED   (hex)		Solid Optics EU N.V.
-C489ED     (base 16)		Solid Optics EU N.V.
-				De Huchtstraat 35
-				Almere  Flevoland  1327 EC
-				NL
-
-60-F4-3A   (hex)		Edifier International
-60F43A     (base 16)		Edifier International
-				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
-				Hong Kong    070
-				CN
-
-58-A8-7B   (hex)		Fitbit, Inc.
-58A87B     (base 16)		Fitbit, Inc.
-				199 Fremont Street, 14th Fl
-				San Francisco  CA  94105
-				US
-
-5C-6B-D7   (hex)		Foshan VIOMI Electric Appliance Technology Co. Ltd.
-5C6BD7     (base 16)		Foshan VIOMI Electric Appliance Technology Co. Ltd.
-				No.2 North Xinxi Fourth Road, Xiashi Village Committee,Lunjiao Sub-district Office, Shunde District
-				Foshan  Guandong  528308
-				CN
-
-18-48-CA   (hex)		Murata Manufacturing Co., Ltd.
-1848CA     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-90-EE-C7   (hex)		Samsung Electronics Co.,Ltd
-90EEC7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-29-AB   (hex)		Samsung Electronics Co.,Ltd
-1029AB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-4E-CB   (hex)		Samsung Electronics Co.,Ltd
-184ECB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-22-A7   (hex)		NEC Platforms, Ltd.
-8022A7     (base 16)		NEC Platforms, Ltd.
-				2-3 Kandatsukasamachi
-				Chiyodaku  Tokyo  101-8532
-				JP
-
-64-E8-81   (hex)		Aruba, a Hewlett Packard Enterprise Company
-64E881     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-98-9D-5D   (hex)		Technicolor CH USA Inc.
-989D5D     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-5C-23-16   (hex)		Squirrels Research Labs LLC
-5C2316     (base 16)		Squirrels Research Labs LLC
-				8050 Freedom Ave NW Suite B
-				North Canton  OH  44720
-				US
-
-04-21-44   (hex)		Sunitec Enterprise Co.,Ltd
-042144     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-A0-27-B6   (hex)		Samsung Electronics Co.,Ltd
-A027B6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-39-17   (hex)		Samsung Electronics Co.,Ltd
-103917     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-98-80-EE   (hex)		Samsung Electronics Co.,Ltd
-9880EE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-0D-F2   (hex)		Motorola Mobility LLC, a Lenovo Company
-CC0DF2     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-94-BF-94   (hex)		Juniper Networks
-94BF94     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-94-43-4D   (hex)		Ciena Corporation
-94434D     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-A8-40-25   (hex)		Oxide Computer Company
-A84025     (base 16)		Oxide Computer Company
-				1251 Park Avenue
-				Emeryville  CA  94608
-				US
-
-10-65-A3   (hex)		Panamax LLC
-1065A3     (base 16)		Panamax LLC
-				5919 Sea Otter Place
-				Carlsbad   CA  92010
-				US
-
-C8-5B-A0   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
-C85BA0     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
-				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
-				Shenzhen  Guangdong  518057
-				CN
-
-E0-BE-03   (hex)		Lite-On Network Communication (Dongguan) Limited
-E0BE03     (base 16)		Lite-On Network Communication (Dongguan) Limited
-				30#Keji Rd,YinHu Industrial Area,Qingxi Town Dongguan City,Guang Dong China
-				Dongguan  Guang Dong  523648
-				CN
-
-5C-90-12   (hex)		Owl Cyber Defense Solutions, LLC
-5C9012     (base 16)		Owl Cyber Defense Solutions, LLC
-				38A Grove Street
-				Ridgefield  CT  06877
-				US
-
-38-F7-CD   (hex)		IEEE Registration Authority
-38F7CD     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-98-CB-A4   (hex)		Benchmark Electronics
-98CBA4     (base 16)		Benchmark Electronics
-				Free Industrial Zone, Phase 1, 
-				Bayan Lepas  Penang  11900
-				MY
-
-00-12-E3   (hex)		Agat Soft LLC
-0012E3     (base 16)		Agat Soft LLC
-				building 14, stroenie 15, room 7
-				Moscow  Serebryakova proezd  129343
-				RU
-
-00-13-51   (hex)		Niles Audio Corporation
-001351     (base 16)		Niles Audio Corporation
-				5919 Sea Otter Place
-				Carlsbad  CA  92010
-				US
-
-18-3C-B7   (hex)		Huawei Device Co., Ltd.
-183CB7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A4-88-73   (hex)		Cisco Systems, Inc
-A48873     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B8-80-4F   (hex)		Texas Instruments
-B8804F     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-FC-A5-D0   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-FCA5D0     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-04-CB-88   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-04CB88     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-A0-62-60   (hex)		Private
-A06260     (base 16)		Private
-
-A4-BD-C4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4BDC4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-91-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5C9157     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-16-93   (hex)		Lear Corporation GmbH
-481693     (base 16)		Lear Corporation GmbH
-				Industriestrasse 48
-				Kronach  Bavaria  96317
-				DE
-
-B4-79-47   (hex)		Nutanix
-B47947     (base 16)		Nutanix
-				1740 Technology Drive Ste #150
-				San Jose  CA  95110
-				US
-
-04-F8-F8   (hex)		Edgecore Networks Corporation
-04F8F8     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-5C-FE-9E   (hex)		Wiwynn Corporation Tainan Branch
-5CFE9E     (base 16)		Wiwynn Corporation Tainan Branch
-				4F, NO. 8, Beiyuan 3rd Rd., Anding Dist.,
-				Tainan    745
-				TW
-
-88-1C-95   (hex)		ITEL MOBILE LIMITED
-881C95     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-F4-69-42   (hex)		ASKEY COMPUTER CORP
-F46942     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-24-14-07   (hex)		Xiamen Sigmastar Technology Ltd.
-241407     (base 16)		Xiamen Sigmastar Technology Ltd.
-				15th Floor ,Unit A,Chuangxin Building, Software Park, Xiamen Torch Hi-Tech Industrial Development Zone, Xiamen,China
-				Xiamen  Fujian  361005
-				CN
-
-08-E9-F6   (hex)		AMPAK Technology,Inc.
-08E9F6     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-F0-2E-51   (hex)		Casa Systems
-F02E51     (base 16)		Casa Systems
-				18-20 Orion Road Lane Cove West
-				LANE COVE  NSW  2066
-				AU
-
-CC-C2-61   (hex)		IEEE Registration Authority
-CCC261     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-74-70-FD   (hex)		Intel Corporate
-7470FD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-7C-2A-31   (hex)		Intel Corporate
-7C2A31     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-B4-6B-FC   (hex)		Intel Corporate
-B46BFC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-14-4F-8A   (hex)		Intel Corporate
-144F8A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-C0-B6-F9   (hex)		Intel Corporate
-C0B6F9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-48-A4-72   (hex)		Intel Corporate
-48A472     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-D8-F2-CA   (hex)		Intel Corporate
-D8F2CA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-48-F1-7F   (hex)		Intel Corporate
-48F17F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-68-EC-C5   (hex)		Intel Corporate
-68ECC5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-7C-76-35   (hex)		Intel Corporate
-7C7635     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-64-0B-D7   (hex)		Apple, Inc.
-640BD7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-91-3D   (hex)		Apple, Inc.
-A8913D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-C9-5E   (hex)		Samsung Electronics Co.,Ltd
-4CC95E     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-0C-3B-50   (hex)		Apple, Inc.
-0C3B50     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-2B-46   (hex)		Intel Corporate
-782B46     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-34-7D-F6   (hex)		Intel Corporate
-347DF6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-CC-D9-AC   (hex)		Intel Corporate
-CCD9AC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-9C-29-76   (hex)		Intel Corporate
-9C2976     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-B8-9A-2A   (hex)		Intel Corporate
-B89A2A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-58-96-1D   (hex)		Intel Corporate
-58961D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-74-D8-3E   (hex)		Intel Corporate
-74D83E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-08-D2-3E   (hex)		Intel Corporate
-08D23E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-A8-7E-EA   (hex)		Intel Corporate
-A87EEA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-40-EC-99   (hex)		Intel Corporate
-40EC99     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-BC-54-2F   (hex)		Intel Corporate
-BC542F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-34-CF-F6   (hex)		Intel Corporate
-34CFF6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-C8-7E-A1   (hex)		TCL MOKA International Limited
-C87EA1     (base 16)		TCL MOKA International Limited
-				7/F, Building 22E 22 Science Park East Avenue
-				Hong Kong    999077
-				HK
-
-A0-51-0B   (hex)		Intel Corporate
-A0510B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-DC-FB-48   (hex)		Intel Corporate
-DCFB48     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-84-FD-D1   (hex)		Intel Corporate
-84FDD1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-40-74-E0   (hex)		Intel Corporate
-4074E0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-08-71-90   (hex)		Intel Corporate
-087190     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-5C-CD-5B   (hex)		Intel Corporate
-5CCD5B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-98-AF-65   (hex)		Intel Corporate
-98AF65     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-40-A6-B7   (hex)		Intel Corporate
-40A6B7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-0C-7A-15   (hex)		Intel Corporate
-0C7A15     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-54-8D-5A   (hex)		Intel Corporate
-548D5A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-30-66-D0   (hex)		Huawei Device Co., Ltd.
-3066D0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-3C-B2-33   (hex)		Huawei Device Co., Ltd.
-3CB233     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-20-9E-79   (hex)		Universal Electronics, Inc.
-209E79     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-AC-5F-EA   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-AC5FEA     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-04-4A-C6   (hex)		Aipon Electronics Co., Ltd
-044AC6     (base 16)		Aipon Electronics Co., Ltd
-				#78, Qiaojiao Dong road, Qiaolong, Tangxia Town
-				Dongguan City  Guangdong Province  523-710
-				CN
-
-5C-D5-B5   (hex)		Shenzhen WiSiYiLink Technology Co.,Ltd
-5CD5B5     (base 16)		Shenzhen WiSiYiLink Technology Co.,Ltd
-				Building a 3, huafengzhigu Yuanshan hi tech Industrial Park, No.62, Yinhe Road, he'ao community, Yuanshan street, Longgang District
-				Shenzhen    518100
-				CN
-
-88-94-8F   (hex)		Xi'an Zhisensor Technologies Co.,Ltd
-88948F     (base 16)		Xi'an Zhisensor Technologies Co.,Ltd
-				 No.52 Jinye 1st Road Xi'an,Shaanxi,China
-				Xi an  Xi an High-Tech Zone  710077
-				CN
-
-18-95-52   (hex)		1MORE
-189552     (base 16)		1MORE
-				TianliaoBuilding F14, New Materials Industrial Park, Xueyuan Blvd?Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-C0-FF-A8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0FFA8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-51-7E   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-C0517E     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-FC-14-99   (hex)		Aimore Acoustics Incorporation
-FC1499     (base 16)		Aimore Acoustics Incorporation
-				16F,Tianliao Building(New Material industrial Park), Xueyuan Avenue, Nanshan District
-				Shenzhen   Guangdong  518055
-				CN
-
-98-C7-A4   (hex)		Shenzhen HS Fiber Communication Equipment CO., LTD
-98C7A4     (base 16)		Shenzhen HS Fiber Communication Equipment CO., LTD
-				6F, Bld#A, Dezhong Industrial Park, Yangmei Village, Bantian Town, Longgang District
-				Shenzhen  Guangdong  518129
-				CN
-
-00-BE-D5   (hex)		New H3C Technologies Co., Ltd
-00BED5     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-00-02-C4   (hex)		OPT Machine Vision Tech Co., Ltd
-0002C4     (base 16)		OPT Machine Vision Tech Co., Ltd
-				no. 8 JInSheng Road, JinXia Zone, Chang'An Town
-				Dongguan  Guangdong  523000
-				CN
-
-AC-F1-08   (hex)		LG Innotek
-ACF108     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-08-ED-9D   (hex)		TECNO MOBILE LIMITED
-08ED9D     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-E8-6D-CB   (hex)		Samsung Electronics Co.,Ltd
-E86DCB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-49-50   (hex)		IEEE Registration Authority
-304950     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-05-C9   (hex)		LG Innotek
-0005C9     (base 16)		LG Innotek
-				LG Component R&D Center
-				Ansan-si  Gyeonggi-do  426-791
-				KR
-
-0C-DC-7E   (hex)		Espressif Inc.
-0CDC7E     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-20-98-D8   (hex)		Shenzhen Yingdakang Technology CO., LTD
-2098D8     (base 16)		Shenzhen Yingdakang Technology CO., LTD
-				8004,Building 51,Block 2,Shangtang Songzi Park, MinZhi St., Longhua Dist
-				Shenzhen    518055
-				CN
-
-7C-C7-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-7CC77E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-A0-CF-F5   (hex)		zte corporation
-A0CFF5     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-1C-01-2D   (hex)		Ficer Technology
-1C012D     (base 16)		Ficer Technology
-				2F, No.138, Daye Rd., Beitou Dist.,
-				Taipei City    11268
-				TW
-
-3C-A6-2F   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-3CA62F     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-98-B3-EF   (hex)		Huawei Device Co., Ltd.
-98B3EF     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-F9-58   (hex)		Huawei Device Co., Ltd.
-50F958     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-60-32-B1   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-6032B1     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-E4-1F-7B   (hex)		Cisco Systems, Inc
-E41F7B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-18-26-49   (hex)		Intel Corporate
-182649     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-88-03-E9   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-8803E9     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-34-58-40   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-345840     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-64-7A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5C647A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-7F-7B   (hex)		Huawei Device Co., Ltd.
-BC7F7B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F0-FA-C7   (hex)		Huawei Device Co., Ltd.
-F0FAC7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-EF-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DCEF80     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-6F-2D   (hex)		Wahoo Fitness
-B46F2D     (base 16)		Wahoo Fitness
-				90 W Wieuca Rd, Suite 110
-				Atlanta  GA  30342
-				US
-
-5C-85-7E   (hex)		IEEE Registration Authority
-5C857E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-84-6B-48   (hex)		ShenZhen EepuLink Co., Ltd.
-846B48     (base 16)		ShenZhen EepuLink Co., Ltd.
-				4th Floor, Building 3, Nangang 1st industrial zone, Xili street, Nanshan district,
-				ShenZhen  Guangdong  518000
-				CN
-
-B4-60-ED   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-B460ED     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-30-CC-21   (hex)		zte corporation
-30CC21     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-64-6C-80   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-646C80     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-08-9E-01   (hex)		Quanta Computer Inc.
-089E01     (base 16)		Quanta Computer Inc.
-				No.211, Wen Hwa 2nd Rd
-				Taoyuan  Taiwan  33377
-				TW
-
-A8-1E-84   (hex)		Quanta Computer Inc.
-A81E84     (base 16)		Quanta Computer Inc.
-				No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang
-				Tao Yuan    33377
-				TW
-
-C0-18-50   (hex)		Quanta Computer Inc.
-C01850     (base 16)		Quanta Computer Inc.
-				No. 211, Wen-Hwa 2nd Rd.,Kuei-Shan Dist.
-				Taoyuan City  Taiwan  33377
-				TW
-
-44-27-F3   (hex)		70mai Co.,Ltd.
-4427F3     (base 16)		70mai Co.,Ltd.
-				Room 2220, building 2, No. 588, Zixing road
-				Shanghai  MinHang District  201100
-				CN
-
-04-7D-7B   (hex)		Quanta Computer Inc.
-047D7B     (base 16)		Quanta Computer Inc.
-				NO. 211, WEN HWA 2RD.,KUEI SHAN HSIANG, TAO YUAN SHIEN,
-				TAIPEI  TAIWAN  333
-				TW
-
-00-25-DC   (hex)		Sumitomo Electric Industries, Ltd
-0025DC     (base 16)		Sumitomo Electric Industries, Ltd
-				1-1-3, Shimaya, Konohana-ku
-				Osaka    554-0024
-				JP
-
-D4-F3-37   (hex)		Xunison Ltd.
-D4F337     (base 16)		Xunison Ltd.
-				25 Kilbarbery Business Park, Upper Nangor Road
-				Dublin 22  Co. Dublin  D22 NH32
-				IE
-
-48-A2-B8   (hex)		Chengdu Vision-Zenith Tech.Co,.Ltd
-48A2B8     (base 16)		Chengdu Vision-Zenith Tech.Co,.Ltd
-				China (Sichuan) Free Trade Test Zone Chengdu Hi-tech Zone 300 Jiaozi Avenue 3 buildings 22
-				Chengdu  Sichuan  610041
-				CN
-
-C0-B8-E6   (hex)		Ruijie Networks Co.,LTD
-C0B8E6     (base 16)		Ruijie Networks Co.,LTD
-				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
-				Fuzhou  Fujian  350002
-				CN
-
-8C-94-1F   (hex)		Cisco Systems, Inc
-8C941F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-68-7D-B4   (hex)		Cisco Systems, Inc
-687DB4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-E8-73   (hex)		HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
-58E873     (base 16)		HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
-				Build C,Wanfu Center,Binkang Road No.228,Binjiang Area
-				China    210051
-				CN
-
-B0-30-C8   (hex)		Teal Drones, Inc.
-B030C8     (base 16)		Teal Drones, Inc.
-				5200 South Highland Drive
-				Holladay   UT  84117
-				US
-
-DC-41-A9   (hex)		Intel Corporate
-DC41A9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-08-8F-2C   (hex)		Amber Technology Ltd.
-088F2C     (base 16)		Amber Technology Ltd.
-				Unit 1, 2 Daydream Street
-				Warriewood  New South Wales  2102
-				AU
-
-A8-35-12   (hex)		Huawei Device Co., Ltd.
-A83512     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-90-F6-44   (hex)		Huawei Device Co., Ltd.
-90F644     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-44-AF-28   (hex)		Intel Corporate
-44AF28     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-9C-9D-7E   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-9C9D7E     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-74-12-B3   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-7412B3     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-94-47-B0   (hex)		BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD
-9447B0     (base 16)		BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD
-				Room 2179, Floor2,Block D, Building 33, Centralised Office Area, No.99, Kechuangshisi Road, BDA, Beijing
-				BEIJING  BEIJING  100176
-				CN
-
-A0-68-1C   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-A0681C     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-6C-44-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C442A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-7C-C9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A47CC9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-0D-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C40D96     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-5C-7D   (hex)		Shenzhen Honesty Electronics Co.,Ltd.
-F85C7D     (base 16)		Shenzhen Honesty Electronics Co.,Ltd.
-				5/F,Zone B,Chitat Industrial Park,West Longping Road, Longgang District,Shenzhen City
-				Shenzhen  Guangdong  518172
-				CN
-
-84-22-5E   (hex)		SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.
-84225E     (base 16)		SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.
-				XILI STREET
-				SHENZHEN  GUANGDONG  5180000
-				CN
-
-E4-5A-D4   (hex)		Eltex Enterprise Ltd.
-E45AD4     (base 16)		Eltex Enterprise Ltd.
-				Okruzhnaya st. 29v
-				Novosibirsk    630020
-				RU
-
-84-2A-FD   (hex)		HP Inc.
-842AFD     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-1C-FE-2B   (hex)		Amazon Technologies Inc.
-1CFE2B     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-CC-48-3A   (hex)		Dell Inc.
-CC483A     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-DC-A3-A2   (hex)		Feng mi(Beijing)technology co., LTD
-DCA3A2     (base 16)		Feng mi(Beijing)technology co., LTD
-				RenHe Town barracks south street 10 yuan 33 level 301
-				shunyi district  Beijing  101300
-				CN
-
-7C-25-DA   (hex)		FN-LINK TECHNOLOGY LIMITED
-7C25DA     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-A8-69-8C   (hex)		Oracle Corporation 
-A8698C     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-EC-57-0D   (hex)		AFE Inc.
-EC570D     (base 16)		AFE Inc.
-				11210 County Line Rd
-				Mount Pleasant  WI  53177
-				US
-
-A4-AC-0F   (hex)		Huawei Device Co., Ltd.
-A4AC0F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-CC-FF-90   (hex)		Huawei Device Co., Ltd.
-CCFF90     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-05-DB   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-5405DB     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-D4-D5-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D4D51B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-91-BB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2491BB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-5E-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-645E10     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-F2-2B   (hex)		TECNO MOBILE LIMITED
-ECF22B     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-E4-5F-01   (hex)		Raspberry Pi Trading Ltd
-E45F01     (base 16)		Raspberry Pi Trading Ltd
-				Maurice Wilkes Building, Cowley Road
-				Cambridge    CB4 0DS
-				GB
-
-44-A5-4E   (hex)		Qorvo International Pte. Ltd.
-44A54E     (base 16)		Qorvo International Pte. Ltd.
-				1 Changi Business Park Avenue 1
-				#04-01    486058
-				SG
-
-C8-E6-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C8E600     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-57-8E   (hex)		eero inc.
-30578E     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-00-30-54   (hex)		Castlenet Technology Inc.
-003054     (base 16)		Castlenet Technology Inc.
-				5F., No. 10, Daye Rd., Beitou Dist.
-				Taipei City    112030
-				TW
-
-C8-16-DA   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-C816DA     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-B0-44-14   (hex)		New H3C Technologies Co., Ltd
-B04414     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-48-4B-D4   (hex)		Technicolor CH USA Inc.
-484BD4     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-30-96-10   (hex)		Huawei Device Co., Ltd.
-309610     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-78-45-58   (hex)		Ubiquiti Networks Inc.
-784558     (base 16)		Ubiquiti Networks Inc.
-				685 Third Avenue, 27th Floor
-				New York  NY  10017
-				US
-
-64-F9-47   (hex)		Senscomm Semiconductor Co., Ltd.
-64F947     (base 16)		Senscomm Semiconductor Co., Ltd.
-				Room 303-309, 3rd Floor International Building, NO.2 Suzhou Avenue West
-				Suzhou  Jiangsu  215000
-				CN
-
-DC-00-B0   (hex)		FREEBOX SAS
-DC00B0     (base 16)		FREEBOX SAS
-				16 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-70-74-14   (hex)		Murata Manufacturing Co., Ltd.
-707414     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-A0-76-4E   (hex)		Espressif Inc.
-A0764E     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-B4-FB-E3   (hex)		AltoBeam (China) Inc.
-B4FBE3     (base 16)		AltoBeam (China) Inc.
-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
-				Beijing  Beijing  100083
-				CN
-
-10-D7-B0   (hex)		Sagemcom Broadband SAS
-10D7B0     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-44-59-43   (hex)		zte corporation
-445943     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-34-36-54   (hex)		zte corporation
-343654     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-74-8F-3C   (hex)		Apple, Inc.
-748F3C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-F9-46   (hex)		Apple, Inc.
-40F946     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-09-BF   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-6C09BF     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-FC-6D-D1   (hex)		APRESIA Systems, Ltd.
-FC6DD1     (base 16)		APRESIA Systems, Ltd.
-				Tsukuba Network Technical Center, Kidamari 3550
-				Tsuchiura-shi  Ibaraki-ken  300-0026
-				JP
-
-80-C9-55   (hex)		Redpine Signals, Inc.
-80C955     (base 16)		Redpine Signals, Inc.
-				Plot 87, Sagar Society 
-				Hyderabad  AP  500034
-				IN
-
-CC-4F-5C   (hex)		IEEE Registration Authority
-CC4F5C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-4C-6D-58   (hex)		Juniper Networks
-4C6D58     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-5C-ED-8C   (hex)		Hewlett Packard Enterprise
-5CED8C     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-30-D0-42   (hex)		Dell Inc.
-30D042     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-C0-C9-E3   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-C0C9E3     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-F8-8C-21   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F88C21     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-C4-27-8C   (hex)		Huawei Device Co., Ltd.
-C4278C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-80-8F-E8   (hex)		Intelbras
-808FE8     (base 16)		Intelbras
-				BR 101, km 210, S/N°
-				São José  Santa Catarina  88104800
-				BR
-
-7C-73-EB   (hex)		Huawei Device Co., Ltd.
-7C73EB     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E4-8F-1D   (hex)		Huawei Device Co., Ltd.
-E48F1D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-FC-CD-2F   (hex)		IEEE Registration Authority
-FCCD2F     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-94-B2-71   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94B271     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-05-8C   (hex)		mMax Communications, Inc.
-78058C     (base 16)		mMax Communications, Inc.
-				5151 California Ave., Suite 100
-				Irvine  CA  92617
-				US
-
-C4-A7-2B   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-C4A72B     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-CC-F5-5F   (hex)		E FOCUS INSTRUMENTS INDIA PRIVATE LIMITED
-CCF55F     (base 16)		E FOCUS INSTRUMENTS INDIA PRIVATE LIMITED
-				PLOT NO 21, 1ST FLOOR, NO 22, SAMAYAPURAM MAIN ROAD PORUR
-				CHENNAI  TAMIL NADU  600116
-				IN
-
-D0-C3-1E   (hex)		JUNGJIN Electronics Co.,Ltd
-D0C31E     (base 16)		JUNGJIN Electronics Co.,Ltd
-				41-11, Yangjipyeon-ro
-				Uiwang-si  Gyeonggi-do  16007
-				KR
-
-14-13-33   (hex)		AzureWave Technology Inc.
-141333     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-A4-17-8B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4178B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-34-00   (hex)		Hisense Electric Co.,Ltd
-5C3400     (base 16)		Hisense Electric Co.,Ltd
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-4C-3B-DF   (hex)		Microsoft Corporation
-4C3BDF     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-08-7C-39   (hex)		Amazon Technologies Inc.
-087C39     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-D8-10-CB   (hex)		Andrea Informatique
-D810CB     (base 16)		Andrea Informatique
-				30 Rue Jules Guesde
-				Paris    75014
-				FR
-
-FC-19-28   (hex)		Actions Microelectronics Co., Ltd
-FC1928     (base 16)		Actions Microelectronics Co., Ltd
-				201, No 9 Building, Software Park,Kejizhonger Rd.,
-				Shenzhen  Gangdong  518057
-				CN
-
-3C-D2-E5   (hex)		New H3C Technologies Co., Ltd
-3CD2E5     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-B0-98-BC   (hex)		Huawei Device Co., Ltd.
-B098BC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-24-01-6F   (hex)		Huawei Device Co., Ltd.
-24016F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D0-59-19   (hex)		zte corporation
-D05919     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E0-91-3C   (hex)		Kyeungin CNS Co., Ltd.
-E0913C     (base 16)		Kyeungin CNS Co., Ltd.
-				13, Gyeongin-ro, Sosa-gu
-				Bucheon-si  Gyeonggi-do  14730
-				KR
-
-00-B8-81   (hex)		New platforms LLC
-00B881     (base 16)		New platforms LLC
-				Varshavskoe shosse, 35, Bld. 1
-				Moscow    117105
-				RU
-
-00-1B-2E   (hex)		Sinkyo Electron Inc
-001B2E     (base 16)		Sinkyo Electron Inc
-				1-22-19 Daimachi
-				Hachioji-city   Tokyo  193-0931
-				JP
-
-C4-37-72   (hex)		Virtuozzo International GmbH
-C43772     (base 16)		Virtuozzo International GmbH
-				Vordergasse 59
-				Schaffhausen    8200
-				CH
-
-CC-3B-27   (hex)		TECNO MOBILE LIMITED
-CC3B27     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-08-58-A5   (hex)		Beijing Vrv Software Corpoaration Limited.
-0858A5     (base 16)		Beijing Vrv Software Corpoaration Limited.
-				Room 1602, block C, Zhongguancun Science and technology development building, 34 Zhongguancun South Street
-				Beijing  Beijing  100000
-				CN
-
-98-3F-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-983F60     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-3F-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C03FDD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-32-35   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-303235     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-				No.218 Qianwangang Road
-				Qingdao  Shangdong  266510
-				CN
-
-E0-E2-E6   (hex)		Espressif Inc.
-E0E2E6     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-9C-73-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C7370     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-24-29   (hex)		Google, Inc.
-582429     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-E8-0A-EC   (hex)		Jiangsu Hengtong Optic-Electric Co., LTD
-E80AEC     (base 16)		Jiangsu Hengtong Optic-Electric Co., LTD
-				88 Hengtong Dadao, Qidu Town, Wujiang District
-				Suzhou  Jiangsu Province  215200
-				CN
-
-C4-DE-7B   (hex)		Huawei Device Co., Ltd.
-C4DE7B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-7C-C2-94   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-7CC294     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-40-D4-BD   (hex)		SK Networks Service CO., LTD.
-40D4BD     (base 16)		SK Networks Service CO., LTD.
-				120, Jangan-ro, Jangan-gu
-				Suwon-si  Gyeonggi-do  16312
-				KR
-
-68-D4-8B   (hex)		Hailo Technologies Ltd.
-68D48B     (base 16)		Hailo Technologies Ltd.
-				94 Yigal Alon
-				Tel Aviv    6789139
-				IL
-
-6C-1A-75   (hex)		Huawei Device Co., Ltd.
-6C1A75     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-6C-76-37   (hex)		Huawei Device Co., Ltd.
-6C7637     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-18-EE-86   (hex)		Novatel Wireless Solutions, Inc.
-18EE86     (base 16)		Novatel Wireless Solutions, Inc.
-				9710 Scranton Rd., Suite 200
-				San Diego  CA  92121
-				US
-
-A0-9F-10   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-A09F10     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-20-1B-88   (hex)		Dongguan Liesheng Electronic Co., Ltd.
-201B88     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
-				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
-				dongguan   guangdong  523000
-				CN
-
-24-94-93   (hex)		FibRSol Global Network Limited
-249493     (base 16)		FibRSol Global Network Limited
-				17, Deep vihar, Vikas Nagar,, Near Mayank hospital,, Uttam Nagar,
-				New Delhi  Delhi  110059
-				IN
-
-28-D0-44   (hex)		Shenzhen Xinyin technology company
-28D044     (base 16)		Shenzhen Xinyin technology company
-				2/F, Building C, Jianxing Technology Building, Shahe West Road, Xili Street, Nanshan District 
-				Shenzhen  Guangdong  518055
-				CN
-
-A8-40-7D   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-A8407D     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-FC-4B-57   (hex)		Peerless Instrument Division of Curtiss-Wright 
-FC4B57     (base 16)		Peerless Instrument Division of Curtiss-Wright 
-				1966D Broadhollow Road
-				East Farmingdale  NY  11735
-				US
-
-5C-10-C5   (hex)		Samsung Electronics Co.,Ltd
-5C10C5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E8-EB-34   (hex)		Cisco Systems, Inc
-E8EB34     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-60-D8   (hex)		ARRIS Group, Inc.
-5860D8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-9C-9A-C0   (hex)		LEGO System A/S
-9C9AC0     (base 16)		LEGO System A/S
-				Aastvej 1
-				Billund    DK-7190
-				DK
-
-3C-BD-C5   (hex)		Arcadyan Corporation
-3CBDC5     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-A8-DA-0C   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
-A8DA0C     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
-				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
-				NEW DELHI    110001
-				IN
-
-F8-53-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F85329     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-A5-DC   (hex)		ARRIS Group, Inc.
-50A5DC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-74-B7-B3   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-74B7B3     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-88-15-C5   (hex)		Huawei Device Co., Ltd.
-8815C5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B4-1B-B0   (hex)		Apple, Inc.
-B41BB0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-D3-49   (hex)		Apple, Inc.
-58D349     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-34-F0   (hex)		Apple, Inc.
-F434F0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-8C-75   (hex)		Apple, Inc.
-B08C75     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-AA-FE   (hex)		Huawei Device Co., Ltd.
-A4AAFE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F8-3B-7E   (hex)		Huawei Device Co., Ltd.
-F83B7E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-9C-28-B3   (hex)		Apple, Inc.
-9C28B3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-78-17   (hex)		Apple, Inc.
-A07817     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-87-30   (hex)		Apple, Inc.
-5C8730     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-9B-D6   (hex)		TCT mobile ltd
-DC9BD6     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-70-40-FF   (hex)		Huawei Device Co., Ltd.
-7040FF     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-34-D6-93   (hex)		Huawei Device Co., Ltd.
-34D693     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E0-1F-ED   (hex)		Nokia Shanghai Bell Co., Ltd.
-E01FED     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai 
-				Shanghai    201206
-				CN
-
-14-6B-9A   (hex)		zte corporation
-146B9A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-78-32-1B   (hex)		D-Link International
-78321B     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-04-E7-7E   (hex)		We Corporation Inc.
-04E77E     (base 16)		We Corporation Inc.
-				201, 33, Deokcheon-ro, Manan-gu
-				Anyang-si  Gyeonggi-do  14088
-				KR
-
-4C-52-EC   (hex)		SOLARWATT GmbH
-4C52EC     (base 16)		SOLARWATT GmbH
-				Maria-Reiche-Str. 2a
-				Dresden    01109
-				DE
-
-30-D9-41   (hex)		Raydium Semiconductor Corp.
-30D941     (base 16)		Raydium Semiconductor Corp.
-				2F, No. 23, LiHsin Rd., Hsinchu Science Park
-				Hsinchu, Taiwan, R.O.C.    TW 300
-				TW
-
-68-76-27   (hex)		Zhuhai Dingzhi Electronic Technology Co., Ltd
-687627     (base 16)		Zhuhai Dingzhi Electronic Technology Co., Ltd
-				6th floor, No.2 Jinliang Road, Hongqi Town, Jinwan District
-				Zhuhai  GuangDong  519000
-				CN
-
-20-0B-CF   (hex)		Nintendo Co.,Ltd
-200BCF     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-38-C0-96   (hex)		ALPSALPINE CO,.LTD
-38C096     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				KAKUDA-CITY  MIYAGI-PREF  981-1595
-				JP
-
-AC-7A-4D   (hex)		ALPSALPINE CO,.LTD
-AC7A4D     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				KAKUDA-CITY  MIYAGI-PREF  981-1595
-				JP
-
-04-76-6E   (hex)		ALPSALPINE CO,.LTD
-04766E     (base 16)		ALPSALPINE CO,.LTD
-				6-3-36 Furukawanakazato,
-				Osaki  Miyagi-pref  989-6181
-				JP
-
-24-E4-C8   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-24E4C8     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-94-8E-D3   (hex)		Arista Networks
-948ED3     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-00-26-43   (hex)		ALPSALPINE CO,.LTD
-002643     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi,
-				Soma-city,  Fukushima-pref.,  976-8501
-				JP
-
-C0-F6-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0F6EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-20-8C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CC208C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-5A-85   (hex)		Wistron Neweb Corporation
-885A85     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-D8-00-93   (hex)		Aurender Inc.
-D80093     (base 16)		Aurender Inc.
-				 #1612, OBIZTOWER, 126, Beolmal-ro, Dongan-gu
-				Anyang-si  Gyeonggi-do  14057
-				KR
-
-38-90-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-389052     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-40-8F-9D   (hex)		Juniper Networks
-408F9D     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-15-E7   (hex)		Quantec Tontechnik
-0015E7     (base 16)		Quantec Tontechnik
-				Maenherstr. 35
-				München    D-81375
-				DE
-
-FC-B3-BC   (hex)		Intel Corporate
-FCB3BC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-CC-18   (hex)		Intel Corporate
-18CC18     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C0-3C-59   (hex)		Intel Corporate
-C03C59     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-84-1B-77   (hex)		Intel Corporate
-841B77     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-2C-A5-9C   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-2CA59C     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-34-C9-3D   (hex)		Intel Corporate
-34C93D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-6C-98-EB   (hex)		Riverbed Technology, Inc.
-6C98EB     (base 16)		Riverbed Technology, Inc.
-				680 Folsom St
-				San Francisco  CA  94107
-				US
-
-00-1F-F5   (hex)		Kongsberg Defence & Aerospace
-001FF5     (base 16)		Kongsberg Defence & Aerospace
-				Kirkegaardsveien 45  P.O.Box 1003
-				Kongsberg    NO-3601
-				NO
-
-74-EC-B2   (hex)		Amazon Technologies Inc.
-74ECB2     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-C8-6C-3D   (hex)		Amazon Technologies Inc.
-C86C3D     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-C0-41-21   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-C04121     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-0C-7C-28   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-0C7C28     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-20-78-52   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-207852     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-54-FA-96   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-54FA96     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-7C-C2-C6   (hex)		TP-Link Corporation Limited
-7CC2C6     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-08-9A-C7   (hex)		zte corporation
-089AC7     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-BC-6D-05   (hex)		Dusun Electron Co.,Ltd.
-BC6D05     (base 16)		Dusun Electron Co.,Ltd.
-				NO.640 FengQing str.,DeQing, ZheJiang, China
-				huzhou  zhejiang  313200
-				CN
-
-74-4C-A1   (hex)		Liteon Technology Corporation
-744CA1     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-B4-B2-91   (hex)		LG Electronics
-B4B291     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-C0-E0-18   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0E018     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-E7-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CE747     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-FF-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A8FFBA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-78-D1   (hex)		Juniper Networks
-AC78D1     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-EC-BE-5F   (hex)		Vestel Elektronik San ve Tic. A.Ş.
-ECBE5F     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
-				Organize san
-				Manisa  Turket  45030
-				TR
-
-A4-42-3B   (hex)		Intel Corporate
-A4423B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-70-CF-49   (hex)		Intel Corporate
-70CF49     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-48-51-C5   (hex)		Intel Corporate
-4851C5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-20-EF-BD   (hex)		Roku, Inc
-20EFBD     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-EC-7C-B6   (hex)		Samsung Electronics Co.,Ltd
-EC7CB6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-58-A6-39   (hex)		Samsung Electronics Co.,Ltd
-58A639     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-E5-7C   (hex)		Espressif Inc.
-A4E57C     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-04-F9-93   (hex)		Infinix mobility limited
-04F993     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-BC-BD-9E   (hex)		ITEL MOBILE LIMITED
-BCBD9E     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-F4-2A-7D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F42A7D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-8C-0F-C9   (hex)		Huawei Device Co., Ltd.
-8C0FC9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-30-4E-1B   (hex)		Huawei Device Co., Ltd.
-304E1B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-6C-03-09   (hex)		Cisco Systems, Inc
-6C0309     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-D2-95   (hex)		Cisco Systems, Inc
-BCD295     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-50-4E   (hex)		New H3C Technologies Co., Ltd
-74504E     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-F0-39-65   (hex)		Samsung Electronics Co.,Ltd
-F03965     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-B6-62   (hex)		IC Holdings LLC
-FCB662     (base 16)		IC Holdings LLC
-				1277 Windmill Ln.
-				Midway  UT  84049
-				US
-
-50-2D-FB   (hex)		IGShare Co., Ltd.
-502DFB     (base 16)		IGShare Co., Ltd.
-				410-ho, 28, Digital-ro 30-gil
-				Guro-gu, SEOUL    08389
-				KR
-
-40-EE-15   (hex)		Zioncom Electronics (Shenzhen) Ltd.
-40EE15     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
-				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-00-F3-61   (hex)		Amazon Technologies Inc.
-00F361     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-6C-0D-E1   (hex)		Dongguan Cannice Precision Manufacturing Co., Ltd.
-6C0DE1     (base 16)		Dongguan Cannice Precision Manufacturing Co., Ltd.
-				Dongguan Cannice Precision Manufacturing Co., Ltd.
-				Dongguan  Guangdong  523170
-				CN
-
-60-6C-63   (hex)		Hitron Technologies. Inc
-606C63     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-E8-D7-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8D765     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-5E-1B   (hex)		Google, Inc.
-E45E1B     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-C4-30-CA   (hex)		SD Biosensor
-C430CA     (base 16)		SD Biosensor
-				C-4th & 5th Floor, Digital Empire Building, 980-3
-				Suwon-si  Kyonggi-do  ASI|KR|KS002|SUWON
-				KR
-
-D4-A6-51   (hex)		Tuya Smart Inc.
-D4A651     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-28-05-2E   (hex)		Dematic Corp
-28052E     (base 16)		Dematic Corp
-				507 Plymouth Ave NE
-				Grand Rapids  MI  49505
-				US
-
-88-C3-E5   (hex)		Betop Techonologies 
-88C3E5     (base 16)		Betop Techonologies 
-				6F., No. 669, Bannan Road, Zhonghe District
-				New Taipei City    235
-				TW
-
-E4-28-A4   (hex)		Prama India Private Limited
-E428A4     (base 16)		Prama India Private Limited
-				Off 103, 765 Fly Edge, TPS III Jn of S V Rd, Nr Kora Kendra
-				Borivali West, Mumbai  Maharashtra  400092
-				IN
-
-94-3A-91   (hex)		Amazon Technologies Inc.
-943A91     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-40-8C-1F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-408C1F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-2C-3F-0B   (hex)		Cisco Meraki
-2C3F0B     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-80-C5-01   (hex)		OctoGate IT Security Systems GmbH
-80C501     (base 16)		OctoGate IT Security Systems GmbH
-				Friedrich List Strasse 42
-				Paderborn  NRW  33100
-				DE
-
-04-F0-3E   (hex)		Huawei Device Co., Ltd.
-04F03E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-78-E2-2C   (hex)		Huawei Device Co., Ltd.
-78E22C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C0-D0-26   (hex)		Huawei Device Co., Ltd.
-C0D026     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-14-D1-9E   (hex)		Apple, Inc.
-14D19E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-C7-11   (hex)		Apple, Inc.
-40C711     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-70-17   (hex)		Apple, Inc.
-5C7017     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-EC-7B   (hex)		Apple, Inc.
-8CEC7B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-2D-B3   (hex)		AMPAK Technology,Inc.
-002DB3     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-3C-C7-86   (hex)		DONGGUAN HUARONG COMMUNICATION TECHNOLOGIES CO.,LTD.
-3CC786     (base 16)		DONGGUAN HUARONG COMMUNICATION TECHNOLOGIES CO.,LTD.
-				No.130 Dongxing East Road, Dongkeng Town
-				DONGGUAN    523450
-				CN
-
-28-C8-7C   (hex)		zte corporation
-28C87C     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-14-50-51   (hex)		SHARP Corporation
-145051     (base 16)		SHARP Corporation
-				1 Takumi-cho, Sakai-ku
-				Sakai City  Osaka  590-8522
-				JP
-
-C4-D0-E3   (hex)		Intel Corporate
-C4D0E3     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E4-FD-45   (hex)		Intel Corporate
-E4FD45     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-4C-AE   (hex)		CONTINENTAL
-184CAE     (base 16)		CONTINENTAL
-				1 AVENUE PAUL OURLIAC
-				TOULOUSE    31100
-				FR
-
-98-38-7D   (hex)		ITRONIC  TECHNOLOGY CO . , LTD .
-98387D     (base 16)		ITRONIC  TECHNOLOGY CO . , LTD .
-				2F C Building Fu Xin Lin lndustrial Park Hangcheng
-				lndustrial Zone Xixiang Street Baoan District  Shenzhen  518100
-				CN
-
-C8-D8-84   (hex)		Universal Electronics, Inc.
-C8D884     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-B4-A2-5C   (hex)		Cambium Networks Limited
-B4A25C     (base 16)		Cambium Networks Limited
-				Unit B2, Linhay Business Park,
-				Ashburton  Devon  TQ13 7UP
-				GB
-
-2C-71-FF   (hex)		Amazon Technologies Inc.
-2C71FF     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-AC-D6-18   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-ACD618     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-6C-56-40   (hex)		BLU Products Inc
-6C5640     (base 16)		BLU Products Inc
-				10814 NW 33rd Street
-				Miami  FL  33172
-				US
-
-48-78-5E   (hex)		Amazon Technologies Inc.
-48785E     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-20-C7-4F   (hex)		SensorPush
-20C74F     (base 16)		SensorPush
-				PO Box 211
-				Garrison  NY  10524
-				US
-
-48-29-52   (hex)		Sagemcom Broadband SAS
-482952     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-A4-7E-36   (hex)		EM Microelectronic
-A47E36     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-B0-5D-D4   (hex)		ARRIS Group, Inc.
-B05DD4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-24-E8-53   (hex)		LG Innotek
-24E853     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-30-7C-4A   (hex)		Huawei Device Co., Ltd.
-307C4A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-2C-CE-1E   (hex)		Cloudtronics Pty Ltd
-2CCE1E     (base 16)		Cloudtronics Pty Ltd
-				Unit 1 6 Powells Road Brookvale
-				Sydney  NSW  2100
-				AU
-
-F0-21-E0   (hex)		eero inc.
-F021E0     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco    94107
-				US
-
-9C-DB-CB   (hex)		Wuhan Funshion Online Technologies Co.,Ltd
-9CDBCB     (base 16)		Wuhan Funshion Online Technologies Co.,Ltd
-				5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan
-				Wuhan  CN/Hubei  430000
-				CN
-
-64-17-59   (hex)		Intellivision Holdings, LLC
-641759     (base 16)		Intellivision Holdings, LLC
-				1844 E Carnegie
-				Santa Ana  CA  92705
-				US
-
-50-43-48   (hex)		ThingsMatrix Inc.
-504348     (base 16)		ThingsMatrix Inc.
-				9442 North Capital of Texas Hwy Plaza One Suite 500 Austin
-				Austin  TX  78759
-				US
-
-D8-59-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D85982     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-B2-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48B25D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-1B-34   (hex)		China Mobile Group Device Co.,Ltd.
-A41B34     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-80-45-DD   (hex)		Intel Corporate
-8045DD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C0-D4-6B   (hex)		Huawei Device Co., Ltd.
-C0D46B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-9C-95-67   (hex)		Huawei Device Co., Ltd.
-9C9567     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-58-AE-F1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-58AEF1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-A4-7B-1A   (hex)		Huawei Device Co., Ltd.
-A47B1A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-14-7D-05   (hex)		SERCOMM PHILIPPINES INC
-147D05     (base 16)		SERCOMM PHILIPPINES INC
-				Lot 1 & 5, Phase 1, Filinvest Technology Park 1, Brgy. Punta, Calamba City
-				Calamba    Lot 1
-				PH
-
-78-7A-6F   (hex)		Juice Technology AG
-787A6F     (base 16)		Juice Technology AG
-				Gewerbestrasse 7
-				Cham  Select State  CH-6330
-				CH
-
-E8-6C-C7   (hex)		IEEE Registration Authority
-E86CC7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-40-24-B2   (hex)		Sichuan AI-Link Technology Co., Ltd.
-4024B2     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-64-0D-22   (hex)		LG Electronics (Mobile Communications)
-640D22     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-20-A7-F9   (hex)		SHENZHEN OLANBOA TECHNOLOGY CO., LTD
-20A7F9     (base 16)		SHENZHEN OLANBOA TECHNOLOGY CO., LTD
-				4/F, Building B, Block A, Longquan Science Park, Tongfuyu Phase II, Tongsheng Community, Dalang Street, Longhua District, Shenzhen
-				shenzhen  Guangdong  518000
-				CN
-
-C0-06-C3   (hex)		TP-Link Corporation Limited
-C006C3     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-3C-15-12   (hex)		Shenzhen Huanhu Technology Co.,Ltd
-3C1512     (base 16)		Shenzhen Huanhu Technology Co.,Ltd
-				 7 / F, building C4, Hengfeng Industrial City, 739 Zhoushi Road, Hezhou community, Hangcheng street, Bao'an District, Shenzhen
-				Shenzhen    518000
-				CN
-
-8C-31-E2   (hex)		DAYOUPLUS
-8C31E2     (base 16)		DAYOUPLUS
-				3F 509, Dunchon-daero, Jungwon-gu, Seongnam-si, Gyeonggi-do, Republic of Korea
-				Seongnam-si  Gyeonggi-do  13217
-				KR
-
-10-39-4E   (hex)		Hisense broadband multimedia technology Co.,Ltd
-10394E     (base 16)		Hisense broadband multimedia technology Co.,Ltd
-				Song ling Road 399
-				Qingdao    266000
-				CN
-
-D8-D5-B9   (hex)		Rainforest Automation, Inc.
-D8D5B9     (base 16)		Rainforest Automation, Inc.
-				200 – 311 Pender St. W
-				Vancouver  British Columbia  V6B 1T3
-				CA
-
-04-BA-1C   (hex)		Huawei Device Co., Ltd.
-04BA1C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-7C-3D-2B   (hex)		Huawei Device Co., Ltd.
-7C3D2B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-18-C2-41   (hex)		SonicWall
-18C241     (base 16)		SonicWall
-				1033 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-58-45-4C   (hex)		Ericsson AB
-58454C     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-FC-4D-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC4DA6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-14-E6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B414E6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-99-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC9929     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-48-59   (hex)		Castlenet Technology Inc.
-184859     (base 16)		Castlenet Technology Inc.
-				5th Fl., No.159-1, Sec.3, Beishen Rd., Shenkeng Dist., 
-				New Taipei City    222004
-				TW
-
-14-51-7E   (hex)		New H3C Technologies Co., Ltd
-14517E     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-08-3A-38   (hex)		New H3C Technologies Co., Ltd
-083A38     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-70-F0-88   (hex)		Nintendo Co.,Ltd
-70F088     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-84-23-88   (hex)		Ruckus Wireless
-842388     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F4-C7-AA   (hex)		Marvell Semiconductors
-F4C7AA     (base 16)		Marvell Semiconductors
-				15485 Sand Canyon Ave
-				IRVINE  CA  92618
-				US
-
-F8-AB-E5   (hex)		shenzhen worldelite electronics co., LTD
-F8ABE5     (base 16)		shenzhen worldelite electronics co., LTD
-				Office 5 F, Xiang Yu Industrial Park, Longsheng Road, Longgang Dist
-				Shenzhen  Guangdong  51800
-				CN
-
-E0-DB-D1   (hex)		Technicolor CH USA Inc.
-E0DBD1     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-CC-ED-21   (hex)		Nokia Shanghai Bell Co., Ltd.
-CCED21     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-10-D5-61   (hex)		Tuya Smart Inc.
-10D561     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-00-1A-86   (hex)		New Wave Design & Verification
-001A86     (base 16)		New Wave Design & Verification
-				4950 W 78th St.
-				Minneapolis  MN  55435
-				US
-
-50-9A-46   (hex)		Safetrust Inc
-509A46     (base 16)		Safetrust Inc
-				8112 Mill Creek Rd
-				Fremont  CA  94539
-				US
-
-D0-CF-D8   (hex)		Huizhou Boshijie Technology Co.,Ltd
-D0CFD8     (base 16)		Huizhou Boshijie Technology Co.,Ltd
-				No.1 Xisan road, Huifeng west road, Zhongkai high-tech zone
-				Huizhou  Guangdong  516006
-				CN
-
-84-C7-8F   (hex)		APS Networks GmbH
-84C78F     (base 16)		APS Networks GmbH
-				Rosenwiesstr. 17
-				Stuttgart    70567
-				DE
-
-F0-A3-B2   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-F0A3B2     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-08-BB-3C   (hex)		Flextronics Tech.(Ind) Pvt Ltd
-08BB3C     (base 16)		Flextronics Tech.(Ind) Pvt Ltd
-				365, Benjamin Road
-				Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646
-				IN
-
-2C-BE-EB   (hex)		Nothing Technology Limited
-2CBEEB     (base 16)		Nothing Technology Limited
-				11 Staple Inn
-				London  London  WC1V 7QH
-				GB
-
-F0-4A-02   (hex)		Cisco Systems, Inc
-F04A02     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-09-AC   (hex)		Quext, LLC
-7409AC     (base 16)		Quext, LLC
-				5214 68th St., Suite 201
-				Lubbock  TX  79424
-				US
-
-F0-01-6E   (hex)		Tianyi Telecom Terminals Company Limited
-F0016E     (base 16)		Tianyi Telecom Terminals Company Limited
-				6/F Changshang Building, No.29 North Xinhua Street, Xicheng District
-				Beijing    100031
-				CN
-
-EC-0B-AE   (hex)		Hangzhou BroadLink Technology Co.,Ltd
-EC0BAE     (base 16)		Hangzhou BroadLink Technology Co.,Ltd
-				Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China
-				Hangzhou  Zhejiang  310052
-				CN
-
-80-25-11   (hex)		ITEL MOBILE LIMITED
-802511     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-E8-A6-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8A660     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-24-2E   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-CC242E     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-08-2F-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-082FE9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-98-48-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-984874     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-A6-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1CA681     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-81-FA   (hex)		Apple, Inc.
-B881FA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-76-0E   (hex)		Apple, Inc.
-9C760E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-EA-32   (hex)		Apple, Inc.
-94EA32     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-BF-FE   (hex)		Huawei Device Co., Ltd.
-C8BFFE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-08-2E-36   (hex)		Huawei Device Co., Ltd.
-082E36     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-F4-EB   (hex)		Apple, Inc.
-50F4EB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-C7-09   (hex)		Apple, Inc.
-28C709     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-02-DE   (hex)		Sercomm Corporation.
-3802DE     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-5C-62-5A   (hex)		CANON INC.
-5C625A     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-7C-0A-3F   (hex)		Samsung Electronics Co.,Ltd
-7C0A3F     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-08-AA-89   (hex)		zte corporation
-08AA89     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A4-35-2D   (hex)		TRIZ Networks corp.
-A4352D     (base 16)		TRIZ Networks corp.
-				815 Daewangpangyo-ro
-				Sujeong-gu, Seongnam-si  Gyeonggi-do  13449
-				KR
-
-04-D6-0E   (hex)		FUNAI ELECTRIC CO., LTD.
-04D60E     (base 16)		FUNAI ELECTRIC CO., LTD.
-				7-7-1, Nakagaito
-				Daito  Osaka  574-0013
-				JP
-
-04-9F-81   (hex)		NETSCOUT SYSTEMS INC
-049F81     (base 16)		NETSCOUT SYSTEMS INC
-				310 Littleton Road
-				Westford  MA  01886 
-				US
-
-00-80-8C   (hex)		NETSCOUT SYSTEMS INC
-00808C     (base 16)		NETSCOUT SYSTEMS INC
-				310 Littleton Road
-				Westford  MA  01886 
-				US
-
-00-1F-92   (hex)		Motorola Solutions Inc.
-001F92     (base 16)		Motorola Solutions Inc.
-				500 W Monroe Street, Ste 4400
-				Chicago  IL  60661-3781
-				US
-
-00-23-BB   (hex)		Accretech SBS, Inc.
-0023BB     (base 16)		Accretech SBS, Inc.
-				2451 NW 28th Ave.
-				Portland  OR  97210
-				US
-
-B0-C9-52   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B0C952     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-F4-41-9E   (hex)		Huawei Device Co., Ltd.
-F4419E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-90-F9-B7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-90F9B7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-45-88   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F44588     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-BB-81   (hex)		Huawei Device Co., Ltd.
-C8BB81     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-47-2F   (hex)		Huawei Device Co., Ltd.
-1C472F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-20-5E-64   (hex)		Huawei Device Co., Ltd.
-205E64     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-60-57-7D   (hex)		eero inc.
-60577D     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-C8-13-8B   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-C8138B     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-78-F2-35   (hex)		Sichuan AI-Link Technology Co., Ltd.
-78F235     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-F4-4E-E3   (hex)		Intel Corporate
-F44EE3     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-D0-E0-42   (hex)		Cisco Systems, Inc
-D0E042     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-3C-37-12   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-3C3712     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-80-B6-55   (hex)		Intel Corporate
-80B655     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-0C-CB-0C   (hex)		iSYS RTS GmbH
-0CCB0C     (base 16)		iSYS RTS GmbH
-				Moosacher Str. 88
-				Munich  Bavaria  80809
-				DE
-
-44-56-E2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-4456E2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-54-AE-D2   (hex)		CSL Dualcom Ltd
-54AED2     (base 16)		CSL Dualcom Ltd
-				Salamander Quay West, Park Lane
-				Harefield  Middlesex  UB9 6NZ
-				GB
-
-F4-6F-A4   (hex)		Physik Instrumente GmbH & Co. KG
-F46FA4     (base 16)		Physik Instrumente GmbH & Co. KG
-				Auf der Roemerstr. 1
-				Karlsruhe    76228
-				DE
-
-C4-74-69   (hex)		BT9
-C47469     (base 16)		BT9
-				Dolev 33
-				Tefen    2495900
-				IL
-
-64-5D-92   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-645D92     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road, Chengdu, Sichuan
-				Chengdu  Sichuan  610000
-				CN
-
-9C-61-21   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-9C6121     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-E0-4F-BD   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-E04FBD     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-40-F4-20   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-40F420     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-CC-A2-60   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-CCA260     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-AC-E7-7B   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-ACE77B     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-4C-D3-AF   (hex)		HMD Global Oy
-4CD3AF     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-C8-51-42   (hex)		Samsung Electronics Co.,Ltd
-C85142     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-0D-E7   (hex)		B METERS S.R.L.
-CC0DE7     (base 16)		B METERS S.R.L.
-				VIA FRIULI 3
-				GONARS  UDINE  33050
-				IT
-
-5C-A1-76   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-5CA176     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-10-E4-C2   (hex)		Samsung Electronics Co.,Ltd
-10E4C2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-8D-CA   (hex)		Samsung Electronics Co.,Ltd
-0C8DCA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-58-2F-F7   (hex)		Sagemcom Broadband SAS
-582FF7     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-8C-FD-15   (hex)		Imagine Marketing Private Limited
-8CFD15     (base 16)		Imagine Marketing Private Limited
-				501B, Shri Guru Har Krishan Bhavan Charat Singh Colony Road, Chakala, Andheri East,
-				Mumbai  Maharashtra  400093
-				IN
-
-AC-D8-29   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
-ACD829     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
-				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
-				Nanjing  Jiangsu  211800
-				CN
-
-68-3A-48   (hex)		SAMJIN Co., Ltd.
-683A48     (base 16)		SAMJIN Co., Ltd.
-				199-6, Anyang 7-dong, Manan-gu
-				Anyang-si  Gyeonggi-do  430-817
-				KR
-
-B0-27-CF   (hex)		Extreme Networks, Inc.
-B027CF     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-14-22-3B   (hex)		Google, Inc.
-14223B     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-48-F8-FF   (hex)		CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
-48F8FF     (base 16)		CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
-				No.9, 3rd Wuke Road, Wuhou District
-				Chengdu  Sichuan Province  610045
-				CN
-
-E8-C1-E8   (hex)		Shenzhen Xiao Bi En Culture Education Technology Co.,Ltd.
-E8C1E8     (base 16)		Shenzhen Xiao Bi En Culture Education Technology Co.,Ltd.
-				4GH Unit,Block D,Central Avenue,Intersection of Xixiang Avenue and Baoyuan Road,Labor Community,Xixiang Street,Baoan District
-				Shenzhen  China  518102
-				CN
-
-2C-DD-E9   (hex)		Arista Networks
-2CDDE9     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-70-97-41   (hex)		Arcadyan Corporation
-709741     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-C4-FF-22   (hex)		Huawei Device Co., Ltd.
-C4FF22     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A0-A0-DC   (hex)		Huawei Device Co., Ltd.
-A0A0DC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-80-8A   (hex)		Cloud Diagnostics Canada ULC
-C4808A     (base 16)		Cloud Diagnostics Canada ULC
-				72 Victoria St. S., Unit 100
-				Kitchener  Ontario  N2G 4Y9
-				CA
-
-E4-08-E7   (hex)		Quectel Wireless Solutions Co.,Ltd.
-E408E7     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-7C-70-DB   (hex)		Intel Corporate
-7C70DB     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-8C-94-CC   (hex)		SFR
-8C94CC     (base 16)		SFR
-				12 rue jean-philippe Rameau CS 80001
-				La plaine saint denis   FRANCE  93634
-				FR
-
-60-B6-E1   (hex)		Texas Instruments
-60B6E1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-6C-79-B8   (hex)		Texas Instruments
-6C79B8     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A4-D0-94   (hex)		VIVAVIS AG
-A4D094     (base 16)		VIVAVIS AG
-				Nobelstr. 18
-				Ettlingen    D-76375
-				DE
-
-8C-A3-99   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
-8CA399     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
-				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
-				NEW DELHI    NA
-				IN
-
-60-DB-15   (hex)		New H3C Technologies Co., Ltd
-60DB15     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-5C-A7-21   (hex)		New H3C Technologies Co., Ltd
-5CA721     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-98-F2-17   (hex)		Castlenet Technology Inc.
-98F217     (base 16)		Castlenet Technology Inc.
-				5F., No. 10, Daye Rd., Beitou Dist.
-				Taipei City    112030
-				TW
-
-90-80-60   (hex)		Nilfisk A/S
-908060     (base 16)		Nilfisk A/S
-				Kornmarksvej 1
-				Broendby     2605
-				DK
-
-70-A6-CC   (hex)		Intel Corporate
-70A6CC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-6C-43-3C   (hex)		TECNO MOBILE LIMITED
-6C433C     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-44-5B-ED   (hex)		Aruba, a Hewlett Packard Enterprise Company
-445BED     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-84-EB-EF   (hex)		Cisco Systems, Inc
-84EBEF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D0-3E-7D   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-D03E7D     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
-				SHEN ZHEN  GUANG DONG  518000
-				CN
-
-90-69-76   (hex)		Withrobot Inc.
-906976     (base 16)		Withrobot Inc.
-				#1001, Seoul Forest M-tower, 31, Ttukseom-ro 1-gil, Seongdong-gu
-				Seoul  Seoul  04778
-				KR
-
-FC-92-57   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-FC9257     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-60-A5-E2   (hex)		Intel Corporate
-60A5E2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-A4-2A-71   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-A42A71     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-D4-54-8B   (hex)		Intel Corporate
-D4548B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-10-09-F9   (hex)		Amazon Technologies Inc.
-1009F9     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-D0-1E-1D   (hex)		SaiNXT Technologies LLP
-D01E1D     (base 16)		SaiNXT Technologies LLP
-				Shop No. 7, Sonawala Building, 1st Floor, Proctor Road, Grant Road (E)
-				Mumbai  Maharashtra  400007
-				IN
-
-58-4D-42   (hex)		Dragos, Inc.
-584D42     (base 16)		Dragos, Inc.
-				1745 Dorsey Rd, Suite R
-				Hanover  MD  21076
-				US
-
-60-8A-10   (hex)		Microchip Technology Inc.
-608A10     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-A8-23-16   (hex)		Nokia
-A82316     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-38-E3-9F   (hex)		Motorola Mobility LLC, a Lenovo Company
-38E39F     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-44-67-52   (hex)		Wistron INFOCOMM (Zhongshan) CORPORATION
-446752     (base 16)		Wistron INFOCOMM (Zhongshan) CORPORATION
-				15 Cuiwei Road, Cuiheng New District
-				zhongshan  Guangdong  528400
-				CN
-
-78-BB-88   (hex)		Maxio Technology (Hangzhou) Ltd.
-78BB88     (base 16)		Maxio Technology (Hangzhou) Ltd.
-				6F, Building C, No.459 Qianmo Road, Juguang Center
-				Hangzhou  Zhejiang  310051
-				CN
-
-A8-64-F1   (hex)		Intel Corporate
-A864F1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-10-6F-D9   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-106FD9     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-E0-67-81   (hex)		Dongguan Liesheng Electronic Co., Ltd.
-E06781     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
-				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
-				dongguan   guangdong  523000
-				CN
-
-00-03-24   (hex)		SANYO Techno Solutions Tottori Co., Ltd.
-000324     (base 16)		SANYO Techno Solutions Tottori Co., Ltd.
-				7-101 Tachikawa-cho
-				Tottori City    680-8634
-				JP
-
-B8-AE-1D   (hex)		Guangzhou Xingyi Electronic Technology Co.,Ltd
-B8AE1D     (base 16)		Guangzhou Xingyi Electronic Technology Co.,Ltd
-				Room 805-808, Room 801, Self-made Building 4, No. 1, 3 and 5, Kesheng Road, Guangzhou Private Science Park, No. 1633, Beitai Road, Baiyun District, Guangzhou
-				Guangzhou    51000
-				CN
-
-3C-CD-57   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-3CCD57     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-B8-DA-E8   (hex)		Huawei Device Co., Ltd.
-B8DAE8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-28-DE-A8   (hex)		zte corporation
-28DEA8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-80-8A-BD   (hex)		Samsung Electronics Co.,Ltd
-808ABD     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-D8-BE-65   (hex)		Amazon Technologies Inc.
-D8BE65     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-60-E3-2B   (hex)		Intel Corporate
-60E32B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-AC-EC-85   (hex)		eero inc.
-ACEC85     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-EC-A8-1F   (hex)		Technicolor CH USA Inc.
-ECA81F     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-C0-F8-27   (hex)		Rapidmax Technology Corporation
-C0F827     (base 16)		Rapidmax Technology Corporation
-				3F., No.531, Zhongzheng Rd. Xindian Dist.
-				New Taipei City    23148
-				TW
-
-B4-52-7E   (hex)		Sony Corporation
-B4527E     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-70-86-CE   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-7086CE     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-30-75-12   (hex)		Sony Corporation
-307512     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-C4-3A-BE   (hex)		Sony Corporation
-C43ABE     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-94-CE-2C   (hex)		Sony Corporation
-94CE2C     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-DC-8D-8A   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-DC8D8A     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-20-E7-B6   (hex)		Universal Electronics, Inc.
-20E7B6     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-50-0F-59   (hex)		STMicrolectronics International NV
-500F59     (base 16)		STMicrolectronics International NV
-				39, Chemin du Champ-des-Filles
-				 Geneva, Plan-les-Quates    1228
-				CH
-
-E4-2A-AC   (hex)		Microsoft Corporation
-E42AAC     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-D4-3D-F3   (hex)		Zyxel Communications Corporation
-D43DF3     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-20-57-9E   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-20579E     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-00-1E-45   (hex)		Sony Corporation
-001E45     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-0E-07   (hex)		Sony Corporation
-000E07     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-00-0A-D9   (hex)		Sony Corporation
-000AD9     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-00-23-F1   (hex)		Sony Corporation
-0023F1     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-1A-75   (hex)		Sony Corporation
-001A75     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-1C-A4   (hex)		Sony Corporation
-001CA4     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-24-5E-48   (hex)		Apple, Inc.
-245E48     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-C7-29   (hex)		Apple, Inc.
-08C729     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-84-CF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C884CF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-6A-10   (hex)		Whisker Labs - Ting
-806A10     (base 16)		Whisker Labs - Ting
-				12410 Milestone Center Dr, Suite 325
-				Germantown  MD  20876
-				US
-
-E0-23-D7   (hex)		Sleep Number
-E023D7     (base 16)		Sleep Number
-				1001 Third Avenue South
-				Minneapolis  MN  55404
-				US
-
-C4-C3-6B   (hex)		Apple, Inc.
-C4C36B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-1D-48   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-241D48     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-28-77-77   (hex)		zte corporation
-287777     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-91-9E   (hex)		Intel Corporate
-00919E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-64-DC-DE   (hex)		ZheJiang FuChunJiang Information Technology Co.,Ltd
-64DCDE     (base 16)		ZheJiang FuChunJiang Information Technology Co.,Ltd
-				608 Golf Road, Dongzhou Street, Fuyang District, Hangzhou City, Zhejiang Province, China
-				Hangzhou City  Zhejiang Province  311400
-				CN
-
-0C-E1-59   (hex)		Shenzhen iStartek Technology Co., Ltd.
-0CE159     (base 16)		Shenzhen iStartek Technology Co., Ltd.
-				Zone B, 4/F, Building A6, Qinghu Dongli Industrial Park, No. 416 Xuegang North Road, Longhua  District,
-				Shenzhen  Guangdong  518109
-				CN
-
-E8-A7-30   (hex)		Apple, Inc.
-E8A730     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-06-E3   (hex)		Apple, Inc.
-6006E3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-29-BD   (hex)		Team Group Inc
-A029BD     (base 16)		Team Group Inc
-				3F., No. 166 Jian 1st Rd., 
-				Zhonghe Dist.  New Taipei City,   235
-				TW
-
-98-B1-77   (hex)		LANDIS + GYR
-98B177     (base 16)		LANDIS + GYR
-				78th km Old National Road Athens-Corinth 
-				Corinth     20100
-				GR
-
-50-F9-08   (hex)		Wizardlab Co., Ltd.
-50F908     (base 16)		Wizardlab Co., Ltd.
-				#1603, 5, Gasan digital 1-ro, Geumcheon-gu, Seoul
-				Seoul    08594
-				KR
-
-50-C2-E8   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-50C2E8     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-30-09-C0   (hex)		Motorola Mobility LLC, a Lenovo Company
-3009C0     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-FC-2E-19   (hex)		China Mobile Group Device Co.,Ltd.
-FC2E19     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-70-1A-D5   (hex)		Openpath Security, Inc.
-701AD5     (base 16)		Openpath Security, Inc.
-				13428 Maxella Ave, #866
-				Marina Del Rey  CA  90292
-				US
-
-00-0E-82   (hex)		Infinity Tech
-000E82     (base 16)		Infinity Tech
-				PO Box 149, Greenwood
-				Perth  W. A.  6924
-				AU
-
-F0-B6-1E   (hex)		Intel Corporate
-F0B61E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C8-4D-44   (hex)		Shenzhen Jiapeng Huaxiang Technology Co.,Ltd
-C84D44     (base 16)		Shenzhen Jiapeng Huaxiang Technology Co.,Ltd
-				2nd floor, building 5, taihemei Industrial Zone, 128 Chunfeng Road, longbeiling community, Tangxia Town
-				Shenzhen  Guangdong  518109
-				CN
-
-B0-46-92   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B04692     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-AC-76-4C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-AC764C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-5C-58-E6   (hex)		Palo Alto Networks
-5C58E6     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-EC-94-CB   (hex)		Espressif Inc.
-EC94CB     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-40-40-6B   (hex)		Icomera
-40406B     (base 16)		Icomera
-				Odinsgatan 28
-				Gothenburg    411 03
-				SE
-
-EC-97-E0   (hex)		Hangzhou Ezviz Software Co.,Ltd.
-EC97E0     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
-				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-D0-B6-6F   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-D0B66F     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-7C-FD-6B   (hex)		Xiaomi Communications Co Ltd
-7CFD6B     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-18-87-40   (hex)		Xiaomi Communications Co Ltd
-188740     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-34-1C-F0   (hex)		Xiaomi Communications Co Ltd
-341CF0     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-2C-3A-91   (hex)		Huawei Device Co., Ltd.
-2C3A91     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-F7-05   (hex)		Huawei Device Co., Ltd.
-64F705     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-60-6E-E8   (hex)		Xiaomi Communications Co Ltd
-606EE8     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-F0-5E-CD   (hex)		Texas Instruments
-F05ECD     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F8-38-69   (hex)		LG Electronics
-F83869     (base 16)		LG Electronics
-				Science Park W5, 10, Magokjungang 10-ro, Gangseo-gu
-				Seoul    07796
-				KR
-
-00-16-E8   (hex)		Lumissil Microsystems
-0016E8     (base 16)		Lumissil Microsystems
-				1623 Buckeye Dr.
-				Milpitas  CA  95035
-				US
-
-60-CE-41   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60CE41     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-17-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-281709     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-DF-B8   (hex)		Shenzhen Unionmemory Information System Limited
-5CDFB8     (base 16)		Shenzhen Unionmemory Information System Limited
-				Factory Flat D24/F-02, Dong Jiao Tou, Houhai Road, Shekou, Nan Shan District
-				Shenzhen  Guangdong  518067
-				CN
-
-E0-0A-F6   (hex)		Liteon Technology Corporation
-E00AF6     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-B4-0E-CF   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
-B40ECF     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
-				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
-				Nanjing  Jiangsu  211800
-				CN
-
-E0-C5-8F   (hex)		China Mobile IOT Company Limited
-E0C58F     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-2C-05-47   (hex)		Shenzhen Phaten Tech. LTD
-2C0547     (base 16)		Shenzhen Phaten Tech. LTD
-				C-6 ideamonto industril 7002 Songbai Road Guangming District Shenzhen City Guangdong, China
-				Shenzhen    518108
-				CN
-
-2C-1A-05   (hex)		Cisco Systems, Inc
-2C1A05     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-50-D1   (hex)		Murata Manufacturing Co., Ltd.
-9C50D1     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-14-00-20   (hex)		 LongSung Technology (Shanghai) Co.,Ltd.   
-140020     (base 16)		 LongSung Technology (Shanghai) Co.,Ltd.   
-				 Room 606, Block B, Bldg. 1, No. 3000 Longdong Avenue., Zhangjiang Hi-Tech Park, Pudong District
-				ShangHai    201203
-				CN
-
-44-17-93   (hex)		Espressif Inc.
-441793     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-50-3D-EB   (hex)		Zhejiang Tmall Technology Co., Ltd.
-503DEB     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-30-B9-30   (hex)		zte corporation
-30B930     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-94-98-69   (hex)		zte corporation
-949869     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-7C-66-EF   (hex)		Hon Hai Precision IND.CO.,LTD
-7C66EF     (base 16)		Hon Hai Precision IND.CO.,LTD
-				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
-				TAIPEI  TAIWAN  33859
-				CN
-
-78-50-05   (hex)		MOKO TECHNOLOGY Ltd
-785005     (base 16)		MOKO TECHNOLOGY Ltd
-				2F, Building1,No.37 Xiaxintang Xintang village,Fucheng Street,Longhua Distric
-				Shenzhen  Guangdong  518110
-				CN
-
-F8-7F-A5   (hex)		GREATEK
-F87FA5     (base 16)		GREATEK
-				ESTRADA MUNICIPAL PEDRO R SILVA
-				EXTREMA  MG  37640000
-				BR
-
-18-E1-DE   (hex)		Chengdu ChipIntelli Technology Co., Ltd
-18E1DE     (base 16)		Chengdu ChipIntelli Technology Co., Ltd
-				No. 106, 1st floor, building 6, No. 1480, North Tianfu Avenue, Chengdu high tech Zone
-				Chengdu  Sichuan   610041
-				CN
-
-8C-F6-81   (hex)		Silicon Laboratories
-8CF681     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-7C-84-37   (hex)		China Post Communications Equipment Co., Ltd.
-7C8437     (base 16)		China Post Communications Equipment Co., Ltd.
-				6 / F, block D, No.156, Beijing International Financial Building, Fuxingmennei street,Xicheng District
-				Beijing  Beijing  100031
-				CN
-
-B8-4D-43   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-B84D43     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-AC-64-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC6490     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-4A-63   (hex)		TPV Display Technology(Xiamen) Co.,Ltd.
-A84A63     (base 16)		TPV Display Technology(Xiamen) Co.,Ltd.
-				No.1, Xianghai Road, Xiamen Torch Hi-Tech Industrial Development Zone, China
-				Xiamen  Fujian  361101
-				CN
-
-24-3F-AA   (hex)		Huawei Device Co., Ltd.
-243FAA     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D8-67-D3   (hex)		Huawei Device Co., Ltd.
-D867D3     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-48-47-4B   (hex)		Huawei Device Co., Ltd.
-48474B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-80-6F-1C   (hex)		Huawei Device Co., Ltd.
-806F1C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C8-9F-1A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C89F1A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-68-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D86852     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-E3-42   (hex)		Tuya Smart Inc.
-84E342     (base 16)		Tuya Smart Inc.
-				FLAT/RM 806 BLK ? 8/F CHEUNG SHA WAN PLAZA 833 CHEUNG SHA WAN ROAD KL
-				hongkong  Hong Kong  999077
-				CN
-
-E0-A2-58   (hex)		Wanbang Digital Energy Co.,Ltd
-E0A258     (base 16)		Wanbang Digital Energy Co.,Ltd
-				NO.39 Longhui Road,Wujin District
-				Changzhou    213100
-				CN
-
-4C-BC-E9   (hex)		LG Innotek
-4CBCE9     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-74-5C-FA   (hex)		Shenzhen Shunrui Gaojie Technology Co., Ltd.
-745CFA     (base 16)		Shenzhen Shunrui Gaojie Technology Co., Ltd.
-				502,Building A,No.18,Gongye 2nd Road,Dakan Industrial Zone,Dakan community,Xili street,Nanshan District
-				Shenzhen  Guangdong   518055
-				CN
-
-94-A4-08   (hex)		Shenzhen Trolink Technology CO, LTD
-94A408     (base 16)		Shenzhen Trolink Technology CO, LTD
-				201 B building 4 shijie, Chashu industry 505 block, Baoan airport Sanwei community, Hangcheng street Baoan area.
-				Shenzhen  GuangDong  518000
-				CN
-
-D0-F8-65   (hex)		ITEL MOBILE LIMITED
-D0F865     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-38-5C-76   (hex)		PLANTRONICS, INC.
-385C76     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-7C-C1-77   (hex)		INGRAM MICRO SERVICES
-7CC177     (base 16)		INGRAM MICRO SERVICES
-				100 CHEMIN DE BAILLOT
-				MONTAUBAN    82000
-				FR
-
-78-76-D9   (hex)		EXARA Group
-7876D9     (base 16)		EXARA Group
-				Andropova pr. 18 1
-				Moscow    115432
-				RU
-
-84-A9-38   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-84A938     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				No.3188,YunGu Road?Hefei   Economic and Technological   Development Area
-				HEFEI  ANHUI  230601
-				CN
-
-3C-9F-C3   (hex)		Beijing Sinead Technology Co., Ltd. 
-3C9FC3     (base 16)		Beijing Sinead Technology Co., Ltd. 
-				Room 504,Block A, New material Building, Yongfeng industrial, Haiding District, Beijing.China
-				Beijing  Beijing  100094
-				CN
-
-60-8F-A4   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-608FA4     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-38-FD-F8   (hex)		Cisco Systems, Inc
-38FDF8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-8C-47   (hex)		Tenstorrent Inc
-208C47     (base 16)		Tenstorrent Inc
-				150 Ferrand Dr #901
-				Toronto  ON  M3C 3E5
-				CA
-
-5C-2A-EF   (hex)		  r2p Asia-Pacific Pty Ltd
-5C2AEF     (base 16)		  r2p Asia-Pacific Pty Ltd
-				Unit 5, 18 Lexington Avenue, Bella Vista
-				Sydney  NSW  2153
-				AU
-
-E4-93-6A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-E4936A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-48-77-BD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4877BD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-F8-56-C3   (hex)		zte corporation
-F856C3     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-7C-FC-16   (hex)		Apple, Inc.
-7CFC16     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-B9-45   (hex)		Apple, Inc.
-88B945     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-80-E7   (hex)		Leonardo UK Ltd
-0080E7     (base 16)		Leonardo UK Ltd
-				Christopher Martin Road
-				Basildon  Essex   SS14 3EL
-				GB
-
-10-32-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-10321D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-BE-83   (hex)		Apple, Inc.
-B0BE83     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-F4-CA   (hex)		Apple, Inc.
-DCF4CA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-EF-3A   (hex)		Sichuan AI-Link Technology Co., Ltd.
-18EF3A     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-A0-FF-22   (hex)		SHENZHEN APICAL TECHNOLOGY CO., LTD
-A0FF22     (base 16)		SHENZHEN APICAL TECHNOLOGY CO., LTD
-				9/F.B Building,Tsinghua Unis Infoport ,LangShan Road,North  District,Hi-tech Industrial Park,Nanshan
-				Shenzhen    518000
-				CN
-
-00-04-1B   (hex)		Bridgeworks Ltd.
-00041B     (base 16)		Bridgeworks Ltd.
-				Unit 1 Aero Centre  Ampress Park
-				Lymington  Hampshire  SO41 8QF
-				GB
-
-6C-D3-EE   (hex)		ZIMI CORPORATION
-6CD3EE     (base 16)		ZIMI CORPORATION
-				Room A913, 159 Chengjiang Road
-				Jiangyin City  Jiangsu Province  214400
-				CN
-
-E4-28-05   (hex)		Pivotal Optics
-E42805     (base 16)		Pivotal Optics
-				125 Wolf Road Suite 315
-				Albany  NY  12205
-				US
-
-5C-02-14   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-5C0214     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-78-5E-A2   (hex)		Sunitec Enterprise Co.,Ltd
-785EA2     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-38-1F-8D   (hex)		Tuya Smart Inc.
-381F8D     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-04-CD-15   (hex)		Silicon Laboratories
-04CD15     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin    78701
-				US
-
-A0-B5-3C   (hex)		Technicolor Delivery Technologies Belgium NV
-A0B53C     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-70-09-71   (hex)		Samsung Electronics Co.,Ltd
-700971     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-D0-1B-49   (hex)		Samsung Electronics Co.,Ltd
-D01B49     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-29-EF   (hex)		Qingdao Haier Technology Co.,Ltd
-3429EF     (base 16)		Qingdao Haier Technology Co.,Ltd
-				A01, No.1, Haier Road, Laoshan District,
-				Qingdao  Shan dong  266000
-				CN
-
-54-1D-61   (hex)		YEESTOR Microelectronics Co., Ltd
-541D61     (base 16)		YEESTOR Microelectronics Co., Ltd
-				7th Floor, Block A1, Digital Technology Park, Gaoxin 7th Road South,
-				Shenzhen    518057
-				CN
-
-34-53-D2   (hex)		Sagemcom Broadband SAS
-3453D2     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-C4-BD-E5   (hex)		Intel Corporate
-C4BDE5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-30-35-C5   (hex)		Huawei Device Co., Ltd.
-3035C5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-9E-31   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-649E31     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-F8-20-A9   (hex)		Huawei Device Co., Ltd.
-F820A9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-24-CD-8D   (hex)		Murata Manufacturing Co., Ltd.
-24CD8D     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-34-AA-31   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-34AA31     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-48-BD-4A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48BD4A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-D4-E0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A8D4E0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-40-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A0406F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-4F-1A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-004F1A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-69-8E   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-24698E     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-74-33-A6   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-7433A6     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-2C-0D-A7   (hex)		Intel Corporate
-2C0DA7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-BC-2C-E6   (hex)		Cisco Systems, Inc
-BC2CE6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-CC-ED-4D   (hex)		Cisco Systems, Inc
-CCED4D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-FC-5F-49   (hex)		Zhejiang Dahua Technology Co., Ltd.
-FC5F49     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-6C-B0-FD   (hex)		Shenzhen Xinghai Iot Technology Co.,Ltd
-6CB0FD     (base 16)		Shenzhen Xinghai Iot Technology Co.,Ltd
-				South 8th Road, science and Technology Park, Nanshan District
-				Shenzhen    518063
-				CN
-
-D4-63-DE   (hex)		vivo Mobile Communication Co., Ltd.
-D463DE     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-A8-5B-F7   (hex)		Aruba, a Hewlett Packard Enterprise Company
-A85BF7     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-64-2C-0F   (hex)		vivo Mobile Communication Co., Ltd.
-642C0F     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-30-AF-CE   (hex)		vivo Mobile Communication Co., Ltd.
-30AFCE     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-DC-8C-1B   (hex)		vivo Mobile Communication Co., Ltd.
-DC8C1B     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-0C-90-43   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-0C9043     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-18-E7-77   (hex)		vivo Mobile Communication Co., Ltd.
-18E777     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-6C-D9-4C   (hex)		vivo Mobile Communication Co., Ltd.
-6CD94C     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-54-1F-8D   (hex)		zte corporation
-541F8D     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-2C-F1-BB   (hex)		zte corporation
-2CF1BB     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-CC-71-90   (hex)		VIETNAM POST AND TELECOMMUNICATION INDUSTRY TECHNOLOGY JOINT STOCK COMPANY
-CC7190     (base 16)		VIETNAM POST AND TELECOMMUNICATION INDUSTRY TECHNOLOGY JOINT STOCK COMPANY
-				HIGH TECH INDUSTRIAL ZONE I,HOA LAC, HIGH TECH PARK, HA BANG, THACH THAT
-				HANOI  Hanoi  100000
-				VN
-
-B0-F7-C4   (hex)		Amazon Technologies Inc.
-B0F7C4     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-18-A9-A6   (hex)		Nebra Ltd
-18A9A6     (base 16)		Nebra Ltd
-				Unit 4, Bells Yew Green Business Court
-				Bells Yew Green  East Sussex  TN3 9BJ
-				GB
-
-8C-56-46   (hex)		LG Electronics
-8C5646     (base 16)		LG Electronics
-				222 LG-ro, Jinwi-Myeon
-				Pyeongtaek-si  Gyeonggi-do  17709
-				KR
-
-DC-2C-6E   (hex)		Routerboard.com
-DC2C6E     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-14-00-E9   (hex)		Mitel Networks Corporation
-1400E9     (base 16)		Mitel Networks Corporation
-				4000 Innovation Drive
-				Kanata  Ontario  K2K3K1
-				CA
-
-AC-AC-E2   (hex)		CHANGHONG (HONGKONG) TRADING LIMITED
-ACACE2     (base 16)		CHANGHONG (HONGKONG) TRADING LIMITED
-				Unit 1412, 14/F., West Tower, Shun Tak Centre, 168-200 Connaught Road Central, HongKong
-				HONG KONG  HONG KONG   999077
-				HK
-
-4C-8D-53   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4C8D53     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-7D-40   (hex)		Powervision Tech Inc.
-547D40     (base 16)		Powervision Tech Inc.
-				Zone E,Ocean Venture Valley, No.40, Yangguang Rd, Nanhai new District
-				Weihai  Shandong  264200
-				CN
-
-C0-D7-AA   (hex)		Arcadyan Corporation
-C0D7AA     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-6C-0F-0B   (hex)		China Mobile Group Device Co.,Ltd.
-6C0F0B     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-D4-B7-D0   (hex)		Ciena Corporation
-D4B7D0     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-20-20-27   (hex)		Shenzhen Sundray Technologies Company Limited
-202027     (base 16)		Shenzhen Sundray Technologies Company Limited
-				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
-				Shenzhen  Guangdong  518057
-				CN
-
-C8-41-8A   (hex)		Samsung Electronics.,LTD
-C8418A     (base 16)		Samsung Electronics.,LTD
-				129, Samsung-ro, Yeongtong-gu
-				Suwon  Gyeonggi-Do  443-742
-				KR
-
-4C-AB-F8   (hex)		ASKEY COMPUTER CORP
-4CABF8     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-F8-9E-94   (hex)		Intel Corporate
-F89E94     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-48-BE   (hex)		Amazon Technologies Inc.
-1848BE     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-68-22-8E   (hex)		Juniper Networks
-68228E     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-68-67-25   (hex)		Espressif Inc.
-686725     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-80-B7-45   (hex)		The Silk Technologies ILC LTD
-80B745     (base 16)		The Silk Technologies ILC LTD
-				Haozma 1
-				Yoqneam    20692
-				IL
-
-C4-03-A8   (hex)		Intel Corporate
-C403A8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-64-42-12   (hex)		Shenzhen Water World Information Co.,Ltd.
-644212     (base 16)		Shenzhen Water World Information Co.,Ltd.
-				Room 201, No.26, Yifenghua Innovation Industrial Park, Xinshi Community, Dalang Subdistrict, Longhua District.
-				Shenzhen  Guangdong  518000
-				CN
-
-88-6E-E1   (hex)		Erbe Elektromedizin GmbH
-886EE1     (base 16)		Erbe Elektromedizin GmbH
-				Waldhoernlestrasse 17
-				Tuebingen  Baden-Wuerttemberg  72072
-				DE
-
-AC-8B-A9   (hex)		Ubiquiti Networks Inc.
-AC8BA9     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-C4-75-AB   (hex)		Intel Corporate
-C475AB     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-0C-B0-88   (hex)		AITelecom
-0CB088     (base 16)		AITelecom
-				1018,hanshin IT Tower Digital-ro 272 Guro-gu
-				seoul    08389
-				KR
-
-DC-97-3A   (hex)		Verana Networks
-DC973A     (base 16)		Verana Networks
-				100 Apollo Drive, Suite 201
-				Chelmsford  MA  01824
-				US
-
-20-66-FD   (hex)		CONSTELL8 NV
-2066FD     (base 16)		CONSTELL8 NV
-				Sint-Bernardse steenweg 72
-				Hemiksem    2620
-				BE
-
-9C-00-D3   (hex)		SHENZHEN IK WORLD Technology Co., Ltd
-9C00D3     (base 16)		SHENZHEN IK WORLD Technology Co., Ltd
-				Aike intelligent industrial park, 167 gongchang Road, Xinhu street, Guangming New District,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-28-2D-06   (hex)		AMPAK Technology,Inc.
-282D06     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-20-2B-20   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-202B20     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-88-4D-7C   (hex)		Apple, Inc.
-884D7C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-FE-9D   (hex)		Apple, Inc.
-A8FE9D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-A3-09   (hex)		Apple, Inc.
-A0A309     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-50-D9   (hex)		Apple, Inc.
-5C50D9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-0A-08   (hex)		Alps Alpine
-000A08     (base 16)		Alps Alpine
-				20-1 Yoshima-Kogyodanchi
-				iwaki-city  Fukushima  970-1192
-				JP
-
-E8-CA-C8   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-E8CAC8     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-D4-19-F6   (hex)		NXP Semiconductor (Tianjin) LTD.
-D419F6     (base 16)		NXP Semiconductor (Tianjin) LTD.
-				No.15 Xinghua Avenue, Xiqing Economic Development Area
-				Tianjin    300385
-				CN
-
-A0-4C-0C   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-A04C0C     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-40-AC-BF   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-40ACBF     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-64-BF-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-64BF6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-49-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-30499E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-FC-76-92   (hex)		Semptian Co.,Ltd.
-FC7692     (base 16)		Semptian Co.,Ltd.
-				Floor 19, Block 1A,  Phase 1, International Innovation Valley, Xili Community, Nanshan District
-				Shenzhen  Guangdong  518052
-				CN
-
-FC-AF-BE   (hex)		TireCheck GmbH
-FCAFBE     (base 16)		TireCheck GmbH
-				Schmelzofenvorstadt 33
-				Heidenheim/Brenz  Baden-Württemberg  89520
-				DE
-
-9C-EC-61   (hex)		Huawei Device Co., Ltd.
-9CEC61     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B0-33-66   (hex)		vivo Mobile Communication Co., Ltd.
-B03366     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-7C-C2-25   (hex)		Samsung Electronics Co.,Ltd
-7CC225     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-74-70-69   (hex)		Huawei Device Co., Ltd.
-747069     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-14-FB-70   (hex)		Huawei Device Co., Ltd.
-14FB70     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-84-D3-D5   (hex)		Huawei Device Co., Ltd.
-84D3D5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D4-13-F8   (hex)		Peplink International Ltd.
-D413F8     (base 16)		Peplink International Ltd.
-				A5, 5/F, HK Spinners Industrial Building, Phase 6, 481 Castle Peak Road
-				Cheung Sha Wan  Kowloon  0
-				HK
-
-C8-5A-CF   (hex)		HP Inc.
-C85ACF     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-9C-1C-6D   (hex)		HEFEI DATANG STORAGE TECHNOLOGY CO.,LTD
-9C1C6D     (base 16)		HEFEI DATANG STORAGE TECHNOLOGY CO.,LTD
-				7F BLOCK C J2 BUILDING INNOVATION PARK HIGH TECH DISTRICT
-				HEFEI  AN HUI PROVINCE PR CHINA  220038
-				CN
-
-FC-29-E3   (hex)		Infinix mobility limited
-FC29E3     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-88-C2-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88C227     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-54-D9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8054D9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-B4-23   (hex)		Amazon Technologies Inc.
-48B423     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-70-70-AA   (hex)		Amazon Technologies Inc.
-7070AA     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-9C-85-66   (hex)		Wingtech Mobile Communications Co.,Ltd.
-9C8566     (base 16)		Wingtech Mobile Communications Co.,Ltd.
-				1F-3F,Yinfeng Mansion,No.5097 of Luosha Road,Luohu District
-				Shenzhen    518011
-				CN
-
-94-A9-A8   (hex)		Texas Instruments
-94A9A8     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-64-2F-C7   (hex)		New H3C Technologies Co., Ltd
-642FC7     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-60-26-AA   (hex)		Cisco Systems, Inc
-6026AA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-5C-31-92   (hex)		Cisco Systems, Inc
-5C3192     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A8-3A-48   (hex)		Ubiqcom India Pvt Ltd
-A83A48     (base 16)		Ubiqcom India Pvt Ltd
-				First Floor, D-92, Sector-63
-				Noida  Uttar Pradesh  201301
-				IN
-
-F4-13-99   (hex)		Aerospace new generation communications Co.,Ltd
-F41399     (base 16)		Aerospace new generation communications Co.,Ltd
-				Building 3, No. 36 Xiyong Avenue
-				CHONG QING    401332
-				CN
-
-64-1A-BA   (hex)		Dryad Networks GmbH
-641ABA     (base 16)		Dryad Networks GmbH
-				Eisenbahnstr. 37
-				Eberswalde  Brandenburg  16225
-				DE
-
-34-94-54   (hex)		Espressif Inc.
-349454     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-A4-43-8C   (hex)		ARRIS Group, Inc.
-A4438C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-94-DE-B8   (hex)		Silicon Laboratories
-94DEB8     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-04-0D-84   (hex)		Silicon Laboratories
-040D84     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-4C-19-5D   (hex)		Sagemcom Broadband SAS
-4C195D     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-80-C2   (hex)		IEEE 802.1 Chair
-0080C2     (base 16)		IEEE 802.1 Chair
-				 c/o RAC Administrator , IEEE
-				Piscataway  NJ  08554
-				US
-
-48-02-86   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-480286     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-D8-4A-2B   (hex)		zte corporation
-D84A2B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D0-F9-9B   (hex)		zte corporation
-D0F99B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-98-67-2E   (hex)		Skullcandy
-98672E     (base 16)		Skullcandy
-				6301 N. LANDMARK DRIVE
-				Park City    84098
-				US
-
-D4-35-38   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-D43538     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-10-CE-02   (hex)		Amazon Technologies Inc.
-10CE02     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-D8-53-9A   (hex)		Juniper Networks
-D8539A     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-54-F8-2A   (hex)		u-blox AG
-54F82A     (base 16)		u-blox AG
-				Zuercherstrasse 68
-				Thalwil    8800
-				CH
-
-64-CF-13   (hex)		Weigao Nikkiso(Weihai)Dialysis Equipment Co.,Ltd
-64CF13     (base 16)		Weigao Nikkiso(Weihai)Dialysis Equipment Co.,Ltd
-				No.20,Xingshan Road,Wego Industrial Zone,Chucun,Weihai,Shandong,China
-				Weihai  Shandong  264209
-				CN
-
-8C-49-7A   (hex)		Extreme Networks, Inc.
-8C497A     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-40-32-9D   (hex)		Union Image Co.,Ltd
-40329D     (base 16)		Union Image Co.,Ltd
-				Building A2, Ding Bao Hong Green High Garden, Shiyan Street, Bao 'an District
-				SHENZHEN  GuangDong  518108
-				CN
-
-4C-77-13   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-4C7713     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-6C-4B-B4   (hex)		HUMAX Co., Ltd.
-6C4BB4     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-58-9B-F7   (hex)		Hefei Radio Communication Technology Co., Ltd 
-589BF7     (base 16)		Hefei Radio Communication Technology Co., Ltd 
-				 No.108, YinXing Road, High-tech Development Zone 
-				Hefei  Anhui  230088
-				CN
-
-50-E9-DF   (hex)		Quectel Wireless Solutions Co.,Ltd.
-50E9DF     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-44-1B-88   (hex)		Apple, Inc.
-441B88     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-04-5F   (hex)		Apple, Inc.
-80045F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-3E-53   (hex)		Apple, Inc.
-9C3E53     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-89-F3   (hex)		Apple, Inc.
-C889F3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-FA-23   (hex)		Huawei Device Co., Ltd.
-E8FA23     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-EC-3A-52   (hex)		Huawei Device Co., Ltd.
-EC3A52     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-60-10-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60109E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-EA-30   (hex)		Samsung Electronics Co.,Ltd
-44EA30     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-2F-9D   (hex)		Liteon Technology Corporation
-9C2F9D     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-A4-F3-3B   (hex)		zte corporation
-A4F33B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-30-E7-BC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-30E7BC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-7C-B5-66   (hex)		Intel Corporate
-7CB566     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-90-11-95   (hex)		Amazon Technologies Inc.
-901195     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-10-B9-C4   (hex)		Apple, Inc.
-10B9C4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-7D-5B   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
-CC7D5B     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
-				No. 1500 Zuchongzhi Rd, Building #3
-				Shanghai    201203
-				CN
-
-74-95-52   (hex)		Xuzhou WIKA Electronics Control Technology Co., Ltd.
-749552     (base 16)		Xuzhou WIKA Electronics Control Technology Co., Ltd.
-				No.11 BaoLianSi Road Xuzhou Economic Development Zone
-				Xuzhou  JiangSu,PRC  221001
-				CN
-
-A8-13-06   (hex)		vivo Mobile Communication Co., Ltd.
-A81306     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-1C-34-F1   (hex)		Silicon Laboratories
-1C34F1     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-B4-31-61   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-B43161     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-4C-FE-2E   (hex)		DongGuan Siyoto Electronics Co., Ltd       
-4CFE2E     (base 16)		DongGuan Siyoto Electronics Co., Ltd       
-				Hecheng Industrial District, QiaoTou Town
-				DongGuan City  Guangdong  523520
-				CN
-
-84-5F-04   (hex)		Samsung Electronics Co.,Ltd
-845F04     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F8-C1-16   (hex)		Juniper Networks
-F8C116     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-EC-9B-2D   (hex)		China Mobile Group Device Co.,Ltd.
-EC9B2D     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-AC-93-C4   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-AC93C4     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-48-CA-C6   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-48CAC6     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
-				Huizhou  Guangdong  516025
-				CN
-
-4C-63-EB   (hex)		Application Solutions (Electronics and Vision) Ltd
-4C63EB     (base 16)		Application Solutions (Electronics and Vision) Ltd
-				Unit 2 York Road, Burgess Hill
-				England  West Sussex, England, RH15 9TT  RH15 9TT
-				GB
-
-60-8C-DF   (hex)		Beamtrail-Sole Proprietorship
-608CDF     (base 16)		Beamtrail-Sole Proprietorship
-				Level 7 Aldar HQ
-				Abu Dhabi  Abu Dhabi  29836
-				AE
-
-D0-1B-1F   (hex)		OHSUNG
-D01B1F     (base 16)		OHSUNG
-				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
-				GUMI  GYEONG BUK  730-030
-				KR
-
-0C-4E-C0   (hex)		Maxlinear Inc
-0C4EC0     (base 16)		Maxlinear Inc
-				1060 Rincon Circle 
-				San Jose  CA  95131
-				US
-
-FC-38-C4   (hex)		China Grand Communications Co.,Ltd.
-FC38C4     (base 16)		China Grand Communications Co.,Ltd.
-				2712, Block A, Phase II, Qianhai Economic and Trade Center, China Merchants Group, No. 3041, Yihai Avenue, Nanshan street, Shenzhen Hong Kong cooperation zone, Shenzhen
-				Shenzhen  Guangdong  518066
-				CN
-
-5C-F5-1A   (hex)		Zhejiang Dahua Technology Co., Ltd.
-5CF51A     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-D8-AA-59   (hex)		Tonly Technology Co. Ltd 
-D8AA59     (base 16)		Tonly Technology Co. Ltd 
-				Section 37, Zhongkai Hi-Tech Development Zone
-				Huizhou  Guangdong  516006
-				CN
-
-2C-FD-B3   (hex)		Tonly Technology Co. Ltd 
-2CFDB3     (base 16)		Tonly Technology Co. Ltd 
-				Section 37, Zhongkai Hi-Tech Development Zone
-				Huizhou  Guangdong  516006
-				CN
-
-CC-8C-BF   (hex)		Tuya Smart Inc.
-CC8CBF     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-04-CF-4B   (hex)		Intel Corporate
-04CF4B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C0-18-03   (hex)		HP Inc.
-C01803     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-2C-78-4C   (hex)		Iton Technology Corp.
-2C784C     (base 16)		Iton Technology Corp.
-				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
-				Shenzhen  Guangdong   518116
-				CN
-
-48-87-59   (hex)		Xiaomi Communications Co Ltd
-488759     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-AC-1E-9E   (hex)		Xiaomi Communications Co Ltd
-AC1E9E     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-E0-AE-A2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E0AEA2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-45-6F   (hex)		SHENZHEN ONEGA TECHNOLOGY CO.,LTD
-44456F     (base 16)		SHENZHEN ONEGA TECHNOLOGY CO.,LTD
-				2 / F, building 3, zone B, Xusheng Xifa, Bao'an District, Shenzhen
-				Shenzhen  Guangdong  518126
-				CN
-
-34-97-6F   (hex)		Rootech, Inc.
-34976F     (base 16)		Rootech, Inc.
-				102-611 Digital Empire2, 88, Sin won-ro
-				Yeongtong-gu, Suwon  Gyeonggi-do  16681
-				KR
-
-E8-FD-F8   (hex)		Shanghai High-Flying Electronics  Technology Co., Ltd
-E8FDF8     (base 16)		Shanghai High-Flying Electronics  Technology Co., Ltd
-				Room 1002,#1Building,No.3000 Longdong Avenue,Pudong
-				Shanghai  Shanghai  201202
-				CN
-
-6C-6C-0F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C6C0F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-97-A9   (hex)		Ericsson AB
-F897A9     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-30-B2-16   (hex)		Hitachi Energy
-30B216     (base 16)		Hitachi Energy
-				Kallstadter Strasse 1
-				Mannheim    68309
-				DE
-
-98-CA-20   (hex)		Shanghai SIMCOM Ltd.
-98CA20     (base 16)		Shanghai SIMCOM Ltd.
-				 Building A, SIM Technology Building, No.633, Jinzhong Road, Changning District
-				Shanghai    200335
-				CN
-
-DC-15-2D   (hex)		China Mobile Group Device Co.,Ltd.
-DC152D     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-00-D8-A2   (hex)		Huawei Device Co., Ltd.
-00D8A2     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-6B-1B   (hex)		Huawei Device Co., Ltd.
-DC6B1B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-34-28-40   (hex)		Apple, Inc.
-342840     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-E7-B0   (hex)		Apple, Inc.
-18E7B0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-57-8A   (hex)		Apple, Inc.
-50578A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-9F-DD   (hex)		Huawei Device Co., Ltd.
-D49FDD     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D0-6D-C9   (hex)		Sagemcom Broadband SAS
-D06DC9     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-08-57-FB   (hex)		Amazon Technologies Inc.
-0857FB     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-D4-FB-8E   (hex)		Apple, Inc.
-D4FB8E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-DE-28   (hex)		Apple, Inc.
-B0DE28     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-13-1D   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-7C131D     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-D8-33-B7   (hex)		Sagemcom Broadband SAS
-D833B7     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-44-0C-EE   (hex)		Robert Bosch Elektronika Kft
-440CEE     (base 16)		Robert Bosch Elektronika Kft
-				Robert Bosch u. 1.
-				Hatvan  Heves County  3000
-				HU
-
-D8-50-A1   (hex)		Hunan Danuo Technology Co.,LTD
-D850A1     (base 16)		Hunan Danuo Technology Co.,LTD
-				No. 89, Guoqing South Road, Beihu District, Chenzhou City, Hunan Province (in Xiangnan International Logistics Park)
-				Hunan    423000
-				CN
-
-44-1A-AC   (hex)		Elektrik Uretim AS EOS
-441AAC     (base 16)		Elektrik Uretim AS EOS
-				Mustafa Kemal Mahallesi No:166 Çankaya
-				Ankara    06520
-				TR
-
-48-51-D0   (hex)		Jiangsu Xinsheng Intelligent Technology Co., Ltd. 
-4851D0     (base 16)		Jiangsu Xinsheng Intelligent Technology Co., Ltd. 
-				18th Floor,Inno laser Building,18-69 Changwu Mid Road,Changzhou Science & Education Town,Wujin District,Changzhou,Jiangsu213000,China
-				Changzhou  Jiangsu  213000
-				CN
-
-80-77-A4   (hex)		TECNO MOBILE LIMITED
-8077A4     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-7C-6C-F0   (hex)		Shenzhen TINNO Mobile Technology Corp.
-7C6CF0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
-				Shenzhen   guangdong  518053
-				CN
-
-00-C3-0A   (hex)		Xiaomi Communications Co Ltd
-00C30A     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-88-52-EB   (hex)		Xiaomi Communications Co Ltd
-8852EB     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-B4-28-75   (hex)		Futecho Solutions Private Limited
-B42875     (base 16)		Futecho Solutions Private Limited
-				504, Commercial Complex, Savitri Cinema Compound, GK2
-				New Delhi    110048
-				IN
-
-30-23-64   (hex)		Nokia Shanghai Bell Co., Ltd.
-302364     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-0C-1C-1A   (hex)		eero inc.
-0C1C1A     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-00-A0-A2   (hex)		B810 S.R.L.
-00A0A2     (base 16)		B810 S.R.L.
-				Via E. Lazzaretti 2/1
-				Reggio Emilia (RE)    42122
-				IT
-
-38-68-BE   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-3868BE     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-DC-9A-7D   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
-DC9A7D     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-28-A5-3F   (hex)		vivo Mobile Communication Co., Ltd.
-28A53F     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-8C-49-B6   (hex)		vivo Mobile Communication Co., Ltd.
-8C49B6     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-84-F1-D0   (hex)		EHOOME IOT PRIVATE LIMITED
-84F1D0     (base 16)		EHOOME IOT PRIVATE LIMITED
-				A-13, SECTOR-83, 
-				NOIDA  UTTAR PRADESH  201301
-				IN
-
-20-8B-D1   (hex)		NXP Semiconductor (Tianjin) LTD.
-208BD1     (base 16)		NXP Semiconductor (Tianjin) LTD.
-				No.15 Xinghua Avenue, Xiqing Economic Development Area
-				Tianjin    300385
-				CN
-
-00-0F-A0   (hex)		Canon Korea Inc.
-000FA0     (base 16)		Canon Korea Inc.
-				607, Teheran-ro, Gangnam-gu
-				Seoul  Gangnam-gu  06173
-				KR
-
-30-BB-7D   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-30BB7D     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-6C-67-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C67EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-69-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88693D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-99-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-00991D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-CB-36   (hex)		Belden Singapore Pte. Ltd.
-30CB36     (base 16)		Belden Singapore Pte. Ltd.
-				151 Lorong Chuan #05-01 New Tech Park Singapore
-				Singapore    556741
-				SG
-
-B8-3F-D2   (hex)		Mellanox Technologies, Inc.
-B83FD2     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-28-3E-0C   (hex)		Preferred Robotics, Inc.
-283E0C     (base 16)		Preferred Robotics, Inc.
-				Otemachi Bldg. 1-6-1 Otemachi
-				 Chiyoda-ku  Tokyo  100-0004
-				JP
-
-8C-17-59   (hex)		Intel Corporate
-8C1759     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-04-BC-9F   (hex)		Calix Inc.
-04BC9F     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-6C-A4-01   (hex)		essensys plc
-6CA401     (base 16)		essensys plc
-				Aldgate Tower, Leman Street
-				London    E1 8FA
-				GB
-
-34-92-C2   (hex)		Square Route Co., Ltd.
-3492C2     (base 16)		Square Route Co., Ltd.
-				Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku
-				Tokyo  Tokyo  108-0075
-				JP
-
-34-BD-20   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
-34BD20     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
-				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
-				Hangzhou    310052
-				CN
-
-64-C2-69   (hex)		eero inc.
-64C269     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-B0-4A-6A   (hex)		Samsung Electronics Co.,Ltd
-B04A6A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-79-8D   (hex)		Samsung Electronics Co.,Ltd
-A8798D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-5C-ED-F4   (hex)		Samsung Electronics Co.,Ltd
-5CEDF4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-28-3D-C2   (hex)		Samsung Electronics Co.,Ltd
-283DC2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-6E-6D   (hex)		EM Microelectronic
-BC6E6D     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-00-D4-9E   (hex)		Intel Corporate
-00D49E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-CC-F3-05   (hex)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
-CCF305     (base 16)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
-				Second floor, Building A, FengHangAvenue, Hangcheng Street, Bao'an District
-				Shenzhen  Guangdong  518126
-				CN
-
-AC-2A-A1   (hex)		Cisco Systems, Inc
-AC2AA1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F8-E9-4F   (hex)		Cisco Systems, Inc
-F8E94F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-30-89-4A   (hex)		Intel Corporate
-30894A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E0-6C-C5   (hex)		Huawei Device Co., Ltd.
-E06CC5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-30-96-3B   (hex)		Huawei Device Co., Ltd.
-30963B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-8C-6B-DB   (hex)		Huawei Device Co., Ltd.
-8C6BDB     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-10-DA-49   (hex)		Huawei Device Co., Ltd.
-10DA49     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-60-18-3A   (hex)		Huawei Device Co., Ltd.
-60183A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-18-C0-07   (hex)		Huawei Device Co., Ltd.
-18C007     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-59-7A   (hex)		Intel Corporate
-98597A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-64-49-7D   (hex)		Intel Corporate
-64497D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-B8-D6-1A   (hex)		Espressif Inc.
-B8D61A     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-00-25-CA   (hex)		Laird Connectivity
-0025CA     (base 16)		Laird Connectivity
-				W66 N220 Commerce Court
-				Cedarburg  WI  53012
-				US
-
-90-B5-7F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-90B57F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-74-56-3C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-74563C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-D8-9C-8E   (hex)		Comcast Cable Corporation
-D89C8E     (base 16)		Comcast Cable Corporation
-				1800 Arch Street
-				Philadelphia  PA  19103
-				US
-
-04-B9-7D   (hex)		AiVIS Co., Itd.
-04B97D     (base 16)		AiVIS Co., Itd.
-				112, Dumipo-ro, Jung-gu 
-				Incheon  Incheon  22394
-				KR
-
-BC-F4-D4   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-BCF4D4     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-C4-C0-63   (hex)		New H3C Technologies Co., Ltd
-C4C063     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-EC-55-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC551C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-79-8D   (hex)		Silicon Laboratories
-E0798D     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-B4-83-51   (hex)		Intel Corporate
-B48351     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-34-AD-61   (hex)		CELESTICA INC.
-34AD61     (base 16)		CELESTICA INC.
-				1900-5140 Yonge Street PO Box 42   
-				Toronto  Ontario  M2N 6L7
-				CA
-
-54-43-B2   (hex)		Espressif Inc.
-5443B2     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-C0-DD-8A   (hex)		Facebook Technologies, LLC
-C0DD8A     (base 16)		Facebook Technologies, LLC
-				1601 Willow Rd
-				Menlo Park  CA  94025
-				US
-
-AC-D3-1D   (hex)		Cisco Meraki
-ACD31D     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-10-96-1A   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-10961A     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
-				SHEN ZHEN  GUANG DONG  518000
-				CN
-
-BC-E9-E2   (hex)		Brocade Communications Systems LLC
-BCE9E2     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-18-48   (hex)		Vecima Networks Inc.
-001848     (base 16)		Vecima Networks Inc.
-				150 Cardinal Place 
-				Saskatoon  SK  S7L 6H7
-				CA
-
-2C-55-3C   (hex)		Vecima Networks Inc.
-2C553C     (base 16)		Vecima Networks Inc.
-				150 Cardinal Place 
-				Saskatoon  SK  S7L 6H7
-				CA
-
-AC-BF-71   (hex)		Bose Corporation
-ACBF71     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-18-A5-9C   (hex)		IEEE Registration Authority
-18A59C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-74-84-69   (hex)		Nintendo Co.,Ltd
-748469     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-74-71-8B   (hex)		Apple, Inc.
-74718B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-31-7F   (hex)		Apple, Inc.
-70317F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-CF-99   (hex)		Apple, Inc.
-A4CF99     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-2E-B4   (hex)		Apple, Inc.
-4C2EB4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-19-74   (hex)		Apple, Inc.
-B41974     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-E8-92   (hex)		SHENNAN CIRCUITS CO.,LTD
-04E892     (base 16)		SHENNAN CIRCUITS CO.,LTD
-				Gao Qiao Industrial Park East,Long Gang District,
-				Shenzhen  Guangdong  518117
-				CN
-
-60-95-BD   (hex)		Apple, Inc.
-6095BD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1A-35   (hex)		BARTEC GmbH
-001A35     (base 16)		BARTEC GmbH
-				Max-Eyth-Straße 16
-				Bad Mergentheim  Bavaria  97980
-				DE
-
-8C-CB-DF   (hex)		FOXCONN INTERCONNECT TECHNOLOGY 
-8CCBDF     (base 16)		FOXCONN INTERCONNECT TECHNOLOGY 
-				66-1 Zhongshan Road, Tucheng District
-				New Taipei City  Taiwan  23680
-				TW
-
-98-F1-12   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-98F112     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-84-69-93   (hex)		HP Inc.
-846993     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-74-6F-88   (hex)		zte corporation
-746F88     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-98-C8-1C   (hex)		BAYTEC LIMITED
-98C81C     (base 16)		BAYTEC LIMITED
-				107C, 31/f, The gateway, Tower 5, Harbour City, 15 canton road, Tsim Sha Tsui, Hong Kong
-				Harbour    999077
-				HK
-
-D0-98-9C   (hex)		ConMet
-D0989C     (base 16)		ConMet
-				5701 SE Columbia Way
-				Vancouver    WA  98661
-				US
-
-1C-A4-10   (hex)		Amlogic, Inc.
-1CA410     (base 16)		Amlogic, Inc.
-				2518 Mission College Blvd, Suite 120
-				Santa Clara  CA  95054
-				US
-
-24-26-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2426D6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-A6-BD   (hex)		Honor Device Co., Ltd.
-70A6BD     (base 16)		Honor Device Co., Ltd.
-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
-				Shenzhen   Guangdong  518040
-				CN
-
-EC-81-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC819C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-0B-16   (hex)		Texas Instruments
-200B16     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-88-01-F9   (hex)		Texas Instruments
-8801F9     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F8-55-48   (hex)		Texas Instruments
-F85548     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-68-E7-4A   (hex)		Texas Instruments
-68E74A     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-4C-9E-6C   (hex)		BROADEX TECHNOLOGIES CO.LTD
-4C9E6C     (base 16)		BROADEX TECHNOLOGIES CO.LTD
-				NO.306 YATAI ROAD
-				JIAXING  ZHEJIANG  314006
-				CN
-
-AC-A3-2F   (hex)		Solidigm Technology
-ACA32F     (base 16)		Solidigm Technology
-				1921 Corporate Center Circle, Suite 3B
-				Longmont    80501
-				US
-
-AC-71-2E   (hex)		Fortinet, Inc.
-AC712E     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale    94086
-				US
-
-E4-B6-33   (hex)		Wuxi Stars Microsystem Technology Co., Ltd
-E4B633     (base 16)		Wuxi Stars Microsystem Technology Co., Ltd
-				Room 2101, Tower C, Swan Tower, Wuxi Software Park, 111 Linghu Avenue, Xinwu District
-				Wuxi    214135
-				CN
-
-08-51-04   (hex)		Huawei Device Co., Ltd.
-085104     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-78-5B-64   (hex)		Huawei Device Co., Ltd.
-785B64     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-D9-3D   (hex)		Demant Enterprise A/S
-98D93D     (base 16)		Demant Enterprise A/S
-				Kongebakken 9
-				Smorum    2765
-				DK
-
-B4-A6-78   (hex)		Zhejiang Tmall Technology Co., Ltd.
-B4A678     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310024
-				CN
-
-AC-C4-BD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-ACC4BD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-54-E1-5B   (hex)		Huawei Device Co., Ltd.
-54E15B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-2F-04   (hex)		Shanghai Longcheer Technology Co., Ltd.
-542F04     (base 16)		Shanghai Longcheer Technology Co., Ltd.
-				Bldg 1,No.401,Caobao RD,Xuhui Dist
-				Shanghai    200233
-				CN
-
-C4-A1-0E   (hex)		IEEE Registration Authority
-C4A10E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-0C-EC-84   (hex)		Shenzhen TINNO Mobile Technology Corp.
-0CEC84     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-B4-39-39   (hex)		Shenzhen TINNO Mobile Technology Corp.
-B43939     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-8C-98-06   (hex)		SHENZHEN SEI ROBOTICS CO.,LTD
-8C9806     (base 16)		SHENZHEN SEI ROBOTICS CO.,LTD
-				the 4th floor,Productivity Building D,#5 Hi-Tech Middle 2nd Road,Shenzhen Hi-Tech Industrial Park, Nanshan District,Shenzhen,China
-				Shenzhen    518000
-				CN
-
-20-08-89   (hex)		zte corporation
-200889     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-70-70-FC   (hex)		GOLD&WATER INDUSTRIAL LIMITED
-7070FC     (base 16)		GOLD&WATER INDUSTRIAL LIMITED
-				NO.77 Leighton Road, 17/F Leighton Centre Causeway Bay ,HongKong
-				HongKong    999077
-				HK
-
-88-F2-BD   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-88F2BD     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-A0-F8-95   (hex)		Shenzhen TINNO Mobile Technology Corp.
-A0F895     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-6C-08-31   (hex)		ANALOG SYSTEMS
-6C0831     (base 16)		ANALOG SYSTEMS
-				UNIT 12, 38 DLF INDUSTRIAL AREA KIRTI NAGAR NEW DELHI 
-				NEW DELHI  DELHI  110015
-				IN
-
-70-AC-08   (hex)		Silicon Laboratories
-70AC08     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-2C-07-F6   (hex)		SKG Health Technologies Co., Ltd. 
-2C07F6     (base 16)		SKG Health Technologies Co., Ltd. 
-				23A Floor,Building 3,Zhongke R&D Park,No.009,Gaoxin South 1st Road, High-tech Zone Community,Yuehai street, Nanshan District,Shenzhen City,Guangdong Province,P.R.China
-				Shenzhen    518000
-				CN
-
-00-24-E4   (hex)		Withings
-0024E4     (base 16)		Withings
-				2 rue Maurice Hartmann
-				Issy-les-Moulineaux    92130
-				FR
-
-A4-7E-FA   (hex)		Withings
-A47EFA     (base 16)		Withings
-				2 rue Maurice Hartmann
-				Issy-les-Moulineaux    92130
-				FR
-
-3C-26-E4   (hex)		Cisco Systems, Inc
-3C26E4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-38-91-B7   (hex)		Cisco Systems, Inc
-3891B7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-5D-A8   (hex)		Cisco Systems, Inc
-345DA8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-78-91-DE   (hex)		Guangdong ACIGA Science&Technology Co.,Ltd
-7891DE     (base 16)		Guangdong ACIGA Science&Technology Co.,Ltd
-				L203 Biguiyuan International Club, Beijiao Town, Shunde District
-				Fo Shan  Guangdong  528312
-				CN
-
-E0-80-6B   (hex)		Xiaomi Communications Co Ltd
-E0806B     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-70-50-E7   (hex)		IEEE Registration Authority
-7050E7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-13-B4   (hex)		Appear AS
-0013B4     (base 16)		Appear AS
-				P.O. Box 8 Lilleaker
-				Oslo    NO-0216
-				NO
-
-38-12-7B   (hex)		Crenet Labs Co., Ltd.
-38127B     (base 16)		Crenet Labs Co., Ltd.
-				Rm. 1, 10F., No. 181, Sec. 1, Datong Rd.
-				New Taipei City  Xizhi Dist.  221451
-				TW
-
-B0-E4-5C   (hex)		Samsung Electronics Co.,Ltd
-B0E45C     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-BC-4C-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC4CA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-34-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-74342B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-12-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C412EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-C2-42   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-6CC242     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-68-7F-F0   (hex)		TP-Link Corporation Limited
-687FF0     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-DC-36-0C   (hex)		Hitron Technologies. Inc
-DC360C     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-38-FD-F5   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-38FDF5     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-4C-62-7B   (hex)		SmartCow AI Technologies Taiwan Ltd.
-4C627B     (base 16)		SmartCow AI Technologies Taiwan Ltd.
-				16F., No. 102, Songlong Rd., Xinyi Dist.,
-				Taipei City    110059
-				TW
-
-BC-7B-72   (hex)		Huawei Device Co., Ltd.
-BC7B72     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F8-2B-7F   (hex)		Huawei Device Co., Ltd.
-F82B7F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D8-68-A0   (hex)		Samsung Electronics Co.,Ltd
-D868A0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-04-29-2E   (hex)		Samsung Electronics Co.,Ltd
-04292E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-40-C3-BC   (hex)		Huawei Device Co., Ltd.
-40C3BC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-28-53-E0   (hex)		Sintela Ltd
-2853E0     (base 16)		Sintela Ltd
-				The Distillery, The Old Brewery, 9-11 Lodway,
-				Pill  Bristol  BS20 0DH
-				GB
-
-60-CF-69   (hex)		meerecompany
-60CF69     (base 16)		meerecompany
-				69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of  Korea
-				Hwaseong-si    18630
-				KR
-
-34-FE-1C   (hex)		CHOUNG HWA TECH CO.,LTD
-34FE1C     (base 16)		CHOUNG HWA TECH CO.,LTD
-				#31 Jangja-ro, Namdong-gu
-				Incheon-si    21532
-				KR
-
-F4-93-9F   (hex)		Hon Hai Precision Industry Co., Ltd.
-F4939F     (base 16)		Hon Hai Precision Industry Co., Ltd.
-				GuangDongShenZhen
-				ShenZhen  GuangDong  518109
-				CN
-
-A4-AE-12   (hex)		Hon Hai Precision Industry Co., Ltd.
-A4AE12     (base 16)		Hon Hai Precision Industry Co., Ltd.
-				GuangDongShenZhen
-				ShenZhen  GuangDong  518109
-				CN
-
-38-F0-C8   (hex)		Logitech
-38F0C8     (base 16)		Logitech
-				7700 Gateway Blvd
-				Newark  CA  94560
-				US
-
-BC-5D-A3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-BC5DA3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-80-75-1F   (hex)		SKY UK LIMITED
-80751F     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-C0-A3-6E   (hex)		SKY UK LIMITED
-C0A36E     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-00-A3-88   (hex)		SKY UK LIMITED
-00A388     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-AC-4E-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-AC4E65     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-80-72-15   (hex)		SKY UK LIMITED
-807215     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-B0-3E-51   (hex)		SKY UK LIMITED
-B03E51     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-1C-EF-03   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
-1CEF03     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
-				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
-				Guangzhou  Guangdong  510663
-				CN
-
-58-B0-3E   (hex)		Nintendo Co.,Ltd
-58B03E     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-54-45-38   (hex)		Texas Instruments
-544538     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-74-13-EA   (hex)		Intel Corporate
-7413EA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-7A-3E   (hex)		Silicon Laboratories
-187A3E     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-30-05-05   (hex)		Intel Corporate
-300505     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-B0-DC-EF   (hex)		Intel Corporate
-B0DCEF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-2C-A7-74   (hex)		Texas Instruments
-2CA774     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-DC-F3-1C   (hex)		Texas Instruments
-DCF31C     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-28-BC-05   (hex)		BLU Products Inc
-28BC05     (base 16)		BLU Products Inc
-				10814 NW 33rd Street
-				Miami  FL  33172
-				US
-
-18-4E-03   (hex)		HMD Global Oy
-184E03     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-40-22-D8   (hex)		Espressif Inc.
-4022D8     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-E0-08-71   (hex)		Dongguan Liesheng Electronic Co., Ltd.
-E00871     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
-				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
-				dongguan   guangdong  523000
-				CN
-
-90-65-60   (hex)		EM Microelectronic
-906560     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-A0-FB-83   (hex)		Honor Device Co., Ltd.
-A0FB83     (base 16)		Honor Device Co., Ltd.
-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
-				Shenzhen   Guangdong  518040
-				CN
-
-DC-0B-09   (hex)		Cisco Systems, Inc
-DC0B09     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-F3-FB   (hex)		Cisco Systems, Inc
-08F3FB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-88-0A-A3   (hex)		Juniper Networks
-880AA3     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-04-D9-C8   (hex)		Hon Hai Precision Industry Co., Ltd.
-04D9C8     (base 16)		Hon Hai Precision Industry Co., Ltd.
-				GuangDongShenZhen
-				ShenZhen  GuangDong  518109
-				CN
-
-78-C2-13   (hex)		Sagemcom Broadband SAS
-78C213     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-A0-36-BC   (hex)		ASUSTek COMPUTER INC.
-A036BC     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-10-73-EB   (hex)		Infiniti Electro-Optics
-1073EB     (base 16)		Infiniti Electro-Optics
-				15 - 9th Ave S
-				Cranbrook  British Columbia  V1C 2L9
-				CA
-
-9C-95-6E   (hex)		Microchip Technology Inc.
-9C956E     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-84-0B-BB   (hex)		MitraStar Technology Corp.
-840BBB     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-84-80-94   (hex)		Meter, Inc.
-848094     (base 16)		Meter, Inc.
-				148 Townsend St
-				San Francisco  CA  94107
-				US
-
-10-B3-D5   (hex)		Cisco Systems, Inc
-10B3D5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-30-A2-C2   (hex)		Huawei Device Co., Ltd.
-30A2C2     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-DF-D6   (hex)		zte corporation
-DCDFD6     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-AC-A8-8E   (hex)		SHARP Corporation
-ACA88E     (base 16)		SHARP Corporation
-				1 Takumi-cho, Sakai-ku
-				Sakai City  Osaka  590-8522
-				JP
-
-98-41-5C   (hex)		Nintendo Co.,Ltd
-98415C     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-70-54-25   (hex)		ARRIS Group, Inc.
-705425     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-5C-0B-CA   (hex)		Tunstall Nordic AB
-5C0BCA     (base 16)		Tunstall Nordic AB
-				Agnesfridsvagen 113A
-				Malmo    21237
-				SE
-
-28-33-34   (hex)		Huawei Device Co., Ltd.
-283334     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-A1-32   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-50A132     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-				Chudong science and technology park, 111 shaxin road, tangxia town,
-				dongguan city  guangdong province  523710
-				CN
-
-80-78-71   (hex)		ASKEY COMPUTER CORP
-807871     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-4C-B1-CD   (hex)		Ruckus Wireless
-4CB1CD     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F4-9C-12   (hex)		Structab AB
-F49C12     (base 16)		Structab AB
-				Slotsmöllan 14B
-				HALMSTAD    30231
-				SE
-
-88-51-7A   (hex)		HMD Global Oy
-88517A     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-AC-B3-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ACB3B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-3A-88   (hex)		Universal Global Scientific Industrial Co., Ltd.
-083A88     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
-				Nan-Tou  Taiwan  54261
-				TW
-
-08-31-8B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-08318B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-B6-88   (hex)		PLANTRONICS, INC.
-F4B688     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-4C-7A-48   (hex)		Nippon Seiki (Europe) B.V.
-4C7A48     (base 16)		Nippon Seiki (Europe) B.V.
-				Antareslaan 27
-				Hoofddorp    2132
-				NL
-
-84-D1-5A   (hex)		TCT mobile ltd
-84D15A     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-04-7F-0E   (hex)		Barrot Technology Limited
-047F0E     (base 16)		Barrot Technology Limited
-				C7-1-1,East Area, No.2,Shangdi Xinxi Road, Haidian District
-				Beijing    100085
-				CN
-
-B8-F6-53   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-B8F653     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-60-AB-14   (hex)		LG Innotek
-60AB14     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-BC-62-D2   (hex)		Genexis International B.V.
-BC62D2     (base 16)		Genexis International B.V.
-				Waldfeuchterbaan 124
-				Maria Hoop  Maria Hoop  6105 BP 
-				NL
-
-6C-9E-7C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-6C9E7C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-44-D5-F2   (hex)		IEEE Registration Authority
-44D5F2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-0C-86   (hex)		Cisco Systems, Inc
-000C86     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F8-3C-BF   (hex)		BOTATO ELECTRONICS SDN BHD
-F83CBF     (base 16)		BOTATO ELECTRONICS SDN BHD
-				c-1-2, JALAN BK5A/2B 47180,BANDAR KINRARA
-				PUCHONG  SELANGOR  47180
-				MY
-
-FC-58-9A   (hex)		Cisco Systems, Inc
-FC589A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F0-86-20   (hex)		Arcadyan Corporation
-F08620     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-DC-CC-8D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-DCCC8D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-F0-5C-77   (hex)		Google, Inc.
-F05C77     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-11-11-11   (hex)		Private
-111111     (base 16)		Private
-
-6C-D7-1F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-6CD71F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-F0-68-65   (hex)		Taicang T&W Electronics
-F06865     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-A4-63-A1   (hex)		Inventus Power Eletronica do Brasil LTDA
-A463A1     (base 16)		Inventus Power Eletronica do Brasil LTDA
-				Av Buriti, 4285 Distrito Industrial
-				Manaus  Amazonas  69075000
-				BR
-
-3C-9D-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C9D56     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-FD-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-70FD45     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-67-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-446747     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-4A-70   (hex)		Wacom Co.,Ltd.
-884A70     (base 16)		Wacom Co.,Ltd.
-				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
-				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
-				JP
-
-F4-B5-BB   (hex)		CERAGON NETWORKS
-F4B5BB     (base 16)		CERAGON NETWORKS
-				24 RAUEL WALLENBERG STREET
-				TEL-AVIV    96719
-				IL
-
-50-7A-C5   (hex)		Apple, Inc.
-507AC5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-6B-E8   (hex)		Apple, Inc.
-4C6BE8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-86-1E   (hex)		Apple, Inc.
-8C861E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-2B-8D   (hex)		Apple, Inc.
-542B8D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1D-29   (hex)		Doro AB
-001D29     (base 16)		Doro AB
-				Magistratsvägen 10
-				Lund    226 43
-				SE
-
-EC-A5-DE   (hex)		ONYX WIFI Inc
-ECA5DE     (base 16)		ONYX WIFI Inc
-				9891 Irvine Center Drive, Suite 200
-				Irvine    92618
-				US
-
-10-33-BF   (hex)		Technicolor CH USA Inc.
-1033BF     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-34-75-63   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-347563     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-14-2E-5E   (hex)		Sercomm Corporation.
-142E5E     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-00-25-CB   (hex)		Reiner SCT
-0025CB     (base 16)		Reiner SCT
-				Reiner Kartengeräte GmbH & Co. KG.
-				Furtwangen    78120
-				DE
-
-44-23-7C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-44237C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-C0-64-E4   (hex)		Cisco Systems, Inc
-C064E4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-50-80-4A   (hex)		Quectel Wireless Solutions Co., Ltd.
-50804A     (base 16)		Quectel Wireless Solutions Co., Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-30-94-35   (hex)		vivo Mobile Communication Co., Ltd.
-309435     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-D4-4B-B6   (hex)		Zhejiang Tmall Technology Co., Ltd.
-D44BB6     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-38-18-4C   (hex)		Sony Home Entertainment&Sound Products Inc
-38184C     (base 16)		Sony Home Entertainment&Sound Products Inc
-				Sony City Osaki 2-10-1 Osaki Shinagawa-ku
-				Tokyo  Japan  141-8610
-				JP
-
-D8-2F-E6   (hex)		Zhejiang Tmall Technology Co., Ltd.
-D82FE6     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-14-0F-42   (hex)		Nokia
-140F42     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-6D-61   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
-006D61     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
-				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
-				Guangzhou  Guangdong  510663
-				CN
-
-C4-AC-59   (hex)		Murata Manufacturing Co., Ltd.
-C4AC59     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-FC-A4-7A   (hex)		IEEE Registration Authority
-FCA47A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E4-19-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E419C1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-66-85   (hex)		Sagemcom Broadband SAS
-B86685     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-38-1A-52   (hex)		Seiko Epson Corporation
-381A52     (base 16)		Seiko Epson Corporation
-				2070 Kotobuki Koaka
-				Matsumoto-shi  Nagano-ken  399-8702
-				JP
-
-00-0A-17   (hex)		NESTAR COMMUNICATIONS, INC
-000A17     (base 16)		NESTAR COMMUNICATIONS, INC
-				No.6,19 Lane Bade Road
-				HSINCHU    300
-				TW
-
-D8-AF-81   (hex)		   ZAO NPK Rotek
-D8AF81     (base 16)		   ZAO NPK Rotek
-				Filippovskiy per., 8/1
-				Moscow    119019
-				RU
-
-E4-FD-A1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E4FDA1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-52-A9   (hex)		Texas Instruments
-B452A9     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-54-EF-44   (hex)		Lumi United Technology Co., Ltd
-54EF44     (base 16)		Lumi United Technology Co., Ltd
-				8th Floor, JinQi Wisdom Valley, No.1 TangLing Road, LinXian Ave, Taoyuan Residential District,Nanshan District
-				ShenZhen  GuangDong  518055
-				CN
-
-40-2B-50   (hex)		ARRIS Group, Inc.
-402B50     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-78-CC-2B   (hex)		SINEWY TECHNOLOGY CO., LTD
-78CC2B     (base 16)		SINEWY TECHNOLOGY CO., LTD
-				2F., No.179, Dongmin Rd.
-				Toufen City, Miaoli County    351
-				TW
-
-D0-C8-57   (hex)		IEEE Registration Authority
-D0C857     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-FC-BC-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FCBCD1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-74-60-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7460FA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-38-EF-E3   (hex)		 INGENICO TERMINALS SAS
-38EFE3     (base 16)		 INGENICO TERMINALS SAS
-				28-32 BOULEVARD DE GRENELLE
-				PARIS    75015
-				FR
-
-50-D4-F7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-50D4F7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1F-47   (hex)		MCS Logic Inc.
-001F47     (base 16)		MCS Logic Inc.
-				6F. Samho Center B Bldg., 275-6
-				Seoul    137-941
-				KR
-
-8C-FD-18   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8CFD18     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-B4-54-59   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-B45459     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-00-09-70   (hex)		Vibration Research Corporation
-000970     (base 16)		Vibration Research Corporation
-				2385 Wilshere Drive
-				Jenison  MI  49428
-				US
-
-14-A2-A0   (hex)		Cisco Systems, Inc
-14A2A0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E4-AB-89   (hex)		MitraStar Technology Corp.
-E4AB89     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-78-C3-13   (hex)		China Mobile Group Device Co.,Ltd.
-78C313     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-74-34-AE   (hex)		this is engineering Inc.
-7434AE     (base 16)		this is engineering Inc.
-				352, 815 Daewangpangyo-ro, Sujeong-gu
-				Seongnam-si  Gyeonggi-do  13449
-				KR
-
-74-AD-B7   (hex)		China Mobile Group Device Co.,Ltd.
-74ADB7     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street
-				Beijing    100053
-				CN
-
-60-95-CE   (hex)		IEEE Registration Authority
-6095CE     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-E5-C0   (hex)		Samsung Electronics Co.,Ltd
-8CE5C0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-8A-76   (hex)		Samsung Electronics Co.,Ltd
-F08A76     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-EC-AA-25   (hex)		Samsung Electronics Co.,Ltd
-ECAA25     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-68-7D-6B   (hex)		Samsung Electronics Co.,Ltd
-687D6B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-48-51-69   (hex)		Samsung Electronics Co.,Ltd
-485169     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-06-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C40683     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-94-D0-0D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94D00D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-C4-8A-5A   (hex)		JFCONTROL
-C48A5A     (base 16)		JFCONTROL
-				1449-37 Seoburo
-				Suwon  Gyunggi-do  16643
-				KR
-
-B4-9A-95   (hex)		Shenzhen Boomtech Industrial Corporation
-B49A95     (base 16)		Shenzhen Boomtech Industrial Corporation
-				2F, Block E, Bao'an Intelligent Valley, Yingtian Road No.4 Xixiang Sub-District Office, Bao'an District
-				Shenzhen  Guangdong  518102
-				CN
-
-AC-83-E9   (hex)		Beijing Zile Technology Co., Ltd
-AC83E9     (base 16)		Beijing Zile Technology Co., Ltd
-				Tecent WeWork, Huilongguan East Avenue, Changping District
-				Beijing  Beijing  100096
-				CN
-
-D8-CA-06   (hex)		Titan DataCenters France
-D8CA06     (base 16)		Titan DataCenters France
-				E.SpacePark 45 Allee des ormes
-				mougins    06250
-				FR
-
-1C-20-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C20DB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-C6-5B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D0C65B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-78-B2   (hex)		Xiaomi Communications Co Ltd
-9078B2     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-B4-CF-E0   (hex)		Sichuan tianyi kanghe communications co., LTD
-B4CFE0     (base 16)		Sichuan tianyi kanghe communications co., LTD
-				No.198, section 1, xueshan avenue, jinyuan town, dayi county
-				chengdu  sichuan  611330
-				CN
-
-BC-7F-A4   (hex)		Xiaomi Communications Co Ltd
-BC7FA4     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-FC-49-2D   (hex)		Amazon Technologies Inc.
-FC492D     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-74-EE-2A   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-74EE2A     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-08-7E-64   (hex)		Technicolor CH USA Inc.
-087E64     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-08-00-39   (hex)		SPIDER SYSTEMS LIMITED
-080039     (base 16)		SPIDER SYSTEMS LIMITED
-				SPIDER PARK
-				    SCOTLAND
-				GB
-
-90-47-3C   (hex)		China Mobile Group Device Co.,Ltd.
-90473C     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-88-9E-33   (hex)		TCT mobile ltd
-889E33     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-6C-8A-EC   (hex)		Nantong Coship Electronics Co., Ltd.
-6C8AEC     (base 16)		Nantong Coship Electronics Co., Ltd.
-				No.188 Xinsheng Road
-				Nantong  Jiangsu  226001
-				CN
-
-84-C2-E4   (hex)		Jiangsu Qinheng Co., Ltd.
-84C2E4     (base 16)		Jiangsu Qinheng Co., Ltd.
-				No. 18, Ningshuang Road
-				Nanjing  Jiangsu  210012
-				CN
-
-7C-21-D8   (hex)		Shenzhen Think Will Communication Technology co., LTD.
-7C21D8     (base 16)		Shenzhen Think Will Communication Technology co., LTD.
-				16F,Block A,Central Plaza,No.2002,Baoyuan Rd.,Baoan District
-				Shenzhen    518101
-				CN
-
-FC-EA-50   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-FCEA50     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-E0-6B   (hex)		W&G SPECIAL PRODUCTS
-00E06B     (base 16)		W&G SPECIAL PRODUCTS
-				SCEINCE PARK EINDHOVIN 5049
-				    
-				NL
-
-04-5C-6C   (hex)		Juniper Networks
-045C6C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-D8-F1-5B   (hex)		Espressif Inc.
-D8F15B     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-D4-F0-57   (hex)		Nintendo Co.,Ltd
-D4F057     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-6C-F1-7E   (hex)		Zhejiang Uniview Technologies Co.,Ltd.
-6CF17E     (base 16)		Zhejiang Uniview Technologies Co.,Ltd.
-				No.88,Jiangling Road
-				Hangzhou  Zhejiang,P.R.China  310051
-				CN
-
-08-3A-2F   (hex)		Guangzhou Juan Intelligent Tech Joint Stock Co.,Ltd
-083A2F     (base 16)		Guangzhou Juan Intelligent Tech Joint Stock Co.,Ltd
-				NO.9, street 3, HengLing industrial zone, Tangdong, tianhe district
-				Guangzhou  Guangdong  CN 510000
-				CN
-
-1C-3A-60   (hex)		Ruckus Wireless
-1C3A60     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-60-09-C3   (hex)		u-blox AG
-6009C3     (base 16)		u-blox AG
-				Zuercherstrasse 68
-				Thalwil    8800
-				CH
-
-48-87-64   (hex)		vivo Mobile Communication Co., Ltd.
-488764     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-5C-1C-B9   (hex)		vivo Mobile Communication Co., Ltd.
-5C1CB9     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-C0-FD-84   (hex)		zte corporation
-C0FD84     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-44-4B-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-444B7E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-DC-8C-37   (hex)		Cisco Systems, Inc
-DC8C37     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E8-D0-FC   (hex)		Liteon Technology Corporation
-E8D0FC     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-E8-E8-B7   (hex)		Murata Manufacturing Co., Ltd.
-E8E8B7     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto   617-8555
-				JP
-
-10-3D-3E   (hex)		China Mobile Group Device Co.,Ltd.
-103D3E     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-7C-50-DA   (hex)		Private
-7C50DA     (base 16)		Private
-
-64-CC-22   (hex)		Arcadyan Corporation
-64CC22     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-4C-91-57   (hex)		Fujian LANDI Commercial Equipment Co.,Ltd
-4C9157     (base 16)		Fujian LANDI Commercial Equipment Co.,Ltd
-				Building 17,the 1st Section ,Fuzhou Software Park
-				No.89 Software Road   Fuzhou ,Fujian  350003
-				CN
-
-9C-25-BE   (hex)		Wildlife Acoustics, Inc.
-9C25BE     (base 16)		Wildlife Acoustics, Inc.
-				3 Mill and Main Place, Suite 210
-				MAYNARD  MA  01754
-				US
-
-D0-39-EA   (hex)		NetApp
-D039EA     (base 16)		NetApp
-				1395 Crossman Ave
-				Sunnyvale,  CA  94089
-				US
-
-F8-DF-E1   (hex)		MyLight Systems
-F8DFE1     (base 16)		MyLight Systems
-				290 rue Ferdinand Perrier
-				Saint Priest    69800
-				FR
-
-60-D2-DD   (hex)		Shenzhen Baitong Putian Technology Co.,Ltd.
-60D2DD     (base 16)		Shenzhen Baitong Putian Technology Co.,Ltd.
-				501,5/F,Building 1,No.2,Lianwei Street,Hualian Community,Longhua Street Longhua District
-				Shenzhen  Guangdong  518109
-				CN
-
-78-8C-77   (hex)		LEXMARK INTERNATIONAL, INC.
-788C77     (base 16)		LEXMARK INTERNATIONAL, INC.
-				740 NEW CIRCLE ROAD
-				LEXINGTON  KY  40550
-				US
-
-3C-0C-7D   (hex)		Tiny Mesh AS
-3C0C7D     (base 16)		Tiny Mesh AS
-				Elisabeth von Hübschs gate 6
-				MOSS    1534
-				NO
-
-34-76-C5   (hex)		I-O DATA DEVICE,INC.
-3476C5     (base 16)		I-O DATA DEVICE,INC.
-				3-10, SAKURADA-MACHI
-				KANAZAWA  ISHIKAWA  920-8512
-				JP
-
-24-DA-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24DA33     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-FC-AB-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FCAB90     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-93-D8   (hex)		Texas Instruments
-5893D8     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-50-51-A9   (hex)		Texas Instruments
-5051A9     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A4-97-5C   (hex)		VTech Telecommunications Ltd.
-A4975C     (base 16)		VTech Telecommunications Ltd.
-				23/F,Tai Ping Industrial Centre ,Block 1
-				Hong Kong    000000
-				CN
-
-B0-2A-1F   (hex)		 Wingtech Group (HongKong）Limited
-B02A1F     (base 16)		 Wingtech Group (HongKong）Limited
-				 FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
-				Hong Kong  Hong Kong  999077
-				HK
-
-DC-68-0C   (hex)		Hewlett Packard Enterprise
-DC680C     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-F4-02-70   (hex)		Dell Inc.
-F40270     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-1C-27-04   (hex)		zte corporation
-1C2704     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-50-78-B3   (hex)		zte corporation
-5078B3     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F0-D4-F7   (hex)		varram system
-F0D4F7     (base 16)		varram system
-				57, TECHNO 11-RO,YUSEONG-GU, DAEJEON, KOREA 
-				DAEJEON    34036
-				KR
-
-E0-CC-7A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E0CC7A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-23-CB   (hex)		Wattty Corporation
-6C23CB     (base 16)		Wattty Corporation
-				2-15-31 takaokanishi nakaku
-				hamamatsushi  shizuokaken  4338118
-				JP
-
-60-AB-67   (hex)		Xiaomi Communications Co Ltd
-60AB67     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-AC-71-0C   (hex)		China Mobile Group Device Co.,Ltd.
-AC710C     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-A8-DB-03   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-A8DB03     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-30-89-44   (hex)		DEVA Broadcast Ltd.
-308944     (base 16)		DEVA Broadcast Ltd.
-				Alexander Stamboliyski 65
-				Burgas  Burgas  8000
-				BG
-
-F4-79-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F47960     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-52-90   (hex)		KNS Group LLC (YADRO Company)
-145290     (base 16)		KNS Group LLC (YADRO Company)
-				Spartakovskaya sq., 14, bl. 1
-				Moscow    105082
-				RU
-
-5C-32-C5   (hex)		Teracom Ltd.
-5C32C5     (base 16)		Teracom Ltd.
-				11 Vasil Levski blvd.
-				Ruse    7019
-				BG
-
-AC-EE-70   (hex)		Fontem Ventures BV
-ACEE70     (base 16)		Fontem Ventures BV
-				Motion Building 8F, Radarweg 60
-				Amsterdam  Noord-Holland  1043NT
-				NL
-
-AC-E2-D3   (hex)		Hewlett Packard
-ACE2D3     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-00-FD-22   (hex)		Cisco Systems, Inc
-00FD22     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-18-FD   (hex)		Apple, Inc.
-4418FD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-B6-00   (hex)		VOIM Co., Ltd.
-00B600     (base 16)		VOIM Co., Ltd.
-				70, Seotan-ro, Jinwi-myeon
-				Pyeongtaek-si  Gyeonggi-do  17706
-				KR
-
-98-FA-9B   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-98FA9B     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-00-5B-94   (hex)		Apple, Inc.
-005B94     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-89-7E   (hex)		Apple, Inc.
-E0897E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-0C-D1   (hex)		Hewlett Packard
-B00CD1     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-48-46-C1   (hex)		FN-LINK TECHNOLOGY LIMITED
-4846C1     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-B4-D0-A9   (hex)		China Mobile Group Device Co.,Ltd.
-B4D0A9     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-FC-29-F3   (hex)		McPay Co.,LTD.
-FC29F3     (base 16)		McPay Co.,LTD.
-				No.801, 61, Digital-ro 31-gil, Guro-gu
-				Seoul    08375
-				KR
-
-F8-AF-DB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-F8AFDB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-A0-BD-1D   (hex)		Zhejiang Dahua Technology Co., Ltd.
-A0BD1D     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-E4-9F-1E   (hex)		ARRIS Group, Inc.
-E49F1E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-26-15   (hex)		Teracom Limited
-002615     (base 16)		Teracom Limited
-				B-84
-				Noida  Uttar Pradesh  201301
-				IN
-
-9C-8E-DC   (hex)		Teracom Limited
-9C8EDC     (base 16)		Teracom Limited
-				123456
-				Noida  Uttar Pradesh  201301
-				IN
-
-00-01-91   (hex)		SYRED Data Systems
-000191     (base 16)		SYRED Data Systems
-				272 Lanes Mill Road
-				Howell  NJ  07731
-				US
-
-AC-D5-64   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-ACD564     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-94-D0-75   (hex)		CIS Crypto
-94D075     (base 16)		CIS Crypto
-				Nauchnyy proezd 6
-				Moscow    117246
-				RU
-
-28-B4-FB   (hex)		Sprocomm Technologies CO.,LTD.
-28B4FB     (base 16)		Sprocomm Technologies CO.,LTD.
-				5D F1.6 Block,Tianfa Building,Tianan Chegongmiao Industrial park,Futian Dist
-				shenzhen  guangdong  518000
-				CN
-
-40-F9-D5   (hex)		Tecore Networks
-40F9D5     (base 16)		Tecore Networks
-				7030 Hi Tech Drive
-				Hanover  MD  21076
-				US
-
-CC-2C-83   (hex)		DarkMatter L.L.C
-CC2C83     (base 16)		DarkMatter L.L.C
-				Level 15, Aldar HQ
-				Abu Dhabi    27655
-				AE
-
-DC-ED-84   (hex)		Haverford Systems Inc
-DCED84     (base 16)		Haverford Systems Inc
-				152 Robbins Road
-				Downingtown  PA  19335
-				US
-
-7C-57-3C   (hex)		Aruba, a Hewlett Packard Enterprise Company
-7C573C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-2C-01-B5   (hex)		Cisco Systems, Inc
-2C01B5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C0-53-36   (hex)		Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.
-C05336     (base 16)		Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.
-				7 floor, No.1 Automobile Museum South Road, Fengtai Science and Technology Park,
-				Beijing  Beijing  100070
-				CN
-
-60-6E-D0   (hex)		SEAL AG
-606ED0     (base 16)		SEAL AG
-				Landstrasse 176
-				Wettingen    5430
-				CH
-
-2C-CC-E6   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-2CCCE6     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-E4-4C-C7   (hex)		IEEE Registration Authority
-E44CC7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D4-E8-80   (hex)		Cisco Systems, Inc
-D4E880     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A8-34-6A   (hex)		Samsung Electronics Co.,Ltd
-A8346A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-3C-20-F6   (hex)		Samsung Electronics Co.,Ltd
-3C20F6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-38-AD   (hex)		Samsung Electronics Co.,Ltd
-7C38AD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D4-9C-DD   (hex)		AMPAK Technology,Inc.
-D49CDD     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-50-F7-22   (hex)		Cisco Systems, Inc
-50F722     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-98-49-E1   (hex)		Boeing Defence Australia
-9849E1     (base 16)		Boeing Defence Australia
-				GPO Box 767
-				Brisbane  Queensland  4001
-				AU
-
-04-D7-A5   (hex)		New H3C Technologies Co., Ltd
-04D7A5     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-4C-4D-66   (hex)		Nanjing Jiahao Technology Co., Ltd.
-4C4D66     (base 16)		Nanjing Jiahao Technology Co., Ltd.
-				Moling Industrial Park, Development Zone, Jiangning, Nanjing
-				Nanjing  Jiangsu  211111
-				CN
-
-A4-81-7A   (hex)		CIG SHANGHAI CO LTD
-A4817A     (base 16)		CIG SHANGHAI CO LTD
-				5th Floor, Building 8 No 2388 Chenhang Road
-				SHANGHAI    201114
-				CN
-
-90-58-51   (hex)		Technicolor CH USA Inc.
-905851     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-98-09-CF   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-9809CF     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-B8-DE-5E   (hex)		LONGCHEER TELECOMMUNICATION LIMITED
-B8DE5E     (base 16)		LONGCHEER TELECOMMUNICATION LIMITED
-				Building 1,No.401,Caobao Rd
-				Shanghai  Xuhui District  200233
-				CN
-
-88-5A-06   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-885A06     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-54-47-D3   (hex)		TSAT AS
-5447D3     (base 16)		TSAT AS
-				Martin Linges v 25
-				Fornebu    1364
-				NO
-
-CC-ED-DC   (hex)		MitraStar Technology Corp.
-CCEDDC     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-CC-D8-1F   (hex)		Maipu Communication Technology Co.,Ltd.
-CCD81F     (base 16)		Maipu Communication Technology Co.,Ltd.
-				Maipu Mansion, No.288 Tianfu 3rd Street, High-tech Zone
-				Chengdu  Sichuan  610094
-				CN
-
-68-8B-0F   (hex)		China Mobile IOT Company Limited
-688B0F     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-F8-2F-6A   (hex)		ITEL MOBILE LIMITED
-F82F6A     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-B0-68-E6   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-B068E6     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-A4-E7-E4   (hex)		Connex GmbH
-A4E7E4     (base 16)		Connex GmbH
-				Elbestrasse 12
-				Oldenburg    26135
-				DE
-
-B8-EF-8B   (hex)		SHENZHEN CANNICE TECHNOLOGY CO.,LTD
-B8EF8B     (base 16)		SHENZHEN CANNICE TECHNOLOGY CO.,LTD
-				F-20,7A,Baoneng Technology Park
-				Shenzhen  Guangdong  518109
-				CN
-
-B8-18-6F   (hex)		ORIENTAL MOTOR CO., LTD.
-B8186F     (base 16)		ORIENTAL MOTOR CO., LTD.
-				5-8-3 Tokodai
-				Tsukuba  Ibaraki  300-2635
-				JP
-
-00-1A-3F   (hex)		Intelbras
-001A3F     (base 16)		Intelbras
-				BR 101, km 210, S/N°
-				São José  Santa Catarina  88104800
-				BR
-
-C0-D8-34   (hex)		xvtec ltd
-C0D834     (base 16)		xvtec ltd
-				Ha'nagar 24
-				Hod Hasharon  Israel  4527713
-				IL
-
-B8-C2-53   (hex)		Juniper Networks
-B8C253     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-F0-5C-19   (hex)		Aruba, a Hewlett Packard Enterprise Company
-F05C19     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-04-BD-88   (hex)		Aruba, a Hewlett Packard Enterprise Company
-04BD88     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-9C-1C-12   (hex)		Aruba, a Hewlett Packard Enterprise Company
-9C1C12     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-18-DF-B4   (hex)		BOSUNG POWERTEC CO.,LTD.
-18DFB4     (base 16)		BOSUNG POWERTEC CO.,LTD.
-				70, Daechang-gil, Judeok-eup
-				Chungju-si  Chungcheongbuk-do  27463
-				KR
-
-00-01-47   (hex)		Zhone Technologies
-000147     (base 16)		Zhone Technologies
-				7001 Oakport Street
-				Oakland  CA  94621
-				US
-
-20-B7-80   (hex)		Toshiba Visual Solutions Corporation Co.,Ltd
-20B780     (base 16)		Toshiba Visual Solutions Corporation Co.,Ltd
-				Shinkawasaki Mitsui Builing West Tower 19F, 1-1-2 Kashimada
-				Saiwai-ku, Kawasaki-shi  Kanagawa  212-0058
-				JP
-
-E0-37-17   (hex)		Technicolor CH USA Inc.
-E03717     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-14-D4-FE   (hex)		ARRIS Group, Inc.
-14D4FE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-30-4F-75   (hex)		DASAN Network Solutions
-304F75     (base 16)		DASAN Network Solutions
-				DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu
-				Seongnam-si  Gyeonggi-do  13493
-				KR
-
-EC-A9-FA   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-ECA9FA     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-				#126,BBK Road,Wusha,Chang'An
-				Dong Guan  Guang Dong  523860
-				CN
-
-00-03-A5   (hex)		Medea Corporation
-0003A5     (base 16)		Medea Corporation
-				5701 Lindero Canyon Rd.
-				Wetlake Village  CA  91362
-				US
-
-BC-E6-7C   (hex)		Cambium Networks Limited
-BCE67C     (base 16)		Cambium Networks Limited
-				Unit B2, Linhay Business Park,
-				Ashburton  Devon  TQ13 7UP
-				GB
-
-7C-1E-06   (hex)		New H3C Technologies Co., Ltd
-7C1E06     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-F0-B3-1E   (hex)		Universal Electronics, Inc.
-F0B31E     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-F8-91-73   (hex)		AEDLE SAS
-F89173     (base 16)		AEDLE SAS
-				11 Rue Campagne Première, Cour Intérieure, Entresol, CODE 13B80
-				Paris  IDF  75014
-				FR
-
-C8-4F-86   (hex)		Sophos Ltd
-C84F86     (base 16)		Sophos Ltd
-				The Pentagon
-				Abingdon  Oxfordshire  OX14 3YP
-				GB
-
-64-29-ED   (hex)		AO PKK Milandr
-6429ED     (base 16)		AO PKK Milandr
-				Gergievsky prospekt, 5
-				Zelenograd  Moscow  124498
-				RU
-
-44-3C-88   (hex)		FICOSA MAROC INTERNATIONAL
-443C88     (base 16)		FICOSA MAROC INTERNATIONAL
-				Zone Franche Technopolis Rocade Rabat-Salé 11103 Sala Al Jadida - Salé
-				Salé    11103
-				MA
-
-84-1C-70   (hex)		zte corporation
-841C70     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-54-47-41   (hex)		XCHENG HOLDING
-544741     (base 16)		XCHENG HOLDING
-				ROOM 401F, Building 5, No.3000 LONG DONG Avenue, Pudong New District
-				 Shanghai    201203
-				CN
-
-CC-F7-35   (hex)		Amazon Technologies Inc.
-CCF735     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-C4-F8-39   (hex)		Actia Automotive
-C4F839     (base 16)		Actia Automotive
-				5 rue Jorge Semprun
-				TOULOUSE    31400
-				FR
-
-C8-F7-42   (hex)		HangZhou Gubei Electronics Technology Co.,Ltd
-C8F742     (base 16)		HangZhou Gubei Electronics Technology Co.,Ltd
-				Room 106, No.611 Jianghong Road, Binjiang District, Hangzhou, Zhejiang, China
-				Hangzhou  ZheJiang  310052
-				CN
-
-00-6F-F2   (hex)		MITSUMI ELECTRIC CO.,LTD.
-006FF2     (base 16)		MITSUMI ELECTRIC CO.,LTD.
-				2-11-2, Tsurumaki
-				Tama-shi  Tokyo  206-8567
-				JP
-
-30-DF-8D   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-30DF8D     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-D4-C9-3C   (hex)		Cisco Systems, Inc
-D4C93C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-78-DD-12   (hex)		Arcadyan Corporation
-78DD12     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-2C-5D-34   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-2C5D34     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-9C-14-63   (hex)		Zhejiang Dahua Technology Co., Ltd.
-9C1463     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-64-60-38   (hex)		Hirschmann Automation and Control GmbH
-646038     (base 16)		Hirschmann Automation and Control GmbH
-				Stuttgarter Straße 45-51
-				Neckartenzlingen    D-72654
-				DE
-
-70-18-A7   (hex)		Cisco Systems, Inc
-7018A7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-CC-D3-9D   (hex)		IEEE Registration Authority
-CCD39D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D4-25-CC   (hex)		IEEE Registration Authority
-D425CC     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-6D-C4   (hex)		Megapixel VR
-8C6DC4     (base 16)		Megapixel VR
-				340 S. Lemon Ave
-				Walnut  CA  91789
-				US
-
-D4-B7-61   (hex)		Sichuan AI-Link Technology Co., Ltd.
-D4B761     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-7C-03-5E   (hex)		Xiaomi Communications Co Ltd
-7C035E     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-44-FE-3B   (hex)		Arcadyan Corporation
-44FE3B     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-D8-3A-F5   (hex)		Wideband Labs LLC
-D83AF5     (base 16)		Wideband Labs LLC
-				1027 S Main Street, STE 330
-				Joplin  MO  64801
-				US
-
-38-D9-A5   (hex)		Mikotek Information Inc. 
-38D9A5     (base 16)		Mikotek Information Inc. 
-				3F, No. 20, Aly. 18, Ln. 478, Ruiguang Rd.
-				Taipei    114
-				TW
-
-4C-87-5D   (hex)		Bose Corporation
-4C875D     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-B0-E7-DE   (hex)		Homa Technologies JSC
-B0E7DE     (base 16)		Homa Technologies JSC
-				Building 5, Quang Trung Software City, District 12
-				Ho Chi Minh    729226
-				VN
-
-64-9D-99   (hex)		FS COM INC
-649D99     (base 16)		FS COM INC
-				380 Centerpoint Blvd New Castle
-				New Castle  DE  19720
-				US
-
-00-16-9D   (hex)		Cisco Systems, Inc
-00169D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-4C-96-2D   (hex)		Fresh AB
-4C962D     (base 16)		Fresh AB
-				Gransholmsvägen 136
-				Gemla    35599
-				SE
-
-00-D2-79   (hex)		VINGROUP JOINT STOCK COMPANY
-00D279     (base 16)		VINGROUP JOINT STOCK COMPANY
-				Number 7, Bang Lang 1 street, Long Bien district
-				Ha Noi  Ha Noi  100000
-				VN
-
-48-4A-30   (hex)		George Robotics Limited
-484A30     (base 16)		George Robotics Limited
-				Salisbury House, Station Road
-				Cambridge    CB1 2LA
-				GB
-
-48-61-A3   (hex)		Concern Axion JSC
-4861A3     (base 16)		Concern Axion JSC
-				90, M. Gorkogo St.
-				Izhevsk  Udmurt Republic  426000
-				RU
-
-30-4A-26   (hex)		Shenzhen Trolink Technology CO, LTD
-304A26     (base 16)		Shenzhen Trolink Technology CO, LTD
-				201 B building 4 shijie, Chashu industry 505 block, Baoan airport Sanwei community, Hangcheng street Baoan area.
-				Shenzhen  GuangDong  518000
-				CN
-
-4C-E5-AE   (hex)		Tianjin Beebox Intelligent Technology Co.,Ltd.
-4CE5AE     (base 16)		Tianjin Beebox Intelligent Technology Co.,Ltd.
-				Room 103，NO.1 of the 2nd Street
-				Tianjin Pilot Free Trade Zone Airport EconomicArea  Airport International Logistics Zone, Tianjin  300300
-				CN
-
-D4-67-D3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-D467D3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-A4-12-32   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A41232     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-48-E3-C3   (hex)		JENOPTIK Advanced Systems GmbH
-48E3C3     (base 16)		JENOPTIK Advanced Systems GmbH
-				Feldstrasse 155
-				Wedel  Schleswig-Holstein  22880
-				DE
-
-CC-35-5A   (hex)		SecuGen Corporation
-CC355A     (base 16)		SecuGen Corporation
-				2065 Martin Ave, Suite 108
-				Santa Clara  CA  95050
-				US
-
-80-54-6A   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-80546A     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-B4-47-F5   (hex)		Earda Technologies co Ltd
-B447F5     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-F4-C7-C8   (hex)		Kelvin Inc.
-F4C7C8     (base 16)		Kelvin Inc.
-				400 Centennial Parkway, Suite 190
-				Louisville  CO  80027
-				US
-
-A8-9C-A4   (hex)		Furrion Limited
-A89CA4     (base 16)		Furrion Limited
-				Units 503C & 505-508, Level 5, Core D, Cyberport 3, 100 Cyberport Road
-				Hong Kong    00000
-				HK
-
-00-00-4C   (hex)		NEC Corporation
-00004C     (base 16)		NEC Corporation
-				7-1 SHIBA  5-CHOME
-				TOKYO 108-01    0000
-				JP
-
-8C-CF-8F   (hex)		ITC Systems
-8CCF8F     (base 16)		ITC Systems
-				800 Fee Fee Road
-				St Louis  MO  63043
-				US
-
-28-75-D8   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-2875D8     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-90-E2-02   (hex)		Texas Instruments
-90E202     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-30-24-78   (hex)		Sagemcom Broadband SAS
-302478     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-7C-89-C1   (hex)		Palo Alto Networks
-7C89C1     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-84-A9-3E   (hex)		Hewlett Packard
-84A93E     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-B0-C3-87   (hex)		GOEFER, Inc.
-B0C387     (base 16)		GOEFER, Inc.
-				118 N. Market St.
-				Frederick  MD  21701
-				US
-
-08-6B-D7   (hex)		Silicon Laboratories
-086BD7     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-34-93-42   (hex)		TTE Corporation
-349342     (base 16)		TTE Corporation
-				7/F, Building 22E 22 Science Park East Avenue Hong Kong Science Park Shatin, N.T.
-				Hong Kong    999077
-				HK
-
-58-9E-C6   (hex)		Gigaset Communications GmbH
-589EC6     (base 16)		Gigaset Communications GmbH
-				Frankenstrasse 2
-				Bocholt  NRW  46395
-				DE
-
-64-C7-53   (hex)		Apple, Inc.
-64C753     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-58-AD   (hex)		China Mobile IOT Company Limited
-6458AD     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-1C-F2-9A   (hex)		Google, Inc.
-1CF29A     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-74-8A-0D   (hex)		ARRIS Group, Inc.
-748A0D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-CC-75-E2   (hex)		ARRIS Group, Inc.
-CC75E2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A0-A3-B8   (hex)		WISCLOUD
-A0A3B8     (base 16)		WISCLOUD
-				Tech Park Xia Sha
-				Hangzhou  Zhejiang  310000
-				CN
-
-38-F9-D3   (hex)		Apple, Inc.
-38F9D3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-18-3C   (hex)		Apple, Inc.
-FC183C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-0C-66   (hex)		Shenzhen Colorful Yugong Technology and Development Co., Ltd.
-A40C66     (base 16)		Shenzhen Colorful Yugong Technology and Development Co., Ltd.
-				13F, Central Business Tower, No.88 Fuhua First Rd., Futian District, Shenzhen, Guangdong, China
-				Shenzhen  Guangdong  518000
-				CN
-
-44-55-B1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4455B1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-98-F9-C7   (hex)		IEEE Registration Authority
-98F9C7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-70-0B-4F   (hex)		Cisco Systems, Inc
-700B4F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E4-38-8C   (hex)		Digital Products Limited
-E4388C     (base 16)		Digital Products Limited
-				53 Clark Road
-				Rothesay  New Brunswick  E2E 2K9
-				CA
-
-18-4B-DF   (hex)		Caavo Inc
-184BDF     (base 16)		Caavo Inc
-				1525 McCarthy Blvd., #1182
-				Milpitas    95035
-				US
-
-B8-9A-9A   (hex)		Xin Shi Jia Technology (Beijing) Co.,Ltd
-B89A9A     (base 16)		Xin Shi Jia Technology (Beijing) Co.,Ltd
-				Room 1002, A Tower, Zhongguancun E World Wealth Center, No.11, Zhongguancun Street, Haidian District, Beijing City
-				Beijing  Beijing  100190
-				CN
-
-8C-7B-F0   (hex)		Xufeng Development Limited
-8C7BF0     (base 16)		Xufeng Development Limited
-				FLAT/RM1616 16F INTERATIONAL TRADE CENTRE 11-19 SHA TSUI RD TSUEN WAN
-				HongKong  HongKong  999077
-				HK
-
-E0-A5-09   (hex)		Bitmain Technologies Inc
-E0A509     (base 16)		Bitmain Technologies Inc
-				Building 25, North Olympic Science & Technology Park, Baosheng South Road, Haidian District, Beijing, China
-				Beijing  BEIJING  CHINA
-				CN
-
-3C-5C-C4   (hex)		Amazon Technologies Inc.
-3C5CC4     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-D8-A7-56   (hex)		Sagemcom Broadband SAS
-D8A756     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-D8-D6-F3   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-D8D6F3     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-6C-2C-DC   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-6C2CDC     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-78-35-A0   (hex)		Zurn Industries LLC
-7835A0     (base 16)		Zurn Industries LLC
-				1747 Commerce Way
-				Paso Robles  CA  93446
-				US
-
-F4-39-09   (hex)		Hewlett Packard
-F43909     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-20-1F-31   (hex)		Inteno Broadband Technology AB
-201F31     (base 16)		Inteno Broadband Technology AB
-				Stensätravägen 13
-				Skärholmen  SE  127 39 
-				SE
-
-2C-CC-44   (hex)		Sony Interactive Entertainment Inc.
-2CCC44     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-F4-7D-EF   (hex)		Samsung Electronics Co.,Ltd
-F47DEF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-8B-B5   (hex)		Samsung Electronics Co.,Ltd
-7C8BB5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-83-3A   (hex)		Zyxel Communications Corporation
-54833A     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-78-70-52   (hex)		Welotec GmbH
-787052     (base 16)		Welotec GmbH
-				zum Hagenbach 7
-				Laer  NRW  48366
-				DE
-
-D8-A9-8B   (hex)		Texas Instruments
-D8A98B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-00-11-6C   (hex)		Nanwang Multimedia Inc.,Ltd
-00116C     (base 16)		Nanwang Multimedia Inc.,Ltd
-				Floor 12,Tianyuan Bldg,Wensan Rd#508
-				Hangzhou  Zhejiang  310013
-				CN
-
-10-B9-F7   (hex)		Niko-Servodan
-10B9F7     (base 16)		Niko-Servodan
-				Stenager 5
-				Sønderborg    6400
-				DK
-
-14-EF-CF   (hex)		SCHREDER
-14EFCF     (base 16)		SCHREDER
-				Rue Lusambo 67
-				Brussels    1190
-				BE
-
-38-30-F9   (hex)		LG Electronics (Mobile Communications)
-3830F9     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-A8-3F-A1   (hex)		IEEE Registration Authority
-A83FA1     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-6C-9B-C0   (hex)		Chemoptics Inc.
-6C9BC0     (base 16)		Chemoptics Inc.
-				261, Techno 2-ro, Yuseong-gu
-				Daejeon    34026
-				KR
-
-F4-DB-E6   (hex)		Cisco Systems, Inc
-F4DBE6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-84-98   (hex)		Beijing Jiaoda Microunion Tech.Co.,Ltd.
-248498     (base 16)		Beijing Jiaoda Microunion Tech.Co.,Ltd.
-				4-5/F,89 Building, First Section No.44 Gaoliangqiao Xie Street, Haidian District, Beijing, China
-				Beijing  Beijing  100044
-				CN
-
-C0-74-AD   (hex)		Grandstream Networks, Inc.
-C074AD     (base 16)		Grandstream Networks, Inc.
-				1297 Beacon Street
-				Brookline  MA  02446
-				US
-
-F0-95-F1   (hex)		Carl Zeiss AG
-F095F1     (base 16)		Carl Zeiss AG
-				Carl-Zeiss-Straße 22
-				Oberkochen    73447
-				DE
-
-00-F4-8D   (hex)		Liteon Technology Corporation
-00F48D     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-70-2E-D9   (hex)		Guangzhou Shiyuan Electronics Co., Ltd.
-702ED9     (base 16)		Guangzhou Shiyuan Electronics Co., Ltd.
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Gunagzhou  Guangdong  510530
-				CN
-
-70-19-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-70192F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-C2-2F   (hex)		China Entropy Co., Ltd.
-10C22F     (base 16)		China Entropy Co., Ltd.
-				Haidian District
-				Beijing    100085
-				CN
-
-BC-38-65   (hex)		JWCNETWORKS
-BC3865     (base 16)		JWCNETWORKS
-				114, Gasan digital 2-ro, Geumcheon-gu,
-				Seoul    08506
-				KR
-
-04-EB-40   (hex)		Cisco Systems, Inc
-04EB40     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-18-A7-F1   (hex)		Qingdao Haier Technology Co.,Ltd
-18A7F1     (base 16)		Qingdao Haier Technology Co.,Ltd
-				Building A01,Haier Information Park, No.1 Haier Road,
-				Qingdao  Shandong  266101
-				CN
-
-90-E1-7B   (hex)		Apple, Inc.
-90E17B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-1C-79   (hex)		Apple, Inc.
-D81C79     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-E6-BA   (hex)		Apple, Inc.
-58E6BA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-E4-EE   (hex)		Wistron Neweb Corporation
-44E4EE     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-DC-41-E5   (hex)		Shenzhen Zhixin Data Service Co., Ltd.
-DC41E5     (base 16)		Shenzhen Zhixin Data Service Co., Ltd.
-				 Baoyuan Road F518 Fashion Creative Park F3 Blg208
-				Baoan District, Shenzhen  Guangdong  518101
-				CN
-
-00-A5-BF   (hex)		Cisco Systems, Inc
-00A5BF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C8-BA-E9   (hex)		QDIS
-C8BAE9     (base 16)		QDIS
-				#512, Buliding B, 168 GaSanDigital 1st, GeumChun-Gu
-				SEOUL    08507
-				KR
-
-18-01-F1   (hex)		Xiaomi Communications Co Ltd
-1801F1     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-C4-4F-33   (hex)		Espressif Inc.
-C44F33     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-54-6A-D8   (hex)		Elster Water Metering
-546AD8     (base 16)		Elster Water Metering
-				Mas des Cavaliers II, 471 Rue Charles Nungesser 
-				Mauguio    34130
-				FR
-
-C0-84-7D   (hex)		AMPAK Technology, Inc.
-C0847D     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-04-09-A5   (hex)		HFR, Inc.
-0409A5     (base 16)		HFR, Inc.
-				5F, Hana EZ Tower
-				Sungnam-si  Kyunggi-do  463-870
-				KR
-
-94-91-7F   (hex)		ASKEY COMPUTER CORP
-94917F     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-9C-0C-DF   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-9C0CDF     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-24-21-24   (hex)		Nokia
-242124     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-94-9B-2C   (hex)		Extreme Networks, Inc.
-949B2C     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose    95119
-				US
-
-7C-D3-0A   (hex)		INVENTEC CORPORATION
-7CD30A     (base 16)		INVENTEC CORPORATION
-				Inventec Building, 66 Hou-Kang Street
-				Taipei    111
-				TW
-
-00-1E-33   (hex)		INVENTEC CORPORATION
-001E33     (base 16)		INVENTEC CORPORATION
-				Inventec Building, 66 Hou-Kang Street
-				Taipei    111
-				TW
-
-FC-1D-84   (hex)		Autobase
-FC1D84     (base 16)		Autobase
-				1201, Biz Center, SKnTechno Park, 124, Sagimakgol-ro, Jungwon-gu, Seongnam-si, Gyeonggi-do
-				Seongnam  Gyeonggi  462-721
-				KR
-
-18-AC-9E   (hex)		ITEL MOBILE LIMITED
-18AC9E     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-EC-84-B4   (hex)		CIG SHANGHAI CO LTD
-EC84B4     (base 16)		CIG SHANGHAI CO LTD
-				5th Floor, Building 8 No 2388 Chenhang Road
-				SHANGHAI    201114
-				CN
-
-00-D0-96   (hex)		3COM EUROPE LTD
-00D096     (base 16)		3COM EUROPE LTD
-				BOUNDARY WAY
-				vvvvv  UNITED  KINGDOM
-				GB
-
-00-26-54   (hex)		3COM
-002654     (base 16)		3COM
-				5353 Betsy Ross Drive
-				Santa Clara    95054-1162
-				US
-
-00-50-DA   (hex)		3COM
-0050DA     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-04-76   (hex)		3COM
-000476     (base 16)		3COM
-				5400 Bayfront Plaza
-				Santa Clara  CA  95052
-				US
-
-00-04-75   (hex)		3COM
-000475     (base 16)		3COM
-				5400 Bayfront Plaza
-				Santa Clara  CA  95052
-				US
-
-44-22-F1   (hex)		S.FAC, INC
-4422F1     (base 16)		S.FAC, INC
-				Bldg A203  Techno2 ro 187
-				Yuseong-Gu  Daejeon  34025
-				KR
-
-30-09-F9   (hex)		IEEE Registration Authority
-3009F9     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B4-DD-D0   (hex)		Continental Automotive Hungary Kft
-B4DDD0     (base 16)		Continental Automotive Hungary Kft
-				Napmátka u. 6.
-				Budapest  Pest  H-1106
-				HU
-
-48-F0-27   (hex)		Chengdu newifi Co.,Ltd
-48F027     (base 16)		Chengdu newifi Co.,Ltd
-				C11 Building 2001,No.219 ,2nd Tianhua Road,Hi-tech zone
-				Chengdu  Sichuan  610000
-				CN
-
-14-C6-97   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-14C697     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-7C-03-AB   (hex)		Xiaomi Communications Co Ltd
-7C03AB     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-DC-16-B2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DC16B2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-FB-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24FB65     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-B5-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0CB527     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-2E-99   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-B42E99     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-34-2C-C4   (hex)		Compal Broadband Networks, Inc.
-342CC4     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-14-E9-B2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-14E9B2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-C8-54-4B   (hex)		Zyxel Communications Corporation
-C8544B     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-D0-7F-A0   (hex)		Samsung Electronics Co.,Ltd
-D07FA0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-90-93   (hex)		EIZO Corporation
-009093     (base 16)		EIZO Corporation
-				153 Shimokashiwano
-				Hakusan  Ishikawa  924-8856
-				JP
-
-4C-11-59   (hex)		Vision Information & Communications
-4C1159     (base 16)		Vision Information & Communications
-				151, Ulseong-gil
-				Pyeongtaek-si  Gyeonggi-do  17823
-				KR
-
-00-04-9F   (hex)		Freescale Semiconductor
-00049F     (base 16)		Freescale Semiconductor
-				2100 East  Elliot
-				Tempe  AZ  85284
-				US
-
-00-D0-7B   (hex)		COMCAM INTERNATIONAL INC
-00D07B     (base 16)		COMCAM INTERNATIONAL INC
-				1140 McDermott Drive Suite 200
-				WEST CHESTER  PA  19380
-				US
-
-E4-FC-82   (hex)		Juniper Networks
-E4FC82     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-B5-D0   (hex)		Samsung Electronics Co.,Ltd
-00B5D0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-96-E5   (hex)		Samsung Electronics Co.,Ltd
-1496E5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-6E-7B   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-C46E7B     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-C0-48-FB   (hex)		Shenzhen JingHanDa Electronics Co.Ltd
-C048FB     (base 16)		Shenzhen JingHanDa Electronics Co.Ltd
-				5th Floor,No 4 ,Road 1,ShangXue Technology industrial Park,LongGang district,ShenZhen,GuangDong,China
-				ShenZhen  GuangDong  518129
-				CN
-
-20-E8-82   (hex)		zte corporation
-20E882     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F0-9F-FC   (hex)		SHARP Corporation
-F09FFC     (base 16)		SHARP Corporation
-				1 Takumi-cho, Sakai-ku
-				Sakai City  Osaka  590-8522
-				JP
-
-0C-B5-DE   (hex)		Alcatel Lucent
-0CB5DE     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-00-0B-3B   (hex)		devolo AG
-000B3B     (base 16)		devolo AG
-				Charlottenburger Allee 67
-				Aachen  NRW  52068
-				DE
-
-24-05-88   (hex)		Google, Inc.
-240588     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-50-DC-FC   (hex)		ECOCOM
-50DCFC     (base 16)		ECOCOM
-				15ST,Block A,Fortune Plaza, No.7002 ShenNan Avenue, Futian District
-				Shenzhen  Guangdong  518040
-				CN
-
-70-0B-01   (hex)		Sagemcom Broadband SAS
-700B01     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-5C-26-23   (hex)		WaveLynx Technologies Corporation
-5C2623     (base 16)		WaveLynx Technologies Corporation
-				100 Technology Drive, Building B, Ste 150
-				Broomfield  CO  80021
-				US
-
-30-38-55   (hex)		Nokia Corporation
-303855     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu  Ou  90590
-				FI
-
-00-B6-70   (hex)		Cisco Systems, Inc
-00B670     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-AC-64-17   (hex)		Siemens AG
-AC6417     (base 16)		Siemens AG
-				Werner-von-Siemens Strasse 50
-				Amberg    92224
-				DE
-
-34-79-16   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-347916     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-66-EA   (hex)		VERTU INTERNATIONAL CORPORATION LIMITED
-3466EA     (base 16)		VERTU INTERNATIONAL CORPORATION LIMITED
-				25 St Thomas Street, Winchester, Hampshire, United Kingdom
-				Winchester  Hampshire  SO23 9HJ
-				GB
-
-28-38-5C   (hex)		FLEXTRONICS
-28385C     (base 16)		FLEXTRONICS
-				Carretera Base Aerea 5850 int 4
-				Zapopan  Jalisco  45136
-				MX
-
-0C-1C-57   (hex)		Texas Instruments
-0C1C57     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-80-6F-B0   (hex)		Texas Instruments
-806FB0     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-88-3F-99   (hex)		Siemens AG
-883F99     (base 16)		Siemens AG
-				Werner-von-Siemens-Str. 48
-				Amberg    92224
-				DE
-
-EC-6F-0B   (hex)		FADU, Inc.
-EC6F0B     (base 16)		FADU, Inc.
-				4th FL, 8, Bongeunsa-ro 68-gil, Gangnam-gu
-				Seoul    06153
-				KR
-
-00-06-EC   (hex)		Harris Corporation
-0006EC     (base 16)		Harris Corporation
-				1025 West NASA Blvd
-				Melbourne  FL  32919
-				US
-
-7C-6D-A6   (hex)		Superwave Group LLC
-7C6DA6     (base 16)		Superwave Group LLC
-				poselok Krasnaya Zarya, dom 15
-				Vsevolozhskiy raiyon  Leningradskaya oblast  193149
-				RU
-
-D0-16-B4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D016B4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-A8-B9   (hex)		SIEMENS AG
-20A8B9     (base 16)		SIEMENS AG
-				Oestliche Rheinbrueckenstrasse 50
-				Karlsruhe  Baden Wuerttemberg  76187
-				DE
-
-F0-F0-8F   (hex)		Nextek Solutions Pte Ltd
-F0F08F     (base 16)		Nextek Solutions Pte Ltd
-				105 Cecil Street, #06-01 The Octagon
-				Singapore  Singapore  069534
-				SG
-
-8C-B0-E9   (hex)		Samsung Electronics.,LTD
-8CB0E9     (base 16)		Samsung Electronics.,LTD
-				129, Samsung-ro, Yeongtong-gu
-				Suwon  Gyeonggi-Do  443-742
-				KR
-
-1C-39-47   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-1C3947     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
-				KUNSHAN  SUZHOU  215300
-				CN
-
-34-27-92   (hex)		FREEBOX SAS
-342792     (base 16)		FREEBOX SAS
-				16 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-40-A1-08   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-40A108     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-70-5A-B6   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-705AB6     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
-				KUNSHAN  SUZHOU  215300
-				CN
-
-20-1A-06   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-201A06     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
-				KUNSHAN  SUZHOU  215300
-				CN
-
-F8-A9-63   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-F8A963     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
-				KUNSHAN  SUZHOU  215300
-				CN
-
-DC-0E-A1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-DC0EA1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				No.25, Third Avenue, A Zone, Kunshan Comprehensive Free Trade Zone,, Jiangsu, 
-				KUNSHAN   SUZHOU  215300
-				CN
-
-B8-70-F4   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-B870F4     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU  215300
-				CN
-
-00-9D-6B   (hex)		Murata Manufacturing Co., Ltd.
-009D6B     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-74-59-33   (hex)		Danal Entertainment
-745933     (base 16)		Danal Entertainment
-				9th Fl. Bundang First Tower, 55 Bundang-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13591
-				KR
-
-EC-58-EA   (hex)		Ruckus Wireless
-EC58EA     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-7C-9A-54   (hex)		Technicolor CH USA Inc.
-7C9A54     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-38-8B-59   (hex)		Google, Inc.
-388B59     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-88-01-18   (hex)		BLT Co
-880118     (base 16)		BLT Co
-				Dongan-gu Burim-ro 170beon-gil 44
-				Anyangsi  Kyunggido  14055
-				KR
-
-A4-26-18   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-A42618     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-A4-61-91   (hex)		NamJunSa
-A46191     (base 16)		NamJunSa
-				12, Gimhae-daero 2635 beon-gil
-				Gimhae-si  Gyeongsangnam-do  50932
-				KR
-
-84-A2-4D   (hex)		Birds Eye Systems Private Limited
-84A24D     (base 16)		Birds Eye Systems Private Limited
-				123-126, B Wing First Floor, Chintanmani Plaza, Mohan Studio Compound, Andheri-Kurla Road, Andheri East
-				Mumbai  Maharashtra   400099
-				IN
-
-7C-6B-9C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-7C6B9C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-00-17-B6   (hex)		Aquantia Corporation
-0017B6     (base 16)		Aquantia Corporation
-				700 Tasman Drive
-				Milpitas  CA  95035
-				US
-
-10-59-17   (hex)		Tonal
-105917     (base 16)		Tonal
-				1074 Folsom St
-				San Francisco    94103
-				US
-
-D0-EF-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D0EFC1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-52-51   (hex)		IBT Ingenieurbureau Broennimann Thun
-D45251     (base 16)		IBT Ingenieurbureau Broennimann Thun
-				Kasernenstrasse 5
-				Thun  Bern  3600
-				CH
-
-00-18-B5   (hex)		Magna Carta
-0018B5     (base 16)		Magna Carta
-				Naritaweg 126
-				Amsterdam  Noord Holland  1043 CA
-				NL
-
-D8-7E-B1   (hex)		x.o.ware, inc.
-D87EB1     (base 16)		x.o.ware, inc.
-				114 E. Haley St., Ste N
-				Santa Barbara  California  93101
-				US
-
-48-57-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-485702     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-4F-42   (hex)		JETTER CO., Ltd.
-644F42     (base 16)		JETTER CO., Ltd.
-				265-40 Emukaecho Tanomoto
-				Sasebo-shi  Nagasaki  859-6134
-				JP
-
-DC-AF-68   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-DCAF68     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-24-EC-51   (hex)		ADF Technologies Sdn Bhd
-24EC51     (base 16)		ADF Technologies Sdn Bhd
-				Plot 88F, Lintang Bayan Lepas 10, Bayan Lepas Industrial Park Phase IV
-				Bayan Lepas  Pulau Pinang  11900
-				MY
-
-70-89-CC   (hex)		China Mobile Group Device Co.,Ltd.
-7089CC     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-2C-5B-E1   (hex)		Centripetal Networks, Inc
-2C5BE1     (base 16)		Centripetal Networks, Inc
-				2251 Corporate Park Drive, Suite 150
-				Herndon  VA  201715806
-				US
-
-DC-EF-CA   (hex)		Murata Manufacturing Co., Ltd.
-DCEFCA     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-00-BC-60   (hex)		Cisco Systems, Inc
-00BC60     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-CC-7B-61   (hex)		NIKKISO CO., LTD.
-CC7B61     (base 16)		NIKKISO CO., LTD.
-				Yebisu Garden Place Tower 22nd Floor, 20-3, Ebisu 4-Chome
-				Shibuya-ku  Tokyo  150-6022
-				JP
-
-9C-71-3A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C713A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-97-B1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2C97B1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-99-69   (hex)		Dell Inc.
-A89969     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-A4-EA-8E   (hex)		Extreme Networks, Inc.
-A4EA8E     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-88-2D-53   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd.
-882D53     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd.
-				Baidu Campus, No.10 Shangdi 10th Street, Haidian District Beijing 100085 CN
-				Beijing    100085
-				CN
-
-00-D0-B5   (hex)		IPricot formerly DotCom
-00D0B5     (base 16)		IPricot formerly DotCom
-				10-12, avenue de Verdun
-				La-Garenne-Colombes    F-92250
-				FR
-
-74-6B-AB   (hex)		GUANGDONG ENOK COMMUNICATION CO., LTD
-746BAB     (base 16)		GUANGDONG ENOK COMMUNICATION CO., LTD
-				NO.139 Lixiang road, Songmushan Dalang Town
-				Dongguan, Guangdong    523770
-				CN
-
-78-29-ED   (hex)		ASKEY COMPUTER CORP
-7829ED     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-50-61-BF   (hex)		Cisco Systems, Inc
-5061BF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-DF   (hex)		Vestel Elektronik San ve Tic. A.Ş.
-0009DF     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
-				Organize san
-				Manisa  Turket  45030
-				TR
-
-F4-03-2F   (hex)		Reduxio Systems
-F4032F     (base 16)		Reduxio Systems
-				2 Granit St
-				Petach Tikvah    4951446
-				IL
-
-94-4A-0C   (hex)		Sercomm Corporation.
-944A0C     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-00-0F-A2   (hex)		2xWireless
-000FA2     (base 16)		2xWireless
-				1065 Maurader st
-				Chico  CA  95973
-				US
-
-10-8E-E0   (hex)		Samsung Electronics Co.,Ltd
-108EE0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-A6-21   (hex)		Samsung Electronics Co.,Ltd
-FCA621     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-8C-F2-28   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-8CF228     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-70-0F-6A   (hex)		Cisco Systems, Inc
-700F6A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-B2   (hex)		SMALLBIG TECHNOLOGY
-000BB2     (base 16)		SMALLBIG TECHNOLOGY
-				3F Dongsung Bldg. 720-9 Yoksamdong
-				Gangnamgu  Seoul  135-080
-				KR
-
-00-30-5E   (hex)		Abelko Innovation
-00305E     (base 16)		Abelko Innovation
-				Box 808
-				Lulea    97125
-				SE
-
-FC-6B-F0   (hex)		TOPWELL INTERNATIONAL HOLDINDS LIMITED
-FC6BF0     (base 16)		TOPWELL INTERNATIONAL HOLDINDS LIMITED
-				Room 1301-5,Buliding China Youshe,NO.6013,ShenNan Road,CheGong Temple,FuTian District,ShenZhen,GuangDong province,China
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-00-14-77   (hex)		Trilliant
-001477     (base 16)		Trilliant
-				950 Cowie st.
-				Granby  Quebec  J2J 1P2
-				CA
-
-00-07-9B   (hex)		Aurora Networks
-00079B     (base 16)		Aurora Networks
-				2803 Mission College Blvd.
-				Santa Clara  CA  95054
-				US
-
-54-48-10   (hex)		Dell Inc.
-544810     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-54-B2-03   (hex)		PEGATRON CORPORATION
-54B203     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-38-68-DD   (hex)		INVENTEC CORPORATION
-3868DD     (base 16)		INVENTEC CORPORATION
-				NO.88, DAZHI RD.
-				TAOYUAN    33068
-				TW
-
-B8-B7-F1   (hex)		Wistron Neweb Corporation
-B8B7F1     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-80-50-F6   (hex)		ITEL MOBILE LIMITED
-8050F6     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-A8-CA-B9   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-A8CAB9     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				SUWON  KYUNGGI-DO  443-743
-				KR
-
-20-39-56   (hex)		HMD Global Oy
-203956     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-78-AF-E4   (hex)		Comau S.p.A
-78AFE4     (base 16)		Comau S.p.A
-				via Rivalta 30
-				Grugliasco  (TO)  10095
-				IT
-
-90-A1-37   (hex)		Beijing Splendidtel Communication Technology Co,. Ltd
-90A137     (base 16)		Beijing Splendidtel Communication Technology Co,. Ltd
-				4 Floor,Taixing Tower,No.11 Huayuan East Road. Haidian District
-				Beijing  Beijing  100191
-				CN
-
-80-02-9C   (hex)		Gemtek Technology Co., Ltd.
-80029C     (base 16)		Gemtek Technology Co., Ltd.
-				No.15-1 Zhonghua Road
-				Hukou  Hsinchu  30352
-				TW
-
-D0-C5-D3   (hex)		AzureWave Technology Inc.
-D0C5D3     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-14-16-9E   (hex)		 Wingtech Group (HongKong）Limited
-14169E     (base 16)		 Wingtech Group (HongKong）Limited
-				 FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
-				Hong Kong  Hong Kong  999077
-				HK
-
-F8-C3-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F8C39E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-D0-99   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E8D099     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-10-7B-A4   (hex)		Olive & Dove Co.,Ltd.
-107BA4     (base 16)		Olive & Dove Co.,Ltd.
-				803 Polaris bldg., 381, Seongnam-daero, Bundang-gu 
-				Gyeonggi-do  Seongnam-si  13555
-				KR
-
-7C-41-A2   (hex)		Nokia
-7C41A2     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-BC-32-5F   (hex)		Zhejiang Dahua Technology Co., Ltd.
-BC325F     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-50-5B-C2   (hex)		Liteon Technology Corporation
-505BC2     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-6C-21-A2   (hex)		AMPAK Technology, Inc.
-6C21A2     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-9C-2F-73   (hex)		Universal Tiancheng Technology (Beijing) Co., Ltd.
-9C2F73     (base 16)		Universal Tiancheng Technology (Beijing) Co., Ltd.
-				13 floor,Changxin Building,Anding Road No.39,Chaoyang District,Beijing
-				Beijing  Beijing  100029
-				CN
-
-D8-32-E3   (hex)		Xiaomi Communications Co Ltd
-D832E3     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-94-87-E0   (hex)		Xiaomi Communications Co Ltd
-9487E0     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-38-AF-29   (hex)		Zhejiang Dahua Technology Co., Ltd.
-38AF29     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-C8-86-29   (hex)		Shenzhen Duubee Intelligent Technologies Co.,LTD.
-C88629     (base 16)		Shenzhen Duubee Intelligent Technologies Co.,LTD.
-				9F, Block B, Unicenter, Xin’an Sub district, Bao’an District
-				Shenzhen  GuangDong  518000
-				CN
-
-CC-C2-E0   (hex)		Raisecom Technology CO., LTD
-CCC2E0     (base 16)		Raisecom Technology CO., LTD
-				No. 11, East Area, No. 10 Block, East Xibeiwang Road
-				Beijing    100094
-				CN
-
-30-0A-C5   (hex)		Ruio telecommunication technologies Co., Limited
-300AC5     (base 16)		Ruio telecommunication technologies Co., Limited
-				Room 2501, Broadegate Software Building, No,1003 Keyuan Road,
-				Shenzhen  guangdong  518000
-				CN
-
-00-E0-65   (hex)		OPTICAL ACCESS INTERNATIONAL
-00E065     (base 16)		OPTICAL ACCESS INTERNATIONAL
-				500 WEST CUMMINGS PL. #3400
-				WOBURN  MA  01801
-				US
-
-44-66-FC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4466FC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-A0-28-ED   (hex)		HMD Global Oy
-A028ED     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-AC-54-74   (hex)		China Mobile IOT Company Limited
-AC5474     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-8C-1C-DA   (hex)		IEEE Registration Authority
-8C1CDA     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-07-A8   (hex)		Haier Group Technologies Ltd
-0007A8     (base 16)		Haier Group Technologies Ltd
-				No. 1 Haier Road, Hi-tech Zone
-				00000    00000
-				CN
-
-98-14-D2   (hex)		Avonic
-9814D2     (base 16)		Avonic
-				Distributieweg 60
-				Delfgauw    2645EJ
-				NL
-
-14-09-DC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1409DC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-93-65   (hex)		Mapper.ai, Inc.
-EC9365     (base 16)		Mapper.ai, Inc.
-				400 Treat Ave, Suite G
-				San Francisco  CA  94110
-				US
-
-C4-BA-A3   (hex)		Beijing Winicssec Technologies Co., Ltd.
-C4BAA3     (base 16)		Beijing Winicssec Technologies Co., Ltd.
-				F block 9th floor 907 of Jiahua Building, No.9 Shangdi 3rd Street
-				Haidian District  Beijing  100085
-				CN
-
-9C-FE-A1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-9CFEA1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-D8-8A-3B   (hex)		UNIT-EM
-D88A3B     (base 16)		UNIT-EM
-				167 Merchants Street
-				Valletta    VLT 1174
-				MT
-
-EC-5A-86   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-EC5A86     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-				Road NO2, West of Industrial Park,North of Science & Technology Park
-				Dongguan  Guangdong  518057
-				CN
-
-C0-EE-B5   (hex)		Enice Network.
-C0EEB5     (base 16)		Enice Network.
-				NO.30, Shuige Rd, JiangNing Economic Development Zone, Nanjing
-				Nanjing    211106
-				CN
-
-60-DE-F3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60DEF3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-A0-09   (hex)		Xiaomi Communications Co Ltd
-50A009     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-88-96-4E   (hex)		ARRIS Group, Inc.
-88964E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-88-3F-4A   (hex)		Texas Instruments
-883F4A     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-9C-A6-15   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-9CA615     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-E4-4E-76   (hex)		CHAMPIONTECH  ENTERPRISE (SHENZHEN) INC
-E44E76     (base 16)		CHAMPIONTECH  ENTERPRISE (SHENZHEN) INC
-				Against Office of Dong-Zhou Residential Committee Guang Ming
-				Shenzhen    518000
-				CN
-
-00-40-98   (hex)		DRESSLER GMBH & CO.
-004098     (base 16)		DRESSLER GMBH & CO.
-				KACKERTSTRASSE 10
-				    
-				DE
-
-00-1D-FA   (hex)		Fujian LANDI Commercial Equipment Co.,Ltd
-001DFA     (base 16)		Fujian LANDI Commercial Equipment Co.,Ltd
-				Building 17,the 1st Section ,Fuzhou Software Park
-				No.89 Software Road   Fuzhou ,Fujian  350003
-				CN
-
-9C-E6-5E   (hex)		Apple, Inc.
-9CE65E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C4-98-80   (hex)		Apple, Inc.
-C49880     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-33-8E   (hex)		Apple, Inc.
-E0338E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-F6-9C   (hex)		Apple, Inc.
-08F69C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-FA-83   (hex)		Qingdao Haier Technology Co.,Ltd
-04FA83     (base 16)		Qingdao Haier Technology Co.,Ltd
-				Building A01,Haier Information Park, No.1 Haier Road,
-				Qingdao  Shandong  266101
-				CN
-
-D0-76-E7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D076E7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-50-A6-7F   (hex)		Apple, Inc.
-50A67F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-61-DA   (hex)		Apple, Inc.
-D461DA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-18-98   (hex)		Apple, Inc.
-F01898     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-19-08   (hex)		Apple, Inc.
-881908     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-09-47   (hex)		Apple, Inc.
-5C0947     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-20-5E   (hex)		Apple, Inc.
-14205E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-41-A4   (hex)		Apple, Inc.
-B841A4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-16-5C   (hex)		Trackflow Ltd.
-00165C     (base 16)		Trackflow Ltd.
-				167-169 Kensington High Street
-				London  England  W86SH
-				GB
-
-64-1C-AE   (hex)		Samsung Electronics Co.,Ltd
-641CAE     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-F8-E4-4E   (hex)		MCOT INC.
-F8E44E     (base 16)		MCOT INC.
-				Yogohigashi 1-5-12
-				Matsuyama  Ehime  790-0044
-				JP
-
-40-CD-7A   (hex)		Qingdao Hisense Communications Co.,Ltd.
-40CD7A     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-DC-4E-F4   (hex)		Shenzhen MTN Electronics CO., Ltd
-DC4EF4     (base 16)		Shenzhen MTN Electronics CO., Ltd
-				MTN Industrial Park, No. 5, 9 South Futai Road, Pingxi Community, Pingdi Street, Longgang District
-				Shenzhen  Guangdong  518117
-				CN
-
-F0-81-73   (hex)		Amazon Technologies Inc.
-F08173     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno    89507
-				US
-
-EC-65-CC   (hex)		Panasonic Automotive Systems Company of America
-EC65CC     (base 16)		Panasonic Automotive Systems Company of America
-				776 Highway 74 South
-				Peachtree City  null  30269
-				US
-
-94-99-90   (hex)		VTC Telecommunications
-949990     (base 16)		VTC Telecommunications
-				750 (3rd Floor) Dien Bien Phu, District 10
-				Ho Chi Minh  Ho Chi Minh  70000
-				VN
-
-F4-BC-97   (hex)		Shenzhen Crave Communication Co., LTD
-F4BC97     (base 16)		Shenzhen Crave Communication Co., LTD
-				F3,8Building, DongFangMing IndustryZone, No.83 DabaoRD., 33 District BaoAn
-				Shenzhen    518000
-				CN
-
-28-FE-DE   (hex)		COMESTA, Inc.
-28FEDE     (base 16)		COMESTA, Inc.
-				Techno1-ro 61-7, Yuseong-gu, 
-				Daejeon    34014
-				KR
-
-90-79-10   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-907910     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-3D-E8   (hex)		LG Electronics (Mobile Communications)
-003DE8     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-68-FE-DA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-68FEDA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E8-98-6D   (hex)		Palo Alto Networks
-E8986D     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-14-4E-34   (hex)		Remote Solution
-144E34     (base 16)		Remote Solution
-				92, Chogokri, Nammyun
-				Kimcheon city  Kyungbuk  740-871
-				KR
-
-00-50-8B   (hex)		Hewlett Packard
-00508B     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-14-6B-9C   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-146B9C     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-94-8D-EF   (hex)		Oetiker Schweiz AG
-948DEF     (base 16)		Oetiker Schweiz AG
-				Spätzstrasse 11
-				Horgen    8810
-				CH
-
-2C-D9-74   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-2CD974     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-D4-F7-86   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D4F786     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-34-03-DE   (hex)		Texas Instruments
-3403DE     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-24-0A-63   (hex)		ARRIS Group, Inc.
-240A63     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-8B-37   (hex)		ARRIS Group, Inc.
-F88B37     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-20-67-7C   (hex)		Hewlett Packard Enterprise
-20677C     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-34-D7-12   (hex)		Smartisan Digital Co., Ltd
-34D712     (base 16)		Smartisan Digital Co., Ltd
-				4F, China Digital Kingdom, No.1 Wangjing North Road, Chaoyang District
-				Beijing  Beijing  100012
-				CN
-
-A0-66-10   (hex)		FUJITSU LIMITED
-A06610     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-44-FF-BA   (hex)		zte corporation
-44FFBA     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E0-E6-2E   (hex)		TCT mobile ltd
-E0E62E     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-E4-2D-7B   (hex)		China Mobile IOT Company Limited
-E42D7B     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-C4-64-E3   (hex)		Texas Instruments
-C464E3     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-88-17-A3   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-8817A3     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-88-A9-A7   (hex)		IEEE Registration Authority
-88A9A7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-EC-89-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC8914     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-94-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B89436     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-14-79   (hex)		iRobot Corporation 
-501479     (base 16)		iRobot Corporation 
-				8 Crosby Drive
-				Bedford  MA  01730
-				US
-
-60-84-BD   (hex)		BUFFALO.INC
-6084BD     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-34-7E-CA   (hex)		NEXTWILL
-347ECA     (base 16)		NEXTWILL
-				JJ-Building, 20, Deongmyeong-ro 71beon-gil1, Yuseong-gu
-				Daejeon    34155
-				KR
-
-B4-2E-F8   (hex)		Eline Technology co.Ltd
-B42EF8     (base 16)		Eline Technology co.Ltd
-				kangcheng Road, Pharmaceutical Industrical Park, Yuanzhou District
-				Yichun  Jiangxi  336000
-				CN
-
-A4-D4-B2   (hex)		Shenzhen MeiG Smart Technology Co.,Ltd
-A4D4B2     (base 16)		Shenzhen MeiG Smart Technology Co.,Ltd
-				#88 Qinjiang Road, Xuhui District
-				Shanghai    200233
-				CN
-
-8C-F7-73   (hex)		Nokia
-8CF773     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-DC-DD-24   (hex)		Energica Motor Company SpA
-DCDD24     (base 16)		Energica Motor Company SpA
-				Via Cesare della Chiesa, 150
-				MODENA (MO)  Mo  41126
-				IT
-
-64-1C-B0   (hex)		Samsung Electronics Co.,Ltd
-641CB0     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-90-3A-72   (hex)		Ruckus Wireless
-903A72     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-CC-3B-58   (hex)		Curiouser Products Inc
-CC3B58     (base 16)		Curiouser Products Inc
-				712 Broadway #4
-				New York  NY  10003
-				US
-
-4C-EF-C0   (hex)		Amazon Technologies Inc.
-4CEFC0     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-8C-59-73   (hex)		Zyxel Communications Corporation
-8C5973     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-24-18-1D   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-24181D     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-58-D7-59   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-58D759     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-90-66   (hex)		Nain Inc.
-F89066     (base 16)		Nain Inc.
-				Aoyamadai building 902, Shibuya 2-9-10, Shibuya-ku
-				Tokyo    150-0002
-				JP
-
-70-06-AC   (hex)		Eastcompeace Technology Co., Ltd
-7006AC     (base 16)		Eastcompeace Technology Co., Ltd
-				Number 8 Pinggong Zhong Road,Nanping S&T Industry Community,Zhuhai,Guangdong,519060 China 
-				Zhuhai  Guangdong  519060
-				CN
-
-28-02-D8   (hex)		Samsung Electronics Co.,Ltd
-2802D8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-E5-33   (hex)		IEEE Registration Authority
-DCE533     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D8-44-5C   (hex)		DEV Tecnologia Ind Com Man Eq LTDA
-D8445C     (base 16)		DEV Tecnologia Ind Com Man Eq LTDA
-				Av Prof Lineu Prestes 2242 SL 23
-				Sao Paulo  SP  05508000
-				BR
-
-50-95-51   (hex)		ARRIS Group, Inc.
-509551     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-80-41-26   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-804126     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-F9-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ACF970     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-39-53   (hex)		zte corporation
-7C3953     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-E1-AA   (hex)		zte corporation
-38E1AA     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-48-C7-96   (hex)		Samsung Electronics Co.,Ltd
-48C796     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F4-C2-48   (hex)		Samsung Electronics Co.,Ltd
-F4C248     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F4-71-90   (hex)		Samsung Electronics Co.,Ltd
-F47190     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-FF-BC   (hex)		IEEE Registration Authority
-C4FFBC     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-0C-23-69   (hex)		Honeywell SPS
-0C2369     (base 16)		Honeywell SPS
-				700 Visions Dr.
-				Skaneateles Falls  NY  13153
-				US
-
-04-C9-D9   (hex)		Dish Technologies Corp
-04C9D9     (base 16)		Dish Technologies Corp
-				94 Inverness Terrace E
-				Englewood  CO  80112
-				US
-
-70-55-F8   (hex)		Cerebras Systems Inc
-7055F8     (base 16)		Cerebras Systems Inc
-				175 S San Antonio Rd #100
-				Los Altos  CA  94022
-				US
-
-6C-54-CD   (hex)		LAMPEX ELECTRONICS LIMITED
-6C54CD     (base 16)		LAMPEX ELECTRONICS LIMITED
-				6-2/231/B, Kukatpally,
-				Hyderabad  Telangana  500072
-				IN
-
-00-08-89   (hex)		Dish Technologies Corp
-000889     (base 16)		Dish Technologies Corp
-				94 Inverness Terrace E
-				Englewood  CO  80112
-				US
-
-F0-B5-B7   (hex)		Disruptive Technologies Research AS
-F0B5B7     (base 16)		Disruptive Technologies Research AS
-				Ytrebygdsvegen 215
-				Blomsterdalen  Hordaland  5258
-				NO
-
-B4-DE-DF   (hex)		zte corporation
-B4DEDF     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D4-90-9C   (hex)		Apple, Inc.
-D4909C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-E0-A6   (hex)		Apple, Inc.
-E4E0A6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-04-54   (hex)		ICOMM HK LIMITED
-580454     (base 16)		ICOMM HK LIMITED
-				SUITES 2302-6, 23/F GREAT EAGLE CTR 23 HARBOUR RD 
-				WANCHAI    NA
-				HK
-
-3C-9A-77   (hex)		Technicolor CH USA Inc.
-3C9A77     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-C4-77-AF   (hex)		Advanced Digital Broadcast SA
-C477AF     (base 16)		Advanced Digital Broadcast SA
-				Route de Crassier 21, B2
-				Eysins    CH-1262
-				CH
-
-94-29-0C   (hex)		Shenyang wisdom Foundation Technology Development Co., Ltd.
-94290C     (base 16)		Shenyang wisdom Foundation Technology Development Co., Ltd.
-				No. 262 North Main Street, Huanggu District, the Yellow River
-				shenyang    110000
-				CN
-
-9C-32-CE   (hex)		CANON INC.
-9C32CE     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-20-E0-9C   (hex)		Nokia
-20E09C     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-2C-FD-A1   (hex)		ASUSTek COMPUTER INC.
-2CFDA1     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-38-07-D4   (hex)		Zeppelin Systems GmbH
-3807D4     (base 16)		Zeppelin Systems GmbH
-				Messenhäuser Str. 37-45
-				Rödermark  Hessen  63322
-				DE
-
-04-19-7F   (hex)		Grasphere Japan
-04197F     (base 16)		Grasphere Japan
-				3-1-11 NNT build. 
-				Tokyo    1030013
-				JP
-
-5C-00-38   (hex)		Viasat Group S.p.A.
-5C0038     (base 16)		Viasat Group S.p.A.
-				Via Aosta 23
-				Venaria Reale   Torino  10078
-				IT
-
-8C-EC-4B   (hex)		Dell Inc.
-8CEC4B     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-50-91   (hex)		NETACCESS, INC.
-005091     (base 16)		NETACCESS, INC.
-				18 KEEWAYDIN DRIVE
-				SALEM  NH  03079
-				US
-
-B8-50-01   (hex)		Extreme Networks, Inc.
-B85001     (base 16)		Extreme Networks, Inc.
-				ONE ZEBRA PLAZA
-				HOLTSVILLE  NY  11742
-				US
-
-80-2B-F9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-802BF9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-54-B8-02   (hex)		Samsung Electronics Co.,Ltd
-54B802     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-CE-A9   (hex)		Texas Instruments
-10CEA9     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-80-5E-0C   (hex)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
-805E0C     (base 16)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
-				309, 3th Floor, No.16, Yun Ding North Road, Huli District
-				xiamen  Fujian  361015
-				CN
-
-6C-49-C1   (hex)		o2ones Co., Ltd.
-6C49C1     (base 16)		o2ones Co., Ltd.
-				503 Glory Tower, 3-10, Gumi-ro 9beon-gil, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13637
-				KR
-
-70-EE-A3   (hex)		Eoptolink Technology Inc. Ltd,
-70EEA3     (base 16)		Eoptolink Technology Inc. Ltd,
-				No.127 West Wulian Street
-				Chengdu  China/Sichuan  610213
-				CN
-
-70-47-E9   (hex)		vivo Mobile Communication Co., Ltd.
-7047E9     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-5C-52-1E   (hex)		Nintendo Co.,Ltd
-5C521E     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-14-44-4A   (hex)		Apollo Seiko Ltd.
-14444A     (base 16)		Apollo Seiko Ltd.
-				2271-7 Jinba
-				Gotenba  Shizuoka  412-0047
-				JP
-
-3C-2C-99   (hex)		Edgecore Networks Corporation
-3C2C99     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-68-3E-02   (hex)		SIEMENS AG, Digital Factory, Motion Control System
-683E02     (base 16)		SIEMENS AG, Digital Factory, Motion Control System
-				Varey Road
-				Congleton  Cheshire  CW12 1PH
-				GB
-
-00-02-61   (hex)		Tilgin AB
-000261     (base 16)		Tilgin AB
-				Finlandsgatan 40
-				kista    12345
-				SE
-
-00-14-C3   (hex)		Seagate Technology
-0014C3     (base 16)		Seagate Technology
-				M/S NW1F01
-				Longmont  CO  80503
-				US
-
-00-04-CF   (hex)		Seagate Technology
-0004CF     (base 16)		Seagate Technology
-				M/S NW1F01
-				Longmont  CO  80503
-				US
-
-00-20-37   (hex)		Seagate Technology
-002037     (base 16)		Seagate Technology
-				8001 E. BLOOMINGTON FWY
-				BLOOMINGTON  MN  55420
-				US
-
-5C-81-A7   (hex)		Network Devices Pty Ltd
-5C81A7     (base 16)		Network Devices Pty Ltd
-				16 Dickson Ave
-				Artarmon  NSW  2064
-				AU
-
-5C-0C-0E   (hex)		Guizhou Huaxintong Semiconductor Technology Co Ltd
-5C0C0E     (base 16)		Guizhou Huaxintong Semiconductor Technology Co Ltd
-				Sitelin Park
-				Intersection between Jin ma Ave and Qianzhong Ave  Gui An New Area, Guizhou Prov  550003
-				CN
-
-50-3C-EA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-503CEA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-D0-96-FB   (hex)		DASAN Network Solutions
-D096FB     (base 16)		DASAN Network Solutions
-				DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu
-				Seongnam-si  Gyeonggi-do  13493
-				KR
-
-00-E0-91   (hex)		LG Electronics
-00E091     (base 16)		LG Electronics
-				16, Woomyeon-dong, Seocho-gu
-				Seoul    137-724
-				KR
-
-38-43-7D   (hex)		Compal Broadband Networks, Inc.
-38437D     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-50-6F-98   (hex)		Sehaj Synergy Technologies Private Limited
-506F98     (base 16)		Sehaj Synergy Technologies Private Limited
-				E-112A, Kataria Colony, Ramanagar Extension, New Sanganer Road, Sodala, Jaipur-302019
-				Jaipur  Rajasthan  302019
-				IN
-
-4C-AE-1C   (hex)		SaiNXT Technologies LLP
-4CAE1C     (base 16)		SaiNXT Technologies LLP
-				Shop No. 7, Sonawala Building, 1st Floor, Proctor Road, Grant Road (E)
-				Mumbai  Maharashtra  400007
-				IN
-
-14-28-82   (hex)		MIDICOM ELECTRONICS CO.LTD
-142882     (base 16)		MIDICOM ELECTRONICS CO.LTD
-				Bucheon Techno Park 303-404,345
-				Seokcheon-ro,Bucheon-si  Gyeonggi-do   1501
-				KR
-
-EC-81-93   (hex)		Logitech, Inc
-EC8193     (base 16)		Logitech, Inc
-				4700 NW Camas Meadows Drive
-				Camas  WA  98607
-				US
-
-6C-DD-30   (hex)		Cisco Systems, Inc
-6CDD30     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-4E-86   (hex)		Third Millennium Systems Ltd.
-6C4E86     (base 16)		Third Millennium Systems Ltd.
-				18/19 Torfaen Business Centre, Panteg Way
-				New Inn, Pontypool  Torfaen  NP4 0LS
-				GB
-
-5C-86-C1   (hex)		DONGGUAN SOLUM ELECTRONICS CO.,LTD
-5C86C1     (base 16)		DONGGUAN SOLUM ELECTRONICS CO.,LTD
-				NO.157,13 Coastal Way TPFTZ
-				TIANJIN    300461
-				CN
-
-5C-77-76   (hex)		TCT mobile ltd
-5C7776     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-70-E5-6E   (hex)		Texas Instruments
-70E56E     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-54-7D-CD   (hex)		Texas Instruments
-547DCD     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-00-AE-CD   (hex)		Pensando Systems
-00AECD     (base 16)		Pensando Systems
-				1730 Technology Drive, Suite 202
-				San Jose  CA  95110
-				US
-
-FC-9D-D8   (hex)		Beijing TongTongYiLian Science and Technology Ltd.
-FC9DD8     (base 16)		Beijing TongTongYiLian Science and Technology Ltd.
-				 Room 301,Zone 3,Building 9,No.8 Dongbeiwang West Road,Haidian District,Beijing
-				BEIJING  BEIJING  100193
-				CN
-
-DC-28-34   (hex)		HAKKO Corporation
-DC2834     (base 16)		HAKKO Corporation
-				4-5, Shiokusa 2-chome, Naniwaku
-				Osaka  Osaka  556-0024
-				JP
-
-84-50-9A   (hex)		Easy Soft TV Co., Ltd
-84509A     (base 16)		Easy Soft TV Co., Ltd
-				#1613, Heungduk U-Tower, Heungduk Jung ang-ro 120
-				Yongin-si  Gyeounggi-do  16950
-				KR
-
-00-17-30   (hex)		Automation Electronics
-001730     (base 16)		Automation Electronics
-				111 Big Horn Rd.
-				Casper  Wy  82601
-				US
-
-30-E4-8E   (hex)		Vodafone UK
-30E48E     (base 16)		Vodafone UK
-				Vodafone House 
-				Newbury   Berkshire   RG142FN
-				GB
-
-44-91-60   (hex)		Murata Manufacturing Co., Ltd.
-449160     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-B4-F1-DA   (hex)		LG Electronics (Mobile Communications)
-B4F1DA     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-C8-63-F1   (hex)		Sony Interactive Entertainment Inc.
-C863F1     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-DC-E1-AD   (hex)		Shenzhen Wintop Photoelectric Technology Co., Ltd
-DCE1AD     (base 16)		Shenzhen Wintop Photoelectric Technology Co., Ltd
-				6th Floor, 1st Building, Zone 3, South Area, Zhongguan& Honghualing Industrial Zone, No. 1213, Liuxian Avenue, Taoyuan Street, Nanshan District, Shenzhen, China
-				Shenzhen  Guangdong  518054
-				CN
-
-94-88-54   (hex)		Texas Instruments
-948854     (base 16)		Texas Instruments
-				12500 TI Boulevard
-				Dallas  TX  75243
-				US
-
-00-1D-0D   (hex)		Sony Interactive Entertainment Inc.
-001D0D     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-B0-FC-36   (hex)		CyberTAN Technology Inc.
-B0FC36     (base 16)		CyberTAN Technology Inc.
-				99 Park Ave III, Hsinchu Science Park
-				Hsinchu    308
-				TW
-
-00-1D-F4   (hex)		Magellan Technology Pty Limited
-001DF4     (base 16)		Magellan Technology Pty Limited
-				65 Johnston Street
-				Annandale  NSW  2000
-				AU
-
-6C-05-D5   (hex)		Ethertronics Inc
-6C05D5     (base 16)		Ethertronics Inc
-				5501 Oberlin Drive, Suite 100
-				SAN DIEGO  CA  92121
-				US
-
-00-19-C2   (hex)		Equustek Solutions, Inc.
-0019C2     (base 16)		Equustek Solutions, Inc.
-				#286 - 5489 Byrne Road,
-				Burnaby  BC  V5J 3J1
-				CA
-
-EC-B0-E1   (hex)		Ciena Corporation
-ECB0E1     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-78-DD-D9   (hex)		Guangzhou Shiyuan Electronics Co., Ltd. 
-78DDD9     (base 16)		Guangzhou Shiyuan Electronics Co., Ltd. 
-				No.6, 4th Yunpu Road, Yunpu Industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-F8-B7-E2   (hex)		Cisco Systems, Inc
-F8B7E2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F8-20-55   (hex)		Green Information System
-F82055     (base 16)		Green Information System
-				#202(Shopping center), Woldong-ro 28, Buk-gu
-				Gwangju    61153
-				KR
-
-74-E1-9A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-74E19A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-00-00-97   (hex)		Dell EMC
-000097     (base 16)		Dell EMC
-				176 South Street
-				Hopkinton  MA  01748
-				US
-
-8C-CF-09   (hex)		Dell EMC
-8CCF09     (base 16)		Dell EMC
-				228 South St
-				Hopkinton  MA  01748
-				US
-
-8C-83-9D   (hex)		SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD
-8C839D     (base 16)		SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD
-				ROOM 1505,BIT INNOVATION BUILDING,SCIENCE AND TECHNOLOGY PARK,NANSHAN DISTRICT
-				Shenzhen    518057
-				CN
-
-B0-C1-9E   (hex)		zte corporation
-B0C19E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-0C-37-47   (hex)		zte corporation
-0C3747     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-AC-A6-67   (hex)		Electronic Systems Protection, Inc.
-ACA667     (base 16)		Electronic Systems Protection, Inc.
-				8001 Knightdale Blvd.
-				Knightdale  NC  27545
-				US
-
-00-81-F9   (hex)		Texas Instruments
-0081F9     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-EC-B5-FA   (hex)		Philips Lighting BV
-ECB5FA     (base 16)		Philips Lighting BV
-				High Tech Campus 45
-				Eindhoven  Noord Brabant  5656 AE
-				NL
-
-44-CD-0E   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-44CD0E     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
-				Zhuhai  Guangdong  519180
-				CN
-
-E8-82-5B   (hex)		ARRIS Group, Inc.
-E8825B     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-70-99-1C   (hex)		Shenzhen Honesty Electronics Co.,Ltd
-70991C     (base 16)		Shenzhen Honesty Electronics Co.,Ltd
-				5/F,Zone B,Chitat Industrial Park,West Longping Road
-				Shenzhen City  Longgang District, Guangdong  518172
-				CN
-
-80-B0-3D   (hex)		Apple, Inc.
-80B03D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-9A-DC   (hex)		Apple, Inc.
-E49ADC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-E4-B5   (hex)		Apple, Inc.
-ACE4B5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-D2-B0   (hex)		Apple, Inc.
-D0D2B0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1C-AE   (hex)		WiChorus, Inc.
-001CAE     (base 16)		WiChorus, Inc.
-				3590 N 1st Street, Suite 300
-				San Jose  CA  95134
-				US
-
-7C-DD-76   (hex)		Suzhou Hanming Technologies Co., Ltd.
-7CDD76     (base 16)		Suzhou Hanming Technologies Co., Ltd.
-				Suite 407, No. 166, Ren Ai Road
-				Suzhou  Jiangsu  215123
-				CN
-
-24-68-80   (hex)		Braveridge.co.,ltd.
-246880     (base 16)		Braveridge.co.,ltd.
-				3-27-2, Susenji
-				Nishi-ku, Fukuoka-shi  Fukuoka  819-0373
-				JP
-
-E8-DF-70   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-E8DF70     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-28-AD-3E   (hex)		Shenzhen TONG BO WEI Technology CO.,LTD
-28AD3E     (base 16)		Shenzhen TONG BO WEI Technology CO.,LTD
-				Longhua District, Dalang street Langkou community Huarong Road Peng Tengda Industrial Park 4 5 floor
-				SHENZHEN  guangdong  518109
-				CN
-
-00-1C-56   (hex)		Pado Systems, Inc.
-001C56     (base 16)		Pado Systems, Inc.
-				#706 Loadland EZ Tower 153
-				SungNam  Gyung gi-Do  463-810
-				KR
-
-F0-6D-78   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-F06D78     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-78-44-FD   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-7844FD     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-70-7D-95   (hex)		Shenzhen City LinwlanTechnology Co. Ltd.
-707D95     (base 16)		Shenzhen City LinwlanTechnology Co. Ltd.
-				106 village road , manhole street Baoan district .
-				Shenzhen  Guangdong  518125
-				CN
-
-2C-43-1A   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-2C431A     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-A8-D3-C8   (hex)		Topcon Electronics GmbH & Co. KG
-A8D3C8     (base 16)		Topcon Electronics GmbH & Co. KG
-				Industriestraße 7
-				Geisenheim    65366
-				DE
-
-D0-59-95   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D05995     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-18-CC-88   (hex)		Hitachi Johnson Controls Air 
-18CC88     (base 16)		Hitachi Johnson Controls Air 
-				390 Number
-				 Shimizu Village Village  Shizuoka Prefecture  424-0926
-				JP
-
-80-C7-55   (hex)		Panasonic Appliances Company
-80C755     (base 16)		Panasonic Appliances Company
-				2-3-1-2 Noji-higashi
-				Kusatsu City  Shiga  525-8555
-				JP
-
-F0-BD-2E   (hex)		H+S Polatis Ltd
-F0BD2E     (base 16)		H+S Polatis Ltd
-				332/2 Cambridge Science Park
-				Cambridge    CB4 0WN
-				GB
-
-74-6E-E4   (hex)		Asia Vital Components Co.,Ltd.
-746EE4     (base 16)		Asia Vital Components Co.,Ltd.
-				Rm. 3, 7F., No.24, Wuquan 2nd Rd., Xinzhuang Dist., 
-				 New Taipei   Taiwan  24892
-				TW
-
-00-40-E4   (hex)		E-M TECHNOLOGY, INC.
-0040E4     (base 16)		E-M TECHNOLOGY, INC.
-				9245 SOUTHWEST NIMBUS AVE.
-				BEAVERTON  OR  97005
-				US
-
-98-4B-4A   (hex)		ARRIS Group, Inc.
-984B4A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E0-84-F3   (hex)		High Grade Controls Corporation
-E084F3     (base 16)		High Grade Controls Corporation
-				87 Magill Street
-				Sudbury  Ontario  P3Y1K6
-				CA
-
-70-70-8B   (hex)		Cisco Systems, Inc
-70708B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-38-9F-5A   (hex)		C-Kur TV Inc.
-389F5A     (base 16)		C-Kur TV Inc.
-				A-1902, 583, Yangcheon-ro, Gangseo-gu
-				Seoul    07547
-				KR
-
-D8-43-ED   (hex)		Suzuken
-D843ED     (base 16)		Suzuken
-				8, Higashikatahamachi, Higashiku
-				Nagoya  Aich  4610015
-				JP
-
-04-3A-0D   (hex)		SM Optics S.r.l.
-043A0D     (base 16)		SM Optics S.r.l.
-				via Michelangelo Buonarroti, 1
-				Cologno Monzese  Milan  I-20093
-				IT
-
-44-8F-17   (hex)		Samsung Electronics Co., Ltd. ARTIK
-448F17     (base 16)		Samsung Electronics Co., Ltd. ARTIK
-				1-1, Samsungjeonja-ro
-				Hwaseong-si  Gyeonggi-do  18448
-				KR
-
-00-FC-8B   (hex)		Amazon Technologies Inc.
-00FC8B     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-76-B1   (hex)		Somfy-Protect By Myfox SAS
-0076B1     (base 16)		Somfy-Protect By Myfox SAS
-				Regent Park II, Bât I, 2460 l'Occitane
-				Labège    31670
-				FR
-
-6C-C1-47   (hex)		Xiamen Hanin Electronic Technology Co., Ltd
-6CC147     (base 16)		Xiamen Hanin Electronic Technology Co., Ltd
-				#8 building, Gaoqi Nan Shi'er Road, Huli Distric
-				Xiamen  Fujian  361000
-				CN
-
-A0-72-E4   (hex)		NJ SYSTEM CO.,LTD
-A072E4     (base 16)		NJ SYSTEM CO.,LTD
-				Urim lions valley 5cha, A-1701, 144-3, Sangdaewon-dong, Jungwon-gu
-				Seongnam  Gyeonggido  13201
-				KR
-
-4C-13-65   (hex)		Emplus Technologies
-4C1365     (base 16)		Emplus Technologies
-				Bld B, 10F, No.209, Sec.1, Nangang Rd
-				Taipei    115
-				TW
-
-CC-F9-57   (hex)		u-blox AG
-CCF957     (base 16)		u-blox AG
-				Zuercherstrasse 68
-				Thalwil    8800
-				CH
-
-0C-62-A6   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-0C62A6     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-18-13-2D   (hex)		zte corporation
-18132D     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-74-D2-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-74D21D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-78-D4   (hex)		Verizon 
-1878D4     (base 16)		Verizon 
-				One Verizon Way
-				Basking Ridge  NJ  07920
-				US
-
-B8-D9-4D   (hex)		Sagemcom Broadband SAS
-B8D94D     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-38-90-A5   (hex)		Cisco Systems, Inc
-3890A5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C0-74-2B   (hex)		SHENZHEN XUNLONG SOFTWARE CO.,LIMITED
-C0742B     (base 16)		SHENZHEN XUNLONG SOFTWARE CO.,LIMITED
-				Room 532, Block A, Huameiju Business Center, Xinhu Road, Baoan 82 Area
-				Shenzhen  Guangdong  518133
-				CN
-
-5C-67-76   (hex)		IDS Imaging Development Systems GmbH
-5C6776     (base 16)		IDS Imaging Development Systems GmbH
-				Dimbacher Str. 6
-				Obersulm  BW  74182
-				DE
-
-44-EA-D8   (hex)		Texas Instruments
-44EAD8     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-18-9B-A5   (hex)		IEEE Registration Authority
-189BA5     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-1C-70-22   (hex)		Murata Manufacturing Co., Ltd.
-1C7022     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-CC-98-91   (hex)		Cisco Systems, Inc
-CC9891     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-28-BF-89   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-28BF89     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-90-3D-BD   (hex)		SECURE METERS LIMITED
-903DBD     (base 16)		SECURE METERS LIMITED
-				E CLASS, PRATAP NAGAR INDUSTRIAL AREA
-				UDAIPUR  RAJASTHAN  313003
-				IN
-
-00-22-94   (hex)		KYOCERA CORPORATION 
-002294     (base 16)		KYOCERA CORPORATION 
-				2-1-1,Kagahara
-				Yokohama-shi  Kanagawa  224-8502
-				JP
-
-38-89-DC   (hex)		Opticon Sensors Europe B.V.
-3889DC     (base 16)		Opticon Sensors Europe B.V.
-				Opaallaan 35
-				Hoofddorp  Noord Holland  2132 XV
-				NL
-
-8C-45-00   (hex)		Murata Manufacturing Co., Ltd.
-8C4500     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-1C-DD-EA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-1CDDEA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-94-00-06   (hex)		jinyoung
-940006     (base 16)		jinyoung
-				1000 Dongil-ro Nowon-gu Seoul
-				Seoul    01849
-				KR
-
-20-04-0F   (hex)		Dell Inc.
-20040F     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-A4-34-12   (hex)		Thales Alenia Space
-A43412     (base 16)		Thales Alenia Space
-				26 av JF Champollion
-				Toulouse    31037
-				FR
-
-8C-85-90   (hex)		Apple, Inc.
-8C8590     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-88-C3   (hex)		Ningbo Dooya Mechanic & Electronic Technology Co., Ltd
-BC88C3     (base 16)		Ningbo Dooya Mechanic & Electronic Technology Co., Ltd
-				No.168 Shengguang road Luotuo street Zhenhai district
-				Ningbo  Zhejiang  315202
-				CN
-
-38-CD-07   (hex)		Beijing FaceCam Technology Co., Ltd.
-38CD07     (base 16)		Beijing FaceCam Technology Co., Ltd.
-				Room C115, DongSheng Building, No 8, East Road, Zhongguan Town, Haidian District
-				Beijing    100083
-				CN
-
-00-D0-60   (hex)		Panasonic Europe Ltd.
-00D060     (base 16)		Panasonic Europe Ltd.
-				LABORATORIES GMBH
-				    
-				DE
-
-EC-FA-03   (hex)		FCA
-ECFA03     (base 16)		FCA
-				800 Chrylser Dr
-				Auburn Hills  MI  48326
-				US
-
-6C-96-CF   (hex)		Apple, Inc.
-6C96CF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-1F-40   (hex)		Blu Wireless Technology Ltd
-681F40     (base 16)		Blu Wireless Technology Ltd
-				Bluwireless Technology, 5th Floor, 1 Temple Way
-				Bristol  Bristol, City of  BS2 0BY
-				GB
-
-90-AD-F7   (hex)		vivo Mobile Communication Co., Ltd.
-90ADF7     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-40-CE-24   (hex)		Cisco Systems, Inc
-40CE24     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-32-E6   (hex)		Panasonic Industrial Devices Europe GmbH
-3432E6     (base 16)		Panasonic Industrial Devices Europe GmbH
-				Zeppelinstraße 19
-				Lüneburg    21337
-				DE
-
-40-01-7A   (hex)		Cisco Systems, Inc
-40017A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-78-88-6D   (hex)		Apple, Inc.
-78886D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-EE-28   (hex)		Apple, Inc.
-20EE28     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-F6-1C   (hex)		Apple, Inc.
-B4F61C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-F4-AB   (hex)		Apple, Inc.
-08F4AB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-01-7C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-FC017C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-90-32-4B   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-90324B     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-60-2E-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-602E20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-72-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E472E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-12-7D   (hex)		MobileAria
-00127D     (base 16)		MobileAria
-				800 W El Camino Real #240
-				Mountain View  CA  94040
-				US
-
-F8-64-65   (hex)		Anova Applied Electronics, Inc.
-F86465     (base 16)		Anova Applied Electronics, Inc.
-				580 Howard Street, #403
-				san francisco  CA  94105
-				US
-
-00-20-60   (hex)		ALCATEL ITALIA S.p.A.
-002060     (base 16)		ALCATEL ITALIA S.p.A.
-				VIA TRENTO, 30
-				20059 VIMERCATE (MI)    
-				IT
-
-50-8F-4C   (hex)		Xiaomi Communications Co Ltd
-508F4C     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-A4-77-58   (hex)		Ningbo Freewings Technologies Co.,Ltd
-A47758     (base 16)		Ningbo Freewings Technologies Co.,Ltd
-				No.502 Wenshui Road, Shounan Street, Yinzhou District
-				Ningbo  Zhejiang  315192
-				CN
-
-58-A0-CB   (hex)		TrackNet, Inc
-58A0CB     (base 16)		TrackNet, Inc
-				900 Lafayette Street #329
-				Santa Clara  CA  95050
-				US
-
-E0-60-89   (hex)		Cloudleaf, Inc.
-E06089     (base 16)		Cloudleaf, Inc.
-				860 Hillview Court, Suite 350
-				Milpitas  CA  95035
-				US
-
-78-36-90   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-783690     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-				Road NO2, West of Industrial Park,North of Science & Technology Park
-				Dongguan  Guangdong  518057
-				CN
-
-BC-54-FC   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-BC54FC     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-0C-4B-54   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-0C4B54     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-E4-F0-04   (hex)		Dell Inc.
-E4F004     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-94-E3-6D   (hex)		Texas Instruments
-94E36D     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F0-F8-F2   (hex)		Texas Instruments
-F0F8F2     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-34-15-13   (hex)		Texas Instruments
-341513     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-74-81-9A   (hex)		PT. Hartono Istana Teknologi
-74819A     (base 16)		PT. Hartono Istana Teknologi
-				KHR Asnawi
-				Kudus  Jawa Tengah  59332
-				ID
-
-28-35-45   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-283545     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-04-4F-4C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-044F4C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-B8-1F   (hex)		ARRIS Group, Inc.
-18B81F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-1C-15-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C151F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-8B-FC   (hex)		mixi,Inc.
-008BFC     (base 16)		mixi,Inc.
-				Sumitomo Shibuya First Tower 7F, 1-2-20 Higashi
-				Shibuya-ku  Tokyo  150-0011
-				JP
-
-A8-2B-B5   (hex)		Edgecore Networks Corporation
-A82BB5     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-E8-E1-E2   (hex)		Energotest
-E8E1E2     (base 16)		Energotest
-				Chorzowska 44B
-				Gliwice  Slask  44-100
-				PL
-
-78-11-DC   (hex)		XIAOMI Electronics,CO.,LTD
-7811DC     (base 16)		XIAOMI Electronics,CO.,LTD
-				Xiaomi Building, No.68 Qinghe Middle Street
-				Haidian District  Beijing  100085
-				CN
-
-D4-63-C6   (hex)		Motorola Mobility LLC, a Lenovo Company
-D463C6     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-F8-44-E3   (hex)		Taicang T&W Electronics
-F844E3     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-24-A5-34   (hex)		SynTrust Tech International Ltd. 
-24A534     (base 16)		SynTrust Tech International Ltd. 
-				10F-1, No. 125, Songde Road,
-				Taipei  Taiwan  110
-				TW
-
-C4-44-A0   (hex)		Cisco Systems, Inc
-C444A0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-18-74-2E   (hex)		Amazon Technologies Inc.
-18742E     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno    89507
-				US
-
-90-A3-65   (hex)		HMD Global Oy
-90A365     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-DC-44-B6   (hex)		Samsung Electronics Co.,Ltd
-DC44B6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-07-B6   (hex)		Samsung Electronics Co.,Ltd
-1007B6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-2D-0D   (hex)		Samsung Electronics Co.,Ltd
-342D0D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-4C-C8   (hex)		Dell Inc.
-A44CC8     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-D8-37-BE   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-D837BE     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				#1905 Mei Hong Road
-				Shanghai  Shanghai  200000
-				CN
-
-D4-68-4D   (hex)		Ruckus Wireless
-D4684D     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-8C-0C-90   (hex)		Ruckus Wireless
-8C0C90     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-6C-AA-B3   (hex)		Ruckus Wireless
-6CAAB3     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-00-13-92   (hex)		Ruckus Wireless
-001392     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-08-51-14   (hex)		QINGDAO TOPSCOMM COMMUNICATION CO., LTD
-085114     (base 16)		QINGDAO TOPSCOMM COMMUNICATION CO., LTD
-				7/F, Building 6, NO.288, Ningxia Road
-				Qingdao   Shandong  266024
-				CN
-
-D0-5A-00   (hex)		Technicolor CH USA Inc.
-D05A00     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-70-78-8B   (hex)		vivo Mobile Communication Co., Ltd.
-70788B     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-48-59-A4   (hex)		zte corporation
-4859A4     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-54-BD-79   (hex)		Samsung Electronics Co.,Ltd
-54BD79     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-A0-42-3F   (hex)		Tyan Computer Corp
-A0423F     (base 16)		Tyan Computer Corp
-				3288 Larurelview Court
-				Fremont  CA  94538
-				US
-
-70-F1-1C   (hex)		Shenzhen Ogemray Technology Co.,Ltd
-70F11C     (base 16)		Shenzhen Ogemray Technology Co.,Ltd
-				4/F,5Bldg,Dongwu Industrial Park, Donghuan 1st Rd, Longhua District.
-				Shenzhen    518059
-				CN
-
-70-65-A3   (hex)		Kandao lightforge Co., Ltd.
-7065A3     (base 16)		Kandao lightforge Co., Ltd.
-				5th Floor, M7 Steel Building, the second way in Technology Road , Nanshan District, 
-				Shenzhen  Guangdong  518057
-				CN
-
-14-14-4B   (hex)		Ruijie Networks Co.,LTD
-14144B     (base 16)		Ruijie Networks Co.,LTD
-				19-22# Building,Star-net Science Plaza,Juyuanzhou, 
-				FUZHOU  FUJIAN  350002
-				CN
-
-74-D0-DC   (hex)		Ericsson AB
-74D0DC     (base 16)		Ericsson AB
-				Torshamnsgatan 48
-				STOCKHOLM    164 83
-				SE
-
-C0-8A-DE   (hex)		Ruckus Wireless
-C08ADE     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-00-1D-2E   (hex)		Ruckus Wireless
-001D2E     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-B4-E6-2A   (hex)		LG Innotek
-B4E62A     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-A0-C5-F2   (hex)		IEEE Registration Authority
-A0C5F2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A8-6B-7C   (hex)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
-A86B7C     (base 16)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
-				ORIENTAL CYBERPORT, HIGHTECH 6 ROAD
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-B0-39-56   (hex)		NETGEAR
-B03956     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-3C-0C-DB   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-3C0CDB     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				18F, HUAYANG TOWER,YANDAYI ROAD
-				Huizhou  Guangdong  516007
-				CN
-
-EC-42-B4   (hex)		ADC Corporation
-EC42B4     (base 16)		ADC Corporation
-				77-1, Miyako
-				Namegawa-machi, Hiki-gun  Saitama Pref.  355-0812
-				JP
-
-60-DA-83   (hex)		Hangzhou H3C Technologies Co., Limited
-60DA83     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-2C-57-31   (hex)		 Wingtech Group (HongKong）Limited
-2C5731     (base 16)		 Wingtech Group (HongKong）Limited
-				 FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
-				Hong Kong  Hong Kong  999077
-				HK
-
-CC-46-39   (hex)		WAAV, Inc.
-CC4639     (base 16)		WAAV, Inc.
-				151 PEARL ST FL 4
-				BOSTON  MA  02110
-				US
-
-AC-9E-17   (hex)		ASUSTek COMPUTER INC.
-AC9E17     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-64-16-66   (hex)		Nest Labs Inc.
-641666     (base 16)		Nest Labs Inc.
-				3400 Hillview Ave.
-				Palo Alto  CA  94304
-				US
-
-D8-DF-7A   (hex)		Quest Software, Inc.
-D8DF7A     (base 16)		Quest Software, Inc.
-				4 Polaris Way
-				Aliso Viejo  CA  92656
-				US
-
-14-5B-E1   (hex)		nyantec GmbH
-145BE1     (base 16)		nyantec GmbH
-				Europaplatz 2
-				Berlin    10557
-				DE
-
-A0-23-9F   (hex)		Cisco Systems, Inc
-A0239F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-70-F3-5A   (hex)		Cisco Systems, Inc
-70F35A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-34-1B   (hex)		Adero Inc
-A0341B     (base 16)		Adero Inc
-				7410 HOllister Ave
-				Goleta  CA  93117
-				US
-
-A0-AF-BD   (hex)		Intel Corporate
-A0AFBD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-7C-8B-CA   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-7C8BCA     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-4E-26   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-B04E26     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-89-C2   (hex)		Zyptonite
-B089C2     (base 16)		Zyptonite
-				1460 Broadway, 12 fl.
-				New York  NY  10036
-				US
-
-F0-23-B9   (hex)		IEEE Registration Authority
-F023B9     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-FC-4D-D4   (hex)		Universal Global Scientific Industrial Co., Ltd.
-FC4DD4     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, Taiping Rd. Sec. 1, Tsao Tuen,
-				Nan-Tou Hsien,     542
-				TW
-
-A4-F4-C2   (hex)		VNPT TECHNOLOGY
-A4F4C2     (base 16)		VNPT TECHNOLOGY
-				HoaLac Hi-Tech Park
-				HANOI  HANOI  10000
-				VN
-
-8C-14-7D   (hex)		IEEE Registration Authority
-8C147D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-30-07-4D   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-30074D     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-1C-1F-D4   (hex)		LifeBEAM Technologies LTD
-1C1FD4     (base 16)		LifeBEAM Technologies LTD
-				150 Greenwich st 4WTC - 29th floor
-				New York  NY  10007
-				US
-
-00-9A-D2   (hex)		Cisco Systems, Inc
-009AD2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-7F-77   (hex)		Connected Home
-447F77     (base 16)		Connected Home
-				19-22, Rathbone Place
-				London    W1T 1HY
-				GB
-
-E8-B6-C2   (hex)		Juniper Networks
-E8B6C2     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-94-7B-E7   (hex)		Samsung Electronics Co.,Ltd
-947BE7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-92-B9   (hex)		Samsung Electronics Co.,Ltd
-5092B9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-74-A8   (hex)		Samsung Electronics Co.,Ltd
-DC74A8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E8-39-35   (hex)		Hewlett Packard
-E83935     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-18-0A   (hex)		Cisco Meraki
-00180A     (base 16)		Cisco Meraki
-				99 Rhode Island St.
-				San Francisco,  CA  94103
-				US
-
-5C-6A-80   (hex)		Zyxel Communications Corporation
-5C6A80     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-D8-60-B3   (hex)		Guangdong Global Electronic Technology CO.，LTD
-D860B3     (base 16)		Guangdong Global Electronic Technology CO.，LTD
-				 Floor4 East side,build#6,Huangzhou industry Park, chebei Road, Tianhe District
-				GuangZhou  GuangDong  510660
-				CN
-
-64-35-1C   (hex)		e-CON SYSTEMS INDIA PVT LTD
-64351C     (base 16)		e-CON SYSTEMS INDIA PVT LTD
-				RR Tower 4, 7th Floor, TVK IND Estate, Guindy
-				Chennai  Other  600032
-				IN
-
-60-BA-18   (hex)		nextLAP GmbH
-60BA18     (base 16)		nextLAP GmbH
-				Hofmannstr. 61
-				München    81379
-				DE
-
-44-AA-50   (hex)		Juniper Networks
-44AA50     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-84-CD-62   (hex)		ShenZhen IDWELL Technology CO.,Ltd
-84CD62     (base 16)		ShenZhen IDWELL Technology CO.,Ltd
-				4F,Building 20 Changxing Industrial Park,Shayi,Shajing,BaoAn
-				ShenZhen    518000
-				CN
-
-A8-D5-79   (hex)		Beijing Chushang Science and Technology Co.,Ltd
-A8D579     (base 16)		Beijing Chushang Science and Technology Co.,Ltd
-				3A285 room,3 layer,1 building,No 11 of yongwai song zhuang road,Fengtai district,Beijing
-				Beijing  Beijing  518000
-				CN
-
-44-48-C1   (hex)		Hewlett Packard Enterprise
-4448C1     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-48-10-63   (hex)		NTT Innovation Institute, Inc.
-481063     (base 16)		NTT Innovation Institute, Inc.
-				1950 University Avenue, Suite 600
-				East Palo Alto  CA  94303
-				US
-
-A0-8E-78   (hex)		Sagemcom Broadband SAS
-A08E78     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-88-D5-0C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-88D50C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-D4-28-D5   (hex)		TCT mobile ltd
-D428D5     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-9C-AF-6F   (hex)		ITEL MOBILE LIMITED
-9CAF6F     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-FC-53-9E   (hex)		Shanghai Wind Technologies Co.,Ltd
-FC539E     (base 16)		Shanghai Wind Technologies Co.,Ltd
-				Floor 8,East Building,Guilin Technology Mansion,No.650,Caobao Road,XuHui District,Shanghai,P.R.China
-				Shanghai  Shanghai  200233
-				CN
-
-60-53-17   (hex)		Sandstone Technologies
-605317     (base 16)		Sandstone Technologies
-				1920 lyell ave
-				Rochester  NY  14606
-				US
-
-90-70-65   (hex)		Texas Instruments
-907065     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-18-A9-58   (hex)		PROVISION THAI CO., LTD.
-18A958     (base 16)		PROVISION THAI CO., LTD.
-				155/7-10 Rachadapisek Rd.,
-				Thonburi  Bangkok  10600
-				TH
-
-74-C9-A3   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-74C9A3     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-EC-8A-4C   (hex)		zte corporation
-EC8A4C     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D4-5F-25   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-D45F25     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-40-C8-CB   (hex)		AM Telecom co., Ltd.
-40C8CB     (base 16)		AM Telecom co., Ltd.
-				#608,YatapLeaders B/D, Jangmi-ro 42, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-828
-				KR
-
-2C-AB-EB   (hex)		Cisco Systems, Inc
-2CABEB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B4-C6-F8   (hex)		Axilspot Communication
-B4C6F8     (base 16)		Axilspot Communication
-				A302 Han's Innovation Building, No.9018 Beihuan Ave., Nanshan District
-				Shenzhen    518000
-				CN
-
-9C-E9-51   (hex)		Shenzhen Sang Fei Consumer Communications Ltd., Co.
-9CE951     (base 16)		Shenzhen Sang Fei Consumer Communications Ltd., Co.
-				11,Science And Technology Road, Shenzhen Hi-tech Industrial Park, Nanshan District
-				 Shenzhen City  Guangdong  518057
-				CN
-
-B8-D5-0B   (hex)		Sunitec Enterprise Co.,Ltd
-B8D50B     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-BC-66-DE   (hex)		Shadow Creator Information Technology Co.,Ltd.
-BC66DE     (base 16)		Shadow Creator Information Technology Co.,Ltd.
-				Shanghai City, Pudong New Area Zhangjiang road 368, Building 29, room 611 
-				Shanghai  Shanghai  200120
-				CN
-
-18-68-CB   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-1868CB     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-C4-AE-12   (hex)		Samsung Electronics Co.,Ltd
-C4AE12     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-00-1F-A4   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-001FA4     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				4F,Baiying Building, No.1019,Nanhai RD,Shekou,
-				ShenZhen  GuangDong  518067
-				CN
-
-D4-DC-CD   (hex)		Apple, Inc.
-D4DCCD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-4B-AA   (hex)		Apple, Inc.
-484BAA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-A9-04   (hex)		Apple, Inc.
-DCA904     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-AB-31   (hex)		Apple, Inc.
-6CAB31     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-74-BF   (hex)		Apple, Inc.
-4C74BF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-94-6B   (hex)		TECNO MOBILE LIMITED
-04946B     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-48-88-03   (hex)		ManTechnology Inc.
-488803     (base 16)		ManTechnology Inc.
-				12th Fl, 308-4 Seongsoodong 2ga, Seongdonggu
-				Seoul    04781
-				KR
-
-B4-36-E3   (hex)		KBVISION GROUP
-B436E3     (base 16)		KBVISION GROUP
-				337 N. Vineyard Avenue,  4th Floor,  San Jose, CA 91764
-				San Jose  CA  90847
-				US
-
-94-D2-99   (hex)		Techmation Co.,Ltd.
-94D299     (base 16)		Techmation Co.,Ltd.
-				9F., No.529, Zhongzheng Rd., Xindian Dist., New Taipei City 231, Taiwan
-				New Taipei City     231
-				TW
-
-34-1A-35   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-341A35     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-2C-02-9F   (hex)		3ALogics
-2C029F     (base 16)		3ALogics
-				#704, Hyundai office B'd, Sunae-dong, Bundang-gu
-				Seongnam-si    13601
-				KR
-
-64-D1-54   (hex)		Routerboard.com
-64D154     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-58-D9-D5   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-58D9D5     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-6C-4B-90   (hex)		LiteON
-6C4B90     (base 16)		LiteON
-				5F, No.90, Rd. Chien 1, ChungHo
-				New Taipei  Taiwan  23505
-				TW
-
-00-05-0F   (hex)		Tanaka S/S Ltd.
-00050F     (base 16)		Tanaka S/S Ltd.
-				1942 Nomura Hirooka
-				Nagano  399-0702  
-				JP
-
-98-9E-63   (hex)		Apple, Inc.
-989E63     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-6B-6E   (hex)		Apple, Inc.
-886B6E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-E4-AD   (hex)		zte corporation
-F4E4AD     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-28-FF-3E   (hex)		zte corporation
-28FF3E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B8-D7-AF   (hex)		Murata Manufacturing Co., Ltd.
-B8D7AF     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-D4-AE-05   (hex)		Samsung Electronics Co.,Ltd
-D4AE05     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E0-48-AF   (hex)		Premietech Limited
-E048AF     (base 16)		Premietech Limited
-				Unit 805, Tower 3, Enterprise Square I
-				No. 9 Sheung Yuet Road  Kowloon Bay  HongKong  00000
-				HK
-
-2C-33-11   (hex)		Cisco Systems, Inc
-2C3311     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-50-82-D5   (hex)		Apple, Inc.
-5082D5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-EE-10   (hex)		Samsung Electronics Co.,Ltd
-F0EE10     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-70-0B   (hex)		GUANGZHOU CHIP TECHNOLOGIES CO.,LTD
-C4700B     (base 16)		GUANGZHOU CHIP TECHNOLOGIES CO.,LTD
-				4th floor, Building J of JiTang Industrial Zone, No. 8 NanYun fifth road, HuangPu District
-				Guangzhou  Guangdong  510700
-				CN
-
-3C-A0-67   (hex)		Liteon Technology Corporation
-3CA067     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-BC-02-4A   (hex)		HMD Global Oy
-BC024A     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-94-99-01   (hex)		Shenzhen YITOA Digital Appliance CO.,LTD
-949901     (base 16)		Shenzhen YITOA Digital Appliance CO.,LTD
-				5/F,Yitoa Building,Keji South Road 5th,Hi-tech Industrial Park,Nanshan District,
-				shenzhen  Guangdong  518000
-				CN
-
-F8-59-71   (hex)		Intel Corporate
-F85971     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-10-05-CA   (hex)		Cisco Systems, Inc
-1005CA     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-78-94-B4   (hex)		Sercomm Corporation.
-7894B4     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-44-37-08   (hex)		MRV Comunications
-443708     (base 16)		MRV Comunications
-				Hayetzira
-				Yokneam    614
-				IL
-
-28-5F-2F   (hex)		RNware Co.,Ltd.
-285F2F     (base 16)		RNware Co.,Ltd.
-				#202 ICT Park Bldg, 205, Songhyun-ro, Dalseo-gu
-				Daegu    42734
-				KR
-
-50-0F-F5   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-500FF5     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-BC-45-2E   (hex)		Knowledge Development for POF S.L.
-BC452E     (base 16)		Knowledge Development for POF S.L.
-				Ronda de Poniente 14, 2-C,D
-				Tres Cantos  Madrid  28760
-				ES
-
-DC-C6-4B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DCC64B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-33-89   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-043389     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-A0-68   (hex)		BHP LIMITED
-00A068     (base 16)		BHP LIMITED
-				1500 Post Oak Boulevard #11.08 B
-				Houston  TX  77056-3030
-				US
-
-70-3A-CB   (hex)		Google, Inc.
-703ACB     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-70-6D-EC   (hex)		Wifi-soft LLC
-706DEC     (base 16)		Wifi-soft LLC
-				616, West Monroe
-				Austin  TX  78704
-				US
-
-B0-C2-05   (hex)		BIONIME
-B0C205     (base 16)		BIONIME
-				No.100, Sec.2, Daqing St., South Dist.,
-				Taichung  Taiwan  40242
-				TW
-
-94-F5-51   (hex)		Cadi Scientific Pte Ltd
-94F551     (base 16)		Cadi Scientific Pte Ltd
-				31 Ubi Road 1, Aztech Building, #07-01A
-				Singapore    408694
-				SG
-
-10-5A-F7   (hex)		ADB Italia 
-105AF7     (base 16)		ADB Italia 
-				Viale Sarca 222
-				Milan  Italy  20126
-				IT
-
-B8-1D-AA   (hex)		LG Electronics (Mobile Communications)
-B81DAA     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-E4-00   (hex)		Sichuan Changhong Electric Ltd.
-00E400     (base 16)		Sichuan Changhong Electric Ltd.
-				No.35,East MianXin Road,MianYang,Sichaun,China.
-				MianYang  SiChuan  PRC 621000
-				CN
-
-2C-55-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2C55D3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-C0-24   (hex)		EDEN SISTEMAS DE COMPUTACAO SA
-00C024     (base 16)		EDEN SISTEMAS DE COMPUTACAO SA
-				RUA DO OUVIDOR 121 5 ANDAR
-				    
-				BR
-
-7C-46-85   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-7C4685     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-1C-1E-E3   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-1C1EE3     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-44-03-2C   (hex)		Intel Corporate
-44032C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-78-68-F7   (hex)		YSTen Technology Co.,Ltd
-7868F7     (base 16)		YSTen Technology Co.,Ltd
-				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
-				Beijing    100101
-				CN
-
-00-4B-F3   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-004BF3     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-08-CC-A7   (hex)		Cisco Systems, Inc
-08CCA7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-96-AD   (hex)		Cisco Systems, Inc
-0896AD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-23-B2   (hex)		vivo Mobile Communication Co., Ltd.
-0823B2     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-88-C3-B3   (hex)		SOVICO
-88C3B3     (base 16)		SOVICO
-				2271-5 Nambusunhwan-ro, Seocho-gu
-				Seoul    06703
-				KR
-
-E0-51-24   (hex)		NXP Semiconductors
-E05124     (base 16)		NXP Semiconductors
-				411 E. Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-1D-A3   (hex)		SabiOso
-001DA3     (base 16)		SabiOso
-				189 S State Suite #250
-				Clearfield  Utah  84015
-				US
-
-54-2F-8A   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-542F8A     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-				Av. Buriti, 1900 – Setor B – Distrito Industrial
-				Manaus  Amazonas  69075-000
-				BR
-
-60-14-B3   (hex)		CyberTAN Technology Inc.
-6014B3     (base 16)		CyberTAN Technology Inc.
-				99 Park Ave III, Hsinchu Science Park
-				Hsinchu    308
-				TW
-
-10-56-11   (hex)		ARRIS Group, Inc.
-105611     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-34-78-77   (hex)		O-Net Communications (Shenzhen) Limited
-347877     (base 16)		O-Net Communications (Shenzhen) Limited
-				#10-1 South,Maqueling Industrial Park,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-00-20-CC   (hex)		DIGITAL SERVICES, LTD.
-0020CC     (base 16)		DIGITAL SERVICES, LTD.
-				9 WAYTE STREET
-				ENGLAND  PO6  3BS
-				GB
-
-68-9F-F0   (hex)		zte corporation
-689FF0     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-5C-AF-06   (hex)		LG Electronics (Mobile Communications)
-5CAF06     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-17-9B   (hex)		CHANT SINCERE CO.,LTD
-00179B     (base 16)		CHANT SINCERE CO.,LTD
-				7F-2,NO.188,Sec 3,Ta Tung Rood,
-				Hsi Chih City  Taipei Hsien  221
-				TW
-
-1C-39-8A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-1C398A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E8-65-D4   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-E865D4     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-24-D5-1C   (hex)		Zhongtian broadband technology co., LTD 
-24D51C     (base 16)		Zhongtian broadband technology co., LTD 
-				Rudong hekou town Zhongtian industrial park
-				Nantong  jiangsu Province  226463
-				CN
-
-EC-43-F6   (hex)		Zyxel Communications Corporation
-EC43F6     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-60-C6-58   (hex)		PHYTRONIX Co.,Ltd.
-60C658     (base 16)		PHYTRONIX Co.,Ltd.
-				1877-3 Ootashimo-machi
-				Takamatsu  Kagawa  761-8073
-				JP
-
-FC-B5-8A   (hex)		Wapice Ltd.
-FCB58A     (base 16)		Wapice Ltd.
-				Yliopistonranta 5
-				Vaasa    65200
-				FI
-
-A4-62-DF   (hex)		DS Global. Co., LTD
-A462DF     (base 16)		DS Global. Co., LTD
-				3F, 107, Gasan digital 2-ro, Geumcheon-gu
-				Seoul    08505
-				KR
-
-4C-16-94   (hex)		shenzhen sibituo Technology Co., Ltd
-4C1694     (base 16)		shenzhen sibituo Technology Co., Ltd
-				15C Yuehua Park Nanshan Road Nanshan District
-				SHENZHEN  guangdong  518000
-				CN
-
-C8-14-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C81451     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-D4-37   (hex)		Inteno Broadband Technology AB
-44D437     (base 16)		Inteno Broadband Technology AB
-				Stensätravägen 13
-				Skärholmen  SE  127 39 
-				SE
-
-EC-E1-54   (hex)		Beijing Unisound Information Technology Co.,Ltd.
-ECE154     (base 16)		Beijing Unisound Information Technology Co.,Ltd.
-				Rm406,keyan Building,Tsinghua Hi-tech Park,High-tech Industrial Park North Area,Nanshan
-				Shenzhen    518057
-				CN
-
-6C-16-0E   (hex)		ShotTracker
-6C160E     (base 16)		ShotTracker
-				7220 W Frontage Rd
-				Merriam  KS  66203
-				US
-
-80-3A-0A   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-803A0A     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-0C-73-BE   (hex)		Dongguan Haimai Electronie Technology Co.,Ltd
-0C73BE     (base 16)		Dongguan Haimai Electronie Technology Co.,Ltd
-				Room 701，Yifeng Building7, No.8 Industrial Zone, Xianbian Road, Changan Town Xiaobian edge
-				Dongguan  Guangdong  518000
-				CN
-
-28-6F-7F   (hex)		Cisco Systems, Inc
-286F7F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F0-C8-50   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F0C850     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-01-4F   (hex)		Adtran Inc
-00014F     (base 16)		Adtran Inc
-				901 Explorer Blvd.
-				Huntsville  AL  35806-2807
-				US
-
-28-52-61   (hex)		Cisco Systems, Inc
-285261     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C8-AA-55   (hex)		Hunan Comtom Electronic Incorporated Co.,Ltd
-C8AA55     (base 16)		Hunan Comtom Electronic Incorporated Co.,Ltd
-				6 -7 Floor, Jindan Building B,Xiongtian Road, Furong District
-				changsha  Hunan  410126
-				CN
-
-20-78-0B   (hex)		Delta Faucet Company
-20780B     (base 16)		Delta Faucet Company
-				55 East 111th Street
-				Indianapolis  IN  46280
-				US
-
-88-09-AF   (hex)		Masimo Corporation
-8809AF     (base 16)		Masimo Corporation
-				40 Parker
-				Irvine    92618
-				US
-
-2C-D0-2D   (hex)		Cisco Systems, Inc
-2CD02D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-CC-83   (hex)		Juniper Networks
-9CCC83     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-64-DB-A0   (hex)		Select Comfort
-64DBA0     (base 16)		Select Comfort
-				9800 59th Ave N
-				Minneapolis  MN  55442
-				US
-
-F8-98-3A   (hex)		Leeman International (HongKong) Limited
-F8983A     (base 16)		Leeman International (HongKong) Limited
-				Number 13 first floor Y1 cultural creative park bantian
-				shen zhen     51800
-				CN
-
-4C-EC-EF   (hex)		Soraa, Inc.
-4CECEF     (base 16)		Soraa, Inc.
-				6500 Kaiser Dr Suite 110
-				Fremont  CA  94555
-				US
-
-1C-EF-CE   (hex)		bebro electronic GmbH
-1CEFCE     (base 16)		bebro electronic GmbH
-				MAx-Planck-Str. 6-8
-				Frickenhausen    72636
-				DE
-
-98-B6-E9   (hex)		Nintendo Co.,Ltd
-98B6E9     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-F0-15-B9   (hex)		PlayFusion Limited
-F015B9     (base 16)		PlayFusion Limited
-				St  Johns Innovation Centre
-				Cambridge    CB4 0WS
-				GB
-
-64-B0-A6   (hex)		Apple, Inc.
-64B0A6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-04-D0   (hex)		Apple, Inc.
-7C04D0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-FC-AC   (hex)		Apple, Inc.
-84FCAC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-0C-5C   (hex)		Apple, Inc.
-DC0C5C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-70-0D   (hex)		Apple, Inc.
-70700D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-E1-71   (hex)		Hewlett Packard
-30E171     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-18-65-90   (hex)		Apple, Inc.
-186590     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-62-14   (hex)		Apple, Inc.
-F86214     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-4F-43   (hex)		Apple, Inc.
-784F43     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-4D-7F   (hex)		Apple, Inc.
-404D7F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1D-72   (hex)		Wistron Corporation
-001D72     (base 16)		Wistron Corporation
-				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
-				Taipei Hsien    221
-				TW
-
-D8-19-7A   (hex)		Nuheara Ltd
-D8197A     (base 16)		Nuheara Ltd
-				Unit 5, 28 John St
-				Northbridge  WA  6003
-				AU
-
-4C-38-D5   (hex)		MITAC COMPUTING TECHNOLOGY CORPORATION
-4C38D5     (base 16)		MITAC COMPUTING TECHNOLOGY CORPORATION
-				3F., NO.1, R&D ROAD 2, HSINCHU SCIENCE PARK
-				HSINCHU    30076
-				TW
-
-54-B5-6C   (hex)		Xi'an NovaStar Tech Co., Ltd
-54B56C     (base 16)		Xi'an NovaStar Tech Co., Ltd
-				4F, Block D, Qinfeng Pavilion, Xi'an Software Park, No.68 Keji 2nd Rd.,
-				 Xi'an  Shanxi  710075
-				CN
-
-34-4C-C8   (hex)		Echodyne Corp
-344CC8     (base 16)		Echodyne Corp
-				2380 116th Ave NE
-				Bellevue   WA  98004
-				US
-
-64-13-6C   (hex)		zte corporation
-64136C     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-04-B6-48   (hex)		ZENNER
-04B648     (base 16)		ZENNER
-				Roemerstadt 6
-				Saarbruecken    66121
-				DE
-
-98-F1-99   (hex)		NEC Platforms, Ltd.
-98F199     (base 16)		NEC Platforms, Ltd.
-				2-3 Kandatsukasamachi
-				Chiyodaku  Tokyo  101-8532
-				JP
-
-18-40-A4   (hex)		Shenzhen Trylong Smart Science and Technology Co., Ltd.
-1840A4     (base 16)		Shenzhen Trylong Smart Science and Technology Co., Ltd.
-				15E, qingdian building, No#6007, Binhe road, futian district
-				Shenzhen city  Guangdong Province  518100
-				CN
-
-1C-48-CE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-1C48CE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-C8-0C-C8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C80CC8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-25-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0425C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-3E-7B   (hex)		Gafachi, Inc.
-603E7B     (base 16)		Gafachi, Inc.
-				1 W Main St., STE 650
-				Rochester  NY  14614
-				US
-
-4C-74-87   (hex)		Leader Phone Communication Technology Co., Ltd.
-4C7487     (base 16)		Leader Phone Communication Technology Co., Ltd.
-				121 Room (Park) No.1 Building, No.10 Xinghuo Road  Science City Feng-tai District, Beijing, China
-				Beijing    100070
-				CN
-
-AC-83-F3   (hex)		AMPAK Technology, Inc.
-AC83F3     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-CC-8C-DA   (hex)		Shenzhen Wei Da Intelligent Technology Go.,Ltd
-CC8CDA     (base 16)		Shenzhen Wei Da Intelligent Technology Go.,Ltd
-				5K, Block B,Yueshang Center Cultural Square Jianshe East Rd Longhua New District
-				Shenzhen    518109
-				CN
-
-D4-36-DB   (hex)		Jiangsu Toppower Automotive Electronics Co., Ltd
-D436DB     (base 16)		Jiangsu Toppower Automotive Electronics Co., Ltd
-				No. 2 Tuolanshan Road
-				Xuzhou  Jiangsu  221004
-				CN
-
-2C-DC-AD   (hex)		Wistron Neweb Corporation
-2CDCAD     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-6C-5C-14   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-6C5C14     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-E8-09-45   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-E80945     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-7C-25-87   (hex)		chaowifi.com
-7C2587     (base 16)		chaowifi.com
-				No. 502 1th Building TaiHe Square
-				HangZhou  QianJiangRoad  310002
-				CN
-
-2C-21-31   (hex)		Juniper Networks
-2C2131     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-50-1E   (hex)		Grass Valley, A Belden Brand
-00501E     (base 16)		Grass Valley, A Belden Brand
-				3499, Douglas B. Floreani
-				Montreal  Quebec  H4S 2C6
-				CA
-
-EC-0D-9A   (hex)		Mellanox Technologies, Inc.
-EC0D9A     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-90-D7-BE   (hex)		Wavelab Global Inc.
-90D7BE     (base 16)		Wavelab Global Inc.
-				12007 Sunrise Valley Drive, Suite 450
-				Reston  VA  20191
-				US
-
-24-4E-7B   (hex)		IEEE Registration Authority
-244E7B     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-30-AE-A4   (hex)		Espressif Inc.
-30AEA4     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-3C-FA-43   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3CFA43     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-5F-94   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-145F94     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-1F-82   (hex)		Cal-Comp Electronics & Communications Company Ltd.
-001F82     (base 16)		Cal-Comp Electronics & Communications Company Ltd.
-				No.147, Sec. 3, Beishen Rd
-				Shenkeng Dist  New Taipei City  ---
-				TW
-
-88-3C-1C   (hex)		MERCURY CORPORATION
-883C1C     (base 16)		MERCURY CORPORATION
-				90, Gajaeul-ro, Seo-gu
-				INCHEON    22830
-				KR
-
-00-21-44   (hex)		SS Telecoms
-002144     (base 16)		SS Telecoms
-				23 Botha Avenue
-				Centurion  Gauteng  0140
-				ZA
-
-00-6B-F1   (hex)		Cisco Systems, Inc
-006BF1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-28-34-A2   (hex)		Cisco Systems, Inc
-2834A2     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-78-23-AE   (hex)		ARRIS Group, Inc.
-7823AE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-20-71-9E   (hex)		SF Technology Co.,Ltd
-20719E     (base 16)		SF Technology Co.,Ltd
-				1/F,Block B,Building 1,ShenzhenSoftware Industry Base,Hi-Tech Industrial Park South
-				Shenzhen  Guangdong Province  518054
-				CN
-
-2C-C2-60   (hex)		Oracle Corporation 
-2CC260     (base 16)		Oracle Corporation 
-				Zarhin 13
-				Raanana    4366241
-				IL
-
-3C-3F-51   (hex)		2CRSI
-3C3F51     (base 16)		2CRSI
-				32 rue Jacobi-Netter
-				STRASBOURG  France  67200
-				FR
-
-3C-2A-F4   (hex)		Brother Industries, LTD.
-3C2AF4     (base 16)		Brother Industries, LTD.
-				15-1, Naeshirocho, Mizuho-ku
-				NAGOYA    4678561
-				JP
-
-C0-85-4C   (hex)		Ragentek Technology Group
-C0854C     (base 16)		Ragentek Technology Group
-				D10/D11，No.3188, Xiupu Road, PuDong District, Shanghai
-				Shanghai    201315
-				CN
-
-00-24-AC   (hex)		Hangzhou DPtech Technologies Co., Ltd.
-0024AC     (base 16)		Hangzhou DPtech Technologies Co., Ltd.
-				Huarong Shidai Bld., NO.3880,Jiang-Nan Avenue, Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-50-58-4F   (hex)		waytotec,Inc.
-50584F     (base 16)		waytotec,Inc.
-				#604-4,B-Dong,Bundang Technopark,148,Yatap-dong,Bundang-gu,
-				Seongnam-si  Gyeonggi-do  13511
-				KR
-
-08-5D-DD   (hex)		MERCURY CORPORATION
-085DDD     (base 16)		MERCURY CORPORATION
-				90, Gajaeul-ro, Seo-gu
-				INCHEON    22830
-				KR
-
-8C-60-E7   (hex)		MPGIO CO.,LTD
-8C60E7     (base 16)		MPGIO CO.,LTD
-				MPGIO Bldg., 98 Uijeong St.,
-				Uijeongbu  Korea / Gyeonggi  11623
-				KR
-
-CC-94-70   (hex)		Kinestral Technologies, Inc.
-CC9470     (base 16)		Kinestral Technologies, Inc.
-				400 E Jamie Ct., Ste. 201
-				South San Francisco  CA  94080
-				US
-
-B4-39-D6   (hex)		ProCurve Networking by HP
-B439D6     (base 16)		ProCurve Networking by HP
-				60 Alexandra Terrace
-				0000    118502
-				SG
-
-34-F3-9A   (hex)		Intel Corporate
-34F39A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-D8-16-C1   (hex)		DEWAV (HK) ELECTRONICS LIMITED
-D816C1     (base 16)		DEWAV (HK) ELECTRONICS LIMITED
-				UNIT NO.1-2, 06/F., PERFECT INDUSTRIAL BUILDING,NO. 31 TAI YAU STREET, SAN PO KONG
-				KOWLOON, HONG KONG    510610
-				CN
-
-CC-61-E5   (hex)		Motorola Mobility LLC, a Lenovo Company
-CC61E5     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-8C-8A-BB   (hex)		Beijing Orient View Technology Co., Ltd.
-8C8ABB     (base 16)		Beijing Orient View Technology Co., Ltd.
-				Building NO.1, LiYe Road 7
-				Huilongguan Town  Changping District, Beijing  102206
-				CN
-
-00-03-9B   (hex)		NetChip Technology, Inc.
-00039B     (base 16)		NetChip Technology, Inc.
-				335 Pioneer Way
-				Mountain View  CA  94041
-				US
-
-44-D9-E7   (hex)		Ubiquiti Networks Inc.
-44D9E7     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Parkway
-				San Jose  CA  95131
-				US
-
-24-A4-3C   (hex)		Ubiquiti Networks Inc.
-24A43C     (base 16)		Ubiquiti Networks Inc.
-				91 E. Tasman Dr.
-				San Jose    95134
-				US
-
-9C-8B-A0   (hex)		Apple, Inc.
-9C8BA0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-08-8D   (hex)		Apple, Inc.
-CC088D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-A4-ED   (hex)		Xiaomi Communications Co Ltd
-38A4ED     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-B8-99-19   (hex)		7signal Solutions, Inc
-B89919     (base 16)		7signal Solutions, Inc
-				526 S. Main Street
-				Akron  OH  44311
-				US
-
-40-FE-0D   (hex)		MAXIO
-40FE0D     (base 16)		MAXIO
-				1101-1 digital empire A, 387 simin-daero dongan-gu
-				anyang-si  kyunggi-do  14057
-				KR
-
-AC-64-DD   (hex)		IEEE Registration Authority
-AC64DD     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-94-B8-19   (hex)		Nokia
-94B819     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-78-7D-48   (hex)		ITEL MOBILE LIMITED
-787D48     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-88-71-E5   (hex)		Amazon Technologies Inc.
-8871E5     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-BC-39-D9   (hex)		Z-TEC
-BC39D9     (base 16)		Z-TEC
-				Donyu 1 Ro
-				Paju  Kyeongkido  10832
-				KR
-
-60-9A-C1   (hex)		Apple, Inc.
-609AC1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-8D-08   (hex)		Apple, Inc.
-748D08     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-B0-EE   (hex)		Ajile Systems, Inc.
-00B0EE     (base 16)		Ajile Systems, Inc.
-				920 Saratoga Ave.
-				San Jose  CA  95129
-				US
-
-04-18-D6   (hex)		Ubiquiti Networks Inc.
-0418D6     (base 16)		Ubiquiti Networks Inc.
-				91 E. Tasman Dr.
-				San Jose    95134
-				US
-
-20-DB-AB   (hex)		Samsung Electronics Co., Ltd.
-20DBAB     (base 16)		Samsung Electronics Co., Ltd.
-				416, Maetan-3Dong, Yeongtong-Gu
-				Suwon  Geyonggi-Do  443-742
-				KR
-
-38-3A-21   (hex)		IEEE Registration Authority
-383A21     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D8-38-0D   (hex)		SHENZHEN IP-COM Network Co.,Ltd
-D8380D     (base 16)		SHENZHEN IP-COM Network Co.,Ltd
-				No.1001,Zhongshangyuan Road,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-88-AD-43   (hex)		PEGATRON CORPORATION
-88AD43     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-B4-EF-FA   (hex)		Lemobile Information Technology (Beijing) Co., Ltd.
-B4EFFA     (base 16)		Lemobile Information Technology (Beijing) Co., Ltd.
-				5/F LeEco Building, 105 Yaojiayuan Road, Chaoyang District 
-				Beijing  Beijing  100025
-				CN
-
-6C-71-BD   (hex)		EZELINK TELECOM
-6C71BD     (base 16)		EZELINK TELECOM
-				Bay Square Building 06 - Office No 105
-				Dubai  Dubai  111581
-				AE
-
-60-EF-C6   (hex)		Shenzhen Chima Technologies Co Limited
-60EFC6     (base 16)		Shenzhen Chima Technologies Co Limited
-				5F, TongXin Technology Park,HengGang,LongGang,Shenzhen,China
-				Shenzhen  GuangDong  518115
-				CN
-
-00-1F-C6   (hex)		ASUSTek COMPUTER INC.
-001FC6     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
-				Taipei  Taiwan  112
-				TW
-
-B0-C1-28   (hex)		Adler ELREHA GmbH
-B0C128     (base 16)		Adler ELREHA GmbH
-				Schwetzinger Str. 103
-				Hockenheim  Baden-Württemberg  D-68766
-				DE
-
-30-87-D9   (hex)		Ruckus Wireless
-3087D9     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-FC-CA-C4   (hex)		LifeHealth, LLC
-FCCAC4     (base 16)		LifeHealth, LLC
-				2656 Patton Rd
-				Roseville  MN  55113
-				US
-
-F0-D9-B2   (hex)		EXO S.A.
-F0D9B2     (base 16)		EXO S.A.
-				Av. Chiclana 3444
-				Buenos Aires    1260
-				AR
-
-E4-C8-01   (hex)		BLU Products Inc
-E4C801     (base 16)		BLU Products Inc
-				10814 NW 33rd Street
-				Miami  FL  33172
-				US
-
-F0-98-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F09838     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-0E-14   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-C80E14     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-AC-63-BE   (hex)		Amazon Technologies Inc.
-AC63BE     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-F8-1D-78   (hex)		IEEE Registration Authority
-F81D78     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-38-F7-B2   (hex)		SEOJUN ELECTRIC
-38F7B2     (base 16)		SEOJUN ELECTRIC
-				468 Gangseo-ro, 07573, SEOJUN ELECTRIC Ace Techno Tower 805
-				Seoul    07573
-				KR
-
-10-12-50   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-101250     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-78-02-B7   (hex)		ShenZhen Ultra Easy Technology CO.,LTD
-7802B7     (base 16)		ShenZhen Ultra Easy Technology CO.,LTD
-				608,Building 2,Guangxingyuan Industrial Park A District,
-				Baoyuan Rd  ShenZhen,Guangdong  518102
-				CN
-
-64-61-84   (hex)		VELUX
-646184     (base 16)		VELUX
-				Baekgaardsvej 40
-				Skjern    6900
-				DK
-
-E8-E5-D6   (hex)		Samsung Electronics Co.,Ltd
-E8E5D6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C8-7E-75   (hex)		Samsung Electronics Co.,Ltd
-C87E75     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-26-5F   (hex)		Samsung Electronics Co.,Ltd
-00265F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-23-3A   (hex)		Samsung Electronics Co.,Ltd
-00233A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-6A-0A   (hex)		ASKEY COMPUTER CORP
-086A0A     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-98-E7-F4   (hex)		Hewlett Packard
-98E7F4     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-00-07-AB   (hex)		Samsung Electronics Co.,Ltd
-0007AB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-24-86   (hex)		DesignArt Networks
-002486     (base 16)		DesignArt Networks
-				4 Ha'haroshet St
-				Ra'anana    43101
-				IL
-
-00-24-78   (hex)		Mag Tech Electronics Co Limited
-002478     (base 16)		Mag Tech Electronics Co Limited
-				Flat / Room T78 GOF Bangkok Building
-				Sheung Wan  HK  
-				HK
-
-38-2D-D1   (hex)		Samsung Electronics Co.,Ltd
-382DD1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-1B-2C   (hex)		ATRON electronic GmbH
-001B2C     (base 16)		ATRON electronic GmbH
-				Am Ziegelstadel 12 + 14
-				Markt Schwaben    85570
-				DE
-
-90-34-FC   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-9034FC     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-14-27   (hex)		JazzMutant
-001427     (base 16)		JazzMutant
-				2 allee du Doyen Georges Brus
-				Pessac    33600
-				FR
-
-00-1E-84   (hex)		Pika Technologies Inc.
-001E84     (base 16)		Pika Technologies Inc.
-				535 Legget Drive
-				Ottawa  Ontario  K2K 3B8
-				CA
-
-10-DD-B1   (hex)		Apple, Inc.
-10DDB1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-23-29   (hex)		DDRdrive LLC
-002329     (base 16)		DDRdrive LLC
-				384 Madeline CT
-				Palo Alto  CA  94306
-				US
-
-00-26-AD   (hex)		Arada Systems, Inc.
-0026AD     (base 16)		Arada Systems, Inc.
-				1024 Morse Avenue
-				Sunnyvale  CA  94089
-				US
-
-FC-1F-19   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-FC1F19     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				Suwon    443-743
-				US
-
-84-0B-2D   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-840B2D     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				SUWON  KYUNGGI-DO  443-743
-				KR
-
-20-64-32   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-206432     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				Suwon  Gyunggi-Do  443-743
-				KR
-
-B4-07-F9   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-B407F9     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				Suwon-Si, Gyeonggi_Do, Korea
-				Suwon  Gyeonggi_Do  443-743
-				KR
-
-88-9F-FA   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-889FFA     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-8C-7C-B5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-8C7CB5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C4-46-19   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-C44619     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-50-63-13   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-506313     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-60-D8-19   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-60D819     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-F8-2F-A8   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-F82FA8     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-0C-84-DC   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-0C84DC     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-16-6C   (hex)		Samsung Electronics Co.,Ltd
-00166C     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3Dong,Yeongtong-Gu
-				Suwon  Gyeonggi-Do  443-742
-				KR
-
-18-1E-B0   (hex)		Samsung Electronics Co.,Ltd
-181EB0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-24-7F-20   (hex)		Sagemcom Broadband SAS
-247F20     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-E8-03-9A   (hex)		Samsung Electronics Co.,Ltd
-E8039A     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3Dong, Yeongtong-Gu
-				Suwon  Geyonggi  443742
-				KR
-
-30-CD-A7   (hex)		Samsung Electronics Co.,Ltd
-30CDA7     (base 16)		Samsung Electronics Co.,Ltd
-				416 MAETAN 3-DONG
-				SUWON- SI    443-742
-				US
-
-00-12-47   (hex)		Samsung Electronics Co.,Ltd
-001247     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi-City  Gyeong-Buk  730-350
-				KR
-
-00-15-99   (hex)		Samsung Electronics Co.,Ltd
-001599     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3Dong, Yeongtong-Gu
-				Suwon  AL  443-742
-				US
-
-00-12-FB   (hex)		Samsung Electronics Co.,Ltd
-0012FB     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3Dong, Yeongtong-Gu
-				Suwon-City  Gyeonggi-Do  443-742
-				KR
-
-D0-66-7B   (hex)		Samsung Electronics Co.,Ltd
-D0667B     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu
-				Suwon  Gyeonggi-do  443742
-				KR
-
-B8-5E-7B   (hex)		Samsung Electronics Co.,Ltd
-B85E7B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-92-FB   (hex)		Samsung Electronics Co.,Ltd
-E492FB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-6C-B7-F4   (hex)		Samsung Electronics Co.,Ltd
-6CB7F4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-2C-44-01   (hex)		Samsung Electronics Co.,Ltd
-2C4401     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B8-D9-CE   (hex)		Samsung Electronics Co.,Ltd
-B8D9CE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-66-AA   (hex)		Samsung Electronics Co.,Ltd
-1C66AA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-3C-8B-FE   (hex)		Samsung Electronics Co.,Ltd
-3C8BFE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D4-E8-B2   (hex)		Samsung Electronics Co.,Ltd
-D4E8B2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-89-FD   (hex)		Samsung Electronics Co.,Ltd
-1489FD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-85-1F   (hex)		Samsung Electronics Co.,Ltd
-BC851F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-15-B9   (hex)		Samsung Electronics Co.,Ltd
-0015B9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1
-				Gumi-City  Gyeong-Buk  730-350
-				KR
-
-00-24-91   (hex)		Samsung Electronics Co.,Ltd
-002491     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-23-39   (hex)		Samsung Electronics Co.,Ltd
-002339     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-01-BB   (hex)		Samsung Electronics Co.,Ltd
-5001BB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-01-42   (hex)		MaxMedia Technology Limited
-C40142     (base 16)		MaxMedia Technology Limited
-				5F, No. 113, Jian 2nd Rd. Jhonghe District.
-				New Taipei City    23585
-				TW
-
-84-30-E5   (hex)		SkyHawke Technologies, LLC
-8430E5     (base 16)		SkyHawke Technologies, LLC
-				274 Commerce Park Dr, Ste M
-				Ridgeland  MS  39157
-				US
-
-1C-77-F6   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-1C77F6     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-58-E3-26   (hex)		Compass Technologies Inc.
-58E326     (base 16)		Compass Technologies Inc.
-				Unit 1012 C-dong, Woolim Lion's Valley
-				Seoul  Seoul  153-786
-				KR
-
-00-1B-2A   (hex)		Cisco Systems, Inc
-001B2A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-9D-DC   (hex)		2Wire Inc
-749DDC     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose    95131
-				US
-
-14-DD-E5   (hex)		MPMKVVCL
-14DDE5     (base 16)		MPMKVVCL
-				NISHTHA PARISAR, GOVINDPURA
-				BHOPAL  MADHYA PRADESH  462023
-				IN
-
-00-1A-09   (hex)		Wayfarer Transit Systems Ltd
-001A09     (base 16)		Wayfarer Transit Systems Ltd
-				10 Willis Way
-				Poole  Dorset  BH15 3SS
-				GB
-
-74-23-44   (hex)		Xiaomi Communications Co Ltd
-742344     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-54-88-0E   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-54880E     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-F0-25-B7   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-F025B7     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-F0-43-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F04347     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-B2-B2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9CB2B2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-C8-3A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A8C83A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-72-B1   (hex)		Samsung Electronics Co.,Ltd
-BC72B1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-78-F7-BE   (hex)		Samsung Electronics Co.,Ltd
-78F7BE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-68-48-98   (hex)		Samsung Electronics Co.,Ltd
-684898     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-23-BA   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-3423BA     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong    24180
-				US
-
-00-36-76   (hex)		ARRIS Group, Inc.
-003676     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-FC-8E-7E   (hex)		ARRIS Group, Inc.
-FC8E7E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-FC-6F-B7   (hex)		ARRIS Group, Inc.
-FC6FB7     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D4-2C-0F   (hex)		ARRIS Group, Inc.
-D42C0F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-40-0E-85   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-400E85     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong    24180
-				US
-
-C8-BA-94   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-C8BA94     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-84-38-38   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-843838     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-A0-55-DE   (hex)		ARRIS Group, Inc.
-A055DE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-80-F5-03   (hex)		ARRIS Group, Inc.
-80F503     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-44-AA-F5   (hex)		ARRIS Group, Inc.
-44AAF5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E0-9D-FA   (hex)		Wanan Hongsheng Electronic Co.Ltd
-E09DFA     (base 16)		Wanan Hongsheng Electronic Co.Ltd
-				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
-				Wanan  China/jiangxi  343800
-				CN
-
-5C-3C-27   (hex)		Samsung Electronics Co.,Ltd
-5C3C27     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-70-A8-4C   (hex)		MONAD., Inc.
-70A84C     (base 16)		MONAD., Inc.
-				702, Hanlla Sigma Vally, 545, Dunchon-daero, Jungwon-gu
-				Seongnam-Shi    13215
-				KR
-
-24-E4-3F   (hex)		Wenzhou Kunmei Communication Technology Co.,Ltd.
-24E43F     (base 16)		Wenzhou Kunmei Communication Technology Co.,Ltd.
-				Baitawang industrial zone,Yueqing,Zhejiang
-				Yueqing  Zhejiang  310025
-				CN
-
-28-7A-EE   (hex)		ARRIS Group, Inc.
-287AEE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-88-79-7E   (hex)		Motorola Mobility LLC, a Lenovo Company
-88797E     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-30-58-90   (hex)		Frontier Silicon Ltd
-305890     (base 16)		Frontier Silicon Ltd
-				137 Euston Road
-				London    NW12AA
-				GB
-
-70-8B-CD   (hex)		ASUSTek COMPUTER INC.
-708BCD     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-00-25-8B   (hex)		Mellanox Technologies, Inc.
-00258B     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-00-56-2B   (hex)		Cisco Systems, Inc
-00562B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E8-FD-90   (hex)		Turbostor
-E8FD90     (base 16)		Turbostor
-				47800 Westinghouse Drive
-				Fremont  CA  94539
-				US
-
-2C-AC-44   (hex)		CONEXTOP
-2CAC44     (base 16)		CONEXTOP
-				Room 608, 6/F, Electric Building , High-tech Park , Nanshan
-				Shenzhen    51800
-				CN
-
-D0-13-FD   (hex)		LG Electronics (Mobile Communications)
-D013FD     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-BC-64-4B   (hex)		ARRIS Group, Inc.
-BC644B     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-60-64-05   (hex)		Texas Instruments
-606405     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-18-99-F5   (hex)		Sichuan Changhong Electric Ltd.
-1899F5     (base 16)		Sichuan Changhong Electric Ltd.
-				No.35,East MianXin Road,MianYang,Sichaun,China.
-				MianYang  SiChuan  PRC 621000
-				CN
-
-00-25-C3   (hex)		21168
-0025C3     (base 16)		21168
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-00-0F-57   (hex)		CABLELOGIC Co., Ltd.
-000F57     (base 16)		CABLELOGIC Co., Ltd.
-				3F., Hwain Bldg., 1559-12 Seocho 3-dong,
-				Seoul    137-873
-				KR
-
-00-03-42   (hex)		Nortel Networks
-000342     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-A4-82-69   (hex)		Datrium, Inc.
-A48269     (base 16)		Datrium, Inc.
-				385 Moffett Park Drive
-				Sunnyvale  CA  94089
-				US
-
-10-E6-8F   (hex)		KWANGSUNG ELECTRONICS KOREA CO.,LTD.
-10E68F     (base 16)		KWANGSUNG ELECTRONICS KOREA CO.,LTD.
-				356-3, Gongdan-ro
-				Gunpo-si  Gyeonggi-do  15808
-				KR
-
-4C-FA-CA   (hex)		Cambridge Industries(Group) Co.,Ltd.
-4CFACA     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				5/F,Building 8, 2388 ChenHang Road, MinHang District
-				shanghai    201114
-				CN
-
-18-AB-F5   (hex)		Ultra Electronics Electrics
-18ABF5     (base 16)		Ultra Electronics Electrics
-				Kingsditch Lane
-				Cheltenham  Gloucestershire  GL51 9PG
-				GB
-
-B0-3E-B0   (hex)		MICRODIA Ltd.
-B03EB0     (base 16)		MICRODIA Ltd.
-				Suites 1608-1610, 16/F., Prosperity Centre, 25 Chong Yip Street,
-				Kwun Tong  Kowloon,  000000
-				HK
-
-00-15-91   (hex)		RLW Inc.
-001591     (base 16)		RLW Inc.
-				2029 Cato Ave.
-				State College  PA  16801
-				US
-
-00-18-2E   (hex)		XStreamHD
-00182E     (base 16)		XStreamHD
-				7900B Westpark Drive
-				McLean  VA  22102
-				US
-
-00-12-83   (hex)		Nortel Networks
-001283     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-11-F9   (hex)		Nortel Networks
-0011F9     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-11-58   (hex)		Nortel Networks
-001158     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-0F-6A   (hex)		Nortel Networks
-000F6A     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-0E-62   (hex)		Nortel Networks
-000E62     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-0C-F8   (hex)		Nortel Networks
-000CF8     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-26-F1   (hex)		ProCurve Networking by HP
-0026F1     (base 16)		ProCurve Networking by HP
-				60 Alexandra Terrace
-				0000    118502
-				SG
-
-38-0D-D4   (hex)		Primax Electronics Ltd.
-380DD4     (base 16)		Primax Electronics Ltd.
-				8F,No. 669, Ruey Kuang Road, Neihu
-				Taipei    114
-				TW
-
-98-FD-B4   (hex)		Primax Electronics Ltd.
-98FDB4     (base 16)		Primax Electronics Ltd.
-				No. 669, Ruey Kuang Road, Neihu
-				Taipei  Taiwan,  R.O.C.
-				TW
-
-D8-C4-6A   (hex)		Murata Manufacturing Co., Ltd.
-D8C46A     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-D8-FB-68   (hex)		Cloud Corner Ltd.
-D8FB68     (base 16)		Cloud Corner Ltd.
-				Cloud Corner Smart Bldg, Mei Ju Center NO.39 Dongcheng South Road
-				Dong Guan  Guang Dong  523129
-				CN
-
-68-53-88   (hex)		P&S Technology
-685388     (base 16)		P&S Technology
-				216 Deajiro
-				Yongin-si  Gyeonggi-do  448-813
-				KR
-
-98-2F-3C   (hex)		Sichuan Changhong Electric Ltd.
-982F3C     (base 16)		Sichuan Changhong Electric Ltd.
-				35 East Mianxing Road,High-Tech Park,
-				MianYang  SiChuan  621000
-				CN
-
-14-C1-FF   (hex)		ShenZhen QianHai Comlan communication Co.,LTD
-14C1FF     (base 16)		ShenZhen QianHai Comlan communication Co.,LTD
-				Shenzhen Nanshan district keyuan road Dongfang science and technology building,  room 2407.
-				ShenZhen  GuangDong  518000
-				CN
-
-00-04-17   (hex)		ELAU AG
-000417     (base 16)		ELAU AG
-				Dillberg 12
-				    
-				DE
-
-EC-FA-AA   (hex)		The IMS Company
-ECFAAA     (base 16)		The IMS Company
-				2929 E. Imperial Highway
-				Brea  CA  92821
-				US
-
-F0-07-86   (hex)		Shandong Bittel Electronics Co., Ltd
-F00786     (base 16)		Shandong Bittel Electronics Co., Ltd
-				No.1 Rizhao North Road
-				Rizhao  Shandong  276800
-				CN
-
-00-D0-F6   (hex)		Nokia
-00D0F6     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-54-A6-19   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-54A619     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-00-09-97   (hex)		Nortel Networks
-000997     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1C-EB   (hex)		Nortel Networks
-001CEB     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1C-17   (hex)		Nortel Networks
-001C17     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1A-8F   (hex)		Nortel Networks
-001A8F     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-17-D1   (hex)		Nortel Networks
-0017D1     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-88-83-22   (hex)		Samsung Electronics Co.,Ltd
-888322     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E8-93-09   (hex)		Samsung Electronics Co.,Ltd
-E89309     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-14-C7   (hex)		Nortel Networks
-0014C7     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1D-AF   (hex)		Nortel Networks
-001DAF     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-88-A6-C6   (hex)		Sagemcom Broadband SAS
-88A6C6     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-94-D4-69   (hex)		Cisco Systems, Inc
-94D469     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-88-2B-D7   (hex)		ADDÉNERGIE  TECHNOLOGIES
-882BD7     (base 16)		ADDÉNERGIE  TECHNOLOGIES
-				533 avenue de la montagne LOCAL 121
-				Shawinigan  Quebec  G9N 0A3
-				CA
-
-00-90-CC   (hex)		PLANEX COMMUNICATIONS INC.
-0090CC     (base 16)		PLANEX COMMUNICATIONS INC.
-				2F FENISSAY Ebisu Bldg
-				Shibuya-ku,  Tokyo  150-0011
-				JP
-
-20-57-AF   (hex)		Shenzhen FH-NET OPTOELECTRONICS CO.,LTD
-2057AF     (base 16)		Shenzhen FH-NET OPTOELECTRONICS CO.,LTD
-				5/F Building D1 TCL International E City NO.1001 Zhong  shan  yuan Rd,  Nanshan District Shenzhen china 
-				Shenzhen  GuangDong  518055
-				CN
-
-54-DC-1D   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-54DC1D     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-				Road NO2, West of Industrial Park,North of Science & Technology Park
-				Dongguan  Guangdong  518057
-				CN
-
-AC-A2-13   (hex)		Shenzhen Bilian electronic CO.,LTD
-ACA213     (base 16)		Shenzhen Bilian electronic CO.,LTD
-				NO 268，Fuqian Rd,Jutang Community
-				shenzhen  guangdong  518110
-				CN
-
-3C-33-00   (hex)		Shenzhen Bilian electronic CO.,LTD
-3C3300     (base 16)		Shenzhen Bilian electronic CO.,LTD
-				NO 268，Fuqian Rd,Jutang Community,Guanlan town , LongHua new district
-				Shenzhen  Guangdong  518110
-				CN
-
-6C-D0-32   (hex)		LG Electronics
-6CD032     (base 16)		LG Electronics
-				16, Woomyeon-dong, Seocho-gu
-				Seoul    137-724
-				KR
-
-3C-BD-D8   (hex)		LG ELECTRONICS INC
-3CBDD8     (base 16)		LG ELECTRONICS INC
-				19-1, CHEONGHO-RI, JINWI-MYEON
-				PYEONGTAEK  GYEONGGI-DO  451-713
-				KR
-
-34-4D-F7   (hex)		LG Electronics (Mobile Communications)
-344DF7     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-58-3F-54   (hex)		LG Electronics (Mobile Communications)
-583F54     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-22-CF   (hex)		PLANEX COMMUNICATIONS INC.
-0022CF     (base 16)		PLANEX COMMUNICATIONS INC.
-				2F F ・ NISSAY Ebisu Bldg3-16-3
-				Shibuya-ku  Tokyo  150-0011
-				JP
-
-E4-17-D8   (hex)		8BITDO TECHNOLOGY HK LIMITED
-E417D8     (base 16)		8BITDO TECHNOLOGY HK LIMITED
-				Rooms 1318-19, 13/F, Hollywood Plaza, 610 Nathan Road, Mongkok, Kowloon, Hong Kong
-				Hong Kong  Hong Kong  000000
-				CN
-
-9C-D3-32   (hex)		PLC Technology Ltd
-9CD332     (base 16)		PLC Technology Ltd
-				Nauchny proezd, 17
-				Moscow  Select State  117246
-				RU
-
-38-F8-CA   (hex)		OWIN Inc.
-38F8CA     (base 16)		OWIN Inc.
-				Chosunref 5fl,577,Seolleung-ro,Gangnam-gu
-				Seoul    682-20
-				KR
-
-44-33-4C   (hex)		Shenzhen Bilian electronic CO.,LTD
-44334C     (base 16)		Shenzhen Bilian electronic CO.,LTD
-				NO 268
-				Shenzhen  Guangdong  518110
-				CN
-
-64-89-9A   (hex)		LG Electronics (Mobile Communications)
-64899A     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-21-05   (hex)		Alcatel-Lucent IPD
-002105     (base 16)		Alcatel-Lucent IPD
-				701 E. Middlefield Rd.
-				Mountain View  CA  94043
-				US
-
-00-1B-C5   (hex)		IEEE Registration Authority
-001BC5     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-48-DF-37   (hex)		Hewlett Packard Enterprise
-48DF37     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-C0-E4-2D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-C0E42D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-8C-A6-DF   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-8CA6DF     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-84-16-F9   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-8416F9     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-18-D6-C7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-18D6C7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-78-C3-E9   (hex)		Samsung Electronics Co.,Ltd
-78C3E9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-8C-1A-BF   (hex)		Samsung Electronics Co.,Ltd
-8C1ABF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-CB-F8   (hex)		Samsung Electronics Co.,Ltd
-30CBF8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A0-CB-FD   (hex)		Samsung Electronics Co.,Ltd
-A0CBFD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-5D-75   (hex)		Samsung Electronics Co.,Ltd
-E45D75     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-E0-4D   (hex)		INTERNET INITIATIVE JAPAN, INC
-00E04D     (base 16)		INTERNET INITIATIVE JAPAN, INC
-				1-4, SANBAN-CHO, CHIYODA-KU
-				  TOKYO 102  
-				JP
-
-F8-A9-D0   (hex)		LG Electronics (Mobile Communications)
-F8A9D0     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-CC-FA-00   (hex)		LG Electronics (Mobile Communications)
-CCFA00     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-74-A7-22   (hex)		LG Electronics (Mobile Communications)
-74A722     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-F0-1C-13   (hex)		LG Electronics (Mobile Communications)
-F01C13     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-58-FC-DB   (hex)		IEEE Registration Authority
-58FCDB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B0-C5-CA   (hex)		IEEE Registration Authority
-B0C5CA     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-74-19-F8   (hex)		IEEE Registration Authority
-7419F8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A8-16-B2   (hex)		LG Electronics (Mobile Communications)
-A816B2     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-64-BC-0C   (hex)		LG Electronics (Mobile Communications)
-64BC0C     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-90-C6-82   (hex)		IEEE Registration Authority
-90C682     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C0-1A-DA   (hex)		Apple, Inc.
-C01ADA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-00-31   (hex)		QPSX COMMUNICATIONS, LTD.
-000031     (base 16)		QPSX COMMUNICATIONS, LTD.
-				33 RICHARDSON STREET
-				Western    00000
-				AU
-
-00-0E-1E   (hex)		QLogic Corporation
-000E1E     (base 16)		QLogic Corporation
-				26650 Aliso Viejo Parkway
-				Aliso Viejo  CA  92656
-				US
-
-00-14-D1   (hex)		TRENDnet, Inc.
-0014D1     (base 16)		TRENDnet, Inc.
-				20675 Manhattan Place
-				Torrance  CA  90501
-				US
-
-CC-52-AF   (hex)		Universal Global Scientific Industrial Co., Ltd.
-CC52AF     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351, TAIPING RD.
-				nan tou  NAN-TOU  542
-				TW
-
-00-1C-14   (hex)		VMware, Inc.
-001C14     (base 16)		VMware, Inc.
-				3401 Hillview Avenue
-				Palo Alto  CA  94304
-				US
-
-00-50-56   (hex)		VMware, Inc.
-005056     (base 16)		VMware, Inc.
-				3401 Hillview Avenue
-				PALO ALTO  CA  94304
-				US
-
-00-12-1C   (hex)		PARROT SA
-00121C     (base 16)		PARROT SA
-				174 Quai de Jemmapes
-				Paris    75010
-				FR
-
-90-03-B7   (hex)		PARROT SA
-9003B7     (base 16)		PARROT SA
-				174 Quai de Jemmapes
-				Paris    75010
-				FR
-
-20-87-56   (hex)		SIEMENS AG
-208756     (base 16)		SIEMENS AG
-				Oestliche Rheinbrueckenstrasse 50
-				Karlsruhe  Baden-Württemberg  76187
-				DE
-
-74-B4-72   (hex)		CIESSE
-74B472     (base 16)		CIESSE
-				Via G. di Vittorio, 66
-				Rignano Sull'Arno  Florence  50067
-				IT
-
-FC-F1-52   (hex)		Sony Corporation
-FCF152     (base 16)		Sony Corporation
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-48-3C-0C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-483C0C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-9B-AD   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-309BAD     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
-				Dong Guan   Guang Dong  523860
-				CN
-
-00-1B-B1   (hex)		Wistron Neweb Corporation
-001BB1     (base 16)		Wistron Neweb Corporation
-				No. 10-1, Li-hsin Road I, Hsinchu Science Park,
-				Hsinchu    300
-				TW
-
-00-80-F7   (hex)		Zenith Electronics Corporation
-0080F7     (base 16)		Zenith Electronics Corporation
-				1000 MILWAUKEE AVENUE
-				GLENVIEW  IL  60025
-				US
-
-BC-30-7D   (hex)		Wistron Neweb Corporation
-BC307D     (base 16)		Wistron Neweb Corporation
-				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
-				HsinChu  Taiwan  308
-				TW
-
-48-A9-D2   (hex)		Wistron Neweb Corporation
-48A9D2     (base 16)		Wistron Neweb Corporation
-				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
-				HsinChu  Taiwan  308
-				TW
-
-80-EA-23   (hex)		Wistron Neweb Corporation
-80EA23     (base 16)		Wistron Neweb Corporation
-				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
-				HsinChu  Taiwan  308
-				TW
-
-00-27-13   (hex)		Universal Global Scientific Industrial Co., Ltd.
-002713     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351,SEC.1, TAIPING RD.
-				TSAOTUEN,  NANTOU  54261
-				TW
-
-BC-30-7E   (hex)		Wistron Neweb Corporation
-BC307E     (base 16)		Wistron Neweb Corporation
-				20 Park Avenue II.
-				Hsinchu    30808854
-				TW
-
-08-95-2A   (hex)		Technicolor CH USA Inc.
-08952A     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-44-32-C8   (hex)		Technicolor CH USA Inc.
-4432C8     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-38-A2-8C   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-38A28C     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-B4-A5-EF   (hex)		Sercomm Corporation.
-B4A5EF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-84-9D-64   (hex)		SMC Corporation
-849D64     (base 16)		SMC Corporation
-				4-2-2, Kinunodai
-				Tsukuba Mirai-shi  Ibaraki-ken  300-2493
-				JP
-
-00-10-C1   (hex)		OI ELECTRIC CO.,LTD
-0010C1     (base 16)		OI ELECTRIC CO.,LTD
-				7-3-16 KIKUNA
-				YOKOHAMA  KANAGAWA-KEN  222-0011
-				JP
-
-28-BE-9B   (hex)		Technicolor CH USA Inc.
-28BE9B     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-FC-52-8D   (hex)		Technicolor CH USA Inc.
-FC528D     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-50-65-83   (hex)		Texas Instruments
-506583     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B0-91-22   (hex)		Texas Instruments
-B09122     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-FC-51-A4   (hex)		ARRIS Group, Inc.
-FC51A4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-98-57-D3   (hex)		HON HAI-CCPBG  PRECISION IND.CO.,LTD.
-9857D3     (base 16)		HON HAI-CCPBG  PRECISION IND.CO.,LTD.
-				5F, No.9,Li-Hsin Road V,Science Park
-				Hsinchu    300
-				TW
-
-FC-F5-28   (hex)		Zyxel Communications Corporation
-FCF528     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-00-A0-C5   (hex)		Zyxel Communications Corporation
-00A0C5     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-A0-9E-1A   (hex)		Polar Electro Oy
-A09E1A     (base 16)		Polar Electro Oy
-				Professorintie 5
-				Kempele  Oulu  90440
-				FI
-
-1C-D6-BD   (hex)		LEEDARSON LIGHTING CO., LTD.
-1CD6BD     (base 16)		LEEDARSON LIGHTING CO., LTD.
-				No. 1511, 2nd Fanghu North Rd., Huli District
-				Xiamen  Fugian  361010
-				CN
-
-D0-D9-4F   (hex)		IEEE Registration Authority
-D0D94F     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-1E-04   (hex)		Hanson Research Corporation
-001E04     (base 16)		Hanson Research Corporation
-				9810 Variel Ave.
-				Chatsworth  CA  91311
-				US
-
-60-C0-BF   (hex)		ON Semiconductor
-60C0BF     (base 16)		ON Semiconductor
-				5005 East McDowell Road
-				Phoenix  AZ  85008
-				US
-
-AC-04-81   (hex)		Jiangsu Huaxing Electronics Co., Ltd.
-AC0481     (base 16)		Jiangsu Huaxing Electronics Co., Ltd.
-				the Industrial concentration zone, Zhiqian town,Jintan distric
-				Changzhou City  Jiangsu Province  213234
-				CN
-
-68-B3-5E   (hex)		Shenzhen Neostra Technology Co.Ltd
-68B35E     (base 16)		Shenzhen Neostra Technology Co.Ltd
-				7th Building,Huaide Cuihai Industrial Park,Fuyong,Shenzhen China
-				shenzhen    518100
-				CN
-
-40-88-05   (hex)		Motorola Mobility LLC, a Lenovo Company
-408805     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-24-E2-71   (hex)		Qingdao Hisense Communications Co.,Ltd.
-24E271     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-BC-60-10   (hex)		Qingdao Hisense Communications Co.,Ltd.
-BC6010     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-D0-FC-CC   (hex)		Samsung Electronics Co.,Ltd
-D0FCCC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-98-39-8E   (hex)		Samsung Electronics Co.,Ltd
-98398E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-44-D1-FA   (hex)		Shenzhen Yunlink Technology Co., Ltd
-44D1FA     (base 16)		Shenzhen Yunlink Technology Co., Ltd
-				Gushu, Xixiang Town, Bao'an District, 
-				Shenzhen City  Guangdong Province  518100
-				CN
-
-F0-F6-44   (hex)		Whitesky Science & Technology Co.,Ltd.
-F0F644     (base 16)		Whitesky Science & Technology Co.,Ltd.
-				Room301,Building7,NO.6,Lane365
-				  Shanghai  200052
-				CN
-
-20-F1-7C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-20F17C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-6A-C2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-346AC2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-1C-FF   (hex)		Vizio, Inc
-C41CFF     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-C0-97-27   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-C09727     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-DC-29-3A   (hex)		Shenzhen Nuoshi Technology Co., LTD.
-DC293A     (base 16)		Shenzhen Nuoshi Technology Co., LTD.
-				Room 7020 of Tian Xia IC  Industry Park, Majialong Industrial Zone, YiYuan Road
-				Nanshan District, Shenzhen  Guangdong  518052
-				CN
-
-7C-6A-F3   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-7C6AF3     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-E4-62-51   (hex)		HAO CHENG GROUP LIMITED
-E46251     (base 16)		HAO CHENG GROUP LIMITED
-				 FLAT/RM C, 06/F, BEST-TO-BEST COMMERCIAL CENTRE 32-36 FERRY STREET JORDAN KL
-				Hong KOng    999077
-				HK
-
-40-56-2D   (hex)		Smartron India Pvt ltd
-40562D     (base 16)		Smartron India Pvt ltd
-				1st Floor,  Kapil Tower,  Gachibowli
-				Hyderabad  Telangana  500032
-				IN
-
-38-76-D1   (hex)		Euronda SpA
-3876D1     (base 16)		Euronda SpA
-				Via dell'artigianato, 7
-				Montecchio Precalcino  Italia/Vicenza  36030
-				IT
-
-C4-69-3E   (hex)		Turbulence Design Inc.
-C4693E     (base 16)		Turbulence Design Inc.
-				1-3-14
-				Koshigaya-City  Saitama  343-0813
-				JP
-
-00-95-69   (hex)		LSD Science and Technology Co.,Ltd.
-009569     (base 16)		LSD Science and Technology Co.,Ltd.
-				Lierda Building,No.425 Dengyun Rd.
-				Hangzhou  Zhijiang  310011
-				CN
-
-B0-CF-4D   (hex)		MI-Zone Technology Ireland
-B0CF4D     (base 16)		MI-Zone Technology Ireland
-				2nd floor,block 10 unit 3
-				dublin  Blanchardstown  15
-				IE
-
-28-9A-FA   (hex)		TCT mobile ltd
-289AFA     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-00-1A-34   (hex)		Konka Group Co., Ltd.
-001A34     (base 16)		Konka Group Co., Ltd.
-				Shenzhen Konka R & D Building, 28th floor 15-24
-				Nanshan District  Guangdong  00000
-				CN
-
-00-11-FC   (hex)		HARTING Electronics GmbH
-0011FC     (base 16)		HARTING Electronics GmbH
-				Wilhelm Harting Str. 1
-				Espelkamp  Nordrhein Westfalen  D-32339
-				DE
-
-00-23-89   (hex)		Hangzhou H3C Technologies Co., Limited
-002389     (base 16)		Hangzhou H3C Technologies Co., Limited
-				Oriental Electronics Bldg., #2, Chuangye RoadÃ‚Â£Ã‚Â¬Shangdi Information Industry Base,
-				Beijing    100085
-				US
-
-3C-E5-A6   (hex)		Hangzhou H3C Technologies Co., Limited
-3CE5A6     (base 16)		Hangzhou H3C Technologies Co., Limited
-				Oriental Electronic Bld., NO.2,Chuangye Road
-				Beijing    100085
-				CN
-
-5C-DD-70   (hex)		Hangzhou H3C Technologies Co., Limited
-5CDD70     (base 16)		Hangzhou H3C Technologies Co., Limited
-				310 Liuhe Road, Zhijiang Science Park
-				Hangzhou  Zhejiang,   310053
-				CN
-
-3C-8C-40   (hex)		Hangzhou H3C Technologies Co., Limited
-3C8C40     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District,
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-A0-67-BE   (hex)		Sicon srl
-A067BE     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-D8-20-9F   (hex)		Cubro Acronet GesmbH
-D8209F     (base 16)		Cubro Acronet GesmbH
-				Geiselberstraße 17 / 6 Floor
-				Vienna  Vienna  1110
-				AT
-
-8C-77-16   (hex)		LONGCHEER TELECOMMUNICATION LIMITED
-8C7716     (base 16)		LONGCHEER TELECOMMUNICATION LIMITED
-				Building 1,No.401,Caobao Rd
-				Shanghai  Xuhui District  200233
-				CN
-
-68-FB-7E   (hex)		Apple, Inc.
-68FB7E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-A1-34   (hex)		Apple, Inc.
-84A134     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-D3-85   (hex)		AUMA Riester GmbH & Co. KG
-A0D385     (base 16)		AUMA Riester GmbH & Co. KG
-				Aumastr. 1
-				Muellheim  Baden-Württemberg  79379
-				DE
-
-14-14-E6   (hex)		Ningbo Sanhe Digital Co.,Ltd
-1414E6     (base 16)		Ningbo Sanhe Digital Co.,Ltd
-				No.1177 Lingyun Road
-				ningbo  zhejiang  315048
-				CN
-
-00-25-82   (hex)		Maksat Technologies (P) Ltd
-002582     (base 16)		Maksat Technologies (P) Ltd
-				D-10/6, Okhla, Phase-I
-				New Delhi    110020
-				IN
-
-0C-51-01   (hex)		Apple, Inc.
-0C5101     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-F0-A2   (hex)		Apple, Inc.
-2CF0A2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-C0-49   (hex)		Broad Telecom SA
-48C049     (base 16)		Broad Telecom SA
-				c/ Margarita Salas, 22
-				Leganes  Madrid  28918
-				ES
-
-AC-6F-BB   (hex)		TATUNG Technology Inc.
-AC6FBB     (base 16)		TATUNG Technology Inc.
-				22, Chungshan N. Rd., 3rd Sec.,
-				Taipei    104
-				TW
-
-00-1C-41   (hex)		scemtec Transponder Technology GmbH
-001C41     (base 16)		scemtec Transponder Technology GmbH
-				Wehrstr. 1
-				Gummersbach  NRW  51645
-				DE
-
-14-63-08   (hex)		JABIL CIRCUIT (SHANGHAI) LTD.
-146308     (base 16)		JABIL CIRCUIT (SHANGHAI) LTD.
-				FL5-UNIT A2 NO. 1528 GUMEI ROAD
-				SHANGHAI    200233
-				CN
-
-00-1E-25   (hex)		INTEK DIGITAL
-001E25     (base 16)		INTEK DIGITAL
-				1101, 11th Fl., Anyang K-center building, 1591-9
-				Anyang  Gyeonggi-do  431-815
-				KR
-
-00-E0-CF   (hex)		INTEGRATED DEVICE
-00E0CF     (base 16)		INTEGRATED DEVICE
-				6024 Silver Creek Valley Road
-				San Jose  CA  95138
-				US
-
-90-4D-4A   (hex)		Sagemcom Broadband SAS
-904D4A     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-04-4E-5A   (hex)		ARRIS Group, Inc.
-044E5A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-60-B1   (hex)		Input/Output, Inc.
-0060B1     (base 16)		Input/Output, Inc.
-				12300 PARC CREST DRIVE
-				STAFFORD  TX  77477-2416
-				US
-
-54-7F-54   (hex)		INGENICO
-547F54     (base 16)		INGENICO
-				9, avenue de la gare - BP 25156
-				Valence cedex 9    26958
-				FR
-
-6C-24-83   (hex)		Microsoft Mobile Oy
-6C2483     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				Espoo    02150
-				FI
-
-68-91-D0   (hex)		IEEE Registration Authority
-6891D0     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E0-4F-43   (hex)		Universal Global Scientific Industrial Co., Ltd.
-E04F43     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
-				Nan-Tou  Taiwan  54261
-				TW
-
-38-70-0C   (hex)		ARRIS Group, Inc.
-38700C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-0E-2E   (hex)		Edimax Technology Co. Ltd.
-000E2E     (base 16)		Edimax Technology Co. Ltd.
-				No. 278, Xinhu 1st Road
-				Taipei City  Neihu Dist  248
-				TW
-
-00-06-5F   (hex)		ECI Telecom Ltd.
-00065F     (base 16)		ECI Telecom Ltd.
-				30 Hasivim St.
-				hasivivm    53188
-				IL
-
-00-20-8F   (hex)		ECI Telecom Ltd.
-00208F     (base 16)		ECI Telecom Ltd.
-				HASIVIM ST. 30,
-				PETACH-TIKVA 49133    49133
-				IL
-
-84-40-76   (hex)		Drivenets
-844076     (base 16)		Drivenets
-				4 ashizaf
-				Raanana    4366411
-				IL
-
-00-1C-D7   (hex)		Harman/Becker Automotive Systems GmbH
-001CD7     (base 16)		Harman/Becker Automotive Systems GmbH
-				Becker-Göring-Straße 16
-				Karlsbad  Baden-Württemberg  76307
-				DE
-
-00-3A-7D   (hex)		Cisco Systems, Inc
-003A7D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-90-C7-D8   (hex)		zte corporation
-90C7D8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-18-5C   (hex)		EDSLAB Technologies
-00185C     (base 16)		EDSLAB Technologies
-				20 Ayer Rajah Crescent
-				Crescent    139964
-				SG
-
-00-1A-45   (hex)		GN Netcom A/S
-001A45     (base 16)		GN Netcom A/S
-				Metalbuen 66
-				Ballerup  Skovlunde  DK - 2750
-				DK
-
-00-20-88   (hex)		GLOBAL VILLAGE COMMUNICATION
-002088     (base 16)		GLOBAL VILLAGE COMMUNICATION
-				1144 EAST ARQUES AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-54-13-79   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-541379     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-19-21   (hex)		Elitegroup Computer Systems Co.,Ltd.
-001921     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No.22,Alley 38,Lane 91, Sec. 1,Nei Hu Road.
-				Taipei    114
-				TW
-
-00-16-EC   (hex)		Elitegroup Computer Systems Co.,Ltd.
-0016EC     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No. 22, Alley 38, Lane 91, Sec. 1, Nei Hu Road,
-				Taipei    11441
-				TW
-
-00-07-95   (hex)		Elitegroup Computer Systems Co.,Ltd.
-000795     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No. 22, Alley 38, Lane 91,
-				Taipei    114
-				TW
-
-FC-0F-4B   (hex)		Texas Instruments
-FC0F4B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D4-88-3F   (hex)		HDPRO CO., LTD.
-D4883F     (base 16)		HDPRO CO., LTD.
-				HDPRO Bldg. 23, 362 Beon-gil, Shinheung-ro, Ojeong-gu
-				Bucheon-City  Gyunggi-Do  14491
-				KR
-
-10-88-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-1088CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-60-B6-17   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-60B617     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-DC-9C-9F   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-DC9C9F     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-74-DF-BF   (hex)		Liteon Technology Corporation
-74DFBF     (base 16)		Liteon Technology Corporation
-				7F, Bldg, C, 90, Chien 1 Road
-				Taipei  Taiwan  23585
-				TW
-
-F0-3E-90   (hex)		Ruckus Wireless
-F03E90     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-D8-D7-23   (hex)		IDS, Inc
-D8D723     (base 16)		IDS, Inc
-				6801 15 Mile Rd.
-				Sterling Heights  MI  48312
-				US
-
-84-AD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-84AD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-60-5F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-58605F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-A0-F4   (hex)		GE
-00A0F4     (base 16)		GE
-				W-657
-				WAUKESHA  WI  53188
-				US
-
-AC-0D-1B   (hex)		LG Electronics (Mobile Communications)
-AC0D1B     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-F0-D1-B8   (hex)		LEDVANCE
-F0D1B8     (base 16)		LEDVANCE
-				200 Ballardvale St
-				Wilmington  MA  01887
-				US
-
-98-6D-35   (hex)		IEEE Registration Authority
-986D35     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-88-79-5B   (hex)		Konka Group Co., Ltd.
-88795B     (base 16)		Konka Group Co., Ltd.
-				Shenzhen Konka R & D Building, 28th floor 15-24
-				Nanshan District  Guangdong  00000
-				CN
-
-08-1F-71   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-081F71     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-5C-CA-1A   (hex)		Microsoft Mobile Oy
-5CCA1A     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				Espoo    02150
-				FI
-
-FC-2F-AA   (hex)		Nokia
-FC2FAA     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-B0-7E-70   (hex)		Zadara Storage Ltd.
-B07E70     (base 16)		Zadara Storage Ltd.
-				6 Venture, Suite 140
-				Irvine  CA  92618
-				US
-
-00-80-B1   (hex)		SOFTCOM A/S
-0080B1     (base 16)		SOFTCOM A/S
-				STUDIESTRAEDE 21
-				    
-				DK
-
-20-2D-F8   (hex)		Digital Media Cartridge Ltd.
-202DF8     (base 16)		Digital Media Cartridge Ltd.
-				5F-3, No. 9, Ln 3, Jihu Rd, Neihu
-				Taipei    11492
-				TW
-
-10-D0-AB   (hex)		zte corporation
-10D0AB     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-04-C6   (hex)		YAMAHA MOTOR CO.,LTD
-0004C6     (base 16)		YAMAHA MOTOR CO.,LTD
-				Information System Division
-				Japan  Zip:  438-8501
-				JP
-
-18-A3-E8   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-18A3E8     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-74-1E-93   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-741E93     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-20-2D-07   (hex)		Samsung Electronics Co.,Ltd
-202D07     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D8-80-3C   (hex)		Anhui Huami Information Technology Company Limited
-D8803C     (base 16)		Anhui Huami Information Technology Company Limited
-				Building A4, 12th Floor, No. 800, Wangjiang Road
-				Hefei  Anhui  230088
-				CN
-
-00-34-DA   (hex)		LG Electronics (Mobile Communications)
-0034DA     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-38-10-D5   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-3810D5     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-18-C5-01   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-18C501     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-00-A0-B8   (hex)		NetApp
-00A0B8     (base 16)		NetApp
-				1395 Crossman Ave
-				Sunnyvale,  CA  94089
-				US
-
-00-C8-8B   (hex)		Cisco Systems, Inc
-00C88B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-C3-F9   (hex)		Securitas Direct AB
-24C3F9     (base 16)		Securitas Direct AB
-				Angbatsbron 1
-				Malmö    21120
-				SE
-
-2C-21-D7   (hex)		IMAX Corporation
-2C21D7     (base 16)		IMAX Corporation
-				2525 Speakman Drive
-				Mississauga  Ontario  L5K 1B1
-				CA
-
-00-09-D2   (hex)		Mai Logic Inc.
-0009D2     (base 16)		Mai Logic Inc.
-				47697 Westinghouse Dr., Suite 200
-				Fremont  CA  94539
-				US
-
-00-60-16   (hex)		CLARIION
-006016     (base 16)		CLARIION
-				COSLIN DRIVE
-				SOUTHBORO  MA  01772
-				US
-
-98-1F-B1   (hex)		Shenzhen Lemon Network Technology Co.,Ltd
-981FB1     (base 16)		Shenzhen Lemon Network Technology Co.,Ltd
-				Changhong Technology Building 1710-11,South NO.12 Road,Nanshan Technology Park,Nanshan District,Shenzhen,China.
-				shenzhen    518100
-				CN
-
-0C-5A-9E   (hex)		Wi-SUN Alliance
-0C5A9E     (base 16)		Wi-SUN Alliance
-				275 Tennant Avenue, Suite 202
-				Morgan Hill  CA  95037
-				US
-
-B4-4B-D2   (hex)		Apple, Inc.
-B44BD2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-41-5F   (hex)		Apple, Inc.
-DC415F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-12-25   (hex)		Cisco Systems, Inc
-641225     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-78-64-E6   (hex)		Green Motive Technology Limited
-7864E6     (base 16)		Green Motive Technology Limited
-				Room 1106,11 Floor，The XinYuan Square, No 418 Gui ping Road
-				shanghai  shanghai  20233
-				CN
-
-3C-BE-E1   (hex)		NIKON CORPORATION
-3CBEE1     (base 16)		NIKON CORPORATION
-				Shinagawa Intercity Tower C, 2-15-3, Konan
-				Minato-ku  Tokyo  108-6290
-				JP
-
-10-2A-B3   (hex)		Xiaomi Communications Co Ltd
-102AB3     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-40-D3-57   (hex)		Ison Technology Co., Ltd.
-40D357     (base 16)		Ison Technology Co., Ltd.
-				Room 6, 20F, No. 77, section 1, Xintai 5th Rd. Xizhi District
-				New Taipei City  Taiwan  22101
-				TW
-
-A4-15-88   (hex)		ARRIS Group, Inc.
-A41588     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F4-5C-89   (hex)		Apple, Inc.
-F45C89     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-76-8F   (hex)		Apple, Inc.
-20768F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-11-D1   (hex)		Soft Imaging System GmbH
-0011D1     (base 16)		Soft Imaging System GmbH
-				Johann-Krane-Weg 39
-				Muenster    48149
-				DE
-
-98-D6-86   (hex)		Chyi Lee industry Co., ltd.
-98D686     (base 16)		Chyi Lee industry Co., ltd.
-				No.25, Wufu Rd., Xinying Dist.
-				Tainan city    73054
-				TW
-
-8C-C6-61   (hex)		Current, powered by GE
-8CC661     (base 16)		Current, powered by GE
-				1975 Noble Road B335C
-				East Cleveland  OH  44112
-				US
-
-88-A0-84   (hex)		Formation Data Systems
-88A084     (base 16)		Formation Data Systems
-				39141 Civic Center Drive, Suite 410 
-				Fremont  CA  94538
-				US
-
-E8-B2-AC   (hex)		Apple, Inc.
-E8B2AC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-9A-79   (hex)		Apple, Inc.
-E49A79     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-A9-DE   (hex)		LG Innotek
-30A9DE     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-F0-1B-6C   (hex)		vivo Mobile Communication Co., Ltd.
-F01B6C     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-A0-B9-ED   (hex)		Skytap
-A0B9ED     (base 16)		Skytap
-				710 2nd Ave Suite 1130
-				Seattle  WA  98104
-				US
-
-94-C9-60   (hex)		Zhongshan B&T technology.co.,ltd
-94C960     (base 16)		Zhongshan B&T technology.co.,ltd
-				Floor3-4,Block A,Dong Fang Industrial park,Da che country,Nan Lang District 
-				Zhong Shan City  Guang Dong Province  528451
-				CN
-
-74-C3-30   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-74C330     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-40-3F-8C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-403F8C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-DC-B3-B4   (hex)		Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.
-DCB3B4     (base 16)		Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.
-				158 Nan Hai Road, TEDA
-				Tianjin    300457
-				CN
-
-00-1D-3B   (hex)		Nokia Danmark A/S
-001D3B     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1D-FD   (hex)		Nokia Danmark A/S
-001DFD     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1E-3B   (hex)		Nokia Danmark A/S
-001E3B     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1E-A4   (hex)		Nokia Danmark A/S
-001EA4     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-26-CC   (hex)		Nokia Danmark A/S
-0026CC     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-0E-ED   (hex)		Nokia Danmark A/S
-000EED     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-4C-25-78   (hex)		Nokia Corporation
-4C2578     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  NA  24101
-				FI
-
-BC-C6-DB   (hex)		Nokia Corporation
-BCC6DB     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  NA  24101
-				FI
-
-00-11-9F   (hex)		Nokia Danmark A/S
-00119F     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1A-16   (hex)		Nokia Danmark A/S
-001A16     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1A-89   (hex)		Nokia Danmark A/S
-001A89     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1A-DC   (hex)		Nokia Danmark A/S
-001ADC     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-25-CF   (hex)		Nokia Danmark A/S
-0025CF     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-21-AB   (hex)		Nokia Danmark A/S
-0021AB     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1F-DE   (hex)		Nokia Danmark A/S
-001FDE     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1F-DF   (hex)		Nokia Danmark A/S
-001FDF     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-54-79-75   (hex)		Nokia Corporation
-547975     (base 16)		Nokia Corporation
-				Joensuunkatu 7E
-				Salo    24101
-				FI
-
-A8-7B-39   (hex)		Nokia Corporation
-A87B39     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-00-24-7C   (hex)		Nokia Danmark A/S
-00247C     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-22-66   (hex)		Nokia Danmark A/S
-002266     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-21-FE   (hex)		Nokia Danmark A/S
-0021FE     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790V
-				DK
-
-C4-77-AB   (hex)		Beijing ASU Tech Co.,Ltd
-C477AB     (base 16)		Beijing ASU Tech Co.,Ltd
-				15/F, Global Trade Center Tower, No.36, North 3rd Ring Road, Dongcheng District, Beijing, 100013, China
-				BEI JING  BEI JING  100013
-				CN
-
-00-0B-CA   (hex)		DATAVAN TC
-000BCA     (base 16)		DATAVAN TC
-				4FL,#120-12,Chung Shan Rd, Sec.3
-				Chung Ho City, Taipei Hsien    235
-				TW
-
-70-25-59   (hex)		CyberTAN Technology Inc.
-702559     (base 16)		CyberTAN Technology Inc.
-				99, Park Avenue III, Science-Based Industrial Park
-				Hsinchu    308
-				TW
-
-60-7E-DD   (hex)		Microsoft Mobile Oy
-607EDD     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				ESPOO    02150
-				FI
-
-A8-A0-89   (hex)		Tactical Communications
-A8A089     (base 16)		Tactical Communications
-				473 Post Street
-				Camarillo  CA  93010
-				US
-
-48-36-5F   (hex)		Wintecronics Ltd.
-48365F     (base 16)		Wintecronics Ltd.
-				Rm. 3, 11F., No.716, Zhongzheng Rd., Zhonghe Dist., New Taipei City 23552, Taiwan (R.O.C.)
-				New Taipei City    23552
-				TW
-
-00-1D-20   (hex)		Comtrend Corporation
-001D20     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-08-37-3D   (hex)		Samsung Electronics Co.,Ltd
-08373D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-75-BD   (hex)		Cisco Systems, Inc
-0C75BD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-30-0D-43   (hex)		Microsoft Mobile Oy
-300D43     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 2-4
-				Espoo  N.A.  02150
-				FI
-
-00-00-0E   (hex)		FUJITSU LIMITED
-00000E     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-00-0B-5D   (hex)		FUJITSU LIMITED
-000B5D     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-C4-88-E5   (hex)		Samsung Electronics Co.,Ltd
-C488E5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-05-81   (hex)		Roku, Inc.
-080581     (base 16)		Roku, Inc.
-				12980 Saratoga Ave
-				Saratoga  CA  95070
-				US
-
-00-0D-F3   (hex)		Asmax Solutions
-000DF3     (base 16)		Asmax Solutions
-				Tatarska 5
-				Cracow    30-103
-				PL
-
-80-AC-AC   (hex)		Juniper Networks
-80ACAC     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-0D-B6   (hex)		Broadcom
-000DB6     (base 16)		Broadcom
-				1363 Redwood Way
-				Petaluma  CA  94954
-				US
-
-00-0A-F7   (hex)		Broadcom
-000AF7     (base 16)		Broadcom
-				16215 Alton Parkway
-				Irvine  CA  92618
-				US
-
-D4-01-29   (hex)		Broadcom
-D40129     (base 16)		Broadcom
-				5300 California Ave.
-				Irvine  CA  92617
-				US
-
-00-1D-00   (hex)		Brivo Systems, LLC
-001D00     (base 16)		Brivo Systems, LLC
-				4330 East West Highway
-				Bethesda  MD  20814
-				US
-
-00-20-D6   (hex)		Breezecom, Ltd.
-0020D6     (base 16)		Breezecom, Ltd.
-				ATIDIM TECHNOLOGICAL PK-BLDG.3
-				Tel-aviv    12345
-				IL
-
-00-E0-63   (hex)		Cabletron Systems, Inc.
-00E063     (base 16)		Cabletron Systems, Inc.
-				35 INDUSTRIAL WAY
-				ROCHESTER  NH  03866-5005
-				US
-
-FC-C7-34   (hex)		Samsung Electronics Co.,Ltd
-FCC734     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-84-25-DB   (hex)		Samsung Electronics Co.,Ltd
-8425DB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-EC-71   (hex)		Samsung Electronics Co.,Ltd
-B0EC71     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-58-B8   (hex)		Samsung Electronics Co.,Ltd
-E458B8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-8C-2C   (hex)		Samsung Electronics Co.,Ltd
-088C2C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-B8-53   (hex)		Samsung Electronics Co.,Ltd
-64B853     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-38-94-96   (hex)		Samsung Electronics Co.,Ltd
-389496     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-56-BF   (hex)		Samsung Electronics Co.,Ltd
-5056BF     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-90-F1-AA   (hex)		Samsung Electronics Co.,Ltd
-90F1AA     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-10-77-B1   (hex)		Samsung Electronics Co.,Ltd
-1077B1     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-00-1F-C7   (hex)		Casio Hitachi Mobile Communications Co., Ltd.
-001FC7     (base 16)		Casio Hitachi Mobile Communications Co., Ltd.
-				2-229-1, Sakuragaoka
-				Higashiyamato-shi  Tokyo  207-8501
-				JP
-
-A4-9A-58   (hex)		Samsung Electronics Co.,Ltd
-A49A58     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-EE-8B   (hex)		Samsung Electronics Co.,Ltd
-08EE8B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-A4-2A   (hex)		OB Telecom Electronic Technology Co., Ltd
-0CA42A     (base 16)		OB Telecom Electronic Technology Co., Ltd
-				17/F, Jiangong Building
-				Hangzhou  ZheJiang  310012
-				CN
-
-74-45-8A   (hex)		Samsung Electronics Co.,Ltd
-74458A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-5C-DC-96   (hex)		Arcadyan Technology Corporation
-5CDC96     (base 16)		Arcadyan Technology Corporation
-				No.8, Sec.2, Guangfu Rd.,
-				Hsinchu City 30071,    12345
-				TW
-
-74-31-70   (hex)		Arcadyan Technology Corporation
-743170     (base 16)		Arcadyan Technology Corporation
-				4F. , No. 9 , Park Avenue II,
-				Hsinchu    300
-				TW
-
-00-1A-2A   (hex)		Arcadyan Technology Corporation
-001A2A     (base 16)		Arcadyan Technology Corporation
-				4F., No. 9 , Park Avenue II,
-				Hsinchu    300
-				TW
-
-88-25-2C   (hex)		Arcadyan Technology Corporation
-88252C     (base 16)		Arcadyan Technology Corporation
-				4F., NO.9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-40-BA-61   (hex)		ARIMA Communications Corp.
-40BA61     (base 16)		ARIMA Communications Corp.
-				6F., No.866, Jhongjheng Rd., Jhonghe Dist.
-				New Taipei City    23586
-				TW
-
-00-11-F5   (hex)		ASKEY COMPUTER CORP
-0011F5     (base 16)		ASKEY COMPUTER CORP
-				10F, NO.119, CHIENKANG  RD.,
-				CHUNG-HO, TAIPEI    235
-				TW
-
-00-16-E3   (hex)		ASKEY COMPUTER CORP
-0016E3     (base 16)		ASKEY COMPUTER CORP
-				10F, NO.119, CHIENKANG RD.,
-				CHUNG-HO, TAIPEI    235
-				TW
-
-E8-39-DF   (hex)		ASKEY COMPUTER CORP
-E839DF     (base 16)		ASKEY COMPUTER CORP
-				10F,NO.119,CHIENKANG RD,CHUNG-HO,TAIPEI,
-				TAIWAN  TAIPEI  235
-				TW
-
-1C-C6-3C   (hex)		Arcadyan Technology Corporation
-1CC63C     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-18-83-BF   (hex)		Arcadyan Technology Corporation
-1883BF     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-68-ED-43   (hex)		BlackBerry RTS
-68ED43     (base 16)		BlackBerry RTS
-				451 Phillip Street
-				Waterloo  ON  N2L 3X2
-				CA
-
-70-AA-B2   (hex)		BlackBerry RTS
-70AAB2     (base 16)		BlackBerry RTS
-				451 Phillip Street
-				Waterloo  ON  N2L 3X2
-				CA
-
-00-14-6C   (hex)		NETGEAR
-00146C     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-1E-2A   (hex)		NETGEAR
-001E2A     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-18-4D   (hex)		NETGEAR
-00184D     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-04-0E   (hex)		AVM GmbH
-00040E     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				berlin    12345
-				DE
-
-9C-C7-A6   (hex)		AVM GmbH
-9CC7A6     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				berlin  Berlin  10559
-				DE
-
-A0-63-91   (hex)		NETGEAR
-A06391     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-20-E5-2A   (hex)		NETGEAR
-20E52A     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-44-94-FC   (hex)		NETGEAR
-4494FC     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-20-0C-C8   (hex)		NETGEAR
-200CC8     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-C4-47-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4473F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-44-01   (hex)		NETGEAR
-744401     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-E0-91-F5   (hex)		NETGEAR
-E091F5     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-0F-86   (hex)		BlackBerry RTS
-000F86     (base 16)		BlackBerry RTS
-				295 Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-00-24-D2   (hex)		ASKEY COMPUTER CORP
-0024D2     (base 16)		ASKEY COMPUTER CORP
-				10F,NO.119,CHIENKANG RD,CHUNG-HO,TAIPEI,
-				TAIWAN  TAIPEI  235
-				TW
-
-B4-EE-B4   (hex)		ASKEY COMPUTER CORP
-B4EEB4     (base 16)		ASKEY COMPUTER CORP
-				10F,NO.119,CHIENKANG RD,ZHONGHE DIST NEW TAIPEI CITY
-				TAIWAN  TAIPEI  23585
-				TW
-
-E4-64-49   (hex)		ARRIS Group, Inc.
-E46449     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-40-FC-89   (hex)		ARRIS Group, Inc.
-40FC89     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-2C-9E-5F   (hex)		ARRIS Group, Inc.
-2C9E5F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-26-36   (hex)		ARRIS Group, Inc.
-002636     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1C-C1   (hex)		ARRIS Group, Inc.
-001CC1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1E-5A   (hex)		ARRIS Group, Inc.
-001E5A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-13-71   (hex)		ARRIS Group, Inc.
-001371     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-EE   (hex)		ARRIS Group, Inc.
-0023EE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1A-DE   (hex)		ARRIS Group, Inc.
-001ADE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-74-56-12   (hex)		ARRIS Group, Inc.
-745612     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-50-E3   (hex)		ARRIS Group, Inc.
-0050E3     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-21-36   (hex)		ARRIS Group, Inc.
-002136     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-16-26   (hex)		ARRIS Group, Inc.
-001626     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-19-A6   (hex)		ARRIS Group, Inc.
-0019A6     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E8-C7-4F   (hex)		Liteon Technology Corporation
-E8C74F     (base 16)		Liteon Technology Corporation
-				4F, No. 90, Chien 1 Road,
-				New Taipei City  Taiwan  23585
-				TW
-
-D0-53-49   (hex)		Liteon Technology Corporation
-D05349     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road ChungHo
-				New Taipei City  Taiwan  23585
-				TW
-
-E8-F7-24   (hex)		Hewlett Packard Enterprise
-E8F724     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-28-0D-FC   (hex)		Sony Interactive Entertainment Inc.
-280DFC     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-00-13-11   (hex)		ARRIS Group, Inc.
-001311     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D0-DF-9A   (hex)		Liteon Technology Corporation
-D0DF9A     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-1C-65-9D   (hex)		Liteon Technology Corporation
-1C659D     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-30-10-B3   (hex)		Liteon Technology Corporation
-3010B3     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road, ChungHo, TaiPei Hsien
-				TaiPei  TaiWan  23585
-				TW
-
-70-1A-04   (hex)		Liteon Technology Corporation
-701A04     (base 16)		Liteon Technology Corporation
-				4F 90 Chien 1 Rd.ChungHo
-				Taipei    23585
-				TW
-
-48-D2-24   (hex)		Liteon Technology Corporation
-48D224     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo
-				New Taipei City  Taipei  23585
-				TW
-
-20-68-9D   (hex)		Liteon Technology Corporation
-20689D     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo
-				New Taipei City  Taipei  23585
-				TW
-
-7C-BF-B1   (hex)		ARRIS Group, Inc.
-7CBFB1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-08-00-46   (hex)		Sony Corporation
-080046     (base 16)		Sony Corporation
-				Gotenyama Tec, 5-1-2 Kitashinagawa
-				Tokyo    141-0001
-				JP
-
-EC-F0-0E   (hex)		AboCom
-ECF00E     (base 16)		AboCom
-				1F , No. 21, Yanfa 2nd Rd., SBIP
-				Hsinchu City  300    886
-				TW
-
-00-E0-98   (hex)		AboCom
-00E098     (base 16)		AboCom
-				12F-3, NO. 333, SEC. 1
-				HSIN-CHU    12345
-				TW
-
-74-DA-EA   (hex)		Texas Instruments
-74DAEA     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-94-88-15   (hex)		Infinique Worldwide Inc
-948815     (base 16)		Infinique Worldwide Inc
-				513, 4185 Shipp Drive
-				Mississauga  Ontario  L4Z2Y8
-				CA
-
-D0-E4-4A   (hex)		Murata Manufacturing Co., Ltd.
-D0E44A     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-38-4F-F0   (hex)		AzureWave Technology Inc.
-384FF0     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd
-				. New Taipei City  Taiwan  231
-				TW
-
-E8-74-E6   (hex)		ADB Broadband Italia
-E874E6     (base 16)		ADB Broadband Italia
-				VIALE SARCA 336
-				MILANO    20126
-				IT
-
-00-20-E0   (hex)		Actiontec Electronics, Inc
-0020E0     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-26-62   (hex)		Actiontec Electronics, Inc
-002662     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-25-53   (hex)		ADB Broadband Italia
-002553     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-00-19-3E   (hex)		ADB Broadband Italia
-00193E     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-00-08-27   (hex)		ADB Broadband Italia
-000827     (base 16)		ADB Broadband Italia
-				Viale Sarca 222
-				pisacataway  Milano  20126
-				IT
-
-74-2F-68   (hex)		AzureWave Technology Inc.
-742F68     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd., Xindian
-				Taipei    231
-				TW
-
-4C-14-A3   (hex)		TCL Technoly Electronics (Huizhou) Co., Ltd.
-4C14A3     (base 16)		TCL Technoly Electronics (Huizhou) Co., Ltd.
-				19th Zhongkai Hi-tech Development Zone
-				Huizhou  Guangdong  516006
-				CN
-
-4C-B0-E8   (hex)		Beijing RongZhi xinghua technology co., LTD
-4CB0E8     (base 16)		Beijing RongZhi xinghua technology co., LTD
-				Beijing haidian district zhongguancun east road No. 18 smartfortune international building, room 909
-				beijing  beijing  100000
-				CN
-
-D8-87-D5   (hex)		Leadcore Technology CO.,LTD
-D887D5     (base 16)		Leadcore Technology CO.,LTD
-				1258 Mingyue Road,Shanghai.China
-				shanghai  shanghai  201206
-				CN
-
-00-F2-8B   (hex)		Cisco Systems, Inc
-00F28B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-E6-AD   (hex)		Intel Corporate
-34E6AD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-08-11-96   (hex)		Intel Corporate
-081196     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-18-3D-A2   (hex)		Intel Corporate
-183DA2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-80-9B-20   (hex)		Intel Corporate
-809B20     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-23-14   (hex)		Intel Corporate
-002314     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-34-02-86   (hex)		Intel Corporate
-340286     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1C-BF   (hex)		Intel Corporate
-001CBF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-B4-B6-76   (hex)		Intel Corporate
-B4B676     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-3C-A9-F4   (hex)		Intel Corporate
-3CA9F4     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-B8-8A-60   (hex)		Intel Corporate
-B88A60     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-78-FF-57   (hex)		Intel Corporate
-78FF57     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-9C-4E-36   (hex)		Intel Corporate
-9C4E36     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-34-13-E8   (hex)		Intel Corporate
-3413E8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-27-10   (hex)		Intel Corporate
-002710     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-A4-8E-0A   (hex)		DeLaval International AB
-A48E0A     (base 16)		DeLaval International AB
-				Gustaf De Lavals väg 15
-				TUMBA    14721
-				SE
-
-AC-2B-6E   (hex)		Intel Corporate
-AC2B6E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-9C-35-83   (hex)		Nipro Diagnostics, Inc
-9C3583     (base 16)		Nipro Diagnostics, Inc
-				2400 N.W. 55th Court.
-				Ft. Lauderdale  FL  33309
-				US
-
-C0-61-18   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-C06118     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-B8-2A-72   (hex)		Dell Inc.
-B82A72     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-F8-E0-79   (hex)		Motorola Mobility LLC, a Lenovo Company
-F8E079     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				600 North US Highway 45
-				Libertyville  IL  60048
-				US
-
-CC-C3-EA   (hex)		Motorola Mobility LLC, a Lenovo Company
-CCC3EA     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				600 North US Highway 45
-				Libertyville  IL  60048
-				US
-
-40-78-6A   (hex)		Motorola Mobility LLC, a Lenovo Company
-40786A     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 Merchandise Mart Plaza, Suite 1800
-				Chicago  IL  60654
-				US
-
-00-19-D1   (hex)		Intel Corporate
-0019D1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-19-D2   (hex)		Intel Corporate
-0019D2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1B-21   (hex)		Intel Corporate
-001B21     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-18-FF-0F   (hex)		Intel Corporate
-18FF0F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-34-DE-1A   (hex)		Intel Corporate
-34DE1A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-E8-B1-FC   (hex)		Intel Corporate
-E8B1FC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-CC-3D-82   (hex)		Intel Corporate
-CC3D82     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1F-3C   (hex)		Intel Corporate
-001F3C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-23-15   (hex)		Intel Corporate
-002315     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-16-6F   (hex)		Intel Corporate
-00166F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-0A-8A   (hex)		Cisco Systems, Inc
-000A8A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-09   (hex)		Dell Inc.
-001D09     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-00-23-AE   (hex)		Dell Inc.
-0023AE     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock    78682
-				US
-
-BC-30-5B   (hex)		Dell Inc.
-BC305B     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock    78682
-				US
-
-38-86-02   (hex)		Flexoptix GmbH
-388602     (base 16)		Flexoptix GmbH
-				Muehltalstr. 153
-				Darmstadt    64297
-				DE
-
-40-65-A3   (hex)		Sagemcom Broadband SAS
-4065A3     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-D0-22-12   (hex)		IEEE Registration Authority
-D02212     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-10-07-23   (hex)		IEEE Registration Authority
-100723     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A4-4F-29   (hex)		IEEE Registration Authority
-A44F29     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-74-F8-DB   (hex)		IEEE Registration Authority
-74F8DB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A4-3B-FA   (hex)		IEEE Registration Authority
-A43BFA     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B8-CA-3A   (hex)		Dell Inc.
-B8CA3A     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-EC-F4-BB   (hex)		Dell Inc.
-ECF4BB     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-D4-BE-D9   (hex)		Dell Inc.
-D4BED9     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-19-4B   (hex)		Sagemcom Broadband SAS
-00194B     (base 16)		Sagemcom Broadband SAS
-				Le Ponnant de Paris
-				CEDEX  Paris  75512
-				FR
-
-00-1E-74   (hex)		Sagemcom Broadband SAS
-001E74     (base 16)		Sagemcom Broadband SAS
-				Le Ponnant de Paris
-				CEDEX  Paris  75512
-				FR
-
-38-3B-C8   (hex)		2Wire Inc
-383BC8     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose    95131
-				US
-
-60-FE-20   (hex)		2Wire Inc
-60FE20     (base 16)		2Wire Inc
-				1764 Automation ParkWay
-				San Jose  CA  95131
-				US
-
-00-24-56   (hex)		2Wire Inc
-002456     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-C0-83-0A   (hex)		2Wire Inc
-C0830A     (base 16)		2Wire Inc
-				1764 Automation Pkwy
-				San Jose  CA  95131
-				US
-
-00-18-3F   (hex)		2Wire Inc
-00183F     (base 16)		2Wire Inc
-				1704 Automation Parkway
-				San Jose  CA  94538
-				US
-
-00-0D-56   (hex)		Dell Inc.
-000D56     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-18-1E-78   (hex)		Sagemcom Broadband SAS
-181E78     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison  HAUTS DE SEINE  92848
-				FR
-
-00-37-B7   (hex)		Sagemcom Broadband SAS
-0037B7     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison  HAUTS DE SEINE  92848
-				FR
-
-00-54-BD   (hex)		Swelaser AB
-0054BD     (base 16)		Swelaser AB
-				Tullgårdsgatan 8
-				Stockholm    11668
-				SE
-
-00-1E-4C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-001E4C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-20-BB-76   (hex)		COL GIOVANNI PAOLO SpA
-20BB76     (base 16)		COL GIOVANNI PAOLO SpA
-				Via F.lli Ceirano n. 20
-				Moncalieri  TORINO  10024
-				IT
-
-3C-DD-89   (hex)		SOMO HOLDINGS & TECH. CO.,LTD.
-3CDD89     (base 16)		SOMO HOLDINGS & TECH. CO.,LTD.
-				6, Mujeonggonddan-Gil
-				Damyang-Gun  Jellanam-Do  57360
-				KR
-
-18-01-E3   (hex)		Bittium Wireless Ltd
-1801E3     (base 16)		Bittium Wireless Ltd
-				Tutkijantie 8
-				Oulu    50590
-				FI
-
-14-91-82   (hex)		Belkin International Inc.
-149182     (base 16)		Belkin International Inc.
-				12045 E. Waterfront Drive
-				Playa Vista  CA  90094
-				US
-
-18-62-2C   (hex)		Sagemcom Broadband SAS
-18622C     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-3C-81-D8   (hex)		Sagemcom Broadband SAS
-3C81D8     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-40-F2-01   (hex)		Sagemcom Broadband SAS
-40F201     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison  HAUTS DE SEINE  92848
-				FR
-
-D0-84-B0   (hex)		Sagemcom Broadband SAS
-D084B0     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison  HAUTS DE SEINE  92848
-				FR
-
-D8-54-3A   (hex)		Texas Instruments
-D8543A     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-64-9C-8E   (hex)		Texas Instruments
-649C8E     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-10-2E-AF   (hex)		Texas Instruments
-102EAF     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-7C-8E-E4   (hex)		Texas Instruments
-7C8EE4     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-B4-EE-D4   (hex)		Texas Instruments
-B4EED4     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-D0-37-61   (hex)		Texas Instruments
-D03761     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-C8-3E-99   (hex)		Texas Instruments
-C83E99     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-40-98-4E   (hex)		Texas Instruments
-40984E     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-EB   (hex)		Texas Instruments
-0017EB     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-E6   (hex)		Texas Instruments
-0017E6     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-C4-ED-BA   (hex)		Texas Instruments
-C4EDBA     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-18-32   (hex)		Texas Instruments
-001832     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-3C-2D-B7   (hex)		Texas Instruments
-3C2DB7     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-54-64-D9   (hex)		Sagemcom Broadband SAS
-5464D9     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-00-19-5B   (hex)		D-Link Corporation
-00195B     (base 16)		D-Link Corporation
-				NO.289, Sinhu 3rd Rd.,
-				Neihu District,  Taipei City  114
-				TW
-
-00-0F-3D   (hex)		D-Link Corporation
-000F3D     (base 16)		D-Link Corporation
-				No.8,Li-shing Seventh Road,Science-based Industrial Park,Hsimchu,
-				Hsimchu    300
-				TW
-
-24-DA-11   (hex)		NO NDA Inc
-24DA11     (base 16)		NO NDA Inc
-				828 Bryant St 
-				Palo Alto  IA  94301
-				US
-
-EC-22-80   (hex)		D-Link International
-EC2280     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,
-				SINGAPORE  Singapore  609917
-				SG
-
-9C-8E-99   (hex)		Hewlett Packard
-9C8E99     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-90-59-AF   (hex)		Texas Instruments
-9059AF     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-BC-6A-29   (hex)		Texas Instruments
-BC6A29     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-84-7E-40   (hex)		Texas Instruments
-847E40     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-35   (hex)		Intel Wireless Network Group
-001735     (base 16)		Intel Wireless Network Group
-				2111 NE 25th Ave
-				Hillsboro  OR  97124
-				US
-
-74-AC-5F   (hex)		Qiku Internet Network Scientific (Shenzhen) Co., Ltd.
-74AC5F     (base 16)		Qiku Internet Network Scientific (Shenzhen) Co., Ltd.
-				Cyber Harbor, 2nd Mengxi Road, Hi-Tech Industrial Park (North), NanShan District
-				ShenZhen  GuangDong  518000
-				CN
-
-38-CA-DA   (hex)		Apple, Inc.
-38CADA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-B3-3F   (hex)		Shenzhen TINNO Mobile Technology Corp.
-D0B33F     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				4/F.,H-3 Building,OCT Eastern lndustrial Park. NO.1 XiangShan East Road.,
-				GUANGDONG  SHENZHEN  518053
-				CN
-
-BC-D1-D3   (hex)		Shenzhen TINNO Mobile Technology Corp.
-BCD1D3     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				4/F.,H-3 Building,OCT Eastern lndustrial Park.
-				Nanshan, Shenzhen  GUANGDONG  518053
-				CN
-
-D8-3C-69   (hex)		Shenzhen TINNO Mobile Technology Corp.
-D83C69     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				4/F.,H-3 Building,OCT Eastern lndustrial Park. NO.1 XiangShan East Road
-				SHENZHEN  GUANGDONG  518053
-				CN
-
-F4-F5-D8   (hex)		Google, Inc.
-F4F5D8     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-8C-57-9B   (hex)		Wistron Neweb Corporation
-8C579B     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-00-59-AC   (hex)		KPN. B.V.
-0059AC     (base 16)		KPN. B.V.
-				Maanplein 55
-				Den Haag  Zuid holland  2516 CK
-				NL
-
-40-D8-55   (hex)		IEEE Registration Authority
-40D855     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-34-AB-37   (hex)		Apple, Inc.
-34AB37     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-00-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2400BA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-24-DF-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24DF6A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-78-8B-77   (hex)		Standar Telecom
-788B77     (base 16)		Standar Telecom
-				Sadovnicheskaya 44 s.4
-				Moscow    115035
-				RU
-
-B0-C0-90   (hex)		Chicony Electronics Co., Ltd.
-B0C090     (base 16)		Chicony Electronics Co., Ltd.
-				No.25, Wugong 6th Rd., Wugu Dist.,
-				New Taipei City 248,  TAIWAN, REPUBLIC OF CHINA  248
-				TW
-
-90-7F-61   (hex)		Chicony Electronics Co., Ltd.
-907F61     (base 16)		Chicony Electronics Co., Ltd.
-				No.25, Wu-Gong 6th Rd., Wu Ku Industrial Park,
-				New Taipei City,    248
-				TW
-
-0C-05-35   (hex)		Juniper Systems
-0C0535     (base 16)		Juniper Systems
-				1132 W. 1700 N.
-				Logan  UT  84321
-				US
-
-BC-83-A7   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-BC83A7     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit A 13-16/F,Skyworth Bldg., Gaoxin Ave.1.S.,Nanshan District
-				Shenzhen  GuangDong   518057
-				CN
-
-BC-EC-23   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-BCEC23     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit A13-16/F,Skyworth Bldg., Gaoxin Ave.1.S.,Nanshan District,Shenzhen,China
-				ShenZhen  GuangDong  518057
-				CN
-
-18-AF-61   (hex)		Apple, Inc.
-18AF61     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-F9-38   (hex)		Apple, Inc.
-5CF938     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-90-69   (hex)		Juniper Networks
-009069     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-64-64-9B   (hex)		Juniper Networks
-64649B     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-F0-1C-2D   (hex)		Juniper Networks
-F01C2D     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-30-7C-5E   (hex)		Juniper Networks
-307C5E     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-AC-06-C7   (hex)		ServerNet S.r.l.
-AC06C7     (base 16)		ServerNet S.r.l.
-				Località Padriciano 99
-				Trieste  Trieste  34149
-				IT
-
-E8-3E-FC   (hex)		ARRIS Group, Inc.
-E83EFC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-90-0D-CB   (hex)		ARRIS Group, Inc.
-900DCB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-CD   (hex)		ARRIS Group, Inc.
-001DCD     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-D2   (hex)		ARRIS Group, Inc.
-001DD2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-8C-09-F4   (hex)		ARRIS Group, Inc.
-8C09F4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-88-57-EE   (hex)		BUFFALO.INC
-8857EE     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-10-1F-74   (hex)		Hewlett Packard
-101F74     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-9C-02   (hex)		Hewlett Packard
-009C02     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-F4-CE-46   (hex)		Hewlett Packard
-F4CE46     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-DC-FB-02   (hex)		BUFFALO.INC
-DCFB02     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg.,30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref  460-8315
-				JP
-
-00-16-35   (hex)		Hewlett Packard
-001635     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-08-C7   (hex)		Hewlett Packard
-0008C7     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-10-E3   (hex)		Hewlett Packard
-0010E3     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-08-83   (hex)		Hewlett Packard
-000883     (base 16)		Hewlett Packard
-				MAIL STOP 42LE
-				CUPERTINO  CA  95014
-				US
-
-A0-2B-B8   (hex)		Hewlett Packard
-A02BB8     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-19-BB   (hex)		Hewlett Packard
-0019BB     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-1F-29   (hex)		Hewlett Packard
-001F29     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-21-5A   (hex)		Hewlett Packard
-00215A     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-23-7D   (hex)		Hewlett Packard
-00237D     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-E8-ED-05   (hex)		ARRIS Group, Inc.
-E8ED05     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-78-96-84   (hex)		ARRIS Group, Inc.
-789684     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-CC-65-AD   (hex)		ARRIS Group, Inc.
-CC65AD     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-26-55   (hex)		Hewlett Packard
-002655     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-0D-9D   (hex)		Hewlett Packard
-000D9D     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-15-60   (hex)		Hewlett Packard
-001560     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-20-7B   (hex)		Intel Corporation
-00207B     (base 16)		Intel Corporation
-				2111 NE 25th Avenue
-				Hillsboro  OR  97124
-				US
-
-00-11-75   (hex)		Intel Corporation
-001175     (base 16)		Intel Corporation
-				 5200 NE ELAM YOUNG PARKWAY
-				HIllsboro  OR  97124
-				US
-
-78-0C-B8   (hex)		Intel Corporate
-780CB8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-18-5E-0F   (hex)		Intel Corporate
-185E0F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-2C-81-58   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-2C8158     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-80-02-DF   (hex)		ORA Inc.
-8002DF     (base 16)		ORA Inc.
-				No.1 Anjialou, Xiaoliangmaqiao Ave., Chaoyang Dist.
-				BeiJing    100125
-				CN
-
-00-30-6E   (hex)		Hewlett Packard
-00306E     (base 16)		Hewlett Packard
-				ENTERPRISE SYSTEMS TECH.CENTER
-				CUPERTINO  CA  95014
-				US
-
-3C-4A-92   (hex)		Hewlett Packard
-3C4A92     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-7C-7D-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C7D3D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-44-82-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4482E5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-23-4E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-00234E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-2C-23-3A   (hex)		Hewlett Packard
-2C233A     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-0A-57   (hex)		Hewlett Packard
-000A57     (base 16)		Hewlett Packard
-				10955 Tantau Avenue
-				Cupertino  CA  95014
-				US
-
-00-01-E7   (hex)		Hewlett Packard
-0001E7     (base 16)		Hewlett Packard
-				11000 Wolfe Road, Mailstop 42LE
-				Cupertino  CA  95014
-				US
-
-00-01-E6   (hex)		Hewlett Packard
-0001E6     (base 16)		Hewlett Packard
-				11000 Wolfe Road, Mailstop 42LE
-				Cupertino  CA  95014
-				US
-
-00-23-76   (hex)		HTC Corporation
-002376     (base 16)		HTC Corporation
-				No.23 Xinghua Road
-				Taoyuan County    330
-				TW
-
-38-E7-D8   (hex)		HTC Corporation
-38E7D8     (base 16)		HTC Corporation
-				No.23 Xinghua Road
-				Taoyuan County    330
-				TW
-
-18-87-96   (hex)		HTC Corporation
-188796     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-B4-CE-F6   (hex)		HTC Corporation
-B4CEF6     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-8C-DC-D4   (hex)		Hewlett Packard
-8CDCD4     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-D4-C9-EF   (hex)		Hewlett Packard
-D4C9EF     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-FC-15-B4   (hex)		Hewlett Packard
-FC15B4     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-3C-A8-2A   (hex)		Hewlett Packard
-3CA82A     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-EC-5F-23   (hex)		Qinghai Kimascend Electronics Technology Co. Ltd.
-EC5F23     (base 16)		Qinghai Kimascend Electronics Technology Co. Ltd.
-				2F,Building 6,J6 Science&Tech Park, No.6 Jiangjun Rd., Jiangning District
-				Nanjing  Jiangsu  211100
-				CN
-
-04-7D-50   (hex)		Shenzhen Kang Ying Technology Co.Ltd.
-047D50     (base 16)		Shenzhen Kang Ying Technology Co.Ltd.
-				Units 608,Saiba Electronic tower,NO.6, Langshan 2 Rd., Hi-Tech Industrial Park North , Nanshan, Shenzhen City
-				Shenzhen  Guangdong  518057
-				CN
-
-54-EF-FE   (hex)		Fullpower Technologies, Inc.
-54EFFE     (base 16)		Fullpower Technologies, Inc.
-				1200 Pacific Avenue
-				Santa Cruz  CA  95060
-				US
-
-94-09-37   (hex)		HUMAX Co., Ltd.
-940937     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bundang-gu,
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-E8-4D-D0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E84DD0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-45-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C45BA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-90-6F   (hex)		Shenzhen Tencent Computer System Co., Ltd.
-20906F     (base 16)		Shenzhen Tencent Computer System Co., Ltd.
-				5-10 Building High-tech Zone, Nanshan District, 
-				Shenzhen  Guangdong Province  518057
-				CN
-
-6C-E3-B6   (hex)		Nera Telecommunications Ltd.
-6CE3B6     (base 16)		Nera Telecommunications Ltd.
-				109 Defu Lane 10
-				Singapore  Singapore  539225
-				SG
-
-DC-D3-21   (hex)		HUMAX Co., Ltd.
-DCD321     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 11-4, Sunae-dong, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-825
-				KR
-
-6C-72-E7   (hex)		Apple, Inc.
-6C72E7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-1B-B2   (hex)		Apple, Inc.
-741BB2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-E8-73   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-6CE873     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park
-				Shenzhen  Guangdong  518057
-				CN
-
-C4-6E-1F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-C46E1F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-50-FA-84   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-50FA84     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-44-B3-2D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-44B32D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-CC-44-63   (hex)		Apple, Inc.
-CC4463     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-25-93   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-882593     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-00-1F-E1   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-001FE1     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-D8-5D-4C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D85D4C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 7, Second Part, Honghualing Industrial Zone
-				Shenzhen  Guangdong  518000
-				CN
-
-A0-F3-C1   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-A0F3C1     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan
-				shenzhen  guangdong Province  518057
-				CN
-
-00-1D-0F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-001D0F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				3/F, Bldg. R1-B,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-23-CD   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-0023CD     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				South Building, No.5 Keyuan Road, Central Zone,
-				Shenzhen  Guangdong  518000
-				CN
-
-90-48-9A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-90489A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-71-CC   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-0071CC     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-B0-5B-67   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B05B67     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-A2-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CCA223     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-6A-89   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-786A89     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-38-46-08   (hex)		zte corporation
-384608     (base 16)		zte corporation
-				12/F,ZTE R&D Building,Kejinan Road,
-				Shenzhen  Guangdong  518057
-				CN
-
-4C-AC-0A   (hex)		zte corporation
-4CAC0A     (base 16)		zte corporation
-				12/F,ZTE R&D Building,Kejinan Road,
-				Shenzhen  Guangdong  518057
-				CN
-
-B4-B3-62   (hex)		zte corporation
-B4B362     (base 16)		zte corporation
-				12/F,ZTE R&D Building,Kejinan Road,
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-75-D5   (hex)		zte corporation
-B075D5     (base 16)		zte corporation
-				12/F,ZTE R&D Building,Kejinan Road,
-				Shenzhen  Guangdong  518057
-				CN
-
-D0-15-4A   (hex)		zte corporation
-D0154A     (base 16)		zte corporation
-				12/F.,zte R&D building,kejinan Road,
-				shenzhen  guangdong  518057
-				CN
-
-00-26-ED   (hex)		zte corporation
-0026ED     (base 16)		zte corporation
-				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
-				Shenzhen  GUANGDONG  518057
-				CN
-
-00-60-57   (hex)		Murata Manufacturing Co., Ltd.
-006057     (base 16)		Murata Manufacturing Co., Ltd.
-				1-18-1 HAKUSAN MIDORI-KU
-				YOKOHAMA  226    12345
-				JP
-
-14-B9-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14B968     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-F9-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CF96A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-3E-8E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-083E8E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-22-93   (hex)		zte corporation
-002293     (base 16)		zte corporation
-				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
-				Shenzhen  GUANGDONG  518057
-				CN
-
-10-A5-D0   (hex)		Murata Manufacturing Co., Ltd.
-10A5D0     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1,Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-50-A7-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-50A72B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-D6-BD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0CD6BD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-F8-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-00F81C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-7A-4C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-087A4C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
-				Shenzhen  GuangDong  518057
-				CN
-
-AC-E2-15   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ACE215     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-34-6B-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-346BD3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-70-72-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-70723C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-AC-E8-7B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ACE87B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-F8-3D-FF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F83DFF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-28-5F-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-285FDB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-40-4D-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-404D8E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-4C-54-99   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4C5499     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-F4-9F-F3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F49FF3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-09-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-240995     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-DB-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-84DBAC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-77-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94772B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-40-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D440F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-02-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04021F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-CD-AE   (hex)		Avaya Inc
-10CDAE     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-04-8A-15   (hex)		Avaya Inc
-048A15     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-B4-B0-17   (hex)		Avaya Inc
-B4B017     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-90-FB-5B   (hex)		Avaya Inc
-90FB5B     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-C8-F4-06   (hex)		Avaya Inc
-C8F406     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-70-52-C5   (hex)		Avaya Inc
-7052C5     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-F8-15-47   (hex)		Avaya Inc
-F81547     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-50-61-84   (hex)		Avaya Inc
-506184     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-18-59-36   (hex)		Xiaomi Communications Co Ltd
-185936     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-20-A7-83   (hex)		miControl GmbH
-20A783     (base 16)		miControl GmbH
-				Blankenfelder Chaussee 1
-				Großbeeren  Brandenburg  15831
-				DE
-
-20-0B-C7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-200BC7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen  Guangdong  518129
-				CN
-
-F8-4A-BF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F84ABF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen  Guangdong  518129
-				CN
-
-78-D7-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-78D752     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-10-47-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-104780     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-54-89-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-548998     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-00-04-0D   (hex)		Avaya Inc
-00040D     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-70-A8-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-70A8E3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen    518129
-				CN
-
-F8-E8-11   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F8E811     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen  Guangdong  518129
-				CN
-
-F8-A4-5F   (hex)		Xiaomi Communications Co Ltd
-F8A45F     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-64-09-80   (hex)		Xiaomi Communications Co Ltd
-640980     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-94-04-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94049C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				Shenzhen  Guangdong  518129
-				CN
-
-68-8F-84   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-688F84     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				SHENZHEN  GUANGDONG  518129
-				CN
-
-30-D1-7E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-30D17E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-00-50-BD   (hex)		Cisco Systems, Inc
-0050BD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-90-6F   (hex)		Cisco Systems, Inc
-00906F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-D6-EA   (hex)		Texas Instruments
-74D6EA     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-20-91-48   (hex)		Texas Instruments
-209148     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-54-4A-16   (hex)		Texas Instruments
-544A16     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-E0-2F-6D   (hex)		Cisco Systems, Inc
-E02F6D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-58-97-1E   (hex)		Cisco Systems, Inc
-58971E     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-B4-E9-B0   (hex)		Cisco Systems, Inc
-B4E9B0     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-08-32   (hex)		Cisco Systems, Inc
-000832     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-18-9C-5D   (hex)		Cisco Systems, Inc
-189C5D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-5C-A4-8A   (hex)		Cisco Systems, Inc
-5CA48A     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-1C-1D-86   (hex)		Cisco Systems, Inc
-1C1D86     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-60-73-5C   (hex)		Cisco Systems, Inc
-60735C     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-34-A8-4E   (hex)		Cisco Systems, Inc
-34A84E     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-54-78-1A   (hex)		Cisco Systems, Inc
-54781A     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-60-5C   (hex)		Cisco Systems, Inc
-00605C     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-06-C1   (hex)		Cisco Systems, Inc
-0006C1     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-E0-14   (hex)		Cisco Systems, Inc
-00E014     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-DC-A5-F4   (hex)		Cisco Systems, Inc
-DCA5F4     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-50-17-FF   (hex)		Cisco Systems, Inc
-5017FF     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-70-10-5C   (hex)		Cisco Systems, Inc
-70105C     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-10-F3-11   (hex)		Cisco Systems, Inc
-10F311     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-50-F0   (hex)		Cisco Systems, Inc
-0050F0     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-50-14   (hex)		Cisco Systems, Inc
-005014     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-90-F2   (hex)		Cisco Systems, Inc
-0090F2     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-0C-E0-E4   (hex)		PLANTRONICS, INC.
-0CE0E4     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-74-A2-E6   (hex)		Cisco Systems, Inc
-74A2E6     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-BC-F1-F2   (hex)		Cisco Systems, Inc
-BCF1F2     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-C8-00-84   (hex)		Cisco Systems, Inc
-C80084     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-40-A6-E8   (hex)		Cisco Systems, Inc
-40A6E8     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-30-85-A9   (hex)		ASUSTek COMPUTER INC.
-3085A9     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou
-				Taipei    112
-				US
-
-B8-38-61   (hex)		Cisco Systems, Inc
-B83861     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-58-0A-20   (hex)		Cisco Systems, Inc
-580A20     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-2C-3E-CF   (hex)		Cisco Systems, Inc
-2C3ECF     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-B0-59-47   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
-B05947     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
-				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
-				Shenzhen  Guangdong  518057
-				CN
-
-34-62-88   (hex)		Cisco Systems, Inc
-346288     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-CC-D8-C1   (hex)		Cisco Systems, Inc
-CCD8C1     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-7C-0E-CE   (hex)		Cisco Systems, Inc
-7C0ECE     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-A0-EC-F9   (hex)		Cisco Systems, Inc
-A0ECF9     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-50-87-89   (hex)		Cisco Systems, Inc
-508789     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-38-1C-1A   (hex)		Cisco Systems, Inc
-381C1A     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-BC-67-1C   (hex)		Cisco Systems, Inc
-BC671C     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-19-47   (hex)		Cisco SPVTG
-001947     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-00-18-39   (hex)		Cisco-Linksys, LLC
-001839     (base 16)		Cisco-Linksys, LLC
-				121 Theory Dr.
-				Irvine  CA  92612
-				US
-
-00-22-15   (hex)		ASUSTek COMPUTER INC.
-002215     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,
-				Taipei    112
-				TW
-
-E0-CB-4E   (hex)		ASUSTek COMPUTER INC.
-E0CB4E     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
-				Taipei  Taiwan  112
-				TW
-
-54-7C-69   (hex)		Cisco Systems, Inc
-547C69     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-17-31   (hex)		ASUSTek COMPUTER INC.
-001731     (base 16)		ASUSTek COMPUTER INC.
-				No.5 Shing Yeh Street,Kwei Shan Hsiang,Taoyuan
-				Taipei    333
-				TW
-
-DC-CE-C1   (hex)		Cisco Systems, Inc
-DCCEC1     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-9C-57-AD   (hex)		Cisco Systems, Inc
-9C57AD     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-60-FE-C5   (hex)		Apple, Inc.
-60FEC5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-25-E7   (hex)		Apple, Inc.
-E425E7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-92-6B   (hex)		Apple, Inc.
-BC926B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-1C-0C   (hex)		Apple, Inc.
-101C0C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-00-07   (hex)		Apple, Inc.
-080007     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-40-96   (hex)		Cisco Systems, Inc
-004096     (base 16)		Cisco Systems, Inc
-				170 W. Tasman Drive
-				San Jose  CA  95134
-				US
-
-30-F7-0D   (hex)		Cisco Systems, Inc
-30F70D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-E8-65-49   (hex)		Cisco Systems, Inc
-E86549     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-B0-7D-47   (hex)		Cisco Systems, Inc
-B07D47     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-38-ED-18   (hex)		Cisco Systems, Inc
-38ED18     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-38-20-56   (hex)		Cisco Systems, Inc
-382056     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-40-D3-2D   (hex)		Apple, Inc.
-40D32D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C4-2C-03   (hex)		Apple, Inc.
-C42C03     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-27-E4   (hex)		Apple, Inc.
-9027E4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-9A-DD   (hex)		Apple, Inc.
-109ADD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-1F-AA   (hex)		Apple, Inc.
-581FAA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-C6-63   (hex)		Apple, Inc.
-88C663     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1F-5B   (hex)		Apple, Inc.
-001F5B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-24-36   (hex)		Apple, Inc.
-002436     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-25-4B   (hex)		Apple, Inc.
-00254B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-16-CB   (hex)		Apple, Inc.
-0016CB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-17-F2   (hex)		Apple, Inc.
-0017F2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-6D-62   (hex)		Apple, Inc.
-7C6D62     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-C9-D0   (hex)		Apple, Inc.
-20C9D0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-96-7B   (hex)		Apple, Inc.
-68967B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-FC-FE   (hex)		Apple, Inc.
-84FCFE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-8B-7F   (hex)		Apple, Inc.
-E48B7F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-88-65   (hex)		Apple, Inc.
-008865     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-3B-AF   (hex)		Apple, Inc.
-BC3BAF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-E0-72   (hex)		Apple, Inc.
-3CE072     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-48-4C   (hex)		Apple, Inc.
-38484C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-67-06   (hex)		Apple, Inc.
-A46706     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-58-77   (hex)		Apple, Inc.
-8C5877     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-F0-5F   (hex)		Apple, Inc.
-7CF05F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-49-71   (hex)		Apple, Inc.
-804971     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-3E-6D   (hex)		Apple, Inc.
-6C3E6D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-67-78   (hex)		Apple, Inc.
-BC6778     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-D1-CB   (hex)		Apple, Inc.
-D8D1CB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-FA-D8   (hex)		Apple, Inc.
-A8FAD8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-17-C2   (hex)		Apple, Inc.
-B817C2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-11-BE   (hex)		Apple, Inc.
-7C11BE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-37-37   (hex)		Apple, Inc.
-283737     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-EA-D6   (hex)		Apple, Inc.
-50EAD6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-D6-BB   (hex)		Apple, Inc.
-98D6BB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-9E-FC   (hex)		Apple, Inc.
-189EFC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-CF-5C   (hex)		Apple, Inc.
-ACCF5C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-00-6E   (hex)		Apple, Inc.
-80006E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-8E-0C   (hex)		Apple, Inc.
-848E0C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-15-C2   (hex)		Apple, Inc.
-3C15C2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-70-9F   (hex)		Apple, Inc.
-6C709F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-F2-FB   (hex)		Apple, Inc.
-C0F2FB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-E3-14   (hex)		Apple, Inc.
-24E314     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-E6-50   (hex)		Apple, Inc.
-80E650     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-FD-61   (hex)		Apple, Inc.
-90FD61     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-70-45   (hex)		Apple, Inc.
-087045     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-88-08   (hex)		Apple, Inc.
-A88808     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-C3-61   (hex)		Apple, Inc.
-A4C361     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-F0-EE   (hex)		Apple, Inc.
-2CF0EE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-97-F3   (hex)		Apple, Inc.
-5C97F3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-F4-6F   (hex)		Apple, Inc.
-D4F46F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-76-BA   (hex)		Apple, Inc.
-6476BA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-E2-FD   (hex)		Apple, Inc.
-34E2FD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-48-9A   (hex)		Apple, Inc.
-04489A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-F6-1C   (hex)		Apple, Inc.
-F0F61C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-29-37   (hex)		Apple, Inc.
-8C2937     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-9F-BA   (hex)		Apple, Inc.
-B09FBA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-4D-E9   (hex)		Apple, Inc.
-0C4DE9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-F5-C6   (hex)		Apple, Inc.
-E0F5C6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-ED-CD   (hex)		Apple, Inc.
-A0EDCD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-F2-49   (hex)		Hitron Technologies. Inc
-F0F249     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-28-57-BE   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-2857BE     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-5C-F5-DA   (hex)		Apple, Inc.
-5CF5DA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-EE-69   (hex)		Apple, Inc.
-18EE69     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-9A-BE   (hex)		Apple, Inc.
-649ABE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-99-BF   (hex)		Apple, Inc.
-F099BF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-E9-6A   (hex)		Apple, Inc.
-94E96A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-29-3A   (hex)		Apple, Inc.
-AC293A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-FC-01   (hex)		Apple, Inc.
-9CFC01     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-35-EB   (hex)		Apple, Inc.
-9C35EB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-43-7C   (hex)		Apple, Inc.
-48437C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-A3-95   (hex)		Apple, Inc.
-34A395     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-7E-61   (hex)		Apple, Inc.
-787E61     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-F8-1D   (hex)		Apple, Inc.
-60F81D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-C9-86   (hex)		Apple, Inc.
-38C986     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-33-11   (hex)		Apple, Inc.
-D03311     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-7A-55   (hex)		Apple, Inc.
-507A55     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-C2-C6   (hex)		Shanghai Airm2m Communication Technology Co., Ltd
-C8C2C6     (base 16)		Shanghai Airm2m Communication Technology Co., Ltd
-				Rm.816,Building C,No.668,East Beijing Road,Huangpu District,Shanghai,China
-				Shang hai  Shang hai  200001
-				CN
-
-78-9C-85   (hex)		August Home, Inc.
-789C85     (base 16)		August Home, Inc.
-				657 Bryant Street
-				San Francisco  California  94107
-				US
-
-74-D7-CA   (hex)		Panasonic Corporation Automotive
-74D7CA     (base 16)		Panasonic Corporation Automotive
-				5652
-				Matsumoto City  Nagano  399-8730
-				JP
-
-58-82-A8   (hex)		Microsoft
-5882A8     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-58-68-5D   (hex)		Tempo Australia Pty Ltd
-58685D     (base 16)		Tempo Australia Pty Ltd
-				8/14 Rodborough Rd
-				Frenchs Forest  NSW  2086
-				AU
-
-54-4B-8C   (hex)		Juniper Networks
-544B8C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-DC-FE-07   (hex)		PEGATRON CORPORATION
-DCFE07     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-70-79-38   (hex)		Wuxi Zhanrui Electronic Technology Co.,LTD
-707938     (base 16)		Wuxi Zhanrui Electronic Technology Co.,LTD
-				Wuxi,Taihu West Road No.1188 Runhua International Building 1604
-				Wuxi  Jiangsu  214072
-				CN
-
-24-31-84   (hex)		SHARP Corporation
-243184     (base 16)		SHARP Corporation
-				22-22,Nagaike-Cho
-				Osaka-City  Osaka-Prefecture  545-8522
-				JP
-
-58-2B-DB   (hex)		Pax AB
-582BDB     (base 16)		Pax AB
-				Box 72
-				Hälleforsnäs    64806
-				SE
-
-E0-36-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E03676     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-38-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC388F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-3E-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D03E5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-9E-41   (hex)		G24 Power Limited
-C49E41     (base 16)		G24 Power Limited
-				South Lake Drive
-				Newport  Gwent  NP10 8AS
-				GB
-
-B8-13-E9   (hex)		Trace Live Network
-B813E9     (base 16)		Trace Live Network
-				#200, 5970 Centre St SE
-				Calgary  Alberta  T2H0C1
-				CA
-
-80-B7-09   (hex)		Viptela, Inc
-80B709     (base 16)		Viptela, Inc
-				1740 Technology Drive, Ste#500
-				San Jose  California  95110
-				US
-
-F0-0D-5C   (hex)		JinQianMao  Technology Co.,Ltd.
-F00D5C     (base 16)		JinQianMao  Technology Co.,Ltd.
-				58#,Jiangbin Road,Taijiang District
-				Fuzhou  Fujian  350009
-				CN
-
-54-BE-53   (hex)		zte corporation
-54BE53     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-28-0E-8B   (hex)		Beijing Spirit Technology Development Co., Ltd.
-280E8B     (base 16)		Beijing Spirit Technology Development Co., Ltd.
-				No. 26 Ave. 4 Chuangye Middle Road
-				  Beijing  100085
-				CN
-
-F4-4D-30   (hex)		Elitegroup Computer Systems Co.,Ltd.
-F44D30     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No.239,Sec.2,Ti Ding Blvd.,
-				Taipei  Taipei  
-				TW
-
-0C-86-10   (hex)		Juniper Networks
-0C8610     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-38-D4-0B   (hex)		Samsung Electronics Co.,Ltd
-38D40B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E8-3A-12   (hex)		Samsung Electronics Co.,Ltd
-E83A12     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-24-DA-9B   (hex)		Motorola Mobility LLC, a Lenovo Company
-24DA9B     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-A4-DC-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4DCBE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-B8-70   (hex)		Beijing Heweinet Technology Co.,Ltd.
-ECB870     (base 16)		Beijing Heweinet Technology Co.,Ltd.
-				1514 Room,15F,No.2 Building
-				Haidian District  Beijing  100085
-				CN
-
-94-BB-AE   (hex)		Husqvarna AB
-94BBAE     (base 16)		Husqvarna AB
-				Drottninggatan 2
-				Huskvarna  Sweden  56131
-				SE
-
-D4-0A-A9   (hex)		ARRIS Group, Inc.
-D40AA9     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-20-3D-66   (hex)		ARRIS Group, Inc.
-203D66     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D4-94-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D494E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-78-F0   (hex)		Beijing HuaqinWorld Technology Co.,Ltd.
-B078F0     (base 16)		Beijing HuaqinWorld Technology Co.,Ltd.
-				Beijing City, Chaoyang District Wangjing Garden Department Youle A District No. 3 building 308 room
-				Bejjing  Bejjing  100102
-				CN
-
-20-9B-CD   (hex)		Apple, Inc.
-209BCD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-95-E3   (hex)		SHANGHAI SIMCOM LIMITED
-3095E3     (base 16)		SHANGHAI SIMCOM LIMITED
-				Building A,SIM Technology Building,No.633, Jinzhong Road,Changning District , Shanghai, P.R.China
-				Shanghai  /  200355
-				CN
-
-80-65-6D   (hex)		Samsung Electronics Co.,Ltd
-80656D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-F1-36   (hex)		Samsung Electronics Co.,Ltd
-FCF136     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-B8-86-87   (hex)		Liteon Technology Corporation
-B88687     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-18-89-5B   (hex)		Samsung Electronics Co.,Ltd
-18895B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-58-49-25   (hex)		E3 Enterprise
-584925     (base 16)		E3 Enterprise
-				32F, Shinjuku Nomura Building
-				  Tokyo  163-0532
-				JP
-
-94-F2-78   (hex)		Elma Electronic
-94F278     (base 16)		Elma Electronic
-				44350 S. Grimmer Blvd
-				Fremont  CA  94538
-				US
-
-28-37-13   (hex)		Shenzhen 3Nod Digital Technology Co., Ltd.
-283713     (base 16)		Shenzhen 3Nod Digital Technology Co., Ltd.
-				Building D, No.8 Langhui Road, Tangxiayong Community, Songgang Street, Baoan District, Shenzhen City, Guangdong Province, P.R. China
-				Shenzhen  Guangdong  518105
-				CN
-
-08-94-EF   (hex)		Wistron Infocomm (Zhongshan) Corporation
-0894EF     (base 16)		Wistron Infocomm (Zhongshan) Corporation
-				No.38,East Keji Road,Zhongshan Torch Development Zone,Zhongshan City,Guangdong,China
-				Zhongshan  Guangdong  528437
-				CN
-
-E0-31-9E   (hex)		Valve Corporation
-E0319E     (base 16)		Valve Corporation
-				10900 NE 4th ST
-				Bellevue  Washington  98004
-				US
-
-3C-5C-C3   (hex)		Shenzhen First Blue Chip Technology Ltd
-3C5CC3     (base 16)		Shenzhen First Blue Chip Technology Ltd
-				3Nod Smart Building,11Floor,No.3012,Binhai Avenue, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-C4-9F-F3   (hex)		Mciao Technologies, Inc.
-C49FF3     (base 16)		Mciao Technologies, Inc.
-				Room304, Building 1, No.288 Qiuyi Rd., Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-78-8E-33   (hex)		Jiangsu SEUIC Technology Co.,Ltd
-788E33     (base 16)		Jiangsu SEUIC Technology Co.,Ltd
-				NO23.Wenzhu Road.Yuhuatai Distrct.
-				Nanjing  Jiangsu Province  210012
-				CN
-
-EC-EE-D8   (hex)		ZTLX Network Technology Co.,Ltd
-ECEED8     (base 16)		ZTLX Network Technology Co.,Ltd
-				Unit 703,No 77,CuShaHuan
-				ZhuHai  GuangDong  519000
-				CN
-
-80-EB-77   (hex)		Wistron Corporation
-80EB77     (base 16)		Wistron Corporation
-				No. 158, SingShan Rd., Neihu, Taipei 11469, Taiwan, R.O.C.
-				Neihu  Taipei  11469
-				
-
-48-39-74   (hex)		Proware Technologies Co., Ltd.
-483974     (base 16)		Proware Technologies Co., Ltd.
-				2nd F1 East Wing,South Section,Factory Building 24,Science&Technology Park, Shennan Rd, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-30-FF-F6   (hex)		HangZhou KuoHeng Technology Co.,ltd
-30FFF6     (base 16)		HangZhou KuoHeng Technology Co.,ltd
-				No.368,Wangjiali,Chang'ancun Industrial Park,Wenyan Town, Xiaoshan District, Hangzhou, CHina
-				HangZhou  ZheJiang  311258
-				CN
-
-4C-C6-81   (hex)		Shenzhen Aisat Electronic Co., Ltd.
-4CC681     (base 16)		Shenzhen Aisat Electronic Co., Ltd.
-				Golden Building 419#, Design Park,
-				Shenzhen  Guangdong  518056
-				CN
-
-48-E2-44   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-48E244     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-7C-AB-25   (hex)		MESMO TECHNOLOGY INC.
-7CAB25     (base 16)		MESMO TECHNOLOGY INC.
-				3F., No.181, ZHOUZI ST., NEIHU DIST.,
-				TAIPEI  TAIPEI  11493
-				TW
-
-B0-41-1D   (hex)		ITTIM Technologies
-B0411D     (base 16)		ITTIM Technologies
-				B1606, No.6, Zhongguancun South Street,
-				Beijing  Beijing  100086
-				CN
-
-F8-BF-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F8BF09     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-B2-5C   (hex)		Acacia Communications
-7CB25C     (base 16)		Acacia Communications
-				3 Clock Tower Place
-				Maynard  MA  01754
-				US
-
-DC-DB-70   (hex)		Tonfunk Systementwicklung und Service GmbH
-DCDB70     (base 16)		Tonfunk Systementwicklung und Service GmbH
-				Anger20
-				Falkenstein / Harz OT Ermsleben  Sachsen-Anhalt  06463
-				DE
-
-80-0B-51   (hex)		Chengdu XGimi Technology Co.,Ltd
-800B51     (base 16)		Chengdu XGimi Technology Co.,Ltd
-				5F Building A7,Tianfu Software Park,Tianfu
-				Chengdu  Sichuan  610041
-				CN
-
-F8-0D-60   (hex)		CANON INC.
-F80D60     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-F0-18-2B   (hex)		LG Chem
-F0182B     (base 16)		LG Chem
-				128, Yeoui-daero, Yeongdeungpo-gu,
-				Seoul  Seoul  150-721
-				KR
-
-34-81-F4   (hex)		SST Taiwan Ltd.
-3481F4     (base 16)		SST Taiwan Ltd.
-				5F, No. 5, Industry E Rd. VII,
-				Hsin Chu,  Taiwan  30077
-				TW
-
-7C-A2-37   (hex)		King Slide Technology CO., LTD.
-7CA237     (base 16)		King Slide Technology CO., LTD.
-				No. 6, Luke 9th Rd.,
-				Kaohsiung  Taiwan  82151
-				TW
-
-D4-04-CD   (hex)		ARRIS Group, Inc.
-D404CD     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-74-73-36   (hex)		MICRODIGTAL Inc
-747336     (base 16)		MICRODIGTAL Inc
-				10F, Ace High-End Tower 9th,
-				  Seoul  153-803
-				KR
-
-38-2B-78   (hex)		ECO PLUGS ENTERPRISE CO., LTD
-382B78     (base 16)		ECO PLUGS ENTERPRISE CO., LTD
-				10F,-6, No.117, Sec.2, Zhongbei Rd., Zhongli Dist.,
-				Taoyuan  Taiwan  32097
-				TW
-
-A4-7B-2C   (hex)		Nokia
-A47B2C     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-24-E5-AA   (hex)		Philips Oral Healthcare, Inc.
-24E5AA     (base 16)		Philips Oral Healthcare, Inc.
-				22100 Bothell Everett Hwy
-				Bothell  WA  98021
-				US
-
-78-BD-BC   (hex)		Samsung Electronics Co.,Ltd
-78BDBC     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-34-9B-5B   (hex)		Maquet GmbH
-349B5B     (base 16)		Maquet GmbH
-				Kehler Strasse 31
-				Rastatt  Baden-Württemberg  76437
-				DE
-
-88-41-57   (hex)		Shenzhen Atsmart Technology Co.,Ltd.
-884157     (base 16)		Shenzhen Atsmart Technology Co.,Ltd.
-				East 3F ,2 Building, Meijing Industry Park, Qiaoxiang Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-D8-9A-34   (hex)		Beijing SHENQI Technology Co., Ltd.
-D89A34     (base 16)		Beijing SHENQI Technology Co., Ltd.
-				No.6 Shang Di West Road
-				 Haidian District  Beijing  100085
-				CN
-
-A0-A6-5C   (hex)		Supercomputing Systems AG
-A0A65C     (base 16)		Supercomputing Systems AG
-				Technoparkstrasse 1
-				Zurich  ZH  8005
-				CH
-
-48-50-73   (hex)		Microsoft Corporation
-485073     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-E8-37-7A   (hex)		Zyxel Communications Corporation
-E8377A     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-80-3B-2A   (hex)		ABB Xiamen Low Voltage Equipment Co.,Ltd.
-803B2A     (base 16)		ABB Xiamen Low Voltage Equipment Co.,Ltd.
-				No.12-20,3rd Chuang Xin Road
-				Xiamen SEZ  Fujian  361006
-				CN
-
-7C-F9-0E   (hex)		Samsung Electronics Co.,Ltd
-7CF90E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-F0-D3   (hex)		Samsung Electronics Co.,Ltd
-50F0D3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-A7-84   (hex)		ITX security
-00A784     (base 16)		ITX security
-				9F Kolon Digital Tower Aston Bldg
-				SEOUL  (Outside US/Canada/China)  441-813
-				KR
-
-84-11-9E   (hex)		Samsung Electronics Co.,Ltd
-84119E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-9A-10   (hex)		Microsoft Corporation
-149A10     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-38-FA-CA   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-38FACA     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-5C-B4-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CB43E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-77-81   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-707781     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-54-E1-40   (hex)		INGENICO
-54E140     (base 16)		INGENICO
-				9 AVENUE DE LA GARE
-				VALENCE  DROME  26958
-				FR
-
-E4-90-7E   (hex)		Motorola Mobility LLC, a Lenovo Company
-E4907E     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-74-6A-3A   (hex)		Aperi Corporation
-746A3A     (base 16)		Aperi Corporation
-				360 Mobil Avenue
-				Camarillo  CA  93010
-				US
-
-94-A7-B7   (hex)		zte corporation
-94A7B7     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-18-44-E6   (hex)		zte corporation
-1844E6     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-3C-CE-15   (hex)		Mercedes-Benz USA, LLC
-3CCE15     (base 16)		Mercedes-Benz USA, LLC
-				One Mercedes Drive
-				Montvale  NJ  07645
-				US
-
-28-76-10   (hex)		IgniteNet
-287610     (base 16)		IgniteNet
-				1, Creation 3rd Rd.
-				Hsinchu    300
-				TW
-
-20-D7-5A   (hex)		Posh Mobile Limited
-20D75A     (base 16)		Posh Mobile Limited
-				1011A 10/F Harbour Centre Tower 1, 1 Hok Cheung Street
-				HungHom  Kowloon  00000
-				HK
-
-F4-15-63   (hex)		F5 Networks, Inc.
-F41563     (base 16)		F5 Networks, Inc.
-				1322 North Whitman Lane
-				Liberty Lake  WA  99019
-				US
-
-8C-8B-83   (hex)		Texas Instruments
-8C8B83     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-40-11-DC   (hex)		Sonance
-4011DC     (base 16)		Sonance
-				212 Avenida Fabricante
-				San Clemente  California  92672
-				US
-
-1C-83-41   (hex)		Hefei Bitland Information Technology Co.Ltd
-1C8341     (base 16)		Hefei Bitland Information Technology Co.Ltd
-				C1# Building, Bitland Industrial Park, No#4088, Jinxiu RD,Economic Development Zone, Hefei, Anhui, China
-				Hefei  Anhui  230061
-				CN
-
-08-1F-EB   (hex)		BinCube
-081FEB     (base 16)		BinCube
-				Si Ming Shan Road 116, Beilun
-				Ningbo  Zhejiang  315800
-				CN
-
-78-5F-4C   (hex)		Argox Information Co., Ltd.
-785F4C     (base 16)		Argox Information Co., Ltd.
-				7F, No.126, Lane 235, Baoqiao Rd., Xindian Dist.
-				New Taipei City  Taipei  231
-				TW
-
-34-CC-28   (hex)		Nexpring Co. LTD.,
-34CC28     (base 16)		Nexpring Co. LTD.,
-				3rd Floor, Building C, PDC Tower
-				Sungnam City  Kyungki-do  463400
-				KR
-
-54-E2-C8   (hex)		Dongguan Aoyuan Electronics Technology Co., Ltd
-54E2C8     (base 16)		Dongguan Aoyuan Electronics Technology Co., Ltd
-				Factory A7 Zhen'an Sci-Tech Industrial Park, Chang'an Town, Dongguan City, Guangdong Province, China
-				Dongguan City  Guangdong Province  523863
-				CN
-
-6C-1E-70   (hex)		Guangzhou YBDS IT Co.,Ltd
-6C1E70     (base 16)		Guangzhou YBDS IT Co.,Ltd
-				Room 318,3/F,970 Kang Wang Bei Lu,Liwan District,Guangzhou,PRC
-				Guangzhou City  Guangdong Province  510170
-				CN
-
-54-B8-0A   (hex)		D-Link International
-54B80A     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-D8-AD-DD   (hex)		Sonavation, Inc.
-D8ADDD     (base 16)		Sonavation, Inc.
-				3970 RCA Blvd.
-				Palm Beach Gardens  Florida  33410
-				US
-
-88-33-BE   (hex)		Ivenix, Inc.
-8833BE     (base 16)		Ivenix, Inc.
-				21 Water Street
-				Amesbury  MA  01913
-				US
-
-E4-8D-8C   (hex)		Routerboard.com
-E48D8C     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-70-68-79   (hex)		Saijo Denki International Co., Ltd.
-706879     (base 16)		Saijo Denki International Co., Ltd.
-				39/9 Moo 9 Soi Duangmanee
-				Muang  Nonthaburi  11000
-				TH
-
-10-AF-78   (hex)		Shenzhen ATUE Technology Co., Ltd
-10AF78     (base 16)		Shenzhen ATUE Technology Co., Ltd
-				3/F,Building 2nd, Xintang Industry Zone,Fuyong Town,Bao'an District
-				Shenzhen  Guangdong  518103
-				CN
-
-CC-19-A8   (hex)		PT Inovação e Sistemas SA
-CC19A8     (base 16)		PT Inovação e Sistemas SA
-				Rua Eng. José Ferreira Pinto Basto
-				Aveiro  Aveiro  3810-106
-				PT
-
-B4-B2-65   (hex)		DAEHO I&T
-B4B265     (base 16)		DAEHO I&T
-				211, Jayumuyeok 3-gil, MasanHoewon-gu
-				Changwon-si  Gyeongsangnam-do  630-812
-				KR
-
-E0-35-60   (hex)		Challenger Supply Holdings, LLC
-E03560     (base 16)		Challenger Supply Holdings, LLC
-				4500 Mercantile Plaza Dr.
-				Fort Worth  TX  76137
-				US
-
-3C-CB-7C   (hex)		TCT mobile ltd
-3CCB7C     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-24-9E-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-249EAB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-4B-03   (hex)		Samsung Electronics Co.,Ltd
-244B03     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-E4-CE-70   (hex)		Health & Life co., Ltd.
-E4CE70     (base 16)		Health & Life co., Ltd.
-				9F, No. 186, Jian Yi Road
-				New Taipei City  Taiwan  23553
-				TW
-
-7C-11-CD   (hex)		QianTang Technology
-7C11CD     (base 16)		QianTang Technology
-				36 Landmark Palace
-				Beijing  Beijing  100125
-				
-
-CC-A4-AF   (hex)		Shenzhen Sowell Technology Co., LTD
-CCA4AF     (base 16)		Shenzhen Sowell Technology Co., LTD
-				7F, Yizhe Building. Yuquan Road.
-				Shen Zhen  Guang Dong  518052
-				CN
-
-10-2C-83   (hex)		XIMEA
-102C83     (base 16)		XIMEA
-				Lesna 52
-				Marianka  SK  90033
-				SK
-
-6C-A7-5F   (hex)		zte corporation
-6CA75F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-8C-79-67   (hex)		zte corporation
-8C7967     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-78-58-F3   (hex)		Vachen Co.,Ltd
-7858F3     (base 16)		Vachen Co.,Ltd
-				Rm1206, Hanyang Bldg, 18, Gukhoe-daero 70-gil, Yeongdeungpo-gu
-				Seoul  Seoul  150-748
-				KR
-
-70-9C-8F   (hex)		Nero AG
-709C8F     (base 16)		Nero AG
-				Rueppurrer Str. 1A
-				Karlsruhe  BW  76137
-				DE
-
-00-7E-56   (hex)		China Dragon Technology Limited
-007E56     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-74-E2-8C   (hex)		Microsoft Corporation
-74E28C     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-00-71-C2   (hex)		PEGATRON CORPORATION
-0071C2     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-7C-82-74   (hex)		Shenzhen Hikeen Technology CO.,LTD
-7C8274     (base 16)		Shenzhen Hikeen Technology CO.,LTD
-				15rd floor,unit1,Building A of Kexing Science Park
-				Shenzhen  GuangDong  518057
-				CN
-
-94-D4-17   (hex)		GPI KOREA INC.
-94D417     (base 16)		GPI KOREA INC.
-				Daebang Triplaon B-Dong 201
-				Goyang-Si  Kyeonggi-Do  410-704
-				KR
-
-24-4B-81   (hex)		Samsung Electronics Co.,Ltd
-244B81     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-70-4E-66   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-704E66     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-D8-55-A3   (hex)		zte corporation
-D855A3     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-D8-2F   (hex)		zte corporation
-38D82F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F0-79-59   (hex)		ASUSTek COMPUTER INC.
-F07959     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-E0-8E-3C   (hex)		Aztech Electronics Pte Ltd
-E08E3C     (base 16)		Aztech Electronics Pte Ltd
-				31, Ubi Road 1
-				Singapore  Singapore  408694
-				SG
-
-84-4B-B7   (hex)		Beijing Sankuai Online Technology Co.,Ltd
-844BB7     (base 16)		Beijing Sankuai Online Technology Co.,Ltd
-				Block F&G, Wangjing International R & D Park,     
-				Chaoyang District  BEIJING  100102
-				CN
-
-68-F0-BC   (hex)		Shenzhen LiWiFi Technology Co., Ltd
-68F0BC     (base 16)		Shenzhen LiWiFi Technology Co., Ltd
-				No.7, Xinxi Road, Hi-Tech Park (North Zone)
-				Shenzhen  Guangdong  518057
-				CN
-
-30-0E-E3   (hex)		Aquantia Corporation
-300EE3     (base 16)		Aquantia Corporation
-				700 Tasman Drive
-				Milpitas  CA  95035
-				US
-
-18-F1-45   (hex)		NetComm Wireless Limited
-18F145     (base 16)		NetComm Wireless Limited
-				Level 2, 18-20 Orion Road
-				Lane Cove  Sydney  2066
-				AU
-
-AC-AB-BF   (hex)		AthenTek Inc.
-ACABBF     (base 16)		AthenTek Inc.
-				8F., No.356, Sec. 1, Neihu Rd., Neihu Dist.,
-				Taipei City  Taiwan  114
-				TW
-
-28-84-FA   (hex)		SHARP Corporation
-2884FA     (base 16)		SHARP Corporation
-				1 Takumi-cho, Sakai-ku
-				Sakai City  Osaka  590-8522
-				JP
-
-60-AF-6D   (hex)		Samsung Electronics Co.,Ltd
-60AF6D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B8-5A-73   (hex)		Samsung Electronics Co.,Ltd
-B85A73     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-3C-1E-04   (hex)		D-Link International
-3C1E04     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-60-D9-A0   (hex)		Lenovo Mobile Communication Technology Ltd.
-60D9A0     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999, Qishan North 2nd Road, Information & Optoelectronics Park,
-				Xiamen  Fujian  361006
-				
-
-68-B9-83   (hex)		b-plus GmbH
-68B983     (base 16)		b-plus GmbH
-				Ulrichsberger Str. 17
-				Deggendorf  Bavaria  94469
-				DE
-
-78-B3-B9   (hex)		ShangHai sunup lighting CO.,LTD
-78B3B9     (base 16)		ShangHai sunup lighting CO.,LTD
-				RM2508,Building 2,1077# Zu Chong Zhi Rd,Zhang Jiang Hi-Tech Park,Pudong New Area,ShangHai,China
-				shanghai  shanghai  201203
-				CN
-
-04-C0-9C   (hex)		Tellabs Inc.
-04C09C     (base 16)		Tellabs Inc.
-				1415 W. Diehl Road
-				Naperville  Illinois  60563
-				US
-
-98-1D-FA   (hex)		Samsung Electronics Co.,Ltd
-981DFA     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-18-68-82   (hex)		Beward R&D Co., Ltd.
-186882     (base 16)		Beward R&D Co., Ltd.
-				Molokova street 16, apt.355
-				Krasnoyarsk  Krasnoyarsk region  660118
-				RU
-
-EC-80-09   (hex)		NovaSparks
-EC8009     (base 16)		NovaSparks
-				12 rue de Chatillon
-				Paris  Ile de France  75014
-				FR
-
-50-AD-D5   (hex)		Dynalec Corporation
-50ADD5     (base 16)		Dynalec Corporation
-				87 West Main Street
-				Sodus  NY  14551
-				US
-
-B0-45-19   (hex)		TCT mobile ltd
-B04519     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-D8-8D-5C   (hex)		Elentec
-D88D5C     (base 16)		Elentec
-				Dongtangiheung-ro 64-3
-				Gyeonggi-do  Hwaseong-si/Dongtan-myeon  445-812
-				KR
-
-74-29-AF   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-7429AF     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-3C-1A-0F   (hex)		ClearSky Data
-3C1A0F     (base 16)		ClearSky Data
-				99 Summer Street
-				Boston  MA  02110
-				US
-
-E8-CC-18   (hex)		D-Link International
-E8CC18     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-B0-91-37   (hex)		ISis ImageStream Internet Solutions, Inc
-B09137     (base 16)		ISis ImageStream Internet Solutions, Inc
-				4374 FM 1518
-				Selma  TX  78154
-				US
-
-8C-05-51   (hex)		Koubachi AG
-8C0551     (base 16)		Koubachi AG
-				Technoparkstrasse 1
-				Zurich  Zurich  8005
-				CH
-
-D8-97-BA   (hex)		PEGATRON CORPORATION
-D897BA     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-A8-D8-8A   (hex)		Wyconn
-A8D88A     (base 16)		Wyconn
-				Rennweg 97-99
-				Vienna    1030
-				AT
-
-40-EA-CE   (hex)		FOUNDER BROADBAND NETWORK SERVICE CO.,LTD
-40EACE     (base 16)		FOUNDER BROADBAND NETWORK SERVICE CO.,LTD
-				5F,Tower B,Beifa Plaza,No.16 Building
-				Haisdian District  Beijing  100088
-				CN
-
-A4-9D-49   (hex)		Ketra, Inc.
-A49D49     (base 16)		Ketra, Inc.
-				3815 S. Capital of Texas Hwy
-				Austin  TX  78704
-				US
-
-C0-38-96   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-C03896     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-2C-50-89   (hex)		Shenzhen Kaixuan Visual Technology Co.,Limited
-2C5089     (base 16)		Shenzhen Kaixuan Visual Technology Co.,Limited
-				No.19th Xifu Road, Hongxing Community
-				Shenzhen  Guangdong  518000
-				CN
-
-94-8E-89   (hex)		INDUSTRIAS UNIDAS SA DE CV
-948E89     (base 16)		INDUSTRIAS UNIDAS SA DE CV
-				CARRETERA PANAMERICANA
-				PASTEJE JOCOTITLAN  ESTADO DE MEXICO  50700
-				MX
-
-00-AE-FA   (hex)		Murata Manufacturing Co., Ltd.
-00AEFA     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-84-18-26   (hex)		Osram GmbH
-841826     (base 16)		Osram GmbH
-				Marcel Breuer Str. 6
-				Munich  Bavaria  80807
-				DE
-
-F8-E9-03   (hex)		D-Link International
-F8E903     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-E8-96-06   (hex)		testo Instruments (Shenzhen) Co., Ltd.
-E89606     (base 16)		testo Instruments (Shenzhen) Co., Ltd.
-				China Merchants Guangming Science & Technology Park,
-				Guangming New District, Shenzhen  Guangdong  518107
-				CN
-
-1C-7E-51   (hex)		3bumen.com
-1C7E51     (base 16)		3bumen.com
-				11/F FRONT BLK HANG LOK BLDG
-				HONG KONG  KONG KONG  N/A
-				HK
-
-68-72-DC   (hex)		CETORY.TV Company Limited
-6872DC     (base 16)		CETORY.TV Company Limited
-				Building C-1601, Tiley Central Plaza
-				Shenzhen  Guangdong  518054
-				CN
-
-30-77-CB   (hex)		Maike Industry(Shenzhen)CO.,LTD
-3077CB     (base 16)		Maike Industry(Shenzhen)CO.,LTD
-				Maike Industrial Garden, Sanwei village,
-				Shenzhen  Guangdong  518100
-				CN
-
-24-97-ED   (hex)		Techvision Intelligent Technology Limited
-2497ED     (base 16)		Techvision Intelligent Technology Limited
-				Room 7006B, Tianxia IC Industry Building,
-				Shenzhen  Guangdong  518052
-				CN
-
-90-9F-33   (hex)		EFM Networks
-909F33     (base 16)		EFM Networks
-				6F, Benposra II 1197-1 Bojeong Giheung Gu
-				Yong In  Kyunggi do  446913
-				KR
-
-60-04-17   (hex)		POSBANK CO.,LTD
-600417     (base 16)		POSBANK CO.,LTD
-				Room 805-808, New T Castle B/D, 429-1
-				  Seoul  153-803
-				KR
-
-20-76-93   (hex)		Lenovo (Beijing) Limited.
-207693     (base 16)		Lenovo (Beijing) Limited.
-				No.6 Chuang Ye Road Shangdi Information Industry Base,
-				  Beijing  100085
-				CN
-
-08-46-56   (hex)		VEO-LABS
-084656     (base 16)		VEO-LABS
-				14 rue du Patis Tatelin
-				RENNES  Bretagne  35700
-				FR
-
-EC-3C-5A   (hex)		SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD
-EC3C5A     (base 16)		SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD
-				5A 6FLOOR, BLOCK C12, FUYUAN INDUSTRIAL AREA, ZHOU SHI ROAD,
-				SHENZHEN  GUANGDONG  518102
-				CN
-
-44-88-CB   (hex)		Camco Technologies NV
-4488CB     (base 16)		Camco Technologies NV
-				Technologielaan 13
-				Heverlee  VB  3001
-				BE
-
-6C-BF-B5   (hex)		Noon Technology Co., Ltd
-6CBFB5     (base 16)		Noon Technology Co., Ltd
-				Building C, Zhangkeng Industrial Park, Minzhi
-				Shenzhen  GuangDong  518131
-				CN
-
-50-29-4D   (hex)		NANJING IOT SENSOR TECHNOLOGY CO,LTD
-50294D     (base 16)		NANJING IOT SENSOR TECHNOLOGY CO,LTD
-				ROOM 422 NO.420 ZHONGHUA ROAD QINHUAI DISTRICT NANJING CITY
-				Nangjing  jiangsu  210000
-				CN
-
-0C-CF-D1   (hex)		SPRINGWAVE Co., Ltd
-0CCFD1     (base 16)		SPRINGWAVE Co., Ltd
-				#B-703,U-space 1-danji,670 Sampyeong-dong Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-74-BA-DB   (hex)		Longconn Electornics(shenzhen)Co.,Ltd
-74BADB     (base 16)		Longconn Electornics(shenzhen)Co.,Ltd
-				Building D12,n 30,Xingye One Road,Fenghuang First Industrial Zone,Fuyong Street,Bao an District,Shenzhen,Guangdong Province.
-				shenzhen  guangdong  518000
-				CN
-
-B8-F3-17   (hex)		iSun Smasher Communications Private Limited
-B8F317     (base 16)		iSun Smasher Communications Private Limited
-				No. 826, Ferns Paradise, 2nd Street,
-				Bangalore  Karnataka  560037
-				IN
-
-8C-F8-13   (hex)		ORANGE POLSKA
-8CF813     (base 16)		ORANGE POLSKA
-				AL.JEROZOLIMSKIE 160
-				WARSAW  MASOVIA  02-326
-				PL
-
-54-9F-35   (hex)		Dell Inc.
-549F35     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-24-42-BC   (hex)		Alinco,incorporated
-2442BC     (base 16)		Alinco,incorporated
-				Yodoyabashi Dai-Bldg 13F,
-				Osaka  Osaka pref.  541-0043
-				JP
-
-F8-24-41   (hex)		Yeelink
-F82441     (base 16)		Yeelink
-				F10-B4, Bldg. B, International Innovation Park
-				Qingdao  Shandong  266101
-				CN
-
-10-8A-1B   (hex)		RAONIX Inc.
-108A1B     (base 16)		RAONIX Inc.
-				Changeop-Center 710, Shin-Gu Univ. Gwangmyeong-ro 377, Jungwon-gu
-				Seongnam-si  Gyeonggi-do  462-743
-				KR
-
-10-2F-6B   (hex)		Microsoft Corporation
-102F6B     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-8C-B0-94   (hex)		Airtech I&C Co., Ltd
-8CB094     (base 16)		Airtech I&C Co., Ltd
-				33B-9L #613-9, Namchon-dong
-				Namdong-gu  Incheon  405-846
-				KR
-
-94-54-93   (hex)		Rigado, LLC
-945493     (base 16)		Rigado, LLC
-				2601 25th ST SE, STE 200
-				Salem  OR  97302
-				US
-
-68-F0-6D   (hex)		ALONG INDUSTRIAL CO., LIMITED
-68F06D     (base 16)		ALONG INDUSTRIAL CO., LIMITED
-				FLAT/RM,3 11/F, HUNG TO INDUSTRIAL BUILDING
-				  HONG KONG  
-				HK
-
-F4-28-53   (hex)		Zioncom Electronics (Shenzhen) Ltd.
-F42853     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
-				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-D4-EC-86   (hex)		LinkedHope Intelligent Technologies Co., Ltd
-D4EC86     (base 16)		LinkedHope Intelligent Technologies Co., Ltd
-				2nd Floor,Building 1, Science Park,
-				Beijing  Beijing  100070
-				CN
-
-1C-9C-26   (hex)		Zoovel Technologies
-1C9C26     (base 16)		Zoovel Technologies
-				Paseo de la Castellana 259C
-				  Madrid  28046
-				ES
-
-04-67-85   (hex)		scemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH
-046785     (base 16)		scemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH
-				Gewerbeparkstr. 20
-				Reichshof-Wehnrath  NRW  51580
-				
-
-D0-FA-1D   (hex)		Qihoo  360  Technology Co.,Ltd
-D0FA1D     (base 16)		Qihoo  360  Technology Co.,Ltd
-				Building 2，6 Haoyuan
-				Chaoyang District  Beijing  100015
-				CN
-
-AC-11-D3   (hex)		Suzhou HOTEK  Video Technology Co. Ltd
-AC11D3     (base 16)		Suzhou HOTEK  Video Technology Co. Ltd
-				No.78,Keling Road,Suzhou National new and hi-tech industrial Development zone
-				Suzhou  Jiangsu  215200
-				CN
-
-84-32-EA   (hex)		ANHUI WANZTEN P&T CO., LTD
-8432EA     (base 16)		ANHUI WANZTEN P&T CO., LTD
-				9F Building B1 HUAYI science Park
-				Hefei  Anhui Province  230088
-				CN
-
-E0-1D-38   (hex)		Beijing HuaqinWorld Technology Co.,Ltd
-E01D38     (base 16)		Beijing HuaqinWorld Technology Co.,Ltd
-				30F,Beijing Silver Tower
-				Chao Yang Dist  Beijing  100027
-				CN
-
-E4-7F-B2   (hex)		FUJITSU LIMITED
-E47FB2     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-FC-6D-C0   (hex)		BME CORPORATION
-FC6DC0     (base 16)		BME CORPORATION
-				147-2
-				Kawagoe-shi  Saitama  350-0845
-				JP
-
-24-D1-3F   (hex)		MEXUS CO.,LTD
-24D13F     (base 16)		MEXUS CO.,LTD
-				1512, Seoulsup IT Valley,
-				Seoul  Seoul  133-822
-				KR
-
-78-24-AF   (hex)		ASUSTek COMPUTER INC.
-7824AF     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-FC-9F-E1   (hex)		CONWIN.Tech. Ltd
-FC9FE1     (base 16)		CONWIN.Tech. Ltd
-				4D,Tianxia IC Bldg,115 Yiyuan road, Nanshan District,Shenzhen,Guangdong,P.P.China
-				Shenzhen  Guangdong  518000
-				CN
-
-B8-9B-E4   (hex)		ABB Power Systems Power Generation
-B89BE4     (base 16)		ABB Power Systems Power Generation
-				29801 Euclid Ave
-				Wickliffe  Ohio  44092
-				US
-
-A8-1B-5D   (hex)		Foxtel Management Pty Ltd
-A81B5D     (base 16)		Foxtel Management Pty Ltd
-				Building 3, Level 3
-				NORTH RYDE  NSW  2113
-				AU
-
-50-50-65   (hex)		TAKT Corporation
-505065     (base 16)		TAKT Corporation
-				2762-8
-				Chino-City  Nagano-Pref.  391-0001
-				JP
-
-40-C6-2A   (hex)		Shanghai Jing Ren Electronic Technology Co., Ltd.
-40C62A     (base 16)		Shanghai Jing Ren Electronic Technology Co., Ltd.
-				GUI Qing Road 7 No. 3 building G7 software base A District 208 room
-				Xuhui District  Shanghai City  200233
-				CN
-
-E8-15-0E   (hex)		Nokia Corporation
-E8150E     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-C4-42-02   (hex)		Samsung Electronics Co.,Ltd
-C44202     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-AE-6F   (hex)		Circle Reliance, Inc DBA Cranberry Networks
-B4AE6F     (base 16)		Circle Reliance, Inc DBA Cranberry Networks
-				921 Rose Avenue
-				Menlo Park  CA  94025
-				US
-
-90-DA-6A   (hex)		FOCUS H&S Co., Ltd.
-90DA6A     (base 16)		FOCUS H&S Co., Ltd.
-				#113, Doosan Venture Digm, 126-1
-				Anyang  Gyeonggi-Do  431-755
-				KR
-
-DC-53-7C   (hex)		Compal Broadband Networks, Inc.
-DC537C     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-44-A6-E5   (hex)		THINKING TECHNOLOGY CO.,LTD
-44A6E5     (base 16)		THINKING TECHNOLOGY CO.,LTD
-				The 6th Floor,Gate No. 3 of Huaqiang Logistics Building
-				Nanshan, Shenzhen  Guangdong  518055
-				CN
-
-A4-5D-A1   (hex)		ADB Broadband Italia
-A45DA1     (base 16)		ADB Broadband Italia
-				VIALE SARCA 336
-				MILANO  ITALY  20126
-				
-
-0C-AC-05   (hex)		Unitend Technologies Inc.
-0CAC05     (base 16)		Unitend Technologies Inc.
-				No.6 Nanda'an Hutong, Xizhimeng st
-				Zicheng District  Beijing  100035
-				CN
-
-4C-6E-6E   (hex)		Comnect Technology CO.,LTD
-4C6E6E     (base 16)		Comnect Technology CO.,LTD
-				7-402, Xinyuan Industrial Park, No.61
-				Shenzhen  Guangdong  518055
-				CN
-
-8C-33-57   (hex)		HiteVision Digital Media Technology Co.,Ltd.
-8C3357     (base 16)		HiteVision Digital Media Technology Co.,Ltd.
-				1st building,Honghui Industrial Park,LiuXian
-				Shenzhen  Guangdong  510008
-				CN
-
-3C-AA-3F   (hex)		iKey, Ltd.
-3CAA3F     (base 16)		iKey, Ltd.
-				2621 Ridgepoint Drive
-				Austin  Texas  78754
-				US
-
-0C-38-3E   (hex)		Fanvil Technology Co., Ltd.
-0C383E     (base 16)		Fanvil Technology Co., Ltd.
-				3F, Block A, Gaoxinqi Building, Anhua Industrial Park
-				Shenzhen  Guangdong  518101
-				CN
-
-60-CD-A9   (hex)		Abloomy
-60CDA9     (base 16)		Abloomy
-				Room 501 ,CTS Building,No 1 Beishatan Chaoyang District
-				BeiJing    100083
-				CN
-
-B8-AD-3E   (hex)		BLUECOM
-B8AD3E     (base 16)		BLUECOM
-				116, Venture-ro, Yeonsu-gu,
-				Incheon    406-840
-				KR
-
-18-30-09   (hex)		Woojin Industrial Systems Co., Ltd.
-183009     (base 16)		Woojin Industrial Systems Co., Ltd.
-				95, Sari-ro, Sari-myeon
-				Goesan-gun  Chungcheongbuk-do  367-822
-				KR
-
-74-DB-D1   (hex)		Ebay Inc
-74DBD1     (base 16)		Ebay Inc
-				2211 N. First St
-				San Jose  Ca  95131
-				US
-
-30-B5-F1   (hex)		Aitexin Technology Co., Ltd
-30B5F1     (base 16)		Aitexin Technology Co., Ltd
-				1210 PDAY research center streer 2
-				Peiking    100190
-				CN
-
-B0-10-41   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-B01041     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-80-AD-67   (hex)		Kasda Networks Inc
-80AD67     (base 16)		Kasda Networks Inc
-				B-31 Building, Tanglang Industry Zone, Xili, Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-18-D5-B6   (hex)		SMG Holdings LLC
-18D5B6     (base 16)		SMG Holdings LLC
-				205 N Michigan Ave
-				Chicago  IL  60601
-				US
-
-5C-2E-59   (hex)		Samsung Electronics Co.,Ltd
-5C2E59     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-E5-39   (hex)		Moimstone Co.,Ltd
-A8E539     (base 16)		Moimstone Co.,Ltd
-				4F, 954-9 Gwanyang-dong
-				Anyang-Si  Gyeonggi-do  431-060
-				KR
-
-54-B7-53   (hex)		Hunan Fenghui Yinjia Science And Technology Co.,Ltd
-54B753     (base 16)		Hunan Fenghui Yinjia Science And Technology Co.,Ltd
-				No.15 Lutian Road
-				Changsha  Hunan  410205
-				CN
-
-10-30-47   (hex)		Samsung Electronics Co.,Ltd
-103047     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F8-84-F2   (hex)		Samsung Electronics Co.,Ltd
-F884F2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-75-4D   (hex)		Nokia
-B0754D     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-E0-CB-EE   (hex)		Samsung Electronics Co.,Ltd
-E0CBEE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-4C-39-09   (hex)		HPL Electric & Power Private Limited
-4C3909     (base 16)		HPL Electric & Power Private Limited
-				133, Pace City-1, Sec-37
-				Gurgaon  Haryana  122001
-				IN
-
-90-7E-BA   (hex)		UTEK TECHNOLOGY (SHENZHEN) CO.,LTD
-907EBA     (base 16)		UTEK TECHNOLOGY (SHENZHEN) CO.,LTD
-				6F, C Building JiaAn Industrial Zone, 72# district of Baoan, ShenZhen, China
-				SHENZHEN  Guangdong Province  518101
-				CN
-
-A0-02-DC   (hex)		Amazon Technologies Inc.
-A002DC     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-54-2A-A2   (hex)		Alpha Networks Inc.
-542AA2     (base 16)		Alpha Networks Inc.
-				No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C
-				Hsinchu  Taiwan  300
-				TW
-
-84-94-8C   (hex)		Hitron Technologies. Inc
-84948C     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-A8-F7-E0   (hex)		PLANET Technology Corporation
-A8F7E0     (base 16)		PLANET Technology Corporation
-				11F, No. 96, Min Quan Road,
-				New Taipei City    22341
-				TW
-
-44-86-C1   (hex)		Siemens Low Voltage & Products
-4486C1     (base 16)		Siemens Low Voltage & Products
-				5400 Triangle Parkway
-				Norcross  GA  30092
-				US
-
-40-45-DA   (hex)		Spreadtrum Communications (Shanghai) Co., Ltd.
-4045DA     (base 16)		Spreadtrum Communications (Shanghai) Co., Ltd.
-				Building 1, Spreadtrum Center, No.2288, Zuchongzhi Rd
-				  Shanghai  201203
-				
-
-34-51-AA   (hex)		JID GLOBAL
-3451AA     (base 16)		JID GLOBAL
-				211, Biz Plus Suwon 2F Chungho Bldg, 17 363Road, Susung-ro
-				SUWON  Gyeonggi-do  440-846
-				KR
-
-98-BE-94   (hex)		IBM
-98BE94     (base 16)		IBM
-				3039 E Cornwallis Rd
-				Research Triangle Park  NC  27709
-				US
-
-6C-19-8F   (hex)		D-Link International
-6C198F     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-C8-FF-77   (hex)		Dyson Limited
-C8FF77     (base 16)		Dyson Limited
-				Tetbury Hill
-				Malmesbury  Wiltshire  SN16 0RP
-				GB
-
-B4-9E-AC   (hex)		Imagik Int'l Corp
-B49EAC     (base 16)		Imagik Int'l Corp
-				2299 SW 37 th Ave
-				Miami  Florida  33145
-				US
-
-CC-07-E4   (hex)		Lenovo Mobile Communication Technology Ltd.
-CC07E4     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999, Qishan North 2nd Road, Information &amp; Optoelectronics Park, Torch Hi-tech Industry Development Zone, Xiamen, P.R.China
-				Xiamen  Fujian  361006
-				US
-
-C4-6B-B4   (hex)		myIDkey
-C46BB4     (base 16)		myIDkey
-				65 Enterprise
-				Aliso Viejo  CA  92656
-				US
-
-0C-63-FC   (hex)		Nanjing Signway Technology Co., Ltd
-0C63FC     (base 16)		Nanjing Signway Technology Co., Ltd
-				Rm 1001,10/F,28 Ningshuang Rd,
-				Nanjing  Jiangsu  210012
-				CN
-
-D4-E0-8E   (hex)		ValueHD Corporation
-D4E08E     (base 16)		ValueHD Corporation
-				Xinwei Xili, Nanshan District, Shenzhen City Industrial Zone, Shiling 8, 3rd Floor, North
-				Shenzhen  Guangdong  518055
-				CN
-
-C8-9F-1D   (hex)		SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD
-C89F1D     (base 16)		SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD
-				NO.6 QINGNING ROAD,CAIHUANG INDUSTRY PARK,
-				SHENZHEN  GUANGDONG  518109
-				CN
-
-14-3D-F2   (hex)		Beijing Shidai Hongyuan Network Communication Co.,Ltd
-143DF2     (base 16)		Beijing Shidai Hongyuan Network Communication Co.,Ltd
-				#505, 5F, Tower 3
-				  Beijing  100000
-				CN
-
-2C-39-C1   (hex)		Ciena Corporation
-2C39C1     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-54-EE-75   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
-54EE75     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
-				168# First Avenue,Kunshan Integrated Free Trade Zone,Kunshan,Jiangsu,China
-				Kunshan  Jiangsu  215300
-				CN
-
-08-74-F6   (hex)		Winterhalter Gastronom GmbH
-0874F6     (base 16)		Winterhalter Gastronom GmbH
-				Tettnanger Straße 72
-				Meckenbeuren  Baden-Württemberg  88074
-				DE
-
-D8-49-2F   (hex)		CANON INC.
-D8492F     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-80-0E-24   (hex)		ForgetBox
-800E24     (base 16)		ForgetBox
-				61 rue de Sèvres
-				Ville d'Avray  IDF  92140
-				FR
-
-3C-25-D7   (hex)		Nokia Corporation
-3C25D7     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-18-FF-2E   (hex)		Shenzhen Rui Ying Da Technology Co., Ltd
-18FF2E     (base 16)		Shenzhen Rui Ying Da Technology Co., Ltd
-				KaiXinda Electronic Science and Technology Park, Zhoushi Road 49,Shiyan Street,Baoan  District,ShenZhen,China
-				shenzhen  guangdong  518108
-				CN
-
-84-72-07   (hex)		I&C Technology
-847207     (base 16)		I&C Technology
-				24,Pangyo-ro 255beon-gil, Bundang-gu, Seongnam-si, Gyeonggi-do, 463-400,Korea
-				Seongnam-si  Gyeonggi-do  463-400,Korea
-				US
-
-CC-A6-14   (hex)		AIFA TECHNOLOGY CORP.
-CCA614     (base 16)		AIFA TECHNOLOGY CORP.
-				1F., No.230, Sec. 2, Bade Rd., Fongshan Dist.
-				Kaohsiung City  Taiwan  83053
-				TW
-
-90-F1-B0   (hex)		Hangzhou Anheng Info&Tech CO.,LTD
-90F1B0     (base 16)		Hangzhou Anheng Info&Tech CO.,LTD
-				15F Zhongcai Bldg,#68 Tonghe Rd
-				Hangzhou  Zhejiang  310051
-				CN
-
-4C-8B-30   (hex)		Actiontec Electronics, Inc
-4C8B30     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-08-05-CD   (hex)		DongGuang EnMai Electronic Product Co.Ltd.
-0805CD     (base 16)		DongGuang EnMai Electronic Product Co.Ltd.
-				701 7th Floor,YiFeng Building,
-				DongGuang  GuangDong Province  523843
-				CN
-
-54-D1-63   (hex)		MAX-TECH,INC
-54D163     (base 16)		MAX-TECH,INC
-				2F, 26, 2gil, Dujeonggongdan
-				Cheonan  Chungnam  331957
-				KR
-
-48-B5-A7   (hex)		Glory Horse Industries Ltd.
-48B5A7     (base 16)		Glory Horse Industries Ltd.
-				Woekshop 8, 4/F., World Wide Industrial Centre,
-				Shatin, N.T.    HKG
-				HK
-
-0C-4F-5A   (hex)		ASA-RT s.r.l.
-0C4F5A     (base 16)		ASA-RT s.r.l.
-				Strada del Lionetto 16/a
-				Torino  To  10146
-				IT
-
-D4-22-4E   (hex)		Alcatel Lucent
-D4224E     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-9C-86-DA   (hex)		Phoenix Geophysics Ltd.
-9C86DA     (base 16)		Phoenix Geophysics Ltd.
-				3781 Victoria Park Ave.
-				Toronto  ON  M1W 3K5
-				CA
-
-2C-07-3C   (hex)		DEVLINE LIMITED
-2C073C     (base 16)		DEVLINE LIMITED
-				FLAT/RM A9,9/F SILVERCORP INT TOWER
-				  HONGKONG  999077
-				CN
-
-7C-1A-03   (hex)		8Locations Co., Ltd.
-7C1A03     (base 16)		8Locations Co., Ltd.
-				1F, No. 123, Chenggong 2rd Street
-				Zhube City  Hsinchu  302
-				TW
-
-AC-B8-59   (hex)		Uniband Electronic Corp,
-ACB859     (base 16)		Uniband Electronic Corp,
-				6F-1 No. Dongguang Rd.,
-				Hsinchu  300  300
-				TW
-
-2C-9A-A4   (hex)		Eolo SpA
-2C9AA4     (base 16)		Eolo SpA
-				via Gran San Bernardo 12
-				Busto Arsizio  VA  21052
-				IT
-
-88-B1-E1   (hex)		 Mojo Networks, Inc.
-88B1E1     (base 16)		 Mojo Networks, Inc.
-				339 N.Bernardo Ave
-				Mountain View  CA  94043
-				US
-
-90-DB-46   (hex)		E-LEAD ELECTRONIC CO., LTD
-90DB46     (base 16)		E-LEAD ELECTRONIC CO., LTD
-				NO.37, GUNGDUNG 1ST RD.
-				SHENGANG SHIANG  CHANGHUA  50971
-				TW
-
-34-4F-5C   (hex)		R&amp;M AG
-344F5C     (base 16)		R&amp;M AG
-				Binzstrasse 32
-				Wetzikon  Zurich  8620
-				CH
-
-60-47-D4   (hex)		FORICS Electronic Technology Co., Ltd.
-6047D4     (base 16)		FORICS Electronic Technology Co., Ltd.
-				BLD 2A, No 1588, Lianhang Rd
-				  Shanghai  201112
-				CN
-
-FC-F8-B7   (hex)		TRONTEQ Electronic
-FCF8B7     (base 16)		TRONTEQ Electronic
-				Siemensstrasse 22
-				Reutlingen  Baden Wuerttemberg  72766
-				DE
-
-30-F4-2F   (hex)		ESP
-30F42F     (base 16)		ESP
-				126-1 Pyeongchon-dong, Dongan-gu
-				Anyang-si  Gyeonggi-do  431-755
-				KR
-
-70-4E-01   (hex)		KWANGWON TECH CO., LTD.
-704E01     (base 16)		KWANGWON TECH CO., LTD.
-				D-401, Digital-Empire Bldg., 980-3
-				Suwon  Gyeonggi-Do  443-702
-				KR
-
-74-6A-8F   (hex)		VS Vision Systems GmbH
-746A8F     (base 16)		VS Vision Systems GmbH
-				Aspelohe 27A
-				Norderstedt  Schleswig-Holstein  22848
-				DE
-
-54-A3-1B   (hex)		Shenzhen Linkworld Technology Co,.LTD
-54A31B     (base 16)		Shenzhen Linkworld Technology Co,.LTD
-				Room 667-675 , sixth floor ,
-				Shenzhen  Guangdong  518055
-				CN
-
-CC-39-8C   (hex)		Shiningtek
-CC398C     (base 16)		Shiningtek
-				No. 53, Nankeng 3 St
-				  Hsinchu  30841
-				TW
-
-18-20-A6   (hex)		Sage Co., Ltd.
-1820A6     (base 16)		Sage Co., Ltd.
-				2-24 Sumiyoshicho, Naka-ku
-				Yokohama-shi  Kanagawa  231-0013
-				JP
-
-20-EA-C7   (hex)		SHENZHEN RIOPINE ELECTRONICS CO., LTD
-20EAC7     (base 16)		SHENZHEN RIOPINE ELECTRONICS CO., LTD
-				ROOM1002~1004, BaoYuan HuaFeng Headquarters' Business Building, Xixiang Avenue (west) , Bao'an District
-				Shenzhen  Guangdong  518000
-				CN
-
-64-B3-70   (hex)		PowerComm Solutions LLC
-64B370     (base 16)		PowerComm Solutions LLC
-				15 Minneakoning Rd. Suite 311
-				Flemington  NJ  08822
-				US
-
-5C-F5-0D   (hex)		Institute of microelectronic applications
-5CF50D     (base 16)		Institute of microelectronic applications
-				Na Valentince 1003/1
-				Praha    15000
-				CZ
-
-74-9C-52   (hex)		Huizhou Desay SV Automotive Co., Ltd.
-749C52     (base 16)		Huizhou Desay SV Automotive Co., Ltd.
-				103, Hechang 5th Road West,
-				Huizhou  Guangdong  516006
-				CN
-
-C4-29-1D   (hex)		KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.
-C4291D     (base 16)		KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.
-				kemalpaşa yolu 3.km KEMALPASA 35170
-				izmir  TÜRKİYE --  35170
-				TR
-
-6C-5F-1C   (hex)		Lenovo Mobile Communication Technology Ltd.
-6C5F1C     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				 No.999, Qishan North 2nd Road,
-				Xiamen  361000  Fujian
-				US
-
-7C-E4-AA   (hex)		Private
-7CE4AA     (base 16)		Private
-
-08-3F-3E   (hex)		WSH GmbH
-083F3E     (base 16)		WSH GmbH
-				Koelner Str. 58a
-				Gummersbach  NRW  51645
-				DE
-
-2C-95-7F   (hex)		zte corporation
-2C957F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-3C-0C-48   (hex)		Servergy, Inc.
-3C0C48     (base 16)		Servergy, Inc.
-				1700 N. Redbud
-				McKinney  TEXAS  75069
-				US
-
-10-DE-E4   (hex)		automationNEXT GmbH
-10DEE4     (base 16)		automationNEXT GmbH
-				Millennium Park 4
-				Lustenau  Vorarlberg  6890
-				AT
-
-40-4A-18   (hex)		Addrek Smart Solutions
-404A18     (base 16)		Addrek Smart Solutions
-				Al Gharrafa Thani Bin Jassim St
-				Doha    
-				QA
-
-C0-C5-69   (hex)		SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD
-C0C569     (base 16)		SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD
-				Building 3,No.25 Cangwu Rd
-				  Shanghai  200233
-				CN
-
-C4-C0-AE   (hex)		MIDORI ELECTRONIC CO., LTD.
-C4C0AE     (base 16)		MIDORI ELECTRONIC CO., LTD.
-				397
-				Chikuma  Nagano  389-0804
-				JP
-
-AC-C5-95   (hex)		Graphite Systems
-ACC595     (base 16)		Graphite Systems
-				2037 Landings Drive
-				Mountain View  California  94043
-				US
-
-7C-E1-FF   (hex)		Computer Performance, Inc. DBA Digital Loggers, Inc.
-7CE1FF     (base 16)		Computer Performance, Inc. DBA Digital Loggers, Inc.
-				2695 Walsh Avenue
-				Santa Clara  CA  95051
-				US
-
-D8-15-0D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D8150D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-58-50-AB   (hex)		TLS Corporation
-5850AB     (base 16)		TLS Corporation
-				1241 Superior Ave.
-				Cleveland  OH  44114
-				US
-
-7C-CD-11   (hex)		MS-Magnet
-7CCD11     (base 16)		MS-Magnet
-				Parchevich 42
-				  Sofia  1000
-				BG
-
-98-FF-6A   (hex)		OTEC(Shanghai)Technology Co.,Ltd.
-98FF6A     (base 16)		OTEC(Shanghai)Technology Co.,Ltd.
-				13th Floor,Building 2
-				  Shanghai  200235
-				CN
-
-BC-1A-67   (hex)		YF Technology Co., Ltd
-BC1A67     (base 16)		YF Technology Co., Ltd
-				No.62,South Fumin Road,
-				Dongguang  Guangdong  523773
-				CN
-
-4C-D7-B6   (hex)		Helmer Scientific
-4CD7B6     (base 16)		Helmer Scientific
-				14400 Bergen Boulevard
-				Noblesville  Indiana  46060
-				US
-
-84-25-A4   (hex)		Tariox Limited
-8425A4     (base 16)		Tariox Limited
-				173 Highway 53
-				Cathcart  Ontario  N0E 1B0
-				CA
-
-48-3D-32   (hex)		Syscor Controls &amp; Automation
-483D32     (base 16)		Syscor Controls &amp; Automation
-				201-60 Bastion Sq
-				Victoria  BC  V8W 1J2
-				CA
-
-CC-85-6C   (hex)		SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
-CC856C     (base 16)		SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
-				Xin fengze industrial park,shangnan east road
-				SHENZHEN  GUANGDONG  518101
-				CN
-
-AC-6B-AC   (hex)		Jenny Science AG
-AC6BAC     (base 16)		Jenny Science AG
-				Sandblatte 7a
-				Rain  Luzern  6026
-				CH
-
-D8-EE-78   (hex)		Moog Protokraft
-D8EE78     (base 16)		Moog Protokraft
-				4545 W Stone Dr Bldg 135
-				Kingsport  TN  37660
-				US
-
-24-11-48   (hex)		Entropix, LLC
-241148     (base 16)		Entropix, LLC
-				100 Rawson Road
-				Victor  New York  14564
-				US
-
-C4-45-EC   (hex)		Shanghai Yali Electron Co.,LTD
-C445EC     (base 16)		Shanghai Yali Electron Co.,LTD
-				Room 1-607
-				Shanghai  Shanghai  201100
-				US
-
-E0-E6-31   (hex)		SNB TECHNOLOGIES LIMITED
-E0E631     (base 16)		SNB TECHNOLOGIES LIMITED
-				Rm 303, Building #13,
-				Long Gang district, ShenZhen  GuangDong  518000
-				CN
-
-78-B5-D2   (hex)		Ever Treasure Industrial Limited
-78B5D2     (base 16)		Ever Treasure Industrial Limited
-				15A Tung Lee Commercial Building
-				Sheung Wan    852
-				HK
-
-50-ED-78   (hex)		Changzhou Yongse Infotech Co.,Ltd
-50ED78     (base 16)		Changzhou Yongse Infotech Co.,Ltd
-				No.128 Zhengzhong Rd, Xixiashua Town
-				Changzhou  Jiangsu  213135
-				CN
-
-90-02-8A   (hex)		Shenzhen Shidean Legrand Electronic Products Co.,Ltd
-90028A     (base 16)		Shenzhen Shidean Legrand Electronic Products Co.,Ltd
-				Block39,Shahe Industrial Zone Baishizhou
-				  Guangdong  518053
-				CN
-
-1C-C1-1A   (hex)		Wavetronix
-1CC11A     (base 16)		Wavetronix
-				78 East 1700 South
-				Provo  UT  84606
-				US
-
-FC-09-D8   (hex)		ACTEON Group
-FC09D8     (base 16)		ACTEON Group
-				ZAC Athelia IV
-				La Ciotat  France  13705
-				FR
-
-74-3E-CB   (hex)		Gentrice tech
-743ECB     (base 16)		Gentrice tech
-				15F No.738-5 JhengJhong Rd
-				New Taipei city    235
-				TW
-
-7C-44-4C   (hex)		Entertainment Solutions, S.L.
-7C444C     (base 16)		Entertainment Solutions, S.L.
-				Parque Empresarial Miraflores, nave 3
-				  Zaragoza  50720
-				ES
-
-04-44-A1   (hex)		TELECON GALICIA,S.A.
-0444A1     (base 16)		TELECON GALICIA,S.A.
-				AVENIDA DE NOSTIAN
-				A CORUNA 15008     
-				ES
-
-20-C6-0D   (hex)		Shanghai annijie Information technology Co.,LTD
-20C60D     (base 16)		Shanghai annijie Information technology Co.,LTD
-				Room605,NO.9,Lane 777
-				Shanghai    200070
-				CN
-
-38-CA-97   (hex)		Contour Design LLC
-38CA97     (base 16)		Contour Design LLC
-				10 Industrial Drive
-				Windham  NH  03087
-				US
-
-BC-2D-98   (hex)		ThinGlobal LLC
-BC2D98     (base 16)		ThinGlobal LLC
-				703 wildflower RD
-				Davenport  FL  33837
-				US
-
-18-79-A2   (hex)		GMJ ELECTRIC LIMITED
-1879A2     (base 16)		GMJ ELECTRIC LIMITED
-				RM 1405, 14/F, C C WU BUILDING
-				    999077
-				HK
-
-E0-C8-6A   (hex)		SHENZHEN TW-SCIE Co., Ltd
-E0C86A     (base 16)		SHENZHEN TW-SCIE Co., Ltd
-				816# DongMing Building MinKang Road
-				Shenzhen  Guangdong  518000
-				CN
-
-BC-EE-7B   (hex)		ASUSTek COMPUTER INC.
-BCEE7B     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-34-13-A8   (hex)		Mediplan Limited
-3413A8     (base 16)		Mediplan Limited
-				245 Sheffield Road
-				Sheffield  South Yorkshire  S13 9ZD
-				GB
-
-7C-97-63   (hex)		Openmatics s.r.o.
-7C9763     (base 16)		Openmatics s.r.o.
-				Poděbradova 2842/1
-				Pilsen  Tschechien  30100
-				CZ
-
-48-A2-B7   (hex)		Kodofon JSC
-48A2B7     (base 16)		Kodofon JSC
-				97 Moskovskyi pr.
-				Voronezh    394077
-				RU
-
-CC-74-98   (hex)		Filmetrics Inc.
-CC7498     (base 16)		Filmetrics Inc.
-				3560 Dunhill Street, #100
-				San Diego  CA  92121
-				US
-
-08-5A-E0   (hex)		Recovision Technology Co., Ltd.
-085AE0     (base 16)		Recovision Technology Co., Ltd.
-				1709，No.5 Wanghai Road,
-				Xiamen  Fujian  361006
-				CN
-
-20-E7-91   (hex)		Siemens Healthcare Diagnostics, Inc
-20E791     (base 16)		Siemens Healthcare Diagnostics, Inc
-				2 Edgewater Drive
-				Norwood  MA  02062
-				US
-
-08-97-58   (hex)		Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary
-089758     (base 16)		Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary
-				QingPing Road 2,Qinghutou village
-				DongGuan  GuangDong  523711
-				CN
-
-FC-19-D0   (hex)		Cloud Vision Networks Technology Co.,Ltd.
-FC19D0     (base 16)		Cloud Vision Networks Technology Co.,Ltd.
-				F/9,Hechuan Building 2016
-				Shanghai    201103
-				CN
-
-94-86-D4   (hex)		Surveillance Pro Corporation
-9486D4     (base 16)		Surveillance Pro Corporation
-				12F., No.4, Ln. 609, Sec. 5, Chongxin Rd., Sanchong Dist.
-				New Taipei City    241
-				US
-
-9C-D6-43   (hex)		D-Link International
-9CD643     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-3C-18-A0   (hex)		Luxshare Precision Industry Company Limited
-3C18A0     (base 16)		Luxshare Precision Industry Company Limited
-				Floor 2, Block A, Sanyo New Industrial Area
-				West Haoyi Community, Shajing Subdistrict Office  Bao'an District, Shenzhen, Guangdong  523000
-				CN
-
-8C-AE-89   (hex)		Y-cam Solutions Ltd
-8CAE89     (base 16)		Y-cam Solutions Ltd
-				3 dee road
-				Richmond  Surrey  TW9 2JN
-				GB
-
-94-E9-8C   (hex)		Nokia
-94E98C     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-FC-E1-D9   (hex)		Stable Imaging Solutions LLC
-FCE1D9     (base 16)		Stable Imaging Solutions LLC
-				3709 Old Conejo Rd
-				Newbury Park  CA  91320
-				US
-
-50-20-6B   (hex)		Emerson Climate Technologies Transportation Solutions
-50206B     (base 16)		Emerson Climate Technologies Transportation Solutions
-				Axel Kiers Vej  5A
-				Hoejbjerg    8270
-				DK
-
-7C-BF-88   (hex)		Mobilicom LTD
-7CBF88     (base 16)		Mobilicom LTD
-				Hametzoda 31
-				Azor    5800174
-				IL
-
-60-DB-2A   (hex)		HNS
-60DB2A     (base 16)		HNS
-				345-50, Gasan-dong, Geumcheon-gu, Seoul, Korea[153-707]
-				Seoul  The Seoul Metropolis  82
-				KR
-
-B0-45-45   (hex)		YACOUB Automation GmbH
-B04545     (base 16)		YACOUB Automation GmbH
-				Gustav Meyer Allee 25
-				Berlin    13355
-				DE
-
-C8-EE-75   (hex)		Pishion International Co. Ltd
-C8EE75     (base 16)		Pishion International Co. Ltd
-				3F,NO,15-2,Beihuan Rd
-				Taichung City    42760
-				TW
-
-CC-34-29   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-CC3429     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-64-BA-BD   (hex)		SDJ Technologies, Inc.
-64BABD     (base 16)		SDJ Technologies, Inc.
-				2125-B Madera Road
-				Simi Valley  CA  93065
-				US
-
-24-C8-48   (hex)		mywerk Portal GmbH
-24C848     (base 16)		mywerk Portal GmbH
-				Fabrikstr. 3
-				Gronau     48599 
-				DE
-
-CC-FB-65   (hex)		Nintendo Co., Ltd.
-CCFB65     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-A0-A2-3C   (hex)		GPMS
-A0A23C     (base 16)		GPMS
-				40 Ridge Rd
-				Cornwall  VT  05753
-				US
-
-68-FC-B3   (hex)		Next Level Security Systems, Inc.
-68FCB3     (base 16)		Next Level Security Systems, Inc.
-				6353 Corte Del Abeto
-				Carlsbad  CA  92011
-				US
-
-94-C3-E4   (hex)		Atlas Copco IAS GmbH
-94C3E4     (base 16)		Atlas Copco IAS GmbH
-				Gewerbestr. 52
-				Bretten-Goelshausen    75015
-				DE
-
-34-88-5D   (hex)		Logitech Far East
-34885D     (base 16)		Logitech Far East
-				#2 Creation Rd. 4,
-				Hsinchu    300
-				TW
-
-88-57-6D   (hex)		XTA Electronics Ltd
-88576D     (base 16)		XTA Electronics Ltd
-				The Design House
-				Stourport-on-Severn  Worcestershire  DY13 9BZ
-				GB
-
-BC-41-00   (hex)		CODACO ELECTRONIC s.r.o.
-BC4100     (base 16)		CODACO ELECTRONIC s.r.o.
-				Hemy 825
-				Valasske Mezirici    75701
-				CZ
-
-FC-D8-17   (hex)		Beijing Hesun Technologies Co.Ltd.
-FCD817     (base 16)		Beijing Hesun Technologies Co.Ltd.
-				Room 1811, 18th floor, Building No. 4, Courtyard 1, Shangdi tenth Street
-				  Beijing  100085
-				CN
-
-68-2D-DC   (hex)		Wuhan Changjiang Electro-Communication Equipment CO.,LTD
-682DDC     (base 16)		Wuhan Changjiang Electro-Communication Equipment CO.,LTD
-				No.8,Yinghu Sience&Technology industrial park
-				Wuhan  Hubei  430040
-				CN
-
-E8-61-1F   (hex)		Dawning Information Industry Co.,Ltd
-E8611F     (base 16)		Dawning Information Industry Co.,Ltd
-				NO.15 Huake Street,Hi-Tech Zone
-				   Tianjin  300384
-				CN
-
-28-47-AA   (hex)		Nokia Corporation
-2847AA     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-5C-D6-1F   (hex)		Qardio, Inc
-5CD61F     (base 16)		Qardio, Inc
-				340 S Lemon Ave #1104F
-				Walnut  California  91789
-				US
-
-70-59-57   (hex)		Medallion Instrumentation Systems
-705957     (base 16)		Medallion Instrumentation Systems
-				17150 Hickory St
-				Spring Lake  MI  49456
-				US
-
-9C-44-3D   (hex)		CHENGDU XUGUANG TECHNOLOGY CO, LTD
-9C443D     (base 16)		CHENGDU XUGUANG TECHNOLOGY CO, LTD
-				2ND SECTION,PARK ROAD
-				CHENGDU  SICHUAN  610100
-				CN
-
-B4-24-E7   (hex)		Codetek Technology Co.,Ltd
-B424E7     (base 16)		Codetek Technology Co.,Ltd
-				4F.-1, No.55, Dongguang Rd., East Dist.,
-				Hsinchu City    300
-				TW
-
-54-2F-89   (hex)		Euclid Laboratories, Inc.
-542F89     (base 16)		Euclid Laboratories, Inc.
-				9151 Arvida Ln
-				Coral Gables  Florida  33156
-				US
-
-90-99-16   (hex)		ELVEES NeoTek OJSC
-909916     (base 16)		ELVEES NeoTek OJSC
-				Proezd 4922, dom 4, stroenie 2
-				Moscow  Zelenograd  124498
-				RU
-
-00-A2-FF   (hex)		abatec group AG
-00A2FF     (base 16)		abatec group AG
-				Oberregauerstraße 48
-				Regau    4844
-				AT
-
-60-24-C1   (hex)		Jiangsu Zhongxun Electronic Technology Co., Ltd
-6024C1     (base 16)		Jiangsu Zhongxun Electronic Technology Co., Ltd
-				tangshu road #8
-				yixing  jiangsu  214221
-				CN
-
-A0-14-3D   (hex)		PARROT SA
-A0143D     (base 16)		PARROT SA
-				174 Quai de Jemmapes
-				Paris    75010
-				FR
-
-FC-1B-FF   (hex)		V-ZUG AG
-FC1BFF     (base 16)		V-ZUG AG
-				Industriestrasse 66
-				  Zug  6301
-				CH
-
-F4-28-96   (hex)		SPECTO PAINEIS ELETRONICOS LTDA
-F42896     (base 16)		SPECTO PAINEIS ELETRONICOS LTDA
-				RUA WALTER JOSE CORREA, AREA 12
-				SAO JOSE  SANTA CATARINA  88122-035
-				BR
-
-78-CB-33   (hex)		DHC Software Co.,Ltd
-78CB33     (base 16)		DHC Software Co.,Ltd
-				16/F,DHC Mansion No.3 Zijin
-				Beijing    100190
-				CN
-
-60-A9-B0   (hex)		Merchandising Technologies, Inc
-60A9B0     (base 16)		Merchandising Technologies, Inc
-				1050 NW 229th Avenue
-				HIllsboro  OR  97124
-				US
-
-50-27-C7   (hex)		TECHNART Co.,Ltd
-5027C7     (base 16)		TECHNART Co.,Ltd
-				2-21 Nishiohjicho
-				Kusatsu  Shiga  525-0037
-				JP
-
-6C-5A-B5   (hex)		TCL Technoly Electronics (Huizhou) Co., Ltd.
-6C5AB5     (base 16)		TCL Technoly Electronics (Huizhou) Co., Ltd.
-				19th Zhongkai Hi-tech Development Zone
-				Huizhou  Guangdong  516006
-				CN
-
-38-5A-A8   (hex)		Beijing Zhongdun Security Technology Development Co.
-385AA8     (base 16)		Beijing Zhongdun Security Technology Development Co.
-				No.1 Capital Gymnasium South Road
-				  Beijing  100048
-				CN
-
-F4-A2-94   (hex)		EAGLE WORLD DEVELOPMENT CO., LIMITED
-F4A294     (base 16)		EAGLE WORLD DEVELOPMENT CO., LIMITED
-				1F, CMA Bldg., 64 Connaught Road Central
-				  Hong Kong  00852
-				HK
-
-EC-3E-09   (hex)		PERFORMANCE DESIGNED PRODUCTS, LLC
-EC3E09     (base 16)		PERFORMANCE DESIGNED PRODUCTS, LLC
-				14144 Ventura Blvd
-				Sherman Oaks  California  91423
-				US
-
-94-7C-3E   (hex)		Polewall Norge AS
-947C3E     (base 16)		Polewall Norge AS
-				Vige Havnevei 78
-				Kristiansand  Vest-Agder  4633
-				NO
-
-34-A3-BF   (hex)		Terewave. Inc.
-34A3BF     (base 16)		Terewave. Inc.
-				Room 217, Ssangyong Research Center
-				Yuseong-gu  Daejeon-city  305804
-				KR
-
-8C-08-8B   (hex)		Remote Solution
-8C088B     (base 16)		Remote Solution
-				92, Chogokri, Nammyun
-				Kimcheon city  Kyungbuk  740-871
-				KR
-
-B4-3E-3B   (hex)		Viableware, Inc
-B43E3B     (base 16)		Viableware, Inc
-				12220 113th Ave NE
-				Kirkland  WA  98034
-				US
-
-0C-5C-D8   (hex)		DOLI Elektronik GmbH
-0C5CD8     (base 16)		DOLI Elektronik GmbH
-				Adi-Maislinger-Str. 7
-				Munich    81373
-				DE
-
-3C-15-EA   (hex)		TESCOM CO., LTD.
-3C15EA     (base 16)		TESCOM CO., LTD.
-				#928 UTV, 1141-2 Baeksuk Ilsandong
-				Goyang  Gyeonggi  410-722
-				KR
-
-E8-04-10   (hex)		Private
-E80410     (base 16)		Private
-
-F4-BD-7C   (hex)		Chengdu jinshi communication Co., LTD
-F4BD7C     (base 16)		Chengdu jinshi communication Co., LTD
-				No. 108 #1-2-505, Eastern 5 Section, First Ring Road, JinJiang District,
-				Chengdu  Chongqing  610000
-				CN
-
-DC-C4-22   (hex)		Systembase Limited
-DCC422     (base 16)		Systembase Limited
-				Jupes Field House, Pettridge Lane
-				Warminster  Wiltshire  BA12 6DG
-				GB
-
-C8-F3-6B   (hex)		Yamato Scale Co.,Ltd.
-C8F36B     (base 16)		Yamato Scale Co.,Ltd.
-				5-22
-				Akashi  Hyogo  673-8688
-				JP
-
-98-F8-C1   (hex)		IDT Technology Limited
-98F8C1     (base 16)		IDT Technology Limited
-				Block C, 9/F.,Kaiser Estate, Phase 1,
-				Kowloon  Hong Kong  
-				HK
-
-6C-D1-B0   (hex)		WING SING ELECTRONICS HONG KONG LIMITED
-6CD1B0     (base 16)		WING SING ELECTRONICS HONG KONG LIMITED
-				No. 1, Guoyuan Industrial Zone
-				Guangzhou  Guang Dong  510385
-				CN
-
-A4-F5-22   (hex)		CHOFU SEISAKUSHO CO.,LTD
-A4F522     (base 16)		CHOFU SEISAKUSHO CO.,LTD
-				2-1
-				Shimonoseki-shi  Yamaguchi  752-8555
-				JP
-
-84-5C-93   (hex)		Chabrier Services
-845C93     (base 16)		Chabrier Services
-				354 Chemin de la Pinatte
-				Saint-Peray    07130
-				FR
-
-68-E1-66   (hex)		Private
-68E166     (base 16)		Private
-
-BC-2B-D7   (hex)		Revogi Innovation Co., Ltd.
-BC2BD7     (base 16)		Revogi Innovation Co., Ltd.
-				2018, Anhui Building, No. 6007,
-				Shenzhen,  Guangdong  518113
-				CN
-
-28-6D-97   (hex)		SAMJIN Co., Ltd.
-286D97     (base 16)		SAMJIN Co., Ltd.
-				199-6, Anyang 7-dong, Manan-gu
-				Anyang-si  Gyeonggi-do  430-817
-				KR
-
-24-EC-D6   (hex)		CSG Science & Technology Co.,Ltd.Hefei
-24ECD6     (base 16)		CSG Science & Technology Co.,Ltd.Hefei
-				No.612-1,Huangshan Road,Gaoxin District
-				Hefei  Anhui Province  230088
-				CN
-
-CC-2A-80   (hex)		Micro-Biz intelligence solutions Co.,Ltd
-CC2A80     (base 16)		Micro-Biz intelligence solutions Co.,Ltd
-				Room 611,Sunshine Building
-				Zhuhai City  Guangdong Province  519000
-				CN
-
-60-FE-F9   (hex)		Thomas & Betts
-60FEF9     (base 16)		Thomas & Betts
-				5900 Eastport Blvd
-				Richmond  VA  23231
-				US
-
-B8-DC-87   (hex)		IAI Corporation
-B8DC87     (base 16)		IAI Corporation
-				577-1 Obane
-				Shizuoka-City  Shizuoka  424-0103
-				JP
-
-7C-6F-F8   (hex)		ShenZhen ACTO Digital Video Technology Co.,Ltd.
-7C6FF8     (base 16)		ShenZhen ACTO Digital Video Technology Co.,Ltd.
-				3/F,Building 7,Software Park
-				ShenZhen  GuangDong  518055
-				CN
-
-DC-F7-55   (hex)		SITRONIK
-DCF755     (base 16)		SITRONIK
-				22 MARISCHAL GARDENS
-				ABERDEEN  ABERDEENSHIRE  AB21 9BY
-				GB
-
-5C-02-6A   (hex)		Applied Vision Corporation
-5C026A     (base 16)		Applied Vision Corporation
-				2020 Vision Lane
-				Cuyahoga Falls  OH  44223
-				US
-
-0C-93-01   (hex)		PT. Prasimax Inovasi Teknologi
-0C9301     (base 16)		PT. Prasimax Inovasi Teknologi
-				Jl. Margonda Raya 494D
-				Depok  Jawa Barat  16424
-				ID
-
-74-66-30   (hex)		T:mi Ytti
-746630     (base 16)		T:mi Ytti
-				Messitytonkatu 8 C 39
-				Helsinki  n/a  00180
-				FI
-
-6C-B3-50   (hex)		Anhui comhigher tech co.,ltd
-6CB350     (base 16)		Anhui comhigher tech co.,ltd
-				B6,717 Zhongshan South Road
-				Wuhu  Anhui  241000
-				CN
-
-38-59-F8   (hex)		MindMade Sp. z o.o.
-3859F8     (base 16)		MindMade Sp. z o.o.
-				Sniadeckich 10
-				Warsaw    00-656
-				PL
-
-4C-DF-3D   (hex)		TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD
-4CDF3D     (base 16)		TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD
-				A-1/2/A,IDA UPPAL,
-				HYDERABAD  AP  500039
-				IN
-
-E8-92-18   (hex)		Arcontia International AB
-E89218     (base 16)		Arcontia International AB
-				Gruvgatan 35A
-				Vastra Frolunda    421 30
-				SE
-
-00-75-E1   (hex)		Ampt, LLC
-0075E1     (base 16)		Ampt, LLC
-				4850 Innovation Drive
-				Fort Collins  Colorado  80525
-				US
-
-98-CD-B4   (hex)		Virident Systems, Inc.
-98CDB4     (base 16)		Virident Systems, Inc.
-				500 Yosemite Dr.
-				Milpitas  CA  95035
-				US
-
-A4-23-05   (hex)		Open Networking Laboratory
-A42305     (base 16)		Open Networking Laboratory
-				1000 El Camino Real
-				Menlo Park  CA  94025
-				US
-
-1C-48-F9   (hex)		GN Netcom A/S
-1C48F9     (base 16)		GN Netcom A/S
-				Lautrupbjerg 7
-				Ballerup  Ballerup  DK-2750
-				DK
-
-B0-FE-BD   (hex)		Private
-B0FEBD     (base 16)		Private
-
-60-69-9B   (hex)		isepos GmbH
-60699B     (base 16)		isepos GmbH
-				Wannweiler Str. 12
-				Kirchentellinsfurt    72138
-				US
-
-D4-D5-0D   (hex)		Southwest Microwave, Inc
-D4D50D     (base 16)		Southwest Microwave, Inc
-				9055 S McKemy St
-				Tempe  AZ  85284
-				US
-
-34-CD-6D   (hex)		CommSky Technologies
-34CD6D     (base 16)		CommSky Technologies
-				4655 Old Ironsides Dr
-				Santa Clara  CA  95054
-				US
-
-E4-F3-E3   (hex)		Shanghai iComhome Co.,Ltd.
-E4F3E3     (base 16)		Shanghai iComhome Co.,Ltd.
-				Small second floor of No.773 Siping Road
-				  Shanghai  200092
-				CN
-
-90-46-B7   (hex)		Vadaro Pte Ltd
-9046B7     (base 16)		Vadaro Pte Ltd
-				71 Ayer Rajah Crescent
-				    139951
-				SG
-
-04-CF-25   (hex)		MANYCOLORS, INC.
-04CF25     (base 16)		MANYCOLORS, INC.
-				3F, 4-1-18 Jinnoharu
-				Kitakyushu  Fukuoka  8070821
-				JP
-
-80-BB-EB   (hex)		Satmap Systems Ltd
-80BBEB     (base 16)		Satmap Systems Ltd
-				4 Fountain House
-				Leatherhead  Surrey  KT22 7LX
-				GB
-
-00-B7-8D   (hex)		Nanjing Shining Electric Automation Co., Ltd
-00B78D     (base 16)		Nanjing Shining Electric Automation Co., Ltd
-				NO.699,Laiyinda Road
-				Nanjing  Jiangsu  211100
-				CN
-
-60-FE-1E   (hex)		China Palms Telecom.Ltd
-60FE1E     (base 16)		China Palms Telecom.Ltd
-				2nd Floor of Building 1
-				PuDong District  Shanghai  201203
-				US
-
-B0-50-BC   (hex)		SHENZHEN BASICOM ELECTRONIC CO.,LTD.
-B050BC     (base 16)		SHENZHEN BASICOM ELECTRONIC CO.,LTD.
-				Basicom industry park, Baolong Avenue 3rd Road, Baolong industry town
-				Shenzhen  Guangdong  518116
-				CN
-
-84-1E-26   (hex)		KERNEL-I Co.,LTD
-841E26     (base 16)		KERNEL-I Co.,LTD
-				#606,ACE Techno Tower 10,470-5
-				Gasan-Dong, Geumcheon-gu, Seoul  Korea  153-789
-				KR
-
-B4-34-6C   (hex)		MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED
-B4346C     (base 16)		MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED
-				22/F. TWO INTERNATIONAL FINANCE CTR
-				Hong Kong  Hong Kong  999077
-				HK
-
-00-86-A0   (hex)		Private
-0086A0     (base 16)		Private
-
-A0-5B-21   (hex)		ENVINET GmbH
-A05B21     (base 16)		ENVINET GmbH
-				Hans-Pinsel-Str. 4
-				Haar    85540
-				DE
-
-50-B8-A2   (hex)		ImTech Technologies LLC,
-50B8A2     (base 16)		ImTech Technologies LLC,
-				2101 NE Jack London St
-				Corvallis  Oregon  97330
-				US
-
-B0-4C-05   (hex)		Fresenius Medical Care Deutschland GmbH
-B04C05     (base 16)		Fresenius Medical Care Deutschland GmbH
-				Hafenstr. 9
-				Schweinfurt    97424
-				DE
-
-B0-79-3C   (hex)		Revolv Inc
-B0793C     (base 16)		Revolv Inc
-				2060 Broadway #380
-				Boulder  CO  80302
-				US
-
-9C-4E-BF   (hex)		BoxCast
-9C4EBF     (base 16)		BoxCast
-				14538 Grapeland Ave
-				Cleveland  Ohio  44111
-				US
-
-34-A8-43   (hex)		KYOCERA Display Corporation
-34A843     (base 16)		KYOCERA Display Corporation
-				5-7-18 Higashinippori
-				Arakawa-ku  Tokyo  116-0014
-				JP
-
-74-CA-25   (hex)		Calxeda, Inc.
-74CA25     (base 16)		Calxeda, Inc.
-				7000 North Mopac Expressway
-				Austin  TX  78731
-				US
-
-5C-A3-EB   (hex)		Lokel s.r.o.
-5CA3EB     (base 16)		Lokel s.r.o.
-				Moravska 797/85
-				Ostrava  Moravskoslezsky  700 30
-				CZ
-
-C8-B3-73   (hex)		Cisco-Linksys, LLC
-C8B373     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-0C-2A-E7   (hex)		Beijing General Research Institute of Mining and Metallurgy
-0C2AE7     (base 16)		Beijing General Research Institute of Mining and Metallurgy
-				Building 23, Zone 18 of ABP, No. 188
-				  Beijing  100160
-				CN
-
-98-30-71   (hex)		DAIKYUNG VASCOM
-983071     (base 16)		DAIKYUNG VASCOM
-				DAIKYUNG Bldg.#1164-15,Gaepo-dong
-				Gangnam-gu  Seoul  135-960
-				KR
-
-D4-95-24   (hex)		Clover Network, Inc.
-D49524     (base 16)		Clover Network, Inc.
-				415 N Mathilda Ave
-				Sunnyvale  CA  94085
-				US
-
-94-50-47   (hex)		Rechnerbetriebsgruppe
-945047     (base 16)		Rechnerbetriebsgruppe
-				Werner von Siemens Str. 64
-				Würzburg  Bayern  97076
-				DE
-
-E0-31-D0   (hex)		SZ Telstar CO., LTD
-E031D0     (base 16)		SZ Telstar CO., LTD
-				Telstar Technology Park No.12&14, Longtong Industrial Zone
-				Shenzhen  Guangdong  518172
-				CN
-
-54-11-2F   (hex)		Sulzer Pump Solutions Finland Oy
-54112F     (base 16)		Sulzer Pump Solutions Finland Oy
-				Lentokentaentie 44
-				Lappeenranta    FI-53600
-				FI
-
-4C-55-B8   (hex)		Turkcell Teknoloji
-4C55B8     (base 16)		Turkcell Teknoloji
-				TUBITAK MAM Teknoloji Serbest Bolgesi Gebze
-				Kocaeli    41470
-				TR
-
-08-80-39   (hex)		Cisco SPVTG
-088039     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-E4-38-F2   (hex)		Advantage Controls
-E438F2     (base 16)		Advantage Controls
-				4700 Harold Abitz Dr.
-				Muskogee  OK  74403
-				US
-
-C4-C7-55   (hex)		Beijing HuaqinWorld Technology Co.,Ltd
-C4C755     (base 16)		Beijing HuaqinWorld Technology Co.,Ltd
-				30F,Beijing Silver Tower,No.2 North Road,
-				  Beijing  100027
-				CN
-
-0C-2D-89   (hex)		QiiQ Communications Inc.
-0C2D89     (base 16)		QiiQ Communications Inc.
-				30 East Beaver Creek Road
-				Richmond Hill  Ontario  L4B 1J2
-				CA
-
-A8-D2-36   (hex)		Lightware Visual Engineering
-A8D236     (base 16)		Lightware Visual Engineering
-				Peterdy utca 15.
-				  Budapest  H-1071
-				HU
-
-98-10-94   (hex)		Shenzhen Vsun communication technology Co.,ltd
-981094     (base 16)		Shenzhen Vsun communication technology Co.,ltd
-				Room 1903, Block A,
-				Shenzhen  Guangdong  518000
-				CN
-
-A4-F3-C1   (hex)		Open Source Robotics Foundation, Inc.
-A4F3C1     (base 16)		Open Source Robotics Foundation, Inc.
-				419 N Shoreline Blvd
-				Mountain View  CA  94043
-				US
-
-14-13-30   (hex)		Anakreon UK LLP
-141330     (base 16)		Anakreon UK LLP
-				5-th Floor
-				  London  EC3V 0EH
-				GB
-
-0C-F4-05   (hex)		Beijing Signalway Technologies Co.,Ltd
-0CF405     (base 16)		Beijing Signalway Technologies Co.,Ltd
-				Room B 1905,Tri-tower
-				Haidian District  Beijing  100190
-				CN
-
-50-61-D6   (hex)		Indu-Sol GmbH
-5061D6     (base 16)		Indu-Sol GmbH
-				Blumenstr. 3
-				Schmölln  Thüringen  04626
-				DE
-
-DC-70-14   (hex)		Private
-DC7014     (base 16)		Private
-
-78-8D-F7   (hex)		Hitron Technologies. Inc
-788DF7     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-2C-24-5F   (hex)		Babolat VS
-2C245F     (base 16)		Babolat VS
-				93 rue Andre Bollier
-				  Lyon  69007
-				FR
-
-90-56-92   (hex)		Autotalks Ltd.
-905692     (base 16)		Autotalks Ltd.
-				Kfar Netter
-				  Israel  40593
-				IL
-
-04-BF-A8   (hex)		ISB Corporation
-04BFA8     (base 16)		ISB Corporation
-				1-2-1 Shinyokohama, Kohoku-ku
-				Yokohama  Kanagawa  222-0033
-				JP
-
-8C-C7-D0   (hex)		zhejiang ebang communication co.,ltd
-8CC7D0     (base 16)		zhejiang ebang communication co.,ltd
-				1418-36#,Moganshan Road
-				hangzhou  zhejiang  310013
-				CN
-
-B8-AE-6E   (hex)		Nintendo Co., Ltd.
-B8AE6E     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-D0-EB-03   (hex)		Zhehua technology limited
-D0EB03     (base 16)		Zhehua technology limited
-				Room 2206,No 1079,A,ZhanTao Technology Building, MinZhi Street, Longhua District
-				Tortoal British Virgin Island,Hong Kong  Shenzhen,Guang Dong  518131
-				CN
-
-68-3E-EC   (hex)		ERECA
-683EEC     (base 16)		ERECA
-				75, Rue d&#39;Orgemont
-				Saint GRATIEN    95210
-				FR
-
-C4-26-28   (hex)		Airo Wireless
-C42628     (base 16)		Airo Wireless
-				12 Piedmont Center
-				Atlanta  GA  30305
-				US
-
-30-AA-BD   (hex)		Shanghai Reallytek Information Technology Co.,Ltd
-30AABD     (base 16)		Shanghai Reallytek Information Technology Co.,Ltd
-				Building No.1-906, No.3000 Long Dong Avenue
-				Shanghai    201203
-				CN
-
-A4-B8-18   (hex)		PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH
-A4B818     (base 16)		PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH
-				Ulrichsberger Str. 17
-				Deggendorf    94469
-				DE
-
-C0-4D-F7   (hex)		SERELEC
-C04DF7     (base 16)		SERELEC
-				2, Chemin du Génie
-				VENISSIEUX CEDEX    69633
-				FR
-
-0C-84-84   (hex)		Zenovia Electronics Inc.
-0C8484     (base 16)		Zenovia Electronics Inc.
-				#206, 506B St. Albert Rd.
-				St. Albert  AB  T8N 5Z1
-				CA
-
-00-59-07   (hex)		LenovoEMC Products USA, LLC
-005907     (base 16)		LenovoEMC Products USA, LLC
-				22 South St
-				Hopinkton  MA  01748
-				US
-
-50-A7-15   (hex)		Aboundi, Inc.
-50A715     (base 16)		Aboundi, Inc.
-				4 Bud Way, Unit 10
-				Nashua  NH  03063
-				US
-
-0C-04-00   (hex)		Jantar d.o.o.
-0C0400     (base 16)		Jantar d.o.o.
-				Kranjska cesta 24
-				Naklo  Slovenia  4202
-				SI
-
-68-7C-D5   (hex)		Y Soft Corporation, a.s.
-687CD5     (base 16)		Y Soft Corporation, a.s.
-				Technicka 2948/13
-				Brno  Czech Republic  616 00
-				CZ
-
-90-7A-F1   (hex)		Wally
-907AF1     (base 16)		Wally
-				1415 NE 45th St
-				Seattle  WA  98105
-				US
-
-2C-B6-93   (hex)		Radware
-2CB693     (base 16)		Radware
-				22 Raoul Wallenberg St.
-				Tel-Aviv    69710
-				IL
-
-A8-61-AA   (hex)		Cloudview Limited
-A861AA     (base 16)		Cloudview Limited
-				Kingsway House
-				St Peter Port  Guernsey  GY1 2QE
-				GB
-
-FC-11-86   (hex)		Logic3 plc
-FC1186     (base 16)		Logic3 plc
-				Rhodes Way
-				Watford  Hertfordshire  WD24 4YW
-				GB
-
-E0-18-77   (hex)		FUJITSU LIMITED
-E01877     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-E4-57-A8   (hex)		Stuart Manufacturing, Inc.
-E457A8     (base 16)		Stuart Manufacturing, Inc.
-				1615 East Wallace Street
-				Fort Wayne  Indiana  46803
-				US
-
-78-99-66   (hex)		Musilab Electronics (DongGuan)Co.,Ltd.
-789966     (base 16)		Musilab Electronics (DongGuan)Co.,Ltd.
-				A2, LinDong 3 Road, LinCun
-				DongGuan  Guangdong  523710
-				CN
-
-28-CB-EB   (hex)		One
-28CBEB     (base 16)		One
-				Mechelsesteenweg 326
-				Edegem  Antwerpen  2650
-				BE
-
-7C-A1-5D   (hex)		GN ReSound A/S
-7CA15D     (base 16)		GN ReSound A/S
-				Lautrupbjerg 7
-				Ballerup  DK-CPH  2750
-				DK
-
-3C-08-1E   (hex)		Beijing Yupont Electric Power Technology Co.,Ltd
-3C081E     (base 16)		Beijing Yupont Electric Power Technology Co.,Ltd
-				No.1,Dizang-an Nanxiang
-				  Beijing  100045
-				CN
-
-FC-58-FA   (hex)		Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.
-FC58FA     (base 16)		Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.
-				Block 3, Dong Huan Industrial Zone, Sha Jing Town
-				Shen Zhen  Guang Dong  518000
-				CN
-
-4C-CC-34   (hex)		Motorola Solutions Inc.
-4CCC34     (base 16)		Motorola Solutions Inc.
-				One Motorola Plaza
-				Holtsville  NY  11742
-				US
-
-D0-D4-71   (hex)		MVTECH co., Ltd
-D0D471     (base 16)		MVTECH co., Ltd
-				#1004, Hanshin IT Tower, 235, Guro 3-dong, Guro-Gu
-				SEOUL    152-768
-				KR
-
-08-68-D0   (hex)		Japan System Design
-0868D0     (base 16)		Japan System Design
-				Skyhills Deshio 3F
-				  Hiroshima  734-0001
-				JP
-
-D4-22-3F   (hex)		Lenovo Mobile Communication Technology Ltd.
-D4223F     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone,
-				Xiamen  Fujian  361006
-				US
-
-C8-EE-A6   (hex)		Shenzhen SHX Technology Co., Ltd
-C8EEA6     (base 16)		Shenzhen SHX Technology Co., Ltd
-				6F,No.10 buliding,JiuXiangling Industial Zone,Xili,
-				Shenzhen  Guangdong  518055
-				CN
-
-24-81-AA   (hex)		KSH International Co., Ltd.
-2481AA     (base 16)		KSH International Co., Ltd.
-				2F, No.17 Minsheng Rd, Xindian Dist.,
-				New Taipei City    23150
-				US
-
-AC-41-22   (hex)		Eclipse Electronic Systems Inc.
-AC4122     (base 16)		Eclipse Electronic Systems Inc.
-				17111 Waterview Parkway
-				Dallas  TX  75252
-				US
-
-68-97-E8   (hex)		Society of Motion Picture &amp; Television Engineers
-6897E8     (base 16)		Society of Motion Picture &amp; Television Engineers
-				3 Barker Ave. FL5
-				White Plains  NY  10601
-				US
-
-E8-E8-75   (hex)		iS5 Communications Inc.
-E8E875     (base 16)		iS5 Communications Inc.
-				#1-1815 Meyerside Drive
-				Mississauga  Ontario  L5T 1G3
-				CA
-
-C8-0E-95   (hex)		OmniLync Inc.
-C80E95     (base 16)		OmniLync Inc.
-				51a Bennington St.
-				Newton  MA  02458
-				US
-
-30-05-5C   (hex)		Brother industries, LTD.
-30055C     (base 16)		Brother industries, LTD.
-				1-1-1, Kawagishi, Mizuho-ku,
-				Nagoya  Aichi  467-8562
-				JP
-
-08-0E-A8   (hex)		Velex s.r.l.
-080EA8     (base 16)		Velex s.r.l.
-				Via Dell&#39;Artigianato 56
-				Vigodarzere  Padova  35010
-				IT
-
-B8-C4-6F   (hex)		PRIMMCON INDUSTRIES INC
-B8C46F     (base 16)		PRIMMCON INDUSTRIES INC
-				137 MinQuan Rd, 5th Floor,
-				New Taipei    23141
-				TW
-
-D8-B0-2E   (hex)		Guangzhou Zonerich Business Machine Co., LTD.
-D8B02E     (base 16)		Guangzhou Zonerich Business Machine Co., LTD.
-				North Gate, No.17 Yunjun Road, Luogang District
-				 Guangzhou  Guangdong  510530
-				CN
-
-C4-E0-32   (hex)		IEEE 1904.1 Working Group
-C4E032     (base 16)		IEEE 1904.1 Working Group
-				1351 Redwood Way,
-				Petaluma  CA  94954
-				US
-
-58-EB-14   (hex)		Proteus Digital Health
-58EB14     (base 16)		Proteus Digital Health
-				2600 Bridge Parkway, Ste 101
-				Redwood City  California  94065
-				US
-
-C4-58-C2   (hex)		Shenzhen TATFOOK Technology Co., Ltd.
-C458C2     (base 16)		Shenzhen TATFOOK Technology Co., Ltd.
-				3rd Industrial Area of Shajing Industrial Company, Haoxiang Road
-				Shenzhen  Guangdong  518104
-				CN
-
-D0-CD-E1   (hex)		Scientech Electronics
-D0CDE1     (base 16)		Scientech Electronics
-				4F, No.501-17, Zhong Zheng Rd,
-				New Taipei City    23148
-				TW
-
-5C-E0-CA   (hex)		FeiTian United (Beijing) System Technology Co., Ltd.
-5CE0CA     (base 16)		FeiTian United (Beijing) System Technology Co., Ltd.
-				3 Floor, Tower B, Huizhi Tower
-				Haidian District  Beijing  100085
-				CN
-
-E0-81-77   (hex)		GreenBytes, Inc.
-E08177     (base 16)		GreenBytes, Inc.
-				15 Gray Lane, Suite 301
-				Ashaway  RI  02804
-				US
-
-9C-98-11   (hex)		Guangzhou Sunrise Electronics Development Co., Ltd
-9C9811     (base 16)		Guangzhou Sunrise Electronics Development Co., Ltd
-				12th Floor,368 GuangZhou Avenue South
-				Guangzhou  Guangdong  510300
-				CN
-
-B8-60-91   (hex)		Onnet Technologies and Innovations LLC
-B86091     (base 16)		Onnet Technologies and Innovations LLC
-				1, 82/83 Street, New Industrial Area -II
-				Ajman  Ajman  52141
-				AE
-
-8C-76-C1   (hex)		Goden Tech Limited
-8C76C1     (base 16)		Goden Tech Limited
-				ROOM 510-511C2 NAN FUNG TOWER.,
-				    999077
-				HK
-
-8C-07-8C   (hex)		FLOW DATA INC
-8C078C     (base 16)		FLOW DATA INC
-				2309 GRAND PARK DRIVE
-				GRAND JUNCTION  CO  81505
-				US
-
-F8-DF-A8   (hex)		zte corporation
-F8DFA8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A8-95-B0   (hex)		Aker Subsea Ltd
-A895B0     (base 16)		Aker Subsea Ltd
-				Kiekhill Industrial Estate
-				  Aberdeen  AB51 3XA
-				GB
-
-10-4D-77   (hex)		Innovative Computer Engineering
-104D77     (base 16)		Innovative Computer Engineering
-				10302 Eaton Place STE 100
-				Fairfax  VA  22030
-				US
-
-C4-5D-D8   (hex)		HDMI Forum
-C45DD8     (base 16)		HDMI Forum
-				1140 East Arques Avenue, Suite 900
-				Sunnyvale  CA  94085
-				US
-
-C4-EB-E3   (hex)		RRCN SAS
-C4EBE3     (base 16)		RRCN SAS
-				23 chemin du vieux chene
-				Meylan  Isere  38246
-				FR
-
-94-75-6E   (hex)		QinetiQ North America
-94756E     (base 16)		QinetiQ North America
-				137 Delta Drive
-				Pittsburgh  PA  15238
-				US
-
-4C-1A-95   (hex)		Novakon Co., Ltd.
-4C1A95     (base 16)		Novakon Co., Ltd.
-				6F., No. 120, Lane 235, Pao Chiao Road
-				New Taipei City    23145
-				TW
-
-60-BB-0C   (hex)		Beijing HuaqinWorld Technology Co,Ltd
-60BB0C     (base 16)		Beijing HuaqinWorld Technology Co,Ltd
-				30F,Beijing Silver Tower,No.2 North Road
-				Chao Yang District  Beijing  100027
-				CN
-
-A4-2C-08   (hex)		Masterwork Automodules
-A42C08     (base 16)		Masterwork Automodules
-				11F-3, 3,PARK ST., NAN GANG
-				TAIPEI    11503
-				TW
-
-10-B9-FE   (hex)		Lika srl
-10B9FE     (base 16)		Lika srl
-				Via San Lorenzo 25
-				Carrè  Vicenza  36010
-				IT
-
-30-15-18   (hex)		Ubiquitous Communication Co. ltd.
-301518     (base 16)		Ubiquitous Communication Co. ltd.
-				JEI Platz RM No.410-1
-				  Seoul  153-792
-				KR
-
-84-17-15   (hex)		GP Electronics (HK) Ltd.
-841715     (base 16)		GP Electronics (HK) Ltd.
-				Gold Peak Industrial Building, 6F
-				Kwai Chung  NT  
-				HK
-
-84-8E-96   (hex)		Embertec Pty Ltd
-848E96     (base 16)		Embertec Pty Ltd
-				182 Fullarton Road
-				Dulwich, Adelaide  South Australia  5065
-				AU
-
-64-99-A0   (hex)		AG Elektronik AB
-6499A0     (base 16)		AG Elektronik AB
-				Smidesv 12
-				Staffanstorp    24534
-				SE
-
-08-F1-B7   (hex)		Towerstream Corpration
-08F1B7     (base 16)		Towerstream Corpration
-				55 Hammerlund Way
-				Middletown  RI  02842
-				US
-
-C0-44-E3   (hex)		Shenzhen Sinkna Electronics Co., LTD
-C044E3     (base 16)		Shenzhen Sinkna Electronics Co., LTD
-				9 Building, XinXin Tian Industry Area,
-				Shenzhen  Guangdong  5180000
-				CN
-
-18-55-0F   (hex)		Cisco SPVTG
-18550F     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-18-7A-93   (hex)		AMICCOM Electronics Corporation
-187A93     (base 16)		AMICCOM Electronics Corporation
-				Room A3, 1F., No.1, Lixing 1st Rd
-				Hsinchu    30078
-				TW
-
-88-87-DD   (hex)		DarbeeVision Inc.
-8887DD     (base 16)		DarbeeVision Inc.
-				401 N. Cotswolds Lane #C
-				Orange  California  92869
-				US
-
-30-C8-2A   (hex)		WI-BIZ srl
-30C82A     (base 16)		WI-BIZ srl
-				Via Carlo Ferrero 10
-				Cascine Vica Rivoli  Torino  10098
-				IT
-
-88-A3-CC   (hex)		Amatis Controls
-88A3CC     (base 16)		Amatis Controls
-				 210 Aspen Airport Business Center, Suite A
-				Aspen  CO  81611
-				US
-
-C0-A0-C7   (hex)		FAIRFIELD INDUSTRIES
-C0A0C7     (base 16)		FAIRFIELD INDUSTRIES
-				1111 GILLINGHAM LANE
-				SUGAR LAND  TEXAS  77478
-				US
-
-DC-A9-89   (hex)		MACANDC
-DCA989     (base 16)		MACANDC
-				2-nd Filevskaya str.7/6
-				Moscow    121096
-				RU
-
-A0-03-63   (hex)		Robert Bosch Healthcare GmbH
-A00363     (base 16)		Robert Bosch Healthcare GmbH
-				Stuttgarter Stra
-				Waiblingen  Baden-Württemberg  71332
-				DE
-
-D0-B4-98   (hex)		Robert Bosch LLC Automotive Electronics
-D0B498     (base 16)		Robert Bosch LLC Automotive Electronics
-				15000 N Haggerty
-				Plymouth  Michigan  48170
-				US
-
-E0-55-97   (hex)		Emergent Vision Technologies Inc.
-E05597     (base 16)		Emergent Vision Technologies Inc.
-				SUITE# 239 - 552A CLARKE ROAD
-				COQUITLAM  British Columbia  V3J 0A3
-				CA
-
-7C-43-8F   (hex)		E-Band Communications Corp.
-7C438F     (base 16)		E-Band Communications Corp.
-				10095 Scripps Ranch Ct.  Ste A
-				San Diego  CA  92131
-				US
-
-A0-E2-5A   (hex)		Amicus SK, s.r.o.
-A0E25A     (base 16)		Amicus SK, s.r.o.
-				Koreszkova 9
-				Skalica  Trnavsky kraj  90901
-				SK
-
-D4-0F-B2   (hex)		Applied Micro Electronics AME bv
-D40FB2     (base 16)		Applied Micro Electronics AME bv
-				Esp 100
-				Eindhoven  NB  5633 AA
-				NL
-
-44-9B-78   (hex)		The Now Factory
-449B78     (base 16)		The Now Factory
-				Arkle Road
-				Dublin 18    
-				IE
-
-F0-F6-69   (hex)		Motion Analysis Corporation
-F0F669     (base 16)		Motion Analysis Corporation
-				3617 Westwind Blvd.
-				Santa Rosa  CA  95403
-				US
-
-78-99-5C   (hex)		Nationz Technologies Inc
-78995C     (base 16)		Nationz Technologies Inc
-				12F,Tower Building #3,China Academy of Science and Technology Development,Gaoxin South Ave.1
-				Shen Zhen  GuangDong  518057
-				CN
-
-84-9D-C5   (hex)		Centera Photonics Inc.
-849DC5     (base 16)		Centera Photonics Inc.
-				3F, No 6-3 Dusing Rd.
-				Hsinchu  Taiwan  30078
-				TW
-
-58-09-43   (hex)		Private
-580943     (base 16)		Private
-
-EC-FC-55   (hex)		A. Eberle GmbH & Co. KG
-ECFC55     (base 16)		A. Eberle GmbH & Co. KG
-				Frankenstrasse 160
-				Nuernberg  Bavaria  90461
-				DE
-
-18-2A-7B   (hex)		Nintendo Co., Ltd.
-182A7B     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-68-FB-95   (hex)		Generalplus Technology Inc.
-68FB95     (base 16)		Generalplus Technology Inc.
-				3F, No.8, Dusing Rd., Hsinchu Science Park
-				Hsinchu City    30077
-				TW
-
-5C-89-D4   (hex)		Beijing Banner Electric Co.,Ltd
-5C89D4     (base 16)		Beijing Banner Electric Co.,Ltd
-				Mail Box 1033,Long cheng Garden
-				Chang Ping District  beijing  102208
-				CN
-
-54-11-5F   (hex)		Atamo Pty Ltd
-54115F     (base 16)		Atamo Pty Ltd
-				21 River Road
-				Bayswater  WA  6156
-				AU
-
-8C-AE-4C   (hex)		Plugable Technologies
-8CAE4C     (base 16)		Plugable Technologies
-				40 Lake Bellevue Dr.
-				Bellevue  WA  98005
-				US
-
-0C-C6-55   (hex)		Wuxi YSTen Technology Co.,Ltd.
-0CC655     (base 16)		Wuxi YSTen Technology Co.,Ltd.
-				Room 1801,18F, North Star Times Tower,
-				Chaoyang District  Beijing  100101
-				CN
-
-24-2F-FA   (hex)		Toshiba Global Commerce Solutions
-242FFA     (base 16)		Toshiba Global Commerce Solutions
-				B307/D121F
-				RTP  NC  27709
-				US
-
-E4-96-AE   (hex)		ALTOGRAPHICS Inc.
-E496AE     (base 16)		ALTOGRAPHICS Inc.
-				Daegu Venture Center 13F
-				  Daegu  701-020
-				KR
-
-4C-22-58   (hex)		cozybit, Inc.
-4C2258     (base 16)		cozybit, Inc.
-				605 Market Street
-				San Francisco  CA  94105
-				US
-
-F4-94-66   (hex)		CountMax,  ltd
-F49466     (base 16)		CountMax,  ltd
-				11 Titova str. 
-				poselok Lesnoy  Moscowskaya oblast  141231
-				RU
-
-F4-52-14   (hex)		Mellanox Technologies, Inc.
-F45214     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-1C-95-9F   (hex)		Veethree Electronics And Marine LLC
-1C959F     (base 16)		Veethree Electronics And Marine LLC
-				2050 47th Terrace East
-				Bradenton  Florida  34203
-				US
-
-08-81-F4   (hex)		Juniper Networks
-0881F4     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-10-F4-9A   (hex)		T3 Innovation
-10F49A     (base 16)		T3 Innovation
-				808 Calle Plano
-				Camarillo  CA  93012
-				US
-
-3C-57-BD   (hex)		Kessler Crane Inc.
-3C57BD     (base 16)		Kessler Crane Inc.
-				602 East Jefferson St
-				Plymouth  Indidana  46563
-				US
-
-04-E9-E5   (hex)		PJRC.COM, LLC
-04E9E5     (base 16)		PJRC.COM, LLC
-				14723 SW Brooke Ct
-				Sherwood  Oregon  97140
-				US
-
-60-BD-91   (hex)		Move Innovation
-60BD91     (base 16)		Move Innovation
-				Generatorvej 8B,st
-				Herlev  DK  2730
-				DK
-
-CC-4B-FB   (hex)		Hellberg Safety AB
-CC4BFB     (base 16)		Hellberg Safety AB
-				Stakebergsvagen 2
-				Stenkullen    44361
-				SE
-
-6C-AD-EF   (hex)		KZ Broadband Technologies, Ltd. 
-6CADEF     (base 16)		KZ Broadband Technologies, Ltd. 
-				1601 Tower C 
-				Shenzhen  Guangdong  518057
-				CN
-
-74-5F-AE   (hex)		TSL PPL
-745FAE     (base 16)		TSL PPL
-				Units 1-2, First Avenue
-				Marlow  Buckinghamshire  SL7 1YA
-				GB
-
-68-51-B7   (hex)		PowerCloud Systems, Inc.
-6851B7     (base 16)		PowerCloud Systems, Inc.
-				3333 Coyote Hill Rd
-				Palo Alto  CA  94304
-				US
-
-74-2D-0A   (hex)		Norfolk Elektronik AG
-742D0A     (base 16)		Norfolk Elektronik AG
-				Luzernstrasse 12
-				Eschenbach  LU  6274
-				CH
-
-70-F1-E5   (hex)		Xetawave LLC
-70F1E5     (base 16)		Xetawave LLC
-				1668 Valtec Lane
-				Boulder  CO  80301
-				US
-
-C0-AA-68   (hex)		OSASI Technos Inc.
-C0AA68     (base 16)		OSASI Technos Inc.
-				65-3, Hongu-cho, 
-				Kochi-shi, Kochi-ken     780-0945
-				JP
-
-88-D7-BC   (hex)		DEP Company
-88D7BC     (base 16)		DEP Company
-				Poryadkovy pereulok,21
-				Moscow    127055
-				RU
-
-48-5A-3F   (hex)		WISOL
-485A3F     (base 16)		WISOL
-				373-7, Gajang-dong
-				Osan-si  Gyeonggi-do  447-210
-				KR
-
-60-BC-4C   (hex)		EWM Hightec Welding GmbH
-60BC4C     (base 16)		EWM Hightec Welding GmbH
-				Dr.Günter-Henle-Str. 8
-				Mündersbach  Rheinland Pfalz  56271
-				DE
-
-1C-11-E1   (hex)		Wartsila Finland Oy
-1C11E1     (base 16)		Wartsila Finland Oy
-				Jarvikatu 2-4
-				Vaasa  Western Finland  65101
-				FI
-
-50-46-5D   (hex)		ASUSTek COMPUTER INC.
-50465D     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-74-BF-A1   (hex)		HYUNTECK
-74BFA1     (base 16)		HYUNTECK
-				#603 107-Dong, Jugong Apt., Changhyeon-ri, Hwado-eup
-				Namyangju-si  Gyeonggi-do  472-779
-				KR
-
-CC-26-2D   (hex)		Verifi, LLC
-CC262D     (base 16)		Verifi, LLC
-				9466 Meridian Way
-				West Chester   OH  45069
-				US
-
-3C-8A-E5   (hex)		Tensun Information Technology(Hangzhou) Co.,LTD
-3C8AE5     (base 16)		Tensun Information Technology(Hangzhou) Co.,LTD
-				Room 207,Building 5,Wensan Road
-				Hangzhou  Zhejiang  310013
-				CN
-
-2C-5A-A3   (hex)		PROMATE ELECTRONIC CO.LTD
-2C5AA3     (base 16)		PROMATE ELECTRONIC CO.LTD
-				4F 32,SEC.1 HUAN SHAN RD.,NEI HU,
-				TAIPEI    114
-				TW
-
-34-E0-CF   (hex)		zte corporation
-34E0CF     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-08-B7-38   (hex)		Lite-On Technogy Corp.
-08B738     (base 16)		Lite-On Technogy Corp.
-				18F, 392, RueyKuang Road, Neihu,
-				Taipei    11492
-				TW
-
-F8-AA-8A   (hex)		Axview Technology (Shenzhen) Co.,Ltd
-F8AA8A     (base 16)		Axview Technology (Shenzhen) Co.,Ltd
-				NO 1, Mei Zhong Road, Futian District
-				SHENZHEN  GUANGDONG  518049
-				CN
-
-7C-01-87   (hex)		Curtis Instruments, Inc.
-7C0187     (base 16)		Curtis Instruments, Inc.
-				200 Kisco Avenue
-				Mt Kisco  NY  10549
-				US
-
-54-F6-66   (hex)		Berthold Technologies GmbH and Co.KG
-54F666     (base 16)		Berthold Technologies GmbH and Co.KG
-				Calmbacher Strasse 22
-				Bad Wildbad    75323
-				DE
-
-34-C8-03   (hex)		Nokia Corporation
-34C803     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-F0-5F-5A   (hex)		Getriebebau NORD GmbH and Co. KG
-F05F5A     (base 16)		Getriebebau NORD GmbH and Co. KG
-				Rudolf-Diesel-Strasse 1
-				Bargteheide  Schleswig-Holstein  22941
-				DE
-
-80-1D-AA   (hex)		Avaya Inc
-801DAA     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-7C-09-2B   (hex)		Bekey A/S
-7C092B     (base 16)		Bekey A/S
-				Bredebjergvej 6
-				Taastrup    2630
-				DK
-
-84-2B-BC   (hex)		Modelleisenbahn GmbH
-842BBC     (base 16)		Modelleisenbahn GmbH
-				Plainbachstrasse 4
-				Bergheim    5101
-				AT
-
-B4-00-9C   (hex)		CableWorld Ltd.
-B4009C     (base 16)		CableWorld Ltd.
-				Kondorfa u. 6/B
-				Budapest    1112
-				HU
-
-28-9E-DF   (hex)		Danfoss Turbocor Compressors, Inc
-289EDF     (base 16)		Danfoss Turbocor Compressors, Inc
-				1769 E. Paul Dirac Ave.
-				Tallahassee  Florida  32310
-				US
-
-80-3F-D6   (hex)		bytes at work AG
-803FD6     (base 16)		bytes at work AG
-				Konradstrasse 15
-				Winterthur  ZH  8400
-				CH
-
-78-44-05   (hex)		FUJITU(HONG KONG) ELECTRONIC Co.,LTD.
-784405     (base 16)		FUJITU(HONG KONG) ELECTRONIC Co.,LTD.
-				8/F,QingHai Building,Xiang Mei Road,Futian District
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-04-4A-50   (hex)		Ramaxel Technology (Shenzhen) limited company
-044A50     (base 16)		Ramaxel Technology (Shenzhen) limited company
-				2-5/F,North Block Southeast Industrial and Commercial Building Houhai Road,Shekou Shenzhen 
-				shenzhen  guangdong  518067
-				CN
-
-0C-D9-C1   (hex)		Visteon Corporation
-0CD9C1     (base 16)		Visteon Corporation
-				One Village Center Drive
-				Van Buren Twp  MI  48111
-				US
-
-38-A5-B6   (hex)		SHENZHEN MEGMEET ELECTRICAL CO.,LTD
-38A5B6     (base 16)		SHENZHEN MEGMEET ELECTRICAL CO.,LTD
-				5th Floor,Building B, Ziguang Information Harbor
-				Shenzhen  Guangdong  518057
-				CN
-
-68-AB-8A   (hex)		RF IDeas
-68AB8A     (base 16)		RF IDeas
-				4020 Winnetka Ave
-				Rolling Meadows  IL  60008
-				US
-
-24-EE-3A   (hex)		Chengdu Yingji Electronic Hi-tech Co Ltd
-24EE3A     (base 16)		Chengdu Yingji Electronic Hi-tech Co Ltd
-				No.3 South Herui Road Hi-tech Zone
-				Chengdu City  Sichuan  611731
-				CN
-
-0C-C6-6A   (hex)		Nokia Corporation
-0CC66A     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-74-27-3C   (hex)		ChangYang Technology (Nanjing) Co., LTD
-74273C     (base 16)		ChangYang Technology (Nanjing) Co., LTD
-				NO.9 KaiCheng Road,QiLinTown
-				NanJing  JiangSu  211100
-				CN
-
-08-7C-BE   (hex)		Quintic Corp.
-087CBE     (base 16)		Quintic Corp.
-				1600 Wyatt Dr., #8
-				Santa Clara  CA  95054
-				US
-
-E8-04-F3   (hex)		Throughtek Co., Ltd.
-E804F3     (base 16)		Throughtek Co., Ltd.
-				4F, no. 221, Chong-yang Rd.
-				Taipei    11573
-				TW
-
-08-68-EA   (hex)		EITO ELECTRONICS CO., LTD.
-0868EA     (base 16)		EITO ELECTRONICS CO., LTD.
-				1-34-1 Shinmeidai
-				Hamura-shi  Tokyo  205-0023
-				JP
-
-F8-22-85   (hex)		Cypress Technology CO., LTD.
-F82285     (base 16)		Cypress Technology CO., LTD.
-				6F-5, NO., 130 Jiankang Rd.,
-				Zhonghe Dist.  New Taipei City  23585
-				TW
-
-C4-AD-21   (hex)		MEDIAEDGE Corporation
-C4AD21     (base 16)		MEDIAEDGE Corporation
-				23F Kobe Commerce, Industry and Trade Center Bldg.
-				Kobe  Hyogo  651-0083
-				JP
-
-E8-5B-F0   (hex)		Imaging Diagnostics
-E85BF0     (base 16)		Imaging Diagnostics
-				POB 698
-				Nes Ziona  N/A  74106
-				IL
-
-A4-0B-ED   (hex)		Carry Technology Co.,Ltd
-A40BED     (base 16)		Carry Technology Co.,Ltd
-				4F, No.119, JianKang Road
-				Jhonghe Dist.  New Taipei City  23585
-				TW
-
-70-23-93   (hex)		fos4X GmbH
-702393     (base 16)		fos4X GmbH
-				Thalkirchner Str. 210, Geb. 6
-				81371 München    
-				DE
-
-64-D8-14   (hex)		Cisco Systems, Inc
-64D814     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F8-5F-2A   (hex)		Nokia Corporation
-F85F2A     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-C4-38-D3   (hex)		TAGATEC CO.,LTD
-C438D3     (base 16)		TAGATEC CO.,LTD
-				#604, Dongmoon Goodmorning Tower 2, 
-				Goyang-si  Kyunggi-do  410-704
-				KR
-
-50-2E-CE   (hex)		Asahi Electronics Co.,Ltd
-502ECE     (base 16)		Asahi Electronics Co.,Ltd
-				29-25 Kariyado
-				  Kanagawa-ken  211-0022
-				JP
-
-AC-14-D2   (hex)		wi-daq, inc.
-AC14D2     (base 16)		wi-daq, inc.
-				850 NW Federal Hwy
-				Stuart  Florida  34994
-				US
-
-9C-4C-AE   (hex)		Mesa Labs
-9C4CAE     (base 16)		Mesa Labs
-				10 Evergreen Dr
-				Bozeman  MT  59715
-				US
-
-20-C1-AF   (hex)		i Wit Digital Co., Limited
-20C1AF     (base 16)		i Wit Digital Co., Limited
-				303,Buiding1,Nanhai Ecool Innovation Park,
-				Shenzhen  GuangDong  518000
-				US
-
-80-AA-A4   (hex)		USAG
-80AAA4     (base 16)		USAG
-				301 Goolsby Blvd
-				Deerfield Beach  FL  33442
-				US
-
-30-AE-F6   (hex)		Radio Mobile Access
-30AEF6     (base 16)		Radio Mobile Access
-				1 Elm Sq
-				Andover  MA  01870
-				US
-
-08-5B-0E   (hex)		Fortinet, Inc.
-085B0E     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale  California  94086
-				US
-
-EC-42-F0   (hex)		ADL Embedded Solutions, Inc.
-EC42F0     (base 16)		ADL Embedded Solutions, Inc.
-				4411 Morena Blvd.
-				San Diego  CA  92117
-				US
-
-E8-CB-A1   (hex)		Nokia Corporation
-E8CBA1     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-6C-E4-CE   (hex)		Villiger Security Solutions AG
-6CE4CE     (base 16)		Villiger Security Solutions AG
-				Giessenmatt 2
-				Sins    5643
-				CH
-
-64-9F-F7   (hex)		Kone OYj
-649FF7     (base 16)		Kone OYj
-				Myllykatu 3
-				Hyvinkaa  Hyvinkaa  05830
-				FI
-
-CC-91-2B   (hex)		TE Connectivity Touch Solutions
-CC912B     (base 16)		TE Connectivity Touch Solutions
-				2245 Brighton Henrietta Town Line Road
-				Rochester  New York  14623
-				US
-
-C0-5E-79   (hex)		SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD
-C05E79     (base 16)		SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD
-				3F,C4 Building,Yintian Industrial Zone,Xixiang,Baoan District
-				shenzhen  guangdong  518102
-				CN
-
-58-BF-EA   (hex)		Cisco Systems, Inc
-58BFEA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C4-01-B1   (hex)		SeekTech INC
-C401B1     (base 16)		SeekTech INC
-				3855 Ruffin Road
-				San Diego  California  92123
-				US
-
-C0-C9-46   (hex)		MITSUYA LABORATORIES INC.
-C0C946     (base 16)		MITSUYA LABORATORIES INC.
-				6-31-18
-				KAWASAKI-CITY  KANAGAWA  215-0021
-				JP
-
-F4-60-0D   (hex)		Panoptic Technology, Inc
-F4600D     (base 16)		Panoptic Technology, Inc
-				587 W Eau Gallie Blvd
-				Melbourne  FL  32935
-				US
-
-A8-2B-D6   (hex)		Shina System Co., Ltd
-A82BD6     (base 16)		Shina System Co., Ltd
-				3305, O'BizTower, 126, Beolmal-ro,
-				Anyang-Si  Gyeounggi-Do  431-763
-				KR
-
-AC-CF-23   (hex)		Hi-flying electronics technology Co.,Ltd
-ACCF23     (base 16)		Hi-flying electronics technology Co.,Ltd
-				Room B101,456 BiBo Raod,PuDong
-				  Shanghai  201200
-				CN
-
-60-90-84   (hex)		DSSD Inc
-609084     (base 16)		DSSD Inc
-				4025 Bohannon Dr
-				Menlo Park  CA  94025
-				US
-
-FC-1D-59   (hex)		I Smart Cities HK Ltd
-FC1D59     (base 16)		I Smart Cities HK Ltd
-				Unit G,10/F,Phase 2,Yip Fat IND
-				    73-75
-				HK
-
-78-C4-AB   (hex)		Shenzhen Runsil Technology Co.,Ltd
-78C4AB     (base 16)		Shenzhen Runsil Technology Co.,Ltd
-				4/F., Yuhua Building A, Yangmen Industrial Park, 
-				Shenzhen  GuangDong  518055
-				CN
-
-B0-A8-6E   (hex)		Juniper Networks
-B0A86E     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-80-2A-FA   (hex)		Germaneers GmbH
-802AFA     (base 16)		Germaneers GmbH
-				Dr.-Kurt-Schumacher-Ring 3
-				Wettstetten  Bayern  85139
-				DE
-
-18-42-1D   (hex)		Private
-18421D     (base 16)		Private
-
-28-C9-14   (hex)		Taimag Corporation
-28C914     (base 16)		Taimag Corporation
-				NO. 1, West 2nd St. N.E.P.Z 
-				Kaohsiung    811
-				TW
-
-74-93-A4   (hex)		Zebra Technologies Corp.
-7493A4     (base 16)		Zebra Technologies Corp.
-				20314 Seneca Meadows Parkway
-				Germantown  Maryland  21771
-				US
-
-E4-71-85   (hex)		Securifi Ltd
-E47185     (base 16)		Securifi Ltd
-				16F-3, #482 Zhongxiao E Rd, Sec 5
-				Taipei    11083
-				TW
-
-08-0C-C9   (hex)		Mission Technology Group, dba Magma
-080CC9     (base 16)		Mission Technology Group, dba Magma
-				9918 Via Pasar
-				San Diego  CA  92126
-				US
-
-64-0E-94   (hex)		Pluribus Networks, Inc.
-640E94     (base 16)		Pluribus Networks, Inc.
-				1808 Embarcadero Rd Suite B
-				Palo Alto  CA  94303
-				US
-
-0C-B4-EF   (hex)		Digience Co.,Ltd.
-0CB4EF     (base 16)		Digience Co.,Ltd.
-				204 Building for Growth, Gumi Electronics&Information Technology Research Institute, 17 Cheomdangieop-1ro, 
-				Gumi  Gyeongbuk  
-				KR
-
-14-6A-0B   (hex)		Cypress Electronics Limited
-146A0B     (base 16)		Cypress Electronics Limited
-				11/F., Block G, East Sun Industrial Centre, 16 Shing Yip Street,
-				Hong Kong  nil  nil
-				HK
-
-5C-EE-79   (hex)		Global Digitech Co LTD
-5CEE79     (base 16)		Global Digitech Co LTD
-				1F., No.25, Aly.56, Ln. 245, Sec. 4, Bade Rd.,
-				Taipei  Taiwan  105
-				TW
-
-4C-AA-16   (hex)		AzureWave Technologies (Shanghai) Inc.
-4CAA16     (base 16)		AzureWave Technologies (Shanghai) Inc.
-				No.8 Lane 66, Chenbao Road, Malu Town Jiading District
-				Shanghai    201801
-				CN
-
-AC-40-EA   (hex)		C&T Solution Inc. 
-AC40EA     (base 16)		C&T Solution Inc. 
-				12F-1, No.700, Zhongzheng Rd., Zhonghe Dist.
-				New Taipei City  Taiwan   235
-				TW
-
-00-2A-AF   (hex)		LARsys-Automation GmbH
-002AAF     (base 16)		LARsys-Automation GmbH
-				Sinzinger Str. 3
-				Hochburg-Ach    5122
-				AT
-
-1C-E1-65   (hex)		Marshal Corporation
-1CE165     (base 16)		Marshal Corporation
-				Field Three Sotokanda Bldg.
-				5-3-6, Sotokanda, Chiyodaku  Tokyo  101-0021
-				JP
-
-40-16-FA   (hex)		EKM Metering
-4016FA     (base 16)		EKM Metering
-				363 Berkeley Way
-				Santa Cruz  CA  95062
-				US
-
-0C-13-0B   (hex)		Uniqoteq Ltd.
-0C130B     (base 16)		Uniqoteq Ltd.
-				Lemminkaisenkatu 14-18 A
-				Turku    20520 
-				FI
-
-2C-54-2D   (hex)		Cisco Systems, Inc
-2C542D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-14-01   (hex)		Hitron Technologies. Inc
-BC1401     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-94-CA-0F   (hex)		Honeywell Analytics
-94CA0F     (base 16)		Honeywell Analytics
-				2840 2nd Ave SE
-				Calgary  Alberta  T2A7X9
-				CA
-
-78-25-44   (hex)		Omnima Limited
-782544     (base 16)		Omnima Limited
-				Oxford Science Park
-				Oxford  Oxfordshire  OX4 4GP
-				GB
-
-A4-18-75   (hex)		Cisco Systems, Inc
-A41875     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C8-AE-9C   (hex)		Shanghai TYD Elecronic Technology Co. Ltd
-C8AE9C     (base 16)		Shanghai TYD Elecronic Technology Co. Ltd
-				21F, BLKB, NO.391 GuiPing Rd, 
-				  Shanghai  200233
-				CN
-
-AC-3F-A4   (hex)		TAIYO YUDEN CO.,LTD
-AC3FA4     (base 16)		TAIYO YUDEN CO.,LTD
-				8-1, Sakae-cho
-				Takasaki-shi  Gunma  370-8522
-				JP
-
-6C-AE-8B   (hex)		IBM Corporation
-6CAE8B     (base 16)		IBM Corporation
-				4400 North First Street
-				San Jose  CA  95134
-				US
-
-40-AC-8D   (hex)		Data Management, Inc.
-40AC8D     (base 16)		Data Management, Inc.
-				3322 Loop 306
-				San Angelo  Texas  76904
-				US
-
-80-CE-B1   (hex)		Theissen Training Systems GmbH
-80CEB1     (base 16)		Theissen Training Systems GmbH
-				Schuchardstrasse 3
-				Duesseldorf  NRW  40595
-				DE
-
-FC-2A-54   (hex)		Connected Data, Inc.
-FC2A54     (base 16)		Connected Data, Inc.
-				2905 Stender Way
-				Santa Clara  CA  95054
-				US
-
-04-5C-06   (hex)		Zmodo Technology Corporation
-045C06     (base 16)		Zmodo Technology Corporation
-				1401 Interstate Dr
-				Champaign  IL  61822
-				US
-
-74-7B-7A   (hex)		ETH Inc.
-747B7A     (base 16)		ETH Inc.
-				#202 Mazium BLG, 545-6, Dangjung-dong,
-				Gunpo-si  Gyeonggi-do  435-833
-				KR
-
-48-EA-63   (hex)		Zhejiang Uniview Technologies Co., Ltd.
-48EA63     (base 16)		Zhejiang Uniview Technologies Co., Ltd.
-				Eastcom Building C,Eastcom Avenue
-				Hangzhou  Zhejiang  310053
-				CN
-
-E8-8D-F5   (hex)		ZNYX Networks, Inc.
-E88DF5     (base 16)		ZNYX Networks, Inc.
-				48421 Milmont Drive
-				Fremont  CA  94538
-				US
-
-90-F7-2F   (hex)		Phillips Machine & Welding Co., Inc. 
-90F72F     (base 16)		Phillips Machine & Welding Co., Inc. 
-				16125 E. Gale Ave.
-				Industry  CA  91745
-				US
-
-D0-57-85   (hex)		Pantech Co., Ltd.
-D05785     (base 16)		Pantech Co., Ltd.
-				110-1 Ongjeong-Ri, Tongjin-Eup
-				Gimpo-Si  Gyounggi-Do  415-865
-				KR
-
-40-8B-07   (hex)		Actiontec Electronics, Inc
-408B07     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-28-41-21   (hex)		OptiSense Network, LLC
-284121     (base 16)		OptiSense Network, LLC
-				1308 10th Street
-				Bridgeport  TX  76426
-				US
-
-38-45-8C   (hex)		MyCloud Technology corporation
-38458C     (base 16)		MyCloud Technology corporation
-				Room 705£¬Building F, Jiahua Building£¬
-				Beijing    100085
-				CN
-
-10-E4-AF   (hex)		APR, LLC
-10E4AF     (base 16)		APR, LLC
-				4800 US HWY 280 West
-				Opelika  AL  36801
-				US
-
-F4-EA-67   (hex)		Cisco Systems, Inc
-F4EA67     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-2D-48   (hex)		bct electronic GesmbH
-2C2D48     (base 16)		bct electronic GesmbH
-				Saalachstraße 86a
-				Salzburg    5020
-				AT
-
-28-BA-18   (hex)		NextNav, LLC
-28BA18     (base 16)		NextNav, LLC
-				484 Oakmead Parkway
-				Sunnyvale  CA  94085
-				US
-
-AC-3D-75   (hex)		HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.
-AC3D75     (base 16)		HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.
-				FLOOR12B,BUILDING E,PARADISE SOFTWARE PARK,NO.3 XIDOUMEN ROAD,
-				HANGZHOU  ZHEJIANG  310012
-				CN
-
-A0-90-DE   (hex)		VEEDIMS,LLC
-A090DE     (base 16)		VEEDIMS,LLC
-				49 N. Federal Highway #397
-				Pompano Beach  Florida  33062
-				US
-
-64-2D-B7   (hex)		SEUNGIL ELECTRONICS
-642DB7     (base 16)		SEUNGIL ELECTRONICS
-				#16-8, Dodang-dong
-				Buchon  Gyuonggi-do  420-801
-				KR
-
-00-2A-6A   (hex)		Cisco Systems, Inc
-002A6A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-36-E1   (hex)		Abilis Systems SARL
-F436E1     (base 16)		Abilis Systems SARL
-				3, chemin Pré Fleuri
-				Plan-Les-Ouates  Geneva  1228
-				CH
-
-78-1C-5A   (hex)		SHARP Corporation
-781C5A     (base 16)		SHARP Corporation
-				22-22,Nagaike-cho
-				Osaka city  Osaka prefecture  545-8522
-				JP
-
-E8-0C-75   (hex)		Syncbak, Inc.
-E80C75     (base 16)		Syncbak, Inc.
-				5 Research Center
-				Marion  IA  52302
-				US
-
-80-0A-06   (hex)		COMTEC co.,ltd
-800A06     (base 16)		COMTEC co.,ltd
-				60 shimoishida,azabu-cho,
-				Miyoshi-shi  Aichi-ken  470-0206
-				JP
-
-60-8C-2B   (hex)		Hanson Technology
-608C2B     (base 16)		Hanson Technology
-				Room 1503, Zhao Jia Bang Road
-				Shanghai    200030
-				CN
-
-94-00-70   (hex)		Nokia Corporation
-940070     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-BC-2C-55   (hex)		Bear Flag Design, Inc.
-BC2C55     (base 16)		Bear Flag Design, Inc.
-				1 Thayer Road
-				Santa Cruz  CA  95060
-				US
-
-0C-75-23   (hex)		BEIJING GEHUA CATV NETWORK CO.,LTD
-0C7523     (base 16)		BEIJING GEHUA CATV NETWORK CO.,LTD
-				No.35,N.Huayuan RD.,Haidian District
-				BEIJING    100083
-				CN
-
-04-F0-21   (hex)		Compex Systems Pte Ltd
-04F021     (base 16)		Compex Systems Pte Ltd
-				135 Joo Seng Road, 
-				    368363
-				SG
-
-28-18-FD   (hex)		Aditya Infotech Ltd.
-2818FD     (base 16)		Aditya Infotech Ltd.
-				Khemka Square, A-12, Sector-4,
-				Noida  Uttar Pradesh  201301
-				IN
-
-D8-B9-0E   (hex)		Triple Domain Vision Co.,Ltd.
-D8B90E     (base 16)		Triple Domain Vision Co.,Ltd.
-				No.9, Aly. 1, Ln. 585, Sec.3, Fulin Rd.,
-				Hsinchu Conuty    307
-				TW
-
-34-2F-6E   (hex)		Anywire corporation
-342F6E     (base 16)		Anywire corporation
-				1 Zusyo, Baba
-				Nagaokakyo  Kyoto pref.  617-8550
-				JP
-
-CC-EE-D9   (hex)		VAHLE Automation GmbH
-CCEED9     (base 16)		VAHLE Automation GmbH
-				Egerbach 12a
-				Kufstein   Schwoich Tirol  6334
-				AT
-
-00-5C-B1   (hex)		Gospell DIGITAL TECHNOLOGY CO., LTD
-005CB1     (base 16)		Gospell DIGITAL TECHNOLOGY CO., LTD
-				Block F10-F13Â¡Â¢F518 Idea land Â¡Â¢Bao Yuan Road
-				Shenzhen  Guangdong  518102
-				CN
-
-B0-8E-1A   (hex)		URadio Systems Co., Ltd
-B08E1A     (base 16)		URadio Systems Co., Ltd
-				Phase II D202-2, 1355 JinJiHu Blvd
-				Suzhou  Jiangsu  215021
-				CN
-
-D8-E9-52   (hex)		KEOPSYS
-D8E952     (base 16)		KEOPSYS
-				21 RUE LOUIS DE BROGLIE
-				LANNION  BRITANY  22300
-				FR
-
-BC-A4-E1   (hex)		Nabto
-BCA4E1     (base 16)		Nabto
-				Aabogade 15
-				Aarhus  Jutland  8200
-				DK
-
-90-8F-CF   (hex)		UNO System Co., Ltd
-908FCF     (base 16)		UNO System Co., Ltd
-				#402 Kolon Science Valley °., 187-10, Guro-dong, Guro-gu
-				Seoul    152-848
-				KR
-
-40-E7-93   (hex)		Shenzhen Siviton Technology Co.,Ltd
-40E793     (base 16)		Shenzhen Siviton Technology Co.,Ltd
-				4F,Block6,Coolpad Business Centre,North of Keyuan Road,Hi-technology Zone,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-00-08-31   (hex)		Cisco Systems, Inc
-000831     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-D0-9B   (hex)		MobilMAX Technology Inc.
-34D09B     (base 16)		MobilMAX Technology Inc.
-				2F-5, No.28, Tai-Yuan St.
-				Chupei City, Hsinchu Country    302
-				TW
-
-F0-00-7F   (hex)		Janz - Contadores de Energia, SA
-F0007F     (base 16)		Janz - Contadores de Energia, SA
-				Avenida Infante D. Henrique
-				Lisbon    1800-223
-				PT
-
-30-B3-A2   (hex)		Shenzhen Heguang Measurement & Control Technology Co.,Ltd
-30B3A2     (base 16)		Shenzhen Heguang Measurement & Control Technology Co.,Ltd
-				3/F, Tower A, Xiangnian Plaza, 6060 Qiaoxiang Road, 
-				Shenzhen  Guangdong  518053
-				CN
-
-50-60-28   (hex)		Xirrus Inc.
-506028     (base 16)		Xirrus Inc.
-				2101 CORPORATE CENTER DR
-				Thousand Oaks  CALIFORNIA  91320
-				US
-
-00-91-FA   (hex)		Synapse Product Development
-0091FA     (base 16)		Synapse Product Development
-				1511 6th Ave
-				Seattle  WA  98101
-				US
-
-A0-5A-A4   (hex)		Grand Products Nevada, Inc.
-A05AA4     (base 16)		Grand Products Nevada, Inc.
-				751 Pilot Rd.
-				Las Vegas  Nevada  89119
-				US
-
-F0-EE-BB   (hex)		VIPAR GmbH
-F0EEBB     (base 16)		VIPAR GmbH
-				Lichtenbergstrasse 8
-				Garching bei Muenchen  Bavaria  85748
-				DE
-
-6C-E9-07   (hex)		Nokia Corporation
-6CE907     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-E4-FA-1D   (hex)		PAD Peripheral Advanced Design Inc.
-E4FA1D     (base 16)		PAD Peripheral Advanced Design Inc.
-				1400 Hocquart
-				Saint-Bruno  QC  J3V 6E1
-				CA
-
-1C-5C-55   (hex)		PRIMA Cinema, Inc
-1C5C55     (base 16)		PRIMA Cinema, Inc
-				1903 Wright Place, Suite 320
-				Carlsbad  CA  92008
-				US
-
-34-BA-9A   (hex)		Asiatelco Technologies Co.
-34BA9A     (base 16)		Asiatelco Technologies Co.
-				301,#8 Building,#289 Bisheng Road
-				Shanghai    201204
-				CN
-
-50-64-41   (hex)		Greenlee
-506441     (base 16)		Greenlee
-				219 S Main St
-				Dallas  TX  76104
-				US
-
-9C-1F-DD   (hex)		Accupix Inc.
-9C1FDD     (base 16)		Accupix Inc.
-				3F Gaeyang BLDG, 548-1, 
-				Anyang  Kyeonggi-Do  430-730
-				KR
-
-7C-DD-11   (hex)		Chongqing MAS SCI&TECH.Co.,Ltd
-7CDD11     (base 16)		Chongqing MAS SCI&TECH.Co.,Ltd
-				 6th Floor, Zone C2,Hi-tech Venture Park, No.105 Erlang Venture Road
-				Chongqing City    400039
-				CN
-
-B8-FD-32   (hex)		Zhejiang ROICX Microelectronics
-B8FD32     (base 16)		Zhejiang ROICX Microelectronics
-				22 Floor, 1888 Jianghui Road, Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-70-EE-50   (hex)		Netatmo
-70EE50     (base 16)		Netatmo
-				17 route de la reine
-				Boulogne-Billancourt    92100
-				FR
-
-98-4A-47   (hex)		CHG Hospital Beds
-984A47     (base 16)		CHG Hospital Beds
-				1020 Adelaide St S
-				London  ON  N6E 1R6
-				CA
-
-14-49-78   (hex)		Digital Control Incorporated
-144978     (base 16)		Digital Control Incorporated
-				19625 62nd Ave S
-				Kent  WA  98032
-				US
-
-2C-10-C1   (hex)		Nintendo Co., Ltd.
-2C10C1     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-8C-D1-7B   (hex)		CG Mobile
-8CD17B     (base 16)		CG Mobile
-				3F Caohejing Software Building, No.461 Hongcao Rd.,XuHui District
-				Shanghai    200233
-				CN
-
-50-22-67   (hex)		PixeLINK
-502267     (base 16)		PixeLINK
-				3030 Conroy Road
-				Ottawa  Ontario  K1G 6C2
-				CA
-
-3C-6A-7D   (hex)		Niigata Power Systems Co., Ltd.
-3C6A7D     (base 16)		Niigata Power Systems Co., Ltd.
-				7-26,Tatsumi 3-Chome
-				Koto-ku  TOKYO  135-0053
-				JP
-
-3C-70-59   (hex)		MakerBot Industries
-3C7059     (base 16)		MakerBot Industries
-				87 3rd Avenue
-				Brooklyn  NY  11217
-				US
-
-50-26-90   (hex)		FUJITSU LIMITED
-502690     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-24-B6-57   (hex)		Cisco Systems, Inc
-24B657     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C8-AF-40   (hex)		marco Systemanalyse und Entwicklung GmbH
-C8AF40     (base 16)		marco Systemanalyse und Entwicklung GmbH
-				Hans-Böckler-Straße 2
-				Dachau  Bavaria  85221
-				DE
-
-40-98-4C   (hex)		Casacom Solutions AG
-40984C     (base 16)		Casacom Solutions AG
-				Badenerstarsse 551
-				Zuerich    8046
-				CH
-
-5C-18-B5   (hex)		Talon Communications
-5C18B5     (base 16)		Talon Communications
-				10636 Scripps Summit Ct.
-				San Diego  CA  92131
-				US
-
-64-E1-61   (hex)		DEP Corp.
-64E161     (base 16)		DEP Corp.
-				Nishi-shinjuku 6-12-7
-				Shinjuku  Tokyo  160-0023
-				JP
-
-88-23-FE   (hex)		TTTech Computertechnik AG
-8823FE     (base 16)		TTTech Computertechnik AG
-				Schoenbrunnerstrasse 7
-				Vienna    1040
-				AT
-
-B8-9A-ED   (hex)		OceanServer Technology, Inc
-B89AED     (base 16)		OceanServer Technology, Inc
-				151 Martine St
-				Fall River  MA  02723
-				US
-
-C8-7D-77   (hex)		Shenzhen Kingtech Communication Equipment Co.,Ltd
-C87D77     (base 16)		Shenzhen Kingtech Communication Equipment Co.,Ltd
-				Floor3.Building A,NO.3,Road 1 of shangxue Dengxinkeng Industry Park,Bantian Street,
-				Shenzhen City  Guangdong  518112
-				CN
-
-94-AE-61   (hex)		Alcatel Lucent
-94AE61     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-5C-CE-AD   (hex)		CDYNE Corporation
-5CCEAD     (base 16)		CDYNE Corporation
-				505 Independence Pkwy Ste 300
-				Chesapeake  VA  23320
-				US
-
-AC-54-EC   (hex)		IEEE P1823 Standards Working Group
-AC54EC     (base 16)		IEEE P1823 Standards Working Group
-				445 Hoes Lane
-				Piscataway  NJ  08854
-				US
-
-70-97-56   (hex)		Happyelectronics Co.,Ltd
-709756     (base 16)		Happyelectronics Co.,Ltd
-				#A-805, Bundang Technopark,
-				Seongnam-Si    463-816
-				KR
-
-B8-20-E7   (hex)		Guangzhou Horizontal Information & Network Integration Co. Ltd
-B820E7     (base 16)		Guangzhou Horizontal Information & Network Integration Co. Ltd
-				Floor 10¬Golden Star Building¬Wushan Hanjing Road¬Tianhe District¬Guangzhou City
-				Guangzhou  Guangdong Province  510630
-				CN
-
-00-CD-90   (hex)		MAS Elektronik AG
-00CD90     (base 16)		MAS Elektronik AG
-				Pollhornbogen 19
-				Hamburg    21107
-				DE
-
-7C-6B-52   (hex)		Tigaro Wireless
-7C6B52     (base 16)		Tigaro Wireless
-				Shen A'ari 7
-				Even Yehuda    40500
-				IL
-
-00-64-A6   (hex)		Maquet CardioVascular
-0064A6     (base 16)		Maquet CardioVascular
-				1300 MacArthur Blvd
-				Mahwah  NJ  07430
-				US
-
-98-8B-AD   (hex)		Corintech Ltd.
-988BAD     (base 16)		Corintech Ltd.
-				Ashford Mill
-				Fordingbridge  Hampshire  SP6 1DZ
-				GB
-
-D4-4B-5E   (hex)		TAIYO YUDEN CO., LTD.
-D44B5E     (base 16)		TAIYO YUDEN CO., LTD.
-				8-1, Sakae-cho
-				Takasaki-shi  Gunma  370-8522
-				JP
-
-64-0E-36   (hex)		TAZTAG
-640E36     (base 16)		TAZTAG
-				Cicea 1
-				Bruz    35170
-				FR
-
-94-1D-1C   (hex)		TLab West Systems AB
-941D1C     (base 16)		TLab West Systems AB
-				Ebbe Lieberathsgatan 23B
-				Gothenburg    41265
-				SE
-
-E4-55-EA   (hex)		Dedicated Computing
-E455EA     (base 16)		Dedicated Computing
-				N26 W23880 Commerce Circle
-				Waukesha  Wisconsin  53188
-				US
-
-B0-5C-E5   (hex)		Nokia Corporation
-B05CE5     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-34-82-DE   (hex)		Kiio Inc
-3482DE     (base 16)		Kiio Inc
-				404 Holtzman Rd
-				Madison  WI  53713
-				US
-
-4C-5F-D2   (hex)		Alcatel-Lucent
-4C5FD2     (base 16)		Alcatel-Lucent
-				777 East Middlefield Road
-				Mountain View  CA  94043
-				US
-
-28-C7-18   (hex)		Altierre
-28C718     (base 16)		Altierre
-				1980 Concourse Drive
-				San Jose  United States  95131
-				US
-
-7C-4C-58   (hex)		Scale Computing, Inc.
-7C4C58     (base 16)		Scale Computing, Inc.
-				2121 El Camino Real
-				San Mateo  UNITED STATES  94403
-				US
-
-10-13-EE   (hex)		Justec International Technology INC.
-1013EE     (base 16)		Justec International Technology INC.
-				7F-2 No 113 Zihyou Road
-				Hsinchu City    30041
-				TW
-
-8C-27-1D   (hex)		QuantHouse
-8C271D     (base 16)		QuantHouse
-				52 Rue de la Victoire
-				Paris    75009
-				FR
-
-38-60-77   (hex)		PEGATRON CORPORATION
-386077     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-70-81-05   (hex)		Cisco Systems, Inc
-708105     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-ED-1A   (hex)		vastriver Technology Co., Ltd
-E0ED1A     (base 16)		vastriver Technology Co., Ltd
-				A-6A Keshi Building,No.28,Xinxi Road,Haidian,
-				Beijing    100085
-				CN
-
-D4-F6-3F   (hex)		IEA S.R.L.
-D4F63F     (base 16)		IEA S.R.L.
-				Eva Peron 4468
-				Rosario  Santa Fe  S2002LBQ 
-				AR
-
-58-B0-D4   (hex)		ZuniData Systems Inc.
-58B0D4     (base 16)		ZuniData Systems Inc.
-				4F-7,  No.65,  Gaotia 7th Rd,  Zhubei City
-				Hsinchu    302
-				TW
-
-64-55-7F   (hex)		NSFOCUS Information Technology Co., Ltd.
-64557F     (base 16)		NSFOCUS Information Technology Co., Ltd.
-				3/F,Ether Building, No.4 Beiwa Rd.,Haidian District
-				Beijing    100089
-				CN
-
-00-08-2F   (hex)		Cisco Systems, Inc
-00082F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-C7-D1   (hex)		SHARP Corporation
-9CC7D1     (base 16)		SHARP Corporation
-				22-22,Nagaike-cho
-				Osaka city  Osaka prefecture  545-8522
-				JP
-
-14-90-90   (hex)		KongTop industrial(shen zhen)CO.,LTD
-149090     (base 16)		KongTop industrial(shen zhen)CO.,LTD
-				xinwuyuan,gushu,Xixiang,Baoan,
-				Shenzhen  Guangdong  518000
-				CN
-
-38-DE-60   (hex)		Mohlenhoff GmbH
-38DE60     (base 16)		Mohlenhoff GmbH
-				Museumstraße 54a
-				Salzgitter  Niedersachsen  38229
-				DE
-
-28-39-E7   (hex)		Preceno Technology Pte.Ltd.
-2839E7     (base 16)		Preceno Technology Pte.Ltd.
-				11F, No.207-2, Sec. 3, Beixin Rd., Xindian Dist.
-				New Taipei City    23143
-				TW
-
-68-5E-6B   (hex)		PowerRay Co., Ltd.
-685E6B     (base 16)		PowerRay Co., Ltd.
-				7F-1, No 190, Sec 2, Chung Hsing Road, Sindian District
-				New Taipei City    231
-				TW
-
-20-C8-B3   (hex)		SHENZHEN BUL-TECH CO.,LTD.
-20C8B3     (base 16)		SHENZHEN BUL-TECH CO.,LTD.
-				Area C,4/F,NO.59,Longjing 2nd Road,
-				SHENZHEN   GuangDong  518101
-				CN
-
-F8-E7-B5   (hex)		µTech Tecnologia LTDA
-F8E7B5     (base 16)		µTech Tecnologia LTDA
-				Rua Lauro Linhares, 598
-				Florianopolis  Santa Catarina  88036-200
-				BR
-
-D4-CE-B8   (hex)		Enatel LTD
-D4CEB8     (base 16)		Enatel LTD
-				66 Treffers Road
-				Christchurch  Canterbury  8042
-				NZ
-
-80-7A-7F   (hex)		ABB Genway Xiamen Electrical Equipment CO., LTD
-807A7F     (base 16)		ABB Genway Xiamen Electrical Equipment CO., LTD
-				7F,No.23 Wanghai Road,Software Park 2, Lvling Road, 
-				Xiamen  Fujian Province  361008
-				CN
-
-24-DA-B6   (hex)		Sistemas de Gestión Energética S.A. de C.V
-24DAB6     (base 16)		Sistemas de Gestión Energética S.A. de C.V
-				Calzada de los Fresnos 70-A
-				Zapopan  Jalisoc  45010
-				MX
-
-B0-7D-62   (hex)		Dipl.-Ing. H. Horstmann GmbH
-B07D62     (base 16)		Dipl.-Ing. H. Horstmann GmbH
-				Humboldtstraße 2
-				Heiligenhaus    42579
-				DE
-
-B8-F5-E7   (hex)		WayTools, LLC
-B8F5E7     (base 16)		WayTools, LLC
-				401 Wilshire Blvd.
-				Santa Monica  CA  90401
-				US
-
-B8-19-99   (hex)		Nesys
-B81999     (base 16)		Nesys
-				Energeticheskaya, 1
-				Moscow    111116
-				RU
-
-34-25-5D   (hex)		Shenzhen Loadcom Technology Co.,Ltd
-34255D     (base 16)		Shenzhen Loadcom Technology Co.,Ltd
-				Yuehai Building A-13CD,Nanhai Road,Nanshan Area
-				Shenzhen  Guangdong  518054
-				CN
-
-4C-A7-4B   (hex)		Alcatel Lucent
-4CA74B     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-D0-31-10   (hex)		Ingenic Semiconductor Co.,Ltd
-D03110     (base 16)		Ingenic Semiconductor Co.,Ltd
-				Room 108,Building A,Information Center Zhongguancun Software Park 8 Dongbeiwang West Road,Haidain District
-				Beijing    100193
-				CN
-
-1C-E1-92   (hex)		Qisda Corporation
-1CE192     (base 16)		Qisda Corporation
-				157 Shan-Ying Road
-				Gueishan  Taoyuan  333
-				TW
-
-70-6F-81   (hex)		Private
-706F81     (base 16)		Private
-
-FC-00-12   (hex)		Toshiba Samsung Storage Technolgoy Korea Corporation 
-FC0012     (base 16)		Toshiba Samsung Storage Technolgoy Korea Corporation 
-				14 Floor, Bldg. No. 102, Digital Empire2, 486, Sin-dong, Yeongtong-gu, Suwon-si, 
-				Su-won   Gyeonggi   443-734 
-				KR
-
-18-14-20   (hex)		TEB SAS
-181420     (base 16)		TEB SAS
-				RD294 - Corpeau
-				Meursault  Burgundy  21190
-				FR
-
-AC-81-F3   (hex)		Nokia Corporation
-AC81F3     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-30-68-8C   (hex)		Reach Technology Inc.
-30688C     (base 16)		Reach Technology Inc.
-				4575 Cushing Parkway
-				Fremont  California  94538
-				US
-
-10-EE-D9   (hex)		Canoga Perkins Corporation
-10EED9     (base 16)		Canoga Perkins Corporation
-				20600 Prairie Street
-				Chatsworth  CA  91311
-				US
-
-94-DE-0E   (hex)		SmartOptics AS
-94DE0E     (base 16)		SmartOptics AS
-				Stalfjaera 9
-				Oslo    N-0975
-				NO
-
-C0-29-F3   (hex)		XySystem
-C029F3     (base 16)		XySystem
-				#1304 Daerung Post Tower 5
-				Seoul    153-801
-				KR
-
-AC-4A-FE   (hex)		Hisense Broadband Multimedia Technology Co.,Ltd.
-AC4AFE     (base 16)		Hisense Broadband Multimedia Technology Co.,Ltd.
-				No.11 Jiangxi Road,Shinan District
-				Qingdao City  Shandong Province  266071
-				CN
-
-54-F5-B6   (hex)		ORIENTAL PACIFIC INTERNATIONAL LIMITED
-54F5B6     (base 16)		ORIENTAL PACIFIC INTERNATIONAL LIMITED
-				5 ARGUS PLACE
-				NORTH SHORE CITY  AUCKLAND  0627
-				NZ
-
-90-34-2B   (hex)		Gatekeeper Systems, Inc.
-90342B     (base 16)		Gatekeeper Systems, Inc.
-				8 Studebaker
-				Irvine  CA  92618
-				US
-
-8C-B8-2C   (hex)		IPitomy Communications
-8CB82C     (base 16)		IPitomy Communications
-				1940 Northgate Boulevard
-				Sarasota  Florida  34234
-				US
-
-80-7D-E3   (hex)		Chongqing Sichuan Instrument Microcircuit Co.LTD.
-807DE3     (base 16)		Chongqing Sichuan Instrument Microcircuit Co.LTD.
-				Jinhua Road No.309, Beibei,
-				Chongqing    400700
-				CN
-
-DC-17-5A   (hex)		Hitachi High-Technologies Corporation
-DC175A     (base 16)		Hitachi High-Technologies Corporation
-				794, Higashitoyoi,
-				Kudamatsu City,  Yamaguchi Pref.,  744-0002,
-				JP
-
-C8-A1-BA   (hex)		Neul Ltd
-C8A1BA     (base 16)		Neul Ltd
-				Suite 42 Innovation Centre
-				Cambridge  Cambs  CB4 0EY
-				GB
-
-C4-3A-9F   (hex)		Siconix Inc.
-C43A9F     (base 16)		Siconix Inc.
-				#28, 2333 18th Ave NE
-				Calgary  Alberta  T2E 8T6
-				CA
-
-68-6E-23   (hex)		Wi3 Inc.
-686E23     (base 16)		Wi3 Inc.
-				P.O. Box 1123
-				Pittsford  NY  14534
-				US
-
-DC-F0-5D   (hex)		Letta Teknoloji
-DCF05D     (base 16)		Letta Teknoloji
-				TUBITAK Teknoloji Gelistirme Bolgesi
-				KOCAELI    41455
-				TR
-
-84-8F-69   (hex)		Dell Inc.
-848F69     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-3C-09-6D   (hex)		Powerhouse Dynamics
-3C096D     (base 16)		Powerhouse Dynamics
-				1 Bridge Street
-				Newton  MA  02458
-				US
-
-90-0D-66   (hex)		Digimore Electronics Co., Ltd
-900D66     (base 16)		Digimore Electronics Co., Ltd
-				10 FL., No. 61, Yan-Ping South Road
-				Taipei    100
-				TW
-
-0C-92-4E   (hex)		Rice Lake Weighing Systems
-0C924E     (base 16)		Rice Lake Weighing Systems
-				230 West Coleman St
-				Rice Lake  WI  54868
-				US
-
-F4-94-61   (hex)		NexGen Storage
-F49461     (base 16)		NexGen Storage
-				400 Centennial Blvd.
-				Louisville  CO  80027
-				US
-
-B8-CD-A7   (hex)		Maxeler Technologies Ltd.
-B8CDA7     (base 16)		Maxeler Technologies Ltd.
-				1 Down Place
-				London  UK  W6 9JH
-				GB
-
-54-35-DF   (hex)		Symeo GmbH
-5435DF     (base 16)		Symeo GmbH
-				Prof.-Messerschmitt-Str. 3
-				Neubiberg  Bavaria  85579
-				DE
-
-F4-3D-80   (hex)		FAG Industrial Services GmbH
-F43D80     (base 16)		FAG Industrial Services GmbH
-				Kaiserstrasse 100
-				Herzogenrath  NRW  52134
-				DE
-
-F0-DB-30   (hex)		Yottabyte
-F0DB30     (base 16)		Yottabyte
-				1750 S. Telegraph Road
-				Bloomfield Twp.  MI  48302
-				US
-
-9C-31-B6   (hex)		Kulite Semiconductor Products Inc
-9C31B6     (base 16)		Kulite Semiconductor Products Inc
-				1 Willow Tree Rd
-				Leonia  NJ  07605
-				US
-
-A4-B3-6A   (hex)		JSC SDO Chromatec
-A4B36A     (base 16)		JSC SDO Chromatec
-				94, Stroiteley street
-				Yoshkar-Ola  Mari El republic  424000
-				RU
-
-E4-DD-79   (hex)		En-Vision America, Inc.
-E4DD79     (base 16)		En-Vision America, Inc.
-				1845 Hovey Ave
-				Normal  IL  61761
-				US
-
-E8-CC-32   (hex)		Micronet  LTD
-E8CC32     (base 16)		Micronet  LTD
-				Hametzuda 27
-				Azor    58001
-				IL
-
-D4-3A-E9   (hex)		DONGGUAN ipt INDUSTRIAL CO., LTD
-D43AE9     (base 16)		DONGGUAN ipt INDUSTRIAL CO., LTD
-				No.66-1.Ist New Area, Nanshe Dist., Chigang,Humen,
-				Dongguan  Guangdong  52390
-				CN
-
-8C-5C-A1   (hex)		d-broad,INC
-8C5CA1     (base 16)		d-broad,INC
-				3-17-5 ShinYokohama Kouhoku-Ku
-				Yokohama  Kanagawa  222-0033
-				JP
-
-18-F6-50   (hex)		Multimedia Pacific Limited
-18F650     (base 16)		Multimedia Pacific Limited
-				1 Matheson Street, Shell Tower 29F/12
-				    000000
-				HK
-
-68-84-70   (hex)		eSSys Co.,Ltd
-688470     (base 16)		eSSys Co.,Ltd
-				Daerung Post Tower 5 15F, 60-3
-				Seoul  Geumcheon-gu  153-702
-				KR
-
-48-DC-FB   (hex)		Nokia Corporation
-48DCFB     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-20-B7-C0   (hex)		OMICRON electronics GmbH
-20B7C0     (base 16)		OMICRON electronics GmbH
-				Oberes Ried 1
-				Klaus    6833
-				AT
-
-80-58-C5   (hex)		NovaTec Kommunikationstechnik GmbH
-8058C5     (base 16)		NovaTec Kommunikationstechnik GmbH
-				Technologiepark 9
-				Paderborn  NRW  33100
-				DE
-
-B8-C7-16   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-B8C716     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-D4-2C-3D   (hex)		Sky Light Digital Limited
-D42C3D     (base 16)		Sky Light Digital Limited
-				Rm. 1009 Kwong Sang Hong Centre, 151-153 Hoi Bun Road, Kwun Tong, Kowloon, 
-				Hong Kong    999077
-				CN
-
-A4-5A-1C   (hex)		smart-electronic GmbH
-A45A1C     (base 16)		smart-electronic GmbH
-				Industriestrasse 29
-				St. Georgen  Baden-Württemberg  78122
-				DE
-
-80-64-59   (hex)		Nimbus Inc.
-806459     (base 16)		Nimbus Inc.
-				1359 Gwanpyeong-dong, Yuseong-gu
-				Daejeon    305-509
-				KR
-
-8C-89-A5   (hex)		Micro-Star INT'L CO., LTD
-8C89A5     (base 16)		Micro-Star INT'L CO., LTD
-				No.69, Lide st.
-				Taipei County    235
-				TW
-
-B4-A5-A9   (hex)		MODI GmbH
-B4A5A9     (base 16)		MODI GmbH
-				Kapellenweg 21
-				REICHSHOF-Sinspert    51580
-				DE
-
-C4-36-DA   (hex)		Rusteletech Ltd.
-C436DA     (base 16)		Rusteletech Ltd.
-				Ordzhonikidze Str. 11, Bldg. 40, Off. 15 
-				Moscow    115419
-				RU
-
-04-32-F4   (hex)		Partron
-0432F4     (base 16)		Partron
-				22-6, Seokwoo-dong
-				Hwaseong-si  Gyeonggi-do  445-170
-				KR
-
-1C-18-4A   (hex)		ShenZhen RicherLink Technologies Co.,LTD
-1C184A     (base 16)		ShenZhen RicherLink Technologies Co.,LTD
-				703,Building W1-A,High-Tech Industrial Park,KeJiNan 1st Road,NanShan,
-				ShenZhen  GuangDong  518057
-				CN
-
-0C-39-56   (hex)		Observator instruments
-0C3956     (base 16)		Observator instruments
-				Rietdekkerstraat 6
-				Ridderkerk  Zuid Holland  2984 BM
-				NL
-
-DC-A6-BD   (hex)		Beijing Lanbo Technology Co., Ltd.
-DCA6BD     (base 16)		Beijing Lanbo Technology Co., Ltd.
-				Room.301.Bidg.4NO.8 Shangdi West Road, Haidian  District,
-				Beijing City    100085
-				CN
-
-10-C5-86   (hex)		BIO SOUND LAB CO., LTD.
-10C586     (base 16)		BIO SOUND LAB CO., LTD.
-				Suite 311, 312 SKn Techno Park 
-				Seongnam-si  Gyeonggi-do,  462-721
-				KR
-
-10-76-8A   (hex)		EoCell
-10768A     (base 16)		EoCell
-				149 Beaconsfield Street
-				Silverwater  NSW  2128
-				AU
-
-F4-4E-FD   (hex)		Actions Semiconductor Co.,Ltd.(Cayman Islands)
-F44EFD     (base 16)		Actions Semiconductor Co.,Ltd.(Cayman Islands)
-				Po Box 309GT,Ugland House,South Church Street,
-				George Town  Grand Cayman  
-				KY
-
-24-B8-D2   (hex)		Opzoon Technology Co.,Ltd.
-24B8D2     (base 16)		Opzoon Technology Co.,Ltd.
-				11th floor, Tower BÂ£Â¬Yintai Center 2 Jianguomenwai St,.
-				Beijing  Asia  100022
-				CN
-
-A4-99-81   (hex)		FuJian Elite Power Tech CO.,LTD.
-A49981     (base 16)		FuJian Elite Power Tech CO.,LTD.
-				8th FloorÂ£Â¬56 GuanRi Road 
-				Xiamen  Fujian  361009
-				CN
-
-B8-3A-7B   (hex)		Worldplay (Canada) Inc.
-B83A7B     (base 16)		Worldplay (Canada) Inc.
-				803 - 24th Ave SE, Unit 200
-				Calgary  Alberta  T2G 1P5
-				CA
-
-14-07-E0   (hex)		Abrantix AG
-1407E0     (base 16)		Abrantix AG
-				Foerrlibuckstrasse 66
-				Zuerich  ZH  8005
-				CH
-
-DC-CF-94   (hex)		Beijing Rongcheng Hutong Technology Co., Ltd.
-DCCF94     (base 16)		Beijing Rongcheng Hutong Technology Co., Ltd.
-				Room 401A,Building No.4,Yard No.5,
-				  Beijing  100024
-				CN
-
-A4-DB-2E   (hex)		Kingspan Environmental Ltd
-A4DB2E     (base 16)		Kingspan Environmental Ltd
-				180 Gilford Road
-				Portadown  Armagh  BT63 5LF
-				GB
-
-C8-FE-30   (hex)		Bejing DAYO Mobile Communication Technology Ltd.
-C8FE30     (base 16)		Bejing DAYO Mobile Communication Technology Ltd.
-				Room 712, ULO Park Building No. 601E
-				Beijing    100102
-				CN
-
-E4-D7-1D   (hex)		Oraya Therapeutics
-E4D71D     (base 16)		Oraya Therapeutics
-				8000 Jarvis Avenue  Ste. 200
-				Newark  CA  94560
-				US
-
-24-C9-DE   (hex)		Genoray
-24C9DE     (base 16)		Genoray
-				#812 Byucksan Technopia 434-6 Sangdaewon 1-Dong
-				Seongnam-City  Gyeonggi-Do  462-716
-				KR
-
-54-05-5F   (hex)		Alcatel Lucent
-54055F     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-6C-5D-63   (hex)		ShenZhen Rapoo Technology Co., Ltd.
-6C5D63     (base 16)		ShenZhen Rapoo Technology Co., Ltd.
-				Block A1,B1,B2,1st second stage, 1st Industrial Park, 3rd Industrial Zone ,Fenghuang Fuyong, BaoAn 
-				ShenZhen    518103
-				CN
-
-94-16-73   (hex)		Point Core SARL
-941673     (base 16)		Point Core SARL
-				29/31 Rue du Bois Galon
-				FONTENAY SOUS BOIS  Ile de France  94120
-				FR
-
-5C-56-ED   (hex)		3pleplay Electronics Private Limited
-5C56ED     (base 16)		3pleplay Electronics Private Limited
-				Plot No 54, Eshwarapuri Colony
-				Hyderabad  Andhra Pradesh  500083
-				IN
-
-78-02-8F   (hex)		Adaptive Spectrum and Signal Alignment (ASSIA), Inc.
-78028F     (base 16)		Adaptive Spectrum and Signal Alignment (ASSIA), Inc.
-				333 Twin Dolphin Drive
-				Redwood City  CA  94065
-				US
-
-DC-16-A2   (hex)		Medtronic Diabetes
-DC16A2     (base 16)		Medtronic Diabetes
-				18000 Devonshire St
-				Northridge  CA  91325
-				US
-
-30-8C-FB   (hex)		Dropcam
-308CFB     (base 16)		Dropcam
-				160 Spear Street
-				San Francisco  CA  94105
-				US
-
-D0-EB-9E   (hex)		Seowoo Inc.
-D0EB9E     (base 16)		Seowoo Inc.
-				#B101 Seojung B/D, 590-9 Guui-dong, Gwangjin-gu,
-				Seoul    143-831
-				KR
-
-BC-CD-45   (hex)		VOISMART
-BCCD45     (base 16)		VOISMART
-				VIA BENIGNO CRESPI 12
-				MILANO    20159
-				IT
-
-14-3E-60   (hex)		Nokia
-143E60     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-70-32-D5   (hex)		Athena Wireless Communications Inc
-7032D5     (base 16)		Athena Wireless Communications Inc
-				12425 W Bell Rd
-				Surprise  AZ  85378
-				US
-
-78-51-0C   (hex)		LiveU Ltd.
-78510C     (base 16)		LiveU Ltd.
-				5 Hagavish St.
-				Kfar-Saba    44641
-				IL
-
-44-AA-E8   (hex)		Nanotec Electronic GmbH & Co. KG
-44AAE8     (base 16)		Nanotec Electronic GmbH & Co. KG
-				Gewerbestrasse 11
-				Landsham  Bavaria  85652
-				DE
-
-D4-28-B2   (hex)		ioBridge, Inc.
-D428B2     (base 16)		ioBridge, Inc.
-				225 Cedar Hill Street
-				Marlborough  MA  01752
-				US
-
-84-27-CE   (hex)		Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints
-8427CE     (base 16)		Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints
-				Audiovisual Engineering - 2LL
-				Salt Lake City  UT  84150
-				US
-
-48-D8-FE   (hex)		ClarIDy Solutions, Inc.
-48D8FE     (base 16)		ClarIDy Solutions, Inc.
-				7F, No.9, ParkAvenue II Rd., Hsinchu Science Park, 
-				Hsinchu    300
-				TW
-
-D4-94-5A   (hex)		COSMO CO., LTD
-D4945A     (base 16)		COSMO CO., LTD
-				1-12, Higashi-Gotanda 2-chome
-				Shinagawa-ku  Tokyo  141-0022
-				JP
-
-30-4C-7E   (hex)		Panasonic Electric Works Automation Controls Techno Co.,Ltd.
-304C7E     (base 16)		Panasonic Electric Works Automation Controls Techno Co.,Ltd.
-				2-9-18 Chidori
-				Oota-ku  Tokyo  146-8540
-				JP
-
-5C-F2-07   (hex)		Speco Technologies
-5CF207     (base 16)		Speco Technologies
-				200 New Highway
-				Amityville  New York  11701
-				US
-
-B4-2A-39   (hex)		ORBIT MERRET, spol. s r. o.
-B42A39     (base 16)		ORBIT MERRET, spol. s r. o.
-				Vodnanska 675/30
-				Praha    198 00
-				CZ
-
-70-E8-43   (hex)		Beijing C&W Optical Communication Technology Co.,Ltd.
-70E843     (base 16)		Beijing C&W Optical Communication Technology Co.,Ltd.
-				2/F Yufa Plaza, No.19 Xiaoying Beilu, Chaoyang District, 
-				Beijing    100101
-				CN
-
-2C-7E-CF   (hex)		Onzo Ltd
-2C7ECF     (base 16)		Onzo Ltd
-				6 Great Newport Street
-				London    WC2H 7JB
-				GB
-
-50-E5-49   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-50E549     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				
-				Pin-Jen  Taoyuan  324
-				TW
-
-B4-B8-8D   (hex)		Thuh Company
-B4B88D     (base 16)		Thuh Company
-				605  Territorial Dr
-				Bolingbrook  IL  60440
-				US
-
-4C-73-A5   (hex)		KOVE
-4C73A5     (base 16)		KOVE
-				14 N. Peoria Street
-				Chicago  IL  60607
-				US
-
-70-A4-1C   (hex)		Advanced Wireless Dynamics S.L.
-70A41C     (base 16)		Advanced Wireless Dynamics S.L.
-				Centro de Empresas UPM oficina 3
-				Pozuelo de Alarcon  Madrid  28223
-				ES
-
-BC-BB-C9   (hex)		Kellendonk Elektronik GmbH
-BCBBC9     (base 16)		Kellendonk Elektronik GmbH
-				Butzweilerhof Allee 4
-				Cologne  NRW  50829
-				DE
-
-E4-2A-D3   (hex)		Magneti Marelli S.p.A. Powertrain
-E42AD3     (base 16)		Magneti Marelli S.p.A. Powertrain
-				Via del Timavo 33
-				Bologna    40128
-				IT
-
-E8-3E-B6   (hex)		RIM
-E83EB6     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-BC-35-E5   (hex)		Hydro Systems Company
-BC35E5     (base 16)		Hydro Systems Company
-				3798 Round Bottom Road
-				Cincinnati  Ohio  45244
-				US
-
-9C-5D-95   (hex)		VTC Electronics Corp.
-9C5D95     (base 16)		VTC Electronics Corp.
-				5F,No.21,Sec.6,Zhongxiao E.Rd.,Nangang District
-				Taipei    11575
-				TW
-
-B8-A8-AF   (hex)		Logic S.p.A.
-B8A8AF     (base 16)		Logic S.p.A.
-				Via Galilei 5
-				Cassina de' Pecchi  MI  20060
-				IT
-
-60-F6-73   (hex)		TERUMO CORPORATION
-60F673     (base 16)		TERUMO CORPORATION
-				1500,Inokuchi,Nakai-machi
-				Ashigarakami-gun  Kanagawa  259-0151
-				JP
-
-28-CC-FF   (hex)		Corporacion Empresarial Altra SL
-28CCFF     (base 16)		Corporacion Empresarial Altra SL
-				Marie Curie 21
-				Malaga    29590
-				ES
-
-94-FD-1D   (hex)		WhereWhen Corp
-94FD1D     (base 16)		WhereWhen Corp
-				96A Flynn Avenue
-				Mountain View  California  94043
-				US
-
-4C-07-C9   (hex)		COMPUTER OFFICE Co.,Ltd.
-4C07C9     (base 16)		COMPUTER OFFICE Co.,Ltd.
-				1368-10 Muramatsu-cho
-				Ise-shi  Mie-ken  515-0507
-				JP
-
-F8-76-9B   (hex)		Neopis Co., Ltd.
-F8769B     (base 16)		Neopis Co., Ltd.
-				#401 Neo bd., 196-44 Anyang7-Dong
-				Anyang  Kyonggi-Do  430-857
-				KR
-
-74-B0-0C   (hex)		Network Video Technologies, Inc
-74B00C     (base 16)		Network Video Technologies, Inc
-				4005 Bohannon Drive
-				Menlo Park  CA  94025
-				US
-
-E8-40-40   (hex)		Cisco Systems, Inc
-E84040     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D8-9D-B9   (hex)		eMegatech International Corp.
-D89DB9     (base 16)		eMegatech International Corp.
-				Room 403, No.24 Wucyuan 2nd Rd.,
-				Sinjhuang City, Taipei County,    238
-				TW
-
-40-5A-9B   (hex)		ANOVO
-405A9B     (base 16)		ANOVO
-				ZI de Bracheux 
-				BEAUVAIS    60000
-				FR
-
-E0-69-95   (hex)		PEGATRON CORPORATION
-E06995     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-84-DE-3D   (hex)		Crystal Vision Ltd
-84DE3D     (base 16)		Crystal Vision Ltd
-				Lion Technology park
-				Whittlesford/ Cambridge  Cambs  CB22 4WL
-				GB
-
-D0-75-BE   (hex)		Reno A&E
-D075BE     (base 16)		Reno A&E
-				4655 Aircenter Circle
-				Reno  Nevada  89502
-				US
-
-BC-6E-76   (hex)		Green Energy Options Ltd
-BC6E76     (base 16)		Green Energy Options Ltd
-				3 St. Mary's Court, Main Street
-				Cambridge  Cambridgeshire  CB23 7QS
-				GB
-
-E8-28-D5   (hex)		Cots Technology
-E828D5     (base 16)		Cots Technology
-				C-702, Bundang Techno Park, 145,
-				Sungnam-City  Kyounggi-do  463-760
-				KR
-
-F8-DA-F4   (hex)		Taishan Online Technology Co., Ltd.
-F8DAF4     (base 16)		Taishan Online Technology Co., Ltd.
-				4/F Fangda Building, South Area, Hi-tech Industial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-08-D5-C0   (hex)		Seers Technology Co., Ltd
-08D5C0     (base 16)		Seers Technology Co., Ltd
-				1210 Techcenter, SKnTechnopark, 190-1
-				Seongnam-si  Gyeonggi-do  462-721
-				KR
-
-6C-33-A9   (hex)		Magicjack LP
-6C33A9     (base 16)		Magicjack LP
-				5700 Georgia Avenue
-				West Palm Beach  FL  33405
-				US
-
-10-8C-CF   (hex)		Cisco Systems, Inc
-108CCF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D8-E3-AE   (hex)		CIRTEC MEDICAL SYSTEMS
-D8E3AE     (base 16)		CIRTEC MEDICAL SYSTEMS
-				101B Cooper Court
-				Los Gatos  CA  95032
-				US
-
-08-B7-EC   (hex)		Wireless Seismic
-08B7EC     (base 16)		Wireless Seismic
-				13100 SW Freeway
-				Sugar Land  TX  77478
-				US
-
-18-AF-9F   (hex)		DIGITRONIC Automationsanlagen GmbH
-18AF9F     (base 16)		DIGITRONIC Automationsanlagen GmbH
-				Auf der Langwies 1
-				Wallbach  Hessen  65510
-				DE
-
-00-B3-42   (hex)		MacroSAN Technologies Co., Ltd.
-00B342     (base 16)		MacroSAN Technologies Co., Ltd.
-				Room 102, No.2 Building
-				Hangzhou  Zhejiang  310052
-				CN
-
-1C-F5-E7   (hex)		Turtle Industry Co., Ltd.
-1CF5E7     (base 16)		Turtle Industry Co., Ltd.
-				1-12-4 Nishineminami
-				Tsutiura  Ibaraki  300-0842
-				JP
-
-98-0E-E4   (hex)		Private
-980EE4     (base 16)		Private
-
-44-7D-A5   (hex)		VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD
-447DA5     (base 16)		VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD
-				Room 502, Wing A, World Trade Center
-				 Beijing,     
-				CN
-
-0C-CD-D3   (hex)		EASTRIVER TECHNOLOGY CO., LTD.
-0CCDD3     (base 16)		EASTRIVER TECHNOLOGY CO., LTD.
-				30 JINNIU XINCUN
-				DONGGUAN  GUANGDONG  523010
-				CN
-
-E4-6C-21   (hex)		messMa GmbH
-E46C21     (base 16)		messMa GmbH
-				Am Stadtfeld 8
-				Ixleben  Sachsen-Anhalt  39167
-				DE
-
-00-B0-33   (hex)		OAO Izhevskiy radiozavod
-00B033     (base 16)		OAO Izhevskiy radiozavod
-				19 Bazisnaya street
-				Izhevsk  Udmurt Republic  426034
-				RU
-
-08-17-35   (hex)		Cisco Systems, Inc
-081735     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C8-9C-1D   (hex)		Cisco Systems, Inc
-C89C1D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E4-37-D7   (hex)		HENRI DEPAEPE S.A.S.
-E437D7     (base 16)		HENRI DEPAEPE S.A.S.
-				75/77 RUE DU PRE BROCHET
-				SANNOIS    95112
-				FR
-
-E0-A1-D7   (hex)		SFR
-E0A1D7     (base 16)		SFR
-				40/42 Quai du point du jour
-				Boulogne Billancourt  Hauts de Seine  92659
-				FR
-
-94-81-A4   (hex)		Azuray Technologies
-9481A4     (base 16)		Azuray Technologies
-				7470 SW Bridgeport Rd
-				Durham  OR  97224
-				US
-
-BC-E0-9D   (hex)		Eoslink
-BCE09D     (base 16)		Eoslink
-				#602, 900-1
-				Anyang-City  Kyonggi-Do  431-060
-				KR
-
-9C-22-0E   (hex)		TASCAN Systems GmbH
-9C220E     (base 16)		TASCAN Systems GmbH
-				Max-Planck-Str. 38
-				Cologne  Köln  50858
-				DE
-
-7C-DD-90   (hex)		Shenzhen Ogemray Technology Co., Ltd.
-7CDD90     (base 16)		Shenzhen Ogemray Technology Co., Ltd.
-				3 Floor, 9 Building, Minxing Industrial Zone,
-				Shenzhen  Guangdong  518131
-				CN
-
-0C-3C-65   (hex)		Dome Imaging Inc
-0C3C65     (base 16)		Dome Imaging Inc
-				400 Fifth Av
-				Waltham  MA  02451
-				US
-
-C8-DF-7C   (hex)		Nokia Corporation
-C8DF7C     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-B4-4C-C2   (hex)		NR ELECTRIC CO., LTD
-B44CC2     (base 16)		NR ELECTRIC CO., LTD
-				69,Suyuan Avenue
-				Nanjing  Jiangsu  211102
-				CN
-
-48-CB-6E   (hex)		Cello Electronics (UK) Ltd
-48CB6E     (base 16)		Cello Electronics (UK) Ltd
-				Cliff Lodge
-				Leyburn  North Yorkshire  DL8 5NS
-				GB
-
-BC-43-77   (hex)		Hang Zhou Huite Technology Co.,ltd.
-BC4377     (base 16)		Hang Zhou Huite Technology Co.,ltd.
-				Rm1338,Block A¬FuLi Technology Building ,No.328,WenEr Rd
-				Hang Zhou  Zhe Jiang  310012
-				CN
-
-CC-76-69   (hex)		SEETECH
-CC7669     (base 16)		SEETECH
-				19-15, Seoku-dong
-				Hwasung-si  Gyeonggi-do  445-170
-				KR
-
-AC-20-AA   (hex)		DMATEK Co., Ltd.
-AC20AA     (base 16)		DMATEK Co., Ltd.
-				11F.-2, No.386, Shizheng Rd., Xitun Dist.,
-				Taichung    40757
-				TW
-
-FC-AF-6A   (hex)		Qulsar Inc
-FCAF6A     (base 16)		Qulsar Inc
-				Torshamnsgatan 35
-				Kista    SE-16440
-				SE
-
-34-6F-92   (hex)		White Rodgers Division
-346F92     (base 16)		White Rodgers Division
-				8100 West Florissant
-				St. Louis  MO  63136
-				US
-
-34-BD-F9   (hex)		Shanghai WDK Industrial Co.,Ltd.
-34BDF9     (base 16)		Shanghai WDK Industrial Co.,Ltd.
-				No.2100,Songzhen Road,Songjiang District
-				Shanghai    201606
-				CN
-
-CC-BE-71   (hex)		OptiLogix BV
-CCBE71     (base 16)		OptiLogix BV
-				Joop Geesinkweg 999
-				Amsterdam  NH  1096AZ
-				NL
-
-0C-46-9D   (hex)		MS Sedco
-0C469D     (base 16)		MS Sedco
-				8701 Castle Park Drive
-				Indianapolis    46256
-				US
-
-B0-9A-E2   (hex)		STEMMER IMAGING GmbH
-B09AE2     (base 16)		STEMMER IMAGING GmbH
-				Gutenbergstraße 11
-				Puchheim  By  82178
-				DE
-
-14-EE-9D   (hex)		AirNav Systems LLC
-14EE9D     (base 16)		AirNav Systems LLC
-				4660 La Jolla Village Dr. - Suite 500
-				San Diego  California  CA 92122
-				US
-
-78-D0-04   (hex)		Neousys Technology Inc.
-78D004     (base 16)		Neousys Technology Inc.
-				13F.-1, NO.1, BAOSHENG RD., 
-				YONGHE CITY  TAIPEI COUNTY   23444
-				TW
-
-88-95-B9   (hex)		Unified Packet Systems Crop
-8895B9     (base 16)		Unified Packet Systems Crop
-				1F., No32,Lane 15,SEC 6, MinQuan E Rd., 
-				Taipei  Neihu  114
-				TW
-
-D8-FE-8F   (hex)		IDFone Co., Ltd.
-D8FE8F     (base 16)		IDFone Co., Ltd.
-				7F Ace techno tower 5th B/D, 197-22
-				Guro-dong, Guro-gu  Seoul  152-766
-				KR
-
-88-8C-19   (hex)		Brady Corp Asia Pacific Ltd
-888C19     (base 16)		Brady Corp Asia Pacific Ltd
-				1, Kaki Bukit Crescent
-				    416236
-				SG
-
-44-8C-52   (hex)		KTIS CO., Ltd
-448C52     (base 16)		KTIS CO., Ltd
-				1208ho-103dong
-				Ojung-Gu, Bucheon-si  Gyeonggi-do  421-808
-				KR
-
-00-6D-FB   (hex)		Vutrix Technologies Ltd
-006DFB     (base 16)		Vutrix Technologies Ltd
-				Unit 1 Red Lodge Business Park
-				Weston-super-mare  North Somerset  BS24 7TN
-				GB
-
-84-18-88   (hex)		Juniper Networks
-841888     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-90-67-B5   (hex)		Alcatel-Lucent
-9067B5     (base 16)		Alcatel-Lucent
-				600-700 Mountain Ave.
-				Murray Hiill  NJ  07974-0636
-				US
-
-E0-F3-79   (hex)		Vaddio
-E0F379     (base 16)		Vaddio
-				9433 Science Center Drive
-				New Hope  MN  55428
-				US
-
-78-B6-C1   (hex)		AOBO Telecom Co.,Ltd
-78B6C1     (base 16)		AOBO Telecom Co.,Ltd
-				Room1508,Jiangong Building
-				Hangzhou  ZheJiang   310012
-				CN
-
-08-D2-9A   (hex)		Proformatique
-08D29A     (base 16)		Proformatique
-				10 bis rue Lucien Voilin
-				Puteaux    92800
-				FR
-
-C8-93-83   (hex)		Embedded Automation, Inc.
-C89383     (base 16)		Embedded Automation, Inc.
-				17345 Abbey Drive
-				Surrey  BC  V4N 4M3
-				CA
-
-78-A0-51   (hex)		iiNet Labs Pty Ltd 
-78A051     (base 16)		iiNet Labs Pty Ltd 
-				Level 1
-				Subiaco  WA  6008
-				AU
-
-80-4F-58   (hex)		ThinkEco, Inc.
-804F58     (base 16)		ThinkEco, Inc.
-				303 Fifth Avenue
-				New York  NY  10016
-				US
-
-04-75-F5   (hex)		CSST
-0475F5     (base 16)		CSST
-				Building 6, CSST industrial park, Tong fuyu Industrial zone
-				Shenzhen  Guangdong  518107
-				CN
-
-24-BA-30   (hex)		Technical Consumer Products, Inc.
-24BA30     (base 16)		Technical Consumer Products, Inc.
-				325 Campus Drive
-				Aurora  OH  44202
-				US
-
-18-8E-D5   (hex)		TP Vision Belgium N.V. - innovation site Brugge
-188ED5     (base 16)		TP Vision Belgium N.V. - innovation site Brugge
-				Pathoekeweg 11
-				Bruges  West Flanders  8000
-				BE
-
-E8-0C-38   (hex)		DAEYOUNG INFORMATION SYSTEM CO., LTD
-E80C38     (base 16)		DAEYOUNG INFORMATION SYSTEM CO., LTD
-				#826 TAMNIP-DONG, YUSEONG-GO, 
-				DAEJON    305-510
-				KR
-
-E0-8A-7E   (hex)		Exponent
-E08A7E     (base 16)		Exponent
-				149 Commonwealth Drive
-				Menlo Park  CA  94025
-				US
-
-E4-27-71   (hex)		Smartlabs
-E42771     (base 16)		Smartlabs
-				72, Oktyabrskaya Street
-				Moscow    127521
-				RU
-
-34-DF-2A   (hex)		Fujikon Industrial Co.,Limited
-34DF2A     (base 16)		Fujikon Industrial Co.,Limited
-				16/F., Tower 1, Grand Central Plaza,138 Shatin Rural 
-				    523930
-				HK
-
-2C-DD-0C   (hex)		Discovergy GmbH
-2CDD0C     (base 16)		Discovergy GmbH
-				Pascalstraße 15
-				Aachen  NRW  52076
-				DE
-
-40-B2-C8   (hex)		Nortel Networks
-40B2C8     (base 16)		Nortel Networks
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-70-A1-91   (hex)		Trendsetter Medical, LLC
-70A191     (base 16)		Trendsetter Medical, LLC
-				2030 Ardmore BLVD
-				Pittsburgh  PA  15221
-				US
-
-70-8B-78   (hex)		citygrow technology co., ltd
-708B78     (base 16)		citygrow technology co., ltd
-				rm1404, blk A, ,5 - 21 Pak Tin Par Street
-				Tsuen Wan    
-				HK
-
-64-31-7E   (hex)		Dexin Corporation
-64317E     (base 16)		Dexin Corporation
-				14F-8, No. 258, Lian Cheng Rd.
-				Chung Ho City, Taipei Hsien    235
-				TW
-
-3C-99-F7   (hex)		Lansentechnology AB
-3C99F7     (base 16)		Lansentechnology AB
-				Rörkullsvägen 4
-				Halmstad    30241
-				SE
-
-50-7D-02   (hex)		BIODIT
-507D02     (base 16)		BIODIT
-				Calle Gustave Eiffel 3
-				Paterna  Valencia  46980
-				ES
-
-B4-A4-E3   (hex)		Cisco Systems, Inc
-B4A4E3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-8C-1F-94   (hex)		RF Surgical System Inc. 
-8C1F94     (base 16)		RF Surgical System Inc. 
-				9740 Appaloosa Road 
-				San Diego   CA  92131
-				US
-
-44-91-DB   (hex)		Shanghai Huaqin Telecom Technology Co.,Ltd
-4491DB     (base 16)		Shanghai Huaqin Telecom Technology Co.,Ltd
-				No.1 Building,399 Keyuan Road, Zhangjian Hi-Tech Park,
-				shanghai  shanghai  201203
-				CN
-
-14-D7-6E   (hex)		CONCH ELECTRONIC Co.,Ltd
-14D76E     (base 16)		CONCH ELECTRONIC Co.,Ltd
-				No.3 Keji 1st Load.
-				Tainan    70955
-				TW
-
-CC-6B-98   (hex)		Minetec Wireless Technologies
-CC6B98     (base 16)		Minetec Wireless Technologies
-				10 Kembla Way
-				Willetton  WA  6155
-				AU
-
-3C-04-BF   (hex)		PRAVIS SYSTEMS Co.Ltd.,
-3C04BF     (base 16)		PRAVIS SYSTEMS Co.Ltd.,
-				4F, 5F Jaeyoon Bld, 75-3 Yangjae-Dong,
-				Seoul  Seocho-Gu  137-889
-				KR
-
-94-DD-3F   (hex)		A+V Link Technologies, Corp.
-94DD3F     (base 16)		A+V Link Technologies, Corp.
-				5F., No.550, Xianzheng 2nd Rd.
-				Zhubei City  Hsinchu Country  30268
-				TW
-
-F4-42-27   (hex)		S & S Research Inc.
-F44227     (base 16)		S & S Research Inc.
-				89 Access Rd #10
-				Norwood  MA  02062
-				US
-
-C8-A7-29   (hex)		SYStronics Co., Ltd.
-C8A729     (base 16)		SYStronics Co., Ltd.
-				#301-1404, Buchun Techno-Park II
-				Buchun City  Kyung gi-do  421-741
-				KR
-
-44-54-C0   (hex)		Thompson Aerospace
-4454C0     (base 16)		Thompson Aerospace
-				18 Technology
-				Irvine  CA  92618
-				US
-
-C4-F4-64   (hex)		Spica international
-C4F464     (base 16)		Spica international
-				Pot k sejmiscu 33
-				Ljubljana    1000
-				SI
-
-60-2A-54   (hex)		CardioTek B.V.
-602A54     (base 16)		CardioTek B.V.
-				Amerikalaan 70
-				Maastricht Airport  Limburg  6199AE
-				NL
-
-BC-FF-AC   (hex)		TOPCON CORPORATION
-BCFFAC     (base 16)		TOPCON CORPORATION
-				75-1, Hasunuma-cho
-				Itabashi-ku  TOKYO  174-8580
-				JP
-
-44-5E-F3   (hex)		Tonalite Holding B.V.
-445EF3     (base 16)		Tonalite Holding B.V.
-				Nieuw Amsterdamsestraat 40
-				Emmen  Drenthe  7814 VA
-				NL
-
-68-DB-96   (hex)		OPWILL Technologies CO .,LTD
-68DB96     (base 16)		OPWILL Technologies CO .,LTD
-				Room 415,Digital Media Building,NO.7 Shangdi Information Road,HaiDian District,
-				Beijing    100085
-				CN
-
-7C-55-E7   (hex)		YSI, Inc.
-7C55E7     (base 16)		YSI, Inc.
-				1725 Brannum Lane
-				Yellow Springs  Ohio  45387
-				US
-
-70-B0-8C   (hex)		Shenou Communication Equipment Co.,Ltd
-70B08C     (base 16)		Shenou Communication Equipment Co.,Ltd
-				No.118 Middle Juguang Road, High & New Industrial Zone
-				Wenzhou  Zhejiang  325029
-				CN
-
-C0-3B-8F   (hex)		Minicom Digital Signage
-C03B8F     (base 16)		Minicom Digital Signage
-				24 Hebron Road
-				Jerusalem    93542
-				IL
-
-20-FE-DB   (hex)		M2M Solution S.A.S.
-20FEDB     (base 16)		M2M Solution S.A.S.
-				Centre d'Affaires Regus Bat.D
-				Mougins     06254 
-				FR
-
-0C-8D-98   (hex)		TOP EIGHT IND CORP
-0C8D98     (base 16)		TOP EIGHT IND CORP
-				8F.,No79-1 Zhouzi St., Neihu District, Taipei City  (Neihu Technology Park)
-				Taipei    11493
-				TW
-
-40-C7-C9   (hex)		Naviit Inc.
-40C7C9     (base 16)		Naviit Inc.
-				3058A Scott Blvd.
-				Santa Clara  CA  95054
-				US
-
-7C-BB-6F   (hex)		Cosco Electronics Co., Ltd.
-7CBB6F     (base 16)		Cosco Electronics Co., Ltd.
-				#1101, ENC Dream tower, 327-27
-				Seoul    153-793
-				KR
-
-94-A7-BC   (hex)		BodyMedia, Inc.
-94A7BC     (base 16)		BodyMedia, Inc.
-				420 Fort Duquesne Blvd
-				Pittsburgh  PA  15222
-				US
-
-C8-A1-B6   (hex)		Shenzhen Longway Technologies Co., Ltd
-C8A1B6     (base 16)		Shenzhen Longway Technologies Co., Ltd
-				Suite 707,Incubation Building, China Academy of Science&Tech Development, South area 
-				Shenzhen  Guangdong  518057
-				CN
-
-64-A2-32   (hex)		OOO Samlight
-64A232     (base 16)		OOO Samlight
-				44A, Dubninskaya str., 
-				Moscow    127591
-				RU
-
-64-FC-8C   (hex)		Zonar Systems
-64FC8C     (base 16)		Zonar Systems
-				18200 Cascade Ave South
-				Seattle  WA  98118
-				US
-
-D0-57-4C   (hex)		Cisco Systems, Inc
-D0574C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F8-DA-E2   (hex)		NDC Technologies
-F8DAE2     (base 16)		NDC Technologies
-				8001 Technology Blvd
-				Dayton  OH  45424
-				US
-
-70-5E-AA   (hex)		Action Target, Inc.
-705EAA     (base 16)		Action Target, Inc.
-				PO Box 636
-				Provo  UT  84603
-				US
-
-34-F9-68   (hex)		ATEK Products, LLC
-34F968     (base 16)		ATEK Products, LLC
-				210 NE 10th Avenue
-				Brainerd  MN  56401
-				US
-
-20-B0-F7   (hex)		Enclustra GmbH
-20B0F7     (base 16)		Enclustra GmbH
-				Technoparkstrasse 1
-				Zurich  ZH  CH-8005
-				CH
-
-54-31-31   (hex)		Raster Vision Ltd
-543131     (base 16)		Raster Vision Ltd
-				Unit 1, Crundalls
-				Tonbridge   Kent  TN12 7EA
-				GB
-
-D0-E3-47   (hex)		Yoga
-D0E347     (base 16)		Yoga
-				Tammsaare tee 47
-				Tallinn  Harjumaa  11316
-				EE
-
-F0-ED-1E   (hex)		Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.
-F0ED1E     (base 16)		Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.
-				Gersan Sanayi Sitesi 658.Sokak No:16
-				ANKARA    06370
-				TR
-
-C4-16-FA   (hex)		Prysm Inc
-C416FA     (base 16)		Prysm Inc
-				180 Baytech Drive
-				San Jose  California  95134
-				US
-
-50-6F-9A   (hex)		Wi-Fi Alliance
-506F9A     (base 16)		Wi-Fi Alliance
-				3925 W. Braker Lane
-				Austin  TX  78759
-				US
-
-84-29-14   (hex)		EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG
-842914     (base 16)		EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG
-				Industriezeile 36, 
-				Linz    4020
-				AT
-
-BC-7D-D1   (hex)		Radio Data Comms
-BC7DD1     (base 16)		Radio Data Comms
-				5/20-30 Stubbs Street
-				Silverwater   New South Wales (NSW)  2128
-				AU
-
-58-50-76   (hex)		Linear Equipamentos Eletronicos SA
-585076     (base 16)		Linear Equipamentos Eletronicos SA
-				Praca Linear 100
-				Santa Rita do Sapucai  MG  37540000
-				BR
-
-F0-F9-F7   (hex)		IES GmbH & Co. KG
-F0F9F7     (base 16)		IES GmbH & Co. KG
-				Darmcher Grund 22
-				Meinerzhagen    58540
-				DE
-
-38-58-0C   (hex)		Panaccess Systems GmbH
-38580C     (base 16)		Panaccess Systems GmbH
-				Gutenbergstr. 8
-				Ismaning  BY  85737
-				DE
-
-44-51-DB   (hex)		Raytheon BBN Technologies
-4451DB     (base 16)		Raytheon BBN Technologies
-				10 Moulton Street
-				Cambridge  MA  02138
-				US
-
-DC-FA-D5   (hex)		STRONG Ges.m.b.H.
-DCFAD5     (base 16)		STRONG Ges.m.b.H.
-				Franz-Josefs-Kai 1
-				Vienna    1010
-				AT
-
-6C-8D-65   (hex)		Wireless Glue Networks, Inc.
-6C8D65     (base 16)		Wireless Glue Networks, Inc.
-				1601 N. Main Street, Suite 202
-				Walnut Creek  CA  94596
-				US
-
-98-03-A0   (hex)		ABB n.v. Power Quality Products
-9803A0     (base 16)		ABB n.v. Power Quality Products
-				10 allée centrale
-				Jumet    6040
-				BE
-
-CC-43-E3   (hex)		Trump s.a.
-CC43E3     (base 16)		Trump s.a.
-				rue de la Maitrise 9
-				Nivelles    1400
-				BE
-
-F8-C0-91   (hex)		Highgates Technology
-F8C091     (base 16)		Highgates Technology
-				1415 Highgates Ave
-				Los Angeles  CA  90042
-				US
-
-AC-9B-84   (hex)		Smak Tecnologia e Automacao
-AC9B84     (base 16)		Smak Tecnologia e Automacao
-				Av. Sto. Antonio, 201 - Bela Vista
-				Osasco  São Paulo  CEP 06086-075
-				BR
-
-90-F2-78   (hex)		Radius Gateway
-90F278     (base 16)		Radius Gateway
-				520 E. Montford Ave
-				Ada  OH  45810
-				US
-
-80-66-29   (hex)		Prescope Technologies CO.,LTD.
-806629     (base 16)		Prescope Technologies CO.,LTD.
-				12F-1,No.192,Sec 2,Chung Hsin Road
-				Hsin Tien City  Taipei County  23146
-				TW
-
-24-1F-2C   (hex)		Calsys, Inc.
-241F2C     (base 16)		Calsys, Inc.
-				2700 Augustine drive, Ste145
-				Santa Clara  California  95054
-				US
-
-F0-BD-F1   (hex)		Sipod Inc.
-F0BDF1     (base 16)		Sipod Inc.
-				4633 Old Ironsides Drive, #400
-				Santa Clara  CA  95054
-				US
-
-64-67-07   (hex)		Beijing Omnific Technology, Ltd.
-646707     (base 16)		Beijing Omnific Technology, Ltd.
-				Rm. 402, Building 1, Shui Mu Qing Hua Community
-				Beijing    100190
-				CN
-
-AC-A0-16   (hex)		Cisco Systems, Inc
-ACA016     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-E7-47   (hex)		Deltanet AG
-58E747     (base 16)		Deltanet AG
-				Riedstrasse 8
-				Dietikon  Zurich  8953
-				CH
-
-40-40-22   (hex)		ZIV
-404022     (base 16)		ZIV
-				Polígono Parque Tecnológico, 210
-				ZAMUDIO  VIZCAYA  48170
-				ES
-
-A8-5B-B0   (hex)		Shenzhen Dehoo Technology Co.,Ltd
-A85BB0     (base 16)		Shenzhen Dehoo Technology Co.,Ltd
-				5C,Tianzhan Building Tianan Cyberpark,
-				ShenZhen  Guang Dong  518040
-				CN
-
-44-A6-89   (hex)		PROMAX ELECTRONICA SA
-44A689     (base 16)		PROMAX ELECTRONICA SA
-				FRANCESC MORAGAS 71-75
-				HOSPITALET DE LLOBREGAT  BARCELONA  08907
-				ES
-
-40-61-8E   (hex)		Stella-Green Co
-40618E     (base 16)		Stella-Green Co
-				1-5-16 Edobori, Nishi-ku
-				Osaka    550-0002
-				JP
-
-68-E4-1F   (hex)		Unglaube Identech GmbH
-68E41F     (base 16)		Unglaube Identech GmbH
-				An der Moosach 3a
-				Massenhausen  Bayern  85376
-				DE
-
-4C-60-D5   (hex)		airPointe of New Hampshire
-4C60D5     (base 16)		airPointe of New Hampshire
-				35E Industrial Way
-				Rochester  NH  03867
-				US
-
-88-87-17   (hex)		CANON INC.
-888717     (base 16)		CANON INC.
-				3-30-2
-				Ohta-Ku  Tokyo  146-8501
-				JP
-
-6C-DC-6A   (hex)		Promethean Limited
-6CDC6A     (base 16)		Promethean Limited
-				Activlab
-				Blackburn  Lancashire  BB1 5SN
-				GB
-
-90-55-AE   (hex)		Ericsson, EAB/RWI/K
-9055AE     (base 16)		Ericsson, EAB/RWI/K
-				Skolgången 17
-				Gävle    SE-800 06
-				SE
-
-10-10-B6   (hex)		McCain Inc
-1010B6     (base 16)		McCain Inc
-				2365 Oak Ridge Way
-				Vista  CA  92081
-				US
-
-00-93-63   (hex)		Uni-Link Technology Co., Ltd.
-009363     (base 16)		Uni-Link Technology Co., Ltd.
-				7-5, No.66, Sec.2, Nan-Kan Rd., Lu-Chu Hsiang,Taoyuan,Taiwan
-				Taoyuan  Taiwan  338
-				TW
-
-D4-82-3E   (hex)		Argosy Technologies, Ltd.
-D4823E     (base 16)		Argosy Technologies, Ltd.
-				73-221 Haystack Road
-				Palm Desert  CA  92260
-				US
-
-00-35-32   (hex)		Electro-Metrics Corporation
-003532     (base 16)		Electro-Metrics Corporation
-				231 Enterprise Road
-				Johnstown  New York  12095
-				US
-
-08-1F-F3   (hex)		Cisco Systems, Inc
-081FF3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-37-6F   (hex)		Young Electric Sign Co
-44376F     (base 16)		Young Electric Sign Co
-				1651 N 1000 W
-				Logan  UT  84321
-				US
-
-38-9F-83   (hex)		OTN Systems N.V.
-389F83     (base 16)		OTN Systems N.V.
-				Industrielaan 17b
-				Olen    2250
-				BE
-
-BC-6A-16   (hex)		tdvine
-BC6A16     (base 16)		tdvine
-				301 Maison Maru Building 
-				Seoul    135-010
-				KR
-
-00-3A-9D   (hex)		NEC Platforms, Ltd.
-003A9D     (base 16)		NEC Platforms, Ltd.
-				800 Shimomata
-				Kakegawa  Shizuoka  436-8501
-				JP
-
-28-CD-4C   (hex)		Individual Computers GmbH
-28CD4C     (base 16)		Individual Computers GmbH
-				Im Zemmer 6
-				Woffelsbach  NRW  52152
-				DE
-
-8C-53-F7   (hex)		A&D ENGINEERING CO., LTD.
-8C53F7     (base 16)		A&D ENGINEERING CO., LTD.
-				336-6 Dangsandong 6-ga, Yeongdeungpo-gu
-				Seoul    150-810
-				KR
-
-7C-76-73   (hex)		ENMAS GmbH
-7C7673     (base 16)		ENMAS GmbH
-				Holzkoppelweg 23
-				Kiel  Schleswig-Holstein  24251
-				DE
-
-6C-6F-18   (hex)		Stereotaxis, Inc.
-6C6F18     (base 16)		Stereotaxis, Inc.
-				4320 Forest Park Ave
-				St. Louis  MO  63108
-				US
-
-84-C7-27   (hex)		Gnodal Ltd
-84C727     (base 16)		Gnodal Ltd
-				178 - 180 Hotwell Road
-				Bristol    BS8 4RP
-				GB
-
-08-76-95   (hex)		Auto Industrial Co., Ltd.
-087695     (base 16)		Auto Industrial Co., Ltd.
-				14Floor, #235 Hanshin IT Tower, 
-				Seoul    152-768
-				KR
-
-AC-CE-8F   (hex)		HWA YAO TECHNOLOGIES CO., LTD
-ACCE8F     (base 16)		HWA YAO TECHNOLOGIES CO., LTD
-				NO. 6, LN. 48, NANSING RD.,
-				YONGKANG CITY, TAINAN COUNTY     710
-				TW
-
-8C-92-36   (hex)		Aus.Linx Technology Co., Ltd.
-8C9236     (base 16)		Aus.Linx Technology Co., Ltd.
-				6F-2, No. 190, Sec. 2, Zhongxing Rd., Xindian Dist.,
-				New Taipei City    23146
-				TW
-
-10-C7-3F   (hex)		Midas Klark Teknik Ltd
-10C73F     (base 16)		Midas Klark Teknik Ltd
-				Klark Teknik Building
-				Kidderminster  Worcestershire  DY11 7HJ
-				GB
-
-F8-91-2A   (hex)		GLP German Light Products GmbH
-F8912A     (base 16)		GLP German Light Products GmbH
-				Im Stöckmädle 13
-				Karlsbad  BW  76307
-				DE
-
-44-E4-9A   (hex)		OMNITRONICS PTY LTD
-44E49A     (base 16)		OMNITRONICS PTY LTD
-				27 SARICH CRT
-				OSBORNE PARK  WA  6017
-				AU
-
-08-F2-F4   (hex)		Net One Partners Co.,Ltd.
-08F2F4     (base 16)		Net One Partners Co.,Ltd.
-				2-8 Higashi Shinagawa 2-chome,
-				Tokyo    1400002
-				JP
-
-0C-7D-7C   (hex)		Kexiang Information Technology Co, Ltd.
-0C7D7C     (base 16)		Kexiang Information Technology Co, Ltd.
-				Room 1502, Longxi Hotel No.3788 Jiangnan Avenue. 
-				Hangzhou  Zhejiang  310053
-				CN
-
-30-37-A6   (hex)		Cisco Systems, Inc
-3037A6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-DC-1D-9F   (hex)		U & B tech
-DC1D9F     (base 16)		U & B tech
-				2F, Daeyoung buliding, 1423-6, Kwanyang-1Dong,
-				Anyang-Si  Gyeonggi-Do  431-061
-				KR
-
-78-5C-72   (hex)		Hioso Technology Co., Ltd.
-785C72     (base 16)		Hioso Technology Co., Ltd.
-				6th Floor, 12th Building, Wangtang Industrial Zone,
-				Shenzhen  Guangdong  518055
-				CN
-
-58-05-56   (hex)		Elettronica GF S.r.L.
-580556     (base 16)		Elettronica GF S.r.L.
-				Via Vittori, 63
-				FAENZA  RA  48018
-				IT
-
-B0-90-74   (hex)		Fulan Electronics Limited
-B09074     (base 16)		Fulan Electronics Limited
-				Flat B&C,3/F,A1 Block, Gaoxin Cyber-Tech Zone,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-94-F6-92   (hex)		Geminico co.,Ltd.
-94F692     (base 16)		Geminico co.,Ltd.
-				#102-1112, Chunui-Technopark, 200-1,
-				Bucheon-city  Kyunggi-do  420-857
-				KR
-
-68-EF-BD   (hex)		Cisco Systems, Inc
-68EFBD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F0-24-08   (hex)		Talaris (Sweden) AB
-F02408     (base 16)		Talaris (Sweden) AB
-				Taljs Sodra Industriomrade
-				Flen    64284
-				SE
-
-80-81-A5   (hex)		TONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd
-8081A5     (base 16)		TONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd
-				Tongqing Industry Park,jiuwei,xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518126
-				CN
-
-B4-82-FE   (hex)		ASKEY COMPUTER CORP
-B482FE     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-30-7C-30   (hex)		RIM
-307C30     (base 16)		RIM
-				295 Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-BC-4E-3C   (hex)		CORE STAFF CO., LTD.
-BC4E3C     (base 16)		CORE STAFF CO., LTD.
-				Shin-osaka Oriental Bldg. 14F, 7-1-26 Nishinakajima
-				Yodogawa-ku  Osaka  532-0011
-				JP
-
-50-2A-8B   (hex)		Telekom Research and Development Sdn Bhd
-502A8B     (base 16)		Telekom Research and Development Sdn Bhd
-				TMRND Innovation Centre
-				Cyberjaya  Selangor  63000
-				MY
-
-EC-43-E6   (hex)		AWCER Ltd.
-EC43E6     (base 16)		AWCER Ltd.
-				100-413 Bucheon Technopark
-				Bucheon-city  Gyeonggi-do  421-741
-				KR
-
-78-12-B8   (hex)		ORANTEK LIMITED
-7812B8     (base 16)		ORANTEK LIMITED
-				5/F, Building E, Dakan Tech Park, Dakan village, Xili Town, Nanshan District, Shenzhen, China
-				Shenzhen  Guangdong  518000
-				CN
-
-98-BC-99   (hex)		Edeltech Co.,Ltd.
-98BC99     (base 16)		Edeltech Co.,Ltd.
-				#302 Jamae Bldg, 1010-28, Sadang-dong, Dongjak=gu
-				Seoul    156-824
-				KR
-
-F0-2F-D8   (hex)		Bi2-Vision
-F02FD8     (base 16)		Bi2-Vision
-				16-504, 21-ban, Shimomaruko 4-chome, Oota-ku
-				Tokyo    146-0092
-				JP
-
-54-42-49   (hex)		Sony Corporation
-544249     (base 16)		Sony Corporation
-				Gotenyama Tec 5-1-2
-				Tokyo  Shinagawa-ku  141-0001
-				JP
-
-90-47-16   (hex)		RORZE CORPORATION
-904716     (base 16)		RORZE CORPORATION
-				1588-2 Michinoue, Kannabe-cho
-				Fukuyama  Hiroshima  720-2104
-				JP
-
-10-44-5A   (hex)		Shaanxi Hitech Electronic Co., LTD
-10445A     (base 16)		Shaanxi Hitech Electronic Co., LTD
-				35 Tuanjienan Rode,
-				Xian  Shaanxi  710075
-				CN
-
-F4-76-26   (hex)		Viltechmeda UAB 
-F47626     (base 16)		Viltechmeda UAB 
-				Kalvariju 125
-				Vilnius    LT-08221
-				LT
-
-0C-17-F1   (hex)		TELECSYS
-0C17F1     (base 16)		TELECSYS
-				31 chemin du fief aux pretres
-				L'ORBRIE    85200
-				FR
-
-00-3A-9B   (hex)		Cisco Systems, Inc
-003A9B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-34-27   (hex)		ERCO & GENER
-2C3427     (base 16)		ERCO & GENER
-				ZI de SAINT LAMBERT DES LEVEES
-				SAUMUR    49412
-				FR
-
-80-91-2A   (hex)		Lih Rong electronic Enterprise Co., Ltd.
-80912A     (base 16)		Lih Rong electronic Enterprise Co., Ltd.
-				2F, No. 2, Lane 387, Hsin Shu Road
-				Hsin Chuang  Taipei  242
-				TW
-
-7C-2F-80   (hex)		Gigaset Communications GmbH
-7C2F80     (base 16)		Gigaset Communications GmbH
-				SCM PE 2
-				Bocholt    46395
-				DE
-
-10-B7-F6   (hex)		Plastoform Industries Ltd.
-10B7F6     (base 16)		Plastoform Industries Ltd.
-				Units 1506A - 1512, Mita Centre,
-				Kwai Chung,    
-				HK
-
-44-8E-81   (hex)		VIG
-448E81     (base 16)		VIG
-				705 Hanshin IT Tower, 60-18, Kasan-dong, Geumcheon-gu
-				Seoul    KSXX0022
-				KR
-
-88-94-F9   (hex)		Gemicom Technology, Inc.
-8894F9     (base 16)		Gemicom Technology, Inc.
-				16F, Building B, No. 98, Sec 1, Hsin-Tai-Wu Rd.
-				Hsi-Chih city  Taipei  22102
-				TW
-
-50-2A-7E   (hex)		Smart electronic GmbH
-502A7E     (base 16)		Smart electronic GmbH
-				Industrie Str. 29
-				St. Georgen    78112
-				DE
-
-5C-87-78   (hex)		Cybertelbridge co.,ltd
-5C8778     (base 16)		Cybertelbridge co.,ltd
-				#901 Acehighend tower 2
-				Seoul    152-050
-				KR
-
-38-BB-23   (hex)		OzVision America LLC
-38BB23     (base 16)		OzVision America LLC
-				400 West Cummings Park
-				Woburn  MA  01801
-				US
-
-0C-84-11   (hex)		A.O. Smith Water Products
-0C8411     (base 16)		A.O. Smith Water Products
-				25589 Hwy 1
-				McBee  SC  29101
-				US
-
-E0-AB-FE   (hex)		Orb Networks, Inc.
-E0ABFE     (base 16)		Orb Networks, Inc.
-				428 13th Street
-				Oakland  CA  94612
-				US
-
-44-83-12   (hex)		Star-Net
-448312     (base 16)		Star-Net
-				Egoz 64 
-				Kiryat Byalik  Israel  27000
-				IL
-
-A0-5D-E7   (hex)		DIRECTV, Inc.
-A05DE7     (base 16)		DIRECTV, Inc.
-				2230 E. Imperial Hwy
-				El Segundo  CA  90245
-				US
-
-08-76-18   (hex)		ViE Technologies Sdn. Bhd.
-087618     (base 16)		ViE Technologies Sdn. Bhd.
-				no. 85-A, Lintang Bayan Lepas 11,
-				Bayan Lepas  Penang  11900
-				MY
-
-D0-E4-0B   (hex)		Wearable Inc.
-D0E40B     (base 16)		Wearable Inc.
-				3825 Charles Dr.
-				Northbrook  IL  60062
-				US
-
-74-7E-1A   (hex)		Red Embedded Design Limited
-747E1A     (base 16)		Red Embedded Design Limited
-				The Wave
-				Shipley  West Yorkshire  BD17 7Du
-				GB
-
-14-A8-6B   (hex)		ShenZhen Telacom Science&Technology Co., Ltd
-14A86B     (base 16)		ShenZhen Telacom Science&Technology Co., Ltd
-				B1701/1705 Pavilion, Hua Qiang Bei RD4002, Futian District
-				ShenZhen  GuangDong  518028
-				CN
-
-0C-C3-A7   (hex)		Meritec
-0CC3A7     (base 16)		Meritec
-				P.O. Box 8003
-				Painesville  Ohio  44077
-				US
-
-DC-E2-AC   (hex)		Lumens Digital Optics Inc.
-DCE2AC     (base 16)		Lumens Digital Optics Inc.
-				5F, No.35, Sintai Rd., Jhubei City
-				Jhubei   HsinChu  302
-				TW
-
-98-D8-8C   (hex)		Nortel Networks
-98D88C     (base 16)		Nortel Networks
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-78-19-2E   (hex)		NASCENT Technology
-78192E     (base 16)		NASCENT Technology
-				2744 Yorkmont RD
-				Charlotte  NC  28208
-				US
-
-48-EB-30   (hex)		ETERNA TECHNOLOGY, INC.
-48EB30     (base 16)		ETERNA TECHNOLOGY, INC.
-				3939 veselich ave
-				los angeles  california  90039
-				US
-
-4C-32-2D   (hex)		TELEDATA NETWORKS
-4C322D     (base 16)		TELEDATA NETWORKS
-				10 Hasadnaot Street
-				HERZLIYA    46120
-				IL
-
-AC-86-7E   (hex)		Create New Technology (HK) Limited Company
-AC867E     (base 16)		Create New Technology (HK) Limited Company
-				Rm B 10/F JinFeng Building,1001 ShangBu South Road,FuTian District 
-				Shen Zhen  Guang Dong  518031
-				CN
-
-8C-59-8B   (hex)		C Technologies AB
-8C598B     (base 16)		C Technologies AB
-				Traktorvägen 11
-				Lund  Skåne  226 60
-				SE
-
-D4-4C-A7   (hex)		Informtekhnika & Communication, LLC
-D44CA7     (base 16)		Informtekhnika & Communication, LLC
-				1, build. 2/1, Verhnaya
-				Moscow    107140
-				RU
-
-A8-C2-22   (hex)		TM-Research Inc.
-A8C222     (base 16)		TM-Research Inc.
-				Hiyoshi Honcho 1-15-4
-				Yokohama  Kanagawa  223-0062
-				JP
-
-00-3D-41   (hex)		Hatteland Computer AS
-003D41     (base 16)		Hatteland Computer AS
-				Aamsosen
-				Nedre Vats  Rogaland  5578
-				NO
-
-CC-50-76   (hex)		Ocom Communications, Inc.
-CC5076     (base 16)		Ocom Communications, Inc.
-				13F-6, No. 1, Bao Sheng Rd., 
-				Yong Ho City    234
-				TW
-
-4C-C4-52   (hex)		Shang Hai Tyd. Electon Technology Ltd.
-4CC452     (base 16)		Shang Hai Tyd. Electon Technology Ltd.
-				Room No.5,N0.396,GuiLin Road, 
-				Shang Hai    200233
-				US
-
-7C-CB-0D   (hex)		Antaira Technologies, LLC
-7CCB0D     (base 16)		Antaira Technologies, LLC
-				445 Capricorn St.
-				Brea  California  92821
-				US
-
-C0-1E-9B   (hex)		Pixavi AS
-C01E9B     (base 16)		Pixavi AS
-				Dusavikveien 39
-				Stavanger    4003
-				NO
-
-80-3B-9A   (hex)		ghe-ces electronic ag
-803B9A     (base 16)		ghe-ces electronic ag
-				Hoemelstraße 17
-				Wald  ZH  8636
-				CH
-
-74-32-56   (hex)		NT-ware Systemprg GmbH
-743256     (base 16)		NT-ware Systemprg GmbH
-				Niedersachsenstrasse 6
-				Bad Iburg  NDS  49186
-				DE
-
-C4-E1-7C   (hex)		U2S co.
-C4E17C     (base 16)		U2S co.
-				104-706, SK Ventium Building, 522, Dangjeong-Dong
-				Gunpo-si  Geonggi-do  435-776
-				KR
-
-20-BF-DB   (hex)		DVL
-20BFDB     (base 16)		DVL
-				21 Gradinilor Str
-				Chisinau    MD2001
-				MD
-
-20-41-5A   (hex)		Smarteh d.o.o.
-20415A     (base 16)		Smarteh d.o.o.
-				Trg tigrovcev 1
-				Tolmin    5220
-				SI
-
-A4-DA-3F   (hex)		Bionics Corp.
-A4DA3F     (base 16)		Bionics Corp.
-				1406 Masters Tower
-				Seoul    121-748
-				KR
-
-A0-40-25   (hex)		Actioncable, Inc.
-A04025     (base 16)		Actioncable, Inc.
-				998 Westlynn Way
-				Cupertino  CA  95014
-				US
-
-4C-4B-68   (hex)		Mobile Device, Inc. 
-4C4B68     (base 16)		Mobile Device, Inc. 
-				 8F-1, No. 145, Sianjheng 9th Rd., 
-				Jhubei City,   Hsinchu County   30251
-				TW
-
-20-12-57   (hex)		Most Lucky Trading Ltd
-201257     (base 16)		Most Lucky Trading Ltd
-				Room403 No.506 Zhongshan South 2nd Road,Xuhui District 
-				Shanghai    200032
-				CN
-
-E8-DA-AA   (hex)		VideoHome Technology Corp.
-E8DAAA     (base 16)		VideoHome Technology Corp.
-				4F-1, No. 192, Da Tung Rd., Sec. 3, Hsichih,
-				Taipei Hsien    221
-				TW
-
-64-7D-81   (hex)		YOKOTA INDUSTRIAL CO,.LTD
-647D81     (base 16)		YOKOTA INDUSTRIAL CO,.LTD
-				5-55 NISHIIWATA
-				HIGASHI OSAKA-CITY  OSAKA  578-0947
-				JP
-
-7C-CF-CF   (hex)		Shanghai SEARI Intelligent System Co., Ltd
-7CCFCF     (base 16)		Shanghai SEARI Intelligent System Co., Ltd
-				No.505 Wuning Road, Putuo District
-				Shanghai    200063
-				CN
-
-68-AA-D2   (hex)		DATECS LTD.,
-68AAD2     (base 16)		DATECS LTD.,
-				BUL. TSARIGRADSKO SHOSSE 115A
-				SOFIA    1784
-				BG
-
-A4-DE-50   (hex)		Total Walther GmbH
-A4DE50     (base 16)		Total Walther GmbH
-				Frankfurter Ring 17
-				Munich    80807
-				DE
-
-1C-F0-61   (hex)		SCAPS GmbH
-1CF061     (base 16)		SCAPS GmbH
-				Bahnhofstraße 17
-				Deisenhofen  Bavaria  82041
-				DE
-
-A8-93-E6   (hex)		JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD
-A893E6     (base 16)		JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD
-				5F,301building,Tairan High-tech park, Chegongmiao,Futian zone,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-C4-AA-A1   (hex)		SUMMIT DEVELOPMENT, spol.s r.o.
-C4AAA1     (base 16)		SUMMIT DEVELOPMENT, spol.s r.o.
-				K Vodoteci 197
-				Orech  Praha-zapad  252 25
-				CZ
-
-30-32-D4   (hex)		Hanilstm Co., Ltd.
-3032D4     (base 16)		Hanilstm Co., Ltd.
-				138-6, Sangdaewon-dong Jungwon-gu
-				Seongnam  Kyonggi-do  462-120
-				KR
-
-E0-64-BB   (hex)		DigiView S.r.l.
-E064BB     (base 16)		DigiView S.r.l.
-				Via Senigallia 18/2
-				Milano    20161
-				IT
-
-DC-33-50   (hex)		TechSAT GmbH
-DC3350     (base 16)		TechSAT GmbH
-				Gruber Str. 46c
-				Poing  BY  85586
-				DE
-
-F0-BC-C8   (hex)		MaxID (Pty) Ltd
-F0BCC8     (base 16)		MaxID (Pty) Ltd
-				43 Homestead Road
-				Johannesburg  Gauteng  2128
-				ZA
-
-24-82-8A   (hex)		Prowave Technologies Ltd.
-24828A     (base 16)		Prowave Technologies Ltd.
-				2F,No.879-16,Zhongjiang Road
-				Shanghai    200333
-				CN
-
-68-CC-9C   (hex)		Mine Site Technologies
-68CC9C     (base 16)		Mine Site Technologies
-				113 Wicks Road
-				North Ryde  NSW  2113
-				AU
-
-14-6E-0A   (hex)		Private
-146E0A     (base 16)		Private
-
-0C-E7-09   (hex)		Fox Crypto B.V.
-0CE709     (base 16)		Fox Crypto B.V.
-				P.O. box 638
-				Delft  ZH  2600 AP
-				NL
-
-B4-B5-AF   (hex)		Minsung Electronics
-B4B5AF     (base 16)		Minsung Electronics
-				Mega-valley #620
-				Anyang-si  Kyeonggi-do  431-767
-				KR
-
-04-B3-B6   (hex)		Seamap (UK) Ltd
-04B3B6     (base 16)		Seamap (UK) Ltd
-				Unit 34, The Maltings
-				Shepton Mallet  Somerset  BA4 5QE
-				GB
-
-00-27-0B   (hex)		Adura Technologies
-00270B     (base 16)		Adura Technologies
-				28 Second Street
-				San Francisco  CA  94105
-				US
-
-00-27-0D   (hex)		Cisco Systems, Inc
-00270D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-27-1B   (hex)		Alec Sicherheitssysteme GmbH
-00271B     (base 16)		Alec Sicherheitssysteme GmbH
-				Friedrich-Hoelscher-Strasse 367
-				Dortmund    44328
-				DE
-
-00-27-18   (hex)		Suzhou NEW SEAUNION Video Technology Co.,Ltd
-002718     (base 16)		Suzhou NEW SEAUNION Video Technology Co.,Ltd
-				383 Jingmao Road, Industry Park
-				Suzhou  Jiangsu  215021
-				CN
-
-6C-0F-6A   (hex)		JDC Tech Co., Ltd.
-6C0F6A     (base 16)		JDC Tech Co., Ltd.
-				370-12 Daemyung-ri Daegot-myun
-				Kimpo-si  Kyunggi-do  410-853
-				KR
-
-04-B4-66   (hex)		BSP Co., Ltd.
-04B466     (base 16)		BSP Co., Ltd.
-				162-10
-				Gumi  Gyeungsangbuk Do  730-902
-				KR
-
-D8-D6-7E   (hex)		GSK CNC EQUIPMENT CO.,LTD
-D8D67E     (base 16)		GSK CNC EQUIPMENT CO.,LTD
-				No.7,1st Street,Luochong North Road,Luochongwei,No.7,1st Street,Luochong North Road,Luochongwei,No.7,1st Street,Luochong North Road,Luochongwei,
-				Guangzhou  Guangdong  510165
-				CN
-
-00-26-AE   (hex)		Wireless Measurement Ltd
-0026AE     (base 16)		Wireless Measurement Ltd
-				The Crescent
-				EMSWORTH    PO10 8JS
-				GB
-
-00-26-B1   (hex)		Navis Auto Motive Systems, Inc.
-0026B1     (base 16)		Navis Auto Motive Systems, Inc.
-				Busan, Centumjungang-ro 78, Centum Greentower 8th floor
-				BUSAN    612-822
-				KR
-
-00-26-AA   (hex)		Kenmec Mechanical Engineering Co., Ltd.
-0026AA     (base 16)		Kenmec Mechanical Engineering Co., Ltd.
-				3F, No. 97, Sec.2 Nan-Kang Rd.,
-				Taipei    11578
-				TW
-
-00-26-D2   (hex)		Pcube Systems, Inc.
-0026D2     (base 16)		Pcube Systems, Inc.
-				1857 O'Toole Lane
-				San Jose  CA  95131
-				US
-
-00-26-CD   (hex)		PurpleComm, Inc.
-0026CD     (base 16)		PurpleComm, Inc.
-				2620 Augustine Dr., Ste. 100
-				Santa Clara  CA  95054
-				US
-
-00-27-07   (hex)		Lift Complex DS, JSC
-002707     (base 16)		Lift Complex DS, JSC
-				mikrorayon Gorsky, 6
-				Novosibirsk    630073
-				RU
-
-00-26-D7   (hex)		KM Electornic Technology Co., Ltd.
-0026D7     (base 16)		KM Electornic Technology Co., Ltd.
-				5F, NO.3 Building, NO.118 Rd. Baoan District, Shenzhen China
-				Shenzhen  Guangdong  518101
-				CN
-
-00-26-D0   (hex)		Semihalf
-0026D0     (base 16)		Semihalf
-				ul. Wadowicka 8A
-				Krakow  ...  30-415
-				PL
-
-00-26-FE   (hex)		MKD Technology Inc.
-0026FE     (base 16)		MKD Technology Inc.
-				 R.B8, No.1 Lising 1st  Rd.,
-				Hsinchu    30078
-				TW
-
-00-26-A0   (hex)		moblic
-0026A0     (base 16)		moblic
-				7F, 271-1, Seohyeon-dong, Bundang-gu
-				Seongnam-si  Kyeonggi-do  463-824
-				KR
-
-00-26-E5   (hex)		AEG Power Solutions
-0026E5     (base 16)		AEG Power Solutions
-				Emil Siepmannstraße 32
-				Warstein  NRW  59581
-				DE
-
-00-26-E3   (hex)		DTI
-0026E3     (base 16)		DTI
-				Rue de la gare, 35
-				NANINNE  NAMUR  5100
-				BE
-
-00-26-BC   (hex)		General Jack Technology Ltd.
-0026BC     (base 16)		General Jack Technology Ltd.
-				The Area of Administration of Lian Bei,
-				Dong Guan  Guang Dong  523580
-				CN
-
-00-26-96   (hex)		NOOLIX Co., Ltd
-002696     (base 16)		NOOLIX Co., Ltd
-				DAECHANG B/D 3F, 8-2 SUNAE-DONG
-				SUNGNAM-SI  KYUNGGI-DO  463-825
-				KR
-
-00-26-9A   (hex)		Carina System Co., Ltd.
-00269A     (base 16)		Carina System Co., Ltd.
-				2-2-11 Kotonoo-cho
-				Kobe  Hyogo  651-0094
-				JP
-
-00-26-95   (hex)		ZT Group Int'l Inc
-002695     (base 16)		ZT Group Int'l Inc
-				350 Meadowlands Parkway
-				Secaucus  NJ  07094
-				US
-
-00-26-93   (hex)		QVidium Technologies, Inc.
-002693     (base 16)		QVidium Technologies, Inc.
-				12989 Chaparral Ridge Rd
-				San Diego  CA  92130
-				US
-
-00-26-65   (hex)		ProtectedLogic Corporation
-002665     (base 16)		ProtectedLogic Corporation
-				PO Box 67707
-				Albuquerque  NM  87193
-				US
-
-00-26-60   (hex)		Logiways
-002660     (base 16)		Logiways
-				24/26 rue Louis ARMAND
-				PARIS    75015
-				FR
-
-00-26-70   (hex)		Cinch Connectors
-002670     (base 16)		Cinch Connectors
-				1700 Finley Road
-				Lombard  IL  60148
-				US
-
-00-26-71   (hex)		AUTOVISION Co., Ltd
-002671     (base 16)		AUTOVISION Co., Ltd
-				Shinsegae YBS Bldg. 102
-				Seongdong-gu  Seoul  133-847
-				KR
-
-00-26-48   (hex)		Emitech Corp.
-002648     (base 16)		Emitech Corp.
-				No. 156-5A, ChengGong 1st St.,
-				Jhubei City  Hsinchu County  302
-				TW
-
-00-26-45   (hex)		Circontrol S.A.
-002645     (base 16)		Circontrol S.A.
-				Lepant 43
-				Terrassa  Barcelona  08223
-				ES
-
-00-26-3E   (hex)		Trapeze Networks
-00263E     (base 16)		Trapeze Networks
-				5753 West Las Positas Blvd.
-				Pleasanton  California  94588
-				US
-
-00-26-3C   (hex)		Bachmann Technology GmbH & Co. KG
-00263C     (base 16)		Bachmann Technology GmbH & Co. KG
-				Ernsthaldenstrasse 33
-				Stuttgart  BW  70565
-				DE
-
-00-26-3D   (hex)		MIA Corporation
-00263D     (base 16)		MIA Corporation
-				1-3-15 Yoshino-cho, Minami-ku
-				Yokohama  Kanagawa  232-0014
-				JP
-
-00-26-78   (hex)		Logic Instrument SA
-002678     (base 16)		Logic Instrument SA
-				43, Avenue de l'Europe
-				Domont    95330
-				FR
-
-00-26-77   (hex)		DEIF A/S
-002677     (base 16)		DEIF A/S
-				Frisenborgvej 33
-				Skive    7800
-				DK
-
-00-26-8E   (hex)		Alta Solutions, Inc.
-00268E     (base 16)		Alta Solutions, Inc.
-				11305 Rancho Bernardo Road
-				San Diego  CA  92127
-				US
-
-00-26-88   (hex)		Juniper Networks
-002688     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-25-DA   (hex)		Secura Key
-0025DA     (base 16)		Secura Key
-				20301 Nordhoff St.
-				Chatsworth  CA  91311
-				US
-
-00-25-DB   (hex)		ATI Electronics(Shenzhen) Co., LTD
-0025DB     (base 16)		ATI Electronics(Shenzhen) Co., LTD
-				2F,1st Buliding,Tangyanshan Industrial Park,
-				Shenzhen  Guangdong  518108
-				CN
-
-00-25-D5   (hex)		Robonica (Pty) Ltd
-0025D5     (base 16)		Robonica (Pty) Ltd
-				41 Park Avenue North
-				Centurion  Gauteng  0046
-				ZA
-
-00-25-E2   (hex)		Everspring Industry Co., Ltd.
-0025E2     (base 16)		Everspring Industry Co., Ltd.
-				7F., No. 609, Sec 1, Wanshou Rd.,
-				Gueishan Township  Taoyuan County  333
-				TW
-
-00-25-E1   (hex)		SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD
-0025E1     (base 16)		SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD
-				RM701,XIN'AN BUILDING,99 TIANZHOU RD,XUHUI DISTRICT,SHANGHAI
-				SHANGHAI    200233
-				CN
-
-00-26-0E   (hex)		Ablaze Systems, LLC
-00260E     (base 16)		Ablaze Systems, LLC
-				523 West Valley Road
-				Wayne  Pennsylvania  19087
-				US
-
-00-26-10   (hex)		Apacewave Technologies
-002610     (base 16)		Apacewave Technologies
-				48389 Fremont Blvd, STE#100
-				Fremont  CA  94538
-				US
-
-00-26-0D   (hex)		Mercury Systems, Inc.
-00260D     (base 16)		Mercury Systems, Inc.
-				26 Hampshire Dr
-				Hudson  NH  03051
-				US
-
-00-26-0A   (hex)		Cisco Systems, Inc
-00260A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-26-32   (hex)		Instrumentation Technologies d.d.
-002632     (base 16)		Instrumentation Technologies d.d.
-				Velika pot 22
-				Solkan  Nova Gorica  5250
-				SI
-
-00-26-2E   (hex)		Chengdu Jiuzhou Electronic Technology Inc
-00262E     (base 16)		Chengdu Jiuzhou Electronic Technology Inc
-				A2 Building,Tianfu Software Park
-				Chengdu  Sichuan  610041
-				CN
-
-00-26-2C   (hex)		IKT Advanced Technologies s.r.o.
-00262C     (base 16)		IKT Advanced Technologies s.r.o.
-				Piseckeho 334/19
-				Praha 5    15000
-				CZ
-
-00-26-29   (hex)		Juphoon System Software Inc.
-002629     (base 16)		Juphoon System Software Inc.
-				Room 910,Building 2
-				Ningbo  Zhejiang  315041
-				CN
-
-00-26-25   (hex)		MediaSputnik
-002625     (base 16)		MediaSputnik
-				Yaroslavskoe shosse, 19,
-				Moscow    129337
-				RU
-
-00-26-26   (hex)		Geophysical Survey Systems, Inc.
-002626     (base 16)		Geophysical Survey Systems, Inc.
-				12 Industrial Way
-				Salem  NH  03079
-				US
-
-00-25-CC   (hex)		Mobile Communications Korea Incorporated
-0025CC     (base 16)		Mobile Communications Korea Incorporated
-				1011-1012, Suwon High Venture Valley,
-				Suwon-si,  Gyeonggi-do,  441-360
-				KR
-
-00-25-F9   (hex)		GMK electronic design GmbH
-0025F9     (base 16)		GMK electronic design GmbH
-				Daimlerstraße 8
-				Wernberg-Koeblitz  Bavaria  D-92533
-				DE
-
-00-25-F7   (hex)		Ansaldo STS USA
-0025F7     (base 16)		Ansaldo STS USA
-				1000 Technology Drive
-				Pittsburgh  PA  15219
-				US
-
-00-26-1B   (hex)		LAUREL BANK MACHINES CO., LTD.
-00261B     (base 16)		LAUREL BANK MACHINES CO., LTD.
-				12-6
-				Kita-Ku  Tokyo  114-0013
-				JP
-
-00-26-14   (hex)		KTNF
-002614     (base 16)		KTNF
-				204,Daeryungtechnotown1,327,Gasan-Dong,
-				Seoul    153-771
-				KR
-
-00-26-03   (hex)		Shenzhen Wistar Technology Co., Ltd
-002603     (base 16)		Shenzhen Wistar Technology Co., Ltd
-				Rm919, Science &Technology Service Center
-				Shenzhen  Guangdong  518000
-				CN
-
-00-25-A6   (hex)		Central Network Solution Co., Ltd.
-0025A6     (base 16)		Central Network Solution Co., Ltd.
-				584-1, Pajang-Dong, JangAn-Gu
-				Suwon-Si,  Kyunggi-Do  440-854
-				KR
-
-00-25-AA   (hex)		Beijing Soul Technology Co.,Ltd.
-0025AA     (base 16)		Beijing Soul Technology Co.,Ltd.
-				Room 606,Xinzheng Office Building
-				BEIJING    100089
-				CN
-
-00-25-88   (hex)		Genie Industries, Inc.
-002588     (base 16)		Genie Industries, Inc.
-				18620 NE 67th Ct
-				Redmond  WA  98052
-				US
-
-00-25-80   (hex)		Equipson S.A.
-002580     (base 16)		Equipson S.A.
-				Poligono Ind. L´Alteró
-				Silla  Valencia  46460
-				ES
-
-00-25-BD   (hex)		Italdata Ingegneria dell'Idea S.p.A.
-0025BD     (base 16)		Italdata Ingegneria dell'Idea S.p.A.
-				viale Eroi di Cefalonia 123
-				Roma    00128
-				IT
-
-00-25-B7   (hex)		Costar  electronics, inc.,
-0025B7     (base 16)		Costar  electronics, inc.,
-				3fl,-1 no 13,lane 120,nei-hu road sec.1,
-				Taipei    114
-				TW
-
-00-25-7D   (hex)		PointRed Telecom Private Ltd.
-00257D     (base 16)		PointRed Telecom Private Ltd.
-				15F - 5., No. 1071, Zhongzheng Road,
-				Taoyuan City 330    330
-				TW
-
-00-25-A2   (hex)		Alta Definicion LINCEO S.L.
-0025A2     (base 16)		Alta Definicion LINCEO S.L.
-				Maria de Luna 11, nave 4
-				Zaragoza    Es-50018
-				ES
-
-00-25-6D   (hex)		Broadband Forum
-00256D     (base 16)		Broadband Forum
-				48377 Fremont Boulevard
-				Fremont  CA  94538
-				US
-
-00-25-6C   (hex)		Azimut Production Association JSC
-00256C     (base 16)		Azimut Production Association JSC
-				2-B Ataeva Street
-				Makhachkala  Dagestan  367005
-				RU
-
-00-25-63   (hex)		Luxtera Inc
-002563     (base 16)		Luxtera Inc
-				2320. Camino Vida Roble
-				Carlsbad  CA  92011
-				US
-
-00-25-93   (hex)		DatNet Informatikai Kft.
-002593     (base 16)		DatNet Informatikai Kft.
-				Hétvezér u. 5.
-				Szigetszentmiklós  Pest megye  2310
-				HU
-
-00-25-8E   (hex)		The Weather Channel
-00258E     (base 16)		The Weather Channel
-				Mail Stop 500
-				Atlanta  GA  30339
-				US
-
-00-25-A3   (hex)		Trimax Wireless, Inc.
-0025A3     (base 16)		Trimax Wireless, Inc.
-				2675 S Horseshoe Dr
-				Naples  FL  34104
-				US
-
-00-25-9C   (hex)		Cisco-Linksys, LLC
-00259C     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-00-25-C8   (hex)		S-Access GmbH
-0025C8     (base 16)		S-Access GmbH
-				Oberhausenstrasse 47
-				Wettswil a/A  Zuerich  8907
-				CH
-
-00-25-C0   (hex)		ZillionTV Corporation
-0025C0     (base 16)		ZillionTV Corporation
-				1170 Kifer Road
-				Sunnyvale  CA  94086
-				US
-
-00-25-1B   (hex)		Philips CareServant
-00251B     (base 16)		Philips CareServant
-				High Tech Campus 27
-				Eindhoven  Noord-Brabant  5656 AE
-				NL
-
-00-25-18   (hex)		Power PLUS Communications AG
-002518     (base 16)		Power PLUS Communications AG
-				Am Exerzierplatz 2
-				Mannheim  Baden Wuerttemberg  68167
-				DE
-
-00-25-15   (hex)		SFR
-002515     (base 16)		SFR
-				42 Quai du point du jour
-				Boulogne billancourt  .  92659
-				FR
-
-00-25-0D   (hex)		GZT Telkom-Telmor sp. z o.o.
-00250D     (base 16)		GZT Telkom-Telmor sp. z o.o.
-				Mickiewicza 5/7
-				Gdansk  pomorskie  80-425
-				PL
-
-00-25-0E   (hex)		gt german telematics gmbh
-00250E     (base 16)		gt german telematics gmbh
-				Rankestrasse 26
-				Berlin    D-10789
-				DE
-
-00-25-31   (hex)		Cloud Engines, Inc.
-002531     (base 16)		Cloud Engines, Inc.
-				857 Montgomery Street
-				San Francisco  CA  94133
-				US
-
-00-25-2D   (hex)		Kiryung Electronics
-00252D     (base 16)		Kiryung Electronics
-				Kiryung Bldg. 686-70, Sindaebang-dong
-				Seoul    156-010
-				KR
-
-00-25-45   (hex)		Cisco Systems, Inc
-002545     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-25-42   (hex)		Pittasoft
-002542     (base 16)		Pittasoft
-				#913 Daeryung Techno Town 8th 481-11ga
-				Geumcheon-gu  Seoul  153-775
-				KR
-
-00-25-36   (hex)		Oki Electric Industry Co., Ltd.
-002536     (base 16)		Oki Electric Industry Co., Ltd.
-				1-16-8 Chuou
-				Warabi-shi  Saitama  335-8510
-				JP
-
-00-25-41   (hex)		Maquet Critical Care AB
-002541     (base 16)		Maquet Critical Care AB
-				Röntgenvägen 2
-				Solna    SE-171 95
-				SE
-
-00-25-2B   (hex)		Stirling Energy Systems
-00252B     (base 16)		Stirling Energy Systems
-				Sandia National Labs - NSTTF
-				Albuquerque  NM  87185-1127
-				US
-
-00-25-24   (hex)		Lightcomm Technology Co., Ltd
-002524     (base 16)		Lightcomm Technology Co., Ltd
-				9/F.,Hi-Tech Venture Park Tower A,
-				ShenZhen  GuangDong  518040
-				CN
-
-00-25-4E   (hex)		Vertex Wireless Co., Ltd.
-00254E     (base 16)		Vertex Wireless Co., Ltd.
-				5F, Seohyeon Plaza, 254-5, Seohyeon-dong, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-824
-				KR
-
-00-25-46   (hex)		Cisco Systems, Inc
-002546     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-25-22   (hex)		ASRock Incorporation
-002522     (base 16)		ASRock Incorporation
-				2F., No. 37, Sec. 2, Jhongyang S. Rd., Beitou District,
-				Taipei    112
-				TW
-
-00-25-60   (hex)		Ibridge Networks & Communications Ltd.
-002560     (base 16)		Ibridge Networks & Communications Ltd.
-				28,Bedford Road East Ham
-				London    E6 2NN
-				GB
-
-00-24-B8   (hex)		free alliance sdn bhd
-0024B8     (base 16)		free alliance sdn bhd
-				B-3-2 Plaza Damas
-				Kuala Lumpur  WP  50480
-				MY
-
-00-24-B3   (hex)		Graf-Syteco GmbH & Co. KG
-0024B3     (base 16)		Graf-Syteco GmbH & Co. KG
-				Kaiserstraße 18
-				Tuningen  Baden-Württemberg  78609
-				DE
-
-00-24-F6   (hex)		MIYOSHI ELECTRONICS CORPORATION
-0024F6     (base 16)		MIYOSHI ELECTRONICS CORPORATION
-				3-13-21 KUSHIRO
-				KAWANISHI-CITY  HYOGO-PREF.  666-0024
-				JP
-
-00-24-F0   (hex)		Seanodes
-0024F0     (base 16)		Seanodes
-				Batiment Platon
-				Colomiers    31770
-				FR
-
-00-24-CB   (hex)		Autonet Mobile
-0024CB     (base 16)		Autonet Mobile
-				2235 Mercury Way Ste. 145
-				Santa Rosa  CA  95407
-				US
-
-00-24-D1   (hex)		Thomson Inc.
-0024D1     (base 16)		Thomson Inc.
-				101 West 103rd Street
-				Indianapolis  IN  46290
-				US
-
-00-24-C9   (hex)		Broadband Solutions Group
-0024C9     (base 16)		Broadband Solutions Group
-				1101 Marina Village Parkway
-				Alameda  CA  94501
-				US
-
-00-24-CA   (hex)		Tobii Technology AB
-0024CA     (base 16)		Tobii Technology AB
-				Karlsrovägen 2D
-				Danderyd    18253
-				SE
-
-00-25-08   (hex)		Maquet Cardiopulmonary AG
-002508     (base 16)		Maquet Cardiopulmonary AG
-				Hechinger Strasse 38
-				Hirrlingen    72145
-				DE
-
-00-24-FC   (hex)		QuoPin Co., Ltd.
-0024FC     (base 16)		QuoPin Co., Ltd.
-				#109, R&D Center for Advanced Technology 68 Yatap-dong Bundang-gu
-				Seongnam  Kyungki-do  463-816
-				KR
-
-00-24-FB   (hex)		Private
-0024FB     (base 16)		Private
-
-00-24-FA   (hex)		Hilger u. Kern GMBH
-0024FA     (base 16)		Hilger u. Kern GMBH
-				Kaefertaler Strasse 253-255
-				Mannheim  Baden-Württemberg  68167
-				DE
-
-00-24-D0   (hex)		Shenzhen SOGOOD Industry CO.,LTD.
-0024D0     (base 16)		Shenzhen SOGOOD Industry CO.,LTD.
-				SOGOOD Science Park,Aviation Road,XiXiang Town,Bao'an District,
-				Shenzhen  Guangzhou  518102
-				CN
-
-00-24-CC   (hex)		Fascinations Toys and Gifts, Inc.
-0024CC     (base 16)		Fascinations Toys and Gifts, Inc.
-				19224 Des Moines Way S
-				Seattle  Washington  98148
-				US
-
-00-24-C7   (hex)		Mobilarm Ltd
-0024C7     (base 16)		Mobilarm Ltd
-				768 Canning Highway
-				  Western Australia  6153
-				AU
-
-00-24-DF   (hex)		Digitalbox Europe GmbH
-0024DF     (base 16)		Digitalbox Europe GmbH
-				Sandstraße 65
-				Ratingen    40878
-				DE
-
-00-24-45   (hex)		Adtran Inc
-002445     (base 16)		Adtran Inc
-				901 Explorer Blvd.
-				Huntsville  AL  35806-2807
-				US
-
-00-24-3F   (hex)		Storwize, Inc.
-00243F     (base 16)		Storwize, Inc.
-				11 Alatlef St.
-				Yehud    56216
-				IL
-
-00-24-97   (hex)		Cisco Systems, Inc
-002497     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-A3   (hex)		Sonim Technologies Inc
-0024A3     (base 16)		Sonim Technologies Inc
-				1875 S.Grant Street
-				Sanmateo  CA  94402
-				US
-
-00-24-AA   (hex)		Dycor Technologies Ltd.
-0024AA     (base 16)		Dycor Technologies Ltd.
-				1851 94 Street
-				Edmonton  Alberta  T6N 1E6
-				CA
-
-00-24-A9   (hex)		Ag Leader Technology
-0024A9     (base 16)		Ag Leader Technology
-				2202 S Riverside Dr.
-				Ames  IA  50010
-				US
-
-00-24-A6   (hex)		TELESTAR DIGITAL GmbH
-0024A6     (base 16)		TELESTAR DIGITAL GmbH
-				Vulkanhöhe / B410
-				Dreis-Brück    54552
-				DE
-
-00-24-9B   (hex)		Action Star Enterprise Co., Ltd.
-00249B     (base 16)		Action Star Enterprise Co., Ltd.
-				10F, No.159, Sec.2, Datong Rd.
-				Xizhi Dist.  New Taipei City  221
-				TW
-
-00-24-71   (hex)		Fusion MultiSystems dba Fusion-io
-002471     (base 16)		Fusion MultiSystems dba Fusion-io
-				6350 S. 3000 E., 6th floor
-				Salt lake City  UT  84121
-				US
-
-00-24-74   (hex)		Autronica Fire And Securirty
-002474     (base 16)		Autronica Fire And Securirty
-				Haakon VII's g.4
-				  Trondheim  N-7483
-				NO
-
-00-24-46   (hex)		MMB Research Inc.
-002446     (base 16)		MMB Research Inc.
-				35 Prince Arthur Ave.
-				Toronto  Ontario  M5R 1B2
-				CA
-
-00-24-63   (hex)		Phybridge Inc
-002463     (base 16)		Phybridge Inc
-				3495 Laird Rd
-				Mississauga  Ontario  L5L5S5
-				CA
-
-00-24-72   (hex)		ReDriven Power Inc.
-002472     (base 16)		ReDriven Power Inc.
-				24A Bath Rd.
-				Iroquois  Ontario  K0E 1K0
-				CA
-
-00-24-1C   (hex)		FuGang Electronic (DG) Co.,Ltd
-00241C     (base 16)		FuGang Electronic (DG) Co.,Ltd
-				Industry Street, Dong-Keng
-				Dong Guan City    523448
-				CN
-
-00-24-19   (hex)		Private
-002419     (base 16)		Private
-
-00-24-15   (hex)		Magnetic Autocontrol GmbH
-002415     (base 16)		Magnetic Autocontrol GmbH
-				Grienmatt 20
-				Schopfheim    D-79650
-				DE
-
-00-23-E7   (hex)		Hinke A/S
-0023E7     (base 16)		Hinke A/S
-				Tingbjergvej 2
-				Bjaeverskov    DK-4632
-				DK
-
-00-23-E2   (hex)		SEA Signalisation
-0023E2     (base 16)		SEA Signalisation
-				20-22 Rue Pierre Mendès France
-				Vaulx en Velin CEDEX    69515
-				FR
-
-00-24-25   (hex)		Shenzhenshi chuangzhicheng Technology Co.,Ltd
-002425     (base 16)		Shenzhenshi chuangzhicheng Technology Co.,Ltd
-				5th Floor,Block2,25th Building,Industrial Zone West Keyuan Sci-tech Garden Nanshan Districh,Shenzhen
-				Shenzhen  Guangdong  518057
-				CN
-
-00-24-27   (hex)		SSI COMPUTER CORP
-002427     (base 16)		SSI COMPUTER CORP
-				4F, NO4, LANE 235, BAO CHIAO ROAD
-				HSIN TIEN  TAIPEI  231
-				TW
-
-00-24-11   (hex)		PharmaSmart LLC
-002411     (base 16)		PharmaSmart LLC
-				3495 Winton Place
-				Rochester  NY  14623
-				US
-
-00-24-0F   (hex)		Ishii Tool & Engineering Corporation
-00240F     (base 16)		Ishii Tool & Engineering Corporation
-				2-5-60 Higashi-Omichi
-				Oita    870-0823
-				JP
-
-00-23-FA   (hex)		RG Nets, Inc.
-0023FA     (base 16)		RG Nets, Inc.
-				316 California Ave.
-				Reno  NV  89501
-				US
-
-00-23-F2   (hex)		TVLogic
-0023F2     (base 16)		TVLogic
-				suite 914 ACE Techno Tower-9th
-				Geumcheon-gu  SEOUL  153-782
-				KR
-
-00-24-0A   (hex)		US Beverage Net
-00240A     (base 16)		US Beverage Net
-				1001 W. Fayette Street
-				Syracuse  NY  13204
-				US
-
-00-24-07   (hex)		TELEM SAS
-002407     (base 16)		TELEM SAS
-				16, RUE DE L'ETANG
-				GIERES  RHONE ALPES  38610
-				FR
-
-00-24-40   (hex)		Halo Monitoring, Inc.
-002440     (base 16)		Halo Monitoring, Inc.
-				515 Sparkman Dr.
-				Huntsville  AL  35816
-				US
-
-00-23-CF   (hex)		CUMMINS-ALLISON CORP.
-0023CF     (base 16)		CUMMINS-ALLISON CORP.
-				891 FEEHANVILLE DRIVE
-				MT. PROSPECT  IL  60056
-				US
-
-00-23-C2   (hex)		SAMSUNG Electronics. Co. LTD
-0023C2     (base 16)		SAMSUNG Electronics. Co. LTD
-				19th Fl., Korea Life Bldg. 1338-12
-				Seoul    137-860
-				KR
-
-00-23-C4   (hex)		Lux Lumen
-0023C4     (base 16)		Lux Lumen
-				Kernenergiestraat 53A
-				Wilrijk  Antwerp  2610
-				BE
-
-00-23-C5   (hex)		Radiation Safety and Control Services Inc
-0023C5     (base 16)		Radiation Safety and Control Services Inc
-				91 Portsmouth Ave
-				Stratham  New Hampshire  03885
-				US
-
-00-23-C6   (hex)		SMC Corporation
-0023C6     (base 16)		SMC Corporation
-				4-2-2, Kinunodai
-				Tsukuba Mirai-shi  Ibaraki-ken  300-2493
-				JP
-
-00-23-88   (hex)		V.T. Telematica S.p.a.
-002388     (base 16)		V.T. Telematica S.p.a.
-				Via Gorky, 21
-				San Giuliano Milanese  Milano  20098
-				IT
-
-00-23-83   (hex)		InMage Systems Inc
-002383     (base 16)		InMage Systems Inc
-				3255-1 Scott Blvd, #104
-				Santa Clara  CA  95054
-				US
-
-00-23-81   (hex)		Lengda Technology(Xiamen) Co.,Ltd.
-002381     (base 16)		Lengda Technology(Xiamen) Co.,Ltd.
-				5/F, 47 Haijing South 2nd Road,Xiamen Export Processing Zone, Haicang District,
-				Xiamen  Fujian  361026
-				CN
-
-00-23-BF   (hex)		Mainpine, Inc.
-0023BF     (base 16)		Mainpine, Inc.
-				PO Box 241
-				Wilsonville  Oregon  97070-0241
-				US
-
-00-23-B2   (hex)		Intelligent Mechatronic Systems Inc
-0023B2     (base 16)		Intelligent Mechatronic Systems Inc
-				161 Roger Street
-				Waterloo  Ontario  N2J 1B1
-				CA
-
-00-23-B5   (hex)		ORTANA LTD
-0023B5     (base 16)		ORTANA LTD
-				OSTIM KOCASINAN SANAYI SITESI
-				ANKARA    06370
-				TR
-
-00-23-B9   (hex)		 Airbus Defence and Space Deutschland GmbH
-0023B9     (base 16)		 Airbus Defence and Space Deutschland GmbH
-				Willy-Messerschmitt-Strasse 1,
-				Taufkirchen    82024 
-				DE
-
-00-23-BD   (hex)		Digital Ally, Inc.
-0023BD     (base 16)		Digital Ally, Inc.
-				1218 Valley Ridge Drive
-				Grain Valley  MO  64029
-				US
-
-00-23-D5   (hex)		WAREMA electronic GmbH
-0023D5     (base 16)		WAREMA electronic GmbH
-				Dillberg 33
-				Marktheidenfeld  Bavaria  97828
-				DE
-
-00-23-C9   (hex)		Sichuan Tianyi Information Science & Technology Stock CO.,LTD
-0023C9     (base 16)		Sichuan Tianyi Information Science & Technology Stock CO.,LTD
-				No.1,Hot Spring Highway,Dayi County
-				Chengdu  Sichuan  611330
-				US
-
-00-23-CE   (hex)		KITA DENSHI CORPORATION
-0023CE     (base 16)		KITA DENSHI CORPORATION
-				12F TOKYO-NISHIIKEBUKURO Bilg.,
-				Toshima-ku,  Tokyo  171-0021
-				JP
-
-00-23-A9   (hex)		Beijing Detianquan Electromechanical Equipment Co., Ltd
-0023A9     (base 16)		Beijing Detianquan Electromechanical Equipment Co., Ltd
-				No. 2 Chapeng Road, Haidian District,
-				Beijing    100091
-				CN
-
-00-23-9B   (hex)		Elster Solutions, LLC
-00239B     (base 16)		Elster Solutions, LLC
-				208 South Rogers Lane
-				Raleigh  North Carolina  27610
-				US
-
-00-23-7B   (hex)		WHDI LLC
-00237B     (base 16)		WHDI LLC
-				2350 Mission College Blvd.
-				Santa Clara  CA  95054
-				US
-
-00-23-24   (hex)		G-PRO COMPUTER
-002324     (base 16)		G-PRO COMPUTER
-				first arrange C, YingHu industrial estate
-				DongGuan City  GuangDong Province  523648
-				CN
-
-00-23-E0   (hex)		INO Therapeutics LLC
-0023E0     (base 16)		INO Therapeutics LLC
-				2902 Dairy Drive
-				Madison  WI  53718
-				US
-
-00-23-90   (hex)		Algolware Corporation
-002390     (base 16)		Algolware Corporation
-				13F-5, No. 77, Sec. 1, Sintai 5th Rd.,
-				Taipei County  Taiwan  221
-				TW
-
-00-23-11   (hex)		Gloscom Co., Ltd.
-002311     (base 16)		Gloscom Co., Ltd.
-				#507 Changhyun Bldg.
-				Anyang City  Kyunggo-do  431-080
-				KR
-
-00-23-09   (hex)		Janam Technologies LLC
-002309     (base 16)		Janam Technologies LLC
-				100 Crossways Park West
-				Woodbury  NY  11797
-				US
-
-00-23-04   (hex)		Cisco Systems, Inc
-002304     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-23-5D   (hex)		Cisco Systems, Inc
-00235D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-23-5C   (hex)		Aprius, Inc.
-00235C     (base 16)		Aprius, Inc.
-				440 N. Wolfe Rd
-				Sunnyvale  CA  94085
-				US
-
-00-23-52   (hex)		DATASENSOR S.p.A.
-002352     (base 16)		DATASENSOR S.p.A.
-				Via Lavino, 265
-				Monte San Pietro (BO)    40050
-				IT
-
-00-23-2F   (hex)		Advanced Card Systems Ltd.
-00232F     (base 16)		Advanced Card Systems Ltd.
-				Unit 2010-13, Chevalier Commercial Centre,
-				Kowloon Bay,  SAR  
-				HK
-
-00-23-53   (hex)		F E T Elettronica snc
-002353     (base 16)		F E T Elettronica snc
-				Via Alessandro Manzoni 14/a
-				Poggibonsi  Siena  53036
-				IT
-
-00-23-42   (hex)		Coffee Equipment Company
-002342     (base 16)		Coffee Equipment Company
-				4216 6th Ave NW
-				Seattle  WA  98107
-				US
-
-00-23-37   (hex)		Global Star Solutions ULC
-002337     (base 16)		Global Star Solutions ULC
-				4600 Jacombs Road
-				Richmond  BC  V6V 3B1
-				CA
-
-00-23-19   (hex)		Sielox LLC
-002319     (base 16)		Sielox LLC
-				170 East Ninth Ave.
-				Runnemede  NJ  08078
-				US
-
-00-23-6A   (hex)		SmartRG Inc
-00236A     (base 16)		SmartRG Inc
-				501 SE Columbia Shores Blvd
-				Vancouver  WA  98661
-				US
-
-00-23-31   (hex)		Nintendo Co., Ltd.
-002331     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-23-35   (hex)		Linkflex Co.,Ltd
-002335     (base 16)		Linkflex Co.,Ltd
-				5F. Min Young Bldg. 175-2
-				Seoul    135-010
-				KR
-
-00-23-25   (hex)		IOLAN Holding
-002325     (base 16)		IOLAN Holding
-				Mon Plaisir 26
-				Etten Leur    4879AN
-				NL
-
-00-23-21   (hex)		Avitech International Corp
-002321     (base 16)		Avitech International Corp
-				15333 NE 90th Street
-				Redmond  WA  98052
-				US
-
-00-23-70   (hex)		Snell
-002370     (base 16)		Snell
-				Hartman House
-				Reading  Berks  RG6 4PB
-				GB
-
-00-22-B9   (hex)		Analogix Seminconductor, Inc
-0022B9     (base 16)		Analogix Seminconductor, Inc
-				3211 Scott Blvd., Suite 100
-				Santa Clara  CA  95054
-				US
-
-00-22-B8   (hex)		Norcott
-0022B8     (base 16)		Norcott
-				Brookfield House, Grimsditch Lane off Tarporley Road
-				Cheshire    WA4 4EA
-				GB
-
-00-22-B7   (hex)		GSS Grundig SAT-Systems GmbH
-0022B7     (base 16)		GSS Grundig SAT-Systems GmbH
-				Beutherner Strasse 43
-				Nuernberg  Bayern  90471
-				DE
-
-00-22-B3   (hex)		Sei S.p.A.
-0022B3     (base 16)		Sei S.p.A.
-				Via Ruffilli, 1
-				Curno  Bergamo  24035
-				IT
-
-00-22-9C   (hex)		Verismo Networks Inc
-00229C     (base 16)		Verismo Networks Inc
-				295 Bernando Avenue
-				Mountain View  CA  94043
-				US
-
-00-22-9A   (hex)		Lastar, Inc.
-00229A     (base 16)		Lastar, Inc.
-				3555 Kettering BLVD.
-				Moraine  Ohio  45439
-				US
-
-00-22-EE   (hex)		Algo Communication Products Ltd
-0022EE     (base 16)		Algo Communication Products Ltd
-				4500 Beedie Street
-				Burnaby  BC  V5J 5L2
-				CA
-
-00-22-EA   (hex)		Rustelcom Inc.
-0022EA     (base 16)		Rustelcom Inc.
-				Garagniy proezd, 1
-				St.-Petersburg    192288
-				RU
-
-00-22-F0   (hex)		3 Greens Aviation Limited
-0022F0     (base 16)		3 Greens Aviation Limited
-				10 Hedingham Close
-				Macclesfield    SK10 3LZ
-				GB
-
-00-22-EC   (hex)		IDEALBT TECHNOLOGY CORPORATION
-0022EC     (base 16)		IDEALBT TECHNOLOGY CORPORATION
-				6F., NO.8, LANE 345, YANGGUANG ST., NEIHU DISTRICT
-				Taipei    114
-				TW
-
-00-22-DD   (hex)		Protecta Electronics Ltd
-0022DD     (base 16)		Protecta Electronics Ltd
-				Kesmark str 7/A
-				Budapest  Hungary  1158
-				HU
-
-00-22-AB   (hex)		Shenzhen Turbosight Technology Ltd
-0022AB     (base 16)		Shenzhen Turbosight Technology Ltd
-				Unit C-8A,Shennan Garden Bldg,Hightech Park,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-00-22-9B   (hex)		AverLogic Technologies, Inc.
-00229B     (base 16)		AverLogic Technologies, Inc.
-				7F-2, No.2, Lane 258, Rui Guang Rd., Nei-Hu Dist.,
-				Taipei  Taiwan  114
-				TW
-
-00-22-BE   (hex)		Cisco Systems, Inc
-0022BE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-22-BF   (hex)		SieAmp Group of Companies
-0022BF     (base 16)		SieAmp Group of Companies
-				2 Ang Mo Kio Street 64
-				Singapore    569084
-				US
-
-00-22-DB   (hex)		Translogic Corporation
-0022DB     (base 16)		Translogic Corporation
-				10825 E. 47th Avenue
-				Denver  Colorado  80239
-				US
-
-00-22-DA   (hex)		ANATEK, LLC
-0022DA     (base 16)		ANATEK, LLC
-				3219 East Camelback Road
-				Phoenix  AZ  85018
-				US
-
-00-22-F9   (hex)		Pollin Electronic GmbH
-0022F9     (base 16)		Pollin Electronic GmbH
-				Max-Pollin-Str. 1
-				Pfoerring    85104
-				DE
-
-00-22-C5   (hex)		INFORSON Co,Ltd.
-0022C5     (base 16)		INFORSON Co,Ltd.
-				Room 704,Tower B1, ChangYuanTianDi Plaza
-				BeiJing City    100080
-				CN
-
-00-22-62   (hex)		BEP Marine
-002262     (base 16)		BEP Marine
-				13 Tarndale Grove Albany
-				Auckland    0632
-				NZ
-
-00-22-6A   (hex)		Honeywell
-00226A     (base 16)		Honeywell
-				8840 Evergreen Blvd.
-				Minneapolis  MN  55433-6040
-				US
-
-00-22-63   (hex)		Koos Technical Services, Inc.
-002263     (base 16)		Koos Technical Services, Inc.
-				1025 Greenwood Blvd.
-				Lake Mary  FL  32746
-				US
-
-00-22-6C   (hex)		LinkSprite Technologies, Inc.
-00226C     (base 16)		LinkSprite Technologies, Inc.
-				1410 Cannon Mountain Dr
-				Longmont  CO  80503
-				US
-
-00-22-5C   (hex)		Multimedia & Communication Technology
-00225C     (base 16)		Multimedia & Communication Technology
-				Digital Empire D-801 #980-3
-				Suwon-City  KyeongGi-Do  443-813
-				KR
-
-00-22-84   (hex)		DESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD
-002284     (base 16)		DESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD
-				DESAY 3rd Zone,Chenjiang,
-				Huizhou  Guangdong  516229
-				CN
-
-00-22-86   (hex)		ASTRON
-002286     (base 16)		ASTRON
-				Oudehoogeveensedijk 4
-				Dwingeloo  Drenthe  7991PD
-				NL
-
-00-22-82   (hex)		8086 Consultancy
-002282     (base 16)		8086 Consultancy
-				17 Lowfield Lane
-				Newark  Notts  NG24 3HJ
-				GB
-
-00-22-46   (hex)		Evoc Intelligent Technology Co.,Ltd.
-002246     (base 16)		Evoc Intelligent Technology Co.,Ltd.
-				No.31 Gaoxin Centeral Avenue 4th Road,Nanshan District Shenzhen City
-				Shenzhen  Guangdong  518057
-				CN
-
-00-22-48   (hex)		Microsoft Corporation
-002248     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				Redmond  Washington  98052-6399
-				US
-
-00-22-90   (hex)		Cisco Systems, Inc
-002290     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-22-8A   (hex)		Teratronik elektronische systeme gmbh
-00228A     (base 16)		Teratronik elektronische systeme gmbh
-				Karl-Ulrich-Strasse 1
-				Gross-Umstadt    D-64823
-				DE
-
-00-22-8E   (hex)		TV-NUMERIC
-00228E     (base 16)		TV-NUMERIC
-				24-26 rue Louis Armand
-				Paris    75015
-				FR
-
-00-22-54   (hex)		Bigelow Aerospace
-002254     (base 16)		Bigelow Aerospace
-				1899 W. Brooks Ave
-				North Las Vegas  NV  89032
-				US
-
-00-22-57   (hex)		3COM EUROPE LTD
-002257     (base 16)		3COM EUROPE LTD
-				Peoplebuilding 2
-				Hemel Hempstead  HERTS.  HP2 4NW
-				GB
-
-00-22-76   (hex)		Triple EYE B.V.
-002276     (base 16)		Triple EYE B.V.
-				Vaassenseweg 71
-				Emst    8166 AT
-				NL
-
-00-22-74   (hex)		FamilyPhone AB
-002274     (base 16)		FamilyPhone AB
-				Anckargripsgatan 3
-				Malmö    21119
-				SE
-
-00-22-36   (hex)		VECTOR SP. Z O.O.
-002236     (base 16)		VECTOR SP. Z O.O.
-				KRZEMOWA 6
-				GDYNIA    81-577
-				PL
-
-00-22-30   (hex)		FutureLogic Inc.
-002230     (base 16)		FutureLogic Inc.
-				425 E. Colorado St., Ste. 100
-				Glendale  CA  91205
-				US
-
-00-22-2E   (hex)		maintech GmbH
-00222E     (base 16)		maintech GmbH
-				Seeweg 60
-				Höchberg  Bavaria  97204
-				DE
-
-00-22-14   (hex)		RINNAI KOREA
-002214     (base 16)		RINNAI KOREA
-				560-2, Shibjong-1dong, Pupyoung-gu
-				Pupyoung-gu  Incheon  403-847
-				KR
-
-00-22-0B   (hex)		National Source Coding Center
-00220B     (base 16)		National Source Coding Center
-				Suite 701,Power Creative A,No.1
-				Beijing    100085
-				CN
-
-00-22-0C   (hex)		Cisco Systems, Inc
-00220C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-21-EA   (hex)		Bystronic Laser AG
-0021EA     (base 16)		Bystronic Laser AG
-				Industriestrasse 21
-				3362  Niederönz  
-				CH
-
-00-21-FD   (hex)		LACROIX TRAFFIC S.A.U
-0021FD     (base 16)		LACROIX TRAFFIC S.A.U
-				Majada 4
-				Tres Cantos  Madrid  28760
-				ES
-
-00-21-CD   (hex)		LiveTV
-0021CD     (base 16)		LiveTV
-				1333 Gateway Drive, Suite 1007
-				Melbourne  Florida  32901
-				US
-
-00-21-D0   (hex)		Global Display Solutions Spa
-0021D0     (base 16)		Global Display Solutions Spa
-				Via Tezze, 20/A
-				Cornedo Vicentino  Vicenza  36073
-				IT
-
-00-22-28   (hex)		Breeze Innovations Ltd.
-002228     (base 16)		Breeze Innovations Ltd.
-				Har Hotzvim, P.O. Box 45397
-				Jerusalem  Israel  91451
-				IL
-
-00-22-29   (hex)		Compumedics Ltd
-002229     (base 16)		Compumedics Ltd
-				30 - 40 Flockhart Street
-				Abbotsford  Victoria  3067
-				AU
-
-00-22-16   (hex)		SHIBAURA VENDING MACHINE CORPORATION
-002216     (base 16)		SHIBAURA VENDING MACHINE CORPORATION
-				Ekimae-cho13-10
-				Obama-shi  Fukui-ken  917-0077
-				JP
-
-00-21-E1   (hex)		Nortel Networks
-0021E1     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75081
-				US
-
-00-22-00   (hex)		IBM Corp
-002200     (base 16)		IBM Corp
-				2051 Mission College Blvd 
-				Santa Clara  CA  95054
-				US
-
-00-21-C6   (hex)		CSJ Global, Inc.
-0021C6     (base 16)		CSJ Global, Inc.
-				9th Fl. Samwhan Bldg. Annex, 17-26 Yeouido-dong,
-				Seoul    150-874
-				KR
-
-00-21-C3   (hex)		CORNELL Communications, Inc.
-0021C3     (base 16)		CORNELL Communications, Inc.
-				7915 N. 81st Street
-				Milwaukee  Wisconsin  53223
-				US
-
-00-21-C7   (hex)		Russound
-0021C7     (base 16)		Russound
-				5 Forbes Road
-				Newmarket  NH  03857
-				US
-
-00-21-C1   (hex)		ABB Oy / Medium Voltage Products
-0021C1     (base 16)		ABB Oy / Medium Voltage Products
-				PO Box 699
-				Vaasa    FI-65101
-				FI
-
-00-21-C0   (hex)		Mobile Appliance, Inc.
-0021C0     (base 16)		Mobile Appliance, Inc.
-				#819 Kranz Techno,
-				Seong nam  Gyeonggi-Do  462-729
-				KR
-
-00-21-BB   (hex)		Riken Keiki Co., Ltd.
-0021BB     (base 16)		Riken Keiki Co., Ltd.
-				 2-7-6 Azusawa
-				Itabashi-Ku  Tokyo  174-8744
-				JP
-
-00-21-66   (hex)		NovAtel Inc.
-002166     (base 16)		NovAtel Inc.
-				1120 - 68 Ave NE
-				Calgary  Alberta  T2E 8S5
-				CA
-
-00-21-64   (hex)		Special Design Bureau for Seismic Instrumentation
-002164     (base 16)		Special Design Bureau for Seismic Instrumentation
-				129, Krainyaya Str.
-				Saratov  Saratov region  410019
-				RU
-
-00-21-60   (hex)		Hidea Solutions Co. Ltd.
-002160     (base 16)		Hidea Solutions Co. Ltd.
-				4F, Do&Can house Dldg., #656-1683, Seongsu 1-ga 2-dong, Seongdong-gu
-				Seoul    656-1683
-				KR
-
-00-21-B1   (hex)		DIGITAL SOLUTIONS LTD
-0021B1     (base 16)		DIGITAL SOLUTIONS LTD
-				Tsarigradsko Shose 7km BLVD
-				Sofia  Sofia  1784
-				BG
-
-00-21-B0   (hex)		Tyco Telecommunications
-0021B0     (base 16)		Tyco Telecommunications
-				1011 Pawtucket Blvd
-				Lowell  Massachusetts  01853
-				US
-
-00-21-AD   (hex)		Nordic ID Oy
-0021AD     (base 16)		Nordic ID Oy
-				Myllyojankatu 2A
-				SALO    FIN-24100
-				FI
-
-00-21-7F   (hex)		Intraco Technology Pte Ltd
-00217F     (base 16)		Intraco Technology Pte Ltd
-				750e Chai Chee Road #05-01
-				Singapore    4690005
-				SG
-
-00-21-7D   (hex)		PYXIS S.R.L.
-00217D     (base 16)		PYXIS S.R.L.
-				C/O DIP. INFORMATICA E SISTEMISTICA - UNIVERSITY OF PAVIA
-				PAVIA    27100
-				IT
-
-00-21-6F   (hex)		SymCom, Inc.
-00216F     (base 16)		SymCom, Inc.
-				2880 North Plaza Drive
-				Rapid City  SD  57702
-				US
-
-00-21-A3   (hex)		Micromint
-0021A3     (base 16)		Micromint
-				111 Commerce St
-				Lake Mary  FL  32746
-				US
-
-00-21-A5   (hex)		ERLPhase Power Technologies Ltd.
-0021A5     (base 16)		ERLPhase Power Technologies Ltd.
-				74 Scurfield Blvd.
-				Winnipeg  Manitoba  R3Y 1G4
-				CA
-
-00-21-9D   (hex)		Adesys BV
-00219D     (base 16)		Adesys BV
-				Molenweer 4
-				Wateringen  Zuid Holland  2291 NR
-				NL
-
-00-21-95   (hex)		GWD Media Limited
-002195     (base 16)		GWD Media Limited
-				10 Leeds Road
-				Sheffield  South Yorkshire  S9 3TY
-				GB
-
-00-21-88   (hex)		EMC Corporation
-002188     (base 16)		EMC Corporation
-				2421 Mission College Blvd
-				Santa Clara  CA  95050
-				US
-
-00-21-1A   (hex)		LInTech Corporation
-00211A     (base 16)		LInTech Corporation
-				Krasnokazarmennaya st., 12
-				Moscow    111250
-				RU
-
-00-21-16   (hex)		Transcon Electronic Systems, spol. s r. o.
-002116     (base 16)		Transcon Electronic Systems, spol. s r. o.
-				Kvapilova 2133
-				Frydek-Mistek    73802
-				CZ
-
-00-21-15   (hex)		PHYWE Systeme GmbH & Co. KG
-002115     (base 16)		PHYWE Systeme GmbH & Co. KG
-				Robert-Bosch-Breite 10
-				Goettingen  Niedersachsen  37079
-				DE
-
-00-21-41   (hex)		RADLIVE
-002141     (base 16)		RADLIVE
-				4 Hanechoshet St.
-				Tel Aviv    69710
-				IL
-
-00-21-40   (hex)		EN Technologies Inc.
-002140     (base 16)		EN Technologies Inc.
-				Geumbok Bldg. 9F, Band-yi-dong 45-2, Songpa-gu
-				Seoul    138-828
-				KR
-
-00-21-3D   (hex)		Cermetek Microelectronics, Inc.
-00213D     (base 16)		Cermetek Microelectronics, Inc.
-				374 Turquoise Street
-				Milpitas  CA  95035
-				US
-
-00-21-11   (hex)		Uniphone Inc.
-002111     (base 16)		Uniphone Inc.
-				795 Main Street
-				Half Moon Bay  CA  94019
-				US
-
-00-21-14   (hex)		Hylab Technology Inc.
-002114     (base 16)		Hylab Technology Inc.
-				15F-2.,No.872,Jhongjheng Rd.
-				Jhonghe City,  Taipei  235
-				TW
-
-00-21-32   (hex)		Masterclock, Inc.
-002132     (base 16)		Masterclock, Inc.
-				2484 W. Clay St.
-				St. Charles  MO  63301
-				US
-
-00-21-31   (hex)		Blynke Inc.
-002131     (base 16)		Blynke Inc.
-				133 Richmond St. West
-				Toronto  Ontario  M5H 2L3
-				CA
-
-00-21-29   (hex)		Cisco-Linksys, LLC
-002129     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-00-21-1D   (hex)		Dataline AB
-00211D     (base 16)		Dataline AB
-				Katrinedalsgatan 53
-				Borås    S-50451
-				SE
-
-00-21-20   (hex)		Sequel Technologies
-002120     (base 16)		Sequel Technologies
-				2951 Cleveland Ave N
-				Roseville  MN  55113
-				US
-
-00-21-52   (hex)		General Satellite Research & Development Limited
-002152     (base 16)		General Satellite Research & Development Limited
-				Lit. E, building 2, 4 Novoladozhskaya str
-				Saint Petersburg    197110
-				RU
-
-00-21-58   (hex)		Style Flying Technology Co.
-002158     (base 16)		Style Flying Technology Co.
-				22/F,Cyber Tower B,No.2 Zhong Guan Cun South Street,Haidian District,
-				Beijing    100086
-				CN
-
-00-21-48   (hex)		Kaco Solar Korea
-002148     (base 16)		Kaco Solar Korea
-				Chung-won-ku Sang-dea-won-dong 333-1
-				Songnam  Kyung-kido  462-806
-				KR
-
-00-21-3C   (hex)		AliphCom
-00213C     (base 16)		AliphCom
-				150 Executive Park Blvd
-				San Francisco  CA  94134
-				US
-
-00-1F-B5   (hex)		I/O Interconnect Inc.
-001FB5     (base 16)		I/O Interconnect Inc.
-				1202 E Wakeham Ave
-				Santa Ana  CA  92708
-				US
-
-00-1F-E7   (hex)		Simet
-001FE7     (base 16)		Simet
-				Strada del Portone 129
-				Grugliasco  Torino  10095
-				IT
-
-00-1F-DB   (hex)		Network Supply Corp.,
-001FDB     (base 16)		Network Supply Corp.,
-				1938 NAKADAIRA KANAE
-				IIDA  NAGANO  395-0801
-				JP
-
-00-1F-BF   (hex)		Fulhua Microelectronics Corp. Taiwan Branch
-001FBF     (base 16)		Fulhua Microelectronics Corp. Taiwan Branch
-				1F, No.12, R&D Road,
-				Hsin-Chu, 300    886
-				TW
-
-00-1F-BE   (hex)		Shenzhen Mopnet Industrial Co.,Ltd
-001FBE     (base 16)		Shenzhen Mopnet Industrial Co.,Ltd
-				3F.No.3 Keyuan Rd.,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1F-C2   (hex)		Jow Tong Technology Co Ltd
-001FC2     (base 16)		Jow Tong Technology Co Ltd
-				46 Lane 337 Chung Cheng Rd
-				Yung Kang City  Tainan County  71066
-				TW
-
-00-1F-D2   (hex)		COMMTECH TECHNOLOGY MACAO COMMERCIAL OFFSHORE LTD.
-001FD2     (base 16)		COMMTECH TECHNOLOGY MACAO COMMERCIAL OFFSHORE LTD.
-				31,TAI YIP STREET, 7/F KWUN TONG,
-				KOWLOON,  HONGKONG  
-				CN
-
-00-1F-B8   (hex)		Universal Remote Control, Inc.
-001FB8     (base 16)		Universal Remote Control, Inc.
-				500 Mamaroneck Avenue
-				Harrison  NY  10528
-				US
-
-00-1F-D4   (hex)		4IPNET, INC.
-001FD4     (base 16)		4IPNET, INC.
-				38129 CAMBRIDGE COURT
-				FREMONT  CA  94536
-				US
-
-00-1F-CB   (hex)		NIW Solutions
-001FCB     (base 16)		NIW Solutions
-				P.O. Box 62
-				One Tree Hill  South Australia  5114
-				AU
-
-00-1F-F7   (hex)		Nakajima All Precision Co., Ltd.
-001FF7     (base 16)		Nakajima All Precision Co., Ltd.
-				Kami-Gomyo1480
-				Hanishina-Gun  Nagano-Ken  389-0606
-				JP
-
-00-1F-EB   (hex)		Trio Datacom Pty Ltd
-001FEB     (base 16)		Trio Datacom Pty Ltd
-				41 Aster Avenue
-				Carrum Downs  Victoria  3201
-				AU
-
-00-1F-69   (hex)		Pingood Technology Co., Ltd.
-001F69     (base 16)		Pingood Technology Co., Ltd.
-				Rm1917, South Block, Cangsong Bldg., Tairan Industrial Zone, Futian District
-				Shenzhen  Guangdong  518040
-				CN
-
-00-1F-4D   (hex)		Segnetics LLC
-001F4D     (base 16)		Segnetics LLC
-				Shkiperski protok 14
-				Saint-Petersburg    199106
-				RU
-
-00-1F-81   (hex)		Accel Semiconductor Corp
-001F81     (base 16)		Accel Semiconductor Corp
-				1F,Mainbldg,149 Chun Xiao Road,
-				Shanghai    201203
-				CN
-
-00-1F-83   (hex)		Teleplan Technology Services Sdn Bhd
-001F83     (base 16)		Teleplan Technology Services Sdn Bhd
-				2580, Tingkat Perusahaan 4B
-				Perai  Penang  13600
-				MY
-
-00-1F-9B   (hex)		POSBRO
-001F9B     (base 16)		POSBRO
-				ShinyoungGtower 6F, 271-1
-				Seongnam-si  Kyunggi-do  463-824
-				KR
-
-00-1F-78   (hex)		Blue Fox Porini Textile
-001F78     (base 16)		Blue Fox Porini Textile
-				1208 Pointe Centre Drive
-				Chattanooga  TN  37421
-				US
-
-00-1F-68   (hex)		Martinsson Elektronik AB
-001F68     (base 16)		Martinsson Elektronik AB
-				Box 9060
-				Hägersten  Stockholm  126 09
-				SE
-
-00-1F-63   (hex)		JSC Goodwin-Europa
-001F63     (base 16)		JSC Goodwin-Europa
-				20/5 Marksistskaya st.
-				Moscow    109147
-				RU
-
-00-1F-AD   (hex)		Brown Innovations, Inc
-001FAD     (base 16)		Brown Innovations, Inc
-				369 Congress Street
-				Boston  MA  02210
-				US
-
-00-1F-A6   (hex)		Stilo srl
-001FA6     (base 16)		Stilo srl
-				Via Besana, 4
-				20122  Milano  
-				IT
-
-00-1F-97   (hex)		BERTANA srl
-001F97     (base 16)		BERTANA srl
-				Viale GALILEO FERRARIS 27
-				BRUINO  TORINO  10090
-				IT
-
-00-1F-8C   (hex)		CCS Inc.
-001F8C     (base 16)		CCS Inc.
-				Shimodachiuri-agaru
-				Kyoto  Kyoto  602-8011
-				JP
-
-00-1F-10   (hex)		TOLEDO DO BRASIL INDUSTRIA DE BALANCAS  LTDA
-001F10     (base 16)		TOLEDO DO BRASIL INDUSTRIA DE BALANCAS  LTDA
-				RUA MANOEL CREMONESI, 1
-				SAO BERNARDO DO CAMPO  SP  09851-900
-				BR
-
-00-1F-0F   (hex)		Select Engineered Systems
-001F0F     (base 16)		Select Engineered Systems
-				7991 W. 26 Ave
-				Hialeah  Florida  33016
-				US
-
-00-1F-02   (hex)		Pixelmetrix Corporation Pte Ltd
-001F02     (base 16)		Pixelmetrix Corporation Pte Ltd
-				31 Kaki Bukit Road 3
-				    417818
-				SG
-
-00-1E-FE   (hex)		LEVEL s.r.o.
-001EFE     (base 16)		LEVEL s.r.o.
-				Plhovska 1997
-				Nachod    547 01
-				CZ
-
-00-1F-1A   (hex)		Prominvest
-001F1A     (base 16)		Prominvest
-				7, Bobruiskaya ulica
-				Saint-Petersburg  North-West Federal District  195009
-				RU
-
-00-1F-18   (hex)		Hakusan.Mfg.Co,.Ltd
-001F18     (base 16)		Hakusan.Mfg.Co,.Ltd
-				Tomin-Kougyou-Ikebukuro BLD.5F
-				Tosima Ward  Tokyo-Met.  171-0022
-				JP
-
-00-1F-13   (hex)		S.& A.S. Ltd.
-001F13     (base 16)		S.& A.S. Ltd.
-				Boutros Bldg. 1st bsmt
-				Beirut    2067 7808
-				LB
-
-00-1F-25   (hex)		MBS GmbH
-001F25     (base 16)		MBS GmbH
-				Römerstraße 15
-				Krefeld  Nordrhein-Westfalen  47809
-				DE
-
-00-1F-27   (hex)		Cisco Systems, Inc
-001F27     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1F-26   (hex)		Cisco Systems, Inc
-001F26     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-EF   (hex)		Cantronic International Limited
-001EEF     (base 16)		Cantronic International Limited
-				Unit 515-516, Building 15, East Wing, No 8 Science Park West Avenue, Hong Kong Science Park Phase II
-				Shatin  New Territories  852
-				HK
-
-00-1E-DE   (hex)		BYD COMPANY LIMITED
-001EDE     (base 16)		BYD COMPANY LIMITED
-				NO.1,Baoping Road,Baolong Industrial Town,Longgang
-				SHEN ZHEN  Guangdong  518116
-				CN
-
-00-1E-DD   (hex)		WASKO S.A.
-001EDD     (base 16)		WASKO S.A.
-				Berbeckiego 6
-				Gliwice  Silesia  44-100
-				PL
-
-00-1E-DB   (hex)		Giken Trastem Co., Ltd.
-001EDB     (base 16)		Giken Trastem Co., Ltd.
-				4-1 Takeda Dankawaracho Fushimiku
-				Kyoto    612-8414
-				JP
-
-00-1F-42   (hex)		Etherstack plc
-001F42     (base 16)		Etherstack plc
-				80 Abercrombie Street
-				Chippendale  NSW  2008
-				AU
-
-00-1F-35   (hex)		AIR802 LLC
-001F35     (base 16)		AIR802 LLC
-				1169 Banyon Court
-				Naperville  IL  60540
-				US
-
-00-1F-34   (hex)		Lung Hwa Electronics Co., Ltd.
-001F34     (base 16)		Lung Hwa Electronics Co., Ltd.
-				3F, 248, Pei Sheng Rd. Sec. 3,
-				Taipei  Hsien  222
-				TW
-
-00-1E-EB   (hex)		Talk-A-Phone Co.
-001EEB     (base 16)		Talk-A-Phone Co.
-				5013 N. Kedzie Ave.
-				Chicago  IL  60625
-				US
-
-00-1E-6A   (hex)		Beijing Bluexon Technology Co.,Ltd
-001E6A     (base 16)		Beijing Bluexon Technology Co.,Ltd
-				Jinqiuzhichun 7-301,Zhichun Rd.,
-				Beijing    100088
-				CN
-
-00-1E-66   (hex)		RESOL Elektronische Regelungen GmbH
-001E66     (base 16)		RESOL Elektronische Regelungen GmbH
-				Heiskampstraße 10
-				Hattingen  NRW  45527
-				DE
-
-00-1E-63   (hex)		Vibro-Meter SA
-001E63     (base 16)		Vibro-Meter SA
-				Route de Moncor 4
-				Fribourg    CH-1701
-				CH
-
-00-1E-7F   (hex)		CBM of America
-001E7F     (base 16)		CBM of America
-				1455 West Newport Center Drive
-				Deerfield Beach  Florida  33442
-				US
-
-00-1E-82   (hex)		SanDisk Corporation
-001E82     (base 16)		SanDisk Corporation
-				630 Alder Drive,
-				Milpitas  CA  95035
-				US
-
-00-1E-B1   (hex)		Cryptsoft Pty Ltd
-001EB1     (base 16)		Cryptsoft Pty Ltd
-				P.O. Box 6389
-				Fairfield Gardens  Queensland  4103
-				AU
-
-00-1E-AF   (hex)		Ophir Optronics Ltd
-001EAF     (base 16)		Ophir Optronics Ltd
-				POB 45021
-				Jerusalem    91450
-				IL
-
-00-1E-AD   (hex)		Wingtech Group Limited
-001EAD     (base 16)		Wingtech Group Limited
-				6th floor, Unit G, No.668, East Beijing Road,
-				Shanghai    200001
-				CN
-
-00-1E-D1   (hex)		Keyprocessor B.V.
-001ED1     (base 16)		Keyprocessor B.V.
-				Paasheuvelweg 20
-				Amsterdam  NH  1105 BJ
-				NL
-
-00-1E-D0   (hex)		Ingespace
-001ED0     (base 16)		Ingespace
-				6 rue de lourmede
-				Eurocentre    31621
-				FR
-
-00-1E-8E   (hex)		Hunkeler AG
-001E8E     (base 16)		Hunkeler AG
-				Bahnhofstrasse 31
-				Wikon  CH  4806
-				CH
-
-00-1E-87   (hex)		Realease Limited
-001E87     (base 16)		Realease Limited
-				15/F, Morrison Commercial Building
-				WanChai    
-				HK
-
-00-1E-CD   (hex)		KYLAND Technology Co. LTD
-001ECD     (base 16)		KYLAND Technology Co. LTD
-				Building No.2,Shixing Avenue 30#
-				Shijingshan District  Beijing  100044
-				CN
-
-00-1E-BF   (hex)		Haas Automation Inc.
-001EBF     (base 16)		Haas Automation Inc.
-				2800 Sturgis Rd
-				Oxnard  CA  93030
-				US
-
-00-1E-BC   (hex)		WINTECH AUTOMATION CO.,LTD.
-001EBC     (base 16)		WINTECH AUTOMATION CO.,LTD.
-				#1115, TAEKWANG BLVD.
-				SUWON-SI  KYUNGGI  443-816
-				KR
-
-00-1E-6F   (hex)		Magna-Power Electronics, Inc.
-001E6F     (base 16)		Magna-Power Electronics, Inc.
-				39 Royal Road
-				Flemington  NJ  08822
-				US
-
-00-1E-A1   (hex)		Brunata a/s
-001EA1     (base 16)		Brunata a/s
-				Vesterlundvej 14
-				Herlev    2730
-				DK
-
-00-1E-53   (hex)		Further Tech Co., LTD
-001E53     (base 16)		Further Tech Co., LTD
-				8F,NO 421, Sungshan RD.,Taipei, Taiwn,R.O.C.
-				Taipei    110
-				TW
-
-00-1E-4E   (hex)		DAKO EDV-Ingenieur- und Systemhaus GmbH
-001E4E     (base 16)		DAKO EDV-Ingenieur- und Systemhaus GmbH
-				Ernst-Haeckel-Platz 5/6
-				Jena  Thuringia  07745
-				DE
-
-00-1E-49   (hex)		Cisco Systems, Inc
-001E49     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-28   (hex)		Lumexis Corporation
-001E28     (base 16)		Lumexis Corporation
-				3184 Airway Ave Bldg D
-				Costa Mesa  CA  92626
-				US
-
-00-1E-24   (hex)		Zhejiang Bell Technology Co.,ltd
-001E24     (base 16)		Zhejiang Bell Technology Co.,ltd
-				6 Xidoumen Rd. West Lake district
-				Hangzhou  Zhejiang  310012
-				CN
-
-00-1E-20   (hex)		Intertain Inc.
-001E20     (base 16)		Intertain Inc.
-				Suite 608 LG Eclat-2, 245-4 Seohyun-dong, Bundang-gu
-				Sungngm-shi  Kyunggi-do  463-824
-				KR
-
-00-1E-1C   (hex)		SWS Australia Pty Limited
-001E1C     (base 16)		SWS Australia Pty Limited
-				23 Scanlon Drive
-				Epping  Victoria  3076
-				AU
-
-00-1E-12   (hex)		Ecolab
-001E12     (base 16)		Ecolab
-				655 Lone Oak Drive
-				Eagan  MN  55121
-				US
-
-00-1E-16   (hex)		Keytronix
-001E16     (base 16)		Keytronix
-				Ungargasse 64-66/1/109
-				Vienna    1030
-				AT
-
-00-1E-32   (hex)		Zensys
-001E32     (base 16)		Zensys
-				Emdrupvej 26
-				Copenhagen O    DK-2100
-				DK
-
-00-1E-35   (hex)		Nintendo Co., Ltd.
-001E35     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1E-2B   (hex)		Radio Systems Design, Inc.
-001E2B     (base 16)		Radio Systems Design, Inc.
-				601 Heron Drive
-				Logan Twp  New Jersey  08085
-				US
-
-00-1E-42   (hex)		Teltonika
-001E42     (base 16)		Teltonika
-				Zirmunu 27
-				Vilnius    LT - 09105
-				LT
-
-00-1E-43   (hex)		AISIN AW CO.,LTD.
-001E43     (base 16)		AISIN AW CO.,LTD.
-				6-18 HARAYAMA
-				OKAZAKI  AICHI  444-8564
-				JP
-
-00-1E-08   (hex)		Centec Networks Inc
-001E08     (base 16)		Centec Networks Inc
-				 Suite 4F-13/16, Building B, No.5 Xing Han Street
-				Suzhou  Jiangsu  215021
-				CN
-
-00-1D-FB   (hex)		NETCLEUS Systems Corporation
-001DFB     (base 16)		NETCLEUS Systems Corporation
-				3F, Daiichi-maeda Bldg.
-				Yamato-shi    242-0017
-				JP
-
-00-1D-B9   (hex)		Wellspring Wireless
-001DB9     (base 16)		Wellspring Wireless
-				107 Magella Court
-				North Wales  Pa  19454
-				US
-
-00-1D-BB   (hex)		Dynamic System Electronics Corp.
-001DBB     (base 16)		Dynamic System Electronics Corp.
-				5F,NO,9,LANE 130,SEC 1,KUANGG FU RD.SAN CHUNG CITY,
-				Taipei  Hsien  24158
-				TW
-
-00-1D-B3   (hex)		HPN Supply Chain
-001DB3     (base 16)		HPN Supply Chain
-				8000 Foothills Blvd
-				Roseville  CA  95747
-				US
-
-00-1D-B1   (hex)		Crescendo Networks
-001DB1     (base 16)		Crescendo Networks
-				6 Yoni Netanyahu St.
-				Or-Yehuda    60376
-				IL
-
-00-1D-B4   (hex)		KUMHO ENG CO.,LTD
-001DB4     (base 16)		KUMHO ENG CO.,LTD
-				498-13, HYUNDAI B/D 5F
-				DAEGU    703-835
-				KR
-
-00-1D-A4   (hex)		Hangzhou System Technology CO., LTD
-001DA4     (base 16)		Hangzhou System Technology CO., LTD
-				ROOM A1505 HuaXing times plaza,NO 478 Wensan Road
-				Hangzhou  Zhejiang  310012
-				CN
-
-00-1D-9F   (hex)		MATT   R.P.Traczynscy Sp.J.
-001D9F     (base 16)		MATT   R.P.Traczynscy Sp.J.
-				Polnocna 44
-				Koscian  wielkopolskie  PL-64000
-				PL
-
-00-1D-90   (hex)		EMCO Flow Systems
-001D90     (base 16)		EMCO Flow Systems
-				2150 Miller Drive
-				Longmont  CO  80501
-				US
-
-00-1D-93   (hex)		Modacom
-001D93     (base 16)		Modacom
-				Jinsuk Building 1536-7
-				Seoul    137-073
-				KR
-
-00-1D-94   (hex)		Climax Technology Co., Ltd
-001D94     (base 16)		Climax Technology Co., Ltd
-				No. 258, Hsin Hu 2nd Road
-				Taipei City  Taipei  114
-				TW
-
-00-1D-8E   (hex)		Alereon, Inc.
-001D8E     (base 16)		Alereon, Inc.
-				7600 N. Capital of Texas Hwy
-				Austin  TX  78731
-				US
-
-00-1D-DB   (hex)		C-BEL Corporation
-001DDB     (base 16)		C-BEL Corporation
-				Futabacho 35-12
-				Itabashi-ku  Tokyo  173-0011
-				JP
-
-00-1D-E6   (hex)		Cisco Systems, Inc
-001DE6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-E7   (hex)		Marine Sonic Technology, Ltd.
-001DE7     (base 16)		Marine Sonic Technology, Ltd.
-				5508 George Washington Memorial Highway
-				White Marsh  Virginia  23183
-				US
-
-00-1D-7B   (hex)		Ice Energy, Inc.
-001D7B     (base 16)		Ice Energy, Inc.
-				9351 Eastman Park Drive
-				Windsor  Colorado  80550
-				US
-
-00-1D-6C   (hex)		ClariPhy Communications, Inc.
-001D6C     (base 16)		ClariPhy Communications, Inc.
-				16 Technology Dr., Suite 165
-				Irvine  CA  92618
-				US
-
-00-1D-C5   (hex)		Beijing Jiaxun Feihong Electricial Co., Ltd.
-001DC5     (base 16)		Beijing Jiaxun Feihong Electricial Co., Ltd.
-				Electrical Building,No. 31 Jiaoda East Road,
-				Beijing  Haidian District,  100044
-				CN
-
-00-1D-C6   (hex)		SNR Inc.
-001DC6     (base 16)		SNR Inc.
-				VBIC T223ho, ICU, 103-6 Munji-dong, Youseong-gu
-				Daejeon    305-732
-				KR
-
-00-1D-84   (hex)		Gateway, Inc.
-001D84     (base 16)		Gateway, Inc.
-				610 Gateway Drive
-				North Sioux City  South Dakota  57049
-				US
-
-00-1D-85   (hex)		Call Direct Cellular Solutions
-001D85     (base 16)		Call Direct Cellular Solutions
-				Suite 145, National Innovation Centre
-				Eveleigh  NSW  1430
-				AU
-
-00-1D-BF   (hex)		Radiient Technologies, Inc.
-001DBF     (base 16)		Radiient Technologies, Inc.
-				2084-A Walsh Ave
-				Santa Clara  CA  95050
-				US
-
-00-1D-34   (hex)		SYRIS Technology Corp
-001D34     (base 16)		SYRIS Technology Corp
-				21 F-2,  NO. 12,  SEC. 1,  Taijunggang Rd.
-				Taichung    403
-				US
-
-00-1D-32   (hex)		Longkay Communication & Technology (Shanghai) Co. Ltd
-001D32     (base 16)		Longkay Communication & Technology (Shanghai) Co. Ltd
-				No.5 Building, Unit 2, Lane 299 Bisheng Rd,
-				Shanghai    201204
-				CN
-
-00-1D-2A   (hex)		SHENZHEN BUL-TECH CO.,LTD.
-001D2A     (base 16)		SHENZHEN BUL-TECH CO.,LTD.
-				4/F, COFCO Bdlg , 3rd District,Baoan District, Shenzhen City,
-				shengzhen  guangdong  518101
-				CN
-
-00-1D-2D   (hex)		Pylone, Inc.
-001D2D     (base 16)		Pylone, Inc.
-				4F Nakano Bldg. 4-30-8 Kita-Shinjuku
-				Shinjuku-ku,  Tokyo  169-0074
-				JP
-
-00-1D-5D   (hex)		Control Dynamics Pty. Ltd.
-001D5D     (base 16)		Control Dynamics Pty. Ltd.
-				PO Box 636
-				MORLEY  Western Australia  6943
-				AU
-
-00-1D-59   (hex)		Mitra Energy & Infrastructure
-001D59     (base 16)		Mitra Energy & Infrastructure
-				Boulevard de l'Europe 131
-				1301  Wavre  
-				BE
-
-00-1D-2B   (hex)		Wuhan Pont Technology CO. , LTD
-001D2B     (base 16)		Wuhan Pont Technology CO. , LTD
-				Building E, Guandong Science and Technology Industry  Park,
-				Wuhan  Hubei  430074
-				CN
-
-00-1D-22   (hex)		Foss Analytical A/S
-001D22     (base 16)		Foss Analytical A/S
-				Slangerupgade 69
-				Hillerød  Seeland  3400
-				DK
-
-00-1D-23   (hex)		SENSUS 
-001D23     (base 16)		SENSUS 
-				44 CASTILIAN DRIVE
-				GOLETA  CALIFORNIA  93117
-				US
-
-00-1D-3E   (hex)		SAKA TECHNO SCIENCE CO.,LTD
-001D3E     (base 16)		SAKA TECHNO SCIENCE CO.,LTD
-				Nishi 105-1
-				Kanazawa  Ishikawa  920-0367
-				JP
-
-00-1D-40   (hex)		 Intel – GE Care Innovations LLC
-001D40     (base 16)		 Intel – GE Care Innovations LLC
-				3721 Douglas Blvd
-				Roseville  CA  95661
-				US
-
-00-1D-57   (hex)		CAETEC Messtechnik
-001D57     (base 16)		CAETEC Messtechnik
-				Schlossstraße 95a
-				Olching  Bayern  82140
-				DE
-
-00-1D-51   (hex)		Babcock & Wilcox Power Generation Group, Inc
-001D51     (base 16)		Babcock & Wilcox Power Generation Group, Inc
-				11864 Canon Blvd, Suite 105
-				Newport News  VA  23606
-				US
-
-00-1D-4C   (hex)		Alcatel-Lucent
-001D4C     (base 16)		Alcatel-Lucent
-				601 Data Dr.
-				Plano  TX  75075
-				US
-
-00-1D-1A   (hex)		OvisLink S.A.
-001D1A     (base 16)		OvisLink S.A.
-				C/Andres Obispo, 37. Pl. 4.
-				Madrid    28043
-				ES
-
-00-1C-B7   (hex)		USC DigiArk Corporation
-001CB7     (base 16)		USC DigiArk Corporation
-				6F Tennoz Central Tower 2-2-24 Higashishinagawa
-				Tokyo  Shinagawa-ku  140-0002
-				JP
-
-00-1C-AF   (hex)		Plato Networks Inc.
-001CAF     (base 16)		Plato Networks Inc.
-				2855 Kifer Road
-				Santa Clara  CA  95051
-				US
-
-00-1C-B1   (hex)		Cisco Systems, Inc
-001CB1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-FE   (hex)		Quartics Inc
-001CFE     (base 16)		Quartics Inc
-				15241 Laguna Canyon Road
-				Irvine  CA  92618
-				US
-
-00-1D-0B   (hex)		Power Standards Lab
-001D0B     (base 16)		Power Standards Lab
-				1201 Marina Village Parkway #101
-				Alameda  CA  94501
-				US
-
-00-1D-02   (hex)		Cybertech Telecom Development
-001D02     (base 16)		Cybertech Telecom Development
-				Hazenkoog 25
-				Alkmaar  Noord Holland  1822 BS
-				NL
-
-00-1C-E9   (hex)		Galaxy Technology Limited
-001CE9     (base 16)		Galaxy Technology Limited
-				9/F Win Full Commerical Building, 172-176 Wing Lok Street,
-				Sheung Wan,    
-				HK
-
-00-1C-EA   (hex)		Scientific-Atlanta, Inc
-001CEA     (base 16)		Scientific-Atlanta, Inc
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-00-1C-E7   (hex)		Rocon PLC Research Centre
-001CE7     (base 16)		Rocon PLC Research Centre
-				21 Vek 56A str.
-				Sofia    1700
-				US
-
-00-1C-DB   (hex)		CARPOINT CO.,LTD
-001CDB     (base 16)		CARPOINT CO.,LTD
-				1340-6, Namgang Bld 7F, Seocho-Dong
-				SEOUL    137-070
-				KR
-
-00-1C-D5   (hex)		ZeeVee, Inc.
-001CD5     (base 16)		ZeeVee, Inc.
-				1 Monarch Drive
-				Littleton  MA  01460
-				US
-
-00-1C-BC   (hex)		CastGrabber, LLC
-001CBC     (base 16)		CastGrabber, LLC
-				6507 Wilkins Avenue Ste. 212
-				Pittsburgh  PA  15217
-				US
-
-00-1C-E4   (hex)		EleSy JSC
-001CE4     (base 16)		EleSy JSC
-				Altayskaya street, 161a
-				  Tomsk oblast  634021
-				RU
-
-00-1C-E2   (hex)		Attero Tech, LLC.
-001CE2     (base 16)		Attero Tech, LLC.
-				1315 Directors Row - Suite 107
-				Fort Wayne  Indiana  46808
-				US
-
-00-1C-AA   (hex)		Bellon Pty Ltd
-001CAA     (base 16)		Bellon Pty Ltd
-				Unit 12/12-18 Victoria St East
-				Lidcombe  NSW  2000
-				AU
-
-00-1C-A0   (hex)		Production Resource Group, LLC
-001CA0     (base 16)		Production Resource Group, LLC
-				539 Temple Hill Road
-				New Windsor  NY  12553
-				US
-
-00-1C-D3   (hex)		ZP Engineering SEL
-001CD3     (base 16)		ZP Engineering SEL
-				via Ardito Desio, 60
-				ROME    00131
-				IT
-
-00-1C-CB   (hex)		Forth Corporation Public Company Limited
-001CCB     (base 16)		Forth Corporation Public Company Limited
-				226/12,13,16 Paholyothin Road
-				Bangkok    10400
-				TH
-
-00-1C-75   (hex)		Segnet Ltd.
-001C75     (base 16)		Segnet Ltd.
-				146 New London Road
-				Chelmsford Essex CM2 OAW    
-				GB
-
-00-1C-74   (hex)		Syswan Technologies Inc.
-001C74     (base 16)		Syswan Technologies Inc.
-				2050 Beavercreek Road
-				Oregon City  Oregon  97045
-				US
-
-00-1C-68   (hex)		Anhui Sun Create Electronics Co., Ltd
-001C68     (base 16)		Anhui Sun Create Electronics Co., Ltd
-				NO.199 Xiangzhang Road
-				Hefei  Anhui  230088
-				CN
-
-00-1C-66   (hex)		UCAMP CO.,LTD
-001C66     (base 16)		UCAMP CO.,LTD
-				#1015, Kolon Science Valley ¥±
-				Seoul  Guro-Dong,Guro-gu,  152-848
-				KR
-
-00-1C-98   (hex)		LUCKY TECHNOLOGY (HK) COMPANY LIMITED
-001C98     (base 16)		LUCKY TECHNOLOGY (HK) COMPANY LIMITED
-				FLAT/RM 1503 15/F ISLAND BEVERLEY NO 1 GREAT GEORGE STREET CAUSEWAY BAY
-				    999077
-				HK
-
-00-1C-81   (hex)		NextGen Venturi LTD
-001C81     (base 16)		NextGen Venturi LTD
-				Technium 2
-				Swansea  West Glamorgan  SA18PJ
-				GB
-
-00-1C-7A   (hex)		Perfectone Netware Company Ltd
-001C7A     (base 16)		Perfectone Netware Company Ltd
-				Unit 815, Sun Fung Centre,
-				Kwai Chung    
-				HK
-
-00-1C-53   (hex)		Synergy Lighting Controls
-001C53     (base 16)		Synergy Lighting Controls
-				One Lithonia Way
-				Conyers  GA  30012
-				US
-
-00-1C-4D   (hex)		Aplix IP Holdings Corporation
-001C4D     (base 16)		Aplix IP Holdings Corporation
-				2-20-9 Nishiwaseda
-				Shinjuku-ku  Tokyo  169-0051
-				JP
-
-00-1C-92   (hex)		Tervela
-001C92     (base 16)		Tervela
-				43 Nagog Park
-				Acton  MA  01720
-				US
-
-00-1C-8A   (hex)		Cirrascale Corporation
-001C8A     (base 16)		Cirrascale Corporation
-				9449 Carroll Park Drive
-				San Diego  CA  92121
-				US
-
-00-1C-38   (hex)		Bio-Rad Laboratories, Inc.
-001C38     (base 16)		Bio-Rad Laboratories, Inc.
-				245 Winter St.
-				Waltham  MA  02451
-				US
-
-00-1C-30   (hex)		Mode Lighting (UK ) Ltd.
-001C30     (base 16)		Mode Lighting (UK ) Ltd.
-				The Maltings
-				Ware  Hertfordshire  SG12 9AD
-				GB
-
-00-1C-2E   (hex)		HPN Supply Chain
-001C2E     (base 16)		HPN Supply Chain
-				8000 Foothills Blvd
-				Roseville  CA  95747
-				US
-
-00-1C-2A   (hex)		Envisacor Technologies Inc.
-001C2A     (base 16)		Envisacor Technologies Inc.
-				237 Romina Drive
-				Concord  Ontario  L4K 4V3
-				CA
-
-00-1C-02   (hex)		Pano Logic
-001C02     (base 16)		Pano Logic
-				2000 Seaport Drive, Suite 200
-				Redwood City  CA  94063
-				US
-
-00-1C-05   (hex)		Nonin Medical Inc.
-001C05     (base 16)		Nonin Medical Inc.
-				13700 1st Avenue North
-				Plymouth  MN  55441
-				US
-
-00-1C-06   (hex)		Siemens Numerical Control Ltd., Nanjing
-001C06     (base 16)		Siemens Numerical Control Ltd., Nanjing
-				No. 18 Siemens Road, Jiangning Development Zone
-				Nanjing  JiangSu  211100
-				CN
-
-00-1B-EA   (hex)		Nintendo Co., Ltd.
-001BEA     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1B-E5   (hex)		802automation Limited
-001BE5     (base 16)		802automation Limited
-				18 First Avenue
-				Worthing  West Sussex  BN14 9NJ
-				GB
-
-00-1B-E4   (hex)		TOWNET SRL
-001BE4     (base 16)		TOWNET SRL
-				VIA DEI FINALE, 20
-				61043  CAGLI (PU)  
-				IT
-
-00-1C-04   (hex)		Airgain, Inc.
-001C04     (base 16)		Airgain, Inc.
-				1930 Palomar Point Way
-				Carlsbad  CA  92008
-				US
-
-00-1C-01   (hex)		ABB Oy Drives
-001C01     (base 16)		ABB Oy Drives
-				Hiomotie 13
-				Helsinki    FI-00380
-				FI
-
-00-1B-FF   (hex)		Millennia Media inc.
-001BFF     (base 16)		Millennia Media inc.
-				4200 Day Spring CT
-				Placerville  CA  95667
-				US
-
-00-1B-F2   (hex)		KWORLD COMPUTER CO., LTD
-001BF2     (base 16)		KWORLD COMPUTER CO., LTD
-				No. 113, Jian 2nd Rd.,
-				Jhonghe  Taipei county  235
-				TW
-
-00-1B-F0   (hex)		Value Platforms Limited
-001BF0     (base 16)		Value Platforms Limited
-				Rm 712-713, Building 9, 5, Science Park West Ave.,
-				Shatin,    
-				HK
-
-00-1C-1B   (hex)		Hyperstone GmbH
-001C1B     (base 16)		Hyperstone GmbH
-				Line-Eid-Straße 3
-				Konstanz  Baden-Württemberg  78467
-				DE
-
-00-1C-10   (hex)		Cisco-Linksys, LLC
-001C10     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-00-1B-D2   (hex)		ULTRA-X ASIA PACIFIC Inc.
-001BD2     (base 16)		ULTRA-X ASIA PACIFIC Inc.
-				5-1-15 Sotokanda
-				Tokyo  Chiyoda-ku  101-0021
-				JP
-
-00-1B-8D   (hex)		Electronic Computer Systems, Inc.
-001B8D     (base 16)		Electronic Computer Systems, Inc.
-				418 Donegal Drive
-				Towson  MD  21286
-				US
-
-00-1B-86   (hex)		Bosch Access Systems GmbH
-001B86     (base 16)		Bosch Access Systems GmbH
-				Charlottenburger Allee 50
-				AACHEN    D-52068
-				DE
-
-00-1B-C2   (hex)		Integrated Control Technology Limitied
-001BC2     (base 16)		Integrated Control Technology Limitied
-				11 Canaveral Drive
-				Auckland  Auckland  0735
-				NZ
-
-00-1B-BB   (hex)		RFTech Co.,Ltd
-001BBB     (base 16)		RFTech Co.,Ltd
-				339-17 Jwahang-Ri,Wonsam-Myun,
-				Yongin-Si  Kyungki-Do  449-871
-				KR
-
-00-1B-AA   (hex)		XenICs nv
-001BAA     (base 16)		XenICs nv
-				Ambachtenlaan 44
-				Leuven  Vlaams-Brabant  B-3001
-				BE
-
-00-1B-7C   (hex)		A & R Cambridge
-001B7C     (base 16)		A & R Cambridge
-				Pembroke Avenue
-				Cambridge  CAMBS  CB25 9QR
-				GB
-
-00-1B-5D   (hex)		Vololink Pty Ltd
-001B5D     (base 16)		Vololink Pty Ltd
-				Level 2, 541 Blackburn Road
-				Mount Waverley  Victoria  3149
-				AU
-
-00-1B-5A   (hex)		Apollo Imaging Technologies, Inc.
-001B5A     (base 16)		Apollo Imaging Technologies, Inc.
-				18545 Rangeland Rd
-				Ramona  CA  92065
-				US
-
-00-1B-56   (hex)		Tehuti Networks Ltd.
-001B56     (base 16)		Tehuti Networks Ltd.
-				1, Shenkar St.
-				Hertzliya    46105
-				IL
-
-00-1B-C6   (hex)		Strato Rechenzentrum AG
-001BC6     (base 16)		Strato Rechenzentrum AG
-				Pascalstrasse 10
-				D-10587  Berlin  
-				DE
-
-00-1B-C4   (hex)		Ultratec, Inc.
-001BC4     (base 16)		Ultratec, Inc.
-				450 Science Drive
-				Madison  WI  53711
-				US
-
-00-1B-A1   (hex)		Åmic AB
-001BA1     (base 16)		Åmic AB
-				Uppsala science park
-				Uppsala    75183
-				SE
-
-00-1B-96   (hex)		General Sensing
-001B96     (base 16)		General Sensing
-				Unit 716, Cyberport 1
-				Pok Fu Lam    
-				US
-
-00-1A-EA   (hex)		Radio Terminal Systems Pty Ltd
-001AEA     (base 16)		Radio Terminal Systems Pty Ltd
-				1st Floor
-				Laverton North  Victoria  3026
-				AU
-
-00-1A-DD   (hex)		PePWave Ltd
-001ADD     (base 16)		PePWave Ltd
-				17/F., Park Building,
-				Cheung Sha Wan  Kowloon  
-				HK
-
-00-1A-D6   (hex)		JIAGNSU AETNA ELECTRIC CO.,LTD
-001AD6     (base 16)		JIAGNSU AETNA ELECTRIC CO.,LTD
-				NO.571 QIANHU ROAD,QIANQIAO INDUSTRY PARK,WUXI,JIANGSU,CHINA
-				WUXI  JIANGSU  214151
-				CN
-
-00-1A-D4   (hex)		iPOX Technology Co., Ltd.
-001AD4     (base 16)		iPOX Technology Co., Ltd.
-				15F-1, No.186, Jian-Yi Rd., Chung-Ho City,
-				Taipei    235
-				TW
-
-00-1B-14   (hex)		Carex Lighting Equipment Factory
-001B14     (base 16)		Carex Lighting Equipment Factory
-				50 Chang Tang Rd., Yan Tian District,
-				  Guangdong province  
-				CN
-
-00-1B-15   (hex)		Voxtel, Inc.
-001B15     (base 16)		Voxtel, Inc.
-				12725 SW Millikan Way
-				Beaverton  OR  97005
-				US
-
-00-1B-09   (hex)		Matrix Telecom Pvt. Ltd.
-001B09     (base 16)		Matrix Telecom Pvt. Ltd.
-				394, GIDC, Makarpura,
-				Vadodara  Gujarat  390010
-				IN
-
-00-1B-03   (hex)		Action Technology (SZ) Co., Ltd
-001B03     (base 16)		Action Technology (SZ) Co., Ltd
-				Action Technology Building Baoyuan Road, Xixiang, Bao'an District
-				Shenzhen  Guangdong  518102
-				CN
-
-00-1A-FB   (hex)		Joby Inc.
-001AFB     (base 16)		Joby Inc.
-				1535 Mission St.
-				San Francisco  CA  94103
-				US
-
-00-1A-FD   (hex)		EVOLIS
-001AFD     (base 16)		EVOLIS
-				29 avenue de la fontaine
-				Beaucouze    49070
-				FR
-
-00-1B-1E   (hex)		HART Communication Foundation
-001B1E     (base 16)		HART Communication Foundation
-				STE 1-350
-				Austin  TX  78759
-				US
-
-00-1B-4C   (hex)		Signtech
-001B4C     (base 16)		Signtech
-				609 Seonil Technopia 609
-				Sungnamsi  Kyunggido  462-120
-				KR
-
-00-1A-D5   (hex)		KMC CHAIN INDUSTRIAL CO., LTD.
-001AD5     (base 16)		KMC CHAIN INDUSTRIAL CO., LTD.
-				7F-8, No. 81, Sui-Lih Rd., Hsinchu
-				Hsinchu    300
-				TW
-
-00-1A-D0   (hex)		Albis Technologies AG
-001AD0     (base 16)		Albis Technologies AG
-				Albisriederstrasse 199
-				CH 8047  Zuerich  
-				CH
-
-00-1A-D3   (hex)		Vamp Ltd.
-001AD3     (base 16)		Vamp Ltd.
-				PO Box 810
-				Vaasa    65101
-				FI
-
-00-1A-D8   (hex)		AlsterAero GmbH
-001AD8     (base 16)		AlsterAero GmbH
-				Heidenkampsweg 45
-				Hamburg    20097
-				DE
-
-00-1A-DA   (hex)		Biz-2-Me Inc.
-001ADA     (base 16)		Biz-2-Me Inc.
-				1301 West Eau Gallie Blvd
-				Melbourne  FL  32935
-				US
-
-00-1A-6F   (hex)		MI.TEL s.r.l.
-001A6F     (base 16)		MI.TEL s.r.l.
-				VIA GUIDO ROSSA, 22
-				CORNATE D'ADDA  MILANO  20040
-				IT
-
-00-1A-71   (hex)		Diostech Co., Ltd.
-001A71     (base 16)		Diostech Co., Ltd.
-				151-21, Buk-ri, Namsa-myeon,
-				Yongin-city  Gyeonggi-do  449 884
-				KR
-
-00-1A-69   (hex)		Wuhan Yangtze Optical Technology CO.,Ltd.
-001A69     (base 16)		Wuhan Yangtze Optical Technology CO.,Ltd.
-				4#,Guanshan 2 Road
-				Wuhan  Hubei  430073
-				CN
-
-00-1A-67   (hex)		Infinite QL Sdn Bhd
-001A67     (base 16)		Infinite QL Sdn Bhd
-				G.02, Block A, Dataran Hamodal
-				Petaling Jaya  Selangor Darul Ehsan  46300
-				MY
-
-00-1A-C3   (hex)		Scientific-Atlanta, Inc
-001AC3     (base 16)		Scientific-Atlanta, Inc
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-00-1A-BF   (hex)		TRUMPF Laser Marking Systems AG
-001ABF     (base 16)		TRUMPF Laser Marking Systems AG
-				Ausserfeld
-				Gruesch  GR  7214
-				CH
-
-00-1A-B8   (hex)		Anseri Corporation
-001AB8     (base 16)		Anseri Corporation
-				35E Industrial Way
-				Rochester  NH  03867
-				US
-
-00-1A-BC   (hex)		U4EA Technologies Ltd
-001ABC     (base 16)		U4EA Technologies Ltd
-				City Point
-				Bristol    BS1 6PL
-				GB
-
-00-1A-CB   (hex)		Autocom Products Ltd
-001ACB     (base 16)		Autocom Products Ltd
-				Unit 4 Tachbrook Link, Tachbrook Park Drive
-				Warwick  Warwickshire  CV34 6RH
-				GB
-
-00-1A-CF   (hex)		C.T. ELETTRONICA
-001ACF     (base 16)		C.T. ELETTRONICA
-				Via Caduti di Nassiriya 5 B
-				Barberino Val D'Elsa (FI)    50021
-				IT
-
-00-1A-A3   (hex)		DELORME
-001AA3     (base 16)		DELORME
-				2 DELORME DRIVE
-				YARMOUTH  MAINE  04096
-				US
-
-00-1A-9B   (hex)		ADEC & Parter AG
-001A9B     (base 16)		ADEC & Parter AG
-				Staldenbachstrasse 30
-				Pfaeffikon  ZH  8808
-				CH
-
-00-1A-9D   (hex)		Skipper Wireless, Inc.
-001A9D     (base 16)		Skipper Wireless, Inc.
-				Shinjuku-Sumitomo Bldg. 20F
-				Shinjuku  Tokyo  163-0220
-				JP
-
-00-1A-85   (hex)		NV Michel Van de Wiele
-001A85     (base 16)		NV Michel Van de Wiele
-				M. Vandewielestraat 7
-				Marke  West-Vlaanderen  8510
-				BE
-
-00-1A-8E   (hex)		3Way Networks Ltd
-001A8E     (base 16)		3Way Networks Ltd
-				7200 Cambridge Research Park
-				Cambridge  Cambridgeshire  CB5 9TL
-				GB
-
-00-1A-44   (hex)		JWTrading Co., Ltd
-001A44     (base 16)		JWTrading Co., Ltd
-				1590 Kwanyang-dong, Dongan-ku
-				Ahnyang  Kyungki - do  431-060
-				KR
-
-00-1A-49   (hex)		Micro Vision Co.,LTD
-001A49     (base 16)		Micro Vision Co.,LTD
-				1-9-15
-				Niigata-city  Niigata-ken  950-0986
-				JP
-
-00-1A-3D   (hex)		Ajin Vision Co.,Ltd
-001A3D     (base 16)		Ajin Vision Co.,Ltd
-				1404, Mario-Tower, 222-12
-				Seoul    152-050
-				KR
-
-00-1A-41   (hex)		INOCOVA Co.,Ltd
-001A41     (base 16)		INOCOVA Co.,Ltd
-				5F SEOUL BD.736-17
-				Yeoksam-Dong, Kangnam-Ku  SEOUL  135-924
-				KR
-
-00-1A-33   (hex)		ASI Communications, Inc.
-001A33     (base 16)		ASI Communications, Inc.
-				1042 E Guadalupe Rd
-				Tempe  AZ  85283
-				US
-
-00-1A-23   (hex)		Ice Qube, Inc
-001A23     (base 16)		Ice Qube, Inc
-				141 Wilson Ave
-				Greensburg  Pa  15601
-				US
-
-00-1A-1D   (hex)		PChome Online Inc.
-001A1D     (base 16)		PChome Online Inc.
-				11F, 105, Sec. 2, Tun-Hwa S. Rd.
-				  Taipei  106
-				TW
-
-00-1A-17   (hex)		Teak Technologies, Inc.
-001A17     (base 16)		Teak Technologies, Inc.
-				2901 Tasman Dr., Ste. #210
-				Santa Clara  CA  95054
-				US
-
-00-1A-1C   (hex)		GT&T Engineering Pte Ltd
-001A1C     (base 16)		GT&T Engineering Pte Ltd
-				2 Ang Mo Kio St.64, Econ Building, #04-00
-				  Singapore  569084
-				SG
-
-00-1A-1F   (hex)		Coastal Environmental Systems
-001A1F     (base 16)		Coastal Environmental Systems
-				820 First Avenue South
-				Seattle  wa  98134
-				US
-
-00-1A-64   (hex)		IBM Corp
-001A64     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-1A-51   (hex)		Alfred Mann Foundation
-001A51     (base 16)		Alfred Mann Foundation
-				P.O. Box 905
-				Santa Clarita  CA  91380-9005
-				US
-
-00-1A-55   (hex)		ACA-Digital Corporation
-001A55     (base 16)		ACA-Digital Corporation
-				17 F, No. 866-7, Chung Cheng Rd.,
-				Chung Ho City  Taipei County  23586
-				TW
-
-00-19-E6   (hex)		TOYO MEDIC CO.,LTD.
-0019E6     (base 16)		TOYO MEDIC CO.,LTD.
-				1-17-22 Kitahorie, Nishi-ku
-				Osaka    550-0014
-				JP
-
-00-19-E2   (hex)		Juniper Networks
-0019E2     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-19-E8   (hex)		Cisco Systems, Inc
-0019E8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-DF   (hex)		Thomson Inc.
-0019DF     (base 16)		Thomson Inc.
-				101 West 103rd Street
-				Indianapolis  IN  46290-1102
-				US
-
-00-19-DD   (hex)		FEI-Zyfer, Inc.
-0019DD     (base 16)		FEI-Zyfer, Inc.
-				1515 S. Manchester
-				Anaheim  CA  92802
-				US
-
-00-19-B2   (hex)		XYnetsoft Co.,Ltd
-0019B2     (base 16)		XYnetsoft Co.,Ltd
-				NO.158Zhenyu Street High Industries Development area
-				ChangChun  JiLin  130000
-				CN
-
-00-19-A4   (hex)		Austar Technology (hang zhou) Co.,Ltd
-0019A4     (base 16)		Austar Technology (hang zhou) Co.,Ltd
-				7-402,West Lake Software Part
-				Hang Zhou  Zhe Jiang  310012
-				CN
-
-00-19-AA   (hex)		Cisco Systems, Inc
-0019AA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-B1   (hex)		Arrow7 Corporation
-0019B1     (base 16)		Arrow7 Corporation
-				Kamijima 3-27-7
-				Hamamatsu  Shizuoka  433-8122
-				JP
-
-00-19-B3   (hex)		Stanford Research Systems
-0019B3     (base 16)		Stanford Research Systems
-				1290-D Reamwood Ave
-				Sunnyvale  CA  94089
-				US
-
-00-1A-0A   (hex)		Adaptive Micro-Ware Inc.
-001A0A     (base 16)		Adaptive Micro-Ware Inc.
-				6917 Innovation Blvd
-				Fort Wayne  IN  46818
-				US
-
-00-1A-05   (hex)		OPTIBASE LTD
-001A05     (base 16)		OPTIBASE LTD
-				7 Shankar St.
-				Herzliya  ISRAEL  46120
-				IL
-
-00-19-D4   (hex)		ICX Technologies
-0019D4     (base 16)		ICX Technologies
-				3440 Francis-Hughes
-				Laval  Quebec  H7L 5A9
-				CA
-
-00-19-CF   (hex)		SALICRU, S.A.
-0019CF     (base 16)		SALICRU, S.A.
-				Av. Serra , 100
-				Sta.Ma.Palautordera  Barcelona  08460
-				ES
-
-00-19-FC   (hex)		PT. Ufoakses Sukses Luarbiasa
-0019FC     (base 16)		PT. Ufoakses Sukses Luarbiasa
-				Jl. Sultan Hasanudin No. 41
-				Jakarta Selatan  DKI Jakarta  12160
-				ID
-
-00-19-F4   (hex)		Convergens Oy Ltd
-0019F4     (base 16)		Convergens Oy Ltd
-				Westendintie 99 B
-				Espoo  Uusimaa  FIN-02160
-				FI
-
-00-19-96   (hex)		TurboChef Technologies Inc.
-001996     (base 16)		TurboChef Technologies Inc.
-				4240 International Parkway
-				Carrollton  Texas  75007
-				US
-
-00-19-97   (hex)		Soft Device Sdn Bhd
-001997     (base 16)		Soft Device Sdn Bhd
-				67-2 Jalan 2/27F
-				Kuala Lumpur  WP  53300
-				MY
-
-00-19-98   (hex)		SATO CORPORATION
-001998     (base 16)		SATO CORPORATION
-				1-207,ONARI-CHO,
-				SAITAMA-SHI  SAITAMA  330-0852
-				JP
-
-00-19-9C   (hex)		CTRING
-00199C     (base 16)		CTRING
-				#514, World Meridian Venture Center II
-				Keumcheon-gu  Seoul  153-803
-				KR
-
-00-19-46   (hex)		Cianet Industria e Comercio S/A
-001946     (base 16)		Cianet Industria e Comercio S/A
-				rod SC401, km01 Tecnopolis/Alfama 4o. Andar
-				Florianopolis  Santa Catarina  88030-902
-				BR
-
-00-19-49   (hex)		TENTEL  COMTECH CO., LTD.
-001949     (base 16)		TENTEL  COMTECH CO., LTD.
-				3/F., NO. 42, LANE 80, SEC. 3, NAN-KANG RD.,
-				TAIPEI    115
-				TW
-
-00-19-44   (hex)		Fossil Partners, L.P.
-001944     (base 16)		Fossil Partners, L.P.
-				2280 N. Greenville Ave.
-				Richardson  TX  75082
-				US
-
-00-19-71   (hex)		Guangzhou Unicomp Technology Co.,Ltd
-001971     (base 16)		Guangzhou Unicomp Technology Co.,Ltd
-				7/F,North Tower,Jinshan Building.No.248
-				Guangzhou  Guangdong  510630
-				CN
-
-00-19-64   (hex)		Doorking Inc.
-001964     (base 16)		Doorking Inc.
-				120 Glasgow St.
-				Inglewood  CA.  90301
-				US
-
-00-19-76   (hex)		Xipher Technologies, LLC
-001976     (base 16)		Xipher Technologies, LLC
-				156 River Road
-				Willington  CT  06279
-				US
-
-00-19-6C   (hex)		ETROVISION TECHNOLOGY
-00196C     (base 16)		ETROVISION TECHNOLOGY
-				2F, 19-5 San Chung Rd.,
-				TAIPEI    115
-				TW
-
-00-19-67   (hex)		TELDAT Sp.J.
-001967     (base 16)		TELDAT Sp.J.
-				Kijowska 44
-				Bydgoszcz  woj. kujawsko-pomorskie  85-703
-				PL
-
-00-19-52   (hex)		ACOGITO Co., Ltd
-001952     (base 16)		ACOGITO Co., Ltd
-				#501 Shinyoung Palace Tower, 246-2, Seohyun
-				Sungnam  Kyunggi  463-824
-				KR
-
-00-19-8B   (hex)		Novera Optics Korea, Inc.
-00198B     (base 16)		Novera Optics Korea, Inc.
-				463-1 Jeon Min Dong Yuseong Gu
-				Deajeon    305-811
-				KR
-
-00-19-61   (hex)		Blaupunkt  Embedded Systems GmbH
-001961     (base 16)		Blaupunkt  Embedded Systems GmbH
-				Bahnhofsstrasse 16
-				Schlitz    36110
-				DE
-
-00-19-42   (hex)		ON SOFTWARE INTERNATIONAL LIMITED
-001942     (base 16)		ON SOFTWARE INTERNATIONAL LIMITED
-				9F, NO. 17, SEC. 1, CHENG-TE RD.
-				TAIPEI    103
-				TW
-
-00-19-3F   (hex)		RDI technology(Shenzhen) Co.,LTD
-00193F     (base 16)		RDI technology(Shenzhen) Co.,LTD
-				Building C1&C2,  Xin Tang Industrial Zone,East BaiShiXia Village, Fuyong Town, Baoan District
-				SHENZHEN  GUANGDONG province  518103
-				CN
-
-00-19-41   (hex)		Pitney Bowes, Inc
-001941     (base 16)		Pitney Bowes, Inc
-				35 Waterview Drive
-				Shelton  CT  06484
-				US
-
-00-18-FD   (hex)		Optimal Technologies International Inc.
-0018FD     (base 16)		Optimal Technologies International Inc.
-				12 Spanish Main Drive
-				Freeport  GBI  
-				BS
-
-00-18-F0   (hex)		JOYTOTO Co., Ltd.
-0018F0     (base 16)		JOYTOTO Co., Ltd.
-				3F Sungwoo Bldg. 717-3, Sooseo-Dong
-				Seoul    135-220
-				KR
-
-00-18-E9   (hex)		Numata Corporation
-0018E9     (base 16)		Numata Corporation
-				8-2-39 nanko-higashi
-				Osaka-shi  Osaka-fu  559-0031
-				JP
-
-00-19-08   (hex)		Duaxes Corporation
-001908     (base 16)		Duaxes Corporation
-				2-5, Kasumigaseki 3-chome, Chiyoda-ku.
-				Tokyo  Foreign  100-6014
-				JP
-
-00-19-0C   (hex)		Encore Electronics, Inc.
-00190C     (base 16)		Encore Electronics, Inc.
-				16483 Old Valley Blvd.
-				La Puente  CA  91744
-				US
-
-00-19-19   (hex)		ASTEL Inc.
-001919     (base 16)		ASTEL Inc.
-				59-7 Jang-dong Yusung-Gu
-				Daejeon  Chungnam  305-343
-				KR
-
-00-19-2D   (hex)		Nokia Corporation
-00192D     (base 16)		Nokia Corporation
-				Rensingstraße 15
-				Bochum  NRW  44807
-				DE
-
-00-18-EF   (hex)		Escape Communications, Inc.
-0018EF     (base 16)		Escape Communications, Inc.
-				2615 Pacific Coast Hwy
-				Hermosa Beach  CA  90254
-				US
-
-00-18-E6   (hex)		Computer Hardware Design SIA
-0018E6     (base 16)		Computer Hardware Design SIA
-				Dzelzavas 120i
-				Riga    LV-1021
-				LV
-
-00-19-30   (hex)		Cisco Systems, Inc
-001930     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-27   (hex)		ImCoSys Ltd
-001927     (base 16)		ImCoSys Ltd
-				Bundesstrasse 5
-				Zug  ZG  6300
-				CH
-
-00-18-F7   (hex)		Kameleon Technologies
-0018F7     (base 16)		Kameleon Technologies
-				217, rue St Honoré
-				Paris    75001
-				FR
-
-00-18-88   (hex)		GOTIVE a.s.
-001888     (base 16)		GOTIVE a.s.
-				Zámocká 34
-				Bratislava    81101
-				SK
-
-00-18-8A   (hex)		Infinova LLC
-00188A     (base 16)		Infinova LLC
-				51 Stouts Lane, Unit 1 & 2
-				Monmouth Junction  New Jersey  08852
-				US
-
-00-18-86   (hex)		EL-TECH, INC.
-001886     (base 16)		EL-TECH, INC.
-				A-711, WOOLIM LION'S VALLEY, 371-28
-				SEOUL    150-834
-				KR
-
-00-18-87   (hex)		Metasystem SpA
-001887     (base 16)		Metasystem SpA
-				Via Oberdan 16
-				Reggio Emilia  RE  42100
-				IT
-
-00-18-BE   (hex)		ANSA Corporation
-0018BE     (base 16)		ANSA Corporation
-				17F, No. 738, Chung Cheng Road
-				Chung Ho City  Taipei County  235
-				TW
-
-00-18-BA   (hex)		Cisco Systems, Inc
-0018BA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-18-B4   (hex)		Dawon Media Inc.
-0018B4     (base 16)		Dawon Media Inc.
-				Rm503. woolim e-biz center 170-5, Guro3dong Gurogu,
-				Seoul    152-769
-				KR
-
-00-18-B6   (hex)		S3C, Inc.
-0018B6     (base 16)		S3C, Inc.
-				1010 Stewart Dr.
-				Sunnyvale  California  94085
-				US
-
-00-18-A3   (hex)		ZIPPY TECHNOLOGY CORP.
-0018A3     (base 16)		ZIPPY TECHNOLOGY CORP.
-				10F, No. 50, Mincyuan Rd., Sindian City
-				Taipei    231
-				TW
-
-00-18-A0   (hex)		Cierma Ascenseurs
-0018A0     (base 16)		Cierma Ascenseurs
-				17 avenue guiglionda de saint agathe
-				Nice  PACA  06300
-				FR
-
-00-18-93   (hex)		SHENZHEN PHOTON BROADBAND TECHNOLOGY CO.,LTD
-001893     (base 16)		SHENZHEN PHOTON BROADBAND TECHNOLOGY CO.,LTD
-				2/F Hivac BLD,2th Langshan Rd,North Hi-Tech Industrial
-				Shenzhen  Guangdong  518057
-				CN
-
-00-18-B1   (hex)		IBM Corp
-0018B1     (base 16)		IBM Corp
-				2051 Mission College Blvd
-				Santa Clara  CA  95054
-				US
-
-00-18-7B   (hex)		4NSYS Co. Ltd.
-00187B     (base 16)		4NSYS Co. Ltd.
-				3F, Hana Bldg
-				Guro-Gu  Seoul  152-100
-				KR
-
-00-18-7F   (hex)		ZODIANET
-00187F     (base 16)		ZODIANET
-				23, rue des Fraisettes
-				PALAISEAU  ESSONNE  91120
-				FR
-
-00-18-7E   (hex)		RGB Spectrum
-00187E     (base 16)		RGB Spectrum
-				950 Marina Village Pkwy
-				Alameda  CA  94501
-				US
-
-00-18-9D   (hex)		Navcast Inc.
-00189D     (base 16)		Navcast Inc.
-				Suite 612, 6711 Mississauga Road
-				Mississauga  ON  m2r 1a3
-				CA
-
-00-18-D6   (hex)		Swirlnet A/S
-0018D6     (base 16)		Swirlnet A/S
-				Diplomvej 381
-				Lyngby    DK-2800
-				DK
-
-00-18-CD   (hex)		Erae Electronics Industry Co., Ltd
-0018CD     (base 16)		Erae Electronics Industry Co., Ltd
-				#371-51, Gasan-dong
-				Geumchen-gu  Seoul  153-803
-				KR
-
-00-18-DB   (hex)		EPL Technology Ltd
-0018DB     (base 16)		EPL Technology Ltd
-				LongDong,Longgang District
-				ShenZhen  GuangDong  518116
-				CN
-
-00-18-C8   (hex)		ISONAS Inc.
-0018C8     (base 16)		ISONAS Inc.
-				6325 Gunpark Drive
-				Boulder  CO  80301
-				US
-
-00-18-49   (hex)		nVent, Schroff GmbH
-001849     (base 16)		nVent, Schroff GmbH
-				Langenalber Strasse 96-100
-				Straubenhardt    75334
-				DE
-
-00-18-46   (hex)		Crypto S.A.
-001846     (base 16)		Crypto S.A.
-				V. Ipirou 45
-				Marousi  Athens  15125
-				GR
-
-00-18-45   (hex)		Pulsar-Telecom LLC.
-001845     (base 16)		Pulsar-Telecom LLC.
-				Zaharova, 18a
-				Penza    440044
-				RU
-
-00-18-1E   (hex)		GDX Technologies Ltd.
-00181E     (base 16)		GDX Technologies Ltd.
-				61-63 Back Sneddon Street
-				Paisley  Renfrewshire  PA3 2DD
-				GB
-
-00-18-1C   (hex)		Exterity Limited
-00181C     (base 16)		Exterity Limited
-				Ridge Way, Hillend Industrial Estate
-				Dunfermline  Fife  KY11 9JD
-				GB
-
-00-18-63   (hex)		Veritech Electronics Limited
-001863     (base 16)		Veritech Electronics Limited
-				8F, 67, Sec. 1, Zhongshan Road, Xinzhuang,
-				Taipei    242
-				TW
-
-00-18-5A   (hex)		uControl, Inc.
-00185A     (base 16)		uControl, Inc.
-				5914 W. Courtyard Drive
-				Austin  TX  78730
-				US
-
-00-18-52   (hex)		StorLink Semiconductors, Inc.
-001852     (base 16)		StorLink Semiconductors, Inc.
-				1804 N. Shoreline Boulevard
-				Mountain View  CA  94043
-				US
-
-00-18-50   (hex)		Secfone Kft
-001850     (base 16)		Secfone Kft
-				51 Bercsenyi str
-				Jaszbereny    5100
-				HU
-
-00-18-58   (hex)		TagMaster AB
-001858     (base 16)		TagMaster AB
-				Kronborgsgréind 1
-				Kista  Stockholm  S-16487
-				SE
-
-00-18-24   (hex)		Kimaldi Electronics, S.L.
-001824     (base 16)		Kimaldi Electronics, S.L.
-				Ctra. de Rubí, 292 B
-				Terrassa  Barcelona  08228
-				ES
-
-00-18-3D   (hex)		Vertex Link Corporation
-00183D     (base 16)		Vertex Link Corporation
-				Meitetsu Fudosan Takebashi Bldg 6F
-				Chiyoda-ku  Tokyo  101-0054
-				JP
-
-00-18-25   (hex)		Private
-001825     (base 16)		Private
-
-00-18-79   (hex)		dSys
-001879     (base 16)		dSys
-				Soeflinger Str. 100
-				Ulm  BW  89077
-				DE
-
-00-18-03   (hex)		ArcSoft Shanghai Co. LTD
-001803     (base 16)		ArcSoft Shanghai Co. LTD
-				20th Floor, Suite (EAST) 2008, China Merchants Plaza, 333
-				Shanghai    200041
-				CN
-
-00-17-EF   (hex)		IBM Corp
-0017EF     (base 16)		IBM Corp
-				2051 Mission College Blvd 
-				Santa Clara  CA  95054
-				US
-
-00-17-F5   (hex)		LIG NEOPTEK
-0017F5     (base 16)		LIG NEOPTEK
-				926 Gosaek-dong
-				Suwon-si  Gyeonggi-do  441-813
-				KR
-
-00-17-CD   (hex)		CEC Wireless R&D Ltd.
-0017CD     (base 16)		CEC Wireless R&D Ltd.
-				West M5 Building,No.1 East Road
-				Beijing    100016
-				CN
-
-00-17-D0   (hex)		Opticom Communications, LLC
-0017D0     (base 16)		Opticom Communications, LLC
-				1050 Connecticut Avenue, NW
-				Washington  DC  20036
-				US
-
-00-17-C6   (hex)		Cross Match Technologies Inc
-0017C6     (base 16)		Cross Match Technologies Inc
-				400, boul. Jean-Lesage
-				Québec    G1K 8W1
-				CA
-
-00-17-FE   (hex)		TALOS SYSTEM INC.
-0017FE     (base 16)		TALOS SYSTEM INC.
-				6191 CORNERSTONE CT. STE #109
-				SAN DIEGO  CA  92121
-				US
-
-00-17-F8   (hex)		Motech Industries Inc.
-0017F8     (base 16)		Motech Industries Inc.
-				6F, No. 248, Sec. 3, Pei-Shen Rd.,
-				Taipei Hsien    222
-				TW
-
-00-17-C3   (hex)		KTF Technologies Inc.
-0017C3     (base 16)		KTF Technologies Inc.
-				4th Fl., Central Tower, 265-3, Seohyun-Dong
-				Sungnam-City  Kyunggi-Do  463-769
-				KR
-
-00-17-B7   (hex)		Tonze Technology Co.
-0017B7     (base 16)		Tonze Technology Co.
-				5F-10, No.6, Lane 180,
-				Taipei    11490
-				TW
-
-00-17-AB   (hex)		Nintendo Co., Ltd.
-0017AB     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-18-07   (hex)		Fanstel Corp.
-001807     (base 16)		Fanstel Corp.
-				7466 E. Monte Cristo Ave.
-				Scottsdale  Arizona  85260
-				US
-
-00-18-08   (hex)		SightLogix, Inc.
-001808     (base 16)		SightLogix, Inc.
-				745 Alexander Road
-				Princeton  NJ  08540
-				US
-
-00-17-CE   (hex)		Screen Service Spa
-0017CE     (base 16)		Screen Service Spa
-				Via G.Di Vittorio 17
-				  Brescia  25125
-				IT
-
-00-17-DB   (hex)		CANKO TECHNOLOGIES INC.
-0017DB     (base 16)		CANKO TECHNOLOGIES INC.
-				5 FL. DONG SUNG BLDG. 17-8
-				SEOUL    150-874
-				KR
-
-00-17-D6   (hex)		Bluechips Microhouse Co.,Ltd.
-0017D6     (base 16)		Bluechips Microhouse Co.,Ltd.
-				212/2 M.10 Tambol Umong
-				Lamphun    51150
-				TH
-
-00-17-87   (hex)		Brother, Brother & Sons ApS
-001787     (base 16)		Brother, Brother & Sons ApS
-				Ved Amagerbanen 9
-				Copenhagen S    DK-2300
-				DK
-
-00-17-89   (hex)		Zenitron Corporation
-001789     (base 16)		Zenitron Corporation
-				No. 8, Lane 250, Sinhu 2nd Rd., Neihu District,
-				Taipei    11494
-				TW
-
-00-17-60   (hex)		Naito Densei Machida MFG.CO.,LTD
-001760     (base 16)		Naito Densei Machida MFG.CO.,LTD
-				2-17-28 Fuchinobe
-				Sagamihara  Kanagawa  229-0006
-				JP
-
-00-17-61   (hex)		Private
-001761     (base 16)		Private
-
-00-17-68   (hex)		Zinwave Ltd
-001768     (base 16)		Zinwave Ltd
-				Zinwave Ltd, Harston Mill
-				Cambridge  Cambridgeshire  CB2 5GG
-				GB
-
-00-17-69   (hex)		Cymphonix Corp
-001769     (base 16)		Cymphonix Corp
-				8871 S. Sandy Parkway, Suite 150
-				Sandy  UT  84070
-				US
-
-00-17-62   (hex)		Solar Technology, Inc.
-001762     (base 16)		Solar Technology, Inc.
-				7620 Cetronia Road
-				Allentown  PA  18106
-				US
-
-00-17-8F   (hex)		NINGBO YIDONG ELECTRONIC CO.,LTD.
-00178F     (base 16)		NINGBO YIDONG ELECTRONIC CO.,LTD.
-				No.65 Siming East Rd
-				Yuyao City, Zhejiang Province  Zhejiang Province China  P.C 315400
-				CN
-
-00-17-94   (hex)		Cisco Systems, Inc
-001794     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-17-8A   (hex)		DARTS TECHNOLOGIES CORP.
-00178A     (base 16)		DARTS TECHNOLOGIES CORP.
-				2F,No.119,Chien Kang Rd.,
-				Chung-Ho  Taipei Hsien  235
-				TW
-
-00-17-34   (hex)		ADC Telecommunications
-001734     (base 16)		ADC Telecommunications
-				541 E Trimble Road    
-				San Jose  California  95134-1224
-				US
-
-00-17-2E   (hex)		FXC Inc.
-00172E     (base 16)		FXC Inc.
-				10-16 6F, Nihonbashi Tomizawa-Chou, Chuo-ku
-				Tokyo    103-0006
-				JP
-
-00-17-2B   (hex)		Global Technologies Inc.
-00172B     (base 16)		Global Technologies Inc.
-				4/F Kicox Bldg.,188-5,Guro-Dong,Guro-gu,
-				  Seoul  152-848
-				KR
-
-00-17-72   (hex)		ASTRO Strobel Kommunikationssysteme GmbH
-001772     (base 16)		ASTRO Strobel Kommunikationssysteme GmbH
-				Olefant 1-3
-				Bergisch Gladbach  NRW  51427
-				DE
-
-00-17-3E   (hex)		LeucotronEquipamentos Ltda.
-00173E     (base 16)		LeucotronEquipamentos Ltda.
-				Rua Jorge Dionisio Barbosa, 312
-				Santa Rita do Sapucai  Minas Gerais  37.540-000
-				BR
-
-00-17-98   (hex)		Azonic Technology Co., LTD
-001798     (base 16)		Azonic Technology Co., LTD
-				15F-3, No. 163, Sec., 1 Keelung Rd.
-				Taipei    110
-				TW
-
-00-17-47   (hex)		Trimble
-001747     (base 16)		Trimble
-				345 SW Avery Ave
-				Corvallis  OR  97333
-				US
-
-00-17-7A   (hex)		ASSA ABLOY AB
-00177A     (base 16)		ASSA ABLOY AB
-				Theres Svenssons gata 15
-				Goteborg    41755
-				SE
-
-00-16-F4   (hex)		Eidicom Co., Ltd.
-0016F4     (base 16)		Eidicom Co., Ltd.
-				Polychem B/D 4th Floor, 900-1
-				Anyang-si  Kyeonggi-do  431-060
-				KR
-
-00-16-E7   (hex)		Dynamix Promotions Limited
-0016E7     (base 16)		Dynamix Promotions Limited
-				788-790, Finchley Road
-				London    NW11 7TJ
-				GB
-
-00-16-E5   (hex)		FORDLEY DEVELOPMENT LIMITED
-0016E5     (base 16)		FORDLEY DEVELOPMENT LIMITED
-				ROOM 706, 7TH FLOOR, YU SUNG BOON BUILDING, 107-111 DES VOEUX ROAD, CENTRAL,
-				    
-				HK
-
-00-16-E6   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-0016E6     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan
-				    324
-				TW
-
-00-17-20   (hex)		Image Sensing Systems, Inc.
-001720     (base 16)		Image Sensing Systems, Inc.
-				1600 University Ave. W.
-				St. Paul  MN  55104
-				US
-
-00-17-1A   (hex)		Winegard Company
-00171A     (base 16)		Winegard Company
-				3000 Kirkwood Street
-				Burlington  IA  52601
-				US
-
-00-16-C8   (hex)		Cisco Systems, Inc
-0016C8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-16-C4   (hex)		SiRF Technology, Inc.
-0016C4     (base 16)		SiRF Technology, Inc.
-				217 Devcon Dr.
-				San Jose  CA  95112
-				US
-
-00-16-F3   (hex)		CAST Information Co., Ltd
-0016F3     (base 16)		CAST Information Co., Ltd
-				5F MSA Bldg. 891-43 Dacchi-Dong,
-				SEOUL    135-280
-				KR
-
-00-16-F5   (hex)		Dalian Golden Hualu Digital Technology Co.,Ltd
-0016F5     (base 16)		Dalian Golden Hualu Digital Technology Co.,Ltd
-				No.1 Hua Road,Qixianling
-				Dalian  LiaoNing  116023
-				CN
-
-00-16-F1   (hex)		OmniSense, LLC
-0016F1     (base 16)		OmniSense, LLC
-				72 sams point road
-				Ladys Island  SC  29907
-				US
-
-00-16-DD   (hex)		Gigabeam Corporation
-0016DD     (base 16)		Gigabeam Corporation
-				407 Springpark Place
-				Herndon  VA  20170
-				US
-
-00-17-1C   (hex)		NT MicroSystems, Inc.
-00171C     (base 16)		NT MicroSystems, Inc.
-				1-5-3-2F Tamagawadai
-				Setagaya  Tokyo  158-0096
-				JP
-
-00-17-16   (hex)		Qno Technology Inc.
-001716     (base 16)		Qno Technology Inc.
-				6F-2, No.25, Puding Road
-				Hsinchu  Taiwan  300
-				TW
-
-00-17-26   (hex)		m2c Electronic Technology Ltd.
-001726     (base 16)		m2c Electronic Technology Ltd.
-				2403, 24/F, Nanyang Plaza
-				Kwuntong  Hong Kong  999 999
-				CN
-
-00-17-21   (hex)		FITRE S.p.A.
-001721     (base 16)		FITRE S.p.A.
-				Via Valsolda, 15
-				MILANO  MI  20142
-				IT
-
-00-16-F9   (hex)		CETRTA POT, d.o.o., Kranj
-0016F9     (base 16)		CETRTA POT, d.o.o., Kranj
-				Planina 3
-				Kranj  SI  4000
-				SI
-
-00-17-0A   (hex)		INEW DIGITAL COMPANY
-00170A     (base 16)		INEW DIGITAL COMPANY
-				Supply Bureau 3th floor KT&G 203-1,
-				Daejeon    306-712
-				KR
-
-00-16-BD   (hex)		ATI Industrial Automation
-0016BD     (base 16)		ATI Industrial Automation
-				1031 Goodworth Drive
-				Apex  North Carolina  27539-3869
-				US
-
-00-16-C0   (hex)		Semtech Corporation
-0016C0     (base 16)		Semtech Corporation
-				200 Flynn Rd
-				Camarillo  California  93012
-				US
-
-00-16-C2   (hex)		Avtec Systems Inc
-0016C2     (base 16)		Avtec Systems Inc
-				14432 Albemarle Point Place
-				Chantilly  Virginia  20151
-				US
-
-00-16-BA   (hex)		WEATHERNEWS INC.
-0016BA     (base 16)		WEATHERNEWS INC.
-				NAKASE 1-3 MTG
-				CHIBA    262-0032
-				US
-
-00-16-B2   (hex)		DriveCam Inc
-0016B2     (base 16)		DriveCam Inc
-				3954 Murphy Canyon Road
-				San Diego  CA  92123
-				US
-
-00-16-B3   (hex)		Photonicbridges (China) Co., Ltd.
-0016B3     (base 16)		Photonicbridges (China) Co., Ltd.
-				No. 900, Yishan road,
-				Shanghai    200233
-				US
-
-00-16-AD   (hex)		BT-Links Company Limited
-0016AD     (base 16)		BT-Links Company Limited
-				Rm 802, Nan Fung Centre, 264-298 Castle Peak Rd
-				    
-				HK
-
-00-16-6E   (hex)		Arbitron Inc.
-00166E     (base 16)		Arbitron Inc.
-				9705 Patuxent Woods Drive
-				Columbia  MD  21046
-				US
-
-00-16-AF   (hex)		Shenzhen Union Networks Equipment Co.,Ltd.
-0016AF     (base 16)		Shenzhen Union Networks Equipment Co.,Ltd.
-				Yihai Square east building 2307, Chuangye road, Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-00-16-9E   (hex)		TV One Ltd
-00169E     (base 16)		TV One Ltd
-				Unit V Continental Approach
-				Margate  Kent  CT9 4JG
-				GB
-
-00-16-6A   (hex)		TPS
-00166A     (base 16)		TPS
-				145 quai de Stalingrad
-				Issy Les Moulineaux  Ile de France  92137
-				FR
-
-00-16-63   (hex)		KBT Mobile
-001663     (base 16)		KBT Mobile
-				4F, Polaris I, 15-3, Jeongja-dong, Bundang-gu
-				Seongnam-si,  Gyeonggi-do  463-811
-				KR
-
-00-16-9F   (hex)		Vimtron Electronics Co., Ltd.
-00169F     (base 16)		Vimtron Electronics Co., Ltd.
-				7F., No.9, Alley 2, Lane 35
-				Neihu District  Taipei City  11492
-				TW
-
-00-16-9A   (hex)		Quadrics Ltd
-00169A     (base 16)		Quadrics Ltd
-				1 Bridewell Street
-				Bristol    BS1 2AA
-				GB
-
-00-16-92   (hex)		Scientific-Atlanta, Inc.
-001692     (base 16)		Scientific-Atlanta, Inc.
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-00-16-91   (hex)		Moser-Baer AG
-001691     (base 16)		Moser-Baer AG
-				Spitalstrasse 7
-				Sumiswald  BE  3454
-				CH
-
-00-16-88   (hex)		ServerEngines LLC
-001688     (base 16)		ServerEngines LLC
-				209 N. Fair Oaks Avenue
-				Sunnyvale  CA  94085
-				US
-
-00-16-8B   (hex)		Paralan Corporation
-00168B     (base 16)		Paralan Corporation
-				455 Ruffner St.
-				San Diego  CA  92111
-				US
-
-00-16-0A   (hex)		SWEEX Europe BV
-00160A     (base 16)		SWEEX Europe BV
-				Ampereweg 3
-				Delft  Zuid-Holland  2627 BG
-				NL
-
-00-16-02   (hex)		CEYON TECHNOLOGY CO.,LTD.
-001602     (base 16)		CEYON TECHNOLOGY CO.,LTD.
-				13F Samsung Insurance B/D. #942-9
-				Suwon-City  Gyeonggi-Do  442-832
-				KR
-
-00-16-00   (hex)		CelleBrite Mobile Synchronization
-001600     (base 16)		CelleBrite Mobile Synchronization
-				25 Basel St
-				Petach Tikva    49170
-				IL
-
-00-15-F4   (hex)		Eventide
-0015F4     (base 16)		Eventide
-				1 Alsan Way
-				Little Ferry  NJ  07643
-				US
-
-00-16-29   (hex)		Nivus GmbH
-001629     (base 16)		Nivus GmbH
-				Im Täle 2
-				Eppingen  Baden-Württemberg  75031
-				DE
-
-00-16-21   (hex)		Colorado Vnet
-001621     (base 16)		Colorado Vnet
-				255 E. 6th St.
-				Loveland  CO  80537
-				US
-
-00-16-1A   (hex)		Dametric AB
-00161A     (base 16)		Dametric AB
-				Box 120
-				Skarholmen  Stockholm  SE-12723
-				SE
-
-00-16-15   (hex)		Nittan Company, Limited
-001615     (base 16)		Nittan Company, Limited
-				11-6, 1-chome, Hatagaya
-				Shibuya-ku  Tokyo  151-8535
-				JP
-
-00-16-16   (hex)		BROWAN COMMUNICATION INC.
-001616     (base 16)		BROWAN COMMUNICATION INC.
-				No.1 Jen-Ai Road, HsinChu Industrial Park,
-				HuKou Hsiang  HsinChu Hsien  303
-				TW
-
-00-16-17   (hex)		MSI
-001617     (base 16)		MSI
-				No.69, Li-De St, Jung-Ho City
-				Taipei Hsien    235
-				TW
-
-00-16-2E   (hex)		Space Shuttle Hi-Tech Co., Ltd.
-00162E     (base 16)		Space Shuttle Hi-Tech Co., Ltd.
-				No. 226, Wu-Ho St., Wu-Lung Village,
-				Hsinchu Hsien    307
-				TW
-
-00-16-2A   (hex)		Antik computers & communications s.r.o.
-00162A     (base 16)		Antik computers & communications s.r.o.
-				Razusova 2
-				Kosice  SK  SK-04001
-				SK
-
-00-16-56   (hex)		Nintendo Co., Ltd.
-001656     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-16-51   (hex)		Exeo Systems
-001651     (base 16)		Exeo Systems
-				1650, rue Michelin, suite 201
-				Laval  Québec  H7L 4R3
-				CA
-
-00-16-10   (hex)		Carina Technology
-001610     (base 16)		Carina Technology
-				690A Discovery Drive
-				Huntsville  AL  35806
-				US
-
-00-16-06   (hex)		Ideal Industries
-001606     (base 16)		Ideal Industries
-				15070 Ave. of Science #200
-				San Diego  CA  92128
-				US
-
-00-16-07   (hex)		Curves International Inc.
-001607     (base 16)		Curves International Inc.
-				100 Ritchie Road
-				Waco  Texas  76712
-				US
-
-00-16-54   (hex)		Flex-P Industries Sdn. Bhd.
-001654     (base 16)		Flex-P Industries Sdn. Bhd.
-				No.128-12-2, Menara UMNO,
-				Georgetown  Penang  10400
-				US
-
-00-16-31   (hex)		Xteam
-001631     (base 16)		Xteam
-				room 801, No.102 international Science & Techology Park
-				  Beijing  8610
-				CN
-
-00-16-4B   (hex)		Quorion Data Systems GmbH
-00164B     (base 16)		Quorion Data Systems GmbH
-				An der Klinge 6
-				Erfurt  Thuringia  99095
-				DE
-
-00-15-94   (hex)		BIXOLON CO.,LTD
-001594     (base 16)		BIXOLON CO.,LTD
-				502-508,Digital Empire Bldg.
-				Yeongtong-Gu,Suwon  Gyeonggi-Do  443-813
-				KR
-
-00-15-90   (hex)		Hectronic GmbH
-001590     (base 16)		Hectronic GmbH
-				Allmendstraße 15
-				Bonndorf  Baden-Württemberg  79848
-				DE
-
-00-15-8C   (hex)		Liab ApS
-00158C     (base 16)		Liab ApS
-				Oestre Alle 6
-				Stoevring    DK-9530
-				DK
-
-00-15-8F   (hex)		NTT Advanced Technology Corporation
-00158F     (base 16)		NTT Advanced Technology Corporation
-				Shinjuku Mitsui Bldg. 2-1-1, Nishi-shinjuku,
-				Shinjuku-ku  Tokyo  163-0431
-				JP
-
-00-15-ED   (hex)		Fulcrum Microsystems, Inc.
-0015ED     (base 16)		Fulcrum Microsystems, Inc.
-				26630 Agoura Road
-				Calabasas  CA  91302
-				US
-
-00-15-F0   (hex)		EGO BV
-0015F0     (base 16)		EGO BV
-				Parade 15
-				's-Hertogenbosch  Noord-Brabant  5211KL
-				NL
-
-00-15-EE   (hex)		Omnex Control Systems
-0015EE     (base 16)		Omnex Control Systems
-				#74 - 1833 Coast Meridian Rd.
-				Port Coquitlam  BC  V3C 6G5
-				CA
-
-00-15-C8   (hex)		FlexiPanel Ltd
-0015C8     (base 16)		FlexiPanel Ltd
-				7 bis rue Lalo
-				  Paris  75016
-				FR
-
-00-15-C0   (hex)		DIGITAL TELEMEDIA CO.,LTD.
-0015C0     (base 16)		DIGITAL TELEMEDIA CO.,LTD.
-				17TH FLOOR, CHINA YUSE BUILDING,
-				SHENZHEN  GUANGDONG  518040
-				CN
-
-00-15-C2   (hex)		3M Germany
-0015C2     (base 16)		3M Germany
-				Carl Schurz Str. 1
-				Neuss  NRW  41453
-				US
-
-00-15-88   (hex)		Salutica Allied Solutions Sdn Bhd
-001588     (base 16)		Salutica Allied Solutions Sdn Bhd
-				3 Jalan Zarib 6
-				Lahat, Ipoh  Perak  31500
-				MY
-
-00-15-83   (hex)		IVT corporation
-001583     (base 16)		IVT corporation
-				Shangdi Xinxi road, Haidian District
-				Beijing    100085
-				US
-
-00-15-85   (hex)		Aonvision Technolopy Corp.
-001585     (base 16)		Aonvision Technolopy Corp.
-				2F, No. 58, Park 2nd Ave. Science-Based Industrial Park,
-				  Hsinchu  300
-				TW
-
-00-15-A5   (hex)		DCI Co., Ltd.
-0015A5     (base 16)		DCI Co., Ltd.
-				4th Fl. Susung B/D, 893-4
-				Daejeon    305-330
-				KR
-
-00-15-B2   (hex)		Advanced Industrial Computer, Inc.
-0015B2     (base 16)		Advanced Industrial Computer, Inc.
-				17970 E. Ajax Circle
-				City of Industry  CA  91748
-				US
-
-00-15-DA   (hex)		IRITEL A.D.
-0015DA     (base 16)		IRITEL A.D.
-				Batajnicki put 23
-				Beograd  Serbia  11080
-				YU
-
-00-15-4A   (hex)		WANSHIH ELECTRONIC CO., LTD
-00154A     (base 16)		WANSHIH ELECTRONIC CO., LTD
-				3F 72, WU KONG 6th RD.,
-				TAIPEI HSIEN  TAIWAN  248
-				TW
-
-00-15-4C   (hex)		Saunders Electronics
-00154C     (base 16)		Saunders Electronics
-				192 Gannett Drive
-				South Portland  ME  04106
-				US
-
-00-15-4D   (hex)		Netronome Systems, Inc.
-00154D     (base 16)		Netronome Systems, Inc.
-				3159 Unionville Road
-				Cranberry Twp.  PA  16066
-				US
-
-00-15-49   (hex)		Dixtal Biomedica Ind. Com. Ltda
-001549     (base 16)		Dixtal Biomedica Ind. Com. Ltda
-				R. Eng. Francisco Pitta Brito, 703
-				São Paulo  SP  04753-080
-				BR
-
-00-15-3D   (hex)		ELIM PRODUCT CO.
-00153D     (base 16)		ELIM PRODUCT CO.
-				602-2 GAYANG TECHNO TOWN, GAYANG, 3-DONG
-				  SEOUL  157-793
-				KR
-
-00-15-44   (hex)		coM.s.a.t. AG
-001544     (base 16)		coM.s.a.t. AG
-				Besselstraße 3
-				Mannheim    D-68219
-				US
-
-00-15-39   (hex)		Technodrive srl
-001539     (base 16)		Technodrive srl
-				Via Leonardo da Vinci  162
-				Trezzano S/N  Milan  20090
-				IT
-
-00-15-31   (hex)		KOCOM
-001531     (base 16)		KOCOM
-				5F, KOCOM Bldg., 260-7
-				SEOUL    157-040
-				KR
-
-00-15-35   (hex)		OTE Spa
-001535     (base 16)		OTE Spa
-				via Barsanti 8
-				Florence  FI  50127
-				IT
-
-00-15-36   (hex)		Powertech co.,Ltd
-001536     (base 16)		Powertech co.,Ltd
-				#705, dongyoung Venturestel, 199-32
-				Anyang City  Kyoungki-do  430-010
-				US
-
-00-15-2B   (hex)		Cisco Systems, Inc
-00152B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-2C   (hex)		Cisco Systems, Inc
-00152C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-28   (hex)		Beacon Medical Products LLC d.b.a. BeaconMedaes
-001528     (base 16)		Beacon Medical Products LLC d.b.a. BeaconMedaes
-				14408 W 105TH ST
-				LENEXA  KS  66215
-				US
-
-00-15-27   (hex)		Balboa Instruments
-001527     (base 16)		Balboa Instruments
-				1382 Bell Ave
-				Tustin  CA  92780
-				US
-
-00-15-21   (hex)		Horoquartz
-001521     (base 16)		Horoquartz
-				BP 251
-				FONTENAY LE COMTE  VENDEE  85205
-				FR
-
-00-15-20   (hex)		Radiocrafts AS
-001520     (base 16)		Radiocrafts AS
-				Sandakerveien 64
-				  Oslo  0484
-				NO
-
-00-15-66   (hex)		A-First Technology Co., Ltd.
-001566     (base 16)		A-First Technology Co., Ltd.
-				5F, No. 111-2, Shin-Teh Rd.,
-				San-Chung City  Taipei Shien  241
-				TW
-
-00-15-6B   (hex)		Perfisans Networks Corp.
-00156B     (base 16)		Perfisans Networks Corp.
-				4118 14th Avenue
-				Markham  Ontario  L3R 0J3
-				CA
-
-00-15-47   (hex)		AiZen Solutions Inc.
-001547     (base 16)		AiZen Solutions Inc.
-				10F-1, No.29, Puding Rd.
-				Hsinchu  Hsinchu County  300
-				TW
-
-00-15-79   (hex)		Lunatone Industrielle Elektronik GmbH
-001579     (base 16)		Lunatone Industrielle Elektronik GmbH
-				Rennbahnweg 55
-				Wien    1220
-				AT
-
-00-14-D7   (hex)		Datastore Technology Corp
-0014D7     (base 16)		Datastore Technology Corp
-				9F, NO.10, SEC.1, Chung Hsing RD., Wu-Ku
-				Taipei Hsien,    248
-				TW
-
-00-14-DD   (hex)		Covergence Inc.
-0014DD     (base 16)		Covergence Inc.
-				One Clock Tower Place, Suite 200
-				Maynard  MA  01754
-				US
-
-00-14-D4   (hex)		K Technology Corporation
-0014D4     (base 16)		K Technology Corporation
-				325 Ganbara
-				Kami-gun  Miyagi-ken  981-4263
-				JP
-
-00-14-CF   (hex)		INVISIO Communications
-0014CF     (base 16)		INVISIO Communications
-				Stamholmen 157
-				Hvidovre    2650
-				DK
-
-00-14-BE   (hex)		Wink communication technology CO.LTD
-0014BE     (base 16)		Wink communication technology CO.LTD
-				Huijiang Ind Blding Dashi Town
-				Guang zhou  Guang dong  511430
-				CN
-
-00-15-11   (hex)		Data Center Systems
-001511     (base 16)		Data Center Systems
-				14802 Venture Drive
-				Dallas  TX  75234
-				US
-
-00-15-0E   (hex)		OPENBRAIN TECHNOLOGIES CO., LTD.
-00150E     (base 16)		OPENBRAIN TECHNOLOGIES CO., LTD.
-				#804,ANYANG K-CENTER,1591-9 , BURIM-DONG,DONGAN-GU,
-				ANYANG  KYUNGGI-DO  431-815
-				KR
-
-00-15-0D   (hex)		Hoana Medical, Inc.
-00150D     (base 16)		Hoana Medical, Inc.
-				828 Fort Street Mall
-				Honolulu  HI  96813
-				US
-
-00-15-1C   (hex)		LENECO
-00151C     (base 16)		LENECO
-				6th.,Dong Moon Good Morning Tower 1
-				Kyeong Ki-Do  GoYang-Si  411-817
-				KR
-
-00-15-19   (hex)		StoreAge Networking Technologies
-001519     (base 16)		StoreAge Networking Technologies
-				63 Bar-Yehuda st.
-				Nesher    36651
-				IL
-
-00-15-06   (hex)		Neo Photonics
-001506     (base 16)		Neo Photonics
-				910 E. California St.
-				Sunnyvale  CA  94085
-				US
-
-00-15-04   (hex)		GAME PLUS CO., LTD.
-001504     (base 16)		GAME PLUS CO., LTD.
-				164-57, Yeonghwa-dong, Jangan-gu
-				Suwon  Gyeonggi-do  440-818
-				KR
-
-00-15-05   (hex)		Actiontec Electronics, Inc
-001505     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-14-FE   (hex)		Artech Electronics
-0014FE     (base 16)		Artech Electronics
-				#301, Yangjae Bldg., 276-2
-				Seoul    137-895
-				KR
-
-00-14-DE   (hex)		Sage Instruments Inc.
-0014DE     (base 16)		Sage Instruments Inc.
-				240 Airport Blvd.
-				Freedom  CA  95019
-				US
-
-00-14-DF   (hex)		HI-P Tech Corporation
-0014DF     (base 16)		HI-P Tech Corporation
-				1-27-23 Higashitokorozawa
-				Tokorozawa  Saitama  359-0021
-				JP
-
-00-14-E6   (hex)		AIM Infrarotmodule GmbH
-0014E6     (base 16)		AIM Infrarotmodule GmbH
-				Soeflingerstraße 100
-				Ulm  BW  89077
-				DE
-
-00-14-F3   (hex)		ViXS Systems Inc
-0014F3     (base 16)		ViXS Systems Inc
-				2235 Sheppard Ave East
-				TORONTO  ONTARIO  M2J 5B5
-				CA
-
-00-14-7E   (hex)		InnerWireless
-00147E     (base 16)		InnerWireless
-				1155 Kas Drive, Suite 200
-				Richardson  TX  75081
-				US
-
-00-14-7D   (hex)		Aeon Digital International
-00147D     (base 16)		Aeon Digital International
-				31-6, The Bund Center
-				Shanghai  SH  200002
-				CN
-
-00-14-76   (hex)		MultiCom Industries Limited
-001476     (base 16)		MultiCom Industries Limited
-				Room 1206-7, Manhattan Center,
-				Kwai Chung, N.T.    
-				HK
-
-00-14-73   (hex)		Bookham Inc
-001473     (base 16)		Bookham Inc
-				10 Brewer Hunt Way
-				Kanata  ON  K2K 2B5
-				CA
-
-00-14-89   (hex)		B15402100 - JANDEI, S.L.
-001489     (base 16)		B15402100 - JANDEI, S.L.
-				POL. IND. POCOMACO, E-28
-				LA Coruña    15190
-				ES
-
-00-14-80   (hex)		Hitachi-LG Data Storage Korea, Inc
-001480     (base 16)		Hitachi-LG Data Storage Korea, Inc
-				19-1,Cheongho-ri
-				Pyungtaik  Kyunggi-Do  451-713
-				KR
-
-00-14-B6   (hex)		Enswer Technology Inc.
-0014B6     (base 16)		Enswer Technology Inc.
-				1F No.70 Sec.2 Chung Shun St.
-				Taipei    116
-				TW
-
-00-14-B2   (hex)		mCubelogics Corporation
-0014B2     (base 16)		mCubelogics Corporation
-				4F, Unibooks B/D, 514-1, Dogok-Dong, KangNam
-				Seoul    135-270
-				KR
-
-00-14-AE   (hex)		Wizlogics Co., Ltd.
-0014AE     (base 16)		Wizlogics Co., Ltd.
-				Rm#1321, Samchang Plaza, 173,
-				Seoul    121-745
-				KR
-
-00-14-A6   (hex)		Teranetics, Inc.
-0014A6     (base 16)		Teranetics, Inc.
-				3965 Freedom Circle
-				Santa Clara  CA  95054
-				US
-
-00-14-69   (hex)		Cisco Systems, Inc
-001469     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-14-BA   (hex)		Carvers SA de CV
-0014BA     (base 16)		Carvers SA de CV
-				Alvarez del Castillo 1550
-				Guadalajara  Jalisco  44620
-				MX
-
-00-14-8A   (hex)		Elin Ebg Traction Gmbh
-00148A     (base 16)		Elin Ebg Traction Gmbh
-				Cumberlandstrasse 32
-				Vienna    1140
-				AT
-
-00-14-91   (hex)		Daniels Electronics Ltd. dbo Codan Rado Communications
-001491     (base 16)		Daniels Electronics Ltd. dbo Codan Rado Communications
-				43 Erie St
-				Victoria  BC  V8V 1P8
-				CA
-
-00-14-6E   (hex)		H. Stoll GmbH & Co. KG
-00146E     (base 16)		H. Stoll GmbH & Co. KG
-				Stollweg
-				Reutlingen  Deutschland  72760
-				DE
-
-00-14-AA   (hex)		Ashly Audio, Inc.
-0014AA     (base 16)		Ashly Audio, Inc.
-				847 Holt Road
-				Webster  NY  14580
-				US
-
-00-14-09   (hex)		MAGNETI MARELLI   S.E. S.p.A.
-001409     (base 16)		MAGNETI MARELLI   S.E. S.p.A.
-				ZI Nord, Allee d'Argenson
-				CHATELLERAULT    86100
-				FR
-
-00-14-0B   (hex)		FIRST INTERNATIONAL COMPUTER, INC.
-00140B     (base 16)		FIRST INTERNATIONAL COMPUTER, INC.
-				FIC BUILDING, NO.300, YANG GUANG ST.,
-				  TAIPEI COUNTY  114
-				TW
-
-00-13-FD   (hex)		Nokia Danmark A/S
-0013FD     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-14-00   (hex)		MINERVA KOREA CO., LTD
-001400     (base 16)		MINERVA KOREA CO., LTD
-				#203, SH Sienne, Seohyeon-Dong
-				Seongnam-Si  Gyeonggi-Do  463-821
-				KR
-
-00-13-FC   (hex)		SiCortex, Inc
-0013FC     (base 16)		SiCortex, Inc
-				One Clocktower Place
-				Maynard  MA  01754
-				US
-
-00-13-F6   (hex)		Cintech
-0013F6     (base 16)		Cintech
-				21a route de la wantzenau
-				Hoenheim    67800
-				FR
-
-00-14-4F   (hex)		Oracle Corporation 
-00144F     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-00-14-56   (hex)		Edge Products
-001456     (base 16)		Edge Products
-				1080 South Depot Drive
-				Ogden  Utah  84404
-				US
-
-00-14-50   (hex)		Heim Systems GmbH
-001450     (base 16)		Heim Systems GmbH
-				Friedrich Ebert Strasse
-				Bergisch Gladbach  NRW  51429
-				DE
-
-00-14-52   (hex)		CALCULEX,INC.
-001452     (base 16)		CALCULEX,INC.
-				132 W. LAS CRUCES AVE.
-				LAS CRUCES  NEW MEXICO  88001
-				US
-
-00-14-42   (hex)		ATTO CORPORATION
-001442     (base 16)		ATTO CORPORATION
-				1-25-23 Hongo,
-				  Tokyo  113-8425
-				JP
-
-00-14-47   (hex)		BOAZ Inc.
-001447     (base 16)		BOAZ Inc.
-				282 Pukok-ri SongSan-myon Dangzin-gun Chungcheongnam-do, 343-834
-				Seoul  SeoCho-gu  137-070
-				KR
-
-00-14-3E   (hex)		AirLink Communications, Inc.
-00143E     (base 16)		AirLink Communications, Inc.
-				3159 Corporate Place
-				Hayward  CA  94545
-				US
-
-00-14-5D   (hex)		WJ Communications, Inc.
-00145D     (base 16)		WJ Communications, Inc.
-				401 River Oaks Parkway
-				San Jose  CA  95134
-				US
-
-00-14-3B   (hex)		Sensovation AG
-00143B     (base 16)		Sensovation AG
-				Markhallen -Str
-				Radolfzell  Baden-Württemberg  78315
-				DE
-
-00-14-2D   (hex)		Toradex AG
-00142D     (base 16)		Toradex AG
-				Altsagenstrasse 5
-				Horw  LU  6048
-				CH
-
-00-14-29   (hex)		V Center Technologies Co., Ltd.
-001429     (base 16)		V Center Technologies Co., Ltd.
-				7F-7, NO.35, Hsintai Rd.
-				Jubei City  Hsinchu  302
-				TW
-
-00-14-14   (hex)		Jumpnode Systems LLC.
-001414     (base 16)		Jumpnode Systems LLC.
-				800 Washington Ave N.
-				Minneapolis  MN  55041
-				US
-
-00-14-1E   (hex)		P.A. Semi, Inc.
-00141E     (base 16)		P.A. Semi, Inc.
-				3965 Freedom Circle, Fl 8
-				Santa Clara  CA  95054
-				US
-
-00-13-CB   (hex)		Zenitel Norway AS
-0013CB     (base 16)		Zenitel Norway AS
-				Sandaker v 24 c
-				  Oslo  0403
-				NO
-
-00-13-CF   (hex)		4Access Communications
-0013CF     (base 16)		4Access Communications
-				1 N. LaSalle St.
-				Chicago  IL  60602
-				US
-
-00-13-BE   (hex)		Virtual Conexions
-0013BE     (base 16)		Virtual Conexions
-				410 rue St-Nicolas, suite 600
-				Montréal  QUÉBEC  H2Y 2P5
-				CA
-
-00-13-B9   (hex)		BM SPA
-0013B9     (base 16)		BM SPA
-				VIA MILANO 54/56
-				Rozzano    20089
-				IT
-
-00-13-AB   (hex)		Telemotive AG
-0013AB     (base 16)		Telemotive AG
-				Breitwiesen
-				Muehlhausen  Baden Wuerttemberg  73347
-				DE
-
-00-13-C9   (hex)		Beyond Achieve Enterprises Ltd.
-0013C9     (base 16)		Beyond Achieve Enterprises Ltd.
-				XIN LIAN HI-TECH INDUSTRIAL AREA, HU-MEN
-				DONGGUAN  GUANG DONG  
-				CN
-
-00-13-C6   (hex)		OpenGear, Inc
-0013C6     (base 16)		OpenGear, Inc
-				7984 South Welby Park #101
-				Salt Lake City  UTAH  84088
-				US
-
-00-13-F3   (hex)		Giga-byte Communications Inc.
-0013F3     (base 16)		Giga-byte Communications Inc.
-				8F, No.43, Fu-Hsin Road. Hsin-Tien
-				Taipei Hsien    231
-				TW
-
-00-13-F4   (hex)		Psitek (Pty) Ltd
-0013F4     (base 16)		Psitek (Pty) Ltd
-				The Vineyards Office Estate
-				Tyger Valley  Cape Town  7530
-				ZA
-
-00-13-AC   (hex)		Sunmyung Electronics Co., LTD
-0013AC     (base 16)		Sunmyung Electronics Co., LTD
-				LARGO-PLAZA 8F, Janghang-Dong
-				Koyang  Kyungki  411-837
-				KR
-
-00-13-A8   (hex)		Tanisys Technology
-0013A8     (base 16)		Tanisys Technology
-				11001 Lakeline blvd
-				Austin  TX  78717
-				US
-
-00-13-DA   (hex)		Diskware Co., Ltd
-0013DA     (base 16)		Diskware Co., Ltd
-				1-4-12 Kiba
-				Koto-ku  Tokyo  135-0042
-				JP
-
-00-13-D8   (hex)		Princeton Instruments
-0013D8     (base 16)		Princeton Instruments
-				3660 Quakerbridge Road
-				Trenton  NJ  08619
-				US
-
-00-13-99   (hex)		STAC Corporation.
-001399     (base 16)		STAC Corporation.
-				2-16-37 fujimi
-				sayama-shi  saitama  350-1306
-				JP
-
-00-13-E9   (hex)		VeriWave, Inc.
-0013E9     (base 16)		VeriWave, Inc.
-				9600 SW Oak St.
-				Portland  OR  97223
-				US
-
-00-13-56   (hex)		FLIR Radiation Inc
-001356     (base 16)		FLIR Radiation Inc
-				100 Midland Rd
-				Oak Ridge  TN  37830
-				US
-
-00-13-5A   (hex)		Project T&E Limited
-00135A     (base 16)		Project T&E Limited
-				Room 3C, 2/F. Wah Shing Center,
-				Kwun Tong,  Kowloon,  852
-				HK
-
-00-13-61   (hex)		Biospace Co., Ltd.
-001361     (base 16)		Biospace Co., Ltd.
-				10th Floor, Poonglim Bldg, 823 Yeoksam 1-dong
-				Gangnam-gu  Seoul  135-784
-				KR
-
-00-13-62   (hex)		ShinHeung Precision Co., Ltd.
-001362     (base 16)		ShinHeung Precision Co., Ltd.
-				DaeHa Bldg. 401
-				YoungDungPoGu  Seoul  150-050
-				KR
-
-00-13-4F   (hex)		Rapidus Wireless Networks Inc.
-00134F     (base 16)		Rapidus Wireless Networks Inc.
-				47 - 14550 Morris Valley Road
-				Agassiz  British Columbia  V0M 1A1
-				CA
-
-00-13-78   (hex)		Qsan Technology, Inc.
-001378     (base 16)		Qsan Technology, Inc.
-				4F., No.103, Ruihu St., Neihu Dist.
-				Taipei    114
-				TW
-
-00-13-7A   (hex)		Netvox Technology Co., Ltd.
-00137A     (base 16)		Netvox Technology Co., Ltd.
-				No.21-1 Sec. 1 Chung Hua West Road
-				Tainan    702
-				TW
-
-00-13-81   (hex)		CHIPS & Systems, Inc.
-001381     (base 16)		CHIPS & Systems, Inc.
-				4750 Patrick Henry Drive
-				Santa Clara  California  95054
-				US
-
-00-13-79   (hex)		PONDER INFORMATION INDUSTRIES LTD.
-001379     (base 16)		PONDER INFORMATION INDUSTRIES LTD.
-				14F,No.77,lane700, Chung-Cheng Road
-				Hsin-Tien City  Taipei Hsien  231
-				TW
-
-00-13-2C   (hex)		MAZ Brandenburg GmbH
-00132C     (base 16)		MAZ Brandenburg GmbH
-				Pascalstraße 10a
-				Berlin  Berlin  10587
-				DE
-
-00-13-24   (hex)		Schneider Electric Ultra Terminal
-001324     (base 16)		Schneider Electric Ultra Terminal
-				Industriparken 32
-				Copenhagen    2750
-				DK
-
-00-13-26   (hex)		ECM Systems Ltd
-001326     (base 16)		ECM Systems Ltd
-				Ellifoot Park
-				HULL  East Yorkshire  HU12 9DZ
-				GB
-
-00-13-27   (hex)		Data Acquisitions limited
-001327     (base 16)		Data Acquisitions limited
-				84 Gasson street
-				Christchurch    
-				NZ
-
-00-13-67   (hex)		Narayon. Co., Ltd.
-001367     (base 16)		Narayon. Co., Ltd.
-				#502 Hyochang T/W 181-3
-				Seoul    138-220
-				KR
-
-00-13-5C   (hex)		OnSite Systems, Inc.
-00135C     (base 16)		OnSite Systems, Inc.
-				3900 Freedom Circle
-				Santa Clara  CA  95054-1222
-				US
-
-00-13-5F   (hex)		Cisco Systems, Inc
-00135F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-13-3B   (hex)		Speed Dragon Multimedia Limited
-00133B     (base 16)		Speed Dragon Multimedia Limited
-				Room 1312, Vanta Industrial Centre,
-				Kwai Chung  N.T.  
-				HK
-
-00-13-38   (hex)		FRESENIUS-VIAL
-001338     (base 16)		FRESENIUS-VIAL
-				Le Grand Chemin
-				BREZINS    38590
-				FR
-
-00-13-2D   (hex)		iWise Communications
-00132D     (base 16)		iWise Communications
-				Unit 3C, Arden Grove
-				Cape Town    7441
-				ZA
-
-00-13-74   (hex)		Atheros Communications, Inc.
-001374     (base 16)		Atheros Communications, Inc.
-				529 Almanor Avenue
-				Sunnyvale  CA  94085-3512
-				US
-
-00-13-69   (hex)		Honda Electron Co., LED.
-001369     (base 16)		Honda Electron Co., LED.
-				Kanematsu Building 3 Floor
-				Chuo-ku  Tokyo  104-0031
-				JP
-
-00-13-42   (hex)		Vision Research, Inc.
-001342     (base 16)		Vision Research, Inc.
-				190 Parish Drive
-				Wayne  NJ  07470
-				US
-
-00-13-40   (hex)		AD.EL s.r.l.
-001340     (base 16)		AD.EL s.r.l.
-				via S. Pertini,5
-				Martellago  VENEZIA  30030
-				IT
-
-00-13-0C   (hex)		HF System Corporation
-00130C     (base 16)		HF System Corporation
-				1520-1 Ayukai
-				Nishiokitama-Gun  Yamagata-Ken  992-0771
-				JP
-
-00-13-0F   (hex)		EGEMEN Bilgisayar Muh San ve Tic LTD STI
-00130F     (base 16)		EGEMEN Bilgisayar Muh San ve Tic LTD STI
-				Fevzi Cakmak 2 Sok 31/A
-				ANKARA  CANKAYA  06440
-				TR
-
-00-13-13   (hex)		GuangZhou Post & Telecom Equipment ltd
-001313     (base 16)		GuangZhou Post & Telecom Equipment ltd
-				139# Zhongshan Ave
-				Guangzhou  Guangdong  510630
-				CN
-
-00-12-CB   (hex)		CSS Inc.
-0012CB     (base 16)		CSS Inc.
-				151 Superior Blvd.
-				Mississauga  Ontario  L5T2L1
-				CA
-
-00-12-CE   (hex)		Advanced Cybernetics Group
-0012CE     (base 16)		Advanced Cybernetics Group
-				2953 Bunker Hill Lane
-				Santa Clara  CA  95054
-				US
-
-00-12-CA   (hex)		Mechatronic Brick Aps
-0012CA     (base 16)		Mechatronic Brick Aps
-				Alsion 2
-				6400  Sonderborg  
-				DK
-
-00-12-C7   (hex)		SECURAY Technologies Ltd.Co.
-0012C7     (base 16)		SECURAY Technologies Ltd.Co.
-				Tianjin Haitai Industrial Base ErWei Road
-				Tianjin    300384
-				CN
-
-00-12-CD   (hex)		ASEM SpA
-0012CD     (base 16)		ASEM SpA
-				Via Buia, 4
-				ARTEGNA  Udine  I-33011
-				IT
-
-00-12-E8   (hex)		Fraunhofer IMS
-0012E8     (base 16)		Fraunhofer IMS
-				Finkenstrasse 61
-				Duisburg  NRW  47057
-				DE
-
-00-12-DD   (hex)		Shengqu Information Technology (Shanghai) Co., Ltd.
-0012DD     (base 16)		Shengqu Information Technology (Shanghai) Co., Ltd.
-				No.1 Building,No. 690 Bibo Road,Pudong New Area
-				Shanghai    201203
-				CN
-
-00-13-1D   (hex)		Scanvaegt International A/S
-00131D     (base 16)		Scanvaegt International A/S
-				P.O.Pedersens vej 18
-				Aarhus  Jylland  8200 N
-				DK
-
-00-13-18   (hex)		DGSTATION Co., Ltd.
-001318     (base 16)		DGSTATION Co., Ltd.
-				Rm.401, Bldg.A, Bundang Techno Park 150, Yatap-Dong, Bundang-Gu, Sungnam-Si, Gyunggi-Do, 463-760, Korea
-				Sungnam  Gyunggi  463-760
-				KR
-
-00-13-1A   (hex)		Cisco Systems, Inc
-00131A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-12-F4   (hex)		Belco International Co.,Ltd.
-0012F4     (base 16)		Belco International Co.,Ltd.
-				212, Yeokok-Dong, Wonmi-gu
-				Puchun-Si  Kyongki-Do  420-100
-				KR
-
-00-12-F5   (hex)		Imarda New Zealand Limited
-0012F5     (base 16)		Imarda New Zealand Limited
-				Suite G16, National Innovation Centre,
-				Eveleigh NSW     2015
-				NZ
-
-00-12-E0   (hex)		Codan Limited
-0012E0     (base 16)		Codan Limited
-				81 Graves Street
-				Newton  South  5074
-				AU
-
-00-12-DE   (hex)		Radio Components Sweden AB
-0012DE     (base 16)		Radio Components Sweden AB
-				Viderogatan 3B
-				Kista    16422
-				SE
-
-00-13-01   (hex)		IronGate S.L.
-001301     (base 16)		IronGate S.L.
-				C\Alcala 268, primera planta
-				Madrid    28027
-				ES
-
-00-12-F6   (hex)		MDK CO.,LTD.
-0012F6     (base 16)		MDK CO.,LTD.
-				2-6-27 Ibarame
-				Kashiwazaki City  Niigata  9451341
-				JP
-
-00-12-F1   (hex)		IFOTEC
-0012F1     (base 16)		IFOTEC
-				ZAC Champfeuillet
-				VOIRON    38507
-				FR
-
-00-12-F8   (hex)		WNI Resources, LLC
-0012F8     (base 16)		WNI Resources, LLC
-				2146 Bering Drive
-				San Jose  California  95131-2013
-				US
-
-00-12-7C   (hex)		SWEGON AB
-00127C     (base 16)		SWEGON AB
-				 Box 300
-				KVÄNUM  VÄSTRA GÖTALAND  SE 535 23
-				SE
-
-00-12-78   (hex)		International Bar Code
-001278     (base 16)		International Bar Code
-				160 Oak Street
-				Glastonbury  CT  06033
-				US
-
-00-12-7A   (hex)		Sanyu Industry Co.,Ltd.
-00127A     (base 16)		Sanyu Industry Co.,Ltd.
-				Midori-ku Hakusan1-11-11
-				Yokohama-shi  Kanagawa-ken  226-0006
-				JP
-
-00-12-68   (hex)		IPS d.o.o.
-001268     (base 16)		IPS d.o.o.
-				C. Ljubljanske brigade 17
-				Ljubljana    SI-1000
-				SI
-
-00-12-AC   (hex)		ONTIMETEK INC.
-0012AC     (base 16)		ONTIMETEK INC.
-				9Fl.,Owner's Tower
-				Sungnam-Si  Kyunggi-Do  463-825
-				KR
-
-00-12-BC   (hex)		Echolab LLC
-0012BC     (base 16)		Echolab LLC
-				267 Boston Road
-				Billerica  MA  01862
-				US
-
-00-12-BD   (hex)		Avantec Manufacturing Limited
-0012BD     (base 16)		Avantec Manufacturing Limited
-				Unit L, 7/F, Camelpaint Bldg, Block 3
-				    852
-				HK
-
-00-12-AB   (hex)		WiLife, Inc.
-0012AB     (base 16)		WiLife, Inc.
-				132 E. 13065 S., Suite 150
-				Draper  UT  84020
-				US
-
-00-12-9B   (hex)		E2S Electronic Engineering Solutions, S.L.
-00129B     (base 16)		E2S Electronic Engineering Solutions, S.L.
-				Sant Ferran 10
-				Barcelona    08031
-				ES
-
-00-12-98   (hex)		MICO ELECTRIC(SHENZHEN) LIMITED
-001298     (base 16)		MICO ELECTRIC(SHENZHEN) LIMITED
-				
-				SHENZHEN  GUANGDONG  518040
-				CN
-
-00-12-72   (hex)		Redux Communications Ltd.
-001272     (base 16)		Redux Communications Ltd.
-				POB 101
-				Modiin    71700
-				IL
-
-00-12-6A   (hex)		OPTOELECTRONICS Co., Ltd.
-00126A     (base 16)		OPTOELECTRONICS Co., Ltd.
-				3-1Kamiaokinishi 1-chome
-				Kawaguchi  Saitama Pref.  333-0845
-				JP
-
-00-12-C0   (hex)		HotLava Systems, Inc.
-0012C0     (base 16)		HotLava Systems, Inc.
-				6329 Chelton Drive
-				Oakland  CA  94611
-				US
-
-00-12-B7   (hex)		PTW Freiburg
-0012B7     (base 16)		PTW Freiburg
-				Loerracher Strasse 7
-				Freiburg    79115
-				DE
-
-00-12-A1   (hex)		BluePacket Communications Co., Ltd.
-0012A1     (base 16)		BluePacket Communications Co., Ltd.
-				10F-1, No. 420, Sec. 1, Keelung Rd., 110,
-				Taipei    110
-				TW
-
-00-12-06   (hex)		iQuest (NZ) Ltd
-001206     (base 16)		iQuest (NZ) Ltd
-				P.O.Box 15169
-				Hamilton  Waikato  3243
-				NZ
-
-00-12-07   (hex)		Head Strong International Limited
-001207     (base 16)		Head Strong International Limited
-				Unit 9, 20/F, Metropole Square,
-				  Guangdong  
-				HK
-
-00-12-09   (hex)		Fastrax Ltd
-001209     (base 16)		Fastrax Ltd
-				Valimotie 7
-				Vantaa  FI  01510
-				FI
-
-00-12-0B   (hex)		Chinasys Technologies Limited
-00120B     (base 16)		Chinasys Technologies Limited
-				10/F,CAGW Building,No.30 Haidian South Road
-				Beijing    100080
-				CN
-
-00-12-05   (hex)		Terrasat Communications, Inc.
-001205     (base 16)		Terrasat Communications, Inc.
-				235 Vineyard Court, suite 100
-				Morgan Hill  California  95037
-				US
-
-00-12-38   (hex)		SetaBox Technology Co., Ltd.
-001238     (base 16)		SetaBox Technology Co., Ltd.
-				9F-1, No. 293-3, Sec2, Fu-Hsing S. Rd.
-				Taipei    106
-				TW
-
-00-12-3C   (hex)		Second Rule LLC
-00123C     (base 16)		Second Rule LLC
-				4119 Walnut Street
-				Philadelphia  PA  19104
-				US
-
-00-12-3E   (hex)		ERUNE technology Co., Ltd.
-00123E     (base 16)		ERUNE technology Co., Ltd.
-				No. 429, Chin-San 2nd street,
-				Tao Yuan    326
-				TW
-
-00-12-54   (hex)		Spectra Technologies Holdings Company Ltd
-001254     (base 16)		Spectra Technologies Holdings Company Ltd
-				Unit 1301-09, Tower II
-				    852
-				HK
-
-00-12-4F   (hex)		nVent
-00124F     (base 16)		nVent
-				1665 Utica Avenue, Suite 700
-				St Louis Park  MN  55416
-				US
-
-00-12-21   (hex)		B.Braun Melsungen AG
-001221     (base 16)		B.Braun Melsungen AG
-				Schwarzenberger Weg 73-79
-				Melsungen  Hessen  34212
-				DE
-
-00-12-12   (hex)		PLUS  Corporation
-001212     (base 16)		PLUS  Corporation
-				1033-1, Oshitate
-				Inagi-shi  Tokyo  206-0811
-				JP
-
-00-12-13   (hex)		Metrohm AG
-001213     (base 16)		Metrohm AG
-				Oberdorfstrasse 68
-				Herisau  AR  9101
-				CH
-
-00-12-18   (hex)		ARUZE Corporation
-001218     (base 16)		ARUZE Corporation
-				Ariake Frontier Building A
-				Kohtoh-ku  Tokyo  135-0063
-				JP
-
-00-12-49   (hex)		Delta Elettronica S.p.A.
-001249     (base 16)		Delta Elettronica S.p.A.
-				Via Astico 41
-				Varese    21100
-				IT
-
-00-12-4D   (hex)		Inducon BV
-00124D     (base 16)		Inducon BV
-				Kerklaan 26
-				Leimuiden  ZH  2541 CG
-				NL
-
-00-12-66   (hex)		Swisscom Hospitality Services SA
-001266     (base 16)		Swisscom Hospitality Services SA
-				Chemin de l'Etang 65
-				1211  Geneva  
-				CH
-
-00-12-5E   (hex)		CAEN
-00125E     (base 16)		CAEN
-				via Vetraia, 11
-				Viareggio  LUCCA  55049
-				IT
-
-00-12-5D   (hex)		CyberNet Inc.
-00125D     (base 16)		CyberNet Inc.
-				#205, Lotte Suntech City, 513-15
-				Sungnam  Kyunggi  462-806
-				KR
-
-00-12-23   (hex)		Pixim
-001223     (base 16)		Pixim
-				915 Linda Vista Ave.
-				Mountain View  CA  94043
-				US
-
-00-12-3A   (hex)		Posystech Inc., Co.
-00123A     (base 16)		Posystech Inc., Co.
-				Room 407, Daeryung Techno Town 6,
-				Seoul    153-771
-				KR
-
-00-12-34   (hex)		Camille Bauer
-001234     (base 16)		Camille Bauer
-				Aargauerstr. 7
-				Wohlen  AG  5610
-				CH
-
-00-11-E3   (hex)		Thomson, Inc.
-0011E3     (base 16)		Thomson, Inc.
-				101 West 103rd Street
-				Indianapolis  IN  46290
-				US
-
-00-11-DC   (hex)		Glunz & Jensen
-0011DC     (base 16)		Glunz & Jensen
-				Selandia Park 1
-				Ringsted    4100
-				DK
-
-00-11-96   (hex)		Actuality Systems, Inc.
-001196     (base 16)		Actuality Systems, Inc.
-				25 Corporate Drive
-				Burlington  MA  01803
-				US
-
-00-11-87   (hex)		Category Solutions, Inc
-001187     (base 16)		Category Solutions, Inc
-				1021 W. Adams St
-				Chicago  IL  60607
-				US
-
-00-11-90   (hex)		Digital Design Corporation
-001190     (base 16)		Digital Design Corporation
-				3820 Ventura Drive
-				Arlington Heights  IL  60004
-				US
-
-00-11-C4   (hex)		Terminales de Telecomunicacion Terrestre, S.L.
-0011C4     (base 16)		Terminales de Telecomunicacion Terrestre, S.L.
-				Poligono Europolis, Calle C 26
-				Las Rozas  Madrid  28230
-				ES
-
-00-11-CB   (hex)		Jacobsons AB
-0011CB     (base 16)		Jacobsons AB
-				Nedralid s 32
-				Motala    591 97
-				SE
-
-00-11-F7   (hex)		Shenzhen Forward Industry Co., Ltd
-0011F7     (base 16)		Shenzhen Forward Industry Co., Ltd
-				4b1 F5.8, Tian An Cyber Park, Chengongmiao,
-				Shenzhen  Guangdong  518040
-				CN
-
-00-11-D3   (hex)		NextGenTel Holding ASA
-0011D3     (base 16)		NextGenTel Holding ASA
-				Sandslimarka 31
-				Bergen  Hordaland  5861
-				NO
-
-00-11-AB   (hex)		TRUSTABLE TECHNOLOGY CO.,LTD.
-0011AB     (base 16)		TRUSTABLE TECHNOLOGY CO.,LTD.
-				12FL.-1,NO.167,Fu-Shing N.Rd.,Sung-Shan area
-				Taipei    105
-				TW
-
-00-11-A5   (hex)		Fortuna Electronic Corp.
-0011A5     (base 16)		Fortuna Electronic Corp.
-				3F, No.9, Sec.1, ChangAn East Rd.,
-				Taipei    104
-				TW
-
-00-11-3C   (hex)		Micronas GmbH
-00113C     (base 16)		Micronas GmbH
-				Hans-Bunte-Strasse 19
-				Freiburg    D-79108
-				DE
-
-00-11-31   (hex)		UNATECH. CO.,LTD
-001131     (base 16)		UNATECH. CO.,LTD
-				A-727 ,GEOPYUNG TOWN,203-1
-				KANGNAM-GU  SEOUL  135-010
-				US
-
-00-11-27   (hex)		TASI, Inc
-001127     (base 16)		TASI, Inc
-				5551 Dry Fork Road
-				Cleves  OH  45002
-				US
-
-00-11-2A   (hex)		Niko NV
-00112A     (base 16)		Niko NV
-				Industriepark West 40
-				Sint-Niklaas  O/V  9100
-				BE
-
-00-11-2B   (hex)		NetModule AG
-00112B     (base 16)		NetModule AG
-				Meriedweg 11
-				Niederwangen  CH  3172
-				CH
-
-00-11-6F   (hex)		Netforyou Co., LTD.
-00116F     (base 16)		Netforyou Co., LTD.
-				1121-4 3F,  Kwanyang-dong, Dongan-gu
-				Anyang-si  Kyunggi-do  431-804
-				KR
-
-00-11-71   (hex)		DEXTER Communications, Inc.
-001171     (base 16)		DEXTER Communications, Inc.
-				2F Shinsung B/D 404-1
-				Sungnam  Gyunggi  463-420
-				KR
-
-00-11-67   (hex)		Integrated System Solution Corp.
-001167     (base 16)		Integrated System Solution Corp.
-				3F, No. 2-1, industry East Rd., I
-				Hsinchu    300
-				TW
-
-00-11-6D   (hex)		American Time and Signal
-00116D     (base 16)		American Time and Signal
-				140 Third St. South
-				Dassel  MN  55325
-				US
-
-00-11-60   (hex)		ARTDIO Company Co., LTD
-001160     (base 16)		ARTDIO Company Co., LTD
-				7th FL.., No.476, Min-Hu RD., Hsin-Chu,
-				Hsinchu    300
-				TW
-
-00-11-54   (hex)		Webpro Technologies Inc.
-001154     (base 16)		Webpro Technologies Inc.
-				2F-1, No.81, Sec. 4, Chungching N. Rd.,
-				Taipei    111
-				TW
-
-00-11-45   (hex)		ValuePoint Networks
-001145     (base 16)		ValuePoint Networks
-				350 Townsend St Ste 320
-				San Francisco,  CA  94107
-				US
-
-00-11-51   (hex)		Mykotronx
-001151     (base 16)		Mykotronx
-				359 Van Ness Way
-				Torrance  CA  90501
-				US
-
-00-11-4E   (hex)		690885 Ontario Inc.
-00114E     (base 16)		690885 Ontario Inc.
-				205 Annagem Blvd.
-				Mississauga  Ontario  L5T 2V1
-				CA
-
-00-11-2D   (hex)		iPulse Systems
-00112D     (base 16)		iPulse Systems
-				Unit 3, Riverside Industrial Park
-				Gauteng  Johannesburg  1618
-				ZA
-
-00-11-7B   (hex)		Büchi  Labortechnik AG
-00117B     (base 16)		Büchi  Labortechnik AG
-				Meierseggstrasse 40
-				Flawil  9230  SG
-				CH
-
-00-0F-EE   (hex)		XTec, Incorporated
-000FEE     (base 16)		XTec, Incorporated
-				5775 Blue Lagoon Drive
-				Miami  Florida  33126
-				US
-
-00-0F-E4   (hex)		Pantech Co.,Ltd
-000FE4     (base 16)		Pantech Co.,Ltd
-				Shinsong B/D 3F, 25-12,
-				Youngdeungpo-GU  Seoul  150-711
-				KR
-
-00-0F-E7   (hex)		Lutron Electronics Co., Inc.
-000FE7     (base 16)		Lutron Electronics Co., Inc.
-				7200 Suter Rd.
-				Coopersburg  PA  18036-1299
-				US
-
-00-0F-E6   (hex)		MBTech Systems, Inc.
-000FE6     (base 16)		MBTech Systems, Inc.
-				412 1st Ave SE
-				Cullman  Alabama  35055
-				US
-
-00-0F-DA   (hex)		YAZAKI CORPORATION
-000FDA     (base 16)		YAZAKI CORPORATION
-				1500 MISHUKU
-				SUSONO-CITY  SHIZUOKA-PREF  410-1194
-				JP
-
-00-0F-EF   (hex)		Thales e-Transactions GmbH
-000FEF     (base 16)		Thales e-Transactions GmbH
-				Konrad-Zuse-Straße 19-21
-				Bad Hersfeld  Hessen  36251
-				DE
-
-00-0F-E9   (hex)		GW TECHNOLOGIES CO.,LTD.
-000FE9     (base 16)		GW TECHNOLOGIES CO.,LTD.
-				No.38 Shangdi Xilu,Haidian District
-				Beijing    100085
-				CN
-
-00-0F-E1   (hex)		ID DIGITAL CORPORATION
-000FE1     (base 16)		ID DIGITAL CORPORATION
-				6th Fl., Mirae Bldg., 271-1, Seohyun-dong, Bundang-ku, Sungnam-si, Keongki-do, South Korea
-				Sungnam-Si  Keongki-do  463-050
-				KR
-
-00-0F-DF   (hex)		SOLOMON Technology Corp.
-000FDF     (base 16)		SOLOMON Technology Corp.
-				No.42,Sing Zhong Rd.,Nei Hu Dist.,
-				Taipei    114
-				TW
-
-00-0F-FE   (hex)		G-PRO COMPUTER
-000FFE     (base 16)		G-PRO COMPUTER
-				first arrange C YingHu industrial estate QingXi country DongGuan city
-				DongGuan  GuangDong  523648
-				CN
-
-00-11-0B   (hex)		Franklin Technology Systems
-00110B     (base 16)		Franklin Technology Systems
-				20406 Earl St
-				Torrance  CA  90503
-				US
-
-00-11-05   (hex)		Sunplus Technology Co., Ltd.
-001105     (base 16)		Sunplus Technology Co., Ltd.
-				19, Innovation First Road, Hsinchu Science Park
-				Hsinchu    300
-				TW
-
-00-11-02   (hex)		Aurora Multimedia Corp.
-001102     (base 16)		Aurora Multimedia Corp.
-				205 Commercial Court
-				Morganville  New Jersey  07751-1070
-				US
-
-00-11-23   (hex)		Appointech, Inc.
-001123     (base 16)		Appointech, Inc.
-				6F-2 No.192 Tung-Kuan Rd.
-				Hsinchu    300
-				TW
-
-00-11-0F   (hex)		netplat,Inc.
-00110F     (base 16)		netplat,Inc.
-				2F Olympia Center, 828-10, Yeoksam-dong, Gangnam-gu
-				SEOUL    135-935
-				KR
-
-00-0F-D6   (hex)		Sarotech Co., Ltd
-000FD6     (base 16)		Sarotech Co., Ltd
-				HanGang Bldg, 1549-7, Seocho-Dong,
-				Seoul    137-070
-				KR
-
-00-11-15   (hex)		EPIN Technologies, Inc.
-001115     (base 16)		EPIN Technologies, Inc.
-				Acorn Campus
-				Cupertino  CA  95014
-				US
-
-00-0F-C7   (hex)		Dionica R&D Ltd.
-000FC7     (base 16)		Dionica R&D Ltd.
-				Bologna Centre, F11
-				Mosta    MST13
-				MT
-
-00-0F-64   (hex)		D&R Electronica Weesp BV
-000F64     (base 16)		D&R Electronica Weesp BV
-				Rijnkade 15B
-				WEESP  NH  1382GS
-				NL
-
-00-0F-75   (hex)		First Silicon Solutions
-000F75     (base 16)		First Silicon Solutions
-				13939 Forest Lane
-				Larkspur  CO  80118
-				US
-
-00-0F-7C   (hex)		ACTi Corporation
-000F7C     (base 16)		ACTi Corporation
-				7F., No. 1, Alley 20, Lane 407, Sec. 2, Tiding Blvd.,
-				Taipei    114
-				TW
-
-00-0F-7A   (hex)		BeiJing NuQX Technology CO.,LTD
-000F7A     (base 16)		BeiJing NuQX Technology CO.,LTD
-				Room 812,8F Tower B,YinWang Center, No.113,Zhi Chun Road,
-				Beijing    100086
-				CN
-
-00-0F-AD   (hex)		FMN communications GmbH
-000FAD     (base 16)		FMN communications GmbH
-				Grimmelallee 4
-				Nordhausen  Thüringen  99734
-				DE
-
-00-0F-AB   (hex)		Kyushu Electronics Systems Inc.
-000FAB     (base 16)		Kyushu Electronics Systems Inc.
-				3-3, Kongo 2-Chome, Yahatanishi Ward
-				Kitakyushu City  Fukuoka Pref.  807-1263
-				JP
-
-00-0F-AC   (hex)		IEEE 802.11
-000FAC     (base 16)		IEEE 802.11
-				4125 Highlander Parkway
-				Richfield  Ohio  44286
-				US
-
-00-0F-72   (hex)		Sandburst
-000F72     (base 16)		Sandburst
-				600 Federal St
-				Andover  MA  01810
-				US
-
-00-0F-B3   (hex)		Actiontec Electronics, Inc
-000FB3     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-0F-9C   (hex)		Panduit Corp
-000F9C     (base 16)		Panduit Corp
-				17301 Ridgeland Ave
-				Tinley Park  Illinois  60477
-				US
-
-00-0F-C8   (hex)		Chantry Networks
-000FC8     (base 16)		Chantry Networks
-				1900 Minnesota Court
-				Mississauga  Ontario  L5N 3C9
-				CA
-
-00-0F-BB   (hex)		Nokia Siemens Networks GmbH & Co. KG.
-000FBB     (base 16)		Nokia Siemens Networks GmbH & Co. KG.
-				Werner-von-Siemens Straße 2-6
-				Bruchsal  Baden-Württemberg  76646
-				DE
-
-00-0F-BC   (hex)		Onkey Technologies, Inc.
-000FBC     (base 16)		Onkey Technologies, Inc.
-				780 Montague Expressway, Inc.
-				San Jose  CA  95131
-				US
-
-00-0F-B6   (hex)		Europlex Technologies
-000FB6     (base 16)		Europlex Technologies
-				Clonshaugh Business & Tech. Park
-				Clonshaugh    Dublin 17
-				IE
-
-00-0F-B9   (hex)		Adaptive Instruments
-000FB9     (base 16)		Adaptive Instruments
-				577 Main Street
-				Hudson  MA  01749
-				US
-
-00-0F-98   (hex)		Avamax Co. Ltd.
-000F98     (base 16)		Avamax Co. Ltd.
-				B1, No. 51, Section 2, ChongQing S. Rd.
-				Taipei    
-				TW
-
-00-0F-97   (hex)		Avanex Corporation
-000F97     (base 16)		Avanex Corporation
-				40919 Encyclopedia Circle
-				Fremont  CA  94538
-				US
-
-00-0F-96   (hex)		Telco Systems, Inc. 
-000F96     (base 16)		Telco Systems, Inc. 
-				15 Berkshire Road
-				Mansfield  MA  02048
-				US
-
-00-0F-8B   (hex)		Orion MultiSystems Inc
-000F8B     (base 16)		Orion MultiSystems Inc
-				3375 Scott Blvd Suite 338
-				Santa Clara  CA  95054
-				US
-
-00-0F-8C   (hex)		Gigawavetech Pte Ltd
-000F8C     (base 16)		Gigawavetech Pte Ltd
-				1 Jalan Kilang Timor
-				    159303
-				SG
-
-00-0F-38   (hex)		Netstar
-000F38     (base 16)		Netstar
-				3F,No.347, Yang-kuang St.,Nei-Hu Dis.,
-				Taipei    114
-				TW
-
-00-0F-3A   (hex)		HISHARP
-000F3A     (base 16)		HISHARP
-				NO.673,CHANG HSING ROAD PATE CITY,TAOYUAN,
-				TAIPEI    334
-				TW
-
-00-0F-30   (hex)		Raza Microelectronics Inc
-000F30     (base 16)		Raza Microelectronics Inc
-				3080 North First Street
-				San Jose  CA  95134
-				US
-
-00-0F-53   (hex)		Solarflare Communications Inc.
-000F53     (base 16)		Solarflare Communications Inc.
-				Suite 100, 7505 Irvine Center Drive
-				Irvine  CA  92618
-				US
-
-00-0F-51   (hex)		Azul Systems, Inc.
-000F51     (base 16)		Azul Systems, Inc.
-				1600 Plymouth Street
-				Mountain View  California  94043
-				US
-
-00-0F-07   (hex)		Mangrove Systems, Inc.
-000F07     (base 16)		Mangrove Systems, Inc.
-				10 Fairfield Blvd.
-				Wallingford  CT  06492
-				US
-
-00-0F-00   (hex)		Legra Systems, Inc.
-000F00     (base 16)		Legra Systems, Inc.
-				3 Burlington Woods Drive
-				Burlington  MA  01803
-				US
-
-00-0F-01   (hex)		DIGITALKS INC
-000F01     (base 16)		DIGITALKS INC
-				14 MARSHALL LANE
-				WESTON  CT  06883
-				US
-
-00-0F-03   (hex)		COM&C CO., LTD
-000F03     (base 16)		COM&C CO., LTD
-				2F Woojin BLD 1445-2 Secho-Dong
-				SEOUL    137-070
-				KR
-
-00-0F-34   (hex)		Cisco Systems, Inc
-000F34     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0F-2E   (hex)		Megapower International Corp.
-000F2E     (base 16)		Megapower International Corp.
-				Rm. 403, No 24 , Wu-Chuan 2nd Rd.,
-				Taipei Hsien    242
-				TW
-
-00-0F-26   (hex)		WorldAccxx  LLC
-000F26     (base 16)		WorldAccxx  LLC
-				4035 Tampa Rd.
-				Oldsmar  FL  34667
-				US
-
-00-0F-45   (hex)		Stretch, Inc.
-000F45     (base 16)		Stretch, Inc.
-				1322 Orleans Drive
-				Sunnyvale  CA  94089
-				US
-
-00-0F-3B   (hex)		Fuji System Machines Co., Ltd.
-000F3B     (base 16)		Fuji System Machines Co., Ltd.
-				5-8-10
-				Zama-Shi  Kanagawa-Ken  228-0003
-				JP
-
-00-0F-37   (hex)		Xambala Incorporated
-000F37     (base 16)		Xambala Incorporated
-				2674 N. 1st Street
-				San Jose  CA  95134
-				US
-
-00-0F-54   (hex)		Entrelogic Corporation
-000F54     (base 16)		Entrelogic Corporation
-				33 Boston Post Rd. West.
-				Marlborough  MA  01752
-				US
-
-00-0F-25   (hex)		AimValley B.V.
-000F25     (base 16)		AimValley B.V.
-				Utrechtseweg 38,
-				Hilversum  NH  1223 TV
-				NL
-
-00-0F-19   (hex)		Boston Scientific
-000F19     (base 16)		Boston Scientific
-				4100 Hamline Ave N.
-				St. Paul  MN  55112
-				US
-
-00-0F-10   (hex)		RDM Corporation
-000F10     (base 16)		RDM Corporation
-				608 Weber St. N
-				Waterloo  ON  N2V 1K4
-				CA
-
-00-0E-A8   (hex)		United Technologists Europe Limited
-000EA8     (base 16)		United Technologists Europe Limited
-				UTEL Laboratories, Wolves Farm Lane
-				Hadleigh  Suffolk  IP7 6BH
-				GB
-
-00-0E-AA   (hex)		Scalent Systems, Inc.
-000EAA     (base 16)		Scalent Systems, Inc.
-				490 S. California Ave
-				Palo Alto  CA  94306
-				US
-
-00-0E-AC   (hex)		MINTRON ENTERPRISE CO., LTD.
-000EAC     (base 16)		MINTRON ENTERPRISE CO., LTD.
-				NO.3,Wu-Kung 5Rd., Wu-Ku Ind Park
-				Taipei County    248
-				TW
-
-00-0E-AE   (hex)		GAWELL TECHNOLOGIES CORP.
-000EAE     (base 16)		GAWELL TECHNOLOGIES CORP.
-				2F,NO.102,SEC.3,JUNG SHAN RD,
-				JUNG HO CITY,  TAIPEI HSIEN  235
-				TW
-
-00-0E-BA   (hex)		HANMI SEMICONDUCTOR CO., LTD.
-000EBA     (base 16)		HANMI SEMICONDUCTOR CO., LTD.
-				#532-2, Gajwa-Dong, Seo-Ku,
-				Incheon,    404 250
-				KR
-
-00-0E-BC   (hex)		Paragon Fidelity GmbH
-000EBC     (base 16)		Paragon Fidelity GmbH
-				Schwadermühlstraße
-				Cadolzburg    90556
-				DE
-
-00-0E-C5   (hex)		Digital Multitools Inc
-000EC5     (base 16)		Digital Multitools Inc
-				9005 Leslie Street  Unit 205
-				Richmond Hill  Ontario  L4B 1G7
-				CA
-
-00-0E-C7   (hex)		Motorola Korea
-000EC7     (base 16)		Motorola Korea
-				Hibrand B/D 17F SW Team Motorola Korea
-				Yangjaedong  Seocho  
-				KR
-
-00-0E-8B   (hex)		Astarte Technology Co, Ltd.
-000E8B     (base 16)		Astarte Technology Co, Ltd.
-				11F, No. 166 Dah-Yeh Rd.
-				Peitou, Taipei    
-				TW
-
-00-0E-DF   (hex)		PLX Technology
-000EDF     (base 16)		PLX Technology
-				870 Maude Ave.,
-				Sunnyvale  CA  94085
-				US
-
-00-0E-E1   (hex)		ExtremeSpeed Inc.
-000EE1     (base 16)		ExtremeSpeed Inc.
-				PO Box 600
-				Mannville  Alberta  T0B 2W0
-				CA
-
-00-0E-D7   (hex)		Cisco Systems, Inc
-000ED7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-D3   (hex)		Epicenter, Inc.
-000ED3     (base 16)		Epicenter, Inc.
-				211 B Calle Pintoresco
-				San Clemente  CA  92672
-				US
-
-00-0E-9D   (hex)		Tiscali UK Ltd
-000E9D     (base 16)		Tiscali UK Ltd
-				20 Broadwick Street
-				London    W1F 8HT
-				GB
-
-00-0E-47   (hex)		NCI System Co.,Ltd.
-000E47     (base 16)		NCI System Co.,Ltd.
-				#206, Kayang Techno-Town, 1487, Kayang 3 dong, Kangseo-Ku, Seoul, Korea
-				Seoul    157-810
-				KR
-
-00-0E-46   (hex)		Niigata Seimitsu Co.,Ltd.
-000E46     (base 16)		Niigata Seimitsu Co.,Ltd.
-				3335-2, Shimonaka, Sanwa-mura
-				Nakakubiki-gun  Niigata  943-0222
-				JP
-
-00-0E-1F   (hex)		TCL Networks Equipment Co., Ltd.
-000E1F     (base 16)		TCL Networks Equipment Co., Ltd.
-				No.5 Industrial Road,Shekou
-				ShenZhen  GuangDong  518067
-				CN
-
-00-0E-26   (hex)		Gincom Technology Corp.
-000E26     (base 16)		Gincom Technology Corp.
-				15F., No. 284, Sec.3, Sanmin Rd., Taoyuan City,
-				Taoyuan,    330
-				TW
-
-00-0E-6C   (hex)		Device Drivers Limited
-000E6C     (base 16)		Device Drivers Limited
-				1-5-1-103
-				Fuchu-shi  Tokyo  1830005
-				JP
-
-00-0E-6B   (hex)		Janitza electronics GmbH
-000E6B     (base 16)		Janitza electronics GmbH
-				Vor dem Polstück  1
-				Lahnau  Hessen  35633
-				DE
-
-00-0E-5F   (hex)		activ-net GmbH & Co. KG
-000E5F     (base 16)		activ-net GmbH & Co. KG
-				Konrad-Zuse-Str. 4
-				Bochum    44801
-				DE
-
-00-0E-57   (hex)		Iworld Networking, Inc.
-000E57     (base 16)		Iworld Networking, Inc.
-				125 Hanju Bldg, Nonhyun-Dong
-				Seoul    135010
-				KR
-
-00-0E-51   (hex)		tecna elettronica srl
-000E51     (base 16)		tecna elettronica srl
-				via miglioli 30
-				castel san pietro terme  bologna  40024
-				IT
-
-00-0E-67   (hex)		Eltis Microelectronics Ltd.
-000E67     (base 16)		Eltis Microelectronics Ltd.
-				Unit 902B, 9/F., Sunbeam Centre
-				Kwun Tong  Kowloon  
-				HK
-
-00-0E-65   (hex)		TransCore
-000E65     (base 16)		TransCore
-				8600 Jefferson St NE
-				Albuquerque  NM  87113
-				US
-
-00-0E-43   (hex)		G-Tek Electronics Sdn. Bhd.
-000E43     (base 16)		G-Tek Electronics Sdn. Bhd.
-				2493 Mukim 1, Lorong Perusahaan Lapan
-				Perai  Penang  13600
-				MY
-
-00-0E-44   (hex)		Digital 5, Inc.
-000E44     (base 16)		Digital 5, Inc.
-				101 Grovers Mill Rd.
-				Lawrenceville  NJ  08648
-				US
-
-00-0E-74   (hex)		Solar Telecom. Tech
-000E74     (base 16)		Solar Telecom. Tech
-				B B/D, 4F, Samho Venture Tower
-				Seoul    137-941
-				KR
-
-00-0E-7A   (hex)		GemWon Communications Co., Ltd.
-000E7A     (base 16)		GemWon Communications Co., Ltd.
-				3FL.,NO.32,Lane 135,Shianjeng 9th Rd.,Jubei City
-				Hsinchu    302
-				TW
-
-00-0E-80   (hex)		Thomson Technology Inc
-000E80     (base 16)		Thomson Technology Inc
-				9087A 198th ST
-				Surrey  BC  V1M-3B1
-				CA
-
-00-0E-85   (hex)		Catalyst Enterprises, Inc.
-000E85     (base 16)		Catalyst Enterprises, Inc.
-				3385 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-00-0E-32   (hex)		Kontron Medical
-000E32     (base 16)		Kontron Medical
-				Reinacherstrasse 131
-				Basel    4002
-				CH
-
-00-0E-0B   (hex)		Netac Technology Co., Ltd.
-000E0B     (base 16)		Netac Technology Co., Ltd.
-				6F, Incubator Building, China Academy of Science &Tech Development,
-				ShenZhen  GuangDong  518057
-				CN
-
-00-0E-11   (hex)		BDT Büro und Datentechnik GmbH & Co.KG 
-000E11     (base 16)		BDT Büro und Datentechnik GmbH & Co.KG 
-				Saline 29
-				Rottweil  Baden-Württemberg  D-78628
-				DE
-
-00-0D-F5   (hex)		Teletronics International Inc.
-000DF5     (base 16)		Teletronics International Inc.
-				2 Choke Cherry Road
-				Rockville  MD  20850
-				US
-
-00-0D-F7   (hex)		Space Dynamics Lab
-000DF7     (base 16)		Space Dynamics Lab
-				1695 N. Research Park Way
-				North Logan  UT  84341
-				US
-
-00-0D-EB   (hex)		CompXs Limited
-000DEB     (base 16)		CompXs Limited
-				Robert Denholm House
-				Redhill  Surrey  RH1 4HW
-				GB
-
-00-0D-EE   (hex)		Andrew RF Power Amplifier Group
-000DEE     (base 16)		Andrew RF Power Amplifier Group
-				40 Technology Drive
-				Warren  NJ  07059
-				US
-
-00-0D-EF   (hex)		Soc. Coop. Bilanciai
-000DEF     (base 16)		Soc. Coop. Bilanciai
-				via S.Ferrari 16
-				Campogalliano  Modena  41011
-				IT
-
-00-0D-E7   (hex)		Snap-on OEM Group
-000DE7     (base 16)		Snap-on OEM Group
-				2333 East Walton Blvd.
-				Auburn Hills  MI  48326
-				US
-
-00-0D-C6   (hex)		DigiRose Technology Co., Ltd.
-000DC6     (base 16)		DigiRose Technology Co., Ltd.
-				No. 1, Alley 20, Lane 26 Rueiguang Road,
-				Taipei    114
-				TW
-
-00-0D-C1   (hex)		SafeWeb Inc
-000DC1     (base 16)		SafeWeb Inc
-				2200 Powell St. Ste 590
-				Emeryville  CA  94608
-				US
-
-00-0D-F0   (hex)		QCOM TECHNOLOGY INC.
-000DF0     (base 16)		QCOM TECHNOLOGY INC.
-				4F., No.301, Sec. 2, Tiding Blvd.
-				Taipei City  Neihu District  114
-				TW
-
-00-0D-E5   (hex)		Samsung Thales
-000DE5     (base 16)		Samsung Thales
-				259 Gongdan-Dong
-				Gumi-City  Gyeongsangbuk-do  730-904
-				KR
-
-00-0D-C0   (hex)		Spagat AS
-000DC0     (base 16)		Spagat AS
-				Tonne Hutifeldtpl. 2
-				Halden  Ostfold  1767
-				NO
-
-00-0D-DD   (hex)		Profilo Telra Elektronik Sanayi ve Ticaret. A.Ş
-000DDD     (base 16)		Profilo Telra Elektronik Sanayi ve Ticaret. A.Ş
-				Cemal Sahir Sokak NO:26-28
-				İstanbul  TURKEY  34255
-				TR
-
-00-0D-F8   (hex)		ORGA Kartensysteme GmbH
-000DF8     (base 16)		ORGA Kartensysteme GmbH
-				Konrad-Zuse-Ring 1
-				Flintbek  Schleswig-Holstein  24220
-				DE
-
-00-0E-16   (hex)		SouthWing S.L.
-000E16     (base 16)		SouthWing S.L.
-				C/Avila, 48-50
-				Barcelona    08005
-				ES
-
-00-0D-A7   (hex)		Private
-000DA7     (base 16)		Private
-
-00-0D-AD   (hex)		Dataprobe, Inc.
-000DAD     (base 16)		Dataprobe, Inc.
-				1B Pearl Court
-				Allendale  NJ  07401
-				US
-
-00-0D-AB   (hex)		Parker Hannifin GmbH Electromechanical Division Europe
-000DAB     (base 16)		Parker Hannifin GmbH Electromechanical Division Europe
-				Robert-Bosch-Straße 22
-				Offenburg  Baden-Württemberg  77656
-				DE
-
-00-0D-A8   (hex)		Teletronics Technology Corporation
-000DA8     (base 16)		Teletronics Technology Corporation
-				2525 Pearl Buck Road
-				Bristol  Pennsylvania  19007
-				US
-
-00-0D-79   (hex)		Dynamic Solutions Co,.Ltd.
-000D79     (base 16)		Dynamic Solutions Co,.Ltd.
-				17-8 Nihonbashi Hakozaki-cho
-				Chuo-ku  Tokyo  103-0015
-				JP
-
-00-0D-6D   (hex)		K-Tech Devices Corp.
-000D6D     (base 16)		K-Tech Devices Corp.
-				14016-30
-				nakaminowa minowamachi kamiina  nagano  399-4601
-				JP
-
-00-0D-AF   (hex)		Plexus Corp (UK) Ltd
-000DAF     (base 16)		Plexus Corp (UK) Ltd
-				Pinnacle Hill
-				Kelso  Roxburghshire  TD5 8XX
-				GB
-
-00-0D-B1   (hex)		Japan Network Service Co., Ltd.
-000DB1     (base 16)		Japan Network Service Co., Ltd.
-				Matoba Bldg. 6F,
-				 Chuo-ku  Tokyo  104-0042
-				JP
-
-00-0D-83   (hex)		Sanmina-SCI Hungary  Ltd.
-000D83     (base 16)		Sanmina-SCI Hungary  Ltd.
-				Kota Jozsef u. 2.
-				Tatabanya  Komarom-Esztergom  2800
-				HU
-
-00-0D-7F   (hex)		MIDAS  COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)
-000D7F     (base 16)		MIDAS  COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)
-				04-12, Phase Z.Ro Technoprenuer Park
-				Singapore    139 347
-				SG
-
-00-0D-75   (hex)		Kobian Pte Ltd - Taiwan Branch
-000D75     (base 16)		Kobian Pte Ltd - Taiwan Branch
-				2F, No.580, Rueikuang Rd.,Nei Hu,Taipei,
-				Taipei  Nei Hu  114
-				TW
-
-00-0D-78   (hex)		Engineering & Security
-000D78     (base 16)		Engineering & Security
-				Martiri della Libertà   32/4
-				Genova    16155
-				IT
-
-00-0D-9E   (hex)		TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.
-000D9E     (base 16)		TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.
-				Yoshida 1221
-				Ouragun Ohizumi  Gunma  370-0523
-				JP
-
-00-0D-A3   (hex)		Emerging Technologies Limited
-000DA3     (base 16)		Emerging Technologies Limited
-				Wong's Industrial Centre, 180 Wai Yip St
-				  Nil  
-				HK
-
-00-0D-A4   (hex)		DOSCH & AMAND SYSTEMS AG
-000DA4     (base 16)		DOSCH & AMAND SYSTEMS AG
-				Scheinerstrasse 9
-				Munich  Bavaria  81679
-				DE
-
-00-0D-9A   (hex)		INFOTEC LTD
-000D9A     (base 16)		INFOTEC LTD
-				The Maltings
-				Ashby-de-la-Zouch  Leicestershire  LE65 2PS
-				GB
-
-00-0D-6E   (hex)		K-Patents Oy
-000D6E     (base 16)		K-Patents Oy
-				P.O. Box 77
-				VANTAA  FI  01511
-				FI
-
-00-0D-6A   (hex)		Redwood Technologies LTD
-000D6A     (base 16)		Redwood Technologies LTD
-				Amber House
-				Bracknell  Berkshire  RG12 1JB
-				GB
-
-00-0D-BA   (hex)		Océ Document Technologies GmbH
-000DBA     (base 16)		Océ Document Technologies GmbH
-				Max-Stromeyer-Straße  116
-				Konstanz    78467
-				DE
-
-00-0D-BD   (hex)		Cisco Systems, Inc
-000DBD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0D-B5   (hex)		GLOBALSAT TECHNOLOGY CORPORATION
-000DB5     (base 16)		GLOBALSAT TECHNOLOGY CORPORATION
-				Far East Century Park
-				Taipei Hsien    235
-				TW
-
-00-0D-97   (hex)		ABB Inc./Tropos
-000D97     (base 16)		ABB Inc./Tropos
-				1710 S. Amphlett Blvd,  Suite 304
-				San Mateo  CA  94402
-				US
-
-00-0D-96   (hex)		Vtera Technology Inc.
-000D96     (base 16)		Vtera Technology Inc.
-				No 34, Industrial East. 4th Rd.
-				HsinChu    300
-				TW
-
-00-0D-8B   (hex)		T&D Corporation
-000D8B     (base 16)		T&D Corporation
-				5652-169 Sasaga
-				Matsumoto  Nagano  399-0033
-				JP
-
-00-0D-90   (hex)		Factum Electronics AB
-000D90     (base 16)		Factum Electronics AB
-				Teknikringen 1H
-				Linköping  Östergötland  583 30
-				SE
-
-00-0D-85   (hex)		Tapwave, Inc.
-000D85     (base 16)		Tapwave, Inc.
-				1901 Landings Drive
-				Mountain View  CA  94043
-				US
-
-00-0D-82   (hex)		PHSNET
-000D82     (base 16)		PHSNET
-				Piazza Mariano Rumor, 18
-				Arcugnano  Vicenza  36057
-				IT
-
-00-0D-23   (hex)		Smart Solution, Inc
-000D23     (base 16)		Smart Solution, Inc
-				465 West Lawndale #B
-				Salt Lake City  UT  84115
-				US
-
-00-0D-27   (hex)		MICROPLEX Printware AG
-000D27     (base 16)		MICROPLEX Printware AG
-				Panzerstraße 5
-				Varel  Niedersachsen  26316
-				DE
-
-00-0D-1B   (hex)		Kyoto Electronics Manufacturing Co., Ltd.
-000D1B     (base 16)		Kyoto Electronics Manufacturing Co., Ltd.
-				56-2, Ninodan-cho, Shinden,
-				Kyoto-City  Kyoto Prefecture  601-8317
-				JP
-
-00-0D-1D   (hex)		HIGH-TEK HARNESS ENT. CO., LTD.
-000D1D     (base 16)		HIGH-TEK HARNESS ENT. CO., LTD.
-				4F-6, No18, Pu-Ting Rd. Hsinchu, Taiwan
-				Hsinchu    300
-				TW
-
-00-0D-02   (hex)		NEC Platforms, Ltd.
-000D02     (base 16)		NEC Platforms, Ltd.
-				800 Shimomata
-				Kakegawa  Shizuoka  436-8501
-				JP
-
-00-0D-07   (hex)		Calrec Audio Ltd
-000D07     (base 16)		Calrec Audio Ltd
-				Nutclough Mill
-				Hebden Bridge  West Yorkshire  HX7 8EZ
-				GB
-
-00-0D-40   (hex)		Verint Loronix Video Solutions
-000D40     (base 16)		Verint Loronix Video Solutions
-				12526 High Bluff Dr. #170
-				San DIego  CA  92130
-				US
-
-00-0D-21   (hex)		WISCORE Inc.
-000D21     (base 16)		WISCORE Inc.
-				6F, No. 180, Sec. 2, Duenhua S. Rd,
-				Taipei    106
-				TW
-
-00-0D-09   (hex)		Yuehua(Zhuhai) Electronic CO. LTD
-000D09     (base 16)		Yuehua(Zhuhai) Electronic CO. LTD
-				4Rd Pingdong,Nanping Science & Technolog
-				Zhuhai  Guangdong  519070
-				CN
-
-00-0D-37   (hex)		WIPLUG
-000D37     (base 16)		WIPLUG
-				RUA  DR. AGOSTINHO GOULAO
-				PETROPOLIS  RIO JANEIRO  25730050
-				BR
-
-00-0D-33   (hex)		Prediwave Corp.
-000D33     (base 16)		Prediwave Corp.
-				48431 Milmont Drive
-				Fremont  CA  94538
-				US
-
-00-0D-2F   (hex)		AIN Comm.Tech.Co., LTD
-000D2F     (base 16)		AIN Comm.Tech.Co., LTD
-				4F, No.76, Sec2 Mintzu Rd
-				Jung-Li City    320
-				TW
-
-00-0D-5D   (hex)		Raritan Computer, Inc
-000D5D     (base 16)		Raritan Computer, Inc
-				400 Cottontail Lane
-				Somerset  NJ  08873
-				US
-
-00-0D-63   (hex)		DENT Instruments, Inc.
-000D63     (base 16)		DENT Instruments, Inc.
-				64 NW Franklin Ave
-				Bend  OR  97701
-				US
-
-00-0D-66   (hex)		Cisco Systems, Inc
-000D66     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0C-CD   (hex)		IEC - TC57
-000CCD     (base 16)		IEC - TC57
-				3, rue de Varembé
-				Geneva  GE  1211
-				CH
-
-00-0C-CB   (hex)		Design Combus Ltd
-000CCB     (base 16)		Design Combus Ltd
-				Hatanapaan valtatie 34A
-				Tampere    FIN-33100
-				FI
-
-00-0C-C9   (hex)		ILWOO DATA & TECHNOLOGY CO.,LTD
-000CC9     (base 16)		ILWOO DATA & TECHNOLOGY CO.,LTD
-				1475-10,HWA HYUN BLD. 2nd Floor,
-				SEOUL    137-071
-				KR
-
-00-0C-E9   (hex)		BLOOMBERG L.P.
-000CE9     (base 16)		BLOOMBERG L.P.
-				731 Lexington Ave
-				NEW YORK  NEW YORK  10022
-				US
-
-00-0C-EA   (hex)		aphona Kommunikationssysteme
-000CEA     (base 16)		aphona Kommunikationssysteme
-				Entwicklungs- und VertriebsgmbH
-				Wien    1230
-				AT
-
-00-0C-DA   (hex)		FreeHand Systems, Inc.
-000CDA     (base 16)		FreeHand Systems, Inc.
-				95 First St.
-				Los Altos  CA  94022
-				US
-
-00-0C-F5   (hex)		InfoExpress
-000CF5     (base 16)		InfoExpress
-				170 S. Whisman Road, Suite B
-				Mountain View  CA  94041
-				US
-
-00-0C-EE   (hex)		jp-embedded
-000CEE     (base 16)		jp-embedded
-				Buen 21, Nr. Dalby
-				Borup    4140
-				DK
-
-00-0C-AF   (hex)		TRI TERM CO.,LTD.
-000CAF     (base 16)		TRI TERM CO.,LTD.
-				21-5 HIRAIDE KOUGIYO DANCHI
-				TOCHIGI    321-0905
-				JP
-
-00-0C-B3   (hex)		ROUND Co.,Ltd.
-000CB3     (base 16)		ROUND Co.,Ltd.
-				3-9 Gokashou-Shibahigashi
-				uji  kyoto  611-0011
-				JP
-
-00-0C-DD   (hex)		AOS technologies AG
-000CDD     (base 16)		AOS technologies AG
-				Taefernstrasse 20
-				Baden - Daettwil  AG  CH-5405
-				CH
-
-00-0C-A5   (hex)		Naman NZ LTd
-000CA5     (base 16)		Naman NZ LTd
-				13/17 Kawana St
-				Auckland    
-				NZ
-
-00-0C-A9   (hex)		Ebtron Inc.
-000CA9     (base 16)		Ebtron Inc.
-				1663 Hwy 701 South
-				Loris  SC  29569
-				US
-
-00-0C-FB   (hex)		Korea Network Systems
-000CFB     (base 16)		Korea Network Systems
-				206  JangYoungSil Bldg, 1688-5
-				Taejeon    306-230
-				KR
-
-00-0C-7A   (hex)		DaTARIUS Technologies GmbH
-000C7A     (base 16)		DaTARIUS Technologies GmbH
-				Anton Maria Schyrle Str. 7
-				Reutte  Tirol  6600
-				AT
-
-00-0C-79   (hex)		Extel Communications P/L
-000C79     (base 16)		Extel Communications P/L
-				399 Ferntree Gully Road
-				Mt Waverley  Victoria  3149
-				AU
-
-00-0C-75   (hex)		Oriental integrated electronics. LTD
-000C75     (base 16)		Oriental integrated electronics. LTD
-				281-34 Dondang-dong Wonmi-Gu
-				Bucheon    420-808
-				KR
-
-00-0C-5D   (hex)		CHIC TECHNOLOGY (CHINA) CORP.
-000C5D     (base 16)		CHIC TECHNOLOGY (CHINA) CORP.
-				7th Building,Shi'ao Ind.Zone,Longhua Tow
-				Shenzhen  Guangdong  518109
-				CN
-
-00-0C-4F   (hex)		UDTech Japan Corporation
-000C4F     (base 16)		UDTech Japan Corporation
-				Hamacho Hanacho Bldg, 2F
-				Chuo-ku  Tokyo  103-0007
-				JP
-
-00-0C-62   (hex)		ABB AB, Cewe-Control 
-000C62     (base 16)		ABB AB, Cewe-Control 
-				Dept. LPCC/RE 
-				Vasteras    721 61
-				SE
-
-00-0C-4C   (hex)		Arcor AG&Co.
-000C4C     (base 16)		Arcor AG&Co.
-				Alfred-Herrhausen-Allee 1
-				Eschborn  Hessen  65760
-				DE
-
-00-0C-47   (hex)		SK Teletech(R&D Planning Team)
-000C47     (base 16)		SK Teletech(R&D Planning Team)
-				21th FL Startower 737, Yeoksam-dong
-				Seoul    135-984
-				KR
-
-00-0C-6D   (hex)		Edwards Ltd.
-000C6D     (base 16)		Edwards Ltd.
-				Marshall Road
-				Eastbourne  East Sussex  BN22 9BA
-				GB
-
-00-0C-70   (hex)		ACC GmbH
-000C70     (base 16)		ACC GmbH
-				Am Sandfeld 15
-				Karlsruhe  Baden  76149
-				DE
-
-00-0C-6A   (hex)		MBARI
-000C6A     (base 16)		MBARI
-				7700 Sandholdt Road
-				Moss Landing  CA  95039
-				US
-
-00-0C-6B   (hex)		Kurz Industrie-Elektronik GmbH
-000C6B     (base 16)		Kurz Industrie-Elektronik GmbH
-				Foehrenbachstraße 3
-				Remshalden  Baden-Württemberg  73630
-				DE
-
-00-0C-9D   (hex)		UbeeAirWalk, Inc.
-000C9D     (base 16)		UbeeAirWalk, Inc.
-				1850 N. GreenVille Ave., Suite 164
-				Richardson  TX  75081
-				US
-
-00-0C-9F   (hex)		NKE Corporation
-000C9F     (base 16)		NKE Corporation
-				366-1 Hishikawa-cho Hazukashi Fushimi-ku
-				Kyoto-shi  Kyoto  612-8487
-				JP
-
-00-0C-84   (hex)		Eazix, Inc.
-000C84     (base 16)		Eazix, Inc.
-				Unit 301 Plaza Building B
-				Muntinlupa City  Rizal  1770
-				PH
-
-00-0C-85   (hex)		Cisco Systems, Inc
-000C85     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0C-3F   (hex)		Cogent Defence & Security Networks,
-000C3F     (base 16)		Cogent Defence & Security Networks,
-				Meadows Road,
-				Newport,  South Wales,  NP19 4SS
-				GB
-
-00-0C-30   (hex)		Cisco Systems, Inc
-000C30     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0C-9A   (hex)		Hitech Electronics Corp.
-000C9A     (base 16)		Hitech Electronics Corp.
-				4f, No. 501-15 Chung-Cheng Rd.
-				Shin-tien  Taipei Shien  231
-				TW
-
-00-0C-91   (hex)		Riverhead Networks Inc.
-000C91     (base 16)		Riverhead Networks Inc.
-				
-				Cupertino  CA  95014
-				US
-
-00-0B-DA   (hex)		EyeCross Co.,Inc.
-000BDA     (base 16)		EyeCross Co.,Inc.
-				3F  Iioka-Building
-				Tokyo  Ueno Taitoh-ku 3-4-1  110-0005
-				JP
-
-00-0B-D6   (hex)		Paxton Access Ltd
-000BD6     (base 16)		Paxton Access Ltd
-				Paxton House
-				Brighton  East Sussex  BN1 9HU
-				GB
-
-00-0B-D4   (hex)		Beijing Wise Technology & Science Development Co.Ltd
-000BD4     (base 16)		Beijing Wise Technology & Science Development Co.Ltd
-				3rd Floor Caihong Building, No.2,1st Wes
-				Beijing    100088
-				CN
-
-00-0C-1F   (hex)		Glimmerglass Networks
-000C1F     (base 16)		Glimmerglass Networks
-				26142 Eden Landing Road
-				Hayward  California  94545
-				US
-
-00-0C-20   (hex)		Fi WIn, Inc.
-000C20     (base 16)		Fi WIn, Inc.
-				8F, No. 10, Prosperity Rd. 1,
-				Hsin Chu    300
-				TW
-
-00-0C-15   (hex)		CyberPower Systems, Inc.
-000C15     (base 16)		CyberPower Systems, Inc.
-				6F, No. 32, Sec. 1, Chenggong Rd.
-				Taipei    115
-				TW
-
-00-0B-F8   (hex)		Infinera
-000BF8     (base 16)		Infinera
-				1322 Bordeaux Drive
-				Sunnyvale  CA  94089
-				US
-
-00-0B-FF   (hex)		Berkeley Camera Engineering
-000BFF     (base 16)		Berkeley Camera Engineering
-				127 National Street
-				Santa Cruz  CA  95060
-				US
-
-00-0C-16   (hex)		Concorde Microsystems Inc.
-000C16     (base 16)		Concorde Microsystems Inc.
-				10427 Cogdill Road, Suite 500
-				Knoxville  TN  37932
-				US
-
-00-0C-09   (hex)		Hitachi IE Systems Co., Ltd
-000C09     (base 16)		Hitachi IE Systems Co., Ltd
-				Saiwai-cho 120-1,Inazawa-shi
-				Inazawa-shi  Aichi  492-8622
-				JP
-
-00-0B-E7   (hex)		COMFLUX TECHNOLOGY INC.
-000BE7     (base 16)		COMFLUX TECHNOLOGY INC.
-				 Room 131,Bldg. 53,195-58,Sec.4,
-				Hsinchu    310
-				TW
-
-00-0B-EC   (hex)		NIPPON ELECTRIC INSTRUMENT, INC.
-000BEC     (base 16)		NIPPON ELECTRIC INSTRUMENT, INC.
-				3-56-21 Hirado
-				Totsuka-ku  Yokohama-shi  244-0802
-				JP
-
-00-0C-02   (hex)		ABB Oy
-000C02     (base 16)		ABB Oy
-				P.O.Box 89
-				Turku    FIN-20521
-				FI
-
-00-0B-71   (hex)		Litchfield Communications Inc.
-000B71     (base 16)		Litchfield Communications Inc.
-				27 Princeton Road
-				Watertown  CT  06795
-				US
-
-00-0B-74   (hex)		Kingwave Technology Co., Ltd.
-000B74     (base 16)		Kingwave Technology Co., Ltd.
-				18F-3, No. 186, Jian-Yi Rd.
-				Chung-Ho  Taipei  235
-				TW
-
-00-0B-73   (hex)		Kodeos Communications
-000B73     (base 16)		Kodeos Communications
-				111 Corporate Blvd
-				South Plainfield  NJ  07080
-				US
-
-00-0B-76   (hex)		ET&T Technology Co. Ltd.
-000B76     (base 16)		ET&T Technology Co. Ltd.
-				6F No.101, SongJiang Rd.
-				Taipei    104
-				TW
-
-00-0B-5E   (hex)		Audio Engineering Society Inc.
-000B5E     (base 16)		Audio Engineering Society Inc.
-				60 East 42nd Street, Suite #2520
-				New York  NY  10165-2520
-				US
-
-00-0B-60   (hex)		Cisco Systems, Inc
-000B60     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-65   (hex)		Sy.A.C. srl
-000B65     (base 16)		Sy.A.C. srl
-				via Caboto 19/1
-				Trieste    34147
-				IT
-
-00-0B-5F   (hex)		Cisco Systems, Inc
-000B5F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-61   (hex)		Friedrich Lütze GmbH & Co. KG
-000B61     (base 16)		Friedrich Lütze GmbH & Co. KG
-				Bruckwiesenstraße 17 - 19
-				Weinstadt (Großheppach)  BW  71384
-				DE
-
-00-0B-59   (hex)		ScriptPro, LLC
-000B59     (base 16)		ScriptPro, LLC
-				5828 Reeds Rd.
-				Mission  Kansas  66202
-				US
-
-00-0B-5C   (hex)		Newtech Co.,Ltd
-000B5C     (base 16)		Newtech Co.,Ltd
-				K-Bldg 1-7-7 Shibadaimon Minato-ku
-				Tokyo    105-0012
-				JP
-
-00-0B-7E   (hex)		SAGINOMIYA Seisakusho Inc.
-000B7E     (base 16)		SAGINOMIYA Seisakusho Inc.
-				535 Sasai
-				Sayamashi  Saitamaken  350-1395
-				JP
-
-00-0B-80   (hex)		Lycium Networks
-000B80     (base 16)		Lycium Networks
-				9 Hamenofim St.
-				Herzliya  Israel  46733
-				IL
-
-00-0B-A7   (hex)		Maranti Networks
-000BA7     (base 16)		Maranti Networks
-				3061-B Zanker Road
-				San Jose  CA  95134
-				US
-
-00-0B-AA   (hex)		Aiphone co.,Ltd
-000BAA     (base 16)		Aiphone co.,Ltd
-				2-18 Jinno-Cho
-				Nagoya  Aichi-ken  456-8666
-				JP
-
-00-0B-A4   (hex)		Shiron Satellite Communications Ltd. (1996)
-000BA4     (base 16)		Shiron Satellite Communications Ltd. (1996)
-				23 Hasivim St.
-				Petach Tikva    49170
-				IL
-
-00-0B-D0   (hex)		XiMeta Technology Americas Inc.
-000BD0     (base 16)		XiMeta Technology Americas Inc.
-				54 Ray Street
-				New Brunswick  NJ  08901
-				US
-
-00-0B-C5   (hex)		SMC Networks, Inc.
-000BC5     (base 16)		SMC Networks, Inc.
-				38 Tesla
-				Irvine  CA  92618
-				US
-
-00-0B-C6   (hex)		ISAC, Inc.
-000BC6     (base 16)		ISAC, Inc.
-				PO Box 7682
-				Auburn  CA  95604
-				US
-
-00-0B-C1   (hex)		Bay Microsystems, Inc.
-000BC1     (base 16)		Bay Microsystems, Inc.
-				2055 Gateway Place
-				Santa Jose  CA  95110
-				US
-
-00-0B-8B   (hex)		KERAJET, S.A.
-000B8B     (base 16)		KERAJET, S.A.
-				Avda. del Boverot, 24
-				Almazora  Castellon  E-12550
-				ES
-
-00-0B-89   (hex)		Top Global Technology, Ltd.
-000B89     (base 16)		Top Global Technology, Ltd.
-				Room 3310, China World Tower No. 1
-				Beijing  Beijing  100004
-				CN
-
-00-0B-99   (hex)		SensAble Technologies, Inc.
-000B99     (base 16)		SensAble Technologies, Inc.
-				15 Constitution Way
-				Woburn  MA  01801
-				US
-
-00-0B-9C   (hex)		TriBeam Technologies, Inc.
-000B9C     (base 16)		TriBeam Technologies, Inc.
-				116 W. Eastman St., suite 208
-				Arlington Heights  IL  60004
-				US
-
-00-0B-7C   (hex)		Telex Communications
-000B7C     (base 16)		Telex Communications
-				8601 E. Cornhusker Hwy
-				Lincoln  NE  68505
-				US
-
-00-0B-83   (hex)		DATAWATT B.V.
-000B83     (base 16)		DATAWATT B.V.
-				HOUTSTRAAT 5
-				WOLVEGA    NL-8471-ZX
-				NL
-
-00-0B-20   (hex)		Hirata corporation
-000B20     (base 16)		Hirata corporation
-				111 Hitotsugi, Ueki, Kamoto,
-				  Kumamoto  861-0198
-				JP
-
-00-0B-22   (hex)		Environmental Systems and Services
-000B22     (base 16)		Environmental Systems and Services
-				20 Council Street
-				Hawthorn East  Victoria  3123
-				AU
-
-00-0B-1B   (hex)		Systronix, Inc.
-000B1B     (base 16)		Systronix, Inc.
-				939 Edison St.
-				Salt Lake City  Utah  84111
-				US
-
-00-0B-03   (hex)		Taekwang Industrial Co., Ltd
-000B03     (base 16)		Taekwang Industrial Co., Ltd
-				#191-1, Anyang-7Dong, Manan-Gu
-				Anyang-Si  South Korea  430-017
-				KR
-
-00-0B-01   (hex)		DAIICHI ELECTRONICS CO., LTD.
-000B01     (base 16)		DAIICHI ELECTRONICS CO., LTD.
-				1-11-13
-				Hitotsuya  Adachi-ku Tokyo  121-8639
-				JP
-
-00-0B-3E   (hex)		BittWare, Inc
-000B3E     (base 16)		BittWare, Inc
-				31 B South Main St
-				Concord  NH  03301
-				US
-
-00-0B-29   (hex)		LS(LG) Industrial Systems co.,Ltd
-000B29     (base 16)		LS(LG) Industrial Systems co.,Ltd
-				533 Hogye-dong, Dongan-gu
-				Anyang-si  Gyeonggi-do  
-				KR
-
-00-0B-39   (hex)		Keisoku Giken Co.,Ltd.
-000B39     (base 16)		Keisoku Giken Co.,Ltd.
-				Tsuzuki-ku
-				Yokohama  Kanagawa  224-0037
-				JP
-
-00-0B-33   (hex)		Vivato Technologies
-000B33     (base 16)		Vivato Technologies
-				444 Cedros Ave
-				Solana Beach  CA  92027
-				US
-
-00-0B-05   (hex)		Pacific Broadband Networks
-000B05     (base 16)		Pacific Broadband Networks
-				Suite 15,  Building 3, 195 Wellington Road
-				Clayton  VIC  3168
-				AU
-
-00-0B-00   (hex)		FUJIAN START COMPUTER EQUIPMENT CO.,LTD
-000B00     (base 16)		FUJIAN START COMPUTER EQUIPMENT CO.,LTD
-				HONG SHAN YUAN ROAD NO.68 HONGSHAN,GULOU
-				FUZHOU  FUJIAN  350002
-				CN
-
-00-0B-5B   (hex)		Rincon Research Corporation
-000B5B     (base 16)		Rincon Research Corporation
-				101 N. Wilmot Rd.
-				Tucson  AZ  85711
-				US
-
-00-0A-F6   (hex)		Emerson Climate Technologies Retail Solutions, Inc.
-000AF6     (base 16)		Emerson Climate Technologies Retail Solutions, Inc.
-				1640 Airport Rd
-				Kennesaw  GA  30144-7038
-				US
-
-00-0B-11   (hex)		HIMEJI ABC TRADING CO.,LTD.
-000B11     (base 16)		HIMEJI ABC TRADING CO.,LTD.
-				1-8-22
-				HJMEJI  HYOGO  670-0883
-				JP
-
-00-0B-41   (hex)		Ing. Büro Dr. Beutlhauser
-000B41     (base 16)		Ing. Büro Dr. Beutlhauser
-				Roemerweg 4
-				  Grassau  D-83224
-				DE
-
-00-0A-EA   (hex)		ADAM ELEKTRONIK LTD. ŞTI
-000AEA     (base 16)		ADAM ELEKTRONIK LTD. ŞTI
-				UZUNAYNA CAD. CELENK SOK. NO:1 Çakmak
-				İstanbul    81260
-				TR
-
-00-0A-E3   (hex)		YANG MEI TECHNOLOGY CO., LTD
-000AE3     (base 16)		YANG MEI TECHNOLOGY CO., LTD
-				21, Alley 1, Lane 342
-				Taipei    114
-				TW
-
-00-0A-DC   (hex)		RuggedCom Inc.
-000ADC     (base 16)		RuggedCom Inc.
-				30 Whitmore Road
-				Woodbridge  Ontario  L4L 7Z4
-				CA
-
-00-0A-B7   (hex)		Cisco Systems, Inc
-000AB7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0A-AD   (hex)		Stargames Corporation
-000AAD     (base 16)		Stargames Corporation
-				13 Sheridan Close
-				Milperra  NSW  2031
-				AU
-
-00-0A-B1   (hex)		GENETEC Corporation
-000AB1     (base 16)		GENETEC Corporation
-				BYGS Shinjyuku Bldg. 5F
-				Shinjuku-ku  Tokyo  162-0022
-				JP
-
-00-0A-B9   (hex)		Astera Technologies Corp.
-000AB9     (base 16)		Astera Technologies Corp.
-				 2380 Waverley Street
-				Palo Alto  CA  94301
-				US
-
-00-0A-90   (hex)		Bayside Interactive, Inc.
-000A90     (base 16)		Bayside Interactive, Inc.
-				330 Biscayne Blvd.
-				Miami  FL  33132
-				US
-
-00-0A-9D   (hex)		King Young Technology Co. Ltd.
-000A9D     (base 16)		King Young Technology Co. Ltd.
-				1Fl., No. 9, Lane 26, Gangchi Rd., Neihu
-				Taipei    114
-				TW
-
-00-0A-A1   (hex)		V V S Limited
-000AA1     (base 16)		V V S Limited
-				HPIC, 1. Ainslie Road ,
-				Glasgow  Scotland  G52 4RU
-				GB
-
-00-0A-A4   (hex)		SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD
-000AA4     (base 16)		SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD
-				FL.25A,NO.8 CHANGYANG ROAD
-				SHANGHAI    200082
-				CN
-
-00-0A-9E   (hex)		BroadWeb Corportation
-000A9E     (base 16)		BroadWeb Corportation
-				3F, 24-1, Industry East Rd., IV,
-				  Hsin-Chu  300
-				TW
-
-00-0A-E0   (hex)		Fujitsu Softek
-000AE0     (base 16)		Fujitsu Softek
-				1250 East Arques Ave
-				Sunnyvale  Ca  94085
-				US
-
-00-0A-8B   (hex)		Cisco Systems, Inc
-000A8B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0A-88   (hex)		InCypher S.A.
-000A88     (base 16)		InCypher S.A.
-				18 rue de l'Eau
-				Luxembourg    1449
-				LU
-
-00-0A-BB   (hex)		Taiwan Secom Co,. Ltd
-000ABB     (base 16)		Taiwan Secom Co,. Ltd
-				13F, 108, Sec1, Shin-Tai 5th Road
-				Hsi-Chih  Taipei County  221
-				TW
-
-00-0A-7C   (hex)		Tecton Ltd
-000A7C     (base 16)		Tecton Ltd
-				Fishers Court
-				Eastleigh  Hampshire  SO50 7HG
-				GB
-
-00-0A-6E   (hex)		Harmonic, Inc
-000A6E     (base 16)		Harmonic, Inc
-				4300 North First Street
-				San Jose  CA  95134
-				US
-
-00-0A-6D   (hex)		EKS Elektronikservice GmbH
-000A6D     (base 16)		EKS Elektronikservice GmbH
-				Enzstr. 9
-				Kornwestheim  Baden-Württemberg  70806
-				DE
-
-00-0A-43   (hex)		Chunghwa Telecom Co., Ltd.
-000A43     (base 16)		Chunghwa Telecom Co., Ltd.
-				12, Lane 551, Min-Tsu Road
-				Taoyuan    326
-				TW
-
-00-0A-45   (hex)		Audio-Technica Corp.
-000A45     (base 16)		Audio-Technica Corp.
-				Naruse 1,348
-				Machida  Tokyo  194-8566
-				JP
-
-00-0A-35   (hex)		Xilinx
-000A35     (base 16)		Xilinx
-				2100 Logic Drive
-				San Jose  CA  94110
-				US
-
-00-0A-3B   (hex)		GCT Semiconductor, Inc
-000A3B     (base 16)		GCT Semiconductor, Inc
-				2121 Ringwood Avenue
-				San Jose  CA  95131
-				US
-
-00-0A-74   (hex)		Manticom Networks Inc.
-000A74     (base 16)		Manticom Networks Inc.
-				14016-C Sullyfield Circle
-				Chantilly  VA  20151
-				US
-
-00-0A-6F   (hex)		ZyFLEX Technologies Inc
-000A6F     (base 16)		ZyFLEX Technologies Inc
-				2Fl. No. 58 Park Ave. II
-				S.B.I.P., Hsinchu    30077
-				TW
-
-00-0A-63   (hex)		DHD GmbH
-000A63     (base 16)		DHD GmbH
-				Haferkornstrasse 5
-				Leipzig  Sachsen  04129
-				DE
-
-00-0A-2E   (hex)		MAPLE NETWORKS CO., LTD
-000A2E     (base 16)		MAPLE NETWORKS CO., LTD
-				602, Dongwha
-				SEOUL    156-010
-				KR
-
-00-0A-2D   (hex)		Cabot Communications Limited
-000A2D     (base 16)		Cabot Communications Limited
-				Verona House
-				Bristol  Gloucestershire  BS16 3RY
-				US
-
-00-0A-25   (hex)		CERAGON NETWORKS
-000A25     (base 16)		CERAGON NETWORKS
-				24 RAUEL WALLENBERG STREET
-				TEL-AVIV    96719
-				IL
-
-00-0A-21   (hex)		Integra Telecom Co. Ltd
-000A21     (base 16)		Integra Telecom Co. Ltd
-				7th floor Hwayoung Bld. 112-2
-				Seoul    
-				KR
-
-00-0A-1E   (hex)		Red-M Products Limited
-000A1E     (base 16)		Red-M Products Limited
-				Neptune House
-				Wooburn Green  Buckinghamshire  HP10 0HH
-				GB
-
-00-0A-4B   (hex)		DataPower Technology, Inc.
-000A4B     (base 16)		DataPower Technology, Inc.
-				One Alewife Center
-				Cambridge  MA  02140
-				US
-
-00-0A-33   (hex)		Emulex Corporation
-000A33     (base 16)		Emulex Corporation
-				2021 Opportunity Drive
-				Roseville  CA  95678
-				US
-
-00-0A-67   (hex)		OngCorp
-000A67     (base 16)		OngCorp
-				481 Hackensack Ave.
-				Hackensack  NJ  07601
-				US
-
-00-09-F9   (hex)		ART JAPAN CO., LTD.
-0009F9     (base 16)		ART JAPAN CO., LTD.
-				322-7, Ichinotsubo,
-				Kawasaki  Kanagawa  211-0016
-				JP
-
-00-09-FC   (hex)		IPFLEX Inc.
-0009FC     (base 16)		IPFLEX Inc.
-				Mowa-Bldg 3F, 1-16-6
-				Shibuya-ku  Tokyo  150-0021
-				JP
-
-00-09-FD   (hex)		Ubinetics Limited
-0009FD     (base 16)		Ubinetics Limited
-				Cambridge Technology Centre
-				Melbourn  Hertfordshire  SG8 6DP
-				GB
-
-00-09-F7   (hex)		SED, a division of Calian
-0009F7     (base 16)		SED, a division of Calian
-				18 Innnovation Boulevard
-				Saskatoon  Saskatchewan (SK)  S7K 3P7
-				CA
-
-00-09-E2   (hex)		Sinbon Electronics Co., Ltd.
-0009E2     (base 16)		Sinbon Electronics Co., Ltd.
-				4F-13, No. 79, Sec 1, Hsin Tai Wu Rd.
-				Hsi-Chih, Taipei    221
-				TW
-
-00-09-DA   (hex)		Control Module Inc.
-0009DA     (base 16)		Control Module Inc.
-				227 Brainard Road
-				Enfield  CT  06082
-				US
-
-00-09-D7   (hex)		DC Security Products
-0009D7     (base 16)		DC Security Products
-				One Lindsay Circle
-				San Francisco  California  94124
-				US
-
-00-09-D8   (hex)		Fält Communications AB
-0009D8     (base 16)		Fält Communications AB
-				Kylgränd 6a
-				SE 906 20  Umeå  
-				SE
-
-00-0A-14   (hex)		TECO a.s.
-000A14     (base 16)		TECO a.s.
-				Havlickova 260
-				KOLIN  CZ  280 58
-				CZ
-
-00-0A-0B   (hex)		Sealevel Systems, Inc.
-000A0B     (base 16)		Sealevel Systems, Inc.
-				155 Technology Place
-				Liberty  SC  29657
-				US
-
-00-0A-10   (hex)		FAST media integrations AG
-000A10     (base 16)		FAST media integrations AG
-				Schöngrund 26
-				Rotkreuz  Canton of Zug  6343
-				CH
-
-00-09-DB   (hex)		eSpace
-0009DB     (base 16)		eSpace
-				9623 Simsbury Ct.
-				Twinsburg  OH  44087-3220
-				US
-
-00-09-D5   (hex)		Signal Communication, Inc.
-0009D5     (base 16)		Signal Communication, Inc.
-				100 Wood Ave South
-				Iselin  NJ  08830
-				US
-
-00-09-D3   (hex)		Western DataCom Co., Inc.
-0009D3     (base 16)		Western DataCom Co., Inc.
-				925-D Bassett Rd.
-				Westlake  OH  44145
-				US
-
-00-09-BC   (hex)		Utility, Inc
-0009BC     (base 16)		Utility, Inc
-				250 E Ponce de Leon Ave Suite 700
-				Decatur  GA  30030
-				US
-
-00-09-BE   (hex)		Mamiya-OP Co.,Ltd.
-0009BE     (base 16)		Mamiya-OP Co.,Ltd.
-				3-23-10, Negishi Minami-ku
-				Saitama-shi  Saitama  336-8581
-				JP
-
-00-09-E6   (hex)		Cyber Switching Inc.
-0009E6     (base 16)		Cyber Switching Inc.
-				1800 De La Cruz Blvd.
-				Santa Clara  CA  95050
-				US
-
-00-09-FB   (hex)		Philips Patient Monitoring
-0009FB     (base 16)		Philips Patient Monitoring
-				Hewlett-Packard-Str.2
-				Boeblingen    71034
-				DE
-
-00-09-8F   (hex)		Cetacean Networks
-00098F     (base 16)		Cetacean Networks
-				110 Corporate Drive
-				Portsmouth  NH  03801
-				US
-
-00-09-87   (hex)		NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.
-000987     (base 16)		NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.
-				Kasugaura
-				Oita-City  OITA  870-8632
-				JP
-
-00-09-89   (hex)		VividLogic Inc.
-000989     (base 16)		VividLogic Inc.
-				40994 Encyclopedia Circle
-				Fremont  CA  94538
-				US
-
-00-09-86   (hex)		Metalink LTD.
-000986     (base 16)		Metalink LTD.
-				Yakum Business Park
-				Yakum  HOF HASHARON  60972
-				IL
-
-00-09-8C   (hex)		Option Wireless Sweden
-00098C     (base 16)		Option Wireless Sweden
-				Sturegatan 2
-				  Sundbyberg  SE-172 24
-				SE
-
-00-09-85   (hex)		Auto Telecom Company
-000985     (base 16)		Auto Telecom Company
-				10F, No.3,Lane 16, Sec.2, Sichuan Rd.
-				Banqiao City  Taipei County  22061
-				TW
-
-00-09-8D   (hex)		Velocity Semiconductor
-00098D     (base 16)		Velocity Semiconductor
-				Suite 32 Wey House
-				Weybridge  Surrey  KT13 8NA
-				GB
-
-00-09-81   (hex)		Newport Networks
-000981     (base 16)		Newport Networks
-				Enterprise House
-				Chepstow  Monmouthshire  NP16 5PB
-				GB
-
-00-09-55   (hex)		Young Generation International Corp.
-000955     (base 16)		Young Generation International Corp.
-				4F.,No. 188, Minchuan Rd., Shindian City
-				Shindian    231
-				TW
-
-00-09-4A   (hex)		Homenet Communications
-00094A     (base 16)		Homenet Communications
-				Innovation Centre
-				Limerick    
-				IE
-
-00-09-4B   (hex)		FillFactory NV
-00094B     (base 16)		FillFactory NV
-				Schalienhoevedreef 20B
-				B-2800 Mechelen    
-				BE
-
-00-09-4D   (hex)		Braintree Communications Pty Ltd
-00094D     (base 16)		Braintree Communications Pty Ltd
-				Unit 3
-				Slacks Creek  QLD  4127
-				AU
-
-00-09-50   (hex)		Independent Storage Corporation
-000950     (base 16)		Independent Storage Corporation
-				6273 Monarch Park Place
-				Niwot  Colorado  80503
-				US
-
-00-09-54   (hex)		AMiT spol. s. r. o.
-000954     (base 16)		AMiT spol. s. r. o.
-				Naskove 3
-				150 00  Praha 5  
-				CZ
-
-00-09-92   (hex)		InterEpoch Technology,INC.
-000992     (base 16)		InterEpoch Technology,INC.
-				7F,No.3,Alley 6,Lane 235,Pao-Chiao Rd
-				Hsin-Tien  Taipei Hsien  231
-				TW
-
-00-09-95   (hex)		Castle Technology Ltd
-000995     (base 16)		Castle Technology Ltd
-				Ore Trading Estate
-				Framlingham  Suffolk  IP13 9LL
-				GB
-
-00-09-98   (hex)		Capinfo Company Limited
-000998     (base 16)		Capinfo Company Limited
-				7th Floor A Corporate Square, NO. 35 Fin
-				Beijing    100032
-				CN
-
-00-09-B6   (hex)		Cisco Systems, Inc
-0009B6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-B3   (hex)		MCM Systems Ltd
-0009B3     (base 16)		MCM Systems Ltd
-				Kolomban 9F
-				Ankaran  Slovenija  6280
-				SI
-
-00-09-5C   (hex)		Philips Medical Systems - Cardiac and Monitoring Systems (CM
-00095C     (base 16)		Philips Medical Systems - Cardiac and Monitoring Systems (CM
-				3000 Minuteman Road
-				Andover  Massachusetts  01810
-				US
-
-00-09-58   (hex)		INTELNET S.A.
-000958     (base 16)		INTELNET S.A.
-				FRANCISCO OLIVAN BAYLE, 4
-				ZARAGOZA    50015
-				ES
-
-00-09-A3   (hex)		Leadfly Techologies Corp. Ltd.
-0009A3     (base 16)		Leadfly Techologies Corp. Ltd.
-				9Fl, No.260, Bade Rd.,
-				Taipei    104
-				TW
-
-00-09-A5   (hex)		HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD
-0009A5     (base 16)		HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD
-				HEUNGJIN BLDG 3F, #217-3 POI-DONG, KANGN
-				SEOUL    135-963
-				KR
-
-00-09-62   (hex)		Sonitor Technologies AS
-000962     (base 16)		Sonitor Technologies AS
-				Forskningsveien 1B
-				Oslo  Blindern  N-0134
-				NO
-
-00-09-5D   (hex)		Dialogue Technology Corp.
-00095D     (base 16)		Dialogue Technology Corp.
-				10F, No. 196, Sec. 2, Jungshing Rd.
-				Shindian City  Taipei  231
-				TW
-
-00-09-9A   (hex)		ELMO COMPANY, LIMITED
-00099A     (base 16)		ELMO COMPANY, LIMITED
-				6-14, MEIZEN-CHO, MIZUHO-KU
-				NAGOYA  AICHI-Pref.  467-8567
-				JP
-
-00-09-9C   (hex)		Naval Research Laboratory
-00099C     (base 16)		Naval Research Laboratory
-				Code 5592
-				Washington  DC  20375-5000
-				US
-
-00-09-84   (hex)		MyCasa Network Inc.
-000984     (base 16)		MyCasa Network Inc.
-				200 Sheridan Ave #103
-				Palo Alto  CA  94306
-				US
-
-00-09-2B   (hex)		iQstor Networks, Inc.
-00092B     (base 16)		iQstor Networks, Inc.
-				2001 Corporate Center Drive
-				Newbury Park  CA  91320
-				US
-
-00-09-26   (hex)		YODA COMMUNICATIONS, INC.
-000926     (base 16)		YODA COMMUNICATIONS, INC.
-				2F, No.3-1, Industry East Road IX,
-				Hsinchu    300
-				TW
-
-00-09-27   (hex)		TOYOKEIKI CO.,LTD.
-000927     (base 16)		TOYOKEIKI CO.,LTD.
-				17-10-3,Shimosinjyo
-				Osaka    533-0021
-				JP
-
-00-09-23   (hex)		Heaman System Co., Ltd
-000923     (base 16)		Heaman System Co., Ltd
-				Building M6,National Hi-tech & Indus
-				Changsha  Hunan Province  410013
-				US
-
-00-09-1D   (hex)		Proteam Computer Corporation
-00091D     (base 16)		Proteam Computer Corporation
-				7F, No. 157. Section 2 Ta-Tung Rd
-				Hsi-Chih  Taipei Hsien  221
-				US
-
-00-08-EB   (hex)		ROMWin Co.,Ltd.
-0008EB     (base 16)		ROMWin Co.,Ltd.
-				406 OmiyaOhtaka Bldg. 1-103
-				Saitama    330-0843
-				US
-
-00-08-E8   (hex)		Excel Master Ltd.
-0008E8     (base 16)		Excel Master Ltd.
-				Room D, 3/F., Yeung Yiu Chung (No. 8) Ind. Bldg.
-				  Kowloon Bay  
-				HK
-
-00-08-DC   (hex)		Wiznet
-0008DC     (base 16)		Wiznet
-				5F Simmtech bldg., 228-3,
-				Seoul    135-830
-				KR
-
-00-08-DD   (hex)		Telena Communications, Inc.
-0008DD     (base 16)		Telena Communications, Inc.
-				6725 Mesa Ridge Road
-				San Diego  CA  92121
-				US
-
-00-08-E1   (hex)		Barix AG
-0008E1     (base 16)		Barix AG
-				Seefeld Strasse 303
-				Zürich  ZH  8008
-				US
-
-00-09-09   (hex)		Telenor Connect A/S
-000909     (base 16)		Telenor Connect A/S
-				Ellegaardvej 25L
-				Sønderborg  Als  6400
-				DK
-
-00-09-0A   (hex)		SnedFar Technology Co., Ltd.
-00090A     (base 16)		SnedFar Technology Co., Ltd.
-				15FL., No.866-2, Jung Jeng Rd.,
-				Junghe  Taipei  235
-				TW
-
-00-09-0F   (hex)		Fortinet Inc.
-00090F     (base 16)		Fortinet Inc.
-				1090 Kifer Road
-				Sunnyvale  CA  94086
-				US
-
-00-09-2C   (hex)		Hitpoint Inc.
-00092C     (base 16)		Hitpoint Inc.
-				No.7, Fenliao, 2nd Industrial Park, Link
-				Taipei    244
-				TW
-
-00-09-03   (hex)		Panasas, Inc
-000903     (base 16)		Panasas, Inc
-				15333 John F Kennedy Blvd, Suite 400
-				Houston  TX  77032-2351
-				US
-
-00-09-07   (hex)		Chrysalis Development
-000907     (base 16)		Chrysalis Development
-				8125 River Dr. Suite 100
-				Morton Grove  IL  60053
-				US
-
-00-09-06   (hex)		Esteem Networks
-000906     (base 16)		Esteem Networks
-				4F, No.900, Yishan Road
-				Shanghai    200233
-				CN
-
-00-09-52   (hex)		Auerswald GmbH & Co. KG
-000952     (base 16)		Auerswald GmbH & Co. KG
-				Vor den Grashoefen 1
-				Cremlingen  Niedersachsen  38162
-				DE
-
-00-09-44   (hex)		Cisco Systems, Inc
-000944     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-FB   (hex)		SonoSite, Inc.
-0008FB     (base 16)		SonoSite, Inc.
-				21919 30th Drive SE
-				Bothell  WA  98021
-				US
-
-00-08-EE   (hex)		Logic Product Development
-0008EE     (base 16)		Logic Product Development
-				411 Washington Ave N. Suite 101
-				Minneapolis  Minnesota  55401
-				US
-
-00-09-17   (hex)		WEM Technology Inc
-000917     (base 16)		WEM Technology Inc
-				8F-2, No 386, Sec 5 Nanjing East Road.
-				Taipei    105
-				TW
-
-00-08-81   (hex)		DIGITAL HANDS CO.,LTD.
-000881     (base 16)		DIGITAL HANDS CO.,LTD.
-				KAKiYA Building 2F
-				Yokohama  Kanagawa  222-0033
-				JP
-
-00-08-82   (hex)		SIGMA CORPORATION
-000882     (base 16)		SIGMA CORPORATION
-				2-3-15 Iwato-minami
-				Komae-shi  Tokyo  201-8630
-				JP
-
-00-08-73   (hex)		DapTechnology B.V.
-000873     (base 16)		DapTechnology B.V.
-				Zutphenstraat 67
-				EJ Oldenzaal    7575
-				NL
-
-00-08-7A   (hex)		Wipotec GmbH
-00087A     (base 16)		Wipotec GmbH
-				Adam-Hoffman Str. 26
-				    
-				DE
-
-00-08-71   (hex)		NORTHDATA Co., Ltd.
-000871     (base 16)		NORTHDATA Co., Ltd.
-				#302 KayangTechno-Town 1487
-				Kangseo-Gu  Seoul  157-810
-				KR
-
-00-08-B2   (hex)		SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD
-0008B2     (base 16)		SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD
-				4th Floor,Building 205,TaiRan Industry
-				Shenzhen  GUANGDONG  518040
-				CN
-
-00-08-B1   (hex)		ProQuent Systems
-0008B1     (base 16)		ProQuent Systems
-				67 Forest Street
-				Marlboro  MA  01752
-				US
-
-00-08-AF   (hex)		Novatec Corporation
-0008AF     (base 16)		Novatec Corporation
-				2-19-2 Nishi-Gotanda
-				Shinagawa-ku  Tokyo  141-0031
-				JP
-
-00-08-A6   (hex)		Multiware & Image Co., Ltd.
-0008A6     (base 16)		Multiware & Image Co., Ltd.
-				Saedong Bldg. 65-25,
-				Pusan    606-032
-				KR
-
-00-08-7E   (hex)		Bon Electro-Telecom Inc.
-00087E     (base 16)		Bon Electro-Telecom Inc.
-				Gayang 1st Factory 701, 14-81
-				Seoul    157-808
-				KR
-
-00-08-80   (hex)		BroadTel Canada Communications inc.
-000880     (base 16)		BroadTel Canada Communications inc.
-				3700 Griffith, Suite 389
-				Saint-Laurent  Quebec  H4T 2B3
-				CA
-
-00-08-6D   (hex)		Missouri FreeNet
-00086D     (base 16)		Missouri FreeNet
-				PO Box 771026
-				St. Louis  Missouri  63177-1026
-				US
-
-00-08-D4   (hex)		IneoQuest Technologies, Inc
-0008D4     (base 16)		IneoQuest Technologies, Inc
-				1931 Washington St
-				Canton  Massachusetts  02021
-				US
-
-00-08-D6   (hex)		HASSNET Inc.
-0008D6     (base 16)		HASSNET Inc.
-				2F Missy2000 B/D 725, SooSeo-Dong,
-				Seoul    135-757
-				KR
-
-00-08-CE   (hex)		IPMobileNet Inc.
-0008CE     (base 16)		IPMobileNet Inc.
-				11909 E Telegraph Rd.
-				Santa Fe Springs  CA  90670
-				US
-
-00-08-C2   (hex)		Cisco Systems, Inc
-0008C2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-C0   (hex)		ASA SYSTEMS
-0008C0     (base 16)		ASA SYSTEMS
-				S245 Korea Maritime University, 1 Dongsa
-				Busan  Busan Metropolitan City  606-791
-				KR
-
-00-08-A3   (hex)		Cisco Systems, Inc
-0008A3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-9E   (hex)		Beijing Enter-Net co.LTD
-00089E     (base 16)		Beijing Enter-Net co.LTD
-				NO 1 courtyard,
-				Beijing    100085
-				US
-
-00-08-B4   (hex)		SYSPOL
-0008B4     (base 16)		SYSPOL
-				4th Fl,SYSPOL B/D, Bangbae 4 Dong, Seoch
-				Seoul    137-064
-				US
-
-00-08-B3   (hex)		Fastwel
-0008B3     (base 16)		Fastwel
-				Profsoyuznaya 108,
-				Moscow    117313
-				RU
-
-00-08-8E   (hex)		Nihon Computer Co., Ltd.
-00088E     (base 16)		Nihon Computer Co., Ltd.
-				36-8 Higashitamachi
-				Hamamatsu  Shizuoka  430-0915
-				JP
-
-00-08-DA   (hex)		SofaWare Technologies Ltd.
-0008DA     (base 16)		SofaWare Technologies Ltd.
-				3 Hilazon St.
-				Ramat-Gan    52522
-				IL
-
-00-07-D5   (hex)		3e Technologies Int;., Inc.
-0007D5     (base 16)		3e Technologies Int;., Inc.
-				15800 Crabbs Branch Way
-				Rockville  MD  20855
-				US
-
-00-07-DB   (hex)		Kirana Networks, Inc.
-0007DB     (base 16)		Kirana Networks, Inc.
-				331 Newman Springs Road
-				Red Bank  NJ  07701
-				US
-
-00-08-6A   (hex)		Securiton Gmbh
-00086A     (base 16)		Securiton Gmbh
-				Von-Drais-Strasse 33
-				Achern    D-77855
-				DE
-
-00-08-63   (hex)		Entrisphere Inc.
-000863     (base 16)		Entrisphere Inc.
-				1601 S. De Anza Blvd.
-				Cupertino  CA  95014
-				US
-
-00-08-66   (hex)		DSX Access Systems, Inc.
-000866     (base 16)		DSX Access Systems, Inc.
-				10731 Rockwall Rd.
-				Dallas  TX  75238
-				US
-
-00-07-EF   (hex)		Lockheed Martin Tactical Systems
-0007EF     (base 16)		Lockheed Martin Tactical Systems
-				3333 Pilot Knob Road
-				Eagan  MN  55121
-				US
-
-00-07-F4   (hex)		Eletex Co., Ltd.
-0007F4     (base 16)		Eletex Co., Ltd.
-				8-2-56 Nankou-Higashi Suminoe-ku
-				    
-				JP
-
-00-07-DD   (hex)		Cradle Technologies
-0007DD     (base 16)		Cradle Technologies
-				3130 West Warren Ave.
-				Fremont  CA  94538
-				US
-
-00-08-1B   (hex)		Windigo Systems
-00081B     (base 16)		Windigo Systems
-				2210 O'Toole Ave. #200
-				San Jose  CA  95131
-				US
-
-00-07-FF   (hex)		Gluon Networks
-0007FF     (base 16)		Gluon Networks
-				5401 Old Redwood Hwy.
-				Petaluma  CA  94954
-				US
-
-00-07-F7   (hex)		Galtronics
-0007F7     (base 16)		Galtronics
-				4645 East Cotton Center Blvd.
-				Phoenix  AZ  85040
-				US
-
-00-08-5F   (hex)		Picanol N.V.
-00085F     (base 16)		Picanol N.V.
-				Polenlaan 3-7
-				    
-				BE
-
-00-08-52   (hex)		Davolink Co. Inc.
-000852     (base 16)		Davolink Co. Inc.
-				Room-604, Kumhwa Plaza,
-				Kyunggi-Do    435-040
-				KR
-
-00-08-04   (hex)		ICA Inc.
-000804     (base 16)		ICA Inc.
-				542-1 Noguki
-				    
-				JP
-
-00-08-57   (hex)		Polaris Networks, Inc.
-000857     (base 16)		Polaris Networks, Inc.
-				6810 Santa Teresa Blvd.
-				San Jose  CA  95119
-				US
-
-00-07-8B   (hex)		Wegener Communications, Inc.
-00078B     (base 16)		Wegener Communications, Inc.
-				11350 Technology Circle
-				Duluth  GA  30097
-				US
-
-00-07-83   (hex)		SynCom Network, Inc.
-000783     (base 16)		SynCom Network, Inc.
-				4F, No. 31, Hsintai Road, Chupei City,
-				    
-				TW
-
-00-07-87   (hex)		Idea System Co., Ltd.
-000787     (base 16)		Idea System Co., Ltd.
-				4-1-21 Shinmei-cho Okaya-shi
-				    
-				JP
-
-00-07-B9   (hex)		Ginganet Corporation
-0007B9     (base 16)		Ginganet Corporation
-				Kintetsu Shin Namba Building
-				Osaka Shi    1556-0017
-				JP
-
-00-04-7F   (hex)		Chr. Mayr GmbH & Co. KG
-00047F     (base 16)		Chr. Mayr GmbH & Co. KG
-				Eichenstraße 1
-				    
-				DE
-
-00-04-7B   (hex)		Schlumberger
-00047B     (base 16)		Schlumberger
-				Sugar Land Product Center
-				Sugar Land  TX  77478
-				US
-
-00-07-B4   (hex)		Cisco Systems, Inc
-0007B4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-B3   (hex)		Cisco Systems, Inc
-0007B3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-B5   (hex)		Any One Wireless Ltd.
-0007B5     (base 16)		Any One Wireless Ltd.
-				Namseoul Bd., 8F, 1304-3
-				Seoul    
-				KR
-
-00-07-85   (hex)		Cisco Systems, Inc
-000785     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-75   (hex)		Valence Semiconductor, Inc.
-000775     (base 16)		Valence Semiconductor, Inc.
-				41 Discovery
-				Irvine  CA  92618
-				US
-
-00-07-93   (hex)		Shin Satellite Public Company Limited
-000793     (base 16)		Shin Satellite Public Company Limited
-				41/103  Rattanathibet Road,
-				    
-				TH
-
-00-07-96   (hex)		LSI Systems, Inc.
-000796     (base 16)		LSI Systems, Inc.
-				10-1 Minami-kurokawa,
-				Kanagawa    215-0034
-				JP
-
-00-07-7F   (hex)		J Communications Co., Ltd.
-00077F     (base 16)		J Communications Co., Ltd.
-				124-4 Ojeon-Dong, Ulwang-City
-				    
-				KR
-
-00-07-71   (hex)		Embedded System Corporation
-000771     (base 16)		Embedded System Corporation
-				13-5, Takadanobaba 3-chome,
-				    
-				JP
-
-00-07-70   (hex)		Ubiquoss Inc
-000770     (base 16)		Ubiquoss Inc
-				Ubiquoss B/D, 68, Pangyo-ro 255beon-gil,
-				    
-				KR
-
-00-07-D1   (hex)		Spectrum Signal Processing Inc.
-0007D1     (base 16)		Spectrum Signal Processing Inc.
-				#200-2700 Production Way
-				    
-				CA
-
-00-07-A2   (hex)		Opteon Corporation
-0007A2     (base 16)		Opteon Corporation
-				70 Hastings Street
-				Wellesley  MA  02481
-				US
-
-00-06-F8   (hex)		The Boeing Company
-0006F8     (base 16)		The Boeing Company
-				5731 W. Las Positas Blvd.
-				Pleasanton  CA  94588
-				US
-
-00-06-FB   (hex)		Hitachi Printing Solutions, Ltd.
-0006FB     (base 16)		Hitachi Printing Solutions, Ltd.
-				1060, Takeda Hitachinaka-City
-				    312-8502
-				JP
-
-00-06-FC   (hex)		Fnet Co., Ltd.
-0006FC     (base 16)		Fnet Co., Ltd.
-				KFSB Bldg. 10th F. 16-2
-				Seoul    
-				KR
-
-00-06-F4   (hex)		Prime Electronics & Satellitics Inc.
-0006F4     (base 16)		Prime Electronics & Satellitics Inc.
-				69,Tung-Yuan Rd
-				Chung-Li City  Tao-Yuan County  32000
-				TW
-
-00-07-38   (hex)		Young Technology Co., Ltd.
-000738     (base 16)		Young Technology Co., Ltd.
-				D-604, Sigma-II Officetel,
-				Sungnam-si,  Kyeonggi-do  763-741
-				KR
-
-00-07-29   (hex)		Kistler Instrumente AG
-000729     (base 16)		Kistler Instrumente AG
-				Eulachstrasse 22
-				    
-				CH
-
-00-07-2A   (hex)		Innovance Networks
-00072A     (base 16)		Innovance Networks
-				19 Fairmont Avenue
-				    
-				CA
-
-00-07-4A   (hex)		Carl Valentin GmbH
-00074A     (base 16)		Carl Valentin GmbH
-				Neckarstrabe 78-80
-				    
-				DE
-
-00-07-3C   (hex)		Telecom Design
-00073C     (base 16)		Telecom Design
-				Voie Romaine, Zone de Remora
-				    
-				FR
-
-00-07-36   (hex)		Data Video Technologies Co., Ltd.
-000736     (base 16)		Data Video Technologies Co., Ltd.
-				7F, No. 352, Sec. 2
-				Taipei Hsien    
-				TW
-
-00-07-50   (hex)		Cisco Systems, Inc
-000750     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-42   (hex)		Ormazabal
-000742     (base 16)		Ormazabal
-				Parque Tecnologico 104
-				48170 Zamudio, Bizkaia    
-				ES
-
-00-07-4B   (hex)		Daihen Corporation
-00074B     (base 16)		Daihen Corporation
-				2-1-11 Tagawa Yodogawa-ku
-				    
-				JP
-
-00-07-64   (hex)		YoungWoo Telecom Co. Ltd.
-000764     (base 16)		YoungWoo Telecom Co. Ltd.
-				3F, Sehwa B/D, 355-1
-				Sungnam-Si  Kyungki-Do  
-				KR
-
-00-07-66   (hex)		Chou Chin Industrial Co., Ltd.
-000766     (base 16)		Chou Chin Industrial Co., Ltd.
-				9F, #35, Chiau An St. Chung Ho City,
-				    
-				TW
-
-00-07-61   (hex)		29530
-000761     (base 16)		29530
-				EPFL - Quartier de l'Innovation
-				Lausanne  CH  1015
-				CH
-
-00-07-55   (hex)		Lafon
-000755     (base 16)		Lafon
-				44 Avenue Victor Meunier
-				 Bassens    33530
-				FR
-
-00-07-59   (hex)		Boris Manufacturing Corp.
-000759     (base 16)		Boris Manufacturing Corp.
-				PO Box 601
-				Castle Point  NY  12511
-				US
-
-00-07-51   (hex)		m-u-t AG
-000751     (base 16)		m-u-t AG
-				Messgeräte für Medizin- und Umwelttechnik
-				Wedel    22880
-				DE
-
-00-07-19   (hex)		Mobiis Co., Ltd.
-000719     (base 16)		Mobiis Co., Ltd.
-				277-1, Shinhwa Bldg. 4F
-				Seoul,    
-				KR
-
-00-07-0D   (hex)		Cisco Systems, Inc
-00070D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-0E   (hex)		Cisco Systems, Inc
-00070E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-0B   (hex)		Novabase SGPS, SA
-00070B     (base 16)		Novabase SGPS, SA
-				Av. D Joao II, Lote 1.03.2.3
-				Lisboa    1998-031
-				PT
-
-00-07-10   (hex)		Adax, Inc.
-000710     (base 16)		Adax, Inc.
-				614 Bancroft Way
-				Berkeley  CA  94556
-				US
-
-00-06-E8   (hex)		Optical Network Testing, Inc.
-0006E8     (base 16)		Optical Network Testing, Inc.
-				55 Merchant St.
-				Honolulu  HI  96813
-				US
-
-00-06-EE   (hex)		Shenyang Neu-era Information & Technology Stock Co., Ltd
-0006EE     (base 16)		Shenyang Neu-era Information & Technology Stock Co., Ltd
-				8/F, the 21st Century Building,
-				Dvlpmnt Zone  Shenyang,  
-				CN
-
-00-06-E2   (hex)		Ceemax Technology Co., Ltd.
-0006E2     (base 16)		Ceemax Technology Co., Ltd.
-				5f-7, 736, Chung Cheng Rd.,
-				    
-				TW
-
-00-06-A5   (hex)		PINON Corp.
-0006A5     (base 16)		PINON Corp.
-				Axis Gotanda Bldg.7F-701
-				Tokyo    141-0031
-				JP
-
-00-06-9D   (hex)		Petards Ltd
-00069D     (base 16)		Petards Ltd
-				390 Princesway, Team Valley
-				Gateshead  Tyne and Wear  NE11 OTU
-				GB
-
-00-06-A8   (hex)		KC Technology, Inc.
-0006A8     (base 16)		KC Technology, Inc.
-				1900 McCarthy Blvd.
-				Milpitas  CA  95035
-				US
-
-00-06-A0   (hex)		Mx Imaging
-0006A0     (base 16)		Mx Imaging
-				2894 Columbia Street
-				Torrance  CA  90503
-				US
-
-00-06-BE   (hex)		Baumer Optronic GmbH
-0006BE     (base 16)		Baumer Optronic GmbH
-				Badstraße 30
-				    
-				DE
-
-00-06-BA   (hex)		Westwave Communications
-0006BA     (base 16)		Westwave Communications
-				463 Aviation Blvd.
-				Santa Rosa  CA  95403
-				US
-
-00-06-C4   (hex)		Piolink Inc.
-0006C4     (base 16)		Piolink Inc.
-				IT Castle 1-401, 550-1 Gasan-dong,
-				Seoul    153-803
-				KR
-
-00-06-B5   (hex)		Source Photonics, Inc.
-0006B5     (base 16)		Source Photonics, Inc.
-				20550 Nordhoff St.
-				Chatsworth  CA  91311
-				US
-
-00-06-8F   (hex)		Telemonitor, Inc.
-00068F     (base 16)		Telemonitor, Inc.
-				9055F Guilford Road
-				Columbia  MD  21046
-				US
-
-00-06-DA   (hex)		ITRAN Communications Ltd.
-0006DA     (base 16)		ITRAN Communications Ltd.
-				1 Azrieli Center,
-				Tel Aviv 67021     67021
-				IL
-
-00-06-D0   (hex)		Elgar Electronics Corp.
-0006D0     (base 16)		Elgar Electronics Corp.
-				9250 Brown Deer Rd.
-				San Diego  CA  92121
-				US
-
-00-06-CC   (hex)		JMI Electronics Co., Ltd.
-0006CC     (base 16)		JMI Electronics Co., Ltd.
-				Nanyang B/D 3F, 25-4
-				Seoul    140-080
-				KR
-
-00-06-BF   (hex)		Accella Technologies Co., Ltd.
-0006BF     (base 16)		Accella Technologies Co., Ltd.
-				Rm 512 No. 680 Gui Ping Rd.
-				Shanghai    200233
-				CN
-
-00-06-90   (hex)		Euracom Communication GmbH
-000690     (base 16)		Euracom Communication GmbH
-				Franklinstraße 14
-				    
-				DE
-
-00-06-E1   (hex)		Techno Trade s.a
-0006E1     (base 16)		Techno Trade s.a
-				732a Chaussee de Bruxelles
-				    
-				BE
-
-00-06-2E   (hex)		Aristos Logic Corp.
-00062E     (base 16)		Aristos Logic Corp.
-				27051 Towne Centre Dr.
-				Foothill Ranch  CA  92610
-				US
-
-00-06-24   (hex)		Gentner Communications Corp.
-000624     (base 16)		Gentner Communications Corp.
-				1825 Research Way
-				Salt Lake City  UT  84119
-				US
-
-00-06-25   (hex)		The Linksys Group, Inc.
-000625     (base 16)		The Linksys Group, Inc.
-				17401 Armstrong Ave.
-				Irvine  CA  92614
-				US
-
-00-06-27   (hex)		Uniwide Technologies, Inc.
-000627     (base 16)		Uniwide Technologies, Inc.
-				Korea Development Bank B/D 5th Flr
-				Taejon  302-122,  
-				KR
-
-00-06-2A   (hex)		Cisco Systems, Inc
-00062A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-06-2C   (hex)		Bivio Networks
-00062C     (base 16)		Bivio Networks
-				4457 Willow Road,
-				Pleasanton  CA  94588
-				US
-
-00-06-21   (hex)		Hinox, Co., Ltd.
-000621     (base 16)		Hinox, Co., Ltd.
-				15-7 3-chome, Sennin-cho,
-				    193-0835
-				JP
-
-00-06-4E   (hex)		Broad Net Technology Inc.
-00064E     (base 16)		Broad Net Technology Inc.
-				5F, No.58, Lane 188, Rui Kuang Road
-				    
-				TW
-
-00-06-2D   (hex)		TouchStar Technologies, L.L.C.
-00062D     (base 16)		TouchStar Technologies, L.L.C.
-				5147 South Garnett Road
-				Tulsa  OK  74146
-				US
-
-00-06-46   (hex)		ShenZhen XunBao Network Technology Co Ltd
-000646     (base 16)		ShenZhen XunBao Network Technology Co Ltd
-				F3, R2-A Building, South District
-				Shen Zhen    
-				CN
-
-00-06-4B   (hex)		Alexon Co., Ltd.
-00064B     (base 16)		Alexon Co., Ltd.
-				3-207-1 Teramoto,
-				    
-				JP
-
-00-06-3C   (hex)		Intrinsyc Software International Inc.
-00063C     (base 16)		Intrinsyc Software International Inc.
-				885 Dunsmuir Street, Suite 380
-				Vancouver  B.C.  V6C 1N5
-				CA
-
-00-06-30   (hex)		Adtranz Sweden
-000630     (base 16)		Adtranz Sweden
-				Dept. TCC/TH
-				    
-				SE
-
-00-06-37   (hex)		Toptrend-Meta Information (ShenZhen) Inc.
-000637     (base 16)		Toptrend-Meta Information (ShenZhen) Inc.
-				2/F, Bldg. 3, Section A, Nor-East Zone
-				    
-				CN
-
-00-06-1C   (hex)		Hoshino Metal Industries, Ltd.
-00061C     (base 16)		Hoshino Metal Industries, Ltd.
-				645 Yamanokami, Yabutsuka,
-				    379-2302
-				JP
-
-00-06-23   (hex)		MGE UPS Systems France
-000623     (base 16)		MGE UPS Systems France
-				140 Avenue Jean Kuntzmann
-				    
-				FR
-
-00-06-0B   (hex)		Artesyn Embedded Technologies
-00060B     (base 16)		Artesyn Embedded Technologies
-				2900 S. Diablo Way Suite 190
-				Tempe  AZ  85282
-				US
-
-00-06-7E   (hex)		WinCom Systems, Inc.
-00067E     (base 16)		WinCom Systems, Inc.
-				10900 World Trade Blvd.
-				Morrisville  NC  27560
-				US
-
-00-06-77   (hex)		SICK AG
-000677     (base 16)		SICK AG
-				Erwin-Sick Str.1
-				Waldkirch    D-79183
-				DE
-
-00-06-66   (hex)		Roving Networks
-000666     (base 16)		Roving Networks
-				809 University Avenue
-				Los Gatos  CA  95032
-				US
-
-00-06-67   (hex)		Tripp Lite
-000667     (base 16)		Tripp Lite
-				1111 W. 35th Street
-				Chicago  IL  60609
-				US
-
-00-06-4D   (hex)		Sencore
-00064D     (base 16)		Sencore
-				3200 Sencore Dr.
-				Sioux Falls  SD  57107
-				US
-
-00-06-60   (hex)		NADEX Co., Ltd.
-000660     (base 16)		NADEX Co., Ltd.
-				1 Omiyamae, Tokushige,
-				Aichi    481-0038
-				JP
-
-00-06-79   (hex)		Konami Corporation
-000679     (base 16)		Konami Corporation
-				11-14-5 Akasaka, Minato-ku,
-				    
-				JP
-
-00-06-6C   (hex)		Robinson Corporation
-00066C     (base 16)		Robinson Corporation
-				12F, No. 278 Ho Ping E. Rd.,
-				Taipei    
-				TW
-
-00-06-15   (hex)		Kimoto Electric Co., Ltd.
-000615     (base 16)		Kimoto Electric Co., Ltd.
-				3-1 Funahashi-Cho,
-				    543-0024
-				JP
-
-00-06-0A   (hex)		Blue2space
-00060A     (base 16)		Blue2space
-				Arstaangsv. 9
-				    
-				SE
-
-00-05-CE   (hex)		Prolink Microsystems Corporation
-0005CE     (base 16)		Prolink Microsystems Corporation
-				6F, No. 349, Yang-Kuang St.
-				Nei-Hu  Taipei,  
-				TW
-
-00-05-C2   (hex)		Soronti, Inc.
-0005C2     (base 16)		Soronti, Inc.
-				12159 Business Park Dr, suite 140
-				Draper  Utah  84020
-				US
-
-00-05-DF   (hex)		Electronic Innovation, Inc.
-0005DF     (base 16)		Electronic Innovation, Inc.
-				12731 Cannington Way SW
-				  Calgary, AB  T2W 1Z7
-				CA
-
-00-05-DE   (hex)		Gi Fone Korea, Inc.
-0005DE     (base 16)		Gi Fone Korea, Inc.
-				Twin Bldg. 4th Fl,
-				Seoul,    
-				KR
-
-00-05-E0   (hex)		Empirix Corp.
-0005E0     (base 16)		Empirix Corp.
-				205 Lowell St.
-				Wilmington  MA  01887
-				US
-
-00-05-D8   (hex)		Arescom, Inc.
-0005D8     (base 16)		Arescom, Inc.
-				3541 Gateway Blvd.
-				Fremont  CA  94538
-				US
-
-00-05-E4   (hex)		Red Lion Controls Inc.
-0005E4     (base 16)		Red Lion Controls Inc.
-				20 Willow Springs Circle
-				York  PA  17402
-				US
-
-00-05-F2   (hex)		Power R, Inc.
-0005F2     (base 16)		Power R, Inc.
-				756 Aloha St.
-				Seattle  WA  98109
-				US
-
-00-05-F3   (hex)		Webyn
-0005F3     (base 16)		Webyn
-				26 Rue Oes Gaudines
-				    
-				FR
-
-00-06-01   (hex)		Otanikeiki Co., Ltd.
-000601     (base 16)		Otanikeiki Co., Ltd.
-				2-10-23 Hikari-Machi
-				    732-0052
-				JP
-
-00-06-05   (hex)		Inncom International, Inc.
-000605     (base 16)		Inncom International, Inc.
-				P.O. Box 1060
-				Old Lyme  CT  06371
-				US
-
-00-05-FA   (hex)		IPOptical, Inc.
-0005FA     (base 16)		IPOptical, Inc.
-				45940 Horseshoe Drive
-				Dulles  VA  20166
-				US
-
-00-05-E5   (hex)		Renishaw PLC
-0005E5     (base 16)		Renishaw PLC
-				New Mills, Wotton-under-Edge
-				    
-				GB
-
-00-05-F5   (hex)		Geospace Technologies
-0005F5     (base 16)		Geospace Technologies
-				7007 Pinemont
-				Houston  TX  77040
-				US
-
-00-05-FD   (hex)		PacketLight Networks Ltd.
-0005FD     (base 16)		PacketLight Networks Ltd.
-				27 Habarzel St.
-				Tel-Aviv    69710
-				IL
-
-00-05-D4   (hex)		FutureSmart Networks, Inc.
-0005D4     (base 16)		FutureSmart Networks, Inc.
-				6155 Almaden Expressway
-				San Jose  CA  95120
-				US
-
-00-05-C4   (hex)		Telect, Inc.
-0005C4     (base 16)		Telect, Inc.
-				2111 N. Molter Road
-				Liberty Lake  WA  99019
-				US
-
-00-05-A3   (hex)		QEI, Inc.
-0005A3     (base 16)		QEI, Inc.
-				60 Fadem Road
-				Springfield  NJ  07081
-				US
-
-00-05-9E   (hex)		Zinwell Corporation
-00059E     (base 16)		Zinwell Corporation
-				7F, No.512, Yuan-Shan Road
-				    
-				TW
-
-00-05-A5   (hex)		KOTT
-0005A5     (base 16)		KOTT
-				Suite 305 Daeha B/D
-				    135-080
-				KR
-
-00-05-B3   (hex)		Asahi-Engineering Co., Ltd.
-0005B3     (base 16)		Asahi-Engineering Co., Ltd.
-				3-6-12-2 Gakuenhigashi-cho
-				Tokyo    187-0043
-				JP
-
-00-05-9D   (hex)		Daniel Computing Systems, Inc.
-00059D     (base 16)		Daniel Computing Systems, Inc.
-				3208 8th Avenue NE #118
-				    T2A 7V8
-				CA
-
-00-05-A4   (hex)		Lucid Voice Ltd.
-0005A4     (base 16)		Lucid Voice Ltd.
-				5 Jabotinski Street
-				    
-				IL
-
-00-05-63   (hex)		J-Works, Inc.
-000563     (base 16)		J-Works, Inc.
-				12328 Gladstone St. #1
-				Sylmor  CA  91342
-				US
-
-00-05-57   (hex)		Agile TV Corporation
-000557     (base 16)		Agile TV Corporation
-				333 Ravenswood Ave.,
-				Menlo Park  CA  94025
-				US
-
-00-05-5B   (hex)		Charles Industries, Ltd.
-00055B     (base 16)		Charles Industries, Ltd.
-				5600 Apollo Dr.
-				Rolling Meadows  IL  60008
-				US
-
-00-05-54   (hex)		Rangestar Wireless
-000554     (base 16)		Rangestar Wireless
-				9565 Soquel Drive, Suite 100
-				Aptos  CA  95003
-				US
-
-00-05-53   (hex)		DVC Company, Inc.
-000553     (base 16)		DVC Company, Inc.
-				10200 Hwy 290 W.
-				Austin  TX  78236
-				US
-
-00-05-66   (hex)		Secui.com Corporation
-000566     (base 16)		Secui.com Corporation
-				17th Fl. Samsung Yeoksam Bldg.
-				Seoul    135-080
-				KR
-
-00-05-6C   (hex)		Hung Chang Co., Ltd.
-00056C     (base 16)		Hung Chang Co., Ltd.
-				1385-14, Juan-Dong,
-				    
-				KR
-
-00-05-5F   (hex)		Cisco Systems, Inc
-00055F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-5D   (hex)		D-LINK SYSTEMS, INC.
-00055D     (base 16)		D-LINK SYSTEMS, INC.
-				53 Discover Dr.
-				Irvine  CA  92618
-				US
-
-00-05-61   (hex)		nac Image Technology, Inc.
-000561     (base 16)		nac Image Technology, Inc.
-				8-7 Sanban-cho, Chiyoda-ku,
-				    
-				JP
-
-00-05-94   (hex)		HMS Industrial Networks
-000594     (base 16)		HMS Industrial Networks
-				PO Box 4126
-				SE30004    SE
-				SE
-
-00-05-6F   (hex)		Innomedia Technologies Pvt. Ltd.
-00056F     (base 16)		Innomedia Technologies Pvt. Ltd.
-				#3278, 12th Main Road
-				    
-				IN
-
-00-05-74   (hex)		Cisco Systems, Inc
-000574     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-67   (hex)		Etymonic Design, Inc.
-000567     (base 16)		Etymonic Design, Inc.
-				41 Byron Avenue
-				    NOL 1GO
-				CA
-
-00-05-65   (hex)		Tailyn Communication Company Ltd.
-000565     (base 16)		Tailyn Communication Company Ltd.
-				No. 62, Lane 205, Nan-San Road,
-				Taoyuan Hsien    
-				TW
-
-00-05-8E   (hex)		Flextronics International GmbH & Co. Nfg. KG
-00058E     (base 16)		Flextronics International GmbH & Co. Nfg. KG
-				Schrackgasse 9-15
-				Kindberg    8650
-				AT
-
-00-05-32   (hex)		Cisco Systems, Inc
-000532     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-36   (hex)		Danam Communications, Inc.
-000536     (base 16)		Danam Communications, Inc.
-				900-3, Hokye-dong, Dongan-gu,
-				    
-				KR
-
-00-05-42   (hex)		Otari, Inc.
-000542     (base 16)		Otari, Inc.
-				4-33-3 Kokuryo-cho,
-				    
-				JP
-
-00-05-37   (hex)		Nets Technology Co., Ltd.
-000537     (base 16)		Nets Technology Co., Ltd.
-				#B1 YungJun Bldg.
-				Seoul 135-090    135-090
-				KR
-
-00-05-7C   (hex)		RCO Security AB
-00057C     (base 16)		RCO Security AB
-				Box 705
-				    
-				SE
-
-00-05-83   (hex)		ImageCom Limited
-000583     (base 16)		ImageCom Limited
-				Cedars Park, Cedars Road,
-				    SL6 1RZ
-				GB
-
-00-05-4B   (hex)		Eaton Automation AG
-00054B     (base 16)		Eaton Automation AG
-				Spinnereistrasse 8
-				St.Gallen    9008 
-				CH
-
-00-04-C8   (hex)		LIBA Maschinenfabrik GmbH
-0004C8     (base 16)		LIBA Maschinenfabrik GmbH
-				PO Box 1120
-				    
-				DE
-
-00-04-CC   (hex)		Peek Traffic B.V.
-0004CC     (base 16)		Peek Traffic B.V.
-				Postbus 2542
-				  The  
-				NL
-
-00-04-BF   (hex)		VersaLogic Corp.
-0004BF     (base 16)		VersaLogic Corp.
-				12100 SW Tualatin Rd
-				Tualatin  OR  97062
-				US
-
-00-04-C3   (hex)		CASTOR Informatique
-0004C3     (base 16)		CASTOR Informatique
-				2, Rue Du Kefir
-				94537 Orly  Cedex  
-				FR
-
-00-04-F6   (hex)		Amphus
-0004F6     (base 16)		Amphus
-				2372 Qume Drive, #F
-				San Jose  CA  95131
-				US
-
-00-04-F4   (hex)		Infinite Electronics Inc.
-0004F4     (base 16)		Infinite Electronics Inc.
-				No.478-1, Sec 2
-				    
-				TW
-
-00-04-F1   (hex)		WhereNet
-0004F1     (base 16)		WhereNet
-				107 W. McKinney Avenue
-				Rogersville  TN  37857
-				US
-
-00-05-21   (hex)		Control Microsystems
-000521     (base 16)		Control Microsystems
-				48 Steacie Drive
-				Ottawa  Ontario  K2K 2A9
-				CA
-
-00-05-23   (hex)		AVL List GmbH
-000523     (base 16)		AVL List GmbH
-				Hans List Platz 1
-				Graz    8020
-				AT
-
-00-05-1F   (hex)		Taijin Media Co., Ltd.
-00051F     (base 16)		Taijin Media Co., Ltd.
-				640-8 Tungchon-Dong
-				Seoul    157-030
-				KR
-
-00-05-0C   (hex)		Network Photonics, Inc.
-00050C     (base 16)		Network Photonics, Inc.
-				451 Aviation Boulevard
-				Santa Rosa  CA  95403
-				US
-
-00-04-EC   (hex)		Memobox SA
-0004EC     (base 16)		Memobox SA
-				1, Place Dame Suzanne
-				    
-				FR
-
-00-04-E4   (hex)		Daeryung Ind., Inc.
-0004E4     (base 16)		Daeryung Ind., Inc.
-				#219-6, Kasan Dong,
-				Seoul  Seoul  KOREA
-				KR
-
-00-05-0A   (hex)		ICS Spa
-00050A     (base 16)		ICS Spa
-				Via Romano AL
-				    
-				IT
-
-00-05-11   (hex)		Complementary Technologies Ltd
-000511     (base 16)		Complementary Technologies Ltd
-				Comtech House, 28 Manchester Road
-				    BL5 3QJ
-				GB
-
-00-05-06   (hex)		Reddo Networks AB
-000506     (base 16)		Reddo Networks AB
-				Livdjursgatan 4
-				    
-				SE
-
-00-04-E2   (hex)		SMC Networks, Inc.
-0004E2     (base 16)		SMC Networks, Inc.
-				6 Hughes
-				Irvine  CA  92618
-				US
-
-00-04-CB   (hex)		Tdsoft Communication, Ltd.
-0004CB     (base 16)		Tdsoft Communication, Ltd.
-				60 Medinat Hayehudim St.
-				    
-				IL
-
-00-05-26   (hex)		IPAS GmbH
-000526     (base 16)		IPAS GmbH
-				Hölscherstr. 27
-				    
-				DE
-
-00-04-67   (hex)		Wuhan Research Institute of MII
-000467     (base 16)		Wuhan Research Institute of MII
-				88 Youkeyuan Road,
-				430074  430074  P.R.CHINA
-				CN
-
-00-04-5A   (hex)		The Linksys Group, Inc.
-00045A     (base 16)		The Linksys Group, Inc.
-				17401 Armstrong Ave.
-				Irvine  CA  92614
-				US
-
-00-04-63   (hex)		Bosch Security Systems
-000463     (base 16)		Bosch Security Systems
-				850 Greenfield Road
-				Lancaster  PA  17601-5874
-				US
-
-00-04-5C   (hex)		Mobiwave Pte Ltd
-00045C     (base 16)		Mobiwave Pte Ltd
-				Blk 16, Kallang Place
-				    339156
-				SG
-
-00-04-53   (hex)		YottaYotta, Inc.
-000453     (base 16)		YottaYotta, Inc.
-				6020- 104 Street
-				Edmonton, AB    T6H 5S4
-				CA
-
-00-04-50   (hex)		DMD Computers SRL
-000450     (base 16)		DMD Computers SRL
-				Via Monviso, 14
-				    
-				IT
-
-00-04-43   (hex)		Agilent Technologies, Inc.
-000443     (base 16)		Agilent Technologies, Inc.
-				5301 Stevens Creek Boulevard
-				Santa Clara  CA  95051
-				US
-
-00-04-49   (hex)		Mapletree Networks
-000449     (base 16)		Mapletree Networks
-				315 Norwood Park South
-				Norwood  MA  02062
-				US
-
-00-04-2F   (hex)		International Communications Products, Inc.
-00042F     (base 16)		International Communications Products, Inc.
-				4325 Woodland Park Drive
-				West Melbourne  FL  32904
-				US
-
-00-04-29   (hex)		Pixord Corporation
-000429     (base 16)		Pixord Corporation
-				6F, No. 12, Innovation 1st Rd.,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-04-26   (hex)		Autosys
-000426     (base 16)		Autosys
-				202 Ilsinpastel,
-				Seoul  Seoul  KOREA
-				KR
-
-00-04-B8   (hex)		Kumahira Co., Ltd.
-0004B8     (base 16)		Kumahira Co., Ltd.
-				4-34 Ujinahigashi 2-Chome
-				  JAPAN  734-8567
-				JP
-
-00-04-B5   (hex)		Equitrac Corporation
-0004B5     (base 16)		Equitrac Corporation
-				1905 N.W. 82nd Avenue
-				Miami  FL  33126
-				US
-
-00-04-B1   (hex)		Signal Technology, Inc.
-0004B1     (base 16)		Signal Technology, Inc.
-				3rd. Fl. Dabo Bldg.
-				Seoul  KOREA  138-110
-				KR
-
-00-04-51   (hex)		Medrad, Inc.
-000451     (base 16)		Medrad, Inc.
-				One Medrad Drive
-				Indianola  PA  15051
-				US
-
-00-04-83   (hex)		Deltron Technology, Inc.
-000483     (base 16)		Deltron Technology, Inc.
-				8F-3, No. 125, Lane 235
-				Taipei  TAIWAN,  R.O.C.
-				TW
-
-00-04-41   (hex)		Half Dome Systems, Inc.
-000441     (base 16)		Half Dome Systems, Inc.
-				155 B-1 Moffet Park Drive
-				Sunnyvale  CA  94089
-				US
-
-00-04-A5   (hex)		Barco Projection Systems NV
-0004A5     (base 16)		Barco Projection Systems NV
-				Noordlaan 5
-				    
-				BE
-
-00-04-82   (hex)		Medialogic Corp.
-000482     (base 16)		Medialogic Corp.
-				0-3, Toyamaken-Sangyou
-				    
-				JP
-
-00-03-CA   (hex)		MTS Systems Corp.
-0003CA     (base 16)		MTS Systems Corp.
-				3001 Sheldon Drive
-				Cary,  NC  27513
-				US
-
-00-03-C7   (hex)		hopf Elektronik GmbH
-0003C7     (base 16)		hopf Elektronik GmbH
-				Nottebohmstraße 41
-				58511  Lüdenscheid  
-				DE
-
-00-03-C2   (hex)		Solphone K.K.
-0003C2     (base 16)		Solphone K.K.
-				2-11-1 Kandatsukasa-cho
-				  101-0048  
-				JP
-
-00-03-F3   (hex)		Dazzle Multimedia, Inc.
-0003F3     (base 16)		Dazzle Multimedia, Inc.
-				47211 Bayside Parkway
-				Fremont  CA  94538
-				US
-
-00-03-EC   (hex)		ICG Research, Inc.
-0003EC     (base 16)		ICG Research, Inc.
-				775 B The Queens Way
-				M8Z  1N1  
-				CA
-
-00-03-E9   (hex)		Akara Canada, Inc.
-0003E9     (base 16)		Akara Canada, Inc.
-				150 Katimavik Road
-				CANADA  K2L  2N2
-				CA
-
-00-03-E5   (hex)		Hermstedt SG
-0003E5     (base 16)		Hermstedt SG
-				Carl-Reuther - Str. 3
-				    
-				DE
-
-00-04-21   (hex)		Ocular Networks
-000421     (base 16)		Ocular Networks
-				12700, Fair Lakes Circle
-				Fairfax  VA  22033
-				US
-
-00-04-24   (hex)		TMC s.r.l.
-000424     (base 16)		TMC s.r.l.
-				202 Via A. Costa
-				    
-				IT
-
-00-04-1D   (hex)		Corega of America
-00041D     (base 16)		Corega of America
-				P.O. Box 159
-				Bothell  WA  98041-0159
-				US
-
-00-04-1A   (hex)		Ines Test and Measurement GmbH & CoKG
-00041A     (base 16)		Ines Test and Measurement GmbH & CoKG
-				An der Mühlenaue 5
-				  Bad Nenndorf  31542
-				DE
-
-00-04-1E   (hex)		Shikoku Instrumentation Co., Ltd.
-00041E     (base 16)		Shikoku Instrumentation Co., Ltd.
-				777, Oosachou, Zentsuujishi,
-				    
-				JP
-
-00-04-13   (hex)		snom technology GmbH
-000413     (base 16)		snom technology GmbH
-				Wittestr 30 G
-				Berlin    13509
-				DE
-
-00-03-B4   (hex)		Macrotek International Corp.
-0003B4     (base 16)		Macrotek International Corp.
-				2F, No. 28, Lane 46
-				Taipei  Taipei  TAIWAN
-				TW
-
-00-03-A6   (hex)		Traxit Technology, Inc.
-0003A6     (base 16)		Traxit Technology, Inc.
-				256 Great Road,
-				Littleton  MA  01461
-				US
-
-00-03-A4   (hex)		Imation Corp.
-0003A4     (base 16)		Imation Corp.
-				1 Imation Place
-				Oakdale  MN  55128-3414
-				US
-
-00-03-AB   (hex)		Bridge Information Systems
-0003AB     (base 16)		Bridge Information Systems
-				717 Office Parkway
-				St. Louis  MO  63141
-				US
-
-00-04-03   (hex)		Nexsi Corporation
-000403     (base 16)		Nexsi Corporation
-				1959 Concourse Drive
-				San Jose  CA  95131
-				US
-
-00-04-06   (hex)		Fa. Metabox AG
-000406     (base 16)		Fa. Metabox AG
-				Daimlerring 37,
-				    
-				DE
-
-00-03-F8   (hex)		SanCastle Technologies, Inc.
-0003F8     (base 16)		SanCastle Technologies, Inc.
-				2107 North First Street
-				San Jose  CA  95131
-				US
-
-00-03-FA   (hex)		TiMetra Networks
-0003FA     (base 16)		TiMetra Networks
-				500 Ellis St.
-				Mountain View  CA  94043
-				US
-
-00-03-C6   (hex)		ICUE Systems, Inc.
-0003C6     (base 16)		ICUE Systems, Inc.
-				17489 Gale Avenue
-				City of Industry  CA  91748
-				US
-
-00-03-BB   (hex)		Signal Communications Limited
-0003BB     (base 16)		Signal Communications Limited
-				Unit 217, 2/F, HKITC,
-				  HONG  KONG
-				HK
-
-00-03-BE   (hex)		Netility
-0003BE     (base 16)		Netility
-				298 South Sunnyvale Ave.
-				Sunnyvale  CA  94086
-				US
-
-00-03-DF   (hex)		Desana Systems
-0003DF     (base 16)		Desana Systems
-				1805 McCandless Ave.
-				Milpitas  CA  95035
-				US
-
-00-03-DA   (hex)		Takamisawa Cybernetics Co., Ltd.
-0003DA     (base 16)		Takamisawa Cybernetics Co., Ltd.
-				Nakano Heiwa Bldg.
-				    
-				JP
-
-00-03-D9   (hex)		Secheron SA
-0003D9     (base 16)		Secheron SA
-				Untermattweg 8
-				    
-				CH
-
-00-03-FB   (hex)		ENEGATE Co.,Ltd.
-0003FB     (base 16)		ENEGATE Co.,Ltd.
-				3-14-40 Senrioka,
-				Settsu-city  Osaka  566-8686
-				JP
-
-00-03-F6   (hex)		Allegro Networks, Inc.
-0003F6     (base 16)		Allegro Networks, Inc.
-				6399 San Ignacio Avenue
-				San Jose  CA  95119
-				US
-
-00-04-15   (hex)		Rasteme Systems Co., Ltd.
-000415     (base 16)		Rasteme Systems Co., Ltd.
-				886-2 Nihongi Nakagou-mura
-				    
-				JP
-
-00-03-98   (hex)		WISI
-000398     (base 16)		WISI
-				Wilhelm-Sihn-Str. 5-7
-				D-75223  Niefern-Oeschelbronn  
-				DE
-
-00-03-95   (hex)		California Amplifier
-000395     (base 16)		California Amplifier
-				460 Calle San Pablo
-				Camarillo  CA  93012
-				US
-
-00-03-92   (hex)		Hyundai Teletek Co., Ltd.
-000392     (base 16)		Hyundai Teletek Co., Ltd.
-				B-501, Techno Park, 148 Yatap-dong,
-				  KOREA  Republic
-				KR
-
-00-03-8E   (hex)		Atoga Systems, Inc.
-00038E     (base 16)		Atoga Systems, Inc.
-				49026 Milmont Drive
-				Fremont  CA  94538
-				US
-
-00-03-1A   (hex)		Beijing Broad Telecom Ltd., China
-00031A     (base 16)		Beijing Broad Telecom Ltd., China
-				P.O. Box #147
-				Beijing    100876
-				CN
-
-00-03-5B   (hex)		BridgeWave Communications
-00035B     (base 16)		BridgeWave Communications
-				3350 Thomad Road
-				Santa Clara  CA  95054
-				US
-
-00-03-57   (hex)		Intervoice-Brite, Inc.
-000357     (base 16)		Intervoice-Brite, Inc.
-				17811 Waterview Pkwy.
-				Dallas  TX  75252
-				US
-
-00-03-7F   (hex)		Atheros Communications, Inc.
-00037F     (base 16)		Atheros Communications, Inc.
-				5480 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-00-02-F0   (hex)		AME Optimedia Technology Co., Ltd.
-0002F0     (base 16)		AME Optimedia Technology Co., Ltd.
-				17F-2, 79 Hsin Tai Wu Road, Sec. 1,
-				    
-				TW
-
-00-03-9E   (hex)		Tera System Co., Ltd.
-00039E     (base 16)		Tera System Co., Ltd.
-				Doosung B/F Rm 302
-				Republic  of  Korea
-				KR
-
-00-03-97   (hex)		FireBrick Limited
-000397     (base 16)		FireBrick Limited
-				C/O Andrews & Arnold Ltd, 
-				Enterprise Court, Downmill Road  Bracknell, Berks  RG12 1QS
-				GB
-
-00-03-3F   (hex)		BigBand Networks, Ltd.
-00033F     (base 16)		BigBand Networks, Ltd.
-				3 Azrieli Towers
-				    
-				IL
-
-00-03-27   (hex)		ACT'L
-000327     (base 16)		ACT'L
-				Avenue de Artisanat 10A
-				    
-				BE
-
-00-03-2E   (hex)		Scope Information Management, Ltd.
-00032E     (base 16)		Scope Information Management, Ltd.
-				2F Chanwoo b/o 736 Youksang-dong,
-				Seoul    135-080
-				KR
-
-00-03-7C   (hex)		Coax Media
-00037C     (base 16)		Coax Media
-				1220 Oak Industrial Lane
-				Cumming  GA  30041
-				US
-
-00-03-68   (hex)		Embedone Co., Ltd.
-000368     (base 16)		Embedone Co., Ltd.
-				Fl. 9 Annex Samhwan B/D. 17-26
-				Seoul    150-01
-				KR
-
-00-03-45   (hex)		Routrek Networks Corporation
-000345     (base 16)		Routrek Networks Corporation
-				Nilssei Shin Mizonokuchi Bldg. 1F
-				  23-0011  
-				JP
-
-00-02-C8   (hex)		Technocom Communications Technology (pte) Ltd
-0002C8     (base 16)		Technocom Communications Technology (pte) Ltd
-				189 Kaki Buckit Avenue 1
-				  Singapore  416029
-				SG
-
-00-02-B8   (hex)		WHI KONSULT AB
-0002B8     (base 16)		WHI KONSULT AB
-				Scheelegatan 11
-				  Stockholm  SE-112 28
-				SE
-
-00-02-A9   (hex)		RACOM, s.r.o.
-0002A9     (base 16)		RACOM, s.r.o.
-				Mirova 1283, Nove Mesto na Morave
-				592 31  Czech  republic
-				CZ
-
-00-02-BB   (hex)		Continuous Computing Corp
-0002BB     (base 16)		Continuous Computing Corp
-				9380 Carroll Park Drive
-				San Diego  CA  92121
-				US
-
-00-02-BC   (hex)		LVL 7 Systems, Inc.
-0002BC     (base 16)		LVL 7 Systems, Inc.
-				13000 Weston Pkwy
-				Cary  NC  27513
-				US
-
-00-03-0F   (hex)		Digital China (Shanghai) Networks Ltd.
-00030F     (base 16)		Digital China (Shanghai) Networks Ltd.
-				602-23, Haitai Building, 351 Guo Shoujin
-				Shanghai    
-				CN
-
-00-03-11   (hex)		Micro Technology Co., Ltd.
-000311     (base 16)		Micro Technology Co., Ltd.
-				Suehiro Bldg.
-				  101-0021  
-				JP
-
-00-03-0D   (hex)		Uniwill Computer Corp.
-00030D     (base 16)		Uniwill Computer Corp.
-				No. 24, Pei Yuan Rd., Chung
-				Li City    
-				TW
-
-00-03-09   (hex)		Texcel Technology PLC
-000309     (base 16)		Texcel Technology PLC
-				Thames Road
-				  ENGLAND  
-				GB
-
-00-03-03   (hex)		JAMA Electronics Co., Ltd.
-000303     (base 16)		JAMA Electronics Co., Ltd.
-				10F, No. 222-1, Sec. 3
-				Taipei Hsien    
-				TW
-
-00-03-05   (hex)		MSC Vertriebs GmbH
-000305     (base 16)		MSC Vertriebs GmbH
-				Design Center Aachen
-				AACHEN    D-52076
-				DE
-
-00-02-FE   (hex)		Viditec, Inc.
-0002FE     (base 16)		Viditec, Inc.
-				520 Central Parkway E.
-				Plano  TX  75074
-				US
-
-00-01-9F   (hex)		ReadyNet
-00019F     (base 16)		ReadyNet
-				6952 High Tech Drive
-				Midvale  UT  84047
-				US
-
-00-02-FF   (hex)		Handan BroadInfoCom
-0002FF     (base 16)		Handan BroadInfoCom
-				5th Fl. Shinsung Plaza #697-11
-				Seoul    
-				KR
-
-00-02-F4   (hex)		PCTEL, Inc.
-0002F4     (base 16)		PCTEL, Inc.
-				1331 California Circle
-				Milpitas  CA  95035
-				US
-
-00-02-E9   (hex)		CS Systemes De Securite - C3S
-0002E9     (base 16)		CS Systemes De Securite - C3S
-				23, rue de Schwobsheim
-				    
-				FR
-
-00-02-E5   (hex)		Timeware Ltd.
-0002E5     (base 16)		Timeware Ltd.
-				Brookfield Grange
-				Lancs    042 GLB
-				GB
-
-00-02-E0   (hex)		ETAS GmbH
-0002E0     (base 16)		ETAS GmbH
-				Borsigstraße 10
-				    
-				DE
-
-00-02-CE   (hex)		FoxJet, Inc.
-0002CE     (base 16)		FoxJet, Inc.
-				2016 E. Randal Mill Rd. #409
-				Arlington  TX  76011-8223
-				US
-
-00-02-C3   (hex)		Arelnet Ltd.
-0002C3     (base 16)		Arelnet Ltd.
-				3 Hayarden St.
-				    
-				IL
-
-00-03-16   (hex)		Nobell Communications, Inc.
-000316     (base 16)		Nobell Communications, Inc.
-				3410 Far West Blvd., Suite 240
-				Austin  TX  78731
-				US
-
-00-03-29   (hex)		F3, Inc.
-000329     (base 16)		F3, Inc.
-				2F, No. 7, Industry E. Rd. 9,
-				Hsinchu    
-				TW
-
-00-03-21   (hex)		Reco Research Co., Ltd.
-000321     (base 16)		Reco Research Co., Ltd.
-				No. 47-1, Sec. 2,
-				    
-				TW
-
-00-02-F5   (hex)		VIVE Synergies, Inc.
-0002F5     (base 16)		VIVE Synergies, Inc.
-				30 West Beaver Creek Road, Unit 101
-				    L4B 3K1
-				CA
-
-00-02-D5   (hex)		ACR
-0002D5     (base 16)		ACR
-				Cardoulines B2
-				    
-				FR
-
-00-02-AB   (hex)		CTC Union Technologies Co., Ltd.
-0002AB     (base 16)		CTC Union Technologies Co., Ltd.
-				8F No. 60 Zhouzi St.
-				Neihu  Taipei  114
-				TW
-
-00-02-A4   (hex)		AddPac Technology Co., Ltd.
-0002A4     (base 16)		AddPac Technology Co., Ltd.
-				3F Jeoung Am Bldg., 769-12
-				Seoul  Seoul  Korea
-				KR
-
-00-02-A0   (hex)		Flatstack Ltd.
-0002A0     (base 16)		Flatstack Ltd.
-				1112 Budapest
-				    
-				HU
-
-00-02-B2   (hex)		Cablevision
-0002B2     (base 16)		Cablevision
-				420 Crossways Park Drive West
-				Woodbury  NY  11787
-				US
-
-00-02-B7   (hex)		Watanabe Electric Industry Co., Ltd.
-0002B7     (base 16)		Watanabe Electric Industry Co., Ltd.
-				6-16-19, Jingumae, Shibuya-ku
-				    
-				JP
-
-00-02-AF   (hex)		TeleCruz Technology, Inc.
-0002AF     (base 16)		TeleCruz Technology, Inc.
-				2391 Qume Dr.
-				San Jose  CA  95131
-				US
-
-00-02-A8   (hex)		Air Link Technology
-0002A8     (base 16)		Air Link Technology
-				Bethel Bldg. 303
-				Seoul  KOREA  137-130
-				KR
-
-00-02-6A   (hex)		Cocess Telecom Co., Ltd.
-00026A     (base 16)		Cocess Telecom Co., Ltd.
-				Research & Development Dept.
-				Seoul  Seoul  KOREA
-				KR
-
-00-02-6C   (hex)		Philips CFT
-00026C     (base 16)		Philips CFT
-				Building SAN 6
-				  The  
-				NL
-
-00-02-62   (hex)		Soyo Group Soyo Com Tech Co., Ltd
-000262     (base 16)		Soyo Group Soyo Com Tech Co., Ltd
-				5H. No. 21 Wu-gong 5 Rd,
-				Taipei Hsien  Taiwan  R.O.C.
-				TW
-
-00-02-65   (hex)		Virditech Co. Ltd.
-000265     (base 16)		Virditech Co. Ltd.
-				Hyundai Topics Blgd., 11th Fl
-				Seoul  Seoul  KOREA
-				KR
-
-00-02-5B   (hex)		Cambridge Silicon Radio
-00025B     (base 16)		Cambridge Silicon Radio
-				Unit 400, Science Park,
-				  United  Kingdom
-				GB
-
-00-02-56   (hex)		Alpha Processor, Inc.
-000256     (base 16)		Alpha Processor, Inc.
-				130 C Baker Ave. Ext.
-				Concord  MA  01742
-				US
-
-00-02-59   (hex)		Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group
-000259     (base 16)		Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group
-				8F, #99, Huaihai Rd, East,
-				  CHINA  200021
-				CN
-
-00-02-94   (hex)		Tokyo Sokushin Co., Ltd.
-000294     (base 16)		Tokyo Sokushin Co., Ltd.
-				5-16-12 Nishi-Nippori
-				    
-				JP
-
-00-02-96   (hex)		Lectron Co,. Ltd.
-000296     (base 16)		Lectron Co,. Ltd.
-				9F, No.171, Sec. 2, Tatung Rd.,
-				Taiwan  Taiwan  R.O.C.
-				TW
-
-00-02-8E   (hex)		Rapid 5 Networks, Inc.
-00028E     (base 16)		Rapid 5 Networks, Inc.
-				180 Baytech Drive
-				San Jose  CA  95134-2302
-				US
-
-00-02-4F   (hex)		IPM Datacom S.R.L.
-00024F     (base 16)		IPM Datacom S.R.L.
-				Via Roma, 231
-				  Naples  
-				IT
-
-00-02-71   (hex)		Zhone Technologies
-000271     (base 16)		Zhone Technologies
-				7001 Oakport Street
-				Oakland  CA  94621
-				US
-
-00-02-8A   (hex)		Ambit Microsystems Corporation
-00028A     (base 16)		Ambit Microsystems Corporation
-				5F-1, 5 Hsin-An Road Hsinchu,
-				    TAIWAN
-				TW
-
-00-01-FA   (hex)		HOROSCAS
-0001FA     (base 16)		HOROSCAS
-				26, LOUIS BLANC
-				    
-				FR
-
-00-02-82   (hex)		ViaClix, Inc.
-000282     (base 16)		ViaClix, Inc.
-				1400 Dell Ave., Suite B
-				Campbell  CA  95008
-				US
-
-00-02-85   (hex)		Riverstone Networks
-000285     (base 16)		Riverstone Networks
-				5200 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-00-02-79   (hex)		Control Applications, Ltd.
-000279     (base 16)		Control Applications, Ltd.
-				3 Tevuot Haarets St.
-				    
-				IL
-
-00-02-51   (hex)		Soma Networks, Inc.
-000251     (base 16)		Soma Networks, Inc.
-				650 Townsend St.
-				San Francisco  CA  94103
-				US
-
-00-01-F5   (hex)		ERIM S.A.
-0001F5     (base 16)		ERIM S.A.
-				11 Av Republique
-				    
-				FR
-
-00-01-FF   (hex)		Data Direct Networks, Inc.
-0001FF     (base 16)		Data Direct Networks, Inc.
-				9320 Lurline Avenue
-				Chatsworth  CA  91311
-				US
-
-00-01-FC   (hex)		Keyence Corporation
-0001FC     (base 16)		Keyence Corporation
-				1-3-14, Higashi-Nakajima,
-				    
-				JP
-
-00-01-FD   (hex)		Digital Voice Systems, Inc.
-0001FD     (base 16)		Digital Voice Systems, Inc.
-				234 Littleton Road
-				Westford  MA  01886
-				US
-
-00-02-10   (hex)		Fenecom
-000210     (base 16)		Fenecom
-				7/F Kon-kuk University Alumni
-				Seoul  Seoul  Korea
-				KR
-
-00-02-0B   (hex)		Native Networks, Inc.
-00020B     (base 16)		Native Networks, Inc.
-				P.O. Box 7165
-				    
-				IL
-
-00-02-18   (hex)		Advanced Scientific Corp
-000218     (base 16)		Advanced Scientific Corp
-				1 Fl., No. 26, Industry East 9th Road
-				    TAIWAN
-				TW
-
-00-01-EE   (hex)		Comtrol Europe, Ltd.
-0001EE     (base 16)		Comtrol Europe, Ltd.
-				The Courtyard Studio
-				    U.K.
-				GB
-
-00-01-F0   (hex)		Tridium, Inc.
-0001F0     (base 16)		Tridium, Inc.
-				3951 Westerre Parkway
-				Richmond  VA  23233
-				US
-
-00-01-F1   (hex)		Innovative Concepts, Inc.
-0001F1     (base 16)		Innovative Concepts, Inc.
-				8200 Greensboro Drive
-				McLean  VA  22102
-				US
-
-00-01-E2   (hex)		Ando Electric Corporation
-0001E2     (base 16)		Ando Electric Corporation
-				19-7, Kamata 4-Chrome, Ota-ku
-				    
-				JP
-
-00-02-2F   (hex)		P-Cube, Ltd.
-00022F     (base 16)		P-Cube, Ltd.
-				P.O. Box 12331
-				    
-				IL
-
-00-02-27   (hex)		ESD Electronic System Design GmbH
-000227     (base 16)		ESD Electronic System Design GmbH
-				Vahrenwalder Str. 207
-				30 165  Hannover  
-				DE
-
-00-02-1D   (hex)		Data General Communication Ltd.
-00021D     (base 16)		Data General Communication Ltd.
-				Rm. 18C, Bldg. C, CEIEC Tower
-				    
-				CN
-
-00-02-19   (hex)		Paralon Technologies
-000219     (base 16)		Paralon Technologies
-				700 Fifth Ave, Suite 6101
-				Seattle  WA  98104
-				US
-
-00-02-03   (hex)		Woonsang Telecom, Inc.
-000203     (base 16)		Woonsang Telecom, Inc.
-				104-9, Munji-Dong, Yusong-Gu
-				    KOREA
-				KR
-
-00-01-D3   (hex)		PAXCOMM, Inc.
-0001D3     (base 16)		PAXCOMM, Inc.
-				7th F The Corp. Center
-				    KOREA
-				KR
-
-00-01-E1   (hex)		Kinpo Electronics, Inc.
-0001E1     (base 16)		Kinpo Electronics, Inc.
-				No.147, Sec. 3, Beishen Rd
-				Shenkeng Dist.  New Taipei City  222
-				TW
-
-00-02-2C   (hex)		ABB Bomem, Inc.
-00022C     (base 16)		ABB Bomem, Inc.
-				585, boul. Charest Est
-				Canada  G1K  9H4
-				CA
-
-00-02-3C   (hex)		Creative Technology, Ltd.
-00023C     (base 16)		Creative Technology, Ltd.
-				31 International Business Park
-				Republic  of  
-				SG
-
-00-30-6C   (hex)		Hitex Holding GmbH
-00306C     (base 16)		Hitex Holding GmbH
-				Greschbachstraße 12
-				76229 Karlsruhe    
-				DE
-
-00-30-8B   (hex)		Brix Networks
-00308B     (base 16)		Brix Networks
-				300 Concord Road
-				Billerica  MA  01821
-				US
-
-00-01-77   (hex)		EDSL
-000177     (base 16)		EDSL
-				Habarzel 1 st
-				  ISRAEL  69710
-				IL
-
-00-01-4D   (hex)		Shin Kin Enterprises Co., Ltd
-00014D     (base 16)		Shin Kin Enterprises Co., Ltd
-				7, FU Hsing St. Tue Cheng Ind.
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-01-DA   (hex)		WINCOMM Corporation
-0001DA     (base 16)		WINCOMM Corporation
-				2F, No. 3, Prosperity Road 1,
-				  Hsinchu  Taiwan
-				TW
-
-00-01-D2   (hex)		inXtron, Inc. 
-0001D2     (base 16)		inXtron, Inc. 
-				8F, No.52, MinQuan Road, Xindian Dist.
-				New Taipei City    23141
-				TW
-
-00-01-C6   (hex)		Quarry Technologies
-0001C6     (base 16)		Quarry Technologies
-				8 New England Executive Park
-				Burlington  MA  01803
-				US
-
-00-01-6E   (hex)		Conklin Corporation
-00016E     (base 16)		Conklin Corporation
-				6141 Crooked Creek Road
-				Norcross  GA  30092-3193
-				US
-
-00-01-74   (hex)		CyberOptics Corporation
-000174     (base 16)		CyberOptics Corporation
-				5900 Golden Hills Drive
-				Golden Valley  MN  55416
-				US
-
-00-01-5E   (hex)		BEST TECHNOLOGY CO., LTD.
-00015E     (base 16)		BEST TECHNOLOGY CO., LTD.
-				7F, Haesung B/D
-				    KOREA
-				KR
-
-00-01-61   (hex)		Meta Machine Technology
-000161     (base 16)		Meta Machine Technology
-				400 Silver Cedar Court - ste. #220
-				Chapel Hill  NC  27514
-				US
-
-00-01-A1   (hex)		Mag-Tek, Inc.
-0001A1     (base 16)		Mag-Tek, Inc.
-				1710 Apollo Court
-				Seal Beach  CA  90740
-				US
-
-00-01-86   (hex)		Uwe Disch
-000186     (base 16)		Uwe Disch
-				Eichenhainstraße 14
-				    
-				DE
-
-00-01-A6   (hex)		Scientific-Atlanta Arcodan A/S
-0001A6     (base 16)		Scientific-Atlanta Arcodan A/S
-				Avgustenborg Landevej 7
-				    
-				DK
-
-00-01-72   (hex)		TechnoLand Co., LTD.
-000172     (base 16)		TechnoLand Co., LTD.
-				3-17-11 Akebono-cho
-				    
-				JP
-
-00-01-A0   (hex)		Infinilink Corporation
-0001A0     (base 16)		Infinilink Corporation
-				1740 E. Garry Ave. - Ste. #206
-				Santa Ana  CA  92705
-				US
-
-00-01-96   (hex)		Cisco Systems, Inc
-000196     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-01-99   (hex)		HeiSei Electronics
-000199     (base 16)		HeiSei Electronics
-				5/7 Alley 8, Lane 45
-				    TAIWAN
-				TW
-
-00-01-8B   (hex)		NetLinks Co., Ltd.
-00018B     (base 16)		NetLinks Co., Ltd.
-				3F Dscom Bldg., 238-3
-				    KOREA
-				KR
-
-00-01-8D   (hex)		AudeSi Technologies
-00018D     (base 16)		AudeSi Technologies
-				Suite 180, 6815
-				  AB  
-				CA
-
-00-01-9D   (hex)		E-Control Systems, Inc.
-00019D     (base 16)		E-Control Systems, Inc.
-				9420 Lurline Ave., Unite
-				Chatsworth  CA  91311
-				US
-
-00-01-CE   (hex)		Custom Micro Products, Ltd.
-0001CE     (base 16)		Custom Micro Products, Ltd.
-				450 Blandford Road
-				  UNITED  KINGDOM
-				GB
-
-00-01-BB   (hex)		Frequentis
-0001BB     (base 16)		Frequentis
-				SPITTELBREITENGASSE 34
-				    
-				AT
-
-00-01-BC   (hex)		Brains Corporation
-0001BC     (base 16)		Brains Corporation
-				2-27-8-4Fl TAMAGAWA
-				    
-				JP
-
-00-01-C0   (hex)		CompuLab, Ltd.
-0001C0     (base 16)		CompuLab, Ltd.
-				P.O. Box 66
-				    
-				IL
-
-00-01-7C   (hex)		AG-E GmbH
-00017C     (base 16)		AG-E GmbH
-				Dennewartstraße 27
-				    
-				DE
-
-00-01-08   (hex)		AVLAB Technology, Inc.
-000108     (base 16)		AVLAB Technology, Inc.
-				3F-1, No. 134, Sec. 3
-				Hsin Tien, Taipei    
-				TW
-
-00-06-2B   (hex)		INTRASERVER TECHNOLOGY
-00062B     (base 16)		INTRASERVER TECHNOLOGY
-				SEVEN OCTOBER HILL RD.
-				HOLLISTON  MA  01746
-				US
-
-00-01-00   (hex)		EQUIP'TRANS
-000100     (base 16)		EQUIP'TRANS
-				31 rue Paul Cezanne
-				LA ROCHETTE    77000
-				FR
-
-00-B0-9D   (hex)		Point Grey Research Inc.
-00B09D     (base 16)		Point Grey Research Inc.
-				305-1847 West Broadway
-				Vancouver  British Columbia V6J 1Y6  
-				CA
-
-00-01-10   (hex)		Gotham Networks
-000110     (base 16)		Gotham Networks
-				15 Discovery Way
-				Acton  MA  01720
-				US
-
-00-01-12   (hex)		Shark Multimedia Inc.
-000112     (base 16)		Shark Multimedia Inc.
-				48890 Milmont Drive  #101-D
-				Fremont  CA  94538
-				US
-
-00-01-16   (hex)		Netspect Technologies, Inc.
-000116     (base 16)		Netspect Technologies, Inc.
-				3945 Freedom Circle - Ste. #360
-				Santa Clara  CA  95054
-				US
-
-00-B0-6D   (hex)		Jones Futurex Inc.
-00B06D     (base 16)		Jones Futurex Inc.
-				3715 Atherton Road
-				Rocklin  CA  95765
-				US
-
-00-B0-94   (hex)		Alaris, Inc.
-00B094     (base 16)		Alaris, Inc.
-				47338 Fremont Boulevard
-				Fremont  CA  94538
-				US
-
-00-30-F0   (hex)		Uniform Industrial Corp.
-0030F0     (base 16)		Uniform Industrial Corp.
-				18F, 171, Shung Teh Road
-				Taipei    
-				TW
-
-00-01-3B   (hex)		BNA SYSTEMS
-00013B     (base 16)		BNA SYSTEMS
-				1637 S. Main Street
-				Milpitas  CA  95035
-				US
-
-00-01-34   (hex)		Selectron Systems AG
-000134     (base 16)		Selectron Systems AG
-				Bernstreasse 70
-				    
-				CH
-
-00-01-39   (hex)		Point Multimedia Systems
-000139     (base 16)		Point Multimedia Systems
-				4Ra 507, Shihwa Industrial Complex
-				  Korea  425-110
-				KR
-
-00-01-3E   (hex)		Ascom Tateco AB
-00013E     (base 16)		Ascom Tateco AB
-				Box 8783
-				    
-				SE
-
-00-01-2E   (hex)		PC Partner Ltd.
-00012E     (base 16)		PC Partner Ltd.
-				Rm 1901-1908, 19/F, Shatin Galleria
-				    
-				CN
-
-00-01-32   (hex)		Dranetz - BMI
-000132     (base 16)		Dranetz - BMI
-				1000 New Durham Road
-				Edison  NJ  08818
-				US
-
-00-01-13   (hex)		OLYMPUS CORPORATION
-000113     (base 16)		OLYMPUS CORPORATION
-				2-3 Kuboyama-cho, Hachioji-shi
-				Tokyo 192-8512    j
-				JP
-
-00-01-1E   (hex)		Precidia Technologies, Inc.
-00011E     (base 16)		Precidia Technologies, Inc.
-				10A Hearst Way
-				Kanata  Ontario K2M-2C4  
-				CA
-
-00-01-55   (hex)		Promise Technology, Inc.
-000155     (base 16)		Promise Technology, Inc.
-				4F, 1, Prosperity 1st Road
-				    TAIWAN
-				TW
-
-00-30-94   (hex)		Cisco Systems, Inc
-003094     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-8A   (hex)		NICOTRA SISTEMI S.P.A
-00308A     (base 16)		NICOTRA SISTEMI S.P.A
-				41 Via Primo Maggio
-				  Baranzate (MI)  20021
-				IT
-
-00-30-72   (hex)		Intellibyte Inc.
-003072     (base 16)		Intellibyte Inc.
-				Canada Trust Tower - BCE Place
-				Toronto  Ontario  M5J 2S1
-				CA
-
-00-30-40   (hex)		Cisco Systems, Inc
-003040     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-32   (hex)		MagicRam, Inc.
-003032     (base 16)		MagicRam, Inc.
-				1850 Beverly Blvd.
-				Los Angeles  CA  90057
-				US
-
-00-30-EA   (hex)		TeraForce Technology Corporation
-0030EA     (base 16)		TeraForce Technology Corporation
-				1100 EXECUTIVE DRIVE
-				RICHARDSON  TX  75081
-				US
-
-00-30-9B   (hex)		Smartware
-00309B     (base 16)		Smartware
-				49 AV Aristide
-				92160 Antony    
-				FR
-
-00-30-45   (hex)		Village Networks, Inc. (VNI)
-003045     (base 16)		Village Networks, Inc. (VNI)
-				100 Village Court - Ste. #301
-				Hazlet  NJ  07730
-				US
-
-00-30-E5   (hex)		Amper Datos S.A.
-0030E5     (base 16)		Amper Datos S.A.
-				C/Marconi n*3  (PTM)
-				28760 Madrid    
-				ES
-
-00-30-06   (hex)		SUPERPOWER COMPUTER
-003006     (base 16)		SUPERPOWER COMPUTER
-				ELECTRONICS CO., LTD.
-				Taipei 248    
-				TW
-
-00-30-38   (hex)		XCP, INC.
-003038     (base 16)		XCP, INC.
-				40 ELM STREET
-				DRYDEN  NY  13053
-				US
-
-00-30-79   (hex)		CQOS, INC.
-003079     (base 16)		CQOS, INC.
-				25 MAUCHLY  - STE. #329
-				IRVINE  CA  92618
-				US
-
-00-30-0C   (hex)		CONGRUENCY, LTD.
-00300C     (base 16)		CONGRUENCY, LTD.
-				23 HASIVIM STREET
-				PETAH-TIKVA 49170    
-				IL
-
-00-30-4C   (hex)		APPIAN COMMUNICATIONS, INC.
-00304C     (base 16)		APPIAN COMMUNICATIONS, INC.
-				80 CENTRAL STREET
-				BOXBOROUGH  MA  01719
-				US
-
-00-30-E8   (hex)		ENSIM CORP.
-0030E8     (base 16)		ENSIM CORP.
-				1215 Terra Bella Ave.
-				Mountainview  CA  94043
-				US
-
-00-30-C9   (hex)		LuxN, N
-0030C9     (base 16)		LuxN, N
-				570 Maude Court
-				Sunnyvale  CA  94086
-				US
-
-00-30-28   (hex)		FASE Saldatura srl
-003028     (base 16)		FASE Saldatura srl
-				V.R. Bernardi 5
-				TORINO    
-				IT
-
-00-30-69   (hex)		IMPACCT TECHNOLOGY CORP.
-003069     (base 16)		IMPACCT TECHNOLOGY CORP.
-				2F, NO. 12, R&D RD. II
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-30-C3   (hex)		FLUECKIGER ELEKTRONIK AG
-0030C3     (base 16)		FLUECKIGER ELEKTRONIK AG
-				KIRCHBARGSTRASSE 201
-				    
-				CH
-
-00-30-5A   (hex)		TELGEN CORPORATION
-00305A     (base 16)		TELGEN CORPORATION
-				3101 SOVEREIGN DR. - STE.
-				LANSING  MI  48911
-				US
-
-00-30-10   (hex)		VISIONETICS INTERNATIONAL
-003010     (base 16)		VISIONETICS INTERNATIONAL
-				3F, NO. 3, PROSPERITY ROAD 1
-				  TAIWAN  R.O.C.
-				TW
-
-00-30-D9   (hex)		DATACORE SOFTWARE CORP.
-0030D9     (base 16)		DATACORE SOFTWARE CORP.
-				CORPORATE PARK
-				FORT LAUDERDALE  FL  33309
-				US
-
-00-30-26   (hex)		HeiTel Digital Video GmbH
-003026     (base 16)		HeiTel Digital Video GmbH
-				Stuthagen 25
-				    
-				DE
-
-00-30-77   (hex)		ONPREM NETWORKS
-003077     (base 16)		ONPREM NETWORKS
-				42501 ALBRAE STREET
-				FREMONT  CA  94538
-				US
-
-00-30-47   (hex)		NISSEI ELECTRIC CO., LTD.
-003047     (base 16)		NISSEI ELECTRIC CO., LTD.
-				32 MIYAWAKE, SHIMONOISHIKI-CHO
-				    
-				JP
-
-00-30-D4   (hex)		AAE Systems, Inc.
-0030D4     (base 16)		AAE Systems, Inc.
-				642 North Pastoria Avenue
-				Sunnyvale  CA  94085
-				US
-
-00-D0-D7   (hex)		B2C2, INC.
-00D0D7     (base 16)		B2C2, INC.
-				2020 CHALLENGER DRIVE-
-				ALAMEDA  CA  94501
-				US
-
-00-D0-73   (hex)		ACN ADVANCED COMMUNICATIONS
-00D073     (base 16)		ACN ADVANCED COMMUNICATIONS
-				NETWORKS SA
-				    
-				CH
-
-00-D0-57   (hex)		ULTRAK, INC.
-00D057     (base 16)		ULTRAK, INC.
-				1301 WATERS RIDGE DRIVE
-				LEWISVILLE  TX  75057
-				US
-
-00-30-AB   (hex)		DELTA NETWORKS, INC.
-0030AB     (base 16)		DELTA NETWORKS, INC.
-				8, KON JAN WEST ROAD
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-30-49   (hex)		BRYANT TECHNOLOGY, LTD.
-003049     (base 16)		BRYANT TECHNOLOGY, LTD.
-				P.O. BOX 69557
-				  SOUTH  AFRICA
-				ZA
-
-00-30-6D   (hex)		LUCENT TECHNOLOGIES
-00306D     (base 16)		LUCENT TECHNOLOGIES
-				300 BAKER AVENUE - STE. #100
-				CONCORD  MA  01742-2168
-				US
-
-00-30-17   (hex)		BlueArc UK Ltd
-003017     (base 16)		BlueArc UK Ltd
-				Queensgate House
-				Bracknell    RG12 1RB
-				GB
-
-00-30-1C   (hex)		ALTVATER AIRDATA SYSTEMS
-00301C     (base 16)		ALTVATER AIRDATA SYSTEMS
-				GMBH & CO. KG
-				    
-				DE
-
-00-30-80   (hex)		Cisco Systems, Inc
-003080     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-F7   (hex)		RAMIX INC.
-0030F7     (base 16)		RAMIX INC.
-				1672 DONLON STREET
-				VENTURA  CA  93003
-				US
-
-00-30-D0   (hex)		Tellabs
-0030D0     (base 16)		Tellabs
-				1750 Founder's Parkway
-				Alpharetta  GA  30004
-				US
-
-00-30-14   (hex)		DIVIO, INC.
-003014     (base 16)		DIVIO, INC.
-				997 E. ARQUES AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-30-81   (hex)		ALTOS C&C
-003081     (base 16)		ALTOS C&C
-				150-010 RM. 1012, 44-1
-				    KOREA
-				KR
-
-00-D0-F0   (hex)		CONVISION TECHNOLOGY GMBH
-00D0F0     (base 16)		CONVISION TECHNOLOGY GMBH
-				REBENRING 33
-				    
-				DE
-
-00-D0-10   (hex)		CONVERGENT NETWORKS, INC.
-00D010     (base 16)		CONVERGENT NETWORKS, INC.
-				2 HIGHWOOD DRIVE
-				TEWKSBURY  MA  01876
-				US
-
-00-D0-4B   (hex)		LA CIE GROUP S.A.
-00D04B     (base 16)		LA CIE GROUP S.A.
-				17 RUE AMPERE
-				    
-				FR
-
-00-D0-0E   (hex)		PLURIS, INC.
-00D00E     (base 16)		PLURIS, INC.
-				10455 BANDLEY DRIVE
-				CUPERTINO  CA  95014
-				US
-
-00-D0-12   (hex)		GATEWORKS CORP.
-00D012     (base 16)		GATEWORKS CORP.
-				7631 MORRO ROAD
-				ATASCADERO  CA  93422
-				US
-
-00-D0-4D   (hex)		DIV OF RESEARCH & STATISTICS
-00D04D     (base 16)		DIV OF RESEARCH & STATISTICS
-				BOG OF THE FEDERAL RESERVE SYS
-				WASHINGTON  DC  20551
-				US
-
-00-D0-2E   (hex)		COMMUNICATION AUTOMATION CORP.
-00D02E     (base 16)		COMMUNICATION AUTOMATION CORP.
-				1180 MCDERMOTT DRIVE
-				WEST CHESTER  PA  19380
-				US
-
-00-D0-C5   (hex)		COMPUTATIONAL SYSTEMS, INC.
-00D0C5     (base 16)		COMPUTATIONAL SYSTEMS, INC.
-				835 INNOVATION DRIVE
-				KNOXVILLE  TN  37932
-				US
-
-00-D0-46   (hex)		DOLBY LABORATORIES, INC.
-00D046     (base 16)		DOLBY LABORATORIES, INC.
-				100 Potrero Avenue
-				San Francisco  CA  94103-4938
-				US
-
-00-D0-DE   (hex)		PHILIPS MULTIMEDIA NETWORK
-00D0DE     (base 16)		PHILIPS MULTIMEDIA NETWORK
-				SYSTEMS GMBH
-				    
-				DE
-
-00-D0-0C   (hex)		SNIJDER MICRO SYSTEMS
-00D00C     (base 16)		SNIJDER MICRO SYSTEMS
-				P.O. BOX 300
-				  THE  
-				NL
-
-00-D0-17   (hex)		SYNTECH INFORMATION CO., LTD.
-00D017     (base 16)		SYNTECH INFORMATION CO., LTD.
-				8F, 210, TA-TUNG RD., SEC. 3
-				TAIWAN  TAIWAN  ROC
-				TW
-
-00-D0-36   (hex)		TECHNOLOGY ATLANTA CORP.
-00D036     (base 16)		TECHNOLOGY ATLANTA CORP.
-				141 W. WIEUCA RD. N.E.
-				ATLANTA  GA  30342
-				US
-
-00-D0-E3   (hex)		ELE-CHEM ENGINEERING CO., LTD.
-00D0E3     (base 16)		ELE-CHEM ENGINEERING CO., LTD.
-				WINDSTONE OFFICE
-				SEOUL 137-130  SEOUL 137-130  KOREA
-				KR
-
-00-D0-B6   (hex)		CRESCENT NETWORKS, INC.
-00D0B6     (base 16)		CRESCENT NETWORKS, INC.
-				201 RIVERNECK ROAD
-				CHELMSFORD  MA  01842
-				US
-
-00-D0-C4   (hex)		TERATECH CORPORATION
-00D0C4     (base 16)		TERATECH CORPORATION
-				223 MIDDLESEX TRPK.
-				BURLINGTON  MA  01803-3308
-				US
-
-00-D0-61   (hex)		TREMON ENTERPRISES CO., LTD.
-00D061     (base 16)		TREMON ENTERPRISES CO., LTD.
-				15F, NO. 116, SEC. 1
-				TAIWAN  TAIWAN  ROC
-				TW
-
-00-D0-E5   (hex)		SOLIDUM SYSTEMS CORP.
-00D0E5     (base 16)		SOLIDUM SYSTEMS CORP.
-				940 BELFAST ROAD 1S.217
-				    
-				CA
-
-00-D0-45   (hex)		KVASER AB
-00D045     (base 16)		KVASER AB
-				BOX 4076
-				    
-				SE
-
-00-D0-04   (hex)		PENTACOM LTD.
-00D004     (base 16)		PENTACOM LTD.
-				8 HASADNAOT STREET
-				    
-				IL
-
-00-D0-05   (hex)		ZHS ZEITMANAGEMENTSYSTEME
-00D005     (base 16)		ZHS ZEITMANAGEMENTSYSTEME
-				HARD-UND SOFTWARE GMBH
-				    
-				DE
-
-00-D0-D3   (hex)		Cisco Systems, Inc
-00D0D3     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-26   (hex)		HIRSCHMANN AUSTRIA GMBH
-00D026     (base 16)		HIRSCHMANN AUSTRIA GMBH
-				OBERER PASPELSWEG 6 - 8
-				    
-				AT
-
-00-D0-DA   (hex)		TAICOM DATA SYSTEMS CO., LTD.
-00D0DA     (base 16)		TAICOM DATA SYSTEMS CO., LTD.
-				45, WU-KUNG 5 ROAD
-				    TAIWAN
-				TW
-
-00-D0-3C   (hex)		Vieo, Inc.
-00D03C     (base 16)		Vieo, Inc.
-				12416 Hymeadow Drive,
-				Austin  TX  78750
-				US
-
-00-D0-B4   (hex)		KATSUJIMA CO., LTD.
-00D0B4     (base 16)		KATSUJIMA CO., LTD.
-				1-6-1, SHIRATORI
-				    
-				JP
-
-00-D0-86   (hex)		FOVEON, INC.
-00D086     (base 16)		FOVEON, INC.
-				2820 San Tomas Expressway
-				Santa Clara  CA  95051
-				US
-
-00-D0-A8   (hex)		NETWORK ENGINES, INC.
-00D0A8     (base 16)		NETWORK ENGINES, INC.
-				61 PLEASANT STREET
-				RANDOLPH  MA  02368
-				US
-
-00-D0-AB   (hex)		DELTAKABEL TELECOM CV
-00D0AB     (base 16)		DELTAKABEL TELECOM CV
-				HANZEWEG 14
-				  THE  
-				NL
-
-00-D0-E8   (hex)		MAC SYSTEM CO., LTD.
-00D0E8     (base 16)		MAC SYSTEM CO., LTD.
-				R&D INSTITUTE
-				KYUNGKI-DO  KOREA,  430-017
-				KR
-
-00-D0-6B   (hex)		SR TELECOM INC.
-00D06B     (base 16)		SR TELECOM INC.
-				8150 Trans Canada Highway
-				Quebec    H4S 1M5
-				CA
-
-00-D0-DC   (hex)		MODULAR MINING SYSTEMS, INC.
-00D0DC     (base 16)		MODULAR MINING SYSTEMS, INC.
-				3289 E. HEMISPHERE LOOP
-				TUCSON  AZ  85706
-				US
-
-00-D0-1E   (hex)		PINGTEL CORP.
-00D01E     (base 16)		PINGTEL CORP.
-				773 WINTER STREET
-				N. ANDOVER  MA  01845
-				US
-
-00-D0-CA   (hex)		Intrinsyc Software International Inc.
-00D0CA     (base 16)		Intrinsyc Software International Inc.
-				885 Dunsmuir Street, Suite 380
-				Vancouver  B.C.  V6C 1N5
-				CA
-
-00-D0-65   (hex)		TOKO ELECTRIC
-00D065     (base 16)		TOKO ELECTRIC
-				4008 KUROHAMA, HASUDA-SHI
-				    
-				JP
-
-00-D0-9A   (hex)		FILANET CORPORATION
-00D09A     (base 16)		FILANET CORPORATION
-				931 Benecia Avenue
-				Sunnyvale  CA  94085
-				US
-
-00-D0-AE   (hex)		ORESIS COMMUNICATIONS, INC.
-00D0AE     (base 16)		ORESIS COMMUNICATIONS, INC.
-				14670 NW GREENBRIER PKWY
-				BEAVERTON  OR  97006
-				US
-
-00-D0-F2   (hex)		MONTEREY NETWORKS
-00D0F2     (base 16)		MONTEREY NETWORKS
-				1909 N. GLENVILLE DRIVE
-				RICHARDSON  TX  75081
-				US
-
-00-D0-14   (hex)		ROOT, INC.
-00D014     (base 16)		ROOT, INC.
-				8F TOC2 Bldg, 7-21-11 Nishi-Gotanda
-				  Tokyo  141-0031
-				JP
-
-00-D0-23   (hex)		INFORTREND TECHNOLOGY, INC.
-00D023     (base 16)		INFORTREND TECHNOLOGY, INC.
-				10F, NO. 33 SAN-MIN RD.
-				    TAIWAN
-				TW
-
-00-D0-A2   (hex)		INTEGRATED DEVICE
-00D0A2     (base 16)		INTEGRATED DEVICE
-				TECHNOLOGY, INC.
-				SANTA CLARA  CA  95054
-				US
-
-00-D0-34   (hex)		ORMEC SYSTEMS CORP.
-00D034     (base 16)		ORMEC SYSTEMS CORP.
-				19 LINDEN PARK
-				ROCHESTER  NY  14625
-				US
-
-00-D0-8A   (hex)		PHOTRON USA
-00D08A     (base 16)		PHOTRON USA
-				1101 S. WINCHESTER BLVD.
-				SAN JOSE  CA  95128
-				US
-
-00-D0-A7   (hex)		TOKYO SOKKI KENKYUJO CO., LTD.
-00D0A7     (base 16)		TOKYO SOKKI KENKYUJO CO., LTD.
-				8-2, MINAMI-OHI 6-CHOME
-				  JAPAN  140-8560
-				JP
-
-00-D0-1D   (hex)		FURUNO ELECTRIC CO., LTD.
-00D01D     (base 16)		FURUNO ELECTRIC CO., LTD.
-				NO. 9-52, ASHIHARA-CHO
-				  662-8580  
-				JP
-
-00-50-4C   (hex)		Galil Motion Control
-00504C     (base 16)		Galil Motion Control
-				270 Technology Way
-				Rocklin  CA  95765
-				US
-
-00-50-76   (hex)		IBM Corp
-005076     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-50-D4   (hex)		JOOHONG INFORMATION &
-0050D4     (base 16)		JOOHONG INFORMATION &
-				COMMUNICATIONS, LTD.
-				SEOUL  SEOUL  KOREA
-				KR
-
-00-50-A6   (hex)		OPTRONICS
-0050A6     (base 16)		OPTRONICS
-				175 CREMONA DRIVE
-				GOLETA  CA  93117
-				US
-
-00-50-A9   (hex)		MOLDAT WIRELESS TECHNOLGIES
-0050A9     (base 16)		MOLDAT WIRELESS TECHNOLGIES
-				3 SHIMON ISRAELI STREET
-				    
-				IL
-
-00-50-9B   (hex)		SWITCHCORE AB
-00509B     (base 16)		SWITCHCORE AB
-				POSITIONEN 153
-				    
-				SE
-
-00-50-7E   (hex)		NEWER TECHNOLOGY
-00507E     (base 16)		NEWER TECHNOLOGY
-				4848 WEST IRVING ST.
-				WICHITA  KS  67209-2621
-				US
-
-00-50-CE   (hex)		LG INTERNATIONAL CORP.
-0050CE     (base 16)		LG INTERNATIONAL CORP.
-				LG TWIN TOWERS
-				SEOUL,  150-606    
-				KR
-
-00-50-F7   (hex)		VENTURE MANUFACTURING (SINGAPORE) LTD.
-0050F7     (base 16)		VENTURE MANUFACTURING (SINGAPORE) LTD.
-				
-				#05-01 Techplace II    569873
-				SG
-
-00-50-19   (hex)		SPRING TIDE NETWORKS, INC.
-005019     (base 16)		SPRING TIDE NETWORKS, INC.
-				85 SWANSON ROAD
-				BOXBOROUGH  MA  01719
-				US
-
-00-50-FD   (hex)		VISIONCOMM CO., LTD.
-0050FD     (base 16)		VISIONCOMM CO., LTD.
-				4, 5F, DAEWON B/D
-				YONGSAN-GU, SEOUL    
-				KR
-
-00-50-BF   (hex)		Metalligence Technology Corp.
-0050BF     (base 16)		Metalligence Technology Corp.
-				NO.9, PARK AVENUE II
-				HSIN-CHU    
-				TW
-
-00-50-36   (hex)		NETCAM, LTD.
-005036     (base 16)		NETCAM, LTD.
-				6071 N. PASEO ZALDIVAR
-				TUCSON  AZ  85750
-				US
-
-00-50-DB   (hex)		CONTEMPORARY CONTROL
-0050DB     (base 16)		CONTEMPORARY CONTROL
-				SYSTEMS, INC.
-				DOWNERS GROVE  IL  60515
-				US
-
-00-50-7C   (hex)		VIDEOCON AG
-00507C     (base 16)		VIDEOCON AG
-				ALBERT-SCHWEITZER-STR. 64
-				    
-				DE
-
-00-50-47   (hex)		Private
-005047     (base 16)		Private
-
-00-D0-6C   (hex)		SHAREWAVE, INC.
-00D06C     (base 16)		SHAREWAVE, INC.
-				5175 HILLSDALE CIRCLE
-				EL DORADO HILLS  CA  95762
-				US
-
-00-50-A7   (hex)		Cisco Systems, Inc
-0050A7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-50-55   (hex)		DOMS A/S
-005055     (base 16)		DOMS A/S
-				FORMERVANGEN 28
-				    
-				DK
-
-00-50-72   (hex)		CORVIS CORPORATION
-005072     (base 16)		CORVIS CORPORATION
-				8320 GUILFORD ROAD
-				COLUMBIA  MD  21046
-				US
-
-00-D0-EE   (hex)		DICTAPHONE CORPORATION
-00D0EE     (base 16)		DICTAPHONE CORPORATION
-				3191 BROADBRIDGE AVE.
-				STRATFORD  CT  06614-2559
-				US
-
-00-50-1B   (hex)		ABL CANADA, INC.
-00501B     (base 16)		ABL CANADA, INC.
-				8550 COTE DE LIESSE
-				ST-LAURENT (QUEBEC) H4T 1H2    
-				CA
-
-00-90-57   (hex)		AANetcom, Inc.
-009057     (base 16)		AANetcom, Inc.
-				4949 LIBERTY LANE - STE. #200
-				ALLENTOWN  PA  18106-9015
-				US
-
-00-90-83   (hex)		TURBO COMMUNICATION, INC.
-009083     (base 16)		TURBO COMMUNICATION, INC.
-				4F-2, NO. 171, SUNG-TEH ROAD
-				TAIPEI    
-				TW
-
-00-90-3D   (hex)		BIOPAC SYSTEMS, INC.
-00903D     (base 16)		BIOPAC SYSTEMS, INC.
-				42 AERO CAMINO
-				SANTA BARBARA  CA  93117
-				US
-
-00-90-D7   (hex)		NetBoost Corp.
-0090D7     (base 16)		NetBoost Corp.
-				390 CAMBRIDGE AVENUE
-				PALO ALTO  CA  94306-1506
-				US
-
-00-50-83   (hex)		GILBARCO, INC.
-005083     (base 16)		GILBARCO, INC.
-				POB 22087
-				GREENSBORO  NC  27420
-				US
-
-00-50-DC   (hex)		TAS TELEFONBAU A. SCHWABE GMBH & CO. KG
-0050DC     (base 16)		TAS TELEFONBAU A. SCHWABE GMBH & CO. KG
-				
-				D-41238 MONCHENGLADBACH    
-				DE
-
-00-50-08   (hex)		TIVA MICROCOMPUTER CORP. (TMC)
-005008     (base 16)		TIVA MICROCOMPUTER CORP. (TMC)
-				48550 FREMONT BLVD.
-				FREMONT  CA  94538
-				US
-
-00-50-52   (hex)		TIARA NETWORKS, INC.
-005052     (base 16)		TIARA NETWORKS, INC.
-				113 FOORIER AVENUE
-				FREMONT  CA  94539
-				US
-
-00-50-27   (hex)		GENICOM CORPORATION
-005027     (base 16)		GENICOM CORPORATION
-				900 CLOPPER ROAD - STE. #110
-				GAITHERSBURG  MD  20878
-				US
-
-00-50-5A   (hex)		NETWORK ALCHEMY, INC.
-00505A     (base 16)		NETWORK ALCHEMY, INC.
-				1521.5 PACIFIC AVENUE
-				SANTA CRUZ  CA  95060
-				US
-
-00-50-39   (hex)		MARINER NETWORKS
-005039     (base 16)		MARINER NETWORKS
-				1585 S. MANCHESTER AVE.
-				ANAHEIM  CA  92802-2907
-				US
-
-00-50-64   (hex)		CAE ELECTRONICS
-005064     (base 16)		CAE ELECTRONICS
-				P.O. BOX 1800
-				ST. LAURENT, QUEBEC H4L 4X4    
-				CA
-
-00-50-B8   (hex)		INOVA COMPUTERS GMBH & CO. KG
-0050B8     (base 16)		INOVA COMPUTERS GMBH & CO. KG
-				SUDETENSTRASSE 5
-				87600 KAUFBEUREN    
-				DE
-
-00-50-5B   (hex)		KAWASAKI LSI U.S.A., INC.
-00505B     (base 16)		KAWASAKI LSI U.S.A., INC.
-				2570 NORTHFIRST STREET
-				SAN JOSE  CA  95131
-				US
-
-00-50-CC   (hex)		Seagate Cloud Systems Inc
-0050CC     (base 16)		Seagate Cloud Systems Inc
-				1351 S Sunset Street
-				Longmont  CO  80501
-				US
-
-00-50-16   (hex)		Molex Canada Ltd
-005016     (base 16)		Molex Canada Ltd
-				216 Bathurst Drive
-				Waterloo  Ontario  N2V 2L7
-				CA
-
-00-50-1F   (hex)		MRG SYSTEMS, LTD.
-00501F     (base 16)		MRG SYSTEMS, LTD.
-				WILLOW HOUSE, SLAD ROAD
-				GLOS.  GL5 1QG England    
-				GB
-
-00-50-43   (hex)		MARVELL SEMICONDUCTOR, INC.
-005043     (base 16)		MARVELL SEMICONDUCTOR, INC.
-				645 ALMANOR AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-50-95   (hex)		PERACOM NETWORKS
-005095     (base 16)		PERACOM NETWORKS
-				13000 WESTON PARKWAY
-				CARY  NC  27513
-				US
-
-00-50-FA   (hex)		OXTEL, LTD.
-0050FA     (base 16)		OXTEL, LTD.
-				THE MARKET PLACE
-				0X11 7LE England    
-				GB
-
-00-90-38   (hex)		FOUNTAIN TECHNOLOGIES, INC.
-009038     (base 16)		FOUNTAIN TECHNOLOGIES, INC.
-				50 RANDOLPH ROAD
-				SOMERSET  NJ  08873
-				US
-
-00-90-B0   (hex)		VADEM
-0090B0     (base 16)		VADEM
-				1960 ZANKER RD
-				SAN JOSE  CA  95112
-				US
-
-00-90-EF   (hex)		INTEGRIX, INC.
-0090EF     (base 16)		INTEGRIX, INC.
-				2001 CORPORATE CENTER DRIVE
-				NEWBURY PARK  CA  91320
-				US
-
-00-90-C5   (hex)		INTERNET MAGIC, INC.
-0090C5     (base 16)		INTERNET MAGIC, INC.
-				6450 LUSK BLVD.-STE. #E-201
-				SAN DIEGO  CA  92121
-				US
-
-00-90-8C   (hex)		ETREND ELECTRONICS, INC.
-00908C     (base 16)		ETREND ELECTRONICS, INC.
-				2F, 22 INDUSTRY E. 9TH ROAD
-				    
-				TW
-
-00-90-48   (hex)		ZEAL CORPORATION
-009048     (base 16)		ZEAL CORPORATION
-				301, HIRAIKE
-				NAGAKUTE-CHO, AICHI-PREF. 480-1155    
-				JP
-
-00-90-B9   (hex)		BERAN INSTRUMENTS LTD.
-0090B9     (base 16)		BERAN INSTRUMENTS LTD.
-				HATCHMOOR INDUSTRIAL ESTATE
-				N DEVON EX38 7HP    
-				GB
-
-00-90-C4   (hex)		JAVELIN SYSTEMS, INC.
-0090C4     (base 16)		JAVELIN SYSTEMS, INC.
-				1881 LANGLEY AVE.
-				IRVINE  CA  92614
-				US
-
-00-90-A5   (hex)		SPECTRA LOGIC
-0090A5     (base 16)		SPECTRA LOGIC
-				1700 N. 55TH STREET
-				BOULDER  CO  80301
-				US
-
-00-90-A3   (hex)		Corecess Inc.
-0090A3     (base 16)		Corecess Inc.
-				135-726, Keopyung B-Town 1F, 203, Nonhyu
-				Seoul    
-				KR
-
-00-90-82   (hex)		FORCE INSTITUTE
-009082     (base 16)		FORCE INSTITUTE
-				PARK ALLE 345
-				DK-2605 BROENDBY    
-				DK
-
-00-90-00   (hex)		DIAMOND MULTIMEDIA
-009000     (base 16)		DIAMOND MULTIMEDIA
-				312 SE STONEMILL DRIVE
-				VANCOUVER  WA  98684
-				US
-
-00-90-6E   (hex)		PRAXON, INC.
-00906E     (base 16)		PRAXON, INC.
-				1700 DELL AVENUE
-				CAMPBELL  CA  95008
-				US
-
-00-90-54   (hex)		INNOVATIVE SEMICONDUCTORS, INC
-009054     (base 16)		INNOVATIVE SEMICONDUCTORS, INC
-				2570 W. EL CAMINO REAL
-				MOUNTAIN VIEW  CA  94040
-				US
-
-00-90-61   (hex)		PACIFIC RESEARCH & ENGINEERING CORPORATION
-009061     (base 16)		PACIFIC RESEARCH & ENGINEERING CORPORATION
-				2070 LAS PALMAS DRIVE
-				CARLSBAD  CA  92009
-				US
-
-00-90-0B   (hex)		LANNER ELECTRONICS, INC.
-00900B     (base 16)		LANNER ELECTRONICS, INC.
-				8F-4, NO. 77, SEC. 1
-				  TAIPEI HSIEN  
-				TW
-
-00-90-CE   (hex)		 avateramedical Mechatronics GmbH
-0090CE     (base 16)		 avateramedical Mechatronics GmbH
-				Gewerbepark „Am Wald“ 4
-				 ILMENAU    D-98693
-				DE
-
-00-90-07   (hex)		DOMEX TECHNOLOGY CORP.
-009007     (base 16)		DOMEX TECHNOLOGY CORP.
-				NO. 2, TECHNOLOGY RD. 1
-				 HSINCHU    
-				TW
-
-00-90-2D   (hex)		DATA ELECTRONICS (AUST.) PTY, LTD.
-00902D     (base 16)		DATA ELECTRONICS (AUST.) PTY, LTD.
-				7 SEISMIC COURT
-				VICTORIA 3178    
-				AU
-
-00-90-D4   (hex)		BindView Development Corp.
-0090D4     (base 16)		BindView Development Corp.
-				3355 WEST ALABAMA #1200
-				HOUSTON  TX  77098
-				US
-
-00-90-29   (hex)		CRYPTO AG
-009029     (base 16)		CRYPTO AG
-				P.O. BOX
-				CH-6301 Zug    
-				CH
-
-00-90-DF   (hex)		MITSUBISHI CHEMICAL AMERICA, INC.
-0090DF     (base 16)		MITSUBISHI CHEMICAL AMERICA, INC.
-				445 INDIO WAY
-				SUNNYVALE  CA  94086
-				US
-
-00-90-C0   (hex)		K.J. LAW ENGINEERS, INC.
-0090C0     (base 16)		K.J. LAW ENGINEERS, INC.
-				42300 W. NINE MILE ROAD
-				NOVI  MI  48375
-				US
-
-00-90-1F   (hex)		ADTEC PRODUCTIONS, INC.
-00901F     (base 16)		ADTEC PRODUCTIONS, INC.
-				408 RUSSELL STREET
-				NASHVILLE  TN  37206
-				US
-
-00-90-24   (hex)		PIPELINKS, INC.
-009024     (base 16)		PIPELINKS, INC.
-				2710 WALSH AVE., STE #300
-				SANTA CLARA  CA  95051
-				US
-
-00-90-3A   (hex)		NIHON MEDIA TOOL INC.
-00903A     (base 16)		NIHON MEDIA TOOL INC.
-				1875 OYAMA-CHO
-				MIE 512-1102    
-				JP
-
-00-90-B2   (hex)		AVICI SYSTEMS INC.
-0090B2     (base 16)		AVICI SYSTEMS INC.
-				12 ELIZABETH DRIVE
-				CHELMSFORD  MA  01824
-				US
-
-00-90-B6   (hex)		FIBEX SYSTEMS
-0090B6     (base 16)		FIBEX SYSTEMS
-				5350 OLD REDWOOD HIGHWAY
-				PETALUMA  CA  94954
-				US
-
-00-90-63   (hex)		COHERENT COMMUNICATIONS SYSTEMS CORPORATION
-009063     (base 16)		COHERENT COMMUNICATIONS SYSTEMS CORPORATION
-				45085 UNIVERSITY DRIVE
-				ASHBURN  VA  20147
-				US
-
-00-90-62   (hex)		ICP VORTEX COMPUTERSYSTEME GmbH
-009062     (base 16)		ICP VORTEX COMPUTERSYSTEME GmbH
-				FALTERSTRASSE 51-53
-				D 74223 FLEIN    
-				DE
-
-00-10-D3   (hex)		GRIPS ELECTRONIC GMBH
-0010D3     (base 16)		GRIPS ELECTRONIC GMBH
-				NIESENBERGERGASSE 37
-				A-8020 GRAZ    
-				AT
-
-00-10-FB   (hex)		ZIDA TECHNOLOGIES LIMITED
-0010FB     (base 16)		ZIDA TECHNOLOGIES LIMITED
-				8/F BLOCK A  GOODVIEW INDUSTRIAL BUILDIN
-				TUEN MUN NT    
-				HK
-
-00-10-53   (hex)		COMPUTER TECHNOLOGY CORP.
-001053     (base 16)		COMPUTER TECHNOLOGY CORP.
-				50 W. TECHNECENTER DRIVE
-				MILFORD  OH  45150
-				US
-
-00-10-ED   (hex)		SUNDANCE TECHNOLOGY, INC.
-0010ED     (base 16)		SUNDANCE TECHNOLOGY, INC.
-				20111 STEVENS CREEK BLVD.
-				CUPERTINO  CA  95014
-				US
-
-00-10-6C   (hex)		EDNT GmbH
-00106C     (base 16)		EDNT GmbH
-				Werner-von-Siemens-Str. 7
-				64625  Bensheim  
-				DE
-
-00-10-E9   (hex)		RAIDTEC LTD.
-0010E9     (base 16)		RAIDTEC LTD.
-				CASTLE ROAD
-				Little Island  County Cork  
-				IE
-
-00-10-03   (hex)		IMATRON, INC.
-001003     (base 16)		IMATRON, INC.
-				389 OYSTER POINT BLVD.
-				SO. SAN FRANCISCO  CA  94080
-				US
-
-00-10-71   (hex)		ADVANET INC.
-001071     (base 16)		ADVANET INC.
-				3-20-8 NODA
-				  OKAYAMI 700  
-				JP
-
-00-90-15   (hex)		CENTIGRAM COMMUNICATIONS CORP.
-009015     (base 16)		CENTIGRAM COMMUNICATIONS CORP.
-				91 EAST TASMAN DRIVE
-				SAN JOSE  CA  95134
-				US
-
-00-90-95   (hex)		UNIVERSAL AVIONICS
-009095     (base 16)		UNIVERSAL AVIONICS
-				11351 WILLOWS ROAD NE
-				REDMOND  WA  98052-2552
-				US
-
-00-90-41   (hex)		APPLIED DIGITAL ACCESS
-009041     (base 16)		APPLIED DIGITAL ACCESS
-				9855 SCRANTON ROAD
-				SAN DIEGO  CA  92121
-				US
-
-00-90-5A   (hex)		DEARBORN GROUP, INC.
-00905A     (base 16)		DEARBORN GROUP, INC.
-				33604 West 8 Mile Rd
-				Farmington Hills  MI  48335
-				US
-
-00-90-11   (hex)		WAVTrace, Inc.
-009011     (base 16)		WAVTrace, Inc.
-				1555 132ND AVE. NE
-				BELLEVUE  WA  98005
-				US
-
-00-90-65   (hex)		FINISAR CORPORATION
-009065     (base 16)		FINISAR CORPORATION
-				1389 Moffett Park Dr
-				Sunnyvale  CA  94089
-				US
-
-00-90-23   (hex)		ZILOG INC.
-009023     (base 16)		ZILOG INC.
-				910 East Hamilton Ave.
-				Campbell  CA  95008
-				US
-
-00-90-F6   (hex)		ESCALATE NETWORKS, INC.
-0090F6     (base 16)		ESCALATE NETWORKS, INC.
-				6 HUGHES
-				IRVINE  CA  92617
-				US
-
-00-90-A8   (hex)		NineTiles Networks, Ltd.
-0090A8     (base 16)		NineTiles Networks, Ltd.
-				9 Station Road
-				Waterbeach  Cambridge  CB5 9HT
-				GB
-
-00-10-2A   (hex)		ZF MICROSYSTEMS, INC.
-00102A     (base 16)		ZF MICROSYSTEMS, INC.
-				1052 ELWELL COURT
-				PALO ALTO  CA  94303-4307
-				US
-
-00-10-E5   (hex)		SOLECTRON TEXAS
-0010E5     (base 16)		SOLECTRON TEXAS
-				12455 RESEARCH BLVD. M/S 2205
-				AUSTIN  TX  78759
-				US
-
-00-10-9D   (hex)		CLARINET SYSTEMS, INC.
-00109D     (base 16)		CLARINET SYSTEMS, INC.
-				1415 KOLL CIRCLE #101
-				SAN JOSE  CA  95112
-				US
-
-00-10-0E   (hex)		MICRO LINEAR COPORATION
-00100E     (base 16)		MICRO LINEAR COPORATION
-				2092 CONCOURSE DRIVE
-				SAN JOSE  CA  95131
-				US
-
-00-90-EC   (hex)		PYRESCOM
-0090EC     (base 16)		PYRESCOM
-				3 ALLEE DU MOULIN
-				66680 CANOHES    
-				FR
-
-00-90-C3   (hex)		TOPIC SEMICONDUCTOR CORP.
-0090C3     (base 16)		TOPIC SEMICONDUCTOR CORP.
-				11F-1, NO. 2, WU-LIN RD.
-				HSIN-CHU    
-				TW
-
-00-10-C8   (hex)		COMMUNICATIONS ELECTRONICS SECURITY GROUP
-0010C8     (base 16)		COMMUNICATIONS ELECTRONICS SECURITY GROUP
-				10/4W22 FIDDLERS GREEN LANE
-				Benhall, Cheltenham  Glouster GL52 5AJ  
-				GB
-
-00-10-F3   (hex)		Nexcom International Co., Ltd.
-0010F3     (base 16)		Nexcom International Co., Ltd.
-				18F, No. 716, Chung-Cheng Road,
-				Taipei Hsien 235,    
-				TW
-
-00-10-86   (hex)		ATTO Technology, Inc.
-001086     (base 16)		ATTO Technology, Inc.
-				155 Crosspoint Pkwy.
-				Amherst  NY  14068
-				US
-
-00-10-DF   (hex)		RISE COMPUTER INC.
-0010DF     (base 16)		RISE COMPUTER INC.
-				9F, NO. 306-3, TATUNG RD.
-				TAIPEI HSIEN    
-				TW
-
-00-10-72   (hex)		GVN TECHNOLOGIES, INC.
-001072     (base 16)		GVN TECHNOLOGIES, INC.
-				8200 BRYAN DAIRY ROAD
-				LARGO  FL  33777
-				US
-
-00-10-DA   (hex)		Kollmorgen Corp
-0010DA     (base 16)		Kollmorgen Corp
-				33 S.LA PATERA LN
-				SANTA BARBARA  CA  93117
-				US
-
-00-10-E4   (hex)		NSI CORPORATION
-0010E4     (base 16)		NSI CORPORATION
-				P.O. BOX 635
-				WILSONVILLE  OR  97070
-				US
-
-00-10-7E   (hex)		BACHMANN ELECTRONIC GmbH
-00107E     (base 16)		BACHMANN ELECTRONIC GmbH
-				KREUZAECKERWEG 33
-				A 6806 FELDKIRCH    
-				AT
-
-00-10-A0   (hex)		INNOVEX TECHNOLOGIES, INC.
-0010A0     (base 16)		INNOVEX TECHNOLOGIES, INC.
-				KEYSTONE COMMONS
-				TURTLE CREEK  PA  15145
-				US
-
-00-10-16   (hex)		T.SQWARE
-001016     (base 16)		T.SQWARE
-				6, PARC ARIANE
-				78284 GUYANCOURT CEDEX    
-				FR
-
-00-10-90   (hex)		CIMETRICS, INC.
-001090     (base 16)		CIMETRICS, INC.
-				55 TEMPLE PLACE
-				BOSTON  MA  02111
-				US
-
-00-10-F5   (hex)		AMHERST SYSTEMS, INC.
-0010F5     (base 16)		AMHERST SYSTEMS, INC.
-				30 WILSON ROAD
-				BUFFALO  NY  14221
-				US
-
-00-10-3D   (hex)		PHASECOM, LTD.
-00103D     (base 16)		PHASECOM, LTD.
-				P.O. BOX 45017
-				JERUSALEM 91450    
-				IL
-
-00-10-96   (hex)		TRACEWELL SYSTEMS, INC.
-001096     (base 16)		TRACEWELL SYSTEMS, INC.
-				567 ENTERPRISE DRIVE
-				WESTERVILLE  OH  43081
-				US
-
-00-10-82   (hex)		JNA TELECOMMUNICATIONS LIMITED
-001082     (base 16)		JNA TELECOMMUNICATIONS LIMITED
-				16 SMITH ST, CHATSWOOD
-				  NSW 2067  
-				AU
-
-00-10-98   (hex)		STARNET TECHNOLOGIES, INC.
-001098     (base 16)		STARNET TECHNOLOGIES, INC.
-				2210 O'TOOLE AVE.
-				SAN JOSE  CA  95131
-				US
-
-00-10-42   (hex)		Alacritech, Inc.
-001042     (base 16)		Alacritech, Inc.
-				1995 N. First Street
-				San Jose  CA  95112
-				US
-
-00-10-68   (hex)		COMOS TELECOM
-001068     (base 16)		COMOS TELECOM
-				SAEHAN B/D/, 27-1 SUPYO-DONG
-				CHUNG-GU,  SEOUL (100-230)    
-				KR
-
-00-10-EA   (hex)		ADEPT TECHNOLOGY
-0010EA     (base 16)		ADEPT TECHNOLOGY
-				150 ROSE ORCHARD WAY
-				SAN JOSE  CA  95134
-				US
-
-00-10-AE   (hex)		SHINKO ELECTRIC INDUSTRIES CO.
-0010AE     (base 16)		SHINKO ELECTRIC INDUSTRIES CO.
-				80 OSHIMADA-MACHI
-				NAGANO-SHI 381-22    
-				JP
-
-00-10-C4   (hex)		MEDIA GLOBAL LINKS CO., LTD.
-0010C4     (base 16)		MEDIA GLOBAL LINKS CO., LTD.
-				580-16, horikawa-cho,saiwai-ku
-				Kawasaki, Kanagawa 212-0013    
-				JP
-
-00-10-FE   (hex)		DIGITAL EQUIPMENT CORPORATION
-0010FE     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				301 ROCKRIMMON BLVD, SOUTH
-				COLORADO SPRINGS  CO  80919
-				US
-
-00-10-56   (hex)		SODICK CO., LTD.
-001056     (base 16)		SODICK CO., LTD.
-				3-12-1 NAKAMACHIDAI
-				TSUZUKI-KU, YOKOHAMA  KANAGAWA 224  
-				JP
-
-00-10-CD   (hex)		INTERFACE CONCEPT
-0010CD     (base 16)		INTERFACE CONCEPT
-				3 VENELLE de KERGOS
-				29000 QUIMPER    
-				FR
-
-00-10-61   (hex)		HOSTLINK CORP.
-001061     (base 16)		HOSTLINK CORP.
-				10F-1, NO. 181
-				HSI-CHIH, TAIPEI    
-				TW
-
-00-10-99   (hex)		InnoMedia, Inc.
-001099     (base 16)		InnoMedia, Inc.
-				4800 GREAT AMERICA PARKWAY
-				SANTA CLARA  CA  95054
-				US
-
-00-10-E1   (hex)		S.I. TECH, INC.
-0010E1     (base 16)		S.I. TECH, INC.
-				P.O. BOX 609
-				GENEVA  IL  60134
-				US
-
-00-10-BB   (hex)		DATA & INFORMATION TECHNOLOGY
-0010BB     (base 16)		DATA & INFORMATION TECHNOLOGY
-				TECHNOLOGY HOUSE
-				BOTTESFORD, NOTTINGHAM NG13 OEL    
-				GB
-
-00-10-20   (hex)		Hand Held Products Inc
-001020     (base 16)		Hand Held Products Inc
-				700 Visions Drive
-				Skaneateles Falls  NY  13153-0208
-				US
-
-00-10-3A   (hex)		DIAMOND NETWORK TECH
-00103A     (base 16)		DIAMOND NETWORK TECH
-				P.O. BOX 84525
-				GREENSIDE 2034    
-				ZA
-
-00-10-04   (hex)		THE BRANTLEY COILE COMPANY,INC
-001004     (base 16)		THE BRANTLEY COILE COMPANY,INC
-				545 RESEARCH DRIVE
-				ATHENS  GA  30605
-				US
-
-00-10-EF   (hex)		DBTEL INCORPORATED
-0010EF     (base 16)		DBTEL INCORPORATED
-				NO.29 TZU-CHIANG ST.,
-				TU-CHENG TAIPEI    
-				TW
-
-00-10-88   (hex)		AMERICAN NETWORKS INC.
-001088     (base 16)		AMERICAN NETWORKS INC.
-				6800 ORANGETHORPE AVE. #A
-				BUENA PARK  CA  90620
-				US
-
-00-10-22   (hex)		SatCom Media Corporation
-001022     (base 16)		SatCom Media Corporation
-				3255-7 SCOTT BLVD.
-				SANTA CLARA  CA  95054
-				US
-
-00-10-76   (hex)		EUREM GmbH
-001076     (base 16)		EUREM GmbH
-				JULICHER STR. 338B
-				D-52070 AACHEN    
-				DE
-
-00-10-3F   (hex)		TOLLGRADE COMMUNICATIONS, INC.
-00103F     (base 16)		TOLLGRADE COMMUNICATIONS, INC.
-				493 NIXON ROAD
-				CHESWICK  PA  15024
-				US
-
-00-10-49   (hex)		ShoreTel, Inc
-001049     (base 16)		ShoreTel, Inc
-				960 Stewart Drive
-				Sunnyvale  CA  94085
-				US
-
-00-10-5E   (hex)		Spirent plc, Service Assurance Broadband
-00105E     (base 16)		Spirent plc, Service Assurance Broadband
-				5280 Corporate Dr
-				Ballenger Creek  MD  21703
-				US
-
-00-10-AF   (hex)		TAC SYSTEMS, INC.
-0010AF     (base 16)		TAC SYSTEMS, INC.
-				1035 PUTMAN DRIVE--STE.
-				HUNTSVILLE  AL  35816-2271
-				US
-
-00-10-8C   (hex)		Fujitsu Services Ltd
-00108C     (base 16)		Fujitsu Services Ltd
-				SOLIHULL PARKWAY
-				BIRMINGHAM B37 7YU  England  0000
-				GB
-
-00-10-F7   (hex)		IRIICHI TECHNOLOGIES Inc.
-0010F7     (base 16)		IRIICHI TECHNOLOGIES Inc.
-				1-26-7 CHUO, NAKANA-KU
-				 TOKYO 164    
-				JP
-
-00-10-AB   (hex)		KOITO ELECTRIC INDUSTRIES, LTD.
-0010AB     (base 16)		KOITO ELECTRIC INDUSTRIES, LTD.
-				100 MAEDA-CHO, TOTSUKA-KU
-				YOKOHAMA 244  KANAGAWA  244-8569
-				JP
-
-00-10-10   (hex)		INITIO CORPORATION
-001010     (base 16)		INITIO CORPORATION
-				2188 B DEL FRANCO STREET
-				SAN JOSE  CA  95118
-				US
-
-00-10-F2   (hex)		ANTEC
-0010F2     (base 16)		ANTEC
-				4920 AVALON RIDGE PKWY
-				NORCROSS  GA  30071
-				US
-
-00-E0-07   (hex)		Avaya ECS Ltd
-00E007     (base 16)		Avaya ECS Ltd
-				Unit 1 Sterling Court, Mundells
-				Welwyn Garden City  Hert  AL7 1LZ
-				GB
-
-00-10-BE   (hex)		MARCH NETWORKS CORPORATION
-0010BE     (base 16)		MARCH NETWORKS CORPORATION
-				303 Terry Fox Drive
-				OTTAWA, ONTARIO    K2K 3J1
-				CA
-
-00-10-58   (hex)		ArrowPoint Communications
-001058     (base 16)		ArrowPoint Communications
-				235 LITTLETON ROAD
-				WESTFORD  MA  01886
-				US
-
-00-10-0F   (hex)		INDUSTRIAL CPU SYSTEMS
-00100F     (base 16)		INDUSTRIAL CPU SYSTEMS
-				111-D W. DYER ROAD
-				SANTA ANA  CA  92707
-				US
-
-00-10-BC   (hex)		Aastra Telecom
-0010BC     (base 16)		Aastra Telecom
-				8 Federal Street
-				Billerica  MA  01821-3570
-				US
-
-00-E0-BF   (hex)		TORRENT NETWORKING TECHNOLOGIES CORP.
-00E0BF     (base 16)		TORRENT NETWORKING TECHNOLOGIES CORP.
-				8181 PROFESSIONAL PLACE
-				LANDOVER  MD  20785
-				US
-
-00-E0-E3   (hex)		SK-ELEKTRONIK GMBH
-00E0E3     (base 16)		SK-ELEKTRONIK GMBH
-				HEMMELRATHERWEG 201
-				51377 LEVERKUSEN    
-				DE
-
-00-E0-C6   (hex)		LINK2IT, L.L.C.
-00E0C6     (base 16)		LINK2IT, L.L.C.
-				4256 BECK AVENUE
-				STUDIO CITY  CA  91604
-				US
-
-00-E0-E5   (hex)		CINCO NETWORKS, INC.
-00E0E5     (base 16)		CINCO NETWORKS, INC.
-				6601 KOLL CENTER PARK WAY
-				PLEASANTON  CA  94566
-				US
-
-00-E0-61   (hex)		EdgePoint Networks, Inc.
-00E061     (base 16)		EdgePoint Networks, Inc.
-				2238 MARTIN AVENUE
-				SANTA CLARA  CA  95050
-				US
-
-00-E0-53   (hex)		CELLPORT LABS, INC.
-00E053     (base 16)		CELLPORT LABS, INC.
-				885 ARAPAHOE AVE.,
-				BOULDER  CO  80302
-				US
-
-00-E0-D3   (hex)		DATENTECHNIK GmbH
-00E0D3     (base 16)		DATENTECHNIK GmbH
-				THERESIANUMGASSE 11
-				A-1040 WIEN    
-				AT
-
-00-E0-43   (hex)		VitalCom
-00E043     (base 16)		VitalCom
-				15222 DEL AMO AVE.
-				TUSTIN  CA  92780
-				US
-
-00-E0-B3   (hex)		EtherWAN Systems, Inc.
-00E0B3     (base 16)		EtherWAN Systems, Inc.
-				14 HUGHES,  STE.B-105
-				IRVINE  CA  92618
-				US
-
-00-E0-ED   (hex)		SILICOM, LTD.
-00E0ED     (base 16)		SILICOM, LTD.
-				8 HANAGER ST.
-				KFAR-SAVA 44000    
-				IL
-
-00-E0-B8   (hex)		GATEWAY 2000
-00E0B8     (base 16)		GATEWAY 2000
-				610 GATEWAY DRIVE
-				N. SIOUX CITY  SD  57049
-				US
-
-00-E0-7C   (hex)		METTLER-TOLEDO, INC.
-00E07C     (base 16)		METTLER-TOLEDO, INC.
-				1150 DEARBORN DRIVE
-				WORTHINGTON  OH  43085
-				US
-
-00-E0-26   (hex)		Redlake MASD LLC
-00E026     (base 16)		Redlake MASD LLC
-				3440 E. Pritannia Dr.
-				Tuscon  AZ  85706
-				US
-
-00-E0-20   (hex)		TECNOMEN OY
-00E020     (base 16)		TECNOMEN OY
-				P.O. BOX 93
-				FIN-02271 ESPOO    
-				FI
-
-00-E0-0D   (hex)		RADIANT SYSTEMS
-00E00D     (base 16)		RADIANT SYSTEMS
-				1000 ALDERMAN DR.
-				ALPHARETTA  GA  30202
-				US
-
-00-E0-DC   (hex)		NEXWARE CORP.
-00E0DC     (base 16)		NEXWARE CORP.
-				825 STEWART DR.,  STE #4
-				SUNNYVALE  CA  94086
-				US
-
-00-E0-37   (hex)		CENTURY CORPORATION
-00E037     (base 16)		CENTURY CORPORATION
-				2-28-5, Taito
-				TAITO-KU,  TOKYO  101
-				JP
-
-00-E0-C2   (hex)		NECSY S.p.A.
-00E0C2     (base 16)		NECSY S.p.A.
-				VIA LISBONA 28
-				35020 PADOVA    
-				IT
-
-00-E0-FB   (hex)		LEIGHTRONIX, INC.
-00E0FB     (base 16)		LEIGHTRONIX, INC.
-				2330 JARCO DR.
-				HOLT  MI  48842
-				US
-
-00-E0-9B   (hex)		ENGAGE NETWORKS, INC.
-00E09B     (base 16)		ENGAGE NETWORKS, INC.
-				316 N. MILWAUKEE ST., STE.#214
-				MILWAUKEE  WI  53202
-				US
-
-00-E0-45   (hex)		TOUCHWAVE, INC.
-00E045     (base 16)		TOUCHWAVE, INC.
-				Maglebjergvej 5B
-				DK-2800 Lyngby    
-				DK
-
-00-E0-40   (hex)		DeskStation Technology, Inc.
-00E040     (base 16)		DeskStation Technology, Inc.
-				15729 COLLEGE BLVD.
-				LENEXA  KS  66219
-				US
-
-00-E0-1A   (hex)		COMTEC SYSTEMS. CO., LTD.
-00E01A     (base 16)		COMTEC SYSTEMS. CO., LTD.
-				404-9 CHOUNGCHEN-DONG
-				BUPYOUNG-KU, INCHON    
-				KR
-
-00-E0-78   (hex)		BERKELEY NETWORKS
-00E078     (base 16)		BERKELEY NETWORKS
-				683 RIVER OAKS PARKWAY
-				SAN JOSE  CA  95134
-				US
-
-00-E0-87   (hex)		LeCroy - Networking Productions Division
-00E087     (base 16)		LeCroy - Networking Productions Division
-				25 BURLINGTON MALL ROAD
-				BURLINGTON  MA  01803
-				US
-
-00-E0-41   (hex)		CSPI
-00E041     (base 16)		CSPI
-				43 Manning Rd.
-				Billerica  MA  01821
-				US
-
-00-E0-E2   (hex)		INNOVA CORP.
-00E0E2     (base 16)		INNOVA CORP.
-				3325 SOUTH 116TH STREET
-				SEATTLE  WA  98168
-				US
-
-00-E0-81   (hex)		TYAN COMPUTER CORP.
-00E081     (base 16)		TYAN COMPUTER CORP.
-				3288 LAUREVIEW CT
-				Fremont  CA  95035
-				US
-
-00-E0-57   (hex)		HAN MICROTELECOM. CO., LTD.
-00E057     (base 16)		HAN MICROTELECOM. CO., LTD.
-				FASHION BD., 3RD FR,
-				DONG SEO-GU, TAEJON  KOREA 302-173  
-				KR
-
-00-E0-BC   (hex)		SYMON COMMUNICATIONS, INC.
-00E0BC     (base 16)		SYMON COMMUNICATIONS, INC.
-				10701 CORPORATE DR.-STE. #290
-				STAFFORD  TX  77477
-				US
-
-00-E0-82   (hex)		ANERMA
-00E082     (base 16)		ANERMA
-				SCHAAPSDRIES 25
-				2260 WESTERLO    
-				BE
-
-00-E0-77   (hex)		WEBGEAR, INC.
-00E077     (base 16)		WEBGEAR, INC.
-				1263 OAKMEAD PKWY
-				SUNNYVALE  CA  94080
-				US
-
-00-E0-56   (hex)		HOLONTECH CORPORATION
-00E056     (base 16)		HOLONTECH CORPORATION
-				2039 SAMARITAN DRIVE
-				SAN JOSE  CA  95124
-				US
-
-00-E0-31   (hex)		HAGIWARA ELECTRIC CO., LTD.
-00E031     (base 16)		HAGIWARA ELECTRIC CO., LTD.
-				7, SHIMOKOFUKADA, ASADA-CHO
-				NISSHIN-SHI, AICHI  470-01    
-				JP
-
-00-E0-0B   (hex)		ROOFTOP COMMUNICATIONS CORP.
-00E00B     (base 16)		ROOFTOP COMMUNICATIONS CORP.
-				468 PACO DRIVE
-				LOS ALTOS  CA  94024
-				US
-
-00-E0-B2   (hex)		TELMAX COMMUNICATIONS CORP.
-00E0B2     (base 16)		TELMAX COMMUNICATIONS CORP.
-				46515 LANDING PARKWAY
-				FREMONT  CA  94538
-				US
-
-00-E0-2F   (hex)		MCNS HOLDINGS, L.P.
-00E02F     (base 16)		MCNS HOLDINGS, L.P.
-				TCI, INC.-TECHNOLOGY VENTURES
-				DENVER  CO  80217-5630
-				US
-
-00-E0-7E   (hex)		WALT DISNEY IMAGINEERING
-00E07E     (base 16)		WALT DISNEY IMAGINEERING
-				1401 FLOWER ST.
-				GLENDALE  CA  91221
-				US
-
-00-E0-99   (hex)		SAMSON AG
-00E099     (base 16)		SAMSON AG
-				WEISMULLERSTR. 3
-				D-60314 FRANKFURT    
-				DE
-
-00-60-AE   (hex)		TRIO INFORMATION SYSTEMS AB
-0060AE     (base 16)		TRIO INFORMATION SYSTEMS AB
-				FOGDEVAGEN 4B
-				  S-183 64 TABY  
-				SE
-
-00-60-53   (hex)		TOYODA MACHINE WORKS, LTD.
-006053     (base 16)		TOYODA MACHINE WORKS, LTD.
-				1-7 KITAJIZOYAMA NODACHOU
-				KARIYA CITY, AICHI    
-				JO
-
-00-60-56   (hex)		NETWORK TOOLS, INC.
-006056     (base 16)		NETWORK TOOLS, INC.
-				2975 BOWERS AVENUE, #202
-				SANTA CLARA  CA  95051-0955
-				US
-
-00-60-0C   (hex)		Eurotech Inc.
-00600C     (base 16)		Eurotech Inc.
-				10260 Old Columbia Road
-				COLUMBIA  MD  21046
-				US
-
-00-60-1C   (hex)		TELXON CORPORATION
-00601C     (base 16)		TELXON CORPORATION
-				3330 W. MARKET STREET
-				AKRON  OH  44334-0582
-				US
-
-00-60-5F   (hex)		NIPPON UNISOFT CORPORATION
-00605F     (base 16)		NIPPON UNISOFT CORPORATION
-				BR NINGYOCHO 1,2-13-9
-				TOKYO 103    
-				JP
-
-00-60-91   (hex)		FIRST PACIFIC NETWORKS, INC.
-006091     (base 16)		FIRST PACIFIC NETWORKS, INC.
-				871 FOX LANE
-				SAN JOSE  CA  95131
-				US
-
-00-60-1D   (hex)		LUCENT TECHNOLOGIES
-00601D     (base 16)		LUCENT TECHNOLOGIES
-				101 CRAWFORDS CORNER RD.
-				HOLMDEL  NJ  07733
-				US
-
-00-60-7B   (hex)		FORE SYSTEMS, INC.
-00607B     (base 16)		FORE SYSTEMS, INC.
-				1000 FORE DRIVE
-				WARRENDALE  PA  15086
-				US
-
-00-E0-6C   (hex)		Ultra Electronics Command & Control Systems
-00E06C     (base 16)		Ultra Electronics Command & Control Systems
-				Knaves Beech Business Centre
-				Hemel Hemstead  Herts England  HP2 7BW
-				GB
-
-00-E0-4A   (hex)		ZX Technologies, Inc
-00E04A     (base 16)		ZX Technologies, Inc
-				760 Spanish Oak Trail
-				Dripping Springs  TX  78620
-				US
-
-00-60-C9   (hex)		ControlNet, Inc.
-0060C9     (base 16)		ControlNet, Inc.
-				747 CAMDEN, STE. A
-				CAMPBELL  CA  95008
-				US
-
-00-E0-7A   (hex)		MIKRODIDAKT AB
-00E07A     (base 16)		MIKRODIDAKT AB
-				Skiffervägen 48
-				LUND    SE22478
-				SE
-
-00-60-32   (hex)		I-CUBE, INC.
-006032     (base 16)		I-CUBE, INC.
-				2328-C WALSH AVENUE
-				SANTA CLARA  CA  95014
-				US
-
-00-60-33   (hex)		ACUITY IMAGING, INC.
-006033     (base 16)		ACUITY IMAGING, INC.
-				9 TOWNSEND WEST
-				NASHUA  NH  03063
-				US
-
-00-60-13   (hex)		NETSTAL MASCHINEN AG
-006013     (base 16)		NETSTAL MASCHINEN AG
-				INDUSTRIESTRASSE
-				CH-8752 NAEFELS    
-				CH
-
-00-60-22   (hex)		VICOM SYSTEMS, INC.
-006022     (base 16)		VICOM SYSTEMS, INC.
-				1961 LANDINGS DRIVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-60-EE   (hex)		APOLLO
-0060EE     (base 16)		APOLLO
-				3610 BIRCH STREET--STE #100
-				NEWPORT BEACH  CA  92660
-				US
-
-00-60-D8   (hex)		ELMIC SYSTEMS, INC.
-0060D8     (base 16)		ELMIC SYSTEMS, INC.
-				DAI-ICHI SEIMEI BLDG.
-				YOKOHAMA 231    
-				JP
-
-00-60-EF   (hex)		FLYTECH TECHNOLOGY CO., LTD.
-0060EF     (base 16)		FLYTECH TECHNOLOGY CO., LTD.
-				No.168 Sing-ai Rd., Neihu District
-				TAIPEI CITY    114
-				TW
-
-00-60-85   (hex)		Storage Concepts
-006085     (base 16)		Storage Concepts
-				14352 Chamber Road
-				Tustin  CA  92780
-				US
-
-00-60-11   (hex)		CRYSTAL SEMICONDUCTOR CORP.
-006011     (base 16)		CRYSTAL SEMICONDUCTOR CORP.
-				P.O. BOX 17847
-				AUSTIN  TX  78760
-				US
-
-00-60-F5   (hex)		ICON WEST, INC.
-0060F5     (base 16)		ICON WEST, INC.
-				3342 SOUTH 300 EAST
-				SALT LAKE CITY  UT  84115
-				US
-
-00-60-62   (hex)		TELESYNC, INC.
-006062     (base 16)		TELESYNC, INC.
-				5555 OAKBROOK PKWY-STE #110
-				NORCROSS  GA  30093
-				US
-
-00-60-E9   (hex)		ATOP TECHNOLOGIES, INC.
-0060E9     (base 16)		ATOP TECHNOLOGIES, INC.
-				SUITE 305, NO. 47, PARK AVENUE II,
-				HSINCHU 30047    
-				TW
-
-00-60-43   (hex)		iDirect, INC.
-006043     (base 16)		iDirect, INC.
-				13865 Sunrise Vally Drive
-				Herndon  VA  20171
-				US
-
-00-60-28   (hex)		MACROVISION CORPORATION
-006028     (base 16)		MACROVISION CORPORATION
-				2830 De La Cruz Boulevard
-				Santa Clara  CA  95050
-				US
-
-00-60-F0   (hex)		JOHNSON & JOHNSON MEDICAL, INC
-0060F0     (base 16)		JOHNSON & JOHNSON MEDICAL, INC
-				4110 GEORGE RD.
-				TAMPA  FL  33634
-				US
-
-00-60-E0   (hex)		AXIOM TECHNOLOGY CO., LTD.
-0060E0     (base 16)		AXIOM TECHNOLOGY CO., LTD.
-				3F, 14, LANE 235
-				TAIPEI HSIEN    
-				TW
-
-00-60-96   (hex)		T.S. MICROTECH INC.
-006096     (base 16)		T.S. MICROTECH INC.
-				20818 HIGGINS COURT
-				TORRANCE  CA  90501
-				US
-
-00-60-3A   (hex)		QUICK CONTROLS LTD.
-00603A     (base 16)		QUICK CONTROLS LTD.
-				DURHAM HOUSE, WARWICK COURT
-				MANCHESTER  M24 1AE    
-				GB
-
-00-02-88   (hex)		GLOBAL VILLAGE COMMUNICATION
-000288     (base 16)		GLOBAL VILLAGE COMMUNICATION
-				1144 EAST ARQUES AVE.
-				SUNNYVALE  CA  94086
-				US
-
-00-60-34   (hex)		ROBERT BOSCH GmbH
-006034     (base 16)		ROBERT BOSCH GmbH
-				POSTBOX 11 62
-				D-64701 ERBACH    
-				DE
-
-00-60-50   (hex)		INTERNIX INC.
-006050     (base 16)		INTERNIX INC.
-				59-10 TAKAKURA-CHO
-				  TOKYO 192  
-				JP
-
-00-60-FA   (hex)		EDUCATIONAL TECHNOLOGY RESOURCES, INC.
-0060FA     (base 16)		EDUCATIONAL TECHNOLOGY RESOURCES, INC.
-				1742 CHURCH STREET
-				HOLBROOK  NY  11741
-				US
-
-00-60-DA   (hex)		Red Lion Controls, LP
-0060DA     (base 16)		Red Lion Controls, LP
-				20 Willow Springs Circle
-				York  NY  17402
-				US
-
-00-60-E4   (hex)		COMPUSERVE, INC.
-0060E4     (base 16)		COMPUSERVE, INC.
-				5000 ARLINGTON CENTRE BLVD.
-				COLUMBUS  OH  43220
-				US
-
-00-60-8F   (hex)		TEKRAM TECHNOLOGY CO., LTD.
-00608F     (base 16)		TEKRAM TECHNOLOGY CO., LTD.
-				B1, NO. 17, LANE 159, SEC. 6
-				TAIPEI    
-				TW
-
-00-60-C4   (hex)		SOLITON SYSTEMS K.K.
-0060C4     (base 16)		SOLITON SYSTEMS K.K.
-				2-4-3 SHINJUKU, SHINJUKU-KU
-				TOKYO 160    
-				JP
-
-00-A0-3C   (hex)		EG&G NUCLEAR INSTRUMENTS
-00A03C     (base 16)		EG&G NUCLEAR INSTRUMENTS
-				100 MIDLAND ROAD
-				OAK RIDGE  TN  37830
-				US
-
-00-A0-C4   (hex)		CRISTIE ELECTRONICS LTD.
-00A0C4     (base 16)		CRISTIE ELECTRONICS LTD.
-				BOND'S MILL
-				GLOUCESTERSHIRE GL10 3RG    
-				GB
-
-00-A0-63   (hex)		JRL SYSTEMS, INC.
-00A063     (base 16)		JRL SYSTEMS, INC.
-				8305 HWY 71 WEST
-				AUSTIN  TX  78735
-				US
-
-00-A0-2C   (hex)		interWAVE Communications
-00A02C     (base 16)		interWAVE Communications
-				656 BAIR ISLAND BLVD.-STE.#108
-				REDWOOD CITY  CA  94063-2704
-				US
-
-00-A0-F7   (hex)		V.I COMPUTER CORP.
-00A0F7     (base 16)		V.I COMPUTER CORP.
-				531 ENCINITAS BLVD--#114
-				ENCINITAS  CA  92024
-				US
-
-00-A0-90   (hex)		TimeStep Corporation
-00A090     (base 16)		TimeStep Corporation
-				359 TERRY FOX DRIVE
-				KANATA, ONTARIO K2K 2E7    
-				CA
-
-00-A0-EA   (hex)		ETHERCOM CORP.
-00A0EA     (base 16)		ETHERCOM CORP.
-				45990 HOTCHKISS ST.
-				FREEMONT  CA  94539
-				US
-
-00-A0-DC   (hex)		O.N. ELECTRONIC CO., LTD.
-00A0DC     (base 16)		O.N. ELECTRONIC CO., LTD.
-				3-20-27, TARUMI
-				SUITA, OSAKA 564    
-				JP
-
-00-A0-0B   (hex)		COMPUTEX CO., LTD.
-00A00B     (base 16)		COMPUTEX CO., LTD.
-				432-13 GOJYOBASHI-HIGASHI 4-CHYOME
-				 HIGASHIYAMAKU, KYOTO-CITY 605    
-				JP
-
-00-A0-E2   (hex)		Keisokugiken Corporation
-00A0E2     (base 16)		Keisokugiken Corporation
-				2021-5 Houshakuji
-				Shioya-gun  Tochigi  329-1233
-				JP
-
-00-A0-33   (hex)		imc MeBsysteme GmbH
-00A033     (base 16)		imc MeBsysteme GmbH
-				VOLTASTRASSE 5
-				D-13355 BERLIN    
-				DE
-
-00-A0-A9   (hex)		NAVTEL COMMUNICATIONS INC.
-00A0A9     (base 16)		NAVTEL COMMUNICATIONS INC.
-				55 RENFREW DRIVE
-				MARKHAM, ONTARIO L3R 8H3    
-				CA
-
-00-A0-71   (hex)		VIDEO LOTTERY TECHNOLOGIES,INC
-00A071     (base 16)		VIDEO LOTTERY TECHNOLOGIES,INC
-				2311 SOUTH 7TH AVENUE
-				BOZEMAN  MT  59715
-				US
-
-00-60-00   (hex)		XYCOM INC.
-006000     (base 16)		XYCOM INC.
-				750 N. MAPLE
-				SALINE  MI  48176
-				US
-
-00-60-45   (hex)		PATHLIGHT TECHNOLOGIES
-006045     (base 16)		PATHLIGHT TECHNOLOGIES
-				767 WARREN ROAD
-				ITHACA  NY  14850
-				US
-
-00-A0-5D   (hex)		CS COMPUTER SYSTEME GmbH
-00A05D     (base 16)		CS COMPUTER SYSTEME GmbH
-				ISARSTRASSE 3,
-				82065 BAIERBRUNN    
-				DE
-
-00-A0-61   (hex)		PURITAN BENNETT
-00A061     (base 16)		PURITAN BENNETT
-				2200 FARADAY AVENUE
-				CARLSBAD  CA  92008
-				US
-
-00-60-A6   (hex)		PARTICLE MEASURING SYSTEMS
-0060A6     (base 16)		PARTICLE MEASURING SYSTEMS
-				5475 AIRPORT BLVD.
-				BOULDER  CO  80301
-				US
-
-00-60-2A   (hex)		SYMICRON COMPUTER COMMUNICATIONS, LTD.
-00602A     (base 16)		SYMICRON COMPUTER COMMUNICATIONS, LTD.
-				UNIT 4 GREEN LANE BUSINESS PARK
-				London SE9 3TL    
-				US
-
-00-A0-6D   (hex)		MANNESMANN TALLY CORPORATION
-00A06D     (base 16)		MANNESMANN TALLY CORPORATION
-				P.O. BOX 97018
-				KENT  WA  98064-9718
-				US
-
-00-A0-F6   (hex)		AutoGas Systems Inc.
-00A0F6     (base 16)		AutoGas Systems Inc.
-				P.O. BOX 6957
-				ABIOLENE  TX  79608
-				US
-
-00-60-BE   (hex)		WEBTRONICS
-0060BE     (base 16)		WEBTRONICS
-				3B-1  8-2-12
-				SHINAGAWA-KU TOKYO 141    
-				JP
-
-00-60-BF   (hex)		MACRAIGOR SYSTEMS, INC.
-0060BF     (base 16)		MACRAIGOR SYSTEMS, INC.
-				PO BOX 1008
-				BROOKLINE VILLAGE  MA  02147
-				US
-
-00-60-80   (hex)		MICROTRONIX DATACOM LTD.
-006080     (base 16)		MICROTRONIX DATACOM LTD.
-				4056 Meadowbrook Drive, Unit 126
-				LONDON  ONTARIO  N6L 1E3
-				CA
-
-00-A0-37   (hex)		Mindray DS USA, Inc.
-00A037     (base 16)		Mindray DS USA, Inc.
-				800 Macarthur Blvd.
-				Mahwah  NJ  07430
-				US
-
-00-A0-4C   (hex)		INNOVATIVE SYSTEMS & TECHNOLOGIES, INC.
-00A04C     (base 16)		INNOVATIVE SYSTEMS & TECHNOLOGIES, INC.
-				48511 WARM SPRINGS BLVD.
-				FREMONT  CA  94539
-				US
-
-00-A0-31   (hex)		HAZELTINE CORPORATION, MS 1-17
-00A031     (base 16)		HAZELTINE CORPORATION, MS 1-17
-				450 E. PULASKI ROAD
-				GREENLAWN  NY  11740
-				US
-
-00-A0-41   (hex)		INFICON
-00A041     (base 16)		INFICON
-				2 Technology Place
-				E. Syracuse  NY  13057
-				US
-
-00-A0-A7   (hex)		VORAX CORPORATION
-00A0A7     (base 16)		VORAX CORPORATION
-				1031 EAST DUANE AVENUE, STE H
-				SUNNYVALE  CA  94086
-				US
-
-00-A0-7E   (hex)		AVID TECHNOLOGY, INC.
-00A07E     (base 16)		AVID TECHNOLOGY, INC.
-				METROPOLITAN TECHNOLOGY PARK
-				TEWKSBURY  MA  01876
-				US
-
-00-A0-6F   (hex)		Color Sentinel Systems, LLC
-00A06F     (base 16)		Color Sentinel Systems, LLC
-				97 Ridgeland Rd, Suite #2
-				ROCHESTER  NY  14623
-				US
-
-00-A0-C7   (hex)		TADIRAN TELECOMMUNICATIONS
-00A0C7     (base 16)		TADIRAN TELECOMMUNICATIONS
-				P.O. BOX 500
-				PETAH-TIKVA 49104    
-				IL
-
-00-A0-1A   (hex)		BINAR ELEKTRONIK AB
-00A01A     (base 16)		BINAR ELEKTRONIK AB
-				MAGNETUAGEN 18
-				    
-				SE
-
-00-A0-88   (hex)		ESSENTIAL COMMUNICATIONS
-00A088     (base 16)		ESSENTIAL COMMUNICATIONS
-				4374 ALEXANDER BLVD. NE-STE
-				ALBUQUERQUE  NM  87107
-				US
-
-00-A0-C2   (hex)		R.A. SYSTEMS CO., LTD.
-00A0C2     (base 16)		R.A. SYSTEMS CO., LTD.
-				1850-3 HIROOKANOMURA
-				    
-				JP
-
-00-A0-98   (hex)		NetApp
-00A098     (base 16)		NetApp
-				1395 Crossman Ave
-				Sunnyvale,  CA  94089
-				US
-
-00-A0-4B   (hex)		TFL LAN INC.
-00A04B     (base 16)		TFL LAN INC.
-				9F, NO. 499 CHUNG CHENG ROAD
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-A0-64   (hex)		KVB/ANALECT
-00A064     (base 16)		KVB/ANALECT
-				9420 JERONIMO ROAD
-				IRVINE  CA  92718
-				US
-
-00-A0-3E   (hex)		ATM FORUM
-00A03E     (base 16)		ATM FORUM
-				WORLDWIDE HEADQUARTERS
-				FOSTER CITY  CA  94404-1138
-				US
-
-00-A0-1F   (hex)		TRICORD SYSTEMS, INC.
-00A01F     (base 16)		TRICORD SYSTEMS, INC.
-				2800 NORTHWEST BOULEVARD
-				PLYMOUTH  MN  55441-2625
-				US
-
-00-A0-6C   (hex)		SHINDENGEN ELECTRIC MFG. CO., LTD.
-00A06C     (base 16)		SHINDENGEN ELECTRIC MFG. CO., LTD.
-				10-13, MINAMI-CHO, HANNOU-CITY
-				SAITAMA 357    
-				JO
-
-00-A0-DB   (hex)		FISHER & PAYKEL PRODUCTION
-00A0DB     (base 16)		FISHER & PAYKEL PRODUCTION
-				MACHINERY LIMITED
-				    
-				NZ
-
-00-A0-81   (hex)		ALCATEL DATA NETWORKS
-00A081     (base 16)		ALCATEL DATA NETWORKS
-				12502 SUNRISE VALLEY DRIVE
-				RESTON  VA  22096
-				US
-
-00-A0-B1   (hex)		FIRST VIRTUAL CORPORATION
-00A0B1     (base 16)		FIRST VIRTUAL CORPORATION
-				3393 OCTAVIUS DR.-STE.# 102
-				SANTA CLARA  CA  95054
-				US
-
-00-20-10   (hex)		JEOL SYSTEM TECHNOLOGY CO. LTD
-002010     (base 16)		JEOL SYSTEM TECHNOLOGY CO. LTD
-				3-1-2 Musashino
-				Akishima-shi  Tokyo  196-8558
-				JP
-
-00-20-9F   (hex)		MERCURY COMPUTER SYSTEMS, INC.
-00209F     (base 16)		MERCURY COMPUTER SYSTEMS, INC.
-				199 RIVERNECK ROAD
-				CHELMSFORD  MA  01824
-				US
-
-00-A0-73   (hex)		COM21, INC.
-00A073     (base 16)		COM21, INC.
-				2113 LANDINGS DRIVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-A0-3A   (hex)		KUBOTEK CORPORATION
-00A03A     (base 16)		KUBOTEK CORPORATION
-				56 NISHIAKETA-CHO, HIGASHIKUJO
-				    
-				JP
-
-00-A0-B2   (hex)		SHIMA SEIKI
-00A0B2     (base 16)		SHIMA SEIKI
-				85, SAKATA WAKAYAMA-CITY
-				    
-				JP
-
-00-A0-8B   (hex)		ASTON ELECTRONIC DESIGNS LTD.
-00A08B     (base 16)		ASTON ELECTRONIC DESIGNS LTD.
-				123/127 DEEPCUT BRIDGE ROAD
-				    ENGLAND
-				GB
-
-00-A0-97   (hex)		JC INFORMATION SYSTEMS
-00A097     (base 16)		JC INFORMATION SYSTEMS
-				4487 TECHNOLOGY DRIVE
-				FREMONT  CA  94538-6343
-				US
-
-00-A0-27   (hex)		FIREPOWER SYSTEMS, INC.
-00A027     (base 16)		FIREPOWER SYSTEMS, INC.
-				190 INDEPENDENCE DRIVE
-				MENLO PARK  CA  94025
-				US
-
-00-A0-46   (hex)		SCITEX CORP. LTD.
-00A046     (base 16)		SCITEX CORP. LTD.
-				P.O.BOX 330
-				    
-				IL
-
-00-A0-D4   (hex)		RADIOLAN,  INC.
-00A0D4     (base 16)		RADIOLAN,  INC.
-				454 DEGUIGNE DRIVE - STE
-				SUNNYVALE  CA  94086
-				US
-
-00-A0-92   (hex)		H. BOLLMANN MANUFACTURERS, LTD
-00A092     (base 16)		H. BOLLMANN MANUFACTURERS, LTD
-				26 VICTORIA WAY
-				  ENGLAND  
-				GB
-
-00-20-0D   (hex)		CARL ZEISS
-00200D     (base 16)		CARL ZEISS
-				POSTFACH 1380
-				    
-				DE
-
-00-20-2D   (hex)		TAIYO CORPORATION
-00202D     (base 16)		TAIYO CORPORATION
-				1-2-6 SANNOH, OHTA-KU
-				  143  
-				JP
-
-00-20-91   (hex)		J125, NATIONAL SECURITY AGENCY
-002091     (base 16)		J125, NATIONAL SECURITY AGENCY
-				9800 SAVAGE ROAD
-				FT. MEADE  MD  20755-6000
-				US
-
-00-20-BD   (hex)		NIOBRARA R & D CORPORATION
-0020BD     (base 16)		NIOBRARA R & D CORPORATION
-				PO BOX 3418
-				JOPLIN  MO  64803-3418
-				US
-
-00-20-54   (hex)		Sycamore Networks
-002054     (base 16)		Sycamore Networks
-				220 Mill Rd
-				Chelmsford  MA  01824
-				US
-
-00-20-A7   (hex)		PAIRGAIN TECHNOLOGIES, INC.
-0020A7     (base 16)		PAIRGAIN TECHNOLOGIES, INC.
-				14402 FRANKLIN AVENUE
-				TUSTIN  CA  92680-7013
-				US
-
-00-20-55   (hex)		ALTECH CO., LTD.
-002055     (base 16)		ALTECH CO., LTD.
-				OHISHI BLDG., 2-23-11
-				 TOKYO 116    
-				JP
-
-00-20-0A   (hex)		SOURCE-COMM CORP.
-00200A     (base 16)		SOURCE-COMM CORP.
-				25020 W. AVENUE STANFORD
-				VALENCIA  CA  91355
-				US
-
-00-20-CF   (hex)		TEST & MEASUREMENT SYSTEMS INC
-0020CF     (base 16)		TEST & MEASUREMENT SYSTEMS INC
-				2045 SITKA COURT
-				LOVELAND  CO  80538
-				US
-
-00-20-B4   (hex)		TERMA ELEKTRONIK AS
-0020B4     (base 16)		TERMA ELEKTRONIK AS
-				HOVMARKEN 4,
-				DK-8520 LYSTRUP    
-				DK
-
-00-20-E4   (hex)		HSING TECH ENTERPRISE CO., LTD
-0020E4     (base 16)		HSING TECH ENTERPRISE CO., LTD
-				NO. 2, LANE 128, SEC. 2
-				TEIPEI,    
-				TW
-
-00-20-6C   (hex)		EVERGREEN TECHNOLOGY CORP.
-00206C     (base 16)		EVERGREEN TECHNOLOGY CORP.
-				231 EMERSON STREET
-				PALO ALTO  CA  94301
-				US
-
-00-20-5E   (hex)		CASTLE ROCK, INC.
-00205E     (base 16)		CASTLE ROCK, INC.
-				20 SOUTH SANTA CRUZ AVE.
-				LOS GATOS  CA  95030
-				US
-
-00-20-12   (hex)		CAMTRONICS MEDICAL SYSTEMS
-002012     (base 16)		CAMTRONICS MEDICAL SYSTEMS
-				P.O. BOX 950
-				HARTLAND  WI  53029
-				US
-
-00-20-75   (hex)		MOTOROLA COMMUNICATION ISRAEL
-002075     (base 16)		MOTOROLA COMMUNICATION ISRAEL
-				3 KREMENETSKI STREET
-				TEL-AVIV  61250    
-				IL
-
-00-20-A5   (hex)		API ENGINEERING
-0020A5     (base 16)		API ENGINEERING
-				2689 POPLARWOOD WAY
-				SAN JOSE  CA  95132
-				US
-
-00-20-64   (hex)		PROTEC MICROSYSTEMS, INC.
-002064     (base 16)		PROTEC MICROSYSTEMS, INC.
-				297 LABROSSE
-				POINTE-CLAIRE, QUEBEC H9R 1A3    
-				CA
-
-00-20-33   (hex)		SYNAPSE TECHNOLOGIES, INC.
-002033     (base 16)		SYNAPSE TECHNOLOGIES, INC.
-				4822 ALBEMARLE ROAD, #104
-				CHARLOTTE  NC  28205
-				US
-
-00-20-CB   (hex)		PRETEC ELECTRONICS CORP.
-0020CB     (base 16)		PRETEC ELECTRONICS CORP.
-				39899 BALENTINE DR.
-				NEWARK  CA  94560
-				US
-
-00-20-EB   (hex)		CINCINNATI MICROWAVE, INC.
-0020EB     (base 16)		CINCINNATI MICROWAVE, INC.
-				ONE MICROWAVE PLAZA
-				CINCINNATI  OH  45249
-				US
-
-00-20-A0   (hex)		OA LABORATORY CO., LTD.
-0020A0     (base 16)		OA LABORATORY CO., LTD.
-				228 KAMIMACHIYA KAMAKURA
-				    
-				JP
-
-00-20-E2   (hex)		INFORMATION RESOURCE ENGINEERING
-0020E2     (base 16)		INFORMATION RESOURCE ENGINEERING
-				8029 CORPORATE DRIVE
-				BALTIMORE  MD  21236
-				US
-
-00-20-07   (hex)		SFA, INC.
-002007     (base 16)		SFA, INC.
-				1401 MCCORMICK DRIVE
-				LANDOVER  MD  20785
-				US
-
-00-20-5C   (hex)		InterNet Systems of Florida, Inc.
-00205C     (base 16)		InterNet Systems of Florida, Inc.
-				P.O. BOX 578
-				CRESTVIEW  FL  32536
-				US
-
-00-20-A2   (hex)		GALCOM NETWORKING LTD.
-0020A2     (base 16)		GALCOM NETWORKING LTD.
-				P.O. BOX 1568
-				RAMAT HASHARON 47113    
-				IL
-
-00-20-31   (hex)		Tattile SRL 
-002031     (base 16)		Tattile SRL 
-				AM PESTALOZZIRING 24
-				D-91058 ERLANGEN    
-				DE
-
-00-20-D0   (hex)		VERSALYNX CORPORATION
-0020D0     (base 16)		VERSALYNX CORPORATION
-				8950 CARLEY CIRCLE
-				SAN DIEGO  CA  92126
-				US
-
-00-20-B9   (hex)		METRICOM, INC.
-0020B9     (base 16)		METRICOM, INC.
-				980 UNIVERSITY AVENUE
-				LOS GATOS  CA  95030
-				US
-
-00-20-39   (hex)		SCINETS
-002039     (base 16)		SCINETS
-				1575 TENAKA - STE# N8
-				SUNNYVALE  CA  94087
-				US
-
-00-20-72   (hex)		WORKLINK INNOVATIONS
-002072     (base 16)		WORKLINK INNOVATIONS
-				2452 ARMSTRONG STREET
-				LIVERMORE  CA  9455O
-				US
-
-00-20-EC   (hex)		TECHWARE SYSTEMS CORP.
-0020EC     (base 16)		TECHWARE SYSTEMS CORP.
-				#100 - 12051 HORSESHOE WAY
-				  V7A  4V4
-				CA
-
-00-20-6E   (hex)		XACT, INC.
-00206E     (base 16)		XACT, INC.
-				P.O. BOX 55
-				ARGYLE  TX  76226
-				US
-
-00-20-F1   (hex)		ALTOS INDIA LIMITED
-0020F1     (base 16)		ALTOS INDIA LIMITED
-				D-60, OKLHLA INDUSTRIAL
-				    
-				IN
-
-00-20-41   (hex)		DATA NET
-002041     (base 16)		DATA NET
-				SUWON P.O. BOX 106, SUWON
-				  KOREA  440-600
-				KR
-
-00-20-76   (hex)		REUDO CORPORATION
-002076     (base 16)		REUDO CORPORATION
-				4-1-10 SHINSAN
-				    
-				JP
-
-00-20-E8   (hex)		DATATREK CORPORATION
-0020E8     (base 16)		DATATREK CORPORATION
-				4505 WYLAND DRIVE
-				ELKHART  IN  46516
-				US
-
-00-20-C5   (hex)		EAGLE TECHNOLOGY
-0020C5     (base 16)		EAGLE TECHNOLOGY
-				2865 ZANKER ROAD
-				SAN JOSE  CA  95134
-				US
-
-00-20-09   (hex)		PACKARD BELL ELEC., INC.
-002009     (base 16)		PACKARD BELL ELEC., INC.
-				9425 CANOGA AVENUE
-				CHATSWORTH  CA  913211
-				US
-
-00-20-27   (hex)		MING FORTUNE INDUSTRY CO., LTD
-002027     (base 16)		MING FORTUNE INDUSTRY CO., LTD
-				4F, NO. 800 CHUNG CHENG RD,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-20-8A   (hex)		SONIX COMMUNICATIONS, LTD.
-00208A     (base 16)		SONIX COMMUNICATIONS, LTD.
-				WILKINSON ROAD
-				    ENGLAND
-				GB
-
-00-20-D2   (hex)		RAD DATA COMMUNICATIONS, LTD.
-0020D2     (base 16)		RAD DATA COMMUNICATIONS, LTD.
-				8 HANECHOSHET STREET
-				    
-				KZ
-
-00-20-02   (hex)		SERITECH ENTERPRISE CO., LTD.
-002002     (base 16)		SERITECH ENTERPRISE CO., LTD.
-				FL. 182, NO. 531-1
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-20-4B   (hex)		AUTOCOMPUTER CO., LTD.
-00204B     (base 16)		AUTOCOMPUTER CO., LTD.
-				NO. 18, PEI YUAN ROAD
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-20-EA   (hex)		EFFICIENT NETWORKS, INC.
-0020EA     (base 16)		EFFICIENT NETWORKS, INC.
-				4201 SPRING VALLEY ROAD
-				DALLAS  TX  75244-3666
-				US
-
-00-20-6A   (hex)		OSAKA COMPUTER CORP.
-00206A     (base 16)		OSAKA COMPUTER CORP.
-				2-8 KOYACHOU NEYAGAW-SHI
-				    
-				JP
-
-00-20-DB   (hex)		XNET TECHNOLOGY, INC.
-0020DB     (base 16)		XNET TECHNOLOGY, INC.
-				426 S. HILLVIEW DRIVE
-				MILPITAS  CA  95035
-				US
-
-00-20-BB   (hex)		ZAX CORPORATION
-0020BB     (base 16)		ZAX CORPORATION
-				20-12 OGIKUBO 5-CHOME
-				  167  
-				JP
-
-00-20-A8   (hex)		SAST TECHNOLOGY CORP.
-0020A8     (base 16)		SAST TECHNOLOGY CORP.
-				225 OLD NEW BRUNSWICK RD.
-				PISCATAWAY  NJ  08854
-				US
-
-00-20-45   (hex)		ION Networks, Inc.
-002045     (base 16)		ION Networks, Inc.
-				1551 South Washington Ave.
-				Piscataway  NJ  08854
-				US
-
-00-20-49   (hex)		COMTRON, INC.
-002049     (base 16)		COMTRON, INC.
-				SANCATHERINA BLDG.
-				TOKYO  160  
-				JP
-
-00-20-50   (hex)		KOREA COMPUTER INC.
-002050     (base 16)		KOREA COMPUTER INC.
-				469, DAEHEUNG-DONG
-				    KOREA
-				KR
-
-00-20-84   (hex)		OCE PRINTING SYSTEMS, GMBH
-002084     (base 16)		OCE PRINTING SYSTEMS, GMBH
-				SIEMENSALLEE 2
-				    
-				DE
-
-00-20-8C   (hex)		GALAXY NETWORKS, INC.
-00208C     (base 16)		GALAXY NETWORKS, INC.
-				9348 DE SOTO AVENUE
-				CHATSWORTH  CA  91311
-				US
-
-00-20-2C   (hex)		WELLTRONIX CO., LTD.
-00202C     (base 16)		WELLTRONIX CO., LTD.
-				3F, NO. 36-1, HWANG HSI STREET
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-20-21   (hex)		ALGORITHMS SOFTWARE PVT. LTD.
-002021     (base 16)		ALGORITHMS SOFTWARE PVT. LTD.
-				83 JOLLY MAKER CHAMBERS II
-				    
-				IN
-
-00-C0-F9   (hex)		Artesyn Embedded Technologies
-00C0F9     (base 16)		Artesyn Embedded Technologies
-				2900 S. Diablo Way Suite 190
-				Tempe  AZ  85282
-				US
-
-00-C0-75   (hex)		XANTE CORPORATION
-00C075     (base 16)		XANTE CORPORATION
-				2559 EMOGENE STREET
-				MOBILE  AL  36606
-				US
-
-00-1C-7C   (hex)		PERQ SYSTEMS CORPORATION
-001C7C     (base 16)		PERQ SYSTEMS CORPORATION
-				2600 LIBERTY AVENUE
-				PITTSBURGH  PA  15230
-				US
-
-00-C0-39   (hex)		Teridian Semiconductor Corporation
-00C039     (base 16)		Teridian Semiconductor Corporation
-				6440 Oak Canyon
-				Irvine  CA  92618
-				US
-
-00-C0-A9   (hex)		BARRON MCCANN LTD.
-00C0A9     (base 16)		BARRON MCCANN LTD.
-				BEMAC HOUSE
-				  UNITED  KINGDOM
-				GB
-
-00-C0-4B   (hex)		CREATIVE MICROSYSTEMS
-00C04B     (base 16)		CREATIVE MICROSYSTEMS
-				9, AVENUE DU CANADA
-				91966  LES  ULIS---FRANC
-				FR
-
-00-C0-B9   (hex)		FUNK SOFTWARE, INC.
-00C0B9     (base 16)		FUNK SOFTWARE, INC.
-				222 THIRD STREET
-				CAMBRIDGE  MA  02142
-				US
-
-00-C0-15   (hex)		NEW MEDIA CORPORATION
-00C015     (base 16)		NEW MEDIA CORPORATION
-				15375 BARRANCA PARKWAY
-				IRVINE  CA  92718
-				US
-
-00-C0-83   (hex)		TRACE MOUNTAIN PRODUCTS, INC.
-00C083     (base 16)		TRACE MOUNTAIN PRODUCTS, INC.
-				1040 EAST BROKAW ROAD
-				SAN JOSE  CA  95131
-				US
-
-00-C0-94   (hex)		VMX INC.
-00C094     (base 16)		VMX INC.
-				2115 O'NEL DRIVE
-				SAN JOSE  CA  95131
-				US
-
-00-C0-19   (hex)		LEAP TECHNOLOGY, INC.
-00C019     (base 16)		LEAP TECHNOLOGY, INC.
-				20
-				BURLINGTON  MA  01803
-				US
-
-00-C0-CF   (hex)		IMATRAN VOIMA OY
-00C0CF     (base 16)		IMATRAN VOIMA OY
-				IVO
-				    
-				FI
-
-00-C0-7D   (hex)		RISC DEVELOPMENTS LTD.
-00C07D     (base 16)		RISC DEVELOPMENTS LTD.
-				117 HATFIELD ROAD
-				    ENGLAND
-				GB
-
-00-C0-43   (hex)		STRATACOM
-00C043     (base 16)		STRATACOM
-				1400 PARKMOOR AVENUE
-				SAN JOSE  CA  95126
-				US
-
-00-C0-B5   (hex)		CORPORATE NETWORK SYSTEMS,INC.
-00C0B5     (base 16)		CORPORATE NETWORK SYSTEMS,INC.
-				5711 SIX FORKS ROAD--STE #306
-				RALEIGH  NC  27609
-				US
-
-00-C0-ED   (hex)		US ARMY ELECTRONIC
-00C0ED     (base 16)		US ARMY ELECTRONIC
-				PROVING GROUND
-				SIERRA VISTA  AZ  85635
-				US
-
-00-C0-32   (hex)		I-CUBED LIMITED
-00C032     (base 16)		I-CUBED LIMITED
-				UNIT J1, THE POADDOCKS
-				CB1 4DH  CB1 4DH  ENGLAND
-				GB
-
-00-C0-A5   (hex)		DICKENS DATA SYSTEMS
-00C0A5     (base 16)		DICKENS DATA SYSTEMS
-				1175 NORTHMEADOW PKWY-STE #150
-				ROSWELL  GA  30076
-				US
-
-00-C0-EF   (hex)		ABIT CORPORATION
-00C0EF     (base 16)		ABIT CORPORATION
-				29-11 HIRAOKA-CHO
-				  192  
-				JP
-
-00-C0-61   (hex)		SOLECTEK CORPORATION
-00C061     (base 16)		SOLECTEK CORPORATION
-				6370 NANCY RIDGE DR.-STE.#109
-				SAN DIEGO  CA  92121
-				US
-
-00-C0-AD   (hex)		MARBEN COMMUNICATION SYSTEMS
-00C0AD     (base 16)		MARBEN COMMUNICATION SYSTEMS
-				1 RUE DU BOIS CHALAND
-				    
-				FR
-
-00-C0-7F   (hex)		NUPON COMPUTING CORP.
-00C07F     (base 16)		NUPON COMPUTING CORP.
-				1391 WARNER AVE., -SUITE
-				TUSTIN  CA  92680
-				US
-
-00-C0-57   (hex)		MYCO ELECTRONICS
-00C057     (base 16)		MYCO ELECTRONICS
-				MUSSERONGRAND 1G
-				    
-				SE
-
-00-C0-56   (hex)		SOMELEC
-00C056     (base 16)		SOMELEC
-				BP 7010 - 95050
-				    
-				FR
-
-00-C0-27   (hex)		CIPHER SYSTEMS, INC.
-00C027     (base 16)		CIPHER SYSTEMS, INC.
-				22115 NW Imbrie Dr #285
-				Hillsboro  OR  97124
-				US
-
-00-C0-5C   (hex)		ELONEX PLC
-00C05C     (base 16)		ELONEX PLC
-				2 APSLEY WAY
-				  UNITED  KINGDOM
-				GB
-
-00-C0-28   (hex)		JASCO CORPORATION
-00C028     (base 16)		JASCO CORPORATION
-				2967-5 ISHIKAWA-CHO,
-				    
-				JP
-
-00-C0-8D   (hex)		TRONIX PRODUCT DEVELOPMENT
-00C08D     (base 16)		TRONIX PRODUCT DEVELOPMENT
-				4908 E. MCDOWELL RD. STE.#100
-				PHOENIX  AZ  85008
-				US
-
-00-C0-2A   (hex)		OHKURA ELECTRIC CO., LTD.
-00C02A     (base 16)		OHKURA ELECTRIC CO., LTD.
-				2-90-20 SHIRAKO WAKO CITY
-				  351-01  
-				JP
-
-00-C0-FC   (hex)		ELASTIC REALITY, INC.
-00C0FC     (base 16)		ELASTIC REALITY, INC.
-				925 STEWART STREET
-				MADISON  WI  53713
-				US
-
-00-C0-BB   (hex)		FORVAL CREATIVE, INC.
-00C0BB     (base 16)		FORVAL CREATIVE, INC.
-				3-27-12 HONGO
-				    
-				JP
-
-00-C0-E0   (hex)		DSC COMMUNICATION CORP.
-00C0E0     (base 16)		DSC COMMUNICATION CORP.
-				1000 COIT ROAD,  MS#ADVP 3
-				PLANO  TX  75075
-				US
-
-00-C0-5B   (hex)		NETWORKS NORTHWEST, INC.
-00C05B     (base 16)		NETWORKS NORTHWEST, INC.
-				P.O. BOX 1188
-				ISSAQUAH  WA  98027
-				US
-
-00-C0-08   (hex)		SECO SRL
-00C008     (base 16)		SECO SRL
-				VIA CALAMANDREI 91
-				    
-				IT
-
-00-C0-B7   (hex)		AMERICAN POWER CONVERSION CORP
-00C0B7     (base 16)		AMERICAN POWER CONVERSION CORP
-				267 BOSTON ROAD #2
-				NORTH BILLERICA  MA  01862
-				US
-
-00-C0-D3   (hex)		OLYMPUS IMAGE SYSTEMS, INC.
-00C0D3     (base 16)		OLYMPUS IMAGE SYSTEMS, INC.
-				15271 BARRANCA PARKWAY
-				IRVINE  CA  92718-2201
-				US
-
-00-C0-E8   (hex)		PLEXCOM, INC.
-00C0E8     (base 16)		PLEXCOM, INC.
-				65 MORELAND ROADENUYE
-				SIMI VALLEY  CA  93065
-				US
-
-00-C0-DA   (hex)		NICE SYSTEMS LTD.
-00C0DA     (base 16)		NICE SYSTEMS LTD.
-				3 TEVUOT HA'ARETZ ST
-				    
-				IL
-
-00-C0-D1   (hex)		COMTREE TECHNOLOGY CORPORATION
-00C0D1     (base 16)		COMTREE TECHNOLOGY CORPORATION
-				5F-7, NO. 1, FU-HSING NORTH RD
-				  TAIWAN  R.O.C.
-				CN
-
-00-C0-38   (hex)		RASTER IMAGE PROCESSING SYSTEM
-00C038     (base 16)		RASTER IMAGE PROCESSING SYSTEM
-				4665 NAUTILUS COURT SOUTH
-				BOULDER  CO  80301
-				US
-
-00-40-9B   (hex)		HAL COMPUTER SYSTEMS INC.
-00409B     (base 16)		HAL COMPUTER SYSTEMS INC.
-				1315 DELL AVENUE
-				CAMPBELL  CA  95008
-				US
-
-00-40-EB   (hex)		MARTIN MARIETTA CORPORATION
-0040EB     (base 16)		MARTIN MARIETTA CORPORATION
-				12506 LAKE UNDERHILL
-				ORLANDO  FL  32825
-				US
-
-00-40-BD   (hex)		STARLIGHT NETWORKS, INC.
-0040BD     (base 16)		STARLIGHT NETWORKS, INC.
-				444 CASTRO STREET STE
-				MOUNTAIN VIEW  CA  94041
-				US
-
-00-40-ED   (hex)		NETWORK CONTROLS INT'NATL INC.
-0040ED     (base 16)		NETWORK CONTROLS INT'NATL INC.
-				9 WOODLAWN GREEN
-				CHARLOTTE  NC  28217
-				US
-
-00-40-21   (hex)		RASTER GRAPHICS
-004021     (base 16)		RASTER GRAPHICS
-				285 N. WOLFE ROAD
-				SUNNYVALE  CA  94086
-				US
-
-00-40-C1   (hex)		BIZERBA-WERKE WILHEIM KRAUT
-0040C1     (base 16)		BIZERBA-WERKE WILHEIM KRAUT
-				GMBH & CO. KG,
-				D-7460 BALINGEN  D-7460 BALINGEN  
-				DE
-
-00-40-E1   (hex)		MARNER INTERNATIONAL, INC.
-0040E1     (base 16)		MARNER INTERNATIONAL, INC.
-				1617 93RD LANE NE
-				BLAINE  MN  55449
-				US
-
-00-40-FE   (hex)		SYMPLEX COMMUNICATIONS
-0040FE     (base 16)		SYMPLEX COMMUNICATIONS
-				5 RESEARCH DRIVE
-				ANN ARBOR  MI  48103
-				US
-
-00-40-E5   (hex)		SYBUS CORPORATION
-0040E5     (base 16)		SYBUS CORPORATION
-				2300 TALL PINE DRIVE-STE. #100
-				LARGO  FL  34641
-				US
-
-00-40-A5   (hex)		CLINICOMP INTL.
-0040A5     (base 16)		CLINICOMP INTL.
-				4510 EXECCUTIVE DRIVE-STE.#200
-				SAN DIEGO  CA  92121
-				US
-
-00-40-05   (hex)		ANI COMMUNICATIONS INC.
-004005     (base 16)		ANI COMMUNICATIONS INC.
-				8 ANZIO
-				IRVINE  CA  92714
-				US
-
-00-40-D9   (hex)		AMERICAN MEGATRENDS INC.
-0040D9     (base 16)		AMERICAN MEGATRENDS INC.
-				6145F N BELT PARKWAY
-				NORCROSS  GA  30071
-				US
-
-00-40-4C   (hex)		HYPERTEC PTY LTD.
-00404C     (base 16)		HYPERTEC PTY LTD.
-				P.O. BOX 1782
-				    
-				AU
-
-00-C0-30   (hex)		INTEGRATED ENGINEERING B. V.
-00C030     (base 16)		INTEGRATED ENGINEERING B. V.
-				ELLERMANSTRAAT 15
-				  THE  
-				NL
-
-00-C0-A6   (hex)		EXICOM AUSTRALIA PTY. LTD
-00C0A6     (base 16)		EXICOM AUSTRALIA PTY. LTD
-				44-46 MANDARIN STREET
-				    
-				AU
-
-00-C0-CB   (hex)		CONTROL TECHNOLOGY CORPORATION
-00C0CB     (base 16)		CONTROL TECHNOLOGY CORPORATION
-				25 SOUTH STREET
-				HOPKINTON  MA  01748
-				US
-
-00-C0-EB   (hex)		SEH COMPUTERTECHNIK GMBH
-00C0EB     (base 16)		SEH COMPUTERTECHNIK GMBH
-				Suedring 11
-				    
-				DE
-
-00-40-DB   (hex)		ADVANCED TECHNICAL SOLUTIONS
-0040DB     (base 16)		ADVANCED TECHNICAL SOLUTIONS
-				8050 SEMINOLE OFFICE CENTER
-				SEMINOLE  FL  34642
-				US
-
-00-C0-92   (hex)		MENNEN MEDICAL INC.
-00C092     (base 16)		MENNEN MEDICAL INC.
-				10123 MAIN STREET
-				CLARENCE  NY  14031-2095
-				US
-
-00-C0-52   (hex)		BURR-BROWN
-00C052     (base 16)		BURR-BROWN
-				P.O. BOX 11400
-				TUCSON  AZ  85734-1400
-				US
-
-00-40-0E   (hex)		MEMOTEC, INC.
-00400E     (base 16)		MEMOTEC, INC.
-				7755 Henri-Bourassa
-				MONTREAL, QUEBEC     H4S 1P7
-				CA
-
-00-C0-3D   (hex)		WIESEMANN & THEIS GMBH
-00C03D     (base 16)		WIESEMANN & THEIS GMBH
-				WITTENER STR. 312
-				    
-				DE
-
-00-40-C8   (hex)		MILAN TECHNOLOGY CORPORATION
-0040C8     (base 16)		MILAN TECHNOLOGY CORPORATION
-				894 ROSS DRIVE--STE #105
-				SUNNYVALE  CA  94089
-				US
-
-00-40-BA   (hex)		ALLIANT COMPUTER SYSTEMS CORP.
-0040BA     (base 16)		ALLIANT COMPUTER SYSTEMS CORP.
-				ONE MONARCH DRIVE
-				LITTLETON  MA  01460
-				US
-
-00-40-38   (hex)		TALENT ELECTRIC INCORPORATED
-004038     (base 16)		TALENT ELECTRIC INCORPORATED
-				3RD FL., NO. 260, PA TEH ROAD
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-40-D8   (hex)		OCEAN OFFICE AUTOMATION LTD.
-0040D8     (base 16)		OCEAN OFFICE AUTOMATION LTD.
-				4TH & 5TH FLOOR, KADER BLDG.
-				  HONG  KONG
-				HK
-
-00-40-88   (hex)		MOBIUS TECHNOLOGIES, INC.
-004088     (base 16)		MOBIUS TECHNOLOGIES, INC.
-				5835 DOYLE STREET
-				EMERYVILLE  CA  94608
-				US
-
-00-40-32   (hex)		DIGITAL COMMUNICATIONS
-004032     (base 16)		DIGITAL COMMUNICATIONS
-				ASSOCIATES, INC.
-				SAN JOSE  CA  95131
-				US
-
-00-40-C2   (hex)		APPLIED COMPUTING DEVICES
-0040C2     (base 16)		APPLIED COMPUTING DEVICES
-				ALEPH PARK
-				TERRE HAUTE  IN  47802
-				US
-
-00-40-D4   (hex)		GAGE TALKER CORP.
-0040D4     (base 16)		GAGE TALKER CORP.
-				13680 NE 16TH STREET
-				BELLEVUE  WA  98005
-				US
-
-00-40-CE   (hex)		NET-SOURCE, INC.
-0040CE     (base 16)		NET-SOURCE, INC.
-				1265 EL CAMINO REAL
-				SANTA CLARA  CA  95050
-				US
-
-00-40-62   (hex)		E-SYSTEMS, INC./GARLAND DIV.
-004062     (base 16)		E-SYSTEMS, INC./GARLAND DIV.
-				P.O. BOX 660023
-				DALLAS  TX  75266-0023
-				US
-
-00-40-34   (hex)		BUSTEK CORPORATION
-004034     (base 16)		BUSTEK CORPORATION
-				4151 BURTON DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-40-1C   (hex)		AST RESEARCH, INC.
-00401C     (base 16)		AST RESEARCH, INC.
-				MS 2-78
-				IRVINE  CA  92618
-				US
-
-00-40-0F   (hex)		DATACOM TECHNOLOGIES
-00400F     (base 16)		DATACOM TECHNOLOGIES
-				11001 31ST PLACE WEST
-				EVERETT  WA  98204
-				US
-
-00-40-06   (hex)		SAMPO TECHNOLOGY CORPORATION
-004006     (base 16)		SAMPO TECHNOLOGY CORPORATION
-				26-2 TING-HU,
-				33334 TAIWAN  33334 TAIWAN  R.O.C.
-				TW
-
-00-80-AA   (hex)		MAXPEED
-0080AA     (base 16)		MAXPEED
-				1120 CHESS DRIVE
-				FOSTER CITY  CA  94404
-				US
-
-00-C0-50   (hex)		TOYO DENKI SEIZO K.K.
-00C050     (base 16)		TOYO DENKI SEIZO K.K.
-				4-6-32 HIGASHIKASHIWAGAYA
-				KANAGAWA  JAPAN  243-04
-				JP
-
-00-40-C6   (hex)		FIBERNET RESEARCH, INC.
-0040C6     (base 16)		FIBERNET RESEARCH, INC.
-				1 TARA BOULEVARD-#405
-				NASHUA  NH  03062
-				US
-
-00-40-47   (hex)		WIND RIVER SYSTEMS
-004047     (base 16)		WIND RIVER SYSTEMS
-				1010 ATLANTIC AVENUE
-				ALAMEDA  CA  94501
-				US
-
-00-40-50   (hex)		IRONICS, INCORPORATED
-004050     (base 16)		IRONICS, INCORPORATED
-				767 WARREN RD
-				ITHACA  N.Y.  14850
-				US
-
-00-80-92   (hex)		Silex Technology, Inc.
-008092     (base 16)		Silex Technology, Inc.
-				2-3-1 Hikaridai,
-				Kyoto    619-0237
-				JP
-
-00-80-93   (hex)		XYRON CORPORATION
-008093     (base 16)		XYRON CORPORATION
-				7864 LILY COURT
-				CUPERTINO  CA  95014
-				US
-
-00-80-5A   (hex)		TULIP COMPUTERS INTERNAT'L B.V
-00805A     (base 16)		TULIP COMPUTERS INTERNAT'L B.V
-				P.O. BOX 3333
-				  THE  
-				NL
-
-00-40-41   (hex)		FUJIKURA LTD.
-004041     (base 16)		FUJIKURA LTD.
-				1-5-1, KIBA, KOTO-KU
-				    
-				JP
-
-00-80-4E   (hex)		APEX COMPUTER COMPANY
-00804E     (base 16)		APEX COMPUTER COMPANY
-				4500 150TH AVENUE, NE
-				REDMOND  WA  98052
-				US
-
-00-80-55   (hex)		FERMILAB
-008055     (base 16)		FERMILAB
-				P.O. BOX 500, MS-234
-				BATAVIA  IL  60510
-				US
-
-00-80-2A   (hex)		TEST SYSTEMS & SIMULATIONS INC
-00802A     (base 16)		TEST SYSTEMS & SIMULATIONS INC
-				32429 INDUSTRIAL DRIVE
-				MADISON HEIGHTS  MI  48071-1528
-				US
-
-00-80-35   (hex)		TECHNOLOGY WORKS, INC.
-008035     (base 16)		TECHNOLOGY WORKS, INC.
-				4030 BRAKER LANE #350
-				AUSTIN  TX  78759
-				US
-
-00-80-7E   (hex)		SOUTHERN PACIFIC LTD.
-00807E     (base 16)		SOUTHERN PACIFIC LTD.
-				SANWA BLDG., 2-16-20
-				JAPAN  JAPAN  220
-				JP
-
-00-80-EF   (hex)		RATIONAL
-0080EF     (base 16)		RATIONAL
-				3320 SCOTT BOULEVARD
-				SANTA CLARA  CA  95054
-				US
-
-00-80-F0   (hex)		Panasonic Communications Co., Ltd.
-0080F0     (base 16)		Panasonic Communications Co., Ltd.
-				4-1-62 Minoshima Hakata Fukuoka
-				    812-8531
-				JP
-
-00-80-1D   (hex)		INTEGRATED INFERENCE MACHINES
-00801D     (base 16)		INTEGRATED INFERENCE MACHINES
-				1468 EAST KATELLA
-				ANAHEIM  CA  92805
-				US
-
-00-80-75   (hex)		PARSYTEC GMBH
-008075     (base 16)		PARSYTEC GMBH
-				JUELICHER STR. 338
-				  F.R.  
-				DE
-
-00-80-51   (hex)		FIBERMUX
-008051     (base 16)		FIBERMUX
-				9310 TOPANGA CANYON BLVD.
-				CHATSWORTH  CA  91311
-				US
-
-00-80-C6   (hex)		NATIONAL DATACOMM CORPORATION
-0080C6     (base 16)		NATIONAL DATACOMM CORPORATION
-				2F, 28, INDUSTRY EAST 9TH RD.
-				TAIWAN  30077  TAIWAN  30077  R.O.C.
-				TW
-
-00-80-C0   (hex)		PENRIL DATACOMM
-0080C0     (base 16)		PENRIL DATACOMM
-				1300 QUINCE ORCHARD BLVD.
-				GAITHERSBURG  MD  20878
-				US
-
-00-80-2E   (hex)		CASTLE ROCK COMPUTING
-00802E     (base 16)		CASTLE ROCK COMPUTING
-				20837 BOYCE LANE
-				SARATOGA  CA  95070-4806
-				US
-
-00-80-F2   (hex)		RAYCOM SYSTEMS INC
-0080F2     (base 16)		RAYCOM SYSTEMS INC
-				16525 SHERMAN WAY #C-8
-				VAN NUYS  CA  91406
-				US
-
-00-80-BD   (hex)		THE FURUKAWA ELECTRIC CO., LTD
-0080BD     (base 16)		THE FURUKAWA ELECTRIC CO., LTD
-				6-1, MARUNOUCHI 2-CHOME
-				  100  
-				JP
-
-00-80-25   (hex)		Telit Wireless Solutions GmbH
-008025     (base 16)		Telit Wireless Solutions GmbH
-				Mendelssohnstrasse15D
-				Hamburg    22761
-				DE
-
-00-80-EA   (hex)		ADVA Optical Networking Ltd.
-0080EA     (base 16)		ADVA Optical Networking Ltd.
-				ADVAntage House
-				York    YO30 4RY
-				GB
-
-00-00-1E   (hex)		TELSIST INDUSTRIA ELECTRONICA
-00001E     (base 16)		TELSIST INDUSTRIA ELECTRONICA
-				RUA VILHENA DE MORAES, 380
-				    
-				BR
-
-00-00-50   (hex)		RADISYS CORPORATION
-000050     (base 16)		RADISYS CORPORATION
-				15025 S.W. KOLL PARKWAY
-				BEAVERTON  OR  97006-6056
-				US
-
-00-80-04   (hex)		ANTLOW COMMUNICATIONS, LTD.
-008004     (base 16)		ANTLOW COMMUNICATIONS, LTD.
-				4 COLTHROP WAY
-				    ENGLAND
-				GB
-
-00-80-D0   (hex)		COMPUTER PERIPHERALS, INC.
-0080D0     (base 16)		COMPUTER PERIPHERALS, INC.
-				667 RANCHO CONEJO BLVD.
-				NEWBURY PARK  CA  91320
-				US
-
-00-80-24   (hex)		KALPANA, INC.
-008024     (base 16)		KALPANA, INC.
-				1154 EAST ARQUES AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-80-40   (hex)		JOHN FLUKE MANUFACTURING CO.
-008040     (base 16)		JOHN FLUKE MANUFACTURING CO.
-				P.O. BOX C9090-M/S 244F
-				EVERETT  WA  98206
-				US
-
-00-80-21   (hex)		Alcatel Canada Inc.
-008021     (base 16)		Alcatel Canada Inc.
-				349 Terry Fox Drive
-				Kanata  Ontario  K2K 2V6
-				CA
-
-00-80-E8   (hex)		CUMULUS CORPORATIION
-0080E8     (base 16)		CUMULUS CORPORATIION
-				23500 MERCANTILE ROAD
-				CLEVELAND  OH  44122
-				US
-
-00-80-69   (hex)		COMPUTONE SYSTEMS
-008069     (base 16)		COMPUTONE SYSTEMS
-				1100 NORTHMEADOW PARKWAY
-				ROSWELL  GA  30076
-				US
-
-00-80-0D   (hex)		VOSSWINKEL F.U.
-00800D     (base 16)		VOSSWINKEL F.U.
-				AM JOSTENHOF 15
-				    
-				DE
-
-00-80-D1   (hex)		KIMTRON CORPORATION
-0080D1     (base 16)		KIMTRON CORPORATION
-				1709 JUNCTION COURT
-				SAN JOSE  CA  95112
-				US
-
-00-80-42   (hex)		Artesyn Embedded Technologies
-008042     (base 16)		Artesyn Embedded Technologies
-				2900 S. Diablo Way
-				Tempe  AZ  85282
-				US
-
-00-80-9A   (hex)		NOVUS NETWORKS LTD
-00809A     (base 16)		NOVUS NETWORKS LTD
-				JOHN SCOTT HOUSE
-				    ENGLAND
-				GB
-
-00-80-00   (hex)		MULTITECH SYSTEMS, INC.
-008000     (base 16)		MULTITECH SYSTEMS, INC.
-				2205 WOODALE DRIVE
-				MOUNDS VIEW  MN  55112
-				US
-
-00-80-ED   (hex)		IQ TECHNOLOGIES, INC.
-0080ED     (base 16)		IQ TECHNOLOGIES, INC.
-				11811 NE FIRST STREET
-				BELLEVUE  WA  98005
-				US
-
-00-80-4A   (hex)		PRO-LOG
-00804A     (base 16)		PRO-LOG
-				12 UPPER RAGSDALE DRIVE
-				MONTEREY  CA  93940
-				US
-
-00-00-66   (hex)		TALARIS SYSTEMS, INC.
-000066     (base 16)		TALARIS SYSTEMS, INC.
-				11339 SORRENTO VALLEY ROAD
-				SAN DIEGO  CA  92121
-				US
-
-00-00-49   (hex)		APRICOT COMPUTERS, LTD
-000049     (base 16)		APRICOT COMPUTERS, LTD
-				90 VINCENT DRIVE
-				    ENGLAND
-				GB
-
-00-00-FA   (hex)		MICROSAGE COMPUTER SYSTEMS INC
-0000FA     (base 16)		MICROSAGE COMPUTER SYSTEMS INC
-				680 SOUTH ROCK BLVD
-				RENO  NE  89502
-				US
-
-00-00-D4   (hex)		PURE DATA LTD.
-0000D4     (base 16)		PURE DATA LTD.
-				200 WEST BEAVER CREEK ROAD
-				L4B  1B4  
-				CA
-
-00-00-19   (hex)		APPLIED DYNAMICS INTERNATIONAL
-000019     (base 16)		APPLIED DYNAMICS INTERNATIONAL
-				3800 STONE SCHOOL ROAD
-				ANN ARBOR  MI  48104-2499
-				US
-
-00-00-15   (hex)		DATAPOINT CORPORATION
-000015     (base 16)		DATAPOINT CORPORATION
-				9725 DATAPOINT DRIVE
-				SAN ANTONIO  TX  78284
-				US
-
-00-00-1C   (hex)		BELL TECHNOLOGIES
-00001C     (base 16)		BELL TECHNOLOGIES
-				330 WARREN AVENUE
-				FREMONT  CA  94539
-				US
-
-00-00-34   (hex)		NETWORK RESOURCES CORPORATION
-000034     (base 16)		NETWORK RESOURCES CORPORATION
-				61 EAST DAGGETT DRIVE
-				SAN JOSE  CA  95134
-				US
-
-00-00-22   (hex)		VISUAL TECHNOLOGY INC.
-000022     (base 16)		VISUAL TECHNOLOGY INC.
-				1703 MIDDLESEX STREET
-				LOWELL  MA  01851
-				US
-
-00-00-B5   (hex)		DATABILITY SOFTWARE SYS. INC.
-0000B5     (base 16)		DATABILITY SOFTWARE SYS. INC.
-				ONE PALMER TERRACE
-				CARLSTADT  NJ  07072
-				US
-
-00-00-2F   (hex)		TIMEPLEX INC.
-00002F     (base 16)		TIMEPLEX INC.
-				530 CHESTNUT RIDGE ROAD
-				WOODCLIFF LAKE  NJ  07675
-				US
-
-00-00-B8   (hex)		SEIKOSHA CO., LTD.
-0000B8     (base 16)		SEIKOSHA CO., LTD.
-				SYSTEM EQUIPMENT DIVISION
-				    
-				JP
-
-00-00-E6   (hex)		APTOR PRODUITS DE COMM INDUST
-0000E6     (base 16)		APTOR PRODUITS DE COMM INDUST
-				61, CHEMIN DU VIEUX-CHENE
-				    
-				FR
-
-00-00-84   (hex)		SUPERNET
-000084     (base 16)		SUPERNET
-				846 DEL REY AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-00-9A   (hex)		RC COMPUTER A/S
-00009A     (base 16)		RC COMPUTER A/S
-				LAUTRUPBJERG 1
-				    
-				DK
-
-00-00-27   (hex)		JAPAN RADIO COMPANY
-000027     (base 16)		JAPAN RADIO COMPANY
-				LABORATORY
-				    
-				JP
-
-00-00-E8   (hex)		ACCTON TECHNOLOGY CORP.
-0000E8     (base 16)		ACCTON TECHNOLOGY CORP.
-				46750 FREMONT BLVD. #104
-				FREMONT  CA  94538
-				US
-
-00-00-4B   (hex)		ICL DATA OY
-00004B     (base 16)		ICL DATA OY
-				KUTOMOTIE 16-18
-				    
-				FI
-
-00-00-E0   (hex)		QUADRAM CORP.
-0000E0     (base 16)		QUADRAM CORP.
-				ONE QUAD WAY
-				NORCROSS  GA  30093
-				US
-
-00-00-AB   (hex)		LOGIC MODELING CORPORATION
-0000AB     (base 16)		LOGIC MODELING CORPORATION
-				1520 MCCANDLESS DRIVE
-				MILPITAS  CA  95035
-				US
-
-00-80-AC   (hex)		IMLOGIX, DIVISION OF GENESYS
-0080AC     (base 16)		IMLOGIX, DIVISION OF GENESYS
-				1900 SUMMIT TOWER BLVD.STE#770
-				ORLANDO  FL  32810
-				US
-
-00-00-4F   (hex)		LOGICRAFT, INC.
-00004F     (base 16)		LOGICRAFT, INC.
-				22 COTTON ROAD
-				NASHUA  NH  03063
-				US
-
-00-00-6F   (hex)		Madge Ltd.
-00006F     (base 16)		Madge Ltd.
-				Madge House
-				Maindenhead  Berkshire  SL6 2HP
-				GB
-
-00-00-78   (hex)		LABTAM LIMITED
-000078     (base 16)		LABTAM LIMITED
-				43 MALCOLM ROAD   P.O. BOX297
-				    
-				AU
-
-00-00-5A   (hex)		SysKonnect GmbH
-00005A     (base 16)		SysKonnect GmbH
-				SIEMENSSTRAßE 23
-				    
-				DE
-
-00-00-5B   (hex)		ELTEC ELEKTRONIK AG
-00005B     (base 16)		ELTEC ELEKTRONIK AG
-				Galileo-Galilei-Strasse 11
-				    
-				DE
-
-00-00-71   (hex)		ADRA SYSTEMS INC.
-000071     (base 16)		ADRA SYSTEMS INC.
-				59 TECHNOLOGY DRIVE
-				LOWELL  MA  01851
-				US
-
-00-00-73   (hex)		SIECOR CORPORATION
-000073     (base 16)		SIECOR CORPORATION
-				P.O. BOX 13625
-				RESEARCH TRIANGLE PK  NC  27709
-				US
-
-00-00-B9   (hex)		MCDONNELL DOUGLAS COMPUTER SYS
-0000B9     (base 16)		MCDONNELL DOUGLAS COMPUTER SYS
-				DIV MCDONNELL DOUGLAS INF SYS
-				    ENGLAND
-				GB
-
-00-00-BF   (hex)		SYMMETRIC COMPUTER SYSTEMS
-0000BF     (base 16)		SYMMETRIC COMPUTER SYSTEMS
-				1620 OAKLAND ROAD  SUITE D-200
-				SAN JOSE  CA  95131
-				US
-
-00-00-2D   (hex)		CHROMATICS INC
-00002D     (base 16)		CHROMATICS INC
-				2558 MOUNTAIN INDUSTRIAL BLVD
-				TUCKER  GA  30084
-				US
-
-00-00-18   (hex)		WEBSTER COMPUTER CORPORATION
-000018     (base 16)		WEBSTER COMPUTER CORPORATION
-				16040 REDWOOD LODGE ROAD
-				LOS GATOS  CA  95033-9260
-				US
-
-00-00-C8   (hex)		ALTOS COMPUTER SYSTEMS
-0000C8     (base 16)		ALTOS COMPUTER SYSTEMS
-				2641 ORCHARD PARKWAY
-				SAN JOSE  CA  95134
-				US
-
-00-00-D5   (hex)		MICROGNOSIS INTERNATIONAL
-0000D5     (base 16)		MICROGNOSIS INTERNATIONAL
-				63 QUEEN VICTORIA STREET
-				  UNITED  KINGDOM
-				GB
-
-00-00-3A   (hex)		CHYRON CORPORATION
-00003A     (base 16)		CHYRON CORPORATION
-				265 SPAGNOLI ROAD
-				MELVILLE  NY  11747
-				US
-
-00-00-59   (hex)		Hellige GMBH
-000059     (base 16)		Hellige GMBH
-				Heinrich-von-Stephan-Str. 4
-				  West Gernany  
-				DE
-
-00-00-69   (hex)		CONCORD COMMUNICATIONS INC
-000069     (base 16)		CONCORD COMMUNICATIONS INC
-				753 FOREST STREET
-				MARLBOROUGH  MA  01752
-				US
-
-00-00-E7   (hex)		Star Gate Technologies
-0000E7     (base 16)		Star Gate Technologies
-				29300 Aurora Road
-				Solon  OH  44139
-				US
-
-00-00-4D   (hex)		DCI CORPORATION
-00004D     (base 16)		DCI CORPORATION
-				64J PRINCETON-HIGHTSTOWN RD
-				PRINCETON JUNCTION  NJ  08550
-				US
-
-00-00-23   (hex)		ABB INDUSTRIAL SYSTEMS AB
-000023     (base 16)		ABB INDUSTRIAL SYSTEMS AB
-				DEPT. SEISY/LKSB
-				    
-				SE
-
-00-00-BE   (hex)		THE NTI GROUP
-0000BE     (base 16)		THE NTI GROUP
-				4701 PATRICK HENRY DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-00-D9   (hex)		NIPPON TELEGRAPH & TELEPHONE
-0000D9     (base 16)		NIPPON TELEGRAPH & TELEPHONE
-				CORPORATION (NTT)
-				TOKYO  100-8116  
-				JP
-
-00-00-80   (hex)		CRAY COMMUNICATIONS A/S
-000080     (base 16)		CRAY COMMUNICATIONS A/S
-				SMEDEHOLM 12-14
-				    
-				DK
-
-08-00-2A   (hex)		MOSAIC TECHNOLOGIES INC.
-08002A     (base 16)		MOSAIC TECHNOLOGIES INC.
-				47 MANNING ROAD
-				BILLERICA  MA  01821-3970
-				US
-
-08-00-89   (hex)		Kinetics
-080089     (base 16)		Kinetics
-				
-				Walnut Creek  CA  
-				US
-
-08-00-86   (hex)		KONICA MINOLTA HOLDINGS, INC.
-080086     (base 16)		KONICA MINOLTA HOLDINGS, INC.
-				1-6-1, Marunouchi,
-				Tokyo    100-0005
-				JP
-
-08-00-83   (hex)		Seiko Instruments Inc.
-080083     (base 16)		Seiko Instruments Inc.
-				8, Nakase 1-chome Mihama-ku
-				Chiba-shi  Chiba  261-8507
-				JP
-
-08-00-61   (hex)		JAROGATE LTD.
-080061     (base 16)		JAROGATE LTD.
-				197-213 LYHAM ROAD
-				  UNITED  KINGDOM
-				GB
-
-08-00-5F   (hex)		SABER TECHNOLOGY CORP.
-08005F     (base 16)		SABER TECHNOLOGY CORP.
-				2381 BERING DRIVE
-				SAN JOSE  CA  95131-1125
-				US
-
-08-00-58   (hex)		SYSTEMS CONCEPTS
-080058     (base 16)		SYSTEMS CONCEPTS
-				520 THIRD STREET
-				SAN FRANCISCO  CA  94107
-				US
-
-08-00-49   (hex)		UNIVATION
-080049     (base 16)		UNIVATION
-				1037 NORTH FAIR OAKS AVE.
-				SUNNYVALE  CA  94089
-				US
-
-08-00-24   (hex)		10NET COMMUNICATIONS/DCA
-080024     (base 16)		10NET COMMUNICATIONS/DCA
-				7777 WASHINGTON VILLAGE DR.
-				DAYTON  OH  45459-3957
-				US
-
-08-00-22   (hex)		NBI INC.
-080022     (base 16)		NBI INC.
-				3450 MITCHELL LANE
-				BOULDER  CO  80301
-				US
-
-08-00-20   (hex)		Oracle Corporation
-080020     (base 16)		Oracle Corporation
-				17 Network Circle
-				Menlo Park  CA  95025
-				US
-
-08-00-1F   (hex)		SHARP CORPORATION
-08001F     (base 16)		SHARP CORPORATION
-				ENGINEERING DEPARTMENT 6
-				NARA  639-11  
-				JP
-
-08-00-14   (hex)		EXCELAN
-080014     (base 16)		EXCELAN
-				1599 FLICKINGER AVENUE
-				SAN JOSE  CA  95131
-				US
-
-AA-00-00   (hex)		DIGITAL EQUIPMENT CORPORATION
-AA0000     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				LKG 1-2/A19
-				LITTLETON  MA  01460-1289
-				US
-
-AA-00-01   (hex)		DIGITAL EQUIPMENT CORPORATION
-AA0001     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				LKG 1-2/A19
-				LITTLETON  MA  01460-1289
-				US
-
-AA-00-02   (hex)		DIGITAL EQUIPMENT CORPORATION
-AA0002     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				LKG 1-2/A19
-				LITTLETON  MA  01460-1289
-				US
-
-00-00-07   (hex)		XEROX CORPORATION
-000007     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-00-80-1F   (hex)		KRUPP ATLAS ELECTRONIK GMBH
-00801F     (base 16)		KRUPP ATLAS ELECTRONIK GMBH
-				P.O. BOX 448545
-				    
-				DE
-
-08-00-06   (hex)		SIEMENS AG
-080006     (base 16)		SIEMENS AG
-				Siemens IT Solutions and Services, SIS GO QM O
-				POB 2353  Fuerth  90713
-				DE
-
-04-E0-C4   (hex)		TRIUMPH-ADLER AG
-04E0C4     (base 16)		TRIUMPH-ADLER AG
-				HUNDINGSTRAßE 11B
-				    
-				DE
-
-02-07-01   (hex)		RACAL-DATACOM
-020701     (base 16)		RACAL-DATACOM
-				LAN INTERNETWORKING DIVISION
-				BOXBOROUGH  MA  01719
-				US
-
-08-00-13   (hex)		Exxon
-080013     (base 16)		Exxon
-				
-				    
-				US
-
-00-DD-08   (hex)		UNGERMANN-BASS INC.
-00DD08     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-00-05   (hex)		XEROX CORPORATION
-000005     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-02-1C-7C   (hex)		PERQ SYSTEMS CORPORATION
-021C7C     (base 16)		PERQ SYSTEMS CORPORATION
-				2600 LIBERTY AVENUE
-				PITTSBURGH  PA  15230
-				US
-
-08-00-65   (hex)		GENRAD INC.
-080065     (base 16)		GENRAD INC.
-				300 BAKER AVENUE
-				CONCORD  MA  01742
-				US
-
-84-A9-EA   (hex)		Career Technologies USA
-84A9EA     (base 16)		Career Technologies USA
-				9134 Independence Ave
-				Chatsworth  CA  91311
-				US
-
-00-00-09   (hex)		XEROX CORPORATION
-000009     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-00-80-E9   (hex)		Madge Ltd.
-0080E9     (base 16)		Madge Ltd.
-				Madge House
-				Maindenhead  Berkshire  SL6 2HP
-				GB
-
-00-40-D6   (hex)		LOCAMATION B.V.
-0040D6     (base 16)		LOCAMATION B.V.
-				POSTBOX 360
-				    HOLLAND
-				NL
-
-08-00-4B   (hex)		Planning Research Corp.
-08004B     (base 16)		Planning Research Corp.
-				1508 Kennedy Drive
-				Bellvue  NE  68005
-				US
-
-02-AA-3C   (hex)		OLIVETTI TELECOMM SPA (OLTECO)
-02AA3C     (base 16)		OLIVETTI TELECOMM SPA (OLTECO)
-				20300 STEVENS  CREEK BLVD.
-				CUPERTINO  CA  95014
-				US
-
-08-00-59   (hex)		A/S MYCRON
-080059     (base 16)		A/S MYCRON
-				PO BOX 6199
-				    
-				NO
-
-08-00-08   (hex)		BOLT BERANEK AND NEWMAN INC.
-080008     (base 16)		BOLT BERANEK AND NEWMAN INC.
-				70 FAWCETT STREET
-				CAMBRIDGE  MA  02138
-				US
-
-F4-74-88   (hex)		New H3C Technologies Co., Ltd
-F47488     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-FC-C2-33   (hex)		ASUSTek COMPUTER INC.
-FCC233     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-40-11-75   (hex)		IEEE Registration Authority
-401175     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-80-31-F0   (hex)		Samsung Electronics Co.,Ltd
-8031F0     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-58-35-26   (hex)		DEEPLET TECHNOLOGY CORP
-583526     (base 16)		DEEPLET TECHNOLOGY CORP
-				5F,No.9,Lane235,Pao-Chiao Rd., Hsin-Tien,
-				New Taipei City      23145
-				TW
-
-34-B5-A3   (hex)		CIG SHANGHAI CO LTD
-34B5A3     (base 16)		CIG SHANGHAI CO LTD
-				5th Floor, Building 8 No 2388 Chenhang Road
-				SHANGHAI    201114
-				CN
-
-6C-1D-EB   (hex)		u-blox AG
-6C1DEB     (base 16)		u-blox AG
-				Zuercherstrasse 68
-				Thalwil    8800
-				CH
-
-28-52-F9   (hex)		Zhongxin Intelligent Times (Shenzhen) Co., Ltd.
-2852F9     (base 16)		Zhongxin Intelligent Times (Shenzhen) Co., Ltd.
-				3rd Floor,Building 46,Cuigang Industrial Zone 5,Fuyong Street,Baoan District
-				Shenzhen  Guangdong  518103
-				CN
-
-B8-F8-53   (hex)		Arcadyan Corporation
-B8F853     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-E0-D0-83   (hex)		Samsung Electronics Co.,Ltd
-E0D083     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-74-3C-18   (hex)		Taicang T&W Electronics
-743C18     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-4C-80-BA   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
-4C80BA     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
-				HUST Industry Park, East-Lake Development Zone
-				Wuhan  Hubei  430223
-				CN
-
-8C-02-FA   (hex)		COMMANDO Networks Limited
-8C02FA     (base 16)		COMMANDO Networks Limited
-				Rm407, 4th floor, 3-2 HuaYuan Rd., DaLang Subdistrict, LongHua District
-				Shenzhen  Guangdong  518109
-				CN
-
-F0-26-4C   (hex)		Sigrist-Photometer AG
-F0264C     (base 16)		Sigrist-Photometer AG
-				Hofurlistrasse 1
-				Ennetbürgen    6373
-				CH
-
-D8-0B-9A   (hex)		Samsung Electronics Co.,Ltd
-D80B9A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-AC-8D-34   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC8D34     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-52-99   (hex)		The Chamberlain Group, Inc
-645299     (base 16)		The Chamberlain Group, Inc
-				300 Windsor Drive
-				Oak Brook  IL  60523
-				US
-
-F8-75-A4   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-F875A4     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-00-D2-B1   (hex)		TPV Display Technology (Xiamen) Co.,Ltd.
-00D2B1     (base 16)		TPV Display Technology (Xiamen) Co.,Ltd.
-				No.1, Xianghai Road, Xiamen Torch Hi-Tech Industrial Development Zone
-				XM  Fujian  361101
-				CN
-
-C0-E4-34   (hex)		AzureWave Technology Inc.
-C0E434     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-6C-71-0D   (hex)		Cisco Systems, Inc
-6C710D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-24-6F-8C   (hex)		Huawei Device Co., Ltd.
-246F8C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-13-86   (hex)		Huawei Device Co., Ltd.
-1C1386     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-BC-2E-F6   (hex)		Huawei Device Co., Ltd.
-BC2EF6     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-44-55-C4   (hex)		Huawei Device Co., Ltd.
-4455C4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-08-29   (hex)		TOKYO ELECTRON DEVICE NAGASAKI LIMITED
-000829     (base 16)		TOKYO ELECTRON DEVICE NAGASAKI LIMITED
-				6-42 Tsukuba-machi, Isahaya-shi
-				Nagasaki  Kyushu  854-0065
-				JP
-
-1C-44-55   (hex)		Sieb & Meyer AG
-1C4455     (base 16)		Sieb & Meyer AG
-				Auf dem Schmaarkamp 21
-				Lueneburg    21339
-				DE
-
-F8-8A-5E   (hex)		Texas Instruments
-F88A5E     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-5C-E7-A0   (hex)		Nokia
-5CE7A0     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-E0-1F-88   (hex)		Xiaomi Communications Co Ltd
-E01F88     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-8C-DC-02   (hex)		zte corporation
-8CDC02     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B4-BC-7C   (hex)		Texas Instruments
-B4BC7C     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-E0-AA-B0   (hex)		SUNTAILI ENTERPRISE CO. LTD,
-E0AAB0     (base 16)		SUNTAILI ENTERPRISE CO. LTD,
-				No. 6 ALY 3,LN 64 XINGFU RD, XINZHUNAG DISTRICT
-				NEW TAIPEI CITY    242
-				TW
-
-68-39-43   (hex)		ittim
-683943     (base 16)		ittim
-				1202, No.6, Zhongguancun South Street, Haidian District,
-				beijing    100080
-				CN
-
-10-C6-5E   (hex)		Adapt-IP
-10C65E     (base 16)		Adapt-IP
-				1671 Dell Avenue, Suite 130
-				Campbell  CA  95008-6900
-				US
-
-7C-A7-B0   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-7CA7B0     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-20-31-1C   (hex)		vivo Mobile Communication Co., Ltd.
-20311C     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-10-4F-58   (hex)		Aruba, a Hewlett Packard Enterprise Company
-104F58     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-B4-E8-42   (hex)		Hong Kong Bouffalo Lab Limited
-B4E842     (base 16)		Hong Kong Bouffalo Lab Limited
-				RM 1903, 19/F Lee Garden One 33 Hysan Avenue, Causeway Bay
-				HongKong    999077
-				HK
-
-00-03-CB   (hex)		SystemGear Co., Ltd.
-0003CB     (base 16)		SystemGear Co., Ltd.
-				1-9-14 Edobori
-				Osaka  Nishi-ku  550-0002
-				JP
-
-F0-A7-B2   (hex)		FUTABA CORPORATION
-F0A7B2     (base 16)		FUTABA CORPORATION
-				629 Oshiba
-				Mobara  Chiba Prefecture  297-8588
-				JP
-
-60-9B-2D   (hex)		JMACS Japan Co., Ltd.
-609B2D     (base 16)		JMACS Japan Co., Ltd.
-				11F, KM Nishi-Umeda bldg., 7-20-1 Fukushima, Fukushima-ku
-				Osaka-city  Osaka  553-0003
-				JP
-
-14-A3-2F   (hex)		Huawei Device Co., Ltd.
-14A32F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-D3-B5   (hex)		Huawei Device Co., Ltd.
-04D3B5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-BB-1C   (hex)		Huawei Device Co., Ltd.
-00BB1C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-80-AC-7C   (hex)		Sichuan AI-Link Technology Co., Ltd.
-80AC7C     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-DC-4B-FE   (hex)		Shenzhen Belon Technology CO.,LTD
-DC4BFE     (base 16)		Shenzhen Belon Technology CO.,LTD
-				Tsinghua Information
-				Shenzhen  Guangdong  518052
-				CN
-
-50-62-55   (hex)		IEEE Registration Authority
-506255     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-58-D5-0A   (hex)		Murata Manufacturing Co., Ltd.
-58D50A     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-88-A3-03   (hex)		Samsung Electronics Co.,Ltd
-88A303     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-DE-90   (hex)		Samsung Electronics Co.,Ltd
-FCDE90     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-54-CF   (hex)		Samsung Electronics Co.,Ltd
-1854CF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-79-5D   (hex)		Infinix mobility limited
-80795D     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-E8-84-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E884C6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-2C-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-642CAC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-CC-27   (hex)		Motorola Mobility LLC, a Lenovo Company
-08CC27     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-04-D3-95   (hex)		Motorola Mobility LLC, a Lenovo Company
-04D395     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-E0-98-06   (hex)		Espressif Inc.
-E09806     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-F4-CF-A2   (hex)		Espressif Inc.
-F4CFA2     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-F8-1E-6F   (hex)		EBG compleo GmbH
-F81E6F     (base 16)		EBG compleo GmbH
-				Oberste-Wilms-Straße 15a
-				Dortmund  Nordrhein-Westfalen  44309
-				DE
-
-F0-A3-5A   (hex)		Apple, Inc.
-F0A35A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-83-73   (hex)		Apple, Inc.
-608373     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-AD-8D   (hex)		Apple, Inc.
-84AD8D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-42-8B   (hex)		Apple, Inc.
-74428B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-91-38   (hex)		Amazon Technologies Inc.
-149138     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-6C-41-0E   (hex)		Cisco Systems, Inc
-6C410E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-31-0E   (hex)		Cisco Systems, Inc
-6C310E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-28-77-F1   (hex)		Apple, Inc.
-2877F1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-E7-7D   (hex)		Texas Instruments
-A8E77D     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-DC-54-3D   (hex)		ITEL MOBILE LIMITED
-DC543D     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-0C-84-47   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-0C8447     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-9C-6B-72   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
-9C6B72     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
-				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
-				Chongqing  China  401120
-				CN
-
-50-C6-AD   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-50C6AD     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-74-8A-28   (hex)		HMD Global Oy
-748A28     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-D4-24-93   (hex)		GW Technologies Co.,Ltd
-D42493     (base 16)		GW Technologies Co.,Ltd
-				Building 16,No.8,Heying Road,Changping District
-				Beijing  Beijing  102200
-				CN
-
-00-23-E6   (hex)		Innovation Farm, Inc.
-0023E6     (base 16)		Innovation Farm, Inc.
-				47-8, Hasunuma-cho
-				Itabashi-ku  Tokyo  174-8580
-				JP
-
-EC-A9-40   (hex)		ARRIS Group, Inc.
-ECA940     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-FC-85-96   (hex)		Axonne Inc.
-FC8596     (base 16)		Axonne Inc.
-				1290 Kifer Rd. #301
-				Sunnyvale  CA  94086
-				US
-
-5C-B4-E2   (hex)		Inspur Software Group Ltd.
-5CB4E2     (base 16)		Inspur Software Group Ltd.
-				No. 1036, Langchao Road
-				Jinan  Shandong  250101
-				CN
-
-3C-51-0E   (hex)		Cisco Systems, Inc
-3C510E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D8-AE-D0   (hex)		Shanghai Engineering Science & Technology Co.,LTD CGNPC
-D8AED0     (base 16)		Shanghai Engineering Science & Technology Co.,LTD CGNPC
-				No.1588, Rd Zixing
-				Shanghai  Shanghai  200241
-				CN
-
-E0-85-9A   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-E0859A     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-0C-42-A1   (hex)		Mellanox Technologies, Inc.
-0C42A1     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-B4-7A-F1   (hex)		Hewlett Packard Enterprise
-B47AF1     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-34-9F-7B   (hex)		CANON INC.
-349F7B     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-F4-D9-C6   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-F4D9C6     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
-				Huizhou  Guangdong  516025
-				CN
-
-34-F1-50   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-34F150     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-CC-52-89   (hex)		SHENZHEN OPTFOCUS TECHNOLOGY.,LTD
-CC5289     (base 16)		SHENZHEN OPTFOCUS TECHNOLOGY.,LTD
-				Floor 3, Building No.7,Tangtou 3rd Industrial Park,Shiyan Street of BaoAn District
-				ShenZhen    518000
-				CN
-
-CC-5D-78   (hex)		JTD Consulting
-CC5D78     (base 16)		JTD Consulting
-				92 King Street South, Suite 200
-				Waterloo  Ontario  N2J 1P5
-				CA
-
-BC-F9-F2   (hex)		TEKO
-BCF9F2     (base 16)		TEKO
-				Prospect Pobedy, 19
-				Kazan  Republic of Tatarstan  420138
-				RU
-
-00-0E-A4   (hex)		Quantum Corp.
-000EA4     (base 16)		Quantum Corp.
-				8560 Upland Dr.
-				Englewood  CA  80112
-				US
-
-00-50-84   (hex)		Quantum Corp.
-005084     (base 16)		Quantum Corp.
-				8560 Upland Dr.
-				Englewood  CO  80112
-				US
-
-80-9F-9B   (hex)		Sichuan AI-Link Technology Co., Ltd.
-809F9B     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-A8-2B-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A82BCD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-DC-2D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48DC2D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-EB-51   (hex)		Universal Electronics, Inc.
-ACEB51     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-60-10-A2   (hex)		Crompton Instruments
-6010A2     (base 16)		Crompton Instruments
-				12 Freebournes Road
-				Witham  Essex  CM8 3AH
-				GB
-
-C4-B2-39   (hex)		Cisco Systems, Inc
-C4B239     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B0-A4-54   (hex)		Tripwire Inc.
-B0A454     (base 16)		Tripwire Inc.
-				308 SW 2nd Avenue Suite 400
-				Portland  OR  97204
-				US
-
-64-90-C1   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-6490C1     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-CC-5C-DE   (hex)		China Mobile Group Device Co.,Ltd.
-CC5CDE     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-60-CE-86   (hex)		Sercomm Corporation.
-60CE86     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-4C-4F-EE   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-4C4FEE     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-4C-E1-75   (hex)		Cisco Systems, Inc
-4CE175     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A8-24-B8   (hex)		Nokia
-A824B8     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-0C-E6   (hex)		Fortinet Inc.
-000CE6     (base 16)		Fortinet Inc.
-				899 Kifer Road
-				Sunnyvale  CA  94086
-				US
-
-90-55-DE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-9055DE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E8-91-0F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E8910F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-D0-05-E4   (hex)		Huawei Device Co., Ltd.
-D005E4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-30-AA-E4   (hex)		Huawei Device Co., Ltd.
-30AAE4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-14-AB-56   (hex)		WUXI FUNIDE DIGITAL CO.,LTD
-14AB56     (base 16)		WUXI FUNIDE DIGITAL CO.,LTD
-				No. 38 East Chunhui Road, Xishan Economic & Technology Development Zone
-				WUXI  JIANGSU  214101
-				CN
-
-E8-D8-D1   (hex)		HP Inc.
-E8D8D1     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-28-CD-C4   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-28CDC4     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-00-0C-DF   (hex)		JAI Manufacturing
-000CDF     (base 16)		JAI Manufacturing
-				2960-14 Uenojo Nishikata
-				Kushima  Miyazaki  888-0004
-				JP
-
-2C-91-AB   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-2C91AB     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-80-7B-3E   (hex)		Samsung Electronics Co.,Ltd
-807B3E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F8-F1-E6   (hex)		Samsung Electronics Co.,Ltd
-F8F1E6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-A9-B7   (hex)		Apple, Inc.
-88A9B7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-CE-D7   (hex)		Apple, Inc.
-ECCED7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-EB-62   (hex)		Murata Manufacturing Co., Ltd.
-48EB62     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-5C-E1-76   (hex)		Cisco Systems, Inc
-5CE176     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-AC-90-85   (hex)		Apple, Inc.
-AC9085     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-48-ED   (hex)		Dell Inc.
-3448ED     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-3C-57-31   (hex)		Cisco Systems, Inc
-3C5731     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-55-E8   (hex)		Technicolor CH USA Inc.
-6C55E8     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-34-2F-BD   (hex)		Nintendo Co.,Ltd
-342FBD     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-A0-2D-13   (hex)		AirTies Wireless Networks
-A02D13     (base 16)		AirTies Wireless Networks
-				Esentepe Mah., Kore ?ehitleri Cad.
-				Istanbul  ?i?li  34360
-				TR
-
-84-68-C8   (hex)		TOTOLINK TECHNOLOGY INT‘L LIMITED
-8468C8     (base 16)		TOTOLINK TECHNOLOGY INT‘L LIMITED
-				ROOM 702,7/F SPA CENTER NO 53055 LOCKHART ROAD 
-				WAN CHAI    999077
-				HK
-
-9C-28-F7   (hex)		Xiaomi Communications Co Ltd
-9C28F7     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-10-52-1C   (hex)		Espressif Inc.
-10521C     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-6C-42-AB   (hex)		Subscriber Networks, Inc.
-6C42AB     (base 16)		Subscriber Networks, Inc.
-				148 W. State Street
-				Kennett Square  PA  19348
-				US
-
-64-F6-F7   (hex)		Anhui Dynamic Power Co., Ltd.
-64F6F7     (base 16)		Anhui Dynamic Power Co., Ltd.
-				NO.20 Jinniu Mid Road,
-				Xuancheng  Anhui  242100
-				CN
-
-94-1C-56   (hex)		Actiontec Electronics, Inc
-941C56     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-D8-0B-CB   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
-D80BCB     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
-				No. 1500 Zuchongzhi Rd, Building #3
-				Shanghai    201203
-				CN
-
-F0-F0-A4   (hex)		Amazon Technologies Inc.
-F0F0A4     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-C0-D6-82   (hex)		Arista Networks
-C0D682     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-CC-2D-1B   (hex)		SFR
-CC2D1B     (base 16)		SFR
-				12 rue jean-philippe Rameau CS 80001
-				La plaine saint denis   FRANCE  93634
-				FR
-
-80-E5-40   (hex)		ARRIS Group, Inc.
-80E540     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-0D-B4   (hex)		Stormshield
-000DB4     (base 16)		Stormshield
-				2-10 rue Marceau
-				ISSY LES MOULINEAUX    92130
-				FR
-
-2C-F0-5D   (hex)		Micro-Star INTL CO., LTD.
-2CF05D     (base 16)		Micro-Star INTL CO., LTD.
-				No.69, Lide St.,
-				New Taipei City  Taiwan  235
-				TW
-
-94-3B-B0   (hex)		New H3C Technologies Co., Ltd
-943BB0     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-90-43-E2   (hex)		Cornami, Inc
-9043E2     (base 16)		Cornami, Inc
-				300 Orchard City Dr, Suite 131
-				Campbell  CA  95008
-				US
-
-80-30-49   (hex)		Liteon Technology Corporation
-803049     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-E8-49-43   (hex)		YUGE Information technology Co. Ltd
-E84943     (base 16)		YUGE Information technology Co. Ltd
-				Room 303, Building No. 6, ShengRong Rd. 88, Pudong, Shanghai
-				Shanghai    201203
-				CN
-
-50-14-08   (hex)		AiNET
-501408     (base 16)		AiNET
-				11700 MONTGOMERY RD
-				BELTSVILLE  MD  20705-1159
-				US
-
-28-9A-F7   (hex)		ADVA Optical Networking Ltd.
-289AF7     (base 16)		ADVA Optical Networking Ltd.
-				ADVAntage House
-				York    YO30 4RY
-				GB
-
-B0-B1-94   (hex)		zte corporation
-B0B194     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-10-C3-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-10C3AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-11-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2811EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-26-86   (hex)		DWnet Technologies(Suzhou) Corporation
-E42686     (base 16)		DWnet Technologies(Suzhou) Corporation
-				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
-				Suzhou    21500
-				CN
-
-00-69-2D   (hex)		Sunnovo International Limited
-00692D     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-38-EB-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-38EB47     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-37-96   (hex)		BIZLINK TECHNOLOGY, INC.
-0C3796     (base 16)		BIZLINK TECHNOLOGY, INC.
-				47211 BAYSIDE PARKWAY
-				Fremont  CA  94538
-				US
-
-F4-03-2A   (hex)		Amazon Technologies Inc.
-F4032A     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-14-77-40   (hex)		Huawei Device Co., Ltd.
-147740     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B4-15-7E   (hex)		Celona Inc.
-B4157E     (base 16)		Celona Inc.
-				10061, Bubb Road Suite 300
-				Cupertino  CA  95014
-				US
-
-18-D9-8F   (hex)		Huawei Device Co., Ltd.
-18D98F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-5E-2C   (hex)		IRay Technology Co., Ltd.
-645E2C     (base 16)		IRay Technology Co., Ltd.
-				11th Guiyang St.,
-				Yantai  Shandong  264000
-				CN
-
-00-E0-EC   (hex)		CELESTICA INC.
-00E0EC     (base 16)		CELESTICA INC.
-				1900-5140 Yonge Street PO Box 42   
-				Toronto  Ontario  M2N 6L7
-				CA
-
-70-38-11   (hex)		Siemens Mobility Limited
-703811     (base 16)		Siemens Mobility Limited
-				17 Langley Park Way
-				Chippenham  Wiltshire  SN15 1GG
-				GB
-
-64-62-66   (hex)		IEEE Registration Authority
-646266     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-48-7A-F6   (hex)		NCS ELECTRICAL SDN BHD
-487AF6     (base 16)		NCS ELECTRICAL SDN BHD
-				NO. 20, 22, 24, 26, JALAN 1/3, RAWANG INTEGRATED INDUSTRIAL PARK, 48000 Rawang Selangor, MALAYSIA
-				RAWANG  SELANGOR  48000
-				MY
-
-48-6E-70   (hex)		Zhejiang Tmall Technology Co., Ltd.
-486E70     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-60-1D-9D   (hex)		Sichuan AI-Link Technology Co., Ltd.
-601D9D     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-D8-5F-77   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
-D85F77     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
-				No. 1500 Zuchongzhi Rd, Building #3
-				Shanghai    201203
-				CN
-
-2C-97-ED   (hex)		Sony Imaging Products & Solutions Inc.
-2C97ED     (base 16)		Sony Imaging Products & Solutions Inc.
-				konan 1-7-1
-				minato-ku  Tokyo  108-0075
-				JP
-
-20-82-6A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-20826A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-B8-90-47   (hex)		Apple, Inc.
-B89047     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-9C-4A   (hex)		Apple, Inc.
-909C4A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-8C-43   (hex)		Apple, Inc.
-908C43     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-8A-6A   (hex)		AVPro Global Hldgs
-188A6A     (base 16)		AVPro Global Hldgs
-				2222 E 52nd Steeet N
-				Sioux Falls  SD  57104
-				US
-
-3C-7D-0A   (hex)		Apple, Inc.
-3C7D0A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-8A-39   (hex)		Samsung Electronics Co.,Ltd
-D48A39     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-F3-C4   (hex)		Samsung Electronics Co.,Ltd
-E4F3C4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-2F-4E   (hex)		zte corporation
-9C2F4E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F0-10-90   (hex)		New H3C Technologies Co., Ltd
-F01090     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-08-BF-A0   (hex)		Samsung Electronics Co.,Ltd
-08BFA0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-70-1F-3C   (hex)		Samsung Electronics Co.,Ltd
-701F3C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-20-50-E7   (hex)		AMPAK Technology,Inc.
-2050E7     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-D8-A8-C8   (hex)		zte corporation
-D8A8C8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-22-E2   (hex)		HP Inc.
-3822E2     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-08-C0-EB   (hex)		Mellanox Technologies, Inc.
-08C0EB     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-E4-E1-12   (hex)		Texas Instruments
-E4E112     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-34-14-B5   (hex)		Texas Instruments
-3414B5     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D0-03-EB   (hex)		Texas Instruments
-D003EB     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-94-DB-56   (hex)		Sony Home Entertainment&Sound Products Inc
-94DB56     (base 16)		Sony Home Entertainment&Sound Products Inc
-				Sony City Osaki 2-10-1 Osaki Shinagawa-ku
-				Tokyo  Japan  141-8610
-				JP
-
-88-9E-68   (hex)		Technicolor CH USA Inc.
-889E68     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-64-09-AC   (hex)		TCT mobile ltd
-6409AC     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-74-3A-EF   (hex)		Kaonmedia CO., LTD.
-743AEF     (base 16)		Kaonmedia CO., LTD.
-				884-3, Seongnam-daero, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13517
-				KR
-
-18-9E-2C   (hex)		Huawei Device Co., Ltd.
-189E2C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-5C-55-78   (hex)		iryx corp
-5C5578     (base 16)		iryx corp
-				14 Hughes
-				Irvine  CA  92618
-				US
-
-4C-C5-3E   (hex)		Zyxel Communications Corporation
-4CC53E     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-90-56-FC   (hex)		TECNO MOBILE LIMITED
-9056FC     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-B8-63-92   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-B86392     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-				No.168, Middle Road Of East Gate
-				Xiaobian Community  Chang'an Town  523851
-				CN
-
-68-B9-D3   (hex)		Shenzhen Trolink Technology CO, LTD
-68B9D3     (base 16)		Shenzhen Trolink Technology CO, LTD
-				201 B building 4 shijie, Chashu industry 505 block, Baoan airport Sanwei community, Hangcheng street Baoan area.
-				Shenzhen  GuangDong  518000
-				CN
-
-B8-C6-AA   (hex)		Earda Technologies co Ltd
-B8C6AA     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-54-AE-D0   (hex)		DASAN Networks, Inc. 
-54AED0     (base 16)		DASAN Networks, Inc. 
-				DASAN Tower, 49, Daewangpangyo-ro, 644 Beon-gil, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13493
-				KR
-
-10-70-FD   (hex)		Mellanox Technologies, Inc.
-1070FD     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-38-F6-01   (hex)		Solid State Storage Technology Corporation
-38F601     (base 16)		Solid State Storage Technology Corporation
-				21F, 392, Ruey Kuang Road, Neihu
-				 Taipei    11492
-				TW
-
-40-DE-AD   (hex)		Juniper Networks
-40DEAD     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-40-F5-20   (hex)		Espressif Inc.
-40F520     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-78-AA-82   (hex)		New H3C Technologies Co., Ltd
-78AA82     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-20-6C-8A   (hex)		Extreme Networks, Inc.
-206C8A     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-34-85-84   (hex)		Extreme Networks, Inc.
-348584     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-40-18-B1   (hex)		Extreme Networks, Inc.
-4018B1     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-88-5B-DD   (hex)		Extreme Networks, Inc.
-885BDD     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-98-ED-5C   (hex)		Tesla,Inc.
-98ED5C     (base 16)		Tesla,Inc.
-				3500 Deer Creek Road
-				Palo Alto  CA  94304
-				US
-
-C4-42-68   (hex)		CRESTRON ELECTRONICS, INC.
-C44268     (base 16)		CRESTRON ELECTRONICS, INC.
-				15 Volvo Drive
-				Rockleigh  NJ  07647
-				US
-
-54-71-DD   (hex)		Huawei Device Co., Ltd.
-5471DD     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E4-A7-49   (hex)		Palo Alto Networks
-E4A749     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-84-D6-C5   (hex)		SolarEdge Technologies
-84D6C5     (base 16)		SolarEdge Technologies
-				1 Abba Eban St.
-				Herzelia    46725
-				IL
-
-D8-91-36   (hex)		Dover Fueling Solutions
-D89136     (base 16)		Dover Fueling Solutions
-				Industrieweg 5
-				Bladel  NBR  5531AD
-				NL
-
-C8-83-14   (hex)		Tempo Communications
-C88314     (base 16)		Tempo Communications
-				1390 Aspen Way
-				Vista  CA  92081
-				US
-
-B8-E3-EE   (hex)		Universal Electronics, Inc.
-B8E3EE     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-24-C8-D3   (hex)		McWane India Pvt Ltd
-24C8D3     (base 16)		McWane India Pvt Ltd
-				483, Kamaraj Road, Upplipalayam
-				Coimbatore  Tamil Nadu  641015
-				IN
-
-60-54-64   (hex)		Eyedro Green Solutions Inc.
-605464     (base 16)		Eyedro Green Solutions Inc.
-				130 Weber St W, Suite 201
-				Kitchener  Ontario  N2H4A2
-				CA
-
-FC-95-6A   (hex)		OCTAGON SYSTEMS CORP.
-FC956A     (base 16)		OCTAGON SYSTEMS CORP.
-				7403 Church Ranch Blvd
-				Westminster  CO  80021
-				US
-
-40-B3-1E   (hex)		Universal Electronics, Inc.
-40B31E     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-88-40-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-884033     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-F6-B5   (hex)		Nintendo Co.,Ltd
-E0F6B5     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-AC-7A-56   (hex)		Cisco Systems, Inc
-AC7A56     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-8D-BF   (hex)		Rhino Mobility LLC
-448DBF     (base 16)		Rhino Mobility LLC
-				8 The Green, Suite A
-				Dover  DE  19901
-				US
-
-94-8A-C6   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-948AC6     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-C0-A6-6D   (hex)		Inspur Group Co., Ltd.
-C0A66D     (base 16)		Inspur Group Co., Ltd.
-				No.1036 Langchao Rd.
-				Jinan  Shandong  250101
-				CN
-
-70-F0-96   (hex)		Cisco Systems, Inc
-70F096     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-20-A6   (hex)		Proxim Wireless
-0020A6     (base 16)		Proxim Wireless
-				2114 Ringwood Ave
-				San Jose  CA  95131
-				US
-
-58-50-ED   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-5850ED     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-00-05-1E   (hex)		Brocade Communications Systems LLC
-00051E     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-98-8B-0A   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-988B0A     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-BC-BA-C2   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-BCBAC2     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-AC-CB-51   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-ACCB51     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-E0-D4-62   (hex)		Huawei Device Co., Ltd.
-E0D462     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-90-98-38   (hex)		Huawei Device Co., Ltd.
-909838     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-84-CC-A8   (hex)		Espressif Inc.
-84CCA8     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-C4-F5-7C   (hex)		Brocade Communications Systems LLC
-C4F57C     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-12-F2   (hex)		Brocade Communications Systems LLC
-0012F2     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-6C-2F-8A   (hex)		Samsung Electronics Co.,Ltd
-6C2F8A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-B0-22   (hex)		TOHO Electronics INC.
-F0B022     (base 16)		TOHO Electronics INC.
-				1-13-21 Tanashioda, Chuo-Ku
-				Sagamihara-City  Kanagawa  252-0245
-				JP
-
-98-7E-CA   (hex)		Inventus Power Eletronica do Brasil LTDA
-987ECA     (base 16)		Inventus Power Eletronica do Brasil LTDA
-				Av Buriti, 4285 Distrito Industrial
-				Manaus  Amazonas  69075000
-				BR
-
-2C-9F-FB   (hex)		Wistron Neweb Corporation
-2C9FFB     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-50-38-2F   (hex)		ASE Group Chung-Li
-50382F     (base 16)		ASE Group Chung-Li
-				No 550,Chung-Hwa Road Section1
-				Chung-Li , Taoyuan  Taoyuan  32016
-				TW
-
-0C-14-D2   (hex)		China Mobile Group Device Co.,Ltd.
-0C14D2     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-D4-F8-29   (hex)		Sagemcom Broadband SAS
-D4F829     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-E0-62-34   (hex)		Texas Instruments
-E06234     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-70-8C-BB   (hex)		MIMODISPLAYKOREA
-708CBB     (base 16)		MIMODISPLAYKOREA
-				#812, 19, Ojeongongeop-gil
-				Uiwang-si  Gyeonggi-do  16072
-				KR
-
-B8-48-AA   (hex)		EM Microelectronic
-B848AA     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-F8-57-2E   (hex)		Core Brands, LLC
-F8572E     (base 16)		Core Brands, LLC
-				5919 Sea Otter Place
-				Carlsbad  CA  92010
-				US
-
-00-1C-91   (hex)		Gefen LLC
-001C91     (base 16)		Gefen LLC
-				5919 Sea Otter Place
-				Carlsbad  CA  92010
-				US
-
-24-4B-FE   (hex)		ASUSTek COMPUTER INC.
-244BFE     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-7C-DD-E9   (hex)		ATOM tech Inc.
-7CDDE9     (base 16)		ATOM tech Inc.
-				Sky Menor Yokohama 422, 2-11-2 Takashima, Nishi-ku 
-				Yokohama-shi  Kanagawa  220-0011
-				JP
-
-F8-6B-D9   (hex)		Cisco Systems, Inc
-F86BD9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C0-14-FE   (hex)		Cisco Systems, Inc
-C014FE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-7C-AD-4F   (hex)		Cisco Systems, Inc
-7CAD4F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-31-A4   (hex)		Huawei Device Co., Ltd.
-0831A4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A8-E9-78   (hex)		Huawei Device Co., Ltd.
-A8E978     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F8-2F-65   (hex)		Huawei Device Co., Ltd.
-F82F65     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-28-B3-71   (hex)		Ruckus Wireless
-28B371     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-08-AC-C4   (hex)		FMTech
-08ACC4     (base 16)		FMTech
-				yuehai
-				ShenZhen    518000
-				CN
-
-DC-50-3A   (hex)		Nanjing Ticom Tech Co., Ltd.
-DC503A     (base 16)		Nanjing Ticom Tech Co., Ltd.
-				No.35 Fenghui Road, Yuhuatai District
-				Nanjing  Jiangsu  210039
-				CN
-
-18-47-3D   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-18473D     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-D4-77-B2   (hex)		Netix Global B.V.
-D477B2     (base 16)		Netix Global B.V.
-				1119RB Schipol - Rijk, Beechavenue, 113, Schipol,
-				Amsterdam NL    1119
-				NL
-
-70-B5-E8   (hex)		Dell Inc.
-70B5E8     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-94-25-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-942533     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-56-61   (hex)		IXECLOUD Tech
-605661     (base 16)		IXECLOUD Tech
-				118, 3rd Floor, Building 195, Area 1 Beiwa Road,Haidian District, Beijing
-				Beijing    100000
-				CN
-
-0C-59-9C   (hex)		Juniper Networks
-0C599C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-44-F4-E7   (hex)		Cohesity Inc
-44F4E7     (base 16)		Cohesity Inc
-				300 park ave
-				san jose  CA  95110
-				US
-
-70-69-79   (hex)		IEEE Registration Authority
-706979     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-FC-60-9B   (hex)		New H3C Technologies Co., Ltd
-FC609B     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-E8-A1-F8   (hex)		zte corporation
-E8A1F8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-98-A9-42   (hex)		Guangzhou Tozed Kangwei Intelligent Technology Co., LTD
-98A942     (base 16)		Guangzhou Tozed Kangwei Intelligent Technology Co., LTD
-				Room 1301, NO. 37 Jinlong , Nansha Street, Xiangjiang Financial Business Center, Nansha District
-				Guangzhou  Guangdong  511458
-				CN
-
-30-42-40   (hex)		zte corporation
-304240     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-4C-21-13   (hex)		Nokia Shanghai Bell Co., Ltd.
-4C2113     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-80-2D-BF   (hex)		Cisco Systems, Inc
-802DBF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-F1-50   (hex)		Guangzhou Qi'an Technology Co., Ltd.
-24F150     (base 16)		Guangzhou Qi'an Technology Co., Ltd.
-				No. 3, Dasonggang, Jiangnan Avenue Middle Road, Haizhu District, Guangzhou (office only)
-				Guangzhou  Guangdong  510220
-				CN
-
-10-8B-6A   (hex)		Antailiye Technology Co.,Ltd
-108B6A     (base 16)		Antailiye Technology Co.,Ltd
-				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen
-				SHEN ZHEN  GUANGDONG  518000
-				CN
-
-14-C8-8B   (hex)		Apple, Inc.
-14C88B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-26-51   (hex)		Apple, Inc.
-EC2651     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-3E-EF   (hex)		Apple, Inc.
-183EEF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-7E-C9   (hex)		Apple, Inc.
-607EC9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-88-2F   (hex)		Extreme Networks, Inc.
-40882F     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-E4-3D-1A   (hex)		Broadcom Limited
-E43D1A     (base 16)		Broadcom Limited
-				15191 Alton Parkway
-				Irvine  CA  92618
-				US
-
-64-4C-36   (hex)		Intel Corporate
-644C36     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-48-89-E7   (hex)		Intel Corporate
-4889E7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-24-EE-9A   (hex)		Intel Corporate
-24EE9A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-5C-87-9C   (hex)		Intel Corporate
-5C879C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-50-EB-71   (hex)		Intel Corporate
-50EB71     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-0C-DD-24   (hex)		Intel Corporate
-0CDD24     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-94-B8-6D   (hex)		Intel Corporate
-94B86D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-20-16-B9   (hex)		Intel Corporate
-2016B9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-38-BA-F8   (hex)		Intel Corporate
-38BAF8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-3C-6A-A7   (hex)		Intel Corporate
-3C6AA7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-34-E1-2D   (hex)		Intel Corporate
-34E12D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-00-BB-60   (hex)		Intel Corporate
-00BB60     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-60-F6-77   (hex)		Intel Corporate
-60F677     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-A0-88-69   (hex)		Intel Corporate
-A08869     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-74-E5-F9   (hex)		Intel Corporate
-74E5F9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-80-00-0B   (hex)		Intel Corporate
-80000B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-34-41-5D   (hex)		Intel Corporate
-34415D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-FC-77-74   (hex)		Intel Corporate
-FC7774     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-98-2C-BC   (hex)		Intel Corporate
-982CBC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-3C-F0-11   (hex)		Intel Corporate
-3CF011     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-28-7F-CF   (hex)		Intel Corporate
-287FCF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-80-32-53   (hex)		Intel Corporate
-803253     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-D8-C0-A6   (hex)		AzureWave Technology Inc.
-D8C0A6     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-9C-FC-E8   (hex)		Intel Corporate
-9CFCE8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-F8-AC-65   (hex)		Intel Corporate
-F8AC65     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-10-12-FB   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-1012FB     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-F0-9B-B8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F09BB8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-17-B8   (hex)		Intel Corporate
-BC17B8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-B8-CB-29   (hex)		Dell Inc.
-B8CB29     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-44-BB-3B   (hex)		Google, Inc.
-44BB3B     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-14-C1-4E   (hex)		Google, Inc.
-14C14E     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-8C-5E-BD   (hex)		Huawei Device Co., Ltd.
-8C5EBD     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-2C-A0-42   (hex)		Huawei Device Co., Ltd.
-2CA042     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-EC-C0-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ECC01B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-98-44-CE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9844CE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-D0-83   (hex)		Aruba, a Hewlett Packard Enterprise Company
-CCD083     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-C0-83-C9   (hex)		Huawei Device Co., Ltd.
-C083C9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C0-1C-30   (hex)		Shenzhen WIFI-3L Technology Co.,Ltd
-C01C30     (base 16)		Shenzhen WIFI-3L Technology Co.,Ltd
-				East 5 Floor,B Building, WeiHao Technology Park,Sunny Indusrtrial zone, Xili Town, Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-D8-C6-78   (hex)		MitraStar Technology Corp.
-D8C678     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-44-1C-7F   (hex)		Motorola Mobility LLC, a Lenovo Company
-441C7F     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-00-B8-B6   (hex)		Motorola Mobility LLC, a Lenovo Company
-00B8B6     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-1C-E6-1D   (hex)		Samsung Electronics Co.,Ltd
-1CE61D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-12-DF   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-8012DF     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-10-E7-7A   (hex)		STMicrolectronics International NV
-10E77A     (base 16)		STMicrolectronics International NV
-				39, Chemin du Champ-des-Filles
-				 Geneva, Plan-les-Quates    1228
-				CH
-
-80-EA-07   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-80EA07     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-BC-03-A7   (hex)		MFP MICHELIN
-BC03A7     (base 16)		MFP MICHELIN
-				23 place des Carmes Dechaux
-				Clermont-Ferrand    63000
-				FR
-
-90-76-9F   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-90769F     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-98-2F-F8   (hex)		Huawei Device Co., Ltd.
-982FF8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-40-DC-A5   (hex)		Huawei Device Co., Ltd.
-40DCA5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-2C-6F-51   (hex)		Herospeed Digital Technology Limited
-2C6F51     (base 16)		Herospeed Digital Technology Limited
-				728 Kaichuang Avenue,Huangpu Distric
-				Guangzhou  Guangdong  510530
-				CN
-
-04-A2-F3   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-04A2F3     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-CC-DB-93   (hex)		Cisco Systems, Inc
-CCDB93     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-54-48-E6   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-5448E6     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District
-				Beijing  Beijing  100085
-				CN
-
-60-D4-E9   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-60D4E9     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-30-C5-0F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-30C50F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-68-D2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2868D2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-A9-35   (hex)		JWEntertainment
-90A935     (base 16)		JWEntertainment
-				3f 10 Dwitgol-ro
-				Gwacheon-si  Gyeonggi-do  13814
-				KR
-
-A4-86-AE   (hex)		Quectel Wireless Solutions Co., Ltd.
-A486AE     (base 16)		Quectel Wireless Solutions Co., Ltd.
-				No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-1C-D6-BE   (hex)		Wistron Neweb Corporation
-1CD6BE     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-28-D1-27   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-28D127     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-C8-68-DE   (hex)		Huawei Device Co., Ltd.
-C868DE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D0-0D-F7   (hex)		Huawei Device Co., Ltd.
-D00DF7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-48-05-E2   (hex)		Huawei Device Co., Ltd.
-4805E2     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F8-1B-04   (hex)		Zhong Shan City Richsound Electronic Industrial Ltd
-F81B04     (base 16)		Zhong Shan City Richsound Electronic Industrial Ltd
-				Qunle Industrial Area,East ShaGang Road,GangKou ZhongShan,GuangDong,China
-				ZhongShan  GuangDong  528400
-				CN
-
-D8-8C-79   (hex)		Google, Inc.
-D88C79     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-10-34-1B   (hex)		Spacelink
-10341B     (base 16)		Spacelink
-				8830 Complex dr
-				San Diego  CA  92123
-				US
-
-30-A4-52   (hex)		Arrival Elements BV
-30A452     (base 16)		Arrival Elements BV
-				M. Keynesplein 12-46
-				Amsterdam    1066 EP
-				NL
-
-00-1E-68   (hex)		Quanta Computer Inc.
-001E68     (base 16)		Quanta Computer Inc.
-				NO. 211, WEN HWA 2RD., KUEI SHAN HSIANG
-				TAIPEI  TAO YUAN SHIEN  333
-				TW
-
-00-23-8B   (hex)		Quanta Computer Inc.
-00238B     (base 16)		Quanta Computer Inc.
-				NO. 211, WEN HWA 2RD.,KUEI SHAN HSIANG, TAO YUAN SHIEN,
-				TAIPEI  TAIWAN  333
-				TW
-
-2C-60-0C   (hex)		Quanta Computer Inc.
-2C600C     (base 16)		Quanta Computer Inc.
-				No.211, Wen Hwa 2nd Rd
-				Taoyuan  Taiwan  33377
-				TW
-
-8C-C5-B4   (hex)		Sagemcom Broadband SAS
-8CC5B4     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-0B-A2   (hex)		Sumitomo Electric Industries, Ltd
-000BA2     (base 16)		Sumitomo Electric Industries, Ltd
-				1-1-3, Shimaya, Konohana-ku
-				Osaka    554-0024
-				JP
-
-00-08-F6   (hex)		Sumitomo Electric Industries, Ltd
-0008F6     (base 16)		Sumitomo Electric Industries, Ltd
-				1-1-3, Shimaya, Konohana-ku
-				Osaka    554-0024
-				JP
-
-00-00-5F   (hex)		Sumitomo Electric Industries, Ltd
-00005F     (base 16)		Sumitomo Electric Industries, Ltd
-				1-1-3, Shimaya, Konohana-ku
-				Osaka    554-0024
-				JP
-
-18-EC-E7   (hex)		BUFFALO.INC
-18ECE7     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-F4-69-D5   (hex)		IEEE Registration Authority
-F469D5     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-08-3A-F2   (hex)		Espressif Inc.
-083AF2     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-74-3A-20   (hex)		New H3C Technologies Co., Ltd
-743A20     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-30-C9-AB   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-30C9AB     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-3C-1A-9E   (hex)		VitalThings AS
-3C1A9E     (base 16)		VitalThings AS
-				Jarlsoveien 48
-				Tonsberg    3124
-				NO
-
-C4-D7-38   (hex)		Huawei Device Co., Ltd.
-C4D738     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C8-84-A1   (hex)		Cisco Systems, Inc
-C884A1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D8-77-8B   (hex)		Intelbras
-D8778B     (base 16)		Intelbras
-				BR 101, KM 210
-				São Jose  Santa Catarina  88104-800
-				BR
-
-00-03-E8   (hex)		Wavesight Limited
-0003E8     (base 16)		Wavesight Limited
-				13 Dencora Way
-				Luton  Sundon Business Park  LU3 3HP
-				GB
-
-6C-BA-B8   (hex)		Sagemcom Broadband SAS
-6CBAB8     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-E0-D4-64   (hex)		Intel Corporate
-E0D464     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-C0-F6-C2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0F6C2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-AF-F7   (hex)		Arista Networks
-D4AFF7     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-60-07-7C   (hex)		Jala Group
-60077C     (base 16)		Jala Group
-				Melchor Pérez de Holguín N 2643
-				Cochabamba  Cochabamba  0000
-				BO
-
-60-98-66   (hex)		Texas Instruments
-609866     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-04-7E-23   (hex)		China Mobile IOT Company Limited
-047E23     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-14-CC-B3   (hex)		AO GK NATEKS
-14CCB3     (base 16)		AO GK NATEKS
-				Kamenshiki B. str., 4
-				Moscow    115172
-				RU
-
-DC-CD-2F   (hex)		Seiko Epson Corporation
-DCCD2F     (base 16)		Seiko Epson Corporation
-				2070 Kotobuki Koaka
-				Matsumoto-shi  Nagano-ken  399-8702
-				JP
-
-94-54-CE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-9454CE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-38-8A-BE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-388ABE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-68-93-20   (hex)		New H3C Technologies Co., Ltd
-689320     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-54-84-DC   (hex)		zte corporation
-5484DC     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-54-9B   (hex)		zte corporation
-38549B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-08-42-96   (hex)		Mobile Technology Solutions LLC
-084296     (base 16)		Mobile Technology Solutions LLC
-				20379 Bannister Dr.
-				Macomb  MI  48044
-				US
-
-34-3E-A4   (hex)		Ring LLC
-343EA4     (base 16)		Ring LLC
-				1523 26th St
-				Santa Monica  CA  90404
-				US
-
-04-C1-D8   (hex)		Huawei Device Co., Ltd.
-04C1D8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C8-BC-9C   (hex)		Huawei Device Co., Ltd.
-C8BC9C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B0-FE-E5   (hex)		Huawei Device Co., Ltd.
-B0FEE5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C8-17-39   (hex)		ITEL MOBILE LIMITED
-C81739     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-58-D0-61   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-58D061     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-EF-B6   (hex)		Edgecore Networks Corporation
-34EFB6     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-E8-74-C7   (hex)		Sentinhealth
-E874C7     (base 16)		Sentinhealth
-				5, Avenude du Grand Sablon
-				LA TRONCHE    38700
-				FR
-
-00-1C-7B   (hex)		Castlenet Technology Inc.
-001C7B     (base 16)		Castlenet Technology Inc.
-				5F., No. 10, Daye Rd., Beitou Dist.
-				Taipei City    112030
-				TW
-
-E4-84-2B   (hex)		HANGZHOU SOFTEL OPTIC CO., LTD
-E4842B     (base 16)		HANGZHOU SOFTEL OPTIC CO., LTD
-				101 BINKANG ROAD, BINJIANG DISTRICT
-				HANGZHOU  ZHEJIANG  310052
-				CN
-
-B8-D3-09   (hex)		Cox Communications, Inc
-B8D309     (base 16)		Cox Communications, Inc
-				6205 Peachtree Dunwoody Rd
-				Atlanta  GA  30328
-				US
-
-94-02-6B   (hex)		Optictimes Co.,Ltd
-94026B     (base 16)		Optictimes Co.,Ltd
-				Hangzhou City, Zhejiang Province
-				Hangzhou  Zhejiang  310023
-				CN
-
-D4-6A-91   (hex)		SnapAV
-D46A91     (base 16)		SnapAV
-				1800 Continental Blvd
-				Charlotte  North Carolina  28273
-				US
-
-80-EE-25   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-80EE25     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-44-87-DB   (hex)		Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.
-4487DB     (base 16)		Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.
-				Tymphany Acoustic Technology (Huizhou) Co., Ltd.
-				Huizhou  Guangdong  516223
-				CN
-
-D0-21-F9   (hex)		Ubiquiti Networks Inc.
-D021F9     (base 16)		Ubiquiti Networks Inc.
-				685 Third Avenue, 27th Floor
-				New York  NY  10017
-				US
-
-D0-3D-52   (hex)		Ava Security Limited
-D03D52     (base 16)		Ava Security Limited
-				The Charter Building, Charter Place
-				Uxbridge    UB8 1JG 
-				GB
-
-F4-90-EA   (hex)		Deciso B.V.
-F490EA     (base 16)		Deciso B.V.
-				Edison 43
-				Midddelharnis  Zuid Holland  3241LS
-				NL
-
-64-D2-C4   (hex)		Apple, Inc.
-64D2C4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-52-85   (hex)		Apple, Inc.
-DC5285     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-81-52   (hex)		Apple, Inc.
-E88152     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-81-58   (hex)		Apple, Inc.
-908158     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-AD-A3   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
-B4ADA3     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-64-23-15   (hex)		Huawei Device Co., Ltd.
-642315     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A4-C7-4B   (hex)		Huawei Device Co., Ltd.
-A4C74B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D0-D2-3C   (hex)		Apple, Inc.
-D0D23C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-E3-DE   (hex)		Apple, Inc.
-78E3DE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-FD-CB   (hex)		IEEE Registration Authority
-18FDCB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D4-48-2D   (hex)		Shenzhen Deejoy Lighting Technology Co.,Ltd.
-D4482D     (base 16)		Shenzhen Deejoy Lighting Technology Co.,Ltd.
-				3rd Floor, Building B3, Xujingchang Industrial Park,Xinhe Community Fuyong Town,Baoan District
-				Shenzhen  Guangdong  518103
-				CN
-
-D8-F8-AF   (hex)		DAONTEC
-D8F8AF     (base 16)		DAONTEC
-				219, Gasan digital 1-ro
-				Seoul    KS013
-				KR
-
-40-8C-4C   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-408C4C     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-				Chudong science and technology park, 111 shaxin road, tangxia town,
-				dongguan city  guangdong province  523710
-				CN
-
-6C-AD-AD   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-6CADAD     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-CC-E0-DA   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
-CCE0DA     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
-				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
-				 Beijing    100085
-				CN
-
-14-1B-30   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
-141B30     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
-				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
-				Shenzhen  Nanshan District  518000
-				CN
-
-F4-6F-ED   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-F46FED     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-94-B9-7E   (hex)		Espressif Inc.
-94B97E     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-A8-30-1C   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-A8301C     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-				No.218 Qianwangang Road
-				Qingdao  Shangdong  266510
-				CN
-
-D8-F3-BC   (hex)		Liteon Technology Corporation
-D8F3BC     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-B8-47-7A   (hex)		Dasan Electron Co., Ltd.
-B8477A     (base 16)		Dasan Electron Co., Ltd.
-				705 HaeAn-Ro #307, SangRok-Gu
-				Ansan  KyungKi  15588
-				KR
-
-7C-78-B2   (hex)		Wyze Labs Inc
-7C78B2     (base 16)		Wyze Labs Inc
-				4030 Lake Washington Boulevard NE
-				Kirkland  WA  98033
-				US
-
-D8-37-3B   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-D8373B     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-6C-2D-24   (hex)		Zhen Shi Information Technology (Shanghai) Co., Ltd.
-6C2D24     (base 16)		Zhen Shi Information Technology (Shanghai) Co., Ltd.
-				5F, Building 3?No. 401 Caobao Road, Xuhui District, Shanghai, China
-				Shanghai  Shanghai  200233
-				CN
-
-B8-AE-1C   (hex)		Smart Cube., Ltd
-B8AE1C     (base 16)		Smart Cube., Ltd
-				13F.-3, No. 78, Sec. 2, Anhe Rd., Da’an Dist., Taipei City 106, Taiwan (R.O.C.)
-				Taipei    106
-				TW
-
-80-03-84   (hex)		Ruckus Wireless
-800384     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-FC-69-8C   (hex)		ANDREAS STIHL AG & Co. KG
-FC698C     (base 16)		ANDREAS STIHL AG & Co. KG
-				Badstraße 115
-				Waiblingen    71336
-				DE
-
-00-23-A7   (hex)		Redpine Signals, Inc.
-0023A7     (base 16)		Redpine Signals, Inc.
-				Plot 87, Sagar Society 
-				Hyderabad  AP  500034
-				IN
-
-44-CE-3A   (hex)		Jiangsu Huacun Electronic Technology Co., Ltd.
-44CE3A     (base 16)		Jiangsu Huacun Electronic Technology Co., Ltd.
-				C4, 9th Floor, 266 New Century Avenue, Tongzhou District
-				Nantong City  Jiangsu Province  226300
-				CN
-
-9C-1E-A4   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-9C1EA4     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-4C-EF-56   (hex)		Shenzhen Sundray Technologies Company Limited
-4CEF56     (base 16)		Shenzhen Sundray Technologies Company Limited
-				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
-				Shenzhen  Guangdong  518057
-				CN
-
-E4-C3-2A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-E4C32A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-90-9A-4A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-909A4A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-BC-97-89   (hex)		Huawei Device Co., Ltd.
-BC9789     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-AC-12-2F   (hex)		Fantasia Trading LLC
-AC122F     (base 16)		Fantasia Trading LLC
-				5350 Ontario Mills Pkwy, Suite 100
-				Ontario  CA  91764
-				US
-
-FC-45-C3   (hex)		Texas Instruments
-FC45C3     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-AC-6A-A3   (hex)		Shenzhen Kertong Technology Co.,Ltd
-AC6AA3     (base 16)		Shenzhen Kertong Technology Co.,Ltd
-				405,Fuyuan Building ,District 45 Bao’an
-				Shenzhen  Guangdong  518101
-				CN
-
-E8-4F-4B   (hex)		Shenzhen Delos Electronic Co., Ltd
-E84F4B     (base 16)		Shenzhen Delos Electronic Co., Ltd
-				Rm 603, Tower B, Galaxy World Building, No.1 Yabao Road,Longgang District,Shenzhen,P.R.China.
-				shenzhen  guangdong  518000
-				CN
-
-B0-4A-39   (hex)		Beijing Roborock Technology Co., Ltd.
-B04A39     (base 16)		Beijing Roborock Technology Co., Ltd.
-				Floor 6,Building C,Kangjian Baosheng Plaza,No. 8 Heiquan Road,Haidian District
-				Beijing  Beijing  100085
-				CN
-
-A4-F9-E4   (hex)		AirVine Scientific, Inc.
-A4F9E4     (base 16)		AirVine Scientific, Inc.
-				1500 Wyatt Drive, Suite 9
-				Santa Clara  CA  95054
-				US
-
-F4-4F-D3   (hex)		shenzhen hemuwei technology co.,ltd
-F44FD3     (base 16)		shenzhen hemuwei technology co.,ltd
-				220, Building C, IoT Industrial Park, Bantian Street, Longgang District
-				shenzhen  guangdong  518000
-				CN
-
-68-45-71   (hex)		Huawei Device Co., Ltd.
-684571     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-84-93-A0   (hex)		Huawei Device Co., Ltd.
-8493A0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-9C-8E-9C   (hex)		Huawei Device Co., Ltd.
-9C8E9C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-40-14-AD   (hex)		Huawei Device Co., Ltd.
-4014AD     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A8-74-84   (hex)		zte corporation
-A87484     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E0-4B-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E04BA6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-B6-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C8B6D3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-FC-8D-3D   (hex)		Leapfive Tech. Ltd.
-FC8D3D     (base 16)		Leapfive Tech. Ltd.
-				huaruizhididasha 8ceng
-				shenzhen  guangdong  518057
-				CN
-
-00-23-86   (hex)		IMI Hydronic Engineering international SA
-002386     (base 16)		IMI Hydronic Engineering international SA
-				Route de Crassier 19
-				Eysins    1262
-				CH
-
-A0-69-74   (hex)		Honor Device Co., Ltd.
-A06974     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-C0-33-DA   (hex)		Shenzhen JRUN Technologies CO., LTD
-C033DA     (base 16)		Shenzhen JRUN Technologies CO., LTD
-				A Zone,9F,Huilongda Industrial Park,Shuitian Private Industrial Park,Shiyan Street,Bao,an District.
-				Shenzhen  Guangdong  518101
-				CN
-
-60-70-72   (hex)		SHENZHEN HONGDE SMART LINK TECHNOLOGY CO., LTD
-607072     (base 16)		SHENZHEN HONGDE SMART LINK TECHNOLOGY CO., LTD
-				Fu Qian Road, Longhua district
-				ShenZhen  GuangDong province   518000
-				CN
-
-DC-B7-FC   (hex)		Alps Electric (Ireland) Ltd
-DCB7FC     (base 16)		Alps Electric (Ireland) Ltd
-				MOUNT LEADER INDUSTRIAL ESTATE
-				MILLSTREET  CO. CORK  P51 XC56
-				IE
-
-AC-FA-A5   (hex)		digitron
-ACFAA5     (base 16)		digitron
-				tehnopark A -701, 697 PanGyo-ro, Bundong 
-				Seongnam  GyeongGiDO  13511
-				KR
-
-78-C9-5E   (hex)		Midmark RTLS 
-78C95E     (base 16)		Midmark RTLS 
-				2600 Millercreek Rd
-				Traverse City  MI  49684
-				US
-
-20-CD-6E   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-20CD6E     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-08-93-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-089356     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-07-89   (hex)		Allradio Co., Ltd
-000789     (base 16)		Allradio Co., Ltd
-				76, Deokcheon-ro 34beon-gil, Manan-gu
-				Anyang-si,Gyeonggi-do  Republic of Korea  430-803
-				KR
-
-6C-14-6E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C146E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-E9-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-44E968     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-DC-4A-9E   (hex)		IEEE Registration Authority
-DC4A9E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E0-C3-77   (hex)		Samsung Electronics Co.,Ltd
-E0C377     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-4C-FB-F4   (hex)		Optimal Audio Ltd
-4CFBF4     (base 16)		Optimal Audio Ltd
-				Century Point, Halifax Rd
-				High Wycombe    HP12 3SL
-				GB
-
-84-60-82   (hex)		Private
-846082     (base 16)		Private
-
-64-03-7F   (hex)		Samsung Electronics Co.,Ltd
-64037F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-9D-02   (hex)		Samsung Electronics Co.,Ltd
-B49D02     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-9F-F5   (hex)		Samsung Electronics Co.,Ltd
-809FF5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-79-24   (hex)		Huawei Device Co., Ltd.
-647924     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D8-CC-98   (hex)		Huawei Device Co., Ltd.
-D8CC98     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B8-87-6E   (hex)		Yandex Services AG
-B8876E     (base 16)		Yandex Services AG
-				Werftestrasse 4, 
-				Luzern    6005
-				CH
-
-F8-6D-73   (hex)		Zengge Co., Limited
-F86D73     (base 16)		Zengge Co., Limited
-				3/F, B Building, Second Laowei Industrial Zone, Longhua District
-				Shenzhen  Guangdong  518109
-				CN
-
-58-86-94   (hex)		EFM Networks
-588694     (base 16)		EFM Networks
-				6F, Benposra II 1197-1 Bojeong Giheung Gu
-				Yong In  Kyunggi do  446913
-				KR
-
-AC-37-28   (hex)		Taicang T&W Electronics
-AC3728     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-BC-99-30   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC9930     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-68-E7   (hex)		Espressif Inc.
-E868E7     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-D0-BC-C1   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-D0BCC1     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-6C-E8-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6CE874     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-69-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C469F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-94-35   (hex)		ARRIS Group, Inc.
-C09435     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-18-B6-CC   (hex)		We Corporation Inc.
-18B6CC     (base 16)		We Corporation Inc.
-				201, 33, Deokcheon-ro, Manan-gu
-				Anyang-si  Gyeonggi-do  14088
-				KR
-
-F8-5E-42   (hex)		Technicolor CH USA Inc.
-F85E42     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-30-A0-23   (hex)		ROCK PATH S.R.L
-30A023     (base 16)		ROCK PATH S.R.L
-				Via Federico Borromeo 2,  20017 Rho (MI), Italy
-				Milan    20017
-				IT
-
-E8-48-B8   (hex)		TP-Link Corporation Limited
-E848B8     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-78-CB-2C   (hex)		Join Digital, Inc.
-78CB2C     (base 16)		Join Digital, Inc.
-				75 E Santa Clara St., 6th Floor
-				San Jose  CA  95113
-				US
-
-30-9E-1D   (hex)		OHSUNG
-309E1D     (base 16)		OHSUNG
-				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
-				GUMI  GYEONG BUK  730-030
-				KR
-
-68-79-12   (hex)		IEEE Registration Authority
-687912     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-EC-64-88   (hex)		Honor Device Co., Ltd.
-EC6488     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-74-D6-CB   (hex)		New H3C Technologies Co., Ltd
-74D6CB     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-0C-3A-FA   (hex)		New H3C Technologies Co., Ltd
-0C3AFA     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-28-3B-82   (hex)		D-Link International
-283B82     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-0C-B6-D2   (hex)		D-Link International
-0CB6D2     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-60-BE-C4   (hex)		Apple, Inc.
-60BEC4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-B1-DD   (hex)		Apple, Inc.
-F8B1DD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-66-5A   (hex)		Apple, Inc.
-F8665A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-81-7E   (hex)		Apple, Inc.
-A8817E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-47-6E   (hex)		IEEE Registration Authority
-8C476E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-48-70-1E   (hex)		Texas Instruments
-48701E     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-E8-C3-20   (hex)		Austco Marketing & Service (USA) ltd.
-E8C320     (base 16)		Austco Marketing & Service (USA) ltd.
-				9155 Sterling St Unit 100
-				Irving  TX  75063
-				US
-
-AC-33-28   (hex)		Huawei Device Co., Ltd.
-AC3328     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-23-06   (hex)		ALPSALPINE CO,.LTD
-002306     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi,
-				Soma-city,  Fukushima-pref.,  976-8501
-				JP
-
-00-24-33   (hex)		ALPSALPINE CO,.LTD
-002433     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi,
-				Soma-city,  Fukushima-pref.,  976-8501
-				JP
-
-9C-8D-7C   (hex)		ALPSALPINE CO,.LTD
-9C8D7C     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				Kakuda  Miyagi-Pref  981-1595
-				JP
-
-00-16-FE   (hex)		ALPSALPINE CO,.LTD
-0016FE     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi,
-				Soma-city,  Fukushima-pref.,  976-8501
-				JP
-
-00-19-C1   (hex)		ALPSALPINE CO,.LTD
-0019C1     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi,
-				Soma-city,  Fukushima-pref.,  976-8501
-				JP
-
-D4-76-A0   (hex)		Fortinet, Inc.
-D476A0     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale    94086
-				US
-
-80-B9-7A   (hex)		eero inc.
-80B97A     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-BC-75-36   (hex)		ALPSALPINE CO,.LTD
-BC7536     (base 16)		ALPSALPINE CO,.LTD
-				nishida  6-1 
-				Kakuda-City  Miyagi-Pref  981-1595
-				JP
-
-58-16-D7   (hex)		ALPSALPINE CO,.LTD
-5816D7     (base 16)		ALPSALPINE CO,.LTD
-				nishida  6-1 
-				Kakuda-City  Miyagi-Pref  981-1595
-				JP
-
-E0-75-0A   (hex)		ALPSALPINE CO,.LTD
-E0750A     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				kakuda-City    981-1595
-				US
-
-E0-AE-5E   (hex)		ALPSALPINE CO,.LTD
-E0AE5E     (base 16)		ALPSALPINE CO,.LTD
-				6-3-36 Furukawanakazato,
-				Osaki  Miyagi-pref  989-6181
-				JP
-
-60-8D-26   (hex)		Arcadyan Corporation
-608D26     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-B4-EC-02   (hex)		ALPSALPINE CO,.LTD
-B4EC02     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				Kakuda  Miyagi-Pref  981-1595
-				JP
-
-E4-27-61   (hex)		Honor Device Co., Ltd.
-E42761     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-8C-F3-19   (hex)		Siemens Industrial Automation Products Ltd., Chengdu
-8CF319     (base 16)		Siemens Industrial Automation Products Ltd., Chengdu
-				Tianyuan Road No.99, High Tech Zone West
-				Chengdu  Sichuan Province  611731 
-				CN
-
-1C-39-29   (hex)		OHSUNG
-1C3929     (base 16)		OHSUNG
-				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
-				GUMI  GYEONG BUK  730-030
-				KR
-
-E4-D3-AA   (hex)		FUJITSU CONNECTED TECHNOLOGIES LIMITED
-E4D3AA     (base 16)		FUJITSU CONNECTED TECHNOLOGIES LIMITED
-				Sanki Yamato Building, 7-10-1 Chuorinkan
-				Yamato  Kanagawa  242-8588
-				JP
-
-C8-A4-0D   (hex)		Cooler Master Technology Inc
-C8A40D     (base 16)		Cooler Master Technology Inc
-				8F., No. 788-1, Zhongzheng Rd., Zhonghe Dist.
-				New Taipei City  New Taipei City  23586
-				TW
-
-38-42-0B   (hex)		Sonos, Inc.
-38420B     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-C8-3A-6B   (hex)		Roku, Inc
-C83A6B     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-A4-53-EE   (hex)		IEEE Registration Authority
-A453EE     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-49-62   (hex)		Roku, Inc
-8C4962     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-E0-2E-3F   (hex)		Huawei Device Co., Ltd.
-E02E3F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-BF-60   (hex)		TECNO MOBILE LIMITED
-C4BF60     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-D0-40-EF   (hex)		Murata Manufacturing Co., Ltd.
-D040EF     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-8C-8C-AA   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-8C8CAA     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-90-CC-DF   (hex)		Intel Corporate
-90CCDF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-08-5B-D6   (hex)		Intel Corporate
-085BD6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-B4-0E-DE   (hex)		Intel Corporate
-B40EDE     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E0-2B-E9   (hex)		Intel Corporate
-E02BE9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-BC-9A-53   (hex)		Huawei Device Co., Ltd.
-BC9A53     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-27-27   (hex)		Huawei Device Co., Ltd.
-DC2727     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F0-42-F5   (hex)		Huawei Device Co., Ltd.
-F042F5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-4C-11-54   (hex)		Mobiwire Mobiles (NingBo) Co., LTD
-4C1154     (base 16)		Mobiwire Mobiles (NingBo) Co., LTD
-				No.999 Dacheng East Road, Fenghua District, Ningbo City , Zhejiang Province, PRC
-				Ningbo  Zhejiang  315500
-				CN
-
-C8-E2-65   (hex)		Intel Corporate
-C8E265     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-8C-8D-28   (hex)		Intel Corporate
-8C8D28     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-D0-56-BF   (hex)		AMOSENSE
-D056BF     (base 16)		AMOSENSE
-				Narutu street 56
-				SEOUL  Sucho gu  06527
-				KR
-
-B4-B5-B6   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-B4B5B6     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-04-7A-0B   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-047A0B     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-90-0F-0C   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-900F0C     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-F0-A2-25   (hex)		Amazon Technologies Inc.
-F0A225     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-F0-4F-7C   (hex)		Amazon Technologies Inc.
-F04F7C     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-BC-9D-42   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-BC9D42     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-4C-75-25   (hex)		Espressif Inc.
-4C7525     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-74-04-F0   (hex)		Mobiwire Mobiles (NingBo) Co., LTD
-7404F0     (base 16)		Mobiwire Mobiles (NingBo) Co., LTD
-				No.999 Dacheng East Road, Fenghua District, Ningbo City , Zhejiang Province, PRC
-				Ningbo  Zhejiang  315500
-				CN
-
-24-0B-88   (hex)		Taicang T&W Electronics
-240B88     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-0C-93-8F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-0C938F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-78-F9-B4   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-78F9B4     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-60-A8-FE   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-60A8FE     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-D8-EF-CD   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-D8EFCD     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-6C-F7-12   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-6CF712     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-EC-75-ED   (hex)		Citrix Systems, Inc.
-EC75ED     (base 16)		Citrix Systems, Inc.
-				851 W Cypress Creek Rd
-				Fort Lauderdale  FL  33309
-				US
-
-5C-BD-9A   (hex)		Huawei Device Co., Ltd.
-5CBD9A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-8C-DE-E6   (hex)		Samsung Electronics Co.,Ltd
-8CDEE6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-EC-81   (hex)		Samsung Electronics Co.,Ltd
-10EC81     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-5D-83   (hex)		Samsung Electronics Co.,Ltd
-C45D83     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-5C-A4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-5CA4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-14-A3-B4   (hex)		Huawei Device Co., Ltd.
-14A3B4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-9C-9C-1F   (hex)		Espressif Inc.
-9C9C1F     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-D8-09-D6   (hex)		ZEXELON CO., LTD.
-D809D6     (base 16)		ZEXELON CO., LTD.
-				195 Tonohiraga,
-				Matsudo-City  Chiba  270-0004
-				JP
-
-E8-6D-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E86DE9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-46-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-144658     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-BE-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-58BE72     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-8F-FE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-108FFE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-D7-CE   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-BCD7CE     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District, Hangzhou, Zhejiang
-				Hangzhou  Zhejiang  310000
-				CN
-
-9C-A5-70   (hex)		eero inc.
-9CA570     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-A0-41-2D   (hex)		Lansen Systems AB
-A0412D     (base 16)		Lansen Systems AB
-				Skallebackavägen 3
-				Halmstad    30241
-				SE
-
-C4-39-60   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-C43960     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-98-BE-DC   (hex)		Honor Device Co., Ltd.
-98BEDC     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-44-B6-BE   (hex)		Cisco Systems, Inc
-44B6BE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-A0-FB   (hex)		Toray Engineering D Solutions Co., Ltd.
-00A0FB     (base 16)		Toray Engineering D Solutions Co., Ltd.
-				1-45, OE 1-CHOME
-				OTSU CITY    520-2141
-				JP
-
-70-61-BE   (hex)		Wistron Neweb Corporation
-7061BE     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-34-8A-12   (hex)		Aruba, a Hewlett Packard Enterprise Company
-348A12     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-84-D3-43   (hex)		Calix Inc.
-84D343     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-D8-47-BB   (hex)		Huawei Device Co., Ltd.
-D847BB     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-14-11   (hex)		Apple, Inc.
-C41411     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-C9-5D   (hex)		Apple, Inc.
-CCC95D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-B5-D3   (hex)		SecuWorks
-38B5D3     (base 16)		SecuWorks
-				#709, 218 Gajeong-ro
-				Yuseong -gu  Daejeon  34129
-				KR
-
-34-31-8F   (hex)		Apple, Inc.
-34318F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-6F-D8   (hex)		IEEE Registration Authority
-446FD8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C8-94-02   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-C89402     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-7C-B9-4C   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
-7CB94C     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
-				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
-				Nanjing  Jiangsu  211800
-				CN
-
-DC-15-C8   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-DC15C8     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-6C-D6-30   (hex)		Rootous System Co.,Ltd
-6CD630     (base 16)		Rootous System Co.,Ltd
-				KT B/D 4Floor, 100, Ahopgeori-gil
-				Yeonseo-myeon  Sejong-si  30049
-				KR
-
-B8-07-56   (hex)		Cisco Meraki
-B80756     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-C8-33-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C833E5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-56-FE   (hex)		Cisco Meraki
-3456FE     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-B8-44-AE   (hex)		TCT mobile ltd
-B844AE     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-E4-F7-5B   (hex)		ARRIS Group, Inc.
-E4F75B     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-79-0A   (hex)		ARRIS Group, Inc.
-F8790A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-0C-CF-89   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-0CCF89     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-0C-8C-69   (hex)		Shenzhen elink smart Co., ltd
-0C8C69     (base 16)		Shenzhen elink smart Co., ltd
-				Floor 2,Building A , Hongtian Xinfengze Industrial   Park Huang Pu Community , Xin Qiao District ,Baoan Area
-				shenzhen  Guangdong Province  518101
-				CN
-
-D8-BB-C1   (hex)		Micro-Star INTL CO., LTD.
-D8BBC1     (base 16)		Micro-Star INTL CO., LTD.
-				No.69, Lide St.,
-				New Taipei City  Taiwan  235
-				TW
-
-AC-5A-FC   (hex)		Intel Corporate
-AC5AFC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-1C-93-7C   (hex)		ARRIS Group, Inc.
-1C937C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-58-FC-20   (hex)		Altice Labs S.A.
-58FC20     (base 16)		Altice Labs S.A.
-				NIF 504705610, Rua Eng. José Ferreira Pinto Basto
-				Aveiro    3810-106
-				PT
-
-58-FD-20   (hex)		Systemhouse Solutions AB
-58FD20     (base 16)		Systemhouse Solutions AB
-				Mikrofonvagen 28
-				STOCKHOLM    126 81
-				SE
-
-04-D6-F4   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-04D6F4     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-04-90-81   (hex)		Pensando Systems, Inc.
-049081     (base 16)		Pensando Systems, Inc.
-				570 Alder Drive
-				Milpitas  CA  95035
-				US
-
-4C-79-6E   (hex)		Intel Corporate
-4C796E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-98-AD-1D   (hex)		Huawei Device Co., Ltd.
-98AD1D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F8-AA-3F   (hex)		DWnet Technologies(Suzhou) Corporation
-F8AA3F     (base 16)		DWnet Technologies(Suzhou) Corporation
-				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
-				Suzhou    21500
-				CN
-
-00-68-2B   (hex)		Huawei Device Co., Ltd.
-00682B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F0-9E-4A   (hex)		Intel Corporate
-F09E4A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-F0-77-C3   (hex)		Intel Corporate
-F077C3     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-24-9A-D8   (hex)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
-249AD8     (base 16)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
-				309, 3th Floor, No.16, Yun Ding North Road, Huli District
-				xiamen  Fujian  361015
-				CN
-
-D8-5E-D3   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-D85ED3     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-00-E4-21   (hex)		Sony Interactive Entertainment Inc.
-00E421     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-CC-DB-04   (hex)		DataRemote Inc.
-CCDB04     (base 16)		DataRemote Inc.
-				18001 Old Cutler Rd. Suite 600
-				Palmetto Bay  FL  33157
-				US
-
-E8-9F-39   (hex)		Nokia
-E89F39     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-34-73-5A   (hex)		Dell Inc.
-34735A     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-98-1A-35   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-981A35     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-34-28   (hex)		Microchip Technology Inc.
-803428     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-28-EF-01   (hex)		Amazon Technologies Inc.
-28EF01     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-B0-22-7A   (hex)		HP Inc.
-B0227A     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-60-A7-51   (hex)		Huawei Device Co., Ltd.
-60A751     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-10-2B-41   (hex)		Samsung Electronics Co.,Ltd
-102B41     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-34-4A-C3   (hex)		HuNan ZiKun Information Technology CO., Ltd
-344AC3     (base 16)		HuNan ZiKun Information Technology CO., Ltd
-				101-8, 1st Floor, Juxing Venture Base, No. 8 Lujing Road, GaoXin Development District
-				Changsha City  Hunan Province  410000
-				CN
-
-68-2D-83   (hex)		SHENZHEN DINGHE COMMUNICATION COMPANY
-682D83     (base 16)		SHENZHEN DINGHE COMMUNICATION COMPANY
-				ROOM 1802, BAOYUNDA WULIU INFORMATION BUILDING
-				SHENZHEN  GUANGDONG  518101
-				CN
-
-A8-43-97   (hex)		Innogrit Corporation
-A84397     (base 16)		Innogrit Corporation
-				1735 Technology Dr, Suite 620
-				San Jose  CA  95110
-				US
-
-D8-CD-2C   (hex)		WUXI NEIHUA NETWORK TECHNOLOGY CO., LTD
-D8CD2C     (base 16)		WUXI NEIHUA NETWORK TECHNOLOGY CO., LTD
-				16 Lexing Road, Xinwu  District
-				Wuxi  Jiangsu  214000
-				CN
-
-58-D3-91   (hex)		Quectel Wireless Solutions Co., Ltd.
-58D391     (base 16)		Quectel Wireless Solutions Co., Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-08-47-4C   (hex)		Nokia
-08474C     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-90-C1-19   (hex)		Nokia
-90C119     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-7C-F8-80   (hex)		Cisco Systems, Inc
-7CF880     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E4-05-F8   (hex)		Bytedance
-E405F8     (base 16)		Bytedance
-				E World Center,11 Zhongguancun Street Haidian Dist
-				Beijing City  Beijing  100102
-				CN
-
-F8-45-C4   (hex)		Shenzhen Netforward Micro-Electronic Co., Ltd.
-F845C4     (base 16)		Shenzhen Netforward Micro-Electronic Co., Ltd.
-				Room 611-2?6st Floor,Building 1, The Sunmax Technology Park, No 8 Keyuan Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-78-10-53   (hex)		China Mobile Group Device Co.,Ltd.
-781053     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-00-08-0C   (hex)		VDA Group S.p.a.
-00080C     (base 16)		VDA Group S.p.a.
-				Viale Lino Zanussi 3
-				Pordenone  Pordenone  33170
-				IT
-
-D0-97-FE   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-D097FE     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-84-3A-5B   (hex)		Inventec(Chongqing) Corporation
-843A5B     (base 16)		Inventec(Chongqing) Corporation
-				No.66 West District 2nd Rd, Shapingba District
-				Chongqing  Chongqing  401331
-				CN
-
-54-49-DF   (hex)		Peloton Interactive, Inc
-5449DF     (base 16)		Peloton Interactive, Inc
-				158 W 27th St, 4th Fl
-				New York  NY  10001
-				US
-
-18-2A-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-182A57     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-3E-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F83E95     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-12-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-481258     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-EB-46   (hex)		Google, Inc.
-D8EB46     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-2C-17-E0   (hex)		SYSTEMES ET TECHNOLOGIES IDENTIFICATION (STid)
-2C17E0     (base 16)		SYSTEMES ET TECHNOLOGIES IDENTIFICATION (STid)
-				20 Parc d’activités des Pradeaux
-				GREASQUE  Select State  F-13850
-				FR
-
-CC-32-96   (hex)		Huawei Device Co., Ltd.
-CC3296     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-CD-AC   (hex)		Espressif Inc.
-98CDAC     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-80-8A-F7   (hex)		Nanoleaf
-808AF7     (base 16)		Nanoleaf
-				100 Front Street East, 4th Floor
-				Toronto  Ontario  M5A 1E1
-				CA
-
-B0-3D-C2   (hex)		Wasp artificial intelligence(Shenzhen) Co.,ltd
-B03DC2     (base 16)		Wasp artificial intelligence(Shenzhen) Co.,ltd
-				A402,Block ABCD,Building 3,Phase 1,Tianan Yungu Industrial Park,Gangtou Comunity,Bantian Street,Longhua District,Shenzhen
-				Shenzhen  Select State  518000
-				CN
-
-C8-4D-34   (hex)		LIONS Taiwan Technology Inc.
-C84D34     (base 16)		LIONS Taiwan Technology Inc.
-				3F-2, 120, Sec. 2, Gongdao 5th Rd.
-				Hsinchu  Taiwan  30072
-				TW
-
-44-6F-F8   (hex)		Dyson Limited
-446FF8     (base 16)		Dyson Limited
-				Tetbury Hill
-				Malmesbury  Wiltshire  SN16 0RP
-				GB
-
-6C-1B-3F   (hex)		MiraeSignal Co., Ltd
-6C1B3F     (base 16)		MiraeSignal Co., Ltd
-				#701,C-dong Bundang Techno Park Pangyoro 744
-				Bundang-gu Sungnam-si  Kyungkido  13510
-				KR
-
-28-AF-FD   (hex)		Cisco Systems, Inc
-28AFFD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-76-13   (hex)		Ring LLC
-9C7613     (base 16)		Ring LLC
-				1523 26th St
-				Santa Monica  CA  90404
-				US
-
-44-9B-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-449BC1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-25-D2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-2025D2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-28-F4-9B   (hex)		LEETEK
-28F49B     (base 16)		LEETEK
-				Ojeong-ro, 47
-				Bucheon-si  Gyeonggi-do  14445
-				KR
-
-18-42-D4   (hex)		Wuhan Hosan Telecommunication Technology Co.,Ltd
-1842D4     (base 16)		Wuhan Hosan Telecommunication Technology Co.,Ltd
-				Fourth Floor,Building N,Quannengtong Shuangchuang Yuan,Gold-silver Lake Street,East West Lake District,
-				Wuhan  Hubei  430043
-				CN
-
-A8-63-7D   (hex)		D-Link International
-A8637D     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-2C-43-BE   (hex)		Sunnovo International Limited
-2C43BE     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-58-10-B7   (hex)		Infinix mobility limited
-5810B7     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-B0-24-91   (hex)		Huawei Device Co., Ltd.
-B02491     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-75-1A   (hex)		Huawei Device Co., Ltd.
-98751A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-91-80   (hex)		Apple, Inc.
-1C9180     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-B9-10   (hex)		Apple, Inc.
-4CB910     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-89-01   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B48901     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-92-5C   (hex)		Apple, Inc.
-E0925C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-15-3D   (hex)		Beijing Yaxunhongda Technology Co., Ltd.
-EC153D     (base 16)		Beijing Yaxunhongda Technology Co., Ltd.
-				East area,4th floor,No.5,Shangdi 5th Street Haidian District,Beijing 
-				Beijing  Beijing  100000
-				CN
-
-D8-A3-5C   (hex)		Samsung Electronics Co.,Ltd
-D8A35C     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-C0-92-96   (hex)		zte corporation
-C09296     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-50-E2-4E   (hex)		zte corporation
-50E24E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-4C-77-66   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-4C7766     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-78-E3-6D   (hex)		Espressif Inc.
-78E36D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-14-5A-FC   (hex)		Liteon Technology Corporation
-145AFC     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-1C-A0-EF   (hex)		IEEE Registration Authority
-1CA0EF     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-18-85   (hex)		Motorola Solutions Inc.
-001885     (base 16)		Motorola Solutions Inc.
-				500 W Monroe Street, Ste 4400
-				Chicago  IL  60661-3781
-				US
-
-D8-E7-2B   (hex)		NETSCOUT SYSTEMS INC
-D8E72B     (base 16)		NETSCOUT SYSTEMS INC
-				310 Littleton Road
-				Westford  MA  01886 
-				US
-
-18-BF-B3   (hex)		Samsung Electronics Co., Ltd., Memory Division
-18BFB3     (base 16)		Samsung Electronics Co., Ltd., Memory Division
-				1, Samsungjeonja-ro
-				Hwaseong-si  Gyeonggi-do  18448
-				KR
-
-2C-8D-B1   (hex)		Intel Corporate
-2C8DB1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-58-6C-25   (hex)		Intel Corporate
-586C25     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-08-2C-ED   (hex)		Technity Solutions Inc.
-082CED     (base 16)		Technity Solutions Inc.
-				100 West Beaver Creek Rd, Unit 13
-				Richmond Hill  Ontario  L4B 1H4
-				CA
-
-34-86-5D   (hex)		Espressif Inc.
-34865D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-B4-E3-F9   (hex)		Silicon Laboratories
-B4E3F9     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-A4-9B-CD   (hex)		Cisco Systems, Inc
-A49BCD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-04-27-28   (hex)		Microsoft Corporation
-042728     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-20-66-CF   (hex)		FREEBOX SAS
-2066CF     (base 16)		FREEBOX SAS
-				16 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-2C-C8-1B   (hex)		Routerboard.com
-2CC81B     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-88-E0-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88E056     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-7D-33   (hex)		Huawei Device Co., Ltd.
-D07D33     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C0-E1-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0E1BE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-35-E5   (hex)		EM Microelectronic
-D035E5     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-90-96-F3   (hex)		BUFFALO.INC
-9096F3     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-54-0E-58   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-540E58     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-5C-64-8E   (hex)		Zyxel Communications Corporation
-5C648E     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-30-E3-96   (hex)		Huawei Device Co., Ltd.
-30E396     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-A1-51   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-C4A151     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-78-47-E3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-7847E3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY, 
-				CHENGDU  SICHUAN  611330
-				CN
-
-EC-F8-EB   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-ECF8EB     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-F0-92-B4   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-F092B4     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-F4-4E-38   (hex)		Olibra LLC
-F44E38     (base 16)		Olibra LLC
-				45 legin dr
-				creskill  NJ  07626
-				US
-
-2C-63-73   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-2C6373     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-A0-D7-22   (hex)		Samsung Electronics Co.,Ltd
-A0D722     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-49-B0   (hex)		Samsung Electronics Co.,Ltd
-5049B0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E8-05-DC   (hex)		Verifone Inc.
-E805DC     (base 16)		Verifone Inc.
-				2560 North First Street, Suite 220
-				San Jose  CA  95131
-				US
-
-10-7B-CE   (hex)		Nokia
-107BCE     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-C8-05-9E   (hex)		Hefei Symboltek Co.,Ltd
-C8059E     (base 16)		Hefei Symboltek Co.,Ltd
-				Standard factory building 2 layer,Tianmen Lake 1#,No.36 Fairview Avenue District Econmic Development Zone Hefei, Anhui 
-				Hefei  Anhui  230601
-				CN
-
-34-FC-A1   (hex)		Micronet union Technology(Chengdu)Co., Ltd.
-34FCA1     (base 16)		Micronet union Technology(Chengdu)Co., Ltd.
-				No.502, Building 5, No. 528, Yuefei Road, Shibantan Street, Xindu District
-				Chengdu  Sichuan  610000
-				CN
-
-28-97-B8   (hex)		myenergi Ltd
-2897B8     (base 16)		myenergi Ltd
-				Church View Business Centre, Binbrook
-				Market Rasen  Lincolnshire  LN8 6BY
-				GB
-
-48-06-2B   (hex)		Private
-48062B     (base 16)		Private
-
-B0-A7-B9   (hex)		TP-Link Corporation Limited
-B0A7B9     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-6C-5A-B0   (hex)		TP-Link Corporation Limited
-6C5AB0     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-4C-F5-DC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-4CF5DC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-60-E6-F0   (hex)		Wistron Neweb Corporation
-60E6F0     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-20-1F-3B   (hex)		Google, Inc.
-201F3B     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-B8-25-B5   (hex)		Trakm8 Ltd
-B825B5     (base 16)		Trakm8 Ltd
-				4 Roman Park, Roman Way
-				Coleshill   West Midlands  B46 1HG
-				GB
-
-20-D2-76   (hex)		ITEL MOBILE LIMITED
-20D276     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-08-A8-42   (hex)		Huawei Device Co., Ltd.
-08A842     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C8-F5-D6   (hex)		IEEE Registration Authority
-C8F5D6     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-40-58-99   (hex)		Logitech Far East
-405899     (base 16)		Logitech Far East
-				#2 Creation Rd. 4,
-				Hsinchu    300
-				TW
-
-8C-4D-EA   (hex)		Cerio Corporation
-8C4DEA     (base 16)		Cerio Corporation
-				4F.-3., No.192, Sec. 2, Zhongxing Rd., Xindian Dist.
-				New Taipei City    231
-				TW
-
-04-B9-E3   (hex)		Samsung Electronics Co.,Ltd
-04B9E3     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-98-43-FA   (hex)		Intel Corporate
-9843FA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-94-AA-0A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-94AA0A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-7C-F4-62   (hex)		BEIJING HUAWOO TECHNOLOGIES CO.LTD
-7CF462     (base 16)		BEIJING HUAWOO TECHNOLOGIES CO.LTD
-				A411-3, floor 3, block A, 9 Shangdi 3rd Street, Haidian District, Beijing
-				beijing    100094
-				CN
-
-C4-5E-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C45E5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-5C-0A   (hex)		Cisco Systems, Inc
-E85C0A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-6D-C1   (hex)		Intel Corporate
-2C6DC1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-70-B9-50   (hex)		Texas Instruments
-70B950     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D0-9F-D9   (hex)		IEEE Registration Authority
-D09FD9     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-54-C2-50   (hex)		Iskratel d.o.o.
-54C250     (base 16)		Iskratel d.o.o.
-				Ljubljanska cesta 24a
-				Kranj    4000
-				SI
-
-00-FA-B6   (hex)		Kontakt Micro-Location Sp z o.o.
-00FAB6     (base 16)		Kontakt Micro-Location Sp z o.o.
-				Stoczniowcow 3
-				Krakow    30-709
-				PL
-
-D0-17-69   (hex)		Murata Manufacturing Co., Ltd.
-D01769     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-A0-B0-86   (hex)		Hirschmann Automation and Control GmbH
-A0B086     (base 16)		Hirschmann Automation and Control GmbH
-				Stuttgarter Straße 45-51
-				Neckartenzlingen    D-72654
-				DE
-
-30-B3-46   (hex)		CJSC NORSI-TRANS
-30B346     (base 16)		CJSC NORSI-TRANS
-				B.Novodmitrovskaya, 12/15 floor 2 r. 36
-				Moscow  MOSCOW  127015
-				RU
-
-20-C1-9B   (hex)		Intel Corporate
-20C19B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-A8-55-6A   (hex)		3S System Technology Inc.
-A8556A     (base 16)		3S System Technology Inc.
-				6F, No. 5, Ln. 16, Sec. 2, Sichuan Rd., Banqiao Dist.,
-				New Taipei City    220620
-				TW
-
-00-0B-3A   (hex)		PESA
-000B3A     (base 16)		PESA
-				103 Quality Circle, Suite 210
-				Huntsville  AL  35806
-				US
-
-5C-E4-2A   (hex)		Intel Corporate
-5CE42A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-74-E2   (hex)		IEEE Registration Authority
-1874E2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F0-C8-14   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-F0C814     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-CC-3A-DF   (hex)		Neptune Technology Group Inc.
-CC3ADF     (base 16)		Neptune Technology Group Inc.
-				1600 AL Highway 229 S
-				Tallassee  AL  36078
-				US
-
-3C-62-F0   (hex)		Sercomm Corporation.
-3C62F0     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-98-3B-67   (hex)		DWnet Technologies(Suzhou) Corporation
-983B67     (base 16)		DWnet Technologies(Suzhou) Corporation
-				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
-				Suzhou    21500
-				CN
-
-58-35-5D   (hex)		Huawei Device Co., Ltd.
-58355D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-AC-7E-01   (hex)		Huawei Device Co., Ltd.
-AC7E01     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-6C-93-92   (hex)		BEKO Technologies GmbH
-6C9392     (base 16)		BEKO Technologies GmbH
-				Im Taubental 7
-				Neuss  Nordrhein-Westfalen  41468
-				DE
-
-FC-8A-3D   (hex)		zte corporation
-FC8A3D     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F8-F0-82   (hex)		NAGTECH LLC
-F8F082     (base 16)		NAGTECH LLC
-				12A, Krasnolesya Str., off 507
-				Ekaterinburg  Sverdlovskaya oblast  620110
-				RU
-
-8C-1F-64   (hex)		IEEE Registration Authority
-8C1F64     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-08-5A-11   (hex)		D-Link International
-085A11     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-50-32-5F   (hex)		Silicon Laboratories
-50325F     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-F4-7B-09   (hex)		Intel Corporate
-F47B09     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E8-78-29   (hex)		IEEE Registration Authority
-E87829     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-EC-94-68   (hex)		META SYSTEM SPA 
-EC9468     (base 16)		META SYSTEM SPA 
-				VIA LAGHETTO 1
-				MORNAGO, VARESE  ITALY  21020
-				IT
-
-1C-41-90   (hex)		Universal Electronics, Inc.
-1C4190     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-64-C4-03   (hex)		Quectel Wireless Solutions Co.,Ltd.
-64C403     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-A0-E4-53   (hex)		Sony Corporation
-A0E453     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-30-A8-DB   (hex)		Sony Corporation
-30A8DB     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-84-8E-DF   (hex)		Sony Corporation
-848EDF     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-58-48-22   (hex)		Sony Corporation
-584822     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-C0-25-A5   (hex)		Dell Inc.
-C025A5     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-B4-C8-10   (hex)		Umpi srl
-B4C810     (base 16)		Umpi srl
-				Via Consolare Rimini-San Marino, 11
-				 Rimini    47923
-				IT
-
-48-5A-67   (hex)		Shaanxi Ruixun Electronic Information Technology Co., Ltd
-485A67     (base 16)		Shaanxi Ruixun Electronic Information Technology Co., Ltd
-				11th Floor, Building A, Xi 'an National Digital Publishing Base, No. 996, Tiangu 7th Road, Software New City, Xi 'an High-tech Zone, Shaanxi Province
-				Xi’an  Shaanxi  710000
-				CN
-
-18-00-2D   (hex)		Sony Corporation
-18002D     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-D0-51-62   (hex)		Sony Corporation
-D05162     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-90-C1-15   (hex)		Sony Corporation
-90C115     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-5C-B5-24   (hex)		Sony Corporation
-5CB524     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-58-17-0C   (hex)		Sony Corporation
-58170C     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-44-D5-CC   (hex)		Amazon Technologies Inc.
-44D5CC     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-9C-5C-F9   (hex)		Sony Corporation
-9C5CF9     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-84-C7-EA   (hex)		Sony Corporation
-84C7EA     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-38-78-62   (hex)		Sony Corporation
-387862     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-00-25-E7   (hex)		Sony Corporation
-0025E7     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-24-EF   (hex)		Sony Corporation
-0024EF     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-16-B8   (hex)		Sony Corporation
-0016B8     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-64-C3-94   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-64C394     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-5C-9A   (hex)		Apple, Inc.
-945C9A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-F3-9F   (hex)		Apple, Inc.
-00F39F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-39-A9   (hex)		Hongshan Information Science and Technology (HangZhou) Co.,Ltd.
-3039A9     (base 16)		Hongshan Information Science and Technology (HangZhou) Co.,Ltd.
-				32 / F, Yuesheng International Center, Pinglan Road, Xiaoshan District, Hangzhou, Zhejiang Province
-				Hangzhou  Zhejiang Province  311215
-				CN
-
-1C-57-3E   (hex)		Altice Labs S.A.
-1C573E     (base 16)		Altice Labs S.A.
-				NIF 504705610, Rua Eng. José Ferreira Pinto Basto
-				Aveiro    3810-106
-				PT
-
-D0-16-7C   (hex)		eero inc.
-D0167C     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-A8-5B-36   (hex)		IEEE Registration Authority
-A85B36     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-4C-77-CB   (hex)		Intel Corporate
-4C77CB     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-9C-6B-F0   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
-9C6BF0     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
-				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
-				Shenzhen  Nanshan District  518000
-				CN
-
-44-95-3B   (hex)		RLTech India Private Limited
-44953B     (base 16)		RLTech India Private Limited
-				C-2, Sector-85, Noida
-				Gautam Buddha Nagar  Uttar Pradesh  201301
-				IN
-
-84-14-4D   (hex)		Intel Corporate
-84144D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-20-B8-68   (hex)		Motorola Mobility LLC, a Lenovo Company
-20B868     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-28-9C-6E   (hex)		Shanghai High-Flying Electronics  Technology Co., Ltd
-289C6E     (base 16)		Shanghai High-Flying Electronics  Technology Co., Ltd
-				Room 1002,#1Building,No.3000 Longdong Avenue,Pudong
-				Shanghai  Shanghai  201202
-				CN
-
-84-F7-03   (hex)		Espressif Inc.
-84F703     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-2C-11-65   (hex)		Silicon Laboratories
-2C1165     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-B4-1C-AB   (hex)		ICR, inc.
-B41CAB     (base 16)		ICR, inc.
-				6200 S Main St Suite 200
-				Aurora  CO  80016
-				US
-
-1C-2A-8B   (hex)		Nokia
-1C2A8B     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-94-5A-FC   (hex)		Amazon Technologies Inc.
-945AFC     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-BC-D7-D4   (hex)		Roku, Inc
-BCD7D4     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-AC-0B-FB   (hex)		Espressif Inc.
-AC0BFB     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-DC-ED-83   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-DCED83     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-00-D7-6D   (hex)		Intel Corporate
-00D76D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-50-8E-49   (hex)		Xiaomi Communications Co Ltd
-508E49     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-8C-AA-CE   (hex)		Xiaomi Communications Co Ltd
-8CAACE     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-70-5F-A3   (hex)		Xiaomi Communications Co Ltd
-705FA3     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-FC-D9-08   (hex)		Xiaomi Communications Co Ltd
-FCD908     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-30-B0-37   (hex)		New H3C Technologies Co., Ltd
-30B037     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-FC-12-2C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC122C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-33-29   (hex)		Sony Interactive Entertainment Inc.
-BC3329     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-A8-89-40   (hex)		Huawei Device Co., Ltd.
-A88940     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-CC-31-2A   (hex)		HUIZHOU TCL COMMUNICATION ELECTRON CO.,LTD
-CC312A     (base 16)		HUIZHOU TCL COMMUNICATION ELECTRON CO.,LTD
-				2nd Floor, Building 1,Dongnan Jiahao Industrial Park,NO.3 Donghe South Road, Dongxing District,Dongjiang high-tech Zone
-				Huizhou  Guangdong  516055
-				CN
-
-DC-B7-2E   (hex)		Xiaomi Communications Co Ltd
-DCB72E     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-38-B8-00   (hex)		Wistron Neweb Corporation
-38B800     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-6C-D1-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6CD1E5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-0E-B8   (hex)		LG Electronics
-300EB8     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-0C-0E-76   (hex)		D-Link International
-0C0E76     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-70-3E-97   (hex)		Iton Technology Corp.
-703E97     (base 16)		Iton Technology Corp.
-				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
-				Shenzhen  Guangdong   518116
-				CN
-
-10-47-38   (hex)		Nokia Shanghai Bell Co., Ltd.
-104738     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-6C-11-B3   (hex)		Wu Qi Technologies,Inc.
-6C11B3     (base 16)		Wu Qi Technologies,Inc.
-				14/F, 107 Middle Road, Xiantao Big Data Valley, Yubei District
-				Chongqing  Chongqing  401120
-				CN
-
-A0-94-1A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A0941A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-1C-2C-E0   (hex)		Shanghai  Mountain View Silicon
-1C2CE0     (base 16)		Shanghai  Mountain View Silicon
-				Suite 4C, Building 3,  1238 Zhangjiang Rd., Pudong
-				Shanghai    201210
-				CN
-
-00-0C-EC   (hex)		Orolia USA
-000CEC     (base 16)		Orolia USA
-				45 Becker Road  Suite A
-				West Henrietta  NY  14586
-				US
-
-08-FA-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-08FA28     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-B1-9C   (hex)		AltoBeam (China) Inc.
-F4B19C     (base 16)		AltoBeam (China) Inc.
-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
-				Beijing  Beijing  100083
-				CN
-
-A8-D0-81   (hex)		Huawei Device Co., Ltd.
-A8D081     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-74-0C-EE   (hex)		Huawei Device Co., Ltd.
-740CEE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-6C-B4-FD   (hex)		Huawei Device Co., Ltd.
-6CB4FD     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-0E-9B   (hex)		ISHIDA MEDICAL CO., LTD.
-640E9B     (base 16)		ISHIDA MEDICAL CO., LTD.
-				60-1 Shogoin Rengezocho, Sakyo-Ku
-				Kyoto-Shi  Kyoto-Fu  606-8357
-				JP
-
-24-F6-03   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24F603     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-CA-85   (hex)		NEC Corporation
-F8CA85     (base 16)		NEC Corporation
-				7-1 Shiba 5-chome
-				Minato-Ku  Tokyo  108-8001
-				JP
-
-1C-9D-C2   (hex)		Espressif Inc.
-1C9DC2     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-C4-EA-1D   (hex)		Technicolor Delivery Technologies Belgium NV
-C4EA1D     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-A4-91-B1   (hex)		Technicolor Delivery Technologies Belgium NV
-A491B1     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-D4-35-1D   (hex)		Technicolor Delivery Technologies Belgium NV
-D4351D     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-EC-C1-AB   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
-ECC1AB     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-EC-93-7D   (hex)		Technicolor CH USA Inc.
-EC937D     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-18-FC-26   (hex)		Qorvo International Pte. Ltd.
-18FC26     (base 16)		Qorvo International Pte. Ltd.
-				1 Changi Business Park Avenue 1
-				#04-01    486058
-				SG
-
-58-98-35   (hex)		Technicolor Delivery Technologies Belgium NV
-589835     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-90-6A-94   (hex)		hangzhou huacheng network technology co., ltd
-906A94     (base 16)		hangzhou huacheng network technology co., ltd
-				Room 412, Building 2, No.2930, Nanhuan Road, Binjiang District
-				hangzhou  zhejiang  310052
-				CN
-
-10-0C-29   (hex)		Shenzhen NORCO lntelligent Technology Co.,Ltd
-100C29     (base 16)		Shenzhen NORCO lntelligent Technology Co.,Ltd
-				6th Fl., Bldg. B, Shum Yip U Centre, Hangcheng Sub-district, Baoan District, Shenzhen
-				Shenzhen    518126
-				CN
-
-28-36-13   (hex)		IEEE Registration Authority
-283613     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-78-52-4A   (hex)		Optonic GmbH
-78524A     (base 16)		Optonic GmbH
-				Zollhallenstr. 11
-				Freiburg    79106
-				DE
-
-00-CE-30   (hex)		Express LUCK Industrial Ltd.
-00CE30     (base 16)		Express LUCK Industrial Ltd.
-				No. 88, Baotongnan Road, Xikeng, Yuanshan Street, Longgang District
-				Shenzhen  Guangdong  518100
-				CN
-
-C4-6E-33   (hex)		Zhong Ge Smart Technology Co., Ltd.
-C46E33     (base 16)		Zhong Ge Smart Technology Co., Ltd.
-				Zhong Ge Smart Technology Co., Ltd
-				Shanghai    201199
-				CN
-
-5C-83-82   (hex)		Nokia
-5C8382     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-74-32-C2   (hex)		KYOLIS
-7432C2     (base 16)		KYOLIS
-				2 RUE DE LA RENAISSANCE
-				ANTONY    92160
-				FR
-
-44-EB-2E   (hex)		ALPSALPINE CO .,LTD
-44EB2E     (base 16)		ALPSALPINE CO .,LTD
-				nishida 6-1
-				kakuda-City  Miyagi-Pref  981-1595
-				JP
-
-0C-AA-EE   (hex)		Ansjer Electronics Co., Ltd.
-0CAAEE     (base 16)		Ansjer Electronics Co., Ltd.
-				4 Bldg., Pinglan Indl. Park, Nanping,
-				Zhuhai  Guangdong  519060
-				CN
-
-FC-A6-4C   (hex)		Alibaba cloud computing Co., Ltd
-FCA64C     (base 16)		Alibaba cloud computing Co., Ltd
-				No.12, Zhuantang science and technology economic block, Xihu District
-				Hangzhou  Zhejiang  310024
-				CN
-
-E0-69-BA   (hex)		Cisco Systems, Inc
-E069BA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-36-DA   (hex)		Cisco Systems, Inc
-2436DA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-37-A5   (hex)		Apple, Inc.
-2037A5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-B5-4F   (hex)		Apple, Inc.
-DCB54F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-EB-D6   (hex)		Espressif Inc.
-4CEBD6     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-00-8A-76   (hex)		Apple, Inc.
-008A76     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-23-9C   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-F4239C     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-D8-A6-F0   (hex)		Wu Qi Technologies,Inc.
-D8A6F0     (base 16)		Wu Qi Technologies,Inc.
-				14/F, 107 Middle Road, Xiantao Big Data Valley, Yubei District
-				Chongqing  Chongqing  401120
-				CN
-
-08-E4-DF   (hex)		Shenzhen Sande Dacom Electronics Co., Ltd
-08E4DF     (base 16)		Shenzhen Sande Dacom Electronics Co., Ltd
-				bantian
-				shenzhen  Guangdong  518129
-				CN
-
-EC-7C-2C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC7C2C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-58-08   (hex)		Taicang T&W Electronics
-145808     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-10-5A-17   (hex)		Tuya Smart Inc.
-105A17     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-B8-37-4A   (hex)		Apple, Inc.
-B8374A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-3D-B1   (hex)		Beijing H-IoT Technology Co., Ltd.
-8C3DB1     (base 16)		Beijing H-IoT Technology Co., Ltd.
-				1268, Building 2, No. 38, Kechuang Fifth Street, Beijing Economic and Technological Development Zone
-				Beijing  Beijing  101111
-				CN
-
-54-67-06   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-546706     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-10-55-E4   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-1055E4     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-C0-F5-35   (hex)		AMPAK Technology,Inc.
-C0F535     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-C4-E5-32   (hex)		Arcadyan Corporation
-C4E532     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-F8-B5-4D   (hex)		Intel Corporate
-F8B54D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-64-01-FB   (hex)		Landis+Gyr GmbH
-6401FB     (base 16)		Landis+Gyr GmbH
-				Humboldtstrasse 64
-				Nürnberg  Bavaria  90459
-				DE
-
-20-7B-D2   (hex)		ASIX Electronics Corporation
-207BD2     (base 16)		ASIX Electronics Corporation
-				4F, No. 8, Hsin Ann Road, Hsinchu Science Park
-				Hsinchu    30078
-				TW
-
-18-2D-F7   (hex)		JY COMPANY
-182DF7     (base 16)		JY COMPANY
-				A-1811 Ho, SamboTechno Tower,122, Jomaru-ro 385 Beon-gil,
-				Buchenon-si  Gyenggi-do  14556
-				KR
-
-EC-2C-11   (hex)		CWD INNOVATION LIMITED
-EC2C11     (base 16)		CWD INNOVATION LIMITED
-				101, First Floor, 439 Hasam Premji Building, Kalbadevi
-				Mumbai  Maharashtra  400002
-				IN
-
-F0-35-75   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-F03575     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-90-81-75   (hex)		Samsung Electronics Co.,Ltd
-908175     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-74-67   (hex)		Samsung Electronics Co.,Ltd
-307467     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-CD-31   (hex)		Samsung Electronics Co.,Ltd
-F0CD31     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-38-A8-CD   (hex)		IEEE Registration Authority
-38A8CD     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E4-44-E5   (hex)		Extreme Networks, Inc.
-E444E5     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-54-52-84   (hex)		Huawei Device Co., Ltd.
-545284     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-61-40   (hex)		Huawei Device Co., Ltd.
-646140     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-17-0E   (hex)		Huawei Device Co., Ltd.
-C4170E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-68-77-24   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-687724     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-20-67-E0   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-2067E0     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
-				Shenzhen    518067
-				CN
-
-7C-83-34   (hex)		IEEE Registration Authority
-7C8334     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D0-C3-5A   (hex)		Jabil Circuit de Chihuahua
-D0C35A     (base 16)		Jabil Circuit de Chihuahua
-				C/O SPACE BORDER LOGISTICS, INC 9560 Joe Rodriguez Dr. Docks 17 & 18
-				El Paso  TX  79927
-				US
-
-84-B6-30   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-84B630     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-58-C7-AC   (hex)		New H3C Technologies Co., Ltd
-58C7AC     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-E4-C0-E2   (hex)		Sagemcom Broadband SAS
-E4C0E2     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-D8-6C-5A   (hex)		HUMAX Co., Ltd.
-D86C5A     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-24-97-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-249745     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-3F-A7   (hex)		uGrid Network Inc.
-4C3FA7     (base 16)		uGrid Network Inc.
-				602 Gabriola Way
-				Ottawa  Ontario  K2T 0M2
-				CA
-
-B8-98-AD   (hex)		Motorola Mobility LLC, a Lenovo Company
-B898AD     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-94-FF-3C   (hex)		Fortinet, Inc.
-94FF3C     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale    94086
-				US
-
-70-52-D8   (hex)		ITEL MOBILE LIMITED
-7052D8     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-08-FA-79   (hex)		vivo Mobile Communication Co., Ltd.
-08FA79     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-1C-AE-3E   (hex)		IEEE Registration Authority
-1CAE3E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-1D-5B   (hex)		Tecvan Informatica Ltda
-001D5B     (base 16)		Tecvan Informatica Ltda
-				Rua Guaicurus, 145
-				Diadema  São Paulo  09911-630
-				BR
-
-9C-2B-A6   (hex)		Ruijie Networks Co.,LTD
-9C2BA6     (base 16)		Ruijie Networks Co.,LTD
-				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
-				Fuzhou  Fujian  350002
-				CN
-
-94-14-57   (hex)		Shenzhen Sundray Technologies Company Limited
-941457     (base 16)		Shenzhen Sundray Technologies Company Limited
-				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
-				Shenzhen  Guangdong  518057
-				CN
-
-64-B9-4E   (hex)		Dell Technologies
-64B94E     (base 16)		Dell Technologies
-				Matam Park, Bld 8B, PO Box 15046 3190500 HAIFA ISRAEL 
-				HAIFA   HAIFA   15046 
-				IL
-
-EC-2B-EB   (hex)		Amazon Technologies Inc.
-EC2BEB     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-54-47-E8   (hex)		Syrotech Networks. Ltd.
-5447E8     (base 16)		Syrotech Networks. Ltd.
-				UNIT NO.-5 20F, KIN WING INDUSTERIAL BUILDING,33 KIN WING STREET
-				TUEN MUN    999077
-				HK
-
-3C-55-76   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-3C5576     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-0C-CA-FB   (hex)		TPVision Europe B.V
-0CCAFB     (base 16)		TPVision Europe B.V
-				Prins Bernhardplein 200
-				Amsterdam  Noord-Holland  1097 JB
-				NL
-
-BC-57-29   (hex)		Shenzhen KKM Co., Ltd
-BC5729     (base 16)		Shenzhen KKM Co., Ltd
-				Room 3B,Building 6A, BaoNeng Park, QingXiang Road, LongHua District
-				ShenZhen  Guangdong  518000
-				CN
-
-E4-82-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E48210     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-F7-B9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F8F7B9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-53-45   (hex)		Nokia
-185345     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-38-A9-EA   (hex)		Private
-38A9EA     (base 16)		Private
-
-08-16-D5   (hex)		GOERTEK INC.
-0816D5     (base 16)		GOERTEK INC.
-				 GoerTek  park one phase 4 # east unloading platform,The Corner of Weian road & Yingqian street, High-tech Zone, Weifang, Shandong, China 261031
-				weifang  shandong  261031
-				CN
-
-1C-56-8E   (hex)		Zioncom Electronics (Shenzhen) Ltd.
-1C568E     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
-				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-E0-1F-2B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-E01F2B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-A0-82-22   (hex)		Qingdao Haier Technology Co.,Ltd
-A08222     (base 16)		Qingdao Haier Technology Co.,Ltd
-				Building A01,Haier Information Park, No.1 Haier Road,
-				Qingdao  Shandong  266101
-				CN
-
-28-56-3A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-28563A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-04-C4-61   (hex)		Murata Manufacturing Co., Ltd.
-04C461     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-AC-82-26   (hex)		Qingdao Haier Technology Co.,Ltd
-AC8226     (base 16)		Qingdao Haier Technology Co.,Ltd
-				Building A01,Haier Information Park, No.1 Haier Road,
-				Qingdao  Shandong  266101
-				CN
-
-44-48-FF   (hex)		Qingdao Haier Technology Co.,Ltd
-4448FF     (base 16)		Qingdao Haier Technology Co.,Ltd
-				Building A01,Haier Information Park, No.1 Haier Road,
-				Qingdao  Shandong  266101
-				CN
-
-A8-C2-66   (hex)		HUMAX Co., Ltd.
-A8C266     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-F8-4E-17   (hex)		Sony Corporation
-F84E17     (base 16)		Sony Corporation
-				Sony City Osaki 2-10-1
-				Shinagawa-ku   Tokyo  141-8610
-				JP
-
-54-0F-57   (hex)		Silicon Laboratories
-540F57     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-C8-CB-9E   (hex)		Intel Corporate
-C8CB9E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-70-A7-41   (hex)		Ubiquiti Networks Inc.
-70A741     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-D4-D7-CF   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-D4D7CF     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-F4-E4-D7   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-F4E4D7     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-E8-47-27   (hex)		Quectel Wireless Solutions Co.,Ltd.
-E84727     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-D4-E2-CB   (hex)		Technicolor CH USA Inc.
-D4E2CB     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-28-C5-38   (hex)		Apple, Inc.
-28C538     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-99-B9   (hex)		Apple, Inc.
-0499B9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-4D-89   (hex)		Apple, Inc.
-F84D89     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-02-8B   (hex)		Apple, Inc.
-78028B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-DB-09   (hex)		Cisco Meraki
-BCDB09     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-04-34-F6   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-0434F6     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-14-01-9C   (hex)		Ubyon Inc.
-14019C     (base 16)		Ubyon Inc.
-				10080 N. Wolfe Rd. SW3-200
-				Cupertino    95014
-				US
-
-F8-95-22   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F89522     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-B1-32   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F8B132     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-69-25   (hex)		PS INODIC CO., LTD.
-546925     (base 16)		PS INODIC CO., LTD.
-				#407, 4F, 25-32, LS-ro 116beon-gil, Dongan-gu
-				Anyang-si  Gyeonggi-do  14118
-				KR
-
-E8-B5-D0   (hex)		Dell Inc.
-E8B5D0     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-E8-CB-ED   (hex)		 Chipsea Technologies(Shenzhen) Corp.
-E8CBED     (base 16)		 Chipsea Technologies(Shenzhen) Corp.
-				9F,Block A,Garden City Digital Building,No.1079 Nanhai Road,Nanshan District,Shenzhen
-				Shenzhen    518000
-				CN
-
-78-13-E0   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-7813E0     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-48-61-EE   (hex)		Samsung Electronics Co.,Ltd
-4861EE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-4B-4D   (hex)		Samsung Electronics Co.,Ltd
-A84B4D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-60-07-C4   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-6007C4     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-08-6F-48   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-086F48     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
-				Shenzhen    518067
-				CN
-
-F4-F3-09   (hex)		Samsung Electronics Co.,Ltd
-F4F309     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-78-57-B0   (hex)		GERTEC BRASIL LTDA
-7857B0     (base 16)		GERTEC BRASIL LTDA
-				Avenida Jabaquara, 3060, room 601
-				Sao Paulo  São Paulo  04046500
-				BR
-
-C4-F1-22   (hex)		Nexar Ltd.
-C4F122     (base 16)		Nexar Ltd.
-				58 HaRakevet st
-				Tel Aviv  Tel Aviv  6777016
-				IL
-
-64-BE-63   (hex)		STORDIS GmbH
-64BE63     (base 16)		STORDIS GmbH
-				Rosenwiesstr. 17
-				Stuttgart    70567
-				DE
-
-0C-C6-FD   (hex)		Xiaomi Communications Co Ltd
-0CC6FD     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-50-DA-D6   (hex)		Xiaomi Communications Co Ltd
-50DAD6     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-18-B9-6E   (hex)		Dongguan Liesheng Electronic Co., Ltd.
-18B96E     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
-				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
-				dongguan   guangdong  523000
-				CN
-
-54-69-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-546990     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-0A-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D80A60     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-86-9A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C869A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-27-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2C2768     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-78-80   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D07880     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-14-CB-65   (hex)		Microsoft Corporation
-14CB65     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-34-08-E1   (hex)		Texas Instruments
-3408E1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-50-58-B0   (hex)		Hunan Greatwall Computer System Co., Ltd.
-5058B0     (base 16)		Hunan Greatwall Computer System Co., Ltd.
-				Hunan GreatWall Industrial Park, Tianyi Science and Technology City, Xiangyun Middle Road, Tianyuan District
-				Zhuzhou  Hunan  412000
-				CN
-
-E0-6C-F6   (hex)		ESSENCORE limited
-E06CF6     (base 16)		ESSENCORE limited
-				 Suite 4006, 40/F Central Plaza, 18 Harbour Road, Wanchai,
-				Hong Kong    No code
-				HK
-
-78-C6-2B   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-78C62B     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-D4-66-24   (hex)		Cisco Systems, Inc
-D46624     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-90-19   (hex)		Beyless
-9C9019     (base 16)		Beyless
-				#725,42,Changeop-ro, Sujeong-gu
-				Seongnam-si  Gyeonggi-do  13449
-				KR
-
-3C-E0-38   (hex)		Omnifi Inc.
-3CE038     (base 16)		Omnifi Inc.
-				6701 Koll Center Parkway, Suite 250
-				Pleasanton  CA  94566
-				US
-
-00-16-82   (hex)		OMS Motion
-001682     (base 16)		OMS Motion
-				15201 NW Greenbrier Pkwy, Ste. Suite B1
-				Beaverton  OR  97006
-				US
-
-D4-F9-8D   (hex)		Espressif Inc.
-D4F98D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-04-CE-09   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-04CE09     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-1C-86-9A   (hex)		Samsung Electronics Co.,Ltd
-1C869A     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-D8-FB-D6   (hex)		Amazon Technologies Inc.
-D8FBD6     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-9C-47-F9   (hex)		LJU Automatisierungstechnik GmbH
-9C47F9     (base 16)		LJU Automatisierungstechnik GmbH
-				Am Schlahn 1
-				Potsdam  Brandenburg  D-14476
-				DE
-
-70-A8-D3   (hex)		Intel Corporate
-70A8D3     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-2C-33-58   (hex)		Intel Corporate
-2C3358     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-08-6A-E5   (hex)		Amazon Technologies Inc.
-086AE5     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-A8-17-10   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
-A81710     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
-				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
-				Nanjing  Jiangsu  211800
-				CN
-
-20-62-96   (hex)		Shenzhen Malio Technology Co.,Ltd
-206296     (base 16)		Shenzhen Malio Technology Co.,Ltd
-				Building B1, Shenzhen digital technology park, No. 16, Gaoxin South seventh Road, high tech Zone community, Yuehai street,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-A0-80-69   (hex)		Intel Corporate
-A08069     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-A0-67-20   (hex)		China Dragon Technology Limited
-A06720     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-94-C9-B7   (hex)		IEEE Registration Authority
-94C9B7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-60-56-99   (hex)		Private
-605699     (base 16)		Private
-
-E8-EE-CC   (hex)		Fantasia Trading LLC
-E8EECC     (base 16)		Fantasia Trading LLC
-				5350 Ontario Mills Pkwy, Suite 100
-				Ontario  CA  91764
-				US
-
-5C-16-C7   (hex)		Arista Networks
-5C16C7     (base 16)		Arista Networks
-				100 W Evelyn
-				Mountain View  CA  94041
-				US
-
-4C-E0-DB   (hex)		Xiaomi Communications Co Ltd
-4CE0DB     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-7C-33-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C33F9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-16-51   (hex)		Ruijie Networks Co.,LTD
-541651     (base 16)		Ruijie Networks Co.,LTD
-				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
-				Fuzhou  Fujian  350002
-				CN
-
-70-87-A7   (hex)		Murata Manufacturing Co., Ltd.
-7087A7     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-AC-04-25   (hex)		ball-b GmbH Co KG
-AC0425     (base 16)		ball-b GmbH Co KG
-				Saganer Strasse 14
-				Nuremberg  Bavaria  90475
-				DE
-
-04-BD-97   (hex)		Cisco Systems, Inc
-04BD97     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F0-3A-4B   (hex)		Bloombase, Inc.
-F03A4B     (base 16)		Bloombase, Inc.
-				1300 Island Dr Ste 103
-				Redwood City  CA  94065
-				US
-
-00-02-A3   (hex)		Hitachi Energy Switzerland Ltd
-0002A3     (base 16)		Hitachi Energy Switzerland Ltd
-				Bruggerstrasse 72
-				Baden    5400
-				CH
-
-38-F7-F1   (hex)		Huawei Device Co., Ltd.
-38F7F1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-40-76-A9   (hex)		Huawei Device Co., Ltd.
-4076A9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F4-38-C1   (hex)		Huawei Device Co., Ltd.
-F438C1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-28-EA-2D   (hex)		Apple, Inc.
-28EA2D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-9B-E6   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
-209BE6     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-B8-E6-0C   (hex)		Apple, Inc.
-B8E60C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-35-2B   (hex)		Apple, Inc.
-48352B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-E6-C0   (hex)		Apple, Inc.
-4CE6C0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-88-A4   (hex)		Apple, Inc.
-3888A4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-DA-30   (hex)		Apple, Inc.
-44DA30     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-16-0C   (hex)		Broadcom Limited
-84160C     (base 16)		Broadcom Limited
-				15191 Alton Parkway
-				Irvine  CA  92618
-				US
-
-74-E6-B8   (hex)		LG Electronics
-74E6B8     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-28-D0-F5   (hex)		Ruijie Networks Co.,LTD
-28D0F5     (base 16)		Ruijie Networks Co.,LTD
-				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
-				Fuzhou  Fujian  350002
-				CN
-
-94-18-65   (hex)		NETGEAR
-941865     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-C8-9B-D7   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-C89BD7     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-28-B1-33   (hex)		SHINEMAN(SHENZHEN) Tech. Cor., Ltd.
-28B133     (base 16)		SHINEMAN(SHENZHEN) Tech. Cor., Ltd.
-				BanTian
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-D0-04-B0   (hex)		Samsung Electronics Co.,Ltd
-D004B0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-98-B0-8B   (hex)		Samsung Electronics Co.,Ltd
-98B08B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-58-7C   (hex)		Shoogee GmbH & Co. KG
-A8587C     (base 16)		Shoogee GmbH & Co. KG
-				Alter Fischmarkt 11a
-				Muenster  Nordrhein-Westfalen  48143
-				DE
-
-9C-25-95   (hex)		Samsung Electronics Co.,Ltd
-9C2595     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-90-F2-60   (hex)		Shenzhen Honesty Electronics Co.,Ltd.
-90F260     (base 16)		Shenzhen Honesty Electronics Co.,Ltd.
-				5/F,Zone B,Chitat Industrial Park,West Longping Road, Longgang District,Shenzhen City
-				Shenzhen  Guangdong  518172
-				CN
-
-18-89-CF   (hex)		TECNO MOBILE LIMITED
-1889CF     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-98-5F-4F   (hex)		Tongfang Computer Co.,Ltd.
-985F4F     (base 16)		Tongfang Computer Co.,Ltd.
-				 No. 118, Chunsun East Road, Xishan Economic Development Zone (Dongting)
-				Wuxi  Jiangsu   214101
-				CN
-
-34-F8-6E   (hex)		Parker Hannifin Corporation
-34F86E     (base 16)		Parker Hannifin Corporation
-				6035 Parkland Blvd
-				Cleveland  OH  44124
-				US
-
-0C-AE-BD   (hex)		Edifier International
-0CAEBD     (base 16)		Edifier International
-				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
-				Hong Kong    070
-				CN
-
-6C-D8-69   (hex)		Guangzhou Sat Infrared Co.,LTD
-6CD869     (base 16)		Guangzhou Sat Infrared Co.,LTD
-				No.10 Dongjiang Ave. GETDD
-				Guangzhou  Guangdong  510730
-				CN
-
-38-1E-C7   (hex)		 Chipsea Technologies(Shenzhen) Corp.
-381EC7     (base 16)		 Chipsea Technologies(Shenzhen) Corp.
-				9F,Block A,Garden City Digital Building,No.1079 Nanhai Road,Nanshan District,Shenzhen
-				Shenzhen    518000
-				CN
-
-08-92-04   (hex)		Dell Inc.
-089204     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-40-67-9B   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-40679B     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-F0-A6-54   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-F0A654     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-3C-CF-B4   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
-3CCFB4     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
-				No. 1500 Zuchongzhi Rd, Building #3
-				Shanghai    201203
-				CN
-
-04-3C-E8   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-043CE8     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-A8-E6-21   (hex)		Amazon Technologies Inc.
-A8E621     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-E8-31-CD   (hex)		Espressif Inc.
-E831CD     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-88-D0-39   (hex)		Tonly Technology Co. Ltd 
-88D039     (base 16)		Tonly Technology Co. Ltd 
-				Section 37, Zhongkai Hi-Tech Development Zone
-				Huizhou  Guangdong  516006
-				CN
-
-E8-F3-75   (hex)		Nokia
-E8F375     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-10-37-11   (hex)		NORBIT ITS
-103711     (base 16)		NORBIT ITS
-				Otto Nielsens Veg 12
-				Trondheim    N-7004
-				NO
-
-C0-88-6D   (hex)		Securosys SA
-C0886D     (base 16)		Securosys SA
-				Technopark 1
-				Zürich  ZH  8005
-				CH
-
-24-81-3B   (hex)		Cisco Systems, Inc
-24813B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C4-09-B7   (hex)		Juniper Networks
-C409B7     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-0C-B8-E8   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-0CB8E8     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-EC-5C-84   (hex)		Murata Manufacturing Co., Ltd.
-EC5C84     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-BC-9B-5E   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-BC9B5E     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-48-74-12   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-487412     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-B0-F2-08   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-B0F208     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-F0-B2-B9   (hex)		Intel Corporate
-F0B2B9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-A0-69-D9   (hex)		New H3C Technologies Co., Ltd
-A069D9     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-20-FE-00   (hex)		Amazon Technologies Inc.
-20FE00     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-F4-21-AE   (hex)		Shanghai Xiaodu Technology Limited
-F421AE     (base 16)		Shanghai Xiaodu Technology Limited
-				4th Floor Building No.1 , No.701 Naxian Road Pilot Free Trade Zone Shanghai China
-				Shanghai    200000
-				CN
-
-F4-12-FA   (hex)		Espressif Inc.
-F412FA     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-DC-99-FE   (hex)		Armatura LLC
-DC99FE     (base 16)		Armatura LLC
-				16192 Coastal Hwy
-				Lewes  DE  19958
-				US
-
-9C-F1-55   (hex)		Nokia
-9CF155     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-E4-73-05   (hex)		Shenzhen INVT Electric CO.,Ltd
-E47305     (base 16)		Shenzhen INVT Electric CO.,Ltd
-				INVT Guangming Technology Building,Songbai Road,Matian,Guangming District,ShenZhen,China.518106
-				ShenZhen  Guangdong  518000
-				CN
-
-B0-1B-4B   (hex)		Invisible Fun Studio Limited
-B01B4B     (base 16)		Invisible Fun Studio Limited
-				809, Block 2, Yip On Factory Est, 
-				Kowloon Bay    000000
-				HK
-
-60-4F-5B   (hex)		Huawei Device Co., Ltd.
-604F5B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-14-DC-E2   (hex)		THALES AVS France
-14DCE2     (base 16)		THALES AVS France
-				75-77 Av. Marcel Dassault
-				Mérignac    33700
-				FR
-
-78-FB-D8   (hex)		Apple, Inc.
-78FBD8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-C3-37   (hex)		Apple, Inc.
-A4C337     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-F1-D8   (hex)		Apple, Inc.
-B0F1D8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-88-0C   (hex)		Apple, Inc.
-D0880C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-57-DC   (hex)		Apple, Inc.
-1C57DC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-74-46   (hex)		Google, Inc.
-747446     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-78-20-A5   (hex)		Nintendo Co.,Ltd
-7820A5     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-20-78-CD   (hex)		Apple, Inc.
-2078CD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-D5-3E   (hex)		Apple, Inc.
-30D53E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-23-A2   (hex)		Apple, Inc.
-5023A2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-69-8A   (hex)		Apple, Inc.
-98698A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-46-AE   (hex)		MERCURY CORPORATION
-5046AE     (base 16)		MERCURY CORPORATION
-				90, Gajaeul-ro, Seo-gu
-				INCHEON    22830
-				KR
-
-B0-99-D7   (hex)		Samsung Electronics Co.,Ltd
-B099D7     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-90-EB-48   (hex)		Shanghai XinMiaoLink Technology Co., Ltd
-90EB48     (base 16)		Shanghai XinMiaoLink Technology Co., Ltd
-				Room 601,6F ,No.1399 Minsheng Road,Pudong New Area,Shanghai,China
-				Shanghai    200120
-				CN
-
-B4-B7-42   (hex)		Amazon Technologies Inc.
-B4B742     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-78-A0-3F   (hex)		Amazon Technologies Inc.
-78A03F     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-60-BE-B4   (hex)		S-Bluetech co., limited
-60BEB4     (base 16)		S-Bluetech co., limited
-				Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu
-				Shenzhen  Guangdong  518000
-				CN
-
-90-DF-7D   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-90DF7D     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-50-C1-F0   (hex)		NXP Semiconductor (Tianjin) LTD.
-50C1F0     (base 16)		NXP Semiconductor (Tianjin) LTD.
-				No.15 Xinghua Avenue, Xiqing Economic Development Area
-				Tianjin    300385
-				CN
-
-F4-84-8D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F4848D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-A8-54-A2   (hex)		Heimgard Technologies AS
-A854A2     (base 16)		Heimgard Technologies AS
-				Dronning Mauds gate 15
-				Oslo   Norway  0250 
-				NO
-
-74-2A-8A   (hex)		shenzhen worldelite electronics co., LTD
-742A8A     (base 16)		shenzhen worldelite electronics co., LTD
-				Office 5 F, Xiang Yu Industrial Park, Longsheng Road, Longgang Dist
-				Shenzhen  Guangdong  51800
-				CN
-
-BC-1D-89   (hex)		Motorola Mobility LLC, a Lenovo Company
-BC1D89     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-B8-7E-E5   (hex)		Intelbras
-B87EE5     (base 16)		Intelbras
-				BR 101, km 210, S/N°
-				São José  Santa Catarina  88104800
-				BR
-
-58-11-22   (hex)		ASUSTek COMPUTER INC.
-581122     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-74-69-4A   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-74694A     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-78-15-2D   (hex)		UNION CHIP TECHNOLOGY LIMITED
-78152D     (base 16)		UNION CHIP TECHNOLOGY LIMITED
-				5th Floor, Building A1, Hangcheng Jinchi Industrial Park, 8TH North Road, Hangcheng Street, Bao 'an District, Shenzhen
-				shenzhen    518000
-				CN
-
-94-AB-FE   (hex)		Nokia
-94ABFE     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-98-A9-2D   (hex)		New H3C Technologies Co., Ltd
-98A92D     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-00-A5-54   (hex)		Intel Corporate
-00A554     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-0C-86-29   (hex)		IEEE Registration Authority
-0C8629     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-50-DC-D0   (hex)		Observint Technologies, Inc.
-50DCD0     (base 16)		Observint Technologies, Inc.
-				11000 N Mopac Expressway Suite 300
-				Austin  TX  78759
-				US
-
-D4-F0-EA   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-D4F0EA     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-58-76-AC   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-5876AC     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-E0-03-6B   (hex)		Samsung Electronics Co.,Ltd
-E0036B     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-80-69-1A   (hex)		Belkin International Inc.
-80691A     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista    90094
-				US
-
-64-31-72   (hex)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
-643172     (base 16)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
-				Room 201 and 202,Building 5,328 Pingjiang Road,Yuecheng District,Shaoxing
-				Shaoxing  Zhejiang  312000
-				CN
-
-D0-FC-D0   (hex)		HUMAX Co., Ltd.
-D0FCD0     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-20-FA-DB   (hex)		Huahao Kunpeng Technology (chengDu)  Co.,Ltd.
-20FADB     (base 16)		Huahao Kunpeng Technology (chengDu)  Co.,Ltd.
-				No.99, Hangtian Road, Section 2, East Third Ring Road,Chenghua District, Chengdu
-				Chengdu    610051
-				CN
-
-0C-8B-95   (hex)		Espressif Inc.
-0C8B95     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-68-5E-1C   (hex)		Texas Instruments
-685E1C     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-38-AB-41   (hex)		Texas Instruments
-38AB41     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-CC-47-92   (hex)		ASIX Electronics Corporation
-CC4792     (base 16)		ASIX Electronics Corporation
-				4F, No. 8, Hsin Ann Road, Hsinchu Science Park
-				Hsinchu    30078
-				TW
-
-E0-46-EE   (hex)		NETGEAR
-E046EE     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-9C-4F-5F   (hex)		Google, Inc.
-9C4F5F     (base 16)		Google, Inc.
-				15 rue Castel
-				Fontenay-sous-Bois    94120
-				FR
-
-A0-29-42   (hex)		Intel Corporate
-A02942     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-10-71-B3   (hex)		Zyxel Communications Corporation
-1071B3     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-04-63-D0   (hex)		Huawei Device Co., Ltd.
-0463D0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F0-D4-15   (hex)		Intel Corporate
-F0D415     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-69-D4   (hex)		Samsung Electronics Co.,Ltd
-1869D4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-95-61   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-9C9561     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-DC-BE-49   (hex)		ITEL MOBILE LIMITED
-DCBE49     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-14-44-8F   (hex)		Edgecore Networks Corporation
-14448F     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-34-25-BE   (hex)		Amazon Technologies Inc.
-3425BE     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-D4-A3-EB   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-D4A3EB     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-9C-BF-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9CBFCD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-9F-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B89FCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-E0-41   (hex)		Nokia
-9CE041     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-78-34-86   (hex)		Nokia
-783486     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-D4-D8-53   (hex)		Intel Corporate
-D4D853     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-8C-76-3F   (hex)		ARRIS Group, Inc.
-8C763F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-28-12-93   (hex)		Honor Device Co., Ltd.
-281293     (base 16)		Honor Device Co., Ltd.
-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
-				Shenzhen   Guangdong  518040
-				CN
-
-C0-A9-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0A938     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-ED-E5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-C0EDE5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-10-A5-62   (hex)		Iton Technology Corp.
-10A562     (base 16)		Iton Technology Corp.
-				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
-				Shenzhen  Guangdong   518116
-				CN
-
-5C-24-E2   (hex)		Suzhou Denbom Electronic S&T Co., Ltd
-5C24E2     (base 16)		Suzhou Denbom Electronic S&T Co., Ltd
-				3F,Building 2, No.415,Changyang Street
-				Suzhou  Jiangsu  215000
-				CN
-
-64-98-9E   (hex)		TRINNOV AUDIO
-64989E     (base 16)		TRINNOV AUDIO
-				5 rue Edmond Michelet
-				NEUILLY PLAISANCE  Ile-de-France  93360
-				FR
-
-BC-C7-46   (hex)		Hon Hai Precision IND.CO.,LTD
-BCC746     (base 16)		Hon Hai Precision IND.CO.,LTD
-				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
-				TAIPEI  TAIWAN  33859
-				CN
-
-30-E8-E4   (hex)		Qorvo International Pte. Ltd.
-30E8E4     (base 16)		Qorvo International Pte. Ltd.
-				1 Changi Business Park Avenue 1
-				#04-01    486058
-				SG
-
-00-0D-A9   (hex)		INGETEAM
-000DA9     (base 16)		INGETEAM
-				Parque Tecnologico de Bizkaia, Edificio 110
-				Zamudio  Bizkaia  48170
-				ES
-
-30-E0-90   (hex)		Genevisio Ltd.
-30E090     (base 16)		Genevisio Ltd.
-				13F, No.33, Sec. 1, Minsheng Rd.
-				New Taipei City  Banqiao Dist.  220871
-				TW
-
-64-FD-96   (hex)		Sagemcom Broadband SAS
-64FD96     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-FC-B9-7E   (hex)		GE Appliances
-FCB97E     (base 16)		GE Appliances
-				4000 Buechel Bank Road
-				Louisville  KY  40225
-				US
-
-88-03-4C   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-88034C     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-48-DC-9D   (hex)		Grandprint(Beijing) Technology Co., LTD.
-48DC9D     (base 16)		Grandprint(Beijing) Technology Co., LTD.
-				Room 259, 2 / F, Building 5, 8 Dongbeiwang West Road, Haidian District,
-				Beijing    100089
-				CN
-
-C8-EB-EC   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-C8EBEC     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-04-7C-16   (hex)		Micro-Star INTL CO., LTD.
-047C16     (base 16)		Micro-Star INTL CO., LTD.
-				No.69, Lide St.,
-				New Taipei City  Taiwan  235
-				TW
-
-E0-D7-38   (hex)		WireStar Networks
-E0D738     (base 16)		WireStar Networks
-				PO Box 10966
-				College Station  TX  77842
-				US
-
-40-42-44   (hex)		Cisco Systems, Inc
-404244     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-04-B6-BE   (hex)		CIG SHANGHAI CO LTD
-04B6BE     (base 16)		CIG SHANGHAI CO LTD
-				5th Floor, Building 8 No 2388 Chenhang Road
-				SHANGHAI    201114
-				CN
-
-7C-EC-B1   (hex)		Apple, Inc.
-7CECB1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-E9-1E   (hex)		Apple, Inc.
-5CE91E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-B0-AE   (hex)		BizLink Special Cables Germany GmbH
-A8B0AE     (base 16)		BizLink Special Cables Germany GmbH
-				Eschstrasse 1
-				Friesoythe    26169
-				DE
-
-94-C5-A6   (hex)		ITEL MOBILE LIMITED
-94C5A6     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-48-57-D2   (hex)		Broadcom Limited
-4857D2     (base 16)		Broadcom Limited
-				15191 Alton Parkway
-				Irvine  CA  92618
-				US
-
-9C-21-83   (hex)		Broadcom Limited
-9C2183     (base 16)		Broadcom Limited
-				15191 Alton Parkway
-				Irvine  CA  92618
-				US
-
-24-1F-BD   (hex)		Extreme Networks, Inc.
-241FBD     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-D8-34-EE   (hex)		SHURE INCORPORATED
-D834EE     (base 16)		SHURE INCORPORATED
-				5800 W. TOUHY AVE.
-				NILES  IL  60714 
-				US
-
-F0-B6-61   (hex)		eero inc.
-F0B661     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-04-25-F0   (hex)		Nokia
-0425F0     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-1C-BC-EC   (hex)		silex technology, Inc.
-1CBCEC     (base 16)		silex technology, Inc.
-				2-3-1 Hikaridai, Seika-cho, Souraku-gun
-				Kyoto    619-0237
-				JP
-
-E0-6A-05   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-E06A05     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-90-CD-1F   (hex)		Quectel Wireless Solutions Co.,Ltd.
-90CD1F     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-90-23-5B   (hex)		Amazon Technologies Inc.
-90235B     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-14-13-0B   (hex)		Garmin International
-14130B     (base 16)		Garmin International
-				1200 E. 151st St
-				Olathe  KS  66062
-				US
-
-48-9B-E0   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-489BE0     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-5C-FA-25   (hex)		Sagemcom Broadband SAS
-5CFA25     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-40-3B-7B   (hex)		Huawei Device Co., Ltd.
-403B7B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-08-30-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-0830CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-B0-A2-E7   (hex)		Shenzhen TINNO Mobile Technology Corp.
-B0A2E7     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-A0-4C-5B   (hex)		Shenzhen TINNO Mobile Technology Corp.
-A04C5B     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-BC-41-01   (hex)		Shenzhen TINNO Mobile Technology Corp.
-BC4101     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-74-97-79   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-749779     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-F8-CD-C8   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-F8CDC8     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-B0-28-5B   (hex)		JUHUA Technology Inc.
-B0285B     (base 16)		JUHUA Technology Inc.
-				No.8,Yanbao Block,Hutian Road,Pingdi Street,Longgang District
-				Shenzhen City  Guangdong Province  518117
-				CN
-
-18-D6-1C   (hex)		Shenzhen TINNO Mobile Technology Corp.
-18D61C     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-34-CF-6C   (hex)		Hangzhou Taili wireless communication equipment Co.,Ltd
-34CF6C     (base 16)		Hangzhou Taili wireless communication equipment Co.,Ltd
-				Room 1901, No.258,  Zhonghe Middle Road, Shangcheng District, Hangzhou
-				Hangzhou  Zhejiang  310003
-				CN
-
-E0-F6-78   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E0F678     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-28-F7-D6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-28F7D6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-C8-24-96   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
-C82496     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
-				No.188 Nanhuan Road, TangQiao Town
-				Zhangjiagang   Jiangsu   215611
-				CN
-
-24-18-C0   (hex)		E. Wehrle GmbH
-2418C0     (base 16)		E. Wehrle GmbH
-				Obertalstraße 8
-				78120 Furtwangen  Baden-Württemberg  78120
-				DE
-
-14-5B-B9   (hex)		ConMet
-145BB9     (base 16)		ConMet
-				5701 SE Columbia Way
-				Vancouver    WA  98661
-				US
-
-AC-83-F0   (hex)		Cobalt Digital Inc.
-AC83F0     (base 16)		Cobalt Digital Inc.
-				2506 Galen Drive
-				Champaign  IL  61821
-				US
-
-AC-15-A2   (hex)		TP-Link Corporation Limited
-AC15A2     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-B8-59-C8   (hex)		70mai Co.,Ltd.
-B859C8     (base 16)		70mai Co.,Ltd.
-				Room 2220, building 2, No. 588, Zixing road
-				Shanghai  MinHang District  201100
-				CN
-
-A8-E2-07   (hex)		GOIP Global Services Pvt. Ltd.
-A8E207     (base 16)		GOIP Global Services Pvt. Ltd.
-				H68, Sector 63, Noida 201301
-				Noida   Uttar Pradesh  201301
-				IN
-
-40-22-30   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-402230     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-B8-B4-09   (hex)		Samsung Electronics Co.,Ltd
-B8B409     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-AC-DF-9F   (hex)		Arcadyan Corporation
-ACDF9F     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-D4-E2-2F   (hex)		Roku, Inc
-D4E22F     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-00-13-95   (hex)		congatec GmbH
-001395     (base 16)		congatec GmbH
-				Auwiesenstrasse 5
-				Deggendorf    94469
-				DE
-
-28-77-B1   (hex)		Tri plus grupa d.o.o.
-2877B1     (base 16)		Tri plus grupa d.o.o.
-				Banjavciceva 11
-				Zagreb  Zagreb  10000
-				HR
-
-C4-3C-B0   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-C43CB0     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-3C-0B-4F   (hex)		Yandex Services AG
-3C0B4F     (base 16)		Yandex Services AG
-				Werftestrasse 4, 
-				Luzern    6005
-				CH
-
-4C-31-2D   (hex)		Sichuan AI-Link Technology Co., Ltd.
-4C312D     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-D8-7E-6F   (hex)		CASCINATION AG
-D87E6F     (base 16)		CASCINATION AG
-				Steigerhubelstrasse 3
-				Bern  Bern  3008
-				CH
-
-04-4F-7A   (hex)		China Mobile Group Device Co.,Ltd.
-044F7A     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-40-5E-F6   (hex)		Samsung Electronics Co.,Ltd
-405EF6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-52-44   (hex)		Samsung Electronics Co.,Ltd
-945244     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-2E-7A   (hex)		Samsung Electronics Co.,Ltd
-9C2E7A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-63-05   (hex)		Amazon Technologies Inc.
-7C6305     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-C0-4E-30   (hex)		Espressif Inc.
-C04E30     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-74-E7-98   (hex)		Juniper Networks
-74E798     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-E0-16-B1   (hex)		Advanced Design Technology co.,ltd.
-E016B1     (base 16)		Advanced Design Technology co.,ltd.
-				1-1-3 Kotobukicho#10F Mitsukikotobukichobiru
-				Fucyu-city  Tokyo  1830056
-				JP
-
-54-31-D4   (hex)		TGW Mechanics GmbH
-5431D4     (base 16)		TGW Mechanics GmbH
-				Collmannstraße 2
-				Wels    4600
-				AT
-
-94-01-AC   (hex)		Wuhan Qianyang Iotian Technology Co., Ltd
-9401AC     (base 16)		Wuhan Qianyang Iotian Technology Co., Ltd
-				Unit 1301, Building B4, Wuhan future science and Technology City, Gaoxin Avenue, Wuhan East Lake New-Technology Development Zone
-				Wuhan  Hubei  430206
-				CN
-
-C0-69-11   (hex)		Arista Networks
-C06911     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-E4-B5-55   (hex)		Huawei Device Co., Ltd.
-E4B555     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-24-A7-DC   (hex)		SKY UK LIMITED
-24A7DC     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-38-A6-CE   (hex)		SKY UK LIMITED
-38A6CE     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-AC-60-6F   (hex)		Nokia Shanghai Bell Co., Ltd.
-AC606F     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-00-19-FB   (hex)		SKY UK LIMITED
-0019FB     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-78-3E-53   (hex)		SKY UK LIMITED
-783E53     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-68-EC-8A   (hex)		IKEA of Sweden AB
-68EC8A     (base 16)		IKEA of Sweden AB
-				
-				    
-				
-
-48-02-AF   (hex)		Telit Communication s.p.a
-4802AF     (base 16)		Telit Communication s.p.a
-				Via stazione di prosecco 5B
-				SGONICO  Trieste  34010
-				IT
-
-FC-C7-37   (hex)		Shaanxi Gangsion Electronic Technology Co., Ltd
-FCC737     (base 16)		Shaanxi Gangsion Electronic Technology Co., Ltd
-				Room 12302, building 1, Greenland territorial sea, No. 6, Jinye Road, high tech Zone, Xi'an, Shaanxi
-				xi'an  Shaanxi  710076
-				CN
-
-94-28-6F   (hex)		zte corporation
-94286F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-40-0E-F3   (hex)		zte corporation
-400EF3     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-1C-46-D1   (hex)		SKY UK LIMITED
-1C46D1     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-00-3F-10   (hex)		Shenzhen GainStrong Technology Co., Ltd.
-003F10     (base 16)		Shenzhen GainStrong Technology Co., Ltd.
-				4/F, Building B, Hengmingzhu Industrial Park, Qian Jin Road 2, Baoan District
-				Shenzhen  Guangdong  518126
-				CN
-
-88-22-B2   (hex)		Chipsea Technologies (Shenzhen) Corp.
-8822B2     (base 16)		Chipsea Technologies (Shenzhen) Corp.
-				3 / F, Block A, Building 2, Shenzhen Bay Innovation Technology Center, No.3156 keyuan South Road, Yuehai Street, Nanshan District, Shenzhen
-				Shenzhen  Guangdong  518000
-				CN
-
-68-7A-64   (hex)		Intel Corporate
-687A64     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-BC-03-58   (hex)		Intel Corporate
-BC0358     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-88-B8-63   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
-88B863     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-BC-69-CB   (hex)		Panasonic Electric Works Networks Co., Ltd.
-BC69CB     (base 16)		Panasonic Electric Works Networks Co., Ltd.
-				2-12-7, Higashi-Shinbashi
-				Minato-Ku  Tokyo  105-0021
-				JP
-
-58-C5-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-58C57E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-74-3A-F4   (hex)		Intel Corporate
-743AF4     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-2C-93-FB   (hex)		Sercomm France Sarl
-2C93FB     (base 16)		Sercomm France Sarl
-				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
-				Moulineaux    92370
-				FR
-
-B4-46-6B   (hex)		REALTIMEID AS
-B4466B     (base 16)		REALTIMEID AS
-				Busk Bruns veg 1 , 7760 Snåsa (Norway)
-				Snåsa    7760
-				NO
-
-90-6A-EB   (hex)		Microsoft Corporation
-906AEB     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-C4-EB-39   (hex)		Sagemcom Broadband SAS
-C4EB39     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-52-C8   (hex)		Made Studio Design Ltd.
-0052C8     (base 16)		Made Studio Design Ltd.
-				10F., No. 169, Sec. 4, Zhongxiao E. Rd., Da-an Dist.
-				Taipei City    10690
-				TW
-
-08-9D-F4   (hex)		Intel Corporate
-089DF4     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-DC-46-28   (hex)		Intel Corporate
-DC4628     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-0C-91-92   (hex)		Intel Corporate
-0C9192     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-48-AD-9A   (hex)		Intel Corporate
-48AD9A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-68-65-B7   (hex)		Zhishang Chuanglian Technology Co., Ltd
-6865B7     (base 16)		Zhishang Chuanglian Technology Co., Ltd
-				2 / F, building F, hongfengtai Science Park, Jinyuan Road, Henggang street, Longgang District, 
-				Shenzhen    518000
-				CN
-
-F0-C1-CE   (hex)		GoodWe Technologies CO., Ltd
-F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
-				No.90 Zijin Rd.,New District,Suzhou,215011,China
-				Suzhou   JiangSu  215011
-				CN
-
-58-2B-0A   (hex)		Texas Instruments
-582B0A     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-38-E7-C0   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-38E7C0     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.2,Jin-da Road,Huinan Industrial Park
-				Hui Zhou  Guangdong  516025
-				CN
-
-D8-E8-44   (hex)		zte corporation
-D8E844     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E4-6A-35   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-E46A35     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-20-04-F3   (hex)		Honor Device Co., Ltd.
-2004F3     (base 16)		Honor Device Co., Ltd.
-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
-				Shenzhen   Guangdong  518040
-				CN
-
-68-B9-C2   (hex)		Earda Technologies co Ltd
-68B9C2     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-F8-D0-27   (hex)		Seiko Epson Corporation
-F8D027     (base 16)		Seiko Epson Corporation
-				2070 Kotobuki Koaka
-				Matsumoto-shi  Nagano-ken  399-8702
-				JP
-
-5C-66-6C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-5C666C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-4C-4B-F9   (hex)		IEEE Registration Authority
-4C4BF9     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-1C-EA-0B   (hex)		Edgecore Networks Corporation
-1CEA0B     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-44-EF-BF   (hex)		China Dragon Technology Limited
-44EFBF     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-B8-1F-5E   (hex)		Apption Labs Limited
-B81F5E     (base 16)		Apption Labs Limited
-				7-8 Westbridge Close
-				Leicester    LE3 5LW
-				GB
-
-D8-12-65   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-D81265     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-4C-B4-4A   (hex)		NANOWAVE Technologies Inc.
-4CB44A     (base 16)		NANOWAVE Technologies Inc.
-				425 Horner Avenue
-				Etobicoke  Ontario  M8W 4W3
-				CA
-
-04-8C-9A   (hex)		Huawei Device Co., Ltd.
-048C9A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-EC-3C-BB   (hex)		Huawei Device Co., Ltd.
-EC3CBB     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-8C-3A-7E   (hex)		Universal Electronics, Inc.
-8C3A7E     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-70-44-1C   (hex)		SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
-70441C     (base 16)		SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
-				7006 Caitian Rd., Futian Dist. 
-				Shen Zhen  Guang Dong  518035
-				CN
-
-B4-7C-59   (hex)		Jiangsu Hengxin Technology Co.,Ltd.
-B47C59     (base 16)		Jiangsu Hengxin Technology Co.,Ltd.
-				No.138 Taodu Road,Yixing city,Jiangsu Province,China
-				Yixing  Jiangsu  214200
-				CN
-
-30-0D-9E   (hex)		Ruijie Networks Co.,LTD
-300D9E     (base 16)		Ruijie Networks Co.,LTD
-				20# Building,Star-net Science Plaza,Juyuanzhou, 618 Jinshan Road
-				Fuzhou  Fujian  350002
-				CN
-
-EC-FA-5C   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-ECFA5C     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-F8-B4-6A   (hex)		Hewlett Packard
-F8B46A     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-BC-B0-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BCB0E7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-34-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5434EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-D5-A8   (hex)		ITEL MOBILE LIMITED
-88D5A8     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-20-85-93   (hex)		IEEE Registration Authority
-208593     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-AC-E3-42   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ACE342     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-17-C8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9017C8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-92-2A   (hex)		DBG HOLDINGS LIMITED
-E4922A     (base 16)		DBG HOLDINGS LIMITED
-				UNIT D, 6/F., UNISON INDUSTRIAL CENTRE, 27-31 AUPUI WAN STREET, FOTAN, N.T.
-				Hong Kong    999077
-				HK
-
-2C-64-1F   (hex)		Vizio, Inc
-2C641F     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-20-77-59   (hex)		OPTICAL NETWORK VIDEO TECHNOLOGIES (SHENZHEN) CO., LTD.
-207759     (base 16)		OPTICAL NETWORK VIDEO TECHNOLOGIES (SHENZHEN) CO., LTD.
-				The 4-6th Floor, No. 59, HuaNing Road, Xinwei Community, Dalang Street, Longhua District
-				Shenzhen    518000
-				CN
-
-54-E7-D5   (hex)		Sun Cupid Technology (HK) LTD
-54E7D5     (base 16)		Sun Cupid Technology (HK) LTD
-				Room 1201-3, 12/F., Tower 6
-				Tsim Sha Tsui    
-				HK
-
-18-90-88   (hex)		eero inc.
-189088     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-4C-56-DF   (hex)		Targus US LLC
-4C56DF     (base 16)		Targus US LLC
-				1211 North Miller Street
-				Anaheim  CA  92806
-				US
-
-24-15-10   (hex)		IEEE Registration Authority
-241510     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-6C-4D-51   (hex)		Shenzhen Ceres Technology Co., Ltd.
-6C4D51     (base 16)		Shenzhen Ceres Technology Co., Ltd.
-				#601, Fl6, Bldg F, No.1008  Yangguang Community, Xili, Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-88-9D-98   (hex)		Allied-telesisK.K.
-889D98     (base 16)		Allied-telesisK.K.
-				7-21-11 Nishi-Gotannda
-				Shinagawa-ku  Tokyo  141-0031
-				JP
-
-DC-F8-B9   (hex)		zte corporation
-DCF8B9     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-18-BF-1C   (hex)		Jiangsu Huitong Group Co.,Ltd.
-18BF1C     (base 16)		Jiangsu Huitong Group Co.,Ltd.
-				No. 24, Block 2, Taohuawu New District
-				Zhenjiang  Jiangsu  212003
-				CN
-
-AC-DE-48   (hex)		Private
-ACDE48     (base 16)		Private
-
-00-50-C7   (hex)		Private
-0050C7     (base 16)		Private
-
-00-20-67   (hex)		Private
-002067     (base 16)		Private
-
-48-01-C5   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-4801C5     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-B4-EE-25   (hex)		Shenzhen Belon Technology CO.,LTD
-B4EE25     (base 16)		Shenzhen Belon Technology CO.,LTD
-				Tsinghua Information
-				Shenzhen  Guangdong  518052
-				CN
-
-C8-2B-96   (hex)		Espressif Inc.
-C82B96     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-98-52-3D   (hex)		Sunitec Enterprise Co.,Ltd
-98523D     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-D0-15-A6   (hex)		Aruba, a Hewlett Packard Enterprise Company
-D015A6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-00-01-63   (hex)		Cisco Systems, Inc
-000163     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-5F-3D   (hex)		Cambridge Communication Systems Ltd
-205F3D     (base 16)		Cambridge Communication Systems Ltd
-				Victory House, Vision Park, Chivers Way, Histon
-				Cambridge    CB24 9ZR
-				GB
-
-E0-00-84   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E00084     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-A8-9C   (hex)		Creatz inc.
-2CA89C     (base 16)		Creatz inc.
-				16, Deogyeong-daero 1556beon-gil, Yeongtong-gu
-				Suwon-si,  Gyeonggi-do,   16690
-				KR
-
-4C-DC-0D   (hex)		Coral Telecom Limited
-4CDC0D     (base 16)		Coral Telecom Limited
-				E-2, Sector 63
-				Noida  Uttar Pradesh  201301
-				IN
-
-00-4E-01   (hex)		Dell Inc.
-004E01     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-C4-E1-A1   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-C4E1A1     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-AC-C3-58   (hex)		Continental Automotive Czech Republic s.r.o.
-ACC358     (base 16)		Continental Automotive Czech Republic s.r.o.
-				Průmyslová 1851
-				Brandýs nad Labem    250 01
-				CZ
-
-3C-EC-EF   (hex)		Super Micro Computer, Inc.
-3CECEF     (base 16)		Super Micro Computer, Inc.
-				980 Rock Ave
-				San Jose  CA  95131
-				US
-
-18-55-E3   (hex)		Apple, Inc.
-1855E3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-50-EB   (hex)		Apple, Inc.
-E450EB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-64-40   (hex)		Apple, Inc.
-886440     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-70-C0   (hex)		Apple, Inc.
-6070C0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-C3-71   (hex)		Apple, Inc.
-F0C371     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-FF-0A   (hex)		Wistron Neweb Corporation
-64FF0A     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-F0-99-19   (hex)		Garmin International
-F09919     (base 16)		Garmin International
-				1200 E. 151st St
-				Olathe  KS  66062
-				US
-
-00-00-DE   (hex)		CETIA
-0000DE     (base 16)		CETIA
-				150 RUE BERTHELOT
-				    
-				FR
-
-F4-3E-66   (hex)		Bee Computing (HK) Limited
-F43E66     (base 16)		Bee Computing (HK) Limited
-				Room 1902, 19/F, Lee Garden One 33 Hysan Avenue, Causeway Bay
-				Hong Kong    100043
-				HK
-
-DC-39-6F   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-DC396F     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-B4-C4-76   (hex)		Wuhan Maritime Communication Research Institute
-B4C476     (base 16)		Wuhan Maritime Communication Research Institute
-				No.312 Luoyu road, Hongshan District
-				Wuhan  Hubei  430079
-				CN
-
-68-34-89   (hex)		LEA Professional
-683489     (base 16)		LEA Professional
-				635 S. Lafayette Blvd
-				South Bend  IN  46601
-				US
-
-B4-6C-47   (hex)		Panasonic Appliances Company
-B46C47     (base 16)		Panasonic Appliances Company
-				2-3-1-2 Noji-higashi
-				Kusatsu City  Shiga  525-8555
-				JP
-
-44-42-2F   (hex)		TESTOP CO.,LTD.
-44422F     (base 16)		TESTOP CO.,LTD.
-				808RM Hanshin IT Tower ,272, Digital-ro
-				Guro-gu  Seoul  08389
-				KR
-
-54-9C-27   (hex)		Plasma Cloud Limited
-549C27     (base 16)		Plasma Cloud Limited
-				5/F, Yat Chau Building, 262 Des Voeux Road Central
-				Hong Kong    NA
-				HK
-
-D0-4E-50   (hex)		Mobiwire Mobiles (NingBo) Co., LTD
-D04E50     (base 16)		Mobiwire Mobiles (NingBo) Co., LTD
-				No.999 Dacheng East Road, Fenghua District, Ningbo City , Zhejiang Province, PRC
-				Ningbo  Zhejiang  315500
-				CN
-
-94-BF-80   (hex)		zte corporation
-94BF80     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-98-7A-14   (hex)		Microsoft Corporation
-987A14     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-C8-3D-DC   (hex)		Xiaomi Communications Co Ltd
-C83DDC     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-9C-3A-9A   (hex)		Shenzhen Sundray Technologies Company Limited
-9C3A9A     (base 16)		Shenzhen Sundray Technologies Company Limited
-				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-B5-E8   (hex)		Ruroc LTD
-B0B5E8     (base 16)		Ruroc LTD
-				Unit 2, Barnett Way, Barnwood Estate
-				Gloucester    GL4 3RT
-				GB
-
-04-D5-90   (hex)		Fortinet, Inc.
-04D590     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale  null  94086
-				US
-
-54-15-89   (hex)		MCS Logic Inc.
-541589     (base 16)		MCS Logic Inc.
-				A-1701, Munjeong-dong, SK V1 GL Metro City, 128, Beobwon-ro, Songpa-gu, 
-				seoul  seoul  05854
-				KR
-
-84-57-33   (hex)		Microsoft Corporation
-845733     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND    98052
-				US
-
-00-24-23   (hex)		AzureWave Technologies (Shanghai) Inc.
-002423     (base 16)		AzureWave Technologies (Shanghai) Inc.
-				NO. 8, LANE 66, CHENGBAO RD.
-				SHANGHAI    201801
-				CN
-
-8C-59-3C   (hex)		IEEE Registration Authority
-8C593C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-60-29-D5   (hex)		DAVOLINK Inc.
-6029D5     (base 16)		DAVOLINK Inc.
-				112, Beolmal-ro
-				Dongan-gu, Anyang-si  Gyeonggi-do  14057
-				KR
-
-50-97-44   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-509744     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-58-F3-9C   (hex)		Cisco Systems, Inc
-58F39C     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-C4-41-1E   (hex)		Belkin International Inc.
-C4411E     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista  null  90094
-				US
-
-00-AD-63   (hex)		Dedicated Micros Malta LTD
-00AD63     (base 16)		Dedicated Micros Malta LTD
-				Blb017, Qasam Industrijali Bulebel
-				ZEJTUN    ZTN 3000
-				MT
-
-E4-15-F6   (hex)		Texas Instruments
-E415F6     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-AC-42-28   (hex)		Parta Networks
-AC4228     (base 16)		Parta Networks
-				Teknopark Izmir No:38
-				URLA  IZMIR  35433
-				TR
-
-F4-1D-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F41D6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-7C-EC-9B   (hex)		Fuzhou Teraway Information Technology Co.,Ltd
-7CEC9B     (base 16)		Fuzhou Teraway Information Technology Co.,Ltd
-				2F, Building 5#, No. 59, Yangqi Road, Cangshan District
-				Fuzhou  Fujian  350000
-				CN
-
-CC-90-70   (hex)		Cisco Systems, Inc
-CC9070     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-28-41-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2841C6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-38-01-18   (hex)		ULVAC,Inc.
-380118     (base 16)		ULVAC,Inc.
-				2500 Hagizono
-				Chigasaki  Kanagawa  253-8543
-				JP
-
-14-AD-CA   (hex)		China Mobile Iot Limited company
-14ADCA     (base 16)		China Mobile Iot Limited company
-				No. 8 Yangliu North Road, Yubei District, Chongqing, China
-				Chong Qing  Chong Qing  401120
-				CN
-
-80-91-33   (hex)		AzureWave Technology Inc.
-809133     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-B4-F5-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B4F58E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-8F-C1   (hex)		DEEPTRACK S.L.U.
-C48FC1     (base 16)		DEEPTRACK S.L.U.
-				Avenida de Barajas 32, Parque E. Omega, Edificio A
-				Alcobendas    28100
-				ES
-
-F8-23-87   (hex)		Shenzhen Horn Audio Co.,Ltd.
-F82387     (base 16)		Shenzhen Horn Audio Co.,Ltd.
-				NO.6 4th GuiHua road,PingShan,
-				Shenzhen  Guangdong  518118
-				CN
-
-E8-28-C1   (hex)		Eltex Enterprise Ltd.
-E828C1     (base 16)		Eltex Enterprise Ltd.
-				Okruzhnaya st. 29v
-				Novosibirsk    630020
-				RU
-
-78-D3-47   (hex)		Ericsson AB
-78D347     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-A4-A1-79   (hex)		Nanjing dianyan electric power automation co. LTD
-A4A179     (base 16)		Nanjing dianyan electric power automation co. LTD
-				No. 29, liuzhou north road, pukou district
-				Nanjing  Jiangsu  210031
-				CN
-
-68-DB-67   (hex)		Nantong Coship Electronics Co., Ltd.
-68DB67     (base 16)		Nantong Coship Electronics Co., Ltd.
-				No.188 Xinsheng Road
-				Nantong    226000
-				US
-
-18-19-D6   (hex)		Samsung Electronics Co.,Ltd
-1819D6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-98-DF   (hex)		Motorola Mobility LLC, a Lenovo Company
-BC98DF     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-70-FC-8F   (hex)		FREEBOX SAS
-70FC8F     (base 16)		FREEBOX SAS
-				16 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-50-1B-32   (hex)		Taicang T&W Electronics
-501B32     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-98-0D-67   (hex)		Zyxel Communications Corporation
-980D67     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-00-02-D8   (hex)		BRECIS Communications Corporation
-0002D8     (base 16)		BRECIS Communications Corporation
-				2025 Gateway Place, Suite 132
-				San Jose  CA  95110
-				US
-
-B0-A6-F5   (hex)		Xaptum, Inc.
-B0A6F5     (base 16)		Xaptum, Inc.
-				350 W Ontario ST FL 4
-				Chicago  IL  60654
-				US
-
-AC-F5-E6   (hex)		Cisco Systems, Inc
-ACF5E6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-DC-B0-82   (hex)		Nokia
-DCB082     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-F8-C3-97   (hex)		NZXT Corp. Ltd.
-F8C397     (base 16)		NZXT Corp. Ltd.
-				13164 E. Temple Ave.
-				City of Industry  California  91746
-				US
-
-70-DD-A8   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-70DDA8     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-4C-6F-9C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4C6F9C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-78-2C-29   (hex)		New H3C Technologies Co., Ltd
-782C29     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-BC-9F-E4   (hex)		Aruba, a Hewlett Packard Enterprise Company
-BC9FE4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-70-2E-80   (hex)		DIEHL Connectivity Solutions
-702E80     (base 16)		DIEHL Connectivity Solutions
-				Stephanstraße 49
-				Nürnberg  Bayern  90478
-				DE
-
-AC-A4-6E   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-ACA46E     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-C8-B4-22   (hex)		ASKEY COMPUTER CORP
-C8B422     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-94-EE-9F   (hex)		HMD Global Oy
-94EE9F     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-DC-2A-A1   (hex)		MedHab LLC
-DC2AA1     (base 16)		MedHab LLC
-				3501 North US Highway 67
-				San Angelo  TX  76905
-				US
-
-E4-F3-E8   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-E4F3E8     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen   Guangdong  518000
-				CN
-
-F4-32-3D   (hex)		Sichuan tianyi kanghe communications co., LTD
-F4323D     (base 16)		Sichuan tianyi kanghe communications co., LTD
-				No.198, section 1, xueshan avenue, jinyuan town, dayi county, sichuan province
-				chengdu  sichuan  611330
-				CN
-
-F8-B7-97   (hex)		NEC Platforms, Ltd.
-F8B797     (base 16)		NEC Platforms, Ltd.
-				2-3 Kandatsukasamachi
-				Chiyodaku  Tokyo  101-8532
-				JP
-
-B0-AA-D2   (hex)		Sichuan tianyi kanghe communications co., LTD
-B0AAD2     (base 16)		Sichuan tianyi kanghe communications co., LTD
-				No.198, section 1, xueshan avenue, jinyuan town, dayi county, sichuan province
-				chengdu  sichuan  611330
-				CN
-
-10-93-97   (hex)		ARRIS Group, Inc.
-109397     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-50-75-F1   (hex)		ARRIS Group, Inc.
-5075F1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-C4-65-16   (hex)		Hewlett Packard
-C46516     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-E4-1E-0A   (hex)		IEEE Registration Authority
-E41E0A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-CC-A1-2B   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-CCA12B     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-				10F, TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan District
-				Shenzhen  Guangdong  518052
-				CN
-
-AC-00-D0   (hex)		zte corporation
-AC00D0     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E8-C4-17   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E8C417     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-00-1E-A3   (hex)		Nokia Danmark A/S
-001EA3     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-38-F3-2E   (hex)		Skullcandy
-38F32E     (base 16)		Skullcandy
-				6301 N. LANDMARK DRIVE
-				Park City    84098
-				US
-
-98-1E-19   (hex)		Sagemcom Broadband SAS
-981E19     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-84-B8-66   (hex)		Beijing XiaoLu technology co. LTD
-84B866     (base 16)		Beijing XiaoLu technology co. LTD
-				Room 002, floor 2, building 1, yard 4, BeiTuCheng East Road, ChaoYang district, Beijing
-				Beijing    100102
-				CN
-
-18-BC-5A   (hex)		Zhejiang Tmall Technology Co., Ltd.
-18BC5A     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, 
-				Shenzhen  Guangdong  518000
-				CN
-
-C4-C1-38   (hex)		OWLink Technology Inc
-C4C138     (base 16)		OWLink Technology Inc
-				760 Roosevelt
-				Irvine  CA  92620
-				US
-
-AC-37-C9   (hex)		RAID Incorporated
-AC37C9     (base 16)		RAID Incorporated
-				200 Brickstone Square
-				Andover  MA  01810
-				US
-
-20-58-69   (hex)		Ruckus Wireless
-205869     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-CC-37-AB   (hex)		Edgecore Networks Corporation
-CC37AB     (base 16)		Edgecore Networks Corporation
-				1 Creation Road 3.
-				Hsinchu  Hsinchu  30077
-				TW
-
-14-22-DB   (hex)		eero inc.
-1422DB     (base 16)		eero inc.
-				230 9th St.
-				San Francisco  CA  94103
-				US
-
-C8-63-14   (hex)		IEEE Registration Authority
-C86314     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-24-31-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-243154     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-58-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2C58E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-70-CD-91   (hex)		TERACOM TELEMATICA S.A
-70CD91     (base 16)		TERACOM TELEMATICA S.A
-				RUA AMERICA,1000
-				Eldorado do Sul  Rio Grande do Sul  92990-000
-				BR
-
-2C-18-75   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-2C1875     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-D0-6E-DE   (hex)		Sagemcom Broadband SAS
-D06EDE     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-18-39-9C   (hex)		Skorpios Technologies
-18399C     (base 16)		Skorpios Technologies
-				7401 Snaproll St NE
-				Albuquerque  NM  87109
-				US
-
-94-C2-BD   (hex)		TECNOBIT
-94C2BD     (base 16)		TECNOBIT
-				C/ FUDRE, 18
-				VALDEPEÑAS  CIUDAD REAL  13300
-				ES
-
-48-83-B4   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4883B4     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-84-B8-B8   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-84B8B8     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-D0-41-C9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D041C9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E8-01-8D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E8018D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-10-A3-B8   (hex)		Iskratel d.o.o.
-10A3B8     (base 16)		Iskratel d.o.o.
-				Ljubljanska cesta 24a
-				Kranj    4000
-				SI
-
-E8-EC-A3   (hex)		Dongguan Liesheng Electronic Co.Ltd
-E8ECA3     (base 16)		Dongguan Liesheng Electronic Co.Ltd
-				13th Floor South Building, Gosun Science Park, Hongtu Rd
-				Dongguan  Dongguan  523073
-				CN
-
-08-A6-BC   (hex)		Amazon Technologies Inc.
-08A6BC     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-70-1E-68   (hex)		Hanna Instruments, Inc.
-701E68     (base 16)		Hanna Instruments, Inc.
-				584 Park East Dr.
-				Woonsocket  RI  02895
-				US
-
-1C-B3-E9   (hex)		 Shenzhen Zhongke United Communication Technology 
-1CB3E9     (base 16)		 Shenzhen Zhongke United Communication Technology 
-				6C jiajiahao commercial building, Shennan avenue
-				Shenzhen  Guangdong  518000
-				CN
-
-8C-96-5F   (hex)		Shandong Zhongan Technology Co., Ltd.
-8C965F     (base 16)		Shandong Zhongan Technology Co., Ltd.
-				North of Kejia Road, East District, Jinan High-tech Zone
-				Jinan  Shandong  250100
-				CN
-
-C0-07-4A   (hex)		Brita GmbH
-C0074A     (base 16)		Brita GmbH
-				Heinrich-Hertz-Str. 4
-				Taunusstein    65232
-				DE
-
-E8-B2-FE   (hex)		HUMAX Co., Ltd.
-E8B2FE     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-80-FD-7A   (hex)		BLU Products Inc
-80FD7A     (base 16)		BLU Products Inc
-				10814 NW 33rd Street
-				Miami  FL  33172
-				US
-
-00-17-FA   (hex)		Microsoft Corporation
-0017FA     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				Redmond  Washington  98052-6399
-				US
-
-94-16-25   (hex)		Apple, Inc.
-941625     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-3B-30   (hex)		duagon AG
-543B30     (base 16)		duagon AG
-				Riedstrasse 12
-				Zürich  Dietikon  8953
-				CH
-
-40-F2-1C   (hex)		DASAN Zhone Solutions
-40F21C     (base 16)		DASAN Zhone Solutions
-				7195 Oakport Street
-				Oakland  CA  94621
-				US
-
-B0-BB-8B   (hex)		WAVETEL TECHNOLOGY LIMITED
-B0BB8B     (base 16)		WAVETEL TECHNOLOGY LIMITED
-				ROOM 1611B, 16/F, HO KING COMMERCIAL CENTRE, 2-16 FAYUEN STREET, MONGKOK, KOWLOON
-				HONGKONG    999077
-				CN
-
-34-A8-EB   (hex)		Apple, Inc.
-34A8EB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-BF-C4   (hex)		Ruckus Wireless
-94BFC4     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-A4-83-E7   (hex)		Apple, Inc.
-A483E7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-AF-E7   (hex)		Apple, Inc.
-F4AFE7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-88-FD   (hex)		Apple, Inc.
-AC88FD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-3E-7C   (hex)		LeiShen Intelligent  System Co.Ltd
-503E7C     (base 16)		LeiShen Intelligent  System Co.Ltd
-				4th Floor,No.1 Commercial Building,Cultural Center,Tanggang Road,Tanggang Community,Shajing Street,Baoan District
-				Shenzhen  Guangdong  518104
-				CN
-
-24-58-6E   (hex)		zte corporation
-24586E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B4-A3-05   (hex)		XIAMEN YAXON NETWORK CO., LTD.
-B4A305     (base 16)		XIAMEN YAXON NETWORK CO., LTD.
-				46#,Guanri Road, Software Park II
-				Xiamen  Fujian  361008
-				CN
-
-80-3E-48   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-803E48     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-24-3F-30   (hex)		Oxygen Broadband s.a.
-243F30     (base 16)		Oxygen Broadband s.a.
-				2 Messogeion ave., Athens Tower
-				Athens  Attiki  11527
-				GR
-
-3C-91-80   (hex)		Liteon Technology Corporation
-3C9180     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-20-32-6C   (hex)		Samsung Electronics Co.,Ltd
-20326C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-89-F1   (hex)		Samsung Electronics Co.,Ltd
-6489F1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-20-34-FB   (hex)		Xiaomi Communications Co Ltd
-2034FB     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-A8-9C-ED   (hex)		Xiaomi Communications Co Ltd
-A89CED     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-6C-A6-04   (hex)		ARRIS Group, Inc.
-6CA604     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-5C-F9-DD   (hex)		Dell Inc.
-5CF9DD     (base 16)		Dell Inc.
-				One Dell way
-				Round Rock    78682
-				US
-
-D0-EC-35   (hex)		Cisco Systems, Inc
-D0EC35     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-10-AE-60   (hex)		Private
-10AE60     (base 16)		Private
-
-BC-CF-4F   (hex)		Zyxel Communications Corporation
-BCCF4F     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-C0-10-B1   (hex)		HMD Global Oy
-C010B1     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-90-89-5F   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-90895F     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-48-D8-45   (hex)		Shenzhen Mainuoke Electronics Co., Ltd
-48D845     (base 16)		Shenzhen Mainuoke Electronics Co., Ltd
-				9th Floor, Hengtemei Building, Buji
-				Shenzhen  Guangdong  518000
-				CN
-
-0C-E0-41   (hex)		iDruide
-0CE041     (base 16)		iDruide
-				19 Rue de la Turbie
-				MONACO    98000
-				MC
-
-B8-8F-B4   (hex)		JABIL CIRCUIT ITALIA S.R.L
-B88FB4     (base 16)		JABIL CIRCUIT ITALIA S.R.L
-				via andrea appiani 12
-				milano    20121
-				IT
-
-00-52-C2   (hex)		peiker acustic GmbH
-0052C2     (base 16)		peiker acustic GmbH
-				Max-Planck-Strasse 28-32
-				Friedrichsdorf    61381
-				DE
-
-8C-53-D2   (hex)		China Mobile Group Device Co.,Ltd.
-8C53D2     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-D4-53-83   (hex)		Murata Manufacturing Co., Ltd.
-D45383     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-A0-42-46   (hex)		IT Telecom Co., Ltd.
-A04246     (base 16)		IT Telecom Co., Ltd.
-				517 TheOvalley 555-9 Hogye-dong, Dong An-gu
-				Anyang-si   Gyeonggi-do  14117
-				KR
-
-0C-F4-75   (hex)		Zliide Technologies ApS
-0CF475     (base 16)		Zliide Technologies ApS
-				Sverigesgade 6
-				Aarhus    8000
-				DK
-
-68-FF-7B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-68FF7B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-80-8F-1D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-808F1D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-12-4E   (hex)		XAC AUTOMATION CORP.
-00124E     (base 16)		XAC AUTOMATION CORP.
-				4F, 30 Industry E. Road IX
-				Hsin-Chu    300
-				US
-
-88-E0-34   (hex)		Shinwa industries(China) ltd.
-88E034     (base 16)		Shinwa industries(China) ltd.
-				No.26,Huifeng West 2 Road,Zhongkai High-tech Zone
-				Huizhou  Guangdong  516006
-				CN
-
-48-BD-0E   (hex)		Quanta Storage Inc.
-48BD0E     (base 16)		Quanta Storage Inc.
-				3F. No.188, Wenhua 2nd Rd
-				Taoyuan City  Guishan District  33383
-				TW
-
-00-0F-69   (hex)		SEW Eurodrive GmbH & Co. KG
-000F69     (base 16)		SEW Eurodrive GmbH & Co. KG
-				Ernst Blickle Str. 42
-				Bruchsal    76646
-				DE
-
-E4-58-E7   (hex)		Samsung Electronics Co.,Ltd
-E458E7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-10-4A   (hex)		The Parvus Corporation
-00104A     (base 16)		The Parvus Corporation
-				3222 S Washington St.
-				Salt Lake City  UT  84115
-				US
-
-D0-58-C0   (hex)		Qingdao Haier Multimedia Limited. 
-D058C0     (base 16)		Qingdao Haier Multimedia Limited. 
-				Pingban Building, Haier Industry Park, Laoshan District,
-				Qingdao  Shandong  266103
-				CN
-
-48-C3-B0   (hex)		Pharos Co.Ltd
-48C3B0     (base 16)		Pharos Co.Ltd
-				503 Ogong-ro 144  Deokjin-gu
-				Jeonju-si     54873
-				KR
-
-DC-58-BC   (hex)		Thomas-Krenn.AG
-DC58BC     (base 16)		Thomas-Krenn.AG
-				Speltenbach-Steinaecker 1
-				Freyung    94078
-				DE
-
-00-10-25   (hex)		Grayhill, Inc
-001025     (base 16)		Grayhill, Inc
-				561 Hillgrove Ave
-				LaGrange  IL  60525
-				US
-
-38-21-C7   (hex)		Aruba, a Hewlett Packard Enterprise Company
-3821C7     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-A4-5F-9B   (hex)		Nexell
-A45F9B     (base 16)		Nexell
-				12F, 31 Hwangsaeul-ro 258 beon-gil, Bundang-gu
-				Seongnam-si, Gyeonggi-do    13595
-				KR
-
-70-EA-1A   (hex)		Cisco Systems, Inc
-70EA1A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-80-8A-8B   (hex)		vivo Mobile Communication Co., Ltd.
-808A8B     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-98-44-B6   (hex)		INFRANOR SAS
-9844B6     (base 16)		INFRANOR SAS
-				Avenue Jean Moulin
-				LOURDES    65100
-				FR
-
-38-83-9A   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-38839A     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-DC-67-23   (hex)		barox Kommunikation GmbH
-DC6723     (base 16)		barox Kommunikation GmbH
-				Marie-Curie-Strasse 8
-				Lörrach    DE-79539
-				DE
-
-94-B4-0F   (hex)		Aruba, a Hewlett Packard Enterprise Company
-94B40F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-00-1A-1E   (hex)		Aruba, a Hewlett Packard Enterprise Company
-001A1E     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-00-24-6C   (hex)		Aruba, a Hewlett Packard Enterprise Company
-00246C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-20-1B-C9   (hex)		Juniper Networks
-201BC9     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C8-F6-C8   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-C8F6C8     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-1C-3B-8F   (hex)		Selve GmbH & Co. KG
-1C3B8F     (base 16)		Selve GmbH & Co. KG
-				Werdohler Landstraße 286
-				Lüdenscheid    58513
-				DE
-
-E4-E7-49   (hex)		Hewlett Packard
-E4E749     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-EC-C5-7F   (hex)		Suzhou Pairlink Network Technology
-ECC57F     (base 16)		Suzhou Pairlink Network Technology
-				Room304, Building 4, No.209, Zhu Yuan Road, Suzhou new district
-				Suzhou  Jiangsu  215011
-				CN
-
-38-C2-BA   (hex)		CCTV NEOTECH
-38C2BA     (base 16)		CCTV NEOTECH
-				68, Digital-ro 9-gil, Geumcheon-gu
-				Seoul    ks013
-				KR
-
-A0-F9-B7   (hex)		Ademco Smart Homes Technology(Tianjin)Co.,Ltd.
-A0F9B7     (base 16)		Ademco Smart Homes Technology(Tianjin)Co.,Ltd.
-				No.156 Nanhai Road,TEDA, Jinbin Development Park , 21st Factory Building
-				Tianjin  Tianjin  300457
-				CN
-
-A8-3C-CB   (hex)		ROSSMA
-A83CCB     (base 16)		ROSSMA
-				 Malkova,12-108
-				PERM    614087
-				RU
-
-88-6F-D4   (hex)		Dell Inc.
-886FD4     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-CC-3F-EA   (hex)		BAE Systems, Inc
-CC3FEA     (base 16)		BAE Systems, Inc
-				1098 Clark St
-				Endicott  NY  13760
-				US
-
-4C-F2-BF   (hex)		Cambridge Industries(Group) Co.,Ltd.
-4CF2BF     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				22 Floor,Qilai Tower;889 Yishan Road
-				Shanghai    200233
-				CN
-
-CC-9E-A2   (hex)		Amazon Technologies Inc.
-CC9EA2     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno    89507
-				US
-
-AC-43-30   (hex)		Versa Networks
-AC4330     (base 16)		Versa Networks
-				6001 America center Drive, Suite 400
-				San Jose  CA  95070
-				US
-
-E8-5B-B7   (hex)		Ample Systems Inc.
-E85BB7     (base 16)		Ample Systems Inc.
-				11F-2, No. 95 Minquan Rd.
-				New Taipei City     231
-				TW
-
-94-67-7E   (hex)		Belden India Private Limited
-94677E     (base 16)		Belden India Private Limited
-				Plot No. D-228, Chakan MIDC Phase 2, 
-				Village Bhamboli, Taluka:Khed  Pune, Maharashtra  410 507
-				IN
-
-AC-57-75   (hex)		HMD Global Oy
-AC5775     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-D4-3A-2E   (hex)		SHENZHEN MTC CO LTD
-D43A2E     (base 16)		SHENZHEN MTC CO LTD
-				5th Floor, 3rd Building, SHENZHEN MTC Industrial Park, XiaLilang Rd, Nanwan Street, Long’gang District
-				Shenzhen  Guangdong  518100
-				CN
-
-50-AD-92   (hex)		NX Technologies
-50AD92     (base 16)		NX Technologies
-				5F(OS Building), 57, Daeril-2gil, Beomseo-eup
-				Ulsan    44922
-				KR
-
-00-32-17   (hex)		Cisco Systems, Inc
-003217     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-94-E0-D6   (hex)		China Dragon Technology Limited
-94E0D6     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-B4-A9-FC   (hex)		Quanta Computer Inc.
-B4A9FC     (base 16)		Quanta Computer Inc.
-				No. 211, Wen-Hwa 2nd Rd.,Kuei-Shan Dist.
-				Taoyuan City  Taiwan  33377
-				TW
-
-6C-A9-36   (hex)		DisplayLink (UK) Ltd
-6CA936     (base 16)		DisplayLink (UK) Ltd
-				140 Science Park, Milton road
-				Cambridge  Cambridgeshire  CB4 0GF
-				GB
-
-70-85-40   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-708540     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-08-F1-EA   (hex)		Hewlett Packard Enterprise
-08F1EA     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-F0-0D-F5   (hex)		ACOMA Medical Industry Co,. Ltd.
-F00DF5     (base 16)		ACOMA Medical Industry Co,. Ltd.
-				2-14-14 hongo
-				bunkyo-ku  Tokyo  113-0033
-				JP
-
-68-45-F1   (hex)		TOSHIBA CLIENT SOLUTIONS CO., LTD.
-6845F1     (base 16)		TOSHIBA CLIENT SOLUTIONS CO., LTD.
-				Tachihi Building No.2, 6-1-3, Sakae-Cho
-				Tachikawa-shi  Tokyo  190-0003
-				JP
-
-78-B2-13   (hex)		DWnet Technologies(Suzhou) Corporation
-78B213     (base 16)		DWnet Technologies(Suzhou) Corporation
-				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
-				Suzhou    21500
-				CN
-
-58-C2-32   (hex)		NEC Corporation
-58C232     (base 16)		NEC Corporation
-				1753, Shimonumabe, Nakahara-Ku, Kawasaki
-				Kanagawa    211-8666
-				JP
-
-38-1D-14   (hex)		Skydio Inc.
-381D14     (base 16)		Skydio Inc.
-				114 Hazel Ave
-				Redwood City  CA  94061
-				US
-
-7C-DB-98   (hex)		ASKEY COMPUTER CORP
-7CDB98     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-38-0B-3C   (hex)		Texas Instruments
-380B3C     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-9C-8C-D8   (hex)		Hewlett Packard Enterprise
-9C8CD8     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-A4-8C-C0   (hex)		JLG Industries, Inc.
-A48CC0     (base 16)		JLG Industries, Inc.
-				13224 Fountainhead Plaza
-				Hagerstown  MD  21742
-				US
-
-3C-28-6D   (hex)		Google, Inc.
-3C286D     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-00-09-3A   (hex)		Molex CMS
-00093A     (base 16)		Molex CMS
-				5224 Katrine Avenue
-				Downers Grove  IL  60515
-				US
-
-04-F9-D9   (hex)		Speaker Electronic(Jiashan) Co.,Ltd
-04F9D9     (base 16)		Speaker Electronic(Jiashan) Co.,Ltd
-				No. 8 Development Zone Road, Huimin Sub-district
-				 Jiashan  Zhejiang  314112
-				CN
-
-DC-08-0F   (hex)		Apple, Inc.
-DC080F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-E9-4E   (hex)		Apple, Inc.
-F8E94E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-2C-E2   (hex)		Apple, Inc.
-EC2CE2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-BC-60   (hex)		Apple, Inc.
-40BC60     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-36-17   (hex)		Apple, Inc.
-E83617     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-64-8B   (hex)		Apple, Inc.
-9C648B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-42-62   (hex)		Apple, Inc.
-344262     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-D0-0D   (hex)		Apple, Inc.
-14D00D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-D2-11   (hex)		Eko Devices, Inc.
-88D211     (base 16)		Eko Devices, Inc.
-				2600 10th St Ste 260
-				Berkeley  CA  94710-2597
-				US
-
-B8-C2-27   (hex)		PSTec
-B8C227     (base 16)		PSTec
-				#80, Hwanggeum 3-ro 7beon-gil, Yangchon-eup
-				Gimpo-si  Gyeonggi-do  10048
-				KR
-
-74-F7-37   (hex)		KCE
-74F737     (base 16)		KCE
-				5F KCE B/D,34,Annam-ro 369beon-gil,Bupyoung-gu
-				Incheon    21312
-				KR
-
-48-A4-93   (hex)		TAIYO YUDEN CO.,LTD
-48A493     (base 16)		TAIYO YUDEN CO.,LTD
-				8-1, Sakae-cho
-				Takasaki-shi  Gunma  370-8522
-				JP
-
-E8-2C-6D   (hex)		SmartRG, Inc.
-E82C6D     (base 16)		SmartRG, Inc.
-				501 SE Columbia Shores Blvd
-				Vancouver  WA  98661
-				US
-
-48-E6-95   (hex)		Insigma Inc
-48E695     (base 16)		Insigma Inc
-				43490, Yukon Drive, Suite 102
-				Ashburn  VA  20147
-				US
-
-B4-79-C8   (hex)		Ruckus Wireless
-B479C8     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-B4-0B-78   (hex)		Brusa Elektronik AG
-B40B78     (base 16)		Brusa Elektronik AG
-				Neudorf 14
-				Sennwald  St. Gallen  9466
-				CH
-
-C0-3D-D9   (hex)		MitraStar Technology Corp.
-C03DD9     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-2C-AA-8E   (hex)		Wyze Labs Inc
-2CAA8E     (base 16)		Wyze Labs Inc
-				4030 Lake Washington Boulevard NE
-				Kirkland  WA  98033
-				US
-
-70-3A-51   (hex)		Xiaomi Communications Co Ltd
-703A51     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-DC-48-B2   (hex)		Baraja Pty. Ltd.
-DC48B2     (base 16)		Baraja Pty. Ltd.
-				36 Bradfield Road
-				West Lindfield  NSW  2070
-				AU
-
-18-1E-95   (hex)		AuVerte
-181E95     (base 16)		AuVerte
-				14 Riverview Road
-				Niantic  CT  06357
-				US
-
-0C-95-41   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-0C9541     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
-				SHEN ZHEN  GUANG DONG  518000
-				CN
-
-3C-37-86   (hex)		NETGEAR
-3C3786     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-48-35-2E   (hex)		Shenzhen Wolck Network Product Co.,LTD
-48352E     (base 16)		Shenzhen Wolck Network Product Co.,LTD
-				9# BuJi BanTian LongBi Industry Area
-				Shenzhen  Guangdong  518129
-				CN
-
-04-E5-98   (hex)		Xiaomi Communications Co Ltd
-04E598     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-B8-2C-A0   (hex)		Resideo
-B82CA0     (base 16)		Resideo
-				2 Corporate Center Dr.
-				Melville  NY  11747
-				US
-
-6C-C7-EC   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-6CC7EC     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-B0-33-A6   (hex)		Juniper Networks
-B033A6     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-D8-96-85   (hex)		GoPro
-D89685     (base 16)		GoPro
-				3000 Clearview Way
-				San Mateo  CA  94402
-				US
-
-C0-BD-C8   (hex)		Samsung Electronics Co.,Ltd
-C0BDC8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-7B-CE   (hex)		Samsung Electronics Co.,Ltd
-647BCE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-87-B3   (hex)		Samsung Electronics Co.,Ltd
-A887B3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-6C-00-6B   (hex)		Samsung Electronics Co.,Ltd
-6C006B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-10-60   (hex)		BILLIONTON SYSTEMS, INC.
-001060     (base 16)		BILLIONTON SYSTEMS, INC.
-				3F-1, NO. 8, LANE 99
-				HSIN-CHU    
-				TW
-
-C4-D4-89   (hex)		JiangSu Joyque Information Industry Co.,Ltd
-C4D489     (base 16)		JiangSu Joyque Information Industry Co.,Ltd
-				10  Floor YaHua Building, Xi'anBei Road,
-				Xuzhou  JiangSu  221006
-				CN
-
-B4-F9-49   (hex)		optilink networks pvt ltd
-B4F949     (base 16)		optilink networks pvt ltd
-				501/502, sanjona complex, hemu kalani marg, chembur
-				mumbai  maharashtra  400071
-				IN
-
-E4-3C-80   (hex)		University of Oklahoma
-E43C80     (base 16)		University of Oklahoma
-				Advanced Radar Research Center
-				Norman  OK  73019
-				US
-
-3C-2C-30   (hex)		Dell Inc.
-3C2C30     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-70-6D-15   (hex)		Cisco Systems, Inc
-706D15     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-A1-E4   (hex)		Innotube, Inc.
-A4A1E4     (base 16)		Innotube, Inc.
-				#1212 MegaCenter SknTechnoPark 124 Sagimakgol-ro Jungwon-gu
-				Seongnam-si  Gyeonggi-do  462-120
-				KR
-
-94-EA-EA   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-94EAEA     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-				Av. Buriti, 1900 – Setor B – Distrito Industrial
-				Manaus  Amazonas  69075-000
-				BR
-
-1C-FD-08   (hex)		IEEE Registration Authority
-1CFD08     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B8-59-9F   (hex)		Mellanox Technologies, Inc.
-B8599F     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-30-13-89   (hex)		Siemens AG, Automations & Drives,
-301389     (base 16)		Siemens AG, Automations & Drives,
-				Systems Engineering
-				FÃ¼rth  Deutschlang  90766
-				DE
-
-98-D3-E7   (hex)		Netafim L
-98D3E7     (base 16)		Netafim L
-				Kibutz Magal
-				Kibutz Magal    38845
-				IL
-
-F0-63-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F063F9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-C3-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7CC385     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-0E-B3   (hex)		Shenzhen Amediatech Technology Co., Ltd.
-900EB3     (base 16)		Shenzhen Amediatech Technology Co., Ltd.
-				2th floor, block A, building B, Minsheng Industrial Zone, Longhua District
-				Shenzhen  Guangdong  518109
-				CN
-
-54-9F-AE   (hex)		iBASE Gaming Inc
-549FAE     (base 16)		iBASE Gaming Inc
-				2F., No.542-17, Zhongzheng Rd
-				Xinzhuang Dist., New Taipei City    24255
-				TW
-
-54-80-28   (hex)		Hewlett Packard Enterprise
-548028     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-54-06-8B   (hex)		Ningbo Deli Kebei Technology Co.LTD
-54068B     (base 16)		Ningbo Deli Kebei Technology Co.LTD
-				zone 2nd , 301#, Road Xuxiake, Ninghai yuelong district
-				ningbo  Zhejiang  315600
-				CN
-
-60-CE-92   (hex)		The Refined Industry Company Limited
-60CE92     (base 16)		The Refined Industry Company Limited
-				7/F Sun King Factory Bldg,1 - 7 Shing Chuen Road, Shatin, NT
-				Hong Kong  NT  000000
-				HK
-
-10-5B-AD   (hex)		Mega Well Limited
-105BAD     (base 16)		Mega Well Limited
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-74-BF-C0   (hex)		CANON INC.
-74BFC0     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-C8-D9-D2   (hex)		Hewlett Packard
-C8D9D2     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-24-FC-E5   (hex)		Samsung Electronics Co.,Ltd
-24FCE5     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-80-96-21   (hex)		Lenovo
-809621     (base 16)		Lenovo
-				1009 Think Place
-				Morrisvilee  NC  27560
-				US
-
-78-05-5F   (hex)		Shenzhen WYC Technology Co., Ltd.
-78055F     (base 16)		Shenzhen WYC Technology Co., Ltd.
-				No.618 Wenzhengxin Building，Hi-tech Park，Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-00-EA-BD   (hex)		Cisco Systems, Inc
-00EABD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-48-87-2D   (hex)		SHEN ZHEN DA XIA LONG QUE TECHNOLOGY CO.,LTD
-48872D     (base 16)		SHEN ZHEN DA XIA LONG QUE TECHNOLOGY CO.,LTD
-				Room 511, Building C,  Yuxing Technology Park, Gushu Second Road, Bao’an District
-				SHEN ZHEN  GUANG DONG  518000
-				CN
-
-E8-1A-58   (hex)		TECHNOLOGIC SYSTEMS
-E81A58     (base 16)		TECHNOLOGIC SYSTEMS
-				16525 E Laser Dr
-				Fountain Hills  AZ  85268-6534
-				US
-
-C0-BF-A7   (hex)		Juniper Networks
-C0BFA7     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-F0-54-94   (hex)		Honeywell Connected Building
-F05494     (base 16)		Honeywell Connected Building
-				1985 DOUGLAS DRIVE
-				Golden Valley  MN  55422
-				US
-
-5C-C9-99   (hex)		New H3C Technologies Co., Ltd
-5CC999     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-B0-2A-43   (hex)		Google, Inc.
-B02A43     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-C4-74-F8   (hex)		Hot Pepper, Inc.
-C474F8     (base 16)		Hot Pepper, Inc.
-				5151 California Ave., Suite 100, 
-				Irvine     92617
-				US
-
-14-22-33   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-142233     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-74-34-00   (hex)		MTG Co., Ltd.
-743400     (base 16)		MTG Co., Ltd.
-				MTG No. 2 HIKARI Bldg., 4-13 Honjindori
-				Nakamura-ku, Nagoya  Aichi  453-0041
-				JP
-
-DC-37-57   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-DC3757     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-50-99   (hex)		3COM EUROPE LTD
-005099     (base 16)		3COM EUROPE LTD
-				BOUNDARY WAY
-				HERTS. HP2 7YU      vvvvvv
-				GB
-
-04-BC-87   (hex)		Shenzhen JustLink Technology Co., LTD
-04BC87     (base 16)		Shenzhen JustLink Technology Co., LTD
-				Room 5002,The 2nd Unit  of  the   Building  East,   Laobing   Building, No.3012  Xingye Road,Baoan District
-				Shenzhen  Guangdong Province  518101
-				CN
-
-54-C3-3E   (hex)		Ciena Corporation
-54C33E     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-EC-79-F2   (hex)		Startel
-EC79F2     (base 16)		Startel
-				Xi Chuang Industrial Park，Second industrial district of Guan Long Village，Xili town ，Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-BC-B2-2B   (hex)		EM-Tech
-BCB22B     (base 16)		EM-Tech
-				40, Changwon-daero 1144beon-gil
-				Seongsan-gu Changwon  Gyeongsangnam-do  KR 642-120
-				KR
-
-D4-AB-82   (hex)		ARRIS Group, Inc.
-D4AB82     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-70-4F-B8   (hex)		ARRIS Group, Inc.
-704FB8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-60-EB   (hex)		FOURTHTRACK SYSTEMS
-0060EB     (base 16)		FOURTHTRACK SYSTEMS
-				UNIT 3 THE SYCAMORES
-				MARLOW - SL7 1QB    
-				GB
-
-18-62-E4   (hex)		Texas Instruments
-1862E4     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-60-35-C0   (hex)		SFR
-6035C0     (base 16)		SFR
-				12 rue jean-philippe Rameau CS 80001
-				La plaine saint denis   FRANCE  93634
-				FR
-
-C4-98-5C   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-C4985C     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-30-A1-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-30A1FA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-2E-90   (hex)		PALIT MICROSYSTEMS, LTD
-242E90     (base 16)		PALIT MICROSYSTEMS, LTD
-				21F.,No.88,Sec.2,Zhongxiao E.Rd.,Golden Tower,
-				TAIPEI    100
-				TW
-
-9C-AA-1B   (hex)		Microsoft Corporation
-9CAA1B     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-A8-9A-93   (hex)		Sagemcom Broadband SAS
-A89A93     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-1A-C5   (hex)		Keysight Technologies, Inc.
-001AC5     (base 16)		Keysight Technologies, Inc.
-				1400 Fountaingrove Pkwy.
-				Santa Rosa  CA  95403
-				US
-
-00-20-1E   (hex)		NETQUEST CORPORATION
-00201E     (base 16)		NETQUEST CORPORATION
-				523 FELLOWSHIP ROAD-STE.#205
-				MT. LAUREL  NJ  08054
-				US
-
-64-62-8A   (hex)		evon GmbH
-64628A     (base 16)		evon GmbH
-				Frank-Stronach-Straße 8
-				Gleisdorf  Styria  8200
-				AT
-
-04-15-D9   (hex)		Viwone
-0415D9     (base 16)		Viwone
-				54 - 56 , Avenue Hoche
-				Paris    75008
-				FR
-
-EC-B3-13   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-ECB313     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-B0-8B-CF   (hex)		Cisco Systems, Inc
-B08BCF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-60-8C   (hex)		3COM
-00608C     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-A0-24   (hex)		3COM
-00A024     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-20-AF   (hex)		3COM
-0020AF     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-10-4B   (hex)		3COM
-00104B     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-A8-5A-F3   (hex)		Shanghai Siflower Communication Technology Co., Ltd
-A85AF3     (base 16)		Shanghai Siflower Communication Technology Co., Ltd
-				 Rm. 408, No. 84, Lane 887. Zhangjiang Hi-Tech Park. Zuchongzhi Rd. Shanghai, China
-				Shanghai  Shanghai  201210
-				CN
-
-70-FD-46   (hex)		Samsung Electronics Co.,Ltd
-70FD46     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-8C-83-E1   (hex)		Samsung Electronics Co.,Ltd
-8C83E1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-9F-6F   (hex)		Samsung Electronics Co.,Ltd
-889F6F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-5C-63-C9   (hex)		Intellithings Ltd.
-5C63C9     (base 16)		Intellithings Ltd.
-				Hanehoshet 10
-				Tel Aviv  Israel  6971072
-				IL
-
-0C-96-E6   (hex)		Cloud Network Technology (Samoa) Limited
-0C96E6     (base 16)		Cloud Network Technology (Samoa) Limited
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-E0-0E-E1   (hex)		We Corporation Inc.
-E00EE1     (base 16)		We Corporation Inc.
-				201, 33, Deokcheon-ro, Manan-gu
-				Anyang-si  Gyeonggi-do  14088
-				KR
-
-00-0C-43   (hex)		Ralink Technology, Corp.
-000C43     (base 16)		Ralink Technology, Corp.
-				4F, No.2, Technology 5th Road,
-				Hsin-Chu    200
-				TW
-
-8C-92-46   (hex)		Oerlikon Textile Gmbh&Co.KG
-8C9246     (base 16)		Oerlikon Textile Gmbh&Co.KG
-				NO.9 Changyang Street
-				Suzhou  Jiangsu  215000
-				CN
-
-00-0E-94   (hex)		Maas International BV
-000E94     (base 16)		Maas International BV
-				Science Park Eindhoven 5051
-				Son  Noord Brabant  NL-5692 EB
-				NL
-
-48-98-CA   (hex)		Sichuan AI-Link Technology Co., Ltd.
-4898CA     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-24-7E-51   (hex)		zte corporation
-247E51     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E8-B5-41   (hex)		zte corporation
-E8B541     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-0C-9D-92   (hex)		ASUSTek COMPUTER INC.
-0C9D92     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-98-8E-D4   (hex)		ITEL MOBILE LIMITED
-988ED4     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-E8-A7-88   (hex)		XIAMEN LEELEN TECHNOLOGY CO., LTD
-E8A788     (base 16)		XIAMEN LEELEN TECHNOLOGY CO., LTD
-				65 Sunban South Rd., Jimei North Industrial Zone, 
-				Xiamen   Fujian  361021
-				CN
-
-58-2D-34   (hex)		Qingping Electronics (Suzhou) Co., Ltd
-582D34     (base 16)		Qingping Electronics (Suzhou) Co., Ltd
-				Room 304, A3 Building, NO.88 Dongchang Road, Suzhou Industrial Park
-				Suzhou  Jiangsu Province  215028
-				CN
-
-20-DE-88   (hex)		IC Realtime LLC
-20DE88     (base 16)		IC Realtime LLC
-				3050 N Andrews Ave Ext.
-				Pompano Beach  FL  33064
-				US
-
-F4-06-8D   (hex)		devolo AG
-F4068D     (base 16)		devolo AG
-				Charlottenburger Allee 67
-				Aachen  NRW  52068
-				DE
-
-00-1A-31   (hex)		SCAN COIN AB
-001A31     (base 16)		SCAN COIN AB
-				Jagershillgatan 26
-				Malmö  Skåne  21375
-				SE
-
-00-1B-84   (hex)		Scan Engineering Telecom
-001B84     (base 16)		Scan Engineering Telecom
-				Svobody str. 75
-				Voronezh    394030
-				RU
-
-48-2C-A0   (hex)		Xiaomi Communications Co Ltd
-482CA0     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-34-12-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3412F9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-E2-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BCE265     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-D1-A1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CD1A1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-BF-E4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88BFE4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-40-17-E2   (hex)		INTAI TECHNOLOGY CORP.
-4017E2     (base 16)		INTAI TECHNOLOGY CORP.
-				No.9, JINGKE RD.,NANTUN DIST.
-				TAICHUNG CITY    40852
-				TW
-
-0C-CB-85   (hex)		Motorola Mobility LLC, a Lenovo Company
-0CCB85     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-A4-E6-15   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-A4E615     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-74-1F-79   (hex)		YOUNGKOOK ELECTRONICS CO.,LTD
-741F79     (base 16)		YOUNGKOOK ELECTRONICS CO.,LTD
-				#810, Daewoo Frontier Valley 1,16-25, Dongbaekjungang-ro 16beon-gil, Giheung-gu
-				YONGIN  Gyeonggi-do  17015
-				KR
-
-A0-93-51   (hex)		Cisco Systems, Inc
-A09351     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-98-03-9B   (hex)		Mellanox Technologies, Inc.
-98039B     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100
-				Sunnyvale  CA  94085
-				US
-
-20-89-84   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-208984     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				No.25, Third Avenue, A Zone, Kunshan Comprehensive Free Trade Zone
-				KUNSHAN   SUZHOU   215300 
-				CN
-
-B4-CE-FE   (hex)		James Czekaj
-B4CEFE     (base 16)		James Czekaj
-				41716 Waterfall Rd
-				Northville  MI  48168
-				US
-
-F8-CC-6E   (hex)		DEPO Electronics Ltd
-F8CC6E     (base 16)		DEPO Electronics Ltd
-				12, kommunalnaya zona Krasnogorsk-Mitino
-				Krasnogorsk  Moscow region  143404
-				RU
-
-F8-36-9B   (hex)		Texas Instruments
-F8369B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-88-AE-1D   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-88AE1D     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD STREET KUNSHAN EXPORT PROCESSING ZONE
-				KUNSHAN  SUZHOU  215300
-				CN
-
-B8-88-E3   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-B888E3     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				No.25, Third Avenue, A Zone, Kunshan Comprehensive Free Trade Zone,, Jiangsu, 
-				KUNSHAN   SUZHOU  215300
-				CN
-
-28-9E-FC   (hex)		Sagemcom Broadband SAS
-289EFC     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-C0-55   (hex)		MODULAR COMPUTING TECHNOLOGIES
-00C055     (base 16)		MODULAR COMPUTING TECHNOLOGIES
-				2352 MAIN STREET
-				CONCORD  MA  01742
-				US
-
-E4-1F-E9   (hex)		Dunkermotoren GmbH
-E41FE9     (base 16)		Dunkermotoren GmbH
-				Allmendstr. 11
-				Bonndorf  Baden-Württemberg  79848
-				DE
-
-C4-51-8D   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-C4518D     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-48-68-34   (hex)		Silicon Motion, Inc.
-486834     (base 16)		Silicon Motion, Inc.
-				8F, No. 36, Taiyuan St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-00-11-33   (hex)		Siemens AG Austria
-001133     (base 16)		Siemens AG Austria
-				Siemensstrasse 90-92
-				Vienna    1210
-				AT
-
-00-0B-23   (hex)		Siemens Home & Office Comm. Devices
-000B23     (base 16)		Siemens Home & Office Comm. Devices
-				4849 Alpha Road
-				Dallas    74244
-				US
-
-64-13-31   (hex)		Bosch Car Multimedia (Wuhu) Co. Ltd.
-641331     (base 16)		Bosch Car Multimedia (Wuhu) Co. Ltd.
-				NO.48 North Yinhu Road
-				Wuhu city  Anhui Province  241000
-				CN
-
-18-3A-48   (hex)		VostroNet
-183A48     (base 16)		VostroNet
-				GPO Box 3154
-				Brisbane  Queensland  4000
-				AU
-
-78-2F-17   (hex)		Xlab Co.,Ltd
-782F17     (base 16)		Xlab Co.,Ltd
-				#401 4F, Achasan-ro, Seongdong-gu
-				SEOUL    04793
-				KR
-
-B0-02-7E   (hex)		MULLER SERVICES
-B0027E     (base 16)		MULLER SERVICES
-				107 Boulevard Ney
-				PARIS  ILE DE FRANCE  75018
-				FR
-
-24-FA-F3   (hex)		Shanghai Flexem Technology Co.,Ltd.
-24FAF3     (base 16)		Shanghai Flexem Technology Co.,Ltd.
-				Room 804, C6 Building,No.52 Bay Valley Technology Park, Lane 1688 North Guoquan Road, Yangpu District.
-				Shanghai    200438
-				CN
-
-88-D2-BF   (hex)		German Autolabs
-88D2BF     (base 16)		German Autolabs
-				Köpenicker Str. 154
-				Berlin  Berlin  10997
-				DE
-
-20-16-3D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-20163D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-E0-73-5F   (hex)		NUCOM
-E0735F     (base 16)		NUCOM
-				Arte, 21,5B
-				Madrid  Madrid  28033
-				ES
-
-00-51-ED   (hex)		LG Innotek
-0051ED     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-40-DC-9D   (hex)		HAJEN
-40DC9D     (base 16)		HAJEN
-				102-1302, Sinwon-ro 88, Yeongtong-gu
-				Suwon-Si  Gyeonggi-do  16681
-				KR
-
-34-0A-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-340A98     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-6D-6C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-646D6C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-B8-B4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4B8B4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F0-BC-C9   (hex)		PFU LIMITED
-F0BCC9     (base 16)		PFU LIMITED
-				Nu 98-2 Unoke
-				Kahoku-shi, Ishikawa    929-1192
-				JP
-
-48-75-83   (hex)		Intellion AG
-487583     (base 16)		Intellion AG
-				Schuppisstrasse 10
-				St. Gallen  St. Gallen  9016
-				CH
-
-90-4C-81   (hex)		Hewlett Packard Enterprise
-904C81     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-8C-35-79   (hex)		QDIQO Sp. z o.o.
-8C3579     (base 16)		QDIQO Sp. z o.o.
-				Stanisława Wyspiańskiego 11
-				Zielona Góra  lubuskie  65-036
-				PL
-
-38-C7-0A   (hex)		WiFiSong
-38C70A     (base 16)		WiFiSong
-				Rm. 605, Building 3, No. 75 Wenyi West Road
-				Hangzhou  Zhengjiang  310012
-				CN
-
-D8-76-0A   (hex)		Escort, Inc.
-D8760A     (base 16)		Escort, Inc.
-				5440 West Chester Rd.
-				West Chester  Ohio  45069
-				US
-
-5C-2E-D2   (hex)		ABC(XiSheng) Electronics Co.,Ltd
-5C2ED2     (base 16)		ABC(XiSheng) Electronics Co.,Ltd
-				No.2 Industrial building, FuRong 7 Road
-				ShenZhen  GongDong  518100
-				CN
-
-FC-FB-FB   (hex)		Cisco Systems, Inc
-FCFBFB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-7E-95   (hex)		Cisco Systems, Inc
-007E95     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-5A-44   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-9C5A44     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU  215300
-				CN
-
-14-CA-A0   (hex)		Hu&Co
-14CAA0     (base 16)		Hu&Co
-				105 Rue du Jardin
-				Bordeaux    33000
-				FR
-
-08-D4-6A   (hex)		LG Electronics (Mobile Communications)
-08D46A     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-10-17   (hex)		Bosch Access Systems GmbH
-001017     (base 16)		Bosch Access Systems GmbH
-				Charlottenburger Allee 50            
-				AACHEN      D-52068 
-				DE
-
-F4-EE-14   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-F4EE14     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-6C-59-40   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-6C5940     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-D0-25-16   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-D02516     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-1C-60-DE   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-1C60DE     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-D8-24-77   (hex)		Universal Electric Corporation
-D82477     (base 16)		Universal Electric Corporation
-				168 Georgetown Road
-				Canonsburg  PA  15317
-				US
-
-00-90-7F   (hex)		WatchGuard Technologies, Inc.
-00907F     (base 16)		WatchGuard Technologies, Inc.
-				605 Fifth Ave. S
-				Seattle  WA  98104-3892
-				US
-
-4C-5E-0C   (hex)		Routerboard.com
-4C5E0C     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga    LV1009
-				LV
-
-D4-CA-6D   (hex)		Routerboard.com
-D4CA6D     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga    LV-1009
-				LV
-
-00-14-72   (hex)		China Broadband Wireless IP Standard group(ChinaBWIPS)
-001472     (base 16)		China Broadband Wireless IP Standard group(ChinaBWIPS)
-				P.O.BOX 88,West High-tech
-				Xi'an  Shaan Xi  710075
-				CN
-
-80-B5-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-80B575     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-BE-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4BE2B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-E7-C2   (hex)		Samsung Electronics Co.,Ltd
-68E7C2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-58-B1-0F   (hex)		Samsung Electronics Co.,Ltd
-58B10F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-40-06-A0   (hex)		Texas Instruments
-4006A0     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F8-2D-C0   (hex)		ARRIS Group, Inc.
-F82DC0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-18-9C-27   (hex)		ARRIS Group, Inc.
-189C27     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-3C-F5-CC   (hex)		New H3C Technologies Co., Ltd
-3CF5CC     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-D0-8A-91   (hex)		Technicolor CH USA Inc.
-D08A91     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-28-11-A5   (hex)		Bose Corporation
-2811A5     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-D8-F3-DB   (hex)		Post CH AG
-D8F3DB     (base 16)		Post CH AG
-				Wankdorfallee 4
-				Bern    3030
-				CH
-
-DC-B4-AC   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-DCB4AC     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
-				Zhuhai  Guangdong  519180
-				CN
-
-A4-92-CB   (hex)		Nokia
-A492CB     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-C0-D2-F3   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-C0D2F3     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-B8-83-03   (hex)		Hewlett Packard Enterprise
-B88303     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-20-3D-BD   (hex)		LG Innotek
-203DBD     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-A4-53-85   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-A45385     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-00-40-2F   (hex)		XLNT DESIGNS INC.
-00402F     (base 16)		XLNT DESIGNS INC.
-				15050 AVENUE OF SCIENCE
-				SAN DIEGO  CA  92128
-				US
-
-04-EC-BB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-04ECBB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-64-A2-F9   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-64A2F9     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-A8-7D-12   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A87D12     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-21-22   (hex)		Sercomm Corporation.
-D42122     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-00-C0-02   (hex)		Sercomm Corporation.
-00C002     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-BC-99-11   (hex)		Zyxel Communications Corporation
-BC9911     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-28-02-45   (hex)		Konze System Technology Co.,Ltd.
-280245     (base 16)		Konze System Technology Co.,Ltd.
-				4F., No.134, Ln. 235, Baoqiao Rd., Xindian Dist.
-				New Taipei City  ---  231
-				TW
-
-E4-8F-65   (hex)		Yelatma Instrument Making Enterprise, JSC
-E48F65     (base 16)		Yelatma Instrument Making Enterprise, JSC
-				Yanina 25
-				Yelatma  Ryazan Region  391351
-				RU
-
-00-00-A8   (hex)		Stratus Technologies
-0000A8     (base 16)		Stratus Technologies
-				5 Mill and Main Place, Suite 500
-				Maynard  MA  01754
-				US
-
-00-04-FC   (hex)		Stratus Technologies
-0004FC     (base 16)		Stratus Technologies
-				5 Mill and Main Place, Suite 500
-				Maynard  MA  01754
-				US
-
-3C-24-F0   (hex)		IEEE Registration Authority
-3C24F0     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-BB-3A   (hex)		Amazon Technologies Inc.
-00BB3A     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-0C-B3-4F   (hex)		Shenzhen Xiaoqi Intelligent Technology Co., Ltd.
-0CB34F     (base 16)		Shenzhen Xiaoqi Intelligent Technology Co., Ltd.
-				Room 1501, Block B4, Building 9, Section 2, Shenzhen Bay Science & Technology Ecological Park, West Shahe Road, Nanshan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-3C-F4-F9   (hex)		Moda-InnoChips
-3CF4F9     (base 16)		Moda-InnoChips
-				42-7(Wonsi-Dong),Dongsan-ro 27beon-gil,Danwon-gu
-				Ansan-si   Gyeonggi-Do  15433
-				KR
-
-94-19-3A   (hex)		Elvaco AB
-94193A     (base 16)		Elvaco AB
-				Kabelgatan 2T
-				Kungsbacka    43437
-				SE
-
-C0-81-35   (hex)		Ningbo Forfan technology Co., LTD
-C08135     (base 16)		Ningbo Forfan technology Co., LTD
-				Room B308,Tianjing Building,Tianan Cyber Park,Futian
-				Shenzhen  Guangdong  518040
-				CN
-
-84-0D-8E   (hex)		Espressif Inc.
-840D8E     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-00-20-82   (hex)		ONEAC CORPORATION
-002082     (base 16)		ONEAC CORPORATION
-				27944 N. BRADLEY RD.
-				LIBERTYVILLE  IL  60048
-				US
-
-40-62-31   (hex)		GIFA
-406231     (base 16)		GIFA
-				11th Fl., Suojia Business Building , No.7 Hangkong Road , Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-FC-B7-F0   (hex)		Idaho National Laboratory
-FCB7F0     (base 16)		Idaho National Laboratory
-				2525 N. Fremont Ave
-				Idaho Falls  ID  83415
-				US
-
-2C-28-B7   (hex)		Hangzhou Ruiying technology co., LTD
-2C28B7     (base 16)		Hangzhou Ruiying technology co., LTD
-				No. 1, building 305, Yunqi Town Cloud Computing Industrial Park, Hangzhou City, Xihu District
-				Hangzhou  Zhejiang  310000
-				CN
-
-10-65-30   (hex)		Dell Inc.
-106530     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-04-6B-1B   (hex)		SYSDINE Co., Ltd.
-046B1B     (base 16)		SYSDINE Co., Ltd.
-				506 Convergence technology research commercialization center 218 Gajung-Ro, Yuseong-gu
-				Daejeon-City  Daejeon-City  34129
-				KR
-
-B0-A3-7E   (hex)		QING DAO HAIER TELECOM CO.,LTD.
-B0A37E     (base 16)		QING DAO HAIER TELECOM CO.,LTD.
-				No.1,Haier Road,Qingdao 266101 P.R.China
-				Qingdao  Shandong  266101
-				CN
-
-3C-EA-F9   (hex)		JUBIXCOLTD
-3CEAF9     (base 16)		JUBIXCOLTD
-				Rm 808, 809, B dong, Gunpo IT vally, 17, Gosan-ro 148beon-gil, Gunpo-si, Gyeonggi-do, Republic of Korea
-				GUNPOSI    15850
-				KR
-
-58-DB-15   (hex)		TECNO MOBILE LIMITED
-58DB15     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-50-50-CE   (hex)		Hangzhou Dianyixia Communication Technology Co. Ltd.
-5050CE     (base 16)		Hangzhou Dianyixia Communication Technology Co. Ltd.
-				Room 207, Building 7, 1197 bin 'an road, Binjiang district,
-				Hangzhou  Zhejiang  310011
-				CN
-
-FC-69-47   (hex)		Texas Instruments
-FC6947     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-E0-7D-EA   (hex)		Texas Instruments
-E07DEA     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-DC-DE-4F   (hex)		Gionee Communication Equipment Co Ltd 
-DCDE4F     (base 16)		Gionee Communication Equipment Co Ltd 
-				21/F Times Technology Building, 7028 Shennan Road
-				Shenzhen  Futian District  518040
-				CN
-
-4C-D0-CB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CD0CB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-5D-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-505DAC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-FA-F7   (hex)		Guangdong Uniteddata Holding Group Co., Ltd.
-E8FAF7     (base 16)		Guangdong Uniteddata Holding Group Co., Ltd.
-				39L, Pearl River Tower, No.15 Zhujiang West Road,Tianhe District
-				GUANGZHOU  GUANGDONG  510623
-				CN
-
-94-9D-57   (hex)		Panasonic do Brasil Limitada
-949D57     (base 16)		Panasonic do Brasil Limitada
-				Rua Matrinxa
-				Manaus  Amazonas  69075150
-				BR
-
-88-D3-7B   (hex)		FirmTek, LLC
-88D37B     (base 16)		FirmTek, LLC
-				29300 Kohoutek Way
-				Union City  CA  94587
-				US
-
-1C-66-6D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-1C666D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-84-F3-EB   (hex)		Espressif Inc.
-84F3EB     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-00-1B-48   (hex)		Shenzhen Lantech Electronics Co., Ltd.
-001B48     (base 16)		Shenzhen Lantech Electronics Co., Ltd.
-				306 Room, Nanshan Water Building,
-				Shenzhen  Guangdong  518052
-				CN
-
-00-25-0C   (hex)		Senet Inc
-00250C     (base 16)		Senet Inc
-				100 Market Street, Suite 302 
-				 Portsmouth  NH  03801
-				US
-
-0C-80-63   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-0C8063     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-72-78   (hex)		Cisco Systems, Inc
-007278     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-64-5A-ED   (hex)		Apple, Inc.
-645AED     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-B6-58   (hex)		Apple, Inc.
-C0B658     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-A9-1C   (hex)		Apple, Inc.
-48A91C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-BC-96   (hex)		Apple, Inc.
-50BC96     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-2A-9C   (hex)		Apple, Inc.
-FC2A9C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-2C-7B   (hex)		Cisco Systems, Inc
-682C7B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-1E-98   (hex)		Ruckus Wireless
-441E98     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-A0-56-F3   (hex)		Apple, Inc.
-A056F3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-99-63   (hex)		Apple, Inc.
-549963     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-DD-5D   (hex)		Apple, Inc.
-90DD5D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-29-19   (hex)		AltoBeam (Xiamen) Technology Ltd, Co.
-DC2919     (base 16)		AltoBeam (Xiamen) Technology Ltd, Co.
-				South Building 203-38,Huoju Square ,No.56-58,Huoju Road, Huoju Park, Huoju High-tech District
-				Xiamen    361000
-				CN
-
-88-5F-E8   (hex)		IEEE Registration Authority
-885FE8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-2F-D9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-002FD9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-B4-CD-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B4CD27     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-19-F7   (hex)		Samsung Electronics Co.,Ltd
-C819F7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-C3-D6   (hex)		Juniper Networks
-64C3D6     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-A0-21   (hex)		General Dynamics Mission Systems
-00A021     (base 16)		General Dynamics Mission Systems
-				150 Rustcraft Road
-				Dedham  MA  02026
-				US
-
-F0-AF-50   (hex)		Phantom Intelligence
-F0AF50     (base 16)		Phantom Intelligence
-				319 Rue Franquet Suite F
-				Quebec  QC  G1P 4R4
-				CA
-
-C4-2C-4F   (hex)		Qingdao Hisense Mobile Communication Technology Co,Ltd
-C42C4F     (base 16)		Qingdao Hisense Mobile Communication Technology Co,Ltd
-				No.399, Song Ling Road
-				Qingdao  Shandong  266100
-				CN
-
-24-CA-CB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-24CACB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-54-3E-64   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-543E64     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-64-02-CB   (hex)		ARRIS Group, Inc.
-6402CB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F4-E1-1E   (hex)		Texas Instruments
-F4E11E     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-38-80-DF   (hex)		Motorola Mobility LLC, a Lenovo Company
-3880DF     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-BC-6A-2F   (hex)		Henge Docks LLC
-BC6A2F     (base 16)		Henge Docks LLC
-				455 10th St.
-				San Francisco  California  94103
-				US
-
-0C-08-B4   (hex)		HUMAX Co., Ltd.
-0C08B4     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-00-27-05   (hex)		Sectronic
-002705     (base 16)		Sectronic
-				Z.I. Les Saulniers
-				Sainte-Maure de Touraine    37800
-				FR
-
-48-BD-3D   (hex)		New H3C Technologies Co., Ltd
-48BD3D     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-18-4C-08   (hex)		Rockwell Automation
-184C08     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-DC-02-65   (hex)		Meditech Kft
-DC0265     (base 16)		Meditech Kft
-				Üllõi út 200.
-				Budapest    1191
-				HU
-
-14-A7-2B   (hex)		currentoptronics Pvt.Ltd
-14A72B     (base 16)		currentoptronics Pvt.Ltd
-				CRT Building, Jupitor Jn , Near Time kids Koothattukulam - Piravom Rd
-				ERNAKULAM  Time Kids day care  686662
-				IN
-
-A4-DA-22   (hex)		IEEE Registration Authority
-A4DA22     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-3C-17-10   (hex)		Sagemcom Broadband SAS
-3C1710     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-DC-72-9B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DC729B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-94-97   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-909497     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-02-9B   (hex)		Plexonics Technologies LImited
-34029B     (base 16)		Plexonics Technologies LImited
-				1st Floor, 181/23 Industrial Area Phase 1
-				Chandigarh  Punjab  160002
-				IN
-
-90-03-72   (hex)		Longnan Junya Digital Technology Co. Ltd. 
-900372     (base 16)		Longnan Junya Digital Technology Co. Ltd. 
-				Champion Asia Road, Xinzhen industrial Park, Longnan national economic and technological development zone, Ganzhou city, JiangXi Province , China
-				ganzhou  jiangxi  341700
-				CN
-
-0C-C6-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0CC6CC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-58-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-785860     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-AB-F3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8ABF3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-DC-BC   (hex)		Samsung Electronics Co.,Ltd
-3CDCBC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-4E-70   (hex)		Samsung Electronics Co.,Ltd
-804E70     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D4-E6-B7   (hex)		Samsung Electronics Co.,Ltd
-D4E6B7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-8C-4C-AD   (hex)		Evoluzn Inc.
-8C4CAD     (base 16)		Evoluzn Inc.
-				34 Samoset Lane
-				Schaumburg  IL  60193
-				US
-
-8C-F9-57   (hex)		RuiXingHengFang Network (Shenzhen) Co.,Ltd
-8CF957     (base 16)		RuiXingHengFang Network (Shenzhen) Co.,Ltd
-				Room 507, 2nd tower of KangTai biological building  NO.6 KeFa Rd. NanShan District
-				Shenzhen  Guangdong  518057
-				CN
-
-4C-77-6D   (hex)		Cisco Systems, Inc
-4C776D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-E1-82   (hex)		Texas Instruments
-74E182     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-44-9E-F9   (hex)		vivo Mobile Communication Co., Ltd.
-449EF9     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-6C-C4-D5   (hex)		HMD Global Oy
-6CC4D5     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-80-C5-48   (hex)		Shenzhen Zowee Technology Co.,Ltd
-80C548     (base 16)		Shenzhen Zowee Technology Co.,Ltd
-				NO.5 Zowee technology building, Science & Technology industrial park of privately  Science & Technology industrial park of privately owned enterprises
-				Shenzhen  GuangDong  518055
-				CN
-
-10-C2-5A   (hex)		Technicolor CH USA Inc.
-10C25A     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-E8-DE-FB   (hex)		MESOTIC SAS
-E8DEFB     (base 16)		MESOTIC SAS
-				11, Avenue de la Division Leclerc
-				Cachan    94230
-				FR
-
-C4-00-AD   (hex)		Advantech Technology (CHINA) Co., Ltd.
-C400AD     (base 16)		Advantech Technology (CHINA) Co., Ltd.
-				No.666, Han-Pu Rd. Yu-Shan
-				Kun-Shan  Jiang Su  215316
-				CN
-
-94-FE-9D   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-94FE9D     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				SONGGANG
-				SHENZHEN  GUANGDONG  518105
-				CN
-
-6C-B6-CA   (hex)		DIVUS GmbH
-6CB6CA     (base 16)		DIVUS GmbH
-				Pillhof 51
-				Eppan    39057
-				IT
-
-04-D1-3A   (hex)		Xiaomi Communications Co Ltd
-04D13A     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-4C-C2-06   (hex)		Somfy
-4CC206     (base 16)		Somfy
-				50 avenue du nouveau monde
-				Cluses    74300
-				FR
-
-04-09-73   (hex)		Hewlett Packard Enterprise
-040973     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-34-99-D7   (hex)		Universal Flow Monitors, Inc.
-3499D7     (base 16)		Universal Flow Monitors, Inc.
-				1755 E. Nine Mile Rd.
-				Hazel Park  MI  48030
-				US
-
-0C-8B-D3   (hex)		ITEL MOBILE LIMITED
-0C8BD3     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-C0-A8-F0   (hex)		Adamson Systems Engineering
-C0A8F0     (base 16)		Adamson Systems Engineering
-				1401 Scugog Line 6
-				Port Perry  Ontario  L9L 1B2
-				CA
-
-9C-43-1E   (hex)		IEEE Registration Authority
-9C431E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-24-AF   (hex)		Dish Technologies Corp
-0024AF     (base 16)		Dish Technologies Corp
-				94 Inverness Terrace E
-				Englewood  CO  80112
-				US
-
-28-2C-02   (hex)		IEEE Registration Authority
-282C02     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-FC-A1-83   (hex)		Amazon Technologies Inc.
-FCA183     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno    89507
-				US
-
-6C-2A-CB   (hex)		Paxton Access Ltd
-6C2ACB     (base 16)		Paxton Access Ltd
-				Paxton House
-				Brighton  East Sussex  BN1 9HU
-				GB
-
-58-3B-D9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-583BD9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-DC-A2-66   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-DCA266     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C4-84-66   (hex)		Apple, Inc.
-C48466     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-7C-25   (hex)		Apple, Inc.
-347C25     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-2D-B7   (hex)		Apple, Inc.
-CC2DB7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-91-B5   (hex)		Infinix mobility limited
-BC91B5     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-28-2F-C2   (hex)		Automotive Data Solutions
-282FC2     (base 16)		Automotive Data Solutions
-				8400 rue Bougainville
-				Montreal  Quebec  H4P2G1
-				CA
-
-98-00-74   (hex)		Raisecom Technology CO., LTD
-980074     (base 16)		Raisecom Technology CO., LTD
-				No. 11, East Area, No. 10 Block, East Xibeiwang Road
-				Beijing    100094
-				CN
-
-18-C1-9D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-18C19D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-0C-98-38   (hex)		Xiaomi Communications Co Ltd
-0C9838     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-74-EA-CB   (hex)		New H3C Technologies Co., Ltd
-74EACB     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-D4-1A-3F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-D41A3F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-D8-B1-22   (hex)		Juniper Networks
-D8B122     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-B4-C7-99   (hex)		Extreme Networks, Inc.
-B4C799     (base 16)		Extreme Networks, Inc.
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-64-6E-6C   (hex)		Radio Datacom LLC
-646E6C     (base 16)		Radio Datacom LLC
-				9601 N 35th St
-				Phoenix  AZ  85028
-				US
-
-E8-8E-60   (hex)		NSD Corporation
-E88E60     (base 16)		NSD Corporation
-				Osu 3-31-28
-				Nagoya  Aichi  460-8302
-				JP
-
-00-0F-9B   (hex)		Ross Video Limited
-000F9B     (base 16)		Ross Video Limited
-				8 John Street
-				Iroquois  Ontario  K0E 1K0
-				CA
-
-00-24-BA   (hex)		Texas Instruments
-0024BA     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-60-51-2C   (hex)		TCT mobile ltd
-60512C     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-64-DB-81   (hex)		Syszone Co., Ltd.
-64DB81     (base 16)		Syszone Co., Ltd.
-				9F Garak, 310 Ogeum-ro
-				Seoul  Seoul, Korea  138-716
-				KR
-
-44-AD-19   (hex)		XINGFEI （H.K）LIMITED 
-44AD19     (base 16)		XINGFEI （H.K）LIMITED 
-				6/F North Tower Wandelai Building  No.29 Kejinan 6th Road, Nanshan District,Shenzhen,China
-				Shenzhen     518057
-				CN
-
-38-AD-BE   (hex)		New H3C Technologies Co., Ltd
-38ADBE     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-5C-AD-76   (hex)		Shenzhen TCL New Technology Co., Ltd
-5CAD76     (base 16)		Shenzhen TCL New Technology Co., Ltd
-				B area,10 Floor, TCL Multimedia Building, TCL International E city, #1001 Zhongshan Park Road, Nanshan District
-				Shenzhen  Guangdong  518052
-				CN
-
-5C-86-5C   (hex)		Samsung Electronics Co.,Ltd
-5C865C     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-04-F1-28   (hex)		HMD Global Oy
-04F128     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-04-B1-67   (hex)		Xiaomi Communications Co Ltd
-04B167     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-EC-83-50   (hex)		Microsoft Corporation
-EC8350     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-D0-07-CA   (hex)		Juniper Networks
-D007CA     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-1C-DF-52   (hex)		Texas Instruments
-1CDF52     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-30-C5-07   (hex)		ECI Telecom Ltd.
-30C507     (base 16)		ECI Telecom Ltd.
-				30 Hasivim St.
-				Petah Tikva    49133
-				IL
-
-C8-45-8F   (hex)		Wyler AG
-C8458F     (base 16)		Wyler AG
-				Im Hoelderli 13
-				Winterthur  ZH  8405
-				CH
-
-00-1B-B9   (hex)		Elitegroup Computer Systems Co.,Ltd.
-001BB9     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No.22, Alley 38, Lane 91 , Sec. 1 , Nei Hu Road
-				Taipei    114
-				TW
-
-00-24-61   (hex)		Shin Wang Tech.
-002461     (base 16)		Shin Wang Tech.
-				632-62, Guro-Dong, Guro-Gu
-				Seoul    152-866
-				KR
-
-0C-52-03   (hex)		AGM GROUP LIMITED
-0C5203     (base 16)		AGM GROUP LIMITED
-				4F,Building B,HuaFeng Ind park,Gushu,Xixiang,BaoAn,ShenZhen,China
-				ShenZhen  GuangDong  518100
-				CN
-
-2C-54-91   (hex)		Microsoft Corporation
-2C5491     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-38-17-C3   (hex)		Hewlett Packard Enterprise
-3817C3     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-00-1E-1D   (hex)		East Coast Datacom, Inc.
-001E1D     (base 16)		East Coast Datacom, Inc.
-				245 Gus Hipp Blvd., STE 3
-				Rockledge  FL  32955
-				US
-
-78-46-C4   (hex)		DAEHAP HYPER-TECH
-7846C4     (base 16)		DAEHAP HYPER-TECH
-				#A-805, Woolim Lions Vally 5-cha, #144-3 Sangdaewon-dong, Jungwon-Gu
-				Seongnam    462-726
-				US
-
-5C-E2-8C   (hex)		Zyxel Communications Corporation
-5CE28C     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-E4-BD-4B   (hex)		zte corporation
-E4BD4B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-D7-CA   (hex)		7HUGS LABS
-38D7CA     (base 16)		7HUGS LABS
-				29 bd Romain Rolland 
-				Montrouge     92120
-				FR
-
-00-01-44   (hex)		Dell EMC
-000144     (base 16)		Dell EMC
-				228 South St.
-				Hopkinton  MA  01748
-				US
-
-08-00-1B   (hex)		Dell EMC
-08001B     (base 16)		Dell EMC
-				176 South Street
-				Hopkinton  MA  01748
-				US
-
-7C-01-0A   (hex)		Texas Instruments
-7C010A     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-E4-2B-34   (hex)		Apple, Inc.
-E42B34     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-2E-F9   (hex)		Apple, Inc.
-3C2EF9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-4E-A7   (hex)		Apple, Inc.
-A04EA7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-98-9D   (hex)		Apple, Inc.
-F0989D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-D6-BD   (hex)		Robert Bosch GmbH
-FCD6BD     (base 16)		Robert Bosch GmbH
-				AE-BE/EKE
-				Leonberg  BW  71206
-				DE
-
-70-1F-53   (hex)		Cisco Systems, Inc
-701F53     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-18-39-6E   (hex)		SUNSEA TELECOMMUNICATIONS CO.,LTD.
-18396E     (base 16)		SUNSEA TELECOMMUNICATIONS CO.,LTD.
-				High tech Industrial Park,Longhua District of Shenzhen City,South central concept
-				Shenzhen    518110
-				CN
-
-EC-7D-11   (hex)		vivo Mobile Communication Co., Ltd.
-EC7D11     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-48-0E-EC   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-480EEC     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-50-3E-AA   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-503EAA     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-58-00-BB   (hex)		Juniper Networks
-5800BB     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-48-BA-4E   (hex)		Hewlett Packard
-48BA4E     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-D8-08-31   (hex)		Samsung Electronics Co.,Ltd
-D80831     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-41-C1   (hex)		Mini-Cam Limited
-9441C1     (base 16)		Mini-Cam Limited
-				Unit 4 Yew Tree Way
-				Warrington  Cheshire  WA33JD
-				GB
-
-50-4E-DC   (hex)		Ping Communication
-504EDC     (base 16)		Ping Communication
-				Brenden 18
-				Appenzell Meistersrüte  AI  9050
-				CH
-
-08-67-4E   (hex)		Hisense broadband multimedia technology Co.,Ltd
-08674E     (base 16)		Hisense broadband multimedia technology Co.,Ltd
-				Song ling Road 399
-				Qingdao    266000
-				CN
-
-50-0F-80   (hex)		Cisco Systems, Inc
-500F80     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-10-F1-F2   (hex)		LG Electronics (Mobile Communications)
-10F1F2     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-8C-68-C8   (hex)		zte corporation
-8C68C8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-EC-82-63   (hex)		zte corporation
-EC8263     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-68-3C-7D   (hex)		Magic Intelligence Technology Limited
-683C7D     (base 16)		Magic Intelligence Technology Limited
-				B13/Flat 4,East block,Jinhui Blding.Nanhai Road
-				Nanshan District, Shenzhen  guangdong  518000
-				CN
-
-0C-1C-20   (hex)		Kakao Corp
-0C1C20     (base 16)		Kakao Corp
-				242, Cheomdan-ro
-				Jeju-si  Jeju-do  63309
-				KR
-
-24-F5-A2   (hex)		Belkin International Inc.
-24F5A2     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista  null  90094
-				US
-
-74-BB-D3   (hex)		Shenzhen xeme Communication Co., Ltd.
-74BBD3     (base 16)		Shenzhen xeme Communication Co., Ltd.
-				303,Block D,Huayuan  technology innovation park,Bao Yuen road,Xixiang street,Baoan District
-				Shenzhen  Guangdong  518102 
-				CN
-
-94-28-2E   (hex)		New H3C Technologies Co., Ltd
-94282E     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-98-F5-A9   (hex)		OHSUNG
-98F5A9     (base 16)		OHSUNG
-				181
-				GUMI  KYUNGBUK  730-030
-				KR
-
-D8-9E-F3   (hex)		Dell Inc.
-D89EF3     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-38-4F-49   (hex)		Juniper Networks
-384F49     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-4C-BD-8F   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-4CBD8F     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-EC-EB-B8   (hex)		Hewlett Packard Enterprise
-ECEBB8     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-6C-B7-49   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6CB749     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-98-9C-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-989C57     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-52-82   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-185282     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-8C-3C-4A   (hex)		NAKAYO Inc
-8C3C4A     (base 16)		NAKAYO Inc
-				Development Support Center 165 Higashiomuro-machi
-				Maebashi-shi  Gunma  379-2105
-				JP
-
-70-86-C1   (hex)		Texas Instruments
-7086C1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F4-D7-B2   (hex)		LGS Innovations, LLC
-F4D7B2     (base 16)		LGS Innovations, LLC
-				13665 Dulles Technology Drive
-				Herndon  VA  20171
-				US
-
-00-15-2A   (hex)		Nokia Corporation
-00152A     (base 16)		Nokia Corporation
-				Rensingstraße 15
-				Bochum  NRW  44807
-				DE
-
-9C-4A-7B   (hex)		Nokia Corporation
-9C4A7B     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu  Ou  90590
-				FI
-
-D8-61-62   (hex)		Wistron Neweb Corporation
-D86162     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-28-84-0E   (hex)		silicon valley immigration service 
-28840E     (base 16)		silicon valley immigration service 
-				1410 Sharp Ave,
-				Campbell  CA  95008
-				US
-
-2C-D2-E7   (hex)		Nokia Corporation
-2CD2E7     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu  Ou  90590
-				FI
-
-38-6E-A2   (hex)		vivo Mobile Communication Co., Ltd.
-386EA2     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-98-2D-68   (hex)		Samsung Electronics Co., Ltd
-982D68     (base 16)		Samsung Electronics Co., Ltd
-				Samsung 1-ro
-				Hwaseong-si  Gyeonggi-do  445330
-				KR
-
-BC-2E-48   (hex)		ARRIS Group, Inc.
-BC2E48     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-60-8C-E6   (hex)		ARRIS Group, Inc.
-608CE6     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-08-00-70   (hex)		Mitsubishi Precision Co.,LTd.
-080070     (base 16)		Mitsubishi Precision Co.,LTd.
-				325 KAMIMACHIYA
-				000    00
-				JP
-
-44-4A-B0   (hex)		Zhejiang Moorgen Intelligence Technology Co., Ltd
-444AB0     (base 16)		Zhejiang Moorgen Intelligence Technology Co., Ltd
-				No.181 Changluo road Luotuo street Zhenhai district
-				Ningbo  Zhejiang  315202
-				CN
-
-DC-6A-EA   (hex)		Infinix mobility limited
-DC6AEA     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-C4-21-C8   (hex)		KYOCERA CORPORATION 
-C421C8     (base 16)		KYOCERA CORPORATION 
-				2-1-1,Kagahara,
-				Yokohama-shi  Kanagawa  224-8502
-				JP
-
-80-73-9F   (hex)		KYOCERA CORPORATION 
-80739F     (base 16)		KYOCERA CORPORATION 
-				2-1-1 Kagahara
-				Yokohama-shi  Kanagawa  224-8502
-				JP
-
-70-58-12   (hex)		Panasonic Corporation AVC Networks Company
-705812     (base 16)		Panasonic Corporation AVC Networks Company
-				1-15 Matsuo-cho
-				Kadoma  Osaka  571-8504
-				JP
-
-04-20-9A   (hex)		Panasonic Corporation AVC Networks Company
-04209A     (base 16)		Panasonic Corporation AVC Networks Company
-				1-15 Matsuo-cho
-				Kadoma City  Osaka  571-8504
-				JP
-
-34-00-8A   (hex)		IEEE Registration Authority
-34008A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A4-11-15   (hex)		Robert Bosch Engineering and Business Solutions pvt. Ltd.
-A41115     (base 16)		Robert Bosch Engineering and Business Solutions pvt. Ltd.
-				123, Industrial Layout, Hosur Road, Koramangala,
-				Bangalore  Karnataka  560095
-				IN
-
-40-D6-3C   (hex)		Equitech Industrial(DongGuan)Co.,Ltd
-40D63C     (base 16)		Equitech Industrial(DongGuan)Co.,Ltd
-				4F Building B No.2 ShiChang Road SongYuan Technology Park,DongCheng District
-				DongGuan  GuangDong  523122
-				CN
-
-F4-F3-AA   (hex)		JBL GmbH & Co. KG
-F4F3AA     (base 16)		JBL GmbH & Co. KG
-				Dieselstrasse 3
-				Neuhofen    67141
-				DE
-
-90-50-CA   (hex)		Hitron Technologies. Inc
-9050CA     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-40-99-22   (hex)		AzureWave Technology Inc.
-409922     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-C0-6D-1A   (hex)		Tianjin Henxinhuifeng Technology Co.,Ltd.
-C06D1A     (base 16)		Tianjin Henxinhuifeng Technology Co.,Ltd.
-				Rm 233, Tianjin Technology Innovation Service Center, 12 Keyan West Road, Nankai District, Tianjin, P.R.C.
-				Tianjin  Tianjin  300192
-				CN
-
-10-7B-44   (hex)		ASUSTek COMPUTER INC.
-107B44     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-84-25-3F   (hex)		silex technology, Inc.
-84253F     (base 16)		silex technology, Inc.
-				2-3-1 Hikaridai
-				Seika-cho  Kyoto  619-0237
-				JP
-
-00-08-C9   (hex)		TechniSat Digital GmbH Daun
-0008C9     (base 16)		TechniSat Digital GmbH Daun
-				Gewerbepark Merbitz Nr. 5
-				Dresden    01156
-				US
-
-D8-B1-2A   (hex)		Panasonic Mobile Communications Co.,Ltd.
-D8B12A     (base 16)		Panasonic Mobile Communications Co.,Ltd.
-				600 Saedo-cho Tsuzuki-ku
-				Yokohama City  Kanagawa  224-8539
-				JP
-
-B0-19-C6   (hex)		Apple, Inc.
-B019C6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-66-F0   (hex)		Apple, Inc.
-3866F0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-80-09   (hex)		JUPITER SYSTEMS, INC.
-008009     (base 16)		JUPITER SYSTEMS, INC.
-				3073 TEAGARDEN STREET
-				SAN LEANDRO  CA  94577-5720
-				US
-
-00-C0-64   (hex)		General Datacomm LLC
-00C064     (base 16)		General Datacomm LLC
-				353 Christian Street, Suite 4
-				Oxford  CT  06478
-				US
-
-E8-68-19   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E86819     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-AB-34   (hex)		New H3C Technologies Co., Ltd
-1CAB34     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-3C-78-43   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C7843     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-09-79   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5C0979     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-FB-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E4FB5D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-01-CC   (hex)		Japan Total Design Communication Co., Ltd.
-0001CC     (base 16)		Japan Total Design Communication Co., Ltd.
-				Enesta Suginamihigashi Build., 3F,
-				    
-				JP
-
-00-30-C8   (hex)		GAD LINE, LTD.
-0030C8     (base 16)		GAD LINE, LTD.
-				BEIT ROKAR HAR HOTZVIM
-				    
-				IL
-
-00-16-E0   (hex)		3Com Ltd
-0016E0     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-D8-DE-CE   (hex)		ISUNG CO.,LTD
-D8DECE     (base 16)		ISUNG CO.,LTD
-				92, Huimanggongwon-ro
-				Siheung-si  Kyunggido  429-859
-				KR
-
-70-3E-AC   (hex)		Apple, Inc.
-703EAC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-11-C0   (hex)		Aday Technology Inc
-0011C0     (base 16)		Aday Technology Inc
-				9F.-3, No. 247, Sec. 1, Taichung Port Rd.,
-				Taichung City    403
-				TW
-
-00-05-F1   (hex)		Vrcom, Inc.
-0005F1     (base 16)		Vrcom, Inc.
-				401, Songam Bldg, 479-1,
-				Seoul    
-				KR
-
-AC-51-2C   (hex)		Infinix mobility limited
-AC512C     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-30-99-35   (hex)		zte corporation
-309935     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-0C-72-D9   (hex)		zte corporation
-0C72D9     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-10-62-D0   (hex)		Technicolor CH USA Inc.
-1062D0     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-50-64-2B   (hex)		XIAOMI Electronics,CO.,LTD
-50642B     (base 16)		XIAOMI Electronics,CO.,LTD
-				Xiaomi Building, No.68 Qinghe Middle Street
-				Haidian District  Beijing  100085
-				CN
-
-28-40-1A   (hex)		C8 MediSensors, Inc.
-28401A     (base 16)		C8 MediSensors, Inc.
-				727 University Ave
-				Los Gatos  CA  95032
-				US
-
-30-C0-1B   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-30C01B     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-88-86-C2   (hex)		STABILO International GmbH
-8886C2     (base 16)		STABILO International GmbH
-				Schwanweg 1
-				Heroldsberg    90562
-				DE
-
-08-A8-A1   (hex)		Cyclotronics Power Concepts, Inc
-08A8A1     (base 16)		Cyclotronics Power Concepts, Inc
-				PO Box 37449
-				Houston  TX  77237-7449
-				US
-
-F4-B5-20   (hex)		Biostar Microtech international corp.
-F4B520     (base 16)		Biostar Microtech international corp.
-				3F. No. 108-2 Min Chuan Road, Hsin Tien District 
-				New Taipei City  Taiwan  231
-				TW
-
-CC-2F-71   (hex)		Intel Corporate
-CC2F71     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1C-C5   (hex)		3Com Ltd
-001CC5     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-88-7A-31   (hex)		Velankani Electronics Pvt. Ltd.
-887A31     (base 16)		Velankani Electronics Pvt. Ltd.
-				43, Electronics City, Phase 1, Hosur road
-				Bangalore  Karnataka  560100
-				IN
-
-8C-0F-6F   (hex)		PEGATRON CORPORATION
-8C0F6F     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-8C-25-05   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8C2505     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-8C-3B-AD   (hex)		NETGEAR
-8C3BAD     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-64-CF-D9   (hex)		Texas Instruments
-64CFD9     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-74-7D-24   (hex)		Phicomm (Shanghai) Co., Ltd.
-747D24     (base 16)		Phicomm (Shanghai) Co., Ltd.
-				3666 SiXian Rd.,Songjiang District
-				Shanghai  Shanghai  201616
-				CN
-
-D0-94-66   (hex)		Dell Inc.
-D09466     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-38-E5-95   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-38E595     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
-				Shenzhen  Guangdong  518067
-				CN
-
-BC-96-80   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-BC9680     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
-				Shenzhen  Guangdong  518067
-				CN
-
-A4-7B-9D   (hex)		Espressif Inc.
-A47B9D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-B8-F8-BE   (hex)		BLUECOM
-B8F8BE     (base 16)		BLUECOM
-				116, Venture-ro, Yeonsu-gu,
-				Incheon    406-840
-				KR
-
-00-24-82   (hex)		Ruckus Wireless
-002482     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-68-92-34   (hex)		Ruckus Wireless
-689234     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-50-A7-33   (hex)		Ruckus Wireless
-50A733     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-2C-5D-93   (hex)		Ruckus Wireless
-2C5D93     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-38-FF-36   (hex)		Ruckus Wireless
-38FF36     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-84-18-3A   (hex)		Ruckus Wireless
-84183A     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-24-C9-A1   (hex)		Ruckus Wireless
-24C9A1     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-7C-2E-DD   (hex)		Samsung Electronics Co.,Ltd
-7C2EDD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-3C-F7-A4   (hex)		Samsung Electronics Co.,Ltd
-3CF7A4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-30-34   (hex)		Cara Systems
-103034     (base 16)		Cara Systems
-				Ruzgarlibahce Mah. Kavak Sok. No: 31/1 Smart Plaza B Blok Kat: 4
-				Istanbul  Kavacik Beykoz  23805
-				TR
-
-00-00-FE   (hex)		Annapolis Micro Systems, Inc.
-0000FE     (base 16)		Annapolis Micro Systems, Inc.
-				190 ADMIRAL COCHRANE DRIVE
-				ANNAPOLIS  MD  21401
-				US
-
-00-D0-1F   (hex)		Senetas Corporation Ltd
-00D01F     (base 16)		Senetas Corporation Ltd
-				1/11 Queens Road
-				consolidation    consolidation
-				AU
-
-64-47-E0   (hex)		Feitian Technologies Co., Ltd
-6447E0     (base 16)		Feitian Technologies Co., Ltd
-				Floor 17, Tower B, Huizhi Mansion, No.9 Xueqing Rd, Haidian District
-				Beijing    100085
-				CN
-
-B4-4F-96   (hex)		Zhejiang Xinzailing Technology co., ltd
-B44F96     (base 16)		Zhejiang Xinzailing Technology co., ltd
-				No.1805, Dongliu Road, Binjiang District 
-				Hangzhou  Zhejiang  310051
-				CN
-
-4C-65-A8   (hex)		IEEE Registration Authority
-4C65A8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B0-DF-C1   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-B0DFC1     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-9C-6F-52   (hex)		zte corporation
-9C6F52     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E8-6D-65   (hex)		AUDIO MOBIL Elektronik GmbH
-E86D65     (base 16)		AUDIO MOBIL Elektronik GmbH
-				Audio-Mobil-Straße 5 - 7
-				Braunau am Inn - Ranshofen    5282
-				AT
-
-70-6E-6D   (hex)		Cisco Systems, Inc
-706E6D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-60-47-62   (hex)		Beijing Sensoro Technology Co.,Ltd.
-604762     (base 16)		Beijing Sensoro Technology Co.,Ltd.
-				Room 2807, Building 1B, Wangjing SOHO, No10 Wangjing Street, Chaoyang District, Beijing, China
-				Beijing  Beijing  100102 PRC
-				CN
-
-BC-1C-81   (hex)		Sichuan iLink Technology Co., Ltd.
-BC1C81     (base 16)		Sichuan iLink Technology Co., Ltd.
-				Anzhou,Industrial park,Mianyang,Sichuan
-				Mianyang    622651
-				CN
-
-90-0A-1A   (hex)		Taicang T&W Electronics
-900A1A     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-50-6E-92   (hex)		Innocent Technology Co., Ltd.
-506E92     (base 16)		Innocent Technology Co., Ltd.
-				PROSIT AZUMA 3 #201, 1973, NIPPA-CHO, KOHOKU-KU, 
-				YOKOHAMA-SHI  KANAGAWA  2230057
-				JP
-
-30-FE-31   (hex)		Nokia
-30FE31     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-98-F2-B3   (hex)		Hewlett Packard Enterprise
-98F2B3     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-C4-57-1F   (hex)		June Life Inc
-C4571F     (base 16)		June Life Inc
-				649 Front Street
-				San Francisco  CA  94111
-				US
-
-88-6A-E3   (hex)		Alpha Networks Inc.
-886AE3     (base 16)		Alpha Networks Inc.
-				No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C
-				Hsinchu  Taiwan  300
-				TW
-
-1C-4D-70   (hex)		Intel Corporate
-1C4D70     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-D8-22-F4   (hex)		Avnet Silica
-D822F4     (base 16)		Avnet Silica
-				16 av carnot
-				Massy    91349
-				FR
-
-34-8F-27   (hex)		Ruckus Wireless
-348F27     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-2C-9E-EC   (hex)		Jabil Circuit Penang
-2C9EEC     (base 16)		Jabil Circuit Penang
-				Plot 56 , Hilir Sungai Keluang 1, Bayan Lepas Industrial Park, Phase 4
-				George Town  Penang  11900
-				MY
-
-00-1C-FA   (hex)		Alarm.com
-001CFA     (base 16)		Alarm.com
-				8150 Leesburg Pike
-				Vienna  VA  22182
-				US
-
-60-31-3B   (hex)		Sunnovo International Limited
-60313B     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-6C-B2-27   (hex)		Sony Video & Sound Products Inc.
-6CB227     (base 16)		Sony Video & Sound Products Inc.
-				Sony City Osaki, 2-10-1 Osaki
-				Shinagawa-ku  Tokyo  141-8610
-				JP
-
-98-6F-60   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-986F60     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-00-0C-AB   (hex)		Commend International GmbH
-000CAB     (base 16)		Commend International GmbH
-				Hoelzlstrasse 561
-				Wals  Salzburg  A-5071
-				AT
-
-74-54-27   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-745427     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-60-72-0B   (hex)		BLU Products Inc
-60720B     (base 16)		BLU Products Inc
-				10814 NW 33rd Street
-				Miami  FL  33172
-				US
-
-30-89-76   (hex)		DALIAN LAMBA TECHNOLOGY CO.,LTD
-308976     (base 16)		DALIAN LAMBA TECHNOLOGY CO.,LTD
-				Dalian Hi-tech Zone Keypark Room 1201
-				Dalian  Liaoning  116000
-				CN
-
-2C-26-17   (hex)		Oculus VR, LLC
-2C2617     (base 16)		Oculus VR, LLC
-				1 Hacker Way
-				Menlo Park  CA  94025
-				US
-
-34-D9-54   (hex)		WiBotic Inc.
-34D954     (base 16)		WiBotic Inc.
-				4000 15th Ave NE Lab 225, Fluke Hall, Box 352141
-				Seattle  WA  98195
-				US
-
-48-57-DD   (hex)		Facebook Inc
-4857DD     (base 16)		Facebook Inc
-				1 Hacker Way
-				Menlo Park    94025
-				US
-
-48-7D-2E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-487D2E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-DA-F9   (hex)		ARRIS Group, Inc.
-B0DAF9     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-18-35-D1   (hex)		ARRIS Group, Inc.
-1835D1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-C0-A5-DD   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-C0A5DD     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-48-8D-36   (hex)		Arcadyan Corporation
-488D36     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-BC-D7-13   (hex)		Owl Labs
-BCD713     (base 16)		Owl Labs
-				33-1/2 Union Square
-				Somerville  MA  02143
-				US
-
-E8-E1-E1   (hex)		Gemtek Technology Co., Ltd.
-E8E1E1     (base 16)		Gemtek Technology Co., Ltd.
-				No.15-1 Zhonghua Road
-				Hukou  Hsinchu  30352
-				TW
-
-28-07-0D   (hex)		GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.
-28070D     (base 16)		GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.
-				Building1 NO.13 DABU ROAD HUADU DISTRICT
-				GUANGZHOU  GUANGDONG  510800
-				CN
-
-00-A3-D1   (hex)		Cisco Systems, Inc
-00A3D1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-FC-4D-8C   (hex)		SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD
-FC4D8C     (base 16)		SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD
-				Building 5,Hui Mingsheng industrial park,Tongfu Rd,Fu Yong street
-				Shenzhen  Guangdong  518042
-				CN
-
-FC-06-ED   (hex)		M2Motive Technology Inc.
-FC06ED     (base 16)		M2Motive Technology Inc.
-				Room 148, Lane 999, new two road, Baoshan District
-				Shanghai  Shanghai  200439
-				CN
-
-F0-D4-F6   (hex)		Lars Thrane A/S
-F0D4F6     (base 16)		Lars Thrane A/S
-				Stubbeled 2
-				Vedbæk    2950
-				DK
-
-F4-A9-97   (hex)		CANON INC.
-F4A997     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-64-DF-E9   (hex)		ATEME
-64DFE9     (base 16)		ATEME
-				6 rue Dewoitine
-				Vélizy-Villacoublay    78140
-				FR
-
-10-C6-FC   (hex)		Garmin International
-10C6FC     (base 16)		Garmin International
-				1200 East 151st Street
-				Olathe   KS  66062
-				US
-
-AC-22-05   (hex)		Compal Broadband Networks, Inc.
-AC2205     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-80-A0-36   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
-80A036     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
-				9th Floor, No. 5 Building, 2145 Jinshajiang Rd., Putuo District
-				Shanghai    200333
-				CN
-
-F0-74-85   (hex)		NGD Systems, Inc.
-F07485     (base 16)		NGD Systems, Inc.
-				355 Goddard, Suite 200
-				Irvine  CA  92618
-				US
-
-40-5C-FD   (hex)		Dell Inc.
-405CFD     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-20-F4-52   (hex)		Shanghai IUV Software Development Co. Ltd
-20F452     (base 16)		Shanghai IUV Software Development Co. Ltd
-				No.18, Lane 1387 Zhangdong Rd, Pudong, Shanghai, P.R.C
-				shanghai  shanghai  201203
-				CN
-
-50-9A-4C   (hex)		Dell Inc.
-509A4C     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-A0-09-4C   (hex)		CenturyLink
-A0094C     (base 16)		CenturyLink
-				100 CenturyLink Drive
-				Monroe    71203
-				US
-
-B4-39-34   (hex)		Pen Generations, Inc.
-B43934     (base 16)		Pen Generations, Inc.
-				8th FL., SOLiD Space,
-				Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-74-26-AC   (hex)		Cisco Systems, Inc
-7426AC     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-B0-26-28   (hex)		Broadcom Limited
-B02628     (base 16)		Broadcom Limited
-				5300 California Ave.
-				irvine  CA  92617
-				US
-
-98-74-DA   (hex)		Infinix mobility limited
-9874DA     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-40-B4-F0   (hex)		Juniper Networks
-40B4F0     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-14-3F-27   (hex)		Noccela Oy
-143F27     (base 16)		Noccela Oy
-				Kaarinantie 700
-				Turku    20540
-				FI
-
-10-58-87   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-105887     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-70-4C-A5   (hex)		Fortinet, Inc.
-704CA5     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale  null  94086
-				US
-
-9C-06-1B   (hex)		Hangzhou H3C Technologies Co., Limited
-9C061B     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-50-33-8B   (hex)		Texas Instruments
-50338B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-E8-DE-8E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-E8DE8E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-D8-D8-66   (hex)		SHENZHEN TOZED TECHNOLOGIES CO.,LTD.
-D8D866     (base 16)		SHENZHEN TOZED TECHNOLOGIES CO.,LTD.
-				 4F/A1,A2,TIANJI BUILDING,TIAN’AN CYBER PARK,FUTIAN
-				SHENZHEN  GUANGDONG  518040
-				CN
-
-D8-C0-6A   (hex)		Hunantv.com Interactive Entertainment Media Co.,Ltd.
-D8C06A     (base 16)		Hunantv.com Interactive Entertainment Media Co.,Ltd.
-				Floor 2U, Hunan International Exhibition Center, Kaifu District, Changsha City, Hunan Province, P.R.C.
-				Changsha  Hunan  410000
-				CN
-
-AC-20-2E   (hex)		Hitron Technologies. Inc
-AC202E     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-1C-5A-0B   (hex)		Tegile Systems
-1C5A0B     (base 16)		Tegile Systems
-				7999 Gateway Blvd Suite 120
-				Newark  CA  94560
-				US
-
-04-6E-02   (hex)		OpenRTLS Group
-046E02     (base 16)		OpenRTLS Group
-				De Nieuwe Ploeg 5
-				Berlicum    5258 EX
-				NL
-
-90-0E-83   (hex)		Monico Monitoring, Inc.
-900E83     (base 16)		Monico Monitoring, Inc.
-				18530 Klein Church Rd
-				Spring  TX  77379
-				US
-
-60-14-66   (hex)		zte corporation
-601466     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-68-54-ED   (hex)		Alcatel-Lucent
-6854ED     (base 16)		Alcatel-Lucent
-				777 E. Middlefield Rd
-				Mountain View  CA  94043
-				US
-
-68-02-35   (hex)		Konten Networks Inc.
-680235     (base 16)		Konten Networks Inc.
-				7F-1, No.108, Minquan Rd., Xindian Dist.,
-				New Taipei City  Taiwan  231
-				TW
-
-38-AC-3D   (hex)		Nephos Inc
-38AC3D     (base 16)		Nephos Inc
-				2840 Junction Ave.  ,
-				San Jose  CA  95134
-				US
-
-E0-37-BF   (hex)		Wistron Neweb Corporation
-E037BF     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-E8-13-67   (hex)		AIRSOUND Inc.
-E81367     (base 16)		AIRSOUND Inc.
-				515-ho,75,Techno-1ro,Yuseoung-gu
-				Daejeon    34014
-				KR
-
-00-11-92   (hex)		Cisco Systems, Inc
-001192     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-38-F1-35   (hex)		SensorTec-Canada
-38F135     (base 16)		SensorTec-Canada
-				1Yonge Street, Suite 1801
-				Toronto  ON  M5E 1W7
-				CA
-
-AC-74-09   (hex)		Hangzhou H3C Technologies Co., Limited
-AC7409     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-C4-9D-ED   (hex)		Microsoft Corporation
-C49DED     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-98-A4-0E   (hex)		Snap, Inc.
-98A40E     (base 16)		Snap, Inc.
-				64 Market Street
-				Venice  CA  90291
-				US
-
-F4-03-43   (hex)		Hewlett Packard Enterprise
-F40343     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-F0-93-C5   (hex)		Garland Technology
-F093C5     (base 16)		Garland Technology
-				2130 Oak Bend Lane
-				Garland  TX  75040
-				US
-
-98-10-E8   (hex)		Apple, Inc.
-9810E8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-D0-12   (hex)		Apple, Inc.
-C0D012     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-A9-20   (hex)		Apple, Inc.
-BCA920     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-A1-95   (hex)		Apple, Inc.
-48A195     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-03-77   (hex)		Apple, Inc.
-F80377     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-96-34   (hex)		Intel Corporate
-F49634     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-10-7D-1A   (hex)		Dell Inc.
-107D1A     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-70-AF-24   (hex)		TP Vision Belgium NV
-70AF24     (base 16)		TP Vision Belgium NV
-				Technologiepark Zwijnaarde 19
-				Gent    9052
-				BE
-
-A4-11-63   (hex)		IEEE Registration Authority
-A41163     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C4-D1-97   (hex)		Ventia Utility Services
-C4D197     (base 16)		Ventia Utility Services
-				Level 4, Tower 1, 495 Victoria Avenue
-				Chatswood  NSW  2067
-				AU
-
-2C-86-D2   (hex)		Cisco Systems, Inc
-2C86D2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-7C-E9-7C   (hex)		ITEL MOBILE LIMITED
-7CE97C     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-80-58-F8   (hex)		Motorola Mobility LLC, a Lenovo Company
-8058F8     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-DC-A4-CA   (hex)		Apple, Inc.
-DCA4CA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-8F-E9   (hex)		Apple, Inc.
-8C8FE9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-AF-25   (hex)		Nishiyama Industry Co.,LTD.
-70AF25     (base 16)		Nishiyama Industry Co.,LTD.
-				177-2
-				Fuji  Shizuoka  419-0205
-				JP
-
-E8-D1-1B   (hex)		ASKEY COMPUTER CORP
-E8D11B     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-98-00-C1   (hex)		GuangZhou CREATOR Technology Co.,Ltd.(CHINA)
-9800C1     (base 16)		GuangZhou CREATOR Technology Co.,Ltd.(CHINA)
-				Level 3,Blg 6,No 9 Keji Yuan,LanYusi St,
-				GuangZhou  GuangDong  510730
-				CN
-
-54-E1-AD   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-54E1AD     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-98-D3-D2   (hex)		MEKRA Lang GmbH & Co. KG
-98D3D2     (base 16)		MEKRA Lang GmbH & Co. KG
-				Buchheimerstr. 4
-				Ergersheim    91465
-				DE
-
-0C-5F-35   (hex)		Niagara Video Corporation
-0C5F35     (base 16)		Niagara Video Corporation
-				5627 Stoneridge Drive, Suite 316
-				Pleasanton  CA  94588
-				US
-
-F8-A3-4F   (hex)		zte corporation
-F8A34F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-19-12   (hex)		Welcat Inc
-001912     (base 16)		Welcat Inc
-				East Tower 6F, Shinagawa Seaside, 4-12-8, Higashi Shinagawa, Shinagawa Section
-				  Tokyo  140-0002
-				JP
-
-8C-78-D7   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-8C78D7     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-B8-EA-AA   (hex)		ICG NETWORKS CO.,ltd
-B8EAAA     (base 16)		ICG NETWORKS CO.,ltd
-				Room 2030，Block B，Yamei Park，Haidian District
-				BEIJING    100010
-				CN
-
-B8-F8-83   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-B8F883     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-DC-FE-18   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-DCFE18     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-70-4F-57   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-704F57     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-C4-6C   (hex)		Senseit
-B0C46C     (base 16)		Senseit
-				Suschevsky val 16 str. 4
-				Moscow  Russian Federation  127018
-				RU
-
-00-02-A1   (hex)		World Wide Packets
-0002A1     (base 16)		World Wide Packets
-				PO Box 14645
-				Spokane  WA  99214
-				US
-
-00-E0-22   (hex)		Analog Devices, Inc.
-00E022     (base 16)		Analog Devices, Inc.
-				Three Technology Way
-				Norwood   MA  02062-2666
-				US
-
-14-B7-F8   (hex)		Technicolor CH USA Inc.
-14B7F8     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-90-3D-6B   (hex)		Zicon Technology Corp.
-903D6B     (base 16)		Zicon Technology Corp.
-				15F., No.688-2, Zhongzheng Rd., Zhonghe City, Taipei County 235
-				Taipei    23586
-				TW
-
-B0-40-89   (hex)		Senient Systems LTD
-B04089     (base 16)		Senient Systems LTD
-				152 Morrison St
-				Edinburgh  Other (Non US)  EH3 8EB
-				GB
-
-54-25-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5425EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-7F-6F   (hex)		Telechips, Inc.
-3C7F6F     (base 16)		Telechips, Inc.
-				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
-				Seoul  Seoul  05510
-				KR
-
-5C-BA-37   (hex)		Microsoft Corporation
-5CBA37     (base 16)		Microsoft Corporation
-				31807 - 25th Ave SW
-				Federal Way    98023
-				US
-
-00-C0-C6   (hex)		PERSONAL MEDIA CORP.
-00C0C6     (base 16)		PERSONAL MEDIA CORP.
-				1-7-7 MY BLDG. HIRATSUKA
-				    
-				JP
-
-28-FE-CD   (hex)		Lemobile Information Technology (Beijing) Co., Ltd.
-28FECD     (base 16)		Lemobile Information Technology (Beijing) Co., Ltd.
-				5/F LeEco Building, 105 Yaojiayuan Road, Chaoyang District 
-				Beijing  Beijing  100025
-				CN
-
-C8-94-BB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C894BB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-10-B1-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-10B1F8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-9E-08   (hex)		Google, Inc.
-089E08     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-00-21-0D   (hex)		SAMSIN INNOTEC
-00210D     (base 16)		SAMSIN INNOTEC
-				SARIYUNDONG ILSANDONG-GU
-				GOYANG  KYUNGGI  411530
-				KR
-
-C8-73-24   (hex)		 Sow Cheng Technology Co. Ltd.
-C87324     (base 16)		 Sow Cheng Technology Co. Ltd.
-				No.26, Ln. 181, Xinsheng W. Rd., Dali Dist
-				Taichung    412
-				TW
-
-00-1F-16   (hex)		Wistron Corporation
-001F16     (base 16)		Wistron Corporation
-				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
-				Taipei Hsien    221
-				TW
-
-00-26-2D   (hex)		Wistron Corporation
-00262D     (base 16)		Wistron Corporation
-				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
-				Taipei Hsien    221
-				TW
-
-04-95-E6   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-0495E6     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-50-E6-66   (hex)		Shenzhen Techtion Electronics Co., Ltd.
-50E666     (base 16)		Shenzhen Techtion Electronics Co., Ltd.
-				Floor 2, C2 Building, Huafeng Industrial Park, Hangcheng Avenue, Gushu, Xixiang, Baoan
-				Shenzhen  Guangdong  518102
-				CN
-
-00-16-D3   (hex)		Wistron Corporation
-0016D3     (base 16)		Wistron Corporation
-				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
-				Taipei Hsien    221
-				TW
-
-4C-4E-03   (hex)		TCT mobile ltd
-4C4E03     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-90-17-11   (hex)		Hagenuk Marinekommunikation GmbH
-901711     (base 16)		Hagenuk Marinekommunikation GmbH
-				Hamburger Chaussee 25
-				Flintbek    24220
-				DE
-
-00-10-DE   (hex)		INTERNATIONAL DATACASTING CORPORATION
-0010DE     (base 16)		INTERNATIONAL DATACASTING CORPORATION
-				2680 QUEENSVIEW DRIVE
-				OTTAWA,  ONTARIO  K2B 8H6
-				CA
-
-C0-D9-F7   (hex)		ShanDong Domor Intelligent S&T CO.,Ltd
-C0D9F7     (base 16)		ShanDong Domor Intelligent S&T CO.,Ltd
-				Jining high-tech zone base of production,education & research
-				Jining  Shandong  272000
-				CN
-
-00-60-8B   (hex)		ConferTech International
-00608B     (base 16)		ConferTech International
-				12110 N. PECOS STREET
-				WESTMINSTER  CO  80234-2074
-				US
-
-70-2D-84   (hex)		i4C Innovations
-702D84     (base 16)		i4C Innovations
-				3800 Concorde Parkway, Suite 400
-				Chantilly  VA  20151
-				US
-
-2C-20-0B   (hex)		Apple, Inc.
-2C200B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-66-A5   (hex)		Apple, Inc.
-8866A5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-02-77   (hex)		Cash Systemes Industrie
-000277     (base 16)		Cash Systemes Industrie
-				Technoparc Epsilon
-				    
-				FR
-
-CC-A2-19   (hex)		SHENZHEN ALONG INVESTMENT CO.,LTD
-CCA219     (base 16)		SHENZHEN ALONG INVESTMENT CO.,LTD
-				Room 1301,13F,Zhenye international Business Center,No.3101-90,Qianhai Road,Nanshan District
-				Shenzhen  Guangdong Province  518052
-				CN
-
-4C-1A-3A   (hex)		PRIMA Research And Production Enterprise Ltd.
-4C1A3A     (base 16)		PRIMA Research And Production Enterprise Ltd.
-				63, Svobody st.
-				  Nizhny Novgorod   603003
-				RU
-
-14-B3-1F   (hex)		Dell Inc.
-14B31F     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-AC-C1-EE   (hex)		Xiaomi Communications Co Ltd
-ACC1EE     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-54-19-C8   (hex)		vivo Mobile Communication Co., Ltd.
-5419C8     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-B0-B9-8A   (hex)		NETGEAR
-B0B98A     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-80-5A-04   (hex)		LG Electronics (Mobile Communications)
-805A04     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-8C-A5-A1   (hex)		Oregano Systems - Design & Consulting GmbH
-8CA5A1     (base 16)		Oregano Systems - Design & Consulting GmbH
-				Franzosengraben 8
-				Vienna    1030
-				AT
-
-B8-EC-A3   (hex)		Zyxel Communications Corporation
-B8ECA3     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-BC-83-85   (hex)		Microsoft Corporation
-BC8385     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-00-14-38   (hex)		Hewlett Packard Enterprise
-001438     (base 16)		Hewlett Packard Enterprise
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-E4-B0-05   (hex)		Beijing IQIYI Science & Technology Co., Ltd.
-E4B005     (base 16)		Beijing IQIYI Science & Technology Co., Ltd.
-				Room 1101, Floor 11, Capital Development Tower, No.2 Haidian North 1st Street,Haidian District,
-				Beijing    100080
-				CN
-
-00-00-48   (hex)		Seiko Epson Corporation
-000048     (base 16)		Seiko Epson Corporation
-				80 HIROOKA SHIOJIRI-CITY
-				japan  JAPAN  399-07
-				JP
-
-B0-E8-92   (hex)		Seiko Epson Corporation
-B0E892     (base 16)		Seiko Epson Corporation
-				3-3-5 OWA
-				SUWA-SHI  NAGANO-KEN  392-8502
-				JP
-
-AC-18-26   (hex)		Seiko Epson Corporation
-AC1826     (base 16)		Seiko Epson Corporation
-				3-3-5 OWA
-				SUWA-SHI  NAGANO-KEN  392-8502
-				JP
-
-A4-EE-57   (hex)		Seiko Epson Corporation
-A4EE57     (base 16)		Seiko Epson Corporation
-				3-3-5 OWA
-				SUWA-SHI  NAGANO-KEN  392-8502
-				JP
-
-9C-AE-D3   (hex)		Seiko Epson Corporation
-9CAED3     (base 16)		Seiko Epson Corporation
-				80 Harashinden
-				Shiojiri-shi  Nagano-ken  399-0785
-				JP
-
-70-7C-69   (hex)		Avaya Inc
-707C69     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-50-0B-91   (hex)		IEEE Registration Authority
-500B91     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F8-46-1C   (hex)		Sony Interactive Entertainment Inc.
-F8461C     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-70-4D-7B   (hex)		ASUSTek COMPUTER INC.
-704D7B     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-64-A6-8F   (hex)		Zhongshan Readboy Electronics Co.,Ltd
-64A68F     (base 16)		Zhongshan Readboy Electronics Co.,Ltd
-				Changmingshui Industrial Park Wuguishan Zhongshan City,Guangdong Province
-				Zhongshan  Guangdong  528400
-				CN
-
-38-BC-01   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-38BC01     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-1E-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-341E6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-66-39   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-886639     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-42-5A   (hex)		Cisco Systems, Inc
-00425A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-18-DB-F2   (hex)		Dell Inc.
-18DBF2     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-18-F8-7A   (hex)		i3 International Inc.
-18F87A     (base 16)		i3 International Inc.
-				780 Birchmount Road
-				Scarborough  Ontario  M1K5H4
-				CA
-
-4C-26-E7   (hex)		Welgate Co., Ltd.
-4C26E7     (base 16)		Welgate Co., Ltd.
-				19F, Geopyeong Bldg. 129
-				Seoul  Seoul  135726
-				KR
-
-00-60-41   (hex)		Yokogawa Digital Computer Corporation
-006041     (base 16)		Yokogawa Digital Computer Corporation
-				Shinjuku MIDWEST Bldg.4-30-3
-				Yoyogi  Shibuya-ku, Tokyo  151-0053
-				JP
-
-C8-16-A5   (hex)		Masimo Corporation
-C816A5     (base 16)		Masimo Corporation
-				40 Parker
-				Irvine  CA  92618
-				US
-
-0C-02-27   (hex)		Technicolor CH USA Inc.
-0C0227     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-4C-11-BF   (hex)		Zhejiang Dahua Technology Co., Ltd.
-4C11BF     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				NO.1199 Bin An Road,Binjiang District,HangZhou,P.R.China
-				HangZhou  ZheJiang  310053
-				CN
-
-2C-59-8A   (hex)		LG Electronics (Mobile Communications)
-2C598A     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-B0-52-16   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-B05216     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-A0-E4-CB   (hex)		Zyxel Communications Corporation
-A0E4CB     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-28-4E-D7   (hex)		OutSmart Power Systems, Inc.
-284ED7     (base 16)		OutSmart Power Systems, Inc.
-				11 Mercer Rd
-				Natick  23  01760
-				
-
-14-A7-8B   (hex)		Zhejiang Dahua Technology Co., Ltd.
-14A78B     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199, Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-A0-B8-F8   (hex)		Amgen U.S.A. Inc.
-A0B8F8     (base 16)		Amgen U.S.A. Inc.
-				1 Amgen Center Drive
-				Thousand Oaks  CA  91320
-				US
-
-88-44-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-884477     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-9D-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-149D09     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-69-75   (hex)		Angler Labs Inc
-686975     (base 16)		Angler Labs Inc
-				940 Pearce Mill Rd.
-				Wexford  PA  15090
-				US
-
-20-D2-5F   (hex)		SmartCap Technologies
-20D25F     (base 16)		SmartCap Technologies
-				L1 18 Finchley Street
-				Milton  Queensland  4064
-				AU
-
-E4-7D-BD   (hex)		Samsung Electronics Co.,Ltd
-E47DBD     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-9C-FB-D5   (hex)		vivo Mobile Communication Co., Ltd.
-9CFBD5     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-18-F7-6B   (hex)		Zhejiang Winsight Technology CO.,LTD
-18F76B     (base 16)		Zhejiang Winsight Technology CO.,LTD
-				No.3339 Linggongtang Road，NanHu District
-				Jiaxing  Zhejiang   314000
-				CN
-
-58-31-12   (hex)		DRUST
-583112     (base 16)		DRUST
-				8 rue fabre d'églantine
-				Paris    75012
-				FR
-
-9C-83-BF   (hex)		PRO-VISION, Inc.
-9C83BF     (base 16)		PRO-VISION, Inc.
-				8625-B Byron Commerce Dr. SW
-				Byron Center  MI  49315
-				US
-
-78-EF-4C   (hex)		Unetconvergence Co., Ltd.
-78EF4C     (base 16)		Unetconvergence Co., Ltd.
-				101-511, Digital Empire2, 486, Shin-dong, Youngtong-gu
-				Suwon  Kyonggi-do  443-390
-				KR
-
-58-69-6C   (hex)		Ruijie Networks Co.,LTD
-58696C     (base 16)		Ruijie Networks Co.,LTD
-				19# Building,Star-net Science Plaza,Juyuanzhou, 618 Jinshan Road
-				Fuzhou  Fujian  350002
-				CN
-
-48-D3-43   (hex)		ARRIS Group, Inc.
-48D343     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-C0-5A   (hex)		SEMAPHORE COMMUNICATIONS CORP.
-00C05A     (base 16)		SEMAPHORE COMMUNICATIONS CORP.
-				217 HUMBOLDT COURT
-				SUNNYVALE  CA  94089-1300
-				US
-
-00-07-F9   (hex)		Sensaphone
-0007F9     (base 16)		Sensaphone
-				901 Tryens Road
-				Aston  PA  19014
-				US
-
-00-1C-B3   (hex)		Apple, Inc.
-001CB3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-71-83   (hex)		Juniper Networks
-407183     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C8-1B-5C   (hex)		BCTech
-C81B5C     (base 16)		BCTech
-				14 Building, Tiandeng road 259# 
-				shanghai  xuhui district, shanghai   200237
-				CN
-
-5C-E3-0E   (hex)		ARRIS Group, Inc.
-5CE30E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-1C-C0-E1   (hex)		IEEE Registration Authority
-1CC0E1     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-1A-39   (hex)		Merten GmbH&CoKG
-001A39     (base 16)		Merten GmbH&CoKG
-				Fritz-Kotz-Str. 8
-				Wiehl  NRW  51674
-				DE
-
-FC-EC-DA   (hex)		Ubiquiti Networks Inc.
-FCECDA     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-00-B0-E1   (hex)		Cisco Systems, Inc
-00B0E1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-50-93   (hex)		BOEING
-005093     (base 16)		BOEING
-				3370 Miraloma Avenue
-				Anaheim  CA  92803-3105
-				US
-
-90-5C-44   (hex)		Compal Broadband Networks, Inc.
-905C44     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-E0-7C-13   (hex)		zte corporation
-E07C13     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F4-1F-88   (hex)		zte corporation
-F41F88     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-14-ED-BB   (hex)		2Wire Inc
-14EDBB     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-18-E2-9F   (hex)		vivo Mobile Communication Co., Ltd.
-18E29F     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-28-EE-52   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-28EE52     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-68-72-51   (hex)		Ubiquiti Networks Inc.
-687251     (base 16)		Ubiquiti Networks Inc.
-				91 E. Tasman Dr.
-				San Jose    95134
-				US
-
-B4-FB-E4   (hex)		Ubiquiti Networks Inc.
-B4FBE4     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-70-79-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-707990     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-4E-01   (hex)		CENTRAL ENGINEERING co.,ltd.
-A04E01     (base 16)		CENTRAL ENGINEERING co.,ltd.
-				2-3-19 shinyokohama kouhoku-ku
-				yokohama-shi  kanagawa  222-0033
-				JP
-
-28-CA-09   (hex)		ThyssenKrupp Elevators (Shanghai) Co.,Ltd
-28CA09     (base 16)		ThyssenKrupp Elevators (Shanghai) Co.,Ltd
-				No. 2, Xunye Rd, Sheshan Subarea Songjiang Industrial Area
-				Shanghai  Shanghai  201602
-				CN
-
-84-25-19   (hex)		Samsung Electronics
-842519     (base 16)		Samsung Electronics
-				129, Samsung-rom Yeongtong-gu
-				Suwon-si  Gyeonggi-do  16677
-				KR
-
-5C-24-43   (hex)		O-Sung Telecom Co., Ltd.
-5C2443     (base 16)		O-Sung Telecom Co., Ltd.
-				43-9 Pyeongdongro 803-gil , Gwangsan-Gu
-				Gwangju    54611
-				KR
-
-24-92-0E   (hex)		Samsung Electronics Co.,Ltd
-24920E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-42-03   (hex)		Samsung Electronics Co.,Ltd
-FC4203     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A0-10-81   (hex)		Samsung Electronics Co.,Ltd
-A01081     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-3C-8B-CD   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-3C8BCD     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-4C-F9-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CF95D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-21-F1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8421F1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-F2-2C   (hex)		Shanghai B-star Technology Co.,Ltd.
-00F22C     (base 16)		Shanghai B-star Technology Co.,Ltd.
-				4Floor NO.1158 Xiehe Road,Changning District ,shanghai ,China 200335
-				Shanghai     200335
-				CN
-
-00-05-EE   (hex)		Vanderbilt International (SWE) AB 
-0005EE     (base 16)		Vanderbilt International (SWE) AB 
-				Englundavaegen 7
-				Solna    SE-171 41 
-				SE
-
-F0-79-60   (hex)		Apple, Inc.
-F07960     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-D7-95   (hex)		Apple, Inc.
-A0D795     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-90-E7   (hex)		HORSCH ELEKTRONIK AG
-0090E7     (base 16)		HORSCH ELEKTRONIK AG
-				HAAGERSTRASSE
-				CH-9473 GAMS    
-				CH
-
-E4-3E-D7   (hex)		Arcadyan Corporation
-E43ED7     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-54-54-CF   (hex)		PROBEDIGITAL CO.,LTD
-5454CF     (base 16)		PROBEDIGITAL CO.,LTD
-				#107 Hyundai I-Valley, 31, Galmachi-ro 244beon-gil, Jungwon-gu
-				Seongnam-si  Gyeonggi-do  13212
-				KR
-
-F8-63-3F   (hex)		Intel Corporate
-F8633F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-08-86-20   (hex)		TECNO MOBILE LIMITED
-088620     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-F0-D5-BF   (hex)		Intel Corporate
-F0D5BF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-64-74-F6   (hex)		Shooter Detection Systems
-6474F6     (base 16)		Shooter Detection Systems
-				300 Newburyport Turnpike
-				Rowley  MA  01969
-				US
-
-98-13-33   (hex)		zte corporation
-981333     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-74-8A-69   (hex)		Korea Image Technology Co., Ltd
-748A69     (base 16)		Korea Image Technology Co., Ltd
-				125, beolmal road, dongan gu,
-				anyang  gyeonggi  14056
-				KR
-
-BC-47-60   (hex)		Samsung Electronics Co.,Ltd
-BC4760     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-04-18-0F   (hex)		Samsung Electronics Co.,Ltd
-04180F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-20-13-E0   (hex)		Samsung Electronics Co.,Ltd
-2013E0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-25-66   (hex)		Samsung Electronics Co.,Ltd
-002566     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-DB-32   (hex)		Nokia Corporation
-D0DB32     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-E8-00-36   (hex)		Befs co,. ltd
-E80036     (base 16)		Befs co,. ltd
-				C-#403, 242 Pangyo-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13487
-				KR
-
-C0-9F-05   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-C09F05     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-5C-49-79   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-5C4979     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-C0-F9-45   (hex)		Toshiba Toko Meter Systems Co., LTD.
-C0F945     (base 16)		Toshiba Toko Meter Systems Co., LTD.
-				3484, Sakuragaoka, Kurohama
-				Hasuda-shi  Saitama  349-0192
-				JP
-
-70-F8-E7   (hex)		IEEE Registration Authority
-70F8E7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D4-2C-44   (hex)		Cisco Systems, Inc
-D42C44     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-84-3D-C6   (hex)		Cisco Systems, Inc
-843DC6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-85   (hex)		ConteXtream Ltd
-002485     (base 16)		ConteXtream Ltd
-				94 Em-HaMoshavot
-				Petach-Tikva    49527
-				IL
-
-28-FC-F6   (hex)		Shenzhen Xin KingBrand enterprises Co.,Ltd
-28FCF6     (base 16)		Shenzhen Xin KingBrand enterprises Co.,Ltd
-				Kingbrand Industrial Zone,Nanpu Road,Shang liao ling pi keng,Shajing Town
-				Shenzhen  Guangdong  518000
-				CN
-
-00-1F-58   (hex)		EMH Energiemesstechnik GmbH
-001F58     (base 16)		EMH Energiemesstechnik GmbH
-				Vor dem Hassel 2
-				Brackel    21438
-				DE
-
-68-94-23   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-689423     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-84-4B-F5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-844BF5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-08-ED-B9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-08EDB9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-3C-77-E6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-3C77E6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-70-18-8B   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-70188B     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-5C-6D-20   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-5C6D20     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-5C-AC-4C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-5CAC4C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-16-DF   (hex)		Lundinova AB
-0016DF     (base 16)		Lundinova AB
-				Dalbyvägen 1
-				Lund  Skåne  SE-224 60
-				US
-
-00-1D-0C   (hex)		MobileCompia
-001D0C     (base 16)		MobileCompia
-				Dongwon Bldg, 725-30, Yeoksam-dong, Gangnam-gu,
-				Seoul    135-080
-				KR
-
-B8-8E-DF   (hex)		Zencheer Communication Technology Co., Ltd.
-B88EDF     (base 16)		Zencheer Communication Technology Co., Ltd.
-				Room 2706, BLDG#7, Changjiang Building, NO.12, Changjiang Road, New District
-				Wuxi  Jiangsu  214028
-				CN
-
-DC-71-44   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-DC7144     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				Suwon    443-743
-				US
-
-98-0C-82   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-980C82     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				Metan Dong 314, Youngtong Gu
-				Suwon  Kyung-gi Do.  443-743
-				KR
-
-A0-0B-BA   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-A00BBA     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				Suwon-Si, Gyeonggi_Do, Korea
-				Suwon  Gyeonggi_Do  443-743
-				KR
-
-60-6B-BD   (hex)		Samsung Electronics Co.,Ltd
-606BBD     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu
-				Suwon-si  Gyeonggi-do  443742
-				KR
-
-00-21-4C   (hex)		Samsung Electronics Co.,Ltd
-00214C     (base 16)		Samsung Electronics Co.,Ltd
-				416, METAN-3DONG,
-				SUWON  KYUNGKI-DO  442-742
-				KR
-
-08-C6-B3   (hex)		QTECH LLC
-08C6B3     (base 16)		QTECH LLC
-				Novozavodskaya st. 18 build. 1
-				Moscow  Moscow region  121309
-				RU
-
-00-18-AF   (hex)		Samsung Electronics Co.,Ltd
-0018AF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1
-				Gumi-City  Gyeong-Buk  730-350
-				KR
-
-00-1E-E1   (hex)		Samsung Electronics Co.,Ltd
-001EE1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-16-6B   (hex)		Samsung Electronics Co.,Ltd
-00166B     (base 16)		Samsung Electronics Co.,Ltd
-				416,Maetan-3Dong,Yeongtong-Gu
-				Suwon-City  Kyeonggi-Do  443-742
-				KR
-
-00-00-F0   (hex)		Samsung Electronics Co.,Ltd
-0000F0     (base 16)		Samsung Electronics Co.,Ltd
-				416, MAETAN-3DONG, PALDAL-GU
-				kwon    442-742
-				KR
-
-8C-C8-CD   (hex)		Samsung Electronics Co.,Ltd
-8CC8CD     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, Yeongtong-gu
-				Suwon  Gyeonggi-do  443742
-				KR
-
-A8-F2-74   (hex)		Samsung Electronics Co.,Ltd
-A8F274     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D4-87-D8   (hex)		Samsung Electronics Co.,Ltd
-D487D8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-46-17   (hex)		Samsung Electronics Co.,Ltd
-184617     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-38-0A-94   (hex)		Samsung Electronics Co.,Ltd
-380A94     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-DF-C7   (hex)		Samsung Electronics Co.,Ltd
-D0DFC7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-C1-B1   (hex)		Samsung Electronics Co.,Ltd
-D0C1B1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-18-A7   (hex)		Samsung Electronics Co.,Ltd
-8018A7     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3dong, Yeongtong-Gu
-				Suwon  Gyeonggi-Do  443742
-				KR
-
-F4-7B-5E   (hex)		Samsung Electronics Co.,Ltd
-F47B5E     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3dong, Yeongtong-Gu
-				Suwon  Gyeonggi-Do  443742
-				KR
-
-70-F9-27   (hex)		Samsung Electronics Co.,Ltd
-70F927     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-E7-1C   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-34E71C     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-88-6A-B1   (hex)		vivo Mobile Communication Co., Ltd.
-886AB1     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-6C-1E-90   (hex)		Hansol Technics Co., Ltd.
-6C1E90     (base 16)		Hansol Technics Co., Ltd.
-				55, Hansam-ro, Deoksan-Myeon
-				Jincheon-Gun  Chungbuk  27850
-				KR
-
-00-5A-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-005A13     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-50-06   (hex)		Samsung Electronics Co.,Ltd
-C45006     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-32-9B   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-88329B     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong    24180
-				US
-
-14-49-E0   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-1449E0     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong    24180
-				US
-
-D0-25-44   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-D02544     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-BC-44-86   (hex)		Samsung Electronics Co.,Ltd
-BC4486     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-20-D3-90   (hex)		Samsung Electronics Co.,Ltd
-20D390     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-01-C2   (hex)		Samsung Electronics Co.,Ltd
-9401C2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-FC-9F   (hex)		Samsung Electronics Co.,Ltd
-50FC9F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-38-0B-40   (hex)		Samsung Electronics Co.,Ltd
-380B40     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B8-FF-61   (hex)		Apple, Inc.
-B8FF61     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-61-24   (hex)		Pason Systems
-946124     (base 16)		Pason Systems
-				6130 - 3rd Street S.E.
-				Calgary  Alberta  T2H1K4
-				CA
-
-F0-72-8C   (hex)		Samsung Electronics Co.,Ltd
-F0728C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-AA-8B   (hex)		Samsung Electronics Co.,Ltd
-34AA8B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-24-DB-ED   (hex)		Samsung Electronics Co.,Ltd
-24DBED     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C8-DE-51   (hex)		 IntegraOptics
-C8DE51     (base 16)		 IntegraOptics
-				745 Albany Shaker Rd
-				Latham   NY  12110
-				US
-
-98-F0-58   (hex)		Lynxspring, Incl.
-98F058     (base 16)		Lynxspring, Incl.
-				1210 NE Windsor Drive
-				Lees Summit  MO  64086
-				US
-
-68-C4-4D   (hex)		Motorola Mobility LLC, a Lenovo Company
-68C44D     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-40-0D-10   (hex)		ARRIS Group, Inc.
-400D10     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-94-3D-C9   (hex)		Asahi Net, Inc.
-943DC9     (base 16)		Asahi Net, Inc.
-				Ginza 4-12-15 Chuo-ku
-				Tokyo    104-0061
-				JP
-
-44-04-44   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-440444     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-00-17-7E   (hex)		Meshcom Technologies Inc.
-00177E     (base 16)		Meshcom Technologies Inc.
-				Meritullinkatu 1 C
-				Helsinki    00170
-				FI
-
-A0-04-60   (hex)		NETGEAR
-A00460     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-98-84-E3   (hex)		Texas Instruments
-9884E3     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-38-D2-69   (hex)		Texas Instruments
-38D269     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-C8-FD-19   (hex)		Texas Instruments
-C8FD19     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-50-8C-B1   (hex)		Texas Instruments
-508CB1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-C4-F5-A5   (hex)		Kumalift Co., Ltd.
-C4F5A5     (base 16)		Kumalift Co., Ltd.
-				7-2-6 Saito-Asagi
-				Ibaraki  Osaka  567-0085
-				JP
-
-70-B1-4E   (hex)		ARRIS Group, Inc.
-70B14E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-30-44-87   (hex)		Hefei Radio Communication Technology Co., Ltd 
-304487     (base 16)		Hefei Radio Communication Technology Co., Ltd 
-				No.108, YinXing Road, High-tech Development Zone
-				Hefei  Anhui  230088
-				CN
-
-2C-9D-1E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2C9D1E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-81-C4   (hex)		Cisco Systems, Inc
-0081C4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-E8-76   (hex)		IEEE Registration Authority
-58E876     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D0-37-42   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-D03742     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-				Coolpad Information Harbor, 2nd Mengxi road, Hi-Tech Industrial Park(North), Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-00-17-65   (hex)		Nortel Networks
-001765     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-15-E8   (hex)		Nortel Networks
-0015E8     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-15-9B   (hex)		Nortel Networks
-00159B     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-0F-06   (hex)		Nortel Networks
-000F06     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-84-B5-41   (hex)		Samsung Electronics Co.,Ltd
-84B541     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-6F-64   (hex)		Samsung Electronics Co.,Ltd
-006F64     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-66-72   (hex)		Samsung Electronics Co.,Ltd
-DC6672     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-EC-8E-B5   (hex)		Hewlett Packard
-EC8EB5     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-70-AF-6A   (hex)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
-70AF6A     (base 16)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
-				ORIENTAL CYBERPORT, HIGHTECH 6 ROAD
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-20-F5-43   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-20F543     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-E0-DD-C0   (hex)		vivo Mobile Communication Co., Ltd.
-E0DDC0     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-00-16-4D   (hex)		Alcatel-Lucent IPD
-00164D     (base 16)		Alcatel-Lucent IPD
-				701 E. Middlefield RD.
-				Mountain View  CA  94043
-				US
-
-00-1A-F0   (hex)		Alcatel-Lucent IPD
-001AF0     (base 16)		Alcatel-Lucent IPD
-				701 E. Middlefield Rd.
-				Mountain View  CA  94943
-				US
-
-38-52-1A   (hex)		Nokia
-38521A     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-1E-40   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
-001E40     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
-				22F, lnfo Tech Building, NO.1555 Kongjiang Road,
-				Shanghai    200092
-				CN
-
-94-D7-23   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
-94D723     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
-				22F Info-Tech Building
-				Shanghai    200092
-				CN
-
-C4-04-7B   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-C4047B     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Shenzhen University-town Business Park,Lishan Road,Taoyuan Street
-				Shenzhen  Guangdong  518055
-				CN
-
-20-F4-1B   (hex)		Shenzhen Bilian electronic CO.,LTD
-20F41B     (base 16)		Shenzhen Bilian electronic CO.,LTD
-				NO 268, Fuqian Rd,Jutang Community,Guanlan town,
-				ShenZhen  Guangdong  518110
-				CN
-
-FC-FA-F7   (hex)		Shanghai Baud Data Communication Co.,Ltd.
-FCFAF7     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
-				NO.123 JULI RD
-				SHANGHAI    201203
-				CN
-
-D8-26-B9   (hex)		Guangdong Coagent Electronics S&amp;T Co.,Ltd.
-D826B9     (base 16)		Guangdong Coagent Electronics S&amp;T Co.,Ltd.
-				Section C,Xi Nan Industrial Zone Sanshui
-				Foshan  Guangdong  528133
-				CN
-
-AC-9C-E4   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-AC9CE4     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-00-23-3E   (hex)		Alcatel-Lucent IPD
-00233E     (base 16)		Alcatel-Lucent IPD
-				701 E. Middlefield Rd.
-				Mountain View  CA  94043
-				US
-
-6C-BE-E9   (hex)		Alcatel-Lucent IPD
-6CBEE9     (base 16)		Alcatel-Lucent IPD
-				701 E. Middlefield Rd.
-				Mountain View  CA  94043
-				US
-
-00-15-40   (hex)		Nortel Networks
-001540     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1E-CA   (hex)		Nortel Networks
-001ECA     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-13-0A   (hex)		Nortel Networks
-00130A     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1F-0A   (hex)		Nortel Networks
-001F0A     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-F8-E6-1A   (hex)		Samsung Electronics Co.,Ltd
-F8E61A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A0-91-C8   (hex)		zte corporation
-A091C8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-6C-A8-58   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-6CA858     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-CC-2D-8C   (hex)		LG ELECTRONICS INC
-CC2D8C     (base 16)		LG ELECTRONICS INC
-				19-1,Cheongho-Ri,Jinwi-Myeon
-				Pyeongtaek  Gyeonggi-Do  451-713
-				KR
-
-98-D6-F7   (hex)		LG Electronics (Mobile Communications)
-98D6F7     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-70-05-14   (hex)		LG Electronics (Mobile Communications)
-700514     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-E8-92-A4   (hex)		LG Electronics (Mobile Communications)
-E892A4     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-10-68-3F   (hex)		LG Electronics (Mobile Communications)
-10683F     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-40-B0-FA   (hex)		LG Electronics (Mobile Communications)
-40B0FA     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-25-E5   (hex)		LG Electronics (Mobile Communications)
-0025E5     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-21-FB   (hex)		LG Electronics (Mobile Communications)
-0021FB     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-34-FC-EF   (hex)		LG Electronics (Mobile Communications)
-34FCEF     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-BC-F5-AC   (hex)		LG Electronics (Mobile Communications)
-BCF5AC     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-A8-4E-3F   (hex)		Hitron Technologies. Inc
-A84E3F     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-0C-48-85   (hex)		LG Electronics (Mobile Communications)
-0C4885     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-22-A9   (hex)		LG Electronics (Mobile Communications)
-0022A9     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-2C-6A-6F   (hex)		IEEE Registration Authority
-2C6A6F     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-08-D8-33   (hex)		Shenzhen RF Technology Co., Ltd
-08D833     (base 16)		Shenzhen RF Technology Co., Ltd
-				5/F,Building 4 ,Baokun science and Technology Industrial Park,Dalang Street,Baoan District,Shenzhen,China
-				Shenzhen  Guangdong  518109
-				CN
-
-A4-60-32   (hex)		MRV Communications (Networks) LTD
-A46032     (base 16)		MRV Communications (Networks) LTD
-				Hayetzira 6
-				Yokneam  Yokneam  20692
-				IL
-
-40-66-7A   (hex)		mediola - connected living AG
-40667A     (base 16)		mediola - connected living AG
-				Nobelring 26
-				Frankfurt am Main  Hessen  60598
-				DE
-
-68-A0-F6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-68A0F6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-0E-5C   (hex)		ARRIS Group, Inc.
-000E5C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-84-5D-D7   (hex)		Shenzhen Netcom Electronics Co.,Ltd
-845DD7     (base 16)		Shenzhen Netcom Electronics Co.,Ltd
-				8/F,1 Building,Finance Base,No.8,Kefa Road,High-Tech Park
-				Shenzhen  Guangdong  518057
-				CN
-
-00-B0-64   (hex)		Cisco Systems, Inc
-00B064     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-2A-83   (hex)		Samsung Electronics Co.,Ltd
-9C2A83     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C8-02-10   (hex)		LG Innotek
-C80210     (base 16)		LG Innotek
-				Jangduk-dong 978-1
-				Gwang-ju  Gwangsan-gu  506-731
-				KR
-
-A0-39-F7   (hex)		LG Electronics (Mobile Communications)
-A039F7     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-1C-CA-E3   (hex)		IEEE Registration Authority
-1CCAE3     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E4-95-6E   (hex)		IEEE Registration Authority
-E4956E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B4-37-D1   (hex)		IEEE Registration Authority
-B437D1     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-55-DA   (hex)		IEEE Registration Authority
-0055DA     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-78-C2-C0   (hex)		IEEE Registration Authority
-78C2C0     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-0E-E8   (hex)		Zioncom Electronics (Shenzhen) Ltd.
-000EE8     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
-				West wing 5/F ., Block 1, GaoXin South Ring Rd/Keji South Rd,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-C0-95   (hex)		ZNYX Networks, Inc.
-00C095     (base 16)		ZNYX Networks, Inc.
-				48421 Milmont Drive
-				Fremont  CA  94538
-				US
-
-00-20-25   (hex)		CONTROL TECHNOLOGY, INC.
-002025     (base 16)		CONTROL TECHNOLOGY, INC.
-				5734 MIDDLEBROOK PIKE
-				KNOXVILLE  TN  37921
-				US
-
-00-1A-6B   (hex)		Universal Global Scientific Industrial Co., Ltd.
-001A6B     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351,SEC.1, TAIPING RD.
-				TSAOTUEN,  NANTOU  54261
-				TW
-
-00-16-41   (hex)		Universal Global Scientific Industrial Co., Ltd.
-001641     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351,SEC.1, TAIPING RD.
-				TSAOTUEN,  NANTOU  54261
-				TW
-
-00-10-C6   (hex)		Universal Global Scientific Industrial Co., Ltd.
-0010C6     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351,SEC.1, TAIPING RD.
-				TSAOTUEN,  NANTOU  54261
-				TW
-
-00-24-7E   (hex)		Universal Global Scientific Industrial Co., Ltd.
-00247E     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351,SEC.1,  TAIPING RD.
-				nantou  NANTOU  54261
-				TW
-
-00-DD-0A   (hex)		UNGERMANN-BASS INC.
-00DD0A     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-68-35-63   (hex)		SHENZHEN LIOWN ELECTRONICS CO.,LTD.
-683563     (base 16)		SHENZHEN LIOWN ELECTRONICS CO.,LTD.
-				ROOM 301, NO.7, GONGYE 3RD ROAD
-				SHEKOU, NANSHAN DISTRICT  SHENZHEN  518054
-				CN
-
-00-40-72   (hex)		Applied Innovation Inc.
-004072     (base 16)		Applied Innovation Inc.
-				5800 Innovation Drive
-				Dublin  OH  43016-3271
-				US
-
-00-19-38   (hex)		UMB Communications Co., Ltd.
-001938     (base 16)		UMB Communications Co., Ltd.
-				1010, 5, ACE Techno Tower, 197-22, Guro-dong, Guro-gu
-				Seoul    151-766
-				KR
-
-44-39-C4   (hex)		Universal Global Scientific Industrial Co., Ltd.
-4439C4     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141,Lane351,Taiping Rd.Sec.1
-				nan tou    542
-				TW
-
-40-2C-F4   (hex)		Universal Global Scientific Industrial Co., Ltd.
-402CF4     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, Taiping Rd. Sec. 1, Tsao Tuen, 
-				Nan-Tou Hsien,    542
-				TW
-
-00-1E-37   (hex)		Universal Global Scientific Industrial Co., Ltd.
-001E37     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, LANE 351,SEC.1, TAIPING RD.
-				TSAOTUEN,  NANTOU  54261
-				TW
-
-1C-57-D8   (hex)		Kraftway Corporation PLC
-1C57D8     (base 16)		Kraftway Corporation PLC
-				16, 3rd Mytischinskaya st.
-				Moscow    129626
-				RU
-
-00-23-18   (hex)		Toshiba
-002318     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-B8-6B-23   (hex)		Toshiba
-B86B23     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-00-08-F1   (hex)		Voltaire
-0008F1     (base 16)		Voltaire
-				9 Hamenofim st.
-				Herzelia    46725
-				IL
-
-00-19-9D   (hex)		Vizio, Inc
-00199D     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-00-E0-8B   (hex)		QLogic Corporation
-00E08B     (base 16)		QLogic Corporation
-				26600 Laguna Hills Dr.
-				Aliso Viejo  CA  92656
-				US
-
-D8-EB-97   (hex)		TRENDnet, Inc.
-D8EB97     (base 16)		TRENDnet, Inc.
-				20675 Manhattan Place
-				Torrance  CA  90501
-				US
-
-00-1C-7E   (hex)		Toshiba
-001C7E     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome    1988710
-				JP
-
-00-25-17   (hex)		Venntis, LLC
-002517     (base 16)		Venntis, LLC
-				11301 James Street
-				Holland  MI  49424
-				US
-
-00-60-0F   (hex)		Westell Technologies Inc.
-00600F     (base 16)		Westell Technologies Inc.
-				750 N Commons Dr
-				Aurora  IL  60504
-				US
-
-00-18-3A   (hex)		Westell Technologies Inc.
-00183A     (base 16)		Westell Technologies Inc.
-				750 N Commons Dr
-				Aurora  IL  60504
-				US
-
-60-02-B4   (hex)		Wistron Neweb Corporation
-6002B4     (base 16)		Wistron Neweb Corporation
-				No.20 Park Avenue II
-				Hsinchu    308
-				TW
-
-94-DF-4E   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
-94DF4E     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
-				168# First Avence,Kunshan Export Processing Zone ,China
-				Kunsha  JiangSu  215300
-				CN
-
-98-EE-CB   (hex)		Wistron Infocomm (Zhongshan) Corporation
-98EECB     (base 16)		Wistron Infocomm (Zhongshan) Corporation
-				No.38,East Keji Road,Zhongshan Torch Development Zone,Zhongshan City,Guangdong,China
-				Zhongshan  Guangdong  528437
-				CN
-
-00-1B-FE   (hex)		Zavio Inc.
-001BFE     (base 16)		Zavio Inc.
-				No.1,Lising 1st Rd. Science Based Industrial Park,
-				Hsinchu    300
-				TW
-
-54-10-EC   (hex)		Microchip Technology Inc.
-5410EC     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-00-04-A3   (hex)		Microchip Technology Inc.
-0004A3     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-78-9C-E7   (hex)		Shenzhen Aikede Technology Co., Ltd
-789CE7     (base 16)		Shenzhen Aikede Technology Co., Ltd
-				Room 9B,Block B,Neptunus Mansion,
-				Shenzhen  Guangdong  518000
-				CN
-
-50-9F-3B   (hex)		OI ELECTRIC CO.,LTD
-509F3B     (base 16)		OI ELECTRIC CO.,LTD
-				7-3-16 KIKUNA
-				YOKOHAMA  KANAGAWA-KEN  222-0011
-				JP
-
-44-6E-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-446EE5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-F7-C7   (hex)		Technicolor CH USA Inc.
-88F7C7     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-68-3E-34   (hex)		MEIZU Technology Co., Ltd.
-683E34     (base 16)		MEIZU Technology Co., Ltd.
-				MEIZU Tech Bldg., Technology & Innovation Coast
-				Zhuhai  Guangdong  519085
-				CN
-
-C8-77-8B   (hex)		Mercury Systems – Trusted Mission Solutions, Inc. 
-C8778B     (base 16)		Mercury Systems – Trusted Mission Solutions, Inc. 
-				47200 Bayside Pkwy
-				Fremont  CA  94538
-				US
-
-00-04-4B   (hex)		NVIDIA
-00044B     (base 16)		NVIDIA
-				3535 Monroe St.
-				Santa Clara  CA  95051
-				US
-
-AC-9B-0A   (hex)		Sony Corporation
-AC9B0A     (base 16)		Sony Corporation
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-10-4F-A8   (hex)		Sony Corporation
-104FA8     (base 16)		Sony Corporation
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-00-0B-6B   (hex)		Wistron Neweb Corporation
-000B6B     (base 16)		Wistron Neweb Corporation
-				No. 10-1, Li-Hsin Road I, Science-based
-				Hsinchu    300
-				TW
-
-AC-04-0B   (hex)		Peloton Interactive, Inc
-AC040B     (base 16)		Peloton Interactive, Inc
-				158 W 27th St, 4th Fl
-				New York  NY  10001
-				US
-
-48-FC-B6   (hex)		LAVA INTERNATIONAL(H.K) LIMITED
-48FCB6     (base 16)		LAVA INTERNATIONAL(H.K) LIMITED
-				UNIT L 1/F MAU LAM COMM BLDG 16-18 MAU LAM ST, JORDAN KL, HK
-				Hong kong    999077
-				CN
-
-B0-E2-35   (hex)		Xiaomi Communications Co Ltd
-B0E235     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-40-C7-29   (hex)		Sagemcom Broadband SAS
-40C729     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-14-C9-13   (hex)		LG Electronics
-14C913     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-F8-A0-97   (hex)		ARRIS Group, Inc.
-F8A097     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-FC-23-25   (hex)		EosTek (Shenzhen) Co., Ltd.
-FC2325     (base 16)		EosTek (Shenzhen) Co., Ltd.
-				Room 306, Complex Building Tsinghua High-Tech Park
-				Shenzhen  Guangdong  518057
-				CN
-
-FC-3D-93   (hex)		LONGCHEER TELECOMMUNICATION LIMITED
-FC3D93     (base 16)		LONGCHEER TELECOMMUNICATION LIMITED
-				Building 1,No.401,Caobao Rd
-				Shanghai  Xuhui District  200233
-				CN
-
-D8-E0-B8   (hex)		BULAT LLC
-D8E0B8     (base 16)		BULAT LLC
-				Zagorievsiy proezd 1, room 7
-				Moscow    115547
-				RU
-
-60-31-97   (hex)		Zyxel Communications Corporation
-603197     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-58-8B-F3   (hex)		Zyxel Communications Corporation
-588BF3     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-50-67-F0   (hex)		Zyxel Communications Corporation
-5067F0     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-00-13-49   (hex)		Zyxel Communications Corporation
-001349     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-E0-98-61   (hex)		Motorola Mobility LLC, a Lenovo Company
-E09861     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-9C-8E-CD   (hex)		Amcrest Technologies
-9C8ECD     (base 16)		Amcrest Technologies
-				16727 Park Row
-				Houston  TX  77084
-				US
-
-A0-09-ED   (hex)		Avaya Inc
-A009ED     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-00-14-B4   (hex)		General Dynamics United Kingdom Ltd
-0014B4     (base 16)		General Dynamics United Kingdom Ltd
-				Castleham Road
-				St Leonards on Sea  East Sussex  TN38 9NJ
-				GB
-
-A0-B4-37   (hex)		 GD Mission Systems
-A0B437     (base 16)		 GD Mission Systems
-				8220 EAST ROOSEVELT ST R2121
-				SCOTTSDALE  AZ  85257
-				US
-
-8C-6D-50   (hex)		SHENZHEN MTC CO LTD
-8C6D50     (base 16)		SHENZHEN MTC CO LTD
-				5th Floor, 3rd Building, SHENZHEN MTC Industrial Park, XiaLilang Rd, Nanwan Street, Long’gang District
-				Shenzhen  Guangdong  518100
-				CN
-
-00-F6-63   (hex)		Cisco Systems, Inc
-00F663     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-60-90   (hex)		Samsung Electronics Co.,Ltd
-A06090     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-76-5E   (hex)		Samsung Electronics Co.,Ltd
-BC765E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E0-A8-B8   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-E0A8B8     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-				,Le Shi Building, No.105 Yaojiayuan Road,Chaoyang District,Beijing,China
-				beijing  beijing  100025
-				CN
-
-F4-5B-73   (hex)		Wanjiaan Interconnected Technology Co., Ltd
-F45B73     (base 16)		Wanjiaan Interconnected Technology Co., Ltd
-				2nd Floor,Incubation Building, Science Development Institute of China, High-tech South 1st Street, Nanshan District
-				Shenzhen  Guangdong  518040
-				CN
-
-B8-81-98   (hex)		Intel Corporate
-B88198     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-B0-D7-CC   (hex)		Tridonic GmbH & Co KG
-B0D7CC     (base 16)		Tridonic GmbH & Co KG
-				Färbergasse 15
-				Dornbirn  Vorarlberg  6851
-				AT
-
-2C-DD-A3   (hex)		Point Grey Research Inc.
-2CDDA3     (base 16)		Point Grey Research Inc.
-				305-1847 West Broadway
-				Vancouver  British Columbia V6J 1Y6  
-				CA
-
-00-80-9F   (hex)		ALE International
-00809F     (base 16)		ALE International
-				32 avenue Kléber
-				Colombes    92700
-				FR
-
-48-C6-63   (hex)		GTO Access Systems LLC
-48C663     (base 16)		GTO Access Systems LLC
-				3121 Hartsfield Road
-				Tallahassee  FL  32303
-				US
-
-00-5F-86   (hex)		Cisco Systems, Inc
-005F86     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-38-1D-D9   (hex)		FN-LINK TECHNOLOGY LIMITED
-381DD9     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-1C-B9-C4   (hex)		Ruckus Wireless
-1CB9C4     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-8C-59-C3   (hex)		ADB Italia 
-8C59C3     (base 16)		ADB Italia 
-				Viale Sarca 222
-				Milan  Italy  20126
-				IT
-
-B8-24-F0   (hex)		SOYO Technology Development Co., Ltd.
-B824F0     (base 16)		SOYO Technology Development Co., Ltd.
-				4F, 9Bldg, Longbi Industry Zone, Longgang Dist, Shenzhen City, Guangdong Pro, China
-				Shenzhen City   Guangdong Pro  518129
-				CN
-
-D8-5B-2A   (hex)		Samsung Electronics Co.,Ltd
-D85B2A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-A8-9A   (hex)		Sunitec Enterprise Co.,Ltd
-FCA89A     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-1C-7B-23   (hex)		Qingdao Hisense Communications Co.,Ltd.
-1C7B23     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-00-0B-DE   (hex)		TELDIX GmbH
-000BDE     (base 16)		TELDIX GmbH
-				Grenzhoefer Weg 36
-				Heidelberg    69123
-				DE
-
-CC-D3-1E   (hex)		IEEE Registration Authority
-CCD31E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-34-B3-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-34B354     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-6E-76   (hex)		Quarion Technology Inc
-1C6E76     (base 16)		Quarion Technology Inc
-				3248 Commerce Drive
-				Newburgh  IN  47630
-				US
-
-90-C1-C6   (hex)		Apple, Inc.
-90C1C6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-0E-E6   (hex)		Chengdu Xiyida Electronic Technology Co,.Ltd
-6C0EE6     (base 16)		Chengdu Xiyida Electronic Technology Co,.Ltd
-				Room 408,Building A,No.33 Wuqing South Road,Wuhou District
-				Chengdu  Sichuan  610000
-				CN
-
-CC-50-0A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-CC500A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-D0-46-DC   (hex)		Southwest Research Institute
-D046DC     (base 16)		Southwest Research Institute
-				6220 Culebra Road
-				San Antonio  Texas  78238
-				US
-
-70-A2-B3   (hex)		Apple, Inc.
-70A2B3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-0F-24   (hex)		Apple, Inc.
-F40F24     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-57-CA   (hex)		Apple, Inc.
-4C57CA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-07-63   (hex)		Sunniwell Cyber Tech. Co., Ltd.
-000763     (base 16)		Sunniwell Cyber Tech. Co., Ltd.
-				17th Floor Haitai Building #229
-				Beijing    100083
-				CN
-
-00-62-EC   (hex)		Cisco Systems, Inc
-0062EC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-CC-16-7E   (hex)		Cisco Systems, Inc
-CC167E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C4-6A-B7   (hex)		Xiaomi Communications Co Ltd
-C46AB7     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-00-0A-ED   (hex)		HARTING Electronics GmbH
-000AED     (base 16)		HARTING Electronics GmbH
-				Wilhelm Harting Str.1
-				Espelkamp  NRW/OWL  32339
-				DE
-
-24-0A-11   (hex)		TCT mobile ltd
-240A11     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-D8-E5-6D   (hex)		TCT mobile ltd
-D8E56D     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-54-05-93   (hex)		WOORI ELEC Co.,Ltd
-540593     (base 16)		WOORI ELEC Co.,Ltd
-				#1401~03, #1411~12, Bucheon Deawoo Techno Park, D-Dong, 261,Doyak-Ro, Wonmi-Gu,Bucheon-Si
-				Gyeonggi-Do    14523
-				KR
-
-C0-2F-F1   (hex)		Volta Networks
-C02FF1     (base 16)		Volta Networks
-				109 Kingston St, 3rd Floor
-				Boston  MA  02111
-				US
-
-E8-A7-F2   (hex)		sTraffic
-E8A7F2     (base 16)		sTraffic
-				4th Fl., KTNET Building, 338 Pangyoro, Bundang-gu
-				Seongnam  Gyeonggi-do  13493
-				KR
-
-00-1F-20   (hex)		Logitech Europe SA
-001F20     (base 16)		Logitech Europe SA
-				EPFL - Quartier de l'Innovation
-				Lausanne  CH  1015
-				CH
-
-74-1F-4A   (hex)		Hangzhou H3C Technologies Co., Limited
-741F4A     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District,
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-E4-1D-2D   (hex)		Mellanox Technologies, Inc.
-E41D2D     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-0C-DA-41   (hex)		Hangzhou H3C Technologies Co., Limited
-0CDA41     (base 16)		Hangzhou H3C Technologies Co., Limited
-				310 Liuhe Road, Zhijiang Science Park
-				Hangzhou  Zhejiang,   310053
-				CN
-
-74-25-8A   (hex)		Hangzhou H3C Technologies Co., Limited
-74258A     (base 16)		Hangzhou H3C Technologies Co., Limited
-				310 Liuhe Road, Zhijiang Science Park
-				Hangzhou  Zhejiang,   310053
-				CN
-
-A0-B6-62   (hex)		Acutvista Innovation Co., Ltd.
-A0B662     (base 16)		Acutvista Innovation Co., Ltd.
-				2F-1, No. 20 Alley 1, Lane 768, Sec. 4
-				Taipei City    11577
-				TW
-
-E4-2F-56   (hex)		OptoMET GmbH
-E42F56     (base 16)		OptoMET GmbH
-				Pfungstaedter Str. 92
-				Darmstadt    64297
-				DE
-
-F8-DA-0C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-F8DA0C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-1C-1B-0D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-1C1B0D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-48-E9-F1   (hex)		Apple, Inc.
-48E9F1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-38-09   (hex)		Ericsson AB
-903809     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-00-A0-06   (hex)		IMAGE DATA PROCESSING SYSTEM GROUP
-00A006     (base 16)		IMAGE DATA PROCESSING SYSTEM GROUP
-				SHINTOYOFUTA 2-1
-				KASHIWA-CITY, CHIBA 277    
-				JP
-
-C8-3F-26   (hex)		Microsoft Corporation
-C83F26     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-34-97-F6   (hex)		ASUSTek COMPUTER INC.
-3497F6     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-50-68-0A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-50680A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-22-38   (hex)		LOGIPLUS
-002238     (base 16)		LOGIPLUS
-				1, RUE CLEMENT ADER
-				GOSSELIES  HAINAUT  B-6041
-				BE
-
-00-0C-49   (hex)		Dangaard Telecom Denmark A/S
-000C49     (base 16)		Dangaard Telecom Denmark A/S
-				Industrivej 1
-				Padborg    DK-6330
-				DK
-
-00-08-B9   (hex)		Kaonmedia CO., LTD.
-0008B9     (base 16)		Kaonmedia CO., LTD.
-				#113 Imae 1-Dong, Bundang-Gu
-				Sungnam-City  Kyungki-Do  463-829
-				KR
-
-60-B3-87   (hex)		Synergics Technologies GmbH
-60B387     (base 16)		Synergics Technologies GmbH
-				Hummelgasse 74-76/19
-				Vienna  Austria  1130
-				AT
-
-A4-D8-CA   (hex)		HONG KONG WATER WORLD TECHNOLOGY CO. LIMITED
-A4D8CA     (base 16)		HONG KONG WATER WORLD TECHNOLOGY CO. LIMITED
-				RM B-C, 24/F, GOLDEN BEAR INDUSTRIAL CENTRE, 66-82  CHAI WAN KOK STREET,TSUEN WAN. N.T.
-				Hong Kong    999077
-				HK
-
-80-19-FE   (hex)		JianLing Technology CO., LTD
-8019FE     (base 16)		JianLing Technology CO., LTD
-				No. 383-1, Sec. 2, Jinling Rd., Pingzhen Dist.,
-				Tao Yuan    324
-				TW
-
-60-B4-F7   (hex)		Plume Design Inc
-60B4F7     (base 16)		Plume Design Inc
-				200 California Ave
-				Palo Alto  CA  94306
-				US
-
-48-7A-DA   (hex)		Hangzhou H3C Technologies Co., Limited
-487ADA     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-00-1F-45   (hex)		Enterasys
-001F45     (base 16)		Enterasys
-				50 Minuteman Road
-				Andover  MA  01810
-				US
-
-00-1E-90   (hex)		Elitegroup Computer Systems Co.,Ltd.
-001E90     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No.239, Sec. 2, Ti Ding Blvd
-				Taipei    11493
-				TW
-
-00-22-B1   (hex)		Elbit Systems Ltd.
-0022B1     (base 16)		Elbit Systems Ltd.
-				p.o.b. 539
-				Haifa    36925
-				IL
-
-00-00-B4   (hex)		Edimax Technology Co. Ltd.
-0000B4     (base 16)		Edimax Technology Co. Ltd.
-				No. 278, Xinhu 1st Road
-				Taipei City  Neihu Dist  248
-				TW
-
-00-16-8F   (hex)		GN Netcom A/S
-00168F     (base 16)		GN Netcom A/S
-				Metalbuen 66
-				Ballerup  Skovlunde  DK-2750
-				DK
-
-00-0D-87   (hex)		Elitegroup Computer Systems Co.,Ltd.
-000D87     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No.22, Alley 38, Lane 91, Sec. 1, Nei Hu
-				Taipei    114
-				TW
-
-10-78-D2   (hex)		Elitegroup Computer Systems Co.,Ltd.
-1078D2     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				NO. 239, Sec. 2, Ti Ding Blvd.
-				Taipei  Taiwan  11493
-				TW
-
-00-21-97   (hex)		Elitegroup Computer Systems Co.,Ltd.
-002197     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				NO.239, Sec. 2, Ti Ding Blvd.,
-				Taipei    11493
-				TW
-
-E4-F3-F5   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-E4F3F5     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-A0-8C-FD   (hex)		Hewlett Packard
-A08CFD     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-00-0E-03   (hex)		Emulex Corporation
-000E03     (base 16)		Emulex Corporation
-				3333 Susan Street
-				Costa Mesa  CA  92626
-				US
-
-00-CA-E5   (hex)		Cisco Systems, Inc
-00CAE5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-42-68   (hex)		Cisco Systems, Inc
-004268     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-48-83-C7   (hex)		Sagemcom Broadband SAS
-4883C7     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-40-16-3B   (hex)		Samsung Electronics Co.,Ltd
-40163B     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-44-65-0D   (hex)		Amazon Technologies Inc.
-44650D     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-D4-F2-07   (hex)		DIAODIAO(Beijing)Technology CO.,Ltd
-D4F207     (base 16)		DIAODIAO(Beijing)Technology CO.,Ltd
-				48D Image Base, No 3 Guangqu Road, Chaoyang District, Beijing, China
-				Beijing    100124
-				CN
-
-D4-AD-2D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D4AD2D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-F0-8C-FB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-F08CFB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-48-55-5F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-48555F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-FC-3F-7C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FC3F7C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-38-4C-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-384C4F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-BF-3F   (hex)		Shenzhen Lencotion Technology Co.,Ltd
-0CBF3F     (base 16)		Shenzhen Lencotion Technology Co.,Ltd
-				LongGang,Buji Xia Shuijing,Hubei Baofeng Lndustrial Area,2/F,TowerB
-				shenzhen  Guangdong  518112
-				CN
-
-50-FF-99   (hex)		IEEE Registration Authority
-50FF99     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-84-E3-23   (hex)		Green Wave Telecommunication SDN BHD
-84E323     (base 16)		Green Wave Telecommunication SDN BHD
-				8, 12, 9 - Menara Mutiara, Bangsar, Jalan Liku, Off Jalan Bangsar
-				Kuala Lumpur    59100
-				MY
-
-70-5A-9E   (hex)		Technicolor CH USA Inc.
-705A9E     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-04-A3-16   (hex)		Texas Instruments
-04A316     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-14-0C-5B   (hex)		PLNetworks
-140C5B     (base 16)		PLNetworks
-				B-613, Tancheonsang-ro 164(Sigma 2)
-				Seongnam-si  Bundang-gu, Gyeonggi-do  13631
-				KR
-
-00-17-06   (hex)		Techfaithwireless Communication Technology Limited.
-001706     (base 16)		Techfaithwireless Communication Technology Limited.
-				2/F M8 West No.1 Jiu Xian Qiao Dong Road,
-				Beijing    100016
-				CN
-
-FC-08-4A   (hex)		FUJITSU LIMITED
-FC084A     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-BC-98-89   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-BC9889     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-24-61-5A   (hex)		China Mobile Group Device Co.,Ltd.
-24615A     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-40-5E-E1   (hex)		Shenzhen H&T Intelligent Control Co.,Ltd.
-405EE1     (base 16)		Shenzhen H&T Intelligent Control Co.,Ltd.
-				D-Zone,10/F,Shenzhen Academy of Aerospace Technology,Hi-Tech Park at Nanshan District,Shenzhen,China 
-				Shenzhen    518000
-				CN
-
-00-25-78   (hex)		JSC Concern Sozvezdie
-002578     (base 16)		JSC Concern Sozvezdie
-				Plekhanovskaya st., 14
-				Voronezh    394018
-				RU
-
-30-B4-9E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-30B49E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-C8-38-70   (hex)		Samsung Electronics Co.,Ltd
-C83870     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-55-3A   (hex)		QianGua Corp.
-1C553A     (base 16)		QianGua Corp.
-				Room 1106, block B,No.391,Gui Ping Road
-				Xu Hui District  ShangHai  200223
-				CN
-
-34-E7-0B   (hex)		HAN Networks Co., Ltd
-34E70B     (base 16)		HAN Networks Co., Ltd
-				5F,#37 Building,#8 Dongbeiwang Eest Road
-				Haidian District  Beijing  100193
-				CN
-
-00-78-88   (hex)		Cisco Systems, Inc
-007888     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-90-03-25   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-900325     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-98-E7-F5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-98E7F5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-5B-DA   (hex)		CliniCare LTD
-085BDA     (base 16)		CliniCare LTD
-				HaSadna 11 Suite 207
-				Ra'anana    4365006
-				IL
-
-1C-C0-35   (hex)		PLANEX COMMUNICATIONS INC.
-1CC035     (base 16)		PLANEX COMMUNICATIONS INC.
-				Planex Volta Bldg., 2-11-9 Ebisu-Nishi,Shibuya-ku,Tokyo 150-0021,Japan
-				Tokyo  Tokyo  150-0021
-				JP
-
-34-54-3C   (hex)		TAKAOKA TOKO CO.,LTD.
-34543C     (base 16)		TAKAOKA TOKO CO.,LTD.
-				8F,SIA TOYOSU PRIME SQUARE,5-6-36,Toyosu
-				Koto-ku  Tokyo  1350061
-				JP
-
-18-66-DA   (hex)		Dell Inc.
-1866DA     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-58-32-77   (hex)		Reliance Communications LLC
-583277     (base 16)		Reliance Communications LLC
-				555 Wireless Blvd
-				Hauppauge  NY  11788
-				US
-
-24-8A-07   (hex)		Mellanox Technologies, Inc.
-248A07     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-9C-9D-5D   (hex)		Raden Inc
-9C9D5D     (base 16)		Raden Inc
-				15 Maiden Lane
-				New York  NY  10038
-				US
-
-DC-4D-23   (hex)		MRV Comunications
-DC4D23     (base 16)		MRV Comunications
-				Hayetzira
-				Yokneam    614
-				IL
-
-00-23-B3   (hex)		Lyyn AB
-0023B3     (base 16)		Lyyn AB
-				IDEON Science Park
-				Lund    223 70
-				SE
-
-40-2E-28   (hex)		MiXTelematics
-402E28     (base 16)		MiXTelematics
-				Blaauwklip Office Park 2
-				Stellenbosch  Cape Province  7600
-				ZA
-
-6C-8F-B5   (hex)		Microsoft Mobile Oy
-6C8FB5     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				Espoo    02150
-				FI
-
-00-8E-73   (hex)		Cisco Systems, Inc
-008E73     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-C1   (hex)		Sony Interactive Entertainment Inc.
-0015C1     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-A0-9D-91   (hex)		SoundBridge
-A09D91     (base 16)		SoundBridge
-				#810, IT Convergence Industrial Bldg. 47, Gyeongdae-ro 17-Gil, Buk-gu,
-				Daegu    41566
-				KR
-
-40-B6-88   (hex)		LEGIC Identsystems AG
-40B688     (base 16)		LEGIC Identsystems AG
-				Binzackerstrasse 41
-				Wetzikon    8620
-				CH
-
-9C-D4-8B   (hex)		Innolux Technology Europe BV
-9CD48B     (base 16)		Innolux Technology Europe BV
-				Stationstraat 39G
-				Heerlen    6411NK
-				NL
-
-90-A6-2F   (hex)		NAVER
-90A62F     (base 16)		NAVER
-				NAVER Green Factory, 6, Buljeong-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-867
-				KR
-
-C0-C5-22   (hex)		ARRIS Group, Inc.
-C0C522     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-1C-9E-46   (hex)		Apple, Inc.
-1C9E46     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C4-E5-10   (hex)		Mechatro, Inc.
-C4E510     (base 16)		Mechatro, Inc.
-				169-28, Gasan Digital 2-ro, Geumcheon-Gu
-				Seoul    08500
-				KR
-
-18-A6-F7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-18A6F7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-35-1A   (hex)		Cisco Systems, Inc
-00351A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-AF-1F   (hex)		Cisco Systems, Inc
-00AF1F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-80-38-96   (hex)		SHARP Corporation
-803896     (base 16)		SHARP Corporation
-				1 Takumi-cho, Sakai-ku
-				Sakai City  Osaka  590-8522
-				JP
-
-00-60-EC   (hex)		HERMARY OPTO ELECTRONICS INC.
-0060EC     (base 16)		HERMARY OPTO ELECTRONICS INC.
-				201-4050 GRAVELEY ST
-				BURNABY, BC V5C-3T6    
-				CA
-
-C0-CC-F8   (hex)		Apple, Inc.
-C0CCF8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-4F-DA   (hex)		Apple, Inc.
-9C4FDA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-89-AD   (hex)		Apple, Inc.
-8489AD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-3A-7A   (hex)		Roku, Inc.
-AC3A7A     (base 16)		Roku, Inc.
-				12980 Saratoga Ave
-				Saratoga    95070
-				US
-
-B8-3E-59   (hex)		Roku, Inc.
-B83E59     (base 16)		Roku, Inc.
-				12980 Saratoga Ave.
-				Saratoga  CA  95070
-				US
-
-DC-3A-5E   (hex)		Roku, Inc.
-DC3A5E     (base 16)		Roku, Inc.
-				12980 Saratoga Ave.
-				Saratoga  CA  95070
-				US
-
-00-1A-73   (hex)		Gemtek Technology Co., Ltd.
-001A73     (base 16)		Gemtek Technology Co., Ltd.
-				No. 1 Jen Ai Road, Hsinchu Industrial Park, Hukou,
-				Hsinchu    303
-				TW
-
-00-90-4B   (hex)		Gemtek Technology Co., Ltd.
-00904B     (base 16)		Gemtek Technology Co., Ltd.
-				No. 1 Jen Ai Road,
-				Hukou, Hsinchu,  Taiwan  30352
-				TW
-
-00-1A-7F   (hex)		GCI Science & Technology Co.,LTD
-001A7F     (base 16)		GCI Science & Technology Co.,LTD
-				No.381, Xingangzhong Road,
-				guangzhou  guangdong  510310
-				CN
-
-00-18-0F   (hex)		Nokia Danmark A/S
-00180F     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V  Denmark  1790V
-				DK
-
-C8-97-9F   (hex)		Nokia Corporation
-C8979F     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-EC-F3-5B   (hex)		Nokia Corporation
-ECF35B     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-54-44-08   (hex)		Nokia Corporation
-544408     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  Varsinais-Suomi  24101
-				FI
-
-3C-C2-43   (hex)		Nokia Corporation
-3CC243     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  NA  24101
-				FI
-
-00-21-FC   (hex)		Nokia Danmark A/S
-0021FC     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790V
-				DK
-
-00-1F-5D   (hex)		Nokia Danmark A/S
-001F5D     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790V
-				DK
-
-00-1F-01   (hex)		Nokia Danmark A/S
-001F01     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790V
-				DK
-
-00-1B-EE   (hex)		Nokia Danmark A/S
-001BEE     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-19-79   (hex)		Nokia Danmark A/S
-001979     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-25-D0   (hex)		Nokia Danmark A/S
-0025D0     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-24-D4   (hex)		FREEBOX SAS
-0024D4     (base 16)		FREEBOX SAS
-				8 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-34-7E-39   (hex)		Nokia Danmark A/S
-347E39     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-50-7F   (hex)		DrayTek Corp.
-00507F     (base 16)		DrayTek Corp.
-				26, Fushing Rd.
-				Hsinchu  Hukou  303
-				TW
-
-64-77-91   (hex)		Samsung Electronics Co.,Ltd
-647791     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-E6-E7   (hex)		Samsung Electronics Co.,Ltd
-9CE6E7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-02-98   (hex)		Samsung Electronics Co.,Ltd
-9C0298     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-28-98-7B   (hex)		Samsung Electronics Co.,Ltd
-28987B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-FA-3E   (hex)		Samsung Electronics Co.,Ltd
-54FA3E     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-0C-89-10   (hex)		Samsung Electronics Co.,Ltd
-0C8910     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-78-AB-BB   (hex)		Samsung Electronics Co.,Ltd
-78ABBB     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-D8-C4-E9   (hex)		Samsung Electronics Co.,Ltd
-D8C4E9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-D1-1F   (hex)		Samsung Electronics Co.,Ltd
-BCD11F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F4-42-8F   (hex)		Samsung Electronics Co.,Ltd
-F4428F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-90-A2   (hex)		CyberTAN Technology Inc.
-0090A2     (base 16)		CyberTAN Technology Inc.
-				99, Park Avenue III
-				Hsinchu    12345
-				TW
-
-00-90-D6   (hex)		Crystal Group, Inc.
-0090D6     (base 16)		Crystal Group, Inc.
-				850 KACENA RD.
-				HIAWATHA  IA  52233
-				US
-
-44-6D-6C   (hex)		Samsung Electronics Co.,Ltd
-446D6C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-F4-6F   (hex)		Samsung Electronics Co.,Ltd
-00F46F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-71-5D   (hex)		Samsung Electronics Co.,Ltd
-0C715D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-80-DF   (hex)		Arcadyan Technology Corporation
-9C80DF     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-00-23-08   (hex)		Arcadyan Technology Corporation
-002308     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-88-03-55   (hex)		Arcadyan Technology Corporation
-880355     (base 16)		Arcadyan Technology Corporation
-				4F., No.9 , Park Avenue II
-				Hsinchu    300
-				TW
-
-34-BB-1F   (hex)		BlackBerry RTS
-34BB1F     (base 16)		BlackBerry RTS
-				451 Phillip Street
-				Waterloo  ON  N2L 3X2
-				CA
-
-40-6F-2A   (hex)		BlackBerry RTS
-406F2A     (base 16)		BlackBerry RTS
-				295 Phillip Street
-				Waterloo  Ontario  N2V 2S7
-				CA
-
-7C-1C-F1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C1CF1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-F5-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-78F557     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-28-61   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E02861     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-D0-4B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D0D04B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-00-31   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-480031     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-76-EA   (hex)		zte corporation
-D476EA     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-17-5A   (hex)		Cisco Systems, Inc
-00175A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-96-D7   (hex)		AVM GmbH
-0896D7     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-50-6A-03   (hex)		NETGEAR
-506A03     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-10-0D-7F   (hex)		NETGEAR
-100D7F     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-50-4A-6E   (hex)		NETGEAR
-504A6E     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-4C-09-D4   (hex)		Arcadyan Technology Corporation
-4C09D4     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-18-C0-86   (hex)		Broadcom
-18C086     (base 16)		Broadcom
-				5300 California Avenue
-				Irvine  CA  92617
-				US
-
-00-10-18   (hex)		Broadcom
-001018     (base 16)		Broadcom
-				16215 ALTON PARKWAY
-				IRVINE  CA  92619-7013
-				US
-
-C8-FF-28   (hex)		Liteon Technology Corporation
-C8FF28     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-B8-16-19   (hex)		ARRIS Group, Inc.
-B81619     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-B0-77-AC   (hex)		ARRIS Group, Inc.
-B077AC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-FC-B4-E6   (hex)		ASKEY COMPUTER CORP
-FCB4E6     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				TAIWAN  NEW TAIPEI  23585
-				TW
-
-00-19-2C   (hex)		ARRIS Group, Inc.
-00192C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-19-5E   (hex)		ARRIS Group, Inc.
-00195E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1A-1B   (hex)		ARRIS Group, Inc.
-001A1B     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1A-66   (hex)		ARRIS Group, Inc.
-001A66     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1A-77   (hex)		ARRIS Group, Inc.
-001A77     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-64-ED-57   (hex)		ARRIS Group, Inc.
-64ED57     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A4-ED-4E   (hex)		ARRIS Group, Inc.
-A4ED4E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-21-1E   (hex)		ARRIS Group, Inc.
-00211E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-21-80   (hex)		ARRIS Group, Inc.
-002180     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1B-DD   (hex)		ARRIS Group, Inc.
-001BDD     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-6B   (hex)		ARRIS Group, Inc.
-001D6B     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-BE   (hex)		ARRIS Group, Inc.
-001DBE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-12-C9   (hex)		ARRIS Group, Inc.
-0012C9     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-A2   (hex)		ARRIS Group, Inc.
-0023A2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-ED   (hex)		ARRIS Group, Inc.
-0023ED     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1B-52   (hex)		ARRIS Group, Inc.
-001B52     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1E-8D   (hex)		ARRIS Group, Inc.
-001E8D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E0-46-9A   (hex)		NETGEAR
-E0469A     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-30-46-9A   (hex)		NETGEAR
-30469A     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-24-93   (hex)		ARRIS Group, Inc.
-002493     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-26-41   (hex)		ARRIS Group, Inc.
-002641     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-D0   (hex)		ARRIS Group, Inc.
-0015D0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-96   (hex)		ARRIS Group, Inc.
-001596     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-04-E6-76   (hex)		AMPAK Technology, Inc.
-04E676     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road
-				Hsinchu    30352
-				TW
-
-00-22-F4   (hex)		AMPAK Technology, Inc.
-0022F4     (base 16)		AMPAK Technology, Inc.
-				No. 8-1, Nanyuan 2nd Rd.
-				Jhongli  Taoyuan  320
-				TW
-
-00-1D-BA   (hex)		Sony Corporation
-001DBA     (base 16)		Sony Corporation
-				Gotenyama Tec,5-1-12,
-				Shinagawa-ku  Tokyo  141-0001
-				JP
-
-00-24-BE   (hex)		Sony Corporation
-0024BE     (base 16)		Sony Corporation
-				Gotenyama Tec. 5-1-12
-				Shinagawa-ku  Tokyo  141-0001
-				JP
-
-0C-FE-45   (hex)		Sony Interactive Entertainment Inc.
-0CFE45     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-20-16-D8   (hex)		Liteon Technology Corporation
-2016D8     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo
-				New Taipei City  Taipei  23585
-				TW
-
-F8-D0-AC   (hex)		Sony Interactive Entertainment Inc.
-F8D0AC     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-20-E5-64   (hex)		ARRIS Group, Inc.
-20E564     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-90-B1-34   (hex)		ARRIS Group, Inc.
-90B134     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-40-B7-F3   (hex)		ARRIS Group, Inc.
-40B7F3     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-17-E2   (hex)		ARRIS Group, Inc.
-0017E2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-16-75   (hex)		ARRIS Group, Inc.
-001675     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-0C-E5   (hex)		ARRIS Group, Inc.
-000CE5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-03-E0   (hex)		ARRIS Group, Inc.
-0003E0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-D0-C9   (hex)		ADVANTECH CO., LTD.
-00D0C9     (base 16)		ADVANTECH CO., LTD.
-				FL. 4, NO.  108-3
-				TAIPEI  TAIPEI  TAIWAN
-				TW
-
-64-87-D7   (hex)		ADB Broadband Italia
-6487D7     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-E0-B2-F1   (hex)		FN-LINK TECHNOLOGY LIMITED
-E0B2F1     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				5th Floor, A Building, Haoye Logistics Park, Shugang Channel, Bao'an District,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-0C-4C-39   (hex)		MitraStar Technology Corp.
-0C4C39     (base 16)		MitraStar Technology Corp.
-				4F No.6 Innovation Road II
-				Hsin-Chu    300
-				TW
-
-74-88-8B   (hex)		ADB Broadband Italia
-74888B     (base 16)		ADB Broadband Italia
-				via Sarca 222
-				Milano    20126
-				IT
-
-00-8C-54   (hex)		ADB Broadband Italia
-008C54     (base 16)		ADB Broadband Italia
-				VIALE SARCA 336
-				MILANO    20126
-				US
-
-00-24-7B   (hex)		Actiontec Electronics, Inc
-00247B     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-04-E3   (hex)		Accton Technology Corp
-0004E3     (base 16)		Accton Technology Corp
-				No. 1 Creation Rd. III,
-				Hsinchu  Hsinchu  TAIWAN
-				TW
-
-00-10-B5   (hex)		Accton Technology Corp
-0010B5     (base 16)		Accton Technology Corp
-				NO.1, CREATION RD. III
-				HSINCHU 300    12345
-				TW
-
-00-19-74   (hex)		16063
-001974     (base 16)		16063
-				1F , No. 21, Yanfa 2nd Rd., SBIP
-				Hsinchu City  Hsinchu  300
-				TW
-
-E8-61-7E   (hex)		Liteon Technology Corporation
-E8617E     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-18-CF-5E   (hex)		Liteon Technology Corporation
-18CF5E     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-F0-27-2D   (hex)		Amazon Technologies Inc.
-F0272D     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-84-D6-D0   (hex)		Amazon Technologies Inc.
-84D6D0     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-18-FE-34   (hex)		Espressif Inc.
-18FE34     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-38-22-9D   (hex)		ADB Broadband Italia
-38229D     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-A4-52-6F   (hex)		ADB Broadband Italia
-A4526F     (base 16)		ADB Broadband Italia
-				via Sarca 222
-				Milano    20126
-				IT
-
-60-5B-B4   (hex)		AzureWave Technology Inc.
-605BB4     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.,
-				New Taipei City  Taiwan  231
-				TW
-
-64-D9-54   (hex)		Taicang T&W Electronics
-64D954     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD, Lu Du,
-				Taicang  Jiangsu  215412
-				CN
-
-5C-36-B8   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-5C36B8     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-				7/F，TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Road, Nanshan
-				Shenzhen  Guangdong   518052
-				CN
-
-00-AA-01   (hex)		Intel Corporation
-00AA01     (base 16)		Intel Corporation
-				445
-				piscataway  NJ  08554
-				US
-
-98-5F-D3   (hex)		Microsoft Corporation
-985FD3     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-00-DA-55   (hex)		Cisco Systems, Inc
-00DA55     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-18-E3-BC   (hex)		TCT mobile ltd
-18E3BC     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-CC-1F-C4   (hex)		InVue
-CC1FC4     (base 16)		InVue
-				15015 Lancaster Hwy
-				Charlotte  NC  28277
-				US
-
-00-AA-00   (hex)		Intel Corporation
-00AA00     (base 16)		Intel Corporation
-				5200 NE ELAM YOUNG PARKWAY
-				HILLSBORO  OR  97124
-				US
-
-00-C2-C6   (hex)		Intel Corporate
-00C2C6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-5C-D2-E4   (hex)		Intel Corporate
-5CD2E4     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-28-B2-BD   (hex)		Intel Corporate
-28B2BD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-22-43   (hex)		AzureWave Technology Inc.
-002243     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd., Xindian
-				Taipei    231
-				TW
-
-00-00-6E   (hex)		Artisoft Inc.
-00006E     (base 16)		Artisoft Inc.
-				691 EAST RIVER ROAD
-				TUCSON  AZ  85704
-				US
-
-44-87-23   (hex)		HOYA SERVICE CORPORATION
-448723     (base 16)		HOYA SERVICE CORPORATION
-				4-10-2 Nakano
-				Nakano-ku  Tokyo  164-8545
-				JP
-
-D8-6C-02   (hex)		Huaqin Telecom Technology Co.,Ltd
-D86C02     (base 16)		Huaqin Telecom Technology Co.,Ltd
-				No.1 Building,399 Keyuan Road, Zhangjian Hi-Tech Park, Pudong New Area
-				Shanghai    201203
-				CN
-
-60-BE-B5   (hex)		Motorola Mobility LLC, a Lenovo Company
-60BEB5     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				600 North US Highway 45
-				Libertyville  IL  60048
-				US
-
-F8-F1-B6   (hex)		Motorola Mobility LLC, a Lenovo Company
-F8F1B6     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				600 North US Highway 45
-				Libertyville  IL  60048
-				US
-
-3C-FD-FE   (hex)		Intel Corporate
-3CFDFE     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-A4-C4-94   (hex)		Intel Corporate
-A4C494     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-90-2E-1C   (hex)		Intel Corporate
-902E1C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-A4-34-D9   (hex)		Intel Corporate
-A434D9     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-68-5D-43   (hex)		Intel Corporate
-685D43     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-A0-36-9F   (hex)		Intel Corporate
-A0369F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-64-D4-DA   (hex)		Intel Corporate
-64D4DA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-40-25-C2   (hex)		Intel Corporate
-4025C2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-50-2D-A2   (hex)		Intel Corporate
-502DA2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-78-92-9C   (hex)		Intel Corporate
-78929C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-84-3A-4B   (hex)		Intel Corporate
-843A4B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-5C-51-4F   (hex)		Intel Corporate
-5C514F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-A4-4E-31   (hex)		Intel Corporate
-A44E31     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-4C-EB-42   (hex)		Intel Corporate
-4CEB42     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-F8-16-54   (hex)		Intel Corporate
-F81654     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-60-6C-66   (hex)		Intel Corporate
-606C66     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-4C-80-93   (hex)		Intel Corporate
-4C8093     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-AC-72-89   (hex)		Intel Corporate
-AC7289     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-44-85-00   (hex)		Intel Corporate
-448500     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-0C-D2-92   (hex)		Intel Corporate
-0CD292     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-DC-A9-71   (hex)		Intel Corporate
-DCA971     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-58-94-6B   (hex)		Intel Corporate
-58946B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-24-D7   (hex)		Intel Corporate
-0024D7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-24-D6   (hex)		Intel Corporate
-0024D6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1D-E0   (hex)		Intel Corporate
-001DE0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-4C-79-BA   (hex)		Intel Corporate
-4C79BA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-84-A6-C8   (hex)		Intel Corporate
-84A6C8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-58-91-CF   (hex)		Intel Corporate
-5891CF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-0C-8B-FD   (hex)		Intel Corporate
-0C8BFD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-21-5C   (hex)		Intel Corporate
-00215C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-21-6B   (hex)		Intel Corporate
-00216B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-22-FB   (hex)		Intel Corporate
-0022FB     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-15-17   (hex)		Intel Corporate
-001517     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-A0-A8-CD   (hex)		Intel Corporate
-A0A8CD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-5C-C5-D4   (hex)		Intel Corporate
-5CC5D4     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1E-64   (hex)		Intel Corporate
-001E64     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-F4-F1-E1   (hex)		Motorola Mobility LLC, a Lenovo Company
-F4F1E1     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 Merchandise Mart Plaza, Suite 1800
-				Chicago  IL  60654
-				US
-
-9C-D9-17   (hex)		Motorola Mobility LLC, a Lenovo Company
-9CD917     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 Merchandise Mart Plaza, Suite 1800
-				Chicago  IL  60654
-				US
-
-90-68-C3   (hex)		Motorola Mobility LLC, a Lenovo Company
-9068C3     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 Merchandise Mart Plaza, Suite 1800
-				Chicago  IL  60654
-				US
-
-3C-19-7D   (hex)		Ericsson AB
-3C197D     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-B4-E1-0F   (hex)		Dell Inc.
-B4E10F     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-22-19   (hex)		Dell Inc.
-002219     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-00-24-E8   (hex)		Dell Inc.
-0024E8     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock    78682
-				US
-
-B0-83-FE   (hex)		Dell Inc.
-B083FE     (base 16)		Dell Inc.
-				One Dell way
-				Round Rock    78682
-				US
-
-34-17-EB   (hex)		Dell Inc.
-3417EB     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-F8-BC-12   (hex)		Dell Inc.
-F8BC12     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-18-A9-9B   (hex)		Dell Inc.
-18A99B     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-13-72   (hex)		Dell Inc.
-001372     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-11-43   (hex)		Dell Inc.
-001143     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-4C-76-25   (hex)		Dell Inc.
-4C7625     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-44-A8-42   (hex)		Dell Inc.
-44A842     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-25-3C   (hex)		2Wire Inc
-00253C     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-34-EF-44   (hex)		2Wire Inc
-34EF44     (base 16)		2Wire Inc
-				1764 Automation Pkwy
-				San Jose  CA  95131
-				US
-
-B0-E7-54   (hex)		2Wire Inc
-B0E754     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose    95131
-				US
-
-F0-1F-AF   (hex)		Dell Inc.
-F01FAF     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-18-8B   (hex)		Dell Inc.
-00188B     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-08-74   (hex)		Dell Inc.
-000874     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-B8-E6-25   (hex)		2Wire Inc
-B8E625     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose    95131
-				US
-
-00-1D-5A   (hex)		2Wire Inc
-001D5A     (base 16)		2Wire Inc
-				1704 Automation Parkway
-				San  Jose    95131
-				US
-
-1C-44-19   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-1C4419     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-5C-35-3B   (hex)		Compal Broadband Networks, Inc.
-5C353B     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-28-FA-A0   (hex)		vivo Mobile Communication Co., Ltd.
-28FAA0     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-EC-DF-3A   (hex)		vivo Mobile Communication Co., Ltd.
-ECDF3A     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-F4-29-81   (hex)		vivo Mobile Communication Co., Ltd.
-F42981     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-84-F6-FA   (hex)		Miovision Technologies Incorporated
-84F6FA     (base 16)		Miovision Technologies Incorporated
-				148 Manitou Drive
-				KITCHENER  Ontario  N2C1L4
-				CA
-
-70-10-6F   (hex)		Hewlett Packard Enterprise
-70106F     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-F8-E7-1E   (hex)		Ruckus Wireless
-F8E71E     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-08-86-3B   (hex)		Belkin International Inc.
-08863B     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista  CA  90094
-				US
-
-24-7C-4C   (hex)		Herman Miller
-247C4C     (base 16)		Herman Miller
-				Unit 2, 2/F The Factory, 1 Yip Fat Street
-				Wong Chuk Hang    -
-				HK
-
-E4-6F-13   (hex)		D-Link International
-E46F13     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-2C-56-DC   (hex)		ASUSTek COMPUTER INC.
-2C56DC     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-00-31-46   (hex)		Juniper Networks
-003146     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-60-4C   (hex)		Sagemcom Broadband SAS
-00604C     (base 16)		Sagemcom Broadband SAS
-				27 RUE LEBLANC
-				CEDEX 15  PARIS  75512
-				FR
-
-00-1F-95   (hex)		Sagemcom Broadband SAS
-001F95     (base 16)		Sagemcom Broadband SAS
-				Le Ponnant de Paris
-				CEDEX  Paris  75512
-				FR
-
-00-23-48   (hex)		Sagemcom Broadband SAS
-002348     (base 16)		Sagemcom Broadband SAS
-				Le Ponnant de Paris
-				CEDEX  Paris  75512
-				FR
-
-00-26-91   (hex)		Sagemcom Broadband SAS
-002691     (base 16)		Sagemcom Broadband SAS
-				Le Ponnant de Paris
-				CEDEX  Paris  75512
-				FR
-
-98-8B-5D   (hex)		Sagemcom Broadband SAS
-988B5D     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison    92848
-				FR
-
-90-01-3B   (hex)		Sagemcom Broadband SAS
-90013B     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-7C-03-4C   (hex)		Sagemcom Broadband SAS
-7C034C     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-6C-2E-85   (hex)		Sagemcom Broadband SAS
-6C2E85     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-94-FE-F4   (hex)		Sagemcom Broadband SAS
-94FEF4     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-34-B1-F7   (hex)		Texas Instruments
-34B1F7     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-2C-FD-37   (hex)		Blue Calypso, Inc.
-2CFD37     (base 16)		Blue Calypso, Inc.
-				101 West Renner RD Suite 280
-				Richardson  TX  75082
-				US
-
-0C-61-27   (hex)		Actiontec Electronics, Inc
-0C6127     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-3C-D9-2B   (hex)		Hewlett Packard
-3CD92B     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-78-DE-E4   (hex)		Texas Instruments
-78DEE4     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-18-33   (hex)		Texas Instruments
-001833     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-18-34   (hex)		Texas Instruments
-001834     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-E3   (hex)		Texas Instruments
-0017E3     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-18-30   (hex)		Texas Instruments
-001830     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-23-D4   (hex)		Texas Instruments
-0023D4     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-BC-F6-85   (hex)		D-Link International
-BCF685     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-78-54-2E   (hex)		D-Link International
-78542E     (base 16)		D-Link International
-				1 Internal Business Park, #03-12.
-				SINGAPORE  Singapore  609917
-				TW
-
-C4-A8-1D   (hex)		D-Link International
-C4A81D     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,
-				SINGAPORE  Singapore  609917
-				SG
-
-00-21-91   (hex)		D-Link Corporation
-002191     (base 16)		D-Link Corporation
-				NO.289, Sinhu 3rd Rd.,
-				Neihu District,  Taipei City  114
-				TW
-
-AC-F1-DF   (hex)		D-Link International
-ACF1DF     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-C0-E4-22   (hex)		Texas Instruments
-C0E422     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-D0-07-90   (hex)		Texas Instruments
-D00790     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-3C-7D-B1   (hex)		Texas Instruments
-3C7DB1     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-F4-FC-32   (hex)		Texas Instruments
-F4FC32     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-90-D7-EB   (hex)		Texas Instruments
-90D7EB     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-E8   (hex)		Texas Instruments
-0017E8     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-17-83   (hex)		Texas Instruments
-001783     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-24-35-CC   (hex)		Zhongshan Scinan Internet of Things Co.,Ltd.
-2435CC     (base 16)		Zhongshan Scinan Internet of Things Co.,Ltd.
-				15/F Bldg 1·Dezhong Plaza Torch Development Zone Zhongshan·Guangdong
-				ZhongShan  GuangDong  528437
-				CN
-
-2C-30-33   (hex)		NETGEAR
-2C3033     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-CC-46-D6   (hex)		Cisco Systems, Inc
-CC46D6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-41-D2   (hex)		Cisco Systems, Inc
-0041D2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-AB-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2CAB00     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-CA-7B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A8CA7B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-BF-6D   (hex)		Zyxel Communications Corporation
-04BF6D     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-F8-8F-CA   (hex)		Google, Inc.
-F88FCA     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View    94043
-				US
-
-38-98-D8   (hex)		MERITECH CO.,LTD
-3898D8     (base 16)		MERITECH CO.,LTD
-				52-17 Sinjeon-Ro 41beon-gil
-				Giheung-gu, Yongin-City Kyungki-do    446-599
-				KR
-
-94-86-CD   (hex)		SEOUL ELECTRONICS&TELECOM
-9486CD     (base 16)		SEOUL ELECTRONICS&TELECOM
-				709, Namkwangcentrex 440-4, Cheongcheon-dong, 
-				Bupyeong-gu  Incheon  403-030
-				KR
-
-38-97-D6   (hex)		Hangzhou H3C Technologies Co., Limited
-3897D6     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-1C-A7-70   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-1CA770     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit A 13-16/F,Skyworth Bldg., Gaoxin Ave.1.S.,Nanshan District
-				ShenZhen  GuangDong  518057
-				CN
-
-44-19-B6   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-4419B6     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-68-DB-CA   (hex)		Apple, Inc.
-68DBCA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-66-98   (hex)		Apple, Inc.
-086698     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-54-36   (hex)		Apple, Inc.
-BC5436     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-4B-ED   (hex)		Apple, Inc.
-044BED     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-8D-C1   (hex)		Apple, Inc.
-6C8DC1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-AC-FB   (hex)		Crouzet Automatismes
-84ACFB     (base 16)		Crouzet Automatismes
-				2 rue du docteur Abel
-				Valence  France  26902
-				FR
-
-7C-BB-8A   (hex)		Nintendo Co., Ltd.
-7CBB8A     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-FC-FF-AA   (hex)		IEEE Registration Authority
-FCFFAA     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-0C-D7-46   (hex)		Apple, Inc.
-0CD746     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-A3-7D   (hex)		Apple, Inc.
-60A37D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-A2-5E   (hex)		Juniper Networks
-88A25E     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-54-1E-56   (hex)		Juniper Networks
-541E56     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-88-96-B6   (hex)		Global Fire Equipment S.A.
-8896B6     (base 16)		Global Fire Equipment S.A.
-				Sitio dos Barrabés, Armazém Nave Y,
-				São Brás de Alportel  Faro  8150-016
-				PT
-
-88-B8-D0   (hex)		Dongguan Koppo Electronic Co.,Ltd
-88B8D0     (base 16)		Dongguan Koppo Electronic Co.,Ltd
-				No.2, Third Road, Buxinji Industrial Area, Guanjingtou Village, Fenggang Town, Dongguan City, Guangdong Province, China
-				Dongguan    523705
-				CN
-
-60-19-71   (hex)		ARRIS Group, Inc.
-601971     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-CA-B8   (hex)		Dell Inc.
-F8CAB8     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-11-11   (hex)		Intel Corporation
-001111     (base 16)		Intel Corporation
-				2111 NE 25th Avenue
-				Hillsboro  OR  97124
-				US
-
-00-13-02   (hex)		Intel Corporate
-001302     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-6C-CA-08   (hex)		ARRIS Group, Inc.
-6CCA08     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-78-71-9C   (hex)		ARRIS Group, Inc.
-78719C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D4-05-98   (hex)		ARRIS Group, Inc.
-D40598     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E8-33-81   (hex)		ARRIS Group, Inc.
-E83381     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-8C-7F-3B   (hex)		ARRIS Group, Inc.
-8C7F3B     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-5C-57-1A   (hex)		ARRIS Group, Inc.
-5C571A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E8-89-2C   (hex)		ARRIS Group, Inc.
-E8892C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-94-87-7C   (hex)		ARRIS Group, Inc.
-94877C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-40-70-09   (hex)		ARRIS Group, Inc.
-407009     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-08-3E-0C   (hex)		ARRIS Group, Inc.
-083E0C     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-3C-36-E4   (hex)		ARRIS Group, Inc.
-3C36E4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-1C-1B-68   (hex)		ARRIS Group, Inc.
-1C1B68     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-04-23   (hex)		Intel Corporation
-000423     (base 16)		Intel Corporation
-				M/S:  JF3-420
-				Hillsboro  OR  97124
-				US
-
-20-73-55   (hex)		ARRIS Group, Inc.
-207355     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-ED-A5   (hex)		ARRIS Group, Inc.
-F8EDA5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-54-65-DE   (hex)		ARRIS Group, Inc.
-5465DE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-58-AC-78   (hex)		Cisco Systems, Inc
-58AC78     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-78-0A-C7   (hex)		Baofeng TV Co., Ltd.
-780AC7     (base 16)		Baofeng TV Co., Ltd.
-				Room 2D, Building 5D, Nanshan District Software Industry Base
-				ShenZhen  GuangDong  518000
-				CN
-
-00-0D-0B   (hex)		BUFFALO.INC
-000D0B     (base 16)		BUFFALO.INC
-				MELCO HI-TECH CENTER,
-				NAGOYA    457-8520
-				JP
-
-00-1D-73   (hex)		BUFFALO.INC
-001D73     (base 16)		BUFFALO.INC
-				15,Shibata Hondori 4-chome,
-				Nagoya  Aichi Pref.  457-8520
-				JP
-
-00-16-01   (hex)		BUFFALO.INC
-001601     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref.  460-8315
-				JP
-
-74-03-BD   (hex)		BUFFALO.INC
-7403BD     (base 16)		BUFFALO.INC
-				 AKAMONDORI Bldg, 30-20, Ohsu 3-chome,
-				Minami-ku, Nagoya  Aichi Pref.  457-8520
-				JP
-
-B8-FC-9A   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-B8FC9A     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-				,Le Shi Building, No.105 Yaojiayuan Road,Chaoyang District,Beijing,China
-				beijing  beijing  100025
-				CN
-
-A4-5D-36   (hex)		Hewlett Packard
-A45D36     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-F0-92-1C   (hex)		Hewlett Packard
-F0921C     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-A0-48-1C   (hex)		Hewlett Packard
-A0481C     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-A0-1D-48   (hex)		Hewlett Packard
-A01D48     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-40-A8-F0   (hex)		Hewlett Packard
-40A8F0     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-88-51-FB   (hex)		Hewlett Packard
-8851FB     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-08-2E-5F   (hex)		Hewlett Packard
-082E5F     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-E4-11-5B   (hex)		Hewlett Packard
-E4115B     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-28-92-4A   (hex)		Hewlett Packard
-28924A     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-28-80-23   (hex)		Hewlett Packard
-288023     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-CC-3E-5F   (hex)		Hewlett Packard
-CC3E5F     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-D8-9D-67   (hex)		Hewlett Packard
-D89D67     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-14-C2   (hex)		Hewlett Packard
-0014C2     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-80-5F   (hex)		Hewlett Packard
-00805F     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-18-FE   (hex)		Hewlett Packard
-0018FE     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-1A-4B   (hex)		Hewlett Packard
-001A4B     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-24-81   (hex)		Hewlett Packard
-002481     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-0F-61   (hex)		Hewlett Packard
-000F61     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-48-0F-CF   (hex)		Hewlett Packard
-480FCF     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-D4-0B-1A   (hex)		HTC Corporation
-D40B1A     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd.
-				Taoyuan County  Taiwan  330
-				TW
-
-94-53-30   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-945330     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-A0-8D-16   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A08D16     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-4C-D0-8A   (hex)		HUMAX Co., Ltd.
-4CD08A     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village,216,Hwangsaeul-ro,
-				Seongnam-si  Gyeonggi-do  463875
-				KR
-
-CC-4E-EC   (hex)		HUMAX Co., Ltd.
-CC4EEC     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bundang-gu,
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-40-3D-EC   (hex)		HUMAX Co., Ltd.
-403DEC     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bundang-gu,
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-EC-4D-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC4D47     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-40-44   (hex)		RackTop Systems Inc.
-C44044     (base 16)		RackTop Systems Inc.
-				11840 W Market Pl Suite K
-				Fulton  MD  20759
-				US
-
-4C-A1-61   (hex)		Rain Bird Corporation
-4CA161     (base 16)		Rain Bird Corporation
-				970 West Sierra Madre Ave.
-				AZUSA  CA  91702
-				US
-
-8C-AB-8E   (hex)		Shanghai Feixun Communication Co.,Ltd.
-8CAB8E     (base 16)		Shanghai Feixun Communication Co.,Ltd.
-				No.3666,Sixian Rd.,Songjiang District,Shanghai,P.R.China
-				Shanghai  Shanghai  201616
-				CN
-
-FC-64-BA   (hex)		Xiaomi Communications Co Ltd
-FC64BA     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-90-60-F1   (hex)		Apple, Inc.
-9060F1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-D1-11   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F8D111     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
-				Shenzhen  Guangdong  518000
-				CN
-
-B0-48-7A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-B0487A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
-				Shenzhen  Guangdong  518000
-				CN
-
-94-0C-6D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-940C6D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 7, Second Part, Honghualing Industrial Zone
-				Shenzhen  Guangdong  518000
-				CN
-
-A4-51-6F   (hex)		Microsoft Mobile Oy
-A4516F     (base 16)		Microsoft Mobile Oy
-				Keilalahdentie 4
-				Espoo    02150
-				FI
-
-54-27-58   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-542758     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-00-24-2B   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-00242B     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-08-18-1A   (hex)		zte corporation
-08181A     (base 16)		zte corporation
-				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
-				Shenzhen  GUANGDONG  518057
-				CN
-
-00-1E-73   (hex)		zte corporation
-001E73     (base 16)		zte corporation
-				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
-				Shenzhen  GUANGDONG  518057
-				CN
-
-00-15-EB   (hex)		zte corporation
-0015EB     (base 16)		zte corporation
-				5/F,A Wing,ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District
-				Shenzhen    518057
-				US
-
-00-1C-25   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-001C25     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-19-7E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-00197E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-90-FB-A6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-90FBA6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-44-37-E6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-4437E6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-CC-AF-78   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-CCAF78     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-F4-B7-E2   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-F4B7E2     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-64-70-02   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-647002     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan,
-				Shenzhen  Guangdong Province,  518057
-				CN
-
-10-FE-ED   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-10FEED     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park
-				Shenzhen  Guangdong  518057
-				CN
-
-64-56-01   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-645601     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-F0-27-65   (hex)		Murata Manufacturing Co., Ltd.
-F02765     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1 Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-5C-F8-A1   (hex)		Murata Manufacturing Co., Ltd.
-5CF8A1     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1 Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-44-A7-CF   (hex)		Murata Manufacturing Co., Ltd.
-44A7CF     (base 16)		Murata Manufacturing Co., Ltd.
-				2288, Oaza-Ohshinohara, Yasu-cho,
-				Yasu-gun  Shiga  520-2393
-				JP
-
-00-13-E0   (hex)		Murata Manufacturing Co., Ltd.
-0013E0     (base 16)		Murata Manufacturing Co., Ltd.
-				2288, Oaza-Ohshinohara, Yasu-cho,
-				Yasu-gun  Shiga  520-2393
-				JP
-
-EC-26-CA   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-EC26CA     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-94-71-AC   (hex)		TCT mobile ltd
-9471AC     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-2C-08-8C   (hex)		HUMAX Co., Ltd.
-2C088C     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-1C-99-4C   (hex)		Murata Manufacturing Co., Ltd.
-1C994C     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1 Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-F4-55-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4559C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-80-B6-86   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-80B686     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-10-C6-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-10C61F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-CC-96-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CC96A0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-F8-01-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F80113     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-A4-99-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A49947     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, 
-				Shenzhen  Guangdong  518057
-				CN
-
-C8-D1-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C8D15E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-78-59-68   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-785968     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C0-70-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C07009     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-38-BC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8038BC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-07-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4072F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-8E-92   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F48E92     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-66-4B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-00664B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-C1-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9CC172     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-7F-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-247F3C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-1F-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-581F28     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-CB-30   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ECCB30     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-DC-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4DCF9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-87-30   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-308730     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-C0-57-BC   (hex)		Avaya Inc
-C057BC     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-64-A7-DD   (hex)		Avaya Inc
-64A7DD     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-24-1F-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-241FA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-C5-8A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-18C58A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				Shenzhen  Guangdong  518129
-				CN
-
-08-00-28   (hex)		Texas Instruments
-080028     (base 16)		Texas Instruments
-				12500 TI Boulevard
-				Dallas    75243
-				US
-
-40-5F-C2   (hex)		Texas Instruments
-405FC2     (base 16)		Texas Instruments
-				12500 TI Boulevard
-				Dallas  TX  75243
-				US
-
-E0-E5-CF   (hex)		Texas Instruments
-E0E5CF     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-68-DF-DD   (hex)		Xiaomi Communications Co Ltd
-68DFDD     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-70-54-F5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7054F5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-DC-D2-FC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DCD2FC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-90-17-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9017AC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				Shenzhen  Guangdong  518129
-				CN
-
-34-CD-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-34CDBE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
-				Shenzhen  GuangDong  518057
-				CN
-
-D8-49-0B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D8490B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen    518129
-				CN
-
-44-32-2A   (hex)		Avaya Inc
-44322A     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-70-38-EE   (hex)		Avaya Inc
-7038EE     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-70-30-18   (hex)		Avaya Inc
-703018     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-9C-28-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C28EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-EC-24-B8   (hex)		Texas Instruments
-EC24B8     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-7C-EC-79   (hex)		Texas Instruments
-7CEC79     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-68-9E-19   (hex)		Texas Instruments
-689E19     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-20-CD-39   (hex)		Texas Instruments
-20CD39     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B4-99-4C   (hex)		Texas Instruments
-B4994C     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A4-25-1B   (hex)		Avaya Inc
-A4251B     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-64-6A-52   (hex)		Avaya Inc
-646A52     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-00-10-0B   (hex)		Cisco Systems, Inc
-00100B     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-17-3B   (hex)		Cisco Systems, Inc
-00173B     (base 16)		Cisco Systems, Inc
-				170 West Tasman Dr.
-				San Jose  CA  95134-1706
-				US
-
-04-DA-D2   (hex)		Cisco Systems, Inc
-04DAD2     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F0-29-29   (hex)		Cisco Systems, Inc
-F02929     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-20-BB-C0   (hex)		Cisco Systems, Inc
-20BBC0     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-4C-4E-35   (hex)		Cisco Systems, Inc
-4C4E35     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-98-FA-E3   (hex)		Xiaomi Communications Co Ltd
-98FAE3     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-F0-B4-29   (hex)		Xiaomi Communications Co Ltd
-F0B429     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-00-50-80   (hex)		Cisco Systems, Inc
-005080     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-50-73   (hex)		Cisco Systems, Inc
-005073     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-90-0C   (hex)		Cisco Systems, Inc
-00900C     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-90-5F   (hex)		Cisco Systems, Inc
-00905F     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-E0-F7   (hex)		Cisco Systems, Inc
-00E0F7     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-1B-D7   (hex)		Cisco SPVTG
-001BD7     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-00-60-83   (hex)		Cisco Systems, Inc
-006083     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-60-09   (hex)		Cisco Systems, Inc
-006009     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-06-7C   (hex)		Cisco Systems, Inc
-00067C     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-7B   (hex)		Cisco Systems, Inc
-00107B     (base 16)		Cisco Systems, Inc
-				170 W.TASMAN DR.-SJA-2
-				SAN JOSE  CA  95134-1706
-				US
-
-00-50-E2   (hex)		Cisco Systems, Inc
-0050E2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E4-D3-F1   (hex)		Cisco Systems, Inc
-E4D3F1     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-84-78-AC   (hex)		Cisco Systems, Inc
-8478AC     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-90-A6   (hex)		Cisco Systems, Inc
-0090A6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-90-86   (hex)		Cisco Systems, Inc
-009086     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-8C   (hex)		ASUSTek COMPUTER INC.
-00248C     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
-				Taipei  Taiwan  112
-				TW
-
-00-23-54   (hex)		ASUSTek COMPUTER INC.
-002354     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
-				Taipei  Taiwan  112
-				TW
-
-1C-87-2C   (hex)		ASUSTek COMPUTER INC.
-1C872C     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.., Peitou,
-				Taipei    112
-				TW
-
-60-18-2E   (hex)		ShenZhen Protruly Electronic Ltd co.
-60182E     (base 16)		ShenZhen Protruly Electronic Ltd co.
-				ShenNan Road 1004
-				Shen Zhen  GuangDong  518000
-				CN
-
-C4-14-3C   (hex)		Cisco Systems, Inc
-C4143C     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-3C-08-F6   (hex)		Cisco Systems, Inc
-3C08F6     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-1E-8C   (hex)		ASUSTek COMPUTER INC.
-001E8C     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou
-				Taipei    112
-				TW
-
-00-13-D4   (hex)		ASUSTek COMPUTER INC.
-0013D4     (base 16)		ASUSTek COMPUTER INC.
-				No.5 Shing Yeh Street
-				Tao Yuan Hsien    333
-				TW
-
-20-CF-30   (hex)		ASUSTek COMPUTER INC.
-20CF30     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
-				Taipei  Taiwan  112
-				TW
-
-BC-16-65   (hex)		Cisco Systems, Inc
-BC1665     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F8-72-EA   (hex)		Cisco Systems, Inc
-F872EA     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-D0-C7-89   (hex)		Cisco Systems, Inc
-D0C789     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F8-4F-57   (hex)		Cisco Systems, Inc
-F84F57     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-50-1C-BF   (hex)		Cisco Systems, Inc
-501CBF     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-B0-00-B4   (hex)		Cisco Systems, Inc
-B000B4     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-54-4A-00   (hex)		Cisco Systems, Inc
-544A00     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-E1-6D   (hex)		Cisco Systems, Inc
-00E16D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-78-BA-F9   (hex)		Cisco Systems, Inc
-78BAF9     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-22-CE   (hex)		Cisco SPVTG
-0022CE     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30042
-				US
-
-E0-D1-73   (hex)		Cisco Systems, Inc
-E0D173     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-E0-89-9D   (hex)		Cisco Systems, Inc
-E0899D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-C4-72-95   (hex)		Cisco Systems, Inc
-C47295     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-7C-69-F6   (hex)		Cisco Systems, Inc
-7C69F6     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-78-DA-6E   (hex)		Cisco Systems, Inc
-78DA6E     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-B8-78-2E   (hex)		Apple, Inc.
-B8782E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-05-02   (hex)		Apple, Inc.
-000502     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-0A-95   (hex)		Apple, Inc.
-000A95     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-BD-C8   (hex)		Cisco Systems, Inc
-34BDC8     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-DC-EB-94   (hex)		Cisco Systems, Inc
-DCEB94     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-84-B5-17   (hex)		Cisco Systems, Inc
-84B517     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-1C-6E-4C   (hex)		Logistic Service & Engineering Co.,Ltd
-1C6E4C     (base 16)		Logistic Service & Engineering Co.,Ltd
-				Unit N,9/F,Valiant Ind. Ctr.,2-12 Au Pui Wan St.,Fotan,Shatin,N.T.,Hong Kong
-				Hong Kong    00000
-				HK
-
-00-0F-66   (hex)		Cisco-Linksys, LLC
-000F66     (base 16)		Cisco-Linksys, LLC
-				121 Theory Dr.
-				Irvine  CA  92612
-				US
-
-24-37-4C   (hex)		Cisco SPVTG
-24374C     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-18-8B-9D   (hex)		Cisco Systems, Inc
-188B9D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-E4-AA-5D   (hex)		Cisco Systems, Inc
-E4AA5D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F4-5F-D4   (hex)		Cisco SPVTG
-F45FD4     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-2C-AB-A4   (hex)		Cisco SPVTG
-2CABA4     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-00-26-4A   (hex)		Apple, Inc.
-00264A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-1E-64   (hex)		Apple, Inc.
-041E64     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-11-24   (hex)		Apple, Inc.
-001124     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-22-41   (hex)		Apple, Inc.
-002241     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-C5-37   (hex)		Apple, Inc.
-7CC537     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-CA-39   (hex)		Apple, Inc.
-78CA39     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-E7-F4   (hex)		Apple, Inc.
-18E7F4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-CD-60   (hex)		Apple, Inc.
-70CD60     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-7B-9D   (hex)		Apple, Inc.
-8C7B9D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-9E-3F   (hex)		Apple, Inc.
-D89E3F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-C7-5D   (hex)		Apple, Inc.
-B8C75D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-74-C2   (hex)		Apple, Inc.
-0C74C2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-30-04   (hex)		Apple, Inc.
-403004     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-29-99   (hex)		Apple, Inc.
-842999     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-E2-F5   (hex)		Apple, Inc.
-74E2F5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-C9-7A   (hex)		Apple, Inc.
-E0C97A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-A8-6D   (hex)		Apple, Inc.
-68A86D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-C3-A1   (hex)		Apple, Inc.
-7CC3A1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-73-CB   (hex)		Apple, Inc.
-7073CB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-84-0D   (hex)		Apple, Inc.
-90840D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-06-88   (hex)		Apple, Inc.
-E80688     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-85-2F   (hex)		Apple, Inc.
-EC852F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-F4-B9   (hex)		Apple, Inc.
-00F4B9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-95-AE   (hex)		Apple, Inc.
-5C95AE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-03-D8   (hex)		Apple, Inc.
-9803D8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-C5-47   (hex)		Apple, Inc.
-60C547     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-5B-35   (hex)		Apple, Inc.
-685B35     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-B4-3A   (hex)		Apple, Inc.
-2CB43A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-9C-70   (hex)		Apple, Inc.
-689C70     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-0F-4A   (hex)		Apple, Inc.
-380F4A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-10-E4   (hex)		Apple, Inc.
-3010E4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-86-DD   (hex)		Apple, Inc.
-A886DD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-4C-0C   (hex)		Apple, Inc.
-444C0C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-F0-AB   (hex)		Apple, Inc.
-B4F0AB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-92-9F   (hex)		Apple, Inc.
-80929F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-04-EB   (hex)		Apple, Inc.
-9C04EB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-96-9D   (hex)		Apple, Inc.
-5C969D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-92-17   (hex)		Apple, Inc.
-609217     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-B1-53   (hex)		Apple, Inc.
-84B153     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-66-78   (hex)		Apple, Inc.
-E06678     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-D7-05   (hex)		Apple, Inc.
-48D705     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-15-52   (hex)		Apple, Inc.
-041552     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-78-5F   (hex)		Apple, Inc.
-CC785F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-CB-87   (hex)		Apple, Inc.
-88CB87     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-C1-F1   (hex)		Apple, Inc.
-F0C1F1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-38-35   (hex)		Apple, Inc.
-843835     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-00-6D   (hex)		Apple, Inc.
-8C006D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-96-8A   (hex)		Apple, Inc.
-A8968A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-1B-A1   (hex)		Apple, Inc.
-F41BA1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-D9-C7   (hex)		Apple, Inc.
-60D9C7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-AB-8E   (hex)		Apple, Inc.
-3CAB8E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-27-93   (hex)		Apple, Inc.
-F82793     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-72-40   (hex)		Apple, Inc.
-907240     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-8D-6C   (hex)		Apple, Inc.
-908D6C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-09-8A   (hex)		Apple, Inc.
-B8098A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-7C-5F   (hex)		Apple, Inc.
-4C7C5F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-64-4B   (hex)		Apple, Inc.
-68644B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-1E-E7   (hex)		Apple, Inc.
-C81EE7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-31-35   (hex)		Apple, Inc.
-A43135     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-D9-3C   (hex)		Apple, Inc.
-68D93C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-F7-6F   (hex)		Apple, Inc.
-00F76F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-85-50   (hex)		Apple, Inc.
-C88550     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-14-A6   (hex)		Apple, Inc.
-7014A6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-5A-EB   (hex)		Apple, Inc.
-985AEB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-D7-5F   (hex)		Apple, Inc.
-78D75F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-B5-2D   (hex)		Apple, Inc.
-E0B52D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-94-F8   (hex)		Apple, Inc.
-6C94F8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-CE-CD   (hex)		Apple, Inc.
-C0CECD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-4B-2A   (hex)		Cisco SPVTG
-F44B2A     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-74-6F-19   (hex)		ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.
-746F19     (base 16)		ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.
-				6F-1 ,Block D,Building 2#, Hongwan XinCun Ming JinHai Industry Area, Gushu Community, Xixiang Street, BaoAn District
-				Shenzhen  Guangdong  518000
-				CN
-
-2C-AE-2B   (hex)		Samsung Electronics Co.,Ltd
-2CAE2B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-AD-F1   (hex)		GOPEACE Inc.
-C4ADF1     (base 16)		GOPEACE Inc.
-				Woolim Bldg B-916, 14 Sagimakgol-ro 45beon-gil, Jungwon-gu
-				Seongnam  Gyeonggi  13209
-				KR
-
-58-FC-73   (hex)		Arria Live Media, Inc.
-58FC73     (base 16)		Arria Live Media, Inc.
-				2388 NE Lindsey Drive
-				Hillsboro  OR  97124
-				US
-
-0C-1A-10   (hex)		Acoustic Stream
-0C1A10     (base 16)		Acoustic Stream
-				3213 W Wheeler Street
-				Seattle  WA  98199
-				US
-
-C4-EF-70   (hex)		Home Skinovations
-C4EF70     (base 16)		Home Skinovations
-				Tavor building POB 533
-				Yokneam  Israel  2069206
-				IL
-
-5C-E3-B6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-5CE3B6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-7C-5A-67   (hex)		JNC Systems, Inc.
-7C5A67     (base 16)		JNC Systems, Inc.
-				#611, Gyeonggi Venture Yeonsung University
-				Anyang-si  Gyeonggi-do  430731
-				KR
-
-A0-F9-E0   (hex)		VIVATEL COMPANY LIMITED
-A0F9E0     (base 16)		VIVATEL COMPANY LIMITED
-				36/F,Tower Two
-				Causeway Bay  Causeway Bay  999077
-				HK
-
-C8-69-CD   (hex)		Apple, Inc.
-C869CD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-B8-05   (hex)		Apple, Inc.
-A4B805     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-C9-9B   (hex)		Tesorion Nederland B.V.
-90C99B     (base 16)		Tesorion Nederland B.V.
-				Auke Vleerstraat 6-D
-				Enschede    7521 PG
-				NL
-
-5C-AD-CF   (hex)		Apple, Inc.
-5CADCF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-0A-4E   (hex)		Planet Bingo® — 3rd Rock Gaming®
-080A4E     (base 16)		Planet Bingo® — 3rd Rock Gaming®
-				75190 Gerald Ford Dr.
-				Palm Desert  CA  92211
-				US
-
-B4-9D-0B   (hex)		BQ
-B49D0B     (base 16)		BQ
-				Sofia, 10
-				Las Rozas de Madrid  Madrid  28230
-				ES
-
-3C-8C-F8   (hex)		TRENDnet, Inc.
-3C8CF8     (base 16)		TRENDnet, Inc.
-				20675 Manhattan Place
-				Torrance  CA  90501
-				US
-
-E8-13-63   (hex)		Comstock RD, Inc.
-E81363     (base 16)		Comstock RD, Inc.
-				4415 Mason St
-				Ashton  ID  83406
-				US
-
-74-18-65   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
-741865     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
-				22F NO.1555 Kongjiang RD
-				  Shanghai  200092
-				CN
-
-BC-6C-21   (hex)		Apple, Inc.
-BC6C21     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-C3-72   (hex)		TSUZUKI DENKI
-F8C372     (base 16)		TSUZUKI DENKI
-				shinbashi 6-19-15
-				mainato-ku  tokyo-to  105-8665
-				JP
-
-D4-72-08   (hex)		Bragi GmbH
-D47208     (base 16)		Bragi GmbH
-				Herzog-Heinrich-Strasse 20
-				Munich  Bavaria  80336
-				DE
-
-A8-72-85   (hex)		IDT, INC.
-A87285     (base 16)		IDT, INC.
-				6024 SILVER CREEK VALLEY RD
-				SAN JOSE  CA  95138
-				US
-
-78-05-41   (hex)		Queclink Wireless Solutions Co., Ltd
-780541     (base 16)		Queclink Wireless Solutions Co., Ltd
-				Room 501, Building 9, No.99 Tianzhou Road
-				shanghai  shanghai  200233
-				CN
-
-04-41-69   (hex)		GoPro
-044169     (base 16)		GoPro
-				3000 Clearview Way
-				San Mateo  CA  94402
-				US
-
-C0-2D-EE   (hex)		Cuff
-C02DEE     (base 16)		Cuff
-				232 Townsend St
-				San Francisco  CA  94107
-				US
-
-6C-EB-B2   (hex)		Dongguan Sen DongLv Electronics Co.,Ltd
-6CEBB2     (base 16)		Dongguan Sen DongLv Electronics Co.,Ltd
-				Nanjiang RD 111st,Daning
-				Dongguan  Guangdong  523930
-				
-
-3C-7A-8A   (hex)		ARRIS Group, Inc.
-3C7A8A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F4-0E-22   (hex)		Samsung Electronics Co.,Ltd
-F40E22     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-1B-99   (hex)		SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.
-881B99     (base 16)		SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.
-				#4 BULIDING, HIGH TECH INDUSTRIAL PARK, HE PING COMMUNITY
-				GUANGDONG  N/A  518000
-				CN
-
-54-4E-90   (hex)		Apple, Inc.
-544E90     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A4-A6-A9   (hex)		Private
-A4A6A9     (base 16)		Private
-
-8C-10-D4   (hex)		Sagemcom Broadband SAS
-8C10D4     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-F8-98-B9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F898B9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-B5-59   (hex)		CNEX Labs
-5CB559     (base 16)		CNEX Labs
-				2880 Stevens Creek Blvd
-				San Jose  CA  95128
-				US
-
-B8-3A-9D   (hex)		Alarm.com
-B83A9D     (base 16)		Alarm.com
-				8281 Greensboro Dr., Suite 100
-				Tysons  VA   22102
-				US
-
-68-58-C5   (hex)		ZF TRW Automotive
-6858C5     (base 16)		ZF TRW Automotive
-				​12001 Tech Center Drive
-				Livonia  MI  48150
-				US
-
-C0-11-73   (hex)		Samsung Electronics Co.,Ltd
-C01173     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-E6-3F   (hex)		Samsung Electronics Co.,Ltd
-BCE63F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-7C-91-22   (hex)		Samsung Electronics Co.,Ltd
-7C9122     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-AC-BC-32   (hex)		Apple, Inc.
-ACBC32     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-23-EC   (hex)		Availink, Inc.
-9023EC     (base 16)		Availink, Inc.
-				Scotia Centre P.O. Box 268GT,Grand Cayman, Cayman Islands
-				Grand Cayman  Grand Cayman  999159
-				KY
-
-44-1C-A8   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-441CA8     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-B4-29-3D   (hex)		Shenzhen Urovo Technology Co.,Ltd.
-B4293D     (base 16)		Shenzhen Urovo Technology Co.,Ltd.
-				A701-710, Zondy Cyber Building, Keyuan South Road,
-				Nanshan District, Shenzhen  Guangzhou  518057
-				CN
-
-54-FF-82   (hex)		Davit Solution co.
-54FF82     (base 16)		Davit Solution co.
-				103-301,Geudaegapremier,21 Deagyeong-Daero 1484beon-Gil
-				Suwon-Si  Gyeonggi-Do  KS002
-				KR
-
-50-DF-95   (hex)		Lytx
-50DF95     (base 16)		Lytx
-				9785 Towne Centre Drive
-				San Diego  CA  92121
-				US
-
-9C-A6-9D   (hex)		Whaley Technology Co.Ltd
-9CA69D     (base 16)		Whaley Technology Co.Ltd
-				Floor 3, Building E, No666 Shengxia Road
-				  Shanghai  201203
-				CN
-
-58-53-C0   (hex)		Beijing Guang Runtong Technology Development Company co.,Ltd
-5853C0     (base 16)		Beijing Guang Runtong Technology Development Company co.,Ltd
-				Beijing city Haidian District North Third Ring Road 48, Beijing science and Technology Exhibition Center 1 building B block, room 18H
-				Beijing  Bejing  100000
-				CN
-
-2C-A5-39   (hex)		Parallel Wireless, Inc
-2CA539     (base 16)		Parallel Wireless, Inc
-				1 Tara Blvd
-				Nashua  NH  03062
-				US
-
-CC-79-4A   (hex)		BLU Products Inc.
-CC794A     (base 16)		BLU Products Inc.
-				Tower 4, Excellence Century Center
-				Shenzhen  Guangdong  518000
-				CN
-
-F4-E9-26   (hex)		Tianjin Zanpu Technology Inc.
-F4E926     (base 16)		Tianjin Zanpu Technology Inc.
-				3F Haiyi International Center, Huayuan Industrial Park, Tianjin
-				Tianjin  Tianjin  300384
-				CN
-
-90-6F-18   (hex)		Private
-906F18     (base 16)		Private
-
-98-CB-27   (hex)		Galore Networks Pvt. Ltd.
-98CB27     (base 16)		Galore Networks Pvt. Ltd.
-				#D1104, Salarpuria Serenity, 41A,
-				Bangalore  Karnataka  560068
-				IN
-
-E8-F2-E2   (hex)		LG Innotek
-E8F2E2     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-24-72-60   (hex)		IOTTECH Corp
-247260     (base 16)		IOTTECH Corp
-				4F.-1, No.55, Dongguang Rd., East Dist., Hsinchu City 300, TAIWAN ,REPUBLIC OF CHINA
-				Hsinchu  TAIWAN  300
-				TW
-
-24-5B-F0   (hex)		Liteon, Inc.
-245BF0     (base 16)		Liteon, Inc.
-				3001 Summit Avenue, Suite 400
-				Plano  Tx  75074
-				US
-
-E8-55-B4   (hex)		SAI Technology Inc.
-E855B4     (base 16)		SAI Technology Inc.
-				2376 Walsh Avenue
-				Santa Clara  California  95051
-				US
-
-34-0C-ED   (hex)		Moduel AB
-340CED     (base 16)		Moduel AB
-				Hudiksvallsgatan 8
-				Stockholm  Stockholm  11330
-				SE
-
-28-27-BF   (hex)		Samsung Electronics Co.,Ltd
-2827BF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-D8-59   (hex)		TCT mobile ltd
-94D859     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-2C-FC-E4   (hex)		CTEK Sweden AB
-2CFCE4     (base 16)		CTEK Sweden AB
-				Rostugnsvägen 3
-				Vikmanshyttan  Dalarna  SE-776 70
-				SE
-
-F4-B8-A7   (hex)		zte corporation
-F4B8A7     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-30-0C-23   (hex)		zte corporation
-300C23     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C0-B7-13   (hex)		Beijing Xiaoyuer Technology Co. Ltd.
-C0B713     (base 16)		Beijing Xiaoyuer Technology Co. Ltd.
-				No.5 Guangshunbei Rd. Rm# B129
-				Beijing  Beijing  100102
-				CN
-
-10-05-B1   (hex)		ARRIS Group, Inc.
-1005B1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-20-63-5F   (hex)		Abeeway
-20635F     (base 16)		Abeeway
-				29 chemin du vieux chêne
-				meylan  Isere  38240
-				FR
-
-08-3A-5C   (hex)		Junilab, Inc.
-083A5C     (base 16)		Junilab, Inc.
-				#205 107 Gyounggyo-Ro, Yeongtong-Gu, Suwon
-				Suwon  Gyeonggi-Do  443-766
-				KR
-
-B8-B3-DC   (hex)		DEREK (SHAOGUAN) LIMITED
-B8B3DC     (base 16)		DEREK (SHAOGUAN) LIMITED
-				Gaojiling, Taiping Town,
-				Shao Guan  Guang Dong  512500
-				CN
-
-70-2A-7D   (hex)		EpSpot AB
-702A7D     (base 16)		EpSpot AB
-				Aluddsparken 7D
-				  Stockholm  11265
-				SE
-
-4C-AE-31   (hex)		ShengHai Electronics (Shenzhen) Ltd
-4CAE31     (base 16)		ShengHai Electronics (Shenzhen) Ltd
-				Block 17&18,Hui Ming Ying Industry,YanChuan,SongGang
-				Shenzhen  Guangdong  518105
-				CN
-
-18-8E-F9   (hex)		G2C Co. Ltd.
-188EF9     (base 16)		G2C Co. Ltd.
-				1004,1591-9, K-Center Kwanyang Dong
-				Anyang Si  Kyeonggido  431-815
-				KR
-
-44-F4-36   (hex)		zte corporation
-44F436     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C4-7D-46   (hex)		FUJITSU LIMITED
-C47D46     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-18-5D-9A   (hex)		BobjGear LLC
-185D9A     (base 16)		BobjGear LLC
-				4327 S Highway 27 # 504
-				Clermont  Florida  34711
-				US
-
-F4-E9-D4   (hex)		QLogic Corporation
-F4E9D4     (base 16)		QLogic Corporation
-				26650 Aliso Viejo Parkway
-				Aliso Viejo  California  
-				US
-
-4C-B7-6D   (hex)		Novi Security
-4CB76D     (base 16)		Novi Security
-				1434 E 820 N
-				Orem  UT  84097
-				US
-
-6C-E0-1E   (hex)		Modcam AB
-6CE01E     (base 16)		Modcam AB
-				Bredgatan 4
-				Malmö  Skåne  21130
-				SE
-
-74-85-2A   (hex)		PEGATRON CORPORATION
-74852A     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-9C-B6-D0   (hex)		Rivet Networks
-9CB6D0     (base 16)		Rivet Networks
-				11940 Jollyville Rd
-				Austin  tx  78759
-				US
-
-40-B8-9A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-40B89A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-1C-B7-2C   (hex)		ASUSTek COMPUTER INC.
-1CB72C     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-4C-EE-B0   (hex)		SHC Netzwerktechnik GmbH
-4CEEB0     (base 16)		SHC Netzwerktechnik GmbH
-				Ludwigstrasse 33-37
-				Frankfurt am Main  Hessen  60327
-				DE
-
-80-01-84   (hex)		HTC Corporation
-800184     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-44-C6-9B   (hex)		Wuhan Feng Tian Information Network CO.,LTD
-44C69B     (base 16)		Wuhan Feng Tian Information Network CO.,LTD
-				Room 1002,10th Floor,Oversea talent Building A,
-				Wuhan City  Hubei Province  430074
-				CN
-
-FC-E3-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-FCE33C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-25-67   (hex)		Nexxt Solutions
-C02567     (base 16)		Nexxt Solutions
-				3505 NW 107TH AVENUE
-				MIAMI  FLORIDA  33178
-				US
-
-A8-82-7F   (hex)		CIBN Oriental Network(Beijing) CO.,Ltd
-A8827F     (base 16)		CIBN Oriental Network(Beijing) CO.,Ltd
-				Floor 18B,Block B(International Resources Building),No.18B(Wanda Plaza),Shijingshan Road,Shijingshan,Beijing(100043)
-				Beijing  Beijing  100043
-				CN
-
-D0-48-F3   (hex)		DATTUS Inc
-D048F3     (base 16)		DATTUS Inc
-				3000 Kent Ave
-				W Lafayette  IN  47906
-				US
-
-B8-C3-BF   (hex)		Henan Chengshi NetWork Technology Co.，Ltd
-B8C3BF     (base 16)		Henan Chengshi NetWork Technology Co.，Ltd
-				Ruhe Road South，Kunlun Road West，Zhongyuan District，Zhengzhou，Henan，P.R.China，450007
-				Zhengzhou  Henan  450007
-				CN
-
-44-96-2B   (hex)		Aidon Oy
-44962B     (base 16)		Aidon Oy
-				Piippukatu 11
-				Jyvaskyla  Jyvaskyla  40100
-				FI
-
-E0-76-D0   (hex)		AMPAK Technology, Inc.
-E076D0     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road
-				Hsinchu  Hsinchu  30352
-				TW
-
-B0-08-BF   (hex)		Vital Connect, Inc.
-B008BF     (base 16)		Vital Connect, Inc.
-				900 E HAMILTON AVE STE 500
-				CAMPBELL  CA  95008-0667
-				US
-
-D4-52-2A   (hex)		TangoWiFi.com
-D4522A     (base 16)		TangoWiFi.com
-				TangoWiFi Team
-				Beijing  Beijing  100022
-				CN
-
-E8-07-BF   (hex)		SHENZHEN BOOMTECH INDUSTRY CO.,LTD
-E807BF     (base 16)		SHENZHEN BOOMTECH INDUSTRY CO.,LTD
-				Floor 6 East, Bldg 6, Yusheng Industrial Area, Xixiang, Bao'an District
-				Shenzhen  Guangdong  518000
-				CN
-
-84-F1-29   (hex)		Metrascale Inc.
-84F129     (base 16)		Metrascale Inc.
-				400 Liberty Ave.
-				Brooklyn  NY  11207
-				US
-
-B8-9A-CD   (hex)		ELITE OPTOELECTRONIC(ASIA)CO.,LTD
-B89ACD     (base 16)		ELITE OPTOELECTRONIC(ASIA)CO.,LTD
-				A9 jin Fu 1 Road,Tangchun lndustrial zone,Liaobu Town,Dongguan City,Guangdong Province
-				Liaobu  dongguan /guangdong  523400
-				CN
-
-D4-68-BA   (hex)		Shenzhen Sundray Technologies Company Limited
-D468BA     (base 16)		Shenzhen Sundray Technologies Company Limited
-				6th Floor,Block A1, Nanshan iPark, 
-				Nanshan District, Shenzhen 518055  Guangdong  
-				CN
-
-08-62-66   (hex)		ASUSTek COMPUTER INC.
-086266     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-9C-30-66   (hex)		RWE Effizienz GmbH
-9C3066     (base 16)		RWE Effizienz GmbH
-				Flamingoweg 1
-				Dortmund  NRW  44139
-				DE
-
-18-BD-AD   (hex)		L-TECH CORPORATION
-18BDAD     (base 16)		L-TECH CORPORATION
-				201, Moonbon-dong
-				Ilsandong-gu  Gyeonggi-do  410-560
-				KR
-
-60-E6-BC   (hex)		Sino-Telecom Technology Co.,Ltd.
-60E6BC     (base 16)		Sino-Telecom Technology Co.,Ltd.
-				6F, Building 2, No.115, Lane 1276 Nanle Rd
-				    201613
-				CN
-
-C8-C5-0E   (hex)		Shenzhen Primestone Network Technologies.Co., Ltd.
-C8C50E     (base 16)		Shenzhen Primestone Network Technologies.Co., Ltd.
-				Room 705,Complex Building, Tsinghua Hi-Tech Park
-				Shenzhen  Guangdong  518057
-				CN
-
-D0-6A-1F   (hex)		BSE CO.,LTD.
-D06A1F     (base 16)		BSE CO.,LTD.
-				626-3, Gozan-dong, Namdong-ku
-				Incheon, 405-817    
-				KR
-
-70-01-36   (hex)		FATEK Automation Corporation
-700136     (base 16)		FATEK Automation Corporation
-				5F., NO.300, SEC. 1, NEIHU RD
-				Taipei City    114
-				TW
-
-FC-A2-2A   (hex)		PT. Callysta Multi Engineering
-FCA22A     (base 16)		PT. Callysta Multi Engineering
-				Jl. Taman Cibeunying No. 2
-				Bandung  Jawa Barat  40114
-				ID
-
-A4-56-02   (hex)		fenglian Technology Co.,Ltd.
-A45602     (base 16)		fenglian Technology Co.,Ltd.
-				302 R D Building Oriental Cyberport HighTech Industrial Park Nanshan Shenzhen China
-				  Shenzhen,Guangdong Province  518057
-				CN
-
-94-E2-FD   (hex)		Boge Kompressoren OTTO Boge GmbH & Co. KG
-94E2FD     (base 16)		Boge Kompressoren OTTO Boge GmbH & Co. KG
-				Otto Boge Str. 1-7
-				Bielefeld  Westfalia  33739
-				DE
-
-F0-1E-34   (hex)		ORICO Technologies Co., Ltd
-F01E34     (base 16)		ORICO Technologies Co., Ltd
-				F-9, Block14A, Zhonghaixin Science &Technology Zone
-				ShenZhen  Guangdong  518116
-				CN
-
-DC-E0-26   (hex)		Patrol Tag, Inc
-DCE026     (base 16)		Patrol Tag, Inc
-				2800 Western Ave
-				Seattle  WA  98121
-				US
-
-B4-05-66   (hex)		SP Best Corporation Co., LTD.
-B40566     (base 16)		SP Best Corporation Co., LTD.
-				555/25 B-Avenue, Sukhaphibal 5 Road
-				Saimai  Bangkok  10220
-				TH
-
-1C-C7-2D   (hex)		Shenzhen Huapu Digital CO.,Ltd
-1CC72D     (base 16)		Shenzhen Huapu Digital CO.,Ltd
-				R2305 Malata Technology Building,NO.9998 Shennan Boulevard, Shenzhen,P.R.China 518057
-				Shenzhen  Guangzhou  518057
-				CN
-
-A8-90-08   (hex)		Beijing Yuecheng Technology Co. Ltd.
-A89008     (base 16)		Beijing Yuecheng Technology Co. Ltd.
-				Room 1601, Floor 16
-				Beijing  Beijing  100000
-				CN
-
-18-38-64   (hex)		CAP-TECH INTERNATIONAL CO., LTD.
-183864     (base 16)		CAP-TECH INTERNATIONAL CO., LTD.
-				 Rm. 6, 4F., No.120, Qiaohe Rd., Zhonghe Dist
-				New Taipei City  Taiwan  235
-				TW
-
-6C-F5-E8   (hex)		Mooredoll Inc.
-6CF5E8     (base 16)		Mooredoll Inc.
-				5F,No.50,Ln.316,Ruiguan Rd.,Neihu Dist.,Taipei 114, Taiwan
-				Taipei  Neihu  114
-				TW
-
-8C-BF-A6   (hex)		Samsung Electronics Co.,Ltd
-8CBFA6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C8-A8-23   (hex)		Samsung Electronics Co.,Ltd
-C8A823     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-C5-59   (hex)		Samsung Electronics Co.,Ltd
-B0C559     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F4-2C-56   (hex)		SENOR TECH CO LTD
-F42C56     (base 16)		SENOR TECH CO LTD
-				No.165, Kangning St
-				New Taipei City  Taiwan  221
-				TW
-
-FC-DC-4A   (hex)		G-Wearables Corp.
-FCDC4A     (base 16)		G-Wearables Corp.
-				901, S&CTBuilding, No.9 Zhongguancun South Avenue
-				Beijing  Beijing  100081
-				CN
-
-1C-14-B3   (hex)		Airwire Technologies
-1C14B3     (base 16)		Airwire Technologies
-				9670 Gateway Drive, Suite 250
-				Reno  NV  89521
-				US
-
-A4-8C-DB   (hex)		Lenovo
-A48CDB     (base 16)		Lenovo
-				1009 Think Place
-				Morrisvilee  NC  27560
-				US
-
-D8-5D-E2   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-D85DE2     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-3C-91-2B   (hex)		Vexata Inc
-3C912B     (base 16)		Vexata Inc
-				1735 Technology Dr Suite 520
-				San Jose  CA  95110
-				US
-
-34-6C-0F   (hex)		Pramod Telecom Pvt. Ltd
-346C0F     (base 16)		Pramod Telecom Pvt. Ltd
-				Plot No. 6-B, Malviya Nagar,
-				Lucknow  Uttar Pradesh  226004
-				IN
-
-BC-14-85   (hex)		Samsung Electronics Co.,Ltd
-BC1485     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-9C-6C-15   (hex)		Microsoft Corporation
-9C6C15     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-44-5E-CD   (hex)		Razer Inc
-445ECD     (base 16)		Razer Inc
-				2035 Corte Del Nogal
-				Carlsbad  CA  92011
-				US
-
-4C-A9-28   (hex)		Insensi
-4CA928     (base 16)		Insensi
-				2025 Broadway, 2CD
-				New York City  New York  10023
-				US
-
-E8-44-7E   (hex)		Bitdefender SRL
-E8447E     (base 16)		Bitdefender SRL
-				24 Delea Veche St.
-				Bucharest  Romania  024102
-				RO
-
-C0-33-5E   (hex)		Microsoft
-C0335E     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-B0-E0-3C   (hex)		TCT mobile ltd
-B0E03C     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-B0-49-5F   (hex)		OMRON HEALTHCARE Co., Ltd.
-B0495F     (base 16)		OMRON HEALTHCARE Co., Ltd.
-				53, Kunotsubo, Terado-cho
-				Muko  Kyoto  6170002
-				JP
-
-60-F1-89   (hex)		Murata Manufacturing Co., Ltd.
-60F189     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-74-2E-FC   (hex)		DirectPacket Research, Inc,
-742EFC     (base 16)		DirectPacket Research, Inc,
-				909 Lake Carolyn Parkway
-				Irving  Texas  75039
-				US
-
-84-CF-BF   (hex)		Fairphone
-84CFBF     (base 16)		Fairphone
-				Piet Heinkade 181A
-				Amsterdam  North Holland  1019HC
-				NL
-
-AC-D1-B8   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-ACD1B8     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-A0-C2-DE   (hex)		Costar Video Systems
-A0C2DE     (base 16)		Costar Video Systems
-				101 Wrangler, Suite 201
-				Coppell  Texas  75019
-				US
-
-88-E1-61   (hex)		Art Beijing Science and Technology Development Co., Ltd.
-88E161     (base 16)		Art Beijing Science and Technology Development Co., Ltd.
-				Room 210,Building 1#, No. 27 Qinghe Longgang Rd., Haidian District, Beijing,100192,China
-				Beijing  Beijing  100192
-				CN
-
-00-A5-09   (hex)		WigWag Inc.
-00A509     (base 16)		WigWag Inc.
-				4009 banister lane
-				austin  texas  78704
-				US
-
-74-91-BD   (hex)		Four systems Co.,Ltd.
-7491BD     (base 16)		Four systems Co.,Ltd.
-				608-608/7 Ramintra Road Kannayao
-				Bangkok  Bangkok  10230
-				TH
-
-F0-FE-6B   (hex)		Shanghai High-Flying Electronics Technology Co., Ltd
-F0FE6B     (base 16)		Shanghai High-Flying Electronics Technology Co., Ltd
-				Room 1002 ,#1Building,No.3000 Longdong Avenue,Pudong District,Shanghai,China
-				shanghai  shanghai  201203
-				CN
-
-3C-AE-69   (hex)		ESA Elektroschaltanlagen Grimma GmbH
-3CAE69     (base 16)		ESA Elektroschaltanlagen Grimma GmbH
-				Broner Ring 30
-				Grimma  Saxony  04668
-				DE
-
-D4-32-66   (hex)		Fike Corporation
-D43266     (base 16)		Fike Corporation
-				704 SW 10th Street
-				Blue Springs  MO  64015
-				US
-
-90-0C-B4   (hex)		Alinket Electronic Technology Co., Ltd
-900CB4     (base 16)		Alinket Electronic Technology Co., Ltd
-				412 Guilin Rd. 3F, Xuhui District
-				Shanghai  Shanghai  201235
-				CN
-
-48-C0-93   (hex)		Xirrus, Inc.
-48C093     (base 16)		Xirrus, Inc.
-				2101 Corporate Center Dr.
-				Thousand Oaks  CA  91320
-				US
-
-DC-09-14   (hex)		Talk-A-Phone Co.
-DC0914     (base 16)		Talk-A-Phone Co.
-				7530 N. Natchez Ave.
-				Niles  IL  60714
-				US
-
-D0-92-9E   (hex)		Microsoft Corporation
-D0929E     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-BC-52-B4   (hex)		Nokia
-BC52B4     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-94-05-B6   (hex)		Liling FullRiver Electronics & Technology Ltd
-9405B6     (base 16)		Liling FullRiver Electronics & Technology Ltd
-				FullRiver Industrial Area Economic Development Zone
-				HuNan Province    412200
-				CN
-
-00-F3-DB   (hex)		WOO Sports
-00F3DB     (base 16)		WOO Sports
-				11 Elkins St.
-				BOSTON  Massachusetts  02127
-				US
-
-78-31-2B   (hex)		zte corporation
-78312B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C8-1B-6B   (hex)		Innova Security
-C81B6B     (base 16)		Innova Security
-				Av. General Ataliba Leonel, 1205
-				Sao Paulo  Sao Paulo  02033000
-				BR
-
-34-38-AF   (hex)		Inlab Software GmbH
-3438AF     (base 16)		Inlab Software GmbH
-				Josef-Wuerth-Str. 3
-				Gruenwald  Bavaria  82031
-				DE
-
-B4-A8-28   (hex)		Shenzhen Concox Information Technology Co., Ltd
-B4A828     (base 16)		Shenzhen Concox Information Technology Co., Ltd
-				Floor 4th, Building B, Gaoxinqi Industrial Park, Liuxian 1st Road, district 67, Bao’an, Shenzhen, Guangdong,China
-				Shenzhen  Guangdong  518102
-				CN
-
-00-A2-F5   (hex)		Guangzhou Yuanyun Network Technology Co.,Ltd
-00A2F5     (base 16)		Guangzhou Yuanyun Network Technology Co.,Ltd
-				31/F,183 TianHe Bei Rd, Metro Plz
-				GuangZhou  GuangDong  510630
-				CN
-
-10-08-B1   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-1008B1     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-E4-8C-0F   (hex)		Discovery Insure
-E48C0F     (base 16)		Discovery Insure
-				3 Alice lane
-				Sandton  Gauteng  2196
-				ZA
-
-E4-23-54   (hex)		SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD
-E42354     (base 16)		SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD
-				4/F,Fuxing Bldg,Binlang Road,Futian Free Trade Zone,SHENZHEN.CHINA
-				SHENZHEN  Guang Dong  518038
-				CN
-
-94-BF-95   (hex)		Shenzhen Coship Electronics Co., Ltd
-94BF95     (base 16)		Shenzhen Coship Electronics Co., Ltd
-				Rainbow Bldg., North, Hi-Tech Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-44-CE-7D   (hex)		SFR
-44CE7D     (base 16)		SFR
-				5 RUE NOEL PONS
-				NANTERRE    92000
-				FR
-
-34-4D-EA   (hex)		zte corporation
-344DEA     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-4C-16-F1   (hex)		zte corporation
-4C16F1     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-10-FA-CE   (hex)		Reacheng Communication Technology Co.,Ltd
-10FACE     (base 16)		Reacheng Communication Technology Co.,Ltd
-				Building No.5-401,
-				Pu Dong New District,  Shanghai  201203
-				CN
-
-94-70-D2   (hex)		WINFIRM TECHNOLOGY
-9470D2     (base 16)		WINFIRM TECHNOLOGY
-				2-1015 Lotte IT Castle
-				  Seoul  153-768
-				KR
-
-A4-4A-D3   (hex)		ST Electronics(Shanghai) Co.,Ltd
-A44AD3     (base 16)		ST Electronics(Shanghai) Co.,Ltd
-				Floors 1&3, No.6 Building, No.1151 Lianxi Road
-				Shanghai  Shanghai  201204
-				CN
-
-7C-B1-77   (hex)		Satelco AG
-7CB177     (base 16)		Satelco AG
-				Seestrasse 241
-				Au / Waedenswil  ZH  8804
-				CH
-
-CC-30-80   (hex)		VAIO Corporation
-CC3080     (base 16)		VAIO Corporation
-				5432 Toyoshina
-				Azumino  Nagano  399-8282
-				JP
-
-58-7B-E9   (hex)		AirPro Technology India Pvt. Ltd
-587BE9     (base 16)		AirPro Technology India Pvt. Ltd
-				D30, Gautam Marg,
-				Jaipur  Rajasthan  302018
-				IN
-
-8C-18-D9   (hex)		Shenzhen RF Technology Co., Ltd
-8C18D9     (base 16)		Shenzhen RF Technology Co., Ltd
-				5/F,Building 4,Baokun Science and Technology Industial Park
-				Baoan  Guangdong  518100
-				CN
-
-C4-BD-6A   (hex)		SKF GmbH
-C4BD6A     (base 16)		SKF GmbH
-				Gunnar-Wester-Strasse 12
-				Schweinfurt  DE  DE-97421
-				DE
-
-C4-01-CE   (hex)		PRESITION (2000) CO., LTD.
-C401CE     (base 16)		PRESITION (2000) CO., LTD.
-				42/6 Moo6
-				Muang  Samutsakorn  74000
-				TH
-
-18-71-17   (hex)		eta plus electronic gmbh
-187117     (base 16)		eta plus electronic gmbh
-				Lauterstr. 29
-				Nuertingen  BW  72622
-				DE
-
-EC-0E-C4   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-EC0EC4     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-30-FA-B7   (hex)		Tunai Creative
-30FAB7     (base 16)		Tunai Creative
-				12F, No.221, Sec.4, Zongxiao E. Rd, Taipei 106, Taiwan
-				TAIPEI  TAIPEI  10690
-				TW
-
-08-09-B6   (hex)		Masimo Corp
-0809B6     (base 16)		Masimo Corp
-				40 Parker
-				Irvine  CA  92618
-				US
-
-4C-F5-A0   (hex)		Scalable Network Technologies Inc
-4CF5A0     (base 16)		Scalable Network Technologies Inc
-				600 Corporate Pointe
-				Culver City  CA  90230
-				US
-
-D8-FB-11   (hex)		AXACORE
-D8FB11     (base 16)		AXACORE
-				2468 HISTORIC DECATUR RD
-				SAN DIEGO  CA  92106
-				US
-
-4C-E9-33   (hex)		RailComm, LLC
-4CE933     (base 16)		RailComm, LLC
-				1387 Fairport Road
-				Fairport  New York  14450
-				US
-
-CC-E1-7F   (hex)		Juniper Networks
-CCE17F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-E4-C6-2B   (hex)		Airware
-E4C62B     (base 16)		Airware
-				1045 Bryant St.
-				San Francisco  California  94103
-				US
-
-EC-1D-7F   (hex)		zte corporation
-EC1D7F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-AC-38-70   (hex)		Lenovo Mobile Communication Technology Ltd.
-AC3870     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999, Qishan North 2nd Road, Information & Optoelectronics Park,
-				Xiamen  Fujian  361006
-				
-
-4C-BC-42   (hex)		Shenzhen Hangsheng Electronics Co.,Ltd.
-4CBC42     (base 16)		Shenzhen Hangsheng Electronics Co.,Ltd.
-				Hangsheng Industrial Area, Fuyuan 1st Road,Heping Village, Fuyong Town,Baoan District
-				Shenzhen City  Guangdong  518103
-				CN
-
-70-F1-96   (hex)		Actiontec Electronics, Inc
-70F196     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-18-82-19   (hex)		Alibaba Cloud Computing Ltd.
-188219     (base 16)		Alibaba Cloud Computing Ltd.
-				Yuhang District of Hangzhou Wenyi Road, Building 1, No. 969 Xixi Park, Zhejiang Province
-				Hangzhou  Zhejiang  310000
-				CN
-
-28-A5-EE   (hex)		Shenzhen SDGI CATV Co., Ltd
-28A5EE     (base 16)		Shenzhen SDGI CATV Co., Ltd
-				2/F, NO, 3, QIONGYU ROAD,
-				shenzhen  Guangdong province  518057
-				CN
-
-EC-B9-07   (hex)		CloudGenix Inc
-ECB907     (base 16)		CloudGenix Inc
-				2933 Bunker Hill Lane
-				Santa Clara  CA  95054
-				US
-
-F4-28-33   (hex)		MMPC Inc.
-F42833     (base 16)		MMPC Inc.
-				#F313, KAIST-ICC, 193 Munjiro Yuseong-gu
-				Daejeon  Daejeon  305-732
-				KR
-
-0C-8C-8F   (hex)		Kamo Technology Limited
-0C8C8F     (base 16)		Kamo Technology Limited
-				Room 1502, 15/F., Yue Xiu Building,
-				Wanchai  Hong Kong  160-174
-				CN
-
-A4-A4-D3   (hex)		Bluebank Communication Technology Co.Ltd
-A4A4D3     (base 16)		Bluebank Communication Technology Co.Ltd
-				No.13-2.Jiang Ying Road,
-				  Chongqing  401336
-				CN
-
-A8-32-9A   (hex)		Digicom Futuristic Technologies Ltd.
-A8329A     (base 16)		Digicom Futuristic Technologies Ltd.
-				406 Mirror Tower, Modi Road, TST
-				    000086
-				HK
-
-F4-D0-32   (hex)		Yunnan Ideal Information&Technology.,Ltd
-F4D032     (base 16)		Yunnan Ideal Information&Technology.,Ltd
-				The 1st Floor, Building Four ,JingdianMingju,Haiyuanzhong road, High Tech Development Zone,Kunming,YunnanP.R.China
-				Kunming  Yunnan  650106
-				CN
-
-60-02-92   (hex)		PEGATRON CORPORATION
-600292     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-B4-B8-59   (hex)		Texa Spa
-B4B859     (base 16)		Texa Spa
-				Via I Maggio, 9
-				Monastier di Treviso  Treviso  31050
-				IT
-
-5C-F9-F0   (hex)		Atomos Engineering P/L
-5CF9F0     (base 16)		Atomos Engineering P/L
-				36 Park St
-				South Melbourne  Victoria  3205
-				AU
-
-70-2D-D1   (hex)		Newings Communication CO., LTD.
-702DD1     (base 16)		Newings Communication CO., LTD.
-				12F, Block 1, NO 7866, Humin Rd, Minhang District, Shanghai, China
-				Shanghai  Shanghai  200000
-				CN
-
-14-75-90   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-147590     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-50-BD-5F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-50BD5F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-98-7E-46   (hex)		Emizon Networks Limited
-987E46     (base 16)		Emizon Networks Limited
-				1 Allerton Road
-				Rugby  Warwickshire  CV23 0PA
-				GB
-
-3C-46-D8   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-3C46D8     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-4C-83-DE   (hex)		Cisco SPVTG
-4C83DE     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-A8-13-74   (hex)		Panasonic Corporation AVC Networks Company
-A81374     (base 16)		Panasonic Corporation AVC Networks Company
-				1-15 Matsuo cho
-				Kadoma city  Osaka  571-8504
-				JP
-
-08-3D-88   (hex)		Samsung Electronics Co.,Ltd
-083D88     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-4E-5D   (hex)		ZhongMiao Technology Co., Ltd.
-BC4E5D     (base 16)		ZhongMiao Technology Co., Ltd.
-				NO.2009 Lihu Avenue,  WuxiStudioA-A3
-				Wuxi  Jiangsu  214000
-				CN
-
-3C-18-9F   (hex)		Nokia Corporation
-3C189F     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-7C-6A-C3   (hex)		GatesAir, Inc
-7C6AC3     (base 16)		GatesAir, Inc
-				5300 Kings Island Drive
-				Mason  Ohio  45040
-				US
-
-5C-5B-C2   (hex)		YIK Corporation
-5C5BC2     (base 16)		YIK Corporation
-				B-4F,Pangyo Silicon Park 613
-				Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-30-59-5B   (hex)		streamnow AG
-30595B     (base 16)		streamnow AG
-				Brandstrasse 33
-				Schlieren  Zürich  8952
-				CH
-
-84-85-0A   (hex)		Hella Sonnen- und Wetterschutztechnik GmbH
-84850A     (base 16)		Hella Sonnen- und Wetterschutztechnik GmbH
-				Abfaltersbach 125
-				Abfaltersbach  Tirol  9913
-				AT
-
-08-CD-9B   (hex)		samtec automotive electronics & software GmbH
-08CD9B     (base 16)		samtec automotive electronics & software GmbH
-				Saarstrasse 27
-				Filderstadt  Baden-Wuerttemberg  70794
-				DE
-
-28-E6-E9   (hex)		SIS Sat Internet Services GmbH
-28E6E9     (base 16)		SIS Sat Internet Services GmbH
-				Justus-von-Liebig Str. 26
-				Neustadt  Niedersachsen  31535
-				DE
-
-F4-FD-2B   (hex)		ZOYI Company
-F4FD2B     (base 16)		ZOYI Company
-				827-66 Yeoksam 1-dong, Second Floor
-				Seoul  Korea  135-935
-				KR
-
-F4-F6-46   (hex)		Dediprog Technology Co. Ltd.
-F4F646     (base 16)		Dediprog Technology Co. Ltd.
-				4F,No.7,Lane 143, Xinming Rd.,
-				Taipei    114
-				TW
-
-30-0D-2A   (hex)		Zhejiang Wellcom Technology Co.,Ltd.
-300D2A     (base 16)		Zhejiang Wellcom Technology Co.,Ltd.
-				Liuhe Road,Binjiang District , Hangzhou
-				Hangzhou  Zhejiang  310012
-				
-
-04-5C-8E   (hex)		gosund GROUP CO.,LTD
-045C8E     (base 16)		gosund GROUP CO.,LTD
-				11/F., FRONT BLOCK, HANG LOK BUILDING
-				SHEUNG WAN, HK    999077
-				HK
-
-7C-C4-EF   (hex)		Devialet
-7CC4EF     (base 16)		Devialet
-				126, rue Réaumur
-				Paris  Paris  75002
-				FR
-
-D8-5D-FB   (hex)		Private
-D85DFB     (base 16)		Private
-
-DC-F1-10   (hex)		Nokia Corporation
-DCF110     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-60-8F-5C   (hex)		Samsung Electronics Co.,Ltd
-608F5C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-38-E1   (hex)		Juniper Networks
-DC38E1     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-90-8C-63   (hex)		GZ Weedong Networks Technology Co. , Ltd
-908C63     (base 16)		GZ Weedong Networks Technology Co. , Ltd
-				38th Floor,Ren Feng Building
-				Guangzhou  Guangdong  510620
-				CN
-
-E8-EF-89   (hex)		OPMEX Tech.
-E8EF89     (base 16)		OPMEX Tech.
-				18F GDC Building, 9 Gaoxin Central Avenue 3rd, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-10-92-66   (hex)		Samsung Electronics Co.,Ltd
-109266     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-EC-2E-4E   (hex)		HITACHI-LG DATA STORAGE INC
-EC2E4E     (base 16)		HITACHI-LG DATA STORAGE INC
-				4F, MSC CENTER  BLDG., 22-23 KAIGAN 3-CHOME, MINATO-KU,
-				TOKYO  TOKYO  108-0022
-				JP
-
-34-81-C4   (hex)		AVM GmbH
-3481C4     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-98-37-13   (hex)		PT.Navicom Indonesia
-983713     (base 16)		PT.Navicom Indonesia
-				Perkantoran Citragrand Blok CW7 no 10
-				Bekasi  Jawa Barat  17435
-				ID
-
-A4-7E-39   (hex)		zte corporation
-A47E39     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-CC-B6-91   (hex)		NECMagnusCommunications
-CCB691     (base 16)		NECMagnusCommunications
-				4-28 MITA 1Chome
-				 Minato-ku  Tokyo  108-0073
-				JP
-
-40-16-7E   (hex)		ASUSTek COMPUTER INC.
-40167E     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-F8-4A-73   (hex)		EUMTECH CO., LTD
-F84A73     (base 16)		EUMTECH CO., LTD
-				Room 1201, 115, Dongdeok-ro
-				Daegu  Daegu  700-719
-				KR
-
-14-2B-D6   (hex)		Guangdong Appscomm Co.,Ltd
-142BD6     (base 16)		Guangdong Appscomm Co.,Ltd
-				Rm 903, Block C3, Chuangxin Building, No.182,
-				Guangzhou  Guangdong  510663
-				CN
-
-FC-C2-DE   (hex)		Murata Manufacturing Co., Ltd.
-FCC2DE     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-98-34-9D   (hex)		Krauss Maffei Technologies GmbH
-98349D     (base 16)		Krauss Maffei Technologies GmbH
-				Krauss-Mafffei-Str. 2
-				Munich    80997
-				DE
-
-88-0F-B6   (hex)		Jabil Circuits India Pvt Ltd,-EHTP unit
-880FB6     (base 16)		Jabil Circuits India Pvt Ltd,-EHTP unit
-				B-26, MIDC, Ranjangaon, Tal.Shirur
-				Pune  Maharashtra  412220
-				IN
-
-B4-66-98   (hex)		Zealabs srl
-B46698     (base 16)		Zealabs srl
-				via Monte Grappa, 25
-				Lancenigo di Villorba  Italy  31020
-				IT
-
-68-7C-C8   (hex)		Measurement Systems S. de R.L.
-687CC8     (base 16)		Measurement Systems S. de R.L.
-				45999 Regal Plaza
-				Sterling  VA  20165
-				US
-
-74-F8-5D   (hex)		Berkeley Nucleonics Corp
-74F85D     (base 16)		Berkeley Nucleonics Corp
-				2955 Kerner Blvd #D
-				San Rafael  California  94901
-				US
-
-B0-61-C7   (hex)		Ericsson-LG Enterprise
-B061C7     (base 16)		Ericsson-LG Enterprise
-				77, Heungan-daro 81beon-gil,
-				Anyang  Gyeonggi  431-749
-				KR
-
-00-92-FA   (hex)		SHENZHEN WISKY TECHNOLOGY CO.,LTD
-0092FA     (base 16)		SHENZHEN WISKY TECHNOLOGY CO.,LTD
-				5/F W2-A,Hight-tech Park South 1 Road,Nanshan District,Shenzhen,Guangdong,China
-				Shenzhen  Guangdong  518057
-				CN
-
-4C-7F-62   (hex)		Nokia Corporation
-4C7F62     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-10-0F-18   (hex)		Fu Gang Electronic(KunShan)CO.,LTD
-100F18     (base 16)		Fu Gang Electronic(KunShan)CO.,LTD
-				No.6 Zheng Wei West Road, Jin Xi Town, Kun Shan City, Jiang Su Province, China
-				Jiang Su    215324
-				CN
-
-D0-C7-C0   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D0C7C0     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-44-11-C2   (hex)		Telegartner Karl Gartner GmbH
-4411C2     (base 16)		Telegartner Karl Gartner GmbH
-				Lerchenstr. 35
-				Steinenbronn  Baden-Wurttemberg  71144
-				DE
-
-80-59-FD   (hex)		Noviga
-8059FD     (base 16)		Noviga
-				Lefortovskaya nab., 1
-				Moscow  -  105005
-				RU
-
-40-01-07   (hex)		Arista Corp
-400107     (base 16)		Arista Corp
-				40675 Encyclopedia Circle
-				Fremont  CA  94538
-				US
-
-30-C7-50   (hex)		MIC Technology Group
-30C750     (base 16)		MIC Technology Group
-				No. 6 Gaoxin 3 road
-				Xi'an  Shaanxi  710075
-				CN
-
-18-CC-23   (hex)		Philio Technology Corporation
-18CC23     (base 16)		Philio Technology Corporation
-				8F., No.653-2, Zhongzheng Rd
-				New Taipei    242
-				TW
-
-40-78-75   (hex)		IMBEL - Industria de Material Belico do Brasil
-407875     (base 16)		IMBEL - Industria de Material Belico do Brasil
-				Rua Monsenhor Manoel Gomes,   520
-				Rio de Janeiro  RJ  20931-670
-				BR
-
-D8-81-CE   (hex)		AHN INC.
-D881CE     (base 16)		AHN INC.
-				1006,Halla sigma valley, 53, Gasandigital 2-Ro
-				Seoul    153 706
-				KR
-
-28-C8-25   (hex)		DellKing Industrial Co., Ltd
-28C825     (base 16)		DellKing Industrial Co., Ltd
-				2F,Building D,Zhongxing Science Park,  No 3,Ganli 2nd Road,Gankeng Community
-				Shenzhen  GuangDong  518112
-				CN
-
-80-61-8F   (hex)		Shenzhen sangfei consumer communications co.,ltd
-80618F     (base 16)		Shenzhen sangfei consumer communications co.,ltd
-				11 science and technology road,shenzhen hi-tech industrial park nanshan district,shenzhen 518057,PRC
-				ShenZhen  China/GuangDong  518057
-				CN
-
-D8-2A-15   (hex)		Leitner SpA
-D82A15     (base 16)		Leitner SpA
-				Via Brennero 34
-				Vipiteno  Bolzano  39049
-				IT
-
-44-7E-76   (hex)		Trek Technology (S) Pte Ltd
-447E76     (base 16)		Trek Technology (S) Pte Ltd
-				30 Loyang Way #07-15
-				Singapore  Singapore  508769
-				SG
-
-B0-EC-8F   (hex)		GMX SAS
-B0EC8F     (base 16)		GMX SAS
-				32 Rue Brancion
-				PARIS    75015
-				FR
-
-28-DE-F6   (hex)		bioMerieux Inc.
-28DEF6     (base 16)		bioMerieux Inc.
-				595 Anglum Road
-				Hazelwood  MO  63042
-				US
-
-58-05-28   (hex)		LABRIS NETWORKS
-580528     (base 16)		LABRIS NETWORKS
-				Silikon Blok 1 NK 24 Teknokent
-				ANKARA  AN  06540
-				TR
-
-E0-D3-1A   (hex)		EQUES Technology Co., Limited
-E0D31A     (base 16)		EQUES Technology Co., Limited
-				Room 301, Building 1, No.168 Jixin Road,
-				  Shanghai  201199
-				CN
-
-98-77-70   (hex)		Pep Digital Technology (Guangzhou) Co., Ltd
-987770     (base 16)		Pep Digital Technology (Guangzhou) Co., Ltd
-				23F, Yinhui Building, No.117 Longyi Road,
-				Guangzhou  Guangdong Province  510635
-				CN
-
-68-D2-47   (hex)		Portalis LC
-68D247     (base 16)		Portalis LC
-				204 Fort Union Blvd. Ste. 202
-				Midvale  UT  84047
-				US
-
-50-B6-95   (hex)		Micropoint Biotechnologies,Inc.
-50B695     (base 16)		Micropoint Biotechnologies,Inc.
-				6F, No.3, Industry 5 Road, Shekou
-				Shenzhen  Guangdong  518067
-				CN
-
-B4-43-0D   (hex)		Broadlink Pty Ltd
-B4430D     (base 16)		Broadlink Pty Ltd
-				room 1201,  No. 588 jiangnan Rd,
-				Hangzhou  Zhejiang province  310052
-				CN
-
-A0-65-18   (hex)		VNPT TECHNOLOGY
-A06518     (base 16)		VNPT TECHNOLOGY
-				HoaLac Hi-Tech Park
-				  HANOI  10000
-				VN
-
-7C-8D-91   (hex)		Shanghai Hongzhuo Information Technology co.,LTD
-7C8D91     (base 16)		Shanghai Hongzhuo Information Technology co.,LTD
-				Room.161,Building 5,No.311 Jingao RD
-				Pudong  Shanghai  200136
-				CN
-
-74-8F-1B   (hex)		MasterImage 3D
-748F1B     (base 16)		MasterImage 3D
-				131, Gasan Digital 1-ro, Geumcheon-gu
-				Seoul    153-803
-				KR
-
-08-3F-76   (hex)		Intellian Technologies, Inc.
-083F76     (base 16)		Intellian Technologies, Inc.
-				348-5 Chungho-Ri Jinwi-Myeon
-				  Gyeonggi-Do  451-862
-				KR
-
-CC-89-FD   (hex)		Nokia Corporation
-CC89FD     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-34-46-6F   (hex)		HiTEM Engineering
-34466F     (base 16)		HiTEM Engineering
-				7420 Carroll Road
-				San Diego  CA  92121
-				US
-
-38-6C-9B   (hex)		Ivy Biomedical
-386C9B     (base 16)		Ivy Biomedical
-				11 Business Park Drive
-				Branford  Connecticut  06405
-				US
-
-B4-2C-92   (hex)		Zhejiang Weirong Electronic Co., Ltd
-B42C92     (base 16)		Zhejiang Weirong Electronic Co., Ltd
-				North of South Tanghe Road, Lingxi Town,
-				 Wenzhou City   Zhejiang Province  325800
-				CN
-
-A0-77-71   (hex)		Vialis BV
-A07771     (base 16)		Vialis BV
-				Loodsboot 15
-				HOUTEN  Utrecht  3991 CJ
-				US
-
-10-DD-F4   (hex)		Maxway Electronics CO.,LTD
-10DDF4     (base 16)		Maxway Electronics CO.,LTD
-				2F Building 4,A Section,3rd Industrial zone,Tangtou
-				Shenzhen  Guangdong  518018
-				CN
-
-5C-E7-BF   (hex)		New Singularity International Technical Development Co.,Ltd
-5CE7BF     (base 16)		New Singularity International Technical Development Co.,Ltd
-				8F,NorthStar-Ultrapower Tower, No.13 Beiyuan Road, Chaoyang District, Beijing, China
-				Beijing  Beijing  100107
-				CN
-
-6C-64-1A   (hex)		Penguin Computing
-6C641A     (base 16)		Penguin Computing
-				45800 Northport Loop West
-				Fremont  CA  94538
-				US
-
-50-A0-54   (hex)		Actineon
-50A054     (base 16)		Actineon
-				47751 Fremont Blvd
-				Fremont  California  94538
-				US
-
-B4-85-47   (hex)		Amptown System Company GmbH
-B48547     (base 16)		Amptown System Company GmbH
-				Wandsbeker Strasse 26
-				Hamburg  Hamburg  22179
-				DE
-
-50-56-A8   (hex)		Jolla Ltd
-5056A8     (base 16)		Jolla Ltd
-				Itaemerenkatu 11-13
-				  Helsinki  00180
-				US
-
-E8-E7-70   (hex)		Warp9 Tech Design, Inc.
-E8E770     (base 16)		Warp9 Tech Design, Inc.
-				3650 Pheasant Run N.E.
-				Blaine  MN  55449
-				US
-
-60-96-20   (hex)		Private
-609620     (base 16)		Private
-
-C0-F9-91   (hex)		GME Standard Communications P/L
-C0F991     (base 16)		GME Standard Communications P/L
-				17 Gibbon Rd.
-				Winston Hills  New South Wales  2153
-				AU
-
-D8-7C-DD   (hex)		SANIX INCORPORATED
-D87CDD     (base 16)		SANIX INCORPORATED
-				Creation Core Fukuoka 212, 3-2-16 Kamikoga,
-				Chikushino-shi  Fukuoka  818-0041
-				JP
-
-70-7C-18   (hex)		ADATA Technology Co., Ltd
-707C18     (base 16)		ADATA Technology Co., Ltd
-				2F, No.258, Lian Cheng Rd.
-				New Taipei City    23553
-				TW
-
-14-F2-8E   (hex)		ShenYang ZhongKe-Allwin Technology Co.LTD
-14F28E     (base 16)		ShenYang ZhongKe-Allwin Technology Co.LTD
-				No.6, Gaoge Road,
-				ShenYang  Liaoning  110179
-				CN
-
-BC-14-EF   (hex)		ITON Technology Limited
-BC14EF     (base 16)		ITON Technology Limited
-				Room 1302,A ablock, Building 4
-				ShenZhen  GuangDong Pronvice  518000
-				CN
-
-08-03-71   (hex)		KRG CORPORATE
-080371     (base 16)		KRG CORPORATE
-				41 rue Perier
-				Montrouge    92120
-				FR
-
-20-0E-95   (hex)		IEC – TC9 WG43
-200E95     (base 16)		IEC – TC9 WG43
-				3, rue de Varembé
-				Geneva  GE  1211
-				CH
-
-C8-F6-8D   (hex)		S.E.TECHNOLOGIES LIMITED
-C8F68D     (base 16)		S.E.TECHNOLOGIES LIMITED
-				#303 Shiodome building Level3
-				Minato-ku  Tokyo  105-0022
-				JP
-
-3C-D4-D6   (hex)		WirelessWERX, Inc
-3CD4D6     (base 16)		WirelessWERX, Inc
-				22687 Old Canal Rd.
-				Yorba Linda  California  92887
-				US
-
-0C-12-62   (hex)		zte corporation
-0C1262     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-78-EC-74   (hex)		Kyland-USA
-78EC74     (base 16)		Kyland-USA
-				1107 SE Willow Pl
-				Blue Springs  MO  64014
-				US
-
-98-DA-92   (hex)		Vuzix Corporation
-98DA92     (base 16)		Vuzix Corporation
-				2166 Brighton Henrietta Town Line Road
-				Rochester  NY  14623
-				US
-
-38-7B-47   (hex)		AKELA, Inc.
-387B47     (base 16)		AKELA, Inc.
-				5551 Ekwill Street, Suite A
-				Santa Barbara  California  93111
-				US
-
-C0-64-C6   (hex)		Nokia Corporation
-C064C6     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-E4-04-39   (hex)		TomTom Software Ltd
-E40439     (base 16)		TomTom Software Ltd
-				20th Floor Euston Tower
-				London    NW1 3AS
-				GB
-
-D0-C4-2F   (hex)		Tamagawa Seiki Co.,Ltd.
-D0C42F     (base 16)		Tamagawa Seiki Co.,Ltd.
-				1-3-47 Kitainter Kogyodanchi
-				Hachinohe city  Aomori-Pref.  039-2245
-				US
-
-54-93-59   (hex)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
-549359     (base 16)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
-				F 4th ,5th , 6th, No.6 Building,
-				Shenzhen  Guangdong  518129
-				US
-
-90-35-6E   (hex)		Vodafone Omnitel N.V.
-90356E     (base 16)		Vodafone Omnitel N.V.
-				Via Guglielmo Jervis, 13
-				Ivrea  Italy / Tourin  10015
-				IT
-
-28-44-30   (hex)		GenesisTechnical Systems (UK) Ltd
-284430     (base 16)		GenesisTechnical Systems (UK) Ltd
-				Venture Centre
-				Coventry    CV4 7EZ
-				GB
-
-5C-11-93   (hex)		Seal One AG
-5C1193     (base 16)		Seal One AG
-				Berliner Str. 44
-				Frankfurt am Main  Hessen  60311
-				DE
-
-78-3D-5B   (hex)		TELNET Redes Inteligentes S.A.
-783D5B     (base 16)		TELNET Redes Inteligentes S.A.
-				Polígono Industrial Centrovía
-				La Muela  Zaragoza  50198
-				ES
-
-D0-B5-23   (hex)		Bestcare Cloucal Corp.
-D0B523     (base 16)		Bestcare Cloucal Corp.
-				4F.,No.106,Sec.1,Xintai 5th Rd.,
-				New Taipei City    22102
-				TW
-
-24-A4-95   (hex)		Thales Canada Inc.
-24A495     (base 16)		Thales Canada Inc.
-				105 Moatfield Road
-				Toronto  Ontario  M3B 0A4
-				CA
-
-84-76-16   (hex)		Addat s.r.o.
-847616     (base 16)		Addat s.r.o.
-				U krematoria 24
-				Liberec  Liberec  46001
-				CZ
-
-DC-05-75   (hex)		SIEMENS ENERGY AUTOMATION
-DC0575     (base 16)		SIEMENS ENERGY AUTOMATION
-				 GOA WORKS ,L-6 ,
-				VERNA  GOA   403722
-				IN
-
-E0-97-F2   (hex)		Atomax Inc.
-E097F2     (base 16)		Atomax Inc.
-				8F-1, No.300, Sec.1, Nei-hu Rd.
-				  Taipei  114
-				TW
-
-70-30-5E   (hex)		Nanjing Zhongke Menglian Information Technology Co.,LTD
-70305E     (base 16)		Nanjing Zhongke Menglian Information Technology Co.,LTD
-				3rd Floor,Building A,Area 3
-				Nanjing  Jiangsu  210042
-				CN
-
-C0-98-E5   (hex)		University of Michigan
-C098E5     (base 16)		University of Michigan
-				4808 Beyster Bldg,
-				Ann Arbor  Michigan  48109
-				US
-
-50-E1-4A   (hex)		Private
-50E14A     (base 16)		Private
-
-70-8D-09   (hex)		Nokia Corporation
-708D09     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-98-FB-12   (hex)		Grand Electronics (HK) Ltd
-98FB12     (base 16)		Grand Electronics (HK) Ltd
-				Flat/Room 1120, 11/F Beverley Commercial Centre
-				    999077
-				HK
-
-3C-10-40   (hex)		daesung network
-3C1040     (base 16)		daesung network
-				#209 e-space Bldg,Guro-dong,Guro-gu
-				Seoul    152-789
-				KR
-
-28-FC-51   (hex)		The Electric Controller and Manufacturing Co., LLC
-28FC51     (base 16)		The Electric Controller and Manufacturing Co., LLC
-				PO Box 468
-				Saint Matthews  SC  29135
-				US
-
-40-74-96   (hex)		aFUN TECHNOLOGY INC.
-407496     (base 16)		aFUN TECHNOLOGY INC.
-				2F.,No.3,Lane29,HuLu ST.,Shihlin District,
-				Taipei    11165
-				TW
-
-70-1D-7F   (hex)		Comtech Technology Co., Ltd.
-701D7F     (base 16)		Comtech Technology Co., Ltd.
-				2F, No. 42, Sec. 3 Chung Yang Rd.
-				New Taipei City    23673
-				TW
-
-70-59-86   (hex)		OOO TTV
-705986     (base 16)		OOO TTV
-				No. 75, Okulov Street, Building 8
-				Perm    614068
-				RU
-
-84-4F-03   (hex)		Ablelink Electronics Ltd
-844F03     (base 16)		Ablelink Electronics Ltd
-				Flat 1602,16/F Kodak House 2 39 Healthy Street East,
-				    
-				CN
-
-90-67-17   (hex)		Alphion India Private Limited
-906717     (base 16)		Alphion India Private Limited
-				405 Windfall, Sahar Plaza
-				Mumbai  Maharashtra  400059
-				IN
-
-60-64-A1   (hex)		RADiflow Ltd.
-6064A1     (base 16)		RADiflow Ltd.
-				31 Habarzel St.
-				Tel Aviv    6971045
-				IL
-
-58-B9-61   (hex)		SOLEM Electronique
-58B961     (base 16)		SOLEM Electronique
-				ZAE La Plaine
-				CLAPIERS    34830
-				FR
-
-0C-47-3D   (hex)		Hitron Technologies. Inc
-0C473D     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-8C-CD-A2   (hex)		ACTP, Inc.
-8CCDA2     (base 16)		ACTP, Inc.
-				2400 Sand Lake Rd
-				Orlando  FL  32809
-				US
-
-84-26-2B   (hex)		Nokia
-84262B     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-98-6C-F5   (hex)		zte corporation
-986CF5     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-44-7B-C4   (hex)		DualShine Technology(SZ)Co.,Ltd
-447BC4     (base 16)		DualShine Technology(SZ)Co.,Ltd
-				No.334-1,LuoTian 3rd Industrial Park,
-				Shen Zhen  Guang Dong  518000
-				CN
-
-9C-03-9E   (hex)		Beijing Winchannel Software Technology Co., Ltd
-9C039E     (base 16)		Beijing Winchannel Software Technology Co., Ltd
-				8F, Block E, Dazhongsi Zhongkun Plaza No. A
-				Haidian District  BEIJING  100089
-				CN
-
-68-0A-D7   (hex)		Yancheng Kecheng Optoelectronic Technology Co., Ltd
-680AD7     (base 16)		Yancheng Kecheng Optoelectronic Technology Co., Ltd
-				No.1 East Road, Kaifa Avenue,
-				Yancheng  Jiangsu  224007
-				CN
-
-BC-88-93   (hex)		VILLBAU Ltd.
-BC8893     (base 16)		VILLBAU Ltd.
-				Üllöi ut 611.
-				Budapest  -  H-1182
-				HU
-
-70-61-73   (hex)		Calantec GmbH
-706173     (base 16)		Calantec GmbH
-				Doebelner Str. 4
-				  Berlin  12627
-				DE
-
-7C-49-B9   (hex)		Plexus Manufacturing Sdn Bhd
-7C49B9     (base 16)		Plexus Manufacturing Sdn Bhd
-				Plot 87
-				Bayan Lepas  Penang  11900
-				MY
-
-9C-F8-DB   (hex)		shenzhen eyunmei technology co,.ltd
-9CF8DB     (base 16)		shenzhen eyunmei technology co,.ltd
-				8/F Yiben Building,No.1063 ChaGuang Road,XiLi Town,
-				Shenzhen  Guangdong  518055
-				CN
-
-20-D2-1F   (hex)		Wincal Technology Corp.
-20D21F     (base 16)		Wincal Technology Corp.
-				1028 South Greenwood Ave.
-				Montebello  California  90640
-				US
-
-F8-95-50   (hex)		Proton Products Chengdu Ltd
-F89550     (base 16)		Proton Products Chengdu Ltd
-				1st Ring
-				Chengdu  Sichuan  610051
-				CN
-
-58-63-9A   (hex)		TPL SYSTEMES
-58639A     (base 16)		TPL SYSTEMES
-				ZAE DU PERIGORD NOIR
-				SARLAT    24200
-				FR
-
-18-7E-D5   (hex)		shenzhen kaism technology Co. Ltd
-187ED5     (base 16)		shenzhen kaism technology Co. Ltd
-				37# chuanglong west road pinghu shenzhen
-				shenzhen    518111
-				CN
-
-84-1B-38   (hex)		Shenzhen Excelsecu Data Technology Co.,Ltd
-841B38     (base 16)		Shenzhen Excelsecu Data Technology Co.,Ltd
-				Unit 701-709,7/F，South Block,SDGI Building A, No.2,
-				Shenzhen  Guangdong  518057
-				CN
-
-4C-CB-F5   (hex)		zte corporation
-4CCBF5     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-44-70-0B   (hex)		IFFU
-44700B     (base 16)		IFFU
-				33, Annyeom-gil 112 beon-gil,jeongnam-myeon
-				Hwaseong-si  Gyeonggi-do  445-968
-				US
-
-54-A5-4B   (hex)		NSC Communications Siberia Ltd
-54A54B     (base 16)		NSC Communications Siberia Ltd
-				Ordjonikidze 38
-				  Novosibirsk  630099
-				RU
-
-BC-2B-6B   (hex)		Beijing Haier IC Design Co.,Ltd
-BC2B6B     (base 16)		Beijing Haier IC Design Co.,Ltd
-				Room 205, Tongheng Building, No.4 Huayuan Road, Haidian District
-				Beijing  Beijing  100088
-				CN
-
-98-D3-31   (hex)		Shenzhen Bolutek Technology Co.,Ltd.
-98D331     (base 16)		Shenzhen Bolutek Technology Co.,Ltd.
-				Building B, District A, Internet industry base, Baoan
-				Shenzhen  Guangdong  518000
-				CN
-
-38-EC-11   (hex)		Novatek Microelectronics Corp.
-38EC11     (base 16)		Novatek Microelectronics Corp.
-				No.1-2 Innovation Rd I.,
-				Hsinchu    300
-				TW
-
-1C-41-58   (hex)		Gemalto M2M GmbH
-1C4158     (base 16)		Gemalto M2M GmbH
-				Siemensdamm 50
-				Berlin  Berlin  13629
-				DE
-
-9C-28-40   (hex)		Discovery Technology,LTD..
-9C2840     (base 16)		Discovery Technology,LTD..
-				5th floor Building 2,Block A,Internet industrial park,
-				Shenzhen  Guangzhou  518100
-				CN
-
-E0-AF-4B   (hex)		Pluribus Networks, Inc.
-E0AF4B     (base 16)		Pluribus Networks, Inc.
-				1808 Embarcadero Rd Suite B
-				Palo Alto  CA  94303
-				US
-
-84-0F-45   (hex)		Shanghai GMT Digital Technologies Co., Ltd
-840F45     (base 16)		Shanghai GMT Digital Technologies Co., Ltd
-				Room 501-505
-				Zhangjiang Hi-tech Park  Shanghai  201204
-				CN
-
-2C-5F-F3   (hex)		Pertronic Industries
-2C5FF3     (base 16)		Pertronic Industries
-				17 Eastern Hutt Road
-				Wingate    5019
-				NZ
-
-78-49-1D   (hex)		The Will-Burt Company
-78491D     (base 16)		The Will-Burt Company
-				169 S. Main St.
-				Orrivlle  Ohio  44667
-				US
-
-F4-6A-BC   (hex)		Adonit Corp. Ltd.
-F46ABC     (base 16)		Adonit Corp. Ltd.
-				10689 Rm. A, 9F, No.107 Sec.4 Ren-Ai Rd.,
-				Taipei  Taipei  10689
-				TW
-
-28-C6-71   (hex)		Yota Devices OY
-28C671     (base 16)		Yota Devices OY
-				Elektronikkatie 13
-				Oulu    90590
-				FI
-
-D8-69-60   (hex)		Steinsvik
-D86960     (base 16)		Steinsvik
-				Rundhaug 25
-				FOERRESFJORDEN  Rogaland  5563
-				NO
-
-08-EF-3B   (hex)		MCS Logic Inc.
-08EF3B     (base 16)		MCS Logic Inc.
-				6F. Samho Center B Bldg., 275-6,Yangjae-Dong, Secho-Ku,Seoul
-				Seoul    137-941
-				KR
-
-E8-EA-DA   (hex)		Denkovi Assembly Electronics LTD
-E8EADA     (base 16)		Denkovi Assembly Electronics LTD
-				St. Stambolov str. 21
-				Byala  Rousse  7100
-				BG
-
-F8-5B-C9   (hex)		M-Cube Spa
-F85BC9     (base 16)		M-Cube Spa
-				Corso Cavour 2/2d
-				  Trieste  34132
-				IT
-
-7C-B7-7B   (hex)		Paradigm Electronics Inc
-7CB77B     (base 16)		Paradigm Electronics Inc
-				5340 Canotek Rd Unit#4
-				Ottawa  ON  K1J 9C6
-				CA
-
-B0-CE-18   (hex)		Zhejiang shenghui lighting co.,Ltd
-B0CE18     (base 16)		Zhejiang shenghui lighting co.,Ltd
-				Rm801,1th Xinye Building
-				cao he jing Develop Zone  Shanghai  200233
-				CN
-
-6C-F9-7C   (hex)		Nanoptix Inc.
-6CF97C     (base 16)		Nanoptix Inc.
-				699 Champlain St
-				Dieppe  NB  E1A 1P6
-				CA
-
-F8-FF-5F   (hex)		Shenzhen Communication Technology Co.,Ltd
-F8FF5F     (base 16)		Shenzhen Communication Technology Co.,Ltd
-				2F,6 Block, Kupai inforport,No.2 Mengxi Street,(North)High-tech Industrial Park,
-				Shenzhen  Guangdong  518057
-				CN
-
-10-22-79   (hex)		ZeroDesktop, Inc.
-102279     (base 16)		ZeroDesktop, Inc.
-				125 University Ave, Suite 150
-				Palo Alto  California  94301
-				US
-
-7C-1A-FC   (hex)		Dalian Co-Edifice Video Technology Co., Ltd
-7C1AFC     (base 16)		Dalian Co-Edifice Video Technology Co., Ltd
-				23F , Block A , #32 Huoju Road , Hi-Tech Zone
-				Dalian  Liaoning  116023
-				CN
-
-F4-7A-4E   (hex)		Woojeon&Handan
-F47A4E     (base 16)		Woojeon&Handan
-				569-12, Gasan-dong,
-				Seoul    153-803
-				KR
-
-04-84-8A   (hex)		7INOVA TECHNOLOGY LIMITED
-04848A     (base 16)		7INOVA TECHNOLOGY LIMITED
-				3F, A Building, QuanYuanFa Industrial Park, No. 72, GuanLan Rd
-				LongHua District  Shenzhen  518000
-				CN
-
-EC-22-57   (hex)		JiangSu NanJing University Electronic Information Technology Co.,Ltd
-EC2257     (base 16)		JiangSu NanJing University Electronic Information Technology Co.,Ltd
-				F7,Block 06
-				NanJing  JiangSu  210000
-				CN
-
-F0-37-A1   (hex)		Huike Electronics (SHENZHEN) CO., LTD.
-F037A1     (base 16)		Huike Electronics (SHENZHEN) CO., LTD.
-				Huike industrial park,Minying industrial park,Shuitian country,Shiyan,Baoan District
-				SHENZHEN  GUANGDONG  518108
-				CN
-
-70-4C-ED   (hex)		TMRG, Inc.
-704CED     (base 16)		TMRG, Inc.
-				11950 Democracy Drive
-				Reston  VA  20190
-				US
-
-F0-8E-DB   (hex)		VeloCloud Networks
-F08EDB     (base 16)		VeloCloud Networks
-				720 University Ave.
-				Palo Alto  CA  94301
-				US
-
-C0-A3-9E   (hex)		EarthCam, Inc.
-C0A39E     (base 16)		EarthCam, Inc.
-				84 Kennedy Street
-				Hackensack  New Jersey  07601
-				US
-
-10-9A-B9   (hex)		Tosibox Oy
-109AB9     (base 16)		Tosibox Oy
-				Elektroniikkatie 8
-				  Oulu  90590
-				FI
-
-14-2D-8B   (hex)		Incipio Technologies, Inc
-142D8B     (base 16)		Incipio Technologies, Inc
-				6001 Oak Canyon
-				Irvine  CA  92618
-				US
-
-68-EE-96   (hex)		Cisco SPVTG
-68EE96     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-78-D3-8D   (hex)		HONGKONG YUNLINK TECHNOLOGY LIMITED
-78D38D     (base 16)		HONGKONG YUNLINK TECHNOLOGY LIMITED
-				15B 15/F CHEUK NANG PLAZA 250 HENNESSY RD HK
-				ShenzhenCity  Guangdong Province  518103
-				US
-
-DC-AE-04   (hex)		CELOXICA Ltd
-DCAE04     (base 16)		CELOXICA Ltd
-				34 Porchester Road
-				  London  W2 6ES
-				GB
-
-80-05-DF   (hex)		Montage Technology Group Limited
-8005DF     (base 16)		Montage Technology Group Limited
-				Rm#A16F, Technolgy Blgd.,Yishan Rd.
-				Shanghai    200233
-				CN
-
-68-1D-64   (hex)		Sunwave Communications Co., Ltd
-681D64     (base 16)		Sunwave Communications Co., Ltd
-				581,huoju Avenue,BinJiang District
-				 Hangzhou  Zhejiang Province  310053
-				CN
-
-90-7A-0A   (hex)		Gebr. Bode GmbH & Co KG
-907A0A     (base 16)		Gebr. Bode GmbH & Co KG
-				Ochshaeuser Str. 14
-				Kassel    34266
-				DE
-
-A0-C6-EC   (hex)		ShenZhen ANYK Technology Co.,LTD
-A0C6EC     (base 16)		ShenZhen ANYK Technology Co.,LTD
-				5F,12B,ZhongXing Industrial Zone, Venture Road
-				ShenZhen  GuangDong  518054
-				CN
-
-78-E8-B6   (hex)		zte corporation
-78E8B6     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-10-78-CE   (hex)		Hanvit SI, Inc.
-1078CE     (base 16)		Hanvit SI, Inc.
-				#201 Daeheung Building, 265-18 Yangjae-dong
-				Seoul    137130
-				KR
-
-D8-DA-52   (hex)		APATOR S.A.
-D8DA52     (base 16)		APATOR S.A.
-				ul Gdanska 4A lok. C4
-				Torun  Kujawsko-Pomorskie  87-100
-				PL
-
-58-7A-4D   (hex)		Stonesoft Corporation
-587A4D     (base 16)		Stonesoft Corporation
-				Italahdenkatu 22A
-				Helsinki    00210
-				FI
-
-84-E6-29   (hex)		Bluwan SA
-84E629     (base 16)		Bluwan SA
-				Espace Lumiere, Bat 2
-				Chatou    78400
-				FR
-
-C4-7F-51   (hex)		Inventek Systems
-C47F51     (base 16)		Inventek Systems
-				2 Republic Road
-				Billerica  Ma  01862
-				US
-
-A8-97-DC   (hex)		IBM
-A897DC     (base 16)		IBM
-				4400 North First Street
-				San Jose  CA  95134
-				US
-
-CC-D2-9B   (hex)		Shenzhen Bopengfa Elec&Technology CO.,Ltd
-CCD29B     (base 16)		Shenzhen Bopengfa Elec&Technology CO.,Ltd
-				 Bldg56A,3/F,Baotian Rd3,Xixiang Town
-				shenzhen  guangdong  518000
-				CN
-
-A0-9B-BD   (hex)		Total Aviation Solutions Pty Ltd
-A09BBD     (base 16)		Total Aviation Solutions Pty Ltd
-				Suite 816A / 3 PARKLAND BVDE
-				Brisbane  QLD  4000
-				AU
-
-D4-0B-B9   (hex)		Solid Semecs bv.
-D40BB9     (base 16)		Solid Semecs bv.
-				Oostwijk 18
-				Uden  Noord Brabant  5406 XT
-				NL
-
-F4-15-FD   (hex)		Shanghai Pateo Electronic Equipment Manufacturing Co., Ltd.
-F415FD     (base 16)		Shanghai Pateo Electronic Equipment Manufacturing Co., Ltd.
-				20th Floor, Metro Tower
-				Xuhui District  Shanghai  200030
-				CN
-
-70-E0-27   (hex)		HONGYU COMMUNICATION TECHNOLOGY LIMITED
-70E027     (base 16)		HONGYU COMMUNICATION TECHNOLOGY LIMITED
-				Room4B, East Building 210,
-				Shen Zhen  Guang Dong Province  518040
-				CN
-
-FC-35-E6   (hex)		Visteon corp
-FC35E6     (base 16)		Visteon corp
-				One Village Center Dr
-				Belleville  MI  48111
-				US
-
-E8-48-1F   (hex)		Advanced Automotive Antennas
-E8481F     (base 16)		Advanced Automotive Antennas
-				Pol.Ind Can Mitjans s/n
-				Viladecavalls  Barcelona  08232
-				ES
-
-34-95-DB   (hex)		Logitec Corporation
-3495DB     (base 16)		Logitec Corporation
-				8268 Rokudohara, Misuzu
-				Ina  Nagano  
-				JP
-
-9C-B7-93   (hex)		Creatcomm Technology Inc.
-9CB793     (base 16)		Creatcomm Technology Inc.
-				Rm 619, Buld A, Modern Plaza
-				Kunshan  Jiangsu  201203
-				CN
-
-5C-33-5C   (hex)		Swissphone Telecom AG
-5C335C     (base 16)		Swissphone Telecom AG
-				Faelmisstrasse 21
-				Samstagern  Zurich  CH-8833
-				CH
-
-04-DF-69   (hex)		Car Connectivity Consortium
-04DF69     (base 16)		Car Connectivity Consortium
-				3855 SW 153rd Drive
-				Beaverton  Oregon  97006
-				US
-
-78-DA-B3   (hex)		GBO Technology
-78DAB3     (base 16)		GBO Technology
-				1150 Bayhill Dr. Ste. 111
-				San Bruno  CA  94066
-				US
-
-70-0F-EC   (hex)		Poindus Systems Corp.
-700FEC     (base 16)		Poindus Systems Corp.
-				5F., No. 59, Lane. 77, Xing-Ai Rd., Neihu Dist.,
-				 Taipei City    114
-				TW
-
-F0-24-05   (hex)		OPUS High Technology Corporation
-F02405     (base 16)		OPUS High Technology Corporation
-				1st Floor, No. 367, Gaocui Road
-				Hsinchu City    30064
-				TW
-
-D4-10-90   (hex)		iNFORM Systems AG
-D41090     (base 16)		iNFORM Systems AG
-				Europastrasse 15
-				Glattbrugg    8152
-				CH
-
-78-D5-B5   (hex)		NAVIELEKTRO KY
-78D5B5     (base 16)		NAVIELEKTRO KY
-				HALLIMESTARINKATU 11
-				KAARINA    FIN-20780
-				FI
-
-E4-7D-5A   (hex)		Beijing Hanbang Technology Corp.
-E47D5A     (base 16)		Beijing Hanbang Technology Corp.
-				4/F,Skirt Building
-				Haidian District  Beijing  100080
-				CN
-
-E4-F7-A1   (hex)		Datafox GmbH
-E4F7A1     (base 16)		Datafox GmbH
-				Dermbacher Str. 12 - 14
-				Geisa  Thüringen  36419
-				DE
-
-10-5C-3B   (hex)		Perma-Pipe, Inc.
-105C3B     (base 16)		Perma-Pipe, Inc.
-				7720 Lehigh Ave
-				Niles  IL  60714
-				US
-
-34-9D-90   (hex)		Heinzmann GmbH & CO. KG
-349D90     (base 16)		Heinzmann GmbH & CO. KG
-				Am Haselbach 1
-				Schoenau  Baden Wuertemberg  79677
-				DE
-
-D8-62-DB   (hex)		Eno Inc.
-D862DB     (base 16)		Eno Inc.
-				2-3-18, Komagome, Toshima-ku
-				Tokyo    1700013
-				JP
-
-C4-7D-FE   (hex)		A.N. Solutions GmbH
-C47DFE     (base 16)		A.N. Solutions GmbH
-				Am Brauhaus 12
-				Dresden  Saxony  01099
-				DE
-
-CC-BD-35   (hex)		Steinel GmbH
-CCBD35     (base 16)		Steinel GmbH
-				Dieselstrasse 80-84
-				Herzebrock-Clarholz    33442
-				DE
-
-6C-EC-A1   (hex)		SHENZHEN CLOU ELECTRONICS CO. LTD.
-6CECA1     (base 16)		SHENZHEN CLOU ELECTRONICS CO. LTD.
-				5/F, building. T2, Hi-tech Industrial Park
-				SHENZ  GUANGONG  518057
-				CN
-
-B0-38-50   (hex)		Nanjing CAS-ZDC IOT SYSTEM CO.,LTD
-B03850     (base 16)		Nanjing CAS-ZDC IOT SYSTEM CO.,LTD
-				699-27 Xuanwu Avenue
-				Nanjing  Jiangsu  210000
-				CN
-
-74-8E-08   (hex)		Bestek Corp.
-748E08     (base 16)		Bestek Corp.
-				No. 6, Lane 229, Sec. 3, Chang-Xing Rd.
-				Taoyuan    33852
-				TW
-
-78-F5-E5   (hex)		BEGA Gantenbrink-Leuchten KG
-78F5E5     (base 16)		BEGA Gantenbrink-Leuchten KG
-				Hennenbusch
-				Menden  NRW  58708
-				DE
-
-8C-3C-07   (hex)		Skiva Technologies, Inc.
-8C3C07     (base 16)		Skiva Technologies, Inc.
-				8330 Sterling St
-				Irving  TX  75063
-				US
-
-38-A8-6B   (hex)		Orga BV
-38A86B     (base 16)		Orga BV
-				Strickledeweg 13
-				Schiedam    3125 AT
-				NL
-
-F0-77-65   (hex)		Sourcefire, Inc
-F07765     (base 16)		Sourcefire, Inc
-				9780 Patuxent Woods Drive
-				Columbia  Maryland  21046
-				US
-
-14-41-E2   (hex)		Monaco Enterprises, Inc.
-1441E2     (base 16)		Monaco Enterprises, Inc.
-				14820 E. Sprague Ave.
-				Spokane  WA  99216
-				US
-
-EC-D0-40   (hex)		GEA Farm Technologies GmbH
-ECD040     (base 16)		GEA Farm Technologies GmbH
-				Siemensstrasse 25-27
-				Boenen  Northrhine-Westfalia  59199
-				DE
-
-F8-0D-EA   (hex)		ZyCast Technology Inc.
-F80DEA     (base 16)		ZyCast Technology Inc.
-				No.33, Lane 181, Chung Hwa Road,
-				Hsin Chu    30060
-				TW
-
-B0-88-07   (hex)		Strata Worldwide
-B08807     (base 16)		Strata Worldwide
-				8995 Roswell Road
-				Sandy Springs  GA  30350
-				US
-
-24-95-04   (hex)		SFR
-249504     (base 16)		SFR
-				40-42 QUAI DU POINT DU JOUR
-				BOULOGNE BILLANCOURT  HAUT DE SEINE  92100
-				FR
-
-F4-58-42   (hex)		Boxx TV Ltd
-F45842     (base 16)		Boxx TV Ltd
-				Suite 17, Imperial Studios
-				  London  SW6 2AG
-				GB
-
-10-66-82   (hex)		NEC Platforms, Ltd.
-106682     (base 16)		NEC Platforms, Ltd.
-				800 Shimomata
-				Kakegawa  Shizuoka  436-8501
-				JP
-
-24-62-78   (hex)		sysmocom - systems for mobile communications GmbH
-246278     (base 16)		sysmocom - systems for mobile communications GmbH
-				Alt-Moabit 93
-				  Berlin  10559
-				DE
-
-F0-84-C9   (hex)		zte corporation
-F084C9     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D4-01-6D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D4016D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-98-5C-93   (hex)		SBG Systems SAS
-985C93     (base 16)		SBG Systems SAS
-				3bis, chemin de la Jonchere
-				Rueil Malmaison  Ile de France  92500
-				FR
-
-A0-8A-87   (hex)		HuiZhou KaiYue Electronic Co.,Ltd
-A08A87     (base 16)		HuiZhou KaiYue Electronic Co.,Ltd
-				3#,Ruttang 2nd area,Tongcheng Avenue
-				Huizhou  Guangdong  516005
-				CN
-
-28-CD-9C   (hex)		Shenzhen Dynamax Software Development Co.,Ltd.
-28CD9C     (base 16)		Shenzhen Dynamax Software Development Co.,Ltd.
-				Room 425-426,Block A,No.30,Hangkong Road
-				Shenzhen  Guangdong  518000
-				CN
-
-C0-C3-B6   (hex)		Automatic Systems
-C0C3B6     (base 16)		Automatic Systems
-				avenue mercator,5
-				Wavre  Belgium  1300
-				BE
-
-A0-EB-76   (hex)		AirCUVE Inc.
-A0EB76     (base 16)		AirCUVE Inc.
-				Guro-gu Digital-ro
-				  Seoul  152-719
-				KR
-
-FC-44-99   (hex)		Swarco LEA d.o.o.
-FC4499     (base 16)		Swarco LEA d.o.o.
-				Finzgarjeva 1A
-				Lesce    4248
-				SI
-
-DC-64-7C   (hex)		C.R.S. iiMotion GmbH
-DC647C     (base 16)		C.R.S. iiMotion GmbH
-				Hermann-Schwer-Str. 3
-				Villingen-Schwenningen    78048
-				DE
-
-14-86-92   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-148692     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-A8-15-4D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-A8154D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-5C-F3-70   (hex)		CC&C Technologies, Inc
-5CF370     (base 16)		CC&C Technologies, Inc
-				8F, 150, Chien I Rd.
-				Chung Ho  Taiwan  235
-				TW
-
-A4-E0-E6   (hex)		FILIZOLA S.A. PESAGEM E AUTOMACAO
-A4E0E6     (base 16)		FILIZOLA S.A. PESAGEM E AUTOMACAO
-				RUA JOAO VENTURA BATISTA, 450
-				  SAO PAULO  02054-100
-				BR
-
-38-17-66   (hex)		PROMZAKAZ LTD.
-381766     (base 16)		PROMZAKAZ LTD.
-				Noviy Arbat street, 21
-				  Moscow  119019
-				RU
-
-18-E8-DD   (hex)		MODULETEK
-18E8DD     (base 16)		MODULETEK
-				Unit 4A.4F.B Building. Shenfubao Science and Technology Industrial Park
-				Shenzhen  Guangdong  518038
-				CN
-
-D0-73-D5   (hex)		LIFI LABS MANAGEMENT PTY LTD
-D073D5     (base 16)		LIFI LABS MANAGEMENT PTY LTD
-				7 Cubitt St
-				Richmond  Victoria  3121
-				AU
-
-14-94-48   (hex)		BLU CASTLE S.A.
-149448     (base 16)		BLU CASTLE S.A.
-				5 RUE BONNEVOIE
-				  LUXEMBOURG  L-1260
-				US
-
-48-F9-25   (hex)		Maestronic
-48F925     (base 16)		Maestronic
-				Futura plaza 2103
-				Kwun Tong    88
-				HK
-
-38-67-93   (hex)		Asia Optical Co., Inc.
-386793     (base 16)		Asia Optical Co., Inc.
-				No. 22-3 South 2nd Road, T.E.P.Z.
-				Taichung  Taiwan  42754
-				TW
-
-0C-82-68   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-0C8268     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-D8-1E-DE   (hex)		B&W Group Ltd
-D81EDE     (base 16)		B&W Group Ltd
-				5070 Francois Cusson
-				Lachine  Quebec  H8T1B3
-				CA
-
-24-EA-40   (hex)		Helmholz GmbH & Co. KG
-24EA40     (base 16)		Helmholz GmbH & Co. KG
-				Hannberger Weg 2
-				Grossenseebach  BAY  91091
-				DE
-
-D4-29-EA   (hex)		Zimory GmbH
-D429EA     (base 16)		Zimory GmbH
-				Revalerstrasse 100
-				Berlin  Brandenburg  10245
-				DE
-
-34-AD-E4   (hex)		Shanghai Chint Power Systems Co., Ltd.
-34ADE4     (base 16)		Shanghai Chint Power Systems Co., Ltd.
-				855 Wenhe Road, Block 4
-				    201614
-				CN
-
-3C-94-D5   (hex)		Juniper Networks
-3C94D5     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-68-83-1A   (hex)		Pandora Mobility Corporation
-68831A     (base 16)		Pandora Mobility Corporation
-				1F., No.33, Fude St
-				Taoyuan  Guishan  333
-				TW
-
-FC-DB-96   (hex)		ENERVALLEY CO., LTD
-FCDB96     (base 16)		ENERVALLEY CO., LTD
-				907-101 DIGITAL EMPIRE II
-				SUWON SI  GYEONGGI DO  443 734
-				KR
-
-14-23-D7   (hex)		EUTRONIX CO., LTD.
-1423D7     (base 16)		EUTRONIX CO., LTD.
-				EUTRONIX BLDG. 4TH FLOOR
-				ANYANG  KYEONGGI  431-804
-				US
-
-DC-6F-08   (hex)		Bay Storage Technology
-DC6F08     (base 16)		Bay Storage Technology
-				6200 Stoneridge Mall Road
-				Pleasanton  CA  94588
-				US
-
-90-DA-4E   (hex)		AVANU
-90DA4E     (base 16)		AVANU
-				5205 Prospect Rd
-				San Jose  CA  95129-5034
-				US
-
-28-18-78   (hex)		Microsoft Corporation
-281878     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				Redmond  Washington  98052-6399
-				US
-
-70-38-B4   (hex)		Low Tech Solutions
-7038B4     (base 16)		Low Tech Solutions
-				350 N. Orleans
-				Chicago  IL  60654
-				US
-
-74-5F-00   (hex)		Samsung Semiconductor Inc.
-745F00     (base 16)		Samsung Semiconductor Inc.
-				3566 N. 1St Street
-				San Jose  CA  95134
-				US
-
-E0-C3-F3   (hex)		zte corporation
-E0C3F3     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-5C-20-D0   (hex)		Asoni Communication Co., Ltd.
-5C20D0     (base 16)		Asoni Communication Co., Ltd.
-				 21F-1, No.97, Sec. 4, Chongsin Rd., Sanchong District
-				New Taipei City  Taiwan  24161
-				TW
-
-AC-A4-30   (hex)		Peerless AV
-ACA430     (base 16)		Peerless AV
-				2300 White Oak Circle
-				Aurora  illinios  60502
-				US
-
-84-7A-88   (hex)		HTC Corporation
-847A88     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-A4-D8-56   (hex)		Gimbal, Inc
-A4D856     (base 16)		Gimbal, Inc
-				12526 High Bluff Drive
-				San Diego  Ca  92130
-				US
-
-78-55-17   (hex)		SankyuElectronics
-785517     (base 16)		SankyuElectronics
-				2-30-12
-				Ohta-ku  Tokyo  146-0091
-				JP
-
-B4-7F-5E   (hex)		Foresight Manufacture (S) Pte Ltd
-B47F5E     (base 16)		Foresight Manufacture (S) Pte Ltd
-				1 Sims Lane #04-09
-				  Singapore  387355
-				SG
-
-A0-FE-91   (hex)		AVAT Automation GmbH
-A0FE91     (base 16)		AVAT Automation GmbH
-				Derendinger Strasse 40
-				Tuebingen    72072
-				DE
-
-74-EC-F1   (hex)		Acumen
-74ECF1     (base 16)		Acumen
-				6F, No.207-3, Sec 3, Beisin Rd
-				Sindian Dist  New Taipei City  23143
-				US
-
-58-09-E5   (hex)		Kivic Inc.
-5809E5     (base 16)		Kivic Inc.
-				670 Sampyeong-dong, Bundang-gu
-				  Seongnam City  463-400
-				KR
-
-50-4F-94   (hex)		Loxone Electronics GmbH
-504F94     (base 16)		Loxone Electronics GmbH
-				Falkensteinstraße 6
-				Kollerschlag  Upper Austria  4154
-				AT
-
-60-B1-85   (hex)		ATH system
-60B185     (base 16)		ATH system
-				Osady Lezaku 498
-				Chrast    53851
-				CZ
-
-BC-62-9F   (hex)		Telenet Systems P. Ltd.
-BC629F     (base 16)		Telenet Systems P. Ltd.
-				2 Mani Bhuvan, Cama Road
-				Mumbai  Maharashtra  400086
-				IN
-
-38-0F-E4   (hex)		Dedicated Network Partners Oy
-380FE4     (base 16)		Dedicated Network Partners Oy
-				Linnoitustie 6
-				Espoo  -  02600
-				FI
-
-48-F2-30   (hex)		Ubizcore Co.,LTD
-48F230     (base 16)		Ubizcore Co.,LTD
-				Kranz Techno #1420, Sangdaewon 1-dong
-				Seongnam-Si    462-729
-				KR
-
-78-32-4F   (hex)		Millennium Group, Inc.
-78324F     (base 16)		Millennium Group, Inc.
-				16 Tech Circle
-				Natick  MA  01760
-				US
-
-38-43-69   (hex)		Patrol Products Consortium LLC
-384369     (base 16)		Patrol Products Consortium LLC
-				1128 Narragansett Blvd.
-				Cranston  RI  02905
-				US
-
-44-18-4F   (hex)		Fitview
-44184F     (base 16)		Fitview
-				5615 Scotts Valley Drive, Suite 110
-				Scotts Valley  CA  95066
-				US
-
-84-AC-A4   (hex)		Beijing Novel Super Digital TV Technology Co., Ltd
-84ACA4     (base 16)		Beijing Novel Super Digital TV Technology Co., Ltd
-				4F Tower B Jingmeng Hightech building
-				  Beijing  100085
-				CN
-
-54-1F-D5   (hex)		Advantage Electronics
-541FD5     (base 16)		Advantage Electronics
-				PO Box 407
-				Greenwood  IN  46143
-				US
-
-AC-E9-7F   (hex)		IoT Tech Limited
-ACE97F     (base 16)		IoT Tech Limited
-				20b Lough Road
-				Lisburn  Antrim  BT28 2HA
-				GB
-
-E8-5A-A7   (hex)		LLC Emzior
-E85AA7     (base 16)		LLC Emzior
-				Strelna, Svyazi street, 34, Lit A, of. 234
-				Saint-Petersburg    198515
-				RU
-
-9C-9C-1D   (hex)		Starkey Labs Inc.
-9C9C1D     (base 16)		Starkey Labs Inc.
-				6600 Washington Ave. S.
-				Eden Prairie  MN  55344
-				US
-
-D0-D6-CC   (hex)		Wintop
-D0D6CC     (base 16)		Wintop
-				No. 1301,Xinfei Road
-				Songjiang District  Shanghai  201612
-				CN
-
-58-D0-71   (hex)		BW Broadcast
-58D071     (base 16)		BW Broadcast
-				Unit 27 IO Centre
-				Croydon  Surrey  CR0 4WQ
-				GB
-
-1C-52-D6   (hex)		FLAT DISPLAY TECHNOLOGY CORPORATION
-1C52D6     (base 16)		FLAT DISPLAY TECHNOLOGY CORPORATION
-				No.85, Sec. 1, Fuxing Rd., South Dist
-				Taichung    402
-				TW
-
-D0-DF-B2   (hex)		Genie Networks Limited
-D0DFB2     (base 16)		Genie Networks Limited
-				5F, No.15, Lane 360, Sec., 1, Neihu Road,
-				Taipei    114
-				TW
-
-38-66-45   (hex)		OOSIC Technology CO.,Ltd
-386645     (base 16)		OOSIC Technology CO.,Ltd
-				8F,No 1559, Zuchongzhi Road
-				  Shanghai  201203
-				CN
-
-B8-5A-F7   (hex)		Ouya, Inc
-B85AF7     (base 16)		Ouya, Inc
-				11693 San Vicente Blvd
-				Los Angeles  CA  90049
-				US
-
-34-F6-2D   (hex)		SHARP Corporation
-34F62D     (base 16)		SHARP Corporation
-				1 Takumi-cho, Sakai-ku
-				Sakai City  Osaka  590-8522
-				JP
-
-4C-8F-A5   (hex)		Jastec
-4C8FA5     (base 16)		Jastec
-				Jastec B/D 2F, 92-7 Kumgok-dong, 
-				Boondang-gu,    463-804
-				KR
-
-84-ED-33   (hex)		BBMC Co.,Ltd
-84ED33     (base 16)		BBMC Co.,Ltd
-				#301, DaerungPostTower 3, 182-4,
-				Seoul  None  152-746
-				KR
-
-E8-2E-24   (hex)		Out of the Fog Research LLC
-E82E24     (base 16)		Out of the Fog Research LLC
-				565 Clyde Avenue, Suite 620
-				Mountain View  CA  94043
-				US
-
-80-FA-5B   (hex)		CLEVO CO.
-80FA5B     (base 16)		CLEVO CO.
-				NO. 129, XINGDE ROAD
-				New TAIPEI CITY    241
-				TW
-
-C0-B3-39   (hex)		Comigo Ltd.
-C0B339     (base 16)		Comigo Ltd.
-				15 HaPardes St.
-				  Yarkona  45915
-				IL
-
-20-85-8C   (hex)		Assa
-20858C     (base 16)		Assa
-				Gurogu Guro3dong Ace Twintower 2cha 209
-				  Seoul  152-779
-				KR
-
-60-CD-C5   (hex)		Taiwan Carol Electronics., Ltd
-60CDC5     (base 16)		Taiwan Carol Electronics., Ltd
-				No.202, Tung Kuang Road
-				Taichung  Taiwan  40151
-				TW
-
-D8-18-2B   (hex)		Conti Temic Microelectronic GmbH
-D8182B     (base 16)		Conti Temic Microelectronic GmbH
-				Sieboldstraße 19
-				Nuremberg  Bavaria  90411
-				DE
-
-80-CF-41   (hex)		Lenovo Mobile Communication Technology Ltd.
-80CF41     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone,
-				Xiamen  Fujian  361006
-				US
-
-9C-E1-D6   (hex)		Junger Audio-Studiotechnik GmbH
-9CE1D6     (base 16)		Junger Audio-Studiotechnik GmbH
-				Justus-von-Liebig-Strasse 7
-				12489 Berlin    
-				US
-
-48-B9-C2   (hex)		Teletics Inc.
-48B9C2     (base 16)		Teletics Inc.
-				103 Edgevalley Close NW
-				Calgary  AB  T3A 5E9
-				CA
-
-58-D6-D3   (hex)		Dairy Cheq Inc
-58D6D3     (base 16)		Dairy Cheq Inc
-				60 Baffin Place, Unit 5
-				Waterloo  Ontario  N2V 1Z7
-				CA
-
-04-6E-49   (hex)		TaiYear Electronic Technology (Suzhou) Co., Ltd
-046E49     (base 16)		TaiYear Electronic Technology (Suzhou) Co., Ltd
-				12-B101 Creative Industrial Park ,No. 328,Xinghu Street ,Suzhou Industrial Park
-				SuZhou  JiangSu  215000
-				CN
-
-2C-3B-FD   (hex)		Netstor Technology Co., Ltd.
-2C3BFD     (base 16)		Netstor Technology Co., Ltd.
-				6F, No. 1, Alley 16, Lane 235, Baoqiao Rd., Xindian District
-				New Taipei City    23145
-				US
-
-AC-3C-B4   (hex)		Nilan A/S
-AC3CB4     (base 16)		Nilan A/S
-				Nilanvej 2
-				Hedensted  Vejle amt  8722
-				DK
-
-B4-9D-B4   (hex)		Axion Technologies Inc.
-B49DB4     (base 16)		Axion Technologies Inc.
-				105-1203, 70, Jingeononam-ro
-				Namyangju  Gyeonggi-do  472-859
-				KR
-
-AC-E8-7E   (hex)		Bytemark Computer Consulting Ltd
-ACE87E     (base 16)		Bytemark Computer Consulting Ltd
-				Unit 2
-				Opus Avenue  York YO26 6BL  
-				GB
-
-80-07-A2   (hex)		Esson Technology Inc.
-8007A2     (base 16)		Esson Technology Inc.
-				Room A2, 5F Longsheng Commericial Building,
-				Baoan District  ShenZhen  518000
-				CN
-
-C0-A0-E2   (hex)		Eden Innovations
-C0A0E2     (base 16)		Eden Innovations
-				ZAC
-				Eguilles  PACA  13510
-				FR
-
-08-0F-FA   (hex)		KSP INC.
-080FFA     (base 16)		KSP INC.
-				RM 501, 138 Kwangdeokdae-ro
-				Danwon-gu, Ansan-si  Gyeonggi-do  425906
-				KR
-
-E8-AB-FA   (hex)		Shenzhen Reecam Tech.Ltd.
-E8ABFA     (base 16)		Shenzhen Reecam Tech.Ltd.
-				Room 03D-1 , North Wing Of 3 rd Floor, Block 1 , Vision Shenzhen Business Park  
-				Nanshan District, Shenzhen  Guangdong  518052
-				CN
-
-DC-B0-58   (hex)		Bürkert Werke GmbH
-DCB058     (base 16)		Bürkert Werke GmbH
-				Christian-Bürkert-Straße 13-17
-				Ingelfingen  Baden-Württemberg  74653
-				DE
-
-6C-5A-34   (hex)		Shenzhen Haitianxiong Electronic Co., Ltd.
-6C5A34     (base 16)		Shenzhen Haitianxiong Electronic Co., Ltd.
-				Rm.407, Block A, University-town Business Park, Taoyuan street, Lishan Road
-				Shenzhen  Guangdong  518055
-				CN
-
-90-38-DF   (hex)		Changzhou Tiannengbo System Co. Ltd.
-9038DF     (base 16)		Changzhou Tiannengbo System Co. Ltd.
-				#9 East Hehai Road, RM 306
-				Changzhou  Jiangsu Province  213000
-				CN
-
-18-52-53   (hex)		Pixord Corporation
-185253     (base 16)		Pixord Corporation
-				6F, No 12, Innovation 1st Road
-				Hsinchu    30076
-				TW
-
-68-3B-1E   (hex)		Countwise LTD
-683B1E     (base 16)		Countwise LTD
-				1149 Sawgrass Corporate Parkway
-				Sunrise  Florida  33323
-				US
-
-AC-A2-2C   (hex)		Baycity Technologies Ltd
-ACA22C     (base 16)		Baycity Technologies Ltd
-				10 Nazareth Ave
-				Christchurch  Canterbury  8024
-				NZ
-
-30-32-94   (hex)		W-IE-NE-R Plein & Baus GmbH
-303294     (base 16)		W-IE-NE-R Plein & Baus GmbH
-				Muellersbaum 20
-				Burscheid  NRW  51399
-				US
-
-7C-82-2D   (hex)		Nortec
-7C822D     (base 16)		Nortec
-				2740 Fenton Rd
-				Ottawa  ON  K1T3T7
-				US
-
-10-FB-F0   (hex)		KangSheng LTD.
-10FBF0     (base 16)		KangSheng LTD.
-				2F., No.11, 
-				New Taipei City    24889
-				TW
-
-6C-9A-C9   (hex)		Valentine Research, Inc.
-6C9AC9     (base 16)		Valentine Research, Inc.
-				10280 Alliance Rd
-				Cincinnati  OH  45242
-				US
-
-AC-8D-14   (hex)		Smartrove Inc
-AC8D14     (base 16)		Smartrove Inc
-				19630 Allendale Ave.
-				Saratoga  CA  95070
-				US
-
-20-91-D9   (hex)		I'M SPA
-2091D9     (base 16)		I'M SPA
-				VIA BIRON 102/3
-				MONTEVIALE  VICENZA  36050
-				IT
-
-AC-72-36   (hex)		Lexking Technology Co., Ltd.
-AC7236     (base 16)		Lexking Technology Co., Ltd.
-				2F, No. 3, Baoqiang Road,
-				New Taipei City  Taiwan  231111
-				TW
-
-3C-D7-DA   (hex)		SK Mtek microelectronics(shenzhen)limited
-3CD7DA     (base 16)		SK Mtek microelectronics(shenzhen)limited
-				12F, Micro-profit Building,South 6 road
-				Shenzhen  Guangdong  518057
-				CN
-
-04-F8-C2   (hex)		Flaircomm Microelectronics, Inc.
-04F8C2     (base 16)		Flaircomm Microelectronics, Inc.
-				7F,Guomai Building,116 East JiangBin Ave
-				Fuzhou  Fujian  350015
-				CN
-
-14-1B-F0   (hex)		Intellimedia Systems Ltd
-141BF0     (base 16)		Intellimedia Systems Ltd
-				Sandhill Barn
-				Washington  West Sussex  RH204TD
-				GB
-
-58-87-E2   (hex)		Shenzhen Coship Electronics Co., Ltd.
-5887E2     (base 16)		Shenzhen Coship Electronics Co., Ltd.
-				Rainbow Bldg., North, Hi-Tech Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-68-69-F2   (hex)		ComAp s.r.o.
-6869F2     (base 16)		ComAp s.r.o.
-				Kundratka 17
-				Prague    18000
-				CZ
-
-B8-5A-FE   (hex)		Handaer Communication Technology (Beijing) Co., Ltd
-B85AFE     (base 16)		Handaer Communication Technology (Beijing) Co., Ltd
-				Jiancaicheng West Rd.65,Xisanqi,
-				  Beijing  100096
-				CN
-
-F4-6D-E2   (hex)		zte corporation
-F46DE2     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F0-AC-A4   (hex)		HBC-radiomatic
-F0ACA4     (base 16)		HBC-radiomatic
-				Haller Str. 45-53
-				Crailsheim  Baden Wurttemberg  74564
-				DE
-
-60-74-8D   (hex)		Atmaca Elektronik
-60748D     (base 16)		Atmaca Elektronik
-				Namik Kemal Mahallesi 177, Sokak No:2
-				Istanbul  Esenyurt  34510
-				TR
-
-B8-B7-D7   (hex)		2GIG Technologies
-B8B7D7     (base 16)		2GIG Technologies
-				2961 West Maple Loop Drive
-				Lehi  Utah  84043
-				US
-
-80-82-87   (hex)		ATCOM Technology Co.Ltd.
-808287     (base 16)		ATCOM Technology Co.Ltd.
-				A-2F, #3 , Crown industry buildings
-				Shenzhen  Guang Dong  518040
-				US
-
-28-A1-86   (hex)		enblink
-28A186     (base 16)		enblink
-				Room 212 Building 105-1 SNU
-				  SEOUL  151-742
-				KR
-
-50-39-55   (hex)		Cisco SPVTG
-503955     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-78-D1-29   (hex)		Vicos
-78D129     (base 16)		Vicos
-				Eugenmuellerstrasse 14
-				Salzburg  Salzburg  5020
-				AT
-
-84-DF-0C   (hex)		NET2GRID BV
-84DF0C     (base 16)		NET2GRID BV
-				Krullelaan 28
-				Zeist  Utrecht  3701 TD
-				NL
-
-38-8E-E7   (hex)		Fanhattan LLC
-388EE7     (base 16)		Fanhattan LLC
-				489 S El Camino Real
-				San Mateo  CA  94402
-				US
-
-5C-D4-1B   (hex)		UCZOON Technology Co., LTD
-5CD41B     (base 16)		UCZOON Technology Co., LTD
-				9 th Floor,Pan Gu Plaza,No.27 North  4 th Ring,
-				Beijing  Beijing  100029
-				CN
-
-CC-E7-98   (hex)		My Social Stuff
-CCE798     (base 16)		My Social Stuff
-				Sint-Hubertussyraat 65
-				Berchem    2600
-				BE
-
-A0-36-F0   (hex)		Comprehensive Power
-A036F0     (base 16)		Comprehensive Power
-				420 Northboro Road Central
-				Marlborough  MA  01752
-				US
-
-18-0C-AC   (hex)		CANON INC.
-180CAC     (base 16)		CANON INC.
-				3-30-2
-				Ohta-Ku  Tokyo  146-8501
-				JP
-
-78-AB-60   (hex)		ABB Australia
-78AB60     (base 16)		ABB Australia
-				PMB 88
-				Berrimah  NT  0828
-				AU
-
-84-82-F4   (hex)		Beijing Huasun Unicreate Technology Co., Ltd
-8482F4     (base 16)		Beijing Huasun Unicreate Technology Co., Ltd
-				North Region 6th Floor, Tower A, Huizhi Mansion,
-				  Beijing  100085
-				CN
-
-00-DB-1E   (hex)		Albedo Telecom SL
-00DB1E     (base 16)		Albedo Telecom SL
-				Joan d'Austria 112
-				Barcelona    08018
-				ES
-
-18-86-3A   (hex)		DIGITAL ART SYSTEM
-18863A     (base 16)		DIGITAL ART SYSTEM
-				838 rue de l'Aiguelongue
-				Montpellier  Etat  34090
-				FR
-
-0C-DC-CC   (hex)		Inala Technologies
-0CDCCC     (base 16)		Inala Technologies
-				Inala House,  557 15th Road
-				Midrand  Gauteng  1685
-				ZA
-
-98-29-1D   (hex)		Jaguar de Mexico, SA de CV
-98291D     (base 16)		Jaguar de Mexico, SA de CV
-				Calle Tabla Grande No.2
-				Jilotzongo  Estado de Mexico  54570
-				MX
-
-34-AF-2C   (hex)		Nintendo Co., Ltd.
-34AF2C     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-7C-D9-FE   (hex)		New Cosmos Electric Co., Ltd.
-7CD9FE     (base 16)		New Cosmos Electric Co., Ltd.
-				2-5-4 Mitsuyanaka
-				Osaka  Osaka-fu  532-0036
-				JP
-
-E4-90-69   (hex)		Rockwell Automation
-E49069     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-CC-C1-04   (hex)		Applied Technical Systems
-CCC104     (base 16)		Applied Technical Systems
-				P.O. Box 5705
-				Shreveport  LA  71135
-				US
-
-60-45-5E   (hex)		Liptel s.r.o.
-60455E     (base 16)		Liptel s.r.o.
-				Hradna 338
-				Liptovsky Hradok    03301
-				SK
-
-D8-06-D1   (hex)		Honeywell Fire System (Shanghai) Co,. Ltd.
-D806D1     (base 16)		Honeywell Fire System (Shanghai) Co,. Ltd.
-				No. 430, Li Bing Road, Pudong
-				Shanghai  Shanghai  201203
-				CN
-
-64-76-57   (hex)		Innovative Security Designs
-647657     (base 16)		Innovative Security Designs
-				18 Technology Drive
-				Irvine  CA  92618
-				US
-
-90-70-25   (hex)		Garea Microsys Co.,Ltd.
-907025     (base 16)		Garea Microsys Co.,Ltd.
-				4th Floor, Building 2, Software Park
-				Suzhou  Jiangsu  215163
-				CN
-
-10-D1-DC   (hex)		INSTAR Deutschland GmbH
-10D1DC     (base 16)		INSTAR Deutschland GmbH
-				Auf der Hostert 17
-				Huenstetten Bechtheim  Hessen  65510
-				DE
-
-34-99-6F   (hex)		VPI Engineering
-34996F     (base 16)		VPI Engineering
-				11814 S. Election Rd., Suite 200
-				Draper  UT  84020
-				US
-
-94-4A-09   (hex)		BitWise Controls
-944A09     (base 16)		BitWise Controls
-				98 Inverness Dr East
-				Englewood  CO  80112
-				US
-
-BC-28-D6   (hex)		Rowley Associates Limited
-BC28D6     (base 16)		Rowley Associates Limited
-				Suite 4B/4C Drake House
-				Dursley  Gloucestershire  GL11 4HH
-				GB
-
-10-BD-18   (hex)		Cisco Systems, Inc
-10BD18     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-58-69-F9   (hex)		Fusion Transactive Ltd.
-5869F9     (base 16)		Fusion Transactive Ltd.
-				PO Box 68281
-				Auckland    1145
-				NZ
-
-D4-1E-35   (hex)		TOHO Electronics INC.
-D41E35     (base 16)		TOHO Electronics INC.
-				1-13-21 Tanashioda, Chuo-Ku
-				Sagamihara-City  Kanagawa  252-0245
-				JP
-
-4C-72-B9   (hex)		PEGATRON CORPORATION
-4C72B9     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-2C-ED-EB   (hex)		Alpheus Digital Company Limited
-2CEDEB     (base 16)		Alpheus Digital Company Limited
-				Room 2, 23/F Tak King Industrial building
-				Hong Kong    852
-				HK
-
-0C-D9-96   (hex)		Cisco Systems, Inc
-0CD996     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-30-F3-3A   (hex)		+plugg srl
-30F33A     (base 16)		+plugg srl
-				via giovanni ventura, 5
-				Milano  MI  20134
-				IT
-
-0C-57-EB   (hex)		Mueller Systems
-0C57EB     (base 16)		Mueller Systems
-				48 Leona Drive, Suite C
-				Middleboro  MA  02346
-				US
-
-74-53-27   (hex)		COMMSEN CO., LIMITED
-745327     (base 16)		COMMSEN CO., LIMITED
-				12/F., San Toi Building,139 Connaught Road Central 
-				    999077
-				HK
-
-D0-8C-FF   (hex)		UPWIS AB
-D08CFF     (base 16)		UPWIS AB
-				Box 3000
-				Uppsala  Uppsala  75003
-				SE
-
-68-CE-4E   (hex)		L-3 Communications Infrared Products
-68CE4E     (base 16)		L-3 Communications Infrared Products
-				3414 Herrmann Drive
-				Garland  TX  75043
-				US
-
-68-D1-FD   (hex)		Shenzhen Trimax Technology Co.,Ltd
-68D1FD     (base 16)		Shenzhen Trimax Technology Co.,Ltd
-				Room 1016, 10F, Max Smart Commercial Center,
-				Shenzhen  Guangdong  518133
-				CN
-
-9C-06-6E   (hex)		Hytera Communications Corporation Limited
-9C066E     (base 16)		Hytera Communications Corporation Limited
-				Hytera Tower, Hi-Tech Industrial Park North, Nanshan District
-				Shenzhen  Guangdong  518057
-				US
-
-3C-EA-FB   (hex)		NSE AG
-3CEAFB     (base 16)		NSE AG
-				Bremgarterstrasse 54
-				Wohlen  AG  5610
-				CH
-
-8C-C7-AA   (hex)		Radinet Communications Inc.
-8CC7AA     (base 16)		Radinet Communications Inc.
-				7F-2, No.229, Fuxing 2nd Rd, Zhubei, 30271
-				Hsinchu  Taiwan  30271
-				US
-
-40-33-6C   (hex)		Godrej & Boyce Mfg. co. ltd
-40336C     (base 16)		Godrej & Boyce Mfg. co. ltd
-				PSS TECH CELL, 2ND FLOOR, PLANT 17, SECURITY SOLUTIONS DIVISION
-				MUMBAI  MAHARASHTRA  400079
-				IN
-
-F8-A0-3D   (hex)		Dinstar Technologies Co., Ltd.
-F8A03D     (base 16)		Dinstar Technologies Co., Ltd.
-				Floor 6, Guoxing Building
-				shenzhen  Guangdong  518052
-				US
-
-2C-D4-44   (hex)		FUJITSU LIMITED
-2CD444     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-BC-81-1F   (hex)		Ingate Systems
-BC811F     (base 16)		Ingate Systems
-				Rissneleden 45
-				Sundbyberg    17444
-				SE
-
-D8-67-D9   (hex)		Cisco Systems, Inc
-D867D9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-E7-31   (hex)		Nokia Corporation
-A4E731     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-98-A7-B0   (hex)		MCST ZAO
-98A7B0     (base 16)		MCST ZAO
-				35/50, Nizhnyaya Krasnoselskaya St.,
-				Moscow    105666
-				RU
-
-4C-06-8A   (hex)		Basler Electric Company
-4C068A     (base 16)		Basler Electric Company
-				12570 State Route 143
-				Highland  Illinois  62249
-				US
-
-E8-56-D6   (hex)		NCTech Ltd
-E856D6     (base 16)		NCTech Ltd
-				20-22 Braid Road
-				Edinburgh    EH10 6AD
-				GB
-
-C0-81-70   (hex)		Effigis GeoSolutions
-C08170     (base 16)		Effigis GeoSolutions
-				4101, rue Molson
-				Montreal  Quebec  H1Y3L1
-				CA
-
-64-22-16   (hex)		Shandong Taixin Electronic co.,Ltd
-642216     (base 16)		Shandong Taixin Electronic co.,Ltd
-				FL.6,Haichen Building
-				Jinan  Shandong  250010
-				CN
-
-44-38-39   (hex)		Cumulus Networks, inc
-443839     (base 16)		Cumulus Networks, inc
-				650 Castro Street, suite 120-245
-				Mountain View  CA  94041
-				US
-
-04-8B-42   (hex)		Skspruce Technologies
-048B42     (base 16)		Skspruce Technologies
-				A1, Tianfu Software Park, 1129 Century City Road
-				High-tech Zone, Chengdu  Sichuan  610041
-				CN
-
-50-76-A6   (hex)		Ecil Informatica Ind. Com. Ltda
-5076A6     (base 16)		Ecil Informatica Ind. Com. Ltda
-				Av. Araguacema, 388
-				Barueri  São Paulo  06460-070
-				BR
-
-A4-4C-11   (hex)		Cisco Systems, Inc
-A44C11     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-60-84-3B   (hex)		Soladigm, Inc.
-60843B     (base 16)		Soladigm, Inc.
-				195. S Milpitas Blvd
-				Milpitas  CA  95035
-				US
-
-AC-4B-C8   (hex)		Juniper Networks
-AC4BC8     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-20-9B-A5   (hex)		JIAXING GLEAD Electronics Co.,Ltd
-209BA5     (base 16)		JIAXING GLEAD Electronics Co.,Ltd
-				No.66 Zhengyuan Road in Tanghu Industrial Garden 
-				Jiaxing  Zhejiang  314003
-				CN
-
-A0-F4-50   (hex)		HTC Corporation
-A0F450     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-60-89-B1   (hex)		Key Digital Systems
-6089B1     (base 16)		Key Digital Systems
-				521 E 3rd Street
-				Mount Vernon  NY  10553
-				US
-
-44-D1-5E   (hex)		Shanghai Kingto Information Technology Ltd
-44D15E     (base 16)		Shanghai Kingto Information Technology Ltd
-				No.738 Guangji RD.3F shanghai.china
-				  shanghai  200434
-				CN
-
-00-36-FE   (hex)		SuperVision
-0036FE     (base 16)		SuperVision
-				po box 3472
-				palos verdes  CA  90274
-				US
-
-70-9E-86   (hex)		X6D Limited
-709E86     (base 16)		X6D Limited
-				199, Arch. Makariou III
-				Limassol    3030
-				CY
-
-A0-F4-19   (hex)		Nokia Corporation
-A0F419     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-1C-97-3D   (hex)		PRICOM Design
-1C973D     (base 16)		PRICOM Design
-				2755 Slocum Rd
-				Peyton  CO  80831
-				US
-
-BC-02-00   (hex)		Stewart Audio
-BC0200     (base 16)		Stewart Audio
-				100 West El Camino Real
-				Mountain View  CA  94041
-				US
-
-48-91-53   (hex)		Weinmann Geräte für Medizin GmbH + Co. KG
-489153     (base 16)		Weinmann Geräte für Medizin GmbH + Co. KG
-				Kronsaalsweg 40
-				Hamburg    D-22525
-				DE
-
-AC-94-03   (hex)		Envision Peripherals Inc
-AC9403     (base 16)		Envision Peripherals Inc
-				47490 Seabridge Dr
-				Fremont  California  94538
-				US
-
-68-D9-25   (hex)		ProSys Development Services
-68D925     (base 16)		ProSys Development Services
-				Mill House
-				Mitcham  Surrey  CR4 4HY
-				GB
-
-84-8D-84   (hex)		Rajant Corporation
-848D84     (base 16)		Rajant Corporation
-				400 East King Street
-				Malvern  PA  19355
-				US
-
-54-46-6B   (hex)		Shenzhen CZTIC Electronic Technology Co., Ltd  
-54466B     (base 16)		Shenzhen CZTIC Electronic Technology Co., Ltd  
-				Xinghe Building, Zhongxin Road, Shajing Town, Baoan
-				SHENZHEN  GUANGDONG  518104
-				CN
-
-44-B3-82   (hex)		Kuang-chi Institute of Advanced Technology
-44B382     (base 16)		Kuang-chi Institute of Advanced Technology
-				Software building, Gaoxingzhong 1st Road,
-				Shenzhen  Guangdong  518057
-				CN
-
-60-B9-33   (hex)		Deutron Electronics Corp.
-60B933     (base 16)		Deutron Electronics Corp.
-				8F, 68, Sec. 3, Nanking E. Rd.
-				Taipei  Taiwan  104
-				TW
-
-00-43-FF   (hex)		KETRON S.R.L.
-0043FF     (base 16)		KETRON S.R.L.
-				Via Giuseppe Taliercio n. 7
-				Ancona    60131
-				IT
-
-7C-AC-B2   (hex)		Bosch Software Innovations GmbH
-7CACB2     (base 16)		Bosch Software Innovations GmbH
-				Ziegelei 7
-				Immenstaad  BadenWuertemberg  88090
-				DE
-
-18-D6-6A   (hex)		Inmarsat
-18D66A     (base 16)		Inmarsat
-				99 City Road
-				London    EC1Y 1AX
-				GB
-
-1C-7C-45   (hex)		Vitek Industrial Video Products, Inc.
-1C7C45     (base 16)		Vitek Industrial Video Products, Inc.
-				28492 Constellation Rd
-				Valencia  CA  91355
-				US
-
-3C-38-88   (hex)		ConnectQuest, llc
-3C3888     (base 16)		ConnectQuest, llc
-				P.O. Box 425
-				West Simsbury  Connecticut  06092
-				US
-
-48-D7-FF   (hex)		BLANKOM Antennentechnik GmbH
-48D7FF     (base 16)		BLANKOM Antennentechnik GmbH
-				Hermann-Petersilge Str. 1
-				Bad Blankenburg  TH  07422
-				DE
-
-C4-71-30   (hex)		Fon Technology S.L.
-C47130     (base 16)		Fon Technology S.L.
-				Avda. Bruselas, n. 7, Planta 3, Alcobendas
-				  Madrid  28100
-				ES
-
-D8-33-7F   (hex)		Office FA.com Co.,Ltd.
-D8337F     (base 16)		Office FA.com Co.,Ltd.
-				293-21
-				Oyama-shi  Tochigi  329-0216
-				JP
-
-00-36-F8   (hex)		Conti Temic microelectronic GmbH
-0036F8     (base 16)		Conti Temic microelectronic GmbH
-				Dornierstraße 1
-				Markdorf    88677
-				DE
-
-A4-F7-D0   (hex)		LAN Accessories Co., Ltd.
-A4F7D0     (base 16)		LAN Accessories Co., Ltd.
-				8F-1, No. 159, Sec. 1 Hsin Tai Wu Road,
-				New Taipei City,    221
-				US
-
-C8-56-45   (hex)		Intermas France
-C85645     (base 16)		Intermas France
-				Rue de l'industrie
-				Beauvais  Oise  60000
-				FR
-
-44-34-8F   (hex)		MXT INDUSTRIAL LTDA
-44348F     (base 16)		MXT INDUSTRIAL LTDA
-				RODOVIA BR 381, KM 490, JARDIM DAS ALTEROSAS
-				BETIM  MINAS GERAIS  32670790
-				BR
-
-D4-EC-0C   (hex)		Harley-Davidson Motor Company
-D4EC0C     (base 16)		Harley-Davidson Motor Company
-				3700 W. Juneau Avenue
-				Milwaukee  Wisconsin  53208
-				US
-
-28-E6-08   (hex)		Tokheim
-28E608     (base 16)		Tokheim
-				Industrieweg 5
-				Bladel  NBr  5531 AD
-				NL
-
-74-FF-7D   (hex)		Wren Sound Systems, LLC
-74FF7D     (base 16)		Wren Sound Systems, LLC
-				169 Gateshead Way
-				Phoenixville  PA  19460
-				US
-
-AC-F0-B2   (hex)		Becker Electronics Taiwan Ltd.
-ACF0B2     (base 16)		Becker Electronics Taiwan Ltd.
-				No.32, Lane 30, Long Yuan Rd.
-				Long-Tan  Taoyuan  32544
-				TW
-
-54-2A-9C   (hex)		LSY Defense, LLC.
-542A9C     (base 16)		LSY Defense, LLC.
-				4175 Westport Rd.
-				Louisville  Kentucky  40207
-				US
-
-50-4A-5E   (hex)		Masimo Corporation
-504A5E     (base 16)		Masimo Corporation
-				40 Parker
-				Irvine  California  92618
-				US
-
-6C-A9-6F   (hex)		TransPacket AS
-6CA96F     (base 16)		TransPacket AS
-				Drammensveien 134
-				Oslo    0277
-				NO
-
-AC-01-42   (hex)		Uriel Technologies SIA
-AC0142     (base 16)		Uriel Technologies SIA
-				Dzerbenes iela 14
-				Riga    LV-1006
-				LV
-
-C4-7B-A3   (hex)		NAVIS Inc.
-C47BA3     (base 16)		NAVIS Inc.
-				Dmitrovskoe shosse 157
-				Moscow    127411
-				RU
-
-F4-48-48   (hex)		Amscreen Group Ltd
-F44848     (base 16)		Amscreen Group Ltd
-				Paragon Business Park
-				Bolton  Lancs  BL6 6HG
-				GB
-
-50-D2-74   (hex)		Steffes Corporation
-50D274     (base 16)		Steffes Corporation
-				3050 Highway 22 North
-				Dickinson  ND  58601
-				US
-
-C8-F7-04   (hex)		Building Block Video
-C8F704     (base 16)		Building Block Video
-				17 APex Park
-				Hailsham  East Sussex  BN27 2JU
-				GB
-
-50-8A-42   (hex)		Uptmate Technology Co., LTD
-508A42     (base 16)		Uptmate Technology Co., LTD
-				6F., No.5, Jian 1st Rd.,Zhonghe Dist., 
-				New Taipei City    23558
-				TW
-
-BC-EA-2B   (hex)		CityCom GmbH
-BCEA2B     (base 16)		CityCom GmbH
-				Am Kroit 25
-				Amerang  Bavaria  83123
-				DE
-
-0C-A1-38   (hex)		Blinq Wireless Inc.
-0CA138     (base 16)		Blinq Wireless Inc.
-				400 MARCH RD UNIT 240
-				KANATA  ON  K2K3H4
-				CA
-
-5C-6F-4F   (hex)		S.A. SISTEL
-5C6F4F     (base 16)		S.A. SISTEL
-				C/SOLSONES, 87
-				CASTELLAR DEL VALLES  BARCELONA  08211
-				ES
-
-90-1B-0E   (hex)		Fujitsu Technology Solutions GmbH
-901B0E     (base 16)		Fujitsu Technology Solutions GmbH
-				Buergermeister-Ulrich-Strasse 100
-				Augsburg  Bayern  86199
-				DE
-
-F8-50-63   (hex)		Verathon
-F85063     (base 16)		Verathon
-				20001 N Creek Pkwy
-				Bothell  WA  98011
-				US
-
-2C-36-F8   (hex)		Cisco Systems, Inc
-2C36F8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-84-57-87   (hex)		DVR C&C Co., Ltd.
-845787     (base 16)		DVR C&C Co., Ltd.
-				7F 720 Namkwang Centlex Bldg, Cheongcheon-dong, Bupyeong-gu
-				Incheon    403-030
-				KR
-
-58-08-FA   (hex)		Fiber Optic & telecommunication INC.
-5808FA     (base 16)		Fiber Optic & telecommunication INC.
-				161-4 Kumjeong-Dong,
-				Kunpo-city  Gyeonggi-Do  435-824
-				KR
-
-AC-3D-05   (hex)		Instorescreen Aisa
-AC3D05     (base 16)		Instorescreen Aisa
-				Room 207, North Bldg,No 28
-				Shanghai    200237
-				CN
-
-28-60-94   (hex)		CAPELEC
-286094     (base 16)		CAPELEC
-				1130 rue des Marels
-				Montpellier  Hérault  34000
-				FR
-
-A4-56-30   (hex)		Cisco Systems, Inc
-A45630     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C4-3C-3C   (hex)		CYBELEC SA
-C43C3C     (base 16)		CYBELEC SA
-				Rue des Uttins 27
-				Yverdon-les-Bains    1401
-				CH
-
-B8-26-D4   (hex)		Furukawa Industrial S.A. Produtos Elétricos
-B826D4     (base 16)		Furukawa Industrial S.A. Produtos Elétricos
-				Rua Hasdrubal Bellegard, 820
-				  Parana  81460-120
-				BR
-
-B8-74-47   (hex)		Convergence Technologies
-B87447     (base 16)		Convergence Technologies
-				16W215 83rd Street Suite D
-				Burr Ridge  IL  60527
-				US
-
-74-63-DF   (hex)		VTS GmbH
-7463DF     (base 16)		VTS GmbH
-				Am Königholz Ost 4
-				Eglhausen  Bavaria  85411
-				DE
-
-BC-12-5E   (hex)		Beijing  WisVideo  INC.
-BC125E     (base 16)		Beijing  WisVideo  INC.
-				RM 3A08 Technology&Fortune Center A block No.8 Xue Qing Road,Haidian District , 
-				  Beijing  100192
-				CN
-
-14-E4-EC   (hex)		mLogic LLC
-14E4EC     (base 16)		mLogic LLC
-				8440 Warner Drive
-				Culver City  CA  90232
-				US
-
-38-28-EA   (hex)		Fujian Netcom Technology Co., LTD
-3828EA     (base 16)		Fujian Netcom Technology Co., LTD
-				Netcom Technology Building, B Zone:Tongpan Software Park, 
-				Fuzhou  Fujian  350003
-				CN
-
-D0-1A-A7   (hex)		UniPrint
-D01AA7     (base 16)		UniPrint
-				Unit 309, 1 Eva Road
-				Toronto  Ontario  M9C 4Z5
-				CA
-
-84-6A-ED   (hex)		Wireless Tsukamoto.,co.LTD
-846AED     (base 16)		Wireless Tsukamoto.,co.LTD
-				16-21 1chome,Isoyama
-				Suzuka  Mie-pref  5100256
-				JP
-
-E0-5D-A6   (hex)		Detlef Fink Elektronik & Softwareentwicklung
-E05DA6     (base 16)		Detlef Fink Elektronik & Softwareentwicklung
-				Brühlstraße 13
-				Mössingen    72116
-				DE
-
-04-5A-95   (hex)		Nokia Corporation
-045A95     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-04-F4-BC   (hex)		Xena Networks
-04F4BC     (base 16)		Xena Networks
-				Graabroedretorv 6, 3. sal
-				København  Danmark  1154
-				DK
-
-80-DB-31   (hex)		Power Quotient International Co., Ltd.
-80DB31     (base 16)		Power Quotient International Co., Ltd.
-				8F., No. 49, Sec. 4, Jhongyang Rd., Tu Cheng Dist.,
-				New Taipei City    23675
-				TW
-
-1C-51-B5   (hex)		Techaya LTD
-1C51B5     (base 16)		Techaya LTD
-				P.O.B 1500
-				Pardes Hanna    3700
-				IL
-
-6C-3A-84   (hex)		Shenzhen Aero-Startech. Co.Ltd
-6C3A84     (base 16)		Shenzhen Aero-Startech. Co.Ltd
-				F3-4, Building3,Zhongyuntai Industrial Park.Shiyan Town.,
-				Shenzhen  Guangdong  518108
-				CN
-
-00-D6-32   (hex)		GE Energy
-00D632     (base 16)		GE Energy
-				Lissue Industrial Estate East
-				Lisburn  Co Antrim  BT28 2RE
-				GB
-
-0C-9E-91   (hex)		Sankosha Corporation
-0C9E91     (base 16)		Sankosha Corporation
-				1-12, Miyashimo
-				Sagamihara-shi  Kanagawa-ken  252-0212
-				JP
-
-38-3F-10   (hex)		DBL Technology Ltd.
-383F10     (base 16)		DBL Technology Ltd.
-				Unit 42, 18/F., Block D, Wah Lok Industrial Center
-				    
-				HK
-
-AC-D3-64   (hex)		ABB SPA, ABB SACE DIV.
-ACD364     (base 16)		ABB SPA, ABB SACE DIV.
-				V.LE DELL'INDUSTRIA, 18
-				VITTUONE  MI  20010
-				IT
-
-2C-EE-26   (hex)		Petroleum Geo-Services
-2CEE26     (base 16)		Petroleum Geo-Services
-				12555 Harris Branch Pkwy
-				Austin  TX  78653
-				US
-
-C8-F9-F9   (hex)		Cisco Systems, Inc
-C8F9F9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-EF-52   (hex)		Telewave Co., Ltd.
-A4EF52     (base 16)		Telewave Co., Ltd.
-				A-203, SK Twintech Tower
-				Seoul    153-773
-				KR
-
-A8-26-D9   (hex)		HTC Corporation
-A826D9     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-28-94-0F   (hex)		Cisco Systems, Inc
-28940F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B8-DA-F7   (hex)		Advanced Photonics, Inc.
-B8DAF7     (base 16)		Advanced Photonics, Inc.
-				the University of Tokyo, CCR507
-				Meguro-ku  Tokyo  153-8904
-				JP
-
-14-3A-EA   (hex)		Dynapower Company LLC
-143AEA     (base 16)		Dynapower Company LLC
-				85 Meadowland Drive
-				South Burlington  VT  05403
-				US
-
-A0-86-EC   (hex)		SAEHAN HITEC Co., Ltd
-A086EC     (base 16)		SAEHAN HITEC Co., Ltd
-				16-3, Yongsu-ri, Chowol-eup
-				Gwangju-si, Gyeonggi-do    464-865
-				KR
-
-94-2E-17   (hex)		Schneider Electric Canada Inc
-942E17     (base 16)		Schneider Electric Canada Inc
-				1400 industrielle street
-				La Prairie  Quebec  J5R 2E5
-				CA
-
-C4-60-44   (hex)		Everex Electronics Limited
-C46044     (base 16)		Everex Electronics Limited
-				Unit 3, Block A, 16/F
-				    
-				HK
-
-98-FE-03   (hex)		Ericsson - North America
-98FE03     (base 16)		Ericsson - North America
-				6300 Legacy Drive
-				Plano  TX  75024
-				US
-
-E0-3C-5B   (hex)		SHENZHEN JIAXINJIE ELECTRON CO.,LTD
-E03C5B     (base 16)		SHENZHEN JIAXINJIE ELECTRON CO.,LTD
-				Shenzhen Jiaxinjie Security Industrial park,No 6 Xin He Xin xing Industrial Park, Fuyong Town,Bao'an District 
-				SHENZHEN  GUANGDONG  518103
-				CN
-
-CC-94-4A   (hex)		Pfeiffer Vacuum GmbH
-CC944A     (base 16)		Pfeiffer Vacuum GmbH
-				Berliner Str. 43
-				Asslar  Hessen  35614
-				DE
-
-0C-85-25   (hex)		Cisco Systems, Inc
-0C8525     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B4-D8-A9   (hex)		BetterBots
-B4D8A9     (base 16)		BetterBots
-				1600 Wilson Way SE, Ste. 9
-				Smyrna  GA  30082
-				US
-
-7C-C8-D7   (hex)		Damalisk
-7CC8D7     (base 16)		Damalisk
-				Coriolis 2 
-				ECUISSES    71210
-				FR
-
-9C-B0-08   (hex)		Ubiquitous Computing Technology Corporation
-9CB008     (base 16)		Ubiquitous Computing Technology Corporation
-				2-20-1 Nishi-Gotanda
-				Shinagawa-ku  Tokyo  1410031
-				JP
-
-A8-77-6F   (hex)		Zonoff
-A8776F     (base 16)		Zonoff
-				70E Swedesford Rd
-				Malvern  PA  19355
-				US
-
-64-87-88   (hex)		Juniper Networks
-648788     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-FA-3B   (hex)		CLOOS ELECTRONIC GMBH
-00FA3B     (base 16)		CLOOS ELECTRONIC GMBH
-				Jambe ducommun 8
-				LE LOCLE    2400
-				CH
-
-54-1D-FB   (hex)		Freestyle Energy Ltd
-541DFB     (base 16)		Freestyle Energy Ltd
-				18-24 Ricketts Road
-				Mount Waverley  Victoria  3149
-				AU
-
-60-B6-06   (hex)		Phorus
-60B606     (base 16)		Phorus
-				16255 Ventura Boulevard, Suite 310
-				Encino  CA  91436
-				US
-
-90-92-B4   (hex)		Diehl BGT Defence GmbH & Co. KG
-9092B4     (base 16)		Diehl BGT Defence GmbH & Co. KG
-				Alte Nussdorfer Strasse 13
-				Ueberlingen    88662
-				DE
-
-20-AA-4B   (hex)		Cisco-Linksys, LLC
-20AA4B     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-CC-6D-EF   (hex)		TJK Tietolaite Oy
-CC6DEF     (base 16)		TJK Tietolaite Oy
-				PL 443
-				Vaasa    65101
-				FI
-
-A8-5B-F3   (hex)		Audivo GmbH
-A85BF3     (base 16)		Audivo GmbH
-				Irrenloher Damm 17
-				Schwarzenfeld    92521
-				DE
-
-B8-97-5A   (hex)		BIOSTAR Microtech Int'l Corp.
-B8975A     (base 16)		BIOSTAR Microtech Int'l Corp.
-				2Fl.  No. 108-2, Min Chuan Road, Hsin Tien Dist.,
-				 New Taipei    231
-				TW
-
-48-33-DD   (hex)		ZENNIO AVANCE Y TECNOLOGIA, S.L.
-4833DD     (base 16)		ZENNIO AVANCE Y TECNOLOGIA, S.L.
-				RIO JARAMA 132 NAVE P8.11
-				TOLEDO    45007
-				ES
-
-08-75-72   (hex)		Obelux Oy
-087572     (base 16)		Obelux Oy
-				Kutomotie 6 B
-				Helsinki    00380
-				FI
-
-10-C2-BA   (hex)		UTT Co., Ltd.
-10C2BA     (base 16)		UTT Co., Ltd.
-				
-				Seoul  Korea  135-913
-				KR
-
-90-D7-4F   (hex)		Bookeen
-90D74F     (base 16)		Bookeen
-				27, rue de la Vistule
-				Paris    75013
-				FR
-
-64-C5-AA   (hex)		South African Broadcasting Corporation
-64C5AA     (base 16)		South African Broadcasting Corporation
-				77 Twickenham Avenue
-				Auckland Park  Gauteng  2006
-				ZA
-
-98-AA-D7   (hex)		BLUE WAVE NETWORKING CO LTD
-98AAD7     (base 16)		BLUE WAVE NETWORKING CO LTD
-				No. 20, Lane 68, Da-feng RD, 
-				NEW TAIPEI  TAIPEI   23121
-				TW
-
-9C-53-CD   (hex)		ENGICAM s.r.l.
-9C53CD     (base 16)		ENGICAM s.r.l.
-				Via Dei Pratoni n.16
-				Scandicci  FIRENZE  50018
-				IT
-
-60-86-45   (hex)		Avery Weigh-Tronix, LLC
-608645     (base 16)		Avery Weigh-Tronix, LLC
-				1000 Armstrong Drive
-				Fairmont  MN  56031
-				US
-
-FC-8F-C4   (hex)		Intelligent Technology Inc.
-FC8FC4     (base 16)		Intelligent Technology Inc.
-				Yuanhe 3 Street,Tongsha Industrial Zone,
-				Dongguan  Guangdong  523127
-				CN
-
-10-FC-54   (hex)		Shany Electronic Co., Ltd. 
-10FC54     (base 16)		Shany Electronic Co., Ltd. 
-				4F, No. 92, Section 1, Nei-Hu Road
-				Taipei    114
-				TW
-
-C0-29-73   (hex)		Audyssey Laboratories Inc.
-C02973     (base 16)		Audyssey Laboratories Inc.
-				110 E. 9th Street, Suite C700
-				Los Angeles  CA  90079
-				US
-
-78-FE-3D   (hex)		Juniper Networks
-78FE3D     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-28-38-CF   (hex)		Gen2wave
-2838CF     (base 16)		Gen2wave
-				Gumi-dong, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-741
-				KR
-
-24-BC-82   (hex)		Dali Wireless, Inc.
-24BC82     (base 16)		Dali Wireless, Inc.
-				125 University Avenue, Suite 88
-				Palo Alto  CA  94301
-				US
-
-B4-0C-25   (hex)		Palo Alto Networks
-B40C25     (base 16)		Palo Alto Networks
-				4401 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-F8-F7-D3   (hex)		International Communications Corporation
-F8F7D3     (base 16)		International Communications Corporation
-				11801 Pierce St. 2nd FL
-				Riverside  CA  92505
-				US
-
-28-D1-AF   (hex)		Nokia Corporation
-28D1AF     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-24-C0-B3   (hex)		RSF
-24C0B3     (base 16)		RSF
-				45 Av Marcel Dassault
-				Toulouse  Garonne, Haute (31)  31500
-				FR
-
-FC-45-5F   (hex)		JIANGXI SHANSHUI OPTOELECTRONIC TECHNOLOGY CO.,LTD
-FC455F     (base 16)		JIANGXI SHANSHUI OPTOELECTRONIC TECHNOLOGY CO.,LTD
-				No.1010,Anping Road,Eco-Industrial Park,Lushan District
-				Jiujiang  Jiangxi  332000
-				CN
-
-F0-4A-2B   (hex)		PYRAMID Computer GmbH
-F04A2B     (base 16)		PYRAMID Computer GmbH
-				Boetzinger Strasse 60
-				Freiburg  BW  79111
-				DE
-
-30-2D-E8   (hex)		JDA, LLC (JDA Systems)
-302DE8     (base 16)		JDA, LLC (JDA Systems)
-				4080 Pike Lane
-				Concord  CA  94520
-				US
-
-48-A6-D2   (hex)		GJsun Optical Science and Tech Co.,Ltd.
-48A6D2     (base 16)		GJsun Optical Science and Tech Co.,Ltd.
-				First floor National Information Industry Park D-08
-				Guilin  Guangxi  541004
-				CN
-
-50-0B-32   (hex)		Foxda Technology Industrial(ShenZhen)Co.,LTD
-500B32     (base 16)		Foxda Technology Industrial(ShenZhen)Co.,LTD
-				1F of 1st  Building&1F-3F of 2nd Building, Foxda Industrial Zone,North of Lanzhu Road,Pingshan New District,Shenzhen City,Guangdong Province,P.R.China
-				Shenzhen  Guangdong  518122
-				CN
-
-60-35-53   (hex)		Buwon Technology
-603553     (base 16)		Buwon Technology
-				(Cunuitechnopark 102-1507) 200-1,Chunui-dong
-				Buchon-si  Gyeinggi-do  420-857
-				KR
-
-E0-39-D7   (hex)		Plexxi, Inc.
-E039D7     (base 16)		Plexxi, Inc.
-				100 Innovative Way Suite 3322
-				Nashua  NH  03062
-				US
-
-7C-33-6E   (hex)		MEG Electronics Inc.
-7C336E     (base 16)		MEG Electronics Inc.
-				Bogazici Universitesi Kuzey Kampus
-				ISTANBUL    34342
-				TR
-
-D4-E3-3F   (hex)		Nokia
-D4E33F     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-68-CD-0F   (hex)		U Tek Company Limited
-68CD0F     (base 16)		U Tek Company Limited
-				FL5, BLDG12, 3RD DISTRICT, TANGTOU INDUSTRIAL PARK
-				SHENZHEN  GUANGDONG  518018
-				CN
-
-60-3F-C5   (hex)		COX CO., LTD
-603FC5     (base 16)		COX CO., LTD
-				904HO, ACE TWIN TOWER 1-CHA
-				SEOUL    152-779
-				KR
-
-A4-E3-91   (hex)		DENY FONTAINE
-A4E391     (base 16)		DENY FONTAINE
-				ROUTE DE SAINT VALERY
-				SAINT BLIMONT    80960
-				FR
-
-AC-6F-D9   (hex)		Valueplus Inc.
-AC6FD9     (base 16)		Valueplus Inc.
-				#803, Sicox Tower, 513-14, 
-				Seongnam-si  Gyeonggi-do  462-806
-				KR
-
-DC-1E-A3   (hex)		Accensus LLC
-DC1EA3     (base 16)		Accensus LLC
-				200 South Wacker Drive
-				Chicago  IL  60606
-				US
-
-A4-01-30   (hex)		ABIsystems Co., LTD
-A40130     (base 16)		ABIsystems Co., LTD
-				308 ACE Techno Tower8 191-7 Guro-dong
-				  Seoul  
-				KR
-
-90-A7-83   (hex)		JSW PACIFIC CORPORATION 
-90A783     (base 16)		JSW PACIFIC CORPORATION 
-				3F-3, No.700, Chung-Zheng Rd, Zhonghe District
-				New Taipei City    235 
-				TW
-
-F8-46-2D   (hex)		SYNTEC Incorporation
-F8462D     (base 16)		SYNTEC Incorporation
-				3F, NO.105, Shing-shyue St., 
-				Hsinchu    300
-				TW
-
-78-A5-DD   (hex)		Shenzhen Smarteye Digital Electronics Co., Ltd
-78A5DD     (base 16)		Shenzhen Smarteye Digital Electronics Co., Ltd
-				#6 Northen Area
-				Shenzhen  Guangdong  518129
-				CN
-
-28-AF-0A   (hex)		Sirius XM Radio Inc
-28AF0A     (base 16)		Sirius XM Radio Inc
-				1221 Avenue of the Americas
-				New York  NY  10020
-				US
-
-5C-D4-AB   (hex)		Zektor
-5CD4AB     (base 16)		Zektor
-				12675 Danielson Ct. Ste 401
-				Poway  CA  92064
-				US
-
-08-FC-52   (hex)		OpenXS BV
-08FC52     (base 16)		OpenXS BV
-				Koaibosk 3
-				Terwispel  Friesland  8407ED
-				NL
-
-4C-32-D9   (hex)		M Rutty Holdings Pty. Ltd.
-4C32D9     (base 16)		M Rutty Holdings Pty. Ltd.
-				Unit 1, 4 Beaumont Road
-				Mount Kuring-Gai  New South Wales  2080
-				AU
-
-08-A1-2B   (hex)		ShenZhen EZL Technology Co., Ltd
-08A12B     (base 16)		ShenZhen EZL Technology Co., Ltd
-				RM21B, Building 2, China Phoenix Building,
-				ShenZhen  GuangDong  518026
-				CN
-
-A0-0C-A1   (hex)		SKTB SKiT
-A00CA1     (base 16)		SKTB SKiT
-				239 B. Sadovaya Str.
-				Saratov  Saratov region  410005
-				RU
-
-64-E8-4F   (hex)		Serialway Communication Technology Co. Ltd
-64E84F     (base 16)		Serialway Communication Technology Co. Ltd
-				Room 315, 706 Painting Room, 
-				Beijing    100096
-				CN
-
-2C-9E-FC   (hex)		CANON INC.
-2C9EFC     (base 16)		CANON INC.
-				3-30-2
-				Ohta-Ku  Tokyo  146-8501
-				JP
-
-18-2B-05   (hex)		8D Technologies
-182B05     (base 16)		8D Technologies
-				416, de Maisonneuve West
-				Montreal,   Quebec  H3A 1L2
-				CA
-
-24-0B-B1   (hex)		KOSTAL Industrie Elektrik GmbH 
-240BB1     (base 16)		KOSTAL Industrie Elektrik GmbH 
-				Gewerbering 20
-				Schalksmuehle  North Rhine-Westphalia  58579
-				DE
-
-20-EE-C6   (hex)		Elefirst Science & Tech Co ., ltd
-20EEC6     (base 16)		Elefirst Science & Tech Co ., ltd
-				Floor 9, No 77 Zijinmingmen Building
-				Nanjing  Jiangsu  210007
-				CN
-
-E0-1E-07   (hex)		Anite Telecoms  US. Inc
-E01E07     (base 16)		Anite Telecoms  US. Inc
-				106 Vista Centre Dr
-				Forest  VA  24551
-				US
-
-7C-6B-33   (hex)		Tenyu Tech Co. Ltd.
-7C6B33     (base 16)		Tenyu Tech Co. Ltd.
-				1F., No.10, Ln. 36, Ganzhen 2nd St.
-				New Taipei City     251
-				TW
-
-14-7D-C5   (hex)		Murata Manufacturing Co., Ltd.
-147DC5     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-00-B9-F6   (hex)		Shenzhen Super Rich Electronics Co.,Ltd
-00B9F6     (base 16)		Shenzhen Super Rich Electronics Co.,Ltd
-				RM.102,Shibida Building,No.55,Zhenhua Road,Shenzhen Futian District,
-				Shenzhen  Guangdong  518031
-				CN
-
-FC-C2-3D   (hex)		Atmel Corporation
-FCC23D     (base 16)		Atmel Corporation
-				1150 E Cheyenne Mtn Blvd
-				Colorado Springs  CO  80906
-				US
-
-88-E7-A6   (hex)		iKnowledge Integration Corp.
-88E7A6     (base 16)		iKnowledge Integration Corp.
-				10F No.2, Sec. 3, Xinsheng S. Rd.,
-				Taipei    10660
-				TW
-
-A4-46-FA   (hex)		AmTRAN Video Corporation
-A446FA     (base 16)		AmTRAN Video Corporation
-				9 Goddard
-				Irvine  CA  92618
-				US
-
-CC-E7-DF   (hex)		American Magnetics, Inc.
-CCE7DF     (base 16)		American Magnetics, Inc.
-				PO Box 2509
-				Oak Ridge  TN  37831-2509
-				US
-
-28-04-E0   (hex)		FERMAX ELECTRONICA S.A.U.
-2804E0     (base 16)		FERMAX ELECTRONICA S.A.U.
-				Tres Cruces 133
-				Valencia    46017
-				ES
-
-64-43-46   (hex)		GuangDong Quick Network Computer CO.,LTD
-644346     (base 16)		GuangDong Quick Network Computer CO.,LTD
-				12F,No.80 of Middle XianLie Road,YueXiu District
-				GuangZhou  GuangDong  510070
-				CN
-
-D4-02-4A   (hex)		Delphian Systems LLC
-D4024A     (base 16)		Delphian Systems LLC
-				720 Dartmouth Lane
-				Buffalo Grove  IL  60089
-				US
-
-00-41-B4   (hex)		Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.
-0041B4     (base 16)		Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.
-				Block 93-C, Sci. & Tech. Industry park,
-				Wuxi  Jiangsu  214028
-				CN
-
-F4-44-50   (hex)		BND Co., Ltd.
-F44450     (base 16)		BND Co., Ltd.
-				573-13 Bokhyeon-dong, Buk-gu
-				Daegu    702-020
-				KR
-
-04-62-D7   (hex)		ALSTOM HYDRO FRANCE
-0462D7     (base 16)		ALSTOM HYDRO FRANCE
-				82 Avenue Leon Blum
-				GRENOBLE    38041
-				FR
-
-D4-50-7A   (hex)		CEIVA Logic, Inc
-D4507A     (base 16)		CEIVA Logic, Inc
-				214 E Magnolia Blvd
-				Burbank  CA  91502
-				US
-
-64-D9-89   (hex)		Cisco Systems, Inc
-64D989     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-64-5D-D7   (hex)		Shenzhen Lifesense Medical Electronics Co., Ltd.    
-645DD7     (base 16)		Shenzhen Lifesense Medical Electronics Co., Ltd.    
-				China Academy of Science and Technology Development, Room 19A 
-				Shenzhen  Guangdong  518057
-				CN
-
-EC-46-70   (hex)		Meinberg Funkuhren GmbH & Co. KG
-EC4670     (base 16)		Meinberg Funkuhren GmbH & Co. KG
-				Lange Wand 9
-				Bad Pyrmont  NDS  31812
-				DE
-
-D0-5A-0F   (hex)		I-BT DIGITAL CO.,LTD
-D05A0F     (base 16)		I-BT DIGITAL CO.,LTD
-				17F.-8, No.866, Zhongzheng Rd., Zhonghe Dist
-				New Taipei     235
-				TW
-
-EC-96-81   (hex)		2276427 Ontario Inc
-EC9681     (base 16)		2276427 Ontario Inc
-				31-1275 Morningside Ave
-				Toronto  ON  M1B3W1
-				CA
-
-5C-07-6F   (hex)		Thought Creator
-5C076F     (base 16)		Thought Creator
-				Largo da Pirâmide, Nº 3, Sala D
-				Oeiras  Lisboa  2795-156 Linda-a-Velha
-				PT
-
-3C-0F-C1   (hex)		KBC Networks
-3C0FC1     (base 16)		KBC Networks
-				25691 Atlantic Ocean Dr
-				Lake Forest  CA  92630
-				US
-
-58-E6-36   (hex)		EVRsafe Technologies
-58E636     (base 16)		EVRsafe Technologies
-				59 North Terrace 
-				Adelaide  South Australia  5069
-				AU
-
-10-F9-EE   (hex)		Nokia Corporation
-10F9EE     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-74-2B-0F   (hex)		Infinidat Ltd.
-742B0F     (base 16)		Infinidat Ltd.
-				11 Galgalei Haplada St.
-				Herzliya Pituach  Center  46722
-				IL
-
-C8-F9-81   (hex)		Seneca s.r.l.
-C8F981     (base 16)		Seneca s.r.l.
-				Via Germania, 34
-				PADOVA    35127
-				IT
-
-24-49-7B   (hex)		Innovative Converged Devices Inc
-24497B     (base 16)		Innovative Converged Devices Inc
-				424 8th Avenue North
-				Seattle  WA  98109
-				US
-
-98-E7-9A   (hex)		Foxconn(NanJing) Communication Co.,Ltd.
-98E79A     (base 16)		Foxconn(NanJing) Communication Co.,Ltd.
-				A-2FMinfang Building No.189 Guangzhou Rd 
-				Nanjing  Jiang su  210029
-				CN
-
-A0-E9-DB   (hex)		Ningbo FreeWings Technologies Co.,Ltd
-A0E9DB     (base 16)		Ningbo FreeWings Technologies Co.,Ltd
-				Room 1107-1108, No 298 XueShi Road Yinzhou District Ningbo, 
-				Ningbo  Zhejiang  315000
-				CN
-
-78-89-73   (hex)		CMC
-788973     (base 16)		CMC
-				Industriepark De Bruwaan 37B
-				Oudenaarde  Oost-Vlaanderen  9700
-				BE
-
-14-30-7A   (hex)		Avermetrics
-14307A     (base 16)		Avermetrics
-				2973 Glendale Blvd.
-				Los Angeles  CA  90039
-				US
-
-A0-6C-EC   (hex)		RIM
-A06CEC     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-20-37-06   (hex)		Cisco Systems, Inc
-203706     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-B1-64   (hex)		Lightning Telecommunications Technology Co. Ltd
-F4B164     (base 16)		Lightning Telecommunications Technology Co. Ltd
-				Room 1302, TianÂ¡Â¯an Hi-Tech Plaza Tower A, Futian District, 
-				ShenZhen  GuangDong  518040
-				CN
-
-70-B0-35   (hex)		Shenzhen Zowee Technology Co., Ltd
-70B035     (base 16)		Shenzhen Zowee Technology Co., Ltd
-				Block 5, Science and Technology Industrial 
-				Shenzhen  Guangdong  518055
-				CN
-
-88-21-E3   (hex)		Nebusens, S.L.
-8821E3     (base 16)		Nebusens, S.L.
-				C/ Adaja S/N, Edificio M2
-				Villamayor de la Armuña  Salamanca  37185
-				ES
-
-90-B9-7D   (hex)		Johnson Outdoors Marine Electronics d/b/a Minnkota
-90B97D     (base 16)		Johnson Outdoors Marine Electronics d/b/a Minnkota
-				1531 E Madison Ave
-				Mankato  MN  56001
-				US
-
-7C-F4-29   (hex)		NUUO Inc. 
-7CF429     (base 16)		NUUO Inc. 
-				C block, 18 Sihyuan St. Jhongjheng District, 
-				Taipei    100
-				TW
-
-CC-B5-5A   (hex)		Fraunhofer ITWM
-CCB55A     (base 16)		Fraunhofer ITWM
-				Fraunhoferplatz 1
-				Kaiserslautern  Rhineland-Palatinae  67663
-				DE
-
-AC-8A-CD   (hex)		ROGER D.Wensker, G.Wensker sp.j.
-AC8ACD     (base 16)		ROGER D.Wensker, G.Wensker sp.j.
-				Gosciszewo 59
-				Sztum  Pomorskie  82-400
-				PL
-
-98-42-46   (hex)		SOL INDUSTRY PTE., LTD
-984246     (base 16)		SOL INDUSTRY PTE., LTD
-				 1 NORTH BRIDGE RD.,
-				    179094
-				SG
-
-34-29-EA   (hex)		MCD ELECTRONICS SP. Z O.O.
-3429EA     (base 16)		MCD ELECTRONICS SP. Z O.O.
-				Lelewela 26
-				Zywiec  slaskie  34-300
-				PL
-
-8C-82-A8   (hex)		Insigma Technology Co.,Ltd
-8C82A8     (base 16)		Insigma Technology Co.,Ltd
-				No.226 Tianmushan Road, 
-				Hangzhou  Zhejiang  310000
-				CN
-
-60-19-0C   (hex)		RRAMAC
-60190C     (base 16)		RRAMAC
-				15400 Medina Rd
-				Plymouth  MN  55447
-				US
-
-D0-5F-CE   (hex)		Hitachi Data Systems
-D05FCE     (base 16)		Hitachi Data Systems
-				750 Central Expressway
-				Santa Clara  CA  95050
-				US
-
-F8-03-32   (hex)		Khomp
-F80332     (base 16)		Khomp
-				Rua Joe Collaço, 253
-				Florianópolis  Santa Catarina  88037-010
-				BR
-
-28-A5-74   (hex)		Miller Electric Mfg. Co.
-28A574     (base 16)		Miller Electric Mfg. Co.
-				N676 Communication Drive
-				Appleton  WI  54914
-				US
-
-10-45-BE   (hex)		Norphonic AS
-1045BE     (base 16)		Norphonic AS
-				Fabrikkgaten 10
-				Bergen    5059
-				NO
-
-90-B8-D0   (hex)		Joyent, Inc.
-90B8D0     (base 16)		Joyent, Inc.
-				345 California Street,
-				San Francisco  CA  94104
-				US
-
-AC-47-23   (hex)		Genelec
-AC4723     (base 16)		Genelec
-				Olvitie 5
-				Iisalmi    74100
-				FI
-
-E8-BA-70   (hex)		Cisco Systems, Inc
-E8BA70     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-A4-25   (hex)		SMAX Technology Co., Ltd.
-D4A425     (base 16)		SMAX Technology Co., Ltd.
-				2F., No. 3, Wuquan 3rd, Wugu Dist.
-				New Taipei City    248
-				TW
-
-28-14-71   (hex)		Lantis co., LTD.
-281471     (base 16)		Lantis co., LTD.
-				busan innobiz center 401
-				busan    616-829
-				KR
-
-24-47-0E   (hex)		PentronicAB
-24470E     (base 16)		PentronicAB
-				Bergsliden 1
-				GUNNEBO    59093
-				SE
-
-D0-9B-05   (hex)		Emtronix
-D09B05     (base 16)		Emtronix
-				5# Gaopeng Dadao
-				Chengdu    610041
-				CN
-
-8C-11-CB   (hex)		ABUS Security-Center GmbH & Co. KG
-8C11CB     (base 16)		ABUS Security-Center GmbH & Co. KG
-				Linker Kreuthweg 5
-				Affing / Muehlhausen  Bavaria  86444
-				DE
-
-FC-83-29   (hex)		Trei technics
-FC8329     (base 16)		Trei technics
-				801 Northpoint Pkwy
-				West Palm Beach  Florida  33407
-				US
-
-14-EB-33   (hex)		BSMediasoft Co., Ltd.
-14EB33     (base 16)		BSMediasoft Co., Ltd.
-				#603, Garden Bldg., 14-13, Yoido-Dong, Youngdeungpo-Gu
-				Seoul    150-871
-				KR
-
-F4-B5-49   (hex)		Xiamen Yeastar Information Technology Co., Ltd.
-F4B549     (base 16)		Xiamen Yeastar Information Technology Co., Ltd.
-				3/F, No. 46 Guanri Road, 2nd Software Park
-				Xiamen  Fujian  361006
-				CN
-
-88-B1-68   (hex)		Delta Control GmbH
-88B168     (base 16)		Delta Control GmbH
-				Rondorfer Hauptstraße 33
-				Cologne  NRW  50997
-				DE
-
-68-87-6B   (hex)		INQ Mobile Limited
-68876B     (base 16)		INQ Mobile Limited
-				6 Hester Road
-				Battersea  London  SW11 4AN
-				GB
-
-1C-AA-07   (hex)		Cisco Systems, Inc
-1CAA07     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-68-5B-36   (hex)		POWERTECH INDUSTRIAL CO., LTD.
-685B36     (base 16)		POWERTECH INDUSTRIAL CO., LTD.
-				10F, No. 407, Chung Shan Rd., Sec 2,
-				Chung Ho  Taipei County  23558
-				TW
-
-28-EE-2C   (hex)		Frontline Test Equipment
-28EE2C     (base 16)		Frontline Test Equipment
-				PO Box 7507
-				Charlottesville  Virginia  22906-7507
-				US
-
-78-2E-EF   (hex)		Nokia Corporation
-782EEF     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-7C-F0-BA   (hex)		Linkwell Telesystems Pvt Ltd
-7CF0BA     (base 16)		Linkwell Telesystems Pvt Ltd
-				1-11-252/1/A, Gowra Klassic
-				Hyderabad  Andhra Pradesh  500016
-				IN
-
-AC-86-74   (hex)		Open Mesh, Inc.
-AC8674     (base 16)		Open Mesh, Inc.
-				111 SW 5th Ave Ste1150
-				Portland  OR  97204
-				US
-
-64-D2-41   (hex)		Keith & Koep GmbH
-64D241     (base 16)		Keith & Koep GmbH
-				Uellendahler Str. 199
-				Wuppertal  NRW  42109
-				DE
-
-18-B7-9E   (hex)		Invoxia
-18B79E     (base 16)		Invoxia
-				87 rue du Gouverneur Général Eboué
-				Issy-Les-Moulineaux    92130
-				FR
-
-8C-44-35   (hex)		Shanghai BroadMobi Communication Technology Co., Ltd.
-8C4435     (base 16)		Shanghai BroadMobi Communication Technology Co., Ltd.
-				Rm. 901, Bld. 9, No.1515 Gumei Rd, Xuhui District
-				Shanghai    200233
-				CN
-
-F8-1D-93   (hex)		Longdhua(Beijing) Controls Technology Co.,Ltd
-F81D93     (base 16)		Longdhua(Beijing) Controls Technology Co.,Ltd
-				Room 1203,Lixiang Building, No.111 Zhichun Road,Haidian District,
-				Beijing    10086
-				CN
-
-94-D9-3C   (hex)		ENELPS
-94D93C     (base 16)		ENELPS
-				Bul Arsenija Carnojevica 117
-				Belgrade    11070
-				RS
-
-B8-BE-BF   (hex)		Cisco Systems, Inc
-B8BEBF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-64-B6-4A   (hex)		ViVOtech, Inc.
-64B64A     (base 16)		ViVOtech, Inc.
-				451 El Camino Real
-				Santa Clara  CA  95050
-				US
-
-38-D1-35   (hex)		EasyIO Corporation Sdn. Bhd.
-38D135     (base 16)		EasyIO Corporation Sdn. Bhd.
-				No. 32-2 & 32-3, Jalan Puteri 2/4
-				Puchong  Selangor  47100
-				MY
-
-CC-F8-41   (hex)		Lumewave
-CCF841     (base 16)		Lumewave
-				4803 B Street
-				Sacramento  CA  95819
-				US
-
-30-EB-25   (hex)		INTEK DIGITAL
-30EB25     (base 16)		INTEK DIGITAL
-				801, 8th Fl., Anyang K-center building, 1591-9
-				Anyang    431-060
-				KR
-
-44-E4-D9   (hex)		Cisco Systems, Inc
-44E4D9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-AC-CA-54   (hex)		Telldus Technologies AB
-ACCA54     (base 16)		Telldus Technologies AB
-				Skiffervägen 102
-				Lund    224 78
-				SE
-
-90-19-00   (hex)		SCS SA
-901900     (base 16)		SCS SA
-				Via Pini, 32
-				Biasca    6710
-				CH
-
-D4-5D-42   (hex)		Nokia Corporation
-D45D42     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-B0-38-29   (hex)		Siliconware Precision Industries Co., Ltd.
-B03829     (base 16)		Siliconware Precision Industries Co., Ltd.
-				No. 123, Sec.3, Da Fong Rd, Tantzu, 
-				Taichung    427
-				TW
-
-7C-6C-39   (hex)		PIXSYS SRL
-7C6C39     (base 16)		PIXSYS SRL
-				VIA DELLA CROCE ROSSA 42
-				PADOVA  PD  35129
-				IT
-
-18-B3-BA   (hex)		Netlogic AB
-18B3BA     (base 16)		Netlogic AB
-				Datavägen 14A
-				ASKIM  Västra Götaland  43632
-				SE
-
-8C-5F-DF   (hex)		Beijing Railway Signal Factory
-8C5FDF     (base 16)		Beijing Railway Signal Factory
-				No.2 Sicun Xilu Langfa,Huangcun,
-				Beiijng    102613
-				CN
-
-D4-7B-75   (hex)		HARTING Electronics GmbH
-D47B75     (base 16)		HARTING Electronics GmbH
-				Marienwerderstraße. 3
-				Espelkamp  North Rhine Westphalia  32339
-				DE
-
-D8-DF-0D   (hex)		beroNet GmbH
-D8DF0D     (base 16)		beroNet GmbH
-				Friedrichstraße 231
-				Berlin    10969
-				DE
-
-AC-F9-7E   (hex)		ELESYS INC.
-ACF97E     (base 16)		ELESYS INC.
-				Suit 623, 812-1, Hyomun-dong
-				Ulsan  Buk-gu  683-360
-				KR
-
-20-40-05   (hex)		feno GmbH
-204005     (base 16)		feno GmbH
-				Kolpingring 22
-				Oberhaching  Bavaria  82041
-				DE
-
-D4-6F-42   (hex)		WAXESS USA Inc
-D46F42     (base 16)		WAXESS USA Inc
-				1401 Dove Street
-				Newport Beach  CA  92660
-				US
-
-30-0B-9C   (hex)		Delta Mobile Systems, Inc.
-300B9C     (base 16)		Delta Mobile Systems, Inc.
-				700 Remington Road
-				Schaumburg  Illinois  60173
-				US
-
-6C-AD-3F   (hex)		Hubbell Building Automation, Inc.
-6CAD3F     (base 16)		Hubbell Building Automation, Inc.
-				9601 Dessau Rd
-				Austin  Texas  78754
-				US
-
-B0-1B-7C   (hex)		Ontrol A.S.
-B01B7C     (base 16)		Ontrol A.S.
-				Turcan Cad No:19 Y.Dudullu
-				Umraniye  Istanbul  34775
-				TR
-
-04-C5-A4   (hex)		Cisco Systems, Inc
-04C5A4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-28-46   (hex)		NextBIT Computing Pvt. Ltd.
-BC2846     (base 16)		NextBIT Computing Pvt. Ltd.
-				30/2, 2nd Floor, R.K. Plaza,
-				Bangalore  Karnataka  560038
-				IN
-
-BC-0F-2B   (hex)		FORTUNE TECHGROUP CO.,LTD
-BC0F2B     (base 16)		FORTUNE TECHGROUP CO.,LTD
-				7-8F,No.1198 North Qinzhou Road,
-				Shanghai    200233
-				CN
-
-64-81-25   (hex)		Alphatron Marine BV
-648125     (base 16)		Alphatron Marine BV
-				Schaardijk 23
-				Rotterdam  Zuid-Holland  3063NH
-				NL
-
-8C-F9-C9   (hex)		MESADA Technology Co.,Ltd.
-8CF9C9     (base 16)		MESADA Technology Co.,Ltd.
-				TongFng Information Harbor,No.11 LangShan Road,HI-tech Park,Nanshan District,
-				Shenzhen  GuangDong  518057
-				CN
-
-C0-62-6B   (hex)		Cisco Systems, Inc
-C0626B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-94-E2-26   (hex)		D. ORtiz Consulting, LLC
-94E226     (base 16)		D. ORtiz Consulting, LLC
-				22601 N. 17th Avenue Suite 270
-				Phoenix  AZ  85027
-				US
-
-D8-C9-9D   (hex)		EA DISPLAY LIMITED
-D8C99D     (base 16)		EA DISPLAY LIMITED
-				22/F DELTA HOUSE 3 ON YIU ST
-				SHATIN NT    
-				HK
-
-10-83-D2   (hex)		Microseven Systems, LLC
-1083D2     (base 16)		Microseven Systems, LLC
-				404 South Lemon Ave., #9
-				Walnut  California  91789
-				US
-
-34-68-4A   (hex)		Teraworks Co., Ltd.
-34684A     (base 16)		Teraworks Co., Ltd.
-				Room No. 201 , 515-30 , Mok-Dong
-				Seoul    158-808
-				KR
-
-CC-FC-6D   (hex)		RIZ TRANSMITTERS
-CCFC6D     (base 16)		RIZ TRANSMITTERS
-				BOZIDAREVICEVA 13
-				ZAGREB    10000
-				HR
-
-E0-3E-7D   (hex)		data-complex GmbH
-E03E7D     (base 16)		data-complex GmbH
-				Düsterngraben 7
-				Halberstadt  Sachsen-Anhalt  38820
-				DE
-
-0C-C6-AC   (hex)		DAGS
-0CC6AC     (base 16)		DAGS
-				Ace High end Tower 7th 1802
-				Seoul  Geumcheon-gu  153-802
-				KR
-
-24-F0-FF   (hex)		GHT Co., Ltd.
-24F0FF     (base 16)		GHT Co., Ltd.
-				#16 Nanyunyi Lu, Guangzhou Science City
-				Guangzhou  Guangdong  510663
-				CN
-
-9C-C0-D2   (hex)		Conductix-Wampfler GmbH
-9CC0D2     (base 16)		Conductix-Wampfler GmbH
-				Rheinstrasse 27+33
-				  Baden-Württemberg  
-				DE
-
-CC-F6-7A   (hex)		Ayecka Communication Systems LTD
-CCF67A     (base 16)		Ayecka Communication Systems LTD
-				POB 3059
-				Hod Hasharon    45130
-				IL
-
-80-65-E9   (hex)		BenQ Corporation
-8065E9     (base 16)		BenQ Corporation
-				16 Jihu Road, Neihu
-				Taipei    114
-				TW
-
-EC-98-6C   (hex)		Lufft Mess- und Regeltechnik GmbH
-EC986C     (base 16)		Lufft Mess- und Regeltechnik GmbH
-				Gutenbergstraße 20
-				Fellbach  Baden-Württemberg  70736
-				DE
-
-D0-93-F8   (hex)		Stonestreet One LLC
-D093F8     (base 16)		Stonestreet One LLC
-				9960 Corporate Campus Drive
-				Louisville  KY  40223
-				US
-
-9C-64-5E   (hex)		Harman Consumer Group
-9C645E     (base 16)		Harman Consumer Group
-				8500 Balboa Blvd
-				Northridge  CA  91329
-				US
-
-1C-33-4D   (hex)		ITS Telecom
-1C334D     (base 16)		ITS Telecom
-				29 Hametzuda st. 
-				Azur  Israel  580001
-				IL
-
-DC-D8-7F   (hex)		Shenzhen JoinCyber Telecom Equipment Ltd
-DCD87F     (base 16)		Shenzhen JoinCyber Telecom Equipment Ltd
-				19CDE, Block A,JinFengBuilding,shangbu South Road,Futian District,
-				Shenzhen  Guangdong  518031
-				CN
-
-B4-E0-CD   (hex)		Fusion-io, Inc
-B4E0CD     (base 16)		Fusion-io, Inc
-				2880 Junction Avenue
-				San Jose  CA  95134-1922
-				US
-
-28-60-46   (hex)		Lantech Communications Global, Inc.
-286046     (base 16)		Lantech Communications Global, Inc.
-				7F, No. 45, Lane 188, Ruiguang Rd., Neihu District
-				Taipei City    11491
-				TW
-
-10-E2-D5   (hex)		Qi Hardware Inc.
-10E2D5     (base 16)		Qi Hardware Inc.
-				555 4TH STREET #403
-				San Francisco  CA  94107
-				US
-
-60-C9-80   (hex)		Trymus
-60C980     (base 16)		Trymus
-				Bucheon Techno Park 303-902
-				Bucheon-si  421-741  Gyunggi-do
-				KR
-
-A0-36-FA   (hex)		Ettus Research LLC
-A036FA     (base 16)		Ettus Research LLC
-				1043 N Shoreline Blvd
-				Mountain View  CA  94043
-				US
-
-EC-83-6C   (hex)		RM Tech Co., Ltd.
-EC836C     (base 16)		RM Tech Co., Ltd.
-				C-801, Bupyeong Woolim Lions Valley
-				Incheon City    403-911
-				KR
-
-30-39-55   (hex)		Shenzhen Jinhengjia Electronic Co., Ltd.
-303955     (base 16)		Shenzhen Jinhengjia Electronic Co., Ltd.
-				4-6 Floors, Factory Building, Jijia Industrial Park,
-				Shenzhen  Guangdong  518112
-				CN
-
-FC-5B-24   (hex)		Weibel Scientific A/S
-FC5B24     (base 16)		Weibel Scientific A/S
-				Solvang 30
-				Alleroed    3450
-				DK
-
-78-59-3E   (hex)		RAFI GmbH & Co.KG
-78593E     (base 16)		RAFI GmbH & Co.KG
-				Ravensburger Str. 128-134
-				Berg  Baden Wurttemberg  88276
-				DE
-
-50-97-72   (hex)		Westinghouse Digital
-509772     (base 16)		Westinghouse Digital
-				500 N. State College Blvd.
-				Orange  CA  92868
-				US
-
-50-3D-E5   (hex)		Cisco Systems, Inc
-503DE5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-54-04-96   (hex)		Gigawave LTD
-540496     (base 16)		Gigawave LTD
-				GIGAWAVE TECHNICAL CENTRE
-				Colchester  ESSEX  CO62NS
-				GB
-
-EC-46-44   (hex)		TTK SAS
-EC4644     (base 16)		TTK SAS
-				4, Rue du Chemin Vert
-				Clichy    92110
-				FR
-
-4C-B9-C8   (hex)		CONET CO., LTD.
-4CB9C8     (base 16)		CONET CO., LTD.
-				2-8,HIGASHIJIMA-CHO
-				ICHINOMIYA  AICHI  491-0074
-				JP
-
-8C-B6-4F   (hex)		Cisco Systems, Inc
-8CB64F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-4A-AA   (hex)		Hanscan Spain S.A.
-204AAA     (base 16)		Hanscan Spain S.A.
-				Avda. de la Vega, 1
-				Alcobendas  Madrid  28108
-				ES
-
-20-FE-CD   (hex)		System In Frontier Inc.
-20FECD     (base 16)		System In Frontier Inc.
-				4F Shinsuzuharu Bldg. 2-8-3 Akebonocyo
-				Tachikawa-shi  Tokyo  190-0012
-				JP
-
-F0-93-3A   (hex)		NxtConect
-F0933A     (base 16)		NxtConect
-				Schillerstrasse 4
-				Bad Kissingen    97688
-				DE
-
-B8-41-5F   (hex)		ASP AG
-B8415F     (base 16)		ASP AG
-				Max- Planck-Str. 15 a-c
-				Erkrath  NRW  40699
-				DE
-
-2C-B6-9D   (hex)		RED Digital Cinema
-2CB69D     (base 16)		RED Digital Cinema
-				20291 Valencia Circle
-				Lake Forest  California  92630
-				US
-
-58-2F-42   (hex)		Universal Electric Corporation
-582F42     (base 16)		Universal Electric Corporation
-				168 Georgetown Road
-				Canonsburg  PA  15317
-				US
-
-04-74-A1   (hex)		Aligera Equipamentos Digitais Ltda
-0474A1     (base 16)		Aligera Equipamentos Digitais Ltda
-				Av. Para 330 / 302
-				Porto Alegre  RS  90240-590
-				BR
-
-5C-69-84   (hex)		NUVICO
-5C6984     (base 16)		NUVICO
-				1 Enterprise Place  Unit G
-				Hicksville  NY  11801
-				US
-
-70-DD-A1   (hex)		Tellabs
-70DDA1     (base 16)		Tellabs
-				One Tellabs Center
-				Naperville  Illinois  60563
-				US
-
-94-D0-19   (hex)		Cydle Corp.
-94D019     (base 16)		Cydle Corp.
-				1203, KofomoTower, 16-3 , Sunae-Dong, Bundang-Gu
-				Seongnam-City  Gyeonggi-Do  463825
-				KR
-
-8C-27-8A   (hex)		Vocollect Inc
-8C278A     (base 16)		Vocollect Inc
-				703 Rodi Road
-				Pittsburgh  Pa  15235
-				US
-
-CC-0C-DA   (hex)		Miljovakt AS
-CC0CDA     (base 16)		Miljovakt AS
-				Gannestadveien 2
-				Borre  Vestfold  3184
-				NO
-
-E4-1C-4B   (hex)		V2 TECHNOLOGY, INC.
-E41C4B     (base 16)		V2 TECHNOLOGY, INC.
-				4450 Enterprise Street
-				Fremont  California  94538
-				US
-
-5C-F3-FC   (hex)		IBM Corp
-5CF3FC     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-A8-6A-6F   (hex)		RIM
-A86A6F     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-68-12-2D   (hex)		Special Instrument Development Co., Ltd.
-68122D     (base 16)		Special Instrument Development Co., Ltd.
-				6F-1, No. 123, Lane 235
-				Hsin Tien  Taipei Hsien  231
-				TW
-
-94-F7-20   (hex)		Tianjin Deviser Electronics Instrument Co., Ltd
-94F720     (base 16)		Tianjin Deviser Electronics Instrument Co., Ltd
-				No.40 Yibin Road,Nankai district,
-				Tianjin    300113
-				CN
-
-DC-9C-52   (hex)		Sapphire Technology Limited.
-DC9C52     (base 16)		Sapphire Technology Limited.
-				Unit 1909-1919, 19/F., Tower 2, Grand Central Plaza,
-				    
-				HK
-
-48-91-F6   (hex)		Shenzhen Reach software technology CO.,LTD
-4891F6     (base 16)		Shenzhen Reach software technology CO.,LTD
-				6/F,Block B, Kingdee Software park,#2,Keji 12th South Road,Hi-tech Industrial Park,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-64-9B-24   (hex)		V Technology Co., Ltd.
-649B24     (base 16)		V Technology Co., Ltd.
-				YBP East Tower 5F,
-				Yokohama city  Kanagawa  240-0005
-				JP
-
-84-6E-B1   (hex)		Park Assist LLC
-846EB1     (base 16)		Park Assist LLC
-				111 W28th Street
-				New York  NY  10001
-				US
-
-6C-50-4D   (hex)		Cisco Systems, Inc
-6C504D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B8-D0-6F   (hex)		GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE
-B8D06F     (base 16)		GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE
-				Rm 403, North of Software Building,Nansha IT Park,
-				Guangzhou  Guangdong Privince  511458
-				CN
-
-EC-14-F6   (hex)		BioControl AS
-EC14F6     (base 16)		BioControl AS
-				Grimstad Gard 
-				Rakkestad     N-1890
-				NO
-
-E8-99-5A   (hex)		PiiGAB, Processinformation i Goteborg AB
-E8995A     (base 16)		PiiGAB, Processinformation i Goteborg AB
-				Anders Carlssons gata 1
-				Gothenburg    417 55
-				SE
-
-40-1D-59   (hex)		Biometric Associates, LP
-401D59     (base 16)		Biometric Associates, LP
-				9475 Deereco Rd.
-				Timonium  MD  21093
-				US
-
-B8-FF-6F   (hex)		Shanghai Typrotech Technology Co.Ltd
-B8FF6F     (base 16)		Shanghai Typrotech Technology Co.Ltd
-				Design Building 903, NO.63, 
-				Shanghai    200092
-				CN
-
-1C-BD-0E   (hex)		Amplified Engineering Pty Ltd
-1CBD0E     (base 16)		Amplified Engineering Pty Ltd
-				5 Turner Avenue
-				Bentley  WA  6102
-				AU
-
-A0-F2-17   (hex)		GE Medical System(China) Co., Ltd. 
-A0F217     (base 16)		GE Medical System(China) Co., Ltd. 
-				No.19, ChangJiang Road 
-				Wuxi  Jiangsu  214028 
-				CN
-
-F0-A7-64   (hex)		GST Co., Ltd.
-F0A764     (base 16)		GST Co., Ltd.
-				#988-6, Gosaek-Dong, Gwonseon-Gu
-				Suwon-Si  Gyeonggi-Do  441-813
-				KR
-
-1C-06-56   (hex)		IDY Corporation
-1C0656     (base 16)		IDY Corporation
-				IDEMITSU Korakuen Bld 9F
-				Bunkyo-ku  Tokyo  112-0002
-				JP
-
-50-0E-6D   (hex)		TrafficCast International
-500E6D     (base 16)		TrafficCast International
-				2801 Coho Street
-				Madison  WI  53713
-				US
-
-EC-3B-F0   (hex)		NovelSat
-EC3BF0     (base 16)		NovelSat
-				Hataasia 21
-				Raanana    2396
-				IL
-
-4C-ED-DE   (hex)		ASKEY COMPUTER CORP
-4CEDDE     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-E8-E0-8F   (hex)		GRAVOTECH MARKING SAS
-E8E08F     (base 16)		GRAVOTECH MARKING SAS
-				56 AVENUE JEAN JAURES
-				LA CHAPELLE SAINT LUC  AUBE  10600
-				FR
-
-AC-AB-8D   (hex)		Lyngso Marine A/S
-ACAB8D     (base 16)		Lyngso Marine A/S
-				Lyngso Alle 2
-				Horsholm    DK-2970
-				DK
-
-60-83-B2   (hex)		GkWare e.K.
-6083B2     (base 16)		GkWare e.K.
-				Hatzper Str. 172B
-				Essen  NRW  45149
-				DE
-
-80-D0-19   (hex)		Embed, Inc
-80D019     (base 16)		Embed, Inc
-				410 Great Road
-				Littleton  MA  01460
-				US
-
-68-EB-C5   (hex)		Angstrem Telecom
-68EBC5     (base 16)		Angstrem Telecom
-				Yuzhnaya promzona, passage 4806, 4, build 3 
-				Zelenograd  Moscow  124460
-				RU
-
-A0-B5-DA   (hex)		HongKong THTF Co., Ltd
-A0B5DA     (base 16)		HongKong THTF Co., Ltd
-				2F,Sector C of Tsinghua University Academy, 
-				Shenzhen  Guangdong  518057
-				CN
-
-88-86-A0   (hex)		Simton Technologies, Ltd.
-8886A0     (base 16)		Simton Technologies, Ltd.
-				2 Taishan Road, Building C, 3rd Floor
-				Wuxi,   Province of Jiangsu,   214028
-				CN
-
-A4-50-55   (hex)		BUSWARE.DE
-A45055     (base 16)		BUSWARE.DE
-				Lindenstrasse 18
-				Scharbeutz    23684
-				DE
-
-A8-9B-10   (hex)		inMotion Ltd.
-A89B10     (base 16)		inMotion Ltd.
-				Unit 2709 Exchange Tower 
-				    KLN
-				HK
-
-B4-14-89   (hex)		Cisco Systems, Inc
-B41489     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-A8-0F   (hex)		Shenzhen Coship Electronics Co., Ltd.
-A4A80F     (base 16)		Shenzhen Coship Electronics Co., Ltd.
-				Rainbow Bldg., North, Hi-Tech Industrial Park, Nanshan District, 
-				Shenzhen  Guangdong  518057
-				CN
-
-F8-B5-99   (hex)		Guangzhou CHNAVS Digital Technology Co.,Ltd
-F8B599     (base 16)		Guangzhou CHNAVS Digital Technology Co.,Ltd
-				Buliding C, industy base of digital home application and demonstration ,zhongyi road Guangzhou higher education mega center
-				Guangzhou  Guangdong  510006
-				CN
-
-B8-92-1D   (hex)		BG T&A
-B8921D     (base 16)		BG T&A
-				4F, L&C Tower
-				Gunpo-si  Gyeonggi-do  435-845
-				KR
-
-D0-89-99   (hex)		APCON, Inc.
-D08999     (base 16)		APCON, Inc.
-				9255 SW Pioneer Court
-				Wilsonville  OR  97070
-				US
-
-C8-84-47   (hex)		Beautiful Enterprise Co., Ltd
-C88447     (base 16)		Beautiful Enterprise Co., Ltd
-				26th Floor, Beautiful Group Tower 
-				    
-				HK
-
-54-FD-BF   (hex)		Scheidt & Bachmann GmbH
-54FDBF     (base 16)		Scheidt & Bachmann GmbH
-				Breite Strasse 132
-				Moenchengladbach  NRW  41238
-				DE
-
-D0-BB-80   (hex)		SHL Telemedicine International Ltd.
-D0BB80     (base 16)		SHL Telemedicine International Ltd.
-				90 Yigal Alon
-				Tel Aviv    67891
-				IL
-
-5C-17-D3   (hex)		LGE 
-5C17D3     (base 16)		LGE 
-				60-39 , Kasan -dong , Gumcheon-gu.
-				Seoul     153-801
-				KR
-
-1C-DF-0F   (hex)		Cisco Systems, Inc
-1CDF0F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-68-BD-AB   (hex)		Cisco Systems, Inc
-68BDAB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-9C-AD-EF   (hex)		Obihai Technology, Inc.
-9CADEF     (base 16)		Obihai Technology, Inc.
-				2105 S. Bascom Ave #285
-				Campbell  CA  95008
-				US
-
-C8-8B-47   (hex)		Nolangroup S.P.A con Socio Unico
-C88B47     (base 16)		Nolangroup S.P.A con Socio Unico
-				via Terzi di S.Agata 2
-				Brembate di Sopra  Bergamo  24030
-				IT
-
-C4-CD-45   (hex)		Beijing Boomsense Technology CO.,LTD.
-C4CD45     (base 16)		Beijing Boomsense Technology CO.,LTD.
-				803 Building 4 INTERWEST Business Center,No.9 South Shouti Road ,HaidianDistrict,
-				Beijing    100048
-				CN
-
-8C-E7-B3   (hex)		Sonardyne International Ltd
-8CE7B3     (base 16)		Sonardyne International Ltd
-				Blackbushe Business Park
-				Yateley  Hampshire  GU46 6GD
-				GB
-
-08-8D-C8   (hex)		Ryowa Electronics Co.,Ltd
-088DC8     (base 16)		Ryowa Electronics Co.,Ltd
-				1483-1 Takahara-machi
-				Yamagata-shi  Yamagata-pref.  9900002
-				JP
-
-80-C6-CA   (hex)		Endian s.r.l.
-80C6CA     (base 16)		Endian s.r.l.
-				Pillhof 47
-				Frangarto  Bolzano  39010
-				IT
-
-70-76-F0   (hex)		LevelOne Communications (India) Private Limited
-7076F0     (base 16)		LevelOne Communications (India) Private Limited
-				2F, Lane 1, 45 Bharat Nagar
-				New Delhi  DELHI  110025
-				IN
-
-C0-2B-FC   (hex)		iNES. applied informatics GmbH
-C02BFC     (base 16)		iNES. applied informatics GmbH
-				Ohmstrasse 9
-				Ludwigsburg    71642
-				DE
-
-94-C7-AF   (hex)		Raylios Technology
-94C7AF     (base 16)		Raylios Technology
-				12F., No.16, Jian 8th Rd
-				Zhonghe City  Taipei County   23511
-				TW
-
-D8-1C-14   (hex)		Compacta International, Ltd.
-D81C14     (base 16)		Compacta International, Ltd.
-				31342 Via Las Palmas
-				San Juan Capistrano  CA  92675
-				US
-
-00-8C-10   (hex)		Black Box Corp.
-008C10     (base 16)		Black Box Corp.
-				1000 Park Drive
-				Lawrence  PA  15055
-				US
-
-90-90-3C   (hex)		TRISON TECHNOLOGY CORPORATION
-90903C     (base 16)		TRISON TECHNOLOGY CORPORATION
-				No.3, Kung-Yeh 12th Rd., Ping-Jen Industrial Park,
-				Ping-Jen City,   TaoYuan County  32459
-				TW
-
-E0-61-B2   (hex)		HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD
-E061B2     (base 16)		HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD
-				Room 806, F#, Cambridge Combridge, Shenhua Road,District Xihu, 
-				Hangzhou  Zhejiang  310030
-				CN
-
-94-11-DA   (hex)		ITF Fröschl GmbH
-9411DA     (base 16)		ITF Fröschl GmbH
-				Hauserbachstraße 9
-				Walderbach  Bavaria  93194
-				DE
-
-80-39-E5   (hex)		PATLITE CORPORATION
-8039E5     (base 16)		PATLITE CORPORATION
-				19-2
-				SANDA  HYOUGOKEN  669-1339
-				JP
-
-DC-7B-94   (hex)		Cisco Systems, Inc
-DC7B94     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-5C-CA-32   (hex)		Theben AG
-5CCA32     (base 16)		Theben AG
-				Hohenbergstraße 32
-				Haigerloch  Baden-Württemberg  72401
-				DE
-
-74-15-E2   (hex)		Tri-Sen Systems Corporation
-7415E2     (base 16)		Tri-Sen Systems Corporation
-				17625 El Camino Real Suite 200
-				Houston  TX  77058
-				US
-
-EC-C3-8A   (hex)		Accuenergy (CANADA) Inc
-ECC38A     (base 16)		Accuenergy (CANADA) Inc
-				2 Lansing Square, Suite 503
-				Toronto  Ontario  M2J 4P8
-				CA
-
-D4-8F-AA   (hex)		Sogecam Industrial, S.A.
-D48FAA     (base 16)		Sogecam Industrial, S.A.
-				Rosalind Franklin, 22-24
-				Malaga    29590
-				ES
-
-B0-81-D8   (hex)		I-sys Corp
-B081D8     (base 16)		I-sys Corp
-				2457 Aviation Ave
-				N. Charleston  South Carolina  29406
-				US
-
-14-FE-AF   (hex)		SAGITTAR LIMITED
-14FEAF     (base 16)		SAGITTAR LIMITED
-				2-102, BLD34, BAIWANGMOLIYUAN
-				BEIJING    100094
-				CN
-
-B0-B8-D5   (hex)		Nanjing Nengrui Auto Equipment CO.,Ltd
-B0B8D5     (base 16)		Nanjing Nengrui Auto Equipment CO.,Ltd
-				No.108 Ganjiabian East Yaohua Town
-				Nanjing  Jiangsu  210046
-				CN
-
-94-E7-11   (hex)		Xirka Dama Persada PT
-94E711     (base 16)		Xirka Dama Persada PT
-				Gdg CM
-				Jakarta    13150
-				ID
-
-6C-9B-02   (hex)		Nokia Corporation
-6C9B02     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-64-1E-81   (hex)		Dowslake Microsystems
-641E81     (base 16)		Dowslake Microsystems
-				21 High Street, Suite 306
-				North Andover  MA  01845
-				US
-
-EC-54-2E   (hex)		Shanghai XiMei Electronic Technology Co. Ltd
-EC542E     (base 16)		Shanghai XiMei Electronic Technology Co. Ltd
-				Room 503, No.2623, GongHeXin Road
-				Shanghai    200072
-				CN
-
-FC-D4-F6   (hex)		Messana Air.Ray Conditioning s.r.l.
-FCD4F6     (base 16)		Messana Air.Ray Conditioning s.r.l.
-				Via Venezia 18
-				Oderzo  TV  31046
-				IT
-
-D4-66-A8   (hex)		Riedo Networks Ltd
-D466A8     (base 16)		Riedo Networks Ltd
-				Route de la Fonderie 6
-				Fribourg    1700
-				CH
-
-F0-E5-C3   (hex)		Drägerwerk AG & Co. KG aA
-F0E5C3     (base 16)		Drägerwerk AG & Co. KG aA
-				Moislinger Allee 53-55
-				Luebeck  Germany  23452
-				DE
-
-D8-29-86   (hex)		Best Wish Technology LTD
-D82986     (base 16)		Best Wish Technology LTD
-				7E,Hai Yi Business Building,No.310,Tianshan RD.,
-				Shanghai    200336
-				CN
-
-44-61-32   (hex)		ecobee inc
-446132     (base 16)		ecobee inc
-				333 Adelaide St W 6th Floor
-				Toronto  Ontario  M5V1R5
-				CA
-
-F4-1F-0B   (hex)		YAMABISHI Corporation
-F41F0B     (base 16)		YAMABISHI Corporation
-				3-14-12 Kamigou
-				Ebina-city  KANAGAWA  243-0434
-				JP
-
-A0-82-C7   (hex)		P.T.I Co.,LTD
-A082C7     (base 16)		P.T.I Co.,LTD
-				1-5-1,Tsurumidan
-				Koriyama-shi  Fukushima  963-8861
-				JP
-
-04-36-04   (hex)		Gyeyoung I&T
-043604     (base 16)		Gyeyoung I&T
-				6F, Woosung Bldg. 1000-1, Daechi-dong
-				  Seoul  135-502
-				KR
-
-A4-B2-A7   (hex)		Adaxys Solutions AG
-A4B2A7     (base 16)		Adaxys Solutions AG
-				Eichtalstrasse 55
-				Hombrechtikon  CH  8634
-				CH
-
-D0-D0-FD   (hex)		Cisco Systems, Inc
-D0D0FD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-5B-70   (hex)		Innovid, Co., Ltd.
-E05B70     (base 16)		Innovid, Co., Ltd.
-				5th Floor, Boga Building, 821-3, Bangbaedong, Seochogu
-				Seoul    137-060
-				KR
-
-14-1B-BD   (hex)		Volex Inc.
-141BBD     (base 16)		Volex Inc.
-				915 Tate Blvd. SE
-				Hickory  NC  28602
-				US
-
-E8-7A-F3   (hex)		S5 Tech S.r.l.
-E87AF3     (base 16)		S5 Tech S.r.l.
-				Via Tortona 72
-				Milano    20144
-				IT
-
-CC-5C-75   (hex)		Weightech Com. Imp. Exp. Equip. Pesagem Ltda
-CC5C75     (base 16)		Weightech Com. Imp. Exp. Equip. Pesagem Ltda
-				Rodovia Virgílio Várzea, 3110 - Sala 01
-				Florianópolis  SC  88032-001
-				BR
-
-1C-6F-65   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-1C6F65     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				
-				Pin-Jen  Taoyuan  324
-				TW
-
-90-E0-F0   (hex)		IEEE 1722a Working Group
-90E0F0     (base 16)		IEEE 1722a Working Group
-				8760 Sandy Parkway
-				Sandy  Utah  84070
-				US
-
-40-52-0D   (hex)		Pico Technology
-40520D     (base 16)		Pico Technology
-				James House, Marlborough Road
-				St Neots  Cambridgeshire   PE19 8YP
-				GB
-
-80-7D-1B   (hex)		Neosystem Co. Ltd.
-807D1B     (base 16)		Neosystem Co. Ltd.
-				4-19-12 Takao
-				Dazaifu-shi  Fukuoka  818-0122
-				JP
-
-18-B2-09   (hex)		Torrey Pines Logic, Inc
-18B209     (base 16)		Torrey Pines Logic, Inc
-				12651 High Bluff Drive, #100
-				San Diego  CA  92130
-				US
-
-D8-4B-2A   (hex)		Cognitas Technologies, Inc.
-D84B2A     (base 16)		Cognitas Technologies, Inc.
-				6406 Laurel Bush Ln.
-				Sugar Land  Texas  77479
-				US
-
-68-4B-88   (hex)		Galtronics Telemetry Inc.
-684B88     (base 16)		Galtronics Telemetry Inc.
-				31 Lupi Ct
-				Palm Coast  Florida  32137
-				US
-
-98-FC-11   (hex)		Cisco-Linksys, LLC
-98FC11     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-34-E0-D7   (hex)		DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD
-34E0D7     (base 16)		DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD
-				XINJI INDUSTRIAL ZONE, MACHONG TOWN
-				DONGGUAN  GUANGDONG  523123
-				CN
-
-D8-46-06   (hex)		Silicon Valley Global Marketing
-D84606     (base 16)		Silicon Valley Global Marketing
-				830 Stewart Dr. #201
-				Sunnyvale  Ca  94085
-				US
-
-F8-AC-6D   (hex)		Deltenna Ltd
-F8AC6D     (base 16)		Deltenna Ltd
-				First Floor Unit 2
-				Chippenham  Wiltshire  SN15 1BN
-				GB
-
-F4-50-EB   (hex)		Telechips Inc
-F450EB     (base 16)		Telechips Inc
-				KORAD Bldg,1000-12, Daechi-Dong, Gangnam-Gu,
-				Seoul    135-280
-				KR
-
-98-8E-DD   (hex)		TE Connectivity Limerick
-988EDD     (base 16)		TE Connectivity Limerick
-				International Science Centre, Block 1
-				Castletroy  Co. Limerick  
-				IE
-
-A4-AE-9A   (hex)		Maestro Wireless Solutions ltd.
-A4AE9A     (base 16)		Maestro Wireless Solutions ltd.
-				3603-9, 36/F
-				Sai Ying Pun    
-				HK
-
-C8-48-F5   (hex)		MEDISON Xray Co., Ltd
-C848F5     (base 16)		MEDISON Xray Co., Ltd
-				3F Burim B/D 999 Daechi-dong 
-				Seoul    135-280
-				KR
-
-78-A7-14   (hex)		Amphenol
-78A714     (base 16)		Amphenol
-				20 Valley St.
-				Endicott  New York  13760
-				US
-
-F8-93-F3   (hex)		VOLANS
-F893F3     (base 16)		VOLANS
-				3F IJU BD 770-13 YEOKSAM-DONG
-				SEOUL    135-928
-				KR
-
-78-66-AE   (hex)		ZTEC Instruments, Inc.
-7866AE     (base 16)		ZTEC Instruments, Inc.
-				7715 Tiburon St. NE
-				Albuquerque  NM  87109
-				US
-
-4C-02-2E   (hex)		CMR KOREA CO., LTD
-4C022E     (base 16)		CMR KOREA CO., LTD
-				6F, J-Tower, 24-5 Bangi-dong, Songpa-Gu
-				Seoul    138-050
-				KR
-
-34-AA-EE   (hex)		Mikrovisatos Servisas UAB
-34AAEE     (base 16)		Mikrovisatos Servisas UAB
-				Savanoriu pr. 125
-				Kaunas    LT44146
-				LT
-
-44-D6-3D   (hex)		Talari Networks
-44D63D     (base 16)		Talari Networks
-				3200 Glen Royal Rd.
-				Raleigh   NC  27617
-				US
-
-78-A2-A0   (hex)		Nintendo Co., Ltd.
-78A2A0     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-48-FC-B8   (hex)		Woodstream Corporation
-48FCB8     (base 16)		Woodstream Corporation
-				69 N. Locust Street
-				Lititz  PA  17543
-				US
-
-D4-00-0D   (hex)		Phoenix Broadband Technologies, LLC.
-D4000D     (base 16)		Phoenix Broadband Technologies, LLC.
-				589 Bethlehem Pike
-				Montgomeryville  PA  18936
-				US
-
-AC-51-35   (hex)		MPI TECH
-AC5135     (base 16)		MPI TECH
-				Vadstrupvej 35
-				Bagsværd    DK-2880
-				DK
-
-74-B9-EB   (hex)		JinQianMao Technology Co.,Ltd.
-74B9EB     (base 16)		JinQianMao Technology Co.,Ltd.
-				Room 506 YongHeng Building NO.58 JiangBing Raod
-				FuZhou  FuJian  350005
-				CN
-
-D4-52-97   (hex)		nSTREAMS Technologies, Inc.
-D45297     (base 16)		nSTREAMS Technologies, Inc.
-				10F-2, No. 302, Ruiguang Rd., Neihu District,
-				Taipei City    114
-				TW
-
-18-80-CE   (hex)		Barberry Solutions Ltd
-1880CE     (base 16)		Barberry Solutions Ltd
-				2/13 Naviti Place
-				Auckland    0630
-				NZ
-
-24-B6-B8   (hex)		FRIEM SPA
-24B6B8     (base 16)		FRIEM SPA
-				Via Edison 1
-				Segrate  Milano  20090
-				IT
-
-A4-56-1B   (hex)		MCOT Corporation
-A4561B     (base 16)		MCOT Corporation
-				Yogohigashi 1-5-12
-				Matsuyama city  Ehime prefecture  790-0044
-				JP
-
-80-C6-3F   (hex)		Remec Broadband Wireless , LLC
-80C63F     (base 16)		Remec Broadband Wireless , LLC
-				17034 Camino San Bernardo
-				San Diego  CA  92127
-				US
-
-40-D4-0E   (hex)		Biodata Ltd
-40D40E     (base 16)		Biodata Ltd
-				10 Stocks Street
-				Manchester    M8 8QG
-				GB
-
-0C-82-6A   (hex)		Wuhan Huagong Genuine Optics Technology Co., Ltd
-0C826A     (base 16)		Wuhan Huagong Genuine Optics Technology Co., Ltd
-				Science & Technology Region of HUST, Donghu High-Tech Zone 
-				Wuhan  Hubei  430223
-				CN
-
-E0-27-1A   (hex)		TTC Next-generation Home Network System WG
-E0271A     (base 16)		TTC Next-generation Home Network System WG
-				1-1-12 Shiba Kouen
-				Minato-ku  Tokyo  105-0011
-				JP
-
-00-97-FF   (hex)		Heimann Sensor GmbH
-0097FF     (base 16)		Heimann Sensor GmbH
-				Maria-Reiche-Str. 1
-				Dresden  Sachsen  01109
-				DE
-
-E4-AB-46   (hex)		UAB Selteka
-E4AB46     (base 16)		UAB Selteka
-				DraugystÃ«s g. 19
-				Kaunas    LT-51230 
-				LT
-
-94-5B-7E   (hex)		TRILOBIT LTDA.
-945B7E     (base 16)		TRILOBIT LTDA.
-				R. ALVARENGA 1377
-				São Paulo    05509002
-				BR
-
-04-E5-48   (hex)		Cohda Wireless Pty Ltd
-04E548     (base 16)		Cohda Wireless Pty Ltd
-				Suite 5 / 83 Fullarton Road
-				Kent Town  South Australia  5067
-				AU
-
-70-71-BC   (hex)		PEGATRON CORPORATION
-7071BC     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-78-84-EE   (hex)		INDRA ESPACIO S.A.
-7884EE     (base 16)		INDRA ESPACIO S.A.
-				C/ ROC BORONAT, 133
-				BARCELONA    08018
-				ES
-
-7C-05-1E   (hex)		RAFAEL LTD.
-7C051E     (base 16)		RAFAEL LTD.
-				GUSH SEGEV POB 2250
-				HAIFA    31008
-				IL
-
-10-09-0C   (hex)		Janome Sewing Machine Co., Ltd.
-10090C     (base 16)		Janome Sewing Machine Co., Ltd.
-				1463 Hazama-Machi
-				Hachioji-Shi  Tokyo  193-0941
-				JP
-
-E0-1C-EE   (hex)		Bravo Tech, Inc.
-E01CEE     (base 16)		Bravo Tech, Inc.
-				6185 Phyllis Dr. Unit D.
-				Cypress  CA  90630
-				US
-
-28-93-FE   (hex)		Cisco Systems, Inc
-2893FE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-78-11-85   (hex)		NBS Payment Solutions Inc.
-781185     (base 16)		NBS Payment Solutions Inc.
-				703 Evans Ave
-				Toronto  Ontario  M9C 5E9
-				CA
-
-D0-58-75   (hex)		Active Control Technology Inc.
-D05875     (base 16)		Active Control Technology Inc.
-				1800 Appleby Line
-				Burlington  Ontario  L7L 6A1
-				CA
-
-C8-EF-2E   (hex)		Beijing Gefei Tech. Co., Ltd 
-C8EF2E     (base 16)		Beijing Gefei Tech. Co., Ltd 
-				A-603 Power Creative Plaza, NO.1 Shangdi E. Rd.,Haidian District, 
-				Beijing    100085
-				CN
-
-08-F6-F8   (hex)		GET Engineering
-08F6F8     (base 16)		GET Engineering
-				9350 Bond Ave
-				El Cajon  CA  92021
-				US
-
-3C-4C-69   (hex)		Infinity System S.L.
-3C4C69     (base 16)		Infinity System S.L.
-				Crtra. N-II, Km 48,5 Pol. Ind. Cabanillas del Campo, Parc. 12B
-				Guadalajara    19171
-				US
-
-78-30-E1   (hex)		UltraClenz, LLC
-7830E1     (base 16)		UltraClenz, LLC
-				1440 W Indiantown Road
-				Jupiter  FL  33458
-				US
-
-B0-91-34   (hex)		Taleo
-B09134     (base 16)		Taleo
-				4140 Dublin Blvd
-				Dublin  California  94568
-				US
-
-A4-C2-AB   (hex)		Hangzhou LEAD-IT Information & Technology Co.,Ltd
-A4C2AB     (base 16)		Hangzhou LEAD-IT Information & Technology Co.,Ltd
-				F2 Builder B,Xidomen Road NO.22
-				Hangzhou  Zhejiang  310012
-				CN
-
-48-AA-5D   (hex)		Store Electronic Systems
-48AA5D     (base 16)		Store Electronic Systems
-				39 rue de montigny
-				Argenteuil    95100
-				FR
-
-04-2F-56   (hex)		ATOCS (Shenzhen) LTD
-042F56     (base 16)		ATOCS (Shenzhen) LTD
-				4/F., Building 10, Tongfuyu Industry Zone, Xili Town,
-				Shenzhen    
-				CN
-
-E8-5E-53   (hex)		Infratec Datentechnik GmbH
-E85E53     (base 16)		Infratec Datentechnik GmbH
-				Gevener Weg 38
-				Neuenrade  NRW  58579
-				DE
-
-88-BA-7F   (hex)		Qfiednet Co., Ltd.
-88BA7F     (base 16)		Qfiednet Co., Ltd.
-				#204 KJ Bldg. DaeChi-Dong
-				Seoul    135-847
-				KR
-
-64-DB-18   (hex)		OpenPattern
-64DB18     (base 16)		OpenPattern
-				109/111 rue des Côtes
-				Maisons Laffitte  Yvelines  78600
-				FR
-
-90-A2-DA   (hex)		GHEO SA
-90A2DA     (base 16)		GHEO SA
-				Via Soldini, 22
-				Chiasso    CH-6830
-				CH
-
-98-89-ED   (hex)		Anadem Information Inc.
-9889ED     (base 16)		Anadem Information Inc.
-				2nd F, 79 Zhouzi Street, Neihu District, 
-				Taipei    114
-				TW
-
-D8-1B-FE   (hex)		TWINLINX CORPORATION
-D81BFE     (base 16)		TWINLINX CORPORATION
-				ESPACE DESCARTES BAT B
-				AIX EN PROVENCE  PROVENCE  13857
-				FR
-
-FC-44-63   (hex)		Universal Audio, Inc
-FC4463     (base 16)		Universal Audio, Inc
-				4585 Scotts Valley Dr.
-				Scotts Valley  CA  95066
-				US
-
-10-2D-96   (hex)		Looxcie Inc.
-102D96     (base 16)		Looxcie Inc.
-				1196 Borregas Ave.
-				Sunnyvale  CA  94089
-				US
-
-5C-35-DA   (hex)		There Corporation Oy
-5C35DA     (base 16)		There Corporation Oy
-				Elimäenkatu 5
-				Helsinki    00510
-				FI
-
-A0-69-86   (hex)		Wellav Technologies Ltd
-A06986     (base 16)		Wellav Technologies Ltd
-				15F Desay Building
-				Huizhou  Guangdong  516003
-				CN
-
-EC-8E-AD   (hex)		DLX
-EC8EAD     (base 16)		DLX
-				#401, Seoil B/D,1359-45 Seocho2-dong
-				Seoul    137-863
-				KR
-
-34-C6-9A   (hex)		Enecsys Ltd
-34C69A     (base 16)		Enecsys Ltd
-				Harston Mill
-				Cambridge  Cambridgeshire  CB22 7GG
-				GB
-
-D8-AE-90   (hex)		Itibia Technologies
-D8AE90     (base 16)		Itibia Technologies
-				5 Clausen Ct
-				West Windsor  NJ  08550
-				US
-
-B8-65-3B   (hex)		Bolymin, Inc.
-B8653B     (base 16)		Bolymin, Inc.
-				13F-1, No.20, Ta-Long Rd., 
-				Taichung    40310
-				TW
-
-38-E8-DF   (hex)		b gmbh medien + datenbanken
-38E8DF     (base 16)		b gmbh medien + datenbanken
-				Kurfuerstenstrasse 22
-				Ludwigsburg  BW  71636
-				DE
-
-1C-12-9D   (hex)		IEEE PES PSRC/SUB     
-1C129D     (base 16)		IEEE PES PSRC/SUB     
-				 Working Group H7/Sub C7 (IEEE PC37.238)
-				Piscataway  NJ  08854
-				US
-
-E0-CA-4D   (hex)		Shenzhen Unistar Communication Co.,LTD
-E0CA4D     (base 16)		Shenzhen Unistar Communication Co.,LTD
-				9/F,Qinghai Building,7043, Berhuan Road, Futian District, 
-				Shenzhen  Guangdong  518034
-				CN
-
-0C-C9-C6   (hex)		Samwin Hong Kong Limited
-0CC9C6     (base 16)		Samwin Hong Kong Limited
-				Rm 901-902, 9/F, Futura Plaza,
-				Hong Kong    
-				CN
-
-10-62-C9   (hex)		Adatis GmbH & Co. KG
-1062C9     (base 16)		Adatis GmbH & Co. KG
-				Forchheimer Straße 6
-				Nürnberg  Bavaria  90425
-				DE
-
-60-B3-C4   (hex)		Elber Srl
-60B3C4     (base 16)		Elber Srl
-				via Pontevecchio 42 W
-				Carasco  Ge  16042
-				IT
-
-04-C8-80   (hex)		Samtec Inc
-04C880     (base 16)		Samtec Inc
-				520 Park East Blvd
-				New Albany  IN  47150
-				US
-
-F8-8D-EF   (hex)		Tenebraex
-F88DEF     (base 16)		Tenebraex
-				27 Drydock Avenue
-				Boston  MA  02210
-				US
-
-04-22-34   (hex)		Wireless Standard Extensions
-042234     (base 16)		Wireless Standard Extensions
-				1322 Crossman avenue
-				Sunnyvale  California  94089
-				US
-
-F0-B6-EB   (hex)		Poslab Technology Co., Ltd.
-F0B6EB     (base 16)		Poslab Technology Co., Ltd.
-				5F-1, No.490 Bannan Rd.
-				Jhonghe City    235
-				TW
-
-80-C8-62   (hex)		Openpeak, Inc
-80C862     (base 16)		Openpeak, Inc
-				1750 Clint Moore Rd
-				Boca Raton  Florida  33487
-				US
-
-1C-8F-8A   (hex)		Phase Motion Control SpA
-1C8F8A     (base 16)		Phase Motion Control SpA
-				via Adamoli, 461
-				Genova    IT16141
-				IT
-
-FC-CC-E4   (hex)		Ascon Ltd.
-FCCCE4     (base 16)		Ascon Ltd.
-				1-15-27 Minato-machi
-				Fukuyama –shi  Hiroshima-ken  721-0964
-				JP
-
-58-50-E6   (hex)		Best Buy Corporation
-5850E6     (base 16)		Best Buy Corporation
-				7601 Penn Ave South
-				Richfield  MN  55423
-				US
-
-3C-1C-BE   (hex)		JADAK LLC
-3C1CBE     (base 16)		JADAK LLC
-				7279 William Barry Blvd
-				North Syracuse  NY  13212
-				US
-
-BC-D5-B6   (hex)		d2d technologies
-BCD5B6     (base 16)		d2d technologies
-				10611 roundwood glen ct
-				Jacksonville  Fl  32256
-				US
-
-FC-68-3E   (hex)		Directed Perception, Inc
-FC683E     (base 16)		Directed Perception, Inc
-				890C Cowan Road
-				Burlingame  California  94010
-				US
-
-28-E7-94   (hex)		Microtime Computer Inc.
-28E794     (base 16)		Microtime Computer Inc.
-				4F, No. 222, Sec. 4, Cheng-Teh Rd., 
-				Taipei    11167
-				TW
-
-0C-D5-02   (hex)		Westell Technologies Inc.
-0CD502     (base 16)		Westell Technologies Inc.
-				750 N Commons Dr
-				Aurora  IL  60504
-				US
-
-70-82-8E   (hex)		OleumTech Corporation
-70828E     (base 16)		OleumTech Corporation
-				23 Hubble
-				Irvine  CA  92618
-				US
-
-A4-38-FC   (hex)		Plastic Logic
-A438FC     (base 16)		Plastic Logic
-				650 Castro St., Suite 500
-				Mountain View  CA  94041
-				US
-
-18-FC-9F   (hex)		Changhe Electronics Co., Ltd.
-18FC9F     (base 16)		Changhe Electronics Co., Ltd.
-				6th Floor, Building B, Dajiahao Square, YuÂ¡Â¯an 1st Road, BaoÂ¡Â¯an, 
-				Shenzhen  Guangdong  518101
-				CN
-
-94-59-2D   (hex)		EKE Building Technology Systems Ltd
-94592D     (base 16)		EKE Building Technology Systems Ltd
-				Piispanportti 7
-				Espoo  -  02240
-				US
-
-CC-69-B0   (hex)		Global Traffic Technologies, LLC
-CC69B0     (base 16)		Global Traffic Technologies, LLC
-				7800 Third Street North
-				St. Paul  Minnesota  55128
-				US
-
-A0-59-3A   (hex)		V.D.S. Video Display Systems srl
-A0593A     (base 16)		V.D.S. Video Display Systems srl
-				Via Del Pantano 71
-				SCANDICCI  FI  50018
-				IT
-
-CC-EA-1C   (hex)		DCONWORKS  Co., Ltd
-CCEA1C     (base 16)		DCONWORKS  Co., Ltd
-				182-13 Daerung Post Tower 2nd 5F
-				Seoul    152-847
-				KR
-
-7C-08-D9   (hex)		Shanghai B-Star Technology Co
-7C08D9     (base 16)		Shanghai B-Star Technology Co
-				1158 Xiehe Road
-				Shanghai    200335
-				CN
-
-20-59-A0   (hex)		Paragon Technologies Inc.
-2059A0     (base 16)		Paragon Technologies Inc.
-				68 North 4th Ring Rd West,
-				Beijing    100080
-				CN
-
-38-E9-8C   (hex)		Reco S.p.A.
-38E98C     (base 16)		Reco S.p.A.
-				via dell'Industria, 8
-				Montano Lucino  CO  22070
-				IT
-
-A0-BF-A5   (hex)		CORESYS
-A0BFA5     (base 16)		CORESYS
-				267-1 Nonhyundong Gangnamgu
-				Seoul    135-833
-				KR
-
-B0-5B-1F   (hex)		THERMO FISHER SCIENTIFIC S.P.A.
-B05B1F     (base 16)		THERMO FISHER SCIENTIFIC S.P.A.
-				STRADA RIVOLTANA KM 6/7
-				RODANO  MILAN  20090
-				IT
-
-24-D2-CC   (hex)		SmartDrive Systems Inc.
-24D2CC     (base 16)		SmartDrive Systems Inc.
-				9276 Scranton Road
-				San Diego  CA  92121
-				US
-
-0C-EF-7C   (hex)		AnaCom Inc
-0CEF7C     (base 16)		AnaCom Inc
-				1996 Lundy Ave
-				San Jose  CA  95131
-				US
-
-EC-E9-F8   (hex)		Guang Zhou TRI-SUN Electronics Technology  Co., Ltd
-ECE9F8     (base 16)		Guang Zhou TRI-SUN Electronics Technology  Co., Ltd
-				9th floor Guangzhou info port building B, Keyun Road, Tianhe District, Guangzhou ,PRC
-				Guangzhou  Guangdong  510665
-				CN
-
-34-CE-94   (hex)		Parsec (Pty) Ltd
-34CE94     (base 16)		Parsec (Pty) Ltd
-				Building 8-10 Manhattan Office Park
-				Centurion  Gauteng  0157
-				ZA
-
-34-EF-8B   (hex)		NTT Communications Corporation
-34EF8B     (base 16)		NTT Communications Corporation
-				NTT Hibiya Bldg. 7F
-				Chiyoda-ku  Tokyo  100-8019
-				JP
-
-68-7F-74   (hex)		Cisco-Linksys, LLC
-687F74     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-D0-D2-86   (hex)		Beckman Coulter K.K.
-D0D286     (base 16)		Beckman Coulter K.K.
-				454-32 Higashino,
-				Nagaizumi-cho, Sunto-gun,  Shizuoka-ken  411-0943
-				JP
-
-C4-19-8B   (hex)		Dominion Voting Systems Corporation
-C4198B     (base 16)		Dominion Voting Systems Corporation
-				215 Spadina Avenue
-				Toronto  Ontario  M5T 2C7
-				CA
-
-C8-3A-35   (hex)		Tenda Technology Co., Ltd.
-C83A35     (base 16)		Tenda Technology Co., Ltd.
-				Room 601-602,R/D Building Complex,Tsinghua High-Tech Park,nanshan district
-				Shenzhen  Guandong  518057
-				CN
-
-6C-8C-DB   (hex)		Otus Technologies Ltd
-6C8CDB     (base 16)		Otus Technologies Ltd
-				26 Braid Road
-				Edinburgh  Morningside  EH10 6AD
-				GB
-
-40-F5-2E   (hex)		Leica Microsystems (Schweiz) AG
-40F52E     (base 16)		Leica Microsystems (Schweiz) AG
-				Max Schmidheiny-Strasse 201
-				Heerbrugg  SG  9435
-				CH
-
-E4-FF-DD   (hex)		ELECTRON INDIA
-E4FFDD     (base 16)		ELECTRON INDIA
-				TYPE II, NO.9, DR. V.S.I. ESTATE
-				CHENNAI  TAMIL NADU  600 041
-				IN
-
-68-A1-B7   (hex)		Honghao Mingchuan Technology (Beijing) CO.,Ltd.
-68A1B7     (base 16)		Honghao Mingchuan Technology (Beijing) CO.,Ltd.
-				Floor 8,Tower A, Wanliu Yicheng Building
-				Beijing    100089
-				CN
-
-0C-D7-C2   (hex)		Axium Technologies, Inc.
-0CD7C2     (base 16)		Axium Technologies, Inc.
-				6625 N. Calle Eva Miranda
-				Irwindale  CA  91702
-				US
-
-E8-4E-CE   (hex)		Nintendo Co., Ltd.
-E84ECE     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-10-45-F8   (hex)		LNT-Automation GmbH
-1045F8     (base 16)		LNT-Automation GmbH
-				Hans-Paul-Kaysser-Straße 1
-				Leutenbach-Nellmersbach  BW  D-71397
-				DE
-
-DC-E7-1C   (hex)		AUG Elektronik GmbH
-DCE71C     (base 16)		AUG Elektronik GmbH
-				Kleinwoellmiss 53
-				St. Martin a. W.  Styria  A-8580
-				AT
-
-A8-70-A5   (hex)		UniComm Inc.
-A870A5     (base 16)		UniComm Inc.
-				7F-7, No. 716, Chung-Cheng Road,
-				Chung-Ho City  Taipei Hsien  23500
-				TW
-
-F8-47-2D   (hex)		X2gen Digital Corp. Ltd
-F8472D     (base 16)		X2gen Digital Corp. Ltd
-				# 89, Singlong Rd 
-				Pin-Jhen City,     324
-				TW
-
-08-18-4C   (hex)		A. S. Thomas, Inc.
-08184C     (base 16)		A. S. Thomas, Inc.
-				355 Providence Hwy
-				Westwood  MA  02090
-				US
-
-10-88-0F   (hex)		Daruma Telecomunicações e Informática S.A.
-10880F     (base 16)		Daruma Telecomunicações e Informática S.A.
-				AVENIDA INDEPENDENCIA, 3500, LOTEAMENTO INDUSTRIAL
-				Taubaté  São Paulo  12032-000
-				BR
-
-FC-61-98   (hex)		NEC Personal Products, Ltd
-FC6198     (base 16)		NEC Personal Products, Ltd
-				6-80, Shimohanazawa 2-chome,
-				Yonezawa-shi  Yamagata  992-8520
-				JP
-
-74-D8-50   (hex)		Evrisko Systems
-74D850     (base 16)		Evrisko Systems
-				2322 Alpine Rd, Ste 10
-				Eau Claire  WI  54703
-				US
-
-54-B6-20   (hex)		SUHDOL E&C Co.Ltd.
-54B620     (base 16)		SUHDOL E&C Co.Ltd.
-				920, Ilsan TechnoTown 1141-1, Baekseok-dong, Ilsandong-gu
-				Goyang-si  Gyunggi-do  410-722
-				KR
-
-78-C4-0E   (hex)		H&D Wireless
-78C40E     (base 16)		H&D Wireless
-				Sjövägen 17
-				Solna    169 55
-				SE
-
-2C-06-23   (hex)		Win Leader Inc.
-2C0623     (base 16)		Win Leader Inc.
-				Level 3 ,Alexander House,
-				Ebene    
-				MU
-
-0C-27-55   (hex)		Valuable Techologies Limited
-0C2755     (base 16)		Valuable Techologies Limited
-				602, Centre Point, J.B.Nagar,
-				Mumbai  Maharashtra  400059
-				IN
-
-78-99-8F   (hex)		MEDILINE ITALIA SRL
-78998F     (base 16)		MEDILINE ITALIA SRL
-				VIA 8 MARZO, 4
-				CORTE TEGGE  REGGIO NELL'EMILIA  42025
-				IT
-
-40-EC-F8   (hex)		Siemens AG
-40ECF8     (base 16)		Siemens AG
-				I IS MS EDM
-				Munich  Germany  85630
-				DE
-
-BC-B1-81   (hex)		SHARP CORPORATION
-BCB181     (base 16)		SHARP CORPORATION
-				22-22,Nagaike-cho,
-				Osaka,    545-8522,
-				JP
-
-C8-87-3B   (hex)		Net Optics
-C8873B     (base 16)		Net Optics
-				5303 Betsy Ross Drive
-				Santa Clara  CA  95054
-				US
-
-A8-CE-90   (hex)		CVC
-A8CE90     (base 16)		CVC
-				No.361,Renhua Rd.,
-				Dali City  Taichung  412
-				TW
-
-E4-1F-13   (hex)		IBM Corp
-E41F13     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-70-1A-ED   (hex)		ADVAS CO., LTD.
-701AED     (base 16)		ADVAS CO., LTD.
-				3-8-8 Shin-yokohama, Kohoku-ku
-				Yokohama-shi  Kanagawa-ken  222-0033
-				JP
-
-64-65-C0   (hex)		Nuvon, Inc
-6465C0     (base 16)		Nuvon, Inc
-				3130 Alpine Road
-				Portola Valley  California  94028
-				US
-
-7C-1E-B3   (hex)		2N TELEKOMUNIKACE a.s.
-7C1EB3     (base 16)		2N TELEKOMUNIKACE a.s.
-				Modranska 621
-				Prague    143 01
-				CZ
-
-44-56-B7   (hex)		Spawn Labs, Inc
-4456B7     (base 16)		Spawn Labs, Inc
-				2209 Granger Lane
-				Austin  TX  78613
-				US
-
-44-C9-A2   (hex)		Greenwald Industries
-44C9A2     (base 16)		Greenwald Industries
-				212 Middlesex Avenue
-				Chester  CT  06412
-				US
-
-90-6D-C8   (hex)		DLG Automação Industrial Ltda
-906DC8     (base 16)		DLG Automação Industrial Ltda
-				Rua José Batista Soares, 53
-				Sertãozinho  São Paulo  14176-119
-				BR
-
-58-4C-EE   (hex)		Digital One Technologies, Limited
-584CEE     (base 16)		Digital One Technologies, Limited
-				Room 2203, No.1 Shangdi Xinxi Road
-				Beijing    100085
-				CN
-
-00-27-21   (hex)		Shenzhen Baoan Fenda Industrial Co., Ltd
-002721     (base 16)		Shenzhen Baoan Fenda Industrial Co., Ltd
-				Fenda Hi-Tech Park
-				Baoan   Shenzhen  518108
-				CN
-
-A0-73-32   (hex)		Cashmaster International Limited
-A07332     (base 16)		Cashmaster International Limited
-				Fairykirk Road
-				Rosyth  Fife  KY11 2QQ
-				GB
-
-64-C6-AF   (hex)		AXERRA Networks Ltd
-64C6AF     (base 16)		AXERRA Networks Ltd
-				24  Raoul Wallenberg St. , 
-				Tel-Aviv    ISRAEL  69719
-				IL
-
-44-56-8D   (hex)		PNC Technologies  Co., Ltd.
-44568D     (base 16)		PNC Technologies  Co., Ltd.
-				Development Center
-				Anyang  Gyeonggi-Do  431-836
-				KR
-
-40-61-86   (hex)		MICRO-STAR INT'L CO.,LTD
-406186     (base 16)		MICRO-STAR INT'L CO.,LTD
-				No.69,Li-De St
-				Jung-Ho City  Taipei Hsien  235
-				TW
-
-00-26-F5   (hex)		XRPLUS Inc.
-0026F5     (base 16)		XRPLUS Inc.
-				#805 Ace Techno Tower 2nd 197-17
-				Seoul    152-766
-				KR
-
-00-26-F8   (hex)		Golden Highway Industry Development Co., Ltd.
-0026F8     (base 16)		Golden Highway Industry Development Co., Ltd.
-				Floor 7, Block 8, Vision Shenzhen Business Park, No.9 Gaoxin 9th South Road
-				Shenzhen City  Guangdong Province  518057
-				CN
-
-00-26-F4   (hex)		Nesslab
-0026F4     (base 16)		Nesslab
-				489-2 Maetan 3-dong, Yeong Tong-gu
-				Suwon-si  Gyeonggi-do  443-803
-				KR
-
-00-26-EE   (hex)		TKM GmbH
-0026EE     (base 16)		TKM GmbH
-				Schlossstraße 123
-				Mönchengladbach  NRW  41238
-				DE
-
-00-26-EF   (hex)		Technology Advancement Group, Inc.
-0026EF     (base 16)		Technology Advancement Group, Inc.
-				22355 Tag Way
-				Dulles  VA  20166-9310
-				US
-
-00-26-B2   (hex)		Setrix GmbH
-0026B2     (base 16)		Setrix GmbH
-				Josephspitalstr. 15
-				Muenchen  Bayern  80331
-				DE
-
-00-26-AF   (hex)		Duelco A/S
-0026AF     (base 16)		Duelco A/S
-				Mommarkvej 5
-				Soenderborg  Soenderjylland  DK6400
-				DK
-
-00-26-B3   (hex)		Thales Communications Inc
-0026B3     (base 16)		Thales Communications Inc
-				22605 Gateway Center Drive
-				Clarksburg  MD  20871
-				US
-
-00-26-A7   (hex)		CONNECT SRL
-0026A7     (base 16)		CONNECT SRL
-				Via Cernaia, 11
-				Milan    20121
-				IT
-
-00-26-A4   (hex)		Novus Produtos Eletronicos Ltda
-0026A4     (base 16)		Novus Produtos Eletronicos Ltda
-				Rua Alvaro Chaves, 155
-				Porto Alegre  RS  90220-040
-				BR
-
-00-26-D8   (hex)		Magic Point Inc.
-0026D8     (base 16)		Magic Point Inc.
-				Suite 203, Building 17, No. 295 Lin Nan Road, Pudong Software Park Sanlin World Expo Block
-				Shanghai    2000126
-				CN
-
-00-26-D6   (hex)		Ningbo Andy Optoelectronic Co., Ltd.
-0026D6     (base 16)		Ningbo Andy Optoelectronic Co., Ltd.
-				Lanjiang Street Industrial Zone
-				Yuyao  Zhejiang  315400
-				CN
-
-00-27-0F   (hex)		Envisionnovation Inc
-00270F     (base 16)		Envisionnovation Inc
-				4 Wareham Drive
-				Mississauga  Ontario  L5M 1B6
-				CA
-
-00-27-0A   (hex)		IEE S.A.
-00270A     (base 16)		IEE S.A.
-				ZAE Weiergewan
-				Contern    L-5326
-				LU
-
-00-27-09   (hex)		Nintendo Co., Ltd.
-002709     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-26-D3   (hex)		Zeno Information System
-0026D3     (base 16)		Zeno Information System
-				#1404 A-Dong Digital Empire Bldg, 980-3, Youngtong-dong, Youngtong-gu
-				Suwon City  Gyeonggi-Do  443-702
-				KR
-
-00-26-D1   (hex)		S Squared Innovations Inc.
-0026D1     (base 16)		S Squared Innovations Inc.
-				6807-104 Street
-				Edmonton  AB  T6H 2L5
-				CA
-
-00-26-CB   (hex)		Cisco Systems, Inc
-0026CB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-27-01   (hex)		INCOstartec GmbH
-002701     (base 16)		INCOstartec GmbH
-				Rheinstraße 17
-				Teltow  Germany  14513
-				DE
-
-00-26-FB   (hex)		AirDio Wireless, Inc.
-0026FB     (base 16)		AirDio Wireless, Inc.
-				13-5, No. 79, Sec. 1, Hsin Tai Wu Road
-				Hsichih City, Taipei County  Taiwan  22101
-				TW
-
-00-27-1A   (hex)		Geenovo Technology Ltd.
-00271A     (base 16)		Geenovo Technology Ltd.
-				Unit 402, 4/F., Tower I,SHUI QING MU HUA YUAN,
-				Beijing    100080
-				CN
-
-00-27-14   (hex)		Grainmustards, Co,ltd.
-002714     (base 16)		Grainmustards, Co,ltd.
-				HEIWA MK Bldg,2-48-4,Nihonbashi-Hama-cho
-				Tokyo    103-0007
-				JP
-
-00-27-15   (hex)		Rebound Telecom. Co., Ltd
-002715     (base 16)		Rebound Telecom. Co., Ltd
-				12F,Building No.82,No.1198,North Qinzhou Rd,
-				Shanghai    200233
-				CN
-
-00-26-E6   (hex)		Visionhitech Co., Ltd.
-0026E6     (base 16)		Visionhitech Co., Ltd.
-				Vision bldg. 150-3
-				Buchon  Kyunggi-Do  420-822
-				KR
-
-00-26-DF   (hex)		TaiDoc Technology Corp.
-0026DF     (base 16)		TaiDoc Technology Corp.
-				7F, No. 127, Wugong 2nd Rd., 24888 Wugu Township
-				Taipei County  Taiwan  24888
-				TW
-
-00-26-6A   (hex)		ESSENSIUM NV
-00266A     (base 16)		ESSENSIUM NV
-				Gaston Geenslaan 9
-				LEUVEN  VL BRABANT  3001
-				BE
-
-00-26-6B   (hex)		SHINE UNION ENTERPRISE LIMITED
-00266B     (base 16)		SHINE UNION ENTERPRISE LIMITED
-				UNIT 1211, 12FL., CHEVALIER COMMERCIAL CENTER,
-				KOWLOON    NIL
-				HK
-
-00-26-67   (hex)		CARECOM CO.,LTD.
-002667     (base 16)		CARECOM CO.,LTD.
-				3-35-4
-				Chofu  Tokyo  182-0025
-				JP
-
-00-26-A2   (hex)		Instrumentation Technology Systems
-0026A2     (base 16)		Instrumentation Technology Systems
-				19360 Business Center Drive
-				Northridge  CA  91324
-				US
-
-00-26-9F   (hex)		Private
-00269F     (base 16)		Private
-
-00-26-99   (hex)		Cisco Systems, Inc
-002699     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-26-47   (hex)		WFE TECHNOLOGY CORP.
-002647     (base 16)		WFE TECHNOLOGY CORP.
-				17F NO.238,Chin-Hua N Rd,
-				Taichung    404
-				TW
-
-00-26-40   (hex)		Baustem Broadband Technologies, Ltd.
-002640     (base 16)		Baustem Broadband Technologies, Ltd.
-				910 Quantum Plaza
-				Beijing    100191
-				CN
-
-00-26-53   (hex)		DaySequerra Corporation
-002653     (base 16)		DaySequerra Corporation
-				154 Cooper Road
-				West Berlin  NJ  08091
-				US
-
-00-26-7B   (hex)		GSI Helmholtzzentrum für Schwerionenforschung GmbH
-00267B     (base 16)		GSI Helmholtzzentrum für Schwerionenforschung GmbH
-				Planckstraße 1
-				Darmstadt  Hessen  64291
-				DE
-
-00-26-87   (hex)		corega K.K
-002687     (base 16)		corega K.K
-				1-19-20, Shinyokohama
-				Yokohama-city  Kanagawa-ken  222-0033
-				JP
-
-00-26-8D   (hex)		CellTel S.p.A.
-00268D     (base 16)		CellTel S.p.A.
-				Via Romano 72
-				Scarmagno  Torino  10010
-				IT
-
-00-26-28   (hex)		companytec automação e controle ltda.
-002628     (base 16)		companytec automação e controle ltda.
-				Rua Marcilio Dias 3005
-				Pelotas  Rio Grande do Sul  96020-480
-				BR
-
-00-26-1F   (hex)		SAE Magnetics (H.K.) Ltd.
-00261F     (base 16)		SAE Magnetics (H.K.) Ltd.
-				SAE Technology Centre
-				Hong Kong Science Park  Shatin, New Territories  
-				HK
-
-00-26-1E   (hex)		QINGBANG ELEC(SZ) CO., LTD
-00261E     (base 16)		QINGBANG ELEC(SZ) CO., LTD
-				No. 2, qimin Rd. North District, High-tech Industrial Park, Nanshan,
-				Shenzhen  Guangdong  518000
-				CN
-
-00-26-19   (hex)		FRC
-002619     (base 16)		FRC
-				1511 South Benjamin Avenue
-				Mason City  IA  50401
-				US
-
-00-25-EA   (hex)		Iphion BV
-0025EA     (base 16)		Iphion BV
-				Willemstraat 106
-				Eindhoven    5616GE
-				NL
-
-00-25-F0   (hex)		Suga Electronics Limited
-0025F0     (base 16)		Suga Electronics Limited
-				Units 1904-1907, Chevalier Commercial Centre,
-				Kowloon Bay  Hong Kong  
-				CN
-
-00-25-E8   (hex)		Idaho Technology
-0025E8     (base 16)		Idaho Technology
-				390 Wakara way
-				Salt Lake city  UT  84108
-				US
-
-00-25-E4   (hex)		OMNI-WiFi, LLC
-0025E4     (base 16)		OMNI-WiFi, LLC
-				70 Sullivan Street
-				Berwick  Maine  03901
-				US
-
-00-25-FC   (hex)		ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.
-0025FC     (base 16)		ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.
-				Y. Dudullu Barbaros C. Kutup S. No. 20
-				Istanbul    34775
-				TR
-
-00-25-FA   (hex)		J&M Analytik AG
-0025FA     (base 16)		J&M Analytik AG
-				Willy-Messerschmitt-Strasse 8
-				Essingen  BW  73457
-				DE
-
-00-26-33   (hex)		MIR - Medical International Research
-002633     (base 16)		MIR - Medical International Research
-				Via del Maggiolino 125
-				Rome  RM  00155
-				IT
-
-00-25-D7   (hex)		CEDO
-0025D7     (base 16)		CEDO
-				Videnska 127
-				BRNO    61900
-				CZ
-
-00-25-D8   (hex)		KOREA MAINTENANCE
-0025D8     (base 16)		KOREA MAINTENANCE
-				3F HAELIM BUIDING 103-7, GURO-5DONG
-				SEOUL    152-842
-				KR
-
-00-25-D2   (hex)		InpegVision Co., Ltd
-0025D2     (base 16)		InpegVision Co., Ltd
-				226-3, Bugok-dong, Geumjeong-gu,
-				Busan    609-320
-				KR
-
-00-26-30   (hex)		ACOREL S.A.S
-002630     (base 16)		ACOREL S.A.S
-				3, Rue Paul LANGEVIN
-				SAINT-PERAY    F-07130
-				FR
-
-00-26-2A   (hex)		Proxense, LLC
-00262A     (base 16)		Proxense, LLC
-				689 NW Stonepine Dr
-				Bend  Oregon  97701
-				US
-
-00-25-FE   (hex)		Pilot Electronics Corporation
-0025FE     (base 16)		Pilot Electronics Corporation
-				No. 2, Tzu-Chiang 3rd Road, Chung-Li Industrial Zone,
-				Taoyuan   Hsien  32063
-				TW
-
-00-25-7B   (hex)		STJ  ELECTRONICS  PVT  LTD
-00257B     (base 16)		STJ  ELECTRONICS  PVT  LTD
-				X-24 OKHLA  INDUSTRIAL  AREA
-				NEW  DELHI  DELHI  110 020
-				IN
-
-00-25-7C   (hex)		Huachentel Technology Development Co., Ltd
-00257C     (base 16)		Huachentel Technology Development Co., Ltd
-				747 XinYu Rd. High-Tech Zone
-				Jinan  Shandong Province  250101
-				CN
-
-00-25-75   (hex)		FiberPlex Technologies, LLC
-002575     (base 16)		FiberPlex Technologies, LLC
-				10840-412 Guilford Rd
-				Annapolis Junction  MD  20701
-				US
-
-00-25-70   (hex)		Eastern Communications Company Limited
-002570     (base 16)		Eastern Communications Company Limited
-				No.398 Wensan Road,
-				Hangzhou  Zhejiang  310013
-				CN
-
-00-25-9B   (hex)		Beijing PKUNITY Microsystems Technology Co., Ltd
-00259B     (base 16)		Beijing PKUNITY Microsystems Technology Co., Ltd
-				11th Floor, Resource Plaza, No.151 North Zhongguancun Street
-				Beijing    100080
-				CN
-
-00-25-96   (hex)		GIGAVISION srl
-002596     (base 16)		GIGAVISION srl
-				Via Figini, 16
-				Muggiò  Milano  20053
-				IT
-
-00-25-95   (hex)		Northwest Signal Supply, Inc
-002595     (base 16)		Northwest Signal Supply, Inc
-				12965 SW Herman Rd
-				Tualatin  OR  97062
-				US
-
-00-25-C9   (hex)		SHENZHEN HUAPU DIGITAL CO., LTD
-0025C9     (base 16)		SHENZHEN HUAPU DIGITAL CO., LTD
-				Futian District,Chegongmiao,TianAn Cyberpark
-				ShenZhen  Guangdong Province  518040
-				CN
-
-00-25-8F   (hex)		Trident Microsystems, Inc.
-00258F     (base 16)		Trident Microsystems, Inc.
-				3408 Garrett Drive
-				Santa Clara  CA  95054
-				US
-
-00-25-89   (hex)		Hills Industries Limited
-002589     (base 16)		Hills Industries Limited
-				5 Cambria Road
-				Melbourne  VIC  3173
-				AU
-
-00-25-85   (hex)		KOKUYO S&T Co., Ltd.
-002585     (base 16)		KOKUYO S&T Co., Ltd.
-				1-8-35
-				Minato-ku  Tokyo  108-8710
-				JP
-
-00-25-81   (hex)		x-star networks Inc.
-002581     (base 16)		x-star networks Inc.
-				1F,NO1-2,Chungching S.Rd.Sec 3
-				Taipei    10076
-				TW
-
-00-25-B5   (hex)		Cisco Systems, Inc
-0025B5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-25-BE   (hex)		Tektrap Systems Inc.
-0025BE     (base 16)		Tektrap Systems Inc.
-				15 Buteau St.
-				Gatineau  Quebec  J8Z 1V4
-				CA
-
-00-25-A0   (hex)		Nintendo Co., Ltd.
-0025A0     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-25-4D   (hex)		Singapore Technologies Electronics Limited
-00254D     (base 16)		Singapore Technologies Electronics Limited
-				24 Ang Mo Kio
-				    569061
-				SG
-
-00-25-4C   (hex)		Videon Central, Inc.
-00254C     (base 16)		Videon Central, Inc.
-				2171 Sandy Drive
-				State College  PA  16803
-				US
-
-00-25-43   (hex)		MONEYTECH
-002543     (base 16)		MONEYTECH
-				Rua Guiratinga 931 un. 103
-				São Paulo  SP  04141-001
-				BR
-
-00-25-5B   (hex)		CoachComm, LLC
-00255B     (base 16)		CoachComm, LLC
-				205 Technology Parkway
-				Auburn  AL  36830
-				US
-
-00-25-16   (hex)		Integrated Design Tools, Inc.
-002516     (base 16)		Integrated Design Tools, Inc.
-				1202 E Park Avenue
-				Tallahassee  FL  32301
-				US
-
-00-25-10   (hex)		Pico-Tesla Magnetic Therapies
-002510     (base 16)		Pico-Tesla Magnetic Therapies
-				7852 South Elati
-				Littleton  CO  80120
-				US
-
-00-25-6A   (hex)		inIT - Institut Industrial IT
-00256A     (base 16)		inIT - Institut Industrial IT
-				Liebigstrasse 87
-				Lemgo  Northrhine-Westfalia  32657
-				DE
-
-00-25-62   (hex)		interbro Co. Ltd.
-002562     (base 16)		interbro Co. Ltd.
-				6F Joyang B/D, 113 Samseong-Dong, Gangnam-Gu
-				Seoul    135-090
-				KR
-
-00-25-20   (hex)		SMA Railway Technology GmbH
-002520     (base 16)		SMA Railway Technology GmbH
-				Miramstraße 87
-				Kassel  Hesse  34123
-				DE
-
-00-25-27   (hex)		Bitrode Corp.
-002527     (base 16)		Bitrode Corp.
-				9787 Green Park Industrial Drive
-				St. Louis  MO  63123
-				US
-
-00-25-25   (hex)		CTERA Networks Ltd.
-002525     (base 16)		CTERA Networks Ltd.
-				24 Imber St.
-				Petach-Tikva    495111
-				IL
-
-00-25-51   (hex)		SE-Elektronic GmbH
-002551     (base 16)		SE-Elektronic GmbH
-				Eythstraße 16
-				Göppingen    73037
-				DE
-
-00-25-3A   (hex)		CEVA, Ltd.
-00253A     (base 16)		CEVA, Ltd.
-				2 Maskit Street.
-				Herzelia    46120
-				IL
-
-00-24-A2   (hex)		Hong Kong Middleware Technology Limited
-0024A2     (base 16)		Hong Kong Middleware Technology Limited
-				Room 1315 ,Leighton Centre,77 Leighton Road
-				Causeway Bay    852
-				HK
-
-00-24-B9   (hex)		Wuhan Higheasy Electronic Technology Development Co.Ltd
-0024B9     (base 16)		Wuhan Higheasy Electronic Technology Development Co.Ltd
-				Bldg A2 Optics Valley Software Park,Guanshan 1st Rd,
-				Wuhan  Hubei  430033
-				CN
-
-00-24-BD   (hex)		Hainzl Industriesysteme GmbH
-0024BD     (base 16)		Hainzl Industriesysteme GmbH
-				Industriezeile 56
-				Linz  Upper Austria  4021
-				AT
-
-00-24-B6   (hex)		Seagate Technology
-0024B6     (base 16)		Seagate Technology
-				1280 Disc Drive
-				Shakopee  MN  55379
-				US
-
-00-24-F7   (hex)		Cisco Systems, Inc
-0024F7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-E5   (hex)		Seer Technology, Inc
-0024E5     (base 16)		Seer Technology, Inc
-				2681 Parleys Way
-				Salt Lake City  Utah  84109
-				US
-
-00-24-E2   (hex)		HASEGAWA ELECTRIC CO.,LTD.
-0024E2     (base 16)		HASEGAWA ELECTRIC CO.,LTD.
-				5-6-20 SHIOE
-				AMAGASAKI  HYOGO  661-0976
-				JP
-
-00-24-E0   (hex)		DS Tech, LLC
-0024E0     (base 16)		DS Tech, LLC
-				2210 Hutton Drive
-				Carrollton  TX  75006
-				US
-
-00-24-F3   (hex)		Nintendo Co., Ltd.
-0024F3     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-25-01   (hex)		JSC Supertel
-002501     (base 16)		JSC Supertel
-				38A Petrogradskaya emb.
-				St.Petersburg    197101
-				RU
-
-00-24-C8   (hex)		Broadband Solutions Group
-0024C8     (base 16)		Broadband Solutions Group
-				1101 Marina Village Parkway
-				Alameda  CA  94501
-				US
-
-00-24-C5   (hex)		Meridian Audio Limited
-0024C5     (base 16)		Meridian Audio Limited
-				11 Latham Road
-				Huntingdon  Cambs  PE29 6YE
-				GB
-
-00-24-96   (hex)		Ginzinger electronic systems
-002496     (base 16)		Ginzinger electronic systems
-				Gewerbegebiet Pirath 16
-				Weng  Upper Austria  4952
-				AT
-
-00-24-99   (hex)		Aquila Technologies
-002499     (base 16)		Aquila Technologies
-				8429A Washington Place NE
-				Albuquerque  NM  87113
-				US
-
-00-24-8A   (hex)		Kaga Electronics Co., Ltd.
-00248A     (base 16)		Kaga Electronics Co., Ltd.
-				Hongo 2-2-9
-				  Tokyo  113-8503
-				JP
-
-00-24-35   (hex)		WIDE CORPORATION
-002435     (base 16)		WIDE CORPORATION
-				LEADERS TOWER 7TH FL., GOMAE-DONG, GIHEUNG-GU
-				YONGIN  GYEONGGI  446-901
-				KR
-
-00-24-31   (hex)		Uni-v co.,ltd
-002431     (base 16)		Uni-v co.,ltd
-				5/F,COFCO Property Tower,
-				Shenzhen  Guangdong  518126
-				CN
-
-00-24-32   (hex)		Neostar Technology Co.,LTD
-002432     (base 16)		Neostar Technology Co.,LTD
-				8F., No.102, Sec. 1, Sintai 5th Rd.
-				Sijhih City  Taipei  22161
-				TW
-
-00-24-43   (hex)		Nortel Networks
-002443     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75081
-				US
-
-00-24-41   (hex)		Wanzl Metallwarenfabrik GmbH
-002441     (base 16)		Wanzl Metallwarenfabrik GmbH
-				Bubesheimer Straße 4
-				Leipheim  Bavaria  89340
-				DE
-
-00-24-3B   (hex)		CSSI (S) Pte Ltd
-00243B     (base 16)		CSSI (S) Pte Ltd
-				70 Bendemeer Road Unit 04-04
-				    339940
-				SG
-
-00-24-51   (hex)		Cisco Systems, Inc
-002451     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-4A   (hex)		Voyant International
-00244A     (base 16)		Voyant International
-				444 Castro St
-				Mountain View  CA  94041
-				US
-
-00-24-47   (hex)		Kaztek Systems
-002447     (base 16)		Kaztek Systems
-				17 Bromfield Road
-				Acton  MA  01720
-				US
-
-00-24-77   (hex)		Tibbo Technology
-002477     (base 16)		Tibbo Technology
-				9F-3, No 31, Lane 169, Kang-Ning St.,
-				Hsi-Chih  Taipei Hsien  221
-				TW
-
-00-24-6E   (hex)		Phihong USA Corp.
-00246E     (base 16)		Phihong USA Corp.
-				47800 Fremont Blvd.
-				Fremont  CA  94538
-				US
-
-00-24-5D   (hex)		Terberg besturingstechniek B.V.
-00245D     (base 16)		Terberg besturingstechniek B.V.
-				Lage Dijk-Noord 3
-				IJsselstein  Utrecht  3401 VA
-				NL
-
-00-24-50   (hex)		Cisco Systems, Inc
-002450     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-58   (hex)		PA Bastion CC
-002458     (base 16)		PA Bastion CC
-				97, liter K, Buddyonnovsky ave.
-				Rostov-on-Don    344011
-				RU
-
-00-24-73   (hex)		3COM EUROPE LTD
-002473     (base 16)		3COM EUROPE LTD
-				Peoplebuilding 2
-				Hemel Hempstead  HERTS.  HP2 4NW
-				GB
-
-00-24-6B   (hex)		Covia, Inc.
-00246B     (base 16)		Covia, Inc.
-				Benex S-3 Bldg., 3-20-8, Shinyokohama,Kohoku-ku,
-				Yokohama-city  Kanagawa-pref.  222-0033
-				JP
-
-00-23-F5   (hex)		WILO SE
-0023F5     (base 16)		WILO SE
-				Nortkirchenstraße 100
-				D - 44263 Dortmund  NRW  44263
-				DE
-
-00-23-FF   (hex)		Beijing HTTC Technology Ltd.
-0023FF     (base 16)		Beijing HTTC Technology Ltd.
-				B-13D-3 Keshi Building,Jia No.28 Xinxi Road,SHANGDI IT Industry Base
-				Beijing    100085
-				CN
-
-00-23-F6   (hex)		Softwell Technology Co., Ltd.
-0023F6     (base 16)		Softwell Technology Co., Ltd.
-				4F, No. 419, Jhonghe Rd., Yonghe City,
-				Taipei County    234
-				TW
-
-00-23-F3   (hex)		Glocom, Inc.
-0023F3     (base 16)		Glocom, Inc.
-				22 Firstfield Road
-				Gaithersburg  Maryland  20878
-				US
-
-00-23-F0   (hex)		Shanghai Jinghan Weighing Apparatus Co. Ltd.
-0023F0     (base 16)		Shanghai Jinghan Weighing Apparatus Co. Ltd.
-				Building 58, No.99 Chunguang Road, Xinzhuang Industrial Zone,Minhang,
-				Shanghai    201108
-				CN
-
-00-24-10   (hex)		NUETEQ Technology,Inc.
-002410     (base 16)		NUETEQ Technology,Inc.
-				11F, No. 112, Sec. 1, Zhong-Xiao E Rd.
-				Taipei    100
-				TW
-
-00-24-08   (hex)		Pacific Biosciences
-002408     (base 16)		Pacific Biosciences
-				1505 Adams Drive
-				Menlo Park  CA  94025
-				US
-
-00-24-30   (hex)		Ruby Tech Corp.
-002430     (base 16)		Ruby Tech Corp.
-				3F, NO. 1, Lane 50, Nan Kang Road, Sec. 3,
-				Taipei    11510
-				TW
-
-00-24-2E   (hex)		Datastrip Inc.
-00242E     (base 16)		Datastrip Inc.
-				1 Waterview Drive
-				Shelton  CT  06484
-				US
-
-00-24-1D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-00241D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				
-				Pin-Jen  Taoyuan  324
-				TW
-
-00-24-1A   (hex)		Red Beetle Inc.
-00241A     (base 16)		Red Beetle Inc.
-				898 Silas Deane Highway
-				Wethersfield  CT  06109
-				US
-
-00-24-14   (hex)		Cisco Systems, Inc
-002414     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-0C   (hex)		DELEC GmbH
-00240C     (base 16)		DELEC GmbH
-				Ruheweg 17-21
-				Göllheim  Rheinland-Pfalz  67307
-				DE
-
-00-23-F9   (hex)		Double-Take Software, INC.
-0023F9     (base 16)		Double-Take Software, INC.
-				8470 Allison Pointe Blvd
-				Indianapolis  IN  46250
-				US
-
-00-23-E9   (hex)		F5 Networks, Inc.
-0023E9     (base 16)		F5 Networks, Inc.
-				401 Elliott Ave. W.
-				Seattle  WA  98119
-				US
-
-00-23-EA   (hex)		Cisco Systems, Inc
-0023EA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-23-E5   (hex)		IPaXiom Networks
-0023E5     (base 16)		IPaXiom Networks
-				Aston Court
-				High Wycombe  Buckinghamshire  HP11 1LA
-				GB
-
-00-23-B6   (hex)		SECURITE COMMUNICATIONS / HONEYWELL
-0023B6     (base 16)		SECURITE COMMUNICATIONS / HONEYWELL
-				FONT DE L'ORME
-				MOUGINS  FRANCE  06250
-				US
-
-00-23-B8   (hex)		Sichuan Jiuzhou Electronic Technology Co.,Ltd
-0023B8     (base 16)		Sichuan Jiuzhou Electronic Technology Co.,Ltd
-				No.259 Jiuzhou Road,
-				Mianyang  Sichuan  621000
-				CN
-
-00-23-BA   (hex)		Chroma
-0023BA     (base 16)		Chroma
-				68, Hwa-Ya 1st Rd., Hwa-Ya Technical Park,
-				Taoyuan Hsien  Taiwan  333
-				TW
-
-00-23-BC   (hex)		EQ-SYS GmbH
-0023BC     (base 16)		EQ-SYS GmbH
-				Hinter den Gärten 15b
-				Treuenbrietzen OT Feldheim  Brandenburg  14929
-				DE
-
-00-23-B1   (hex)		Longcheer Technology (Singapore) Pte Ltd
-0023B1     (base 16)		Longcheer Technology (Singapore) Pte Ltd
-				43 Kaki Bukit View,  #04-01  ,
-				    415970
-				SG
-
-00-23-96   (hex)		ANDES TECHNOLOGY CORPORATION
-002396     (base 16)		ANDES TECHNOLOGY CORPORATION
-				2F,No. 1, Li-Hsin First Road,
-				Hsin-Chu  Taiwan  300
-				TW
-
-00-23-94   (hex)		Samjeon
-002394     (base 16)		Samjeon
-				#1313-1 Joil-Ri, Samdong-Myeun,Ulju-Gun
-				Ulsan City  South Korea  689-934
-				KR
-
-00-23-77   (hex)		Isotek Electronics Ltd
-002377     (base 16)		Isotek Electronics Ltd
-				9 Clayton Wood Bank
-				Leeds    LS16 6QZ
-				GB
-
-00-23-71   (hex)		SOAM Systel
-002371     (base 16)		SOAM Systel
-				182-13, Daerung Post Tower II, 1504
-				Seoul  Guro-dong, Guro-gu  152-847
-				KR
-
-00-23-A1   (hex)		Trend Electronics Ltd
-0023A1     (base 16)		Trend Electronics Ltd
-				Gut No. 350
-				Auranagabad  Maharashtra  431210
-				IN
-
-00-23-A6   (hex)		E-Mon
-0023A6     (base 16)		E-Mon
-				One Oxford Valley, Suite 418
-				Langhorne  PA  19047
-				US
-
-00-23-A8   (hex)		Marshall Electronics
-0023A8     (base 16)		Marshall Electronics
-				20608 Madrona Ave
-				Torrance  CA  90503
-				US
-
-00-23-9A   (hex)		EasyData Hardware GmbH
-00239A     (base 16)		EasyData Hardware GmbH
-				Breslauer Str. 24
-				Wehrheim  Hessen  D-61273
-				DE
-
-00-23-CC   (hex)		Nintendo Co., Ltd.
-0023CC     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-23-79   (hex)		Union Business Machines Co. Ltd.
-002379     (base 16)		Union Business Machines Co. Ltd.
-				Unit 2, 2/F, Block A, Hong Kong Industrial Centre,
-				Lai Chi Kok  Kowloon  
-				HK
-
-00-23-8C   (hex)		Private
-00238C     (base 16)		Private
-
-00-23-C0   (hex)		Broadway Networks
-0023C0     (base 16)		Broadway Networks
-				1754 Technology Drive, Suite 208
-				San Jose  California  95110
-				US
-
-00-23-58   (hex)		SYSTEL SA
-002358     (base 16)		SYSTEL SA
-				ZI DE BELLE AIRE
-				AYTRE    17440
-				FR
-
-00-23-56   (hex)		Packet Forensics LLC
-002356     (base 16)		Packet Forensics LLC
-				420 S Smith Rd
-				Tempe  AZ  85281
-				US
-
-00-23-50   (hex)		RDC, Inc. dba LynTec
-002350     (base 16)		RDC, Inc. dba LynTec
-				8385 Melrose Drive
-				Lenexa  KS  66214
-				US
-
-00-23-4F   (hex)		Luminous Power Technologies Pvt. Ltd.
-00234F     (base 16)		Luminous Power Technologies Pvt. Ltd.
-				C8-C9, Community Center,
-				New Delhi    110058
-				IN
-
-00-23-4B   (hex)		Inyuan Technology Inc.
-00234B     (base 16)		Inyuan Technology Inc.
-				No. 3, Singye St.,
-				Taoyuan County    33341
-				TW
-
-00-23-49   (hex)		Helmholtz Centre Berlin for Material and Energy
-002349     (base 16)		Helmholtz Centre Berlin for Material and Energy
-				Department FMD
-				Berlin    14109
-				DE
-
-00-23-46   (hex)		Vestac
-002346     (base 16)		Vestac
-				P.O. Box 7358
-				Shrewsbury  NJ  07702
-				US
-
-00-23-07   (hex)		FUTURE INNOVATION TECH CO.,LTD
-002307     (base 16)		FUTURE INNOVATION TECH CO.,LTD
-				312 3-DONG, GWANGMYUNG INDUSTRIAL COMPLEX 201
-				GWANGMYUNG  GYUNGGI  423060
-				KR
-
-00-23-05   (hex)		Cisco Systems, Inc
-002305     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-22-FF   (hex)		NIVIS LLC
-0022FF     (base 16)		NIVIS LLC
-				1000 CIRCLE 75
-				ATLANTA  GA  30339
-				US
-
-00-23-44   (hex)		Objective Interface Systems, Inc.
-002344     (base 16)		Objective Interface Systems, Inc.
-				220 Spring Street, Suite 530
-				Herndon  VA  20170-6201
-				US
-
-00-23-3C   (hex)		Alflex
-00233C     (base 16)		Alflex
-				Blauw-roodlaan 300
-				ZOETERMEER    2718 SK
-				NL
-
-00-23-33   (hex)		Cisco Systems, Inc
-002333     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-23-2E   (hex)		Kedah Electronics Engineering, LLC
-00232E     (base 16)		Kedah Electronics Engineering, LLC
-				Zelenograd, 445
-				Moscow    124498
-				RU
-
-00-23-20   (hex)		Nicira Networks
-002320     (base 16)		Nicira Networks
-				3460 W. Bayshore Rd.
-				Palo Alto  CA  94303
-				US
-
-00-23-64   (hex)		Power Instruments Pte Ltd
-002364     (base 16)		Power Instruments Pte Ltd
-				BLK 40 TOH GUAN RD EAST, #01-62 ENTERPRISE HUB
-				    608582
-				SG
-
-00-23-17   (hex)		Lasercraft Inc
-002317     (base 16)		Lasercraft Inc
-				1450 Oakbrook Drive
-				Norcross  GA  30093
-				US
-
-00-23-0E   (hex)		Gorba AG
-00230E     (base 16)		Gorba AG
-				Sandackerstrasse
-				Oberbüren  SG  CH - 9245
-				CH
-
-00-23-62   (hex)		Goldline Controls
-002362     (base 16)		Goldline Controls
-				61 Whitecap Dr
-				North Kingstown  RI  02852
-				US
-
-00-23-5E   (hex)		Cisco Systems, Inc
-00235E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-23-22   (hex)		KISS Teknical Solutions, Inc.
-002322     (base 16)		KISS Teknical Solutions, Inc.
-				1583 S. Navajo Way
-				Chandler  Arizona  85286
-				US
-
-00-22-B6   (hex)		Superflow Technologies Group
-0022B6     (base 16)		Superflow Technologies Group
-				4060 Dixon Street
-				Des Moines  IA  50266
-				US
-
-00-22-B5   (hex)		NOVITA
-0022B5     (base 16)		NOVITA
-				3F301,Namsung B/D 340-30
-				Geumcheon-Gu  Seoul  153-782
-				KR
-
-00-22-B2   (hex)		4RF Communications Ltd
-0022B2     (base 16)		4RF Communications Ltd
-				26 Glover Street
-				Ngauranga  Wellington  6031
-				NZ
-
-00-22-AC   (hex)		Hangzhou Siyuan Tech. Co., Ltd
-0022AC     (base 16)		Hangzhou Siyuan Tech. Co., Ltd
-				5 F, Tower B, No. 37, Xiang Yuan Road
-				Hangzhou  Zhejiang  310012
-				CN
-
-00-22-AD   (hex)		TELESIS TECHNOLOGIES, INC.
-0022AD     (base 16)		TELESIS TECHNOLOGIES, INC.
-				28181 River Drive
-				Circleville  Ohio  43113
-				US
-
-00-22-AE   (hex)		Mattel Inc.
-0022AE     (base 16)		Mattel Inc.
-				333 Continental Blvd.
-				El Segundo  CA  90245
-				US
-
-00-22-D5   (hex)		Eaton Corp. Electrical Group Data Center Solutions - Pulizzi
-0022D5     (base 16)		Eaton Corp. Electrical Group Data Center Solutions - Pulizzi
-				3200 S. Susan St.
-				Santa Ana  CA  92704
-				US
-
-00-22-D1   (hex)		Albrecht Jung GmbH & Co. KG
-0022D1     (base 16)		Albrecht Jung GmbH & Co. KG
-				Volmestraße 1
-				Schalksmühle  NRW  58579
-				DE
-
-00-22-D2   (hex)		All Earth Comércio de Eletrônicos LTDA.
-0022D2     (base 16)		All Earth Comércio de Eletrônicos LTDA.
-				Rua Leonida Reimman Trotti, 343
-				Campinas  São Paulo  13065-704
-				BR
-
-00-22-C2   (hex)		Proview Eletrônica do Brasil LTDA
-0022C2     (base 16)		Proview Eletrônica do Brasil LTDA
-				R. Acará 203 - Distrito Industrial
-				Manaus  Amazonas  69075-030
-				BR
-
-00-22-BD   (hex)		Cisco Systems, Inc
-0022BD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-22-BA   (hex)		HUTH Elektronik Systeme GmbH
-0022BA     (base 16)		HUTH Elektronik Systeme GmbH
-				Echternacher Str. 10
-				Troisdorf-Spich  NRW  53842
-				DE
-
-00-22-BB   (hex)		beyerdynamic GmbH & Co. KG
-0022BB     (base 16)		beyerdynamic GmbH & Co. KG
-				Theresienstraße 8
-				Heilbronn    74072
-				DE
-
-00-22-A3   (hex)		California Eastern Laboratories
-0022A3     (base 16)		California Eastern Laboratories
-				4590 Patrick Henry Dr.
-				Santa Clara  CA  95054
-				US
-
-00-23-02   (hex)		Cobalt Digital, Inc.
-002302     (base 16)		Cobalt Digital, Inc.
-				2406 East University Avenue
-				Urbana  IL  61802
-				US
-
-00-22-F5   (hex)		Advanced Realtime Tracking GmbH
-0022F5     (base 16)		Advanced Realtime Tracking GmbH
-				Am Oeferl 6
-				Weilheim  Bayern  D-82362
-				DE
-
-00-22-CA   (hex)		Anviz Biometric Tech. Co., Ltd.
-0022CA     (base 16)		Anviz Biometric Tech. Co., Ltd.
-				5th Floor, 4299 Jindu Road,
-				Shanghai    201108
-				CN
-
-00-22-C7   (hex)		SEGGER Microcontroller GmbH & Co. KG
-0022C7     (base 16)		SEGGER Microcontroller GmbH & Co. KG
-				In den Weiden 11
-				Hilden  NRW  40721
-				DE
-
-00-22-C1   (hex)		Active Storage Inc.
-0022C1     (base 16)		Active Storage Inc.
-				2295 Jefferson Street
-				Torrance  CA  90501
-				US
-
-00-22-8F   (hex)		CNRS
-00228F     (base 16)		CNRS
-				MRCT
-				Meudon  Ile de France  92195
-				FR
-
-00-22-97   (hex)		XMOS Semiconductor
-002297     (base 16)		XMOS Semiconductor
-				Venturers House
-				Bristol    BS1 4PB
-				GB
-
-00-22-92   (hex)		Cinetal
-002292     (base 16)		Cinetal
-				8651 Castle Park
-				Indianapolis  IN  46256
-				US
-
-00-22-E5   (hex)		Fisher-Rosemount Systems Inc.
-0022E5     (base 16)		Fisher-Rosemount Systems Inc.
-				12301 Research Blvd
-				Austin  Texas  78759
-				US
-
-00-22-E4   (hex)		APASS TECHNOLOGY CO., LTD.
-0022E4     (base 16)		APASS TECHNOLOGY CO., LTD.
-				2F, No. 267, Sec. 3, Chengde Rd.,
-				TEIPEI    113
-				TW
-
-00-22-4F   (hex)		Byzoro Networks Ltd.
-00224F     (base 16)		Byzoro Networks Ltd.
-				Room 5A1,Block A, Keshi Plaza,No. 28A Info. Road,
-				  Beijing  100085
-				CN
-
-00-22-51   (hex)		Lumasense Technologies
-002251     (base 16)		Lumasense Technologies
-				3033 Scott Blvd.
-				Santa Clara  CA  95054
-				US
-
-00-22-5E   (hex)		Uwin Technologies Co.,LTD
-00225E     (base 16)		Uwin Technologies Co.,LTD
-				2F,No.22.R&D RD II,SBIP
-				Hsinchu    300
-				TW
-
-00-22-58   (hex)		Taiyo Yuden Co., Ltd.
-002258     (base 16)		Taiyo Yuden Co., Ltd.
-				8-1 Sakae-Cho
-				    
-				JP
-
-00-22-5B   (hex)		Teradici Corporation
-00225B     (base 16)		Teradici Corporation
-				101 4621 Canada Way,
-				Burnaby  BC  V6G 4X8
-				CA
-
-00-22-59   (hex)		Guangzhou New Postcom Equipment Co.,Ltd.
-002259     (base 16)		Guangzhou New Postcom Equipment Co.,Ltd.
-				No.3Ã‚Â¡Ã‚Â¡Guangpuxi Road,Guangzhou Science City,
-				Guangzhou  Guangdong  510663
-				CN
-
-00-22-53   (hex)		Entorian Technologies
-002253     (base 16)		Entorian Technologies
-				8900 Shoal Creek Blvd
-				Austin  TX  78757
-				US
-
-00-22-2C   (hex)		Ceton Corp
-00222C     (base 16)		Ceton Corp
-				8259 122nd Ave NE, Suite 275
-				Kirkland  Washington  98033
-				US
-
-00-22-2D   (hex)		SMC Networks Inc.
-00222D     (base 16)		SMC Networks Inc.
-				20 Mason
-				Irvine  CA  92618
-				US
-
-00-22-2A   (hex)		SoundEar A/S
-00222A     (base 16)		SoundEar A/S
-				Rentemestervej 80
-				Copenhagen NV  Denmark  DK-2400
-				DK
-
-00-22-7E   (hex)		Chengdu 30Kaitian Communication Industry Co.Ltd
-00227E     (base 16)		Chengdu 30Kaitian Communication Industry Co.Ltd
-				No.6 Chuangye Road
-				Chengdu  Sichuan  610041
-				CN
-
-00-22-7C   (hex)		Woori SMT Co.,ltd
-00227C     (base 16)		Woori SMT Co.,ltd
-				649-2,Suwolam-ri,Seotan-Myun
-				Pyongtaek  Kyonggi-Do  451-852
-				KR
-
-00-22-77   (hex)		NEC Australia Pty Ltd
-002277     (base 16)		NEC Australia Pty Ltd
-				649-655 Springvale Rd
-				Mulgrave  Victoria  3170
-				AU
-
-00-22-3D   (hex)		JumpGen Systems, LLC
-00223D     (base 16)		JumpGen Systems, LLC
-				2111 Palomar Airport Rd
-				Carlsbad  CA  92011
-				US
-
-00-22-39   (hex)		Indiana Life Sciences Incorporated
-002239     (base 16)		Indiana Life Sciences Incorporated
-				8875 Bash Street
-				Indianapolis  Indiana  46256
-				US
-
-00-22-35   (hex)		Strukton Systems bv
-002235     (base 16)		Strukton Systems bv
-				Westkanaaldijk 2
-				Utrecht    3542 DA
-				NL
-
-00-22-79   (hex)		Nippon Conlux Co., Ltd.
-002279     (base 16)		Nippon Conlux Co., Ltd.
-				5-3-8, Chiyoda
-				Sakado-shi  Saitama  350-0214
-				JP
-
-00-22-71   (hex)		Jäger Computergesteuerte Meßtechnik GmbH.
-002271     (base 16)		Jäger Computergesteuerte Meßtechnik GmbH.
-				Rheinstraße 2-4
-				Lorsch  Hessen  64653
-				DE
-
-00-22-47   (hex)		DAC ENGINEERING CO., LTD.
-002247     (base 16)		DAC ENGINEERING CO., LTD.
-				1-5 Oyanagi-cho
-				Kyoto    601-8128
-				JP
-
-00-22-1F   (hex)		eSang Technologies Co., Ltd.
-00221F     (base 16)		eSang Technologies Co., Ltd.
-				#1-817, IT Castle 550-1, Gasan-Dong,
-				Seoul    153-768
-				KR
-
-00-21-E6   (hex)		Starlight Video Limited
-0021E6     (base 16)		Starlight Video Limited
-				5/F., Shing Dao Industrial Building,
-				    
-				HK
-
-00-21-E0   (hex)		CommAgility Ltd
-0021E0     (base 16)		CommAgility Ltd
-				Holywell Park
-				Loughborough  Leics  LE11 3AQ
-				GB
-
-00-21-DE   (hex)		Firepro Wireless
-0021DE     (base 16)		Firepro Wireless
-				27, Zamrudpur Community Center,
-				New Delhi  Haryana  110020
-				IN
-
-00-21-F9   (hex)		WIRECOM Technologies
-0021F9     (base 16)		WIRECOM Technologies
-				135, rue Jacques Charles
-				OLIVET  Loiret  45166
-				FR
-
-00-21-FA   (hex)		A4SP Technologies Ltd.
-0021FA     (base 16)		A4SP Technologies Ltd.
-				Keilaranta 19 D
-				Espoo  Uusimaa  02150
-				FI
-
-00-21-F0   (hex)		EW3 Technologies LLC
-0021F0     (base 16)		EW3 Technologies LLC
-				114 E 11th St
-				Connersville  IN  47331
-				US
-
-00-21-D3   (hex)		BOCOM SECURITY(ASIA PACIFIC) LIMITED
-0021D3     (base 16)		BOCOM SECURITY(ASIA PACIFIC) LIMITED
-				Flr.3,NO.29,#69 Guiqing RD
-				Shanghai    200233
-				CN
-
-00-21-CC   (hex)		Flextronics International
-0021CC     (base 16)		Flextronics International
-				Stretton Green Distribution Centre Langford Way
-				Warrington  Cheshire  WA4 4TQ
-				GB
-
-00-21-B9   (hex)		Universal Devices Inc.
-0021B9     (base 16)		Universal Devices Inc.
-				5353 Yarmouth Ave. #209
-				Encino  CA  91316
-				US
-
-00-21-B3   (hex)		Ross Controls
-0021B3     (base 16)		Ross Controls
-				One Ross Way
-				Lavonia  GA  30553
-				US
-
-00-21-B6   (hex)		Triacta Power Technologies Inc.
-0021B6     (base 16)		Triacta Power Technologies Inc.
-				Box 582, 7 Mill Street
-				Almonte  Ontario  K0A 1A0
-				CA
-
-00-22-17   (hex)		Neat Electronics
-002217     (base 16)		Neat Electronics
-				Varuvägen 2
-				Löddeköpinge  Skåne  SE-24642
-				SE
-
-00-22-11   (hex)		Rohati Systems
-002211     (base 16)		Rohati Systems
-				1192 Borregas Ave
-				Sunnyvale  CA  94089
-				US
-
-00-21-CF   (hex)		The Crypto Group
-0021CF     (base 16)		The Crypto Group
-				Zugerstrasse 42
-				Steinhausen  Zug  6312
-				CH
-
-00-21-C5   (hex)		3DSP Corp
-0021C5     (base 16)		3DSP Corp
-				16271 Laguna Canyon Road
-				Irvine,  CA  92618
-				US
-
-00-22-12   (hex)		CAI Networks, Inc.
-002212     (base 16)		CAI Networks, Inc.
-				4790 Irvine Blvd
-				Irvine  California  92620
-				US
-
-00-22-0D   (hex)		Cisco Systems, Inc
-00220D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-22-08   (hex)		Certicom Corp
-002208     (base 16)		Certicom Corp
-				5520 Explorer Drive, 4th Floor
-				Mississauga  ON  L4W 5L1
-				CA
-
-00-21-EE   (hex)		Full Spectrum Inc.
-0021EE     (base 16)		Full Spectrum Inc.
-				1149 Chestnut Street, Suite 100
-				Menlo Park  California  94025
-				US
-
-00-21-EC   (hex)		Solutronic GmbH
-0021EC     (base 16)		Solutronic GmbH
-				Kueferstrasse 18
-				Koengen    73257
-				DE
-
-00-22-05   (hex)		WeLink Solutions, Inc.
-002205     (base 16)		WeLink Solutions, Inc.
-				3F, No. 88, Sec. 1, Nei-Hu Rd.
-				Taipei    114
-				TW
-
-00-22-09   (hex)		Omron Healthcare Co., Ltd
-002209     (base 16)		Omron Healthcare Co., Ltd
-				24 Yamanoshita-cho Yamanouchi
-				Kyoto    6150084
-				JP
-
-00-21-8C   (hex)		TopControl GMBH
-00218C     (base 16)		TopControl GMBH
-				Enzenbergweg 24/A
-				Terlan (BZ)    39018
-				IT
-
-00-21-8A   (hex)		Electronic Design and Manufacturing Company
-00218A     (base 16)		Electronic Design and Manufacturing Company
-				31 Millrace Dr
-				Lynchburg  VA  24502
-				US
-
-00-21-8B   (hex)		Wescon Technology, Inc.
-00218B     (base 16)		Wescon Technology, Inc.
-				4655-170 Old Ironsides Drive
-				Santa Clara  California  95054
-				US
-
-00-21-84   (hex)		POWERSOFT SRL
-002184     (base 16)		POWERSOFT SRL
-				VIA ENRICO CONTI, 5
-				SCANDICCI  FI  50018
-				IT
-
-00-21-78   (hex)		Matuschek Messtechnik GmbH
-002178     (base 16)		Matuschek Messtechnik GmbH
-				Werner Heisenberg Straße 14
-				Alsdorf  NRW  52477
-				DE
-
-00-21-73   (hex)		Ion Torrent Systems, Inc.
-002173     (base 16)		Ion Torrent Systems, Inc.
-				37 Soundview Rd
-				Guilford  CT  06437
-				US
-
-00-21-77   (hex)		W. L. Gore & Associates
-002177     (base 16)		W. L. Gore & Associates
-				402 Vieves Way
-				Elkton  MD  21921
-				US
-
-00-21-72   (hex)		Seoultek Valley
-002172     (base 16)		Seoultek Valley
-				Bang-i Dong 51-5, Songpa
-				Seoul    138-050
-				KR
-
-00-21-53   (hex)		SeaMicro Inc.
-002153     (base 16)		SeaMicro Inc.
-				3250 Jay Street
-				Santa Clara  CA  95054
-				US
-
-00-21-7A   (hex)		Sejin Electron, Inc.
-00217A     (base 16)		Sejin Electron, Inc.
-				SJ Technoville
-				Seoul    153-801
-				KR
-
-00-21-A4   (hex)		Dbii Networks
-0021A4     (base 16)		Dbii Networks
-				2217 Via Blanca
-				Oceanside  CA  92054
-				US
-
-00-21-99   (hex)		Vacon Plc
-002199     (base 16)		Vacon Plc
-				P.O.Box 25
-				Vaasa    65380
-				FI
-
-00-21-A0   (hex)		Cisco Systems, Inc
-0021A0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-21-98   (hex)		Thai Radio Co, LTD
-002198     (base 16)		Thai Radio Co, LTD
-				Hi-Tech Industrial Estate
-				Ayutthaya    13160
-				TH
-
-00-21-AE   (hex)		ALCATEL-LUCENT FRANCE - WTD
-0021AE     (base 16)		ALCATEL-LUCENT FRANCE - WTD
-				7-9, Avenue Morane Saulnier
-				VELIZY    78141
-				FR
-
-00-21-AF   (hex)		Radio Frequency Systems
-0021AF     (base 16)		Radio Frequency Systems
-				Kabelkamp 20
-				Hannover    30179
-				DE
-
-00-21-54   (hex)		D-TACQ Solutions Ltd
-002154     (base 16)		D-TACQ Solutions Ltd
-				James Watt Building
-				East Kilbride  Lanarkshire  G75 0QD
-				GB
-
-00-21-69   (hex)		Prologix, LLC.
-002169     (base 16)		Prologix, LLC.
-				17217 NE 133rd Place
-				Redmond  Washington  98052-2153
-				US
-
-00-21-4B   (hex)		Shenzhen HAMP Science & Technology Co.,Ltd
-00214B     (base 16)		Shenzhen HAMP Science & Technology Co.,Ltd
-				No.302-303,3 Floor,District A,TCL Tower,Gaoxin Nan Yi Road,NanShan District
-				Shenzhen  Guangdong  518057
-				CN
-
-00-21-45   (hex)		Semptian Technologies Ltd.
-002145     (base 16)		Semptian Technologies Ltd.
-				No. 809,  Tower B, Shi Ji Ke Mao
-				Beijing    100190
-				CN
-
-00-1F-FE   (hex)		HPN Supply Chain
-001FFE     (base 16)		HPN Supply Chain
-				8000 Foothills Blvd
-				Roseville  CA  95747
-				US
-
-00-1F-FF   (hex)		Respironics, Inc.
-001FFF     (base 16)		Respironics, Inc.
-				1740 Golden Mile Highway
-				Monroeville  PA  15146
-				US
-
-00-1F-FC   (hex)		Riccius+Sohn GmbH
-001FFC     (base 16)		Riccius+Sohn GmbH
-				Haynauer Str. 49
-				Berlin    12249
-				DE
-
-00-1F-FD   (hex)		Indigo Mobile Technologies Corp.
-001FFD     (base 16)		Indigo Mobile Technologies Corp.
-				11F, No22, Lan407,TiDing Blvd Section2, Neihu Technology Park
-				Taipei City    114
-				TW
-
-00-21-21   (hex)		VRmagic GmbH
-002121     (base 16)		VRmagic GmbH
-				Augustaanlage 32
-				Mannheim  BW  68165
-				DE
-
-00-21-23   (hex)		Aerosat Avionics
-002123     (base 16)		Aerosat Avionics
-				62 State Rd.
-				Amherst  NH  03031
-				US
-
-00-21-0A   (hex)		byd:sign Corporation
-00210A     (base 16)		byd:sign Corporation
-				2-10-6 Tsukiji
-				Chuo-ku  Tokyo  104-0045
-				JP
-
-00-21-07   (hex)		Seowonintech Co Ltd.
-002107     (base 16)		Seowonintech Co Ltd.
-				689-47 Geumjeongdong
-				Gunposi  Kyoungkido  436-862
-				KR
-
-00-21-3F   (hex)		A-Team Technology Ltd.
-00213F     (base 16)		A-Team Technology Ltd.
-				Rm. 1608, 16/F., Metropole Square,
-				New Territories,    
-				HK
-
-00-21-1B   (hex)		Cisco Systems, Inc
-00211B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-21-2D   (hex)		SCIMOLEX CORPORATION
-00212D     (base 16)		SCIMOLEX CORPORATION
-				2430, Saijou, Showa-cho
-				Nakakoma-gun, Yamanashi    409-3866
-				JP
-
-00-1F-D5   (hex)		MICRORISC s.r.o.
-001FD5     (base 16)		MICRORISC s.r.o.
-				Delnicka 222
-				Jicin  kralovehradecky kraj  50601
-				CZ
-
-00-1F-B1   (hex)		Cybertech Inc.
-001FB1     (base 16)		Cybertech Inc.
-				935 Horsham Rd
-				Horsham  PA  19044
-				US
-
-00-1F-B2   (hex)		Sontheim Industrie Elektronik GmbH
-001FB2     (base 16)		Sontheim Industrie Elektronik GmbH
-				Dieselstrasse 7
-				Kempten Allgaeu  Bavaria  D-87437
-				DE
-
-00-1F-EE   (hex)		ubisys technologies GmbH
-001FEE     (base 16)		ubisys technologies GmbH
-				Am Wehrhahn 45
-				Düsseldorf  NRW  40211
-				DE
-
-00-1F-EF   (hex)		SHINSEI INDUSTRIES CO.,LTD
-001FEF     (base 16)		SHINSEI INDUSTRIES CO.,LTD
-				4-12-15,HORIFUNE, KITA-KU,
-				TOKOYO    114-0004
-				JP
-
-00-1F-EC   (hex)		Synapse Électronique
-001FEC     (base 16)		Synapse Électronique
-				1010, 7e Avenue
-				Grand-Mère  Québec  G9T 2B8
-				CA
-
-00-1F-CA   (hex)		Cisco Systems, Inc
-001FCA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1F-C3   (hex)		SmartSynch, Inc
-001FC3     (base 16)		SmartSynch, Inc
-				4400 Old Canton Rd
-				Jackson  MS  39211
-				US
-
-00-1F-E0   (hex)		EdgeVelocity Corp
-001FE0     (base 16)		EdgeVelocity Corp
-				68 Stiles Road
-				Hudson  NH  03079
-				US
-
-00-1F-D8   (hex)		A-TRUST COMPUTER CORPORATION
-001FD8     (base 16)		A-TRUST COMPUTER CORPORATION
-				3F., NO.361, FUSING 1ST RD., GUEISHAN TOWNSHIP,
-				TAOYUAN    33375
-				TW
-
-00-1F-D7   (hex)		TELERAD SA
-001FD7     (base 16)		TELERAD SA
-				2, avenue de la butte aux cailles
-				ANGLET    64600
-				FR
-
-00-1F-D3   (hex)		RIVA Networks Inc.
-001FD3     (base 16)		RIVA Networks Inc.
-				555 Riva Ave
-				East Brunswick  NJ  08816
-				US
-
-00-1F-C1   (hex)		Hanlong Technology Co.,LTD
-001FC1     (base 16)		Hanlong Technology Co.,LTD
-				2402 West Tower Building, Fuxin International Building,
-				Nanjing  Jiangsu  210002
-				CN
-
-00-1F-BB   (hex)		Xenatech Co.,LTD
-001FBB     (base 16)		Xenatech Co.,LTD
-				 514-2 Ya Tab-Dong Bun Dang Gu
-				Seong namsi  Gyong gi-do  463-839
-				KR
-
-00-1F-E8   (hex)		KURUSUGAWA Electronics Industry Inc,.
-001FE8     (base 16)		KURUSUGAWA Electronics Industry Inc,.
-				2F, 52-5, Nogata 6chome
-				Nakano-Ku  TOKYO  165-0027
-				JP
-
-00-1F-AB   (hex)		I.S HIGH TECH.INC
-001FAB     (base 16)		I.S HIGH TECH.INC
-				603-1,Sungbon-ri,Daeso-myun
-				Eumsung-gun  Chungcheongbuk-do  369-823
-				KR
-
-00-1F-AC   (hex)		Goodmill Systems Ltd
-001FAC     (base 16)		Goodmill Systems Ltd
-				Sinikalliontie 10
-				Espoo  Uusimaa  02630
-				FI
-
-00-1F-36   (hex)		Bellwin Information Co. Ltd.,
-001F36     (base 16)		Bellwin Information Co. Ltd.,
-				No.336, Beitun Rd., Beitun Dist.,
-				Taichung    406
-				TW
-
-00-1F-3D   (hex)		Qbit GmbH
-001F3D     (base 16)		Qbit GmbH
-				Stegwiesenstrasse 32
-				Bruchsal  Germany  76646
-				DE
-
-00-1F-38   (hex)		POSITRON
-001F38     (base 16)		POSITRON
-				ESTRADA TELEBRAS-UNICAMP, KM0,97 - CJ.01
-				CAMPINAS  São Paulo  13084-971
-				BR
-
-00-1F-2D   (hex)		Electro-Optical Imaging, Inc.
-001F2D     (base 16)		Electro-Optical Imaging, Inc.
-				4300 Fortune Place, Suite C
-				West Melbourne  FL  32904
-				US
-
-00-1F-89   (hex)		Signalion GmbH
-001F89     (base 16)		Signalion GmbH
-				Sudhausweg 5
-				Dresden  Saxony  01099
-				DE
-
-00-1F-8A   (hex)		Ellion Digital Inc.
-001F8A     (base 16)		Ellion Digital Inc.
-				Suite 809, Sicox Tower, 513-14, Sangdaewon-dong, Jungwon-gu
-				Sungnam-city  Kyonggi-do  426-726
-				KR
-
-00-1F-7F   (hex)		Phabrix Limited
-001F7F     (base 16)		Phabrix Limited
-				Blindmans Gate Cottage
-				Newbury  Hampshire  RG20 9XB
-				GB
-
-00-1F-76   (hex)		AirLogic Systems Inc.
-001F76     (base 16)		AirLogic Systems Inc.
-				3022 Peleke St.Suite 1
-				Lihu'e  HI  96766
-				US
-
-00-1F-73   (hex)		Teraview Technology Co., Ltd.
-001F73     (base 16)		Teraview Technology Co., Ltd.
-				23F, No. 29-5, Sec. 2, Jhongjheng E. Road,
-				Taipei County    251
-				TW
-
-00-1F-62   (hex)		JSC Stilsoft
-001F62     (base 16)		JSC Stilsoft
-				Mayakovskogo 15
-				Stavropol    355000
-				RU
-
-00-1F-67   (hex)		Hitachi,Ltd.
-001F67     (base 16)		Hitachi,Ltd.
-				Minamioi 6-27-18, Shinagawa-ku
-				Tokyo  Tokyo  140-8572
-				JP
-
-00-1F-56   (hex)		DIGITAL FORECAST
-001F56     (base 16)		DIGITAL FORECAST
-				5th Fl., 507, E&C Venture Dream Tower III, 197-33
-				Seoul  Gyunggi-do  152-719
-				KR
-
-00-1F-52   (hex)		UVT Unternehmensberatung fur Verkehr und Technik GmbH
-001F52     (base 16)		UVT Unternehmensberatung fur Verkehr und Technik GmbH
-				Josefsstraße 54-56
-				Mainz  RLP  55118
-				DE
-
-00-1F-4F   (hex)		Thinkware Co. Ltd.
-001F4F     (base 16)		Thinkware Co. Ltd.
-				15FL, Hanmi Tower, 45,
-				Seoul    138-724
-				KR
-
-00-1F-2F   (hex)		Berker GmbH & Co. KG
-001F2F     (base 16)		Berker GmbH & Co. KG
-				Klagebach 38
-				Schalksmuehle  NRW  58579
-				DE
-
-00-1F-32   (hex)		Nintendo Co., Ltd.
-001F32     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1F-44   (hex)		GE Transportation Systems
-001F44     (base 16)		GE Transportation Systems
-				2901 East Lake Road
-				Erie  PA  16501
-				US
-
-00-1F-39   (hex)		Construcciones y Auxiliar de Ferrocarriles, S.A.
-001F39     (base 16)		Construcciones y Auxiliar de Ferrocarriles, S.A.
-				C/ J.M. Iturrioz, 26
-				Beasain  Guipúzcoa  E-20200
-				ES
-
-00-1F-7C   (hex)		Witelcom AS
-001F7C     (base 16)		Witelcom AS
-				Verftsgt 10
-				Moss  Ostfold  1511
-				NO
-
-00-1F-7A   (hex)		WiWide Inc.
-001F7A     (base 16)		WiWide Inc.
-				10B10, Hua Jie Plaza
-				Beijing    100089
-				CN
-
-00-1F-77   (hex)		HEOL DESIGN
-001F77     (base 16)		HEOL DESIGN
-				1 bd d'armor
-				LANNION  BRETAGNE  22300
-				FR
-
-00-1F-94   (hex)		Lascar Electronics Ltd
-001F94     (base 16)		Lascar Electronics Ltd
-				Module House
-				Nr Salisbury  Wiltshire  SP5 2SJ
-				GB
-
-00-1F-8E   (hex)		Metris USA Inc.
-001F8E     (base 16)		Metris USA Inc.
-				44880 Falcon Place ste 100
-				Sterling  VA  20166
-				US
-
-00-1F-61   (hex)		Talent Communication Networks Inc.
-001F61     (base 16)		Talent Communication Networks Inc.
-				Rm. 910 R&F Plaza, #76, Huangpu Ave. West,
-				Guangzhou (Canton)  Guangdong Province  510360
-				CN
-
-00-1E-CE   (hex)		BISA Technologies (Hong Kong) Limited
-001ECE     (base 16)		BISA Technologies (Hong Kong) Limited
-				1102, Trans Asia Centre,
-				 Kwai Chung,    
-				HK
-
-00-1E-C8   (hex)		Rapid Mobile (Pty) Ltd
-001EC8     (base 16)		Rapid Mobile (Pty) Ltd
-				Building C,D,E Apex Corporate Park
-				Pretoria  Gauteng  0020
-				ZA
-
-00-1E-CC   (hex)		CDVI
-001ECC     (base 16)		CDVI
-				31 Avenue du Général Leclerc
-				PANTIN  Ile de France  93500
-				FR
-
-00-1E-C5   (hex)		Middle Atlantic Products Inc
-001EC5     (base 16)		Middle Atlantic Products Inc
-				300 Fairfield Road
-				Fairfield  NJ  07004
-				US
-
-00-1F-03   (hex)		NUM AG
-001F03     (base 16)		NUM AG
-				Battenhusstrasse 16
-				Teufen  AR  9053
-				CH
-
-00-1E-FF   (hex)		Mueller-Elektronik GmbH & Co. KG
-001EFF     (base 16)		Mueller-Elektronik GmbH & Co. KG
-				Franz-Kleine-Str. 18
-				Salzkotten  NRW  33154
-				DE
-
-00-1F-05   (hex)		iTAS Technology Corp.
-001F05     (base 16)		iTAS Technology Corp.
-				No. 75, Shuiyuan St.
-				Hsinchu City    30069
-				TW
-
-00-1F-07   (hex)		AZTEQ Mobile
-001F07     (base 16)		AZTEQ Mobile
-				Suite 210, 525 University Ave
-				Palo Alto  CA  94301
-				US
-
-00-1E-F6   (hex)		Cisco Systems, Inc
-001EF6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-F9   (hex)		Pascom Kommunikations systeme GmbH.
-001EF9     (base 16)		Pascom Kommunikations systeme GmbH.
-				Technologiestr. 4
-				Arbing  Upper Austria  4332
-				AT
-
-00-1E-F3   (hex)		From2
-001EF3     (base 16)		From2
-				2F, Mester inc
-				Daejeon    306-230
-				KR
-
-00-1F-19   (hex)		BEN-RI ELECTRONICA S.A.
-001F19     (base 16)		BEN-RI ELECTRONICA S.A.
-				POL. IND. VENTORRO DEL CANO
-				ALCORCON  MADRID  28925
-				ES
-
-00-1F-11   (hex)		OPENMOKO, INC.
-001F11     (base 16)		OPENMOKO, INC.
-				7F, No 300, Yang Guang Street
-				Taipei    11491
-				TW
-
-00-1E-E4   (hex)		ACS Solutions France
-001EE4     (base 16)		ACS Solutions France
-				Rue Claude Chappe
-				Guilherand Granges  Ardeche  07503
-				FR
-
-00-1E-ED   (hex)		Adventiq Ltd.
-001EED     (base 16)		Adventiq Ltd.
-				Technology House
-				Bar Hill  Cambs.  CB3 8SQ
-				GB
-
-00-1E-D2   (hex)		Ray Shine Video Technology Inc
-001ED2     (base 16)		Ray Shine Video Technology Inc
-				6F,No.98,Sec.1,Xintai 5th Rd.
-				Xizhi City  Taipei County  221
-				TW
-
-00-1E-D4   (hex)		Doble Engineering
-001ED4     (base 16)		Doble Engineering
-				85 Walnut St
-				Watertown  MA  02472
-				US
-
-00-1E-FD   (hex)		Microbit 2.0 AB
-001EFD     (base 16)		Microbit 2.0 AB
-				Nystaden 1
-				KALIX    95261
-				SE
-
-00-1E-E7   (hex)		Epic Systems Inc
-001EE7     (base 16)		Epic Systems Inc
-				390 S. Abbott Ave
-				Milpitas  CA  95035
-				US
-
-00-1E-E9   (hex)		Stoneridge Electronics AB
-001EE9     (base 16)		Stoneridge Electronics AB
-				Gårdsfogdevägen 18A
-				Bromma  Stockholm  168 66
-				SE
-
-00-1F-1C   (hex)		KOBISHI ELECTRIC Co.,Ltd.
-001F1C     (base 16)		KOBISHI ELECTRIC Co.,Ltd.
-				1805-1
-				Kounosu-shi  Saitama-ken  365-0027
-				JP
-
-00-1E-79   (hex)		Cisco Systems, Inc
-001E79     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-76   (hex)		Thermo Fisher Scientific
-001E76     (base 16)		Thermo Fisher Scientific
-				2215 Grand Avenue Parkway
-				Austin  Texas  78728
-				US
-
-00-1E-72   (hex)		PCS
-001E72     (base 16)		PCS
-				2 HENRI FARMAN
-				LESCAR  PYRENEES ATLANTIQUES  64230
-				FR
-
-00-1E-5F   (hex)		KwikByte, LLC
-001E5F     (base 16)		KwikByte, LLC
-				2430 W. 12th Street
-				Tempe  AZ  85281
-				US
-
-00-1E-5B   (hex)		Unitron Company, Inc.
-001E5B     (base 16)		Unitron Company, Inc.
-				10925 Miller Road
-				Dallas  TX  75238
-				US
-
-00-1E-5E   (hex)		COmputime Ltd.
-001E5E     (base 16)		COmputime Ltd.
-				17/F Great Eagle Centre
-				Wanchai    
-				HK
-
-00-1E-9D   (hex)		Recall Technologies, Inc.
-001E9D     (base 16)		Recall Technologies, Inc.
-				130 Enterprise Ave.
-				Palm Bay  FL  32909
-				US
-
-00-1E-95   (hex)		SIGMALINK
-001E95     (base 16)		SIGMALINK
-				DooSan VentureDigm 1028,
-				Anyang-City  Kyunggi-do  431-070
-				KR
-
-00-1E-93   (hex)		CiriTech Systems Inc
-001E93     (base 16)		CiriTech Systems Inc
-				920 Hillview Ct
-				Milpitas  CA  95035
-				US
-
-00-1E-A2   (hex)		Symx Systems, Inc.
-001EA2     (base 16)		Symx Systems, Inc.
-				6320 NW 84th Avenue
-				Miami  Florida  33166
-				US
-
-00-1E-A9   (hex)		Nintendo Co., Ltd.
-001EA9     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1E-9E   (hex)		ddm hopt + schuler Gmbh + Co. KG
-001E9E     (base 16)		ddm hopt + schuler Gmbh + Co. KG
-				Koenigsberger Strasse 12
-				Rottweil  Baden-Württemberg  78626
-				DE
-
-00-1E-BE   (hex)		Cisco Systems, Inc
-001EBE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-C3   (hex)		Kozio, Inc.
-001EC3     (base 16)		Kozio, Inc.
-				2015 Ionosphere Street
-				Longmont  CO  80504
-				US
-
-00-1E-BD   (hex)		Cisco Systems, Inc
-001EBD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-B9   (hex)		Sing Fai Technology Limited
-001EB9     (base 16)		Sing Fai Technology Limited
-				No.700, Kaohsiung University Rd., Nan-Tzu Dist.
-				Kaohsiung    811
-				TW
-
-00-1E-B7   (hex)		TBTech, Co., Ltd.
-001EB7     (base 16)		TBTech, Co., Ltd.
-				1109, Hyundai Krim, 1330-18, Seocho-dong,
-				Seoul    137-070
-				KR
-
-00-1E-69   (hex)		Thomson Inc.
-001E69     (base 16)		Thomson Inc.
-				101 West 103rd Street
-				Indianapolis  IN  46290-1102
-				US
-
-00-1E-92   (hex)		JEULIN S.A.
-001E92     (base 16)		JEULIN S.A.
-				ZI N°1
-				Evreux    F27019
-				FR
-
-00-1E-91   (hex)		KIMIN Electronic Co., Ltd.
-001E91     (base 16)		KIMIN Electronic Co., Ltd.
-				293-4, Dongdan-Dong
-				Gumi-city  GyeongBuk  730-906
-				KR
-
-00-1E-89   (hex)		CRFS Limited
-001E89     (base 16)		CRFS Limited
-				Building 7200
-				Waterbeach  Cambridgeshire  CB25 9TL
-				GB
-
-00-1E-86   (hex)		MEL Co.,Ltd.
-001E86     (base 16)		MEL Co.,Ltd.
-				Tsukagoshi 5-5-1,Warabi-shi,Saitama,Japna
-				Warabi  Saitama  335-0002
-				JP
-
-00-1E-88   (hex)		ANDOR SYSTEM SUPPORT CO., LTD.
-001E88     (base 16)		ANDOR SYSTEM SUPPORT CO., LTD.
-				Minami-Shinagawa 2-15-8
-				Sinagawa  Tokyo  140-0004
-				JP
-
-00-1E-0C   (hex)		Sherwood Information Partners, Inc.
-001E0C     (base 16)		Sherwood Information Partners, Inc.
-				1120 W, 122nd Ave, Ste 300
-				Westminster  CO  80234
-				US
-
-00-1E-02   (hex)		Sougou Keikaku Kougyou Co.,Ltd.
-001E02     (base 16)		Sougou Keikaku Kougyou Co.,Ltd.
-				HK2 bld. 2-21-10
-				Suginamiku  Tokyo  167-0053
-				JP
-
-00-1E-01   (hex)		Renesas Technology Sales Co., Ltd.
-001E01     (base 16)		Renesas Technology Sales Co., Ltd.
-				2-6-2
-				Chiyoda-ku  Tokyo  100-0004
-				JP
-
-00-1D-FF   (hex)		Network Critical Solutions Ltd
-001DFF     (base 16)		Network Critical Solutions Ltd
-				12B Southview Park
-				Reading  Berkshire  RG45AF
-				GB
-
-00-1E-00   (hex)		Shantou Institute of Ultrasonic Instruments
-001E00     (base 16)		Shantou Institute of Ultrasonic Instruments
-				No.77, Jinsha Road,
-				Shantou  Guangdong  515041
-				CN
-
-00-1E-54   (hex)		TOYO ELECTRIC Corporation
-001E54     (base 16)		TOYO ELECTRIC Corporation
-				1-39 HIKISAWA
-				KASUGAI  AICHI  480-0393
-				JP
-
-00-1E-3C   (hex)		Lyngbox Media AB
-001E3C     (base 16)		Lyngbox Media AB
-				Diskettgatan 11B
-				Linkoping    SE-58335
-				SE
-
-00-1E-4D   (hex)		Welkin Sciences, LLC
-001E4D     (base 16)		Welkin Sciences, LLC
-				102 S. Tejon St, Suite 200
-				Colorado Springs  CO  80903
-				US
-
-00-1E-4B   (hex)		City Theatrical
-001E4B     (base 16)		City Theatrical
-				475 Barell Ave
-				Carlstadt  New Jersey  07072
-				US
-
-00-1E-4A   (hex)		Cisco Systems, Inc
-001E4A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-13   (hex)		Cisco Systems, Inc
-001E13     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-0D   (hex)		Micran Ltd.
-001E0D     (base 16)		Micran Ltd.
-				Vershinina st. 47
-				Tomsk  Tomsk Region  634034
-				RU
-
-00-1E-09   (hex)		ZEFATEK Co.,LTD
-001E09     (base 16)		ZEFATEK Co.,LTD
-				326-4 Gasandong, Geumcheongu
-				Seoul    153-802
-				KR
-
-00-1E-06   (hex)		WIBRAIN
-001E06     (base 16)		WIBRAIN
-				306 JEI Plats B/D 459-11 Gasan-dong, Geumcheon-gu
-				SEOUL    153-803
-				KR
-
-00-1E-2C   (hex)		CyVerse Corporation
-001E2C     (base 16)		CyVerse Corporation
-				Shoutou Roukubankan Bldg. 4F
-				Shibuya-ku  Tokyo  150-0046
-				JP
-
-00-1E-26   (hex)		Digifriends Co. Ltd
-001E26     (base 16)		Digifriends Co. Ltd
-				Joyang B/D 6th Floor
-				Seoul    135-090
-				KR
-
-00-1E-23   (hex)		Electronic Educational Devices, Inc
-001E23     (base 16)		Electronic Educational Devices, Inc
-				1903 S Grant St
-				Denver  CO  80210
-				US
-
-00-1D-F3   (hex)		SBS Science & Technology Co., Ltd
-001DF3     (base 16)		SBS Science & Technology Co., Ltd
-				W2-B5/6 High-tech industrial park
-				ShenZhen  GuangDong  518057
-				CN
-
-00-1D-EE   (hex)		NEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.
-001DEE     (base 16)		NEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.
-				Alameda Rio Negro, 1030 - 19o. andar conj. 1904
-				Barueri  São Paulo  06454-000
-				BR
-
-00-1D-EA   (hex)		Commtest Instruments Ltd
-001DEA     (base 16)		Commtest Instruments Ltd
-				Level 2, 22 Moorhouse Ave
-				Christchurch  Canterbury  8243
-				NZ
-
-00-1D-DD   (hex)		DAT H.K. LIMITED
-001DDD     (base 16)		DAT H.K. LIMITED
-				Suite 1405 14/F., City Plaza 4, Tai Koo Wan Rd,
-				Tai Koo Shing  Hong Kong Island  064828
-				HK
-
-00-1D-E4   (hex)		Visioneered Image Systems
-001DE4     (base 16)		Visioneered Image Systems
-				10561 Garden Grove Blvd
-				Garden Grove  California  92843
-				US
-
-00-1D-E2   (hex)		Radionor Communications
-001DE2     (base 16)		Radionor Communications
-				Ingvald Ystgaards veg 23
-				Trondheim  TRD  7046
-				NO
-
-00-1D-D7   (hex)		Algolith
-001DD7     (base 16)		Algolith
-				400 Isabey
-				Saint-Laurent  Qc  H4T 1V3
-				CA
-
-00-1D-C9   (hex)		GainSpan Corp.
-001DC9     (base 16)		GainSpan Corp.
-				P.O. Box 223580
-				Carmel  CA  93922
-				US
-
-00-1D-86   (hex)		Shinwa Industries(China) Ltd.
-001D86     (base 16)		Shinwa Industries(China) Ltd.
-				8 Pingnanzhong Road, Pingnan Industrial Park, Zhongkai No.4 Road,
-				Huizhou City  Guangdong Province  516006
-				CN
-
-00-1D-88   (hex)		Clearwire
-001D88     (base 16)		Clearwire
-				1475 120th Ave NE
-				Bellevue  Washington  98005
-				US
-
-00-1D-81   (hex)		GUANGZHOU GATEWAY ELECTRONICS CO., LTD
-001D81     (base 16)		GUANGZHOU GATEWAY ELECTRONICS CO., LTD
-				B20#,4F,No.9 Jiangong Road,Tianhe Software Park,Tianhe District,
-				GUANGZHOU  Guangdong  510665
-				CN
-
-00-1D-7D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-001D7D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				
-				Pin-Jen  Taoyuan  324
-				TW
-
-00-1D-C7   (hex)		L-3 Communications Geneva Aerospace
-001DC7     (base 16)		L-3 Communications Geneva Aerospace
-				4240 International Parkway
-				Carrollton  Texas  75007
-				US
-
-00-1D-89   (hex)		VaultStor Corporation
-001D89     (base 16)		VaultStor Corporation
-				1010 Brioso Drive
-				Costa Mesa  CA  92627
-				US
-
-00-1D-66   (hex)		Hyundai Telecom
-001D66     (base 16)		Hyundai Telecom
-				Hyundai Telecom Bldg., 4273-12, Shingil-Dong, Youngdungpo-Gu,
-				Seoul    150-859
-				KR
-
-00-1D-77   (hex)		NSGate
-001D77     (base 16)		NSGate
-				Rm 1304, 39 Kirpichnaya Street
-				Moscow    105187
-				RU
-
-00-1D-A2   (hex)		Cisco Systems, Inc
-001DA2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-99   (hex)		Cyan Optic, Inc.
-001D99     (base 16)		Cyan Optic, Inc.
-				1390 N. McDowell Blvd
-				Petaluma  CA  94954
-				US
-
-00-1D-9B   (hex)		Hokuyo Automatic Co., Ltd.
-001D9B     (base 16)		Hokuyo Automatic Co., Ltd.
-				Niitaka 1-10-9
-				Osaka    532-0033
-				JP
-
-00-1D-BC   (hex)		Nintendo Co., Ltd.
-001DBC     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1D-B6   (hex)		BestComm Networks, Inc.
-001DB6     (base 16)		BestComm Networks, Inc.
-				4400 E. Broadway Blvd.
-				Tucson  AZ  85711
-				US
-
-00-1D-AC   (hex)		Gigamon Systems LLC
-001DAC     (base 16)		Gigamon Systems LLC
-				598 Gibraltar Drive
-				Milpitas  CA  95035
-				US
-
-00-1D-15   (hex)		Shenzhen Dolphin Electronic Co., Ltd
-001D15     (base 16)		Shenzhen Dolphin Electronic Co., Ltd
-				Building21,Baoyuan, No.1 Industrial Zone,
-				Shenzhen  Guangdong  518103
-				CN
-
-00-1D-16   (hex)		SFR
-001D16     (base 16)		SFR
-				40/42 Quai du point du jour
-				Boulongne Billancourt Hauts de Seine     92659
-				FR
-
-00-1D-11   (hex)		Analogue & Micro Ltd
-001D11     (base 16)		Analogue & Micro Ltd
-				Lakeside House
-				Llantarnam Industrial Park  Cwmbran  NP44 3XS
-				GB
-
-00-1D-12   (hex)		ROHM CO., LTD.
-001D12     (base 16)		ROHM CO., LTD.
-				21 Saiin-Mizosaki-cho,
-				Kyoto-shi  KYOTO  615-8585
-				JP
-
-00-1D-47   (hex)		Covote GmbH & Co KG
-001D47     (base 16)		Covote GmbH & Co KG
-				Ritterhufen 30
-				Berlin    14165
-				DE
-
-00-1D-41   (hex)		Hardy Instruments
-001D41     (base 16)		Hardy Instruments
-				3860 Calle Fortunada
-				San Diego  CA  92123
-				US
-
-00-1D-3D   (hex)		Avidyne Corporation
-001D3D     (base 16)		Avidyne Corporation
-				202 West Dr
-				Melbourne  FL  32904
-				US
-
-00-1D-3C   (hex)		Muscle Corporation
-001D3C     (base 16)		Muscle Corporation
-				2-5-35, Kikawa-higashi
-				Osaka    532-0012
-				JP
-
-00-1D-3A   (hex)		mh acoustics LLC
-001D3A     (base 16)		mh acoustics LLC
-				25A Summit Ave
-				Summit  NJ  07901
-				US
-
-00-1D-49   (hex)		Innovation Wireless Inc.
-001D49     (base 16)		Innovation Wireless Inc.
-				4F-1, NO.81, SHUEILI RD.
-				HSINCHU    30059
-				TW
-
-00-1D-46   (hex)		Cisco Systems, Inc
-001D46     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1D-48   (hex)		Sensor-Technik Wiedemann GmbH
-001D48     (base 16)		Sensor-Technik Wiedemann GmbH
-				Am Bärenwald 6
-				Kaufbeuren  Bayern  87600
-				DE
-
-00-1D-76   (hex)		Eyeheight Ltd.
-001D76     (base 16)		Eyeheight Ltd.
-				Unit 34, Park House
-				Watford  Herts  WD18 8PH
-				GB
-
-00-1D-7A   (hex)		Wideband Semiconductor, Inc.
-001D7A     (base 16)		Wideband Semiconductor, Inc.
-				1350 Pear Ave
-				Mountain View  CA  94043
-				US
-
-00-1D-68   (hex)		Thomson Telecom Belgium
-001D68     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				Edegem  Antwerp  B-2650
-				BE
-
-00-1D-26   (hex)		Rockridgesound Technology Co.
-001D26     (base 16)		Rockridgesound Technology Co.
-				Fumin Industrial Park, Houjie Town
-				Dong Guan  Guang Dong  523956
-				CN
-
-00-1D-35   (hex)		Viconics Electronics Inc.
-001D35     (base 16)		Viconics Electronics Inc.
-				9245 Langelier
-				Saint Leonard  Quebec  H1P3K9
-				CA
-
-00-1D-31   (hex)		HIGHPRO INTERNATIONAL R&D CO,.LTD.
-001D31     (base 16)		HIGHPRO INTERNATIONAL R&D CO,.LTD.
-				3F,No.295,RuiGuang Rd,Nei Hu,
-				Taipei    114
-				TW
-
-00-1D-61   (hex)		BIJ Corporation
-001D61     (base 16)		BIJ Corporation
-				7F Takamizawa Building,2-7-10,
-				Yokohama  Kanagawa  220-0004
-				JP
-
-00-1D-5C   (hex)		Tom Communication Industrial Co.,Ltd.
-001D5C     (base 16)		Tom Communication Industrial Co.,Ltd.
-				1173 Nippa-choh Kohoku-ku
-				Yokohama  Kanagawa  223-0057
-				JP
-
-00-1D-56   (hex)		Kramer Electronics Ltd.
-001D56     (base 16)		Kramer Electronics Ltd.
-				3 Am VeOlamo Street
-				Jerusalem    95463
-				IL
-
-00-1D-4E   (hex)		TCM Mobile LLC
-001D4E     (base 16)		TCM Mobile LLC
-				9218 Metcalf,
-				Overland Park  Kansas  66212
-				US
-
-00-1D-21   (hex)		Alcad SL
-001D21     (base 16)		Alcad SL
-				Pol. Ind. Arreche-Ugalde, 1
-				Irún  Guipúzcoa  E-20305
-				ES
-
-00-1D-1C   (hex)		Gennet s.a.
-001D1C     (base 16)		Gennet s.a.
-				2 Mesogeion ave.
-				Athens  Attiki  11527
-				GR
-
-00-1C-E1   (hex)		INDRA SISTEMAS, S.A.
-001CE1     (base 16)		INDRA SISTEMAS, S.A.
-				Ctra. de Loeches, n.º 9
-				Torrejón de Ardoz  MADRID  28850
-				ES
-
-00-1C-E0   (hex)		DASAN TPS
-001CE0     (base 16)		DASAN TPS
-				HUMAX Village 6F, 11-4 Sunae-dong, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-825
-				KR
-
-00-1C-D9   (hex)		GlobalTop Technology Inc.
-001CD9     (base 16)		GlobalTop Technology Inc.
-				16 Nan-ke 9th Rd. Science-base Industrial Park,
-				ShanHua  Tainan county  741
-				TW
-
-00-1C-DA   (hex)		Exegin Technologies Limited
-001CDA     (base 16)		Exegin Technologies Limited
-				401 - 2071 Kingsway Avenue
-				Port Coquitlam  BC  V3C 6N2
-				CA
-
-00-1C-D2   (hex)		King Champion (Hong Kong) Limited
-001CD2     (base 16)		King Champion (Hong Kong) Limited
-				Unit 1520, 15/F, Phase 1, Metro Centre,
-				Kowloon    
-				HK
-
-00-1C-A6   (hex)		Win4NET
-001CA6     (base 16)		Win4NET
-				1301 KOLON Digital Tower,
-				Kuro-gu  Seoul  152-848
-				KR
-
-00-1C-A9   (hex)		Audiomatica Srl
-001CA9     (base 16)		Audiomatica Srl
-				Via Manfredi 12
-				Florence  Italy  50136
-				IT
-
-00-1C-A1   (hex)		AKAMAI TECHNOLOGIES, INC.
-001CA1     (base 16)		AKAMAI TECHNOLOGIES, INC.
-				8 CAMBRIDGE CENTER
-				CAMBRIDGE  MA  02142
-				US
-
-00-1C-99   (hex)		Shunra Software Ltd.
-001C99     (base 16)		Shunra Software Ltd.
-				20 Hata'as St.
-				Kefar-Saba    44425
-				IL
-
-00-1C-F9   (hex)		Cisco Systems, Inc
-001CF9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-F1   (hex)		SUPoX Technology Co. , LTD.
-001CF1     (base 16)		SUPoX Technology Co. , LTD.
-				7F, 419 , Chung San Rd. , Sec 2
-				Chung Ho  Taipei Hsien  235
-				TW
-
-00-1C-CE   (hex)		By Techdesign
-001CCE     (base 16)		By Techdesign
-				C/ Tomas Edison 5
-				Arganda del Rey  Madrid  28500
-				ES
-
-00-1C-F3   (hex)		EVS BROADCAST EQUIPMENT
-001CF3     (base 16)		EVS BROADCAST EQUIPMENT
-				Liege Science Park
-				Ougree  Liege  4102
-				BE
-
-00-1C-F4   (hex)		Media Technology Systems Inc
-001CF4     (base 16)		Media Technology Systems Inc
-				766 Lakefield Road
-				Westlake Village  CA  91377
-				US
-
-00-1C-E6   (hex)		INNES
-001CE6     (base 16)		INNES
-				80 avenue des Buttes de Coësmes
-				RENNES    35700
-				FR
-
-00-1C-B9   (hex)		KWANG SUNG ELECTRONICS CO., LTD.
-001CB9     (base 16)		KWANG SUNG ELECTRONICS CO., LTD.
-				201, WORLD VENTURE TOWN 60-24, GASAN-DONG GEUMCHUN-GU,
-				SEOUL    153-801
-				KR
-
-00-1D-03   (hex)		Design Solutions Inc.
-001D03     (base 16)		Design Solutions Inc.
-				81 David Love Place
-				Goleta  Ca  93117
-				US
-
-00-1C-A3   (hex)		Terra
-001CA3     (base 16)		Terra
-				Draugystes str. 22
-				Kaunas    LT-51256
-				LT
-
-00-1C-90   (hex)		Empacket Corporation
-001C90     (base 16)		Empacket Corporation
-				2-6-3 Nishi-Gotanda
-				Shinagawa  Tokyo  141-0031
-				JP
-
-00-1C-8E   (hex)		Alcatel-Lucent IPD
-001C8E     (base 16)		Alcatel-Lucent IPD
-				701 E. Middlefield Rd.
-				Mountain View  CA  94043
-				US
-
-00-1C-8F   (hex)		Advanced Electronic Design, Inc.
-001C8F     (base 16)		Advanced Electronic Design, Inc.
-				344 John L Dietsch Blvd., Unit #2
-				North Attleboro  MA  02763
-				US
-
-00-1C-88   (hex)		TRANSYSTEM INC.
-001C88     (base 16)		TRANSYSTEM INC.
-				No. 1-2, Li-Hsin Rd 1, Science-Based Industrial Park
-				Hsinchu    300
-				TW
-
-00-1C-86   (hex)		Cranite Systems, Inc.
-001C86     (base 16)		Cranite Systems, Inc.
-				121 Albright Way
-				Los Gatos  CA  95032
-				US
-
-00-1C-4F   (hex)		MACAB AB
-001C4F     (base 16)		MACAB AB
-				Vannhögsgatan 7
-				Trelleborg    23166
-				SE
-
-00-1C-4E   (hex)		TASA International Limited
-001C4E     (base 16)		TASA International Limited
-				5FÃ‚Â£Ã‚Â¬Building2Ã‚Â£Ã‚Â¬No.1295 ,Xin Jinqiao Road,
-				Shanghai    201206
-				CN
-
-00-1C-4B   (hex)		Gener8, Inc.
-001C4B     (base 16)		Gener8, Inc.
-				897 Independence Ave
-				Mountain View  CA  94043
-				US
-
-00-1C-9B   (hex)		FEIG ELECTRONIC GmbH
-001C9B     (base 16)		FEIG ELECTRONIC GmbH
-				Lange Straße 4
-				Weilburg  Hessen  35781
-				DE
-
-00-1C-95   (hex)		Opticomm Corporation
-001C95     (base 16)		Opticomm Corporation
-				6827 Nancy Ridge Dr
-				San Diego  CA  92121
-				US
-
-00-1C-97   (hex)		Enzytek Technology Inc.,
-001C97     (base 16)		Enzytek Technology Inc.,
-				7F, No.35, Hsueh Fu Rd.,
-				Hsinchu    300,
-				TW
-
-00-1C-70   (hex)		NOVACOMM LTDA
-001C70     (base 16)		NOVACOMM LTDA
-				RUA BEIJUI, 70
-				São Paulo    04689-000
-				BR
-
-00-1C-6E   (hex)		Newbury Networks, Inc.
-001C6E     (base 16)		Newbury Networks, Inc.
-				419 Boylston Street
-				Boston  MA  02116
-				US
-
-00-1C-6B   (hex)		COVAX  Co. Ltd
-001C6B     (base 16)		COVAX  Co. Ltd
-				3-27-22 kitahanada-cho kitaku
-				sakai-shi  oosaka  591-8002
-				JP
-
-00-1C-69   (hex)		Packet Vision Ltd
-001C69     (base 16)		Packet Vision Ltd
-				SC House
-				Maidenhead  Berks  SL6 4UB
-				GB
-
-00-1C-3D   (hex)		WaveStorm
-001C3D     (base 16)		WaveStorm
-				Rue d'Oradour-sur-Glâne
-				Paris  ÃƒÅ½le-de-France  75015
-				FR
-
-00-1C-7F   (hex)		Check Point Software Technologies
-001C7F     (base 16)		Check Point Software Technologies
-				3A Jabotinsky St.
-				Ramat Gan    52520
-				IL
-
-00-1C-78   (hex)		WYPLAY SAS
-001C78     (base 16)		WYPLAY SAS
-				200 avenue de Provence
-				ALLAUCH  BdR  13190
-				FR
-
-00-1C-58   (hex)		Cisco Systems, Inc
-001C58     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-5A   (hex)		Advanced Relay Corporation
-001C5A     (base 16)		Advanced Relay Corporation
-				1896 Columbia St
-				Eugene  OR  97403
-				US
-
-00-1C-65   (hex)		JoeScan, Inc.
-001C65     (base 16)		JoeScan, Inc.
-				4510 NE 68th Dr, Ste. 124
-				Vancouver  WA  98661
-				US
-
-00-1C-5F   (hex)		Winland Electronics, Inc.
-001C5F     (base 16)		Winland Electronics, Inc.
-				1950 Excel Drive
-				Mankato  MN  56001
-				US
-
-00-1C-40   (hex)		VDG-Security bv
-001C40     (base 16)		VDG-Security bv
-				Radonstraat 10-14
-				Zoetermeer  ZH  2718 TA
-				NL
-
-00-1C-3A   (hex)		Element Labs, Inc.
-001C3A     (base 16)		Element Labs, Inc.
-				3350 Scott Boulevard
-				Santa Clara  CA  95054
-				US
-
-00-1C-18   (hex)		Sicert S.r.L.
-001C18     (base 16)		Sicert S.r.L.
-				Via Bernardino Alimena, 128
-				Rome    00173
-				IT
-
-00-1C-1A   (hex)		Thomas Instrumentation, Inc
-001C1A     (base 16)		Thomas Instrumentation, Inc
-				133 Landing Rd
-				Cape May Court House  NJ  08210
-				US
-
-00-1C-0E   (hex)		Cisco Systems, Inc
-001C0E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-13   (hex)		OPTSYS TECHNOLOGY CO., LTD.
-001C13     (base 16)		OPTSYS TECHNOLOGY CO., LTD.
-				SUITE B-802 BUNDANG TECHNO PARK
-				SEONGNAM-SI  GYEONGGI-DO  463-760
-				KR
-
-00-1C-0B   (hex)		SmartAnt Telecom
-001C0B     (base 16)		SmartAnt Telecom
-				2F, No. 669, Sec. 4, Chung Hsing Rd., Chutung
-				Hsinchu    310
-				TW
-
-00-1B-D0   (hex)		IDENTEC SOLUTIONS
-001BD0     (base 16)		IDENTEC SOLUTIONS
-				Hertzstraße 10
-				Weinheim    69469
-				DE
-
-00-1B-CD   (hex)		DAVISCOMMS (S) PTE LTD
-001BCD     (base 16)		DAVISCOMMS (S) PTE LTD
-				Blk 70 Ubi Crescent #01-07
-				    408570
-				SG
-
-00-1B-CA   (hex)		Beijing Run Technology LTD. Company
-001BCA     (base 16)		Beijing Run Technology LTD. Company
-				4/F, Hangtian Technology Building
-				  Beijing  100037
-				CN
-
-00-1B-CC   (hex)		KINGTEK CCTV ALLIANCE CO., LTD.
-001BCC     (base 16)		KINGTEK CCTV ALLIANCE CO., LTD.
-				5F-3, NO. 106, SEC. 3, HSIN YI ROAD
-				TAIPEI    106
-				TW
-
-00-1B-F4   (hex)		KENWIN INDUSTRIAL(HK) LTD.
-001BF4     (base 16)		KENWIN INDUSTRIAL(HK) LTD.
-				RM.1512 15/F SHATIN GALLERIA
-				    
-				HK
-
-00-1B-F9   (hex)		Intellitect Water Ltd
-001BF9     (base 16)		Intellitect Water Ltd
-				Suite 19, Basepoint Business Centre
-				Christchurch  Dorset  BH23 ^NW
-				GB
-
-00-1B-FA   (hex)		G.i.N. mbH
-001BFA     (base 16)		G.i.N. mbH
-				Raiffeisenstraße 15
-				Griesheim  Hessen  64347
-				DE
-
-00-1B-F3   (hex)		TRANSRADIO SenderSysteme Berlin AG
-001BF3     (base 16)		TRANSRADIO SenderSysteme Berlin AG
-				Mertensstrasse 63
-				Berlin    13587
-				DE
-
-00-1C-21   (hex)		Nucsafe Inc.
-001C21     (base 16)		Nucsafe Inc.
-				601 Oak Ridge Turnpike
-				Oak Ridge  Tennessee  37830
-				US
-
-00-1C-1E   (hex)		emtrion GmbH
-001C1E     (base 16)		emtrion GmbH
-				Alter Schlachthof 45
-				Karlsruhe  Baden Wuerttemberg  76131
-				DE
-
-00-1B-DE   (hex)		Renkus-Heinz, Inc.
-001BDE     (base 16)		Renkus-Heinz, Inc.
-				19201 Cook St.
-				Foothill Ranch  CA  92610
-				US
-
-00-1B-DB   (hex)		Valeo VECS
-001BDB     (base 16)		Valeo VECS
-				2 Avenue Fernand Pouillon
-				CRETEIL  Ile de France  94042
-				FR
-
-00-1B-D8   (hex)		FLIR Systems Inc
-001BD8     (base 16)		FLIR Systems Inc
-				65 Challenger Road
-				Ridgefield Park  NJ  07660-2103
-				US
-
-00-1B-D4   (hex)		Cisco Systems, Inc
-001BD4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-2D   (hex)		FlexRadio Systems
-001C2D     (base 16)		FlexRadio Systems
-				8900 Marybank Dr.
-				Austin  TX  78750
-				US
-
-00-1C-2C   (hex)		Synapse
-001C2C     (base 16)		Synapse
-				132 Export Circle
-				Huntsville  AL  35806
-				US
-
-00-1C-08   (hex)		Echo360, Inc.
-001C08     (base 16)		Echo360, Inc.
-				11955 Freedom Drive
-				Reston  VA  20190
-				US
-
-00-1B-C8   (hex)		MIURA CO.,LTD
-001BC8     (base 16)		MIURA CO.,LTD
-				620-1,Nakanishisoto
-				Matsuyama  Ehime  799-2425
-				JP
-
-00-1B-C1   (hex)		HOLUX Technology, Inc.
-001BC1     (base 16)		HOLUX Technology, Inc.
-				1F, No. 30, R&D Rd. II,
-				Hsinchu    300
-				TW
-
-00-1B-BC   (hex)		Silver Peak Systems, Inc.
-001BBC     (base 16)		Silver Peak Systems, Inc.
-				471 El Camino Real
-				Santa Clara  CA  95050
-				US
-
-00-1B-73   (hex)		DTL Broadcast Ltd
-001B73     (base 16)		DTL Broadcast Ltd
-				Johnson's Estate
-				HAYES  Middlesex  UB3 3BA
-				GB
-
-00-1B-71   (hex)		Telular Corp.
-001B71     (base 16)		Telular Corp.
-				311 South Wacker Drive
-				Chicago  IL  60606
-				US
-
-00-1B-97   (hex)		Violin Technologies
-001B97     (base 16)		Violin Technologies
-				33 Wood Ave South
-				Iselin  NJ  08830
-				US
-
-00-1B-A8   (hex)		UBI&MOBI,.Inc
-001BA8     (base 16)		UBI&MOBI,.Inc
-				3F, Duido Bldg, #288-5, Yangjae-Dong
-				Seocho-Gu  Seoul  137-130
-				KR
-
-00-1B-81   (hex)		DATAQ Instruments, Inc.
-001B81     (base 16)		DATAQ Instruments, Inc.
-				241 Springside Drive
-				Akron  Ohio  44333
-				US
-
-00-1B-7D   (hex)		CXR Anderson Jacobson
-001B7D     (base 16)		CXR Anderson Jacobson
-				Rue de l'ornette
-				Abondant    28410
-				FR
-
-00-1B-79   (hex)		FAIVELEY TRANSPORT
-001B79     (base 16)		FAIVELEY TRANSPORT
-				ZI du bois de plante
-				LA VILLE AUX DAMES    37700
-				FR
-
-00-1B-65   (hex)		China Gridcom Co., Ltd
-001B65     (base 16)		China Gridcom Co., Ltd
-				21/F, Huaneng Building, No. 2068 Shennan Main Road
-				Shenzhen  Guangdong  0086
-				CN
-
-00-1B-88   (hex)		Divinet Access Technologies Ltd
-001B88     (base 16)		Divinet Access Technologies Ltd
-				4th Floor, Media Center,
-				Pune  Maharashtra  411007
-				IN
-
-00-1B-83   (hex)		Finsoft Ltd
-001B83     (base 16)		Finsoft Ltd
-				16-18 Hatton Garden
-				London    EC1N 8AT
-				GB
-
-00-1B-AB   (hex)		Telchemy, Incorporated
-001BAB     (base 16)		Telchemy, Incorporated
-				2905 Premiere Parkway
-				Duluth  GA  30097
-				US
-
-00-1B-AE   (hex)		Micro Control Systems, Inc
-001BAE     (base 16)		Micro Control Systems, Inc
-				5580 Enterprise Parkway
-				Fort Myers  Florida  33905
-				US
-
-00-1B-A0   (hex)		Awox
-001BA0     (base 16)		Awox
-				93, Place Pierre Duhem,
-				Montpellier  Herault  34000
-				FR
-
-00-1B-51   (hex)		Vector Technology Corp.
-001B51     (base 16)		Vector Technology Corp.
-				No.7, Lane12, Yajou Road.
-				Tucheng  Taipei  236
-				TW
-
-00-1B-54   (hex)		Cisco Systems, Inc
-001B54     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1B-4A   (hex)		W&W Communications, Inc.
-001B4A     (base 16)		W&W Communications, Inc.
-				2903 Bunker Hill Lane
-				Santa Clara  CA  95054
-				US
-
-00-1A-FA   (hex)		Welch Allyn, Inc.
-001AFA     (base 16)		Welch Allyn, Inc.
-				4619 Jordan Road
-				Skaneateles Falls  NY  13153-0187
-				US
-
-00-1A-F7   (hex)		dataschalt e+a GmbH
-001AF7     (base 16)		dataschalt e+a GmbH
-				An der Hülshorst 7-9
-				Lübeck    23568
-				DE
-
-00-1A-F3   (hex)		Samyoung Electronics
-001AF3     (base 16)		Samyoung Electronics
-				146-1, sangdaewon-dong, joongwon-gu
-				sungnam-shi  Gyunggi-do  462-807
-				KR
-
-00-1A-EF   (hex)		Loopcomm Technology, Inc.
-001AEF     (base 16)		Loopcomm Technology, Inc.
-				18F-1, No. 150, Jian Yi Rd.,
-				Chung-Ho City  Taipei Hsien  235
-				TW
-
-00-1A-EC   (hex)		Keumbee Electronics Co.,Ltd.
-001AEC     (base 16)		Keumbee Electronics Co.,Ltd.
-				3-26, Jangsang-dong, Sangrok-gu
-				Ansan-si  Kyungki-do  426-410
-				KR
-
-00-1B-44   (hex)		SanDisk Corporation
-001B44     (base 16)		SanDisk Corporation
-				601 McCarthy Boulevard
-				Milpitas  CA  95035
-				US
-
-00-1B-46   (hex)		Blueone Technology Co.,Ltd
-001B46     (base 16)		Blueone Technology Co.,Ltd
-				Room 309,3 Floor, 404 Building, ShangBu industrial
-				Shenzhen  Guangdong  518028
-				CN
-
-00-1B-40   (hex)		Network Automation mxc AB
-001B40     (base 16)		Network Automation mxc AB
-				Box 7294
-				Stockholm    10390
-				SE
-
-00-1B-42   (hex)		Wise & Blue
-001B42     (base 16)		Wise & Blue
-				#715-3 Anyang Megavalley
-				Anyang-Si  Gyunggi-Do  431-767
-				KR
-
-00-1B-35   (hex)		ChongQing JINOU Science & Technology Development CO.,Ltd
-001B35     (base 16)		ChongQing JINOU Science & Technology Development CO.,Ltd
-				Chuangyeyuan 208# Keyuan 3rd Road 106#
-				Chongqing    400030
-				CN
-
-00-1B-36   (hex)		Tsubata Engineering Co.,Ltd. (Head Office)
-001B36     (base 16)		Tsubata Engineering Co.,Ltd. (Head Office)
-				Koyanagi 1-2
-				Ibaraki  Osaka  567-0852
-				JP
-
-00-1B-39   (hex)		Proxicast
-001B39     (base 16)		Proxicast
-				312 Sunnyfield Drive
-				Glenshaw  PA  15116
-				US
-
-00-1B-3B   (hex)		Yi-Qing CO., LTD
-001B3B     (base 16)		Yi-Qing CO., LTD
-				310 ROOM,12F
-				TAIPEI    100
-				TW
-
-00-1B-20   (hex)		TPine Technology
-001B20     (base 16)		TPine Technology
-				3F, No.1, AN-I Rd,
-				Keelung    111
-				TW
-
-00-1B-22   (hex)		Palit Microsystems ( H.K.) Ltd.
-001B22     (base 16)		Palit Microsystems ( H.K.) Ltd.
-				Room 4-6,11F,Nan Fung Commercial Center
-				Kowloon    111
-				HK
-
-00-1B-1C   (hex)		Coherent
-001B1C     (base 16)		Coherent
-				1280 Blues Hills Ave.
-				Bloomfield  CT  06002
-				US
-
-00-1B-19   (hex)		IEEE I&M Society TC9
-001B19     (base 16)		IEEE I&M Society TC9
-				100 Bureau Dr., Mail Stop 8220
-				Gaithersburg  MD  20899-8220
-				US
-
-00-1B-64   (hex)		IsaacLandKorea Co., Ltd,
-001B64     (base 16)		IsaacLandKorea Co., Ltd,
-				Rm 608, Hangang-Hyundai-Hyel Bldg. 2-36,
-				Seoul    140-871
-				KR
-
-00-1B-26   (hex)		RON-Telecom ZAO
-001B26     (base 16)		RON-Telecom ZAO
-				15 A, Zarechnaya st.
-				Trehgorny  Chelyabinsk region  456080
-				RU
-
-00-1B-13   (hex)		Icron Technologies Corporation
-001B13     (base 16)		Icron Technologies Corporation
-				221 - 4664 Lougheed Highway
-				Burnaby  BC  V5C 5T5
-				CA
-
-00-1B-0F   (hex)		Petratec
-001B0F     (base 16)		Petratec
-				12 Derech HaSharon
-				Kfar Saba  Sharon  44271
-				IL
-
-00-1A-A9   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-001AA9     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-00-1A-A8   (hex)		Mamiya Digital Imaging Co., Ltd.
-001AA8     (base 16)		Mamiya Digital Imaging Co., Ltd.
-				2-2, 1-chome, Koraku
-				Bunkyo-ku  Tokyo  112-0004
-				JP
-
-00-1A-99   (hex)		Smarty (HZ) Information Electronics Co., Ltd
-001A99     (base 16)		Smarty (HZ) Information Electronics Co., Ltd
-				Yonghua Industrial District,Huishen Road,Zhenlong Town
-				HuiZhou  GuangDong  516227
-				CN
-
-00-1A-A6   (hex)		Telefunken Radio Communication Systems GmbH &CO.KG
-001AA6     (base 16)		Telefunken Radio Communication Systems GmbH &CO.KG
-				Eberhard-Finckh-Strasse 55
-				Ulm  Baden-Wurttemberg  89075
-				DE
-
-00-1A-96   (hex)		ECLER S.A.
-001A96     (base 16)		ECLER S.A.
-				Motors 166-168
-				Barcelona    08038
-				ES
-
-00-1A-91   (hex)		FusionDynamic Ltd.
-001A91     (base 16)		FusionDynamic Ltd.
-				1 B.S.R. towers, 4-th floor
-				Ramat Gan    52573
-				IL
-
-00-1A-8C   (hex)		Sophos Ltd
-001A8C     (base 16)		Sophos Ltd
-				The Pentagon
-				Abingdon  Oxfordshire  OX14 3YP
-				GB
-
-00-1A-B3   (hex)		VISIONITE INC.
-001AB3     (base 16)		VISIONITE INC.
-				#707 Daeryung Technotown-2 569-21
-				Seoul    153-771
-				KR
-
-00-1A-CA   (hex)		Tilera Corporation
-001ACA     (base 16)		Tilera Corporation
-				1900 West Park Drive
-				Westborough  MA  01581
-				US
-
-00-1A-84   (hex)		V One Multimedia Pte Ltd
-001A84     (base 16)		V One Multimedia Pte Ltd
-				Blk 54, Kallang Bahru
-				    339336
-				SG
-
-00-1A-B9   (hex)		PMC
-001AB9     (base 16)		PMC
-				56, avenue Raspail
-				Saint Maur    94100
-				FR
-
-00-1A-BA   (hex)		Caton Overseas Limited
-001ABA     (base 16)		Caton Overseas Limited
-				Room 102, No. 101, Lane 91
-				Shanghai    200127
-				CN
-
-00-1A-D1   (hex)		FARGO CO., LTD.
-001AD1     (base 16)		FARGO CO., LTD.
-				4F. KYEMYUNG B/D
-				SEOUL    135 885
-				KR
-
-00-1A-3A   (hex)		Dongahelecomm
-001A3A     (base 16)		Dongahelecomm
-				678-3,Jeil-ri,Yanggi-myun,Cheoin-gu
-				Yongin-si  Gyeonggi-do  449-821
-				KR
-
-00-1A-3B   (hex)		Doah Elecom Inc.
-001A3B     (base 16)		Doah Elecom Inc.
-				8th fl. Century Plaza, 277-40
-				Seoul    133-123
-				KR
-
-00-1A-3C   (hex)		Technowave Ltd.
-001A3C     (base 16)		Technowave Ltd.
-				Sakurai Bldg.1F,
-				Musashino-shi  Tokyo  180-0006
-				JP
-
-00-1A-40   (hex)		A-FOUR TECH CO., LTD.
-001A40     (base 16)		A-FOUR TECH CO., LTD.
-				6F, No. 108, Min-Chuan Rd.,
-				Hsin-Tien  Taipei  23141
-				TW
-
-00-1A-30   (hex)		Cisco Systems, Inc
-001A30     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-7B   (hex)		Teleco, Inc.
-001A7B     (base 16)		Teleco, Inc.
-				430 Woodruff Rd.
-				Greenville  SC  29607
-				US
-
-00-1A-36   (hex)		Aipermon GmbH & Co. KG
-001A36     (base 16)		Aipermon GmbH & Co. KG
-				Zamdorfer Str. 100
-				Munich  Bavaria  D-81677
-				DE
-
-00-1A-26   (hex)		Deltanode Solutions AB
-001A26     (base 16)		Deltanode Solutions AB
-				Box 92 184
-				Stockholm    120 09
-				SE
-
-00-1A-6D   (hex)		Cisco Systems, Inc
-001A6D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-6E   (hex)		Impro Technologies
-001A6E     (base 16)		Impro Technologies
-				47B Gillits Rd
-				Pinetown  KwaZulu-Natal  3610
-				ZA
-
-00-1A-6C   (hex)		Cisco Systems, Inc
-001A6C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-4A   (hex)		Qumranet Inc.
-001A4A     (base 16)		Qumranet Inc.
-				530 Lakeside Drive
-				Sunnyvale  California  94085
-				US
-
-00-1A-3E   (hex)		Faster Technology LLC
-001A3E     (base 16)		Faster Technology LLC
-				1812 Avenue D
-				Katy  Texas  77493
-				US
-
-00-1A-63   (hex)		Elster Solutions, LLC,
-001A63     (base 16)		Elster Solutions, LLC,
-				208 South Rogers Lane
-				Raleigh  NC  27610
-				US
-
-00-1A-59   (hex)		Ircona
-001A59     (base 16)		Ircona
-				Unit 4B-1, Corporate Park
-				Blanchardstown  Dublin  15
-				IE
-
-00-1A-46   (hex)		Digital Multimedia Technology Co., Ltd
-001A46     (base 16)		Digital Multimedia Technology Co., Ltd
-				Doorim Bldg, 3rd Fl, 164-21 Poi-Dong,
-				Seoul  Kangnam-Gu  135-960
-				KR
-
-00-1A-25   (hex)		DELTA DORE
-001A25     (base 16)		DELTA DORE
-				BONNEMAIN
-				COMBOURG  BRETAGNE 35  35270
-				FR
-
-00-19-FE   (hex)		SHENZHEN SEECOMM TECHNOLOGY CO.,LTD.
-0019FE     (base 16)		SHENZHEN SEECOMM TECHNOLOGY CO.,LTD.
-				Room 609,404Yannan Road
-				ShenZhen  Guangdong  
-				CN
-
-00-19-FD   (hex)		Nintendo Co., Ltd.
-0019FD     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1A-0D   (hex)		HandHeld entertainment, Inc.
-001A0D     (base 16)		HandHeld entertainment, Inc.
-				539 Bryant Street, Suite 403
-				San Francisco  CA  94103
-				US
-
-00-1A-0E   (hex)		Cheng Uei Precision Industry Co.,Ltd
-001A0E     (base 16)		Cheng Uei Precision Industry Co.,Ltd
-				Junda Industry District, Dongkeng Town,Dongguan City
-				DongGuan  Guang Dong  523455
-				CN
-
-00-19-CD   (hex)		Chengdu ethercom information technology Ltd.
-0019CD     (base 16)		Chengdu ethercom information technology Ltd.
-				South Extension of Tianfu Wide Road No.7 department room 201
-				Chengdu  Sichuan  610041
-				CN
-
-00-19-D9   (hex)		Zeutschel GmbH
-0019D9     (base 16)		Zeutschel GmbH
-				Heerweg 2
-				Tübingen-Hirschau  BW  D-72070
-				DE
-
-00-1A-01   (hex)		Smiths Medical
-001A01     (base 16)		Smiths Medical
-				4350 Rivergreen Parkway
-				Duluth  GA  30096
-				US
-
-00-19-CA   (hex)		Broadata Communications, Inc
-0019CA     (base 16)		Broadata Communications, Inc
-				2545 W 237th St Ste K
-				Torrance  CA  90505
-				US
-
-00-19-D3   (hex)		TRAK Microwave
-0019D3     (base 16)		TRAK Microwave
-				4726 Eisenhower Blvd
-				Tampa  FL  33634
-				US
-
-00-19-C3   (hex)		Qualitrol
-0019C3     (base 16)		Qualitrol
-				Wildflower Way
-				Belfast  Co. Antrim  BT12 6TA
-				GB
-
-00-19-BE   (hex)		Altai Technologies Limited
-0019BE     (base 16)		Altai Technologies Limited
-				2/F, East Wing, Lakeside 2, 10 Science Park West Avenue,
-				Shatin  New Territories  
-				HK
-
-00-19-B4   (hex)		Intellio Ltd
-0019B4     (base 16)		Intellio Ltd
-				Gyarmat u. 99/B
-				Budapest    1147
-				HU
-
-00-19-BA   (hex)		Paradox Security Systems Ltd
-0019BA     (base 16)		Paradox Security Systems Ltd
-				780 Industrial Blvd
-				St-Eustache  Quebec  J7R 5V3
-				CA
-
-00-19-A1   (hex)		LG INFORMATION & COMM.
-0019A1     (base 16)		LG INFORMATION & COMM.
-				60-39,Kasan-dong,Kumchon-ku
-				Seoul    153-023
-				KR
-
-00-19-A8   (hex)		WiQuest Communications
-0019A8     (base 16)		WiQuest Communications
-				915 Enterprise Blvd.
-				Allen  Texas  75013
-				US
-
-00-19-ED   (hex)		Axesstel Inc.
-0019ED     (base 16)		Axesstel Inc.
-				6815 Flanders Sr.
-				San Diego  CA  92121
-				US
-
-00-19-F6   (hex)		Acconet (PTE) Ltd
-0019F6     (base 16)		Acconet (PTE) Ltd
-				No. 16 Ayer Rajah Crescent
-				Singapore    139965
-				SG
-
-00-1A-15   (hex)		gemalto e-Payment
-001A15     (base 16)		gemalto e-Payment
-				6 rue de la Verrerie
-				Meudon    92197
-				FR
-
-00-19-68   (hex)		Digital Video Networks(Shanghai) CO. LTD.
-001968     (base 16)		Digital Video Networks(Shanghai) CO. LTD.
-				9th Floor,Hechuan Building, No.1026 YiShan Rd
-				Shanghai    201103
-				CN
-
-00-19-7F   (hex)		PLANTRONICS, INC.
-00197F     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-00-19-7A   (hex)		MAZeT GmbH
-00197A     (base 16)		MAZeT GmbH
-				Goeschwitzer Str. 32
-				Jena    D-07745
-				DE
-
-00-19-78   (hex)		Datum Systems, Inc.
-001978     (base 16)		Datum Systems, Inc.
-				3666 Tiffani Ct.
-				Santa Cruz  CA  95065
-				US
-
-00-19-89   (hex)		Sonitrol Corporation
-001989     (base 16)		Sonitrol Corporation
-				1707 Orlando Central Pkwy.
-				Orlando  FL  32809
-				US
-
-00-19-80   (hex)		Gridpoint Systems
-001980     (base 16)		Gridpoint Systems
-				4043 Carling Avenue, Suite 200
-				Ottawa  Ontario  K2K 2A3
-				CA
-
-00-19-83   (hex)		CCT R&D Limited
-001983     (base 16)		CCT R&D Limited
-				18/F CCT Telecom Building
-				Fotan, Shatin  N.T.  000
-				HK
-
-00-19-4C   (hex)		Fujian Stelcom information & Technology CO.,Ltd
-00194C     (base 16)		Fujian Stelcom information & Technology CO.,Ltd
-				4F,Building A,Start Science Park, No.68,Hongshanyuan Rd
-				Fuzhou  Fujian  350002
-				CN
-
-00-19-4A   (hex)		TESTO AG
-00194A     (base 16)		TESTO AG
-				Testo Straße 1
-				Lenzkirch  Baden-Württemberg  79853
-				DE
-
-00-19-8A   (hex)		Northrop Grumman Systems Corp.
-00198A     (base 16)		Northrop Grumman Systems Corp.
-				7055 Troy Hill Drive
-				Elkridge  Maryland  21075
-				US
-
-00-19-60   (hex)		DoCoMo Systems, Inc.
-001960     (base 16)		DoCoMo Systems, Inc.
-				Meguro Techno Bldg. 2nd Floor
-				Shinagawa-ku  Tokyo  141-0031
-				JP
-
-00-19-5A   (hex)		Jenaer Antriebstechnik GmbH
-00195A     (base 16)		Jenaer Antriebstechnik GmbH
-				Buchaer Strasse 1
-				Jena  Thueringen  07745
-				DE
-
-00-19-6D   (hex)		Raybit Systems Korea, Inc
-00196D     (base 16)		Raybit Systems Korea, Inc
-				Dream Tower 1221
-				Seoul    158-718
-				KR
-
-00-19-70   (hex)		Z-Com, Inc.
-001970     (base 16)		Z-Com, Inc.
-				7F-2, NO.9, PROSPERITY 1ST RD.
-				HSINCHU    300
-				TW
-
-00-19-50   (hex)		Harman Multimedia
-001950     (base 16)		Harman Multimedia
-				8400 Balboa Blvd.
-				Northridge  CA  91329
-				US
-
-00-18-EE   (hex)		Videology Imaging Solutions, Inc.
-0018EE     (base 16)		Videology Imaging Solutions, Inc.
-				37 M Lark Industrial Parkway
-				Greenville  RI  02828-3001
-				US
-
-00-18-EB   (hex)		Blue Zen Enterprises Private Limited
-0018EB     (base 16)		Blue Zen Enterprises Private Limited
-				No 2&3 (First Floor) Kurban Ali Street
-				Chennai  Tamil Nadu  600002
-				IN
-
-00-19-24   (hex)		LBNL  Engineering
-001924     (base 16)		LBNL  Engineering
-				1 Cyclotron Rd.
-				Berkeley  CA  94720
-				US
-
-00-19-1A   (hex)		IRLINK
-00191A     (base 16)		IRLINK
-				HanYoung B/D 6F, 4-6
-				SEOUL    138-824
-				KR
-
-00-19-16   (hex)		PayTec AG
-001916     (base 16)		PayTec AG
-				Rosengartenstrasse 3
-				Zollikerberg  ZH  8125
-				CH
-
-00-19-0E   (hex)		Atech Technology Co., Ltd.
-00190E     (base 16)		Atech Technology Co., Ltd.
-				4 Fl., No. 103, Sec 2, Jiuzong Rd.
-				Taipei    114
-				TW
-
-00-19-39   (hex)		Gigamips
-001939     (base 16)		Gigamips
-				5th Floor, Yangjae Building, 261, Yangjae-Dong
-				Seocho-Gu  Seoul  137-130
-				KR
-
-00-19-3A   (hex)		OESOLUTIONS
-00193A     (base 16)		OESOLUTIONS
-				Technopark, 958-3 Daechon-Dong, Buk-Gu
-				Gwangju  Buk-Gu  500-706
-				KR
-
-00-18-E2   (hex)		Topdata Sistemas de Automacao Ltda
-0018E2     (base 16)		Topdata Sistemas de Automacao Ltda
-				Rua Dr Carvalho Chaves, 662
-				Curitiba  PR  80.220-010
-				BR
-
-00-19-22   (hex)		CM Comandos Lineares
-001922     (base 16)		CM Comandos Lineares
-				Av Eng Alberto de Zagottis, 760
-				São Paulo  SP  04675-085
-				BR
-
-00-19-1D   (hex)		Nintendo Co., Ltd.
-00191D     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-19-2F   (hex)		Cisco Systems, Inc
-00192F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-05   (hex)		SCHRACK Seconet AG
-001905     (base 16)		SCHRACK Seconet AG
-				Eibesbrunnergasse 18
-				Wien  Österreich  1122
-				AT
-
-00-19-07   (hex)		Cisco Systems, Inc
-001907     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-18-FB   (hex)		Compro Technology
-0018FB     (base 16)		Compro Technology
-				3/F No 12, Alley 6, Lane 45, Pao Shin Rd
-				Hsintien    231
-				TW
-
-00-18-C3   (hex)		CS Corporation
-0018C3     (base 16)		CS Corporation
-				CS-building, Pangyo seven venture valley 625
-				 Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-00-18-CA   (hex)		Viprinet GmbH
-0018CA     (base 16)		Viprinet GmbH
-				Basilikastraße 3
-				Bingen am Rhein    55411
-				DE
-
-00-18-C7   (hex)		Real Time Automation
-0018C7     (base 16)		Real Time Automation
-				2825 N Mayfair Rd Ste 11
-				Wauwatosa  WI  53222
-				US
-
-00-18-BB   (hex)		Eliwell Controls srl
-0018BB     (base 16)		Eliwell Controls srl
-				Via dell'Industria, 15
-				Pieve d'Alpago  Belluno  32010
-				IT
-
-00-18-BF   (hex)		Essence Technology Solution, Inc.
-0018BF     (base 16)		Essence Technology Solution, Inc.
-				B1, No. 207, Beisin Rd., Sec. 3
-				Sindian, Taipei County    231
-				TW
-
-00-18-8C   (hex)		Mobile Action Technology Inc.
-00188C     (base 16)		Mobile Action Technology Inc.
-				5F, No. 205-3, Sec. 3, Beishin Rd.
-				Shindian City, Taipei    231
-				TW
-
-00-18-8F   (hex)		Montgomery Technology, Inc.
-00188F     (base 16)		Montgomery Technology, Inc.
-				800 East Commerce Street
-				Greenville  AL  36037
-				US
-
-00-18-84   (hex)		Fon Technology S.L.
-001884     (base 16)		Fon Technology S.L.
-				Avda. Bruselas, n. 7, Planta 3, Alcobendas
-				  Madrid  28100
-				ES
-
-00-18-80   (hex)		Maxim Integrated Products
-001880     (base 16)		Maxim Integrated Products
-				160 Rio Robles
-				San Jose  CA  95134
-				US
-
-00-18-D0   (hex)		AtRoad,  A Trimble Company
-0018D0     (base 16)		AtRoad,  A Trimble Company
-				47071 Bayside Parkway
-				Fremont  California  94538
-				US
-
-00-18-D2   (hex)		High-Gain Antennas LLC
-0018D2     (base 16)		High-Gain Antennas LLC
-				11679 S. Cormorant Circle
-				Parker  CO  80134
-				US
-
-00-18-D3   (hex)		TEAMCAST
-0018D3     (base 16)		TEAMCAST
-				Centre Espace Performance
-				Saint Gregoire    35769
-				FR
-
-00-18-C6   (hex)		OPW Fuel Management Systems
-0018C6     (base 16)		OPW Fuel Management Systems
-				6900 Santa Fe Drive
-				Hodgkins  Illinois  60525
-				US
-
-00-18-7C   (hex)		INTERCROSS, LLC
-00187C     (base 16)		INTERCROSS, LLC
-				Novoselov str., 58/7
-				Ryazan    390049
-				RU
-
-00-18-70   (hex)		E28 Shanghai Limited
-001870     (base 16)		E28 Shanghai Limited
-				2/F Eastern Tower
-				Shanghai    200001
-				CN
-
-00-18-72   (hex)		Expertise Engineering
-001872     (base 16)		Expertise Engineering
-				4186 Sorrento Valley Blvd Suite -J
-				San Diego  CA  92121
-				US
-
-00-18-DC   (hex)		Prostar Co., Ltd.
-0018DC     (base 16)		Prostar Co., Ltd.
-				A-703 Technotown, 250-3 Hagye-dong, Nowon-gu
-				Seoul    139-230
-				KR
-
-00-18-D1   (hex)		Siemens Home & Office Comm. Devices
-0018D1     (base 16)		Siemens Home & Office Comm. Devices
-				4849 Alpha Rd.
-				Dallas  Texas  75244
-				US
-
-00-18-AA   (hex)		Protec Fire Detection plc
-0018AA     (base 16)		Protec Fire Detection plc
-				Protec House
-				Nelson  Lancashire  BB9 6LQ
-				GB
-
-00-18-96   (hex)		Great Well Electronic LTD
-001896     (base 16)		Great Well Electronic LTD
-				The Third Industrial  Area
-				Shenzhen  Guangdong  518110
-				US
-
-00-18-90   (hex)		RadioCOM, s.r.o.
-001890     (base 16)		RadioCOM, s.r.o.
-				Misikova 22
-				Bratislava    811 06
-				SK
-
-00-18-B9   (hex)		Cisco Systems, Inc
-0018B9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-18-B8   (hex)		New Voice International AG
-0018B8     (base 16)		New Voice International AG
-				St. Gallerstrasse 8
-				Lachen  SZ  8853
-				CH
-
-00-18-A1   (hex)		Tiqit Computers, Inc.
-0018A1     (base 16)		Tiqit Computers, Inc.
-				2215 Old Page Mill Rd
-				Palo Alto  CA  94304
-				US
-
-00-18-12   (hex)		Beijing Xinwei Telecom Technology Co., Ltd.
-001812     (base 16)		Beijing Xinwei Telecom Technology Co., Ltd.
-				Xinwei Bldg., No. 7 Zhongguancun Software Park,
-				Haidian District  Beijing  100094
-				CN
-
-00-18-0B   (hex)		Brilliant Telecommunications
-00180B     (base 16)		Brilliant Telecommunications
-				307 Orchard City Dr.
-				Campbell  CA  95008
-				US
-
-00-18-61   (hex)		Ooma, Inc.
-001861     (base 16)		Ooma, Inc.
-				555 University Avenue
-				Palo Alto  CA  94301
-				US
-
-00-18-5B   (hex)		Network Chemistry, Inc
-00185B     (base 16)		Network Chemistry, Inc
-				1700 Seaport Blvd
-				Redwood City  CA  94063
-				US
-
-00-18-55   (hex)		Aeromaritime Systembau GmbH
-001855     (base 16)		Aeromaritime Systembau GmbH
-				Ludwig-Erhard-Str. 16
-				D-85375  Neufahrn  
-				DE
-
-00-18-51   (hex)		SWsoft
-001851     (base 16)		SWsoft
-				13755 Sunrise Valley Drive, Suite 600
-				Herndon  VA  20171
-				US
-
-00-18-74   (hex)		Cisco Systems, Inc
-001874     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-18-69   (hex)		KINGJIM
-001869     (base 16)		KINGJIM
-				No.10-18,2-Chome
-				Chiyoda-ku  Tokyo  101-0031
-				JP
-
-00-18-56   (hex)		EyeFi, Inc
-001856     (base 16)		EyeFi, Inc
-				149 Commonwealth Drive
-				Menlo Park  CA  94025
-				US
-
-00-18-4E   (hex)		Lianhe Technologies, Inc.
-00184E     (base 16)		Lianhe Technologies, Inc.
-				3F, #119, DaHu ShanZhuang St.
-				Neihu District  Taipei City  114
-				TW
-
-00-18-4C   (hex)		Bogen Communications
-00184C     (base 16)		Bogen Communications
-				50 Spring St.
-				Ramsey  NJ  07446
-				US
-
-00-18-26   (hex)		Cale Access AB
-001826     (base 16)		Cale Access AB
-				Box 1031
-				Kista    SE-164 21
-				SE
-
-00-18-2D   (hex)		Artec Design
-00182D     (base 16)		Artec Design
-				Teaduspargi 6/1
-				Tallinn    12618
-				EE
-
-00-18-2A   (hex)		Taiwan Video & Monitor
-00182A     (base 16)		Taiwan Video & Monitor
-				3F, 141 Jen Ai Rd Sec. 3
-				Taipei City    106
-				TW
-
-00-18-3B   (hex)		CENITS Co., Ltd.
-00183B     (base 16)		CENITS Co., Ltd.
-				3F, Yangjae Bldg., 264-3
-				Seoul    137-130
-				KR
-
-00-18-3C   (hex)		Encore Software Limited
-00183C     (base 16)		Encore Software Limited
-				6F Leo Complex
-				Bangalore  Karnataka  560025
-				IN
-
-00-18-41   (hex)		High Tech Computer Corp
-001841     (base 16)		High Tech Computer Corp
-				23 Hsin Hua Rd.
-				Taoyuan    330
-				TW
-
-00-18-19   (hex)		Cisco Systems, Inc
-001819     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-18-0C   (hex)		Optelian Access Networks
-00180C     (base 16)		Optelian Access Networks
-				22A-1051 Baxter Road
-				Ottawa  Ontario  K2C 3P2
-				CA
-
-00-18-10   (hex)		IPTrade S.A.
-001810     (base 16)		IPTrade S.A.
-				Parc Scientifique
-				Sart-Tilman  Wallonie  4031
-				BE
-
-00-18-09   (hex)		CRESYN
-001809     (base 16)		CRESYN
-				8-22,Jamwon-dong
-				Seoul  Seocho-Gu  #137-902
-				KR
-
-00-18-04   (hex)		E-TEK DIGITAL TECHNOLOGY LIMITED
-001804     (base 16)		E-TEK DIGITAL TECHNOLOGY LIMITED
-				UNIT1520,15/F.,TOWER 2,GRAND CENTURY PLACE,193 PRINCE EDWARD ROAD WEST,KOWLOON,
-				    
-				HK
-
-00-18-00   (hex)		UNIGRAND LTD
-001800     (base 16)		UNIGRAND LTD
-				7F-2, No.45, Jingde St., Jhonghe City,
-				    235
-				TW
-
-00-17-FD   (hex)		Amulet Hotkey
-0017FD     (base 16)		Amulet Hotkey
-				Cavalier Road
-				Heathfield  Devon  TQ12 6TQ
-				GB
-
-00-17-FC   (hex)		Suprema Inc.
-0017FC     (base 16)		Suprema Inc.
-				16F Parkview Office Tower,
-				Seongnam  Gyeonggi  463-863
-				KR
-
-00-17-FB   (hex)		FA
-0017FB     (base 16)		FA
-				628-7, Dungchon-Dong
-				Seoul  Kangseo-Ku  157-838
-				KR
-
-00-17-D8   (hex)		Magnum Semiconductor, Inc.
-0017D8     (base 16)		Magnum Semiconductor, Inc.
-				591 Yosemite Drive
-				Milpitas  CA  95035
-				US
-
-00-17-DA   (hex)		Spans Logic
-0017DA     (base 16)		Spans Logic
-				201 San Antonio Circle
-				Mountain View  CA  94040
-				US
-
-00-17-CF   (hex)		iMCA-GmbH
-0017CF     (base 16)		iMCA-GmbH
-				Dorfstrasse 28b
-				Itzehoe  Schleswig-Holstein  25524
-				DE
-
-00-17-B9   (hex)		Gambro Lundia AB
-0017B9     (base 16)		Gambro Lundia AB
-				BOX 10101
-				LUND  SkÃƒÂ¥ne  22010
-				SE
-
-00-17-B3   (hex)		Aftek Infosys Limited
-0017B3     (base 16)		Aftek Infosys Limited
-				Pawan Complex
-				Pune  Maharashtra  411 038
-				IN
-
-00-17-A2   (hex)		Camrivox Ltd.
-0017A2     (base 16)		Camrivox Ltd.
-				The Jeffreys Building
-				Cambridge  Cambridgeshire  CB4 0WS
-				GB
-
-00-17-5F   (hex)		XENOLINK Communications Co., Ltd.
-00175F     (base 16)		XENOLINK Communications Co., Ltd.
-				2nd Fl., Jungyou B/D 797-22
-				Seoul    135-930
-				KR
-
-00-17-5C   (hex)		SHARP CORPORATION
-00175C     (base 16)		SHARP CORPORATION
-				1, Takumi-Cho,
-				Sakai city  Osaka Prefecture  590-8522
-				JP
-
-00-17-9D   (hex)		Kelman Limited
-00179D     (base 16)		Kelman Limited
-				Rathdown Close
-				Lisburn  Co. Antrim  BT28 2RB
-				GB
-
-00-17-90   (hex)		HYUNDAI DIGITECH Co, Ltd.
-001790     (base 16)		HYUNDAI DIGITECH Co, Ltd.
-				13th Fl, Choung-Jin Bldg, 53-5
-				Seoul    140-719
-				KR
-
-00-17-91   (hex)		LinTech GmbH
-001791     (base 16)		LinTech GmbH
-				Friedrich-Engels-Str. 35
-				Berlin    13156
-				DE
-
-00-17-95   (hex)		Cisco Systems, Inc
-001795     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-17-59   (hex)		Cisco Systems, Inc
-001759     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-17-54   (hex)		Arkino HiTOP Corporation Limited
-001754     (base 16)		Arkino HiTOP Corporation Limited
-				5F., No.437, Tao Ying Rd
-				Taoyuan City  Taoyuan County  33068,
-				TW
-
-00-17-52   (hex)		DAGS, Inc
-001752     (base 16)		DAGS, Inc
-				C-510, Woolim Lion's Valley, 371-28, Gasan Dong, Geumcheon Ku
-				Seoul    153-786
-				KR
-
-00-17-56   (hex)		Vinci Labs Oy
-001756     (base 16)		Vinci Labs Oy
-				Finlaysoninkuja 21 A
-				Tampere  Länsi-Suomi  33210
-				FI
-
-00-17-77   (hex)		Obsidian Research Corporation
-001777     (base 16)		Obsidian Research Corporation
-				120 - 4445 Calgary Trail NW
-				Edmonton  Alberta  T6H 5R7
-				CA
-
-00-17-6A   (hex)		Avago Technologies
-00176A     (base 16)		Avago Technologies
-				350 West Trimble Rd
-				San Jose  CA  95131
-				US
-
-00-17-86   (hex)		wisembed
-001786     (base 16)		wisembed
-				808, hansin IT tower, 235 guro3-dong, guro-gu
-				Seoul    152-768
-				KR
-
-00-17-82   (hex)		LoBenn Inc.
-001782     (base 16)		LoBenn Inc.
-				150 Katimavik Road
-				Ottawa  Ontario  K2L 2N2
-				CA
-
-00-17-78   (hex)		Central Music Co.
-001778     (base 16)		Central Music Co.
-				0711-0712 Tower D, SOHO New Town
-				Beijing    100022
-				CN
-
-00-17-6B   (hex)		Kiyon, Inc.
-00176B     (base 16)		Kiyon, Inc.
-				9381 Judicial Drive
-				San Diego  CA  92121
-				US
-
-00-17-99   (hex)		SmarTire Systems Inc.
-001799     (base 16)		SmarTire Systems Inc.
-				Suite 150
-				Richmond  BC  V6V 2J1
-				CA
-
-00-17-7F   (hex)		Worldsmart Retech
-00177F     (base 16)		Worldsmart Retech
-				23 Hi-Tech Court
-				Eight Mile Plains  QLD  4113
-				AU
-
-00-17-6E   (hex)		DUCATI SISTEMI
-00176E     (base 16)		DUCATI SISTEMI
-				VIA MARCO EMILIO LEPIDO, 182
-				BOLOGNA    40132
-				IT
-
-00-17-74   (hex)		Elesta GmbH
-001774     (base 16)		Elesta GmbH
-				Gottlieb Daimler Strasse 1
-				Konstanz    78467
-				DE
-
-00-17-0C   (hex)		Twig Com Ltd.
-00170C     (base 16)		Twig Com Ltd.
-				Meriniitynkatu 11
-				  Salo  2400
-				FI
-
-00-17-0D   (hex)		Dust Networks Inc.
-00170D     (base 16)		Dust Networks Inc.
-				30695 Huntwood Ave.
-				Hayward  Ca.  94544
-				US
-
-00-17-0B   (hex)		Contela, Inc.
-00170B     (base 16)		Contela, Inc.
-				6-8 Soonae-dong, Bundang-gu,
-				Sungnam  Kyunggi-do  463-825
-				KR
-
-00-17-0F   (hex)		Cisco Systems, Inc
-00170F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-17-04   (hex)		Shinco Electronics Group Co.,Ltd
-001704     (base 16)		Shinco Electronics Group Co.,Ltd
-				No.5 Waihuan Road
-				Changzhou  Jiangsu  213022
-				CN
-
-00-17-07   (hex)		InGrid, Inc
-001707     (base 16)		InGrid, Inc
-				920 Cassatt Rd
-				Berwyn  Pa  19312
-				US
-
-00-17-12   (hex)		ISCO International
-001712     (base 16)		ISCO International
-				1001 Cambridge Drive
-				Elk Grove Village  IL  60007
-				US
-
-00-16-D8   (hex)		Senea AB
-0016D8     (base 16)		Senea AB
-				Företagsallen 12
-				Åkersberga    18484
-				SE
-
-00-16-D6   (hex)		TDA Tech Pty Ltd
-0016D6     (base 16)		TDA Tech Pty Ltd
-				210 / 54 Currie Street
-				Adelaide  South Australia  5000
-				AU
-
-00-16-D5   (hex)		Synccom Co., Ltd
-0016D5     (base 16)		Synccom Co., Ltd
-				#306 Myungi e-space  218-20
-				Anyang-si  Kyungki-do  430-817
-				KR
-
-00-16-C9   (hex)		NAT Seattle, Inc.
-0016C9     (base 16)		NAT Seattle, Inc.
-				22125 17th Ave SE
-				Bothell  WA  98021
-				US
-
-00-16-C6   (hex)		North Atlantic Industries
-0016C6     (base 16)		North Atlantic Industries
-				170 Wilbur Place
-				Bohemia  NY  11716
-				US
-
-00-17-24   (hex)		Studer Professional Audio GmbH
-001724     (base 16)		Studer Professional Audio GmbH
-				Althardstrasse 30
-				Regensdorf  Zürich  CH-8105
-				CH
-
-00-17-02   (hex)		Osung Midicom Co., Ltd
-001702     (base 16)		Osung Midicom Co., Ltd
-				231-18, Dorim2-dong,
-				Seoul,  Youngdeungpo-gu  150-832
-				KR
-
-00-16-F7   (hex)		L-3 Communications, Aviation Recorders
-0016F7     (base 16)		L-3 Communications, Aviation Recorders
-				100 Cattlemen Rd.
-				Sarasota  FL  34232
-				US
-
-00-17-2D   (hex)		Axcen Photonics Corporation
-00172D     (base 16)		Axcen Photonics Corporation
-				6F, No. 119, Baujung Rd.,
-				Shindian City, Taipei    231
-				TW
-
-00-17-41   (hex)		DEFIDEV
-001741     (base 16)		DEFIDEV
-				20 rue Raymond Marcheron
-				Vanves    92170
-				FR
-
-00-17-38   (hex)		International Business Machines
-001738     (base 16)		International Business Machines
-				1 Azrieli Center
-				Tel Aviv    67021
-				IL
-
-00-17-1E   (hex)		Theo Benning GmbH & Co. KG
-00171E     (base 16)		Theo Benning GmbH & Co. KG
-				Muensterstraße 135-137
-				Bocholt  NRW  46397
-				DE
-
-00-16-D2   (hex)		Caspian
-0016D2     (base 16)		Caspian
-				170 Baytech Drive
-				San Jose  CA  95134
-				US
-
-00-16-A4   (hex)		Ezurio Ltd
-0016A4     (base 16)		Ezurio Ltd
-				Unit 2
-				London    NW9 5HD
-				GB
-
-00-16-99   (hex)		Tonic DVB Marketing Ltd
-001699     (base 16)		Tonic DVB Marketing Ltd
-				Unit B, 10/F, Summit Building,
-				Hung Hom  Kowloon  
-				HK
-
-00-16-9B   (hex)		Alstom Transport
-00169B     (base 16)		Alstom Transport
-				11, 13 avenue de Bel Air
-				Villeurbanne  Rhone  69100
-				FR
-
-00-16-90   (hex)		J-TEK INCORPORATION
-001690     (base 16)		J-TEK INCORPORATION
-				2F-1, No. 83, Sec. 2, GongDaoWu Rd.,
-				Hsinchu City    30070
-				TW
-
-00-16-93   (hex)		PowerLink Technology Inc.
-001693     (base 16)		PowerLink Technology Inc.
-				N0. 18, Alley 1, Lane 151, Sec. 1, Jhongsing Rd., Wugu Township
-				Taipei Hsien    248
-				TW
-
-00-16-98   (hex)		T&A Mobile Phones
-001698     (base 16)		T&A Mobile Phones
-				4/F, South Building,No.2966, Jinke Road
-				Pudong  Shanghai  201203
-				CN
-
-00-16-62   (hex)		Liyuh Technology Ltd.
-001662     (base 16)		Liyuh Technology Ltd.
-				4F, No.19, Ln.221, Ganqian Rd., Neihu District
-				Taipei    114
-				TW
-
-00-16-61   (hex)		Novatium Solutions (P) Ltd
-001661     (base 16)		Novatium Solutions (P) Ltd
-				3rd Floor, Temple Towers, #672
-				Chennai  Tamil Nadu  600035
-				IN
-
-00-16-64   (hex)		Prod-El SpA
-001664     (base 16)		Prod-El SpA
-				Via Palmanova 185
-				Milano  MI  20132
-				IT
-
-00-16-5E   (hex)		Precision I/O
-00165E     (base 16)		Precision I/O
-				4005 Miranda Ave., Suite 210
-				Palo Alto  CA  94304-1232
-				US
-
-00-16-58   (hex)		Fusiontech Technologies Inc.
-001658     (base 16)		Fusiontech Technologies Inc.
-				6F, No.78, Cheng Kung Rd., Sec. 1,
-				Taipei    115
-				TW
-
-00-16-A5   (hex)		Tandberg Storage ASA
-0016A5     (base 16)		Tandberg Storage ASA
-				Postboks 191
-				    
-				NO
-
-00-16-A1   (hex)		3Leaf Networks
-0016A1     (base 16)		3Leaf Networks
-				3255-1 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-00-16-66   (hex)		Quantier Communication Inc.
-001666     (base 16)		Quantier Communication Inc.
-				1F, No. 36, Industry E. Rd IV,
-				Hsin-Chu    300
-				TW
-
-00-16-81   (hex)		Vector Informatik GmbH
-001681     (base 16)		Vector Informatik GmbH
-				Ingersheimer Str. 24
-				Stuttgart  Baden-Württemberg  70499
-				DE
-
-00-BA-C0   (hex)		Biometric Access Company
-00BAC0     (base 16)		Biometric Access Company
-				2555 North IH 35
-				Round Rock  Texas  78664
-				US
-
-00-16-85   (hex)		Elisa Oyj
-001685     (base 16)		Elisa Oyj
-				Elektroniikkatie 4
-				90570  Oulu  
-				FI
-
-00-16-80   (hex)		Bally Gaming + Systems
-001680     (base 16)		Bally Gaming + Systems
-				950 Sandhill Road
-				Reno  NV  89521
-				US
-
-00-16-96   (hex)		QDI Technology (H.K.) Limited
-001696     (base 16)		QDI Technology (H.K.) Limited
-				16/F, Standard Chartered Bank Building 4-4A
-				Hong Kong    
-				CN
-
-00-16-BE   (hex)		INFRANET, Inc.
-0016BE     (base 16)		INFRANET, Inc.
-				8th Floor, Cowell B/D, 66-1
-				Seoul    137-040
-				KR
-
-00-16-AB   (hex)		Dansensor A/S
-0016AB     (base 16)		Dansensor A/S
-				Roennedevej 18
-				Ringsted    DK-4100
-				DK
-
-00-16-53   (hex)		LEGO System A/S IE Electronics Division
-001653     (base 16)		LEGO System A/S IE Electronics Division
-				Aastvej 1
-				  Billund Kommune  7190
-				DK
-
-00-16-52   (hex)		Hoatech Technologies, Inc.
-001652     (base 16)		Hoatech Technologies, Inc.
-				1F., No.224, Guosheng St.
-				Zhubei  HsinChu Hsien  30244
-				TW
-
-00-16-50   (hex)		 Kratos EPD    
-001650     (base 16)		 Kratos EPD    
-				Herley General Microwave Israel.
-				KIBBUTZ EYAL    45840
-				IL
-
-00-15-FA   (hex)		Cisco Systems, Inc
-0015FA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-FC   (hex)		Littelfuse Startco
-0015FC     (base 16)		Littelfuse Startco
-				3714 Kinnear Place
-				Saskatoon  SK  S7P 0A6
-				CA
-
-00-15-F7   (hex)		Wintecronics Ltd.
-0015F7     (base 16)		Wintecronics Ltd.
-				No. 716, 11F-3, Jung Jeng Rd.
-				Chung Ho City  Taipei Hsien  235
-				TW
-
-00-16-30   (hex)		Vativ Technologies
-001630     (base 16)		Vativ Technologies
-				9339 Genesee Avenue
-				San Diego  CA  92121
-				US
-
-00-16-2F   (hex)		Geutebrück GmbH
-00162F     (base 16)		Geutebrück GmbH
-				Im Nassen 7-9
-				Windhagen    53578
-				DE
-
-00-16-2B   (hex)		Togami Electric Mfg.co.,Ltd.
-00162B     (base 16)		Togami Electric Mfg.co.,Ltd.
-				1-1 Ohtakara-Kitamachi
-				  Saga.PRF  840-0802
-				JP
-
-00-16-42   (hex)		Pangolin
-001642     (base 16)		Pangolin
-				9501 Satellite Boulevard, Suite 109
-				Orlando  FL  32837
-				US
-
-00-16-37   (hex)		CITEL SpA
-001637     (base 16)		CITEL SpA
-				Via L. G. Columella, 36
-				Milan  MI  20128
-				IT
-
-00-16-08   (hex)		Sequans Communications
-001608     (base 16)		Sequans Communications
-				19 Le Parvis de la Défense
-				  PARIS LA DEFENSE CEDEX  92073
-				FR
-
-00-16-24   (hex)		Teneros, Inc.
-001624     (base 16)		Teneros, Inc.
-				215 Castro St.
-				Mt. View  CA  94041
-				US
-
-00-15-F8   (hex)		Kingtronics Industrial Co. Ltd.
-0015F8     (base 16)		Kingtronics Industrial Co. Ltd.
-				Penthouse, Century Centre,
-				Kowloon    
-				HK
-
-00-16-1C   (hex)		e:cue
-00161C     (base 16)		e:cue
-				Friedrich-List-Strasse 23
-				Paderborn    33100
-				DE
-
-00-15-B8   (hex)		Tahoe
-0015B8     (base 16)		Tahoe
-				ul. Uniwersytecka 1
-				Wroclaw    50951
-				PL
-
-00-15-B6   (hex)		ShinMaywa Industries, Ltd.
-0015B6     (base 16)		ShinMaywa Industries, Ltd.
-				1-1 Shinmeiwa-cho
-				Takarazuka  Hyogo  665-8550
-				JP
-
-00-15-B0   (hex)		AUTOTELENET CO.,LTD
-0015B0     (base 16)		AUTOTELENET CO.,LTD
-				2F, 898-24, Hogye2-dong, Dongan-gu
-				Anyang-City  Kyunggi-do  431-836
-				KR
-
-00-15-B1   (hex)		Ambient Corporation
-0015B1     (base 16)		Ambient Corporation
-				79 Chapel St.
-				Newton  MA  02458
-				US
-
-00-15-9F   (hex)		Terascala, Inc.
-00159F     (base 16)		Terascala, Inc.
-				145 Bodwell Street
-				Avon  MA  02322
-				US
-
-00-15-9E   (hex)		Mad Catz Interactive Inc
-00159E     (base 16)		Mad Catz Interactive Inc
-				Units 3+4 West Point Row
-				Bristol  South Gloucestershire  BS32 4QG
-				US
-
-00-15-A1   (hex)		ECA-SINTERS
-0015A1     (base 16)		ECA-SINTERS
-				5, rue Paul Mesplé
-				TOULOUSE  Cedex 01  31106
-				FR
-
-00-15-93   (hex)		U4EA Technologies Inc.
-001593     (base 16)		U4EA Technologies Inc.
-				48860 Milmont Drive
-				Fremont  CA  94538
-				US
-
-00-15-81   (hex)		MAKUS Inc.
-001581     (base 16)		MAKUS Inc.
-				4F Daedo Bldg. 748-14 Yeoksam-dong, Kangnam-gu
-				  Seoul  135-080
-				US
-
-00-15-7A   (hex)		Telefin S.p.A.
-00157A     (base 16)		Telefin S.p.A.
-				Via Albere 87/A
-				Verona  VR  37138
-				IT
-
-00-15-C3   (hex)		Ruf Telematik AG
-0015C3     (base 16)		Ruf Telematik AG
-				Ruetistrasse 13
-				Schlieren  ZH  8952
-				CH
-
-00-15-E6   (hex)		MOBILE TECHNIKA Inc.
-0015E6     (base 16)		MOBILE TECHNIKA Inc.
-				Sotobori Sky Bld. 5th Floor
-				Shinjuku-ku  Tokyo  162-0845
-				JP
-
-00-15-DB   (hex)		Canesta Inc.
-0015DB     (base 16)		Canesta Inc.
-				965 West Maude Avenue
-				Sunnyvale  California  94085
-				US
-
-00-15-8D   (hex)		Jennic Ltd
-00158D     (base 16)		Jennic Ltd
-				Furnival Street
-				Sheffield  Yorkshire  S1 4QT
-				US
-
-00-15-84   (hex)		Schenck Process GmbH
-001584     (base 16)		Schenck Process GmbH
-				Pallaswiesenstraße 100
-				Darmstadt  Hessen  64293
-				DE
-
-00-15-CC   (hex)		UQUEST, LTD.
-0015CC     (base 16)		UQUEST, LTD.
-				Sannomiya Intes Bldg. 8F
-				KOBE  HYOGO  651-0086
-				JP
-
-00-15-C6   (hex)		Cisco Systems, Inc
-0015C6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-D7   (hex)		Reti Corporation
-0015D7     (base 16)		Reti Corporation
-				6F,No 13, Lane 120, Sec 1, Neihu Rd.,
-				Taipei City    114
-				TW
-
-00-15-CB   (hex)		Surf Communication Solutions Ltd.
-0015CB     (base 16)		Surf Communication Solutions Ltd.
-				P.O. Box 343
-				Yokneam    20164
-				IL
-
-00-15-A7   (hex)		Robatech AG
-0015A7     (base 16)		Robatech AG
-				Pilatusring 10
-				Muri  AG  5630
-				CH
-
-00-15-23   (hex)		Meteor Communications Corporation
-001523     (base 16)		Meteor Communications Corporation
-				22614 66th Avenue South
-				Kent  WA  98032
-				US
-
-00-15-24   (hex)		Numatics, Inc.
-001524     (base 16)		Numatics, Inc.
-				46280 Dylan Dr.
-				Novi  Michigan  48377
-				US
-
-00-15-1B   (hex)		Isilon Systems Inc.
-00151B     (base 16)		Isilon Systems Inc.
-				3101 Western Avenue
-				Seattle  WA  98121
-				US
-
-00-15-73   (hex)		NewSoft  Technology Corporation
-001573     (base 16)		NewSoft  Technology Corporation
-				3F, 19-3, SanChong RD, NanKang,
-				Taipei    115
-				US
-
-00-15-75   (hex)		Nevis Networks Inc.
-001575     (base 16)		Nevis Networks Inc.
-				3945 Freedom Circle
-				Santa Clara  CA  95054
-				US
-
-00-15-6C   (hex)		SANE SYSTEM CO., LTD
-00156C     (base 16)		SANE SYSTEM CO., LTD
-				0-2 Heungan-daero 439 beon-gil Dongan-gu
-				Anyang-si  Kyunggi-do  431-804
-				KR
-
-00-15-6A   (hex)		DG2L Technologies Pvt. Ltd.
-00156A     (base 16)		DG2L Technologies Pvt. Ltd.
-				AML Center 1, Gnd. Floor, 8 Mahal Indl. Est.
-				Mumbai  Maharashtra  400093
-				IN
-
-00-15-29   (hex)		N3 Corporation
-001529     (base 16)		N3 Corporation
-				#402 GwangMyeong Techno Town
-				GyeongGi-Do    423-031
-				KR
-
-00-15-2D   (hex)		TenX Networks, LLC
-00152D     (base 16)		TenX Networks, LLC
-				4855 Wiley Post Way
-				Salt Lake City  UT  84116
-				US
-
-00-15-6F   (hex)		Xiranet Communications GmbH
-00156F     (base 16)		Xiranet Communications GmbH
-				Bertolt-Brecht-Allee 24
-				Dresden  Saxony  01309
-				US
-
-00-15-72   (hex)		Red-Lemon
-001572     (base 16)		Red-Lemon
-				Unit 4, 9/F, Paramount Building
-				Chai Wan    
-				HK
-
-00-15-67   (hex)		RADWIN Inc.
-001567     (base 16)		RADWIN Inc.
-				900 Corporate Drive
-				Mahwah  NJ  07430
-				US
-
-00-15-5B   (hex)		Sampo Corporation
-00155B     (base 16)		Sampo Corporation
-				216 Chung Shan Road,
-				  Taipei Hsien  220
-				TW
-
-00-15-53   (hex)		Cytyc Corporation
-001553     (base 16)		Cytyc Corporation
-				250 Campus Dive
-				Marlborough  MA  01752
-				US
-
-00-15-51   (hex)		RadioPulse Inc.
-001551     (base 16)		RadioPulse Inc.
-				2nd fl. Hans B/D, 111-55
-				Seoul    134-883
-				KR
-
-00-15-52   (hex)		Wi-Gear Inc.
-001552     (base 16)		Wi-Gear Inc.
-				340 Church Street
-				San Francisco  CA  94114
-				US
-
-00-15-3E   (hex)		Q-Matic Sweden AB
-00153E     (base 16)		Q-Matic Sweden AB
-				Neongatan 8
-				Molndal    431 53
-				SE
-
-00-15-42   (hex)		MICROHARD S.R.L.
-001542     (base 16)		MICROHARD S.R.L.
-				Via Primo Maggio 36
-				San Vittore Olona  Milano  20028
-				IT
-
-00-15-4E   (hex)		IEC
-00154E     (base 16)		IEC
-				3, rue de Varembé
-				CH - 1211  GENEVA  20
-				DE
-
-00-15-50   (hex)		Nits Technology Inc
-001550     (base 16)		Nits Technology Inc
-				2FL. No. 8 Alley 16, Lane 235, Bauchiau Rd.,
-				Shindian City  Taipei Hsien  231
-				TW
-
-00-15-46   (hex)		ITG Worldwide Sdn Bhd
-001546     (base 16)		ITG Worldwide Sdn Bhd
-				2, Jalan AstakaU8/83
-				Shah Alam  Selangor Darul Ehsan  40150
-				MY
-
-00-15-5D   (hex)		Microsoft Corporation
-00155D     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				Redmond  WA  98052-8300
-				US
-
-00-15-62   (hex)		Cisco Systems, Inc
-001562     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-14-E1   (hex)		Data Display AG
-0014E1     (base 16)		Data Display AG
-				Industriestraße 1
-				Germering  Bayern  82110
-				DE
-
-00-14-E3   (hex)		mm-lab GmbH
-0014E3     (base 16)		mm-lab GmbH
-				Stammheimer Strasse 10
-				Kornwestheim    
-				DE
-
-00-14-D9   (hex)		IP Fabrics, Inc.
-0014D9     (base 16)		IP Fabrics, Inc.
-				3720 SW 141st Avenue 
-				Beaverton  Oregon  97006
-				US
-
-00-14-D6   (hex)		Jeongmin Electronics Co.,Ltd.
-0014D6     (base 16)		Jeongmin Electronics Co.,Ltd.
-				#710, Byuksan Digital Valley 2,
-				Seoul    153 783
-				KR
-
-00-14-F9   (hex)		Vantage Controls
-0014F9     (base 16)		Vantage Controls
-				1061 South 800 East
-				Orem  UT  84097
-				US
-
-00-14-E7   (hex)		Stolinx,. Inc
-0014E7     (base 16)		Stolinx,. Inc
-				3F Ohchang Bldg., 61 Yangjae-dong
-				Seoul    137-889
-				KR
-
-00-14-E9   (hex)		Nortech International
-0014E9     (base 16)		Nortech International
-				32A Wiganthorpe Road
-				Pietermartizburg  KwaZulu Natal  3201
-				ZA
-
-00-14-ED   (hex)		Airak, Inc.
-0014ED     (base 16)		Airak, Inc.
-				21641 Beaumeade Circle
-				Ashburn  Virginia  20147
-				US
-
-00-14-CE   (hex)		NF CORPORATION
-0014CE     (base 16)		NF CORPORATION
-				6-3-20, Tsunashima-higashi
-				Yokohama  Kanagawa  223-8508
-				JP
-
-00-14-D0   (hex)		BTI Systems Inc.
-0014D0     (base 16)		BTI Systems Inc.
-				50 Northside Road
-				Ottawa  Ontario  K2H 5Z6
-				CA
-
-00-15-03   (hex)		PROFIcomms s.r.o.
-001503     (base 16)		PROFIcomms s.r.o.
-				Turgenevova 5
-				Brno  EU/Europe  618 00
-				CZ
-
-00-15-09   (hex)		Plus Technology Co., Ltd
-001509     (base 16)		Plus Technology Co., Ltd
-				Office #205,  Gayang Techno-town,
-				  Seoul  157-810
-				KR
-
-00-14-F0   (hex)		Business Security OL AB
-0014F0     (base 16)		Business Security OL AB
-				Box 110 65
-				Lund    220 11
-				SE
-
-00-14-F2   (hex)		Cisco Systems, Inc
-0014F2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-10   (hex)		Techsphere Co., Ltd
-001510     (base 16)		Techsphere Co., Ltd
-				4F, Wonil Bldg., 980-54, Bangbae-dong, SeoCho-gu
-				  Seoul  137-060
-				KR
-
-00-15-13   (hex)		EFS sas
-001513     (base 16)		EFS sas
-				BP 34
-				MILLERY    F-69390
-				US
-
-00-14-8B   (hex)		Globo Electronic GmbH & Co. KG
-00148B     (base 16)		Globo Electronic GmbH & Co. KG
-				Industriestrasse 4a
-				Niederlauer  Bayern  97618
-				DE
-
-00-14-90   (hex)		ASP Corporation
-001490     (base 16)		ASP Corporation
-				465 Industrial Park Road
-				Hartwell  GA  30643
-				US
-
-00-14-84   (hex)		Cermate Technologies Inc.
-001484     (base 16)		Cermate Technologies Inc.
-				7F-1, No 168 Lien-Chen Rd.
-				Chung-Ho Dist  New Taipei City  
-				TW
-
-00-14-79   (hex)		NEC Magnus Communications,Ltd.
-001479     (base 16)		NEC Magnus Communications,Ltd.
-				 22-23, Kaigan 3-chome
-				Minato-ku  Tokyo  108-0022
-				JP
-
-00-14-7B   (hex)		Iteris, Inc.
-00147B     (base 16)		Iteris, Inc.
-				1515 S. Manchester Ave.
-				Anaheim  CA  92802
-				US
-
-00-14-BB   (hex)		Open Interface North America
-0014BB     (base 16)		Open Interface North America
-				506 2nd Avenue, Suite 420
-				Seattle  WA  98104
-				US
-
-00-14-70   (hex)		Prokom Software SA
-001470     (base 16)		Prokom Software SA
-				Al. Jerozolimskie 65/79
-				Warszawa  Mazowieckie  00-697
-				PL
-
-00-14-67   (hex)		ArrowSpan Inc.
-001467     (base 16)		ArrowSpan Inc.
-				4699 Old Ironsides Dr. Suite 100
-				Santa Clara  CA  95054
-				US
-
-00-14-5F   (hex)		ADITEC CO. LTD
-00145F     (base 16)		ADITEC CO. LTD
-				4F Hyowon B/D, 99-5,
-				  Seoul  138-805
-				KR
-
-00-14-88   (hex)		Akorri
-001488     (base 16)		Akorri
-				11 Falcon Ridge Dr
-				Hopkinton  MA  01748
-				US
-
-00-14-7A   (hex)		Eubus GmbH
-00147A     (base 16)		Eubus GmbH
-				Gollierstraße 70  Aufgang E  4.Stock
-				Munich  Bavaria  80339
-				DE
-
-00-14-6D   (hex)		RF Technologies
-00146D     (base 16)		RF Technologies
-				3125 N 126th Street
-				Brookfield  WI  53005
-				US
-
-00-14-AC   (hex)		Bountiful WiFi
-0014AC     (base 16)		Bountiful WiFi
-				707 West 700 South
-				Woods Cross  Utah  84087
-				US
-
-00-14-A8   (hex)		Cisco Systems, Inc
-0014A8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-14-A0   (hex)		Accsense, Inc.
-0014A0     (base 16)		Accsense, Inc.
-				460 Ward Drive
-				Santa Barbara  California  93111
-				US
-
-00-14-59   (hex)		Moram Co., Ltd.
-001459     (base 16)		Moram Co., Ltd.
-				3F, Manwol Bldg., 1022-4
-				Suwon-shi  Gyounggi-do  443-813
-				KR
-
-00-14-57   (hex)		T-VIPS AS
-001457     (base 16)		T-VIPS AS
-				Ostensjoveien 18
-				  Oslo  NO-0661
-				NO
-
-00-14-53   (hex)		ADVANTECH TECHNOLOGIES CO.,LTD
-001453     (base 16)		ADVANTECH TECHNOLOGIES CO.,LTD
-				#1202 ACE TECHNO TOWER, 684-1
-				  Seoul  157-721
-				KR
-
-00-14-54   (hex)		Symwave
-001454     (base 16)		Symwave
-				10251 Vista Sorrento Parkway
-				San Diego  CA  92121
-				US
-
-00-13-F8   (hex)		Dex Security Solutions
-0013F8     (base 16)		Dex Security Solutions
-				10 Junction Road Parktown
-				Johannesburg  Guteng  2000
-				ZA
-
-00-13-F9   (hex)		Cavera Systems
-0013F9     (base 16)		Cavera Systems
-				2355 Oakland Rd, Suite#33
-				San Jose  CA  95131
-				US
-
-00-13-F2   (hex)		Klas Ltd
-0013F2     (base 16)		Klas Ltd
-				Bracetown Business Park
-				Clonee  Co Meath  
-				IE
-
-00-13-F7   (hex)		SMC Networks, Inc.
-0013F7     (base 16)		SMC Networks, Inc.
-				38 Tesla
-				Irvine  CA  92618
-				US
-
-00-14-4B   (hex)		Hifn, Inc.
-00144B     (base 16)		Hifn, Inc.
-				750 University Ave
-				Los Gatos  CA  95032
-				US
-
-00-14-41   (hex)		Innovation Sound Technology Co., LTD.
-001441     (base 16)		Innovation Sound Technology Co., LTD.
-				Building 2th.,Cuihai Industrial Area,
-				Shenzhen  Guangdong  518103
-				CN
-
-00-14-3C   (hex)		Rheinmetall Canada Inc.
-00143C     (base 16)		Rheinmetall Canada Inc.
-				225 boul du seminaire sud
-				St-Jean-sur-Richelieu  Quebec  J3B 8E9
-				CA
-
-00-14-1A   (hex)		DEICY CORPORATION
-00141A     (base 16)		DEICY CORPORATION
-				3-3-6,Sakae-cho,Hamura-shi,
-				  Tokyo  205-0002
-				JP
-
-00-14-1C   (hex)		Cisco Systems, Inc
-00141C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-14-0C   (hex)		GKB CCTV CO., LTD.
-00140C     (base 16)		GKB CCTV CO., LTD.
-				7F, No. 1, Lane 641,
-				Ta Ya Hsiang,  TAICHUNG  428
-				TW
-
-00-13-FE   (hex)		GRANDTEC ELECTRONIC CORP.
-0013FE     (base 16)		GRANDTEC ELECTRONIC CORP.
-				8F,NO.268,Lian Cheng Rd.,Chung Ho City,
-				Taipei    235
-				TW
-
-00-14-35   (hex)		CityCom Corp.
-001435     (base 16)		CityCom Corp.
-				3F., No.532, Sec. 2,
-				Jhonghe City  Taipei Hsien  23557
-				TW
-
-00-14-48   (hex)		Inventec Multimedia & Telecom Corporation
-001448     (base 16)		Inventec Multimedia & Telecom Corporation
-				5F,NO.396,Sec.1 Nei-Hu Road
-				Taipei    114
-				TW
-
-00-14-16   (hex)		Scosche Industries, Inc.
-001416     (base 16)		Scosche Industries, Inc.
-				PO Box 2901
-				Oxnard  CA  93034
-				US
-
-00-14-26   (hex)		NL Technology
-001426     (base 16)		NL Technology
-				800 Turnpike Street
-				North Andover  MA  01845
-				US
-
-00-13-C5   (hex)		LIGHTRON FIBER-OPTIC DEVICES INC.
-0013C5     (base 16)		LIGHTRON FIBER-OPTIC DEVICES INC.
-				51-1 Moonpyung-Dong, Taeduck-Gu
-				  Taejon  306-220
-				KR
-
-00-13-C4   (hex)		Cisco Systems, Inc
-0013C4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-13-C2   (hex)		WACOM Co.,Ltd
-0013C2     (base 16)		WACOM Co.,Ltd
-				2-510-1 Toyonodai Otone-machi
-				Kitasaitama-gun  Saitama  349-1148
-				JP
-
-00-13-BF   (hex)		Media System Planning Corp.
-0013BF     (base 16)		Media System Planning Corp.
-				4F Velco-Kuromon Bldg.
-				Taito-ku,  Tokyo  110-0005
-				JP
-
-00-13-BB   (hex)		Smartvue Corporation
-0013BB     (base 16)		Smartvue Corporation
-				102 Woodmont Boulevard
-				Nashville  TN  37205
-				US
-
-00-13-B5   (hex)		Wavesat
-0013B5     (base 16)		Wavesat
-				1375, Trans-Canada Highway
-				Dorval  Quebec  H9P 2W8
-				CA
-
-00-13-AF   (hex)		NUMA Technology,Inc.
-0013AF     (base 16)		NUMA Technology,Inc.
-				4F,No778,Sec 4,Patch Rd.
-				Taipei    115
-				TW
-
-00-13-B0   (hex)		Jablotron
-0013B0     (base 16)		Jablotron
-				Pod Skalkou 33
-				Jablonec nad Nisou    46601
-				CZ
-
-00-13-9A   (hex)		K-ubique ID Corp.
-00139A     (base 16)		K-ubique ID Corp.
-				Yamasan Bldg.8F,
-				Chuo-ku  Tokyo  103-0023
-				JP
-
-00-13-9E   (hex)		Ciara Technologies Inc.
-00139E     (base 16)		Ciara Technologies Inc.
-				9300 Trans Canada Highway
-				Saint-Laurent  Quebec  H4S 1K5
-				CA
-
-00-13-9D   (hex)		MaxLinear Hispania S.L.U.
-00139D     (base 16)		MaxLinear Hispania S.L.U.
-				Ronda Narcis Monturiol 
-				Estarriol, 11D  Paterna  46980
-				ES
-
-00-13-D5   (hex)		RuggedCom
-0013D5     (base 16)		RuggedCom
-				300 Applewood Crescent (Unit 1)
-				Concord,   Ontario  L4K 5C7
-				CA
-
-00-13-D6   (hex)		TII NETWORK TECHNOLOGIES, INC.
-0013D6     (base 16)		TII NETWORK TECHNOLOGIES, INC.
-				1385 AKRON STREET
-				COPIAGUE  NY  11726
-				US
-
-00-13-DB   (hex)		SHOEI Electric Co.,Ltd
-0013DB     (base 16)		SHOEI Electric Co.,Ltd
-				1-29-2,Wakabayashi
-				Setagaya-ku  Tokyo  154-0023
-				JP
-
-00-13-CD   (hex)		MTI co. LTD
-0013CD     (base 16)		MTI co. LTD
-				166-10 Karak-dong
-				Songpa-ku  Seoul  138-810
-				KR
-
-00-13-D3   (hex)		MICRO-STAR INTERNATIONAL CO., LTD.
-0013D3     (base 16)		MICRO-STAR INTERNATIONAL CO., LTD.
-				NO. 69, LI-DE ST.
-				JUNG-HE CITY  TAIPEI HSIEN  235
-				TW
-
-00-13-E6   (hex)		Technolution
-0013E6     (base 16)		Technolution
-				Zuidelijkhalfrond 1
-				GOUDA  ZH  2801 DD
-				NL
-
-00-13-DF   (hex)		Ryvor Corp.
-0013DF     (base 16)		Ryvor Corp.
-				15145 Red Hill Ave.
-				Tustin  CA  92780
-				US
-
-00-13-8D   (hex)		Kinghold
-00138D     (base 16)		Kinghold
-				11F, No. 965, Jungjeng Rd.
-				Junghe  Taipei  235
-				TW
-
-00-13-ED   (hex)		PSIA
-0013ED     (base 16)		PSIA
-				517-13 Induspis 5th
-				SungNam  KyungGi  
-				KR
-
-00-13-B1   (hex)		Intelligent Control Systems (Asia) Pte Ltd
-0013B1     (base 16)		Intelligent Control Systems (Asia) Pte Ltd
-				70 Ubi Crescent #01-12
-				    408570
-				SG
-
-00-13-3C   (hex)		QUINTRON SYSTEMS INC.
-00133C     (base 16)		QUINTRON SYSTEMS INC.
-				2105 SO. BLOSSER ROAD
-				SANTA MARIA  CALIFORNIA  93458
-				US
-
-00-13-3D   (hex)		Micro Memory Curtiss Wright Co
-00133D     (base 16)		Micro Memory Curtiss Wright Co
-				9540 Vassar Avenue
-				Chatsworth  CA  91311
-				US
-
-00-13-3F   (hex)		Eppendorf Instrumente GmbH
-00133F     (base 16)		Eppendorf Instrumente GmbH
-				Barkhausenweg 1
-				Hamburg  DE  22339
-				DE
-
-00-13-41   (hex)		Shandong New Beiyang Information Technology Co.,Ltd
-001341     (base 16)		Shandong New Beiyang Information Technology Co.,Ltd
-				NO.11 Xinwei Road
-				Weihai city  Shandong  264200
-				CN
-
-00-13-30   (hex)		EURO PROTECTION SURVEILLANCE
-001330     (base 16)		EURO PROTECTION SURVEILLANCE
-				30 Rue du Doubs
-				STRASBOURG    67100
-				FR
-
-00-13-25   (hex)		Cortina Systems Inc
-001325     (base 16)		Cortina Systems Inc
-				840 W California Ave, Suite 100
-				Sunnyvale  CA  94086
-				US
-
-00-13-31   (hex)		CellPoint Connect
-001331     (base 16)		CellPoint Connect
-				Billedvej 4
-				Copenhagen    2100
-				DK
-
-00-13-35   (hex)		VS Industry Berhad
-001335     (base 16)		VS Industry Berhad
-				Plo 47, Senai Ind. Est. II,
-				Senai  Johor  81400
-				MY
-
-00-13-2F   (hex)		Interactek
-00132F     (base 16)		Interactek
-				Sigmal 2 BLDG #C-319, 18 Kumi-dong
-				Seongnam  Kyung-gi  463-741
-				KR
-
-00-13-4C   (hex)		YDT Technology International
-00134C     (base 16)		YDT Technology International
-				2F., No.218, Rueiguang Rd.,
-				Taipei,    114
-				TW
-
-00-13-59   (hex)		ProTelevision Technologies A/S
-001359     (base 16)		ProTelevision Technologies A/S
-				Marielundvej 16,2
-				Herlev  Copenhagen  2730
-				DK
-
-00-13-50   (hex)		Silver Spring Networks, Inc
-001350     (base 16)		Silver Spring Networks, Inc
-				575 Broadway Street
-				Redwood City  CA  94063
-				US
-
-00-13-7F   (hex)		Cisco Systems, Inc
-00137F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-13-82   (hex)		Cetacea Networks Corporation
-001382     (base 16)		Cetacea Networks Corporation
-				3708 West 36th Avenue
-				Vancouver  British Columbia  V6N 2S4
-				CA
-
-00-13-90   (hex)		Termtek Computer Co., Ltd
-001390     (base 16)		Termtek Computer Co., Ltd
-				2F, No. 100, Li De St.,
-				Chung Ho City  Taipei Hsien  235
-				TW
-
-00-13-75   (hex)		American Security Products Co.
-001375     (base 16)		American Security Products Co.
-				11925 Pacific ave.
-				Fontana  CA  92335
-				US
-
-00-13-58   (hex)		Realm Systems, Inc.
-001358     (base 16)		Realm Systems, Inc.
-				9350 South 535 East
-				Sandy  Utah  84070
-				US
-
-00-12-C1   (hex)		Check Point Software Technologies
-0012C1     (base 16)		Check Point Software Technologies
-				5 Ha'solelim St.
-				Tel Aviv    67897
-				IL
-
-00-12-BB   (hex)		Telecommunications Industry Association TR-41 Committee
-0012BB     (base 16)		Telecommunications Industry Association TR-41 Committee
-				2500 Wilson Blvd., Suite 300
-				Arlington  VA  22201
-				US
-
-00-12-B6   (hex)		Santa Barbara Infrared, Inc.
-0012B6     (base 16)		Santa Barbara Infrared, Inc.
-				30 S. Calle Cesar Chavez
-				Santa Barbara  CA  93103
-				US
-
-00-12-B9   (hex)		Fusion Digital Technology
-0012B9     (base 16)		Fusion Digital Technology
-				Victoria Mews, 23 Millfield Road
-				Bingley    BD16 1PY
-				GB
-
-00-12-ED   (hex)		AVG Advanced Technologies
-0012ED     (base 16)		AVG Advanced Technologies
-				4140 Utica Ridge Road
-				Bettendorf  IA  52722
-				US
-
-00-12-EA   (hex)		Trane
-0012EA     (base 16)		Trane
-				4833 White Bear Parkway
-				St. Paul  MN  55110
-				US
-
-00-12-E7   (hex)		Projectek Networking Electronics Corp.
-0012E7     (base 16)		Projectek Networking Electronics Corp.
-				5F-9, No. 16, Lane 609, Sec. 5, Chungshin Rd.,
-				Sanchung, Taipei    241
-				TW
-
-00-12-C3   (hex)		WIT S.A.
-0012C3     (base 16)		WIT S.A.
-				138 avenue Léon  Bérenger
-				Saint Laurent du Var  PACA  06700
-				FR
-
-00-12-C8   (hex)		Perfect tech
-0012C8     (base 16)		Perfect tech
-				3F,No.9,LANE175,NANKAN RD.,
-				LUJHU  TAOYUAN  338
-				TW
-
-00-12-C6   (hex)		TGC America, Inc
-0012C6     (base 16)		TGC America, Inc
-				2901 Tasman Drive, Suite 111
-				Santa Clara  CA  95054
-				US
-
-00-12-CC   (hex)		Bitatek CO., LTD
-0012CC     (base 16)		Bitatek CO., LTD
-				6F.,No 115,Wugong 3rd Rd
-				Wugu District  New Taipei City  248
-				TW
-
-00-12-FA   (hex)		THX LTD
-0012FA     (base 16)		THX LTD
-				5201 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-00-13-06   (hex)		Always On Wireless
-001306     (base 16)		Always On Wireless
-				3701 Kirby Dr
-				Houston  TX  77098
-				US
-
-00-12-FD   (hex)		OPTIMUS IC S.A.
-0012FD     (base 16)		OPTIMUS IC S.A.
-				NAWOJOWSKA 118
-				NOWY SACZ  MALOPOLSKA  33-300
-				PL
-
-00-13-05   (hex)		Epicom, Inc.
-001305     (base 16)		Epicom, Inc.
-				PO Box 24839
-				Oakland  CA  94623-1839
-				US
-
-00-12-E4   (hex)		ZIEHL industrie-electronik GmbH + Co KG
-0012E4     (base 16)		ZIEHL industrie-electronik GmbH + Co KG
-				Daimlerstraße 13
-				Schwaebisch Hall    74523
-				DE
-
-00-12-97   (hex)		O2Micro, Inc.
-001297     (base 16)		O2Micro, Inc.
-				3118 Patrick Henry Drive
-				Santa Clara  CA  95054
-				US
-
-00-12-9D   (hex)		First International Computer do Brasil
-00129D     (base 16)		First International Computer do Brasil
-				Rodovia BR 459
-				Santa Rita do Sapucaí  Minas Gerais  
-				BR
-
-00-12-9C   (hex)		Yulinet
-00129C     (base 16)		Yulinet
-				11F, Samhomoolsan B/D 275-6, Yangjae-dong
-				Seocho  Seoul  137-941
-				KR
-
-00-12-90   (hex)		KYOWA Electric & Machinery Corp.
-001290     (base 16)		KYOWA Electric & Machinery Corp.
-				4-8-16,Masuizumi
-				Kanazawa  Ishikawa  921-8025
-				JP
-
-00-12-91   (hex)		KWS Computersysteme GmbH
-001291     (base 16)		KWS Computersysteme GmbH
-				Carl Zeiss Str. 1
-				Ettlingen  BW  76275
-				DE
-
-00-12-95   (hex)		Aiware Inc.
-001295     (base 16)		Aiware Inc.
-				J-Tower 2F
-				Fuchu-shi  Tokyo  183-0044
-				JP
-
-00-12-8B   (hex)		Sensory Networks Inc
-00128B     (base 16)		Sensory Networks Inc
-				Level 6, 140 William St
-				East Sydney  NSW  2011
-				AU
-
-00-12-8F   (hex)		Montilio
-00128F     (base 16)		Montilio
-				1 maskit st.
-				Hertzelia    46763
-				IL
-
-00-12-A3   (hex)		Trust International B.V.
-0012A3     (base 16)		Trust International B.V.
-				Laan van Barcelona 600
-				Dordrecht  Zuid holland  3317 DD
-				NL
-
-00-12-A7   (hex)		ISR TECHNOLOGIES Inc
-0012A7     (base 16)		ISR TECHNOLOGIES Inc
-				1100, rue Notre-Dame Ouest
-				Montreal  Quebec  H3C 1K3
-				CA
-
-00-12-AA   (hex)		IEE, Inc.
-0012AA     (base 16)		IEE, Inc.
-				7740 Lemona Avenue
-				Van Nuys,  CA  91405
-				US
-
-00-12-9F   (hex)		RAE Systems
-00129F     (base 16)		RAE Systems
-				3775 North First Street
-				San Jose  CA  95134
-				US
-
-00-12-B5   (hex)		Vialta, Inc.
-0012B5     (base 16)		Vialta, Inc.
-				48461 Fremont Blvd.
-				Fremont  CA  94538
-				US
-
-00-12-B1   (hex)		Dai Nippon Printing Co., Ltd
-0012B1     (base 16)		Dai Nippon Printing Co., Ltd
-				2-8-21,Akabane-minami
-				Kita-ku  Tokyo  115-0044
-				JP
-
-00-12-89   (hex)		Advance Sterilization Products
-001289     (base 16)		Advance Sterilization Products
-				33 Technology Drive
-				Irvine  California  92618
-				US
-
-00-12-84   (hex)		Lab33 Srl
-001284     (base 16)		Lab33 Srl
-				C.so F. Perrone 24
-				Genoa  GE  16152
-				IT
-
-00-12-81   (hex)		March Networks S.p.A.
-001281     (base 16)		March Networks S.p.A.
-				Via Dei Lavoratori Autobianchi n. 1,
-				Desio  Milano  20033
-				IT
-
-00-12-7E   (hex)		Digital Lifestyles Group, Inc.
-00127E     (base 16)		Digital Lifestyles Group, Inc.
-				801 South Sentous Ave.
-				City of Industry  CA  91748
-				US
-
-00-12-6B   (hex)		Ascalade Communications Limited
-00126B     (base 16)		Ascalade Communications Limited
-				Unit 10-11, 35/F, Cable TV Tower,
-				    
-				HK
-
-00-12-33   (hex)		JRC TOKKI Co.,Ltd.
-001233     (base 16)		JRC TOKKI Co.,Ltd.
-				3-2-1 Shinyoshidahigashi Kohoku-ku
-				Yokohama  Kanagawa  223-8572
-				JP
-
-00-12-5B   (hex)		KAIMEI ELECTRONI
-00125B     (base 16)		KAIMEI ELECTRONI
-				14-3F, NO.81,SEC. 1,HSIN-TAI-WU ROAD,HSICHIH,
-				TAIPEI HSIEN  HSICHIH  221
-				TW
-
-00-12-59   (hex)		THERMO ELECTRON KARLSRUHE
-001259     (base 16)		THERMO ELECTRON KARLSRUHE
-				DIESELSTRAßE 4
-				KARLSRUHE  Baden-Württemberg  76227
-				DE
-
-00-12-5A   (hex)		Microsoft Corporation
-00125A     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				Redmond  Washington  98052-6399
-				US
-
-00-12-3D   (hex)		GES Co, Ltd
-00123D     (base 16)		GES Co, Ltd
-				 Room 710, Bundang Technopark, 700
-				Gyeonggi-Do    463-400
-				KR
-
-00-12-39   (hex)		S Net Systems Inc.
-001239     (base 16)		S Net Systems Inc.
-				10F Sungwon Bldg. Samsung-dong
-				Seoul    135-090
-				KR
-
-00-12-2F   (hex)		Sanei Electric Inc.
-00122F     (base 16)		Sanei Electric Inc.
-				5F Taisou-Ikebukuro Bldg.
-				Toshima-ku  Tokyo  171-0014
-				JP
-
-00-12-30   (hex)		Picaso Infocommunication CO., LTD.
-001230     (base 16)		Picaso Infocommunication CO., LTD.
-				3F, Suntechcity, Sangdaewon 1-dong,
-				Sungnam-city  Kyunggi-do  462-725
-				KR
-
-00-12-46   (hex)		T.O.M TECHNOLOGY INC..
-001246     (base 16)		T.O.M TECHNOLOGY INC..
-				906 Woolim E-biz Center 2,
-				Seoul  Guro-Gu  184-1
-				KR
-
-00-12-56   (hex)		LG INFORMATION & COMM.
-001256     (base 16)		LG INFORMATION & COMM.
-				459-9,KASAN-DONG,KUMCHON-GU,
-				SEOUL    153-023
-				KR
-
-00-12-14   (hex)		Koenig & Bauer AG
-001214     (base 16)		Koenig & Bauer AG
-				Friedrich-Koenig-Str. 4
-				Wuerzburg  Bavaria  97080
-				DE
-
-00-12-0F   (hex)		IEEE 802.3
-00120F     (base 16)		IEEE 802.3
-				
-				Oban     PA34 5EJ
-				GB
-
-00-12-1D   (hex)		Netfabric Corporation
-00121D     (base 16)		Netfabric Corporation
-				67 Federal Road
-				Brookfield  CT  06804
-				US
-
-00-12-0C   (hex)		CE-Infosys Pte Ltd
-00120C     (base 16)		CE-Infosys Pte Ltd
-				390 Havelock Road
-				    169662
-				SG
-
-00-11-B3   (hex)		YOSHIMIYA CO.,LTD.
-0011B3     (base 16)		YOSHIMIYA CO.,LTD.
-				2-3-24 Bainan
-				OSAKA  OSAKA-Pref  557-0033
-				JP
-
-00-11-B6   (hex)		Open Systems International
-0011B6     (base 16)		Open Systems International
-				4101 Arrowhead Drive
-				Medina  MN  55340
-				US
-
-00-11-B0   (hex)		Fortelink Inc.
-0011B0     (base 16)		Fortelink Inc.
-				42501 Albrae street suite 202
-				Fremont  CA  94538
-				US
-
-00-11-AC   (hex)		Simtec Electronics
-0011AC     (base 16)		Simtec Electronics
-				Avondale Drive
-				Tarleton  Lancashire  PR4 6AX
-				GB
-
-00-11-AD   (hex)		Shanghai Ruijie Technology
-0011AD     (base 16)		Shanghai Ruijie Technology
-				27F, 420 Jiangning Rd.
-				Shanghai    200041
-				CN
-
-00-11-CD   (hex)		Axsun Technologies
-0011CD     (base 16)		Axsun Technologies
-				1 Fortune Drive
-				Billerica  MA  02460
-				US
-
-00-11-C5   (hex)		TEN Technology
-0011C5     (base 16)		TEN Technology
-				555 East Ocean Blvd.
-				Long Beach  CA  90802
-				US
-
-00-11-BE   (hex)		AGP Telecom Co. Ltd
-0011BE     (base 16)		AGP Telecom Co. Ltd
-				9F, 134 Chung-Hsiao E. RD
-				Taipei    106
-				TW
-
-00-11-BA   (hex)		Elexol Pty Ltd
-0011BA     (base 16)		Elexol Pty Ltd
-				Level 2 / 146 Bundall Road
-				Bundall  Queensland  4217
-				AU
-
-00-11-BC   (hex)		Cisco Systems, Inc
-0011BC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-A8   (hex)		Quest Technologies
-0011A8     (base 16)		Quest Technologies
-				1060 Corporate Center Drive
-				Oconomowoc  Wisconsin  53066
-				US
-
-00-11-A1   (hex)		VISION NETWARE CO.,LTD
-0011A1     (base 16)		VISION NETWARE CO.,LTD
-				Ace Twin Tower (2), #709
-				Seoul  Guro-Gu  152-050
-				KR
-
-00-11-E2   (hex)		Hua Jung Components Co., Ltd.
-0011E2     (base 16)		Hua Jung Components Co., Ltd.
-				5F, No.13, Lane 120, Sec.1, Nei Hu Road
-				Taipei    114
-				TW
-
-00-11-DA   (hex)		Vivaas Technology Inc.
-0011DA     (base 16)		Vivaas Technology Inc.
-				15F, No. 10, Sec 1, Pei-Hsin Rd.,
-				Hsin-Tien city  Taipei Hsien,  231
-				TW
-
-00-11-DD   (hex)		FROMUS TEC. Co., Ltd.
-0011DD     (base 16)		FROMUS TEC. Co., Ltd.
-				2F 896-8 Hogye2-dong Dongan-Gu
-				    431-836
-				KR
-
-00-11-EB   (hex)		Innovative Integration
-0011EB     (base 16)		Innovative Integration
-				2390A Ward Avenue
-				Simi Valley  CA  93065
-				US
-
-00-11-EA   (hex)		IWICS Inc.
-0011EA     (base 16)		IWICS Inc.
-				19125 North Creek Parkway
-				Bothell  WA  98011
-				US
-
-00-11-E4   (hex)		Danelec Electronics A/S
-0011E4     (base 16)		Danelec Electronics A/S
-				Blokken 44
-				Birkeroed  Copenhagen  3460
-				DK
-
-00-11-E1   (hex)		Arcelik A.S
-0011E1     (base 16)		Arcelik A.S
-				Cumhuriyet Mah., E5 Yan Yol, No:1,
-				Istanbul    34520 
-				TR
-
-00-11-FB   (hex)		Heidelberg Engineering GmbH
-0011FB     (base 16)		Heidelberg Engineering GmbH
-				Tiergartenstraße 15
-				Heidelberg  Baden-Württemberg  69121
-				DE
-
-00-11-D6   (hex)		HandEra, Inc.
-0011D6     (base 16)		HandEra, Inc.
-				2859 104th St.
-				Des Moines  IA  50322
-				US
-
-00-11-CA   (hex)		Long Range Systems, Inc.
-0011CA     (base 16)		Long Range Systems, Inc.
-				4550 Excel Parkway
-				Addison  Texas  75001
-				US
-
-00-11-EF   (hex)		Conitec Datensysteme GmbH
-0011EF     (base 16)		Conitec Datensysteme GmbH
-				Dieselstraße 11c
-				Dieburg  Hessen  64807
-				DE
-
-00-11-4F   (hex)		US Digital Television, Inc
-00114F     (base 16)		US Digital Television, Inc
-				5807 N. Andrews Way
-				Fort Lauderdale  FL  33309
-				US
-
-00-11-82   (hex)		IMI Norgren Ltd
-001182     (base 16)		IMI Norgren Ltd
-				PO Box 22
-				Lichfield  Staffordshire  WS13 6SB
-				GB
-
-00-11-7A   (hex)		Singim International Corp.
-00117A     (base 16)		Singim International Corp.
-				6F-2, No. 190, Sec. 2 Chung Hsin Road,
-				Hsin Tien City    231
-				TW
-
-00-11-48   (hex)		Prolon Control Systems
-001148     (base 16)		Prolon Control Systems
-				Herstedvesterstraede 56
-				Albertslund    DK-2620
-				DK
-
-00-11-40   (hex)		Nanometrics Inc.
-001140     (base 16)		Nanometrics Inc.
-				250 Herzberg Rd.
-				Kanata  Ontario  K2K 2A1
-				CA
-
-00-11-44   (hex)		Assurance Technology Corp
-001144     (base 16)		Assurance Technology Corp
-				6304 Potomac Avenue
-				Alexandria  Virginia  22307
-				US
-
-00-11-63   (hex)		SYSTEM SPA DEPT. ELECTRONICS
-001163     (base 16)		SYSTEM SPA DEPT. ELECTRONICS
-				VIA GHIAROLA VECCHIA 73
-				FIORANO MODENESE  MODENA  I-41042
-				IT
-
-00-11-8F   (hex)		EUTECH INSTRUMENTS PTE. LTD.
-00118F     (base 16)		EUTECH INSTRUMENTS PTE. LTD.
-				Blk 55,Ayer Rajah Crescent, #04-16/24.
-				    139949
-				SG
-
-00-11-8D   (hex)		Hanchang System Corp.
-00118D     (base 16)		Hanchang System Corp.
-				1058-2, Shinkil-dong, Danwon-gu,
-				Ansan-si  Gyeonggi-do  425-839
-				KR
-
-00-11-5F   (hex)		ITX Security Co., Ltd.
-00115F     (base 16)		ITX Security Co., Ltd.
-				9F Kolon Digital Tower Aston Bldg. 505-14
-				Gasan-dong Geumcheon-gu  SEOUL  153-803
-				KR
-
-00-11-53   (hex)		Trident Tek, Inc.
-001153     (base 16)		Trident Tek, Inc.
-				8041 Cessna Ave #200
-				Gaithersburg  MD  20879
-				US
-
-00-11-72   (hex)		COTRON CORPORATION
-001172     (base 16)		COTRON CORPORATION
-				12FL,No.150,Sec.4,Cheng-De Rd
-				Taipei City    111
-				TW
-
-00-11-A0   (hex)		Vtech Engineering Canada Ltd
-0011A0     (base 16)		Vtech Engineering Canada Ltd
-				200-7671 Alderbridge Way
-				Richmond  BC  V6X 1Z9
-				CA
-
-00-11-9B   (hex)		Telesynergy Research Inc.
-00119B     (base 16)		Telesynergy Research Inc.
-				4F, No. 49, Tung Hsin Rd.,
-				Taipei    110
-				TW
-
-00-11-91   (hex)		CTS-Clima Temperatur Systeme GmbH
-001191     (base 16)		CTS-Clima Temperatur Systeme GmbH
-				Lotzenäcker 21
-				Hechingen  Baden-Württemberg  72379
-				DE
-
-00-11-89   (hex)		Aerotech Inc
-001189     (base 16)		Aerotech Inc
-				101 Zeta Drive
-				Pittsburgh  PA  15238
-				US
-
-00-0F-FB   (hex)		Nippon Denso Industry Co., Ltd.
-000FFB     (base 16)		Nippon Denso Industry Co., Ltd.
-				3-14-19
-				Shibaura, Minato-ku  Tokyo,  108-8560
-				JP
-
-00-0F-F2   (hex)		Loud Technologies Inc.
-000FF2     (base 16)		Loud Technologies Inc.
-				16220 Wood-Red Rd. NE
-				Woodinville  WA  98072
-				US
-
-00-0F-F1   (hex)		nex-G Systems Pte.Ltd
-000FF1     (base 16)		nex-G Systems Pte.Ltd
-				25 Kallang Ave
-				    339416
-				SG
-
-00-11-01   (hex)		CET Technologies Pte Ltd
-001101     (base 16)		CET Technologies Pte Ltd
-				100 Jurong East Street 21
-				    609602
-				SG
-
-00-0F-FF   (hex)		Control4
-000FFF     (base 16)		Control4
-				11734 S. Election Drive
-				Draper  UT  84020
-				US
-
-00-0F-FC   (hex)		Merit Li-Lin Ent.
-000FFC     (base 16)		Merit Li-Lin Ent.
-				No. 20 Wu-Long 6 Rd.
-				Wu-Ku  Taipei  242
-				TW
-
-00-11-13   (hex)		Fraunhofer FOKUS
-001113     (base 16)		Fraunhofer FOKUS
-				Kaiserin-Augusta-Allee 31
-				Berlin    10589
-				DE
-
-00-11-12   (hex)		Honeywell CMSS
-001112     (base 16)		Honeywell CMSS
-				8323 Lindbergh Ct
-				Sarasota  FL  34243
-				US
-
-00-0F-E0   (hex)		NComputing Co.,Ltd.
-000FE0     (base 16)		NComputing Co.,Ltd.
-				6th Fl, JEI-Platz B/D
-				Seoul  Gasan-dong Geumcheon-Gu  459-11
-				KR
-
-00-0F-E3   (hex)		Damm Cellular Systems A/S
-000FE3     (base 16)		Damm Cellular Systems A/S
-				Moellegade 68
-				Soenderborg    DK-6400
-				DK
-
-00-11-28   (hex)		Streamit
-001128     (base 16)		Streamit
-				Flight Forum 3543
-				  Eindhoven  5657 DW
-				NL
-
-00-11-3F   (hex)		Alcatel DI
-00113F     (base 16)		Alcatel DI
-				ZI lavoisier
-				EU  Normandie  76260
-				FR
-
-00-11-37   (hex)		AICHI ELECTRIC CO., LTD.
-001137     (base 16)		AICHI ELECTRIC CO., LTD.
-				1
-				kasugai city  aichi pref.  486-8666
-				JP
-
-00-0F-F3   (hex)		Jung Myoung Communications&Technology
-000FF3     (base 16)		Jung Myoung Communications&Technology
-				1th FL., Dong IL Bldg.107 Yangjae-Dong
-				Seocho-Ku  Seoul  137-130
-				KR
-
-00-11-3A   (hex)		SHINBORAM
-00113A     (base 16)		SHINBORAM
-				4F DAHNWORLD BUILDING, 154-11 SAMSUNG-DONG
-				SEOUL    135-879
-				KR
-
-00-0F-89   (hex)		Winnertec System Co., Ltd.
-000F89     (base 16)		Winnertec System Co., Ltd.
-				#405, 4th Floor. Ace-Techno Tower III, 197-48,
-				Seoul    152-766
-				KR
-
-00-0F-A4   (hex)		Sprecher Automation GmbH
-000FA4     (base 16)		Sprecher Automation GmbH
-				Franckstrasse 51
-				Linz  Oberösterreich  4018
-				AT
-
-00-0F-A6   (hex)		S2 Security Corporation
-000FA6     (base 16)		S2 Security Corporation
-				6 Abbott Road
-				Wellesley  MA  02481
-				US
-
-00-0F-AA   (hex)		Nexus Technologies
-000FAA     (base 16)		Nexus Technologies
-				10 National Ave.
-				Fletcher  NC  28732
-				US
-
-00-0F-A8   (hex)		Photometrics, Inc.
-000FA8     (base 16)		Photometrics, Inc.
-				3440 E Britannia Drive
-				Tucson  AZ  85706-5006
-				US
-
-00-0F-BD   (hex)		MRV Communications (Networks) LTD
-000FBD     (base 16)		MRV Communications (Networks) LTD
-				P.O Box 614
-				Yokneam    20692
-				IL
-
-00-0F-B4   (hex)		Timespace Technology
-000FB4     (base 16)		Timespace Technology
-				Blackstone Road
-				Huntingdon  Cambridgeshire  PE29 6TT
-				GB
-
-00-0F-9D   (hex)		DisplayLink (UK) Ltd
-000F9D     (base 16)		DisplayLink (UK) Ltd
-				Mount Pleasant House
-				Cambridge  Cambridgeshire  CB3 0RN
-				GB
-
-00-0F-C5   (hex)		KeyMed Ltd
-000FC5     (base 16)		KeyMed Ltd
-				KeyMed House
-				Southend on Sea  Essex  SS2 5QH
-				GB
-
-00-0F-BF   (hex)		DGT Sp. z o.o.
-000FBF     (base 16)		DGT Sp. z o.o.
-				ul. Jaskowa Dolina 15
-				Gdansk  woj. pomorskie  80-252
-				PL
-
-00-0F-92   (hex)		Microhard Systems Inc.
-000F92     (base 16)		Microhard Systems Inc.
-				#17, 2135-32Ave NE
-				Calgary  AB  T2E6Z3
-				CA
-
-00-0F-CB   (hex)		3Com Ltd
-000FCB     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-0F-D5   (hex)		Schwechat - RISE
-000FD5     (base 16)		Schwechat - RISE
-				Am Concorde Park 2A
-				Schwechat    2320
-				AT
-
-00-0F-67   (hex)		West Instruments
-000F67     (base 16)		West Instruments
-				Unit 5, The Hyde, Lower Bevendean
-				Brighton  East Sussex  BN2 4JU
-				GB
-
-00-0F-6E   (hex)		BBox
-000F6E     (base 16)		BBox
-				Gyar u. 2. (115)
-				Budaors    H-2040
-				HU
-
-00-0F-6F   (hex)		FTA Communication Technologies
-000F6F     (base 16)		FTA Communication Technologies
-				11, rue Pierre Werner
-				Betzdorf    L-6832
-				LU
-
-00-0F-63   (hex)		Obzerv Technologies
-000F63     (base 16)		Obzerv Technologies
-				400 Jean Lesage
-				Quebec  QC  G1K8W1
-				CA
-
-00-0F-21   (hex)		Scientific Atlanta, Inc
-000F21     (base 16)		Scientific Atlanta, Inc
-				5030 Sugarloaf Parkway
-				Lawrenceville  Ga  30042
-				US
-
-00-0F-11   (hex)		Prodrive B.V.
-000F11     (base 16)		Prodrive B.V.
-				P.O. 28030
-				Eindhoven    5602 JA
-				NL
-
-00-0F-13   (hex)		Nisca corporation
-000F13     (base 16)		Nisca corporation
-				430-1
-				Masuho-Cho  Yamanashi-Ken  400-0593
-				JP
-
-00-0F-14   (hex)		Mindray Co., Ltd.
-000F14     (base 16)		Mindray Co., Ltd.
-				Mindray Building, Keji 12th Road South
-				Shenzhen  Guangdong  518057
-				CN
-
-00-0F-65   (hex)		icube Corp.
-000F65     (base 16)		icube Corp.
-				Olympia Center 2F,828-10,Yeoksam-dong,Kangnam-ku
-				Seoul  South  135-935
-				KR
-
-00-0F-5D   (hex)		Genexis BV
-000F5D     (base 16)		Genexis BV
-				Lodewijktraat 1A
-				5652 AC  Eindhoven    
-				SE
-
-00-0F-58   (hex)		Adder Technology Limited
-000F58     (base 16)		Adder Technology Limited
-				Technology House
-				Bar Hill  Cambridgeshire  CB3 8SQ
-				GB
-
-00-0F-12   (hex)		Panasonic Europe Ltd.
-000F12     (base 16)		Panasonic Europe Ltd.
-				Hesebergweg 49-51
-				Peine    D-31228
-				DE
-
-00-0F-0E   (hex)		WaveSplitter Technologies, Inc.
-000F0E     (base 16)		WaveSplitter Technologies, Inc.
-				2248 North First Street
-				San Jose  CA  95131
-				US
-
-00-0F-0C   (hex)		SYNCHRONIC ENGINEERING
-000F0C     (base 16)		SYNCHRONIC ENGINEERING
-				25 CAP DARNETAL
-				DARNETAL  FRANCE  76160
-				FR
-
-00-0F-0B   (hex)		Kentima Technologies AB
-000F0B     (base 16)		Kentima Technologies AB
-				Box 174
-				Staffanstorp  Skåne  245 44
-				SE
-
-00-0F-46   (hex)		SINAR AG
-000F46     (base 16)		SINAR AG
-				Stadtweg 24
-				Feuerthalen  ZH  CH-8245
-				CH
-
-00-0F-41   (hex)		Zipher Ltd
-000F41     (base 16)		Zipher Ltd
-				7 Faraday Building
-				Nottingham  Nottinghamshire  NG7 2QP
-				GB
-
-00-0F-4D   (hex)		TalkSwitch
-000F4D     (base 16)		TalkSwitch
-				1545 Carling Ave
-				Ottawa  Ontario  K1Z 8P9
-				CA
-
-00-0F-71   (hex)		Sanmei Electronics Co.,Ltd
-000F71     (base 16)		Sanmei Electronics Co.,Ltd
-				2-2-1,Seikai,Shimizu
-				Shizuoka    424-0924
-				JP
-
-00-0F-6B   (hex)		GateWare Communications GmbH
-000F6B     (base 16)		GateWare Communications GmbH
-				Allersberger Strasse 185 F
-				Nuernberg  Bavaria  D-90461
-				DE
-
-00-0E-D5   (hex)		COPAN Systems Inc.
-000ED5     (base 16)		COPAN Systems Inc.
-				2605 Trade Centre Ave.
-				Longmont  CO  80503
-				US
-
-00-0E-CA   (hex)		WTSS Inc
-000ECA     (base 16)		WTSS Inc
-				5999 Avenida Encinas
-				Carlsbad  CA  92008
-				US
-
-00-0E-CC   (hex)		Tableau, LLC
-000ECC     (base 16)		Tableau, LLC
-				N8 W22195 Johnson Drive, Suite 100
-				Waukesha  WI  53186
-				US
-
-00-0E-CB   (hex)		VineSys Technology
-000ECB     (base 16)		VineSys Technology
-				3350 Scott Blvd. building 15-03
-				Santa Clara  CA  95054
-				US
-
-00-0E-D2   (hex)		Filtronic plc
-000ED2     (base 16)		Filtronic plc
-				The Waterfront
-				Saltaire  W Yorks  BD18 3TT
-				GB
-
-00-0E-C8   (hex)		Zoran Corporation
-000EC8     (base 16)		Zoran Corporation
-				1390 Kifer Rd.
-				Sunnyvale  CA  94086
-				US
-
-00-0E-D9   (hex)		Aksys, Ltd.
-000ED9     (base 16)		Aksys, Ltd.
-				2 Marriott Drive
-				Lincolnshire  IL  60069
-				US
-
-00-0E-B4   (hex)		GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD.
-000EB4     (base 16)		GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD.
-				AVE. 398 ZHONGSHAN
-				GUANGZHOU  GUANGDONG  510660
-				CN
-
-00-0E-B1   (hex)		Newcotech,Ltd
-000EB1     (base 16)		Newcotech,Ltd
-				Anyang Megavally 715-3
-				Anyang City  Gueonggi-Do  431-160
-				KR
-
-00-0E-A9   (hex)		Shanghai Xun Shi Communications Equipment Ltd. Co.
-000EA9     (base 16)		Shanghai Xun Shi Communications Equipment Ltd. Co.
-				Hi-Tech King World, Unit C603
-				Shanghai    200001
-				CN
-
-00-0E-B7   (hex)		Knovative, Inc.
-000EB7     (base 16)		Knovative, Inc.
-				11245 West Bernardo Court
-				San Diego  CA  92127
-				US
-
-00-0E-FA   (hex)		Optoway Technology Incorporation
-000EFA     (base 16)		Optoway Technology Incorporation
-				No. 38, Kuang Fu South Road
-				Hu Kou  Hsin Chu  303
-				TW
-
-00-0E-FD   (hex)		FUJINON CORPORATION
-000EFD     (base 16)		FUJINON CORPORATION
-				1-324 UETAKE, KITA-KU,
-				SAITAMA CITY  SAITAMA  331-9624
-				JP
-
-00-0E-F5   (hex)		iPAC Technology Co., Ltd.
-000EF5     (base 16)		iPAC Technology Co., Ltd.
-				6F, No. 30, Shingjung Road, Neihu
-				Taipei    114
-				TW
-
-00-0E-FB   (hex)		Macey Enterprises
-000EFB     (base 16)		Macey Enterprises
-				P.O. Box 7267
-				Tempe  AZ  85281
-				US
-
-00-0F-09   (hex)		Private
-000F09     (base 16)		Private
-
-00-0E-DC   (hex)		Tellion INC.
-000EDC     (base 16)		Tellion INC.
-				5th Fl. BONA Venture Town
-				Seoul  Seocho-gu.  137-719
-				KR
-
-00-0E-CD   (hex)		SKOV A/S
-000ECD     (base 16)		SKOV A/S
-				Hedelund 4
-				Roslev    DK-7870
-				DK
-
-00-0E-DB   (hex)		XiNCOM Corp.
-000EDB     (base 16)		XiNCOM Corp.
-				2840 Industrial Ave.
-				Hubbard  OR  97032
-				US
-
-00-0E-C2   (hex)		Lowrance Electronics, Inc.
-000EC2     (base 16)		Lowrance Electronics, Inc.
-				12000 E. Skelly Drive
-				Tulsa  OK  74128
-				US
-
-00-0E-A3   (hex)		CNCR-IT CO.,LTD,HangZhou P.R.CHINA
-000EA3     (base 16)		CNCR-IT CO.,LTD,HangZhou P.R.CHINA
-				Yinjiang mansion NO.5F Wenyi Road
-				HangZhou  ZheJiang  310012
-				CN
-
-00-0E-A2   (hex)		McAfee, Inc
-000EA2     (base 16)		McAfee, Inc
-				350 SW 12th Avenue
-				Deerfield Beach  FL  33442
-				US
-
-00-0E-9B   (hex)		Ambit Microsystems Corporation
-000E9B     (base 16)		Ambit Microsystems Corporation
-				5F-1, 5 Hsin-An Rd. Science-Based Industrial Park
-				Hsinchu    300
-				TW
-
-00-0E-78   (hex)		Amtelco
-000E78     (base 16)		Amtelco
-				4800 Curtin Drive
-				McFarland  WI  53558
-				US
-
-00-0E-71   (hex)		Gemstar Technology Development Ltd.
-000E71     (base 16)		Gemstar Technology Development Ltd.
-				Unit 201, Stulex house, 698 prince edward road east, san po kong, Kolwoon
-				Hong Kong    852
-				HK
-
-00-0E-70   (hex)		in2 Networks
-000E70     (base 16)		in2 Networks
-				320 W  200 S
-				SLC  UT  84101
-				US
-
-00-0E-37   (hex)		Harms & Wende GmbH & Co.KG
-000E37     (base 16)		Harms & Wende GmbH & Co.KG
-				Grossmoorkehre 9
-				Hamburg    D-21079
-				DE
-
-00-0E-31   (hex)		Olympus Soft Imaging Solutions GmbH
-000E31     (base 16)		Olympus Soft Imaging Solutions GmbH
-				Johann-Krane-Weg 39
-				  Münster  48149
-				DE
-
-00-0E-2F   (hex)		Roche Diagnostics GmbH
-000E2F     (base 16)		Roche Diagnostics GmbH
-				Roche Diabetes Care Insulin Delivery Systems
-				D-68305 Mannheim    
-				DE
-
-00-0E-2A   (hex)		Private
-000E2A     (base 16)		Private
-
-00-0E-9E   (hex)		Topfield Co., Ltd
-000E9E     (base 16)		Topfield Co., Ltd
-				4th floor, Deoksan Bldg 260-4, Seohyun-dong
-				Seongnam  Bundang-Ku  463-824
-				KR
-
-00-0E-41   (hex)		NIHON MECHATRONICS CO.,LTD.
-000E41     (base 16)		NIHON MECHATRONICS CO.,LTD.
-				9-6 SHIOMIDAI, MIYAMAE-KU
-				KAWASAKI-SHI  KANAGAWA-KEN  216-0013
-				JP
-
-00-0E-3C   (hex)		Transact Technologies Inc
-000E3C     (base 16)		Transact Technologies Inc
-				20 Bomax Drive
-				Ithaca  New York  14850
-				US
-
-00-0E-63   (hex)		Lemke Diagnostics GmbH
-000E63     (base 16)		Lemke Diagnostics GmbH
-				Radeburger Str. 47
-				Volkersdorf  Saxony  01468
-				DE
-
-00-0E-5B   (hex)		ParkerVision - Direct2Data
-000E5B     (base 16)		ParkerVision - Direct2Data
-				9432 Baymeadows Way
-				Jacksonville  FL  32246
-				US
-
-00-0E-60   (hex)		360SUN Digital Broadband Corporation
-000E60     (base 16)		360SUN Digital Broadband Corporation
-				2F-2, No.2, Jianba Rd.,
-				Chung Ho  Taipei  235
-				TW
-
-00-0E-54   (hex)		AlphaCell Wireless Ltd.
-000E54     (base 16)		AlphaCell Wireless Ltd.
-				22 Zarhin street
-				Raanana    43662
-				IL
-
-00-0E-4E   (hex)		Waveplus Technology Co., Ltd.
-000E4E     (base 16)		Waveplus Technology Co., Ltd.
-				347 HsinHu 2nd Rd., NeiHu
-				Taipei    114
-				TW
-
-00-0E-4A   (hex)		Changchun Huayu WEBPAD Co.,LTD
-000E4A     (base 16)		Changchun Huayu WEBPAD Co.,LTD
-				4370 Gaoxin Road, High-Tech
-				Changchun  Jilin  130012
-				CN
-
-00-0E-93   (hex)		Milénio 3 Sistemas Electrónicos, Lda.
-000E93     (base 16)		Milénio 3 Sistemas Electrónicos, Lda.
-				Edifício Via Norte, R. Espido 164C S403
-				Maia  Minho  4470-177
-				PT
-
-00-0E-8D   (hex)		Systems in Progress Holding GmbH
-000E8D     (base 16)		Systems in Progress Holding GmbH
-				Exerzierplatzstrasse 85
-				Graz  Styria  8051
-				AT
-
-00-0E-76   (hex)		GEMSOC INNOVISION INC.
-000E76     (base 16)		GEMSOC INNOVISION INC.
-				9F,No.516,Sec,1Neihu Rd.,
-				Taipei    114
-				TW
-
-00-0E-7D   (hex)		Electronics Line 3000 Ltd.
-000E7D     (base 16)		Electronics Line 3000 Ltd.
-				2 Granit St.
-				Petah Tikva  Kiryar Arie  449130
-				IL
-
-00-0E-2C   (hex)		Netcodec co.
-000E2C     (base 16)		Netcodec co.
-				401 Daeion S/W Center, 48 Jangdong
-				Daejon    305-715
-				KR
-
-00-0E-23   (hex)		Incipient, Inc.
-000E23     (base 16)		Incipient, Inc.
-				230 Third Ave.
-				Waltham  MA  02451
-				US
-
-00-0E-25   (hex)		Hannae Technology Co., Ltd
-000E25     (base 16)		Hannae Technology Co., Ltd
-				4F, Hyunjin Bldg., #798-30, Yeoksam-Dong
-				SEOUL    135-080
-				KR
-
-00-0E-20   (hex)		ACCESS Systems Americas, Inc.
-000E20     (base 16)		ACCESS Systems Americas, Inc.
-				1188 East Arques Avenue
-				Sunnyvale  CA  94085
-				US
-
-00-0E-21   (hex)		MTU Friedrichshafen GmbH
-000E21     (base 16)		MTU Friedrichshafen GmbH
-				Maybachplatz 1
-				Friedrichshafen  Baden Wuertemberg  88040
-				DE
-
-00-0D-D4   (hex)		Symantec Corporation
-000DD4     (base 16)		Symantec Corporation
-				275 2nd Ave
-				Waltham  MA  02541
-				US
-
-00-0D-D2   (hex)		Simrad Optronics ASA
-000DD2     (base 16)		Simrad Optronics ASA
-				Ensjøveienn 23B
-				PO Box 6114 Etterstad  NO-0602 Oslo  
-				NO
-
-00-0D-D1   (hex)		Stryker Corporation
-000DD1     (base 16)		Stryker Corporation
-				4100 E Milham
-				Kalamazoo  MI  49001
-				US
-
-00-0D-D7   (hex)		Bright
-000DD7     (base 16)		Bright
-				1-12-44 Aobadai
-				Kashiwa-shi  Chiba-ken  277-0055
-				JP
-
-00-0D-D9   (hex)		Anton Paar GmbH
-000DD9     (base 16)		Anton Paar GmbH
-				Anton-Paar-Strasse 20
-				Graz    8054
-				AT
-
-00-0D-DC   (hex)		VAC
-000DDC     (base 16)		VAC
-				20F, N0. 456, Sec. 4, Hsin Yi Rd.,
-				Taipei    110
-				TW
-
-00-0D-E0   (hex)		ICPDAS Co.,LTD
-000DE0     (base 16)		ICPDAS Co.,LTD
-				 No. 111, Kuang-Fu N. Rd., Hsin-Chu Indu
-				HSINCHU    303
-				TW
-
-00-0D-E3   (hex)		AT Sweden AB
-000DE3     (base 16)		AT Sweden AB
-				P.O. Box 1166
-				Kista  Stockholm  SE-164 26
-				SE
-
-00-0D-EA   (hex)		Kingtel Telecommunication Corp.
-000DEA     (base 16)		Kingtel Telecommunication Corp.
-				147 Kang Ning St.
-				Hsi Chih City  Taipei Hsien  221
-				TW
-
-00-0D-ED   (hex)		Cisco Systems, Inc
-000DED     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0D-E4   (hex)		DIGINICS, Inc.
-000DE4     (base 16)		DIGINICS, Inc.
-				178-7 Poi-dong
-				Kangnam-gu  Seoul  135-961
-				KR
-
-00-0E-09   (hex)		Shenzhen Coship Software Co.,LTD.
-000E09     (base 16)		Shenzhen Coship Software Co.,LTD.
-				7/F,Block A,W2 Bldg,Hi-Tech Industrial Park,Shenzhen,China
-				Shenzhen  Guangdong  518057
-				CN
-
-00-0E-05   (hex)		WIRELESS MATRIX CORP.
-000E05     (base 16)		WIRELESS MATRIX CORP.
-				UNIT 1A-3751 NORTH FRASER WAY
-				BURNABY  BC  V5J 5G4
-				CA
-
-00-0E-22   (hex)		Private
-000E22     (base 16)		Private
-
-00-0E-1C   (hex)		Hach Company
-000E1C     (base 16)		Hach Company
-				5600 Lindbergh Drive
-				Loveland  CO  80538
-				US
-
-00-0E-02   (hex)		Advantech AMT Inc.
-000E02     (base 16)		Advantech AMT Inc.
-				657 Orly Ave.
-				Dorval  Quebec  H9P 1G1
-				CA
-
-00-0D-C9   (hex)		THALES Elektronik Systeme GmbH
-000DC9     (base 16)		THALES Elektronik Systeme GmbH
-				Fritz-Ludwig-Str. 1
-				Koblenz    56070
-				DE
-
-00-0D-81   (hex)		Pepperl+Fuchs GmbH
-000D81     (base 16)		Pepperl+Fuchs GmbH
-				Lilienthalstraße 200
-				Mannheim    68307
-				DE
-
-00-0D-7A   (hex)		DiGATTO Asia Pacific Pte Ltd
-000D7A     (base 16)		DiGATTO Asia Pacific Pte Ltd
-				190 Mddle Road, #19-05 Fortune Center
-				    188979
-				SG
-
-00-0D-77   (hex)		FalconStor Software
-000D77     (base 16)		FalconStor Software
-				125 Baylis Rd
-				Melville  NY  11747
-				US
-
-00-0D-76   (hex)		Hokuto Denshi Co,. Ltd.
-000D76     (base 16)		Hokuto Denshi Co,. Ltd.
-				3-7 Odori Nishi 16-Chome Chuoku
-				Sapporo  Hokkaido  060-0042
-				JP
-
-00-0D-7B   (hex)		Consensys Computers Inc.
-000D7B     (base 16)		Consensys Computers Inc.
-				215 Shields Ct.
-				Markham  ON  L3R 8V2
-				CA
-
-00-0D-8F   (hex)		King Tsushin Kogyo Co., LTD.
-000D8F     (base 16)		King Tsushin Kogyo Co., LTD.
-				 1-10-1 Edanishi Aobaku
-				  Yokohama  225-0014
-				JP
-
-00-0D-89   (hex)		Bils Technology Inc
-000D89     (base 16)		Bils Technology Inc
-				508 S River Oaks Drive
-				Indialantic  FL  32903
-				US
-
-00-0D-86   (hex)		Huber + Suhner AG
-000D86     (base 16)		Huber + Suhner AG
-				Degersheimerstrasse 14
-				9100  Herisau  
-				CH
-
-00-0D-C8   (hex)		AirMagnet, Inc
-000DC8     (base 16)		AirMagnet, Inc
-				830 E. Arques Avenue
-				Sunnyvale  CA  94085
-				US
-
-00-0D-BE   (hex)		Bel Fuse Europe Ltd.,UK
-000DBE     (base 16)		Bel Fuse Europe Ltd.,UK
-				45/46 Riverside 2
-				Rochester  Kent  ME2 4DP
-				GB
-
-00-0D-BC   (hex)		Cisco Systems, Inc
-000DBC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0D-9F   (hex)		RF Micro Devices
-000D9F     (base 16)		RF Micro Devices
-				2191 Zanker Road
-				San Jose  CA  95131
-				US
-
-00-0D-A5   (hex)		Fabric7 Systems, Inc
-000DA5     (base 16)		Fabric7 Systems, Inc
-				1300 Crittenden Lane
-				Mountain View  CA  94043
-				US
-
-00-0D-C5   (hex)		EchoStar Global B.V. 
-000DC5     (base 16)		EchoStar Global B.V. 
-				Schuilenburglaan 5a
-				Almelo  Overijssel  7604BJ
-				NL
-
-00-0D-99   (hex)		Orbital Sciences Corp.; Launch Systems Group
-000D99     (base 16)		Orbital Sciences Corp.; Launch Systems Group
-				3380 S. Price Rd.
-				Chandler,  AZ  85248
-				US
-
-00-0D-6C   (hex)		M-Audio
-000D6C     (base 16)		M-Audio
-				45 E ST Joseph St.
-				Arcadia  CA  91006
-				US
-
-00-0D-70   (hex)		Datamax Corporation
-000D70     (base 16)		Datamax Corporation
-				4501 Parkway Commerce Blvd
-				Orlando  FL  32808
-				US
-
-00-0D-59   (hex)		Amity Systems, Inc.
-000D59     (base 16)		Amity Systems, Inc.
-				888 Tasman Drive
-				Milpitas  CA  95035
-				US
-
-00-0D-4E   (hex)		NDR Co.,LTD.
-000D4E     (base 16)		NDR Co.,LTD.
-				Sumitomo seimei minatomachi MT BLDG
-				Osak  Kinki  550-0015
-				JP
-
-00-0D-50   (hex)		Galazar Networks
-000D50     (base 16)		Galazar Networks
-				35 Fitzgerald Ave
-				Ottawa  ON  K2H 1E6
-				CA
-
-00-0D-17   (hex)		Turbo Networks Co.Ltd
-000D17     (base 16)		Turbo Networks Co.Ltd
-				2F,No 1223, Chung Cheng Rd.
-				Tao Yuan    330
-				TW
-
-00-0D-18   (hex)		Mega-Trend Electronics CO., LTD.
-000D18     (base 16)		Mega-Trend Electronics CO., LTD.
-				Tong Fu Yu Ind., Ku Keng Village, Guan Lan
-				Shengzhen  Guang Dong  518110
-				CN
-
-00-0D-20   (hex)		ASAHIKASEI TECHNOSYSTEM CO.,LTD.
-000D20     (base 16)		ASAHIKASEI TECHNOSYSTEM CO.,LTD.
-				Kanda Jinbocho 1-105
-				Chiyoda-ku  Tokyo  101-8101
-				JP
-
-00-0D-49   (hex)		Triton Systems of Delaware, Inc.
-000D49     (base 16)		Triton Systems of Delaware, Inc.
-				522 E. Railroad St.
-				Long Beach  MS  39560
-				US
-
-00-0D-48   (hex)		AEWIN Technologies Co., Ltd.
-000D48     (base 16)		AEWIN Technologies Co., Ltd.
-				7F, No. 2, Lane 47, Sec. 3, Nan-Gang Rd.
-				TAIPEI    115
-				TW
-
-00-0D-24   (hex)		SENTEC E&E CO., LTD.
-000D24     (base 16)		SENTEC E&E CO., LTD.
-				No. 32. Gong5 Rd.
-				Lungtan  Taoyuan  325
-				TW
-
-00-0D-22   (hex)		Unitronics LTD
-000D22     (base 16)		Unitronics LTD
-				Unitronics Building
-				Ben Gurion Airport    70100
-				IL
-
-00-0D-14   (hex)		Vtech Innovation LP dba Advanced American Telephones
-000D14     (base 16)		Vtech Innovation LP dba Advanced American Telephones
-				203-600 Parsippany Rd
-				Parsippany  NJ  07054
-				US
-
-00-0D-5B   (hex)		Smart Empire Investments Limited
-000D5B     (base 16)		Smart Empire Investments Limited
-				Suite 2001-2006,Level 20 Landmark North
-				Xin Jie  Hong Kong  00852
-				CN
-
-00-0D-3A   (hex)		Microsoft Corp.
-000D3A     (base 16)		Microsoft Corp.
-				One Microsoft Way
-				Redmond  Wa.  98052
-				US
-
-00-0D-30   (hex)		IceFyre Semiconductor
-000D30     (base 16)		IceFyre Semiconductor
-				Suite 300
-				Kanata  Ontario  K2K 3C9
-				CA
-
-00-0D-31   (hex)		Compellent Technologies, Inc.
-000D31     (base 16)		Compellent Technologies, Inc.
-				7625 Smetana Lane
-				Eden Prairie  Minnesota  55344
-				US
-
-00-0D-2C   (hex)		Net2Edge Limited
-000D2C     (base 16)		Net2Edge Limited
-				Kulite House Stroudley Road
-				Basingstoke  Hampshire  RG24 8UG
-				GB
-
-00-0D-25   (hex)		SANDEN CORPORATION
-000D25     (base 16)		SANDEN CORPORATION
-				20 Kotobuki-cho
-				Isesaki-shi  Gunma  372-8502
-				JP
-
-00-0D-6F   (hex)		Ember Corporation
-000D6F     (base 16)		Ember Corporation
-				343 Congress St
-				Boston  Ma  02210
-				US
-
-00-0D-5E   (hex)		NEC Personal Products
-000D5E     (base 16)		NEC Personal Products
-				6-80, Shimohanazawa 2-Chome
-				Yonezawa-shi  Yamagata  992-8520
-				JP
-
-00-0D-3F   (hex)		VTI Instruments Corporation
-000D3F     (base 16)		VTI Instruments Corporation
-				5425 Warner Road, Suite 13
-				Valley View  OH  44125
-				US
-
-00-0C-E3   (hex)		Option International N.V.
-000CE3     (base 16)		Option International N.V.
-				Kolonel Begaultlaan 45
-				Leuven  Brabant  3012
-				BE
-
-00-0C-E7   (hex)		MediaTek Inc.
-000CE7     (base 16)		MediaTek Inc.
-				1F, No. 13, Innovation Road 1,
-				Hsinchu    300
-				TW
-
-00-0C-E8   (hex)		GuangZhou AnJuBao Co., Ltd
-000CE8     (base 16)		GuangZhou AnJuBao Co., Ltd
-				HeiQiaoTang TangXia TianHe
-				GuangZhou  GuangDong  510665
-				CN
-
-00-0C-E4   (hex)		NeuroCom International, Inc.
-000CE4     (base 16)		NeuroCom International, Inc.
-				9570 SE Lawnfield Rd
-				Clackamas  OR  97015
-				US
-
-00-0C-B5   (hex)		Premier Technolgies, Inc
-000CB5     (base 16)		Premier Technolgies, Inc
-				PO Box 159
-				Long Lake  MN  55356
-				US
-
-00-0C-B6   (hex)		NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD
-000CB6     (base 16)		NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD
-				5th floor,Building 5,ChangJiangHou Street No.6
-				Nanjing  Jiangsu  210018
-				CN
-
-00-0C-C3   (hex)		BeWAN systems
-000CC3     (base 16)		BeWAN systems
-				16 rue du Moulin des Bruyères Courbevoie
-				Courbevoie  Hauts de Seine  92400
-				FR
-
-00-0C-B4   (hex)		AutoCell Laboratories, Inc.
-000CB4     (base 16)		AutoCell Laboratories, Inc.
-				174 Concord Street
-				Peterborough,  New Hampshire  03458
-				US
-
-00-0C-B1   (hex)		Salland Engineering (Europe) BV
-000CB1     (base 16)		Salland Engineering (Europe) BV
-				Bedrijvenpark Berkum
-				Zwolle  OV  8024 HA
-				NL
-
-00-0C-BC   (hex)		Iscutum
-000CBC     (base 16)		Iscutum
-				#899-6 Ho-Gye Dong, Dong-An Gu
-				An-Yang City  Kyong-Gi Do  431-080
-				KR
-
-00-0D-04   (hex)		Foxboro Eckardt Development GmbH
-000D04     (base 16)		Foxboro Eckardt Development GmbH
-				Glockenstrasse 52
-				Stuttgart  Baden-Württemberg  70376
-				DE
-
-00-0D-08   (hex)		AboveCable, Inc.
-000D08     (base 16)		AboveCable, Inc.
-				8403 Colesville Road, #825
-				Silver Spring  MD  20910
-				US
-
-00-0D-05   (hex)		cybernet manufacturing inc.
-000D05     (base 16)		cybernet manufacturing inc.
-				5 holland
-				irvine  ca  92618
-				US
-
-00-0C-FE   (hex)		Grand Electronic Co., Ltd
-000CFE     (base 16)		Grand Electronic Co., Ltd
-				Room 1710, Block B Lucky tower, No.3 Don
-				Beijing    100027
-				CN
-
-00-0D-0E   (hex)		Inqnet Systems, Inc.
-000D0E     (base 16)		Inqnet Systems, Inc.
-				321 NKIC Center,
-				Seoul    120-100
-				KR
-
-00-0D-11   (hex)		DENTSPLY - Gendex
-000D11     (base 16)		DENTSPLY - Gendex
-				901 West Oakton Street
-				Des Plaines  IL  60018-1884
-				US
-
-00-0C-C8   (hex)		Xytronix Research & Design, Inc.
-000CC8     (base 16)		Xytronix Research & Design, Inc.
-				1488 East 2300 North
-				North Logan  UT  84341-1627
-				US
-
-00-0C-CA   (hex)		HGST a Western Digital Company
-000CCA     (base 16)		HGST a Western Digital Company
-				3403 Yerba Buena Road
-				San Jose  CA  95135
-				US
-
-00-0C-D0   (hex)		Symetrix
-000CD0     (base 16)		Symetrix
-				6408 216th St SW
-				Mountlake Terrace  WA  98043
-				US
-
-00-0C-D9   (hex)		Itcare Co., Ltd
-000CD9     (base 16)		Itcare Co., Ltd
-				408 KT Seocho, 1001-1 Bangbae-dong,
-				Seoul    137-850
-				KR
-
-00-0C-D5   (hex)		Passave Inc.
-000CD5     (base 16)		Passave Inc.
-				1557 Jasper Dr.
-				Sunnyvale  CA  94087
-				US
-
-00-0C-D2   (hex)		Schaffner EMV AG
-000CD2     (base 16)		Schaffner EMV AG
-				Nordstrasse 1
-				Luterbach    CH-4542
-				CH
-
-00-0A-07   (hex)		WebWayOne Ltd
-000A07     (base 16)		WebWayOne Ltd
-				11 Kingfisher Court,
-				Newbury  Berkshire  RG14 5SJ
-				GB
-
-00-0C-B0   (hex)		Star Semiconductor Corporation
-000CB0     (base 16)		Star Semiconductor Corporation
-				6F, No.17, Li-Hsin Rd
-				Hsinchu City    300
-				TW
-
-00-0C-34   (hex)		Vixen Co., Ltd.
-000C34     (base 16)		Vixen Co., Ltd.
-				5-17-3 Higashitokorozawa
-				Tokorozawa  Saitama  359-0021
-				JP
-
-00-0C-58   (hex)		M&S Systems
-000C58     (base 16)		M&S Systems
-				2861 Congressman Lane
-				Dallas  TX  75220
-				US
-
-00-0C-51   (hex)		Scientific Technologies Inc.
-000C51     (base 16)		Scientific Technologies Inc.
-				6550 Dumbarton Circle
-				Fremont  CA  94560
-				US
-
-00-0C-73   (hex)		TELSON ELECTRONICS CO., LTD
-000C73     (base 16)		TELSON ELECTRONICS CO., LTD
-				Telson Venture Tower., 949-3 Dogok-Dong
-				Seoul  Kangnam-Ku  135-739
-				KR
-
-00-0C-65   (hex)		Sunin Telecom
-000C65     (base 16)		Sunin Telecom
-				1025-5 Dokok-Ri, Wabu-Eub
-				Namyangju-City  Kyunggi-Do  472-900
-				KR
-
-00-0C-6C   (hex)		Eve Systems GmbH
-000C6C     (base 16)		Eve Systems GmbH
-				Rotkreuzplatz 1
-				Munich    80634
-				DE
-
-00-0C-6F   (hex)		Amtek system co.,LTD.
-000C6F     (base 16)		Amtek system co.,LTD.
-				14F-11,No.79,Sec. 1 ,Hsin Tai Wu Rd.,
-				Taipei    221
-				TW
-
-00-0C-7E   (hex)		Tellium Incorporated
-000C7E     (base 16)		Tellium Incorporated
-				2 Crescent Place
-				Oceanport  New Jersey  07757
-				US
-
-00-0C-87   (hex)		AMD
-000C87     (base 16)		AMD
-				4555 Great America Pkwy
-				Santa Clara  CA  95054
-				US
-
-00-0C-98   (hex)		LETEK Communications Inc.
-000C98     (base 16)		LETEK Communications Inc.
-				Taeyang Bd. 2nd Floor, 2486
-				SongNam  Kyunggi-do  462-824
-				KR
-
-00-0C-8E   (hex)		Mentor Engineering Inc
-000C8E     (base 16)		Mentor Engineering Inc
-				2891 Sunridge Way NE
-				Calgary  Alberta  T1Y7K7
-				CA
-
-00-0C-A2   (hex)		Harmonic Video Network
-000CA2     (base 16)		Harmonic Video Network
-				10 Ha'amal st. Park Afek
-				Rosh Ha'ayin    48092
-				IL
-
-00-0C-A4   (hex)		Prompttec Product Management GmbH
-000CA4     (base 16)		Prompttec Product Management GmbH
-				Mariatrosterstr. 41
-				Graz  AUSTRIA  A-8043
-				AT
-
-00-0C-5B   (hex)		HANWANG TECHNOLOGY CO.,LTD
-000C5B     (base 16)		HANWANG TECHNOLOGY CO.,LTD
-				8F,Automation Building,95 Zhongguancun,
-				Beijing    100080
-				CN
-
-00-0C-60   (hex)		ACM Systems
-000C60     (base 16)		ACM Systems
-				3034 Gold Canal Drive
-				Rancho Cordova  CA  95670
-				US
-
-00-0C-83   (hex)		Logical Solutions
-000C83     (base 16)		Logical Solutions
-				100T Washington Street
-				Milford  CT  06460
-				US
-
-00-0C-96   (hex)		OQO, Inc.
-000C96     (base 16)		OQO, Inc.
-				1800 Illinois Street
-				San Francisco  CA  94124
-				US
-
-00-0C-08   (hex)		HUMEX Technologies Corp.
-000C08     (base 16)		HUMEX Technologies Corp.
-				5F, No.5, Lane 44, Szu Wei Rd. Taan Taip
-				Taipei    106
-				TW
-
-00-0C-0D   (hex)		Communications & Power Industries / Satcom Division
-000C0D     (base 16)		Communications & Power Industries / Satcom Division
-				811 Hansen Way MS S-600
-				Palo Alto  CA  94303
-				US
-
-00-0C-01   (hex)		Abatron AG
-000C01     (base 16)		Abatron AG
-				Lettenstrasse 9
-				Rotkreuz    CH-6343
-				CH
-
-00-0C-39   (hex)		Sentinel Wireless Inc.
-000C39     (base 16)		Sentinel Wireless Inc.
-				439 S. Union St.
-				South Lawrence  MA  01843
-				US
-
-00-0C-33   (hex)		Compucase Enterprise Co. Ltd.
-000C33     (base 16)		Compucase Enterprise Co. Ltd.
-				225 Lane 54, An Ho Road, Section 2nd.
-				Tainan City    70942
-				TW
-
-00-0B-F6   (hex)		Nitgen Co., Ltd
-000BF6     (base 16)		Nitgen Co., Ltd
-				4th FL. 1337-31 Seocho-dong, Seocho-ku
-				Seoul    137-860
-				KR
-
-00-0B-FD   (hex)		Cisco Systems, Inc
-000BFD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-FA   (hex)		EXEMYS SRL
-000BFA     (base 16)		EXEMYS SRL
-				LOYOLA 680
-				CAPITAL FEDERAL  BS AS  C1414
-				AR
-
-00-0B-F4   (hex)		Private
-000BF4     (base 16)		Private
-
-00-0B-FB   (hex)		D-NET International Corporation
-000BFB     (base 16)		D-NET International Corporation
-				15, Wu-Chuan 5th Road, Wu-Ku Industrial
-				Taipei  Hsieh    248
-				US
-
-00-0C-1D   (hex)		Mettler & Fuchs AG
-000C1D     (base 16)		Mettler & Fuchs AG
-				Querstrasse 17
-				CH-8951  Fahrweid  
-				CH
-
-00-0C-1E   (hex)		Global Cache
-000C1E     (base 16)		Global Cache
-				160 East California Street
-				Jacksonville  OR  97530
-				US
-
-00-0C-1A   (hex)		Quest Technical Solutions Inc.
-000C1A     (base 16)		Quest Technical Solutions Inc.
-				4110 Mourning Dove Crt.
-				Melbourne  FL  32934
-				US
-
-00-0C-24   (hex)		ANATOR
-000C24     (base 16)		ANATOR
-				44, rue d'Estienne d'Orves
-				sartrouville  yvelines  78500
-				FR
-
-00-0C-19   (hex)		Telio Communications GmbH
-000C19     (base 16)		Telio Communications GmbH
-				Elbchaussee 1
-				Hamburg    22765
-				DE
-
-00-0C-13   (hex)		MediaQ
-000C13     (base 16)		MediaQ
-				2975 San Ysidro Way
-				Santa Clara  CA  95051
-				US
-
-00-0C-06   (hex)		Nixvue Systems  Pte Ltd
-000C06     (base 16)		Nixvue Systems  Pte Ltd
-				30 Loyang Way, #07-02
-				Singapore  Singapore  S508769
-				SG
-
-00-0C-2D   (hex)		FullWave Technology Co., Ltd.
-000C2D     (base 16)		FullWave Technology Co., Ltd.
-				7F-6, No.26, TaiYuan St.,
-				JuBei  Hsin Chu  302
-				TW
-
-00-0C-26   (hex)		Weintek Labs. Inc.
-000C26     (base 16)		Weintek Labs. Inc.
-				3F, No.910, Chung Cheng Rd.
-				Chung Ho city  Taipei Hsien  236
-				TW
-
-00-0C-2B   (hex)		ELIAS Technology, Inc.
-000C2B     (base 16)		ELIAS Technology, Inc.
-				3F, 1015, Yung-An Road,
-				Taoyuan City  Taoyuan  330
-				TW
-
-00-0B-F0   (hex)		MoTEX Products Co., Ltd.
-000BF0     (base 16)		MoTEX Products Co., Ltd.
-				C.P.O.Box 6912
-				Chong-gu  Seoul  82
-				KR
-
-00-0B-F1   (hex)		LAP Laser Applikations
-000BF1     (base 16)		LAP Laser Applikations
-				Zeppelinstraße 23
-				Lüneburg  Niedersachsen  21337
-				DE
-
-00-0B-EE   (hex)		inc.jet, Incorporated
-000BEE     (base 16)		inc.jet, Incorporated
-				One Winnenden Road
-				Norwich  CT  06360
-				US
-
-00-0B-8D   (hex)		Avvio Networks
-000B8D     (base 16)		Avvio Networks
-				11 Donovan Dr
-				Bedford  MA  01730
-				US
-
-00-0B-85   (hex)		Cisco Systems, Inc
-000B85     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-7F   (hex)		Align Engineering LLC
-000B7F     (base 16)		Align Engineering LLC
-				245 Highlands Drive
-				Friday Harbor   WA  98250
-				US
-
-00-0B-A6   (hex)		Miyakawa Electric Works Ltd.
-000BA6     (base 16)		Miyakawa Electric Works Ltd.
-				2-1-6,
-				Yokohama  Kanagawa  222-0001
-				JP
-
-00-0B-93   (hex)		Ritter Elektronik
-000B93     (base 16)		Ritter Elektronik
-				Leverkuser Straße 65
-				Remscheid  NRW  42897
-				DE
-
-00-0B-9B   (hex)		Sirius System Co, Ltd.
-000B9B     (base 16)		Sirius System Co, Ltd.
-				3-27 Funado-cho
-				Ashiya  Hyogo  659-0093
-				JP
-
-00-0B-E2   (hex)		Lumenera Corporation
-000BE2     (base 16)		Lumenera Corporation
-				2520B St. Laurent Blvd.
-				Ottawa  Ontario  K1B 4R8
-				CA
-
-00-0B-E1   (hex)		Nokia NET Product Operations
-000BE1     (base 16)		Nokia NET Product Operations
-				313 Fairchild Drive
-				Mountain View  California  94043
-				US
-
-00-0B-A8   (hex)		HANBACK ELECTRONICS CO., LTD.
-000BA8     (base 16)		HANBACK ELECTRONICS CO., LTD.
-				306-7, Galma-dong, Seo-gu
-				Daejeon    302-171
-				KR
-
-00-0B-A9   (hex)		CloudShield Technologies, Inc.
-000BA9     (base 16)		CloudShield Technologies, Inc.
-				212 Gilbraltar Drive
-				Sunnyvale  CA  94089
-				US
-
-00-0B-A1   (hex)		Fujikura Solutions Ltd.
-000BA1     (base 16)		Fujikura Solutions Ltd.
-				1565-6,Shirakusadai,Fukaya-shi
-				Saitama-ken    369-1106
-				JP
-
-00-0B-8E   (hex)		Ascent Corporation
-000B8E     (base 16)		Ascent Corporation
-				2-16-19, Kawaraya-machi, Chuo-Ku,
-				Osaka-City  Osaka-Pref  542-0066
-				JP
-
-00-0B-8F   (hex)		AKITA ELECTRONICS SYSTEMS CO.,LTD.
-000B8F     (base 16)		AKITA ELECTRONICS SYSTEMS CO.,LTD.
-				85,AZA USHIRONO,AIKAWA,YUWA-MACHI
-				KAWABE-GUN  AKITA-KEN  010-1231
-				JP
-
-00-0B-CB   (hex)		Fagor Automation , S. Coop
-000BCB     (base 16)		Fagor Automation , S. Coop
-				San Andres s/n
-				  Guipuzcoa  20500
-				ES
-
-00-0B-C8   (hex)		AirFlow Networks
-000BC8     (base 16)		AirFlow Networks
-				444 Castro St
-				Mountain View  Ca  94041
-				US
-
-00-0B-CE   (hex)		Free2move AB
-000BCE     (base 16)		Free2move AB
-				Sperlingsgatan 7
-				Halmstad  Halland  30248
-				SE
-
-00-0B-CF   (hex)		AGFA NDT INC.
-000BCF     (base 16)		AGFA NDT INC.
-				50 Industrial Park Road
-				Lewistown  PA  17044
-				US
-
-00-0B-C3   (hex)		Multiplex, Inc.
-000BC3     (base 16)		Multiplex, Inc.
-				5000 Hadley Rd.
-				S. Plainfield  NJ  07040
-				US
-
-00-0B-BE   (hex)		Cisco Systems, Inc
-000BBE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-E0   (hex)		SercoNet Ltd.
-000BE0     (base 16)		SercoNet Ltd.
-				16 Ha'haroshet st.
-				Ra'anana    43657
-				IL
-
-00-0B-BD   (hex)		Connexionz Limited
-000BBD     (base 16)		Connexionz Limited
-				1 Show Place
-				Christchurch    
-				NZ
-
-00-0B-40   (hex)		Cambridge Industries Group (CIG)
-000B40     (base 16)		Cambridge Industries Group (CIG)
-				2560 Junction Avenue
-				San Jose    95134
-				US
-
-00-0B-42   (hex)		commax Co., Ltd.
-000B42     (base 16)		commax Co., Ltd.
-				513-11, Sangdaewon-Dong, Jungwon-Ku
-				Sungnam-City  Kyunggi-Do  462-120
-				KR
-
-00-0B-47   (hex)		Advanced Energy
-000B47     (base 16)		Advanced Energy
-				1625 Sharp Point Drive
-				Fort Collins  Colorado  80525
-				US
-
-00-0B-81   (hex)		Kaparel Corporation
-000B81     (base 16)		Kaparel Corporation
-				97 Randall Drive
-				Waterloo  Ontario  N2V-1C5
-				CA
-
-00-0B-82   (hex)		Grandstream Networks, Inc.
-000B82     (base 16)		Grandstream Networks, Inc.
-				1297 Beacon Street
-				Brookline  MA  02446
-				US
-
-00-0B-6E   (hex)		Neff Instrument Corp.
-000B6E     (base 16)		Neff Instrument Corp.
-				700 South Myrtle Ave.
-				Monrovia  CA  91016
-				US
-
-00-0B-72   (hex)		Lawo AG
-000B72     (base 16)		Lawo AG
-				Am Oberwald 8
-				Rastatt  Baden-Württemberg  76437
-				DE
-
-00-0B-31   (hex)		Yantai ZhiYang Scientific and technology industry CO., LTD
-000B31     (base 16)		Yantai ZhiYang Scientific and technology industry CO., LTD
-				5F-4, NO. 64, Gong-Jian Rd.
-				Hsi-Chih City  Taipei County  221
-				CN
-
-00-0B-2F   (hex)		bplan GmbH
-000B2F     (base 16)		bplan GmbH
-				Industriestrasse 23b
-				Steinbach  Hessen  61449
-				DE
-
-00-0B-3D   (hex)		CONTAL OK Ltd.
-000B3D     (base 16)		CONTAL OK Ltd.
-				Frana Mraza 2/289
-				Zilina    01124
-				SK
-
-00-0B-4D   (hex)		Emuzed
-000B4D     (base 16)		Emuzed
-				46750 Lakeview Boulevard
-				Fremont  California  94538
-				US
-
-00-0B-24   (hex)		AirLogic
-000B24     (base 16)		AirLogic
-				807-1, Bundangtechnopark D, 151,
-				Sungnam-Si  Kyungki-Do  463-760
-				KR
-
-00-0B-78   (hex)		TAIFATECH INC.
-000B78     (base 16)		TAIFATECH INC.
-				8F-1 No.289, Sec.2  Guangfu Rd.
-				Hsinchu    300
-				TW
-
-00-0B-6C   (hex)		Sychip Inc.
-000B6C     (base 16)		Sychip Inc.
-				2805 N. Dallas Parkway Suite 400
-				Plano  Texas  75093
-				US
-
-00-91-D6   (hex)		Crystal Group, Inc.
-0091D6     (base 16)		Crystal Group, Inc.
-				850 Kacena Rd.
-				Hiawatha  IA  52233
-				US
-
-00-0B-5A   (hex)		HyperEdge
-000B5A     (base 16)		HyperEdge
-				333 Pierce Road Suite #200
-				Itasca  IL  60143
-				US
-
-00-0B-0F   (hex)		Bosch Rexroth
-000B0F     (base 16)		Bosch Rexroth
-				Luchthavenweg 20
-				Eindhoven  Noord Brabant  NL5657 EB
-				NL
-
-00-0B-0C   (hex)		Agile Systems Inc.
-000B0C     (base 16)		Agile Systems Inc.
-				575 Kumpf Drive
-				Waterloo  Ontario  N2V 1K3
-				CA
-
-00-0B-0A   (hex)		dBm Optics
-000B0A     (base 16)		dBm Optics
-				300 S. Public Road
-				Lafayette  Colorado  80026
-				US
-
-00-0B-09   (hex)		Ifoundry Systems Singapore
-000B09     (base 16)		Ifoundry Systems Singapore
-				Block 1, Unit 101B, Innovation Centre, 1
-				    637722
-				SG
-
-00-0B-1D   (hex)		LayerZero Power Systems, Inc.
-000B1D     (base 16)		LayerZero Power Systems, Inc.
-				3559 Townley Road
-				Shaker Heights  OH  44122-5156
-				US
-
-00-0B-19   (hex)		Vernier Networks, Inc.
-000B19     (base 16)		Vernier Networks, Inc.
-				490 E. Middlefield Road
-				Mountain View  CA  94043
-				US
-
-00-0B-16   (hex)		Communication Machinery Corporation
-000B16     (base 16)		Communication Machinery Corporation
-				402 E. Gutierrez St.
-				Santa Barbara  CA  93101
-				US
-
-00-0B-12   (hex)		NURI Telecom Co., Ltd.
-000B12     (base 16)		NURI Telecom Co., Ltd.
-				B-10F Woolim Lion's Valley 371-28
-				Geuncheon-gu  Seoul  153-803
-				KR
-
-00-0A-C5   (hex)		Color Kinetics
-000AC5     (base 16)		Color Kinetics
-				10 Milk Street
-				Boston  Masachusetts  02108
-				US
-
-00-0A-BD   (hex)		Rupprecht & Patashnick Co.
-000ABD     (base 16)		Rupprecht & Patashnick Co.
-				25 Corporate Circle
-				Albany  NY  12203
-				US
-
-00-0A-CB   (hex)		XPAK MSA Group
-000ACB     (base 16)		XPAK MSA Group
-				Care of: Molex Fiber Optics
-				Downers Grove  IL  60515
-				US
-
-00-0A-D5   (hex)		Brainchild Electronic Co., Ltd.
-000AD5     (base 16)		Brainchild Electronic Co., Ltd.
-				No.209, Chung Yang Rd.,
-				Taipei    115
-				TW
-
-00-0A-D6   (hex)		BeamReach Networks
-000AD6     (base 16)		BeamReach Networks
-				755 North Mathilda Ave
-				Sunnyvale  California  94086
-				US
-
-00-0A-FE   (hex)		NovaPal Ltd
-000AFE     (base 16)		NovaPal Ltd
-				Floor 6
-				Ealing  London  W5 2ST
-				GB
-
-00-0A-FD   (hex)		Kentec Electronics
-000AFD     (base 16)		Kentec Electronics
-				620 Allendale Rd
-				King of Prussia  PA  19406
-				US
-
-00-0A-EF   (hex)		OTRUM ASA
-000AEF     (base 16)		OTRUM ASA
-				Brattekleiv
-				Færvik    N-4818
-				NO
-
-00-0A-E5   (hex)		ScottCare Corporation
-000AE5     (base 16)		ScottCare Corporation
-				4791 West 150th Street
-				Cleveland  Ohio  44135
-				US
-
-00-0A-B0   (hex)		LOYTEC electronics GmbH
-000AB0     (base 16)		LOYTEC electronics GmbH
-				Stolzenthalergasse 24/3
-				Vienna    1080
-				AT
-
-00-0A-B5   (hex)		Digital Electronic Network
-000AB5     (base 16)		Digital Electronic Network
-				8 rue du sacré  coeur
-				Saint Laurent sur Sevre  Vendee  85290
-				FR
-
-00-0A-D2   (hex)		JEPICO Corporation
-000AD2     (base 16)		JEPICO Corporation
-				Nishi-shinjyuku2-7-1
-				Shinjyuku-ku  Tokyo  163-0729
-				JP
-
-00-0A-98   (hex)		M+F Gwinner GmbH & Co
-000A98     (base 16)		M+F Gwinner GmbH & Co
-				Weidenbaumsweg 91 a
-				Hamburg    21029
-				DE
-
-00-0A-9B   (hex)		TB Group Inc
-000A9B     (base 16)		TB Group Inc
-				 4F NREG Hongo 3-chome Bldg., 3-26-6, Hngo, Bunkyo-ku, 
-				Tokyo    113-003
-				JP
-
-00-0A-6C   (hex)		Walchem Corporation
-000A6C     (base 16)		Walchem Corporation
-				5 Boynton Road
-				Holliston  MA  01746
-				US
-
-00-0A-5F   (hex)		almedio inc.
-000A5F     (base 16)		almedio inc.
-				32-13, sakae-cho 2 chome
-				higashimurayama-shi  tokyo  189-0013
-				JP
-
-00-0A-6B   (hex)		Tadiran Telecom Business Systems LTD
-000A6B     (base 16)		Tadiran Telecom Business Systems LTD
-				18 Hasivim St.
-				Petach Tikva    49105
-				IL
-
-00-0A-61   (hex)		Cellinx Systems Inc.
-000A61     (base 16)		Cellinx Systems Inc.
-				408 Woosung Character199 officetel
-				Seoul    135-856
-				KR
-
-00-0A-78   (hex)		OLITEC
-000A78     (base 16)		OLITEC
-				B.P. 592
-				NANCY cedex    54009
-				FR
-
-00-0A-A9   (hex)		Brooks Automation GmbH
-000AA9     (base 16)		Brooks Automation GmbH
-				Goeschwitzer Strasse 25
-				Jena  Thuringia  07745
-				DE
-
-00-0A-A5   (hex)		MAXLINK INDUSTRIES LIMITED
-000AA5     (base 16)		MAXLINK INDUSTRIES LIMITED
-				29A SHENZHEN SPECIAL ZONE
-				SHENZHEN  GUANGDONG  518009
-				CN
-
-00-0A-A2   (hex)		SYSTEK INC.
-000AA2     (base 16)		SYSTEK INC.
-				JCOM BUILDING 402, OJEON-DONG 124-4,
-				UIWANG-SI  GYUNGGI-DO  437-070
-				KR
-
-00-0A-5B   (hex)		Power-One as
-000A5B     (base 16)		Power-One as
-				P.O. Box 1543
-				Drammen    3007
-				NO
-
-00-0A-55   (hex)		MARKEM Corporation
-000A55     (base 16)		MARKEM Corporation
-				150 Congress Street
-				Keene  NH  03431
-				US
-
-00-0A-73   (hex)		Scientific Atlanta
-000A73     (base 16)		Scientific Atlanta
-				5030 Sugarloaf Parkway
-				Lawrenceville  Ga  30042
-				US
-
-00-0A-69   (hex)		SUNNY bell Technology Co., Ltd.
-000A69     (base 16)		SUNNY bell Technology Co., Ltd.
-				#502 BUWON B/D 107-45 BANPO-DONG
-				SEOUL    137-806
-				KR
-
-00-0A-84   (hex)		Rainsun Enterprise Co., Ltd.
-000A84     (base 16)		Rainsun Enterprise Co., Ltd.
-				No.14-3 , Lane 235, Ho-Chen Road
-				ShinDian City  TAIPEI  231
-				TW
-
-00-0A-7E   (hex)		The Advantage Group
-000A7E     (base 16)		The Advantage Group
-				1610 Des Peres Road
-				St. Louis  MO  63131
-				US
-
-00-0A-4C   (hex)		Molecular Devices Corporation
-000A4C     (base 16)		Molecular Devices Corporation
-				1311 Orleans Drive
-				Sunnyvale  CA  94089
-				US
-
-00-0A-4D   (hex)		Noritz Corporation
-000A4D     (base 16)		Noritz Corporation
-				5 Minami-Futami,
-				Akashi-shi  Hyogo  674-0093
-				JP
-
-00-0A-91   (hex)		HemoCue AB
-000A91     (base 16)		HemoCue AB
-				Box 1204
-				Ängelholm  Skåne län   26223
-				SE
-
-00-09-F2   (hex)		Cohu, Inc., Electronics Division
-0009F2     (base 16)		Cohu, Inc., Electronics Division
-				3912 Calle Fortunada
-				San Diego  CA  92123
-				US
-
-00-09-E9   (hex)		Cisco Systems, Inc
-0009E9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-DC   (hex)		Galaxis Technology AG
-0009DC     (base 16)		Galaxis Technology AG
-				Steinmetzstraße 7
-				Lübeck  Schleswig-Holstein  23556
-				DE
-
-00-0A-3A   (hex)		J-THREE INTERNATIONAL Holding Co., Ltd.
-000A3A     (base 16)		J-THREE INTERNATIONAL Holding Co., Ltd.
-				No. 1, Yu-3 Rd., Youth Industrial Park
-				Yang-mei, Taoyuan Hsien    326
-				TW
-
-00-0A-47   (hex)		Allied Vision Technologies
-000A47     (base 16)		Allied Vision Technologies
-				Taschenweg 2a
-				Stadtroda  Thüringen  07646
-				DE
-
-00-0A-3C   (hex)		Enerpoint Ltd.
-000A3C     (base 16)		Enerpoint Ltd.
-				Kaivopuistontie 33
-				Rauma    26100
-				FI
-
-00-0A-44   (hex)		Avery Dennison Deutschland GmbH
-000A44     (base 16)		Avery Dennison Deutschland GmbH
-				Ohmstraße 3
-				Eching    85386
-				DE
-
-00-09-F8   (hex)		UNIMO TECHNOLOGY CO., LTD.
-0009F8     (base 16)		UNIMO TECHNOLOGY CO., LTD.
-				BANGBAE DONG 479-12
-				SEOUL    137-820
-				KR
-
-00-09-FF   (hex)		X.net 2000 GmbH
-0009FF     (base 16)		X.net 2000 GmbH
-				Koenigsberger Str. 2c
-				Reinheim    64354
-				DE
-
-00-0A-03   (hex)		ENDESA SERVICIOS, S.L.
-000A03     (base 16)		ENDESA SERVICIOS, S.L.
-				AVGDA PARAL.LEL, 51
-				BARCELONA    08004
-				ES
-
-00-09-FE   (hex)		Daisy Technologies, Inc.
-0009FE     (base 16)		Daisy Technologies, Inc.
-				1209 Orange Street
-				City of Wilmington  DE  19801
-				US
-
-00-0A-28   (hex)		Motorola
-000A28     (base 16)		Motorola
-				600 N. US Hwy 45
-				Libertyville  IL  60048
-				US
-
-00-0A-29   (hex)		Pan Dacom Networking AG
-000A29     (base 16)		Pan Dacom Networking AG
-				Dreieich Plaza 1B
-				Dreieich  Hessen  D-63303
-				DE
-
-00-09-EB   (hex)		HuMANDATA LTD.
-0009EB     (base 16)		HuMANDATA LTD.
-				1-2-10
-				Ibaraki  Osaka  567-0034
-				JP
-
-00-09-E8   (hex)		Cisco Systems, Inc
-0009E8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-ED   (hex)		CipherOptics
-0009ED     (base 16)		CipherOptics
-				701 Corporate Center Drive
-				Raleigh  North Carolina  27607
-				US
-
-00-0A-40   (hex)		Crown Audio -- Harmanm International
-000A40     (base 16)		Crown Audio -- Harmanm International
-				1718 W. Mishawaka Rd
-				Elkhart  IN  46517
-				US
-
-00-0A-26   (hex)		CEIA S.p.A.
-000A26     (base 16)		CEIA S.p.A.
-				Zona Industriale di Viciomaggio 54
-				Arezzo  AR  52040
-				IT
-
-00-0A-1D   (hex)		Optical Communications Products Inc.
-000A1D     (base 16)		Optical Communications Products Inc.
-				20961 Knapp St.
-				Chatsworth  CA  91311
-				US
-
-00-0A-16   (hex)		Lassen Research
-000A16     (base 16)		Lassen Research
-				31695 Forward Road
-				Manton  CA  96059
-				US
-
-00-0A-18   (hex)		Vichel Inc.
-000A18     (base 16)		Vichel Inc.
-				3F Jang Bldg. 92-6 Yangjae-dong, Secho-g
-				Seoul    137-130
-				KR
-
-00-0A-06   (hex)		Teledex LLC
-000A06     (base 16)		Teledex LLC
-				6311 San Ignacio Avenue
-				San Jose  CA  95119
-				US
-
-00-09-A9   (hex)		Ikanos Communications
-0009A9     (base 16)		Ikanos Communications
-				47709 Fremont Blvd
-				Fremont  CA  94538
-				US
-
-00-09-9F   (hex)		VIDEX INC.
-00099F     (base 16)		VIDEX INC.
-				1105 NE Circle Blvd
-				Corvallis  OR  97330
-				US
-
-00-09-A2   (hex)		Interface Co., Ltd.
-0009A2     (base 16)		Interface Co., Ltd.
-				2-5-12-201 Kyonancho
-				Musashino-city  Tokyo  180-0023
-				JP
-
-00-09-A1   (hex)		Telewise Communications, Inc.
-0009A1     (base 16)		Telewise Communications, Inc.
-				2050 Ringwood Avenue
-				San Jose  CA  95131
-				US
-
-00-09-7D   (hex)		SecWell Networks Oy
-00097D     (base 16)		SecWell Networks Oy
-				P.O.BOX 174
-				Tampere    33101
-				FI
-
-00-09-76   (hex)		Datasoft ISDN Systems GmbH
-000976     (base 16)		Datasoft ISDN Systems GmbH
-				Schillerplatz 3
-				St. Poelten  Lower Austria  3100
-				AT
-
-00-09-C6   (hex)		Visionics Corporation
-0009C6     (base 16)		Visionics Corporation
-				5600 Rowland Road
-				Minnetonka  MN  55343
-				US
-
-00-09-D1   (hex)		SERANOA NETWORKS INC
-0009D1     (base 16)		SERANOA NETWORKS INC
-				CONCORD OFFICE CENTER
-				CONCORD  MA  01742
-				US
-
-00-09-CE   (hex)		SpaceBridge Semiconductor Corp.
-0009CE     (base 16)		SpaceBridge Semiconductor Corp.
-				115 rue Champlain
-				Hull  Quebec  J8X3R1
-				CA
-
-00-09-B8   (hex)		Entise Systems
-0009B8     (base 16)		Entise Systems
-				10095 Judy Avenue
-				Cupertino  CA  95014
-				US
-
-00-09-AF   (hex)		e-generis
-0009AF     (base 16)		e-generis
-				13 rue du chene germain
-				cesson sevigne    35510
-				FR
-
-00-09-AD   (hex)		HYUNDAI SYSCOMM, INC.
-0009AD     (base 16)		HYUNDAI SYSCOMM, INC.
-				SAN 136-1, AMI-RI, BUBAL-EUB
-				ICHON  KYOUNGKI-DO  467-701
-				KR
-
-00-09-BD   (hex)		Epygi Technologies, Ltd.
-0009BD     (base 16)		Epygi Technologies, Ltd.
-				5040 Addison Circle
-				Addison  Texas  75001
-				US
-
-00-09-C2   (hex)		Onity, Inc.
-0009C2     (base 16)		Onity, Inc.
-				2232 Northmont Parkway
-				Duluth  GA  30096
-				US
-
-00-09-C3   (hex)		NETAS
-0009C3     (base 16)		NETAS
-				Alemdag Cad. No 171
-				ISTANBUL    81244
-				TR
-
-00-09-B5   (hex)		3J Tech. Co., Ltd.
-0009B5     (base 16)		3J Tech. Co., Ltd.
-				342 Fushing N. Rd., 2F, Taipei, Taiwan
-				Taipei    104
-				TW
-
-00-09-82   (hex)		Loewe Opta GmbH
-000982     (base 16)		Loewe Opta GmbH
-				Industriestrasse 11
-				Kronach    96317
-				DE
-
-00-09-83   (hex)		GlobalTop Technology, Inc.
-000983     (base 16)		GlobalTop Technology, Inc.
-				 #16 Nan-Ke 9th Road
-				Tainan    741
-				TW
-
-00-09-DD   (hex)		Mavin Technology Inc.
-0009DD     (base 16)		Mavin Technology Inc.
-				Room 305, Bldg. 52 No. 195-28
-				Chutung, Hsinchu    310
-				TW
-
-00-09-7A   (hex)		Louis Design Labs.
-00097A     (base 16)		Louis Design Labs.
-				2F,NO 4, Lane 497, Chung-Cheng Rd.,Hsin-
-				Hsin-Tien  Taipei Hsien  231
-				TW
-
-00-09-6B   (hex)		IBM Corp
-00096B     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-09-6D   (hex)		Powernet Technologies Corp.
-00096D     (base 16)		Powernet Technologies Corp.
-				371-51, Gasan-Dong Kumchon-Gu,
-				Seoul    153-803
-				KR
-
-00-09-64   (hex)		Hi-Techniques, Inc.
-000964     (base 16)		Hi-Techniques, Inc.
-				2515 Frazier Ave.
-				Madison  WI  53713-1505
-				US
-
-00-09-65   (hex)		HyunJu Computer Co., Ltd.
-000965     (base 16)		HyunJu Computer Co., Ltd.
-				222-22, Hyunju B/D, Guro 3 Dong, Gurogu
-				Seoul    152-848
-				KR
-
-00-09-39   (hex)		ShibaSoku Co.,Ltd.
-000939     (base 16)		ShibaSoku Co.,Ltd.
-				6-8 Shinbashi 4-chome
-				Minato-ku  Tokyo  105-0004
-				JP
-
-00-09-33   (hex)		Ophit Co.Ltd.
-000933     (base 16)		Ophit Co.Ltd.
-				3F. Suntechnovil, 5-27  Mangpo-Dong ,
-				Kyungki-Do    137-070
-				KR
-
-00-09-32   (hex)		Omnilux
-000932     (base 16)		Omnilux
-				130 W. Union St.
-				Pasadena  CA  91103
-				US
-
-00-09-1C   (hex)		CacheVision, Inc
-00091C     (base 16)		CacheVision, Inc
-				1990 Concourse Drive
-				San Jose  CA  95131
-				US
-
-00-09-1A   (hex)		Macat Optics & Electronics Co., Ltd.
-00091A     (base 16)		Macat Optics & Electronics Co., Ltd.
-				15/F., Macat Center, No. 63 Macat Road
-				Huizhou  Guangdong  516001
-				CN
-
-00-09-1B   (hex)		Digital Generation Inc.
-00091B     (base 16)		Digital Generation Inc.
-				5F, Ho-Sam B/D, #30-3, Bongchun6-Dong
-				Kwanak-Ku,  Seoul  151-089
-				KR
-
-00-09-29   (hex)		Sanyo Industries (UK) Limited
-000929     (base 16)		Sanyo Industries (UK) Limited
-				School Road
-				Lowestoft  Suffolk  NR33 9NA
-				GB
-
-00-09-28   (hex)		Telecore
-000928     (base 16)		Telecore
-				1800 North Glenville
-				Richardson  TX  75081
-				US
-
-00-09-2E   (hex)		B&Tech System Inc.
-00092E     (base 16)		B&Tech System Inc.
-				#601, Seo-Jung B/D, 830-24, Youksam-Dong
-				Seoul    
-				KR
-
-00-09-6F   (hex)		Beijing Zhongqing Elegant Tech. Corp.,Limited
-00096F     (base 16)		Beijing Zhongqing Elegant Tech. Corp.,Limited
-				Rm.508, A-Building, Shangdi Digital Scie
-				Beijing    100084
-				CN
-
-00-09-5E   (hex)		Masstech Group Inc.
-00095E     (base 16)		Masstech Group Inc.
-				2 East Beaver Creek Rd.
-				Richmond Hill  Ontario  L4B 2N3
-				CA
-
-00-09-4F   (hex)		elmegt GmbH & Co. KG
-00094F     (base 16)		elmegt GmbH & Co. KG
-				Kommunikationstechnik
-				Peine  Niedersachsen  D-31228
-				DE
-
-00-09-43   (hex)		Cisco Systems, Inc
-000943     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-02   (hex)		Redline Communications Inc.
-000902     (base 16)		Redline Communications Inc.
-				302 Town Centre Blvd
-				Markham  ON  L3R 0E8
-				CA
-
-00-08-FA   (hex)		KEB Automation KG
-0008FA     (base 16)		KEB Automation KG
-				Südstraße 38
-				Barntrup  NRW  D-32683
-				DE
-
-00-09-59   (hex)		Sitecsoft
-000959     (base 16)		Sitecsoft
-				7th Gugu BD. 145-18 Samsung-Dong
-				Seoul  Seoul  135-090
-				KR
-
-00-09-57   (hex)		Supercaller, Inc.
-000957     (base 16)		Supercaller, Inc.
-				101 Saginaw Drive
-				Redwood City  CA  94063
-				US
-
-00-08-D2   (hex)		ZOOM Networks Inc.
-0008D2     (base 16)		ZOOM Networks Inc.
-				13F,XinLuDao Building,No.1175,Nanshan Ro
-				Shen Zhen  GuangDong Province  518052
-				US
-
-00-08-C5   (hex)		Liontech Co., Ltd.
-0008C5     (base 16)		Liontech Co., Ltd.
-				306, Wooyoung Techno Center, 273-15,
-				Seoul    133-831
-				KR
-
-00-08-AA   (hex)		KARAM
-0008AA     (base 16)		KARAM
-				98-3,  Hankangro 2-KA, Yongsan
-				Seoul    140-012
-				KR
-
-00-08-AB   (hex)		EnerLinx.com, Inc.
-0008AB     (base 16)		EnerLinx.com, Inc.
-				3965 South Woodhill Lane
-				New Berlin  WI  53151
-				US
-
-00-08-AD   (hex)		Toyo-Linx Co., Ltd.
-0008AD     (base 16)		Toyo-Linx Co., Ltd.
-				Hirakawa-Cho, Chiyada-ku,
-				Tokyo    102-0093
-				JP
-
-00-08-F2   (hex)		C&S Technology
-0008F2     (base 16)		C&S Technology
-				C&S Venture Bldg., NonHyun-Dong,
-				SEOUL    135-829
-				KR
-
-00-08-EA   (hex)		Motion Control Engineering, Inc
-0008EA     (base 16)		Motion Control Engineering, Inc
-				11380 White Rock Road
-				Rancho Cordova  CA  95742
-				US
-
-00-08-ED   (hex)		ST&T Instrument Corp.
-0008ED     (base 16)		ST&T Instrument Corp.
-				16 Shing-Gong Road, Yung-Kung Industrial
-				Yung-Kung  Tainan  710
-				TW
-
-00-08-88   (hex)		OULLIM Information Technology Inc,.
-000888     (base 16)		OULLIM Information Technology Inc,.
-				a-10th FL,. IT Venture Tower,
-				Seoul    138-803
-				KR
-
-00-08-85   (hex)		EMS Dr. Thomas Wünsche
-000885     (base 16)		EMS Dr. Thomas Wünsche
-				Sonnenhang 3
-				    
-				DE
-
-00-08-72   (hex)		Sorenson Communications
-000872     (base 16)		Sorenson Communications
-				4192 South Riverboat Road
-				Salt Lake City  UT  84123
-				US
-
-00-08-9A   (hex)		Alcatel Microelectronics
-00089A     (base 16)		Alcatel Microelectronics
-				Excelsiorlaan 44-46
-				B-1930 Zavantem    
-				BE
-
-00-08-A1   (hex)		CNet Technology Inc.
-0008A1     (base 16)		CNet Technology Inc.
-				No.15, Park Avenue II, Science-Based Ind
-				Hsin-Chu    300
-				TW
-
-00-08-93   (hex)		LE INFORMATION COMMUNICATION INC.
-000893     (base 16)		LE INFORMATION COMMUNICATION INC.
-				Rm, 4501, DA-Dong Chungang Circulation C
-				Seoul    152-721
-				KR
-
-00-08-CA   (hex)		TwinHan Technology Co.,Ltd
-0008CA     (base 16)		TwinHan Technology Co.,Ltd
-				13F-6,No 79,Sec 1,Hsin Tai Wu RD.,Hsi-Ch
-				Taipei Hsien    221
-				TW
-
-00-08-B6   (hex)		RouteFree, Inc.
-0008B6     (base 16)		RouteFree, Inc.
-				3400 Hillview Ave., Building 5
-				Palo Alto  CA  94304
-				US
-
-00-08-D8   (hex)		Dowkey Microwave
-0008D8     (base 16)		Dowkey Microwave
-				4822 McGrath Street
-				Ventura  Ca  93003
-				US
-
-00-08-DF   (hex)		Alistel Inc.
-0008DF     (base 16)		Alistel Inc.
-				Midori Bldg. 2F
-				Yokohama  Kanagawa  222-0001
-				JP
-
-00-08-DB   (hex)		Corrigent Systems
-0008DB     (base 16)		Corrigent Systems
-				126 Yigal Alon
-				Tel Aviv    67443
-				IL
-
-00-08-7C   (hex)		Cisco Systems, Inc
-00087C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-79   (hex)		CEM Corporation
-000879     (base 16)		CEM Corporation
-				P.O. Box 200
-				Matthews  NC  28106
-				US
-
-00-08-7D   (hex)		Cisco Systems, Inc
-00087D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-75   (hex)		Acorp Electronics Corp.
-000875     (base 16)		Acorp Electronics Corp.
-				8F, No.111-6,Shing Teh Rd,
-				San Chung  Taipei Hsien  241
-				TW
-
-00-08-16   (hex)		Bluelon ApS
-000816     (base 16)		Bluelon ApS
-				Nattergalevej 6
-				    
-				DK
-
-00-08-11   (hex)		VOIX Corporation
-000811     (base 16)		VOIX Corporation
-				1991-3 4th Floor Top's Venture Tower
-				Seoul    138-090
-				KR
-
-00-08-06   (hex)		Raonet Systems, Inc.
-000806     (base 16)		Raonet Systems, Inc.
-				West Wing 14F, IT Venture Tower 78
-				Seoul    138-803
-				KR
-
-00-08-6F   (hex)		Resources Computer Network Ltd.
-00086F     (base 16)		Resources Computer Network Ltd.
-				Rm 324, Tech Centre, 72 Tat Chee Ave.,
-				    
-				HK
-
-00-08-67   (hex)		Uptime Devices
-000867     (base 16)		Uptime Devices
-				11724 Dunfries Lane
-				Austin  Texas  78754
-				US
-
-00-07-F8   (hex)		ITDevices, Inc.
-0007F8     (base 16)		ITDevices, Inc.
-				606 110th Ave. NE
-				Bellevue  WA  98004
-				US
-
-00-07-F3   (hex)		Thinkengine Networks
-0007F3     (base 16)		Thinkengine Networks
-				100 Nickerson Road
-				Marlborough  MA  01752
-				US
-
-00-08-1C   (hex)		@pos.com
-00081C     (base 16)		@pos.com
-				3051 North First Street
-				San Jose  CA  95134
-				US
-
-00-08-1E   (hex)		Repeatit AB
-00081E     (base 16)		Repeatit AB
-				Farogatan 7
-				    
-				SE
-
-00-08-56   (hex)		Gamatronic Electronic Industries Ltd.
-000856     (base 16)		Gamatronic Electronic Industries Ltd.
-				Hartum Street 14
-				    
-				IL
-
-00-08-53   (hex)		Schleicher GmbH & Co. Relaiswerke KG
-000853     (base 16)		Schleicher GmbH & Co. Relaiswerke KG
-				Pichelswerderstrasse 3-5
-				    
-				DE
-
-00-08-26   (hex)		Colorado Med Tech
-000826     (base 16)		Colorado Med Tech
-				6175 Longbow Dr.
-				Boulder  CO  80301
-				US
-
-00-08-5E   (hex)		PCO AG
-00085E     (base 16)		PCO AG
-				Donaupark 11
-				    
-				DE
-
-00-07-9A   (hex)		Verint Systems Inc
-00079A     (base 16)		Verint Systems Inc
-				1800 Berlier, Suite 440
-				Laval,   Quebec  H7L 4S4
-				CA
-
-00-07-74   (hex)		GuangZhou Thinker Technology Co. Ltd.
-000774     (base 16)		GuangZhou Thinker Technology Co. Ltd.
-				109 Zhongshan Ave., Tianhe District
-				    510630
-				CN
-
-00-07-98   (hex)		Selea SRL
-000798     (base 16)		Selea SRL
-				Via A. Moro No. 69
-				    
-				IT
-
-00-07-91   (hex)		International Data Communications, Inc.
-000791     (base 16)		International Data Communications, Inc.
-				47873 Fremont Blvd.
-				Fremont  CA  04538
-				US
-
-00-07-EE   (hex)		telco Informationssysteme GmbH
-0007EE     (base 16)		telco Informationssysteme GmbH
-				Schulstrasse 38
-				    
-				DE
-
-00-07-E2   (hex)		Bitworks, Inc.
-0007E2     (base 16)		Bitworks, Inc.
-				#1 Bitworks Way
-				Prairie Grove  AR  72753
-				US
-
-00-07-E6   (hex)		edgeflow Canada Inc.
-0007E6     (base 16)		edgeflow Canada Inc.
-				329 March Road
-				    K2K 2E1
-				CA
-
-00-07-E5   (hex)		Coup Corporation
-0007E5     (base 16)		Coup Corporation
-				1-24-4 Marusen 2nd Bld. 4F,
-				Tokyo    
-				JP
-
-00-07-DE   (hex)		eCopilt AB
-0007DE     (base 16)		eCopilt AB
-				Veddestavagen 24
-				    
-				SE
-
-00-07-C8   (hex)		Brain21, Inc.
-0007C8     (base 16)		Brain21, Inc.
-				19F Mesa B/D, 204 Hoihyun-Dong
-				Seoul    100-051
-				KR
-
-00-07-C5   (hex)		Gcom, Inc.
-0007C5     (base 16)		Gcom, Inc.
-				1800 Woodfield Dr.
-				Savoy  IL  61874
-				US
-
-00-07-C1   (hex)		Overture Networks, Inc.
-0007C1     (base 16)		Overture Networks, Inc.
-				637 Davis Drive
-				Morrisville  NC  227560
-				US
-
-00-07-A7   (hex)		A-Z Inc.
-0007A7     (base 16)		A-Z Inc.
-				5-5-17 Kamikoushien
-				    
-				JP
-
-00-07-A6   (hex)		Leviton Manufacturing Co., Inc.
-0007A6     (base 16)		Leviton Manufacturing Co., Inc.
-				4330 Michoud Blvd
-				New Orleans  LA  70129
-				US
-
-00-07-A3   (hex)		Ositis Software, Inc.
-0007A3     (base 16)		Ositis Software, Inc.
-				6120 Stoneridge Mall Road
-				Pleasanton  CA  94588
-				US
-
-00-07-C2   (hex)		Netsys Telecom
-0007C2     (base 16)		Netsys Telecom
-				4F, KyungNam B/D, 830-48, YeokSam-Dong
-				Seoul    135-080
-				KR
-
-00-07-8F   (hex)		Emkay Innovative Products
-00078F     (base 16)		Emkay Innovative Products
-				53, Pao Hsing Rd., Hsintien City
-				Taipei    
-				TW
-
-00-07-82   (hex)		Oracle Corporation 
-000782     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-00-07-AE   (hex)		Britestream Networks, Inc.
-0007AE     (base 16)		Britestream Networks, Inc.
-				12401 Research Blvd.
-				Austin  TX  78759
-				US
-
-00-07-B1   (hex)		Equator Technologies
-0007B1     (base 16)		Equator Technologies
-				1300 White Oaks Rd.
-				Campbell  CA  95008
-				US
-
-00-05-F9   (hex)		TOA Corporation
-0005F9     (base 16)		TOA Corporation
-				2-1 Takamatsu-cho,
-				Hyogo    665-0043
-				JP
-
-00-07-CA   (hex)		Creatix Polymedia Ges Fur Kommunikaitonssysteme
-0007CA     (base 16)		Creatix Polymedia Ges Fur Kommunikaitonssysteme
-				Heinrich-Barth-Straße 3
-				    
-				DE
-
-00-07-DF   (hex)		Vbrick Systems Inc.
-0007DF     (base 16)		Vbrick Systems Inc.
-				12 Beaumont Road
-				Wallingford  CT  06492
-				US
-
-00-07-44   (hex)		Unico, Inc.
-000744     (base 16)		Unico, Inc.
-				3725 Nicholson Rd.
-				Franksville  WI  53126
-				US
-
-00-07-49   (hex)		CENiX Inc.
-000749     (base 16)		CENiX Inc.
-				5141 California Avenue
-				Irvine  CA  92612
-				US
-
-00-07-3D   (hex)		Nanjing Postel Telecommunications Co., Ltd.
-00073D     (base 16)		Nanjing Postel Telecommunications Co., Ltd.
-				No. 187, ShengZhou Road,
-				    210004
-				CN
-
-00-07-39   (hex)		Scotty Group Austria Gmbh
-000739     (base 16)		Scotty Group Austria Gmbh
-				Teslastrasse 4
-				8074 Grambach    8074
-				AT
-
-00-07-4E   (hex)		IPFRONT Inc
-00074E     (base 16)		IPFRONT Inc
-				4F ALT Bldg.,
-				  Tokyo  101-0021
-				JP
-
-00-07-52   (hex)		Rhythm Watch Co., Ltd.
-000752     (base 16)		Rhythm Watch Co., Ltd.
-				321 Shinshukushinden, Showa-Machi,
-				    344-0196
-				JP
-
-00-07-4F   (hex)		Cisco Systems, Inc
-00074F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-43   (hex)		Chelsio Communications
-000743     (base 16)		Chelsio Communications
-				170 S. Whismon Rd.
-				Mountain View  CA  94041-1512
-				US
-
-00-07-47   (hex)		Mecalc
-000747     (base 16)		Mecalc
-				PO Box 7958
-				    
-				ZA
-
-00-07-79   (hex)		Sungil Telecom Co., Ltd.
-000779     (base 16)		Sungil Telecom Co., Ltd.
-				#321, Gongdan-Dong,
-				    730-030
-				KR
-
-00-07-7E   (hex)		Elrest GmbH
-00077E     (base 16)		Elrest GmbH
-				Leibnizstraße 10
-				    
-				DE
-
-00-07-78   (hex)		GERSTEL GmbH & Co. KG
-000778     (base 16)		GERSTEL GmbH & Co. KG
-				Eberhard-Gerstel-Platz 1
-				Mülheim an der Ruhr    
-				DE
-
-00-07-6D   (hex)		Flexlight Networks
-00076D     (base 16)		Flexlight Networks
-				15 Atir Yeda St.
-				    
-				IL
-
-00-07-30   (hex)		Hutchison OPTEL Telecom Technology Co., Ltd.
-000730     (base 16)		Hutchison OPTEL Telecom Technology Co., Ltd.
-				No. 28 Xinwai Street
-				Beijing    
-				CN
-
-00-07-22   (hex)		The Nielsen Company
-000722     (base 16)		The Nielsen Company
-				501 Brooker Creek Blvd.
-				Oldsmar  FL  34677
-				US
-
-00-07-60   (hex)		TOMIS Information & Telecom Corp.
-000760     (base 16)		TOMIS Information & Telecom Corp.
-				Youngdeungpo telephone office - extensio
-				Seoul    
-				KR
-
-00-07-35   (hex)		Flarion Technologies, Inc.
-000735     (base 16)		Flarion Technologies, Inc.
-				135 Route 202/206 South
-				Bedminster  NJ  07921
-				US
-
-00-07-5E   (hex)		Ametek Power Instruments
-00075E     (base 16)		Ametek Power Instruments
-				4050 NW 121 Avenue
-				Coral Springs  FL  33065
-				US
-
-00-07-1F   (hex)		European Systems Integration
-00071F     (base 16)		European Systems Integration
-				455 Promenade Des Anglas
-				    
-				FR
-
-00-07-21   (hex)		Formac Elektronik GmbH
-000721     (base 16)		Formac Elektronik GmbH
-				Dofstraße 33
-				    
-				DE
-
-00-07-86   (hex)		Wireless Networks Inc.
-000786     (base 16)		Wireless Networks Inc.
-				#300, 3016 Fifth Ave. NE
-				    T2A 6K4
-				CA
-
-00-06-BC   (hex)		Macrolink, Inc.
-0006BC     (base 16)		Macrolink, Inc.
-				1500 N Kellogg Dr.
-				Anaheim  CA  92807
-				US
-
-00-06-C2   (hex)		Smartmatic Corporation
-0006C2     (base 16)		Smartmatic Corporation
-				6400 Congress Ave., Suite 1300
-				Boca Raton  FL  33487
-				US
-
-00-06-54   (hex)		Winpresa Building Automation Technologies GmbH
-000654     (base 16)		Winpresa Building Automation Technologies GmbH
-				Vivenotgasse 53/2
-				    
-				AT
-
-00-06-B4   (hex)		Vorne Industries, Inc.
-0006B4     (base 16)		Vorne Industries, Inc.
-				1445 Industrial Dr.
-				Itasca  IL  60143-1849
-				US
-
-00-06-AE   (hex)		Himachal Futuristic Communications Ltd
-0006AE     (base 16)		Himachal Futuristic Communications Ltd
-				8, Commercial Complex
-				New Dehli    110048
-				IN
-
-00-06-E5   (hex)		Fujian Newland Computer Ltd. Co.
-0006E5     (base 16)		Fujian Newland Computer Ltd. Co.
-				141F Sunshine Holiday Hotel
-				Fuzhou Fujian    350005
-				CN
-
-00-06-DE   (hex)		Flash Technology
-0006DE     (base 16)		Flash Technology
-				P.O. Box 681509
-				Franklin  TN  37068
-				US
-
-00-06-DF   (hex)		AIDONIC Corporation
-0006DF     (base 16)		AIDONIC Corporation
-				2-7-10 Otsuka, Bunkyo-ku,
-				  Tokyo,  112-0012
-				JP
-
-00-06-DD   (hex)		AT & T Laboratories - Cambridge Ltd
-0006DD     (base 16)		AT & T Laboratories - Cambridge Ltd
-				24a Trumpington Street
-				  ENGLAND  
-				GB
-
-00-06-F0   (hex)		Digeo, Inc.
-0006F0     (base 16)		Digeo, Inc.
-				8815 122nd Ave., NE
-				Kirkland  WA  98033
-				US
-
-00-07-00   (hex)		Zettamedia Korea
-000700     (base 16)		Zettamedia Korea
-				Suite 1008, Kumkang Venturetel, 1108
-				Kyounggido,    
-				KR
-
-00-06-C5   (hex)		INNOVI Technologies Limited
-0006C5     (base 16)		INNOVI Technologies Limited
-				31st Floor, China Online Centre
-				  Wanchai  
-				HK
-
-00-06-C6   (hex)		lesswire AG
-0006C6     (base 16)		lesswire AG
-				Im Technologiepark 25
-				    
-				DE
-
-00-06-B7   (hex)		TELEM GmbH
-0006B7     (base 16)		TELEM GmbH
-				Lise-Meitner-Allee 31
-				    
-				DE
-
-00-06-EF   (hex)		Maxxan Systems, Inc.
-0006EF     (base 16)		Maxxan Systems, Inc.
-				107 Bonaventura Drive
-				San Jose  CA  95134
-				US
-
-00-06-E9   (hex)		Intime Corp.
-0006E9     (base 16)		Intime Corp.
-				324-4, Yangjae-dong, 2F
-				    
-				KR
-
-00-06-EA   (hex)		ELZET80 Mikrocomputer GmbH&Co. KG
-0006EA     (base 16)		ELZET80 Mikrocomputer GmbH&Co. KG
-				Theaterplatz 9
-				    
-				DE
-
-00-07-08   (hex)		Bitrage Inc.
-000708     (base 16)		Bitrage Inc.
-				100 Southpark Blvd.
-				Saint Augustine  FL  32086
-				US
-
-00-07-12   (hex)		JAL Information Technology
-000712     (base 16)		JAL Information Technology
-				Network Solution Dep. JAL-Tamachi Bldg.
-				Tokyo    
-				JP
-
-00-07-13   (hex)		IP One, Inc.
-000713     (base 16)		IP One, Inc.
-				Sammi Bldg., 1004
-				Seoul,    135-083
-				KR
-
-00-07-07   (hex)		Interalia Inc.
-000707     (base 16)		Interalia Inc.
-				4110-79th Street N.W.
-				    T3B 5C2
-				CA
-
-00-06-F2   (hex)		Platys Communications
-0006F2     (base 16)		Platys Communications
-				3150A Coronado Dr.
-				Santa Clara  CA  95054
-				US
-
-00-06-FA   (hex)		IP SQUARE Co, Ltd.
-0006FA     (base 16)		IP SQUARE Co, Ltd.
-				1-9-11, Hakataekihigashi,
-				Fukuoka    812-0013
-				JP
-
-00-07-03   (hex)		CSEE Transport
-000703     (base 16)		CSEE Transport
-				4, avenue du CANADA
-				    
-				FR
-
-00-07-06   (hex)		Sanritz Corporation
-000706     (base 16)		Sanritz Corporation
-				1-30-13, Narimasu,
-				    175-0094
-				JP
-
-00-06-D1   (hex)		Tahoe Networks, Inc.
-0006D1     (base 16)		Tahoe Networks, Inc.
-				3052 Orchard Drive
-				San Jose  CA  95134
-				US
-
-00-06-D4   (hex)		Interactive Objects, Inc.
-0006D4     (base 16)		Interactive Objects, Inc.
-				12600 SE 38th St.
-				Bellevue  WA  98006
-				US
-
-00-06-CA   (hex)		American Computer & Digital Components, Inc. (ACDC)
-0006CA     (base 16)		American Computer & Digital Components, Inc. (ACDC)
-				440 Cloverleaf Drive
-				Baldwin Park  CA  91706
-				US
-
-00-06-CE   (hex)		DATENO
-0006CE     (base 16)		DATENO
-				Rue Amiral Berenger
-				    
-				FR
-
-00-06-8E   (hex)		HID Corporation
-00068E     (base 16)		HID Corporation
-				9292 Jeronimo Road
-				Irvine  CA  92618-1905
-				US
-
-00-06-8A   (hex)		NeuronNet Co. Ltd. R&D Center
-00068A     (base 16)		NeuronNet Co. Ltd. R&D Center
-				735-34 Dasung Bldg., Yuksam-dong,
-				    
-				KR
-
-00-06-85   (hex)		NetNearU Corporation
-000685     (base 16)		NetNearU Corporation
-				2908 Finfeather Road
-				Bryan  TX  77801
-				US
-
-00-06-50   (hex)		Tiburon Networks, Inc.
-000650     (base 16)		Tiburon Networks, Inc.
-				200 Minuteman Rd.
-				Andover  MA  01810
-				US
-
-00-06-5E   (hex)		Photuris, Inc.
-00065E     (base 16)		Photuris, Inc.
-				20 Corporate Place South
-				Piscataway  NJ  08854
-				US
-
-00-06-7F   (hex)		Digeo, Inc.
-00067F     (base 16)		Digeo, Inc.
-				8815 122nd Avenue NE
-				Kirkland  WA  98033
-				US
-
-00-06-83   (hex)		Bravara Communications, Inc.
-000683     (base 16)		Bravara Communications, Inc.
-				2650 East Bayshore Road
-				Palo Alto  CA  94303
-				US
-
-00-06-55   (hex)		Yipee, Inc.
-000655     (base 16)		Yipee, Inc.
-				555 International Drive
-				Williamsville  NY  14221
-				US
-
-00-06-76   (hex)		Novra Technologies Inc.
-000676     (base 16)		Novra Technologies Inc.
-				900-330 St. Mary Avenue
-				Winnipeg  Manitoba  R3C 3Z5
-				CA
-
-00-06-64   (hex)		Fostex Corporation
-000664     (base 16)		Fostex Corporation
-				3-2-35, Musashino, Akishima,
-				Tokyo    196-0021
-				JP
-
-00-06-7A   (hex)		JMP Systems
-00067A     (base 16)		JMP Systems
-				3rd Fl. Shinwha Bldg.,
-				Seocho-ku  Seoul,  
-				KR
-
-00-06-73   (hex)		TKH Security Solutions USA
-000673     (base 16)		TKH Security Solutions USA
-				12920 Cloverleaf Center Drive
-				Germantown  MD  20874
-				US
-
-00-06-9B   (hex)		AVT Audio Video Technologies GmbH
-00069B     (base 16)		AVT Audio Video Technologies GmbH
-				Rathsbergstraße 17
-				    
-				DE
-
-00-06-93   (hex)		Flexus Computer Technology, Inc.
-000693     (base 16)		Flexus Computer Technology, Inc.
-				8F-2, No.5, Alley22, Lane 513,
-				Taipei 114    
-				TW
-
-00-06-5D   (hex)		Heidelberg Web Systems
-00065D     (base 16)		Heidelberg Web Systems
-				121 Technology Dr.
-				Durham  NH  03824
-				US
-
-00-06-B0   (hex)		Comtech EF Data Corp.
-0006B0     (base 16)		Comtech EF Data Corp.
-				2114 W. 7th St.
-				Tempe  AZ  85281
-				US
-
-00-06-96   (hex)		Advent Networks
-000696     (base 16)		Advent Networks
-				9600 Great Hills Tr.
-				Austin  TX  78759
-				US
-
-00-05-D7   (hex)		Vista Imaging, Inc.
-0005D7     (base 16)		Vista Imaging, Inc.
-				521 Taylor Way
-				San Carlos  CA  94070
-				US
-
-00-05-DB   (hex)		PSI Nentec GmbH
-0005DB     (base 16)		PSI Nentec GmbH
-				Greschbachstraße12
-				Karlsruhe    76229
-				DE
-
-00-05-DD   (hex)		Cisco Systems, Inc
-0005DD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-06-28   (hex)		Cisco Systems, Inc
-000628     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-06-1D   (hex)		MIP Telecom, Inc.
-00061D     (base 16)		MIP Telecom, Inc.
-				3rd Floor, Sangil BLDG,
-				Seoul    151-069
-				KR
-
-00-06-19   (hex)		Connection Technology Systems
-000619     (base 16)		Connection Technology Systems
-				18F-6, No. 79, Sec. 1,
-				Hsinchih  Taipei,  
-				TW
-
-00-06-40   (hex)		White Rock Networks
-000640     (base 16)		White Rock Networks
-				Suite #900
-				Dallas  TX  75252
-				US
-
-00-06-44   (hex)		NextGen Business Solutions, Inc
-000644     (base 16)		NextGen Business Solutions, Inc
-				KKS Higashi-Sapporo Bldg.3-5-3-24, Higashi-Sapporo
-				Shiroishi-ku, Sapporo-city  Hokkaido  003-0003
-				JP
-
-00-06-45   (hex)		Meisei Electric Co. Ltd.
-000645     (base 16)		Meisei Electric Co. Ltd.
-				249-1, Moriya-kou, Moriya
-				    302-0192
-				JP
-
-A0-6A-00   (hex)		Verilink Corporation
-A06A00     (base 16)		Verilink Corporation
-				127 Jetplex Circle
-				Madison  AL  35758
-				US
-
-00-05-F8   (hex)		Real Time Access, Inc.
-0005F8     (base 16)		Real Time Access, Inc.
-				455 N. Canyons Pkwy.
-				Livermore  CA  94550
-				US
-
-00-05-EB   (hex)		Blue Ridge Networks, Inc.
-0005EB     (base 16)		Blue Ridge Networks, Inc.
-				14120 Parke Long Court
-				Chantilly  VA  20151
-				US
-
-00-05-E8   (hex)		TurboWave, Inc.
-0005E8     (base 16)		TurboWave, Inc.
-				555 South State
-				Orem  UT  84058
-				US
-
-00-05-F6   (hex)		Young Chang Co. Ltd.
-0005F6     (base 16)		Young Chang Co. Ltd.
-				1432 Main Street
-				Waltham  MA  02451
-				US
-
-00-05-FC   (hex)		Schenck Pegasus Corp.
-0005FC     (base 16)		Schenck Pegasus Corp.
-				2890 John R Road
-				Troy  MI  48083
-				US
-
-00-06-3A   (hex)		Dura Micro, Inc.
-00063A     (base 16)		Dura Micro, Inc.
-				13580 Fifth Street
-				Chino  CA  91710
-				US
-
-00-06-32   (hex)		Mesco Engineering GmbH
-000632     (base 16)		Mesco Engineering GmbH
-				Wiesentalstraße 74
-				    
-				DE
-
-00-06-34   (hex)		GTE Airfone Inc.
-000634     (base 16)		GTE Airfone Inc.
-				2809 Butterfield
-				Oakbrook  IL  60522
-				US
-
-00-06-0C   (hex)		Melco Industries, Inc.
-00060C     (base 16)		Melco Industries, Inc.
-				1575 W. 124th Ave.
-				Denver  CO  80234
-				US
-
-00-06-0E   (hex)		IGYS Systems, Inc.
-00060E     (base 16)		IGYS Systems, Inc.
-				7373 Lincoln Way
-				Garden Grove  CA  92841
-				US
-
-00-06-14   (hex)		Prism Holdings
-000614     (base 16)		Prism Holdings
-				P.O. Box 901,
-				Gauteng    
-				ZA
-
-00-06-08   (hex)		At-Sky SAS
-000608     (base 16)		At-Sky SAS
-				ZI Athelia 3, Voi Atlas
-				    
-				FR
-
-00-05-C3   (hex)		Pacific Instruments, Inc.
-0005C3     (base 16)		Pacific Instruments, Inc.
-				4080 Pike Lane
-				Concord  CA  94520
-				US
-
-00-05-B9   (hex)		Airvana, Inc.
-0005B9     (base 16)		Airvana, Inc.
-				25 Industrial Ave.
-				Chlemsford  MA  01824
-				US
-
-00-05-BC   (hex)		Resource Data Management Ltd
-0005BC     (base 16)		Resource Data Management Ltd
-				80 Johnstone Avenue,
-				Scotland    G52 4NZ
-				GB
-
-00-05-BE   (hex)		Kongsberg Seatex AS
-0005BE     (base 16)		Kongsberg Seatex AS
-				Pirsenteret
-				    
-				NO
-
-00-05-BD   (hex)		ROAX BV
-0005BD     (base 16)		ROAX BV
-				Sterrenbergweg 29
-				    
-				NL
-
-00-05-C1   (hex)		A-Kyung Motion, Inc.
-0005C1     (base 16)		A-Kyung Motion, Inc.
-				54-10, Munjung-Dong
-				Seoul    
-				KR
-
-00-05-B4   (hex)		Aceex Corporation
-0005B4     (base 16)		Aceex Corporation
-				2F, No. 2, Alley 1, Sze-Wei Lane
-				    23138
-				TW
-
-00-05-98   (hex)		CRONOS S.r.l.
-000598     (base 16)		CRONOS S.r.l.
-				Via cavour 58/A
-				    
-				IT
-
-00-05-B7   (hex)		Arbor Technology Corp.
-0005B7     (base 16)		Arbor Technology Corp.
-				5F, No. 738, Zhong Zheng Rd.,
-				    
-				TW
-
-00-05-9B   (hex)		Cisco Systems, Inc
-00059B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-7E   (hex)		Eckelmann Steuerungstechnik GmbH
-00057E     (base 16)		Eckelmann Steuerungstechnik GmbH
-				Berliner Strasse 161
-				    
-				DE
-
-00-05-80   (hex)		FibroLAN Ltd.
-000580     (base 16)		FibroLAN Ltd.
-				2 Hacarmel st., POB 544
-				Yokneam Illit    20692
-				IL
-
-00-05-82   (hex)		ClearCube Technology
-000582     (base 16)		ClearCube Technology
-				8834 Capital of Texas Hwy,
-				Austin  TX  78759
-				US
-
-00-05-D9   (hex)		Techno Valley, Inc.
-0005D9     (base 16)		Techno Valley, Inc.
-				ASIC Venture Town 5F,
-				Seoul    135-072
-				KR
-
-00-05-DC   (hex)		Cisco Systems, Inc
-0005DC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-D0   (hex)		Solinet Systems
-0005D0     (base 16)		Solinet Systems
-				1200-180 Elgin St.
-				    K2P 2K3
-				CA
-
-00-05-9F   (hex)		Yotta Networks, Inc.
-00059F     (base 16)		Yotta Networks, Inc.
-				2201 Avenue K
-				Plano  TX  75074
-				US
-
-00-05-87   (hex)		Locus, Incorporated
-000587     (base 16)		Locus, Incorporated
-				5540 Research Park Drive
-				Madison  WI  53711
-				US
-
-00-05-90   (hex)		Swissvoice Ltd.
-000590     (base 16)		Swissvoice Ltd.
-				Ziegelmattstrasse 1
-				    
-				CH
-
-00-05-95   (hex)		Alesis Corporation
-000595     (base 16)		Alesis Corporation
-				1633 26th Street
-				Santa Monica  CA  90404
-				US
-
-00-05-78   (hex)		Private
-000578     (base 16)		Private
-
-00-05-72   (hex)		Deonet Co., Ltd.
-000572     (base 16)		Deonet Co., Ltd.
-				#127-5 Jinyoung B/D 3th F,
-				Seoul    
-				KR
-
-00-05-76   (hex)		NSM Technology Ltd.
-000576     (base 16)		NSM Technology Ltd.
-				22 Floor, Times Tower
-				Koloon    
-				HK
-
-00-05-6A   (hex)		Heuft Systemtechnik GmbH
-00056A     (base 16)		Heuft Systemtechnik GmbH
-				Brohltalstr 31-33
-				Deutschland    
-				DE
-
-00-05-68   (hex)		Piltofish Networks AB
-000568     (base 16)		Piltofish Networks AB
-				Stora Badhusgatan 18-20
-				    
-				SE
-
-00-05-B6   (hex)		INSYS Microelectronics GmbH
-0005B6     (base 16)		INSYS Microelectronics GmbH
-				Hermann-Köhl-Straße 22
-				    
-				DE
-
-00-05-55   (hex)		Japan Cash Machine Co., Ltd.
-000555     (base 16)		Japan Cash Machine Co., Ltd.
-				No. 3-15, 2-chome, Nishiwaki,
-				    547-0035
-				JP
-
-00-05-52   (hex)		Xycotec Computer GmbH
-000552     (base 16)		Xycotec Computer GmbH
-				Karl-Heinz-Beckurts-Str. 4
-				    
-				DE
-
-00-05-4A   (hex)		Ario Data Networks, Inc.
-00054A     (base 16)		Ario Data Networks, Inc.
-				2890 Zanker Road, Suite 203
-				San Jose  CA  95134
-				US
-
-00-05-48   (hex)		Disco Corporation
-000548     (base 16)		Disco Corporation
-				13-11 Omori-Kita 2-chome
-				Ota-ku  Tokyo  143-8580
-				JP
-
-00-04-F7   (hex)		Omega Band, Inc.
-0004F7     (base 16)		Omega Band, Inc.
-				9020-I Capital of Texas Hghwy N
-				Austin  TX  78759
-				US
-
-00-04-EE   (hex)		Lincoln Electric Company
-0004EE     (base 16)		Lincoln Electric Company
-				22801 St. Clair Avenue
-				Cleveland  OH  44117-1199
-				US
-
-00-04-F0   (hex)		International Computers, Ltd
-0004F0     (base 16)		International Computers, Ltd
-				1 Wenlock Way
-				    UK
-				GB
-
-00-05-27   (hex)		SJ Tek Co. Ltd
-000527     (base 16)		SJ Tek Co. Ltd
-				Ho gae Dong 976-5, Dong An Ku,
-				    
-				KR
-
-00-05-29   (hex)		Shanghai Broadan Communication Technology Co., Ltd
-000529     (base 16)		Shanghai Broadan Communication Technology Co., Ltd
-				15F, Suntime International Mansion
-				    200122
-				CN
-
-00-05-2C   (hex)		Supreme Magic Corporation
-00052C     (base 16)		Supreme Magic Corporation
-				Sun Towers Center Bldg., 13F
-				    154-0024
-				JP
-
-00-05-3E   (hex)		KID Systeme GmbH
-00053E     (base 16)		KID Systeme GmbH
-				Luneburger Schanze 30
-				    
-				DE
-
-00-05-3F   (hex)		VisionTek, Inc.
-00053F     (base 16)		VisionTek, Inc.
-				1175 Lakeside Dr.
-				Gurnee  IL  60031
-				US
-
-00-05-3D   (hex)		Agere Systems
-00053D     (base 16)		Agere Systems
-				1371 McCarthy Blvd.
-				Milpitas  CA  95035
-				US
-
-00-05-00   (hex)		Cisco Systems, Inc
-000500     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-19   (hex)		Siemens Building Technologies AG,
-000519     (base 16)		Siemens Building Technologies AG,
-				Cerberus Division
-				    
-				CH
-
-00-05-0D   (hex)		Midstream Technologies, Inc.
-00050D     (base 16)		Midstream Technologies, Inc.
-				777 108th Ave. NE
-				Bellevue  WA  98004-5140
-				US
-
-00-05-34   (hex)		Northstar Engineering Ltd.
-000534     (base 16)		Northstar Engineering Ltd.
-				P.O. Box 40
-				    
-				GB
-
-00-05-35   (hex)		Chip PC Ltd.
-000535     (base 16)		Chip PC Ltd.
-				20 A.L. Motzkin St.
-				Tirat Carmel    39100
-				IL
-
-00-05-07   (hex)		Fine Appliance Corp.
-000507     (base 16)		Fine Appliance Corp.
-				7Fl., No. 499,
-				    
-				TW
-
-00-04-FD   (hex)		Japan Control Engineering Co., Ltd.
-0004FD     (base 16)		Japan Control Engineering Co., Ltd.
-				1-5-1, Higashiamagawa, Takatsuki-shi
-				    
-				JP
-
-00-05-62   (hex)		Digital View Limited
-000562     (base 16)		Digital View Limited
-				2201 Nan Yang Plaza,
-				Kowloon    
-				HK
-
-00-04-E5   (hex)		Glonet Systems, Inc.
-0004E5     (base 16)		Glonet Systems, Inc.
-				11Fl., Jeil Bldg., 94-46, 7Ka
-				    
-				KR
-
-00-04-D2   (hex)		Adcon Telemetry GmbH
-0004D2     (base 16)		Adcon Telemetry GmbH
-				Inkustraße 24
-				    
-				AT
-
-00-04-D3   (hex)		Toyokeiki Co., Ltd.
-0004D3     (base 16)		Toyokeiki Co., Ltd.
-				Wada 3967-10, Matsumoto-City
-				    
-				JP
-
-00-04-AA   (hex)		Jetstream Communications
-0004AA     (base 16)		Jetstream Communications
-				5400 Hellyer Avenue
-				San Jose  CA  95138-1005
-				US
-
-00-04-A0   (hex)		Verity Instruments, Inc.
-0004A0     (base 16)		Verity Instruments, Inc.
-				2901 Eisenhower St.
-				Carrollton  TX  75007
-				US
-
-00-04-9E   (hex)		Wirelink Co., Ltd.
-00049E     (base 16)		Wirelink Co., Ltd.
-				11F, Geoseong B/D 541, Dowha-Dong,
-				    KOREA
-				KR
-
-00-04-9A   (hex)		Cisco Systems, Inc
-00049A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-79   (hex)		Radius Co., Ltd.
-000479     (base 16)		Radius Co., Ltd.
-				1-48-11, Itabashi
-				    
-				JP
-
-00-04-B0   (hex)		ELESIGN Co., Ltd.
-0004B0     (base 16)		ELESIGN Co., Ltd.
-				9Fl. TaeKyoung Bldg.,
-				  R.O.  KOREA
-				KR
-
-00-04-AB   (hex)		Mavenir Inc.
-0004AB     (base 16)		Mavenir Inc.
-				1700 International Parkway
-				Richardson  TX  75081
-				US
-
-00-04-A7   (hex)		FabiaTech Corporation
-0004A7     (base 16)		FabiaTech Corporation
-				4F-3, No. 18, Lane 609
-				Taipei  Hsien,  TAIWAN R.O.C
-				TW
-
-00-04-98   (hex)		Mahi Networks
-000498     (base 16)		Mahi Networks
-				1039 N. McDowell Blvd.
-				Petaluma  CA  94954
-				US
-
-00-04-97   (hex)		MacroSystem Digital Video AG
-000497     (base 16)		MacroSystem Digital Video AG
-				Schoellinger Feld 28
-				    
-				DE
-
-00-04-D5   (hex)		Hitachi Information & Communication Engineering, Ltd.
-0004D5     (base 16)		Hitachi Information & Communication Engineering, Ltd.
-				Queen's Tower B21F, 2-3-3, Minatomirai,
-				Nishi-ku,  Yokohama,  220-6121
-				JP
-
-00-04-CA   (hex)		FreeMs Corp.
-0004CA     (base 16)		FreeMs Corp.
-				Shinhan Bldg. 6F,
-				Seoul  150-736  KOREA
-				KR
-
-00-04-88   (hex)		Eurotherm Controls
-000488     (base 16)		Eurotherm Controls
-				741F Miller Drive
-				Lessburg  VA  20175
-				US
-
-00-04-85   (hex)		PicoLight
-000485     (base 16)		PicoLight
-				4665 Nautilus Court South
-				Boulder  CO  80301
-				US
-
-00-04-DA   (hex)		Relax Technology, Inc.
-0004DA     (base 16)		Relax Technology, Inc.
-				DBA/ Granite Digital
-				Union City  CA  94587
-				US
-
-00-04-C5   (hex)		ASE Technologies, USA
-0004C5     (base 16)		ASE Technologies, USA
-				6721 Baum Dr.
-				Knoxville  TN  37919
-				US
-
-00-04-36   (hex)		ELANsat Technologies, Inc.
-000436     (base 16)		ELANsat Technologies, Inc.
-				No. 11, Lane 19, Pateh Road,
-				Hsinchu  TAIWAN,  R.O.C.
-				TW
-
-00-04-32   (hex)		Voyetra Turtle Beach, Inc.
-000432     (base 16)		Voyetra Turtle Beach, Inc.
-				150 Clearbrook Road, Suite 162
-				Elmsford  NY  10523
-				US
-
-00-04-37   (hex)		Powin Information Technology, Inc.
-000437     (base 16)		Powin Information Technology, Inc.
-				8F, No. 70, Zhou-Z St.
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-04-0C   (hex)		Kanno Works, Ltd.
-00040C     (base 16)		Kanno Works, Ltd.
-				1-5-25 Kamitomino,
-				    
-				JP
-
-00-04-08   (hex)		Sanko Electronics Co., Ltd.
-000408     (base 16)		Sanko Electronics Co., Ltd.
-				3-802 ueda tenpaku-ku
-				  nagoya  
-				JP
-
-00-04-07   (hex)		Topcon Positioning Systems, Inc.
-000407     (base 16)		Topcon Positioning Systems, Inc.
-				5758 W. Las Positas Blvd.
-				Pleasanton  CA  94588
-				US
-
-00-04-09   (hex)		Cratos Networks
-000409     (base 16)		Cratos Networks
-				313 Littleton Road
-				Chelmsford  MA  01824
-				US
-
-00-04-55   (hex)		ANTARA.net
-000455     (base 16)		ANTARA.net
-				747 Camden Ave.
-				Campbell  CA  95008
-				US
-
-00-04-57   (hex)		Universal Access Technology, Inc.
-000457     (base 16)		Universal Access Technology, Inc.
-				2 Fl., No. 5, Alley 22,
-				Nei Hu  Taipei,  TAIWAN 114
-				TW
-
-00-04-4D   (hex)		Cisco Systems, Inc
-00044D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-54   (hex)		Quadriga UK
-000454     (base 16)		Quadriga UK
-				Baird House
-				    ENGLAND
-				GB
-
-00-04-48   (hex)		Polaroid Corporation
-000448     (base 16)		Polaroid Corporation
-				300 Baker Avenue
-				Concord  MA  01742
-				US
-
-00-04-47   (hex)		Acrowave Systems Co., Ltd.
-000447     (base 16)		Acrowave Systems Co., Ltd.
-				Maru B/D 86-6, Nonhyun-Dong
-				KOREA  zip:  135-818
-				KR
-
-00-04-3E   (hex)		Telencomm
-00043E     (base 16)		Telencomm
-				2551 Walsh Avenue
-				Santa Clara  CA  95051
-				US
-
-00-04-6D   (hex)		Cisco Systems, Inc
-00046D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-66   (hex)		ARMITEL Co.
-000466     (base 16)		ARMITEL Co.
-				F5, Doman Plaza 353-4,
-				Republic  of  KOREA
-				KR
-
-00-03-E2   (hex)		Comspace Corporation
-0003E2     (base 16)		Comspace Corporation
-				955 Freeport Pkwy
-				Coppell  TX  75019
-				US
-
-00-03-FF   (hex)		Microsoft Corporation
-0003FF     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  WA  98052
-				US
-
-00-04-14   (hex)		Umezawa Musen Denki Co., Ltd.
-000414     (base 16)		Umezawa Musen Denki Co., Ltd.
-				14-3, Minami 1, Nishi 8,
-				Hokkaido  JAPAN  060-0061
-				JP
-
-00-04-28   (hex)		Cisco Systems, Inc
-000428     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-86   (hex)		Ho Net, Inc.
-000386     (base 16)		Ho Net, Inc.
-				Venture Company Center
-				  KOREA  442-760
-				KR
-
-00-03-7D   (hex)		Stellcom
-00037D     (base 16)		Stellcom
-				10525 Vista Sorrento Parkway
-				San Diego  CA  92121
-				US
-
-00-03-83   (hex)		Metera Networks, Inc.
-000383     (base 16)		Metera Networks, Inc.
-				1202 Richardson Dr.
-				Richardson  TX  75080
-				US
-
-00-03-CC   (hex)		Momentum Computer, Inc.
-0003CC     (base 16)		Momentum Computer, Inc.
-				1815 Aston Avenue
-				Carlsbad  CA  92008-7310
-				US
-
-00-03-D7   (hex)		NextNet Wireless, Inc.
-0003D7     (base 16)		NextNet Wireless, Inc.
-				9555 James Ave. So.
-				Bloomington  MN  55431
-				US
-
-00-03-D3   (hex)		Internet Energy Systems, Inc.
-0003D3     (base 16)		Internet Energy Systems, Inc.
-				4218 Trumbo Ct.
-				Fairfax  VA  22033
-				US
-
-00-03-CD   (hex)		Clovertech, Inc.
-0003CD     (base 16)		Clovertech, Inc.
-				3-1-5 Naka-cho Musashino-shi
-				Tokyo  180-0006  
-				JP
-
-00-03-8B   (hex)		PLUS-ONE I&T, Inc.
-00038B     (base 16)		PLUS-ONE I&T, Inc.
-				7F, A-San Venture Tower,
-				    KOREA
-				KR
-
-00-03-8C   (hex)		Total Impact
-00038C     (base 16)		Total Impact
-				295 Willis Ave.
-				Camarillo  CA  93010
-				US
-
-00-03-EE   (hex)		MKNet Corporation
-0003EE     (base 16)		MKNet Corporation
-				711-B Charcot Ave.
-				San Jose  CA  95131
-				US
-
-00-03-EA   (hex)		Mega System Technologies, Inc.
-0003EA     (base 16)		Mega System Technologies, Inc.
-				2F, No. 41, Lane 76,
-				Taipei  Taipei  TAIWAN
-				TW
-
-00-03-E6   (hex)		Entone, Inc.
-0003E6     (base 16)		Entone, Inc.
-				2755 Campus Dr Ste 235
-				San Mateo  CA   94403
-				US
-
-00-03-A9   (hex)		AXCENT Media AG
-0003A9     (base 16)		AXCENT Media AG
-				Technologiepark 13
-				    
-				DE
-
-00-03-9F   (hex)		Cisco Systems, Inc
-00039F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-90   (hex)		Digital Video Communications, Inc.
-000390     (base 16)		Digital Video Communications, Inc.
-				500 W. Cummings Park
-				Woburn  MA  07801
-				US
-
-00-03-B5   (hex)		Entra Technology Co.
-0003B5     (base 16)		Entra Technology Co.
-				Fl. 3, No. 5, Alley 2,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-03-64   (hex)		Scenix Semiconductor, Inc.
-000364     (base 16)		Scenix Semiconductor, Inc.
-				1330 Charleston Rd.
-				Mountainview  CA  94043
-				US
-
-00-03-5E   (hex)		Metropolitan Area Networks, Inc.
-00035E     (base 16)		Metropolitan Area Networks, Inc.
-				1299 Pennsylvania Avenue, NW
-				Washington  DC  20004
-				US
-
-00-03-5C   (hex)		Saint Song Corp.
-00035C     (base 16)		Saint Song Corp.
-				4F, No. 12, Lane 94, Tsao Ti Wzi
-				    222
-				TW
-
-00-03-5D   (hex)		Bosung Hi-Net Co., Ltd.
-00035D     (base 16)		Bosung Hi-Net Co., Ltd.
-				Youngil B/O 2F,
-				    137-130
-				KR
-
-00-03-79   (hex)		Proscend Communications, Inc.
-000379     (base 16)		Proscend Communications, Inc.
-				2F, No.36, Industry E. Rd. IV,
-				Hsinchu    300
-				TW
-
-00-03-6F   (hex)		Telsey SPA
-00036F     (base 16)		Telsey SPA
-				Viale Dell Industria, 1
-				DiTreviso-    
-				IT
-
-00-03-72   (hex)		ULAN
-000372     (base 16)		ULAN
-				5F-3, No. 31-1, Lane 169,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-03-3A   (hex)		Silicon Wave, Inc.
-00033A     (base 16)		Silicon Wave, Inc.
-				6256 Greenwich Drive
-				San Diego  CA  92122
-				US
-
-00-03-32   (hex)		Cisco Systems, Inc
-000332     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-0E   (hex)		Core Communications Co., Ltd.
-00030E     (base 16)		Core Communications Co., Ltd.
-				3F Shopping Center Bd. of
-				Seoul (121-050)    (121-050)
-				KR
-
-00-03-12   (hex)		TRsystems GmbH
-000312     (base 16)		TRsystems GmbH
-				Eglishalde 16
-				 Trossingen  Baden-Wuerttemberg  D-78647
-				DE
-
-00-03-41   (hex)		Axon Digital Design
-000341     (base 16)		Axon Digital Design
-				Lange Wagenstraat 55
-				    
-				NL
-
-00-80-37   (hex)		Ericsson Group
-008037     (base 16)		Ericsson Group
-				Telefonaktiebolaget
-				    
-				SE
-
-00-03-3D   (hex)		ILSHin Lab
-00033D     (base 16)		ILSHin Lab
-				KCS B/D 228-13 Young Dap-Dong
-				Seoul    
-				KR
-
-00-03-66   (hex)		ASM Pacific Technology
-000366     (base 16)		ASM Pacific Technology
-				12/F Watson Centre
-				Kwai Chung    
-				HK
-
-00-03-62   (hex)		Vodtel Communications, Inc.
-000362     (base 16)		Vodtel Communications, Inc.
-				12F, No 166 Chien-Yi Road
-				    235
-				TW
-
-00-03-4D   (hex)		Chiaro Networks, Ltd.
-00034D     (base 16)		Chiaro Networks, Ltd.
-				P.O. Box 832427
-				Richardson  TX  75083-2427
-				US
-
-00-03-22   (hex)		IDIS Co., Ltd.
-000322     (base 16)		IDIS Co., Ltd.
-				7th Floor, 646-7 Yuksam-Dong,
-				    
-				KR
-
-00-03-1D   (hex)		Taiwan Commate Computer, Inc.
-00031D     (base 16)		Taiwan Commate Computer, Inc.
-				8F, No. 94, Sec 1,
-				    
-				TW
-
-00-03-26   (hex)		Iwasaki Information Systems Co., Ltd.
-000326     (base 16)		Iwasaki Information Systems Co., Ltd.
-				3361 Oshi
-				    
-				JP
-
-00-02-90   (hex)		Woorigisool, Inc.
-000290     (base 16)		Woorigisool, Inc.
-				Yoopoong Bldg.
-				Seoul  Seoul  KOREA
-				KR
-
-00-02-92   (hex)		Logic Innovations, Inc.
-000292     (base 16)		Logic Innovations, Inc.
-				6205 Lusk Blvd.
-				San Diego  CA  92121-2731
-				US
-
-00-02-86   (hex)		Occam Networks
-000286     (base 16)		Occam Networks
-				4183 State Street
-				Santa Barbara  CA  93110
-				US
-
-00-02-D2   (hex)		Workstation AG
-0002D2     (base 16)		Workstation AG
-				Schaffhauserstrasse 55
-				    
-				CH
-
-00-02-CD   (hex)		TeleDream, Inc.
-0002CD     (base 16)		TeleDream, Inc.
-				Shinhwa Bldg., 940-10 Daechi-Dong
-				    
-				KR
-
-00-02-D0   (hex)		Comdial Corporation
-0002D0     (base 16)		Comdial Corporation
-				1180 Seminole Trail
-				Charlottesville  VA  22901
-				US
-
-00-02-CC   (hex)		M.C.C.I
-0002CC     (base 16)		M.C.C.I
-				3520 Krums Corners Rd.
-				Ithaca  NY  14850
-				US
-
-00-02-B0   (hex)		Hokubu Communication & Industrial Co., Ltd.
-0002B0     (base 16)		Hokubu Communication & Industrial Co., Ltd.
-				Fushiogami-aza-oki 27-1
-				Fukushima    960-8514
-				JP
-
-00-02-AA   (hex)		PLcom Co., Ltd.
-0002AA     (base 16)		PLcom Co., Ltd.
-				Hosung B/D, #1083-1, Hogye-Dong
-				  South  Korea
-				KR
-
-00-02-B5   (hex)		Avnet, Inc.
-0002B5     (base 16)		Avnet, Inc.
-				2211 S. 47th Street
-				Phoenix  AZ  85034
-				US
-
-00-02-B4   (hex)		DAPHNE
-0002B4     (base 16)		DAPHNE
-				101 Chaussee De Binche
-				    
-				BE
-
-00-02-AC   (hex)		3PAR data
-0002AC     (base 16)		3PAR data
-				4209 Technology Drive
-				Fremont  CA  94538
-				US
-
-00-02-D9   (hex)		Reliable Controls
-0002D9     (base 16)		Reliable Controls
-				120 Hallowell Road
-				Victoria,   B.C.  V9A 7K2
-				CA
-
-00-02-EF   (hex)		CCC Network Systems Group Ltd.
-0002EF     (base 16)		CCC Network Systems Group Ltd.
-				13 Farnborough Business Centre
-				  ENGLAND  
-				GB
-
-00-02-E8   (hex)		E.D.&A.
-0002E8     (base 16)		E.D.&A.
-				Energielaan 16
-				    
-				BE
-
-00-02-F2   (hex)		eDevice, Inc.
-0002F2     (base 16)		eDevice, Inc.
-				420 Lexington Avenue
-				New York  NY  10170
-				US
-
-00-02-9D   (hex)		Merix Corp.
-00029D     (base 16)		Merix Corp.
-				Jin-Su Building, 49-16
-				Seoul  Seoul  KOREA
-				KR
-
-00-02-C5   (hex)		Evertz Microsystems Ltd.
-0002C5     (base 16)		Evertz Microsystems Ltd.
-				5292 John Lucas Drive
-				  Ontario  L7L 5Z9
-				CA
-
-00-02-4A   (hex)		Cisco Systems, Inc
-00024A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-49   (hex)		Aviv Infocom Co, Ltd.
-000249     (base 16)		Aviv Infocom Co, Ltd.
-				962-5, Kwanyang-Dong, Dongan-Gu,
-				  Korea  (ROK)
-				KR
-
-00-02-45   (hex)		Lampus Co, Ltd.
-000245     (base 16)		Lampus Co, Ltd.
-				6th Bldg., Samgong,
-				Korea  Korea  137-044
-				KR
-
-00-02-32   (hex)		Avision, Inc.
-000232     (base 16)		Avision, Inc.
-				No. 20, Creation Rd. 1,
-				Hsinchu  Taiwan,  R.O.C.
-				TW
-
-00-02-35   (hex)		Paragon Networks International
-000235     (base 16)		Paragon Networks International
-				61 Commerce Drive
-				Brookfield  CT  06804
-				US
-
-00-02-37   (hex)		Cosmo Research Corp.
-000237     (base 16)		Cosmo Research Corp.
-				Cosmo Bldg, 3-148-5
-				    
-				KW
-
-00-02-28   (hex)		Necsom, Ltd.
-000228     (base 16)		Necsom, Ltd.
-				Necsom Ltd. c/o Koirsto
-				    
-				FI
-
-00-02-46   (hex)		All-Win Tech Co., Ltd.
-000246     (base 16)		All-Win Tech Co., Ltd.
-				11F, No. 111-7, Hsing De Rd.,
-				Taipei Hsien  Taiwan,  R.O.C.
-				TW
-
-00-02-3A   (hex)		ZSK Stickmaschinen GmbH
-00023A     (base 16)		ZSK Stickmaschinen GmbH
-				Magdeburger Straße 38-40
-				    
-				DE
-
-00-02-7F   (hex)		ask-technologies.com
-00027F     (base 16)		ask-technologies.com
-				36 Wellington Business Park
-				    
-				GB
-
-00-02-7E   (hex)		Cisco Systems, Inc
-00027E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-10-95   (hex)		Thomson Inc.
-001095     (base 16)		Thomson Inc.
-				101 West 103rd Street
-				Indianapolis  IN  46290-1102
-				US
-
-00-02-5D   (hex)		Calix Networks
-00025D     (base 16)		Calix Networks
-				1035 North McDowell Blvd.
-				Petaluma  CA  94954
-				US
-
-00-02-7B   (hex)		Amplify Net, Inc.
-00027B     (base 16)		Amplify Net, Inc.
-				47381 Bayside Parkway
-				Fremont  CA  94538
-				US
-
-00-02-73   (hex)		Coriolis Networks
-000273     (base 16)		Coriolis Networks
-				330 Codmanhill Road
-				Boxborough  MA  01719
-				US
-
-00-02-57   (hex)		Microcom Corp.
-000257     (base 16)		Microcom Corp.
-				8333A Green Meadows Dr. N.
-				Westerville  OH  43081
-				US
-
-00-02-53   (hex)		Televideo, Inc.
-000253     (base 16)		Televideo, Inc.
-				2345 Harris Way
-				San Jose  CA  95131
-				US
-
-00-02-6F   (hex)		Senao International Co., Ltd.
-00026F     (base 16)		Senao International Co., Ltd.
-				2F, No. 531, Chung-Cheng Rd.,
-				    TAIWAN
-				TW
-
-00-02-30   (hex)		Intersoft Electronics
-000230     (base 16)		Intersoft Electronics
-				Lammerdries 27
-				    
-				BE
-
-00-02-1C   (hex)		Network Elements, Inc.
-00021C     (base 16)		Network Elements, Inc.
-				9782 SW Nimbus Avenue
-				Beaverton  OR  97008
-				US
-
-00-02-0C   (hex)		Metro-Optix
-00020C     (base 16)		Metro-Optix
-				2201 Avenue K
-				Plano  TX  75074
-				US
-
-00-02-16   (hex)		Cisco Systems, Inc
-000216     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-14   (hex)		DTVRO
-000214     (base 16)		DTVRO
-				813 Daegong Bldg.,
-				KOREA  KOREA  135-080
-				KR
-
-00-02-0F   (hex)		AATR
-00020F     (base 16)		AATR
-				306 Chemin des Miroirs
-				    
-				FR
-
-00-01-C3   (hex)		Acromag, Inc.
-0001C3     (base 16)		Acromag, Inc.
-				30765 S. Wixom Road
-				Wixom  MI  48393
-				US
-
-00-01-C2   (hex)		ARK Research Corp.
-0001C2     (base 16)		ARK Research Corp.
-				1198 Saratoga Ave. #11D
-				San Jose  CA  95129
-				US
-
-00-01-EA   (hex)		Cirilium Corp.
-0001EA     (base 16)		Cirilium Corp.
-				1615 S. 52nd Street
-				Tempe  AZ  85281
-				US
-
-00-01-E0   (hex)		Fast Systems, Inc.
-0001E0     (base 16)		Fast Systems, Inc.
-				87-9 Yang-Jae, Seo-Cho,
-				    KOREA
-				KR
-
-00-01-AC   (hex)		Sitara Networks, Inc.
-0001AC     (base 16)		Sitara Networks, Inc.
-				60 Hickory Drive
-				Waltham  MA  02451
-				US
-
-00-01-ED   (hex)		SETA Corp.
-0001ED     (base 16)		SETA Corp.
-				Ariake Frontier Bldg. B
-				  JAPAN  135-0063
-				JP
-
-00-01-F6   (hex)		Association of Musical Electronics Industry
-0001F6     (base 16)		Association of Musical Electronics Industry
-				Ito Bldg. 4th Floor 2-16-9 Misaki-cho,
-				    
-				JP
-
-00-01-CB   (hex)		EVR
-0001CB     (base 16)		EVR
-				12 Raul Wallenberg St.
-				  Tel Aviv  69719
-				IL
-
-00-01-D6   (hex)		manroland AG
-0001D6     (base 16)		manroland AG
-				Stadtbachstraße 1
-				    
-				DE
-
-00-01-AD   (hex)		Coach Master International  d.b.a. CMI Worldwide, Inc.
-0001AD     (base 16)		Coach Master International  d.b.a. CMI Worldwide, Inc.
-				600 Stewart Street
-				Seattle  WA  98101
-				US
-
-00-01-88   (hex)		LXCO Technologies ag
-000188     (base 16)		LXCO Technologies ag
-				Gimmerstraße 69
-				    
-				DE
-
-00-01-9B   (hex)		Kyoto Microcomputer Co., Ltd.
-00019B     (base 16)		Kyoto Microcomputer Co., Ltd.
-				2-44 nakayama oe nishikyo-ku
-				kyoto    
-				JP
-
-00-01-7F   (hex)		Experience Music Project
-00017F     (base 16)		Experience Music Project
-				110 -110th Avenue NE - Ste. #400
-				Bellevue  WA  98004
-				US
-
-00-01-5A   (hex)		Digital Video Broadcasting
-00015A     (base 16)		Digital Video Broadcasting
-				DVB, % European Broadcasting Union
-				    
-				CH
-
-00-01-2A   (hex)		Telematica Sistems Inteligente
-00012A     (base 16)		Telematica Sistems Inteligente
-				Rua Miguel Casagrande, 200
-				São Paulo    
-				BR
-
-00-01-66   (hex)		TC GROUP A/S
-000166     (base 16)		TC GROUP A/S
-				Sindalsvej 34
-				Risskov    DK-8240
-				DK
-
-00-01-76   (hex)		Orient Silver Enterprises
-000176     (base 16)		Orient Silver Enterprises
-				8740 White Oak Avenue
-				Rancho Cucamonga  CA  91730
-				US
-
-00-01-58   (hex)		Electro Industries/Gauge Tech
-000158     (base 16)		Electro Industries/Gauge Tech
-				1800 Shames Drive
-				Westbury  NY  11590
-				US
-
-00-01-2D   (hex)		Komodo Technology
-00012D     (base 16)		Komodo Technology
-				170 Knowles Drive
-				Los Gatos  CA  95032
-				US
-
-00-01-48   (hex)		X-traWeb Inc.
-000148     (base 16)		X-traWeb Inc.
-				6750 West 93rd Street - Ste. #210
-				Overland Park  KS  66212
-				US
-
-00-01-87   (hex)		I2SE GmbH
-000187     (base 16)		I2SE GmbH
-				Friedrich-Ebert-Str. 61
-				Leipzig    04109
-				DE
-
-00-01-80   (hex)		AOpen, Inc.
-000180     (base 16)		AOpen, Inc.
-				6F, 88, Sec.1, Hsin Tai
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-01-97   (hex)		Cisco Systems, Inc
-000197     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-01-9A   (hex)		LEUNIG GmbH
-00019A     (base 16)		LEUNIG GmbH
-				Wilhelm-Ostwald-Str. 17
-				    
-				DE
-
-00-01-59   (hex)		S1 Corporation
-000159     (base 16)		S1 Corporation
-				R&D Center, S1 Bldg.
-				  KOREA  135-010
-				KR
-
-00-01-71   (hex)		Allied Data Technologies
-000171     (base 16)		Allied Data Technologies
-				Pascalweg 1,
-				  THE  
-				NL
-
-00-30-AC   (hex)		Systeme Lauer GmbH & Co., Ltd.
-0030AC     (base 16)		Systeme Lauer GmbH & Co., Ltd.
-				Kelterstrasse 59
-				72669 Unterensingen    
-				DE
-
-00-30-FB   (hex)		AZS Technology AG
-0030FB     (base 16)		AZS Technology AG
-				Steinbeisstrasse 2-4
-				72510 Stetten A.K.M.    
-				DE
-
-00-30-AE   (hex)		Times N System, Inc.
-0030AE     (base 16)		Times N System, Inc.
-				1826 Kramer Lane - Ste.
-				Austin  TX  78758
-				US
-
-00-30-03   (hex)		Phasys Ltd.
-003003     (base 16)		Phasys Ltd.
-				#100-9404 41st Avenue
-				Edmonton  Alberta T6X 1R2  
-				CA
-
-00-30-E2   (hex)		GARNET SYSTEMS CO., LTD.
-0030E2     (base 16)		GARNET SYSTEMS CO., LTD.
-				Sungwon Bldg. 545-7
-				Seoul    
-				KR
-
-00-01-3A   (hex)		SHELCAD COMMUNICATIONS, LTD.
-00013A     (base 16)		SHELCAD COMMUNICATIONS, LTD.
-				P.O. Box 8513
-				    
-				IL
-
-00-01-40   (hex)		Sendtek Corporation
-000140     (base 16)		Sendtek Corporation
-				12F-3, 333, Sec.1
-				    TAIWAN
-				TW
-
-00-01-23   (hex)		Schneider Electric Japan Holdings Ltd.
-000123     (base 16)		Schneider Electric Japan Holdings Ltd.
-				Schneider Electric Osaka Building
-				4-4-9 Kitahama  Chuo-ku, Osaka  541-0041
-				JP
-
-00-01-25   (hex)		YAESU MUSEN CO., LTD.
-000125     (base 16)		YAESU MUSEN CO., LTD.
-				Tennozu Parkside Building
-				Shinagawa-ku, Tokyo 140-0002    
-				JP
-
-00-01-26   (hex)		PAC Labs
-000126     (base 16)		PAC Labs
-				3079 Kilgore Road
-				Rancho Cordova  CA  95670
-				US
-
-00-01-1B   (hex)		Unizone Technologies, Inc.
-00011B     (base 16)		Unizone Technologies, Inc.
-				5Floor HaeSung Bldg.
-				SeoCho-Ku  Seoul  
-				KR
-
-00-01-1D   (hex)		Centillium Communications
-00011D     (base 16)		Centillium Communications
-				47211 Lakeview Blvd.
-				Fremont  CA  94538
-				US
-
-00-01-1F   (hex)		RC Networks, Inc.
-00011F     (base 16)		RC Networks, Inc.
-				6727 Flanders Drive - Ste. #212
-				San Diego  CA  92121
-				US
-
-00-B0-80   (hex)		Mannesmann Ipulsys B.V.
-00B080     (base 16)		Mannesmann Ipulsys B.V.
-				Bordewijklaan 18
-				2591 XR The Hague    
-				NL
-
-00-B0-1E   (hex)		Rantic Labs, Inc.
-00B01E     (base 16)		Rantic Labs, Inc.
-				702 Brazos,  Suite #500
-				Austin  TX  78701
-				US
-
-00-B0-F0   (hex)		CALY NETWORKS
-00B0F0     (base 16)		CALY NETWORKS
-				295 Santa Anna Court
-				Sunnyvale  CA  94086
-				US
-
-00-B0-9A   (hex)		Morrow Technologies Corp.
-00B09A     (base 16)		Morrow Technologies Corp.
-				2300 Tall Pines Drive
-				Largo  FL  33771-5342
-				US
-
-00-30-2E   (hex)		Hoft & Wessel AG
-00302E     (base 16)		Hoft & Wessel AG
-				Rotenburger Strasse 20
-				30659 Hannover    
-				DE
-
-00-30-ED   (hex)		Expert Magnetics Corp.
-0030ED     (base 16)		Expert Magnetics Corp.
-				12/F., Unit D, MTG Bldg., 1-3, Nakase
-				Mihama-ku, Chiba-city, 261-8501    
-				JP
-
-00-30-0F   (hex)		IMT - Information Management T
-00300F     (base 16)		IMT - Information Management T
-				Gewerbestrasse 8
-				CH-9470 Buchs    
-				CH
-
-00-30-82   (hex)		TAIHAN ELECTRIC WIRE CO., LTD.
-003082     (base 16)		TAIHAN ELECTRIC WIRE CO., LTD.
-				Communication Engineering Team
-				Seoul    
-				KR
-
-00-30-A9   (hex)		Netiverse, Inc.
-0030A9     (base 16)		Netiverse, Inc.
-				100 Century Center Court
-				San Jose  CA  95112
-				US
-
-00-30-FE   (hex)		DSA GmbH
-0030FE     (base 16)		DSA GmbH
-				Pascalstraße 28
-				52076 Aachen    
-				DE
-
-00-30-C4   (hex)		Canon Imaging Systems Inc.
-0030C4     (base 16)		Canon Imaging Systems Inc.
-				1-24 Yoneyama, Chuo-ku
-				Niigata-shi  Niigata  950-0916
-				JP
-
-00-30-4D   (hex)		ESI
-00304D     (base 16)		ESI
-				3701 E. Plano Parkway
-				Plano  TX  75074
-				US
-
-08-14-43   (hex)		UNIBRAIN S.A.
-081443     (base 16)		UNIBRAIN S.A.
-				84, ETHNIKIS ANTISTASEOS
-				    
-				GR
-
-00-B0-09   (hex)		Grass Valley, A Belden Brand
-00B009     (base 16)		Grass Valley, A Belden Brand
-				3499, Douglas B. Floreani
-				Montreal  Quebec  H4S 2C6
-				CA
-
-00-B0-AC   (hex)		SIAE-Microelettronica S.p.A.
-00B0AC     (base 16)		SIAE-Microelettronica S.p.A.
-				Via Michelangelo Buonarroti, 21
-				20093 Cologno M. (Ml)    
-				IT
-
-00-30-23   (hex)		COGENT COMPUTER SYSTEMS, INC.
-003023     (base 16)		COGENT COMPUTER SYSTEMS, INC.
-				10 RIVER ROAD - STE. #205
-				UXBRIDGE  MA  01569
-				US
-
-00-30-90   (hex)		CYRA TECHNOLOGIES, INC.
-003090     (base 16)		CYRA TECHNOLOGIES, INC.
-				8000 CAPWELL DRIVE
-				OAKLAND  CA  94621
-				US
-
-00-30-A7   (hex)		SCHWEITZER ENGINEERING
-0030A7     (base 16)		SCHWEITZER ENGINEERING
-				LABORATORIES, INC.
-				PULLMAN  WA  99163
-				US
-
-00-30-7C   (hex)		ADID SA
-00307C     (base 16)		ADID SA
-				70 RU ANATOLE FRANCE
-				92 300 LEVALLOIS-PERRET CEDEX    
-				FR
-
-00-30-55   (hex)		Renesas Technology America, Inc.
-003055     (base 16)		Renesas Technology America, Inc.
-				450 Holger Way
-				San Jose  CA  95134
-				US
-
-00-30-2F   (hex)		GE Aviation System
-00302F     (base 16)		GE Aviation System
-				3290 Patterson Ave., S.E.
-				Grand Rapids  MI  49512
-				US
-
-00-30-0E   (hex)		Klotz Digital AG
-00300E     (base 16)		Klotz Digital AG
-				Hans-Stiessbergerstraße 2A
-				D-85540 Haar    
-				DE
-
-00-30-D5   (hex)		DResearch GmbH
-0030D5     (base 16)		DResearch GmbH
-				Otto-Schmirgal-Str.3
-				10319 Berlin    
-				DE
-
-00-30-18   (hex)		Jetway Information Co., Ltd.
-003018     (base 16)		Jetway Information Co., Ltd.
-				4F, No. 168, LI THE ST.
-				Chung Ho City 235  Taipei  
-				TW
-
-00-30-9F   (hex)		AMBER NETWORKS
-00309F     (base 16)		AMBER NETWORKS
-				2475 AUGUSTINE DR.
-				SANTA CLARA  CA  95054
-				US
-
-00-30-A8   (hex)		OL'E COMMUNICATIONS, INC.
-0030A8     (base 16)		OL'E COMMUNICATIONS, INC.
-				1962 ZANKER ROAD
-				SAN JOSE  CA  95112
-				US
-
-00-30-D1   (hex)		INOVA CORPORATION
-0030D1     (base 16)		INOVA CORPORATION
-				110 AVON STREET
-				CHARLOTTESVILE  VA  22902
-				US
-
-00-30-BB   (hex)		CacheFlow, Inc.
-0030BB     (base 16)		CacheFlow, Inc.
-				650 Almanor Drive
-				Sunnyvale  CA  94086
-				US
-
-00-30-AF   (hex)		Honeywell GmbH
-0030AF     (base 16)		Honeywell GmbH
-				Boeblinger Str. 17
-				D-71098 Schoenaich    
-				DE
-
-00-30-AA   (hex)		AXUS MICROSYSTEMS, INC.
-0030AA     (base 16)		AXUS MICROSYSTEMS, INC.
-				2F-4, NO.18/N. 609, SEC. 5
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-30-89   (hex)		Spectrapoint Wireless, LLC
-003089     (base 16)		Spectrapoint Wireless, LLC
-				1125 E. Collins Blvd.
-				Richardson  TX  75081
-				US
-
-00-30-9A   (hex)		ASTRO TERRA CORP.
-00309A     (base 16)		ASTRO TERRA CORP.
-				11526 SORRENTO VALLEY ROAD
-				SAN DIEGO  CA  92121
-				US
-
-00-30-87   (hex)		VEGA GRIESHABER KG
-003087     (base 16)		VEGA GRIESHABER KG
-				AM HOHENSTEIN 113
-				    
-				DE
-
-00-30-62   (hex)		IP Video Networks Inc
-003062     (base 16)		IP Video Networks Inc
-				6650 Lusk Blvd
-				SAN DIEGO  CA  92121
-				US
-
-00-30-2D   (hex)		QUANTUM BRIDGE COMMUNICATIONS
-00302D     (base 16)		QUANTUM BRIDGE COMMUNICATIONS
-				ONE HIGH STREET
-				NORTH ANDOVER  MA  01845
-				US
-
-00-30-CB   (hex)		OMNI FLOW COMPUTERS, INC.
-0030CB     (base 16)		OMNI FLOW COMPUTERS, INC.
-				10701 CORPORATE DRIVE-STE.#300
-				STAFFORD  TX  77477
-				US
-
-00-30-6B   (hex)		CMOS SYSTEMS, INC.
-00306B     (base 16)		CMOS SYSTEMS, INC.
-				23440 HAWTHORNE BLVD-STE #290
-				TORRANCE  CA  90505
-				US
-
-00-30-AD   (hex)		SHANGHAI COMMUNICATION
-0030AD     (base 16)		SHANGHAI COMMUNICATION
-				TECHNOLOGIES CENTER
-				  P.R.  
-				CN
-
-00-30-CF   (hex)		TWO TECHNOLOGIES, INC.
-0030CF     (base 16)		TWO TECHNOLOGIES, INC.
-				419 SARGON WAY
-				HORSHAM  PA  19044
-				US
-
-00-30-B2   (hex)		L-3 Sonoma EO
-0030B2     (base 16)		L-3 Sonoma EO
-				428 Aviation Blvd
-				Santa Rosa  CA  95403
-				US
-
-00-30-35   (hex)		Corning Incorporated
-003035     (base 16)		Corning Incorporated
-				Data Center
-				Corning  NY  14831
-				US
-
-00-30-7F   (hex)		IRLAN LTD.
-00307F     (base 16)		IRLAN LTD.
-				1 HATAMAR STREET
-				    
-				IL
-
-00-D0-15   (hex)		UNIVEX MICROTECHNOLOGY CORP.
-00D015     (base 16)		UNIVEX MICROTECHNOLOGY CORP.
-				2, TZE-CHIANG 3RD ROAD
-				    TAIWAN
-				TW
-
-00-D0-48   (hex)		ECTON, INC.
-00D048     (base 16)		ECTON, INC.
-				5168 CAMPUS DRIVE
-				PLYMOUTH MEETING  PA  19462
-				US
-
-00-D0-A5   (hex)		AMERICAN ARIUM
-00D0A5     (base 16)		AMERICAN ARIUM
-				14281 CHAMBERS ROAD
-				TUSTIN  CA  92780
-				US
-
-00-30-5D   (hex)		DIGITRA SYSTEMS, INC.
-00305D     (base 16)		DIGITRA SYSTEMS, INC.
-				8-61, GAWOL-DONG
-				  KOREA  140-150
-				KR
-
-00-30-36   (hex)		RMP ELEKTRONIKSYSTEME GMBH
-003036     (base 16)		RMP ELEKTRONIKSYSTEME GMBH
-				HANNS-MARTIN-SCHLE'R-STR.12-14
-				    
-				DE
-
-00-D0-CF   (hex)		MORETON BAY
-00D0CF     (base 16)		MORETON BAY
-				12/97 JIJAWS STREET
-				    
-				AU
-
-00-D0-7F   (hex)		STRATEGY & TECHNOLOGY, LIMITED
-00D07F     (base 16)		STRATEGY & TECHNOLOGY, LIMITED
-				Suite 4.2, Clifton Heights
-				  Bristol  BS8 1EJ
-				GB
-
-00-30-E6   (hex)		Draeger Medical Systems, Inc.
-0030E6     (base 16)		Draeger Medical Systems, Inc.
-				6 Tech Drive
-				Andover  MA  01810
-				US
-
-00-30-BD   (hex)		BELKIN COMPONENTS
-0030BD     (base 16)		BELKIN COMPONENTS
-				501 WEST WALNUT STREET
-				COMPTON  CA  90220
-				US
-
-00-30-07   (hex)		OPTI, INC.
-003007     (base 16)		OPTI, INC.
-				1440 MCCARTHY BLVD.
-				MILPITAS  CA  95035
-				US
-
-00-D0-C2   (hex)		BALTHAZAR TECHNOLOGY AB
-00D0C2     (base 16)		BALTHAZAR TECHNOLOGY AB
-				ANKDAMMSGATAN 24
-				    
-				SE
-
-00-D0-22   (hex)		INCREDIBLE TECHNOLOGIES, INC.
-00D022     (base 16)		INCREDIBLE TECHNOLOGIES, INC.
-				1600 HICKS ROAD
-				ROLLING MEADOWS  IL  60008
-				US
-
-00-D0-71   (hex)		ECHELON CORP.
-00D071     (base 16)		ECHELON CORP.
-				2901 Patrick Henry Dr.
-				Santa Clara  CA  95054 
-				US
-
-00-D0-4F   (hex)		BITRONICS, INC.
-00D04F     (base 16)		BITRONICS, INC.
-				P.O. BOX 22290
-				LEHIGH VALLEY  PA  18002-2290
-				US
-
-00-D0-69   (hex)		TECHNOLOGIC SYSTEMS
-00D069     (base 16)		TECHNOLOGIC SYSTEMS
-				16610 E. LASER DRIVE-STE. #10
-				FOUNTAIN HILLS  AZ  85268
-				US
-
-00-D0-90   (hex)		Cisco Systems, Inc
-00D090     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-F5   (hex)		ORANGE MICRO, INC.
-00D0F5     (base 16)		ORANGE MICRO, INC.
-				1400 N. LAKEVIEW AVE.
-				ANAHEIM  CA  92807
-				US
-
-00-D0-E9   (hex)		Advantage Century Telecommunication Corp.
-00D0E9     (base 16)		Advantage Century Telecommunication Corp.
-				4F, 41, Tunghsin Rd.
-				Taipei    
-				TW
-
-00-D0-94   (hex)		Seeion Control LLC
-00D094     (base 16)		Seeion Control LLC
-				117 Stephanie Lane
-				vista  CA  92084-5316
-				US
-
-00-D0-FB   (hex)		TEK MICROSYSTEMS, INCORPORATED
-00D0FB     (base 16)		TEK MICROSYSTEMS, INCORPORATED
-				ONE NORTH AVENUE
-				BURLINGTON  MA  01803
-				US
-
-00-D0-66   (hex)		WINTRISS ENGINEERING CORP.
-00D066     (base 16)		WINTRISS ENGINEERING CORP.
-				6344 FERRIS SQUARE
-				SAN DIEGO  CA  92121
-				US
-
-00-D0-82   (hex)		IOWAVE INC.
-00D082     (base 16)		IOWAVE INC.
-				1010 WISCONSIN AVENUE
-				WASHINGTON  DC  20007
-				US
-
-00-D0-81   (hex)		RTD Embedded Technologies, Inc.
-00D081     (base 16)		RTD Embedded Technologies, Inc.
-				103 Innovation Blvd.
-				State College  PA  16803
-				US
-
-00-D0-02   (hex)		DITECH CORPORATION
-00D002     (base 16)		DITECH CORPORATION
-				825 EAST MIDDLEFIELD RD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-D0-85   (hex)		OTIS ELEVATOR COMPANY
-00D085     (base 16)		OTIS ELEVATOR COMPANY
-				5 FARM SPRINGS RD.
-				FARMINGTON  CT  06032
-				US
-
-00-D0-11   (hex)		PRISM VIDEO, INC.
-00D011     (base 16)		PRISM VIDEO, INC.
-				15851 DALLAS PARKWAY-STE.#1060
-				ADDISON  TX  75001
-				US
-
-00-D0-DF   (hex)		KUZUMI ELECTRONICS, INC.
-00D0DF     (base 16)		KUZUMI ELECTRONICS, INC.
-				28-6 IIJIMA-CHYO, SAKAE-KU
-				    
-				JP
-
-00-D0-9B   (hex)		SPECTEL LTD.
-00D09B     (base 16)		SPECTEL LTD.
-				21 STILLORGAN INDUSTRIAL PARK
-				    
-				IE
-
-00-D0-67   (hex)		CAMPIO COMMUNICATIONS
-00D067     (base 16)		CAMPIO COMMUNICATIONS
-				2033 GATEWAY PL, SUITE #600
-				SAN JOSE  CA  95110
-				US
-
-00-D0-58   (hex)		Cisco Systems, Inc
-00D058     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-32   (hex)		YANO ELECTRIC CO., LTD.
-00D032     (base 16)		YANO ELECTRIC CO., LTD.
-				7-3-1 IBUKIDAIHIGASHIMACHI
-				    
-				JP
-
-00-D0-F1   (hex)		SEGA ENTERPRISES, LTD.
-00D0F1     (base 16)		SEGA ENTERPRISES, LTD.
-				12-14 HIGASHIKOUJIYA 2-CHOME
-				    
-				JP
-
-00-D0-3A   (hex)		ZONEWORX, INC.
-00D03A     (base 16)		ZONEWORX, INC.
-				40925 COUNTY CENTER DRIVE
-				TEMECULA  CA  92592
-				US
-
-00-D0-01   (hex)		VST TECHNOLOGIES, INC.
-00D001     (base 16)		VST TECHNOLOGIES, INC.
-				125 NAGOG PARK
-				ACTON  MA  01720
-				US
-
-00-50-3E   (hex)		Cisco Systems, Inc
-00503E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-50-20   (hex)		MEDIASTAR CO., LTD.
-005020     (base 16)		MEDIASTAR CO., LTD.
-				3FL, SOHUN BLDG.
-				    KOREA
-				KR
-
-00-D0-75   (hex)		ALARIS MEDICAL SYSTEMS, INC.
-00D075     (base 16)		ALARIS MEDICAL SYSTEMS, INC.
-				P.O. BOX 85335
-				SAN DIEGO  CA  92121-2733
-				US
-
-00-D0-E1   (hex)		AVIONITEK ISRAEL INC.
-00D0E1     (base 16)		AVIONITEK ISRAEL INC.
-				1 ETGAR STREET
-				    
-				IL
-
-00-D0-08   (hex)		MACTELL CORPORATION
-00D008     (base 16)		MACTELL CORPORATION
-				7000 CAMERON ROAD
-				AUSTIN  TX  78752
-				US
-
-00-D0-D9   (hex)		DEDICATED MICROCOMPUTERS
-00D0D9     (base 16)		DEDICATED MICROCOMPUTERS
-				1 Thellow Heath Park
-				Northwich    CW9 6JB
-				GB
-
-00-D0-0B   (hex)		RHK TECHNOLOGY, INC.
-00D00B     (base 16)		RHK TECHNOLOGY, INC.
-				1050 EAST MAPLE ROAD
-				TROY  MI  48083
-				US
-
-00-D0-9C   (hex)		KAPADIA COMMUNICATIONS
-00D09C     (base 16)		KAPADIA COMMUNICATIONS
-				3925 WEST BROKER LANE
-				AUSTIN  TX  78759
-				US
-
-00-D0-F3   (hex)		SOLARI DI UDINE SPA
-00D0F3     (base 16)		SOLARI DI UDINE SPA
-				VIA GINO PIERI 29
-				    
-				IT
-
-00-D0-39   (hex)		UTILICOM, INC.
-00D039     (base 16)		UTILICOM, INC.
-				323 LOVE PLACE
-				SANTA BARBARA  CA  93112-3289
-				US
-
-00-D0-A0   (hex)		MIPS DENMARK
-00D0A0     (base 16)		MIPS DENMARK
-				LAUTRUPVANG 2B
-				DK  -  
-				DK
-
-00-D0-0A   (hex)		LANACCESS TELECOM S.A.
-00D00A     (base 16)		LANACCESS TELECOM S.A.
-				GRAN VIA 8-10  4  1
-				    
-				ES
-
-00-D0-1C   (hex)		SBS TECHNOLOGIES,
-00D01C     (base 16)		SBS TECHNOLOGIES,
-				CONNECTIVITY PRODUCTS
-				ST. PAUL  MN  55121-1245
-				US
-
-00-D0-D5   (hex)		GRUNDIG AG
-00D0D5     (base 16)		GRUNDIG AG
-				KURGARTENSGTREET 37
-				    
-				DE
-
-00-D0-41   (hex)		AMIGO TECHNOLOGY CO., LTD.
-00D041     (base 16)		AMIGO TECHNOLOGY CO., LTD.
-				4F-1B, NO.12, LANE 609, SEC.5,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-D0-9D   (hex)		VERIS INDUSTRIES
-00D09D     (base 16)		VERIS INDUSTRIES
-				10831 SW CASCADE
-				PORTLAND  OR  97223
-				US
-
-00-D0-6D   (hex)		ACRISON, INC.
-00D06D     (base 16)		ACRISON, INC.
-				20 EMPIRE BLVD.
-				MOONACHIE  NJ  07074
-				US
-
-00-D0-2B   (hex)		JETCELL, INC.
-00D02B     (base 16)		JETCELL, INC.
-				173 CONSTITUTION DRIVE
-				MENLO PARK  CA  94025-1106
-				US
-
-00-D0-62   (hex)		DIGIGRAM
-00D062     (base 16)		DIGIGRAM
-				PARC DE PRE MILLIET
-				    
-				FR
-
-00-D0-8D   (hex)		PHOENIX GROUP, INC.
-00D08D     (base 16)		PHOENIX GROUP, INC.
-				123 MARCUS BLVD.
-				HAUPPAUGE  NY  11788
-				US
-
-00-D0-3D   (hex)		GALILEO TECHNOLOGY, LTD.
-00D03D     (base 16)		GALILEO TECHNOLOGY, LTD.
-				MOSHAV MANOF
-				    
-				IL
-
-00-50-C6   (hex)		LOOP TELECOMMUNICATION INTERNATIONAL, INC.
-0050C6     (base 16)		LOOP TELECOMMUNICATION INTERNATIONAL, INC.
-				7F, No. 8, Hsin Ann Road
-				Hsinchu    -   
-				TW
-
-00-50-9F   (hex)		HORIZON COMPUTER
-00509F     (base 16)		HORIZON COMPUTER
-				TRINITY BLDG. 4-22-7
-				 TOKYO 106    
-				JP
-
-00-50-A5   (hex)		CAPITOL BUSINESS SYSTEMS, LTD.
-0050A5     (base 16)		CAPITOL BUSINESS SYSTEMS, LTD.
-				43/44 RIVERSIDE
-				ROCHESTER, KENT  England ME2 4DP  
-				GB
-
-00-50-00   (hex)		NEXO COMMUNICATIONS, INC.
-005000     (base 16)		NEXO COMMUNICATIONS, INC.
-				2ND FL., 160, MINGCHU ROAD
-				HSINCHU CITY    
-				TW
-
-00-50-90   (hex)		DCTRI
-005090     (base 16)		DCTRI
-				NO.40 XUE YUAN RD
-				    
-				CN
-
-00-50-3B   (hex)		MEDIAFIRE CORPORATION
-00503B     (base 16)		MEDIAFIRE CORPORATION
-				11317 FREDERICK AVENUE
-				BELTSVILLE  MD  20705
-				US
-
-00-50-46   (hex)		MENICX INTERNATIONAL CO., LTD.
-005046     (base 16)		MENICX INTERNATIONAL CO., LTD.
-				NO.9, MING TSUN ROAD
-				TAIWAN 310  TAIWAN 310  R.O.C.
-				TW
-
-00-50-41   (hex)		Coretronic Corporation
-005041     (base 16)		Coretronic Corporation
-				NO.11, LI HSIN RD.
-				    
-				TW
-
-00-50-B0   (hex)		TECHNOLOGY ATLANTA CORPORATION
-0050B0     (base 16)		TECHNOLOGY ATLANTA CORPORATION
-				500 Sugar Mill Road
-				Atlanta  GA  30350
-				US
-
-00-50-DD   (hex)		SERRA SOLDADURA, S.A.
-0050DD     (base 16)		SERRA SOLDADURA, S.A.
-				POL. IND. ZONA FRANCA,
-				    
-				ES
-
-00-50-63   (hex)		OY COMSEL SYSTEM AB
-005063     (base 16)		OY COMSEL SYSTEM AB
-				TEGELBRUKSGATAN 5-7
-				FIN-65100 VASA    
-				FI
-
-00-50-8D   (hex)		ABIT COMPUTER CORPORATION
-00508D     (base 16)		ABIT COMPUTER CORPORATION
-				3F-7, NO. 79, SEC.1
-				TAIPEI HSIEN    
-				TW
-
-00-50-A0   (hex)		DELTA COMPUTER SYSTEMS, INC.
-0050A0     (base 16)		DELTA COMPUTER SYSTEMS, INC.
-				11719 NE 95TH STREET - STE.
-				VANCOUVER  WA  98682-2444
-				US
-
-00-50-66   (hex)		AtecoM GmbH advanced telecomunication modules
-005066     (base 16)		AtecoM GmbH advanced telecomunication modules
-				KAISERSTR. 100
-				D-52134 HERZOGENRATH    
-				DE
-
-00-50-59   (hex)		iBAHN
-005059     (base 16)		iBAHN
-				10757 S. River Front Parkway
-				South Jordan  UT  84095
-				US
-
-00-50-D9   (hex)		ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA
-0050D9     (base 16)		ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA
-				VIA SOCRATES M. BITTENCOURT, 1099
-				32010-010 Contagem MG    
-				BR
-
-00-50-01   (hex)		YAMASHITA SYSTEMS CORP.
-005001     (base 16)		YAMASHITA SYSTEMS CORP.
-				5-7-12 IKEGAMI
-				OTA-KU TOKYO    
-				JP
-
-00-50-67   (hex)		AEROCOMM, INC.
-005067     (base 16)		AEROCOMM, INC.
-				13256 W. 98TH STREET
-				LENEXA  KS  66215
-				US
-
-00-50-B6   (hex)		GOOD WAY IND. CO., LTD.
-0050B6     (base 16)		GOOD WAY IND. CO., LTD.
-				5F, NO.8, ALLEY 6,
-				  TAIWAN  R.O.C.
-				TW
-
-00-50-4B   (hex)		BARCONET N.V.
-00504B     (base 16)		BARCONET N.V.
-				LUIPAARDSTRAAT 12
-				    
-				BE
-
-00-50-EA   (hex)		XEL COMMUNICATIONS, INC.
-0050EA     (base 16)		XEL COMMUNICATIONS, INC.
-				17101 E. OHIO DRIVE
-				AURORA  CO  80017
-				US
-
-00-50-C8   (hex)		Addonics Technologies, Inc.
-0050C8     (base 16)		Addonics Technologies, Inc.
-				1918 Junction Ave.,
-				San Jose  CA  95131
-				US
-
-00-50-C4   (hex)		IMD
-0050C4     (base 16)		IMD
-				HERBSTRASSE 8
-				D-82178 PUCHHEIM    
-				DE
-
-00-50-89   (hex)		SAFETY MANAGEMENT SYSTEMS
-005089     (base 16)		SAFETY MANAGEMENT SYSTEMS
-				Burgemeester Burgerslaan 40
-				NH Rosmalen    5245
-				NL
-
-00-50-F4   (hex)		SIGMATEK GMBH & CO. KG
-0050F4     (base 16)		SIGMATEK GMBH & CO. KG
-				A-5112 LAMPRECHTSHAUSEN,
-				    
-				AT
-
-00-50-21   (hex)		EIS INTERNATIONAL, INC.
-005021     (base 16)		EIS INTERNATIONAL, INC.
-				1351 WASHINGTON BLVD.
-				STAMFORD  CT  06902
-				US
-
-00-50-5E   (hex)		DIGITEK MICROLOGIC S.A.
-00505E     (base 16)		DIGITEK MICROLOGIC S.A.
-				SANT JOAN DE LA SALLE 6
-				    
-				ES
-
-00-50-AE   (hex)		FDK Co., Ltd
-0050AE     (base 16)		FDK Co., Ltd
-				2281 Washizu
-				Shizuoka-ken  431-0495  
-				JP
-
-00-50-E7   (hex)		PARADISE INNOVATIONS (ASIA)
-0050E7     (base 16)		PARADISE INNOVATIONS (ASIA)
-				PTE. LTD.
-				  SINGAPORE  554914
-				SG
-
-00-50-FB   (hex)		VSK ELECTRONICS
-0050FB     (base 16)		VSK ELECTRONICS
-				VENETIELAAN 39
-				    
-				BE
-
-00-90-73   (hex)		GAIO TECHNOLOGY
-009073     (base 16)		GAIO TECHNOLOGY
-				OAK-YOKOHAMA BLDG.
-				NISHI-KU YOKOHAMA-CITY  Kanagawa  
-				JP
-
-00-90-7B   (hex)		E-TECH, INC.
-00907B     (base 16)		E-TECH, INC.
-				30, R&D ROAD 2
-				HSINCHU    
-				TW
-
-00-90-81   (hex)		ALOHA NETWORKS, INC.
-009081     (base 16)		ALOHA NETWORKS, INC.
-				1001A O'REILLY AVENUE
-				SAN FRANCISCO  CA  94129-0472
-				US
-
-00-90-1C   (hex)		mps Software Gmbh
-00901C     (base 16)		mps Software Gmbh
-				LUDWIGSTR 36
-				85551 KIRCHHEIM    
-				DE
-
-00-50-86   (hex)		TELKOM SA, LTD.
-005086     (base 16)		TELKOM SA, LTD.
-				TELKOM LABORATORY
-				PRETORIA    
-				ZA
-
-00-50-1A   (hex)		IQinVision
-00501A     (base 16)		IQinVision
-				33122 Valle Road
-				San Juan Capistrano  CA  92675-4853
-				US
-
-00-50-8F   (hex)		ASITA TECHNOLOGIES INT'L LTD.
-00508F     (base 16)		ASITA TECHNOLOGIES INT'L LTD.
-				UNIT 2 BALLYBRIT BUSINESS PARK
-				    
-				IE
-
-00-50-15   (hex)		BRIGHT STAR ENGINEERING
-005015     (base 16)		BRIGHT STAR ENGINEERING
-				19 ENFIELD DRIVE
-				ANDOVER  MA  01810
-				US
-
-00-50-57   (hex)		BROADBAND ACCESS SYSTEMS
-005057     (base 16)		BROADBAND ACCESS SYSTEMS
-				48 South Park St #208
-				Montclair  NJ  01752
-				US
-
-00-50-88   (hex)		AMANO CORPORATION
-005088     (base 16)		AMANO CORPORATION
-				275, MAMEDO-CHO
-				222-8558    
-				JP
-
-00-50-31   (hex)		AEROFLEX LABORATORIES, INC.
-005031     (base 16)		AEROFLEX LABORATORIES, INC.
-				35 SOUTH SERVICE ROAD
-				PLAINVIEW  NY  11803
-				US
-
-00-90-DB   (hex)		NEXT LEVEL COMMUNICATIONS
-0090DB     (base 16)		NEXT LEVEL COMMUNICATIONS
-				6085 STATE FARM DRIVE
-				ROHNERT PARK  CA  94928
-				US
-
-00-90-56   (hex)		TELESTREAM, INC.
-009056     (base 16)		TELESTREAM, INC.
-				848 GOLD FLAT RD., SUITE 1
-				NEVADA CITY  CA  95959
-				US
-
-00-90-68   (hex)		DVT CORP.
-009068     (base 16)		DVT CORP.
-				1670 OAKBROOK DR. - STE. #330
-				NORCROSS  GA  30093
-				US
-
-00-90-5E   (hex)		RAULAND-BORG CORPORATION
-00905E     (base 16)		RAULAND-BORG CORPORATION
-				3450 W. OAKTON ST.
-				SKOKIE  IL  60076
-				US
-
-00-90-AF   (hex)		J. MORITA MFG. CORP.
-0090AF     (base 16)		J. MORITA MFG. CORP.
-				680 HIGASHIHAMA MINAMI-CHO
-				FUSHIMI-KU, KYOTO  612-8213  
-				JP
-
-00-50-03   (hex)		Xrite Inc
-005003     (base 16)		Xrite Inc
-				4300 44TH Street, S.E.
-				Grand Rapids  MI  49512
-				US
-
-00-50-D3   (hex)		DIGITAL AUDIO PROCESSING PTY. LTD.
-0050D3     (base 16)		DIGITAL AUDIO PROCESSING PTY. LTD.
-				PO BOX 40
-				NSW 2138    
-				AU
-
-00-50-AD   (hex)		CommUnique Wireless Corp.
-0050AD     (base 16)		CommUnique Wireless Corp.
-				1070 MARINA VILLAGE PARKWAY
-				ALAMEDA  CA  94501
-				US
-
-00-50-AF   (hex)		INTERGON, INC.
-0050AF     (base 16)		INTERGON, INC.
-				5800 RANCHESTER DRIVE
-				HOUSTON  TX  77036
-				US
-
-00-90-34   (hex)		IMAGIC, INC.
-009034     (base 16)		IMAGIC, INC.
-				235 West Road #7
-				Portsmouth  NH  03801
-				US
-
-00-90-AA   (hex)		INDIGO ACTIVE VISION SYSTEMS LIMITED
-0090AA     (base 16)		INDIGO ACTIVE VISION SYSTEMS LIMITED
-				THE EDINBURGH TECHNOPOLE
-				Edinburgh EH26 OPJ    
-				GB
-
-00-90-5B   (hex)		RAYMOND AND LAE ENGINEERING
-00905B     (base 16)		RAYMOND AND LAE ENGINEERING
-				208 COMMERCE DR.,  UNIT #3C
-				FORT COLLINS  CO  80524
-				US
-
-00-90-BC   (hex)		TELEMANN CO., LTD.
-0090BC     (base 16)		TELEMANN CO., LTD.
-				6F DONGSIN BLDG.
-				SEOUL, 135-270    
-				KR
-
-00-90-0A   (hex)		PROTON ELECTRONIC INDUSTRIAL CO., LTD.
-00900A     (base 16)		PROTON ELECTRONIC INDUSTRIAL CO., LTD.
-				
-				PANCHIAO, Taipei County    
-				TW
-
-00-90-F8   (hex)		MEDIATRIX TELECOM
-0090F8     (base 16)		MEDIATRIX TELECOM
-				4229 GARLOCK
-				QUEBEC J1L 2C8    
-				CA
-
-00-90-10   (hex)		SIMULATION LABORATORIES, INC.
-009010     (base 16)		SIMULATION LABORATORIES, INC.
-				10078 TYLER PLACE #A
-				IJAMSVILLE  MD  21754
-				US
-
-00-90-C6   (hex)		OPTIM SYSTEMS, INC.
-0090C6     (base 16)		OPTIM SYSTEMS, INC.
-				8201 GREENSBORO DR.-STE. #1000
-				MCLEAN  VA  22102
-				US
-
-00-90-2E   (hex)		NAMCO LIMITED
-00902E     (base 16)		NAMCO LIMITED
-				1-1-32 SHIN-URASHIMA-CHO
-				KANAGAWA 221-0031    
-				JP
-
-00-90-37   (hex)		ACUCOMM, INC.
-009037     (base 16)		ACUCOMM, INC.
-				4633 OLD IRONSIDES - STE #310
-				SANTA CLARA  CA  95054
-				US
-
-00-90-78   (hex)		MER TELEMANAGEMENT SOLUTIONS, LTD.
-009078     (base 16)		MER TELEMANAGEMENT SOLUTIONS, LTD.
-				5 HATSOREF STR.
-				HOLON    
-				IL
-
-00-90-B8   (hex)		ROHDE & SCHWARZ GMBH & CO. KG
-0090B8     (base 16)		ROHDE & SCHWARZ GMBH & CO. KG
-				POSTFACH: 80 14 69/ABT.: 3CK
-				D-81614 MUNCHEN    
-				DE
-
-00-90-1A   (hex)		UNISPHERE SOLUTIONS
-00901A     (base 16)		UNISPHERE SOLUTIONS
-				5 CARLISLE ROAD
-				WESTFORD  MA  01886
-				US
-
-00-90-B5   (hex)		NIKON CORPORATION
-0090B5     (base 16)		NIKON CORPORATION
-				Electronic Imaging Division, Designing D
-				TOKYO 140-8601    
-				JP
-
-00-90-05   (hex)		PROTECH SYSTEMS CO., LTD.
-009005     (base 16)		PROTECH SYSTEMS CO., LTD.
-				5F, NO. 34, LANE 80, SEC. 3
-				TAIPEI    
-				TW
-
-00-90-59   (hex)		TELECOM DEVICE K.K.
-009059     (base 16)		TELECOM DEVICE K.K.
-				SANMIYANAGA BLDG. 3F, 1-5-12
-				  TOKYO 107  
-				JP
-
-00-90-CA   (hex)		ACCORD VIDEO TELECOMMUNICATIONS, LTD.
-0090CA     (base 16)		ACCORD VIDEO TELECOMMUNICATIONS, LTD.
-				10, MARTIN GEHL STR, PO BOX 3564
-				Petach-Tikva 49130    
-				IL
-
-00-90-E9   (hex)		JANZ COMPUTER AG
-0090E9     (base 16)		JANZ COMPUTER AG
-				Im Dörener Feld 8
-				D-33100  Paderborn  
-				DE
-
-00-90-EB   (hex)		SENTRY TELECOM SYSTEMS
-0090EB     (base 16)		SENTRY TELECOM SYSTEMS
-				8664 COMMERCE COURT
-				BURNABY  BC V5A 4N7  
-				CA
-
-00-90-FE   (hex)		ELECOM CO., LTD.  (LANEED DIV.)
-0090FE     (base 16)		ELECOM CO., LTD.  (LANEED DIV.)
-				TOKYU BANCHO BLDG.
-				Chiyoda-ku  TOKYO  102-0081
-				JP
-
-00-90-BB   (hex)		TAINET COMMUNICATION SYSTEM Corp.
-0090BB     (base 16)		TAINET COMMUNICATION SYSTEM Corp.
-				3 FL, NO. 6, ALLEY 23, LANE 91 SEC. 1
-				Taipei    
-				TW
-
-00-90-90   (hex)		I-BUS
-009090     (base 16)		I-BUS
-				9174 SKY PARK COURT
-				SAN DIEGO  CA  92123
-				US
-
-00-90-D5   (hex)		EUPHONIX, INC.
-0090D5     (base 16)		EUPHONIX, INC.
-				220 PORTAGE AVE.
-				PALO ALTO  CA  94306
-				US
-
-00-90-4A   (hex)		CONCUR SYSTEM TECHNOLOGIES
-00904A     (base 16)		CONCUR SYSTEM TECHNOLOGIES
-				2525 WALLINGWOOD DR.-STE. #804
-				AUSTIN  TX  78746
-				US
-
-00-90-8F   (hex)		AUDIO CODES LTD.
-00908F     (base 16)		AUDIO CODES LTD.
-				3A NETANYAHU STREET
-				OR YEHUDA 60256    
-				IL
-
-00-90-9E   (hex)		Critical IO, LLC
-00909E     (base 16)		Critical IO, LLC
-				485 E. 17th Street
-				Costa Mesa  CA  92627
-				US
-
-00-10-92   (hex)		NETCORE INC.
-001092     (base 16)		NETCORE INC.
-				12F-2, 537, SEC.2
-				HSINCHU    
-				TW
-
-00-10-1C   (hex)		OHM TECHNOLOGIES INTL, LLC
-00101C     (base 16)		OHM TECHNOLOGIES INTL, LLC
-				4 EXECUTIVE CIRCLE, Suite 185
-				IRVINE  CA  92614
-				US
-
-00-10-46   (hex)		ALCORN MCBRIDE INC.
-001046     (base 16)		ALCORN MCBRIDE INC.
-				3300 S. HIAWASSEE  #105
-				ORLANDO  FL  32835
-				US
-
-00-10-28   (hex)		COMPUTER TECHNICA, INC.
-001028     (base 16)		COMPUTER TECHNICA, INC.
-				3-5-19 HIGASHINAKA HAKATA-KU
-				FUKUOKA  816    
-				JP
-
-00-10-B7   (hex)		COYOTE TECHNOLOGIES, LLC
-0010B7     (base 16)		COYOTE TECHNOLOGIES, LLC
-				4360 PARK TERRACE DRIVE
-				WESTLAKE VILLAGE  CA  91361
-				US
-
-00-90-E5   (hex)		TEKNEMA, INC.
-0090E5     (base 16)		TEKNEMA, INC.
-				2656 E. BAYSHORE ROAD
-				PALO ALTO  CA  94303
-				US
-
-00-90-F4   (hex)		LIGHTNING INSTRUMENTATION
-0090F4     (base 16)		LIGHTNING INSTRUMENTATION
-				BOVERESSES 50
-				1010 LAUSANNE    
-				CH
-
-00-90-74   (hex)		ARGON NETWORKS, INC.
-009074     (base 16)		ARGON NETWORKS, INC.
-				25 PORTER ROAD
-				LITTLETON  MA  01460
-				US
-
-00-90-9F   (hex)		DIGI-DATA CORPORATION
-00909F     (base 16)		DIGI-DATA CORPORATION
-				7165 Columbia Gateway Drive
-				Columbia  MD  21045
-				US
-
-00-90-3B   (hex)		TriEMS Research Lab, Inc.
-00903B     (base 16)		TriEMS Research Lab, Inc.
-				1275 N. TUSTIN AVENUE
-				ANAHEIM  CA  92807
-				US
-
-00-10-C9   (hex)		MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.
-0010C9     (base 16)		MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.
-				
-				Kamakura-city, Kanagawa 247    
-				JP
-
-00-04-00   (hex)		LEXMARK INTERNATIONAL, INC.
-000400     (base 16)		LEXMARK INTERNATIONAL, INC.
-				740 NEW CIRCLE ROAD
-				LEXINGTON  KY  40550
-				US
-
-00-10-C5   (hex)		PROTOCOL TECHNOLOGIES, INC.
-0010C5     (base 16)		PROTOCOL TECHNOLOGIES, INC.
-				4 FIRST STREET
-				BRIDGEWATER  MA  02324
-				US
-
-00-10-1A   (hex)		PictureTel Corp.
-00101A     (base 16)		PictureTel Corp.
-				100 MINUTEMAN ROAD, MS641
-				ANDOVER  MA  01810
-				US
-
-00-10-47   (hex)		ECHO ELETRIC CO. LTD.
-001047     (base 16)		ECHO ELETRIC CO. LTD.
-				NO.6-17-1-602 Higashi Hongou
-				Yokohama City    226
-				JP
-
-00-10-A5   (hex)		OXFORD INSTRUMENTS
-0010A5     (base 16)		OXFORD INSTRUMENTS
-				Halifax Road
-				Buckinghamshire    HP12 3SE
-				GB
-
-00-10-D7   (hex)		ARGOSY RESEARCH INC.
-0010D7     (base 16)		ARGOSY RESEARCH INC.
-				NO. 44, LANE 411, CHUNG HUA RD
-				    
-				TW
-
-00-10-2C   (hex)		Lasat Networks A/S
-00102C     (base 16)		Lasat Networks A/S
-				Skalhuse 13
-				SK-9240 Nibe    
-				DK
-
-00-10-FD   (hex)		COCOM A/S
-0010FD     (base 16)		COCOM A/S
-				TELETONVEJ 8
-				DK 2860 SOBORG    
-				DK
-
-00-90-19   (hex)		HERMES ELECTRONICS CO., LTD.
-009019     (base 16)		HERMES ELECTRONICS CO., LTD.
-				3-2-12 YUSHIMA, BUNKYO-KU
-				TOKYO, 113-0034    
-				JP
-
-00-90-D8   (hex)		WHITECROSS SYSTEMS
-0090D8     (base 16)		WHITECROSS SYSTEMS
-				3A WATERSIDE PARK, COOKHAM RD
-				BERKSHIRE RG12 1RB    
-				GB
-
-00-10-4E   (hex)		CEOLOGIC
-00104E     (base 16)		CEOLOGIC
-				ZA DE PISSALOOP
-				78192 TRAPPES    
-				FR
-
-00-10-C2   (hex)		WILLNET, INC.
-0010C2     (base 16)		WILLNET, INC.
-				JOWA-TAKANAWA  BLDG. 8F
-				TOKYO    
-				JP
-
-00-10-40   (hex)		INTERMEC CORPORATION
-001040     (base 16)		INTERMEC CORPORATION
-				6001 36TH AVE WEST
-				EVERETT  WA  98203-9280
-				US
-
-00-10-2E   (hex)		NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.
-00102E     (base 16)		NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.
-				PLOT NO. 2, COCHIN EXPORT PROCESSING  ZO
-				KAKKANAD, COCHIN 682 030    
-				IN
-
-00-10-B0   (hex)		MERIDIAN TECHNOLOGY CORP.
-0010B0     (base 16)		MERIDIAN TECHNOLOGY CORP.
-				11 MCBRIDE CORP. CENTER DR.
-				CHESTERFIELD  MD  63005
-				US
-
-00-10-21   (hex)		ENCANTO NETWORKS, INC.
-001021     (base 16)		ENCANTO NETWORKS, INC.
-				2953 BUNKER HILL LANE
-				SANTA CLARA  CA  95054
-				US
-
-00-10-64   (hex)		DNPG, LLC
-001064     (base 16)		DNPG, LLC
-				20 North Wentworth Avenue
-				Londonderry  NH  03053
-				US
-
-00-10-74   (hex)		ATEN INTERNATIONAL CO., LTD.
-001074     (base 16)		ATEN INTERNATIONAL CO., LTD.
-				12F, NO.101, SUNG CHIANG RD.
-				TAIPEI, 10428    
-				TW
-
-00-10-9E   (hex)		AWARE, INC.
-00109E     (base 16)		AWARE, INC.
-				ONE OAK PARK
-				BEDFORD  MA  01730
-				US
-
-00-10-05   (hex)		UEC COMMERCIAL
-001005     (base 16)		UEC COMMERCIAL
-				P.O. BOX 54,
-				4300 DURBAN    
-				ZA
-
-00-10-B8   (hex)		ISHIGAKI COMPUTER SYSTEM CO.
-0010B8     (base 16)		ISHIGAKI COMPUTER SYSTEM CO.
-				1-1-1, KYOBASHI,
-				Tokyo    
-				JP
-
-00-10-8B   (hex)		LASERANIMATION SOLLINGER GMBH
-00108B     (base 16)		LASERANIMATION SOLLINGER GMBH
-				CRELLESTR. 19/20
-				D 10827 BERLIN    
-				DE
-
-00-10-C7   (hex)		DATA TRANSMISSION NETWORK
-0010C7     (base 16)		DATA TRANSMISSION NETWORK
-				9110 W. DODGE RD. - STE.#200
-				OMAHA  NE  68114
-				US
-
-00-10-70   (hex)		CARADON TREND LTD.
-001070     (base 16)		CARADON TREND LTD.
-				P.O. BOX 34, HORSHAM
-				WEST SUSSEX, RH12 2YF  ENGLAND  
-				GB
-
-00-10-BA   (hex)		MARTINHO-DAVIS SYSTEMS, INC.
-0010BA     (base 16)		MARTINHO-DAVIS SYSTEMS, INC.
-				1260 OLD INNES ROAD
-				OTTAWA, ONTARIO K1B 3V3    
-				CA
-
-00-10-B4   (hex)		ATMOSPHERE NETWORKS
-0010B4     (base 16)		ATMOSPHERE NETWORKS
-				10460 BANDLEY DRIVE
-				CUPERTINO  CA  95014
-				US
-
-00-04-AC   (hex)		IBM Corp
-0004AC     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-10-67   (hex)		Ericsson
-001067     (base 16)		Ericsson
-				250 Holger Way
-				SAN JOSE  CA  95134
-				US
-
-00-E0-7D   (hex)		NETRONIX, INC.
-00E07D     (base 16)		NETRONIX, INC.
-				340 THOR PLACE
-				BREA  CA  92821
-				US
-
-00-E0-28   (hex)		APTIX CORPORATION
-00E028     (base 16)		APTIX CORPORATION
-				2880 N. FIRST STREET
-				SAN JOSE  CA  95134
-				US
-
-00-E0-8C   (hex)		NEOPARADIGM LABS, INC.
-00E08C     (base 16)		NEOPARADIGM LABS, INC.
-				1735 N. FIRST ST.,  STE #108
-				SAN JOSE  CA  95112
-				US
-
-00-E0-A1   (hex)		HIMA PAUL HILDEBRANDT GmbH Co. KG
-00E0A1     (base 16)		HIMA PAUL HILDEBRANDT GmbH Co. KG
-				POSTBOX 1261
-				D-68777 BRUEHL NEAR MANNHEIM    
-				DE
-
-00-E0-88   (hex)		LTX-Credence CORPORATION
-00E088     (base 16)		LTX-Credence CORPORATION
-				825 UNIVERSITY AVENUE
-				NORWOOD  MA  02062-2643
-				US
-
-00-E0-5D   (hex)		UNITEC CO., LTD.
-00E05D     (base 16)		UNITEC CO., LTD.
-				KISOGAWA-CHO  ICHINOTORI 24
-				HAGURI-GUN AICHI 493    
-				JP
-
-00-E0-5E   (hex)		JAPAN AVIATION ELECTRONICS INDUSTRY, LTD.
-00E05E     (base 16)		JAPAN AVIATION ELECTRONICS INDUSTRY, LTD.
-				
-				TOKYO 196  JAPAN  
-				JP
-
-00-E0-9D   (hex)		SARNOFF CORPORATION
-00E09D     (base 16)		SARNOFF CORPORATION
-				CN 5300
-				PRINCETON  NJ  08543-5300
-				US
-
-00-E0-58   (hex)		PHASE ONE DENMARK A/S
-00E058     (base 16)		PHASE ONE DENMARK A/S
-				ROSKILDEVEJ 39
-				DK-2000 FREDERIKSBERG    
-				DK
-
-00-E0-76   (hex)		DEVELOPMENT CONCEPTS, INC.
-00E076     (base 16)		DEVELOPMENT CONCEPTS, INC.
-				1000 N. BROAD STREET
-				LANSDALE  PA  19446
-				US
-
-00-E0-F8   (hex)		DICNA CONTROL AB
-00E0F8     (base 16)		DICNA CONTROL AB
-				STENYXEGATAN 21 C
-				213 76 MALMOE    
-				SE
-
-00-E0-F2   (hex)		ARLOTTO COMNET, INC.
-00E0F2     (base 16)		ARLOTTO COMNET, INC.
-				7F-4,55,TUNG-KUANG ROAD
-				HSIN-CHU, 300    
-				TW
-
-00-E0-E1   (hex)		G2 NETWORKS, INC.
-00E0E1     (base 16)		G2 NETWORKS, INC.
-				142 SO. SANTA CRUZ AVE.
-				LOS GATOS  CA  95030-6702
-				US
-
-00-E0-3D   (hex)		FOCON ELECTRONIC SYSTEMS A/S
-00E03D     (base 16)		FOCON ELECTRONIC SYSTEMS A/S
-				DAMVANG, PO BOX 269
-				DK-6400 SONDERBORG    
-				DK
-
-00-E0-46   (hex)		BENTLY NEVADA CORP.
-00E046     (base 16)		BENTLY NEVADA CORP.
-				PO BOX 157
-				MINDEN  NV  89423
-				US
-
-00-E0-7B   (hex)		BAY NETWORKS
-00E07B     (base 16)		BAY NETWORKS
-				125 NAGOG PARK
-				ACTON  MA  01720
-				US
-
-00-E0-1D   (hex)		WebTV NETWORKS, INC.
-00E01D     (base 16)		WebTV NETWORKS, INC.
-				305 LYTTON AVE.
-				PALO ALTO  CA  94301
-				US
-
-00-E0-CD   (hex)		SAAB SENSIS CORPORATION
-00E0CD     (base 16)		SAAB SENSIS CORPORATION
-				85 Collamer Crossings
-				East Syracuse  NY  13057
-				US
-
-00-E0-8D   (hex)		PRESSURE SYSTEMS, INC.
-00E08D     (base 16)		PRESSURE SYSTEMS, INC.
-				34 RESEARCH DRIVE
-				HAMPTON  VA  23666
-				US
-
-00-E0-19   (hex)		ING. GIORDANO ELETTRONICA
-00E019     (base 16)		ING. GIORDANO ELETTRONICA
-				VIA PIETRO COSSA  115/12
-				10146-TORINO    
-				IT
-
-00-E0-47   (hex)		InFocus Corporation
-00E047     (base 16)		InFocus Corporation
-				27500 SW Parkway Avenue
-				Wilsonville  OR  97070-8238
-				US
-
-00-E0-C3   (hex)		SAKAI SYSTEM DEVELOPMENT CORP.
-00E0C3     (base 16)		SAKAI SYSTEM DEVELOPMENT CORP.
-				PORTUS CENTER BLD., 4-45-1
-				OSAKA-FU, 590    
-				JP
-
-00-E0-92   (hex)		ADMTEK INCORPORATED
-00E092     (base 16)		ADMTEK INCORPORATED
-				1962 ZANKER ROAD
-				SAN JOSE  CA  95112
-				US
-
-00-E0-FF   (hex)		SECURITY DYNAMICS TECHNOLOGIES, Inc.
-00E0FF     (base 16)		SECURITY DYNAMICS TECHNOLOGIES, Inc.
-				20 CROSBY DRIVE
-				BEDFORD  MA  01730
-				US
-
-00-E0-AB   (hex)		DIMAT S.A.
-00E0AB     (base 16)		DIMAT S.A.
-				C/BISCAIA 383 3
-				08023  BARCELONA    
-				ES
-
-00-E0-30   (hex)		MELITA INTERNATIONAL CORP.
-00E030     (base 16)		MELITA INTERNATIONAL CORP.
-				5051 PEACHTREE CORNERS CIRCLE
-				NORCROSS  GA  30092
-				US
-
-00-E0-33   (hex)		E.E.P.D. GmbH
-00E033     (base 16)		E.E.P.D. GmbH
-				ROEMER-STRASSE 4
-				85229 MARKT INDERSDORF    
-				DE
-
-00-E0-A2   (hex)		MICROSLATE INC.
-00E0A2     (base 16)		MICROSLATE INC.
-				9625 IGNACE - STE. D
-				BROSSARD  QC J4Y 2P3    
-				CA
-
-00-E0-79   (hex)		A.T.N.R.
-00E079     (base 16)		A.T.N.R.
-				BP 966
-				91976 COURTABOEUF    
-				FR
-
-00-E0-75   (hex)		Verilink Corporation
-00E075     (base 16)		Verilink Corporation
-				127 Jetplex Circle
-				Madison  AL  35758
-				US
-
-00-60-39   (hex)		SanCom Technology, Inc.
-006039     (base 16)		SanCom Technology, Inc.
-				7719 WOOD HOLLOW DRIVE
-				AUSTIN  TX  78731
-				US
-
-00-60-49   (hex)		VINA TECHNOLOGIES
-006049     (base 16)		VINA TECHNOLOGIES
-				6 UNION SQUARE - STE F
-				UNION CITY  CA  94587
-				US
-
-00-60-8D   (hex)		UNIPULSE CORP.
-00608D     (base 16)		UNIPULSE CORP.
-				2-7, SENGENDAI-NISHI
-				SAITAMA 343    
-				JO
-
-00-E0-2E   (hex)		SPC ELECTRONICS CORPORATION
-00E02E     (base 16)		SPC ELECTRONICS CORPORATION
-				2-1-3 SHIBASAKI, CHOFU-SHI
-				TOKYO, 182    
-				JP
-
-00-E0-9A   (hex)		Positron Inc.
-00E09A     (base 16)		Positron Inc.
-				5101 Buchan Street
-				Montreal,  Québec  H4P 2R9
-				CA
-
-00-E0-3E   (hex)		ALFATECH, INC.
-00E03E     (base 16)		ALFATECH, INC.
-				SHIN-OSAKA EITO BLDG.
-				OSAKA    
-				JP
-
-00-60-99   (hex)		SBE, Inc.
-006099     (base 16)		SBE, Inc.
-				4000 Executive Parkway
-				San Ramon  CA  94583
-				US
-
-00-60-B3   (hex)		Z-COM, INC.
-0060B3     (base 16)		Z-COM, INC.
-				7F-2, NO.9, PROSPERITY 1ST RD.
-				HSINCHU    
-				TW
-
-00-60-02   (hex)		SCREEN SUBTITLING SYSTEMS, LTD
-006002     (base 16)		SCREEN SUBTITLING SYSTEMS, LTD
-				THE OLD RECTORY
-				CLAYDON  IPSWICH  IP6 OEQ  
-				GB
-
-00-60-89   (hex)		XATA
-006089     (base 16)		XATA
-				151 EAST CLIFF ROAD-STE.#10
-				BURNSVILLE  MN  55337
-				US
-
-00-60-21   (hex)		DSC CORPORATION
-006021     (base 16)		DSC CORPORATION
-				RECRUIT-SHINOHTSUKA BLDG.,
-				TOKYO 170    
-				JP
-
-00-60-B8   (hex)		CORELIS Inc.
-0060B8     (base 16)		CORELIS Inc.
-				12607 Hiddencreek Way
-				Cerritos  CA  90703
-				US
-
-00-E0-AA   (hex)		ELECTROSONIC LTD.
-00E0AA     (base 16)		ELECTROSONIC LTD.
-				HAWLEY MILL, HAWLEY RD.
-				DARTFORD, KENT DA2 7SY    
-				GB
-
-00-E0-10   (hex)		HESS SB-AUTOMATENBAU GmbH
-00E010     (base 16)		HESS SB-AUTOMATENBAU GmbH
-				HINDENBURGSTRASSE 27-29
-				D-71106 MAGSTADT    
-				DE
-
-00-E0-D2   (hex)		VERSANET COMMUNICATIONS, INC.
-00E0D2     (base 16)		VERSANET COMMUNICATIONS, INC.
-				628 N. DIAMOND BAR BLVD.
-				DIAMOND BAR  CA  91765
-				US
-
-00-60-CE   (hex)		ACCLAIM COMMUNICATIONS
-0060CE     (base 16)		ACCLAIM COMMUNICATIONS
-				5000 OLD IRONSIDES DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-60-36   (hex)		AIT Austrian Institute of Technology GmbH
-006036     (base 16)		AIT Austrian Institute of Technology GmbH
-				Donau-City-Straße 1
-				Vienna    1220
-				AT
-
-00-60-8E   (hex)		HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH
-00608E     (base 16)		HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH
-				AM GNEISENAUFLOT 8
-				 D-66538 NEUNHIRCHEN    
-				DE
-
-00-60-1A   (hex)		KEITHLEY INSTRUMENTS
-00601A     (base 16)		KEITHLEY INSTRUMENTS
-				30500 BAINBRIDGE RD.
-				SOLON  OH  44139
-				US
-
-00-60-6A   (hex)		MITSUBISHI WIRELESS COMMUNICATIONS. INC.
-00606A     (base 16)		MITSUBISHI WIRELESS COMMUNICATIONS. INC.
-				2001 CHERRY DRIVE
-				BRASELTON  GA  30517
-				US
-
-00-60-AD   (hex)		MegaChips Corporation
-0060AD     (base 16)		MegaChips Corporation
-				4-1-6,Miyahara
-				  Osaka  532-0003
-				JP
-
-00-60-55   (hex)		CORNELL UNIVERSITY
-006055     (base 16)		CORNELL UNIVERSITY
-				729 Rhodes Hall
-				ITHACA  NY  14850-4902
-				US
-
-00-60-6D   (hex)		DIGITAL EQUIPMENT CORP.
-00606D     (base 16)		DIGITAL EQUIPMENT CORP.
-				550 KING STREET
-				LITTLETON  MA  01460
-				US
-
-00-60-B9   (hex)		NEC Platforms, Ltd
-0060B9     (base 16)		NEC Platforms, Ltd
-				2-6-1,Kitamikata,Takatsu-ku
-				Kawasaki    213-8511
-				JP
-
-00-60-9C   (hex)		Perkin-Elmer Incorporated
-00609C     (base 16)		Perkin-Elmer Incorporated
-				710 Bridgeport Ave.
-				Shelton  CT  06484
-				US
-
-00-60-CF   (hex)		ALTEON NETWORKS, INC.
-0060CF     (base 16)		ALTEON NETWORKS, INC.
-				50 GREAT OAKS BLVD.
-				SAN JOSE  CA  95119
-				US
-
-00-60-75   (hex)		PENTEK, INC.
-006075     (base 16)		PENTEK, INC.
-				1 PARK WAY
-				UPPER SADDLE RIVER  NJ  07458
-				US
-
-00-60-B7   (hex)		CHANNELMATIC, INC.
-0060B7     (base 16)		CHANNELMATIC, INC.
-				1700 GILLESPIE WAY
-				EL CAJON  CA  92020-0901
-				US
-
-00-60-06   (hex)		SOTEC CO., LTD
-006006     (base 16)		SOTEC CO., LTD
-				YOKOHAMA BASHAMICHI BLDG.,
-				YOKOHAMA  231    
-				JP
-
-00-60-BA   (hex)		SAHARA NETWORKS, INC.
-0060BA     (base 16)		SAHARA NETWORKS, INC.
-				335 HIGHLAND AVE.
-				CHESHIRE  CT  06410
-				US
-
-00-60-98   (hex)		HT COMMUNICATIONS
-006098     (base 16)		HT COMMUNICATIONS
-				4480 SHOPPING LANE
-				SIMI VALLEY  CA  93063
-				US
-
-00-60-DE   (hex)		Kayser-Threde GmbH
-0060DE     (base 16)		Kayser-Threde GmbH
-				Wolfratshauser Str. 48
-				D-81379  Munich  
-				DE
-
-00-60-D0   (hex)		SNMP RESEARCH INCORPORATED
-0060D0     (base 16)		SNMP RESEARCH INCORPORATED
-				3001 KIMBERLIN HEIGHTS ROAD
-				KNOXVILLE  TN  37920-9716
-				US
-
-00-60-15   (hex)		NET2NET CORPORATION
-006015     (base 16)		NET2NET CORPORATION
-				131 COOLIDGE STREET
-				HUDSON  MA  01749
-				US
-
-00-60-9D   (hex)		PMI FOOD EQUIPMENT GROUP
-00609D     (base 16)		PMI FOOD EQUIPMENT GROUP
-				701 RIDGE AVENUE
-				TROY  OH  45374
-				US
-
-00-60-A2   (hex)		NIHON UNISYS LIMITED CO.
-0060A2     (base 16)		NIHON UNISYS LIMITED CO.
-				P.O. BOX 135
-				SHINONOME 1-10-9    
-				JP
-
-00-60-84   (hex)		DIGITAL VIDEO
-006084     (base 16)		DIGITAL VIDEO
-				4920 AVALON RIDGE PKWY
-				NORCROSS  GA  30092
-				US
-
-00-60-2D   (hex)		ALERTON TECHNOLOGIES, INC.
-00602D     (base 16)		ALERTON TECHNOLOGIES, INC.
-				6670 185TH AVE. N.E.
-				REDMOND  WA  98052
-				US
-
-00-60-F8   (hex)		Loran International Technologies Inc.
-0060F8     (base 16)		Loran International Technologies Inc.
-				955 GREEN VALLEY CRESCENT
-				OTTAWA, ONTARIO K2C 3V4    
-				CA
-
-00-60-78   (hex)		POWER MEASUREMENT LTD.
-006078     (base 16)		POWER MEASUREMENT LTD.
-				2195 KEATING CROSS ROAD
-				SAANICHTON, B.C. V8M 2A5    
-				CA
-
-00-60-E8   (hex)		HITACHI COMPUTER PRODUCTS (AMERICA), INC.
-0060E8     (base 16)		HITACHI COMPUTER PRODUCTS (AMERICA), INC.
-				3101 TASMAN DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-60-F6   (hex)		NEXTEST COMMUNICATIONS PRODUCTS, INC.
-0060F6     (base 16)		NEXTEST COMMUNICATIONS PRODUCTS, INC.
-				TWO MID AMERICA PLAZA, STE.500
-				OAKBROOK TERRACE  IL  60181
-				US
-
-00-60-72   (hex)		VXL INSTRUMENTS, LIMITED
-006072     (base 16)		VXL INSTRUMENTS, LIMITED
-				PLOT NO. 17, KONAPPANA AGRAHARA
-				BANGALORE -  561 229    
-				IN
-
-00-60-51   (hex)		QUALITY SEMICONDUCTOR
-006051     (base 16)		QUALITY SEMICONDUCTOR
-				851 MARTIN AVENUE
-				SANTA CLARA  CA  95050
-				US
-
-00-60-92   (hex)		MICRO/SYS, INC.
-006092     (base 16)		MICRO/SYS, INC.
-				3447 OCEAN VIEW BLVD.
-				GLENDALE  CA  91208
-				US
-
-00-60-9E   (hex)		ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS
-00609E     (base 16)		ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS
-				1250 EYE STREET NW - STE #200
-				WASHINGTON  DC  20005
-				US
-
-00-60-10   (hex)		NETWORK MACHINES, INC.
-006010     (base 16)		NETWORK MACHINES, INC.
-				255 OLD NEW BRUNSWICK RD., # N320
-				PISCATAWAY  NJ  08854
-				US
-
-00-60-44   (hex)		LITTON/POLY-SCIENTIFIC
-006044     (base 16)		LITTON/POLY-SCIENTIFIC
-				2200 SOUTH MAIN STREET
-				BLACKSBURG  VA  24060
-				US
-
-00-60-04   (hex)		COMPUTADORES MODULARES SA
-006004     (base 16)		COMPUTADORES MODULARES SA
-				AVDA MONTESIERRA S/N
-				41020-SEVILLA    
-				ES
-
-00-60-E2   (hex)		QUEST ENGINEERING & DEVELOPMENT
-0060E2     (base 16)		QUEST ENGINEERING & DEVELOPMENT
-				1345 EAST ROCK WREN ROAD
-				PHOENIX  AZ  85048
-				US
-
-00-60-B4   (hex)		GLENAYRE R&D INC.
-0060B4     (base 16)		GLENAYRE R&D INC.
-				1570 KOOTENAY STREET
-				VANCOUVER, BC V5K 5B8    
-				CA
-
-00-A0-1D   (hex)		Red Lion Controls, LP
-00A01D     (base 16)		Red Lion Controls, LP
-				20 Willow Springs Circle
-				York  NY  17402
-				US
-
-00-A0-A6   (hex)		M.I. SYSTEMS, K.K.
-00A0A6     (base 16)		M.I. SYSTEMS, K.K.
-				2-7-12-308 Satsukigaoka
-				Ikeda-Shi  Osaka  563-0029
-				JP
-
-00-A0-51   (hex)		ANGIA COMMUNICATIONS. INC.
-00A051     (base 16)		ANGIA COMMUNICATIONS. INC.
-				441 EAST BAY BLVD.
-				PROVO  UTAH  84606
-				US
-
-00-A0-13   (hex)		TELTREND LTD.
-00A013     (base 16)		TELTREND LTD.
-				RINGWAY HOUSE, BELL ROAD
-				BASINGSTOKE HAMPSHIRE RG24 8F    
-				GB
-
-00-A0-B9   (hex)		EAGLE TECHNOLOGY, INC.
-00A0B9     (base 16)		EAGLE TECHNOLOGY, INC.
-				6800 ORANGETHORPE AVE.UNIT
-				BUENA PARK  CA  90620
-				US
-
-00-A0-19   (hex)		NEBULA CONSULTANTS, INC.
-00A019     (base 16)		NEBULA CONSULTANTS, INC.
-				1449 DUNCAN DRIVE
-				DELTA, BC V4L 1R5    
-				CA
-
-00-A0-ED   (hex)		Brooks Automation, Inc.
-00A0ED     (base 16)		Brooks Automation, Inc.
-				15 Elizabeth Drive
-				Chelmsford  MA  01824
-				US
-
-00-60-CA   (hex)		HARMONIC SYSTEMS INCORPORATED
-0060CA     (base 16)		HARMONIC SYSTEMS INCORPORATED
-				199 1ST STREET - STE #302
-				LOS ALTOS  CA  94022
-				US
-
-00-60-24   (hex)		GRADIENT TECHNOLOGIES, INC.
-006024     (base 16)		GRADIENT TECHNOLOGIES, INC.
-				2 MOUNT ROYAL AVENUE
-				MARLBORO  MA  01752
-				US
-
-00-60-AF   (hex)		PACIFIC MICRO DATA, INC.
-0060AF     (base 16)		PACIFIC MICRO DATA, INC.
-				16751 MILLIKAN AVENUE
-				IRVINE  CA  92714
-				US
-
-00-60-38   (hex)		Nortel Networks
-006038     (base 16)		Nortel Networks
-				Global Operations Engineering
-				Brampton  ON  l6T 5P6 Cana
-				CA
-
-00-60-4F   (hex)		Tattile SRL 
-00604F     (base 16)		Tattile SRL 
-				552-51 AJIGAURA
-				IBARAKI, 311-12    
-				JP
-
-00-A0-D0   (hex)		TEN X TECHNOLOGY, INC.
-00A0D0     (base 16)		TEN X TECHNOLOGY, INC.
-				13091 POND SPRINGS ROAD, Suite B-200
-				AUSTIN  TX  78729
-				US
-
-00-A0-BC   (hex)		VIASAT, INCORPORATED
-00A0BC     (base 16)		VIASAT, INCORPORATED
-				6155 El Camino Real
-				Carlsbad  Ca  92009
-				US
-
-00-A0-5B   (hex)		MARQUIP, INC.
-00A05B     (base 16)		MARQUIP, INC.
-				1245 E. WASHINGTON AVE.
-				MADISON  WI  53703
-				US
-
-00-A0-8C   (hex)		MultiMedia LANs, Inc.
-00A08C     (base 16)		MultiMedia LANs, Inc.
-				5600 EXECUTIVE CENTER DRIVE
-				CHARLOTTE  NC  28212
-				US
-
-00-A0-58   (hex)		GLORY, LTD.
-00A058     (base 16)		GLORY, LTD.
-				1-3-1 SHIMOTENO, HIMEJI
-				HYOGO PREF. 670    
-				JP
-
-00-A0-77   (hex)		FUJITSU NEXION, INC.
-00A077     (base 16)		FUJITSU NEXION, INC.
-				289 GREAT ROAD
-				ACTON  MA  01720-4739
-				US
-
-00-A0-A0   (hex)		COMPACT DATA, LTD.
-00A0A0     (base 16)		COMPACT DATA, LTD.
-				58 DITTON WALK
-				CAMBRIDGE CB5 8QE    
-				GB
-
-00-A0-38   (hex)		EMAIL ELECTRONICS
-00A038     (base 16)		EMAIL ELECTRONICS
-				P.O. BOX 154
-				MOOROOLBARK, 3138    
-				AU
-
-00-A0-65   (hex)		Symantec Corporation
-00A065     (base 16)		Symantec Corporation
-				20330 Stevens Creek Blvd.
-				Cupertino  CA  95014
-				US
-
-00-A0-A3   (hex)		RELIABLE POWER METERS
-00A0A3     (base 16)		RELIABLE POWER METERS
-				400 BLOSSOM HILL ROAD
-				LOS GATOS  CA  95032-4511
-				US
-
-00-A0-1B   (hex)		PREMISYS COMMUNICATIONS, INC.
-00A01B     (base 16)		PREMISYS COMMUNICATIONS, INC.
-				48664 MILMONT DRIVE
-				FREMONT  CA  94538
-				US
-
-00-A0-55   (hex)		Data Device Corporation
-00A055     (base 16)		Data Device Corporation
-				105 Wilbur Place
-				Bohemia  NY  11716
-				US
-
-00-A0-74   (hex)		PERCEPTION TECHNOLOGY
-00A074     (base 16)		PERCEPTION TECHNOLOGY
-				40 SHAWMUT ROAD
-				CANTON  MA  02021-1409
-				US
-
-00-A0-7F   (hex)		GSM-SYNTEL, LTD.
-00A07F     (base 16)		GSM-SYNTEL, LTD.
-				VICTORIA WORKS, QUEENS MILL RD
-				HD1  3PG  ENGLAND
-				GB
-
-00-A0-29   (hex)		COULTER CORPORATION
-00A029     (base 16)		COULTER CORPORATION
-				11800 S.W. 147TH AVE.
-				MIAMI  FL  33196
-				US
-
-00-A0-87   (hex)		Microsemi Corporation
-00A087     (base 16)		Microsemi Corporation
-				400 March Road
-				Ontario    K2K 3H4
-				CA
-
-00-A0-43   (hex)		AMERICAN TECHNOLOGY LABS, INC.
-00A043     (base 16)		AMERICAN TECHNOLOGY LABS, INC.
-				115 WEST 3RD STREET
-				STEVENSVILLE  MT  59870
-				US
-
-00-A0-42   (hex)		SPUR PRODUCTS CORP.
-00A042     (base 16)		SPUR PRODUCTS CORP.
-				9288 W. EMERALD STREET
-				BOISE  ID  83704
-				US
-
-00-A0-C1   (hex)		ORTIVUS MEDICAL AB
-00A0C1     (base 16)		ORTIVUS MEDICAL AB
-				BOX 513
-				    
-				SE
-
-00-A0-4F   (hex)		AMERITEC CORP.
-00A04F     (base 16)		AMERITEC CORP.
-				760 ARROW GRAND CIRCLE
-				COVINA  CA  91722
-				US
-
-00-A0-CF   (hex)		SOTAS, INC.
-00A0CF     (base 16)		SOTAS, INC.
-				2 RESEARCH PLACE, STE.
-				ROCKVILLE  MD  20850
-				US
-
-00-A0-72   (hex)		OVATION SYSTEMS LTD.
-00A072     (base 16)		OVATION SYSTEMS LTD.
-				GREAT HASELEY TRAD. EST.
-				  ENGLAND  
-				GB
-
-00-A0-82   (hex)		NKT ELEKTRONIK A/S
-00A082     (base 16)		NKT ELEKTRONIK A/S
-				NKT ALLE 85
-				    
-				DK
-
-00-A0-F0   (hex)		TORONTO MICROELECTRONICS INC.
-00A0F0     (base 16)		TORONTO MICROELECTRONICS INC.
-				5149 BRADCO BOULEVARD
-				    L4W 2A6
-				CA
-
-00-A0-D7   (hex)		KASTEN CHASE APPLIED RESEARCH
-00A0D7     (base 16)		KASTEN CHASE APPLIED RESEARCH
-				5100 ORBITOR DRIVE
-				    L4W 4Z4
-				CA
-
-00-A0-F1   (hex)		MTI
-00A0F1     (base 16)		MTI
-				4905 E. LA PALMA AVENUE
-				ANAHEIM  CA  92807
-				US
-
-00-A0-B3   (hex)		ZYKRONIX
-00A0B3     (base 16)		ZYKRONIX
-				7248 SOUTH TUCSON WAY
-				ENGLEWOOD  CO  80112
-				US
-
-00-A0-FF   (hex)		TELLABS OPERATIONS, INC.
-00A0FF     (base 16)		TELLABS OPERATIONS, INC.
-				1000 REMINGTON BLVD.
-				    60440
-				US
-
-00-A0-E5   (hex)		NHC COMMUNICATIONS
-00A0E5     (base 16)		NHC COMMUNICATIONS
-				5450 COTE DE LIESSE
-				MONTREAL,  QUEBEC  H4P 1A5
-				CA
-
-00-A0-36   (hex)		APPLIED NETWORK TECHNOLOGY
-00A036     (base 16)		APPLIED NETWORK TECHNOLOGY
-				319 LITTLETON ROAD--STE #101
-				WESTFORD  MA  01886-4133
-				US
-
-00-A0-D2   (hex)		ALLIED TELESIS INTERNATIONAL CORPORATION
-00A0D2     (base 16)		ALLIED TELESIS INTERNATIONAL CORPORATION
-				950 KIFER ROAD
-				SUNNYVALE  CA  94086
-				US
-
-00-A0-9B   (hex)		QPSX COMMUNICATIONS, LTD.
-00A09B     (base 16)		QPSX COMMUNICATIONS, LTD.
-				33 RICHARDSON STREET
-				Western    00000
-				AU
-
-00-A0-00   (hex)		CENTILLION NETWORKS, INC.
-00A000     (base 16)		CENTILLION NETWORKS, INC.
-				359 RAVENDALE DRIVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-A0-8A   (hex)		BROOKTROUT TECHNOLOGY, INC.
-00A08A     (base 16)		BROOKTROUT TECHNOLOGY, INC.
-				144 GOULD STREET- SUITE #200
-				NEEDHAM  MA  02194
-				US
-
-00-A0-7B   (hex)		DAWN COMPUTER INCORPORATION
-00A07B     (base 16)		DAWN COMPUTER INCORPORATION
-				6 KEXUEYUAN SOUTH ROAD
-				    
-				CN
-
-00-A0-5C   (hex)		INVENTORY CONVERSION, INC./
-00A05C     (base 16)		INVENTORY CONVERSION, INC./
-				NEKOTECH DIVISION
-				HAMPTON  NH  03842
-				US
-
-00-20-0F   (hex)		EBRAINS Inc
-00200F     (base 16)		EBRAINS Inc
-				Tachibana Bldg
-				Taito-ku  Tokyo  110-0003
-				JP
-
-00-A0-D3   (hex)		INSTEM COMPUTER SYSTEMS, LTD.
-00A0D3     (base 16)		INSTEM COMPUTER SYSTEMS, LTD.
-				WALTON INDUSTRIAL ESTATE
-				    
-				GB
-
-00-A0-B4   (hex)		TEXAS MICROSYSTEMS, INC.
-00A0B4     (base 16)		TEXAS MICROSYSTEMS, INC.
-				5959 CORPORATE DRIVE
-				HOUSTON  TX  77036
-				US
-
-00-A0-60   (hex)		ACER PERIPHERALS, INC.
-00A060     (base 16)		ACER PERIPHERALS, INC.
-				9F, 135 CHIAN KUO N. RD. SEC 2
-				    
-				TW
-
-00-A0-83   (hex)		ASIMMPHONY TURKEY
-00A083     (base 16)		ASIMMPHONY TURKEY
-				ELECTRONICS, LTD.
-				    V7C 4N1
-				CA
-
-00-A0-AA   (hex)		SPACELABS MEDICAL
-00A0AA     (base 16)		SPACELABS MEDICAL
-				5150 220 Ave SE
-				Issaquah  WA  98027
-				US
-
-00-A0-3B   (hex)		TOSHIN ELECTRIC CO., LTD.
-00A03B     (base 16)		TOSHIN ELECTRIC CO., LTD.
-				3FL. RIVER-STONE 3RD. BLG.234
-				  213  
-				JP
-
-00-A0-F3   (hex)		STAUBLI
-00A0F3     (base 16)		STAUBLI
-				183 RUE DES USINES
-				    
-				FR
-
-00-20-DF   (hex)		KYOSAN ELECTRIC MFG. CO., LTD.
-0020DF     (base 16)		KYOSAN ELECTRIC MFG. CO., LTD.
-				2-29, HEIAN-CHO, TSURUMI-KU
-				    
-				JP
-
-00-20-C7   (hex)		AKAI Professional M.I. Corp.
-0020C7     (base 16)		AKAI Professional M.I. Corp.
-				1-3, Hiranuma 1-Chome,
-				  220-0023  
-				JP
-
-00-A0-04   (hex)		NETPOWER, INC.
-00A004     (base 16)		NETPOWER, INC.
-				545 OAKMEAD PARKWAY
-				SUNNYVALE  CA  94086
-				US
-
-00-20-29   (hex)		TELEPROCESSING PRODUCTS, INC.
-002029     (base 16)		TELEPROCESSING PRODUCTS, INC.
-				4565 E. INDUSTRIAL STREET
-				SIMI VALLEY  CA  93063
-				US
-
-00-20-69   (hex)		ISDN SYSTEMS CORPORATION
-002069     (base 16)		ISDN SYSTEMS CORPORATION
-				8320 OLD COURTHOUSE RD.
-				VIENNA  VA  22182
-				US
-
-00-20-8B   (hex)		LAPIS TECHNOLOGIES, INC.
-00208B     (base 16)		LAPIS TECHNOLOGIES, INC.
-				1100 MARINA VILLAGE PKWY
-				ALAMEDA  CA  94501
-				US
-
-00-20-2B   (hex)		ADVANCED TELECOMMUNICATIONS MODULES, LTD.
-00202B     (base 16)		ADVANCED TELECOMMUNICATIONS MODULES, LTD.
-				
-				Cambridge CB3 OBL    
-				GB
-
-00-20-6B   (hex)		KONICA MINOLTA HOLDINGS, INC.
-00206B     (base 16)		KONICA MINOLTA HOLDINGS, INC.
-				1-6-1, Marunouchi,
-				Tokyo    100-0005
-				JP
-
-00-20-04   (hex)		YAMATAKE-HONEYWELL CO., LTD.
-002004     (base 16)		YAMATAKE-HONEYWELL CO., LTD.
-				54 SUZUKAWA, ISEHARA
-				KANAGAWA 259-11    
-				JP
-
-00-20-15   (hex)		ACTIS COMPUTER SA
-002015     (base 16)		ACTIS COMPUTER SA
-				16 CHEMIN DES AULX
-				    
-				CH
-
-00-20-99   (hex)		BON ELECTRIC CO., LTD.
-002099     (base 16)		BON ELECTRIC CO., LTD.
-				4-4 28, MIZUDO-CHO
-				HYOGO  HYOGO  
-				JP
-
-00-20-F9   (hex)		PARALINK NETWORKS, INC.
-0020F9     (base 16)		PARALINK NETWORKS, INC.
-				4F, NO. 27, SEC.3, PATEH RD.
-				TAIPEI    
-				TW
-
-00-20-92   (hex)		CHESS ENGINEERING B.V.
-002092     (base 16)		CHESS ENGINEERING B.V.
-				NIEUWE GRACHT 74
-				    
-				NL
-
-00-20-43   (hex)		NEURON COMPANY LIMITED
-002043     (base 16)		NEURON COMPANY LIMITED
-				15 KWAI YI ROAD,  BLOCK 2,
-				KWAI CHUNG,   N.T.    
-				HK
-
-00-20-71   (hex)		IBR GMBH
-002071     (base 16)		IBR GMBH
-				KOHLERSTR. 45
-				D-46286 DORSTEN    
-				DE
-
-00-20-7C   (hex)		AUTEC GMBH
-00207C     (base 16)		AUTEC GMBH
-				BAHNHOFSTR. 57
-				55234 FRAMERSHEIM    
-				DE
-
-00-20-57   (hex)		TITZE DATENTECHNIK GmbH
-002057     (base 16)		TITZE DATENTECHNIK GmbH
-				DIESELSTRASSE 10
-				DS-71272 RENNINGEN-2    
-				DE
-
-00-20-E5   (hex)		APEX DATA, INC.
-0020E5     (base 16)		APEX DATA, INC.
-				6624 OWENS DRIVE
-				PLEASANTON  CA  94588
-				US
-
-00-20-87   (hex)		MEMOTEC, INC.
-002087     (base 16)		MEMOTEC, INC.
-				7755 Henri-Bourassa
-				MONTREAL, QUEBEC     H4S 1P7
-				CA
-
-00-20-BC   (hex)		Long Reach Networks Pty Ltd
-0020BC     (base 16)		Long Reach Networks Pty Ltd
-				Unit 3, 118-122 Bowden St
-				MEADOWBANK NSW 2114    
-				AU
-
-00-C0-C0   (hex)		SHORE MICROSYSTEMS, INC.
-00C0C0     (base 16)		SHORE MICROSYSTEMS, INC.
-				23 POCAHONTAS AVENUE
-				OCEANPORT  NJ  07757
-				US
-
-00-C0-0C   (hex)		RELIA TECHNOLGIES
-00C00C     (base 16)		RELIA TECHNOLGIES
-				1F., NO. 24, INDUSTRY E. 9TH
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-C0-73   (hex)		XEDIA CORPORATION
-00C073     (base 16)		XEDIA CORPORATION
-				301 BALLARDVALE STREET
-				WILMINGTON  MA  01887
-				US
-
-00-C0-D4   (hex)		AXON NETWORKS, INC.
-00C0D4     (base 16)		AXON NETWORKS, INC.
-				104 SPRUCE STREET
-				WATERTOWN  MA  02172
-				US
-
-00-C0-CD   (hex)		COMELTA, S.A.
-00C0CD     (base 16)		COMELTA, S.A.
-				AVDA. PARC TECNOLOGIC, 4
-				    
-				ES
-
-00-20-ED   (hex)		GIGA-BYTE TECHNOLOGY CO., LTD.
-0020ED     (base 16)		GIGA-BYTE TECHNOLOGY CO., LTD.
-				365 CLOVERLEAF
-				BALDWIN PARK  CA  91706
-				US
-
-00-20-85   (hex)		Eaton Corporation
-002085     (base 16)		Eaton Corporation
-				8380 Capital Blvd.
-				RALEIGH  NC  27616
-				US
-
-00-20-CD   (hex)		HYBRID NETWORKS, INC.
-0020CD     (base 16)		HYBRID NETWORKS, INC.
-				10201 BUBB ROAD
-				CUPERTINO  CA  95014-4167
-				US
-
-00-20-2E   (hex)		DAYSTAR DIGITAL
-00202E     (base 16)		DAYSTAR DIGITAL
-				5556 ATLANTA HIGHWAY
-				FLOWERY BRANCH  GA  30542
-				US
-
-00-20-B3   (hex)		Tattile SRL 
-0020B3     (base 16)		Tattile SRL 
-				3 APOLLO PLACE
-				    
-				AU
-
-00-20-EE   (hex)		GTECH CORPORATION
-0020EE     (base 16)		GTECH CORPORATION
-				55 TECHNOLOGY WAY
-				WEST GREENWICH  RI  02817
-				US
-
-00-20-4C   (hex)		MITRON COMPUTER PTE LTD.
-00204C     (base 16)		MITRON COMPUTER PTE LTD.
-				1020 HOUGANG AVENUE 1 #03-3504
-				  SINGAPORE  1953
-				SG
-
-00-20-17   (hex)		ORBOTECH
-002017     (base 16)		ORBOTECH
-				INDUSTRIAL ZONE
-				    
-				IL
-
-00-20-93   (hex)		LANDINGS TECHNOLOGY CORP.
-002093     (base 16)		LANDINGS TECHNOLOGY CORP.
-				163 WATER STREET
-				EXETER  NH  03833
-				US
-
-00-20-63   (hex)		WIPRO INFOTECH LTD.
-002063     (base 16)		WIPRO INFOTECH LTD.
-				UNITS 47-48, SDF BLOCK VII
-				    
-				
-
-00-20-16   (hex)		SHOWA ELECTRIC WIRE & CABLE CO
-002016     (base 16)		SHOWA ELECTRIC WIRE & CABLE CO
-				NO. 20-25, SEISHIN 8-CHOME
-				  229  
-				JP
-
-00-20-4D   (hex)		INOVIS GMBH
-00204D     (base 16)		INOVIS GMBH
-				HANNS-BRAUN STRASSE 50
-				    
-				DE
-
-00-20-5F   (hex)		GAMMADATA COMPUTER GMBH
-00205F     (base 16)		GAMMADATA COMPUTER GMBH
-				GUTENBERGSTR. 13
-				    
-				DE
-
-00-20-1F   (hex)		BEST POWER TECHNOLOGY, INC.
-00201F     (base 16)		BEST POWER TECHNOLOGY, INC.
-				P.O. BOX 280
-				NECEDAH  WI  54646
-				US
-
-00-20-B6   (hex)		AGILE NETWORKS, INC.
-0020B6     (base 16)		AGILE NETWORKS, INC.
-				200 BAKER AVENUE
-				CONCORD  MA  01742
-				US
-
-00-20-D1   (hex)		MICROCOMPUTER SYSTEMS (M) SDN.
-0020D1     (base 16)		MICROCOMPUTER SYSTEMS (M) SDN.
-				23-25, JALAN JEJAKA TUJUH
-				    
-				MY
-
-00-20-CE   (hex)		LOGICAL DESIGN GROUP, INC.
-0020CE     (base 16)		LOGICAL DESIGN GROUP, INC.
-				6301 CHAPEL HILL ROAD
-				RALEIGH  NC  27607
-				US
-
-00-20-14   (hex)		GLOBAL VIEW CO., LTD.
-002014     (base 16)		GLOBAL VIEW CO., LTD.
-				4F, NO. 23, LANE 306
-				  TAIWAN  R.O.C.
-				TW
-
-00-20-C2   (hex)		TEXAS MEMORY SYSTEMS, INC.
-0020C2     (base 16)		TEXAS MEMORY SYSTEMS, INC.
-				11200 WESTHEIMER RD-STE#1000
-				HOUSTON  TX  77042
-				US
-
-00-C0-F3   (hex)		NETWORK COMMUNICATIONS CORP.
-00C0F3     (base 16)		NETWORK COMMUNICATIONS CORP.
-				5501 GREEN VALLEY DRIVE
-				BLOOMINGTON  MN  55437-1085
-				US
-
-00-20-56   (hex)		NEOPRODUCTS
-002056     (base 16)		NEOPRODUCTS
-				25 CHAPMAN STREET
-				    
-				AU
-
-00-20-42   (hex)		DATAMETRICS CORP.
-002042     (base 16)		DATAMETRICS CORP.
-				8966 COMANCHE AVE.
-				CHATSWORTH  CA  91311
-				US
-
-00-20-78   (hex)		RUNTOP, INC.
-002078     (base 16)		RUNTOP, INC.
-				5/F, NO. 10, ALLEY 8, LANE 45
-				  TAIWAN  R.O.C.
-				TW
-
-00-20-06   (hex)		GARRETT COMMUNICATIONS, INC.
-002006     (base 16)		GARRETT COMMUNICATIONS, INC.
-				48531 WARMSPRINGS BLVD.
-				FREMONT  CA  94539
-				US
-
-00-20-24   (hex)		PACIFIC COMMUNICATION SCIENCES
-002024     (base 16)		PACIFIC COMMUNICATION SCIENCES
-				9645 SCRANTON ROAD
-				SAN DIEGO  CA  92121
-				US
-
-00-20-5D   (hex)		NANOMATIC OY
-00205D     (base 16)		NANOMATIC OY
-				PUISTOLAN RAITTI 4
-				    
-				FI
-
-00-C0-05   (hex)		LIVINGSTON ENTERPRISES, INC.
-00C005     (base 16)		LIVINGSTON ENTERPRISES, INC.
-				6920 KOLL CENTER PARKWAY #220
-				PLEASANTON  CA  94566
-				US
-
-00-C0-77   (hex)		DAEWOO TELECOM LTD.
-00C077     (base 16)		DAEWOO TELECOM LTD.
-				PRODUCTS DESIGN DEPT. 1
-				SEOUL  SEOUL  KOREA
-				KR
-
-00-C0-C8   (hex)		MICRO BYTE PTY. LTD.
-00C0C8     (base 16)		MICRO BYTE PTY. LTD.
-				197 SHERBOURNE RD.
-				  AUSTRALIA  3094
-				AU
-
-00-C0-69   (hex)		Axxcelera Broadband Wireless
-00C069     (base 16)		Axxcelera Broadband Wireless
-				111 Castilian Drive
-				Santa Barbara  CA  93117
-				US
-
-00-C0-67   (hex)		UNITED BARCODE INDUSTRIES
-00C067     (base 16)		UNITED BARCODE INDUSTRIES
-				12240 INDIAN CREEK COURT
-				BELTSVILLE  MD  20705
-				US
-
-00-C0-A3   (hex)		DUAL ENTERPRISES CORPORATION
-00C0A3     (base 16)		DUAL ENTERPRISES CORPORATION
-				9TH FLOOR 48 NAN-KANG ROAD
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-C0-18   (hex)		LANART CORPORATION
-00C018     (base 16)		LANART CORPORATION
-				145 ROSEMARY STREET
-				NEEDHAM  MA  02194
-				US
-
-00-9D-8E   (hex)		CARDIAC RECORDERS, INC.
-009D8E     (base 16)		CARDIAC RECORDERS, INC.
-				34 SCARBORO ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-BB-01   (hex)		OCTOTHORPE CORP.
-00BB01     (base 16)		OCTOTHORPE CORP.
-				285 WEST GREEN STREET
-				PASADENA  CA  91105
-				US
-
-00-C0-33   (hex)		TELEBIT COMMUNICATIONS APS
-00C033     (base 16)		TELEBIT COMMUNICATIONS APS
-				SKANDERBORGVEJ 234
-				    
-				DK
-
-00-C0-90   (hex)		PRAIM S.R.L.
-00C090     (base 16)		PRAIM S.R.L.
-				VIA MACCANI, 169
-				    ITALY
-				
-
-00-C0-DE   (hex)		ZCOMM, INC.
-00C0DE     (base 16)		ZCOMM, INC.
-				1050 C EAST DUANE AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-C0-13   (hex)		NETRIX
-00C013     (base 16)		NETRIX
-				13595 DULLES TECHNOLOGY DRIVE
-				HERNDON  VA  22071
-				US
-
-00-C0-6B   (hex)		OSI PLUS CORPORATION
-00C06B     (base 16)		OSI PLUS CORPORATION
-				2-1-23 NAKAMEGURO
-				    
-				JP
-
-00-C0-4C   (hex)		DEPARTMENT OF FOREIGN AFFAIRS
-00C04C     (base 16)		DEPARTMENT OF FOREIGN AFFAIRS
-				& TRADE
-				    
-				AU
-
-00-C0-7C   (hex)		HIGHTECH INFORMATION
-00C07C     (base 16)		HIGHTECH INFORMATION
-				SYSTEM LTD.
-				  HONG  KONG
-				HK
-
-00-C0-B8   (hex)		FRASER'S HILL LTD.
-00C0B8     (base 16)		FRASER'S HILL LTD.
-				27502 W. GILL ROAD
-				MORRISTOWN  AZ  85342
-				US
-
-00-C0-62   (hex)		IMPULSE TECHNOLOGY
-00C062     (base 16)		IMPULSE TECHNOLOGY
-				210 DAHLONEGA ST.#204
-				CUMMING  GA  30130
-				US
-
-00-C0-EC   (hex)		DAUPHIN TECHNOLOGY
-00C0EC     (base 16)		DAUPHIN TECHNOLOGY
-				450 EISENHOWER LANE NORTH
-				LOMBARD  IL  60148
-				US
-
-00-C0-86   (hex)		THE LYNK CORPORATION
-00C086     (base 16)		THE LYNK CORPORATION
-				101 QUEENS DRIVE
-				KING OF PRUSSIA  PA  19406
-				US
-
-00-C0-58   (hex)		DATAEXPERT CORP.
-00C058     (base 16)		DATAEXPERT CORP.
-				1156 SONOPRA COURTN-KANG RD.
-				SUNNYVALE  CA  94086
-				US
-
-00-C0-D0   (hex)		RATOC SYSTEM INC.
-00C0D0     (base 16)		RATOC SYSTEM INC.
-				ASAHI NAMBA BLDG.
-				  556  
-				JP
-
-00-C0-BF   (hex)		TECHNOLOGY CONCEPTS, LTD.
-00C0BF     (base 16)		TECHNOLOGY CONCEPTS, LTD.
-				GRANGE ESTATE
-				  UNITED  KINGDOM
-				GB
-
-00-C0-BA   (hex)		NETVANTAGE
-00C0BA     (base 16)		NETVANTAGE
-				201 CONTINENTAL BLVD.-STE.#201
-				EL SECUNDO  CA  90245
-				US
-
-00-C0-5E   (hex)		VARI-LITE, INC.
-00C05E     (base 16)		VARI-LITE, INC.
-				201 REGAL ROW
-				DALLAS  TX  75247
-				US
-
-00-C0-D5   (hex)		Werbeagentur Jürgen Siebert
-00C0D5     (base 16)		Werbeagentur Jürgen Siebert
-				Im Klostergarten 8
-				D-50321 Brühl    
-				DE
-
-00-C0-63   (hex)		MORNING STAR TECHNOLOGIES, INC
-00C063     (base 16)		MORNING STAR TECHNOLOGIES, INC
-				1760 ZOLLINGER ROAD
-				COLUMBUS  OH  43221
-				US
-
-00-C0-21   (hex)		NETEXPRESS
-00C021     (base 16)		NETEXPRESS
-				989 EAST HILLSDALE BLVD.
-				FOSTER CITY  CA  94404-2113
-				US
-
-00-C0-DB   (hex)		IPC CORPORATION (PTE) LTD.
-00C0DB     (base 16)		IPC CORPORATION (PTE) LTD.
-				122 EUNOS AVE., 7 #05-10
-				  SINGAPORE  1440
-				SG
-
-00-C0-E3   (hex)		OSITECH COMMUNICATIONS, INC.
-00C0E3     (base 16)		OSITECH COMMUNICATIONS, INC.
-				679 SOUTHGATE DRIVE
-				CANADA  N1G  4S2
-				CA
-
-00-C0-FE   (hex)		APTEC COMPUTER SYSTEMS, INC.
-00C0FE     (base 16)		APTEC COMPUTER SYSTEMS, INC.
-				P.O. BOX 6750
-				PORTLAND  OR  97228-6750
-				US
-
-00-C0-16   (hex)		ELECTRONIC THEATRE CONTROLS
-00C016     (base 16)		ELECTRONIC THEATRE CONTROLS
-				3030 LAURA LANE
-				MIDDLETON  WI  53562
-				US
-
-00-C0-BC   (hex)		TELECOM AUSTRALIA/CSSC
-00C0BC     (base 16)		TELECOM AUSTRALIA/CSSC
-				LOCKED BAG 8812
-				    
-				AU
-
-00-C0-C1   (hex)		QUAD/GRAPHICS, INC.
-00C0C1     (base 16)		QUAD/GRAPHICS, INC.
-				N63 W23075 HWY 74
-				SUSSEX  WI  53089
-				US
-
-00-C0-89   (hex)		TELINDUS DISTRIBUTION
-00C089     (base 16)		TELINDUS DISTRIBUTION
-				GELDENAAKSEBAAN 335
-				    
-				BE
-
-00-C0-B0   (hex)		GCC TECHNOLOGIES,INC.
-00C0B0     (base 16)		GCC TECHNOLOGIES,INC.
-				580 WINTER STREET
-				WALTHAM  MA  02154
-				US
-
-00-C0-0A   (hex)		MICRO CRAFT
-00C00A     (base 16)		MICRO CRAFT
-				2-4-3 NISHIFURUMATSU
-				    
-				JP
-
-00-C0-74   (hex)		TOYODA AUTOMATIC LOOM
-00C074     (base 16)		TOYODA AUTOMATIC LOOM
-				WORKS, LTD.
-				  448  
-				JP
-
-00-40-4E   (hex)		FLUENT, INC.
-00404E     (base 16)		FLUENT, INC.
-				594 WORCESTER ROAD-STE.#308
-				NATICK  MA  01760
-				US
-
-00-40-8D   (hex)		THE GOODYEAR TIRE & RUBBER CO.
-00408D     (base 16)		THE GOODYEAR TIRE & RUBBER CO.
-				1144 EAST MARKET STREET
-				AKRON  OH  44316
-				US
-
-00-40-1B   (hex)		PRINTER SYSTEMS CORP.
-00401B     (base 16)		PRINTER SYSTEMS CORP.
-				207 PERRY PARKWAY
-				GAITHERSBURG  MD  20877-2142
-				US
-
-00-40-A3   (hex)		MICROUNITY SYSTEMS ENGINEERING
-0040A3     (base 16)		MICROUNITY SYSTEMS ENGINEERING
-				255 CASPIAN DRIVE
-				SUNNYVALE  CA  94089-1015
-				US
-
-00-40-B3   (hex)		ParTech Inc.
-0040B3     (base 16)		ParTech Inc.
-				8383 Seneca Turnpike
-				NEW HARTFORD  NY  13413
-				US
-
-00-40-1D   (hex)		INVISIBLE SOFTWARE, INC.
-00401D     (base 16)		INVISIBLE SOFTWARE, INC.
-				1142 CHESS DRIVE
-				FOSTER CITY  CA  94404
-				US
-
-00-C0-CA   (hex)		ALFA, INC.
-00C0CA     (base 16)		ALFA, INC.
-				11-1, INDUSTRY EAST ROAD IV
-				    TAIWAN
-				TW
-
-00-C0-6C   (hex)		SVEC COMPUTER CORP.
-00C06C     (base 16)		SVEC COMPUTER CORP.
-				3F, 531-1 CHUNG CHENG RD.
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-40-FF   (hex)		TELEBIT CORPORATION
-0040FF     (base 16)		TELEBIT CORPORATION
-				1315 CHESAPEAKE TERRACE
-				SUNNYVALE  CA  94089-1100
-				US
-
-00-40-1F   (hex)		COLORGRAPH LTD
-00401F     (base 16)		COLORGRAPH LTD
-				UNIT 2, MARS HOUSE
-				RG7 4QW -  UNITED  KINGDOM
-				GB
-
-00-40-AF   (hex)		DIGITAL PRODUCTS, INC.
-0040AF     (base 16)		DIGITAL PRODUCTS, INC.
-				411 WAVERLY OAKS ROAD
-				WALTHAM  MA  02154
-				US
-
-00-40-F7   (hex)		Polaroid Corporation
-0040F7     (base 16)		Polaroid Corporation
-				300 Baker Avenue
-				Concord  MA  01742
-				US
-
-00-40-37   (hex)		SEA-ILAN, INC.
-004037     (base 16)		SEA-ILAN, INC.
-				14602 NORTH US HIGHWAY #31
-				CARMEL  IN  46032
-				US
-
-00-C0-26   (hex)		LANS TECHNOLOGY CO., LTD.
-00C026     (base 16)		LANS TECHNOLOGY CO., LTD.
-				153 MINTSU RD. 2F, TAOYUAN,
-				TAIWAN  R.  O. C.
-				TW
-
-00-40-7E   (hex)		EVERGREEN SYSTEMS, INC.
-00407E     (base 16)		EVERGREEN SYSTEMS, INC.
-				120 LANDING COURT-SUITE
-				NOVATO  CA  94945
-				US
-
-00-40-F9   (hex)		COMBINET
-0040F9     (base 16)		COMBINET
-				333 W. EL CAMINO REAL-STE#310
-				SUNNYVALE  CA  94087
-				US
-
-00-C0-A7   (hex)		SEEL LTD.
-00C0A7     (base 16)		SEEL LTD.
-				3 YOUNG SQUARE
-				    SCOTLAND
-				GB
-
-00-C0-4A   (hex)		GROUP 2000 AG
-00C04A     (base 16)		GROUP 2000 AG
-				P.O. BOX 331
-				    
-				CH
-
-00-40-54   (hex)		CONNECTION MACHINES SERVICES
-004054     (base 16)		CONNECTION MACHINES SERVICES
-				12 HENSHAW STREET
-				WOBURN  MA  01801-466664
-				US
-
-00-40-04   (hex)		ICM CO. LTD.
-004004     (base 16)		ICM CO. LTD.
-				4-2-9 NIHONBASHI NANIWA-KU
-				    
-				JP
-
-00-40-18   (hex)		ADOBE SYSTEMS, INC.
-004018     (base 16)		ADOBE SYSTEMS, INC.
-				1585 CHARLESTON ROAD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-40-4A   (hex)		WEST AUSTRALIAN DEPARTMENT
-00404A     (base 16)		WEST AUSTRALIAN DEPARTMENT
-				OF EMPLOYMENT (DEVET)
-				  WESTERN  
-				AU
-
-00-40-3C   (hex)		FORKS, INC.
-00403C     (base 16)		FORKS, INC.
-				1-27-4 IRIYA,
-				  110  
-				JP
-
-00-40-42   (hex)		N.A.T. GMBH
-004042     (base 16)		N.A.T. GMBH
-				GOETHESTR. 2
-				    
-				DE
-
-00-40-F2   (hex)		JANICH & KLASS COMPUTERTECHNIK
-0040F2     (base 16)		JANICH & KLASS COMPUTERTECHNIK
-				ZUM ALTEN ZOLLHAUS 20
-				    
-				DE
-
-00-40-A2   (hex)		KINGSTAR TECHNOLOGY INC.
-0040A2     (base 16)		KINGSTAR TECHNOLOGY INC.
-				1-3F, NO. 185, SEC. 3,
-				TAIPEI  TAIWAN,  R.O.C.
-				TW
-
-00-40-DC   (hex)		TRITEC ELECTRONIC GMBH
-0040DC     (base 16)		TRITEC ELECTRONIC GMBH
-				ROBERT KOCH STR. 35
-				    
-				DE
-
-00-40-60   (hex)		COMENDEC LTD
-004060     (base 16)		COMENDEC LTD
-				ENTERPRISE WAY,
-				BIRMINGHAM  BIRMINGHAM  ENGLAND
-				GB
-
-00-40-56   (hex)		MCM JAPAN LTD.
-004056     (base 16)		MCM JAPAN LTD.
-				SYUUKAEN BLD. 2-11-1
-				    
-				JP
-
-00-40-30   (hex)		GK COMPUTER
-004030     (base 16)		GK COMPUTER
-				BASLER STRASSE 103
-				    
-				DE
-
-00-40-40   (hex)		RING ACCESS, INC.
-004040     (base 16)		RING ACCESS, INC.
-				957-R INDUSTRIAL ROAD
-				SAN CARLOS  CA  94070
-				US
-
-00-80-57   (hex)		ADSOFT, LTD.
-008057     (base 16)		ADSOFT, LTD.
-				Im Baumgarten 6
-				  MOHLIN  CH-4313 
-				CH
-
-00-80-BB   (hex)		HUGHES LAN SYSTEMS
-0080BB     (base 16)		HUGHES LAN SYSTEMS
-				1225 CHARLESTON ROAD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-40-3D   (hex)		Teradata Corporation
-00403D     (base 16)		Teradata Corporation
-				17095 Via Del Campo
-				San Diego  CA  92127
-				US
-
-00-40-D0   (hex)		MITAC INTERNATIONAL CORP.
-0040D0     (base 16)		MITAC INTERNATIONAL CORP.
-				8TH FL. 585 MING SHENG E. RD.
-				    
-				TW
-
-00-40-B6   (hex)		COMPUTERM  CORPORATION
-0040B6     (base 16)		COMPUTERM  CORPORATION
-				111 WOOD STREET
-				PITTSBURGH  PA  15222
-				US
-
-00-40-A6   (hex)		Cray, Inc.
-0040A6     (base 16)		Cray, Inc.
-				655F LONE OAK DRIVE
-				EAGAN  MN  55121
-				US
-
-00-40-3E   (hex)		RASTER OPS CORPORATION
-00403E     (base 16)		RASTER OPS CORPORATION
-				2500 WALSH AVENUE
-				SANTA CLARA  CA  95051
-				US
-
-00-40-46   (hex)		UDC RESEARCH LIMITED
-004046     (base 16)		UDC RESEARCH LIMITED
-				8A KING WAN INDUSTRIAL BLDG.
-				  HONG  KONG
-				HK
-
-00-C0-D7   (hex)		TAIWAN TRADING CENTER DBA
-00C0D7     (base 16)		TAIWAN TRADING CENTER DBA
-				TTC COMPUTER PRODUCTS
-				IRVING  TX  75038
-				US
-
-00-40-DA   (hex)		TELSPEC LTD
-0040DA     (base 16)		TELSPEC LTD
-				LANCASTER PARKER ROAD
-				    ENGLAND
-				GB
-
-00-40-C7   (hex)		RUBY TECH CORPORATION
-0040C7     (base 16)		RUBY TECH CORPORATION
-				6F-1, NO.3, LANE 250,
-				TAIPEI  TAIWAN,  R.O.C.
-				TW
-
-00-40-52   (hex)		STAR TECHNOLOGIES, INC.
-004052     (base 16)		STAR TECHNOLOGIES, INC.
-				515 SHAW ROAD
-				STERLING  VA  22075
-				US
-
-00-40-2E   (hex)		PRECISION SOFTWARE, INC.
-00402E     (base 16)		PRECISION SOFTWARE, INC.
-				600 S FEDERAL HWY STE
-				DEERFIELD BEACH  FL  33441-4193
-				US
-
-00-40-2B   (hex)		TRIGEM COMPUTER, INC.
-00402B     (base 16)		TRIGEM COMPUTER, INC.
-				KISUNG B/D 4F, 784-6
-				SEOUL  KOREA  135-080
-				KR
-
-00-40-1A   (hex)		FUJI ELECTRIC CO., LTD.
-00401A     (base 16)		FUJI ELECTRIC CO., LTD.
-				NEW YURAKUCHO BLDG
-				    
-				JP
-
-00-40-5F   (hex)		AFE COMPUTERS LTD.
-00405F     (base 16)		AFE COMPUTERS LTD.
-				62 ANCHORAGE ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-40-80   (hex)		ATHENIX CORPORATION
-004080     (base 16)		ATHENIX CORPORATION
-				675 ALMANOR AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-40-51   (hex)		Garbee and Garbee
-004051     (base 16)		Garbee and Garbee
-				4390 Darr Circle
-				Colorado Springs  CO  80908
-				US
-
-00-40-7A   (hex)		SOCIETE D'EXPLOITATION DU CNIT
-00407A     (base 16)		SOCIETE D'EXPLOITATION DU CNIT
-				2 GLACE DE LA DEFENSE 92053
-				    
-				FR
-
-00-40-31   (hex)		KOKUSAI ELECTRIC CO., LTD
-004031     (base 16)		KOKUSAI ELECTRIC CO., LTD
-				2-1 YASUUCHI
-				TOYAMA  939-23  
-				JP
-
-00-40-D3   (hex)		KIMPSION INTERNATIONAL CORP.
-0040D3     (base 16)		KIMPSION INTERNATIONAL CORP.
-				4701 PATRICK HENRY DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-40-EE   (hex)		OPTIMEM
-0040EE     (base 16)		OPTIMEM
-				297 N. BERNARDO AVENUE
-				MOUNTAIN VIEW  CA  94043-5205
-				US
-
-00-40-25   (hex)		MOLECULAR DYNAMICS
-004025     (base 16)		MOLECULAR DYNAMICS
-				880 EAST ARQUES AVENUE
-				SUNNYVALE  CA  94086-4536
-				US
-
-00-40-67   (hex)		OMNIBYTE CORPORATION
-004067     (base 16)		OMNIBYTE CORPORATION
-				245 WEST ROOSEVELT ROAD
-				WEST CHICAGO  IL  60185
-				US
-
-00-40-C3   (hex)		FISCHER AND PORTER CO.
-0040C3     (base 16)		FISCHER AND PORTER CO.
-				125 E. COUNTY LINE ROAD
-				WARMINSTER  PA  18974
-				US
-
-00-40-EC   (hex)		MIKASA SYSTEM ENGINEERING
-0040EC     (base 16)		MIKASA SYSTEM ENGINEERING
-				CO., LTD.
-				    
-				JP
-
-00-80-2F   (hex)		NATIONAL INSTRUMENTS CORP.
-00802F     (base 16)		NATIONAL INSTRUMENTS CORP.
-				11500 North Mopac Expressway
-				AUSTIN  TX  78759-3504
-				US
-
-00-80-54   (hex)		FRONTIER TECHNOLOGIES CORP.
-008054     (base 16)		FRONTIER TECHNOLOGIES CORP.
-				10201 NO. PT. WASHINGTON ROAD
-				MEQUON  WI  53092
-				US
-
-00-80-53   (hex)		INTELLICOM, INC.
-008053     (base 16)		INTELLICOM, INC.
-				20415 NORDHOFF STREET
-				CHATSWORTH  CA  91311
-				US
-
-00-80-26   (hex)		NETWORK PRODUCTS CORPORATION
-008026     (base 16)		NETWORK PRODUCTS CORPORATION
-				1440 WEST COLORADO BLVD.
-				PASADENA  CA  91105
-				US
-
-00-80-B0   (hex)		ADVANCED INFORMATION
-0080B0     (base 16)		ADVANCED INFORMATION
-				TECHNOLOGY, INC.
-				    
-				JP
-
-00-80-FA   (hex)		RWT GMBH
-0080FA     (base 16)		RWT GMBH
-				TALANGERSTR. 5-7
-				  WEST  
-				DE
-
-00-80-FD   (hex)		EXSCEED CORPRATION
-0080FD     (base 16)		EXSCEED CORPRATION
-				1-15-12, KITAKASE, SAIWAI-KU
-				    
-				JP
-
-00-80-FE   (hex)		AZURE TECHNOLOGIES, INC.
-0080FE     (base 16)		AZURE TECHNOLOGIES, INC.
-				63 SOUTH STREET
-				HOPKINTON  MA  01748-2212
-				US
-
-00-80-3C   (hex)		TVS ELECTRONICS LTD
-00803C     (base 16)		TVS ELECTRONICS LTD
-				44, MILLER ROAD
-				    
-				IN
-
-00-80-46   (hex)		Tattile SRL 
-008046     (base 16)		Tattile SRL 
-				DEPT. OF ELECTRICAL ENGIN'ING
-				    
-				CA
-
-00-40-02   (hex)		PERLE SYSTEMS LIMITED
-004002     (base 16)		PERLE SYSTEMS LIMITED
-				60 RENFREW DRIVE
-				CANADA  L3R  0E1
-				CA
-
-00-40-49   (hex)		Roche Diagnostics International Ltd.
-004049     (base 16)		Roche Diagnostics International Ltd.
-				FORRENSTRASSE
-				ROTKREUZ  ZG  6343
-				CH
-
-00-40-29   (hex)		Compex
-004029     (base 16)		Compex
-				
-				    
-				US
-
-00-40-9E   (hex)		CONCURRENT TECHNOLOGIES  LTD.
-00409E     (base 16)		CONCURRENT TECHNOLOGIES  LTD.
-				654 THE CRESCENT
-				  UNITED  KINGDOM
-				GB
-
-00-80-AD   (hex)		CNET TECHNOLOGY, INC.
-0080AD     (base 16)		CNET TECHNOLOGY, INC.
-				2199 ZANKER ROAD
-				SAN JOSE  CA  95131
-				US
-
-00-80-0E   (hex)		ATLANTIX CORPORATION
-00800E     (base 16)		ATLANTIX CORPORATION
-				5401 NW BROKENSOUND BLVD.
-				BOCA RATON  FL  33431
-				US
-
-00-80-AB   (hex)		DUKANE NETWORK INTEGRATION
-0080AB     (base 16)		DUKANE NETWORK INTEGRATION
-				2900 DUKANE DRIVE
-				ST. CHARLES  IL  60174
-				US
-
-00-80-F1   (hex)		OPUS SYSTEMS
-0080F1     (base 16)		OPUS SYSTEMS
-				3000 CORONADO DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-80-29   (hex)		EAGLE TECHNOLOGY, INC.
-008029     (base 16)		EAGLE TECHNOLOGY, INC.
-				6800 ORANGETHORPE AVE.UNIT
-				BUENA PARK  CA  90620
-				US
-
-00-80-72   (hex)		MICROPLEX SYSTEMS LTD.
-008072     (base 16)		MICROPLEX SYSTEMS LTD.
-				301-2071 Kingsway
-				Port Coquitlam  BC  V3C6N2
-				CA
-
-00-40-01   (hex)		Zero One Technology Co. Ltd.
-004001     (base 16)		Zero One Technology Co. Ltd.
-				10 Fl., No. 8, Lane 360, Sec 1, 
-				Neihu Dist.,  Taipei City  114
-				TW
-
-00-40-71   (hex)		ATM COMPUTER GMBH
-004071     (base 16)		ATM COMPUTER GMBH
-				BUCKLESTR. 1-5,POSTFACH 101043
-				    
-				DE
-
-00-80-11   (hex)		DIGITAL SYSTEMS INT'L. INC.
-008011     (base 16)		DIGITAL SYSTEMS INT'L. INC.
-				7659 178TH PL. NE
-				REDMOND  WA  98073-0908
-				US
-
-00-80-34   (hex)		SMT GOUPIL
-008034     (base 16)		SMT GOUPIL
-				3 RUE DES ARCHIVES
-				    
-				FR
-
-00-80-E4   (hex)		NORTHWEST DIGITAL SYSTEMS, INC
-0080E4     (base 16)		NORTHWEST DIGITAL SYSTEMS, INC
-				P.O. BOX 15288
-				SEATTLE  WA  98115
-				US
-
-00-80-EC   (hex)		SUPERCOMPUTING SOLUTIONS, INC.
-0080EC     (base 16)		SUPERCOMPUTING SOLUTIONS, INC.
-				6175 NANCY RIDGE BLVD.
-				SAN DIEGO  CA  92121
-				US
-
-00-80-2C   (hex)		THE SAGE GROUP PLC
-00802C     (base 16)		THE SAGE GROUP PLC
-				SAGE HOUSE, BENTON PARK ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-80-D6   (hex)		NUVOTECH, INC.
-0080D6     (base 16)		NUVOTECH, INC.
-				2015 BRIDGEWAY, SUITE 204
-				SAUSALITO  CA  94965
-				US
-
-00-80-0A   (hex)		JAPAN COMPUTER CORP.
-00800A     (base 16)		JAPAN COMPUTER CORP.
-				L. K. BLDG. HIGASHI KANDA
-				    
-				JP
-
-00-80-4B   (hex)		EAGLE TECHNOLOGIES PTY.LTD.
-00804B     (base 16)		EAGLE TECHNOLOGIES PTY.LTD.
-				70 KEYS ROAD
-				    
-				AU
-
-00-80-C8   (hex)		D-LINK SYSTEMS, INC.
-0080C8     (base 16)		D-LINK SYSTEMS, INC.
-				53 Discover Dr.
-				Irvine  CA  92618
-				US
-
-00-80-12   (hex)		INTEGRATED MEASUREMENT SYSTEMS
-008012     (base 16)		INTEGRATED MEASUREMENT SYSTEMS
-				9525 SW GEMINI DRIVE
-				BEAVERTON  OR  97005
-				US
-
-00-80-27   (hex)		ADAPTIVE SYSTEMS, INC.
-008027     (base 16)		ADAPTIVE SYSTEMS, INC.
-				1400 N.W. COMPTON DRIVE
-				BEAVERTON  OR  97006
-				US
-
-00-80-FC   (hex)		AVATAR CORPORATION
-0080FC     (base 16)		AVATAR CORPORATION
-				65 SOUTH STREET
-				HOPKINTON  MA  01748
-				US
-
-00-80-16   (hex)		WANDEL AND GOLTERMANN
-008016     (base 16)		WANDEL AND GOLTERMANN
-				1030 SWABIA COURT
-				  NC  27709
-				US
-
-00-80-A2   (hex)		CREATIVE ELECTRONIC SYSTEMS
-0080A2     (base 16)		CREATIVE ELECTRONIC SYSTEMS
-				Avenue Eugène-Lance 38bis
-				    
-				CH
-
-00-80-CC   (hex)		MICROWAVE BYPASS SYSTEMS
-0080CC     (base 16)		MICROWAVE BYPASS SYSTEMS
-				25 BRAINTREE HILL OFFICE PARK
-				BRAINTREE  MA  02184
-				US
-
-00-80-A5   (hex)		SPEED INTERNATIONAL
-0080A5     (base 16)		SPEED INTERNATIONAL
-				1320 ARBOLITA DR.
-				LA HABRA  CA  90631
-				US
-
-00-80-79   (hex)		MICROBUS DESIGNS LTD.
-008079     (base 16)		MICROBUS DESIGNS LTD.
-				TREADAWAY HILL
-				  UNITED  KINGDOM
-				GB
-
-00-00-79   (hex)		NETWORTH INCORPORATED
-000079     (base 16)		NETWORTH INCORPORATED
-				8404 ESTERS BOULEVARD
-				IRVING  TX  75063
-				US
-
-00-00-91   (hex)		ANRITSU CORPORATION
-000091     (base 16)		ANRITSU CORPORATION
-				1800, ONNA
-				    
-				JP
-
-00-00-75   (hex)		Nortel Networks
-000075     (base 16)		Nortel Networks
-				Global Operations Engineering
-				Brampton  ON  l6T 5P6 Cana
-				CA
-
-00-00-A5   (hex)		Tattile SRL 
-0000A5     (base 16)		Tattile SRL 
-				P.O. BOX 17220
-				BOULDER  CO  80308-7220
-				US
-
-00-00-36   (hex)		ATARI CORPORATION
-000036     (base 16)		ATARI CORPORATION
-				1196 BORREGAS AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-00-F8   (hex)		DIGITAL EQUIPMENT CORPORATION
-0000F8     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				LKG 1-2/A19
-				LITTLETON  MA  01460-1289
-				US
-
-00-80-5C   (hex)		AGILIS CORPORATION
-00805C     (base 16)		AGILIS CORPORATION
-				1101 SAN ANTONIO ROAD
-				Mountain View  CA  94043-1008
-				US
-
-00-80-C5   (hex)		NOVELLCO DE MEXICO
-0080C5     (base 16)		NOVELLCO DE MEXICO
-				CONSTITUYENTES NO. 907
-				11950 MEXICO  11950 MEXICO  D.F.
-				MX
-
-00-80-78   (hex)		PRACTICAL PERIPHERALS, INC.
-008078     (base 16)		PRACTICAL PERIPHERALS, INC.
-				375 CONEJO RIDGE AVENUE
-				THOUSAND OAKS  CA  91361
-				US
-
-00-80-F6   (hex)		SYNERGY MICROSYSTEMS
-0080F6     (base 16)		SYNERGY MICROSYSTEMS
-				9605 SCRANTON ROAD-STE #700
-				SAN DIEGO  CA  92121-1773
-				US
-
-00-80-7B   (hex)		ARTEL COMMUNICATIONS CORP.
-00807B     (base 16)		ARTEL COMMUNICATIONS CORP.
-				22 KANE INDUSTRIAL DRIVE
-				HUDSON  MA  01749
-				US
-
-00-80-14   (hex)		ESPRIT SYSTEMS
-008014     (base 16)		ESPRIT SYSTEMS
-				14F, NO. 1, SEC. 4
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-80-B7   (hex)		STELLAR COMPUTER
-0080B7     (base 16)		STELLAR COMPUTER
-				95 WELLS AVENUE
-				NEWTON  MA  02159
-				
-
-00-00-ED   (hex)		APRIL
-0000ED     (base 16)		APRIL
-				60, RUE DE CARTALE
-				    
-				FR
-
-00-00-A3   (hex)		NETWORK APPLICATION TECHNOLOGY
-0000A3     (base 16)		NETWORK APPLICATION TECHNOLOGY
-				1686 DELL AVENUE
-				CAMPBELL  CA  95008
-				US
-
-00-00-39   (hex)		TOSHIBA CORPORATION
-000039     (base 16)		TOSHIBA CORPORATION
-				COMPUTER DIVISION
-				TOKYO  105  
-				JP
-
-00-00-3C   (hex)		AUSPEX SYSTEMS INC.
-00003C     (base 16)		AUSPEX SYSTEMS INC.
-				5200 GREAT AMERICA PKWY
-				SANTA CLARA  CA  95054
-				US
-
-00-00-7E   (hex)		CLUSTRIX CORPORATION
-00007E     (base 16)		CLUSTRIX CORPORATION
-				960 HAMLIN COURT
-				SUNNYVALE  CA  94089
-				US
-
-00-00-CB   (hex)		COMPU-SHACK ELECTRONIC GMBH
-0000CB     (base 16)		COMPU-SHACK ELECTRONIC GMBH
-				RINGSTR. 56 - 58, 5450 NEUWIED
-				  WEST  
-				DE
-
-00-00-13   (hex)		CAMEX
-000013     (base 16)		CAMEX
-				75 KNEELAND STREET
-				BOSTON  MA  02111
-				US
-
-00-00-95   (hex)		SONY TEKTRONIX CORP.
-000095     (base 16)		SONY TEKTRONIX CORP.
-				P.O. BOX 5209 TOKYO INT'L
-				    
-				JP
-
-00-00-57   (hex)		SCITEX CORPORATION LTD.
-000057     (base 16)		SCITEX CORPORATION LTD.
-				P.O. BOX 330
-				    
-				IL
-
-00-00-D6   (hex)		PUNCH LINE HOLDING
-0000D6     (base 16)		PUNCH LINE HOLDING
-				P.O. BOX 391708
-				  SOUTH  AFRICA
-				ZA
-
-00-00-9E   (hex)		MARLI S.A.
-00009E     (base 16)		MARLI S.A.
-				CHEMIN TAVERNEY 3
-				    
-				CH
-
-00-00-42   (hex)		METIER MANAGEMENT SYSTEMS LTD.
-000042     (base 16)		METIER MANAGEMENT SYSTEMS LTD.
-				3 FOUNDATION STREET
-				    ENGLAND
-				GB
-
-00-00-7D   (hex)		Oracle Corporation
-00007D     (base 16)		Oracle Corporation
-				17 Network Circle
-				Menlo Park  CA  95025
-				US
-
-00-00-96   (hex)		MARCONI ELECTRONICS LTD.
-000096     (base 16)		MARCONI ELECTRONICS LTD.
-				BROWNS LANE, THE AIRPORT
-				  UNITED  KINGDOM
-				GB
-
-00-00-5E   (hex)		ICANN, IANA Department
-00005E     (base 16)		ICANN, IANA Department
-				INTERNET ASS'NED NOS.AUTHORITY
-				Los Angeles  CA  90094-2536
-				US
-
-00-00-38   (hex)		CSS LABS
-000038     (base 16)		CSS LABS
-				2134 SOUTH RIPCHEY
-				SANTA ANA  CA  92705
-				US
-
-00-00-44   (hex)		CASTELLE CORPORATION
-000044     (base 16)		CASTELLE CORPORATION
-				3255-3 SCOTT BOULEVARD
-				SANTA CLARA  CA  95054
-				US
-
-00-00-CE   (hex)		MEGADATA CORP.
-0000CE     (base 16)		MEGADATA CORP.
-				35 ORVILLE DRIVE
-				BOHEMIA  NY  11716
-				US
-
-00-00-7B   (hex)		RESEARCH MACHINES
-00007B     (base 16)		RESEARCH MACHINES
-				P.O. BOX 75
-				    ENGLAND
-				GB
-
-00-00-0F   (hex)		NEXT, INC.
-00000F     (base 16)		NEXT, INC.
-				3475 DEER CREEK ROAD
-				PALO ALTO  CA  94304
-				US
-
-00-00-BB   (hex)		TRI-DATA
-0000BB     (base 16)		TRI-DATA
-				505 EAST MIDDLEFIELD ROAD
-				MOUNTAIN VIEW  CA  94043-4082
-				US
-
-00-00-1A   (hex)		ADVANCED MICRO DEVICES
-00001A     (base 16)		ADVANCED MICRO DEVICES
-				P.O. BOX 3453
-				SUNNYVALE  CA  94088
-				US
-
-00-00-7F   (hex)		LINOTYPE-HELL AG
-00007F     (base 16)		LINOTYPE-HELL AG
-				POSTFACH 56 60
-				    
-				DE
-
-08-00-6F   (hex)		PHILIPS APELDOORN B.V.
-08006F     (base 16)		PHILIPS APELDOORN B.V.
-				P.O. BOX 105
-				  THE  
-				NL
-
-00-00-40   (hex)		APPLICON, INC.
-000040     (base 16)		APPLICON, INC.
-				4251 PLYMOUTH RD 48015
-				ANN ARBOR  MI  48106-0986
-				US
-
-00-00-5D   (hex)		CS TELECOM
-00005D     (base 16)		CS TELECOM
-				4-16 AVENUE DU GENERAL LECLERC
-				    
-				FR
-
-00-00-12   (hex)		INFORMATION TECHNOLOGY LIMITED
-000012     (base 16)		INFORMATION TECHNOLOGY LIMITED
-				MAYLANDS AVE. HEMEL HEMPSTEAD
-				  HERTS  ENGLAND
-				GB
-
-00-00-8A   (hex)		DATAHOUSE INFORMATION SYSTEMS
-00008A     (base 16)		DATAHOUSE INFORMATION SYSTEMS
-				DIRECTOR OF OPERATIONS
-				GU34  3QW  ENGLAND
-				GB
-
-00-00-32   (hex)		Marconi plc
-000032     (base 16)		Marconi plc
-				28 ELSTREE WAY, BOREHAMWOOD
-				  UNITED  KINGDOM
-				GB
-
-00-00-85   (hex)		CANON INC.
-000085     (base 16)		CANON INC.
-				DVTECH. DEV. CENTER DEPT.12
-				    
-				JP
-
-00-00-4A   (hex)		ADC CODENOLL TECHNOLOGY CORP.
-00004A     (base 16)		ADC CODENOLL TECHNOLOGY CORP.
-				200 CORPORATE BLVD. SO.
-				YONKERS  NY  10701
-				US
-
-08-00-8F   (hex)		CHIPCOM CORPORATION
-08008F     (base 16)		CHIPCOM CORPORATION
-				SOUTHBOROUGH OFFICE
-				SOUTHBOROUGH  MA  01772-1886
-				US
-
-00-00-6A   (hex)		COMPUTER CONSOLES INC.
-00006A     (base 16)		COMPUTER CONSOLES INC.
-				COMPUTER PRODUCTS DIVISION
-				IRVINE  CA  92718
-				US
-
-08-00-3E   (hex)		CODEX CORPORATION
-08003E     (base 16)		CODEX CORPORATION
-				50 EAST COMMERCE DRIVE
-				SCHAUMBURG  IL  60173
-				US
-
-08-00-40   (hex)		FERRANTI COMPUTER SYS. LIMITED
-080040     (base 16)		FERRANTI COMPUTER SYS. LIMITED
-				WYTHENSHAWE DIVISION
-				  UNITED  KINGDOM
-				GB
-
-08-00-3A   (hex)		ORCATECH INC.
-08003A     (base 16)		ORCATECH INC.
-				2680 QUEENSVIEW DRIVE
-				CANADA  K2B  8H6
-				CA
-
-08-00-3D   (hex)		CADNETIX CORPORATIONS
-08003D     (base 16)		CADNETIX CORPORATIONS
-				5797 CENTRAL AVENUE
-				BOULDER  CO  80301
-				US
-
-08-00-38   (hex)		BULL S.A.S.
-080038     (base 16)		BULL S.A.S.
-				rue Jean Jaures B.P.68
-				Les Clayes sous Bois    78430
-				FR
-
-08-00-73   (hex)		TECMAR INC.
-080073     (base 16)		TECMAR INC.
-				6225 COCHRAN ROAD
-				SOLON  OH  44139
-				US
-
-08-00-72   (hex)		XEROX CORP UNIV GRANT PROGRAM
-080072     (base 16)		XEROX CORP UNIV GRANT PROGRAM
-				ZEROX SYSTEMS INSTITUTE
-				WEBSTER  NY  14580
-				US
-
-08-00-6A   (hex)		AT&T
-08006A     (base 16)		AT&T
-				3300 E Renner Road
-				Richardson  TX  75082
-				US
-
-08-00-7A   (hex)		INDATA
-08007A     (base 16)		INDATA
-				GJERDRUMS VEI 12 C
-				    
-				NO
-
-08-00-79   (hex)		THE DROID WORKS
-080079     (base 16)		THE DROID WORKS
-				P.O. BOX CS 8180
-				SAN RAFAEL  CA  94912
-				US
-
-08-00-4D   (hex)		CORVUS SYSTEMS INC.
-08004D     (base 16)		CORVUS SYSTEMS INC.
-				2100 CORVUS DRIVE
-				SAN JOSE  CA  95124
-				US
-
-08-00-2F   (hex)		PRIME COMPUTER INC.
-08002F     (base 16)		PRIME COMPUTER INC.
-				100 CROSBY DRIVE
-				BEDFORD  MA  01730-1402
-				US
-
-08-00-2C   (hex)		BRITTON LEE INC.
-08002C     (base 16)		BRITTON LEE INC.
-				14600 WINCHESTER BLVD
-				LOS GATOS  CA  95030
-				US
-
-08-00-62   (hex)		General Dynamics
-080062     (base 16)		General Dynamics
-				
-				Fort Worth  TX  
-				US
-
-08-00-5C   (hex)		FOUR PHASE SYSTEMS
-08005C     (base 16)		FOUR PHASE SYSTEMS
-				2001 LOGIC DRIVE
-				SAN JOSE  CA  95124-3452
-				US
-
-08-00-5A   (hex)		IBM Corp
-08005A     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-08-00-52   (hex)		INSYSTEC
-080052     (base 16)		INSYSTEC
-				450 LAKEMONT AVENUE
-				WINTER PARK  FL  32792
-				US
-
-08-00-1E   (hex)		APOLLO COMPUTER INC.
-08001E     (base 16)		APOLLO COMPUTER INC.
-				15 ELIZABETH DRIVE
-				CHELMSFORD  MA  01824
-				US
-
-08-00-19   (hex)		GENERAL ELECTRIC CORPORATION
-080019     (base 16)		GENERAL ELECTRIC CORPORATION
-				1285 BOSTON AVENUE
-				BRIDGEPORT  CT  06602
-				US
-
-02-70-01   (hex)		RACAL-DATACOM
-027001     (base 16)		RACAL-DATACOM
-				LAN INTERNETWORKING DIVISION
-				BOXBOROUGH  MA  01719
-				US
-
-08-00-0E   (hex)		NCR CORPORATION
-08000E     (base 16)		NCR CORPORATION
-				WORLD HEADQUARTERS
-				DAYTON  OH  45479
-				US
-
-00-DD-09   (hex)		UNGERMANN-BASS INC.
-00DD09     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-00-02   (hex)		XEROX CORPORATION
-000002     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-00-00-03   (hex)		XEROX CORPORATION
-000003     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-00-00-06   (hex)		XEROX CORPORATION
-000006     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-08-00-01   (hex)		COMPUTERVISION CORPORATION
-080001     (base 16)		COMPUTERVISION CORPORATION
-				14 CROSBY DRIVE MS 5-1
-				BEDFORD  MA  01730
-				US
-
-08-00-05   (hex)		SYMBOLICS INC.
-080005     (base 16)		SYMBOLICS INC.
-				257 VASSAR STREET
-				CAMBRIDGE  MA  02139
-				US
-
-00-DD-07   (hex)		UNGERMANN-BASS INC.
-00DD07     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-00-08   (hex)		XEROX CORPORATION
-000008     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-00-00-3D   (hex)		UNISYS
-00003D     (base 16)		UNISYS
-				MS8-010
-				SAN JOSE  CA  95150-6685
-				US
-
-00-DD-0D   (hex)		UNGERMANN-BASS INC.
-00DD0D     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-08-00-64   (hex)		Sitasys AG
-080064     (base 16)		Sitasys AG
-				Freiburgstrasse 251
-				    
-				CH
-
-08-00-02   (hex)		BRIDGE COMMUNICATIONS INC.
-080002     (base 16)		BRIDGE COMMUNICATIONS INC.
-				2081 STIERLING ROAD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-08-00-1A   (hex)		TIARA/ 10NET
-08001A     (base 16)		TIARA/ 10NET
-				7777 WASHINGTON VILLAGE DRIVE
-				DAYTON  OHIO  45459-3957
-				US
-
-08-00-8B   (hex)		PYRAMID TECHNOLOGY CORP.
-08008B     (base 16)		PYRAMID TECHNOLOGY CORP.
-				1295 CHARLESTON ROAD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-08-00-12   (hex)		BELL ATLANTIC INTEGRATED SYST.
-080012     (base 16)		BELL ATLANTIC INTEGRATED SYST.
-				40 TALL PINE DRIVE
-				SUDBURY  MA  01776
-				US
-
-14-A1-BF   (hex)		ASSA ABLOY Korea Co., Ltd Unilock
-14A1BF     (base 16)		ASSA ABLOY Korea Co., Ltd Unilock
-				10f of JEI PLATZ Bldg., 186, Gasandigital 1-ro
-				Geumcheon-gu  Seoul  08502
-				KR
-
-94-83-C4   (hex)		GL Technologies (Hong Kong) Limited
-9483C4     (base 16)		GL Technologies (Hong Kong) Limited
-				103B Enterprise Place, 5W Science Park
-				NT    00000
-				HK
-
-08-00-30   (hex)		ROYAL MELBOURNE INST OF TECH
-080030     (base 16)		ROYAL MELBOURNE INST OF TECH
-				GPO BOX 2476V
-				MELBOURNE  VIC  3001
-				AU
-
-00-00-0B   (hex)		MATRIX CORPORATION
-00000B     (base 16)		MATRIX CORPORATION
-				1203 NEW HOPE ROAD
-				RALEIGH  NORTH CAROLINA   276
-				US
-
-00-00-9B   (hex)		INFORMATION INTERNATIONAL, INC
-00009B     (base 16)		INFORMATION INTERNATIONAL, INC
-				5F., THE 7TH INDUSTRY BLDG.
-				  JAPAN  150
-				JP
-
-9C-93-B0   (hex)		Megatronix (Beijing) Technology Co., Ltd.
-9C93B0     (base 16)		Megatronix (Beijing) Technology Co., Ltd.
-				Floor11,Building C, Rongxin Center Chungyuan Road 34#, chaoyang distric, Beijing, P.R.China
-				Beijing  Beijing  100012
-				CN
-
-64-AE-F1   (hex)		Qingdao Hisense Electronics Co.,Ltd.
-64AEF1     (base 16)		Qingdao Hisense Electronics Co.,Ltd.
-				Qianwangang Roard 218
-				Qingdao  Shandong  266510
-				CN
-
-08-00-16   (hex)		BARRISTER INFO SYS CORP
-080016     (base 16)		BARRISTER INFO SYS CORP
-				ONE TECHNOLOGY CENTER
-				BUFFALO  NY  14203
-				US
-
-44-CB-8B   (hex)		LG Innotek
-44CB8B     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-B4-05-5D   (hex)		Inspur Electronic Information Industry Co.,Ltd.
-B4055D     (base 16)		Inspur Electronic Information Industry Co.,Ltd.
-				No 224 Shanda Road
-				Jinan  Shandong  250013
-				CN
-
-98-48-27   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-984827     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-D4-F5-EF   (hex)		Hewlett Packard Enterprise
-D4F5EF     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-28-BD-89   (hex)		Google, Inc.
-28BD89     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-EC-1B-BD   (hex)		Silicon Laboratories
-EC1BBD     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin    78735
-				US
-
-D8-A3-15   (hex)		vivo Mobile Communication Co., Ltd.
-D8A315     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-80-64-7A   (hex)		Ola Sense Inc
-80647A     (base 16)		Ola Sense Inc
-				764 Avenue A
-				Redondo Beach    90277
-				US
-
-70-F8-2B   (hex)		DWnet Technologies(Suzhou) Corporation
-70F82B     (base 16)		DWnet Technologies(Suzhou) Corporation
-				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
-				Suzhou    21500
-				CN
-
-14-24-75   (hex)		4DReplay, Inc
-142475     (base 16)		4DReplay, Inc
-				1286 Folsom Street
-				San Francisco  CA  94103
-				US
-
-10-DC-B6   (hex)		IEEE Registration Authority
-10DCB6     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F8-9E-28   (hex)		Cisco Meraki
-F89E28     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-F8-C4-F3   (hex)		Shanghai Infinity Wireless Technologies Co.,Ltd.
-F8C4F3     (base 16)		Shanghai Infinity Wireless Technologies Co.,Ltd.
-				Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai
-				Shanghai  Shanghai  200082
-				CN
-
-D4-77-2B   (hex)		Nanjing Ztlink Network Technology Co.,Ltd
-D4772B     (base 16)		Nanjing Ztlink Network Technology Co.,Ltd
-				No.0 Mozhou East Road , Jiangning Economic & Technological Development Zone, Jiangning District
-				Nanjing  Jiangsu  211111
-				CN
-
-64-F9-C0   (hex)		ANALOG DEVICES
-64F9C0     (base 16)		ANALOG DEVICES
-				32990 ALVARADO NILES RD
-				UNION CITY  CA  94587
-				US
-
-18-D0-C5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-18D0C5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-34-ED-1B   (hex)		Cisco Systems, Inc
-34ED1B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-A5-11   (hex)		NETGEAR
-BCA511     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-0A-7B   (hex)		Cornelius Consult
-000A7B     (base 16)		Cornelius Consult
-				Im Vogelsang 21
-				Hattingen  NRW  45527
-				DE
-
-C4-44-7D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4447D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-E9-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-30E98E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-8B-34   (hex)		Shanghai Smart System Technology Co., Ltd
-748B34     (base 16)		Shanghai Smart System Technology Co., Ltd
-				Room 902C-1, 560 Shengxia Road, Zhangjiang Hi-Tech Park, Shanghai 201203, China
-				Shanghai  Shanghai  201210
-				CN
-
-AC-BD-70   (hex)		Huawei Device Co., Ltd.
-ACBD70     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C0-2E-26   (hex)		Private
-C02E26     (base 16)		Private
-
-34-D2-62   (hex)		SZ DJI TECHNOLOGY CO.,LTD
-34D262     (base 16)		SZ DJI TECHNOLOGY CO.,LTD
-				6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd
-				shenzhen  guangdong  518057
-				CN
-
-08-12-A5   (hex)		Amazon Technologies Inc.
-0812A5     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-80-7F-F8   (hex)		Juniper Networks
-807FF8     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-44-03-77   (hex)		IEEE Registration Authority
-440377     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-24-87   (hex)		Transact Campus, Inc.
-002487     (base 16)		Transact Campus, Inc.
-				22601 North 19th Avenue
-				Phoenix  AZ  85027
-				US
-
-B4-E9-A3   (hex)		port industrial automation GmbH
-B4E9A3     (base 16)		port industrial automation GmbH
-				Regensburger Str. 7b
-				Halle (S.)    06132
-				DE
-
-38-E8-EE   (hex)		Nanjing Youkuo Electric Technology Co., Ltd
-38E8EE     (base 16)		Nanjing Youkuo Electric Technology Co., Ltd
-				100 Jiangjun Road,Jiangning
-				Nanjing  Jiangsu  211100
-				CN
-
-90-B8-E0   (hex)		SHENZHEN YANRAY TECHNOLOGY CO.,LTD
-90B8E0     (base 16)		SHENZHEN YANRAY TECHNOLOGY CO.,LTD
-				5A, 4th Building, Huafengzhenbao Industrial Park, Beihuan Road, Shiyan Street, Baoan District, 
-				Shenzhen  Guangdong  518000
-				CN
-
-9C-F5-31   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-9CF531     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-80-E4-55   (hex)		New H3C Technologies Co., Ltd
-80E455     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-2C-4C-C6   (hex)		Murata Manufacturing Co., Ltd.
-2C4CC6     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-7C-21-0D   (hex)		Cisco Systems, Inc
-7C210D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-4C-BC-72   (hex)		Primex Wireless
-4CBC72     (base 16)		Primex Wireless
-				965 Wells Street
-				Lake Geneva  WI  53147
-				US
-
-68-02-B8   (hex)		Compal Broadband Networks, Inc.
-6802B8     (base 16)		Compal Broadband Networks, Inc.
-				13F., No.1, Taiyuan 1st St.
-				Zhubei City  Hsinchu County  30265
-				TW
-
-34-63-D4   (hex)		BIONIX SUPPLYCHAIN TECHNOLOGIES SLU
-3463D4     (base 16)		BIONIX SUPPLYCHAIN TECHNOLOGIES SLU
-				Poligono Pocomaco Avenida Primera Parcela B3 Nave F
-				La Coruña  La Coruña  15190
-				ES
-
-08-F7-E9   (hex)		HRCP Research and Development Partnership
-08F7E9     (base 16)		HRCP Research and Development Partnership
-				1-24-2 Taito, Taito-ku
-				Tokyo    1100016
-				JP
-
-8C-BA-25   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-8CBA25     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
-				Huizhou  Guangdong  516025
-				CN
-
-D4-9E-3B   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
-D49E3B     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-DC-DC-E2   (hex)		Samsung Electronics Co.,Ltd
-DCDCE2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A0-AC-69   (hex)		Samsung Electronics Co.,Ltd
-A0AC69     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-89-FB   (hex)		Samsung Electronics Co.,Ltd
-1089FB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-4B-DD   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-DC4BDD     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-C0-B5-CD   (hex)		Huawei Device Co., Ltd.
-C0B5CD     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-4C-50-77   (hex)		Huawei Device Co., Ltd.
-4C5077     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-2D-BB   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-502DBB     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-5C-3A-3D   (hex)		zte corporation
-5C3A3D     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-30-FD-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-30FD65     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-A1-AE   (hex)		Apple, Inc.
-7CA1AE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-22-FB   (hex)		Apple, Inc.
-3C22FB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-EA-FC   (hex)		ELL-IoT Inc
-58EAFC     (base 16)		ELL-IoT Inc
-				32 Journey
-				Aliso Viejo  CA  92656
-				US
-
-90-13-DA   (hex)		Athom B.V.
-9013DA     (base 16)		Athom B.V.
-				Rigtersbleek-Zandvoort 10
-				Enschede    7521BE 
-				NL
-
-14-11-5D   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-14115D     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-E4-F3-27   (hex)		ATOL LLC
-E4F327     (base 16)		ATOL LLC
-				Bolshaya Novodmitrovskaya str., 14, build 4
-				Moscow    127015
-				RU
-
-68-19-AC   (hex)		Guangzhou Xianyou Intelligent Technogoly CO., LTD
-6819AC     (base 16)		Guangzhou Xianyou Intelligent Technogoly CO., LTD
-				No.32 Xixiu Road, Xiuquan Street,Huadu District
-				Guangzhou  Guangdong  510800
-				CN
-
-E8-2E-0C   (hex)		NETINT Technologies Inc.
-E82E0C     (base 16)		NETINT Technologies Inc.
-				#306, 3500 Gilmore Way
-				Burnaby  BC  V5G0B8
-				CA
-
-18-92-A4   (hex)		Ciena Corporation
-1892A4     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-10-08-2C   (hex)		Texas Instruments
-10082C     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B0-73-5D   (hex)		Huawei Device Co., Ltd.
-B0735D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-5C-3A-45   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-5C3A45     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-A0-3C-31   (hex)		Shenzhen Belon Technology CO.,LTD
-A03C31     (base 16)		Shenzhen Belon Technology CO.,LTD
-				Tsinghua Information
-				Shenzhen  Guangdong  518052
-				CN
-
-A8-97-CD   (hex)		ARRIS Group, Inc.
-A897CD     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-40-4C-77   (hex)		ARRIS Group, Inc.
-404C77     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-2C-E3-10   (hex)		Stratacache
-2CE310     (base 16)		Stratacache
-				40 N Main St, Suite 2600
-				Dayton  OH  45423
-				US
-
-00-22-A0   (hex)		APTIV SERVICES US, LLC
-0022A0     (base 16)		APTIV SERVICES US, LLC
-				5725 Innovation Drive
-				Troy  MI  48098
-				US
-
-A4-30-7A   (hex)		Samsung Electronics Co.,Ltd
-A4307A     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-FC-8E-5B   (hex)		China Mobile Iot Limited company
-FC8E5B     (base 16)		China Mobile Iot Limited company
-				No. 8 Yangliu North Road, Yubei District, Chongqing, China
-				Chong Qing  Chong Qing  401120
-				CN
-
-14-2A-14   (hex)		ShenZhen Selenview Digital Technology Co.,Ltd
-142A14     (base 16)		ShenZhen Selenview Digital Technology Co.,Ltd
-				615,Block A,Huafeng internet Creative Park,107 Gonghe Industrial Road,Baoan District,Shenzhen,China
-				Shenzhen  Guangdong  518102
-				CN
-
-D8-7E-76   (hex)		ITEL MOBILE LIMITED
-D87E76     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-38-4B-5B   (hex)		ZTRON TECHNOLOGY LIMITED
-384B5B     (base 16)		ZTRON TECHNOLOGY LIMITED
-				12/F,JunZi Plaza, Qiaoxiang Road, Futian District
-				Shenzhen  Guangdong  518000
-				CN
-
-B8-61-42   (hex)		Beijing Tricolor Technology Co., Ltd
-B86142     (base 16)		Beijing Tricolor Technology Co., Ltd
-				Room 808, Building 1, Yard 39, Linfeng 2nd Road, Haidian
-				Beijing    102206
-				CN
-
-20-0A-0D   (hex)		IEEE Registration Authority
-200A0D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E4-7C-65   (hex)		Sunstar Communication Technology  Co., Ltd
-E47C65     (base 16)		Sunstar Communication Technology  Co., Ltd
-				4F,Building D1, Mould Industrial Park, No.199 of Xiqu Ave,West High-tech Zone
-				Chengdu  Sichuan  611731
-				CN
-
-9C-54-DA   (hex)		SkyBell Technologies Inc.
-9C54DA     (base 16)		SkyBell Technologies Inc.
-				1 Jenner 
-				Irvine  CA  92618
-				US
-
-4C-49-4F   (hex)		zte corporation
-4C494F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C4-74-1E   (hex)		zte corporation
-C4741E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-D0-78   (hex)		Eltex of Sweden AB
-00D078     (base 16)		Eltex of Sweden AB
-				Södra Portgatan 19
-				OSBY  Skåne  283 50
-				SE
-
-5C-78-F8   (hex)		Huawei Device Co., Ltd.
-5C78F8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B8-27-C5   (hex)		Huawei Device Co., Ltd.
-B827C5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-89-83   (hex)		Samsung Electronics Co.,Ltd
-DC8983     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-5C-CB-99   (hex)		Samsung Electronics Co.,Ltd
-5CCB99     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D4-60-75   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
-D46075     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
-				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
-				 Beijing    100085
-				CN
-
-78-C5-F8   (hex)		Huawei Device Co., Ltd.
-78C5F8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D4-5D-64   (hex)		ASUSTek COMPUTER INC.
-D45D64     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-90-B1-44   (hex)		Samsung Electronics Co.,Ltd
-90B144     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-48-DD-0C   (hex)		eero inc.
-48DD0C     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-94-0C-98   (hex)		Apple, Inc.
-940C98     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-FB-E9   (hex)		Apple, Inc.
-E8FBE9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-EC-0D   (hex)		Apple, Inc.
-38EC0D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-27-8C   (hex)		BUFFALO.INC
-58278C     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-14-0A-C5   (hex)		Amazon Technologies Inc.
-140AC5     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-20-83-F8   (hex)		Advanced Digital Broadcast SA
-2083F8     (base 16)		Advanced Digital Broadcast SA
-				Route de Lausanne 319
-				Bellevue    CH-1293
-				SZ
-
-C8-C7-50   (hex)		Motorola Mobility LLC, a Lenovo Company
-C8C750     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-2C-DC-D7   (hex)		AzureWave Technology Inc.
-2CDCD7     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-34-E3-DA   (hex)		Hoval Aktiengesellschaft
-34E3DA     (base 16)		Hoval Aktiengesellschaft
-				Austrasse 70
-				Vaduz    9490
-				LI
-
-E0-BB-9E   (hex)		Seiko Epson Corporation
-E0BB9E     (base 16)		Seiko Epson Corporation
-				2070 Kotobuki Koaka
-				Matsumoto-shi  Nagano-ken  399-8702
-				JP
-
-48-D2-4F   (hex)		Sagemcom Broadband SAS
-48D24F     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-E4-AA-EC   (hex)		Tianjin Hualai Technology Co., Ltd
-E4AAEC     (base 16)		Tianjin Hualai Technology Co., Ltd
-				Overseas Chinese business building No. 10, Jinping Road, Nankai District, Tianjin
-				TIANJIN    300190
-				CN
-
-94-BE-46   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-94BE46     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-AC-F8-CC   (hex)		ARRIS Group, Inc.
-ACF8CC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-8C-5A-25   (hex)		ARRIS Group, Inc.
-8C5A25     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-48-3F-DA   (hex)		Espressif Inc.
-483FDA     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-6C-5D-3A   (hex)		Microsoft Corporation
-6C5D3A     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND    98052
-				US
-
-CC-D4-2E   (hex)		Arcadyan Corporation
-CCD42E     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-C8-53-E1   (hex)		Beijing Bytedance Network Technology Co., Ltd
-C853E1     (base 16)		Beijing Bytedance Network Technology Co., Ltd
-				No.1 Building, Zhonghang Square, West Road of the Northern 3rd Circuit, Haidian Distrct
-				Beijing  Beijing  100098
-				CN
-
-14-16-9D   (hex)		Cisco Systems, Inc
-14169D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-48-A2-E6   (hex)		Resideo
-48A2E6     (base 16)		Resideo
-				2 Corporate Center Dr.
-				Melville  NY  11747
-				US
-
-90-E2-FC   (hex)		IEEE Registration Authority
-90E2FC     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F0-08-D1   (hex)		Espressif Inc.
-F008D1     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-58-94-B2   (hex)		BrainCo
-5894B2     (base 16)		BrainCo
-				????????????????1107?
-				???  ???  518000
-				CN
-
-B0-95-75   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-B09575     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-B4-B0-55   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B4B055     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-8C-16   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-048C16     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-98-DD-5B   (hex)		TAKUMI JAPAN LTD
-98DD5B     (base 16)		TAKUMI JAPAN LTD
-				3-9-3 Uchiyama building 7F Nishishinbashi
-				Minato-ku Tokyo  Tokyo  1050003
-				JP
-
-3C-5C-F1   (hex)		eero inc.
-3C5CF1     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-14-AE-85   (hex)		IEEE Registration Authority
-14AE85     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-90-74-9D   (hex)		IRay Technology Co., Ltd.
-90749D     (base 16)		IRay Technology Co., Ltd.
-				11th Guiyang St.,
-				Yantai  Shandong  264000
-				CN
-
-8C-3B-32   (hex)		Microfan B.V.
-8C3B32     (base 16)		Microfan B.V.
-				Industriestraat 23
-				Horst  Limburg  5961 PH
-				NL
-
-D0-D3-E0   (hex)		Aruba, a Hewlett Packard Enterprise Company
-D0D3E0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-64-5C-F3   (hex)		ParanTek Inc.
-645CF3     (base 16)		ParanTek Inc.
-				3F, 40-15 Gilju-Ro, 411 Beon-Gil
-				Wonmi-Gu, Bucheon City  Gyeonggi-Do  14488
-				KR
-
-B0-CC-FE   (hex)		Huawei Device Co., Ltd.
-B0CCFE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-0D-F9   (hex)		Huawei Device Co., Ltd.
-540DF9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-66-19   (hex)		Huawei Device Co., Ltd.
-006619     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-FC-39-64   (hex)		ITEL MOBILE LIMITED
-FC3964     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-14-47-2D   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-14472D     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-E4-90-FD   (hex)		Apple, Inc.
-E490FD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-AB-1A   (hex)		Apple, Inc.
-84AB1A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-6D-31   (hex)		FIREWALLA INC
-206D31     (base 16)		FIREWALLA INC
-				75 E. Santa Clara St. STE 600
-				San Jose  CA  95113
-				US
-
-D0-65-44   (hex)		Apple, Inc.
-D06544     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-6F-2D   (hex)		Shenzhen Sundray Technologies Company Limited
-186F2D     (base 16)		Shenzhen Sundray Technologies Company Limited
-				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
-				Shenzhen  Guangdong  518057
-				CN
-
-F8-4F-AD   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-F84FAD     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-4C-0A-3D   (hex)		ADNACOM INC.
-4C0A3D     (base 16)		ADNACOM INC.
-				200-5050 Kingsway
-				Burnaby  BC  V5H 4H2
-				CA
-
-3C-80-6B   (hex)		Hunan Voc Acoustics Technology Co., Ltd.
-3C806B     (base 16)		Hunan Voc Acoustics Technology Co., Ltd.
-				State Industrialpark, Jiulong Development Zone, Yanling County
-				Zhuzhou  Hunan  412500
-				CN
-
-60-DE-35   (hex)		GITSN, Inc.
-60DE35     (base 16)		GITSN, Inc.
-				 #601~602, Daerung Post Tower 1, 288, Digital-ro
-				Guro-gu  Seoul  08390
-				KR
-
-28-31-7E   (hex)		Hongkong Nano IC Technologies Co., Ltd
-28317E     (base 16)		Hongkong Nano IC Technologies Co., Ltd
-				 Rm. 19C, Lockhart Ctr., 301-307 Lockhart Rd., Wan Chai, Hong Kong.
-				Hongkong    999077
-				CN
-
-A8-41-22   (hex)		China Mobile (Hangzhou) Information Technology Co.,Ltd.
-A84122     (base 16)		China Mobile (Hangzhou) Information Technology Co.,Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-6C-DD-BC   (hex)		Samsung Electronics Co.,Ltd
-6CDDBC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-7F-76   (hex)		Cisco Systems, Inc
-CC7F76     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-40-BC-68   (hex)		Wuhan Funshion Online Technologies Co.,Ltd
-40BC68     (base 16)		Wuhan Funshion Online Technologies Co.,Ltd
-				5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan
-				Wuhan  CN/Hubei  430000
-				CN
-
-DC-98-40   (hex)		Microsoft Corporation
-DC9840     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND    98052
-				US
-
-44-76-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-447654     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-D9-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7CD9A0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F0-33-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F033E5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-F1-8C   (hex)		Huawei Device Co., Ltd.
-B4F18C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B8-CE-F6   (hex)		Mellanox Technologies, Inc.
-B8CEF6     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-B8-02-A4   (hex)		Aeonsemi, Inc.
-B802A4     (base 16)		Aeonsemi, Inc.
-				Cassia Court, Suite 716, 10 Market Street
-				Camana Bay  Grand Cayman  KY1-9006
-				KY
-
-E4-83-26   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E48326     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-05-BB   (hex)		IEEE Registration Authority
-9405BB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-5F-AD   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-8C5FAD     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-AC-C2-5D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-ACC25D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-8C-0C-87   (hex)		Nokia
-8C0C87     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-C4-32-D1   (hex)		Farlink Technology Limited
-C432D1     (base 16)		Farlink Technology Limited
-				Flat A&B,9/F,Wing Cheong Factory Building,121 King Lam Street,Cheung Sha Wan,Hong Kong.
-				Hongkong    0000
-				HK
-
-CC-41-8E   (hex)		MSA Innovation
-CC418E     (base 16)		MSA Innovation
-				1100 Cranberry Woods Road
-				Cranberry Township  PA  16066
-				US
-
-CC-A7-C1   (hex)		Google, Inc.
-CCA7C1     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-38-84-79   (hex)		Cisco Meraki
-388479     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-7C-9E-BD   (hex)		Espressif Inc.
-7C9EBD     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-1C-02-19   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-1C0219     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-C8-D7-78   (hex)		BSH Hausgeraete GmbH
-C8D778     (base 16)		BSH Hausgeraete GmbH
-				Im Gewerbepark B10
-				Regensburg    93059
-				DE
-
-9C-61-1D   (hex)		Panasonic Corporation of North America
-9C611D     (base 16)		Panasonic Corporation of North America
-				1200 Ridgeway Ave
-				Rochester  NY  14615
-				US
-
-C0-95-DA   (hex)		NXP India Private Limited
-C095DA     (base 16)		NXP India Private Limited
-				1st Floor, Muttha Towers, Don Bosco Marg, Off Airport Road, Yerwada
-				Pune  Maharashtra  411006
-				IN
-
-B4-22-00   (hex)		Brother Industries, LTD.
-B42200     (base 16)		Brother Industries, LTD.
-				15-1, Naeshirocho, Mizuho-ku
-				NAGOYA    4678561
-				JP
-
-68-49-B2   (hex)		CARLO GAVAZZI LTD
-6849B2     (base 16)		CARLO GAVAZZI LTD
-				BLB042, Bulebel Industrial Estate 
-				Zejtun     ZTN 3000
-				MT
-
-48-7A-FF   (hex)		ESSYS
-487AFF     (base 16)		ESSYS
-				gaetbeol-ro
-				Incheon    21999
-				KR
-
-40-B6-E7   (hex)		Huawei Device Co., Ltd.
-40B6E7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D0-B4-5D   (hex)		Huawei Device Co., Ltd.
-D0B45D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-88-36-CF   (hex)		Huawei Device Co., Ltd.
-8836CF     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A4-C5-4E   (hex)		Huawei Device Co., Ltd.
-A4C54E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D4-BB-E6   (hex)		Huawei Device Co., Ltd.
-D4BBE6     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-9E-EE   (hex)		Positivo Tecnologia S.A.
-009EEE     (base 16)		Positivo Tecnologia S.A.
-				João Bettega, 5200
-				Curitiba  Paraná  81350-000
-				BR
-
-90-B8-32   (hex)		Extreme Networks, Inc.
-90B832     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-40-2F-86   (hex)		LG Innotek
-402F86     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-D4-22-CD   (hex)		Xsens Technologies B.V.
-D422CD     (base 16)		Xsens Technologies B.V.
-				Pantheon 6-a
-				Enschede    7521 PR
-				NL
-
-C8-67-5E   (hex)		Extreme Networks, Inc.
-C8675E     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-9C-5D-12   (hex)		Extreme Networks, Inc.
-9C5D12     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-F0-9C-E9   (hex)		Extreme Networks, Inc.
-F09CE9     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-C4-13-E2   (hex)		Extreme Networks, Inc.
-C413E2     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-F4-EB-9F   (hex)		Ellu Company 2019 SL
-F4EB9F     (base 16)		Ellu Company 2019 SL
-				Paseo de la Castellana 144 14B
-				Madrid  Madrid  28046
-				ES
-
-E8-98-C2   (hex)		ZETLAB Company
-E898C2     (base 16)		ZETLAB Company
-				Savelkinsky passage, 4
-				Zelenograd  Moscow  124482
-				RU
-
-D4-1A-C8   (hex)		Nippon Printer Engineering
-D41AC8     (base 16)		Nippon Printer Engineering
-				2660 Katsuyama
-				Fujikawaguchiko-town  Yamanashi-Pref.  401-0310
-				JP
-
-50-61-F6   (hex)		Universal Electronics, Inc.
-5061F6     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-00-0C-32   (hex)		Avionic Design GmbH
-000C32     (base 16)		Avionic Design GmbH
-				Wragekamp 10
-				Hamburg    22397
-				DE
-
-00-0A-0D   (hex)		Amphenol
-000A0D     (base 16)		Amphenol
-				Holzhauser Strasse 175
-				Berlin    13509
-				DE
-
-F4-54-20   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-F45420     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-				Av. Buriti, 1900 – Setor B – Distrito Industrial
-				Manaus  Amazonas  69075-000
-				BR
-
-4C-40-88   (hex)		SANSHIN ELECTRONICS CO.,LTD.
-4C4088     (base 16)		SANSHIN ELECTRONICS CO.,LTD.
-				4-4-12, Shiba, Minato-ku,
-				Tokyo    108-8404
-				JP
-
-64-DD-E9   (hex)		Xiaomi Communications Co Ltd
-64DDE9     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-0C-81-7D   (hex)		EEP Elektro-Elektronik Pranjic GmbH
-0C817D     (base 16)		EEP Elektro-Elektronik Pranjic GmbH
-				Am Luftschacht 21
-				Gelsenkirchen    45886
-				DE
-
-04-F5-F4   (hex)		Proxim Wireless
-04F5F4     (base 16)		Proxim Wireless
-				2114 Ringwood Ave
-				San Jose  CA  95131
-				US
-
-C8-BC-E5   (hex)		Sense Things Japan INC.
-C8BCE5     (base 16)		Sense Things Japan INC.
-				3-5-7 Kawaramachi,Chuo-ku
-				Osaka    541-0048
-				JP
-
-E8-B4-70   (hex)		IEEE Registration Authority
-E8B470     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-1B-ED   (hex)		Brocade Communications Systems LLC
-001BED     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-0C-DB   (hex)		Brocade Communications Systems LLC
-000CDB     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-04-80   (hex)		Brocade Communications Systems LLC
-000480     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-60-9C-9F   (hex)		Brocade Communications Systems LLC
-609C9F     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-00-88   (hex)		Brocade Communications Systems LLC
-000088     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-60-DF   (hex)		Brocade Communications Systems LLC
-0060DF     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-60-69   (hex)		Brocade Communications Systems LLC
-006069     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-05-33   (hex)		Brocade Communications Systems LLC
-000533     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-B0-45-02   (hex)		Huawei Device Co., Ltd.
-B04502     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-1F-F1   (hex)		Huawei Device Co., Ltd.
-1C1FF1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B4-EF-1C   (hex)		360 AI Technology Co.Ltd
-B4EF1C     (base 16)		360 AI Technology Co.Ltd
-				MTK Building B?No.6 Jiuxianqiao Road, Chaoyang District, Beijing, P.R.C. 
-				Beijing  Beijing  100015
-				CN
-
-14-DE-39   (hex)		Huawei Device Co., Ltd.
-14DE39     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B8-F0-09   (hex)		Espressif Inc.
-B8F009     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-FC-71-FA   (hex)		Trane Technologies
-FC71FA     (base 16)		Trane Technologies
-				6200 Troup Hwy.
-				Tyler  TX  75707
-				US
-
-CC-BE-59   (hex)		Calix Inc.
-CCBE59     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-84-A3-B5   (hex)		Propulsion systems
-84A3B5     (base 16)		Propulsion systems
-				Dooren 72
-				Merchtem  Vlaams brabant  1785
-				BE
-
-30-FC-EB   (hex)		LG Electronics (Mobile Communications)
-30FCEB     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-24-68-B0   (hex)		Samsung Electronics Co.,Ltd
-2468B0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-13-38   (hex)		Kimball Electronics Group, LLC
-1C1338     (base 16)		Kimball Electronics Group, LLC
-				1205 Kimball Blvd
-				Jasper  IN  47546
-				US
-
-9C-ED-FA   (hex)		EVUlution AG
-9CEDFA     (base 16)		EVUlution AG
-				Via da Clalt 12
-				Poschiavo  GR  7742
-				CH
-
-EC-63-ED   (hex)		Hyundai Autoever Corp.
-EC63ED     (base 16)		Hyundai Autoever Corp.
-				38, Teheran-ro 114-gil
-				Gangnam-gu, Seoul    06176
-				KR
-
-D4-67-61   (hex)		XonTel Technology Co.
-D46761     (base 16)		XonTel Technology Co.
-				XonTel, Borj ALadel Tower, Fahad Al-Salem St Fl 21
-				Kuwait    0000
-				KW
-
-E4-41-22   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-E44122     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-9C-19-C2   (hex)		Dongguan Liesheng Electronic Co., Ltd.
-9C19C2     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
-				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
-				dongguan   guangdong  523000
-				CN
-
-BC-26-A1   (hex)		FACTORY FIVE Corporation
-BC26A1     (base 16)		FACTORY FIVE Corporation
-				3-391-1, Kamikitadai,
-				 Higashiyamato  Tokyo  207-0023
-				JP
-
-74-CB-F3   (hex)		Lava international limited
-74CBF3     (base 16)		Lava international limited
-				A-154D, Sector-63
-				Noida  Uttar Pradesh  201301
-				IN
-
-F0-D1-4F   (hex)		LINEAR LLC
-F0D14F     (base 16)		LINEAR LLC
-				5919 Sea Otter Place
-				Carlsbad  CA  92010
-				US
-
-00-11-68   (hex)		HomeLogic LLC
-001168     (base 16)		HomeLogic LLC
-				5919 Sea Otter Place
-				Carlsbad  CA  92010
-				US
-
-18-DF-C1   (hex)		Aetheros
-18DFC1     (base 16)		Aetheros
-				909 Montgomery Street, Suite 104
-				San Francisco    94133
-				US
-
-FC-BC-0E   (hex)		Zhejiang Cainiao Supply Chain Management Co., Ltd
-FCBC0E     (base 16)		Zhejiang Cainiao Supply Chain Management Co., Ltd
-				Block B1, XIXI center, No.588 West Wenyi Road, Xihu District
-				Hangzhou  Zhejiang  310000
-				CN
-
-2C-D0-66   (hex)		Xiaomi Communications Co Ltd
-2CD066     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-B0-5C-DA   (hex)		HP Inc.
-B05CDA     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-DC-BD-7A   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
-DCBD7A     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-90-16-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9016BA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-AA-EF   (hex)		Huawei Device Co., Ltd.
-60AAEF     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D0-F3-F5   (hex)		Huawei Device Co., Ltd.
-D0F3F5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D4-46-49   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D44649     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-00-B0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9400B0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-79-EF   (hex)		Greenpacket Berhad, Taiwan
-2479EF     (base 16)		Greenpacket Berhad, Taiwan
-				B-23A-3, The Ascent Paradigm, No. 1, Jalan SS7/26A, Kelana Jaya, 47301 Petaling Jaya
-				Petaling Jaya  Selangor  47301
-				MY
-
-AC-23-34   (hex)		Infinix mobility limited
-AC2334     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-00-2B-67   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-002B67     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-F8-BC-0E   (hex)		eero inc.
-F8BC0E     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-50-E0-39   (hex)		Zyxel Communications Corporation
-50E039     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-B8-57-76   (hex)		lignex1
-B85776     (base 16)		lignex1
-				354-25, Sanhodae-ro
-				Gumi-si  Gyeongsangbuk-do, Korea  39262
-				KR
-
-24-00-FA   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd
-2400FA     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  311100
-				CN
-
-C8-3D-FC   (hex)		AlphaTheta Corporation
-C83DFC     (base 16)		AlphaTheta Corporation
-				6F,Yokohama i-Mark Place, 4-4-5 Minatomirai, Nishi-ku
-				Yokohama  Kanagawa  220-0012
-				JP
-
-E0-19-95   (hex)		Nutanix
-E01995     (base 16)		Nutanix
-				1740 Technology Drive Ste #150
-				San Jose  CA  95110
-				US
-
-F8-51-28   (hex)		SimpliSafe
-F85128     (base 16)		SimpliSafe
-				294 Washington St
-				Boston  MA  02108
-				US
-
-AC-1F-09   (hex)		shenzhen RAKwireless technology  Co.,Ltd
-AC1F09     (base 16)		shenzhen RAKwireless technology  Co.,Ltd
-				Room 506, Bldg B, New Compark, Pingshan First Road, Taoyuan Street,Nanshan District
-				shenzhen  guangdong  518057
-				CN
-
-BC-13-A8   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-BC13A8     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-90-77-EE   (hex)		Cisco Systems, Inc
-9077EE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-3C-13-CC   (hex)		Cisco Systems, Inc
-3C13CC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-94-E3-EE   (hex)		zte corporation
-94E3EE     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D8-DC-40   (hex)		Apple, Inc.
-D8DC40     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-5F-C5   (hex)		Apple, Inc.
-805FC5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-F9-20   (hex)		Cisco Systems, Inc
-10F920     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-69-80   (hex)		Apple, Inc.
-206980     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-32-A8   (hex)		Intel Corporate
-6432A8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-80-19-34   (hex)		Intel Corporate
-801934     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-40-A3-CC   (hex)		Intel Corporate
-40A3CC     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-E4-A7-A0   (hex)		Intel Corporate
-E4A7A0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-3C-4D-BE   (hex)		Apple, Inc.
-3C4DBE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-26-2C   (hex)		Apple, Inc.
-48262C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-7D-DA   (hex)		Apple, Inc.
-147DDA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C4-91-0C   (hex)		Apple, Inc.
-C4910C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-99-61   (hex)		Sagemcom Broadband SAS
-6C9961     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-50-C7-09   (hex)		Juniper Networks
-50C709     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-80-6D-97   (hex)		Private
-806D97     (base 16)		Private
-
-64-5D-86   (hex)		Intel Corporate
-645D86     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-18-1D-EA   (hex)		Intel Corporate
-181DEA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-18-56-80   (hex)		Intel Corporate
-185680     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-A0-A4-C5   (hex)		Intel Corporate
-A0A4C5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-F4-D1-08   (hex)		Intel Corporate
-F4D108     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-20-79-18   (hex)		Intel Corporate
-207918     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-A8-6D-AA   (hex)		Intel Corporate
-A86DAA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-38-00-25   (hex)		Intel Corporate
-380025     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-C0-E3-A0   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-C0E3A0     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-F4-C1-14   (hex)		Technicolor CH USA Inc.
-F4C114     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-8C-E4-68   (hex)		Guangzhou Sageran Technology Co., Ltd.
-8CE468     (base 16)		Guangzhou Sageran Technology Co., Ltd.
-				Room 1902, Ruian Guangzhou Center, 374 Beijing Road, Yuexiu District
-				Guangzhou  Guangdong  510030
-				CN
-
-C8-B2-9B   (hex)		Intel Corporate
-C8B29B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-6C-6A-77   (hex)		Intel Corporate
-6C6A77     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-A4-B1-C1   (hex)		Intel Corporate
-A4B1C1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-34-2E-B7   (hex)		Intel Corporate
-342EB7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-8C-C6-81   (hex)		Intel Corporate
-8CC681     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-CC-F9-E4   (hex)		Intel Corporate
-CCF9E4     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-3C-58-C2   (hex)		Intel Corporate
-3C58C2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-E4-5E-37   (hex)		Intel Corporate
-E45E37     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-24-41-8C   (hex)		Intel Corporate
-24418C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-60-F2-62   (hex)		Intel Corporate
-60F262     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-C0-B8-83   (hex)		Intel Corporate
-C0B883     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-C8-09-A8   (hex)		Intel Corporate
-C809A8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-90-78-41   (hex)		Intel Corporate
-907841     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-58-A0-23   (hex)		Intel Corporate
-58A023     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-D4-D2-52   (hex)		Intel Corporate
-D4D252     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-28-48-E7   (hex)		Huawei Device Co., Ltd.
-2848E7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-D3-B0   (hex)		Intel Corporate
-04D3B0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-E0-6C-A6   (hex)		Creotech Instruments S.A.
-E06CA6     (base 16)		Creotech Instruments S.A.
-				ul. Gen. L. Okulickiego 7/9
-				Piaseczno  Mazovia  05-500
-				PL
-
-44-68-0C   (hex)		Wacom Co.,Ltd.
-44680C     (base 16)		Wacom Co.,Ltd.
-				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
-				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
-				JP
-
-98-0E-24   (hex)		Phytium Technology Co.,Ltd.
-980E24     (base 16)		Phytium Technology Co.,Ltd.
-				Building5,XinAn Business Square,Haiyuan Middle Road Binhai New District,
-				Tianjin    300450
-				CN
-
-A8-30-BC   (hex)		Samsung Electronics Co.,Ltd
-A830BC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-63-DE   (hex)		CLOUDWALK TECHNOLOGY CO.,LTD
-0063DE     (base 16)		CLOUDWALK TECHNOLOGY CO.,LTD
-				Five Floors of Block 106, West Jinkai Avenue, Yubei District
-				Chongqing  Chongqing  401120
-				CN
-
-60-A4-23   (hex)		Silicon Laboratories
-60A423     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-78-46-D4   (hex)		Samsung Electronics Co.,Ltd
-7846D4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-3E-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E43EC6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-38-88-1E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-38881E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-DB-07   (hex)		Intel Corporate
-2CDB07     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-98-8D-46   (hex)		Intel Corporate
-988D46     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-E4-26-8B   (hex)		Huawei Device Co., Ltd.
-E4268B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-68-88-A1   (hex)		Universal Electronics, Inc.
-6888A1     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-00-1E-B2   (hex)		LG Innotek
-001EB2     (base 16)		LG Innotek
-				Hanyang Univ. 1271, Sa-dong, Sangrok-gu
-				Ansan-si  Gyeonggi-do  426-791
-				KR
-
-C0-86-B3   (hex)		Shenzhen Voxtech Co., Ltd.
-C086B3     (base 16)		Shenzhen Voxtech Co., Ltd.
-				Floors 1-4,Factory Building 26,Shancheng Industrial Park,Shiyan Street,Bao'an District,Shenzhen, Guangdong,China
-				Shenzhen     518000
-				CN
-
-44-AD-B1   (hex)		Sagemcom Broadband SAS
-44ADB1     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-1C-98-C1   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-1C98C1     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-A0-9B-17   (hex)		Taicang T&W Electronics
-A09B17     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-44-01-BB   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-4401BB     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-A0-D8-3D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-A0D83D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-58-F2-FC   (hex)		Huawei Device Co., Ltd.
-58F2FC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-3A-EA   (hex)		Cisco Systems, Inc
-643AEA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D0-14-11   (hex)		IEEE Registration Authority
-D01411     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-3C-53-D7   (hex)		CEDES AG
-3C53D7     (base 16)		CEDES AG
-				Kantonsstrasse 14
-				Landquart    7302
-				CH
-
-E8-13-6E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8136E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-AE-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CAE13     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-2E-FE   (hex)		Shenzhen Comnect Technology Co.,LTD
-4C2EFE     (base 16)		Shenzhen Comnect Technology Co.,LTD
-				G Zone, 3/F, Building 1, Baisha High-Tech Park, No. 3011, Shahe Road West, XiLi Street, Nanshan District
-				Shenzhen    518055
-				CN
-
-DC-D4-44   (hex)		Huawei Device Co., Ltd.
-DCD444     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E0-B2-60   (hex)		TENO NETWORK TECHNOLOGIES COMPANY LIMITED
-E0B260     (base 16)		TENO NETWORK TECHNOLOGIES COMPANY LIMITED
-				RM 1302, 13/F CHEONG K BLDG 84-86 DES VOEUX RD CENTRAL  HONG KONG
-				Hong Kong    999077
-				HK
-
-A4-46-B4   (hex)		Huawei Device Co., Ltd.
-A446B4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-0C-C8-44   (hex)		Cambridge Mobile Telematics, Inc.
-0CC844     (base 16)		Cambridge Mobile Telematics, Inc.
-				One Broadway, 14th Floor
-				Cambridge  MA  02142
-				US
-
-E8-DA-20   (hex)		Nintendo Co.,Ltd
-E8DA20     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-48-23-35   (hex)		Dialog Semiconductor Hellas SA
-482335     (base 16)		Dialog Semiconductor Hellas SA
-				Achileos 8 & Katsoni Str
-				Kalithea, Athens    17674
-				GR
-
-8C-85-C1   (hex)		Aruba, a Hewlett Packard Enterprise Company
-8C85C1     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-20-A1-71   (hex)		Amazon Technologies Inc.
-20A171     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-7C-F9-A0   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-7CF9A0     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-6C-A4-D1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-6CA4D1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-54-AB-3A   (hex)		Quanta Computer Inc.
-54AB3A     (base 16)		Quanta Computer Inc.
-				No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang, Tao Yuan Shien, Taiwan, R. O. C.
-				Taoyuan  Taiwan  33377
-				TW
-
-E8-9A-8F   (hex)		Quanta Computer Inc.
-E89A8F     (base 16)		Quanta Computer Inc.
-				211, Wen Hwa 2nd Rd.,Kuei Shan, Tao Yuan 
-				TAIPEI    33377
-				TW
-
-EC-6C-9A   (hex)		Arcadyan Corporation
-EC6C9A     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-34-6D-9C   (hex)		Carrier Corporation
-346D9C     (base 16)		Carrier Corporation
-				6304 Thompson Rd
-				East Syracuse  NY  13057
-				US
-
-D4-F7-56   (hex)		zte corporation
-D4F756     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E0-69-3A   (hex)		Innophase Inc.
-E0693A     (base 16)		Innophase Inc.
-				6815 Flanders Drive Suite 150
-				San Diego  CA  92121
-				US
-
-54-88-DE   (hex)		Cisco Systems, Inc
-5488DE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-78-2B-64   (hex)		Bose Corporation
-782B64     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-24-FD-0D   (hex)		Intelbras
-24FD0D     (base 16)		Intelbras
-				BR 101, KM 210
-				São Jose  Santa Catarina  88104-800
-				BR
-
-34-55-94   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-345594     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-9C-6B-37   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-9C6B37     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-A8-37-59   (hex)		Huawei Device Co., Ltd.
-A83759     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-40-AA-56   (hex)		China Dragon Technology Limited
-40AA56     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-68-54-5A   (hex)		Intel Corporate
-68545A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-3C-E3-E7   (hex)		China Mobile Group Device Co.,Ltd.
-3CE3E7     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-CC-47-BD   (hex)		Rhombus Systems
-CC47BD     (base 16)		Rhombus Systems
-				770 L St, Suite 1480
-				Sacramento  CA  95814
-				US
-
-4C-93-A6   (hex)		IEEE Registration Authority
-4C93A6     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-1E-31   (hex)		infomark
-001E31     (base 16)		infomark
-				5F.,Geown Bldg.,1360-53
-				Seoul  Seocho-dong,Seocho-gu  137-863
-				KR
-
-50-F7-ED   (hex)		Huawei Device Co., Ltd.
-50F7ED     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-4C-B9-9B   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-4CB99B     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-BC-7E-8B   (hex)		Samsung Electronics Co.,Ltd
-BC7E8B     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-0C-31-DC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C31DC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-40-DD-D1   (hex)		Beautiful Card Corporation
-40DDD1     (base 16)		Beautiful Card Corporation
-				Wenming 1st St.,
-				Taoyuan    33383
-				TW
-
-C0-E7-BF   (hex)		Sichuan AI-Link Technology Co., Ltd.
-C0E7BF     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-54-77-8A   (hex)		Hewlett Packard Enterprise
-54778A     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-24-71-52   (hex)		Dell Inc.
-247152     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-64-33-DB   (hex)		Texas Instruments
-6433DB     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A4-06-E9   (hex)		Texas Instruments
-A406E9     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B0-B1-13   (hex)		Texas Instruments
-B0B113     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-4C-AE-EC   (hex)		Guangzhou limee technology co.,LTD
-4CAEEC     (base 16)		Guangzhou limee technology co.,LTD
-				No.2, Yichuang Street, Zhongxin Guangzhou Knowledge City, Huangpu District, Guangzhou
-				Guangzhou  Guangdong  510555
-				CN
-
-00-40-AB   (hex)		ROLAND DG CORPORATION
-0040AB     (base 16)		ROLAND DG CORPORATION
-				1-1-3 Shinmiyakoda, Kita-ku
-				Hamamatsu-shi  Shizuoka-ken  431-2103
-				JP
-
-00-12-B4   (hex)		Work Microwave GmbH
-0012B4     (base 16)		Work Microwave GmbH
-				Rudolf-Diesel-Ring 2
-				Holzkirchen    83607
-				DE
-
-24-B1-05   (hex)		Prama Hikvision India Private Limited
-24B105     (base 16)		Prama Hikvision India Private Limited
-				Prama Hikvision India Pvt Ltd, Akurli Cross Road No 1, Kandivali East
-				Mumbai  Maharashtra  400101
-				IN
-
-80-60-B7   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-8060B7     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-90-AA-C3   (hex)		Hitron Technologies. Inc
-90AAC3     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-44-91-7C   (hex)		HMD Global Oy
-44917C     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo  Paimio  02600
-				FI
-
-DC-72-23   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-DC7223     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-34-20-E3   (hex)		Ruckus Wireless
-3420E3     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-24-5F-9F   (hex)		Huawei Device Co., Ltd.
-245F9F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-CC-B0-A8   (hex)		Huawei Device Co., Ltd.
-CCB0A8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-28-73   (hex)		Huawei Device Co., Ltd.
-502873     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-8C-47-BE   (hex)		Dell Inc.
-8C47BE     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-14-2C-78   (hex)		GooWi Wireless Technology Co., Limited
-142C78     (base 16)		GooWi Wireless Technology Co., Limited
-				RM402 Building212, Tairan Technology Park, Futian District
-				Shenzhen  Guangdong  518000
-				CN
-
-98-FC-84   (hex)		IEEE Registration Authority
-98FC84     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-20-F4-4F   (hex)		Nokia
-20F44F     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-04-76-B0   (hex)		Cisco Systems, Inc
-0476B0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-40-F0-78   (hex)		Cisco Systems, Inc
-40F078     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-78-D7-1A   (hex)		Ciena Corporation
-78D71A     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-78-53-F2   (hex)		Roxton Systems Ltd.
-7853F2     (base 16)		Roxton Systems Ltd.
-				Floor 4, premise 1, room 6, Ostapovsky proezd,15k2
-				Moscow  Moscow  109316
-				RU
-
-9C-69-37   (hex)		Qorvo International Pte. Ltd.
-9C6937     (base 16)		Qorvo International Pte. Ltd.
-				1 Changi Business Park Avenue 1
-				#04-01    486058
-				SG
-
-F8-2E-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F82E3F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-A5-AF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-90A5AF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-7C-3F   (hex)		ASUSTek COMPUTER INC.
-3C7C3F     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-34-91-6F   (hex)		UserGate Ltd.
-34916F     (base 16)		UserGate Ltd.
-				Nikolaeva str., 11, 602
-				Novosibirsk    630090
-				RU
-
-0C-8B-7D   (hex)		Vizio, Inc
-0C8B7D     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-EC-4D-3E   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-EC4D3E     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-D8-A4-91   (hex)		Huawei Device Co., Ltd.
-D8A491     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-68-13-24   (hex)		Huawei Device Co., Ltd.
-681324     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A8-C0-92   (hex)		Huawei Device Co., Ltd.
-A8C092     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-60-CA   (hex)		Apple, Inc.
-9860CA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-90-BB   (hex)		Apple, Inc.
-4490BB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-FD-6A   (hex)		Apple, Inc.
-34FD6A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-3E-B3   (hex)		Zyxel Communications Corporation
-EC3EB3     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-8C-D6-7F   (hex)		EM Microelectronic
-8CD67F     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-5C-91-FD   (hex)		Jaewoncnc
-5C91FD     (base 16)		Jaewoncnc
-				A-501~507, H-Businesspark, 25 Beobwon-ro11gil, Songpa-gu, Seoul, Korea
-				Seoul    05836
-				KR
-
-FC-44-9F   (hex)		zte corporation
-FC449F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-20-4E-F6   (hex)		AzureWave Technology Inc.
-204EF6     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-44-35-83   (hex)		Apple, Inc.
-443583     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-CA-73   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-38CA73     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-				Chudong science and technology park, 111 shaxin road, tangxia town,
-				dongguan city  guangdong province  523710
-				CN
-
-6C-0D-C4   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-6C0DC4     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-C4-40-F6   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-C440F6     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-00-55-B1   (hex)		Shanghai Baud Data Communication Co.,Ltd.
-0055B1     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
-				NO.123 JULI RD
-				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
-				CN
-
-74-90-1F   (hex)		Ragile Networks Inc.
-74901F     (base 16)		Ragile Networks Inc.
-				35649 Embassy common Fremont ca 94536
-				Fremont  CA  94536
-				US
-
-C0-25-2F   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-C0252F     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-54-9F-C6   (hex)		Cisco Systems, Inc
-549FC6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F0-1D-2D   (hex)		Cisco Systems, Inc
-F01D2D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-3B-32   (hex)		Intelbras
-443B32     (base 16)		Intelbras
-				BR 101, km 210, S/N°
-				São José  Santa Catarina  88104800
-				BR
-
-F8-3B-1D   (hex)		Technicolor CH USA Inc.
-F83B1D     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-D4-1B-81   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-D41B81     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-F4-0B-9F   (hex)		CIG SHANGHAI CO LTD
-F40B9F     (base 16)		CIG SHANGHAI CO LTD
-				5th Floor, Building 8 No 2388 Chenhang Road
-				SHANGHAI    201114
-				CN
-
-78-45-B3   (hex)		Huawei Device Co., Ltd.
-7845B3     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-20-DC-FD   (hex)		Huawei Device Co., Ltd.
-20DCFD     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-FC-65-B3   (hex)		Huawei Device Co., Ltd.
-FC65B3     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-10-9D-7A   (hex)		Huawei Device Co., Ltd.
-109D7A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-63-73   (hex)		OBARA KOREA
-DC6373     (base 16)		OBARA KOREA
-				97-23, Barangongdan-ro 4-gil
-				Hwaseong-si  Gyeonggi-do  18623
-				KR
-
-D4-7E-E4   (hex)		China Mobile IOT Company Limited
-D47EE4     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-88-89-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88892F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-E5-B0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-28E5B0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-A8-52   (hex)		SENSAIO PTE LTD
-1CA852     (base 16)		SENSAIO PTE LTD
-				160 Robinson Road #14-04
-				SINGAPORE  SINGAPORE  068914
-				SG
-
-78-7D-F3   (hex)		Sterlite Technologies Limited
-787DF3     (base 16)		Sterlite Technologies Limited
-				IFFCO Tower, 3rd Floor, Plot No.3, Sector 29,CH Baktawar Singh Rd, Institutional Area,
-				Gurugram  Haryana  122002
-				IN
-
-C0-94-AD   (hex)		zte corporation
-C094AD     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-34-2B-70   (hex)		Arris
-342B70     (base 16)		Arris
-				2500 Walsh Ave.
-				Santa Clara  CA  95014
-				US
-
-1C-90-BE   (hex)		Ericsson AB
-1C90BE     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-00-16-3B   (hex)		Communications & Power Industries
-00163B     (base 16)		Communications & Power Industries
-				Suite , 60 Decibel Road
-				State College  PA  16801
-				US
-
-9C-B2-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9CB2E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-73-1D   (hex)		ifm electronic gmbh
-74731D     (base 16)		ifm electronic gmbh
-				ifm-Straße 1
-				Tettnang  BW  88069
-				DE
-
-00-0B-4E   (hex)		Communications & Power Industries
-000B4E     (base 16)		Communications & Power Industries
-				1000 Klein Road
-				Plano  TX  75074
-				US
-
-00-03-34   (hex)		Omega Engineering Inc.
-000334     (base 16)		Omega Engineering Inc.
-				800 Connecticut Ave. Suite 5N01,
-				Norwalk  CT  06854
-				US
-
-5C-61-99   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-5C6199     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-E8-DB-84   (hex)		Espressif Inc.
-E8DB84     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-D0-55-09   (hex)		Nintendo Co.,Ltd
-D05509     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-A0-77-51   (hex)		ASMedia Technology Inc.
-A07751     (base 16)		ASMedia Technology Inc.
-				6F, No.115, Minquan Rd.,
-				New Taipei City    23141
-				TW
-
-30-56-84   (hex)		SHENZHEN YUNJI INTELLIGENT TECHNOLOGY CO.,LTD
-305684     (base 16)		SHENZHEN YUNJI INTELLIGENT TECHNOLOGY CO.,LTD
-				A-SIDE A2 BUILDING 2/F ENET NEW INDUSTRIAL PARK,NO.20 DAFU INDUSTRIAL ZONE, AOBEI COMMUNITY, GUANLAN, LONGHUA NEW DISTRICT
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-14-56-3A   (hex)		Huawei Device Co., Ltd.
-14563A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-70-90-B7   (hex)		Huawei Device Co., Ltd.
-7090B7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-24-94-94   (hex)		Hong Kong Bouffalo Lab Limited
-249494     (base 16)		Hong Kong Bouffalo Lab Limited
-				RM 1903, 19/F Lee Garden One 33 Hysan Avenue, Causeway Bay
-				HongKong    999077
-				HK
-
-30-BE-3B   (hex)		Mitsubishi Electric Corporation
-30BE3B     (base 16)		Mitsubishi Electric Corporation
-				2-7-3 Marunouchi, Chiyoda-ku
-				Tokyo    100-8310
-				JP
-
-0C-B7-89   (hex)		Honor Device Co., Ltd.
-0CB789     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-78-91-E9   (hex)		Raisecom Technology CO.,LTD
-7891E9     (base 16)		Raisecom Technology CO.,LTD
-				No. 11, East Area, No. 10 Block, East Xibeiwang Road
-				Beijing    100094
-				CN
-
-8C-34-01   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-8C3401     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-60-DB-98   (hex)		Calix Inc.
-60DB98     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-68-72-C3   (hex)		Samsung Electronics Co.,Ltd
-6872C3     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-70-B1-3D   (hex)		Samsung Electronics Co.,Ltd
-70B13D     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-FC-7F-F1   (hex)		Aruba, a Hewlett Packard Enterprise Company
-FC7FF1     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-3C-A3-7E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3CA37E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-E4-3B   (hex)		ASIX Electronics Corporation
-F8E43B     (base 16)		ASIX Electronics Corporation
-				4F, No. 8, Hsin Ann Road, Hsinchu Science Park
-				Hsinchu    30078
-				TW
-
-48-EF-61   (hex)		Huawei Device Co., Ltd.
-48EF61     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-78-F0-9B   (hex)		Huawei Device Co., Ltd.
-78F09B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-E9-3A   (hex)		AzureWave Technology Inc.
-00E93A     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-00-C5-2C   (hex)		Juniper Networks
-00C52C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-34-A1   (hex)		RF-LAMBDA USA INC.
-0034A1     (base 16)		RF-LAMBDA USA INC.
-				9115 Brown Deer Road | San Diego
-				CA    92121
-				US
-
-60-35-73   (hex)		Earda Technologies co Ltd
-603573     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-A4-97-33   (hex)		ASKEY COMPUTER CORP
-A49733     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-5C-FB-3A   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-5CFB3A     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-18-0F-76   (hex)		D-Link International
-180F76     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-00-AD-24   (hex)		D-Link International
-00AD24     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-60-63-4C   (hex)		D-Link International
-60634C     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-C4-E9-0A   (hex)		D-Link International
-C4E90A     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-F0-B4-D2   (hex)		D-Link International
-F0B4D2     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-E0-1C-FC   (hex)		D-Link International
-E01CFC     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-F0-2F-74   (hex)		ASUSTek COMPUTER INC.
-F02F74     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-00-6E-02   (hex)		Xovis AG
-006E02     (base 16)		Xovis AG
-				Industriestrasse 1
-				Zollikofen  Bern  3052
-				CH
-
-AC-F8-5C   (hex)		Chengdu Higon Integrated Circuit Design Co,. Ltd.
-ACF85C     (base 16)		Chengdu Higon Integrated Circuit Design Co,. Ltd.
-				Suite22-31, 11Floor, Block E5,Tianfu Software Park, Chengdu Gaoxin District
-				Chengdu  Sichuan  610041
-				CN
-
-18-11-71   (hex)		Guangzhou Doctorpai Education & Technology Co.,Ltd
-181171     (base 16)		Guangzhou Doctorpai Education & Technology Co.,Ltd
-				Floor 5, Building C1, Greenland Central Plaza
-				Huangpu District, Guangzhou  Guangdong Province  510700
-				CN
-
-E0-6D-17   (hex)		Apple, Inc.
-E06D17     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-B3-EC   (hex)		Apple, Inc.
-F0B3EC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-65-A6   (hex)		Apple, Inc.
-F465A6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-98-E8   (hex)		D-Link International
-7898E8     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-44-F2-1B   (hex)		Apple, Inc.
-44F21B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-65-0C   (hex)		Apple, Inc.
-74650C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-D4-36   (hex)		Motorola Mobility LLC, a Lenovo Company
-FCD436     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-0C-EC-8D   (hex)		Motorola Mobility LLC, a Lenovo Company
-0CEC8D     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-18-4F-5D   (hex)		JRC Mobility Inc.
-184F5D     (base 16)		JRC Mobility Inc.
-				NAKANO CENTRAL PARK EAST 10-1, Nakano 4-chome
-				Nakano-ku  Tokyo  164-8570
-				JP
-
-08-CB-E5   (hex)		R3 - Reliable Realtime Radio Communications GmbH
-08CBE5     (base 16)		R3 - Reliable Realtime Radio Communications GmbH
-				Bismarckstrasse 10-12
-				Berlin  Berlin  10625
-				DE
-
-F0-23-AE   (hex)		AMPAK Technology,Inc.
-F023AE     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-E0-77-26   (hex)		Huawei Device Co., Ltd.
-E07726     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-94-A6-7E   (hex)		NETGEAR
-94A67E     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-A8-9A-D7   (hex)		Nokia
-A89AD7     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-48-25-67   (hex)		Poly
-482567     (base 16)		Poly
-				6001 America Center Drive
-				San Jose  CA  95002
-				US
-
-84-F1-47   (hex)		Cisco Systems, Inc
-84F147     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-9F-89   (hex)		Texas Instruments
-249F89     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-24-76-25   (hex)		Texas Instruments
-247625     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F8-7A-41   (hex)		Cisco Systems, Inc
-F87A41     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-39-B8   (hex)		Ciena Corporation
-D439B8     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-30-C3-D9   (hex)		ALPSALPINE CO,.LTD
-30C3D9     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				Kakuda  Miyagi-Pref  981-1595
-				JP
-
-00-1B-FB   (hex)		ALPSALPINE CO,.LTD
-001BFB     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi,
-				Soma-city,  Fukushima-pref.,  976-8501
-				JP
-
-74-E9-BF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-74E9BF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-10-9F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D8109F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-AE-19   (hex)		Roku, Inc
-ACAE19     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-34-FE-C5   (hex)		Shenzhen Sunwoda intelligent hardware Co.,Ltd
-34FEC5     (base 16)		Shenzhen Sunwoda intelligent hardware Co.,Ltd
-				No.6-6,Yan Shan Rd.,Baoan District,Shenzhen City,China
-				Shenzhen  Guangdong  518105
-				CN
-
-A8-F7-66   (hex)		ITE Tech Inc
-A8F766     (base 16)		ITE Tech Inc
-				3F, No.13, Chuangsin 1st Rd., Hsinchu Science Park
-				Hsinchu  Taiwan  30076
-				TW
-
-00-21-3E   (hex)		TomTom International BV
-00213E     (base 16)		TomTom International BV
-				Oosterdoksstraat 114
-				Amsterdam  North Holland  1011 DK
-				NL
-
-68-3E-26   (hex)		Intel Corporate
-683E26     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-8C-55-4A   (hex)		Intel Corporate
-8C554A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-40-1C-83   (hex)		Intel Corporate
-401C83     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-38-FC-98   (hex)		Intel Corporate
-38FC98     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-50-2F-9B   (hex)		Intel Corporate
-502F9B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-F8-5E-A0   (hex)		Intel Corporate
-F85EA0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-A4-6B-B6   (hex)		Intel Corporate
-A46BB6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-FC-0C-45   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-FC0C45     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-54-67-E6   (hex)		SHENZHEN MTC CO LTD
-5467E6     (base 16)		SHENZHEN MTC CO LTD
-				5th Floor, 3rd Building, SHENZHEN MTC Industrial Park, XiaLilang Rd, Nanwan Street, Long’gang District
-				Shenzhen  Guangdong  518100
-				CN
-
-3C-54-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C5447     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-6B-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-006B6F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-3D-6E   (hex)		Cisco Systems, Inc
-A03D6E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-70-9C-D1   (hex)		Intel Corporate
-709CD1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-00-0E-B6   (hex)		Riverbed Technology, Inc.
-000EB6     (base 16)		Riverbed Technology, Inc.
-				680 Folsom St
-				San Francisco  CA  94107
-				US
-
-84-44-AF   (hex)		Zhejiang Tmall Technology Co., Ltd.
-8444AF     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-E4-BF-FA   (hex)		Technicolor CH USA Inc.
-E4BFFA     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-8C-64-D4   (hex)		Hyeco Smart Tech Co.,Ltd
-8C64D4     (base 16)		Hyeco Smart Tech Co.,Ltd
-				12 Beiqian Lane,Industrial Park
-				Suzhou  Jiangsu  215000
-				CN
-
-8C-DE-F9   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-8CDEF9     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-58-AE-2B   (hex)		Huawei Device Co., Ltd.
-58AE2B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D0-3C-1F   (hex)		Intel Corporate
-D03C1F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-B0-8B-D0   (hex)		Cisco Systems, Inc
-B08BD0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-D7-04   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6CD704     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-3A-D6   (hex)		Samsung Electronics Co.,Ltd
-543AD6     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-54-46-17   (hex)		zte corporation
-544617     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-5C-85-F8   (hex)		SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
-5C85F8     (base 16)		SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
-				7006 Caitian Rd., Futian Dist. 
-				Shen Zhen  Guang Dong  518035
-				CN
-
-14-23-0A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14230A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-AE-A8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-58AEA8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-EC-5B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-48EC5B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-00-77-E4   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-0077E4     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-80-22-78   (hex)		China Mobile IOT Company Limited
-802278     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-90-3C-B3   (hex)		Edgecore Networks Corporation
-903CB3     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-D8-14-DF   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-D814DF     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
-				10F, TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan District
-				Shenzhen  Guangdong  518052
-				CN
-
-90-02-7A   (hex)		Shenzhen Sworix Techonlogy Co., Ltd
-90027A     (base 16)		Shenzhen Sworix Techonlogy Co., Ltd
-				Room202, 2nd floor, Jianghao commercial center, Jianghao Industrial area,Jihua road 430, Bantian, Longgang
-				Shenzhen    518129
-				CN
-
-3C-06-A7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-3C06A7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-24-E9-27   (hex)		TomTom International BV
-24E927     (base 16)		TomTom International BV
-				Oosterdoksstraat 114
-				Amsterdam  North Holland  1011 DK
-				NL
-
-84-5C-F3   (hex)		Intel Corporate
-845CF3     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-D0-5A-FD   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-D05AFD     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-58-41-20   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-584120     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-64-D7-C0   (hex)		Huawei Device Co., Ltd.
-64D7C0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-94-60-10   (hex)		Huawei Device Co., Ltd.
-946010     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-2C-79-3D   (hex)		Boditech Med
-2C793D     (base 16)		Boditech Med
-				43, Geodudanji 1-gil, Dongnae-myeon, 
-				Chuncheon-si, Gangwon-do    24398
-				KR
-
-6C-02-E0   (hex)		HP Inc.
-6C02E0     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-24-5B-83   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-245B83     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-F0-F5-64   (hex)		Samsung Electronics Co.,Ltd
-F0F564     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-DC-B2   (hex)		Extreme Networks, Inc.
-00DCB2     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  NH  95119
-				US
-
-6C-13-D5   (hex)		Cisco Systems, Inc
-6C13D5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-08-B0   (hex)		HUBER+SUHNER BKtel GmbH
-0008B0     (base 16)		HUBER+SUHNER BKtel GmbH
-				Benzstraße 4
-				41836 Hückelhoven-Baal  NRW  41836
-				DE
-
-84-DB-9E   (hex)		Pink Nectarine Health AB
-84DB9E     (base 16)		Pink Nectarine Health AB
-				Munkbron 11
-				Stockholm    111 28
-				SE
-
-18-69-D8   (hex)		Tuya Smart Inc.
-1869D8     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-68-AB-BC   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-68ABBC     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-34-C1-03   (hex)		Hangzhou Huamu Technology Co.,Ltd.
-34C103     (base 16)		Hangzhou Huamu Technology Co.,Ltd.
-				Xiangnan village,Yiqiao Town,Xiaoshan District,Hangzhou City,Zhejiang
-				Hangzhou    311256
-				CN
-
-64-13-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6413AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-60-88   (hex)		Intel Corporate
-B06088     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-0C-73-29   (hex)		Sercomm Corporation.
-0C7329     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-5C-C3-36   (hex)		ittim
-5CC336     (base 16)		ittim
-				1202, No.6, Zhongguancun South Street, Haidian District,
-				beijing    100080
-				CN
-
-FC-04-1C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-FC041C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-F4-D4-88   (hex)		Apple, Inc.
-F4D488     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-2F-67   (hex)		Apple, Inc.
-682F67     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-3D-E1   (hex)		Huawei Device Co., Ltd.
-003DE1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F0-6F-46   (hex)		Ubiik
-F06F46     (base 16)		Ubiik
-				2F, No. 151, Aikou 1st Street, 
-				Zhubei City  Hsinchu County  302
-				TW
-
-50-ED-3C   (hex)		Apple, Inc.
-50ED3C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-40-09   (hex)		zte corporation
-FC4009     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-24-A6-5E   (hex)		zte corporation
-24A65E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-48-00-7D   (hex)		DTS ELEKTRONIK SAN. TIC. LTD. STI.
-48007D     (base 16)		DTS ELEKTRONIK SAN. TIC. LTD. STI.
-				MAHMUTBEY MAH. 2650.SOK. NO:21
-				ISTANBUL    34218
-				TR
-
-30-B1-B5   (hex)		Arcadyan Corporation
-30B1B5     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-64-07-F6   (hex)		Samsung Electronics Co.,Ltd
-6407F6     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-E0-CB-BC   (hex)		Cisco Meraki
-E0CBBC     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-68-3A-1E   (hex)		Cisco Meraki
-683A1E     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-D8-EC-E5   (hex)		Zyxel Communications Corporation
-D8ECE5     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-C4-70-AB   (hex)		Ruijie Networks Co.,LTD
-C470AB     (base 16)		Ruijie Networks Co.,LTD
-				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
-				Fuzhou  Fujian  350002
-				CN
-
-CC-6B-1E   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-CC6B1E     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-F0-D0-8C   (hex)		TCT mobile ltd
-F0D08C     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-84-90-00   (hex)		Arnold&Richter Cine Technik GmbH & Co. Betriebs KG
-849000     (base 16)		Arnold&Richter Cine Technik GmbH & Co. Betriebs KG
-				Herbert-Bayer-Str. 10
-				Munchen  Bavaria  80807
-				DE
-
-30-F9-4B   (hex)		Universal Electronics, Inc.
-30F94B     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-B4-8A-5F   (hex)		Juniper Networks
-B48A5F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-70-DF-F7   (hex)		ARRIS Group, Inc.
-70DFF7     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-E0-DF   (hex)		DZS GmbH
-00E0DF     (base 16)		DZS GmbH
-				Wohlenbergstrasse. 3
-				Hannover    30179
-				DE
-
-E0-E8-BB   (hex)		Unicom Vsens Telecommunications Co., Ltd.
-E0E8BB     (base 16)		Unicom Vsens Telecommunications Co., Ltd.
-				Room612,613,615,6Floors,Block3,Hengji center,N0.18 Jianguomen inner Street,Dondcheng Distict, Beijing,P.R.China
-				Beijing    100005
-				CN
-
-E4-C9-0B   (hex)		Radwin
-E4C90B     (base 16)		Radwin
-				Habarzel 27
-				Tel Aviv  -- select --  6971039
-				IL
-
-98-27-82   (hex)		IEEE Registration Authority
-982782     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-38-A0-67   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-38A067     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-7C-1B-93   (hex)		Huawei Device Co., Ltd.
-7C1B93     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-2D-3C   (hex)		Huawei Device Co., Ltd.
-DC2D3C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-11-19   (hex)		IEEE Registration Authority
-041119     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E4-55-A8   (hex)		Cisco Meraki
-E455A8     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-08-81-B2   (hex)		Logitech (China) Technology Co., Ltd
-0881B2     (base 16)		Logitech (China) Technology Co., Ltd
-				1111 Changshou Road
-				Shanghai    200001
-				CN
-
-C4-F1-74   (hex)		eero inc.
-C4F174     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-28-D0-EA   (hex)		Intel Corporate
-28D0EA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E0-0C-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E00CE5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-41-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2841EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-00-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C004D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-D3-20   (hex)		ITEL MOBILE LIMITED
-04D320     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-1C-99-57   (hex)		Intel Corporate
-1C9957     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-FC-34-97   (hex)		ASUSTek COMPUTER INC.
-FC3497     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-84-7A-B6   (hex)		AltoBeam (China) Inc.
-847AB6     (base 16)		AltoBeam (China) Inc.
-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
-				Beijing  Beijing  100083
-				CN
-
-78-A6-A0   (hex)		Hangzhou Ezviz Software Co.,Ltd.
-78A6A0     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
-				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-48-51-CF   (hex)		Intelbras
-4851CF     (base 16)		Intelbras
-				BR 101, km 210, S/N°
-				São José  Santa Catarina  88104800
-				BR
-
-4C-5D-3C   (hex)		Cisco Systems, Inc
-4C5D3C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-73-2D   (hex)		Cisco Systems, Inc
-34732D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-04-7B-CB   (hex)		Universal Global Scientific Industrial Co., Ltd.
-047BCB     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
-				Nan-Tou  Taiwan  54261
-				TW
-
-8C-34-46   (hex)		Huawei Device Co., Ltd.
-8C3446     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-80-47-86   (hex)		Samsung Electronics Co.,Ltd
-804786     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-D4-47-5A   (hex)		ScreenBeam, Inc.
-D4475A     (base 16)		ScreenBeam, Inc.
-				3301 Olcott St
-				Santa Clara  CA  95054
-				US
-
-E4-41-64   (hex)		Nokia
-E44164     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-34-E9-FE   (hex)		Metis Co., Ltd.
-34E9FE     (base 16)		Metis Co., Ltd.
-				25, Saenari-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13509
-				KR
-
-AC-13-9C   (hex)		Adtran Inc
-AC139C     (base 16)		Adtran Inc
-				901 Explorer Blvd.
-				Huntsville  AL  35806-2807
-				US
-
-A4-CE-DA   (hex)		Arcadyan Corporation
-A4CEDA     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-8C-43-61   (hex)		Hailo Digital Hub GmbH & Co. KG
-8C4361     (base 16)		Hailo Digital Hub GmbH & Co. KG
-				Lahnstrasse 3a
-				Giessen  Hessen  35398
-				DE
-
-54-72-5E   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-54725E     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
-				Huizhou  Guangdong  516025
-				CN
-
-98-C3-D2   (hex)		Ningbo Sanxing Medical Electric Co.,Ltd
-98C3D2     (base 16)		Ningbo Sanxing Medical Electric Co.,Ltd
-				No.26 FengWan Road,Cicheng Town,Jiangbei District,Ningbo,China 
-				Ningbo    315029
-				CN
-
-24-5D-FC   (hex)		IEEE Registration Authority
-245DFC     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-48-7E-48   (hex)		Earda Technologies co Ltd
-487E48     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-E0-E3-7C   (hex)		Huawei Device Co., Ltd.
-E0E37C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-24-18-C6   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-2418C6     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-30-78-D3   (hex)		Virgilant Technologies Ltd.
-3078D3     (base 16)		Virgilant Technologies Ltd.
-				2F., No.3, Aly. 19, Lane 8, Tianmu E. Rd.,Shilin Dist., 
-				Taipei City  Taiwan  11153
-				TW
-
-60-18-95   (hex)		Dell Inc.
-601895     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-E8-EA-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8EA4D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-FF-D8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3CFFD8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-61-7E   (hex)		Huawei Device Co., Ltd.
-4C617E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B4-10-7B   (hex)		Texas Instruments
-B4107B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-64-97-14   (hex)		eero inc.
-649714     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-CC-86-EC   (hex)		Silicon Laboratories
-CC86EC     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin    78701
-				US
-
-40-41-01   (hex)		Rockwell Automation
-404101     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-7C-55-A7   (hex)		Kastle Systems
-7C55A7     (base 16)		Kastle Systems
-				6402 Arlington Blvd
-				Falls Church  VA  22042
-				US
-
-40-BE-EE   (hex)		Shenzhen Yunding Information Technology Co.,Ltd
-40BEEE     (base 16)		Shenzhen Yunding Information Technology Co.,Ltd
-				32G, Tower E, CR Land Building, Tong Gu Road 5#, Nanshan District,,Guangdong,CN
-				 Shenzhen  Guangdong  518000
-				CN
-
-A4-4C-62   (hex)		Hangzhou Microimage Software Co., Ltd
-A44C62     (base 16)		Hangzhou Microimage Software Co., Ltd
-				Room 313, Unit B, Building 2, 399 Danfeng Road, Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-FC-E8-06   (hex)		Edifier International
-FCE806     (base 16)		Edifier International
-				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
-				Hong Kong    070
-				CN
-
-F4-C7-95   (hex)		WEY Technology AG
-F4C795     (base 16)		WEY Technology AG
-				Dorfstrasse 57
-				Unterengstringen  Zurich  8103
-				CH
-
-44-B4-62   (hex)		Flextronics Tech.(Ind) Pvt Ltd
-44B462     (base 16)		Flextronics Tech.(Ind) Pvt Ltd
-				365, Benjamin Road
-				Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646
-				IN
-
-F8-D4-78   (hex)		Flextronics Tech.(Ind) Pvt Ltd
-F8D478     (base 16)		Flextronics Tech.(Ind) Pvt Ltd
-				365, Benjamin Road
-				Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646
-				IN
-
-50-C2-ED   (hex)		GN Audio A/S
-50C2ED     (base 16)		GN Audio A/S
-				Lautrupbjerg 7
-				Ballerup    DK-2750
-				DK
-
-90-A8-22   (hex)		Amazon Technologies Inc.
-90A822     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-74-AD-98   (hex)		Cisco Systems, Inc
-74AD98     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-84-8C-8D   (hex)		Apple, Inc.
-848C8D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-5C-B5   (hex)		IEEE Registration Authority
-0C5CB5     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E8-4F-25   (hex)		Murata Manufacturing Co., Ltd.
-E84F25     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-04-25-E0   (hex)		Taicang T&W Electronics
-0425E0     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-30-85-EB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-3085EB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-84-06-FA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-8406FA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-C0-DC-D7   (hex)		Huawei Device Co., Ltd.
-C0DCD7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-30-37-B3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3037B3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-CB-19   (hex)		HP Inc.
-14CB19     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-0C-E4-41   (hex)		Apple, Inc.
-0CE441     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-2A-A9   (hex)		Apple, Inc.
-B82AA9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-64-C0   (hex)		Apple, Inc.
-7864C0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-52-47   (hex)		Huawei Device Co., Ltd.
-385247     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E8-1C-D8   (hex)		Apple, Inc.
-E81CD8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-06-30   (hex)		Apple, Inc.
-3C0630     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-02-28   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-F40228     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-0C-83-CC   (hex)		Alpha Networks Inc.
-0C83CC     (base 16)		Alpha Networks Inc.
-				No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C
-				Hsinchu  Taiwan  300
-				TW
-
-EC-B9-70   (hex)		Ruijie Networks Co.,LTD
-ECB970     (base 16)		Ruijie Networks Co.,LTD
-				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
-				Fuzhou  Fujian  350002
-				CN
-
-30-83-98   (hex)		Espressif Inc.
-308398     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-F8-89-D2   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-F889D2     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-10-27-F5   (hex)		TP-Link Corporation Limited
-1027F5     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-B0-4F-13   (hex)		Dell Inc.
-B04F13     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-C0-4B-13   (hex)		WonderSound Technology Co., Ltd
-C04B13     (base 16)		WonderSound Technology Co., Ltd
-				10A, Center of Shenmao, News Road 59, Meiling community, Lianhua Street, Futian district
-				Shenzhen    518034
-				CN
-
-9C-7F-81   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-9C7F81     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-C4-BC-D7   (hex)		New Ryatek
-C4BCD7     (base 16)		New Ryatek
-				Room 103, 1st floor, building 19, yard 1, Baosheng South Road, Haidian District, Beijing
-				Beijing  Beijing  100192
-				CN
-
-C0-AE-FD   (hex)		Shenzhen HC-WLAN Technology Co.,Ltd
-C0AEFD     (base 16)		Shenzhen HC-WLAN Technology Co.,Ltd
-				Room 201E, Block D, Donghai Wang Industrial Zone, No. 369, Bulong Road, Bantian Street, Longgang District
-				Shenzhen  Guangdong  518129
-				CN
-
-20-6A-94   (hex)		Hitron Technologies. Inc
-206A94     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-30-95-87   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-309587     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-DC-87-CB   (hex)		Beijing Perfectek Technologies Co., Ltd.
-DC87CB     (base 16)		Beijing Perfectek Technologies Co., Ltd.
-				A-17, No. 101, 6F, Building 24, No. 68, Beiqing Road, Haidian District
-				Beijing  Beijing  100094
-				CN
-
-10-2D-41   (hex)		Sichuan AI-Link Technology Co., Ltd.
-102D41     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-64-27-53   (hex)		Huawei Device Co., Ltd.
-642753     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-7C-F6-66   (hex)		Tuya Smart Inc.
-7CF666     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-28-53-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-28534E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-B0-0A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CB00A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-C0-6A   (hex)		Zahner-Elektrik Ingeborg Zahner-Schiller GmbH & Co. KG.
-00C06A     (base 16)		Zahner-Elektrik Ingeborg Zahner-Schiller GmbH & Co. KG.
-				Thüringer Str. 12
-				Kronach - Gundelsdorf  Bavaria  96317
-				DE
-
-20-1E-88   (hex)		Intel Corporate
-201E88     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-20-CE-2A   (hex)		IEEE Registration Authority
-20CE2A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-58-13-D3   (hex)		Gemtek Technology Co., Ltd.
-5813D3     (base 16)		Gemtek Technology Co., Ltd.
-				No.15-1 Zhonghua Road
-				Hukou  Hsinchu  30352
-				TW
-
-00-E5-E4   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-00E5E4     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-14-69-A2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-1469A2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY, 
-				CHENGDU  SICHUAN  611330
-				CN
-
-04-6B-25   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-046B25     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY, 
-				CHENGDU  SICHUAN  611330
-				CN
-
-10-12-B4   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-1012B4     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY, 
-				CHENGDU  SICHUAN  611330
-				CN
-
-9C-32-A9   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-9C32A9     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-68-26-2A   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-68262A     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-B8-22-4F   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-B8224F     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-90-86-74   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-908674     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-88-C9-B3   (hex)		IEEE Registration Authority
-88C9B3     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C8-BD-69   (hex)		Samsung Electronics Co.,Ltd
-C8BD69     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-3A-B1   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-643AB1     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road, Chengdu, Sichuan
-				Chengdu  Sichuan  610000
-				CN
-
-44-BA-46   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-44BA46     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-A8-76-50   (hex)		Samsung Electronics Co.,Ltd
-A87650     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-D1-7D   (hex)		Samsung Electronics Co.,Ltd
-54D17D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-60-3A-AF   (hex)		Samsung Electronics Co.,Ltd
-603AAF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-48-A5   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-8048A5     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,TianYi International Hotel
-				Chengdu  Sichuan  61000
-				CN
-
-54-66-F9   (hex)		ConMet
-5466F9     (base 16)		ConMet
-				5701 SE Columbia Way
-				Vancouver    WA  98661
-				US
-
-58-91-53   (hex)		China Mobile IOT Company Limited
-589153     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-B8-13-32   (hex)		AMPAK Technology,Inc.
-B81332     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-98-7D-DD   (hex)		China Mobile Group Device Co.,Ltd.
-987DDD     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-44-DB-60   (hex)		Nanjing Baihezhengliu Technology Co., Ltd
-44DB60     (base 16)		Nanjing Baihezhengliu Technology Co., Ltd
-				Science and technology innovation center, Shiqiu street, Lishui District
-				Nanjing  Jiangsu  211222
-				CN
-
-B8-B7-7D   (hex)		Guangdong Transtek Medical Electronics CO.,Ltd
-B8B77D     (base 16)		Guangdong Transtek Medical Electronics CO.,Ltd
-				Zone A, No.105 ,Dongli Road,  Torch Development District  Zhongshan ,  CN  528437 
-				 Zhongshan  Guangdong  528437
-				CN
-
-C4-78-A2   (hex)		Huawei Device Co., Ltd.
-C478A2     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-9C-9E-71   (hex)		Huawei Device Co., Ltd.
-9C9E71     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-0C-9A-3C   (hex)		Intel Corporate
-0C9A3C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-DC-21-48   (hex)		Intel Corporate
-DC2148     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-74-CF-00   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-74CF00     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-2C-EA-DC   (hex)		ASKEY COMPUTER CORP
-2CEADC     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-AC-E1-4F   (hex)		Autonomic Controls, Inc.
-ACE14F     (base 16)		Autonomic Controls, Inc.
-				28 Kaysal Ct
-				ARMONK  NY  10504
-				US
-
-AC-97-6C   (hex)		Greenliant
-AC976C     (base 16)		Greenliant
-				3970 Freedom Circle, Suite 100
-				Santa Clara  CA  95054
-				US
-
-38-14-28   (hex)		Dell Inc.
-381428     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-74-5D-68   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-745D68     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-20-CF-AE   (hex)		Cisco Systems, Inc
-20CFAE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-98-49-9F   (hex)		Domo Tactical Communications
-98499F     (base 16)		Domo Tactical Communications
-				DTC Fusion 2, 1100 Parkway
-				Whiteley  Hampshire  PO15 7AB
-				GB
-
-C0-F9-B0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0F9B0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-8C-4A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-148C4A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-9B-B4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-609BB4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-23-8D   (hex)		Samsung Electronics Co.,Ltd
-C0238D     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-28-11-A8   (hex)		Intel Corporate
-2811A8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C0-FB-F9   (hex)		IEEE Registration Authority
-C0FBF9     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-4C-D5-77   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-4CD577     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-EC-08-E5   (hex)		Motorola Mobility LLC, a Lenovo Company
-EC08E5     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-80-CC-9C   (hex)		NETGEAR
-80CC9C     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-7C-27-BC   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-7C27BC     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-50-70-97   (hex)		China Mobile Group Device Co.,Ltd.
-507097     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-CC-15-31   (hex)		Intel Corporate
-CC1531     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-28-0F-EB   (hex)		LG Innotek
-280FEB     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-74-E2-0C   (hex)		Amazon Technologies Inc.
-74E20C     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-10-54-03   (hex)		INTARSO GmbH
-105403     (base 16)		INTARSO GmbH
-				Schuchardstr. 3
-				Düsseldorf  NRW  40595
-				DE
-
-00-0C-04   (hex)		Tecnova
-000C04     (base 16)		Tecnova
-				2383 N Delany Rd
-				Waukegan  IL  60087-1836
-				US
-
-84-47-09   (hex)		Shenzhen IP3 Century Intelligent Technology CO.,Ltd
-844709     (base 16)		Shenzhen IP3 Century Intelligent Technology CO.,Ltd
-				aiying.li@ip3-tech.com
-				Shenzhen    518057
-				CN
-
-00-91-EB   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-0091EB     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-44-9F-46   (hex)		Huawei Device Co., Ltd.
-449F46     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-34-51-84   (hex)		Huawei Device Co., Ltd.
-345184     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-FC-F7-7B   (hex)		Huawei Device Co., Ltd.
-FCF77B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-8C-AE-DB   (hex)		NAGTECH LLC
-8CAEDB     (base 16)		NAGTECH LLC
-				12A, Krasnolesya Str., off 507
-				Ekaterinburg  Sverdlovskaya oblast  620110
-				RU
-
-DC-F5-6E   (hex)		Wellysis Corp.
-DCF56E     (base 16)		Wellysis Corp.
-				311 Gangnam-daero
-				Seocho-gu  Seoul  06628
-				KR
-
-00-00-60   (hex)		Kontron Europe GmbH
-000060     (base 16)		Kontron Europe GmbH
-				Gutenbergstraße 2
-				Ismaning    85737
-				DE
-
-60-FC-F1   (hex)		Private
-60FCF1     (base 16)		Private
-
-E8-4F-A7   (hex)		Huawei Device Co., Ltd.
-E84FA7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C0-D0-63   (hex)		EM Microelectronic
-C0D063     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-7C-10-C9   (hex)		ASUSTek COMPUTER INC.
-7C10C9     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-00-C0-6F   (hex)		KOMATSU LTD.
-00C06F     (base 16)		KOMATSU LTD.
-				3-25-1, Shinomiya
-				Hiratsuka-Shi  Kanagawa-Ken  254-8555
-				JP
-
-A8-67-1E   (hex)		RATP
-A8671E     (base 16)		RATP
-				117, AVENUE MICHELET
-				SAINT-OUEN    93400
-				FR
-
-8C-E9-B4   (hex)		Zhejiang Dahua Technology Co., Ltd.
-8CE9B4     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-08-85-5B   (hex)		Kontron Europe GmbH
-08855B     (base 16)		Kontron Europe GmbH
-				Gutenbergstraße 2
-				Ismaning    85737
-				DE
-
-E4-B5-03   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-E4B503     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-EC-F4-0C   (hex)		Cisco Systems, Inc
-ECF40C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-10-06-ED   (hex)		Cisco Systems, Inc
-1006ED     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-EB-68   (hex)		Cisco Systems, Inc
-D4EB68     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C4-4D-84   (hex)		Cisco Systems, Inc
-C44D84     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-20-53-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-205383     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-85-7B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B8857B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-24-21-AB   (hex)		Sony Corporation
-2421AB     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-22-98   (hex)		Sony Corporation
-002298     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-1B-59   (hex)		Sony Corporation
-001B59     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-8C-64-22   (hex)		Sony Corporation
-8C6422     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-B8-F9-34   (hex)		Sony Corporation
-B8F934     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-40-B8-37   (hex)		Sony Corporation
-40B837     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-E0-63-E5   (hex)		Sony Corporation
-E063E5     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-4C-21-D0   (hex)		Sony Corporation
-4C21D0     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-1C-7B-21   (hex)		Sony Corporation
-1C7B21     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-0F-DE   (hex)		Sony Corporation
-000FDE     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-3C-01-EF   (hex)		Sony Corporation
-3C01EF     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-10-2C-EF   (hex)		EMU Electronic AG
-102CEF     (base 16)		EMU Electronic AG
-				Joechlerweg 2
-				Baar  Zug  6340
-				CH
-
-6C-CF-39   (hex)		Guangdong Starfive Technology Co., Ltd.
-6CCF39     (base 16)		Guangdong Starfive Technology Co., Ltd.
-				Room S201, Zone A, No.2 Haoyang Road, Yunlu Community, Daliang Street, Shunde District, Foshan, Guangdong, 528309, China
-				Foshan  Guangdong  528309
-				CN
-
-B4-CD-F5   (hex)		CUB ELECPARTS INC.
-B4CDF5     (base 16)		CUB ELECPARTS INC.
-				No. 6, Lane 546, Sec. 6, Changlu Road
-				Fuhsin Township, Changhua County  Taiwan  50648
-				TW
-
-D8-8C-73   (hex)		zte corporation
-D88C73     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-65-B2   (hex)		Apple, Inc.
-3865B2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-DE-3A   (hex)		Apple, Inc.
-D8DE3A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-78-65   (hex)		Apple, Inc.
-E87865     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-4E-CF   (hex)		Apple, Inc.
-A04ECF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-D0-65   (hex)		ESYLUX GmbH
-50D065     (base 16)		ESYLUX GmbH
-				An der Strusbek, 40
-				Ahrensburg  Deutschland  22926
-				DE
-
-08-87-C7   (hex)		Apple, Inc.
-0887C7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-1D-96   (hex)		Intel Corporate
-8C1D96     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-60-DD-8E   (hex)		Intel Corporate
-60DD8E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-90-59-3C   (hex)		AZ-TECHNOLOGY SDN BHD
-90593C     (base 16)		AZ-TECHNOLOGY SDN BHD
-				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
-				PETALING JAYA  SELANGOR  47301
-				MY
-
-1C-C1-0C   (hex)		Intel Corporate
-1CC10C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-F4-A4-75   (hex)		Intel Corporate
-F4A475     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-38-FF-13   (hex)		Joint Stock Company Research Instinite Masshtab
-38FF13     (base 16)		Joint Stock Company Research Instinite Masshtab
-				5A, Kantemirovskaya st.
-				Saint-Petersburg    194100
-				RU
-
-D0-DB-B7   (hex)		Casa Systems
-D0DBB7     (base 16)		Casa Systems
-				18-20 Orion Road Lane Cove West
-				LANE COVE  NSW  2066
-				AU
-
-28-64-EF   (hex)		Shenzhen Fsan Intelligent Technology Co.,Ltd
-2864EF     (base 16)		Shenzhen Fsan Intelligent Technology Co.,Ltd
-				Building 14C, Zhonghaixin Innovation Industry City, Ganli Road, Jihua street,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-C8-9E-43   (hex)		NETGEAR
-C89E43     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-7C-C2-55   (hex)		Super Micro Computer, Inc.
-7CC255     (base 16)		Super Micro Computer, Inc.
-				980 Rock Ave
-				San Jose  CA  95131
-				US
-
-18-07-12   (hex)		Shenzhen Dazoo Technologies CO.,Ltd
-180712     (base 16)		Shenzhen Dazoo Technologies CO.,Ltd
-				Room 501, building B, pinchuanyuan science and technology park, shuidou xinwei village, yousong community, longhua street, longhua district, Shenzhen
-				518000  Shenzhen  518000
-				CN
-
-20-BE-CD   (hex)		eero inc.
-20BECD     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-00-08-AC   (hex)		 BST GmbH
-0008AC     (base 16)		 BST GmbH
-				Remusweg 1
-				Bielefeld  Nordrhein-Westfalen  33729
-				DE
-
-BC-09-1B   (hex)		Intel Corporate
-BC091B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-00-BF-AF   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-00BFAF     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-00-64-AF   (hex)		Dish Technologies Corp
-0064AF     (base 16)		Dish Technologies Corp
-				94 Inverness Terrace E
-				Englewood  CO  80111
-				US
-
-04-EC-D8   (hex)		Intel Corporate
-04ECD8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-F0-2A-2B   (hex)		IEEE Registration Authority
-F02A2B     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-25-DF   (hex)		Private
-0025DF     (base 16)		Private
-				17800 N 85th St.
-				Scottsdale  AZ  85255
-				US
-
-D0-49-7C   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-D0497C     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-B4-EC-FF   (hex)		Wuhan IPG Technologies Co., Ltd.
-B4ECFF     (base 16)		Wuhan IPG Technologies Co., Ltd.
-				Room 01, Floor 18, Building 15, No.18 Jinronggang 4th Road,Putian IOT R&D Base (2nd Phase), East Lak
-				Wuhan  HUBEI  430070
-				CN
-
-F0-57-A6   (hex)		Intel Corporate
-F057A6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-64-26-77   (hex)		BKM-Micronic Richtfunkanlagen GmbH
-642677     (base 16)		BKM-Micronic Richtfunkanlagen GmbH
-				Im Steinernen Kreuz 19
-				Wurmberg    75449
-				DE
-
-4C-2F-D7   (hex)		Huawei Device Co., Ltd.
-4C2FD7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D4-74-15   (hex)		Huawei Device Co., Ltd.
-D47415     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-58-6F   (hex)		Huawei Device Co., Ltd.
-50586F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F0-B1-3F   (hex)		Huawei Device Co., Ltd.
-F0B13F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-E6-39   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1CE639     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-D7-78   (hex)		Texas Instruments
-20D778     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-70-07-77   (hex)		OnTarget Technologies, Inc
-700777     (base 16)		OnTarget Technologies, Inc
-				355 Madison Ave
-				New York    10017
-				US
-
-10-F6-05   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-10F605     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-5C-8F-40   (hex)		TECNO MOBILE LIMITED
-5C8F40     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-10-3F-44   (hex)		Xiaomi Communications Co Ltd
-103F44     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-9C-BC-F0   (hex)		Xiaomi Communications Co Ltd
-9CBCF0     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-50-98-39   (hex)		Xiaomi Communications Co Ltd
-509839     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-74-15-75   (hex)		Xiaomi Communications Co Ltd
-741575     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-9C-5A-81   (hex)		Xiaomi Communications Co Ltd
-9C5A81     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-5C-D0-6E   (hex)		Xiaomi Communications Co Ltd
-5CD06E     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-90-F1-57   (hex)		Garmin International
-90F157     (base 16)		Garmin International
-				1200 E. 151st St
-				Olathe  KS  66062
-				US
-
-FC-5C-45   (hex)		Ruckus Wireless
-FC5C45     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-4C-02-20   (hex)		Xiaomi Communications Co Ltd
-4C0220     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-40-E1-E4   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-40E1E4     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-E4-46-B0   (hex)		Fujitsu Client Computing Limited
-E446B0     (base 16)		Fujitsu Client Computing Limited
-				1-1-2 Kashimada, Saiwai-ku
-				Kawasaki  Kanagawa  212-0058
-				JP
-
-80-CB-BC   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-80CBBC     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-				No.218 Qianwangang Road
-				Qingdao  Shangdong  266510
-				CN
-
-E0-75-AA   (hex)		Beijing Jingling Information System Technology Co., Ltd.
-E075AA     (base 16)		Beijing Jingling Information System Technology Co., Ltd.
-				2002.2nd Floor, A 36, Haidian Street, Haidian District
-				Beijing    100080
-				CN
-
-54-CE-82   (hex)		zte corporation
-54CE82     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-F4-CE-48   (hex)		Extreme Networks, Inc.
-F4CE48     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-58-48-49   (hex)		IEEE Registration Authority
-584849     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-70-89-76   (hex)		Tuya Smart Inc.
-708976     (base 16)		Tuya Smart Inc.
-				FLAT/RM 806 BLK ? 8/F CHEUNG SHA WAN PLAZA 833 CHEUNG SHA WAN ROAD KL
-				hongkong  Hong Kong  999077
-				CN
-
-08-99-E8   (hex)		KEMAS GmbH
-0899E8     (base 16)		KEMAS GmbH
-				Wüstenbrander Str. 9
-				Oberlungwitz    09353
-				DE
-
-18-F8-7F   (hex)		Wha Yu Industrial Co., Ltd.
-18F87F     (base 16)		Wha Yu Industrial Co., Ltd.
-				No.326, Sec 2. Kung Tao 5 Road
-				HsinChu City  Taiwan  30070
-				TW
-
-44-4F-8E   (hex)		WiZ
-444F8E     (base 16)		WiZ
-				Unit 1203-5, 12/F, Tower 1, Enterprise Square, 9 Sheung Yuet Road
-				Kowloon Bay  Hong Kong  0000
-				HK
-
-1C-88-0C   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-1C880C     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-EC-35-4D   (hex)		Wingtech Mobile Communications Co.,Ltd
-EC354D     (base 16)		Wingtech Mobile Communications Co.,Ltd
-				No.777,Yazhong Road,Nanhu District
-				Jiaxing  Zhejiang  314001
-				CN
-
-80-61-5F   (hex)		Beijing Sinead Technology Co., Ltd. 
-80615F     (base 16)		Beijing Sinead Technology Co., Ltd. 
-				Room 504,Block A, New material Building, Yongfeng industrial, Haiding District, Beijing.China
-				Beijing  Beijing  100094
-				CN
-
-44-AE-44   (hex)		Huawei Device Co., Ltd.
-44AE44     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-20-B0-01   (hex)		Technicolor Delivery Technologies Belgium NV
-20B001     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-7C-39-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C3985     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-B1-E9   (hex)		Technicolor Delivery Technologies Belgium NV
-A4B1E9     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-30-56-96   (hex)		Infinix mobility limited
-305696     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-7C-B0-73   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-7CB073     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-B0-E9-FE   (hex)		Woan Technology (Shenzhen) Co., Ltd.
-B0E9FE     (base 16)		Woan Technology (Shenzhen) Co., Ltd.
-				1-2F, Building B4, Yintian Industrial Zone, Yantian Community, Xixiang Street, Bao'an District, Shenzhen, Guangdong, P.R.China
-				Shenzhen  Guangdong  518102
-				CN
-
-00-BD-3E   (hex)		Vizio, Inc
-00BD3E     (base 16)		Vizio, Inc
-				39 Tesla
-				Irvine  CA  92618
-				US
-
-C8-96-65   (hex)		Microsoft Corporation
-C89665     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-0C-E5-A3   (hex)		SharkNinja
-0CE5A3     (base 16)		SharkNinja
-				85 Cude Ln
-				Madison  TN  37115
-				US
-
-6C-91-06   (hex)		Private
-6C9106     (base 16)		Private
-
-40-91-51   (hex)		Espressif Inc.
-409151     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-CC-3F-8A   (hex)		KOMATSU LTD.
-CC3F8A     (base 16)		KOMATSU LTD.
-				3-25-1, Shinomiya
-				Hiratsuka-Shi  Kanagawa-Ken  254-8555
-				JP
-
-34-31-7F   (hex)		Panasonic Appliances Company
-34317F     (base 16)		Panasonic Appliances Company
-				2-3-1-2 Noji-higashi
-				Kusatsu City  Shiga  525-8555
-				JP
-
-F4-EE-08   (hex)		Dell Inc.
-F4EE08     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-10-00-20   (hex)		Apple, Inc.
-100020     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-64-24   (hex)		Aruba, a Hewlett Packard Enterprise Company
-946424     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-BC-1E-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC1E85     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-56-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B85600     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-59-CE   (hex)		Earda Technologies co Ltd
-B859CE     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-8C-7A-3D   (hex)		Xiaomi Communications Co Ltd
-8C7A3D     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-30-5F-77   (hex)		New H3C Technologies Co., Ltd
-305F77     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-7C-24-99   (hex)		Apple, Inc.
-7C2499     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-7A-AA   (hex)		Apple, Inc.
-8C7AAA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-36-F8   (hex)		Hyundai Kefico
-9C36F8     (base 16)		Hyundai Kefico
-				102, Gosan-ro
-				 Gunpo-si  Gyeonggi-do  15849
-				KR
-
-E0-B7-2E   (hex)		ShenZhen Qualmesh Technology Co.,Ltd.
-E0B72E     (base 16)		ShenZhen Qualmesh Technology Co.,Ltd.
-				Room 03, 10th floor, building 1, kaidar group center building, 168 Tongsha Road, Xinwei community, Xili street, Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-04-42-1A   (hex)		ASUSTek COMPUTER INC.
-04421A     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-2C-E0-32   (hex)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
-2CE032     (base 16)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
-				B Area, 10th floor, TCL multimedia Building, TCL International E City, #1001 Zhonshanyuan road,Shenzhen
-				guangdong  China  518058
-				CN
-
-A0-D2-B1   (hex)		Amazon Technologies Inc.
-A0D2B1     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-80-6D-71   (hex)		Amazon Technologies Inc.
-806D71     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-08-16-05   (hex)		Vodafone Italia S.p.A.
-081605     (base 16)		Vodafone Italia S.p.A.
-				Via Lorenteggio nr. 240
-				Milan  Italy  20147
-				IT
-
-20-7C-14   (hex)		Qotom
-207C14     (base 16)		Qotom
-				Huafeng Intelligence Valley, Hangcheng Street
-				Shenzhen  GuangDong  518000
-				CN
-
-1C-53-F9   (hex)		Google, Inc.
-1C53F9     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-2C-B0-FD   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-2CB0FD     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-				Chudong science and technology park, 111 shaxin road, tangxia town,
-				dongguan city  guangdong province  523710
-				CN
-
-C4-FB-C8   (hex)		Shenzhen Candour Co., Ltd.
-C4FBC8     (base 16)		Shenzhen Candour Co., Ltd.
-				Room 1501,East Building,Skyworth Semiconductor Building ,No.18,Gaoxin South 4th Road,Nanshan District
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-E8-01-15   (hex)		COOCAA Network Technology CO.,TD.
-E80115     (base 16)		COOCAA Network Technology CO.,TD.
-				306, east block, Skyworth semiconductor design building, 18 Gaoxin South 4th Road, Gaoxin community, Yuehai street, Nanshan District, Shenzhen
-				shenzhen    0755-27357001
-				CN
-
-8C-EA-12   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-8CEA12     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
-				Chudong science and technology park, 111 shaxin road, tangxia town,
-				dongguan city  guangdong province  523710
-				CN
-
-88-AC-9E   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-88AC9E     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-C8-BD-4D   (hex)		Samsung Electronics Co.,Ltd
-C8BD4D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-2C-15-BF   (hex)		Samsung Electronics Co.,Ltd
-2C15BF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-3C-E4-B0   (hex)		Texas Instruments
-3CE4B0     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B4-B0-24   (hex)		TP-Link Corporation Limited
-B4B024     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-18-F2-2C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-18F22C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-98-97-CC   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-9897CC     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-04-38-55   (hex)		SCOPUS INTERNATIONAL-BELGIUM
-043855     (base 16)		SCOPUS INTERNATIONAL-BELGIUM
-				A-46, Ground floor, Pandav Nagar, Ganesh ngr complex, 
-				New Delhi  Delhi  110092
-				IN
-
-E8-97-9A   (hex)		Quectel Wireless Solutions Co.,Ltd.
-E8979A     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-5C-A6-E6   (hex)		TP-Link Corporation Limited
-5CA6E6     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-B8-8A-72   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-B88A72     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-C4-36-C0   (hex)		BUFFALO.INC
-C436C0     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-2C-53-D7   (hex)		Sonova AG
-2C53D7     (base 16)		Sonova AG
-				Laubisruetistrasse 28
-				Staefa    8712
-				CH
-
-0C-C4-13   (hex)		Google, Inc.
-0CC413     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-D4-8F-A2   (hex)		Huawei Device Co., Ltd.
-D48FA2     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-88-81-B9   (hex)		Huawei Device Co., Ltd.
-8881B9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-74-63-C2   (hex)		Huawei Device Co., Ltd.
-7463C2     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-90-8D-6E   (hex)		Dell Inc.
-908D6E     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-3C-38-F4   (hex)		Sony Corporation
-3C38F4     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-DC-A7-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DCA782     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-51-70   (hex)		Zhongshan K-mate General Electronics Co.,Ltd
-045170     (base 16)		Zhongshan K-mate General Electronics Co.,Ltd
-				NO.2 ,5th Xinsheng Street,East Mu He Jing Road, Gangkou Town
-				Zhongshan  Guangdong  528447
-				CN
-
-38-45-54   (hex)		Harman/Becker Automotive Systems GmbH
-384554     (base 16)		Harman/Becker Automotive Systems GmbH
-				Becker-Göring-Straße 16
-				Karlsbad  Baden-Württemberg  76307
-				DE
-
-88-D8-2E   (hex)		Intel Corporate
-88D82E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-0E-AC   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-180EAC     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-4C-EA-AE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4CEAAE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-50-54-7B   (hex)		Nanjing Qinheng Microelectronics Co., Ltd.
-50547B     (base 16)		Nanjing Qinheng Microelectronics Co., Ltd.
-				No.18, Ningshuang Road
-				 Nanjing  Jiangsu  210012
-				CN
-
-14-49-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-144920     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-1A-D1   (hex)		Zyxel Communications Corporation
-D41AD1     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-B8-45-F4   (hex)		New H3C Technologies Co., Ltd
-B845F4     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-EC-01-D5   (hex)		Cisco Systems, Inc
-EC01D5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-90-F3-B8   (hex)		China Mobile Group Device Co.,Ltd.
-90F3B8     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-38-56-3D   (hex)		Microsoft Corporation
-38563D     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-10-BC-97   (hex)		vivo Mobile Communication Co., Ltd.
-10BC97     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-CC-81-2A   (hex)		vivo Mobile Communication Co., Ltd.
-CC812A     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-9C-82-81   (hex)		vivo Mobile Communication Co., Ltd.
-9C8281     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-B8-D4-3E   (hex)		vivo Mobile Communication Co., Ltd.
-B8D43E     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-0C-60-46   (hex)		vivo Mobile Communication Co., Ltd.
-0C6046     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-8C-67-94   (hex)		vivo Mobile Communication Co., Ltd.
-8C6794     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-08-B4-9D   (hex)		TECNO MOBILE LIMITED
-08B49D     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-28-93-7D   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-28937D     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-98-7E-E3   (hex)		vivo Mobile Communication Co., Ltd.
-987EE3     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-D4-C3-B0   (hex)		Gearlinx Pty Ltd
-D4C3B0     (base 16)		Gearlinx Pty Ltd
-				518 Haven Road, Haven Road
-				Upper Brookfield  QLD  4069
-				AU
-
-E0-70-EA   (hex)		HP Inc.
-E070EA     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-94-29-57   (hex)		Airpo Networks Technology Co.,Ltd.
-942957     (base 16)		Airpo Networks Technology Co.,Ltd.
-				Room 209,Building 3, Jianda Industrial Park, Xin an San Lu, Baoan District,
-				shenzhen  GuangDong  518000
-				CN
-
-40-5F-7D   (hex)		TCT mobile ltd
-405F7D     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-4C-03-4F   (hex)		Intel Corporate
-4C034F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-04-D9-21   (hex)		Occuspace
-04D921     (base 16)		Occuspace
-				302 Washington Street Suite 315
-				San Diego  CA  92103
-				US
-
-98-6E-E8   (hex)		IEEE Registration Authority
-986EE8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D4-AD-FC   (hex)		Private
-D4ADFC     (base 16)		Private
-
-1C-73-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C73E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-8C-83-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8C83E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-57-E5   (hex)		Beijing Royaltech Co.,Ltd
-6457E5     (base 16)		Beijing Royaltech Co.,Ltd
-				201, building 7, Boya CC4 courtyard, Life Science Park, Beiqing Road, Changping District, Beijing
-				Beijing    100000
-				CN
-
-FC-9B-D4   (hex)		EdgeQ
-FC9BD4     (base 16)		EdgeQ
-				2550 Great America Way, STE 325
-				Santa Clara  CA  95054
-				US
-
-14-57-90   (hex)		Qingdao Haier Technology Co.,Ltd
-145790     (base 16)		Qingdao Haier Technology Co.,Ltd
-				Building A01,Haier Information Park, No.1 Haier Road,
-				Qingdao  Shandong  266101
-				CN
-
-F8-29-C0   (hex)		Availink, Inc.
-F829C0     (base 16)		Availink, Inc.
-				Scotia Centre P.O. Box 268GT,Grand Cayman, Cayman Islands
-				Grand Cayman  Grand Cayman  999159
-				KY
-
-24-B7-2A   (hex)		China Dragon Technology Limited
-24B72A     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-34-A5-B4   (hex)		NAVTECH PTE LTD
-34A5B4     (base 16)		NAVTECH PTE LTD
-				101 CECIL STREET
-				SINGAPORE    437872
-				SG
-
-E8-9F-6D   (hex)		Espressif Inc.
-E89F6D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-98-77-CB   (hex)		Vorteks ED
-9877CB     (base 16)		Vorteks ED
-				Mirkovci, Street 2, number 142a
-				Skopje    1000
-				MK
-
-34-98-B5   (hex)		NETGEAR
-3498B5     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-38-94-61   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-389461     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-48-55-19   (hex)		Espressif Inc.
-485519     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-F8-FC-E1   (hex)		Amazon Technologies Inc.
-F8FCE1     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-70-32-17   (hex)		Intel Corporate
-703217     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-59-F5   (hex)		Cisco Systems, Inc
-1859F5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-14-C9-CF   (hex)		Sigmastar Technology Ltd.
-14C9CF     (base 16)		Sigmastar Technology Ltd.
-				15th Floor ,Unit A,Chuangxin Building, Software Park, Xiamen Torch Hi-Tech Industrial Development Zone, Xiamen,China
-				Xiamen City  Fujian Province  361001
-				CN
-
-64-44-D5   (hex)		Private
-6444D5     (base 16)		Private
-
-DC-62-94   (hex)		Guangzhou Lango Electronics Technology Co.,Ltd.
-DC6294     (base 16)		Guangzhou Lango Electronics Technology Co.,Ltd.
-				Room 238, Room 406, No. 1, Yichuang Street, Huangpu District
-				Guangzhou  Guangdong  510336
-				CN
-
-5C-46-B0   (hex)		SIMCom Wireless Solutions Limited
-5C46B0     (base 16)		SIMCom Wireless Solutions Limited
-				SIMCom Headquarters Building, Building 3, No. 289 Linhong Road, Changning District, Shanghai P.R. China
-				Shanghai    200335
-				CN
-
-3C-21-9C   (hex)		Intel Corporate
-3C219C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-EC-42-69   (hex)		HMD Global Oy
-EC4269     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-28-1D-21   (hex)		IN ONE SMART TECHNOLOGY(H,K,)LIMITED
-281D21     (base 16)		IN ONE SMART TECHNOLOGY(H,K,)LIMITED
-				UNIT I 1/F MAU LAM COMM BLDG 16-18 MAU LAM ST JORDAN KL HK
-				HONGKONG    999077
-				HK
-
-74-E3-36   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-74E336     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-B0-73-9C   (hex)		Amazon Technologies Inc.
-B0739C     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-C4-34-5B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4345B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-BA-20   (hex)		Silicon Laboratories
-84BA20     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-00-3C-84   (hex)		Silicon Laboratories
-003C84     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-C0-2C-5C   (hex)		Apple, Inc.
-C02C5C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-57-63   (hex)		Apple, Inc.
-D45763     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-9F-15   (hex)		Private
-049F15     (base 16)		Private
-
-48-3E-5E   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-483E5E     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-50-EB-F6   (hex)		ASUSTek COMPUTER INC.
-50EBF6     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-C4-48-FA   (hex)		Taicang T&W Electronics
-C448FA     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-A8-98-92   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A89892     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-E0-72-0A   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-E0720A     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-60-FF-12   (hex)		Samsung Electronics Co.,Ltd
-60FF12     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-24-C6-13   (hex)		Samsung Electronics Co.,Ltd
-24C613     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-E1-29   (hex)		Samsung Electronics Co.,Ltd
-94E129     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-A0-D6   (hex)		ChengDu TD Tech
-D0A0D6     (base 16)		ChengDu TD Tech
-				C3 floor, software park, No. 219, Tianhua Second Road
-				Chengdu  Tianfu Avenue, high tech Zone  610041
-				CN
-
-24-D9-04   (hex)		Sichuan Changhong Network Technologies Co., Ltd.
-24D904     (base 16)		Sichuan Changhong Network Technologies Co., Ltd.
-				#35, East Mianxing Road, Hi-Tech Park
-				Mianyang  Sichuan  621000
-				CN
-
-90-27-59   (hex)		Nanjing Jiahao Technology Co., Ltd.
-902759     (base 16)		Nanjing Jiahao Technology Co., Ltd.
-				Moling Industrial Park, Development Zone, Jiangning, Nanjing
-				Nanjing  Jiangsu  211111
-				CN
-
-00-13-CA   (hex)		ATX
-0013CA     (base 16)		ATX
-				8-1602 Tricont Avenue
-				Whitby  ON  L1N 7C3
-				CA
-
-28-04-C6   (hex)		Wanan Hongsheng Electronic Co.Ltd
-2804C6     (base 16)		Wanan Hongsheng Electronic Co.Ltd
-				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
-				Wanan  China/jiangxi  343800
-				CN
-
-D4-79-54   (hex)		Huawei Device Co., Ltd.
-D47954     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-4F-96   (hex)		Alps Alpine
-C44F96     (base 16)		Alps Alpine
-				20-1, Yoshima Industrial Park
-				Iwaki  Fukushima  970-1192
-				JP
-
-68-58-11   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-685811     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-C8-39-AC   (hex)		Huawei Device Co., Ltd.
-C839AC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-14-55-94   (hex)		Huawei Device Co., Ltd.
-145594     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-08-C0-6C   (hex)		Huawei Device Co., Ltd.
-08C06C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-FC-02-96   (hex)		Xiaomi Communications Co Ltd
-FC0296     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-60-E8-5B   (hex)		Texas Instruments
-60E85B     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-EC-2A-72   (hex)		Dell Inc.
-EC2A72     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-B4-BA-02   (hex)		Agatel Ltd
-B4BA02     (base 16)		Agatel Ltd
-				Apex House, Calthrope Road
-				Birmingham  —  B15 1TR
-				GB
-
-14-EB-B6   (hex)		TP-Link Corporation Limited
-14EBB6     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-54-AF-97   (hex)		TP-Link Corporation Limited
-54AF97     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-54-CF-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-54CF8D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-63-D9   (hex)		ARRIS Group, Inc.
-F863D9     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A4-05-D6   (hex)		ARRIS Group, Inc.
-A405D6     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-DC-A6-33   (hex)		ARRIS Group, Inc.
-DCA633     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-18-45-B3   (hex)		IEEE Registration Authority
-1845B3     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-EC-E7-44   (hex)		Omntec mfg. inc
-ECE744     (base 16)		Omntec mfg. inc
-				2420 Pond Road.
-				Ronkonkoma  NY  11779
-				US
-
-2C-4D-DE   (hex)		TECNO MOBILE LIMITED
-2C4DDE     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-30-3F-7B   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-303F7B     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-D4-84-57   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-D48457     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-D8-CF-BF   (hex)		Motorola Mobility LLC, a Lenovo Company
-D8CFBF     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-D4-88-66   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D48866     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-C0-9B   (hex)		Tellabs Enterprise, Inc.
-00C09B     (base 16)		Tellabs Enterprise, Inc.
-				4240 International Parkway  Suite 105
-				Carrollton  TX  75007
-				US
-
-68-BE-49   (hex)		Nebula Matrix
-68BE49     (base 16)		Nebula Matrix
-				24/F Ahoke Aurora Plaza, Zhongmei RD, Longhua Dist.
-				Shenzhen  Guangdong  518000
-				CN
-
-94-0D-2D   (hex)		Universal Electronics, Inc.
-940D2D     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-94-F8-27   (hex)		Shanghai Imilab Technology Co.Ltd
-94F827     (base 16)		Shanghai Imilab Technology Co.Ltd
-				29F, A Tower, New Caohejing International Business Center, Guiping Road, Xuhui District
-				Shanghai  Shanghai  200000
-				CN
-
-F0-B0-40   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-F0B040     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-48-2F-6B   (hex)		Aruba, a Hewlett Packard Enterprise Company
-482F6B     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-4C-06-B7   (hex)		ProDVX Europe B.V.
-4C06B7     (base 16)		ProDVX Europe B.V.
-				Europalaan 12F
-				Den Bosch  NB  5232 BC
-				NL
-
-74-86-E2   (hex)		Dell Inc.
-7486E2     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-A8-8C-3E   (hex)		Microsoft Corporation
-A88C3E     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-F8-14-FE   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-F814FE     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				No.5, Huitai Road Huinan High-Tech Park,Huiao Highway
-				Huizhou  Guangdong  516025
-				CN
-
-34-CE-69   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-34CE69     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-70-B8-F6   (hex)		Espressif Inc.
-70B8F6     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-14-9E-5D   (hex)		JSC IB Reform
-149E5D     (base 16)		JSC IB Reform
-				Varshavskoe shosse, 125, bld. 1, s. 3, fl. 6, room 10/23
-				Moscow    117587
-				RU
-
-F8-25-51   (hex)		Seiko Epson Corporation
-F82551     (base 16)		Seiko Epson Corporation
-				2070 Kotobuki Koaka
-				Matsumoto-shi  Nagano-ken  399-8702
-				JP
-
-E4-84-D3   (hex)		Xiaomi Communications Co Ltd
-E484D3     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-04-10-6B   (hex)		Xiaomi Communications Co Ltd
-04106B     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-04-CC-BC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04CCBC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-E5-04   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1CE504     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-0B-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2C0BAB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-A2-5A   (hex)		Shanghai Mo xiang Network Technology CO.,ltd
-E0A25A     (base 16)		Shanghai Mo xiang Network Technology CO.,ltd
-				Room#418-421, ShaHeXiLi, 2-2 XiLi North Road, LiCheng Community, Xili Street, NanShan District, Shenzhen City
-				Shenzhen  Guangdong  518071
-				CN
-
-14-7E-A1   (hex)		Britania Eletrônicos S.A.
-147EA1     (base 16)		Britania Eletrônicos S.A.
-				Dona Francisca St. 12340, Pirabeiraba
-				Joinville  Santa Catarina  89239-270
-				BR
-
-E8-16-56   (hex)		Hangzhou BroadLink Technology Co.,Ltd
-E81656     (base 16)		Hangzhou BroadLink Technology Co.,Ltd
-				Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China
-				Hangzhou  Zhejiang  310052
-				CN
-
-94-D2-BC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94D2BC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-53-A8   (hex)		ACL Airshop BV
-7453A8     (base 16)		ACL Airshop BV
-				Kantoorweg 7
-				West Knollendam  NH  1525 RJ
-				NL
-
-68-C8-EB   (hex)		Rockwell Automation
-68C8EB     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-34-85-11   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-348511     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-20-1F-54   (hex)		Raisecom Technology CO., LTD
-201F54     (base 16)		Raisecom Technology CO., LTD
-				No. 11, East Area, No. 10 Block, East Xibeiwang Road
-				Beijing    100094
-				CN
-
-7C-97-E1   (hex)		Huawei Device Co., Ltd.
-7C97E1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C8-3E-9E   (hex)		Huawei Device Co., Ltd.
-C83E9E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-60-DD-70   (hex)		Apple, Inc.
-60DD70     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-A5-F9   (hex)		Apple, Inc.
-98A5F9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-D0-45   (hex)		Intel Corporate
-E0D045     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-00-0C-36   (hex)		S-Takaya Electronics Industry Co.,Ltd.
-000C36     (base 16)		S-Takaya Electronics Industry Co.,Ltd.
-				3121-1 Satomi Satosyo-cho
-				Asakuchi-gun  Okayama  719-0301
-				JP
-
-EC-A9-07   (hex)		Apple, Inc.
-ECA907     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-87-BA   (hex)		TP-Link Corporation Limited
-2887BA     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-34-60-F9   (hex)		TP-Link Corporation Limited
-3460F9     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-64-25-EC   (hex)		guangdong kesheng zhixun technology 
-6425EC     (base 16)		guangdong kesheng zhixun technology 
-				1603?building B,kupai building,high-tech Industrial park,Nanshan district,shengzhen
-				shengzhen  guangdong  518000
-				CN
-
-68-4A-E9   (hex)		Samsung Electronics Co.,Ltd
-684AE9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-50-E8   (hex)		Nomadix, Inc
-0050E8     (base 16)		Nomadix, Inc
-				21600 Oxnard St. 19th Floor, 
-				Woodland Hills  CA  91367
-				US
-
-54-AC-FC   (hex)		LIZN ApS
-54ACFC     (base 16)		LIZN ApS
-				Stejlbjergparken 37
-				Vejle    7120
-				DK
-
-F4-B8-98   (hex)		Texas Instruments
-F4B898     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B0-D2-78   (hex)		Texas Instruments
-B0D278     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A4-39-B3   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-A439B3     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-6C-FF-CE   (hex)		Sagemcom Broadband SAS
-6CFFCE     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-C8-99-B2   (hex)		Arcadyan Corporation
-C899B2     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-B0-38-93   (hex)		Onda TLC GmbH
-B03893     (base 16)		Onda TLC GmbH
-				Lakeside Science and Technology Park B13a
-				Klagenfurt    9020
-				AT
-
-1C-9D-72   (hex)		Technicolor CH USA Inc.
-1C9D72     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-0C-B8-15   (hex)		Espressif Inc.
-0CB815     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-80-0C-F9   (hex)		Amazon Technologies Inc.
-800CF9     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-A0-92-08   (hex)		Tuya Smart Inc.
-A09208     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-C8-72-7E   (hex)		Nokia
-C8727E     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-F8-71   (hex)		Demant A/S
-00F871     (base 16)		Demant A/S
-				Kongebakken 9
-				Smørum    2765
-				DK
-
-60-A6-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60A6C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-8C-86   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-208C86     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F0-A9-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F0A951     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-D6-9A   (hex)		Intel Corporate
-64D69A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-5E-0B   (hex)		zte corporation
-185E0B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D0-BB-61   (hex)		zte corporation
-D0BB61     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-AC-73-52   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-AC7352     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-58-8F-CF   (hex)		Hangzhou Ezviz Software Co.,Ltd.
-588FCF     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
-				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-94-2A-6F   (hex)		Ubiquiti Networks Inc.
-942A6F     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-F4-E2-C6   (hex)		Ubiquiti Networks Inc.
-F4E2C6     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-A8-4F-B1   (hex)		Cisco Systems, Inc
-A84FB1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-50-C2-75   (hex)		GN Audio A/S
-50C275     (base 16)		GN Audio A/S
-				Lautrupbjerg 7
-				Ballerup    DK-2750
-				DK
-
-94-B5-55   (hex)		Espressif Inc.
-94B555     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-74-F2-FA   (hex)		Xiaomi Communications Co Ltd
-74F2FA     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-3C-E9-F7   (hex)		Intel Corporate
-3CE9F7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-F4-CE-23   (hex)		Intel Corporate
-F4CE23     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-5C-84-3C   (hex)		Sony Interactive Entertainment Inc.
-5C843C     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-E8-AE-C5   (hex)		Arista Networks
-E8AEC5     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-40-17-F6   (hex)		TKH SECURITY,S.L.U.
-4017F6     (base 16)		TKH SECURITY,S.L.U.
-				Calle Paquiro, 32
-				Málaga  Málaga  29006
-				ES
-
-00-40-58   (hex)		UKG
-004058     (base 16)		UKG
-				900 Chelmsford Street
-				Lowell  MA  01851
-				US
-
-2C-30-1A   (hex)		Technicolor CH USA Inc for Telus
-2C301A     (base 16)		Technicolor CH USA Inc for Telus
-				4855 Peachtree Industrial Blvd, #200
-				Norcross  GA  30092
-				US
-
-E8-C7-CF   (hex)		Wistron Neweb Corporation
-E8C7CF     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-C0-49-EF   (hex)		Espressif Inc.
-C049EF     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-EC-E7-A7   (hex)		Intel Corporate
-ECE7A7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-E4-2B-79   (hex)		Nokia
-E42B79     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-C8-14-B4   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-C814B4     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-00-19-8E   (hex)		Demant A/S
-00198E     (base 16)		Demant A/S
-				Kongebakken 9
-				Smørum    2765
-				DK
-
-00-0B-44   (hex)		Concord Idea Corp.
-000B44     (base 16)		Concord Idea Corp.
-				498 Markland Street, Unit 2
-				Markham  Ontario  L6C 1Z6
-				CA
-
-60-FB-00   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-60FB00     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-CC-5C-61   (hex)		Huawei Device Co., Ltd.
-CC5C61     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-F4-2B   (hex)		Huawei Device Co., Ltd.
-1CF42B     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-6C-51-BF   (hex)		Huawei Device Co., Ltd.
-6C51BF     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D0-92-00   (hex)		FiRa Consortium
-D09200     (base 16)		FiRa Consortium
-				3855 SW 153RD Drive
-				Beaverton  OR  97003
-				US
-
-E8-93-F3   (hex)		Graphiant Inc
-E893F3     (base 16)		Graphiant Inc
-				760 Navajo Way
-				Fremont  CA  94539
-				US
-
-28-02-44   (hex)		Apple, Inc.
-280244     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-5F-02   (hex)		Apple, Inc.
-E85F02     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E0-F6-2D   (hex)		Juniper Networks
-E0F62D     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-BC-DF-58   (hex)		Google, Inc.
-BCDF58     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-7C-C1-80   (hex)		Apple, Inc.
-7CC180     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-D0-4C   (hex)		Eseye Design Ltd
-00D04C     (base 16)		Eseye Design Ltd
-				20 Nugent Road, The Surrey Research Park
-				Surrey  Guildford  GU2 7AF
-				GB
-
-BC-60-6B   (hex)		Shanghai Baud Data Communication Co.,Ltd.
-BC606B     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
-				NO.123 JULI RD
-				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
-				CN
-
-DC-FE-23   (hex)		Murata Manufacturing Co., Ltd.
-DCFE23     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-34-73-79   (hex)		xFusion Digital Technologies Co., Limited
-347379     (base 16)		xFusion Digital Technologies Co., Limited
-				9th Floor, Building 1, Zensun Boya Square, Longzihu Wisdom Island, Zhengdong New District
-				Zhengzhou  Henan  450000
-				CN
-
-04-E6-9E   (hex)		ZHONGGUANCUN XINHAIZEYOU TECHNOLOGY CO.,LTD
-04E69E     (base 16)		ZHONGGUANCUN XINHAIZEYOU TECHNOLOGY CO.,LTD
-				13th Floor,Unit3,Building2,IC Park,NO.9 FengHao East Road, Haidian District
-				Beijing  Beijing  100094
-				CN
-
-7C-8A-C0   (hex)		EVBox BV
-7C8AC0     (base 16)		EVBox BV
-				Kabelweg 47
-				Amsterdam  Noord holland  1014 BA
-				NL
-
-AC-80-AE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-AC80AE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-D8-3D-CC   (hex)		shenzhen UDD Technologies,co.,Ltd
-D83DCC     (base 16)		shenzhen UDD Technologies,co.,Ltd
-				Unit D, 6th Floor, Jialitai Bldg., No.45 Yanshan Road, Shekou, Nanshan District, Shenzhen, China
-				shenzhen  guangdong  51800
-				CN
-
-04-17-B6   (hex)		Smart Innovation LLC
-0417B6     (base 16)		Smart Innovation LLC
-				7F,Tower B,Jianxing
-				ShenZhen  GuangZhou  518055
-				CN
-
-00-BE-43   (hex)		Dell Inc.
-00BE43     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-B4-E2-65   (hex)		Shenzhen SDMC Technology Co.,LTD
-B4E265     (base 16)		Shenzhen SDMC Technology Co.,LTD
-				19/F, Changhong Science & Technology Mansion, No.18, Keji South 12th Road, High-tech Industrial Park, Nanshan District
-				Shenzhen  GUANGDONG  518027
-				CN
-
-EC-7C-5C   (hex)		Juniper Networks
-EC7C5C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-EB-D8   (hex)		MERCUSYS TECHNOLOGIES CO., LTD.
-00EBD8     (base 16)		MERCUSYS TECHNOLOGIES CO., LTD.
-				3F,Zone B,Building R1,High-Tech Industrial Village,No.023 High-Tech South 4 Road,Nanshan,Shenzhen
-				Shenzhen  Guangdong  518057
-				CN
-
-CC-60-C8   (hex)		Microsoft Corporation
-CC60C8     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-6C-8D-77   (hex)		Cisco Systems, Inc
-6C8D77     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-11-B2   (hex)		Cisco Systems, Inc
-7411B2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B4-17-A8   (hex)		Facebook Technologies, LLC
-B417A8     (base 16)		Facebook Technologies, LLC
-				1 Hacker Way
-				Menlo Park  CA  94025
-				US
-
-10-54-D2   (hex)		IEEE Registration Authority
-1054D2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-10-43   (hex)		A2 CORPORATION
-001043     (base 16)		A2 CORPORATION
-				1-7-1 Togoshi
-				Tokyo  Shinagawa-ku  1420041
-				JP
-
-C4-DF-39   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-C4DF39     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-10-63-4B   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-10634B     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-80-97-33   (hex)		 Shenzhen Elebao Technology Co., Ltd
-809733     (base 16)		 Shenzhen Elebao Technology Co., Ltd
-				F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District
-				shenzhen  GUANGDONG  518126
-				CN
-
-F4-6D-2F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F46D2F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-00-A2-65   (hex)		M2Motive Technology Inc.
-00A265     (base 16)		M2Motive Technology Inc.
-				Room 402,No. 125 North Jiangsu Road, Changning District
-				Shanghai  Shanghai  200042
-				CN
-
-D8-36-5F   (hex)		Intelbras
-D8365F     (base 16)		Intelbras
-				BR 101, km 210, S/N°
-				São José  Santa Catarina  88104800
-				BR
-
-74-04-F1   (hex)		Intel Corporate
-7404F1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-00-04-35   (hex)		InfiNet LLC
-000435     (base 16)		InfiNet LLC
-				Office 425, 69/75 Vavilova str.
-				Moscow\    117335
-				RU
-
-E8-4D-EC   (hex)		Xerox Corporation
-E84DEC     (base 16)		Xerox Corporation
-				800 Phillips Rd
-				Webster  NY  14450
-				US
-
-C8-B8-2F   (hex)		eero inc.
-C8B82F     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-54-78-C9   (hex)		AMPAK Technology,Inc.
-5478C9     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-FC-10-1A   (hex)		Palo Alto Networks
-FC101A     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-6C-AE-E3   (hex)		Nokia
-6CAEE3     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-0C-AC-8A   (hex)		Sagemcom Broadband SAS
-0CAC8A     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-B8-5D-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B85DC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-3A-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B43AE2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-A4-6F   (hex)		China Dragon Technology Limited
-D0A46F     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-F0-C8-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F0C8B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-60-CD   (hex)		NR ELECTRIC CO., LTD
-2C60CD     (base 16)		NR ELECTRIC CO., LTD
-				69,Suyuan Avenue
-				Nanjing  Jiangsu  211102
-				CN
-
-8C-1E-80   (hex)		Cisco Systems, Inc
-8C1E80     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-1E-E1   (hex)		Taicang T&W Electronics
-A41EE1     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-E8-FB-1C   (hex)		AzureWave Technology Inc.
-E8FB1C     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-B4-A7-C6   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
-B4A7C6     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
-				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
-				NEW DELHI    NA
-				IN
-
-1C-76-F2   (hex)		Samsung Electronics Co.,Ltd
-1C76F2     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-80-C3-BA   (hex)		Sennheiser Consumer Audio GmbH
-80C3BA     (base 16)		Sennheiser Consumer Audio GmbH
-				Am Labor 1
-				Wedemark  Niedersachsen  30900
-				DE
-
-40-35-E6   (hex)		Samsung Electronics Co.,Ltd
-4035E6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-28-6B-35   (hex)		Intel Corporate
-286B35     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-30-43-D7   (hex)		IEEE Registration Authority
-3043D7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C0-EE-40   (hex)		Laird Connectivity
-C0EE40     (base 16)		Laird Connectivity
-				50 South Main St
-				Akron  Ohio  44308
-				US
-
-A4-7D-9F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-A47D9F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-84-EA-97   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-84EA97     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-14-B2-E5   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-14B2E5     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-E0-CB-56   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-E0CB56     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-30-04-5C   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-30045C     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-90-79-CF   (hex)		zte corporation
-9079CF     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-88-8F-A4   (hex)		Huawei Device Co., Ltd.
-888FA4     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-3C-82-C0   (hex)		Technicolor CH USA Inc.
-3C82C0     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-C4-DE-E2   (hex)		Espressif Inc.
-C4DEE2     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-68-B6-B3   (hex)		Espressif Inc.
-68B6B3     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-FC-A0-5A   (hex)		Oray.com co., LTD.
-FCA05A     (base 16)		Oray.com co., LTD.
-				8008Rm, building No.1 GuoDing d. Yangpu District
-				Shanghai  Shanghai  200433
-				CN
-
-90-48-6C   (hex)		Ring LLC
-90486C     (base 16)		Ring LLC
-				1523 26th St
-				Santa Monica  CA  90404
-				US
-
-3C-46-45   (hex)		Shanghai Infinity Wireless Technologies Co.,Ltd.
-3C4645     (base 16)		Shanghai Infinity Wireless Technologies Co.,Ltd.
-				Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai
-				Shanghai  Shanghai  200082
-				CN
-
-A4-F9-33   (hex)		Intel Corporate
-A4F933     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-10-F6-0A   (hex)		Intel Corporate
-10F60A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-70-D8-23   (hex)		Intel Corporate
-70D823     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-50-68-AC   (hex)		Huawei Device Co., Ltd.
-5068AC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-39-2F   (hex)		INGRAM MICRO SERVICES
-50392F     (base 16)		INGRAM MICRO SERVICES
-				100 CHEMIN DE BAILLOT
-				MONTAUBAN    82000
-				FR
-
-FC-84-17   (hex)		Honor Device Co., Ltd.
-FC8417     (base 16)		Honor Device Co., Ltd.
-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
-				Shenzhen   Guangdong  518040
-				CN
-
-2C-A7-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2CA79E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-7F-B2   (hex)		ARRIS Group, Inc.
-0C7FB2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-AC-B5-66   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-ACB566     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-10-24-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-102407     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-D9-EB   (hex)		Petabit Scale, Inc.
-74D9EB     (base 16)		Petabit Scale, Inc.
-				5814 Lonetree Blvd, Ste 200
-				Rocklin  CA  95765
-				US
-
-D0-21-AC   (hex)		Yohana
-D021AC     (base 16)		Yohana
-				3460 Hillview Ave.
-				Palo Alto  CA  94304
-				US
-
-38-1F-26   (hex)		IEEE Registration Authority
-381F26     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-7C-E1-52   (hex)		THE GOODYEAR TIRE & RUBBER COMPANY
-7CE152     (base 16)		THE GOODYEAR TIRE & RUBBER COMPANY
-				200 Innovation Way
-				Akron  OH  44316
-				US
-
-28-CD-C1   (hex)		Raspberry Pi Trading Ltd
-28CDC1     (base 16)		Raspberry Pi Trading Ltd
-				Maurice Wilkes Building, Cowley Road
-				Cambridge    CB4 0DS
-				GB
-
-00-90-3F   (hex)		WorldCast Systems
-00903F     (base 16)		WorldCast Systems
-				20 Avenue Neil Armstrong 
-				Mérignac    33700
-				FR
-
-50-E6-36   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-50E636     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-78-20-BD   (hex)		Polysense (Beijing) Technologies Co. Ltd
-7820BD     (base 16)		Polysense (Beijing) Technologies Co. Ltd
-				9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist.
-				Beijing    100085
-				CN
-
-EC-21-25   (hex)		Toshiba Corp.
-EC2125     (base 16)		Toshiba Corp.
-				1-1 Shibaura 1-Chome, Minato-Ku
-				Tokyo    105-8001
-				JP
-
-68-4E-05   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-684E05     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-04-99-BB   (hex)		Apple, Inc.
-0499BB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-4D-D4   (hex)		Sagemcom Broadband SAS
-F04DD4     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-E5-F1   (hex)		BUFFALO.INC
-00E5F1     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-A8-51-AB   (hex)		Apple, Inc.
-A851AB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-1B-F4   (hex)		Apple, Inc.
-5C1BF4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-EE-2A   (hex)		ConMet
-34EE2A     (base 16)		ConMet
-				5701 SE Columbia Way
-				Vancouver    WA  98661
-				US
-
-78-66-9D   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-78669D     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				 No.2, Jin-da Road, Huinan High-tech Industrial Park, Hui-ao Avenue
-				Huizhou  Guangdong  516025
-				CN
-
-48-46-8D   (hex)		Zepcam B.V.
-48468D     (base 16)		Zepcam B.V.
-				Delftechpark, 17-19
-				Delft    2628 XJ
-				NL
-
-90-49-92   (hex)		YSTen Technology Co.,Ltd
-904992     (base 16)		YSTen Technology Co.,Ltd
-				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
-				Beijing    100101
-				CN
-
-AC-29-29   (hex)		Infinix mobility limited
-AC2929     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-3C-CE-0D   (hex)		Shenzhen juduoping Technology Co.,Ltd
-3CCE0D     (base 16)		Shenzhen juduoping Technology Co.,Ltd
-				Baoan Xin'an Streat
-				Shenzhen    002052
-				CN
-
-00-0E-DD   (hex)		SHURE INCORPORATED
-000EDD     (base 16)		SHURE INCORPORATED
-				5800 W. TOUHY AVE.
-				NILES  IL  60714 
-				US
-
-18-FD-74   (hex)		Routerboard.com
-18FD74     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-40-D9-5A   (hex)		AMPAK Technology,Inc.
-40D95A     (base 16)		AMPAK Technology,Inc.
-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
-				TW
-
-4C-D0-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CD0DD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-90-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E4902A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-5E-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-905E44     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-3A-4B   (hex)		China Mobile Group Device Co.,Ltd.
-E83A4B     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-60-E9-AA   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-60E9AA     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-24-0F-5E   (hex)		Shenzhen z-router Technology Co., Ltd
-240F5E     (base 16)		Shenzhen z-router Technology Co., Ltd
-				406,Block A,Taojindi Building ,Tenglong Road,Longhua New District,
-				Shenzhen  GuangDong  518000
-				CN
-
-6C-97-6D   (hex)		Motorola Mobility LLC, a Lenovo Company
-6C976D     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-64-11-A4   (hex)		Motorola Mobility LLC, a Lenovo Company
-6411A4     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-10-F0-68   (hex)		Ruckus Wireless
-10F068     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F0-87-7F   (hex)		Magnetar Technology Shenzhen Co., LTD.
-F0877F     (base 16)		Magnetar Technology Shenzhen Co., LTD.
-				Room211, Building1, No.26 Puzai Road, Pingdi Longgang
-				Shenzhen  GUANGDONG  518117
-				CN
-
-74-D4-DD   (hex)		Quanta Computer Inc.
-74D4DD     (base 16)		Quanta Computer Inc.
-				No. 211, Wenhua 2nd Rd., Guishan Dist.
-				Taoyuan City  Taiwan  33377
-				TW
-
-C8-D6-B7   (hex)		Solidigm Technology
-C8D6B7     (base 16)		Solidigm Technology
-				1921 Corporate Center Circle, Suite 3B
-				Longmont  CO  80501
-				US
-
-60-5B-30   (hex)		Dell Inc.
-605B30     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-44-3C-9C   (hex)		Pintsch GmbH
-443C9C     (base 16)		Pintsch GmbH
-				Huenxer Strasse 149
-				Dinslaken    46537
-				DE
-
-D8-80-DC   (hex)		Huawei Device Co., Ltd.
-D880DC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E8-B3-EF   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E8B3EF     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-B4-9F-4D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-B49F4D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-F4-6C-68   (hex)		Wistron Neweb Corporation
-F46C68     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-84-93-B2   (hex)		zte corporation
-8493B2     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-20-64-DE   (hex)		Sunitec Enterprise Co.,Ltd
-2064DE     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-74-B7-25   (hex)		Huawei Device Co., Ltd.
-74B725     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-40-8E-DF   (hex)		Huawei Device Co., Ltd.
-408EDF     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A4-0F-98   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A40F98     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-BC-44-34   (hex)		Shenzhen TINNO Mobile Technology Corp.
-BC4434     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-70-66-2A   (hex)		Sony Interactive Entertainment Inc.
-70662A     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-34-AC-11   (hex)		China Mobile Group Device Co.,Ltd.
-34AC11     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-44-32-C2   (hex)		GOAL Co., Ltd.
-4432C2     (base 16)		GOAL Co., Ltd.
-				2-16-6 Mitsuyakita Yodogawa-ku
-				Osaka-shi  Osaka-fu  532-0032
-				JP
-
-18-B1-85   (hex)		Qiao Information Technology (Zhengzhou) Co., Ltd.
-18B185     (base 16)		Qiao Information Technology (Zhengzhou) Co., Ltd.
-				Room 405-1, Area A, 4th Floor, Wisdom Island Building, No.6, Zhongdao East, Zhengdong New District,
-				Zhengzhou  Henan  450000
-				CN
-
-A0-B7-65   (hex)		Espressif Inc.
-A0B765     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-CC-DB-A7   (hex)		Espressif Inc.
-CCDBA7     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-C8-6C-20   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-C86C20     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-C0-C9-76   (hex)		Shenzhen TINNO Mobile Technology Corp.
-C0C976     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-B4-C0-F5   (hex)		Shenzhen TINNO Mobile Technology Corp.
-B4C0F5     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-E8-F7-91   (hex)		Xiaomi Communications Co Ltd
-E8F791     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-0C-97-5F   (hex)		Aruba, a Hewlett Packard Enterprise Company
-0C975F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-DC-71-DD   (hex)		AX Technologies
-DC71DD     (base 16)		AX Technologies
-				1400 Broadway, 18th Floor
-				New York City  NY  10018
-				US
-
-54-A9-C8   (hex)		Home Control Singapore Pte Ltd
-54A9C8     (base 16)		Home Control Singapore Pte Ltd
-				151 Lorong Chuan
-				Singapore    556741
-				SG
-
-30-7F-10   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-307F10     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-A4-90-CE   (hex)		vivo Mobile Communication Co., Ltd.
-A490CE     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-F8-B8-B4   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-F8B8B4     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-FB-DD   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-B0FBDD     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-3C-69-D1   (hex)		ADC Automotive Distance Control System GmbH
-3C69D1     (base 16)		ADC Automotive Distance Control System GmbH
-				Peter-Dornier Strasse 10
-				Lindau  Bavaria  88131
-				DE
-
-E0-9C-8D   (hex)		Seakeeper, Inc.
-E09C8D     (base 16)		Seakeeper, Inc.
-				45310 Abell House Lane Suite 350
-				California  MD  20619
-				US
-
-04-BA-D6   (hex)		D-Link Corporation
-04BAD6     (base 16)		D-Link Corporation
-				No.289, Sinhu 3rd Rd., Neihu District, 
-				Taipei City     114
-				TW
-
-34-3A-20   (hex)		Aruba, a Hewlett Packard Enterprise Company
-343A20     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-30-3F-5D   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
-303F5D     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
-				JL.PALEM 1 BLOK DS-6
-				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
-				ID
-
-18-E9-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-18E91D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-70-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48706F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-6A-DD   (hex)		Liteon Technology Corporation
-F46ADD     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-C8-2A-F1   (hex)		TCT mobile ltd
-C82AF1     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-3C-E9-0E   (hex)		Espressif Inc.
-3CE90E     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-A8-42-E3   (hex)		Espressif Inc.
-A842E3     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-7C-0C-92   (hex)		Suzhou Mobydata Smart System Co.,Ltd.
-7C0C92     (base 16)		Suzhou Mobydata Smart System Co.,Ltd.
-				3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China
-				Suzhou  Jingsu  215000
-				CN
-
-04-26-05   (hex)		Bosch Building Automation GmbH
-042605     (base 16)		Bosch Building Automation GmbH
-				Kapellenweg 42
-				Verl    33415
-				DE
-
-3C-FE-AC   (hex)		Cisco Systems, Inc
-3CFEAC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-04-A7-41   (hex)		Cisco Systems, Inc
-04A741     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-88-9D   (hex)		Huawei Device Co., Ltd.
-A0889D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-D7-42   (hex)		Samsung Electronics Co.,Ltd
-98D742     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D4-9B-74   (hex)		Kinetic Technologies
-D49B74     (base 16)		Kinetic Technologies
-				6399 San Ignacio Ave #250
-				San Jose  CA  95119
-				US
-
-40-F8-DF   (hex)		CANON INC.
-40F8DF     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-20-47-ED   (hex)		SKY UK LIMITED
-2047ED     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-A0-BD-CD   (hex)		SKY UK LIMITED
-A0BDCD     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-3C-89-94   (hex)		SKY UK LIMITED
-3C8994     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-04-81-9B   (hex)		SKY UK LIMITED
-04819B     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-50-70-43   (hex)		SKY UK LIMITED
-507043     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-04-B8-6A   (hex)		SKY UK LIMITED
-04B86A     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-3C-45-7A   (hex)		SKY UK LIMITED
-3C457A     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-F4-6B-8C   (hex)		Hon Hai Precision Industry Co., Ltd.
-F46B8C     (base 16)		Hon Hai Precision Industry Co., Ltd.
-				GuangDongShenZhen
-				ShenZhen  GuangDong  518109
-				CN
-
-74-37-5F   (hex)		SERCOMM PHILIPPINES INC
-74375F     (base 16)		SERCOMM PHILIPPINES INC
-				Lot 1 & 5, Phase 1, Filinvest Technology Park 1, Brgy. Punta, Calamba City
-				Calamba    Lot 1
-				PH
-
-7C-67-AB   (hex)		Roku, Inc
-7C67AB     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-0C-7F-ED   (hex)		IEEE Registration Authority
-0C7FED     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F4-3B-D8   (hex)		Intel Corporate
-F43BD8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C8-4B-D6   (hex)		Dell Inc.
-C84BD6     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-E0-86-14   (hex)		Novatel Wireless Solutions, Inc.
-E08614     (base 16)		Novatel Wireless Solutions, Inc.
-				9710 Scranton Rd., Suite 200
-				San Diego  CA  92121
-				US
-
-A8-DE-68   (hex)		Beijing Wide Technology Co.,Ltd
-A8DE68     (base 16)		Beijing Wide Technology Co.,Ltd
-				Floor7,Block B,Yicheng wealth center,No. 22,Ronghua Middle Road,Beijing Economic and Technological Development Zone
-				Beijing  Beijing  100000
-				CN
-
-6C-30-2A   (hex)		Texas Instruments
-6C302A     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-74-46-B3   (hex)		Texas Instruments
-7446B3     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-94-4E-5B   (hex)		Ubee Interactive Co., Limited
-944E5B     (base 16)		Ubee Interactive Co., Limited
-				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
-				North Point    00000
-				HK
-
-B4-BA-9D   (hex)		SKY UK LIMITED
-B4BA9D     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-50-F2-61   (hex)		Photon Sail Technologies
-50F261     (base 16)		Photon Sail Technologies
-				8 Robinson Road, ASO Building
-				Singapore    048544
-				SG
-
-80-DA-C2   (hex)		Technicolor CH USA Inc.
-80DAC2     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-00-41-0E   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-00410E     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-FC-61-79   (hex)		IEEE Registration Authority
-FC6179     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-3C-4E-56   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-3C4E56     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-08-B6-1F   (hex)		Espressif Inc.
-08B61F     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-98-A2-C0   (hex)		Cisco Systems, Inc
-98A2C0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-EC-74-D7   (hex)		Grandstream Networks Inc
-EC74D7     (base 16)		Grandstream Networks Inc
-				126 brookline avenue
-				boston  MA  02215
-				US
-
-4C-72-74   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
-4C7274     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
-				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
-				ShenZHEN  GuangDong  518104
-				CN
-
-30-63-71   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
-306371     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
-				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
-				ShenZHEN  GuangDong  518104
-				CN
-
-88-12-AC   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-8812AC     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-28-01-1C   (hex)		zte corporation
-28011C     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-7C-8A-E1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-7C8AE1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU  215300
-				CN
-
-54-E4-A9   (hex)		BHR Tech GmbH
-54E4A9     (base 16)		BHR Tech GmbH
-				Georg-Franz-Koller-Straße 18
-				Bisamberg    2102
-				AT
-
-20-80-58   (hex)		Ciena Corporation
-208058     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-68-4A-AE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-684AAE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-D7-55   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60D755     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-45-CD   (hex)		IoT Diagnostics
-A445CD     (base 16)		IoT Diagnostics
-				10052 Commerce Park Drive
-				Cincinnati  OH  45246
-				US
-
-94-62-69   (hex)		ARRIS Group, Inc.
-946269     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D0-DD-49   (hex)		Juniper Networks
-D0DD49     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C8-63-FC   (hex)		ARRIS Group, Inc.
-C863FC     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-1C-CC-D6   (hex)		Xiaomi Communications Co Ltd
-1CCCD6     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-A8-C2-52   (hex)		Huawei Device Co., Ltd.
-A8C252     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A0-41-47   (hex)		Huawei Device Co., Ltd.
-A04147     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-AE-CB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1CAECB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-F1-9E   (hex)		Groupe Atlantic
-4CF19E     (base 16)		Groupe Atlantic
-				Ideal Boilers, National Ave
-				Hull  East Yorkshire  HU5 4JB
-				GB
-
-20-36-D7   (hex)		Shanghai Reacheng  Communication Technology Co.,Ltd
-2036D7     (base 16)		Shanghai Reacheng  Communication Technology Co.,Ltd
-				No. 80, Lane 1505 Zuchongzhi Road
-				Shanghai  Shanghai  201203
-				CN
-
-68-07-0A   (hex)		TPVision Europe B.V
-68070A     (base 16)		TPVision Europe B.V
-				Prins Bernhardplein 200
-				Amsterdam  Noord-Holland  1097 JB
-				NL
-
-4C-EB-BD   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-4CEBBD     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-7C-C9-26   (hex)		Wuhan GreeNet Information Service Co.,Ltd.
-7CC926     (base 16)		Wuhan GreeNet Information Service Co.,Ltd.
-				4-6F, Building 2, Phase 6, Optical Valley Software Park, East Lake High-Tech Development Zone
-				Wuhan    430000
-				CN
-
-5C-75-AF   (hex)		Fitbit, Inc.
-5C75AF     (base 16)		Fitbit, Inc.
-				199 Fremont Street, 14th Fl
-				San Francisco  CA  94105
-				US
-
-38-BA-B0   (hex)		Broadcom
-38BAB0     (base 16)		Broadcom
-				1320 Ridder Park
-				San Jose  CA  95131
-				US
-
-70-87-9E   (hex)		Beken Corporation
-70879E     (base 16)		Beken Corporation
-				Building 41, Capital of Tech Leaders, 1387 Zhangdong Road, Zhangjiang High-Tech Park, Pudong New District
-				Shanghai    201203
-				CN
-
-B4-50-62   (hex)		EmBestor Technology Inc.
-B45062     (base 16)		EmBestor Technology Inc.
-				7F, No.1, Chin-Shan 8th St
-				Hsin-Chu, Taiwan    300
-				TW
-
-04-4A-6C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-044A6C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-38-FB-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-38FB14     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F0-E4-A2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F0E4A2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-51-89   (hex)		SG Wireless Limited
-7C5189     (base 16)		SG Wireless Limited
-				RM 504 5/F Sun Fung Industrial Building 8-12 Ma Kok Street
-				Tsuen Wan    NA
-				HK
-
-10-63-C8   (hex)		Liteon Technology Corporation
-1063C8     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-58-20-59   (hex)		Xiaomi Communications Co Ltd
-582059     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-90-27-2B   (hex)		Algorab S.r.l.
-90272B     (base 16)		Algorab S.r.l.
-				Via Luigi Negrelli, 21/13
-				Lavis  TN  38015
-				IT
-
-4C-BC-B4   (hex)		ABB SpA - DIN Rail
-4CBCB4     (base 16)		ABB SpA - DIN Rail
-				V.le dell'industria 18
-				Vittuone  Milan  20010
-				IT
-
-94-D5-05   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-94D505     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-74-E1-B6   (hex)		Apple, Inc.
-74E1B6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-A5-2C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-24A52C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-27-59   (hex)		Levven Electronics Ltd.
-482759     (base 16)		Levven Electronics Ltd.
-				9741 54 Ave NW
-				Edmonton  Alberta  T6E 5J4
-				CA
-
-AC-77-13   (hex)		Honeywell Safety Products (Shanghai) Co.,Ltd
-AC7713     (base 16)		Honeywell Safety Products (Shanghai) Co.,Ltd
-				430 Li Bing Road Zhang Jiang Hi-Tech ParkPudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-08-84-9D   (hex)		Amazon Technologies Inc.
-08849D     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-90-BD-E6   (hex)		Quectel Wireless Solutions Co., Ltd.
-90BDE6     (base 16)		Quectel Wireless Solutions Co., Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-18-A4-A9   (hex)		Vanu Inc.
-18A4A9     (base 16)		Vanu Inc.
-				81 Hartwell Ave
-				Lexington  MA  02421
-				US
-
-80-E8-2C   (hex)		Hewlett Packard
-80E82C     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-D4-AD-BD   (hex)		Cisco Systems, Inc
-D4ADBD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-40-AE   (hex)		NIIC Technology Co., Ltd.
-2440AE     (base 16)		NIIC Technology Co., Ltd.
-				Room 8218, Building 3#B, No. 268 Furong Road, Jingkai District
-				Hefei    230601
-				CN
-
-F4-0E-01   (hex)		Apple, Inc.
-F40E01     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-95-CE   (hex)		Apple, Inc.
-1495CE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-DE-06   (hex)		Apple, Inc.
-50DE06     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-D1-35   (hex)		Xtreme Power Systems
-5CD135     (base 16)		Xtreme Power Systems
-				2440 Kiowa Blvd. N. #102
-				Lake Havasu City  AZ  86403
-				US
-
-78-69-D4   (hex)		Shenyang Vibrotech Instruments Inc.
-7869D4     (base 16)		Shenyang Vibrotech Instruments Inc.
-				No 23-2 Yunfeng St. Tiexi Dist. 
-				Shenyang   Liaoning  110021
-				CN
-
-08-26-97   (hex)		Zyxel Communications Corporation
-082697     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-CC-CC-CC   (hex)		Silicon Laboratories
-CCCCCC     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-CC-66-0A   (hex)		Apple, Inc.
-CC660A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-1D-43   (hex)		Apple, Inc.
-FC1D43     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-CB-9F   (hex)		TECNO MOBILE LIMITED
-64CB9F     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-4C-FB-FE   (hex)		Sercomm Japan Corporation
-4CFBFE     (base 16)		Sercomm Japan Corporation
-				8F, 3-1, YuanQu St., NanKang, Taipei 115, Taiwan
-				Taipei     115
-				TW
-
-C0-CB-F1   (hex)		Mobiwire Mobiles (NingBo) Co., LTD
-C0CBF1     (base 16)		Mobiwire Mobiles (NingBo) Co., LTD
-				No.999 Dacheng East Road, Fenghua District, Ningbo City , Zhejiang Province, PRC
-				Ningbo  Zhejiang  315500
-				CN
-
-FC-7D-6C   (hex)		HYESUNG TECHWIN Co., Ltd
-FC7D6C     (base 16)		HYESUNG TECHWIN Co., Ltd
-				#1509,545,Dunchon-daero, Jungwon-gu
-				Seongnam   Gyeonggi-do  13215
-				KR
-
-E4-7E-9A   (hex)		zte corporation
-E47E9A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-2C-16-BD   (hex)		IEEE Registration Authority
-2C16BD     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-30-A8-89   (hex)		DECIMATOR DESIGN
-30A889     (base 16)		DECIMATOR DESIGN
-				UNIT 5 / 11 PRECISION PLACE
-				VINEYARD  NSW  2765
-				AU
-
-B4-A2-EB   (hex)		IEEE Registration Authority
-B4A2EB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-1C-D5-E2   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-1CD5E2     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-00-24-E9   (hex)		Samsung Electronics Co.,Ltd
-0024E9     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3Dong, Yeongtong-Gu
-				Suwon City  Geyonggi Do  443-742
-				KR
-
-68-3B-78   (hex)		Cisco Systems, Inc
-683B78     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F8-60-F0   (hex)		Aruba, a Hewlett Packard Enterprise Company
-F860F0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-5C-A1-E0   (hex)		EmbedWay Technologies
-5CA1E0     (base 16)		EmbedWay Technologies
-				6F, Building 8, No 2388, Chenhang Rd, Shanghai
-				Shanghai    201114
-				CN
-
-84-D4-12   (hex)		Palo Alto Networks
-84D412     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-68-AB-09   (hex)		Nokia
-68AB09     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-F4-CE-36   (hex)		Nordic Semiconductor ASA
-F4CE36     (base 16)		Nordic Semiconductor ASA
-				Otto Nielsens veg 12
-				Trondheim    NO-7052
-				NO
-
-B4-60-77   (hex)		Sichuan Changhong Electric Ltd.
-B46077     (base 16)		Sichuan Changhong Electric Ltd.
-				No.35,East MianXin Road,MianYang,Sichaun,China.
-				MianYang  SiChuan  PRC 621000
-				CN
-
-00-F6-20   (hex)		Google, Inc.
-00F620     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-F4-33-28   (hex)		CIMCON Lighting Inc.
-F43328     (base 16)		CIMCON Lighting Inc.
-				35 Crosby Drive
-				Bedford  MA  01730
-				US
-
-7C-94-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C942A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-B7-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1CB796     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-38-47-BC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3847BC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-92-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-549209     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-59-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-745909     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-5A-C7   (hex)		Cisco Systems, Inc
-5C5AC7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-3C-B7-4B   (hex)		Technicolor CH USA Inc.
-3CB74B     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-00-ED-B8   (hex)		KYOCERA Corporation 
-00EDB8     (base 16)		KYOCERA Corporation 
-				30 Hoji
-				Kitami,  Hokkaido  099-1595
-				JP
-
-9C-99-CD   (hex)		Voippartners
-9C99CD     (base 16)		Voippartners
-				Via di Passolombardo 35
-				Rome     00133
-				IT
-
-C4-C6-03   (hex)		Cisco Systems, Inc
-C4C603     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-A1-3A   (hex)		SES-imagotag
-BCA13A     (base 16)		SES-imagotag
-				St.-Peter-Gürtel 10b
-				Graz    8010
-				AT
-
-28-23-F5   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-2823F5     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-F0-10-AB   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-F010AB     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhang Tong Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-B4-DC-09   (hex)		Guangzhou Dawei Communication Co.,Ltd
-B4DC09     (base 16)		Guangzhou Dawei Communication Co.,Ltd
-				Zone A 906#, International Business Incubator, No.3 Juquan Road, Huangpu District
-				Guangzhou  Guangdong  510660
-				CN
-
-98-86-5D   (hex)		Nokia Shanghai Bell Co., Ltd.
-98865D     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-7C-B5-9B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-7CB59B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-2C-4F-52   (hex)		Cisco Systems, Inc
-2C4F52     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-68-A0-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-68A03E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-B8-C3-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B8C385     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan     523808
-				CN
-
-4C-E9-E4   (hex)		New H3C Technologies Co., Ltd
-4CE9E4     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-AC-DB-48   (hex)		ARRIS Group, Inc.
-ACDB48     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-C8-0D-32   (hex)		Holoplot GmbH
-C80D32     (base 16)		Holoplot GmbH
-				Ringbahnstr. 12, Hof A2
-				Berlin    12099
-				DE
-
-D0-57-94   (hex)		Sagemcom Broadband SAS
-D05794     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-04-D9-F5   (hex)		ASUSTek COMPUTER INC.
-04D9F5     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-B8-91-C9   (hex)		Handreamnet
-B891C9     (base 16)		Handreamnet
-				#1203 Ace High-end Tower II, 61, Digital-ro 26-gil, Guro-Gu
-				Seoul    08389
-				KR
-
-C8-A7-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C8A776     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-00-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A400E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-C4-FC   (hex)		Xiaomi Communications Co Ltd
-B4C4FC     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-C8-D6-9D   (hex)		Arab International Optronics
-C8D69D     (base 16)		Arab International Optronics
-				El Salam St. 
-				El Salam City   Cairo  11371
-				EG
-
-40-5B-D8   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-405BD8     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-54-EC-2F   (hex)		Ruckus Wireless
-54EC2F     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-28-99-C7   (hex)		LINDSAY BROADBAND INC
-2899C7     (base 16)		LINDSAY BROADBAND INC
-				2035 2 FISHER DRIVE
-				PETERBOROUGH  Ontario  K9J 6X6
-				CA
-
-FC-BD-67   (hex)		Arista Networks
-FCBD67     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-00-25-7E   (hex)		NEW POS TECHNOLOGY LIMITED
-00257E     (base 16)		NEW POS TECHNOLOGY LIMITED
-				6FRM, 6F, China Economic Trade Building
-				Shenzhen  Guangdong  518000
-				CN
-
-F8-AE-27   (hex)		John Deere Electronic Solutions
-F8AE27     (base 16)		John Deere Electronic Solutions
-				1441 44th St N
-				Fargo  ND  58102
-				US
-
-74-45-CE   (hex)		CRESYN
-7445CE     (base 16)		CRESYN
-				8-22,Jamwon-dong
-				Seoul  Seocho-Gu  #137-902
-				KR
-
-C4-F7-D5   (hex)		Cisco Systems, Inc
-C4F7D5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-1C-64-99   (hex)		Comtrend Corporation
-1C6499     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-10-DC-4A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-10DC4A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-88-EF-16   (hex)		ARRIS Group, Inc.
-88EF16     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-8C-A9-6F   (hex)		D&M Holdings Inc.
-8CA96F     (base 16)		D&M Holdings Inc.
-				D&M Building, 2-1 Nisshin-cho
-				Kawasaki-shi  Kanagawa    210-8569
-				JP
-
-7C-D6-61   (hex)		Xiaomi Communications Co Ltd
-7CD661     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-B0-FD-0B   (hex)		IEEE Registration Authority
-B0FD0B     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-98-B8-BA   (hex)		LG Electronics (Mobile Communications)
-98B8BA     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-0C-E9-9A   (hex)		ATLS ALTEC
-0CE99A     (base 16)		ATLS ALTEC
-				3 RUE DE LA GUIVERNONE ZI DU VERT GALANT 
-				ST OUEN L AUMONE    95310
-				FR
-
-4C-11-AE   (hex)		Espressif Inc.
-4C11AE     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-8C-89-FA   (hex)		Zhejiang Hechuan Technology Co., Ltd.
-8C89FA     (base 16)		Zhejiang Hechuan Technology Co., Ltd.
-				No. 9, Fucai Road, Longyou Industrial Zone
-				Quzhou  Zhejiang  324000
-				CN
-
-4C-BC-48   (hex)		Cisco Systems, Inc
-4CBC48     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-80-D0-4A   (hex)		Technicolor CH USA Inc.
-80D04A     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-48-D8-75   (hex)		China TransInfo Technology Co., Ltd
-48D875     (base 16)		China TransInfo Technology Co., Ltd
-				Qianfang Building, Phase I, Zhongguancun Software Park, 8 Wangxi Road, Haidian District
-				Beijing    100085
-				CN
-
-D4-78-9B   (hex)		Cisco Systems, Inc
-D4789B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-48-3F-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-483FE9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-3C-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-143CC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-E5-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A8E544     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-18-20-D5   (hex)		ARRIS Group, Inc.
-1820D5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-30-50-FD   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-3050FD     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-40-BC   (hex)		ALGORITHMICS LTD.
-0040BC     (base 16)		ALGORITHMICS LTD.
-				3 DRAYTON PARK
-				    ENGLAND
-				GB
-
-00-40-65   (hex)		GTE SPACENET
-004065     (base 16)		GTE SPACENET
-				1700 OLD MEADOW ROAD
-				MCLEAN  VA  22102
-				US
-
-88-E6-4B   (hex)		Juniper Networks
-88E64B     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-D8-D0-90   (hex)		Dell Inc.
-D8D090     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-50-C4-DD   (hex)		BUFFALO.INC
-50C4DD     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-00-84-ED   (hex)		Private
-0084ED     (base 16)		Private
-
-E0-02-A5   (hex)		ABB Robotics
-E002A5     (base 16)		ABB Robotics
-				Hydrovägen 10
-				Västerås    721 68
-				SE
-
-F4-2E-7F   (hex)		Aruba, a Hewlett Packard Enterprise Company
-F42E7F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-B4-CC-04   (hex)		Piranti
-B4CC04     (base 16)		Piranti
-				126, Beolmal-ro
-				Dongan-gu, Anyang-si, Gyeonggi-do    14057
-				KR
-
-B8-D5-26   (hex)		Zyxel Communications Corporation
-B8D526     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-F0-B9-68   (hex)		ITEL MOBILE LIMITED
-F0B968     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-04-E5-6E   (hex)		THUB Co., ltd.
-04E56E     (base 16)		THUB Co., ltd.
-				#607 2, Busandaehak-ro 63beon-gil, Geumjeong-gu
-				Busan    46241
-				KR
-
-1C-7F-2C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C7F2C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-88-BC-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88BCC1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-BF-CE   (hex)		Shenzhen Century Xinyang Technology Co., Ltd
-1CBFCE     (base 16)		Shenzhen Century Xinyang Technology Co., Ltd
-				3F, North Building, Bantian High-tech industrial Zone, No. 2 of Bell Road
-				Shenzhen  Guangdong  518129
-				CN
-
-F8-30-02   (hex)		Texas Instruments
-F83002     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A8-A1-59   (hex)		ASRock Incorporation
-A8A159     (base 16)		ASRock Incorporation
-				2F., No. 37, Sec. 2, Jhongyang S. Rd., Beitou District,
-				Taipei    112
-				TW
-
-78-DA-07   (hex)		Zhejiang Tmall Technology Co., Ltd.
-78DA07     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, 
-				Shenzhen  Guangdong  518000
-				CN
-
-44-A6-1E   (hex)		INGRAM MICRO SERVICES
-44A61E     (base 16)		INGRAM MICRO SERVICES
-				100 CHEMIN DE BAILLOT
-				MONTAUBAN    82000
-				FR
-
-38-D2-CA   (hex)		Zhejiang Tmall Technology Co., Ltd.
-38D2CA     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-10-9E-3A   (hex)		Zhejiang Tmall Technology Co., Ltd.
-109E3A     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, 
-				Shenzhen  Guangdong  518000
-				CN
-
-90-4D-C3   (hex)		Flonidan A/S
-904DC3     (base 16)		Flonidan A/S
-				Islandsvej 29
-				Horsens    8700
-				DK
-
-00-0D-F1   (hex)		IONIX INC.
-000DF1     (base 16)		IONIX INC.
-				Ssangyong IT Twin Tower 604, 442-17, Sangdaewon-dong, Jungwon-gu,
-				Seongnam-si  Gyeonggi-do  462-120
-				KR
-
-00-07-7C   (hex)		Westermo Network Technologies AB
-00077C     (base 16)		Westermo Network Technologies AB
-				Stora Sundby
-				Sweden    SE-640 40
-				SE
-
-8C-42-6D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8C426D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-F8-91   (hex)		Kaonmedia CO., LTD.
-90F891     (base 16)		Kaonmedia CO., LTD.
-				884-3, Seongnam-daero, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13517
-				KR
-
-44-5D-5E   (hex)		SHENZHEN Coolkit Technology CO.,LTD
-445D5E     (base 16)		SHENZHEN Coolkit Technology CO.,LTD
-				B09 2nd Floor, T6 ArtZone XiLi, Nanshan Dist
-				shenzhen  guangdong  518110
-				CN
-
-50-AD-71   (hex)		Tessolve Semiconductor Private Limited
-50AD71     (base 16)		Tessolve Semiconductor Private Limited
-				Plot No: 31, P2, Electronic City Phase II, Electronic City
-				Bengaluru  Karnataka  560100
-				IN
-
-20-2A-C5   (hex)		Petite-En
-202AC5     (base 16)		Petite-En
-				1, Gwanak-ro, Gwanak-gu
-				Seoul    08826
-				KR
-
-A8-BF-3C   (hex)		HDV Phoelectron Technology Limited
-A8BF3C     (base 16)		HDV Phoelectron Technology Limited
-				 Room 1103, Hang Seng Mongkok Building, 677 Nathan Road,Mongkok
-				Kowloon  Hong Kong  518103
-				CN
-
-D4-F5-27   (hex)		SIEMENS AG
-D4F527     (base 16)		SIEMENS AG
-				Oestliche Rheinbrückenstraße 50
-				Karlsruhe  Baden-Württemberg  76181
-				DE
-
-B8-B2-F8   (hex)		Apple, Inc.
-B8B2F8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-46-0A   (hex)		Apple, Inc.
-98460A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-5D-0A   (hex)		Apple, Inc.
-B85D0A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-9A-1D   (hex)		Apple, Inc.
-7C9A1D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-30-25   (hex)		Apple, Inc.
-103025     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-AC-D7   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-70ACD7     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-54-62-E2   (hex)		Apple, Inc.
-5462E2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-9D-99   (hex)		Apple, Inc.
-149D99     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-7B-AC   (hex)		Nokia
-147BAC     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-90-6D-05   (hex)		BXB ELECTRONICS CO., LTD
-906D05     (base 16)		BXB ELECTRONICS CO., LTD
-				6F.-1, NO.288-5, Xinya Rd., Qianzhen Dist.
-				Kaohsiung    80673
-				TW
-
-D4-BB-C8   (hex)		vivo Mobile Communication Co., Ltd.
-D4BBC8     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-48-95-07   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-489507     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-24-BF-74   (hex)		Private
-24BF74     (base 16)		Private
-
-CC-DC-55   (hex)		Dragonchip Limited
-CCDC55     (base 16)		Dragonchip Limited
-				Room 601-2, 6/F, IC Development Centre, No. 6 Science Park West Avenue, Hong Kong Science Park, Shatin, N.T.
-				Hong Kong    NA
-				HK
-
-28-FF-B2   (hex)		Toshiba Corp.
-28FFB2     (base 16)		Toshiba Corp.
-				1-1 Shibaura 1-Chome, Minato-Ku
-				Tokyo    105-8001
-				JP
-
-1C-60-D2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-1C60D2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-F4-B5-AA   (hex)		zte corporation
-F4B5AA     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E8-AC-AD   (hex)		zte corporation
-E8ACAD     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-08-36-C9   (hex)		NETGEAR
-0836C9     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-74-5B-C5   (hex)		IEEE Registration Authority
-745BC5     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-94-40-C9   (hex)		Hewlett Packard Enterprise
-9440C9     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-A0-41-A7   (hex)		NL Ministry of Defense
-A041A7     (base 16)		NL Ministry of Defense
-				PO Box 10000
-				  Noord Holland  1780 CA Den Helder
-				NL
-
-E4-46-DA   (hex)		Xiaomi Communications Co Ltd
-E446DA     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-1C-12-B0   (hex)		Amazon Technologies Inc.
-1C12B0     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-4C-BC-98   (hex)		IEEE Registration Authority
-4CBC98     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-2C-F4-32   (hex)		Espressif Inc.
-2CF432     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-64-73-66   (hex)		Shenzhen Siera Technology Ltd
-647366     (base 16)		Shenzhen Siera Technology Ltd
-				Room 2039, Shenhai Building, Wanzhong Village, Bulong Road, Minzhi, Longhua district,  City: Shenzhen
-				Shenzhen  Guangdong  518131
-				CN
-
-04-1E-FA   (hex)		BISSELL Homecare, Inc.
-041EFA     (base 16)		BISSELL Homecare, Inc.
-				2345 Walker Ave NW
-				Grand Rapids  MI  49544
-				US
-
-D8-55-75   (hex)		Samsung Electronics Co.,Ltd
-D85575     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D4-11-A3   (hex)		Samsung Electronics Co.,Ltd
-D411A3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-04-BA-8D   (hex)		Samsung Electronics Co.,Ltd
-04BA8D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-74-4D-28   (hex)		Routerboard.com
-744D28     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-00-A0-85   (hex)		Private
-00A085     (base 16)		Private
-
-E0-5A-9F   (hex)		IEEE Registration Authority
-E05A9F     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-5A-F8   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-8C5AF8     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-D4-58-00   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D45800     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-90-84-2B   (hex)		LEGO System A/S
-90842B     (base 16)		LEGO System A/S
-				Aastvej 1
-				Billund    DK-7190
-				DK
-
-00-26-7E   (hex)		PARROT SA
-00267E     (base 16)		PARROT SA
-				174 Quai de Jemmapes
-				Paris    75010
-				FR
-
-2C-55-7C   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-2C557C     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-F4-BC-DA   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-F4BCDA     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-00-09-15   (hex)		CAS Corp.
-000915     (base 16)		CAS Corp.
-				#19, Ganap-Ri
-				Yangju-Gun  Kyunggi-Do  482-841
-				KR
-
-58-D9-C3   (hex)		Motorola Mobility LLC, a Lenovo Company
-58D9C3     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-2C-73-A0   (hex)		Cisco Systems, Inc
-2C73A0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-3E-07   (hex)		Electrolux
-443E07     (base 16)		Electrolux
-				Corso Lino Zanussi 24
-				Porcia  PORDENONE  33080
-				IT
-
-84-85-E6   (hex)		Guangdong Asano Technology CO.,Ltd.
-8485E6     (base 16)		Guangdong Asano Technology CO.,Ltd.
-				Changsheng Road, Songxia Industrial Park, Songgang, Shishan Town, Nanhai
-				 Foshan   Guangdong, China.  528200
-				CN
-
-3C-83-75   (hex)		Microsoft Corporation
-3C8375     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-00-0A-A8   (hex)		ePipe Pty. Ltd.
-000AA8     (base 16)		ePipe Pty. Ltd.
-				P.O. Box 1428
-				Brisbane  Queensland  4066
-				AU
-
-00-29-C2   (hex)		Cisco Systems, Inc
-0029C2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-18-7C-0B   (hex)		Ruckus Wireless
-187C0B     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-D4-7B-35   (hex)		NEO Monitors AS
-D47B35     (base 16)		NEO Monitors AS
-				PoBox 384
-				Loerenskog  Loerenskog  1471
-				NO
-
-00-08-78   (hex)		Benchmark Storage Innovations
-000878     (base 16)		Benchmark Storage Innovations
-				3122 Sterling Circle
-				Boulder  CO  80301
-				US
-
-6C-F3-7F   (hex)		Aruba, a Hewlett Packard Enterprise Company
-6CF37F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-14-07-08   (hex)		Private
-140708     (base 16)		Private
-
-78-A7-EB   (hex)		1MORE
-78A7EB     (base 16)		1MORE
-				TianliaoBuilding F14
-				New Materials Industrial Park,Xueyuan Blvd  Shenzhen, Nanshan District  518005
-				CN
-
-48-5D-36   (hex)		Verizon 
-485D36     (base 16)		Verizon 
-				One Verizon Way
-				Basking Ridge  NJ  07030
-				US
-
-20-C0-47   (hex)		Verizon 
-20C047     (base 16)		Verizon 
-				One Verizon Way
-				Basking Ridge    07030
-				US
-
-34-6B-46   (hex)		Sagemcom Broadband SAS
-346B46     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-7C-60-4A   (hex)		Avelon
-7C604A     (base 16)		Avelon
-				Bändliweg 20
-				Zurich    8048
-				CH
-
-18-64-72   (hex)		Aruba, a Hewlett Packard Enterprise Company
-186472     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-84-D4-7E   (hex)		Aruba, a Hewlett Packard Enterprise Company
-84D47E     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-24-DE-C6   (hex)		Aruba, a Hewlett Packard Enterprise Company
-24DEC6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-00-17-A0   (hex)		RoboTech srl
-0017A0     (base 16)		RoboTech srl
-				Via Mazzini 82
-				Sarzana (SP)    I-19038
-				IT
-
-10-3D-0A   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-103D0A     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-94-27-90   (hex)		TCT mobile ltd
-942790     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-A4-17-91   (hex)		Shenzhen Decnta Technology Co.,LTD.
-A41791     (base 16)		Shenzhen Decnta Technology Co.,LTD.
-				F13,No.02,Building Shangqi,Nanhaidadao 4050 Nanshan District,Shenzhen,P.R.China
-				shenzhen  Guangdong  518057
-				CN
-
-34-DA-B7   (hex)		zte corporation
-34DAB7     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-10-9C-70   (hex)		Prusa Research s.r.o.
-109C70     (base 16)		Prusa Research s.r.o.
-				Partyzanska 188/7a
-				Prague    17000
-				CZ
-
-E8-4C-56   (hex)		INTERCEPT SERVICES LIMITED
-E84C56     (base 16)		INTERCEPT SERVICES LIMITED
-				Bates Mill, Colne Road
-				Huddersfield  North Yorkshire  HD1 3AG
-				GB
-
-A4-19-08   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-A41908     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-80-D3-36   (hex)		CERN
-80D336     (base 16)		CERN
-				CH-1211 
-				GENEVE  SUISSE/SWITZ  023
-				CH
-
-64-25-5E   (hex)		Observint Technologies, Inc.
-64255E     (base 16)		Observint Technologies, Inc.
-				11000 N Mopac Expressway Suite 300
-				Austin  TX  78759
-				US
-
-90-94-0A   (hex)		Analog Devices, Inc
-90940A     (base 16)		Analog Devices, Inc
-				Unit 2200, Airport Business Park, Kinsale Road
-				Cork    T12 X36X
-				IE
-
-40-B0-76   (hex)		ASUSTek COMPUTER INC.
-40B076     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-D4-3D-39   (hex)		Dialog Semiconductor
-D43D39     (base 16)		Dialog Semiconductor
-				B-7F, SiliconPark, 35, Pangyo-ro 255beon-gil, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13486
-				KR
-
-00-14-A5   (hex)		Gemtek Technology Co., Ltd.
-0014A5     (base 16)		Gemtek Technology Co., Ltd.
-				No. 1 Jen Ai Road
-				Hukou, Hsinchu    303
-				TW
-
-C0-B5-D7   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-C0B5D7     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
-				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
-				Chongqing  Chongqing  401332
-				CN
-
-D4-AD-71   (hex)		Cisco Systems, Inc
-D4AD71     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-70-2B-1D   (hex)		E-Domus International Limited
-702B1D     (base 16)		E-Domus International Limited
-				1st Floor
-				London    W1W 7BL
-				GB
-
-F0-85-C1   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-F085C1     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-4C-DD-7D   (hex)		LHP Telematics LLC
-4CDD7D     (base 16)		LHP Telematics LLC
-				17406 Tiller Ct. STE 100
-				westfield  IN  46074
-				US
-
-B8-BC-5B   (hex)		Samsung Electronics Co.,Ltd
-B8BC5B     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-10-8E-BA   (hex)		Molekule
-108EBA     (base 16)		Molekule
-				1184 Harrison Street
-				San Francisco    94103
-				US
-
-4C-21-8C   (hex)		Panasonic India Private limited
-4C218C     (base 16)		Panasonic India Private limited
-				12th floor, Ambience tower, Ambience Island
-				Gurgaon  Haryana  122002
-				IN
-
-2C-4E-7D   (hex)		Chunghua Intelligent Network Equipment Inc.
-2C4E7D     (base 16)		Chunghua Intelligent Network Equipment Inc.
-				2F-3, No.5, Sec. 3, New Taipei Blvd.,, XinZhung Dist, 
-				New Taipei City  選擇州  242
-				TW
-
-A4-F4-65   (hex)		ITEL MOBILE LIMITED
-A4F465     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-4C-91-7A   (hex)		IEEE Registration Authority
-4C917A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-74-3A-65   (hex)		NEC Corporation
-743A65     (base 16)		NEC Corporation
-				7-1, Shiba 5-chome, Minato-ku
-				Tokyo    108-8001
-				JP
-
-00-25-5C   (hex)		NEC Corporation
-00255C     (base 16)		NEC Corporation
-				1753, Shimonumabe, Nakahara-Ku, Kawasaki
-				Kanagawa    211-8666
-				JP
-
-68-4F-64   (hex)		Dell Inc.
-684F64     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-CC-70-ED   (hex)		Cisco Systems, Inc
-CC70ED     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-90-7E-30   (hex)		LARS
-907E30     (base 16)		LARS
-				Swierkowa 14
-				Niepruszewo    64-320
-				PL
-
-84-EB-3E   (hex)		Vivint Smart Home
-84EB3E     (base 16)		Vivint Smart Home
-				4931 N. 300 W.
-				Provo  UT  84604
-				US
-
-00-A0-D5   (hex)		Sierra Wireless
-00A0D5     (base 16)		Sierra Wireless
-				13811 Wireless Way
-				Richmond  RICHMOND B.C.  V6V 3A4
-				CA
-
-18-BB-26   (hex)		FN-LINK TECHNOLOGY LIMITED
-18BB26     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-18-B9-05   (hex)		Hong Kong Bouffalo Lab Limited
-18B905     (base 16)		Hong Kong Bouffalo Lab Limited
-				RM 1903, 19/F Lee Garden One 33 Hysan Avenue, Causeway Bay
-				HongKong    999077
-				HK
-
-EC-F0-FE   (hex)		zte corporation
-ECF0FE     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-94-A4-0C   (hex)		Diehl Metering GmbH
-94A40C     (base 16)		Diehl Metering GmbH
-				Industriestrasse 13
-				Ansbach    91522
-				DE
-
-70-B3-17   (hex)		Cisco Systems, Inc
-70B317     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B0-02-47   (hex)		AMPAK Technology, Inc.
-B00247     (base 16)		AMPAK Technology, Inc.
-				3F.,No.15-1 Zhonghua Road,Hsinchu Industrial Park, Hukou,Hsinchu
-				Hsinchu  Taiwan ROC.  30352
-				TW
-
-BC-E7-96   (hex)		Wireless CCTV Ltd
-BCE796     (base 16)		Wireless CCTV Ltd
-				charles Babbage house
-				Rochdale  Greater Manchester  ol164nw
-				GB
-
-94-8F-CF   (hex)		ARRIS Group, Inc.
-948FCF     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A8-F5-DD   (hex)		ARRIS Group, Inc.
-A8F5DD     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-9C-82-75   (hex)		Yichip Microelectronics (Hangzhou) Co.,Ltd
-9C8275     (base 16)		Yichip Microelectronics (Hangzhou) Co.,Ltd
-				Room 401, Building 15, No.498 Guoshoujing Road, Pudong Software Park
-				Shanghai    200120
-				CN
-
-5C-CB-CA   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-5CCBCA     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-28-E9-8E   (hex)		Mitsubishi Electric Corporation
-28E98E     (base 16)		Mitsubishi Electric Corporation
-				2-7-3 Marunouchi Chiyoda-ku
-				Tokyo    100-8310
-				JP
-
-34-F8-E7   (hex)		Cisco Systems, Inc
-34F8E7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B0-90-7E   (hex)		Cisco Systems, Inc
-B0907E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-73-60   (hex)		Earda Technologies co Ltd
-2C7360     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-50-8C-F5   (hex)		China Mobile Group Device Co.,Ltd.
-508CF5     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-1C-54-9E   (hex)		Universal Electronics, Inc.
-1C549E     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-E4-CA-12   (hex)		zte corporation
-E4CA12     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D4-9E-05   (hex)		zte corporation
-D49E05     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-58-5F-F6   (hex)		zte corporation
-585FF6     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-40-B3-0E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-40B30E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-04-CE-7E   (hex)		NXP France Semiconductors France
-04CE7E     (base 16)		NXP France Semiconductors France
-				Parc les Algorithmes,Saint Aubin
-				Gif sur Yvette    91193
-				FR
-
-C0-9A-D0   (hex)		Apple, Inc.
-C09AD0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-B0-1F   (hex)		Apple, Inc.
-94B01F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-CC-4D   (hex)		Shenzhen mantunsci co., LTD
-98CC4D     (base 16)		Shenzhen mantunsci co., LTD
-				3 floor, 3 environmental protection industrial park, Nanshan District
-				Shenzhen   Guangdong  518000
-				CN
-
-B8-C7-4A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B8C74A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-D8-CE-3A   (hex)		Xiaomi Communications Co Ltd
-D8CE3A     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-10-2C-6B   (hex)		AMPAK Technology, Inc.
-102C6B     (base 16)		AMPAK Technology, Inc.
-				3F.,No.15-1 Zhonghua Road,Hsinchu Industrial Park, Hukou,Hsinchu, Taiwan (R.O.C.)
-				Hsinchu  Taiwan ROC.  30352
-				TW
-
-74-85-C4   (hex)		New H3C Technologies Co., Ltd
-7485C4     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-94-F6-D6   (hex)		Apple, Inc.
-94F6D6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-2D-7C   (hex)		Apple, Inc.
-F82D7C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-BA-E4   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
-D0BAE4     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
-				Room 811,Tongpu Building
-				Shanghai  Shanghai  200333
-				CN
-
-48-D3-5D   (hex)		Private
-48D35D     (base 16)		Private
-
-80-FB-F0   (hex)		Quectel Wireless Solutions Co., Ltd.
-80FBF0     (base 16)		Quectel Wireless Solutions Co., Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-C0-13-2B   (hex)		Sichuan Changhong Electric Ltd.
-C0132B     (base 16)		Sichuan Changhong Electric Ltd.
-				No.35,East MianXin Road,MianYang,Sichaun,China.
-				MianYang  SiChuan  PRC 621000
-				CN
-
-0C-B4-A4   (hex)		Xintai Automobile Intelligent Network Technology
-0CB4A4     (base 16)		Xintai Automobile Intelligent Network Technology
-				Room3703E Changfu Jinmao Building，Shihua Road
-				Futian Duty Free Zone，Fubao Street，Futian District  Shenzhen City  518000
-				CN
-
-90-63-3B   (hex)		Samsung Electronics Co.,Ltd
-90633B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-AA-B6   (hex)		Samsung Electronics Co.,Ltd
-FCAAB6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C8-2E-47   (hex)		Suzhou SmartChip Semiconductor Co., LTD
-C82E47     (base 16)		Suzhou SmartChip Semiconductor Co., LTD
-				9A,Science Plaza,1355 JinJiHu Avenue, Suzhou Industrial Park,
-				Suzhou   Jiangsu  215021
-				CN
-
-C0-22-50   (hex)		Koss Corporation
-C02250     (base 16)		Koss Corporation
-				4129 N. Port Washington Ave.
-				Milwaukee  WI  53212
-				US
-
-A0-B5-49   (hex)		Arcadyan Corporation
-A0B549     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-00-1F-5A   (hex)		Beckwith Electric Co.
-001F5A     (base 16)		Beckwith Electric Co.
-				6190 118th Ave No
-				Largo  Florida  33773
-				US
-
-98-5D-82   (hex)		Arista Networks
-985D82     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-24-53-BF   (hex)		Enernet
-2453BF     (base 16)		Enernet
-				1007 B-dong, Hyundai Knowledge Industry Center, 70 Dusan-ro, Geumcheon-gu, Seoul, KOREA
-				SEOUL    08584
-				KR
-
-04-33-85   (hex)		Nanchang BlackShark Co.,Ltd.
-043385     (base 16)		Nanchang BlackShark Co.,Ltd.
-				Room 319, Jiaoqiao Town Office Building, Economic and Technical development zone, Nanchang City, Jiangxi Province.
-				Nanchang    330013
-				CN
-
-84-E5-D8   (hex)		Guangdong UNIPOE IoT Technology Co.,Ltd.
-84E5D8     (base 16)		Guangdong UNIPOE IoT Technology Co.,Ltd.
-				11th Fl., BLDG. B1, Guangda WE Valley, Songshan Lake District
-				Dongguan  Guangdong  523808
-				CN
-
-A8-BC-9C   (hex)		Cloud Light Technology Limited
-A8BC9C     (base 16)		Cloud Light Technology Limited
-				3/F, 6 Science Park East Avenue Hong Kong Science Park Shatin, N.T., Hong Kong
-				Hong Kong    00000
-				HK
-
-A8-90-42   (hex)		Beijing Wanwei Intelligent Technology Co., Ltd.
-A89042     (base 16)		Beijing Wanwei Intelligent Technology Co., Ltd.
-				Room 616, Section 1, Cuicing, No. 1 Shanyuan Street, Haidian District
-				Beijing  Beijing  100000
-				CN
-
-18-BE-92   (hex)		Delta Networks, Inc.
-18BE92     (base 16)		Delta Networks, Inc.
-				256 Yang Guang Street, Neihu
-				Taipei  Taiwan  11491
-				TW
-
-90-C5-4A   (hex)		vivo Mobile Communication Co., Ltd.
-90C54A     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-BC-75-96   (hex)		Beijing Broadwit Technology Co., Ltd.
-BC7596     (base 16)		Beijing Broadwit Technology Co., Ltd.
-				Beijing Changping District Beijing International Information Industry Base Jizhida Building 3rd Floor Southeast
-				Beijing  Beijing  10000
-				CN
-
-1C-34-DA   (hex)		Mellanox Technologies, Inc.
-1C34DA     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-2C-A0-2F   (hex)		Veroguard Systems Pty Ltd
-2CA02F     (base 16)		Veroguard Systems Pty Ltd
-				PO Box 5003
-				Clayton  VIC  3168
-				AU
-
-6C-5C-3D   (hex)		IEEE Registration Authority
-6C5C3D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-78-23-27   (hex)		Samsung Electronics Co.,Ltd
-782327     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-F7-56   (hex)		Samsung Electronics Co.,Ltd
-DCF756     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-68-A4-7D   (hex)		Sun Cupid Technology (HK) LTD
-68A47D     (base 16)		Sun Cupid Technology (HK) LTD
-				16/F, CEO Tower, 77 Wing Hong Street, Kowloon
-				Hong Kong    00000
-				HK
-
-18-4B-0D   (hex)		Ruckus Wireless
-184B0D     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-D4-12-43   (hex)		AMPAK Technology, Inc.
-D41243     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-48-A6-B8   (hex)		Sonos, Inc.
-48A6B8     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-B8-78-26   (hex)		Nintendo Co.,Ltd
-B87826     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-DC-CB-A8   (hex)		Explora Technologies Inc
-DCCBA8     (base 16)		Explora Technologies Inc
-				360, Franquet Street
-				Quebec    G1P 4N3
-				CA
-
-C0-78-78   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-C07878     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
-				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
-				Zhuhai  Guangdong  519180
-				CN
-
-E4-B9-7A   (hex)		Dell Inc.
-E4B97A     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-34-DA-C1   (hex)		SAE Technologies Development(Dongguan) Co., Ltd.
-34DAC1     (base 16)		SAE Technologies Development(Dongguan) Co., Ltd.
-				Winnerway Industrial Area,Nancheng
-				Dongguan City  Guangdong Province  523087
-				CN
-
-70-5D-CC   (hex)		EFM Networks
-705DCC     (base 16)		EFM Networks
-				6F, Benposra II 1197-1 Bojeong Giheung Gu
-				Yong In  Kyunggi do  446913
-				KR
-
-D0-92-FA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D092FA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-E8-5A-D1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E85AD1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-A8-23-FE   (hex)		LG Electronics
-A823FE     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-E0-5D-5C   (hex)		Oy Everon Ab
-E05D5C     (base 16)		Oy Everon Ab
-				Teräskatu 8
-				Turku    20520
-				FI
-
-68-8F-2E   (hex)		Hitron Technologies. Inc
-688F2E     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-E0-46-E5   (hex)		Gosuncn Technology Group Co., Ltd.
-E046E5     (base 16)		Gosuncn Technology Group Co., Ltd.
-				6F, 2819 KaiChuang Blvd., Science Town, Huangpu District
-				Guangzhou City   Guangdong  510530
-				CN
-
-1C-59-9B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C599B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-BD-1E   (hex)		5VT Technologies,Taiwan LTd.
-D4BD1E     (base 16)		5VT Technologies,Taiwan LTd.
-				6F,No.19-9,SanChong Rd.,Nangang Dist,
-				Taipei    11501
-				TW
-
-BC-9B-68   (hex)		Technicolor CH USA Inc.
-BC9B68     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-CC-D4-A1   (hex)		MitraStar Technology Corp.
-CCD4A1     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-08-BA-5F   (hex)		Qingdao Hisense Electronics Co.,Ltd.
-08BA5F     (base 16)		Qingdao Hisense Electronics Co.,Ltd.
-				Qianwangang Roard 218
-				Qingdao  Shandong  266510
-				CN
-
-10-DF-FC   (hex)		Siemens AG
-10DFFC     (base 16)		Siemens AG
-				Siemensstrasse 10
-				Regensburg    93055
-				DE
-
-84-7F-3D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-847F3D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-C4-FD-E6   (hex)		DRTECH
-C4FDE6     (base 16)		DRTECH
-				29, Dunchon-daero 541beon-gil, Jungwon-gu
-				Seongnam  Gyeonggi-do  13216
-				KR
-
-CC-98-8B   (hex)		SONY Visual Products Inc.
-CC988B     (base 16)		SONY Visual Products Inc.
-				2-10-1 Osaki
-				Shinagawa-ku  Tokyo  141-8610
-				JP
-
-30-E3-D6   (hex)		Spotify USA Inc.
-30E3D6     (base 16)		Spotify USA Inc.
-				45 West 18th Street
-				New York  NY  10011
-				US
-
-9C-A5-25   (hex)		Shandong USR IOT Technology Limited
-9CA525     (base 16)		Shandong USR IOT Technology Limited
-				Floor 11,Building 1,No.1166 Xinluo  Street,Gaoxin District,Jinan,Shandong,250101,China
-				Jinan  Shandong  250101
-				CN
-
-E0-45-6D   (hex)		China Mobile Group Device Co.,Ltd.
-E0456D     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-28-39-26   (hex)		CyberTAN Technology Inc.
-283926     (base 16)		CyberTAN Technology Inc.
-				99 Park Ave III, Hsinchu Science Park
-				Hsinchu    308
-				TW
-
-8C-FC-A0   (hex)		Shenzhen Smart Device Technology Co., LTD.
-8CFCA0     (base 16)		Shenzhen Smart Device Technology Co., LTD.
-				SSMEC Building,Gao Xin Nan First Avenue Hi-Tech Park South,Nanshan
-				Shenzhen  GuangDong  518057
-				CN
-
-1C-42-7D   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-1C427D     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-80-69-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-806933     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-26-C7   (hex)		Cisco Systems, Inc
-BC26C7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-5E-A1   (hex)		PsiKick, Inc.
-BC5EA1     (base 16)		PsiKick, Inc.
-				2348 Walsh Ave
-				Santa Clara  CA  95051
-				US
-
-94-4F-4C   (hex)		Sound United LLC
-944F4C     (base 16)		Sound United LLC
-				One Viper Way
-				Vista  CA  92081
-				US
-
-18-81-0E   (hex)		Apple, Inc.
-18810E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-8C-4A   (hex)		Apple, Inc.
-608C4A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-B5-87   (hex)		Apple, Inc.
-74B587     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-B6-D8   (hex)		Apple, Inc.
-FCB6D8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-6A-2C   (hex)		IEEE Registration Authority
-3C6A2C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-24-1B-7A   (hex)		Apple, Inc.
-241B7A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-FE-57   (hex)		Apple, Inc.
-8CFE57     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-A6-00   (hex)		Apple, Inc.
-C0A600     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-E8-29   (hex)		Ubiquiti Networks Inc.
-18E829     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-E0-C2-86   (hex)		Aisai Communication Technology Co., Ltd.
-E0C286     (base 16)		Aisai Communication Technology Co., Ltd.
-				Room 2610 Asia Trade Centre,
-				Kwai Chung  N.T.  852
-				HK
-
-74-05-A5   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-7405A5     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-28-6D-CD   (hex)		Beijing Winner Microelectronics Co.,Ltd. 
-286DCD     (base 16)		Beijing Winner Microelectronics Co.,Ltd. 
-				Floor 18, YinDu Building, No.67 FuCheng Road, HaiDian District
-				Beijing    100142
-				CN
-
-54-10-31   (hex)		SMARTO
-541031     (base 16)		SMARTO
-				25 QUAI GALLIENI
-				SURESNES  HAUT DE SEINE  92150
-				FR
-
-44-A4-66   (hex)		GROUPE LDLC
-44A466     (base 16)		GROUPE LDLC
-				Groupe LDLC - 2 rue des Erables
-				LIMONEST  Rhone  69760
-				FR
-
-D8-0D-17   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D80D17     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-18-C2-BF   (hex)		BUFFALO.INC
-18C2BF     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-E8-1C-BA   (hex)		Fortinet, Inc.
-E81CBA     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale  null  94086
-				US
-
-F0-B0-14   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-F0B014     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-18-89-A0   (hex)		Wuhan Funshion Online Technologies Co.,Ltd
-1889A0     (base 16)		Wuhan Funshion Online Technologies Co.,Ltd
-				5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan
-				Wuhan  CN/Hubei  430000
-				CN
-
-0C-2A-86   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-0C2A86     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-FC-61-E9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-FC61E9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-40-56-62   (hex)		GuoTengShengHua Electronics LTD.
-405662     (base 16)		GuoTengShengHua Electronics LTD.
-				1st floor,No. 15 of Tech North 2nd Road,Nanshan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-E4-DB-6D   (hex)		Beijing Xiaomi Electronics Co., Ltd.
-E4DB6D     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
-				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
-				Beijing  Beijing  10085
-				CN
-
-00-A0-D1   (hex)		INVENTEC CORPORATION
-00A0D1     (base 16)		INVENTEC CORPORATION
-				INVENTEC BUILDING
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-18-CC   (hex)		AXIOHM SAS
-0018CC     (base 16)		AXIOHM SAS
-				1 RUE D'ARCUEIL
-				MONTROUGE    92120
-				FR
-
-00-18-27   (hex)		NEC UNIFIED SOLUTIONS NEDERLAND B.V.
-001827     (base 16)		NEC UNIFIED SOLUTIONS NEDERLAND B.V.
-				ANTON PHILIPSWEG 1
-				HILVERSUM  NH  1223KZ
-				NL
-
-00-90-04   (hex)		3COM EUROPE LTD
-009004     (base 16)		3COM EUROPE LTD
-				3COM CENTRE, BOUNDARY WAY
-				HERTS.  HP2 7YU    00000
-				GB
-
-00-06-8C   (hex)		3COM
-00068C     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-02-60-8C   (hex)		3COM
-02608C     (base 16)		3COM
-				5400 BAYFRONT PLAZA
-				SANTA CLARA  CA  95052
-				US
-
-00-D0-D8   (hex)		3COM
-00D0D8     (base 16)		3COM
-				2133 LEGHORN STREET
-				MOUNTAIN VIEW  CA  94043
-				US
-
-18-93-7F   (hex)		AMPAK Technology, Inc.
-18937F     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-A4-35-23   (hex)		Guangdong Donyan Network Technologies Co.,Ltd.
-A43523     (base 16)		Guangdong Donyan Network Technologies Co.,Ltd.
-				No.6,Kejizhong Road,Chuangye Building,Hi-tech Zone
-				Shantou  Guangdong  515000
-				CN
-
-B4-A9-4F   (hex)		MERCURY CORPORATION
-B4A94F     (base 16)		MERCURY CORPORATION
-				90, Gajaeul-ro, Seo-gu
-				INCHEON    22830
-				KR
-
-80-3A-F4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-803AF4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-48-A0-F8   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-48A0F8     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-F8-5E-3C   (hex)		SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
-F85E3C     (base 16)		SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
-				4F,Bldg A2,Hedian Industrial Park,NO.8 Shijing Rd,Guanlan,Longhua District,ShenZhen,China
-				shengzhen    518110
-				CN
-
-28-3E-76   (hex)		Common Networks
-283E76     (base 16)		Common Networks
-				1390 Market St. Suite 820
-				San Francisco  CA  94102
-				US
-
-DC-39-79   (hex)		Cisco Systems, Inc
-DC3979     (base 16)		Cisco Systems, Inc
-				280 Hope Street
-				Mountain View  CA  94041
-				US
-
-0C-53-31   (hex)		ETH Zurich
-0C5331     (base 16)		ETH Zurich
-				Dept. Computer Science, Universitätstr. 6
-				Zurich  ZH  8092
-				CH
-
-DC-90-88   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DC9088     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-81-2D   (hex)		PAX Computer Technology(Shenzhen) Ltd.
-54812D     (base 16)		PAX Computer Technology(Shenzhen) Ltd.
-				4/F, No.3 Building, Software Park, Second Central Science-Tech Road, High-Tech
-				Shenzhen  GuangDong  518057
-				CN
-
-0C-9A-42   (hex)		FN-LINK TECHNOLOGY LIMITED
-0C9A42     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-00-08-09   (hex)		Systemonic AG
-000809     (base 16)		Systemonic AG
-				Am Waldschloesschen 1
-				    
-				DE
-
-8C-41-F4   (hex)		IPmotion GmbH
-8C41F4     (base 16)		IPmotion GmbH
-				Ludwig-Rinn-Straße 8-16
-				Heuchelheim  Hessen  35452
-				DE
-
-70-4F-08   (hex)		Shenzhen Huisheng Information Technology Co., Ltd.
-704F08     (base 16)		Shenzhen Huisheng Information Technology Co., Ltd.
-				 Room 4A-205, Software Industry Base, Yuehai St
-				Nanshan District, Shenzhen  Guangdong  518000
-				CN
-
-88-35-C1   (hex)		OI ELECTRIC CO.,LTD
-8835C1     (base 16)		OI ELECTRIC CO.,LTD
-				7-3-16 KIKUNA
-				YOKOHAMA  KANAGAWA-KEN  222-0011
-				JP
-
-30-42-A1   (hex)		ilumisys Inc. DBA Toggled
-3042A1     (base 16)		ilumisys Inc. DBA Toggled
-				1820 E. Big Beaver Road
-				Troy  MI  48083
-				US
-
-00-26-B7   (hex)		Kingston Technology Company, Inc.
-0026B7     (base 16)		Kingston Technology Company, Inc.
-				17600 Newhope St.
-				Fountain Valley  CA  92708
-				US
-
-28-D0-CB   (hex)		Cambridge Communication Systems Ltd
-28D0CB     (base 16)		Cambridge Communication Systems Ltd
-				Victory House, Vision Park, Chivers Way, Histon
-				Cambridge    CB24 9ZR
-				GB
-
-40-62-EA   (hex)		China Mobile Group Device Co.,Ltd.
-4062EA     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-4C-0F-C7   (hex)		Earda Technologies co Ltd
-4C0FC7     (base 16)		Earda Technologies co Ltd
-				5/F,Block 2 East area,Haosheng Industrial Park,
-				Guangzhou  Guangdong  511400
-				CN
-
-80-A7-96   (hex)		Neurotek LLC
-80A796     (base 16)		Neurotek LLC
-				3180 18th St, Ste 200
-				San Francisco  CA  94110
-				US
-
-CC-21-19   (hex)		Samsung Electronics Co.,Ltd
-CC2119     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-23-03   (hex)		Belkin International Inc.
-302303     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista  null  90094
-				US
-
-9C-F6-DD   (hex)		IEEE Registration Authority
-9CF6DD     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-1E-80   (hex)		Icotera A/S
-001E80     (base 16)		Icotera A/S
-				Vibeholms Allé 16
-				Brøndby    2605
-				DK
-
-48-88-1E   (hex)		EthoSwitch LLC
-48881E     (base 16)		EthoSwitch LLC
-				1298 Evans Road
-				Wall Township   NJ  07719
-				US
-
-3C-71-BF   (hex)		Espressif Inc.
-3C71BF     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-00-03-93   (hex)		Apple, Inc.
-000393     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-00-C3   (hex)		Harris Corporation
-0000C3     (base 16)		Harris Corporation
-				1025 West NASA Blvd
-				Melbourne  FL  32919
-				US
-
-30-4B-07   (hex)		Motorola Mobility LLC, a Lenovo Company
-304B07     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-34-5A-BA   (hex)		tcloud intelligence
-345ABA     (base 16)		tcloud intelligence
-				Bao'an District, No. 400 Xiangshan Avenue
-				ShenZhen  GuangDong  518105
-				CN
-
-50-2F-A8   (hex)		Cisco Systems, Inc
-502FA8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-90-2B-D2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-902BD2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-D5-9D   (hex)		Sagemcom Broadband SAS
-08D59D     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-C0-83-59   (hex)		IEEE Registration Authority
-C08359     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-EC-83-D5   (hex)		GIRD Systems Inc
-EC83D5     (base 16)		GIRD Systems Inc
-				11260 Chester Road, Ste. 600
-				Cincinnati  OH  45246
-				US
-
-14-94-2F   (hex)		USYS CO.,LTD.
-14942F     (base 16)		USYS CO.,LTD.
-				#911, SeoulTechnoPark, 232, Gongneung-ro, Nowon-gu
-				Seoul    KS013
-				KR
-
-FC-B1-0D   (hex)		Shenzhen Tian Kun Technology Co.,LTD.
-FCB10D     (base 16)		Shenzhen Tian Kun Technology Co.,LTD.
-				Layer 8,Nanyuan Maple Building,No.1088 Nanshan Avenue,Nanshan Street,Nanshan District,Shenzhen
-				Shenzhen  Guangdong  518048
-				CN
-
-20-F7-7C   (hex)		vivo Mobile Communication Co., Ltd.
-20F77C     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-00-1E-EC   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-001EEC     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street
-				KUNSHAN CITY  SUZHOU PROVINCE  215300
-				CN
-
-F0-76-1C   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-F0761C     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
-				KUNSHAN  SUZHOU  215300
-				CN
-
-00-04-AE   (hex)		Sullair Corporation
-0004AE     (base 16)		Sullair Corporation
-				3700 East Michigan Blvd
-				Michigan City  IN  46360
-				US
-
-00-45-1D   (hex)		Cisco Systems, Inc
-00451D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-D6-35   (hex)		WBS Technology
-A0D635     (base 16)		WBS Technology
-				Unit32, 2 Slough Ave, Slough Business Park
-				Silverwater  New South Wales  2128
-				AU
-
-34-80-0D   (hex)		Cavium Inc
-34800D     (base 16)		Cavium Inc
-				15485 Sand Canyon Ave
-				Irvine  CA  92618
-				US
-
-B4-4B-D6   (hex)		IEEE Registration Authority
-B44BD6     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D8-91-2A   (hex)		Zyxel Communications Corporation
-D8912A     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-3C-42-7E   (hex)		IEEE Registration Authority
-3C427E     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-0B-A3   (hex)		Siemens AG
-000BA3     (base 16)		Siemens AG
-				Werner-von-Siemens-Straße 65
-				Erlangen  Bavaria  91052
-				DE
-
-00-0C-8A   (hex)		Bose Corporation
-000C8A     (base 16)		Bose Corporation
-				Automotive Systems Division (ASD)
-				Stow  MA  01775-9102
-				US
-
-24-3A-82   (hex)		IRTS
-243A82     (base 16)		IRTS
-				639 BD DES ARMARIS, IRTS
-				TOULON  Provence Alpes Cotes d'Azur  83100
-				FR
-
-88-09-07   (hex)		MKT Systemtechnik GmbH & Co. KG
-880907     (base 16)		MKT Systemtechnik GmbH & Co. KG
-				Hasskampstraße 75-77
-				Bünde  NRW  32257
-				DE
-
-58-A4-8E   (hex)		PixArt Imaging Inc.
-58A48E     (base 16)		PixArt Imaging Inc.
-				No.5, Innovation Road 1, HsinChu Science Park,
-				Hsin-Chu    300
-				TW
-
-30-D6-59   (hex)		Merging Technologies SA
-30D659     (base 16)		Merging Technologies SA
-				Le Verney 4
-				Puidoux  Outside the U.S or Canada  1070
-				CH
-
-70-2A-D5   (hex)		Samsung Electronics Co.,Ltd
-702AD5     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-88-97-65   (hex)		exands
-889765     (base 16)		exands
-				RM2202 , No. 666 Gubei road
-				shanghai    200336
-				CN
-
-38-6E-88   (hex)		zte corporation
-386E88     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B8-85-84   (hex)		Dell Inc.
-B88584     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-40-EE-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-40EEDD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-18-86   (hex)		SmarDTV
-B01886     (base 16)		SmarDTV
-				Route de Genève 22
-				Cheseaux    CH-1033 
-				CH
-
-AC-75-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC751D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-9E-97   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-289E97     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-15-25   (hex)		Chamberlain Access Solutions
-001525     (base 16)		Chamberlain Access Solutions
-				8271 E. Gelding Drive
-				Scottsdale  AZ  85260
-				US
-
-00-1E-B0   (hex)		ImesD Electronica S.L.
-001EB0     (base 16)		ImesD Electronica S.L.
-				d'Entença 81
-				Barcelona    08015
-				ES
-
-64-1C-67   (hex)		DIGIBRAS INDUSTRIA DO BRASILS/A
-641C67     (base 16)		DIGIBRAS INDUSTRIA DO BRASILS/A
-				Rua Tambaqui, 180-B - MANAUS - AM ¨C BRAZIL
-				manaus  MANAUS  69075-210 
-				BR
-
-60-05-8A   (hex)		Hitachi Metals, Ltd.
-60058A     (base 16)		Hitachi Metals, Ltd.
-				Shinagawa Season Terrace, 2-70, Konan 1-chome
-				Minato-ku  Tokyo  108-8224
-				JP
-
-BC-22-FB   (hex)		RF Industries
-BC22FB     (base 16)		RF Industries
-				PO Box 5
-				Welland  SA  5007
-				AU
-
-00-80-B6   (hex)		Mercury Systems – Trusted Mission Solutions, Inc. 
-0080B6     (base 16)		Mercury Systems – Trusted Mission Solutions, Inc. 
-				6681 OWENS DRIVE
-				PLEASONTON  CA  94588
-				US
-
-08-51-2E   (hex)		Orion Diagnostica Oy
-08512E     (base 16)		Orion Diagnostica Oy
-				Koivu-Mankkaan tie 6
-				Espoo    02100
-				FI
-
-98-A4-04   (hex)		Ericsson AB
-98A404     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-00-CC-3F   (hex)		Universal Electronics, Inc.
-00CC3F     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-74-B9-1E   (hex)		Nanjing Bestway Automation System Co., Ltd
-74B91E     (base 16)		Nanjing Bestway Automation System Co., Ltd
-				#50 Baoxiang Road, Jiangning Bin Jiang Economic Development Zone
-				nanjing  jiangsu  211161
-				CN
-
-A0-19-B2   (hex)		IEEE Registration Authority
-A019B2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-15-C7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8C15C7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-FA-9D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60FA9D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-DC-99-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-DC9914     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-3F-D3   (hex)		Texas Instruments
-4C3FD3     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B0-53-65   (hex)		China Mobile IOT Company Limited
-B05365     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-30-88-41   (hex)		Sichuan AI-Link Technology Co., Ltd.
-308841     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou,Industrial Park
-				Anzhou,Industrial Park  Sichuan  621000
-				CN
-
-44-EF-CF   (hex)		UGENE SOLUTION inc.
-44EFCF     (base 16)		UGENE SOLUTION inc.
-				A-1508, 1509, 583, Yangcheon-ro, Gangseo-gu
-				Seoul    KS013
-				KR
-
-30-45-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-304596     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-F4-E6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0F4E6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-EB-80   (hex)		Samsung Electronics Co.,Ltd
-74EB80     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-E0-DC   (hex)		Samsung Electronics Co.,Ltd
-0CE0DC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D8-68-C3   (hex)		Samsung Electronics Co.,Ltd
-D868C3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-93-D9   (hex)		Samsung Electronics Co.,Ltd
-C493D9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-2B-B9   (hex)		Samsung Electronics Co.,Ltd
-A82BB9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-AC-FD-93   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-ACFD93     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-00-B8-C2   (hex)		Heights Telecom T ltd
-00B8C2     (base 16)		Heights Telecom T ltd
-				Moshe Lerer 15
-				Nes Ziona     7404996
-				IL
-
-F4-BF-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4BF80     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-0E-8F   (hex)		Sercomm Corporation.
-000E8F     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-A0-E6-17   (hex)		MATIS
-A0E617     (base 16)		MATIS
-				2/F,Hatchobori MIYATA Bldg.,1-8-2,
-				Shintomi,Chuo-Ku,  Tokyo  104-0041
-				JP
-
-70-01-B5   (hex)		Cisco Systems, Inc
-7001B5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1F-49   (hex)		Manhattan TV Ltd
-001F49     (base 16)		Manhattan TV Ltd
-				3 Phoenix Park,
-				London    NW2 7LN
-				GB
-
-88-D6-52   (hex)		AMERGINT Technologies
-88D652     (base 16)		AMERGINT Technologies
-				2315 Briargate Pkwy, Suite 100
-				Colorado Springs  CO  80920
-				US
-
-FC-90-FA   (hex)		Independent Technologies
-FC90FA     (base 16)		Independent Technologies
-				1960 Ridgeview Rd
-				Blair  NE  68008
-				US
-
-D0-B2-14   (hex)		PoeWit Inc
-D0B214     (base 16)		PoeWit Inc
-				2307 Sea Island Dr
-				Fort Lauderdale  FL  33301
-				US
-
-C4-24-56   (hex)		Palo Alto Networks
-C42456     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-B4-B6-86   (hex)		Hewlett Packard
-B4B686     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-4C-ED-FB   (hex)		ASUSTek COMPUTER INC.
-4CEDFB     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-7C-2E-BD   (hex)		Google, Inc.
-7C2EBD     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-6C-AF-15   (hex)		Webasto SE
-6CAF15     (base 16)		Webasto SE
-				Kraillinger Straße 5
-				Stockdorf  Bayern  82131
-				DE
-
-E4-E1-30   (hex)		TCT mobile ltd
-E4E130     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-0C-21-38   (hex)		Hengstler GmbH
-0C2138     (base 16)		Hengstler GmbH
-				Uhlandstrasse49
-				Aldingen  BW  78554
-				DE
-
-E4-60-59   (hex)		Pingtek Co., Ltd.
-E46059     (base 16)		Pingtek Co., Ltd.
-				5F., No.786, Zhongzheng Rd., Zhonghe Dist.
-				New Taipei City    235
-				TW
-
-E0-19-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E0191D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-D1-BA   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-68D1BA     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-1C-1A-C0   (hex)		Apple, Inc.
-1C1AC0     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-78-C2   (hex)		Innowireless / QUCELL Networks
-3078C2     (base 16)		Innowireless / QUCELL Networks
-				Innowireless Bldg.  190 Seohyeon-ro
-				Bundang-gu, Seongnam-si  Gyeonggi-do  13590
-				KR
-
-40-50-B5   (hex)		Shenzhen New Species Technology Co., Ltd.
-4050B5     (base 16)		Shenzhen New Species Technology Co., Ltd.
-				Room 1827,Building R&D,EVOC intelligence valley,No 11,Gao xin west road,Guangming New District
-				Shenzhen    518107
-				CN
-
-3C-15-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3C15FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-93-4A   (hex)		Sierra Wireless
-CC934A     (base 16)		Sierra Wireless
-				1381 Wireless Way 
-				Richmond BC   CA   V6V 3A4 
-				GB
-
-00-CF-C0   (hex)		China Mobile Group Device Co.,Ltd.
-00CFC0     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-DC-33-0D   (hex)		QING DAO HAIER TELECOM CO.,LTD.
-DC330D     (base 16)		QING DAO HAIER TELECOM CO.,LTD.
-				No 1  Haier road,Hi-tech Zone，Qingdao，PR.China
-				Qingdao  Shandong  266101
-				CN
-
-68-89-75   (hex)		nuoxc
-688975     (base 16)		nuoxc
-				龙岗区横岗街道西坑社区西坑梧岗路9号2栋
-				深圳市  广东省  518173
-				CN
-
-40-F0-4E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-40F04E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-00-21-F2   (hex)		EASY3CALL Technology Limited
-0021F2     (base 16)		EASY3CALL Technology Limited
-				Room 1903-6, 19/F., HING YIP Commercial Centre
-				Hong Kong    999077
-				CN
-
-00-15-C4   (hex)		FLOVEL CO., LTD.
-0015C4     (base 16)		FLOVEL CO., LTD.
-				The Tachihi building No,3 hall, 6-1, Sakae-cho,
-				Tokyo    190-0003
-				US
-
-00-11-E6   (hex)		Scientific Atlanta
-0011E6     (base 16)		Scientific Atlanta
-				5030 Sugarloaf Parkway
-				Lawrenceville  Ga  30042
-				US
-
-24-F1-28   (hex)		Telstra
-24F128     (base 16)		Telstra
-				231 Elisabeth St
-				SYDNEY  NSW  2000
-				AU
-
-E0-38-3F   (hex)		zte corporation
-E0383F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D4-72-26   (hex)		zte corporation
-D47226     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-40-83-1D   (hex)		Apple, Inc.
-40831D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-D3-A2   (hex)		Apple, Inc.
-DCD3A2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-1D-D9   (hex)		Apple, Inc.
-5C1DD9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-05-88   (hex)		Ruijie Networks Co.,LTD
-800588     (base 16)		Ruijie Networks Co.,LTD
-				20# Building,Star-net Science Plaza,Juyuanzhou, 618 Jinshan Road
-				Fuzhou  Fujian  350002
-				CN
-
-F0-0E-1D   (hex)		Megafone Limited
-F00E1D     (base 16)		Megafone Limited
-				Unit 702,7/F,Bankok Bank Building,NO.18 Bonham Strand West
-				Hong Kong    999077
-				HK
-
-88-AE-07   (hex)		Apple, Inc.
-88AE07     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-68-FE-F7   (hex)		Apple, Inc.
-68FEF7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-35-EE   (hex)		FN-LINK TECHNOLOGY LIMITED
-AC35EE     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-88-11-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-881196     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-0E-EE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E40EEE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-D9-97   (hex)		Yuduan Mobile Co., Ltd.
-28D997     (base 16)		Yuduan Mobile Co., Ltd.
-				Room 401 No 84 Lane 887 Zuchongzhi Rd.
-				Shanghai    201203
-				CN
-
-30-1F-9A   (hex)		IEEE Registration Authority
-301F9A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-0C-2C-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C2C54     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D4-C1-9E   (hex)		Ruckus Wireless
-D4C19E     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-70-69-5A   (hex)		Cisco Systems, Inc
-70695A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-BF-77   (hex)		Cisco Systems, Inc
-00BF77     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D0-77-14   (hex)		Motorola Mobility LLC, a Lenovo Company
-D07714     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-30-B7-D4   (hex)		Hitron Technologies. Inc
-30B7D4     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-B4-81-BF   (hex)		Meta-Networks, LLC
-B481BF     (base 16)		Meta-Networks, LLC
-				Office 106C, 5/2, Varshavskaya street
-				Saint-Petersburg  Saint-Petersburg  196128
-				RU
-
-94-6A-B0   (hex)		Arcadyan Corporation
-946AB0     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-48-18-FA   (hex)		Nocsys
-4818FA     (base 16)		Nocsys
-				1F, No. 63 Building, No. 421 Hong Cao Road, Xuhui District
-				Shanghai  Shanghai  200233
-				CN
-
-58-7A-6A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-587A6A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-A0-38-F8   (hex)		OURA Health Oy
-A038F8     (base 16)		OURA Health Oy
-				Elektroniikkatie 3
-				Oulu    90590
-				FI
-
-68-79-24   (hex)		ELS-GmbH & Co. KG
-687924     (base 16)		ELS-GmbH & Co. KG
-				Dammstrasse 21
-				Werther  NRW  33824
-				DE
-
-28-FD-80   (hex)		IEEE Registration Authority
-28FD80     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-0C-AE-7D   (hex)		Texas Instruments
-0CAE7D     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-30-45-11   (hex)		Texas Instruments
-304511     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-E8-1A-AC   (hex)		ORFEO SOUNDWORKS Inc.
-E81AAC     (base 16)		ORFEO SOUNDWORKS Inc.
-				612, 11-41, Simin-daero 327beon-gil, Dongan-gu
-				Anyang    14055
-				KR
-
-00-07-58   (hex)		DragonWave Inc.
-000758     (base 16)		DragonWave Inc.
-				600-411 Leggett Drive,
-				Kanata,  Ontario  K2K 3C9
-				CA
-
-F0-FC-C8   (hex)		ARRIS Group, Inc.
-F0FCC8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-DF-15   (hex)		Sunitec Enterprise Co.,Ltd
-F8DF15     (base 16)		Sunitec Enterprise Co.,Ltd
-				3F.,No.98-1,Mincyuan Rd.Sindian City
-				Taipei County 231    231141
-				CN
-
-00-1D-B5   (hex)		Juniper Networks
-001DB5     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-B0-26-80   (hex)		Cisco Systems, Inc
-B02680     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-93-98   (hex)		Nokia Corporation
-D49398     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  N.A.  24101
-				FI
-
-00-19-37   (hex)		CommerceGuard AB
-001937     (base 16)		CommerceGuard AB
-				Gustavslundsv 151A
-				BROMMA    16714
-				SE
-
-FC-7C-02   (hex)		Phicomm (Shanghai) Co., Ltd.
-FC7C02     (base 16)		Phicomm (Shanghai) Co., Ltd.
-				3666 SiXian Rd.,Songjiang District
-				Shanghai  Shanghai  201616
-				CN
-
-A8-61-0A   (hex)		ARDUINO AG
-A8610A     (base 16)		ARDUINO AG
-				Corso San Gottardo 6A
-				Chiasso    6830
-				CH
-
-60-97-DD   (hex)		MicroSys Electronics GmbH
-6097DD     (base 16)		MicroSys Electronics GmbH
-				Muehlweg 1
-				Sauerlach    82054
-				DE
-
-04-79-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-047970     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-57-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A057E3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-B0-44   (hex)		ASKEY COMPUTER CORP
-1CB044     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-F4-84-4C   (hex)		Texas Instruments
-F4844C     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-B4-F2-E8   (hex)		ARRIS Group, Inc.
-B4F2E8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-3C-57-4F   (hex)		China Mobile Group Device Co.,Ltd.
-3C574F     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-D4-9C-F4   (hex)		Palo Alto Networks
-D49CF4     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-8C-16-45   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-8C1645     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-68-98-61   (hex)		Beacon Inc
-689861     (base 16)		Beacon Inc
-				82-1, Anyangcheondong-ro, Dongan-gu
-				anyang  Gyeonggi-do  14042
-				KR
-
-60-98-13   (hex)		Shanghai Visking Digital Technology Co. LTD
-609813     (base 16)		Shanghai Visking Digital Technology Co. LTD
-				Room 1301, Building A8, No.1688 Guoquan North Road, Yangpu District
-				Shanghai    200082
-				CN
-
-50-6B-4B   (hex)		Mellanox Technologies, Inc.
-506B4B     (base 16)		Mellanox Technologies, Inc.
-				350 Oakmead Parkway, Suite 100 
-				Sunnyvale  CA  94085
-				US
-
-B4-1C-30   (hex)		zte corporation
-B41C30     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-70-5A-AC   (hex)		Samsung Electronics Co.,Ltd
-705AAC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-2C-95-69   (hex)		ARRIS Group, Inc.
-2C9569     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A0-39-EE   (hex)		Sagemcom Broadband SAS
-A039EE     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-E4-CB-59   (hex)		Beijing Loveair Science and Technology Co. Ltd.
-E4CB59     (base 16)		Beijing Loveair Science and Technology Co. Ltd.
-				103,Block B, Kelin Building, No.107, Dongsi North Street, Dongcheng District,
-				 Beijing    100000
-				CN
-
-B4-E6-2D   (hex)		Espressif Inc.
-B4E62D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-84-74-60   (hex)		zte corporation
-847460     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-4C-82-CF   (hex)		Dish Technologies Corp
-4C82CF     (base 16)		Dish Technologies Corp
-				94 Inverness Terrace E
-				Englewood  CO  80112
-				US
-
-28-57-67   (hex)		Dish Technologies Corp
-285767     (base 16)		Dish Technologies Corp
-				94 Inverness Terrace E
-				Englewood  CO  80112
-				US
-
-70-16-9F   (hex)		EtherCAT Technology Group
-70169F     (base 16)		EtherCAT Technology Group
-				Ostendstr. 196
-				NUremberg    90482
-				DE
-
-68-EF-43   (hex)		Apple, Inc.
-68EF43     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-2B-20   (hex)		Apple, Inc.
-D02B20     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-61-F6   (hex)		Apple, Inc.
-2C61F6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-A3-3D   (hex)		Apple, Inc.
-D4A33D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-76-6F   (hex)		Apple, Inc.
-F0766F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-98-AD   (hex)		Apple, Inc.
-4098AD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-4D-73   (hex)		Apple, Inc.
-6C4D73     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-84-66   (hex)		Extreme Networks, Inc.
-D88466     (base 16)		Extreme Networks, Inc.
-				145 Rio Robles
-				San Jose  CA  95134
-				US
-
-00-04-96   (hex)		Extreme Networks, Inc.
-000496     (base 16)		Extreme Networks, Inc.
-				3585 Monroe Street
-				Santa Clara  CA  95051
-				US
-
-00-E0-2B   (hex)		Extreme Networks, Inc.
-00E02B     (base 16)		Extreme Networks, Inc.
-				10460 BANDLEY DRIVE
-				CUPERINT0  CA  95014
-				US
-
-5C-0E-8B   (hex)		Extreme Networks, Inc.
-5C0E8B     (base 16)		Extreme Networks, Inc.
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-74-67-F7   (hex)		Extreme Networks, Inc.
-7467F7     (base 16)		Extreme Networks, Inc.
-				1 Zebra Plaza
-				Holtsville  NY  11742
-				US
-
-E4-30-22   (hex)		Hanwha Techwin Security Vietnam
-E43022     (base 16)		Hanwha Techwin Security Vietnam
-				Plot O-2, Que Vo industrial park (Expanded area), 
-				Nam Son Commune, Bac Ninh City  Bac Ninh Province  000
-				VN
-
-04-4F-17   (hex)		HUMAX Co., Ltd.
-044F17     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-E4-8F-34   (hex)		Vodafone Italia S.p.A.
-E48F34     (base 16)		Vodafone Italia S.p.A.
-				Via Lorenteggio nr. 240
-				Milan  Italy  20147
-				IT
-
-68-5A-CF   (hex)		Samsung Electronics Co.,Ltd
-685ACF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-A8-A7   (hex)		Samsung Electronics Co.,Ltd
-0CA8A7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-67-2F   (hex)		Bowers & Wilkins
-B0672F     (base 16)		Bowers & Wilkins
-				900 Middlefield Rd Floor 4
-				Redwood City  CA  94063
-				US
-
-10-CD-6E   (hex)		FISYS
-10CD6E     (base 16)		FISYS
-				303 Expotel, 44, Dunsan-daero 117beon-gil, Seo-gu, Daejeon, Korea
-				Daejeon, Korea    KS015
-				KR
-
-D8-63-75   (hex)		Xiaomi Communications Co Ltd
-D86375     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-D8-9C-67   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-D89C67     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-64-20-9F   (hex)		Tilgin AB
-64209F     (base 16)		Tilgin AB
-				Finlandsgatan 40
-				Kista    16474
-				SE
-
-A4-3E-51   (hex)		ANOV FRANCE
-A43E51     (base 16)		ANOV FRANCE
-				100 CHEMIN DE BAILLOT
-				MONTAUBAN    82000
-				FR
-
-70-26-05   (hex)		SONY Visual Products Inc.
-702605     (base 16)		SONY Visual Products Inc.
-				2-10-1 Osaki
-				Shinagawa-ku  Tokyo  141-8610
-				JP
-
-00-90-F1   (hex)		Seagate Cloud Systems Inc
-0090F1     (base 16)		Seagate Cloud Systems Inc
-				6305 El Camino Real
-				Carlsbad  CA  92009
-				US
-
-84-5A-81   (hex)		ffly4u
-845A81     (base 16)		ffly4u
-				3, avenue Didier Daurat
-				Toulouse    31400
-				FR
-
-CC-81-DA   (hex)		Phicomm (Shanghai) Co., Ltd.
-CC81DA     (base 16)		Phicomm (Shanghai) Co., Ltd.
-				3666 SiXian Rd.,Songjiang District
-				Shanghai  Shanghai  201616
-				CN
-
-00-80-6C   (hex)		Secure Systems & Services
-00806C     (base 16)		Secure Systems & Services
-				24, Chemin de la Pouranque
-				F-13752  LES PENNES MIRABEAU  CS30084
-				FR
-
-00-72-63   (hex)		Netcore Technology Inc.
-007263     (base 16)		Netcore Technology Inc.
-				ORIENTAL CYBERPORT,HIGHTECH 6 ROAD
-				Shenzhen    518057
-				CN
-
-1C-27-DD   (hex)		Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.
-1C27DD     (base 16)		Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.
-				Beiwu Innovation park, #23 Beiwu Villiage Road
-				Beijing  Beijing  100000
-				CN
-
-B8-C8-EB   (hex)		ITEL MOBILE LIMITED
-B8C8EB     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-80-C5-F2   (hex)		AzureWave Technology Inc.
-80C5F2     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-64-F8-8A   (hex)		China Mobile IOT Company Limited
-64F88A     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-68-DB-54   (hex)		Phicomm (Shanghai) Co., Ltd.
-68DB54     (base 16)		Phicomm (Shanghai) Co., Ltd.
-				3666 SiXian Rd.,Songjiang District
-				Shanghai  Shanghai  201616
-				CN
-
-B4-52-53   (hex)		Seagate Technology
-B45253     (base 16)		Seagate Technology
-				1280 Disc Drive
-				Shakopee  MN  55379
-				US
-
-00-11-C6   (hex)		Seagate Technology
-0011C6     (base 16)		Seagate Technology
-				M/S NW1F01
-				Longmont  CO  80503
-				US
-
-00-1D-38   (hex)		Seagate Technology
-001D38     (base 16)		Seagate Technology
-				M/S NW1F01
-				Longmont  CO  80503
-				US
-
-00-50-13   (hex)		Seagate Cloud Systems Inc
-005013     (base 16)		Seagate Cloud Systems Inc
-				7420 E. Dry Creek Parkway
-				Longmont  CO  80503
-				US
-
-C8-DF-84   (hex)		Texas Instruments
-C8DF84     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-24-0D-6C   (hex)		SMND
-240D6C     (base 16)		SMND
-				16-39, LS-ro 91 beon-gil, Dongan-gu
-				Anyang-si  Gyeonggi-do  14119
-				KR
-
-48-55-5C   (hex)		Wu Qi Technologies,Inc.
-48555C     (base 16)		Wu Qi Technologies,Inc.
-				Xiantao street data on the 19th East Road
-				Chongqing City   Yubei District  401120
-				CN
-
-18-F0-E4   (hex)		Xiaomi Communications Co Ltd
-18F0E4     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources , No.68 Qinghe Middle Street , Haidian District
-				Beijing  Beijing  100089
-				CN
-
-58-8A-5A   (hex)		Dell Inc.
-588A5A     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-9C-8C-6E   (hex)		Samsung Electronics Co.,Ltd
-9C8C6E     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-DC-4F-22   (hex)		Espressif Inc.
-DC4F22     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-F8-6C-E1   (hex)		Taicang T&W Electronics
-F86CE1     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-1C-73-28   (hex)		Connected Home
-1C7328     (base 16)		Connected Home
-				19-22, Rathbone Place
-				London    W1T 1HY
-				GB
-
-D8-E0-04   (hex)		Vodia Networks Inc
-D8E004     (base 16)		Vodia Networks Inc
-				33 Broad St
-				Boston  MA  02109
-				US
-
-2C-FD-AB   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-2CFDAB     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-30-B4-B8   (hex)		LG Electronics
-30B4B8     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-38-0E-4D   (hex)		Cisco Systems, Inc
-380E4D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-38-73-EA   (hex)		IEEE Registration Authority
-3873EA     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-4C-52-62   (hex)		Fujitsu Technology Solutions GmbH
-4C5262     (base 16)		Fujitsu Technology Solutions GmbH
-				Buergermeister-Ulrich-Strasse 100
-				Augsburg  Bayern  86199
-				DE
-
-80-3B-F6   (hex)		LOOK EASY INTERNATIONAL LIMITED
-803BF6     (base 16)		LOOK EASY INTERNATIONAL LIMITED
-				4th Floor, No. 551, Guang-Fu South Road
-				Taipei  Xinyi District  11074
-				TW
-
-30-EB-1F   (hex)		Skylab M&C Technology Co.,Ltd
-30EB1F     (base 16)		Skylab M&C Technology Co.,Ltd
-				6 Floor,No.9 Building,Lijincheng Scientific&Technical park,Gongye East Road,Longhua District
-				Shenzhen  Guangdong  518109
-				CN
-
-54-9A-4C   (hex)		GUANGDONG HOMECARE TECHNOLOGY CO.,LTD. 
-549A4C     (base 16)		GUANGDONG HOMECARE TECHNOLOGY CO.,LTD. 
-				8F,12#, Taihua Industrial Park, Hangkong Rd., Gushu， Baoan District
-				Shenzhen  Guangdong  518128
-				CN
-
-EC-1D-8B   (hex)		Cisco Systems, Inc
-EC1D8B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-EC-70-97   (hex)		ARRIS Group, Inc.
-EC7097     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-58-19-F8   (hex)		ARRIS Group, Inc.
-5819F8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D0-7F-C4   (hex)		Ou Wei Technology Co.，Ltd. of Shenzhen City
-D07FC4     (base 16)		Ou Wei Technology Co.，Ltd. of Shenzhen City
-				Registered Address: Room 201, Block D, Huahan Innovation Park, Langshan Road, Xili Street, Nanshan District,
-				Shenzhen  Guangdong  518057
-				CN
-
-14-79-F3   (hex)		China Mobile Group Device Co.,Ltd.
-1479F3     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-0C-CE-F6   (hex)		Guizhou Fortuneship Technology Co., Ltd
-0CCEF6     (base 16)		Guizhou Fortuneship Technology Co., Ltd
-				2nd Floor, Factory Building 4, Hi-Tech Industrial Park, Xinpu Economic Development Zone, Xinpu New District
-				Zunyi City  Guizhou Province  56300
-				CN
-
-18-06-FF   (hex)		Acer Computer(Shanghai) Limited.
-1806FF     (base 16)		Acer Computer(Shanghai) Limited.
-				Room1806-20, No.769, Jiujiang Road, Huangpu District
-				Shanghai    200000
-				CN
-
-C4-CD-82   (hex)		Hangzhou Lowan Information Technology Co., Ltd.
-C4CD82     (base 16)		Hangzhou Lowan Information Technology Co., Ltd.
-				502 Building B, United Mansion, No.2 Zijinghua Road
-				Hangzhou  Zhejiang  310023
-				CN
-
-30-FB-94   (hex)		Shanghai Fangzhiwei Information Technology CO.,Ltd.
-30FB94     (base 16)		Shanghai Fangzhiwei Information Technology CO.,Ltd.
-				The 17th  Building A Unit,No. 1688 Lianhang Road,Minhang District,Shanghai City
-				Shanghai    201100
-				CN
-
-00-23-A0   (hex)		Hana CNS Co., LTD.
-0023A0     (base 16)		Hana CNS Co., LTD.
-				Taejang-dong 1720-52 Taejang-NongGong-Danji
-				Wonju  Gangwon-do  220-962
-				KR
-
-F4-06-A5   (hex)		Hangzhou Bianfeng Networking Technology Co., Ltd.
-F406A5     (base 16)		Hangzhou Bianfeng Networking Technology Co., Ltd.
-				BlockC，2F，Building B，Paradise Software Park
-				Hangzhou  Zhejiang  310012
-				CN
-
-A4-B5-2E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-A4B52E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-3C-A5-81   (hex)		vivo Mobile Communication Co., Ltd.
-3CA581     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-34-E9-11   (hex)		vivo Mobile Communication Co., Ltd.
-34E911     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-64-CB-A3   (hex)		Pointmobile
-64CBA3     (base 16)		Pointmobile
-				B-9F kabul Great Valley, 32, Digital-ro 9-gil, Geumcheon-gu
-				Seoul  Seoul  08512
-				KR
-
-EC-FA-BC   (hex)		Espressif Inc.
-ECFABC     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-08-BA-22   (hex)		Swaive Corporation
-08BA22     (base 16)		Swaive Corporation
-				3565 Kettmann Road
-				San Jose  CA  95121
-				US
-
-B0-EC-E1   (hex)		Private
-B0ECE1     (base 16)		Private
-
-60-E7-8A   (hex)		UNISEM
-60E78A     (base 16)		UNISEM
-				10-7,Jangjinam-gil,Dongtan-meyeon
-				Hwaseong-si  Gyeonggi-do  18510
-				KR
-
-28-29-86   (hex)		APC by Schneider Electric
-282986     (base 16)		APC by Schneider Electric
-				800 Federal St.
-				Andover  MA  01810
-				US
-
-70-7D-B9   (hex)		Cisco Systems, Inc
-707DB9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-BE-AC   (hex)		Edimax Technology Co. Ltd.
-08BEAC     (base 16)		Edimax Technology Co. Ltd.
-				No. 278, Xinhu 1st Road
-				Taipei City  Neihu Dist  248
-				TW
-
-00-24-24   (hex)		Ace Axis Limited
-002424     (base 16)		Ace Axis Limited
-				602 Delta Business Park, Welton Road
-				Swindon    SN5 7XP
-				GB
-
-50-C9-A0   (hex)		SKIPPER AS
-50C9A0     (base 16)		SKIPPER AS
-				Enebakkvn 150
-				Oslo    0612
-				NO
-
-74-83-EF   (hex)		Arista Networks
-7483EF     (base 16)		Arista Networks
-				5453 Great America Parkway
-				Santa Clara  CA  95054
-				US
-
-00-E0-F6   (hex)		DECISION EUROPE
-00E0F6     (base 16)		DECISION EUROPE
-				3, rue de Lattre de Tassigny
-				85170 SAINT DENIS LA CHEVASSE    
-				FR
-
-CC-2D-E0   (hex)		Routerboard.com
-CC2DE0     (base 16)		Routerboard.com
-				Mikrotikls SIA
-				Riga  Riga  LV1009
-				LV
-
-00-BF-61   (hex)		Samsung Electronics Co.,Ltd
-00BF61     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-78-67-D7   (hex)		Apple, Inc.
-7867D7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-C1-11   (hex)		Apple, Inc.
-B8C111     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-46-B4   (hex)		FormericaOE
-1046B4     (base 16)		FormericaOE
-				5F-11, No.38, Taiyuan Street
-				 Zhubei City   Hsinchu County  302
-				TW
-
-9C-E3-3F   (hex)		Apple, Inc.
-9CE33F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-6B-1C   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-386B1C     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-DC-55-83   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-DC5583     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-00-12-48   (hex)		Dell EMC
-001248     (base 16)		Dell EMC
-				176 South Street
-				Hopkinton  MA  01748
-				US
-
-00-60-48   (hex)		Dell EMC
-006048     (base 16)		Dell EMC
-				171 SOUTH ST.,
-				HOPKINTON  MA  01748
-				US
-
-7C-C9-5A   (hex)		Dell EMC
-7CC95A     (base 16)		Dell EMC
-				176 South Street
-				Hopkinton  MA  01748
-				US
-
-D0-04-01   (hex)		Motorola Mobility LLC, a Lenovo Company
-D00401     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-74-28-57   (hex)		Mayfield Robotics
-742857     (base 16)		Mayfield Robotics
-				400 Convention Way
-				Redwood City  CA  94063
-				US
-
-58-90-43   (hex)		Sagemcom Broadband SAS
-589043     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-B4-A3-82   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-B4A382     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-A4-07-B6   (hex)		Samsung Electronics Co.,Ltd
-A407B6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-40-49-8A   (hex)		Synapticon GmbH
-40498A     (base 16)		Synapticon GmbH
-				Daimlerstr. 26
-				Schönaich    71101
-				DE
-
-38-9D-92   (hex)		Seiko Epson Corporation
-389D92     (base 16)		Seiko Epson Corporation
-				2070 Kotobuki Koaka
-				Matsumoto-shi  Nagano-ken  399-8702
-				JP
-
-8C-0F-83   (hex)		Angie Hospitality LLC
-8C0F83     (base 16)		Angie Hospitality LLC
-				12465 S Fort St, Ste 300
-				Draper  UT  84020-9021
-				US
-
-DC-68-EB   (hex)		Nintendo Co.,Ltd
-DC68EB     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-E8-36-1D   (hex)		Sense Labs, Inc.
-E8361D     (base 16)		Sense Labs, Inc.
-				485 Massachusetts Ave
-				Cambridge  MA  02139
-				US
-
-08-78-08   (hex)		Samsung Electronics Co.,Ltd
-087808     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-75-98   (hex)		Samsung Electronics Co.,Ltd
-887598     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C0-17-4D   (hex)		Samsung Electronics Co.,Ltd
-C0174D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-20-F1-9E   (hex)		ARRIS Group, Inc.
-20F19E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-C8-9F-42   (hex)		VDII Innovation AB
-C89F42     (base 16)		VDII Innovation AB
-				Nedre Holländaregatan 5
-				Helsingborg    25225 
-				SE
-
-70-91-F3   (hex)		Universal Electronics, Inc.
-7091F3     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-08-00-69   (hex)		Silicon Graphics
-080069     (base 16)		Silicon Graphics
-				2011 N. SHORELINE BLVD.
-				MOUNTAIN VIEW  CA  94039-7311
-				US
-
-00-22-91   (hex)		Cisco Systems, Inc
-002291     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-10-FC-B6   (hex)		mirusystems CO.,LTD
-10FCB6     (base 16)		mirusystems CO.,LTD
-				#1001, 2-dong, Pangoyo seven venture valley, 228-gil, Pangyo-ro
-				Bundang-gu, Seongnam-si, Gyeonggi-do    13487
-				KR
-
-04-D6-AA   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-04D6AA     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-50-A8-3A   (hex)		S Mobile Devices Limited
-50A83A     (base 16)		S Mobile Devices Limited
-				Unit B-303, 3rd Floor, Tower-B, Plot No-7,Advant IT Park Ltd , Sector-142
-				NOIDA  Uttar Pradesh  201301
-				IN
-
-64-05-E9   (hex)		Shenzhen WayOS Technology Crop., Ltd.
-6405E9     (base 16)		Shenzhen WayOS Technology Crop., Ltd.
-				F18, Yousong Business Building, Longhua New District, Shenzhen, China
-				Shenzhen  Guangdong  518109
-				CN
-
-A0-70-99   (hex)		Beijing Huacan Electronics Co., Ltd
-A07099     (base 16)		Beijing Huacan Electronics Co., Ltd
-				NO.122, Room 2006, 20/F, Qingyun Contemporary Tower, Building 9, Manting Fangyuan Residential District, Qing Yun Li, Hai Dian District
-				Beijing    100036
-				CN
-
-48-D6-D5   (hex)		Google, Inc.
-48D6D5     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-0C-58-42   (hex)		DME Micro
-0C5842     (base 16)		DME Micro
-				unit 310 Lakeside 1, 8 Science Park West Ave, Shatin
-				Hong Kong    Hong Kong
-				HK
-
-B8-10-D4   (hex)		Masimo Corporation
-B810D4     (base 16)		Masimo Corporation
-				40 Parker
-				Irvine  CA  92618
-				US
-
-BC-82-5D   (hex)		MITSUMI ELECTRIC CO.,LTD.
-BC825D     (base 16)		MITSUMI ELECTRIC CO.,LTD.
-				2-11-2, Tsurumaki
-				Tama-shi  Tokyo  206-8567
-				JP
-
-D0-66-6D   (hex)		Shenzhen Bus-Lan Technology Co., Ltd.
-D0666D     (base 16)		Shenzhen Bus-Lan Technology Co., Ltd.
-				928-931 Chuangke Building, 72-1 South Huanguan Rd, Guan Lan Jie Dao, Longhua District
-				Shenzhen  Guangdong  518100 
-				CN
-
-08-15-2F   (hex)		Samsung Electronics Co., Ltd. ARTIK
-08152F     (base 16)		Samsung Electronics Co., Ltd. ARTIK
-				1-1, Samsungjeonja-ro
-				Hwaseong-si  Gyeonggi-do  18448
-				KR
-
-F4-F5-DB   (hex)		Xiaomi Communications Co Ltd
-F4F5DB     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-CC-22-37   (hex)		IEEE Registration Authority
-CC2237     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-38-D6-20   (hex)		Limidea Concept Pte. Ltd.
-38D620     (base 16)		Limidea Concept Pte. Ltd.
-				101 Cecil Street #09-07, Tong Eng Building
-				Singapore  Singapore  069533
-				SG
-
-74-F9-1A   (hex)		Onface
-74F91A     (base 16)		Onface
-				#1408, Mario Tower, 30Gil-28, Digital-ro, Guro-gu
-				Seoul    08389
-				KR
-
-A4-34-F1   (hex)		Texas Instruments
-A434F1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-18-60-24   (hex)		Hewlett Packard
-186024     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-BC-3D-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC3D85     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-54-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2054FA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-38-37-8B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-38378B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-5C-4B   (hex)		GN Audio A/S
-745C4B     (base 16)		GN Audio A/S
-				Lautrupbjerg 7
-				Ballerup    DK-2750
-				DK
-
-00-14-9D   (hex)		Sound ID Inc.
-00149D     (base 16)		Sound ID Inc.
-				3430 West Bayshore Road
-				Palo Alto  California  94303
-				US
-
-A8-E8-24   (hex)		INIM ELECTRONICS S.R.L.
-A8E824     (base 16)		INIM ELECTRONICS S.R.L.
-				VIA DEI LAVORATORI 10 - FRAZIONE CENTOBUCHI
-				MONTEPRANDONE  ASCOLI PICENO  63076
-				IT
-
-10-49-63   (hex)		HARTING K.K.
-104963     (base 16)		HARTING K.K.
-				1-7-9, Shin-Yokohama, Kohoku-ku
-				Yokohama-city  Kanagawa  222-0033
-				JP
-
-8C-D4-8E   (hex)		ITEL MOBILE LIMITED
-8CD48E     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-64-2B-8A   (hex)		ALL BEST Industrial Co., Ltd.
-642B8A     (base 16)		ALL BEST Industrial Co., Ltd.
-				6F., No.210-20, Sec. 3, Zhongyang Rd., Tucheng Dist.,
-				New Taipei City    23680
-				TW
-
-B8-EE-0E   (hex)		Sagemcom Broadband SAS
-B8EE0E     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-EC-D0-9F   (hex)		Xiaomi Communications Co Ltd
-ECD09F     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-78-E1-03   (hex)		Amazon Technologies Inc.
-78E103     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-00-06-59   (hex)		EAL (Apeldoorn) B.V.
-000659     (base 16)		EAL (Apeldoorn) B.V.
-				Molenmakershoek 14
-				Apeldoorn    7328JK
-				NL
-
-E4-EC-10   (hex)		Nokia Corporation
-E4EC10     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu  Ou  90590
-				FI
-
-00-26-92   (hex)		Mitsubishi Electric Corporation
-002692     (base 16)		Mitsubishi Electric Corporation
-				2-7-3 Marunouchi
-				Chiyoda-ku  Tokyo  100-8310
-				JP
-
-8C-C1-21   (hex)		Panasonic Corporation AVC Networks Company
-8CC121     (base 16)		Panasonic Corporation AVC Networks Company
-				1-15 Matsuo-cho
-				Kadoma  Osaka  571-8504
-				JP
-
-EC-04-41   (hex)		ShenZhen TIGO Semiconductor Co., Ltd.
-EC0441     (base 16)		ShenZhen TIGO Semiconductor Co., Ltd.
-				Room B6-709, Funian Plaza, No.3 Shihua Road, Futian Bonded Area
-				shenzhen  China / Guangdong  518048
-				CN
-
-AC-BE-75   (hex)		Ufine Technologies Co.,Ltd.
-ACBE75     (base 16)		Ufine Technologies Co.,Ltd.
-				46, Geumgok-dong, Bundang-gu
-				Seong-nam-si  Gyeonggi-do  463-804
-				KR
-
-00-C0-8F   (hex)		Panasonic Electric Works Co., Ltd.
-00C08F     (base 16)		Panasonic Electric Works Co., Ltd.
-				Tsu-Factory
-				Mie-ken  514-8555  0000
-				JP
-
-B0-35-0B   (hex)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
-B0350B     (base 16)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
-				No.999,Dacheng East Road,
-				Fenghua  Zhejiang  315500
-				CN
-
-28-A6-AC   (hex)		seca gmbh & co. kg
-28A6AC     (base 16)		seca gmbh & co. kg
-				Hammer Steindamm 3-25
-				Hamburg  Germany  22089
-				DE
-
-A8-BE-27   (hex)		Apple, Inc.
-A8BE27     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-A5-3E   (hex)		Apple, Inc.
-C0A53E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-44-4E-6D   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-444E6D     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-90-B1-E0   (hex)		Beijing Nebula Link Technology Co., Ltd
-90B1E0     (base 16)		Beijing Nebula Link Technology Co., Ltd
-				Room 1201, Building C, Caizhi International Plaza, Haidian District
-				Beijing    100083
-				CN
-
-6C-09-0A   (hex)		GEMATICA SRL
-6C090A     (base 16)		GEMATICA SRL
-				Via Diocleziano, 107
-				NAPOLI    80125
-				IT
-
-70-E1-FD   (hex)		FLEXTRONICS
-70E1FD     (base 16)		FLEXTRONICS
-				Carretera Base Aerea 5850 int 4
-				Zapopan  Jalisco  45136
-				MX
-
-74-E6-0F   (hex)		TECNO MOBILE LIMITED
-74E60F     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-00-1A-A7   (hex)		Torian Wireless
-001AA7     (base 16)		Torian Wireless
-				204 Johnston Street
-				Collingwood  Victoria  3066
-				AU
-
-0C-B4-59   (hex)		Marketech International Corp.
-0CB459     (base 16)		Marketech International Corp.
-				10F.,NO.3-2,Yuancyu St.,Nangang Dist.
-				Taipei    11503
-				TW
-
-80-14-A8   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
-8014A8     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
-				Room 406,Originality Building B3, NO.162 Science Avenue,Science Town
-				Guangzhou  Guangdong  510663
-				CN
-
-40-9B-CD   (hex)		D-Link International
-409BCD     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-00-2E-C7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-002EC7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-8E-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-488EEF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-75-95   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-547595     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-C4-71-54   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-C47154     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-58-61-63   (hex)		Quantum Networks (SG) Pte. Ltd.
-586163     (base 16)		Quantum Networks (SG) Pte. Ltd.
-				8, UBI ROAD, 2 ZERVEX #08-10,
-				Singapore    408538
-				SG
-
-EC-3D-FD   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-EC3DFD     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-94-D0-29   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-94D029     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-30-84-54   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-308454     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-5C-03-39   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5C0339     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-28-19   (hex)		Liteon Technology Corporation
-F82819     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-00-15-E5   (hex)		Cheertek Inc.
-0015E5     (base 16)		Cheertek Inc.
-				No.2, Du-Sing First Road, Science-Based Industrial Park,
-				Hsinchu    300
-				TW
-
-50-E9-71   (hex)		Jibo, Inc.
-50E971     (base 16)		Jibo, Inc.
-				230 Congress Street
-				Boston  MA  02110
-				US
-
-30-F7-7F   (hex)		S Mobile Devices Limited
-30F77F     (base 16)		S Mobile Devices Limited
-				Unit B-303, 3rd Floor, Tower-B, Plot No-7,Advant IT Park Ltd , Sector-142
-				NOIDA  Uttar Pradesh  201301
-				IN
-
-D8-6C-63   (hex)		Google, Inc.
-D86C63     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-08-40-F3   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-0840F3     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-94-FB-B2   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-94FBB2     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
-				No.1, Songgang Avenue, Songgang Street, Bao’an District
-				Shenzhen  Guangdong  518105
-				CN
-
-00-1E-99   (hex)		Vantanol Industrial Corporation
-001E99     (base 16)		Vantanol Industrial Corporation
-				9F, NO 31 . Shin-Tai Road
-				Jubei City  Shinchu  302
-				TW
-
-58-B6-33   (hex)		Ruckus Wireless
-58B633     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-5C-51-81   (hex)		Samsung Electronics Co.,Ltd
-5C5181     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-60-8E-08   (hex)		Samsung Electronics Co.,Ltd
-608E08     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-3D-37   (hex)		Ruckus Wireless
-543D37     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-2C-E6-CC   (hex)		Ruckus Wireless
-2CE6CC     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-00-22-7F   (hex)		Ruckus Wireless
-00227F     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-74-91-1A   (hex)		Ruckus Wireless
-74911A     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-00-C0-5D   (hex)		L&N TECHNOLOGIES
-00C05D     (base 16)		L&N TECHNOLOGIES
-				2899 AGOURA ROAD #196
-				WESTLAKE VILLAGE  CA  91361-3200
-				US
-
-58-C5-83   (hex)		ITEL MOBILE LIMITED
-58C583     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-18-20-4C   (hex)		Kummler+Matter AG
-18204C     (base 16)		Kummler+Matter AG
-				Hohlstrasse 176
-				Zürich    8004
-				CH
-
-18-D2-25   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-18D225     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-18-B4-30   (hex)		Nest Labs Inc.
-18B430     (base 16)		Nest Labs Inc.
-				3400 Hillview Ave.
-				Palo Alto  CA  94304
-				US
-
-30-B1-64   (hex)		Power Electronics International Inc.
-30B164     (base 16)		Power Electronics International Inc.
-				561-8 Plate Drive
-				East Dundee    60118
-				US
-
-F8-8A-3C   (hex)		IEEE Registration Authority
-F88A3C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A4-04-50   (hex)		nFore Technology Inc.
-A40450     (base 16)		nFore Technology Inc.
-				5F, NO 31, Ln 258, Rulguang Rd
-				Taipei  Neihu District  11491
-				TW
-
-FC-5A-1D   (hex)		Hitron Technologies. Inc
-FC5A1D     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-94-14-7A   (hex)		vivo Mobile Communication Co., Ltd.
-94147A     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-38-17-E1   (hex)		Technicolor CH USA Inc.
-3817E1     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-98-28-A6   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-9828A6     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
-				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
-				KUNSHAN  SUZHOU  215300
-				CN
-
-94-3F-C2   (hex)		Hewlett Packard Enterprise
-943FC2     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-68-1D-EF   (hex)		Shenzhen CYX Technology Co., Ltd.
-681DEF     (base 16)		Shenzhen CYX Technology Co., Ltd.
-				2/F, Bldg. 6, Guangxi Industrial Park, Jianshe Rd.,  Longhua New Dist., Shenzhen
-				Shenzhen    518109
-				CN
-
-B4-00-16   (hex)		 INGENICO TERMINALS SAS
-B40016     (base 16)		 INGENICO TERMINALS SAS
-				28-32 BOULEVARD DE GRENELLE
-				PARIS    75015
-				FR
-
-AC-20-3E   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
-AC203E     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
-				HUST Industry Park, East-Lake Development Zone
-				Wuhan  Hubei  430223
-				CN
-
-B0-1F-29   (hex)		Helvetia INC.
-B01F29     (base 16)		Helvetia INC.
-				8-11 tokaichi-nishimachi, kitaku
-				Okayama  okayama  7000856
-				JP
-
-88-0F-10   (hex)		Huami Information Technology Co.,Ltd.
-880F10     (base 16)		Huami Information Technology Co.,Ltd.
-				Room 1201 Building A4, National Animation Industry Base
-				Hefei  Anhui  230088
-				CN
-
-14-61-2F   (hex)		Avaya Inc
-14612F     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-00-30-9D   (hex)		Nimble Microsystems, Inc.
-00309D     (base 16)		Nimble Microsystems, Inc.
-				50 Church Street - 5th Floor
-				Cambridge  MA  02138
-				US
-
-8C-21-0A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-8C210A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan
-				shenzhen  guangdong Province  518057
-				CN
-
-4C-18-9A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4C189A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-CC-4B-73   (hex)		AMPAK Technology, Inc.
-CC4B73     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-00-15-DC   (hex)		KT&C Co., Ltd.
-0015DC     (base 16)		KT&C Co., Ltd.
-				487-4, KT&C Bldg.
-				GangSeo-Ku  Seoul  157-849
-				KR
-
-00-18-7D   (hex)		Armorlink Co .Ltd
-00187D     (base 16)		Armorlink Co .Ltd
-				No. 515 of Xinzhuang Industry Park Shenfu Road
-				Shanghai Province  Shanghai  201108
-				CN
-
-F4-30-B9   (hex)		Hewlett Packard
-F430B9     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-00-19-F0   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-0019F0     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				18F, HUAYANG TOWER,YANDAYI ROAD
-				HUIZHOU  GUANGDONG  516007
-				CN
-
-C8-DB-26   (hex)		Logitech
-C8DB26     (base 16)		Logitech
-				7700 Gateway Blvd
-				Newark  CA  94560
-				US
-
-A4-0E-2B   (hex)		Facebook Inc
-A40E2B     (base 16)		Facebook Inc
-				1 Hacker Way
-				Menlo Park  CA  94025
-				US
-
-AC-4E-2E   (hex)		Shenzhen JingHanDa Electronics Co.Ltd
-AC4E2E     (base 16)		Shenzhen JingHanDa Electronics Co.Ltd
-				5th Floor,No 4 ,Road 1,ShangXue Technology industrial Park,LongGang district,ShenZhen,GuangDong,China
-				ShenZhen  GuangDong  518129
-				CN
-
-4C-91-0C   (hex)		 Lanix Internacional, S.A. de C.V.
-4C910C     (base 16)		 Lanix Internacional, S.A. de C.V.
-				Carretera Nogales Km8.5
-				Hermosillo  Sonora  83160
-				MX
-
-A4-78-86   (hex)		Avaya Inc
-A47886     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-04-03-D6   (hex)		Nintendo Co.,Ltd
-0403D6     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-5C-1A-6F   (hex)		Cambridge Industries(Group) Co.,Ltd.
-5C1A6F     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				5/F,Building 8, 2388 ChenHang Road, MinHang District
-				shanghai    201114
-				CN
-
-3C-4C-D0   (hex)		CERAGON NETWORKS
-3C4CD0     (base 16)		CERAGON NETWORKS
-				24 RAUEL WALLENBERG STREET
-				TEL-AVIV    96719
-				IL
-
-F4-0E-83   (hex)		ARRIS Group, Inc.
-F40E83     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-98-F7-D7   (hex)		ARRIS Group, Inc.
-98F7D7     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-B4-BF-F6   (hex)		Samsung Electronics Co.,Ltd
-B4BFF6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-2C-3A-E8   (hex)		Espressif Inc.
-2C3AE8     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-88-BD-78   (hex)		Flaircomm Microelectronics,Inc.
-88BD78     (base 16)		Flaircomm Microelectronics,Inc.
-				7F, Guomai Building, Guomai Science and Technology Park,  116 East JiangBin Road,
-				Fuzhou  Fujian  350015
-				CN
-
-58-C5-CB   (hex)		Samsung Electronics Co.,Ltd
-58C5CB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-20-6B-E7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-206BE7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-18-2C-B4   (hex)		Nectarsoft Co., Ltd.
-182CB4     (base 16)		Nectarsoft Co., Ltd.
-				330, Seongam-ro, Mapo-gu
-				Seoul  Seoul  03920
-				KR
-
-54-C9-DF   (hex)		FN-LINK TECHNOLOGY LIMITED
-54C9DF     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-74-F6-1C   (hex)		HTC Corporation
-74F61C     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-B8-FF-B3   (hex)		MitraStar Technology Corp.
-B8FFB3     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-EC-23-7B   (hex)		zte corporation
-EC237B     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A0-C9-A0   (hex)		Murata Manufacturing Co., Ltd.
-A0C9A0     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-98-2D-BA   (hex)		Fibergate Inc.
-982DBA     (base 16)		Fibergate Inc.
-				KDX Shibadaimon.Bld 2F 2-10-12 Shibadaimon
-				Tokyo  Minato-ku  1050012
-				JP
-
-84-C0-EF   (hex)		Samsung Electronics Co.,Ltd
-84C0EF     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-00-A3-8E   (hex)		Cisco Systems, Inc
-00A38E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-D5-5E   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-E0D55E     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-A0-40-A0   (hex)		NETGEAR
-A040A0     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-0D-2B   (hex)		Racal Instruments
-000D2B     (base 16)		Racal Instruments
-				4 Goodyear Street
-				Irvine  CA  92618
-				US
-
-48-A7-4E   (hex)		zte corporation
-48A74E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-BC-8A-E8   (hex)		QING DAO HAIER TELECOM CO.,LTD.
-BC8AE8     (base 16)		QING DAO HAIER TELECOM CO.,LTD.
-				No 1 Haier Road Hi-tech Zone
-				Qingdao    266000
-				CN
-
-F4-DE-0C   (hex)		ESPOD Ltd.
-F4DE0C     (base 16)		ESPOD Ltd.
-				6 Marjanishvili St. (Green Building) | 0102 Tbilisi | Georgia
-				Tbilisi  Tbilisi  0102
-				GE
-
-3C-52-82   (hex)		Hewlett Packard
-3C5282     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-08-ED-02   (hex)		IEEE Registration Authority
-08ED02     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E8-FD-E8   (hex)		CeLa Link Corporation
-E8FDE8     (base 16)		CeLa Link Corporation
-				401-1, Partners Tower1, Gasan digital 1-ro 83, Geumcheon-gu
-				Seoul    08589
-				KR
-
-28-C6-3F   (hex)		Intel Corporate
-28C63F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-88-CC-45   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-88CC45     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-60-08-37   (hex)		ivvi Scientific(Nanchang)Co.Ltd
-600837     (base 16)		ivvi Scientific(Nanchang)Co.Ltd
-				Coolpad Cyber Harbor,2nd Mengxi Road,Hi-TechIndustrial Park(North),NanShan District,ShenZhen,P.R.C.
-				shenzhen  Guangdong  518057
-				CN
-
-EC-36-3F   (hex)		Markov Corporation
-EC363F     (base 16)		Markov Corporation
-				650 Vaqueros Avenue, Suite A
-				Sunnyvale  CA  94085
-				US
-
-58-04-CB   (hex)		Tianjin Huisun Technology Co.,Ltd.
-5804CB     (base 16)		Tianjin Huisun Technology Co.,Ltd.
-				4/f, Building 3, No 1 Haitai Huake Street (outside Ring Road)
-				  Tianjin  300384
-				CN
-
-60-D7-E3   (hex)		IEEE Registration Authority
-60D7E3     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-18-93-D7   (hex)		Texas Instruments
-1893D7     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A8-B8-6E   (hex)		LG Electronics (Mobile Communications)
-A8B86E     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-CC-90-E8   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-CC90E8     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-7C-4F-7D   (hex)		Sawwave
-7C4F7D     (base 16)		Sawwave
-				SKn TechnoPark 1207
-				SeongNam-Si  Gyenggi-do  13207
-				KR
-
-9C-AC-6D   (hex)		Universal Electronics, Inc.
-9CAC6D     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-08-EA-40   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-08EA40     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-00-D0-95   (hex)		Alcatel-Lucent Enterprise
-00D095     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Road
-				Calabasas  CA  91301
-				US
-
-00-20-DA   (hex)		Alcatel-Lucent Enterprise
-0020DA     (base 16)		Alcatel-Lucent Enterprise
-				26801 West Agoura Road
-				CALABASAS  CA  91301
-				US
-
-6C-59-76   (hex)		Shanghai Tricheer Technology Co.,Ltd.
-6C5976     (base 16)		Shanghai Tricheer Technology Co.,Ltd.
-				Rm 907, Building 1, Lane 399, Shengxia Road,Zhangjiang Hi-Tech Park,Pudong District,Shanghai
-				Shanghai  Shanghai  201203
-				CN
-
-7C-7B-8B   (hex)		Control Concepts, Inc.
-7C7B8B     (base 16)		Control Concepts, Inc.
-				18760 Lake Dr. East
-				Chanhassen  MN  55317
-				US
-
-84-A9-C4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-84A9C4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-08-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A0086F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-34-CE-00   (hex)		XIAOMI Electronics,CO.,LTD
-34CE00     (base 16)		XIAOMI Electronics,CO.,LTD
-				Xiaomi Building, No.68 Qinghe Middle Street
-				Haidian District  Beijing  100085
-				CN
-
-D0-6F-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D06F82     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-F4-79   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A0F479     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-47-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-844765     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-FF-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4FF1F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-37-65   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B83765     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-34-5B-BB   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-345BBB     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-C4-0B-CB   (hex)		Xiaomi Communications Co Ltd
-C40BCB     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-84-AF-EC   (hex)		BUFFALO.INC
-84AFEC     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-5C-C6-E9   (hex)		Edifier International
-5CC6E9     (base 16)		Edifier International
-				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
-				Hong Kong    070
-				CN
-
-98-DD-EA   (hex)		Infinix mobility limited
-98DDEA     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-00-1D-44   (hex)		Krohne
-001D44     (base 16)		Krohne
-				Ludwig-Krohne-Str. 5
-				Duisburg    47058
-				DE
-
-A8-A1-98   (hex)		TCT mobile ltd
-A8A198     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-E0-C0-D1   (hex)		CK Telecom (Shenzhen) Limited
-E0C0D1     (base 16)		CK Telecom (Shenzhen) Limited
-				Floor 9th, Building 4C,Software Industry Base, Xuefu Road, Hi-Tech Park, Nanshan Dist.
-				Shenzhen  Guangdong  518057
-				CN
-
-AC-B5-7D   (hex)		Liteon Technology Corporation
-ACB57D     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-D4-61-9D   (hex)		Apple, Inc.
-D4619D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-49-8B   (hex)		ZOOM SERVER
-D0498B     (base 16)		ZOOM SERVER
-				North keyuan Road
-				Shenzhen    518057
-				CN
-
-08-27-CE   (hex)		NAGANO KEIKI CO., LTD.
-0827CE     (base 16)		NAGANO KEIKI CO., LTD.
-				2150 IKUTA
-				UEDA  NAGANO  386-0411
-				JP
-
-C0-D3-C0   (hex)		Samsung Electronics Co.,Ltd
-C0D3C0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-8B-C1   (hex)		Samsung Electronics Co.,Ltd
-948BC1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-56-8E   (hex)		Samsung Electronics Co.,Ltd
-14568E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-BD-61   (hex)		Apple, Inc.
-14BD61     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-50-3A-7D   (hex)		AlphaTech PLC Int’l Co., Ltd.
-503A7D     (base 16)		AlphaTech PLC Int’l Co., Ltd.
-				13F., No.618, Sec. 7, New Taipei Blvd., Xinzhuang Dist., 
-				New Taipei City    24260
-				TW
-
-F4-C4-D6   (hex)		Shenzhen Xinfa Electronic Co.,ltd
-F4C4D6     (base 16)		Shenzhen Xinfa Electronic Co.,ltd
-				No 57, Baoli Road, Buji Town
-				Longgang District  Shenzhen, Guangdong   518112
-				CN
-
-68-37-E9   (hex)		Amazon Technologies Inc.
-6837E9     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-2C-A1-7D   (hex)		ARRIS Group, Inc.
-2CA17D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-D8-32-14   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-D83214     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-10-95-4B   (hex)		Megabyte Ltd.
-10954B     (base 16)		Megabyte Ltd.
-				Unit 507, 5/F, Building 12W, NO.12 Science Park Avenue, Hong Kong Science Park, Shatin, New Territories
-				Hong Kong    NA
-				HK
-
-D8-32-5A   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-D8325A     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-9C-DA-3E   (hex)		Intel Corporate
-9CDA3E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-2C-C8   (hex)		Cisco Systems, Inc
-002CC8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C0-02-8D   (hex)		WINSTAR Display CO.,Ltd
-C0028D     (base 16)		WINSTAR Display CO.,Ltd
-				1F., No.77, Ln. 188, Pinghe S. Rd., Daya Dist., Taichung City 428, Taiwan (R.O.C.)
-				Taichung City    428
-				TW
-
-E8-9F-EC   (hex)		CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
-E89FEC     (base 16)		CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
-				No.9, 3rd Wuke Road, Wuhou District
-				Chengdu  Sichuan Province  610045
-				CN
-
-80-26-89   (hex)		D-Link International
-802689     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-F8-AB-05   (hex)		Sagemcom Broadband SAS
-F8AB05     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-7C-50-49   (hex)		Apple, Inc.
-7C5049     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-7D-EB   (hex)		Shanghai Notion Information Technology CO.,LTD.
-E47DEB     (base 16)		Shanghai Notion Information Technology CO.,LTD.
-				Room 201,Building 3,NO 289,Bisheng Rd,Pudong district,Shanghai,China
-				Shanghai  Shanghai  201203
-				CN
-
-C4-B9-CD   (hex)		Cisco Systems, Inc
-C4B9CD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-61-FE   (hex)		Hangzhou H3C Technologies Co., Limited
-D461FE     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-2C-4D-54   (hex)		ASUSTek COMPUTER INC.
-2C4D54     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-34-96-72   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-349672     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-64-B4-73   (hex)		Xiaomi Communications Co Ltd
-64B473     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-74-51-BA   (hex)		Xiaomi Communications Co Ltd
-7451BA     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-6C-B4-A7   (hex)		Landauer, Inc.
-6CB4A7     (base 16)		Landauer, Inc.
-				2 Science Road
-				Glenwood  IL  60425
-				US
-
-78-02-F8   (hex)		Xiaomi Communications Co Ltd
-7802F8     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-00-23-8A   (hex)		Ciena Corporation
-00238A     (base 16)		Ciena Corporation
-				920 Elkridge Landing
-				Linthicum  MD  21090
-				US
-
-00-10-81   (hex)		DPS, INC.
-001081     (base 16)		DPS, INC.
-				4922 EAST YALE AVENUE
-				FRESNO  CA  93727
-				US
-
-40-F3-85   (hex)		IEEE Registration Authority
-40F385     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-88-78-73   (hex)		Intel Corporate
-887873     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-F8-75-88   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F87588     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-4C-7F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F44C7F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-A2-4B   (hex)		Juniper Networks
-28A24B     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-08-00-27   (hex)		PCS Systemtechnik GmbH
-080027     (base 16)		PCS Systemtechnik GmbH
-				600 Suffold St
-				Lowell  MA  01854
-				US
-
-F8-A5-C5   (hex)		Cisco Systems, Inc
-F8A5C5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-7C-5A-1C   (hex)		Sophos Ltd
-7C5A1C     (base 16)		Sophos Ltd
-				The Pentagon
-				Abingdon  Oxfordshire  OX14 3YP
-				GB
-
-B0-F1-EC   (hex)		AMPAK Technology, Inc.
-B0F1EC     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
-				Hsinchu  Taiwan ROC.  30352 
-				TW
-
-54-2B-57   (hex)		Night Owl SP
-542B57     (base 16)		Night Owl SP
-				4720 Radio Rd
-				Naples  FL  34104
-				US
-
-50-1E-2D   (hex)		StreamUnlimited Engineering GmbH
-501E2D     (base 16)		StreamUnlimited Engineering GmbH
-				Gutheil-Schoder-Gasse 10
-				Vienna    1100
-				AT
-
-E4-5D-51   (hex)		SFR
-E45D51     (base 16)		SFR
-				12 rue jean-philippe Rameau CS 80001
-				La plaine saint denis   FRANCE  93634
-				FR
-
-EC-01-EE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-EC01EE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-60-49-C1   (hex)		Avaya Inc
-6049C1     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-9C-66-50   (hex)		Glodio Technolies Co.,Ltd Tianjin Branch
-9C6650     (base 16)		Glodio Technolies Co.,Ltd Tianjin Branch
-				Room 904, No.1-2 LanYuan Road, HuaYuan Industrial Area
-				TianJin  TianJin  300384
-				CN
-
-A0-A3-3B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A0A33B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-67-A2   (hex)		Intel Corporate
-7C67A2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-E0-5A   (hex)		GALEA NETWORK SECURITY
-00E05A     (base 16)		GALEA NETWORK SECURITY
-				2 PLACE du COMMERCE - STE #320
-				BROSSARD, QUEBEC J4W 2T8    
-				CA
-
-48-A3-80   (hex)		Gionee Communication Equipment Co.,Ltd.
-48A380     (base 16)		Gionee Communication Equipment Co.,Ltd.
-				21/F,Times Technology Building,No. 7028,Shennan Avenue,Futian District
-				Shenzhen    518000
-				CN
-
-94-65-2D   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-94652D     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-1C-B8-57   (hex)		Becon Technologies Co,.Ltd.
-1CB857     (base 16)		Becon Technologies Co,.Ltd.
-				Room C405-A Induckwon IT Vally, 40, Imiro
-				Uiwang city  Kyunggi-do  16006
-				KR
-
-68-27-37   (hex)		Samsung Electronics Co.,Ltd
-682737     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-F0-6E-32   (hex)		MICROTEL INNOVATION S.R.L.
-F06E32     (base 16)		MICROTEL INNOVATION S.R.L.
-				Via Armentera 8
-				BORGO VALSUGANA  TN  38051
-				IT
-
-54-C4-15   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-54C415     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-3C-F8-62   (hex)		Intel Corporate
-3CF862     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-28-16-AD   (hex)		Intel Corporate
-2816AD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-60-D3   (hex)		AT&T
-0060D3     (base 16)		AT&T
-				3300 E Renner Road
-				Richardson  TX  75082
-				US
-
-84-8D-C7   (hex)		Cisco SPVTG
-848DC7     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-00-19-92   (hex)		Adtran Inc
-001992     (base 16)		Adtran Inc
-				901 Explorer Blvd.
-				Huntsville  AL  35806-2807
-				US
-
-04-5D-4B   (hex)		Sony Corporation
-045D4B     (base 16)		Sony Corporation
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-78-AF-58   (hex)		GIMASI SA
-78AF58     (base 16)		GIMASI SA
-				Via Luigi Lavizzari 18
-				Mendrisio  TI  6850
-				CH
-
-90-50-5A   (hex)		unGlue, Inc
-90505A     (base 16)		unGlue, Inc
-				7150 Helmsdale Circle
-				West Hils  CA  91307
-				US
-
-8C-93-51   (hex)		Jigowatts Inc.
-8C9351     (base 16)		Jigowatts Inc.
-				5892-5 Endo
-				Fujisawa  Kanagawa  252-0816
-				JP
-
-D8-38-FC   (hex)		Ruckus Wireless
-D838FC     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-34-78-D7   (hex)		Gionee Communication Equipment Co.,Ltd.
-3478D7     (base 16)		Gionee Communication Equipment Co.,Ltd.
-				21/F,Times Technology Building,No. 7028,Shennan Avenue,Futian District
-				Shenzhen    518000
-				CN
-
-5C-CC-A0   (hex)		Gridwiz Inc.
-5CCCA0     (base 16)		Gridwiz Inc.
-				4F, 25 Sanun-ro 208beon-gil, Bundang-gu
-				Seongnam  Gyeonggi  13460
-				KR
-
-68-31-FE   (hex)		Teladin Co.,Ltd.
-6831FE     (base 16)		Teladin Co.,Ltd.
-				Digital-ro 33 gil, Guro-gu
-				Seoul    08377
-				KR
-
-58-00-E3   (hex)		Liteon Technology Corporation
-5800E3     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-2C-0B-E9   (hex)		Cisco Systems, Inc
-2C0BE9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C4-30-18   (hex)		MCS Logic Inc.
-C43018     (base 16)		MCS Logic Inc.
-				6F. Samho Center B Bldg., 275-6,Yangjae-Dong, Secho-Ku,Seoul
-				Seoul    137-941
-				KR
-
-D0-FF-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D0FF98     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-E5-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B0E5ED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-86-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C486E9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-0A-E4   (hex)		Wistron Corporation
-000AE4     (base 16)		Wistron Corporation
-				21F, No. 88, Section 1, Hsin Tai  Wu Rd.
-				Taipei    221
-				TW
-
-34-4B-3D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-344B3D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-FC-3C-E9   (hex)		Tsingtong Technologies Co, Ltd.
-FC3CE9     (base 16)		Tsingtong Technologies Co, Ltd.
-				Rm A03-72, Floor B1, Building 1, No.13 Dazhongsi, Haidian District
-				Beijing    100098
-				CN
-
-A4-08-F5   (hex)		Sagemcom Broadband SAS
-A408F5     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-B0-91   (hex)		Transmeta Corp.
-00B091     (base 16)		Transmeta Corp.
-				3940 Freedom Circle
-				Santa Clara  CA  95054
-				US
-
-AC-C6-62   (hex)		MitraStar Technology Corp.
-ACC662     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-88-6B-44   (hex)		Sunnovo International Limited
-886B44     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-A4-58-0F   (hex)		IEEE Registration Authority
-A4580F     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C8-F7-33   (hex)		Intel Corporate
-C8F733     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-E0-A7-00   (hex)		Verkada Inc
-E0A700     (base 16)		Verkada Inc
-				325 Sharon Park Drive, Suite 519
-				Menlo Park    94025
-				US
-
-58-40-4E   (hex)		Apple, Inc.
-58404E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-C5-F3   (hex)		Apple, Inc.
-D0C5F3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-9F-EF   (hex)		Apple, Inc.
-BC9FEF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-AB-37   (hex)		Apple, Inc.
-20AB37     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-F4-45   (hex)		Apple, Inc.
-60F445     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-F9-7C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-48F97C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-40-B9-3C   (hex)		Hewlett Packard Enterprise
-40B93C     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-C0-BF-C0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0BFC0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-D9-CB   (hex)		Lesira Manufacturing Pty Ltd
-9CD9CB     (base 16)		Lesira Manufacturing Pty Ltd
-				34 Gemsbok Street
-				Pretoria  Gauteng  0186
-				ZA
-
-94-E9-79   (hex)		Liteon Technology Corporation
-94E979     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-A0-3D-6F   (hex)		Cisco Systems, Inc
-A03D6F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-E0-AF   (hex)		Cisco Systems, Inc
-A0E0AF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-4C-B8-1C   (hex)		SAM Electronics GmbH
-4CB81C     (base 16)		SAM Electronics GmbH
-				Behringstr. 120
-				Hamburg  Hamburg  22763
-				DE
-
-00-30-48   (hex)		Super Micro Computer, Inc.
-003048     (base 16)		Super Micro Computer, Inc.
-				2051 Junction Avenue
-				San Jose  CA  95131
-				US
-
-44-D2-44   (hex)		Seiko Epson Corporation
-44D244     (base 16)		Seiko Epson Corporation
-				80 Harashinden
-				Shiojiri-shi  Nagano-ken  399-0785
-				JP
-
-A0-8C-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A08CF8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-F9-5C   (hex)		U.I. Lapp GmbH
-7CF95C     (base 16)		U.I. Lapp GmbH
-				Schulze-Delitzsch-Strasse 25
-				Stuttgart    70565
-				DE
-
-A4-E6-B1   (hex)		Shanghai Joindata Technology Co.,Ltd.
-A4E6B1     (base 16)		Shanghai Joindata Technology Co.,Ltd.
-				26F,Building1,No428,South Yanggao Road,Pudong District
-				Shanghai  Shanghai  200127
-				CN
-
-C0-9C-04   (hex)		Shaanxi GuoLian Digital TV Technology Co.,Ltd.
-C09C04     (base 16)		Shaanxi GuoLian Digital TV Technology Co.,Ltd.
-				No. 15, the first Gaoxin road Hi-tech development district
-				Xi'an  Shaanxi  710075
-				CN
-
-AC-D6-57   (hex)		Shaanxi GuoLian Digital TV Technology Co.,Ltd.
-ACD657     (base 16)		Shaanxi GuoLian Digital TV Technology Co.,Ltd.
-				Chief Building, Fifth Yannan Road, Qujiang New District
-				xi'an  shaanxi  71000
-				CN
-
-00-76-86   (hex)		Cisco Systems, Inc
-007686     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-8C-2F-A6   (hex)		Solid Optics B.V.
-8C2FA6     (base 16)		Solid Optics B.V.
-				Huchtstraat 35
-				Almere    1327EC
-				NL
-
-8C-19-2D   (hex)		IEEE Registration Authority
-8C192D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-AC-E0   (hex)		ARRIS Group, Inc.
-00ACE0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-75-32   (hex)		INID BV
-007532     (base 16)		INID BV
-				Mariettahof 27
-				Haarlem  NH  2033WS
-				NL
-
-64-73-E2   (hex)		Arbiter Systems, Inc.
-6473E2     (base 16)		Arbiter Systems, Inc.
-				1324 Vendels Circle
-				Paso Robles  California  93446
-				US
-
-88-C6-26   (hex)		Logitech, Inc
-88C626     (base 16)		Logitech, Inc
-				4700 NW Camas Meadows Dr
-				Camas  WA  98607
-				US
-
-D0-60-8C   (hex)		zte corporation
-D0608C     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-AC-23-3F   (hex)		Shenzhen Minew Technologies Co., Ltd.
-AC233F     (base 16)		Shenzhen Minew Technologies Co., Ltd.
-				H Building, Gangzhilong Science Park, QInglong Road
-				Shenzhen    518109
-				CN
-
-7C-03-C9   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-7C03C9     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-B8-E9-37   (hex)		Sonos, Inc.
-B8E937     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-E4-5D-52   (hex)		Avaya Inc
-E45D52     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-00-23-F7   (hex)		Private
-0023F7     (base 16)		Private
-
-3C-80-AA   (hex)		Ransnet Singapore Pte Ltd
-3C80AA     (base 16)		Ransnet Singapore Pte Ltd
-				114, Lavender Street, #08-83, CT Hub 2
-				Singapore  Singapore  338729
-				SG
-
-B4-96-91   (hex)		Intel Corporate
-B49691     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-C8-21-58   (hex)		Intel Corporate
-C82158     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-24-20-C7   (hex)		Sagemcom Broadband SAS
-2420C7     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-D4-C8-B0   (hex)		Prime Electronics & Satellitics Inc.
-D4C8B0     (base 16)		Prime Electronics & Satellitics Inc.
-				69,Tung-Yuan Rd
-				Chung-Li City  Tao-Yuan County  32000
-				TW
-
-44-6A-B7   (hex)		ARRIS Group, Inc.
-446AB7     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-70-1C-E7   (hex)		Intel Corporate
-701CE7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-9C-2A-70   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-9C2A70     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-70-3D-15   (hex)		Hangzhou H3C Technologies Co., Limited
-703D15     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-E4-9E-12   (hex)		FREEBOX SAS
-E49E12     (base 16)		FREEBOX SAS
-				16 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-04-81-AE   (hex)		Clack Corporation
-0481AE     (base 16)		Clack Corporation
-				4462 Duraform Lane
-				Windsor  WI  53598
-				US
-
-9C-13-AB   (hex)		Chanson Water Co., Ltd.
-9C13AB     (base 16)		Chanson Water Co., Ltd.
-				2F, No.88-11, Sec 1, Guangfu Rd, Sanchong Dist.
-				New Taipei City  Taiwan  241
-				TW
-
-98-E4-76   (hex)		Zentan
-98E476     (base 16)		Zentan
-				10F-3, No. 260, Sec.2 New Taipei Blvd., Sanchong District
-				New Taipei City    24158
-				TW
-
-14-A5-1A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14A51A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-75-03   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-047503     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-EF-8C   (hex)		Zhejiang Dahua Technology Co., Ltd.
-3CEF8C     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				NO.1199 Bin An Road,Binjiang District,HangZhou,P.R.China
-				HangZhou  ZheJiang  310053
-				CN
-
-A4-D9-A4   (hex)		neXus ID Solutions AB
-A4D9A4     (base 16)		neXus ID Solutions AB
-				Telefonvägen 26
-				Stockholm    12626
-				SE
-
-48-4D-7E   (hex)		Dell Inc.
-484D7E     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-D4-E9-0B   (hex)		CVT CO.,LTD
-D4E90B     (base 16)		CVT CO.,LTD
-				Secho gu BangBae 3 dong 1001-1
-				seoul  KangNam  KS013
-				KR
-
-CC-B0-DA   (hex)		Liteon Technology Corporation
-CCB0DA     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-18-F2-92   (hex)		Shannon Systems
-18F292     (base 16)		Shannon Systems
-				Suite 1801,Wentong Building,739 Kunming Road, Yangpu, Shanghai
-				Shanghai    200000
-				CN
-
-8C-EA-1B   (hex)		Edgecore Networks Corporation
-8CEA1B     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-E0-2C-F3   (hex)		MRS Electronic GmbH
-E02CF3     (base 16)		MRS Electronic GmbH
-				Klaus-Gutsch-Str. 7
-				Rottweil    78628
-				DE
-
-50-B3-63   (hex)		Digitron da Amazonia S/A
-50B363     (base 16)		Digitron da Amazonia S/A
-				Av. Eng. Luis Carlos Berrini , 1297
-				São Paulo  São Paulo  04571010
-				BR
-
-2C-0E-3D   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-2C0E3D     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-58-E1-6C   (hex)		Ying Hua Information Technology (Shanghai)Co., LTD
-58E16C     (base 16)		Ying Hua Information Technology (Shanghai)Co., LTD
-				Room 37 ,Building 13b, No. 4 , lane 600, Tianshan Road ,Changning District Shanghai 
-				Shanghai    201210
-				CN
-
-9C-7D-A3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C7DA3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-C6-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4C64F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-FD-17   (hex)		TCT mobile ltd
-CCFD17     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-DC-9F-DB   (hex)		Ubiquiti Networks Inc.
-DC9FDB     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Parkway
-				San Jose  CA  95131
-				US
-
-00-27-22   (hex)		Ubiquiti Networks Inc.
-002722     (base 16)		Ubiquiti Networks Inc.
-				91 E Tasman Dr
-				San Jose  CA  95134
-				US
-
-00-15-6D   (hex)		Ubiquiti Networks Inc.
-00156D     (base 16)		Ubiquiti Networks Inc.
-				495 Montague Expwy.
-				Milpitas  CA  95035
-				US
-
-00-D7-8F   (hex)		Cisco Systems, Inc
-00D78F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-2C-BA-BA   (hex)		Samsung Electronics Co.,Ltd
-2CBABA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-40-D3-AE   (hex)		Samsung Electronics Co.,Ltd
-40D3AE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-2C-DD-95   (hex)		Taicang T&W Electronics
-2CDD95     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-88-E8-7F   (hex)		Apple, Inc.
-88E87F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-F4-8E   (hex)		Apple, Inc.
-9CF48E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-F7-E6   (hex)		Apple, Inc.
-5CF7E6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B8-53-AC   (hex)		Apple, Inc.
-B853AC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-3C-AE   (hex)		Apple, Inc.
-203CAE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-3B-E3   (hex)		Apple, Inc.
-A03BE3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-32-75   (hex)		Apple, Inc.
-4C3275     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-7A-55   (hex)		ALE International
-487A55     (base 16)		ALE International
-				32 avenue Kléber
-				Colombes    92700
-				FR
-
-00-1E-AE   (hex)		Continental Automotive Systems Inc.
-001EAE     (base 16)		Continental Automotive Systems Inc.
-				21440 West Lake Cook Road
-				Deer Park  IL  60010
-				US
-
-50-2B-73   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
-502B73     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
-				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
-				Dongguan  Guangdong  523770
-				CN
-
-04-BA-36   (hex)		Li Seng Technology Ltd
-04BA36     (base 16)		Li Seng Technology Ltd
-				Rm901, 9/F Shiu Fung Hong Building, 239-241 Wing Lok Street, Hong Kong
-				Hong Kong    0000
-				HK
-
-10-72-23   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-107223     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-				Av. Buriti, 1900 – Setor B – Distrito Industrial
-				Manaus  Amazonas  69075-000
-				BR
-
-E0-68-6D   (hex)		Raybased AB
-E0686D     (base 16)		Raybased AB
-				A Odhners Gata 41
-				Västra Frölunda    42130
-				SE
-
-18-61-C7   (hex)		lemonbeat GmbH
-1861C7     (base 16)		lemonbeat GmbH
-				Deutsche Str. 5
-				Dortmund    44339
-				DE
-
-9C-DC-71   (hex)		Hewlett Packard Enterprise
-9CDC71     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-B4-F8-1E   (hex)		Kinova
-B4F81E     (base 16)		Kinova
-				6110, rue Doris-Lussier,
-				Boisbriand  Qc  J7H 0E8
-				CA
-
-D0-3D-C3   (hex)		AQ Corporation
-D03DC3     (base 16)		AQ Corporation
-				205, Saneop-ro 155beon-gil, Gwonseon-gu
-				Suwon  Gyeonggi-do  16648
-				KR
-
-EC-01-E2   (hex)		FOXCONN INTERCONNECT TECHNOLOGY
-EC01E2     (base 16)		FOXCONN INTERCONNECT TECHNOLOGY
-				66-1, Chungshan Rd., Tucheng Dist.
-				New Taipei City  Taiwan (R.O.C.)    23680
-				TW
-
-B4-E7-82   (hex)		Vivalnk
-B4E782     (base 16)		Vivalnk
-				4655 Old Ironsides Dr, #390
-				Santa Clara  CA  95054
-				US
-
-44-09-B8   (hex)		Salcomp (Shenzhen) CO., LTD.
-4409B8     (base 16)		Salcomp (Shenzhen) CO., LTD.
-				Salcomp Road, Furong Industrial Area, Xinqiao, Shajing, Baoan District
-				Shenzhen  Guangdong  518125
-				CN
-
-38-16-D1   (hex)		Samsung Electronics Co.,Ltd
-3816D1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-17-6A   (hex)		Samsung Electronics Co.,Ltd
-D0176A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D4-88-90   (hex)		Samsung Electronics Co.,Ltd
-D48890     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-92-BE   (hex)		Samsung Electronics Co.,Ltd
-5492BE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-20-5D-47   (hex)		vivo Mobile Communication Co., Ltd.
-205D47     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-10-C6-0C   (hex)		Domino UK Ltd
-10C60C     (base 16)		Domino UK Ltd
-				Trafalgar Way
-				Cambridge  Cambridgeshire  CB23 8TU
-				GB
-
-04-31-10   (hex)		Inspur Group Co., Ltd.
-043110     (base 16)		Inspur Group Co., Ltd.
-				No.1036 Langchao Rd.
-				Jinan  Shandong  250101
-				CN
-
-94-9A-A9   (hex)		Microsoft Corporation
-949AA9     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-AC-AB-2E   (hex)		Beijing LasNubes Technology Co., Ltd.
-ACAB2E     (base 16)		Beijing LasNubes Technology Co., Ltd.
-				Chao-Yang-Bei-Lu No. 103, Room 1109-1110
-				Beijing    100025
-				CN
-
-60-0B-03   (hex)		Hangzhou H3C Technologies Co., Limited
-600B03     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-A0-AB-1B   (hex)		D-Link International
-A0AB1B     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-D8-42-E2   (hex)		Canary Connect, Inc.
-D842E2     (base 16)		Canary Connect, Inc.
-				132 East 43rd Street
-				New York    10017
-				US
-
-C8-B2-1E   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-C8B21E     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
-				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
-				SHEN ZHEN  GUANG DONG  518000
-				CN
-
-00-06-78   (hex)		D&M Holdings Inc.
-000678     (base 16)		D&M Holdings Inc.
-				D&M Building, 2-1 Nisshin-cho
-				Kawasaki-shi  Kanagawa   210-8569
-				JP
-
-E0-28-6D   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-E0286D     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-88-4C-CF   (hex)		Pulzze Systems, Inc
-884CCF     (base 16)		Pulzze Systems, Inc
-				1290-B Reamwood Ave
-				Sunnyvale  CA  94089
-				US
-
-50-09-59   (hex)		Technicolor CH USA Inc.
-500959     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-E4-12-18   (hex)		ShenZhen Rapoo Technology Co., Ltd.
-E41218     (base 16)		ShenZhen Rapoo Technology Co., Ltd.
-				22,Jinxiu Road East,Pingshan District,Shenzhen,China
-				Shenzhen  Guangdong  518122
-				CN
-
-00-19-84   (hex)		ESTIC Corporation
-001984     (base 16)		ESTIC Corporation
-				2-5-9 Hashibahigashino-cho
-				Moriguchi  Osaka  570-0031
-				JP
-
-00-16-28   (hex)		Magicard Ltd
-001628     (base 16)		Magicard Ltd
-				Hampshire Road
-				Weymouth  Dorset  DT4 9XD
-				GB
-
-70-2E-22   (hex)		zte corporation
-702E22     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C8-E7-76   (hex)		PTCOM Technology
-C8E776     (base 16)		PTCOM Technology
-				NO.189-8, SEC. 3, NANJING E. RD., ZHONGSHAN DIST.
-				Taipei    10488
-				TW
-
-00-02-78   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-000278     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Mae-tan-dong,
-				Suwon  Suwon  KOREA
-				KR
-
-00-23-99   (hex)		Samsung Electronics Co.,Ltd
-002399     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3dong, yeongtong-gu, Suwon-city
-				suwon    443-742
-				KR
-
-00-17-C9   (hex)		Samsung Electronics Co.,Ltd
-0017C9     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan-3Dong, Yeongtong-Gu
-				Suwon  Geyonggi-Do  443-742
-				KR
-
-90-6E-BB   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-906EBB     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-18-F4-6A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-18F46A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-4C-0F-6E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-4C0F6E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-78-E4-00   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-78E400     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-21-2F   (hex)		Phoebe Micro Inc.
-00212F     (base 16)		Phoebe Micro Inc.
-				47606 Kato Rd
-				Fremont  CA  94538
-				US
-
-38-59-F9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-3859F9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-EC-55-F9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-EC55F9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C4-73-1E   (hex)		Samsung Electronics Co.,Ltd
-C4731E     (base 16)		Samsung Electronics Co.,Ltd
-				416, Maetan 3dong, Yeongtong-Gu
-				Suwon  Gyeonggi-Do  443742
-				KR
-
-5C-0A-5B   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-5C0A5B     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				Suwon    443-743
-				US
-
-7C-E9-D3   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-7CE9D3     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-1C-3E-84   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-1C3E84     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-B8-76-3F   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-B8763F     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-60-F4-94   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-60F494     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-80-56-F2   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-8056F2     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-7C-F8-54   (hex)		Samsung Electronics Co.,Ltd
-7CF854     (base 16)		Samsung Electronics Co.,Ltd
-				415, Maetan-3dong, Yeongtong-gu, Suwon-City Gyeonggi-do 443-742
-				Suwon    443-742
-				KR
-
-00-1B-98   (hex)		Samsung Electronics Co.,Ltd
-001B98     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				GUMI  Gyeong-Buk  730-350
-				KR
-
-00-1A-8A   (hex)		Samsung Electronics Co.,Ltd
-001A8A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi-City  Gyeong-Buk  730-350
-				KR
-
-3C-5A-37   (hex)		Samsung Electronics Co.,Ltd
-3C5A37     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F4-9F-54   (hex)		Samsung Electronics Co.,Ltd
-F49F54     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-C3-AC   (hex)		Samsung Electronics Co.,Ltd
-34C3AC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-44-F4-59   (hex)		Samsung Electronics Co.,Ltd
-44F459     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-26-5D   (hex)		Samsung Electronics Co.,Ltd
-00265D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-F9-E8   (hex)		Samsung Electronics Co.,Ltd
-CCF9E8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D8-57-EF   (hex)		Samsung Electronics Co.,Ltd
-D857EF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-E2-C2   (hex)		Samsung Electronics Co.,Ltd
-18E2C2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-98-52-B1   (hex)		Samsung Electronics Co.,Ltd
-9852B1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-40-E2   (hex)		Samsung Electronics Co.,Ltd
-E440E2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-3B-59   (hex)		Samsung Electronics Co.,Ltd
-103B59     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D8-90-E8   (hex)		Samsung Electronics Co.,Ltd
-D890E8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-62-EA   (hex)		Samsung Electronics Co.,Ltd
-C462EA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-F4-2A   (hex)		Samsung Electronics Co.,Ltd
-14F42A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-08-08-C2   (hex)		Samsung Electronics Co.,Ltd
-0808C2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-FE-3C   (hex)		Samsung Electronics Co.,Ltd
-CCFE3C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-28-BA-B5   (hex)		Samsung Electronics Co.,Ltd
-28BAB5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-26-66   (hex)		Samsung Electronics Co.,Ltd
-182666     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-D6-C9   (hex)		Samsung Electronics Co.,Ltd
-30D6C9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-07-AB   (hex)		Samsung Electronics Co.,Ltd
-CC07AB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-25-67   (hex)		Samsung Electronics Co.,Ltd
-002567     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-B1-F3   (hex)		Samsung Electronics Co.,Ltd
-BCB1F3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-62-B8   (hex)		Samsung Electronics Co.,Ltd
-1C62B8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-3A-28   (hex)		Samsung Electronics Co.,Ltd
-B43A28     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-78-A8-73   (hex)		Samsung Electronics Co.,Ltd
-78A873     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-1C-43   (hex)		Samsung Electronics Co.,Ltd
-001C43     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-23-D6   (hex)		Samsung Electronics Co.,Ltd
-0023D6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E4-12-1D   (hex)		Samsung Electronics Co.,Ltd
-E4121D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-44-D6-E1   (hex)		Snuza International Pty. Ltd.
-44D6E1     (base 16)		Snuza International Pty. Ltd.
-				Unit 11, Roeland Square, Roeland Street
-				Cape Town  Western Cape  8001
-				ZA
-
-FC-91-14   (hex)		Technicolor CH USA Inc.
-FC9114     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-48-6D-BB   (hex)		Vestel Elektronik San ve Tic. A.Ş.
-486DBB     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
-				Organize san
-				Manisa  Turket  45030
-				TR
-
-00-2A-10   (hex)		Cisco Systems, Inc
-002A10     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-A2-89   (hex)		Cisco Systems, Inc
-00A289     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-44-E9-DD   (hex)		Sagemcom Broadband SAS
-44E9DD     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-00-0F-5E   (hex)		Veo
-000F5E     (base 16)		Veo
-				910 Rincon Circle
-				San Jose  CA  95131
-				US
-
-00-13-28   (hex)		Westech Korea Inc.,
-001328     (base 16)		Westech Korea Inc.,
-				548-9, Gajwa3-Dong,Seo-ku,
-				Incheon    404-817
-				KR
-
-B8-BF-83   (hex)		Intel Corporate
-B8BF83     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-8C-61-02   (hex)		Beijing Baofengmojing Technologies Co., Ltd
-8C6102     (base 16)		Beijing Baofengmojing Technologies Co., Ltd
-				7/F, Tower C, Zhizhen Plaza, No.7 Zhichun Rd, Haidian District
-				Beijing    100191
-				CN
-
-54-8C-A0   (hex)		Liteon Technology Corporation
-548CA0     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-7C-79-E8   (hex)		PayRange Inc.
-7C79E8     (base 16)		PayRange Inc.
-				700 NE Multnomah St. Ste 1400
-				Portland  OR  97232
-				US
-
-A4-31-11   (hex)		ZIV
-A43111     (base 16)		ZIV
-				Polígono Parque Tecnológico, 210
-				ZAMUDIO  VIZCAYA  48170
-				ES
-
-00-80-73   (hex)		DWB ASSOCIATES
-008073     (base 16)		DWB ASSOCIATES
-				9360 SW GEMINI DRIVE
-				BEAVERTON  OR  97005-7151
-				US
-
-80-A1-D7   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
-80A1D7     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
-				22F,Info Tech Building,No.1555,Kongjiang Rd.
-				Shanghai    200092
-				CN
-
-EC-1F-72   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-EC1F72     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93 Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-8C-0D-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8C0D76     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-BE-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-84BE52     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-9F-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-849FB5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-CA-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4CAA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-84-E0-F4   (hex)		IEEE Registration Authority
-84E0F4     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D8-30-62   (hex)		Apple, Inc.
-D83062     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-E5-4D   (hex)		ARRIS Group, Inc.
-D0E54D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A0-C5-62   (hex)		ARRIS Group, Inc.
-A0C562     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-84-96-D8   (hex)		ARRIS Group, Inc.
-8496D8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-26-D9   (hex)		ARRIS Group, Inc.
-0026D9     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E8-50-8B   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-E8508B     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-F8-04-2E   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-F8042E     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak
-				Bangpakong  Chachoengsao  24180
-				TH
-
-00-D0-37   (hex)		ARRIS Group, Inc.
-00D037     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-84-E0-58   (hex)		ARRIS Group, Inc.
-84E058     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-70-76-30   (hex)		ARRIS Group, Inc.
-707630     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-04-BB-F9   (hex)		Pavilion Data Systems Inc
-04BBF9     (base 16)		Pavilion Data Systems Inc
-				2560 N 1st St, #220
-				San Jose  CA  95131
-				US
-
-E4-BE-ED   (hex)		Netcore Technology Inc.
-E4BEED     (base 16)		Netcore Technology Inc.
-				ORIENTAL CYBERPORT,HIGHTECH 6 ROAD
-				Shenzhen    518057
-				CN
-
-58-FB-84   (hex)		Intel Corporate
-58FB84     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-C0-17   (hex)		NetAlly
-00C017     (base 16)		NetAlly
-				2075 Research Parkway
-				Colorado Springs  CO  80920
-				US
-
-5C-B0-66   (hex)		ARRIS Group, Inc.
-5CB066     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-BC-8A-A3   (hex)		NHN Entertainment
-BC8AA3     (base 16)		NHN Entertainment
-				Play Museum, 629 Sampyeong-dong, Bundang-gu
-				Seongnam-si, Gyeonggi-do    463-400
-				KR
-
-A8-BD-27   (hex)		Hewlett Packard Enterprise
-A8BD27     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-34-57-60   (hex)		MitraStar Technology Corp.
-345760     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-C0-D3-91   (hex)		IEEE Registration Authority
-C0D391     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D4-9B-5C   (hex)		Chongqing Miedu Technology Co., Ltd.
-D49B5C     (base 16)		Chongqing Miedu Technology Co., Ltd.
-				7-602 No.118 DaPing Main Street Yuzhong District
-				Chongqing    400000
-				CN
-
-E8-EB-11   (hex)		Texas Instruments
-E8EB11     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-44-BF-E3   (hex)		Shenzhen Longtech Electronics Co.,Ltd
-44BFE3     (base 16)		Shenzhen Longtech Electronics Co.,Ltd
-				No.148 Zhengfeng Industrial Area Donghuan RD Huangpu Village Shaijing Town Baoan District
-				Shenzhen  Guangdong  518125
-				CN
-
-3C-6F-EA   (hex)		Panasonic India Pvt. Ltd.
-3C6FEA     (base 16)		Panasonic India Pvt. Ltd.
-				12th Floor, Ambience Tower, Ambience Island, NH - 8
-				Gurgaon  Haryana  122002
-				IN
-
-00-22-61   (hex)		Frontier Silicon Ltd
-002261     (base 16)		Frontier Silicon Ltd
-				137 Euston Road
-				London    NW12AA
-				GB
-
-00-19-88   (hex)		Wi2Wi, Inc
-001988     (base 16)		Wi2Wi, Inc
-				2107 N. 1st Street
-				San Jose  CA  95131
-				US
-
-18-DC-56   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-18DC56     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
-				8/F.high Tech Plaza,TianAn Cyberpark,Chegongmiao
-				Shenzhen  Guangdong  518040
-				CN
-
-00-16-F2   (hex)		Dmobile System Co., Ltd.
-0016F2     (base 16)		Dmobile System Co., Ltd.
-				2F, No.13-20, Sec.6, Mincyuan E.Rd,
-				Taipei    114
-				TW
-
-34-07-4F   (hex)		AccelStor, Inc.
-34074F     (base 16)		AccelStor, Inc.
-				10F, No. 465, Sec. 6, Zhongxiao E. Rd., Nangang Dist.
-				Taipei City    11557
-				TW
-
-B4-A9-84   (hex)		Symantec Corporation
-B4A984     (base 16)		Symantec Corporation
-				350 Ellis Street
-				Mountain View  CA  94043
-				US
-
-B0-B2-8F   (hex)		Sagemcom Broadband SAS
-B0B28F     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-44-14-41   (hex)		AudioControl Inc.
-441441     (base 16)		AudioControl Inc.
-				22410 70Th Ave West, STE 1 
-				Mountlake Terrace  WA  98043
-				US
-
-C8-8D-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C88D83     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-E0-11   (hex)		UNIDEN CORPORATION
-00E011     (base 16)		UNIDEN CORPORATION
-				2-12-7 Hatchobori,
-				Chuo-ku  Tokyo  104-8512
-				JP
-
-00-25-55   (hex)		Visonic Technologies 1993 Ltd.
-002555     (base 16)		Visonic Technologies 1993 Ltd.
-				23 Habarzel st'
-				Tel - Aviv    69710
-				IL
-
-58-98-6F   (hex)		Revolution Display
-58986F     (base 16)		Revolution Display
-				912 Ruberta Ave
-				Glendale  CA  91201
-				US
-
-C8-1F-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C81FBE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-3D-B2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-203DB2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-D5-39   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48D539     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-1F-9A   (hex)		Nortel Networks
-001F9A     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75082-4399
-				US
-
-00-0A-0E   (hex)		Invivo Research Inc.
-000A0E     (base 16)		Invivo Research Inc.
-				12601 Research Parkway
-				Orlando  Florida  32826
-				US
-
-00-16-60   (hex)		Nortel Networks
-001660     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-1E-7E   (hex)		Nortel Networks
-001E7E     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-13-65   (hex)		Nortel Networks
-001365     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-04-38   (hex)		Nortel Networks
-000438     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-00-0E-C0   (hex)		Nortel Networks
-000EC0     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-D8-4F-B8   (hex)		LG ELECTRONICS
-D84FB8     (base 16)		LG ELECTRONICS
-				84 Wanam-ro Seongsan-gu
-				Changwon-si  Gyeongsangnam-do  642-713
-				KR
-
-00-0A-EB   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-000AEB     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Hi-Tech Park R1-B3
-				Shenzhen  Guangdong  518057
-				CN
-
-2C-37-31   (hex)		SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.
-2C3731     (base 16)		SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.
-				Building # 22 and #23, Zone 5, Bai Wang Xin Industrial Park, Song Bai Road
-				ShenZhen  GUANGDONG  518108
-				CN
-
-60-EE-5C   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-60EE5C     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-64-88-FF   (hex)		Sichuan Changhong Electric Ltd.
-6488FF     (base 16)		Sichuan Changhong Electric Ltd.
-				35 East Mianxing Road,High-Tech Park,
-				MianYang  SiChuan  621000
-				CN
-
-00-21-62   (hex)		Nortel Networks
-002162     (base 16)		Nortel Networks
-				8200 Dixie Rd
-				Brampton  Ontario  0000
-				CA
-
-02-E6-D3   (hex)		NIXDORF COMPUTER CORP.
-02E6D3     (base 16)		NIXDORF COMPUTER CORP.
-				NIXDORF TECHNOLOGY CENTER
-				SANTA CLARA  CA  95054
-				US
-
-00-16-B9   (hex)		ProCurve Networking by HP
-0016B9     (base 16)		ProCurve Networking by HP
-				8000 Foothills Blvd
-				Roseville  CA  95747
-				US
-
-C4-08-4A   (hex)		Nokia
-C4084A     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-00-08-01   (hex)		HighSpeed Surfing Inc.
-000801     (base 16)		HighSpeed Surfing Inc.
-				44790 S. Grimmer Blvd.
-				Fremont  CA  94538
-				US
-
-00-07-72   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-000772     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-E0-30-05   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-E03005     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-3C-40-4F   (hex)		GUANGDONG PISEN ELECTRONICS CO.,LTD
-3C404F     (base 16)		GUANGDONG PISEN ELECTRONICS CO.,LTD
-				Building C,Liuyue Jintang Industry Zone
-				Shenzhen  Guangdong  518173
-				CN
-
-0C-A4-02   (hex)		Alcatel-Lucent IPD
-0CA402     (base 16)		Alcatel-Lucent IPD
-				600 March Drive
-				Kanata  Ontario  K2K2E6
-				CA
-
-A0-F3-E4   (hex)		Alcatel-Lucent IPD
-A0F3E4     (base 16)		Alcatel-Lucent IPD
-				600 March Drive
-				Kanata  Ontario  K2K2E6
-				CA
-
-84-DB-FC   (hex)		Nokia
-84DBFC     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-7C-FC-3C   (hex)		Visteon Corporation
-7CFC3C     (base 16)		Visteon Corporation
-				One Village Center Drive
-				Van Buren Twp  MI  48111
-				US
-
-98-1E-0F   (hex)		Jeelan (Shanghai Jeelan Technology Information Inc
-981E0F     (base 16)		Jeelan (Shanghai Jeelan Technology Information Inc
-				Room 302,Building 17, No.658, Jinzhong Road
-				shanghai    200052
-				CN
-
-48-88-CA   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-4888CA     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-38-56-10   (hex)		CANDY HOUSE, Inc.
-385610     (base 16)		CANDY HOUSE, Inc.
-				119 University Ave.
-				Palo Alto  CA  94301
-				US
-
-00-A7-42   (hex)		Cisco Systems, Inc
-00A742     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-AA-70   (hex)		LG Electronics (Mobile Communications)
-00AA70     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-F8-95-C7   (hex)		LG Electronics (Mobile Communications)
-F895C7     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-84-D9-31   (hex)		Hangzhou H3C Technologies Co., Limited
-84D931     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-00-11-6E   (hex)		Peplink International Ltd.
-00116E     (base 16)		Peplink International Ltd.
-				17/F., Park Building
-				Cheung Sha Wan  Kowloon  0000
-				HK
-
-54-09-55   (hex)		zte corporation
-540955     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-1E-75   (hex)		LG Electronics (Mobile Communications)
-001E75     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-1C-62   (hex)		LG Electronics (Mobile Communications)
-001C62     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-50-55-27   (hex)		LG Electronics (Mobile Communications)
-505527     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-88-C9-D0   (hex)		LG Electronics (Mobile Communications)
-88C9D0     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-C0-41-F6   (hex)		LG ELECTRONICS INC
-C041F6     (base 16)		LG ELECTRONICS INC
-				19-1,Cheongho-Ri,Jinwi-Myeon
-				Pyeongtaek  Gyeonggi-Do  451-713
-				KR
-
-8C-3A-E3   (hex)		LG Electronics (Mobile Communications)
-8C3AE3     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-90-A4-6A   (hex)		SISNET CO., LTD
-90A46A     (base 16)		SISNET CO., LTD
-				1409, SJ Technoville 60-19, Gasan-dong, Geumcheon-Gu
-				Seoul    KS013
-				KR
-
-14-E7-C8   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-14E7C8     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-EC-CD-6D   (hex)		Allied Telesis, Inc.
-ECCD6D     (base 16)		Allied Telesis, Inc.
-				3041 Orchard Parkway
-				San Jose    95134
-				US
-
-18-33-9D   (hex)		Cisco Systems, Inc
-18339D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-54-27-6C   (hex)		Jiangsu Houge Technology Corp.
-54276C     (base 16)		Jiangsu Houge Technology Corp.
-				No.20 Xizhang North Road, Fenghuang Town
-				Zhangjiagang  Jiangsu  215614
-				CN
-
-9C-A3-A9   (hex)		Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd
-9CA3A9     (base 16)		Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd
-				NO.9, street 3, HengLing industrial zone, Tangdong, tianhe district
-				Guangzhou  Guangdong  510000
-				CN
-
-7C-C7-09   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-7CC709     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
-				Bldg56A, 6/F, Baotian Rd3, Baoan District, Shenzhen, P.R.C
-				Shenzhen  Guangdong  518100
-				CN
-
-A0-3E-6B   (hex)		IEEE Registration Authority
-A03E6B     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-98-02-D8   (hex)		IEEE Registration Authority
-9802D8     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-64-FB-81   (hex)		IEEE Registration Authority
-64FB81     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-08-21-EF   (hex)		Samsung Electronics Co.,Ltd
-0821EF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-14-5F   (hex)		Samsung Electronics Co.,Ltd
-34145F     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-2C-26-5F   (hex)		IEEE Registration Authority
-2C265F     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-D0-05-2A   (hex)		Arcadyan Corporation
-D0052A     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-E4-50-9A   (hex)		HW Communications Ltd
-E4509A     (base 16)		HW Communications Ltd
-				Parkfield
-				Lancaster    LA1 4TZ
-				GB
-
-70-29-00   (hex)		Shenzhen ChipTrip Technology Co,Ltd
-702900     (base 16)		Shenzhen ChipTrip Technology Co,Ltd
-				The 8th floor of  VIA Technology Building  NO. 9966 Shennan road , Nanshan Distict  Shenzhen
-				Shenzhen    518000
-				CN
-
-EC-AA-A0   (hex)		PEGATRON CORPORATION
-ECAAA0     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-00-E0-DD   (hex)		Zenith Electronics Corporation
-00E0DD     (base 16)		Zenith Electronics Corporation
-				1000 MILWAUKEE AVENUE
-				GLENVIEW  IL  60025
-				US
-
-50-CE-75   (hex)		Measy Electronics Co., Ltd.
-50CE75     (base 16)		Measy Electronics Co., Ltd.
-				#1506, Block B, Hai Song Bldg, Tairan 9th Road
-				Shenzhen  Guang Dong   518040
-				CN
-
-00-04-5B   (hex)		Techsan Electronics Co., Ltd.
-00045B     (base 16)		Techsan Electronics Co., Ltd.
-				North Wing
-				  UNITED  KINGDOM
-				GB
-
-00-07-BA   (hex)		UTStarcom Inc
-0007BA     (base 16)		UTStarcom Inc
-				1275 Harbor Bay PKWY
-				Alameda  CA  94502
-				US
-
-90-A2-10   (hex)		United Telecoms Ltd
-90A210     (base 16)		United Telecoms Ltd
-				18A/19,Doddanekundi Industrial Area,
-				Bangalore  Karanataka  560048
-				IN
-
-6C-0B-84   (hex)		Universal Global Scientific Industrial Co., Ltd.
-6C0B84     (base 16)		Universal Global Scientific Industrial Co., Ltd.
-				141, Lane 351, TaiPing Road, Sec.1
-				Tsao-Tuen   Nan-Tou  54261
-				TW
-
-00-15-97   (hex)		AETA AUDIO SYSTEMS
-001597     (base 16)		AETA AUDIO SYSTEMS
-				18-22, avenue Edouard Herriot
-				Le Plessis Robinson    92350
-				FR
-
-00-23-97   (hex)		Westell Technologies Inc.
-002397     (base 16)		Westell Technologies Inc.
-				750 N Commons Dr
-				Aurora  IL  60504
-				US
-
-60-E3-AC   (hex)		LG Electronics (Mobile Communications)
-60E3AC     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-90-F0-52   (hex)		MEIZU Technology Co., Ltd.
-90F052     (base 16)		MEIZU Technology Co., Ltd.
-				MEIZU Tech Bldg., Technology & Innovation Coast
-				Zhuhai  Guangdong  519085
-				CN
-
-00-16-39   (hex)		Ubiquam Co., Ltd.
-001639     (base 16)		Ubiquam Co., Ltd.
-				Technovill 4F,272-3 Yatap3
-				Seongnam  Kyeonggi  463-836
-				KR
-
-00-0C-29   (hex)		VMware, Inc.
-000C29     (base 16)		VMware, Inc.
-				3401 Hillview Avenue
-				Palo Alto  CA  94304
-				US
-
-00-05-69   (hex)		VMware, Inc.
-000569     (base 16)		VMware, Inc.
-				3401 Hillview Avenue
-				Palo Alto  CA  94304
-				US
-
-00-0B-0E   (hex)		Trapeze Networks
-000B0E     (base 16)		Trapeze Networks
-				5753 W. Las Positas Blvd
-				Pleasanton  CA  94588
-				US
-
-8C-FD-F0   (hex)		Qualcomm Inc.
-8CFDF0     (base 16)		Qualcomm Inc.
-				5775 Morehouse Drive
-				San Diego  CA  92121
-				US
-
-C4-BB-4C   (hex)		Zebra Information Tech Co. Ltd
-C4BB4C     (base 16)		Zebra Information Tech Co. Ltd
-				Room 415, No.569 Anchi Road, JiaDing District 
-				Shanghai    201804
-				CN
-
-98-CF-53   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-98CF53     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
-				Dong Guan   Guang Dong  523860
-				CN
-
-D4-A1-48   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D4A148     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-65-CA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D065CA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-6B-2C   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-486B2C     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
-				Dong Guan   Guang Dong  523860
-				CN
-
-6C-25-B9   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-6C25B9     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
-				Dong Guan   Guang Dong  523860
-				CN
-
-2C-28-2D   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-2C282D     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
-				Dong Guan   Guang Dong  523860
-				CN
-
-48-13-F3   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-4813F3     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
-				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
-				Dong Guan   Guang Dong  523860
-				CN
-
-00-40-9F   (hex)		Telco Systems, Inc. 
-00409F     (base 16)		Telco Systems, Inc. 
-				15 Berkshire Road
-				Mansfield,  MA  02048
-				US
-
-00-00-1F   (hex)		Telco Systems, Inc. 
-00001F     (base 16)		Telco Systems, Inc. 
-				15 Berkshire Road
-				Mansfield  MA  02048
-				US
-
-00-A0-12   (hex)		Telco Systems, Inc. 
-00A012     (base 16)		Telco Systems, Inc. 
-				15 Berkshire Road
-				Mansfield  MA  02048
-				US
-
-8C-EB-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8CEBC6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B0-89-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B08900     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-CB-68   (hex)		DAEHAP HYPER-TECH
-78CB68     (base 16)		DAEHAP HYPER-TECH
-				302,Galmachiro,Woolim Lions Valley 5-cha #A-810,Jungwon-Gu
-				Seongnam,  Gyeonggido  445-918
-				KR
-
-34-ED-0B   (hex)		 Shanghai XZ-COM.CO.,Ltd.
-34ED0B     (base 16)		 Shanghai XZ-COM.CO.,Ltd.
-				11th Floor,B Building ,No.100 Qinzhou  Road  ,Shanghai
-				shanghai  shanghai  200235
-				CN
-
-F0-DE-F1   (hex)		Wistron Infocomm (Zhongshan) Corporation
-F0DEF1     (base 16)		Wistron Infocomm (Zhongshan) Corporation
-				168KunShan, 
-				JiangSu    215300
-				CN
-
-F8-0F-41   (hex)		Wistron Infocomm (Zhongshan) Corporation
-F80F41     (base 16)		Wistron Infocomm (Zhongshan) Corporation
-				Torch High-tech Industrial Development Zone, 
-				ZhongShan  Guangdong  528437
-				CN
-
-3C-97-0E   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
-3C970E     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
-				168# First Avence, 
-				Kunshan  JiangSu  215300
-				CN
-
-30-14-4A   (hex)		Wistron Neweb Corporation
-30144A     (base 16)		Wistron Neweb Corporation
-				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
-				HsinChu  Taiwan  308
-				TW
-
-4C-0B-BE   (hex)		Microsoft
-4C0BBE     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-0C-25-76   (hex)		LONGCHEER TELECOMMUNICATION LIMITED
-0C2576     (base 16)		LONGCHEER TELECOMMUNICATION LIMITED
-				Building 1,No.401,Caobao Rd
-				Shanghai  Xuhui District  200233
-				CN
-
-D8-D4-3C   (hex)		Sony Corporation
-D8D43C     (base 16)		Sony Corporation
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-E4-02-9B   (hex)		Intel Corporate
-E4029B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-DC-1A-C5   (hex)		vivo Mobile Communication Co., Ltd.
-DC1AC5     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong  523860
-				CN
-
-F4-5E-AB   (hex)		Texas Instruments
-F45EAB     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-A8-FC-B7   (hex)		Consolidated Resource Imaging
-A8FCB7     (base 16)		Consolidated Resource Imaging
-				2943 S Wilson CT NW
-				Grand Rapids  MI  49534
-				US
-
-00-C0-00   (hex)		LANOPTICS, LTD.
-00C000     (base 16)		LANOPTICS, LTD.
-				P.O. BOX 184
-				ISRAEL  ISRAEL  10551
-				IL
-
-84-51-81   (hex)		Samsung Electronics Co.,Ltd
-845181     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-C2-87   (hex)		Technicolor CH USA Inc.
-B0C287     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-CC-35-40   (hex)		Technicolor CH USA Inc.
-CC3540     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-8C-04-FF   (hex)		Technicolor CH USA Inc.
-8C04FF     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-FC-94-E3   (hex)		Technicolor CH USA Inc.
-FC94E3     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6
-				Lawrenceville  GA  30044
-				US
-
-B8-8D-12   (hex)		Apple, Inc.
-B88D12     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-EF-68   (hex)		Zyxel Communications Corporation
-90EF68     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-C8-16-BD   (hex)		Qingdao Hisense Communications Co.,Ltd.
-C816BD     (base 16)		Qingdao Hisense Communications Co.,Ltd.
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-00-EB-D5   (hex)		Cisco Systems, Inc
-00EBD5     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C4-8F-07   (hex)		Shenzhen Yihao Hulian Science and Technology Co., Ltd.
-C48F07     (base 16)		Shenzhen Yihao Hulian Science and Technology Co., Ltd.
-				Room A, Floor 6, Building 210, Tairan Industry and Trade Park, Che Kung Temple, Futian District, Shenzhen, Guangdong Province
-				ShenZhen  Guangdong  518000
-				CN
-
-DC-78-34   (hex)		LOGICOM SA
-DC7834     (base 16)		LOGICOM SA
-				55 Rue de Lisbonne
-				PARIS    75008
-				FR
-
-CC-CC-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CCCC81     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-6C-95-22   (hex)		Scalys
-6C9522     (base 16)		Scalys
-				Lansinkesweg 4
-				Hengelo    7553 AE
-				NL
-
-B4-56-B9   (hex)		Teraspek Technologies Co.,Ltd
-B456B9     (base 16)		Teraspek Technologies Co.,Ltd
-				14th floor,Block C,Beijing International Building, Zhongguancun South Street, Beijng, China, 100081
-				Beijing    100081
-				CN
-
-9C-DD-1F   (hex)		Intelligent Steward Co.,Ltd
-9CDD1F     (base 16)		Intelligent Steward Co.,Ltd
-				Room 508-598 XiTianGeZhuang Town Government Office Building,8# XiTong Road ,Economic Development District ,MiYun County ,BeiJing City 
-				BeiJing City     101509
-				CN
-
-3C-68-16   (hex)		VXi Corporation
-3C6816     (base 16)		VXi Corporation
-				271 Locust Street
-				Dover  NH  03820
-				US
-
-E8-11-CA   (hex)		SHANDONG KAER ELECTRIC.CO.,LTD
-E811CA     (base 16)		SHANDONG KAER ELECTRIC.CO.,LTD
-				No.58, Dalian Road, Weihai, 264209 Shandong Province, P.R.China 
-				Weihai  Shandong  264209
-				CN
-
-70-28-8B   (hex)		Samsung Electronics Co.,Ltd
-70288B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-8A-7B   (hex)		Samsung Electronics Co.,Ltd
-348A7B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D0-57-7B   (hex)		Intel Corporate
-D0577B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-78-00-9E   (hex)		Samsung Electronics Co.,Ltd
-78009E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-AC-C3-3A   (hex)		Samsung Electronics Co.,Ltd
-ACC33A     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-F2-01   (hex)		Samsung Electronics Co.,Ltd
-54F201     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C4-A3-66   (hex)		zte corporation
-C4A366     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-60-73-BC   (hex)		zte corporation
-6073BC     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-7C-35-48   (hex)		Transcend Information
-7C3548     (base 16)		Transcend Information
-				No.70, XingZhong Rd., NeiHu Dist.,
-				Taipei  Taiwan  114
-				TW
-
-18-B1-69   (hex)		Sonicwall
-18B169     (base 16)		Sonicwall
-				2001 Logic Drive
-				San Jose  CA  95124-3452
-				US
-
-44-44-50   (hex)		OttoQ
-444450     (base 16)		OttoQ
-				20370 Town Center Lane, Suite 205
-				Cupertino  CA  95014
-				US
-
-50-F5-DA   (hex)		Amazon Technologies Inc.
-50F5DA     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-10-12-12   (hex)		Vivo International Corporation Pty Ltd
-101212     (base 16)		Vivo International Corporation Pty Ltd
-				9-13 Bibby Street, 
-				NSW  Chiswick  2046
-				AU
-
-C8-5B-76   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-C85B76     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-78-FF-CA   (hex)		TECNO MOBILE LIMITED
-78FFCA     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-04-65-65   (hex)		Testop
-046565     (base 16)		Testop
-				808, Hanshin IT tower, 272 digital-ro
-				Guro-gu  Seoul  KS013
-				KR
-
-A8-BB-50   (hex)		WiZ IoT Company Limited
-A8BB50     (base 16)		WiZ IoT Company Limited
-				148 Electric Road
-				Hong Kong    0000
-				HK
-
-08-C0-21   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-08C021     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-08-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-600810     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-43-5A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-48435A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-8C-8E-F2   (hex)		Apple, Inc.
-8C8EF2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-90-B0-ED   (hex)		Apple, Inc.
-90B0ED     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-3E-BF   (hex)		GOGORO TAIWAN LIMITED
-F03EBF     (base 16)		GOGORO TAIWAN LIMITED
-				No.33 Dinghu Rd.
-				GuiShan Dist.  Taoyuan  333
-				TW
-
-3C-92-DC   (hex)		Octopod Technology Co. Ltd.
-3C92DC     (base 16)		Octopod Technology Co. Ltd.
-				822 Lane Zhennan Road
-				Shanghai    200331
-				CN
-
-10-00-FD   (hex)		LaonPeople
-1000FD     (base 16)		LaonPeople
-				402-3, Bundang Techno Park B, 148
-				Sungnam-si  Gyeonggi-do  463-760
-				KR
-
-C4-7C-8D   (hex)		IEEE Registration Authority
-C47C8D     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-74-5C-9F   (hex)		TCT mobile ltd
-745C9F     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-8C-99-E6   (hex)		TCT mobile ltd
-8C99E6     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-44-9F-7F   (hex)		DataCore Software Corporation
-449F7F     (base 16)		DataCore Software Corporation
-				6300 NW 5th Way
-				Fort Lauderdale  FL  33309
-				US
-
-84-83-19   (hex)		Hangzhou Zero Zero Technology Co., Ltd.
-848319     (base 16)		Hangzhou Zero Zero Technology Co., Ltd.
-				Bldg 13&14, Dream Town, Hangzhou, Zhejiang
-				Hangzhou  Zhejiang  310000
-				CN
-
-A8-15-59   (hex)		Breathometer, Inc.
-A81559     (base 16)		Breathometer, Inc.
-				863 Mitten Road, Suite 104
-				Burlingame  CA  94010
-				US
-
-70-BA-EF   (hex)		Hangzhou H3C Technologies Co., Limited
-70BAEF     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District,
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-58-6A-B1   (hex)		Hangzhou H3C Technologies Co., Limited
-586AB1     (base 16)		Hangzhou H3C Technologies Co., Limited
-				466 Changhe Road, Binjiang District,
-				Hangzhou  Zhejiang, P.R.China  310052
-				CN
-
-00-90-06   (hex)		Hamamatsu Photonics K.K.
-009006     (base 16)		Hamamatsu Photonics K.K.
-				812 JOKO-CHO
-				HAMAMATSU    431-3196
-				JP
-
-00-1A-F4   (hex)		Handreamnet
-001AF4     (base 16)		Handreamnet
-				#1209 MarioTower, 28
-				Seoul    152-741
-				KR
-
-04-D3-CF   (hex)		Apple, Inc.
-04D3CF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-82-F2   (hex)		Appel Elektronik GmbH
-4882F2     (base 16)		Appel Elektronik GmbH
-				Ludwig-Rinn-Str.10
-				Heuchelheim  Hessen  35452
-				DE
-
-7C-B0-C2   (hex)		Intel Corporate
-7CB0C2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-17-93   (hex)		Tigi Corporation
-001793     (base 16)		Tigi Corporation
-				2070 Chain Bridge road
-				Vienna  Va  22182
-				US
-
-00-03-58   (hex)		Hanyang Digitech Co.Ltd
-000358     (base 16)		Hanyang Digitech Co.Ltd
-				13F, Acetwintower2, 212-30, Guro-Dong
-				Seoul    12304
-				KR
-
-C4-CA-D9   (hex)		Hangzhou H3C Technologies Co., Limited
-C4CAD9     (base 16)		Hangzhou H3C Technologies Co., Limited
-				310 Liuhe Road, Zhijiang Science Park
-				Hangzhou  Zhejiang,   310053
-				CN
-
-58-66-BA   (hex)		Hangzhou H3C Technologies Co., Limited
-5866BA     (base 16)		Hangzhou H3C Technologies Co., Limited
-				310 Liuhe Road, Zhijiang Science Park
-				Hangzhou  Zhejiang,   310053
-				CN
-
-E0-C7-9D   (hex)		Texas Instruments
-E0C79D     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-4C-0B-3A   (hex)		TCT mobile ltd
-4C0B3A     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-E4-2D-02   (hex)		TCT mobile ltd
-E42D02     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-0C-BD-51   (hex)		TCT mobile ltd
-0CBD51     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-40-00-E0   (hex)		Derek(Shaoguan)Limited
-4000E0     (base 16)		Derek(Shaoguan)Limited
-				Gaojiling,Taiping Town, Shixing County
-				Shaoguan  Guangdong  512500
-				CN
-
-FC-BC-9C   (hex)		Vimar Spa
-FCBC9C     (base 16)		Vimar Spa
-				Viale Vicenza 14
-				Marostica  Vicenza  36063
-				IT
-
-14-9E-CF   (hex)		Dell Inc.
-149ECF     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-E8-09-59   (hex)		Guoguang Electric Co.,Ltd
-E80959     (base 16)		Guoguang Electric Co.,Ltd
-				No.8 Jinghu Road, Xinhua Street, Huadu Reg
-				Guangzhou  Guangdong  510800
-				CN
-
-D8-94-03   (hex)		Hewlett Packard Enterprise
-D89403     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-E0-0E-DA   (hex)		Cisco Systems, Inc
-E00EDA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D0-A4-B1   (hex)		Sonifex Ltd.
-D0A4B1     (base 16)		Sonifex Ltd.
-				61 Station Road
-				Irthlingborough  Northamptonshire  NN9 5QE
-				GB
-
-F4-9E-EF   (hex)		Taicang T&W Electronics
-F49EEF     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-C4-F0-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4F081     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-13-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-801382     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-FE-22   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94FE22     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-CC-55   (hex)		Juniper Networks
-F4CC55     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-50-DD-4F   (hex)		Automation Components, Inc
-50DD4F     (base 16)		Automation Components, Inc
-				2305 Pleasant View Rd
-				Middleton  WI  53562
-				US
-
-34-1F-E4   (hex)		ARRIS Group, Inc.
-341FE4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-24-F4   (hex)		Kaminario, Ltd.
-0024F4     (base 16)		Kaminario, Ltd.
-				Yatam Industrial Park
-				Yokneam  ISRAEL  20692
-				IL
-
-00-1A-29   (hex)		Johnson Outdoors Marine Electronics d/b/a Minnkota
-001A29     (base 16)		Johnson Outdoors Marine Electronics d/b/a Minnkota
-				1220 Old Alpharetta Rd
-				Alpharetta  GA  30041
-				US
-
-00-90-AE   (hex)		ITALTEL S.p.A/RF-UP-I
-0090AE     (base 16)		ITALTEL S.p.A/RF-UP-I
-				LOCALITA' BOSCHETTO
-				67100 L'AQUILA    na
-				IT
-
-00-17-7D   (hex)		IDT Technology Limited
-00177D     (base 16)		IDT Technology Limited
-				Block C, 9/F, Kaiser Estate, Phase I
-				na    na
-				HK
-
-00-A0-45   (hex)		PHOENIX CONTACT Electronics GmbH
-00A045     (base 16)		PHOENIX CONTACT Electronics GmbH
-				POSTFACH 1341
-				lower saxony    D-31812
-				DE
-
-00-23-78   (hex)		GN Netcom A/S
-002378     (base 16)		GN Netcom A/S
-				Lautrupbjerg 7
-				Ballerup    DK - 2750
-				DK
-
-50-C9-71   (hex)		GN Netcom A/S
-50C971     (base 16)		GN Netcom A/S
-				Lautrupbjerg 7
-				Ballerup    DK - 2750
-				DK
-
-F0-40-7B   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-F0407B     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-94-88-5E   (hex)		Surfilter Network Technology Co., Ltd. 
-94885E     (base 16)		Surfilter Network Technology Co., Ltd. 
-				6/f,2 Building,Kejizhong Rd2,Software Park,High-Tech District,Nanshan,Shenzhen,China
-				Shenzhen  Guangdong  518000
-				CN
-
-C8-25-E1   (hex)		Lemobile Information Technology (Beijing) Co., Ltd
-C825E1     (base 16)		Lemobile Information Technology (Beijing) Co., Ltd
-				WENHUAYING NORTH (No.1, LINKONG 2nd St), GAOLIYING, SHUNYI DISTRICT, BEIJING
-				Beijing  Beijing  101300
-				CN
-
-94-50-89   (hex)		SimonsVoss Technologies GmbH
-945089     (base 16)		SimonsVoss Technologies GmbH
-				Feringastr. 4
-				Unterfoehring  Bavaria  85774
-				DE
-
-04-2A-E2   (hex)		Cisco Systems, Inc
-042AE2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-B6-F5   (hex)		IEEE Registration Authority
-E0B6F5     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-90-FA   (hex)		Emulex Corporation
-0090FA     (base 16)		Emulex Corporation
-				3333 Susan Street
-				Costa Mesa  CA  92626
-				US
-
-00-E0-D5   (hex)		Emulex Corporation
-00E0D5     (base 16)		Emulex Corporation
-				3333 Susan Street
-				Costa Mesa  CA  92626
-				US
-
-00-10-35   (hex)		Elitegroup Computer Systems Co.,Ltd.
-001035     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				6F, NO. 88, SEC. 6
-				Shih Lin  TAIPEI  00000
-				TW
-
-00-0A-E6   (hex)		Elitegroup Computer Systems Co.,Ltd.
-000AE6     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No.22, Alley 38, Lane 91, Sec. 1, Nei Hu
-				Taipei    114
-				TW
-
-74-27-EA   (hex)		Elitegroup Computer Systems Co.,Ltd.
-7427EA     (base 16)		Elitegroup Computer Systems Co.,Ltd.
-				No. 239, Sec. 2, Ti Ding Blvd., 
-				Taipei    11493
-				US
-
-64-99-68   (hex)		Elentec
-649968     (base 16)		Elentec
-				401-13 Chunggye-Ri
-				Dongtan-Myun  Kyunggi  445-811
-				KR
-
-00-40-9C   (hex)		TRANSWARE
-00409C     (base 16)		TRANSWARE
-				21, RUE DU 8 MAI 1945
-				    
-				FR
-
-B0-1B-D2   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-B01BD2     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
-				,Le Shi Building, No.105 Yaojiayuan Road,Chaoyang District,Beijing,China
-				beijing  beijing  100025
-				CN
-
-54-48-9C   (hex)		CDOUBLES ELECTRONICS CO. LTD.
-54489C     (base 16)		CDOUBLES ELECTRONICS CO. LTD.
-				11F.-6, No. 7,Sec. 3, New Taipei Blvd., Xinzhuang Dist.
-				New Taipei City    24250
-				TW
-
-E4-A1-E6   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-E4A1E6     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-84-00-2D   (hex)		PEGATRON CORPORATION
-84002D     (base 16)		PEGATRON CORPORATION
-				No. 76, Ligong St., Beitou,
-				Taipei    112
-				TW
-
-40-82-56   (hex)		Continental Automotive GmbH
-408256     (base 16)		Continental Automotive GmbH
-				VD=-Strasse 1
-				Babenhausen  Garmany  64832
-				DE
-
-5C-C7-D7   (hex)		AZROAD TECHNOLOGY COMPANY LIMITED
-5CC7D7     (base 16)		AZROAD TECHNOLOGY COMPANY LIMITED
-				Block B2, No.14 Jian'an rd. Shajing, Bao'an District,
-				Shenzhen    518104
-				CN
-
-98-6B-3D   (hex)		ARRIS Group, Inc.
-986B3D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E0-07-1B   (hex)		Hewlett Packard Enterprise
-E0071B     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-1C-AB-C0   (hex)		Hitron Technologies. Inc
-1CABC0     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-1C-3A-DE   (hex)		Samsung Electronics Co.,Ltd
-1C3ADE     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-00-23-60   (hex)		Lookit Technology Co., Ltd
-002360     (base 16)		Lookit Technology Co., Ltd
-				FL 8 Seashore Mansion
-				Shenzhen  Guangdong  518100
-				CN
-
-84-FE-DC   (hex)		Borqs Beijing Ltd.
-84FEDC     (base 16)		Borqs Beijing Ltd.
-				Tower A, Building B23, Universal Business Park, No.10 Jiuxianqiao Road
-				Chaoyang District  Beijing  100015
-				CN
-
-60-83-34   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-608334     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-7E-66   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E47E66     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-DB-DA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94DBDA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-D9-E4   (hex)		BRILLIANTTS CO., LTD
-54D9E4     (base 16)		BRILLIANTTS CO., LTD
-				Daewangpangyo-ro
-				Seongnam-si    13494
-				KR
-
-F4-62-D0   (hex)		Not for Radio, LLC
-F462D0     (base 16)		Not for Radio, LLC
-				425 Front St
-				Lititz  PA  17543
-				US
-
-98-DE-D0   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-98DED0     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-50-89-65   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-508965     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-00-5B-A1   (hex)		shanghai huayuan chuangxin software CO., LTD.
-005BA1     (base 16)		shanghai huayuan chuangxin software CO., LTD.
-				Room D13 , Floor 13,Lane 1006, Jinshajiang road,putuo District
-				Shanghai  Shanghai  200333
-				CN
-
-58-D6-7A   (hex)		TCPlink
-58D67A     (base 16)		TCPlink
-				Daerungpost tower 1-cha 1720, 288 digital-ro,Guro-gu
-				seoul    08390
-				KR
-
-98-07-2D   (hex)		Texas Instruments
-98072D     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F0-C7-7F   (hex)		Texas Instruments
-F0C77F     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-00-0A-C2   (hex)		Wuhan FiberHome Digital Technology Co.,Ltd.
-000AC2     (base 16)		Wuhan FiberHome Digital Technology Co.,Ltd.
-				No.88 YouKeyuan Road,Hongshan District,W
-				Wuhan  Hubei  430074
-				CN
-
-10-DA-43   (hex)		NETGEAR
-10DA43     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-B8-05-AB   (hex)		zte corporation
-B805AB     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-78-96-82   (hex)		zte corporation
-789682     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D4-67-E7   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D467E7     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-E4-2F-26   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-E42F26     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-04-C1-B9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-04C1B9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan City  Hubei Province  430074
-				CN
-
-C4-BE-D4   (hex)		Avaya Inc
-C4BED4     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-D0-17-C2   (hex)		ASUSTek COMPUTER INC.
-D017C2     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-34-99-71   (hex)		Quanta Storage Inc.
-349971     (base 16)		Quanta Storage Inc.
-				3F. No.188, Wenhua 2nd Rd
-				Taoyuan City  Guishan District  33383
-				TW
-
-9C-52-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-9C52F8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-13-DB   (hex)		Juniper Networks
-EC13DB     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-5C-F2-86   (hex)		IEEE Registration Authority
-5CF286     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-E8-FD-72   (hex)		SHANGHAI LINGUO TECHNOLOGY CO., LTD.
-E8FD72     (base 16)		SHANGHAI LINGUO TECHNOLOGY CO., LTD.
-				No.2,277 Lane,Yongdeng Road,Putuo District,Shanghai,China
-				Shanghai  Shanghai  200000
-				CN
-
-98-BB-1E   (hex)		BYD Precision Manufacture Company Ltd.
-98BB1E     (base 16)		BYD Precision Manufacture Company Ltd.
-				7/Floor, Building 5#, No3000 LongDong Avenue, Pudong District
-				Shanghai  Shanghai  201203
-				CN
-
-AC-5F-3E   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-AC5F3E     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-54-6D-52   (hex)		TOPVIEW OPTRONICS CORP.
-546D52     (base 16)		TOPVIEW OPTRONICS CORP.
-				No.8, Wuquan Rd., New Taipei Industrial Park, Wugu District
-				 New Taipei City     24886
-				TW
-
-04-C1-03   (hex)		Clover Network, Inc.
-04C103     (base 16)		Clover Network, Inc.
-				415 N Mathilda Ave
-				Sunnyvale  CA  94085
-				US
-
-28-0C-28   (hex)		Unigen DataStorage Corporation
-280C28     (base 16)		Unigen DataStorage Corporation
-				11F.-6, No.251, Fuxing 1st St., Zhubei City, Hsinchu County 302, Taiwan (R.O.C.)
-				Zhubei City    30271
-				TW
-
-A4-BF-01   (hex)		Intel Corporate
-A4BF01     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-20-8B-37   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-208B37     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-08-BE-77   (hex)		Green Electronics
-08BE77     (base 16)		Green Electronics
-				47801 Fremont Blvd
-				Fremont  CA  94538
-				US
-
-50-9E-A7   (hex)		Samsung Electronics Co.,Ltd
-509EA7     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-81-95   (hex)		Samsung Electronics Co.,Ltd
-A88195     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-AD-D2   (hex)		Samsung Electronics Co.,Ltd
-88ADD2     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-CC-FC   (hex)		Cisco Systems, Inc
-00CCFC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-C5   (hex)		Sony Interactive Entertainment Inc.
-0019C5     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-00-13-15   (hex)		Sony Interactive Entertainment Inc.
-001315     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-1C-23-4F   (hex)		EDMI  Europe Ltd
-1C234F     (base 16)		EDMI  Europe Ltd
-				The Grainger  Suite, Dobson House
-				Newcastle upon Tyne    NE3 3PF
-				GB
-
-A4-44-D1   (hex)		 Wingtech Group (HongKong）Limited
-A444D1     (base 16)		 Wingtech Group (HongKong）Limited
-				 FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
-				Hong Kong  Hong Kong  999077
-				HK
-
-00-6C-FD   (hex)		Sichuan Changhong Electric Ltd.
-006CFD     (base 16)		Sichuan Changhong Electric Ltd.
-				No.35,East MianXin Road,MianYang,Sichaun,China.
-				MianYang  SiChuan  PRC 621000
-				CN
-
-54-5A-A6   (hex)		Espressif Inc.
-545AA6     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-FC-1A-11   (hex)		vivo Mobile Communication Co., Ltd.
-FC1A11     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-00-1A-57   (hex)		Matrix Design Group, LLC
-001A57     (base 16)		Matrix Design Group, LLC
-				5741 Prospect Dr.
-				Newburgh  IN  47630
-				US
-
-A0-C5-89   (hex)		Intel Corporate
-A0C589     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-1E-1E   (hex)		Honeywell Life Safety
-001E1E     (base 16)		Honeywell Life Safety
-				12 Clintonville Road
-				Northford  CT  0422
-				US
-
-00-23-40   (hex)		MiXTelematics
-002340     (base 16)		MiXTelematics
-				Blaauwklip Office Park 2
-				Stellenbosch  Western Cape  7600
-				ZA
-
-B4-8B-19   (hex)		Apple, Inc.
-B48B19     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-38-FD-FE   (hex)		IEEE Registration Authority
-38FDFE     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-2C-09-CB   (hex)		COBS AB
-2C09CB     (base 16)		COBS AB
-				Box 9242
-				Goteborg    40095
-				SE
-
-BC-EC-5D   (hex)		Apple, Inc.
-BCEC5D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-A0-2B   (hex)		Apple, Inc.
-28A02B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-44-81   (hex)		Nokia Corporation
-A84481     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  NA  24101
-				FI
-
-88-44-F6   (hex)		Nokia Corporation
-8844F6     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo  NA  24101
-				FI
-
-F4-4D-17   (hex)		GOLDCARD HIGH-TECH CO.,LTD.
-F44D17     (base 16)		GOLDCARD HIGH-TECH CO.,LTD.
-				No.158, Jinqiao Stree,Economic&Technological Development Area,
-				Hangzhou   Zhejiang  310018
-				CN
-
-38-B8-EB   (hex)		IEEE Registration Authority
-38B8EB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-98-97-D1   (hex)		MitraStar Technology Corp.
-9897D1     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-B8-32-41   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
-B83241     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
-				HUST Industry Park, East-Lake Development Zone
-				Wuhan  Hubei  430223
-				CN
-
-00-60-DC   (hex)		NEC Magnus Communications,Ltd.
-0060DC     (base 16)		NEC Magnus Communications,Ltd.
-				18 Nihon-odori,Naka-ku
-				Yokohama, Kanagawa    231-0021
-				JP
-
-90-72-82   (hex)		Sagemcom Broadband SAS
-907282     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-00-1C-35   (hex)		Nokia Danmark A/S
-001C35     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1C-9A   (hex)		Nokia Danmark A/S
-001C9A     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1C-D6   (hex)		Nokia Danmark A/S
-001CD6     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1C-D4   (hex)		Nokia Danmark A/S
-001CD4     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1D-98   (hex)		Nokia Danmark A/S
-001D98     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1D-E9   (hex)		Nokia Danmark A/S
-001DE9     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1E-3A   (hex)		Nokia Danmark A/S
-001E3A     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-25-48   (hex)		Nokia Danmark A/S
-002548     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-22-FC   (hex)		Nokia Danmark A/S
-0022FC     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-22-FD   (hex)		Nokia Danmark A/S
-0022FD     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-21-AA   (hex)		Nokia Danmark A/S
-0021AA     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-1D-6E   (hex)		Nokia Danmark A/S
-001D6E     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen  V  DK-1790
-				DK
-
-00-23-B4   (hex)		Nokia Danmark A/S
-0023B4     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-13-70   (hex)		Nokia Danmark A/S
-001370     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-9C-18-74   (hex)		Nokia Danmark A/S
-9C1874     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790V
-				DK
-
-00-1B-AF   (hex)		Nokia Danmark A/S
-001BAF     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-C8-D1-0B   (hex)		Nokia Corporation
-C8D10B     (base 16)		Nokia Corporation
-				Joensuunkatu 7
-				Salo    24101
-				FI
-
-5C-C6-D0   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-5CC6D0     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1A-9A   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-001A9A     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-CC-6D-A0   (hex)		Roku, Inc.
-CC6DA0     (base 16)		Roku, Inc.
-				12980 Saratoga Ave.
-				Saratoga  CA  95070
-				US
-
-00-16-E4   (hex)		VANGUARD SECURITY ENGINEERING CORP.
-0016E4     (base 16)		VANGUARD SECURITY ENGINEERING CORP.
-				3, LANE 32, KSO CHING RD.
-				YANGMEI  TAOYUAN  326
-				US
-
-3C-89-70   (hex)		Neosfar
-3C8970     (base 16)		Neosfar
-				101 W. Broadway, Suite 300
-				San Diego  CA  92101
-				US
-
-00-17-42   (hex)		FUJITSU LIMITED
-001742     (base 16)		FUJITSU LIMITED
-				403, Kosugi-cho 1-chome, Nakahara-ku
-				Kawasaki  Kanagawa  211-0063
-				JP
-
-00-19-99   (hex)		Fujitsu Technology Solutions GmbH
-001999     (base 16)		Fujitsu Technology Solutions GmbH
-				Buergermeister-Ulrich-Strasse 100
-				Augsburg    86199
-				DE
-
-00-5A-39   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-005A39     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-A0-89-E4   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-A089E4     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
-				7F,Block A,Skyworth Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-78-CA-83   (hex)		IEEE Registration Authority
-78CA83     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-0C-11-67   (hex)		Cisco Systems, Inc
-0C1167     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-EA-E8   (hex)		ARRIS Group, Inc.
-74EAE8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-F8-8E-85   (hex)		Comtrend Corporation
-F88E85     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-02-CF-1C   (hex)		Communication Machinery Corporation
-02CF1C     (base 16)		Communication Machinery Corporation
-				1226 ANACAPA
-				SANTA BARBARA  CA  93101
-				US
-
-00-90-F5   (hex)		CLEVO CO.
-0090F5     (base 16)		CLEVO CO.
-				35, WU-GON 6TH ROAD
-				TAIPEI HSIEN    12345
-				TW
-
-00-30-FF   (hex)		DataFab Systems Inc.
-0030FF     (base 16)		DataFab Systems Inc.
-				ROOM #1910, 19F, NO. 333
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-0F-F6   (hex)		DARFON LIGHTING CORP
-000FF6     (base 16)		DARFON LIGHTING CORP
-				31, Lane17, Zihciang N. Road
-				Taoyuan    333
-				TW
-
-00-21-00   (hex)		Gemtek Technology Co., Ltd.
-002100     (base 16)		Gemtek Technology Co., Ltd.
-				No.1 Jen Ai Road, Hsinchu Industrial Park,
-				Hukou,  Hsinchu  303
-				TW
-
-50-F5-20   (hex)		Samsung Electronics Co.,Ltd
-50F520     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-B3-10   (hex)		Samsung Electronics Co.,Ltd
-64B310     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-EB-D3   (hex)		Samsung Electronics Co.,Ltd
-A4EBD3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C8-10-73   (hex)		CENTURY OPTICOMM CO.,LTD
-C81073     (base 16)		CENTURY OPTICOMM CO.,LTD
-				WEITUO COMMUNITY,HECHUAN INDUSTRIAL PARK, HECHUAN DISTRICT,CHONGQING,CHINA
-				Chongqing    401121
-				CN
-
-34-37-59   (hex)		zte corporation
-343759     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-FC-2F-40   (hex)		Calxeda, Inc.
-FC2F40     (base 16)		Calxeda, Inc.
-				7000 North Mopac Expressway
-				Austin  TX  78731
-				US
-
-BC-62-0E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BC620E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-74-A5-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-74A528     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-5C-F6-DC   (hex)		Samsung Electronics Co.,Ltd
-5CF6DC     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-00-26-E4   (hex)		Canal +
-0026E4     (base 16)		Canal +
-				48 quai du point du jour
-				Boulogne-Billancourt    92659
-				FR
-
-00-01-17   (hex)		Canal +
-000117     (base 16)		Canal +
-				23 Rue LeBlanc
-				75906 Paris Cedex 15    12345
-				FR
-
-E0-1D-3B   (hex)		Cambridge Industries(Group) Co.,Ltd.
-E01D3B     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				22 Floor, Qilai Tower, #889 Yishan Road
-				Shanghai  Shanghai  200233
-				CN
-
-70-C7-6F   (hex)		INNO S
-70C76F     (base 16)		INNO S
-				215beon-gil, 119
-				Guri-si  Gyeonggi-do  471-060
-				KR
-
-38-19-2F   (hex)		Nokia Corporation
-38192F     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-B8-C6-8E   (hex)		Samsung Electronics Co.,Ltd
-B8C68E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-04-FE-31   (hex)		Samsung Electronics Co.,Ltd
-04FE31     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-4C-BC-A5   (hex)		Samsung Electronics Co.,Ltd
-4CBCA5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-D8-31-CF   (hex)		Samsung Electronics Co.,Ltd
-D831CF     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-83-31   (hex)		Samsung Electronics Co.,Ltd
-188331     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-9C-65-B0   (hex)		Samsung Electronics Co.,Ltd
-9C65B0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-84-55-A5   (hex)		Samsung Electronics Co.,Ltd
-8455A5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-7C-01   (hex)		Samsung Electronics Co.,Ltd
-A87C01     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-D0-9C   (hex)		Samsung Electronics Co.,Ltd
-B0D09C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-50-C8-E5   (hex)		Samsung Electronics Co.,Ltd
-50C8E5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1,Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-00-20-D4   (hex)		Cabletron Systems, Inc.
-0020D4     (base 16)		Cabletron Systems, Inc.
-				35 INDUSTRIAL WAY
-				ROHESTER  NH  03866-5005
-				US
-
-00-E0-3A   (hex)		Cabletron Systems, Inc.
-00E03A     (base 16)		Cabletron Systems, Inc.
-				35 INDUSTRIAL WAY - BLDG. #36
-				ROCHESTER  NH  03867
-				US
-
-00-10-E7   (hex)		Breezecom, Ltd.
-0010E7     (base 16)		Breezecom, Ltd.
-				PO Box 13139
-				Tel-Aviv    12345
-				IL
-
-94-92-BC   (hex)		SYNTECH(HK) TECHNOLOGY LIMITED
-9492BC     (base 16)		SYNTECH(HK) TECHNOLOGY LIMITED
-				Unit No.1,12/F.,Perfect Industrial Building,31 Tai Yau Street, San Po Kong, Kowloon, Hong Kong 999077
-				Kowloon    999077
-				HK
-
-00-1D-19   (hex)		Arcadyan Technology Corporation
-001D19     (base 16)		Arcadyan Technology Corporation
-				4F., No. 9 , Park Avenue II,
-				Hsinchu    300
-				TW
-
-00-12-BF   (hex)		Arcadyan Technology Corporation
-0012BF     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II
-				Hsinchu    300
-				TW
-
-50-7E-5D   (hex)		Arcadyan Technology Corporation
-507E5D     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-7C-4F-B5   (hex)		Arcadyan Technology Corporation
-7C4FB5     (base 16)		Arcadyan Technology Corporation
-				4F, No. 9, Park Avenue II ,
-				Hsinchu    300
-				TW
-
-00-22-3F   (hex)		NETGEAR
-00223F     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-0F-B5   (hex)		NETGEAR
-000FB5     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-09-5B   (hex)		NETGEAR
-00095B     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-1A-4F   (hex)		AVM GmbH
-001A4F     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin    10559
-				DE
-
-00-1C-4A   (hex)		AVM GmbH
-001C4A     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin    10559
-				DE
-
-00-15-0C   (hex)		AVM GmbH
-00150C     (base 16)		AVM GmbH
-				Alt-Moabit 95
-				Berlin    10559
-				DE
-
-00-26-FF   (hex)		BlackBerry RTS
-0026FF     (base 16)		BlackBerry RTS
-				440 Phillip Street
-				Waterloo  Ontario  N2L 5W9
-				CA
-
-A4-E4-B8   (hex)		BlackBerry RTS
-A4E4B8     (base 16)		BlackBerry RTS
-				295 Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-00-30-67   (hex)		BIOSTAR Microtech Int'l Corp.
-003067     (base 16)		BIOSTAR Microtech Int'l Corp.
-				2FL. NO. 108-2 MIN CHUAN ROAD
-				HSIN TIEN CITY, TAIPEI HSIEN    12345
-				TW
-
-F4-0B-93   (hex)		BlackBerry RTS
-F40B93     (base 16)		BlackBerry RTS
-				451 Phillip Street
-				Waterloo  ON  N2L 3X2
-				CA
-
-1C-69-A5   (hex)		BlackBerry RTS
-1C69A5     (base 16)		BlackBerry RTS
-				451 Phillip Street
-				Waterloo  ON  N2L 3X2
-				CA
-
-94-EB-CD   (hex)		BlackBerry RTS
-94EBCD     (base 16)		BlackBerry RTS
-				295 Phillip Street
-				Waterloo  Ontario  N2L3W8
-				CA
-
-28-C6-8E   (hex)		NETGEAR
-28C68E     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-04-A1-51   (hex)		NETGEAR
-04A151     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-F8-73-94   (hex)		NETGEAR
-F87394     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-20-4E-7F   (hex)		NETGEAR
-204E7F     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-C0-3F-0E   (hex)		NETGEAR
-C03F0E     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-26-F2   (hex)		NETGEAR
-0026F2     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-13-8F   (hex)		Asiarock Technology Limited
-00138F     (base 16)		Asiarock Technology Limited
-				P.O. Box957, Offshore Incorporations Centre
-				Road Town  Tortola  12345
-				VG
-
-80-37-73   (hex)		NETGEAR
-803773     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-A4-2B-8C   (hex)		NETGEAR
-A42B8C     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-CC-7D-37   (hex)		ARRIS Group, Inc.
-CC7D37     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A4-7A-A4   (hex)		ARRIS Group, Inc.
-A47AA4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-17-00   (hex)		ARRIS Group, Inc.
-001700     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-16-B5   (hex)		ARRIS Group, Inc.
-0016B5     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-A8   (hex)		ARRIS Group, Inc.
-0015A8     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-15-9A   (hex)		ARRIS Group, Inc.
-00159A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-11-80   (hex)		ARRIS Group, Inc.
-001180     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-0B-06   (hex)		ARRIS Group, Inc.
-000B06     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-D0-88   (hex)		ARRIS Group, Inc.
-00D088     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-12-8A   (hex)		ARRIS Group, Inc.
-00128A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-75   (hex)		ARRIS Group, Inc.
-002375     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-A3   (hex)		ARRIS Group, Inc.
-0023A3     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1A-DB   (hex)		ARRIS Group, Inc.
-001ADB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1F-7E   (hex)		ARRIS Group, Inc.
-001F7E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-11-AE   (hex)		ARRIS Group, Inc.
-0011AE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-94-CC-B9   (hex)		ARRIS Group, Inc.
-94CCB9     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-3C-43-8E   (hex)		ARRIS Group, Inc.
-3C438E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-24-C1   (hex)		ARRIS Group, Inc.
-0024C1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-25-F2   (hex)		ARRIS Group, Inc.
-0025F2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-25-F1   (hex)		ARRIS Group, Inc.
-0025F1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-14-04   (hex)		ARRIS Group, Inc.
-001404     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1A-AD   (hex)		ARRIS Group, Inc.
-001AAD     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-26-BA   (hex)		ARRIS Group, Inc.
-0026BA     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-23-0B   (hex)		ARRIS Group, Inc.
-00230B     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-74-E7-C6   (hex)		ARRIS Group, Inc.
-74E7C6     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1C-12   (hex)		ARRIS Group, Inc.
-001C12     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-5C-33-8E   (hex)		Alpha Networks Inc.
-5C338E     (base 16)		Alpha Networks Inc.
-				No.8 Li-shing Seventh Road,Science-based
-				Hsinchu    300
-				TW
-
-00-09-41   (hex)		Allied Telesis R&D Center K.K.
-000941     (base 16)		Allied Telesis R&D Center K.K.
-				Technical Center/No.2 TOC Bldg.
-				Shinagawa-ku    141-0031
-				US
-
-28-E3-47   (hex)		Liteon Technology Corporation
-28E347     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-44-6D-57   (hex)		Liteon Technology Corporation
-446D57     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-9C-B7-0D   (hex)		Liteon Technology Corporation
-9CB70D     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-68-A3-C4   (hex)		Liteon Technology Corporation
-68A3C4     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-70-F1-A1   (hex)		Liteon Technology Corporation
-70F1A1     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
-				TaiPei  TaiWan  23585
-				TW
-
-00-D9-D1   (hex)		Sony Interactive Entertainment Inc.
-00D9D1     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-B0-05-94   (hex)		Liteon Technology Corporation
-B00594     (base 16)		Liteon Technology Corporation
-				4F,90,Chien 1 Road,ChungHo
-				New Taipei City  Taipei  23585
-				TW
-
-EC-08-6B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-EC086B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-94-A1-A2   (hex)		AMPAK Technology, Inc.
-94A1A2     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road
-				Hukou  Hsinchu  30352
-				TW
-
-00-01-4A   (hex)		Sony Corporation
-00014A     (base 16)		Sony Corporation
-				Gotenyama Tec, 5-1-2 Kitashinagawa
-				Tokyo    141-0001
-				JP
-
-98-3B-16   (hex)		AMPAK Technology, Inc.
-983B16     (base 16)		AMPAK Technology, Inc.
-				No.1,Jen Ai Road
-				Hsinchu    30352
-				TW
-
-40-95-58   (hex)		Aisino Corporation
-409558     (base 16)		Aisino Corporation
-				No.18A, Xingshikou Road,
-				Beijing    100195
-				CN
-
-18-28-61   (hex)		AirTies Wireless Networks
-182861     (base 16)		AirTies Wireless Networks
-				Gulbahar Mahallesi, Avni Diligil Sokak
-				ISTANBUL  ISTANBUL  34394
-				TR
-
-6C-71-D9   (hex)		AzureWave Technology Inc.
-6C71D9     (base 16)		AzureWave Technology Inc.
-				9F.,No.92,Baozhong Rd
-				Xindian District  New Taipei City  231
-				TW
-
-D0-E7-82   (hex)		AzureWave Technology Inc.
-D0E782     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd
-				. New Taipei City  Taiwan  231
-				TW
-
-6C-AD-F8   (hex)		AzureWave Technology Inc.
-6CADF8     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd
-				. New Taipei City  Taiwan  231
-				TW
-
-A8-1D-16   (hex)		AzureWave Technology Inc.
-A81D16     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-34-C3-D2   (hex)		FN-LINK TECHNOLOGY LIMITED
-34C3D2     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-54-F6-C5   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-54F6C5     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building, Star-net Science Plaza, Juyuanzhou,
-				FUZHOU  FUJIAN  350002
-				CN
-
-D0-D4-12   (hex)		ADB Broadband Italia
-D0D412     (base 16)		ADB Broadband Italia
-				VIALE SARCA 336
-				MILANO    20126
-				IT
-
-00-26-B8   (hex)		Actiontec Electronics, Inc
-0026B8     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-00-26-FC   (hex)		AcSiP Technology Corp.
-0026FC     (base 16)		AcSiP Technology Corp.
-				3F., No.22, Dalin Rd.,
-				Taoyuan City,  Taoyuan County  330
-				TW
-
-00-15-AF   (hex)		AzureWave Technology Inc.
-0015AF     (base 16)		AzureWave Technology Inc.
-				8F., No.94, Baozhong Rd., Xindian
-				Taipei    231
-				TW
-
-74-F0-6D   (hex)		AzureWave Technology Inc.
-74F06D     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd., Xindian
-				Taipei    231
-				TW
-
-44-D8-32   (hex)		AzureWave Technology Inc.
-44D832     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd., Xindian
-				Taipei    231
-				TW
-
-E0-B9-A5   (hex)		AzureWave Technology Inc.
-E0B9A5     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baoshong Rd.
-				Xindian City, Taipei County    231
-				TW
-
-78-18-81   (hex)		AzureWave Technology Inc.
-781881     (base 16)		AzureWave Technology Inc.
-				8F., No.94 Baozhong Rd.,
-				Xindian, Taipei    23144
-				TW
-
-B0-46-FC   (hex)		MitraStar Technology Corp.
-B046FC     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-E0-41-36   (hex)		MitraStar Technology Corp.
-E04136     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu  Taiwan  300
-				TW
-
-00-1C-A2   (hex)		ADB Broadband Italia
-001CA2     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-00-22-33   (hex)		ADB Broadband Italia
-002233     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222
-				MILANO    20126
-				IT
-
-30-39-F2   (hex)		ADB Broadband Italia
-3039F2     (base 16)		ADB Broadband Italia
-				VIALE SARCA 222 
-				MILANO     20126 
-				IT
-
-00-17-C2   (hex)		ADB Broadband Italia
-0017C2     (base 16)		ADB Broadband Italia
-				v.Sarca 222
-				Milano    20126
-				IT
-
-68-9C-5E   (hex)		AcSiP Technology Corp.
-689C5E     (base 16)		AcSiP Technology Corp.
-				3F., No.22, Dalin Rd.
-				Taoyuan  Taoyuan County  33067
-				TW
-
-9C-0E-4A   (hex)		Shenzhen Vastking Electronic Co.,Ltd.
-9C0E4A     (base 16)		Shenzhen Vastking Electronic Co.,Ltd.
-				2/F Building 6,ZhengZhong Industrial Park,Qiaotou Community,Fuyong,Baoan,ShenZhen China
-				Shenzhen  Guangdong  518103
-				CN
-
-A8-58-40   (hex)		Cambridge Industries(Group) Co.,Ltd.
-A85840     (base 16)		Cambridge Industries(Group) Co.,Ltd.
-				5/F,Building 8, 2388 ChenHang Road, MinHang District
-				shanghai    201114
-				CN
-
-A0-D3-7A   (hex)		Intel Corporate
-A0D37A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-88-96-F2   (hex)		Valeo Schalter und Sensoren GmbH
-8896F2     (base 16)		Valeo Schalter und Sensoren GmbH
-				Laiernstrasse 12
-				Bietigheim-Bissingen  Germany  74321
-				DE
-
-00-10-73   (hex)		TECHNOBOX, INC.
-001073     (base 16)		TECHNOBOX, INC.
-				140 Mount Holly Bypass
-				Lumberton  NJ  08048-1114
-				US
-
-20-93-4D   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-20934D     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
-				19-22# Building,,Star-net Science Plaza
-				Fuzhou  Fujian  350002
-				CN
-
-00-90-27   (hex)		Intel Corporation
-009027     (base 16)		Intel Corporation
-				HF1-06
-				HILLSBORO  OR  97124
-				US
-
-C4-85-08   (hex)		Intel Corporate
-C48508     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-68-05-CA   (hex)		Intel Corporate
-6805CA     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-24-77-03   (hex)		Intel Corporate
-247703     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-74-E5-0B   (hex)		Intel Corporate
-74E50B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-B8-03-05   (hex)		Intel Corporate
-B80305     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-A0-C9   (hex)		Intel Corporation
-00A0C9     (base 16)		Intel Corporation
-				5200 NE ELAM YOUNG PARKWAY
-				HILLSBORO  OR  97124
-				US
-
-14-18-77   (hex)		Dell Inc.
-141877     (base 16)		Dell Inc.
-				One Dell way
-				Round Rock    78682
-				US
-
-E0-97-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E09796     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen  Guangdong  518129
-				CN
-
-1C-40-24   (hex)		Dell Inc.
-1C4024     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-18-FB-7B   (hex)		Dell Inc.
-18FB7B     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-F8-B1-56   (hex)		Dell Inc.
-F8B156     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-14-1A-A3   (hex)		Motorola Mobility LLC, a Lenovo Company
-141AA3     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 Merchandise Mart Plaza, Suite 1800
-				Chicago  IL  60654
-				US
-
-34-07-FB   (hex)		Ericsson AB
-3407FB     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-A4-A1-C2   (hex)		Ericsson AB
-A4A1C2     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-00-06-5B   (hex)		Dell Inc.
-00065B     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-84-2B-2B   (hex)		Dell Inc.
-842B2B     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock     78682
-				US
-
-F0-4D-A2   (hex)		Dell Inc.
-F04DA2     (base 16)		Dell Inc.
-				One Dell Way, MS RR5-45
-				Round Rock     78682
-				US
-
-E0-DB-55   (hex)		Dell Inc.
-E0DB55     (base 16)		Dell Inc.
-				One Dell way
-				Round Rock    78682
-				US
-
-00-0F-1F   (hex)		Dell Inc.
-000F1F     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-24-B6-FD   (hex)		Dell Inc.
-24B6FD     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-74-E6-E2   (hex)		Dell Inc.
-74E6E2     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-34-E6-D7   (hex)		Dell Inc.
-34E6D7     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-00-1E-C9   (hex)		Dell Inc.
-001EC9     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-00-21-70   (hex)		Dell Inc.
-002170     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-00-21-9B   (hex)		Dell Inc.
-00219B     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-B8-AC-6F   (hex)		Dell Inc.
-B8AC6F     (base 16)		Dell Inc.
-				One Dell Way,  MS RR5-45
-				Round Rock    78682
-				US
-
-8C-A9-82   (hex)		Intel Corporate
-8CA982     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-BC-77-37   (hex)		Intel Corporate
-BC7737     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-14-30-C6   (hex)		Motorola Mobility LLC, a Lenovo Company
-1430C6     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				600 North US Highway 45
-				Libertyville  IL  60048
-				US
-
-D8-FC-93   (hex)		Intel Corporate
-D8FC93     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-D4-AE-52   (hex)		Dell Inc.
-D4AE52     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-28-16-2E   (hex)		2Wire Inc
-28162E     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose    95131
-				US
-
-F8-18-97   (hex)		2Wire Inc
-F81897     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose    95131
-				US
-
-94-C1-50   (hex)		2Wire Inc
-94C150     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-5C-F8-21   (hex)		Texas Instruments
-5CF821     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-88-07-4B   (hex)		LG Electronics (Mobile Communications)
-88074B     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-00-0D-72   (hex)		2Wire Inc
-000D72     (base 16)		2Wire Inc
-				1704 Automation Parkway
-				San Jose  CA  95131
-				US
-
-00-12-88   (hex)		2Wire Inc
-001288     (base 16)		2Wire Inc
-				1704 Automation Parkway
-				San Jose  CA  94538
-				US
-
-00-78-9E   (hex)		Sagemcom Broadband SAS
-00789E     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-E8-BE-81   (hex)		Sagemcom Broadband SAS
-E8BE81     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				Rueil Malmaison Cedex  Hauts de Seine  92848
-				FR
-
-68-15-90   (hex)		Sagemcom Broadband SAS
-681590     (base 16)		Sagemcom Broadband SAS
-				250 ROUTE DE L'EMPEREUR
-				RUEIL MALMAISON CEDEX  Choisissez l'état / la province  92848
-				FR
-
-F4-EB-38   (hex)		Sagemcom Broadband SAS
-F4EB38     (base 16)		Sagemcom Broadband SAS
-				15 Avenue Ambroise  Croizat
-				DOMERAT  Allier  03410
-				FR
-
-00-1B-BF   (hex)		Sagemcom Broadband SAS
-001BBF     (base 16)		Sagemcom Broadband SAS
-				14 Rue Paul Dautier
-				VÃƒÂ©lizy    78457
-				FR
-
-00-25-69   (hex)		Sagemcom Broadband SAS
-002569     (base 16)		Sagemcom Broadband SAS
-				Le Ponnant de Paris
-				CEDEX  Paris  75512
-				FR
-
-14-1F-BA   (hex)		IEEE Registration Authority
-141FBA     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-80-7B-85   (hex)		IEEE Registration Authority
-807B85     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-CC-1B-E0   (hex)		IEEE Registration Authority
-CC1BE0     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-F4-0E-11   (hex)		IEEE Registration Authority
-F40E11     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-10-F6-81   (hex)		vivo Mobile Communication Co., Ltd.
-10F681     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-00-21-7C   (hex)		2Wire Inc
-00217C     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-00-1F-B3   (hex)		2Wire Inc
-001FB3     (base 16)		2Wire Inc
-				1764 Automation Parkway
-				San Jose  CA  95131
-				US
-
-00-22-75   (hex)		Belkin International Inc.
-002275     (base 16)		Belkin International Inc.
-				12045 E. Waterfront Drive
-				Playa Vista  CA  90094
-				US
-
-00-57-D2   (hex)		Cisco Systems, Inc
-0057D2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-3C-67-16   (hex)		Lily Robotics
-3C6716     (base 16)		Lily Robotics
-				75 Boardman Pl
-				San Francisco  CA  94103
-				US
-
-00-D0-BD   (hex)		Lattice Semiconductor Corp. (LPA)
-00D0BD     (base 16)		Lattice Semiconductor Corp. (LPA)
-				2115 O’Nel Drive
-				San Jose  CA  95131
-				US
-
-00-1F-3A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-001F3A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C8-A0-30   (hex)		Texas Instruments
-C8A030     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-78-C5-E5   (hex)		Texas Instruments
-78C5E5     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-0C-FD-37   (hex)		SUSE Linux GmbH
-0CFD37     (base 16)		SUSE Linux GmbH
-				Maxfeldstraße 5
-				Nürnberg  Bavaria  90409
-				DE
-
-2C-22-8B   (hex)		CTR SRL
-2C228B     (base 16)		CTR SRL
-				Via Lario 33
-				Cantù  Cantù (CO)  22063
-				IT
-
-0C-6F-9C   (hex)		Shaw Communications Inc.
-0C6F9C     (base 16)		Shaw Communications Inc.
-				Suite 900, 630 3rd Avenue S.W.
-				CALGARY  ALBERTA  T2P 4L4
-				CA
-
-00-17-E4   (hex)		Texas Instruments
-0017E4     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-04-E4-51   (hex)		Texas Instruments
-04E451     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-50-56-63   (hex)		Texas Instruments
-505663     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-88-33-14   (hex)		Texas Instruments
-883314     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-64-7B-D4   (hex)		Texas Instruments
-647BD4     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-D8-95-2F   (hex)		Texas Instruments
-D8952F     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-B8-FF-FE   (hex)		Texas Instruments
-B8FFFE     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-2C-E4-12   (hex)		Sagemcom Broadband SAS
-2CE412     (base 16)		Sagemcom Broadband SAS
-				250 route de l'Empereur
-				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
-				FR
-
-44-C1-5C   (hex)		Texas Instruments
-44C15C     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-00-22-A5   (hex)		Texas Instruments
-0022A5     (base 16)		Texas Instruments
-				12500 TI Boulevard, MS 8723
-				Dallas  TX  75243
-				US
-
-E0-43-DB   (hex)		Shenzhen ViewAt Technology Co.,Ltd. 
-E043DB     (base 16)		Shenzhen ViewAt Technology Co.,Ltd. 
-				9A,Microprofit,6th Gaoxin South Road, High-Tech Industrial Park, Nanshan, Shenzhen, CHINA.
-				shenzhen  guangdong  518057
-				CN
-
-3C-CF-5B   (hex)		ICOMM HK LIMITED
-3CCF5B     (base 16)		ICOMM HK LIMITED
-				SUITES 2302-6, 23/F GREAT EAGLE CTR 23 HARBOUR RD 
-				WANCHAI    NA
-				HK
-
-24-05-F5   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-2405F5     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-3C-35-56   (hex)		Cognitec Systems GmbH
-3C3556     (base 16)		Cognitec Systems GmbH
-				Großenhainer Str. 101
-				Dresden  Saxony  01127
-				DE
-
-3C-90-66   (hex)		SmartRG, Inc.
-3C9066     (base 16)		SmartRG, Inc.
-				501 SE Columbia Shores Blvd
-				Vancouver  WA  98661
-				US
-
-00-0D-88   (hex)		D-Link Corporation
-000D88     (base 16)		D-Link Corporation
-				No.8, Li-Hsing 7 Road, Science-Based Ind
-				Hsinchu    30077
-				TW
-
-00-11-95   (hex)		D-Link Corporation
-001195     (base 16)		D-Link Corporation
-				2F No. 233-2, Pao-Chiao Road
-				Taipei  Taiwan  0000
-				TW
-
-00-13-46   (hex)		D-Link Corporation
-001346     (base 16)		D-Link Corporation
-				2F, No.233-2, Pao-Chiao Road
-				Hsin-Tien,  Taipei  231
-				TW
-
-78-E3-B5   (hex)		Hewlett Packard
-78E3B5     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-78-AC-C0   (hex)		Hewlett Packard
-78ACC0     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-68-B5-99   (hex)		Hewlett Packard
-68B599     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-1C-C1-DE   (hex)		Hewlett Packard
-1CC1DE     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-B8-A3-86   (hex)		D-Link International
-B8A386     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-1C-7E-E5   (hex)		D-Link International
-1C7EE5     (base 16)		D-Link International
-				1 International Business Park, #03-12, The Synergy 
-				SINGAPORE    609917
-				SG
-
-1C-BD-B9   (hex)		D-Link International
-1CBDB9     (base 16)		D-Link International
-				1 INTERNATIONAL  BUSINESS  PARK,
-				SINGAPORE    609917
-				SG
-
-00-14-2F   (hex)		Savvius
-00142F     (base 16)		Savvius
-				1340 Treat Boulevard, Suite 500
-				Walnut Creek  CA  94597
-				US
-
-28-BC-18   (hex)		SourcingOverseas Co. Ltd
-28BC18     (base 16)		SourcingOverseas Co. Ltd
-				2F., No.616, Sec.5, Zhongshan N. Rd., Shilin Dist.,
-				Taipei City    111
-				TW
-
-94-AB-DE   (hex)		OMX Technology - FZE
-94ABDE     (base 16)		OMX Technology - FZE
-				Dubai Silicon Oasis - THUB - 1-D-OFF-124
-				Dubai    65673
-				AE
-
-9C-DF-B1   (hex)		Shenzhen Crave Communication Co., LTD
-9CDFB1     (base 16)		Shenzhen Crave Communication Co., LTD
-				F3,8Building,DongFangMing IndustryZone,No.83 DabaoRD.,33 District BaoAn
-				Shenzhen  Guangdong  518000
-				CN
-
-AC-CF-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ACCF85     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan  Guangdong  523808 
-				CN
-
-38-71-DE   (hex)		Apple, Inc.
-3871DE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-81-EB   (hex)		Apple, Inc.
-7081EB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-BA-75   (hex)		Everest Networks, Inc
-34BA75     (base 16)		Everest Networks, Inc
-				2933 Bunker Hill Ln., Suite 100
-				Santa Clara  CA  95054
-				US
-
-7C-18-CD   (hex)		E-TRON Co.,Ltd.
-7C18CD     (base 16)		E-TRON Co.,Ltd.
-				66-11, Nonhyeon 2-dong, Gangnam-gu
-				Seoul    06049
-				KR
-
-00-E0-FC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-00E0FC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				KEFA ROAD, SCIENCE-BASED INDUSTRIAL PARK
-				SHENZHEN 518057    12345
-				CN
-
-64-16-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6416F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 2, Zone B,Huawei Industrial Park,Bantian, Longgang District
-				Shenzhen  Guangdong  518129
-				CN
-
-F4-03-04   (hex)		Google, Inc.
-F40304     (base 16)		Google, Inc.
-				1600 Amphitheatre Pkwy
-				Mt. View  CA  94043
-				US
-
-54-60-09   (hex)		Google, Inc.
-546009     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-A4-77-33   (hex)		Google, Inc.
-A47733     (base 16)		Google, Inc.
-				1600 Ampitheatre Parkway
-				Mountain View    94043
-				US
-
-80-7A-BF   (hex)		HTC Corporation
-807ABF     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-78-F8-82   (hex)		LG Electronics (Mobile Communications)
-78F882     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-C0-2C-7A   (hex)		Shenzhen Horn Audio Co.,Ltd.
-C02C7A     (base 16)		Shenzhen Horn Audio Co.,Ltd.
-				Block17,Tongfuyu lnd.Zone,Dalang,Baoan 
-				Shenzhen  Guang Dong   518109 
-				CN
-
-1C-CB-99   (hex)		TCT mobile ltd
-1CCB99     (base 16)		TCT mobile ltd
-				No.86 hechang 7th road, zhongkai, Hi-Tech District
-				Hui Zhou  Guang Dong  516006
-				CN
-
-A4-2B-B0   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-A42BB0     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-18-8B-45   (hex)		Cisco Systems, Inc
-188B45     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-60-69-44   (hex)		Apple, Inc.
-606944     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-C6-9A   (hex)		Juniper Networks
-B0C69A     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-2C-6B-F5   (hex)		Juniper Networks
-2C6BF5     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C4-2F-90   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-C42F90     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.469,Jianghui Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-F4-CA-24   (hex)		FreeBit Co., Ltd.
-F4CA24     (base 16)		FreeBit Co., Ltd.
-				E.Space Tower 3-6 Maruyama-Cho
-				Shibuya-ku  Tokyo  150-0044
-				JP
-
-00-D0-B7   (hex)		Intel Corporation
-00D0B7     (base 16)		Intel Corporation
-				5200 NE ELAM YOUNG PARKWAY
-				HILLSBORO  OR  97124
-				US
-
-00-1D-D6   (hex)		ARRIS Group, Inc.
-001DD6     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-90-3E-AB   (hex)		ARRIS Group, Inc.
-903EAB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-30-60-23   (hex)		ARRIS Group, Inc.
-306023     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-14-AB-F0   (hex)		ARRIS Group, Inc.
-14ABF0     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-14-F6   (hex)		Juniper Networks
-0014F6     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-90-1A-CA   (hex)		ARRIS Group, Inc.
-901ACA     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-C8-3F-B4   (hex)		ARRIS Group, Inc.
-C83FB4     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-E0-B7-0A   (hex)		ARRIS Group, Inc.
-E0B70A     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-1D-CE   (hex)		ARRIS Group, Inc.
-001DCE     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-13-E8   (hex)		Intel Corporate
-0013E8     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-13-CE   (hex)		Intel Corporate
-0013CE     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-2C-76-8A   (hex)		Hewlett Packard
-2C768A     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-C8-34-8E   (hex)		Intel Corporate
-C8348E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-4C-34-88   (hex)		Intel Corporate
-4C3488     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-10-02-B5   (hex)		Intel Corporate
-1002B5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-40-26   (hex)		BUFFALO.INC
-004026     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref.  460-8315
-				JP
-
-4C-E6-76   (hex)		BUFFALO.INC
-4CE676     (base 16)		BUFFALO.INC
-				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
-				Naka-ku,Nagoya  Aichi Pref.  460-8315
-				JP
-
-00-0B-CD   (hex)		Hewlett Packard
-000BCD     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-0F-20   (hex)		Hewlett Packard
-000F20     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-11-0A   (hex)		Hewlett Packard
-00110A     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-B8-B8-1E   (hex)		Intel Corporate
-B8B81E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-B4-6D-83   (hex)		Intel Corporate
-B46D83     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3
-				Kulim  Kedah  09000
-				MY
-
-00-0E-35   (hex)		Intel Corporation
-000E35     (base 16)		Intel Corporation
-				2111 NE 25th Ave
-				Hillsboro  OR  97123
-				US
-
-00-07-E9   (hex)		Intel Corporation
-0007E9     (base 16)		Intel Corporation
-				2111 NE 25th Avenue
-				Hillsboro  OR  97124
-				US
-
-00-17-08   (hex)		Hewlett Packard
-001708     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-00-17-A4   (hex)		Hewlett Packard
-0017A4     (base 16)		Hewlett Packard
-				20555 State Highway 249
-				Houston  TX  77070
-				US
-
-C0-05-C2   (hex)		ARRIS Group, Inc.
-C005C2     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-30-C1   (hex)		Hewlett Packard
-0030C1     (base 16)		Hewlett Packard
-				11000 WOLFE ROAD
-				CUPERTINO  CA  95014
-				US
-
-00-80-A0   (hex)		Hewlett Packard
-0080A0     (base 16)		Hewlett Packard
-				ALAMEDA RIO NEGRO,
-				houston  tx  77070
-				BR
-
-D4-85-64   (hex)		Hewlett Packard
-D48564     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-24-BE-05   (hex)		Hewlett Packard
-24BE05     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive W
-				Houston    77070
-				US
-
-FC-3F-DB   (hex)		Hewlett Packard
-FC3FDB     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston  TX  77070
-				US
-
-30-8D-99   (hex)		Hewlett Packard
-308D99     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-58-20-B1   (hex)		Hewlett Packard
-5820B1     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-94-57-A5   (hex)		Hewlett Packard
-9457A5     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-00-0E-B3   (hex)		Hewlett Packard
-000EB3     (base 16)		Hewlett Packard
-				2580 55th Street
-				Boulder  CO  80301
-				US
-
-08-00-09   (hex)		Hewlett Packard
-080009     (base 16)		Hewlett Packard
-				ENTERPRISE SYSTEMS TECH.CENTER
-				CUPERTINO  CA  95014
-				US
-
-90-CD-B6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-90CDB6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-40-49-0F   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-40490F     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-26-5C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-00265C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-22-69   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-002269     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-D8-79-88   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-D87988     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-74-A7-8E   (hex)		zte corporation
-74A78E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-09-2D   (hex)		HTC Corporation
-00092D     (base 16)		HTC Corporation
-				No.23 Xinghua Road,
-				Taoyuan County     330
-				TW
-
-44-31-92   (hex)		Hewlett Packard
-443192     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-A0-D3-C1   (hex)		Hewlett Packard
-A0D3C1     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-38-EA-A7   (hex)		Hewlett Packard
-38EAA7     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-AC-16-2D   (hex)		Hewlett Packard
-AC162D     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-80-C1-6E   (hex)		Hewlett Packard
-80C16E     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-B4-B5-2F   (hex)		Hewlett Packard
-B4B52F     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-D0-7E-28   (hex)		Hewlett Packard
-D07E28     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-D0-BF-9C   (hex)		Hewlett Packard
-D0BF9C     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-7C-61-93   (hex)		HTC Corporation
-7C6193     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., 
-				Taoyuan County    330
-				TW
-
-90-E7-C4   (hex)		HTC Corporation
-90E7C4     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd.
-				Taoyuan County  Taiwan  330
-				TW
-
-BC-EA-FA   (hex)		Hewlett Packard
-BCEAFA     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-74-46-A0   (hex)		Hewlett Packard
-7446A0     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-2C-44-FD   (hex)		Hewlett Packard
-2C44FD     (base 16)		Hewlett Packard
-				11445 Compaq Center Drive
-				Houston    77070
-				US
-
-04-53-D5   (hex)		Sysorex Global Holdings
-0453D5     (base 16)		Sysorex Global Holdings
-				Suite 195 2479 E. Bayshore Road
-				Palo Alto  CA  94303
-				US
-
-EC-52-DC   (hex)		WORLD MEDIA AND TECHNOLOGY Corp.
-EC52DC     (base 16)		WORLD MEDIA AND TECHNOLOGY Corp.
-				600 Brickell World Plaza, suite 1775
-				Miami    33132
-				US
-
-94-B2-CC   (hex)		PIONEER CORPORATION
-94B2CC     (base 16)		PIONEER CORPORATION
-				1-1 Shin-ogura
-				Kawasaki-shi  Kanagawa Prefecture  2120031
-				JP
-
-04-52-F3   (hex)		Apple, Inc.
-0452F3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-C2-55   (hex)		Texas Instruments
-88C255     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-CC-78-AB   (hex)		Texas Instruments
-CC78AB     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-1C-78-39   (hex)		Shenzhen Tencent Computer System Co., Ltd.
-1C7839     (base 16)		Shenzhen Tencent Computer System Co., Ltd.
-				36/F, Tencent Building, Kejizhongyi Avenue, Hi-Tech Park
-				Shenzhen  Guangdong  518057
-				CN
-
-FC-D7-33   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-FCD733     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-5C-89-9A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-5C899A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-A8-1B-5A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A81B5A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
-				DONGGUAN  GUANGDONG  523860
-				CN
-
-2C-5B-B8   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-2C5BB8     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
-				DONGGUAN  GUANGDONG  523860
-				CN
-
-08-EB-74   (hex)		HUMAX Co., Ltd.
-08EB74     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 11-4, Sunae-dong, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-825
-				KR
-
-E0-05-C5   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-E005C5     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 7, Second Part, Honghualing Industrial Zone
-				Shenzhen  Guangdong  518000
-				CN
-
-38-83-45   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-388345     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan, 
-				Shenzhen,  Guangdong Province  518057
-				CN
-
-EC-88-8F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-EC888F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park
-				Shenzhen  Guangdong  518057
-				CN
-
-64-66-B3   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-6466B3     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park
-				Shenzhen  Guangdong  518057
-				CN
-
-28-32-C5   (hex)		HUMAX Co., Ltd.
-2832C5     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village,216,Hwangsaeul-ro,Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-F0-F3-36   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F0F336     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-BC-46-99   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-BC4699     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-F4-83-CD   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F483CD     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
-				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
-				CN
-
-00-21-27   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-002127     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				South Building, No.5 Keyuan Road, Central Zone,
-				Shenzhen  Guangdong  518000
-				CN
-
-5C-63-BF   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-5C63BF     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
-				Shenzhen  Guangdong  518000
-				CN
-
-14-2D-27   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-142D27     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-88-E3-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88E3AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-05-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C40528     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-DF-BD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3CDFBD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-9F-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-509F27     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-71-7A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-80717A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-21-E8   (hex)		Murata Manufacturing Co., Ltd.
-0021E8     (base 16)		Murata Manufacturing Co., Ltd.
-				2288, Oaza-Ohshinohara, Yasu-cho,
-				Yasu-gun  Shiga  520-2393
-				JP
-
-00-0E-6D   (hex)		Murata Manufacturing Co., Ltd.
-000E6D     (base 16)		Murata Manufacturing Co., Ltd.
-				2288, Oaza-Ohshinohara, Yasu-cho,
-				Yasu-gun  Shiga  520-2393
-				JP
-
-D0-27-88   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-D02788     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-90-4C-E5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-904CE5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-1F-E2   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-001FE2     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-00-16-CF   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-0016CF     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-20-02-AF   (hex)		Murata Manufacturing Co., Ltd.
-2002AF     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1 Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-98-F5-37   (hex)		zte corporation
-98F537     (base 16)		zte corporation
-				12/F.,zte R&D building,kejinan Road,
-				shenzhen  guangdong  518057
-				CN
-
-5C-4C-A9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5C4CA9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-F4-C7-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4C714     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
-				Shenzhen  Guangdong  518108
-				CN
-
-28-6E-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-286ED4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				HUAWEI Industrial Base Bantian,Longgang
-				Shenzhen  guangdong  518129
-				CN
-
-00-1E-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-001E10     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				HUAWEI INDUSTRIAL PK BANTIAN, LONGGANG DIST SHENZHEN
-				SHENZHEN  GUANGDONG  518077
-				CN
-
-D4-78-56   (hex)		Avaya Inc
-D47856     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-D8-42-AC   (hex)		Shanghai Feixun Communication Co.,Ltd.
-D842AC     (base 16)		Shanghai Feixun Communication Co.,Ltd.
-				Building 90, No. 4855, Guangfulin Road, Songjiang District
-				Shanghai    201616
-				CN
-
-54-39-DF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5439DF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				Shenzhen  Guangdong  518129
-				CN
-
-28-3C-E4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-283CE4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-2C-F4-C5   (hex)		Avaya Inc
-2CF4C5     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-3C-3A-73   (hex)		Avaya Inc
-3C3A73     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-FC-83-99   (hex)		Avaya Inc
-FC8399     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-58-7F-66   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-587F66     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-64-A6-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-64A651     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-63-61   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-086361     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
-				Shenzhen  GuangDong  518057
-				CN
-
-A0-12-90   (hex)		Avaya Inc
-A01290     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-38-BB-3C   (hex)		Avaya Inc
-38BB3C     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-F8-73-A2   (hex)		Avaya Inc
-F873A2     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-CC-F9-54   (hex)		Avaya Inc
-CCF954     (base 16)		Avaya Inc
-				360 Mt Kemble Ave
-				Morristown  NJ  07960
-				US
-
-8C-34-FD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8C34FD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-F7-F3   (hex)		Xiaomi Communications Co Ltd
-ACF7F3     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-D4-97-0B   (hex)		Xiaomi Communications Co Ltd
-D4970B     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-8C-BE-BE   (hex)		Xiaomi Communications Co Ltd
-8CBEBE     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-14-F6-5A   (hex)		Xiaomi Communications Co Ltd
-14F65A     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-00-9E-C8   (hex)		Xiaomi Communications Co Ltd
-009EC8     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-0C-1D-AF   (hex)		Xiaomi Communications Co Ltd
-0C1DAF     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-08-19-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0819A6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-3C-F8-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3CF808     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-48-62-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-486276     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-B4-15-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B41513     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-AC-4E-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-AC4E91     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-28-31-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-283152     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
-				ShenZhen  GuangDong  518129
-				CN
-
-34-80-B3   (hex)		Xiaomi Communications Co Ltd
-3480B3     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-F4-8B-32   (hex)		Xiaomi Communications Co Ltd
-F48B32     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-00-90-21   (hex)		Cisco Systems, Inc
-009021     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-90-B1   (hex)		Cisco Systems, Inc
-0090B1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-B6   (hex)		Texas Instruments
-001AB6     (base 16)		Texas Instruments
-				108 Wild Basin Ste 350
-				Austin  TX  78746
-				US
-
-00-12-D1   (hex)		Texas Instruments
-0012D1     (base 16)		Texas Instruments
-				12500 TI Boulevard,
-				Dallas    75243
-				US
-
-00-12-37   (hex)		Texas Instruments
-001237     (base 16)		Texas Instruments
-				12500 TI Boulevard,
-				Dallas    75243
-				US
-
-A0-E6-F8   (hex)		Texas Instruments
-A0E6F8     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-70-FF-76   (hex)		Texas Instruments
-70FF76     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D0-39-72   (hex)		Texas Instruments
-D03972     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-5C-31-3E   (hex)		Texas Instruments
-5C313E     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-F4-B8-5E   (hex)		Texas Instruments
-F4B85E     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-68-C9-0B   (hex)		Texas Instruments
-68C90B     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-74-88-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-74882A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-4C-B1-6C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CB16C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1-4,Huawei Industrial Base,Bantian,Longgang
-				ShenZhen  GuangDong  518129
-				CN
-
-04-BD-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04BD70     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				D1,Huawei Industrial Base
-				Shenzhen  Guangdong  518129
-				CN
-
-D4-F5-13   (hex)		Texas Instruments
-D4F513     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-50-72-24   (hex)		Texas Instruments
-507224     (base 16)		Texas Instruments
-				12500 TI BLVD
-				Dallas    75243
-				US
-
-00-90-D9   (hex)		Cisco Systems, Inc
-0090D9     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-90-92   (hex)		Cisco Systems, Inc
-009092     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-2F   (hex)		Cisco Systems, Inc
-00102F     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-0D   (hex)		Cisco Systems, Inc
-00100D     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-07   (hex)		Cisco Systems, Inc
-001007     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-10-14   (hex)		Cisco Systems, Inc
-001014     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-00-90-BF   (hex)		Cisco Systems, Inc
-0090BF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-50-D1   (hex)		Cisco Systems, Inc
-0050D1     (base 16)		Cisco Systems, Inc
-				170 W. TASMAN DR.
-				SAN JOSE  CA  95134-1706
-				US
-
-1C-E6-C7   (hex)		Cisco Systems, Inc
-1CE6C7     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-CC-D5-39   (hex)		Cisco Systems, Inc
-CCD539     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-4C-00-82   (hex)		Cisco Systems, Inc
-4C0082     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-7C-95-F3   (hex)		Cisco Systems, Inc
-7C95F3     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-34-DB-FD   (hex)		Cisco Systems, Inc
-34DBFD     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-88-5A-92   (hex)		Cisco Systems, Inc
-885A92     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-40-0B   (hex)		Cisco Systems, Inc
-00400B     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-60-70   (hex)		Cisco Systems, Inc
-006070     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-50-06-04   (hex)		Cisco Systems, Inc
-500604     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-E0-1E   (hex)		Cisco Systems, Inc
-00E01E     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-00-11-2F   (hex)		ASUSTek COMPUTER INC.
-00112F     (base 16)		ASUSTek COMPUTER INC.
-				No.150, Li-Te Rd., Peitou
-				Taipei    112
-				TW
-
-00-1B-FC   (hex)		ASUSTek COMPUTER INC.
-001BFC     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou
-				Taipei    112
-				TW
-
-A0-55-4F   (hex)		Cisco Systems, Inc
-A0554F     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-20-4C-9E   (hex)		Cisco Systems, Inc
-204C9E     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-84-B8-02   (hex)		Cisco Systems, Inc
-84B802     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-B0-AA-77   (hex)		Cisco Systems, Inc
-B0AA77     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-BC-C4-93   (hex)		Cisco Systems, Inc
-BCC493     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-A4-6C-2A   (hex)		Cisco Systems, Inc
-A46C2A     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-D0-A5-A6   (hex)		Cisco Systems, Inc
-D0A5A6     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-3C-5E-C3   (hex)		Cisco Systems, Inc
-3C5EC3     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-64-F6-9D   (hex)		Cisco Systems, Inc
-64F69D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-03-89   (hex)		PLANTRONICS, INC.
-000389     (base 16)		PLANTRONICS, INC.
-				345 ENCINAL STREET
-				SANTA CRUZ  CA  95060
-				US
-
-D0-72-DC   (hex)		Cisco Systems, Inc
-D072DC     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-28-C7-CE   (hex)		Cisco Systems, Inc
-28C7CE     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F4-0F-1B   (hex)		Cisco Systems, Inc
-F40F1B     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F8-C2-88   (hex)		Cisco Systems, Inc
-F8C288     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-1C-6A-7A   (hex)		Cisco Systems, Inc
-1C6A7A     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-1E-E5   (hex)		Cisco-Linksys, LLC
-001EE5     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine    92612
-				US
-
-48-44-87   (hex)		Cisco SPVTG
-484487     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-38-C8-5C   (hex)		Cisco SPVTG
-38C85C     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-48-5B-39   (hex)		ASUSTek COMPUTER INC.
-485B39     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
-				Taipei  Taiwan  112
-				TW
-
-BC-AE-C5   (hex)		ASUSTek COMPUTER INC.
-BCAEC5     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,
-				Taipei    112
-				TW
-
-10-BF-48   (hex)		ASUSTek COMPUTER INC.
-10BF48     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd.,Peitou,
-				Taipei    112
-				TW
-
-50-67-AE   (hex)		Cisco Systems, Inc
-5067AE     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-F0-9E-63   (hex)		Cisco Systems, Inc
-F09E63     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-6C-99-89   (hex)		Cisco Systems, Inc
-6C9989     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-18-E7-28   (hex)		Cisco Systems, Inc
-18E728     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-00-12-17   (hex)		Cisco-Linksys, LLC
-001217     (base 16)		Cisco-Linksys, LLC
-				121 Theory Dr.
-				Irvine  CA  92612
-				US
-
-00-13-10   (hex)		Cisco-Linksys, LLC
-001310     (base 16)		Cisco-Linksys, LLC
-				121 Theory Dr.
-				Irvine  CA  92612
-				US
-
-04-6C-9D   (hex)		Cisco Systems, Inc
-046C9D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-84-B2-61   (hex)		Cisco Systems, Inc
-84B261     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-E4-48-C7   (hex)		Cisco SPVTG
-E448C7     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Pkwy
-				Lawrenceville  GA  30044
-				US
-
-00-10-1F   (hex)		Cisco Systems, Inc
-00101F     (base 16)		Cisco Systems, Inc
-				170 WEST TASMAN DRIVE
-				SAN JOSE  CA  95134-1706
-				US
-
-54-A2-74   (hex)		Cisco Systems, Inc
-54A274     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-60-FB-42   (hex)		Apple, Inc.
-60FB42     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-B9-E8   (hex)		Apple, Inc.
-64B9E8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-1D-4F   (hex)		Apple, Inc.
-001D4F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-23-12   (hex)		Apple, Inc.
-002312     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-80-E0-1D   (hex)		Cisco Systems, Inc
-80E01D     (base 16)		Cisco Systems, Inc
-				170 West Tasman Drive
-				San Jose  CA  95134
-				US
-
-D8-A2-5E   (hex)		Apple, Inc.
-D8A25E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-0A-27   (hex)		Apple, Inc.
-000A27     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-34-51   (hex)		Apple, Inc.
-183451     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-0C-77-1A   (hex)		Apple, Inc.
-0C771A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-6A-BA   (hex)		Apple, Inc.
-286ABA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-4C-B1-99   (hex)		Apple, Inc.
-4CB199     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C0-9F-42   (hex)		Apple, Inc.
-C09F42     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D0-23-DB   (hex)		Apple, Inc.
-D023DB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-DE-E2   (hex)		Apple, Inc.
-70DEE2     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-CB-A1   (hex)		Apple, Inc.
-F0CBA1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-20-32   (hex)		Apple, Inc.
-182032     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-3C-FC   (hex)		Apple, Inc.
-403CFC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-60-BC   (hex)		Apple, Inc.
-4860BC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-51-C9   (hex)		Apple, Inc.
-3451C9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-6C-8F   (hex)		Apple, Inc.
-406C8F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-55-CA   (hex)		Apple, Inc.
-5855CA     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-2B-61   (hex)		Apple, Inc.
-DC2B61     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-40-A6-D9   (hex)		Apple, Inc.
-40A6D9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-FA-CD   (hex)		Apple, Inc.
-60FACD     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-3E-E1   (hex)		Apple, Inc.
-003EE1     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-25-3F   (hex)		Apple, Inc.
-FC253F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-F7-E4   (hex)		Apple, Inc.
-04F7E4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-C0-59   (hex)		Apple, Inc.
-34C059     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-D1-A9   (hex)		Apple, Inc.
-F0D1A9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-56-81   (hex)		Apple, Inc.
-705681     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-10-9F   (hex)		Apple, Inc.
-14109F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-0C-CE   (hex)		Apple, Inc.
-040CCE     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-EA-A8   (hex)		Apple, Inc.
-54EAA8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-E1-4C   (hex)		Apple, Inc.
-28E14C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E4-C6-3D   (hex)		Apple, Inc.
-E4C63D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-E4-3A   (hex)		Apple, Inc.
-54E43A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-DB-56   (hex)		Apple, Inc.
-04DB56     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-3C-0B   (hex)		Apple, Inc.
-AC3C0B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-70-11-24   (hex)		Apple, Inc.
-701124     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-26-65   (hex)		Apple, Inc.
-042665     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-35-86   (hex)		Apple, Inc.
-EC3586     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-78-FD-94   (hex)		Apple, Inc.
-78FD94     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-BE-08   (hex)		Apple, Inc.
-2CBE08     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-E8-80-2E   (hex)		Apple, Inc.
-E8802E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-00-61-71   (hex)		Apple, Inc.
-006171     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-8C-7C-92   (hex)		Apple, Inc.
-8C7C92     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-34-95   (hex)		Apple, Inc.
-B03495     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F4-37-B7   (hex)		Apple, Inc.
-F437B7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-7F-3E   (hex)		Apple, Inc.
-AC7F3E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-0B-5C   (hex)		Apple, Inc.
-280B5C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-FD-EC   (hex)		Apple, Inc.
-ACFDEC     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-9B-9C   (hex)		Apple, Inc.
-DC9B9C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-54-72-4F   (hex)		Apple, Inc.
-54724F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D8-CF-9C   (hex)		Apple, Inc.
-D8CF9C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-7C-6D-F8   (hex)		Apple, Inc.
-7C6DF8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-04-E5-36   (hex)		Apple, Inc.
-04E536     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A8-BB-CF   (hex)		Apple, Inc.
-A8BBCF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-40-08   (hex)		Apple, Inc.
-6C4008     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-A3-86   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-FCA386     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-40-33-1A   (hex)		Apple, Inc.
-40331A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-CC-C7-60   (hex)		Apple, Inc.
-CCC760     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-BC-4C-C4   (hex)		Apple, Inc.
-BC4CC4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-37-14   (hex)		Apple, Inc.
-DC3714     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-A2-E4   (hex)		Apple, Inc.
-20A2E4     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-F0-76   (hex)		Apple, Inc.
-28F076     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-13-57   (hex)		ATP Electronics, Inc.
-141357     (base 16)		ATP Electronics, Inc.
-				2590 North First Street Suite 150
-				San Jose  CA  95131
-				US
-
-B8-B2-EB   (hex)		Googol Technology (HK) Limited
-B8B2EB     (base 16)		Googol Technology (HK) Limited
-				Unit 1008-09, 10/F C-Bons International Center
-				Kwun Tong  Kowloon  nil
-				HK
-
-FC-CF-43   (hex)		HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD
-FCCF43     (base 16)		HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD
-				Meisiqi lndustrialPark,Yuechang,
-				Huizhou  Guangdong  516000
-				CN
-
-D8-48-EE   (hex)		Hangzhou Xueji Technology Co., Ltd.
-D848EE     (base 16)		Hangzhou Xueji Technology Co., Ltd.
-				Room 1902, Tower D, West Intime City
-				Hangzhou  Zhejiang  310012
-				CN
-
-B4-EF-04   (hex)		DAIHAN Scientific Co., Ltd.
-B4EF04     (base 16)		DAIHAN Scientific Co., Ltd.
-				326, Sinpyoungsukhwaro
-				Wonju-si,  Gangwon-do  26358
-				KR
-
-A4-DE-C9   (hex)		QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.
-A4DEC9     (base 16)		QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.
-				Sun Jia Tuan Township, Huan Cui District, Weihai, P.R.China
-				 Weihai  Shan Dong  264201
-				CN
-
-CC-E0-C3   (hex)		EXTEN Technologies, Inc.
-CCE0C3     (base 16)		EXTEN Technologies, Inc.
-				4201 W Parmer Lane Bldg A, Ste 200
-				Austin  TX  78727
-				US
-
-64-6A-74   (hex)		AUTH-SERVERS, LLC
-646A74     (base 16)		AUTH-SERVERS, LLC
-				43479 Stukely Dr
-				Sterling  VA  20166
-				US
-
-4C-8E-CC   (hex)		SILKAN SA
-4C8ECC     (base 16)		SILKAN SA
-				Immeuble le Sirius
-				Meudon La Foret  Ile de France  92360
-				FR
-
-E4-35-C8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E435C8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-54-B9   (hex)		Nokia
-0C54B9     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-84-10-0D   (hex)		Motorola Mobility LLC, a Lenovo Company
-84100D     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-D0-0F-6D   (hex)		T&W Electronics Company
-D00F6D     (base 16)		T&W Electronics Company
-				89# Jiang Nan RD, Lu Du
-				Taicang  Jiangsu  21500
-				CN
-
-90-8D-78   (hex)		D-Link International
-908D78     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-7C-71-76   (hex)		Wuxi iData Technology Company Ltd.
-7C7176     (base 16)		Wuxi iData Technology Company Ltd.
-				Floor 11, Building B1, Wuxi(Binhu) National Sensing Information Center, No. 999 Gaolang East Road, Wuxi City, Jiangsu Province, P.R.C.
-				Wuxi  Jiangsu  214131
-				CN
-
-7C-01-91   (hex)		Apple, Inc.
-7C0191     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-2C-1B-C8   (hex)		Hunan Topview Network System CO.,LTD
-2C1BC8     (base 16)		Hunan Topview Network System CO.,LTD
-				RM 3002,3009,3010 Yuelu High-Tech Zone, Hanpu Couty, Yuelu District
-				Changsha  Hunan  410208
-				CN
-
-A8-47-4A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-A8474A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-C4-00-49   (hex)		Kamama
-C40049     (base 16)		Kamama
-				100 Enterprise Way
-				Scotts Valley  CA  95066
-				US
-
-80-D6-05   (hex)		Apple, Inc.
-80D605     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-E8-48   (hex)		Axiim
-98E848     (base 16)		Axiim
-				12126 NE 106th Pl
-				Kirkland  WA  98033
-				US
-
-C0-4A-09   (hex)		Zhejiang Everbright Communication Equip. Co,. Ltd
-C04A09     (base 16)		Zhejiang Everbright Communication Equip. Co,. Ltd
-				291# Wei 19th Rd.
-				Wenzhou  Zhejiang  325600
-				CN
-
-A0-1E-0B   (hex)		MINIX Technology Limited
-A01E0B     (base 16)		MINIX Technology Limited
-				Unit 1501, Chevalier Commercial Center
-				Kowloon Bay  Kowloon  000000
-				HK
-
-68-E8-EB   (hex)		Linktel Technologies Co.,Ltd
-68E8EB     (base 16)		Linktel Technologies Co.,Ltd
-				No.20 University Science Park Road,
-				Wuhan  Hubei  430223
-				CN
-
-A8-45-CD   (hex)		Siselectron Technology LTD.
-A845CD     (base 16)		Siselectron Technology LTD.
-				5F., No.232, Sec. 2, Sioulang Rd., Yonghe Dist.,
-				New Taipei City  Taiwan  23453
-				TW
-
-D0-C1-93   (hex)		SKYBELL, INC
-D0C193     (base 16)		SKYBELL, INC
-				1 JENNER, SUITE 100
-				IRVINE  CA  92618
-				US
-
-AC-64-62   (hex)		zte corporation
-AC6462     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C0-25-A2   (hex)		NEC Platforms, Ltd.
-C025A2     (base 16)		NEC Platforms, Ltd.
-				2-3 Kandatsukasamachi
-				Chiyodaku  Tokyo  101-8532
-				JP
-
-48-13-7E   (hex)		Samsung Electronics Co.,Ltd
-48137E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-F7-72   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-30F772     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-DC-3C-F6   (hex)		Atomic Rules LLC
-DC3CF6     (base 16)		Atomic Rules LLC
-				287 Chester Rd
-				Auburn  NH  03032
-				US
-
-08-9B-4B   (hex)		iKuai Networks
-089B4B     (base 16)		iKuai Networks
-				So Boss Tech Center 2 # 716
-				Fengtai District  Beijing  100068
-				CN
-
-44-73-D6   (hex)		Logitech
-4473D6     (base 16)		Logitech
-				7700 Gateway Blvd
-				Newark  CA  94560
-				US
-
-10-CC-1B   (hex)		Liverock technologies,INC
-10CC1B     (base 16)		Liverock technologies,INC
-				Shinjuku 5-13-10,Joshu-Bldg. 4F
-				Tokyo  Shinjuku-ku  160-0022
-				JP
-
-E8-07-34   (hex)		Champion Optical Network Engineering, LLC
-E80734     (base 16)		Champion Optical Network Engineering, LLC
-				23645 Mercantile Rd.
-				Beachwood  OH  44122
-				US
-
-A4-38-31   (hex)		RF elements s.r.o.
-A43831     (base 16)		RF elements s.r.o.
-				Jasenovská 2528
-				Humenne  SK  06603
-				SK
-
-38-05-46   (hex)		Foctek Photonics, Inc.
-380546     (base 16)		Foctek Photonics, Inc.
-				No. 8, the 7th Road Phase II of Minhou Tieling Industrial District
-				Fuzhou  Fujian  350100
-				CN
-
-D4-83-04   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-D48304     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-DC-2B-2A   (hex)		Apple, Inc.
-DC2B2A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-9C-8D-D3   (hex)		Leonton Technologies
-9C8DD3     (base 16)		Leonton Technologies
-				3F, No.501-16, Zhongzheng Rd., Xindian Dist.
-				New Taipei City  Taiwan  231
-				TW
-
-E4-1A-2C   (hex)		ZPE Systems, Inc.
-E41A2C     (base 16)		ZPE Systems, Inc.
-				39420 Liberty Street,  #253
-				Fremont  CA  94538
-				US
-
-E8-BD-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8BDD1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F4-15-35   (hex)		SPON Communication Technology Co.,Ltd
-F41535     (base 16)		SPON Communication Technology Co.,Ltd
-				B Building, Lugu International Industrial Zone, NO.229, Tongzipo Road, Changsha, China
-				changsha  hunan  410000
-				CN
-
-38-0A-AB   (hex)		Formlabs
-380AAB     (base 16)		Formlabs
-				35 Medford St
-				Somerville  MA  02143
-				US
-
-38-2D-E8   (hex)		Samsung Electronics Co.,Ltd
-382DE8     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C0-89-97   (hex)		Samsung Electronics Co.,Ltd
-C08997     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A8-15-D6   (hex)		Shenzhen Meione Technology CO., LTD
-A815D6     (base 16)		Shenzhen Meione Technology CO., LTD
-				12th FloorFutian Sports Park Cultural Industries Headquarters Building No. 3030 Fuqiang Road, Futian District
-				Shenzhen  Guangdong  518000
-				CN
-
-C0-7C-D1   (hex)		PEGATRON CORPORATION
-C07CD1     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-90-D8-F3   (hex)		zte corporation
-90D8F3     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D4-45-E8   (hex)		Jiangxi Hongpai Technology Co., Ltd.
-D445E8     (base 16)		Jiangxi Hongpai Technology Co., Ltd.
-				5th Floor,C Region, Zhejiang University Science Park,No. 698,
-				Nanchang  Jiangxi  330096
-				CN
-
-34-26-06   (hex)		CarePredict, Inc.
-342606     (base 16)		CarePredict, Inc.
-				PO Box 551686
-				Fort Lauderdale  Florida  33355
-				US
-
-38-B7-25   (hex)		Wistron Infocomm (Zhongshan) Corporation
-38B725     (base 16)		Wistron Infocomm (Zhongshan) Corporation
-				No.38,East Keji Road,Zhongshan Torch Development Zone,Zhongshan City,Guangdong,China
-				Zhongshan  Guangdong  528437
-				CN
-
-AC-EC-80   (hex)		ARRIS Group, Inc.
-ACEC80     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-50-7B-9D   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-507B9D     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-6C-72-20   (hex)		D-Link International
-6C7220     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-30-A2-43   (hex)		Shenzhen Prifox Innovation Technology Co., Ltd.
-30A243     (base 16)		Shenzhen Prifox Innovation Technology Co., Ltd.
-				Room B905, Bldg 4, Software Industry Park,
-				Shenzhen  Guangdong Province  518057
-				
-
-38-01-95   (hex)		Samsung Electronics Co.,Ltd
-380195     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-24-6E-96   (hex)		Dell Inc.
-246E96     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-44-97-5A   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-44975A     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
-				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
-				Shenzhen  Guangdong  518057
-				CN
-
-50-45-F7   (hex)		Liuhe Intelligence Technology Ltd.
-5045F7     (base 16)		Liuhe Intelligence Technology Ltd.
-				7th Floor,Information Building,
-				Beijing  Beijing  100085
-				CN
-
-AC-67-6F   (hex)		Electrocompaniet A.S.
-AC676F     (base 16)		Electrocompaniet A.S.
-				Breivikveien 7
-				Tau  Rogaland  4120
-				NO
-
-64-0D-E6   (hex)		Petra Systems
-640DE6     (base 16)		Petra Systems
-				One Cragwood Road
-				South Plainfield  NJ  07080
-				US
-
-E0-55-3D   (hex)		Cisco Meraki
-E0553D     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco  California  94158
-				US
-
-FC-33-5F   (hex)		Polyera
-FC335F     (base 16)		Polyera
-				8045 Lamon Avenue
-				Skokie  IL  60077
-				US
-
-84-D4-C8   (hex)		Widex A/S
-84D4C8     (base 16)		Widex A/S
-				Nymoellevej 6
-				Lynge  Alleroed  DK3540
-				DK
-
-EC-21-E5   (hex)		Toshiba
-EC21E5     (base 16)		Toshiba
-				2-9,Suehiro-Cho
-				Ome  Tokyo  1988710
-				JP
-
-04-C2-3E   (hex)		HTC Corporation
-04C23E     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-E0-1A-EA   (hex)		Allied Telesis, Inc.
-E01AEA     (base 16)		Allied Telesis, Inc.
-				3041 Orchard Parkway
-				San Jose  CALIFORNIA  95134
-				US
-
-28-B9-D9   (hex)		Radisys Corporation
-28B9D9     (base 16)		Radisys Corporation
-				5435 NE Dawson Creek Drive
-				Hillsboro  OR  97124
-				US
-
-F4-C6-13   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
-F4C613     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
-				No. 389, Ningqiao Road, Pudong Jinqiao
-				Shanghai    201206
-				CN
-
-44-5F-8C   (hex)		Intercel Group Limited
-445F8C     (base 16)		Intercel Group Limited
-				Unit 6, 17/F, Vanta industrial Centre,
-				New Territories, Hong Kong    
-				CN
-
-B8-89-81   (hex)		Chengdu InnoThings Technology Co., Ltd.
-B88981     (base 16)		Chengdu InnoThings Technology Co., Ltd.
-				West Port Technology Enterprise Incubator Park
-				Chengdu  Sichuan  610000
-				CN
-
-F0-26-24   (hex)		WAFA TECHNOLOGIES CO., LTD.
-F02624     (base 16)		WAFA TECHNOLOGIES CO., LTD.
-				Room302, Longtaili Building
-				Shenzhen  Guangdong  518057
-				CN
-
-F8-F4-64   (hex)		Rawe Electonic GmbH
-F8F464     (base 16)		Rawe Electonic GmbH
-				Bregenzer Str. 67-69
-				Weiler im Allgäu  Bavaria  88171
-				DE
-
-5C-51-88   (hex)		Motorola Mobility LLC, a Lenovo Company
-5C5188     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-EC-01-33   (hex)		TRINUS SYSTEMS INC.
-EC0133     (base 16)		TRINUS SYSTEMS INC.
-				UNITECH VENTURE TOWN SUITE 801
-				GOYANG-SI  GYEONGGI-DO  410-722
-				KR
-
-2C-C5-48   (hex)		IAdea Corporation
-2CC548     (base 16)		IAdea Corporation
-				3F, No.33, Lane 77, Xing-ai Road
-				Taipei  Taiwan  114
-				TW
-
-14-DD-A9   (hex)		ASUSTek COMPUTER INC.
-14DDA9     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-18-4F-32   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-184F32     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-DC-A3-AC   (hex)		RBcloudtech
-DCA3AC     (base 16)		RBcloudtech
-				5th Floor, Jiangnan Street NO.3900, Binjiang District, Hangzhou City.
-				Hangzhou  Zhejiang  310052
-				CN
-
-0C-E7-25   (hex)		Microsoft Corporation
-0CE725     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-58-F1-02   (hex)		BLU Products Inc.
-58F102     (base 16)		BLU Products Inc.
-				Tower 4, Excellence Century Center
-				Shenzhen  Guangdong  518000
-				CN
-
-B4-AE-2B   (hex)		Microsoft
-B4AE2B     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-94-9F-3E   (hex)		Sonos, Inc.
-949F3E     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-30-89-D3   (hex)		HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED
-3089D3     (base 16)		HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED
-				FLAT A-8 9/F DELYA INDUSTRIAL CENTRE 7 SHEK PAI TAU ROAD
-				Hong Kong    
-				CN
-
-5C-B3-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CB395     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-6C-AC   (hex)		Fortinet, Inc.
-906CAC     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale  California  94086
-				US
-
-3C-DA-2A   (hex)		zte corporation
-3CDA2A     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-84-2E-27   (hex)		Samsung Electronics Co.,Ltd
-842E27     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-1C-AD-D1   (hex)		Bosung Electronics Co., Ltd.
-1CADD1     (base 16)		Bosung Electronics Co., Ltd.
-				74-12, Saemaeul-ro.
-				Gumi-si  Gyeongsangbuk-do  730-930
-				KR
-
-08-2C-B0   (hex)		Network Instruments
-082CB0     (base 16)		Network Instruments
-				10701 Red Circle Dr
-				Minnetonka  Minnesota  55343
-				US
-
-A0-13-CB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-A013CB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-D0-04-92   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D00492     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-14-32-D1   (hex)		Samsung Electronics Co.,Ltd
-1432D1     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-18-16-C9   (hex)		Samsung Electronics Co.,Ltd
-1816C9     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-00-FC-8D   (hex)		Hitron Technologies. Inc
-00FC8D     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-84-DF-19   (hex)		Chuango Security Technology Corporation
-84DF19     (base 16)		Chuango Security Technology Corporation
-				6-17, Overseas Students Pioneer Park,
-				Fuzhou  Fujian  350015
-				CN
-
-DC-15-DB   (hex)		Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.
-DC15DB     (base 16)		Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.
-				Room 821, block E, No.6 Taiping Street, Xicheng District
-				Beijing    100005
-				CN
-
-E0-DB-10   (hex)		Samsung Electronics Co.,Ltd
-E0DB10     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-61-72   (hex)		ZODIAC AEROSPACE SAS
-546172     (base 16)		ZODIAC AEROSPACE SAS
-				61 rue Pierre Curie
-				PLAISIR    78370
-				FR
-
-EC-60-E0   (hex)		AVI-ON LABS
-EC60E0     (base 16)		AVI-ON LABS
-				2585 LARKSPUR DR
-				PARK CITY  UT  84060
-				US
-
-B4-6D-35   (hex)		Dalian Seasky Automation Co;Ltd
-B46D35     (base 16)		Dalian Seasky Automation Co;Ltd
-				Room 408, DUT Science & Technology Park Building B, No.80 Software Park Road,          High-Tech Industrial Zone, Dalian, Liaoning, China
-				Dalian  Liao Ning  116023
-				CN
-
-3C-A3-1A   (hex)		Oilfind International LLC
-3CA31A     (base 16)		Oilfind International LLC
-				12651 Briar Forest Dr, Suite 151
-				Houston  Texas  77077
-				US
-
-30-F3-35   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-30F335     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-F2-E3   (hex)		Starcor Beijing Co.,Limited
-E8F2E3     (base 16)		Starcor Beijing Co.,Limited
-				NO.210 Block B, Building 2
-				Beijing  Berijing  100089
-				CN
-
-64-59-F8   (hex)		Vodafone Omnitel B.V.
-6459F8     (base 16)		Vodafone Omnitel B.V.
-				VIA JERVIS, 13 10015 IVREA (TO)
-				    
-				IT
-
-6C-44-18   (hex)		Zappware
-6C4418     (base 16)		Zappware
-				Ilgatlaan 19
-				Hasselt  Limburg  3500
-				BE
-
-A8-D4-09   (hex)		USA 111 Inc
-A8D409     (base 16)		USA 111 Inc
-				5885 Green Pointe Dr. Suite B Groveport, OH 43125
-				Groveport  Ohio  43125
-				US
-
-6C-45-98   (hex)		Antex Electronic Corp.
-6C4598     (base 16)		Antex Electronic Corp.
-				170 He Ping St.,
-				Tainan City    73443
-				TW
-
-68-A3-78   (hex)		FREEBOX SAS
-68A378     (base 16)		FREEBOX SAS
-				16 rue de la Ville l'Eveque
-				PARIS  IdF  75008
-				FR
-
-34-0A-22   (hex)		TOP-ACCESS ELECTRONICS CO LTD
-340A22     (base 16)		TOP-ACCESS ELECTRONICS CO LTD
-				No. 2 Building 
-				MingZhi Street  BaoAn District,ShenzheN  518131
-				CN
-
-E8-66-C4   (hex)		Diamanti
-E866C4     (base 16)		Diamanti
-				111 N. Market Street
-				San Jose  CA  95113
-				US
-
-D4-D7-A9   (hex)		Shanghai Kaixiang Info Tech LTD
-D4D7A9     (base 16)		Shanghai Kaixiang Info Tech LTD
-				A401, NO.509 Caobao Road, Shanghai, PRC
-				Shanghai  Shanghai  200233
-				CN
-
-34-3D-98   (hex)		JinQianMao Technology Co.,Ltd.
-343D98     (base 16)		JinQianMao Technology Co.,Ltd.
-				58#,Jiangbin Road,Taijiang District
-				Fuzhou  Fujian  350009
-				CN
-
-F4-47-13   (hex)		Leading Public Performance Co., Ltd.
-F44713     (base 16)		Leading Public Performance Co., Ltd.
-				137/77-78 Moo 1 Nanthanagarden Soi 12 Pathum-Rangsit Road Banklang Muang Pathumthani 12000 Thailand
-				Pathumthani  Pathumthani  12000
-				TH
-
-5C-A1-78   (hex)		TableTop Media (dba Ziosk)
-5CA178     (base 16)		TableTop Media (dba Ziosk)
-				12404 Park Central Drive
-				Dallas  TX  75251
-				US
-
-9C-BE-E0   (hex)		Biosoundlab Co., Ltd.
-9CBEE0     (base 16)		Biosoundlab Co., Ltd.
-				(Sangdaewon-dong, Sunil Technopia 907-908ho)
-				Jungwon-gu  Seongnam-si Gyeonggi-do,  462726
-				KR
-
-0C-41-3E   (hex)		Microsoft Corporation
-0C413E     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-D0-6F-4A   (hex)		TOPWELL INTERNATIONAL HOLDINGS LIMITED
-D06F4A     (base 16)		TOPWELL INTERNATIONAL HOLDINGS LIMITED
-				Unit 2506, 25/F, Prosperity Place,
-				Hong Kong  N/A  N/A
-				CN
-
-04-92-EE   (hex)		iway AG
-0492EE     (base 16)		iway AG
-				Badenerstrasse 569
-				Zurich  ZH  8048
-				CH
-
-80-74-59   (hex)		K's Co.,Ltd.
-807459     (base 16)		K's Co.,Ltd.
-				2864-16 Ryomitsuyanagi
-				Yonago  Tottori  683-0853
-				JP
-
-60-19-70   (hex)		HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.
-601970     (base 16)		HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.
-				Room -611, TianAn High-Tech Plaza II , Futian District, Shenzhen, China
-				Shenzhen  Guangdong  518040
-				CN
-
-A4-08-EA   (hex)		Murata Manufacturing Co., Ltd.
-A408EA     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-B8-78-79   (hex)		Roche Diagnostics GmbH
-B87879     (base 16)		Roche Diagnostics GmbH
-				Sandhofer Strasse 116
-				Mannheim  Baden-Wuerttemberg  68305
-				DE
-
-D0-83-D4   (hex)		Xtel Wireless ApS
-D083D4     (base 16)		Xtel Wireless ApS
-				Alfred Nobels vej 21E
-				Aalborg Oest  Nordjylland  9220
-				DK
-
-08-D3-4B   (hex)		Techman Electronics (Changshu) Co., Ltd.
-08D34B     (base 16)		Techman Electronics (Changshu) Co., Ltd.
-				No.66, Dalian Road, High-Tech Industrial Park
-				Changshu  Jiangsu Province  215500
-				CN
-
-78-A3-51   (hex)		SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
-78A351     (base 16)		SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
-				2F,Bldg. A,Kangmai Industrial Park,Renmin Rd
-				Shenzhen  Guangdong  518110
-				CN
-
-E4-69-5A   (hex)		Dictum Health, Inc.
-E4695A     (base 16)		Dictum Health, Inc.
-				255 3rd Street, Suite 102
-				Oakland  CA  94607
-				US
-
-7C-7A-53   (hex)		Phytrex Technology Corp.
-7C7A53     (base 16)		Phytrex Technology Corp.
-				8F-16, No.81, Shuili Rd.,
-				Hsinchu  Taiwan  30059
-				TW
-
-10-78-73   (hex)		Shenzhen Jinkeyi Communication Co., Ltd.
-107873     (base 16)		Shenzhen Jinkeyi Communication Co., Ltd.
-				No. 10 Shun King Road, Zhen Ping Xi Cun,
-				Shenzhen  Guangdong  518117
-				CN
-
-48-EE-0C   (hex)		D-Link International
-48EE0C     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-EC-3C-88   (hex)		MCNEX Co.,Ltd.
-EC3C88     (base 16)		MCNEX Co.,Ltd.
-				Hanshin IT Tower2 11F, Digital lo 9 gil
-				Geumcheon-Gu  Seoul  153-712
-				KR
-
-70-AD-54   (hex)		Malvern Instruments Ltd
-70AD54     (base 16)		Malvern Instruments Ltd
-				Grovewood Rd
-				Malvern  Worcestershire  WR14 1XZ
-				GB
-
-90-00-DB   (hex)		Samsung Electronics Co.,Ltd
-9000DB     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B4-EF-39   (hex)		Samsung Electronics Co.,Ltd
-B4EF39     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-F0-2A-23   (hex)		Creative Next Design
-F02A23     (base 16)		Creative Next Design
-				6-6-15, Kaminopporo 3-jo,
-				Sapporo-shi  Hokkaido  004-0033
-				JP
-
-58-47-04   (hex)		 Shenzhen Webridge Technology Co.,Ltd
-584704     (base 16)		 Shenzhen Webridge Technology Co.,Ltd
-				B2-22/F Chinese Technology Development Institute, High South Road, Nanshan District, Shenzhen, China
-				Shenzhen  Guangdong  518000
-				CN
-
-74-A0-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-74A063     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-E2-FD   (hex)		SKG Electric Group(Thailand) Co., Ltd.
-ECE2FD     (base 16)		SKG Electric Group(Thailand) Co., Ltd.
-				3F,The Second Building,Sanhe village , Longhua Rd, Baoan Dist., Shenzhen, China
-				Shenzhen  Guangdong  518301
-				CN
-
-14-8F-21   (hex)		Garmin International
-148F21     (base 16)		Garmin International
-				1200 E. 151st St
-				Olathe  KS  66062
-				US
-
-9C-68-5B   (hex)		Octonion SA
-9C685B     (base 16)		Octonion SA
-				EPFL Innovation Park, Bâtiment C
-				Lausanne  Vaud  1015
-				CH
-
-7C-53-4A   (hex)		Metamako
-7C534A     (base 16)		Metamako
-				Suite 207
-				Sydney  Other  2000
-				AU
-
-BC-B3-08   (hex)		HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED
-BCB308     (base 16)		HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED
-				Building D10-D11
-				PuDong District  Shanghai  201315
-				CN
-
-6C-2E-72   (hex)		B&B EXPORTING LIMITED
-6C2E72     (base 16)		B&B EXPORTING LIMITED
-				Bldg.#D,Xinhe Industrial Park
-				Guangzhou  Guangdong  510880
-				CN
-
-5C-CC-FF   (hex)		Techroutes Network Pvt Ltd
-5CCCFF     (base 16)		Techroutes Network Pvt Ltd
-				WW1-SF, Malibu Towne
-				Gurgaon  Haryana  122002
-				IN
-
-90-C3-5F   (hex)		Nanjing Jiahao Technology Co., Ltd.
-90C35F     (base 16)		Nanjing Jiahao Technology Co., Ltd.
-				Moling Industrial Park, Development Zone, Jiangning, Nanjing
-				Nanjing  Jiangsu  211111
-				CN
-
-C8-08-E9   (hex)		LG Electronics
-C808E9     (base 16)		LG Electronics
-				222 LG-ro, JINWI-MYEON
-				Pyeongtaek-si  Gyeonggi-do  451-713
-				KR
-
-18-3A-2D   (hex)		Samsung Electronics Co.,Ltd
-183A2D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-EC-74-BA   (hex)		Hirschmann Automation and Control GmbH
-EC74BA     (base 16)		Hirschmann Automation and Control GmbH
-				Stuttgarter Strasse 45-51
-				Neckartenzlingen  Baden-Württemberg  72654
-				DE
-
-FC-32-88   (hex)		CELOT Wireless Co., Ltd
-FC3288     (base 16)		CELOT Wireless Co., Ltd
-				4Fl.,NongHyup Bldg.,#1588-10 Gwanyang-Dong
-				Anyang City,  Gyeonggi-Do  431-727
-				KR
-
-D8-74-95   (hex)		zte corporation
-D87495     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-5C-3B-35   (hex)		Gehirn Inc.
-5C3B35     (base 16)		Gehirn Inc.
-				1-3-6 Kudan-kita
-				Chiyoda  Tokyo  102-0073
-				JP
-
-E4-FE-D9   (hex)		EDMI Europe Ltd
-E4FED9     (base 16)		EDMI Europe Ltd
-				The Grainger Suite, Dobson House, Regent  Centre
-				Newcastle upon Tyne  Newcastle upon Tyne  NE3 3PF
-				GB
-
-5C-F7-C3   (hex)		SYNTECH (HK) TECHNOLOGY LIMITED
-5CF7C3     (base 16)		SYNTECH (HK) TECHNOLOGY LIMITED
-				Unit No. 1, 12/F., Perfect Industrial Building ,
-				Kowloon, Hong Kong    999077
-				HK
-
-9C-E2-30   (hex)		JULONG CO,.LTD.
-9CE230     (base 16)		JULONG CO,.LTD.
-				308，QianShanZhong Road,TieDong District,AnShan
-				AnShan City  LiaoNing Province  114051
-				CN
-
-5C-41-E7   (hex)		Wiatec International Ltd.
-5C41E7     (base 16)		Wiatec International Ltd.
-				Unit 601-605,TaoJinDi Electronic Commercial
-				Shenzhen  GuangDong  518131
-				CN
-
-34-4C-A4   (hex)		amazipoint technology Ltd.
-344CA4     (base 16)		amazipoint technology Ltd.
-				1F,No. 14, Aly. 32, Ln. 133, Zhongyang Rd.,
-				 New Taipei City,    231
-				TW
-
-A8-F0-38   (hex)		SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD
-A8F038     (base 16)		SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD
-				Room A,Forth Floor,Building B,Hengmingzhu Industrial Park,Xixiang Forist and Fruit Bureau,Qianjin Road, Baoan District,Shenzhen city,Guangdong provice
-				    518126
-				CN
-
-AC-C7-3F   (hex)		VITSMO CO., LTD.
-ACC73F     (base 16)		VITSMO CO., LTD.
-				RM1418-1419, HansinIntervalley 24 Bldg.
-				  SEOUL  135-918
-				KR
-
-74-E2-77   (hex)		Vizmonet Pte Ltd
-74E277     (base 16)		Vizmonet Pte Ltd
-				32,Canberra drive,#05-28
-				    76431
-				SG
-
-14-89-3E   (hex)		VIXTEL TECHNOLOGIES LIMTED
-14893E     (base 16)		VIXTEL TECHNOLOGIES LIMTED
-				ROOM 1409, 14/F, BLOCK B, KAILEY CENTER
-				CHAI WAN    
-				HK
-
-BC-54-F9   (hex)		Drogoo Technology Co., Ltd.
-BC54F9     (base 16)		Drogoo Technology Co., Ltd.
-				Shenzhen Dayun software town 17 2 floor
-				Shenzhen  Guangdong  518172
-				CN
-
-78-FC-14   (hex)		Family Zone Cyber Safety Ltd 
-78FC14     (base 16)		Family Zone Cyber Safety Ltd 
-				175 Heytesbury Rd
-				Subiaco  WA  6008
-				AU
-
-38-09-A4   (hex)		Firefly Integrations
-3809A4     (base 16)		Firefly Integrations
-				1013 Elroy Dr
-				Middlebury  IN  46540
-				US
-
-BC-E7-67   (hex)		Quanzhou  TDX Electronics Co., Ltd
-BCE767     (base 16)		Quanzhou  TDX Electronics Co., Ltd
-				Hi-tech Park economic and tech development zone
-				Quanzhou  Fujian province  362005
-				CN
-
-FC-AF-AC   (hex)		Socionext Inc.
-FCAFAC     (base 16)		Socionext Inc.
-				19 Nishikujo-Kasuga-cho
-				Minaki-ku  Kyoto  601-8413
-				JP
-
-BC-4D-FB   (hex)		Hitron Technologies. Inc
-BC4DFB     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-2C-33-7A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-2C337A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-84-DD-B7   (hex)		Cilag GmbH International
-84DDB7     (base 16)		Cilag GmbH International
-				Gubelstrasse 34
-				Zug  _  CH-6300
-				CH
-
-08-EF-AB   (hex)		SAYME WIRELESS SENSOR NETWORK
-08EFAB     (base 16)		SAYME WIRELESS SENSOR NETWORK
-				Calle Albert Einstein 18, 4a
-				Santander  Cantabria  39011
-				ES
-
-70-76-FF   (hex)		KERLINK
-7076FF     (base 16)		KERLINK
-				1 rue Jacqueline AURIOL
-				THORIGNE FOUILLARD    35235
-				FR
-
-14-36-C6   (hex)		Lenovo Mobile Communication Technology Ltd.
-1436C6     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999, Qishan North 2nd Road, Information & Optoelectronics Park,
-				Xiamen  Fujian  361006
-				
-
-68-F7-28   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-68F728     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-38-2C-4A   (hex)		ASUSTek COMPUTER INC.
-382C4A     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-30-73-50   (hex)		Inpeco SA
-307350     (base 16)		Inpeco SA
-				Via San Gottardo 10
-				Lugano  Ticino  6900
-				CH
-
-DC-EC-06   (hex)		Heimi Network Technology Co., Ltd.
-DCEC06     (base 16)		Heimi Network Technology Co., Ltd.
-				Room 12B12, Block A2, Long-Term World Building,
-				Beijing  Beijing  100080
-				CN
-
-CC-BD-D3   (hex)		Ultimaker B.V.
-CCBDD3     (base 16)		Ultimaker B.V.
-				Burgemeester Rozeveld van de Venlaan 11
-				Geldermalsen  Gelderland  4191 PL
-				NL
-
-8C-E7-8C   (hex)		DK Networks
-8CE78C     (base 16)		DK Networks
-				20F-3, No.689, Zhong-Zheng Road, Zhong-He Dist.
-				New Taipei City  Taiwan  235
-				TW
-
-54-51-46   (hex)		AMG Systems Ltd.
-545146     (base 16)		AMG Systems Ltd.
-				3 The Omega Centre
-				Biggleswade  Bedfordshire  SG18 8QB
-				GB
-
-84-63-D6   (hex)		Microsoft Corporation
-8463D6     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-EC-13-B2   (hex)		Netonix
-EC13B2     (base 16)		Netonix
-				6 East Main St
-				Leola  PA  17540
-				US
-
-10-4E-07   (hex)		Shanghai Genvision Industries Co.,Ltd
-104E07     (base 16)		Shanghai Genvision Industries Co.,Ltd
-				2/F Building E,NO.55,Luo Jin Road,MinHang District,Shanghai
-				Shanghai  Shanghai  200237
-				CN
-
-04-9B-9C   (hex)		Eadingcore  Intelligent Technology Co., Ltd.
-049B9C     (base 16)		Eadingcore  Intelligent Technology Co., Ltd.
-				No. 169 Lijia city C District comprehensive 3 layer C3-10 mall，Five-One road
-				Fuzhou  Fujian  350000
-				CN
-
-84-26-90   (hex)		BEIJING THOUGHT SCIENCE CO.,LTD.
-842690     (base 16)		BEIJING THOUGHT SCIENCE CO.,LTD.
-				1-1102,Intermational Business Park,No.1 ShangDi Xinxi Rd,Haidian District,Beijing
-				beijing  beijing  100085
-				CN
-
-80-19-67   (hex)		Shanghai Reallytek Information Technology  Co.,Ltd
-801967     (base 16)		Shanghai Reallytek Information Technology  Co.,Ltd
-				906 Room,No.1 Building,No.3000 Longdong Avenue
-				  Shanghai  201203
-				CN
-
-2C-F7-F1   (hex)		Seeed Technology Inc.
-2CF7F1     (base 16)		Seeed Technology Inc.
-				 5th Floor, 8th Building, Shiling industrial Park, XiLi Town, NanShan dist. Shenzhen
-				ShenZhen  GuangDong  518055
-				CN
-
-3C-1E-13   (hex)		HANGZHOU SUNRISE TECHNOLOGY CO., LTD
-3C1E13     (base 16)		HANGZHOU SUNRISE TECHNOLOGY CO., LTD
-				No.9, LongTan Road, CangQian Town, YuHang District, Hangzhou, China
-				HangZhou  ZheJiang  311121
-				CN
-
-08-11-5E   (hex)		Bitel Co., Ltd.
-08115E     (base 16)		Bitel Co., Ltd.
-				9F Yohyun B/D, 242-29, Nonhyun-dong
-				Seoul  Gangnam-gu  135830
-				KR
-
-08-81-BC   (hex)		HongKong Ipro Technology Co., Limited
-0881BC     (base 16)		HongKong Ipro Technology Co., Limited
-				Flat/Rm A3 9/F Silvercorp Int Tower
-				  HONGKONG  999077
-				HK
-
-C0-98-79   (hex)		Acer Inc.
-C09879     (base 16)		Acer Inc.
-				8F, 88, Sec.1, Xintai 5th Rd.
-				New Taipei City  N/A  221
-				TW
-
-B8-4F-D5   (hex)		Microsoft Corporation
-B84FD5     (base 16)		Microsoft Corporation
-				1 Microsoft Way
-				Redmond  Washington  98052
-				FI
-
-D8-4A-87   (hex)		OI ELECTRIC CO.,LTD
-D84A87     (base 16)		OI ELECTRIC CO.,LTD
-				7-3-16 KIKUNA
-				YOKOHAMA  KANAGAWA-KEN  222-0011
-				JP
-
-F0-3D-29   (hex)		Actility
-F03D29     (base 16)		Actility
-				110 rue des Poissonniers
-				Paris  Paris  75018
-				FR
-
-88-70-8C   (hex)		Lenovo Mobile Communication Technology Ltd.
-88708C     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999, Qishan North 2nd Road, Information & Optoelectronics Park,
-				Xiamen  Fujian  361006
-				
-
-50-14-B5   (hex)		Richfit Information Technology Co., Ltd
-5014B5     (base 16)		Richfit Information Technology Co., Ltd
-				Room 1501, Gehua Tower, Suite N0.1, Qinglong lane, Dongcheng District
-				Beijing  Beijing  100007
-				CN
-
-DC-DA-4F   (hex)		GETCK TECHNOLOGY,  INC
-DCDA4F     (base 16)		GETCK TECHNOLOGY,  INC
-				Room 508, NO .48 ZhengYi road
-				  SHANGHAI  200082
-				CN
-
-10-12-18   (hex)		Korins Inc.
-101218     (base 16)		Korins Inc.
-				Rm. 608, Suntechcity Bldg.
-				Seongnam  Gyeonggi  462-725
-				KR
-
-34-28-F0   (hex)		ATN International Limited
-3428F0     (base 16)		ATN International Limited
-				4210, Office Tower, Convention Plaza
-				Hong Kong  Hong Kong  00000
-				HK
-
-CC-10-A3   (hex)		Beijing Nan Bao Technology Co., Ltd.
-CC10A3     (base 16)		Beijing Nan Bao Technology Co., Ltd.
-				Room 8476，Floor 8,Building 3
-				Shijingshan District  Beijing  100041
-				CN
-
-5C-AA-FD   (hex)		Sonos, Inc.
-5CAAFD     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara  CA  93101
-				US
-
-14-ED-E4   (hex)		Kaiam Corporation
-14EDE4     (base 16)		Kaiam Corporation
-				39677 Eureka Drive
-				Newark  California  94560
-				US
-
-D0-12-42   (hex)		BIOS Corporation
-D01242     (base 16)		BIOS Corporation
-				2-43-15 Tomigaya
-				Shibuya-ku  TOKYO  151-0063
-				JP
-
-60-36-96   (hex)		The Sapling Company
-603696     (base 16)		The Sapling Company
-				1633 Republic Rd
-				Huntingdon Valley  PA  19006
-				US
-
-54-FF-CF   (hex)		Mopria Alliance
-54FFCF     (base 16)		Mopria Alliance
-				2400 Camino Ramon, Ste #375
-				San Ramon  CA  94583
-				US
-
-F4-F2-6D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-F4F26D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-40-4E-EB   (hex)		Higher Way Electronic Co., Ltd.
-404EEB     (base 16)		Higher Way Electronic Co., Ltd.
-				No.15 Jingke E. Rd., Nantun District
-				  Taichung  408
-				TW
-
-C4-56-FE   (hex)		Lava International Ltd.
-C456FE     (base 16)		Lava International Ltd.
-				Room 705, Block A, HengYue Building
-				  Shanghai  518054
-				CN
-
-AC-B7-4F   (hex)		METEL s.r.o.
-ACB74F     (base 16)		METEL s.r.o.
-				Zizkuv Kopec 617
-				Ceska Skalice  NA  55203
-				CZ
-
-C0-EE-FB   (hex)		OnePlus Tech (Shenzhen) Ltd
-C0EEFB     (base 16)		OnePlus Tech (Shenzhen) Ltd
-				18F Tairan Building C, Tairan 8th Road  Chegongmiao, Futian
-				Shenzhen  Guangdong  518040
-				CN
-
-30-42-25   (hex)		BURG-WÄCHTER KG
-304225     (base 16)		BURG-WÄCHTER KG
-				Altenhofer Weg 15
-				Wetter  NRW  58300
-				DE
-
-FC-DB-B3   (hex)		Murata Manufacturing Co., Ltd.
-FCDBB3     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-CC-F5-38   (hex)		3isysnetworks
-CCF538     (base 16)		3isysnetworks
-				11F-2 No1247 , Jung Jeng RD ,
-				Taipei  Taiwan  0000
-				TW
-
-B8-BD-79   (hex)		TrendPoint Systems
-B8BD79     (base 16)		TrendPoint Systems
-				1595 East 6th Street
-				Corona  CA  92879
-				US
-
-74-F4-13   (hex)		Maxwell Forest
-74F413     (base 16)		Maxwell Forest
-				Level 2, 51 Murray Street
-				Pyrmont  NSW  2009
-				AU
-
-A0-06-27   (hex)		NEXPA System
-A00627     (base 16)		NEXPA System
-				#105, YBS bldg,227-1 Yongdap-Dong
-				  Seoul  ASI/KR/KS013/SEOUL
-				KR
-
-30-33-35   (hex)		Boosty
-303335     (base 16)		Boosty
-				40 Princes Street
-				Ipswich  Suffolk  IP11RJ
-				GB
-
-4C-9E-FF   (hex)		Zyxel Communications Corporation
-4C9EFF     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-BC-9C-C5   (hex)		Beijing Huafei Technology Co., Ltd.
-BC9CC5     (base 16)		Beijing Huafei Technology Co., Ltd.
-				2 floor, Research building, Guanghua Pioneer Park, No.18, Anningzhuang East Rd, Haidian District, Beijing, China.
-				Beijing  Beijing  100085
-				CN
-
-5C-B8-CB   (hex)		Allis Communications
-5CB8CB     (base 16)		Allis Communications
-				10F.-3,No.31-1, Lane 169 Kangning St.,
-				New Taipei City  New Taipei City  221
-				TW
-
-34-F0-CA   (hex)		Shenzhen Linghangyuan Digital Technology Co.,Ltd.
-34F0CA     (base 16)		Shenzhen Linghangyuan Digital Technology Co.,Ltd.
-				Building R, Linghangyuan Industrial Park, No. 163 Banxuegang Road, Longgang Distrial, Shenzhen, China
-				Shenzhen  Guangdong  518129
-				CN
-
-70-72-0D   (hex)		Lenovo Mobile Communication Technology Ltd.
-70720D     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999, Qishan North 2nd Road, Information & Optoelectronics Park, Torch Hi-tech Industry Development Zone, Xiamen, P.R.China
-				Xiamen  Fujian  361000
-				CN
-
-3C-CD-5A   (hex)		Technische Alternative GmbH
-3CCD5A     (base 16)		Technische Alternative GmbH
-				Langestr. 124
-				Amaliendorf  Lower Austria  A-3872
-				AT
-
-FC-AA-14   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-FCAA14     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
-				Pin-Jen  Taoyuan  324
-				TW
-
-94-D6-0E   (hex)		shenzhen yunmao information technologies co., ltd
-94D60E     (base 16)		shenzhen yunmao information technologies co., ltd
-				H4-3A, Twelve Oaks Manor, bulong road
-				shenzhen  guanggong  518127
-				CN
-
-50-67-87   (hex)		Planet Networks
-506787     (base 16)		Planet Networks
-				1 Ivy Crest Ln
-				Rockaway  NJ  07866
-				US
-
-8C-BF-9D   (hex)		Shanghai Xinyou Information Technology Ltd. Co.
-8CBF9D     (base 16)		Shanghai Xinyou Information Technology Ltd. Co.
-				905，418 Guiqing Road, Xuhui District,
-				Shanghai  Shanghai  200233
-				CN
-
-9C-AD-97   (hex)		Hon Hai Precision Ind. Co.,Ltd.
-9CAD97     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
-				Building D21,No.1, East Zone 1st Road
-				Chongqing  Chongqing  401332
-				CN
-
-88-29-50   (hex)		Netmoon Technology Co., Ltd
-882950     (base 16)		Netmoon Technology Co., Ltd
-				2nd Floor, Building No.1, NO.319, Qingpi Avenue
-				Wenjiang District  Chengdu  611130
-				CN
-
-7C-E5-24   (hex)		Quirky, Inc.
-7CE524     (base 16)		Quirky, Inc.
-				606 W 28th Street
-				New York  NY  10001
-				US
-
-F4-D2-61   (hex)		SEMOCON Co., Ltd
-F4D261     (base 16)		SEMOCON Co., Ltd
-				B-19F, Gunpo IT Valley, Dangjeong-dong, 17, Gosan-ro 148beon-gil,
-				Gunpo-si  Gyeonggi-do  435-833
-				KR
-
-48-D8-55   (hex)		Telvent
-48D855     (base 16)		Telvent
-				P.I. Alcobendas c/ Valgrande. 6
-				Alcobendas  Madrid  28108
-				ES
-
-08-F7-28   (hex)		GLOBO Multimedia Sp. z o.o. Sp.k.
-08F728     (base 16)		GLOBO Multimedia Sp. z o.o. Sp.k.
-				Gryfinska 104
-				Szczecin  Zachodniopomorskie  70-772
-				PL
-
-20-6E-9C   (hex)		Samsung Electronics Co.,Ltd
-206E9C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-6C-2F-2C   (hex)		Samsung Electronics Co.,Ltd
-6C2F2C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-B0-09-D3   (hex)		Avizia
-B009D3     (base 16)		Avizia
-				12018 Sunrise Valley Drive
-				Reston  VA  20191
-				US
-
-60-C1-CB   (hex)		Fujian Great Power PLC Equipment Co.,Ltd
-60C1CB     (base 16)		Fujian Great Power PLC Equipment Co.,Ltd
-				6/F.Bld.34.Zone C.Software Park
-				Fuzhou  Fujian,China  350003
-				CN
-
-BC-25-F0   (hex)		3D Display Technologies Co., Ltd.
-BC25F0     (base 16)		3D Display Technologies Co., Ltd.
-				4F., No.542-17, Zhongzheng Rd
-				New Taipei City    242
-				TW
-
-C0-3D-46   (hex)		Shanghai Sango Network Technology Co.,Ltd
-C03D46     (base 16)		Shanghai Sango Network Technology Co.,Ltd
-				No 666 Zhangheng Road
-				Pudong  Shanghai  210203
-				CN
-
-64-EA-C5   (hex)		SiboTech Automation Co., Ltd.
-64EAC5     (base 16)		SiboTech Automation Co., Ltd.
-				5th Floor, Bld 3
-				Shanghai  Shanghai  201612
-				CN
-
-30-F7-D7   (hex)		Thread Technology Co., Ltd
-30F7D7     (base 16)		Thread Technology Co., Ltd
-				4F, A Block, CYG, No.2,Mid GaoXin
-				Shenzhen  GuangDong  518055
-				CN
-
-18-22-7E   (hex)		Samsung Electronics Co.,Ltd
-18227E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-30-C7-AE   (hex)		Samsung Electronics Co.,Ltd
-30C7AE     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-D5-D9   (hex)		Shenzhen SDMC Technology Co., Ltd.
-FCD5D9     (base 16)		Shenzhen SDMC Technology Co., Ltd.
-				7/F,Block A,Huahan Bldg.,
-				Shenzhen  GuangDong  518000
-				CN
-
-74-DA-38   (hex)		Edimax Technology Co. Ltd.
-74DA38     (base 16)		Edimax Technology Co. Ltd.
-				No. 278, Xinhu 1st Road
-				Taipei City  Neihu Dist  248
-				TW
-
-E4-F4-C6   (hex)		NETGEAR
-E4F4C6     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-CC-A0-E5   (hex)		DZG Metering GmbH
-CCA0E5     (base 16)		DZG Metering GmbH
-				Heidelberger Str. 32
-				Oranienburg  Brandenburg  16515
-				DE
-
-1C-1C-FD   (hex)		Dalian Hi-Think Computer Technology, Corp
-1C1CFD     (base 16)		Dalian Hi-Think Computer Technology, Corp
-				Hi-Think Software Building,No.6 Hi-Tech Street, Qixianling Industrial Base, Hi-Tech Zone, Dalian, China
-				Dalian  LiaoNing  116023
-				CN
-
-90-AE-1B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-90AE1B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-60-E3-27   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-60E327     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-48-D1-8E   (hex)		Metis Communication Co.,Ltd
-48D18E     (base 16)		Metis Communication Co.,Ltd
-				#102-805 Digital Empire2
-				Suwon-Si  GyeongGi-Do  443-734
-				KR
-
-F8-66-01   (hex)		Suzhou Chi-tek information technology Co., Ltd
-F86601     (base 16)		Suzhou Chi-tek information technology Co., Ltd
-				Rm204C、204D, Building A7,
-				 SuZhou  Jiangsu  215123
-				CN
-
-14-56-45   (hex)		Savitech Corp.
-145645     (base 16)		Savitech Corp.
-				3F, No.309, Guangming 1st Rd.,
-				Zhubei  Hsinchu  30259
-				TW
-
-70-62-B8   (hex)		D-Link International
-7062B8     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy, Singapore
-				Singapore  Singapore  609917
-				SG
-
-AC-A9-19   (hex)		TrekStor GmbH
-ACA919     (base 16)		TrekStor GmbH
-				Kastanienallee 8-10
-				Lorsch  Hessen  64653
-				DE
-
-B0-25-AA   (hex)		Private
-B025AA     (base 16)		Private
-
-D4-B4-3E   (hex)		Messcomp Datentechnik GmbH
-D4B43E     (base 16)		Messcomp Datentechnik GmbH
-				Neudecker Str. 11
-				Wasserburg  Bayern  83512
-				DE
-
-94-C0-14   (hex)		Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek
-94C014     (base 16)		Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek
-				ul. Gdynska 32
-				PL9482565081  Mazowieckie  26-600
-				PL
-
-9C-FB-F1   (hex)		MESOMATIC GmbH & Co.KG
-9CFBF1     (base 16)		MESOMATIC GmbH & Co.KG
-				Siemensstr. 36
-				Kernen i.R.    71394
-				DE
-
-10-27-BE   (hex)		TVIP
-1027BE     (base 16)		TVIP
-				190000 ul. Decabristov, h.6 А, of.10-Н
-				  Saint-Petersburg  197227
-				RU
-
-20-87-AC   (hex)		AES motomation
-2087AC     (base 16)		AES motomation
-				48501 Warm Springs Blvd.
-				Fremont  CA  94539
-				US
-
-70-93-83   (hex)		Intelligent Optical Network High Tech CO.,LTD.
-709383     (base 16)		Intelligent Optical Network High Tech CO.,LTD.
-				Room 205,Building 11,Jia
-				Changping District  Beijing  102200
-				CN
-
-80-D4-33   (hex)		LzLabs GmbH
-80D433     (base 16)		LzLabs GmbH
-				Alte Winterthurerstrasse 14B
-				Wallisellen  Zurich  8304
-				CH
-
-B0-DA-00   (hex)		CERA ELECTRONIQUE
-B0DA00     (base 16)		CERA ELECTRONIQUE
-				PARC D&#39;ACTIVITES
-				VAL DE REUIL  HAUTE NORMANDIE  27100
-				FR
-
-1C-AB-01   (hex)		Innovolt
-1CAB01     (base 16)		Innovolt
-				14 Piedmont Center
-				Atlanta  GA  30305
-				US
-
-D8-B6-D6   (hex)		Blu Tether Limited
-D8B6D6     (base 16)		Blu Tether Limited
-				7600 Leesburg Pike
-				Falls Church  VA  22043
-				US
-
-6C-2C-06   (hex)		OOO NPP Systemotechnika-NN
-6C2C06     (base 16)		OOO NPP Systemotechnika-NN
-				Nartova lane, 2v
-				Nizhny Novgorod  Nizhegorodskaya oblast  603057
-				RU
-
-C4-91-3A   (hex)		Shenzhen Sanland Electronic Co., ltd.
-C4913A     (base 16)		Shenzhen Sanland Electronic Co., ltd.
-				3 floor,Block D, Glory Technology Industrial Park,
-				ShenZhen  Guangdong  518116
-				CN
-
-68-85-6A   (hex)		OuterLink Corporation
-68856A     (base 16)		OuterLink Corporation
-				187 Ballardvale St., Ste. A260
-				Wilmington  MA  01887
-				US
-
-94-51-BF   (hex)		Hyundai ESG
-9451BF     (base 16)		Hyundai ESG
-				Gangnam-gu
-				Seoul  KOREA, REPUBLIC OF  135-845
-				KR
-
-F0-15-A0   (hex)		KyungDong One Co., Ltd.
-F015A0     (base 16)		KyungDong One Co., Ltd.
-				205-38, Gasan digital 1-ro,
-				  Seoul  153-803
-				KR
-
-C4-4E-1F   (hex)		BlueN
-C44E1F     (base 16)		BlueN
-				121-122 3F
-				Daegu  Korea  700-809
-				KR
-
-B0-86-9E   (hex)		Chloride S.r.L
-B0869E     (base 16)		Chloride S.r.L
-				Via Fornace ,30
-				CastelGuelfo (Bologna)  Italy  40023
-				IT
-
-D0-57-A1   (hex)		Werma Signaltechnik GmbH & Co. KG
-D057A1     (base 16)		Werma Signaltechnik GmbH & Co. KG
-				Duerbheimer Strasse
-				Rietheim-Weilheim    78604
-				DE
-
-B4-B5-42   (hex)		Hubbell Power Systems, Inc.
-B4B542     (base 16)		Hubbell Power Systems, Inc.
-				8100 Churchill Ave
-				Leeds  AL  35094
-				US
-
-54-CD-EE   (hex)		ShenZhen Apexis Electronic Co.,Ltd
-54CDEE     (base 16)		ShenZhen Apexis Electronic Co.,Ltd
-				12th floor,Keji BuildiHigng
-				 ShenZhen   GuangDong   518057
-				CN
-
-88-E8-F8   (hex)		YONG TAI ELECTRONIC (DONGGUAN) LTD.
-88E8F8     (base 16)		YONG TAI ELECTRONIC (DONGGUAN) LTD.
-				Yuan Shan Bei Managed Region
-				Dong Guan  Guang Dong  523583
-				CN
-
-90-98-64   (hex)		Impex-Sat GmbH&amp;Co KG
-909864     (base 16)		Impex-Sat GmbH&amp;Co KG
-				Beim Giesshaus 7
-				Glueckstadt    25348
-				DE
-
-DC-E5-78   (hex)		Experimental Factory of Scientific Engineering and Special Design Department
-DCE578     (base 16)		Experimental Factory of Scientific Engineering and Special Design Department
-				9, Academician Semenov prospect
-				Chernogolovka  Moscow region  142432
-				RU
-
-D8-65-95   (hex)		Toy's Myth Inc.
-D86595     (base 16)		Toy's Myth Inc.
-				304, Yongsan-gu Changup-Jiwon center
-				  Seoul  140-240
-				KR
-
-F4-B5-2F   (hex)		Juniper Networks
-F4B52F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C0-F7-9D   (hex)		Powercode
-C0F79D     (base 16)		Powercode
-				300 Industrial Dr
-				Random Lake  Wisconsin  53075
-				US
-
-C4-C9-19   (hex)		Energy Imports Ltd
-C4C919     (base 16)		Energy Imports Ltd
-				306a Broadway Ave
-				Palmerston North  Manawatu  4414
-				NZ
-
-38-F0-98   (hex)		Vapor Stone Rail Systems
-38F098     (base 16)		Vapor Stone Rail Systems
-				10000 Cavendish
-				Saint-Laurent  Quebec  H4M2V1
-				CA
-
-64-E8-92   (hex)		Morio Denki Co., Ltd.
-64E892     (base 16)		Morio Denki Co., Ltd.
-				2, Nadooka
-				Ryugasaki  Ibaraki  301-0845
-				JP
-
-D8-DD-5F   (hex)		BALMUDA Inc.
-D8DD5F     (base 16)		BALMUDA Inc.
-				5-1-21 Kyonancho
-				Musashino  Tokyo  180-0023
-				JP
-
-D8-61-94   (hex)		Objetivos y Sevicios de Valor Añadido
-D86194     (base 16)		Objetivos y Sevicios de Valor Añadido
-				Calle Monte Esquinza 28, 1ºD
-				Madrid    28010
-				ES
-
-E8-FC-60   (hex)		ELCOM Innovations Private Limited
-E8FC60     (base 16)		ELCOM Innovations Private Limited
-				9TH FLOOR, MERIDIEN COMMERCIAL TOWER
-				New Delhi    110001
-				US
-
-58-9C-FC   (hex)		FreeBSD Foundation
-589CFC     (base 16)		FreeBSD Foundation
-				P.O. Box 20247
-				Boulder  CO   80308-3247
-				US
-
-70-2C-1F   (hex)		Wisol
-702C1F     (base 16)		Wisol
-				377-3, Gajang-dong, Osan-si
-				    447-210
-				KR
-
-C8-D4-29   (hex)		Muehlbauer AG
-C8D429     (base 16)		Muehlbauer AG
-				Josef-Mühlbauer-Platz 1
-				Roding  Bavaria  93426
-				DE
-
-F8-5C-45   (hex)		IC Nexus Co. Ltd.
-F85C45     (base 16)		IC Nexus Co. Ltd.
-				6F-1, No.3-2 Park Street
-				Taipei    115
-				TW
-
-AC-E0-69   (hex)		ISAAC Instruments
-ACE069     (base 16)		ISAAC Instruments
-				240 Frechette
-				Chambly  Quebec  J3L2Z5
-				CA
-
-30-B5-C2   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-30B5C2     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-E0-7F-53   (hex)		TECHBOARD SRL
-E07F53     (base 16)		TECHBOARD SRL
-				Via Della Scienza, 50
-				Modena    41122
-				IT
-
-48-FE-EA   (hex)		HOMA B.V.
-48FEEA     (base 16)		HOMA B.V.
-				P.O. Box 545
-				Enschede    7500 AM
-				NL
-
-E8-EA-6A   (hex)		StarTech.com
-E8EA6A     (base 16)		StarTech.com
-				45 Artisans Cres
-				London  Ontario  N5V5E9
-				CA
-
-04-DB-8A   (hex)		Suntech International Ltd.
-04DB8A     (base 16)		Suntech International Ltd.
-				Room 605, IT Mirae Tower
-				  Seoul  153-760
-				KR
-
-90-DF-B7   (hex)		s.m.s smart microwave sensors GmbH
-90DFB7     (base 16)		s.m.s smart microwave sensors GmbH
-				In den Waashainen 1
-				Braunschweig  NI  38108
-				DE
-
-08-57-00   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-085700     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-FC-27-A2   (hex)		TRANS ELECTRIC CO., LTD.
-FC27A2     (base 16)		TRANS ELECTRIC CO., LTD.
-				771,Sec.2 Chungsan Rd,Huatang
-				Changhua  Taiwan  503
-				TW
-
-FC-BB-A1   (hex)		Shenzhen Minicreate Technology Co.,Ltd
-FCBBA1     (base 16)		Shenzhen Minicreate Technology Co.,Ltd
-				5/F.,5th,Building,Animation Park,Yuehai Road
-				Shenzhen  Guangdong  518066
-				CN
-
-F0-8A-28   (hex)		JIANGSU HENGSION ELECTRONIC S and T CO.,LTD
-F08A28     (base 16)		JIANGSU HENGSION ELECTRONIC S and T CO.,LTD
-				4F,Building 3
-				ChangZhou  Jiangsu  213125
-				CN
-
-28-BB-59   (hex)		RNET Technologies, Inc.
-28BB59     (base 16)		RNET Technologies, Inc.
-				240. W. Elmwood Dr.
-				Dayton  OHIO  45459-4248
-				US
-
-24-26-42   (hex)		SHARP Corporation.
-242642     (base 16)		SHARP Corporation.
-				22-22,Abeno-ku
-				Osaka-City  Osaka-Prefecture  545-8522
-				JP
-
-34-DE-34   (hex)		zte corporation
-34DE34     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-FC-16-07   (hex)		Taian Technology(Wuxi) Co.,Ltd.
-FC1607     (base 16)		Taian Technology(Wuxi) Co.,Ltd.
-				Gaolang East Road No.29
-				Wuxi  Jiangsu  214000
-				CN
-
-AC-02-CA   (hex)		HI Solutions, Inc.
-AC02CA     (base 16)		HI Solutions, Inc.
-				4105 Royal Drive
-				Kennesaw  GA  30144
-				US
-
-74-6F-3D   (hex)		Contec GmbH
-746F3D     (base 16)		Contec GmbH
-				Oberahrer Straße 9
-				Sainerholz  RP  56244
-				DE
-
-4C-0D-EE   (hex)		JABIL CIRCUIT (SHANGHAI) LTD.
-4C0DEE     (base 16)		JABIL CIRCUIT (SHANGHAI) LTD.
-				FL5-UNIT A2 NO 1528 GUMEI ROAD
-				  SHANGHAI  200233
-				CN
-
-D0-63-4D   (hex)		Meiko Maschinenbau GmbH &amp; Co. KG
-D0634D     (base 16)		Meiko Maschinenbau GmbH &amp; Co. KG
-				Englerstraße 3
-				Offenburg    77652
-				DE
-
-00-8B-43   (hex)		RFTECH
-008B43     (base 16)		RFTECH
-				Cheoin-gu
-				Yongin  Gyeonggi  449-871
-				KR
-
-8C-41-F2   (hex)		RDA Technologies Ltd.
-8C41F2     (base 16)		RDA Technologies Ltd.
-				Suite 2203, CC Wu Building,
-				WanChai  Hong Kong  00000
-				HK
-
-E0-36-E3   (hex)		Stage One International Co., Ltd.
-E036E3     (base 16)		Stage One International Co., Ltd.
-				Fl. 5., No. 10., Lane 321, Yangguang St.,
-				Taipei City    11491
-				TW
-
-DC-05-2F   (hex)		National Products Inc.
-DC052F     (base 16)		National Products Inc.
-				8410 Dallas Ave S.
-				Seattle  WA  98108
-				US
-
-D0-BD-01   (hex)		DS International
-D0BD01     (base 16)		DS International
-				806ho, ACE HITECH21 B/D
-				Busan  Busan  612-020
-				KR
-
-8C-DE-99   (hex)		Comlab Inc.
-8CDE99     (base 16)		Comlab Inc.
-				2300 Leon-Harmel, suite 220
-				Quebec  Quebec  G1N 4L2
-				CA
-
-4C-E1-BB   (hex)		Zhuhai HiFocus Technology Co., Ltd.
-4CE1BB     (base 16)		Zhuhai HiFocus Technology Co., Ltd.
-				The second floor of the friend industrial park,
-				zhuhai  guangdong  519080
-				US
-
-24-A8-7D   (hex)		Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.
-24A87D     (base 16)		Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.
-				101 Moo 2 Teparak Road ,
-				Bangsaothong  Samutprakarn  10540
-				TH
-
-A4-09-CB   (hex)		Alfred Kaercher GmbH &amp; Co KG
-A409CB     (base 16)		Alfred Kaercher GmbH &amp; Co KG
-				Alfred Kaercher Gmbh &amp; Co KG
-				Winnenden  Baden-Wuerttemberg  71364
-				DE
-
-8C-56-9D   (hex)		Imaging Solutions Group
-8C569D     (base 16)		Imaging Solutions Group
-				1387 Fairport Rd
-				Fairport  NY  14450
-				US
-
-40-B6-B1   (hex)		SUNGSAM CO,.Ltd
-40B6B1     (base 16)		SUNGSAM CO,.Ltd
-				SUNGSAM Bldg, 7-1, BAnga-ro 23beon-gil, Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-829
-				KR
-
-84-FE-9E   (hex)		RTC Industries, Inc.
-84FE9E     (base 16)		RTC Industries, Inc.
-				2800 Golf Road
-				Rolling Meadows  IL  60008
-				US
-
-FC-4B-1C   (hex)		INTERSENSOR S.R.L.
-FC4B1C     (base 16)		INTERSENSOR S.R.L.
-				101 Bd. Iuliu Maniu str., Bl. A2, Sc. 2, #47
-				  Bucharest  061094
-				RO
-
-40-30-67   (hex)		Conlog (Pty) Ltd
-403067     (base 16)		Conlog (Pty) Ltd
-				270 Felix Dlamini Road
-				Durban  Kwa-zulu Natal  4000
-				ZA
-
-E8-61-83   (hex)		Black Diamond Advanced Technology, LLC
-E86183     (base 16)		Black Diamond Advanced Technology, LLC
-				7450 S. Priest Drive
-				Tempe  AZ  85283
-				US
-
-38-C9-A9   (hex)		SMART High Reliability Solutions, Inc.
-38C9A9     (base 16)		SMART High Reliability Solutions, Inc.
-				1325 N Fiesta Blvd., #101
-				Gilbert  AZ  85233
-				US
-
-50-1A-C5   (hex)		Microsoft
-501AC5     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-B0-98-9F   (hex)		LG CNS
-B0989F     (base 16)		LG CNS
-				53-94 Jinwisandan-ro, Jinwuy-Myun
-				Pyungtaek-City  Kyunggi-Do  451-862
-				KR
-
-C0-F1-C4   (hex)		Pacidal Corporation Ltd.
-C0F1C4     (base 16)		Pacidal Corporation Ltd.
-				3F., No. 11, Aly 3, Ln. 123, Sec. 3 Ren'ai Rd.
-				Taipei City    106
-				TW
-
-60-03-47   (hex)		Billion Electric Co. Ltd.
-600347     (base 16)		Billion Electric Co. Ltd.
-				8F., No.192, Sec. 2, Zhongxing Rd.,
-				New Taipei City,    231
-				TW
-
-F0-D3-A7   (hex)		CobaltRay Co., Ltd
-F0D3A7     (base 16)		CobaltRay Co., Ltd
-				Room 409,Humanteco Building,#281-16
-				Seoul    133120
-				KR
-
-38-A5-3C   (hex)		COMECER Netherlands
-38A53C     (base 16)		COMECER Netherlands
-				Madame Curieweg 1
-				Joure  Friesland  8500 AC
-				NL
-
-5C-FF-FF   (hex)		Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd
-5CFFFF     (base 16)		Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd
-				3/F, B5 Building, Xinfu Industrial Park, Heping Village
-				Shenzhen, Guangdong 518101    
-				US
-
-08-52-40   (hex)		EbV Elektronikbau- und Vertriebs GmbH
-085240     (base 16)		EbV Elektronikbau- und Vertriebs GmbH
-				Heisterner Weg 8 - 12
-				Burbach  Nordrhein-Westfalen  57299
-				DE
-
-B8-C1-A2   (hex)		Dragon Path Technologies Co., Limited
-B8C1A2     (base 16)		Dragon Path Technologies Co., Limited
-				12/F., San Toi Building,
-				Central  Hong Kong  
-				HK
-
-80-F2-5E   (hex)		Kyynel
-80F25E     (base 16)		Kyynel
-				Pirttikuja 3
-				  Oulu  90450
-				FI
-
-68-69-2E   (hex)		Zycoo Co.,Ltd
-68692E     (base 16)		Zycoo Co.,Ltd
-				F7,B7,Tianfu Software park
-				Chengdu  Sichuan  610000
-				CN
-
-D4-68-67   (hex)		Neoventus Design Group
-D46867     (base 16)		Neoventus Design Group
-				2350 Commonwealth Dr, Suite E
-				Charlottesville  VA  22901
-				US
-
-2C-18-AE   (hex)		Trend Electronics Co., Ltd.
-2C18AE     (base 16)		Trend Electronics Co., Ltd.
-				4F-3, No 17, Lane 77, Sec. 2
-				Taipei  Taiwan  10446
-				TW
-
-F8-1C-E5   (hex)		Telefonbau Behnke GmbH
-F81CE5     (base 16)		Telefonbau Behnke GmbH
-				Robert-Jungk-Str. 3
-				Kirkel  Saarland  66459
-				DE
-
-88-91-66   (hex)		Viewcooper Corp.
-889166     (base 16)		Viewcooper Corp.
-				Room 1061, A,Seven Block, No.128 Huayuan Rd
-				SHANGHAI    200083
-				CN
-
-10-33-78   (hex)		FLECTRON Co., LTD
-103378     (base 16)		FLECTRON Co., LTD
-				A-625, Sigma2, Tancheonsang-ro 164
-				Seongnam-si  Gyeonggi-do  463-741
-				KR
-
-14-ED-A5   (hex)		Wächter GmbH Sicherheitssysteme
-14EDA5     (base 16)		Wächter GmbH Sicherheitssysteme
-				Alte Ricklinger Str. 3
-				Hannover  Garbsen  30823
-				DE
-
-50-C0-06   (hex)		Carmanah Signs
-50C006     (base 16)		Carmanah Signs
-				#5 6025 12 Street SE
-				Calgary  Alberta  T2H2K1
-				CA
-
-04-CB-1D   (hex)		Traka plc
-04CB1D     (base 16)		Traka plc
-				30 Stilebrook Road
-				Bucks  Buckinghamshire  MK46 5EA
-				GB
-
-A4-E9-A3   (hex)		Honest Technology Co., Ltd
-A4E9A3     (base 16)		Honest Technology Co., Ltd
-				5F, KyungDong Bldg. 906-5,
-				  Daejeon  305-330
-				KR
-
-A0-E5-E9   (hex)		enimai Inc
-A0E5E9     (base 16)		enimai Inc
-				701 Villa St
-				Mountain View  California  94041
-				US
-
-9C-21-6A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-9C216A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-F8-62-AA   (hex)		xn systems
-F862AA     (base 16)		xn systems
-				#917, Worldmerdian 2nd
-				  Seoul  153759
-				KR
-
-10-7B-EF   (hex)		Zyxel Communications Corporation
-107BEF     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-B4-62-AD   (hex)		Elysia Germany GmbH
-B462AD     (base 16)		Elysia Germany GmbH
-				Benzstr.4
-				Straubenhardt  Baden-Wuerttemberg  75334
-				DE
-
-34-5C-40   (hex)		Cargt Holdings LLC
-345C40     (base 16)		Cargt Holdings LLC
-				8820 Hillside Dr
-				Lenexa  KANSAS (KS)  66227
-				US
-
-68-19-3F   (hex)		Digital Airways
-68193F     (base 16)		Digital Airways
-				5, Place Jean SIARD
-				ARGENTAN  NORMANDY  61200
-				FR
-
-B4-75-0E   (hex)		Belkin International Inc.
-B4750E     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista  Ca.   90094
-				US
-
-94-10-3E   (hex)		Belkin International Inc.
-94103E     (base 16)		Belkin International Inc.
-				12045 East Waterfront Drive
-				Playa Vista  Ca.   90094
-				US
-
-7C-B7-33   (hex)		ASKEY COMPUTER CORP
-7CB733     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-30-51-F8   (hex)		BYK-Gardner GmbH
-3051F8     (base 16)		BYK-Gardner GmbH
-				Lausitzer Strasse 8
-				Geretsried  Bavarian  82538
-				DE
-
-E8-F2-26   (hex)		MILLSON CUSTOM SOLUTIONS INC.
-E8F226     (base 16)		MILLSON CUSTOM SOLUTIONS INC.
-				2036 COLUMBIA STREET
-				VANCOUVER  BRITISH COLUMBIA  V5Y 3E1
-				CA
-
-44-EE-30   (hex)		Budelmann Elektronik GmbH
-44EE30     (base 16)		Budelmann Elektronik GmbH
-				Von-Renesse-Weg 60
-				Muenster  North Rhine-Westphalia  48163
-				DE
-
-FC-1E-16   (hex)		IPEVO corp
-FC1E16     (base 16)		IPEVO corp
-				3F,No.53,Bo-ai Road,Taipei 100,Taiwan
-				Taipei    10044
-				TW
-
-3C-6E-63   (hex)		Mitron OY
-3C6E63     (base 16)		Mitron OY
-				Yrittäjankaari 19
-				FORSSA  Kanta-Hame  30420
-				FI
-
-A4-05-9E   (hex)		STA Infinity LLP
-A4059E     (base 16)		STA Infinity LLP
-				WINNINGTON HOUSE
-				London    N12 0DR
-				GB
-
-A0-BF-50   (hex)		S.C. ADD-PRODUCTION S.R.L.
-A0BF50     (base 16)		S.C. ADD-PRODUCTION S.R.L.
-				36, Dragomirna str.
-				Chisinau    MD-2008
-				MD
-
-E8-D4-E0   (hex)		Beijing BenyWave Technology Co., Ltd.
-E8D4E0     (base 16)		Beijing BenyWave Technology Co., Ltd.
-				No.55, Jiachuang Road, Taihu Town
-				  Beijing  101111
-				CN
-
-FC-01-9E   (hex)		VIEVU
-FC019E     (base 16)		VIEVU
-				105 W. John St
-				Seattle  WA  98119
-				US
-
-64-21-84   (hex)		Nippon Denki Kagaku Co.,LTD
-642184     (base 16)		Nippon Denki Kagaku Co.,LTD
-				Nishino Gotochou 18
-				Kyoto City  Kyoto Pref  607-8356
-				JP
-
-24-64-EF   (hex)		CYG SUNRI CO.,LTD.
-2464EF     (base 16)		CYG SUNRI CO.,LTD.
-				No. 3, Langshan 1st Road, North Area of Hi-Tech Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-D8-27-0C   (hex)		MaxTronic International Co., Ltd.
-D8270C     (base 16)		MaxTronic International Co., Ltd.
-				4F., No.529, Zhongzheng Rd., Xindian Dist.
-				New Taipei City  Taiwan  231
-				TW
-
-B4-CC-E9   (hex)		PROSYST
-B4CCE9     (base 16)		PROSYST
-				2C Rue de l' EPINOY
-				TEMPLEMARS    59175
-				FR
-
-C4-D6-55   (hex)		Tercel technology co.,ltd
-C4D655     (base 16)		Tercel technology co.,ltd
-				Huafa South Road, Futian District,
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-58-BD-F9   (hex)		Sigrand
-58BDF9     (base 16)		Sigrand
-				UNIT 602 6/F, Causeway Bay Comm Bldg,
-				  Hong Kong  999077
-				HK
-
-C0-C6-87   (hex)		Cisco SPVTG
-C0C687     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-C4-93-80   (hex)		Speedytel technology
-C49380     (base 16)		Speedytel technology
-				ROOM 1103,HANG SENG MONGKOK BUILDING,677 NATHAN ROAD,MONGKOK,KOWLOON
-				HONG KONG  HONG KONG  
-				HK
-
-00-7D-FA   (hex)		Volkswagen Group of America
-007DFA     (base 16)		Volkswagen Group of America
-				3800 Hamlin Rd
-				Auburn Hills  MI  48326
-				US
-
-2C-71-55   (hex)		HiveMotion
-2C7155     (base 16)		HiveMotion
-				1806, STX-V Tower
-				Seoul    153-803
-				KR
-
-20-18-0E   (hex)		Shenzhen Sunchip Technology Co., Ltd
-20180E     (base 16)		Shenzhen Sunchip Technology Co., Ltd
-				Room 818-831, Building B1, Mingyou Purchasing Center, Bao'an District, Shenzhen, China
-				Shenzhen  Guangdong  518101
-				CN
-
-80-B2-19   (hex)		ELEKTRON TECHNOLOGY UK LIMITED
-80B219     (base 16)		ELEKTRON TECHNOLOGY UK LIMITED
-				BROERS BUILDING,
-				CAMBRIDGE  CAMBS  CB3 0FA
-				US
-
-E0-AE-B2   (hex)		Bender GmbH &amp; Co.KG
-E0AEB2     (base 16)		Bender GmbH &amp; Co.KG
-				Londorfer Straße 65
-				Grünberg  Hessen  35305
-				DE
-
-F8-4A-7F   (hex)		Innometriks Inc
-F84A7F     (base 16)		Innometriks Inc
-				3654 Ocean Ranch Blvd
-				Oceanside  Ca  92056
-				US
-
-74-A4-B5   (hex)		Powerleader Science and Technology Co. Ltd.
-74A4B5     (base 16)		Powerleader Science and Technology Co. Ltd.
-				Powerleader Technology Park, #3 Guanyi Rd.
-				Shenzhen  Guangdong  518110
-				CN
-
-90-9F-43   (hex)		Accutron Instruments Inc.
-909F43     (base 16)		Accutron Instruments Inc.
-				11 Mary Street
-				Sudbury  Ontario  P3C1B4
-				CA
-
-28-94-AF   (hex)		Samhwa Telecom
-2894AF     (base 16)		Samhwa Telecom
-				293-7, Doksan-dong
-				Seoul  Seoul  153-813
-				KR
-
-AC-50-36   (hex)		Pi-Coral Inc
-AC5036     (base 16)		Pi-Coral Inc
-				2130 Gold St
-				San Jose  CA  95002-1177
-				US
-
-0C-9B-13   (hex)		Shanghai Magic Mobile Telecommunication Co.Ltd.
-0C9B13     (base 16)		Shanghai Magic Mobile Telecommunication Co.Ltd.
-				 B7 parts, second floor
-				Waigaoqiao Free Trade Zone  Shanghai  200131
-				CN
-
-94-BF-1E   (hex)		eflow Inc. / Smart Device Planning and Development Division
-94BF1E     (base 16)		eflow Inc. / Smart Device Planning and Development Division
-				Ryoka-Yoyogi building 3F
-				Shibuya-Ku  TOKYO  151-0051
-				JP
-
-E8-51-6E   (hex)		TSMART Inc.
-E8516E     (base 16)		TSMART Inc.
-				The-O-valley 306,
-				Anyang-si  Gyeonggi-do  431-080
-				KR
-
-AC-22-0B   (hex)		ASUSTek COMPUTER INC.
-AC220B     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-B8-87-A8   (hex)		Step Ahead Innovations Inc.
-B887A8     (base 16)		Step Ahead Innovations Inc.
-				20 Wintersport Ln.
-				Williston  VT  05495
-				US
-
-E0-A1-98   (hex)		NOJA Power Switchgear Pty Ltd
-E0A198     (base 16)		NOJA Power Switchgear Pty Ltd
-				16 Archimedes Place
-				Murarrie  QLD  4172
-				AU
-
-88-35-4C   (hex)		Transics
-88354C     (base 16)		Transics
-				p/a Ter Waarde 91
-				Ieper    8900
-				BE
-
-3C-61-04   (hex)		Juniper Networks
-3C6104     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-CC-4A-E1   (hex)		fourtec -Fourier Technologies
-CC4AE1     (base 16)		fourtec -Fourier Technologies
-				16 Hamelacha St. POB 11681
-				Rosh Ha’ayin    48091
-				IL
-
-8C-4B-59   (hex)		3D Imaging & Simulations Corp
-8C4B59     (base 16)		3D Imaging & Simulations Corp
-				815, Timnip-Dong, Yuseong-Gu
-				  Daejeon  305510
-				KR
-
-5C-33-27   (hex)		Spazio Italia srl
-5C3327     (base 16)		Spazio Italia srl
-				Via G.Galilei, 50
-				Padenghe sul Garda  BS  25080
-				IT
-
-50-76-91   (hex)		Tekpea, Inc.
-507691     (base 16)		Tekpea, Inc.
-				2225 East Bayshore Road
-				Palo Alto  California  94303
-				US
-
-28-F5-32   (hex)		ADD-Engineering BV
-28F532     (base 16)		ADD-Engineering BV
-				P.O. BOX 5893
-				ROTTERDAM  ZH  3008 AW
-				NL
-
-94-40-A2   (hex)		Anywave Communication Technologies, Inc.
-9440A2     (base 16)		Anywave Communication Technologies, Inc.
-				300 Knightsbridge Parkway, Suite 150
-				Lincolnshire  IL  60069
-				US
-
-1C-86-AD   (hex)		MCT CO., LTD.
-1C86AD     (base 16)		MCT CO., LTD.
-				C-815/816, Garden5 Works, 52 Chungmin-ro
-				Songpa-gu  Seoul  138-961
-				KR
-
-28-D9-3E   (hex)		Telecor Inc.
-28D93E     (base 16)		Telecor Inc.
-				6205 Kestrel Road
-				Mississauga  Ontario  L5T 2A1
-				CA
-
-64-0B-4A   (hex)		Digital Telecom Technology Limited
-640B4A     (base 16)		Digital Telecom Technology Limited
-				1708 Nan Fung Tower,
-				    00852
-				US
-
-38-42-33   (hex)		Wildeboer Bauteile GmbH
-384233     (base 16)		Wildeboer Bauteile GmbH
-				Marker Weg 11
-				Weener  Niedersachsen  26826
-				US
-
-3C-8A-B0   (hex)		Juniper Networks
-3C8AB0     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C0-34-B4   (hex)		Gigastone Corporation
-C034B4     (base 16)		Gigastone Corporation
-				12F.NO 480. Rueiguang Rd.
-				Taipei    11492
-				TW
-
-CC-E8-AC   (hex)		SOYEA Technology Co.,Ltd.
-CCE8AC     (base 16)		SOYEA Technology Co.,Ltd.
-				STB department,Floor 4,Building 11 south
-				hangzhou  zhejiang  310007
-				CN
-
-70-F1-76   (hex)		Data Modul AG
-70F176     (base 16)		Data Modul AG
-				Landsberger Str. 322
-				Munich  Bavaria  80687
-				DE
-
-B8-47-C6   (hex)		SanJet Technology Corp.
-B847C6     (base 16)		SanJet Technology Corp.
-				4F,No2,Li-Hsin Rd., 6,
-				Hsinchu    30078
-				TW
-
-B8-CD-93   (hex)		Penetek, Inc
-B8CD93     (base 16)		Penetek, Inc
-				6F, No.18, Wuqun 7th Rd, Wugu Dist
-				New Taipei City    248
-				TW
-
-28-DB-81   (hex)		Shanghai Guao Electronic Technology Co., Ltd
-28DB81     (base 16)		Shanghai Guao Electronic Technology Co., Ltd
-				No.6, Alley 1225 TongPu Road,
-				  Shanghai  200333
-				CN
-
-38-06-B4   (hex)		A.D.C. GmbH
-3806B4     (base 16)		A.D.C. GmbH
-				Peter-Dornier-Str. 10
-				Lindau    88131
-				DE
-
-B8-24-1A   (hex)		SWEDA INFORMATICA LTDA
-B8241A     (base 16)		SWEDA INFORMATICA LTDA
-				RUA DONA BRIGIDA, 713
-				SAO PAULO  SP  04111-081
-				BR
-
-A0-B1-00   (hex)		ShenZhen Cando Electronics Co.,Ltd
-A0B100     (base 16)		ShenZhen Cando Electronics Co.,Ltd
-				Building A, Dagang Industrial Zone, Changzhen Community
-				Shenzhen City  Guangdong  518132
-				CN
-
-20-1D-03   (hex)		Elatec GmbH
-201D03     (base 16)		Elatec GmbH
-				Lilienthalstr. 3
-				Puchheim  Bayern  82178
-				DE
-
-E0-67-B3   (hex)		Shenzhen C-Data Technology Co., Ltd
-E067B3     (base 16)		Shenzhen C-Data Technology Co., Ltd
-				#601, Fl6, Bldg F, No.1008  Yangguang Community
-				Shenzhen  Guangdong  518055
-				CN
-
-1C-4A-F7   (hex)		AMON INC
-1C4AF7     (base 16)		AMON INC
-				HANJUN BLDG 4/F, SHINGILDONG 110-4
-				  SEOUL  150839
-				KR
-
-E4-77-6B   (hex)		AARTESYS AG
-E4776B     (base 16)		AARTESYS AG
-				Bahnhofplatz 7
-				Biel  Bern  CH-2501
-				CH
-
-30-F3-1D   (hex)		zte corporation
-30F31D     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A0-EC-80   (hex)		zte corporation
-A0EC80     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-0C-C8-1F   (hex)		Summer Infant, Inc.
-0CC81F     (base 16)		Summer Infant, Inc.
-				1275 Park East Drive
-				Woonsocket  Rhode Island  02895
-				US
-
-A8-FB-70   (hex)		WiseSec L.t.d
-A8FB70     (base 16)		WiseSec L.t.d
-				145 yaffo ST.
-				Haifa  Israel  37503
-				IL
-
-E4-81-B3   (hex)		Shenzhen ACT Industrial Co.,Ltd.
-E481B3     (base 16)		Shenzhen ACT Industrial Co.,Ltd.
-				NO.5 B/D,BEISHAN INDUSTRIAL PARK,BEISHAN R/D,
-				Shenzhen  Guangdong  518083
-				CN
-
-C0-6C-6D   (hex)		MagneMotion, Inc.
-C06C6D     (base 16)		MagneMotion, Inc.
-				139 Barnum Road
-				Devens  Massachusetts  01434
-				US
-
-E8-80-D8   (hex)		GNTEK Electronics Co.,Ltd.
-E880D8     (base 16)		GNTEK Electronics Co.,Ltd.
-				Suzhou Industrial Park
-				Suzhou  Jiangsu  215021
-				CN
-
-30-3E-AD   (hex)		Sonavox Canada Inc
-303EAD     (base 16)		Sonavox Canada Inc
-				81 Zenway Blvd #25
-				Woodbridge  Ontario  L4S0S5
-				CA
-
-F8-35-DD   (hex)		Gemtek Technology Co., Ltd.
-F835DD     (base 16)		Gemtek Technology Co., Ltd.
-				No. 1 Jen Ai Road Hsinchu Industrial Park Hukou, Hsinchu 30352 TAIWAN, REPUBLIC OF CHINA
-				Hsinchu  TAIWAN  30352
-				TW
-
-D8-B0-4C   (hex)		Jinan USR IOT Technology Co., Ltd.
-D8B04C     (base 16)		Jinan USR IOT Technology Co., Ltd.
-				#1-523, Huizhan Guoji Cheng, Gaoxin Qu
-				JINAN  SHANDONG  250101
-				CN
-
-CC-04-B4   (hex)		Select Comfort
-CC04B4     (base 16)		Select Comfort
-				9800 59th Ave N
-				Minneapolis  MN  55442
-				US
-
-5C-15-E1   (hex)		AIDC TECHNOLOGY (S) PTE LTD
-5C15E1     (base 16)		AIDC TECHNOLOGY (S) PTE LTD
-				NO.1 GOLDHILL PLAZA #03-21
-				SINGAPORE    308899
-				SG
-
-E8-51-9D   (hex)		Yeonhab Precision Co.,LTD
-E8519D     (base 16)		Yeonhab Precision Co.,LTD
-				219-27, Haksusosa-Gil, Mokcheon-Eup
-				Cheonan  Chungcheongnamdo  330-844
-				KR
-
-DC-57-26   (hex)		Power-One
-DC5726     (base 16)		Power-One
-				Via San Girgio 642
-				Terranuova  Arezzo  52028
-				IT
-
-F8-DA-DF   (hex)		EcoTech, Inc.
-F8DADF     (base 16)		EcoTech, Inc.
-				999 Postal Road
-				Allentown  PA  18109
-				US
-
-30-AE-7B   (hex)		Deqing Dusun Electron CO., LTD
-30AE7B     (base 16)		Deqing Dusun Electron CO., LTD
-				No. 640 FengQing Street, Deqing
-				Huzhou  Zhejiang  313200
-				CN
-
-68-EC-62   (hex)		YODO Technology Corp. Ltd.
-68EC62     (base 16)		YODO Technology Corp. Ltd.
-				8F., No.168-1, Liancheng Rd
-				Taipei City    235
-				TW
-
-18-88-57   (hex)		Beijing Jinhong Xi-Dian Information Technology Corp.
-188857     (base 16)		Beijing Jinhong Xi-Dian Information Technology Corp.
-				4th -5th Floor, 1# Building NO.1 Zhonghe Road
-				  Beijing  100070
-				CN
-
-B8-C8-55   (hex)		Shanghai GBCOM Communication Technology Co.,Ltd.
-B8C855     (base 16)		Shanghai GBCOM Communication Technology Co.,Ltd.
-				Room 602, Building 6, No.
-				  Shanghai  200241
-				CN
-
-78-30-3B   (hex)		Stephen Technologies Co.,Limited
-78303B     (base 16)		Stephen Technologies Co.,Limited
-				5/F, Building NO.1, TongXin Industry Zone
-				Shenzhen  Guangdong  518115
-				CN
-
-CC-1A-FA   (hex)		zte corporation
-CC1AFA     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-6C-8B-2F   (hex)		zte corporation
-6C8B2F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-8C-5A-F0   (hex)		Exeltech Solar Products
-8C5AF0     (base 16)		Exeltech Solar Products
-				3001 Northern Cross Blvd #361
-				Fort Worth  TX  76137
-				US
-
-B0-80-8C   (hex)		Laser Light Engines
-B0808C     (base 16)		Laser Light Engines
-				8C Industrial Way
-				Salem  New Hamshire  03079
-				US
-
-D8-DC-E9   (hex)		Kunshan Erlab ductless filtration system Co.,Ltd
-D8DCE9     (base 16)		Kunshan Erlab ductless filtration system Co.,Ltd
-				NO.100 Liu Shi Jin Road
-				Kunshan  Jiangsu  215300
-				CN
-
-DC-D5-2A   (hex)		Sunny Heart Limited
-DCD52A     (base 16)		Sunny Heart Limited
-				Rm. 1516, 15/F, Hewlett Center
-				Kwun Tong Kowloon    852
-				HK
-
-D8-66-C6   (hex)		Shenzhen Daystar Technology Co.,ltd
-D866C6     (base 16)		Shenzhen Daystar Technology Co.,ltd
-				The 5th Floor,#4 Building, Minxing Industria Zone
-				Shenzhen  Guangdong  518131
-				CN
-
-D0-0E-A4   (hex)		Porsche Cars North America
-D00EA4     (base 16)		Porsche Cars North America
-				980 Hammond Drive
-				Atlanta  GA  30328
-				US
-
-78-4B-08   (hex)		f.robotics acquisitions ltd
-784B08     (base 16)		f.robotics acquisitions ltd
-				Yevulim, Industrial Zone
-				Pardesia  Hasharon  42815
-				IL
-
-84-E4-D9   (hex)		Shenzhen NEED technology Ltd.
-84E4D9     (base 16)		Shenzhen NEED technology Ltd.
-				Room 581 ,Jinda technology center,No.8, Kefeng road,
-				Shenzhen  Guangdong  518057
-				CN
-
-40-BC-73   (hex)		Cronoplast  S.L.
-40BC73     (base 16)		Cronoplast  S.L.
-				Pol.Ind.S.Ermengol II -
-				ABRERA  BARCELONA  08630
-				ES
-
-40-07-C0   (hex)		Railtec Systems GmbH
-4007C0     (base 16)		Railtec Systems GmbH
-				Sonnenbergstr. 19
-				Hergiswil  Nidwalden  6052
-				CH
-
-A4-D3-B5   (hex)		GLITEL Stropkov, s.r.o.
-A4D3B5     (base 16)		GLITEL Stropkov, s.r.o.
-				Cintorinska 557/73
-				Stropkov    09101
-				SK
-
-D4-3A-65   (hex)		IGRS Engineering Lab Ltd.
-D43A65     (base 16)		IGRS Engineering Lab Ltd.
-				8F,Taipeng Mansion
-				Haidian District  Beijing  10000
-				CN
-
-F4-99-AC   (hex)		WEBER Schraubautomaten GmbH
-F499AC     (base 16)		WEBER Schraubautomaten GmbH
-				Hans-Urmiller-Ring 56
-				Wolfratshausen  Bayern  82515
-				DE
-
-D0-50-99   (hex)		ASRock Incorporation
-D05099     (base 16)		ASRock Incorporation
-				2F., No.37, Sec. 2, Jhongyang S. Rd.
-				Taipei    112
-				US
-
-A4-9E-DB   (hex)		AutoCrib, Inc.
-A49EDB     (base 16)		AutoCrib, Inc.
-				3011 S. Croddy Way
-				Santa Ana  CA  92704
-				US
-
-1C-76-CA   (hex)		Terasic Technologies Inc.
-1C76CA     (base 16)		Terasic Technologies Inc.
-				9F., No.176, Sec.2, Gongdao 5th Rd
-				Hsinchu City    30070
-				TW
-
-88-89-64   (hex)		GSI Electronics Inc.
-888964     (base 16)		GSI Electronics Inc.
-				5200 Armand-Frappier
-				St-Hubert  Quebec  J3Z 1G5
-				CA
-
-7C-D8-44   (hex)		Enmotus Inc
-7CD844     (base 16)		Enmotus Inc
-				65 Enterprise
-				Aliso Viejo  CA  92656
-				US
-
-44-61-9C   (hex)		FONsystem co. ltd.
-44619C     (base 16)		FONsystem co. ltd.
-				3F annex of Venture support center
-				  GwangJu  500-706
-				KR
-
-70-82-0E   (hex)		as electronics GmbH
-70820E     (base 16)		as electronics GmbH
-				Kantstraße 10
-				Großbettlingen  Baden -Württemberg  72663
-				DE
-
-0C-11-05   (hex)		AKUVOX (XIAMEN) NETWORKS CO., LTD
-0C1105     (base 16)		AKUVOX (XIAMEN) NETWORKS CO., LTD
-				Suite 201-15, 31 WangHai Rd
-				Xiamen  Fujian  361008
-				CN
-
-5C-22-C4   (hex)		DAE EUN ELETRONICS CO., LTD
-5C22C4     (base 16)		DAE EUN ELETRONICS CO., LTD
-				1029 Hokye-Dong, Dongan-Goo
-				Anyang-Shi  Kyongki-Do  431-080
-				KR
-
-F8-FE-A8   (hex)		Technico Japan Corporation
-F8FEA8     (base 16)		Technico Japan Corporation
-				AM Building 9F, 2-5-3,
-				Tokyo    160-0022
-				JP
-
-18-00-DB   (hex)		Fitbit Inc.
-1800DB     (base 16)		Fitbit Inc.
-				150 Spear St Ste 200
-				San Francisco  CA  94105
-				US
-
-78-A1-06   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-78A106     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-6C-61-26   (hex)		Rinicom Holdings
-6C6126     (base 16)		Rinicom Holdings
-				Riverway House
-				Lancaster  Lancashire  LA1 2RX
-				GB
-
-88-68-5C   (hex)		Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd
-88685C     (base 16)		Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd
-				Area c,2/F,Building 1, BaoAn foreign trade industrial zone
-				BaoAn District, Shenzhen  Guangdong province  518100
-				CN
-
-10-28-31   (hex)		Morion Inc.
-102831     (base 16)		Morion Inc.
-				Shosse Kosmonavtov, 111
-				Perm  Permsky Krai  614990
-				US
-
-EC-2C-49   (hex)		University of Tokyo
-EC2C49     (base 16)		University of Tokyo
-				4-6-1 Komaba
-				Meguro-ku  Tokyo  153-8904
-				US
-
-D8-29-16   (hex)		Ascent Communication Technology
-D82916     (base 16)		Ascent Communication Technology
-				13/F., Shum Tower
-				 Hong Kong    9999
-				HK
-
-2C-F2-03   (hex)		EMKO ELEKTRONIK SAN VE TIC AS
-2CF203     (base 16)		EMKO ELEKTRONIK SAN VE TIC AS
-				DOSAB, KARANFIL SOK, NO:6
-				  BURSA  16369
-				TR
-
-B4-FE-8C   (hex)		Centro Sicurezza Italia SpA
-B4FE8C     (base 16)		Centro Sicurezza Italia SpA
-				Via Venaria 28-30
-				Alpignano  Torino  10091
-				IT
-
-40-E7-30   (hex)		DEY Storage Systems, Inc.
-40E730     (base 16)		DEY Storage Systems, Inc.
-				215 South B Street
-				San Mateo  CA  94401
-				US
-
-68-B0-94   (hex)		INESA ELECTRON CO.,LTD
-68B094     (base 16)		INESA ELECTRON CO.,LTD
-				5F, NO.168, Tianlin Road
-				  Shanghai  200233
-				CN
-
-A0-73-FC   (hex)		Rancore Technologies Private Limited
-A073FC     (base 16)		Rancore Technologies Private Limited
-				5th Floor, Court House
-				Dhobi Talao  Maharashtra  400 002
-				IN
-
-44-F8-49   (hex)		Union Pacific Railroad
-44F849     (base 16)		Union Pacific Railroad
-				1400 Douglas St. STOP 0610
-				Omaha  NE  68179
-				US
-
-CC-0D-EC   (hex)		Cisco SPVTG
-CC0DEC     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-1C-37-BF   (hex)		Cloudium Systems Ltd.
-1C37BF     (base 16)		Cloudium Systems Ltd.
-				Hartnett Centre
-				Limerick    00
-				IE
-
-50-AB-BF   (hex)		Hoseo Telecom
-50ABBF     (base 16)		Hoseo Telecom
-				701 ACE Techno Tower 684-1
-				Seoul    157-721
-				KR
-
-0C-72-2C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-0C722C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-9C-E6-35   (hex)		Nintendo Co., Ltd.
-9CE635     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-60-A4-4C   (hex)		ASUSTek COMPUTER INC.
-60A44C     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-18-5A-E8   (hex)		Zenotech.Co.,Ltd
-185AE8     (base 16)		Zenotech.Co.,Ltd
-				E-503, BundangTechno Park, Yatap-dong
-				Seongnam    463-760
-				KR
-
-C4-7D-CC   (hex)		Zebra Technologies Inc
-C47DCC     (base 16)		Zebra Technologies Inc
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-E0-AE-ED   (hex)		LOENK
-E0AEED     (base 16)		LOENK
-				F9, Cheongdam Venture Plaza
-				  SEOUL  135-951
-				KR
-
-E4-92-E7   (hex)		Gridlink Tech. Co.,Ltd.
-E492E7     (base 16)		Gridlink Tech. Co.,Ltd.
-				Room No. 619, No. 108 Jiang Bin Dong Road
-				Fuzhou  Fujian  350015
-				CN
-
-CC-04-7C   (hex)		G-WAY Microwave
-CC047C     (base 16)		G-WAY Microwave
-				38 Leuning Street
-				South Hackensack  New Jersey  07078
-				US
-
-64-53-5D   (hex)		Frauscher Sensortechnik
-64535D     (base 16)		Frauscher Sensortechnik
-				Gewerbestraße 1
-				St. Marienkirchen  Upper Austria  4774
-				US
-
-3C-6F-F7   (hex)		EnTek Systems, Inc.
-3C6FF7     (base 16)		EnTek Systems, Inc.
-				562 Starlight Dr.
-				Sautee Nacoochee  GA  30571
-				US
-
-2C-7B-5A   (hex)		Milper Ltd
-2C7B5A     (base 16)		Milper Ltd
-				32 Shaham St.
-				Petach Tikva    49250
-				IL
-
-D4-BF-2D   (hex)		SE Controls Asia Pacific Ltd
-D4BF2D     (base 16)		SE Controls Asia Pacific Ltd
-				Unit 301, 3/F, Hung To Centre,
-				Kwun Tong  Kowloon  
-				HK
-
-E0-D9-A2   (hex)		Hippih aps
-E0D9A2     (base 16)		Hippih aps
-				Sceince Park Scion
-				Lyngby    2800
-				DK
-
-FC-06-47   (hex)		Cortland Research, LLC
-FC0647     (base 16)		Cortland Research, LLC
-				12 S Main St., Ste 207
-				Homer  NY  13077
-				US
-
-6C-D1-46   (hex)		FRAMOS GmbH
-6CD146     (base 16)		FRAMOS GmbH
-				Mehlbeerenstr. 2
-				Taufkirchen    82024
-				DE
-
-54-E0-32   (hex)		Juniper Networks
-54E032     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-54-61-EA   (hex)		Zaplox AB
-5461EA     (base 16)		Zaplox AB
-				Scheelev
-				Lund  Sk  22370
-				SE
-
-D0-8B-7E   (hex)		Passif Semiconductor
-D08B7E     (base 16)		Passif Semiconductor
-				400 S. El Camino Real Suite 250
-				San Mateo  California  94402
-				US
-
-04-58-6F   (hex)		Sichuan Whayer information industry Co.,LTD
-04586F     (base 16)		Sichuan Whayer information industry Co.,LTD
-				Layer 16,Building 10, C Area
-				Chengdu City    610041
-				CN
-
-FC-9F-AE   (hex)		Fidus Systems Inc
-FC9FAE     (base 16)		Fidus Systems Inc
-				35 Fitzgerald Road
-				Ottawa  Ontario  K2H 1E6
-				CA
-
-68-1E-8B   (hex)		InfoSight Corporation
-681E8B     (base 16)		InfoSight Corporation
-				20700 US Hwy 23
-				Chillicothe  Ohio  45601
-				US
-
-D0-52-A8   (hex)		Physical Graph Corporation
-D052A8     (base 16)		Physical Graph Corporation
-				11654 Plaza America Drive
-				Reston  VA  20190
-				US
-
-CC-3A-61   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-CC3A61     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
-				314, Maetan3-Dong, Yeongtong-Gu
-				Suwon  Gyunggi-Do  443-743
-				US
-
-F8-D7-BF   (hex)		REV Ritter GmbH
-F8D7BF     (base 16)		REV Ritter GmbH
-				Frankenstra
-				M  Bavaria  63776
-				DE
-
-48-BE-2D   (hex)		Symanitron
-48BE2D     (base 16)		Symanitron
-				Ap.103, 17 Rudnevka str.,111674
-				  Moscow  
-				RU
-
-F0-23-29   (hex)		SHOWA DENKI CO.,LTD.
-F02329     (base 16)		SHOWA DENKI CO.,LTD.
-				1-25
-				Daito-city  Osaka  574-0052
-				JP
-
-F0-73-AE   (hex)		PEAK-System Technik
-F073AE     (base 16)		PEAK-System Technik
-				Otto-Roehm-Str 69
-				Darmstadt  Hessen  64293
-				DE
-
-48-B8-DE   (hex)		HOMEWINS TECHNOLOGY CO.,LTD.
-48B8DE     (base 16)		HOMEWINS TECHNOLOGY CO.,LTD.
-				10F-1, NO. 122, QIAOHE RD.,
-				NEW TAIPEI CITY,    235
-				TW
-
-10-EA-59   (hex)		Cisco SPVTG
-10EA59     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-0C-19-1F   (hex)		Inform Electronik
-0C191F     (base 16)		Inform Electronik
-				Emek mah.Ordu cad.No-49-51-53
-				Sarigazi-Sancaktepe  Istanbul  34785
-				US
-
-10-65-CF   (hex)		IQSIM
-1065CF     (base 16)		IQSIM
-				2000 Route des Lucioles
-				BIOT    06410
-				FR
-
-68-4C-A8   (hex)		Shenzhen Herotel Tech. Co., Ltd.
-684CA8     (base 16)		Shenzhen Herotel Tech. Co., Ltd.
-				Room W1402, West Tower, No.10128, Shennan Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-98-20-8E   (hex)		Definium Technologies
-98208E     (base 16)		Definium Technologies
-				34 Fairthorne Road
-				Launceston  Tasmania  7250
-				AU
-
-70-4A-E4   (hex)		Rinstrum Pty Ltd
-704AE4     (base 16)		Rinstrum Pty Ltd
-				41 Success St
-				Acacia Ridge  QLD  4110
-				AU
-
-08-3A-B8   (hex)		Shinoda Plasma Co., Ltd.
-083AB8     (base 16)		Shinoda Plasma Co., Ltd.
-				4-6-7, Minatojima Minamimachi, Chuo-ku
-				Kobe  Hyogo  6500047
-				JP
-
-A0-DD-97   (hex)		PolarLink Technologies, Ltd
-A0DD97     (base 16)		PolarLink Technologies, Ltd
-				6FL 352, Zhonghua 1st Rd. Kaohsiung 804 Taiwan
-				Kaohsiung  Taiwan  804
-				TW
-
-EC-89-F5   (hex)		Lenovo Mobile Communication Technology Ltd.
-EC89F5     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone,
-				Xiamen  Fujian  361006
-				US
-
-B4-98-42   (hex)		zte corporation
-B49842     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-70-54-D2   (hex)		PEGATRON CORPORATION
-7054D2     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-64-5A-04   (hex)		Chicony Electronics Co., Ltd.
-645A04     (base 16)		Chicony Electronics Co., Ltd.
-				No.25, Wugong 6th Rd., Wugu Dist.,
-				New Taipei City 248,  TAIWAN, REPUBLIC OF CHINA  248
-				TW
-
-AC-17-02   (hex)		Fibar Group sp. z o.o.
-AC1702     (base 16)		Fibar Group sp. z o.o.
-				ul. Lotnicza 1
-				Poznan    60-421
-				PL
-
-98-4C-D3   (hex)		Mantis Deposition
-984CD3     (base 16)		Mantis Deposition
-				2 Goodson Industrial Mews
-				Thame  Oxfordshire  OX9 3BX
-				GB
-
-08-60-6E   (hex)		ASUSTek COMPUTER INC.
-08606E     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-3C-57-D5   (hex)		FiveCo
-3C57D5     (base 16)		FiveCo
-				Ch. de la Rueyre 116
-				Renens  VD  1020
-				US
-
-F8-48-97   (hex)		Hitachi, Ltd.
-F84897     (base 16)		Hitachi, Ltd.
-				27-18, Minami Oi 6-chome, Shinagawa-ku
-				Tokyo    140-8572
-				JP
-
-F8-0B-D0   (hex)		Datang Telecom communication terminal (Tianjin) Co., Ltd.
-F80BD0     (base 16)		Datang Telecom communication terminal (Tianjin) Co., Ltd.
-				Garden East Roadon the 15th,
-				Haidian District  Beijing  100191
-				CN
-
-E8-9A-FF   (hex)		Fujian LANDI Commercial Equipment Co.,Ltd
-E89AFF     (base 16)		Fujian LANDI Commercial Equipment Co.,Ltd
-				Building 17,the 1st Section ,Fuzhou Software Park
-				No.89 Software Road   Fuzhou ,Fujian  350003
-				CN
-
-0C-8C-DC   (hex)		Suunto Oy
-0C8CDC     (base 16)		Suunto Oy
-				Valimotie 7
-				Vantaa  Uusimaa  02710
-				FI
-
-60-C5-A8   (hex)		Beijing LT Honway Technology Co.,Ltd
-60C5A8     (base 16)		Beijing LT Honway Technology Co.,Ltd
-				Room 1703,A1 Tower, Changyuan Tiandi, No.18,Suzhou Street
-				beijing  beijing  100086
-				CN
-
-B4-DF-3B   (hex)		Chromlech
-B4DF3B     (base 16)		Chromlech
-				19 av. Gabriel Faure
-				THORIGNE FOUILLARD    35235
-				FR
-
-7C-9A-9B   (hex)		VSE valencia smart energy
-7C9A9B     (base 16)		VSE valencia smart energy
-				Sir Alexander Fleming n
-				Paterna  Valencia  46980
-				ES
-
-84-E7-14   (hex)		Liang Herng Enterprise,Co.Ltd.
-84E714     (base 16)		Liang Herng Enterprise,Co.Ltd.
-				1FL,No.27,KweiYang Street,Sanchung District,New Taipei City,Taiwan,R.O.C. 
-				New Taipei City    241
-				TW
-
-B8-29-F7   (hex)		Blaster Tech
-B829F7     (base 16)		Blaster Tech
-				13337 South Street
-				Cerritos  CA  90703
-				US
-
-E4-A7-FD   (hex)		Cellco Partnership
-E4A7FD     (base 16)		Cellco Partnership
-				One Verizon Way
-				Baskin Ridge  New Jersey  07920
-				US
-
-2C-E2-A8   (hex)		DeviceDesign
-2CE2A8     (base 16)		DeviceDesign
-				Yeongtong-dong, Yeongtong-gu
-				Suwon-si  Gyeonggi-do  443-813
-				KR
-
-00-B5-6D   (hex)		David Electronics Co., LTD.
-00B56D     (base 16)		David Electronics Co., LTD.
-				9F, -2, No. 188, Sec. 3, Ta-Tung Rd.,
-				New Taipei City,     22103
-				TW
-
-B8-04-15   (hex)		Bayan Audio
-B80415     (base 16)		Bayan Audio
-				5 The Pavilions
-				Pease Pottage  West Sussex  RH11 9BJ
-				GB
-
-D4-13-6F   (hex)		Asia Pacific Brands
-D4136F     (base 16)		Asia Pacific Brands
-				PO Box 113001
-				Auckland  Newmarket  1149
-				NZ
-
-C8-E1-A7   (hex)		Vertu Corporation Limited
-C8E1A7     (base 16)		Vertu Corporation Limited
-				Beacon Hill Road
-				Church Crookham  Hampshire  GU52 8DY
-				GB
-
-4C-AB-33   (hex)		KST technology
-4CAB33     (base 16)		KST technology
-				Bangi-dong, songpa-gu
-				  Seoul  138-050
-				KR
-
-F4-47-2A   (hex)		Nanjing Rousing Sci. and Tech. Industrial Co., Ltd
-F4472A     (base 16)		Nanjing Rousing Sci. and Tech. Industrial Co., Ltd
-				A630,F6,NO.58 Nanhu Road,Jianye District
-				Nanjing  Jiangsu  210017
-				CN
-
-DC-02-8E   (hex)		zte corporation
-DC028E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-A8-45-E9   (hex)		Firich Enterprises CO., LTD.
-A845E9     (base 16)		Firich Enterprises CO., LTD.
-				10F., No. 75, Sec. 1, Xintai 5th Rd., Xizhi Dist.
-				New Taipei City  Taiwan (R.O.C.)  886
-				TW
-
-48-52-61   (hex)		SOREEL
-485261     (base 16)		SOREEL
-				18 Rue de la Gâtine
-				CHOLET  FRANCE  49304
-				FR
-
-64-62-23   (hex)		Cellient Co., Ltd.
-646223     (base 16)		Cellient Co., Ltd.
-				6F Glass Tower, 366-4 Yatap-dong Bundang-gu
-				Seongnam-si  Gyeonggi-do  463-827
-				KR
-
-98-47-3C   (hex)		SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
-98473C     (base 16)		SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
-				Suite 604-605,Xing Yuan Technology Plaza 418 Gui Ping Road  ShangHAI
-				Shanghai    200233
-				CN
-
-54-81-AD   (hex)		Eagle Research Corporation
-5481AD     (base 16)		Eagle Research Corporation
-				4237 State Route 34
-				Hurricane  West Virginia  25526
-				US
-
-54-A0-4F   (hex)		t-mac Technologies Ltd
-54A04F     (base 16)		t-mac Technologies Ltd
-				Stand Park
-				Chesterfield  Derbyshire  S41 8JT
-				GB
-
-14-DB-85   (hex)		S NET MEDIA
-14DB85     (base 16)		S NET MEDIA
-				4F, SEHYUN BLDG, 1581-7
-				SEOUL    137-875
-				KR
-
-B8-DA-F1   (hex)		Strahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH
-B8DAF1     (base 16)		Strahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH
-				Ostdamm 139
-				Duelmen  NRW  48249
-				DE
-
-D4-5C-70   (hex)		Wi-Fi Alliance
-D45C70     (base 16)		Wi-Fi Alliance
-				10900-B Stonelake Boulevard
-				Austin  TX  78759
-				US
-
-EC-47-3C   (hex)		Redwire, LLC
-EC473C     (base 16)		Redwire, LLC
-				8 Thorndike St
-				Everett  MA  02149
-				US
-
-3C-C1-2C   (hex)		AES Corporation
-3CC12C     (base 16)		AES Corporation
-				285 Newbury St
-				Peabody  MA  01960
-				US
-
-94-9B-FD   (hex)		Trans New Technology, Inc.
-949BFD     (base 16)		Trans New Technology, Inc.
-				KY Bldg. 8F, 5-14-4 Nishinippori
-				Arakawa  Tokyo  116-0013
-				JP
-
-A0-0A-BF   (hex)		Wieson Technologies Co., Ltd.
-A00ABF     (base 16)		Wieson Technologies Co., Ltd.
-				7F, No. 276, Sec. 1, Datong Rd
-				New Taipei City    221
-				TW
-
-8C-CD-E8   (hex)		Nintendo Co., Ltd.
-8CCDE8     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-7C-B2-32   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-7CB232     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-00-E6-66   (hex)		ARIMA Communications Corp.
-00E666     (base 16)		ARIMA Communications Corp.
-				6F.,No.866,Zhongzheng Rd.,Zhonghe Dist.,
-				New Taipei City  Taiwan  23586
-				TW
-
-34-BD-FA   (hex)		Cisco SPVTG
-34BDFA     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-F4-1E-26   (hex)		Simon-Kaloi Engineering
-F41E26     (base 16)		Simon-Kaloi Engineering
-				31192 La Baya Drive Unit G
-				Westlake Village  CA  91362
-				US
-
-70-25-26   (hex)		Nokia
-702526     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-18-D9-49   (hex)		Qvis Labs, LLC
-18D949     (base 16)		Qvis Labs, LLC
-				3204 Rustic River Cove
-				Austin  TX  78746-2001
-				US
-
-D8-08-F5   (hex)		Arcadia Networks Co. Ltd. 
-D808F5     (base 16)		Arcadia Networks Co. Ltd. 
-				Cheung Sha Wan 5-B FL
-				Kowloon    0633
-				HK
-
-0C-C4-7E   (hex)		EUCAST Co., Ltd.
-0CC47E     (base 16)		EUCAST Co., Ltd.
-				Room 303, 1018-2 Unjung-dong, Bundang-Gu
-				Seongnam-si  Kyunggi-do  463-440
-				KR
-
-50-72-4D   (hex)		BEG Brueck Electronic GmbH
-50724D     (base 16)		BEG Brueck Electronic GmbH
-				Schlosserstraße 30
-				Lindlar  Nordrhein-Westfalen  51789
-				DE
-
-78-3C-E3   (hex)		Kai-EE
-783CE3     (base 16)		Kai-EE
-				3F.-12, No.79, Sec. 1, Xintai 5th Rd.,
-				 New Taipei City    22101
-				TW
-
-B8-98-B0   (hex)		Atlona Inc.
-B898B0     (base 16)		Atlona Inc.
-				70 Daggett Dr.
-				San Jose  CA  95134
-				US
-
-24-69-4A   (hex)		Jasmine Systems Inc.
-24694A     (base 16)		Jasmine Systems Inc.
-				50 Charles Lindbergh Blvd. Suite 411
-				Uniondale  NY  11553
-				US
-
-08-0C-0B   (hex)		SysMik GmbH Dresden
-080C0B     (base 16)		SysMik GmbH Dresden
-				Bertolt-Brecht-Allee 24
-				Dresden    01309
-				DE
-
-DC-BF-90   (hex)		HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.
-DCBF90     (base 16)		HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.
-				Qiaoxing Science Technological&Industrial Zone Tangquan
-				Huizhou  Guangdong  516023
-				CN
-
-04-9F-06   (hex)		Smobile Co., Ltd.
-049F06     (base 16)		Smobile Co., Ltd.
-				T-1009, Poongrim i-won Plus, 255-1
-				Seohyeon-dong, Bundang-gu  Seongnam-si, Gyeonggi-do  463-862
-				KR
-
-28-9A-4B   (hex)		SteelSeries ApS
-289A4B     (base 16)		SteelSeries ApS
-				656 West Randolph, Suite 2E
-				Chicago  IL  60661
-				US
-
-A0-8C-15   (hex)		Gerhard D. Wempe KG
-A08C15     (base 16)		Gerhard D. Wempe KG
-				Steinstrasse 23
-				  Hamburg  20095
-				DE
-
-90-CF-6F   (hex)		Dlogixs Co Ltd
-90CF6F     (base 16)		Dlogixs Co Ltd
-				DLogixs Bldg, #351-1, Anyang-Dong
-				Anyang-si  Gyeonggi-do  430-010
-				KR
-
-C8-FB-26   (hex)		Cisco SPVTG
-C8FB26     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-B8-58-10   (hex)		NUMERA, INC.
-B85810     (base 16)		NUMERA, INC.
-				1511 3RD AVE
-				SEATTLE  WA  98101
-				US
-
-EC-D9-50   (hex)		IRT SA
-ECD950     (base 16)		IRT SA
-				Puits-Godet 16
-				NEUCHATEL  NE  2000
-				CH
-
-7C-02-BC   (hex)		Hansung Electronics Co. LTD
-7C02BC     (base 16)		Hansung Electronics Co. LTD
-				319, Bong san-ri, San dong-myun
-				Gumi    730-853
-				KR
-
-B8-24-10   (hex)		Magneti Marelli Slovakia s.r.o.
-B82410     (base 16)		Magneti Marelli Slovakia s.r.o.
-				Industrial Park Kechnec
-				Kechnec    04458
-				SK
-
-10-5F-49   (hex)		Cisco SPVTG
-105F49     (base 16)		Cisco SPVTG
-				5030 Sugarloaf Parkway
-				Lawrenceville  GA  30044
-				US
-
-1C-5C-60   (hex)		Shenzhen Belzon Technology Co.,LTD.
-1C5C60     (base 16)		Shenzhen Belzon Technology Co.,LTD.
-				5F Block 1,Zhongxin Building,Chuangye Rd
-				Shenzhen  Guangdong  518054
-				CN
-
-B8-B9-4E   (hex)		Shenzhen iBaby Labs, Inc.
-B8B94E     (base 16)		Shenzhen iBaby Labs, Inc.
-				Room 218, Building 17,Shangsha Innovation Science and Technology Park,Futian District
-				Shenzhen  Guangdong  518047
-				CN
-
-AC-C6-98   (hex)		Kohzu Precision Co., Ltd.
-ACC698     (base 16)		Kohzu Precision Co., Ltd.
-				2-6-15, Kurigi, Asao-ku
-				Kawasaki-shi  Kanagawa  215-8521
-				JP
-
-7C-38-6C   (hex)		Real Time Logic
-7C386C     (base 16)		Real Time Logic
-				12515 Academy Ridge View
-				Colorado Springs  Colorado  80921
-				US
-
-20-67-B1   (hex)		Pluto inc.
-2067B1     (base 16)		Pluto inc.
-				Hongo5-21-1-303
-				Bunkyo-ku  Tokyo  113-0033
-				JP
-
-18-9A-67   (hex)		CSE-Servelec Limited
-189A67     (base 16)		CSE-Servelec Limited
-				Rotherside Road
-				Sheffield    S21 4HL
-				GB
-
-08-7D-21   (hex)		Altasec technology corporation
-087D21     (base 16)		Altasec technology corporation
-				9F-1, No.75, Sec.1, Xintai 5th Rd.,
-				New Taipei City  Taiwan  221
-				TW
-
-F8-05-1C   (hex)		DRS Imaging and Targeting Solutions
-F8051C     (base 16)		DRS Imaging and Targeting Solutions
-				100 N Babcock St
-				Melbourne  FL  32935
-				US
-
-78-D3-4F   (hex)		Pace-O-Matic, Inc.
-78D34F     (base 16)		Pace-O-Matic, Inc.
-				4150 Blue Ridge Industrial Parkway
-				Norcross  GA  30071
-				US
-
-A4-46-6B   (hex)		EOC Technology
-A4466B     (base 16)		EOC Technology
-				#1601 Acro Palace, 1594 Gwanyang-dong, Dongan-gu
-				Anyang-si  Gyeonggi-do  431-060
-				KR
-
-90-1E-DD   (hex)		GREAT COMPUTER CORPORATION
-901EDD     (base 16)		GREAT COMPUTER CORPORATION
-				4F., No.236, Fude 2nd Rd., Xizhi Dist., 
-				New Taipei City    22151
-				TW
-
-34-D7-B4   (hex)		Tributary Systems, Inc.
-34D7B4     (base 16)		Tributary Systems, Inc.
-				3717 Commerce Place
-				Bedford  Texas  76021
-				US
-
-F4-0F-9B   (hex)		WAVELINK
-F40F9B     (base 16)		WAVELINK
-				#701, Dongyoung Venture'stel 3rd, 202-4,
-				Anyang-si  Kyungki-do  430-817
-				KR
-
-64-5F-FF   (hex)		Nicolet Neuro
-645FFF     (base 16)		Nicolet Neuro
-				1850 Deming Way
-				Middleton  WI  53562
-				US
-
-70-0B-C0   (hex)		Dewav Technology Company
-700BC0     (base 16)		Dewav Technology Company
-				Room 1408, Real Estate Mansion
-				  Shangahi  200120
-				CN
-
-CC-14-A6   (hex)		Yichun MyEnergy Domain, Inc
-CC14A6     (base 16)		Yichun MyEnergy Domain, Inc
-				349W. Yuanshan Rd, Yichun
-				Yichun  Jiangxi  336000
-				CN
-
-10-9F-A9   (hex)		Actiontec Electronics, Inc
-109FA9     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-C0-A3-64   (hex)		3D Systems Massachusetts
-C0A364     (base 16)		3D Systems Massachusetts
-				19 Connector Road
-				Andover  MA  01810
-				US
-
-1C-5F-FF   (hex)		Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch
-1C5FFF     (base 16)		Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch
-				Room 14A, Building A, Honglong Central Plaza, No.3001,Heping Road, Luohu District, Shenzhen City
-				Shenzhen  Guangdong  518001
-				CN
-
-60-45-BD   (hex)		Microsoft
-6045BD     (base 16)		Microsoft
-				1 Microsoft Way
-				Redmond  Washington  98052
-				US
-
-24-10-64   (hex)		Shenzhen Ecsino Tecnical Co. Ltd
-241064     (base 16)		Shenzhen Ecsino Tecnical Co. Ltd
-				7F Guoxin build ChangXin Road. Nan'shan District
-				Shenzhen  Guangdong  518000
-				CN
-
-7C-EB-EA   (hex)		ASCT
-7CEBEA     (base 16)		ASCT
-				4F., No.49, Wu-Gong 6th Rd. Wu-Gu Industrial Park,
-				New Taipei City    248
-				TW
-
-9C-0D-AC   (hex)		Tymphany HK Limited
-9C0DAC     (base 16)		Tymphany HK Limited
-				RM 1307-8
-				43-59, Queen's Road East  Wanchai  
-				HK
-
-70-B5-99   (hex)		Embedded Technologies s.r.o.
-70B599     (base 16)		Embedded Technologies s.r.o.
-				Doubravice 134
-				Turnov    51101
-				CZ
-
-EC-4C-4D   (hex)		ZAO NPK RoTeK
-EC4C4D     (base 16)		ZAO NPK RoTeK
-				Bild. 119-1, Prospekt Mira
-				Moscow  Moscow  129223
-				RU
-
-A4-D1-8F   (hex)		Shenzhen Skyee Optical Fiber Communication Technology Ltd. 
-A4D18F     (base 16)		Shenzhen Skyee Optical Fiber Communication Technology Ltd. 
-				No.5 Bldg. Yimin Industrial Park, No.31, Makan South Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-58-34-3B   (hex)		Glovast Technology Ltd.
-58343B     (base 16)		Glovast Technology Ltd.
-				6F., No.23, JianKang Rd., SongShan Dist.,
-				Taipei    105
-				TW
-
-88-96-76   (hex)		TTC MARCONI s.r.o.
-889676     (base 16)		TTC MARCONI s.r.o.
-				Trebohosticka s.r.o.
-				Praha    10000
-				CZ
-
-5C-17-37   (hex)		I-View Now, LLC.
-5C1737     (base 16)		I-View Now, LLC.
-				1421 E. Sunset
-				Las Vegas  NV  89119
-				US
-
-AC-0A-61   (hex)		Labor S.r.L.
-AC0A61     (base 16)		Labor S.r.L.
-				Via della Scrofa 117
-				  Rome  00186
-				IT
-
-1C-43-EC   (hex)		JAPAN CIRCUIT CO.,LTD
-1C43EC     (base 16)		JAPAN CIRCUIT CO.,LTD
-				NKF-Kawasaki-Building 7F
-				Kawasaki  Kanagawa  2100005
-				JP
-
-54-D1-B0   (hex)		Universal Laser Systems, Inc
-54D1B0     (base 16)		Universal Laser Systems, Inc
-				16008 N 81st street
-				scottsdale  az  85260
-				US
-
-78-52-62   (hex)		Shenzhen Hojy Software Co., Ltd.
-785262     (base 16)		Shenzhen Hojy Software Co., Ltd.
-				3F,East of Building25,Keyuanxi,Number 5,Kezhixi Road, Science & Industry Park ,Nan Shan District ,Shenzhen
-				ShenZhen  GuangDong  508057
-				CN
-
-74-6A-89   (hex)		Rezolt Corporation
-746A89     (base 16)		Rezolt Corporation
-				2855 Bowers Avenue
-				Santa Clara  CA  95051
-				US
-
-74-14-89   (hex)		SRT Wireless
-741489     (base 16)		SRT Wireless
-				4101 SW 47th Avenue #102
-				Davie  Florida  33314
-				US
-
-24-1B-13   (hex)		Shanghai Nutshell Electronic Co., Ltd.
-241B13     (base 16)		Shanghai Nutshell Electronic Co., Ltd.
-				365 Guoshoujing RD.,Zhangjiang Hi-Tech Park, Pudong District
-				Shanghai  Shanghai  201203
-				CN
-
-20-01-4F   (hex)		Linea Research Ltd
-20014F     (base 16)		Linea Research Ltd
-				1 Marquis Business Centre
-				Baldock  Hertfordshire  SG7 6XL
-				GB
-
-EC-0E-D6   (hex)		ITECH INSTRUMENTS SAS
-EC0ED6     (base 16)		ITECH INSTRUMENTS SAS
-				3 Avenue de la Maranne
-				Châteauneuf-Les-Martigues    13220
-				FR
-
-24-09-17   (hex)		Devlin Electronics Limited
-240917     (base 16)		Devlin Electronics Limited
-				Unit D1
-				Basingstoke  Hampshire  RG226HZ
-				GB
-
-9C-54-CA   (hex)		Zhengzhou VCOM Science and Technology Co.,Ltd
-9C54CA     (base 16)		Zhengzhou VCOM Science and Technology Co.,Ltd
-				National 863 Software Park£¬No.6 Cuizhu Street, Hi-tech Indusry Developing Park
-				ZhengZhou City  Henan Province  450001
-				CN
-
-B4-35-64   (hex)		Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.
-B43564     (base 16)		Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.
-				1801 unit,Tian an Cyber Times Tower A,Futian District
-				Shenzhen  Guangdong  518000
-				CN
-
-00-BF-15   (hex)		Genetec Inc.
-00BF15     (base 16)		Genetec Inc.
-				2280 boul. Alfred-Nobel
-				St,. Laurent  Quebec  H4S 2A4
-				CA
-
-38-EE-9D   (hex)		Anedo Ltd.
-38EE9D     (base 16)		Anedo Ltd.
-				Huelsmeyerstraße 35
-				Eydelstedt    49406
-				DE
-
-78-BE-BD   (hex)		STULZ GmbH
-78BEBD     (base 16)		STULZ GmbH
-				Holsteiner Chausse 283
-				  Hamburg  22457
-				DE
-
-D4-DF-57   (hex)		Alpinion Medical Systems
-D4DF57     (base 16)		Alpinion Medical Systems
-				1F Verdi Tower 222-22 
-				Seoul    181-848
-				KR
-
-50-48-EB   (hex)		BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.
-5048EB     (base 16)		BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.
-				RM 701 Unit 2 Huirong Bldg. No.106 Lianhuachi East RD. Xuanwu Dist. Beijing
-				BEIJING  CHINA  100055
-				CN
-
-B4-0E-96   (hex)		HERAN 
-B40E96     (base 16)		HERAN 
-				No.88, Keji 3rd Rd., Guishan Township
-				Taoyuan  R.O.C  333
-				TW
-
-50-8C-77   (hex)		DIRMEIER Schanktechnik GmbH &Co KG
-508C77     (base 16)		DIRMEIER Schanktechnik GmbH &Co KG
-				Alfons-Goppel-Straße 5
-				92526 Oberviechtach    
-				DE
-
-40-70-4A   (hex)		Power Idea Technology Limited
-40704A     (base 16)		Power Idea Technology Limited
-				1401A, Mintai Building, WenXin 5 Road, ShenZhen, PRC
-				Guang Dong  Shen Zhen  518054
-				CN
-
-54-5E-BD   (hex)		NL Technologies
-545EBD     (base 16)		NL Technologies
-				33 Laird Drive
-				Toronto  ON  M4G3S8
-				CA
-
-F4-7F-35   (hex)		Cisco Systems, Inc
-F47F35     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-C1-68   (hex)		DinBox Sverige AB
-BCC168     (base 16)		DinBox Sverige AB
-				Surbrunnsgatan 14
-				Stockholm    11427
-				SE
-
-DC-30-9C   (hex)		Heyrex Limited
-DC309C     (base 16)		Heyrex Limited
-				Level 1, 236-256 Karori Road
-				Wellington    6147
-				NZ
-
-2C-00-F7   (hex)		XOS
-2C00F7     (base 16)		XOS
-				15 Tech Valley Drive
-				East Greenbush  NY  12061
-				US
-
-28-F6-06   (hex)		Syes srl
-28F606     (base 16)		Syes srl
-				Via Zanella 21
-				Lissone (MB)  Monza Brianza  20851
-				IT
-
-0C-AF-5A   (hex)		GENUS POWER INFRASTRUCTURES LIMITED
-0CAF5A     (base 16)		GENUS POWER INFRASTRUCTURES LIMITED
-				SPL-3 RIICO INDUSTRIAL AREA
-				JAIPUR  RAJASTHAN  302022
-				IN
-
-7C-EF-8A   (hex)		Inhon International Ltd.
-7CEF8A     (base 16)		Inhon International Ltd.
-				2F, No.552, Ruiguang Rd, Neihu Dist
-				Taipei  Taiwan  114
-				TW
-
-24-11-25   (hex)		Hutek Co., Ltd.
-241125     (base 16)		Hutek Co., Ltd.
-				E-402 Bundang Technopark 
-				Seongnam-city  Gyeonggi-do  463-760
-				KR
-
-B4-31-B8   (hex)		Aviwest
-B431B8     (base 16)		Aviwest
-				6 rue du Patis Tatelin
-				Rennes    35700
-				FR
-
-CC-18-7B   (hex)		Manzanita Systems, Inc.
-CC187B     (base 16)		Manzanita Systems, Inc.
-				14269 Danielson Street
-				Poway  CA  92064
-				US
-
-08-BE-09   (hex)		Astrol Electronic AG
-08BE09     (base 16)		Astrol Electronic AG
-				Vorderi Böde 3
-				Oberrohrdorf  AG  5452
-				CH
-
-B4-1D-EF   (hex)		Internet Laboratories, Inc.
-B41DEF     (base 16)		Internet Laboratories, Inc.
-				P.O. Box 7697
-				Atlanta  GA  30357
-				US
-
-80-93-93   (hex)		Xapt GmbH
-809393     (base 16)		Xapt GmbH
-				Neidenburger Str. 10
-				Gelsenkirchen  NRW  45897
-				DE
-
-A0-07-B6   (hex)		Advanced Technical Support, Inc.
-A007B6     (base 16)		Advanced Technical Support, Inc.
-				10 Grassmere Ave
-				West Hartford  CT  06110
-				US
-
-0C-D2-B5   (hex)		Binatone Telecommunication Pvt. Ltd
-0CD2B5     (base 16)		Binatone Telecommunication Pvt. Ltd
-				A36, G/F, Sector 4
-				  Uttar Pradesh  201301
-				IN
-
-48-46-F1   (hex)		Uros Oy
-4846F1     (base 16)		Uros Oy
-				Tutkijantie 4
-				OULU    90590
-				FI
-
-B8-27-EB   (hex)		Raspberry Pi Foundation
-B827EB     (base 16)		Raspberry Pi Foundation
-				Mitchell Wood House
-				Caldecote  Cambridgeshire  CB23 7NU
-				US
-
-84-AF-1F   (hex)		Beat System Service Co,. Ltd.
-84AF1F     (base 16)		Beat System Service Co,. Ltd.
-				1-11-1-2F, Nodaya-cho
-				Okayama-city  Okayama  700-0815
-				JP
-
-B0-58-C4   (hex)		Broadcast Microwave Services, Inc
-B058C4     (base 16)		Broadcast Microwave Services, Inc
-				12367 Crosthwaite Circle
-				Poway  CA  92064
-				US
-
-74-57-98   (hex)		TRUMPF Laser GmbH + Co. KG
-745798     (base 16)		TRUMPF Laser GmbH + Co. KG
-				Aichhalder Str. 39
-				Schramberg  BW  78713
-				DE
-
-28-17-CE   (hex)		Omnisense Ltd
-2817CE     (base 16)		Omnisense Ltd
-				3rd Floor St Andrew's House
-				Cambridge  Cambridgeshire  CB2 3BZ
-				GB
-
-3C-CE-73   (hex)		Cisco Systems, Inc
-3CCE73     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B0-BD-6D   (hex)		Echostreams Innovative Solutions
-B0BD6D     (base 16)		Echostreams Innovative Solutions
-				1130 Coiner Ct.
-				City of Industry  CA  91748
-				US
-
-60-44-F5   (hex)		Easy Digital Ltd.
-6044F5     (base 16)		Easy Digital Ltd.
-				Victoria Buildings, 1 Haddington Road
-				Dublin    4
-				IE
-
-90-AC-3F   (hex)		BrightSign LLC
-90AC3F     (base 16)		BrightSign LLC
-				16795 Lark Ave.
-				Los Gatos  CA  95032
-				US
-
-AC-51-EE   (hex)		Cambridge Communication Systems Ltd
-AC51EE     (base 16)		Cambridge Communication Systems Ltd
-				Sheraton House
-				Cambridge  Cambridgeshire  CB3 0AX
-				GB
-
-78-A1-83   (hex)		Advidia
-78A183     (base 16)		Advidia
-				3 Riverway
-				Houston  TX  77056
-				US
-
-A8-D0-E5   (hex)		Juniper Networks
-A8D0E5     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-F8-99-55   (hex)		Fortress Technology Inc
-F89955     (base 16)		Fortress Technology Inc
-				51 Grand Marshall Drive
-				Scarborough  Ontario  M1B 5N6
-				CA
-
-4C-C9-4F   (hex)		Nokia
-4CC94F     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-0C-E5-D3   (hex)		DH electronics GmbH
-0CE5D3     (base 16)		DH electronics GmbH
-				Am Anger 8
-				Bergen    83346
-				DE
-
-E4-25-E9   (hex)		Color-Chip
-E425E9     (base 16)		Color-Chip
-				Tavor Building 1
-				New Industrial Park  Yokneam  20692
-				IL
-
-14-B1-C8   (hex)		InfiniWing, Inc.
-14B1C8     (base 16)		InfiniWing, Inc.
-				19925 Stevens Creek Blvd
-				Cupertino  CA  95014
-				US
-
-E8-40-F2   (hex)		PEGATRON CORPORATION
-E840F2     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-50-05-3D   (hex)		CyWee Group Ltd
-50053D     (base 16)		CyWee Group Ltd
-				3F, No.28, Lane128
-				Taipei    10462
-				TW
-
-F8-8C-1C   (hex)		KAISHUN ELECTRONIC TECHNOLOGY CO., LTD. BEIJING
-F88C1C     (base 16)		KAISHUN ELECTRONIC TECHNOLOGY CO., LTD. BEIJING
-				NO.1 FARM, HENGQIAO VILLAGE WEST, MACHIKOU TOWN, 
-				BEIJING    102200
-				CN
-
-1C-0B-52   (hex)		EPICOM S.A
-1C0B52     (base 16)		EPICOM S.A
-				Autovia Andalucia Km 12.700
-				Getafe  Madrid  28905
-				ES
-
-74-7E-2D   (hex)		Beijing Thomson CITIC Digital Technology Co. LTD.
-747E2D     (base 16)		Beijing Thomson CITIC Digital Technology Co. LTD.
-				8301, No.8 Workshop, 3 Yongchangbei Road
-				Beijing    100176
-				CN
-
-88-5C-47   (hex)		Alcatel Lucent
-885C47     (base 16)		Alcatel Lucent
-				Via Energy Park, 14
-				Vimercate  MB  20871
-				IT
-
-3C-C1-F6   (hex)		Melange Systems Pvt. Ltd.
-3CC1F6     (base 16)		Melange Systems Pvt. Ltd.
-				4/1, 7th Cross, Kumarapark West
-				Bangalore  Karnataka  560020
-				IN
-
-94-FA-E8   (hex)		Shenzhen Eycom Technology Co., Ltd 
-94FAE8     (base 16)		Shenzhen Eycom Technology Co., Ltd 
-				EYANG Building, No. 3 of Qimin Rd, Langshan 2nd Street, North Area of Hi-Tech Industrial Zone, Nanshan District
-				Shenzhen  Guang Dong  518057
-				CN
-
-B4-82-55   (hex)		Research Products Corporation
-B48255     (base 16)		Research Products Corporation
-				1015 E. Washington Ave
-				Madison  WI  53703
-				US
-
-80-16-B7   (hex)		Brunel University
-8016B7     (base 16)		Brunel University
-				School of IS, Computing & Maths
-				Uxbridge  Middlesex  UB8 3PH
-				GB
-
-00-8D-DA   (hex)		Link One Co., Ltd.
-008DDA     (base 16)		Link One Co., Ltd.
-				601F   Chungjuk tower 546-9 
-				Buchion  Gyeonggi-do   420-864
-				KR
-
-C4-98-05   (hex)		Minieum Networks, Inc
-C49805     (base 16)		Minieum Networks, Inc
-				6404 International Parkway
-				Plano  Texas  75093
-				US
-
-90-F4-C1   (hex)		Rand McNally
-90F4C1     (base 16)		Rand McNally
-				9855 Woods Drive
-				Skokie  IL  60077
-				US
-
-18-19-3F   (hex)		Tamtron Oy
-18193F     (base 16)		Tamtron Oy
-				P.O.Box 15 (Vestonkatu 11)
-				Tampere    33561
-				FI
-
-94-44-44   (hex)		LG Innotek
-944444     (base 16)		LG Innotek
-				Jangduk-dong, Gwangsan-gu
-				Gwang-ju    506-731
-				KR
-
-4C-64-D9   (hex)		Guangdong Leawin Group Co., Ltd
-4C64D9     (base 16)		Guangdong Leawin Group Co., Ltd
-				10/F, Domain Bldg,No.8 Keji Road(E),HiTech Development District,
-				Shantou  Guangdong  515041
-				CN
-
-94-01-49   (hex)		AutoHotBox
-940149     (base 16)		AutoHotBox
-				14090 SW Frwy, Ste. 300
-				Sugar Land  TX  77478
-				US
-
-1C-B0-94   (hex)		HTC Corporation
-1CB094     (base 16)		HTC Corporation
-				No. 23, Xinghua Rd., Taoyuan City
-				Taoyuan County  Taiwan  330
-				TW
-
-9C-01-11   (hex)		Shenzhen Newabel Electronic Co., Ltd.
-9C0111     (base 16)		Shenzhen Newabel Electronic Co., Ltd.
-				5Flr, South Tower of Sichuan Bld.,
-				Shenzhen  Guangdong  518028
-				CN
-
-40-0E-67   (hex)		Tremol Ltd.
-400E67     (base 16)		Tremol Ltd.
-				6 Toledo str.
-				Veliko Turnovo    5000
-				BG
-
-C0-DF-77   (hex)		Conrad Electronic SE
-C0DF77     (base 16)		Conrad Electronic SE
-				Klaus Conrad Str. 1
-				Hirschau  Bavaria  92240
-				DE
-
-30-55-ED   (hex)		Trex Network LLC
-3055ED     (base 16)		Trex Network LLC
-				Room 505, Tower B Nongke Building, 
-				Beijing    100097
-				CN
-
-F0-F7-55   (hex)		Cisco Systems, Inc
-F0F755     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-1C-B2-43   (hex)		TDC A/S
-1CB243     (base 16)		TDC A/S
-				Telehøjen 1
-				Odense SØ    5220
-				DK
-
-38-BF-33   (hex)		NEC CASIO Mobile Communications
-38BF33     (base 16)		NEC CASIO Mobile Communications
-				1753,Shimonumabe
-				Kawasaki-shi  Kanagawa  211-8666
-				JP
-
-B4-67-E9   (hex)		Qingdao GoerTek Technology Co., Ltd.
-B467E9     (base 16)		Qingdao GoerTek Technology Co., Ltd.
-				5F, No.3 Building, Fortune Center
-				Qingdao  Shandong  266061
-				CN
-
-18-67-51   (hex)		KOMEG Industrielle Messtechnik GmbH
-186751     (base 16)		KOMEG Industrielle Messtechnik GmbH
-				Zum Wasserwerk 3
-				Völklingen    66333
-				DE
-
-64-5E-BE   (hex)		Yahoo! JAPAN
-645EBE     (base 16)		Yahoo! JAPAN
-				Midtown Tower
-				Minato-ku  Tokyo  107-6211
-				JP
-
-CC-C5-0A   (hex)		SHENZHEN DAJIAHAO TECHNOLOGY CO.,LTD
-CCC50A     (base 16)		SHENZHEN DAJIAHAO TECHNOLOGY CO.,LTD
-				3F Buliding 1, 2th Park TaoHuaYuan Tech- Innovation,
-				Shenzhen  Guangdong  518102
-				CN
-
-1C-B1-7F   (hex)		NEC Platforms, Ltd.
-1CB17F     (base 16)		NEC Platforms, Ltd.
-				800 Shimomata
-				Kakegawa  Shizuoka  436-8501
-				JP
-
-E4-2C-56   (hex)		Lilee Systems, Ltd.
-E42C56     (base 16)		Lilee Systems, Ltd.
-				2905 Stender Way, Suite 78
-				Santa Clara  CA  95054
-				US
-
-48-ED-80   (hex)		daesung eltec
-48ED80     (base 16)		daesung eltec
-				#509 SJ Technoville, 60-19, Gasan-dong
-				Seoul    153-769
-				KR
-
-C8-07-18   (hex)		TDSi
-C80718     (base 16)		TDSi
-				Unit 10 Concept Park
-				Poole  Dorset  BH12 4QT
-				GB
-
-58-1D-91   (hex)		Advanced Mobile Telecom co.,ltd.
-581D91     (base 16)		Advanced Mobile Telecom co.,ltd.
-				#608, Yatap Leaders Bldg. 342-1
-				Seongnam-si  Gyeonggi-do  463-828
-				KR
-
-D8-BF-4C   (hex)		Victory Concept Electronics Limited
-D8BF4C     (base 16)		Victory Concept Electronics Limited
-				4/F., CAC Tower,
-				Kwun Tong  Kowloon  KLN
-				HK
-
-3C-B9-A6   (hex)		Belden Deutschland GmbH
-3CB9A6     (base 16)		Belden Deutschland GmbH
-				Stuttgarter Straße 45-51
-				Neckartenzlingen    72654
-				DE
-
-8C-0C-A3   (hex)		Amper
-8C0CA3     (base 16)		Amper
-				Marconi 3, PTM
-				Tres Cantos  Madrid  28760
-				US
-
-94-DF-58   (hex)		IJ Electron CO.,Ltd.
-94DF58     (base 16)		IJ Electron CO.,Ltd.
-				401 ACE HIGHEND8, 345-4 GASAN-DONG
-				SEOUL    153-802
-				KR
-
-48-D5-4C   (hex)		Jeda Networks
-48D54C     (base 16)		Jeda Networks
-				2618 San Miguel Drive
-				Newport Beach  Ca.  92660
-				US
-
-8C-DE-52   (hex)		ISSC Technologies Corp.
-8CDE52     (base 16)		ISSC Technologies Corp.
-				4F, No.8, Dusing Rd.,
-				Hsinchu City     30078
-				TW
-
-08-25-22   (hex)		ADVANSEE
-082522     (base 16)		ADVANSEE
-				9 Rue Alfred Kastler
-				NANTES    44307
-				FR
-
-4C-2F-9D   (hex)		ICM Controls
-4C2F9D     (base 16)		ICM Controls
-				7313 William Barry Blvd
-				North Syracuse  NY  13212
-				US
-
-E4-67-BA   (hex)		Danish Interpretation Systems A/S
-E467BA     (base 16)		Danish Interpretation Systems A/S
-				Vestre Teglgade 12
-				Copenhagen  SV  2450
-				DK
-
-BC-B8-52   (hex)		Cybera, Inc.
-BCB852     (base 16)		Cybera, Inc.
-				9009 Carothers Parkway
-				Franklin  TN  37067
-				US
-
-C4-93-00   (hex)		8Devices
-C49300     (base 16)		8Devices
-				Gedimino st. 47
-				Kaunas  LT  44242
-				LT
-
-6C-A6-82   (hex)		EDAM information & communications
-6CA682     (base 16)		EDAM information & communications
-				601, Hanlim Veture town, 689-6
-				Gunpo  Gyenggi-Do  435-862
-				KR
-
-28-D5-76   (hex)		Premier Wireless, Inc.
-28D576     (base 16)		Premier Wireless, Inc.
-				4222 E. La Palma Ave.
-				Anaheim  CA  92807
-				US
-
-70-D6-B6   (hex)		Metrum Technologies
-70D6B6     (base 16)		Metrum Technologies
-				315 South University Parks Drive
-				Waco  Texas  76701
-				US
-
-C0-A0-DE   (hex)		Multi Touch Oy
-C0A0DE     (base 16)		Multi Touch Oy
-				Henry Fordin katu 6
-				Helsinki    00150
-				FI
-
-40-BC-8B   (hex)		itelio GmbH
-40BC8B     (base 16)		itelio GmbH
-				Franz-Larcher-Straße 4
-				Kiefersfelden  Bavaria  83088
-				DE
-
-9C-A1-34   (hex)		Nike, Inc.
-9CA134     (base 16)		Nike, Inc.
-				1 Bowerman Drive
-				Beaverton  OR  97005
-				US
-
-50-FC-30   (hex)		Treehouse Labs
-50FC30     (base 16)		Treehouse Labs
-				601 Great Oaks Dr.
-				Round Rock  TX  78681
-				US
-
-B8-96-74   (hex)		AllDSP GmbH & Co. KG
-B89674     (base 16)		AllDSP GmbH & Co. KG
-				Spenglerstrasse 6
-				Hamm  NRW  59067
-				DE
-
-48-E1-AF   (hex)		Vity
-48E1AF     (base 16)		Vity
-				180 rue Pierre Landais
-				Caudan  56  56850
-				FR
-
-1C-BB-A8   (hex)		OJSC Ufimskiy Zavod Promsvyaz
-1CBBA8     (base 16)		OJSC Ufimskiy Zavod Promsvyaz
-				39, 50 let SSSR
-				Ufa  Bashkortostan  450071
-				RU
-
-00-6B-A0   (hex)		SHENZHEN UNIVERSAL INTELLISYS PTE LTD
-006BA0     (base 16)		SHENZHEN UNIVERSAL INTELLISYS PTE LTD
-				ROOM 1607-1608,XINGJI MANSION
-				SHENZHEN  GUANGDONG  518104
-				CN
-
-A8-98-C6   (hex)		Shinbo Co., Ltd.
-A898C6     (base 16)		Shinbo Co., Ltd.
-				203-14, Anyang 7-Dong, Manan-Gu
-				Anyang-Si  Kyungki-Do  430-817
-				KR
-
-B4-21-1D   (hex)		Beijing GuangXin Technology Co., Ltd
-B4211D     (base 16)		Beijing GuangXin Technology Co., Ltd
-				Room 313,B Bld,Horizon International Tower,Zhichun Road,6,Haidian District,Beijing City,P.R.China
-				Beijing    100086
-				CN
-
-90-3C-AE   (hex)		Yunnan KSEC Digital Technology Co.,Ltd.
-903CAE     (base 16)		Yunnan KSEC Digital Technology Co.,Ltd.
-				3F,NO.176 Keyi ROAD,High and New Technological Industrial Development Zone
-				Kunming  Yunnan  650106
-				CN
-
-70-70-4C   (hex)		Purple Communications, Inc
-70704C     (base 16)		Purple Communications, Inc
-				595 Menlo
-				Rocklin  CA  95765
-				US
-
-D8-97-60   (hex)		C2 Development, Inc.
-D89760     (base 16)		C2 Development, Inc.
-				127 S Bell Ave
-				Ames  IA  50010
-				US
-
-F4-7A-CC   (hex)		SolidFire, Inc.
-F47ACC     (base 16)		SolidFire, Inc.
-				1620 Pearl Street
-				Boulder  Colorado  80302
-				US
-
-90-56-82   (hex)		Lenbrook Industries Limited
-905682     (base 16)		Lenbrook Industries Limited
-				633 Granite Court
-				Pickering  Ontario  L1W 3K1
-				CA
-
-F0-DA-7C   (hex)		RLH INDUSTRIES,INC.
-F0DA7C     (base 16)		RLH INDUSTRIES,INC.
-				936 N. MAIN ST.
-				ORANGE  CA  92867
-				US
-
-AC-31-9D   (hex)		Shenzhen TG-NET Botone Technology Co.,Ltd.
-AC319D     (base 16)		Shenzhen TG-NET Botone Technology Co.,Ltd.
-				2nd floor,Building No.6,Pengtengda industrial zone,Huarong road,Dalang Street Office,
-				Shenzhen  Guangdong  518109
-				CN
-
-20-10-7A   (hex)		Gemtek Technology Co., Ltd.
-20107A     (base 16)		Gemtek Technology Co., Ltd.
-				No. 1 Jen Ai Road Hsinchu Industrial Park Hukou, Hsinchu 30352 TAIWAN, REPUBLIC OF CHINA
-				Hsinchu  TAIWAN  30352
-				TW
-
-78-DD-D6   (hex)		c-scape
-78DDD6     (base 16)		c-scape
-				westerkade 22
-				Gouda    2802 SL
-				NL
-
-C0-91-32   (hex)		Patriot Memory
-C09132     (base 16)		Patriot Memory
-				47027 Benicia
-				Fremont  CA  94555
-				US
-
-90-18-5E   (hex)		Apex Tool Group GmbH & Co OHG
-90185E     (base 16)		Apex Tool Group GmbH & Co OHG
-				Industriestraße 1
-				Westhausen    73463
-				DE
-
-F8-FE-5C   (hex)		Reciprocal Labs Corp
-F8FE5C     (base 16)		Reciprocal Labs Corp
-				3 S. Pinckney St.
-				Madison  WI  53703
-				US
-
-6C-9C-ED   (hex)		Cisco Systems, Inc
-6C9CED     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-86-F4   (hex)		Ctek, Inc.
-2486F4     (base 16)		Ctek, Inc.
-				34 Miraleste Plaza
-				Rancho Palos Verdes  California  90275
-				US
-
-C4-23-7A   (hex)		WhizNets Inc.
-C4237A     (base 16)		WhizNets Inc.
-				830 Stewart Drive
-				Sunnyvale  California  94085
-				US
-
-F4-E6-D7   (hex)		Solar Power Technologies, Inc.
-F4E6D7     (base 16)		Solar Power Technologies, Inc.
-				3006 Bee Caves Rd.
-				Austin  Texas  78746
-				US
-
-B8-74-24   (hex)		Viessmann Elektronik GmbH
-B87424     (base 16)		Viessmann Elektronik GmbH
-				Beetwiese 2
-				Allendorf (Eder)    35108
-				DE
-
-B4-51-F9   (hex)		NB Software
-B451F9     (base 16)		NB Software
-				Eichhalde 3
-				Weissach i. T.  Baden-Württemberg  71554
-				DE
-
-30-16-8D   (hex)		ProLon
-30168D     (base 16)		ProLon
-				17510 rue Charles, Suite 100
-				Mirabel  Quebec   J7J 1X9
-				CA
-
-E4-AF-A1   (hex)		HES-SO
-E4AFA1     (base 16)		HES-SO
-				Case postale 2134
-				Sion    1950
-				CH
-
-A8-87-ED   (hex)		ARC Wireless LLC
-A887ED     (base 16)		ARC Wireless LLC
-				6330 N. Washington St.
-				Denver  CO  80216
-				US
-
-D4-D2-49   (hex)		Power Ethernet
-D4D249     (base 16)		Power Ethernet
-				4th Floor, Holborn Gate
-				London    WC2A 1AH 
-				GB
-
-80-42-7C   (hex)		Adolf Tedsen GmbH & Co. KG
-80427C     (base 16)		Adolf Tedsen GmbH & Co. KG
-				Otto-Hahn-Str. 13-15
-				Trittau  Schleswig-Holstein  D-22946
-				DE
-
-E0-DA-DC   (hex)		JVC KENWOOD Corporation
-E0DADC     (base 16)		JVC KENWOOD Corporation
-				3-12, Moriyacho, Kanagawa-ku
-				Yokohama-shi  Kanagawa  221-0022
-				JP
-
-E8-43-B6   (hex)		QNAP Systems, Inc.
-E843B6     (base 16)		QNAP Systems, Inc.
-				2F., No.22, Zhongxing Rd., Xizhi Dist.
-				New Taipei City    221
-				TW
-
-B8-9B-C9   (hex)		SMC Networks Inc
-B89BC9     (base 16)		SMC Networks Inc
-				20 Mason 
-				Irvine  CA  92618
-				US
-
-40-9F-C7   (hex)		BAEKCHUN I&C Co., Ltd.
-409FC7     (base 16)		BAEKCHUN I&C Co., Ltd.
-				67-5, Gyesu-dong
-				Bucheon-si  Gyeonggi-do  422-070
-				KR
-
-00-FC-58   (hex)		WebSilicon Ltd.
-00FC58     (base 16)		WebSilicon Ltd.
-				25, Habarzel St.,
-				Tel-Aviv    69710
-				IL
-
-98-35-71   (hex)		Sub10 Systems Ltd
-983571     (base 16)		Sub10 Systems Ltd
-				Ash House
-				Kingsteignton  Devon  TQ12 3RZ
-				GB
-
-54-04-A6   (hex)		ASUSTek COMPUTER INC.
-5404A6     (base 16)		ASUSTek COMPUTER INC.
-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
-				Taipei  Taiwan  112
-				TW
-
-18-6D-99   (hex)		Adanis Inc.
-186D99     (base 16)		Adanis Inc.
-				#2015-2016 Geumkang Penterium
-				Hakuro, Dongan-Gu, Anyang-Si  Kyunggi-Do  431-060
-				KR
-
-A0-E2-01   (hex)		AVTrace Ltd.(China)
-A0E201     (base 16)		AVTrace Ltd.(China)
-				RM704, District B1, Originality Building, No.162 KeXue Avenue Science Town,GUANGZHOU,CHINA 
-				GUANGZHOU  GUANGDONG  510611
-				US
-
-F0-DE-B9   (hex)		ShangHai Y&Y Electronics Co., Ltd
-F0DEB9     (base 16)		ShangHai Y&Y Electronics Co., Ltd
-				No.3, 588 Tianxiong Road, Shanghai International Medical Zone(SIMZ),
-				Shanghai    201318
-				CN
-
-7C-A6-1D   (hex)		MHL, LLC
-7CA61D     (base 16)		MHL, LLC
-				1140 East Arques Avenue
-				Sunnyvale  CA  94085
-				US
-
-9C-F6-7D   (hex)		Ricardo Prague, s.r.o.
-9CF67D     (base 16)		Ricardo Prague, s.r.o.
-				Thamova 13
-				Praha 8    186 00
-				CZ
-
-98-C8-45   (hex)		PacketAccess
-98C845     (base 16)		PacketAccess
-				611 North Main Street
-				Goldfield  IA  50543
-				US
-
-98-90-80   (hex)		Linkpower Network System Inc Ltd.
-989080     (base 16)		Linkpower Network System Inc Ltd.
-				Room 202, Build 18, Shahe Industrial Zone
-				Shenzhen  Guangdong  518053
-				CN
-
-F8-33-76   (hex)		Good Mind Innovation Co., Ltd.
-F83376     (base 16)		Good Mind Innovation Co., Ltd.
-				20, Lane 200, Cheng Hu Rd. 
-				Kaohsiung    833
-				TW
-
-50-F6-1A   (hex)		Kunshan JADE Technologies co., Ltd.
-50F61A     (base 16)		Kunshan JADE Technologies co., Ltd.
-				12th Floor, Southern Building, Pudong Software Park,828 Xueyuan Road, Bacheng Town 
-				Kunshan  Jiangsu  215311
-				CN
-
-54-20-18   (hex)		Tely Labs
-542018     (base 16)		Tely Labs
-				545 Middlefield Road
-				Menlo Park  CA  94025
-				US
-
-58-1F-EF   (hex)		Tuttnaer LTD
-581FEF     (base 16)		Tuttnaer LTD
-				Har-Tuv B
-				Beith Shemesh    99000
-				IL
-
-58-BD-A3   (hex)		Nintendo Co., Ltd.
-58BDA3     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-F8-F2-5A   (hex)		G-Lab GmbH
-F8F25A     (base 16)		G-Lab GmbH
-				Schiffbaustrasse 10
-				Zurich  CH  8005
-				CH
-
-30-7E-CB   (hex)		SFR
-307ECB     (base 16)		SFR
-				40/42 Quai du point du jour
-				Boulongne Billancourt  Hauts de Seine  92659
-				FR
-
-68-F1-25   (hex)		Data Controls Inc.
-68F125     (base 16)		Data Controls Inc.
-				Fukashiro Bldg, 8F
-				Taito-ku  Tokyo  111-0052
-				JP
-
-BC-76-4E   (hex)		Rackspace US, Inc.
-BC764E     (base 16)		Rackspace US, Inc.
-				5000 Walzem Rd.
-				San Antonio  TX  78218
-				US
-
-CC-C8-D7   (hex)		CIAS Elettronica srl
-CCC8D7     (base 16)		CIAS Elettronica srl
-				Via Giovanni Durando 38
-				Milan    20158
-				IT
-
-84-D3-2A   (hex)		IEEE 1905.1
-84D32A     (base 16)		IEEE 1905.1
-				445 Hoes Lane
-				Piscataway   NJ  08855-1331
-				US
-
-4C-02-89   (hex)		LEX COMPUTECH CO., LTD
-4C0289     (base 16)		LEX COMPUTECH CO., LTD
-				3F, No.77, LI DE St. Chung Ho Dist., 
-				New Taipei City    23556
-				TW
-
-C0-E5-4E   (hex)		ARIES Embedded GmbH
-C0E54E     (base 16)		ARIES Embedded GmbH
-				Schöngeisinger Str. 84
-				 Fürstenfeldbruck    D-82256
-				DE
-
-F8-C0-01   (hex)		Juniper Networks
-F8C001     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-18-7C-81   (hex)		Valeo Vision Systems
-187C81     (base 16)		Valeo Vision Systems
-				Dunmore Road
-				County Galway    
-				IE
-
-AC-CC-8E   (hex)		Axis Communications AB
-ACCC8E     (base 16)		Axis Communications AB
-				Emdalavägen 14
-				LUND    22369
-				SE
-
-8C-94-CF   (hex)		Encell Technology, Inc.
-8C94CF     (base 16)		Encell Technology, Inc.
-				1412 Sachem Place, Suite 204
-				Charlottesville  VA  22901
-				US
-
-6C-A7-80   (hex)		Nokia Corporation
-6CA780     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-30-57-AC   (hex)		IRLAB LTD.
-3057AC     (base 16)		IRLAB LTD.
-				3rd Floor, 2A Biulding, Huihao Industrial Park
-				Shenzhen  Guang Dong  518106
-				CN
-
-84-2B-50   (hex)		Huria Co.,Ltd.
-842B50     (base 16)		Huria Co.,Ltd.
-				#190-28 Chungchun-2Dong
-				Incheon    403-032
-				KR
-
-48-F7-F1   (hex)		Nokia
-48F7F1     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-8C-8E-76   (hex)		taskit GmbH
-8C8E76     (base 16)		taskit GmbH
-				Groß-Berliner Damm 37
-				Berlin    12487
-				DE
-
-A0-13-3B   (hex)		HiTi Digital, Inc.
-A0133B     (base 16)		HiTi Digital, Inc.
-				9F., No.225, Sec. 3, Beixin Rd., Xindian Dist.,
-				Xindian Dist.  New Taipei City  231
-				TW
-
-9C-57-11   (hex)		Feitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.
-9C5711     (base 16)		Feitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.
-				Building B,Horizon International Tower,No.6 Zhichun Rd,Haidian District,
-				Beijing    100088
-				CN
-
-88-F4-88   (hex)		cellon communications technology(shenzhen)Co.,Ltd.
-88F488     (base 16)		cellon communications technology(shenzhen)Co.,Ltd.
-				13/F C Building,Gaoxin S.Ave.,Hi-Tech Industrial Park,Nanshan,shenzhen518057,PRC
-				shenzhen  Guangdong  518057
-				CN
-
-44-8E-12   (hex)		DT Research, Inc.
-448E12     (base 16)		DT Research, Inc.
-				2000 Concourse Drive 
-				San Jose  CA  95131
-				US
-
-B8-BB-6D   (hex)		ENERES Co.,Ltd.
-B8BB6D     (base 16)		ENERES Co.,Ltd.
-				1907 Tokyo Art Center
-				Adahci-ku  Tokyo  120-0034
-				JP
-
-14-37-3B   (hex)		PROCOM Systems
-14373B     (base 16)		PROCOM Systems
-				#1001, Kranz Techno, 5442-1
-				Seongnam-si  Gyunggi-do  462-729
-				KR
-
-18-97-FF   (hex)		TechFaith Wireless Technology Limited
-1897FF     (base 16)		TechFaith Wireless Technology Limited
-				Building C, Jia No.5, Rongchang East Street, BDA District, 
-				Beijing    100176
-				CN
-
-4C-55-85   (hex)		Hamilton Systems
-4C5585     (base 16)		Hamilton Systems
-				3143 Production Drive
-				Fairfield  OH  45014
-				US
-
-EC-EA-03   (hex)		DARFON LIGHTING CORP
-ECEA03     (base 16)		DARFON LIGHTING CORP
-				167, Shanying Road
-				Gueishan  Taoyuan  33341
-				TW
-
-30-F9-ED   (hex)		Sony Corporation
-30F9ED     (base 16)		Sony Corporation
-				Gotenyama Tec 5-1-2
-				Tokyo  Shinagawa-ku  141-0001
-				JP
-
-58-2E-FE   (hex)		Lighting Science Group
-582EFE     (base 16)		Lighting Science Group
-				1227 South Patrick Drive
-				Satellite Beach  FL  32937
-				US
-
-CC-60-BB   (hex)		Empower RF Systems
-CC60BB     (base 16)		Empower RF Systems
-				316 W. Florence Ave
-				Inglewood  CA  90301
-				US
-
-7C-DD-20   (hex)		IOXOS Technologies S.A.
-7CDD20     (base 16)		IOXOS Technologies S.A.
-				4 Chemin de Fontenailles
-				GLAND  VAUD  CH-1196
-				CH
-
-EC-F2-36   (hex)		NEOMONTANA ELECTRONICS
-ECF236     (base 16)		NEOMONTANA ELECTRONICS
-				Mladost-4, bl. 483, mag. 13
-				Sofia    1715
-				BG
-
-04-18-B6   (hex)		Private
-0418B6     (base 16)		Private
-
-E4-A5-EF   (hex)		TRON LINK ELECTRONICS CO., LTD.
-E4A5EF     (base 16)		TRON LINK ELECTRONICS CO., LTD.
-				FLAT A, 20/F., BLOCK 4,ON NING GARDEN,
-				KOWLOON    999077
-				HK
-
-30-71-B2   (hex)		Hangzhou Prevail Optoelectronic Equipment Co.,LTD.
-3071B2     (base 16)		Hangzhou Prevail Optoelectronic Equipment Co.,LTD.
-				Industrial Development Area, Guali Town,
-				Hangzhou City  Zhe Jiang  311241
-				CN
-
-DC-CE-41   (hex)		FE GLOBAL HONG KONG LIMITED
-DCCE41     (base 16)		FE GLOBAL HONG KONG LIMITED
-				FLAT 204-205 2/F LAFORD CENTRE838 LAI CHI KOK RD CHEUNG SHA WAN KL
-				SHENZHEN    518057
-				CN
-
-FC-6C-31   (hex)		LXinstruments GmbH
-FC6C31     (base 16)		LXinstruments GmbH
-				Herrenberger Str. 130
-				Boeblingen    71034
-				DE
-
-70-5C-AD   (hex)		Konami Gaming Inc
-705CAD     (base 16)		Konami Gaming Inc
-				585 Trade Center Drive
-				Las Vegas  Nevada  89119
-				US
-
-3C-6F-45   (hex)		Fiberpro Inc.
-3C6F45     (base 16)		Fiberpro Inc.
-				59-4 Jang-dong, Yusong-gu
-				  Deajeon  305-343
-				KR
-
-70-31-87   (hex)		ACX GmbH
-703187     (base 16)		ACX GmbH
-				Äußere Zwickauer Straße 8
-				Zwickau    08064
-				DE
-
-30-E4-DB   (hex)		Cisco Systems, Inc
-30E4DB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-88-E0-F3   (hex)		Juniper Networks
-88E0F3     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-80-97-1B   (hex)		Altenergy Power System,Inc.
-80971B     (base 16)		Altenergy Power System,Inc.
-				No.1 Yatai Road, 
-				Jiaxing City,    Zhejiang Province,  314050
-				CN
-
-58-76-75   (hex)		Beijing ECHO Technologies Co.,Ltd
-587675     (base 16)		Beijing ECHO Technologies Co.,Ltd
-				NO1 Street 4 Shangdi  
-				BeiJing    100085
-				CN
-
-0C-51-F7   (hex)		CHAUVIN ARNOUX
-0C51F7     (base 16)		CHAUVIN ARNOUX
-				LA QUEUE DEVEE
-				REUX  PONT L EVEQUE  14130
-				FR
-
-0C-FC-83   (hex)		Airoha Technology Corp.,
-0CFC83     (base 16)		Airoha Technology Corp.,
-				5F, No.6-5, Dushing Road , Hsinchu Science Park
-				Hsinchu    300
-				TW
-
-00-7F-28   (hex)		Actiontec Electronics, Inc
-007F28     (base 16)		Actiontec Electronics, Inc
-				3301 Olcott St.
-				Santa Clara  CA  95054
-				US
-
-80-47-31   (hex)		Packet Design, Inc.
-804731     (base 16)		Packet Design, Inc.
-				2455 Augustine Drive
-				Santa Clara  CA  95054
-				US
-
-B0-9B-D4   (hex)		GNH Software India Private Limited
-B09BD4     (base 16)		GNH Software India Private Limited
-				9/14 Sengani Amman Koil Street
-				Chennai  Tamilnadu  600032
-				IN
-
-F0-8B-FE   (hex)		COSTEL.,CO.LTD
-F08BFE     (base 16)		COSTEL.,CO.LTD
-				223-39, Sangdaewon-Dong, Jungwon-Gu
-				Seongnam-si  Kyunggi-Do  462-807
-				KR
-
-3C-26-D5   (hex)		Sotera Wireless
-3C26D5     (base 16)		Sotera Wireless
-				9444 Waples Street
-				San Diego  CA  92121
-				US
-
-E8-4E-06   (hex)		EDUP INTERNATIONAL (HK) CO., LTD
-E84E06     (base 16)		EDUP INTERNATIONAL (HK) CO., LTD
-				20D Room, Block B, Modern Windows Buidling, FuTian District,
-				Shenzhen  Guangdong  518028
-				CN
-
-00-07-7D   (hex)		Cisco Systems, Inc
-00077D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-CC-D9-E9   (hex)		SCR Engineers Ltd.
-CCD9E9     (base 16)		SCR Engineers Ltd.
-				6 Haomanut St.
-				Netanya    42504
-				IL
-
-34-A7-09   (hex)		Trevil srl
-34A709     (base 16)		Trevil srl
-				Via Copernico 1
-				Pozzo d'Adda  MI  20060
-				IT
-
-E0-C9-22   (hex)		Jireh Energy Tech., Ltd.
-E0C922     (base 16)		Jireh Energy Tech., Ltd.
-				#606 Seoul Forest Hallasigmavalley, 325-2
-				Seoul  Seongdong-Gu  133-120
-				KR
-
-90-5F-8D   (hex)		modas GmbH
-905F8D     (base 16)		modas GmbH
-				Belziger Str. 69-71
-				Berlin    10823
-				DE
-
-98-29-3F   (hex)		Fujian Start Computer Equipment Co.,Ltd
-98293F     (base 16)		Fujian Start Computer Equipment Co.,Ltd
-				No.68 Hongshangyuan Road,  
-				Fuzhou City,   Fujian Province,  350002
-				CN
-
-B4-5C-A4   (hex)		Thing-talk Wireless Communication Technologies Corporation Limited
-B45CA4     (base 16)		Thing-talk Wireless Communication Technologies Corporation Limited
-				498 Guo Shou Jing Road, Suite 10402
-				Shanghai    201203
-				CN
-
-90-8D-1D   (hex)		GH Technologies
-908D1D     (base 16)		GH Technologies
-				5022 Binhe Road, Block B, United Plaza
-				Shenzhen    518026
-				CN
-
-44-4F-5E   (hex)		Pan Studios Co.,Ltd.
-444F5E     (base 16)		Pan Studios Co.,Ltd.
-				1F., NO.402, SEC. 2, JHONGYANG N. RD., BEITOU DISTRICT,
-				TAIPEI CITY     11258
-				TW
-
-D0-AF-B6   (hex)		Linktop Technology Co., LTD
-D0AFB6     (base 16)		Linktop Technology Co., LTD
-				2F Guangye Buliding, Torch Hi-Tech, 
-				Xiamen  Fujian  361006
-				CN
-
-98-EC-65   (hex)		Cosesy ApS
-98EC65     (base 16)		Cosesy ApS
-				Tyttebaervej 2
-				Ans  Jylland  DK-8643
-				DK
-
-AC-C9-35   (hex)		Ness Corporation
-ACC935     (base 16)		Ness Corporation
-				4/167 Prospect Highway
-				Sydney  NSW  2147
-				AU
-
-00-8D-4E   (hex)		CJSC NII STT
-008D4E     (base 16)		CJSC NII STT
-				N.Leningradskaya str, 10
-				Smolensk    214012
-				RU
-
-98-F8-DB   (hex)		Marini Impianti Industriali s.r.l.
-98F8DB     (base 16)		Marini Impianti Industriali s.r.l.
-				Via delle Province, 6A
-				Cisterna di Latina    04012
-				IT
-
-E4-12-89   (hex)		topsystem Systemhaus GmbH
-E41289     (base 16)		topsystem Systemhaus GmbH
-				Monnetstraße 24
-				Würselen  NRW  52146
-				DE
-
-58-E8-08   (hex)		AUTONICS CORPORATION
-58E808     (base 16)		AUTONICS CORPORATION
-				41-5 YONGDANG-DONG
-				YANGSAN-SI  KYEONGNAM  626-847
-				KR
-
-DC-05-ED   (hex)		Nabtesco  Corporation
-DC05ED     (base 16)		Nabtesco  Corporation
-				9-18, Kaigan 1-chome
-				Minato-ku  Tokyo  105-0022
-				JP
-
-4C-98-EF   (hex)		Zeo
-4C98EF     (base 16)		Zeo
-				320 Nevada St
-				Newton   MA  02460
-				US
-
-00-A1-DE   (hex)		ShenZhen ShiHua Technology CO.,LTD
-00A1DE     (base 16)		ShenZhen ShiHua Technology CO.,LTD
-				Room505,5/F TsingYi Building,LangShan 2ed Road,High-Tech Industrial Park,
-				ShenZhen  GuangDong  518052
-				CN
-
-80-6C-BC   (hex)		NET New Electronic Technology GmbH
-806CBC     (base 16)		NET New Electronic Technology GmbH
-				Lerchenberg 7
-				Finning  Bavarian  86923
-				DE
-
-90-90-60   (hex)		RSI VIDEO TECHNOLOGIES
-909060     (base 16)		RSI VIDEO TECHNOLOGIES
-				56, Rue Jean-Giraudoux - BAT 60
-				STRASBOURG  Bas-Rhin  67200
-				FR
-
-BC-81-99   (hex)		BASIC Co.,Ltd.
-BC8199     (base 16)		BASIC Co.,Ltd.
-				Keiefu-Building 9F
-				Minato-ku  Tokyo  108-0014
-				JP
-
-DC-A7-D9   (hex)		Compressor Controls Corp
-DCA7D9     (base 16)		Compressor Controls Corp
-				4725 121st Street
-				Des Moines  Iowa  50323
-				US
-
-38-FE-C5   (hex)		Ellips B.V.
-38FEC5     (base 16)		Ellips B.V.
-				Esp 300
-				Eindhoven  Noord-Brabant  5633 AE
-				NL
-
-C4-55-A6   (hex)		Cadac Holdings Ltd
-C455A6     (base 16)		Cadac Holdings Ltd
-				1 New Street
-				Luton  Bedfordshire  LU1 5DX
-				GB
-
-5C-77-57   (hex)		Haivision Network Video
-5C7757     (base 16)		Haivision Network Video
-				4445 Garand
-				Montreal  QC  H4R 2H9
-				CA
-
-D4-D8-98   (hex)		Korea CNO Tech Co., Ltd
-D4D898     (base 16)		Korea CNO Tech Co., Ltd
-				#240-1,Uigok-Ri
-				Mungyeong-Si  Gyeongsangbuk-do  745-853
-				KR
-
-B4-AA-4D   (hex)		Ensequence, Inc.
-B4AA4D     (base 16)		Ensequence, Inc.
-				111 SW 5th Ave Suite 1400
-				Portland  OR  97204
-				US
-
-B8-3D-4E   (hex)		Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch
-B83D4E     (base 16)		Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch
-				2/F,Building#5,1690Cailun Road,Zhangjiang Hi-tech Park,
-				Shanghai    201203
-				CN
-
-50-87-B8   (hex)		Nuvyyo Inc
-5087B8     (base 16)		Nuvyyo Inc
-				1 Smythe Rd
-				Carleton Place  Ontario  K7C4J4
-				CA
-
-C0-EA-E4   (hex)		Sonicwall
-C0EAE4     (base 16)		Sonicwall
-				2001 Logic Drive
-				San Jose  CA  95124-3452
-				US
-
-08-38-A5   (hex)		Funkwerk plettac electronic GmbH
-0838A5     (base 16)		Funkwerk plettac electronic GmbH
-				Wuerzburger Str. 150
-				Fuerth  Bavaria  90766
-				DE
-
-CC-1E-FF   (hex)		Metrological Group BV
-CC1EFF     (base 16)		Metrological Group BV
-				Mariniersweg 151
-				Rotterdam  Zuid-Holland  3011NK
-				NL
-
-18-4E-94   (hex)		MESSOA TECHNOLOGIES INC.
-184E94     (base 16)		MESSOA TECHNOLOGIES INC.
-				13611 12th St., Unit B
-				Chino  CA  91710
-				US
-
-6C-39-1D   (hex)		Beijing ZhongHuaHun Network Information center
-6C391D     (base 16)		Beijing ZhongHuaHun Network Information center
-				6F BeiAo Mansion,HuiXin East Street A2,
-				Beijing    100029
-				CN
-
-80-B3-2A   (hex)		UK Grid Solutions Ltd
-80B32A     (base 16)		UK Grid Solutions Ltd
-				Harry Kerr Drive
-				Stafford   Staffordshire  ST17 4LX
-				GB
-
-40-55-39   (hex)		Cisco Systems, Inc
-405539     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-E0-F2-11   (hex)		Digitalwatt
-E0F211     (base 16)		Digitalwatt
-				Via Dante, 18
-				Renate Brianza  MB  20055
-				IT
-
-F8-69-71   (hex)		Seibu Electric Co.,
-F86971     (base 16)		Seibu Electric Co.,
-				1458-7
-				Hachioji  Tokyo  193-0941
-				JP
-
-44-AA-27   (hex)		udworks Co., Ltd.
-44AA27     (base 16)		udworks Co., Ltd.
-				#810, Byuksan3cha Digital Valley, 212-13, Guro-dong, Guro-gu
-				Seoul    152-775
-				KR
-
-E8-F9-28   (hex)		RFTECH SRL
-E8F928     (base 16)		RFTECH SRL
-				VIA VENETO, 22
-				SCHIO  VICENZA  36015
-				IT
-
-1C-95-5D   (hex)		I-LAX ELECTRONICS INC.
-1C955D     (base 16)		I-LAX ELECTRONICS INC.
-				2283 ARGENTIA RD.- UNIT # 10
-				MISSISSAUGA  ON.  L5N 5Z2
-				CA
-
-60-F5-9C   (hex)		CRU-Dataport
-60F59C     (base 16)		CRU-Dataport
-				1000 SE Tech Center Drive
-				Vancouver  WA  98683
-				US
-
-B0-A7-2A   (hex)		Ensemble Designs, Inc.
-B0A72A     (base 16)		Ensemble Designs, Inc.
-				870 Gold Flat Road
-				Nevada City  CA  95959
-				US
-
-64-00-F1   (hex)		Cisco Systems, Inc
-6400F1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B8-F4-D0   (hex)		Herrmann Ultraschalltechnik GmbH & Co. Kg
-B8F4D0     (base 16)		Herrmann Ultraschalltechnik GmbH & Co. Kg
-				Descostraße 3-9
-				Karlsbad  Baden-Württemberg  76307
-				DE
-
-08-AC-A5   (hex)		Benu Video, Inc.
-08ACA5     (base 16)		Benu Video, Inc.
-				300 Concord Rd., Suite #110
-				Billerica  MA  01821
-				US
-
-58-6D-8F   (hex)		Cisco-Linksys, LLC
-586D8F     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-10-E3-C7   (hex)		Seohwa Telecom
-10E3C7     (base 16)		Seohwa Telecom
-				678 Seohwa Bldg
-				Gasan-Dong, Gumcheon-Gu  Seoul  153-803
-				KR
-
-74-65-D1   (hex)		Atlinks
-7465D1     (base 16)		Atlinks
-				30 Avenue Geroge V
-				Paris    75008
-				FR
-
-04-0A-83   (hex)		Alcatel-Lucent
-040A83     (base 16)		Alcatel-Lucent
-				Via Trento, 30
-				Vimenrcate  MB  2059
-				IT
-
-C4-56-00   (hex)		Galleon Embedded Computing
-C45600     (base 16)		Galleon Embedded Computing
-				Grenseveien 97c
-				Oslo  Oslo  N-0602
-				NO
-
-BC-3E-13   (hex)		Accordance Systems Inc.
-BC3E13     (base 16)		Accordance Systems Inc.
-				2F, No. 31, Sec. 6, Hsin Yi Road
-				Taipei    11085
-				TW
-
-A8-1B-18   (hex)		XTS CORP
-A81B18     (base 16)		XTS CORP
-				10125 NW 116TH WAY, SUITE 5
-				MEDLEY  FLORIDA  33178
-				US
-
-D0-A3-11   (hex)		Neuberger Gebäudeautomation GmbH
-D0A311     (base 16)		Neuberger Gebäudeautomation GmbH
-				Oberer Kaiserweg 6
-				Rothenburg o.d.T.  Bayern  91541
-				DE
-
-04-1D-10   (hex)		Dream Ware Inc.
-041D10     (base 16)		Dream Ware Inc.
-				5-23-7 Masugata, Tama-ku,
-				Kawasaki  Kanagawa  214-0032
-				JP
-
-80-14-40   (hex)		Sunlit System Technology Corp
-801440     (base 16)		Sunlit System Technology Corp
-				8F, No.19,Lane 120, Sec1, Neihu Rd.
-				Tapiei    114
-				TW
-
-18-0B-52   (hex)		Nanotron Technologies GmbH
-180B52     (base 16)		Nanotron Technologies GmbH
-				Alt-Moabit 60
-				Berlin    10555
-				DE
-
-DC-07-C1   (hex)		HangZhou QiYang Technology Co.,Ltd.
-DC07C1     (base 16)		HangZhou QiYang Technology Co.,Ltd.
-				Floor 5, Building 2, Road XiYuanYi, WestLake Technology Park,
-				HangZhou  ZheJiang  310028
-				CN
-
-C0-A2-6D   (hex)		Abbott Point of Care
-C0A26D     (base 16)		Abbott Point of Care
-				400 College Road East
-				Princeton  NJ  08540
-				US
-
-00-BB-8E   (hex)		HME Co., Ltd.
-00BB8E     (base 16)		HME Co., Ltd.
-				No.200 , Liao Bei Str.,San Min Dist.,
-				Kaohsiung    807
-				TW
-
-D8-2A-7E   (hex)		Nokia Corporation
-D82A7E     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-80-1F-02   (hex)		Edimax Technology Co. Ltd.
-801F02     (base 16)		Edimax Technology Co. Ltd.
-				No. 278, Xinhu 1st Road
-				Taipei City  Neihu Dist  248
-				TW
-
-58-EE-CE   (hex)		Icon Time Systems
-58EECE     (base 16)		Icon Time Systems
-				15201 NW Greenbrier Parkway
-				Beaverton  OR  97006
-				US
-
-64-7F-DA   (hex)		TEKTELIC Communications Inc.
-647FDA     (base 16)		TEKTELIC Communications Inc.
-				7657 10th Street NE
-				Calgary  Alberta  T2E 8X2
-				CA
-
-AC-06-13   (hex)		Senselogix Ltd
-AC0613     (base 16)		Senselogix Ltd
-				56 Carlton Court, Ford William Morgan
-				St. Asaph  Debighshire  LL17 0JG
-				GB
-
-74-78-18   (hex)		Jurumani Solutions
-747818     (base 16)		Jurumani Solutions
-				321 14th Road
-				Midrand    1685
-				ZA
-
-E0-1F-0A   (hex)		Xslent Energy Technologies. LLC
-E01F0A     (base 16)		Xslent Energy Technologies. LLC
-				7428 Redwood Blvd
-				Novato  CA  94945
-				US
-
-44-37-19   (hex)		2 Save Energy Ltd
-443719     (base 16)		2 Save Energy Ltd
-				The Annexe, Field House Barn
-				Sherborne St John  Hampshire  RG24 9LR
-				GB
-
-84-EA-99   (hex)		Vieworks
-84EA99     (base 16)		Vieworks
-				6F Suntechcity 2,307-2 Sangdaewon-dong, Jungwon-gu
-				Seongnam   Gyeonggi  462-806
-				KR
-
-E0-0C-7F   (hex)		Nintendo Co., Ltd.
-E00C7F     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-E4-8A-D5   (hex)		RF WINDOW CO., LTD.
-E48AD5     (base 16)		RF WINDOW CO., LTD.
-				14F, Daerung Posttower3
-				Seoul    152-746
-				KR
-
-FC-F1-CD   (hex)		OPTEX-FA CO.,LTD.
-FCF1CD     (base 16)		OPTEX-FA CO.,LTD.
-				91 Awata-cho
-				Kyoto    600-8815
-				JP
-
-44-25-BB   (hex)		Bamboo Entertainment Corporation
-4425BB     (base 16)		Bamboo Entertainment Corporation
-				179 South Street
-				Boston  MA  02111
-				US
-
-7C-DA-84   (hex)		Dongnian Networks Inc.
-7CDA84     (base 16)		Dongnian Networks Inc.
-				90 Wensan Road, Building 8-A303
-				Hangzhou  Zhejiang  310012
-				CN
-
-BC-C6-1A   (hex)		SPECTRA EMBEDDED SYSTEMS
-BCC61A     (base 16)		SPECTRA EMBEDDED SYSTEMS
-				Khasra No. 24, Village Ghumman,1st Floor, Chawla Mansion,
-				Parwanoo  Himachal Pradesh  173 220
-				IN
-
-04-70-BC   (hex)		Globalstar Inc.
-0470BC     (base 16)		Globalstar Inc.
-				461 S Milpitas Blvd
-				Milpitas  CA  95035
-				US
-
-88-DD-79   (hex)		Voltaire
-88DD79     (base 16)		Voltaire
-				13, Zarchin St
-				Raanana    43662
-				IL
-
-64-F9-87   (hex)		Avvasi Inc.
-64F987     (base 16)		Avvasi Inc.
-				103 Randall Dr.
-				Waterloo  ON  N2V 1C5
-				CA
-
-D8-5D-84   (hex)		CAx soft GmbH
-D85D84     (base 16)		CAx soft GmbH
-				Noettinger Strasse 3
-				Karlsbad  BW  76307
-				DE
-
-D4-E3-2C   (hex)		S. Siedle & Sohne
-D4E32C     (base 16)		S. Siedle & Sohne
-				Bregstrasse 1
-				Furtwangen    D-78120
-				DE
-
-7C-6A-DB   (hex)		SafeTone Technology Co.,Ltd
-7C6ADB     (base 16)		SafeTone Technology Co.,Ltd
-				Room 323,ZhuouJi Plaza,No.16 AnDe Road,East District,
-				Beijing    100011
-				CN
-
-90-2E-87   (hex)		LabJack
-902E87     (base 16)		LabJack
-				3232 S Vance St STE 100
-				Lakewood  CO  80227
-				US
-
-A4-24-B3   (hex)		FlatFrog Laboratories AB
-A424B3     (base 16)		FlatFrog Laboratories AB
-				Magistratsvägen 10
-				Lund  Skåne  22643
-				SE
-
-94-CD-AC   (hex)		Creowave Oy
-94CDAC     (base 16)		Creowave Oy
-				Lentokatu 2
-				Oulunsalo    FIN-90460
-				FI
-
-14-4C-1A   (hex)		Max Communication GmbH
-144C1A     (base 16)		Max Communication GmbH
-				Siemensstrasse 47
-				Rellingen    25462
-				DE
-
-34-08-04   (hex)		D-Link Corporation
-340804     (base 16)		D-Link Corporation
-				No.289, Sinhu 3rd Rd., Neihu District, 
-				Taipei City     114
-				TW
-
-F0-5D-89   (hex)		Dycon Limited
-F05D89     (base 16)		Dycon Limited
-				Unit D
-				Mountain Ash  Rhondda Cynon Taff  CF45 4ER
-				GB
-
-AC-80-D6   (hex)		Hexatronic AB
-AC80D6     (base 16)		Hexatronic AB
-				Exportgatan 47B
-				Gothenburg    42246 
-				SE
-
-9C-F9-38   (hex)		AREVA NP GmbH
-9CF938     (base 16)		AREVA NP GmbH
-				Seligenstaedter Str. 100
-				Karlstein  Germany  63791
-				DE
-
-8C-DB-25   (hex)		ESG Solutions
-8CDB25     (base 16)		ESG Solutions
-				20 Hyperion Court
-				Kingston  Ontario  K7K 7K2
-				CA
-
-FC-35-98   (hex)		Favite Inc.
-FC3598     (base 16)		Favite Inc.
-				No.19, Lane 78, Yanhe St.,
-				Jhubei City  Hsinchu County  302
-				TW
-
-90-D9-2C   (hex)		HUG-WITSCHI AG
-90D92C     (base 16)		HUG-WITSCHI AG
-				Auriedstrasse 10
-				Boesingen  Fribourg  3178
-				CH
-
-98-8E-34   (hex)		ZHEJIANG BOXSAM ELECTRONIC CO.,LTD
-988E34     (base 16)		ZHEJIANG BOXSAM ELECTRONIC CO.,LTD
-				No.288,LONGTAN ROAD,
-				JINHUA CITY  ZHEJIANG PROVINCE,  321017
-				CN
-
-C4-71-FE   (hex)		Cisco Systems, Inc
-C471FE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-40-22-ED   (hex)		Digital Projection Ltd
-4022ED     (base 16)		Digital Projection Ltd
-				Greenside Way
-				Manchester  Lancs  M24 1XX
-				GB
-
-98-94-49   (hex)		Skyworth Wireless Technology Ltd.
-989449     (base 16)		Skyworth Wireless Technology Ltd.
-				Unit A Rm.3A01, Skyworth Bldg., Gaoxin Ave. 1.S.,
-				Nanshan District  Shenzhen  518057
-				CN
-
-2C-A1-57   (hex)		acromate, Inc.
-2CA157     (base 16)		acromate, Inc.
-				#1101, JnK Digital Tower, 111
-				Seoul    152-848
-				KR
-
-94-20-53   (hex)		Nokia Corporation
-942053     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-28-85-2D   (hex)		Touch Networks
-28852D     (base 16)		Touch Networks
-				2515 152nd Ave NE
-				Redmond  Washington  98052
-				US
-
-B8-BA-68   (hex)		Xi'an Jizhong Digital Communication Co.,Ltd
-B8BA68     (base 16)		Xi'an Jizhong Digital Communication Co.,Ltd
-				10 Block NO.1 Enterprise Newly-typed Industrial Zone High-Tech Zone XiÂ¡Â¯an,China
-				Xi'an  ShaanXi  710119
-				CN
-
-B0-B3-2B   (hex)		Slican Sp. z o.o.
-B0B32B     (base 16)		Slican Sp. z o.o.
-				M. Konopnickiej 18
-				Bydgoszcz  Kujawsko-Pomorskie  85-124
-				PL
-
-58-42-E4   (hex)		Baxter International Inc
-5842E4     (base 16)		Baxter International Inc
-				One Baxter Parkway
-				Deerfield  IL  60015
-				US
-
-B8-79-7E   (hex)		Secure Meters (UK) Limited
-B8797E     (base 16)		Secure Meters (UK) Limited
-				Secure House
-				Winchester  Hampshire  SO23 7RX
-				GB
-
-CC-9E-00   (hex)		Nintendo Co., Ltd.
-CC9E00     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-58-A7-6F   (hex)		iD corporation
-58A76F     (base 16)		iD corporation
-				goryokaku bld. 2F
-				hakodate  hokkaido  040-0011
-				JP
-
-00-06-F6   (hex)		Cisco Systems, Inc
-0006F6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-7D-B6   (hex)		Aliwei Communications, Inc
-747DB6     (base 16)		Aliwei Communications, Inc
-				Keji 6 Road , Hi-tech Industrial Park  
-				Shenzhen  Guangdong  518057
-				CN
-
-B0-65-63   (hex)		Shanghai Railway Communication Factory
-B06563     (base 16)		Shanghai Railway Communication Factory
-				No.179 West Jiangchang road
-				Shanghai    200436
-				CN
-
-40-18-D7   (hex)		Smartronix, Inc.
-4018D7     (base 16)		Smartronix, Inc.
-				44150 Smartronix Way
-				Hollywood  MD  20636
-				US
-
-4C-2C-80   (hex)		Beijing Skyway Technologies Co.,Ltd 
-4C2C80     (base 16)		Beijing Skyway Technologies Co.,Ltd 
-				No.5 Jiangtai Road, 
-				Beijing    100015
-				CN
-
-D4-9E-6D   (hex)		Wuhan Zhongyuan Huadian Science & Technology Co.,
-D49E6D     (base 16)		Wuhan Zhongyuan Huadian Science & Technology Co.,
-				NO.6, 6 Road, Sci. & Tech. region of HUST, East Lake Development Zone,
-				Wuhan   Hubei  430223
-				CN
-
-6C-2E-33   (hex)		Accelink Technologies Co.,Ltd.
-6C2E33     (base 16)		Accelink Technologies Co.,Ltd.
-				88 Youkeyuan Road,
-				Wuhan  Hubei  430074
-				CN
-
-40-98-7B   (hex)		Aisino Corporation
-40987B     (base 16)		Aisino Corporation
-				No.18 A,Xingshikou Road,Haidian District,
-				Beijing    100195
-				CN
-
-BC-38-D2   (hex)		Pandachip Limited
-BC38D2     (base 16)		Pandachip Limited
-				Unit 210, 2/F (Lakeside 1), Building 15, No. 8 Science Park West Avenue
-				Shatin, N.T.    
-				HK
-
-20-05-E8   (hex)		OOO InProMedia
-2005E8     (base 16)		OOO InProMedia
-				pr.4806, d.6
-				Zelenograd  Moscow  124466
-				RU
-
-F0-02-48   (hex)		SmarteBuilding
-F00248     (base 16)		SmarteBuilding
-				3267 Bee Cave Road
-				Austin  TX  78746
-				US
-
-AC-6F-4F   (hex)		Enspert Inc
-AC6F4F     (base 16)		Enspert Inc
-				2F., Daehwa B/D, 
-				Seoul    135090
-				KR
-
-E8-28-77   (hex)		TMY Co., Ltd.
-E82877     (base 16)		TMY Co., Ltd.
-				Attic Bldg. 3F, 1-2-10 Ise-cho,
-				Ashikaga-shi  Tochigi  326-0053
-				JP
-
-F0-C8-8C   (hex)		LeddarTech Inc.
-F0C88C     (base 16)		LeddarTech Inc.
-				2740 Einstein Street
-				Quebec City    G1P 4S4
-				CA
-
-40-37-AD   (hex)		Macro Image Technology, Inc.
-4037AD     (base 16)		Macro Image Technology, Inc.
-				East Bldg., 6th Floor, IT Venture Tower,
-				Seoul    138-950
-				KR
-
-28-ED-58   (hex)		JAG Jakob AG
-28ED58     (base 16)		JAG Jakob AG
-				Industriestrasse 20
-				BRUEGG  BE  2555
-				CH
-
-48-6B-91   (hex)		Fleetwood Group Inc.
-486B91     (base 16)		Fleetwood Group Inc.
-				11832 James St
-				Holland  Michigan  49424
-				US
-
-64-34-09   (hex)		BITwave Pte Ltd
-643409     (base 16)		BITwave Pte Ltd
-				2 Serangoon North Ave 5
-				    554911
-				SG
-
-40-C2-45   (hex)		Shenzhen Hexicom Technology Co., Ltd.
-40C245     (base 16)		Shenzhen Hexicom Technology Co., Ltd.
-				1510 West Building,Nanshan Software Park, Nanshan Dist.
-				Shenzhen  Guangdong  518053
-				CN
-
-CC-55-AD   (hex)		RIM
-CC55AD     (base 16)		RIM
-				Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-E8-75-7F   (hex)		FIRS Technologies(Shenzhen) Co., Ltd
-E8757F     (base 16)		FIRS Technologies(Shenzhen) Co., Ltd
-				Rm 12A, Area A, Hongsong Business Building, Tairan 9th Rd, Chegongmiao, 
-				Shenzhen  Guangdong  518040
-				CN
-
-F0-F7-B3   (hex)		Phorm
-F0F7B3     (base 16)		Phorm
-				222 Regent Street
-				London    W1B 5TR
-				GB
-
-00-D3-8D   (hex)		Hotel Technology Next Generation
-00D38D     (base 16)		Hotel Technology Next Generation
-				650 E. Algonquin Road
-				Schaumburg  IL  60173
-				US
-
-C8-3E-A7   (hex)		KUNBUS GmbH
-C83EA7     (base 16)		KUNBUS GmbH
-				Heerweg 15C
-				Denkendorf  BW  D-73770
-				DE
-
-60-89-3C   (hex)		Thermo Fisher Scientific P.O.A.
-60893C     (base 16)		Thermo Fisher Scientific P.O.A.
-				46 Jonspin Rd.
-				Wilmington  MA  01887
-				US
-
-D8-6B-F7   (hex)		Nintendo Co., Ltd.
-D86BF7     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-74-CD-0C   (hex)		Smith Myers Communications Ltd.
-74CD0C     (base 16)		Smith Myers Communications Ltd.
-				The Omega Centre
-				Biggleswade  BEDS  SG18 8QB
-				GB
-
-CC-CE-40   (hex)		Janteq Corp
-CCCE40     (base 16)		Janteq Corp
-				9272 Jeronimo Road
-				Irvine  CA  92618
-				US
-
-B8-EE-79   (hex)		YWire Technologies, Inc.
-B8EE79     (base 16)		YWire Technologies, Inc.
-				1372 Overdale
-				Montreal  QC  H3G 1V3
-				CA
-
-74-D6-75   (hex)		WYMA Tecnologia
-74D675     (base 16)		WYMA Tecnologia
-				Rua Clímaco Barbosa, 171-179
-				São Paulo    01523-000
-				BR
-
-B4-0E-DC   (hex)		LG-Ericsson Co.,Ltd.
-B40EDC     (base 16)		LG-Ericsson Co.,Ltd.
-				533,Hogye-1dong,Dongan-gu
-				Anyang-shi  Kyungki-do  431-749
-				KR
-
-E0-EE-1B   (hex)		Panasonic Automotive Systems Company of America
-E0EE1B     (base 16)		Panasonic Automotive Systems Company of America
-				776 Highway 74 South
-				Peachtree City  Georgia  30269
-				US
-
-74-BE-08   (hex)		ATEK Products, LLC
-74BE08     (base 16)		ATEK Products, LLC
-				210 NE 10th Avenue
-				Brainerd  MN  56401
-				US
-
-60-63-FD   (hex)		Transcend Communication Beijing Co.,Ltd.
-6063FD     (base 16)		Transcend Communication Beijing Co.,Ltd.
-				A-6,Keshi plaza,28#,Information Road
-				Beijing    100085
-				CN
-
-D8-B6-C1   (hex)		NetworkAccountant, Inc.
-D8B6C1     (base 16)		NetworkAccountant, Inc.
-				12101 Tukwila International Blvd.
-				Seattle  Washington  98168
-				US
-
-74-A4-A7   (hex)		QRS Music Technologies, Inc.
-74A4A7     (base 16)		QRS Music Technologies, Inc.
-				269 Quaker Drive
-				Seneca  PA  16346
-				US
-
-70-02-58   (hex)		01DB-METRAVIB
-700258     (base 16)		01DB-METRAVIB
-				200 CHEMIN DES ORMEAUX
-				LIMONEST CEDEX  RHONE  69578
-				FR
-
-F4-55-E0   (hex)		Niceway CNC Technology Co.,Ltd.Hunan Province
-F455E0     (base 16)		Niceway CNC Technology Co.,Ltd.Hunan Province
-				5/F,Innovation-Undertaking Center,HuanBao Industrial Park,199#,ZhenHua Road,
-				Changsha  Hunan  410116
-				CN
-
-20-FD-F1   (hex)		3COM EUROPE LTD
-20FDF1     (base 16)		3COM EUROPE LTD
-				Peoplebuilding 2
-				Hemel Hempstead  HERTS.  HP2 4NW
-				GB
-
-84-97-B8   (hex)		Memjet Inc.
-8497B8     (base 16)		Memjet Inc.
-				15920 Bernardo Center Drive
-				San Diego  CA  92127
-				US
-
-A0-DD-E5   (hex)		SHARP Corporation
-A0DDE5     (base 16)		SHARP Corporation
-				22-22,Nagaike-cho
-				Osaka city  Osaka prefecture  545-8522
-				JP
-
-20-6A-FF   (hex)		Atlas Elektronik UK Limited
-206AFF     (base 16)		Atlas Elektronik UK Limited
-				A22 Buliding, Dorset Green Tech. Park
-				Dorchester  Dorset  DT2 8ZB
-				GB
-
-AC-34-CB   (hex)		Shanhai GBCOM Communication Technology Co. Ltd
-AC34CB     (base 16)		Shanhai GBCOM Communication Technology Co. Ltd
-				Room 602, Building 6, No.555 Dongchuan Road
-				Shanghai     200241
-				CN
-
-90-88-A2   (hex)		IONICS TECHNOLOGY ME LTDA
-9088A2     (base 16)		IONICS TECHNOLOGY ME LTDA
-				RUA DEP. ANTONIO EDU VIEIRA
-				FLORIAN POLIS  SANTA CATARINA  88040000
-				BR
-
-40-CD-3A   (hex)		Z3 Technology
-40CD3A     (base 16)		Z3 Technology
-				2720 Harrison St
-				Evanston  IL  60201
-				US
-
-48-2C-EA   (hex)		Motorola Inc Business Light Radios
-482CEA     (base 16)		Motorola Inc Business Light Radios
-				8000 W Sunrise Boulevard
-				Plantation  Florida  33324
-				US
-
-00-33-6C   (hex)		SynapSense Corporation
-00336C     (base 16)		SynapSense Corporation
-				2365 Iron Point Road, Suite 100
-				Folsom  CA  95630
-				US
-
-F8-66-F2   (hex)		Cisco Systems, Inc
-F866F2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-AC-61-23   (hex)		Drivven, Inc.
-AC6123     (base 16)		Drivven, Inc.
-				12001 Network Boulevard
-				San Antonio  TX  78249
-				US
-
-10-0C-24   (hex)		pomdevices, LLC
-100C24     (base 16)		pomdevices, LLC
-				178 Colvard Park Dr
-				Durham  NC  27713
-				US
-
-58-F6-BF   (hex)		Kyoto University
-58F6BF     (base 16)		Kyoto University
-				Yoshida-Hommachi
-				Kyoto    6068501
-				JP
-
-78-EC-22   (hex)		Shanghai Qihui Telecom Technology Co., LTD
-78EC22     (base 16)		Shanghai Qihui Telecom Technology Co., LTD
-				Room 501, No 2 BoYun Rd, PuDong New Area, 
-				Shanghai    201203
-				CN
-
-0C-15-C5   (hex)		SDTEC Co., Ltd.
-0C15C5     (base 16)		SDTEC Co., Ltd.
-				167, Churye-2Dong, Sasang-Gu,
-				Busan     617-716
-				KR
-
-FC-75-E6   (hex)		Handreamnet
-FC75E6     (base 16)		Handreamnet
-				#1209 MarioTower, 222-12, Guro-Dong, Guro-Gu
-				Seoul  Guro-Gu  152-848
-				KR
-
-A0-A7-63   (hex)		Polytron Vertrieb GmbH
-A0A763     (base 16)		Polytron Vertrieb GmbH
-				Langwiesenweg 64-71
-				Bad Wildbad  Baden-Württemberg  75323
-				DE
-
-EC-23-68   (hex)		IntelliVoice Co.,Ltd.
-EC2368     (base 16)		IntelliVoice Co.,Ltd.
-				3-6 Kioicho
-				Chiyoda  Tokyo  102-0094
-				JP
-
-74-90-50   (hex)		Renesas Electronics Corporation
-749050     (base 16)		Renesas Electronics Corporation
-				1753, Shimonumabe, Nakahara-Ku
-				Kawasaki  Kanagawa  211-8668
-				JP
-
-38-95-92   (hex)		Beijing Tendyron Corporation
-389592     (base 16)		Beijing Tendyron Corporation
-				1810,Tower B,Jin-ma,Building,17 East Qing Hua Road 
-				Beijing    100083
-				CN
-
-A4-21-8A   (hex)		Nortel Networks
-A4218A     (base 16)		Nortel Networks
-				CARRETERA BASE AEREA # 5850
-				Zapopan  Jalisco  44130
-				MX
-
-F8-FB-2F   (hex)		Santur Corporation
-F8FB2F     (base 16)		Santur Corporation
-				40931 Encyclopedia Circle
-				Fremont  California  94538
-				US
-
-2C-CD-43   (hex)		Summit Technology Group
-2CCD43     (base 16)		Summit Technology Group
-				145 Belmont Drive
-				Somerset  NJ  08873
-				US
-
-64-99-5D   (hex)		LGE 
-64995D     (base 16)		LGE 
-				60-39 , Kasan -dong , Gumcheon-gu.
-				Seoul     153-801
-				KR
-
-7C-EF-18   (hex)		Creative Product Design Pty. Ltd.
-7CEF18     (base 16)		Creative Product Design Pty. Ltd.
-				82 Victoria Street
-				Sandringham  Victoria  3191
-				AU
-
-FC-7C-E7   (hex)		FCI USA LLC
-FC7CE7     (base 16)		FCI USA LLC
-				825 Old Trail Road
-				Etters  PA  17319
-				US
-
-14-54-12   (hex)		Entis Co., Ltd.
-145412     (base 16)		Entis Co., Ltd.
-				2-20-6, Hanaoka Bldg, 6F
-				Tokyo    1030007
-				JP
-
-7C-3E-9D   (hex)		PATECH
-7C3E9D     (base 16)		PATECH
-				#23-17. WonhyoRo-2Ga
-				YongSan-Gu  Seoul  140112
-				KR
-
-24-45-97   (hex)		GEMUE Gebr. Mueller Apparatebau
-244597     (base 16)		GEMUE Gebr. Mueller Apparatebau
-				Fritz-Mueller-Strasse 6-8
-				Ingelfingen Criesbach    74653
-				DE
-
-78-81-8F   (hex)		Server Racks Australia Pty Ltd
-78818F     (base 16)		Server Racks Australia Pty Ltd
-				4 - 6 Endurance Ave
-				Queanbeyan  NSW  2620
-				AU
-
-28-48-46   (hex)		GridCentric Inc.
-284846     (base 16)		GridCentric Inc.
-				350 Bloor St. E
-				Toronto  Ontario  M4W 0A1
-				CA
-
-30-69-4B   (hex)		RIM
-30694B     (base 16)		RIM
-				295 Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-6C-62-6D   (hex)		Micro-Star INT'L CO., LTD
-6C626D     (base 16)		Micro-Star INT'L CO., LTD
-				No.69, Lide St., Jhonghe City
-				Taipei Conuty    235
-				TW
-
-28-06-8D   (hex)		ITL, LLC
-28068D     (base 16)		ITL, LLC
-				P.O. Box 41875
-				Nashville  TN  37204
-				US
-
-C0-0D-7E   (hex)		Additech, Inc.
-C00D7E     (base 16)		Additech, Inc.
-				10925 Kinghurst
-				Houston  TX  77099
-				US
-
-84-C7-A9   (hex)		C3PO S.A.
-84C7A9     (base 16)		C3PO S.A.
-				Alejandro Goicoechea 6 Local 9
-				Sant Just Desvern  Barcelona  ES08960
-				ES
-
-D8-71-57   (hex)		Lenovo Mobile Communication Technology Ltd.
-D87157     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone,
-				Xiamen  Fujian  361006
-				CN
-
-60-9A-A4   (hex)		GVI SECURITY INC.
-609AA4     (base 16)		GVI SECURITY INC.
-				2801 TRADE CENTER DR STE.120
-				CARROLLTON  TX  75007
-				US
-
-64-10-84   (hex)		HEXIUM Technical Development Co., Ltd.
-641084     (base 16)		HEXIUM Technical Development Co., Ltd.
-				Vaci ut 51b
-				BUDAPEST    H-1134
-				HU
-
-34-21-09   (hex)		Jensen Scandinavia AS
-342109     (base 16)		Jensen Scandinavia AS
-				Balder Allé 3
-				Jessheim    2050
-				NO
-
-3C-10-6F   (hex)		ALBAHITH TECHNOLOGIES 
-3C106F     (base 16)		ALBAHITH TECHNOLOGIES 
-				165, King Abdullah Second Street
-				Amman    11953
-				JO
-
-0C-DD-EF   (hex)		Nokia Corporation
-0CDDEF     (base 16)		Nokia Corporation
-				Elektroniikkatie 10
-				Oulu    90570
-				FI
-
-EC-FE-7E   (hex)		BlueRadios, Inc.
-ECFE7E     (base 16)		BlueRadios, Inc.
-				7173 S. Havana Street, Suite 600
-				Englewood  Colorado  80112
-				US
-
-E4-AD-7D   (hex)		SCL Elements
-E4AD7D     (base 16)		SCL Elements
-				5800 St-Denis, #222
-				Montreal  Quebec  H2S3l5
-				CA
-
-F0-9C-BB   (hex)		RaonThink Inc.
-F09CBB     (base 16)		RaonThink Inc.
-				916, Byucksan Digital Valley 2-Cha, 481-10, Kasan-Dong, Kumcheon-Gu, 
-				Seoul    153-783
-				KR
-
-10-CC-DB   (hex)		AXIMUM PRODUITS ELECTRONIQUES
-10CCDB     (base 16)		AXIMUM PRODUITS ELECTRONIQUES
-				ZI DELTA INDUSTRIE
-				MARSEILLE CEDEX 11    13368
-				FR
-
-38-C7-BA   (hex)		CS Services Co.,Ltd.
-38C7BA     (base 16)		CS Services Co.,Ltd.
-				Imon BLDG 95 Edomachi
-				Kobe  Hyogo  6500033
-				JP
-
-EC-5C-69   (hex)		MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD.
-EC5C69     (base 16)		MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD.
-				1-16,5-CHOME,KOMATSU-DORI,
-				KOBE  HYOGO  652-0865
-				JP
-
-6C-92-BF   (hex)		Inspur Electronic Information Industry Co.,Ltd.
-6C92BF     (base 16)		Inspur Electronic Information Industry Co.,Ltd.
-				No 224 Shanda Road
-				Jinan  Shandong  250013
-				CN
-
-44-A8-C2   (hex)		SEWOO TECH CO., LTD
-44A8C2     (base 16)		SEWOO TECH CO., LTD
-				689-20 GEUMJUNG-DONG 
-				GUNPO-SI  KYUNGGI-DO  435-862
-				KR
-
-80-EE-73   (hex)		Shuttle Inc.
-80EE73     (base 16)		Shuttle Inc.
-				No. 30 Lane 76, Rei Kuang Rd
-				Taipei    114
-				TW
-
-FC-E2-3F   (hex)		CLAY PAKY SPA
-FCE23F     (base 16)		CLAY PAKY SPA
-				Via Pastrengo 3/b
-				Seriate  Bergamo  24068
-				IT
-
-58-57-0D   (hex)		Danfoss Solar Inverters
-58570D     (base 16)		Danfoss Solar Inverters
-				Jyllandsgade 28
-				Sønderborg    DK-6400
-				DK
-
-C4-82-3F   (hex)		Fujian Newland Auto-ID Tech. Co,.Ltd.
-C4823F     (base 16)		Fujian Newland Auto-ID Tech. Co,.Ltd.
-				Newland Science & Technology Park, No.1 Rujiang West Rd., Mawei
-				Fuzhou  Fujian  350015
-				CN
-
-E8-5B-5B   (hex)		LG ELECTRONICS INC
-E85B5B     (base 16)		LG ELECTRONICS INC
-				19-1, CHEONGHO-RI, JINWI-MYEON
-				PYEONGTAEK  GYEONGGI-DO  451-713
-				KR
-
-BC-A9-D6   (hex)		Cyber-Rain, Inc.
-BCA9D6     (base 16)		Cyber-Rain, Inc.
-				5272 Evanwood Avenue
-				Oak Park  California  91377-4809
-				US
-
-6C-3E-9C   (hex)		KE Knestel Elektronik GmbH
-6C3E9C     (base 16)		KE Knestel Elektronik GmbH
-				Osterwalder Str. 12
-				Hopferbach  Bavaria  87496
-				DE
-
-8C-D6-28   (hex)		Ikor Metering
-8CD628     (base 16)		Ikor Metering
-				Francisco Grandmontagne 4
-				San Sebastian  Guipuzcoa  20008
-				ES
-
-24-3C-20   (hex)		Dynamode Group
-243C20     (base 16)		Dynamode Group
-				Head Office, 132a St Albans Road
-				Watford  Herts  WD24 4AE
-				GB
-
-3C-39-C3   (hex)		JW Electronics Co., Ltd.
-3C39C3     (base 16)		JW Electronics Co., Ltd.
-				3A17, No. 5 Hsin-yi Rd., Sec. 5
-				Taipei    110
-				TW
-
-3C-05-AB   (hex)		Product Creation Studio
-3C05AB     (base 16)		Product Creation Studio
-				425 Westlake Ave N
-				Seattle  WA  98109
-				US
-
-F0-43-35   (hex)		DVN(Shanghai)Ltd.
-F04335     (base 16)		DVN(Shanghai)Ltd.
-				11F,Hechuan Building,2016 Yishan Rd,
-				Shanghai    201103
-				CN
-
-A4-79-E4   (hex)		KLINFO Corp
-A479E4     (base 16)		KLINFO Corp
-				301 923 wolpyung-dong
-				Daejeon    302-852
-				KR
-
-48-1B-D2   (hex)		Intron Scientific co., ltd.
-481BD2     (base 16)		Intron Scientific co., ltd.
-				6F., NO. 136,Sec 2,Keelung Rd., Da-an district
-				Taipei    106
-				TW
-
-D0-F0-DB   (hex)		Ericsson
-D0F0DB     (base 16)		Ericsson
-				250 Holger Way
-				SAN JOSE  CA  95134
-				US
-
-7C-14-76   (hex)		Damall Technologies SAS
-7C1476     (base 16)		Damall Technologies SAS
-				Corso della Repubblica 65
-				Fabriano  Ancona  60044
-				IT
-
-8C-54-1D   (hex)		LGE 
-8C541D     (base 16)		LGE 
-				60-39 , Kasan -dong , Gumcheon-gu.
-				Seoul     153-801
-				KR
-
-00-A2-DA   (hex)		INAT GmbH
-00A2DA     (base 16)		INAT GmbH
-				Ostendstraße 50A
-				Nuremberg  Bavaria  90482
-				DE
-
-00-3C-C5   (hex)		WONWOO Engineering Co., Ltd
-003CC5     (base 16)		WONWOO Engineering Co., Ltd
-				7F 201, Techno-Park SsangYong III, 
-				Bucheon City  Gyeonggi-Do  421-808
-				KR
-
-F0-77-D0   (hex)		Xcellen
-F077D0     (base 16)		Xcellen
-				15F KINS Tower 25-1,Jeongja-dong,Bungdang-gu,
-				Seongnam  Gyeonggi  463811
-				KR
-
-4C-C6-02   (hex)		Radios, Inc.
-4CC602     (base 16)		Radios, Inc.
-				31355 State Road 46
-				Sorrenot  Floriad  32776
-				US
-
-80-71-1F   (hex)		Juniper Networks
-80711F     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-88-FD-15   (hex)		LINEEYE CO., LTD
-88FD15     (base 16)		LINEEYE CO., LTD
-				5F Marufuku Bldg. 39-1 Karahashi
-				Kyoto    601-8468
-				JP
-
-88-4B-39   (hex)		Siemens AG, Healthcare Sector
-884B39     (base 16)		Siemens AG, Healthcare Sector
-				Henkestrasse 127
-				Erlangen  Bavaria  91052
-				DE
-
-D8-28-C9   (hex)		General Electric Consumer and Industrial
-D828C9     (base 16)		General Electric Consumer and Industrial
-				AP35-1405
-				Louisville  KY  40225
-				US
-
-44-C2-33   (hex)		Guangzhou Comet Technology Development Co.Ltd
-44C233     (base 16)		Guangzhou Comet Technology Development Co.Ltd
-				Rm 304,FL 3,Block G,Science and  Technology Innovation Base,
-				Guangzhou  Guangdong  510663
-				CN
-
-30-EF-D1   (hex)		Alstom Strongwish (Shenzhen) Co., Ltd.
-30EFD1     (base 16)		Alstom Strongwish (Shenzhen) Co., Ltd.
-				5F,Building No.6, Keji Middle 2 Road High-Tech Industrial Park, 
-				Shen Zhen  Guangdong  518057
-				CN
-
-7C-2C-F3   (hex)		Secure Electrans Ltd
-7C2CF3     (base 16)		Secure Electrans Ltd
-				Pioneer House, Pioneer Business Park
-				Ellesmere Port    CH65 1AD
-				GB
-
-08-16-51   (hex)		SHENZHEN SEA STAR TECHNOLOGY CO.,LTD
-081651     (base 16)		SHENZHEN SEA STAR TECHNOLOGY CO.,LTD
-				Seastar industrial Park, BaoLong  6th Ave
-				ShenZhen  GuangDong  518116
-				CN
-
-A8-63-DF   (hex)		DISPLAIRE CORPORATION
-A863DF     (base 16)		DISPLAIRE CORPORATION
-				1300 Valley House Dr, Ste 100
-				Rohnert Park  CA  94928
-				US
-
-18-3B-D2   (hex)		BYD Precision Manufacture Company Ltd.
-183BD2     (base 16)		BYD Precision Manufacture Company Ltd.
-				No3000 LongDong Avenue, Pudong District
-				Shanghai    201203
-				CN
-
-E4-35-93   (hex)		Hangzhou GoTo technology Co.Ltd
-E43593     (base 16)		Hangzhou GoTo technology Co.Ltd
-				Room 1303,Boee buliding,3760 Nanhuan Road, Binjiang, 
-				Hangzhou  Zhejiang  310053
-				CN
-
-2C-3A-28   (hex)		Fagor Electrónica
-2C3A28     (base 16)		Fagor Electrónica
-				B. San Andres, s/n
-				Mondragón  Guipuzcoa  20500
-				ES
-
-B4-58-61   (hex)		CRemote, LLC
-B45861     (base 16)		CRemote, LLC
-				1195 Noel Drive
-				MENLO PARK  CA  94025
-				US
-
-B0-97-3A   (hex)		E-Fuel Corporation
-B0973A     (base 16)		E-Fuel Corporation
-				15466 Los Gatos Blvd. #37
-				Los Gatos  CA  95032
-				US
-
-20-4E-6B   (hex)		Axxana(israel) ltd
-204E6B     (base 16)		Axxana(israel) ltd
-				Habarzel 38
-				Tel aviv    69710
-				IL
-
-80-F5-93   (hex)		IRCO Sistemas de Telecomunicación S.A.
-80F593     (base 16)		IRCO Sistemas de Telecomunicación S.A.
-				Via Sergia 98
-				Mataró  Barcelona  08302
-				ES
-
-E4-97-F0   (hex)		Shanghai VLC Technologies Ltd. Co.
-E497F0     (base 16)		Shanghai VLC Technologies Ltd. Co.
-				Room 901, B-Zone, East Beijing Road
-				Shanghai    200001
-				CN
-
-B4-08-32   (hex)		TC Communications
-B40832     (base 16)		TC Communications
-				17575 Cartwright Road
-				Irvine  CA  92614
-				US
-
-EC-DE-3D   (hex)		Lamprey Networks, Inc.
-ECDE3D     (base 16)		Lamprey Networks, Inc.
-				58 Dover Road
-				Durham  NH  03824
-				US
-
-6C-FF-BE   (hex)		MPB Communications Inc.
-6CFFBE     (base 16)		MPB Communications Inc.
-				147 Hymus Blvd
-				Pointe-Claire  Quebec  H9R 1E9
-				CA
-
-30-41-74   (hex)		ALTEC LANSING LLC
-304174     (base 16)		ALTEC LANSING LLC
-				535 ROUTES 6 & 209
-				MILFORD  PA  18337
-				US
-
-80-B2-89   (hex)		Forworld Electronics Ltd.
-80B289     (base 16)		Forworld Electronics Ltd.
-				No.16 Keyuan 2nd Rd., Situn District
-				Taichung City    886
-				TW
-
-E8-3A-97   (hex)		Toshiba Corporation
-E83A97     (base 16)		Toshiba Corporation
-				1-1-1, Shibaura, Minato-ku
-				Tokyo    00000
-				JP
-
-10-56-CA   (hex)		Peplink International Ltd.
-1056CA     (base 16)		Peplink International Ltd.
-				17/F, Park Building,
-				Cheung Sha Wan    
-				HK
-
-48-6F-D2   (hex)		StorSimple Inc
-486FD2     (base 16)		StorSimple Inc
-				2350 Mission College Blvd
-				Santa Clara  CA  95054
-				US
-
-A0-3A-75   (hex)		PSS Belgium N.V.
-A03A75     (base 16)		PSS Belgium N.V.
-				Hoogveld 50
-				Dendermonde    9200
-				BE
-
-24-DB-AD   (hex)		ShopperTrak RCT Corporation
-24DBAD     (base 16)		ShopperTrak RCT Corporation
-				200 W. Monroe Street
-				Chicago  IL  60606
-				US
-
-9C-EB-E8   (hex)		BizLink (Kunshan) Co.,Ltd
-9CEBE8     (base 16)		BizLink (Kunshan) Co.,Ltd
-				No.168,Nanhe Road,Economic & Technological Development Zone,
-				Kunshan City  Jiangsu Province  215300
-				CN
-
-04-0E-C2   (hex)		ViewSonic Mobile China Limited
-040EC2     (base 16)		ViewSonic Mobile China Limited
-				Room 601, The Gate Tower B, No.19, Zhongguancun Street, Haidian District
-				Beijing    100080
-				CN
-
-C8-D1-D1   (hex)		AGAiT Technology Corporation
-C8D1D1     (base 16)		AGAiT Technology Corporation
-				5F,No.27-8, Sec. 2, Zhongzheng E. Rd., Danshui Township 
-				Taipei County     25170
-				TW
-
-00-DB-45   (hex)		THAMWAY CO.,LTD.
-00DB45     (base 16)		THAMWAY CO.,LTD.
-				3-9-2
-				Fuji  Shizuoka  417-0001
-				JP
-
-D4-9C-28   (hex)		JayBird LLC
-D49C28     (base 16)		JayBird LLC
-				3676 California Ave
-				Salt Lake City  UT  84104
-				US
-
-74-F7-26   (hex)		Neuron Robotics
-74F726     (base 16)		Neuron Robotics
-				91 Pearson Ave
-				Somerville  MA  02144
-				US
-
-28-72-C5   (hex)		Smartmatic Corp
-2872C5     (base 16)		Smartmatic Corp
-				1001 Broken Sound Pkwy NW Suite D
-				Boca Raton  Florida  33487
-				US
-
-E0-8F-EC   (hex)		REPOTEC CO., LTD.
-E08FEC     (base 16)		REPOTEC CO., LTD.
-				3F, 258. 
-				CHUNG HO CITY, TAIPEI COUNTY    235
-				TW
-
-AC-E9-AA   (hex)		Hay Systems Ltd
-ACE9AA     (base 16)		Hay Systems Ltd
-				Watermark
-				Livingston  West Lothian  EH54 7EG
-				GB
-
-08-2A-D0   (hex)		SRD Innovations Inc.
-082AD0     (base 16)		SRD Innovations Inc.
-				11525 Valley Ridge Dr. NW
-				Calgary  AB  T3B 5T4
-				CA
-
-88-98-21   (hex)		TERAON
-889821     (base 16)		TERAON
-				2F Seohan Bldg., 1552-10, Seocho-Dong, Seocho-Gu,
-				Seoul    137-070
-				KR
-
-E0-E7-51   (hex)		Nintendo Co., Ltd.
-E0E751     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-3A-AF   (hex)		BlueBit Ltd.
-003AAF     (base 16)		BlueBit Ltd.
-				Unit B, 21/F., 78 Hung To Road,
-				Kowloon,     
-				HK
-
-64-16-8D   (hex)		Cisco Systems, Inc
-64168D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-3A-9C   (hex)		Cisco Systems, Inc
-003A9C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-7C-6C-8F   (hex)		AMS NEVE LTD
-7C6C8F     (base 16)		AMS NEVE LTD
-				BILLINGTON ROAD
-				BURNLEY  LANCASHIRE  BB11 5UB
-				GB
-
-9C-B2-06   (hex)		PROCENTEC
-9CB206     (base 16)		PROCENTEC
-				Klopperman 16
-				Wateringen  Zuid Holland  2292JD
-				NL
-
-88-ED-1C   (hex)		Cudo Communication Co., Ltd.
-88ED1C     (base 16)		Cudo Communication Co., Ltd.
-				10F ArirangTV 1467-80, Seocho-3dong, Seocho-gu
-				Seoul    137-868
-				KR
-
-9C-CD-82   (hex)		CHENG UEI PRECISION INDUSTRY CO.,LTD
-9CCD82     (base 16)		CHENG UEI PRECISION INDUSTRY CO.,LTD
-				No.18, Chung Shan Rd., Tu-Cheng Industry Park 
-				Tu Cheng City  Taipei Hsien  23680
-				TW
-
-F0-62-81   (hex)		ProCurve Networking by HP
-F06281     (base 16)		ProCurve Networking by HP
-				60 Alexandra Terrace
-				    118502
-				SG
-
-C0-9C-92   (hex)		COBY
-C09C92     (base 16)		COBY
-				COBY Electronics ShenZhen R&D Center 
-				SHENZHEN  GUANGDONG  518109
-				CN
-
-C0-38-F9   (hex)		Nokia Danmark A/S
-C038F9     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-F4-63-49   (hex)		Diffon Corporation
-F46349     (base 16)		Diffon Corporation
-				Digital Tower Aston 1505
-				Seoul    153803
-				KR
-
-74-F0-7D   (hex)		BnCOM Co.,Ltd
-74F07D     (base 16)		BnCOM Co.,Ltd
-				Room1007, Daehyun Techno World, 174
-				Uiwang-si  Gyeonggi-do  437-753
-				KR
-
-F8-52-DF   (hex)		VNL Europe AB
-F852DF     (base 16)		VNL Europe AB
-				Finlandsgatan 10
-				Kista    164 74
-				SE
-
-A8-CB-95   (hex)		EAST BEST CO., LTD.
-A8CB95     (base 16)		EAST BEST CO., LTD.
-				4F,NO.98,SHING TEH ROAD
-				SAN CHUNG CITY   TAIPEI  241
-				TW
-
-F4-5F-F7   (hex)		DQ Technology Inc.
-F45FF7     (base 16)		DQ Technology Inc.
-				5111 Johnson Drive
-				Pleasanton  CA  94588
-				US
-
-7C-3B-D5   (hex)		Imago Group
-7C3BD5     (base 16)		Imago Group
-				Ramon Marti Alsina 2-4-6
-				Badalona  Barcelona  08911
-				ES
-
-5C-E2-23   (hex)		Delphin Technology AG
-5CE223     (base 16)		Delphin Technology AG
-				Lustheide 81
-				Bergisch-Gladbach    51427
-				DE
-
-F8-71-FE   (hex)		The Goldman Sachs Group, Inc.
-F871FE     (base 16)		The Goldman Sachs Group, Inc.
-				Christchurch Court | 10-15 Newgate Street
-				London  London  EC1A 7HD
-				GB
-
-2C-19-84   (hex)		IDN Telecom, Inc.
-2C1984     (base 16)		IDN Telecom, Inc.
-				2669 Great Arbor Way
-				Union City  CA  94587
-				US
-
-D8-C3-FB   (hex)		DETRACOM
-D8C3FB     (base 16)		DETRACOM
-				41 AVENUE DE L'EUROPE
-				CASTELNAU D'ESTRETEFONDS    31620
-				FR
-
-58-F6-7B   (hex)		Xia Men UnionCore Technology LTD.
-58F67B     (base 16)		Xia Men UnionCore Technology LTD.
-				(224)2F Chuangye Building,Xiamen Pioneering Park for Overseas Chinese Scholars
-				Xia Men  Fu Jian  361009
-				CN
-
-6C-F0-49   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-6CF049     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
-				
-				Pin-Jen  Taoyuan  324
-				TW
-
-64-4F-74   (hex)		LENUS Co., Ltd.
-644F74     (base 16)		LENUS Co., Ltd.
-				18-5 Gwacheon-Dong
-				Gwacheon  Gyeonggi-Do  427-060
-				KR
-
-78-7F-62   (hex)		GiK mbH
-787F62     (base 16)		GiK mbH
-				Goethestraße 5
-				Aachen    52064
-				DE
-
-40-15-97   (hex)		Protect America, Inc.
-401597     (base 16)		Protect America, Inc.
-				5100 N IH-35
-				Round Rock  TX  78681
-				US
-
-C4-FC-E4   (hex)		DishTV NZ Ltd
-C4FCE4     (base 16)		DishTV NZ Ltd
-				10 Penney Ave
-				Auckland    1041
-				NZ
-
-E8-0B-13   (hex)		Akib Systems Taiwan, INC
-E80B13     (base 16)		Akib Systems Taiwan, INC
-				No.582-1, RuiGuang Rd
-				Taipei    114
-				TW
-
-EC-6C-9F   (hex)		Chengdu Volans Technology CO.,LTD
-EC6C9F     (base 16)		Chengdu Volans Technology CO.,LTD
-				2nd Floor Building 4B Hi-Tech Incubation Park,Nanyan Xian,Tianfu Ave
-				Chengdu  Sichuan  610041
-				CN
-
-40-EF-4C   (hex)		Fihonest communication co.,Ltd
-40EF4C     (base 16)		Fihonest communication co.,Ltd
-				Room902,Park road,Zhixing business-building
-				Dongguan  Guangdong  523560
-				CN
-
-00-27-1E   (hex)		Xagyl Communications
-00271E     (base 16)		Xagyl Communications
-				1667 Marronier Crt
-				Cumberland  Ontario  K4C 1C2
-				CA
-
-00-27-1D   (hex)		Comba Telecom Systems (China) Ltd.
-00271D     (base 16)		Comba Telecom Systems (China) Ltd.
-				10 Shenzhou Road
-				Guangzhou  Guangdong  510663
-				CN
-
-00-27-20   (hex)		NEW-SOL COM
-002720     (base 16)		NEW-SOL COM
-				Bucheon Tecnopark 403-602
-				Bucheon city  Kyoungki-do  420-734
-				KR
-
-00-26-F0   (hex)		cTrixs International GmbH.
-0026F0     (base 16)		cTrixs International GmbH.
-				Lieferinger Hauptstr. 140
-				Salzburg  Salzburg  5020
-				AT
-
-00-26-EA   (hex)		Cheerchip Electronic Technology (ShangHai) Co., Ltd.
-0026EA     (base 16)		Cheerchip Electronic Technology (ShangHai) Co., Ltd.
-				ROOM 1202, NO. 51, 7 Area, NO. 1467 CAOBAO ROAD;
-				SHANGHAI    201101
-				CN
-
-00-27-08   (hex)		Nordiag ASA
-002708     (base 16)		Nordiag ASA
-				Frysjaveien 40
-				Oslo    0884
-				NO
-
-00-27-02   (hex)		SolarEdge Technologies
-002702     (base 16)		SolarEdge Technologies
-				1 Abba Eban St.
-				Herzelia    46725
-				IL
-
-00-27-04   (hex)		Accelerated Concepts, Inc
-002704     (base 16)		Accelerated Concepts, Inc
-				1208 E Kennedy Blvd
-				Tampa  FL  33602
-				US
-
-00-26-FA   (hex)		BandRich Inc.
-0026FA     (base 16)		BandRich Inc.
-				7F., No.188, Baociao Road
-				Sindian City  Taipei  23145
-				TW
-
-00-26-F9   (hex)		S.E.M. srl
-0026F9     (base 16)		S.E.M. srl
-				via Lecco, 61
-				Vimercate  Monza Brianza  20059
-				IT
-
-00-26-FD   (hex)		Interactive Intelligence
-0026FD     (base 16)		Interactive Intelligence
-				7601 Interactive Way
-				  IN  46278
-				US
-
-00-26-F7   (hex)		Nivetti Systems Pvt. Ltd.
-0026F7     (base 16)		Nivetti Systems Pvt. Ltd.
-				#727,8th Main, JP Nagar 3rd Phase
-				Bangalore    560078
-				IN
-
-00-26-F6   (hex)		Military Communication Institute
-0026F6     (base 16)		Military Communication Institute
-				ul. Warszawska 22A
-				Zegrze    05-130
-				PL
-
-00-26-DD   (hex)		Fival Science & Technology Co.,Ltd.
-0026DD     (base 16)		Fival Science & Technology Co.,Ltd.
-				1/F, Building 57, No.461
-				Shanghai  Shanghai  200233
-				CN
-
-00-26-DE   (hex)		FDI MATELEC
-0026DE     (base 16)		FDI MATELEC
-				Route de saint symphorien
-				Les landes Génusson    85130
-				FR
-
-00-26-DA   (hex)		Universal Media Corporation /Slovakia/ s.r.o.
-0026DA     (base 16)		Universal Media Corporation /Slovakia/ s.r.o.
-				Mickiewiczova 7104/14
-				Bratislava    811 07
-				SK
-
-00-26-DB   (hex)		Ionics EMS Inc.
-0026DB     (base 16)		Ionics EMS Inc.
-				Carmelray Industrial Park 2, Brgy. Tulo
-				Calamba  Laguna  4027
-				PH
-
-00-26-D5   (hex)		Ory Solucoes em Comercio de Informatica Ltda.
-0026D5     (base 16)		Ory Solucoes em Comercio de Informatica Ltda.
-				Av. Unisinos, 615
-				Sao Leopoldo  RS  93022000
-				BR
-
-00-26-CE   (hex)		Kozumi USA Corp.
-0026CE     (base 16)		Kozumi USA Corp.
-				3005 Hartridge Terrace
-				Wellington  FL  33414
-				US
-
-00-27-11   (hex)		LanPro Inc
-002711     (base 16)		LanPro Inc
-				1880 NW 93Av
-				Miami  Florida  33172
-				US
-
-00-26-86   (hex)		Quantenna Communcations, Inc.
-002686     (base 16)		Quantenna Communcations, Inc.
-				3450 W. Warren Ave.
-				Fremont  CA  94538
-				US
-
-00-26-84   (hex)		KISAN SYSTEM
-002684     (base 16)		KISAN SYSTEM
-				GWANGMYEONG TECHNOPARK B-403
-				GWANGMYEONG  GYEONGGI  423-050
-				KR
-
-00-26-80   (hex)		SIL3 Pty.Ltd
-002680     (base 16)		SIL3 Pty.Ltd
-				Factory 10
-				DANDENONG  VICTORIA  3175
-				AU
-
-00-26-BF   (hex)		ShenZhen Temobi Science&Tech Development Co.,Ltd
-0026BF     (base 16)		ShenZhen Temobi Science&Tech Development Co.,Ltd
-				4FloorG, Jinrun Tower, 6019 Shennan Road
-				ShenZhen    518000
-				CN
-
-00-26-B4   (hex)		Ford Motor Company
-0026B4     (base 16)		Ford Motor Company
-				20300 Rotunda Drive
-				Dearborn  MI  48124
-				US
-
-00-26-CA   (hex)		Cisco Systems, Inc
-0026CA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-26-C9   (hex)		Proventix Systems, Inc.
-0026C9     (base 16)		Proventix Systems, Inc.
-				4518 Valleydale Road
-				Birmingham  AL  35242
-				US
-
-00-26-90   (hex)		I DO IT
-002690     (base 16)		I DO IT
-				1308, WoolimLions2nd Doksan Station
-				Seoul    153-787
-				KR
-
-00-26-8F   (hex)		MTA SpA
-00268F     (base 16)		MTA SpA
-				Viale dell Industria 12
-				Codogno  LODI  26845
-				IT
-
-00-26-79   (hex)		Euphonic Technologies, Inc.
-002679     (base 16)		Euphonic Technologies, Inc.
-				2-5-10 Shin-yokohama, Kouhoku-ku
-				Yokohama    222-0033
-				JP
-
-00-26-AC   (hex)		Shanghai LUSTER Teraband photonic Co., Ltd.
-0026AC     (base 16)		Shanghai LUSTER Teraband photonic Co., Ltd.
-				F4, No.39 ChengZhong Rd.
-				Shanghai    201800
-				CN
-
-00-26-A6   (hex)		TRIXELL
-0026A6     (base 16)		TRIXELL
-				460, Rue du pommarin
-				MOIRANS    38210
-				FR
-
-00-26-9C   (hex)		ITUS JAPAN CO. LTD
-00269C     (base 16)		ITUS JAPAN CO. LTD
-				7F Shinkawa B/D
-				Chuoku  Tokyo  1040033
-				JP
-
-00-26-94   (hex)		Senscient Ltd
-002694     (base 16)		Senscient Ltd
-				Unit 2, Block A, Arena Business Centre
-				Poole  Dorset  BH17 7FJ
-				GB
-
-00-26-76   (hex)		COMMidt AS
-002676     (base 16)		COMMidt AS
-				Kikregata 57-59
-				Levanger  Nord-Troendelag  7600
-				NO
-
-00-26-1D   (hex)		COP SECURITY SYSTEM CORP.
-00261D     (base 16)		COP SECURITY SYSTEM CORP.
-				4~7F, No.5, Lane 130, Min-Chung Rd.,
-				Taipei    23141
-				TW
-
-00-26-17   (hex)		OEM Worldwide
-002617     (base 16)		OEM Worldwide
-				2920 Kelly Ave
-				Watertown  SD  57201
-				US
-
-00-26-13   (hex)		Engel Axil S.L.
-002613     (base 16)		Engel Axil S.L.
-				Puig dels Tudons, 6
-				Barbera del Valles  Barcelona  08210
-				ES
-
-00-26-38   (hex)		Xia Men Joyatech Co., Ltd.
-002638     (base 16)		Xia Men Joyatech Co., Ltd.
-				Room 304, 28th Building, Guanri Road, Xiamen Software Park
-				Xiamen  Fujian Province  361008
-				CN
-
-00-26-3A   (hex)		Digitec Systems
-00263A     (base 16)		Digitec Systems
-				7,1st Street, Kasturibai Nagar
-				Chennai  Tamil Nadu  600054
-				IN
-
-00-26-0F   (hex)		Linn Products Ltd
-00260F     (base 16)		Linn Products Ltd
-				Glasgow Road
-				Glasgow  Scotland  G76 0EQ
-				GB
-
-00-26-0C   (hex)		Dataram
-00260C     (base 16)		Dataram
-				186 Princeton Rd.
-				West Windsor  NJ  08550
-				US
-
-00-26-2B   (hex)		Wongs Electronics Co. Ltd.
-00262B     (base 16)		Wongs Electronics Co. Ltd.
-				Wanfeng Ind. Esata, Shajing, Baoan,
-				Shenzhen  Guang Dong  518104
-				CN
-
-00-26-20   (hex)		ISGUS GmbH
-002620     (base 16)		ISGUS GmbH
-				Oberdorfstraße 18 - 22
-				VS - Schwenningen  BW  78054
-				DE
-
-00-26-01   (hex)		Cutera Inc
-002601     (base 16)		Cutera Inc
-				3240 Bayshore Blvd
-				Brisbane  CA  94405
-				US
-
-00-26-35   (hex)		Bluetechnix GmbH
-002635     (base 16)		Bluetechnix GmbH
-				Waidhausenstr. 3/19
-				Vienna    1140
-				AT
-
-00-26-57   (hex)		OOO NPP EKRA
-002657     (base 16)		OOO NPP EKRA
-				I.Yakovleva St., 3
-				Cheboksary  Chuvash Republic  428003
-				RU
-
-00-26-52   (hex)		Cisco Systems, Inc
-002652     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-26-66   (hex)		EFM Networks
-002666     (base 16)		EFM Networks
-				6F, Benposra II 1197-1 Bojeong Giheung Gu
-				Yong In  Kyunggi do  446913
-				KR
-
-00-25-F5   (hex)		DVS Korea, Co., Ltd
-0025F5     (base 16)		DVS Korea, Co., Ltd
-				497-3, SangHa-Dong, Giheung-gu
-				Yong-In city  Gyeonggi-do  446-914
-				KR
-
-00-25-EB   (hex)		Reutech Radar Systems (PTY) Ltd
-0025EB     (base 16)		Reutech Radar Systems (PTY) Ltd
-				35 Elektron Avenue
-				Stellenbosch  Western Cape  7600
-				ZA
-
-00-25-EE   (hex)		Avtex Ltd
-0025EE     (base 16)		Avtex Ltd
-				Unit G5 Capital Business Park
-				Cardiff    CF3 2PX
-				GB
-
-00-25-AE   (hex)		Microsoft Corporation
-0025AE     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				Redmond  Washington  98052-6399
-				US
-
-00-25-AF   (hex)		COMFILE Technology
-0025AF     (base 16)		COMFILE Technology
-				Guro 5 dong, Guro-gu
-				Seoul    152-842
-				KR
-
-00-25-A8   (hex)		Kontron (BeiJing) Technology Co.,Ltd
-0025A8     (base 16)		Kontron (BeiJing) Technology Co.,Ltd
-				17 Building, Block #1,ABP.  188 Western South 4th Ring Road
-				BeiJing    100070
-				CN
-
-00-25-D9   (hex)		DataFab Systems Inc.
-0025D9     (base 16)		DataFab Systems Inc.
-				385-3 Hongzun Road
-				Pingzhen City  Taoyuan County  32466
-				TW
-
-00-25-D6   (hex)		The Kroger Co.
-0025D6     (base 16)		The Kroger Co.
-				11450 Grooms Road
-				Blue Ash  OH  45242
-				US
-
-00-25-D1   (hex)		Eastern Asia Technology Limited
-0025D1     (base 16)		Eastern Asia Technology Limited
-				8F-1, No. 188, Baoqiao Rd., Xindian Dist.
-				New Taipei City    23145
-				TW
-
-00-25-CD   (hex)		Skylane Optics
-0025CD     (base 16)		Skylane Optics
-				Rue d'Arlon, 6
-				Windhof    8399
-				LU
-
-00-25-BF   (hex)		Wireless Cables Inc.
-0025BF     (base 16)		Wireless Cables Inc.
-				1414 Soquel Ave, Ste 212
-				Santa Cruz  CA  95062
-				US
-
-00-25-B9   (hex)		Cypress Solutions Inc
-0025B9     (base 16)		Cypress Solutions Inc
-				3066 Beta Ave
-				  BC  V5G 4K4
-				CA
-
-00-25-B6   (hex)		Telecom FM
-0025B6     (base 16)		Telecom FM
-				895 Plymouth Road
-				Slough  Berkshire  SL1 4LP
-				GB
-
-00-25-A5   (hex)		Walnut Media Network
-0025A5     (base 16)		Walnut Media Network
-				440 N Wolfe Rd
-				Sunnyvale  CA  94085
-				US
-
-00-25-A4   (hex)		EuroDesign embedded technologies GmbH
-0025A4     (base 16)		EuroDesign embedded technologies GmbH
-				Waldstratraße 4A
-				Kirchdorf a.d. Amper  Bayern  85414
-				DE
-
-00-25-C1   (hex)		Nawoo Korea Corp.
-0025C1     (base 16)		Nawoo Korea Corp.
-				4Fl., Hanwon Bldg., 6-1, Sunae-dong, Bundang-gu,
-				Seongnam-si  Gyeonggi-do  463-825
-				KR
-
-00-25-F6   (hex)		netTALK.com, Inc.
-0025F6     (base 16)		netTALK.com, Inc.
-				1100 NW 163RD DRIVE
-				NORTH MIAMI BEACH  FL  33169
-				US
-
-00-25-7A   (hex)		CAMCO Produktions- und Vertriebs-GmbH für  Beschallungs- und Beleuchtungsanlagen
-00257A     (base 16)		CAMCO Produktions- und Vertriebs-GmbH für  Beschallungs- und Beleuchtungsanlagen
-				Fischpicke 5
-				Wenden  NRW  57482
-				DE
-
-00-25-76   (hex)		NELI TECHNOLOGIES
-002576     (base 16)		NELI TECHNOLOGIES
-				Route Nationale
-				LE RHEU    35650
-				FR
-
-00-25-74   (hex)		KUNIMI MEDIA DEVICE Co., Ltd.
-002574     (base 16)		KUNIMI MEDIA DEVICE Co., Ltd.
-				3 KITAMACHIDA YAMAZAKI
-				KUNIMI, DATE  FUKUSHIMA  969-1771
-				JP
-
-00-25-59   (hex)		Syphan Technologies Ltd
-002559     (base 16)		Syphan Technologies Ltd
-				The Watermill
-				Skipton  North Yorkshire  BD23 3AG
-				GB
-
-00-25-54   (hex)		Pixel8 Networks
-002554     (base 16)		Pixel8 Networks
-				22 Great Oaks Blvd, Suite 150
-				San Jose  CA  95119
-				US
-
-00-25-40   (hex)		Quasar Technologies, Inc.
-002540     (base 16)		Quasar Technologies, Inc.
-				1701 Barrett Lakes Boulevard
-				Kennesaw  GA  30144
-				US
-
-00-25-33   (hex)		WITTENSTEIN AG
-002533     (base 16)		WITTENSTEIN AG
-				Walter-Wittenstein-Straße 1
-				Igersheim    97999
-				DE
-
-00-25-30   (hex)		Aetas Systems Inc.
-002530     (base 16)		Aetas Systems Inc.
-				3A3, No. 1, LiHsin Road I
-				HsinChu  Taiwan  30078
-				TW
-
-00-25-2C   (hex)		Entourage Systems, Inc.
-00252C     (base 16)		Entourage Systems, Inc.
-				7901 Jones Branch Drive
-				McLean  Virginia  22102
-				US
-
-00-25-8C   (hex)		ESUS ELEKTRONIK SAN. VE DIS. TIC. LTD. STI.
-00258C     (base 16)		ESUS ELEKTRONIK SAN. VE DIS. TIC. LTD. STI.
-				ESENSEHIR MAHALLESI KURKCULER CADDESI
-				ISTANBUL    34776
-				TR
-
-00-25-5A   (hex)		Tantalus Systems Corp.
-00255A     (base 16)		Tantalus Systems Corp.
-				301-3480 Gilmore Way
-				Burnaby  BC  V5G 4Y1
-				CA
-
-00-25-87   (hex)		Vitality, Inc.
-002587     (base 16)		Vitality, Inc.
-				One Broadway
-				Cambridge  MA  02142
-				US
-
-00-25-73   (hex)		ST Electronics (Info-Security) Pte Ltd
-002573     (base 16)		ST Electronics (Info-Security) Pte Ltd
-				100, Jurong East Street 21, ST Electronics Jurong East Bldg
-				    609602
-				SG
-
-00-25-6F   (hex)		Dantherm Power
-00256F     (base 16)		Dantherm Power
-				Marienlystvej 65
-				Skive    7800
-				DK
-
-00-25-2F   (hex)		Energy, Inc.
-00252F     (base 16)		Energy, Inc.
-				3297 Pacific Street
-				Charleston  SC  29418
-				US
-
-00-25-0A   (hex)		Security Expert Co. Ltd
-00250A     (base 16)		Security Expert Co. Ltd
-				8F-3, No.2, Jian 8th Rd.,
-				Jhonghe  Taipei  235
-				TW
-
-00-25-05   (hex)		eks Engel GmbH & Co. KG
-002505     (base 16)		eks Engel GmbH & Co. KG
-				Schuetzenstrasse 2
-				Wenden-Hillmicke  NRW  57482
-				DE
-
-00-25-09   (hex)		SHARETRONIC Group LTD
-002509     (base 16)		SHARETRONIC Group LTD
-				ShaJing,Bao'an Zone,
-				ShenZhen  Guangdong  518104
-				CN
-
-00-24-DA   (hex)		Innovar Systems Limited
-0024DA     (base 16)		Innovar Systems Limited
-				12155 Commissioner Drive
-				North Jackson  Ohio  44451
-				US
-
-00-24-D8   (hex)		IlSung Precision
-0024D8     (base 16)		IlSung Precision
-				182-2, Jegi-ri, Jeongnam-myeon
-				Hwanseong-si  Gyeonggi-do  445-964
-				KR
-
-00-24-CD   (hex)		Willow Garage, Inc.
-0024CD     (base 16)		Willow Garage, Inc.
-				68 Willow Rd.
-				Menlo Park  CA  94025
-				US
-
-00-24-D3   (hex)		QUALICA Inc.
-0024D3     (base 16)		QUALICA Inc.
-				5-29-15,Toyo,
-				Tokyo    135-0016
-				JP
-
-00-24-CE   (hex)		Exeltech Inc
-0024CE     (base 16)		Exeltech Inc
-				7317 Jack Newell Blvd North
-				Fort Worth  TX  76118
-				US
-
-00-24-CF   (hex)		Inscape Data Corporation
-0024CF     (base 16)		Inscape Data Corporation
-				1611 South Main Street
-				Milpitas  CA  95035
-				US
-
-00-24-C6   (hex)		Hager Electro SAS
-0024C6     (base 16)		Hager Electro SAS
-				132, boulevard d'Europe
-				Obernai  Bas-Rhin  67215
-				FR
-
-00-24-FD   (hex)		Accedian Networks Inc
-0024FD     (base 16)		Accedian Networks Inc
-				2351 Alfred Nobel Blvd
-				Saint Laurent  QC  h4s 2A9
-				CA
-
-00-25-23   (hex)		OCP Inc.
-002523     (base 16)		OCP Inc.
-				18495 S Dixie Hwy    PMB 107
-				Miami  Florida  33157
-				US
-
-00-25-1D   (hex)		DSA Encore, LLC
-00251D     (base 16)		DSA Encore, LLC
-				50 Pocono Rd
-				Brookfield  CT  06804
-				US
-
-00-25-0F   (hex)		On-Ramp Wireless, Inc.
-00250F     (base 16)		On-Ramp Wireless, Inc.
-				16885 West Bernardo Drive
-				San Diego  CA  92127
-				US
-
-00-24-F5   (hex)		NDS Surgical Imaging
-0024F5     (base 16)		NDS Surgical Imaging
-				5750 Hellyer Ave.
-				San Jose  CA.  95138
-				US
-
-00-24-67   (hex)		AOC International (Europe) GmbH
-002467     (base 16)		AOC International (Europe) GmbH
-				Lahnstrasse 86A
-				Berlin    12055
-				DE
-
-00-24-6D   (hex)		Weinzierl Engineering GmbH
-00246D     (base 16)		Weinzierl Engineering GmbH
-				Bahnhofstrasse 6
-				Tyrlaching  Bayern  84558
-				DE
-
-00-24-70   (hex)		AUROTECH ultrasound AS.
-002470     (base 16)		AUROTECH ultrasound AS.
-				Svingen 1
-				Tydal  Sr-Tr  N-7590
-				NO
-
-00-24-6A   (hex)		Solid Year Co., Ltd.
-00246A     (base 16)		Solid Year Co., Ltd.
-				2F-1, No. 94, Bao-chung Road,
-				Hsin-tien City  Taipei Hsien  23147
-				TW
-
-00-24-92   (hex)		Motorola, Broadband Solutions Group
-002492     (base 16)		Motorola, Broadband Solutions Group
-				1101 Marina Village Parkway
-				Alameda  CA  94501
-				US
-
-00-24-8B   (hex)		HYBUS CO., LTD.
-00248B     (base 16)		HYBUS CO., LTD.
-				Rm# 701, Daerung Post Tower 1st
-				SEOUL    152-790
-				KR
-
-00-24-84   (hex)		Bang and Olufsen Medicom a/s
-002484     (base 16)		Bang and Olufsen Medicom a/s
-				Gimsinglundvej 20
-				Struer  DK  DK7600
-				DK
-
-00-24-80   (hex)		Meteocontrol GmbH
-002480     (base 16)		Meteocontrol GmbH
-				Spichererstrasse 48
-				Augsburg  Bavaria  86152
-				DE
-
-00-24-7A   (hex)		FU YI CHENG Technology Co., Ltd.
-00247A     (base 16)		FU YI CHENG Technology Co., Ltd.
-				13F, No. 105-1, Jilin Rd., Luju Shiang,
-				Taoyuan    338
-				TW
-
-00-24-76   (hex)		TAP.tv
-002476     (base 16)		TAP.tv
-				16w361 South Frontage Road
-				Burr Ridge  IL  60527
-				US
-
-00-24-B4   (hex)		ESCATRONIC GmbH
-0024B4     (base 16)		ESCATRONIC GmbH
-				Wuerzburger Str. 8
-				Laatzen  Lower Saxony  30880
-				DE
-
-00-24-B1   (hex)		Coulomb Technologies
-0024B1     (base 16)		Coulomb Technologies
-				1692 Dell Ave
-				Campbell  CA  95008
-				US
-
-00-24-9C   (hex)		Bimeng Comunication System Co. Ltd
-00249C     (base 16)		Bimeng Comunication System Co. Ltd
-				Level 16/f, Tower B,Sinotrans Plaza,No.43, Xi Zhi Men Northern Road,Hai dian District
-				Beijing    100044
-				CN
-
-00-24-98   (hex)		Cisco Systems, Inc
-002498     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-24-52   (hex)		Silicon Software GmbH
-002452     (base 16)		Silicon Software GmbH
-				Steubenstrasse 46
-				Mannheim  Baden-Wuerttemberg  68163
-				DE
-
-00-24-53   (hex)		Initra d.o.o.
-002453     (base 16)		Initra d.o.o.
-				Slomskova 33
-				Ljubljana    1000
-				SI
-
-00-24-4C   (hex)		Solartron Metrology Ltd
-00244C     (base 16)		Solartron Metrology Ltd
-				Steyning Way
-				Bognor Regis  West Sussex  PO20 9ST
-				GB
-
-00-24-48   (hex)		SpiderCloud Wireless, Inc
-002448     (base 16)		SpiderCloud Wireless, Inc
-				475 Sycamore Drive
-				Milpitas  CA  95035
-				US
-
-00-24-4B   (hex)		PERCEPTRON INC
-00244B     (base 16)		PERCEPTRON INC
-				47827 HALYARD DR
-				PLYMOUTH  MI  48170
-				US
-
-00-24-28   (hex)		EnergyICT
-002428     (base 16)		EnergyICT
-				Theodoor Sevenslaan 104a
-				Kortrijk    8500
-				BE
-
-00-24-17   (hex)		Thomson Telecom Belgium
-002417     (base 16)		Thomson Telecom Belgium
-				Prins Boudewijnlaan 47
-				Edegem  Antwerp  B-2650
-				BE
-
-00-24-16   (hex)		Any Use
-002416     (base 16)		Any Use
-				LG APT 211-1805,
-				Yongin City  Gyeong-Gi Province  448-150
-				KR
-
-00-24-2A   (hex)		Hittite Microwave Corporation
-00242A     (base 16)		Hittite Microwave Corporation
-				20 Alpha Rd
-				Chelmsford  MA  01824
-				US
-
-00-24-22   (hex)		Knapp Logistik Automation GmbH
-002422     (base 16)		Knapp Logistik Automation GmbH
-				Günter Knapp-Straße 5-7
-				Hart bei Graz  Styria  8075
-				AT
-
-00-24-1B   (hex)		iWOW Communications Pte Ltd
-00241B     (base 16)		iWOW Communications Pte Ltd
-				1 Lorong 2 Toa Payoh #04-01
-				    319637
-				SG
-
-00-24-5E   (hex)		Hivision Co.,ltd
-00245E     (base 16)		Hivision Co.,ltd
-				2201-2202, COFCO Property Tower,
-				Shenzhen  Guangdong  518101
-				CN
-
-00-24-4D   (hex)		Hokkaido Electronics Corporation
-00244D     (base 16)		Hokkaido Electronics Corporation
-				1-1 East 10 North 10
-				Sapporo  Hokkaido  065-0010
-				JP
-
-00-24-42   (hex)		Axona Limited
-002442     (base 16)		Axona Limited
-				Unit 4U St. Albans Enterprise Centre
-				St. Albans  Herts  AL3 6EN
-				GB
-
-00-24-00   (hex)		Nortel Networks
-002400     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75081
-				US
-
-00-23-FB   (hex)		IP Datatel, LLC.
-0023FB     (base 16)		IP Datatel, LLC.
-				13110 Southwest Freeway
-				Sugar Land  Texas  77478
-				US
-
-00-24-09   (hex)		The Toro Company
-002409     (base 16)		The Toro Company
-				5825 Jasmine Street
-				Riverside  CA  92504
-				US
-
-00-24-06   (hex)		Pointmobile
-002406     (base 16)		Pointmobile
-				301,World Meridian Verture Center-1 60-24
-				Seoul  Geumcheon-gu  153781
-				KR
-
-00-24-3C   (hex)		S.A.A.A.
-00243C     (base 16)		S.A.A.A.
-				Z.A. Croix Saint Mathieu
-				GALLARDON  Eure et Loir  28320
-				FR
-
-00-23-D3   (hex)		AirLink WiFi Networking Corp.
-0023D3     (base 16)		AirLink WiFi Networking Corp.
-				19F-1 Room A , No.97, Sec 4, Chung Hsin Rd.,
-				San Chung City,  Taipei Hsien  241
-				TW
-
-00-23-CA   (hex)		Behind The Set, LLC
-0023CA     (base 16)		Behind The Set, LLC
-				2185 Knollwood Dr.
-				Boulder  CO  80302
-				US
-
-00-23-CB   (hex)		Shenzhen Full-join Technology Co.,Ltd
-0023CB     (base 16)		Shenzhen Full-join Technology Co.,Ltd
-				9/F,No.1,Xinrui Road,Hourui ,Xixiang Town, Bao'an District
-				ShenZhen  GuangDong  518000
-				CN
-
-00-23-AD   (hex)		Xmark Corporation
-0023AD     (base 16)		Xmark Corporation
-				309 Legget  Drive
-				Ottawa  Ontario  K2K 3A3
-				CA
-
-00-23-AB   (hex)		Cisco Systems, Inc
-0023AB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-23-A4   (hex)		New Concepts Development Corp.
-0023A4     (base 16)		New Concepts Development Corp.
-				2650 Bridge Lane
-				Woodstock  IL  60098
-				US
-
-00-23-DC   (hex)		Benein, Inc
-0023DC     (base 16)		Benein, Inc
-				Hyojachonjesangga228 B9, 297,
-				Sengnam-si  Kyunggi-do  463-818
-				KR
-
-00-23-D1   (hex)		TRG
-0023D1     (base 16)		TRG
-				Wisma Kosgoro 13th Floor
-				Jakarta Pusat    10350
-				ID
-
-00-23-FE   (hex)		Biodevices, SA
-0023FE     (base 16)		Biodevices, SA
-				Rua 5 de Outubro, 309
-				Porto    4100-175
-				PT
-
-00-23-F4   (hex)		Masternaut
-0023F4     (base 16)		Masternaut
-				4, rue Charles Cros
-				Louviers    27407
-				FR
-
-00-23-D0   (hex)		Uniloc USA Inc.
-0023D0     (base 16)		Uniloc USA Inc.
-				3333 Michelson Drive
-				Irvine  CA  92612
-				US
-
-00-23-C7   (hex)		AVSystem
-0023C7     (base 16)		AVSystem
-				ul. Friedleina 4
-				Kraków  małopolskie  30-009
-				PL
-
-00-23-C3   (hex)		LogMeIn, Inc.
-0023C3     (base 16)		LogMeIn, Inc.
-				500 Unicorn Park Drive
-				Woburn  Massachusetts  01801
-				US
-
-00-23-B0   (hex)		COMXION Technology Inc.
-0023B0     (base 16)		COMXION Technology Inc.
-				11F, No. 111, Sec 2, Keelung Rd., Sinyi Distric
-				Taipei  Taiwan  110
-				TW
-
-00-23-E1   (hex)		Cavena Image Products AB
-0023E1     (base 16)		Cavena Image Products AB
-				Nytorpsvägen 26
-				Täby  Stockholm  se-183 53
-				SE
-
-00-23-7E   (hex)		ELSTER GMBH
-00237E     (base 16)		ELSTER GMBH
-				KUHLMANNSTRASSE 10
-				HAMELN    31785
-				DE
-
-00-23-7C   (hex)		NEOTION
-00237C     (base 16)		NEOTION
-				ZI les Paluds
-				AUBAGNE    F-13400
-				FR
-
-00-23-7A   (hex)		RIM
-00237A     (base 16)		RIM
-				295 Phillip Street
-				Waterloo  Ontario  N2L 3W8
-				CA
-
-00-23-6D   (hex)		ResMed Ltd
-00236D     (base 16)		ResMed Ltd
-				1, Elizabeth Macarthur Drive
-				Bella Vista  NSW  2153
-				AU
-
-00-23-6B   (hex)		Xembedded, Inc.
-00236B     (base 16)		Xembedded, Inc.
-				1050 Highland Dr
-				Ann Arbor  MI  48108
-				US
-
-00-23-61   (hex)		Unigen Corporation
-002361     (base 16)		Unigen Corporation
-				45388 Warm Springs Blvd
-				Fremont  CA  94539
-				US
-
-00-23-2C   (hex)		Senticare
-00232C     (base 16)		Senticare
-				161 Worcester Rd
-				Framingham  MA  01701
-				US
-
-00-23-2B   (hex)		IRD A/S
-00232B     (base 16)		IRD A/S
-				Kullinggade 31
-				Svendborg  Fyn  5700
-				DK
-
-00-23-36   (hex)		METEL s.r.o.
-002336     (base 16)		METEL s.r.o.
-				Zizkuv Kopec 617
-				Ceska Skalice  Nachod  55203
-				CZ
-
-00-23-38   (hex)		OJ-Electronics A/S
-002338     (base 16)		OJ-Electronics A/S
-				Stenager 13B
-				Sønderborg    6400
-				DK
-
-00-23-3B   (hex)		C-Matic Systems Ltd
-00233B     (base 16)		C-Matic Systems Ltd
-				Warren Court
-				Crowborough  East Sussex  TN6 2QX
-				GB
-
-00-23-2A   (hex)		eonas IT-Beratung und -Entwicklung GmbH
-00232A     (base 16)		eonas IT-Beratung und -Entwicklung GmbH
-				Greifenhagener Str. 54
-				Berlin    10437
-				DE
-
-00-23-27   (hex)		Shouyo Electronics CO., LTD
-002327     (base 16)		Shouyo Electronics CO., LTD
-				4F., No.8, Lane 345, Yang Kung St.
-				Taipei    11491
-				TW
-
-00-23-28   (hex)		ALCON TELECOMMUNICATIONS CO., LTD.
-002328     (base 16)		ALCON TELECOMMUNICATIONS CO., LTD.
-				2nd FL, NO 480-5, SEC. 6, YEN-PING N. RD.,
-				TAIPEI  TAIWAN  111
-				TW
-
-00-23-72   (hex)		MORE STAR INDUSTRIAL GROUP LIMITED
-002372     (base 16)		MORE STAR INDUSTRIAL GROUP LIMITED
-				Rm1221-1225, F12 Sangda Science and Technology Building ,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-23-4C   (hex)		KTC AB
-00234C     (base 16)		KTC AB
-				F O Petersons gata 6
-				Vastra Frolunda  Gothenburg  SE-42131
-				SE
-
-00-23-43   (hex)		TEM AG
-002343     (base 16)		TEM AG
-				Triststrasse 8
-				Chur    7007
-				CH
-
-00-23-5F   (hex)		Silicon Micro Sensors GmbH
-00235F     (base 16)		Silicon Micro Sensors GmbH
-				Grenzstrasse 28 / Gebäude 32
-				Dresden  Saxony  01109
-				DE
-
-00-23-85   (hex)		ANTIPODE
-002385     (base 16)		ANTIPODE
-				5 RUE DE DOUAI
-				PARIS  ILE DE FRANCE  75009
-				FR
-
-00-22-D8   (hex)		Shenzhen GST Security and Safety Technology Limited
-0022D8     (base 16)		Shenzhen GST Security and Safety Technology Limited
-				Room 502,Building 6 of Kupai Infomation Harbour,
-				Shenzhen  Guangdong  518040
-				CN
-
-00-22-DC   (hex)		Vigil Health Solutions Inc.
-0022DC     (base 16)		Vigil Health Solutions Inc.
-				2102-4464 Markham St
-				Victoria  BC  V8Z 7X8
-				CA
-
-00-22-D9   (hex)		Fortex Industrial Ltd.
-0022D9     (base 16)		Fortex Industrial Ltd.
-				Flat 16, 12 /F.,Pacific Trade Centre
-				Kowloon  Hong Kong  852
-				CN
-
-00-22-D3   (hex)		Hub-Tech
-0022D3     (base 16)		Hub-Tech
-				77, Imae-dong
-				Seongnam-si  Gyeonggi-do  463-829
-				KR
-
-00-22-D4   (hex)		ComWorth Co., Ltd.
-0022D4     (base 16)		ComWorth Co., Ltd.
-				2-35-7 Nishimagome
-				Ohta-ku  Tokyo  143-0026
-				JP
-
-00-22-FE   (hex)		Advanced Illumination
-0022FE     (base 16)		Advanced Illumination
-				440 State Garage Road
-				Rochester  Vermont  05767
-				US
-
-00-23-00   (hex)		Cayee Computer Ltd.
-002300     (base 16)		Cayee Computer Ltd.
-				Units 1002-1003, 10/F, Join-In Hang Sing Centre
-				Kwai Chung  N.T  
-				HK
-
-00-22-F3   (hex)		SHARP Corporation
-0022F3     (base 16)		SHARP Corporation
-				22-22,Nagaike-cho
-				Osaka city  Osaka prefecture  545-8522
-				JP
-
-00-22-F6   (hex)		Syracuse Research Corporation
-0022F6     (base 16)		Syracuse Research Corporation
-				6225 Running Ridge Road
-				North Syracuse  NY  13212
-				US
-
-00-23-0D   (hex)		Nortel Networks
-00230D     (base 16)		Nortel Networks
-				2221 Lakeside Blvd
-				Richardson  TX  75081
-				US
-
-00-23-03   (hex)		LITE-ON IT Corporation
-002303     (base 16)		LITE-ON IT Corporation
-				14F, No. 392, Ruey Kuang Road, Neihu
-				Taipei City    114
-				TW
-
-00-22-ED   (hex)		TSI Power Corporation
-0022ED     (base 16)		TSI Power Corporation
-				1103 West Pierce Avenue
-				Antigo  WI  54409
-				US
-
-00-22-E1   (hex)		ZORT Labs, LLC.
-0022E1     (base 16)		ZORT Labs, LLC.
-				44H Dover Point Road
-				Dover  NH  03820
-				US
-
-00-22-E0   (hex)		Atlantic Software Technologies S.r.L.
-0022E0     (base 16)		Atlantic Software Technologies S.r.L.
-				Via Martino Bassi, 9
-				Milano    20148
-				IT
-
-00-22-DF   (hex)		TAMUZ Monitors
-0022DF     (base 16)		TAMUZ Monitors
-				Tiedenkamp 16
-				Henstedt-Ulzburg  SH  24558
-				DE
-
-00-23-1A   (hex)		ITF Co., Ltd.
-00231A     (base 16)		ITF Co., Ltd.
-				2-2-11 Nishiki-cho
-				Tachikawa-shi  Tokyo  190-0022
-				JP
-
-00-22-BC   (hex)		JDSU France SAS
-0022BC     (base 16)		JDSU France SAS
-				34 rue Necker
-				SAINT ETIENNE  LOIRE  42000
-				FR
-
-00-22-AA   (hex)		Nintendo Co., Ltd.
-0022AA     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-22-C9   (hex)		Lenord, Bauer & Co GmbH
-0022C9     (base 16)		Lenord, Bauer & Co GmbH
-				Dohlenstr 32
-				Oberhausen  NRW  46145
-				DE
-
-00-22-8C   (hex)		Photon Europe GmbH
-00228C     (base 16)		Photon Europe GmbH
-				Jülicher Straße 376
-				Aachen  Nordrhein-Westfalen  52070
-				DE
-
-00-22-8B   (hex)		Kensington Computer Products Group
-00228B     (base 16)		Kensington Computer Products Group
-				333 Twin Dolphin Dr.
-				Redwood Shores  CA  94065
-				US
-
-00-22-8D   (hex)		GBS Laboratories LLC
-00228D     (base 16)		GBS Laboratories LLC
-				2325 Dulles Corner Blvd
-				Herndon  VA  20171
-				US
-
-00-22-4C   (hex)		Nintendo Co., Ltd.
-00224C     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-22-4A   (hex)		RAYLASE AG
-00224A     (base 16)		RAYLASE AG
-				Argelsrieder Feld 2-4
-				Wessling  Bavaria  82234
-				DE
-
-00-22-4B   (hex)		AIRTECH TECHNOLOGIES, INC.
-00224B     (base 16)		AIRTECH TECHNOLOGIES, INC.
-				19fl-4, no.77, Hsin Tai Wu Rd., sec.1, Hsin-Chih
-				Taipei    221
-				TW
-
-00-22-56   (hex)		Cisco Systems, Inc
-002256     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-22-52   (hex)		ZOLL Lifecor Corporation
-002252     (base 16)		ZOLL Lifecor Corporation
-				121 Freeport Road
-				Pittsburgh  PA  15238
-				US
-
-00-22-4D   (hex)		MITAC INTERNATIONAL CORP.
-00224D     (base 16)		MITAC INTERNATIONAL CORP.
-				6TH FL., NO187, TIDING BLVD., SEC. 2
-				Taipei    114
-				TW
-
-00-22-9F   (hex)		Sensys Traffic AB
-00229F     (base 16)		Sensys Traffic AB
-				Slottsgatan 14
-				Jonkoping  Smaland  55322
-				SE
-
-00-22-99   (hex)		SeaMicro Inc.
-002299     (base 16)		SeaMicro Inc.
-				4677 Old Ironsides Dr.,
-				Santa Clara  CA  95054
-				US
-
-00-22-6D   (hex)		Shenzhen GIEC Electronics Co., Ltd.
-00226D     (base 16)		Shenzhen GIEC Electronics Co., Ltd.
-				24/F, XiNian Center, ShenNan Road 6021#, Futian District
-				Shenzhen  Guangdong Province  518040
-				CN
-
-00-22-6E   (hex)		Gowell Electronic Limited
-00226E     (base 16)		Gowell Electronic Limited
-				Room 3601 ,36 Floor,Golden Central Tower,Jintian Road,Futian Central District,
-				Shenzhen  GuangDong  518048
-				CN
-
-00-22-5D   (hex)		Digicable Network India Pvt. Ltd.
-00225D     (base 16)		Digicable Network India Pvt. Ltd.
-				7B, Shah Industrial Estate
-				Andheri - West, Mumbai.  Maharashtra  400 053
-				IN
-
-00-22-7B   (hex)		Apogee Labs, Inc.
-00227B     (base 16)		Apogee Labs, Inc.
-				210 S. 3rd St.
-				North Wales  PA  19454
-				US
-
-00-22-7D   (hex)		YE DATA INC.
-00227D     (base 16)		YE DATA INC.
-				182 Shinko
-				Iruma  Saitama  358-0055
-				JP
-
-00-22-A8   (hex)		Ouman Oy
-0022A8     (base 16)		Ouman Oy
-				Voimatie 6
-				Kempele    FIN-90440
-				FI
-
-00-22-23   (hex)		TimeKeeping Systems, Inc.
-002223     (base 16)		TimeKeeping Systems, Inc.
-				30700 Bainbridge Road
-				Solon  OH  44139
-				US
-
-00-22-1A   (hex)		Audio Precision
-00221A     (base 16)		Audio Precision
-				5750 SW Arctic Drive
-				Beaverton  OR  97005
-				US
-
-00-22-18   (hex)		AKAMAI TECHNOLOGIES INC
-002218     (base 16)		AKAMAI TECHNOLOGIES INC
-				150 BROADWAY
-				CAMBRIDGE  MA  02142
-				US
-
-00-22-3C   (hex)		RATIO Entwicklungen GmbH
-00223C     (base 16)		RATIO Entwicklungen GmbH
-				Ludwig-Erhard-Strasse 22
-				Hamburg    20459
-				DE
-
-00-21-E7   (hex)		Informatics Services Corporation
-0021E7     (base 16)		Informatics Services Corporation
-				140, Negin Bldg.,
-				Tehran    1549534511
-				IR
-
-00-21-DC   (hex)		TECNOALARM S.r.l.
-0021DC     (base 16)		TECNOALARM S.r.l.
-				Via Cirie'
-				San Mauro Torinese  Torino  10099
-				IT
-
-00-21-F1   (hex)		Tutus Data AB
-0021F1     (base 16)		Tutus Data AB
-				Svardvagen 11
-				Danderyd  Stockholm  18233
-				SE
-
-00-21-E3   (hex)		SerialTek LLC
-0021E3     (base 16)		SerialTek LLC
-				1570 Oakland Road
-				San Jose  CA  95131
-				US
-
-00-22-1C   (hex)		Private
-00221C     (base 16)		Private
-
-00-22-22   (hex)		Schaffner Deutschland GmbH
-002222     (base 16)		Schaffner Deutschland GmbH
-				Nürtingen Branch
-				Nürtingen  BW  D-72622
-				DE
-
-00-21-F8   (hex)		Enseo, Inc.
-0021F8     (base 16)		Enseo, Inc.
-				401 International Parkway
-				Richardson  TX  75081
-				US
-
-00-21-F3   (hex)		Si14 SpA
-0021F3     (base 16)		Si14 SpA
-				Via Tommaseo 77
-				Padova  PD  35131
-				IT
-
-00-22-31   (hex)		SMT&C Co., Ltd.
-002231     (base 16)		SMT&C Co., Ltd.
-				2Fr. Haksan Bldg. 110, Gwangjang-dong, Gwangjin-gu
-				Seoul    143-802
-				KR
-
-00-22-13   (hex)		PCI CORPORATION
-002213     (base 16)		PCI CORPORATION
-				No.25, Lane 66, Hebei 1st St.,  Beitun District
-				Taichung    406
-				TW
-
-00-22-01   (hex)		Aksys Networks Inc
-002201     (base 16)		Aksys Networks Inc
-				428, 3553 - 31 Street NW
-				Calgary    T2L 2K7
-				CA
-
-00-21-7B   (hex)		Bastec AB
-00217B     (base 16)		Bastec AB
-				Hästvägen 4A
-				Malmö  SE  212 35
-				SE
-
-00-21-76   (hex)		YMax Telecom Ltd.
-002176     (base 16)		YMax Telecom Ltd.
-				11 Moshe Levi str.
-				Rishon Le Zion    75658
-				IL
-
-00-21-71   (hex)		Wesung TNC Co., Ltd.
-002171     (base 16)		Wesung TNC Co., Ltd.
-				102-1409, Bucheon Chunui Technopark 1st,
-				Bucheon-City,  Gyeongggi-Do  420-857
-				KR
-
-00-21-93   (hex)		Videofon MV
-002193     (base 16)		Videofon MV
-				6 Blackoak Mews
-				Newtown  PA  18940
-				US
-
-00-21-92   (hex)		Baoding Galaxy Electronic Technology  Co.,Ltd
-002192     (base 16)		Baoding Galaxy Electronic Technology  Co.,Ltd
-				NO.91 Fengfan Rd.,GaoKai District,Baoding City,Hebei Prov.China 071051
-				Baoding City  Hebei Prov.  071051
-				CN
-
-00-21-A7   (hex)		Hantle System Co., Ltd.
-0021A7     (base 16)		Hantle System Co., Ltd.
-				481-10 Byucksan Digital Vally II, RM 1511
-				Seoul City  Seoul  153-783
-				KR
-
-00-21-9C   (hex)		Honeywld Technology Corp.
-00219C     (base 16)		Honeywld Technology Corp.
-				No.40,Hsueh-Fu Rd.
-				Hsinchu    300
-				TW
-
-00-21-9A   (hex)		Cambridge Visual Networks Ltd
-00219A     (base 16)		Cambridge Visual Networks Ltd
-				61 Selwyn Road
-				Cambridge  Cambridgeshire  CB3 9EA
-				GB
-
-00-21-D8   (hex)		Cisco Systems, Inc
-0021D8     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-21-D7   (hex)		Cisco Systems, Inc
-0021D7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-21-D9   (hex)		SEKONIC CORPORATION
-0021D9     (base 16)		SEKONIC CORPORATION
-				7-24-14
-				NERIMA-KU  TOKYO  178-8686
-				JP
-
-00-21-DA   (hex)		Automation Products Group Inc.
-0021DA     (base 16)		Automation Products Group Inc.
-				1025 West 1700 North
-				Logan  Utah  84321
-				US
-
-00-21-B5   (hex)		Galvanic Ltd
-0021B5     (base 16)		Galvanic Ltd
-				38 Nothumberland Road
-				Dublin    2
-				IE
-
-00-21-BD   (hex)		Nintendo Co., Ltd.
-0021BD     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-21-C4   (hex)		Consilium AB
-0021C4     (base 16)		Consilium AB
-				Västra Finnbodavägen 2-4
-				Nacka  Stockholm  13131
-				SE
-
-00-21-89   (hex)		AppTech, Inc.
-002189     (base 16)		AppTech, Inc.
-				363 E Greyhound Pass
-				Carmel  Indiana  46032
-				US
-
-00-21-22   (hex)		Chip-pro Ltd.
-002122     (base 16)		Chip-pro Ltd.
-				5F.-4, No.63, Siwei Rd., North District,
-				Hsinchu    300
-				TW
-
-00-21-25   (hex)		KUK JE TONG SHIN Co.,LTD
-002125     (base 16)		KUK JE TONG SHIN Co.,LTD
-				476-3
-				Incheon  Kwangyouk-Si  407-060
-				KR
-
-00-21-26   (hex)		Shenzhen Torch Equipment Co., Ltd.
-002126     (base 16)		Shenzhen Torch Equipment Co., Ltd.
-				Floor 5, Block 3, Liming Industrial District, Zhongshanyuan Road, Nanshan,
-				Shenzhen  Guangdong  518052
-				CN
-
-00-21-13   (hex)		Padtec S/A
-002113     (base 16)		Padtec S/A
-				Road Campinas Mogi-Mirim km 118,5
-				Campinas  São Paulo  13086-902
-				BR
-
-00-21-12   (hex)		WISCOM SYSTEM CO.,LTD
-002112     (base 16)		WISCOM SYSTEM CO.,LTD
-				100 Jiangjun Road,Jiangning,
-				Nanjing    211100
-				CN
-
-00-21-0E   (hex)		Orpak Systems L.T.D.
-00210E     (base 16)		Orpak Systems L.T.D.
-				31 Lechi St
-				Bnei - Brak    51114
-				IL
-
-00-21-61   (hex)		Yournet Inc.
-002161     (base 16)		Yournet Inc.
-				KT R&D Center
-				Seoul    137-792
-				KR
-
-00-21-5F   (hex)		IHSE GmbH
-00215F     (base 16)		IHSE GmbH
-				Maybachstraße 11
-				Oberteuringen  Baden-Württemberg  88094
-				DE
-
-00-21-35   (hex)		ALCATEL-LUCENT
-002135     (base 16)		ALCATEL-LUCENT
-				Ramirez de Prado 5
-				Madrid    28045
-				ES
-
-00-21-38   (hex)		Cepheid
-002138     (base 16)		Cepheid
-				904 Caribbean Drive
-				Sunnyvale  CA  94089
-				US
-
-00-21-47   (hex)		Nintendo Co., Ltd.
-002147     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-21-49   (hex)		China Daheng Group ,Inc.
-002149     (base 16)		China Daheng Group ,Inc.
-				12F Daheng Science & Technology Tower ,NO.3 Suzhou Str.
-				Beijing    100080
-				CN
-
-00-21-56   (hex)		Cisco Systems, Inc
-002156     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-21-51   (hex)		Millinet Co., Ltd.
-002151     (base 16)		Millinet Co., Ltd.
-				2F, West Building, IT Venture Tower, 78, Garakbon-Dong
-				Songpa-gu  Seoul  138-803
-				US
-
-00-21-6C   (hex)		ODVA
-00216C     (base 16)		ODVA
-				4220 Varsity Drive
-				Ann Arbor  MI  48108-5006
-				US
-
-00-21-1C   (hex)		Cisco Systems, Inc
-00211C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-21-18   (hex)		Athena Tech, Inc.
-002118     (base 16)		Athena Tech, Inc.
-				3721 Macintosh Dr
-				Warrenton  VA  20187
-				US
-
-00-1F-BD   (hex)		Kyocera Wireless Corp.
-001FBD     (base 16)		Kyocera Wireless Corp.
-				10300 Campus Point Drive
-				San Diego  CA  92121
-				US
-
-00-1F-B9   (hex)		Paltronics
-001FB9     (base 16)		Paltronics
-				1145 Paltronics Ct
-				Crystal Lake  IL  60014
-				US
-
-00-1F-B7   (hex)		WiMate Technologies Corp.
-001FB7     (base 16)		WiMate Technologies Corp.
-				14A Building 2, Guimiao Garden, Nanguanglu, Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-00-1F-B4   (hex)		SmartShare Systems
-001FB4     (base 16)		SmartShare Systems
-				Tonsbakken 16-18
-				Skovlunde    DK-2740
-				DK
-
-00-1F-B6   (hex)		Chi Lin Technology Co., Ltd.
-001FB6     (base 16)		Chi Lin Technology Co., Ltd.
-				No.18, Sheng Li 1st St., Jen Te Hsiang,
-				Tainan  Taiwan  71758
-				CN
-
-00-1F-C8   (hex)		Up-Today Industrial Co., Ltd.
-001FC8     (base 16)		Up-Today Industrial Co., Ltd.
-				7/F., Unify Commercial & Industrial Building
-				Kowloon    
-				HK
-
-00-1F-C5   (hex)		Nintendo Co., Ltd.
-001FC5     (base 16)		Nintendo Co., Ltd.
-				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-00-1F-C0   (hex)		Control Express Finland Oy
-001FC0     (base 16)		Control Express Finland Oy
-				Laitaatsillantie 3
-				Savonlinna    57170
-				FI
-
-00-1F-BC   (hex)		EVGA Corporation
-001FBC     (base 16)		EVGA Corporation
-				2900 Saturn St.
-				Brea  CA  92821
-				US
-
-00-1F-F9   (hex)		Advanced Knowledge Associates
-001FF9     (base 16)		Advanced Knowledge Associates
-				3350 Scott Blvd, Suite 40
-				Santa Clara  CA  95054-3119
-				US
-
-00-1F-ED   (hex)		Tecan Systems Inc.
-001FED     (base 16)		Tecan Systems Inc.
-				2450 Zanker Road
-				San Jose  CA  95131
-				US
-
-00-1F-E5   (hex)		In-Circuit GmbH
-001FE5     (base 16)		In-Circuit GmbH
-				Königsbrücker Strasse 69
-				Dresden    01099
-				DE
-
-00-1F-F4   (hex)		Power Monitors, Inc.
-001FF4     (base 16)		Power Monitors, Inc.
-				800 North Main Street
-				Mt. Crawford  Virginia  22841
-				US
-
-00-1F-5F   (hex)		Blatand GmbH
-001F5F     (base 16)		Blatand GmbH
-				Lichtenbergstrße 8
-				Garching  Bavaria  85748
-				DE
-
-00-1F-57   (hex)		Phonik Innovation Co.,LTD
-001F57     (base 16)		Phonik Innovation Co.,LTD
-				29/167 Moo2, 345 Rd, Lampo,
-				Nonthaburi    11110
-				TH
-
-00-1F-59   (hex)		Kronback Tracers
-001F59     (base 16)		Kronback Tracers
-				c/o DTU, R254
-				Ballerup  Copenhagen  2750
-				DK
-
-00-1F-4E   (hex)		ConMed Linvatec
-001F4E     (base 16)		ConMed Linvatec
-				11311 Concept Blvd.
-				Largo  FL  33773
-				US
-
-00-1F-AA   (hex)		Taseon, Inc.
-001FAA     (base 16)		Taseon, Inc.
-				 3099 N. First Street
-				San Jose  CA  95134
-				US
-
-00-1F-7B   (hex)		TechNexion Ltd.
-001F7B     (base 16)		TechNexion Ltd.
-				17F-1, No. 16, Jian Ba Road,
-				Chung Ho   Taipei  235
-				TW
-
-00-1F-7D   (hex)		Embedded Wireless GmbH
-001F7D     (base 16)		Embedded Wireless GmbH
-				Soeflinger Strasse 200
-				Ulm  BW  89077
-				DE
-
-00-1F-8D   (hex)		Ingenieurbuero Stark GmbH und Ko. KG
-001F8D     (base 16)		Ingenieurbuero Stark GmbH und Ko. KG
-				Rudolf-Diesel-Strasse 44
-				Laichingen  BW  89150
-				DE
-
-00-1F-AF   (hex)		NextIO, Inc.
-001FAF     (base 16)		NextIO, Inc.
-				8303 N MoPac Expressway
-				Austin  TX  78759
-				US
-
-00-1F-74   (hex)		Eigen Development
-001F74     (base 16)		Eigen Development
-				1807 W10th Ave
-				Vancouver  BC  V6J 2A9
-				CA
-
-00-1F-75   (hex)		GiBahn Media
-001F75     (base 16)		GiBahn Media
-				1816 Rosedale Suseo-dong
-				Seoul    135-885
-				KR
-
-00-1F-8F   (hex)		Shanghai Bellmann Digital Source Co.,Ltd.
-001F8F     (base 16)		Shanghai Bellmann Digital Source Co.,Ltd.
-				404-408 Main Bd, FDUSP, No.11 Guotai Rd.
-				Shanghai    200433
-				CN
-
-00-1F-84   (hex)		Gigle Semiconductor
-001F84     (base 16)		Gigle Semiconductor
-				Barcelona Activa - Vivero Glorias
-				Barcelona    08018
-				ES
-
-00-1F-6E   (hex)		Vtech Engineering Corporation
-001F6E     (base 16)		Vtech Engineering Corporation
-				20 New England Business Center
-				Andover  MA  01810
-				US
-
-00-1F-66   (hex)		PLANAR LLC
-001F66     (base 16)		PLANAR LLC
-				32, Elkina str
-				Chelyabinsk  SU  454091
-				RU
-
-00-1F-A0   (hex)		A10 Networks
-001FA0     (base 16)		A10 Networks
-				3 West Plumeria Drive
-				San Jose  CA  95134
-				US
-
-00-1F-9E   (hex)		Cisco Systems, Inc
-001F9E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1E-E6   (hex)		Shenzhen Advanced Video Info-Tech Co., Ltd.
-001EE6     (base 16)		Shenzhen Advanced Video Info-Tech Co., Ltd.
-				Tianxiang 11A,  Tian'an Cyber Park , Futian
-				Shenzhen  Guangdong  518048
-				CN
-
-00-1E-F7   (hex)		Cisco Systems, Inc
-001EF7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1F-0B   (hex)		Federal State Unitary Enterprise Industrial UnionElectropribor
-001F0B     (base 16)		Federal State Unitary Enterprise Industrial UnionElectropribor
-				
-				Penza    440011
-				RU
-
-00-1F-0C   (hex)		Intelligent Digital Services GmbH
-001F0C     (base 16)		Intelligent Digital Services GmbH
-				Grevesmuehlener Strasse 8
-				Mallentin  Mecklenburg-Vorpommern  23639
-				DE
-
-00-1F-08   (hex)		RISCO LTD
-001F08     (base 16)		RISCO LTD
-				32 Hacharoshet St
-				Kiriat Malachi    83101
-				IL
-
-00-1F-43   (hex)		ENTES ELEKTRONIK
-001F43     (base 16)		ENTES ELEKTRONIK
-				Y. Dudullu Org. San. Bol. And Sanayi Sit. No.6
-				Istanbul  Dudullu  34775
-				TR
-
-00-1F-14   (hex)		NexG
-001F14     (base 16)		NexG
-				5F Seoul Academy Bldg, Daechi-Dong, Gangnam-Gu,
-				Seoul    135-280
-				KR
-
-00-1E-F1   (hex)		Servimat
-001EF1     (base 16)		Servimat
-				ZAET Les Haies
-				St Maximin  Oise  60740
-				FR
-
-00-1E-F4   (hex)		L-3 Communications Display Systems
-001EF4     (base 16)		L-3 Communications Display Systems
-				1355 Bluegrass Lakes Parkway
-				Alpharetta  GA  30004-8458
-				US
-
-00-1E-F5   (hex)		Hitek Automated Inc.
-001EF5     (base 16)		Hitek Automated Inc.
-				Room C3-901, No.383, Huamen Shijia
-				Hangzhou    310012
-				CN
-
-00-1F-0E   (hex)		Japan Kyastem Co., Ltd
-001F0E     (base 16)		Japan Kyastem Co., Ltd
-				1-4-4
-				Tachikawa  Tokyo  190-0022
-				JP
-
-00-1F-28   (hex)		HPN Supply Chain
-001F28     (base 16)		HPN Supply Chain
-				8000 Foothills Blvd
-				Roseville  CA  95747
-				US
-
-00-1F-1E   (hex)		Astec Technology Co., Ltd
-001F1E     (base 16)		Astec Technology Co., Ltd
-				12F, No.2, Jian Ba Rd.
-				Chung Ho  Taipei Hsien  235
-				TW
-
-00-1F-4A   (hex)		Albentia Systems S.A.
-001F4A     (base 16)		Albentia Systems S.A.
-				Albala 13
-				Madrid    28037
-				ES
-
-00-1E-AA   (hex)		E-Senza Technologies GmbH
-001EAA     (base 16)		E-Senza Technologies GmbH
-				Blarerstrasse 56
-				Konstanz  BW  78462
-				DE
-
-00-1E-9C   (hex)		Fidustron INC
-001E9C     (base 16)		Fidustron INC
-				NO.770-6, Jhongiheng Rd.
-				Jhonghe City  Taipei County  235
-				TW
-
-00-1E-97   (hex)		Medium Link System Technology CO., LTD,
-001E97     (base 16)		Medium Link System Technology CO., LTD,
-				11F.-2, No.7, Alley 92, Lane 77, Sec. 4, Sinhai Rd.,
-				Wunshan District,  Taipei  11693
-				TW
-
-00-1E-8B   (hex)		Infra Access Korea Co., Ltd.
-001E8B     (base 16)		Infra Access Korea Co., Ltd.
-				#902, Sambo Saving Bank B/D,
-				Kwanak-gu,  Seoul  151-830
-				KR
-
-00-1E-BB   (hex)		BLUELIGHT TECHNOLOGY INC.
-001EBB     (base 16)		BLUELIGHT TECHNOLOGY INC.
-				6472 CAMDEN AVE., SUITE 102B
-				SAN JOSE  CA  95120
-				US
-
-00-1E-B5   (hex)		Ever Sparkle Technologies Ltd
-001EB5     (base 16)		Ever Sparkle Technologies Ltd
-				Unit 403, Nan Fung Commercial Centre
-				Kowloon Bay  Kowloon  
-				HK
-
-00-1E-B3   (hex)		Primex Wireless
-001EB3     (base 16)		Primex Wireless
-				965 Wells Street
-				Lake Geneva  WI  53147
-				US
-
-00-1E-85   (hex)		Lagotek Corporation
-001E85     (base 16)		Lagotek Corporation
-				11661 SE 1st St. #208
-				Bellevue  WA  98005
-				US
-
-00-1E-D8   (hex)		Digital United Inc.
-001ED8     (base 16)		Digital United Inc.
-				9F, No.220, Gangcian Rd.
-				Taipei    11444
-				TW
-
-00-1E-D6   (hex)		Alentec & Orion AB
-001ED6     (base 16)		Alentec & Orion AB
-				Grustagsvägen 4
-				138 40  ÄLTA  
-				SE
-
-00-1E-C6   (hex)		Obvius Holdings LLC
-001EC6     (base 16)		Obvius Holdings LLC
-				20811 NW Cornell Road
-				Hillsboro  OR  97124
-				US
-
-00-1E-C4   (hex)		Celio Corp
-001EC4     (base 16)		Celio Corp
-				265 E 100 S  # 280
-				Salt Lake City  UT  84111
-				US
-
-00-1E-C1   (hex)		3COM EUROPE LTD
-001EC1     (base 16)		3COM EUROPE LTD
-				Peoplebuilding 2
-				Hemel Hempstead  HERTS.  HP2 4NW
-				GB
-
-00-1E-B6   (hex)		TAG Heuer SA
-001EB6     (base 16)		TAG Heuer SA
-				Rue Louis-Joseph Chevrolet 6A
-				la Chaux-de-Fonds  NE  2300
-				CH
-
-00-1E-AC   (hex)		Armadeus Systems
-001EAC     (base 16)		Armadeus Systems
-				Business Campus
-				MULHOUSE cedex  Haut-Rhin  68058
-				FR
-
-00-1E-77   (hex)		Air2App
-001E77     (base 16)		Air2App
-				50 Old Forge Rd
-				Hanover  MA  02339
-				US
-
-00-1E-7B   (hex)		R.I.CO. S.r.l.
-001E7B     (base 16)		R.I.CO. S.r.l.
-				via Adriatica, 17
-				Castelfidardo  AN  60022
-				IT
-
-00-1E-6E   (hex)		Shenzhen First Mile Communications Ltd
-001E6E     (base 16)		Shenzhen First Mile Communications Ltd
-				5th Floor, Block R3-A
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1E-6D   (hex)		IT R&D Center
-001E6D     (base 16)		IT R&D Center
-				461-25, Jeonmin-dong,Yuseong-Gu
-				Daejeon    305-811
-				KR
-
-00-1E-34   (hex)		CryptoMetrics
-001E34     (base 16)		CryptoMetrics
-				160 Michael Cowpland Dr
-				Ottawa  Ontario  K2M 1P6
-				CA
-
-00-1E-2D   (hex)		STIM
-001E2D     (base 16)		STIM
-				ZAC les COUSTELLIERS
-				CASTRIES  HERAULT  34160
-				FR
-
-00-1E-41   (hex)		Microwave Communication & Component, Inc.
-001E41     (base 16)		Microwave Communication & Component, Inc.
-				#204, WOOLIM LION`S VALLEY 2, 680
-				Seoul    150-787
-				KR
-
-00-1D-FC   (hex)		KSIC
-001DFC     (base 16)		KSIC
-				#6F, Korea Federation of Teacher's Associations, 114-1, TaeBong-Ro,
-				Seoul  Seocho-Ku  137-715
-				KR
-
-00-1E-55   (hex)		COWON SYSTEMS,Inc.
-001E55     (base 16)		COWON SYSTEMS,Inc.
-				6th Fl. COWON TOWER,689-3,
-				Seoul    135-080
-				KR
-
-00-1E-56   (hex)		Bally Wulff Entertainment GmbH
-001E56     (base 16)		Bally Wulff Entertainment GmbH
-				Maybachufer 48-51
-				Berlin    12045
-				DE
-
-00-1E-3F   (hex)		TrellisWare Technologies, Inc.
-001E3F     (base 16)		TrellisWare Technologies, Inc.
-				16516 Via Esprillo, Suite 300
-				San Diego  CA  92127
-				US
-
-00-1E-57   (hex)		ALCOMA, spol. s r.o.
-001E57     (base 16)		ALCOMA, spol. s r.o.
-				Klukovice 313, Praha - 5
-				Praha    152 00
-				CZ
-
-00-1E-50   (hex)		BATTISTONI RESEARCH
-001E50     (base 16)		BATTISTONI RESEARCH
-				PARCO DONICA 56
-				FISCIANO  SALERNO  84084
-				IT
-
-00-1E-11   (hex)		ELELUX INTERNATIONAL LTD
-001E11     (base 16)		ELELUX INTERNATIONAL LTD
-				3F., NO.103 CHOW TZE STREET
-				TAIPEI    114
-				TW
-
-00-1D-F2   (hex)		Netflix, Inc.
-001DF2     (base 16)		Netflix, Inc.
-				100 Winchester Circle
-				Los Gatos  CA  95032
-				US
-
-00-1D-EF   (hex)		TRIMM, INC.
-001DEF     (base 16)		TRIMM, INC.
-				407 RAILROAD STREET
-				BUTNER  NC  27509
-				US
-
-00-1D-F1   (hex)		Intego Systems, Inc.
-001DF1     (base 16)		Intego Systems, Inc.
-				5343 Bowden Road
-				Jacksonville  FL  32216
-				US
-
-00-1D-ED   (hex)		Grid Net, Inc.
-001DED     (base 16)		Grid Net, Inc.
-				340 Brannan Street
-				San Francisco  CA  94107
-				US
-
-00-1D-C3   (hex)		RIKOR TV, Ltd
-001DC3     (base 16)		RIKOR TV, Ltd
-				Kostomarovsky per.,3
-				Moscow    105120
-				RU
-
-00-1D-C1   (hex)		Audinate Pty L
-001DC1     (base 16)		Audinate Pty L
-				Level 1, 458 Wattle St
-				Ultimo  NSW  2007
-				AU
-
-00-1D-B2   (hex)		HOKKAIDO ELECTRIC ENGINEERING CO.,LTD.
-001DB2     (base 16)		HOKKAIDO ELECTRIC ENGINEERING CO.,LTD.
-				Nishinopporo 120-8
-				Ebetu-City  Hokkaido  069-0832
-				JP
-
-00-1D-AD   (hex)		Sinotech Engineering Consultants, Inc.  Geotechnical Enginee
-001DAD     (base 16)		Sinotech Engineering Consultants, Inc.  Geotechnical Enginee
-				Basement No.7 Lane 26, Yat-Sen Rd.
-				Taipei    110
-				TW
-
-00-1D-AB   (hex)		SwissQual License AG
-001DAB     (base 16)		SwissQual License AG
-				Baarerstrasse 78
-				Zug  Postfach  117
-				CH
-
-00-1D-9C   (hex)		Rockwell Automation
-001D9C     (base 16)		Rockwell Automation
-				1 Allen-Bradley Dr.
-				Mayfield Heights  OH  44124-6118
-				US
-
-00-1D-A0   (hex)		Heng Yu Electronic Manufacturing Company Limited
-001DA0     (base 16)		Heng Yu Electronic Manufacturing Company Limited
-				Room 1503-5, Nan Fung Com'l Centre,
-				Kowloon    
-				HK
-
-00-1D-D8   (hex)		Microsoft Corporation
-001DD8     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				Redmond  Washington  98052-6399
-				US
-
-00-1D-C8   (hex)		Navionics Research Inc., dba SCADAmetrics
-001DC8     (base 16)		Navionics Research Inc., dba SCADAmetrics
-				1133 Pond Road
-				Wildwood  Missouri  63038
-				US
-
-00-1D-CC   (hex)		Ayon Cyber Security, Inc
-001DCC     (base 16)		Ayon Cyber Security, Inc
-				2350 Commerce Park Dr.
-				Palm Bay  FL  32905
-				US
-
-00-1D-92   (hex)		MICRO-STAR INT'L CO.,LTD.
-001D92     (base 16)		MICRO-STAR INT'L CO.,LTD.
-				No.69,Li-De St,Jung-Ho City
-				Taipei  Hsien  235
-				TW
-
-00-1D-8A   (hex)		TechTrex Inc
-001D8A     (base 16)		TechTrex Inc
-				6221 Highway 7, Unit 12
-				Woodbridge  Ontalio  L4H 0K8
-				CA
-
-00-1D-80   (hex)		Beijing Huahuan Eletronics Co.,Ltd
-001D80     (base 16)		Beijing Huahuan Eletronics Co.,Ltd
-				No.26,Shangdi 6th St.Haidian District,
-				Beijing    100085
-				CN
-
-00-1D-83   (hex)		Emitech Corporation
-001D83     (base 16)		Emitech Corporation
-				2F,No.7-1,Industry E,Rd.9
-				Hsinchu    308
-				TW
-
-00-1D-74   (hex)		Tianjin China-Silicon Microelectronics Co., Ltd.
-001D74     (base 16)		Tianjin China-Silicon Microelectronics Co., Ltd.
-				301,3F Building 211,No.214 Hongqi Road, Nankai District, Tianjin China
-				Tianjin    300190
-				CN
-
-00-1D-4B   (hex)		Grid Connect Inc.
-001D4B     (base 16)		Grid Connect Inc.
-				1630 W. Diehl Rd
-				Naperville  IL  60563
-				US
-
-00-1D-4D   (hex)		Adaptive Recognition Hungary, Inc
-001D4D     (base 16)		Adaptive Recognition Hungary, Inc
-				Kiralyhago ter 8-9
-				Budapest  Europe  1126
-				HU
-
-00-1D-1E   (hex)		KYUSHU TEN CO.,LTD
-001D1E     (base 16)		KYUSHU TEN CO.,LTD
-				2360 YUNOKIMOTOMACHI
-				SASEBO-City  NAGASAKI Prefecture  857-0115
-				JP
-
-00-1D-1D   (hex)		Inter-M Corporation
-001D1D     (base 16)		Inter-M Corporation
-				653-5 Banghak-Dong, Dobong-Ku
-				Seoul    132-846
-				KR
-
-00-1D-0E   (hex)		Agapha Technology co., Ltd.
-001D0E     (base 16)		Agapha Technology co., Ltd.
-				9F No.121, Shingde Rd.,
-				Sanchung City  Taipei County  241
-				TW
-
-00-1D-0A   (hex)		Davis Instruments, Inc.
-001D0A     (base 16)		Davis Instruments, Inc.
-				3465 Diablo Ave.
-				Hayward  CA  94545
-				US
-
-00-1D-67   (hex)		AMEC
-001D67     (base 16)		AMEC
-				9F,No.360,Ruel Guang Rd,Neihu
-				Taipei    114
-				TW
-
-00-1D-7C   (hex)		ABE Elettronica S.p.A.
-001D7C     (base 16)		ABE Elettronica S.p.A.
-				Via Leonardo da Vinci, 92
-				CARAVAGGIO  BG  24043
-				IT
-
-00-1D-6D   (hex)		Confidant International LLC
-001D6D     (base 16)		Confidant International LLC
-				2530 Meridian Pkwy
-				Durham  North Carolina  27713
-				US
-
-00-1D-75   (hex)		Radioscape PLC
-001D75     (base 16)		Radioscape PLC
-				1 Albany Terrace
-				Regent's Park  London  NW1 4DS
-				GB
-
-00-1D-53   (hex)		S&O Electronics (Malaysia) Sdn. Bhd.
-001D53     (base 16)		S&O Electronics (Malaysia) Sdn. Bhd.
-				Lot 202, Bakar Arang
-				08000 Sungai Petani  Kedah  
-				MY
-
-00-1D-54   (hex)		Sunnic Technology & Merchandise INC.
-001D54     (base 16)		Sunnic Technology & Merchandise INC.
-				6F, NO.74,ZHOU-Z ST.,
-				Taipei    114
-				TW
-
-00-1D-5F   (hex)		OverSpeed SARL
-001D5F     (base 16)		OverSpeed SARL
-				15, allee du Bois Cailley
-				Le Thuit-Signol  Normandie  27370
-				FR
-
-00-1D-58   (hex)		CQ Inc
-001D58     (base 16)		CQ Inc
-				5F, No. 43, Lane 76, Rui Guang Road
-				Taipei    114
-				TW
-
-00-1D-87   (hex)		VigTech Labs Sdn Bhd
-001D87     (base 16)		VigTech Labs Sdn Bhd
-				45-11 The Boulevard Mid Valley City
-				Kuala Lumpur  Selangor  59200
-				MY
-
-00-1D-2F   (hex)		QuantumVision Corporation
-001D2F     (base 16)		QuantumVision Corporation
-				335 Plantation Way
-				Roswell  Ga  30075
-				US
-
-00-1C-E5   (hex)		MBS Electronic Systems GmbH
-001CE5     (base 16)		MBS Electronic Systems GmbH
-				Ringstrasse 3
-				82319 Starnberg  Bavaria  82319
-				DE
-
-00-1C-DD   (hex)		COWBELL ENGINEERING CO., LTD.
-001CDD     (base 16)		COWBELL ENGINEERING CO., LTD.
-				1739-1 Nagatoro
-				SAKU  Nagano  385-0021
-				JP
-
-00-1C-C2   (hex)		Part II Research, Inc.
-001CC2     (base 16)		Part II Research, Inc.
-				4601 E. Airport Dr.
-				Ontario  CA  91761
-				US
-
-00-1C-BD   (hex)		Ezze Mobile Tech., Inc.
-001CBD     (base 16)		Ezze Mobile Tech., Inc.
-				3F, Bubmusa Bldg., 151-31
-				  Seoul  135-824
-				KR
-
-00-1C-B8   (hex)		CBC Co., Ltd
-001CB8     (base 16)		CBC Co., Ltd
-				2-15-13, Tsukishima, Chuo-ku
-				Tokyo    104-0052
-				JP
-
-00-1C-AC   (hex)		Qniq Technology Corp.
-001CAC     (base 16)		Qniq Technology Corp.
-				5F, No.133, Sec.4, Minsheng E. Rd.,
-				Taipei    105
-				TW
-
-00-1C-A5   (hex)		Zygo Corporation
-001CA5     (base 16)		Zygo Corporation
-				21 Laurel Brook Rd.
-				Middlefield  CT  06455
-				US
-
-00-1C-9D   (hex)		Liecthi AG
-001C9D     (base 16)		Liecthi AG
-				10 Unterholz Street
-				Kriegstetten  Solothurn  4566
-				CH
-
-00-1C-FF   (hex)		Napera Networks Inc
-001CFF     (base 16)		Napera Networks Inc
-				7683 SE 27th
-				Mercer Island  WA  98040
-				US
-
-00-1C-DC   (hex)		Custom Computer Services, Inc.
-001CDC     (base 16)		Custom Computer Services, Inc.
-				1020 Spring City Drive
-				Waukesha  WI  53186
-				US
-
-00-1C-D1   (hex)		Waves Audio LTD
-001CD1     (base 16)		Waves Audio LTD
-				Azrilei Center 3, Triangle tower
-				Tel Aviv  Central  67023
-				IL
-
-00-1C-ED   (hex)		ENVIRONNEMENT SA
-001CED     (base 16)		ENVIRONNEMENT SA
-				111 bd. Robespierre
-				POISSY  Yvelines  78300
-				FR
-
-00-1C-BA   (hex)		VerScient, Inc.
-001CBA     (base 16)		VerScient, Inc.
-				7700 Equitable Drive
-				Eden Prairie  MN  55344
-				US
-
-00-1C-B0   (hex)		Cisco Systems, Inc
-001CB0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-4C   (hex)		Petrotest Instruments
-001C4C     (base 16)		Petrotest Instruments
-				Ludwig-Erhard-Ring 13
-				Dahlewitz  BBG  15827
-				DE
-
-00-1C-45   (hex)		Chenbro Micom Co., Ltd.
-001C45     (base 16)		Chenbro Micom Co., Ltd.
-				15Fl., No. 150, Jian Yi Road
-				Chung Ho City  Taipei Hsien  235
-				TW
-
-00-1C-3C   (hex)		Seon Design Inc.
-001C3C     (base 16)		Seon Design Inc.
-				111-3B Burbidge Street
-				Coquitlam  BC  V3K 7B2
-				CA
-
-00-1C-57   (hex)		Cisco Systems, Inc
-001C57     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1C-5D   (hex)		Leica Microsystems
-001C5D     (base 16)		Leica Microsystems
-				Lothbury House Cambridge Technopark
-				Cambridge    CB5 8PB
-				GB
-
-00-1C-5E   (hex)		ASTON France
-001C5E     (base 16)		ASTON France
-				151 Avenue Gallieni
-				BAGNOLET  ile de france  93177
-				FR
-
-00-1C-55   (hex)		Shenzhen Kaifa Technology Co.
-001C55     (base 16)		Shenzhen Kaifa Technology Co.
-				7006 Caitian Road, Futian District,
-				Shenzhen  Guangdong  518035
-				CN
-
-00-1C-5B   (hex)		Chubb Electronic Security Systems Ltd
-001C5B     (base 16)		Chubb Electronic Security Systems Ltd
-				Shadsworth Road
-				Blackburn  Lancashire  BB1 2PR
-				GB
-
-00-1C-44   (hex)		Bosch Security Systems BV
-001C44     (base 16)		Bosch Security Systems BV
-				Kapittelweg 10
-				4827 HG  Breda  Brabant  4827
-				NL
-
-00-1C-82   (hex)		Genew Technologies
-001C82     (base 16)		Genew Technologies
-				3A3 Building B1, Cyber-tech Zone,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-1C-84   (hex)		STL Solution Co.,Ltd.
-001C84     (base 16)		STL Solution Co.,Ltd.
-				#710, World Meridian Venture Center I
-				Seoul    152781
-				KR
-
-00-1C-79   (hex)		Cohesive Financial Technologies LLC
-001C79     (base 16)		Cohesive Financial Technologies LLC
-				200 South Wacker Dr.
-				Chicago  IL  60606
-				US
-
-00-1C-64   (hex)		Landis+Gyr
-001C64     (base 16)		Landis+Gyr
-				30000 Mill Creek Ave. Suite 100
-				Alpharetta  GA  30022
-				US
-
-00-1C-31   (hex)		Mobile XP Technology Co., LTD
-001C31     (base 16)		Mobile XP Technology Co., LTD
-				Room No.2506,Tri-tower C building,No.66 Zhongguancun East Road,Haidian District
-				Beijing    100080
-				CN
-
-00-1C-8B   (hex)		MJ Innovations Ltd.
-001C8B     (base 16)		MJ Innovations Ltd.
-				333 Wyecroft Road
-				Oakville  Ontario  L6K 2H2
-				CA
-
-00-1C-6D   (hex)		KYOHRITSU ELECTRONIC INDUSTRY CO., LTD.
-001C6D     (base 16)		KYOHRITSU ELECTRONIC INDUSTRY CO., LTD.
-				2-5-1, NIPPONBASHI-NISHI,
-				OSAKA    556-0004
-				JP
-
-00-1C-96   (hex)		Linkwise Technology Pte Ltd
-001C96     (base 16)		Linkwise Technology Pte Ltd
-				Blk 3, Ang Mo Kio Industrial Park 2A
-				    568050
-				SG
-
-00-1C-29   (hex)		CORE DIGITAL ELECTRONICS CO., LTD
-001C29     (base 16)		CORE DIGITAL ELECTRONICS CO., LTD
-				1006# 102 CHUNUITECHNOPARK 200-1
-				BUCHEON-CITY  GYUNGGI-DO  420-857
-				KR
-
-00-1C-24   (hex)		Formosa Wireless Systems Corp.
-001C24     (base 16)		Formosa Wireless Systems Corp.
-				No. 408, Guandong Rd.,
-				HsinChu City    300
-				TW
-
-00-1C-20   (hex)		CLB Benelux
-001C20     (base 16)		CLB Benelux
-				Ramgatseweg 17
-				Raamsdonksveer  NBR  4941 VN
-				NL
-
-00-1C-1C   (hex)		Center Communication Systems GmbH
-001C1C     (base 16)		Center Communication Systems GmbH
-				Ignaz-Koeck-Strasse 19
-				Vienna    A-1210
-				AT
-
-00-1B-DA   (hex)		UTStarcom Inc
-001BDA     (base 16)		UTStarcom Inc
-				1275 Harbor Bay PKWY
-				Alameda  CA  94502
-				US
-
-00-1B-D1   (hex)		SOGESTMATIC
-001BD1     (base 16)		SOGESTMATIC
-				409 Route de la Gare
-				CHATEAUNEUF DE GADAGNE  PACA  84470
-				FR
-
-00-1C-00   (hex)		Entry Point, LLC
-001C00     (base 16)		Entry Point, LLC
-				735 Robins
-				Idaho Falls  Idaho  83401
-				US
-
-00-1B-FD   (hex)		Dignsys Inc.
-001BFD     (base 16)		Dignsys Inc.
-				14F, Digital Empire Bldg., B-1408
-				Suwon  Gyeonggi-do  443-813
-				KR
-
-00-1B-D6   (hex)		Kelvin Hughes Ltd
-001BD6     (base 16)		Kelvin Hughes Ltd
-				New North Road
-				Ilford  Essex  IG6 2UR
-				GB
-
-00-1B-CF   (hex)		Dataupia Corporation
-001BCF     (base 16)		Dataupia Corporation
-				One Alewife Center
-				Cambridge  MA  02140
-				US
-
-00-1B-CB   (hex)		PEMPEK SYSTEMS PTY LTD
-001BCB     (base 16)		PEMPEK SYSTEMS PTY LTD
-				UNIT 3 / 13 HOYLE AVENUE
-				CASTLE HILL  NSW  2154
-				AU
-
-00-1B-F5   (hex)		Tellink Sistemas de Telecomunicación S.L.
-001BF5     (base 16)		Tellink Sistemas de Telecomunicación S.L.
-				C/ María Tubau Nº 5 Bajo B
-				Madrid    28050
-				ES
-
-00-1B-E6   (hex)		VR AG
-001BE6     (base 16)		VR AG
-				Rütistrasse 18
-				Schlieren    CH-8952
-				CH
-
-00-1B-E2   (hex)		AhnLab,Inc.
-001BE2     (base 16)		AhnLab,Inc.
-				6th Fl, CCMM Bldg, 12 Yeouido-dong
-				Seoul    150869
-				KR
-
-00-1B-E0   (hex)		TELENOT ELECTRONIC GmbH
-001BE0     (base 16)		TELENOT ELECTRONIC GmbH
-				Wiesentalstraße 42
-				Aalen  Baden-Württemberg  73434
-				DE
-
-00-1C-34   (hex)		HUEY CHIAO INTERNATIONAL CO., LTD.
-001C34     (base 16)		HUEY CHIAO INTERNATIONAL CO., LTD.
-				5F, NO. 649-1,
-				HSIN CHUANG CITY  TAIPEI  242
-				TW
-
-00-1C-36   (hex)		iNEWiT NV
-001C36     (base 16)		iNEWiT NV
-				Schaliënhoevedreef 20D
-				Mechelen  Antwerp  2800
-				BE
-
-00-1C-15   (hex)		iPhotonix LLC
-001C15     (base 16)		iPhotonix LLC
-				2600 N Central Expressway
-				Richardson  Texas  75080
-				US
-
-00-1C-07   (hex)		Cwlinux Limited
-001C07     (base 16)		Cwlinux Limited
-				Unit 138, 13/F, Weswick Commercial Building,
-				Wan Chai    
-				HK
-
-00-1B-A3   (hex)		Flexit Group GmbH
-001BA3     (base 16)		Flexit Group GmbH
-				Bräuhausstraße 14
-				Salzburg  Salzburg  5020
-				AT
-
-00-1B-9F   (hex)		Calyptech Pty Ltd
-001B9F     (base 16)		Calyptech Pty Ltd
-				5/486 Lower Heidelberg Road
-				Heidelberg  Victoria  3084
-				AU
-
-00-1B-9A   (hex)		Apollo Fire Detectors Ltd
-001B9A     (base 16)		Apollo Fire Detectors Ltd
-				36 Brookside Road
-				Havant  Hampshire  P09 1JR
-				GB
-
-00-1B-BD   (hex)		FMC Kongsberg Subsea AS
-001BBD     (base 16)		FMC Kongsberg Subsea AS
-				Kirkegaardsveien 45
-				Kongsberg  Buskerud  3601
-				NO
-
-00-1B-BE   (hex)		ICOP Digital
-001BBE     (base 16)		ICOP Digital
-				16801 W. 116th St.
-				Lenexa  KS  66219
-				US
-
-00-1B-B3   (hex)		Condalo GmbH
-001BB3     (base 16)		Condalo GmbH
-				Kohlstatt 3
-				Lichtenau  Bavaria  86706
-				DE
-
-00-1B-B7   (hex)		Alta Heights Technology Corp.
-001BB7     (base 16)		Alta Heights Technology Corp.
-				108 Alta Heights Court
-				Los Gatos  California  95030
-				US
-
-00-1B-99   (hex)		KS System GmbH
-001B99     (base 16)		KS System GmbH
-				Alexanderstraße 37
-				Muelheim  NRW  45472
-				DE
-
-00-1B-8F   (hex)		Cisco Systems, Inc
-001B8F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1B-8C   (hex)		JMicron Technology Corp.
-001B8C     (base 16)		JMicron Technology Corp.
-				1F, No.13, Innovation Road 1
-				Hsinchu    300
-				TW
-
-00-1B-91   (hex)		EFKON AG
-001B91     (base 16)		EFKON AG
-				Dietrich-Keller-Strasse 20
-				8074 Raaba    
-				AT
-
-00-1B-82   (hex)		Taiwan Semiconductor Co., Ltd.
-001B82     (base 16)		Taiwan Semiconductor Co., Ltd.
-				11F, No. 205, Sec. 3, Beishin Rd,
-				Shindian  Taipei  231
-				TW
-
-00-1B-89   (hex)		EMZA Visual Sense Ltd.
-001B89     (base 16)		EMZA Visual Sense Ltd.
-				20 Ha'ta'as St., Beith Hapamon
-				Kfar Saba    44425
-				IL
-
-00-1B-8B   (hex)		NEC Platforms, Ltd.
-001B8B     (base 16)		NEC Platforms, Ltd.
-				800 Shimomata
-				Kakegawa  Shizuoka  436-8501
-				JP
-
-00-1B-AC   (hex)		Curtiss Wright Controls Embedded Computing
-001BAC     (base 16)		Curtiss Wright Controls Embedded Computing
-				10201 Wateridge Circle
-				San Diego  CA  92121
-				US
-
-00-1B-6A   (hex)		Powerwave Technologies Sweden AB
-001B6A     (base 16)		Powerwave Technologies Sweden AB
-				164 26
-				Knarrarnäsgatan 7, Kista    
-				SE
-
-00-1B-67   (hex)		Cisco Systems Inc
-001B67     (base 16)		Cisco Systems Inc
-				The Stella Building
-				Swindon  Wiltshire  SN5 6NX
-				GB
-
-00-1B-7B   (hex)		The Tintometer Ltd
-001B7B     (base 16)		The Tintometer Ltd
-				Solar Way
-				Amesbury  Wiltshire  SP4 7SZ
-				GB
-
-00-1B-75   (hex)		Hypermedia Systems
-001B75     (base 16)		Hypermedia Systems
-				2B Bergman St.
-				Rehovot    76705
-				IL
-
-00-1B-27   (hex)		Merlin CSI
-001B27     (base 16)		Merlin CSI
-				12625 Danielson Court
-				Poway  CA  92064
-				US
-
-00-1B-1B   (hex)		Siemens AG,
-001B1B     (base 16)		Siemens AG,
-				I IA SC MF-K PE 3
-				76187 Karlsruhe   Baden Wuerttemberg  
-				DE
-
-00-1B-1F   (hex)		DELTA - Danish Electronics, Light & Acoustics
-001B1F     (base 16)		DELTA - Danish Electronics, Light & Acoustics
-				Venlighedsvej 4
-				Hørsholm    DK-2970
-				DK
-
-00-1B-57   (hex)		SEMINDIA SYSTEMS PRIVATE LIMITED
-001B57     (base 16)		SEMINDIA SYSTEMS PRIVATE LIMITED
-				#1106/9,A.M.Industrial Estate,Garvebhai palya,
-				BANGALORE  KARNATAKA  560068
-				IN
-
-00-1B-55   (hex)		Hurco Automation Ltd.
-001B55     (base 16)		Hurco Automation Ltd.
-				6F, No. 31, Shintai Rd.
-				Jubei City,  Hsinchu Hsien  30244
-				TW
-
-00-1B-53   (hex)		Cisco Systems, Inc
-001B53     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1B-49   (hex)		Roberts Radio limited
-001B49     (base 16)		Roberts Radio limited
-				Swinton Works
-				Mexborough  South Yorkshire  S64 8AJ
-				GB
-
-00-1B-0E   (hex)		InoTec GmbH Organisationssysteme
-001B0E     (base 16)		InoTec GmbH Organisationssysteme
-				Biedrichstrasse 11
-				Woelfersheim  Hessen  D-61200
-				DE
-
-00-1B-04   (hex)		Affinity International S.p.a
-001B04     (base 16)		Affinity International S.p.a
-				C.so Savona 51
-				Villastellone    I10029
-				IT
-
-00-1B-06   (hex)		Ateliers R. LAUMONIER
-001B06     (base 16)		Ateliers R. LAUMONIER
-				Ateliers R. LAUMONIER
-				Nesles-la-Vallée  Val d'Oise  95690
-				FR
-
-00-1B-31   (hex)		Neural Image. Co. Ltd.
-001B31     (base 16)		Neural Image. Co. Ltd.
-				A307, CASI, Osaka Univ.
-				Suita city  Osaka  565-0871
-				JP
-
-00-1B-29   (hex)		Avantis.Co.,Ltd
-001B29     (base 16)		Avantis.Co.,Ltd
-				502 SEOIL BLDG.
-				SEOUL    132-872
-				KR
-
-00-1B-2B   (hex)		Cisco Systems, Inc
-001B2B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1B-28   (hex)		POLYGON, JSC
-001B28     (base 16)		POLYGON, JSC
-				37/1, Karl Marx str., floor 5
-				Ufa  Bashkortostan  450077
-				RU
-
-00-1B-43   (hex)		Beijing DG Telecommunications equipment Co.,Ltd
-001B43     (base 16)		Beijing DG Telecommunications equipment Co.,Ltd
-				No.5 Jiangtai Road, Chaoyang District
-				Beijing    100016
-				CN
-
-00-1B-3C   (hex)		Software Technologies Group,Inc.
-001B3C     (base 16)		Software Technologies Group,Inc.
-				10330 W. Roosevelt Road
-				Weschester  IL  60154
-				US
-
-00-1B-3D   (hex)		EuroTel Spa
-001B3D     (base 16)		EuroTel Spa
-				viale Martiri della Liberta,4
-				Lissone  Milan  20035
-				IT
-
-00-1B-66   (hex)		Sennheiser electronic GmbH & Co. KG
-001B66     (base 16)		Sennheiser electronic GmbH & Co. KG
-				Am Labor 1
-				Wedemark  Niedersachsen  30900
-				DE
-
-00-1B-60   (hex)		NAVIGON AG
-001B60     (base 16)		NAVIGON AG
-				Berliner Platz 11
-				Wuerzburg  Bavaria  97080
-				DE
-
-00-1B-05   (hex)		YMC AG
-001B05     (base 16)		YMC AG
-				Sonnenstrasse 4
-				Kreuzlingen  Thurgau  8280
-				CH
-
-00-1A-FF   (hex)		Wizyoung Tech.
-001AFF     (base 16)		Wizyoung Tech.
-				9F, No. 25, Sec. 1, Nanjing E. Rd.
-				Taipei    104
-				TW
-
-00-1B-00   (hex)		Neopost Technologies
-001B00     (base 16)		Neopost Technologies
-				113 rue Jean-Marin Naudin
-				Bagneux    92220
-				FR
-
-00-1B-4E   (hex)		Navman New Zealand
-001B4E     (base 16)		Navman New Zealand
-				7-21 Kawana Street
-				Auckland    0627
-				NZ
-
-00-1B-16   (hex)		Celtro Ltd.
-001B16     (base 16)		Celtro Ltd.
-				Azorim Business Park
-				Petach Tikva    49527
-				IL
-
-00-1A-E6   (hex)		Atlanta Advanced Communications Holdings Limited
-001AE6     (base 16)		Atlanta Advanced Communications Holdings Limited
-				1900 West Oak Circle, Marietta
-				Atlanta  Georgia  30062
-				US
-
-00-1A-D9   (hex)		International Broadband Electric Communications, Inc.
-001AD9     (base 16)		International Broadband Electric Communications, Inc.
-				285 Dunlop Blvd. SW
-				Huntsville  AL  35824
-				US
-
-00-1A-C8   (hex)		ISL (Instrumentation Scientifique de Laboratoire)
-001AC8     (base 16)		ISL (Instrumentation Scientifique de Laboratoire)
-				Impasse des 4 vents
-				VERSON  CALVADOS  14790
-				FR
-
-00-1A-AB   (hex)		eWings s.r.l.
-001AAB     (base 16)		eWings s.r.l.
-				via S. Quasimodo 46
-				Castel Maggiore  Bologna  40013
-				IT
-
-00-1A-AC   (hex)		Corelatus AB
-001AAC     (base 16)		Corelatus AB
-				Tegnergatan 37
-				Stockholm    11161
-				SE
-
-00-1A-AF   (hex)		BLUSENS TECHNOLOGY
-001AAF     (base 16)		BLUSENS TECHNOLOGY
-				EDIFICIO CNL,- AV.
-				15707 - SANTIAGO DE COMPOSTELA  A Coruña  
-				ES
-
-00-1A-B0   (hex)		Signal Networks Pvt. Ltd.,
-001AB0     (base 16)		Signal Networks Pvt. Ltd.,
-				No.12, Kalpataru Apartments,
-				Bangalore  Karnataka  560001
-				IN
-
-00-1A-A1   (hex)		Cisco Systems, Inc
-001AA1     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-1A-C6   (hex)		Micro Control Designs
-001AC6     (base 16)		Micro Control Designs
-				17490 Caribou Dr
-				Monument  Co.  80132
-				US
-
-00-1A-F2   (hex)		Dynavisions Schweiz AG
-001AF2     (base 16)		Dynavisions Schweiz AG
-				Freisinger Landstraße 21
-				D-80939  Muenchen  
-				DE
-
-00-1A-82   (hex)		PROBA Building Automation Co.,LTD
-001A82     (base 16)		PROBA Building Automation Co.,LTD
-				Penghuan Building 501, Shangdi East Road #1, Haidian District,
-				Beijing    100085
-				CN
-
-00-1A-7C   (hex)		Hirschmann Multimedia B.V.
-001A7C     (base 16)		Hirschmann Multimedia B.V.
-				Pampuslaan 170
-				Weesp  Noord-Holland  1382 JS
-				NL
-
-00-1A-7A   (hex)		Lismore Instruments Limited
-001A7A     (base 16)		Lismore Instruments Limited
-				Unit 2 Tristar Centre, Star Road
-				Horsham  West Sussex  RH13 8RA
-				GB
-
-00-1A-78   (hex)		ubtos
-001A78     (base 16)		ubtos
-				Rn.213, Woolim Lions Valley, #680
-				seoul  Gasan-dong  153-803
-				KR
-
-00-1A-76   (hex)		SDT information Technology Co.,LTD.
-001A76     (base 16)		SDT information Technology Co.,LTD.
-				Samil B/B 2F, 5-63 Hyochang-dong
-				Seoul    140-896
-				KR
-
-00-1A-70   (hex)		Cisco-Linksys, LLC
-001A70     (base 16)		Cisco-Linksys, LLC
-				121 Theory Drive
-				Irvine  California  92612
-				US
-
-00-1A-61   (hex)		PacStar Corp.
-001A61     (base 16)		PacStar Corp.
-				15055 SW Sequoia Pkwy, Suite 100
-				Portland  OR  97006
-				US
-
-00-1A-62   (hex)		Data Robotics, Incorporated
-001A62     (base 16)		Data Robotics, Incorporated
-				1881 Landings Dr
-				Mountain View  CA  94043
-				US
-
-00-1A-54   (hex)		Hip Shing Electronics Ltd.
-001A54     (base 16)		Hip Shing Electronics Ltd.
-				Unit 1/2/3, 20/F, New Treasure Center
-				    
-				HK
-
-00-1A-42   (hex)		Techcity Technology co., Ltd.
-001A42     (base 16)		Techcity Technology co., Ltd.
-				4F, No. 4, Alley 1, Szu Wei Lane, Chung Cheng Rd.,
-				Hsin Tein City  Taipei Hsien  231
-				TW
-
-00-1A-50   (hex)		PheeNet Technology Corp.
-001A50     (base 16)		PheeNet Technology Corp.
-				Rm. 3, 20F, No. 79, Sec. 1 Hsin Tai Wu Rd.
-				Hsi-Chih  New-Taipei City  221
-				TW
-
-00-1A-53   (hex)		Zylaya
-001A53     (base 16)		Zylaya
-				444 N. Frederick Ave.
-				Gaithersburg  MD  20877
-				US
-
-00-1A-4C   (hex)		Crossbow Technology, Inc
-001A4C     (base 16)		Crossbow Technology, Inc
-				4145 N. First Street
-				San Jose  CA  95134
-				US
-
-00-1A-1A   (hex)		Gentex Corporation/Electro-Acoustic Products
-001A1A     (base 16)		Gentex Corporation/Electro-Acoustic Products
-				2456 Brown Avenue
-				Manchester  NH  03103
-				US
-
-00-1A-12   (hex)		Essilor
-001A12     (base 16)		Essilor
-				64 Bis Avenue Aubert
-				94300  Vincennes  
-				FR
-
-00-1A-7D   (hex)		cyber-blue(HK)Ltd
-001A7D     (base 16)		cyber-blue(HK)Ltd
-				Room 1408 block C stars Plaza HongLiRoad,FuTian District
-				Shenzhen  GuangDong  518028
-				CN
-
-00-1A-60   (hex)		Wave Electronics Co.,Ltd.
-001A60     (base 16)		Wave Electronics Co.,Ltd.
-				3th Fl.,DaeSan Plaza B/D,Guun-Dong, 12-1,Gwonseon-Gu
-				Suwon-si  Kyeonggi-Do  441-814
-				KR
-
-00-1A-56   (hex)		ViewTel Co,. Ltd.
-001A56     (base 16)		ViewTel Co,. Ltd.
-				#B-502,Bundang Techno Park 148
-				BunDang-Ku, SeongNam-Si  GyeongGi-Do  463-760
-				KR
-
-00-19-F3   (hex)		Cetis, Inc
-0019F3     (base 16)		Cetis, Inc
-				5025 Galley Rd
-				Colorado Springs  CO  80915
-				US
-
-00-19-EF   (hex)		SHENZHEN LINNKING ELECTRONICS CO.,LTD
-0019EF     (base 16)		SHENZHEN LINNKING ELECTRONICS CO.,LTD
-				Room 901,B Block,Qinghua Information Center Hi-tec park North District,Nanshan District,Shenzhen
-				shenzhen  guangdong  518057
-				CN
-
-00-19-F7   (hex)		Onset Computer Corporation
-0019F7     (base 16)		Onset Computer Corporation
-				P.O. Box 3450
-				Pocasset  MA  02559
-				US
-
-00-19-EE   (hex)		CARLO GAVAZZI CONTROLS SPA-Controls Division
-0019EE     (base 16)		CARLO GAVAZZI CONTROLS SPA-Controls Division
-				Via Safforze 8
-				BELLUNO  BL  I-32100
-				IT
-
-00-19-BF   (hex)		Citiway technology Co.,ltd
-0019BF     (base 16)		Citiway technology Co.,ltd
-				No.2 Building,Jia 32,Beiheyan Avenue,East City
-				Peijing    100006
-				CN
-
-00-19-B6   (hex)		Euro Emme s.r.l.
-0019B6     (base 16)		Euro Emme s.r.l.
-				Via Belvedere, 24
-				Galliate Lombardo  Varese  21020
-				IT
-
-00-19-EB   (hex)		Pyronix Ltd
-0019EB     (base 16)		Pyronix Ltd
-				Braithwell Way
-				Rotherham  South Yorkshire  S66 8QY
-				GB
-
-00-19-E7   (hex)		Cisco Systems, Inc
-0019E7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-E9   (hex)		S-Information Technolgy, Co., Ltd.
-0019E9     (base 16)		S-Information Technolgy, Co., Ltd.
-				Sungwoo Bldg, 717-3 Suseo-dong,
-				Seoul    135-884
-				KR
-
-00-19-DA   (hex)		Welltrans O&E Technology Co. , Ltd.
-0019DA     (base 16)		Welltrans O&E Technology Co. , Ltd.
-				the 3rd Floor, building C-D, Hi-tech Digital Harbor, Guandong Industrial Park
-				Wuhan  Hubei  430074
-				CN
-
-00-1A-14   (hex)		Xin Hua Control Engineering Co.,Ltd.
-001A14     (base 16)		Xin Hua Control Engineering Co.,Ltd.
-				160 Wenjing Rd., Minhang
-				Shanghai    2000245
-				CN
-
-00-1A-10   (hex)		LUCENT TRANS ELECTRONICS CO.,LTD
-001A10     (base 16)		LUCENT TRANS ELECTRONICS CO.,LTD
-				9F-1,No.16,Chien Pah Rd.
-				Chung Ho  Taipei  235
-				TW
-
-00-1A-0C   (hex)		Swe-Dish Satellite Systems AB
-001A0C     (base 16)		Swe-Dish Satellite Systems AB
-				Torggatan 15
-				Solna  Stockholm  SE-171 06
-				SE
-
-00-19-DC   (hex)		ENENSYS Technologies
-0019DC     (base 16)		ENENSYS Technologies
-				Le Germanium
-				RENNES  Brittany  35700
-				FR
-
-00-19-D0   (hex)		Cathexis
-0019D0     (base 16)		Cathexis
-				PO Box 1091
-				Durban  KwaZulu Natal  4320
-				ZA
-
-00-19-D6   (hex)		LS Cable and System Ltd.
-0019D6     (base 16)		LS Cable and System Ltd.
-				12F LS Tower, 1026-6, Hogey-dong
-				Anyang-si  Gyeonggi-do  431-080
-				KR
-
-00-19-D7   (hex)		FORTUNETEK CO., LTD
-0019D7     (base 16)		FORTUNETEK CO., LTD
-				12F, No. 75, Sec 1, Chongqing S. Rd.,
-				Taipei    100
-				TW
-
-00-1A-02   (hex)		SECURE CARE PRODUCTS, INC
-001A02     (base 16)		SECURE CARE PRODUCTS, INC
-				39 CHENELL DRIVE
-				CONCORD  NH  03301
-				US
-
-00-19-F8   (hex)		Embedded Systems Design, Inc.
-0019F8     (base 16)		Embedded Systems Design, Inc.
-				6810 Deerpath Road
-				Elkridge  MD  21075
-				US
-
-00-1A-07   (hex)		Arecont Vision
-001A07     (base 16)		Arecont Vision
-				2400 N. Lincoln Ave
-				Altadena  CA  91001
-				US
-
-00-1A-08   (hex)		Simoco Ltd.
-001A08     (base 16)		Simoco Ltd.
-				Field House
-				Derby    DE1 1NH
-				GB
-
-00-1A-04   (hex)		Interay Solutions BV
-001A04     (base 16)		Interay Solutions BV
-				Mr. W.M. Oppedijk van Veenweg 8
-				BURGUM  Friesland  9251 GA
-				NL
-
-00-19-C9   (hex)		S&C ELECTRIC COMPANY
-0019C9     (base 16)		S&C ELECTRIC COMPANY
-				1135 ATLANTIC AVE
-				ALAMEDA  CA  94501
-				US
-
-00-19-B5   (hex)		Famar Fueguina S.A.
-0019B5     (base 16)		Famar Fueguina S.A.
-				Rodney 70
-				Buenos Aires    1427
-				AR
-
-00-19-B8   (hex)		Boundary Devices
-0019B8     (base 16)		Boundary Devices
-				7200 W. Oakland
-				Chandler  AZ  85226
-				US
-
-00-19-5D   (hex)		ShenZhen XinHuaTong Opto Electronics Co.,Ltd
-00195D     (base 16)		ShenZhen XinHuaTong Opto Electronics Co.,Ltd
-				5F,BaodaZhou,Shancheng Industrial Zone,BaoAn District
-				ShenZhen  GuangDong  518108
-				CN
-
-00-19-53   (hex)		Chainleader Communications Corp.
-001953     (base 16)		Chainleader Communications Corp.
-				5F, No. 400, Sec. 2 Bade Rd.,
-				Taipei    105
-				TW
-
-00-19-55   (hex)		Cisco Systems, Inc
-001955     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-19-59   (hex)		Staccato Communications Inc.
-001959     (base 16)		Staccato Communications Inc.
-				6195 Lusk Blvd.
-				San Diego  CA  92121
-				US
-
-00-19-4D   (hex)		Avago Technologies Sdn Bhd
-00194D     (base 16)		Avago Technologies Sdn Bhd
-				Bayan Lepas Free Industrial Zone
-				Bayan Lepas  Penang  11900
-				MY
-
-00-19-4E   (hex)		Ultra Electronics - TCS (Tactical Communication Systems)
-00194E     (base 16)		Ultra Electronics - TCS (Tactical Communication Systems)
-				5990 Cote De Liesse
-				TMR  Quebec  H4T 1V7
-				CA
-
-00-19-AC   (hex)		GSP SYSTEMS Inc.
-0019AC     (base 16)		GSP SYSTEMS Inc.
-				13FL, 101 Dong, Chunui Techno Park 1,
-				Bucheon-City  Gyeonggi-Do  420-857
-				KR
-
-00-19-B0   (hex)		HanYang System
-0019B0     (base 16)		HanYang System
-				701Ho, Kofomo Techno Center II, 1289-5
-				Shihung-Shi  Kyunggi-Do  429-850
-				KR
-
-00-19-95   (hex)		Jurong Hi-Tech (Suzhou)Co.ltd
-001995     (base 16)		Jurong Hi-Tech (Suzhou)Co.ltd
-				275,Xing Long Street, Suzhou Indudtrial Park
-				Suzhou  Jiang Su  215021
-				CN
-
-00-19-9A   (hex)		EDO-EVI
-00199A     (base 16)		EDO-EVI
-				7065 Columbia Gateway Dr.
-				Columbia  MD  21046
-				US
-
-00-19-94   (hex)		Jorjin Technologies Inc.
-001994     (base 16)		Jorjin Technologies Inc.
-				5F, No.28, Lane141, Sing-ai Rd.
-				Taipei    114
-				TW
-
-00-19-7C   (hex)		Riedel Communications GmbH
-00197C     (base 16)		Riedel Communications GmbH
-				Uellendahler Str. 353
-				Wuppertal  NRW  42109
-				DE
-
-00-19-A0   (hex)		NIHON DATA SYSTENS, INC.
-0019A0     (base 16)		NIHON DATA SYSTENS, INC.
-				6-9, Koyo-cho naka
-				Kobe-shi  Hyogo  658-0032
-				JP
-
-00-19-91   (hex)		avinfo
-001991     (base 16)		avinfo
-				Jiahuiyuan 703,Huaao Center,31# Zizhuyuan Road,
-				Beijing    100089
-				CN
-
-00-19-8C   (hex)		iXSea
-00198C     (base 16)		iXSea
-				55 av auguste Renoir
-				Marly le Roi    78160
-				FR
-
-00-19-62   (hex)		Commerciant, LP
-001962     (base 16)		Commerciant, LP
-				2901 Wilcrest
-				Houston  Texas  77042
-				US
-
-00-19-6F   (hex)		SensoPart GmbH
-00196F     (base 16)		SensoPart GmbH
-				Am Wiedenbach 1
-				Wieden  Baden-Württemberg  D-79695
-				DE
-
-00-18-DD   (hex)		Silicondust Engineering Ltd
-0018DD     (base 16)		Silicondust Engineering Ltd
-				38 Lillington Road
-				Auckland    
-				NZ
-
-00-18-DF   (hex)		The Morey Corporation
-0018DF     (base 16)		The Morey Corporation
-				100 Morey Drive
-				Woodridge  IL  60517
-				US
-
-00-18-E1   (hex)		Verkerk Service Systemen
-0018E1     (base 16)		Verkerk Service Systemen
-				Molenvliet 1
-				Zwijndrecht  Zuid-Holland  NL-3335LH
-				NL
-
-00-18-DA   (hex)		Würth Elektronik eiSos GmbH & Co. KG
-0018DA     (base 16)		Würth Elektronik eiSos GmbH & Co. KG
-				Max-Eyth-Straße 1
-				Waldenburg    74638
-				DE
-
-00-18-D5   (hex)		REIGNCOM
-0018D5     (base 16)		REIGNCOM
-				14F Kamco Yanjae Tower, 949-3
-				Seoul    135-739
-				KR
-
-00-18-E7   (hex)		Cameo Communications, INC.
-0018E7     (base 16)		Cameo Communications, INC.
-				NO.42, Sec. 6, Mincyuan E. Rd.
-				Taipei    114
-				TW
-
-00-18-E4   (hex)		YIGUANG
-0018E4     (base 16)		YIGUANG
-				3/FL.Industry zone,Fuxinlin,Hangcheng,Xixiang,Baoan
-				Shenzhen  Guangdong  518126
-				CN
-
-00-18-E5   (hex)		Adhoco AG
-0018E5     (base 16)		Adhoco AG
-				Technopark
-				Winterthur  ZH  CH-8406 
-				CH
-
-00-19-0A   (hex)		HASWARE INC.
-00190A     (base 16)		HASWARE INC.
-				4-12-3 HIGASHI
-				KUNITACHI  TOKYO  186-0002
-				JP
-
-00-19-23   (hex)		Phonex Korea Co., LTD.
-001923     (base 16)		Phonex Korea Co., LTD.
-				33-3, Geoyeo-Dong
-				Seoul  Songpa-Gu  138-814
-				KR
-
-00-19-1C   (hex)		Sensicast Systems
-00191C     (base 16)		Sensicast Systems
-				200 Reservoir St
-				Needham  MA  02494
-				US
-
-00-19-28   (hex)		Siemens AG, Transportation Systems
-001928     (base 16)		Siemens AG, Transportation Systems
-				Ackerstraße 22
-				Braunschweig    38126
-				DE
-
-00-19-15   (hex)		TECOM Co., Ltd.
-001915     (base 16)		TECOM Co., Ltd.
-				23 R&D Road 2 Science Based Industrial Park
-				Hsin-Chu    300
-				TW
-
-00-19-1B   (hex)		Sputnik Engineering AG
-00191B     (base 16)		Sputnik Engineering AG
-				Höheweg 85
-				Biel-Bienne BE    2502
-				CH
-
-00-19-09   (hex)		DEVI - Danfoss A/S
-001909     (base 16)		DEVI - Danfoss A/S
-				Ulvehavevej 61
-				Vejle    7100
-				DK
-
-00-19-33   (hex)		Strix Systems, Inc.
-001933     (base 16)		Strix Systems, Inc.
-				26610 Agoura Road
-				Calabasas  CA  91302
-				US
-
-00-19-04   (hex)		WB Electronics Sp. z o.o.
-001904     (base 16)		WB Electronics Sp. z o.o.
-				ul. Poznanska 129/133
-				Ozarow Mazowiecki  Mazowieckie  05-850
-				PL
-
-00-19-34   (hex)		TRENDON TOUCH TECHNOLOGY CORP.
-001934     (base 16)		TRENDON TOUCH TECHNOLOGY CORP.
-				2F No.5, Alley 22, Lane 513, Rueiguang Rd., Neihu
-				Taipei City    114
-				TW
-
-00-19-0D   (hex)		IEEE 1394c
-00190D     (base 16)		IEEE 1394c
-				c/o 1394 Trade Association
-				Southlake  TX  76092
-				US
-
-00-18-81   (hex)		Buyang Electronics Industrial Co., Ltd
-001881     (base 16)		Buyang Electronics Industrial Co., Ltd
-				434-140, Oryu-Dong
-				Incheon    404-300
-				KR
-
-00-18-76   (hex)		WowWee Ltd.
-001876     (base 16)		WowWee Ltd.
-				92 Granville Rd. Suite 301A-C
-				T.S.T. East  Kowloon  
-				HK
-
-00-18-7A   (hex)		Wiremold
-00187A     (base 16)		Wiremold
-				60 Woodlawn St.
-				West Hartford  CT  06110
-				US
-
-00-18-6C   (hex)		Neonode AB
-00186C     (base 16)		Neonode AB
-				Biblioteksgatan 11, 1st floor
-				Stockholm    S-111 46
-				SE
-
-00-18-73   (hex)		Cisco Systems, Inc
-001873     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-18-5F   (hex)		TAC Inc.
-00185F     (base 16)		TAC Inc.
-				66 Nishiishigatsubocho Nishinanajyo Shimogyoku
-				Kyoto    600-8896
-				JP
-
-00-18-D4   (hex)		Unified Display Interface SIG
-0018D4     (base 16)		Unified Display Interface SIG
-				15201 SW Greenbrier Road
-				Beaverton  Oregon  97006
-				US
-
-00-18-A7   (hex)		Yoggie Security Systems LTD.
-0018A7     (base 16)		Yoggie Security Systems LTD.
-				P.P.Box 156
-				Beth Halevy    42870
-				IL
-
-00-18-A2   (hex)		XIP Technology AB
-0018A2     (base 16)		XIP Technology AB
-				PO Box 437
-				Jönköping  Sweden  SE- 551 16
-				SE
-
-00-18-9C   (hex)		Weldex Corporation
-00189C     (base 16)		Weldex Corporation
-				6751 Katella Avenue
-				Cypress  CA  90630
-				US
-
-00-18-9A   (hex)		HANA Micron Inc.
-00189A     (base 16)		HANA Micron Inc.
-				#95-1 Wonnam-Li, Umbong-Myeon
-				Asan-City  Chung-Nam  336-864
-				KR
-
-00-18-64   (hex)		Eaton Corporation
-001864     (base 16)		Eaton Corporation
-				730, rue Commerciale
-				St-Jean-Chrysostome  QC  G6Z 2C5
-				CA
-
-00-18-66   (hex)		Leutron Vision
-001866     (base 16)		Leutron Vision
-				Industriestrasse 57
-				Glattbrugg  ZH  8152
-				CH
-
-00-18-60   (hex)		SIM Technology Group Shanghai Simcom Ltd.,
-001860     (base 16)		SIM Technology Group Shanghai Simcom Ltd.,
-				SIM Technology building,
-				Shanghai    200233
-				CN
-
-00-18-97   (hex)		JESS-LINK PRODUCTS Co., LTD
-001897     (base 16)		JESS-LINK PRODUCTS Co., LTD
-				9F, No. 176, Jian-Yi Rd., Chung Ho City
-				Taipei County    235
-				TW
-
-00-18-9E   (hex)		OMNIKEY GmbH.
-00189E     (base 16)		OMNIKEY GmbH.
-				Ferihumerstrasse 13
-				Linz  Upperaustria  4040
-				AT
-
-00-18-A9   (hex)		Ethernet Direct Corporation
-0018A9     (base 16)		Ethernet Direct Corporation
-				19F,No.345 Chung Ho Road, Yung Ho City
-				Taipei    234
-				TW
-
-00-18-A8   (hex)		AnNeal Technology Inc.
-0018A8     (base 16)		AnNeal Technology Inc.
-				Room 106, No. 47, Science Park Rd. II
-				Hsinchu    300
-				TW
-
-00-18-C2   (hex)		Firetide, Inc
-0018C2     (base 16)		Firetide, Inc
-				16795 Lark Av, Suite 200
-				Los Gatos  CA  95032
-				US
-
-00-18-3E   (hex)		Digilent, Inc
-00183E     (base 16)		Digilent, Inc
-				215 E. Main St.
-				Pullman  WA  99163
-				US
-
-00-18-42   (hex)		Nokia Danmark A/S
-001842     (base 16)		Nokia Danmark A/S
-				Frederikskaj
-				Copenhagen V    DK-1790
-				DK
-
-00-18-40   (hex)		3 Phoenix, Inc.
-001840     (base 16)		3 Phoenix, Inc.
-				14585 Avion Pkway
-				Chantilly  Virginia  20151
-				US
-
-00-18-44   (hex)		Heads Up Technologies, Inc.
-001844     (base 16)		Heads Up Technologies, Inc.
-				2033 Chennault Drive, Suite 100
-				Carrollton  Texas  75006-5119
-				US
-
-00-18-21   (hex)		SINDORICOH
-001821     (base 16)		SINDORICOH
-				277-22, 2ga, Sungsu-dong, Sungdong-gu,
-				Seoul    133-120
-				KR
-
-00-18-23   (hex)		Delta Electronics, Inc.
-001823     (base 16)		Delta Electronics, Inc.
-				186 Ruey Kuang Road, Neihu,
-				Taipei    114
-				TW
-
-00-18-15   (hex)		GZ Technologies, Inc.
-001815     (base 16)		GZ Technologies, Inc.
-				Room 1, 5F., No.94, Baojhong Rd.
-				Taipei    231
-				TW
-
-00-18-57   (hex)		Unilever R&D
-001857     (base 16)		Unilever R&D
-				Bldg. 50
-				Bedford  Bedfordshire  MK44 1LQ
-				GB
-
-00-18-53   (hex)		Atera Networks LTD.
-001853     (base 16)		Atera Networks LTD.
-				31, Habarzel St.
-				Tel-Aviv    69710
-				IL
-
-00-18-59   (hex)		Strawberry Linux Co.,Ltd.
-001859     (base 16)		Strawberry Linux Co.,Ltd.
-				1-28-8-204 Higashiayase
-				Adachiku  Tokyo  120-0004
-				JP
-
-00-18-4F   (hex)		8 Ways Technology Corp.
-00184F     (base 16)		8 Ways Technology Corp.
-				2F-1, No. 216, Sec. 3, Roosevelt Rd.
-				  Taipei  231
-				TW
-
-00-18-06   (hex)		Hokkei Industries Co., Ltd.
-001806     (base 16)		Hokkei Industries Co., Ltd.
-				Imahira 432
-				Hakusan  Ishikawa  924-0827
-				JP
-
-00-18-18   (hex)		Cisco Systems, Inc
-001818     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-18-1A   (hex)		AVerMedia Information Inc.
-00181A     (base 16)		AVerMedia Information Inc.
-				5F., No. 135, Jian 1st Rd.,
-				  New Taipei City  235
-				TW
-
-00-18-16   (hex)		Ubixon Co., Ltd.
-001816     (base 16)		Ubixon Co., Ltd.
-				Cheongdong Building 2F
-				Seoul    137-070
-				KR
-
-00-18-2B   (hex)		Softier
-00182B     (base 16)		Softier
-				Tidhar 3
-				Ra'anana  none  43665
-				IL
-
-00-18-29   (hex)		Gatsometer
-001829     (base 16)		Gatsometer
-				Claes Tillyweg 2
-				Haarlem  Noord-Holland  2031 CW
-				NL
-
-00-18-38   (hex)		PanAccess Communications,Inc.
-001838     (base 16)		PanAccess Communications,Inc.
-				Floor 8,Tower B,Global Trade Center,36 Beisanhuandonglu,Dongcheng District
-				  Beijing  100013
-				CN
-
-00-17-F0   (hex)		SZCOM Broadband Network Technology Co.,Ltd
-0017F0     (base 16)		SZCOM Broadband Network Technology Co.,Ltd
-				Room 602 No.8 Building ,Shenzhen Software Park,
-				Shenzhen  Guangdong  518057
-				CN
-
-00-17-F1   (hex)		Renu Electronics Pvt Ltd
-0017F1     (base 16)		Renu Electronics Pvt Ltd
-				Sr No 2/6, Baner Road,
-				Pune  Maharashtra  411045
-				IN
-
-00-17-FF   (hex)		PLAYLINE Co.,Ltd.
-0017FF     (base 16)		PLAYLINE Co.,Ltd.
-				1-4-21 MOTOAKASAKA
-				TOKYO    107-0051
-				JP
-
-00-17-F6   (hex)		Pyramid Meriden Inc.
-0017F6     (base 16)		Pyramid Meriden Inc.
-				45 Gracey Ave.
-				Meriden  CT  06451
-				US
-
-00-17-C5   (hex)		SonicWALL
-0017C5     (base 16)		SonicWALL
-				1143 Borregas Ave
-				Sunnyvale  CA  95126
-				US
-
-00-17-BE   (hex)		Tratec Telecom B.V.
-0017BE     (base 16)		Tratec Telecom B.V.
-				De Smalle Zijde 12
-				Veenendaal    NL0-3903 LP
-				NL
-
-00-17-C0   (hex)		PureTech Systems, Inc.
-0017C0     (base 16)		PureTech Systems, Inc.
-				1950 W Rose Garden Lane
-				Phoenix  AZ  85027
-				US
-
-00-17-BA   (hex)		SEDO CO., LTD.
-0017BA     (base 16)		SEDO CO., LTD.
-				302, KT Bldg, 1ANNEX, 35-1
-				Seoul    150-038
-				KR
-
-00-17-D4   (hex)		Monsoon Multimedia, Inc
-0017D4     (base 16)		Monsoon Multimedia, Inc
-				1730 South Amphlett blvd. Suite 101
-				San Mateo  CA  94402
-				US
-
-00-17-80   (hex)		Applied Biosystems B.V.
-001780     (base 16)		Applied Biosystems B.V.
-				Blk 33, Marsiling Industrial Estate Road 3,
-				    739256
-				SG
-
-00-17-A5   (hex)		Ralink Technology Corp
-0017A5     (base 16)		Ralink Technology Corp
-				Suite 215, Bldg 53. 195-61 Sec.4, Chung Hsing Rd,
-				Chutung  Hsinchu  310
-				TW
-
-00-17-A8   (hex)		EDM Corporation
-0017A8     (base 16)		EDM Corporation
-				3-5-2 Itabashi
-				Itabashi-ku  Tokyo  173-0004
-				JP
-
-00-17-A9   (hex)		Sentivision
-0017A9     (base 16)		Sentivision
-				Marynarska 19a
-				Warsaw  Mazowieckie  02-674
-				PL
-
-00-17-AF   (hex)		Enermet
-0017AF     (base 16)		Enermet
-				Salvesenintie
-				Jyskä    FIN-40420
-				FI
-
-00-17-AA   (hex)		elab-experience inc.
-0017AA     (base 16)		elab-experience inc.
-				104 Anotsupia
-				Tsu-shi  mie prefecture  514-0131
-				JP
-
-00-17-AE   (hex)		GAI-Tronics
-0017AE     (base 16)		GAI-Tronics
-				Brunel Drive
-				Burton Upon Trent  Staffordshire  DE13 0BZ
-				GB
-
-00-17-B5   (hex)		Peerless Systems Corporation
-0017B5     (base 16)		Peerless Systems Corporation
-				2381 Rosecrans Avenue, Suite 400
-				El Segundo  CA  90245
-				US
-
-00-17-6C   (hex)		Pivot3, Inc.
-00176C     (base 16)		Pivot3, Inc.
-				6605 Cypresswood Drive, Ste 350
-				Spring  TX  77379-7741
-				US
-
-00-17-70   (hex)		Arti Industrial Electronics Ltd.
-001770     (base 16)		Arti Industrial Electronics Ltd.
-				Ger-San Sitesi, 657. Sokak
-				Ankara    06370
-				TR
-
-00-17-8B   (hex)		Teledyne Technologies Incorporated
-00178B     (base 16)		Teledyne Technologies Incorporated
-				12333 West Olympic Blvd
-				Los Angeles  CA  90064
-				US
-
-00-17-DF   (hex)		Cisco Systems, Inc
-0017DF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-17-46   (hex)		Freedom9 Inc.
-001746     (base 16)		Freedom9 Inc.
-				4140B SLADEVIEW CRE.,
-				MISSISSAUGA,  Ontario  L5L6A1
-				CA
-
-00-17-4D   (hex)		DYNAMIC NETWORK FACTORY, INC.
-00174D     (base 16)		DYNAMIC NETWORK FACTORY, INC.
-				26250 EDEN LANDING RD.
-				HAYWARD  CA  94545
-				US
-
-00-17-44   (hex)		Araneo Ltd.
-001744     (base 16)		Araneo Ltd.
-				103 Medinat Hayehudim
-				Herzliya    46733
-				IL
-
-00-17-49   (hex)		HYUNDAE YONG-O-SA CO.,LTD
-001749     (base 16)		HYUNDAE YONG-O-SA CO.,LTD
-				448-10, Hyuckjae B/D Seongnae, Kangdong-gu
-				Seoul    134-847
-				KR
-
-00-17-43   (hex)		Deck Srl
-001743     (base 16)		Deck Srl
-				Via Fabio Filzi 2
-				Milan    20124
-				IT
-
-00-17-28   (hex)		Selex Communications
-001728     (base 16)		Selex Communications
-				Via Pieragostini 80
-				Genova    16151
-				IT
-
-00-17-22   (hex)		Hanazeder Electronic GmbH
-001722     (base 16)		Hanazeder Electronic GmbH
-				J.M. Dimmelstr 10
-				Ried i. I.  Oberösterreich  4910
-				AT
-
-00-17-3D   (hex)		Neology
-00173D     (base 16)		Neology
-				13000 Gregg Street Suite A
-				Poway  CA  92064
-				US
-
-00-17-40   (hex)		Bluberi Gaming Technologies Inc
-001740     (base 16)		Bluberi Gaming Technologies Inc
-				2125, rue Letendre Suite 420
-				Drummondville  Quebec  J2C 7G1
-				CA
-
-00-17-32   (hex)		Science-Technical Center RISSA
-001732     (base 16)		Science-Technical Center RISSA
-				st. Abramtsevskaja, h.9
-				Moscow    128572
-				RU
-
-00-17-6D   (hex)		CORE CORPORATION
-00176D     (base 16)		CORE CORPORATION
-				1-22-3, Sangenjaya,
-				Setagaya-ku  Tokyo-to  154-8552
-				JP
-
-00-17-73   (hex)		Laketune Technologies Co. Ltd
-001773     (base 16)		Laketune Technologies Co. Ltd
-				No. 38 Zijinghua Rd. Westlake District
-				Hangzhou  Zhejiang  310013
-				CN
-
-00-17-3A   (hex)		Cloudastructure Inc
-00173A     (base 16)		Cloudastructure Inc
-				585 Broadway
-				Redwood City  CA  94063
-				US
-
-00-17-2F   (hex)		NeuLion Incorporated
-00172F     (base 16)		NeuLion Incorporated
-				1600 Old Country Road
-				Plainview  NY  11803
-				US
-
-00-17-23   (hex)		Summit Data Communications
-001723     (base 16)		Summit Data Communications
-				526 South Main Street
-				Akron  Ohio  44311
-				US
-
-00-17-1F   (hex)		IMV Corporation
-00171F     (base 16)		IMV Corporation
-				2-6-10 Takejima
-				Osaka    555-0011
-				JP
-
-00-17-53   (hex)		nFore Technology Inc.
-001753     (base 16)		nFore Technology Inc.
-				5F, NO 31, Ln 258, Rulguang Rd
-				Taipei  Neihu District  11491
-				TW
-
-00-17-57   (hex)		RIX TECHNOLOGY LIMITED
-001757     (base 16)		RIX TECHNOLOGY LIMITED
-				17 DAI WANG STREET
-				TAI PO  NEW TERRITORIES  
-				HK
-
-00-16-BB   (hex)		Law-Chain Computer Technology Co Ltd
-0016BB     (base 16)		Law-Chain Computer Technology Co Ltd
-				7F-2, 286-4, hsin ya road, chien chen district
-				Kaohsiung    80673
-				TW
-
-00-16-B4   (hex)		Private
-0016B4     (base 16)		Private
-
-00-16-A7   (hex)		AWETA G&P
-0016A7     (base 16)		AWETA G&P
-				Burg. Winkellaan 3
-				Nootdorp    2631 HG
-				NL
-
-00-17-10   (hex)		Casa Systems Inc.
-001710     (base 16)		Casa Systems Inc.
-				10, New England Business Center Dr.
-				Andover  MA  01810
-				US
-
-00-16-BF   (hex)		PaloDEx Group Oy
-0016BF     (base 16)		PaloDEx Group Oy
-				P.O. Box 64
-				Tuusula    04301
-				FI
-
-00-16-B7   (hex)		Seoul Commtech
-0016B7     (base 16)		Seoul Commtech
-				448-11, Seongnae 3dong. Gangdong gu,
-				Seoul    134033
-				KR
-
-00-16-E1   (hex)		SiliconStor, Inc.
-0016E1     (base 16)		SiliconStor, Inc.
-				48430 Lakeview Blvd.
-				Fremont  CA  94538
-				US
-
-00-16-E2   (hex)		American Fibertek, Inc.
-0016E2     (base 16)		American Fibertek, Inc.
-				120 Belmont Drive
-				Somerset  New Jersey  08873-1204
-				US
-
-00-17-13   (hex)		Tiger NetCom
-001713     (base 16)		Tiger NetCom
-				J-15 Mudan Cun, Yijing Huayuan,
-				Shenzhen  Guangdong  518003
-				CN
-
-00-16-CD   (hex)		HIJI HIGH-TECH CO., LTD.
-0016CD     (base 16)		HIJI HIGH-TECH CO., LTD.
-				Ohga 8133
-				Hayami  Oita  879-1504
-				JP
-
-00-16-EF   (hex)		Koko Fitness, Inc.
-0016EF     (base 16)		Koko Fitness, Inc.
-				136 Longwater Drive
-				Norwell  MA  02061
-				US
-
-00-16-FD   (hex)		Jaty Electronics
-0016FD     (base 16)		Jaty Electronics
-				Jaty Bldg 10F, 1659-5 Bongchun11-Dong
-				Seoul    151-832
-				KR
-
-00-16-78   (hex)		SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD
-001678     (base 16)		SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD
-				GAOKE INDUSTRIAL PARK, NO.8 TANGKENG ROAD, SHIYAN TOWN
-				SHENZHEN  GUANGDONG  518108
-				CN
-
-00-16-74   (hex)		EuroCB (Phils.), Inc.
-001674     (base 16)		EuroCB (Phils.), Inc.
-				SFB No.2
-				Lapulapu City  Cebu  6015
-				PH
-
-00-16-70   (hex)		SKNET Corporation
-001670     (base 16)		SKNET Corporation
-				Fontana Shinyokohama
-				Yokohama  Kanagawa  222-0033
-				JP
-
-00-16-89   (hex)		Pilkor Electronics Co., Ltd
-001689     (base 16)		Pilkor Electronics Co., Ltd
-				381,Wonchun-Dong,Yeoungtong-Gu
-				Suwon  Kyung Ki-Do  442-380
-				KR
-
-00-16-8A   (hex)		id-Confirm Inc
-00168A     (base 16)		id-Confirm Inc
-				1800 Boulder St
-				Denver  CO  80211
-				US
-
-00-16-86   (hex)		Karl Storz Imaging
-001686     (base 16)		Karl Storz Imaging
-				175 Cremona Dr.
-				Goleta  CA  93117
-				US
-
-00-16-8D   (hex)		KORWIN CO., Ltd.
-00168D     (base 16)		KORWIN CO., Ltd.
-				3rd Floor, Hana Bldg, 123-7 Nonhyun-dong
-				Seoul    135-010
-				KR
-
-00-16-8E   (hex)		Vimicro corporation
-00168E     (base 16)		Vimicro corporation
-				15/F,Shining Tower,No.35,xueyuan
-				Beijing    100083
-				CN
-
-00-16-4F   (hex)		World Ethnic Broadcastin Inc.
-00164F     (base 16)		World Ethnic Broadcastin Inc.
-				50 California Street, Suite 1500
-				San Francisco  California  94111
-				US
-
-00-16-7E   (hex)		DIBOSS.CO.,LTD
-00167E     (base 16)		DIBOSS.CO.,LTD
-				126-1, Gongdan-dong
-				Gumi  Gyeongbuk  730-902
-				KR
-
-00-16-7B   (hex)		Haver&Boecker
-00167B     (base 16)		Haver&Boecker
-				Carl-Haver-Platz 3
-				Oelde  NRW  59302
-				DE
-
-00-16-79   (hex)		eOn Communications
-001679     (base 16)		eOn Communications
-				4105 Royal Drive, Suite 100
-				Kennesaw  Georgia  30144
-				US
-
-00-16-A0   (hex)		Auto-Maskin
-0016A0     (base 16)		Auto-Maskin
-				Sophie Radichs Vei 7
-				LILLESTROM  Akershus  2003
-				NO
-
-00-16-5D   (hex)		AirDefense, Inc.
-00165D     (base 16)		AirDefense, Inc.
-				4800 North Point Pkwy
-				Alpharetta  GA  30022
-				US
-
-00-16-5B   (hex)		Grip Audio
-00165B     (base 16)		Grip Audio
-				6345 W. Louise Drive
-				Glendale  Arizona  85310-4243
-				US
-
-00-16-67   (hex)		A-TEC Subsystem INC.
-001667     (base 16)		A-TEC Subsystem INC.
-				4F, No. 86, Chung-Hsing Road, Shijr City,
-				    221
-				TW
-
-00-16-4A   (hex)		Vibration Technology Limited
-00164A     (base 16)		Vibration Technology Limited
-				Vibtech House, Central Boulevard
-				Larbert  Scotland  FK5 4RU
-				GB
-
-00-16-45   (hex)		Power Distribution, Inc.
-001645     (base 16)		Power Distribution, Inc.
-				4200 Oakleys Ct.
-				Richmond  VA  23223
-				US
-
-00-16-3F   (hex)		CReTE SYSTEMS Inc.
-00163F     (base 16)		CReTE SYSTEMS Inc.
-				7F,No.250,Sec.3,Pei Shen Rd.,Shen Keng Hsiang
-				Taipei County    22204
-				TW
-
-00-16-3D   (hex)		Tsinghua Tongfang Legend Silicon Tech. Co., Ltd.
-00163D     (base 16)		Tsinghua Tongfang Legend Silicon Tech. Co., Ltd.
-				26F TSINGHUA TONGFANG HI-TECH PLAZA
-				BEIJING    100083
-				CN
-
-00-16-2D   (hex)		STNet Co., Ltd.
-00162D     (base 16)		STNet Co., Ltd.
-				Shin-wha Building 4F, 954-25
-				Anyang-si  Kyungki-do   431-060
-				KR
-
-00-16-27   (hex)		embedded-logic DESIGN AND MORE GmbH
-001627     (base 16)		embedded-logic DESIGN AND MORE GmbH
-				Hansestrasse 24
-				Muenster  NRW  48153
-				DE
-
-00-16-3A   (hex)		YVES TECHNOLOGY CO., LTD.
-00163A     (base 16)		YVES TECHNOLOGY CO., LTD.
-				No.74, Fusing 2nd Rd.
-				Gueishan  Taoyuan  33377
-				TW
-
-00-16-38   (hex)		TECOM Co., Ltd.
-001638     (base 16)		TECOM Co., Ltd.
-				23 R&D Road 2 Science Based Industrial Park
-				Hsin-Chu    300
-				TW
-
-00-16-33   (hex)		Oxford Diagnostics Ltd.
-001633     (base 16)		Oxford Diagnostics Ltd.
-				Sandybrae
-				Oxford  Oxon.  OX1 5HJ
-				GB
-
-00-15-EC   (hex)		Boca Devices LLC
-0015EC     (base 16)		Boca Devices LLC
-				7647 Sierra Ter
-				Boca Raton  Florida  33433
-				US
-
-00-15-EF   (hex)		NEC TOKIN Corporation
-0015EF     (base 16)		NEC TOKIN Corporation
-				 1-1,Asahi-Cho 7-chome,Shiroishi,
-				Miyagi    989-0223
-				JP
-
-00-15-E4   (hex)		Zimmer Elektromedizin
-0015E4     (base 16)		Zimmer Elektromedizin
-				Junkersstrasse 9
-				Neu-Ulm  Bayern  89231
-				DE
-
-00-16-22   (hex)		BBH SYSTEMS GMBH
-001622     (base 16)		BBH SYSTEMS GMBH
-				Böttgerstraße 40
-				Weiden i.d.OPf.  Bayern  92637
-				DE
-
-00-16-13   (hex)		LibreStream Technologies Inc.
-001613     (base 16)		LibreStream Technologies Inc.
-				895 Waverley Street
-				Winnipeg  Manitoba  R3T 5P4
-				CA
-
-00-16-0F   (hex)		BADGER METER INC
-00160F     (base 16)		BADGER METER INC
-				4545 W BROWN DEER RD
-				MILWAUKEE  WI  53223
-				US
-
-00-16-04   (hex)		Sigpro
-001604     (base 16)		Sigpro
-				655 W Evelyn ST
-				Mountain View  CA  94041
-				US
-
-00-15-FB   (hex)		setex schermuly textile computer gmbh
-0015FB     (base 16)		setex schermuly textile computer gmbh
-				Hauptstraße 25
-				Mengerskirchen  Hessen  35794
-				DE
-
-00-15-FE   (hex)		SCHILLING ROBOTICS LLC
-0015FE     (base 16)		SCHILLING ROBOTICS LLC
-				260 COUSTEAU PL
-				DAVIS  CA  95618
-				US
-
-00-16-0D   (hex)		Be Here Corporation
-00160D     (base 16)		Be Here Corporation
-				39300 Civic Center Dr., Suite 180
-				Fremont  CA  94538
-				US
-
-00-15-C9   (hex)		Gumstix, Inc
-0015C9     (base 16)		Gumstix, Inc
-				3130 Alpine Road
-				Portola Valley  CA  94028
-				US
-
-00-15-BA   (hex)		iba AG
-0015BA     (base 16)		iba AG
-				Koenigswarterstrasse 44
-				Fuerth  Bavaria  90762
-				DE
-
-00-15-BB   (hex)		SMA Solar Technology AG
-0015BB     (base 16)		SMA Solar Technology AG
-				Sonnenallee 1
-				Niestetal  Hessen  34266
-				DE
-
-00-15-BF   (hex)		technicob
-0015BF     (base 16)		technicob
-				4 Rue Camille Saint-Saens
-				LANESTER  Morbihan  56602
-				US
-
-00-15-82   (hex)		Pulse Eight Limited
-001582     (base 16)		Pulse Eight Limited
-				13 The Metro Centre
-				Peterbourugh  PE2 7UH  
-				GB
-
-00-15-7B   (hex)		Leuze electronic GmbH + Co. KG
-00157B     (base 16)		Leuze electronic GmbH + Co. KG
-				In der Braike 1
-				Owen  Baden-Württemberg  73277
-				DE
-
-00-15-78   (hex)		Audio / Video Innovations
-001578     (base 16)		Audio / Video Innovations
-				A3-3375 North Service Road
-				Burlington  ON  L7N 3G2
-				CA
-
-00-15-AE   (hex)		kyung il
-0015AE     (base 16)		kyung il
-				woar rong-myn yougate-ri 101-2
-				paju-city  gyeong gi  413-813
-				KR
-
-00-15-BC   (hex)		Develco
-0015BC     (base 16)		Develco
-				Olof Palmes Allé 40
-				Aarhus N    8200
-				DK
-
-00-15-BD   (hex)		Group 4 Technology Ltd
-0015BD     (base 16)		Group 4 Technology Ltd
-				Challenge House
-				Tewkesbury  Gloucestershire  GL20 8UQ
-				GB
-
-00-15-B5   (hex)		CI Network Corp.
-0015B5     (base 16)		CI Network Corp.
-				2F Daini Inoue Bldg
-				Tokyo    107-0052
-				JP
-
-00-15-CD   (hex)		Exartech International Corp.
-0015CD     (base 16)		Exartech International Corp.
-				3/F, No.62, Lane 188, Ruei Guang Rd., Neihu
-				Taipei    114
-				TW
-
-00-15-D9   (hex)		PKC Electronics Oy
-0015D9     (base 16)		PKC Electronics Oy
-				Pajuniityntie 43
-				RAAHE    92120
-				FI
-
-00-15-DD   (hex)		IP Control Systems Ltd.
-0015DD     (base 16)		IP Control Systems Ltd.
-				Unit 15, Hi-Tech Village,
-				Boldon  Tyne & Wear  NE35 9PE
-				GB
-
-00-15-9C   (hex)		B-KYUNG SYSTEM Co.,Ltd.
-00159C     (base 16)		B-KYUNG SYSTEM Co.,Ltd.
-				#812,WOOLIM E-BIZ CENTER,170-5
-				GURO-DONG  GURO-GU  152-847
-				KR
-
-00-15-95   (hex)		Quester Tangent Corporation
-001595     (base 16)		Quester Tangent Corporation
-				201 - 9865 West Saanich Road
-				Sidney  BC  V8L 5Y8
-				CA
-
-00-15-87   (hex)		Takenaka Seisakusho Co.,Ltd
-001587     (base 16)		Takenaka Seisakusho Co.,Ltd
-				178 HISHIE
-				HIGASHI-OSAKA CITY  OSAKA  578-0984
-				JP
-
-00-15-1A   (hex)		Hunter Engineering Company
-00151A     (base 16)		Hunter Engineering Company
-				11250 Hunter Drive
-				Bridgeton  Missouri  63044
-				US
-
-00-15-14   (hex)		Hu Zhou NAVA Networks&Electronics Ltd.
-001514     (base 16)		Hu Zhou NAVA Networks&Electronics Ltd.
-				3/F,No.328-4,Guang Yuan Rd.
-				Hu Zhou  Zhe Jiang  313000
-				CN
-
-00-15-16   (hex)		URIEL SYSTEMS INC.
-001516     (base 16)		URIEL SYSTEMS INC.
-				#204 Byucksan Digitalvalley 1st, 212-16, Guro-dong, Guro-gu
-				Seoul    152-050
-				KR
-
-00-15-45   (hex)		SEECODE Co., Ltd.
-001545     (base 16)		SEECODE Co., Ltd.
-				4th Floor, Amin Bldg., 110-1, Yangjaedong, Seochogu
-				Seoul    137-891
-				KR
-
-00-15-43   (hex)		Aberdeen Test Center
-001543     (base 16)		Aberdeen Test Center
-				400 Colleran Road
-				Aberdeen Proving Grounds  MD  21005-5059
-				US
-
-00-15-41   (hex)		StrataLight Communications, Inc.
-001541     (base 16)		StrataLight Communications, Inc.
-				2105 S. Bascom Avenue
-				Campbell  CA  95008
-				US
-
-00-15-69   (hex)		PECO II, Inc.
-001569     (base 16)		PECO II, Inc.
-				7060 Huntley Road
-				Columbus  OH  43229
-				US
-
-00-15-64   (hex)		BEHRINGER Spezielle Studiotechnik GmbH
-001564     (base 16)		BEHRINGER Spezielle Studiotechnik GmbH
-				Hanns-Martin-Schleyer-Str. 36-38
-				Willich    
-				DE
-
-00-15-63   (hex)		Cisco Systems, Inc
-001563     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-15-61   (hex)		JJPlus Corporation
-001561     (base 16)		JJPlus Corporation
-				678 Massachusetts Ave
-				Cambridge  MA  02139
-				US
-
-00-15-71   (hex)		Nolan Systems
-001571     (base 16)		Nolan Systems
-				1595 Cleo Springs Dr.
-				San Jose  Ca.  95131
-				US
-
-00-15-65   (hex)		XIAMEN YEALINK NETWORK TECHNOLOGY CO.,LTD
-001565     (base 16)		XIAMEN YEALINK NETWORK TECHNOLOGY CO.,LTD
-				7F Hualian Electronic BLDG.580 Jiahe Road,Xiamen China
-				Xiamen  Fujian  361006
-				CN
-
-00-15-38   (hex)		RFID, Inc.
-001538     (base 16)		RFID, Inc.
-				14100 East Jewell Ave.
-				Aurora  CO  80012
-				US
-
-00-15-2E   (hex)		PacketHop, Inc.
-00152E     (base 16)		PacketHop, Inc.
-				1301 Shoreway Road
-				Belmont  California  94002
-				US
-
-00-15-58   (hex)		FOXCONN
-001558     (base 16)		FOXCONN
-				No.2,2nd DongHuan Road,10th YouSong
-				ShenZhen  GuangDong  518109
-				US
-
-00-15-1F   (hex)		Multivision Intelligent Surveillance (Hong Kong) Ltd
-00151F     (base 16)		Multivision Intelligent Surveillance (Hong Kong) Ltd
-				26/F, Aitken Vanson Centre,
-				    
-				HK
-
-00-15-22   (hex)		Dea Security
-001522     (base 16)		Dea Security
-				Via Togliatti
-				Santo Stefano Magra  SP  19037
-				IT
-
-00-15-4F   (hex)		one RF Technology
-00154F     (base 16)		one RF Technology
-				1360 Route des Dolines
-				Valbonne Sophia-Antipolis  PACA  06560
-				FR
-
-00-15-01   (hex)		LexBox
-001501     (base 16)		LexBox
-				3, avenue Didier Daurat
-				TOULOUSE    31400
-				FR
-
-00-14-A3   (hex)		Vitelec BV
-0014A3     (base 16)		Vitelec BV
-				kapittelweg 18
-				Breda  NB  NL 4827 HG
-				NL
-
-00-14-97   (hex)		ZHIYUAN Eletronics co.,ltd.
-001497     (base 16)		ZHIYUAN Eletronics co.,ltd.
-				2 Floor, NO.3 Building, Huangzhou Industrial Estate, Chebei Road,
-				Guangzhou  Guangdong  510660
-				CN
-
-00-14-99   (hex)		Helicomm Inc
-001499     (base 16)		Helicomm Inc
-				1947 Camino Vida Roble
-				Carlsbad  CA  92008
-				US
-
-00-14-92   (hex)		Liteon, Mobile Media Solution SBU
-001492     (base 16)		Liteon, Mobile Media Solution SBU
-				4F, 3, Lane 768, Sec. 4,
-				Taipei    115
-				TW
-
-00-14-94   (hex)		ESU AG
-001494     (base 16)		ESU AG
-				Lukasstrasse 29
-				St. Gallen    9008
-				CH
-
-00-14-EF   (hex)		TZero Technologies, Inc.
-0014EF     (base 16)		TZero Technologies, Inc.
-				455 W. Maude Avenue
-				Sunnyvale  CA  94085
-				US
-
-00-14-BC   (hex)		SYNECTIC TELECOM EXPORTS PVT. LTD.
-0014BC     (base 16)		SYNECTIC TELECOM EXPORTS PVT. LTD.
-				196, 1st Main, 3rd Stage, 4th Block
-				BANGALORE    560079
-				IN
-
-00-14-B9   (hex)		MSTAR SEMICONDUCTOR
-0014B9     (base 16)		MSTAR SEMICONDUCTOR
-				11-13 rue René Jacques
-				Issy les Moulineaux    92130
-				FR
-
-00-14-BD   (hex)		incNETWORKS, Inc
-0014BD     (base 16)		incNETWORKS, Inc
-				198 Brighton Ave
-				Long Branch  NJ  07740
-				US
-
-00-14-B7   (hex)		AR Infotek Inc.
-0014B7     (base 16)		AR Infotek Inc.
-				9F, No.185, GangQian Road
-				Taipei    11494
-				TW
-
-00-14-CA   (hex)		Key Radio Systems Limited
-0014CA     (base 16)		Key Radio Systems Limited
-				Venus House
-				Aldermaston  Berkshire  RG7 8DA
-				GB
-
-00-14-C8   (hex)		Contemporary Research Corp
-0014C8     (base 16)		Contemporary Research Corp
-				4355 Excel Pkwy
-				Addison  TX  75001
-				US
-
-00-14-C5   (hex)		Alive Technologies Pty Ltd
-0014C5     (base 16)		Alive Technologies Pty Ltd
-				11 Technology Drive
-				Arundel  Queensland  4214
-				AU
-
-00-14-DA   (hex)		Huntleigh Healthcare
-0014DA     (base 16)		Huntleigh Healthcare
-				Huntleigh Healthcare - Diagnostic Products Division
-				Cardiff    CF24 5HN
-				GB
-
-00-14-D5   (hex)		Datang Telecom Technology CO. , LCD,Optical Communication Br
-0014D5     (base 16)		Datang Telecom Technology CO. , LCD,Optical Communication Br
-				3rd Floor,Building 8,Hi-Tech Incubation Park,
-				ChengDu  SiChuan  610041
-				CN
-
-00-14-D3   (hex)		SEPSA
-0014D3     (base 16)		SEPSA
-				calle Albatros, 7 y 9
-				PINTO  Madrid  28320
-				ES
-
-00-14-D8   (hex)		bio-logic SA
-0014D8     (base 16)		bio-logic SA
-				1, rue de l'Europe
-				CLAIX    38640
-				FR
-
-00-14-EE   (hex)		Western Digital Technologies, Inc.
-0014EE     (base 16)		Western Digital Technologies, Inc.
-				20511 Lake Forest Dr.
-				Lake Forest  Ca  92630
-				US
-
-00-14-B5   (hex)		PHYSIOMETRIX,INC
-0014B5     (base 16)		PHYSIOMETRIX,INC
-				101 BILLERICA AVE #5
-				N. BILLERICA  MA  01862
-				US
-
-00-14-9C   (hex)		HF Company
-00149C     (base 16)		HF Company
-				Node Park Touraine
-				BP1 Tauxigny    37310
-				FR
-
-00-14-5C   (hex)		Intronics B.V.
-00145C     (base 16)		Intronics B.V.
-				Koolhovenstraat 1E
-				Barneveld  Gelderland  3772 MT
-				NL
-
-00-14-5B   (hex)		SeekerNet Inc.
-00145B     (base 16)		SeekerNet Inc.
-				300 Satellite Blvd.
-				Suwanee  Georgia  30024
-				US
-
-00-14-49   (hex)		Sichuan Changhong Electric Ltd.
-001449     (base 16)		Sichuan Changhong Electric Ltd.
-				No.35,East MianXin Road,MianYang,Sichaun,China.
-				MianYang  SiChuan  PRC 621000
-				CN
-
-00-14-46   (hex)		SuperVision Solutions LLC
-001446     (base 16)		SuperVision Solutions LLC
-				762 Industrial Dr.
-				Elmhurst  IL  60126
-				US
-
-00-14-40   (hex)		ATOMIC Corporation
-001440     (base 16)		ATOMIC Corporation
-				MAMPO BLDG
-				TAITO-KU  TOKYO  111-0053
-				JP
-
-00-14-2E   (hex)		77 Elektronika Kft.
-00142E     (base 16)		77 Elektronika Kft.
-				Fehervari ut 98.
-				  Budapest  H-1163
-				HU
-
-00-14-30   (hex)		ViPowER, Inc
-001430     (base 16)		ViPowER, Inc
-				9F., No.205-3, Sec. 3, Beisin Rd
-				Sindian  Taipei County  231
-				TW
-
-00-14-32   (hex)		Tarallax Wireless, Inc.
-001432     (base 16)		Tarallax Wireless, Inc.
-				10 West 100 South,
-				Salt Lake City  UT  84101
-				US
-
-00-14-85   (hex)		Giga-Byte
-001485     (base 16)		Giga-Byte
-				No.215,Nan-Ping Road,
-				Pin-Jen  Taoyuan  326
-				TW
-
-00-14-83   (hex)		eXS Inc.
-001483     (base 16)		eXS Inc.
-				1900 Alameda de las Pulgas
-				San Mateo  CA  94403
-				US
-
-00-14-71   (hex)		Eastern Asia Technology Limited
-001471     (base 16)		Eastern Asia Technology Limited
-				8F-1, No. 188, Baoqiao Rd., Xindian Dist.
-				New Taipei City    23145
-				TW
-
-00-14-6A   (hex)		Cisco Systems, Inc
-00146A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-14-4C   (hex)		General Meters Corp.
-00144C     (base 16)		General Meters Corp.
-				1935 Dominion Way
-				Colorado Springs  Colorado  80918
-				US
-
-00-14-43   (hex)		Consultronics Europe Ltd
-001443     (base 16)		Consultronics Europe Ltd
-				Electron Way
-				Chandlers Ford  Hants  SO53 4SE
-				GB
-
-00-14-60   (hex)		Kyocera Wireless Corp.
-001460     (base 16)		Kyocera Wireless Corp.
-				10300 Campus Point Drive
-				San Diego  CA  92121
-				US
-
-00-13-F5   (hex)		Akimbi Systems
-0013F5     (base 16)		Akimbi Systems
-				1400 Fashion Island Blvd
-				San Mateo  CA  94404
-				US
-
-00-13-F1   (hex)		AMOD Technology Co., Ltd.
-0013F1     (base 16)		AMOD Technology Co., Ltd.
-				2F., No. 16, Prosperity Road II
-				Hsinchu,    30078
-				TW
-
-00-13-E7   (hex)		Halcro
-0013E7     (base 16)		Halcro
-				Suite 1, Level 1
-				Wayville  South Australia  5034
-				AU
-
-00-13-EA   (hex)		Kamstrup A/S
-0013EA     (base 16)		Kamstrup A/S
-				Industrivej 28
-				Stilling    8660
-				DK
-
-00-13-E1   (hex)		Iprobe AB
-0013E1     (base 16)		Iprobe AB
-				Finlandsgatan 12
-				  Kista  SE-16474
-				SE
-
-00-13-E3   (hex)		CoVi Technologies, Inc.
-0013E3     (base 16)		CoVi Technologies, Inc.
-				6300 Bridgepoint Parkway
-				Austin  Texas  78730
-				US
-
-00-13-E4   (hex)		YANGJAE SYSTEMS CORP.
-0013E4     (base 16)		YANGJAE SYSTEMS CORP.
-				1202. HANSHIN IT TOWER Guro-3Dong,
-				  Seoul  152-848
-				KR
-
-00-13-C1   (hex)		Asoka USA Corporation
-0013C1     (base 16)		Asoka USA Corporation
-				558 Pilgrim Drive
-				Foster City  CA  94404
-				US
-
-00-13-C0   (hex)		Trix Tecnologia Ltda.
-0013C0     (base 16)		Trix Tecnologia Ltda.
-				Rua da Paz, 1957 - Chácara Santo Antônio
-				São Paulo    04713-002
-				BR
-
-00-14-1F   (hex)		SunKwang Electronics Co., Ltd
-00141F     (base 16)		SunKwang Electronics Co., Ltd
-				#365(Techno-park, 301 dong, 901 ho,) Samjung-dong, Ohjung-ku,
-				Bucheon-shi  Kyunggi-do  421-809
-				KR
-
-00-14-12   (hex)		S-TEC electronics AG
-001412     (base 16)		S-TEC electronics AG
-				Industriestrasse 49
-				  Zug  6300
-				CH
-
-00-14-11   (hex)		Deutschmann Automation GmbH & Co. KG
-001411     (base 16)		Deutschmann Automation GmbH & Co. KG
-				Carl-Zeiss-Str. 8
-				Bad Camberg    D - 65520
-				DE
-
-00-14-05   (hex)		OpenIB, Inc.
-001405     (base 16)		OpenIB, Inc.
-				OpenFabrics, Inc., c/o QLogic Corporation
-				Mountain View  CA  94043-4655
-				US
-
-00-45-01   (hex)		Midmark RTLS
-004501     (base 16)		Midmark RTLS
-				2600 Miller Creek Road
-				Traverse City  MI  49684
-				US
-
-00-14-03   (hex)		Renasis, LLC
-001403     (base 16)		Renasis, LLC
-				1530 N. State St.
-				Lehi  UT  84043
-				US
-
-00-14-01   (hex)		Rivertree Networks Corp.
-001401     (base 16)		Rivertree Networks Corp.
-				R#304, K-Center, 1591-9
-				Anyang-si  Kyunggi-do  431-815
-				KR
-
-00-13-D9   (hex)		Matrix Product Development, Inc.
-0013D9     (base 16)		Matrix Product Development, Inc.
-				13 North Bird Street
-				Sun Prairie  WI  53590
-				US
-
-00-13-CC   (hex)		Tall Maple Systems
-0013CC     (base 16)		Tall Maple Systems
-				85 Saratoga Ave Suite 139
-				Santa Clara  CA  95051
-				US
-
-00-13-94   (hex)		Infohand Co.,Ltd
-001394     (base 16)		Infohand Co.,Ltd
-				Kranz-Techno #1207, 5442-1, Sangdaewon-dong, Jungwon-gu
-				Seongnam-si  Gyeonggi-do  462-819
-				KR
-
-00-13-89   (hex)		Redes de Telefonía Móvil S.A.
-001389     (base 16)		Redes de Telefonía Móvil S.A.
-				C/Puerto de la Morcuera 14 B4
-				Leganés  Madrid  28918
-				ES
-
-00-13-8C   (hex)		Kumyoung.Co.Ltd
-00138C     (base 16)		Kumyoung.Co.Ltd
-				Seoul KY building, 40-17 Hangang Ro, 3Ga, Youngsan-Gu
-				Seoul    140-880
-				KR
-
-00-13-A1   (hex)		Crow Electronic Engeneering
-0013A1     (base 16)		Crow Electronic Engeneering
-				12 Kinneret st.
-				Airport City    
-				IL
-
-00-13-9C   (hex)		Exavera Technologies, Inc.
-00139C     (base 16)		Exavera Technologies, Inc.
-				195 New Hampshire Avenue
-				Portsmouth  NH  03801
-				US
-
-00-13-55   (hex)		TOMEN Cyber-business Solutions, Inc.
-001355     (base 16)		TOMEN Cyber-business Solutions, Inc.
-				2-11-19 Kohnan
-				TOKYO    108-0075
-				JP
-
-00-13-57   (hex)		Soyal Technology Co., Ltd.
-001357     (base 16)		Soyal Technology Co., Ltd.
-				10F, No. 27, Lane 169, Kangning St., Shijr City,
-				Taipei    221
-				TW
-
-00-13-60   (hex)		Cisco Systems, Inc
-001360     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-13-8E   (hex)		FOAB Elektronik AB
-00138E     (base 16)		FOAB Elektronik AB
-				Sankt Jorgens Vag 8
-				Gothenburg    422 49
-				SE
-
-00-13-76   (hex)		Tabor Electronics Ltd.
-001376     (base 16)		Tabor Electronics Ltd.
-				9 Hatatsia St.
-				Tel Hanan    20302
-				IL
-
-00-13-5D   (hex)		NTTPC Communications, Inc.
-00135D     (base 16)		NTTPC Communications, Inc.
-				3-25 Kanda Jinbo-cho
-				Chiyoda-ku  Tokyo  101-0051
-				JP
-
-00-13-52   (hex)		Naztec, Inc.
-001352     (base 16)		Naztec, Inc.
-				820 Park Two Dr.
-				Sugar Land  TX  77478
-				US
-
-00-13-6C   (hex)		TomTom
-00136C     (base 16)		TomTom
-				Oosterdoksstraat 114
-				1011 DK  Amsterdam  
-				NL
-
-00-13-64   (hex)		Paradigm Technology Inc..
-001364     (base 16)		Paradigm Technology Inc..
-				3F, No. 285, Sec.2, Ti-Ding Blvd Nei-Hu,
-				Taipei    114
-				TW
-
-00-13-6B   (hex)		E-TEC
-00136B     (base 16)		E-TEC
-				2-17-14-503 Hakataekimae
-				Fukuoka  Fukuokaken  812-0011
-				JP
-
-00-13-80   (hex)		Cisco Systems, Inc
-001380     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-13-85   (hex)		Add-On Technology Co., LTD.
-001385     (base 16)		Add-On Technology Co., LTD.
-				1F, No.11, Lane 206, Da-An Road Sec. 1,
-				Taipei    106
-				TW
-
-00-13-B3   (hex)		Ecom Communications Technology Co., Ltd.
-0013B3     (base 16)		Ecom Communications Technology Co., Ltd.
-				Floor 7, Machinery Industry Building, No.22,
-				Beijing    
-				CN
-
-00-13-B7   (hex)		Scantech ID
-0013B7     (base 16)		Scantech ID
-				Vanadiumweg 22
-				Amersfoort  Utrecht  3812 PZ
-				NL
-
-00-13-08   (hex)		Nuvera Fuel Cells
-001308     (base 16)		Nuvera Fuel Cells
-				129 Concord Road, #1
-				Billerica  MA  01821
-				US
-
-00-13-07   (hex)		Paravirtual Corporation
-001307     (base 16)		Paravirtual Corporation
-				2953 Bunker Hill Lane
-				Santa Clara  CA  95054
-				US
-
-00-12-FC   (hex)		PLANET System Co.,LTD
-0012FC     (base 16)		PLANET System Co.,LTD
-				4th Floor, Daehan B/D, 873-29,
-				Seoul    137-064
-				KR
-
-00-12-FE   (hex)		Lenovo Mobile Communication Technology Ltd.
-0012FE     (base 16)		Lenovo Mobile Communication Technology Ltd.
-				Xiamen Overseas Chinese Electronic Science Park,Huoju High Technology Development Zone
-				XIA MEN  FU JIAN  361009
-				CN
-
-00-12-EC   (hex)		Movacolor b.v.
-0012EC     (base 16)		Movacolor b.v.
-				Koperslagersstraat 31
-				Sneek  Friesland  8601 WL
-				NL
-
-00-12-EB   (hex)		PDH Solutions, LLC
-0012EB     (base 16)		PDH Solutions, LLC
-				34154 Bennett Rd
-				Warren  OR  97053
-				US
-
-00-13-43   (hex)		Matsushita Electronic Components (Europe) GmbH
-001343     (base 16)		Matsushita Electronic Components (Europe) GmbH
-				Zeppelinstraße 19
-				Lueneburg  Niedersachsen  21337
-				DE
-
-00-13-3E   (hex)		MetaSwitch
-00133E     (base 16)		MetaSwitch
-				1411 Harbor Bay Parkway
-				Alameda  CA  94502
-				US
-
-00-13-45   (hex)		Eaton Corporation
-001345     (base 16)		Eaton Corporation
-				4201 North 27th Street
-				Milwaukee  Wisconsin  53216
-				US
-
-00-13-47   (hex)		Red Lion Controls, LP
-001347     (base 16)		Red Lion Controls, LP
-				20 Willow Springs Circle
-				York  NY  17402
-				US
-
-00-13-2E   (hex)		ITian Coporation
-00132E     (base 16)		ITian Coporation
-				4F Youngho Bd.1605-1 Seocho-dong
-				Seoul    137-070
-				KR
-
-00-13-39   (hex)		CCV Deutschland GmbH
-001339     (base 16)		CCV Deutschland GmbH
-				Gewerbering 1
-				Au i. d. Hallertau  Bayern  84072
-				DE
-
-00-13-29   (hex)		VSST Co., LTD
-001329     (base 16)		VSST Co., LTD
-				suit 3202, Korea World Trade Center 159-1
-				Seoul    135-729
-				KR
-
-00-13-2B   (hex)		Phoenix Digital
-00132B     (base 16)		Phoenix Digital
-				7650 East Evans Rd. Bldg. A
-				Scottsdale  Az  85260
-				US
-
-00-13-0B   (hex)		Mextal B.V.
-00130B     (base 16)		Mextal B.V.
-				De Tienden 48
-				Nuenen  Noord Brabant  5674TB
-				NL
-
-00-13-0D   (hex)		GALILEO AVIONICA
-00130D     (base 16)		GALILEO AVIONICA
-				VIALE EUROPA
-				 NERVIANO  MILANO  20014
-				IT
-
-00-12-F7   (hex)		Xiamen Xinglian Electronics Co., Ltd.
-0012F7     (base 16)		Xiamen Xinglian Electronics Co., Ltd.
-				Xinglian Electronics (Xingtel) Building,Chuangxin Road,
-				Xiamen  Fujian  361006
-				CN
-
-00-13-1B   (hex)		BeCell Innovations Corp.
-00131B     (base 16)		BeCell Innovations Corp.
-				12F-9, No. 79, Shin-Tai 5th Rd Sec 1,
-				Shih-chih,  Taipei  221
-				TW
-
-00-12-E2   (hex)		ALAXALA Networks Corporation
-0012E2     (base 16)		ALAXALA Networks Corporation
-				890 Kashimada, Saiwai-ku
-				Kawasaki-shi  Kanagawa-ken  212-0058
-				JP
-
-00-12-DF   (hex)		Novomatic AG
-0012DF     (base 16)		Novomatic AG
-				Wiener Strasse 158
-				Gumpoldskirchen  Niederösterreich  A-2352
-				AT
-
-00-12-D4   (hex)		Princeton Technology, Ltd
-0012D4     (base 16)		Princeton Technology, Ltd
-				K.A.I. Bldg. 3F
-				Chiyodaku  Tokyo  101-0032
-				JP
-
-00-12-D9   (hex)		Cisco Systems, Inc
-0012D9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-12-C2   (hex)		Apex Electronics Factory
-0012C2     (base 16)		Apex Electronics Factory
-				No.3 Industrial Zone, No.4 Block,
-				Shen Zhen  Guang Dong  518103
-				CN
-
-00-12-BE   (hex)		Astek Corporation
-0012BE     (base 16)		Astek Corporation
-				5055 Corporate Plaza Drive
-				Colorado Springs  Colorado  80919
-				US
-
-00-12-E1   (hex)		Alliant Networks, Inc
-0012E1     (base 16)		Alliant Networks, Inc
-				1259 Birchwood Dr.
-				Sunnyvale  CA  94089
-				US
-
-00-12-C5   (hex)		V-Show  Technology (China) Co.,Ltd
-0012C5     (base 16)		V-Show  Technology (China) Co.,Ltd
-				7F, Tengda Plaza, No.168
-				HaiDian District,  Beijing  100089
-				CN
-
-00-12-A0   (hex)		NeoMeridian Sdn Bhd
-0012A0     (base 16)		NeoMeridian Sdn Bhd
-				3A-1, Perdana The Place
-				Bandar Damansara Perdana  Selangor  47820
-				MY
-
-00-12-86   (hex)		ENDEVCO CORP
-001286     (base 16)		ENDEVCO CORP
-				30700 RANCHO VIEJO ROAD
-				SAN JUAN CAPISTRANO  CA  92675
-				US
-
-00-12-63   (hex)		Data Voice Technologies GmbH
-001263     (base 16)		Data Voice Technologies GmbH
-				Stockholmer Allee 32b
-				Dortmund  NRW  D-44269
-				DE
-
-00-12-70   (hex)		NGES Denro Systems
-001270     (base 16)		NGES Denro Systems
-				7055 Troy Hill Dr
-				Elkridge  MD  21075
-				US
-
-00-12-6E   (hex)		Seidel Elektronik GmbH Nfg.KG
-00126E     (base 16)		Seidel Elektronik GmbH Nfg.KG
-				Frauentalerstrasse 100
-				Deutschlandsberg  Steiermark  8530
-				AT
-
-00-12-6F   (hex)		Rayson Technology Co., Ltd.
-00126F     (base 16)		Rayson Technology Co., Ltd.
-				1F No.9 R&D Rd.II, Science-Based Industrial Park
-				Hsin-Chu    300
-				TW
-
-00-12-5C   (hex)		Green Hills Software, Inc.
-00125C     (base 16)		Green Hills Software, Inc.
-				30 West Sola Street
-				Santa Barbara  CA  93101
-				US
-
-00-12-5F   (hex)		AWIND Inc.
-00125F     (base 16)		AWIND Inc.
-				17F., No. 886-5, Jungjeng Rd
-				Taipei County    235
-				TW
-
-00-12-2D   (hex)		SiNett Corporation
-00122D     (base 16)		SiNett Corporation
-				640 W. California Avenue
-				Sunnyvale  CA  94086
-				US
-
-00-12-74   (hex)		NIT lab
-001274     (base 16)		NIT lab
-				Skoriny str., 65-3
-				Minsk  Minskaya obl.  220013
-				BY
-
-00-12-53   (hex)		AudioDev AB
-001253     (base 16)		AudioDev AB
-				Kabingatan 9
-				Malmö    SE-212 39
-				SE
-
-00-12-4C   (hex)		BBWM Corporation
-00124C     (base 16)		BBWM Corporation
-				6F, No. 578, Rui Guang Road, Nei Hu
-				Taipei    114
-				TW
-
-00-12-55   (hex)		NetEffect Incorporated
-001255     (base 16)		NetEffect Incorporated
-				9211 Waterford Centre Blvd
-				Austin  Texas  78758
-				US
-
-00-12-44   (hex)		Cisco Systems, Inc
-001244     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-12-2C   (hex)		Soenen Controls N.V.
-00122C     (base 16)		Soenen Controls N.V.
-				Wijnedalestraat 190
-				Roeselare  W-VL  8800
-				BE
-
-00-12-2B   (hex)		Virbiage Pty Ltd
-00122B     (base 16)		Virbiage Pty Ltd
-				Level 4
-				Melbourne  Victoria  3000
-				AU
-
-00-12-32   (hex)		LeWiz Communications Inc.
-001232     (base 16)		LeWiz Communications Inc.
-				1376 N. 4th St. #300
-				San Jose  CA  95112
-				US
-
-00-12-27   (hex)		Franklin Electric Co., Inc.
-001227     (base 16)		Franklin Electric Co., Inc.
-				400 E. Spring Street
-				Bluffton  Indiana  46714
-				US
-
-00-12-1A   (hex)		Techno Soft Systemnics Inc.
-00121A     (base 16)		Techno Soft Systemnics Inc.
-				2-5-17, Ebisu-nishi, Naniwa-ku,
-				Osaka    556-0003
-				JP
-
-00-12-1B   (hex)		Sound Devices, LLC
-00121B     (base 16)		Sound Devices, LLC
-				300 Wengel Drive
-				Reedsburg  WI  53959
-				US
-
-00-11-DF   (hex)		Current Energy
-0011DF     (base 16)		Current Energy
-				5440 Harvest Hill, Ste 100
-				Dallas  TX  75230
-				US
-
-00-11-D7   (hex)		eWerks Inc
-0011D7     (base 16)		eWerks Inc
-				420-2166 Mountain Grove Ave
-				Burlington  Ontario  L7P4X4
-				CA
-
-00-12-04   (hex)		u10 Networks, Inc.
-001204     (base 16)		u10 Networks, Inc.
-				2-2-14 Kakinokizaka
-				Meguro  Tokyo  152-0022
-				JP
-
-00-12-0A   (hex)		Emerson Climate Technologies GmbH
-00120A     (base 16)		Emerson Climate Technologies GmbH
-				Heerstrasse 111
-				Waiblingen  BW  71332
-				DE
-
-00-12-08   (hex)		Gantner Instruments GmbH
-001208     (base 16)		Gantner Instruments GmbH
-				Montafonerstrasse 8
-				Schruns  Vorarlberg  6780
-				AT
-
-00-12-01   (hex)		Cisco Systems, Inc
-001201     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-EE   (hex)		Estari, Inc.
-0011EE     (base 16)		Estari, Inc.
-				1800 Paxton St
-				Harrisburg  PA  17104
-				US
-
-00-12-00   (hex)		Cisco Systems, Inc
-001200     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-DE   (hex)		EURILOGIC
-0011DE     (base 16)		EURILOGIC
-				Centrale Parc Bât 7
-				Chatenay Malabry    92298
-				FR
-
-00-11-C8   (hex)		Powercom Co., Ltd.
-0011C8     (base 16)		Powercom Co., Ltd.
-				8F, No. 246, Lien Chen Rd.
-				Chung Ho  Taipei  235
-				TW
-
-00-11-B8   (hex)		Liebherr - Elektronik GmbH
-0011B8     (base 16)		Liebherr - Elektronik GmbH
-				Peter - Dornier - Strasse 11
-				Lindau (Bodensee)  Bavaria  88131
-				DE
-
-00-11-B4   (hex)		Westermo Network Technologies AB
-0011B4     (base 16)		Westermo Network Technologies AB
-				Stora Sundby
-				Sweden    SE-640 40
-				SE
-
-00-11-78   (hex)		Chiron Technology Ltd
-001178     (base 16)		Chiron Technology Ltd
-				Wyvols Court
-				Reading  Berkshire  RG7 1WY
-				GB
-
-00-11-6A   (hex)		Domo Ltd
-00116A     (base 16)		Domo Ltd
-				Wessex House
-				Eastleigh  Hampshire  SO50 9FD
-				GB
-
-00-11-93   (hex)		Cisco Systems, Inc
-001193     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-8C   (hex)		Missouri Department of Transportation
-00118C     (base 16)		Missouri Department of Transportation
-				P.O. Box 270
-				Jefferson City  Missouri  65102
-				US
-
-00-11-8E   (hex)		Halytech Mace
-00118E     (base 16)		Halytech Mace
-				Unit 11, 22 Lexington Drive
-				Baulkham Hills  NSW  2153
-				AU
-
-00-11-86   (hex)		Prime Systems, Inc.
-001186     (base 16)		Prime Systems, Inc.
-				16267-333
-				Suwa-gun Hara-mura  Nagano  391-0100
-				JP
-
-00-11-83   (hex)		Datalogic ADC, Inc.
-001183     (base 16)		Datalogic ADC, Inc.
-				959 Terry St
-				Eugene  OR  97402
-				US
-
-00-11-7D   (hex)		ZMD America, Inc.
-00117D     (base 16)		ZMD America, Inc.
-				15373 Innovation Drive
-				San Dieo  CA  92128
-				US
-
-00-11-7F   (hex)		Neotune Information Technology Corporation,.LTD
-00117F     (base 16)		Neotune Information Technology Corporation,.LTD
-				1703#  No.737  North of Caoxi Rd.
-				Shanghai    200030
-				CN
-
-00-11-9D   (hex)		Diginfo Technology Corporation
-00119D     (base 16)		Diginfo Technology Corporation
-				10Fl., No.82, Fu Hsing North Road
-				Taipei    106
-				TW
-
-00-11-9C   (hex)		EP&T Energy
-00119C     (base 16)		EP&T Energy
-				358 Eastern Valley Way
-				Sydney  NSW  2067
-				AU
-
-00-11-9A   (hex)		Alkeria srl
-00119A     (base 16)		Alkeria srl
-				25 Via Giuntini
-				Navacchio (PI)    I-56023
-				IT
-
-00-11-C1   (hex)		4P MOBILE DATA PROCESSING
-0011C1     (base 16)		4P MOBILE DATA PROCESSING
-				VIALE REGIONE VENETO 26
-				PADOVA  PD  35127
-				IT
-
-00-11-B2   (hex)		2001 Technology Inc.
-0011B2     (base 16)		2001 Technology Inc.
-				7F-10, 79 Hsin Tai 5th. Rd. Sec.1
-				Hsi Chih  Taipei County  221
-				TW
-
-00-11-AF   (hex)		Medialink-i,Inc
-0011AF     (base 16)		Medialink-i,Inc
-				1-9-10 Hamamatsu-Cho
-				Minato-Ku  Tokyo  105-0013
-				JP
-
-00-11-5E   (hex)		ProMinent Dosiertechnik GmbH
-00115E     (base 16)		ProMinent Dosiertechnik GmbH
-				Im Schumachergewann 5-11
-				Heidelberg  BW  69123
-				DE
-
-00-11-7C   (hex)		e-zy.net
-00117C     (base 16)		e-zy.net
-				Smirnis 14
-				Veria  Imathia  59100
-				GR
-
-00-11-39   (hex)		STOEBER ANTRIEBSTECHNIK GmbH + Co. KG.
-001139     (base 16)		STOEBER ANTRIEBSTECHNIK GmbH + Co. KG.
-				Kieselbronner Str. 12
-				Pforzheim    75177
-				DE
-
-00-11-3E   (hex)		JL Corporation
-00113E     (base 16)		JL Corporation
-				4-4-17 SUGE
-				KAWASAKI-CITY  KANAGAWA-KEN  214-0001
-				JP
-
-00-11-38   (hex)		TAISHIN CO., LTD.
-001138     (base 16)		TAISHIN CO., LTD.
-				200-7 Nakano
-				Nakano  Nagano  383-0013
-				JP
-
-00-11-36   (hex)		Goodrich Sensor Systems
-001136     (base 16)		Goodrich Sensor Systems
-				14300 Judicial Road
-				Burnsville  Minnesota  55306-4898
-				US
-
-00-11-4B   (hex)		Francotyp-Postalia GmbH
-00114B     (base 16)		Francotyp-Postalia GmbH
-				Triftweg 21-26
-				Birkenwerder  Brandenburg  16547
-				DE
-
-00-11-47   (hex)		Secom-Industry co.LTD.
-001147     (base 16)		Secom-Industry co.LTD.
-				Fukuoka Kuramoto Ichihonki 3-3
-				Shiroishi  Miyagi  989-0295
-				JP
-
-00-11-4A   (hex)		KAYABA INDUSTRY Co,.Ltd.
-00114A     (base 16)		KAYABA INDUSTRY Co,.Ltd.
-				World Trade Center Bldg., 4-1
-				Minato-ku,  Tokyo Meto.  105-6111
-				JP
-
-00-11-42   (hex)		e-SMARTCOM  INC.
-001142     (base 16)		e-SMARTCOM  INC.
-				3F, 216, Imok-Dong
-				Suwon  Kyoungki-Do  440-310
-				KR
-
-00-11-20   (hex)		Cisco Systems, Inc
-001120     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-18   (hex)		BLX IC Design Corp., Ltd.
-001118     (base 16)		BLX IC Design Corp., Ltd.
-				Rm 1006, Quantum Plaza
-				Beijing    100083
-				CN
-
-00-11-07   (hex)		RGB Networks Inc.
-001107     (base 16)		RGB Networks Inc.
-				2929 Campus Drive
-				San Mateo  CA  94403
-				US
-
-00-11-08   (hex)		Orbital Data Corporation
-001108     (base 16)		Orbital Data Corporation
-				1900 S. Norfolk St. Ste 320
-				San Mateo  CA  94403
-				US
-
-00-11-0C   (hex)		Atmark Techno, Inc.
-00110C     (base 16)		Atmark Techno, Inc.
-				2F SD BLDG, 2-2-3-14 Atsubetsu-nishi, Atsubetsu-ku
-				Sapporo  Hokkaido  004-0062
-				JP
-
-00-11-4D   (hex)		Atsumi Electric Co.,LTD.
-00114D     (base 16)		Atsumi Electric Co.,LTD.
-				4-2-2 Shin-Miyakoda, Kita-ku
-				Hamamatsu  Shizuoka  431-2103
-				JP
-
-00-11-30   (hex)		Allied Telesis (Hong Kong) Ltd.
-001130     (base 16)		Allied Telesis (Hong Kong) Ltd.
-				Room F, 3/F, Yeung Yiu Chong (no. 8) Industrial building,
-				    
-				HK
-
-00-11-29   (hex)		Paradise Datacom Ltd.
-001129     (base 16)		Paradise Datacom Ltd.
-				1 Wheaton Road
-				Witham  Essex UK  CM8 1UJ
-				GB
-
-00-11-57   (hex)		Oki Electric Industry Co., Ltd.
-001157     (base 16)		Oki Electric Industry Co., Ltd.
-				1-7-12 Toranomon
-				Tokyo 105-8460    
-				JP
-
-00-0F-D9   (hex)		FlexDSL Telecommunications AG
-000FD9     (base 16)		FlexDSL Telecommunications AG
-				Haus zum Engel
-				Altendorf  Schwyz  8852
-				CH
-
-00-0F-D0   (hex)		ASTRI
-000FD0     (base 16)		ASTRI
-				18/F Tower 6, Gateway, 9 Canton Rd
-				    
-				HK
-
-00-0F-CA   (hex)		A-JIN TECHLINE CO, LTD
-000FCA     (base 16)		A-JIN TECHLINE CO, LTD
-				327-35
-				Kumchun-Ku  Seoul  153-802
-				KR
-
-00-0F-EC   (hex)		ARKUS Inc.
-000FEC     (base 16)		ARKUS Inc.
-				3-8 Chuo-cho
-				3-8 Noda, Kitaa-Ku    700-0971
-				JP
-
-00-0F-ED   (hex)		Anam Electronics Co., Ltd
-000FED     (base 16)		Anam Electronics Co., Ltd
-				645 Sungkok-dong
-				Ansan-city  Kyungki-do  425-834
-				KR
-
-00-0F-E5   (hex)		MERCURY SECURITY CORPORATION
-000FE5     (base 16)		MERCURY SECURITY CORPORATION
-				2355 MIRA MAR AVE.
-				LONG BEACH  CA  90815
-				US
-
-00-0F-AE   (hex)		E2O Communications
-000FAE     (base 16)		E2O Communications
-				52 Serangoon North Ave 4
-				    555853
-				SG
-
-00-0F-B1   (hex)		Cognio Inc.
-000FB1     (base 16)		Cognio Inc.
-				101 Orchard Ridge Drive
-				Gaithersburg  MD  20878
-				US
-
-00-0F-A7   (hex)		Raptor Networks Technology
-000FA7     (base 16)		Raptor Networks Technology
-				65 Enterprise Road
-				Aliso Viejo  CA  92656
-				US
-
-00-0F-F0   (hex)		Sunray Co. Ltd.
-000FF0     (base 16)		Sunray Co. Ltd.
-				Osawa2-5-5 Mitaka
-				  Tokyo  181-0015
-				JP
-
-00-11-03   (hex)		kawamura electric inc.
-001103     (base 16)		kawamura electric inc.
-				3-86 akatsuki-cho
-				seto  aichi  489-0071
-				JP
-
-00-0F-DD   (hex)		SORDIN AB
-000FDD     (base 16)		SORDIN AB
-				Rorlaggarvagen 8
-				Varnamo  Smaland  S-331 34
-				SE
-
-00-0F-C3   (hex)		PalmPalm Technology, Inc.
-000FC3     (base 16)		PalmPalm Technology, Inc.
-				Samsung-dong 156-3, Gangnam-gu
-				Seoul    135-091
-				KR
-
-00-0F-88   (hex)		AMETEK, Inc.
-000F88     (base 16)		AMETEK, Inc.
-				150 Freeport Road
-				Pittsburgh  PA  15238
-				US
-
-00-0F-7E   (hex)		Ablerex Electronics Co., LTD
-000F7E     (base 16)		Ablerex Electronics Co., LTD
-				1F, No.3 Lane 7, Paokao Rd.
-				Hsintien  Taipei Hsien  23114
-				TW
-
-00-0F-83   (hex)		Brainium Technologies Inc.
-000F83     (base 16)		Brainium Technologies Inc.
-				#201 - 11491 Kingston Street
-				Maple Ridge  BC  V2X 0Y6
-				CA
-
-00-0F-84   (hex)		Astute Networks, Inc.
-000F84     (base 16)		Astute Networks, Inc.
-				15015 Ave of Science
-				San Diego  CA  92128
-				US
-
-00-0F-5C   (hex)		Day One Digital Media Limited
-000F5C     (base 16)		Day One Digital Media Limited
-				197 Archers Rd
-				Auckland  North Island  1310
-				NZ
-
-00-0F-52   (hex)		YORK Refrigeration, Marine & Controls
-000F52     (base 16)		YORK Refrigeration, Marine & Controls
-				Jens Juulsvej 28
-				Viby J  DK  8362
-				DK
-
-00-0F-4C   (hex)		Elextech INC
-000F4C     (base 16)		Elextech INC
-				554-2, Gasan-Dong, Gumcheon-Gu
-				Seoul    153-023
-				KR
-
-00-0F-93   (hex)		Landis+Gyr Ltd.
-000F93     (base 16)		Landis+Gyr Ltd.
-				Feldstrasse 1
-				Zug    CH-6301
-				CH
-
-00-0F-94   (hex)		Genexis BV
-000F94     (base 16)		Genexis BV
-				Lodewijktraat 1A
-				5652 AC  Eindhoven    
-				SE
-
-00-0F-6C   (hex)		ADDI-DATA GmbH
-000F6C     (base 16)		ADDI-DATA GmbH
-				Airport Boulevard B210
-				RHEINMUENSTER  BW  77836
-				DE
-
-00-0F-8F   (hex)		Cisco Systems, Inc
-000F8F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0F-7D   (hex)		Xirrus
-000F7D     (base 16)		Xirrus
-				310 North Westlake Blvd.
-				Westlake Village  CA  91362
-				US
-
-00-0F-76   (hex)		Digital Keystone, Inc.
-000F76     (base 16)		Digital Keystone, Inc.
-				1975 El Camino Real
-				Mountain View  CA  94040
-				US
-
-00-0F-9E   (hex)		Murrelektronik GmbH
-000F9E     (base 16)		Murrelektronik GmbH
-				Falkenstraße 3
-				Oppenweiler  Baden-Württemberg  71570
-				DE
-
-00-0F-79   (hex)		Bluetooth Interest Group Inc.
-000F79     (base 16)		Bluetooth Interest Group Inc.
-				4F, No. 9, Alley 2, Lane 35, Ji-Hu Rd.
-				Taipei    114
-				TW
-
-00-0F-17   (hex)		Insta Elektro GmbH
-000F17     (base 16)		Insta Elektro GmbH
-				Hohe Steinert 10
-				Luedenscheid  NRW  58509
-				DE
-
-00-0F-1E   (hex)		Chengdu KT Electric Co.of High & New Technology
-000F1E     (base 16)		Chengdu KT Electric Co.of High & New Technology
-				No.2 Gaopeng Dong Road,High & New Development Zone
-				Chengdu  Sichuan  610041
-				CN
-
-00-0F-15   (hex)		Icotera A/S
-000F15     (base 16)		Icotera A/S
-				Vibeholms Allé 16
-				Brøndby    2605
-				DK
-
-00-0F-39   (hex)		IRIS SENSORS
-000F39     (base 16)		IRIS SENSORS
-				ZA les Ufernets
-				TOULAUD  Ardeche  F07130
-				FR
-
-00-0F-3E   (hex)		CardioNet, Inc
-000F3E     (base 16)		CardioNet, Inc
-				1010 Second Avenue
-				San Diego  CA  92101
-				US
-
-00-0F-3F   (hex)		Big Bear Networks
-000F3F     (base 16)		Big Bear Networks
-				345 Potrero Ave
-				Sunny Vale  California  94085
-				US
-
-00-0F-35   (hex)		Cisco Systems, Inc
-000F35     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0F-36   (hex)		Accurate Techhnologies, Inc.
-000F36     (base 16)		Accurate Techhnologies, Inc.
-				47199 Cartier Dr.
-				Wixom  Michigan  48393
-				US
-
-00-0F-28   (hex)		Itronix Corporation
-000F28     (base 16)		Itronix Corporation
-				South 801 Stevens Street
-				Spokane  WA  99204
-				US
-
-00-0F-23   (hex)		Cisco Systems, Inc
-000F23     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0F-22   (hex)		Helius, Inc.
-000F22     (base 16)		Helius, Inc.
-				333 South 520 West
-				Lindon  UT  84042
-				US
-
-00-0F-24   (hex)		Cisco Systems, Inc
-000F24     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-FC   (hex)		JTAG Technologies B.V.
-000EFC     (base 16)		JTAG Technologies B.V.
-				Boschdijk 50
-				Eindhoven  NB  5612 AN
-				NL
-
-00-0E-FE   (hex)		EndRun Technologies LLC
-000EFE     (base 16)		EndRun Technologies LLC
-				2270 Northpoint Parkway
-				Santa Rosa  CA  95407
-				US
-
-00-0F-2C   (hex)		Uplogix, Inc.
-000F2C     (base 16)		Uplogix, Inc.
-				Bldg 1, Suite 235
-				Austin  TX  78730
-				US
-
-00-0F-2B   (hex)		GREENBELL SYSTEMS
-000F2B     (base 16)		GREENBELL SYSTEMS
-				2TH Floor, Doonam Bldg, 236-11 Nonhyun-Dong, Kangnam-Ku
-				Seoul    135-010
-				KR
-
-00-0E-F2   (hex)		Infinico Corporation
-000EF2     (base 16)		Infinico Corporation
-				4F, F-1 Bldg., 1-2-12,
-				Tokyo    105-0013
-				JP
-
-00-0F-0D   (hex)		Hunt Electronic Co., Ltd.
-000F0D     (base 16)		Hunt Electronic Co., Ltd.
-				6FI, NO. 57-59, Jiun H Sien Rd., Chi Tu District
-				Keelung  Taiwan  206
-				TW
-
-00-0F-08   (hex)		Indagon Oy
-000F08     (base 16)		Indagon Oy
-				Nuijamiestentie 5 A
-				Helsinki  -  00400
-				FI
-
-00-0F-04   (hex)		cim-usa inc
-000F04     (base 16)		cim-usa inc
-				10813 nw 30th street
-				miami  florida  33172
-				US
-
-00-0F-42   (hex)		Xalyo Systems
-000F42     (base 16)		Xalyo Systems
-				Grenier 9
-				Commugny  VD  1291
-				CH
-
-00-0E-A5   (hex)		BLIP Systems
-000EA5     (base 16)		BLIP Systems
-				Haekken 2
-				Vodskov  Vester Hassing  9310
-				DK
-
-00-0E-A0   (hex)		NetKlass Technology Inc.
-000EA0     (base 16)		NetKlass Technology Inc.
-				2F-1, No.30,Tai Yuen Street,
-				Chupei City,  Hsinchu,  302
-				TW
-
-00-0E-E4   (hex)		BOE TECHNOLOGY GROUP CO.,LTD
-000EE4     (base 16)		BOE TECHNOLOGY GROUP CO.,LTD
-				No.10 Jiuxianqiao Road,Chaoyang District,Beijing,PRC
-				Beijing    100016
-				CN
-
-00-0E-DE   (hex)		REMEC, Inc.
-000EDE     (base 16)		REMEC, Inc.
-				2144 Franklin Drive NE
-				Palm Bay  Florida  32905-4021
-				US
-
-00-0E-9C   (hex)		Benchmark Electronics 
-000E9C     (base 16)		Benchmark Electronics 
-				3535 Technology Drive
-				Rochester  MN  55901
-				US
-
-00-0E-9A   (hex)		BOE TECHNOLOGY GROUP CO.,LTD
-000E9A     (base 16)		BOE TECHNOLOGY GROUP CO.,LTD
-				No.10 Jiuxianqiao Road,Chaoyang District,Beijing,PRC
-				Beijing    100016
-				CN
-
-00-0E-90   (hex)		PONICO CORP.
-000E90     (base 16)		PONICO CORP.
-				602, Ace Twin Tower 1, 212-1 Guro-dong
-				Gurogu  Seoul  152-766
-				KR
-
-00-0E-8A   (hex)		Avara Technologies Pty. Ltd.
-000E8A     (base 16)		Avara Technologies Pty. Ltd.
-				9 Business Park Drive
-				Notting Hill  Victoria  3168
-				AU
-
-00-0E-B8   (hex)		Iiga co.,Ltd
-000EB8     (base 16)		Iiga co.,Ltd
-				3F TKBldg. 3-5-2 Sotokanda
-				Chiyoda-Ku  Tokyo  101-0021
-				JP
-
-00-0E-BE   (hex)		B&B Electronics Manufacturing Co.
-000EBE     (base 16)		B&B Electronics Manufacturing Co.
-				707 Dayton Road
-				Ottawa  Ilinois  61350
-				US
-
-00-0E-BB   (hex)		Everbee Networks
-000EBB     (base 16)		Everbee Networks
-				41, Boulevard des Capucines
-				Paris    75002
-				FR
-
-00-0E-CE   (hex)		S.I.T.T.I. S.p.A.
-000ECE     (base 16)		S.I.T.T.I. S.p.A.
-				Via Cadorna 69
-				Vimodrone  Milan  I-20090
-				IT
-
-00-0E-D4   (hex)		CRESITT INDUSTRIE
-000ED4     (base 16)		CRESITT INDUSTRIE
-				12 rue de Blois
-				Orleans  BP 6744  45067  cedex
-				FR
-
-00-0E-D6   (hex)		Cisco Systems, Inc
-000ED6     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-D8   (hex)		Positron Access Solutions Corp
-000ED8     (base 16)		Positron Access Solutions Corp
-				5101 Buchan Street
-				  Montreal, Quebec  H4P 2R9
-				CA
-
-00-0E-D1   (hex)		Osaka Micro Computer.
-000ED1     (base 16)		Osaka Micro Computer.
-				Isonokamicyo 3-11-7
-				Kishiwada  Osaka  5960001
-				JP
-
-00-0E-B0   (hex)		Solutions Radio BV
-000EB0     (base 16)		Solutions Radio BV
-				Prinsegracht 82
-				The Hague  ZH  2512 GC
-				NL
-
-00-0E-83   (hex)		Cisco Systems, Inc
-000E83     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-81   (hex)		Devicescape Software, Inc.
-000E81     (base 16)		Devicescape Software, Inc.
-				1000 Marina Blvd
-				Brisbane  CA  94005
-				US
-
-00-0E-88   (hex)		VIDEOTRON CORP.
-000E88     (base 16)		VIDEOTRON CORP.
-				17-16,2-CHOME
-				HACHIOJI  TOKYO  193-0835
-				JP
-
-00-0E-86   (hex)		Alcatel North America
-000E86     (base 16)		Alcatel North America
-				2301 Sugar Bush Road
-				Raleigh  NC  27612
-				US
-
-00-0E-69   (hex)		China Electric Power Research Institute
-000E69     (base 16)		China Electric Power Research Institute
-				No.15 Xiaoying East Road,Qinghe,Beijing,China
-				Beijing    100085
-				CN
-
-00-0E-61   (hex)		MICROTROL LIMITED
-000E61     (base 16)		MICROTROL LIMITED
-				16 ELGAR BUSINESS CENTRE
-				HALLOW  WORCESTER  WR2 6NJ
-				GB
-
-00-0E-64   (hex)		Elphel, Inc
-000E64     (base 16)		Elphel, Inc
-				3200 S. Elpmer St.
-				Magna  UT  84044
-				US
-
-00-0E-49   (hex)		Forsway Scandinavia AB
-000E49     (base 16)		Forsway Scandinavia AB
-				Kanikegränd 3B
-				541 34  Skövde  
-				SE
-
-00-0E-42   (hex)		Motic Incoporation Ltd.
-000E42     (base 16)		Motic Incoporation Ltd.
-				Room 2907-8, Windsor  House
-				Hong Kong    
-				CN
-
-00-0E-3D   (hex)		Televic N.V.
-000E3D     (base 16)		Televic N.V.
-				Leo Bekaertlaan 1
-				Izegem    8870
-				BE
-
-00-0E-39   (hex)		Cisco Systems, Inc
-000E39     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0E-34   (hex)		NexGen City, LP
-000E34     (base 16)		NexGen City, LP
-				1680 Glenville
-				Richardson  Texas  75081
-				US
-
-00-0E-6A   (hex)		3Com Ltd
-000E6A     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-0E-5A   (hex)		TELEFIELD inc.
-000E5A     (base 16)		TELEFIELD inc.
-				3F, Kumbo Bldg, 2-9, Seokchon-Dong
-				Seoul    138-190
-				KR
-
-00-0E-5D   (hex)		Triple Play Technologies A/S
-000E5D     (base 16)		Triple Play Technologies A/S
-				Herstedvang 8
-				Albertslund    DK-2620
-				DK
-
-00-0E-52   (hex)		Optium Corporation
-000E52     (base 16)		Optium Corporation
-				500 Horizon Dr
-				Chalfont  PA  18914
-				US
-
-00-0E-7E   (hex)		ionSign Oy
-000E7E     (base 16)		ionSign Oy
-				P.O.BOX  246
-				Rauma    
-				FI
-
-00-0E-77   (hex)		Decru, Inc.
-000E77     (base 16)		Decru, Inc.
-				275 Shoreline Dr
-				Redwood City  CA  94065
-				US
-
-00-0E-4D   (hex)		Numesa Inc.
-000E4D     (base 16)		Numesa Inc.
-				4444 Westgrove Suite 300
-				Addison  TX  75001
-				US
-
-00-0E-4C   (hex)		Bermai Inc.
-000E4C     (base 16)		Bermai Inc.
-				410 Cambridge Ave
-				Palo Alto  CA  94306
-				US
-
-00-0E-2D   (hex)		Hyundai Digital Technology Co.,Ltd.
-000E2D     (base 16)		Hyundai Digital Technology Co.,Ltd.
-				223-22, Sangdaewon-1dong, Jungwon-gu
-				Seongnam-si  Kyoungki-do  462-807
-				KR
-
-00-0E-30   (hex)		AERAS Networks, Inc.
-000E30     (base 16)		AERAS Networks, Inc.
-				P.O. Box 7330
-				Laguna Niguel  CA  92607-7330
-				US
-
-00-0E-29   (hex)		Shester Communications Inc
-000E29     (base 16)		Shester Communications Inc
-				159 S. Lincoln
-				Spokane  WA  99201
-				US
-
-00-0D-E1   (hex)		Control Products, Inc.
-000DE1     (base 16)		Control Products, Inc.
-				1724 Lake Drive West
-				Chanhassen  MN  55317
-				US
-
-00-0D-D0   (hex)		TetraTec Instruments GmbH
-000DD0     (base 16)		TetraTec Instruments GmbH
-				Gewerbestrasse 8
-				Steinenbronn  BW  71144
-				DE
-
-00-0D-D3   (hex)		SAMWOO Telecommunication Co.,Ltd.
-000DD3     (base 16)		SAMWOO Telecommunication Co.,Ltd.
-				
-				Gunpo  Kyoung-Gi  435-831
-				KR
-
-00-0D-D8   (hex)		BBN
-000DD8     (base 16)		BBN
-				7F-3,NO.186, Jian Yi Rd ., Chung Ho City
-				Taipei    235
-				TW
-
-00-0D-B3   (hex)		SDO Communication Corperation
-000DB3     (base 16)		SDO Communication Corperation
-				6F, No.112, Shin Min Street
-				Chung Ho City  Taipei Hsien  235
-				TW
-
-00-0D-AE   (hex)		SAMSUNG HEAVY INDUSTRIES CO., LTD.
-000DAE     (base 16)		SAMSUNG HEAVY INDUSTRIES CO., LTD.
-				493, Banweol-Ri, Taean-Eup
-				Hwaseong-City  Kyeonggi-Do  445-973
-				KR
-
-00-0D-B2   (hex)		Ammasso, Inc.
-000DB2     (base 16)		Ammasso, Inc.
-				345 Summer Street
-				Boston  MA  02210
-				US
-
-00-0E-0D   (hex)		Hesch Schröder GmbH
-000E0D     (base 16)		Hesch Schröder GmbH
-				Boschstraße 8
-				Neustadt  Niedersachsen  31535
-				DE
-
-00-0D-F6   (hex)		Technology Thesaurus Corp.
-000DF6     (base 16)		Technology Thesaurus Corp.
-				NO. 6, East 4th St. KEPZ
-				KAOHSIUNG    806
-				TW
-
-00-0D-FF   (hex)		CHENMING MOLD INDUSTRY CORP.
-000DFF     (base 16)		CHENMING MOLD INDUSTRY CORP.
-				2F No. 26, Lane 513, Rei Kuang Rd.
-				Taipei    114
-				TW
-
-00-0D-C7   (hex)		COSMIC ENGINEERING INC.
-000DC7     (base 16)		COSMIC ENGINEERING INC.
-				1-3-5, Nishihirayama
-				Hino-shi  TOKYO  191-0055
-				JP
-
-00-0D-C2   (hex)		Private
-000DC2     (base 16)		Private
-
-00-0D-BF   (hex)		TekTone Sound & Signal Mfg., Inc.
-000DBF     (base 16)		TekTone Sound & Signal Mfg., Inc.
-				277 Industrial Park Rd.
-				Franklin  NC  28734
-				US
-
-00-0E-19   (hex)		LogicaCMG Pty Ltd
-000E19     (base 16)		LogicaCMG Pty Ltd
-				17-19 Orion Road
-				Lane Cove  NSW  2066
-				AU
-
-00-0E-1A   (hex)		JPS Communications
-000E1A     (base 16)		JPS Communications
-				5800 Departure Drive
-				Raleigh  NC  27616
-				US
-
-00-0E-06   (hex)		Team Simoco Ltd
-000E06     (base 16)		Team Simoco Ltd
-				Field House
-				Derby  Derbyshire  DE1 1NH
-				GB
-
-00-0D-5C   (hex)		Robert Bosch GmbH, VT-ATMO
-000D5C     (base 16)		Robert Bosch GmbH, VT-ATMO
-				Wernerstrasse 51
-				Stuttgart  BW  70469
-				DE
-
-00-0D-60   (hex)		IBM Corp
-000D60     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-0D-67   (hex)		Ericsson
-000D67     (base 16)		Ericsson
-				349 Terry Fox Drive
-				Kanata  Ottawa  K2K 2V6
-				CA
-
-00-0D-5F   (hex)		Minds Inc
-000D5F     (base 16)		Minds Inc
-				1919 boul lionel bertrand
-				Boisbriand  Quebec  J7H 1N8
-				CA
-
-00-0D-98   (hex)		S.W.A.C. Schmitt-Walter Automation Consult GmbH
-000D98     (base 16)		S.W.A.C. Schmitt-Walter Automation Consult GmbH
-				Oedenpullach 1
-				Oberhaching  Bavaria  82041
-				DE
-
-00-0D-8C   (hex)		Shanghai Wedone Digital Ltd. CO.
-000D8C     (base 16)		Shanghai Wedone Digital Ltd. CO.
-				893-899 Huashan Road,
-				Shanghai    200031
-				CN
-
-00-0D-94   (hex)		AFAR Communications,Inc
-000D94     (base 16)		AFAR Communications,Inc
-				81 David Love Place
-				Santa Barbara  CA  93117
-				US
-
-00-0D-AA   (hex)		S.A.Tehnology co.,Ltd.
-000DAA     (base 16)		S.A.Tehnology co.,Ltd.
-				80-12 Yangjae 1 Dong
-				Seoul  South Korea  137-890
-				KR
-
-00-0D-A6   (hex)		Universal Switching Corporation
-000DA6     (base 16)		Universal Switching Corporation
-				7671 San Fernando Rd
-				Burbank  CA  91505-1073
-				US
-
-00-0D-8D   (hex)		Prosoft Technology, Inc
-000D8D     (base 16)		Prosoft Technology, Inc
-				5201 Truxtun Ave
-				Bakersfield  CA  93300
-				US
-
-00-0D-84   (hex)		Makus Inc.
-000D84     (base 16)		Makus Inc.
-				4F Daedo Bldg., 748-14 Yeoksam-dong
-				Kangnam-gu  Seoul  135-080
-				KR
-
-00-0D-73   (hex)		Technical Support, Inc.
-000D73     (base 16)		Technical Support, Inc.
-				11253 John Galt Blvd
-				Omaha  Nebraska  68137
-				US
-
-00-0D-69   (hex)		TMT&D Corporation
-000D69     (base 16)		TMT&D Corporation
-				2-24-1
-				Fuchu-si  Tokyo  183-0057
-				JP
-
-00-0D-A2   (hex)		Infrant Technologies, Inc.
-000DA2     (base 16)		Infrant Technologies, Inc.
-				48820 Kato Road
-				Fremont  CA  94538
-				US
-
-00-0D-68   (hex)		Vinci Systems, Inc.
-000D68     (base 16)		Vinci Systems, Inc.
-				8330 Boone Boulevard
-				Vienna  VA  22182
-				US
-
-00-0D-64   (hex)		COMAG Handels AG
-000D64     (base 16)		COMAG Handels AG
-				Zillenhardtstraße 41
-				Goeppingen  Baden-Württemberg  73037
-				DE
-
-00-0D-74   (hex)		Sand Network Systems, Inc.
-000D74     (base 16)		Sand Network Systems, Inc.
-				434 Payran Street, Suite B
-				Petaluma  CA  94952
-				US
-
-00-0D-7D   (hex)		Afco Systems
-000D7D     (base 16)		Afco Systems
-				200 Finn Court
-				Farmingdale  NY  11735
-				US
-
-00-0D-54   (hex)		3Com Ltd
-000D54     (base 16)		3Com Ltd
-				Peoplebuilding 2
-				Hemel Hempstead  Herts  HP2 4NW
-				GB
-
-00-0D-4C   (hex)		Outline Electronics Ltd.
-000D4C     (base 16)		Outline Electronics Ltd.
-				7/F Benson Tower
-				Kwun Tong  Kowloon  
-				HK
-
-00-0D-0F   (hex)		Finlux Ltd
-000D0F     (base 16)		Finlux Ltd
-				Radiomiehenkatu 3
-				Turku    FIN-20321
-				FI
-
-00-0D-12   (hex)		AXELL Corporation
-000D12     (base 16)		AXELL Corporation
-				Akihabara UDX South Wing 10F
-				Chiyoda-ku  Tokyo  101-8973
-				JP
-
-00-0D-34   (hex)		Shell International Exploration and Production, Inc.
-000D34     (base 16)		Shell International Exploration and Production, Inc.
-				BTC-Gasmer
-				Houston  TX  77001
-				US
-
-00-0D-32   (hex)		DispenseSource, Inc.
-000D32     (base 16)		DispenseSource, Inc.
-				29801 Santa Margarita Parkway
-				Rancho Santa Margarita  CA  92688
-				US
-
-00-0C-F6   (hex)		Sitecom Europe BV
-000CF6     (base 16)		Sitecom Europe BV
-				Sevillaweg 122
-				Rotterdam  ZH  3047 AL
-				NL
-
-00-0C-F2   (hex)		GAMESA Eólica
-000CF2     (base 16)		GAMESA Eólica
-				Polígono Agustinos. C/ A s/n.
-				Pamplona  NAVARRA  31013
-				ES
-
-00-0D-2E   (hex)		Matsushita Avionics Systems Corporation
-000D2E     (base 16)		Matsushita Avionics Systems Corporation
-				26200 Enterprise Way
-				Lake Forest  CA  92630
-				US
-
-00-0D-28   (hex)		Cisco Systems, Inc
-000D28     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0D-4D   (hex)		Ninelanes
-000D4D     (base 16)		Ninelanes
-				#405 4F Diplomatic Center
-				Seoul    1376-1
-				KR
-
-00-0D-53   (hex)		Beijing 5w Communication Corp.
-000D53     (base 16)		Beijing 5w Communication Corp.
-				NO.4,Zhong-Guan-Cun South 4 street,
-				Beijing    100080
-				CN
-
-00-0C-FC   (hex)		S2io Technologies Corp
-000CFC     (base 16)		S2io Technologies Corp
-				505 March Rd
-				Ottawa  Ontario  K2K 2M5
-				CA
-
-00-0D-38   (hex)		NISSIN INC.
-000D38     (base 16)		NISSIN INC.
-				10-7 KAMEI-CHO
-				TAKARAZUKA  HYOGO  665-0047
-				JP
-
-00-0D-15   (hex)		Voipac s.r.o.
-000D15     (base 16)		Voipac s.r.o.
-				Ul. Janka Krala 3
-				Trencin    911 01
-				SK
-
-00-0C-A1   (hex)		SIGMACOM Co., LTD.
-000CA1     (base 16)		SIGMACOM Co., LTD.
-				DacomBldg 7F 200-12 Anyang-dong
-				    430-817
-				KR
-
-00-0C-A6   (hex)		Mintera Corporation
-000CA6     (base 16)		Mintera Corporation
-				847 Rogers Street
-				Lowell  MA  01852
-				US
-
-00-0C-C1   (hex)		Eaton Corporation
-000CC1     (base 16)		Eaton Corporation
-				2300 Badger Drive
-				Waukesha  WI  53188
-				US
-
-00-0C-8B   (hex)		Connect Tech Inc
-000C8B     (base 16)		Connect Tech Inc
-				42 Arrow Road
-				Guelph  Ontario  N1K 1S6
-				CA
-
-00-0C-90   (hex)		Octasic Inc.
-000C90     (base 16)		Octasic Inc.
-				4101 Molson St.
-				Montreal  Quebec  H1Y 3L1
-				CA
-
-00-0C-8C   (hex)		KODICOM CO.,LTD.
-000C8C     (base 16)		KODICOM CO.,LTD.
-				A-Dong 5FI.,SK Twin Tower 345-9,
-				Seoul    153-023
-				KR
-
-00-0C-C2   (hex)		ControlNet (India) Private Limited
-000CC2     (base 16)		ControlNet (India) Private Limited
-				L-44, Unit - I
-				Verna, Salcete  Goa  403 722
-				IN
-
-00-0C-94   (hex)		United Electronic Industries, Inc. (EUI)
-000C94     (base 16)		United Electronic Industries, Inc. (EUI)
-				27 Renmar Ave
-				Walpole  MA  02081
-				US
-
-00-0C-9B   (hex)		EE Solutions, Inc
-000C9B     (base 16)		EE Solutions, Inc
-				8F, No. 9, Park II Ave., Science-Based I
-				Hsin Chu    300
-				TW
-
-00-0C-E1   (hex)		The Open Group
-000CE1     (base 16)		The Open Group
-				Apex Plaza
-				Reading  Berks  RG1 1AX
-				GB
-
-00-0C-DC   (hex)		BECS Technology, Inc
-000CDC     (base 16)		BECS Technology, Inc
-				9487 Dielman Rock Island Industrial Driv
-				St. Louis  MO  63132
-				US
-
-00-0C-C5   (hex)		Nextlink Co., Ltd.
-000CC5     (base 16)		Nextlink Co., Ltd.
-				C 605, Technopark #145 Yatop-dong,
-				Seongnam-si  Bundang-gu, Gyeonggi  463-760
-				KR
-
-00-0C-DE   (hex)		ABB STOTZ-KONTAKT GmbH
-000CDE     (base 16)		ABB STOTZ-KONTAKT GmbH
-				Eppelheimer Straße 82
-				Heidelberg  Baden-Württemberg  69123
-				DE
-
-00-0C-BF   (hex)		Holy Stone Ent. Co., Ltd.
-000CBF     (base 16)		Holy Stone Ent. Co., Ltd.
-				1F, No.62, Sec.2, Huang Shan Rd.,
-				Taipei    114
-				US
-
-00-0C-4D   (hex)		Curtiss-Wright Controls Avionics & Electronics
-000C4D     (base 16)		Curtiss-Wright Controls Avionics & Electronics
-				Landscape House,
-				Churchtown,  Dublin  14
-				IE
-
-00-0C-44   (hex)		Automated Interfaces, Inc.
-000C44     (base 16)		Automated Interfaces, Inc.
-				120 Confederate Lane
-				Greer  South Carolina  29651
-				US
-
-00-0C-3B   (hex)		Orion Electric Co., Ltd.
-000C3B     (base 16)		Orion Electric Co., Ltd.
-				41-1, Iehisa-cho
-				Takefu-shi  Fukui  915-8555
-				JP
-
-00-0C-71   (hex)		Wybron, Inc
-000C71     (base 16)		Wybron, Inc
-				4830 LIst Dr
-				Colorado Springs  Colorado  80919
-				US
-
-00-0C-72   (hex)		Tempearl Industrial Co., Ltd.
-000C72     (base 16)		Tempearl Industrial Co., Ltd.
-				3-1-42 Ohzu
-				Hiroshima-shi  Hiroshima  732-0802
-				JP
-
-00-0C-78   (hex)		In-Tech Electronics Limited
-000C78     (base 16)		In-Tech Electronics Limited
-				Unit A, 13th Floor., Wing Tai Centre
-				Kwun Tong  Kowloon  
-				HK
-
-00-0C-59   (hex)		Indyme Electronics, Inc.
-000C59     (base 16)		Indyme Electronics, Inc.
-				9085 Aero Dr.
-				San Diego  CA  92123
-				US
-
-00-0C-5C   (hex)		GTN Systems B.V.
-000C5C     (base 16)		GTN Systems B.V.
-				Postbus 12236
-				Amsterdam    
-				NL
-
-00-0C-55   (hex)		Microlink Communications Inc.
-000C55     (base 16)		Microlink Communications Inc.
-				8F, 31, Hsintai Road
-				Hsinchu    302
-				TW
-
-00-0C-52   (hex)		Roll Systems Inc.
-000C52     (base 16)		Roll Systems Inc.
-				53 Third Avenue
-				Burlington  MA  01803
-				US
-
-00-0C-74   (hex)		RIVERTEC CORPORATION
-000C74     (base 16)		RIVERTEC CORPORATION
-				882-5 MIYAGASAKI
-				IMABARI  EHIME  799-1537
-				JP
-
-00-0C-67   (hex)		OYO ELECTRIC CO.,LTD
-000C67     (base 16)		OYO ELECTRIC CO.,LTD
-				63-1 Nakamichi Omote
-				Joyo  Kyoto  610-0101
-				JP
-
-00-0C-2E   (hex)		Openet information technology(shenzhen) Co., Ltd.
-000C2E     (base 16)		Openet information technology(shenzhen) Co., Ltd.
-				2/F,A tower,international tech-innovatio
-				shenzhen  guangdong  518057
-				CN
-
-00-0C-2C   (hex)		Enwiser Inc.
-000C2C     (base 16)		Enwiser Inc.
-				4F, Cheongseok B/D
-				Seoul  Seoul  135-010
-				KR
-
-00-0C-28   (hex)		RIFATRON
-000C28     (base 16)		RIFATRON
-				9th FL, SHINTAEYANG BLDG
-				SEOUL  SEOCHO-GU  137-041
-				KR
-
-00-0C-3D   (hex)		Glsystech Co., Ltd.
-000C3D     (base 16)		Glsystech Co., Ltd.
-				Song Bo B/D 3F
-				Seoul    
-				KR
-
-00-0C-2F   (hex)		SeorimTechnology Co.,Ltd.
-000C2F     (base 16)		SeorimTechnology Co.,Ltd.
-				2F DIPLOMATIC CENTER B/D 1376-1 SEOCHO2-
-				SEOUL    137-072
-				US
-
-00-0C-31   (hex)		Cisco Systems, Inc
-000C31     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0C-53   (hex)		Private
-000C53     (base 16)		Private
-
-00-0C-48   (hex)		QoStek Corporation
-000C48     (base 16)		QoStek Corporation
-				7F, 22, Taiyuen Street
-				Chupei  Hsinchu Hsien  302
-				TW
-
-00-0C-63   (hex)		Zenith Electronics Corporation
-000C63     (base 16)		Zenith Electronics Corporation
-				2000 Millbrook Drive
-				Lincolnshire  Illinois  60069
-				US
-
-00-0B-BB   (hex)		Etin Systems Co., Ltd
-000BBB     (base 16)		Etin Systems Co., Ltd
-				12F, IT Venture Tower,
-				Seoul    138-803
-				KR
-
-00-0B-BC   (hex)		En Garde Systems, Inc.
-000BBC     (base 16)		En Garde Systems, Inc.
-				2101 White Cloud St. NE
-				Albuquerque  NM  87112
-				US
-
-00-0B-B1   (hex)		Super Star Technology Co., Ltd.
-000BB1     (base 16)		Super Star Technology Co., Ltd.
-				No. 7 Lane 306,Sec. 2,Tai-Lin Rd.
-				Taipei Hsien    243
-				US
-
-00-0B-BF   (hex)		Cisco Systems, Inc
-000BBF     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-AD   (hex)		PC-PoS Inc.
-000BAD     (base 16)		PC-PoS Inc.
-				309 Commissioners Road West
-				London  Ontario  N6J 1Y4
-				CA
-
-00-0B-A0   (hex)		T&L Information Inc.
-000BA0     (base 16)		T&L Information Inc.
-				898-44 Hokye-Dong, Dongan-Gu
-				Anyang  Kyungki-Do  431-836
-				KR
-
-00-0C-17   (hex)		AJA Video Systems Inc
-000C17     (base 16)		AJA Video Systems Inc
-				180 Litton Drive
-				Grass Valley  CA  95945
-				US
-
-00-0C-11   (hex)		NIPPON DEMPA CO.,LTD.
-000C11     (base 16)		NIPPON DEMPA CO.,LTD.
-				1-4-8
-				kakegawa city  shizuoka pref.  436-0028
-				JP
-
-00-0C-14   (hex)		Diagnostic Instruments, Inc.
-000C14     (base 16)		Diagnostic Instruments, Inc.
-				6540 Burroughs
-				Sterling Heights  MI  48314
-				US
-
-00-0B-B5   (hex)		nStor Technologies, Inc.
-000BB5     (base 16)		nStor Technologies, Inc.
-				100 Technology Park
-				Lake Mary  FL  32746
-				US
-
-00-0B-B9   (hex)		Imsys AB
-000BB9     (base 16)		Imsys AB
-				Johanneslundsvagen 3
-				Upplands Vasby    SE-19461
-				SE
-
-00-0C-21   (hex)		Faculty of Science and Technology, Keio University
-000C21     (base 16)		Faculty of Science and Technology, Keio University
-				3-14-1 Hiyoshi, Kohoku-ku
-				Yokohama  Kanagawa  223-8522
-				JP
-
-00-0C-1B   (hex)		ORACOM Co, Ltd.
-000C1B     (base 16)		ORACOM Co, Ltd.
-				3rd Fl, A-Sung Bldg, 999-3
-				Seoul    135-280
-				KR
-
-00-0B-C9   (hex)		Electroline Equipment
-000BC9     (base 16)		Electroline Equipment
-				8265 boul. St-Michel
-				Montreal  Quebec  H1Z 3E4
-				CA
-
-00-0B-C2   (hex)		Corinex Communication Corp.
-000BC2     (base 16)		Corinex Communication Corp.
-				#308 1168 Hamilton Street
-				Vancouver  B.C.  V6B 2S2
-				US
-
-00-0B-F7   (hex)		NIDEK CO.,LTD
-000BF7     (base 16)		NIDEK CO.,LTD
-				34-14 Maehama
-				Gamagori  Aich  443-0038
-				JP
-
-00-0C-00   (hex)		BEB Industrie-Elektronik AG
-000C00     (base 16)		BEB Industrie-Elektronik AG
-				Progressastrasse 31
-				Oberburg  BE  3414
-				CH
-
-00-0B-F3   (hex)		BAE SYSTEMS
-000BF3     (base 16)		BAE SYSTEMS
-				6500 Tracor Lane
-				Austin  Texas  78725
-				US
-
-00-0B-ED   (hex)		ELM Inc.
-000BED     (base 16)		ELM Inc.
-				2398 Kasedamiyahara
-				Minamisatsuma  Kagoshima  897-1124
-				JP
-
-00-0B-91   (hex)		Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH
-000B91     (base 16)		Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH
-				Tiniusstraße 12-15
-				Berlin    D-13089
-				DE
-
-00-0B-97   (hex)		Matsushita Electric Industrial Co.,Ltd.
-000B97     (base 16)		Matsushita Electric Industrial Co.,Ltd.
-				3-1-1 Yagumo-Naka-Machi
-				Moriguchi City  Osaka  570-8501
-				JP
-
-00-0B-92   (hex)		Ascom Danmark A/S
-000B92     (base 16)		Ascom Danmark A/S
-				Fabriksparken 42
-				Glostrup  Denmark  2600
-				DK
-
-00-0B-9A   (hex)		Shanghai Ulink Telecom Equipment Co. Ltd.
-000B9A     (base 16)		Shanghai Ulink Telecom Equipment Co. Ltd.
-				6 Floor, Building 3
-				Shanghai    200083
-				CN
-
-00-0B-9D   (hex)		TwinMOS Technologies Inc.
-000B9D     (base 16)		TwinMOS Technologies Inc.
-				303 No.3, Tzu Chiang Rd., Hu Kou Xiang,
-				Hsin Chu    303
-				TW
-
-00-0B-96   (hex)		Innotrac Diagnostics Oy
-000B96     (base 16)		Innotrac Diagnostics Oy
-				Kalevantie 25
-				Turku  Åbo  20520
-				FI
-
-00-0B-56   (hex)		Cybernetics
-000B56     (base 16)		Cybernetics
-				111 Cybernetics Way STE 300
-				Yorktown  VA  23693
-				US
-
-00-0B-50   (hex)		Oxygnet
-000B50     (base 16)		Oxygnet
-				402 E. Carrillo St.
-				Santa Barbara  CA  93101
-				US
-
-00-0B-52   (hex)		JOYMAX ELECTRONICS CO. LTD.
-000B52     (base 16)		JOYMAX ELECTRONICS CO. LTD.
-				No.5 Dong-Yuan Road 2, Jhong-Li Industrial Park,
-				Tao-Yuan    32063
-				TW
-
-00-0B-69   (hex)		Franke Finland Oy
-000B69     (base 16)		Franke Finland Oy
-				Vartiokuja 1
-				NAARAJARVI    FIN-76850
-				FI
-
-00-0B-A5   (hex)		Quasar Cipta Mandiri, PT
-000BA5     (base 16)		Quasar Cipta Mandiri, PT
-				Jl. Palasari 9A
-				Bandung  West Java  40262
-				ID
-
-00-0B-49   (hex)		RF-Link System Inc.
-000B49     (base 16)		RF-Link System Inc.
-				No.6, Nan-Ke 5th Rd., Hsin-Shi,
-				Tainan County    744
-				TW
-
-00-0B-46   (hex)		Cisco Systems, Inc
-000B46     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0B-7A   (hex)		L-3 Linkabit
-000B7A     (base 16)		L-3 Linkabit
-				9890 Town Center Drive
-				San Diego  CA  92121
-				US
-
-00-0B-84   (hex)		BODET
-000B84     (base 16)		BODET
-				Route de la Tourlandry
-				TREMENTINES  FRANCE  49340
-				FR
-
-00-0B-77   (hex)		Cogent Systems, Inc.
-000B77     (base 16)		Cogent Systems, Inc.
-				209 Fair Oaks Ave.
-				South Pasadena  CA  91030
-				US
-
-00-0B-66   (hex)		Teralink Communications
-000B66     (base 16)		Teralink Communications
-				Capital Tower 15F,
-				Daejeon    302120
-				KR
-
-00-0B-2C   (hex)		Eiki Industrial Co. Ltd.
-000B2C     (base 16)		Eiki Industrial Co. Ltd.
-				4-12 Manzai-cho, Kita-ku
-				Osaka    530
-				JP
-
-00-0B-26   (hex)		Wetek Corporation
-000B26     (base 16)		Wetek Corporation
-				4F, NO.17, Kuanfu N. Road
-				Hsin Chu Industrial Park    303
-				TW
-
-00-0B-28   (hex)		Quatech Inc.
-000B28     (base 16)		Quatech Inc.
-				662 Wolf Ledges Pkwy.
-				Akron  OH  44311
-				US
-
-00-0B-2A   (hex)		HOWTEL Co., Ltd.
-000B2A     (base 16)		HOWTEL Co., Ltd.
-				J-COM Bd. 4F, 124-4 OJEON-DONG
-				UIWANG-SHI  KYOUNGGI-DO  437-070
-				KR
-
-00-0B-30   (hex)		Beijing Gongye Science & Technology Co.,Ltd
-000B30     (base 16)		Beijing Gongye Science & Technology Co.,Ltd
-				Unit D.17/E,Shenlanhuating mid Road No.6
-				Beijing    100029
-				CN
-
-00-0A-F2   (hex)		NeoAxiom Corp.
-000AF2     (base 16)		NeoAxiom Corp.
-				1520 Montague Expressway
-				San Jose  CA  95131
-				US
-
-00-0A-F5   (hex)		Airgo Networks, Inc.
-000AF5     (base 16)		Airgo Networks, Inc.
-				900 Arastradero Rd
-				Palo Alto  CA  94304
-				US
-
-00-0A-F0   (hex)		SHIN-OH ELECTRONICS CO., LTD. R&D
-000AF0     (base 16)		SHIN-OH ELECTRONICS CO., LTD. R&D
-				#729-5, Bonoh-Dong, Ansan-City, Kyunggi-
-				Ansan-City  Kyunggi-Do  425-180
-				KR
-
-00-0A-F4   (hex)		Cisco Systems, Inc
-000AF4     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0A-EE   (hex)		GCD Hard- & Software GmbH
-000AEE     (base 16)		GCD Hard- & Software GmbH
-				Henkestraße 79
-				Erlangen  Bayern  91052
-				DE
-
-00-0A-D8   (hex)		IPCserv Technology Corp.
-000AD8     (base 16)		IPCserv Technology Corp.
-				6f,No.107,Pan-Hsin Rd
-				Pan-Chiao  Taipei  22046
-				TW
-
-00-0A-D7   (hex)		Origin ELECTRIC CO.,LTD.
-000AD7     (base 16)		Origin ELECTRIC CO.,LTD.
-				1-18-1
-				TOSHIMA WARD  TOKYO MET.  171-8555
-				JP
-
-00-0B-38   (hex)		Knürr GmbH
-000B38     (base 16)		Knürr GmbH
-				Mariakirchener Straße 38
-				Arnstorf  Bavaria  94424
-				DE
-
-00-0B-32   (hex)		VORMETRIC, INC.
-000B32     (base 16)		VORMETRIC, INC.
-				2060 CORPORATE CT
-				SAN JOSE  CA  95131
-				US
-
-00-0B-07   (hex)		Voxpath Networks
-000B07     (base 16)		Voxpath Networks
-				7600B Capital of Texas Highway  - North
-				Austin  Texas  78731
-				US
-
-00-0B-04   (hex)		Volktek Corporation
-000B04     (base 16)		Volktek Corporation
-				4F., No.192, Lian-Chang Road, Chang-Ho
-				Taipei    
-				TW
-
-00-0A-F9   (hex)		HiConnect, Inc.
-000AF9     (base 16)		HiConnect, Inc.
-				Rm #906, Haksan Cosmostel, 110
-				Kwangjin-Gu  Seoul  143-802
-				KR
-
-00-0B-1F   (hex)		I CON Computer Co.
-000B1F     (base 16)		I CON Computer Co.
-				3F, No. 142 , Hsin Ming Road
-				Neihu  Taipei  114
-				TW
-
-00-0B-13   (hex)		ZETRON INC
-000B13     (base 16)		ZETRON INC
-				PO Box 97004
-				REDMOND  WA  98073
-				US
-
-00-0B-10   (hex)		11wave Technonlogy Co.,Ltd
-000B10     (base 16)		11wave Technonlogy Co.,Ltd
-				10F,no.285 sec.2 ,Ti-Ding Ave,NaiHu.Taip
-				Taipei    114
-				TW
-
-00-0A-E9   (hex)		AirVast Technology Inc.
-000AE9     (base 16)		AirVast Technology Inc.
-				3F.-5, No.6, Lane 609, Sec. 5, Chongsin Rd.
-				Sanchong City  Taipei  241
-				TW
-
-00-0B-2B   (hex)		HOSTNET CORPORATION
-000B2B     (base 16)		HOSTNET CORPORATION
-				10F-12,No. 12 Lane 609, Sec.5,Chunghsin
-				Sanchung  Taipei Hsien  241
-				TW
-
-00-0B-02   (hex)		Dallmeier electronic
-000B02     (base 16)		Dallmeier electronic
-				Würzburgerstraße 5
-				Regensburg  Bavaria  93059
-				DE
-
-00-0A-CD   (hex)		Sunrich Technology Limited
-000ACD     (base 16)		Sunrich Technology Limited
-				Unit 1301, Eastern Centre, 1065 King's R
-				Quarry Bay    
-				HK
-
-00-0A-CC   (hex)		Winnow Networks, Inc.
-000ACC     (base 16)		Winnow Networks, Inc.
-				701 Emerson Road
-				St. Louis  MO  63141
-				US
-
-00-0A-CF   (hex)		PROVIDEO Multimedia Co. Ltd.
-000ACF     (base 16)		PROVIDEO Multimedia Co. Ltd.
-				5F, NO.8, ALLEY 2, TZU-WEI LANE,
-				HSIN TIEN CITY  TAIPEI HSIEN,  231
-				TW
-
-00-0A-D1   (hex)		MWS
-000AD1     (base 16)		MWS
-				12, quai Papacino
-				NICE    06300
-				FR
-
-00-0A-7D   (hex)		Valo, Inc.
-000A7D     (base 16)		Valo, Inc.
-				1351 Redwood Way
-				Petaluma  CA  94954
-				US
-
-00-0A-7F   (hex)		Teradon Industries, Inc
-000A7F     (base 16)		Teradon Industries, Inc
-				7500 2nd ST NW
-				Albuquerque  NM  87120
-				US
-
-00-0A-81   (hex)		TEIMA Audiotex S.L.
-000A81     (base 16)		TEIMA Audiotex S.L.
-				C/ Tirvia, 6, local B
-				Madrid    28040
-				ES
-
-00-0A-87   (hex)		Integrated Micromachines Inc.
-000A87     (base 16)		Integrated Micromachines Inc.
-				1400 S. Shamrock Ave.
-				Monrovia  CA  91016
-				US
-
-00-0A-77   (hex)		Bluewire Technologies LLC
-000A77     (base 16)		Bluewire Technologies LLC
-				420 N. O St.
-				Tulare  Ca  93274
-				US
-
-00-0A-8C   (hex)		Guardware Systems Ltd.
-000A8C     (base 16)		Guardware Systems Ltd.
-				Ulloi ut 102.
-				Budapest    H-1089
-				HU
-
-00-0A-96   (hex)		MEWTEL TECHNOLOGY INC.
-000A96     (base 16)		MEWTEL TECHNOLOGY INC.
-				E15FL. IT VENTURE TOWER
-				SEOUL    138-803
-				KR
-
-00-0A-82   (hex)		TATSUTA SYSTEM ELECTRONICS CO.,LTD.
-000A82     (base 16)		TATSUTA SYSTEM ELECTRONICS CO.,LTD.
-				IWATATYOU2-3-1
-				HIGASHIOOSAKA-SHI  OOSAKA-FU  578-8585
-				JP
-
-00-0A-D3   (hex)		INITECH Co., Ltd
-000AD3     (base 16)		INITECH Co., Ltd
-				3F, INITECH Bldg, 559-5,
-				Seoul  Songpa  138-816
-				KR
-
-00-0A-C8   (hex)		ZPSYS CO.,LTD. (Planning&Management)
-000AC8     (base 16)		ZPSYS CO.,LTD. (Planning&Management)
-				106 Ace Techno Tower1
-				Seoul    152-050
-				KR
-
-00-0A-C6   (hex)		Overture Networks.
-000AC6     (base 16)		Overture Networks.
-				637 Davis Drive
-				Morrisville  NC  27560
-				US
-
-00-0A-AB   (hex)		Toyota Technical Development Corporation
-000AAB     (base 16)		Toyota Technical Development Corporation
-				1-9, Imae, Hanamoto-cho
-				Toyota  Aichi  470-0334
-				JP
-
-00-0A-B4   (hex)		ETIC Telecommunications
-000AB4     (base 16)		ETIC Telecommunications
-				13, chemin du vieux-chene ZIRST
-				MEYLAN  Isere  38240
-				FR
-
-00-0A-7A   (hex)		Kyoritsu Electric Co., Ltd.
-000A7A     (base 16)		Kyoritsu Electric Co., Ltd.
-				2-3-17
-				Komae-shi  Tokyo  201-0005
-				JP
-
-00-0A-9C   (hex)		Server Technology, Inc.
-000A9C     (base 16)		Server Technology, Inc.
-				1040 Sandhill Drive
-				Reno  Nevada  89521
-				US
-
-00-0A-75   (hex)		Caterpillar, Inc
-000A75     (base 16)		Caterpillar, Inc
-				Mailstop Location AC6130
-				Mossville  IL  61552-0610
-				US
-
-00-0A-12   (hex)		Azylex Technology, Inc
-000A12     (base 16)		Azylex Technology, Inc
-				7-2Fl., No. 738 Chung Cheng Road,
-				Chung Ho City  Taipei  235
-				TW
-
-00-0A-13   (hex)		Honeywell Video Systems
-000A13     (base 16)		Honeywell Video Systems
-				6554 176 Street
-				Surrey  BC  V3S 4G5
-				CA
-
-00-0A-09   (hex)		TaraCom Integrated Products, Inc.
-000A09     (base 16)		TaraCom Integrated Products, Inc.
-				830 Stewart Dr.
-				Sunnyvale  CA  94085
-				US
-
-00-0A-41   (hex)		Cisco Systems, Inc
-000A41     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0A-36   (hex)		Synelec Telecom Multimedia
-000A36     (base 16)		Synelec Telecom Multimedia
-				Zone Industrielle
-				Saint Sernin sur Rance  Aveyron  F-12380
-				FR
-
-00-0A-48   (hex)		Albatron Technology
-000A48     (base 16)		Albatron Technology
-				6F, No 716, Chung Cheng,
-				Chung-Ho City  Taipei Hsien  
-				TW
-
-00-0A-3E   (hex)		EADS Telecom
-000A3E     (base 16)		EADS Telecom
-				Landshuter Strasse 26
-				Munich  Bavaria  85716
-				DE
-
-00-0A-59   (hex)		HW server
-000A59     (base 16)		HW server
-				Italska 15
-				Prague 2  Czech Republic  120 00
-				KM
-
-00-0A-54   (hex)		Laguna Hills, Inc.
-000A54     (base 16)		Laguna Hills, Inc.
-				3-5-2
-				Chiyoda-ku  Tokyo  102-0083
-				JP
-
-00-0A-4F   (hex)		Brain Boxes Limited
-000A4F     (base 16)		Brain Boxes Limited
-				Unit 3c, Wavertree Boulevard South
-				Liverpool  Merseyside  L7 9PF
-				GB
-
-00-0A-52   (hex)		AsiaRF Ltd.
-000A52     (base 16)		AsiaRF Ltd.
-				3F, No.176, Yongzhen Road
-				New Taipei City  Taipei  234
-				TW
-
-00-0A-02   (hex)		ANNSO CO., LTD.
-000A02     (base 16)		ANNSO CO., LTD.
-				5F, No. 100, Min-Chuan Road, Shing-Tien
-				Shing-Tien City Taipei Hsien  Taiwan  221
-				TW
-
-00-0A-65   (hex)		GentechMedia.co.,ltd.
-000A65     (base 16)		GentechMedia.co.,ltd.
-				solvit bldg 2f, 402-8, yangjae-don,
-				seocho-gu,  seoul  137-899
-				KR
-
-00-0A-22   (hex)		Amperion Inc
-000A22     (base 16)		Amperion Inc
-				250 Apollo Drive
-				Chelmsford  MA  01824
-				US
-
-00-0A-1C   (hex)		Bridge Information Co., Ltd.
-000A1C     (base 16)		Bridge Information Co., Ltd.
-				No.3, Lane 106, Wu-Kung 2 Rd.,
-				Taipei    248
-				TW
-
-00-0A-32   (hex)		Xsido Corporation
-000A32     (base 16)		Xsido Corporation
-				3F,2-8-13,Shiba-Daimon,
-				Tokyo    105-0012
-				JP
-
-00-0A-2B   (hex)		Etherstuff
-000A2B     (base 16)		Etherstuff
-				208 W. Mimosa Circle
-				San Marcos  TX  78666
-				US
-
-00-0A-42   (hex)		Cisco Systems, Inc
-000A42     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-0A-38   (hex)		Apani Networks
-000A38     (base 16)		Apani Networks
-				1800 E. Imperial Hwy
-				Brea  CA  92821
-				US
-
-00-09-A8   (hex)		Eastmode Pte Ltd
-0009A8     (base 16)		Eastmode Pte Ltd
-				30 Loyang Way #07-06
-				    508769
-				SG
-
-00-09-AA   (hex)		Data Comm for Business, Inc.
-0009AA     (base 16)		Data Comm for Business, Inc.
-				2949 County Road 1000 East
-				Dewey  IL  61853
-				US
-
-00-09-A4   (hex)		HARTEC Corporation
-0009A4     (base 16)		HARTEC Corporation
-				KOUHOKUKU SHIN-YOKOHAMA
-				YOKOHAMA-SHI  KANAGAWA-KEN  222-0033
-				JP
-
-00-09-A6   (hex)		Ignis Optics, Inc.
-0009A6     (base 16)		Ignis Optics, Inc.
-				482 W. San Carlos
-				San Jose  California  95110
-				US
-
-00-09-A7   (hex)		Bang & Olufsen A/S
-0009A7     (base 16)		Bang & Olufsen A/S
-				Peter Bangs Vej 15
-				Struer    7600
-				DK
-
-00-09-C8   (hex)		SINAGAWA TSUSHIN KEISOU SERVICE
-0009C8     (base 16)		SINAGAWA TSUSHIN KEISOU SERVICE
-				13-5 Fuke , Sumiyoshi , Onahama
-				Iwaki City  Fukushima Prefecture  971-8124
-				JP
-
-00-09-B7   (hex)		Cisco Systems, Inc
-0009B7     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-B2   (hex)		L&F Inc.
-0009B2     (base 16)		L&F Inc.
-				4-2-9
-				ITABASHI-KU  Tokyo  175-0083
-				JP
-
-00-09-F3   (hex)		WELL Communication Corp.
-0009F3     (base 16)		WELL Communication Corp.
-				11F, No.778, Chung Cheng Rd., Chung Ho C
-				Chung Ho    235
-				TW
-
-00-09-EF   (hex)		Vocera Communications
-0009EF     (base 16)		Vocera Communications
-				525 Race St.
-				San Jose  California  95126
-				US
-
-00-09-C4   (hex)		Medicore Co., Ltd
-0009C4     (base 16)		Medicore Co., Ltd
-				72-3 5th Fl., Luna Bldg, Chungdam-dong
-				Seoul    135-080
-				KR
-
-00-09-D9   (hex)		Neoscale Systems, Inc
-0009D9     (base 16)		Neoscale Systems, Inc
-				1500 Mc Candless Drive
-				Milpitas  CA  95035
-				US
-
-00-09-D0   (hex)		Solacom Technologies Inc.
-0009D0     (base 16)		Solacom Technologies Inc.
-				80 Jean-Proulx
-				Gatineau  Quebec  J8Z 1W1
-				CA
-
-00-09-CC   (hex)		Moog GmbH
-0009CC     (base 16)		Moog GmbH
-				Hanns-Klemm-Str. 28
-				Boeblingen    D-71034
-				DE
-
-00-0A-00   (hex)		Mediatek Corp.
-000A00     (base 16)		Mediatek Corp.
-				8F, No 69-5, Sec.2, Chung Cheng East Rd.
-				Taipei    251
-				TW
-
-00-09-F0   (hex)		Shimizu Technology Inc.
-0009F0     (base 16)		Shimizu Technology Inc.
-				15-6, No.107, Chung Shan Rd., Sec.1
-				Hsin Chuan,  Taipei  242
-				US
-
-00-09-E4   (hex)		K Tech Infosystem Inc.
-0009E4     (base 16)		K Tech Infosystem Inc.
-				B-405, Bundang Techno-Park 148, Yatap-do
-				Seongnam  Kyonggi-Do  464-070
-				KR
-
-00-09-72   (hex)		Securebase,Inc
-000972     (base 16)		Securebase,Inc
-				2nd Fl,Seungseung-Bldg,Dokok 2-Dong,Kang
-				Seoul    135-854
-				KR
-
-00-09-78   (hex)		AIJI System Co., Ltd.
-000978     (base 16)		AIJI System Co., Ltd.
-				#208 Samho-Park-Tower Bldg. 1122-10, Ing
-				Suwon  Gyeonggi-do  442-835
-				KR
-
-00-09-73   (hex)		Lenten Technology Co., Ltd.
-000973     (base 16)		Lenten Technology Co., Ltd.
-				16F, No.51, Sec.2, Gungyi Road,
-				Taichung City    408
-				TW
-
-00-09-75   (hex)		fSONA Communications Corporation
-000975     (base 16)		fSONA Communications Corporation
-				#140-11120 Horseshoe Way
-				Richmond  BC  V7A 5H7
-				CA
-
-00-09-77   (hex)		Brunner Elektronik AG
-000977     (base 16)		Brunner Elektronik AG
-				Müllerwis 1
-				Hittnau  Zurich  8335
-				CH
-
-00-09-69   (hex)		Meret Optical Communications
-000969     (base 16)		Meret Optical Communications
-				10070 Mesa Rim Road
-				San Diego  California  92121
-				US
-
-00-09-42   (hex)		Wireless Technologies, Inc
-000942     (base 16)		Wireless Technologies, Inc
-				Ohmori Mitsubishi Bldg., 7F, Sannoh 2-chome
-				Tokyo    143-0023
-				JP
-
-00-09-45   (hex)		Palmmicro Communications Inc
-000945     (base 16)		Palmmicro Communications Inc
-				630 Alder Dr
-				Milpitas  CA  95035
-				US
-
-00-09-3E   (hex)		C&I Technologies
-00093E     (base 16)		C&I Technologies
-				#303 Kwanbo Plaza B/D, 1467-2
-				Anyang-Shi  Kyunggi-Do  431-808
-				KR
-
-00-09-40   (hex)		AGFEO GmbH & Co. KG
-000940     (base 16)		AGFEO GmbH & Co. KG
-				Postfach 140107
-				Bielefeld  Rhine Westfalia  33621
-				DE
-
-00-09-7F   (hex)		Vsecure 2000 LTD.
-00097F     (base 16)		Vsecure 2000 LTD.
-				11 Moshe Levi St.
-				Rishon LeZion    75658
-				IL
-
-00-09-80   (hex)		Power Zenith Inc.
-000980     (base 16)		Power Zenith Inc.
-				Tsujido Nishikaigan 1-10-7
-				Fujisawa  Kanagawa  251-0046
-				JP
-
-00-09-A0   (hex)		Microtechno Corporation
-0009A0     (base 16)		Microtechno Corporation
-				2-33-36 Shimoodanaka
-				Kawasaki  Kanagawa  211-0041
-				JP
-
-00-09-9B   (hex)		Western Telematic Inc.
-00099B     (base 16)		Western Telematic Inc.
-				5 Sterling
-				Irvine  CA  92618
-				US
-
-00-09-90   (hex)		ACKSYS Communications & systems
-000990     (base 16)		ACKSYS Communications & systems
-				ZA du Val Joyeux
-				VILLEPREUX    F-78450
-				FR
-
-00-09-53   (hex)		Linkage System Integration Co.Ltd.
-000953     (base 16)		Linkage System Integration Co.Ltd.
-				40 Gongjianfang
-				Nanjing  Jiangsu  210006
-				CN
-
-00-09-4C   (hex)		Communication Weaver Co.,Ltd.
-00094C     (base 16)		Communication Weaver Co.,Ltd.
-				1~3 COWEAVER B/D 446-19,
-				SEOUL    121-841
-				KR
-
-00-09-6E   (hex)		GIANT ELECTRONICS LTD.
-00096E     (base 16)		GIANT ELECTRONICS LTD.
-				7/F., ELITE INDUSTRIAL BUILDING,
-				KWUN TONG  KOWLOON  
-				HK
-
-00-09-6C   (hex)		Imedia Semiconductor Corp.
-00096C     (base 16)		Imedia Semiconductor Corp.
-				4988 Great America Pkwy.
-				Santa Clara  CA  95054
-				US
-
-00-09-5F   (hex)		Telebyte, Inc.
-00095F     (base 16)		Telebyte, Inc.
-				270 Pulaski Road
-				Greenlawn  NY  11740-1616
-				US
-
-00-09-8A   (hex)		EqualLogic Inc
-00098A     (base 16)		EqualLogic Inc
-				9 Townsend West
-				Nashua  NH  03062
-				US
-
-00-08-F9   (hex)		Artesyn Embedded Technologies
-0008F9     (base 16)		Artesyn Embedded Technologies
-				2900 S. Diablo Way Suite 190
-				Tempe  AZ  85282
-				US
-
-00-08-F4   (hex)		Bluetake Technology Co., Ltd.
-0008F4     (base 16)		Bluetake Technology Co., Ltd.
-				6F, No. 33, Lane 155, Sec. 3, Pei Shen R
-				Taipei  Taiwan  222
-				TW
-
-00-08-F7   (hex)		Hitachi Ltd, Semiconductor & Integrated Circuits Gr
-0008F7     (base 16)		Hitachi Ltd, Semiconductor & Integrated Circuits Gr
-				20-1 Josuihon-chou 5chome
-				Kodaira-shi  Tokyo  187-8588
-				JP
-
-00-09-20   (hex)		EpoX COMPUTER CO.,LTD.
-000920     (base 16)		EpoX COMPUTER CO.,LTD.
-				10th Floor, No.346,Chung San Rd.,Sec.2,
-				Chung Ho City,Taipei Hsien    235
-				TW
-
-00-09-22   (hex)		TST Biometrics GmbH
-000922     (base 16)		TST Biometrics GmbH
-				Moehlstraße 39
-				81675  Munich  
-				DE
-
-00-09-16   (hex)		Listman Home Technologies, Inc.
-000916     (base 16)		Listman Home Technologies, Inc.
-				1100 Northmeadow Parkway
-				Roswell  Georgia  30076
-				US
-
-00-09-11   (hex)		Cisco Systems, Inc
-000911     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-12   (hex)		Cisco Systems, Inc
-000912     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-08   (hex)		VTech Technology Corp.
-000908     (base 16)		VTech Technology Corp.
-				2F-2, No. 124, Chung Cheng Rd., Shihlin
-				Taipei    11141
-				TW
-
-00-09-0B   (hex)		MTL  Instruments PLC
-00090B     (base 16)		MTL  Instruments PLC
-				Power Court
-				Luton  Bedfordshire  LU1 3JJ
-				GB
-
-00-09-3B   (hex)		HYUNDAI NETWORKS INC.
-00093B     (base 16)		HYUNDAI NETWORKS INC.
-				SAN 136-1  AMI-RI  BUBAL_EUP
-				ICHON  KYUNGKI-DO  467-701
-				KR
-
-00-09-34   (hex)		Dream-Multimedia-Tv GmbH
-000934     (base 16)		Dream-Multimedia-Tv GmbH
-				Brückstraße 29
-				Menden  Sauerland  58706
-				DE
-
-00-09-31   (hex)		Future Internet, Inc.
-000931     (base 16)		Future Internet, Inc.
-				11'th Floor Samhomoolsan Bldg, B/Bldg, 2
-				Seoul  Kyung-Ki  137-130
-				KP
-
-00-08-F5   (hex)		YESTECHNOLOGY Co.,Ltd.
-0008F5     (base 16)		YESTECHNOLOGY Co.,Ltd.
-				4th FL Kyung-Am B/D 157-27 Samsung-Dong,
-				  Seoul  135-090
-				KR
-
-00-08-EC   (hex)		Optical Zonu Corporation
-0008EC     (base 16)		Optical Zonu Corporation
-				15028 Delano Street
-				Van Nuys  CA  91411-2016
-				US
-
-00-08-E6   (hex)		Littlefeet
-0008E6     (base 16)		Littlefeet
-				13000 Gregg Street
-				Poway  California  92064
-				US
-
-00-09-30   (hex)		AeroConcierge Inc.
-000930     (base 16)		AeroConcierge Inc.
-				10256 Yonge St.
-				Richmond Hill  Ont.  L4C 3B7
-				CA
-
-00-09-1E   (hex)		Firstech Technology Corp.
-00091E     (base 16)		Firstech Technology Corp.
-				8fl.,No.267,section 4,Hsin-Yi Rd. ,Da-An
-				Taipei    106
-				TW
-
-00-08-E2   (hex)		Cisco Systems, Inc
-0008E2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-09-05   (hex)		iTEC Technologies Ltd.
-000905     (base 16)		iTEC Technologies Ltd.
-				160-1, Karak-Dong, Songpa-Gu
-				Seoul    138-809
-				KR
-
-00-08-A5   (hex)		Peninsula Systems Inc.
-0008A5     (base 16)		Peninsula Systems Inc.
-				6902 Verde Ridge Rd.
-				Rancho Palos Verdes  CA  90275
-				US
-
-00-08-A2   (hex)		ADI Engineering, Inc.
-0008A2     (base 16)		ADI Engineering, Inc.
-				1769A Worth Park
-				Charlottesville  VA  22911
-				US
-
-00-08-98   (hex)		Gigabit Optics Corporation
-000898     (base 16)		Gigabit Optics Corporation
-				1156 Aster Ave.
-				Sunnyvale  CA  94086-6810
-				US
-
-00-08-9B   (hex)		ICP Electronics Inc.
-00089B     (base 16)		ICP Electronics Inc.
-				4F, No. 22, Chung-Hsing Rd. Shi-Chi City
-				Taipei    221
-				TW
-
-00-08-9C   (hex)		Elecs Industry Co., Ltd.
-00089C     (base 16)		Elecs Industry Co., Ltd.
-				1-22-23,Shinsaku,Takatsu-Ku
-				Kawasaki  Kanagawa  213-0014
-				JP
-
-00-08-9D   (hex)		UHD-Elektronik
-00089D     (base 16)		UHD-Elektronik
-				Zuercherstrasse 12
-				Baden  AG  5400
-				CH
-
-00-08-CF   (hex)		Nippon Koei Power Systems Co., Ltd.
-0008CF     (base 16)		Nippon Koei Power Systems Co., Ltd.
-				2940 Shinyoshida-cho
-				Kohoku-ku  Yokohama  223-8506
-				JP
-
-00-08-CB   (hex)		Zeta Broadband Inc.
-0008CB     (base 16)		Zeta Broadband Inc.
-				660 Vista Way, Suite B
-				Milpitas  CA  95035
-				US
-
-00-08-D3   (hex)		Hercules Technologies S.A.S.
-0008D3     (base 16)		Hercules Technologies S.A.S.
-				6,place des colombes
-				Rennes  Bretagne  35000
-				FR
-
-00-08-D0   (hex)		Musashi Engineering Co., LTD.
-0008D0     (base 16)		Musashi Engineering Co., LTD.
-				3-11-7, Nishi-shimbashi
-				Minato-ku  Tokyo  105-0003
-				JP
-
-00-08-BA   (hex)		Erskine Systems Ltd
-0008BA     (base 16)		Erskine Systems Ltd
-				Salter Road
-				Scarborough  North Yorkshire  YO11 3DU
-				GB
-
-00-08-B5   (hex)		TAI GUEN ENTERPRISE CO., LTD
-0008B5     (base 16)		TAI GUEN ENTERPRISE CO., LTD
-				N0.400, 10F-7 HUANPEI RD.,
-				CHUNG LI    320-61
-				TW
-
-00-08-B7   (hex)		HIT Incorporated
-0008B7     (base 16)		HIT Incorporated
-				4F, 8, Lane 235, Pao-Chiao Road,
-				Shin Tien  Taipei  231
-				TW
-
-00-08-A9   (hex)		SangSang Technology, Inc.
-0008A9     (base 16)		SangSang Technology, Inc.
-				64-8, Nogok-ri, Docheok-myun,
-				Gwangju  Kyonggi-do  464-882
-				KR
-
-00-08-C8   (hex)		Soneticom, Inc.
-0008C8     (base 16)		Soneticom, Inc.
-				4325 Woodland Park Drive, Suite 102
-				West Melbourne  Florida  32904
-				US
-
-00-08-C4   (hex)		Hikari Co.,Ltd.
-0008C4     (base 16)		Hikari Co.,Ltd.
-				418-4 Minaminoda Chigenobu-cho
-				Onsen-gun  Ehime  791-0297
-				JP
-
-00-08-8F   (hex)		ADVANCED DIGITAL TECHNOLOGY
-00088F     (base 16)		ADVANCED DIGITAL TECHNOLOGY
-				ADT BLDG.,3-3, YANGJAE-DONG,
-				SEOUL    
-				KR
-
-00-08-8B   (hex)		Tropic Networks Inc.
-00088B     (base 16)		Tropic Networks Inc.
-				135 Micheal Cowpland Drive
-				Ottawa  Ontario  K2M2E9
-				CA
-
-00-08-6B   (hex)		MIPSYS
-00086B     (base 16)		MIPSYS
-				19C, Avenue des Indes
-				LES ULIS Cedex    FR-91969
-				FR
-
-00-08-7F   (hex)		SPAUN electronic GmbH & Co. KG
-00087F     (base 16)		SPAUN electronic GmbH & Co. KG
-				Byk-Gulden - Str. 22
-				    
-				DE
-
-00-08-86   (hex)		Hansung Teliann, Inc.
-000886     (base 16)		Hansung Teliann, Inc.
-				195-1, Neungpyung-ri, Opo-eub
-				    
-				KR
-
-00-08-58   (hex)		Novatechnology Inc.
-000858     (base 16)		Novatechnology Inc.
-				Nova Bldg. 4F 641 03
-				Seoul    135-080
-				KR
-
-00-08-50   (hex)		Arizona Instrument Corp.
-000850     (base 16)		Arizona Instrument Corp.
-				1912 W. 4th Street
-				Tempe  AZ  85281
-				US
-
-00-08-5B   (hex)		Hanbit Electronics Co., Ltd.
-00085B     (base 16)		Hanbit Electronics Co., Ltd.
-				414-5, Woncheon-Dong, Paldal-Gu
-				    
-				KR
-
-00-08-2B   (hex)		Wooksung Electronics, Inc.
-00082B     (base 16)		Wooksung Electronics, Inc.
-				Jaho-Bldg. 6F, Tanbang-Dong,
-				    
-				KR
-
-00-08-2E   (hex)		Multitone Electronics PLC
-00082E     (base 16)		Multitone Electronics PLC
-				Multitone House, Beggarwood Lane
-				    
-				GB
-
-00-07-ED   (hex)		Altera Corporation
-0007ED     (base 16)		Altera Corporation
-				101 Innovation Drive
-				San Jose  CA  95134
-				US
-
-00-07-F1   (hex)		TeraBurst Networks Inc.
-0007F1     (base 16)		TeraBurst Networks Inc.
-				985 Stewart Drive
-				Sunnyvale  CA  94086
-				US
-
-00-07-F2   (hex)		IOA Corporation
-0007F2     (base 16)		IOA Corporation
-				350 Potrero Ave.
-				Sunnyvale  CA  94085
-				US
-
-00-07-EA   (hex)		Massana, Inc.
-0007EA     (base 16)		Massana, Inc.
-				2901 Tasman Drive
-				Santa Clara  CA  95054
-				US
-
-00-07-F0   (hex)		LogiSync LLC
-0007F0     (base 16)		LogiSync LLC
-				1313 Lear Industrial Parkway
-				Avon  OH  44011
-				US
-
-00-07-E7   (hex)		FreeWave Technologies
-0007E7     (base 16)		FreeWave Technologies
-				1880 S. Flaitron Ct.
-				Boulder  CO  80301
-				US
-
-00-07-D6   (hex)		Commil Ltd.
-0007D6     (base 16)		Commil Ltd.
-				P.O. Box 10050
-				    
-				IL
-
-00-07-D7   (hex)		Caporis Networks AG
-0007D7     (base 16)		Caporis Networks AG
-				Süggelstraße 31
-				    
-				DE
-
-00-07-D4   (hex)		Zhejiang Yutong Network Communication Co Ltd.
-0007D4     (base 16)		Zhejiang Yutong Network Communication Co Ltd.
-				805 HuaXing Technical Building
-				Zhejiang    
-				CN
-
-00-07-CE   (hex)		Cabletime Limited
-0007CE     (base 16)		Cabletime Limited
-				64 Greenham Road
-				Newbury  Berkshire  RG14 7HX
-				GB
-
-00-07-D3   (hex)		SPGPrints B.V.
-0007D3     (base 16)		SPGPrints B.V.
-				Raamstraat 1-3, 5831 AT Boxmeer
-				Boxmeer    
-				NL
-
-00-08-13   (hex)		Diskbank, Inc.
-000813     (base 16)		Diskbank, Inc.
-				3F Focus Building, 725-25
-				Seoul    135-080
-				KR
-
-00-08-0F   (hex)		Proximion Fiber Optics AB
-00080F     (base 16)		Proximion Fiber Optics AB
-				Isafjordsgatan 9
-				    
-				SE
-
-00-08-12   (hex)		GM-2 Corporation
-000812     (base 16)		GM-2 Corporation
-				Shiba-Matushira-Bldg.
-				Tokyo  Minato-ku  105-0014
-				JP
-
-00-08-0B   (hex)		Birka BPA Informationssystem AB
-00080B     (base 16)		Birka BPA Informationssystem AB
-				Box 20100
-				    
-				SE
-
-00-08-0A   (hex)		Espera-Werke GmbH
-00080A     (base 16)		Espera-Werke GmbH
-				Moltkestrasse 17- 33
-				    
-				DE
-
-00-07-E3   (hex)		Navcom Technology, Inc.
-0007E3     (base 16)		Navcom Technology, Inc.
-				123 West Torrance Blvd.,
-				Redondo Beach  CA  90277
-				US
-
-00-07-E1   (hex)		WIS Communications Co. Ltd.
-0007E1     (base 16)		WIS Communications Co. Ltd.
-				4/F Building 533
-				Shenzhen Guangdong Providence    
-				CN
-
-00-07-E0   (hex)		Palm Inc.
-0007E0     (base 16)		Palm Inc.
-				950 West Maude Ave
-				Sunnyvale  CA  94085-2801
-				US
-
-00-07-FA   (hex)		ITT Co., Ltd.
-0007FA     (base 16)		ITT Co., Ltd.
-				1-14-7, Mukohjyuku,
-				    
-				JP
-
-00-07-F6   (hex)		Qqest Software Systems
-0007F6     (base 16)		Qqest Software Systems
-				860 East 4500 South #200
-				Murray  UT  84107
-				US
-
-00-07-FB   (hex)		Giga Stream UMTS Technologies GmbH
-0007FB     (base 16)		Giga Stream UMTS Technologies GmbH
-				Konrad-Zuse-Strabe 7
-				    
-				DE
-
-00-08-5D   (hex)		Mitel Corporation
-00085D     (base 16)		Mitel Corporation
-				350 Legget Drive
-				-    K2K 2W7
-				CA
-
-00-08-55   (hex)		NASA-Goddard Space Flight Center
-000855     (base 16)		NASA-Goddard Space Flight Center
-				Code 561
-				Greenbelt  MD  20771
-				US
-
-00-08-5A   (hex)		IntiGate Inc.
-00085A     (base 16)		IntiGate Inc.
-				309E IT Venture Tower
-				Seoul    138-803
-				KR
-
-00-08-17   (hex)		EmergeCore Networks LLC
-000817     (base 16)		EmergeCore Networks LLC
-				10542 S. Jordan Gateway
-				South Jordan  UT  84095
-				US
-
-00-08-15   (hex)		CATS Co., Ltd.
-000815     (base 16)		CATS Co., Ltd.
-				751-2 Kachida-cho,
-				    224-0034
-				JP
-
-00-08-2A   (hex)		Powerwallz Network Security
-00082A     (base 16)		Powerwallz Network Security
-				120-13160 Vanier Place,
-				    V6V 2J2
-				CA
-
-00-07-AC   (hex)		Eolring
-0007AC     (base 16)		Eolring
-				10 Rue Alfred Kastler
-				    
-				FR
-
-00-07-AA   (hex)		Quantum Data Inc.
-0007AA     (base 16)		Quantum Data Inc.
-				2111 Big Timber Rd.
-				Elgin  IL  60123-1100
-				US
-
-00-07-A4   (hex)		GN Netcom Ltd.
-0007A4     (base 16)		GN Netcom Ltd.
-				12-13 Sedling Road, Wear Est., District
-				  England  NE38 9BZ
-				GB
-
-00-07-9D   (hex)		Musashi Co., Ltd.
-00079D     (base 16)		Musashi Co., Ltd.
-				3-21-1, Shimo-ochiai,
-				Tokyo    161-0033
-				JP
-
-00-07-9F   (hex)		Action Digital Inc.
-00079F     (base 16)		Action Digital Inc.
-				10650 Main St.
-				Fairfax  VA  22030
-				US
-
-00-04-7C   (hex)		Skidata AG
-00047C     (base 16)		Skidata AG
-				T-697553 Untersbergstr. 40
-				    
-				AT
-
-00-07-BE   (hex)		DataLogic SpA
-0007BE     (base 16)		DataLogic SpA
-				Via Candini, 2
-				Bologna    
-				IT
-
-00-07-AF   (hex)		Red Lion Controls, LP
-0007AF     (base 16)		Red Lion Controls, LP
-				20 Willow Springs Circle
-				York  NY  17402
-				US
-
-00-07-67   (hex)		Yuxing Electronics Company Limited
-000767     (base 16)		Yuxing Electronics Company Limited
-				Unit 1808, 18/F Tower 3,
-				Kowloon Bay,  Kowloon  
-				HK
-
-00-07-5B   (hex)		Gibson Guitars
-00075B     (base 16)		Gibson Guitars
-				309 Park Plus Blvd.
-				Nashville  TN  37217
-				US
-
-00-07-62   (hex)		Group Sense Limited
-000762     (base 16)		Group Sense Limited
-				27/F, Wu Chung House,
-				Wanchai    
-				HK
-
-00-07-84   (hex)		Cisco Systems, Inc
-000784     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-07-76   (hex)		Federal APD
-000776     (base 16)		Federal APD
-				42775 Nine Mile Rd.
-				Novi  MI  48375
-				US
-
-00-07-7A   (hex)		Infoware System Co., Ltd.
-00077A     (base 16)		Infoware System Co., Ltd.
-				Mizorogi Daiichi Bldg 4 F
-				Tokyo    
-				JP
-
-00-07-90   (hex)		Tri-M Technologies (s) Limited
-000790     (base 16)		Tri-M Technologies (s) Limited
-				Blk 25, Kallang Avenue #07-01/04
-				    339416
-				SG
-
-00-07-8D   (hex)		NetEngines Ltd.
-00078D     (base 16)		NetEngines Ltd.
-				146 Walnut Tree Close
-				    GUI 4UB
-				GB
-
-00-07-8A   (hex)		Mentor Data System Inc.
-00078A     (base 16)		Mentor Data System Inc.
-				No. 24-1, Industry East 4 Rd.,
-				Hsin-Chu,    
-				TW
-
-00-07-92   (hex)		Sütron Electronic GmbH
-000792     (base 16)		Sütron Electronic GmbH
-				Kurze Straße 29
-				    
-				DE
-
-00-07-B2   (hex)		Transaccess S.A.
-0007B2     (base 16)		Transaccess S.A.
-				R. Galeno De Castro, 1445
-				São Paulo SP    
-				BR
-
-00-07-AD   (hex)		Pentacon GmbH Foto-und Feinwerktechnik
-0007AD     (base 16)		Pentacon GmbH Foto-und Feinwerktechnik
-				Enderstrabe 94
-				    
-				DE
-
-00-07-D0   (hex)		Automat Engenharia de Automação Ltda.
-0007D0     (base 16)		Automat Engenharia de Automação Ltda.
-				Rua Santo Antonio, 917 - Reboucas
-				    80230-120
-				BR
-
-00-07-6A   (hex)		NEXTEYE Co., Ltd.
-00076A     (base 16)		NEXTEYE Co., Ltd.
-				Shinsegi Plaza 4F, 900-9,
-				Kyunggi    431-070
-				KR
-
-00-06-E6   (hex)		DongYang Telecom Co., Ltd.
-0006E6     (base 16)		DongYang Telecom Co., Ltd.
-				642-7 Deung Chon-Dong, KangSeo-Gu
-				  Seoul  157-841
-				KR
-
-00-06-DC   (hex)		Syabas Technology (Amquest)
-0006DC     (base 16)		Syabas Technology (Amquest)
-				4727 Paseo Padre Parkway
-				Fremont  CA  94555
-				US
-
-00-07-0C   (hex)		SVA-Intrusion.com Co. Ltd.
-00070C     (base 16)		SVA-Intrusion.com Co. Ltd.
-				The 4th Floor, No. 28 Building
-				Shanghai    20233
-				CN
-
-00-07-0F   (hex)		Fujant, Inc.
-00070F     (base 16)		Fujant, Inc.
-				6305 Carpinteria Avenue
-				Carpinteria  CA  93013-2901
-				US
-
-00-07-14   (hex)		Brightcom
-000714     (base 16)		Brightcom
-				6 Hanechoshet St.,
-				    
-				IL
-
-00-06-F3   (hex)		AcceLight Networks
-0006F3     (base 16)		AcceLight Networks
-				70 Abele Road, Building 1200
-				Pittsburgh  PA  15017
-				US
-
-00-06-D2   (hex)		Tundra Semiconductor Corp.
-0006D2     (base 16)		Tundra Semiconductor Corp.
-				603 March Road
-				    K2K-2M5
-				CA
-
-00-06-D8   (hex)		Maple Optical Systems
-0006D8     (base 16)		Maple Optical Systems
-				3200 North First St.
-				San Jose  CA  95134
-				US
-
-00-06-CF   (hex)		Thales Avionics In-Flight Systems, LLC
-0006CF     (base 16)		Thales Avionics In-Flight Systems, LLC
-				17481 Red Hill Avenue
-				Irvine  CA  92614-5630
-				US
-
-00-06-FE   (hex)		Ambrado, Inc
-0006FE     (base 16)		Ambrado, Inc
-				11301 W. President George Bush Fwy.
-				Richardson  TX  75080
-				US
-
-00-06-E7   (hex)		Bit Blitz Communications Inc.
-0006E7     (base 16)		Bit Blitz Communications Inc.
-				830 Hillview Ct., #290
-				Milpitas  CA  95035
-				US
-
-00-06-ED   (hex)		Inara Networks
-0006ED     (base 16)		Inara Networks
-				3031 Tisch Way,
-				San Jose  CA  95128
-				US
-
-00-06-DB   (hex)		ICHIPS Co., Ltd.
-0006DB     (base 16)		ICHIPS Co., Ltd.
-				3F, Samjeon Bldg., 236-3
-				Seoul-City    135-01
-				KR
-
-00-07-27   (hex)		Zi Corporation (HK) Ltd.
-000727     (base 16)		Zi Corporation (HK) Ltd.
-				30/F, China Resources Building
-				    
-				HK
-
-00-07-2E   (hex)		North Node AB
-00072E     (base 16)		North Node AB
-				Skeppsloron 42
-				    
-				SE
-
-00-06-99   (hex)		Vida Design Co.
-000699     (base 16)		Vida Design Co.
-				10F, No. 278 Ho Ping E. Rd.,
-				    
-				TW
-
-00-06-8D   (hex)		SEPATON, Inc.
-00068D     (base 16)		SEPATON, Inc.
-				400 Nickerson Rd.
-				Marlborough  MA  01752
-				US
-
-00-06-A3   (hex)		Bitran Corporation
-0006A3     (base 16)		Bitran Corporation
-				2213 Mochida
-				    
-				JP
-
-00-06-9F   (hex)		Kuokoa Networks
-00069F     (base 16)		Kuokoa Networks
-				2901 Tasman Dr.
-				Santa Clara  CA  95054
-				US
-
-00-06-A2   (hex)		Microtune, Inc.
-0006A2     (base 16)		Microtune, Inc.
-				6440 Lusk Blvd., Suite D205
-				San Diego  CA  92121
-				US
-
-00-06-A6   (hex)		Artistic Licence Engineering Ltd
-0006A6     (base 16)		Artistic Licence Engineering Ltd
-				24 Forward Drive
-				Harrow  Middlesex  HA3 8NT
-				GB
-
-00-06-B8   (hex)		Bandspeed Pty Ltd
-0006B8     (base 16)		Bandspeed Pty Ltd
-				Level 9, 5000 Collins Street
-				    
-				AU
-
-00-06-BB   (hex)		ATI Technologies Inc.
-0006BB     (base 16)		ATI Technologies Inc.
-				75 Tiverton Court
-				    
-				CA
-
-00-06-BD   (hex)		BNTECHNOLOGY Co., Ltd.
-0006BD     (base 16)		BNTECHNOLOGY Co., Ltd.
-				602 Youngshin Bldg. 238-8
-				Seoul    
-				KR
-
-00-06-C3   (hex)		Schindler Elevator Ltd.
-0006C3     (base 16)		Schindler Elevator Ltd.
-				R&D-CO
-				  Ebikon  CH-6030
-				CH
-
-00-06-AA   (hex)		VT Miltope
-0006AA     (base 16)		VT Miltope
-				4900 Pearl East Circle
-				Boulder  CO  80301
-				US
-
-00-06-57   (hex)		Market Central, Inc.
-000657     (base 16)		Market Central, Inc.
-				500 Business Center Drive
-				Pittsburgh  PA  15205-1333
-				US
-
-00-06-97   (hex)		R & D Center
-000697     (base 16)		R & D Center
-				5F, Seungwon B/D, 810-9
-				Seoul    
-				KR
-
-00-06-9A   (hex)		e & Tel
-00069A     (base 16)		e & Tel
-				100 Sejong-no Chongno-gu,
-				    
-				KR
-
-00-06-7D   (hex)		Takasago Ltd.
-00067D     (base 16)		Takasago Ltd.
-				1-24-16 Mizonokuchi Takatsu-ku
-				    
-				JP
-
-00-06-71   (hex)		Softing AG
-000671     (base 16)		Softing AG
-				Richard-Reitzner-Allee 6
-				    
-				DE
-
-00-06-72   (hex)		Netezza
-000672     (base 16)		Netezza
-				1671 Worcester Road
-				Framingham  MA  01701
-				US
-
-00-06-6A   (hex)		InfiniCon Systems, Inc.
-00066A     (base 16)		InfiniCon Systems, Inc.
-				700 American Ave.
-				King of Prussia  PA  19406
-				US
-
-00-06-61   (hex)		NIA Home Technologies Corp.
-000661     (base 16)		NIA Home Technologies Corp.
-				Innovation Incubator, NTHU,
-				Hsinchu  30013,  
-				TW
-
-00-06-B2   (hex)		Linxtek Co.
-0006B2     (base 16)		Linxtek Co.
-				2F Kum-a B/D 31-3 Karak-dong,
-				    138-160
-				KR
-
-00-06-B6   (hex)		Nir-Or Israel Ltd.
-0006B6     (base 16)		Nir-Or Israel Ltd.
-				11 Amal St.
-				    
-				IL
-
-00-06-84   (hex)		Biacore AB
-000684     (base 16)		Biacore AB
-				Software, Electronics and Optics
-				    
-				SE
-
-00-06-82   (hex)		Convedia
-000682     (base 16)		Convedia
-				4190 Still Creek Dr.
-				    V5C 6C6
-				CA
-
-00-05-E3   (hex)		LightSand Communications, Inc.
-0005E3     (base 16)		LightSand Communications, Inc.
-				375 Los Coches St.
-				Milpitas  CA  94539
-				US
-
-00-05-ED   (hex)		Technikum Joanneum GmbH
-0005ED     (base 16)		Technikum Joanneum GmbH
-				Alte Poststrasse 149
-				    
-				AT
-
-00-05-EF   (hex)		ADOIR Digital Technology
-0005EF     (base 16)		ADOIR Digital Technology
-				28 Fl, ZhaoFeng World Trade Bldg.
-				Shanghai  200050,  
-				CN
-
-00-06-00   (hex)		Toshiba Teli Corporation
-000600     (base 16)		Toshiba Teli Corporation
-				 4-7-1 Asahigaoka, Hino-Shi,
-				  Tokyo  191-0065
-				JP
-
-00-06-6B   (hex)		Sysmex Corporation
-00066B     (base 16)		Sysmex Corporation
-				4-4-4 Takatsukadai,
-				    651-2271
-				JP
-
-00-05-5A   (hex)		Power Dsine Ltd.
-00055A     (base 16)		Power Dsine Ltd.
-				1 Hanagar St., P.O. Box 7220
-				    
-				IL
-
-00-06-53   (hex)		Cisco Systems, Inc
-000653     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-06-4F   (hex)		PRO-NETS Technology Corporation
-00064F     (base 16)		PRO-NETS Technology Corporation
-				Pao-Chung Road,
-				Hsin Tien  Taipei,  
-				TW
-
-00-06-12   (hex)		Accusys, Inc.
-000612     (base 16)		Accusys, Inc.
-				5F, No. 38, Taiyuan St
-				Hsinchu County    30265
-				TW
-
-00-06-09   (hex)		Crossport Systems
-000609     (base 16)		Crossport Systems
-				10940 NE 33rd Place
-				Bellevue  WA  98005
-				US
-
-00-06-16   (hex)		Tel Net Co., Ltd.
-000616     (base 16)		Tel Net Co., Ltd.
-				3F BOF Bldg 730-15 Goje Song
-				    
-				KR
-
-00-06-0D   (hex)		Wave7 Optics
-00060D     (base 16)		Wave7 Optics
-				1075 Windward Ridge Pkwy.
-				Alpharetta  GA  30005
-				US
-
-00-06-4A   (hex)		Honeywell Co., Ltd. (KOREA)
-00064A     (base 16)		Honeywell Co., Ltd. (KOREA)
-				56, Chaam-dong, Chonan-city
-				    
-				KR
-
-00-06-3F   (hex)		Everex Communications Inc.
-00063F     (base 16)		Everex Communications Inc.
-				5020A Brandin Ct.
-				Fremont  CA  94538
-				US
-
-00-06-3D   (hex)		Microwave Data Systems Inc.
-00063D     (base 16)		Microwave Data Systems Inc.
-				175 Science Parkway
-				Rochester  NY  14620
-				US
-
-00-06-39   (hex)		Newtec
-000639     (base 16)		Newtec
-				Laarstraat 5
-				    
-				BE
-
-00-06-2F   (hex)		Pivotech Systems Inc.
-00062F     (base 16)		Pivotech Systems Inc.
-				200 Centennial Ave.,
-				Piscataway  NJ  08854
-				US
-
-00-06-36   (hex)		Jedai Broadband Networks
-000636     (base 16)		Jedai Broadband Networks
-				331 Newman Springs Rd.
-				Red Bank  NJ  07701
-				US
-
-00-06-51   (hex)		Aspen Networks Inc.
-000651     (base 16)		Aspen Networks Inc.
-				3777 Stevens Creek Blvd
-				Santa Clara  CA  95051
-				US
-
-00-06-5C   (hex)		Malachite Technologies, Inc.
-00065C     (base 16)		Malachite Technologies, Inc.
-				195 New Hampshire Avenue
-				Portsmouth  NH  03801
-				US
-
-00-06-42   (hex)		Genetel Systems Inc.
-000642     (base 16)		Genetel Systems Inc.
-				Mockwoo B/D, 912 Walpyoung-Dong
-				    302-852
-				KR
-
-00-05-E9   (hex)		Unicess Network, Inc.
-0005E9     (base 16)		Unicess Network, Inc.
-				870 Dorothy Dr. #708
-				Richardson  TX  75081
-				US
-
-00-05-E6   (hex)		Egenera, Inc.
-0005E6     (base 16)		Egenera, Inc.
-				165 Forest St.
-				Marlboro  MA  01752
-				US
-
-00-06-1E   (hex)		Maxan Systems
-00061E     (base 16)		Maxan Systems
-				1-84, Woulam-dong
-				    
-				KR
-
-00-06-22   (hex)		Chung Fu Chen Yeh Enterprise Corp.
-000622     (base 16)		Chung Fu Chen Yeh Enterprise Corp.
-				2F No. 666 Jing Ping Road,
-				Taipei Hsien    
-				TW
-
-00-05-88   (hex)		Sensoria Corp.
-000588     (base 16)		Sensoria Corp.
-				15950 Bernardo Ctr. Dr.
-				San Diego  CA  92127
-				US
-
-00-05-8D   (hex)		Lynx Photonic Networks, Inc.
-00058D     (base 16)		Lynx Photonic Networks, Inc.
-				13 Hamelaha St.
-				    
-				IL
-
-00-05-8A   (hex)		Netcom Co., Ltd.
-00058A     (base 16)		Netcom Co., Ltd.
-				1F, No. 7, Lane 242,
-				Taipei    
-				TW
-
-00-05-91   (hex)		Active Silicon Ltd
-000591     (base 16)		Active Silicon Ltd
-				Pinewood Mews
-				Iver    SL0 0NA
-				GB
-
-00-05-93   (hex)		Grammar Engine Inc.
-000593     (base 16)		Grammar Engine Inc.
-				921 Eastwind Drive
-				Westerville  OH  43081
-				US
-
-00-05-C7   (hex)		I/F-COM A/S
-0005C7     (base 16)		I/F-COM A/S
-				Ellegaardvej 36
-				    
-				DK
-
-00-05-CC   (hex)		Sumtel Communications, Inc.
-0005CC     (base 16)		Sumtel Communications, Inc.
-				1F, No. 173, Gung Yuan Road,
-				Hsinchu City    30054
-				TW
-
-00-05-CF   (hex)		Thunder River Technologies, Inc.
-0005CF     (base 16)		Thunder River Technologies, Inc.
-				23 Corporate Plaza Ste. 250
-				Newport Beach  CA  92660
-				US
-
-00-05-C6   (hex)		Triz Communications
-0005C6     (base 16)		Triz Communications
-				Anwon Bldg. 7th Fl.
-				Seoul    150-010
-				KR
-
-00-05-D6   (hex)		L-3 Linkabit
-0005D6     (base 16)		L-3 Linkabit
-				9890 Town Center Drive
-				San Diego  CA  92121
-				US
-
-00-05-DA   (hex)		Apex Automationstechnik
-0005DA     (base 16)		Apex Automationstechnik
-				Vossenkamp 4
-				    
-				DE
-
-00-05-A1   (hex)		Zenocom
-0005A1     (base 16)		Zenocom
-				No.402, 4th floor, Wongok Bldg.
-				Seoul    
-				KR
-
-00-05-A9   (hex)		Princeton Networks, Inc.
-0005A9     (base 16)		Princeton Networks, Inc.
-				100 Century Center Ct. #100
-				San Jose  CA  95112
-				US
-
-00-05-AF   (hex)		InnoScan Computing A/S
-0005AF     (base 16)		InnoScan Computing A/S
-				Soren Frichsvej 42R
-				    
-				DK
-
-00-05-A6   (hex)		Extron Electronics
-0005A6     (base 16)		Extron Electronics
-				1230 S. Lewis
-				Anahiem  CA  92805
-				US
-
-00-05-A0   (hex)		MOBILINE Kft.
-0005A0     (base 16)		MOBILINE Kft.
-				Lehel Utca 14
-				    H-1134
-				HU
-
-00-05-84   (hex)		AbsoluteValue Systems, Inc.
-000584     (base 16)		AbsoluteValue Systems, Inc.
-				715-D North Dr.
-				Melbourne  FL  32934
-				US
-
-00-05-8F   (hex)		CLCsoft co.
-00058F     (base 16)		CLCsoft co.
-				Dept. of Electrical Engineering
-				    
-				KR
-
-00-05-BB   (hex)		Myspace AB
-0005BB     (base 16)		Myspace AB
-				Sveavagen 33
-				    
-				SE
-
-00-05-17   (hex)		Shellcomm, Inc.
-000517     (base 16)		Shellcomm, Inc.
-				Rm #6122 ETRI TBI Center, 1,
-				    
-				KR
-
-00-05-1C   (hex)		Xnet Technology Corp.
-00051C     (base 16)		Xnet Technology Corp.
-				9F-16, No. 12, Lane 609,
-				    
-				TW
-
-00-04-F9   (hex)		Xtera Communications, Inc.
-0004F9     (base 16)		Xtera Communications, Inc.
-				500 W Bethany Drive
-				Allen  TX  75013
-				US
-
-00-04-FA   (hex)		NBS Technologies Inc.
-0004FA     (base 16)		NBS Technologies Inc.
-				703 Evans Avenue, Suite 400
-				Ontario    M9C 5E9
-				CA
-
-00-05-41   (hex)		Advanced Systems Co., Ltd.
-000541     (base 16)		Advanced Systems Co., Ltd.
-				2-9-7 Nishikicho,
-				    190-0022
-				JP
-
-00-05-45   (hex)		Internet Photonics
-000545     (base 16)		Internet Photonics
-				1030 Broad St., 2nd Floor
-				Shrewsbury  NJ  07702
-				US
-
-00-05-3A   (hex)		Willowglen Services Pte Ltd
-00053A     (base 16)		Willowglen Services Pte Ltd
-				151 Lorong Chuan,
-				    556741
-				SG
-
-00-05-31   (hex)		Cisco Systems, Inc
-000531     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-05-39   (hex)		A Brand New World in Sweden AB
-000539     (base 16)		A Brand New World in Sweden AB
-				Box 1223
-				    
-				SE
-
-00-05-2A   (hex)		Ikegami Tsushinki Co., Ltd.
-00052A     (base 16)		Ikegami Tsushinki Co., Ltd.
-				5-6-16 Ikegami Ohta-ku,
-				    146-8567
-				JP
-
-00-05-2D   (hex)		Zoltrix International Limited
-00052D     (base 16)		Zoltrix International Limited
-				Room 701 Po Hing Centre,
-				    
-				HK
-
-00-05-25   (hex)		Puretek Industrial Co., Ltd.
-000525     (base 16)		Puretek Industrial Co., Ltd.
-				No. 14, 4 Flr. Lane 235
-				    
-				TW
-
-00-05-58   (hex)		Synchronous, Inc.
-000558     (base 16)		Synchronous, Inc.
-				77 Las Colinas Lane
-				San Jose  CA  95119
-				US
-
-00-05-50   (hex)		Vcomms Connect Limited
-000550     (base 16)		Vcomms Connect Limited
-				75 The Esplanade, Level 3
-				Wellington Mail Centre 5045  Wellington  
-				NZ
-
-00-05-12   (hex)		Zebra Technologies Inc
-000512     (base 16)		Zebra Technologies Inc
-				475 Half Day Road
-				Lincolnshire  IL  60069
-				US
-
-00-05-03   (hex)		ICONAG
-000503     (base 16)		ICONAG
-				AM Bahnhof 2
-				    
-				DE
-
-00-05-7A   (hex)		Overture Networks
-00057A     (base 16)		Overture Networks
-				637 Davis Drive
-				Morrisville  NC  27560
-				US
-
-00-05-64   (hex)		Tsinghua Bitway Co., Ltd.
-000564     (base 16)		Tsinghua Bitway Co., Ltd.
-				12 Floor, Tower C, Corporate
-				    
-				CN
-
-00-04-F8   (hex)		QUALICABLE TV Industria E Com., Ltda
-0004F8     (base 16)		QUALICABLE TV Industria E Com., Ltda
-				Av. Joao Paulo Ablas, 308
-				    
-				BR
-
-00-04-F5   (hex)		SnowShore Networks, Inc.
-0004F5     (base 16)		SnowShore Networks, Inc.
-				285 Billerica Road
-				Chelmsford  MA  01824
-				US
-
-00-04-F2   (hex)		Polycom
-0004F2     (base 16)		Polycom
-				1000 West 14th Street
-				  Canada  V7P3P3
-				CA
-
-00-04-F3   (hex)		FS FORTH-SYSTEME GmbH
-0004F3     (base 16)		FS FORTH-SYSTEME GmbH
-				Küferstraße 8
-				    
-				DE
-
-00-04-ED   (hex)		Billion Electric Co., Ltd.
-0004ED     (base 16)		Billion Electric Co., Ltd.
-				8F, No.192, Sec.2, Chung Hsing Rd.,
-				Taiwan  Taiwan  ROC
-				TW
-
-00-04-E7   (hex)		Lightpointe Communications, Inc
-0004E7     (base 16)		Lightpointe Communications, Inc
-				10140 Barnes Canyon Road
-				San Diego  CA  92121
-				US
-
-00-04-E6   (hex)		Banyan Network Private Limited
-0004E6     (base 16)		Banyan Network Private Limited
-				443, 8th Floor, Guna Complex
-				    
-				IN
-
-00-04-DE   (hex)		Cisco Systems, Inc
-0004DE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-A2   (hex)		L.S.I. Japan Co., Ltd.
-0004A2     (base 16)		L.S.I. Japan Co., Ltd.
-				1-8-14 Sendagaya Shibuya-Ku
-				Tokyo  151-0051  
-				JP
-
-00-04-9B   (hex)		Cisco Systems, Inc
-00049B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-99   (hex)		Chino Corporation
-000499     (base 16)		Chino Corporation
-				1 Mori, Fujioka City,
-				  Zip:  375-8505
-				JP
-
-00-04-8E   (hex)		Ohm Tech Labs, Inc.
-00048E     (base 16)		Ohm Tech Labs, Inc.
-				141 Lanza Ave., B-12
-				Garfield  NJ  07026
-				US
-
-00-04-A6   (hex)		SAF Tehnika Ltd.
-0004A6     (base 16)		SAF Tehnika Ltd.
-				91 Dzirnavu Str.,
-				    
-				LV
-
-00-04-A8   (hex)		Broadmax Technologies, Inc.
-0004A8     (base 16)		Broadmax Technologies, Inc.
-				180, Wai Yip Street,
-				  HONG  KONG
-				HK
-
-00-04-A1   (hex)		Pathway Connectivity
-0004A1     (base 16)		Pathway Connectivity
-				1439-17 Avenue SE
-				Calgary  Alberta  T2G 1J9
-				CA
-
-00-04-CE   (hex)		Patria Ailon
-0004CE     (base 16)		Patria Ailon
-				Naulakatu 3
-				    
-				FI
-
-00-04-C7   (hex)		NetMount
-0004C7     (base 16)		NetMount
-				P.O.B. 2325
-				    
-				IL
-
-00-04-8D   (hex)		 Teo Technologies, Inc
-00048D     (base 16)		 Teo Technologies, Inc
-				11609 49th Place West
-				Mukilteo  WA  98275
-				US
-
-00-04-90   (hex)		Optical Access
-000490     (base 16)		Optical Access
-				P.O. Box 114
-				    
-				IL
-
-00-04-E1   (hex)		Infinior Microsystems
-0004E1     (base 16)		Infinior Microsystems
-				2F, Accufar Bldg, 234-10,
-				Seoul  KOREA  138-220
-				KR
-
-00-04-C2   (hex)		Magnipix, Inc.
-0004C2     (base 16)		Magnipix, Inc.
-				3539 St-Charles Blvd., Suite 212
-				  CANADA  H9H3C4
-				CA
-
-00-04-86   (hex)		ITTC, University of Kansas
-000486     (base 16)		ITTC, University of Kansas
-				2335 Irving Hill Rd.
-				Lawrence  KS  66045
-				US
-
-00-04-8B   (hex)		Poscon Corporation
-00048B     (base 16)		Poscon Corporation
-				#606 Ho-Dong, Nam Gu,
-				  SOUTH  KOREA
-				KR
-
-00-04-84   (hex)		Amann GmbH
-000484     (base 16)		Amann GmbH
-				Unteranger 6
-				    
-				DE
-
-00-04-78   (hex)		G. Star Technology Corporation
-000478     (base 16)		G. Star Technology Corporation
-				4th Floor, No. 118, Sector 2
-				Taipei City  Taipei City  TAIWAN
-				TW
-
-00-04-7A   (hex)		AXXESSIT ASA
-00047A     (base 16)		AXXESSIT ASA
-				AXXESSIT ASA HALDEN
-				    
-				NO
-
-00-04-6A   (hex)		Navini Networks
-00046A     (base 16)		Navini Networks
-				3605 E. Plano Pkwy,
-				Plano  TX  75074
-				US
-
-00-04-6B   (hex)		Palm Wireless, Inc.
-00046B     (base 16)		Palm Wireless, Inc.
-				48933 Warm Springs Blvd.
-				Fremont  CA  94539
-				US
-
-00-04-72   (hex)		Telelynx, Inc.
-000472     (base 16)		Telelynx, Inc.
-				3F-1, 66 Nankan Rd.,
-				    TAIWAN
-				TW
-
-00-04-64   (hex)		Pulse-Link Inc
-000464     (base 16)		Pulse-Link Inc
-				1934 Kellogg Avenue
-				Carlsbad  CA  92008
-				US
-
-00-04-65   (hex)		i.s.t isdn-support technik GmbH
-000465     (base 16)		i.s.t isdn-support technik GmbH
-				Rhein Strasse 7E
-				    
-				DE
-
-00-04-5E   (hex)		PolyTrax Information Technology AG
-00045E     (base 16)		PolyTrax Information Technology AG
-				Martin-Kollar - Str. 5
-				    
-				DE
-
-00-04-11   (hex)		Inkra Networks, Inc.
-000411     (base 16)		Inkra Networks, Inc.
-				40971 Encyclopedia Circle
-				Fremont  CA  94538
-				US
-
-00-04-10   (hex)		Spinnaker Networks, Inc.
-000410     (base 16)		Spinnaker Networks, Inc.
-				107 Gamma Drive
-				Pittsburgh  PA  15238
-				US
-
-00-04-12   (hex)		WaveSmith Networks, Inc.
-000412     (base 16)		WaveSmith Networks, Inc.
-				40 Nagog Park
-				Acton  MA  01720-3425
-				US
-
-00-04-42   (hex)		NACT
-000442     (base 16)		NACT
-				191 W. 5200 N.
-				Provo  UT  84604
-				US
-
-00-04-45   (hex)		LMS Skalar Instruments GmbH
-000445     (base 16)		LMS Skalar Instruments GmbH
-				Willi-Eichler-Str 11
-				    
-				DE
-
-00-04-4E   (hex)		Cisco Systems, Inc
-00044E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-52   (hex)		RocketLogix, Inc.
-000452     (base 16)		RocketLogix, Inc.
-				6504 International Parkway
-				Plano  TX  75093
-				US
-
-00-04-27   (hex)		Cisco Systems, Inc
-000427     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-04-20   (hex)		Slim Devices, Inc.
-000420     (base 16)		Slim Devices, Inc.
-				12 South First St.
-				San Jose  CA  95113
-				US
-
-00-04-3D   (hex)		INDEL AG
-00043D     (base 16)		INDEL AG
-				Tufiwis 26
-				    
-				CH
-
-00-04-3B   (hex)		Lava Computer Mfg., Inc.
-00043B     (base 16)		Lava Computer Mfg., Inc.
-				2 Vulcan St.
-				  CANADA  M9W-1L2
-				CA
-
-00-04-31   (hex)		GlobalStreams, Inc.
-000431     (base 16)		GlobalStreams, Inc.
-				2882 Prospect Park Drive
-				Rancho Cordova  CA  95670
-				US
-
-00-03-C4   (hex)		Tomra Systems ASA
-0003C4     (base 16)		Tomra Systems ASA
-				Drengsrudhagen 2
-				    
-				NO
-
-00-03-C5   (hex)		Mobotix AG
-0003C5     (base 16)		Mobotix AG
-				Wingertsweilerhof 6
-				    
-				DE
-
-00-03-BF   (hex)		Centerpoint Broadband Technologies, Inc.
-0003BF     (base 16)		Centerpoint Broadband Technologies, Inc.
-				1741 Technology Drive,
-				San Jose  CA  95110-1310
-				US
-
-00-03-B9   (hex)		Hualong Telecom Co., Ltd.
-0003B9     (base 16)		Hualong Telecom Co., Ltd.
-				9 Guanghua St.
-				  P.R.  
-				CN
-
-00-03-F9   (hex)		Pleiades Communications, Inc.
-0003F9     (base 16)		Pleiades Communications, Inc.
-				2830 Market Loop #104
-				South Lake  TX  76092
-				US
-
-00-03-FE   (hex)		Cisco Systems, Inc
-0003FE     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-F5   (hex)		Chip2Chip
-0003F5     (base 16)		Chip2Chip
-				2249 Zanker Rd.
-				San Jose  CA  95131
-				US
-
-00-03-91   (hex)		Advanced Digital Broadcast, Ltd.
-000391     (base 16)		Advanced Digital Broadcast, Ltd.
-				8F, 145 Chung Shan N. Rd. Sec. 2,
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-03-AC   (hex)		Fronius Schweissmaschinen
-0003AC     (base 16)		Fronius Schweissmaschinen
-				Günter Fronius-Straße 1
-				    
-				AT
-
-00-03-99   (hex)		Dongju Informations & Communications Co., Ltd.
-000399     (base 16)		Dongju Informations & Communications Co., Ltd.
-				#305, Eunsuk Bldg. Samsung-dong
-				Republic  of  KOREA
-				KR
-
-00-03-FD   (hex)		Cisco Systems, Inc
-0003FD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-BA   (hex)		Oracle Corporation
-0003BA     (base 16)		Oracle Corporation
-				17 Network Circle
-				Menlo Park  CA  95025
-				US
-
-00-03-AF   (hex)		Paragea Communications
-0003AF     (base 16)		Paragea Communications
-				207 Perry Parkway
-				Gaithersburg  MD  20877
-				US
-
-00-03-0B   (hex)		Hunter Technology, Inc.
-00030B     (base 16)		Hunter Technology, Inc.
-				1408, Woolim e-biz Center,
-				Seoul    135-270
-				KR
-
-00-03-C9   (hex)		TECOM Co., Ltd.
-0003C9     (base 16)		TECOM Co., Ltd.
-				23, R&D Road 2
-				Hsin-Chu    
-				TW
-
-00-03-C1   (hex)		Packet Dynamics Ltd
-0003C1     (base 16)		Packet Dynamics Ltd
-				2 Buckstane Park
-				UK  EH10  GPA
-				GB
-
-00-03-DE   (hex)		OTC Wireless
-0003DE     (base 16)		OTC Wireless
-				602 Charlot Ave.
-				San Jose  CA  95131
-				US
-
-00-03-28   (hex)		Mace Group, Inc.
-000328     (base 16)		Mace Group, Inc.
-				5101 Commerce Dr.
-				Baldwin Park  CA  91706
-				US
-
-00-03-2B   (hex)		GAI Datenfunksysteme GmbH
-00032B     (base 16)		GAI Datenfunksysteme GmbH
-				Riedleparkstraße 28
-				Friedrichshafen    88045
-				DE
-
-00-03-2C   (hex)		ABB Switzerland Ltd
-00032C     (base 16)		ABB Switzerland Ltd
-				Dept. ATEP
-				Austrasse    
-				CH
-
-00-03-23   (hex)		Cornet Technology, Inc.
-000323     (base 16)		Cornet Technology, Inc.
-				6800 Versar Center, Suite 216
-				Springfield  VA  22151-4147
-				US
-
-00-03-80   (hex)		SSH Communications Security Corp.
-000380     (base 16)		SSH Communications Security Corp.
-				Fredrikinkatu 42
-				    
-				FI
-
-00-03-82   (hex)		A-One Co., Ltd.
-000382     (base 16)		A-One Co., Ltd.
-				6-9-20, Shimoichiba-cho,
-				    
-				JP
-
-00-03-7A   (hex)		Taiyo Yuden Co., Ltd.
-00037A     (base 16)		Taiyo Yuden Co., Ltd.
-				8-1 Sakae-Cho
-				    
-				JP
-
-00-03-75   (hex)		NetMedia, Inc.
-000375     (base 16)		NetMedia, Inc.
-				10940 N. Stallard Place
-				Tuscon  AZ  85737
-				US
-
-00-03-5A   (hex)		Photron Limited
-00035A     (base 16)		Photron Limited
-				1-1-8, Fujimi,
-				Chiyoda-ku    102-0071
-				JP
-
-00-03-53   (hex)		Mitac, Inc.
-000353     (base 16)		Mitac, Inc.
-				No. 2, Chung-Hsiao Street
-				Chitu  Keelung,  
-				TW
-
-00-03-56   (hex)		Wincor Nixdorf International GmbH
-000356     (base 16)		Wincor Nixdorf International GmbH
-				Heinz-Nixdorf Ring 1
-				D-33106  Paderborn  
-				DE
-
-00-03-4F   (hex)		Sur-Gard Security
-00034F     (base 16)		Sur-Gard Security
-				401 Magnetic Drive
-				Ontario    M3J 3H9
-				CA
-
-00-03-7B   (hex)		IDEC IZUMI Corporation
-00037B     (base 16)		IDEC IZUMI Corporation
-				7-31, Nishimiyahara
-				    
-				JP
-
-00-03-67   (hex)		Jasmine Networks, Inc.
-000367     (base 16)		Jasmine Networks, Inc.
-				1940 Zanker Road
-				San Jose  CA  95112
-				US
-
-00-03-6A   (hex)		Mainnet, Ltd.
-00036A     (base 16)		Mainnet, Ltd.
-				P.O. Box 2324
-				    
-				IL
-
-00-03-6B   (hex)		Cisco Systems, Inc
-00036B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-6C   (hex)		Cisco Systems, Inc
-00036C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-8F   (hex)		Weinschel Corporation
-00038F     (base 16)		Weinschel Corporation
-				5305 Spectrum Drive
-				Frederick  MD  21703
-				US
-
-00-03-84   (hex)		AETA
-000384     (base 16)		AETA
-				Kepler 6
-				Le Plessis Robinson    92350
-				FR
-
-00-03-87   (hex)		Blaze Network Products
-000387     (base 16)		Blaze Network Products
-				5180 Hacienda Drive
-				Dublin  CA  94568
-				US
-
-00-03-81   (hex)		Ingenico International
-000381     (base 16)		Ingenico International
-				1/9 Apollo Street
-				    
-				AU
-
-00-03-40   (hex)		Floware Wireless Systems, Ltd.
-000340     (base 16)		Floware Wireless Systems, Ltd.
-				28 Hacharoshet Steet
-				    60250
-				IL
-
-00-01-EC   (hex)		Ericsson Group
-0001EC     (base 16)		Ericsson Group
-				Telefonaktiebolaget
-				    
-				SE
-
-00-03-33   (hex)		Digitel Co., Ltd.
-000333     (base 16)		Digitel Co., Ltd.
-				835-6, Yoksam-dong
-				    
-				KR
-
-00-03-38   (hex)		Oak Technology
-000338     (base 16)		Oak Technology
-				139 Kifer Court
-				Sunnyvale  CA  94086-5160
-				US
-
-00-03-39   (hex)		Eurologic Systems, Ltd.
-000339     (base 16)		Eurologic Systems, Ltd.
-				Clonshaugh Industrial Estate
-				Clonshaugh  Dublin 17  
-				IE
-
-00-03-31   (hex)		Cisco Systems, Inc
-000331     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-30   (hex)		Imagenics, Co., Ltd.
-000330     (base 16)		Imagenics, Co., Ltd.
-				1-31-5 Kokuryo-Cho
-				  182-0022  
-				JP
-
-00-03-4A   (hex)		RIAS Corporation
-00034A     (base 16)		RIAS Corporation
-				46600 Fremont Blvd.
-				Fremont  CA  94538
-				US
-
-00-02-CF   (hex)		ZyGate Communications, Inc.
-0002CF     (base 16)		ZyGate Communications, Inc.
-				2F, No.48, Lung-Chin Road
-				    
-				TW
-
-00-02-D1   (hex)		Vivotek, Inc.
-0002D1     (base 16)		Vivotek, Inc.
-				5F-1, 168-1, Lien-Chen Rd,
-				    
-				TW
-
-00-02-C2   (hex)		Net Vision Telecom
-0002C2     (base 16)		Net Vision Telecom
-				#206 Software Support Center
-				305-343  Rep.  of Korea
-				KR
-
-00-02-B6   (hex)		Acrosser Technology Co., Ltd.
-0002B6     (base 16)		Acrosser Technology Co., Ltd.
-				No. 116-2 Guang-Fu Rd.
-				Taipei  Taipei  R.O.C.
-				TW
-
-00-02-B1   (hex)		Anritsu, Ltd.
-0002B1     (base 16)		Anritsu, Ltd.
-				Rutherford Close
-				  UNITED  KINGDOM
-				GB
-
-00-02-AD   (hex)		HOYA Corporation
-0002AD     (base 16)		HOYA Corporation
-				2-7-5 Naka-Ochiai, Shinjuku-ku,
-				  Tokyo  161-8525
-				JP
-
-00-02-AE   (hex)		Scannex Electronics Ltd.
-0002AE     (base 16)		Scannex Electronics Ltd.
-				Unit 8 English Business Park
-				Hove    BN3 7ET
-				GB
-
-00-03-04   (hex)		Pacific Broadband Communications
-000304     (base 16)		Pacific Broadband Communications
-				3103 North First St.
-				San Jose  CA  95134
-				US
-
-00-03-01   (hex)		EXFO
-000301     (base 16)		EXFO
-				400 Godin Avenue
-				Quebec   G1M 2K2    
-				CA
-
-00-02-FD   (hex)		Cisco Systems, Inc
-0002FD     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-03-00   (hex)		Barracuda Networks, Inc.
-000300     (base 16)		Barracuda Networks, Inc.
-				3175 S. Winchester Blvd
-				Campbell  CA  95008
-				US
-
-00-02-BD   (hex)		Bionet Co., Ltd.
-0002BD     (base 16)		Bionet Co., Ltd.
-				3F, Medison Venture Tower,
-				    KOREA
-				KR
-
-00-02-BE   (hex)		Totsu Engineering, Inc.
-0002BE     (base 16)		Totsu Engineering, Inc.
-				 5-16-20 Roppongi Minato-ku
-				Tokyo    106-8551
-				JP
-
-00-02-B9   (hex)		Cisco Systems, Inc
-0002B9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-BA   (hex)		Cisco Systems, Inc
-0002BA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-F9   (hex)		MIMOS Berhad
-0002F9     (base 16)		MIMOS Berhad
-				Technology Park Malaysia
-				Kuala Lumpur    57000
-				MY
-
-00-02-F3   (hex)		Media Serve Co., Ltd.
-0002F3     (base 16)		Media Serve Co., Ltd.
-				Dongsung Bldg. #17-8, Youido-dong,
-				Seoul    
-				KR
-
-00-02-EA   (hex)		Focus Enhancements
-0002EA     (base 16)		Focus Enhancements
-				1370 Dell Ave.
-				Campbell  CA  95008
-				US
-
-00-03-13   (hex)		Access Media SPA
-000313     (base 16)		Access Media SPA
-				Via delle Industrie, 4/g
-				24035 LALLIO (BG)    
-				IT
-
-00-03-10   (hex)		E-Globaledge Corporation
-000310     (base 16)		E-Globaledge Corporation
-				7F Nakameguro GT Tower 
-				 Meduro-ku, Tokyo    153-0051
-				JP
-
-00-03-0A   (hex)		Argus Technologies
-00030A     (base 16)		Argus Technologies
-				8F, No. 183, Kang Chien Rd.
-				    114
-				TW
-
-00-03-1E   (hex)		Optranet, Inc.
-00031E     (base 16)		Optranet, Inc.
-				7041 Koll Center Pkwy
-				Pleasanton  CA  94566
-				US
-
-00-03-15   (hex)		Cidco Incorporated
-000315     (base 16)		Cidco Incorporated
-				220 Cochrane Circle
-				Morgan Hill  CA  95037
-				US
-
-00-03-19   (hex)		Infineon AG
-000319     (base 16)		Infineon AG
-				P.O. Box 800949
-				    
-				DE
-
-00-02-E7   (hex)		CAB GmbH & Co KG
-0002E7     (base 16)		CAB GmbH & Co KG
-				Wilhelm-Schickard-Str 14
-				    
-				DE
-
-00-02-DF   (hex)		Net Com Systems, Inc.
-0002DF     (base 16)		Net Com Systems, Inc.
-				15-3, Yoido-Dong,
-				Seoul    
-				KR
-
-00-02-DB   (hex)		NETSEC
-0002DB     (base 16)		NETSEC
-				13505 Dulles Technology Dr., Ste. 1
-				Herdon  VA  20171
-				US
-
-00-02-4B   (hex)		Cisco Systems, Inc
-00024B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-4D   (hex)		Mannesman Dematic Colby Pty. Ltd.
-00024D     (base 16)		Mannesman Dematic Colby Pty. Ltd.
-				24 Narabang Way
-				    
-				AU
-
-00-02-50   (hex)		Geyser Networks, Inc.
-000250     (base 16)		Geyser Networks, Inc.
-				535 Del Rey Avenue
-				Sunnyvale  CA  94086
-				US
-
-00-02-48   (hex)		Pilz GmbH & Co.
-000248     (base 16)		Pilz GmbH & Co.
-				Felix-Wankel-Straße 2
-				    
-				DE
-
-00-02-4C   (hex)		SiByte, Inc.
-00024C     (base 16)		SiByte, Inc.
-				2805 Bowers Avenue
-				Santa Clara  CA  95051-0917
-				US
-
-00-02-5A   (hex)		Catena Networks
-00025A     (base 16)		Catena Networks
-				307 Legget Drive
-				Canada  K2K  3C8
-				CA
-
-00-02-6E   (hex)		NeGeN Access, Inc.
-00026E     (base 16)		NeGeN Access, Inc.
-				33 Boston Post Rd. West
-				Marlborough  MA  01752
-				US
-
-00-02-70   (hex)		Crewave Co., Ltd.
-000270     (base 16)		Crewave Co., Ltd.
-				F7, Pureun Bldg., 28-1
-				Seoul  KOREA  137-030
-				KR
-
-00-02-3B   (hex)		Ericsson
-00023B     (base 16)		Ericsson
-				250 Holger Way
-				SAN JOSE  CA  95134
-				US
-
-00-02-39   (hex)		Visicom
-000239     (base 16)		Visicom
-				10052 Mesa Ridge Ct.
-				San Diego  CA  92121
-				US
-
-00-02-33   (hex)		Mantra Communications, Inc.
-000233     (base 16)		Mantra Communications, Inc.
-				12850 Middlebrook Road
-				Germantown  MD  20874
-				US
-
-00-02-A2   (hex)		Hilscher GmbH
-0002A2     (base 16)		Hilscher GmbH
-				Rheinstraße 15
-				    
-				DE
-
-00-02-54   (hex)		WorldGate
-000254     (base 16)		WorldGate
-				3190 Tremont Avenue
-				Trevose  PA  19053
-				US
-
-00-02-9A   (hex)		Storage Apps
-00029A     (base 16)		Storage Apps
-				3 Princess Road
-				Lawrenceville  NJ  08648
-				US
-
-00-02-8F   (hex)		Globetek, Inc.
-00028F     (base 16)		Globetek, Inc.
-				1607 Akron Peninsula Rd.
-				Akron  OH  44313-5190
-				US
-
-00-02-87   (hex)		Adapcom
-000287     (base 16)		Adapcom
-				172-A Component Drive
-				San Jose  CA  95131
-				US
-
-00-02-81   (hex)		Madge Ltd.
-000281     (base 16)		Madge Ltd.
-				Madge House
-				Maindenhead  Berkshire  SL6 2HP
-				GB
-
-00-02-63   (hex)		UPS Manufacturing SRL
-000263     (base 16)		UPS Manufacturing SRL
-				Via Giordano, 54
-				  Verona  
-				IT
-
-00-02-40   (hex)		Seedek Co., Ltd.
-000240     (base 16)		Seedek Co., Ltd.
-				#709, 1638-32, Sammo
-				    KOREA
-				KR
-
-00-01-F3   (hex)		QPS, Inc.
-0001F3     (base 16)		QPS, Inc.
-				8015 E. Crystal Drive
-				Anaheim  CA  92807
-				US
-
-00-01-E4   (hex)		Sitera, Inc.
-0001E4     (base 16)		Sitera, Inc.
-				1820 Lefthand Circle
-				Longmont  CO  80501
-				US
-
-00-01-E3   (hex)		Siemens AG
-0001E3     (base 16)		Siemens AG
-				Schlavenhorst 88
-				    
-				DE
-
-00-01-EB   (hex)		C-COM Corporation
-0001EB     (base 16)		C-COM Corporation
-				3F, No. 48, Park Ave. II SBIP
-				Hsinchu Taiwan  Hsinchu Taiwan  R.O.C.
-				TW
-
-00-01-F2   (hex)		Mark of the Unicorn, Inc.
-0001F2     (base 16)		Mark of the Unicorn, Inc.
-				1280 Massachusetts Ave.
-				Cambridge  MA  02138
-				US
-
-00-01-D9   (hex)		Sigma, Inc.
-0001D9     (base 16)		Sigma, Inc.
-				32-3 Seijyo 9 Chome
-				    
-				JP
-
-00-01-C5   (hex)		Simpler Networks
-0001C5     (base 16)		Simpler Networks
-				555 Dr Frederick Philips
-				  H4M  2X4
-				CA
-
-00-01-C9   (hex)		Cisco Systems, Inc
-0001C9     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-02-1B   (hex)		Kollmorgen-Servotronix
-00021B     (base 16)		Kollmorgen-Servotronix
-				POB 3919, Petach Tikya
-				  49130  
-				IL
-
-00-02-1E   (hex)		SIMTEL S.R.L.
-00021E     (base 16)		SIMTEL S.R.L.
-				Via Bonifacio Lupi, 25
-				    
-				IT
-
-00-02-21   (hex)		DSP Application, Ltd.
-000221     (base 16)		DSP Application, Ltd.
-				12F-12, No. 79, Sec. 1 Hsin Tai Wu Rd.
-				    TAIWAN
-				TW
-
-00-01-F7   (hex)		Image Display Systems, Inc.
-0001F7     (base 16)		Image Display Systems, Inc.
-				46560 Fremont Blvd.
-				Fremont  CA  94538
-				US
-
-00-02-00   (hex)		Net & Sys Co., Ltd.
-000200     (base 16)		Net & Sys Co., Ltd.
-				Kuro Hitech Industrial Complex 304,
-				    KOREA
-				KR
-
-00-01-C4   (hex)		NeoWave, Inc.
-0001C4     (base 16)		NeoWave, Inc.
-				10th KRIHS Bldg. 1591-6
-				  SOUTH  KOREA
-				KR
-
-00-01-C1   (hex)		Vitesse Semiconductor Corporation
-0001C1     (base 16)		Vitesse Semiconductor Corporation
-				Hoerkaer 18
-				    
-				DK
-
-00-01-D8   (hex)		Teltronics, Inc.
-0001D8     (base 16)		Teltronics, Inc.
-				4125 Keller Springs Road
-				Addison  TX  25001
-				US
-
-00-02-05   (hex)		Hitachi Denshi, Ltd.
-000205     (base 16)		Hitachi Denshi, Ltd.
-				32 Miyaki-cho Kodaira-shi
-				  JAPAN  187-8511
-				JP
-
-00-02-15   (hex)		Cotas Computer Technology A/B
-000215     (base 16)		Cotas Computer Technology A/B
-				Paludan-Mullers Vej 82
-				    
-				DK
-
-00-02-2A   (hex)		Asound Electronic
-00022A     (base 16)		Asound Electronic
-				Xianxi Industries Zone Changan Town
-				    
-				CN
-
-00-01-8C   (hex)		Mega Vision
-00018C     (base 16)		Mega Vision
-				5765 Thornwood Drive
-				Goleta  CA  93117
-				US
-
-00-01-8F   (hex)		Kenetec, Inc.
-00018F     (base 16)		Kenetec, Inc.
-				115 Hurley Road
-				Oxford  CT  06748
-				US
-
-00-01-7B   (hex)		Heidelberger Druckmaschinen AG
-00017B     (base 16)		Heidelberger Druckmaschinen AG
-				Kurfürsten-Anlage  52-60
-				    
-				DE
-
-00-01-9C   (hex)		JDS Uniphase Inc.
-00019C     (base 16)		JDS Uniphase Inc.
-				570 West Hunt Club Road
-				    
-				CA
-
-00-01-A3   (hex)		GENESYS LOGIC, INC.
-0001A3     (base 16)		GENESYS LOGIC, INC.
-				10F, No. 11, Ln.3.,
-				    
-				TW
-
-00-01-82   (hex)		DICA TECHNOLOGIES AG
-000182     (base 16)		DICA TECHNOLOGIES AG
-				Rotherstr, 19
-				    
-				DE
-
-00-01-89   (hex)		Refraction Technology, Inc.
-000189     (base 16)		Refraction Technology, Inc.
-				2626 Lombardy Lane - Ste. #105
-				Dallas  TX  75220
-				US
-
-00-01-93   (hex)		Hanbyul Telecom Co., Ltd.
-000193     (base 16)		Hanbyul Telecom Co., Ltd.
-				5th Fl. Oksan Bldg.
-				    KOREA
-				KR
-
-00-30-F5   (hex)		Wild Lab. Ltd.
-0030F5     (base 16)		Wild Lab. Ltd.
-				1-33-17-604 Harayama
-				Urawa City Saitama prif.  336-0931  
-				JP
-
-00-01-5D   (hex)		Oracle Corporation 
-00015D     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-00-01-73   (hex)		AMCC
-000173     (base 16)		AMCC
-				6290 Sequence Drive
-				San Diego  CA  92121
-				US
-
-00-01-6C   (hex)		FOXCONN
-00016C     (base 16)		FOXCONN
-				105 S Puente St.
-				Brea  CA  92821
-				US
-
-00-01-75   (hex)		Radiant Communications Corp.
-000175     (base 16)		Radiant Communications Corp.
-				5001 Hadley Road
-				South Plainfield  NJ  07080
-				US
-
-00-01-AF   (hex)		Artesyn Embedded Technologies
-0001AF     (base 16)		Artesyn Embedded Technologies
-				2900 S. Diablo Way
-				Tempe  AZ  85282
-				US
-
-00-01-8A   (hex)		ROI COMPUTER AG
-00018A     (base 16)		ROI COMPUTER AG
-				Werner-von-Siemens-Str. 1
-				    
-				DE
-
-00-01-92   (hex)		Texas Digital Systems
-000192     (base 16)		Texas Digital Systems
-				400 Technology Parkway
-				College Station  TX  77845
-				US
-
-00-01-5C   (hex)		CADANT INC.
-00015C     (base 16)		CADANT INC.
-				4343 Commerce Court - Ste. #207
-				Lisle  IL  60532
-				US
-
-00-01-69   (hex)		Celestix Networks Pte Ltd.
-000169     (base 16)		Celestix Networks Pte Ltd.
-				18 Tannery Lane #05-03
-				  SINGAPORE  347780
-				SG
-
-00-01-6B   (hex)		LightChip, Inc.
-00016B     (base 16)		LightChip, Inc.
-				5 Industrial Way
-				Salem  NH  03079
-				US
-
-00-01-B6   (hex)		SAEJIN T&M Co., Ltd.
-0001B6     (base 16)		SAEJIN T&M Co., Ltd.
-				2nd Fl., Saejin Bldg., 689
-				    KOREA
-				KR
-
-00-01-AB   (hex)		Main Street Networks
-0001AB     (base 16)		Main Street Networks
-				4030 Moorpark Ave.
-				San Jose  CA  95117-1849
-				US
-
-00-01-45   (hex)		WINSYSTEMS, INC.
-000145     (base 16)		WINSYSTEMS, INC.
-				715 Stadium Drive
-				Arlington  TX  76011
-				US
-
-00-01-37   (hex)		IT Farm Corporation
-000137     (base 16)		IT Farm Corporation
-				Asashiseimei Fuchu Bldg. 11F
-				  183-0055  
-				JP
-
-00-01-3C   (hex)		TIW SYSTEMS
-00013C     (base 16)		TIW SYSTEMS
-				2211 Lawson Lane
-				Santa Clara  CA  95054
-				US
-
-00-01-33   (hex)		KYOWA Electronic Instruments C
-000133     (base 16)		KYOWA Electronic Instruments C
-				3-5-1, Cyofugaoka
-				Cyofu  Tokyo  
-				JP
-
-00-01-A5   (hex)		Nextcomm, Inc.
-0001A5     (base 16)		Nextcomm, Inc.
-				12413 Willows Road NE - Ste. #210
-				Kirkland  WA  98034
-				US
-
-00-01-90   (hex)		SMK-M
-000190     (base 16)		SMK-M
-				1055 Tierra Del Rey
-				Chula Vista  CA  91910
-				US
-
-00-01-4C   (hex)		Berkeley Process Control
-00014C     (base 16)		Berkeley Process Control
-				4124 Lakeside Dr
-				Richmond  CA  94806
-				US
-
-00-01-43   (hex)		Cisco Systems, Inc
-000143     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-01-4B   (hex)		Ennovate Networks, Inc.
-00014B     (base 16)		Ennovate Networks, Inc.
-				60 Codman Hill Road
-				Boxborough  MA  01719
-				US
-
-00-01-3D   (hex)		RiscStation Ltd.
-00013D     (base 16)		RiscStation Ltd.
-				168 Elliott Street
-				  UNITED  KINGDOM
-				GB
-
-00-01-20   (hex)		OSCILLOQUARTZ S.A.
-000120     (base 16)		OSCILLOQUARTZ S.A.
-				Rue Des Brevards 16
-				2002 Neuchatel    
-				CH
-
-00-30-46   (hex)		Controlled Electronic Manageme
-003046     (base 16)		Controlled Electronic Manageme
-				Unit 4 Ravenhill Business Park
-				Belfast    
-				IE
-
-00-30-98   (hex)		Global Converging Technologies
-003098     (base 16)		Global Converging Technologies
-				1800 Preston Park Blvd.
-				Plano  TX  75093
-				US
-
-00-30-0D   (hex)		MMC Technology, Inc.
-00300D     (base 16)		MMC Technology, Inc.
-				#1502, Seoul Venture Town, Aju Bldg
-				Seoul 135-080    
-				KR
-
-00-30-75   (hex)		ADTECH
-003075     (base 16)		ADTECH
-				RUE DU VAL ST LAMBERT 191 / i
-				 SERAING    4100
-				BE
-
-00-B0-69   (hex)		Honewell Oy
-00B069     (base 16)		Honewell Oy
-				P.O. Box 168, FIN-78201
-				    
-				FI
-
-00-B0-C2   (hex)		Cisco Systems, Inc
-00B0C2     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-B0-3B   (hex)		HiQ Networks
-00B03B     (base 16)		HiQ Networks
-				2475 Augustine Drive
-				Santa Clara  CA  95054
-				US
-
-00-01-27   (hex)		OPEN Networks Pty Ltd
-000127     (base 16)		OPEN Networks Pty Ltd
-				Level 5, 342 Flinders Street
-				Melbourne    VIC 3000
-				AU
-
-00-01-0E   (hex)		Bri-Link Technologies Co., Ltd
-00010E     (base 16)		Bri-Link Technologies Co., Ltd
-				2F, No. 63, Chow-Tze Street
-				Taipei 114    
-				TW
-
-00-30-37   (hex)		Packard Bell Nec Services
-003037     (base 16)		Packard Bell Nec Services
-				299 avenue Patton, BP 645
-				49006 Angers Cedex 01    
-				FR
-
-00-30-57   (hex)		QTelNet, Inc.
-003057     (base 16)		QTelNet, Inc.
-				400 - 3115 12th Street NE
-				Calgary  Alberta  T2E 7J2
-				CA
-
-00-30-FC   (hex)		Terawave Communications, Inc.
-0030FC     (base 16)		Terawave Communications, Inc.
-				30695 Huntwood Avenue
-				Hayward  CA  94544
-				US
-
-00-B0-86   (hex)		LocSoft Limited
-00B086     (base 16)		LocSoft Limited
-				7 Bright Street
-				Clitheroe  Lancashire  BB7 1NW
-				GB
-
-00-30-A2   (hex)		Lightner Engineering
-0030A2     (base 16)		Lightner Engineering
-				8551 La Jolla Shores Dr
-				La Jolla  CA  92037
-				US
-
-00-30-42   (hex)		DeTeWe-Deutsche Telephonwerke
-003042     (base 16)		DeTeWe-Deutsche Telephonwerke
-				Zeughofstrasse 1
-				D-10997 Berlin    
-				DE
-
-00-B0-C7   (hex)		Tellabs Operations, Inc.
-00B0C7     (base 16)		Tellabs Operations, Inc.
-				One Tellabs Center
-				Naperville  IL  60563
-				US
-
-00-B0-2A   (hex)		ORSYS GmbH
-00B02A     (base 16)		ORSYS GmbH
-				Am Stadtgraben 25
-				D-88677 Markdorf    
-				DE
-
-00-01-04   (hex)		DVICO Co., Ltd.
-000104     (base 16)		DVICO Co., Ltd.
-				Kookmin Card B/D 6F 267-2
-				Sungnam-si Kyungki-do 463-050    
-				KR
-
-00-01-06   (hex)		Tews Datentechnik GmbH
-000106     (base 16)		Tews Datentechnik GmbH
-				Am Bahnhof 7
-				25469 Halstenbek    
-				DE
-
-00-01-09   (hex)		Nagano Japan Radio Co., Ltd.
-000109     (base 16)		Nagano Japan Radio Co., Ltd.
-				Shimohigano 1163, Inasato-machi
-				Nagano 381-2288    
-				JP
-
-00-02-9C   (hex)		3COM
-00029C     (base 16)		3COM
-				405 SPRING HILL ROAD
-				SHARON  NH  03458
-				US
-
-00-B0-19   (hex)		UTC CCS
-00B019     (base 16)		UTC CCS
-				791 Commerce Blvd
-				Boca Raton  FL  33497
-				US
-
-00-30-6F   (hex)		SEYEON TECH. CO., LTD.
-00306F     (base 16)		SEYEON TECH. CO., LTD.
-				NAMCHEON BLDG. 6F,
-				  KOREA  135-280
-				KR
-
-00-30-3D   (hex)		IVA CORPORATION
-00303D     (base 16)		IVA CORPORATION
-				142 NORTH RD STE R
-				SUDBURY  MA  01776
-				US
-
-00-30-F4   (hex)		STARDOT TECHNOLOGIES
-0030F4     (base 16)		STARDOT TECHNOLOGIES
-				6820-H ORANGE THORPE AVE.
-				BUENA PARK  CA  90620
-				US
-
-00-30-52   (hex)		ELASTIC NETWORKS
-003052     (base 16)		ELASTIC NETWORKS
-				6120 WINDWARD PARKWAY -STE#100
-				ALPHARETTA  GA  30005
-				US
-
-00-30-19   (hex)		Cisco Systems, Inc
-003019     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-76   (hex)		Akamba Corporation
-003076     (base 16)		Akamba Corporation
-				15595 Los Gatos Blvd.
-				Los Gatos  CA  95032
-				US
-
-00-30-EC   (hex)		BORGARDT
-0030EC     (base 16)		BORGARDT
-				DIESELSTR. 15
-				    
-				DE
-
-00-30-F3   (hex)		At Work Computers
-0030F3     (base 16)		At Work Computers
-				P.O. Box 947
-				Corvallis  OR  97339
-				US
-
-00-30-CC   (hex)		Tenor Networks, Inc.
-0030CC     (base 16)		Tenor Networks, Inc.
-				100 Nagog Park
-				Acton  MA  01720-3409
-				US
-
-00-30-B0   (hex)		Convergenet Technologies
-0030B0     (base 16)		Convergenet Technologies
-				2222 Trade Zone Boulevard
-				San Jose  CA  95131
-				US
-
-00-30-EB   (hex)		TURBONET COMMUNICATIONS, INC.
-0030EB     (base 16)		TURBONET COMMUNICATIONS, INC.
-				19F-1, NO. 171, SUNG-TEH ROAD
-				TAIPEI    
-				TW
-
-00-30-A1   (hex)		WEBGATE Inc.
-0030A1     (base 16)		WEBGATE Inc.
-				4F, Pika Bldg., 894-20, Hoyke 2-dong
-				Anyang-Si  Kyunggi-Do  
-				KR
-
-00-30-6A   (hex)		PENTA MEDIA CO., LTD.
-00306A     (base 16)		PENTA MEDIA CO., LTD.
-				E-504 Bundang Technopark,151
-				Seongnam  Gyeonggi-do  
-				KR
-
-00-30-86   (hex)		Transistor Devices, Inc.
-003086     (base 16)		Transistor Devices, Inc.
-				36A Newburgh Road
-				Hackettstown  NJ  07840
-				US
-
-00-30-44   (hex)		CradlePoint, Inc
-003044     (base 16)		CradlePoint, Inc
-				805 W. Franklin St.
-				Boise  ID  83702
-				US
-
-00-30-C2   (hex)		COMONE
-0030C2     (base 16)		COMONE
-				Parc De Marticot
-				33610 Cestas    
-				FR
-
-00-30-53   (hex)		Basler AG
-003053     (base 16)		Basler AG
-				An Der Strusbek 60-62
-				22926 Ahrensburg    
-				DE
-
-00-30-D2   (hex)		WIN TECHNOLOGIES, CO., LTD.
-0030D2     (base 16)		WIN TECHNOLOGIES, CO., LTD.
-				4F-6, No. 81, Sec. 1
-				Taipei    
-				TW
-
-00-30-97   (hex)		AB Regin
-003097     (base 16)		AB Regin
-				Box 366
-				SE-26123  Landskrona  
-				SE
-
-00-30-5F   (hex)		Hasselblad
-00305F     (base 16)		Hasselblad
-				Hejrevej 30
-				Copenhagen  NV  DK-2400
-				DK
-
-00-30-DC   (hex)		RIGHTECH CORPORATION
-0030DC     (base 16)		RIGHTECH CORPORATION
-				4F, NO. 351, CHUNG-SHUN RD.
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-30-25   (hex)		CHECKOUT COMPUTER SYSTEMS, LTD
-003025     (base 16)		CHECKOUT COMPUTER SYSTEMS, LTD
-				TOWNSEND FARM ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-30-12   (hex)		DIGITAL ENGINEERING LTD.
-003012     (base 16)		DIGITAL ENGINEERING LTD.
-				2 TRENCH ROAD, MALLUSK
-				  NORTHERN  
-				IE
-
-00-30-C6   (hex)		CONTROL SOLUTIONS, INC.
-0030C6     (base 16)		CONTROL SOLUTIONS, INC.
-				201 85TH AVENUE NW
-				MINNEAPOLIS  MN  55433
-				US
-
-00-30-D6   (hex)		MSC VERTRIEBS GMBH
-0030D6     (base 16)		MSC VERTRIEBS GMBH
-				INDUSTRIESTR. 16
-				    
-				DE
-
-00-30-41   (hex)		SAEJIN T & M CO., LTD.
-003041     (base 16)		SAEJIN T & M CO., LTD.
-				2ND FL., SAEJIN BLDG. 689
-				  135-230  KOREA
-				KR
-
-00-30-8C   (hex)		Quantum Corporation
-00308C     (base 16)		Quantum Corporation
-				10125 Federal Drive
-				Colorado Springs  CO  80908
-				US
-
-00-30-E3   (hex)		SEDONA NETWORKS CORP.
-0030E3     (base 16)		SEDONA NETWORKS CORP.
-				10A HEARST WAY
-				CANADA  K2L  2P4
-				CA
-
-00-30-BF   (hex)		MULTIDATA GMBH
-0030BF     (base 16)		MULTIDATA GMBH
-				Dieburger Str. 96a
-				    
-				DE
-
-00-D0-0F   (hex)		SPEECH DESIGN GMBH
-00D00F     (base 16)		SPEECH DESIGN GMBH
-				INDUSTRIESTR. 1
-				    
-				DE
-
-00-30-58   (hex)		API MOTION
-003058     (base 16)		API MOTION
-				45 HAZELWOOD DRIVE
-				AMHERST  NY  14228
-				US
-
-00-30-34   (hex)		SET ENGINEERING
-003034     (base 16)		SET ENGINEERING
-				15750 VINEYARD BLVD. STE. #100
-				MORGAN HILL  CA  95037
-				US
-
-00-30-4A   (hex)		Fraunhofer IPMS
-00304A     (base 16)		Fraunhofer IPMS
-				Maria-Reiche-Strasse 2
-				Dresden    01109
-				DE
-
-00-30-8D   (hex)		Pinnacle Systems, Inc.
-00308D     (base 16)		Pinnacle Systems, Inc.
-				Frankfurter Str. 3c
-				D-38122  Braunschweig  
-				DE
-
-00-30-A6   (hex)		VIANET TECHNOLOGIES, LTD.
-0030A6     (base 16)		VIANET TECHNOLOGIES, LTD.
-				8 HACHARASH STREET
-				    
-				IL
-
-00-D0-BF   (hex)		PIVOTAL TECHNOLOGIES
-00D0BF     (base 16)		PIVOTAL TECHNOLOGIES
-				70 S. LAKE AVENUE - STE. #900
-				PASADENA  CA  91101
-				US
-
-00-30-3C   (hex)		ONNTO CORP.
-00303C     (base 16)		ONNTO CORP.
-				12F-2,  NO. 161
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-30-24   (hex)		Cisco Systems, Inc
-003024     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-30-F6   (hex)		SECURELOGIX CORPORATION
-0030F6     (base 16)		SECURELOGIX CORPORATION
-				13750 SAN PEDRO
-				SAN ANTONIO  TX  78232
-				US
-
-00-D0-2F   (hex)		VLSI TECHNOLOGY INC.
-00D02F     (base 16)		VLSI TECHNOLOGY INC.
-				8375 S. RIVER PARKWAY
-				TEMPE  AZ  85284
-				US
-
-00-30-D8   (hex)		SITEK
-0030D8     (base 16)		SITEK
-				VIA MONTE FIORINO 9
-				    
-				IT
-
-00-30-16   (hex)		ISHIDA CO., LTD.
-003016     (base 16)		ISHIDA CO., LTD.
-				959-1 SHIMOMAGARI
-				    
-				JP
-
-00-D0-B1   (hex)		OMEGA ELECTRONICS SA
-00D0B1     (base 16)		OMEGA ELECTRONICS SA
-				ROUTE DE SOLEURE 68
-				    
-				CH
-
-00-D0-16   (hex)		SCM MICROSYSTEMS, INC.
-00D016     (base 16)		SCM MICROSYSTEMS, INC.
-				160 KNOWLES DRIVE
-				LOS GATOS  CA  95032
-				US
-
-00-D0-43   (hex)		ZONAL RETAIL DATA SYSTEMS
-00D043     (base 16)		ZONAL RETAIL DATA SYSTEMS
-				24 FORTH STREET
-				    SCOTLAND
-				GB
-
-00-D0-C1   (hex)		HARMONIC DATA SYSTEMS, LTD.
-00D0C1     (base 16)		HARMONIC DATA SYSTEMS, LTD.
-				10 BEIT SHAMAI STREET
-				  ISRAEL  67018
-				IL
-
-00-D0-AC   (hex)		Commscope, Inc
-00D0AC     (base 16)		Commscope, Inc
-				140 Vista Centre Drive
-				Forest  VA  24551
-				US
-
-00-D0-7C   (hex)		KOYO ELECTRONICS INC. CO.,LTD.
-00D07C     (base 16)		KOYO ELECTRONICS INC. CO.,LTD.
-				1-171 TENJIN-CHO KODAIRA
-				    
-				JP
-
-00-D0-BC   (hex)		Cisco Systems, Inc
-00D0BC     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-CB   (hex)		DASAN CO., LTD.
-00D0CB     (base 16)		DASAN CO., LTD.
-				DASAN Tower 7F, 49 Daewangpangyo-ro644beon-gil
-				Seonggnam-Si  Gyeoenggi-do  463-4000
-				KR
-
-00-D0-19   (hex)		DAINIPPON SCREEN CORPORATE
-00D019     (base 16)		DAINIPPON SCREEN CORPORATE
-				REPRESENTATIVES OF AMERICA,INC
-				IRVINE  CA  92614
-				US
-
-00-D0-35   (hex)		BEHAVIOR TECH. COMPUTER CORP.
-00D035     (base 16)		BEHAVIOR TECH. COMPUTER CORP.
-				20F-B, No.98, Sec. 1,
-				Sijhih City  Taipei County  22102
-				TW
-
-00-D0-DB   (hex)		MCQUAY INTERNATIONAL
-00D0DB     (base 16)		MCQUAY INTERNATIONAL
-				13600 INDUSTRIAL PARK BLVD.
-				MINNEAPOLIS  MN  55441
-				US
-
-00-D0-70   (hex)		LONG WELL ELECTRONICS CORP.
-00D070     (base 16)		LONG WELL ELECTRONICS CORP.
-				4F, NO. 59-1, TSAO DI WEI
-				TAIWAN 222  TAIWAN 222  R.O.C.
-				TW
-
-00-D0-29   (hex)		WAKEFERN FOOD CORPORATION
-00D029     (base 16)		WAKEFERN FOOD CORPORATION
-				230 RARITAN CENTER PARKWAY
-				EDISON  NJ  08837
-				US
-
-00-D0-C3   (hex)		VIVID TECHNOLOGY PTE, LTD.
-00D0C3     (base 16)		VIVID TECHNOLOGY PTE, LTD.
-				1003 BUKIT MERAH CENTRAL
-				    
-				SG
-
-00-D0-13   (hex)		PRIMEX AEROSPACE COMPANY
-00D013     (base 16)		PRIMEX AEROSPACE COMPANY
-				P.O. BOX 97009
-				REDMOND  WA  98073-9709
-				US
-
-00-D0-A3   (hex)		VOCAL DATA, INC.
-00D0A3     (base 16)		VOCAL DATA, INC.
-				1701 N GREENVILLE #304
-				RICHARDSON  TX  75081
-				US
-
-00-D0-7E   (hex)		KEYCORP LTD.
-00D07E     (base 16)		KEYCORP LTD.
-				P.O. BOX 199
-				    
-				AU
-
-00-D0-20   (hex)		AIM SYSTEM, INC.
-00D020     (base 16)		AIM SYSTEM, INC.
-				4TH FLOOR CHUNGWOO B/D 219-1
-				    KOREA
-				KR
-
-00-D0-C8   (hex)		Prevas A/S
-00D0C8     (base 16)		Prevas A/S
-				Lyskær 3EF
-				DK-2730  Herlev  
-				DK
-
-00-50-17   (hex)		RSR S.R.L.
-005017     (base 16)		RSR S.R.L.
-				VIA SINIGAGLIA, 38
-				  22075  
-				IT
-
-00-50-65   (hex)		TDK-Lambda Corporation
-005065     (base 16)		TDK-Lambda Corporation
-				36-1 Kasuminosato
-				Ami-Machi  Inashiki-Gun Ibaraki,  300-0396
-				JP
-
-00-50-B9   (hex)		XITRON TECHNOLOGIES, INC.
-0050B9     (base 16)		XITRON TECHNOLOGIES, INC.
-				6295-D FERRIS SQUARE
-				SAN DIEGO  CA  92121
-				US
-
-00-50-6B   (hex)		SPX-ATEG
-00506B     (base 16)		SPX-ATEG
-				802 S. MAIN STREET
-				WAYLAND  MI  49348
-				US
-
-00-D0-76   (hex)		Bank of America
-00D076     (base 16)		Bank of America
-				1100 Merrill Drive
-				Pennington  NJ  08534
-				US
-
-00-D0-51   (hex)		O2 MICRO, INC.
-00D051     (base 16)		O2 MICRO, INC.
-				2901 TASMAN DRIVE, STE.#205
-				SANTA CLARA  CA  95054
-				US
-
-00-D0-BB   (hex)		Cisco Systems, Inc
-00D0BB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-6E   (hex)		TRENDVIEW RECORDERS LTD.
-00D06E     (base 16)		TRENDVIEW RECORDERS LTD.
-				4 AIRFIELD WAY
-				  UNITED  KINGDOM
-				GB
-
-00-D0-5C   (hex)		KATHREIN TechnoTrend GmbH
-00D05C     (base 16)		KATHREIN TechnoTrend GmbH
-				Ing.- Anton-Kathrein Str. 2
-				    
-				DE
-
-00-D0-EA   (hex)		NEXTONE COMMUNICATIONS, INC.
-00D0EA     (base 16)		NEXTONE COMMUNICATIONS, INC.
-				9700 GREAT SENECA HGHWY
-				ROCKVILLE  MD  20850
-				US
-
-00-D0-64   (hex)		MULTITEL
-00D064     (base 16)		MULTITEL
-				2905 RUE DE CELLES
-				CANADA  CANADA  G2C-1W7
-				CA
-
-00-D0-5E   (hex)		STRATABEAM TECHNOLOGY, INC.
-00D05E     (base 16)		STRATABEAM TECHNOLOGY, INC.
-				1943 LANDINGS DRIVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-D0-AA   (hex)		CHASE COMMUNICATIONS
-00D0AA     (base 16)		CHASE COMMUNICATIONS
-				ST. LEONARDS ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-D0-5D   (hex)		INTELLIWORXX, INC.
-00D05D     (base 16)		INTELLIWORXX, INC.
-				1819 MAIN STREET,  STE #1101
-				SARASOTA  FL  34236
-				US
-
-00-D0-A1   (hex)		OSKAR VIERLING GMBH + CO. KG
-00D0A1     (base 16)		OSKAR VIERLING GMBH + CO. KG
-				PRETZFELDER STR. 21
-				    
-				DE
-
-00-D0-06   (hex)		Cisco Systems, Inc
-00D006     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-2A   (hex)		Voxent Systems Ltd.
-00D02A     (base 16)		Voxent Systems Ltd.
-				Unit 2, Rowan House
-				Chippenham  Wiltshire  SN14 0SQ
-				GB
-
-00-D0-8F   (hex)		ARDENT TECHNOLOGIES, INC.
-00D08F     (base 16)		ARDENT TECHNOLOGIES, INC.
-				250 N. WOLFE ROAD
-				SUNNYVALE  CA  94086
-				US
-
-00-D0-FA   (hex)		Thales e-Security Ltd.
-00D0FA     (base 16)		Thales e-Security Ltd.
-				Meadow View House, Crendon Industrial Estate
-				Aylesbury  Buckinghamshire  HP18 9EQ
-				GB
-
-00-D0-EB   (hex)		LIGHTERA NETWORKS, INC.
-00D0EB     (base 16)		LIGHTERA NETWORKS, INC.
-				10201 BUBB ROAD
-				CUPERTINO  CA  95014
-				US
-
-00-50-A1   (hex)		CARLO GAVAZZI, INC.
-0050A1     (base 16)		CARLO GAVAZZI, INC.
-				222 PENNBRIGHT DR. - STE.#210
-				HOUSTON  TX  77090
-				US
-
-00-D0-C0   (hex)		Cisco Systems, Inc
-00D0C0     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-D0-68   (hex)		IWILL CORPORATION
-00D068     (base 16)		IWILL CORPORATION
-				NO.10, WU-CHUAN 3 RD,
-				    TAIWAN
-				TW
-
-00-50-29   (hex)		1394 PRINTER WORKING GROUP
-005029     (base 16)		1394 PRINTER WORKING GROUP
-				P.O. BOX 23158
-				SAN JOSE  CA  95153
-				US
-
-00-50-81   (hex)		MURATA MACHINERY, LTD.
-005081     (base 16)		MURATA MACHINERY, LTD.
-				136, TAKEDA-MUKAISHIRO-CHO
-				FUSHIMI-KU, KYOTO 612-8686    
-				JP
-
-00-50-AC   (hex)		MAPLE COMPUTER CORPORATION
-0050AC     (base 16)		MAPLE COMPUTER CORPORATION
-				2F, NO. 184, SEC. 2
-				Taipei    
-				TJ
-
-00-50-49   (hex)		Arbor Networks Inc
-005049     (base 16)		Arbor Networks Inc
-				6 Omni Way
-				Chelmsford  MA  01824
-				US
-
-00-50-0D   (hex)		SATORI ELECTORIC CO., LTD.
-00500D     (base 16)		SATORI ELECTORIC CO., LTD.
-				TIGUSADAI 38-8  MIDORI-KU
-				YOKOHAMA, KANAGAWA    
-				JP
-
-00-50-A3   (hex)		TransMedia Communications, Inc.
-0050A3     (base 16)		TransMedia Communications, Inc.
-				20 GREAT OAKS BLVD., #210
-				SAN JOSE  CA  95119
-				US
-
-00-50-A4   (hex)		IO TECH, INC.
-0050A4     (base 16)		IO TECH, INC.
-				25971 CANNON ROAD
-				CLEVELAND  OH  44146
-				US
-
-00-50-5C   (hex)		TUNDO CORPORATION
-00505C     (base 16)		TUNDO CORPORATION
-				7 GIBOREI ISRAEL STREET
-				    
-				IL
-
-00-50-B3   (hex)		VOICEBOARD CORPORATION
-0050B3     (base 16)		VOICEBOARD CORPORATION
-				3151 WEST FIFTH STREET
-				OXNARD  CA  93030
-				US
-
-00-50-8C   (hex)		RSI SYSTEMS
-00508C     (base 16)		RSI SYSTEMS
-				5555 W. 78TH STREET, Suite F
-				EDINA  MN  55439
-				US
-
-00-50-E1   (hex)		NS TECH ELECTRONICS SDN BHD
-0050E1     (base 16)		NS TECH ELECTRONICS SDN BHD
-				No. 37, Lorong 23, Geylang
-				Singapore 388371    
-				SG
-
-00-50-DE   (hex)		SIGNUM SYSTEMS CORP.
-0050DE     (base 16)		SIGNUM SYSTEMS CORP.
-				1211 Flynn Rd,
-				Camarillo  CA  93021
-				US
-
-00-50-75   (hex)		KESTREL SOLUTIONS
-005075     (base 16)		KESTREL SOLUTIONS
-				2370 CHARLESTON ROAD
-				MT. VIEW  CA  94043
-				US
-
-00-50-ED   (hex)		ANDA NETWORKS
-0050ED     (base 16)		ANDA NETWORKS
-				2921 COPPER ROAD
-				SANTA CLARA  CA  95051
-				US
-
-00-50-96   (hex)		SALIX TECHNOLOGIES, INC.
-005096     (base 16)		SALIX TECHNOLOGIES, INC.
-				904 WIND RIVER LANE- STE. #101
-				GAITHERSBURG  MD  20878
-				US
-
-00-50-12   (hex)		CBL - GMBH
-005012     (base 16)		CBL - GMBH
-				DARMSTAEDTER STR. 81
-				D-64839 MUENSTER    
-				DE
-
-00-50-F2   (hex)		MICROSOFT CORP.
-0050F2     (base 16)		MICROSOFT CORP.
-				ONE MICROSOFT WAY
-				REDMOND  WA  98052-6399
-				US
-
-00-50-4A   (hex)		ELTECO A.S.
-00504A     (base 16)		ELTECO A.S.
-				ROSINSKA CESTA  P.O. BOX C-9
-				    
-				SK
-
-00-50-C1   (hex)		GEMFLEX NETWORKS, LTD.
-0050C1     (base 16)		GEMFLEX NETWORKS, LTD.
-				230-6651 FRASERWOOD PL.
-				CANADA  V6W  1J3
-				CA
-
-00-50-CF   (hex)		VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE
-0050CF     (base 16)		VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE
-				210 YADI OFFICE BUILDING
-				BEIJING 100088    
-				CN
-
-00-50-24   (hex)		NAVIC SYSTEMS, INC.
-005024     (base 16)		NAVIC SYSTEMS, INC.
-				74 CRESCENT STREET
-				  NEEDHAM  MA
-				US
-
-00-90-BD   (hex)		OMNIA COMMUNICATIONS, INC.
-0090BD     (base 16)		OMNIA COMMUNICATIONS, INC.
-				100 NICKERSON ROAD
-				MARLBOROUGH  MA  01752
-				US
-
-00-90-B4   (hex)		WILLOWBROOK TECHNOLOGIES
-0090B4     (base 16)		WILLOWBROOK TECHNOLOGIES
-				7120 HAYVENHURST AVE.-STE.#401
-				VAN NUYS  CA  91406
-				US
-
-00-90-03   (hex)		APLIO
-009003     (base 16)		APLIO
-				18 Avenue Du 8 Mai 1945
-				    
-				FR
-
-00-90-31   (hex)		MYSTICOM, LTD.
-009031     (base 16)		MYSTICOM, LTD.
-				P.O. 8364
-				NATANIA 42504    
-				IL
-
-00-90-9D   (hex)		NovaTech Process Solutions, LLC
-00909D     (base 16)		NovaTech Process Solutions, LLC
-				11500 Cronridge Drive
-				Owings Mills  MD  21117
-				US
-
-00-90-DD   (hex)		MIHARU COMMUNICATIONS Inc
-0090DD     (base 16)		MIHARU COMMUNICATIONS Inc
-				
-				KANAGAWA    
-				JP
-
-00-90-28   (hex)		NIPPON SIGNAL CO., LTD.
-009028     (base 16)		NIPPON SIGNAL CO., LTD.
-				11 HIRAIDE-KOGIO-DANCHI
-				UISUNOMIYA TOCHIGI 321-8651    
-				JP
-
-00-90-7D   (hex)		Lake Communications
-00907D     (base 16)		Lake Communications
-				1 Westbrook, Milton Road
-				    
-				IE
-
-00-90-C9   (hex)		DPAC Technologies
-0090C9     (base 16)		DPAC Technologies
-				7321 Lincoln Way
-				Garden Grove  CA  92841
-				US
-
-00-50-7B   (hex)		MERLOT COMMUNICATIONS
-00507B     (base 16)		MERLOT COMMUNICATIONS
-				BERKSHIRE CORPORATE PARK
-				BETHEL  CT  06801
-				US
-
-00-50-CD   (hex)		DIGIANSWER A/S
-0050CD     (base 16)		DIGIANSWER A/S
-				SKALHUSE 5
-				    
-				DK
-
-00-50-2D   (hex)		ACCEL, INC.
-00502D     (base 16)		ACCEL, INC.
-				1F, NO. 7, R&D 1ST ROAD
-				HSINCHU    
-				TW
-
-00-50-3A   (hex)		DATONG ELECTRONICS LTD.
-00503A     (base 16)		DATONG ELECTRONICS LTD.
-				CLAYTON WOOD CLOSE
-				Leeds LS16 6QE    
-				GB
-
-00-50-87   (hex)		TERASAKI ELECTRIC CO., LTD.
-005087     (base 16)		TERASAKI ELECTRIC CO., LTD.
-				7-2-10 HANNAN-CHO ABENO-KU
-				OSAKA, 545-0021    
-				JP
-
-00-50-26   (hex)		COSYSTEMS, INC.
-005026     (base 16)		COSYSTEMS, INC.
-				1263 OAKMEAD PARKWAY
-				SUNNYVALE  CA  94086
-				US
-
-00-90-2C   (hex)		DATA & CONTROL EQUIPMENT LTD.
-00902C     (base 16)		DATA & CONTROL EQUIPMENT LTD.
-				COUNTY FARM, WENDOVER RD.
-				BUCKS. HP22 STA    
-				GB
-
-00-90-1D   (hex)		PEC (NZ) LTD.
-00901D     (base 16)		PEC (NZ) LTD.
-				2 STATION ROAD
-				MARTON    
-				NZ
-
-00-90-97   (hex)		Sycamore Networks
-009097     (base 16)		Sycamore Networks
-				220 Mill Rd
-				Chelmsford  MA  01824
-				US
-
-00-90-25   (hex)		BAE Systems Australia (Electronic Systems) Pty Ltd
-009025     (base 16)		BAE Systems Australia (Electronic Systems) Pty Ltd
-				2 Second Ave
-				Mawson Lakes  South Australia  5095
-				AU
-
-00-90-4C   (hex)		Epigram, Inc.
-00904C     (base 16)		Epigram, Inc.
-				870 West Maude Ave.
-				Sunnyvale  CA  94086
-				US
-
-00-90-84   (hex)		ATECH SYSTEM
-009084     (base 16)		ATECH SYSTEM
-				4F DAEBOONG BLDG. 1451-78
-				 SEOUL  137-070    
-				KR
-
-00-90-6A   (hex)		TURNSTONE SYSTEMS, INC.
-00906A     (base 16)		TURNSTONE SYSTEMS, INC.
-				274 Ferguson Drive
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-90-87   (hex)		ITIS
-009087     (base 16)		ITIS
-				CENTRE ESPACE PERFORMANCE
-				35769 SAINT-GREGOIRE CEDEX    
-				FR
-
-00-90-51   (hex)		ULTIMATE TECHNOLOGY CORP.
-009051     (base 16)		ULTIMATE TECHNOLOGY CORP.
-				100 RAWSON ROAD
-				VICTOR  NY  14564
-				US
-
-00-90-26   (hex)		ADVANCED SWITCHING COMMUNICATIONS, INC.
-009026     (base 16)		ADVANCED SWITCHING COMMUNICATIONS, INC.
-				8330 BOONE BOULEVARD--5TH FL.
-				VIENNA  VA  22182
-				US
-
-00-90-D3   (hex)		GIESECKE & DEVRIENT GmbH
-0090D3     (base 16)		GIESECKE & DEVRIENT GmbH
-				PRINZREGENTENSTRASSE 159
-				D-81677  MUNCHEN    
-				DE
-
-00-90-67   (hex)		WalkAbout Computers, Inc.
-009067     (base 16)		WalkAbout Computers, Inc.
-				2655 N. OCEAN DRIVE--STE. #510
-				SINGER ISLAND  FL  33404
-				US
-
-00-90-2A   (hex)		COMMUNICATION DEVICES, INC.
-00902A     (base 16)		COMMUNICATION DEVICES, INC.
-				85 Fulton Street
-				Boonton  NJ  07005-1912
-				US
-
-00-90-0D   (hex)		Overland Storage Inc.
-00900D     (base 16)		Overland Storage Inc.
-				9112 Spectrum Center Blvd
-				SAN DIEGO  CA  92123
-				US
-
-00-90-CF   (hex)		NORTEL
-0090CF     (base 16)		NORTEL
-				250 SIDNEY STREET
-				Belleville  Ontario K8N 5B7  
-				CA
-
-00-90-72   (hex)		SIMRAD AS
-009072     (base 16)		SIMRAD AS
-				P.O. BOX 111
-				  3191 HORTEN  
-				NO
-
-00-90-2F   (hex)		NETCORE SYSTEMS, INC.
-00902F     (base 16)		NETCORE SYSTEMS, INC.
-				187 BALLARDVALE STREET
-				WILMINGTON  MA  01887
-				US
-
-00-90-98   (hex)		SBC DESIGNS, INC.
-009098     (base 16)		SBC DESIGNS, INC.
-				3077-H LEEMAN FERRY ROAD
-				HUNTSVILLE  AL  35801
-				US
-
-00-90-45   (hex)		Marconi Communications
-009045     (base 16)		Marconi Communications
-				1000 Fore Drive
-				Warrendale  PA  15086-7502
-				US
-
-00-90-36   (hex)		ens, inc.
-009036     (base 16)		ens, inc.
-				P.O. BOX 19207
-				RALEIGH  NC  27619
-				US
-
-00-90-8B   (hex)		Tattile SRL
-00908B     (base 16)		Tattile SRL
-				2600 Fernbrook Lane
-				Plymouth  MN  55447
-				US
-
-00-90-44   (hex)		ASSURED DIGITAL, INC.
-009044     (base 16)		ASSURED DIGITAL, INC.
-				9-11 GOLDSMITH ST.
-				LITTLETON  MA  01460
-				US
-
-00-90-91   (hex)		DigitalScape, Inc.
-009091     (base 16)		DigitalScape, Inc.
-				6 MORGAN  - STE.#100
-				IRVINE  CA  92618
-				US
-
-00-90-7E   (hex)		VETRONIX CORP.
-00907E     (base 16)		VETRONIX CORP.
-				2030 ALAMEDE PADRE SERRA
-				SANTA BARBARA  CA  93103
-				US
-
-00-90-50   (hex)		Teleste Corporation
-009050     (base 16)		Teleste Corporation
-				Telestenkatu 1
-				LITTOINEN    FI-20660
-				FI
-
-00-90-4D   (hex)		SPEC S.A.
-00904D     (base 16)		SPEC S.A.
-				CASP 172 3-B
-				08013 BARCELONA    
-				ES
-
-00-90-FD   (hex)		CopperCom, Inc.
-0090FD     (base 16)		CopperCom, Inc.
-				3255-1 SCOTT BLVD.,--STE.#103
-				SANTA CLARA  CA  95054
-				US
-
-00-90-39   (hex)		SHASTA NETWORKS
-009039     (base 16)		SHASTA NETWORKS
-				249 HUMBOLDT COURT
-				SUNNYVALE  CA  94089-1300
-				US
-
-00-90-FC   (hex)		NETWORK COMPUTING DEVICES
-0090FC     (base 16)		NETWORK COMPUTING DEVICES
-				301 RAVENDALE DRIVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-90-14   (hex)		ROTORK INSTRUMENTS, LTD.
-009014     (base 16)		ROTORK INSTRUMENTS, LTD.
-				CHAUL END LANE
-				LU4 8EZ  England  
-				GB
-
-00-90-8D   (hex)		VICKERS ELECTRONICS SYSTEMS
-00908D     (base 16)		VICKERS ELECTRONICS SYSTEMS
-				1151 W. MASON-MORROW RD.
-				LEBANON  OH  45036
-				US
-
-00-90-42   (hex)		ECCS, Inc.
-009042     (base 16)		ECCS, Inc.
-				ONE SHEILA DRIVE
-				TINTON FALLS  NJ  07724
-				US
-
-00-90-33   (hex)		INNOVAPHONE AG
-009033     (base 16)		INNOVAPHONE AG
-				Boeblinger Str. 76
-				SINDELFINGEN    D71065
-				DE
-
-00-90-02   (hex)		ALLGON AB
-009002     (base 16)		ALLGON AB
-				GARDATORGET 1
-				412 50 GOTEBORG    
-				SE
-
-00-10-D4   (hex)		STORAGE COMPUTER CORPORATION
-0010D4     (base 16)		STORAGE COMPUTER CORPORATION
-				11 RIVERSIDE STREET
-				NASHUA  NH  03062
-				US
-
-00-06-29   (hex)		IBM Corp
-000629     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-10-A9   (hex)		ADHOC TECHNOLOGIES
-0010A9     (base 16)		ADHOC TECHNOLOGIES
-				1150 FIRST STREET
-				SAN JOSE  CA  95112
-				US
-
-00-10-8A   (hex)		TeraLogic, Inc.
-00108A     (base 16)		TeraLogic, Inc.
-				707 CALIFORNIA STREET
-				MOUNTAIN VIEW  CA  94041
-				US
-
-00-10-24   (hex)		NAGOYA ELECTRIC WORKS CO., LTD
-001024     (base 16)		NAGOYA ELECTRIC WORKS CO., LTD
-				29-1 SHINODA, MIWA-CHO
-				AMA-GUN, AICHI 490-12    
-				JP
-
-00-10-D6   (hex)		Exelis
-0010D6     (base 16)		Exelis
-				7310 Innovation Blvd., M/S 536
-				Ft Wayne  IN  46818
-				US
-
-00-10-48   (hex)		HTRC AUTOMATION, INC.
-001048     (base 16)		HTRC AUTOMATION, INC.
-				285 LAVAL STREET
-				QUEBEC J0B 1H0    
-				CA
-
-00-10-97   (hex)		WinNet Metropolitan Communications Systems, Inc.
-001097     (base 16)		WinNet Metropolitan Communications Systems, Inc.
-				661 EAST ARQUES AVE.
-				SUNNYVALE  CA  94086
-				US
-
-00-10-85   (hex)		POLARIS COMMUNICATIONS, INC.
-001085     (base 16)		POLARIS COMMUNICATIONS, INC.
-				10200 SW ALLEN BLVD.
-				BEAVERTON  OR  97005
-				US
-
-00-10-0C   (hex)		ITO CO., LTD.
-00100C     (base 16)		ITO CO., LTD.
-				8-2 MIYANOSHITA-CHO
-				HIRAKATA-CITY, OSAKA    
-				JP
-
-00-10-06   (hex)		Thales Contact Solutions Ltd.
-001006     (base 16)		Thales Contact Solutions Ltd.
-				Tolbar Way
-				Southampton, SO30 2ZP    
-				GB
-
-00-90-09   (hex)		I Controls, Inc.
-009009     (base 16)		I Controls, Inc.
-				2nd Fl, I'Park 302, 11 Jeongja-Dong,
-				Seongnam  Gyeonggi-Do  463-859
-				KR
-
-00-90-8E   (hex)		Nortel Networks Broadband Access
-00908E     (base 16)		Nortel Networks Broadband Access
-				39660 Eureka Drive
-				Newark  CA  94560
-				US
-
-00-90-7C   (hex)		DIGITALCAST, INC.
-00907C     (base 16)		DIGITALCAST, INC.
-				503, ILKWANG BLDG., 1656-2
-				SEOCHO-KU   SEOUL  
-				KR
-
-00-01-FE   (hex)		DIGITAL EQUIPMENT CORPORATION
-0001FE     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				301 ROCKRIMMON BLVD, SOUTH
-				COLORADO SPRINGS  CO  80919
-				US
-
-00-90-BE   (hex)		IBC/INTEGRATED BUSINESS COMPUTERS
-0090BE     (base 16)		IBC/INTEGRATED BUSINESS COMPUTERS
-				2685 C PARK CENTER DRIVE
-				SIMI VALLEY  CA  93065
-				US
-
-00-10-3C   (hex)		IC ENSEMBLE, INC.
-00103C     (base 16)		IC ENSEMBLE, INC.
-				3255-2 SCOTT BLVD.--STE.#105
-				SANTA CLARA  CA  95054
-				US
-
-00-10-19   (hex)		SIRONA DENTAL SYSTEMS GmbH & Co. KG
-001019     (base 16)		SIRONA DENTAL SYSTEMS GmbH & Co. KG
-				FABRIKSTRASSE 31
-				64625 BENSHEIM    
-				DE
-
-00-90-DE   (hex)		CARDKEY SYSTEMS, INC.
-0090DE     (base 16)		CARDKEY SYSTEMS, INC.
-				1757 TAPO CANYON ROAD
-				SIMI VALLEY  CA  93063
-				US
-
-00-90-6B   (hex)		APPLIED RESOURCES, INC.
-00906B     (base 16)		APPLIED RESOURCES, INC.
-				9821 WIDMER ROAD
-				LENEXA  KS  66215-1239
-				US
-
-00-10-E2   (hex)		ArrayComm, Inc.
-0010E2     (base 16)		ArrayComm, Inc.
-				3141 ZANKER ROAD
-				SAN JOSE  CA  95134
-				US
-
-00-10-D2   (hex)		NITTO TSUSHINKI CO., LTD
-0010D2     (base 16)		NITTO TSUSHINKI CO., LTD
-				7-27-11, TODOROKI, SETAGAYA-KU
-				TOKYO 151    
-				JP
-
-00-10-D9   (hex)		IBM JAPAN, FUJISAWA MT+D
-0010D9     (base 16)		IBM JAPAN, FUJISAWA MT+D
-				KIRIHARA-CHO 1, FUJISAWA CITY
-				KANAGAWA 252    
-				JP
-
-00-90-66   (hex)		Troika Networks, Inc.
-009066     (base 16)		Troika Networks, Inc.
-				2829 Townsgate Road,
-				Westlake Village  CA  91361
-				US
-
-00-10-94   (hex)		Performance Analysis Broadband, Spirent plc
-001094     (base 16)		Performance Analysis Broadband, Spirent plc
-				27349 Agoura Road
-				Calabasas Hills  CA  91301
-				US
-
-00-10-50   (hex)		RION CO., LTD.
-001050     (base 16)		RION CO., LTD.
-				3-20-41 HIGASHIMOTOMACHI
-				KOKUBUNJI, TOKYO 185    
-				JP
-
-00-10-9C   (hex)		M-SYSTEM CO., LTD.
-00109C     (base 16)		M-SYSTEM CO., LTD.
-				1-1-25 SHIN URASHIMA CHOU
-				 YOKOHAMA 221    
-				JP
-
-00-10-CE   (hex)		VOLAMP, LTD.
-0010CE     (base 16)		VOLAMP, LTD.
-				UNIT 3 RIVERSIDE BUSINESS PARK
-				FARNHAM, SURREY  ENGLAND  
-				GB
-
-00-10-B2   (hex)		COACTIVE AESTHETICS
-0010B2     (base 16)		COACTIVE AESTHETICS
-				4000 BRIDGEWAY - STE. #303
-				SAUSALITA  CA  94965
-				US
-
-00-10-5F   (hex)		ZODIAC DATA SYSTEMS
-00105F     (base 16)		ZODIAC DATA SYSTEMS
-				5 Av Des Andes
-				Les Ulis    91940
-				FR
-
-00-10-3E   (hex)		NETSCHOOLS CORPORATION
-00103E     (base 16)		NETSCHOOLS CORPORATION
-				2003 LANDINGS DRIVE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-10-CB   (hex)		FACIT K.K.
-0010CB     (base 16)		FACIT K.K.
-				HIMEI NIHOMBASHI BLDG. 3F
-				CHUO-KU, TOKYO 103    
-				JP
-
-00-10-E0   (hex)		Oracle Corporation 
-0010E0     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-00-10-7C   (hex)		P-COM, INC.
-00107C     (base 16)		P-COM, INC.
-				3175 S. WINCHESTER BLVD.
-				CAMPBELL  CA  95008
-				US
-
-00-10-BD   (hex)		THE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)
-0010BD     (base 16)		THE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)
-				1-1-12 Shiba Kouen, Minato-ku
-				MINATO-KU,    TOKYO  105-0011
-				JP
-
-00-10-08   (hex)		VIENNA SYSTEMS CORPORATION
-001008     (base 16)		VIENNA SYSTEMS CORPORATION
-				6651 FRASERWOOD PLACE
-				RICHMOND, B.C. V6W 1J3    
-				CA
-
-00-10-D1   (hex)		Top Layer Networks, Inc.
-0010D1     (base 16)		Top Layer Networks, Inc.
-				4 MECHANIC ST.- STE#212
-				NATICK  MA  01760
-				US
-
-00-10-6A   (hex)		DIGITAL MICROWAVE CORPORATION
-00106A     (base 16)		DIGITAL MICROWAVE CORPORATION
-				170 ROSE ORCHARD WAY
-				SAN JOSE  CA  95134
-				US
-
-00-10-6F   (hex)		TRENTON TECHNOLOGY INC.
-00106F     (base 16)		TRENTON TECHNOLOGY INC.
-				2350 CENTENNIAL DRIVE
-				GAINESVILLE  GA  30504
-				US
-
-00-10-34   (hex)		GNP Computers
-001034     (base 16)		GNP Computers
-				555 E.Huntington Drive
-				Monrovia  CA  91016
-				US
-
-00-10-44   (hex)		InnoLabs Corporation
-001044     (base 16)		InnoLabs Corporation
-				2F-4, NO. 16, LANE 609, CHUNG-HSIN RD.
-				Taipei Hsien    
-				TW
-
-00-10-A1   (hex)		KENDIN SEMICONDUCTOR, INC.
-0010A1     (base 16)		KENDIN SEMICONDUCTOR, INC.
-				1550 S. BASCOM AVE., STE. #250
-				CAMPBELL  CA  95008
-				US
-
-00-10-A8   (hex)		RELIANCE COMPUTER CORP.
-0010A8     (base 16)		RELIANCE COMPUTER CORP.
-				3032 BUNKER HILL LANE
-				SANTA CLARA  CA  95054
-				US
-
-00-10-6E   (hex)		TADIRAN COM. LTD.
-00106E     (base 16)		TADIRAN COM. LTD.
-				26 HASHOFTIM ST.
-				HOLON  58102    
-				IL
-
-00-10-9A   (hex)		NETLINE
-00109A     (base 16)		NETLINE
-				7, Rue de Bievres
-				92140 CLAMART    
-				FR
-
-00-10-89   (hex)		WebSonic
-001089     (base 16)		WebSonic
-				3466 EDWARD AVE.
-				SANTA CLARA  CA  95054
-				US
-
-00-10-E6   (hex)		APPLIED INTELLIGENT SYSTEMS, INC.
-0010E6     (base 16)		APPLIED INTELLIGENT SYSTEMS, INC.
-				3923 RANCHERO DRIVE
-				ANN ARBOR  MI  48108
-				US
-
-00-10-3B   (hex)		HIPPI NETWORKING FORUM
-00103B     (base 16)		HIPPI NETWORKING FORUM
-				PO BOX 10173
-				ALBUQUERQUE  NM  87184-0173
-				US
-
-00-E0-83   (hex)		JATO TECHNOLOGIES, INC.
-00E083     (base 16)		JATO TECHNOLOGIES, INC.
-				505 EAST HUNTLAND DR. STE #550
-				AUSTIN  TX  78752
-				US
-
-00-E0-72   (hex)		LYNK
-00E072     (base 16)		LYNK
-				RABIN BUILDING
-				D.N. MISGAV 201    
-				IL
-
-00-E0-AD   (hex)		EES TECHNOLOGY, LTD.
-00E0AD     (base 16)		EES TECHNOLOGY, LTD.
-				25 EASTWAYS
-				WITHAM, ESSEX, CM8 3AL    
-				GB
-
-00-E0-94   (hex)		OSAI SRL
-00E094     (base 16)		OSAI SRL
-				VIA TORINO
-				603-IVREA (TO)    
-				IT
-
-00-E0-32   (hex)		MISYS FINANCIAL SYSTEMS, LTD.
-00E032     (base 16)		MISYS FINANCIAL SYSTEMS, LTD.
-				BUCKHOLT DRIVE,
-				WARNDON, WORCESTER WR49SR    
-				GB
-
-00-E0-C0   (hex)		SEIWA ELECTRIC MFG. CO., LTD.
-00E0C0     (base 16)		SEIWA ELECTRIC MFG. CO., LTD.
-				86 TARADA SHIN-IKE,
-				KYOTO PREFECTURE    
-				JP
-
-00-E0-D1   (hex)		TELSIS LIMITED
-00E0D1     (base 16)		TELSIS LIMITED
-				16 BARNES WALLACE ROAD
-				FAREHAM, HAMPSHIRE PO15 5TT  ENGLAND  
-				GB
-
-00-E0-F0   (hex)		ABLER TECHNOLOGY, INC.
-00E0F0     (base 16)		ABLER TECHNOLOGY, INC.
-				4F, NO. 54  SEC. 4
-				TAIPEI    
-				TW
-
-00-E0-02   (hex)		CROSSROADS SYSTEMS, INC.
-00E002     (base 16)		CROSSROADS SYSTEMS, INC.
-				9390 RESEARCH BLVD.
-				AUSTIN  TX  78759
-				US
-
-00-E0-D6   (hex)		COMPUTER & COMMUNICATION RESEARCH LAB.
-00E0D6     (base 16)		COMPUTER & COMMUNICATION RESEARCH LAB.
-				
-				CHUTUNG, HSINCHU    
-				TW
-
-00-E0-74   (hex)		TIERNAN COMMUNICATIONS, INC.
-00E074     (base 16)		TIERNAN COMMUNICATIONS, INC.
-				11025 ROSELLE ST.
-				SAN DIEGO  CA  92121
-				US
-
-00-E0-D9   (hex)		TAZMO CO., LTD.
-00E0D9     (base 16)		TAZMO CO., LTD.
-				6186 KINOKO, IBARA-SHI
-				OKAYAMA 715    
-				JP
-
-00-E0-55   (hex)		INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A.
-00E055     (base 16)		INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A.
-				CL. PIQUER NO.3
-				28033 MADRID    
-				ES
-
-00-E0-B4   (hex)		TECHNO SCOPE CO., LTD.
-00E0B4     (base 16)		TECHNO SCOPE CO., LTD.
-				13-6-7 KISHIMATI URAWASI
-				SAITAMA 336    
-				JP
-
-00-E0-71   (hex)		EPIS MICROCOMPUTER
-00E071     (base 16)		EPIS MICROCOMPUTER
-				LAUTLINGER STRASSE 147
-				72458 ALBSTADT    
-				DE
-
-00-E0-66   (hex)		ProMax Systems, Inc.
-00E066     (base 16)		ProMax Systems, Inc.
-				16 TECHNOLOGY DRIVE--BLDG.#106
-				IRVINE  CA  92656
-				US
-
-00-E0-93   (hex)		ACKFIN NETWORKS
-00E093     (base 16)		ACKFIN NETWORKS
-				575 N. PASTORIA AVE.
-				SUNNYVALE  CA  94086
-				US
-
-00-E0-42   (hex)		Pacom Systems Ltd.
-00E042     (base 16)		Pacom Systems Ltd.
-				UNIT 22 38/46 SOUTH ST.
-				RYDALMERE 2116  NSW  
-				AU
-
-00-E0-EB   (hex)		DIGICOM SYSTEMS, INCORPORATED
-00E0EB     (base 16)		DIGICOM SYSTEMS, INCORPORATED
-				188 TOPAZ STREET
-				MILPITAS  CA  95035
-				US
-
-00-E0-1C   (hex)		Cradlepoint, Inc
-00E01C     (base 16)		Cradlepoint, Inc
-				1199 Shoreline Lane
-				Boise  ID  83702
-				US
-
-00-E0-27   (hex)		DUX, INC.
-00E027     (base 16)		DUX, INC.
-				5-18-19, NISHIKAMATA, OTA-KU
-				TOKYO-TO, 144    
-				JP
-
-00-E0-4B   (hex)		JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH
-00E04B     (base 16)		JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH
-				
-				D94469 DEGGENDORF    
-				DE
-
-00-E0-97   (hex)		CARRIER ACCESS CORPORATION
-00E097     (base 16)		CARRIER ACCESS CORPORATION
-				5395 PEARL PARKWAY
-				BOULDER  CO  80301
-				US
-
-00-E0-89   (hex)		ION Networks, Inc.
-00E089     (base 16)		ION Networks, Inc.
-				1551 South Washington Ave.
-				Piscataway  NJ  08854
-				US
-
-00-E0-70   (hex)		DH TECHNOLOGY
-00E070     (base 16)		DH TECHNOLOGY
-				3003 ROLLIE GATES DRIVE
-				PASO ROBLES  CA  93446
-				US
-
-00-E0-5C   (hex)		PHC Corporation
-00E05C     (base 16)		PHC Corporation
-				2-38-5 Nishishimbashi
-				Minato-ku  Tokyo  105-8433
-				JP
-
-00-E0-24   (hex)		GADZOOX NETWORKS
-00E024     (base 16)		GADZOOX NETWORKS
-				5850 HELLYER AVENUE
-				SAN JOSE  CA  95138
-				US
-
-00-60-5B   (hex)		IntraServer Technology, Inc.
-00605B     (base 16)		IntraServer Technology, Inc.
-				125 HOPPING BROOK PARK
-				HOLLISTON  MA  01746
-				US
-
-00-60-D7   (hex)		ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)
-0060D7     (base 16)		ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)
-				ECUBLENS
-				CH-1015 LAUSANNE    
-				CH
-
-00-E0-BA   (hex)		BERGHOF AUTOMATIONSTECHNIK GmbH
-00E0BA     (base 16)		BERGHOF AUTOMATIONSTECHNIK GmbH
-				HARRET STRASSE 1
-				D 72800 ENINGEN    
-				DE
-
-00-E0-21   (hex)		FREEGATE CORP.
-00E021     (base 16)		FREEGATE CORP.
-				710 LAKEWAY  STE.#230
-				SUNNYVALE  CA  94086
-				US
-
-00-E0-5B   (hex)		WEST END SYSTEMS CORP.
-00E05B     (base 16)		WEST END SYSTEMS CORP.
-				39 WINNER'S CIRCLE DR.,
-				ARNPRIOR, ONTARIO    K7S 3G9    
-				CA
-
-00-E0-44   (hex)		LSICS CORPORATION
-00E044     (base 16)		LSICS CORPORATION
-				3-8-3 NINOMIYA, TSKUKUBA SHI
-				IBARAGI-KEN, 305    
-				JP
-
-00-E0-CA   (hex)		BEST DATA PRODUCTS
-00E0CA     (base 16)		BEST DATA PRODUCTS
-				21800 NORDHOFF STREET
-				CHATSWORTH  CA  91311
-				US
-
-00-E0-A7   (hex)		IPC INFORMATION SYSTEMS, INC.
-00E0A7     (base 16)		IPC INFORMATION SYSTEMS, INC.
-				METRO CENTER
-				STAMFORD  CT  06907
-				US
-
-00-E0-62   (hex)		HOST ENGINEERING
-00E062     (base 16)		HOST ENGINEERING
-				200 EAST MAIN STREET -STE.#700
-				JOHNSON CITY  TN  37604
-				US
-
-00-E0-CE   (hex)		ARN
-00E0CE     (base 16)		ARN
-				51, RUE GASTON LAURIAU
-				F-93512 MONTREUIL CEDEX    
-				FR
-
-00-E0-5F   (hex)		e-Net, Inc.
-00E05F     (base 16)		e-Net, Inc.
-				12325 HYMEADOW DRIVE
-				AUSTIN  TX  78750
-				US
-
-00-E0-1F   (hex)		AVIDIA Systems, Inc.
-00E01F     (base 16)		AVIDIA Systems, Inc.
-				135 NORTH PLAINS INDUSTRIAL RD
-				WALLINGFORD  CT  06492
-				US
-
-00-E0-D0   (hex)		NETSPEED, INC.
-00E0D0     (base 16)		NETSPEED, INC.
-				12303 TECHNOLOGY BLVD.
-				AUSTIN  TX  78727
-				US
-
-00-E0-60   (hex)		SHERWOOD
-00E060     (base 16)		SHERWOOD
-				21056 FORBES STREET
-				HAYWARD  CA  94545
-				US
-
-00-E0-6A   (hex)		KAPSCH AG
-00E06A     (base 16)		KAPSCH AG
-				WAGENSEILGASSE 1
-				1120-VIENNA    
-				AT
-
-00-E0-01   (hex)		STRAND LIGHTING LIMITED
-00E001     (base 16)		STRAND LIGHTING LIMITED
-				GRANT WAY
-				MIDDLESEX  England TW7 5QD  
-				GB
-
-00-E0-D8   (hex)		LANBit Computer, Inc.
-00E0D8     (base 16)		LANBit Computer, Inc.
-				12F, 552 CHUNG HSIAO E., RD.
-				    
-				TW
-
-00-E0-E7   (hex)		RAYTHEON E-SYSTEMS, INC.
-00E0E7     (base 16)		RAYTHEON E-SYSTEMS, INC.
-				1301 E. COLLINS
-				RICHARDSON  TX  75081
-				US
-
-00-E0-3C   (hex)		AdvanSys
-00E03C     (base 16)		AdvanSys
-				1150 RINGWOOD COURT
-				SAN JOSE  CA  95131
-				US
-
-00-E0-73   (hex)		NATIONAL AMUSEMENT NETWORK, INC.
-00E073     (base 16)		NATIONAL AMUSEMENT NETWORK, INC.
-				401 N. MICHIGAN AVENUE
-				CHICAGO  IL  60611
-				US
-
-00-60-66   (hex)		LACROIX Trafic
-006066     (base 16)		LACROIX Trafic
-				1 ere Avenue, 11 eme rue
-				06516 CARROS    
-				FR
-
-00-60-F4   (hex)		ADVANCED COMPUTER SOLUTIONS, Inc.
-0060F4     (base 16)		ADVANCED COMPUTER SOLUTIONS, Inc.
-				12675 DANIELSON COURT
-				POWAY  CA  92064
-				US
-
-00-60-60   (hex)		Data Innovations North America
-006060     (base 16)		Data Innovations North America
-				120 Kimball Avenue Suite 100
-				South Burlington  VT  05403
-				US
-
-00-60-35   (hex)		DALLAS SEMICONDUCTOR, INC.
-006035     (base 16)		DALLAS SEMICONDUCTOR, INC.
-				4401 SOUTH BELTWOOD PARKWAY
-				DALLAS  TX  75244-3292
-				US
-
-00-60-07   (hex)		ACRES GAMING, INC.
-006007     (base 16)		ACRES GAMING, INC.
-				815 NW 9TH STREET
-				CORVALLIS  OR  97330
-				US
-
-00-60-58   (hex)		COPPER MOUNTAIN COMMUNICATIONS, INC.
-006058     (base 16)		COPPER MOUNTAIN COMMUNICATIONS, INC.
-				6650 LUSK BLVD.-STE #B103
-				SAN DIEGO  CA  92121
-				US
-
-00-60-FB   (hex)		PACKETEER, INC.
-0060FB     (base 16)		PACKETEER, INC.
-				10201 N. DE ANZA BOULEVARD
-				CUPERTINO  CA  95014
-				US
-
-00-60-C1   (hex)		WaveSpan Corporation
-0060C1     (base 16)		WaveSpan Corporation
-				500 N. BERNARDO AVE.
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-60-3C   (hex)		HAGIWARA SYS-COM CO., LTD.
-00603C     (base 16)		HAGIWARA SYS-COM CO., LTD.
-				2-4-3 NISHIKI NAKA-KU
-				AICHI 460    
-				JP
-
-00-60-7D   (hex)		SENTIENT NETWORKS INC.
-00607D     (base 16)		SENTIENT NETWORKS INC.
-				2201 CANTU COURT-STE #205
-				SARASOTA  FL  34232
-				US
-
-00-60-19   (hex)		Roche Diagnostics
-006019     (base 16)		Roche Diagnostics
-				9115 Hague Road
-				Indianapolis  IN  46250-0457
-				US
-
-00-60-59   (hex)		TECHNICAL COMMUNICATIONS CORP.
-006059     (base 16)		TECHNICAL COMMUNICATIONS CORP.
-				100 DOMINO DRIVE
-				CONCORD  MA  01742
-				US
-
-00-60-03   (hex)		TERAOKA WEIGH SYSTEM PTE, LTD.
-006003     (base 16)		TERAOKA WEIGH SYSTEM PTE, LTD.
-				3A TUAS AVENUE 8
-				  SINGAPORE 639128  
-				SG
-
-00-60-7A   (hex)		DVS GMBH
-00607A     (base 16)		DVS GMBH
-				KREPENSTRASSE 8
-				D-30165 HANNOVER    
-				DE
-
-00-60-F3   (hex)		Performance Analysis Broadband, Spirent plc
-0060F3     (base 16)		Performance Analysis Broadband, Spirent plc
-				27349 Agoura Road
-				Calabasas Hills  CA  91301
-				US
-
-00-60-7C   (hex)		WaveAccess, Ltd.
-00607C     (base 16)		WaveAccess, Ltd.
-				P.O. BOX 2473
-				RA'ANANA 43663    
-				IL
-
-00-60-A0   (hex)		SWITCHED NETWORK TECHNOLOGIES, INC.
-0060A0     (base 16)		SWITCHED NETWORK TECHNOLOGIES, INC.
-				13805 1ST AVENUE NORTH
-				PLYMOUTH  MN  55441-5455
-				US
-
-00-60-17   (hex)		TOKIMEC INC.
-006017     (base 16)		TOKIMEC INC.
-				2-16, MINAMI-KAMATA, OHTA-KU
-				TOKYO 144    
-				JP
-
-00-60-26   (hex)		VIKING Modular Solutions
-006026     (base 16)		VIKING Modular Solutions
-				11 COLUMBIA
-				LAGUNA HILLS  CA  92656
-				US
-
-00-60-6E   (hex)		DAVICOM SEMICONDUCTOR, INC.
-00606E     (base 16)		DAVICOM SEMICONDUCTOR, INC.
-				2457 AUGUSTINE DRIVE
-				SANTA CLARA  CA  95054
-				US
-
-00-60-C7   (hex)		AMATI COMMUNICATIONS CORP.
-0060C7     (base 16)		AMATI COMMUNICATIONS CORP.
-				2043 SAMARITAN DRIVE
-				SAN JOSE  CA  95124
-				US
-
-10-00-E8   (hex)		NATIONAL SEMICONDUCTOR
-1000E8     (base 16)		NATIONAL SEMICONDUCTOR
-				2900 SEMICONDUCTOR DRIVE
-				SANTA CLARA  CA  95051
-				US
-
-00-60-73   (hex)		REDCREEK COMMUNICATIONS, INC.
-006073     (base 16)		REDCREEK COMMUNICATIONS, INC.
-				3900 NEWPARK MALL ROAD
-				NEWARK  CA  94560
-				US
-
-00-60-FD   (hex)		NetICs, Inc.
-0060FD     (base 16)		NetICs, Inc.
-				42 NAGOG PARK
-				ACTON  MA  01720
-				US
-
-00-60-CB   (hex)		HITACHI ZOSEN CORPORATION
-0060CB     (base 16)		HITACHI ZOSEN CORPORATION
-				3-4, SAKURAJIMA 1-CHOME
-				KONOHANA-KU, OSAKA 554    
-				JP
-
-00-60-C8   (hex)		KUKA WELDING SYSTEMS & ROBOTS
-0060C8     (base 16)		KUKA WELDING SYSTEMS & ROBOTS
-				BLUECHERSTRASSE 144
-				D-86165 AUGSBURG    
-				DE
-
-00-60-23   (hex)		PERICOM SEMICONDUCTOR CORP.
-006023     (base 16)		PERICOM SEMICONDUCTOR CORP.
-				2380 BERING DRIVE
-				SAN JOSE  CA  95131
-				US
-
-00-60-63   (hex)		PSION DACOM PLC.
-006063     (base 16)		PSION DACOM PLC.
-				PSION DACOM HOUSE
-				CROWNHILL  MILTON KEYNES  MK8 0EF  
-				GB
-
-00-60-31   (hex)		HRK SYSTEMS
-006031     (base 16)		HRK SYSTEMS
-				P.O. BOX 514
-				WESTVILLE 3630    
-				ZA
-
-00-60-0E   (hex)		WAVENET INTERNATIONAL, INC.
-00600E     (base 16)		WAVENET INTERNATIONAL, INC.
-				5825 KENNEDY ROAD
-				MISSISSAUGA, ONTARIO L4Z 2G3    
-				CA
-
-00-60-A3   (hex)		CONTINUUM TECHNOLOGY CORP.
-0060A3     (base 16)		CONTINUUM TECHNOLOGY CORP.
-				220 CONTINUUM DRIVE
-				FLETCHER  NC  28732
-				US
-
-00-60-3D   (hex)		3CX
-00603D     (base 16)		3CX
-				2085 HAMILTON AVE., -STE.#220
-				SAN JOSE  CA  95125
-				US
-
-00-60-ED   (hex)		RICARDO TEST AUTOMATION LTD.
-0060ED     (base 16)		RICARDO TEST AUTOMATION LTD.
-				LOWESMOOR WHARF
-				WORCESTER, WR12RS    
-				GB
-
-00-60-12   (hex)		POWER COMPUTING CORPORATION
-006012     (base 16)		POWER COMPUTING CORPORATION
-				10261 BUBB ROAD
-				CUPERTINO  CA  95014
-				US
-
-00-60-4D   (hex)		MMC NETWORKS, INC.
-00604D     (base 16)		MMC NETWORKS, INC.
-				1134 EAST ARQUES AVENUE
-				SUNNYVALE  CA  94086-4602
-				US
-
-00-60-F7   (hex)		DATAFUSION SYSTEMS
-0060F7     (base 16)		DATAFUSION SYSTEMS
-				P.O. BOX 582
-				STELLENBOSCH,  7599    
-				ZA
-
-00-60-20   (hex)		PIVOTAL NETWORKING, INC.
-006020     (base 16)		PIVOTAL NETWORKING, INC.
-				7246 SHARON DR., STE
-				SAN JOSE  CA  95129
-				US
-
-00-60-C0   (hex)		Nera Networks AS
-0060C0     (base 16)		Nera Networks AS
-				Kokstadveien 23
-				Bergen    5020
-				NO
-
-00-60-77   (hex)		PRISA NETWORKS
-006077     (base 16)		PRISA NETWORKS
-				6620 Mesa Ridge Road,
-				San Diego  CA  92121
-				US
-
-00-60-94   (hex)		IBM Corp
-006094     (base 16)		IBM Corp
-				3039 E Cornwallis Road
-				Research Triangle Park  NC  27709-2195
-				US
-
-00-60-AB   (hex)		LARSCOM INCORPORATED
-0060AB     (base 16)		LARSCOM INCORPORATED
-				1845 MCCANDLESS DRIVE
-				MILPITAS  CA  95035
-				US
-
-00-60-DD   (hex)		MYRICOM, INC.
-0060DD     (base 16)		MYRICOM, INC.
-				325B N. SANTA ANITA AVE.
-				ARCADIA  CA  91006
-				US
-
-00-60-46   (hex)		VMETRO, INC.
-006046     (base 16)		VMETRO, INC.
-				1880 DAIRY ASHFORD- STE #535
-				HOUSTON  TX  77077
-				US
-
-00-60-68   (hex)		Dialogic Corporation
-006068     (base 16)		Dialogic Corporation
-				9800 Cavendish Blvd, 5th Floor
-				Montreal  Quebec  H4M 2V9
-				CA
-
-00-60-5A   (hex)		CELCORE, INC.
-00605A     (base 16)		CELCORE, INC.
-				8001 CENTERVIEW PARKWAY
-				MEMPHIS  TN  38018
-				US
-
-00-60-95   (hex)		ACCU-TIME SYSTEMS, INC.
-006095     (base 16)		ACCU-TIME SYSTEMS, INC.
-				420 SOMERS ROAD
-				ELLINGTON  CT  06029
-				US
-
-00-60-8A   (hex)		CITADEL COMPUTER
-00608A     (base 16)		CITADEL COMPUTER
-				29 ARMORY RD
-				MILFORD  MA  03055
-				US
-
-00-60-93   (hex)		VARIAN
-006093     (base 16)		VARIAN
-				2700 MITCHELL DR.
-				WALNUT GREEK  CA  94598
-				US
-
-00-A0-3F   (hex)		COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C
-00A03F     (base 16)		COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C
-				% APPLE COMPUTER, INC.
-				CUPERTINO  CA  95014
-				US
-
-00-A0-2D   (hex)		1394 Trade Association
-00A02D     (base 16)		1394 Trade Association
-				3925 WEST BRAKER LANE
-				AUSTIN  TX  78759
-				US
-
-00-A0-7C   (hex)		TONYANG NYLON CO., LTD.
-00A07C     (base 16)		TONYANG NYLON CO., LTD.
-				ELECTRONIC RESEARCH LAB
-				ANYANG-CITY, KYUNGKI-DO 430-080    
-				KR
-
-00-A0-9A   (hex)		NIHON KOHDEN AMERICA
-00A09A     (base 16)		NIHON KOHDEN AMERICA
-				2446 DUPONT DRIVE
-				IRVINE  CA  92715
-				US
-
-00-A0-93   (hex)		B/E AEROSPACE, Inc.
-00A093     (base 16)		B/E AEROSPACE, Inc.
-				17481 RED HILL
-				IRVINE  CA  92714-5630
-				US
-
-00-A0-78   (hex)		Marconi Communications
-00A078     (base 16)		Marconi Communications
-				1000 Fore Drive
-				Warrendale  PA  15086-7502
-				US
-
-00-A0-BF   (hex)		WIRELESS DATA GROUP MOTOROLA
-00A0BF     (base 16)		WIRELESS DATA GROUP MOTOROLA
-				1201 E. WILEY ROAD
-				SCHAUMBURG  IL  60173
-				US
-
-00-A0-5F   (hex)		BTG Electronics Design BV
-00A05F     (base 16)		BTG Electronics Design BV
-				P.O. Box 1543
-				BA Oud Beijerland    
-				NL
-
-00-A0-CD   (hex)		DR. JOHANNES HEIDENHAIN GmbH
-00A0CD     (base 16)		DR. JOHANNES HEIDENHAIN GmbH
-				DR.-JOHANNES-HEIDENHAIN STR.
-				83301 TRAUNREUT    
-				DE
-
-00-A0-DA   (hex)		INTEGRATED SYSTEMS Technology, Inc.
-00A0DA     (base 16)		INTEGRATED SYSTEMS Technology, Inc.
-				4601 PRESIDENTS DRIVE
-				LANHAM  MD  20706
-				US
-
-00-A0-2A   (hex)		TRANCELL SYSTEMS
-00A02A     (base 16)		TRANCELL SYSTEMS
-				3180 DE LA CRUZ BLVD.-STE#200
-				SANTA CLARA  CA  95054-2402
-				US
-
-00-A0-1C   (hex)		NASCENT NETWORKS CORPORATION
-00A01C     (base 16)		NASCENT NETWORKS CORPORATION
-				277 MAIN STREET,  3RD FLR.
-				MARLBORO  MA  01752
-				US
-
-00-A0-8F   (hex)		DESKNET SYSTEMS, INC.
-00A08F     (base 16)		DESKNET SYSTEMS, INC.
-				80 BUSINESS PARK DRIVE
-				ARMONK  NY  10504
-				US
-
-00-A0-CC   (hex)		LITE-ON COMMUNICATIONS, INC.
-00A0CC     (base 16)		LITE-ON COMMUNICATIONS, INC.
-				720 S. HILLVIEW DRIVE
-				MILPITAS  CA  95035
-				US
-
-00-A0-E6   (hex)		DIALOGIC CORPORATION
-00A0E6     (base 16)		DIALOGIC CORPORATION
-				1515 ROUTE 10
-				PARSIPPANY  NJ  07054
-				US
-
-00-A0-4A   (hex)		NISSHIN ELECTRIC CO., LTD.
-00A04A     (base 16)		NISSHIN ELECTRIC CO., LTD.
-				5, MEOTOGOSHI, MUTSUSHI,
-				AICHI 481    
-				JP
-
-00-A0-35   (hex)		CYLINK CORPORATION
-00A035     (base 16)		CYLINK CORPORATION
-				3131 JAY STREET
-				SANTA CLARA  CA  95054
-				US
-
-00-A0-3D   (hex)		OPTO-22
-00A03D     (base 16)		OPTO-22
-				43044 BUSINESS PARK DR.
-				TEMECULA  CA  92590
-				US
-
-00-A0-56   (hex)		MICROPROSS
-00A056     (base 16)		MICROPROSS
-				33, RUE GANTOIS
-				59000 LILLE    
-				FR
-
-00-A0-E1   (hex)		WESTPORT RESEARCH ASSOCIATES, INC.
-00A0E1     (base 16)		WESTPORT RESEARCH ASSOCIATES, INC.
-				6102 ARLINGTON
-				RAYTOWN  MO  64133
-				US
-
-00-A0-B7   (hex)		CORDANT, INC.
-00A0B7     (base 16)		CORDANT, INC.
-				11400 COMMERCE PARK DR.
-				RESTON  VA  22091-1506
-				US
-
-00-A0-26   (hex)		TELDAT, S.A.
-00A026     (base 16)		TELDAT, S.A.
-				PARQUE TECNOLOGICO MADRID
-				28760 TACS CAN TOS (MADRID)    
-				ES
-
-00-A0-23   (hex)		APPLIED CREATIVE TECHNOLOGY, INC.
-00A023     (base 16)		APPLIED CREATIVE TECHNOLOGY, INC.
-				2626 LOMBARDY LANE--STE.#107
-				DALLAS  TX  75220
-				US
-
-00-A0-89   (hex)		XPOINT TECHNOLOGIES, INC.
-00A089     (base 16)		XPOINT TECHNOLOGIES, INC.
-				902 CLINT MOORE RD.-STE#132
-				BOCA RATON  FL  33487
-				US
-
-00-A0-07   (hex)		APEXX TECHNOLOGY, INC.
-00A007     (base 16)		APEXX TECHNOLOGY, INC.
-				506 S. 11TH
-				BOISE  ID  83707
-				US
-
-00-A0-47   (hex)		INTEGRATED FITNESS CORP.
-00A047     (base 16)		INTEGRATED FITNESS CORP.
-				26 6TH STREET
-				STAMFORD  CT  06905
-				US
-
-00-A0-32   (hex)		GES SINGAPORE PTE. LTD.
-00A032     (base 16)		GES SINGAPORE PTE. LTD.
-				14 SUNGEI KADUT AVENUE
-				  SINGAPORE  2572
-				SG
-
-00-A0-E3   (hex)		XKL SYSTEMS CORP.
-00A0E3     (base 16)		XKL SYSTEMS CORP.
-				8420 154TH AVE. NE
-				REDMOND  WA  98052
-				US
-
-00-A0-14   (hex)		CSIR
-00A014     (base 16)		CSIR
-				P.O. BOX 395
-				  SOUTH  AFRICA
-				ZA
-
-00-A0-15   (hex)		WYLE
-00A015     (base 16)		WYLE
-				3000 BOWERS AVENUE
-				SANTA CLARA  CA  95051
-				US
-
-00-A0-6A   (hex)		Verilink Corporation
-00A06A     (base 16)		Verilink Corporation
-				127 Jetplex Circle
-				Madison  AL  35758
-				US
-
-00-A0-18   (hex)		CREATIVE CONTROLLERS, INC.
-00A018     (base 16)		CREATIVE CONTROLLERS, INC.
-				128 KENDRICK LANE
-				PICAYUNE  MS  39466
-				US
-
-00-A0-FE   (hex)		BOSTON TECHNOLOGY, INC.
-00A0FE     (base 16)		BOSTON TECHNOLOGY, INC.
-				100 QUANNAPOWITT PARKWAY
-				WAKEFIELD  MA  01880
-				US
-
-00-A0-EB   (hex)		Encore Networks, Inc.
-00A0EB     (base 16)		Encore Networks, Inc.
-				3800 Concorde Parkway,
-				Chantilly,  VA  20151
-				US
-
-00-A0-7D   (hex)		SEEQ TECHNOLOGY, INC.
-00A07D     (base 16)		SEEQ TECHNOLOGY, INC.
-				47131 BAYSIDE PARKWAY
-				FREMONT  CA  94538
-				US
-
-00-A0-D9   (hex)		CONVEX COMPUTER CORPORATION
-00A0D9     (base 16)		CONVEX COMPUTER CORPORATION
-				3000 WATERVIEW PARKWAY
-				RICHARDSON  TX  75083-3851
-				US
-
-00-A0-70   (hex)		COASTCOM
-00A070     (base 16)		COASTCOM
-				1151 HARBOR BAY PARKWAY
-				ALAMEDA  CA  94502-6511
-				US
-
-00-20-DE   (hex)		JAPAN DIGITAL LABORAT'Y CO.LTD
-0020DE     (base 16)		JAPAN DIGITAL LABORAT'Y CO.LTD
-				JDL KAWASAKI R & D CENTER
-				KANAGAWA-KEN    215
-				JP
-
-00-20-0B   (hex)		OCTAGON SYSTEMS CORP.
-00200B     (base 16)		OCTAGON SYSTEMS CORP.
-				7403 Church Ranch Blvd
-				Westminster  CO  80021
-				US
-
-00-20-94   (hex)		CUBIX CORPORATION
-002094     (base 16)		CUBIX CORPORATION
-				2800 LOCKHEED WAY
-				CARSON CITY  NV  89706
-				US
-
-00-20-F7   (hex)		CYBERDATA CORPORATION
-0020F7     (base 16)		CYBERDATA CORPORATION
-				3 Justin Court
-				MONTEREY  CA  93940
-				US
-
-00-20-D7   (hex)		JAPAN MINICOMPUTER SYSTEMS CO., Ltd.
-0020D7     (base 16)		JAPAN MINICOMPUTER SYSTEMS CO., Ltd.
-				3-33-18 TAKAIDOHIGASHI
-				TOKYO 168    
-				JP
-
-00-20-C3   (hex)		COUNTER SOLUTIONS LTD.
-0020C3     (base 16)		COUNTER SOLUTIONS LTD.
-				263 HEAGE ROAD
-				RIPLEY, DERBYS DE5 3GH    
-				GB
-
-00-20-47   (hex)		STEINBRECHER CORP.
-002047     (base 16)		STEINBRECHER CORP.
-				30 NORTH AVENUE
-				BURLINGTON  MA  01803
-				US
-
-00-20-D5   (hex)		VIPA GMBH
-0020D5     (base 16)		VIPA GMBH
-				WETTERKREUZ 27
-				    
-				DE
-
-00-20-1A   (hex)		MRV Communications, Inc.
-00201A     (base 16)		MRV Communications, Inc.
-				20415 Nordhoff St.
-				Chatsworth  CA  91311
-				US
-
-00-20-F2   (hex)		Oracle Corporation 
-0020F2     (base 16)		Oracle Corporation 
-				500 Oracle Parkway
-				Redwood Shores  CA  94065
-				US
-
-00-20-B8   (hex)		PRIME OPTION, INC.
-0020B8     (base 16)		PRIME OPTION, INC.
-				2341 W. 205TH STREET #116
-				TORRANCE  CA  90501
-				US
-
-00-20-AD   (hex)		LINQ SYSTEMS
-0020AD     (base 16)		LINQ SYSTEMS
-				P.O. BOX 11040
-				TUCSON  AZ  85734
-				US
-
-00-20-7D   (hex)		ADVANCED COMPUTER APPLICATIONS
-00207D     (base 16)		ADVANCED COMPUTER APPLICATIONS
-				107 PENNS TRAIL
-				NEWTOWN  PA  18940
-				US
-
-00-20-2F   (hex)		ZETA COMMUNICATIONS, LTD.
-00202F     (base 16)		ZETA COMMUNICATIONS, LTD.
-				ZENITH HOUSE
-				WREXHAM, CLWYD, LL12 8LX    
-				GB
-
-00-20-9A   (hex)		THE 3DO COMPANY
-00209A     (base 16)		THE 3DO COMPANY
-				600 GALVESTON DRIVE
-				REDWOOD CITY  CA  94063
-				US
-
-00-20-62   (hex)		SCORPION LOGIC, LTD.
-002062     (base 16)		SCORPION LOGIC, LTD.
-				19 BROOKSIDE ROAD
-				HERTS WD1 4BW    
-				GB
-
-00-20-81   (hex)		TITAN ELECTRONICS
-002081     (base 16)		TITAN ELECTRONICS
-				3033 SCIENCE PARK ROAD
-				SAN DIEGO  CA  92121
-				US
-
-00-20-D9   (hex)		PANASONIC TECHNOLOGIES, INC./MIECO-US
-0020D9     (base 16)		PANASONIC TECHNOLOGIES, INC./MIECO-US
-				1703 N. RANDALL RD.
-				ELGIN  IL  60123
-				US
-
-00-20-6F   (hex)		FLOWPOINT CORPORATION
-00206F     (base 16)		FLOWPOINT CORPORATION
-				7291 CORONADO DRIVE, STE# 4
-				SAN JOSE  CA  95129
-				US
-
-00-20-20   (hex)		MEGATRON COMPUTER INDUSTRIES PTY, LTD.
-002020     (base 16)		MEGATRON COMPUTER INDUSTRIES PTY, LTD.
-				
-				    
-				AU
-
-00-20-1B   (hex)		NORTHERN TELECOM/NETWORK
-00201B     (base 16)		NORTHERN TELECOM/NETWORK
-				SYSTEMS CORPORATION
-				CANADA    K8N 5B7
-				CA
-
-00-20-F3   (hex)		RAYNET CORPORATION
-0020F3     (base 16)		RAYNET CORPORATION
-				155 CONSTITUTION DRIVE
-				MENLO PARK  CA  94025
-				US
-
-00-20-90   (hex)		ADVANCED COMPRESSION TECHNOLOGY, INC.
-002090     (base 16)		ADVANCED COMPRESSION TECHNOLOGY, INC.
-				820 FLYNN ROAD
-				CAMARILLO  CA  93012
-				US
-
-00-20-C0   (hex)		PULSE ELECTRONICS, INC.
-0020C0     (base 16)		PULSE ELECTRONICS, INC.
-				5706 FREDERICK AVENUE
-				ROCKVILLE  MD  20852
-				US
-
-00-20-7E   (hex)		FINECOM CO., LTD.
-00207E     (base 16)		FINECOM CO., LTD.
-				1108 HWAKOK-DONG, KANGSEO-KU
-				SEOUL    
-				KR
-
-00-20-4E   (hex)		NETWORK SECURITY SYSTEMS, INC.
-00204E     (base 16)		NETWORK SECURITY SYSTEMS, INC.
-				9401 WAPLES STREET,STE. #100
-				SAN DIEGO  CA  92121
-				US
-
-00-20-CA   (hex)		DIGITAL OCEAN
-0020CA     (base 16)		DIGITAL OCEAN
-				11206 THOMPSON AVENUE
-				LENEXA  KS  66219-2303
-				US
-
-00-20-95   (hex)		RIVA ELECTRONICS
-002095     (base 16)		RIVA ELECTRONICS
-				UNIT 17, BARRSFOLD RD.
-				LANCASHIRE  ENGLAND  BL5 3XW
-				GB
-
-00-20-FB   (hex)		OCTEL COMMUNICATIONS CORP.
-0020FB     (base 16)		OCTEL COMMUNICATIONS CORP.
-				1001 MURPHY RANCH RD
-				MILPITAS  CA  95035
-				US
-
-00-20-70   (hex)		HYNET, LTD.
-002070     (base 16)		HYNET, LTD.
-				102 JABOTINSKY ST.
-				PETACH TIKVA 49130    
-				IL
-
-00-20-BE   (hex)		LAN ACCESS CORP.
-0020BE     (base 16)		LAN ACCESS CORP.
-				2730 MONTEREY STREET, STE.#102
-				TORRANCE  CA  90503
-				US
-
-00-20-3F   (hex)		JUKI CORPORATION
-00203F     (base 16)		JUKI CORPORATION
-				8-2-1 KOKURYO-CHO
-				    
-				JP
-
-00-20-A9   (hex)		WHITE HORSE INDUSTRIAL
-0020A9     (base 16)		WHITE HORSE INDUSTRIAL
-				4F. NO.16, ALLEY 56, LANE 181
-				    
-				TW
-
-00-20-96   (hex)		Invensys
-002096     (base 16)		Invensys
-				Robershaw Industrial Products
-				Marysville  TN  37801
-				US
-
-00-20-4A   (hex)		PRONET GMBH
-00204A     (base 16)		PRONET GMBH
-				KARLSTRASSE 49
-				    
-				DE
-
-00-20-FF   (hex)		SYMMETRICAL TECHNOLOGIES
-0020FF     (base 16)		SYMMETRICAL TECHNOLOGIES
-				500 HUNTMAR PARK DRIVE
-				HERNDON  VA  22070
-				US
-
-00-20-44   (hex)		GENITECH PTY LTD
-002044     (base 16)		GENITECH PTY LTD
-				P.O. BOX 196
-				    
-				AU
-
-00-20-EF   (hex)		USC CORPORATION
-0020EF     (base 16)		USC CORPORATION
-				6-4, OSAKI 1-CHOME
-				  141  
-				JP
-
-00-20-30   (hex)		ANALOG & DIGITAL SYSTEMS
-002030     (base 16)		ANALOG & DIGITAL SYSTEMS
-				1/2 LAVELLE ROAD
-				    
-				IN
-
-00-20-AC   (hex)		INTERFLEX DATENSYSTEME GMBH
-0020AC     (base 16)		INTERFLEX DATENSYSTEME GMBH
-				GROBWIESENSTRASE 24
-				    WESTGERMANY
-				DE
-
-00-20-D8   (hex)		Nortel Networks
-0020D8     (base 16)		Nortel Networks
-				4401 Great America Pkwy.
-				Santa Clara  CA  94588
-				US
-
-00-20-66   (hex)		GENERAL MAGIC, INC.
-002066     (base 16)		GENERAL MAGIC, INC.
-				2465 LATHAM STREET
-				MOUNTAIN VIEW  CA  94040
-				US
-
-00-20-01   (hex)		DSP SOLUTIONS, INC.
-002001     (base 16)		DSP SOLUTIONS, INC.
-				2464 EMBARCADERO WAY
-				PALO ALTO  CA  94303
-				US
-
-00-20-BF   (hex)		AEHR TEST SYSTEMS
-0020BF     (base 16)		AEHR TEST SYSTEMS
-				1667 PLYMOUTH STREET
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-20-53   (hex)		HUNTSVILLE MICROSYSTEMS, INC.
-002053     (base 16)		HUNTSVILLE MICROSYSTEMS, INC.
-				P.O. BOX 12415
-				HUNTSVILLE  AL  35815
-				US
-
-00-20-A1   (hex)		DOVATRON
-0020A1     (base 16)		DOVATRON
-				PRODUCTS DIVISION
-				LONGMONT  CO  80501
-				US
-
-00-C0-2F   (hex)		OKUMA CORPORATION
-00C02F     (base 16)		OKUMA CORPORATION
-				OGUCHI-CHO, NIWA-GUN
-				    
-				JP
-
-00-C0-1E   (hex)		LA FRANCAISE DES JEUX
-00C01E     (base 16)		LA FRANCAISE DES JEUX
-				CENTRE DE ROUSSY/DTI
-				    
-				FR
-
-00-C0-E1   (hex)		SONIC SOLUTIONS
-00C0E1     (base 16)		SONIC SOLUTIONS
-				1891 E. FRANCISCO BLVD.
-				SAN RAFAEL  CA  94901
-				US
-
-00-20-36   (hex)		BMC SOFTWARE
-002036     (base 16)		BMC SOFTWARE
-				1600 CITY WEST BLVD., #1600
-				HOUSTON  TX  77042
-				US
-
-00-20-F8   (hex)		CARRERA COMPUTERS, INC.
-0020F8     (base 16)		CARRERA COMPUTERS, INC.
-				23181 VERDUGO DRIVE-STE.#105A
-				LAGUNA HILLS  CA  92653
-				US
-
-00-C0-65   (hex)		SCOPE COMMUNICATIONS, INC.
-00C065     (base 16)		SCOPE COMMUNICATIONS, INC.
-				100 OTIS STREET
-				NORTHBORO  MA  01532
-				US
-
-00-C0-79   (hex)		FONSYS CO.,LTD.
-00C079     (base 16)		FONSYS CO.,LTD.
-				209-5, YANGJAE, SEOCHO
-				    KOREA
-				KR
-
-00-C0-0F   (hex)		QUANTUM SOFTWARE SYSTEMS LTD.
-00C00F     (base 16)		QUANTUM SOFTWARE SYSTEMS LTD.
-				175 TERRENCE MATTHEWS CRESCENT
-				  K2L  3T5
-				CA
-
-00-C0-87   (hex)		UUNET TECHNOLOGIES, INC.
-00C087     (base 16)		UUNET TECHNOLOGIES, INC.
-				3110 FAIRVIEW PARK DR. #570
-				FALLS CHURCH  VA  22042
-				US
-
-00-C0-06   (hex)		NIPPON AVIONICS CO., LTD.
-00C006     (base 16)		NIPPON AVIONICS CO., LTD.
-				INDUSTRIAL SYSTEM DIVISION
-				    
-				JP
-
-00-C0-A4   (hex)		UNIGRAF OY
-00C0A4     (base 16)		UNIGRAF OY
-				RUUKINTIE 18
-				    
-				FI
-
-00-C0-29   (hex)		Nexans Deutschland GmbH - ANS
-00C029     (base 16)		Nexans Deutschland GmbH - ANS
-				Bonnenbroicher Str. 100
-				    
-				DE
-
-00-C0-FA   (hex)		CANARY COMMUNICATIONS, INC.
-00C0FA     (base 16)		CANARY COMMUNICATIONS, INC.
-				1851 ZANKER ROAD
-				SAN JOSE  CA  95112-4213
-				US
-
-00-C0-3A   (hex)		MEN-MIKRO ELEKTRONIK GMBH
-00C03A     (base 16)		MEN-MIKRO ELEKTRONIK GMBH
-				WIESENTALSTRASSE 40
-				    
-				DE
-
-00-C0-40   (hex)		ECCI
-00C040     (base 16)		ECCI
-				15070-B AVENUE OF SCIENCE
-				SAN DIEGO  CA  92128
-				US
-
-00-C0-1C   (hex)		INTERLINK COMMUNICATIONS LTD.
-00C01C     (base 16)		INTERLINK COMMUNICATIONS LTD.
-				BRUNEL ROAD,
-				    ENGLAND
-				GB
-
-00-C0-42   (hex)		DATALUX CORP.
-00C042     (base 16)		DATALUX CORP.
-				2836 CESSNA DRIVE
-				WINCHESTER  VA  22601
-				US
-
-00-C0-71   (hex)		AREANEX COMMUNICATIONS, INC.
-00C071     (base 16)		AREANEX COMMUNICATIONS, INC.
-				3333 OCTAVIUS DRIVE UNIT C
-				SANTA CLARA  CA  95051
-				US
-
-00-C0-44   (hex)		EMCOM CORPORATION
-00C044     (base 16)		EMCOM CORPORATION
-				840 AVENUE
-				PLANO  TX  75074
-				US
-
-00-C0-E6   (hex)		Verilink Corporation
-00C0E6     (base 16)		Verilink Corporation
-				127 Jetplex Circle
-				Madison  AL  35758
-				US
-
-00-C0-96   (hex)		TAMURA CORPORATION
-00C096     (base 16)		TAMURA CORPORATION
-				COMMUNICATION SYSTEMS DIV.
-				    
-				JP
-
-00-C0-4E   (hex)		COMTROL CORPORATION
-00C04E     (base 16)		COMTROL CORPORATION
-				2675 PATTON ROAD
-				ST. PAUL  MN  55113
-				US
-
-00-C0-3F   (hex)		STORES AUTOMATED SYSTEMS, INC.
-00C03F     (base 16)		STORES AUTOMATED SYSTEMS, INC.
-				1360 ADAMS ROAD
-				BENSALEM  PA  19020
-				US
-
-00-C0-36   (hex)		RAYTECH ELECTRONIC CORP.
-00C036     (base 16)		RAYTECH ELECTRONIC CORP.
-				2F, NO.6, LANE 497
-				  TAIWAN  R.O.C.
-				TW
-
-00-C0-A2   (hex)		INTERMEDIUM A/S
-00C0A2     (base 16)		INTERMEDIUM A/S
-				ODINSVEJ 19
-				    
-				DK
-
-00-C0-53   (hex)		Aspect Software Inc.
-00C053     (base 16)		Aspect Software Inc.
-				6 Technology Park Drive
-				Westford  MA  01886
-				US
-
-00-C0-CC   (hex)		TELESCIENCES CO SYSTEMS, INC.
-00C0CC     (base 16)		TELESCIENCES CO SYSTEMS, INC.
-				351 NEW ALBANY RD.
-				MOORESTOWN  NJ  08057-1177
-				US
-
-00-C0-CE   (hex)		CEI SYSTEMS & ENGINEERING PTE
-00C0CE     (base 16)		CEI SYSTEMS & ENGINEERING PTE
-				BLK 73 #02-18 AYER RAJAH CRESC
-				  SINGAPORE  0513
-				SG
-
-00-40-4F   (hex)		SPACE & NAVAL WARFARE SYSTEMS
-00404F     (base 16)		SPACE & NAVAL WARFARE SYSTEMS
-				NUWC
-				NEWPORT  RI  02841-5047
-				US
-
-00-40-8F   (hex)		WM-DATA MINFO AB
-00408F     (base 16)		WM-DATA MINFO AB
-				OLOF ASKLUNDS GATA 14
-				    
-				SE
-
-00-40-D7   (hex)		STUDIO GEN INC.
-0040D7     (base 16)		STUDIO GEN INC.
-				3-12-8 TAKANAWA #202
-				    
-				JP
-
-00-40-57   (hex)		LOCKHEED - SANDERS
-004057     (base 16)		LOCKHEED - SANDERS
-				DANIEL WEBSTER HIGHWAY SOUTH
-				NASHUA  NH  03061-0868
-				US
-
-00-40-17   (hex)		Silex Technology America
-004017     (base 16)		Silex Technology America
-				157 West 7065 South
-				Salt Lake City  UT  84047
-				US
-
-00-C0-D9   (hex)		QUINTE NETWORK CONFIDENTIALITY
-00C0D9     (base 16)		QUINTE NETWORK CONFIDENTIALITY
-				EQUIPMENT INC.
-				CANADA  K8N  1C3
-				CA
-
-00-C0-B1   (hex)		GENIUS NET CO.
-00C0B1     (base 16)		GENIUS NET CO.
-				4F, HANSOO B/D 210-5
-				  SOUTH  KOREA
-				KR
-
-00-C0-D2   (hex)		SYNTELLECT, INC.
-00C0D2     (base 16)		SYNTELLECT, INC.
-				15810 N. 28TH AVENUE
-				PHOENIX  AZ  85023
-				US
-
-00-C0-7E   (hex)		KUBOTA CORPORATION ELECTRONIC
-00C07E     (base 16)		KUBOTA CORPORATION ELECTRONIC
-				DEVICE DEPT.
-				  JAPAN  #581
-				JP
-
-00-C0-DD   (hex)		QLogic Corporation
-00C0DD     (base 16)		QLogic Corporation
-				6321 Bury Dr.
-				Eden Prarie  MN  55346
-				US
-
-00-C0-1B   (hex)		SOCKET COMMUNICATIONS, INC.
-00C01B     (base 16)		SOCKET COMMUNICATIONS, INC.
-				2823 WHIPPLE RD.
-				UNION CITY  CA  94587
-				US
-
-00-40-6F   (hex)		SYNC RESEARCH INC.
-00406F     (base 16)		SYNC RESEARCH INC.
-				7 STUDEBAKER
-				IRVINE  CA  92718
-				US
-
-00-40-F3   (hex)		NETCOR
-0040F3     (base 16)		NETCOR
-				850 AUBURN COURT
-				FREMONT  CA  94538
-				US
-
-00-40-4B   (hex)		MAPLE COMPUTER SYSTEMS
-00404B     (base 16)		MAPLE COMPUTER SYSTEMS
-				P.O. BOX 10050
-				CANADA  ALA  4L5
-				CA
-
-00-40-33   (hex)		ADDTRON TECHNOLOGY CO., LTD.
-004033     (base 16)		ADDTRON TECHNOLOGY CO., LTD.
-				46560 FREMONT BLVD. #303
-				FREMONT  CA  94538
-				US
-
-00-C0-8E   (hex)		NETWORK INFORMATION TECHNOLOGY
-00C08E     (base 16)		NETWORK INFORMATION TECHNOLOGY
-				10430 S. DE ANZA BLVD.
-				CUPERTINO  CA  95014
-				US
-
-00-C0-C7   (hex)		SPARKTRUM MICROSYSTEMS, INC.
-00C0C7     (base 16)		SPARKTRUM MICROSYSTEMS, INC.
-				2860 ZANKER ROAD,  STE.#210
-				SAN JOSE  CA  95134
-				US
-
-00-C0-C4   (hex)		COMPUTER OPERATIONAL
-00C0C4     (base 16)		COMPUTER OPERATIONAL
-				REQUIREMENT ANALYSTS LTD
-				GU12 4LZ  GU12 4LZ  ENGLAND
-				GB
-
-00-C0-12   (hex)		NETSPAN CORPORATION
-00C012     (base 16)		NETSPAN CORPORATION
-				1411 E. CAMPBELL RD
-				RICHARDSON  TX  75081
-				US
-
-00-40-AD   (hex)		SMA REGELSYSTEME GMBH
-0040AD     (base 16)		SMA REGELSYSTEME GMBH
-				HANNOVERSCHE STR. 1-5
-				    
-				DE
-
-00-40-6D   (hex)		LANCO, INC.
-00406D     (base 16)		LANCO, INC.
-				800 WEST AIRPORT FREEWAY
-				IRVING  TX  75062
-				US
-
-00-40-CD   (hex)		TERA MICROSYSTEMS, INC.
-0040CD     (base 16)		TERA MICROSYSTEMS, INC.
-				2500 GREAT AMERICA PARKWAY
-				SANTA CLARA  CA  95054
-				US
-
-00-40-F5   (hex)		OEM ENGINES
-0040F5     (base 16)		OEM ENGINES
-				1190 DELL AVENUE, STE.
-				CAMPBELL  CA  95008
-				US
-
-00-40-39   (hex)		OPTEC DAIICHI DENKO CO., LTD.
-004039     (base 16)		OPTEC DAIICHI DENKO CO., LTD.
-				FIBER OPTICS & TELECOM. DIV.
-				    JAPAN
-				
-
-00-40-79   (hex)		JUKO MANUFACTURE COMPANY, LTD.
-004079     (base 16)		JUKO MANUFACTURE COMPANY, LTD.
-				FLAT C, 3RD FLOOR, CDW BLDG.
-				  HONG  KONG
-				HK
-
-00-C0-20   (hex)		ARCO ELECTRONIC, CONTROL LTD.
-00C020     (base 16)		ARCO ELECTRONIC, CONTROL LTD.
-				2750 NORTH 29TH AVE.-STE.#316
-				HOLLYWOOD  FL  33020
-				US
-
-00-C0-E7   (hex)		FIBERDATA AB
-00C0E7     (base 16)		FIBERDATA AB
-				P.O. BOX 20095
-				    
-				SE
-
-00-C0-5F   (hex)		FINE-PAL COMPANY LIMITED
-00C05F     (base 16)		FINE-PAL COMPANY LIMITED
-				RM. 9, 11F, KINGSFORD IND. CTR
-				  HONG  KONG
-				HK
-
-00-40-AE   (hex)		DELTA CONTROLS, INC.
-0040AE     (base 16)		DELTA CONTROLS, INC.
-				13520 78TH AVENUE
-				CANADA  V3W  8J6
-				CA
-
-00-40-F6   (hex)		KATRON COMPUTERS INC.
-0040F6     (base 16)		KATRON COMPUTERS INC.
-				4 FL. NO. 2, ALLEY 23
-				TAIPEI  TAIPEI  TAIWAN
-				TW
-
-00-40-86   (hex)		MICHELS & KLEBERHOFF COMPUTER
-004086     (base 16)		MICHELS & KLEBERHOFF COMPUTER
-				GATHE 117
-				    
-				DE
-
-00-40-92   (hex)		ASP COMPUTER PRODUCTS, INC.
-004092     (base 16)		ASP COMPUTER PRODUCTS, INC.
-				160 SAN GABRIEL DRIVE
-				SUNNYVALE  CA  94086
-				US
-
-00-40-68   (hex)		EXTENDED SYSTEMS
-004068     (base 16)		EXTENDED SYSTEMS
-				6123 NORTH MEEKER AVENUE
-				BOISE  ID  83704
-				US
-
-00-40-78   (hex)		WEARNES AUTOMATION PTE LTD
-004078     (base 16)		WEARNES AUTOMATION PTE LTD
-				801 LORONG 7, TOA PAYOH
-				  SINGAPORE  1231
-				SG
-
-00-40-F4   (hex)		CAMEO COMMUNICATIONS, INC.
-0040F4     (base 16)		CAMEO COMMUNICATIONS, INC.
-				71 SPITBROOK ROAD, STE #410
-				NASHUA  NH  030603
-				US
-
-00-40-B4   (hex)		NEXTCOM K.K.
-0040B4     (base 16)		NEXTCOM K.K.
-				1-12-1 SHIBUYA
-				    
-				JP
-
-00-40-B0   (hex)		BYTEX CORPORATION, ENGINEERING
-0040B0     (base 16)		BYTEX CORPORATION, ENGINEERING
-				13873 PARK CENTER ROAD
-				HERNDON  VA  22071
-				US
-
-00-80-D9   (hex)		EMK Elektronik GmbH & Co. KG
-0080D9     (base 16)		EMK Elektronik GmbH & Co. KG
-				Obere Bergstrasse 28
-				75335  Dobel  
-				DE
-
-00-40-59   (hex)		YOSHIDA KOGYO K. K.
-004059     (base 16)		YOSHIDA KOGYO K. K.
-				TECHNICAL RESEARCH DEPT.
-				  939  
-				JP
-
-00-40-95   (hex)		R.P.T. INTERGROUPS INT'L LTD.
-004095     (base 16)		R.P.T. INTERGROUPS INT'L LTD.
-				9F, 50 MIN CHUAN RD
-				TAIWAN  TAIWAN  R.O.C.
-				TW
-
-00-40-35   (hex)		OPCOM
-004035     (base 16)		OPCOM
-				1215 W. CROSBY RD.
-				CARROLLTON  TX  75006
-				US
-
-00-40-5C   (hex)		FUTURE SYSTEMS, INC.
-00405C     (base 16)		FUTURE SYSTEMS, INC.
-				ROOM 102 DONG BANG B/D,
-				SEOUL 130-080  SEOUL 130-080  KOREA
-				KR
-
-00-40-61   (hex)		DATATECH ENTERPRISES CO., LTD.
-004061     (base 16)		DATATECH ENTERPRISES CO., LTD.
-				(LIN KOU INDUSTRIAL ZONE SEC,4
-				TAOYUAN COUNTY  TAIWAN  R.O.C.
-				TW
-
-00-00-8C   (hex)		Alloy Computer Products (Australia) Pty Ltd
-00008C     (base 16)		Alloy Computer Products (Australia) Pty Ltd
-				Unit 4/585 Blackburn Road
-				Notting Hill  Victoria  3168
-				AU
-
-00-40-B9   (hex)		MACQ ELECTRONIQUE SA
-0040B9     (base 16)		MACQ ELECTRONIQUE SA
-				RUE DE L'AERONEF 2
-				    
-				BE
-
-00-40-BB   (hex)		GOLDSTAR CABLE CO., LTD.
-0040BB     (base 16)		GOLDSTAR CABLE CO., LTD.
-				555, HOGYE-DONG, ANYANG-SHI
-				    KOREA
-				KR
-
-00-40-B1   (hex)		CODONICS INC.
-0040B1     (base 16)		CODONICS INC.
-				17991 ENGLEWOOD DRIVE
-				MIDDLEBURG HTS  OH  44130
-				US
-
-00-40-F8   (hex)		SYSTEMHAUS DISCOM
-0040F8     (base 16)		SYSTEMHAUS DISCOM
-				DISTRIBUTED COMPUTING GMBH
-				    
-				DE
-
-00-40-D2   (hex)		PAGINE CORPORATION
-0040D2     (base 16)		PAGINE CORPORATION
-				1961-A CONCOURSE DRIVE
-				SAN JOSE  CA  95131
-				US
-
-00-40-24   (hex)		COMPAC INC.
-004024     (base 16)		COMPAC INC.
-				16-7 NIHONBASI HAMACHO 3-CHO
-				    
-				JP
-
-00-40-E9   (hex)		ACCORD SYSTEMS, INC.
-0040E9     (base 16)		ACCORD SYSTEMS, INC.
-				572 VALLEY WAY
-				MILPITAS  CA  95035
-				US
-
-00-40-03   (hex)		Emerson Process Management Power & Water Solutions, Inc.
-004003     (base 16)		Emerson Process Management Power & Water Solutions, Inc.
-				200 Beta Drive
-				PITTSBURGH  PA  15238
-				US
-
-00-40-90   (hex)		ANSEL COMMUNICATIONS
-004090     (base 16)		ANSEL COMMUNICATIONS
-				1701 JUNCTION COURT
-				SAN JOSE  CA  95112
-				US
-
-00-40-C5   (hex)		MICOM COMMUNICATIONS INC.
-0040C5     (base 16)		MICOM COMMUNICATIONS INC.
-				4100 LOS ANGELES AVENUE
-				SIMI VALLEY  CA  93063
-				US
-
-00-40-20   (hex)		CommScope Inc
-004020     (base 16)		CommScope Inc
-				Unit 1, Kinmel Park
-				Bodelwyddan  RHYL  LL18 5TZ
-				GB
-
-00-40-48   (hex)		SMD INFORMATICA S.A.
-004048     (base 16)		SMD INFORMATICA S.A.
-				LARGO MOVIMENTO DAS FORCAS
-				    
-				PT
-
-00-40-7C   (hex)		QUME CORPORATION
-00407C     (base 16)		QUME CORPORATION
-				500 YOSEMITE DRIVE, M/S-29
-				MILPITAS  CA  95035-5426
-				US
-
-00-40-7F   (hex)		FLIR Systems
-00407F     (base 16)		FLIR Systems
-				BOX 3
-				    
-				SE
-
-00-40-2D   (hex)		HARRIS ADACOM CORPORATION
-00402D     (base 16)		HARRIS ADACOM CORPORATION
-				1100 VENTURE COURT
-				CARROLLTON  TX  75006-5412
-				US
-
-00-80-A6   (hex)		REPUBLIC TECHNOLOGY, INC.
-0080A6     (base 16)		REPUBLIC TECHNOLOGY, INC.
-				P.O. BOX 141006
-				AUSTIN  TX  78714
-				US
-
-00-40-DE   (hex)		Elsag Datamat spa
-0040DE     (base 16)		Elsag Datamat spa
-				ELSAG S.P.A.
-				GENOVA    16154
-				IT
-
-00-40-C9   (hex)		NCUBE
-0040C9     (base 16)		NCUBE
-				919 EAST HILLSDALE BLVD.
-				FOSTER CITY  CA  94404
-				US
-
-00-80-32   (hex)		ACCESS CO., LTD.
-008032     (base 16)		ACCESS CO., LTD.
-				HIEI-KUDAN BLDG. B1
-				    
-				JP
-
-00-80-CF   (hex)		EMBEDDED PERFORMANCE INC.
-0080CF     (base 16)		EMBEDDED PERFORMANCE INC.
-				3385 SCOTT BLVD.
-				SANTA CLARA  CA  95054-3115
-				US
-
-00-80-90   (hex)		MICROTEK INTERNATIONAL, INC.
-008090     (base 16)		MICROTEK INTERNATIONAL, INC.
-				3300 NW 211TH TERRACE
-				HILLSBOR  OR  97124-7136
-				US
-
-00-40-44   (hex)		QNIX COMPUTER CO., LTD.
-004044     (base 16)		QNIX COMPUTER CO., LTD.
-				8,9F KOREAN TEACHER'S MUT.BLDG
-				SEOUL  KOREA  150-010
-				KR
-
-00-80-C4   (hex)		DOCUMENT TECHNOLOGIES, INC.
-0080C4     (base 16)		DOCUMENT TECHNOLOGIES, INC.
-				1300 CHARLESTON ROAD
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-80-5B   (hex)		CONDOR SYSTEMS, INC.
-00805B     (base 16)		CONDOR SYSTEMS, INC.
-				2133 SAMARILTAN DRIVE
-				SAN JOSE  CA  95124
-				US
-
-00-80-43   (hex)		NETWORLD, INC.
-008043     (base 16)		NETWORLD, INC.
-				KANDA 3 AMEREX BLDG.
-				    
-				JP
-
-00-40-DF   (hex)		DIGALOG SYSTEMS, INC.
-0040DF     (base 16)		DIGALOG SYSTEMS, INC.
-				3180 SOUTH 166TH STREET
-				NEW BERLIN  WI  53151
-				US
-
-00-40-09   (hex)		TACHIBANA TECTRON CO., LTD.
-004009     (base 16)		TACHIBANA TECTRON CO., LTD.
-				SYSTEMATIC EQUIPMENT DIVISION
-				    
-				JP
-
-00-40-A0   (hex)		GOLDSTAR CO., LTD.
-0040A0     (base 16)		GOLDSTAR CO., LTD.
-				6 GA 3B MUNLAE YEONGDEUNGPO
-				    KOREA
-				KR
-
-00-40-FC   (hex)		IBR COMPUTER TECHNIK GMBH
-0040FC     (base 16)		IBR COMPUTER TECHNIK GMBH
-				FRANKFURTER STR. 114
-				  WEST  
-				DE
-
-00-80-AF   (hex)		ALLUMER CO., LTD.
-0080AF     (base 16)		ALLUMER CO., LTD.
-				2-8-8 CHUO-CHO, MEGURO-KU
-				    
-				JP
-
-00-80-84   (hex)		THE CLOUD INC.
-008084     (base 16)		THE CLOUD INC.
-				CLOUD BLDG.
-				    KOREA
-				KR
-
-00-80-F3   (hex)		SUN ELECTRONICS CORP.
-0080F3     (base 16)		SUN ELECTRONICS CORP.
-				250 ASAHI KOCHINO-CHO
-				  483  
-				JP
-
-00-80-99   (hex)		Eaton Industries GmbH
-008099     (base 16)		Eaton Industries GmbH
-				Hein-Moeller - Straße 7-11
-				    
-				DE
-
-00-80-8D   (hex)		WESTCOAST TECHNOLOGY B.V.
-00808D     (base 16)		WESTCOAST TECHNOLOGY B.V.
-				P.O. BOX 3317
-				    
-				NL
-
-00-80-BE   (hex)		ARIES RESEARCH
-0080BE     (base 16)		ARIES RESEARCH
-				46791 FREMOND BLVD.
-				FREMONT  CA  94538
-				US
-
-00-80-15   (hex)		SEIKO SYSTEMS, INC.
-008015     (base 16)		SEIKO SYSTEMS, INC.
-				8,Nakase 1-chome,Mihama-ku
-				    
-				JP
-
-00-80-D2   (hex)		SHINNIHONDENKO CO., LTD.
-0080D2     (base 16)		SHINNIHONDENKO CO., LTD.
-				6-8 NISHITENMA 2 CHOME
-				    
-				JP
-
-00-80-89   (hex)		TECNETICS (PTY) LTD.
-008089     (base 16)		TECNETICS (PTY) LTD.
-				P.O. BOX/POSBUS 56412
-				  SOUTH  AFRICA
-				ZA
-
-00-80-6F   (hex)		ONELAN LTD.
-00806F     (base 16)		ONELAN LTD.
-				P.O. BOX 107
-				  UNITED  KINGDOM
-				GB
-
-00-80-81   (hex)		KENDALL SQUARE RESEARCH CORP.
-008081     (base 16)		KENDALL SQUARE RESEARCH CORP.
-				170 TRACER LANE
-				WALTHAM  MA  02154-1379
-				US
-
-00-80-9C   (hex)		LUXCOM, INC.
-00809C     (base 16)		LUXCOM, INC.
-				3249 LAURELVIEW COURT
-				FREMONT  CA  94538
-				US
-
-00-80-65   (hex)		CYBERGRAPHIC SYSTEMS PTY LTD.
-008065     (base 16)		CYBERGRAPHIC SYSTEMS PTY LTD.
-				290 BURWOOD ROAD
-				    
-				AU
-
-00-80-19   (hex)		DAYNA COMMUNICATIONS, INC.
-008019     (base 16)		DAYNA COMMUNICATIONS, INC.
-				50 SOUTH MAIN STREET-#530
-				SALT LAKE CITY  UTAH  84144
-				US
-
-00-80-50   (hex)		ZIATECH CORPORATION
-008050     (base 16)		ZIATECH CORPORATION
-				3433 ROBERTO COURT
-				SAN LUIS OBISPO  CA  93401
-				US
-
-00-80-A4   (hex)		LIBERTY ELECTRONICS
-0080A4     (base 16)		LIBERTY ELECTRONICS
-				332 HARBOR WAY
-				SOUTH SAN FRANCISCO  CA  94080
-				US
-
-00-80-CD   (hex)		MICRONICS COMPUTER, INC.
-0080CD     (base 16)		MICRONICS COMPUTER, INC.
-				45365 NORTHPORT LOOP WEST
-				FREMONT  CA  94538
-				US
-
-00-80-03   (hex)		HYTEC ELECTRONICS LTD.
-008003     (base 16)		HYTEC ELECTRONICS LTD.
-				5 CRADOCK ROAD
-				    ENGLAND
-				GB
-
-00-80-52   (hex)		TECHNICALLY ELITE CONCEPTS
-008052     (base 16)		TECHNICALLY ELITE CONCEPTS
-				2615 PACIFIC COAST HIGHWAY
-				HERMOSA BEACH  CA  90250
-				US
-
-00-80-5D   (hex)		CANSTAR
-00805D     (base 16)		CANSTAR
-				3900 VICTORIA PARK AVENUE
-				  M2H  3H7
-				CA
-
-00-80-4F   (hex)		DAIKIN INDUSTRIES, LTD.
-00804F     (base 16)		DAIKIN INDUSTRIES, LTD.
-				ELECTRONICS DIVISION
-				  JAPAN  525
-				JP
-
-00-80-05   (hex)		CACTUS COMPUTER INC.
-008005     (base 16)		CACTUS COMPUTER INC.
-				1120 METROCREST DRIVE
-				CARROLLTON  TX  75006
-				US
-
-00-80-6D   (hex)		CENTURY SYSTEMS CORP.
-00806D     (base 16)		CENTURY SYSTEMS CORP.
-				2-8-12 MINAMI-CHO
-				  185  
-				JP
-
-00-80-94   (hex)		ALFA LAVAL AUTOMATION AB
-008094     (base 16)		ALFA LAVAL AUTOMATION AB
-				ADN
-				    
-				SE
-
-00-00-41   (hex)		ICE CORPORATION
-000041     (base 16)		ICE CORPORATION
-				17945 SKYPARK CIRCLE
-				IRVINE  CA  92714
-				US
-
-00-00-86   (hex)		MEGAHERTZ CORPORATION
-000086     (base 16)		MEGAHERTZ CORPORATION
-				605 NORTH--5600 WEST
-				SALT LAKE CITY  UT  84116-3738
-				US
-
-00-00-92   (hex)		COGENT DATA TECHNOLOGIES
-000092     (base 16)		COGENT DATA TECHNOLOGIES
-				640 MULLIS STREET
-				FRIDAY HARBOR  WA  98250
-				US
-
-00-00-58   (hex)		RACORE COMPUTER PRODUCTS INC.
-000058     (base 16)		RACORE COMPUTER PRODUCTS INC.
-				2355 SOUTH 1070 WEST
-				SALT LAKE CITY  UT  84119
-				US
-
-00-80-74   (hex)		FISHER CONTROLS
-008074     (base 16)		FISHER CONTROLS
-				1712 CENTRE CREEK DRIVE
-				AUSTIN  TX  78754
-				US
-
-00-80-30   (hex)		NEXUS ELECTRONICS
-008030     (base 16)		NEXUS ELECTRONICS
-				39 SPRINGFIELD ROAD
-				  UNITED  KINGDOM
-				GB
-
-00-00-55   (hex)		COMMISSARIAT A L`ENERGIE ATOM.
-000055     (base 16)		COMMISSARIAT A L`ENERGIE ATOM.
-				31, RUE DE LA FEDERATION
-				    
-				FR
-
-00-80-C9   (hex)		ALBERTA MICROELECTRONIC CENTRE
-0080C9     (base 16)		ALBERTA MICROELECTRONIC CENTRE
-				318, 11315 - 87 AVENUE
-				    
-				CA
-
-00-80-0C   (hex)		VIDECOM LIMITED
-00800C     (base 16)		VIDECOM LIMITED
-				NEWTOWN ESTATE
-				    ENGLAND
-				GB
-
-00-80-7D   (hex)		EQUINOX SYSTEMS INC.
-00807D     (base 16)		EQUINOX SYSTEMS INC.
-				14260 SW 119TH AVENUE
-				MIAMI  FL  33186
-				US
-
-00-80-63   (hex)		Hirschmann Automation and Control GmbH
-008063     (base 16)		Hirschmann Automation and Control GmbH
-				Stuttgarter Straße 45-51
-				Neckartenzlingen    D-72654
-				DE
-
-00-80-EE   (hex)		THOMSON CSF
-0080EE     (base 16)		THOMSON CSF
-				51 ESPLANADE DU GENERAL
-				    
-				FR
-
-00-80-8E   (hex)		RADSTONE TECHNOLOGY
-00808E     (base 16)		RADSTONE TECHNOLOGY
-				WATER LANE, TOWCESTER
-				    ENGLAND
-				GB
-
-00-80-96   (hex)		HUMAN DESIGNED SYSTEMS, INC.
-008096     (base 16)		HUMAN DESIGNED SYSTEMS, INC.
-				421 FEHELEY DRIVE
-				KING OF PRUSSIA  PA  19406
-				US
-
-00-80-3E   (hex)		SYNERNETICS
-00803E     (base 16)		SYNERNETICS
-				85 RANGEWAY ROAD
-				NORTH BILLERICA  MA  01862
-				US
-
-00-80-CE   (hex)		BROADCAST TELEVISION SYSTEMS
-0080CE     (base 16)		BROADCAST TELEVISION SYSTEMS
-				P.O. BOX 30816
-				  Utah  84130-0816
-				US
-
-00-80-1A   (hex)		BELL ATLANTIC
-00801A     (base 16)		BELL ATLANTIC
-				N92 W14612  ANTHONY AVENUE
-				MENOMONEE FALLS  WI  53051
-				US
-
-00-80-DE   (hex)		GIPSI S.A.
-0080DE     (base 16)		GIPSI S.A.
-				2,BD VAUBAN - B.P. 268
-				    
-				FR
-
-00-80-02   (hex)		SATELCOM (UK) LTD
-008002     (base 16)		SATELCOM (UK) LTD
-				TECHNOLOGY TRANSFER CENTRE
-				    ENGLAND
-				GB
-
-00-80-64   (hex)		WYSE TECHNOLOGY LLC
-008064     (base 16)		WYSE TECHNOLOGY LLC
-				3471 NORTH FIRST STREET M/S
-				SAN JOSE  CA  95134
-				US
-
-00-80-48   (hex)		COMPEX INCORPORATED
-008048     (base 16)		COMPEX INCORPORATED
-				4055 EAST LA PALMA
-				ANAHEIM  CA  92807
-				US
-
-00-80-85   (hex)		H-THREE SYSTEMS CORPORATION
-008085     (base 16)		H-THREE SYSTEMS CORPORATION
-				100 PARK DRIVE, SUITE 204
-				  NC  27709
-				US
-
-00-80-4C   (hex)		CONTEC CO., LTD.
-00804C     (base 16)		CONTEC CO., LTD.
-				3-9-31, HIMESATO
-				    
-				JP
-
-00-80-8F   (hex)		C. ITOH ELECTRONICS, INC.
-00808F     (base 16)		C. ITOH ELECTRONICS, INC.
-				2505 MCCABE WAY
-				IRVINE  CA  92714
-				US
-
-00-00-52   (hex)		Intrusion.com, Inc.
-000052     (base 16)		Intrusion.com, Inc.
-				1101 E. ARAPAHO ROAD
-				RICHARDSON  TX  75081
-				
-
-00-80-FF   (hex)		SOC. DE TELEINFORMATIQUE RTC
-0080FF     (base 16)		SOC. DE TELEINFORMATIQUE RTC
-				P.O. BOX 955 PLACE DU PARC
-				CANADA  H2W  2N1
-				
-
-00-00-F7   (hex)		YOUTH KEEP ENTERPRISE CO LTD
-0000F7     (base 16)		YOUTH KEEP ENTERPRISE CO LTD
-				3/F NO. 712 MINTSU E. ROAD
-				    ROC
-				TW
-
-00-00-C7   (hex)		ARIX CORPORATION
-0000C7     (base 16)		ARIX CORPORATION
-				ENGINEERING MAIL STOP
-				SUNNYVALE  CA  94089
-				US
-
-00-00-D1   (hex)		ADAPTEC INCORPORATED
-0000D1     (base 16)		ADAPTEC INCORPORATED
-				M/S 180
-				MILPITAS  CA  95035
-				US
-
-00-00-16   (hex)		DU PONT PIXEL SYSTEMS     .
-000016     (base 16)		DU PONT PIXEL SYSTEMS     .
-				MEADLAKE PLACE
-				    ENGLAND
-				GB
-
-00-00-E1   (hex)		GRID SYSTEMS
-0000E1     (base 16)		GRID SYSTEMS
-				47211 LAKEVIEW BOULEVARD
-				FREMONT  CA  94537-5003
-				US
-
-00-00-81   (hex)		Bay Networks
-000081     (base 16)		Bay Networks
-				PO Box 58185
-				Santa Clara  CA  95052-8185
-				US
-
-00-00-29   (hex)		IMC NETWORKS CORP.
-000029     (base 16)		IMC NETWORKS CORP.
-				16931 MILLIKEN AVE.
-				IRVINE  CA  92714-5013
-				US
-
-00-00-0A   (hex)		OMRON TATEISI ELECTRONICS CO.
-00000A     (base 16)		OMRON TATEISI ELECTRONICS CO.
-				SECTION NFF, SYSTEM R&D LABS.
-				KYOTO  617  
-				JP
-
-00-00-0D   (hex)		FIBRONICS LTD.
-00000D     (base 16)		FIBRONICS LTD.
-				MATAM TECHNOLOGY CENTER
-				    
-				IL
-
-00-00-24   (hex)		CONNECT AS
-000024     (base 16)		CONNECT AS
-				HOERKAER 7-9
-				    
-				DK
-
-00-00-67   (hex)		SOFT * RITE, INC.
-000067     (base 16)		SOFT * RITE, INC.
-				15392 ASSEMBLY LANE, UNIT A
-				HUNTINGTON BEACH  CA  92649
-				US
-
-00-00-D2   (hex)		SBE, INC.
-0000D2     (base 16)		SBE, INC.
-				4550 NORTH CANYON ROAD
-				SAN RAMON  CA  94583
-				US
-
-00-00-37   (hex)		OXFORD METRICS LIMITED
-000037     (base 16)		OXFORD METRICS LIMITED
-				UNIT 8, 7 WEST WAY,
-				  UNITED  KINGDOM
-				GB
-
-00-00-FB   (hex)		RECHNER ZUR KOMMUNIKATION
-0000FB     (base 16)		RECHNER ZUR KOMMUNIKATION
-				BITZENSTR. 11
-				    
-				DE
-
-00-00-E2   (hex)		ACER TECHNOLOGIES CORP.
-0000E2     (base 16)		ACER TECHNOLOGIES CORP.
-				401 CHARCOT AVE.
-				SAN JOSE  CA  95131
-				US
-
-00-00-BA   (hex)		SIIG, INC.
-0000BA     (base 16)		SIIG, INC.
-				6078 STEWART AVENUE
-				FREMONT  CA  94538
-				US
-
-00-00-2A   (hex)		TRW - SEDD/INP
-00002A     (base 16)		TRW - SEDD/INP
-				1800 GLENN CURTISS STREET
-				CARSON  CA  90746
-				US
-
-00-00-2C   (hex)		AUTOTOTE LIMITED
-00002C     (base 16)		AUTOTOTE LIMITED
-				100 BELLEVUE ROAD
-				NEWARK  DELAWARE  19714
-				US
-
-00-00-83   (hex)		TADPOLE TECHNOLOGY PLC
-000083     (base 16)		TADPOLE TECHNOLOGY PLC
-				137 DITTON WALK
-				    ENGLAND
-				GB
-
-00-00-F3   (hex)		GANDALF DATA LIMITED
-0000F3     (base 16)		GANDALF DATA LIMITED
-				130 COLONNADE ROAD SOUTH
-				    
-				CA
-
-00-00-B0   (hex)		RND-RAD NETWORK DEVICES
-0000B0     (base 16)		RND-RAD NETWORK DEVICES
-				ATIDIM TECHNOL'CL BLDG. 1
-				    
-				IL
-
-00-00-CF   (hex)		HAYES MICROCOMPUTER PRODUCTS
-0000CF     (base 16)		HAYES MICROCOMPUTER PRODUCTS
-				(CANADA) LTD.
-				    
-				CA
-
-00-00-56   (hex)		DR. B. STRUCK
-000056     (base 16)		DR. B. STRUCK
-				POB 1147 BAECKERBARG 6
-				    W-GERMANY
-				DE
-
-00-00-6C   (hex)		Private
-00006C     (base 16)		Private
-
-00-00-A9   (hex)		NETWORK SYSTEMS CORP.
-0000A9     (base 16)		NETWORK SYSTEMS CORP.
-				7600 BOONE AVENUE NORTH
-				MINNEAPOLIS  MN  55428-1099
-				US
-
-00-00-EF   (hex)		KTI
-0000EF     (base 16)		KTI
-				2157 O'TOOLE AVENUE
-				SAN JOSE  CA  95131
-				US
-
-00-00-25   (hex)		RAMTEK CORP.
-000025     (base 16)		RAMTEK CORP.
-				810 W. MAUDE AVENUE
-				SUNNYVALE  CA  94086
-				US
-
-00-00-AF   (hex)		Canberra Industries, Inc.
-0000AF     (base 16)		Canberra Industries, Inc.
-				800 Research Parkway
-				Meriden  CT  06450
-				US
-
-00-00-76   (hex)		ABEKAS VIDEO SYSTEM
-000076     (base 16)		ABEKAS VIDEO SYSTEM
-				101 GALVESTON DRIVE
-				REDWOOD CITY  CA  94063
-				US
-
-08-00-55   (hex)		STANFORD TELECOMM. INC.
-080055     (base 16)		STANFORD TELECOMM. INC.
-				1221 CROSSMAN
-				SUNNYVALE  CA  94089
-				US
-
-08-00-53   (hex)		MIDDLE EAST TECH. UNIVERSITY
-080053     (base 16)		MIDDLE EAST TECH. UNIVERSITY
-				DEPARTMENT OF
-				  ANKARA  
-				TR
-
-08-00-8E   (hex)		Tandem Computers
-08008E     (base 16)		Tandem Computers
-				14231 Tendem Blvd.
-				Austin  TX  78728 - 6610
-				US
-
-08-00-84   (hex)		TOMEN ELECTRONICS CORP.
-080084     (base 16)		TOMEN ELECTRONICS CORP.
-				1-1 UCHISAIWAI-CHO 2CHOME
-				    
-				JP
-
-08-00-85   (hex)		ELXSI
-080085     (base 16)		ELXSI
-				2334 LUNDY PLACE
-				SAN JOSE  CA  95131
-				US
-
-08-00-82   (hex)		VERITAS SOFTWARE
-080082     (base 16)		VERITAS SOFTWARE
-				4800 GREAT AMERICA PARKWAY
-				SANTA CLARA  CA  95054
-				US
-
-08-00-80   (hex)		AES DATA INC.
-080080     (base 16)		AES DATA INC.
-				1900 MINNESOTA COURT
-				CANADA  L5N  L5N 3C9
-				CA
-
-08-00-77   (hex)		TSL COMMUNICATIONS LTD.
-080077     (base 16)		TSL COMMUNICATIONS LTD.
-				THE LANDSBURY ESTATE
-				    ENGLAND
-				GB
-
-08-00-74   (hex)		CASIO COMPUTER CO. LTD.
-080074     (base 16)		CASIO COMPUTER CO. LTD.
-				3-2-1 SAKAE-CHO
-				  190-11  
-				JP
-
-08-00-6E   (hex)		MASSCOMP
-08006E     (base 16)		MASSCOMP
-				ONE TECHNOLOGY PARK
-				WESTFORD  MA  01886
-				US
-
-08-00-68   (hex)		RIDGE COMPUTERS
-080068     (base 16)		RIDGE COMPUTERS
-				2451 MISSION COLLEGE BLVD.
-				SANTA CLARA  CA  95054
-				US
-
-08-00-63   (hex)		PLESSEY
-080063     (base 16)		PLESSEY
-				PLESSEY - UK LIMITED
-				JAMAICA  NY  11434
-				US
-
-08-00-7B   (hex)		SANYO ELECTRIC CO. LTD.
-08007B     (base 16)		SANYO ELECTRIC CO. LTD.
-				1-18-13 HASHIRIDANI
-				OSAKA  573  
-				JP
-
-08-00-7C   (hex)		VITALINK COMMUNICATIONS CORP.
-08007C     (base 16)		VITALINK COMMUNICATIONS CORP.
-				48761 KATO ROAD
-				FREMONT  CA  94538
-				US
-
-00-00-DF   (hex)		BELL & HOWELL PUB SYS DIV
-0000DF     (base 16)		BELL & HOWELL PUB SYS DIV
-				OLD MANSFIELD ROAD
-				WOOSTER  OH  44691-9050
-				US
-
-00-00-F9   (hex)		QUOTRON SYSTEMS INC.
-0000F9     (base 16)		QUOTRON SYSTEMS INC.
-				5454 BEETHOVEN ST.
-				LOS ANGELES  CA  90066
-				US
-
-08-00-60   (hex)		INDUSTRIAL NETWORKING INC.
-080060     (base 16)		INDUSTRIAL NETWORKING INC.
-				3990 FREEDOM CIRCLE
-				SANTA CLARA  CA  95050
-				US
-
-08-00-4C   (hex)		HYDRA COMPUTER SYSTEMS INC.
-08004C     (base 16)		HYDRA COMPUTER SYSTEMS INC.
-				12 MERCER ROAD
-				NATICK  MA  01760
-				US
-
-08-00-47   (hex)		SEQUENT COMPUTER SYSTEMS INC.
-080047     (base 16)		SEQUENT COMPUTER SYSTEMS INC.
-				15450 S.W. KOLL PARKWAY   .
-				BEAVERTON  OR  97006
-				US
-
-08-00-4A   (hex)		BANYAN SYSTEMS INC.
-08004A     (base 16)		BANYAN SYSTEMS INC.
-				135 FLANDERS ROAD
-				WESTBORO  MA  01581
-				US
-
-08-00-44   (hex)		DAVID SYSTEMS INC.
-080044     (base 16)		DAVID SYSTEMS INC.
-				615 TASMAN DRIVE
-				SUNNYVALE  CA  94088
-				US
-
-08-00-41   (hex)		RACAL-MILGO INFORMATION SYS..
-080041     (base 16)		RACAL-MILGO INFORMATION SYS..
-				400 EMBASSY ROW
-				ATLANTA  GA  30328
-				US
-
-08-00-35   (hex)		MICROFIVE CORPORATION
-080035     (base 16)		MICROFIVE CORPORATION
-				3560 HYLAND AVENUE
-				COSTA MESA  CA  92626
-				US
-
-08-00-32   (hex)		TIGAN INCORPORATED
-080032     (base 16)		TIGAN INCORPORATED
-				4020 FABIAN WAY
-				PALO ALTO  CA  94303
-				US
-
-08-00-8D   (hex)		XYVISION INC.
-08008D     (base 16)		XYVISION INC.
-				101 EDGEWATER DRIVE
-				WAKEFIELD  MA  01880
-				US
-
-08-00-15   (hex)		STC BUSINESS SYSTEMS
-080015     (base 16)		STC BUSINESS SYSTEMS
-				HOLBROOK HOUSE
-				  UNITED  KINGDOM
-				GB
-
-08-00-66   (hex)		AGFA CORPORATION
-080066     (base 16)		AGFA CORPORATION
-				200 BALLARDVALE STREET
-				WILMINGTON  MA  01887
-				US
-
-08-00-04   (hex)		CROMEMCO INCORPORATED
-080004     (base 16)		CROMEMCO INCORPORATED
-				280 BERNARDO AVENUE
-				MOUNTAIN VIEW  CA  94043
-				US
-
-00-01-C8   (hex)		CONRAD CORP.
-0001C8     (base 16)		CONRAD CORP.
-				
-				    
-				
-
-08-00-3F   (hex)		FRED KOSCHARA ENTERPRISES
-08003F     (base 16)		FRED KOSCHARA ENTERPRISES
-				
-				    
-				
-
-08-00-0B   (hex)		UNISYS CORPORATION
-08000B     (base 16)		UNISYS CORPORATION
-				TOWNSHIP LINE ROAD
-				BLUE BELL  PA  19424
-				US
-
-00-DD-01   (hex)		UNGERMANN-BASS INC.
-00DD01     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-DD-06   (hex)		UNGERMANN-BASS INC.
-00DD06     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-AA-00-03   (hex)		DIGITAL EQUIPMENT CORPORATION
-AA0003     (base 16)		DIGITAL EQUIPMENT CORPORATION
-				LKG 1-2/A19
-				LITTLETON  MA  01460-1289
-				US
-
-00-00-00   (hex)		XEROX CORPORATION
-000000     (base 16)		XEROX CORPORATION
-				M/S 105-50C
-				WEBSTER  NY  14580
-				US
-
-08-00-21   (hex)		3M COMPANY
-080021     (base 16)		3M COMPANY
-				Telecom Division
-				Austin  TX  78726-9000
-				US
-
-02-BB-01   (hex)		OCTOTHORPE CORP.
-02BB01     (base 16)		OCTOTHORPE CORP.
-				285 WEST GREEN STREET
-				PASADENA  CA  91105
-				US
-
-08-00-8A   (hex)		PerfTech, Inc.
-08008A     (base 16)		PerfTech, Inc.
-				613 NW Loop 410
-				SAN ANTONIO  TX  78216
-				US
-
-00-00-3E   (hex)		SIMPACT
-00003E     (base 16)		SIMPACT
-				9210 SKY PARK COURT
-				SAN DIEGO  CA  92123
-				US
-
-00-DD-02   (hex)		UNGERMANN-BASS INC.
-00DD02     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-00-DD-04   (hex)		UNGERMANN-BASS INC.
-00DD04     (base 16)		UNGERMANN-BASS INC.
-				3900 FREEDOM CIRCLE
-				SANTA CLARA  CA  95054
-				US
-
-02-60-86   (hex)		LOGIC REPLACEMENT TECH. LTD.
-026086     (base 16)		LOGIC REPLACEMENT TECH. LTD.
-				14 ARKWRIGHT ROAD
-				  UNITED  KINGDOM
-				GB
-
-08-00-30   (hex)		CERN
-080030     (base 16)		CERN
-				CH-1211 
-				GENEVE  SUISSE/SWITZ  023
-				CH
-
-74-DA-88   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-74DA88     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-CC-32-E5   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-CC32E5     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-1C-3B-F3   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-1C3BF3     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-3C-86-D1   (hex)		vivo Mobile Communication Co., Ltd.
-3C86D1     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-30-1B-97   (hex)		Lierda Science & Technology Group Co.,Ltd
-301B97     (base 16)		Lierda Science & Technology Group Co.,Ltd
-				Lierda Science Park?No.1326 WenyiWestRoad
-				Hangzhou  ZheJiang  311121
-				CN
-
-2C-D2-E3   (hex)		Guangzhou Aoshi Electronic Co.,Ltd
-2CD2E3     (base 16)		Guangzhou Aoshi Electronic Co.,Ltd
-				B1,Huachuang industrial park,Jinshan Avenue,Panyu District
-				Guangzhou  Guangdong  511450
-				CN
-
-14-59-C3   (hex)		Creative Chips GmbH
-1459C3     (base 16)		Creative Chips GmbH
-				Im Bubenstück 1
-				Bingen  Rheinland-Pfalz  55411
-				DE
-
-A0-D8-6F   (hex)		ARGO AI, LLC
-A0D86F     (base 16)		ARGO AI, LLC
-				40, 24th Street, Second Floor
-				Pittsburgh  PA  15222
-				US
-
-E4-67-1E   (hex)		SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd.
-E4671E     (base 16)		SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd.
-				Building A2 and 1 F/L, Building A1, 9 Wugang Rd, Xikeng Village, Xikeng Community, Henggang Sub-district, Longgang District
-				Shenzhen    518100
-				CN
-
-68-27-19   (hex)		Microchip Technology Inc.
-682719     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-24-C1-7A   (hex)		BEIJING IACTIVE NETWORK CO.,LTD
-24C17A     (base 16)		BEIJING IACTIVE NETWORK CO.,LTD
-				Room 525, Yiquanhui Building, No. 35 Shangdi East Road, Haidian District
-				BEIJING    100085
-				CN
-
-1C-9C-8C   (hex)		Juniper Networks
-1C9C8C     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-A4-C9-39   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-A4C939     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-34-D7-72   (hex)		Xiamen Yudian Automation Technology Co., Ltd 
-34D772     (base 16)		Xiamen Yudian Automation Technology Co., Ltd 
-				No. 17 North Huoju Rd., Huoju Park, Huoju Hi-Tech District  
-				XIAMEN  FUJIAN   361000 
-				CN
-
-C0-DC-DA   (hex)		Samsung Electronics Co.,Ltd
-C0DCDA     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-04-B4-29   (hex)		Samsung Electronics Co.,Ltd
-04B429     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-48-79-4D   (hex)		Samsung Electronics Co.,Ltd
-48794D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-44-F9-71   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-44F971     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-18-F9-C4   (hex)		BAE Systems
-18F9C4     (base 16)		BAE Systems
-				21 continental boulevard
-				Merrimack  NH  03054
-				US
-
-60-AB-D2   (hex)		Bose Corporation
-60ABD2     (base 16)		Bose Corporation
-				The Mountain
-				Framingham  MA  01701-9168
-				US
-
-F0-EF-86   (hex)		Google, Inc.
-F0EF86     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-E4-C0-CC   (hex)		China Mobile Group Device Co.,Ltd.
-E4C0CC     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-5C-B1-3E   (hex)		Sagemcom Broadband SAS
-5CB13E     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-F4-E5-F2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4E5F2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-13-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-541310     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-8C-E5-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8CE5EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-CD-23   (hex)		Shenzhenshi Xinzhongxin  Co., Ltd
-A4CD23     (base 16)		Shenzhenshi Xinzhongxin  Co., Ltd
-				Building A3, Donghuan Industrial Zone, Nanpu Road, Shajing Town, Baoan District
-				Shenzhen  Guangdong  518125
-				CN
-
-B8-3A-5A   (hex)		Aruba, a Hewlett Packard Enterprise Company
-B83A5A     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-E4-AA-EA   (hex)		Liteon Technology Corporation
-E4AAEA     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-A0-94-6A   (hex)		Shenzhen XGTEC Technology Co,.Ltd.
-A0946A     (base 16)		Shenzhen XGTEC Technology Co,.Ltd.
-				Room 312, Changhong Science and Technology Building, No.18, South 12 Rd., High-tech Community, Yuehai Street, Nanshan District, Shenzhen
-				Shenzhen  Guangdong  518057
-				CN
-
-1C-2A-A3   (hex)		Shenzhen HongRui Optical Technology Co., Ltd.
-1C2AA3     (base 16)		Shenzhen HongRui Optical Technology Co., Ltd.
-				B#2F Shuangjinhui Industrial Park, Yonghe Road, Heping Village, Fuyong Town, Bao'an Dis
-				Shenzhen  Guangdong  518000
-				CN
-
-38-8E-7A   (hex)		AUTOIT
-388E7A     (base 16)		AUTOIT
-				212, Gasan digital 1-ro
-				Seoul  Geumcheon-gu  08502
-				KR
-
-4C-71-0C   (hex)		Cisco Systems, Inc
-4C710C     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-4C-71-0D   (hex)		Cisco Systems, Inc
-4C710D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-24-A6   (hex)		vivo Mobile Communication Co., Ltd.
-6C24A6     (base 16)		vivo Mobile Communication Co., Ltd.
-				#283,BBK Road
-				Wusha,Chang'An  DongGuan City,Guangdong,  523860
-				CN
-
-9C-5F-5A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-9C5F5A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-E4-47-B3   (hex)		zte corporation
-E447B3     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-FC-DB-21   (hex)		SAMSARA NETWORKS INC
-FCDB21     (base 16)		SAMSARA NETWORKS INC
-				525 York St
-				San Francisco  CA  94110
-				US
-
-60-77-71   (hex)		Texas Instruments
-607771     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-D8-CF-89   (hex)		Beijing DoSee Science and Technology Co., Ltd.
-D8CF89     (base 16)		Beijing DoSee Science and Technology Co., Ltd.
-				Room 819-158,Floor 8,XinCaiLiao Chuangye Building,No.7 FengHuiZhong Road, Haidian District
-				Beijing    100094
-				CN
-
-04-AA-E1   (hex)		BEIJING MICROVISION TECHNOLOGY CO.,LTD
-04AAE1     (base 16)		BEIJING MICROVISION TECHNOLOGY CO.,LTD
-				ROOM 207-208,2/F,TAIXIANG COMMERCIAL BUILDING,NO.1A,LONGXIANG ROAD,HAIDIAN DISTRICT,BEIJING,P.R.C
-				BEIJING  BEIJING  100191
-				CN
-
-44-DC-4E   (hex)		ITEL MOBILE LIMITED
-44DC4E     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-38-2A-19   (hex)		Technica Engineering GmbH
-382A19     (base 16)		Technica Engineering GmbH
-				Leopoldstraße 236
-				Munich    80807
-				DE
-
-74-D6-54   (hex)		GINT
-74D654     (base 16)		GINT
-				9F, 47, Daehak-ro, Youngtong-gu
-				Suwon-si  Gyeonggi-do  16225
-				KR
-
-B4-E8-C9   (hex)		XADA Technologies
-B4E8C9     (base 16)		XADA Technologies
-				No. 2-2, Xinyi Road Section 5, Lane 150, 1st Floor
-				Taipei City  Taipei City  110
-				TW
-
-7C-21-0E   (hex)		Cisco Systems, Inc
-7C210E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-94-2D-DC   (hex)		Samsung Electronics Co.,Ltd
-942DDC     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-54-F2-94   (hex)		Huawei Device Co., Ltd.
-54F294     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-24-5A-B5   (hex)		Samsung Electronics Co.,Ltd
-245AB5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-C0-D2-DD   (hex)		Samsung Electronics Co.,Ltd
-C0D2DD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-AC-1E-92   (hex)		Samsung Electronics Co.,LTD
-AC1E92     (base 16)		Samsung Electronics Co.,LTD
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon    16677
-				KR
-
-00-68-EB   (hex)		HP Inc.
-0068EB     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-7C-B3-7B   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-7CB37B     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
-				No.218 Qianwangang Road
-				Qingdao  Shangdong  266510
-				CN
-
-48-4C-86   (hex)		Huawei Device Co., Ltd.
-484C86     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-88-12-3D   (hex)		Suzhou Aquila Solutions Inc.
-88123D     (base 16)		Suzhou Aquila Solutions Inc.
-				Room 201, Building 3, 18 Dongchang Road, Suzhou Industry Park, Suzhou, PRC. Zip Code: 215000
-				Suzhou    215000
-				CN
-
-48-21-0B   (hex)		PEGATRON CORPORATION
-48210B     (base 16)		PEGATRON CORPORATION
-				5F No. 76, Ligong St., Beitou District
-				Taipei City  Taiwan  112
-				TW
-
-A0-1C-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A01C8D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-31-0E   (hex)		Cisco Systems, Inc
-7C310E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Dr.
-				San Jose  CA  94568
-				US
-
-F4-DE-AF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F4DEAF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-60-12-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-60123C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-A5-E7   (hex)		Nintendo Co.,Ltd
-48A5E7     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-08-2C-B6   (hex)		Apple, Inc.
-082CB6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F8-4E-73   (hex)		Apple, Inc.
-F84E73     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-26-5D   (hex)		Taicang T&W Electronics
-B4265D     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-F0-78-07   (hex)		Apple, Inc.
-F07807     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-CD-36   (hex)		Apple, Inc.
-3CCD36     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-B7-09   (hex)		zte corporation
-D4B709     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-38-14-4E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-38144E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-AC-BD-0B   (hex)		Leimac Ltd.
-ACBD0B     (base 16)		Leimac Ltd.
-				1551, Sazukawa-chou
-				Moriyama-shi  Shiga-ken  524-0215
-				JP
-
-E0-CC-F8   (hex)		Xiaomi Communications Co Ltd
-E0CCF8     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-98-52-4A   (hex)		Technicolor CH USA Inc.
-98524A     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-38-68-A4   (hex)		Samsung Electronics Co.,LTD
-3868A4     (base 16)		Samsung Electronics Co.,LTD
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-B4-A5-AC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-B4A5AC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-1C-78-4E   (hex)		China Mobile Iot Limited company
-1C784E     (base 16)		China Mobile Iot Limited company
-				No. 8 Yangliu North Road, Yubei District, Chongqing, China
-				Chong Qing  Chong Qing  401120
-				CN
-
-84-3E-79   (hex)		Shenzhen Belon Technology CO.,LTD
-843E79     (base 16)		Shenzhen Belon Technology CO.,LTD
-				Tsinghua Information
-				Shenzhen  Guangdong  518052
-				CN
-
-B8-19-04   (hex)		Nokia Shanghai Bell Co., Ltd.
-B81904     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-F4-A5-9D   (hex)		Huawei Device Co., Ltd.
-F4A59D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E0-F4-42   (hex)		Huawei Device Co., Ltd.
-E0F442     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F0-C4-2F   (hex)		Huawei Device Co., Ltd.
-F0C42F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C0-B4-7D   (hex)		Huawei Device Co., Ltd.
-C0B47D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-44-46-87   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
-444687     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
-				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
-				Chongqing  China  401120
-				CN
-
-E8-26-89   (hex)		Aruba, a Hewlett Packard Enterprise Company
-E82689     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-20-F3-75   (hex)		ARRIS Group, Inc.
-20F375     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-84-BB-69   (hex)		ARRIS Group, Inc.
-84BB69     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-10-5F-D4   (hex)		Tendyron Corporation
-105FD4     (base 16)		Tendyron Corporation
-				Tendyron Building,Zhongguancun NO.1 Park,Beiqing Road,Haidian District,Beijing,China
-				Beijing    100000
-				CN
-
-8C-E3-8E   (hex)		Kioxia Corporation
-8CE38E     (base 16)		Kioxia Corporation
-				1-21, Shibaura 3-chome
-				Minato-ku  Tokyo  108-0023
-				JP
-
-A0-B4-39   (hex)		Cisco Systems, Inc
-A0B439     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A4-B4-39   (hex)		Cisco Systems, Inc
-A4B439     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-10-38   (hex)		Micro Research Ltd.
-001038     (base 16)		Micro Research Ltd.
-				2F Minami-Shinagawa N Bldg., 2-2-10 Minami-Shinagawa
-				Tokyo  Shinagawa-Ku  140-0004
-				JP
-
-E8-1B-4B   (hex)		amnimo Inc.
-E81B4B     (base 16)		amnimo Inc.
-				M21-4, 2-9-32 Nakacho
-				Musashino-shi  Tokyo  180-8750
-				JP
-
-CC-F4-11   (hex)		Google, Inc.
-CCF411     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-9C-2D-CF   (hex)		Shishi Tongyun Technology(Chengdu)Co.,Ltd.
-9C2DCF     (base 16)		Shishi Tongyun Technology(Chengdu)Co.,Ltd.
-				No. 1268 Middle Section of Tianfu Avenue, Chengdu High-tech Zone, China (Sichuan) Pilot Free Trade Zone
-				Chengdu  Sichuan  610017
-				CN
-
-94-24-B8   (hex)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
-9424B8     (base 16)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
-				Jinji West Road, Qianshan,
-				Zhuhai  Guangdong  519070
-				CN
-
-C8-03-F5   (hex)		Ruckus Wireless
-C803F5     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-00-0D-0A   (hex)		Barco Projection Systems NV
-000D0A     (base 16)		Barco Projection Systems NV
-				Beneluxpark 21
-				Kortrijk  West Flanders  8500
-				BE
-
-C4-67-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C467D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-9C-8A-CB   (hex)		Juniper Networks
-9C8ACB     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C8-C4-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C8C465     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-1C-43-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C4363     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-29-2F   (hex)		New H3C Technologies Co., Ltd
-94292F     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-D4-9A-A0   (hex)		VNPT TECHNOLOGY
-D49AA0     (base 16)		VNPT TECHNOLOGY
-				HoaLac Hi-Tech Park
-				HANOI  HANOI  10000
-				VN
-
-F8-0F-F9   (hex)		Google, Inc.
-F80FF9     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-8C-5A-C1   (hex)		Huawei Device Co., Ltd.
-8C5AC1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A8-5A-E0   (hex)		Huawei Device Co., Ltd.
-A85AE0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A4-B6-1E   (hex)		Huawei Device Co., Ltd.
-A4B61E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-FE-5B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-C4FE5B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-C0-39-37   (hex)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
-C03937     (base 16)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
-				Jinji West Road, Qianshan,
-				Zhuhai  Guangdong  519070
-				CN
-
-B4-4C-3B   (hex)		Zhejiang Dahua Technology Co., Ltd.
-B44C3B     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-40-A2-DB   (hex)		Amazon Technologies Inc.
-40A2DB     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-4C-6C-13   (hex)		IoT Company Solucoes Tecnologicas Ltda
-4C6C13     (base 16)		IoT Company Solucoes Tecnologicas Ltda
-				Rua Jordao Schiavetto, 436 - Sala 6
-				Hortolandia  Sao Paulo  13184-080
-				BR
-
-A8-85-D7   (hex)		Sangfor Technologies Inc.
-A885D7     (base 16)		Sangfor Technologies Inc.
-				block A1 ?nanshan ipark, No 1001, xueyuan road
-				Shenzhen    518100
-				CN
-
-44-4A-DB   (hex)		Apple, Inc.
-444ADB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-84-F8-83   (hex)		Luminar Technologies
-84F883     (base 16)		Luminar Technologies
-				12601 Research Pkwy
-				Orlando  FL  32828-7335
-				US
-
-9C-A5-13   (hex)		Samsung Electronics Co.,Ltd
-9CA513     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-10-39-E9   (hex)		Juniper Networks
-1039E9     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-30-90-48   (hex)		Apple, Inc.
-309048     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-D4-1F-0C   (hex)		JAI Manufacturing
-D41F0C     (base 16)		JAI Manufacturing
-				2960-14 Uenojo Nishikata
-				Kushima  Miyazaki  888-0004
-				JP
-
-C8-FA-84   (hex)		Trusonus corp.
-C8FA84     (base 16)		Trusonus corp.
-				6F., No.42, Songjiang Rd., Zhongshan Dist
-				Taipei    10455
-				TW
-
-C4-02-E1   (hex)		Khwahish Technologies Private Limited
-C402E1     (base 16)		Khwahish Technologies Private Limited
-				Plot # 42, Thirugnana Sambandhar Street, Srinivasa Nagar, Madipakkam
-				Chennai  TamilNadu  600091
-				IN
-
-F8-5B-3B   (hex)		ASKEY COMPUTER CORP
-F85B3B     (base 16)		ASKEY COMPUTER CORP
-				10F,No.119,JIANKANG RD,ZHONGHE DIST
-				NEW TAIPEI  TAIWAN  23585
-				TW
-
-78-6D-EB   (hex)		GE Lighting
-786DEB     (base 16)		GE Lighting
-				1975 Noble Rd
-				East Cleveland  OH  44112
-				US
-
-88-E9-A4   (hex)		Hewlett Packard Enterprise
-88E9A4     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-28-63-BD   (hex)		APTIV SERVICES US, LLC
-2863BD     (base 16)		APTIV SERVICES US, LLC
-				5725 Innovation Drive
-				Troy  MI  48098
-				US
-
-1C-72-1D   (hex)		Dell Inc.
-1C721D     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-F4-1C-95   (hex)		BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
-F41C95     (base 16)		BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
-				Room 2005, 2f, building B, No.1 Kaituo Road, Shangdi Information Industry base, Haidian District
-				BEIJING    100085
-				CN
-
-A0-68-7E   (hex)		ARRIS Group, Inc.
-A0687E     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-A8-70-5D   (hex)		ARRIS Group, Inc.
-A8705D     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-54-65-03   (hex)		Quectel Wireless Solutions Co., Ltd.
-546503     (base 16)		Quectel Wireless Solutions Co., Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-9C-97-89   (hex)		1MORE
-9C9789     (base 16)		1MORE
-				TianliaoBuilding F14, New Materials Industrial Park, Xueyuan Blvd?Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-1C-05-B7   (hex)		Chongqing Trantor Technology Co., Ltd.
-1C05B7     (base 16)		Chongqing Trantor Technology Co., Ltd.
-				No.69,Huoju Avenue,Jiulongpo District.
-				Chongqing  Chongqing  400050
-				CN
-
-00-0E-F3   (hex)		Smartlabs, Inc. 
-000EF3     (base 16)		Smartlabs, Inc. 
-				1621 Alton Parkway, Suite 100
-				Irvine  CA  92606
-				US
-
-A0-43-B0   (hex)		Hangzhou BroadLink Technology Co.,Ltd
-A043B0     (base 16)		Hangzhou BroadLink Technology Co.,Ltd
-				Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China
-				Hangzhou  Zhejiang  310052
-				CN
-
-74-AC-B9   (hex)		Ubiquiti Networks Inc.
-74ACB9     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-F4-92-BF   (hex)		Ubiquiti Networks Inc.
-F492BF     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-D8-C5-61   (hex)		CommFront Communications Pte Ltd
-D8C561     (base 16)		CommFront Communications Pte Ltd
-				No. 1 Yishun Industrial ST 1, #05-31 A'Posh BizHub
-				SG  SG  768160
-				SG
-
-0C-29-EF   (hex)		Dell Inc.
-0C29EF     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-60-D8-9C   (hex)		HMD Global Oy
-60D89C     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-F8-2E-8E   (hex)		Nanjing Kechen Electric Co., Ltd.
-F82E8E     (base 16)		Nanjing Kechen Electric Co., Ltd.
-				Room 202, Building 12, No. 50 Daguang road
-				Nanjing    210001
-				CN
-
-B4-C9-B9   (hex)		Sichuan AI-Link Technology Co., Ltd.
-B4C9B9     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-F0-46-3B   (hex)		Comcast Cable Corporation
-F0463B     (base 16)		Comcast Cable Corporation
-				1800 Arch Street
-				Philadelphia  PA  19103
-				US
-
-68-D7-9A   (hex)		Ubiquiti Networks Inc.
-68D79A     (base 16)		Ubiquiti Networks Inc.
-				2580 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-1C-63-BF   (hex)		SHENZHEN BROADTEL  TELECOM CO.,LTD
-1C63BF     (base 16)		SHENZHEN BROADTEL  TELECOM CO.,LTD
-				No.14-1, Tongqing Road, Baolong street, Longgang District
-				ShenZhen  GuangDong  518116
-				CN
-
-AC-36-51   (hex)		Jiangsu Hengtong Terahertz Technology Co., Ltd.
-AC3651     (base 16)		Jiangsu Hengtong Terahertz Technology Co., Ltd.
-				Room 1312, Beiyou Technology Building, Haidian District
-				Beijing  Beijing  100876
-				CN
-
-68-4A-76   (hex)		eero inc.
-684A76     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-68-8F-C9   (hex)		Zhuolian (Shenzhen) Communication Co., Ltd
-688FC9     (base 16)		Zhuolian (Shenzhen) Communication Co., Ltd
-				Shengli electromechanical Co., Ltd. 201, No.19, Xixiang section, Guangshen Road, Jingbei community, Xixiang street, Bao'an District
-				Shenzhen  Shenzhen  518101
-				CN
-
-F0-81-75   (hex)		Sagemcom Broadband SAS
-F08175     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-D8-47-32   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-D84732     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-28-64-B0   (hex)		Huawei Device Co., Ltd.
-2864B0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-04-F1-69   (hex)		Huawei Device Co., Ltd.
-04F169     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-21-EC   (hex)		Huawei Device Co., Ltd.
-5021EC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-8C-68-3A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-8C683A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B4-6E-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B46E08     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-5E-0C   (hex)		HMD Global Oy
-005E0C     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-B4-81-07   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-B48107     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-70-66-55   (hex)		AzureWave Technology Inc.
-706655     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-64-7C-34   (hex)		Ubee Interactive Co., Limited
-647C34     (base 16)		Ubee Interactive Co., Limited
-				Flat/RM 1202, 12/F, AT Tower 
-				North Point  Hong Kong  180
-				HK
-
-6C-38-A1   (hex)		Ubee Interactive Co., Limited
-6C38A1     (base 16)		Ubee Interactive Co., Limited
-				Flat/RM 1202, 12/F, AT Tower 
-				North Point  Hong Kong  180
-				HK
-
-78-53-0D   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-78530D     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-0C-48-C6   (hex)		CELESTICA INC.
-0C48C6     (base 16)		CELESTICA INC.
-				1900-5140 Yonge Street PO Box 42   
-				Toronto  Ontario  M2N 6L7
-				CA
-
-A4-29-85   (hex)		Sichuan AI-Link Technology Co., Ltd.
-A42985     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-78-AC-44   (hex)		Dell Inc.
-78AC44     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-B8-D4-E7   (hex)		Aruba, a Hewlett Packard Enterprise Company
-B8D4E7     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-D8-4C-90   (hex)		Apple, Inc.
-D84C90     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-24-D0-DF   (hex)		Apple, Inc.
-24D0DF     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-6C-4A-85   (hex)		Apple, Inc.
-6C4A85     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-F0-33   (hex)		Apple, Inc.
-28F033     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-9E-F7   (hex)		Extreme Networks, Inc.
-209EF7     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-BC-09-63   (hex)		Apple, Inc.
-BC0963     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-58-69   (hex)		Sailer Electronic Co., Ltd
-185869     (base 16)		Sailer Electronic Co., Ltd
-				No. 6, Sanxi Road, Ximagou Industrial Park, Jianxi District
-				Luoyang  Henan  471000
-				CN
-
-BC-2D-EF   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-BC2DEF     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-78-81-CE   (hex)		China Mobile Iot Limited company
-7881CE     (base 16)		China Mobile Iot Limited company
-				No. 8 Yangliu North Road, Yubei District, Chongqing, China
-				Chong Qing  Chong Qing  401120
-				CN
-
-BC-FF-21   (hex)		Smart Code(shenzhen)Technology Co.,Ltd
-BCFF21     (base 16)		Smart Code(shenzhen)Technology Co.,Ltd
-				Room 1206, Satellite Building,2002 Keyuan Road, Nanshan 
-				Shenzhen   Guangdong (Province)   518000
-				CN
-
-44-5C-E9   (hex)		Samsung Electronics Co.,Ltd
-445CE9     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-C0-16-92   (hex)		China Mobile Group Device Co.,Ltd.
-C01692     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-38-17-30   (hex)		Ulrich Lippert GmbH & Co KG
-381730     (base 16)		Ulrich Lippert GmbH & Co KG
-				Christian-Henkel-Str. 12
-				Berlin    12349
-				DE
-
-40-2E-71   (hex)		Texas Instruments
-402E71     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-70-76-DD   (hex)		OxyGuard Internation A/S
-7076DD     (base 16)		OxyGuard Internation A/S
-				Farum Gydevej 64
-				Farum    DK-3520
-				DK
-
-94-E9-EE   (hex)		Huawei Device Co., Ltd.
-94E9EE     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-28-E3-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-28E34E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E0-23-FF   (hex)		Fortinet, Inc.
-E023FF     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale    94086
-				US
-
-8C-59-DC   (hex)		ASR Microelectronics (Shanghai) Co., Ltd.
-8C59DC     (base 16)		ASR Microelectronics (Shanghai) Co., Ltd.
-				Building 2, NO.399 Keyuan Road,Pudong District
-				Shanghai  Shanghai  201210
-				CN
-
-18-82-8C   (hex)		Arcadyan Corporation
-18828C     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-9C-F0-29   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-9CF029     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-28-56-C1   (hex)		Harman/Becker Automotive Systems GmbH
-2856C1     (base 16)		Harman/Becker Automotive Systems GmbH
-				15th Fl, 400 Atlantic Street
-				Stamford  CT  06901
-				US
-
-78-B8-D6   (hex)		Zebra Technologies Inc.
-78B8D6     (base 16)		Zebra Technologies Inc.
-				ONE ZEBRA PLAZA
-				HOLTSVILLE  NY  11742
-				US
-
-BC-4A-56   (hex)		Cisco Systems, Inc
-BC4A56     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-6C-61-F4   (hex)		SFR
-6C61F4     (base 16)		SFR
-				12 rue jean-philippe Rameau CS 80001
-				La plaine saint denis   FRANCE  93634
-				FR
-
-F4-90-CB   (hex)		IEEE Registration Authority
-F490CB     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-10-7F   (hex)		CRESTRON ELECTRONICS, INC.
-00107F     (base 16)		CRESTRON ELECTRONICS, INC.
-				15 Volvo Drive
-				Rockleigh  NJ  07647
-				US
-
-00-1B-85   (hex)		MAN Energy Solutions
-001B85     (base 16)		MAN Energy Solutions
-				Teglholmsgade 41
-				Copenhagen    2450
-				DK
-
-58-49-3B   (hex)		Palo Alto Networks
-58493B     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-00-1B-17   (hex)		Palo Alto Networks
-001B17     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-58-59-C2   (hex)		Extreme Networks, Inc.
-5859C2     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-B8-2F-CB   (hex)		CMS Electracom
-B82FCB     (base 16)		CMS Electracom
-				24 Binney Road
-				Kings Park  NSW  2148
-				AU
-
-10-CE-45   (hex)		Miromico AG
-10CE45     (base 16)		Miromico AG
-				Gallusstrasse 4
-				Zurich  Zurich  CH-8006
-				CH
-
-78-7D-53   (hex)		Extreme Networks, Inc.
-787D53     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-7C-95-B1   (hex)		Extreme Networks, Inc.
-7C95B1     (base 16)		Extreme Networks, Inc.
-				1011 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-EC-68-81   (hex)		Palo Alto Networks
-EC6881     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-78-6D-94   (hex)		Palo Alto Networks
-786D94     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-F8-AF-05   (hex)		Huawei Device Co., Ltd.
-F8AF05     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-4C-FC-AA   (hex)		Tesla,Inc.
-4CFCAA     (base 16)		Tesla,Inc.
-				3500 Deer Creek Rd.
-				PALO ALTO  CA  94304
-				US
-
-CC-AB-2C   (hex)		HUMAX Co., Ltd.
-CCAB2C     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-6C-6D-09   (hex)		Kyowa Electronics Co.,Ltd.
-6C6D09     (base 16)		Kyowa Electronics Co.,Ltd.
-				4-3-31 Takatsukasa
-				Takarazuka  Hyogo  665-0051
-				JP
-
-24-43-E2   (hex)		DASAN Network Solutions
-2443E2     (base 16)		DASAN Network Solutions
-				DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu
-				Seongnam-si  Gyeonggi-do  13493
-				KR
-
-A8-6A-BB   (hex)		Sagemcom Broadband SAS
-A86ABB     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-90-17-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-90173F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-FF-70   (hex)		Technicolor CH USA Inc.
-A0FF70     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-60-7E-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-607ECD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-54-8A-BA   (hex)		Cisco Systems, Inc
-548ABA     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C8-07-39   (hex)		NAKAYO Inc
-C80739     (base 16)		NAKAYO Inc
-				1-3-2, Soja-machi
-				Maebashi-shi  Gunma  371-0853
-				JP
-
-8C-7C-FF   (hex)		Brocade Communications Systems LLC
-8C7CFF     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-AC-3C-8E   (hex)		Flextronics Computing(Suzhou)Co.,Ltd.
-AC3C8E     (base 16)		Flextronics Computing(Suzhou)Co.,Ltd.
-				No.1 GuanPu Road. Guoxiang street , WuZhong District,Suzhou City, Jiangsu Province. 
-				Suzhou        215124   
-				CN
-
-40-62-34   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
-406234     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
-				No. 1500 Zuchongzhi Rd, Building #3
-				Shanghai    201203
-				CN
-
-88-94-71   (hex)		Brocade Communications Systems LLC
-889471     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-78-A6-E1   (hex)		Brocade Communications Systems LLC
-78A6E1     (base 16)		Brocade Communications Systems LLC
-				1320 Ridder Park Dr
-				San Jose  CA  95131
-				US
-
-00-94-EC   (hex)		Huawei Device Co., Ltd.
-0094EC     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-74-45-2D   (hex)		Huawei Device Co., Ltd.
-74452D     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A4-50-06   (hex)		SHENZHEN HUACHUANG SHIDAI TECHNOLOGYCO.,LTD
-A45006     (base 16)		SHENZHEN HUACHUANG SHIDAI TECHNOLOGYCO.,LTD
-				longhua dalang huaronglu lianjiangongyeyuan 4-5
-				shenzhen  guangdong  518000
-				CN
-
-C8-71-25   (hex)		Johnson Outdoors Marine Electronics d/b/a Minnkota
-C87125     (base 16)		Johnson Outdoors Marine Electronics d/b/a Minnkota
-				1531 E Madison Ave
-				Mankato  MN  56001
-				US
-
-68-6D-BC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-686DBC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-80-CF-A2   (hex)		Huawei Device Co., Ltd.
-80CFA2     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-08-03-42   (hex)		Palo Alto Networks
-080342     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-FC-3D-A5   (hex)		Arcadyan Corporation
-FC3DA5     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-EC-4F-82   (hex)		Calix Inc.
-EC4F82     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-44-65-7F   (hex)		Calix Inc.
-44657F     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-48-77-46   (hex)		Calix Inc.
-487746     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-EC-6C-B5   (hex)		zte corporation
-EC6CB5     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-C0-B1-01   (hex)		zte corporation
-C0B101     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-14-01-52   (hex)		Samsung Electronics Co.,Ltd
-140152     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-33-AC   (hex)		Silicon Laboratories
-BC33AC     (base 16)		Silicon Laboratories
-				7000 W. William Cannon Dr.
-				Austin  TX  78735
-				US
-
-94-FB-A7   (hex)		IEEE Registration Authority
-94FBA7     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-98-8E-79   (hex)		Qudelix, Inc.
-988E79     (base 16)		Qudelix, Inc.
-				605-ho, 21, Baekbeom-ro 31-gil, Mapo-gu
-				Seoul    12110
-				KR
-
-98-F6-21   (hex)		Xiaomi Communications Co Ltd
-98F621     (base 16)		Xiaomi Communications Co Ltd
-				The Rainbow City of China Resources
-				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
-				CN
-
-C0-3E-BA   (hex)		Dell Inc.
-C03EBA     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-C0-39-5A   (hex)		Zhejiang Dahua Technology Co., Ltd.
-C0395A     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-20-64-CB   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-2064CB     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-F0-55-01   (hex)		Huawei Device Co., Ltd.
-F05501     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-7C-F2-DD   (hex)		Vence Corp
-7CF2DD     (base 16)		Vence Corp
-				16885 W Bernardo Dr., STE 209
-				San Diego  CA  92127
-				US
-
-D0-76-8F   (hex)		Calix Inc.
-D0768F     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-14-13-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1413FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-00-E0-B7   (hex)		Cosworth Electronics Ltd
-00E0B7     (base 16)		Cosworth Electronics Ltd
-				The Octagon, St. James Mill Road
-				Northampton  Northamptonshire  NN5 5RA, GB
-				GB
-
-A4-93-40   (hex)		Beijing Supvan Information Technology Co.,Ltd.
-A49340     (base 16)		Beijing Supvan Information Technology Co.,Ltd.
-				206.2/F,Building No.1.No.1 Gaoxin Three Street. Huilongguan Town,Changping District
-				Beijing  Beijing  102206
-				CN
-
-F8-E8-77   (hex)		Harman/Becker Automotive Systems GmbH
-F8E877     (base 16)		Harman/Becker Automotive Systems GmbH
-				Becker-Göring-Straße 16
-				Karlsbad  Baden-Württemberg  76307
-				DE
-
-A0-9B-12   (hex)		China Mobile IOT Company Limited
-A09B12     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-94-08-53   (hex)		Liteon Technology Corporation
-940853     (base 16)		Liteon Technology Corporation
-				4F, 90, Chien 1 Road
-				New Taipei City  Taiwan  23585
-				TW
-
-B4-9E-80   (hex)		Sichuan Changhong Electric Ltd.
-B49E80     (base 16)		Sichuan Changhong Electric Ltd.
-				No.35,East MianXin Road,MianYang,Sichaun,China.
-				MianYang  SiChuan  PRC 621000
-				CN
-
-00-E2-2C   (hex)		China Mobile Group Device Co.,Ltd.
-00E22C     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-78-11-00   (hex)		Quantumsolution
-781100     (base 16)		Quantumsolution
-				Rm 903, STX V-Tower, 128, Gasandigital 1-ro, Geumcheon-gu
-				Seoul    08507
-				KR
-
-E8-7F-95   (hex)		Apple, Inc.
-E87F95     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-C0-8B   (hex)		Apple, Inc.
-88C08B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-74-AB-93   (hex)		Blink by Amazon 
-74AB93     (base 16)		Blink by Amazon 
-				100 Riverpark Drive
-				North Reading   MA  01864
-				US
-
-7C-A9-6B   (hex)		Syrotech Networks. Ltd.
-7CA96B     (base 16)		Syrotech Networks. Ltd.
-				UNIT NO.-5 20F, KIN WING INDUSTERIAL BUILDING,33 KIN WING STREET
-				TUEN MUN    999077
-				HK
-
-98-06-3C   (hex)		Samsung Electronics Co.,Ltd
-98063C     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-38-DE-AD   (hex)		Intel Corporate
-38DEAD     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-D4-6D-6D   (hex)		Intel Corporate
-D46D6D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-B4-69-21   (hex)		Intel Corporate
-B46921     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-F8-F2-1E   (hex)		Intel Corporate
-F8F21E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-74-A7-EA   (hex)		Amazon Technologies Inc.
-74A7EA     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-4C-7C-D9   (hex)		Apple, Inc.
-4C7CD9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-D7-AF   (hex)		IEEE Registration Authority
-F0D7AF     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-7C-B2-7D   (hex)		Intel Corporate
-7CB27D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-04-ED-33   (hex)		Intel Corporate
-04ED33     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-5C-80-B6   (hex)		Intel Corporate
-5C80B6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-84-C5-A6   (hex)		Intel Corporate
-84C5A6     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-AC-67-5D   (hex)		Intel Corporate
-AC675D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-F8-E4-E3   (hex)		Intel Corporate
-F8E4E3     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-D8-4F-37   (hex)		Proxis, spol. s r.o.
-D84F37     (base 16)		Proxis, spol. s r.o.
-				Slovenska 1
-				Bardejov  PSK  08501
-				SK
-
-AC-12-03   (hex)		Intel Corporate
-AC1203     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-DC-1B-A1   (hex)		Intel Corporate
-DC1BA1     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-5C-A5-BC   (hex)		eero inc.
-5CA5BC     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco    94107
-				US
-
-04-33-C2   (hex)		Intel Corporate
-0433C2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-C8-58-C0   (hex)		Intel Corporate
-C858C0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-64-BC-58   (hex)		Intel Corporate
-64BC58     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-A4-C3-F0   (hex)		Intel Corporate
-A4C3F0     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-50-76-AF   (hex)		Intel Corporate
-5076AF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-DC-91-BF   (hex)		Amazon Technologies Inc.
-DC91BF     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-E0-92-A7   (hex)		Feitian Technologies Co., Ltd
-E092A7     (base 16)		Feitian Technologies Co., Ltd
-				Floor 17, Tower B, Huizhi Mansion, No.9 Xueqing Rd, Haidian District
-				Beijing    100085
-				CN
-
-08-B0-A7   (hex)		Truebeyond Co., Ltd
-08B0A7     (base 16)		Truebeyond Co., Ltd
-				D-906, 60, Haan-ro
-				Gwangmyeong  Gyeonggi  14322
-				KR
-
-C0-63-69   (hex)		BINXIN TECHNOLOGY(ZHEJIANG) LTD.
-C06369     (base 16)		BINXIN TECHNOLOGY(ZHEJIANG) LTD.
-				B4066 Haichuang Park,368 Liuhe Road, Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-18-41-FE   (hex)		Digital 14
-1841FE     (base 16)		Digital 14
-				Elektroniikkatie 8
-				Oulu    90590
-				FI
-
-6C-CE-44   (hex)		1MORE
-6CCE44     (base 16)		1MORE
-				TianliaoBuilding F14?New Materials Industrial Park,Xueyuan Blvd,Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-B0-76-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B0761B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-11-62   (hex)		Arlo Technology
-A41162     (base 16)		Arlo Technology
-				3030 Orchard Parkway
-				San Jose  CA  95134
-				US
-
-00-1D-05   (hex)		Cooper Lighting Solutions
-001D05     (base 16)		Cooper Lighting Solutions
-				1121 Highway 74 S
-				Peachtree City  GA  30269
-				US
-
-8C-0E-60   (hex)		Nanjing Juplink Intelligent Technologies Co., Ltd.
-8C0E60     (base 16)		Nanjing Juplink Intelligent Technologies Co., Ltd.
-				 No. 757 Dixiu Road, Binjiang Economic Development Zone, Jiangning District
-				Nanjing  Jiangsu  211100
-				CN
-
-18-AB-1D   (hex)		Samsung Electronics Co.,Ltd
-18AB1D     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-BC-E9-2F   (hex)		HP Inc.
-BCE92F     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-84-37-D5   (hex)		Samsung Electronics Co.,Ltd
-8437D5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-82-C5   (hex)		Samsung Electronics Co.,Ltd
-3482C5     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-84-D8-1B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-84D81B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-E8-A2-45   (hex)		Juniper Networks
-E8A245     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-88-29-49   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-882949     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-F8-64-B8   (hex)		zte corporation
-F864B8     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-14-51-20   (hex)		Huawei Device Co., Ltd.
-145120     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C0-D1-93   (hex)		Huawei Device Co., Ltd.
-C0D193     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-3C-84-6A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-3C846A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-78-04-E3   (hex)		Huawei Device Co., Ltd.
-7804E3     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A4-3B-0E   (hex)		Huawei Device Co., Ltd.
-A43B0E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-24-A1-60   (hex)		Espressif Inc.
-24A160     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-DC-AE-EB   (hex)		Ruckus Wireless
-DCAEEB     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-24-81-C7   (hex)		Huawei Device Co., Ltd.
-2481C7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-FC-86-2A   (hex)		Huawei Device Co., Ltd.
-FC862A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-3D-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1C3D2F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-75-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-EC753E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-91-64   (hex)		ChongQing Lavid Technology Co., Ltd.
-909164     (base 16)		ChongQing Lavid Technology Co., Ltd.
-				Plant No. 3, Block M2, Photoelectric Park, Wuqiao Lianhe Economic Development Zone, Wanzhou District
-				Chongqing    404100
-				CN
-
-EC-DB-86   (hex)		API-K
-ECDB86     (base 16)		API-K
-				ZA Tire Poix
-				Saint Vincent de Mercuze  Isère  38660
-				FR
-
-48-43-DD   (hex)		Amazon Technologies Inc.
-4843DD     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-08-38-69   (hex)		Hong Kong AMobile Intelligent Corp. Limited Taiwan Branch
-083869     (base 16)		Hong Kong AMobile Intelligent Corp. Limited Taiwan Branch
-				8F.-1, No.700, Zhongzheng Rd., Zhonghe Dist.
-				New Taipei City 235    23552
-				TW
-
-D8-9E-D4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-D89ED4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-84-03-28   (hex)		Juniper Networks
-840328     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-00-1C-FC   (hex)		Sumitomo Electric Industries, Ltd
-001CFC     (base 16)		Sumitomo Electric Industries, Ltd
-				1-1-3, Shimaya, Konohana-ku
-				Osaka    554-0024
-				JP
-
-00-16-36   (hex)		Quanta Computer Inc.
-001636     (base 16)		Quanta Computer Inc.
-				No. 211, Wen Hwa 2Rd., Kuei Shan Hsiang
-				Tao Yuan Shien    0000
-				TW
-
-54-F1-5F   (hex)		Sichuan AI-Link Technology Co., Ltd.
-54F15F     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-E0-79-C4   (hex)		iRay Technology Company Limited
-E079C4     (base 16)		iRay Technology Company Limited
-				Building 45, No. 1000, Jinhai RD., Pudong New Area
-				Shanghai    201206
-				CN
-
-88-40-67   (hex)		infomark
-884067     (base 16)		infomark
-				3F. Humaxvillage, 216 Hwangsaeul-ro
-				Seongnam-si    13595
-				KR
-
-AC-95-72   (hex)		Jovision Technology Co., Ltd.
-AC9572     (base 16)		Jovision Technology Co., Ltd.
-				Floor 12, Building 3, Aosheng Square, No.1166 Xinluo Street
-				Jinan  Shandong  250101
-				CN
-
-40-D2-5F   (hex)		ITEL MOBILE LIMITED
-40D25F     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-A8-03-2A   (hex)		Espressif Inc.
-A8032A     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-00-19-F5   (hex)		Imagination Technologies Ltd
-0019F5     (base 16)		Imagination Technologies Ltd
-				Home Park Estate
-				Kings Langley  Hertfordshire  WD4 8LZ
-				GB
-
-00-CB-BD   (hex)		Cambridge Broadband Networks Group
-00CBBD     (base 16)		Cambridge Broadband Networks Group
-				1 Hammersmith Broadway
-				London    W6 9DL
-				GB
-
-58-94-A2   (hex)		KETEK GmbH
-5894A2     (base 16)		KETEK GmbH
-				Hofer Str. 3
-				München    81737
-				DE
-
-4C-22-19   (hex)		YUANFUDAO HK LIMTED
-4C2219     (base 16)		YUANFUDAO HK LIMTED
-				Building C, global creative center, No. 10, Furong street
-				Beijing    100102
-				CN
-
-54-D9-C6   (hex)		Huawei Device Co., Ltd.
-54D9C6     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-30-8A-F7   (hex)		Huawei Device Co., Ltd.
-308AF7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-E7-D8   (hex)		Samsung Electronics Co.,Ltd
-64E7D8     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-D8-EF-42   (hex)		Huawei Device Co., Ltd.
-D8EF42     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-80-CC-12   (hex)		Huawei Device Co., Ltd.
-80CC12     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-18-AA-0F   (hex)		Huawei Device Co., Ltd.
-18AA0F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B0-A4-60   (hex)		Intel Corporate
-B0A460     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3 
-				Kulim  Kedah  09000
-				MY
-
-AC-9A-96   (hex)		Maxlinear, Inc
-AC9A96     (base 16)		Maxlinear, Inc
-				Am Campeon 3
-				Neubiberg  Bavaria  85579
-				DE
-
-8C-70-86   (hex)		Gesellschaft für Sonder-EDV-Anlagen mbH
-8C7086     (base 16)		Gesellschaft für Sonder-EDV-Anlagen mbH
-				Lorsbacher Straße 31
-				Hofheim    65719
-				DE
-
-1C-28-AF   (hex)		Aruba, a Hewlett Packard Enterprise Company
-1C28AF     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-E4-24-6C   (hex)		Zhejiang Dahua Technology Co., Ltd.
-E4246C     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-E8-EB-1B   (hex)		Microchip Technology Inc.
-E8EB1B     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-84-02-83   (hex)		HUMAX Co., Ltd.
-840283     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-68-D6-ED   (hex)		GooWi Wireless Technology Co., Limited
-68D6ED     (base 16)		GooWi Wireless Technology Co., Limited
-				RM402 Building212, Tairan Technology Park, Futian District
-				Shenzhen  Guangdong  518000
-				CN
-
-00-E4-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-00E406     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-44-22-7C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-44227C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-B1-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CCB182     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-90-2F   (hex)		LG Electronics (Mobile Communications)
-48902F     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-28-B7-7C   (hex)		IEEE Registration Authority
-28B77C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-28-C2-1F   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-28C21F     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
-				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
-				Bangpakong  Chachoengsao  24180
-				TH
-
-5C-7D-7D   (hex)		Technicolor CH USA Inc.
-5C7D7D     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-F4-BF-A8   (hex)		Juniper Networks
-F4BFA8     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-C0-61-9A   (hex)		IEEE Registration Authority
-C0619A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-C4-2B-44   (hex)		Huawei Device Co., Ltd.
-C42B44     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-F8-A2-6D   (hex)		CANON INC.
-F8A26D     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-74-42-7F   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-74427F     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-40-06-34   (hex)		Huawei Device Co., Ltd.
-400634     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-70-61-EE   (hex)		Sunwoda Electronic Co.,Ltd
-7061EE     (base 16)		Sunwoda Electronic Co.,Ltd
-				No 2,Yihe Road, shiyan Street?shilong Community ,Baoan District
-				Shenzhen    518105
-				CN
-
-14-3F-C3   (hex)		SnapAV
-143FC3     (base 16)		SnapAV
-				1800 Continental Blvd
-				Charlotte  NC  28273
-				US
-
-20-9A-7D   (hex)		Sagemcom Broadband SAS
-209A7D     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-74-F9-CA   (hex)		Nintendo Co.,Ltd
-74F9CA     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-50-C6-8E   (hex)		Biwin Semiconductor (HK) Company Limted
-50C68E     (base 16)		Biwin Semiconductor (HK) Company Limted
-				5th/F., Block 4, Tongfuyu Industrial Park, Tanglang, Xili, Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-04-E7-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04E795     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-D0-DC   (hex)		Amazon Technologies Inc.
-A0D0DC     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-68-9E-0B   (hex)		Cisco Systems, Inc
-689E0B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-C8-FE-6A   (hex)		Juniper Networks
-C8FE6A     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-80-CA-4B   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LTD
-80CA4B     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LTD
-				No.2, Danzi North Road, Kengzi Street,Pingshan District,
-				SHENZHEN  GUANGDONG  518122
-				CN
-
-64-F5-4E   (hex)		EM Microelectronic
-64F54E     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-10-27-79   (hex)		Sadel S.p.A.
-102779     (base 16)		Sadel S.p.A.
-				via Marino Serenari, 1
-				Castel Maggiore  Bologna  40013
-				IT
-
-C4-DD-57   (hex)		Espressif Inc.
-C4DD57     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-70-2F-4B   (hex)		Steelcase Inc.
-702F4B     (base 16)		Steelcase Inc.
-				901 44th Street SE
-				Grand Rapids  MI  49508-7594
-				US
-
-E4-75-DC   (hex)		Arcadyan Corporation
-E475DC     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-C4-16-88   (hex)		Huawei Device Co., Ltd.
-C41688     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-64-B0-E8   (hex)		Huawei Device Co., Ltd.
-64B0E8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-BC-A5-A9   (hex)		Apple, Inc.
-BCA5A9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-20-E2-A8   (hex)		Apple, Inc.
-20E2A8     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-A0-FB-C5   (hex)		Apple, Inc.
-A0FBC5     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-A9-98   (hex)		Huawei Device Co., Ltd.
-30A998     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-7D-60   (hex)		Apple, Inc.
-007D60     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-EC-C3-02   (hex)		HUMAX Co., Ltd.
-ECC302     (base 16)		HUMAX Co., Ltd.
-				HUMAX Village, 216, Hwangsaeul-ro, Bu
-				Seongnam-si  Gyeonggi-do  463-875
-				KR
-
-00-C3-43   (hex)		E-T-A Circuit Breakers Ltd
-00C343     (base 16)		E-T-A Circuit Breakers Ltd
-				6 Telford Close
-				Aylesbury  Buckinghamshire  HP198DG
-				GB
-
-58-20-8A   (hex)		IEEE Registration Authority
-58208A     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-00-90-D2   (hex)		Artel Video Systems
-0090D2     (base 16)		Artel Video Systems
-				5B Lyberty Way
-				Westford  MA  01886
-				US
-
-F0-AA-0B   (hex)		Arra Networks/ Spectramesh
-F0AA0B     (base 16)		Arra Networks/ Spectramesh
-				9201 Ward Pkwy #101
-				Kansas City  MO  64114
-				US
-
-94-56-41   (hex)		Palo Alto Networks
-945641     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-80-F5-B5   (hex)		Texas Instruments
-80F5B5     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-1C-30-08   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-1C3008     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-98-06-3A   (hex)		Home Control Singapore Pte Ltd
-98063A     (base 16)		Home Control Singapore Pte Ltd
-				151 Lorong Chuan
-				Singapore    556741
-				SG
-
-B4-BA-12   (hex)		China Mobile (Hangzhou) Information Technology Co.,Ltd.
-B4BA12     (base 16)		China Mobile (Hangzhou) Information Technology Co.,Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  311100
-				CN
-
-5C-F9-FD   (hex)		Taicang T&W Electronics
-5CF9FD     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-38-98-E9   (hex)		Huawei Device Co., Ltd.
-3898E9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-48-A5-16   (hex)		Huawei Device Co., Ltd.
-48A516     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-18-36-72   (hex)		Shaoxing ShunChuang Technology CO.,LTD
-183672     (base 16)		Shaoxing ShunChuang Technology CO.,LTD
-				N.O.398 west tongjiang load shangyu
-				Shaoxing  Zhejiang  312300
-				CN
-
-28-DE-65   (hex)		Aruba, a Hewlett Packard Enterprise Company
-28DE65     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-B0-A6-51   (hex)		Cisco Systems, Inc
-B0A651     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-D4-91-0F   (hex)		Amazon Technologies Inc.
-D4910F     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-B8-5F-B0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B85FB0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-FB-AA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C4FBAA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-DC-CA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ACDCCA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-78-31   (hex)		Huawei Device Co., Ltd.
-C07831     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-84-CC-63   (hex)		Huawei Device Co., Ltd.
-84CC63     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E0-E0-C2   (hex)		China Mobile Group Device Co.,Ltd.
-E0E0C2     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-F0-64-26   (hex)		Extreme Networks, Inc.
-F06426     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-70-3A-2D   (hex)		Shenzhen V-Link Technology CO., LTD.
-703A2D     (base 16)		Shenzhen V-Link Technology CO., LTD.
-				Room 1803, BaiRuiDa Building, Bantian Sub-district, LongGang District
-				Shenzhen  GuangDong  518000
-				CN
-
-1C-45-C2   (hex)		Huizhou City Sunsin lntelligent Technology Co.,Ltd
-1C45C2     (base 16)		Huizhou City Sunsin lntelligent Technology Co.,Ltd
-				Outside No.6 community, Zhongkai high tech Zone, Huizhou
-				Huizhou    516000
-				CN
-
-7C-4E-09   (hex)		Shenzhen Skyworth Wireless Technology Co.,Ltd
-7C4E09     (base 16)		Shenzhen Skyworth Wireless Technology Co.,Ltd
-				Unit 3A01,Block A Skyworth Building,Gaoxin Ave.I.S.,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-EC-7E-91   (hex)		ITEL MOBILE LIMITED
-EC7E91     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-FC-96-43   (hex)		Juniper Networks
-FC9643     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-A8-B0-88   (hex)		eero inc.
-A8B088     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-00-1A-65   (hex)		Seluxit
-001A65     (base 16)		Seluxit
-				Sofiendalsvej 74
-				Aalborg  SV  9200
-				DK
-
-28-0F-C5   (hex)		Beijing Leadsec Technology Co., Ltd.
-280FC5     (base 16)		Beijing Leadsec Technology Co., Ltd.
-				Venus Plaza No.21Zhongguancun Software Park,No.8 Dongbeiwang Xilu, Haidian District
-				Beijing  Beijing  100193
-				CN
-
-1C-EC-72   (hex)		Allradio Co., Ltd
-1CEC72     (base 16)		Allradio Co., Ltd
-				76, Deokcheon-ro 34beon-gil, Manan-gu
-				Anyang-si,Gyeonggi-do  Republic of Korea  430-803
-				KR
-
-E0-E1-A9   (hex)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
-E0E1A9     (base 16)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
-				Room 607-610, Block B, TAOJINDI Electronic Business Incubation Base
-				Tenglong Road, Longhua District,   Shenzhen Guangdong  518000
-				CN
-
-6C-14-14   (hex)		BUJEON ELECTRONICS Co,.Ltd
-6C1414     (base 16)		BUJEON ELECTRONICS Co,.Ltd
-				59, Seonjinan-gil, Sangnok-gu
-				Ansan-si  Gyeonggi-do  15633
-				KR
-
-C4-3C-EA   (hex)		BUFFALO.INC
-C43CEA     (base 16)		BUFFALO.INC
-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
-				Nagoya  Aichi Pref.  460-8315
-				JP
-
-B0-EC-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B0ECDD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-AC-67-84   (hex)		Google, Inc.
-AC6784     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-90-DE-80   (hex)		Shenzhen Century Xinyang Technology Co., Ltd
-90DE80     (base 16)		Shenzhen Century Xinyang Technology Co., Ltd
-				3F, North Building, Bantian High-tech industrial Zone, No. 2 of Bell Road
-				Shenzhen  Guangdong  518129
-				CN
-
-E4-DC-43   (hex)		Huawei Device Co., Ltd.
-E4DC43     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-24-30-F8   (hex)		Huawei Device Co., Ltd.
-2430F8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-9C-5F-B0   (hex)		Samsung Electronics Co.,Ltd
-9C5FB0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-E8-7F-6B   (hex)		Samsung Electronics Co.,Ltd
-E87F6B     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-FC-B6-9D   (hex)		Zhejiang Dahua Technology Co., Ltd.
-FCB69D     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-18-5B-B3   (hex)		Samsung Electronics Co.,Ltd
-185BB3     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-94-F2-BB   (hex)		Valeo Vision Systems
-94F2BB     (base 16)		Valeo Vision Systems
-				Dunmore Road
-				Tuam  Co. Galway  H54 Y276
-				IE
-
-64-20-E0   (hex)		T3 Technology Co., Ltd.
-6420E0     (base 16)		T3 Technology Co., Ltd.
-				No.65/113, Chamnan Phenjati, 12A Floor, Rama9 road
-				Bangkok  Bangkok  10310
-				TH
-
-5C-C0-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5CC0A0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-F3-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04F352     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-EC-A1-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-ECA1D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-6D-A4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A46DA4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-8B-0A   (hex)		Cisco Systems, Inc
-488B0A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-24-94-CB   (hex)		ARRIS Group, Inc.
-2494CB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-78-6A-1F   (hex)		ARRIS Group, Inc.
-786A1F     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-8C-7A-15   (hex)		Ruckus Wireless
-8C7A15     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-84-11-C2   (hex)		IEEE Registration Authority
-8411C2     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-28-AD-18   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
-28AD18     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
-				No.75,Zhongkai High-Tech Development District,Huizhou
-				Hui Zhou  Guangdong  516006
-				CN
-
-24-A4-87   (hex)		Huawei Device Co., Ltd.
-24A487     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-5A-86   (hex)		Huawei Device Co., Ltd.
-C45A86     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-20-AC-9C   (hex)		China Telecom Corporation Limited
-20AC9C     (base 16)		China Telecom Corporation Limited
-				31 Jinrong Street, Xicheng District, Beijing, China
-				Beijing, China    100033
-				CN
-
-74-78-27   (hex)		Dell Inc.
-747827     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-94-09-D3   (hex)		shenzhen maxtopic technology co.,ltd
-9409D3     (base 16)		shenzhen maxtopic technology co.,ltd
-				F3,Building 4, Ji'an Industrial Park, Songbai Blvd
-				shenzhen  guangdong  518108
-				CN
-
-58-D5-6E   (hex)		D-Link International
-58D56E     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-F4-8C-EB   (hex)		D-Link International
-F48CEB     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-EC-AD-E0   (hex)		D-Link International
-ECADE0     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-34-0A-33   (hex)		D-Link International
-340A33     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-BC-62-CE   (hex)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
-BC62CE     (base 16)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
-				8 Floor, Bd B, information port, Langshan RD, Nanshan district, 
-				Shenzhen  Guangdong  518057
-				CN
-
-78-2E-56   (hex)		China Mobile Group Device Co.,Ltd.
-782E56     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-C4-0B-31   (hex)		Apple, Inc.
-C40B31     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-30-24-A9   (hex)		HP Inc.
-3024A9     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-A8-6E-4E   (hex)		Huawei Device Co., Ltd.
-A86E4E     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-94-5F-34   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-945F34     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-60-3C-EE   (hex)		LG Electronics (Mobile Communications)
-603CEE     (base 16)		LG Electronics (Mobile Communications)
-				60-39, Gasan-dong, Geumcheon-gu
-				Seoul    153-801
-				KR
-
-2C-4A-11   (hex)		Ciena Corporation
-2C4A11     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-1C-4C-48   (hex)		ITEL MOBILE LIMITED
-1C4C48     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-C4-CB-54   (hex)		Fibocom Auto Inc.
-C4CB54     (base 16)		Fibocom Auto Inc.
-				5/F,Tower A,Technology Building II,1057# Nanhai Blvd
-				Shenzhen  Guangdong  518054
-				CN
-
-10-2D-31   (hex)		Shenzhen Americas Trading Company LLC
-102D31     (base 16)		Shenzhen Americas Trading Company LLC
-				1308 Capital Ave.Suite #7
-				Plano  TX  75074
-				US
-
-2C-07-86   (hex)		Huawei Device Co., Ltd.
-2C0786     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-0C-35-4F   (hex)		Nokia
-0C354F     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-60-81-2B   (hex)		Astronics Custom Control Concepts
-60812B     (base 16)		Astronics Custom Control Concepts
-				6020 S 190th ST
-				Kent  Washington  98032
-				US
-
-F8-A7-3A   (hex)		Cisco Systems, Inc
-F8A73A     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-B8-11-4B   (hex)		Cisco Systems, Inc
-B8114B     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-30-E2-83   (hex)		Texas Instruments
-30E283     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-00-02-C7   (hex)		ALPSALPINE CO,.LTD
-0002C7     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi, Sama-City,
-				Sama    00000
-				JP
-
-FC-62-B9   (hex)		ALPSALPINE CO,.LTD
-FC62B9     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				kakuda-city  Miyagi-Pref  981-1595
-				JP
-
-60-38-0E   (hex)		ALPSALPINE CO,.LTD
-60380E     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi
-				Soma-city  Fukushima  976-8501
-				JP
-
-28-A1-83   (hex)		ALPSALPINE CO,.LTD
-28A183     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				Kakuda  Miyagi-Pref  981-1595
-				JP
-
-00-1E-3D   (hex)		ALPSALPINE CO,.LTD
-001E3D     (base 16)		ALPSALPINE CO,.LTD
-				1-2-1, Okinouchi,
-				Soma-city,  Fukushima-pref.,  976-8501
-				JP
-
-48-F0-7B   (hex)		ALPSALPINE CO,.LTD
-48F07B     (base 16)		ALPSALPINE CO,.LTD
-				6-1
-				Kakuda  Miyagi-Pref  981-1595
-				JP
-
-00-14-5A   (hex)		Westermo Neratec AG
-00145A     (base 16)		Westermo Neratec AG
-				Rosswiesstrasse 29
-				CH-8608  Bubikon  ZH
-				CH
-
-1C-D1-BA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-1CD1BA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-A8-99-DC   (hex)		i-TOP DESING TECHNOLOGY CO.,LTD
-A899DC     (base 16)		i-TOP DESING TECHNOLOGY CO.,LTD
-				301-302,Rongchengda Building,Dabao Road, Bao an District
-				Shenzhen    518101
-				CN
-
-B0-7B-25   (hex)		Dell Inc.
-B07B25     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-84-EA-ED   (hex)		Roku, Inc
-84EAED     (base 16)		Roku, Inc
-				1155 Coleman Ave
-				San Jose  CA  95110
-				US
-
-00-12-AD   (hex)		VIVAVIS AG
-0012AD     (base 16)		VIVAVIS AG
-				Nobelstraße, 18
-				Ettlingen  Baden-Württemberg  76275
-				DE
-
-E0-29-67   (hex)		HMD Global Oy
-E02967     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-98-8B-69   (hex)		Shenzhen hylitech Co.,LTD
-988B69     (base 16)		Shenzhen hylitech Co.,LTD
-				Room 1001, Tower B, Daulshine Global Science And Technology Center, Hong Lang 2 Road North, Baoan District, Shenzhen 518101, China
-				shenzhen  GuangDong  518109
-				CN
-
-18-14-6C   (hex)		Zhejiang Tmall Technology Co., Ltd.
-18146C     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
-				Shenzhen  GuangDong  518000
-				CN
-
-3C-20-93   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-3C2093     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
-				Midea Global Innovation Center,Beijiao Town,Shunde
-				Foshan  Guangdong  528311
-				CN
-
-9C-05-67   (hex)		Honor Device Co., Ltd.
-9C0567     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-B0-7D-64   (hex)		Intel Corporate
-B07D64     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-00-42-38   (hex)		Intel Corporate
-004238     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C0-E3-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C0E3FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-4B-50   (hex)		Silicon Laboratories
-804B50     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-40-89-A8   (hex)		WiredIQ, LLC
-4089A8     (base 16)		WiredIQ, LLC
-				1 South School Avenue
-				sarasota  FL  34237
-				US
-
-68-3F-7D   (hex)		INGRAM MICRO SERVICES
-683F7D     (base 16)		INGRAM MICRO SERVICES
-				100 CHEMIN DE BAILLOT
-				MONTAUBAN    82000
-				FR
-
-74-8F-4D   (hex)		duagon Germany GmbH
-748F4D     (base 16)		duagon Germany GmbH
-				Neuwieder Straße 1-7
-				Nuremberg  Bavaria  90411
-				DE
-
-08-79-8C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-08798C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-C3-A2   (hex)		nFore Technology Co.,Ltd.
-50C3A2     (base 16)		nFore Technology Co.,Ltd.
-				5F., No.31, Ln. 258, Ruiguang Rd. Neihu Dist., Taipei City 114, Taiwan
-				Taipei    114
-				TW
-
-54-DB-A2   (hex)		Fibrain
-54DBA2     (base 16)		Fibrain
-				Zaczernie 190F
-				Zaczernie  Subcarpathia  36-062
-				PL
-
-08-9B-B9   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-089BB9     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-44-AE-25   (hex)		Cisco Systems, Inc
-44AE25     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-E7-12   (hex)		Cisco Systems, Inc
-BCE712     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-64-A1-98   (hex)		Huawei Device Co., Ltd.
-64A198     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-5C-9A-A1   (hex)		Huawei Device Co., Ltd.
-5C9AA1     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-60-55-F9   (hex)		Espressif Inc.
-6055F9     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-8C-EA-48   (hex)		Samsung Electronics Co.,Ltd
-8CEA48     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-00-5F-67   (hex)		TP-Link Corporation Limited
-005F67     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-BC-F4-5F   (hex)		zte corporation
-BCF45F     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B0-BD-1B   (hex)		Dongguan Liesheng Electronic Co., Ltd.
-B0BD1B     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
-				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
-				dongguan   guangdong  523000
-				CN
-
-10-96-93   (hex)		Amazon Technologies Inc.
-109693     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-34-AF-B3   (hex)		Amazon Technologies Inc.
-34AFB3     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-14-18-C3   (hex)		Intel Corporate
-1418C3     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-24-ED-FD   (hex)		Siemens Canada Limited
-24EDFD     (base 16)		Siemens Canada Limited
-				1954 Technology Drive
-				Peterborough  Ontario  K9J 6X7
-				CA
-
-6C-CD-D6   (hex)		NETGEAR
-6CCDD6     (base 16)		NETGEAR
-				350 East Plumeria Drive
-				San Jose  CA  95134
-				US
-
-54-07-64   (hex)		Huawei Device Co., Ltd.
-540764     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-D7-A0   (hex)		Huawei Device Co., Ltd.
-DCD7A0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-9C-68-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-9C6865     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-38-3D-5B   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-383D5B     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-A0-62-FB   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
-A062FB     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
-				Qianwangang Road 218
-				Qingdao  Shandong  266510
-				CN
-
-98-77-E7   (hex)		Kaonmedia CO., LTD.
-9877E7     (base 16)		Kaonmedia CO., LTD.
-				884-3, Seongnam-daero, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13517
-				KR
-
-78-D4-F1   (hex)		IEEE Registration Authority
-78D4F1     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-B0-16-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B01656     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-79-75   (hex)		Honor Device Co., Ltd.
-047975     (base 16)		Honor Device Co., Ltd.
-				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
-				Shenzhen  Guangdong  518129
-				CN
-
-DC-90-20   (hex)		RURU TEK PRIVATE LIMITED 
-DC9020     (base 16)		RURU TEK PRIVATE LIMITED 
-				The Canopy , BLOCK A  , SECOND FLOOR , UNIT 1B , PARANUR RAILWAY STATION ROAD ,MAHINDRA WORLD CITY,
-				CHENGALPATTU  TAMILNADU  603004
-				IN
-
-38-10-F0   (hex)		Aruba, a Hewlett Packard Enterprise Company
-3810F0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-F8-8F-07   (hex)		Samsung Electronics Co.,Ltd
-F88F07     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-14-EB-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-14EB08     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-42-A7   (hex)		Jiangsu Huitong Group Co.,Ltd.
-A842A7     (base 16)		Jiangsu Huitong Group Co.,Ltd.
-				No. 24, Block 2, Taohuawu New District
-				Zhenjiang  Jiangsu  212003
-				CN
-
-2C-D2-6B   (hex)		FN-LINK TECHNOLOGY LIMITED
-2CD26B     (base 16)		FN-LINK TECHNOLOGY LIMITED
-				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-B8-8D-F1   (hex)		Nanjing BigFish Semiconductor Co., Ltd.
-B88DF1     (base 16)		Nanjing BigFish Semiconductor Co., Ltd.
-				7th Floor,Block A, Chuangzhi Building, No.17, Xinghuo Road
-				Nanjing  Jiangsu  210032
-				CN
-
-6C-4A-74   (hex)		AERODISK LLC
-6C4A74     (base 16)		AERODISK LLC
-				Obrucheva, 30/1 b1
-				Moscow  Moskva  117485
-				RU
-
-40-DE-17   (hex)		Shenzhen Lanfeng Times Industrial Co.,Ltd.
-40DE17     (base 16)		Shenzhen Lanfeng Times Industrial Co.,Ltd.
-				Introduction Building 6F,71 Xin’an Street, Baoan District
-				Shenzhen  Guangdong  518101
-				CN
-
-F0-16-28   (hex)		Technicolor (China) Technology Co., Ltd.
-F01628     (base 16)		Technicolor (China) Technology Co., Ltd.
-				No.A2181,2F,Zhongguancun Dongsheng Science and Technology Park, Jia No.18, Xueqing Rd., Haidian District
-				Beijing    100083
-				CN
-
-68-57-2D   (hex)		Tuya Smart Inc.
-68572D     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-08-A7-C0   (hex)		Technicolor CH USA Inc.
-08A7C0     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-28-5B-0C   (hex)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
-285B0C     (base 16)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
-				No. 259, Jiuzhou Road
-				Mianyang City  Sichuan Province  621000
-				CN
-
-14-89-CB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-1489CB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-26-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C2636     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-48-68-4A   (hex)		Intel Corporate
-48684A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-BC-F1-71   (hex)		Intel Corporate
-BCF171     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-84-71-6A   (hex)		Huawei Device Co., Ltd.
-84716A     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-48-8C-63   (hex)		Huawei Device Co., Ltd.
-488C63     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-70-DD-EF   (hex)		Huawei Device Co., Ltd.
-70DDEF     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-A6-DB   (hex)		Huawei Device Co., Ltd.
-54A6DB     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-58-56-C2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-5856C2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-36-79   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A03679     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-B8-D6-F6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-B8D6F6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-2C-52-AF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2C52AF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-14-98-77   (hex)		Apple, Inc.
-149877     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-88-66-5A   (hex)		Apple, Inc.
-88665A     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B0-E5-F9   (hex)		Apple, Inc.
-B0E5F9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-AC-17-C8   (hex)		Cisco Meraki
-AC17C8     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-98-18-88   (hex)		Cisco Meraki
-981888     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-4C-C8-A1   (hex)		Cisco Meraki
-4CC8A1     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-58-FB-96   (hex)		Ruckus Wireless
-58FB96     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F0-62-5A   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-F0625A     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-64-E0-AB   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-64E0AB     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
-				Huizhou  Guangdong  516025
-				CN
-
-AC-23-16   (hex)		Mist Systems, Inc.
-AC2316     (base 16)		Mist Systems, Inc.
-				1601 South De Anza Blvd, Suite 248
-				Cupertino  CA  95014
-				US
-
-2C-00-AB   (hex)		ARRIS Group, Inc.
-2C00AB     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-3C-E3-6B   (hex)		Zhejiang Dahua Technology Co., Ltd.
-3CE36B     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-5C-17-20   (hex)		Huawei Device Co., Ltd.
-5C1720     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-3F-66   (hex)		Wuhan Funshion Online Technologies Co.,Ltd
-983F66     (base 16)		Wuhan Funshion Online Technologies Co.,Ltd
-				5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan
-				Wuhan  CN/Hubei  430000
-				CN
-
-60-5E-4F   (hex)		Huawei Device Co., Ltd.
-605E4F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-E6-AD   (hex)		Huawei Device Co., Ltd.
-1CE6AD     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-50-97-07   (hex)		Xiamen Paperang Technology Co.,Ltd.
-509707     (base 16)		Xiamen Paperang Technology Co.,Ltd.
-				Unit 1702-1703, 17/F, No.55, North Chengyi Road,Xiamen Software Park Phase 3
-				Xiamen  Fujian  361021
-				CN
-
-EC-63-D7   (hex)		Intel Corporate
-EC63D7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-14-85-7F   (hex)		Intel Corporate
-14857F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-7C-9F-07   (hex)		CIG SHANGHAI CO LTD
-7C9F07     (base 16)		CIG SHANGHAI CO LTD
-				5th Floor, Building 8 No 2388 Chenhang Road
-				SHANGHAI    201114
-				CN
-
-1C-87-E3   (hex)		TECNO MOBILE LIMITED
-1C87E3     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-94-E2-3C   (hex)		Intel Corporate
-94E23C     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-20-B7-30   (hex)		TeconGroup, Inc
-20B730     (base 16)		TeconGroup, Inc
-				3rd Khoroshevskaya str., 20, floor 1, room 112
-				Moscow    123423
-				RU
-
-48-88-99   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-488899     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-DC-B1-31   (hex)		SHENZHEN HUARUIAN TECHNOLOGY CO.,LTD
-DCB131     (base 16)		SHENZHEN HUARUIAN TECHNOLOGY CO.,LTD
-				Floo2nd and 3rd floor, building A, Huixin Industrial Park, No.31 Yonghe Road, Heping community, Fuhai street, Bao'an District, Shenzhen, China
-				Shenzhen  Guangdong  518101
-				CN
-
-94-A4-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-94A4F9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-34-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C3491     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-4D-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E84D74     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-CC-89-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-CC895E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-44-FD   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-8044FD     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
-				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District, Hangzhou, Zhejiang
-				Hangzhou  Zhejiang  310000
-				CN
-
-F4-6A-D7   (hex)		Microsoft Corporation
-F46AD7     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-48-1F-2D   (hex)		Shenzhen Jie Shi Lian Industrial Co.,LTD
-481F2D     (base 16)		Shenzhen Jie Shi Lian Industrial Co.,LTD
-				6F,C Building,Jinao Industrial Park,Juling Rd,Guanlan Town,Longhua
-				Shenzhen  Guangdong  518000
-				CN
-
-8C-73-A0   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-8C73A0     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-14-09-B4   (hex)		zte corporation
-1409B4     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-10-10-81   (hex)		zte corporation
-101081     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-78-CF-F9   (hex)		Huawei Device Co., Ltd.
-78CFF9     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-A8-E8-1E   (hex)		ATW TECHNOLOGY, INC.
-A8E81E     (base 16)		ATW TECHNOLOGY, INC.
-				1F, No.236 Ba’ai Street, Shulin District
-				New Taipei City    23845
-				TW
-
-F8-85-F9   (hex)		Calix Inc.
-F885F9     (base 16)		Calix Inc.
-				2777 Orchard Pkwy
-				San Jose  CA  95131
-				US
-
-CC-88-C7   (hex)		Aruba, a Hewlett Packard Enterprise Company
-CC88C7     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-F8-1A-2B   (hex)		Google, Inc.
-F81A2B     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-F4-A8-0D   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
-F4A80D     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
-				168# First Avenue,Kunshan Integrated Free Trade Zone,Kunshan,Jiangsu,China
-				Kunshan  Jiangsu  215300
-				CN
-
-08-A1-89   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-08A189     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-80-F3-EF   (hex)		Facebook Technologies, LLC
-80F3EF     (base 16)		Facebook Technologies, LLC
-				1601 Willow Rd
-				Menlo Park  CA  94025
-				US
-
-3C-A8-ED   (hex)		smart light technology
-3CA8ED     (base 16)		smart light technology
-				172 LSro
-				Gunpo  Gyeonggido  15807
-				KR
-
-04-C2-9B   (hex)		Aura Home, Inc.
-04C29B     (base 16)		Aura Home, Inc.
-				50 Eldridge Street, Suite 5D
-				New York  NY  10002
-				US
-
-14-3B-42   (hex)		Realfit(Shenzhen) Intelligent Technology Co., Ltd
-143B42     (base 16)		Realfit(Shenzhen) Intelligent Technology Co., Ltd
-				Room 201, building a, No.1 Qianwan 1st Road, Shenzhen Hong Kong cooperation zone, Qianhai
-				Shenzhen  Guangdong  518000
-				CN
-
-EC-2E-98   (hex)		AzureWave Technology Inc.
-EC2E98     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-38-F3-AB   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-38F3AB     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				YunGu Road 3188-1
-				Hefei  Anhui  230000
-				CN
-
-50-AE-86   (hex)		Linkintec Co., Ltd
-50AE86     (base 16)		Linkintec Co., Ltd
-				3rd floor, building A3, phase I, Zhihui Industrial Park, intersection of Chongqing Road and Yan'an Road, Baohe Economic Development Zone
-				Hefei City  Anhui  230041
-				CN
-
-38-B3-F7   (hex)		Huawei Device Co., Ltd.
-38B3F7     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-84-E9-86   (hex)		Huawei Device Co., Ltd.
-84E986     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-AC-1F-0F   (hex)		Texas Instruments
-AC1F0F     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-74-D2-85   (hex)		Texas Instruments
-74D285     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-60-15-92   (hex)		IEEE Registration Authority
-601592     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-10-C9-CA   (hex)		Ace Technology Corp.
-10C9CA     (base 16)		Ace Technology Corp.
-				237, Namdongseo-ro, Namdong-gu
-				Incheon    21634
-				KR
-
-BC-FA-B8   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
-BCFAB8     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
-				No.6, 4th Yunpu Road, Yunpu industry District
-				Guangzhou  Guangdong  510530
-				CN
-
-D4-77-98   (hex)		Cisco Systems, Inc
-D47798     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-4A-5E   (hex)		Microsoft Corporation
-A04A5E     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-EC-02-73   (hex)		Aruba, a Hewlett Packard Enterprise Company
-EC0273     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-F4-B1-C2   (hex)		Zhejiang Dahua Technology Co., Ltd.
-F4B1C2     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-A4-DA-D4   (hex)		Yamato Denki Co.,Ltd.
-A4DAD4     (base 16)		Yamato Denki Co.,Ltd.
-				3-2-14,Koyama
-				Shinagawa-ku,Tokyo    142-0062
-				JP
-
-10-94-97   (hex)		Logitech Hong Kong
-109497     (base 16)		Logitech Hong Kong
-				Room 1002-1003, 10/F, Tower 1, Cheung Sha Wan Plaza, 833 Cheung Sha Wan Road, Kowloon, Hong Kong
-				Hong Kong    NA
-				HK
-
-00-14-1D   (hex)		KEBA Industrial Automation Germany GmbH
-00141D     (base 16)		KEBA Industrial Automation Germany GmbH
-				Gewerbestrasse 5-9
-				Lahnau  Hessen  35633
-				DE
-
-E0-DA-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E0DA90     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-A4-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A4A46B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-D7-A0   (hex)		Huawei Device Co., Ltd.
-A0D7A0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-40-E6-4B   (hex)		Apple, Inc.
-40E64B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-B4-FA-48   (hex)		Apple, Inc.
-B4FA48     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-94-3C-C6   (hex)		Espressif Inc.
-943CC6     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-8C-83-FC   (hex)		Axioma Metering UAB
-8C83FC     (base 16)		Axioma Metering UAB
-				Veterinaru str. 52
-				Biruliskes  Kaunas district  LT-54469
-				LT
-
-F0-2F-4B   (hex)		Apple, Inc.
-F02F4B     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-A4-B7   (hex)		TP-Link Corporation Limited
-60A4B7     (base 16)		TP-Link Corporation Limited
-				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
-				 Tsim Sha Tsui  Kowloon  999077
-				HK
-
-60-C5-E6   (hex)		Skullcandy
-60C5E6     (base 16)		Skullcandy
-				6301 N. Landmark Dr.
-				Park City    84098
-				US
-
-38-F3-FB   (hex)		Asperiq
-38F3FB     (base 16)		Asperiq
-				Finngatan 8
-				Lund    SE-22362
-				SE
-
-A4-58-02   (hex)		SHIN-IL TECH
-A45802     (base 16)		SHIN-IL TECH
-				711 HO,DAEMYEONG BELLI ON,10, Gyeongin-ro 53ga-gil, Guro-gu
-				Seoul    KS013
-				KR
-
-38-AF-D0   (hex)		Nevro
-38AFD0     (base 16)		Nevro
-				1800 Bridge Pkwy
-				Redwood City  CA  94065
-				US
-
-00-A0-0E   (hex)		NETSCOUT SYSTEMS INC
-00A00E     (base 16)		NETSCOUT SYSTEMS INC
-				310 Littleton Road
-				Westford  MA  01886 
-				US
-
-30-A6-12   (hex)		ShenZhen Hugsun Technology Co.,Ltd.
-30A612     (base 16)		ShenZhen Hugsun Technology Co.,Ltd.
-				413~415 Room, 4/F, No.6 Bldg., TongFuYu Industrial Park, Dalang Street, 518109, Longhua New District,
-				ShengZhen  GuangDong  518109
-				CN
-
-EC-B4-E8   (hex)		Wistron Mexico SA de CV
-ECB4E8     (base 16)		Wistron Mexico SA de CV
-				Baudelio Perez Mucharras #420 Col Paseos de Zaragoza 
-				ciudad Juarez  Chihuahua  32550
-				MX
-
-10-38-1F   (hex)		Sichuan AI-Link Technology Co., Ltd.
-10381F     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-3C-7A-C4   (hex)		Chemtronics
-3C7AC4     (base 16)		Chemtronics
-				junho.hong@chemtronics.co.kr
-				Bundang-gu  Gyeonggi-do  13493
-				KR
-
-54-14-F3   (hex)		Intel Corporate
-5414F3     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-5C-C8-E3   (hex)		Shintec Hozumi co.ltd.
-5CC8E3     (base 16)		Shintec Hozumi co.ltd.
-				neura-machi 3-5-1
-				Miyoshi  Aichi  470-0217
-				JP
-
-18-BB-41   (hex)		Huawei Device Co., Ltd.
-18BB41     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-78-18-A8   (hex)		Huawei Device Co., Ltd.
-7818A8     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-80-72-64   (hex)		Huawei Device Co., Ltd.
-807264     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-54-F6-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-54F6E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A8-50-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A85081     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E8-F6-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8F654     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-87-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-2087EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-FE-54   (hex)		Intel Corporate
-6CFE54     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-08-6A-C5   (hex)		Intel Corporate
-086AC5     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-8C-36-7A   (hex)		Palo Alto Networks
-8C367A     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-1C-FF-59   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-1CFF59     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-C0-1B-23   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-C01B23     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY,
-				CHENGDU  SICHUAN  611330
-				CN
-
-10-1E-DA   (hex)		 INGENICO TERMINALS SAS
-101EDA     (base 16)		 INGENICO TERMINALS SAS
-				28-32 Boulevard de Grenelle
-				PARIS    75015
-				FR
-
-8C-6A-8D   (hex)		Technicolor CH USA Inc.
-8C6A8D     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-68-DD-D9   (hex)		HMD Global Oy
-68DDD9     (base 16)		HMD Global Oy
-				Bertel Jungin aukio 9
-				Espoo    02600
-				FI
-
-3C-19-5E   (hex)		Samsung Electronics Co.,Ltd
-3C195E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-6C-94-66   (hex)		Intel Corporate
-6C9466     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-4C-3B-6C   (hex)		GARO AB
-4C3B6C     (base 16)		GARO AB
-				Södergatan 26
-				Gnosjö  Jönköping  33525
-				SE
-
-FC-37-2B   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-FC372B     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-7C-CC-1F   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-7CCC1F     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-5C-4A-1F   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-5C4A1F     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-24-8B-E0   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-248BE0     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-9C-9C-40   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-9C9C40     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-54-E0-61   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-54E061     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-18-75-32   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-187532     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-78-B8-4B   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-78B84B     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
-				Chengdu  Sichuan  610000
-				CN
-
-D4-41-65   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-D44165     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road, 
-				Chengdu  Sichuan  610000
-				CN
-
-EC-8A-C4   (hex)		Amazon Technologies Inc.
-EC8AC4     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-44-35-6F   (hex)		Neterix Ltd
-44356F     (base 16)		Neterix Ltd
-				Viscount House, River Lane
-				Chester  Cheshire  CH4 8RH
-				GB
-
-00-22-89   (hex)		 Vanderlande APC inc.
-002289     (base 16)		 Vanderlande APC inc.
-				1280 Lebourgneuf Blvd.
-				Quebec    G2K 0H1
-				CA
-
-50-8A-06   (hex)		Tuya Smart Inc.
-508A06     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-D4-08-68   (hex)		Beijing Lanxum Computer Technology CO.,LTD.
-D40868     (base 16)		Beijing Lanxum Computer Technology CO.,LTD.
-				3A Floor,BlockB,Technology Fortune Center,No 8 Xueqing Road,Haidian District,
-				Beijing  Beijing  100192
-				CN
-
-B8-14-5C   (hex)		Huawei Device Co., Ltd.
-B8145C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C8-9D-18   (hex)		Huawei Device Co., Ltd.
-C89D18     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-C4-80-25   (hex)		Huawei Device Co., Ltd.
-C48025     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-DC-03-98   (hex)		LG Innotek
-DC0398     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-E8-DA-00   (hex)		Kivo Technology, Inc.
-E8DA00     (base 16)		Kivo Technology, Inc.
-				218 Main Street, Suite #724
-				Kirkland    98033
-				US
-
-CC-B5-D1   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-CCB5D1     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-78-D6-DC   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-78D6DC     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
-				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
-				Wuhan  Hubei  430000
-				CN
-
-0C-43-14   (hex)		Silicon Laboratories
-0C4314     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-78-86-B6   (hex)		Shenzhen YOUHUA Technology Co., Ltd
-7886B6     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-24-E1-24   (hex)		Xiamen Milesight IoT Co., Ltd.
-24E124     (base 16)		Xiamen Milesight IoT Co., Ltd.
-				4/F, No. 63-2 Wanghai Road, 2nd Software Park
-				Xiamen  Fujian  361008
-				CN
-
-F4-C0-2F   (hex)		BlueBite
-F4C02F     (base 16)		BlueBite
-				230, Simin-daero
-				Anyang-si  Gyeonggi-do  14067
-				KR
-
-98-F0-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-98F083     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-8C-64-A2   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
-8C64A2     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
-				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
-				Shenzhen  Guangdong  518000
-				CN
-
-D0-54-75   (hex)		SAVI Controls
-D05475     (base 16)		SAVI Controls
-				2420 Tarpley Rd, Suite 205
-				Carrollton  TX  75006
-				US
-
-88-A0-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-88A0BE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-94-90-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-949010     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-28-FB-AE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-28FBAE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A4-78-06   (hex)		Cisco Systems, Inc
-A47806     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-08-05-E2   (hex)		Juniper Networks
-0805E2     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-B8-D5-6B   (hex)		Mirka Ltd.
-B8D56B     (base 16)		Mirka Ltd.
-				Pensalavägen 210
-				Jeppo    66850
-				FI
-
-BC-A3-7F   (hex)		Rail-Mil Sp. z o.o. Sp. K.
-BCA37F     (base 16)		Rail-Mil Sp. z o.o. Sp. K.
-				Kosmatki 82
-				Warsaw    03-982
-				PL
-
-00-08-18   (hex)		Pixelworks, Inc.
-000818     (base 16)		Pixelworks, Inc.
-				226 Airport Parkway, Suite 595
-				San Jose  CA  95110
-				US
-
-28-FA-19   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-28FA19     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
-				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-64-B3-79   (hex)		Private
-64B379     (base 16)		Private
-
-50-09-E5   (hex)		Drimsys,Inc
-5009E5     (base 16)		Drimsys,Inc
-				147, Baumoe-ro
-				Seocho-gu  Seoul  06752
-				KR
-
-20-3C-C0   (hex)		Beijing Tosee Technology Co., Ltd.
-203CC0     (base 16)		Beijing Tosee Technology Co., Ltd.
-				Room S125, 1st Floor, Building 1, No. 9, Keyuan Road, Economic Development Zone, Daxing District
-				beijing    102600 
-				CN
-
-D8-A0-11   (hex)		WiZ
-D8A011     (base 16)		WiZ
-				Unit 1203-5, 12/F, Tower 1, Enterprise Square, 9 Sheung Yuet Road
-				Kowloon Bay  Hong Kong  0000
-				HK
-
-B8-A1-4A   (hex)		Raisecom Technology CO.,LTD
-B8A14A     (base 16)		Raisecom Technology CO.,LTD
-				No. 11, East Area, No. 10 Block, East Xibeiwang Road
-				Beijing    100094
-				CN
-
-AC-7A-42   (hex)		iConnectivity
-AC7A42     (base 16)		iConnectivity
-				4620 Manilla Road SE, Unit 58
-				Calgary  Alberta  T2G 4B7
-				CA
-
-28-DF-EB   (hex)		Intel Corporate
-28DFEB     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-88-FC-A6   (hex)		devolo AG
-88FCA6     (base 16)		devolo AG
-				Charlottenburger Allee 67
-				Aachen  NRW  52068
-				DE
-
-48-9E-BD   (hex)		HP Inc.
-489EBD     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-08-00-37   (hex)		FUJIFILM Business Innovation Corp.
-080037     (base 16)		FUJIFILM Business Innovation Corp.
-				ADVANCED TECH & ENG'G CENTER
-				Yokohama    220-8668
-				JP
-
-88-8E-7F   (hex)		ATOP CORPORATION
-888E7F     (base 16)		ATOP CORPORATION
-				ATOP Information Harbor, Jinjialin Experimental Economic Zone, Mianyang City, Sichuan Province, China
-				Mianyang    621000
-				CN
-
-E8-ED-D6   (hex)		Fortinet, Inc.
-E8EDD6     (base 16)		Fortinet, Inc.
-				899 Kifer Road
-				Sunnyvale    94086
-				US
-
-00-30-59   (hex)		Kontron Europe GmbH
-003059     (base 16)		Kontron Europe GmbH
-				Nordstrasse 11/F
-				 LUTERBACH    4542
-				CH
-
-54-77-87   (hex)		Earda Technologies co Ltd
-547787     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-5C-0C-E6   (hex)		Nintendo Co.,Ltd
-5C0CE6     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-D0-C2-4E   (hex)		Samsung Electronics Co.,Ltd
-D0C24E     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-34-5B-98   (hex)		EM Microelectronic
-345B98     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-70-CD-0D   (hex)		Intel Corporate
-70CD0D     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-04-39-26   (hex)		China Dragon Technology Limited
-043926     (base 16)		China Dragon Technology Limited
-				B4 Bldg.Haoshan 1st Industry Park,
-				Shenzhen  Guangdong  518104
-				CN
-
-BC-6E-64   (hex)		Sony Corporation
-BC6E64     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-40-40-A7   (hex)		Sony Corporation
-4040A7     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-B4-52-7D   (hex)		Sony Corporation
-B4527D     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-EB-2D   (hex)		Sony Corporation
-00EB2D     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-30-39-26   (hex)		Sony Corporation
-303926     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-84-00-D2   (hex)		Sony Corporation
-8400D2     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-40-2B-A1   (hex)		Sony Corporation
-402BA1     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-18-13   (hex)		Sony Corporation
-001813     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-1D-28   (hex)		Sony Corporation
-001D28     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-00-1E-DC   (hex)		Sony Corporation
-001EDC     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-84-01-12   (hex)		Kaonmedia CO., LTD.
-840112     (base 16)		Kaonmedia CO., LTD.
-				884-3, Seongnam-daero, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13517
-				KR
-
-44-D4-E0   (hex)		Sony Corporation
-44D4E0     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-44-74-6C   (hex)		Sony Corporation
-44746C     (base 16)		Sony Corporation
-				4-12-3 Higashi – Shinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-28-3F-69   (hex)		Sony Corporation
-283F69     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-00-21-9E   (hex)		Sony Corporation
-00219E     (base 16)		Sony Corporation
-				1-7-1 Konan Minato-ku
-				Tokyo    108-0075
-				JP
-
-A0-C4-A5   (hex)		SYGN HOUSE INC.
-A0C4A5     (base 16)		SYGN HOUSE INC.
-				2-9-14 Tamagawa-denenchofu
-				Setagaya-ku  Tokyo  1580085
-				JP
-
-68-81-E0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6881E0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-4C-D6-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4CD629     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F0-C4-78   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F0C478     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-6D-17   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D86D17     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-1A-C0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-7C1AC0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D0-4D-C6   (hex)		Aruba, a Hewlett Packard Enterprise Company
-D04DC6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-44-F0-9E   (hex)		Apple, Inc.
-44F09E     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-08-FF-44   (hex)		Apple, Inc.
-08FF44     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-93-C4   (hex)		Amazon Technologies Inc.
-1C93C4     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-AC-49-DB   (hex)		Apple, Inc.
-AC49DB     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-18-56-C3   (hex)		Apple, Inc.
-1856C3     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-18-8D   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-48188D     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
-				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
-				Weifang  Shandong  261205
-				CN
-
-80-FB-F1   (hex)		Freescale Semiconductor (China) Ltd.
-80FBF1     (base 16)		Freescale Semiconductor (China) Ltd.
-				15#,Xing Hua Road, Xi Qing Economic Technology Development Area
-				Tianjin    300385
-				CN
-
-38-D5-7A   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-38D57A     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-7C-87-CE   (hex)		Espressif Inc.
-7C87CE     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-8C-81-72   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-8C8172     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-44-E5-17   (hex)		Intel Corporate
-44E517     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-68-F3-8E   (hex)		Juniper Networks
-68F38E     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-74-5D-43   (hex)		BSH Hausgeraete GmbH
-745D43     (base 16)		BSH Hausgeraete GmbH
-				Im Gewerbepark B10
-				Regensburg    93059
-				DE
-
-70-A5-6A   (hex)		Shenzhen C-Data Technology Co., Ltd.
-70A56A     (base 16)		Shenzhen C-Data Technology Co., Ltd.
-				#601, Fl6, Bldg F, No.1008  Yangguang Community, Xili, Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-78-5F-36   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-785F36     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-A0-18-42   (hex)		Comtrend Corporation
-A01842     (base 16)		Comtrend Corporation
-				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
-				New Taipei City,  Taiwan  24159
-				TW
-
-30-3F-BB   (hex)		Hewlett Packard Enterprise
-303FBB     (base 16)		Hewlett Packard Enterprise
-				8000 Foothills Blvd.
-				Roseville  CA  95747
-				US
-
-EC-94-D5   (hex)		Juniper Networks
-EC94D5     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-70-1F-0B   (hex)		WILOGY SRL
-701F0B     (base 16)		WILOGY SRL
-				VIA BOSCO SNC
-				VEGLIE  Lecce  73010
-				IT
-
-40-40-6C   (hex)		Icomera
-40406C     (base 16)		Icomera
-				Odinsgatan 28
-				Gothenburg    411 03
-				SE
-
-64-6D-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-646D4E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-08-5C-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-085C1B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-9A-88   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-509A88     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-50-6F-0C   (hex)		Sagemcom Broadband SAS
-506F0C     (base 16)		Sagemcom Broadband SAS
-				250, route de l'Empereur
-				Rueil Malmaison Cedex  hauts de seine  92848
-				FR
-
-48-73-97   (hex)		New H3C Technologies Co., Ltd
-487397     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-A0-44-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A0445C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-7C-2A-DB   (hex)		Xiaomi Communications Co Ltd
-7C2ADB     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-94-17-00   (hex)		Xiaomi Communications Co Ltd
-941700     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-64-A2-00   (hex)		Xiaomi Communications Co Ltd
-64A200     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-50-3D-C6   (hex)		Xiaomi Communications Co Ltd
-503DC6     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-8C-D9-D6   (hex)		Xiaomi Communications Co Ltd
-8CD9D6     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-44-A6-42   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-44A642     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
-				No.555 Qianmo Road
-				Hangzhou  Zhejiang  310052
-				CN
-
-08-E7-E5   (hex)		Huawei Device Co., Ltd.
-08E7E5     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-D4-86-60   (hex)		Arcadyan Corporation
-D48660     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-B8-3B-CC   (hex)		Xiaomi Communications Co Ltd
-B83BCC     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-88-D1-99   (hex)		Vencer Co., Ltd.
-88D199     (base 16)		Vencer Co., Ltd.
-				14F-12, No. 79, Section 1, Hsin Tai Wu Road, Hsi-Chih District,
-				New Taipei City  Taiwan  22101
-				TW
-
-CC-E2-36   (hex)		Hangzhou Yaguan Technology Co. LTD
-CCE236     (base 16)		Hangzhou Yaguan Technology Co. LTD
-				33rd Floor, T4 US Center, European and American Financial City, Yuhang District, Hangzhou, Zhejiang
-				Hangzhou  Zhejiang  311100
-				CN
-
-20-41-81   (hex)		ESYSE GmbH Embedded Systems Engineering
-204181     (base 16)		ESYSE GmbH Embedded Systems Engineering
-				Ruth-Niehaus Str. 8
-				Meerbusch  Nordrhein-Westfalen  40667
-				DE
-
-DC-BB-96   (hex)		Full Solution Telecom
-DCBB96     (base 16)		Full Solution Telecom
-				Calle 130A #59C-42, Barrio Ciudad Jardin Norte
-				Bogota  Distrito Capital de Bogota  111111
-				CO
-
-74-76-5B   (hex)		Quectel Wireless Solutions Co.,Ltd.
-74765B     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-B4-37-D8   (hex)		D-Link (Shanghai) Limited Corp.
-B437D8     (base 16)		D-Link (Shanghai) Limited Corp.
-				Room 612, Floor 6, No.88, Taigu Road,
-				Shanghai    200131
-				CN
-
-9C-D5-7D   (hex)		Cisco Systems, Inc
-9CD57D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-94-1F-3A   (hex)		Ambiq
-941F3A     (base 16)		Ambiq
-				6500 River Place Blvd., Building 7, Suite 200 
-				Austin  TX  78730
-				US
-
-80-D2-E5   (hex)		Nintendo Co.,Ltd
-80D2E5     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-F8-CE-72   (hex)		Wistron Corporation
-F8CE72     (base 16)		Wistron Corporation
-				 NO.5, HSIN AN ROAD, SCIENCE-BASED INDUSTRIAL PARK, HSINCHU, TAIWAN, R.O.C.
-				Hsinchu County  Taiwan  303036
-				TW
-
-CC-9D-A2   (hex)		Eltex Enterprise Ltd.
-CC9DA2     (base 16)		Eltex Enterprise Ltd.
-				Okruzhnaya st. 29v
-				Novosibirsk    630020
-				RU
-
-60-53-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-605375     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-DD-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-78DD33     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-31-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-A031DB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-58-BF-25   (hex)		Espressif Inc.
-58BF25     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-10-13-31   (hex)		Technicolor Delivery Technologies Belgium NV
-101331     (base 16)		Technicolor Delivery Technologies Belgium NV
-				Prins Boudewijnlaan 47
-				Edegem - Belgium    B-2650
-				BE
-
-00-40-66   (hex)		APRESIA Systems Ltd
-004066     (base 16)		APRESIA Systems Ltd
-				Tsukuba Network Technical Center, Kidamari 3550
-				Tsuchiura-shi  Ibaraki-ken  300-0026
-				JP
-
-70-66-E1   (hex)		dnt Innovation GmbH
-7066E1     (base 16)		dnt Innovation GmbH
-				Maiburger Straße 29
-				Leer    26789
-				DE
-
-2C-35-57   (hex)		ELIIY Power CO., Ltd.
-2C3557     (base 16)		ELIIY Power CO., Ltd.
-				1-6-4, Osaki
-				Shinagawa-ku    141-0032
-				JP
-
-08-00-42   (hex)		MACNICA, Inc.
-080042     (base 16)		MACNICA, Inc.
-				1-6-3 Shin-Yokohama
-				Kohoku-ku  Yokohama  222-8561
-				JP
-
-54-6F-71   (hex)		uAvionix Corporation
-546F71     (base 16)		uAvionix Corporation
-				300 Pine Needle Lane
-				Bigfork  MT  59911
-				US
-
-54-EF-33   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-54EF33     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-14-19-73   (hex)		Beijing Yunyi Times Technology Co.,Ltd
-141973     (base 16)		Beijing Yunyi Times Technology Co.,Ltd
-				Room 4046, Building 1, Yard 10, Beiqijia Hongfu, Changping District
-				Beijing    102209
-				CN
-
-5C-75-C6   (hex)		China Mobile Group Device Co.,Ltd.
-5C75C6     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-44-48-B9   (hex)		MitraStar Technology Corp.
-4448B9     (base 16)		MitraStar Technology Corp.
-				No. 6, Innovation Road II,
-				Hsinchu    300
-				TW
-
-A0-D0-5B   (hex)		Samsung Electronics Co.,Ltd
-A0D05B     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-04-D4-42   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-04D442     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
-				No.168, Middle Road Of East Gate
-				Xiaobian Community  Chang'an Town  523851
-				CN
-
-24-D7-EB   (hex)		Espressif Inc.
-24D7EB     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-A4-E1-1A   (hex)		Juniper Networks
-A4E11A     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-E8-6E-44   (hex)		zte corporation
-E86E44     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-00-E7-E3   (hex)		zte corporation
-00E7E3     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-9C-54-C2   (hex)		New H3C Technologies Co., Ltd
-9C54C2     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-78-E9-CF   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-78E9CF     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
-				Av. Buriti, 1900 – Setor B – Distrito Industrial
-				Manaus  Amazonas  69075-000
-				BR
-
-A0-9F-7A   (hex)		D-Link Middle East FZCO
-A09F7A     (base 16)		D-Link Middle East FZCO
-				PIot No.S31102, PO Box:18224, Jebel Ali Free Zone,Dubai,UAE
-				Dubai    18224
-				AE
-
-00-11-32   (hex)		Synology Incorporated
-001132     (base 16)		Synology Incorporated
-				9F., No.1, Yuandong Rd., Banqiao Dist.,
-				New Taipei City    220632
-				TW
-
-90-09-D0   (hex)		Synology Incorporated
-9009D0     (base 16)		Synology Incorporated
-				9F., No.1, Yuandong Rd., Banqiao Dist.,
-				New Taipei City    220632
-				TW
-
-5C-52-30   (hex)		Apple, Inc.
-5C5230     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-5A-36   (hex)		Apple, Inc.
-645A36     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-28-D2-44   (hex)		LCFC(HeFei) Electronics Technology co., ltd
-28D244     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
-				6 Cui Wei Road
-				Hefei  Anhui  230000
-				CN
-
-B4-20-46   (hex)		eero inc.
-B42046     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-20-32-C6   (hex)		Apple, Inc.
-2032C6     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-C8-1C-FE   (hex)		Zebra Technologies Inc.
-C81CFE     (base 16)		Zebra Technologies Inc.
-				ONE ZEBRA PLAZA
-				HOLTSVILLE  NY  11742
-				US
-
-1C-9E-CC   (hex)		Technicolor CH USA Inc.
-1C9ECC     (base 16)		Technicolor CH USA Inc.
-				5030 Sugarloaf Parkway Bldg 6 
-				Lawrenceville  GA  30044
-				US
-
-1C-ED-6F   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-1CED6F     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
-				Alt-Moabit 95
-				Berlin  Berlin  10559
-				DE
-
-6C-71-D2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C71D2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-F8-00-A1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-F800A1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-D8-76-AE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D876AE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-0C-84-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-0C8408     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-4B-22   (hex)		Sunnovo International Limited
-204B22     (base 16)		Sunnovo International Limited
-				1717 Haitai Building
-				Beijing  Beijing  100083
-				CN
-
-D8-1F-12   (hex)		Tuya Smart Inc.
-D81F12     (base 16)		Tuya Smart Inc.
-				160 Greentree Drive, Suite 101
-				Dover  DE  19904
-				US
-
-B0-6A-41   (hex)		Google, Inc.
-B06A41     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-BC-CE-25   (hex)		Nintendo Co.,Ltd
-BCCE25     (base 16)		Nintendo Co.,Ltd
-				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
-				KYOTO  KYOTO  601-8501
-				JP
-
-B0-10-A0   (hex)		Texas Instruments
-B010A0     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-24-FC-4E   (hex)		Juniper Networks
-24FC4E     (base 16)		Juniper Networks
-				1133 Innovation Way
-				Sunnyvale  CA  94089
-				US
-
-98-C8-54   (hex)		Chiun MaiCommunication System, Inc
-98C854     (base 16)		Chiun MaiCommunication System, Inc
-				No.4, MingSheng St. TuCheng District
-				New Taipei City    23679
-				TW
-
-C4-D7-FD   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
-C4D7FD     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
-				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
-				Nanjing  Jiangsu  211800
-				CN
-
-2C-D1-DA   (hex)		Keysight Technologies, Inc.
-2CD1DA     (base 16)		Keysight Technologies, Inc.
-				2800 Woodlawn Drive, #271
-				Honolulu  Hawaii  96822
-				US
-
-C4-FC-EF   (hex)		SambaNova Systems, Inc.
-C4FCEF     (base 16)		SambaNova Systems, Inc.
-				2100 Geng Rd #103
-				Palo Alto    94303
-				US
-
-F0-70-4F   (hex)		Samsung Electronics Co.,Ltd
-F0704F     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-AC-6C-90   (hex)		Samsung Electronics Co.,Ltd
-AC6C90     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-A4-1A-3A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-A41A3A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-90-B6-22   (hex)		Samsung Electronics Co.,Ltd
-90B622     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-0C-02-BD   (hex)		Samsung Electronics Co.,Ltd
-0C02BD     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-34-84-E4   (hex)		Texas Instruments
-3484E4     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-AC-4D-16   (hex)		Texas Instruments
-AC4D16     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-FC-A8-4A   (hex)		Sentinum GmbH
-FCA84A     (base 16)		Sentinum GmbH
-				Fuerther Str. 246b
-				Nuremberg    90429
-				DE
-
-1C-5E-E6   (hex)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
-1C5EE6     (base 16)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
-				Nangang Industrial Building, Tangtou Industrial Park, Shiyan, Baoan
-				Shenzhen  Guangdong  518108
-				CN
-
-34-6F-24   (hex)		AzureWave Technology Inc.
-346F24     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-DC-E5-5B   (hex)		Google, Inc.
-DCE55B     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-4C-B9-EA   (hex)		iRobot Corporation
-4CB9EA     (base 16)		iRobot Corporation
-				8 Crosby Drive
-				Bedford  MA  01730
-				US
-
-DC-91-66   (hex)		Huawei Device Co., Ltd.
-DC9166     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-90-35-EA   (hex)		Silicon Laboratories
-9035EA     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-6C-3C-7C   (hex)		CANON INC.
-6C3C7C     (base 16)		CANON INC.
-				30-2 Shimomaruko 3-chome,
-				Ohta-ku  Tokyo  146-8501
-				JP
-
-F8-2F-5B   (hex)		eGauge Systems LLC
-F82F5B     (base 16)		eGauge Systems LLC
-				1644 Conestoga St, Suite 2
-				Boulder  CO  80301
-				US
-
-6C-1E-D7   (hex)		vivo Mobile Communication Co., Ltd.
-6C1ED7     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-E4-F1-D4   (hex)		vivo Mobile Communication Co., Ltd.
-E4F1D4     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-D4-EC-AB   (hex)		vivo Mobile Communication Co., Ltd.
-D4ECAB     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-BC-3E-CB   (hex)		vivo Mobile Communication Co., Ltd.
-BC3ECB     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-20-3B-69   (hex)		vivo Mobile Communication Co., Ltd.
-203B69     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-C0-47-54   (hex)		vivo Mobile Communication Co., Ltd.
-C04754     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-D0-9C-AE   (hex)		vivo Mobile Communication Co., Ltd.
-D09CAE     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-B4-AC-8C   (hex)		Bern University of Applied Sciences
-B4AC8C     (base 16)		Bern University of Applied Sciences
-				Dammweg 3
-				Bern  Bern  3013
-				CH
-
-B8-94-E7   (hex)		Xiaomi Communications Co Ltd
-B894E7     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-34-B9-8D   (hex)		Xiaomi Communications Co Ltd
-34B98D     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-30-4F-00   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-304F00     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-98-C8-B8   (hex)		vivo Mobile Communication Co., Ltd.
-98C8B8     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-54-0E-2D   (hex)		vivo Mobile Communication Co., Ltd.
-540E2D     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-70-8F-47   (hex)		vivo Mobile Communication Co., Ltd.
-708F47     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-DC-84-E9   (hex)		Shenzhen Qihoo Intelligent Technology Co.,Ltd
-DC84E9     (base 16)		Shenzhen Qihoo Intelligent Technology Co.,Ltd
-				Building A2, Chi Yuen Technology Park, 1001 College Avenue, Nanshan District, Shenzhen, P.R.C.
-				Shenzhen  Guangdong  518000
-				CN
-
-70-11-35   (hex)		Livesecu co., Ltd
-701135     (base 16)		Livesecu co., Ltd
-				9F/925, Anyang SK V1 Center, 25-32, LS-ro 116beon-gil, Dongan-gu, Anyang-si, Gyeonggi-do
-				anyang city  Gyeonggi-do  14118
-				KR
-
-C0-6B-55   (hex)		Motorola Mobility LLC, a Lenovo Company
-C06B55     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-FC-1D-2A   (hex)		vivo Mobile Communication Co., Ltd.
-FC1D2A     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-78-67-0E   (hex)		Wistron Neweb Corporation
-78670E     (base 16)		Wistron Neweb Corporation
-				No.20,Park Avenue II,Hsinchu Science Park
-				Hsin-Chu  R.O.C.  308
-				TW
-
-64-32-16   (hex)		Weidu Technology (Beijing) Co., Ltd.
-643216     (base 16)		Weidu Technology (Beijing) Co., Ltd.
-				1129-106, 11F, No.18 Zhongguancun Street, Haidian District,
-				Beijing    100080
-				CN
-
-B0-1C-0C   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-B01C0C     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
-				SHENZHEN  GUANGDONG  518057
-				CN
-
-68-40-3C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-68403C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-90-3E-7F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-903E7F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-94-02-30   (hex)		Logitech
-940230     (base 16)		Logitech
-				7700 Gateway Blvd
-				Newark  CA  94560
-				US
-
-14-C0-A1   (hex)		UCloud Technology Co., Ltd.
-14C0A1     (base 16)		UCloud Technology Co., Ltd.
-				Building 10#B, LongChangRoad 619
-				ShangHai    200093
-				CN
-
-C0-36-53   (hex)		eero inc.
-C03653     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco    94107
-				US
-
-94-60-D5   (hex)		Aruba, a Hewlett Packard Enterprise Company
-9460D5     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-08-02-05   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-080205     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-E4-78   (hex)		Qingdao Haier Technology Co.,Ltd
-68E478     (base 16)		Qingdao Haier Technology Co.,Ltd
-				Building A01,Haier Information Park, No.1 Haier Road,
-				Qingdao  Shandong  266101
-				CN
-
-4C-44-5B   (hex)		Intel Corporate
-4C445B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-C8-CA-79   (hex)		Ciena Corporation
-C8CA79     (base 16)		Ciena Corporation
-				7035 Ridge Road
-				Hanover  MD  21076
-				US
-
-84-3B-10   (hex)		 LVSWITCHES INC.
-843B10     (base 16)		 LVSWITCHES INC.
-				F1 building,New light source base Luocun town,Nanhai district
-				Foshan  Guangdong  528000
-				CN
-
-E0-9D-13   (hex)		Samsung Electronics Co.,Ltd
-E09D13     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-30-C6-F7   (hex)		Espressif Inc.
-30C6F7     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-DC-0E-96   (hex)		Palo Alto Networks
-DC0E96     (base 16)		Palo Alto Networks
-				3000 Tannery Way
-				Santa Clara  CA  95054
-				US
-
-04-20-84   (hex)		zte corporation
-042084     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B4-5F-84   (hex)		zte corporation
-B45F84     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-9C-C2-C4   (hex)		Inspur Electronic Information Industry Co.,Ltd.
-9CC2C4     (base 16)		Inspur Electronic Information Industry Co.,Ltd.
-				No 224 Shanda Road
-				Jinan  Shandong  250013
-				CN
-
-00-DF-1D   (hex)		Cisco Systems, Inc
-00DF1D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-A0-0F-37   (hex)		Cisco Systems, Inc
-A00F37     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-10-97-BD   (hex)		Espressif Inc.
-1097BD     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-BC-6E-E2   (hex)		Intel Corporate
-BC6EE2     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-38-7A-0E   (hex)		Intel Corporate
-387A0E     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-78-72-64   (hex)		IEEE Registration Authority
-787264     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-88-23-1F   (hex)		Fibocom Wireless Inc.
-88231F     (base 16)		Fibocom Wireless Inc.
-				1101,Tower A, Building 6, Shenzhen International Innovation Valley, Dashi 1st Rd, Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-A4-DE-26   (hex)		Sumitomo Electric Industries, Ltd
-A4DE26     (base 16)		Sumitomo Electric Industries, Ltd
-				1-1-3, Shimaya, Konohana-ku
-				Osaka    554-0024
-				JP
-
-30-1A-30   (hex)		Mako Networks Ltd
-301A30     (base 16)		Mako Networks Ltd
-				1355 North Maclean Blvd
-				Elgin  IL  60123
-				US
-
-C4-8B-A3   (hex)		Cisco Meraki
-C48BA3     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-14-0A-29   (hex)		Tiinlab Corporation
-140A29     (base 16)		Tiinlab Corporation
-				No. 3333, Liuxian Avenue, Tower A, 32th Floor, Tanglang City, Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-C0-F9-D2   (hex)		arkona technologies GmbH
-C0F9D2     (base 16)		arkona technologies GmbH
-				Im Leuschnerpark 4
-				Griesheim  Hessen  64347
-				DE
-
-14-61-02   (hex)		Alps Alpine
-146102     (base 16)		Alps Alpine
-				20-1, Yoshima Industrial Park
-				Iwaki  Fukushima  970-1192
-				JP
-
-A0-29-19   (hex)		Dell Inc.
-A02919     (base 16)		Dell Inc.
-				One Dell Way
-				Round Rock  TX  78682
-				US
-
-24-12-81   (hex)		China Mobile Group Device Co.,Ltd.
-241281     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-D4-EE-DE   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-D4EEDE     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-C0-8B-05   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C08B05     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-30-7B-C9   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-307BC9     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
-				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
-				shenzhen  guangdong  518000
-				CN
-
-50-C0-F0   (hex)		Artek Microelectronics Co.,Ltd.
-50C0F0     (base 16)		Artek Microelectronics Co.,Ltd.
-				202,NO.1 Building,Software Park,KeJiZhongEr Road,GaoXinQu,NanShan,
-				Shenzhen  Guangdong  518057
-				CN
-
-04-68-65   (hex)		Apple, Inc.
-046865     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-DC-53-92   (hex)		Apple, Inc.
-DC5392     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-B3-C9   (hex)		Apple, Inc.
-1CB3C9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-FC-AA-81   (hex)		Apple, Inc.
-FCAA81     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-60-93-16   (hex)		Apple, Inc.
-609316     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-64-6D-2F   (hex)		Apple, Inc.
-646D2F     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-5C-96-66   (hex)		Sony Interactive Entertainment Inc.
-5C9666     (base 16)		Sony Interactive Entertainment Inc.
-				1-7-1 Konan
-				Minato-ku  Tokyo  108-0075
-				JP
-
-24-CE-33   (hex)		Amazon Technologies Inc.
-24CE33     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-7C-72-6E   (hex)		Ericsson AB
-7C726E     (base 16)		Ericsson AB
-				Torshamnsgatan 36
-				Stockholm    SE-164 80
-				SE
-
-54-9F-06   (hex)		Nokia Shanghai Bell Co., Ltd.
-549F06     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-68-A8-78   (hex)		GeoWAN Pty Ltd
-68A878     (base 16)		GeoWAN Pty Ltd
-				Level 17, 31 Queen Street
-				Melbourne  Victoria  3000
-				AU
-
-38-A9-1C   (hex)		New H3C Technologies Co., Ltd
-38A91C     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-94-B3-4F   (hex)		Ruckus Wireless
-94B34F     (base 16)		Ruckus Wireless
-				350 West Java Drive
-				Sunnyvale  CA  94089
-				US
-
-F4-70-0C   (hex)		IEEE Registration Authority
-F4700C     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-40-9B-21   (hex)		Nokia
-409B21     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-FC-77-7B   (hex)		Hitron Technologies. Inc
-FC777B     (base 16)		Hitron Technologies. Inc
-				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
-				Hsin-chu  Taiwan  300
-				TW
-
-14-17-2A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-14172A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-00-5F-BF   (hex)		Toshiba Corp.
-005FBF     (base 16)		Toshiba Corp.
-				1-1 Shibaura 1-Chome, Minato-Ku
-				Tokyo    105-8001
-				JP
-
-E8-A7-2F   (hex)		Microsoft Corporation
-E8A72F     (base 16)		Microsoft Corporation
-				One Microsoft Way
-				REDMOND  WA  98052
-				US
-
-D4-05-DE   (hex)		eero inc.
-D405DE     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-FC-0F-E7   (hex)		Microchip Technology Inc.
-FC0FE7     (base 16)		Microchip Technology Inc.
-				2355 W. Chandler Blvd.
-				Chandler  AZ  85224
-				US
-
-C8-5C-CC   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-C85CCC     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-70-FD-88   (hex)		Nanjing Jiahao Technology Co., Ltd.
-70FD88     (base 16)		Nanjing Jiahao Technology Co., Ltd.
-				Moling Industrial Park, Development Zone, Jiangning, Nanjing
-				Nanjing  Jiangsu  211111
-				CN
-
-48-73-CB   (hex)		Tiinlab Corporation
-4873CB     (base 16)		Tiinlab Corporation
-				No. 3333, Liuxian Avenue, Tower A, 32th Floor, Tanglang City, Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-38-38-4B   (hex)		vivo Mobile Communication Co., Ltd.
-38384B     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-78-9F-AA   (hex)		Huawei Device Co., Ltd.
-789FAA     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-98-19-2C   (hex)		Edgecore Networks Corporation
-98192C     (base 16)		Edgecore Networks Corporation
-				1 Creation RD 3.
-				Hsinchu    30077
-				TW
-
-88-A4-C2   (hex)		LCFC(Hefei) Electronics Technology Co., Ltd
-88A4C2     (base 16)		LCFC(Hefei) Electronics Technology Co., Ltd
-				No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area
-				HEFEI  ANHUI  230601
-				CN
-
-AC-8B-6A   (hex)		China Mobile IOT Company Limited
-AC8B6A     (base 16)		China Mobile IOT Company Limited
-				NO.8 Yu Ma Road, NanAn Area
-				Chongqing  Chongqing  401336
-				CN
-
-E0-7E-5F   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-E07E5F     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-38-BE-AB   (hex)		AltoBeam (China) Inc.
-38BEAB     (base 16)		AltoBeam (China) Inc.
-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
-				Beijing  Beijing  100083
-				CN
-
-34-13-43   (hex)		GE Lighting
-341343     (base 16)		GE Lighting
-				1975 Noble Rd
-				East Cleveland  OH  44112
-				US
-
-B8-9E-A6   (hex)		SPBEC-MINING CO.LTD
-B89EA6     (base 16)		SPBEC-MINING CO.LTD
-				st. Kokkolevskaya, building 1/1
-				St. Petersburg    196140
-				RU
-
-AC-50-DE   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-AC50DE     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-08-C8-C2   (hex)		GN Audio A/S
-08C8C2     (base 16)		GN Audio A/S
-				Lautrupbjerg 7
-				Ballerup    DK-2750
-				DK
-
-18-58-80   (hex)		Arcadyan Corporation
-185880     (base 16)		Arcadyan Corporation
-				No.8, Sec.2, Guangfu Rd.
-				Hsinchu City  Hsinchu  30071
-				TW
-
-A0-1C-87   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-A01C87     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
-				Huizhou  Guangdong  516025
-				CN
-
-30-83-D2   (hex)		Motorola Mobility LLC, a Lenovo Company
-3083D2     (base 16)		Motorola Mobility LLC, a Lenovo Company
-				222 West Merchandise Mart Plaza
-				Chicago  IL  60654
-				US
-
-00-DD-B6   (hex)		New H3C Technologies Co., Ltd
-00DDB6     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-B0-8B-92   (hex)		zte corporation
-B08B92     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-78-21-84   (hex)		Espressif Inc.
-782184     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-94-94-4A   (hex)		Particle Industries Inc.
-94944A     (base 16)		Particle Industries Inc.
-				548 Market St PMB 34833
-				San Francisco  CA  94104
-				US
-
-2C-A3-27   (hex)		Oraimo Technology Limited
-2CA327     (base 16)		Oraimo Technology Limited
-				RMS 05-15?13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HONG KONG  HONG KONG  999077
-				HK
-
-14-66-B7   (hex)		Advanced Design Technology Pty Ltd
-1466B7     (base 16)		Advanced Design Technology Pty Ltd
-				GPO Box 2808
-				Canberra City  ACT  2601
-				AU
-
-B8-F2-55   (hex)		Universal Electronics, Inc.
-B8F255     (base 16)		Universal Electronics, Inc.
-				201 E. Sandpointe Ave
-				Santa Ana  CA  92707
-				US
-
-CC-3F-1D   (hex)		HMS Industrial Networks SLU
-CC3F1D     (base 16)		HMS Industrial Networks SLU
-				Milà i Fontanals 7
-				Igualada  Barcelona  08700
-				ES
-
-5C-49-FA   (hex)		Shenzhen Guowei Shidai Communication Equipement Co., Ltd
-5C49FA     (base 16)		Shenzhen Guowei Shidai Communication Equipement Co., Ltd
-				2202, Yili science & Technology Park Workshop, No.596-2, Dahe Village, Guancheng Community, Guanhu Street, Longhua District, S
-				SHENZHEN    518000
-				CN
-
-EC-65-6E   (hex)		The Things Industries B.V.
-EC656E     (base 16)		The Things Industries B.V.
-				Singel 542
-				Amsterdam  Noord-Holland  1017 AZ
-				NL
-
-10-AE-A5   (hex)		Duskrise inc.
-10AEA5     (base 16)		Duskrise inc.
-				Empire State Building 350 Fifth Avenue 41st Floor 
-				new york  NY  10118
-				US
-
-58-7D-B6   (hex)		Northern Data AG
-587DB6     (base 16)		Northern Data AG
-				An der Welle 3
-				Frankfurt am Main  Hessen  60322
-				DE
-
-5C-8E-8B   (hex)		Shenzhen Linghai Electronics Co.,Ltd
-5C8E8B     (base 16)		Shenzhen Linghai Electronics Co.,Ltd
-				310, Building D, Shenzhen Zhihui Innovation Center, Hangcheng Industrial Zone, Taoyuan Community, Xixiang Street, Bao'an District
-				Shenzhen  Guangdong Province  518000
-				CN
-
-78-EB-46   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-78EB46     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C4-16-C8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C416C8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-E4-DC-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E4DCCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-3C-A1-61   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-3CA161     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-75-BC   (hex)		Nokia Shanghai Bell Co., Ltd.
-9075BC     (base 16)		Nokia Shanghai Bell Co., Ltd.
-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
-				Shanghai     201206
-				CN
-
-C0-F8-7F   (hex)		Cisco Systems, Inc
-C0F87F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-4C-53-FD   (hex)		Amazon Technologies Inc.
-4C53FD     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-3C-8B-7F   (hex)		Cisco Systems, Inc
-3C8B7F     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-00-11-E5   (hex)		KCodes Corporation
-0011E5     (base 16)		KCodes Corporation
-				7F., No. 252, Sec. 1, Neihu Rd.,
-				Neihu Dist.  Taipei City  114
-				TW
-
-A0-83-B4   (hex)		HeNet B.V.
-A083B4     (base 16)		HeNet B.V.
-				Kalkhofseweg 20
-				Haps    5443NA
-				NL
-
-04-FF-08   (hex)		Huawei Device Co., Ltd.
-04FF08     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-00-A4-5F   (hex)		Huawei Device Co., Ltd.
-00A45F     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-FC-E2-6C   (hex)		Apple, Inc.
-FCE26C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-48-5A-EA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-485AEA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-84-81-02   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-848102     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-54-E0-05   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-54E005     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-4C-79-75   (hex)		Apple, Inc.
-4C7975     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-71-25   (hex)		Apple, Inc.
-1C7125     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-34-FE-77   (hex)		Apple, Inc.
-34FE77     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-98-B7-85   (hex)		Shenzhen 10Gtek Transceivers Co., Limited
-98B785     (base 16)		Shenzhen 10Gtek Transceivers Co., Limited
-				Blg 3, COFCO, Liuxian 2nd Road,
-				Shenzhen  Guangdong  518000
-				CN
-
-EC-DA-59   (hex)		New H3C Technologies Co., Ltd
-ECDA59     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-74-B7-E6   (hex)		Zegna-Daidong Limited
-74B7E6     (base 16)		Zegna-Daidong Limited
-				 Rooms 14-17, 18/F, Nan Fung Commercial, Centre 19 Lam Lok Street, Kowloon Bay
-				Hong Kong    999077
-				HK
-
-6C-E5-C9   (hex)		Apple, Inc.
-6CE5C9     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-10-B1-DF   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-10B1DF     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
-				Nanning  Guangxi  530007
-				CN
-
-F4-F6-47   (hex)		zte corporation
-F4F647     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-E8-81-75   (hex)		zte corporation
-E88175     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-40-F4-FD   (hex)		UNIONMAN TECHNOLOGY CO.,LTD
-40F4FD     (base 16)		UNIONMAN TECHNOLOGY CO.,LTD
-				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
-				Huizhou  Guangdong  516025
-				CN
-
-9C-0B-05   (hex)		eero inc.
-9C0B05     (base 16)		eero inc.
-				660 3rd Street
-				San Francisco  CA  94107
-				US
-
-78-F2-38   (hex)		Samsung Electronics Co.,Ltd
-78F238     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-D0-D6   (hex)		Samsung Electronics Co.,Ltd
-64D0D6     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-DC-97-58   (hex)		Sichuan AI-Link Technology Co., Ltd.
-DC9758     (base 16)		Sichuan AI-Link Technology Co., Ltd.
-				Anzhou, Industrial Park
-				Mianyang  Sichuan  622650
-				CN
-
-40-F6-BC   (hex)		Amazon Technologies Inc.
-40F6BC     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-20-AF-1B   (hex)		SteelSeries ApS
-20AF1B     (base 16)		SteelSeries ApS
-				656 West Randolph, Suite 2E
-				Chicago  IL  60661
-				US
-
-7C-77-16   (hex)		Zyxel Communications Corporation
-7C7716     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-94-3F-BB   (hex)		JSC RPC Istok named after Shokin
-943FBB     (base 16)		JSC RPC Istok named after Shokin
-				Room 65, Floor 2,  Building 1,  2A, Vokzalnaya Street
-				Fryazino  Moscow Region  141190
-				RU
-
-50-E7-B7   (hex)		vivo Mobile Communication Co., Ltd.
-50E7B7     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-F4-F7-0C   (hex)		Avang - neterbit
-F4F70C     (base 16)		Avang - neterbit
-				No 56, 16th St., Ghanbarzadeh St., Beheshti Ave
-				Tehran  Tehran  1533963361
-				IR
-
-E0-FF-F1   (hex)		Texas Instruments
-E0FFF1     (base 16)		Texas Instruments
-				12500 TI Blvd
-				Dallas  TX  75243
-				US
-
-F4-44-2C   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-F4442C     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-F0-BE-25   (hex)		Dongguan Cannice Precision Manufacturing Co., Ltd.
-F0BE25     (base 16)		Dongguan Cannice Precision Manufacturing Co., Ltd.
-				No. 21, Nange West Road, Daojiao Town
-				Dongguan  Guangdong  523170
-				CN
-
-00-80-DA   (hex)		Hottinger Brüel & Kjær A/S
-0080DA     (base 16)		Hottinger Brüel & Kjær A/S
-				Teknikerbyen 28
-				Virum    DK-2830
-				DK
-
-70-4C-B6   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
-704CB6     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
-				Shenzhen  Guangdong  518000
-				CN
-
-54-9B-49   (hex)		NEC Platforms, Ltd.
-549B49     (base 16)		NEC Platforms, Ltd.
-				2-3 Kandatsukasamachi
-				Chiyodaku  Tokyo  101-8532
-				JP
-
-88-25-10   (hex)		Aruba, a Hewlett Packard Enterprise Company
-882510     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-44-8C-00   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-448C00     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-D0-E8-28   (hex)		Radiant Industries Incorporated
-D0E828     (base 16)		Radiant Industries Incorporated
-				113 Sierra Street
-				El Segundo  CA  90245
-				US
-
-74-EF-4B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-74EF4B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-10-76-36   (hex)		Earda Technologies co Ltd
-107636     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-18-C2-93   (hex)		Laird Connectivity
-18C293     (base 16)		Laird Connectivity
-				3F.-1, No.145, Xianzheng 9th Rd.,
-				Zhubei    30251
-				TW
-
-00-0D-9C   (hex)		K.A. Schmersal GmbH & Co. KG
-000D9C     (base 16)		K.A. Schmersal GmbH & Co. KG
-				Im Ostpark 2 
-				Wettenberg  Hessen  35435
-				DE
-
-24-4C-AB   (hex)		Espressif Inc.
-244CAB     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-E0-41-02   (hex)		zte corporation
-E04102     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-D8-40-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D84008     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-04-7A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C047A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-6C-55-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-6C558D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-78-48-2C   (hex)		START USA, INC.
-78482C     (base 16)		START USA, INC.
-				6860 Dallas Pkwy, Ste 200
-				Plano  TX  75024
-				US
-
-7C-45-D0   (hex)		Shenzhen Wewins Wireless Co., ltd
-7C45D0     (base 16)		Shenzhen Wewins Wireless Co., ltd
-				17F., Mid Wing, Yuehai Building, Nanhai Road, Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-A4-2A-95   (hex)		D-Link International
-A42A95     (base 16)		D-Link International
-				1 Internal Business Park, #03-12,The Synergy
-				Singapore   Singapore  609917
-				SG
-
-30-CB-C7   (hex)		Cambium Networks Limited
-30CBC7     (base 16)		Cambium Networks Limited
-				Unit B2, Linhay Business Park,
-				Ashburton  Devon  TQ13 7UP
-				GB
-
-48-2E-72   (hex)		Cisco Systems, Inc
-482E72     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-88-50-46   (hex)		LEAR
-885046     (base 16)		LEAR
-				Industriestraße 48
-				Kronach  Bayern  96317
-				DE
-
-70-04-1D   (hex)		Espressif Inc.
-70041D     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-88-6F-29   (hex)		Pocketbook International SA
-886F29     (base 16)		Pocketbook International SA
-				Crocicchio Cortogna 6
-				Lugano  Ticino  6900
-				CH
-
-74-46-87   (hex)		Kingsignal Technology Co., Ltd.
-744687     (base 16)		Kingsignal Technology Co., Ltd.
-				Floor 26,Unit B,Block 10,No.1819 Shahexi Road,Shenzhen Bay Eco-Technology Park,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-BC-22-47   (hex)		New H3C Technologies Co., Ltd
-BC2247     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-08-26-AE   (hex)		IEEE Registration Authority
-0826AE     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-8C-47-7F   (hex)		NambooSolution
-8C477F     (base 16)		NambooSolution
-				613 Room, 171, Magokjungang-ro, Gangseo-gu, Seoul, Republic of Korea
-				Seoul    07788
-				KR
-
-7C-DA-C3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-7CDAC3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-8C-17-B6   (hex)		Huawei Device Co., Ltd.
-8C17B6     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B8-2B-68   (hex)		Huawei Device Co., Ltd.
-B82B68     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-2C-F2-95   (hex)		Huawei Device Co., Ltd.
-2CF295     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-E0-BB-0C   (hex)		Synertau LLC
-E0BB0C     (base 16)		Synertau LLC
-				st. 40 let Komsomola, 32G
-				Yekaterinburg    620092
-				RU
-
-14-9B-D7   (hex)		MULI MUWAI FURNITURE QIDONG CO., LTD
-149BD7     (base 16)		MULI MUWAI FURNITURE QIDONG CO., LTD
-				No. 55, Huanghai Road, Qidong High-tech Industrial Development Zone
-				Qidong  Jiangsu  226255
-				CN
-
-AC-77-B9   (hex)		Nanjing Yufei Intelligent Control Technology Co.,LTD
-AC77B9     (base 16)		Nanjing Yufei Intelligent Control Technology Co.,LTD
-				 Floor 3, Building 3, No.6 xuzhuang Road, Xuanwu District, Nanjing
-				nanjing    210000
-				CN
-
-A8-5B-B7   (hex)		Apple, Inc.
-A85BB7     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-3C-5D-29   (hex)		Zhejiang Tmall Technology Co., Ltd.
-3C5D29     (base 16)		Zhejiang Tmall Technology Co., Ltd.
-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
-				Hangzhou  Zhejiang  310024
-				CN
-
-68-FC-CA   (hex)		Samsung Electronics Co.,Ltd
-68FCCA     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-6C-D7-19   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-6CD719     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-80-01-5C   (hex)		Synaptics, Inc
-80015C     (base 16)		Synaptics, Inc
-				1251 McKay Dr.
-				San Jose  CA  CA 95131
-				US
-
-BC-61-93   (hex)		Xiaomi Communications Co Ltd
-BC6193     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-EC-71-DB   (hex)		Reolink Innovation Limited
-EC71DB     (base 16)		Reolink Innovation Limited
-				705,7/F,FA YUEN COMMERCIAL BUILDING,75-77 FA YUEN STREET
-				MONG KOK  KL  999077
-				CN
-
-F8-E5-7E   (hex)		Cisco Systems, Inc
-F8E57E     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-30-53-C1   (hex)		CRESYN
-3053C1     (base 16)		CRESYN
-				8-22,Jamwon-dong
-				Seoul  Seocho-Gu  #137-902
-				KR
-
-94-7F-D8   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-947FD8     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-38-5B-44   (hex)		Silicon Laboratories
-385B44     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-94-34-69   (hex)		Silicon Laboratories
-943469     (base 16)		Silicon Laboratories
-				400 West Cesar Chavez Street
-				Austin  TX  78701
-				US
-
-AC-33-0B   (hex)		Japan Computer Vision Corp.
-AC330B     (base 16)		Japan Computer Vision Corp.
-				6F.Hanzoumon PREX South 2-5-1 Kojimachi.
-				Chiyoda-ku TOKYO  Tokyo  1020083
-				JP
-
-34-62-B4   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
-3462B4     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
-				Phase 3, Bayan Lepas FIZ
-				Bayan Lepas  Penang  11900
-				MY
-
-CC-EB-18   (hex)		OOO TSS
-CCEB18     (base 16)		OOO TSS
-				ul. Borisovskaya, 1
-				Moscow  Moscow  105187
-				RU
-
-6C-24-08   (hex)		LCFC(Hefei) Electronics Technology Co., Ltd
-6C2408     (base 16)		LCFC(Hefei) Electronics Technology Co., Ltd
-				No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area
-				HEFEI  ANHUI  230601
-				CN
-
-EC-60-73   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
-EC6073     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
-				Shenzhen  Guangdong  518057
-				CN
-
-10-4D-15   (hex)		Viaanix Inc
-104D15     (base 16)		Viaanix Inc
-				434 N Main St.
-				Wichita   KS  67202
-				US
-
-50-A0-15   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
-50A015     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
-				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
-				Shenzhen  Nanshan District  518000
-				CN
-
-C8-54-A4   (hex)		Infinix mobility limited
-C854A4     (base 16)		Infinix mobility limited
-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
-				HongKong  HongKong  999077
-				HK
-
-A0-09-2E   (hex)		zte corporation
-A0092E     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-B0-AF-F7   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
-B0AFF7     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
-				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
-				Shenzhen  Nanshan District  518000
-				CN
-
-70-85-C4   (hex)		Ruijie Networks Co.,LTD
-7085C4     (base 16)		Ruijie Networks Co.,LTD
-				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
-				Fuzhou  Fujian  350002
-				CN
-
-5C-C5-63   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
-5CC563     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
-				No.8, Litong Road, Liuyan Economic & Tec
-				Changsha  HUNAN  410329
-				CN
-
-74-DD-CB   (hex)		China Leadshine Technology Co.,Ltd
-74DDCB     (base 16)		China Leadshine Technology Co.,Ltd
-				9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan?
-				SHENZHEN    518000
-				CN
-
-A8-B1-3B   (hex)		HP Inc.
-A8B13B     (base 16)		HP Inc.
-				10300 Energy Dr
-				Spring  TX  77389
-				US
-
-C4-38-75   (hex)		Sonos, Inc.
-C43875     (base 16)		Sonos, Inc.
-				614 Chapala St
-				Santa Barbara    93101
-				US
-
-68-B6-91   (hex)		Amazon Technologies Inc.
-68B691     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102 
-				Reno  NV  89507
-				US
-
-DC-A9-56   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-DCA956     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-				NO.18 HAIBIN ROAD,
-				DONG GUAN  GUANG DONG  523860
-				CN
-
-48-27-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-4827C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-BC-D2-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-BCD206     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-20-89-8A   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-20898A     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-14-75-5B   (hex)		Intel Corporate
-14755B     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-F4-E2-04   (hex)		COYOTE SYSTEM
-F4E204     (base 16)		COYOTE SYSTEM
-				1, rue Royale
-				Saint-Cloud    92210
-				FR
-
-F8-4E-58   (hex)		Samsung Electronics Co.,Ltd
-F84E58     (base 16)		Samsung Electronics Co.,Ltd
-				129, Samsung-ro, Youngtongl-Gu
-				Suwon  Gyeonggi-Do  16677
-				KR
-
-B4-70-64   (hex)		Samsung Electronics Co.,Ltd
-B47064     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-CC-82-7F   (hex)		Advantech Technology (CHINA) Co., Ltd.
-CC827F     (base 16)		Advantech Technology (CHINA) Co., Ltd.
-				No.666, Han-Pu Rd. Yu-Shan
-				Kun-Shan  Jiang Su  215316
-				CN
-
-88-3F-0C   (hex)		system a.v. co., ltd.
-883F0C     (base 16)		system a.v. co., ltd.
-				5-16-1,Aoe,KIta-Ku
-				Okayama  Okayama  700-0941
-				JP
-
-C8-BE-35   (hex)		Extreme Networks, Inc.
-C8BE35     (base 16)		Extreme Networks, Inc.
-				6480 Via Del Oro
-				San Jose  CA  95119
-				US
-
-78-AF-08   (hex)		Intel Corporate
-78AF08     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-D8-10-68   (hex)		Murata Manufacturing Co., Ltd.
-D81068     (base 16)		Murata Manufacturing Co., Ltd.
-				1-10-1, Higashikotari
-				Nagaokakyo-shi  Kyoto  617-8555
-				JP
-
-5C-04-5A   (hex)		Company NA Stage & Light
-5C045A     (base 16)		Company NA Stage & Light
-				Lambertu 9
-				M?rupe    LV-2167
-				LV
-
-58-C3-56   (hex)		EM Microelectronic
-58C356     (base 16)		EM Microelectronic
-				Rue des Sors 3
-				Marin-Epagnier  Neuchatel  2074
-				CH
-
-A0-ED-FB   (hex)		Quectel Wireless Solutions Co.,Ltd.
-A0EDFB     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-B0-23-47   (hex)		Shenzhen Giant Microelectronics Company Limited
-B02347     (base 16)		Shenzhen Giant Microelectronics Company Limited
-				Room 2108,  21 Floor, Building No.1 of Chang Fu Jin Mao Tower, No.5 Shi Hua Road, Futian District
-				Shenzhen  Guangdong  518000
-				CN
-
-CC-DD-58   (hex)		Robert Bosch GmbH
-CCDD58     (base 16)		Robert Bosch GmbH
-				Mittlerer Pfad 9
-				Stuttgart    70499
-				DE
-
-4C-2E-5E   (hex)		Samsung Electronics Co.,Ltd
-4C2E5E     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-5D-F4   (hex)		Samsung Electronics Co.,Ltd
-645DF4     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-88-FC-5D   (hex)		Cisco Systems, Inc
-88FC5D     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-F4-C8-8A   (hex)		Intel Corporate
-F4C88A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-18-3C-98   (hex)		Shenzhen Hengyi Technology Co., LTD
-183C98     (base 16)		Shenzhen Hengyi Technology Co., LTD
-				Floor 5, Zone 1, Block B, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
-				Shenzhen  Guangdong  518102
-				CN
-
-78-71-04   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-787104     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
-				Chengdu  Sichuan  611330
-				CN
-
-64-C5-82   (hex)		China Mobile Group Device Co.,Ltd.
-64C582     (base 16)		China Mobile Group Device Co.,Ltd.
-				32 Xuanwumen West Street,Xicheng District
-				Beijing    100053
-				CN
-
-D4-E0-53   (hex)		Aruba, a Hewlett Packard Enterprise Company
-D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
-				3333 Scott Blvd
-				Santa Clara  CA  95054
-				US
-
-5C-A4-F4   (hex)		zte corporation
-5CA4F4     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-94-09-C9   (hex)		ALPSALPINE CO .,LTD
-9409C9     (base 16)		ALPSALPINE CO .,LTD
-				nishida 6-1
-				kakuda-City  Miyagi-Pref  981-1595
-				JP
-
-50-28-4A   (hex)		Intel Corporate
-50284A     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-98-C9-7C   (hex)		Shenzhen iComm Semiconductor CO.,LTD
-98C97C     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
-				Room 601,Block B ,Digital Building,Garden City
-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
-				CN
-
-24-6C-60   (hex)		Huawei Device Co., Ltd.
-246C60     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-28-A3-31   (hex)		Sierra Wireless
-28A331     (base 16)		Sierra Wireless
-				13811 Wireless Way
-				Richmond  BC  V6V 3A4
-				CA
-
-18-34-AF   (hex)		Kaonmedia CO., LTD.
-1834AF     (base 16)		Kaonmedia CO., LTD.
-				884-3, Seongnam-daero, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13517
-				KR
-
-EC-62-60   (hex)		Espressif Inc.
-EC6260     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-B0-6E-72   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-B06E72     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-30-3E-A7   (hex)		Intel Corporate
-303EA7     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-60-7D-09   (hex)		Luxshare Precision Industry Co., Ltd
-607D09     (base 16)		Luxshare Precision Industry Co., Ltd
-				2nd floor,A building,Sanyo New Industrial Area,West Area of Maoyi, Shajing Street,Bao'an District
-				Shenzhen City  Guangdong Province  518100
-				CN
-
-CC-3E-79   (hex)		ARRIS Group, Inc.
-CC3E79     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-28-F5-D1   (hex)		ARRIS Group, Inc.
-28F5D1     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-10-E1-77   (hex)		ARRIS Group, Inc.
-10E177     (base 16)		ARRIS Group, Inc.
-				6450 Sequence Drive
-				San Diego  CA  92121
-				US
-
-28-82-7C   (hex)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
-28827C     (base 16)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
-				No.17 Longmen Road
-				Changzhou  JiangSu  213164
-				CN
-
-90-D4-73   (hex)		vivo Mobile Communication Co., Ltd.
-90D473     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-08-EB-F6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-08EBF6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C8-F0-9E   (hex)		Espressif Inc.
-C8F09E     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-DC-54-75   (hex)		Espressif Inc.
-DC5475     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-0C-7B-C8   (hex)		Cisco Meraki
-0C7BC8     (base 16)		Cisco Meraki
-				500 Terry A. Francois Blvd
-				San Francisco    94158
-				US
-
-00-16-A3   (hex)		INGETEAM
-0016A3     (base 16)		INGETEAM
-				Parque Tecnologico de Bizkaia, Edificio 110
-				Zamudio  Bizkaia  48170
-				ES
-
-24-CF-24   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
-24CF24     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
-				Beijing  Beijing  100085
-				CN
-
-1C-0D-7D   (hex)		Apple, Inc.
-1C0D7D     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-14-F2-87   (hex)		Apple, Inc.
-14F287     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-58-55-95   (hex)		Apple, Inc.
-585595     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-F0-6C-5D   (hex)		Xiaomi Communications Co Ltd
-F06C5D     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-40-B0-2F   (hex)		Miele & Cie. KG
-40B02F     (base 16)		Miele & Cie. KG
-				Carl-Miele-Straße 29
-				Gütersloh    33332
-				DE
-
-18-66-F0   (hex)		Jupiter Systems
-1866F0     (base 16)		Jupiter Systems
-				31015 Huntwood Ave
-				Hayward  CA  94544-7007
-				US
-
-74-60-4C   (hex)		RØDE
-74604C     (base 16)		RØDE
-				107 Carnarvon St
-				Silverwater  NSW  2128
-				AU
-
-28-6F-40   (hex)		Tonly Technology Co. Ltd 
-286F40     (base 16)		Tonly Technology Co. Ltd 
-				Section 37, Zhongkai Hi-Tech Development Zone
-				Huizhou  Guangdong  516006
-				CN
-
-BC-C7-DA   (hex)		Earda Technologies co Ltd
-BCC7DA     (base 16)		Earda Technologies co Ltd
-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
-				Guangzhou  Guangdong  511455
-				CN
-
-0C-86-C7   (hex)		Jabil Circuit (Guangzhou) Limited
-0C86C7     (base 16)		Jabil Circuit (Guangzhou) Limited
-				Huangpu 128, JunCheng Road
-				GuangZhou  Guangdong  510530
-				CN
-
-14-94-6C   (hex)		Apple, Inc.
-14946C     (base 16)		Apple, Inc.
-				1 Infinite Loop
-				Cupertino  CA  95014
-				US
-
-1C-59-74   (hex)		IEEE Registration Authority
-1C5974     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-58-00-32   (hex)		Genexis B.V.
-580032     (base 16)		Genexis B.V.
-				Lodewijkstraat 1A
-				Eindhoven    5652AC
-				NL
-
-B4-7D-76   (hex)		KNS Group LLC
-B47D76     (base 16)		KNS Group LLC
-				Room 4, Office IV, Floor 4 Rochdelskaya street, 15, b.15 Moscow, 123376 Russia
-				Moscow    123376
-				RU
-
-C0-AD-97   (hex)		TECNO MOBILE LIMITED
-C0AD97     (base 16)		TECNO MOBILE LIMITED
-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
-				Hong Kong  Hong Kong  999077
-				HK
-
-B0-38-E2   (hex)		Wanan Hongsheng Electronic Co.Ltd
-B038E2     (base 16)		Wanan Hongsheng Electronic Co.Ltd
-				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
-				Wanan  China/jiangxi  343800
-				CN
-
-4C-53-69   (hex)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
-4C5369     (base 16)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
-				No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China
-				ChongQing  ChongQing  400025
-				CN
-
-70-A9-83   (hex)		Cisco Systems, Inc
-70A983     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-BC-FA-EB   (hex)		Cisco Systems, Inc
-BCFAEB     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-74-76-7D   (hex)		shenzhen kexint technology co.,ltd
-74767D     (base 16)		shenzhen kexint technology co.,ltd
-				5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City
-				shenzhen  guangdong  518000
-				CN
-
-E0-48-D8   (hex)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
-E048D8     (base 16)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
-				Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, 
-				Guangzhou    510623
-				CN
-
-F8-E4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
-F8E4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
-				No.5 DongXin Road
-				Wuhan  Hubei  430074
-				CN
-
-84-85-53   (hex)		Biznes Systema Telecom, LLC
-848553     (base 16)		Biznes Systema Telecom, LLC
-				room XXII/1, fl 3, block 3, 6 Barklaya street, Moscow, 121087, Russia
-				Moscow    121087
-				RU
-
-D8-88-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-D88863     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-C0-3E-50   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-C03E50     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-80-60-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-806036     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-A0-C9-8B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
-A0C98B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
-				Werinherstrasse 91
-				München  Bavaria  D-81541
-				DE
-
-18-BB-1C   (hex)		Huawei Device Co., Ltd.
-18BB1C     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-4C-9D-22   (hex)		ACES Co.,Ltd
-4C9D22     (base 16)		ACES Co.,Ltd
-				TianGong Avenue #916, Tianfu New Area
-				ChengDu  Sichuan Province  610000
-				CN
-
-88-C9-E8   (hex)		Sony Corporation
-88C9E8     (base 16)		Sony Corporation
-				Sony City Osaki 2-10-1
-				Shinagawa-ku   Tokyo  141-8610
-				JP
-
-B8-F0-B9   (hex)		zte corporation
-B8F0B9     (base 16)		zte corporation
-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
-				shenzhen  guangdong  518057
-				CN
-
-80-5B-65   (hex)		LG Innotek
-805B65     (base 16)		LG Innotek
-				26, Hanamsandan 5beon-ro
-				Gwangju  Gwangsan-gu  506-731
-				KR
-
-D4-43-0E   (hex)		Zhejiang Dahua Technology Co., Ltd.
-D4430E     (base 16)		Zhejiang Dahua Technology Co., Ltd.
-				No.1199,Waterfront Road 
-				Hangzhou  Zhejiang  310053
-				CN
-
-00-73-8D   (hex)		Shenzhen TINNO Mobile Technology Corp.
-00738D     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-44-D3-AD   (hex)		Shenzhen TINNO Mobile Technology Corp.
-44D3AD     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-F8-5E-0B   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
-
-94-D3-31   (hex)		Xiaomi Communications Co Ltd
-94D331     (base 16)		Xiaomi Communications Co Ltd
-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
-				Beijing  Haidian District  100085
-				CN
-
-5C-8C-30   (hex)		Taicang T&W Electronics
-5C8C30     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-2C-9D-65   (hex)		vivo Mobile Communication Co., Ltd.
-2C9D65     (base 16)		vivo Mobile Communication Co., Ltd.
-				No.1, vivo Road, Chang'an
-				Dongguan  Guangdong  523860
-				CN
-
-44-88-16   (hex)		Cisco Systems, Inc
-448816     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-34-DD-04   (hex)		Minut AB
-34DD04     (base 16)		Minut AB
-				Baltzarsgatan 23
-				Malmö    21136
-				SE
-
-E8-AC-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-E8AC23     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-D9-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-68D927     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-90-F9-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-90F970     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-04-CA-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
-04CAED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
-				Dongguan    523808
-				CN
-
-68-EE-88   (hex)		Shenzhen TINNO Mobile Technology Corp.
-68EE88     (base 16)		Shenzhen TINNO Mobile Technology Corp.
-				Building, No.33, Xiandong Rd, Xili
-				Nanshan District, Shenzhen  PRC  518053
-				CN
-
-54-3D-92   (hex)		WIRELESS-TEK TECHNOLOGY LIMITED
-543D92     (base 16)		WIRELESS-TEK TECHNOLOGY LIMITED
-				Room 402 4F, BiaoFan Technology Building, Bao'An Avenue, FuYong Town, Bao'An district, ShenZhen,China
-				SHENZHEN    518000
-				CN
-
-98-26-AD   (hex)		Quectel Wireless Solutions Co.,Ltd.
-9826AD     (base 16)		Quectel Wireless Solutions Co.,Ltd.
-				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
-				Shanghai    200233
-				CN
-
-60-1E-98   (hex)		Axevast Technology
-601E98     (base 16)		Axevast Technology
-				5F., No. 20, Guanqian Road, Zhongzheng District
-				Taipei City    100007
-				TW
-
-A8-F7-D9   (hex)		Mist Systems, Inc.
-A8F7D9     (base 16)		Mist Systems, Inc.
-				1601 South De Anza Blvd, Suite 248
-				Cupertino  CA  95014
-				US
-
-2C-3B-70   (hex)		AzureWave Technology Inc.
-2C3B70     (base 16)		AzureWave Technology Inc.
-				8F., No. 94, Baozhong Rd.
-				New Taipei City  Taiwan  231
-				TW
-
-38-86-F7   (hex)		Google, Inc.
-3886F7     (base 16)		Google, Inc.
-				1600 Amphitheatre Parkway
-				Mountain View  CA  94043
-				US
-
-F4-22-7A   (hex)		Guangdong Seneasy Intelligent Technology Co., Ltd.
-F4227A     (base 16)		Guangdong Seneasy Intelligent Technology Co., Ltd.
-				No. 63, Huitai Industrial Park,
-				Huizhou City,  Guangdong Province  516000
-				CN
-
-8C-51-09   (hex)		IEEE Registration Authority
-8C5109     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-A4-75-B9   (hex)		Samsung Electronics Co.,Ltd
-A475B9     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-80-54-9C   (hex)		Samsung Electronics Co.,Ltd
-80549C     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-6C-60-D0   (hex)		Huawei Device Co., Ltd.
-6C60D0     (base 16)		Huawei Device Co., Ltd.
-				No.2 of Xincheng Road, Songshan Lake Zone
-				Dongguan  Guangdong  523808
-				CN
-
-1C-F8-D0   (hex)		Samsung Electronics Co.,Ltd
-1CF8D0     (base 16)		Samsung Electronics Co.,Ltd
-				#94-1, Imsoo-Dong
-				Gumi  Gyeongbuk  730-350
-				KR
-
-64-0E-6A   (hex)		SECO-LARM USA Inc
-640E6A     (base 16)		SECO-LARM USA Inc
-				16842 Millikan
-				Irvine  CA  92606
-				US
-
-68-E1-54   (hex)		SiMa.ai
-68E154     (base 16)		SiMa.ai
-				226 Airport Parkway, Suite 550
-				San Jose  CA  95110
-				US
-
-DC-8D-B7   (hex)		ATW TECHNOLOGY, INC.
-DC8DB7     (base 16)		ATW TECHNOLOGY, INC.
-				1F, No.236 Ba’ai Street, Shulin District
-				New Taipei City    23845
-				TW
-
-70-20-84   (hex)		Hon Hai Precision Industry Co., Ltd.
-702084     (base 16)		Hon Hai Precision Industry Co., Ltd.
-				GuangDongShenZhen
-				ShenZhen  GuangDong  518109
-				CN
-
-28-C1-3C   (hex)		Hon Hai Precision Industry Co., Ltd.
-28C13C     (base 16)		Hon Hai Precision Industry Co., Ltd.
-				GuangDongShenZhen
-				ShenZhen  GuangDong  518109
-				CN
-
-1C-A0-B8   (hex)		Hon Hai Precision Industry Co., Ltd.
-1CA0B8     (base 16)		Hon Hai Precision Industry Co., Ltd.
-				GuangDongShenZhen
-				ShenZhen  GuangDong  518109
-				CN
-
-18-AA-1E   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-18AA1E     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
-				4F,Block A, Skyworth?Building,
-				Shenzhen  Guangdong  518057
-				CN
-
-9C-31-C3   (hex)		SKY UK LIMITED
-9C31C3     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-D4-52-EE   (hex)		SKY UK LIMITED
-D452EE     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-90-21-06   (hex)		SKY UK LIMITED
-902106     (base 16)		SKY UK LIMITED
-				130 Kings Road
-				Brentwood  Essex  08854
-				GB
-
-D8-FF-C3   (hex)		Shenzhen 3SNIC information technology company Limited
-D8FFC3     (base 16)		Shenzhen 3SNIC information technology company Limited
-				Room 3101, Building 3, Nanshan Zhiyuan Chongwen Park, No.3370, Liuxian Avenue, Fuguang Community, Taoyuan Street, Nanshan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-F0-87-56   (hex)		Zyxel Communications Corporation
-F08756     (base 16)		Zyxel Communications Corporation
-				No. 6 Innovation Road II, Science Park
-				Hsichu  Taiwan  300
-				TW
-
-E8-EF-05   (hex)		MIND TECH INTERNATIONAL LIMITED
-E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
-				FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK
-				Hong Kong    999077
-				HK
-
-48-27-E2   (hex)		Espressif Inc.
-4827E2     (base 16)		Espressif Inc.
-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-58-B3-8F   (hex)		New H3C Technologies Co., Ltd
-58B38F     (base 16)		New H3C Technologies Co., Ltd
-				466 Changhe Road, Binjiang District
-				Hangzhou  Zhejiang  310052
-				CN
-
-40-E1-71   (hex)		Jiangsu Huitong Group Co.,Ltd.
-40E171     (base 16)		Jiangsu Huitong Group Co.,Ltd.
-				No. 24, Block 2, Taohuawu New District
-				Zhenjiang  Jiangsu  212003
-				CN
-
-F4-6D-3F   (hex)		Intel Corporate
-F46D3F     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-6C-72-4A   (hex)		Onkyo Technology K.K.
-6C724A     (base 16)		Onkyo Technology K.K.
-				Lux Building (5th floor),1-1-41 Kawamata
-				Higashiosaka City  Osaka  577-0063
-				JP
-
-18-C3-00   (hex)		Nokia
-18C300     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-D4-4D-77   (hex)		Nokia
-D44D77     (base 16)		Nokia
-				600 March Road
-				Kanata  Ontario  K2K 2E6
-				CA
-
-DC-05-39   (hex)		Cisco Systems, Inc
-DC0539     (base 16)		Cisco Systems, Inc
-				80 West Tasman Drive
-				San Jose  CA  94568
-				US
-
-8C-25-5E   (hex)		VoltServer
-8C255E     (base 16)		VoltServer
-				42 Ladd St STE 227
-				East Greenwich  RI  02818
-				US
-
-B8-8F-27   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-B88F27     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
-				Chongqing   China  401120
-				CN
+OUI/MA-L                                                    Organization                                 
+company_id                                                  Organization                                 
+                                                            Address                                      
+
+00-22-72   (hex)		American Micro-Fuel Device Corp.
+002272     (base 16)		American Micro-Fuel Device Corp.
+				2181 Buchanan Loop
+				Ferndale  WA  98248
+				US
+
+00-D0-EF   (hex)		IGT
+00D0EF     (base 16)		IGT
+				9295 PROTOTYPE DRIVE
+				RENO  NV  89511
+				US
+
+08-61-95   (hex)		Rockwell Automation
+086195     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+F4-BD-9E   (hex)		Cisco Systems, Inc
+F4BD9E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-85-E9   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
+5885E9     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
+				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
+				Chongqing  China  401120
+				CN
+
+BC-23-92   (hex)		BYD Precision Manufacture Company Ltd.
+BC2392     (base 16)		BYD Precision Manufacture Company Ltd.
+				No.3001, Bao He Road, Baolong Industrial, Longgang Street,Longgang Zone, Shenzhen
+				shenzhen    518116
+				CN
+
+40-55-82   (hex)		Nokia
+405582     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+A4-E3-1B   (hex)		Nokia
+A4E31B     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+D8-97-90   (hex)		Commonwealth Scientific and Industrial Research Organisation
+D89790     (base 16)		Commonwealth Scientific and Industrial Research Organisation
+				GPO Box 1700
+				Canberra  ACT  2601
+				AU
+
+88-3A-30   (hex)		Aruba, a Hewlett Packard Enterprise Company
+883A30     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+B8-A5-8D   (hex)		Axe Group Holdings Limited
+B8A58D     (base 16)		Axe Group Holdings Limited
+				Road Town
+				tortola    VG1110
+				VG
+
+50-CE-E3   (hex)		Gigafirm.co.LTD
+50CEE3     (base 16)		Gigafirm.co.LTD
+				3-21-8,kisonishi
+				machida-city  tokyo  1940037
+				JP
+
+98-E7-43   (hex)		Dell Inc.
+98E743     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+C4-19-D1   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
+C419D1     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
+				No. 1500 Zuchongzhi Rd, Building #3
+				Shanghai    201203
+				CN
+
+88-7E-25   (hex)		Extreme Networks, Inc.
+887E25     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+08-60-83   (hex)		zte corporation
+086083     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E0-19-54   (hex)		zte corporation
+E01954     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+10-32-7E   (hex)		Huawei Device Co., Ltd.
+10327E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F8-08-4F   (hex)		Sagemcom Broadband SAS
+F8084F     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+30-FB-B8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+30FBB8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-97-C2   (hex)		Nebulon Inc
+F497C2     (base 16)		Nebulon Inc
+				3089 Skyway Court
+				Fremont  CA  94539
+				US
+
+A4-45-19   (hex)		Xiaomi Communications Co Ltd
+A44519     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+68-DB-F5   (hex)		Amazon Technologies Inc.
+68DBF5     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+24-46-C8   (hex)		Motorola Mobility LLC, a Lenovo Company
+2446C8     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+18-02-AE   (hex)		vivo Mobile Communication Co., Ltd.
+1802AE     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+0C-20-D3   (hex)		vivo Mobile Communication Co., Ltd.
+0C20D3     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+44-D7-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+44D791     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-46-FE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8446FE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-29-18   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D82918     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-B2-1D   (hex)		Chengdu Phycom Tech Co., Ltd.
+64B21D     (base 16)		Chengdu Phycom Tech Co., Ltd.
+				No.216 beisen road
+				Chengdu  Sichuan  610000
+				CN
+
+C4-29-96   (hex)		Signify B.V.
+C42996     (base 16)		Signify B.V.
+				High Tech Campus 7
+				Eindhoven    5656AE
+				NL
+
+98-06-37   (hex)		IEEE Registration Authority
+980637     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-B8-4A   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+8CB84A     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+98-E8-FA   (hex)		Nintendo Co.,Ltd
+98E8FA     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+38-C4-E8   (hex)		NSS Sp. z o.o.
+38C4E8     (base 16)		NSS Sp. z o.o.
+				Modularna 11
+				Warszawa    02-238
+				PL
+
+34-DD-7E   (hex)		Umeox Innovations Co.,Ltd
+34DD7E     (base 16)		Umeox Innovations Co.,Ltd
+				Room 1208-09, Research Building, Tsinghua Information Port, No. 1, Xindong Road, Nanshan District, Shenzhen
+				Shenzhen  Guangdong  518000
+				CN
+
+CC-CD-64   (hex)		SM-Electronic GmbH
+CCCD64     (base 16)		SM-Electronic GmbH
+				Waldweg 2
+				Stapelfeld / Braak    22145
+				DE
+
+24-DF-A7   (hex)		Hangzhou BroadLink Technology Co.,Ltd
+24DFA7     (base 16)		Hangzhou BroadLink Technology Co.,Ltd
+				Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China
+				Hangzhou  Zhejiang  310052
+				CN
+
+B0-65-F1   (hex)		WIO Manufacturing HK Limited
+B065F1     (base 16)		WIO Manufacturing HK Limited
+				15/F OTB Building, 160 Glocester Road
+				Hong Kong    00000
+				HK
+
+90-12-34   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+901234     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+54-2A-1B   (hex)		Sonos, Inc.
+542A1B     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+5C-92-5E   (hex)		Zioncom Electronics (Shenzhen) Ltd.
+5C925E     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
+				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+08-4F-A9   (hex)		Cisco Systems, Inc
+084FA9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-4F-F9   (hex)		Cisco Systems, Inc
+084FF9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-98-B8   (hex)		New H3C Technologies Co., Ltd
+5098B8     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+11-00-AA   (hex)		Private
+1100AA     (base 16)		Private
+
+B8-4D-EE   (hex)		Hisense broadband multimedia technology Co.,Ltd
+B84DEE     (base 16)		Hisense broadband multimedia technology Co.,Ltd
+				Song ling Road 399
+				Qingdao    266000
+				CN
+
+A8-93-52   (hex)		SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
+A89352     (base 16)		SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
+				RM510,418 Guiping Road,xuhui-Park
+				shanghai  shanghai  200233
+				CN
+
+E4-CC-9D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+E4CC9D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+A8-D0-E3   (hex)		Systech Electronics Ltd
+A8D0E3     (base 16)		Systech Electronics Ltd
+				Lever Tech Centre, 69-71 King Yip Street,
+				,    852
+				HK
+
+98-BA-39   (hex)		Doro AB
+98BA39     (base 16)		Doro AB
+				Jörgen Kocksgatan 1B
+				Malmö  Skane  211 20
+				SE
+
+D4-6B-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D46BA6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-05-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC0577     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-8B-B2   (hex)		Cisco Systems, Inc
+308BB2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-EB-62   (hex)		Shanghai Hulu Devices Co., Ltd
+E0EB62     (base 16)		Shanghai Hulu Devices Co., Ltd
+				509 Caobao Road,  Rm 101-2 Bld 9
+				Shanghai    200233
+				CN
+
+08-68-8D   (hex)		New H3C Technologies Co., Ltd
+08688D     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+E8-6F-38   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+E86F38     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+48-21-6C   (hex)		China Mobile IOT Company Limited
+48216C     (base 16)		China Mobile IOT Company Limited
+				Building D3,No.8 Yangliu North Road,Yubei District 
+				CHONGQING  CHONGQING  401121
+				CN
+
+8C-BE-24   (hex)		Tashang Semiconductor(Shanghai) Co., Ltd.
+8CBE24     (base 16)		Tashang Semiconductor(Shanghai) Co., Ltd.
+				Room 903, Building 5, Minggu Science Park,No. 7001, Zhong Chun Road, Minhang District ,Shanghai 201101, P.R. China
+				Shanghai    123456
+				CN
+
+08-B3-AF   (hex)		vivo Mobile Communication Co., Ltd.
+08B3AF     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+30-86-2D   (hex)		Arista Network, Inc.
+30862D     (base 16)		Arista Network, Inc.
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+6C-E8-C6   (hex)		Earda Technologies co Ltd
+6CE8C6     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+1C-41-76   (hex)		China Mobile Group Device Co.,Ltd.
+1C4176     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+60-8B-0E   (hex)		Apple, Inc.
+608B0E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-71-D5   (hex)		Hazens Automotive Electronics(SZ)Co.,Ltd.
+1871D5     (base 16)		Hazens Automotive Electronics(SZ)Co.,Ltd.
+				C8 Building, Building 13, Zhongxin Innovation Industry City, No.12, Ganli No.6 Road, Ganli Industrial Park, Buji Street, Longgang District 
+				Shenzhen  Guangdong  518100
+				CN
+
+AC-B1-EE   (hex)		SHENZHEN FENDA TECHNOLOGY CO., LTD
+ACB1EE     (base 16)		SHENZHEN FENDA TECHNOLOGY CO., LTD
+				Fenda Hi-Tech Park, Zhoushi Road, Shiyan, Baoan
+				ShenZhen  GuangDong  518108
+				CN
+
+F8-AD-CB   (hex)		HMD Global Oy
+F8ADCB     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+D4-62-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D462EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-BA-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54BAD6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-DC-4E   (hex)		AEV, spol. s r. o.
+94DC4E     (base 16)		AEV, spol. s r. o.
+				Jozky Silneho 2783/9
+				Kromeriz    76701
+				CZ
+
+14-42-FC   (hex)		Texas Instruments
+1442FC     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+AC-5D-5C   (hex)		FN-LINK TECHNOLOGY LIMITED
+AC5D5C     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+54-DE-D0   (hex)		Sevio Srl
+54DED0     (base 16)		Sevio Srl
+				Via Dei Caniana 6/A
+				Bergamo  Bergamo  24127
+				IT
+
+6C-5E-3B   (hex)		Cisco Systems, Inc
+6C5E3B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-19-20   (hex)		Movon Corporation
+401920     (base 16)		Movon Corporation
+				3Fl, Hyunjuk Bldg. 7 selleung-ro, 94gil,  Gangnam-gu
+				Seoul    06161
+				KR
+
+D0-37-45   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D03745     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+60-3A-7C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+603A7C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-01-78   (hex)		MARGI Systems, Inc.
+000178     (base 16)		MARGI Systems, Inc.
+				3155 Kearney Street. - Ste.#200
+				Fremont  CA  94538
+				US
+
+0C-B7-71   (hex)		ARRIS Group, Inc.
+0CB771     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+58-C8-76   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+58C876     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+2C-1E-4F   (hex)		Chengdu Qianli Network Technology Co., Ltd.
+2C1E4F     (base 16)		Chengdu Qianli Network Technology Co., Ltd.
+				Room 1208, 4 Building, Ideal Center, NO.38 Tianyi Street, Chengdu High-tech Zone
+				Chengdu  Sichuan  610000
+				CN
+
+00-90-52   (hex)		SELCOM ELETTRONICA S.R.L.
+009052     (base 16)		SELCOM ELETTRONICA S.R.L.
+				VIA GRANDI, 5
+				40013 CASTELMAGGIORE BO    
+				IT
+
+00-1A-83   (hex)		Pegasus Technologies Inc.
+001A83     (base 16)		Pegasus Technologies Inc.
+				108 Pawnook Farm Rd.
+				Lenoir City  TN  37771
+				US
+
+24-16-6D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24166D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+94-0B-19   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+940B19     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+70-C7-F2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+70C7F2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+38-94-ED   (hex)		NETGEAR
+3894ED     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+70-04-33   (hex)		California Things Inc.
+700433     (base 16)		California Things Inc.
+				650 main st
+				redwood city  CA  94063
+				US
+
+DC-A6-32   (hex)		Raspberry Pi Trading Ltd
+DCA632     (base 16)		Raspberry Pi Trading Ltd
+				Maurice Wilkes Building, Cowley Road
+				Cambridge    CB4 0DS
+				GB
+
+88-F5-6E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88F56E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+BC-97-E1   (hex)		Broadcom Limited
+BC97E1     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+28-D1-B7   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+28D1B7     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+C8-C2-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C8C2FA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+88-B3-62   (hex)		Nokia Shanghai Bell Co., Ltd.
+88B362     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai 201206,P.R.China
+				Shanghai   Pudong  201206
+				CN
+
+08-47-D0   (hex)		Nokia Shanghai Bell Co., Ltd.
+0847D0     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai 201206,P.R.China
+				Shanghai   Pudong  201206
+				CN
+
+08-9C-86   (hex)		Nokia Shanghai Bell Co., Ltd.
+089C86     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai 201206,P.R.China
+				Shanghai   Pudong  201206
+				CN
+
+7C-89-56   (hex)		Samsung Electronics Co.,Ltd
+7C8956     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-93-E4   (hex)		Private
+9C93E4     (base 16)		Private
+
+88-29-9C   (hex)		Samsung Electronics Co.,Ltd
+88299C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-90-93   (hex)		Hansong Tehnologies
+CC9093     (base 16)		Hansong Tehnologies
+				8 Kangping road, New development zone
+				Nanjing  Jiangsu  210006
+				CN
+
+CC-64-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC64A6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-31-7D   (hex)		Hosiden Corporation
+30317D     (base 16)		Hosiden Corporation
+				4-33, Kitakyuhoji 1-chome
+				Yao  Osaka  5810071
+				JP
+
+F0-A9-68   (hex)		Antailiye Technology Co.,Ltd
+F0A968     (base 16)		Antailiye Technology Co.,Ltd
+				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen
+				SHEN ZHEN  GUANGDONG  518000
+				CN
+
+48-E1-E9   (hex)		Chengdu Meross Technology Co., Ltd.
+48E1E9     (base 16)		Chengdu Meross Technology Co., Ltd.
+				No. 25, Yizhou Avenue, Gaoxin
+				Chengdu  Sichuan  610000
+				CN
+
+D8-13-99   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+D81399     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+54-E0-19   (hex)		Ring LLC
+54E019     (base 16)		Ring LLC
+				1523 26th St
+				Santa Monica  CA  90404
+				US
+
+14-84-30   (hex)		MITAC COMPUTING TECHNOLOGY CORPORATION
+148430     (base 16)		MITAC COMPUTING TECHNOLOGY CORPORATION
+				3F., NO.1, R&D ROAD 2, HSINCHU SCIENCE PARK
+				HSINCHU    30076
+				TW
+
+B8-A4-4F   (hex)		Axis Communications AB
+B8A44F     (base 16)		Axis Communications AB
+				Emdalavägen 14
+				LUND    22369
+				SE
+
+00-24-EB   (hex)		ClearPath Networks, Inc.
+0024EB     (base 16)		ClearPath Networks, Inc.
+				1940 E. Mariposa Ave
+				El Segundo  CA  90245
+				US
+
+50-AF-4D   (hex)		zte corporation
+50AF4D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C8-EA-F8   (hex)		zte corporation
+C8EAF8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+70-9F-2D   (hex)		zte corporation
+709F2D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+38-3B-26   (hex)		Jiangsu Qinheng Co., Ltd.
+383B26     (base 16)		Jiangsu Qinheng Co., Ltd.
+				No. 18, Ningshuang Road
+				Nanjing  Jiangsu  210012
+				CN
+
+5C-FA-FB   (hex)		Acubit
+5CFAFB     (base 16)		Acubit
+				Afred Nobels Vej 21A
+				Aalborg Ø    9220
+				DK
+
+9C-7B-EF   (hex)		Hewlett Packard
+9C7BEF     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+74-2E-DB   (hex)		Perinet GmbH
+742EDB     (base 16)		Perinet GmbH
+				Rudower Chaussee 29
+				Berlin  Berlin  12489
+				DE
+
+20-17-42   (hex)		LG Electronics
+201742     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+CC-88-26   (hex)		LG Innotek
+CC8826     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+EC-5B-73   (hex)		Advanced & Wise Technology Corp.
+EC5B73     (base 16)		Advanced & Wise Technology Corp.
+				5F, No. 3-2, Industry East 9th Road, Hsinchu Science Park,
+				Hsinchu City  Hsinchu  30075
+				TW
+
+84-8B-CD   (hex)		IEEE Registration Authority
+848BCD     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+14-C0-3E   (hex)		ARRIS Group, Inc.
+14C03E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+C0-89-AB   (hex)		ARRIS Group, Inc.
+C089AB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D4-4D-A4   (hex)		Murata Manufacturing Co., Ltd.
+D44DA4     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+F8-E5-CF   (hex)		CGI IT UK LIMITED
+F8E5CF     (base 16)		CGI IT UK LIMITED
+				20 Fenchurch Street, 14th Floor
+				London    EC3M 3BY
+				GB
+
+68-82-F2   (hex)		grandcentrix GmbH
+6882F2     (base 16)		grandcentrix GmbH
+				Holzmarkt 1 
+				Cologne  NW  50676
+				DE
+
+D4-20-B0   (hex)		Mist Systems, Inc.
+D420B0     (base 16)		Mist Systems, Inc.
+				1601 South De Anza Blvd, Suite 248
+				Cupertino  CA  95014
+				US
+
+08-ED-ED   (hex)		Zhejiang Dahua Technology Co., Ltd.
+08EDED     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+60-92-F5   (hex)		ARRIS Group, Inc.
+6092F5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-22-AF   (hex)		Safety Vision, LLC
+0022AF     (base 16)		Safety Vision, LLC
+				6100 W. Sam Houston Pkwy. North
+				Houston    77041
+				US
+
+A0-91-A2   (hex)		OnePlus Electronics (Shenzhen) Co., Ltd.
+A091A2     (base 16)		OnePlus Electronics (Shenzhen) Co., Ltd.
+				Room 201, Block A, No.1, 1st Qian Wan Road, Qianhai Shenzhen-Hong Kong Cooperation Zone, Shenzhen, China.
+				Shenzhen  Guangdong  518000
+				CN
+
+00-80-B5   (hex)		UNITED NETWORKS INC.
+0080B5     (base 16)		UNITED NETWORKS INC.
+				2178 PARAGON DRIVE
+				SAN JOSE  CA  95131
+				US
+
+1C-69-7A   (hex)		EliteGroup Computer Systems Co., LTD
+1C697A     (base 16)		EliteGroup Computer Systems Co., LTD
+				No.239, Sec. 2, TiDing Blvd. Nei-Hu Dist.
+				Taipei  Taiwan  11439
+				TW
+
+4C-17-44   (hex)		Amazon Technologies Inc.
+4C1744     (base 16)		Amazon Technologies Inc.
+				P.O. Box 8102
+				Reno  NV  89507
+				US
+
+B0-30-55   (hex)		China Mobile IOT Company Limited
+B03055     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+90-5C-34   (hex)		Sirius Electronic Systems Srl
+905C34     (base 16)		Sirius Electronic Systems Srl
+				via Robinie, 33
+				Gravellona Toce  VB  28883
+				IT
+
+D4-6A-35   (hex)		Cisco Systems, Inc
+D46A35     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D0-9C-7A   (hex)		Xiaomi Communications Co Ltd
+D09C7A     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+C8-2C-2B   (hex)		IEEE Registration Authority
+C82C2B     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-20-DA   (hex)		Sagemcom Broadband SAS
+8020DA     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+68-84-7E   (hex)		FUJITSU LIMITED
+68847E     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+00-30-85   (hex)		Cisco Systems, Inc
+003085     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+60-5F-8D   (hex)		eero inc.
+605F8D     (base 16)		eero inc.
+				500 Howard Street, Suite 900
+				SAN FRANCISCO  CA  94105
+				US
+
+C4-B3-6A   (hex)		Cisco Systems, Inc
+C4B36A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+70-F7-54   (hex)		AMPAK Technology,Inc.
+70F754     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+6C-8B-D3   (hex)		Cisco Systems, Inc
+6C8BD3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-97-4B   (hex)		Shenzhen Costar Electronics Co. Ltd.
+68974B     (base 16)		Shenzhen Costar Electronics Co. Ltd.
+				No.94 Fuyuan 1st Road,Yuyuan Industrial Park,
+				Shenzhen   Guangdong  518103
+				CN
+
+34-E1-D1   (hex)		IEEE Registration Authority
+34E1D1     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-21-B7   (hex)		LEXMARK INTERNATIONAL, INC.
+0021B7     (base 16)		LEXMARK INTERNATIONAL, INC.
+				740 West New Circle Road
+				Lexington  KY  40550
+				US
+
+00-A0-B0   (hex)		I-O DATA DEVICE,INC.
+00A0B0     (base 16)		I-O DATA DEVICE,INC.
+				24-1, SAKURADA-MACHI
+				KANAZAWA, ISHIKAWA 920    na
+				JP
+
+24-79-F3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+2479F3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+80-A2-35   (hex)		Edgecore Networks Corporation
+80A235     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+30-EA-26   (hex)		Sycada BV
+30EA26     (base 16)		Sycada BV
+				Burgemeester Stramanweg 105B
+				Amsterdam    1101 AA
+				NL
+
+9C-49-7F   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+9C497F     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+C4-E3-9F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C4E39F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+F8-9A-78   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F89A78     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-F8-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88F872     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-56-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC5623     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-86-BC   (hex)		Cisco Systems, Inc
+5486BC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-23-43   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+402343     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+18-F1-8E   (hex)		ChipER Technology co. ltd
+18F18E     (base 16)		ChipER Technology co. ltd
+				907 University Ave#299
+				Middleton  WI  53562
+				US
+
+00-04-22   (hex)		Studio Technologies, Inc
+000422     (base 16)		Studio Technologies, Inc
+				7440 Frontage Rd
+				Skokie  IL   60077-3212
+				US
+
+80-DA-13   (hex)		eero inc.
+80DA13     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+50-EC-50   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+50EC50     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+60-61-DF   (hex)		Z-meta Research LLC
+6061DF     (base 16)		Z-meta Research LLC
+				8365 Quay Drive
+				Arvada  CO  80003
+				US
+
+70-57-BF   (hex)		New H3C Technologies Co., Ltd
+7057BF     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+10-82-86   (hex)		Luxshare Precision Industry Co.,Ltd
+108286     (base 16)		Luxshare Precision Industry Co.,Ltd
+				2nd floor, A building, Sanyo New Industrial Area, West of Maoyi, Shajing  Baoan District
+				Shenzhen  Shenzhen  518104
+				CN
+
+14-B4-57   (hex)		Silicon Laboratories
+14B457     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+DC-96-2C   (hex)		NST Audio Ltd
+DC962C     (base 16)		NST Audio Ltd
+				32 Whitewall
+				Norton  North Yorkshire  YO17 9EH
+				GB
+
+18-02-2D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+18022D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-BC-59   (hex)		Shenzhen DAPU Microelectronics Co., Ltd
+D8BC59     (base 16)		Shenzhen DAPU Microelectronics Co., Ltd
+				Room B 503, No.2 Building, Tian’an Digital New Town, Huangge Middle Road, Longgang District
+				Shenzhen  Guangdong  518100
+				CN
+
+08-97-98   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+089798     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+24-6F-28   (hex)		Espressif Inc.
+246F28     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+8C-79-F5   (hex)		Samsung Electronics Co.,Ltd
+8C79F5     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+48-F8-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48F8DB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-12-2A   (hex)		VTech Telecommunications Ltd.
+00122A     (base 16)		VTech Telecommunications Ltd.
+				23/F, Tai Ping Industrial Centre, Block 1
+				 NA    00000
+				HK
+
+B0-51-8E   (hex)		Holl technology CO.Ltd.
+B0518E     (base 16)		Holl technology CO.Ltd.
+				F2,Bld 27,Anle Industrial Park,Nantou Guankou No.2 Road
+				Shenzhen  Guangdong  518052
+				CN
+
+28-52-E0   (hex)		Layon international Electronic & Telecom Co.,Ltd
+2852E0     (base 16)		Layon international Electronic & Telecom Co.,Ltd
+				4rd Floor, Building 15, Juda Industrial Zone, ShiBei Industrial Road, HuiJiang , Da Shi Street, PanYu District,Guangzhou,China
+				guangzhou  guangdong  511430
+				CN
+
+58-CB-52   (hex)		Google, Inc.
+58CB52     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+7C-61-66   (hex)		Amazon Technologies Inc.
+7C6166     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+98-9B-CB   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+989BCB     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+94-F7-AD   (hex)		Juniper Networks
+94F7AD     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+60-63-F9   (hex)		Ciholas, Inc.
+6063F9     (base 16)		Ciholas, Inc.
+				3700 Bell Rd
+				Newburgh  IN  47630-7907
+				US
+
+AC-8F-F8   (hex)		Nokia
+AC8FF8     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+60-03-A6   (hex)		Inteno Broadband Technology AB
+6003A6     (base 16)		Inteno Broadband Technology AB
+				Stensätravägen 13
+				Skärholmen  SE  127 39 
+				SE
+
+7C-52-59   (hex)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
+7C5259     (base 16)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
+				No. 259, Jiuzhou Road
+				Mianyang City  Sichuan Province  621000
+				CN
+
+44-B2-95   (hex)		Sichuan AI-Link Technology Co., Ltd.
+44B295     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+94-24-E1   (hex)		Alcatel-Lucent Enterprise
+9424E1     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Rd
+				Calabasas  CA  91301
+				US
+
+F8-CA-59   (hex)		NetComm Wireless
+F8CA59     (base 16)		NetComm Wireless
+				LEVEL 5, 18-20 ORION RD. LANE COVE
+				LANE COVE WEST  NSW  2066
+				AU
+
+88-B2-91   (hex)		Apple, Inc.
+88B291     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-2A-D0   (hex)		Apple, Inc.
+C42AD0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-D2-81   (hex)		Apple, Inc.
+CCD281     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-0D-B0   (hex)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+200DB0     (base 16)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+				Room 607-610, Block B, TAOJINDI Electronic Business Incubation Base
+				Tenglong Road, Longhua District,   Shenzhen Guangdong  518000
+				CN
+
+D8-1E-DD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+D81EDD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+D4-3F-CB   (hex)		ARRIS Group, Inc.
+D43FCB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+5C-76-95   (hex)		Technicolor CH USA Inc.
+5C7695     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+F8-4D-33   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+F84D33     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+C0-8A-CD   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+C08ACD     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+AC-F6-F7   (hex)		LG Electronics (Mobile Communications)
+ACF6F7     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+48-E6-C0   (hex)		SIMCom Wireless Solutions Co.,Ltd.
+48E6C0     (base 16)		SIMCom Wireless Solutions Co.,Ltd.
+				Building B,SIM Technology Building,No.633,Jinzhong Road
+				Shanghai    200335
+				CN
+
+38-3C-9C   (hex)		Fujian Newland Payment Technology Co.,Ltd.
+383C9C     (base 16)		Fujian Newland Payment Technology Co.,Ltd.
+				No. B602,Building #1,Haixia Jingmao Plaza,Fuzhou Bonded Area
+				Fuzhou  Fujian  350015
+				CN
+
+C0-2E-25   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C02E25     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+10-77-17   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+107717     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+A8-6D-5F   (hex)		Raisecom Technology CO., LTD
+A86D5F     (base 16)		Raisecom Technology CO., LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+58-EC-ED   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+58ECED     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-50-79   (hex)		Private
+005079     (base 16)		Private
+
+10-0C-6B   (hex)		NETGEAR
+100C6B     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+C4-F0-EC   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+C4F0EC     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E8-0F-C8   (hex)		Universal Electronics, Inc.
+E80FC8     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+E4-5D-37   (hex)		Juniper Networks
+E45D37     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-EE-AB   (hex)		Cisco Systems, Inc
+00EEAB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+54-A7-03   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+54A703     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+90-7A-58   (hex)		Zegna-Daidong Limited
+907A58     (base 16)		Zegna-Daidong Limited
+				 Rooms 14-17, 18/F, Nan Fung Commercial, Centre 19 Lam Lok Street, Kowloon Bay
+				Hong Kong    999077
+				HK
+
+E0-09-BF   (hex)		SHENZHEN TONG BO WEI TECHNOLOGY Co.,LTD
+E009BF     (base 16)		SHENZHEN TONG BO WEI TECHNOLOGY Co.,LTD
+				5th floor building 4 pengtengda industrial，langkou community，dalang street longhua newly developed area
+				Shenzhen  GuangDong  518000
+				CN
+
+00-13-1E   (hex)		peiker acustic GmbH
+00131E     (base 16)		peiker acustic GmbH
+				Max-Planck-Strasse 28-32
+				Friedrichsdorf    61381
+				DE
+
+84-69-91   (hex)		Nokia
+846991     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-1B-F7   (hex)		Lund IP Products AB
+001BF7     (base 16)		Lund IP Products AB
+				Dalbyv. 1
+				Lund  Skåne  224 60
+				SE
+
+78-36-07   (hex)		Cermate Technologies Inc.
+783607     (base 16)		Cermate Technologies Inc.
+				7F-1, No 168 Lien-Chen Rd.
+				Chung-Ho Dist  New Taipei City  
+				TW
+
+B0-00-73   (hex)		Wistron Neweb Corporation
+B00073     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+D8-8D-C8   (hex)		Atil Technology Co., LTD
+D88DC8     (base 16)		Atil Technology Co., LTD
+				Rm. 3, 21F., No.93, Sec. 2, Roosevelt Rd.,
+				Da’an Dist., Taipei City    106
+				TW
+
+A8-E2-C1   (hex)		Texas Instruments
+A8E2C1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+90-9A-77   (hex)		Texas Instruments
+909A77     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+04-EE-03   (hex)		Texas Instruments
+04EE03     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+4C-24-98   (hex)		Texas Instruments
+4C2498     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+7C-D9-5C   (hex)		Google, Inc.
+7CD95C     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+C8-AA-CC   (hex)		Private
+C8AACC     (base 16)		Private
+
+00-21-67   (hex)		HWA JIN T&I Corp.
+002167     (base 16)		HWA JIN T&I Corp.
+				5F., SEHWA Bldg 164-24, Poi-dong, Gangnam-gu, Seoul, Korea
+				Gangnam-gu  Seoul  135-960
+				KR
+
+00-0B-86   (hex)		Aruba, a Hewlett Packard Enterprise Company
+000B86     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+DC-31-D1   (hex)		vivo Mobile Communication Co., Ltd.
+DC31D1     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+C8-F7-50   (hex)		Dell Inc.
+C8F750     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+D4-92-34   (hex)		NEC Corporation
+D49234     (base 16)		NEC Corporation
+				7-1 Shiba 5-chome
+				Minato-Ku  Tokyo  108-8001
+				JP
+
+00-07-CB   (hex)		FREEBOX SAS
+0007CB     (base 16)		FREEBOX SAS
+				8 rue de la Ville l'Eveque
+				Paris    75008
+				FR
+
+14-9F-B6   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+149FB6     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+				#126,BBK Road,Wusha,Chang'An
+				Dong Guan   Guang Dong  523860
+				CN
+
+00-11-5A   (hex)		Ivoclar Vivadent AG
+00115A     (base 16)		Ivoclar Vivadent AG
+				Bendererstrasse 2
+				Schaan    9494
+				LI
+
+4C-AE-A3   (hex)		Hewlett Packard Enterprise
+4CAEA3     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+1C-2E-1B   (hex)		Suzhou Tremenet Communication Technology Co., Ltd.
+1C2E1B     (base 16)		Suzhou Tremenet Communication Technology Co., Ltd.
+				Room 413, Nangong Building, 399 Linquan Street, SIP
+				Suzhou  Jiangsu  215123
+				CN
+
+1C-24-EB   (hex)		Burlywood
+1C24EB     (base 16)		Burlywood
+				1501 S Sunset Street
+				Longmont  CO  80501
+				US
+
+00-10-13   (hex)		Kontron America, Inc.
+001013     (base 16)		Kontron America, Inc.
+				14118 Stowe Drive
+				Poway,  CA  9206
+				US
+
+2C-2B-F9   (hex)		LG Innotek
+2C2BF9     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+D8-C7-C8   (hex)		Aruba, a Hewlett Packard Enterprise Company
+D8C7C8     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+70-3A-0E   (hex)		Aruba, a Hewlett Packard Enterprise Company
+703A0E     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+20-4C-03   (hex)		Aruba, a Hewlett Packard Enterprise Company
+204C03     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+58-C6-F0   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+58C6F0     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+84-A0-6E   (hex)		Sagemcom Broadband SAS
+84A06E     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+A4-3E-A0   (hex)		iComm HK LIMITED
+A43EA0     (base 16)		iComm HK LIMITED
+				Room 702 Kowloon Building 555 Nathan Road Kowloon HongKong
+				Kowloon    NA
+				HK
+
+64-C2-DE   (hex)		LG Electronics (Mobile Communications)
+64C2DE     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+8C-44-4F   (hex)		HUMAX Co., Ltd.
+8C444F     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+00-67-62   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+006762     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+2C-C4-07   (hex)		machineQ
+2CC407     (base 16)		machineQ
+				1900 market st
+				philadelphia  PA  19103
+				US
+
+B4-ED-19   (hex)		Pie Digital, Inc.
+B4ED19     (base 16)		Pie Digital, Inc.
+				575 Market st., 8th floor
+				San Francisco  CA  94105-2823
+				US
+
+40-DF-02   (hex)		LINE BIZ Plus
+40DF02     (base 16)		LINE BIZ Plus
+				Alphadom Tower IV (6F), Bundangnaegok-ro 117, Bundang-gu
+				Seongnam  Gyeonggi  13529
+				KR
+
+CC-E1-94   (hex)		Juniper Networks
+CCE194     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+14-4E-2A   (hex)		Ciena Corporation
+144E2A     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+84-13-9F   (hex)		zte corporation
+84139F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F0-51-EA   (hex)		Fitbit, Inc.
+F051EA     (base 16)		Fitbit, Inc.
+				199 Fremont Street, 14th Fl
+				San Francisco  CA  94105
+				US
+
+50-33-F0   (hex)		YICHEN (SHENZHEN) TECHNOLOGY CO.LTD
+5033F0     (base 16)		YICHEN (SHENZHEN) TECHNOLOGY CO.LTD
+				23F, Building C1, Nanshan iPark, No. 1001 Xueyuan Road, Nanshan District, Shenzhen City, Guangdong, China
+				shenzhen    518044
+				CN
+
+FC-2B-B2   (hex)		Actiontec Electronics, Inc
+FC2BB2     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+E0-9F-2A   (hex)		Iton Technology Corp. 
+E09F2A     (base 16)		Iton Technology Corp. 
+				Room 1302, Block A, Building 4，Huangge Road, Longgang District
+				Shenzhen   Guangdong   518116
+				CN
+
+4C-E1-9E   (hex)		TECNO MOBILE LIMITED
+4CE19E     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+AC-5A-EE   (hex)		China Mobile Group Device Co.,Ltd.
+AC5AEE     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+70-BC-10   (hex)		Microsoft Corporation
+70BC10     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+88-4A-18   (hex)		Opulinks
+884A18     (base 16)		Opulinks
+				F 28, No.328, Huashan Rd
+				Shanghai    200040
+				CN
+
+9C-69-B4   (hex)		IEEE Registration Authority
+9C69B4     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+50-00-84   (hex)		Siemens Canada
+500084     (base 16)		Siemens Canada
+				300 Applewood Crescent
+				Concord  Ontario  L4K 5C7
+				CA
+
+44-B4-33   (hex)		tide.co.,ltd
+44B433     (base 16)		tide.co.,ltd
+				9F Kapeul GreatValley A-dong, Digitalro 9-ghil 32, Geumcheon-gu
+				seoul  seoul  ASIKRKS006
+				KR
+
+D8-A6-FD   (hex)		Ghost Locomotion
+D8A6FD     (base 16)		Ghost Locomotion
+				800 California St.  Suite 200
+				Mountain View  CA  94041
+				US
+
+DC-21-B9   (hex)		Sentec Co.Ltd
+DC21B9     (base 16)		Sentec Co.Ltd
+				10, Baekseokgongdan 1-ro, Seobuk-gu
+				 Cheonan-si  Chungcheongnam-do  31094
+				KR
+
+6C-DF-FB   (hex)		IEEE Registration Authority
+6CDFFB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+24-7D-4D   (hex)		Texas Instruments
+247D4D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+88-50-F6   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+8850F6     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan Distric
+				Shenzhen  Guangdong  518055
+				CN
+
+E4-98-BB   (hex)		Phyplus Microelectronics Limited
+E498BB     (base 16)		Phyplus Microelectronics Limited
+				304 Building 1 No.608 Sheng Xia Road
+				Shanghai    200000
+				CN
+
+60-A1-1E   (hex)		Wuhan Maxsine Electric Co.,Ltd.
+60A11E     (base 16)		Wuhan Maxsine Electric Co.,Ltd.
+				Building A6, Hangyu Building, No 7, Wuhan University Science Park Road, East Lake Development District,Wuhan,China.
+				Wuhan  Hubei  430000
+				CN
+
+C4-5B-F7   (hex)		ants
+C45BF7     (base 16)		ants
+				1164-21,Haeun-daero, Haeundae-gu,
+				Busan    48069
+				KR
+
+8C-DF-9D   (hex)		NEC Corporation
+8CDF9D     (base 16)		NEC Corporation
+				7-1, Shiba 5-chome,
+				Tokyo  Tokyo  108-8001
+				JP
+
+5C-41-5A   (hex)		Amazon.com, LLC
+5C415A     (base 16)		Amazon.com, LLC
+				1200 12th Ave. South, Suite 1200
+				Seattle    98144
+				US
+
+70-5E-55   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
+705E55     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
+				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
+				Chongqing  China  401120
+				CN
+
+B0-D5-68   (hex)		Shenzhen Cultraview Digital Technology Co., Ltd
+B0D568     (base 16)		Shenzhen Cultraview Digital Technology Co., Ltd
+				F6,M6,Maqueling, High-tech park, Nanshan district
+				Shenzhen  Guangdong  518057
+				CN
+
+F0-0E-BF   (hex)		ZettaHash Inc.
+F00EBF     (base 16)		ZettaHash Inc.
+				6F Chiyoda Ogawamachi Crosta, 1-11, Kanda Ogawamachi
+				Chiyoda-ku  Tokyo  101-0052
+				JP
+
+70-35-09   (hex)		Cisco Systems, Inc
+703509     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-1A-FA   (hex)		New H3C Technologies Co., Ltd
+441AFA     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+04-07-2E   (hex)		VTech Electronics Ltd.
+04072E     (base 16)		VTech Electronics Ltd.
+				23rd Floor, Block 1, Tai Ping Industrial Centre, 57 Ting Kok Road
+				Tai Po, N.T.    NA
+				HK
+
+78-0E-D1   (hex)		TRUMPF Werkzeugmaschinen GmbH+Co.KG
+780ED1     (base 16)		TRUMPF Werkzeugmaschinen GmbH+Co.KG
+				Johann-Maus-Straße 2
+				Ditzingen    71254
+				DE
+
+44-EC-CE   (hex)		Juniper Networks
+44ECCE     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+F8-2F-08   (hex)		Molex CMS
+F82F08     (base 16)		Molex CMS
+				2222 Wellington Court
+				Lisle  IL  60532
+				US
+
+44-1C-12   (hex)		Technicolor CH USA Inc.
+441C12     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+44-28-A3   (hex)		Jiangsu fulian  Communication Technology Co., Ltd.
+4428A3     (base 16)		Jiangsu fulian  Communication Technology Co., Ltd.
+				The south of lanling road, yongan new district
+				Danyang   Jiangsu  212300
+				CN
+
+10-C5-95   (hex)		Lenovo
+10C595     (base 16)		Lenovo
+				1009 Think Place
+				Morrisvilee  NC  27560
+				US
+
+20-32-33   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+203233     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+68-29-DC   (hex)		Ficosa Electronics S.L.U.
+6829DC     (base 16)		Ficosa Electronics S.L.U.
+				Pol.Ind Can Mitjans s/n Viladecavalls Barcelona
+				Viladecavalls  Barcelona  ES08232
+				ES
+
+94-54-DF   (hex)		YST CORP.
+9454DF     (base 16)		YST CORP.
+				A-1407, 767, Sinsu-ro, Suji-gu,
+				Yongin-si  Gyeonggi-do  16827
+				KR
+
+7C-BC-84   (hex)		IEEE Registration Authority
+7CBC84     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F8-0D-F1   (hex)		Sontex SA
+F80DF1     (base 16)		Sontex SA
+				rue de la gare
+				sonceboz  Bern  2605
+				CH
+
+A4-94-26   (hex)		Elgama-Elektronika Ltd.
+A49426     (base 16)		Elgama-Elektronika Ltd.
+				Visoriu str. 2
+				Vilnius    LT-08300
+				LT
+
+E4-F1-4C   (hex)		Private
+E4F14C     (base 16)		Private
+
+A8-B4-56   (hex)		Cisco Systems, Inc
+A8B456     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-A9-F0   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+2CA9F0     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+54-9B-72   (hex)		Ericsson AB
+549B72     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+A0-47-D7   (hex)		Best IT World (India) Pvt Ltd
+A047D7     (base 16)		Best IT World (India) Pvt Ltd
+				87, Mistry Complex,, Midc Cross Road A, Andheri-East
+				Mumbai  Maharashtra  400093
+				IN
+
+68-99-CD   (hex)		Cisco Systems, Inc
+6899CD     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+10-40-F3   (hex)		Apple, Inc.
+1040F3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-6B-14   (hex)		Apple, Inc.
+586B14     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-B8-63   (hex)		Apple, Inc.
+BCB863     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-1C-F6   (hex)		Alien Green LLC
+2C1CF6     (base 16)		Alien Green LLC
+				A. Kazbegi Ave., No24g, apt 227
+				Tbilisi  Tbilisi  0160
+				GE
+
+6C-2B-59   (hex)		Dell Inc.
+6C2B59     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+44-E6-6E   (hex)		Apple, Inc.
+44E66E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-E8-62   (hex)		Apple, Inc.
+C0E862     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-06-16   (hex)		Apple, Inc.
+F40616     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-FE-5D   (hex)		IEEE Registration Authority
+0CFE5D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+3C-8D-20   (hex)		Google, Inc.
+3C8D20     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+60-1D-91   (hex)		Motorola Mobility LLC, a Lenovo Company
+601D91     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+D4-C9-4B   (hex)		Motorola Mobility LLC, a Lenovo Company
+D4C94B     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+08-35-1B   (hex)		Shenzhen Jialihua Electronic Technology Co., Ltd
+08351B     (base 16)		Shenzhen Jialihua Electronic Technology Co., Ltd
+				Building 26,Xin'e Industrial Area,E'gongling Village,Pinghu Town,Longgang District
+				Shenzhen  Guangdong  518111
+				CN
+
+AC-15-85   (hex)		silergy corp
+AC1585     (base 16)		silergy corp
+				Oleander  Way，802 West  Bay  Road，P.O. BOX    32052
+				Grand   Cayman  KYI-1208，Cayman Islands    32052
+				US
+
+AC-50-93   (hex)		Magna Electronics Europe GmbH & Co. OHG
+AC5093     (base 16)		Magna Electronics Europe GmbH & Co. OHG
+				Kurfürst-Eppstein-Ring 9
+				Sailauf  Bavaria  63877
+				DE
+
+70-BB-E9   (hex)		Xiaomi Communications Co Ltd
+70BBE9     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+50-A0-A4   (hex)		Nokia
+50A0A4     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-D0-2D   (hex)		Resideo
+00D02D     (base 16)		Resideo
+				2 Corporate Center Dr.
+				Melville  NY  11747
+				US
+
+80-69-40   (hex)		LEXAR CO.,LIMITED
+806940     (base 16)		LEXAR CO.,LIMITED
+				10TH FLOOR,CHINA AEROSPACE CENTRE,143 HOI BUN ROAD,KWUN TONG,KOWLOON, HONG KONG
+				HONG KONG    999077
+				HK
+
+64-F8-1C   (hex)		Huawei Technologies Co., Ltd.
+64F81C     (base 16)		Huawei Technologies Co., Ltd.
+				 Bantian, Longgang District, Shenzhen, 518129, P.R.C
+				Shenzhen  GUANGDONG Province  518000
+				CN
+
+10-98-C3   (hex)		Murata Manufacturing Co., Ltd.
+1098C3     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+9C-C8-FC   (hex)		ARRIS Group, Inc.
+9CC8FC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+B0-7E-11   (hex)		Texas Instruments
+B07E11     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+10-C7-53   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+10C753     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+F4-95-1B   (hex)		Hefei Radio Communication Technology Co., Ltd 
+F4951B     (base 16)		Hefei Radio Communication Technology Co., Ltd 
+				 No.108, YinXing Road, High-tech Development Zone 
+				Hefei  Anhui  230088
+				CN
+
+6C-38-45   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+6C3845     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+2C-61-04   (hex)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
+2C6104     (base 16)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
+				ORIENTAL CYBERPORT, HIGHTECH 6 ROAD
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+BC-93-25   (hex)		Ningbo Joyson Preh Car Connect Co.,Ltd.  
+BC9325     (base 16)		Ningbo Joyson Preh Car Connect Co.,Ltd.  
+				No. 99, Qingyi Road
+				Ningbo   Zhejiang  315040
+				CN
+
+D0-B6-0A   (hex)		Xingluo Technology Company  Limited
+D0B60A     (base 16)		Xingluo Technology Company  Limited
+				28F, Building A, Aerospace Science And Technology Square, Nanshan District
+				ShenZhen  GuangDong   518067
+				CN
+
+04-92-26   (hex)		ASUSTek COMPUTER INC.
+049226     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+E8-AD-A6   (hex)		Sagemcom Broadband SAS
+E8ADA6     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+0C-1C-19   (hex)		LONGCONN ELECTRONICS(SHENZHEN) CO.,LTD
+0C1C19     (base 16)		LONGCONN ELECTRONICS(SHENZHEN) CO.,LTD
+				Building B, No. 42 Xingye Road, Phoenix First Industrial Zone, Fuyong, Baoan District
+				Shenzhen  Guangdong  518103
+				CN
+
+90-E7-10   (hex)		New H3C Technologies Co., Ltd
+90E710     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+30-29-52   (hex)		Hillstone Networks Inc
+302952     (base 16)		Hillstone Networks Inc
+				North Olympic Science & Technology Park Building #20， Floor #5, SouthBaosheng
+				Beijing    100192
+				CN
+
+E0-13-B5   (hex)		vivo Mobile Communication Co., Ltd.
+E013B5     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+E0-79-5E   (hex)		Wuxi Xiaohu Technology Co.,Ltd.
+E0795E     (base 16)		Wuxi Xiaohu Technology Co.,Ltd.
+				FL.2, Building A10, 777 West Jianzhu Road, Binhu District
+				Wuxi  Jiangsu Province  214000
+				CN
+
+00-B1-E3   (hex)		Cisco Systems, Inc
+00B1E3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-11-94   (hex)		Lenovo
+A41194     (base 16)		Lenovo
+				1009 Think Place
+				Morrisvilee  NC  27560
+				US
+
+00-CB-00   (hex)		Private
+00CB00     (base 16)		Private
+
+DC-F4-01   (hex)		Dell Inc.
+DCF401     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+0C-41-01   (hex)		Ruichi Auto Technology (Guangzhou) Co., Ltd.
+0C4101     (base 16)		Ruichi Auto Technology (Guangzhou) Co., Ltd.
+				No. 171 Haibin Road, Nansha District, Guangzhou, China
+				Guangzhou  Guangdong Province  511400
+				CN
+
+00-B7-71   (hex)		Cisco Systems, Inc
+00B771     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-B2-FB   (hex)		Apple, Inc.
+E4B2FB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-CA-0C   (hex)		WITHUS PLANET
+2CCA0C     (base 16)		WITHUS PLANET
+				1604, O'BIZTOWER, Pyeong Chon, 126, Beolmal-ro, Dongan-gu
+				Anyang-si  Gyeonggi-do  14057
+				KR
+
+84-32-6F   (hex)		GUANGZHOU AVA ELECTRONICS TECHNOLOGY CO.,LTD 
+84326F     (base 16)		GUANGZHOU AVA ELECTRONICS TECHNOLOGY CO.,LTD 
+				Science town luogang district guangzhou city branch bead road 232 profit people park 301, building 2
+				guangzhou   guangdong  510000
+				CN
+
+C8-9C-13   (hex)		Inspiremobile
+C89C13     (base 16)		Inspiremobile
+				Rm1412, Daeryung Techno-Town, 15th, 401 , Simin-daero, Dongan-gu
+				Anyang-si  Gyeonggi-do  14057
+				KR
+
+8C-85-E6   (hex)		Cleondris GmbH
+8C85E6     (base 16)		Cleondris GmbH
+				Zuercherstrasse 42
+				Uitikon  ZH  8142
+				CH
+
+80-7D-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+807D14     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-28-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20283E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-FC-77   (hex)		Mega Well Limited
+A4FC77     (base 16)		Mega Well Limited
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+4C-56-9D   (hex)		Apple, Inc.
+4C569D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-53-9C   (hex)		Apple, Inc.
+38539C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-26-19   (hex)		Apple, Inc.
+402619     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-E8-5C   (hex)		Apple, Inc.
+6CE85C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-91-62   (hex)		Microchip Technology Inc.
+049162     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+F8-38-80   (hex)		Apple, Inc.
+F83880     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-79-D7   (hex)		Sagemcom Broadband SAS
+2C79D7     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-B4-F5   (hex)		DongGuan Siyoto Electronics Co., Ltd       
+00B4F5     (base 16)		DongGuan Siyoto Electronics Co., Ltd       
+				Hecheng Industrial District, QiaoTou Town
+				DongGuan City  Guangdong  523520
+				CN
+
+BC-3F-4E   (hex)		Teleepoch Ltd
+BC3F4E     (base 16)		Teleepoch Ltd
+				No.13 Langshan Rd,HiTech Park,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+18-38-AE   (hex)		CONSPIN SOLUTION
+1838AE     (base 16)		CONSPIN SOLUTION
+				2F, Geonwoong Bldg. 109, Gwanak-ro, Gwanak-gu
+				Seoul    08833
+				KR
+
+04-CF-8C   (hex)		XIAOMI Electronics,CO.,LTD
+04CF8C     (base 16)		XIAOMI Electronics,CO.,LTD
+				Xiaomi Building, No.68 Qinghe Middle Street
+				Haidian District  Beijing  100085
+				CN
+
+0C-75-12   (hex)		Shenzhen Kunlun TongTai Technology  Co.,Ltd.
+0C7512     (base 16)		Shenzhen Kunlun TongTai Technology  Co.,Ltd.
+				Room 2401,B,Building 3,Tianan Yungu Industry Park,Gangtou community,bantian streets,Longgang District
+				Shenzhen  Guangdong  518129
+				CN
+
+50-57-9C   (hex)		Seiko Epson Corporation
+50579C     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+54-27-8D   (hex)		NXP (China) Management Ltd.
+54278D     (base 16)		NXP (China) Management Ltd.
+				21F, BM InterContinental Business Center, 100 Yu Tong Road
+				Shanghai  Shanghai  200070
+				CN
+
+B0-BE-76   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+B0BE76     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+44-47-CC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+4447CC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+4C-D9-8F   (hex)		Dell Inc.
+4CD98F     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+B0-AE-25   (hex)		Varikorea
+B0AE25     (base 16)		Varikorea
+				#505 kolon digital tower aston, gasan, geumcheon
+				seoul    08502
+				KR
+
+4C-1B-86   (hex)		Arcadyan Corporation
+4C1B86     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+EC-C4-0D   (hex)		Nintendo Co.,Ltd
+ECC40D     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+44-00-49   (hex)		Amazon Technologies Inc.
+440049     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+E8-6A-64   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+E86A64     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+10-A2-4E   (hex)		GOLD3LINK ELECTRONICS CO., LTD
+10A24E     (base 16)		GOLD3LINK ELECTRONICS CO., LTD
+				No.90,Sec.1,Com Lin Rd,Taipei 114,Taiwan,R.O.C
+				Taipei  Taiwan  114
+				TW
+
+CC-C5-E5   (hex)		Dell Inc.
+CCC5E5     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+6C-C3-74   (hex)		Texas Instruments
+6CC374     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+68-47-49   (hex)		Texas Instruments
+684749     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F8-D9-B8   (hex)		Open Mesh, Inc.
+F8D9B8     (base 16)		Open Mesh, Inc.
+				111 SW 5th Ave Ste1150
+				Portland  OR  97204
+				US
+
+7C-69-6B   (hex)		Atmosic Technologies
+7C696B     (base 16)		Atmosic Technologies
+				12930 Saratoga Ave, Suite B6
+				Saratoga  CA  95070
+				US
+
+5C-D2-0B   (hex)		Yytek Co., Ltd.
+5CD20B     (base 16)		Yytek Co., Ltd.
+				No.1 Bao Sheng South Road, Room 401, Ao Bei Technology Park, Ling Zhi Center
+				Beijing    100192
+				CN
+
+70-03-7E   (hex)		Technicolor CH USA Inc.
+70037E     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+D0-03-DF   (hex)		Samsung Electronics Co.,Ltd
+D003DF     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+C4-23-A2   (hex)		PT. Emsonic Indonesia
+C423A2     (base 16)		PT. Emsonic Indonesia
+				Jl.Timor Blok E5, MM2100 Industrial Town Jatiwangi Cikarang Barat
+				Bekasi  Jawa Barat  17530
+				ID
+
+B4-CB-57   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B4CB57     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+4C-12-65   (hex)		ARRIS Group, Inc.
+4C1265     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-50-0C   (hex)		e-Tek Labs, Inc.
+00500C     (base 16)		e-Tek Labs, Inc.
+				1057 EAST HENRIETTA RD.
+				ROCHESTER  NY  14623
+				US
+
+48-5F-99   (hex)		Cloud Network Technology (Samoa) Limited
+485F99     (base 16)		Cloud Network Technology (Samoa) Limited
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+88-34-FE   (hex)		Bosch Automotive Products (Suzhou) Co. Ltd
+8834FE     (base 16)		Bosch Automotive Products (Suzhou) Co. Ltd
+				No. 455 Xing Long Street,Suzhou Industrial Park,Suzhou P.R., 215021 China
+				Suzhou  Jiangsu  215021
+				CN
+
+88-F7-BF   (hex)		vivo Mobile Communication Co., Ltd.
+88F7BF     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+D8-7D-7F   (hex)		Sagemcom Broadband SAS
+D87D7F     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-05-1A   (hex)		3COM EUROPE LTD
+00051A     (base 16)		3COM EUROPE LTD
+				3COM CENTRE
+				vvvvv  UNITED  KINGDOM
+				GB
+
+08-00-4E   (hex)		3COM EUROPE LTD
+08004E     (base 16)		3COM EUROPE LTD
+				3COM CENTRE
+				vvvvv  UNITED  KINGDOM
+				GB
+
+00-30-1E   (hex)		3COM EUROPE LTD
+00301E     (base 16)		3COM EUROPE LTD
+				BOUNDARY WAY
+				vvvvv  UNITED  KINGDOM
+				GB
+
+00-50-04   (hex)		3COM
+005004     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-01-03   (hex)		3COM
+000103     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+58-B5-68   (hex)		SECURITAS DIRECT ESPAÑA, SAU
+58B568     (base 16)		SECURITAS DIRECT ESPAÑA, SAU
+				C/ Priégola, 2
+				Pozuelo de Alarcon  Madrid  28224
+				ES
+
+48-4A-E9   (hex)		Hewlett Packard Enterprise
+484AE9     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+84-6A-66   (hex)		Sumitomo Kizai  Co.,Ltd.
+846A66     (base 16)		Sumitomo Kizai  Co.,Ltd.
+				1-45-1higashiikebukuro
+				tosimaku  tokyo  170-0013
+				JP
+
+18-D7-17   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+18D717     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+80-B6-24   (hex)		IVS
+80B624     (base 16)		IVS
+				807-809 , Woorim E-biz center, 35, Gwangnaru-ro 6-gil
+				Seoul  Seongdong-gu  04799
+				KR
+
+DC-F5-05   (hex)		AzureWave Technology Inc.
+DCF505     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+CC-F0-FD   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+CCF0FD     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District, Hangzhou, Zhejiang
+				Hangzhou  Zhejiang  310000
+				CN
+
+84-89-EC   (hex)		IEEE Registration Authority
+8489EC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+88-10-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88108F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-63-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4631F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-9B-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A49B4F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-07-3A   (hex)		INVENTEL
+00073A     (base 16)		INVENTEL
+				35, rue Toumefort
+				000    0000
+				FR
+
+00-26-6C   (hex)		INVENTEC CORPORATION
+00266C     (base 16)		INVENTEC CORPORATION
+				Inventec Building, 66 Hou-Kang Street Shih-Lin District,
+				Taipei    111
+				TW
+
+00-8C-FA   (hex)		INVENTEC CORPORATION
+008CFA     (base 16)		INVENTEC CORPORATION
+				No. 255, Jen-Ho Road Sec. 2, 33547,
+				Tachi  Taoyuan  33547
+				TW
+
+5C-FB-7C   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+5CFB7C     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+FC-03-9F   (hex)		Samsung Electronics Co.,Ltd
+FC039F     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+02-C0-8C   (hex)		3COM
+02C08C     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-57-C1   (hex)		LG Electronics (Mobile Communications)
+0057C1     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+7C-24-0C   (hex)		Telechips, Inc.
+7C240C     (base 16)		Telechips, Inc.
+				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
+				Seoul  Seoul  05510
+				KR
+
+00-20-3D   (hex)		Honeywell Environmental & Combustion Controls
+00203D     (base 16)		Honeywell Environmental & Combustion Controls
+				1985 Douglas Drive
+				Golden Valley  MN  55422
+				US
+
+A4-D9-90   (hex)		Samsung Electronics Co.,Ltd
+A4D990     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-60-87   (hex)		KANSAI ELECTRIC CO., LTD.
+006087     (base 16)		KANSAI ELECTRIC CO., LTD.
+				6-14-9 MIDORII, ASAMINAMI-KU
+				HIROSHIMA 731-01    
+				JO
+
+DC-F7-19   (hex)		Cisco Systems, Inc
+DCF719     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-95-0C   (hex)		China Mobile IOT Company Limited
+A0950C     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+D4-74-1B   (hex)		Beijing HuaDa ZhiBao Electronic System Co.,Ltd.
+D4741B     (base 16)		Beijing HuaDa ZhiBao Electronic System Co.,Ltd.
+				No.1 Gaojiayuan,Chaoyang District,Beijing,China
+				Beijing  Beijing  100015
+				CN
+
+00-1B-C0   (hex)		Juniper Networks
+001BC0     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+2C-15-E1   (hex)		Phicomm (Shanghai) Co., Ltd.
+2C15E1     (base 16)		Phicomm (Shanghai) Co., Ltd.
+				3666 SiXian Rd.,Songjiang District
+				Shanghai  Shanghai  201616
+				CN
+
+30-D1-6B   (hex)		Liteon Technology Corporation
+30D16B     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+98-AE-71   (hex)		VVDN Technologies Pvt Ltd
+98AE71     (base 16)		VVDN Technologies Pvt Ltd
+				B-22, Sec-34 , Info-city -I
+				Gurugram  Haryana  122001
+				IN
+
+A4-56-CC   (hex)		Technicolor CH USA Inc.
+A456CC     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+AC-6E-1A   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+AC6E1A     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
+				Shenzhen  Guangdong  518067
+				CN
+
+00-80-EB   (hex)		COMPCONTROL B.V.
+0080EB     (base 16)		COMPCONTROL B.V.
+				STRATUMSED K31
+				  THE  
+				NL
+
+00-02-EB   (hex)		Pico Communications
+0002EB     (base 16)		Pico Communications
+				20085 Stevens Creek Blvd.
+				Cupertino  CA  95014
+				US
+
+34-2E-B6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+342EB6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-92-32   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC9232     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-0F-B0   (hex)		Compal Electronics INC.
+000FB0     (base 16)		Compal Electronics INC.
+				No.8 , Nandong Road , PingZhen Dist.
+				Taoyuan   Taiwan   32455
+				TW
+
+00-02-3F   (hex)		Compal Electronics INC.
+00023F     (base 16)		Compal Electronics INC.
+				No.8 , Nandong Road , PingZhen Dist.
+				Taoyuan   Taiwan   32455
+				TW
+
+68-A8-E1   (hex)		Wacom Co.,Ltd.
+68A8E1     (base 16)		Wacom Co.,Ltd.
+				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
+				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
+				JP
+
+30-D3-2D   (hex)		devolo AG
+30D32D     (base 16)		devolo AG
+				Charlottenburger Allee 67
+				Aachen  NRW  52068
+				DE
+
+BC-F2-AF   (hex)		devolo AG
+BCF2AF     (base 16)		devolo AG
+				Charlottenburger Allee 67
+				Aachen  NRW  52068
+				DE
+
+E0-AF-4F   (hex)		Deutsche Telekom AG
+E0AF4F     (base 16)		Deutsche Telekom AG
+				Friedrich-Ebert-Allee 140
+				Bonn    53113
+				DE
+
+B8-69-F4   (hex)		Routerboard.com
+B869F4     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+28-3A-4D   (hex)		Cloud Network Technology (Samoa) Limited
+283A4D     (base 16)		Cloud Network Technology (Samoa) Limited
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+B8-7C-6F   (hex)		NXP (China) Management Ltd.
+B87C6F     (base 16)		NXP (China) Management Ltd.
+				21F, BM InterContinental Business Center, 100 Yu Tong Road
+				Shanghai  Shanghai  200070
+				CN
+
+30-5D-A6   (hex)		ADVALY SYSTEM Inc.
+305DA6     (base 16)		ADVALY SYSTEM Inc.
+				7 KITA2 NISHI2 CYUO-KU
+				SAPPORO  HOKKAIDO  060-0002
+				JP
+
+BC-30-D9   (hex)		Arcadyan Corporation
+BC30D9     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+04-79-B7   (hex)		Texas Instruments
+0479B7     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+C0-D0-FF   (hex)		China Mobile IOT Company Limited
+C0D0FF     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+88-DF-9E   (hex)		New H3C Technologies Co., Ltd
+88DF9E     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+2C-7C-E4   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
+2C7CE4     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
+				HUST Industry Park, East-Lake Development Zone
+				Wuhan  Hubei  430223
+				CN
+
+58-03-FB   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+5803FB     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+14-48-02   (hex)		THE YEOLRIM Co.,Ltd.
+144802     (base 16)		THE YEOLRIM Co.,Ltd.
+				D-311,H Business Park,26,Beobwon-ro 9-gil Songpa-gu,Seoul Korea
+				Seoul    05836
+				KR
+
+40-31-3C   (hex)		XIAOMI Electronics,CO.,LTD
+40313C     (base 16)		XIAOMI Electronics,CO.,LTD
+				Xiaomi Building, No.68 Qinghe Middle Street
+				Haidian District  Beijing  100085
+				CN
+
+FC-45-96   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+FC4596     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				 NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZON
+				KUNSHAN  SUZHOU  215300
+				CN
+
+A0-E5-34   (hex)		Stratec Biomedical AG
+A0E534     (base 16)		Stratec Biomedical AG
+				Gewerbestrasse 37
+				Birkenfeld  Baden Wuertemberg  75217
+				DE
+
+44-4B-5D   (hex)		GE Healthcare
+444B5D     (base 16)		GE Healthcare
+				Kuortaneenkatu 2
+				Helsinki    00510
+				FI
+
+00-15-55   (hex)		DFM GmbH
+001555     (base 16)		DFM GmbH
+				Lahrer Strasse 6
+				Lahr  Baden-Württemberg  77933
+				US
+
+1C-75-08   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+1C7508     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU   215300 
+				CN
+
+00-1B-38   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+001B38     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD AVENUE
+				KUNSHAN CITY  SUZHOU PROVINCE  215300
+				CN
+
+00-23-5A   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+00235A     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO 25, The 3rd street,
+				KuanShan  SUZHOU  215300
+				CN
+
+24-D7-6B   (hex)		Syntronic AB
+24D76B     (base 16)		Syntronic AB
+				Utmarksvägen 33c
+				Gävle    80291
+				SE
+
+C4-FE-E2   (hex)		AMICCOM Electronics Corporation
+C4FEE2     (base 16)		AMICCOM Electronics Corporation
+				10F, No.18, Taiyuan St., Zhubei City
+				Hsinchu Country  Taiwan  30265
+				TW
+
+78-0C-F0   (hex)		Cisco Systems, Inc
+780CF0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+0C-8C-24   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+0C8C24     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+8C-6D-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8C6D77     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-C5-7A   (hex)		Ufispace Co., LTD.
+E8C57A     (base 16)		Ufispace Co., LTD.
+				9F., No. 81 Jhongcheng Rd., Tucheng Dist.,
+				New Taipei    23674
+				TW
+
+E0-12-83   (hex)		 Shenzhen Fanzhuo Communication Technology Co., Lt
+E01283     (base 16)		 Shenzhen Fanzhuo Communication Technology Co., Lt
+				 No.1003 Kesi Road, Hi-Tech Park, 
+				Shenzhen  Nanshan District  2602-2603
+				CN
+
+A0-CF-5B   (hex)		Cisco Systems, Inc
+A0CF5B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-21   (hex)		MICRO-STAR INT'L CO., LTD.
+002421     (base 16)		MICRO-STAR INT'L CO., LTD.
+				No.69, Li-De St
+				Taipei Hsien    235
+				TW
+
+00-60-D1   (hex)		CASCADE COMMUNICATIONS
+0060D1     (base 16)		CASCADE COMMUNICATIONS
+				6 TECHNOLOGY PARK DRIVE
+				WESTFORD  MA  01886
+				US
+
+84-C9-C6   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+84C9C6     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+88-B6-6B   (hex)		easynetworks
+88B66B     (base 16)		easynetworks
+				 Rd kaituo 1# kaituohuiyuan B 1020, shangdi
+				Beijing    100084
+				CN
+
+24-F5-7E   (hex)		HWH CO., LTD.
+24F57E     (base 16)		HWH CO., LTD.
+				102-708, Digital Empire2, Sin-dong, Youngtong-gu
+				Suwon-si  Gyeonggi-do  443-734
+				KR
+
+8C-A0-48   (hex)		Beijing NeTopChip Technology Co.,LTD
+8CA048     (base 16)		Beijing NeTopChip Technology Co.,LTD
+				309,Intergration Building Olympic Center, No.1 An Ding Road,Chao Yang District,, 
+				Beijing    100029
+				CN
+
+24-D3-F2   (hex)		zte corporation
+24D3F2     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D4-69-A5   (hex)		Miura Systems Ltd.
+D469A5     (base 16)		Miura Systems Ltd.
+				Axis 40, Oxford Road, Stokenchurch
+				High Wycombe  Buckinghamshire  HP143SX
+				GB
+
+8C-81-26   (hex)		ARCOM
+8C8126     (base 16)		ARCOM
+				ZAC de la Loyère
+				FRAGNES LA LOYERE    71530
+				FR
+
+D4-7C-44   (hex)		IEEE Registration Authority
+D47C44     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-5E-4F   (hex)		FN-LINK TECHNOLOGY LIMITED
+805E4F     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+84-17-EF   (hex)		Technicolor CH USA Inc.
+8417EF     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+38-56-B5   (hex)		Peerbridge Health Inc
+3856B5     (base 16)		Peerbridge Health Inc
+				3 Columbus Circle 15th Fl
+				New York  NY  10019
+				US
+
+7C-96-D2   (hex)		Fihonest communication co.,Ltd
+7C96D2     (base 16)		Fihonest communication co.,Ltd
+				The Frist Building ,ShangKeng Industrial Zone,  Changping Town
+				Dongguan  Guangdong  523560
+				CN
+
+C0-42-D0   (hex)		Juniper Networks
+C042D0     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+D0-C5-D8   (hex)		LATECOERE
+D0C5D8     (base 16)		LATECOERE
+				135 Rue de Périole, BP25211
+				Toulouse Cedex 5  31 Haute-Garonne  31079
+				FR
+
+20-A6-0C   (hex)		Xiaomi Communications Co Ltd
+20A60C     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+48-8A-D2   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+488AD2     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+DC-E8-38   (hex)		CK Telecom (Shenzhen) Limited
+DCE838     (base 16)		CK Telecom (Shenzhen) Limited
+				Floor 9th, Building 4C,Software Industry Base, Xuefu Road, Hi-Tech Park, Nanshan Dist.
+				Shenzhen  Guangdong  518057
+				CN
+
+A8-D4-98   (hex)		Avira Operations GmbH & Co. KG
+A8D498     (base 16)		Avira Operations GmbH & Co. KG
+				Kaplaneiweg 1
+				Tettnang  Baden-Wuerttermberg  88069
+				DE
+
+50-59-67   (hex)		Intent Solutions Inc
+505967     (base 16)		Intent Solutions Inc
+				730 Peachtree St NE, Suite 550
+				ATLANTA  GA  30308
+				US
+
+00-06-80   (hex)		Card Access, Inc.
+000680     (base 16)		Card Access, Inc.
+				11778 S. Election Rd
+				Salt Lake City  UT  80420
+				US
+
+3C-57-6C   (hex)		Samsung Electronics Co.,Ltd
+3C576C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+84-17-66   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+841766     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Wei Fang  Shan Dong  
+				CN
+
+2C-4D-79   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+2C4D79     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				No.268 Dongfang Road
+				Weifang  Shandong  261000
+				CN
+
+00-0C-42   (hex)		Routerboard.com
+000C42     (base 16)		Routerboard.com
+				Pernavas 46
+				Riga    LV-1009
+				LV
+
+00-26-BD   (hex)		JTEC Card &amp; Communication Co., Ltd
+0026BD     (base 16)		JTEC Card &amp; Communication Co., Ltd
+				Dabo Bldg, 4F, 61-1, Gyesu-dong, Sosa-gu
+				Bucheon  Gyunggi-do  422-070
+				KR
+
+60-D0-2C   (hex)		Ruckus Wireless
+60D02C     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+14-57-9F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14579F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-43-26   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B44326     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-D2-94   (hex)		NETGEAR
+78D294     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+70-9F-A9   (hex)		TECNO MOBILE LIMITED
+709FA9     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+0C-01-DB   (hex)		Infinix mobility limited
+0C01DB     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+08-C5-E1   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+08C5E1     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+18-66-C7   (hex)		Shenzhen Libre Technology Co., Ltd
+1866C7     (base 16)		Shenzhen Libre Technology Co., Ltd
+				634, Tian Hui Building #B, You Song Lu, Long Hua District
+				Shenzhen    511700
+				CN
+
+5C-B3-F6   (hex)		Human, Incorporated
+5CB3F6     (base 16)		Human, Incorporated
+				3100 Airport Way S, 25-512
+				Seattle  WA  98134
+				US
+
+2C-48-35   (hex)		IEEE Registration Authority
+2C4835     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+48-2A-E3   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
+482AE3     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
+				168# First Avenue,Kunshan Integrated Free Trade Zone,Kunshan,Jiangsu,China
+				Kunshan  Jiangsu  215300
+				CN
+
+FC-A6-CD   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+FCA6CD     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+44-C8-74   (hex)		China Mobile Group Device Co.,Ltd.
+44C874     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+74-C1-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+74C14F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-EB-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B0EB57     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-69-DA   (hex)		China Mobile Group Device Co.,Ltd.
+1869DA     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+F8-5C-4D   (hex)		Nokia
+F85C4D     (base 16)		Nokia
+				1 Robbins Road
+				Westford  MA  01886-4113
+				US
+
+2C-58-4F   (hex)		ARRIS Group, Inc.
+2C584F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F0-4B-3A   (hex)		Juniper Networks
+F04B3A     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+54-BF-64   (hex)		Dell Inc.
+54BF64     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+A8-5B-6C   (hex)		Robert Bosch Gmbh, CM-CI2
+A85B6C     (base 16)		Robert Bosch Gmbh, CM-CI2
+				Renningen
+				Stuttgart    D-70465 
+				DE
+
+C8-B1-EE   (hex)		Qorvo
+C8B1EE     (base 16)		Qorvo
+				1 Changi Business Park Crescent, Avenue 1, #04-01
+				NA    486058
+				SG
+
+00-FC-BA   (hex)		Cisco Systems, Inc
+00FCBA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-CB-B4   (hex)		SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD
+00CBB4     (base 16)		SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD
+				4-5F,E1 Building,TCL International E City,No.1001 Zhongshanyuan Road,Nanshan District,Shenzhen
+				SHENZHEN  GUANGDONG  518052
+				CN
+
+4C-C0-0A   (hex)		vivo Mobile Communication Co., Ltd.
+4CC00A     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+9C-E8-2B   (hex)		vivo Mobile Communication Co., Ltd.
+9CE82B     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+70-79-B3   (hex)		Cisco Systems, Inc
+7079B3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D8-18-D3   (hex)		Juniper Networks
+D818D3     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+14-9B-2F   (hex)		JiangSu ZhongXie Intelligent Technology co., LTD
+149B2F     (base 16)		JiangSu ZhongXie Intelligent Technology co., LTD
+				Room 201,building 15, 16,FengJi set avenue (C08),YuHua district economic development zone ,NanJing city,JiangSu province,China,PRC.
+				NanJing   JiangSu   210000
+				CN
+
+38-35-FB   (hex)		Sagemcom Broadband SAS
+3835FB     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+48-DD-9D   (hex)		ITEL MOBILE LIMITED
+48DD9D     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+A0-75-EA   (hex)		BoxLock, Inc.
+A075EA     (base 16)		BoxLock, Inc.
+				931 Monroe Dr Ste A 102-405
+				Atlanta  GA  30308
+				US
+
+F0-4C-D5   (hex)		Maxlinear, Inc
+F04CD5     (base 16)		Maxlinear, Inc
+				5966 La Place Ct. Ste# 100
+				Carlsbad  CA  92008
+				US
+
+00-01-AE   (hex)		Trex Enterprises
+0001AE     (base 16)		Trex Enterprises
+				590 Lipoa Parkway
+				Kihei  HI  96753
+				US
+
+00-E0-09   (hex)		Stratus Technologies
+00E009     (base 16)		Stratus Technologies
+				5 Mill and Main Place, Suite 500
+				Maynard  MA  01754
+				US
+
+E4-EA-83   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+E4EA83     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+74-EC-42   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+74EC42     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+D4-FC-13   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D4FC13     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+80-7D-3A   (hex)		Espressif Inc.
+807D3A     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+EC-AF-97   (hex)		GIT
+ECAF97     (base 16)		GIT
+				05655, GIT Bldg., 87, Macheon-ro, Songpa-gu, Seoul, Korea
+				Songpa-gu  Seoul  05655
+				KR
+
+A0-B0-45   (hex)		Halong Mining
+A0B045     (base 16)		Halong Mining
+				13/F TCL Tower,  No.8 Tai Chung Road 
+				Tsuen Wan New Territories    Tsuen Wan New Territories
+				HK
+
+E0-BA-B4   (hex)		Arrcus, Inc
+E0BAB4     (base 16)		Arrcus, Inc
+				2077 Gateway Pl, Suite 250,
+				San Jose  CA  95110
+				US
+
+58-9B-0B   (hex)		Shineway Technologies, Inc.
+589B0B     (base 16)		Shineway Technologies, Inc.
+				Floor 5, Huanxing Building
+				Beijing    100191
+				CN
+
+D8-16-0A   (hex)		Nippon Electro-Sensory Devices
+D8160A     (base 16)		Nippon Electro-Sensory Devices
+				Itachibori 2-5-12
+				Nishi-ku  Osaka  550-0012
+				JP
+
+10-C0-7C   (hex)		Blu-ray Disc Association
+10C07C     (base 16)		Blu-ray Disc Association
+				4444 Riverside Drive #103
+				Burbank  California  91505
+				US
+
+40-A6-77   (hex)		Juniper Networks
+40A677     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+E4-B0-21   (hex)		Samsung Electronics Co.,Ltd
+E4B021     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-7F-57   (hex)		UNIC Memory Technology Co Ltd
+9C7F57     (base 16)		UNIC Memory Technology Co Ltd
+				15/F, Building B, Truth Plaza, No.7 Zhichun Road
+				Beijing  Haidian District  102208
+				CN
+
+B4-E0-1D   (hex)		CONCEPTION ELECTRONIQUE
+B4E01D     (base 16)		CONCEPTION ELECTRONIQUE
+				3 boulevard de l'europe
+				NEUFCHATEL EN BRAY    76270
+				FR
+
+1C-00-42   (hex)		NARI Technology Co., Ltd.
+1C0042     (base 16)		NARI Technology Co., Ltd.
+				NO.19 Chengxin Avenue, Nanjing
+				Nanjing    211106
+				CN
+
+44-34-A7   (hex)		ARRIS Group, Inc.
+4434A7     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+3C-E1-A1   (hex)		Universal Global Scientific Industrial Co., Ltd.
+3CE1A1     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
+				Nan-Tou  Taiwan  54261
+				TW
+
+F8-98-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F898EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-F9-87   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+58F987     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-F5-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A8F5AC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-BA-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+58BAD4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-1D-08   (hex)		99IOT Shenzhen co.,ltd
+701D08     (base 16)		99IOT Shenzhen co.,ltd
+				609C north block, Cangsong Building, Tairan Seven Road, Futian District
+				Shenzhen  Guangdong  518000
+				CN
+
+74-12-BB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+7412BB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+00-10-27   (hex)		L-3 COMMUNICATIONS EAST
+001027     (base 16)		L-3 COMMUNICATIONS EAST
+				ONE FEDERAL STREET - A&E-3ES
+				CAMDEN  NJ  08102
+				US
+
+BC-26-43   (hex)		Elprotronic Inc.
+BC2643     (base 16)		Elprotronic Inc.
+				35 Austin Rumble Crt.
+				King City  ON  L7B0B2
+				CA
+
+04-E2-29   (hex)		Qingdao Haier Technology Co.,Ltd
+04E229     (base 16)		Qingdao Haier Technology Co.,Ltd
+				Building A01,Haier Information Park, No.1 Haier Road,
+				Qingdao  Shandong  266101
+				CN
+
+34-8B-75   (hex)		LAVA INTERNATIONAL(H.K) LIMITED
+348B75     (base 16)		LAVA INTERNATIONAL(H.K) LIMITED
+				UNIT L 1/F MAU LAM COMM BLDG 16-18 MAU LAM ST, JORDAN KL, HK
+				Hong kong    999077
+				CN
+
+9C-E8-95   (hex)		New H3C Technologies Co., Ltd
+9CE895     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+00-58-3F   (hex)		PC Aquarius
+00583F     (base 16)		PC Aquarius
+				Comcity Office Park, Kievskoe shosse, est.6, bld. 1, Rumyantsevo, Moscow, 108811, RF
+				Moscow    108811
+				RU
+
+90-3D-68   (hex)		G-Printec, Inc.
+903D68     (base 16)		G-Printec, Inc.
+				Kawasaki Tech Center 5F, 580-16, Horikawacho
+				Saiwai-ku, Kawasaki-shi  Kanagawa  212-0013
+				JP
+
+10-94-BB   (hex)		Apple, Inc.
+1094BB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-1D-4A   (hex)		zte corporation
+781D4A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+94-E1-AC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+94E1AC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+34-E8-94   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+34E894     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+F8-6F-C1   (hex)		Apple, Inc.
+F86FC1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-FF-3C   (hex)		Apple, Inc.
+28FF3C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-99-B6   (hex)		Apple, Inc.
+F099B6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-E9-FE   (hex)		Apple, Inc.
+88E9FE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-89-2C   (hex)		Apple, Inc.
+38892C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-9E-AF   (hex)		Apple, Inc.
+749EAF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-BF-2D   (hex)		Apple, Inc.
+94BF2D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-CA-E4   (hex)		Cisco Systems, Inc
+68CAE4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-BE-3B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+00BE3B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-A1-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7CA177     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-2E-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+242E02     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-B6-EC   (hex)		Scuf Gaming International LLC
+78B6EC     (base 16)		Scuf Gaming International LLC
+				3970 Johns Creek Court Suite 325 Suwanee
+				Atlanta  GA  30024
+				US
+
+80-35-C1   (hex)		Xiaomi Communications Co Ltd
+8035C1     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+58-B3-FC   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+58B3FC     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+20-47-DA   (hex)		Xiaomi Communications Co Ltd
+2047DA     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+24-29-FE   (hex)		KYOCERA Corporation 
+2429FE     (base 16)		KYOCERA Corporation 
+				30 Hoji
+				Kitami,  Hokkaido  099-1595
+				JP
+
+7C-49-EB   (hex)		XIAOMI Electronics,CO.,LTD
+7C49EB     (base 16)		XIAOMI Electronics,CO.,LTD
+				Xiaomi Building, No.68 Qinghe Middle Street
+				Haidian District  Beijing  100085
+				CN
+
+C4-33-06   (hex)		China Mobile Group Device Co.,Ltd.
+C43306     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+08-DF-CB   (hex)		Systrome Networks
+08DFCB     (base 16)		Systrome Networks
+				Sohna Road
+				Gurgaon  Haryana  122018
+				IN
+
+A4-93-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4933F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-AC-9E   (hex)		Cisco Systems, Inc
+28AC9E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-D4-82   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+68D482     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+98-45-62   (hex)		Shanghai Baud Data Communication Co.,Ltd.
+984562     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
+				NO.123 JULI RD
+				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
+				CN
+
+E4-C4-83   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+E4C483     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+00-1F-BA   (hex)		Boyoung Tech
+001FBA     (base 16)		Boyoung Tech
+				Youngdeungpo-Gu Munrae3ga 84-2
+				Seoul    150-093
+				KR
+
+A4-33-D7   (hex)		MitraStar Technology Corp.
+A433D7     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+B0-AC-D2   (hex)		zte corporation
+B0ACD2     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+20-0F-70   (hex)		FOXTECH
+200F70     (base 16)		FOXTECH
+				152-160 City Road
+				LONDON  KEMP HOUSE  EC1V 2NX
+				GB
+
+20-2D-23   (hex)		Collinear Networks Inc.
+202D23     (base 16)		Collinear Networks Inc.
+				2901 Tasman Drive
+				Santa Clara  CA  95054
+				US
+
+90-83-4B   (hex)		BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
+90834B     (base 16)		BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
+				1-411Room 19#Building No.26 Xihuan South Rd. BDA Daxing District,
+				BEIJING    100176
+				CN
+
+18-50-2A   (hex)		SOARNEX
+18502A     (base 16)		SOARNEX
+				NO.158, RUIHU ST., NEIHU DIST.,
+				TAIPEI CITY  TAIWAN (R.O.C.)  11494
+				TW
+
+A8-36-7A   (hex)		frogblue TECHNOLOGY GmbH
+A8367A     (base 16)		frogblue TECHNOLOGY GmbH
+				Luxemburger Straße 6
+				Kaiserslautern  Rheinland-Pfalz  67657
+				DE
+
+6C-E4-DA   (hex)		NEC Platforms, Ltd.
+6CE4DA     (base 16)		NEC Platforms, Ltd.
+				2-3 Kandatsukasamachi
+				Chiyodaku  Tokyo  101-8532
+				JP
+
+10-E7-C6   (hex)		Hewlett Packard
+10E7C6     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+18-31-BF   (hex)		ASUSTek COMPUTER INC.
+1831BF     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+C8-FA-E1   (hex)		ARQ Digital LLC
+C8FAE1     (base 16)		ARQ Digital LLC
+				2430 Auto Park Way
+				Escondido  CA  92029
+				US
+
+DC-A3-33   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+DCA333     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+78-8C-54   (hex)		Ping Communication
+788C54     (base 16)		Ping Communication
+				Brenden 18
+				Appenzell Meistersrüte  AI  9050
+				CH
+
+B8-AF-67   (hex)		Hewlett Packard
+B8AF67     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+C0-98-DA   (hex)		China Mobile IOT Company Limited
+C098DA     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+F0-0F-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F00FEC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-07-5F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC075F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-48-E6   (hex)		Samsung Electronics Co.,Ltd
+C048E6     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+88-2E-5A   (hex)		storONE
+882E5A     (base 16)		storONE
+				POB 2660
+				Ra'anana    
+				IL
+
+00-71-47   (hex)		Amazon Technologies Inc.
+007147     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-BE-75   (hex)		Cisco Systems, Inc
+00BE75     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-DB-8B   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+64DB8B     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+78-25-7A   (hex)		LEO Innovation Lab
+78257A     (base 16)		LEO Innovation Lab
+				Silkegade 8
+				Copenhagen K  Denmark  1113
+				DK
+
+10-A4-B9   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
+10A4B9     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
+				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
+				 Beijing    100085
+				CN
+
+50-1C-B0   (hex)		Cisco Systems, Inc
+501CB0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+04-AC-44   (hex)		Holtek Semiconductor Inc.
+04AC44     (base 16)		Holtek Semiconductor Inc.
+				No.3, Creation Rd. II, Science Park
+				Hsinchu    300
+				TW
+
+F4-DC-A5   (hex)		DAWON DNS
+F4DCA5     (base 16)		DAWON DNS
+				217ho, Sauphwajiwon-dong, KETI, 226, Cheomdangwagi-ro, Buk-gu
+				Gwangju    61011
+				KR
+
+80-CE-62   (hex)		Hewlett Packard
+80CE62     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+80-1F-12   (hex)		Microchip Technology Inc.
+801F12     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+50-6C-BE   (hex)		InnosiliconTechnology Ltd
+506CBE     (base 16)		InnosiliconTechnology Ltd
+				WuHan East Lake Wuhan New Technology Development Zone 
+				Wuhan  Hubei Province  430223
+				CN
+
+24-7E-12   (hex)		Cisco Systems, Inc
+247E12     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+04-C2-41   (hex)		Nokia
+04C241     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+3C-47-9B   (hex)		Theissen Training Systems, Inc.
+3C479B     (base 16)		Theissen Training Systems, Inc.
+				1225 SE 4th Terrace
+				Chiefland  FL  32626
+				US
+
+60-6B-FF   (hex)		Nintendo Co.,Ltd
+606BFF     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+8C-F7-10   (hex)		AMPAK Technology, Inc.
+8CF710     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+30-7B-AC   (hex)		New H3C Technologies Co., Ltd
+307BAC     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+78-5D-C8   (hex)		LG Electronics
+785DC8     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+3C-04-61   (hex)		ARRIS Group, Inc.
+3C0461     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+88-3D-24   (hex)		Google, Inc.
+883D24     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+E8-C1-B8   (hex)		 Nanjing Bangzhong Electronic Commerce Limited
+E8C1B8     (base 16)		 Nanjing Bangzhong Electronic Commerce Limited
+				No.22, Liuzhou East Road, High - tech Zone
+				Nanjing    210000
+				CN
+
+D8-D7-75   (hex)		Sagemcom Broadband SAS
+D8D775     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E8-33-0D   (hex)		Xaptec GmbH
+E8330D     (base 16)		Xaptec GmbH
+				Neidenburger Str. 10
+				Gelsenkirchen    45897
+				DE
+
+D4-60-E3   (hex)		Sercomm Corporation.
+D460E3     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+B4-A8-B9   (hex)		Cisco Systems, Inc
+B4A8B9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-DC-E7   (hex)		Amazon Technologies Inc.
+50DCE7     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+64-98-29   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+649829     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+08-1D-C4   (hex)		Thermo Fisher Scientific Messtechnik GmbH
+081DC4     (base 16)		Thermo Fisher Scientific Messtechnik GmbH
+				Frauenauracher Strasse 96
+				Erlangen    91056
+				DE
+
+78-53-64   (hex)		SHIFT GmbH
+785364     (base 16)		SHIFT GmbH
+				Am Gänsemarkt 6
+				Wabern Falkenberg  Hessen  34590
+				DE
+
+38-E6-0A   (hex)		Xiaomi Communications Co Ltd
+38E60A     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+40-CB-C0   (hex)		Apple, Inc.
+40CBC0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-61-8B   (hex)		Apple, Inc.
+C4618B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-6E-A4   (hex)		Samsung Electronics Co.,Ltd
+CC6EA4     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+80-3A-59   (hex)		AT&T
+803A59     (base 16)		AT&T
+				1025 Lenox Park Blvd
+				Atlanta  GA  30319
+				US
+
+58-8D-64   (hex)		Xi'an Clevbee Technology Co.,Ltd
+588D64     (base 16)		Xi'an Clevbee Technology Co.,Ltd
+				FLOOR 7, TOWER B, POSCO CENTER, NO. 13 ZONE FOUR WANGJING EAST PARK, CHAOYANG DISTRICT, BEIJING
+				Beijing    100012
+				CN
+
+00-5D-73   (hex)		Cisco Systems, Inc
+005D73     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+60-6D-3C   (hex)		Luxshare Precision Industry Company Limited
+606D3C     (base 16)		Luxshare Precision Industry Company Limited
+				Floor 2, Block A, Sanyo New Industrial Area
+				West Haoyi Community, Shajing Subdistrict Office  Bao'an District, Shenzhen, Guangdong  523000
+				CN
+
+44-F0-34   (hex)		Kaonmedia CO., LTD.
+44F034     (base 16)		Kaonmedia CO., LTD.
+				884-3, Seongnam-daero, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13517
+				KR
+
+00-27-90   (hex)		Cisco Systems, Inc
+002790     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-BA-38   (hex)		PAL MOHAN ELECTRONICS PVT LTD
+34BA38     (base 16)		PAL MOHAN ELECTRONICS PVT LTD
+				40 DLF, INDUSTRIAL AREA, KIRTI NAGAR
+				NEW DELHI  DELHI  110015
+				IN
+
+98-29-A6   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+9829A6     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+CC-4D-38   (hex)		Carnegie Technologies
+CC4D38     (base 16)		Carnegie Technologies
+				9737 Great Hills Trail #260
+				Austin  TX  78759
+				US
+
+08-E6-89   (hex)		Apple, Inc.
+08E689     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-56-E7   (hex)		Apple, Inc.
+DC56E7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-16-D0   (hex)		Samsung Electronics Co.,Ltd
+A816D0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-6C-F1   (hex)		Samsung Electronics Co.,Ltd
+A46CF1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-AE-D6   (hex)		Samsung Electronics Co.,Ltd
+08AED6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-BF-E9   (hex)		Motorola Mobility LLC, a Lenovo Company
+DCBFE9     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+B4-2D-56   (hex)		Extreme Networks, Inc.
+B42D56     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+40-64-A4   (hex)		THE FURUKAWA ELECTRIC CO., LTD
+4064A4     (base 16)		THE FURUKAWA ELECTRIC CO., LTD
+				2-2-3,Marunouchi
+				Chiyoda-ku  Tokyo  100-8322
+				JP
+
+6C-B2-AE   (hex)		Cisco Systems, Inc
+6CB2AE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B0-98-2B   (hex)		Sagemcom Broadband SAS
+B0982B     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+34-FA-9F   (hex)		Ruckus Wireless
+34FA9F     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+F0-65-C2   (hex)		Yanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.
+F065C2     (base 16)		Yanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.
+				1001 North Qin Zhou Road
+				Shang Hai    200233
+				CN
+
+70-B7-E2   (hex)		Jiangsu Miter Technology Co.,Ltd.
+70B7E2     (base 16)		Jiangsu Miter Technology Co.,Ltd.
+				No.86 fuyuan community,the town of houbei
+				Jurong  Jiangsu  212400
+				CN
+
+80-8D-B7   (hex)		Hewlett Packard Enterprise
+808DB7     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+A0-9D-86   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+A09D86     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+00-C0-FF   (hex)		Seagate Cloud Systems Inc
+00C0FF     (base 16)		Seagate Cloud Systems Inc
+				6305 El Camino Real
+				Carlsbad  CA  92009
+				US
+
+D4-5D-DF   (hex)		PEGATRON CORPORATION
+D45DDF     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+F8-B5-68   (hex)		IEEE Registration Authority
+F8B568     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+2C-6B-7D   (hex)		Texas Instruments
+2C6B7D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+88-D1-71   (hex)		BEGHELLI S.P.A
+88D171     (base 16)		BEGHELLI S.P.A
+				VIA MOZZEGHINE 13/15
+				LOCALITA' MONTEVEGLIO - COMUNE VALSAMOGGIA  BOLOGNA  40053
+				IT
+
+A0-9D-C1   (hex)		China Dragon Technology Limited
+A09DC1     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+2C-42-05   (hex)		Lytx
+2C4205     (base 16)		Lytx
+				9785 Towne Centre Drive
+				San Diego  CA  92121
+				US
+
+A8-25-EB   (hex)		Cambridge Industries(Group) Co.,Ltd.
+A825EB     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				5/F,Building 8, 2388 ChenHang Road, MinHang District
+				shanghai    201114
+				CN
+
+34-E3-80   (hex)		Genexis B.V.
+34E380     (base 16)		Genexis B.V.
+				Lodewijkstraat 1A
+				Eindhoven    5652AC
+				NL
+
+5C-58-19   (hex)		Jingsheng Technology Co., Ltd.
+5C5819     (base 16)		Jingsheng Technology Co., Ltd.
+				Linyin street 5#
+				chengdu  sichuan  610000
+				CN
+
+B8-CA-04   (hex)		Holtek Semiconductor Inc.
+B8CA04     (base 16)		Holtek Semiconductor Inc.
+				No.3, Creation Rd. II, Science Park
+				Hsinchu    300
+				TW
+
+C4-C5-63   (hex)		TECNO MOBILE LIMITED
+C4C563     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+80-B7-08   (hex)		Blue Danube Systems, Inc
+80B708     (base 16)		Blue Danube Systems, Inc
+				3131 Jay Street, Suite 201
+				Santa Clara  CA  95054
+				US
+
+08-BC-20   (hex)		Hangzhou Royal Cloud Technology Co., Ltd
+08BC20     (base 16)		Hangzhou Royal Cloud Technology Co., Ltd
+				Hangzhou Xixi Road 957, 24, Unit 2, 302
+				Hangzhou    310030
+				CN
+
+94-2A-3F   (hex)		Diversey Inc
+942A3F     (base 16)		Diversey Inc
+				2415 Cascade Pointe Blvd
+				Charlotte  NC  28208
+				US
+
+20-31-EB   (hex)		HDSN
+2031EB     (base 16)		HDSN
+				4 allée des roseaux
+				Saint mitre les remparts  BDR  13920
+				FR
+
+F8-C9-6C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+F8C96C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+84-48-23   (hex)		WOXTER TECHNOLOGY Co. Ltd
+844823     (base 16)		WOXTER TECHNOLOGY Co. Ltd
+				23F Doushiyangguang, Chegongmiao
+				Shenzhen    518040
+				CN
+
+F4-1E-5E   (hex)		RtBrick Inc.
+F41E5E     (base 16)		RtBrick Inc.
+				26 Kingston Terrace
+				Princeton  NJ  08540
+				US
+
+6C-76-60   (hex)		KYOCERA CORPORATION 
+6C7660     (base 16)		KYOCERA CORPORATION 
+				2-1-1 Kagahara
+				Yokohama-shi  Kanagawa  224-8502
+				JP
+
+00-21-02   (hex)		UpdateLogic Inc.
+002102     (base 16)		UpdateLogic Inc.
+				2 Willow Street, Suite 101
+				Southborough  MA  01745
+				US
+
+50-58-00   (hex)		WyTec International, Inc.
+505800     (base 16)		WyTec International, Inc.
+				19206 Huebner Rd Suite 202
+				San Antonio  Texas  78258
+				US
+
+C8-D1-2A   (hex)		Comtrend Corporation
+C8D12A     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+0C-EA-C9   (hex)		ARRIS Group, Inc.
+0CEAC9     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E8-2A-44   (hex)		Liteon Technology Corporation
+E82A44     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+10-A4-BE   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+10A4BE     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+EC-C0-6A   (hex)		PowerChord Group Limited
+ECC06A     (base 16)		PowerChord Group Limited
+				1 Blythe Road
+				London    W14 0HG
+				GB
+
+94-49-96   (hex)		WiSilica Inc
+944996     (base 16)		WiSilica Inc
+				23282 Mill Creek Dr #340
+				Laguna Hills  CA  92653
+				US
+
+F8-1D-0F   (hex)		Hitron Technologies. Inc
+F81D0F     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+00-94-A1   (hex)		F5 Networks, Inc.
+0094A1     (base 16)		F5 Networks, Inc.
+				401 Elliott Ave. W.
+				Seattle  WA  98119
+				US
+
+BC-F2-92   (hex)		PLANTRONICS, INC.
+BCF292     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+04-50-DA   (hex)		Qiku Internet Network Scientific (Shenzhen) Co., Ltd
+0450DA     (base 16)		Qiku Internet Network Scientific (Shenzhen) Co., Ltd
+				Building A2, Chi Yuen Technology Park  1001 College Avenue, Nanshan District Shenzhen, Guangdong 
+				 Shenzhen  Guangdong   518000
+				CN
+
+E8-20-E2   (hex)		HUMAX Co., Ltd.
+E820E2     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+00-26-A8   (hex)		DAEHAP HYPER-TECH
+0026A8     (base 16)		DAEHAP HYPER-TECH
+				Mega center #1108, SK Techno-Park, #190-1, Sangdaewon-Dong, Jungwon-Gu
+				Seongnam  Gyeonggi-Do  462-807
+				KR
+
+78-5C-28   (hex)		Prime Motion Inc.
+785C28     (base 16)		Prime Motion Inc.
+				Akaho 1134-12
+				Komagane  Nagano  399-4117
+				JP
+
+8C-5B-F0   (hex)		ARRIS Group, Inc.
+8C5BF0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+18-90-D8   (hex)		Sagemcom Broadband SAS
+1890D8     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+88-83-5D   (hex)		FN-LINK TECHNOLOGY LIMITED
+88835D     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyang Economic & Technical Development Zone
+				ChangSha  Hu Nan  410300
+				CN
+
+EC-9F-0D   (hex)		IEEE Registration Authority
+EC9F0D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E0-78-A3   (hex)		Shanghai Winner Information Technology Co.,Inc
+E078A3     (base 16)		Shanghai Winner Information Technology Co.,Inc
+				Lujiazui Software Park,No.190,Lane 91,Eshan Road,Pudong New Area
+				Shanghai  Shanghai  200127
+				CN
+
+00-05-A7   (hex)		HYPERCHIP Inc.
+0005A7     (base 16)		HYPERCHIP Inc.
+				180 Peel Street - Ste. #333
+				123    H3C 2G7
+				CA
+
+08-84-66   (hex)		Novartis Pharma AG
+088466     (base 16)		Novartis Pharma AG
+				Lichtstrasse 35
+				Basel    4056
+				CH
+
+30-9F-FB   (hex)		Ardomus Networks Corporation
+309FFB     (base 16)		Ardomus Networks Corporation
+				4F,No. 6 Innovation Road II, Hsinchu Science Park  
+				Hsinchu    300
+				TW
+
+28-23-73   (hex)		Digita
+282373     (base 16)		Digita
+				Jämsänkatu 2
+				Helsinki  Uusimaa  00520
+				FI
+
+64-9A-08   (hex)		Shenzhen SuperElectron Technology Co.,LTD
+649A08     (base 16)		Shenzhen SuperElectron Technology Co.,LTD
+				Layer 13,Haosheng Business Center,Dongbin Road,Nanshan District
+				Shenzhen  guangdong  518052
+				CN
+
+68-A6-82   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+68A682     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+58-7A-62   (hex)		Texas Instruments
+587A62     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+54-7A-52   (hex)		CTE International srl
+547A52     (base 16)		CTE International srl
+				Via Sevardi 7
+				Reggio Emilia    42124
+				IT
+
+F0-6E-0B   (hex)		Microsoft Corporation
+F06E0B     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND    98052
+				US
+
+34-6F-ED   (hex)		Enovation Controls
+346FED     (base 16)		Enovation Controls
+				5311 S. 122nd E. Ave. 
+				Tulsa  OK  74146
+				US
+
+54-33-CB   (hex)		Apple, Inc.
+5433CB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-08-BC   (hex)		Apple, Inc.
+3408BC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-36-BB   (hex)		Apple, Inc.
+1C36BB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-2E-FF   (hex)		Apple, Inc.
+3C2EFF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-E0-25   (hex)		dit Co., Ltd.
+00E025     (base 16)		dit Co., Ltd.
+				Premier Toyocho Building
+				Koto-ku  Tokyo  135-0056
+				JP
+
+AC-84-C6   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+AC84C6     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-15-30   (hex)		Dell EMC
+001530     (base 16)		Dell EMC
+				176 South Street
+				Hopkinton  MA  01748
+				US
+
+0C-B2-B7   (hex)		Texas Instruments
+0CB2B7     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+24-F6-77   (hex)		Apple, Inc.
+24F677     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-CA-68   (hex)		Apple, Inc.
+B0CA68     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-3C-85   (hex)		Apple, Inc.
+C83C85     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-87-0D   (hex)		Unifiedgateways India Private Limited
+78870D     (base 16)		Unifiedgateways India Private Limited
+				25 1st Floor 4th Cross KR Road Jayanagar 7th Block West
+				Bangalore  Karnataka  560082
+				IN
+
+A8-82-00   (hex)		Hisense Electric Co.,Ltd
+A88200     (base 16)		Hisense Electric Co.,Ltd
+				Qianwangang Roard 218
+				Qingdao  Shandong  266510
+				CN
+
+38-20-A8   (hex)		ColorTokens, Inc.
+3820A8     (base 16)		ColorTokens, Inc.
+				2101 Tasman Dr. Suite 200A
+				Santa Clara  CA  95054
+				US
+
+70-58-96   (hex)		InShow Technology
+705896     (base 16)		InShow Technology
+				Jinqi Zhigu Building, Chongwen Garden, Liuxian Avenue, Nanshan District
+				shenzhen  Guangdong  518055
+				CN
+
+00-05-89   (hex)		National Datacomputer
+000589     (base 16)		National Datacomputer
+				900 Middlesex Tpk.
+				Billerica  MA  01821
+				US
+
+3C-A6-16   (hex)		vivo Mobile Communication Co., Ltd.
+3CA616     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+9C-E0-63   (hex)		Samsung Electronics Co.,Ltd
+9CE063     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-31-69   (hex)		Samsung Electronics Co.,Ltd
+D03169     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-F2-7F   (hex)		Hewlett Packard Enterprise
+24F27F     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+BC-05-43   (hex)		AVM GmbH
+BC0543     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin    10559
+				DE
+
+00-B6-9F   (hex)		Latch
+00B69F     (base 16)		Latch
+				450 W 33rd  St
+				New York  NY  10001
+				US
+
+84-2C-80   (hex)		Sichuan Changhong Electric Ltd.
+842C80     (base 16)		Sichuan Changhong Electric Ltd.
+				No.35,East MianXin Road,MianYang,Sichaun,China.
+				MianYang  SiChuan  PRC 621000
+				CN
+
+3C-C0-79   (hex)		Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd
+3CC079     (base 16)		Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd
+				Office 3015, Chuangxingda Business Building, No.36. Liuxian 3 Road, Baoan District
+				Shenzhen  Guangdong  518133
+				CN
+
+98-C5-DB   (hex)		Ericsson AB
+98C5DB     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+14-9F-3C   (hex)		Samsung Electronics Co.,Ltd
+149F3C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-EE-E6   (hex)		FORMIKE ELECTRONIC CO., LTD
+FCEEE6     (base 16)		FORMIKE ELECTRONIC CO., LTD
+				Flats 401-403, Block B, iPARK Building, 26 Dengliang Rd., NanShan Distric
+				Shenzhen  Guang Dong  518054
+				CN
+
+84-E3-27   (hex)		TAILYN TECHNOLOGIES INC
+84E327     (base 16)		TAILYN TECHNOLOGIES INC
+				NO 10 RUNG-AN ROAD, LU-ZHU DISTRICT
+				TAOYUAN CITY  TAIWAN ROC  33852
+				TW
+
+00-21-B8   (hex)		Inphi Corporation
+0021B8     (base 16)		Inphi Corporation
+				112 S. Lakeview Canyon Rd., Suite 100
+				Westlake Village  CA  91362
+				US
+
+0C-91-60   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+0C9160     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+D8-ED-1C   (hex)		Magna Technology SL
+D8ED1C     (base 16)		Magna Technology SL
+				C/Principe de Vergara, 55. 3ª planta
+				Madrid    28006
+				ES
+
+40-8B-F6   (hex)		Shenzhen TCL New Technology Co., Ltd
+408BF6     (base 16)		Shenzhen TCL New Technology Co., Ltd
+				TCL Building, #5 Central Nanhai Road, Nanshan District,
+				Shenzhen,  Guangdong,   518067
+				CN
+
+00-00-6B   (hex)		Silicon Graphics
+00006B     (base 16)		Silicon Graphics
+				2011 NORTH SHORELINE BLVD.
+				MOUNTAIN VIEW  CA  94039-7311
+				US
+
+74-37-3B   (hex)		UNINET Co.,Ltd.
+74373B     (base 16)		UNINET Co.,Ltd.
+				#1803, Daerung Techno Town15, 401, Simin-daero, Dongan-gu
+				Anyang-si  Gyunggi-do  14057
+				KR
+
+7C-64-56   (hex)		Samsung Electronics Co.,Ltd
+7C6456     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+F4-6E-24   (hex)		NEC Personal Computers, Ltd.
+F46E24     (base 16)		NEC Personal Computers, Ltd.
+				Akihabara UDX,14-1, Sotokanda 4-Chome
+				Chiyoda-ku  Tokyo  101-0021
+				JP
+
+88-82-79   (hex)		Shenzhen RB-LINK Intelligent Technology Co.Ltd
+888279     (base 16)		Shenzhen RB-LINK Intelligent Technology Co.Ltd
+				Second floor, No 22, Wanfeng the third industry area, Shajing , BaoAn district
+				Shenzhen City    518125
+				CN
+
+68-C6-3A   (hex)		Espressif Inc.
+68C63A     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+A0-64-8F   (hex)		ASKEY COMPUTER CORP
+A0648F     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+C8-50-E9   (hex)		Raisecom Technology CO., LTD
+C850E9     (base 16)		Raisecom Technology CO., LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+10-F1-63   (hex)		TNK CO.,LTD
+10F163     (base 16)		TNK CO.,LTD
+				1 Kasugayama.Iitoyo
+				Tenei-village.Iwase-country  Fukushima-prefecture  962-0512
+				JP
+
+98-EF-9B   (hex)		OHSUNG
+98EF9B     (base 16)		OHSUNG
+				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
+				GUMI  GYEONG BUK  730-030
+				KR
+
+14-CF-8D   (hex)		OHSUNG
+14CF8D     (base 16)		OHSUNG
+				181
+				GUMI  KYUNGBUK  730-030
+				KR
+
+10-44-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+104400     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-E1-7E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B0E17E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-A7-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4A7C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-8D-2D   (hex)		Shanghai Wellpay Information Technology Co., Ltd
+5C8D2D     (base 16)		Shanghai Wellpay Information Technology Co., Ltd
+				 Loushanguan Road 523, Jin Hongqiao International Center Building, 1501
+				Shanghai    200000
+				CN
+
+90-FD-9F   (hex)		Silicon Laboratories
+90FD9F     (base 16)		Silicon Laboratories
+				400 W. Cesar Chavez St.
+				Austin  TX  78701
+				US
+
+B4-30-C0   (hex)		York Instruments Ltd
+B430C0     (base 16)		York Instruments Ltd
+				The Biocentre, York Science Park
+				York  North Yorkshire  YO10 5NY
+				GB
+
+E8-1D-A8   (hex)		Ruckus Wireless
+E81DA8     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+F0-3D-03   (hex)		TECNO MOBILE LIMITED
+F03D03     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+DC-F0-90   (hex)		Nubia Technology Co.,Ltd.
+DCF090     (base 16)		Nubia Technology Co.,Ltd.
+				6/F-8/F 10/F-11/F A Tower,6/F B Tower,6/F-10/F C Tower Dazu Innovation Mansion, North Ring Rd,No.9018,High-Tech Park Nanshan District
+				Shenzhen  Guandong  518057
+				CN
+
+A0-FE-61   (hex)		Vivint Wireless Inc. 
+A0FE61     (base 16)		Vivint Wireless Inc. 
+				4931 N 300 W
+				Provo  UT  84604
+				US
+
+5C-2B-F5   (hex)		Vivint Wireless Inc. 
+5C2BF5     (base 16)		Vivint Wireless Inc. 
+				4931 N 300 W
+				Provo  UT  84604
+				US
+
+CC-5A-53   (hex)		Cisco Systems, Inc
+CC5A53     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-60-88   (hex)		Analog Devices, Inc.
+006088     (base 16)		Analog Devices, Inc.
+				410 AMHERST STREET-STE #325
+				NASHUA  NH  03063
+				US
+
+08-4A-CF   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+084ACF     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+2C-27-9E   (hex)		IEEE Registration Authority
+2C279E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-5F-48   (hex)		Continental Intelligent Transportation Systems LLC
+8C5F48     (base 16)		Continental Intelligent Transportation Systems LLC
+				3901 North First Street
+				San Jose  CA  95134
+				US
+
+94-7E-B9   (hex)		National Narrowband Network Communications Pty Ltd
+947EB9     (base 16)		National Narrowband Network Communications Pty Ltd
+				Unit 10, 1 Talavera Road
+				Macquarie Park  New South Wales  2113
+				AU
+
+64-6E-69   (hex)		Liteon Technology Corporation
+646E69     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+70-6B-B9   (hex)		Cisco Systems, Inc
+706BB9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-C0-EE   (hex)		KYOCERA Display Corporation
+00C0EE     (base 16)		KYOCERA Display Corporation
+				2-14-9 TAMAGAWADAI
+				tokyo  158  0000
+				JP
+
+24-5F-DF   (hex)		KYOCERA CORPORATION 
+245FDF     (base 16)		KYOCERA CORPORATION 
+				2-1-1,Kagahara,
+				Yokohama-shi  Kanagawa  224-8502
+				JP
+
+9C-63-ED   (hex)		zte corporation
+9C63ED     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+74-F6-61   (hex)		Schneider Electric Fire & Security Oy
+74F661     (base 16)		Schneider Electric Fire & Security Oy
+				Sokerilinnantie 11 C
+				Espoo    02650
+				FI
+
+B8-63-4D   (hex)		Apple, Inc.
+B8634D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-C4-2F   (hex)		Philips Lifeline
+24C42F     (base 16)		Philips Lifeline
+				111 Lawrence st
+				Framingham  MA  01702
+				US
+
+2C-B2-1A   (hex)		Phicomm (Shanghai) Co., Ltd.
+2CB21A     (base 16)		Phicomm (Shanghai) Co., Ltd.
+				3666 SiXian Rd.,Songjiang District
+				Shanghai  Shanghai  201616
+				CN
+
+A4-E9-75   (hex)		Apple, Inc.
+A4E975     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-35-AD   (hex)		Apple, Inc.
+3035AD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-41-67   (hex)		Apple, Inc.
+844167     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-00-C6   (hex)		Apple, Inc.
+9800C6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-1F-74   (hex)		Apple, Inc.
+AC1F74     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-5C-2C   (hex)		Apple, Inc.
+A85C2C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-DB-70   (hex)		Apple, Inc.
+00DB70     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-E5-57   (hex)		Nokia Corporation
+FCE557     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu  Ou  90590
+				FI
+
+48-C5-8D   (hex)		Lear Corporation GmbH
+48C58D     (base 16)		Lear Corporation GmbH
+				Industriestrasse 48
+				Kronach  Bavaria  96317
+				DE
+
+00-28-9F   (hex)		Semptian Co., Ltd.
+00289F     (base 16)		Semptian Co., Ltd.
+				Block 5D, 8/F, Software Industry Park, No.14, Haitian 2nd Road, GaoxinSouth, Nanshan District, Shenzhen, China
+				Shen Zhen  GuangDong  518061
+				CN
+
+9C-30-5B   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+9C305B     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+10-4E-89   (hex)		Garmin International
+104E89     (base 16)		Garmin International
+				1200 E. 151st St
+				Olathe  KS  66062
+				US
+
+D8-C4-97   (hex)		Quanta Computer Inc.
+D8C497     (base 16)		Quanta Computer Inc.
+				No. 211, Wen-Hwa 2nd Rd.,Kuei-Shan Dist.
+				Taoyuan City  Taiwan  33377
+				TW
+
+BC-C3-42   (hex)		Panasonic Communications Co., Ltd.
+BCC342     (base 16)		Panasonic Communications Co., Ltd.
+				4-1-62 Minoshima Hakata-ku
+				Fukuoka city  Fukuoka  812-8531
+				JP
+
+00-1B-D3   (hex)		Panasonic Corporation AVC Networks Company
+001BD3     (base 16)		Panasonic Corporation AVC Networks Company
+				1-15 Matsuo-cho
+				Kadoma  Osaka  571-8504
+				JP
+
+CC-7E-E7   (hex)		Panasonic Corporation AVC Networks Company
+CC7EE7     (base 16)		Panasonic Corporation AVC Networks Company
+				1-15 Matsuo-cho
+				Kadoma City  Osaka  571-8504
+				JP
+
+20-C6-EB   (hex)		Panasonic Corporation AVC Networks Company
+20C6EB     (base 16)		Panasonic Corporation AVC Networks Company
+				1-15 Matsuo-cho
+				Kadoma  Osaka  571-8504
+				JP
+
+64-B5-C6   (hex)		Nintendo Co.,Ltd
+64B5C6     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+28-30-AC   (hex)		Frontiir Co. Ltd.
+2830AC     (base 16)		Frontiir Co. Ltd.
+				5 Bayint Naung Road, Hlaing Township
+				Yangon    11052
+				MM
+
+D4-D2-E5   (hex)		BKAV Corporation
+D4D2E5     (base 16)		BKAV Corporation
+				2nd floor - HH1 Building - Yen Hoa Urban Area, Yen Hoa Ward, Cau Giay District
+				HaNoi    100000
+				VN
+
+00-50-B5   (hex)		FICHET SECURITE ELECTRONIQUE
+0050B5     (base 16)		FICHET SECURITE ELECTRONIQUE
+				15-17 AVE. MORANE-SAULNIER
+				    
+				FR
+
+00-14-39   (hex)		Blonder Tongue Laboratories, Inc
+001439     (base 16)		Blonder Tongue Laboratories, Inc
+				One Jake Brown Road
+				Old Bridge    08857
+				US
+
+20-A6-CD   (hex)		Hewlett Packard Enterprise
+20A6CD     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+84-80-2D   (hex)		Cisco Systems, Inc
+84802D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-19-87   (hex)		Panasonic Mobile Communications Co.,Ltd.
+001987     (base 16)		Panasonic Mobile Communications Co.,Ltd.
+				600 Saedo-cho, Tsuzuki-ku,
+				Yokohama City  Kanagawa Prefecture  224-8539
+				JP
+
+74-1C-27   (hex)		ITEL MOBILE LIMITED
+741C27     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+00-A0-AC   (hex)		GILAT SATELLITE NETWORKS, LTD.
+00A0AC     (base 16)		GILAT SATELLITE NETWORKS, LTD.
+				24A HABARZEL STREET
+				    
+				IL
+
+00-26-09   (hex)		Phyllis Co., Ltd.
+002609     (base 16)		Phyllis Co., Ltd.
+				9th Fl., Room 3/4, No. 52, Sec. 2, Chung Shan North Road,
+				Taipei    104
+				TW
+
+28-F5-37   (hex)		IEEE Registration Authority
+28F537     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-D9-B3   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+94D9B3     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+C8-40-29   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+C84029     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+F8-6E-EE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F86EEE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-02-B1   (hex)		Cisco Systems, Inc
+7802B1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B4-0F-3B   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+B40F3B     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+00-18-8D   (hex)		Nokia Danmark A/S
+00188D     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    1790
+				DK
+
+00-15-AB   (hex)		PRO CO SOUND INC
+0015AB     (base 16)		PRO CO SOUND INC
+				225 PARSONS STREET
+				KALAMAZOO  MICHIGAN  49008
+				US
+
+58-76-C5   (hex)		DIGI I'S LTD
+5876C5     (base 16)		DIGI I'S LTD
+				31, Takahata, Maesawa
+				Oshu  Iwate  029-4204
+				JP
+
+A8-B2-DA   (hex)		FUJITSU LIMITED
+A8B2DA     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+00-13-54   (hex)		Zcomax Technologies, Inc.
+001354     (base 16)		Zcomax Technologies, Inc.
+				98 Ford Road
+				Denville  NJ  07834
+				US
+
+78-D8-00   (hex)		IEEE Registration Authority
+78D800     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+08-35-B2   (hex)		CoreEdge Networks Co., Ltd
+0835B2     (base 16)		CoreEdge Networks Co., Ltd
+				#806 G Plus Tower, 123, Digital-ro 26gil, Guro-gu
+				Seoul    08390
+				KR
+
+4C-49-E3   (hex)		Xiaomi Communications Co Ltd
+4C49E3     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+24-58-80   (hex)		VIZEO
+245880     (base 16)		VIZEO
+				13 rue Emile Decorps
+				Villeurbanne    69100
+				FR
+
+54-66-6C   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+54666C     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+A8-96-75   (hex)		Motorola Mobility LLC, a Lenovo Company
+A89675     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+38-9A-F6   (hex)		Samsung Electronics Co.,Ltd
+389AF6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E0-AA-96   (hex)		Samsung Electronics Co.,Ltd
+E0AA96     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-77-05   (hex)		Samsung Electronics Co.,Ltd
+507705     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+28-D4-36   (hex)		Jiangsu dewosi electric co., LTD
+28D436     (base 16)		Jiangsu dewosi electric co., LTD
+				Dantu district fengjingchengbang  xibanya 503, building 6
+				Zhenjiang  Jiangsu  212028
+				CN
+
+D4-B2-7A   (hex)		ARRIS Group, Inc.
+D4B27A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+44-EA-4B   (hex)		Actlas Inc.
+44EA4B     (base 16)		Actlas Inc.
+				2-2-32, Asahikawa,
+				Yokote  Akita  013-0033
+				JP
+
+C4-CB-6B   (hex)		Airista Flow, Inc.
+C4CB6B     (base 16)		Airista Flow, Inc.
+				913 Ridgebrook Road Suite 110
+				Sparks  MD  21152
+				US
+
+18-80-90   (hex)		Cisco Systems, Inc
+188090     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+78-62-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+786256     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-55-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B05508     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-75-C0   (hex)		PayPal, Inc.
+B875C0     (base 16)		PayPal, Inc.
+				2211 North 1st Street
+				San Jose  California  95131
+				US
+
+00-1C-71   (hex)		Emergent Electronics
+001C71     (base 16)		Emergent Electronics
+				Bldg 2 Level 3 Suite 305
+				Sewickley  PA  15143
+				US
+
+00-1A-93   (hex)		ERCO Leuchten GmbH
+001A93     (base 16)		ERCO Leuchten GmbH
+				Brockhauser Weg 80-82
+				Lüdenscheid  NRW  D-58507
+				DE
+
+94-F6-65   (hex)		Ruckus Wireless
+94F665     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+B0-90-D4   (hex)		Shenzhen Hoin Internet Technology Co., Ltd
+B090D4     (base 16)		Shenzhen Hoin Internet Technology Co., Ltd
+				Xusheng Building, No. 4004, Bao’an, Room 1616 Bao’an District
+				Shenzhen  Guangdong  518000
+				CN
+
+8C-9F-3B   (hex)		Qingdao Hisense Communications Co.,Ltd.
+8C9F3B     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+00-14-B8   (hex)		Hill-Rom
+0014B8     (base 16)		Hill-Rom
+				1125 E. Pearl Street
+				Batesville  IN  47006
+				US
+
+AC-ED-5C   (hex)		Intel Corporate
+ACED5C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+84-20-96   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+842096     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+B4-C1-70   (hex)		Yi chip Microelectronics (Hangzhou) Co., Ltd
+B4C170     (base 16)		Yi chip Microelectronics (Hangzhou) Co., Ltd
+				Suite 401, Building #13, No. 498 Guoshoujing Rd., Pudong
+				Shanghai    201210
+				CN
+
+AC-67-06   (hex)		Ruckus Wireless
+AC6706     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+04-4F-AA   (hex)		Ruckus Wireless
+044FAA     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+58-93-96   (hex)		Ruckus Wireless
+589396     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+00-1F-41   (hex)		Ruckus Wireless
+001F41     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+C4-10-8A   (hex)		Ruckus Wireless
+C4108A     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+F0-B0-52   (hex)		Ruckus Wireless
+F0B052     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+70-DF-2F   (hex)		Cisco Systems, Inc
+70DF2F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+38-94-E0   (hex)		Syrotech Networks. Ltd.
+3894E0     (base 16)		Syrotech Networks. Ltd.
+				UNIT NO.-5 20F, KIN WING INDUSTERIAL BUILDING,33 KIN WING STREET
+				TUEN MUN    999077
+				HK
+
+34-F6-4B   (hex)		Intel Corporate
+34F64B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+F4-6B-EF   (hex)		Sagemcom Broadband SAS
+F46BEF     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+10-CD-B6   (hex)		Essential Products, Inc.
+10CDB6     (base 16)		Essential Products, Inc.
+				380 Portage Avenue
+				Palo Alto  CA  94306
+				US
+
+A4-F3-E7   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+A4F3E7     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+E4-3A-6E   (hex)		Shenzhen Zeroone Technology CO.,LTD
+E43A6E     (base 16)		Shenzhen Zeroone Technology CO.,LTD
+				9/F.,Building B Tianan Cyber Park ,North Huangge Road,Longgang District
+				Shenzhen  Guangdong  518000
+				CN
+
+7C-E2-CA   (hex)		Juniper Networks
+7CE2CA     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+90-61-AE   (hex)		Intel Corporate
+9061AE     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+6C-F9-D2   (hex)		CHENGDU POVODO ELECTRONIC TECHNOLOGY CO., LTD
+6CF9D2     (base 16)		CHENGDU POVODO ELECTRONIC TECHNOLOGY CO., LTD
+				High - West West West Center Road on the 4th
+				 Chengdu   Sichuan  611731
+				CN
+
+30-B6-2D   (hex)		 Mojo Networks, Inc.
+30B62D     (base 16)		 Mojo Networks, Inc.
+				339 N.Bernardo Ave
+				Mountain View  CA  94043
+				US
+
+50-18-4C   (hex)		Platina Systems Inc.
+50184C     (base 16)		Platina Systems Inc.
+				3180 De La Cruz Blvd. Ste# 110
+				Santa Clara  CA  95054
+				US
+
+F4-B7-B3   (hex)		vivo Mobile Communication Co., Ltd.
+F4B7B3     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+FC-A6-67   (hex)		Amazon Technologies Inc.
+FCA667     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+C8-1F-EA   (hex)		Avaya Inc
+C81FEA     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+00-27-E3   (hex)		Cisco Systems, Inc
+0027E3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-18-AE   (hex)		TVT CO.,LTD
+0018AE     (base 16)		TVT CO.,LTD
+				5/F,North Block,CE Lighting House
+				shenzhen  guangdong  518026
+				CN
+
+88-91-DD   (hex)		Racktivity
+8891DD     (base 16)		Racktivity
+				Hertstokweg 5
+				Ternat  Flanders  1741
+				BE
+
+1C-45-93   (hex)		Texas Instruments
+1C4593     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+90-EC-50   (hex)		C.O.B.O. SPA
+90EC50     (base 16)		C.O.B.O. SPA
+				via Tito Speri, 10
+				Leno  Brescia  25024
+				IT
+
+E0-D8-48   (hex)		Dell Inc.
+E0D848     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+60-27-1C   (hex)		VIDEOR E. Hartig GmbH
+60271C     (base 16)		VIDEOR E. Hartig GmbH
+				Carl-Zeiss-Straße 8
+				Rödermark  Hessen  63322
+				DE
+
+00-EC-0A   (hex)		Xiaomi Communications Co Ltd
+00EC0A     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+C8-D7-B0   (hex)		Samsung Electronics Co.,Ltd
+C8D7B0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+6C-60-EB   (hex)		ZHI YUAN ELECTRONICS CO., LIMITED
+6C60EB     (base 16)		ZHI YUAN ELECTRONICS CO., LIMITED
+				UNIT 2508A 25/F BANK OF AMERICA TOWER， 12 HARCOURT RD CENTRAL 
+				HONGKONG    999077
+				HK
+
+74-DA-DA   (hex)		D-Link International
+74DADA     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+D8-F1-F0   (hex)		Pepxim International Limited
+D8F1F0     (base 16)		Pepxim International Limited
+				A5, 5/F, HK Spinners Industrial Building, Phase 6
+				Cheung Sha Wan  Hong Kong  0
+				HK
+
+DC-C8-F5   (hex)		Shanghai UMEinfo CO.,LTD.
+DCC8F5     (base 16)		Shanghai UMEinfo CO.,LTD.
+				16/F,Building B ,NO.15 Changyi Road ,Baoshan District,
+				Shanghai    200441
+				CN
+
+88-D7-F6   (hex)		ASUSTek COMPUTER INC.
+88D7F6     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+90-97-F3   (hex)		Samsung Electronics Co.,Ltd
+9097F3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-1C-68   (hex)		Samsung Electronics Co.,Ltd
+7C1C68     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C0-87-EB   (hex)		Samsung Electronics Co.,Ltd
+C087EB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+04-71-4B   (hex)		IEEE Registration Authority
+04714B     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+2C-41-A1   (hex)		Bose Corporation
+2C41A1     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+4C-38-D8   (hex)		ARRIS Group, Inc.
+4C38D8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+44-7B-BB   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+447BBB     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+9C-7B-D2   (hex)		NEOLAB Convergence
+9C7BD2     (base 16)		NEOLAB Convergence
+				4F Yujung bldg.,
+				Seoul    137-070
+				KR
+
+D0-F8-8C   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+D0F88C     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+2C-B1-15   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+2CB115     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+10-D0-7A   (hex)		AMPAK Technology, Inc.
+10D07A     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+D4-C1-C8   (hex)		zte corporation
+D4C1C8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+88-D2-74   (hex)		zte corporation
+88D274     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-24-49   (hex)		Shen Zhen Lite Star Electronics Technology Co., Ltd
+002449     (base 16)		Shen Zhen Lite Star Electronics Technology Co., Ltd
+				Xinghong Science Park,1st Ind.Area,
+				ShenZhen  GuangDong  518102
+				CN
+
+00-E1-8C   (hex)		Intel Corporate
+00E18C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+84-79-33   (hex)		profichip GmbH
+847933     (base 16)		profichip GmbH
+				Einsteinstrasse 6
+				Herzogenaurach    91074
+				DE
+
+88-15-44   (hex)		Cisco Meraki
+881544     (base 16)		Cisco Meraki
+				660 Alabama St
+				San Francisco  CA  94110
+				US
+
+C4-AB-B2   (hex)		vivo Mobile Communication Co., Ltd.
+C4ABB2     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+80-B2-34   (hex)		Technicolor CH USA Inc.
+80B234     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+44-B4-12   (hex)		SIUS AG
+44B412     (base 16)		SIUS AG
+				Im Langhag 1
+				Effretikon    8307
+				CH
+
+0C-B9-12   (hex)		JM-DATA GmbH
+0CB912     (base 16)		JM-DATA GmbH
+				Hackl-Str. 1
+				Traun  Upper Austria  4050
+				AT
+
+3C-A3-08   (hex)		Texas Instruments
+3CA308     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F4-3E-61   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+F43E61     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				2F Baiying Building
+				Shenzhen  Guangdong  518067
+				CN
+
+B4-41-7A   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+B4417A     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				4F,Baiying Building, No.1019,Nanhai RD,Shekou
+				ShenZhen  GuangDong  518067
+				CN
+
+00-00-62   (hex)		BULL HN INFORMATION SYSTEMS
+000062     (base 16)		BULL HN INFORMATION SYSTEMS
+				300 CONCORD ROAD M/S 864A
+				BILLERICA  MA  01821
+				US
+
+E8-C1-D7   (hex)		Philips
+E8C1D7     (base 16)		Philips
+				TussenDiepen 4
+				Drachten  Friesland  9206 AD  
+				NL
+
+4C-81-20   (hex)		Taicang T&W Electronics
+4C8120     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+28-A6-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+28A6DB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-A0-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14A0F8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-F8-6D   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+C8F86D     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+60-45-CB   (hex)		ASUSTek COMPUTER INC.
+6045CB     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+00-11-8B   (hex)		Alcatel-Lucent Enterprise
+00118B     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Road
+				Calabasas  CA  91301
+				US
+
+00-E0-B1   (hex)		Alcatel-Lucent Enterprise
+00E0B1     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Road
+				Calabasas  CA  91301
+				US
+
+00-E0-DA   (hex)		Alcatel-Lucent Enterprise
+00E0DA     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Road
+				CALABASAS  CA  91301
+				US
+
+F8-BE-0D   (hex)		A2UICT Co.,Ltd.
+F8BE0D     (base 16)		A2UICT Co.,Ltd.
+				1202, OWNER'S TOWER, 28,
+				Hwangsaeul-ro 200 beon-gil, Bundang-gu,  Seongnam-si, Gyeonggi-do  13595
+				KR
+
+E4-42-A6   (hex)		Intel Corporate
+E442A6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+3C-67-8C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C678C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-50-3F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+D4503F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+38-8C-50   (hex)		LG Electronics
+388C50     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+DC-08-56   (hex)		Alcatel-Lucent Enterprise
+DC0856     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Rd
+				Calabasas  CA  91301
+				US
+
+1C-DA-27   (hex)		vivo Mobile Communication Co., Ltd.
+1CDA27     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+90-F3-05   (hex)		HUMAX Co., Ltd.
+90F305     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+40-95-BD   (hex)		NTmore.Co.,Ltd
+4095BD     (base 16)		NTmore.Co.,Ltd
+				38, Heungan-daero 427 beon-gil, Dongan-gu
+				Anyang  Gyeonggi  431-801
+				KR
+
+98-AA-FC   (hex)		IEEE Registration Authority
+98AAFC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-14-3F   (hex)		Hotway Technology Corporation
+00143F     (base 16)		Hotway Technology Corporation
+				3F.-4, No.81, Sec. 1, Xintai 5th Rd.
+				Xizhi Dist.  New Taipei City  22101
+				TW
+
+D0-55-B2   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+D055B2     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+14-4F-D7   (hex)		IEEE Registration Authority
+144FD7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B8-55-10   (hex)		Zioncom Electronics (Shenzhen) Ltd.
+B85510     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
+				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street,
+				Shenzhen  Guangdong  518000
+				CN
+
+04-95-73   (hex)		zte corporation
+049573     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F0-D7-AA   (hex)		Motorola Mobility LLC, a Lenovo Company
+F0D7AA     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+F8-FF-0B   (hex)		Electronic Technology Inc.
+F8FF0B     (base 16)		Electronic Technology Inc.
+				511 Lyons Ave
+				Irvington  NJ  07111
+				US
+
+7C-6B-F7   (hex)		NTI co., ltd.
+7C6BF7     (base 16)		NTI co., ltd.
+				5th floor takei building 2-19-6
+				taito  taito-ku , Tokyo  1100016
+				JP
+
+00-D3-18   (hex)		SPG Controls
+00D318     (base 16)		SPG Controls
+				Blue gates business park Stortford road
+				Dunmow  Essex  CM61SN
+				GB
+
+30-96-FB   (hex)		Samsung Electronics Co.,Ltd
+3096FB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+48-27-EA   (hex)		Samsung Electronics Co.,Ltd
+4827EA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-78-7E   (hex)		Samsung Electronics Co.,Ltd
+7C787E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-5B-A7   (hex)		Apple, Inc.
+245BA7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-F0-87   (hex)		Apple, Inc.
+70F087     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-0C-46   (hex)		Allied Telesyn Inc.
+000C46     (base 16)		Allied Telesyn Inc.
+				960 Stewart Drive, Suite B
+				Sunnyvale  California  94085
+				US
+
+00-1F-72   (hex)		QingDao Hiphone Technology Co,.Ltd
+001F72     (base 16)		QingDao Hiphone Technology Co,.Ltd
+				NO.106,JiangXi Road
+				QingDao  ShanDong  266071
+				CN
+
+00-23-65   (hex)		Insta Elektro GmbH
+002365     (base 16)		Insta Elektro GmbH
+				Hohe Steinert 10
+				Luedenscheid  NRW  58509
+				DE
+
+60-91-F3   (hex)		vivo Mobile Communication Co., Ltd.
+6091F3     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+28-39-5E   (hex)		Samsung Electronics Co.,Ltd
+28395E     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+38-29-5A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+38295A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+88-E6-28   (hex)		Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd
+88E628     (base 16)		Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd
+				Floor 3, Bldg. 5, Area B, Xinfu Industrial Park, Chongqing Rd., Baoan Dist,Shenzhen,Guangdong, China
+				Shenzhen   Guangdong  518103
+				CN
+
+58-23-8C   (hex)		Technicolor CH USA Inc.
+58238C     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+CC-82-EB   (hex)		KYOCERA CORPORATION 
+CC82EB     (base 16)		KYOCERA CORPORATION 
+				 2-1-1,Kagahara, Tsuzuki-ku,
+				Yokohama-shi  Kanagawa  224-8502
+				JP
+
+14-98-7D   (hex)		Technicolor CH USA Inc.
+14987D     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+D4-CF-37   (hex)		Symbolic IO
+D4CF37     (base 16)		Symbolic IO
+				101 Crawfords Corner Rd.
+				Holmdel  NJ  07733
+				US
+
+D4-7D-FC   (hex)		TECNO MOBILE LIMITED
+D47DFC     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+40-9F-38   (hex)		AzureWave Technology Inc.
+409F38     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+BC-2F-3D   (hex)		vivo Mobile Communication Co., Ltd.
+BC2F3D     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+40-FA-7F   (hex)		Preh Car Connect GmbH
+40FA7F     (base 16)		Preh Car Connect GmbH
+				Gewerbepark 5
+				Dresden    01156
+				DE
+
+00-0D-BB   (hex)		Nippon Dentsu Co.,Ltd.
+000DBB     (base 16)		Nippon Dentsu Co.,Ltd.
+				2-21-1,Isoji
+				Osaka    552-0003
+				JP
+
+2C-7E-81   (hex)		ARRIS Group, Inc.
+2C7E81     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+40-7D-0F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+407D0F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-CC-6E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68CC6E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-34-D2   (hex)		Availink, Inc.
+3034D2     (base 16)		Availink, Inc.
+				Scotia Centre P.O. Box 268GT,Grand Cayman, Cayman Islands
+				Grand Cayman  Grand Cayman  999159
+				KY
+
+50-40-61   (hex)		Nokia
+504061     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-10-8E   (hex)		HUGH SYMONS CONCEPT Technologies Ltd.
+00108E     (base 16)		HUGH SYMONS CONCEPT Technologies Ltd.
+				Alder Hills Park
+				Poole, Dorset BM12 4AR    
+				GB
+
+E0-51-63   (hex)		Arcadyan Corporation
+E05163     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+54-E3-F6   (hex)		Alcatel-Lucent
+54E3F6     (base 16)		Alcatel-Lucent
+				777 East Middlefield Road
+				Mountain View  CA  94043
+				US
+
+40-B0-34   (hex)		Hewlett Packard
+40B034     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+B8-16-DB   (hex)		CHANT SINCERE CO.,LTD
+B816DB     (base 16)		CHANT SINCERE CO.,LTD
+				7F-2,NO.188,SEC.3,TA TUNG ROAD
+				XIZHI DISTRICT, NEW TAIPEI CITY  TAIWAN,ROC  22103
+				TW
+
+40-B4-CD   (hex)		Amazon Technologies Inc.
+40B4CD     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+D4-81-D7   (hex)		Dell Inc.
+D481D7     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+F4-2B-48   (hex)		Ubiqam
+F42B48     (base 16)		Ubiqam
+				15 Gonen 
+				Petah Tiqva    4925915
+				IL
+
+50-F1-4A   (hex)		Texas Instruments
+50F14A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+04-DE-F2   (hex)		Shenzhen ECOM Technology Co. Ltd
+04DEF2     (base 16)		Shenzhen ECOM Technology Co. Ltd
+				Longhua Street Qinghu Community Longhu Junhui Fashion Apartment
+				 Longhua New District, Shenzhen  Guangdong  518012
+				CN
+
+78-C1-A7   (hex)		zte corporation
+78C1A7     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+4C-78-72   (hex)		Cav. Uff. Giacomo Cimberio S.p.A. 
+4C7872     (base 16)		Cav. Uff. Giacomo Cimberio S.p.A. 
+				Via Torchio, 57
+				San Maurizio d'Opaglio  (Novara)  28017
+				IT
+
+8C-F5-A3   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+8CF5A3     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+8C-C8-F4   (hex)		IEEE Registration Authority
+8CC8F4     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F4-83-E1   (hex)		Shanghai Clouder Semiconductor Co.,Ltd
+F483E1     (base 16)		Shanghai Clouder Semiconductor Co.,Ltd
+				Room515,No.8,Wuzhong Rd,Xuhui District
+				Shanghai  Shanghai  200336
+				CN
+
+08-3E-5D   (hex)		Sagemcom Broadband SAS
+083E5D     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+3C-BD-3E   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+3CBD3E     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+A0-84-CB   (hex)		SonicSensory,Inc.
+A084CB     (base 16)		SonicSensory,Inc.
+				1161 Logan St
+				Los Angeles  CA  90026
+				US
+
+D4-7A-E2   (hex)		Samsung Electronics Co.,Ltd
+D47AE2     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+68-54-FD   (hex)		Amazon Technologies Inc.
+6854FD     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-03-BC   (hex)		COT GmbH
+0003BC     (base 16)		COT GmbH
+				Güterstraße 5
+				    
+				DE
+
+D4-B1-69   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+D4B169     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+				,Le Shi Building, No.105 Yaojiayuan Road,Chaoyang District,Beijing,China
+				beijing  beijing  100025
+				CN
+
+E4-47-90   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+E44790     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+38-45-4C   (hex)		Light Labs, Inc.
+38454C     (base 16)		Light Labs, Inc.
+				636 Ramona St.
+				Palo Alto  CA  94301
+				US
+
+00-0A-49   (hex)		F5 Networks, Inc.
+000A49     (base 16)		F5 Networks, Inc.
+				401 Elliott Ave. W.
+				Seattle  WA  98119
+				US
+
+00-A0-C8   (hex)		Adtran Inc
+00A0C8     (base 16)		Adtran Inc
+				901 EXPLORER BLVD.
+				HUNTSVILLE  AL  35806-2807
+				US
+
+F4-96-51   (hex)		NAKAYO Inc
+F49651     (base 16)		NAKAYO Inc
+				1-3-2, Soja-machi
+				Maebashi-shi  Gunma  371-0853
+				JP
+
+44-62-46   (hex)		Comat AG
+446246     (base 16)		Comat AG
+				Bernstrasse 4
+				Worb    3076
+				CH
+
+34-FC-B9   (hex)		Hewlett Packard Enterprise
+34FCB9     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+70-91-8F   (hex)		Weber-Stephen Products LLC
+70918F     (base 16)		Weber-Stephen Products LLC
+				1415 S. Roselle Rd
+				Palatine  IL  60067
+				US
+
+D8-E0-E1   (hex)		Samsung Electronics Co.,Ltd
+D8E0E1     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+7C-10-15   (hex)		Brilliant Home Technology, Inc.
+7C1015     (base 16)		Brilliant Home Technology, Inc.
+				762 Judith Ct
+				Incline Village  NV  89451
+				US
+
+D8-C7-71   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D8C771     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-2A-82   (hex)		Universal Global Scientific Industrial Co., Ltd.
+E02A82     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351,SEC.1, TAIPING RD.
+				TSAOTUEN,  NANTOU  54261
+				TW
+
+B0-F9-63   (hex)		Hangzhou H3C Technologies Co., Limited
+B0F963     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+D4-90-E0   (hex)		Topcon Electronics GmbH & Co. KG
+D490E0     (base 16)		Topcon Electronics GmbH & Co. KG
+				Industriestraße 7
+				Geisenheim    65366
+				DE
+
+A8-40-41   (hex)		Dragino Technology Co., Limited
+A84041     (base 16)		Dragino Technology Co., Limited
+				303, Block B, No 8; 349, Jian'An 1 Road,Bao'An
+				Shenzhen  GuangDong  518101
+				CN
+
+E0-22-02   (hex)		ARRIS Group, Inc.
+E02202     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D8-25-B0   (hex)		Rockeetech Systems Co.,Ltd.
+D825B0     (base 16)		Rockeetech Systems Co.,Ltd.
+				Unit 201, #6 Lane 51, Shuicheng S Rd.
+				Shanghai    201103
+				CN
+
+74-61-4B   (hex)		Chongqing Huijiatong Information Technology Co., Ltd.
+74614B     (base 16)		Chongqing Huijiatong Information Technology Co., Ltd.
+				Yubei District Longxi Street Hongjin Road No. 498, building  Jialeziguang No.1 12-12, 12-13, 12-13, 12-14, 12-15
+				Chongqing  Chongqing City  401120
+				CN
+
+98-D2-93   (hex)		Google, Inc.
+98D293     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+CC-B8-A8   (hex)		AMPAK Technology, Inc.
+CCB8A8     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+10-77-B0   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+1077B0     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+F0-1D-BC   (hex)		Microsoft Corporation
+F01DBC     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+34-04-9E   (hex)		IEEE Registration Authority
+34049E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-FB-29   (hex)		Zebra Technologies Inc.
+94FB29     (base 16)		Zebra Technologies Inc.
+				ONE ZEBRA PLAZA
+				HOLTSVILLE  NY  11742
+				US
+
+B0-70-2D   (hex)		Apple, Inc.
+B0702D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-19-C0   (hex)		Apple, Inc.
+6C19C0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-20-4F   (hex)		DEUTSCHE AEROSPACE AG
+00204F     (base 16)		DEUTSCHE AEROSPACE AG
+				GESCHAEFTSFELD
+				  BUNDESREPUBLIK  DEUTSCHLAND
+				DE
+
+00-DB-DF   (hex)		Intel Corporate
+00DBDF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+94-A0-4E   (hex)		Bostex Technology Co., LTD
+94A04E     (base 16)		Bostex Technology Co., LTD
+				NO.148 West MinZhou Road
+				Cixi City  Zhejiang Province  315301
+				CN
+
+8C-E1-17   (hex)		zte corporation
+8CE117     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+68-8A-F0   (hex)		zte corporation
+688AF0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C0-21-0D   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+C0210D     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+50-4B-5B   (hex)		CONTROLtronic GmbH
+504B5B     (base 16)		CONTROLtronic GmbH
+				Schragenhofstr. 35
+				Munich    80992
+				DE
+
+B4-74-47   (hex)		CoreOS
+B47447     (base 16)		CoreOS
+				PO Box 7775 #55097
+				San Francisco  CA  94120-7775
+				US
+
+80-D4-A5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+80D4A5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-B0-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04B0E7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-6A-2E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+446A2E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-58-7B   (hex)		JCT Healthcare
+AC587B     (base 16)		JCT Healthcare
+				1/25 London Road
+				Mile End South  South Australia  5031
+				AU
+
+10-62-EB   (hex)		D-Link International
+1062EB     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+00-08-94   (hex)		InnoVISION Multimedia Ltd.
+000894     (base 16)		InnoVISION Multimedia Ltd.
+				Rm 608, 6/F Tins Enterprises Centre,
+				Kowloon,    
+				HK
+
+48-00-33   (hex)		Technicolor CH USA Inc.
+480033     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+A0-6F-AA   (hex)		LG Innotek
+A06FAA     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+00-26-AB   (hex)		Seiko Epson Corporation
+0026AB     (base 16)		Seiko Epson Corporation
+				3-3-5 OWA
+				SUWA-SHI  NAGANO-KEN  392-8502
+				JP
+
+FC-10-C6   (hex)		Taicang T&W Electronics
+FC10C6     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+2C-6F-C9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+2C6FC9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+58-EF-68   (hex)		Belkin International Inc.
+58EF68     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista  null  90094
+				US
+
+00-0B-4F   (hex)		Verifone
+000B4F     (base 16)		Verifone
+				2099 Gateway Place
+				San Jose    95110
+				US
+
+60-C7-98   (hex)		Verifone
+60C798     (base 16)		Verifone
+				2455 Augustine Drive
+				Santa Clara  California  95054
+				
+
+C8-66-2C   (hex)		Beijing Haitai Fangyuan High Technology Co,.Ltd.
+C8662C     (base 16)		Beijing Haitai Fangyuan High Technology Co,.Ltd.
+				B1st&2nd  floor,Unit E，NO.9 Building,Zhongguancun Software Park,Dongbeiwang West Road 8.Haidian District,Beijing
+				Bei Jing    100094
+				CN
+
+80-96-CA   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+8096CA     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+18-65-71   (hex)		Top Victory Electronics (Taiwan) Co., Ltd.
+186571     (base 16)		Top Victory Electronics (Taiwan) Co., Ltd.
+				14F,No.166,Jian 1st Rd
+				New Taipei City  Taiwan  23511
+				TW
+
+F8-3F-51   (hex)		Samsung Electronics Co.,Ltd
+F83F51     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+50-D7-53   (hex)		CONELCOM GmbH
+50D753     (base 16)		CONELCOM GmbH
+				Trientlgasse 18c
+				Innsbruck    6020
+				AT
+
+0C-C4-7A   (hex)		Super Micro Computer, Inc.
+0CC47A     (base 16)		Super Micro Computer, Inc.
+				980 Rock Avenue
+				San Jose  California  95131
+				US
+
+34-D2-70   (hex)		Amazon Technologies Inc.
+34D270     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+50-79-5B   (hex)		Interexport Telecomunicaciones S.A.
+50795B     (base 16)		Interexport Telecomunicaciones S.A.
+				Cerro Colorado 5240 piso 14
+				Santiago  Region Metropolitana  8320000
+				US
+
+00-16-D9   (hex)		NINGBO BIRD CO.,LTD.
+0016D9     (base 16)		NINGBO BIRD CO.,LTD.
+				No.999 Dacheng East Road
+				Fenghua  Zhejiang  315500
+				CN
+
+6C-A7-FA   (hex)		YOUNGBO ENGINEERING INC.
+6CA7FA     (base 16)		YOUNGBO ENGINEERING INC.
+				132, Haewian-gil, Dunpo-myeon
+				Asan-si  Chungcheongnam-do  336-873
+				KR
+
+8C-7E-B3   (hex)		Lytro, Inc.
+8C7EB3     (base 16)		Lytro, Inc.
+				1300  Terra Bella Avenue
+				Mountain View  California  94043
+				US
+
+B4-B3-84   (hex)		ShenZhen Figigantic Electronic Co.,Ltd
+B4B384     (base 16)		ShenZhen Figigantic Electronic Co.,Ltd
+				5F NO.1 Bld East,Guole Industrial Zone,Lirong Road,Longhua New
+				ShenZhen  GuangDong  518109
+				CN
+
+78-28-CA   (hex)		Sonos, Inc.
+7828CA     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+00-C0-03   (hex)		GLOBALNET COMMUNICATIONS
+00C003     (base 16)		GLOBALNET COMMUNICATIONS
+				912, PLACE TRANS CANADA
+				CANADA  J4G  2M1
+				CA
+
+00-23-4A   (hex)		Private
+00234A     (base 16)		Private
+
+2C-40-2B   (hex)		Smart iBlue Technology Limited
+2C402B     (base 16)		Smart iBlue Technology Limited
+				Unit 12, 10/F., Hong Man Industrial Centre,2 Hong Man Street, Chai Wan, Hong Kong
+				Hong Kong    000
+				HK
+
+5C-6B-4F   (hex)		Hello Inc.
+5C6B4F     (base 16)		Hello Inc.
+				438 Shotwell Street
+				San Francisco  CA  94110
+				US
+
+2C-99-24   (hex)		ARRIS Group, Inc.
+2C9924     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D0-58-A8   (hex)		zte corporation
+D058A8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D0-71-C4   (hex)		zte corporation
+D071C4     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A0-CC-2B   (hex)		Murata Manufacturing Co., Ltd.
+A0CC2B     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+50-01-D9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5001D9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-27-1C   (hex)		MERCURY CORPORATION
+00271C     (base 16)		MERCURY CORPORATION
+				90, Gajaeul-ro, Seo-gu
+				INCHEON    22830
+				KR
+
+E0-D9-E3   (hex)		Eltex Enterprise Ltd.
+E0D9E3     (base 16)		Eltex Enterprise Ltd.
+				Okruzhnaya st. 29v
+				Novosibirsk    630020
+				RU
+
+80-5E-C0   (hex)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+805EC0     (base 16)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+				309, 3th Floor, No.16, Yun Ding North Road, Huli District
+				xiamen  Fujian  361015
+				CN
+
+00-7B-18   (hex)		SENTRY Co., LTD.
+007B18     (base 16)		SENTRY Co., LTD.
+				792,Pyeongcheon-ro,Wonmi-gu
+				Bucheon-si, Gyeonggi-do    420-805
+				KR
+
+14-4D-67   (hex)		Zioncom Electronics (Shenzhen) Ltd.
+144D67     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
+				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+4C-E1-73   (hex)		IEEE Registration Authority
+4CE173     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+0C-D8-6C   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+0CD86C     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+04-97-90   (hex)		Lartech telecom LLC
+049790     (base 16)		Lartech telecom LLC
+				Bolshoi Sampsonievski 68, lit. N, office 237
+				Saint-Petersburg    194100
+				RU
+
+28-EE-D3   (hex)		Shenzhen Super D Technology Co., Ltd
+28EED3     (base 16)		Shenzhen Super D Technology Co., Ltd
+				Room 201 , Building A former Qianhai Shenzhen-Hong Kong cooperation zone Shenzhen Bay all the way to No. 1 ( settled in Shenzhen Qianhai Business Secretary , Ltd. )
+				Shenzhen  Guangdong  518000
+				CN
+
+24-C4-4A   (hex)		zte corporation
+24C44A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+98-54-1B   (hex)		Intel Corporate
+98541B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+1C-40-E8   (hex)		SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD
+1C40E8     (base 16)		SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD
+				9F, K1 Mall, Xinsha street, Shajing District, Baoan
+				Shenzhen  Guangdong  518000
+				CN
+
+00-23-D2   (hex)		Inhand Electronics, Inc.
+0023D2     (base 16)		Inhand Electronics, Inc.
+				30 West Gude Drive
+				Rockville  Maryland  20850
+				US
+
+DC-0B-34   (hex)		LG Electronics (Mobile Communications)
+DC0B34     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+40-4E-36   (hex)		HTC Corporation
+404E36     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+A8-E7-05   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+A8E705     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+98-40-BB   (hex)		Dell Inc.
+9840BB     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-60-D6   (hex)		NovAtel Inc.
+0060D6     (base 16)		NovAtel Inc.
+				SUITE 200, 6715-8TH STREET NE
+				CALGARY, ALBERTA T2E 8M4    0000
+				CA
+
+50-3A-A0   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+503AA0     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+B0-95-8E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+B0958E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+C0-25-E9   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+C025E9     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+18-8B-15   (hex)		ShenZhen ZhongRuiJing Technology co.,LTD
+188B15     (base 16)		ShenZhen ZhongRuiJing Technology co.,LTD
+				4th Floor,Building 3,Meng Liyuan Industrial Park, Yousong Road, Longhua New District,Shenzhen,Guangdong Province,China
+				Shenzhen  Guangdong  518109
+				CN
+
+88-6B-0F   (hex)		Bluegiga Technologies OY
+886B0F     (base 16)		Bluegiga Technologies OY
+				P.O. BOX 120
+				FIN-02631  Espoo  
+				FI
+
+AC-84-C9   (hex)		Sagemcom Broadband SAS
+AC84C9     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+24-5C-BF   (hex)		NCSE
+245CBF     (base 16)		NCSE
+				Future of China Electronics Science & Technology
+				Beijing  Changping District  102200
+				CN
+
+2C-33-61   (hex)		Apple, Inc.
+2C3361     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-A4-D0   (hex)		Samsung Electronics Co.,Ltd
+60A4D0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-87-01   (hex)		Samsung Electronics Co.,Ltd
+008701     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-99-60   (hex)		Samsung Electronics Co.,Ltd
+5C9960     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-62-AB   (hex)		Sumavision Technologies Co.,Ltd
+9C62AB     (base 16)		Sumavision Technologies Co.,Ltd
+				6F, Block A2, Power Creative Building,No.1 Shangdi East Road, Haidian District
+				Beijing    100085
+				CN
+
+C8-F9-46   (hex)		LOCOSYS Technology Inc.
+C8F946     (base 16)		LOCOSYS Technology Inc.
+				20F.-13, No. 79, Sec. 1, Xintai 5th Rd, Xizhi Dist.
+				New Taipei City  Taiwan  22101
+				TW
+
+48-7B-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+487B6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-3F-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+883FD3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-0D-65   (hex)		Shenzhen Vsun Communication Technology Co., Ltd.
+240D65     (base 16)		Shenzhen Vsun Communication Technology Co., Ltd.
+				3/F., 19 Block, Wisdomland Business Park, No.2 Nantou Gateway Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+00-0B-14   (hex)		ViewSonic Corporation
+000B14     (base 16)		ViewSonic Corporation
+				381 Brea Canyon Road
+				Walnut  California  91789
+				US
+
+C8-02-8F   (hex)		Nova Electronics (Shanghai) Co., Ltd.
+C8028F     (base 16)		Nova Electronics (Shanghai) Co., Ltd.
+				Room B706, 7th Floor, MET Plaza, No.268 Tongxie Road
+				Shanghai  Changning District  200335
+				CN
+
+A4-60-11   (hex)		Verifone
+A46011     (base 16)		Verifone
+				2099 Gateway Place
+				San Jose  CA  95110
+				US
+
+5C-A9-33   (hex)		Luma Home
+5CA933     (base 16)		Luma Home
+				75 5th St
+				Atlanta  GA  30308
+				US
+
+00-13-7E   (hex)		CorEdge Networks, Inc.
+00137E     (base 16)		CorEdge Networks, Inc.
+				7600 Boone Ave N
+				Brooklyn Park  MN  55428
+				US
+
+D8-14-D6   (hex)		SURE SYSTEM Co Ltd
+D814D6     (base 16)		SURE SYSTEM Co Ltd
+				Bakurou-machi 4-7-5
+				Cyuou-ku  Osaka  541-0059
+				JP
+
+6C-EF-C6   (hex)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
+6CEFC6     (base 16)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
+				Nangang Industrial Building, Tangtou Industrial Park, Shiyan, Baoan
+				Shenzhen  Guangdong  518108
+				CN
+
+10-1D-C0   (hex)		Samsung Electronics Co.,Ltd
+101DC0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-23-41   (hex)		Vanderbilt International (SWE) AB 
+002341     (base 16)		Vanderbilt International (SWE) AB 
+				Englundavaegen 7
+				Solna    SE-171 41 
+				SE
+
+40-7C-7D   (hex)		Nokia
+407C7D     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+24-59-0B   (hex)		White Sky Inc. Limited
+24590B     (base 16)		White Sky Inc. Limited
+				Floor 5, Building 1, No. 6, Lane 365, Xinhua Road
+				Shanghai    200052
+				CN
+
+68-EB-AE   (hex)		Samsung Electronics Co.,Ltd
+68EBAE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+44-4E-1A   (hex)		Samsung Electronics Co.,Ltd
+444E1A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-33-65   (hex)		TEM Mobile Limited
+143365     (base 16)		TEM Mobile Limited
+				RM1703, North Block, Cangsong Building, Tairan 6 road, Futian District, Shenzhen.
+				Shenzhen  Guangdong  518000
+				CN
+
+80-18-44   (hex)		Dell Inc.
+801844     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+78-47-1D   (hex)		Samsung Electronics Co.,Ltd
+78471D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-75-91   (hex)		Samsung Electronics Co.,Ltd
+A07591     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-DF-A4   (hex)		Samsung Electronics Co.,Ltd
+0CDFA4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-72-BF   (hex)		Murata Manufacturing Co., Ltd.
+B072BF     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+70-1D-C4   (hex)		NorthStar Battery Company, LLC
+701DC4     (base 16)		NorthStar Battery Company, LLC
+				4000 Continental Way
+				Springfield  MO  65803
+				US
+
+64-DA-A0   (hex)		Robert Bosch Smart Home GmbH
+64DAA0     (base 16)		Robert Bosch Smart Home GmbH
+				Schockenriedstraße 17
+				Stuttgart    70565
+				DE
+
+14-B8-37   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+14B837     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+5C-86-13   (hex)		Beijing Zhoenet Technology Co., Ltd
+5C8613     (base 16)		Beijing Zhoenet Technology Co., Ltd
+				Room B16,No. 8 WenHua East Road,Changping District
+				Beijing  Beijing  102208
+				CN
+
+CC-73-14   (hex)		HONG KONG WHEATEK TECHNOLOGY LIMITED
+CC7314     (base 16)		HONG KONG WHEATEK TECHNOLOGY LIMITED
+				Building 20，No.2277, ZuChongZhi Road, PuDong District, Shanghai
+				shanghai    201203
+				CN
+
+B8-EE-65   (hex)		Liteon Technology Corporation
+B8EE65     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+98-5B-B0   (hex)		KMDATA INC.
+985BB0     (base 16)		KMDATA INC.
+				505-2, Daeryung Techno Town 1cha, 18, Gasan Digital 2-ro, Geumcheon-gu
+				Seoul    153771
+				KR
+
+E0-06-E6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+E006E6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+BC-85-56   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+BC8556     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+34-23-87   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+342387     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-26-37   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+002637     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Metan dong
+				Suwon  Kyung-ki do  443-743
+				KR
+
+00-21-19   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+002119     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Metan 3 dong
+				Suwon  Kyung-gi do  443-743
+				KR
+
+F4-D9-FB   (hex)		Samsung Electronics Co.,Ltd
+F4D9FB     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu,
+				Suwon  Gyeonggi-do  443-742
+				KR
+
+3C-62-00   (hex)		Samsung Electronics Co.,Ltd
+3C6200     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu,
+				Suwon-City  Gyeonggi-do  443-742
+				KR
+
+C4-17-FE   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+C417FE     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+94-39-E5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+9439E5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+64-27-37   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+642737     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+A4-17-31   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+A41731     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+5C-A3-9D   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+5CA39D     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				Suwon    443-743
+				US
+
+90-18-7C   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+90187C     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				Suwon  KYUNGGI-DO  443-743
+				KR
+
+50-CC-F8   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+50CCF8     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				Metan Dong 314, Youngtong Gu
+				Suwon  Kyung-gi Do.  443-743
+				KR
+
+00-22-3B   (hex)		Communication Networks, LLC
+00223B     (base 16)		Communication Networks, LLC
+				3 Corporate Drive
+				Danbury  CT  06810
+				US
+
+C0-F8-DA   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+C0F8DA     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-11-FF   (hex)		Digitro Tecnologia Ltda
+0011FF     (base 16)		Digitro Tecnologia Ltda
+				Rua: Professora Sofia Quint de Souza, 167
+				Florianópolis  Santa Catarina  88085-040
+				BR
+
+00-1B-94   (hex)		T.E.M.A. S.p.A.
+001B94     (base 16)		T.E.M.A. S.p.A.
+				via della Scienza 21 A/C
+				Castelnuovo Rangone  Modena  41051
+				IT
+
+F0-F0-02   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+F0F002     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C0-CB-38   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+C0CB38     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+F0-7B-CB   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+F07BCB     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+50-B7-C3   (hex)		Samsung Electronics Co.,Ltd
+50B7C3     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3Dong, Yeongtong-Gu
+				Suwon  Geyonggi  443742
+				KR
+
+1C-5A-3E   (hex)		Samsung Electronics Co.,Ltd
+1C5A3E     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3dong, Yeongtong-Gu
+				Suwon    443742
+				US
+
+A0-21-95   (hex)		Samsung Electronics Co.,Ltd
+A02195     (base 16)		Samsung Electronics Co.,Ltd
+				#416, Maetan 3-dong
+				Suwon-si  Gyeonggi-do  443-742
+				KR
+
+B0-78-70   (hex)		Wi-NEXT, Inc.
+B07870     (base 16)		Wi-NEXT, Inc.
+				530 Lytton Avenue
+				Palo Alto  CA  94301
+				US
+
+E4-7C-F9   (hex)		Samsung Electronics Co.,Ltd
+E47CF9     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu
+				Suwon  Gyeonggi-do  443742
+				KR
+
+48-44-F7   (hex)		Samsung Electronics Co.,Ltd
+4844F7     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu
+				Suwon  Gyeonggi-do  443742
+				KR
+
+00-13-77   (hex)		Samsung Electronics Co.,Ltd
+001377     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3Dong, Yeongtong-Gu
+				Suwon  Geyonggi  443742
+				KR
+
+00-24-54   (hex)		Samsung Electronics Co.,Ltd
+002454     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3Dong, Yeongtong-Gu
+				Suwon  Geyonggi  443742
+				KR
+
+E8-11-32   (hex)		Samsung Electronics Co.,Ltd
+E81132     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3Dong, Yeongtong-Gu
+				Suwon  Geyonggi  443742
+				KR
+
+C0-65-99   (hex)		Samsung Electronics Co.,Ltd
+C06599     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-79-AD   (hex)		Samsung Electronics Co.,Ltd
+BC79AD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+4C-3C-16   (hex)		Samsung Electronics Co.,Ltd
+4C3C16     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-73-E0   (hex)		Samsung Electronics Co.,Ltd
+0073E0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-17-D5   (hex)		Samsung Electronics Co.,Ltd
+0017D5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1
+				Gumi-City  Gyeong-Buk  730-350
+				KR
+
+00-1E-7D   (hex)		Samsung Electronics Co.,Ltd
+001E7D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-1D-F6   (hex)		Samsung Electronics Co.,Ltd
+001DF6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-08-F1   (hex)		Samsung Electronics Co.,Ltd
+F008F1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+58-C3-8B   (hex)		Samsung Electronics Co.,Ltd
+58C38B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-E3-B2   (hex)		Samsung Electronics Co.,Ltd
+00E3B2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-19-66   (hex)		Samsung Electronics Co.,Ltd
+301966     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-E7-7E   (hex)		Samsung Electronics Co.,Ltd
+F0E77E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-35-0A   (hex)		Samsung Electronics Co.,Ltd
+94350A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-1D-25   (hex)		Samsung Electronics Co.,Ltd
+001D25     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-C1-F1   (hex)		SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd  
+E4C1F1     (base 16)		SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd  
+				10F, Block D, 5th Building, Shenzhen Software Industrial Base, Haitian 2nd Rd,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+24-0A-C4   (hex)		Espressif Inc.
+240AC4     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+34-31-11   (hex)		Samsung Electronics Co.,Ltd
+343111     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-FD-0E   (hex)		Samsung Electronics Co.,Ltd
+08FD0E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+04-1B-BA   (hex)		Samsung Electronics Co.,Ltd
+041BBA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-9B-39   (hex)		Samsung Electronics Co.,Ltd
+889B39     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-32-CB   (hex)		Samsung Electronics Co.,Ltd
+E432CB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-8C-CD   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+BC8CCD     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong    24180
+				US
+
+D0-22-BE   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+D022BE     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong    24180
+				US
+
+EC-9B-F3   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+EC9BF3     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+F4-09-D8   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+F409D8     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+10-D5-42   (hex)		Samsung Electronics Co.,Ltd
+10D542     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-82-1F   (hex)		Samsung Electronics Co.,Ltd
+A0821F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-6B-CA   (hex)		Samsung Electronics Co.,Ltd
+F06BCA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+AC-36-13   (hex)		Samsung Electronics Co.,Ltd
+AC3613     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-26-11   (hex)		Licera AB
+002611     (base 16)		Licera AB
+				Teknikringen 1C
+				Linköping    58330
+				SE
+
+00-50-94   (hex)		ARRIS Group, Inc.
+005094     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E0-B7-B1   (hex)		ARRIS Group, Inc.
+E0B7B1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D8-25-22   (hex)		ARRIS Group, Inc.
+D82522     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F0-03-8C   (hex)		AzureWave Technology Inc.
+F0038C     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+18-D2-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+18D276     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-52-18   (hex)		Wuxi Keboda Electron Co.Ltd
+005218     (base 16)		Wuxi Keboda Electron Co.Ltd
+				No.155 Chunhui Road, Xishan District, 
+				Wuxi  Jiangsu  214101
+				CN
+
+00-1E-81   (hex)		CNB Technology Inc.
+001E81     (base 16)		CNB Technology Inc.
+				#701 Star Valley, 60-11 Gasan-Dong,
+				Seoul    153777
+				KR
+
+7C-A9-7D   (hex)		Objenious
+7CA97D     (base 16)		Objenious
+				20 rue de Troyon
+				SEVRES    92310
+				FR
+
+A8-A6-48   (hex)		Qingdao Hisense Communications Co.,Ltd.
+A8A648     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Jiangxi Road
+				Qingdao  Shandong  266071
+				CN
+
+98-5D-AD   (hex)		Texas Instruments
+985DAD     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D4-36-39   (hex)		Texas Instruments
+D43639     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+BC-28-2C   (hex)		e-Smart Systems Pvt. Ltd
+BC282C     (base 16)		e-Smart Systems Pvt. Ltd
+				483 FIE, , Patparganj Industrial Area
+				Delhi  Delhi  110092
+				IN
+
+A4-0D-BC   (hex)		Xiamen Intretech Inc.
+A40DBC     (base 16)		Xiamen Intretech Inc.
+				 FL 7 NO 588 JIAHE RD TORCH CARDEN HIGH-TECH ZONE
+				Xiamen  FUJIAN  361006
+				CN
+
+84-EF-18   (hex)		Intel Corporate
+84EF18     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+84-C1-C1   (hex)		Juniper Networks
+84C1C1     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+A8-1B-6A   (hex)		Texas Instruments
+A81B6A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+34-3D-C4   (hex)		BUFFALO.INC
+343DC4     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+B0-F8-93   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
+B0F893     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
+				9th Floor, No. 5 Building, 2145 Jinshajiang Rd., Putuo District
+				Shanghai    200333
+				CN
+
+C4-11-E0   (hex)		Bull Group Co., Ltd
+C411E0     (base 16)		Bull Group Co., Ltd
+				No.32 Sanhai Road,East Guanhaiwei Industrial Zone, Cixi City, Zhejiang, P.R.China
+				Cixi  Zhejiang  315314
+				CN
+
+28-C8-7A   (hex)		ARRIS Group, Inc.
+28C87A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+48-FD-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48FD8E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-06-23   (hex)		Ultra Electronics Sonar System Division
+7C0623     (base 16)		Ultra Electronics Sonar System Division
+				419 Bridport Road
+				Greenford  Middlesex  UB6 8UA
+				GB
+
+28-AC-67   (hex)		Mach Power, Rappresentanze Internazionali s.r.l.
+28AC67     (base 16)		Mach Power, Rappresentanze Internazionali s.r.l.
+				CUPA S.ANIELLO, 112
+				NAPOLI  Napoli  80146
+				IT
+
+14-82-5B   (hex)		Hefei Radio Communication Technology Co., Ltd 
+14825B     (base 16)		Hefei Radio Communication Technology Co., Ltd 
+				No.108, YinXing Road, High-tech Development Zone, Hefei, Anhui Province, China
+				Hefei  Anhui Province  230088
+				CN
+
+64-12-69   (hex)		ARRIS Group, Inc.
+641269     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-02-C9   (hex)		Mellanox Technologies, Inc.
+0002C9     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+08-00-51   (hex)		ExperData
+080051     (base 16)		ExperData
+				88, RUE BRILLAT SAVARIN
+				0000    0000
+				FR
+
+00-12-6C   (hex)		Visonic Technologies 1993 Ltd.
+00126C     (base 16)		Visonic Technologies 1993 Ltd.
+				24 Habarzel St.
+				Tel Aviv    69710
+				IL
+
+AC-61-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC6175     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-44-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+244427     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-80-C7   (hex)		XIRCOM
+0080C7     (base 16)		XIRCOM
+				26025 MUREAU ROAD
+				CALABASAS  CA  91302
+				US
+
+00-01-38   (hex)		XAVi Technologies Corp.
+000138     (base 16)		XAVi Technologies Corp.
+				9F, No. 129, Hsing Te Rd,
+				241 TAIWAN  241 TAIWAN  R.O.C.
+				TW
+
+00-16-6D   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+00166D     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+				8/F.high Tech Plaza,TianAn Cyberpark,Chegongmiao
+				Shenzhen  Guangdong  518040
+				CN
+
+3C-91-57   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+3C9157     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+				5F Building 2,No.56,Liuhe Road,Xihu District
+				Hangzhou  Zhejiang  310023
+				CN
+
+00-00-D8   (hex)		Novell, Inc.
+0000D8     (base 16)		Novell, Inc.
+				122 EAST 1700 SOUTH M/S:E-12-1
+				PROVO  UT  84601
+				US
+
+00-1F-46   (hex)		Nortel Networks
+001F46     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson    75082
+				US
+
+00-30-93   (hex)		Sonnet Technologies, Inc
+003093     (base 16)		Sonnet Technologies, Inc
+				8 Autry
+				Irvine,  CA  92618
+				US
+
+00-03-4B   (hex)		Nortel Networks
+00034B     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-25-61   (hex)		ProCurve Networking by HP
+002561     (base 16)		ProCurve Networking by HP
+				60 Alexandra Terrace
+				0000    118502
+				SG
+
+00-80-58   (hex)		PRINTER SYSTEMS CORP.
+008058     (base 16)		PRINTER SYSTEMS CORP.
+				207 PARRY PARKWAY
+				GAITHERSBURG  MD  20877
+				US
+
+00-15-7D   (hex)		POSDATA
+00157D     (base 16)		POSDATA
+				276-2,Seohyeon-dong,Bundang-gu,
+				Seongnam-City  Kyeonggi-Do  463-775
+				KR
+
+48-49-C7   (hex)		Samsung Electronics Co.,Ltd
+4849C7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+84-98-66   (hex)		Samsung Electronics Co.,Ltd
+849866     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-1C-9C   (hex)		Nortel Networks
+001C9C     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1B-25   (hex)		Nortel Networks
+001B25     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-19-E1   (hex)		Nortel Networks
+0019E1     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1D-42   (hex)		Nortel Networks
+001D42     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-14-0D   (hex)		Nortel Networks
+00140D     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-0E-40   (hex)		Nortel Networks
+000E40     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+FC-B0-C4   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
+FCB0C4     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
+				22F Info-Tech Building
+				Shanghai  Shanghai  200092
+				CN
+
+A8-9D-D2   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
+A89DD2     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
+				22F Info-Tech Building
+				Shanghai  Shanghai  200092
+				CN
+
+00-E0-0F   (hex)		Shanghai Baud Data Communication Co.,Ltd.
+00E00F     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
+				COMMUNICATION DEVELOPMENT CORP
+				SHANGHAI    0000
+				CN
+
+28-BE-03   (hex)		TCT mobile ltd
+28BE03     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+90-3A-E6   (hex)		PARROT SA
+903AE6     (base 16)		PARROT SA
+				174 Quai de Jemmapes
+				Paris    75010
+				FR
+
+A0-98-ED   (hex)		Shandong Intelligent Optical Communication Development Co., Ltd.
+A098ED     (base 16)		Shandong Intelligent Optical Communication Development Co., Ltd.
+				No.149 Yingcui Road,Torch Town,Advanced Technique Development Area
+				Jining  Shandong  272023
+				CN
+
+00-0E-F4   (hex)		Kasda Networks Inc
+000EF4     (base 16)		Kasda Networks Inc
+				B-31 Building, Tanglang Industry Zone
+				Shenzhen  Guangdong Province  518055
+				CN
+
+00-16-7A   (hex)		Skyworth Overseas Development Ltd.
+00167A     (base 16)		Skyworth Overseas Development Ltd.
+				Room 1505-06,Westlands Centre
+				0000    0000
+				HK
+
+A4-29-40   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+A42940     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+E4-A3-87   (hex)		Control Solutions LLC
+E4A387     (base 16)		Control Solutions LLC
+				2520 Diehl Rd
+				Aurora  IL  60502
+				US
+
+18-80-F5   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+1880F5     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+10-E8-78   (hex)		Nokia
+10E878     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+10-F9-6F   (hex)		LG Electronics (Mobile Communications)
+10F96F     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+C4-43-8F   (hex)		LG Electronics (Mobile Communications)
+C4438F     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+A0-91-69   (hex)		LG Electronics (Mobile Communications)
+A09169     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+28-6C-07   (hex)		XIAOMI Electronics,CO.,LTD
+286C07     (base 16)		XIAOMI Electronics,CO.,LTD
+				Xiaomi Building, No.68 Qinghe Middle Street
+				Haidian District  Beijing  100085
+				CN
+
+00-22-80   (hex)		A2B Electronics AB
+002280     (base 16)		A2B Electronics AB
+				Box 14
+				Motala    S-591 21
+				SE
+
+40-4A-D4   (hex)		Widex A/S
+404AD4     (base 16)		Widex A/S
+				Nymoellevej 6
+				Lynge  Alleroed  DK3540
+				DK
+
+98-93-CC   (hex)		LG ELECTRONICS INC
+9893CC     (base 16)		LG ELECTRONICS INC
+				19-1, Cheongho-ri, Jinwi-myeon
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+3C-CD-93   (hex)		LG ELECTRONICS INC
+3CCD93     (base 16)		LG ELECTRONICS INC
+				19-1, CHEONGHO-RI, JINWI-MYEON
+				PYEONGTAEK  GYEONGGI-DO  451-713
+				KR
+
+20-21-A5   (hex)		LG Electronics (Mobile Communications)
+2021A5     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+6C-D6-8A   (hex)		LG Electronics (Mobile Communications)
+6CD68A     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+CC-79-CF   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+CC79CF     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,Shenzhen,P.R.C
+				ShenZhen  Guangdong  518000
+				CN
+
+00-19-25   (hex)		Intelicis Corporation
+001925     (base 16)		Intelicis Corporation
+				4633 Old Ironsides Drive, Suite 150
+				Santa Clara  CA  95054
+				US
+
+94-76-B7   (hex)		Samsung Electronics Co.,Ltd
+9476B7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+2C-54-CF   (hex)		LG Electronics (Mobile Communications)
+2C54CF     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+48-59-29   (hex)		LG Electronics (Mobile Communications)
+485929     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+58-A2-B5   (hex)		LG Electronics (Mobile Communications)
+58A2B5     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-24-83   (hex)		LG Electronics (Mobile Communications)
+002483     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-1F-E3   (hex)		LG Electronics (Mobile Communications)
+001FE3     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+F0-42-1C   (hex)		Intel Corporate
+F0421C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-0F-62   (hex)		Alcatel Bell Space N.V.
+000F62     (base 16)		Alcatel Bell Space N.V.
+				Berkenrodelei 33
+				Hoboken  Antwerpen  B-2660
+				BE
+
+00-1C-D8   (hex)		BlueAnt Wireless
+001CD8     (base 16)		BlueAnt Wireless
+				245 St.Kilda Rd, St Kilda
+				Melbourne  Victoria  3182
+				AU
+
+00-19-AB   (hex)		Raycom CO ., LTD
+0019AB     (base 16)		Raycom CO ., LTD
+				A,3-4/FL, Building 1,27 Chuangxin Road,
+				Beijing    102200
+				CN
+
+4C-33-4E   (hex)		HIGHTECH
+4C334E     (base 16)		HIGHTECH
+				No202.gsif, 4 Gyeonggang-ro 2326 beon-gil
+				Gangneung-si  Gangwon-do  25570
+				KR
+
+7C-70-BC   (hex)		IEEE Registration Authority
+7C70BC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E8-18-63   (hex)		IEEE Registration Authority
+E81863     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+2C-D1-41   (hex)		IEEE Registration Authority
+2CD141     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+3C-39-E7   (hex)		IEEE Registration Authority
+3C39E7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+BC-66-41   (hex)		IEEE Registration Authority
+BC6641     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-E4-DA   (hex)		IEEE Registration Authority
+80E4DA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+88-5D-90   (hex)		IEEE Registration Authority
+885D90     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C8-8E-D1   (hex)		IEEE Registration Authority
+C88ED1     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B0-1F-81   (hex)		IEEE Registration Authority
+B01F81     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+54-9A-11   (hex)		IEEE Registration Authority
+549A11     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B8-D8-12   (hex)		IEEE Registration Authority
+B8D812     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+1C-21-D1   (hex)		IEEE Registration Authority
+1C21D1     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+28-36-38   (hex)		IEEE Registration Authority
+283638     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F4-85-C6   (hex)		FDT Technologies
+F485C6     (base 16)		FDT Technologies
+				14027 Memorial Drive #132
+				Houston  TX  77024
+				US
+
+D4-04-FF   (hex)		Juniper Networks
+D404FF     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C8-75-5B   (hex)		Quantify Technology Pty. Ltd.
+C8755B     (base 16)		Quantify Technology Pty. Ltd.
+				Suite 1, 4 Sarich Way
+				Bentley  Western Australia  6102
+				AU
+
+88-12-4E   (hex)		Qualcomm Inc.
+88124E     (base 16)		Qualcomm Inc.
+				1700 Technology Drive
+				San Jose  CA  95110
+				US
+
+00-14-28   (hex)		Vocollect Inc
+001428     (base 16)		Vocollect Inc
+				703 Rodi Road
+				Pittsburgh  PA  15235
+				US
+
+00-6B-9E   (hex)		Vizio, Inc
+006B9E     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+4C-66-41   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+4C6641     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+5C-A8-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CA86A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-1B-32   (hex)		QLogic Corporation
+001B32     (base 16)		QLogic Corporation
+				26650 Aliso Viejo Parkway
+				Aliso Viejo  CA  92656
+				US
+
+00-17-CA   (hex)		Qisda Corporation
+0017CA     (base 16)		Qisda Corporation
+				157 Shan Ying Road,
+				GueiShan  Taoyuan,  333
+				TW
+
+70-F3-95   (hex)		Universal Global Scientific Industrial Co., Ltd.
+70F395     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351,SEC.1, TAIPING RD.
+				TSAOTUEN,  NANTOU  54261
+				TW
+
+48-F7-C0   (hex)		Technicolor CH USA Inc.
+48F7C0     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+00-15-B7   (hex)		Toshiba
+0015B7     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome    1988710
+				JP
+
+E8-9D-87   (hex)		Toshiba
+E89D87     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+E0-95-79   (hex)		ORTHOsoft inc, d/b/a Zimmer CAS
+E09579     (base 16)		ORTHOsoft inc, d/b/a Zimmer CAS
+				75 Queen Street, Suite 3300
+				Montreal  Quebec  H3C 2N6
+				CA
+
+A0-AD-A1   (hex)		JMR Electronics, Inc
+A0ADA1     (base 16)		JMR Electronics, Inc
+				8968 Fullbright Avenue
+				Chatsworth  California  91311
+				US
+
+BC-C0-0F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+BCC00F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+9C-A5-C0   (hex)		vivo Mobile Communication Co., Ltd.
+9CA5C0     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong  523860
+				CN
+
+80-C6-AB   (hex)		Technicolor CH USA Inc.
+80C6AB     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+90-A4-DE   (hex)		Wistron Neweb Corporation
+90A4DE     (base 16)		Wistron Neweb Corporation
+				20 Park Avenue II, Hsinchu Science Park, 
+				Hsinchu     308
+				TW
+
+70-E2-84   (hex)		Wistron Infocomm (Zhongshan) Corporation
+70E284     (base 16)		Wistron Infocomm (Zhongshan) Corporation
+				No.38,East Keji Road,Zhongshan Torch Development Zone,Zhongshan City,Guangdong,China
+				Zhongshan  Guangdong  528437
+				CN
+
+A8-54-B2   (hex)		Wistron Neweb Corporation
+A854B2     (base 16)		Wistron Neweb Corporation
+				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
+				HsinChu  Taiwan  308
+				TW
+
+30-44-A1   (hex)		Shanghai Nanchao Information Technology
+3044A1     (base 16)		Shanghai Nanchao Information Technology
+				Floor 1th, building 13, No.368 Zhangjiang Road, Pudong New District, Shanghai
+				shanghai    200000
+				CN
+
+CC-03-FA   (hex)		Technicolor CH USA Inc.
+CC03FA     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+E0-AC-F1   (hex)		Cisco Systems, Inc
+E0ACF1     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-01-5B   (hex)		ITALTEL S.p.A/RF-UP-I
+00015B     (base 16)		ITALTEL S.p.A/RF-UP-I
+				20019 Cast.Settimo M.se (MI)
+				    
+				IT
+
+00-A0-A8   (hex)		RENEX CORPORATION
+00A0A8     (base 16)		RENEX CORPORATION
+				2750 KILLARNEY DRIVE
+				WOODBRIDGE  VA  22192
+				US
+
+00-C0-AB   (hex)		Telco Systems, Inc. 
+00C0AB     (base 16)		Telco Systems, Inc. 
+				15 Berkshire Road
+				Mansfield  MA  02048
+				US
+
+00-23-F8   (hex)		Zyxel Communications Corporation
+0023F8     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+00-19-CB   (hex)		Zyxel Communications Corporation
+0019CB     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+2C-09-4D   (hex)		Raptor Engineering, LLC
+2C094D     (base 16)		Raptor Engineering, LLC
+				2556 Anderson Dr.
+				Belvidere  IL  61008
+				US
+
+AC-37-43   (hex)		HTC Corporation
+AC3743     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+00-1D-7E   (hex)		Cisco-Linksys, LLC
+001D7E     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+E4-FB-8F   (hex)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
+E4FB8F     (base 16)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
+				No.999,Dacheng East Road,Fenghua City,Zhejiang Province,China.
+				Fenghua  Zhejiang  315500
+				CN
+
+10-BD-55   (hex)		Q-Lab Corporation
+10BD55     (base 16)		Q-Lab Corporation
+				800 Canterbury Rd
+				Westlake  OH  44145
+				US
+
+C4-49-BB   (hex)		MITSUMI ELECTRIC CO.,LTD.
+C449BB     (base 16)		MITSUMI ELECTRIC CO.,LTD.
+				2-11-2, Tsurumaki
+				Tama-shi  Tokyo  206-8567
+				JP
+
+FC-2D-5E   (hex)		zte corporation
+FC2D5E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+B4-04-18   (hex)		Smartchip Integrated Inc.
+B40418     (base 16)		Smartchip Integrated Inc.
+				9B,Science Plaza,1355 JinJiHu Avenue,Suzhou Industrial Park
+				Suzhou  Jiangsu  215021
+				CN
+
+90-CF-7D   (hex)		Qingdao Hisense Communications Co.,Ltd.
+90CF7D     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+F4-0A-4A   (hex)		INDUSNET Communication Technology Co.,LTD
+F40A4A     (base 16)		INDUSNET Communication Technology Co.,LTD
+				3th floor A block,No11 Gaopeng st,Wuhou district
+				chengdu  sichuan  610041
+				CN
+
+F8-5A-00   (hex)		Sanford LP
+F85A00     (base 16)		Sanford LP
+				6655 Peachtree Dunwoody Road
+				Atlanta  GA  30228
+				US
+
+FC-55-DC   (hex)		Baltic Latvian Universal Electronics LLC
+FC55DC     (base 16)		Baltic Latvian Universal Electronics LLC
+				5706 Corsa Avenue Suite 102
+				Westlake Village  CA  91362
+				US
+
+94-18-82   (hex)		Hewlett Packard Enterprise
+941882     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+60-38-E0   (hex)		Belkin International Inc.
+6038E0     (base 16)		Belkin International Inc.
+				12045 E. Waterfront Drive
+				Playa Vista  CA  90094
+				US
+
+88-50-DD   (hex)		Infiniband Trade Association 
+8850DD     (base 16)		Infiniband Trade Association 
+				3855 SW 153rd Drive
+				Beaverton  OR  97003
+				US
+
+D0-B2-C4   (hex)		Technicolor CH USA Inc.
+D0B2C4     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+50-AB-3E   (hex)		Qibixx AG
+50AB3E     (base 16)		Qibixx AG
+				Bahnhofstrasse 2
+				Buchs  SG  9471
+				CH
+
+38-76-CA   (hex)		Shenzhen Smart Intelligent Technology Co.Ltd
+3876CA     (base 16)		Shenzhen Smart Intelligent Technology Co.Ltd
+				Gaoxin South 4th Road Hi-Tech Industry Park, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+04-27-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+042758     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-E3-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9CE374     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-D2-E9   (hex)		YOKOTE SEIKO CO., LTD.
+8CD2E9     (base 16)		YOKOTE SEIKO CO., LTD.
+				10-18 Minami-Gosyono Yasumoto
+				Yokote-City  Akita  013-0811
+				JP
+
+B8-BB-AF   (hex)		Samsung Electronics Co.,Ltd
+B8BBAF     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+60-C5-AD   (hex)		Samsung Electronics Co.,Ltd
+60C5AD     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+44-2C-05   (hex)		AMPAK Technology, Inc.
+442C05     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+8C-89-7A   (hex)		AUGTEK
+8C897A     (base 16)		AUGTEK
+				Tuanjie Road No.100, Building C, Room 521 
+				Nanjing  Jiangsu  211899
+				CN
+
+F8-45-AD   (hex)		Konka Group Co., Ltd.
+F845AD     (base 16)		Konka Group Co., Ltd.
+				Shenzhen Konka R & D Building, 28th floor 15-24
+				Nanshan District  Guangdong  00000
+				CN
+
+00-0F-E2   (hex)		Hangzhou H3C Technologies Co., Limited
+000FE2     (base 16)		Hangzhou H3C Technologies Co., Limited
+				Oriental Electronic Bld., NO.2,Chuangye Road
+				Hai-Dian District  Beijing  100085
+				CN
+
+80-F6-2E   (hex)		Hangzhou H3C Technologies Co., Limited
+80F62E     (base 16)		Hangzhou H3C Technologies Co., Limited
+				310 Liuhe Road, Zhijiang Science Park
+				Hangzhou  Zhejiang,   310053
+				CN
+
+60-8D-17   (hex)		Sentrus Government Systems Division, Inc
+608D17     (base 16)		Sentrus Government Systems Division, Inc
+				141 Chesterfield Industrial Blvd
+				Chesterfield  MO  63005-1219
+				US
+
+EC-AD-B8   (hex)		Apple, Inc.
+ECADB8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-01-A7   (hex)		Apple, Inc.
+9801A7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-79-ED   (hex)		SHARP Corporation
+6879ED     (base 16)		SHARP Corporation
+				22-22,Nagaike-cho
+				Osaka city  Osaka prefecture  545-8522
+				JP
+
+00-23-82   (hex)		Lih Rong electronic Enterprise Co., Ltd.
+002382     (base 16)		Lih Rong electronic Enterprise Co., Ltd.
+				No. 2, Lane 387, Hsin Shu Rd.
+				Hsin Chuang City,  Taipei  242
+				TW
+
+24-F0-94   (hex)		Apple, Inc.
+24F094     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-6D-41   (hex)		Apple, Inc.
+086D41     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-D5-BD   (hex)		Intel Corporate
+B4D5BD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+98-AA-3C   (hex)		Will i-tech Co., Ltd.
+98AA3C     (base 16)		Will i-tech Co., Ltd.
+				34, Deokcheon-ro, Manan-gu, Anyang-si, Gyeonggi-do, Korea
+				Anyang    14088
+				KR
+
+BC-AD-28   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+BCAD28     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.469,Jianghui Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+F4-91-1E   (hex)		ZHUHAI EWPE INFORMATION TECHNOLOGY INC
+F4911E     (base 16)		ZHUHAI EWPE INFORMATION TECHNOLOGY INC
+				Room 409,NO.10,Technology 1st Road, Gangwan Av.,Tangjia Bay Town,Zhuhai,Guangdong,China
+				Zhuhai  Guangdong  519070
+				CN
+
+00-25-52   (hex)		VXi Corporation
+002552     (base 16)		VXi Corporation
+				271 Locust Street
+				Dover  NH  03820
+				US
+
+6C-E9-83   (hex)		Gastron Co., LTD.
+6CE983     (base 16)		Gastron Co., LTD.
+				#75-10, Palgok2-dong, Sangnok-gu, 
+				Ansan-city  Kyunggi-do  426-190
+				KR
+
+28-E3-1F   (hex)		Xiaomi Communications Co Ltd
+28E31F     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+98-90-96   (hex)		Dell Inc.
+989096     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+DC-37-52   (hex)		GE
+DC3752     (base 16)		GE
+				650 Markland Street
+				Markham  Ontario  L6C 0M1
+				CA
+
+DC-D9-16   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DCD916     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-02-2E   (hex)		TEAC Corp. R& D
+00022E     (base 16)		TEAC Corp. R& D
+				857 Koyata, Iruma
+				    
+				JP
+
+00-60-B0   (hex)		Hewlett Packard
+0060B0     (base 16)		Hewlett Packard
+				MS 42LE
+				CUPERTINO  CA  95014
+				US
+
+7C-73-8B   (hex)		Cocoon Alarm Ltd
+7C738B     (base 16)		Cocoon Alarm Ltd
+				46 The Calls
+				Leeds  West Yorkshire  LS2 7EY
+				GB
+
+F8-0F-84   (hex)		Natural Security SAS
+F80F84     (base 16)		Natural Security SAS
+				165 Avenue de Bretagne
+				Lille    59000
+				FR
+
+44-A4-2D   (hex)		TCT mobile ltd
+44A42D     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+70-F9-6D   (hex)		Hangzhou H3C Technologies Co., Limited
+70F96D     (base 16)		Hangzhou H3C Technologies Co., Limited
+				310 Liuhe Road, Zhijiang Science Park
+				Hangzhou  Zhejiang,   310053
+				CN
+
+BC-6A-44   (hex)		Commend International GmbH
+BC6A44     (base 16)		Commend International GmbH
+				Saalachstrasse 51
+				Salzburg  Salzburg  A-5020
+				AT
+
+F0-EE-58   (hex)		PACE Telematics GmbH
+F0EE58     (base 16)		PACE Telematics GmbH
+				Haid-und-Neu-Str. 18
+				Karlsruhe    76131
+				DE
+
+08-3F-BC   (hex)		zte corporation
+083FBC     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-C0-F0   (hex)		Kingston Technology Company, Inc.
+00C0F0     (base 16)		Kingston Technology Company, Inc.
+				17600 NEWHOPE STREET
+				FOUNTAIN VALLEY  CA  92708
+				US
+
+94-3B-B1   (hex)		Kaonmedia CO., LTD.
+943BB1     (base 16)		Kaonmedia CO., LTD.
+				KAONMEDIA Building 513-4
+				Sungnam-City  Kyonggi-Do  463-839, KOREA
+				KR
+
+00-18-D7   (hex)		JAVAD GNSS, Inc.
+0018D7     (base 16)		JAVAD GNSS, Inc.
+				1731 Technology Drive, Suite 680
+				San Jose  CA  95110
+				US
+
+00-1F-09   (hex)		Jastec
+001F09     (base 16)		Jastec
+				Jastec B/D 2F, 92-7 Kumgok-dong, 
+				Boondang-gu,    463-804
+				KR
+
+AC-62-0D   (hex)		Jabil Circuit(Wuxi) Co.,Ltd
+AC620D     (base 16)		Jabil Circuit(Wuxi) Co.,Ltd
+				Lot J9, J10 Export Processing Zone
+				Wuxi City  Jiangsu  214028
+				CN
+
+08-00-0D   (hex)		International Computers, Ltd
+08000D     (base 16)		International Computers, Ltd
+				WENLOCK WAY
+				na  UNITED  KINGDOM
+				GB
+
+1C-73-70   (hex)		Neotech
+1C7370     (base 16)		Neotech
+				104, 37 Yaeun-ro
+				Gumi-si  Gyoungsangbuk-do  730-711
+				KR
+
+30-E3-7A   (hex)		Intel Corporate
+30E37A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-00-C9   (hex)		Emulex Corporation
+0000C9     (base 16)		Emulex Corporation
+				3333 Susan Street
+				Costa Mesa  CA  92626
+				US
+
+00-40-AA   (hex)		Valmet Automation
+0040AA     (base 16)		Valmet Automation
+				Lentokentänkatu 11, P.O.Box 237
+				Tampere    FIN-3310
+				FI
+
+D0-B0-CD   (hex)		Moen
+D0B0CD     (base 16)		Moen
+				25300 Al Moen Dr
+				North Olmstead  OH  44070-8022
+				US
+
+F4-EF-9E   (hex)		SGSG SCIENCE & TECHNOLOGY CO. LTD
+F4EF9E     (base 16)		SGSG SCIENCE & TECHNOLOGY CO. LTD
+				3RD Fl, Bldg A3, No.1 software Park Rd
+				Zhuhai  Guangdong  519085
+				CN
+
+1C-74-0D   (hex)		Zyxel Communications Corporation
+1C740D     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+60-3E-CA   (hex)		Cambridge Medical Robotics Ltd
+603ECA     (base 16)		Cambridge Medical Robotics Ltd
+				Unit 2, Crome Lea Business Park
+				Madingley Road  Cambridgeshire  CB23 7PH
+				GB
+
+00-1F-1F   (hex)		Edimax Technology Co. Ltd.
+001F1F     (base 16)		Edimax Technology Co. Ltd.
+				No. 278, Xinhu 1st Road
+				Taipei City  Neihu Dist  248
+				TW
+
+00-02-0E   (hex)		ECI Telecom Ltd.
+00020E     (base 16)		ECI Telecom Ltd.
+				30 Hasivim St
+				Petach-Tikva 49133    49133
+				IL
+
+20-0A-5E   (hex)		Xiangshan Giant Eagle Technology Developing Co., Ltd.
+200A5E     (base 16)		Xiangshan Giant Eagle Technology Developing Co., Ltd.
+				Juexi Road no.9 Juexi street 
+				Ningbo  Zhejiang  315708
+				CN
+
+9C-74-1A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C741A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-A8-B6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4A8B6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-4C-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+244C07     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-6F-F7   (hex)		Wistron Neweb Corporation
+746FF7     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+B8-AE-ED   (hex)		Elitegroup Computer Systems Co.,Ltd.
+B8AEED     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No. 239, Sec. 2, Ti Ding Blvd.,
+				Taipei    11493
+				TW
+
+00-0D-B0   (hex)		Olym-tech Co.,Ltd.
+000DB0     (base 16)		Olym-tech Co.,Ltd.
+				Room 401/402,No.1,Songling Road,Hi-tech
+				Shenzhen  Guangdong  518031
+				CN
+
+30-F6-B9   (hex)		Ecocentric Energy
+30F6B9     (base 16)		Ecocentric Energy
+				E3 The Innovation Centre, 9 De Laeter Way, Technology Park
+				Bentley  Western Australia  6102
+				AU
+
+84-7B-EB   (hex)		Dell Inc.
+847BEB     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+54-51-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54511B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-53-6C   (hex)		SPnS Co.,Ltd
+68536C     (base 16)		SPnS Co.,Ltd
+				#315, Woolim Lions Valley 2nd, Gasan-dong, Geumcheon-gu
+				Seoul    08591
+				KR
+
+1C-EA-1B   (hex)		Nokia
+1CEA1B     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+D4-61-2E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D4612E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-E2-E5   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+B0E2E5     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+00-1F-A7   (hex)		Sony Interactive Entertainment Inc.
+001FA7     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+90-46-A2   (hex)		Tedipay UK Ltd
+9046A2     (base 16)		Tedipay UK Ltd
+				Level 39, One Canada Square
+				London    E14 5AB
+				GB
+
+64-79-A7   (hex)		Phison Electronics Corp.   
+6479A7     (base 16)		Phison Electronics Corp.   
+				No.1, Qun Yi Rd., Jhunan,
+				Miaoli    350
+				TW
+
+CC-B1-1A   (hex)		Samsung Electronics Co.,Ltd
+CCB11A     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+70-3C-03   (hex)		RadiAnt Co.,Ltd
+703C03     (base 16)		RadiAnt Co.,Ltd
+				102-610, 36, Bucheon-ro 198beon-gil, Wonmi-gu
+				Bucheon-si  Gyeonggi-do  14557
+				KR
+
+00-C1-64   (hex)		Cisco Systems, Inc
+00C164     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+DC-2D-CB   (hex)		Beijing Unis HengYue Technology Co., Ltd.
+DC2DCB     (base 16)		Beijing Unis HengYue Technology Co., Ltd.
+				Room 402, No. 2 Block, No. 1 yard, Zhongguancun east road, Haidian District
+				Beijing    100190
+				CN
+
+2C-96-62   (hex)		Invenit BV
+2C9662     (base 16)		Invenit BV
+				Lange Broekstraat 3
+				Raamsdonk  Noord-Brabant  4944 XH
+				NL
+
+CC-D3-E2   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
+CCD3E2     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
+				No.188 Nanhuan Road, TangQiao Town
+				Zhangjiagang   Jiangsu   215611
+				CN
+
+E4-FA-ED   (hex)		Samsung Electronics Co.,Ltd
+E4FAED     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+28-83-35   (hex)		Samsung Electronics Co.,Ltd
+288335     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-CF-96   (hex)		Samsung Electronics Co.,Ltd
+DCCF96     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+AC-44-F2   (hex)		YAMAHA CORPORATION
+AC44F2     (base 16)		YAMAHA CORPORATION
+				10-1 Nakazawa-cho, Naka-ku
+				Hamamatsu  Shizuoka  430-8650
+				JP
+
+1C-5F-2B   (hex)		D-Link International
+1C5F2B     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+1C-98-EC   (hex)		Hewlett Packard Enterprise
+1C98EC     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+70-66-1B   (hex)		Sonova AG
+70661B     (base 16)		Sonova AG
+				Laubisruetistrasse 28
+				Staefa    8712
+				CH
+
+B0-7F-B9   (hex)		NETGEAR
+B07FB9     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+04-7E-4A   (hex)		moobox CO., Ltd.
+047E4A     (base 16)		moobox CO., Ltd.
+				No 801, Yanchang Zhong Road
+				Shanghai  Shanghai  200072
+				CN
+
+00-80-E5   (hex)		NetApp
+0080E5     (base 16)		NetApp
+				1395 Crossman Ave
+				Sunnyvale,  CA  94089
+				US
+
+9C-5C-8E   (hex)		ASUSTek COMPUTER INC.
+9C5C8E     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+C8-87-22   (hex)		Lumenpulse
+C88722     (base 16)		Lumenpulse
+				1751 Richardson, suite 1505
+				Montreal  Quebec  H3K 1G6
+				CA
+
+84-68-3E   (hex)		Intel Corporate
+84683E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+E0-CD-FD   (hex)		Beijing E3Control Technology Co, LTD
+E0CDFD     (base 16)		Beijing E3Control Technology Co, LTD
+				1 Shangdi East Rd, Building A, Rm 205
+				Beijing  Beijing  100085
+				CN
+
+00-08-95   (hex)		DIRC Technologie GmbH & Co.KG
+000895     (base 16)		DIRC Technologie GmbH & Co.KG
+				Borsigstraße 13
+				Ratingen  NRW  40880
+				DE
+
+60-AC-C8   (hex)		KunTeng Inc.
+60ACC8     (base 16)		KunTeng Inc.
+				Room302, 3rd Floor, Building1 ,No.8 NongDa South street
+				HaiDian District  BeiJing  100084
+				CN
+
+CC-B3-AB   (hex)		shenzhen Biocare Bio-Medical Equipment Co.,Ltd.
+CCB3AB     (base 16)		shenzhen Biocare Bio-Medical Equipment Co.,Ltd.
+				#A735, 7/F, Block A, Shenzhen Mingyou Industrial Products Exhibition & Procurement  Center, Baoyuan Road, Xixiang Sub-district, Bao'an District, 518102 Shenzhen, P.R. China
+				Shenzhen    518000
+				CN
+
+E4-B3-18   (hex)		Intel Corporate
+E4B318     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+74-3E-2B   (hex)		Ruckus Wireless
+743E2B     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+E0-C7-67   (hex)		Apple, Inc.
+E0C767     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-ED-2C   (hex)		Apple, Inc.
+80ED2C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-34-04   (hex)		TCT mobile ltd
+F03404     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+80-D1-60   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+80D160     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+30-78-5C   (hex)		Partow Tamas Novin (Parman)
+30785C     (base 16)		Partow Tamas Novin (Parman)
+				UNIT 32 NO.31 26TH WEST AVE ,ALLAMEH TABATABAIE ST.SAADAT ABAD
+				Tehran  Tehran  1997968413
+				IR
+
+24-69-68   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+246968     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+8C-A2-FD   (hex)		Starry, Inc.
+8CA2FD     (base 16)		Starry, Inc.
+				PO Box 52226
+				Boston  MA  02205
+				US
+
+84-BA-3B   (hex)		CANON INC.
+84BA3B     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+00-05-85   (hex)		Juniper Networks
+000585     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+20-4E-71   (hex)		Juniper Networks
+204E71     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-19-4F   (hex)		Nokia Danmark A/S
+00194F     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-BD-3A   (hex)		Nokia Corporation
+00BD3A     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+80-50-1B   (hex)		Nokia Corporation
+80501B     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+A0-4E-04   (hex)		Nokia Corporation
+A04E04     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+00-12-62   (hex)		Nokia Danmark A/S
+001262     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-14-A7   (hex)		Nokia Danmark A/S
+0014A7     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-15-A0   (hex)		Nokia Danmark A/S
+0015A0     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-16-BC   (hex)		Nokia Danmark A/S
+0016BC     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-17-4B   (hex)		Nokia Danmark A/S
+00174B     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-26-69   (hex)		Nokia Danmark A/S
+002669     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+AC-61-EA   (hex)		Apple, Inc.
+AC61EA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-B5-4D   (hex)		Apple, Inc.
+38B54D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-5C-F2   (hex)		Apple, Inc.
+1C5CF2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-7E-33   (hex)		Nokia Danmark A/S
+A87E33     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-24-03   (hex)		Nokia Danmark A/S
+002403     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-24-04   (hex)		Nokia Danmark A/S
+002404     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-19-B7   (hex)		Nokia Danmark A/S
+0019B7     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-17-B0   (hex)		Nokia Danmark A/S
+0017B0     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-21-09   (hex)		Nokia Danmark A/S
+002109     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-21-08   (hex)		Nokia Danmark A/S
+002108     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1B-33   (hex)		Nokia Danmark A/S
+001B33     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-15-DE   (hex)		Nokia Danmark A/S
+0015DE     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-02-EE   (hex)		Nokia Danmark A/S
+0002EE     (base 16)		Nokia Danmark A/S
+				Frederikskaj, Copenhagen V
+				copenhagen    12345
+				DK
+
+D8-F7-10   (hex)		Libre Wireless Technologies Inc.
+D8F710     (base 16)		Libre Wireless Technologies Inc.
+				5405 Alton Parkway
+				Irvine, CA  CA  92604
+				US
+
+3C-59-1E   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+3C591E     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+				7/FTCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Road, Nanshan 
+				Shenzhen   Guangdong    518052
+				CN
+
+C4-36-55   (hex)		Shenzhen Fenglian Technology Co., Ltd.
+C43655     (base 16)		Shenzhen Fenglian Technology Co., Ltd.
+				Room 302, 3F, Block 2, Oriental Cyberport, No. 2, Xinxi Road
+				Shenzhen   Guangdong  518057
+				CN
+
+00-30-DA   (hex)		Comtrend Corporation
+0030DA     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+64-68-0C   (hex)		Comtrend Corporation
+64680C     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+38-72-C0   (hex)		Comtrend Corporation
+3872C0     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+A8-06-00   (hex)		Samsung Electronics Co.,Ltd
+A80600     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-26-82   (hex)		Gemtek Technology Co., Ltd.
+002682     (base 16)		Gemtek Technology Co., Ltd.
+				No.1 Jen Ai Road, Hsinchu Industrial Park,
+				Hukou,  Hsinchu  303
+				TW
+
+00-09-E1   (hex)		Gemtek Technology Co., Ltd.
+0009E1     (base 16)		Gemtek Technology Co., Ltd.
+				No.1 Jen Ai Road
+				Hukou  Hsinchu  303
+				TW
+
+14-C1-26   (hex)		Nokia Corporation
+14C126     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+60-01-94   (hex)		Espressif Inc.
+600194     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F0-5A-09   (hex)		Samsung Electronics Co.,Ltd
+F05A09     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-32-75   (hex)		Samsung Electronics Co.,Ltd
+503275     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-FC-88   (hex)		Samsung Electronics Co.,Ltd
+08FC88     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+02-70-B3   (hex)		DATA RECALL LTD.
+0270B3     (base 16)		DATA RECALL LTD.
+				SONDES PLACE
+				12345  UNITED  KINGDOM
+				GB
+
+00-01-36   (hex)		CyberTAN Technology Inc.
+000136     (base 16)		CyberTAN Technology Inc.
+				99, Park Avenue III
+				Hsinchu    12345
+				TW
+
+D0-4D-2C   (hex)		Roku, Inc.
+D04D2C     (base 16)		Roku, Inc.
+				12980 Saratoga Ave
+				Saratoga  CA  95070
+				US
+
+B0-A7-37   (hex)		Roku, Inc.
+B0A737     (base 16)		Roku, Inc.
+				12980 Saratoga Ave
+				Saratoga  CA  95070
+				US
+
+14-0C-76   (hex)		FREEBOX SAS
+140C76     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS    75008
+				FR
+
+00-1B-E9   (hex)		Broadcom
+001BE9     (base 16)		Broadcom
+				16215 Alton Parkway
+				Irvine  CA  92618
+				US
+
+00-19-C7   (hex)		Cambridge Industries(Group) Co.,Ltd.
+0019C7     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				Room 309,333 Hong Qiao Road
+				Shanghai    200030
+				CN
+
+70-D9-31   (hex)		Cambridge Industries(Group) Co.,Ltd.
+70D931     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				22Floor,Qilai Tower;889Yishan Road
+				shanghai    200233
+				CN
+
+02-9D-8E   (hex)		CARDIAC RECORDERS, INC.
+029D8E     (base 16)		CARDIAC RECORDERS, INC.
+				34 SCARBORO RD
+				UK  UNITED  KINGDOM
+				GB
+
+00-40-2A   (hex)		Canoga Perkins Corporation
+00402A     (base 16)		Canoga Perkins Corporation
+				21012 LASSEN STREET
+				CHATSWORTH  CA  91311-4241
+				US
+
+A4-C7-DE   (hex)		Cambridge Industries(Group) Co.,Ltd.
+A4C7DE     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				22 Floor,Qilai Tower;889 Yishan Road
+				Shanghai    200233
+				CN
+
+D8-B8-F6   (hex)		Nantworks
+D8B8F6     (base 16)		Nantworks
+				12230 El Camino Real, Suite 400
+				San Diego  CA  92130
+				US
+
+00-80-77   (hex)		Brother industries, LTD.
+008077     (base 16)		Brother industries, LTD.
+				RESEARCH LABORATORY
+				piscatawa    12345
+				JP
+
+24-F5-AA   (hex)		Samsung Electronics Co.,Ltd
+24F5AA     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+98-83-89   (hex)		Samsung Electronics Co.,Ltd
+988389     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+84-A4-66   (hex)		Samsung Electronics Co.,Ltd
+84A466     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+C4-57-6E   (hex)		Samsung Electronics Co.,Ltd
+C4576E     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+50-85-69   (hex)		Samsung Electronics Co.,Ltd
+508569     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+00-60-BB   (hex)		Cabletron Systems, Inc.
+0060BB     (base 16)		Cabletron Systems, Inc.
+				35 INDUSTRIAL WAY
+				ROCHESTER  NH  03866-5005
+				US
+
+F8-D0-BD   (hex)		Samsung Electronics Co.,Ltd
+F8D0BD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+78-59-5E   (hex)		Samsung Electronics Co.,Ltd
+78595E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-14-20   (hex)		Samsung Electronics Co.,Ltd
+0C1420     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-B1-0A   (hex)		Samsung Electronics Co.,Ltd
+94B10A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-BB-FD   (hex)		Samsung Electronics Co.,Ltd
+3CBBFD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-84-31   (hex)		Samsung Electronics Co.,Ltd
+A48431     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-B4-A5   (hex)		Samsung Electronics Co.,Ltd
+A0B4A5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-F8-EF   (hex)		Samsung Electronics Co.,Ltd
+E4F8EF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-44-6D   (hex)		Allwinner Technology Co., Ltd
+DC446D     (base 16)		Allwinner Technology Co., Ltd
+				No.9 Technology Road 2, High-Tech Zone
+				Zhuhai  Guangdong  519085
+				CN
+
+74-5A-AA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+745AAA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-FE-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04FE8D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-13-33   (hex)		BaudTec Corporation
+001333     (base 16)		BaudTec Corporation
+				12F, NO.181, Sec.  1. Tatung Rd.,
+				Hsichih  Taipei Hsien  221
+				TW
+
+58-67-1A   (hex)		Barnes&Noble
+58671A     (base 16)		Barnes&Noble
+				400 HAMILTON AVENUE
+				PALO ALTO  CA  94301
+				US
+
+00-26-75   (hex)		Aztech Electronics Pte Ltd
+002675     (base 16)		Aztech Electronics Pte Ltd
+				31 Ubi Road 1
+				Singapore    408694
+				SG
+
+00-24-FE   (hex)		AVM GmbH
+0024FE     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin    10559
+				DE
+
+C0-25-06   (hex)		AVM GmbH
+C02506     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin    10559
+				DE
+
+40-5D-82   (hex)		NETGEAR
+405D82     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+DC-EF-09   (hex)		NETGEAR
+DCEF09     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+DC-64-B8   (hex)		Shenzhen JingHanDa Electronics Co.Ltd
+DC64B8     (base 16)		Shenzhen JingHanDa Electronics Co.Ltd
+				5th Floor,No 4 ,Road 1,ShangXue Technology industrial Park,LongGang district,ShenZhen,GuangDong,China
+				ShenZhen  GuangDong  518129
+				CN
+
+00-0D-92   (hex)		ARIMA Communications Corp.
+000D92     (base 16)		ARIMA Communications Corp.
+				16, lane 658, Ying-Tao Road
+				Yingko  Taipei County  23943
+				TW
+
+00-21-63   (hex)		ASKEY COMPUTER CORP
+002163     (base 16)		ASKEY COMPUTER CORP
+				10F,NO.119.CHIENKANG RD,CHUNG-HO,
+				taipei  TAIPEI  235
+				TW
+
+A8-D3-F7   (hex)		Arcadyan Technology Corporation
+A8D3F7     (base 16)		Arcadyan Technology Corporation
+				No.8, Sec.2, Guangfu Rd.,
+				Hsinchu City  Hsinchu  30071
+				TW
+
+4C-60-DE   (hex)		NETGEAR
+4C60DE     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+C4-3D-C7   (hex)		NETGEAR
+C43DC7     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+48-9D-24   (hex)		BlackBerry RTS
+489D24     (base 16)		BlackBerry RTS
+				451 Phillip Street
+				Waterloo  ON  N2L 3X2
+				CA
+
+08-BD-43   (hex)		NETGEAR
+08BD43     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+44-EE-02   (hex)		MTI Ltd.
+44EE02     (base 16)		MTI Ltd.
+				Nishi-shinjuku Tokyo Opera City Tower 3-20-2 35F
+				Shinjuku-ku  Tokyo  163-1435
+				JP
+
+58-56-E8   (hex)		ARRIS Group, Inc.
+5856E8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-0B-BE   (hex)		ARRIS Group, Inc.
+F80BBE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+DC-45-17   (hex)		ARRIS Group, Inc.
+DC4517     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+C8-AA-21   (hex)		ARRIS Group, Inc.
+C8AA21     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-17-EE   (hex)		ARRIS Group, Inc.
+0017EE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-11-1A   (hex)		ARRIS Group, Inc.
+00111A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-0F-9F   (hex)		ARRIS Group, Inc.
+000F9F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-04-BD   (hex)		ARRIS Group, Inc.
+0004BD     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-26-42   (hex)		ARRIS Group, Inc.
+002642     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-24-A1   (hex)		ARRIS Group, Inc.
+0024A1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-22-10   (hex)		ARRIS Group, Inc.
+002210     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-22-B4   (hex)		ARRIS Group, Inc.
+0022B4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-14-9A   (hex)		ARRIS Group, Inc.
+00149A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-14-E8   (hex)		ARRIS Group, Inc.
+0014E8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-19-C0   (hex)		ARRIS Group, Inc.
+0019C0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-E0-6F   (hex)		ARRIS Group, Inc.
+00E06F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+80-96-B1   (hex)		ARRIS Group, Inc.
+8096B1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+70-7E-43   (hex)		ARRIS Group, Inc.
+707E43     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-2F   (hex)		ARRIS Group, Inc.
+00152F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1F-C4   (hex)		ARRIS Group, Inc.
+001FC4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1C-FB   (hex)		ARRIS Group, Inc.
+001CFB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-95   (hex)		ARRIS Group, Inc.
+002395     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-AF   (hex)		ARRIS Group, Inc.
+0023AF     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-7B-7A   (hex)		ARRIS Group, Inc.
+F87B7A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-00-F4   (hex)		Allied Telesis, Inc.
+0000F4     (base 16)		Allied Telesis, Inc.
+				CORPORATION
+				SUNNYVALE  CA  94086
+				US
+
+00-15-77   (hex)		Allied Telesis, Inc.
+001577     (base 16)		Allied Telesis, Inc.
+				3200 North First Street
+				San Jose    95134
+				US
+
+70-3C-39   (hex)		SEAWING Kft
+703C39     (base 16)		SEAWING Kft
+				Palánkai utca 5.
+				Székesfehérvár  Fejér  8000
+				HU
+
+90-97-D5   (hex)		Espressif Inc.
+9097D5     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+AC-D0-74   (hex)		Espressif Inc.
+ACD074     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+38-E3-C5   (hex)		Taicang T&W Electronics
+38E3C5     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+00-15-CE   (hex)		ARRIS Group, Inc.
+0015CE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-A2   (hex)		ARRIS Group, Inc.
+0015A2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-A3   (hex)		ARRIS Group, Inc.
+0015A3     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-A4   (hex)		ARRIS Group, Inc.
+0015A4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-00-CA   (hex)		ARRIS Group, Inc.
+0000CA     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+70-9E-29   (hex)		Sony Interactive Entertainment Inc.
+709E29     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+A4-DB-30   (hex)		Liteon Technology Corporation
+A4DB30     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+40-F0-2F   (hex)		Liteon Technology Corporation
+40F02F     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+74-C2-46   (hex)		Amazon Technologies Inc.
+74C246     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-0F-A3   (hex)		Alpha Networks Inc.
+000FA3     (base 16)		Alpha Networks Inc.
+				No.8 Li-shing 7th Rd.,Science-based Industrial Park
+				Hsinchu    300
+				TW
+
+00-1D-6A   (hex)		Alpha Networks Inc.
+001D6A     (base 16)		Alpha Networks Inc.
+				No.8 Li-shing Seventh Road,Science-based
+				Hsinchu    300
+				US
+
+00-1A-80   (hex)		Sony Corporation
+001A80     (base 16)		Sony Corporation
+				Gotenyama Tec, 5-1-2 Kitashinagawa
+				Tokyo    141-0001
+				JP
+
+88-41-FC   (hex)		AirTies Wireless Networks
+8841FC     (base 16)		AirTies Wireless Networks
+				Gulbahar Mahallesi, Avni Diligil Sokak
+				ISTANBUL  ISTANBUL  34394
+				TR
+
+00-30-D3   (hex)		Agilent Technologies, Inc.
+0030D3     (base 16)		Agilent Technologies, Inc.
+				1501 Page Mill Road
+				Palo Alto  CA  94304-1126
+				US
+
+00-A0-2F   (hex)		ADB Broadband Italia
+00A02F     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				20126 MILAN    12345
+				IT
+
+98-74-3D   (hex)		Shenzhen Jun Kai Hengye Technology Co. Ltd
+98743D     (base 16)		Shenzhen Jun Kai Hengye Technology Co. Ltd
+				5th floor,Yahua Building,#1Hongwan Gonghegongye RD,Xixiang Gushu Community,Baoan District,Shenzhen
+				Shenzhen  Guangdong  518000
+				CN
+
+A0-F4-59   (hex)		FN-LINK TECHNOLOGY LIMITED
+A0F459     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				5th Floor, A Building, Haoye Logistics Park, Shugang Channel, Bao'an District,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+58-63-56   (hex)		FN-LINK TECHNOLOGY LIMITED
+586356     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				5th Floor, A Building, Haoye Logistics Park, Shugang Channel, Bao'an District,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+8C-B8-64   (hex)		AcSiP Technology Corp.
+8CB864     (base 16)		AcSiP Technology Corp.
+				3F., No.22, Dalin Rd., 
+				Taoyuan City    330
+				TW
+
+5C-E2-F4   (hex)		AcSiP Technology Corp.
+5CE2F4     (base 16)		AcSiP Technology Corp.
+				3F., No.22, Dalin Rd.
+				Taoyuan  Taoyuan County  33067
+				TW
+
+B8-61-6F   (hex)		Accton Technology Corp
+B8616F     (base 16)		Accton Technology Corp
+				No.1 Creation Rd III, Science-based Industrial Park
+				Hsinchu    30077
+				TW
+
+00-12-CF   (hex)		Accton Technology Corp
+0012CF     (base 16)		Accton Technology Corp
+				No. 1 Creation Rd. III, Science-based Industrial Park
+				Hsinchu    300
+				TW
+
+00-30-F1   (hex)		Accton Technology Corp
+0030F1     (base 16)		Accton Technology Corp
+				No. 1, Creation Rd. IV
+				Hsinchu    12345
+				TW
+
+70-5A-0F   (hex)		Hewlett Packard
+705A0F     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+44-95-FA   (hex)		Qingdao Santong Digital Technology Co.Ltd
+4495FA     (base 16)		Qingdao Santong Digital Technology Co.Ltd
+				Room701, No.1£¬Fu Ying Building,No.443East Changjiang Road,Qingdao Economic and Technological Development District
+				Qingdao  Shandong  266555
+				CN
+
+00-25-D3   (hex)		AzureWave Technology Inc.
+0025D3     (base 16)		AzureWave Technology Inc.
+				8F ., No.94, Baozhong Rd.
+				Xindian City    231
+				TW
+
+1C-4B-D6   (hex)		AzureWave Technology Inc.
+1C4BD6     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baoshong Rd.
+				Xindian City, Taipei County    231
+				TW
+
+08-A9-5A   (hex)		AzureWave Technology Inc.
+08A95A     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baoshong Rd.
+				Xindian City, Taipei County    231
+				TW
+
+94-DB-C9   (hex)		AzureWave Technology Inc.
+94DBC9     (base 16)		AzureWave Technology Inc.
+				8F No94 Baozhong Rd
+				XindianDistrict, New Taipei City    231
+				TW
+
+24-0A-64   (hex)		AzureWave Technology Inc.
+240A64     (base 16)		AzureWave Technology Inc.
+				9F.,No.92,Baozhong Rd
+				Xindian  NewTaipeiCity  231
+				TW
+
+40-E2-30   (hex)		AzureWave Technology Inc.
+40E230     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.,
+				New Taipei City  Taiwan  231
+				TW
+
+80-D2-1D   (hex)		AzureWave Technology Inc.
+80D21D     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+D4-D1-84   (hex)		ADB Broadband Italia
+D4D184     (base 16)		ADB Broadband Italia
+				via Sarca 222
+				Milano    20126
+				IT
+
+A0-4F-D4   (hex)		ADB Broadband Italia
+A04FD4     (base 16)		ADB Broadband Italia
+				VIALE SARCA 336
+				MILANO    20126
+				IT
+
+D0-0E-D9   (hex)		Taicang T&W Electronics
+D00ED9     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD, Lu Du
+				Taicang  Jiangsu  215412
+				CN
+
+54-14-73   (hex)		 Wingtech Group (HongKong）Limited
+541473     (base 16)		 Wingtech Group (HongKong）Limited
+				FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
+				HongKong    999077
+				HK
+
+80-86-F2   (hex)		Intel Corporate
+8086F2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+E0-94-67   (hex)		Intel Corporate
+E09467     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+08-D4-0C   (hex)		Intel Corporate
+08D40C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+6C-88-14   (hex)		Intel Corporate
+6C8814     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+30-3A-64   (hex)		Intel Corporate
+303A64     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+AC-FD-CE   (hex)		Intel Corporate
+ACFDCE     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+7C-CC-B8   (hex)		Intel Corporate
+7CCCB8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+F4-06-69   (hex)		Intel Corporate
+F40669     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1D-E1   (hex)		Intel Corporate
+001DE1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+90-E2-BA   (hex)		Intel Corporate
+90E2BA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-26-C7   (hex)		Intel Corporate
+0026C7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-26-C6   (hex)		Intel Corporate
+0026C6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+0C-CC-26   (hex)		Airenetworks
+0CCC26     (base 16)		Airenetworks
+				Ramon y Cajal 11
+				Elche  Alicante  03203
+				ES
+
+E0-9D-31   (hex)		Intel Corporate
+E09D31     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+88-53-2E   (hex)		Intel Corporate
+88532E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+74-C9-9A   (hex)		Ericsson AB
+74C99A     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+5C-C2-13   (hex)		Fr. Sauter AG
+5CC213     (base 16)		Fr. Sauter AG
+				Im Surinam 55
+				Basel  BS  CH4016
+				CH
+
+28-10-1B   (hex)		MagnaCom
+28101B     (base 16)		MagnaCom
+				9 Bareket Street
+				Petah Tikva    4951777
+				IL
+
+00-16-76   (hex)		Intel Corporate
+001676     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-16-EA   (hex)		Intel Corporate
+0016EA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1B-77   (hex)		Intel Corporate
+001B77     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1C-C0   (hex)		Intel Corporate
+001CC0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+10-4A-7D   (hex)		Intel Corporate
+104A7D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1A-A0   (hex)		Dell Inc.
+001AA0     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+00-19-B9   (hex)		Dell Inc.
+0019B9     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-B0-D0   (hex)		Dell Inc.
+00B0D0     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-C0-4F   (hex)		Dell Inc.
+00C04F     (base 16)		Dell Inc.
+				1807 WEST BRAKER LANE-BLDG.
+				AUSTIN  TX  78758-3610
+				US
+
+B0-79-94   (hex)		Motorola Mobility LLC, a Lenovo Company
+B07994     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				600 North US Hwy 45
+				Libertyville  IL  60048
+				US
+
+A4-70-D6   (hex)		Motorola Mobility LLC, a Lenovo Company
+A470D6     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 Merchandise Mart Plaza, Suite 1800
+				Chicago  IL  60654
+				US
+
+74-86-7A   (hex)		Dell Inc.
+74867A     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+18-03-73   (hex)		Dell Inc.
+180373     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+14-FE-B5   (hex)		Dell Inc.
+14FEB5     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+78-2B-CB   (hex)		Dell Inc.
+782BCB     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-1F-3B   (hex)		Intel Corporate
+001F3B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-21-5D   (hex)		Intel Corporate
+00215D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-21-6A   (hex)		Intel Corporate
+00216A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1C-23   (hex)		Dell Inc.
+001C23     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+A4-BA-DB   (hex)		Dell Inc.
+A4BADB     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock    78682
+				US
+
+00-25-64   (hex)		Dell Inc.
+002564     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock    78682
+				US
+
+A4-1F-72   (hex)		Dell Inc.
+A41F72     (base 16)		Dell Inc.
+				One Dell way
+				Round Rock     78682
+				US
+
+C4-66-99   (hex)		vivo Mobile Communication Co., Ltd.
+C46699     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+C8-F2-30   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C8F230     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD
+				DONGGUAN  GUANGDONG  523860
+				CN
+
+8C-0E-E3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+8C0EE3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN
+				DONGGUAN  GUANGDONG  523860
+				CN
+
+C8-CD-72   (hex)		Sagemcom Broadband SAS
+C8CD72     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+F8-2C-18   (hex)		2Wire Inc
+F82C18     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+18-01-7D   (hex)		Harbin Arteor technology co., LTD
+18017D     (base 16)		Harbin Arteor technology co., LTD
+				Yushan Road 49-2
+				Harbin  Heilongjiang  150090
+				CN
+
+00-15-56   (hex)		Sagemcom Broadband SAS
+001556     (base 16)		Sagemcom Broadband SAS
+				Le Ponnant de Paris
+				CEDEX  Paris  75512
+				FR
+
+C0-D0-44   (hex)		Sagemcom Broadband SAS
+C0D044     (base 16)		Sagemcom Broadband SAS
+				250, Route de l'Empereur
+				RUEIL-MALMAISON    92500
+				FR
+
+A0-1B-29   (hex)		Sagemcom Broadband SAS
+A01B29     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+74-E1-4A   (hex)		IEEE Registration Authority
+74E14A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+0C-EF-AF   (hex)		IEEE Registration Authority
+0CEFAF     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F8-02-78   (hex)		IEEE Registration Authority
+F80278     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A0-BB-3E   (hex)		IEEE Registration Authority
+A0BB3E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+88-4A-EA   (hex)		Texas Instruments
+884AEA     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+00-22-A4   (hex)		2Wire Inc
+0022A4     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+98-2C-BE   (hex)		2Wire Inc
+982CBE     (base 16)		2Wire Inc
+				1764 Automation Pkwy
+				San Jose  CA  95131
+				US
+
+64-0F-28   (hex)		2Wire Inc
+640F28     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose   CA  95131
+				US
+
+00-12-3F   (hex)		Dell Inc.
+00123F     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-0B-DB   (hex)		Dell Inc.
+000BDB     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+20-47-47   (hex)		Dell Inc.
+204747     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-14-95   (hex)		2Wire Inc
+001495     (base 16)		2Wire Inc
+				1704 Automation Parkway
+				San Jose  CA  95131
+				US
+
+34-8A-AE   (hex)		Sagemcom Broadband SAS
+348AAE     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+7C-03-D8   (hex)		Sagemcom Broadband SAS
+7C03D8     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+C0-AC-54   (hex)		Sagemcom Broadband SAS
+C0AC54     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison  HAUTS DE SEINE  92848
+				FR
+
+2C-39-96   (hex)		Sagemcom Broadband SAS
+2C3996     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison  HAUTS DE SEINE  92848
+				FR
+
+F0-82-61   (hex)		Sagemcom Broadband SAS
+F08261     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison  HAUTS DE SEINE  92848
+				FR
+
+00-30-C5   (hex)		CADENCE DESIGN SYSTEMS, INC.
+0030C5     (base 16)		CADENCE DESIGN SYSTEMS, INC.
+				555 RIVER OAKS PARKWAY
+				SAN JOSE  CA  95134
+				US
+
+D0-8C-B5   (hex)		Texas Instruments
+D08CB5     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-18-2F   (hex)		Texas Instruments
+00182F     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-EA   (hex)		Texas Instruments
+0017EA     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-21-BA   (hex)		Texas Instruments
+0021BA     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+BC-0D-A5   (hex)		Texas Instruments
+BC0DA5     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+CC-8C-E3   (hex)		Texas Instruments
+CC8CE3     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+E0-D7-BA   (hex)		Texas Instruments
+E0D7BA     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+1C-E2-CC   (hex)		Texas Instruments
+1CE2CC     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+98-59-45   (hex)		Texas Instruments
+985945     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+94-44-52   (hex)		Belkin International Inc.
+944452     (base 16)		Belkin International Inc.
+				12045 E. Waterfront Drive
+				Playa Vista  CA  90094
+				US
+
+B0-B4-48   (hex)		Texas Instruments
+B0B448     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+D4-94-A1   (hex)		Texas Instruments
+D494A1     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-14-BF   (hex)		Cisco-Linksys, LLC
+0014BF     (base 16)		Cisco-Linksys, LLC
+				121 Theory Dr.
+				Irvine  CA  92612
+				US
+
+CC-B2-55   (hex)		D-Link International
+CCB255     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+28-10-7B   (hex)		D-Link International
+28107B     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+FC-75-16   (hex)		D-Link International
+FC7516     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+84-C9-B2   (hex)		D-Link International
+84C9B2     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+C8-D3-A3   (hex)		D-Link International
+C8D3A3     (base 16)		D-Link International
+				1 Internal Business Park, #03-12. The Synergy Singapore
+				Singapore    609917
+				US
+
+3C-BB-73   (hex)		Shenzhen Xinguodu Technology Co., Ltd.
+3CBB73     (base 16)		Shenzhen Xinguodu Technology Co., Ltd.
+				F17A, JinSong Building, Tairan Industrial & Trade Park, Chegongmiao, Shennan Road，Futian District
+				Shenzhen  Guangdong  518040
+				CN
+
+0C-47-C9   (hex)		Amazon Technologies Inc.
+0C47C9     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-50-BA   (hex)		D-Link Corporation
+0050BA     (base 16)		D-Link Corporation
+				2F, NO. 233L-2, PAO-CHIAO RD.
+				TAIPEI    0000
+				TW
+
+00-17-9A   (hex)		D-Link Corporation
+00179A     (base 16)		D-Link Corporation
+				No. 289, Sinhu 3rd Rd., Neihu District,
+				Taipei    114
+				TW
+
+00-1C-F0   (hex)		D-Link Corporation
+001CF0     (base 16)		D-Link Corporation
+				NO.289, Sinhu 3rd Rd.,
+				Neihu District,  Taipei City  114
+				TW
+
+00-1E-58   (hex)		D-Link Corporation
+001E58     (base 16)		D-Link Corporation
+				NO.289, Sinhu 3rd Rd.,
+				Neihu District,  Taipei City  114
+				TW
+
+00-22-B0   (hex)		D-Link Corporation
+0022B0     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd RD.,
+				Neihu District,  Taipei City  114
+				TW
+
+00-24-01   (hex)		D-Link Corporation
+002401     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd RD.,
+				Neihu District,  Taipei City  114
+				TW
+
+1C-AF-F7   (hex)		D-Link International
+1CAFF7     (base 16)		D-Link International
+				1 INTERNATIONAL  BUSINESS  PARK,
+				SINGAPORE    609917
+				SG
+
+14-D6-4D   (hex)		D-Link International
+14D64D     (base 16)		D-Link International
+				1 INTERNATIONAL BUSINESS PARK
+				SINGAPORE    609917
+				SG
+
+90-94-E4   (hex)		D-Link International
+9094E4     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+B4-99-BA   (hex)		Hewlett Packard
+B499BA     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+04-78-63   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
+047863     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
+				9th Floor, No. 5 Building, 2145 Jinshajiang Rd., Putuo District
+				Shanghai    200333
+				CN
+
+40-9F-87   (hex)		Jide Technology (Hong Kong) Limited
+409F87     (base 16)		Jide Technology (Hong Kong) Limited
+				jiahua Mansion 3F, 133 North 4th Ring Road East, Chaoyang District
+				Beijing    100101
+				CN
+
+4C-FF-12   (hex)		Fuze Entertainment Co., ltd
+4CFF12     (base 16)		Fuze Entertainment Co., ltd
+				3rd Floor Harbour Centre
+				George Town  George Town  P.O. Box 613GT
+				KY
+
+AC-9A-22   (hex)		NXP Semiconductors
+AC9A22     (base 16)		NXP Semiconductors
+				411 E. Plumeria Drive
+				San Jose  CA  95134
+				US
+
+28-7C-DB   (hex)		Hefei  Toycloud Technology Co.,ltd
+287CDB     (base 16)		Hefei  Toycloud Technology Co.,ltd
+				FLOOR 13,XUNFEI BUILDING,NO.666 WANGJIANG ROAD,HIGH & NEW TECHNOLOGY DEVELOPMENT ZONE.HEFEI.
+				Hefei  Anhui  230088
+				CN
+
+48-AD-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48AD08     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-FB-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CFB45     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+00-9A-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+009ACD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+3C-5A-B4   (hex)		Google, Inc.
+3C5AB4     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View    94043
+				US
+
+F4-F5-E8   (hex)		Google, Inc.
+F4F5E8     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View    94043
+				US
+
+94-EB-2C   (hex)		Google, Inc.
+94EB2C     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View    94043
+				US
+
+0C-C7-31   (hex)		Currant, Inc.
+0CC731     (base 16)		Currant, Inc.
+				927 Industrial Ave
+				Palo Alto  CA  94303
+				US
+
+70-B3-D5   (hex)		IEEE Registration Authority
+70B3D5     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+28-ED-6A   (hex)		Apple, Inc.
+28ED6A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-56-E3   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+C056E3     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.469,Jianghui Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+EC-3E-F7   (hex)		Juniper Networks
+EC3EF7     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+0C-F8-93   (hex)		ARRIS Group, Inc.
+0CF893     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+3C-DF-A9   (hex)		ARRIS Group, Inc.
+3CDFA9     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+84-61-A0   (hex)		ARRIS Group, Inc.
+8461A0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-D1   (hex)		ARRIS Group, Inc.
+0015D1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-D0   (hex)		ARRIS Group, Inc.
+001DD0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-D3   (hex)		ARRIS Group, Inc.
+001DD3     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+AC-B3-13   (hex)		ARRIS Group, Inc.
+ACB313     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+38-F2-3E   (hex)		Microsoft Mobile Oy
+38F23E     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				Espoo    02150
+				FI
+
+E4-F8-9C   (hex)		Intel Corporate
+E4F89C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+6C-A1-00   (hex)		Intel Corporate
+6CA100     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+2C-41-38   (hex)		Hewlett Packard
+2C4138     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+44-1E-A1   (hex)		Hewlett Packard
+441EA1     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+78-E7-D1   (hex)		Hewlett Packard
+78E7D1     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+5C-8F-E0   (hex)		ARRIS Group, Inc.
+5C8FE0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+90-C7-92   (hex)		ARRIS Group, Inc.
+90C792     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+BC-CA-B5   (hex)		ARRIS Group, Inc.
+BCCAB5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D0-39-B3   (hex)		ARRIS Group, Inc.
+D039B3     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-0F-CC   (hex)		ARRIS Group, Inc.
+000FCC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-12-F0   (hex)		Intel Corporate
+0012F0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-07-40   (hex)		BUFFALO.INC
+000740     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref.  460-8315
+				JP
+
+00-24-A5   (hex)		BUFFALO.INC
+0024A5     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref.  460-8315
+				JP
+
+CC-E1-D5   (hex)		BUFFALO.INC
+CCE1D5     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg.,30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref  460-8315
+				JP
+
+A4-02-B9   (hex)		Intel Corporate
+A402B9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+DC-53-60   (hex)		Intel Corporate
+DC5360     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1C-C4   (hex)		Hewlett Packard
+001CC4     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-1E-0B   (hex)		Hewlett Packard
+001E0B     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-22-64   (hex)		Hewlett Packard
+002264     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-25-B3   (hex)		Hewlett Packard
+0025B3     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-0C-F1   (hex)		Intel Corporation
+000CF1     (base 16)		Intel Corporation
+				MS: JF3-420
+				Hillsboro  OR  97124
+				US
+
+78-48-59   (hex)		Hewlett Packard
+784859     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+58-DC-6D   (hex)		Exceptional Innovation, Inc.
+58DC6D     (base 16)		Exceptional Innovation, Inc.
+				480 Olde Worthington Rd, Suite 350
+				Westerville  OH  43082
+				US
+
+90-21-55   (hex)		HTC Corporation
+902155     (base 16)		HTC Corporation
+				No.23 Xinghua Road
+				Taoyuan County    330
+				TW
+
+64-31-50   (hex)		Hewlett Packard
+643150     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+7C-B1-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7CB15D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+00-26-5E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+00265E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-24-2C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+00242C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+D8-B3-77   (hex)		HTC Corporation
+D8B377     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., 
+				Taoyuan City    330
+				TW
+
+B0-F1-A3   (hex)		Fengfan (BeiJing) Technology Co., Ltd. 
+B0F1A3     (base 16)		Fengfan (BeiJing) Technology Co., Ltd. 
+				Room518,Dianzichengdasha Town,No12,Jiuxianqiao Road
+				Beijing  Chaoyang District  100016
+				CN
+
+34-64-A9   (hex)		Hewlett Packard
+3464A9     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+38-63-BB   (hex)		Hewlett Packard
+3863BB     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+5C-B9-01   (hex)		Hewlett Packard
+5CB901     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+DC-4A-3E   (hex)		Hewlett Packard
+DC4A3E     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+B0-5A-DA   (hex)		Hewlett Packard
+B05ADA     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-10-83   (hex)		Hewlett Packard
+001083     (base 16)		Hewlett Packard
+				MAIL STOP 42LE
+				CUPERTINO  CA  95014
+				US
+
+A0-B3-CC   (hex)		Hewlett Packard
+A0B3CC     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+EC-B1-D7   (hex)		Hewlett Packard
+ECB1D7     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+9C-B6-54   (hex)		Hewlett Packard
+9CB654     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+6C-3B-E5   (hex)		Hewlett Packard
+6C3BE5     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+B0-AA-36   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B0AA36     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD
+				DONGGUAN  GUANGDONG  523860
+				CN
+
+78-4B-87   (hex)		Murata Manufacturing Co., Ltd.
+784B87     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1,Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+E4-CE-02   (hex)		WyreStorm Technologies Ltd
+E4CE02     (base 16)		WyreStorm Technologies Ltd
+				Tech Valley Park, 23 Wood Road
+				Round Lake  New York  12151
+				GB
+
+40-F3-08   (hex)		Murata Manufacturing Co., Ltd.
+40F308     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1 Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+80-89-17   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+808917     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+A0-93-47   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A09347     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
+				DONGGUAN  GUANGDONG  523860
+				CN
+
+E8-BB-A8   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+E8BBA8     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
+				DONGGUAN  GUANGDONG  523860
+				CN
+
+94-2C-B3   (hex)		HUMAX Co., Ltd.
+942CB3     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+00-27-19   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+002719     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 7, Second Part, Honghualing Industrial Zone
+				Shenzhen  Guangdong  518057
+				CN
+
+40-16-9F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+40169F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
+				Shenzhen  Guangdong  518000
+				CN
+
+F4-EC-38   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F4EC38     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
+				Shenzhen  Guangdong  518000
+				CN
+
+14-04-67   (hex)		SNK Technologies Co.,Ltd.
+140467     (base 16)		SNK Technologies Co.,Ltd.
+				#1001, Byuksan Sunyoung Technopia, A-dong, 13
+				Ojeongongeop-gil, Uiwang-si,  Gyeonggi-do  16072
+				KR
+
+80-30-DC   (hex)		Texas Instruments
+8030DC     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A4-D5-78   (hex)		Texas Instruments
+A4D578     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+14-CF-92   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+14CF92     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
+				shenzhen  guangdong Province  518057
+				CN
+
+20-DC-E6   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+20DCE6     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
+				shenzhen  guangdong Province  518057
+				CN
+
+14-CC-20   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+14CC20     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+24-60-81   (hex)		razberi technologies
+246081     (base 16)		razberi technologies
+				13755 Hutton Drive Suite 500
+				Farmers Branch  TX  75234
+				US
+
+A4-D1-8C   (hex)		Apple, Inc.
+A4D18C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-F6-52   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+90F652     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan,
+				Shenzhen  Guangdong Province,  518057
+				CN
+
+24-1E-EB   (hex)		Apple, Inc.
+241EEB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-25-EF   (hex)		Apple, Inc.
+CC25EF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-CF-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88CF98     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-0D-43   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+F80D43     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+38-F8-89   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+38F889     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-7A-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D07AB5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-19-C6   (hex)		zte corporation
+0019C6     (base 16)		zte corporation
+				Technology Management Department, 
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1D-D9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+001DD9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-19-7D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+00197D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-14-A4   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+0014A4     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+78-DD-08   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+78DD08     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+9C-D2-1E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+9CD21E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+B4-30-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B43052     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-D0-9B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+80D09B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-8E-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C8E5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-74-2A   (hex)		zte corporation
+84742A     (base 16)		zte corporation
+				12/F.,zte R&D building,kejinan Road,
+				shenzhen  guangdong  518057
+				CN
+
+9C-D2-4B   (hex)		zte corporation
+9CD24B     (base 16)		zte corporation
+				12/F.,zte R&D building,kejinan Road,
+				shenzhen  guangdong  518057
+				CN
+
+C8-7B-5B   (hex)		zte corporation
+C87B5B     (base 16)		zte corporation
+				12/F.,zte R&D building,kejinan Road,
+				shenzhen  guangdong  518057
+				CN
+
+00-07-D8   (hex)		Hitron Technologies. Inc
+0007D8     (base 16)		Hitron Technologies. Inc
+				135-220 Hitron B/D 726-5
+				Seoul    13456
+				KR
+
+90-4E-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+904E2B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-08-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2008ED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-34-FE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0034FE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-51-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C85195     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-CB-A8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+40CBA8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
+				Shenzhen  GuangDong  518057
+				CN
+
+D4-6E-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D46E5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
+				Shenzhen  GuangDong  518057
+				CN
+
+88-53-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8853D4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+04-C0-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04C06F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+20-2B-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+202BC1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+54-A5-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54A51B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+00-25-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+002568     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+78-1D-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+781DBA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				HUAWEI Industrial Base Bantian,Longgang
+				Shenzhen  guangdong  518129
+				CN
+
+00-25-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+00259E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				B1-7,Huawei Base,Bantian, Longgang District,ShenZhen,GuangDong,CHINA
+				ShenZhen  GuangDong  518129
+				CN
+
+00-6B-8E   (hex)		Shanghai Feixun Communication Co.,Ltd.
+006B8E     (base 16)		Shanghai Feixun Communication Co.,Ltd.
+				Building 90,No,4855,Guangfulin Road
+				shanghai  Shanghai  201616
+				CN
+
+D4-6A-A8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D46AA8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen    518129
+				CN
+
+BC-AD-AB   (hex)		Avaya Inc
+BCADAB     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+FC-A8-41   (hex)		Avaya Inc
+FCA841     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+3C-B1-5B   (hex)		Avaya Inc
+3CB15B     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+34-75-C7   (hex)		Avaya Inc
+3475C7     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+B0-AD-AA   (hex)		Avaya Inc
+B0ADAA     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+B4-47-5E   (hex)		Avaya Inc
+B4475E     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+B8-BC-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B8BC1B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-2A-F7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+582AF7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-D9-21   (hex)		Avaya Inc
+24D921     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+84-83-71   (hex)		Avaya Inc
+848371     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+00-1B-4F   (hex)		Avaya Inc
+001B4F     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+4C-8B-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4C8BEF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+50-06-AB   (hex)		Cisco Systems, Inc
+5006AB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+FC-48-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC48EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+70-7B-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+707BE8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+4C-1F-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4C1FCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+00-90-6D   (hex)		Cisco Systems, Inc
+00906D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-90-AB   (hex)		Cisco Systems, Inc
+0090AB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-50-54   (hex)		Cisco Systems, Inc
+005054     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-50-0B   (hex)		Cisco Systems, Inc
+00500B     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-03-DD   (hex)		Comark Interactive Solutions
+0003DD     (base 16)		Comark Interactive Solutions
+				93 West St.
+				Medfield  MA  02052
+				US
+
+00-50-53   (hex)		Cisco Systems, Inc
+005053     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-50-50   (hex)		Cisco Systems, Inc
+005050     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-B1-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D4B110     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+E4-68-A3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E468A3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+24-71-89   (hex)		Texas Instruments
+247189     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+98-7B-F3   (hex)		Texas Instruments
+987BF3     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+A0-F6-FD   (hex)		Texas Instruments
+A0F6FD     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+D0-B5-C2   (hex)		Texas Instruments
+D0B5C2     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+78-A5-04   (hex)		Texas Instruments
+78A504     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+6C-EC-EB   (hex)		Texas Instruments
+6CECEB     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+34-00-A3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3400A3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				Shenzhen  Guangdong  518129
+				CN
+
+00-90-2B   (hex)		Cisco Systems, Inc
+00902B     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-E0-8F   (hex)		Cisco Systems, Inc
+00E08F     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-18-68   (hex)		Cisco SPVTG
+001868     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+88-75-56   (hex)		Cisco Systems, Inc
+887556     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+FC-99-47   (hex)		Cisco Systems, Inc
+FC9947     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+6C-20-56   (hex)		Cisco Systems, Inc
+6C2056     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-15-F2   (hex)		ASUSTek COMPUTER INC.
+0015F2     (base 16)		ASUSTek COMPUTER INC.
+				No.5 Shing Yeh Street,Kwei Shan Hsiang,Taoyuan
+				Taipei    333
+				TW
+
+90-E6-BA   (hex)		ASUSTek COMPUTER INC.
+90E6BA     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+00-26-18   (hex)		ASUSTek COMPUTER INC.
+002618     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+F4-6D-04   (hex)		ASUSTek COMPUTER INC.
+F46D04     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,
+				Taipei    112
+				TW
+
+00-E0-18   (hex)		ASUSTek COMPUTER INC.
+00E018     (base 16)		ASUSTek COMPUTER INC.
+				150 LI-TE RD.
+				PEITOU, TAIPEI    77777
+				TW
+
+00-0C-6E   (hex)		ASUSTek COMPUTER INC.
+000C6E     (base 16)		ASUSTek COMPUTER INC.
+				150, Li-Te Rd., PeiTou
+				Taipei    112
+				TW
+
+00-0E-A6   (hex)		ASUSTek COMPUTER INC.
+000EA6     (base 16)		ASUSTek COMPUTER INC.
+				150, Li-Te Rd., PeiTou
+				Taipei    112
+				TW
+
+00-1D-60   (hex)		ASUSTek COMPUTER INC.
+001D60     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou
+				Taipei    112
+				TW
+
+6C-41-6A   (hex)		Cisco Systems, Inc
+6C416A     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+EC-E1-A9   (hex)		Cisco Systems, Inc
+ECE1A9     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+C0-67-AF   (hex)		Cisco Systems, Inc
+C067AF     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+AC-F2-C5   (hex)		Cisco Systems, Inc
+ACF2C5     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+24-01-C7   (hex)		Cisco Systems, Inc
+2401C7     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+68-86-A7   (hex)		Cisco Systems, Inc
+6886A7     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+C0-25-5C   (hex)		Cisco Systems, Inc
+C0255C     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+3C-0E-23   (hex)		Cisco Systems, Inc
+3C0E23     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+08-CC-68   (hex)		Cisco Systems, Inc
+08CC68     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+0C-27-24   (hex)		Cisco Systems, Inc
+0C2724     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+6C-FA-89   (hex)		Cisco Systems, Inc
+6CFA89     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-E0-A3   (hex)		Cisco Systems, Inc
+00E0A3     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+60-2A-D0   (hex)		Cisco SPVTG
+602AD0     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+74-5E-1C   (hex)		PIONEER CORPORATION
+745E1C     (base 16)		PIONEER CORPORATION
+				1-1 Shin-ogura
+				Kawasaki-shi  Kanagawa Prefecture  2120031
+				JP
+
+04-62-73   (hex)		Cisco Systems, Inc
+046273     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+D8-B1-90   (hex)		Cisco Systems, Inc
+D8B190     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+80-E8-6F   (hex)		Cisco Systems, Inc
+80E86F     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+AC-7E-8A   (hex)		Cisco Systems, Inc
+AC7E8A     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+1C-E8-5D   (hex)		Cisco Systems, Inc
+1CE85D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+A8-9D-21   (hex)		Cisco Systems, Inc
+A89D21     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+68-9C-E2   (hex)		Cisco Systems, Inc
+689CE2     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-23-BE   (hex)		Cisco SPVTG
+0023BE     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+18-59-33   (hex)		Cisco SPVTG
+185933     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+44-58-29   (hex)		Cisco SPVTG
+445829     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+F4-4E-05   (hex)		Cisco Systems, Inc
+F44E05     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+88-1D-FC   (hex)		Cisco Systems, Inc
+881DFC     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-10-11   (hex)		Cisco Systems, Inc
+001011     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-00-0C   (hex)		Cisco Systems, Inc
+00000C     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+28-CF-E9   (hex)		Apple, Inc.
+28CFE9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-A0-40   (hex)		Apple, Inc.
+00A040     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-F8-49   (hex)		Cisco Systems, Inc
+A0F849     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+3C-D0-F8   (hex)		Apple, Inc.
+3CD0F8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-09-27   (hex)		Apple, Inc.
+680927     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-C2-6B   (hex)		Apple, Inc.
+6CC26B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-D8-84   (hex)		Apple, Inc.
+44D884     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-26-08   (hex)		Apple, Inc.
+002608     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-26-B0   (hex)		Apple, Inc.
+0026B0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-26-BB   (hex)		Apple, Inc.
+0026BB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-9A-20   (hex)		Apple, Inc.
+D49A20     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-1E-DF   (hex)		Apple, Inc.
+F81EDF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-2A-14   (hex)		Apple, Inc.
+C82A14     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-07-54   (hex)		Apple, Inc.
+3C0754     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-B1-97   (hex)		Apple, Inc.
+A4B197     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-B4-79   (hex)		Apple, Inc.
+F0B479     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-93-E9   (hex)		Apple, Inc.
+1093E9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-2A-60   (hex)		Apple, Inc.
+442A60     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-D1-D2   (hex)		Apple, Inc.
+A4D1D2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-CF-DA   (hex)		Apple, Inc.
+28CFDA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-30-65   (hex)		Apple, Inc.
+003065     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-14-51   (hex)		Apple, Inc.
+001451     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1E-52   (hex)		Apple, Inc.
+001E52     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-21-E9   (hex)		Apple, Inc.
+0021E9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-08-E0   (hex)		Apple, Inc.
+CC08E0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-54-53   (hex)		Apple, Inc.
+045453     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-F9-51   (hex)		Apple, Inc.
+F4F951     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-63-94   (hex)		Apple, Inc.
+C06394     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-AF-8F   (hex)		Apple, Inc.
+18AF8F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-B5-B7   (hex)		Apple, Inc.
+C8B5B7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-B2-1F   (hex)		Apple, Inc.
+90B21F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-F7-C5   (hex)		Apple, Inc.
+30F7C5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-B3-95   (hex)		Apple, Inc.
+40B395     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-FB-42   (hex)		Apple, Inc.
+44FB42     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-8D-28   (hex)		Apple, Inc.
+E88D28     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-94-26   (hex)		Apple, Inc.
+949426     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-7D-74   (hex)		Apple, Inc.
+207D74     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-F1-5A   (hex)		Apple, Inc.
+F4F15A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-6F-1D   (hex)		Apple, Inc.
+C86F1D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-90-AB   (hex)		Apple, Inc.
+3090AB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-2D-AA   (hex)		Apple, Inc.
+8C2DAA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-85-06   (hex)		Apple, Inc.
+848506     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-FE-94   (hex)		Apple, Inc.
+98FE94     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-00-4D   (hex)		Apple, Inc.
+D8004D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-20-0C   (hex)		Apple, Inc.
+64200C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-33-4B   (hex)		Apple, Inc.
+C8334B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-E6-82   (hex)		Apple, Inc.
+64E682     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-E8-56   (hex)		Apple, Inc.
+B8E856     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-96-95   (hex)		Apple, Inc.
+D89695     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-99-E2   (hex)		Apple, Inc.
+1499E2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-18-D1   (hex)		Apple, Inc.
+B418D1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-20-7B   (hex)		Apple, Inc.
+9C207B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-65-BD   (hex)		Apple, Inc.
+B065BD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-26-96   (hex)		Apple, Inc.
+542696     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-A3-CB   (hex)		Apple, Inc.
+64A3CB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-3C-92   (hex)		Apple, Inc.
+903C92     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-1D-72   (hex)		Apple, Inc.
+D81D72     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-12-98   (hex)		Apple, Inc.
+341298     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-E7-2C   (hex)		Apple, Inc.
+70E72C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-EC-E4   (hex)		Apple, Inc.
+70ECE4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-AE-20   (hex)		Apple, Inc.
+68AE20     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-87-A3   (hex)		Apple, Inc.
+AC87A3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-BB-2C   (hex)		Apple, Inc.
+D8BB2C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-4F-7E   (hex)		Apple, Inc.
+D04F7E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-78-F0   (hex)		Apple, Inc.
+2078F0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-AC-CB   (hex)		Apple, Inc.
+E0ACCB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-99-9B   (hex)		Apple, Inc.
+A0999B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-24-0E   (hex)		Apple, Inc.
+24240E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-DB-F8   (hex)		Apple, Inc.
+F0DBF8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-74-6E   (hex)		Apple, Inc.
+48746E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-AE-27   (hex)		Apple, Inc.
+54AE27     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-E9-98   (hex)		Apple, Inc.
+FCE998     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-BC-9F   (hex)		Apple, Inc.
+0CBC9F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-36-3B   (hex)		Apple, Inc.
+34363B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-A6-37   (hex)		Apple, Inc.
+D0A637     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-9F-70   (hex)		Apple, Inc.
+789F70     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-F3-87   (hex)		Apple, Inc.
+9CF387     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-5B-78   (hex)		Apple, Inc.
+A85B78     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-F6-50   (hex)		Apple, Inc.
+C8F650     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-8E-24   (hex)		Apple, Inc.
+A88E24     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-4A-39   (hex)		BITA
+6C4A39     (base 16)		BITA
+				6/F, New Century Hotel Office Tower
+				  BEI JING  100044
+				CN
+
+84-7D-50   (hex)		Holley Metering Limited
+847D50     (base 16)		Holley Metering Limited
+				181 Wuchang Avenue
+				Hangzhou  Zhejiang  310023
+				CN
+
+50-D5-9C   (hex)		Thai Habel Industrial Co., Ltd.
+50D59C     (base 16)		Thai Habel Industrial Co., Ltd.
+				3/1 - 3/3 RAMA 3 RD,
+				ฺBangkholaem  Bangkok  10120
+				TH
+
+20-89-6F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+20896F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+30-52-CB   (hex)		Liteon Technology Corporation
+3052CB     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+04-96-45   (hex)		WUXI SKY CHIP INTERCONNECTION TECHNOLOGY CO.,LTD.
+049645     (base 16)		WUXI SKY CHIP INTERCONNECTION TECHNOLOGY CO.,LTD.
+				Building F12, China Sensor Network International Innovation park,200# Linghu Avenue,Wuxi.
+				WUXI  Jiangsu  214135
+				CN
+
+1C-CD-E5   (hex)		Shanghai Wind Technologies Co.,Ltd
+1CCDE5     (base 16)		Shanghai Wind Technologies Co.,Ltd
+				Room 208,Section A, Building 3#, No.7 GuiQing Road, Xuhui District, Shanghai, China(Headquarter)
+				Shanghai  Shanghai  200233
+				CN
+
+68-14-01   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+681401     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+50-A9-DE   (hex)		Smartcom - Bulgaria AD
+50A9DE     (base 16)		Smartcom - Bulgaria AD
+				BIC IZOT, Building 1, Floor 3, Office 317
+				Sofia  Sofia  1784
+				BG
+
+AC-1F-D7   (hex)		Real Vision Technology Co.,Ltd.
+AC1FD7     (base 16)		Real Vision Technology Co.,Ltd.
+				A-805, 537, Dunchon-daero, Jungwon-gu
+				Seongnam-si  Gyeonggi-do  13216
+				KR
+
+88-C2-42   (hex)		Poynt Co.
+88C242     (base 16)		Poynt Co.
+				490 S. California Avenue
+				Palo Alto  California  94306
+				US
+
+14-02-EC   (hex)		Hewlett Packard Enterprise
+1402EC     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+E0-34-E4   (hex)		Feit Electric Company, Inc.
+E034E4     (base 16)		Feit Electric Company, Inc.
+				4901 Gregg Road
+				Pico Rivera  CA  90660
+				US
+
+34-C9-F0   (hex)		LM Technologies Ltd
+34C9F0     (base 16)		LM Technologies Ltd
+				Unit 19 Spectrum House
+				London  England  NW5 1LP
+				GB
+
+68-A8-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68A828     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-20-E8   (hex)		Apple, Inc.
+CC20E8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-BF-74   (hex)		Baicells Technologies Co.,LTD
+48BF74     (base 16)		Baicells Technologies Co.,LTD
+				10F,Dinghao Electronics Plaza-B,No.3 Haidian St.,Haidian Dist.,Beijing,China
+				Beijing  Beijing  10080
+				CN
+
+6C-93-54   (hex)		Yaojin Technology (Shenzhen) Co., LTD.
+6C9354     (base 16)		Yaojin Technology (Shenzhen) Co., LTD.
+				 No.18,Zhulong Tian Road,Shuitian No.4 Industrial Area,Shiyan Street, Baoan District,Shenzhen,China
+				Shenzhen  Guangdong  518108
+				CN
+
+DC-DC-07   (hex)		TRP Systems BV
+DCDC07     (base 16)		TRP Systems BV
+				Televisieweg 159 1322 BH  Almere
+				Almere  -  -
+				NL
+
+38-91-D5   (hex)		Hangzhou H3C Technologies Co., Limited
+3891D5     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+8C-E2-DA   (hex)		Circle Media Inc
+8CE2DA     (base 16)		Circle Media Inc
+				1319 SE Martin Luther King Jr. Blvd.
+				Portland  Oregon  97214
+				US
+
+38-21-87   (hex)		Midea Group Co., Ltd.
+382187     (base 16)		Midea Group Co., Ltd.
+				No. 6 Midea Avenue,
+				Foshan  Guangdong  528311
+				CN
+
+78-D6-B2   (hex)		Toshiba
+78D6B2     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+E8-DE-D6   (hex)		Intrising Networks, Inc.
+E8DED6     (base 16)		Intrising Networks, Inc.
+				8F., No.67, Shitan Rd., Neihu Dist., Taipei City 11469
+				Taipei    
+				TW
+
+DC-82-F6   (hex)		iPort
+DC82F6     (base 16)		iPort
+				236 Calle Pintoresco
+				San Clemente  CA  92672
+				US
+
+70-48-0F   (hex)		Apple, Inc.
+70480F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-B7-2B   (hex)		PLUMgrid Inc
+3CB72B     (base 16)		PLUMgrid Inc
+				5155 OLD IRONSIDES DR
+				Santa Clara  CA  95054
+				US
+
+48-9A-42   (hex)		Technomate Ltd
+489A42     (base 16)		Technomate Ltd
+				Unit 11 Nobel Road
+				London    N18 3BH
+				GB
+
+20-D1-60   (hex)		Private
+20D160     (base 16)		Private
+
+BC-9C-31   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC9C31     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-8B-4C   (hex)		KingTing Tech.
+D88B4C     (base 16)		KingTing Tech.
+				8 Holly St
+				Irvine  California  92612
+				US
+
+38-4C-90   (hex)		ARRIS Group, Inc.
+384C90     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F0-B0-E7   (hex)		Apple, Inc.
+F0B0E7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-1C-23   (hex)		Hilan Technology CO.,LTD
+381C23     (base 16)		Hilan Technology CO.,LTD
+				604,Block 1,Kai Da Er Building,No.168 TongSha Road,XiLi Town,Nanshan,Shenzhen,P.R.C
+				Shenzhen  Guandong  518055
+				CN
+
+64-9A-12   (hex)		P2 Mobile Technologies Limited
+649A12     (base 16)		P2 Mobile Technologies Limited
+				Unit 708, 7/F, Bio-Informatics Centre, No.2 Science Park West Avenue,
+				Hong Kong  Hong Kong  00000
+				HK
+
+AC-89-95   (hex)		AzureWave Technology Inc.
+AC8995     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+04-69-F8   (hex)		Apple, Inc.
+0469F8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-29-BE   (hex)		Shanghai MRDcom Co.,Ltd
+3029BE     (base 16)		Shanghai MRDcom Co.,Ltd
+				NO.123 JULI RD
+				SHANGHAI  PUDONG ZHANGJIANG HIGH-TECH PARK  201203
+				CN
+
+20-C3-A4   (hex)		RetailNext
+20C3A4     (base 16)		RetailNext
+				60 S. Market St, 10th Floor
+				San Jose  CA  95113
+				US
+
+E4-C2-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4C2D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-F4-BE   (hex)		Palo Alto Networks
+D4F4BE     (base 16)		Palo Alto Networks
+				4401 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+48-B6-20   (hex)		ROLI Ltd.
+48B620     (base 16)		ROLI Ltd.
+				2 Glebe Road
+				London    E8 4BD
+				GB
+
+D8-88-CE   (hex)		RF Technology Pty Ltd
+D888CE     (base 16)		RF Technology Pty Ltd
+				46/7 Sefton Rd
+				Thornleigh  NSW  2120
+				AU
+
+30-7C-B2   (hex)		ANOV FRANCE
+307CB2     (base 16)		ANOV FRANCE
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN  TARN ET GARONNE  82000
+				FR
+
+84-79-73   (hex)		Shanghai Baud Data Communication Co.,Ltd.
+847973     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
+				NO.123 JULI RD
+				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
+				CN
+
+E8-B4-C8   (hex)		Samsung Electronics Co.,Ltd
+E8B4C8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-87-E2   (hex)		Samsung Electronics Co.,Ltd
+D087E2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-5B-7B   (hex)		Samsung Electronics Co.,Ltd
+F05B7B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-47-BF   (hex)		Samsung Electronics Co.,Ltd
+B047BF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-0B-C6   (hex)		Samsung Electronics Co.,Ltd
+7C0BC6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-FE-90   (hex)		Mellanox Technologies, Inc.
+7CFE90     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+84-5B-12   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+845B12     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-55-31   (hex)		Samsung Electronics Co.,Ltd
+205531     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-86-8C   (hex)		ARRIS Group, Inc.
+10868C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+44-FD-A3   (hex)		Everysight LTD.
+44FDA3     (base 16)		Everysight LTD.
+				Advanced Technology Center P.O.B 539
+				Haifa  Haifa  31053
+				IL
+
+A8-A7-95   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+A8A795     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+90-6F-A9   (hex)		NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.
+906FA9     (base 16)		NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.
+				No.1 Putian Road,Yuhuamenwai,Nanjing
+				Nan Jing  Jiang Su  210022
+				CN
+
+60-FD-56   (hex)		WOORISYSTEMS CO., Ltd
+60FD56     (base 16)		WOORISYSTEMS CO., Ltd
+				357-4, Neungpyeong-ri, Opo-eup
+				Gwangjiu-si  Gyeonggi-do  464-921
+				KR
+
+98-70-E8   (hex)		INNATECH SDN BHD
+9870E8     (base 16)		INNATECH SDN BHD
+				2, JALAN TIARA 3, TIARA SQUARE
+				SUBANG JAYA  SELANGOR  47600
+				MY
+
+44-65-6A   (hex)		Mega Video Electronic(HK) Industry Co., Ltd
+44656A     (base 16)		Mega Video Electronic(HK) Industry Co., Ltd
+				Room 503, No.43 Fushun Street, Huanghai West Road,
+				Dalian  Liaoning  116600
+				CN
+
+78-EB-39   (hex)		Instituto Nacional de Tecnología Industrial
+78EB39     (base 16)		Instituto Nacional de Tecnología Industrial
+				Av. Gral. Paz 5445
+				San Martín  Buenos Aires  1650
+				AR
+
+0C-75-6C   (hex)		Anaren Microwave, Inc.
+0C756C     (base 16)		Anaren Microwave, Inc.
+				6635 Kirkville Road
+				East Syracuse  NY  13057
+				US
+
+D4-7B-B0   (hex)		ASKEY COMPUTER CORP
+D47BB0     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+F0-22-4E   (hex)		Esan electronic co.
+F0224E     (base 16)		Esan electronic co.
+				D&I Building 2nd floor
+				Gun-Po  Kyunggido  435-862
+				KR
+
+CC-5F-BF   (hex)		Topwise 3G Communication Co., Ltd.
+CC5FBF     (base 16)		Topwise 3G Communication Co., Ltd.
+				6 Floor, A8 Music Building, Keyuan Road, High-Tech Park, Nanshan District, Shenzhen, China
+				Shenzhen  Guangdong  518000
+				CN
+
+C8-F9-C8   (hex)		NewSharp Technology(SuZhou)Co,Ltd
+C8F9C8     (base 16)		NewSharp Technology(SuZhou)Co,Ltd
+				1st/f.building 7th No.328 XingHu street SuZhou City
+				SuZhou City  JiangSu Province  215123
+				CN
+
+80-C5-E6   (hex)		Microsoft Corporation
+80C5E6     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+10-DF-8B   (hex)		Shenzhen CareDear Communication Technology Co.,Ltd
+10DF8B     (base 16)		Shenzhen CareDear Communication Technology Co.,Ltd
+				No.605,6th floor, 1st Section, 25th Building, Science and Technology Park Industrial Zone, median space, High-tech Zone
+				ShenZhen  Guangdong  518000
+				CN
+
+C4-12-F5   (hex)		D-Link International
+C412F5     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+5C-45-27   (hex)		Juniper Networks
+5C4527     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+E0-2C-B2   (hex)		Lenovo Mobile Communication (Wuhan) Company Limited
+E02CB2     (base 16)		Lenovo Mobile Communication (Wuhan) Company Limited
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan, China  430205
+				Wuhan  Hubei  430205
+				CN
+
+60-6D-C7   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+606DC7     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+68-ED-A4   (hex)		Shenzhen Seavo Technology Co.,Ltd
+68EDA4     (base 16)		Shenzhen Seavo Technology Co.,Ltd
+				5H,West Building,NO.210,Terra Hi-Tech Industrial Park,
+				Shenzhen  Guangdong  518040
+				CN
+
+2C-C5-D3   (hex)		Ruckus Wireless
+2CC5D3     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+F4-57-3E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+F4573E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+D0-43-1E   (hex)		Dell Inc.
+D0431E     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+54-CD-10   (hex)		Panasonic Mobile Communications Co.,Ltd.
+54CD10     (base 16)		Panasonic Mobile Communications Co.,Ltd.
+				600 Saedo-cho Tsuzuki-ku
+				Yokohama City  Kanagawa  224-8539
+				JP
+
+40-8D-5C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+408D5C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+FC-E1-FB   (hex)		Array Networks
+FCE1FB     (base 16)		Array Networks
+				1371 McCarthy Blvd
+				Milpitas  California  95035
+				US
+
+E8-91-20   (hex)		Motorola Mobility LLC, a Lenovo Company
+E89120     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+D4-F9-A1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D4F9A1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-40-AD   (hex)		Samsung Electronics Co.,Ltd
+5440AD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-24-DD   (hex)		Cambrionix Ltd
+A424DD     (base 16)		Cambrionix Ltd
+				St Johns Innovation Centre
+				Cambridge  Cambridgeshire  CB4 0WS
+				GB
+
+14-5A-83   (hex)		Logi-D inc
+145A83     (base 16)		Logi-D inc
+				5550 Des Rossignol Blvd
+				Laval  Quebec  H7L 5W6
+				CA
+
+80-4E-81   (hex)		Samsung Electronics Co.,Ltd
+804E81     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C0-9A-71   (hex)		XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD
+C09A71     (base 16)		XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD
+				1-3F, Block2, No.6 Wanghai Rd,Siming District, Xiamen, Fujian, China (”MEITU”)
+				Xiamen  Fujian  361008
+				CN
+
+64-16-7F   (hex)		Polycom
+64167F     (base 16)		Polycom
+				6001 America Center Drive
+				San Jose  CA  95002
+				US
+
+34-0B-40   (hex)		MIOS ELETTRONICA SRL
+340B40     (base 16)		MIOS ELETTRONICA SRL
+				VIA ARCHIMEDE, 10
+				SAN MARTINO B.A. (VR)  VERONA  37036
+				IT
+
+48-06-6A   (hex)		Tempered Networks, Inc.
+48066A     (base 16)		Tempered Networks, Inc.
+				100 West Harrison St
+				Seattle  WA  98119
+				US
+
+BC-F8-11   (hex)		Xiamen DNAKE Technology Co.,Ltd
+BCF811     (base 16)		Xiamen DNAKE Technology Co.,Ltd
+				5F,Xingtel Building,Chuangxin Rd.
+				Xiamen  Fujian  361006
+				CN
+
+90-0A-39   (hex)		Wiio, Inc.
+900A39     (base 16)		Wiio, Inc.
+				99 S. Almaden Boulevard
+				San Jose  California  95113
+				US
+
+D0-C0-BF   (hex)		Actions Microelectronics Co., Ltd
+D0C0BF     (base 16)		Actions Microelectronics Co., Ltd
+				201, No 9 Building, Software Park,Kejizhonger Rd.,
+				Shenzhen  Gangdong  518057
+				CN
+
+E8-61-BE   (hex)		Melec Inc.
+E861BE     (base 16)		Melec Inc.
+				516-10 Higashiasakawamachi
+				Hachioji  Tokyo  193-0834
+				JP
+
+58-70-C6   (hex)		Shanghai Xiaoyi Technology Co., Ltd.
+5870C6     (base 16)		Shanghai Xiaoyi Technology Co., Ltd.
+				Shanghai Zhangjiang hi-tech park of Pudong New Area
+				Shanghai  Shanghai  201120
+				CN
+
+FC-8F-90   (hex)		Samsung Electronics Co.,Ltd
+FC8F90     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+74-04-2B   (hex)		Lenovo Mobile Communication (Wuhan) Company Limited
+74042B     (base 16)		Lenovo Mobile Communication (Wuhan) Company Limited
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan, China  430205
+				Wuhan  Hubei  430205
+				CN
+
+F8-7A-EF   (hex)		Rosonix Technology, Inc.
+F87AEF     (base 16)		Rosonix Technology, Inc.
+				10F, No.235, Sec. 4, Chengde Rd., 
+				Taipei  Taiwan  11167
+				TW
+
+20-28-BC   (hex)		Visionscape Co,. Ltd.
+2028BC     (base 16)		Visionscape Co,. Ltd.
+				503, 145, Gasan Digital 1-ro, Geumcheon-gu,
+				Seoul  Korea  153-787
+				KR
+
+24-1C-04   (hex)		SHENZHEN JEHE TECHNOLOGY DEVELOPMENT CO., LTD.
+241C04     (base 16)		SHENZHEN JEHE TECHNOLOGY DEVELOPMENT CO., LTD.
+				2/F, Block A, Tsinghua Information Harbor, North Section
+				Shenzhen  Guangdong  518057
+				CN
+
+D0-5C-7A   (hex)		Sartura d.o.o.
+D05C7A     (base 16)		Sartura d.o.o.
+				Kuniscak 28
+				  Zagreb  10000
+				HR
+
+88-70-33   (hex)		Hangzhou Silan Microelectronic Inc
+887033     (base 16)		Hangzhou Silan Microelectronic Inc
+				No.4 HuangGuShan Road
+				Hangzhou  Zhejiang  310012
+				CN
+
+DC-56-E6   (hex)		Shenzhen Bococom Technology Co.,LTD
+DC56E6     (base 16)		Shenzhen Bococom Technology Co.,LTD
+				303, Dongjiang Environmental Build, LangShan Road.
+				Shenzhen  Guangdong  518000
+				CN
+
+CC-96-35   (hex)		LVS Co.,Ltd.
+CC9635     (base 16)		LVS Co.,Ltd.
+				SmartValley B # 801
+				Incheon    406-840
+				KR
+
+44-80-EB   (hex)		Motorola Mobility LLC, a Lenovo Company
+4480EB     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+40-28-14   (hex)		RFI Engineering
+402814     (base 16)		RFI Engineering
+				Markerkant 13-76
+				Almere  Flevoland  1314AN
+				NL
+
+14-41-46   (hex)		Honeywell (China) Co., LTD
+144146     (base 16)		Honeywell (China) Co., LTD
+				No. 100, Zunyi Road, Changning District
+				Shanghai  Shanghai  200051
+				CN
+
+94-F1-9E   (hex)		HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD
+94F19E     (base 16)		HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD
+				China Guangdong Huizhou
+				Huizhou  Guangdong  516000
+				CN
+
+B8-56-BD   (hex)		ITT LLC
+B856BD     (base 16)		ITT LLC
+				1-ya Brestkaya St, building 35
+				  Moscow  125047
+				RU
+
+40-A5-EF   (hex)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+40A5EF     (base 16)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+				Room 607-610, Block B, TAOJINDI Electronic Business Incubation Base
+				Tenglong Road, Longhua District,   Shenzhen Guangdong  518000
+				CN
+
+C4-92-4C   (hex)		KEISOKUKI CENTER CO.,LTD.
+C4924C     (base 16)		KEISOKUKI CENTER CO.,LTD.
+				2-6-7 SAKANE
+				KAWANISHI-CITY  HYOGO  666-0021
+				JP
+
+74-9C-E3   (hex)		KodaCloud Canada, Inc
+749CE3     (base 16)		KodaCloud Canada, Inc
+				Suite 310
+				Ottawa  Ontario  K2K3G4
+				CA
+
+D4-55-56   (hex)		Fiber Mountain Inc.
+D45556     (base 16)		Fiber Mountain Inc.
+				700 W Johnson Ave
+				Cheshire  CT  06410
+				US
+
+50-50-2A   (hex)		Egardia
+50502A     (base 16)		Egardia
+				Kleine Landtong 19
+				Gorinchem  Zuid Holland  4201 HL
+				NL
+
+74-96-37   (hex)		Todaair Electronic Co., Ltd
+749637     (base 16)		Todaair Electronic Co., Ltd
+				F.6 Electronic Building, No.1 Shuinan Guangdeli Road，Peng’Jiang District, Jiangmen, Guangdong, China
+				JiangMen  Guangdong  529000
+				CN
+
+88-E6-03   (hex)		Avotek corporation
+88E603     (base 16)		Avotek corporation
+				9-17, Dongil-ro 174-gil, Nowon-gu, Seoul
+				Seoul  Seoul  139-808
+				KR
+
+2C-AD-13   (hex)		SHENZHEN ZHILU TECHNOLOGY CO.,LTD
+2CAD13     (base 16)		SHENZHEN ZHILU TECHNOLOGY CO.,LTD
+				B2-402 Kexin Science Park, Keyuan Road, Hi-tech Park, Nanshan District, Shenzhen
+				shenzhen  Guangdong  518052
+				CN
+
+78-AC-BF   (hex)		Igneous Systems
+78ACBF     (base 16)		Igneous Systems
+				2401 4th Ave
+				Seattle  WA  98121
+				US
+
+C4-8E-8F   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+C48E8F     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C4-36-6C   (hex)		LG Innotek
+C4366C     (base 16)		LG Innotek
+				Jangduk-dong 978-1
+				Gwang-ju  Gwangsan-gu  506-731
+				KR
+
+54-36-9B   (hex)		1Verge Internet Technology (Beijing) Co., Ltd.
+54369B     (base 16)		1Verge Internet Technology (Beijing) Co., Ltd.
+				5th Floor, Sinosteel International Plaza
+				Haidian District  Beijing  
+				CN
+
+40-D2-8A   (hex)		Nintendo Co., Ltd.
+40D28A     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+40-62-B6   (hex)		Tele system communication
+4062B6     (base 16)		Tele system communication
+				5F, No.437, Tao Ying Rd
+				Taoyuan    33068
+				TW
+
+60-12-8B   (hex)		CANON INC.
+60128B     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+84-C3-E8   (hex)		Vaillant GmbH
+84C3E8     (base 16)		Vaillant GmbH
+				Berghauser Straße 40
+				Remscheid  NRW  D-42859
+				DE
+
+9C-D3-5B   (hex)		Samsung Electronics Co.,Ltd
+9CD35B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-9F-BA   (hex)		Samsung Electronics Co.,Ltd
+A89FBA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B8-8E-C6   (hex)		Stateless Networks
+B88EC6     (base 16)		Stateless Networks
+				388 Market Street
+				San Francisco  CA  94111
+				US
+
+BC-D1-65   (hex)		Cisco SPVTG
+BCD165     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+28-E4-76   (hex)		Pi-Coral
+28E476     (base 16)		Pi-Coral
+				2130 Gold Street, Ste. 200
+				San Jose  CA - California  95002
+				US
+
+4C-A5-15   (hex)		Baikal Electronics JSC
+4CA515     (base 16)		Baikal Electronics JSC
+				Highway Baltic 26 km, BC 'RigaLand, Block B, 3-rd entrance, 2-nd floor.
+				Krasnogorsk district  Moscow region  143421
+				RU
+
+7C-3C-B6   (hex)		Shenzhen Homecare Technology Co.,Ltd.
+7C3CB6     (base 16)		Shenzhen Homecare Technology Co.,Ltd.
+				Homecare Industrial Zone,NO.30,Langdong road,Yangchuan,Songgang Town,Bao'an Distric ,
+				Shenzhen  Guangdong  5108105
+				CN
+
+20-C0-6D   (hex)		SHENZHEN SPACETEK TECHNOLOGY CO.,LTD
+20C06D     (base 16)		SHENZHEN SPACETEK TECHNOLOGY CO.,LTD
+				3F, NO.2, ChaXiSanWei Industrial Park, Gushu Community, XiXiang Street, BaoAn District
+				ShenZhen  GuangDong  518100
+				
+
+48-86-E8   (hex)		Microsoft Corporation
+4886E8     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+74-A3-4A   (hex)		ZIMI CORPORATION
+74A34A     (base 16)		ZIMI CORPORATION
+				Room A913, 159 Chengjiang Road, Jiangyin City, Jiangsu Province, P, R.China
+				    214400
+				CN
+
+A8-64-05   (hex)		nimbus 9, Inc
+A86405     (base 16)		nimbus 9, Inc
+				29 W. Cimarron St.
+				Colorado Springs  CO  80903
+				US
+
+30-D5-87   (hex)		Samsung Electronics Co.,Ltd
+30D587     (base 16)		Samsung Electronics Co.,Ltd
+				#416, Maetan 3-dong
+				Suwon-si  Gyeonggi-do  443-742
+				KR
+
+68-28-F6   (hex)		Vubiq Networks, Inc.
+6828F6     (base 16)		Vubiq Networks, Inc.
+				9231 Irvine Blvd.
+				Irvine  California  92618
+				US
+
+DC-60-A1   (hex)		Teledyne DALSA Professional Imaging
+DC60A1     (base 16)		Teledyne DALSA Professional Imaging
+				High Tech Campus 27
+				Eindhoven  NB  5656 AE
+				NL
+
+10-A6-59   (hex)		Mobile Create Co.,Ltd.
+10A659     (base 16)		Mobile Create Co.,Ltd.
+				Kakukita 2-20-8
+				Oita    870-0848
+				JP
+
+58-85-6E   (hex)		QSC AG
+58856E     (base 16)		QSC AG
+				Mathias-Brueggen-Str. 55
+				Köln    50829
+				DE
+
+8C-91-09   (hex)		Toyoshima Electric Technoeogy(Suzhou) Co.,Ltd.
+8C9109     (base 16)		Toyoshima Electric Technoeogy(Suzhou) Co.,Ltd.
+				No.399,Baisheng Road,Jinxi Town
+				Kunshan  Jiangsu  215324
+				CN
+
+54-09-8D   (hex)		deister electronic GmbH
+54098D     (base 16)		deister electronic GmbH
+				Hermann-Bahlsen-Str. 11
+				Barsinghausen  Niedersachsen  30890
+				DE
+
+D0-5B-A8   (hex)		zte corporation
+D05BA8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E4-BA-D9   (hex)		360 Fly Inc.
+E4BAD9     (base 16)		360 Fly Inc.
+				1000 Town Center Blvd
+				Canonsburg  PA  15317
+				US
+
+EC-59-E7   (hex)		Microsoft Corporation
+EC59E7     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+C0-35-C5   (hex)		Prosoft Systems LTD
+C035C5     (base 16)		Prosoft Systems LTD
+				Volgogradskaya 194-a
+				Ekaterinburg  Sverdlovskay  620102
+				RU
+
+A0-A3-E2   (hex)		Actiontec Electronics, Inc
+A0A3E2     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+74-54-7D   (hex)		Cisco SPVTG
+74547D     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+00-E6-E8   (hex)		Netzin Technology Corporation,.Ltd.
+00E6E8     (base 16)		Netzin Technology Corporation,.Ltd.
+				4F-17, No. 26, Lane 321, Yang-Kuang St.,Neihu District, Taipei, Taiwan,
+				Taiwan Taipei  Taiwan Taipei  11491
+				TW
+
+50-F4-3C   (hex)		Leeo Inc
+50F43C     (base 16)		Leeo Inc
+				989 Comercial St
+				Palo Alto  CA  94303
+				US
+
+E8-87-A3   (hex)		Loxley Public Company Limited
+E887A3     (base 16)		Loxley Public Company Limited
+				102 Na Ranong Road, Klongtoey,
+				  Bangkok  10110
+				TH
+
+10-C6-7E   (hex)		SHENZHEN JUCHIN TECHNOLOGY CO., LTD
+10C67E     (base 16)		SHENZHEN JUCHIN TECHNOLOGY CO., LTD
+				Unit 423 4/B NO.1, Central Business District
+				Shenzhen  Guangdong  518000
+				CN
+
+08-A5-C8   (hex)		Sunnovo International Limited
+08A5C8     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+F8-84-79   (hex)		Yaojin Technology(Shenzhen)Co.,Ltd
+F88479     (base 16)		Yaojin Technology(Shenzhen)Co.,Ltd
+				Yaojin Park, Shui Tian No.4 Industrial Area ShiYan Tow,
+				SHENZHEN  GUANGDONG  518108
+				CN
+
+2C-29-97   (hex)		Microsoft Corporation
+2C2997     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+D4-61-32   (hex)		Pro Concept Manufacturer Co.,Ltd.
+D46132     (base 16)		Pro Concept Manufacturer Co.,Ltd.
+				88/1 Moo12 Soi Phetkasem120
+				Kratumbaen  Samutsakorn  74130
+				TH
+
+54-A0-50   (hex)		ASUSTek COMPUTER INC.
+54A050     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+4C-2C-83   (hex)		Zhejiang KaNong Network Technology Co.,Ltd.
+4C2C83     (base 16)		Zhejiang KaNong Network Technology Co.,Ltd.
+				Room 633, Building B, ShunFan Technology Park,JingChang Road No.768, YuHang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+90-8C-09   (hex)		Total Phase
+908C09     (base 16)		Total Phase
+				735 Palomar Ave
+				Sunnyvale  CA  94085
+				US
+
+DC-2F-03   (hex)		Step forward Group Co., Ltd.
+DC2F03     (base 16)		Step forward Group Co., Ltd.
+				1/3 Park Village Rama2 Floor 2   C2-2
+				Bangkok  Bangkok  10150
+				TH
+
+38-0E-7B   (hex)		V.P.S. Thai Co., Ltd
+380E7B     (base 16)		V.P.S. Thai Co., Ltd
+				279-281 Mangkorn Rd., Pomprab District
+				Bangkok  Bangkok  10100
+				TH
+
+2C-37-96   (hex)		CYBO CO.,LTD.
+2C3796     (base 16)		CYBO CO.,LTD.
+				218 MOO 3 LAEM CHA BANG
+				SRIRACHA  CHONBURI  20230
+				TH
+
+58-7F-B7   (hex)		SONAR INDUSTRIAL CO., LTD.
+587FB7     (base 16)		SONAR INDUSTRIAL CO., LTD.
+				29, 29/1, 29/2, MOO.3, THATALAD,
+				SAMPRAN  NAKORN PATHOM  73110
+				TH
+
+08-EB-29   (hex)		Jiangsu Huitong Group Co.,Ltd.
+08EB29     (base 16)		Jiangsu Huitong Group Co.,Ltd.
+				No. 24, Block 2, Taohuawu New District
+				Zhenjiang  Jiangsu  212003
+				CN
+
+40-9B-0D   (hex)		Shenzhen Yourf Kwan Industrial Co., Ltd
+409B0D     (base 16)		Shenzhen Yourf Kwan Industrial Co., Ltd
+				MCN Edifice 5D, R1 Building, No.21 4th Hi-tech Road South, High-tech Industrial Park(south)
+				Shenzhen  Guangdong  518057
+				CN
+
+D8-CB-8A   (hex)		Micro-Star INTL CO., LTD.
+D8CB8A     (base 16)		Micro-Star INTL CO., LTD.
+				No.69, Lide St.,
+				New Taipei City  Taiwan  235
+				TW
+
+70-FC-8C   (hex)		OneAccess SA
+70FC8C     (base 16)		OneAccess SA
+				381 avenue du général de Gaulle
+				CLAMART   France  92140
+				FR
+
+58-10-8C   (hex)		Intelbras
+58108C     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+4C-74-03   (hex)		BQ
+4C7403     (base 16)		BQ
+				c Sofía 10. Polígono Európolis
+				Las Rozas de Madrid  Madrid  28230
+				ES
+
+8C-5D-60   (hex)		UCI Corporation Co.,Ltd.
+8C5D60     (base 16)		UCI Corporation Co.,Ltd.
+				299/195-7, Chaengwattana Road,
+				Bangkok  Bangkok  10210
+				TH
+
+BC-6B-4D   (hex)		Nokia
+BC6B4D     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+C8-D0-19   (hex)		Shanghai Tigercel Communication Technology Co.,Ltd
+C8D019     (base 16)		Shanghai Tigercel Communication Technology Co.,Ltd
+				Room 805, building 1
+				  Shanghai  200235
+				CN
+
+90-21-81   (hex)		Shanghai Huaqin Telecom Technology Co.,Ltd
+902181     (base 16)		Shanghai Huaqin Telecom Technology Co.,Ltd
+				No.1 Building,399 Keyuan Road, Zhangjian Hi-Tech Park,
+				shanghai  shanghai  201203
+				CN
+
+84-96-81   (hex)		Cathay Communication Co.,Ltd
+849681     (base 16)		Cathay Communication Co.,Ltd
+				Tsinghua Institude A319 of Hi-tech Park,Nanshan district,Shenzhen China
+				Shenzhen  Canton  0755
+				CN
+
+2C-A3-0E   (hex)		POWER DRAGON DEVELOPMENT LIMITED
+2CA30E     (base 16)		POWER DRAGON DEVELOPMENT LIMITED
+				Room D, 10/F Tower A, Billion Centre, 1 Wang Kwong Road, Kowloon Bay
+				HONG KONG  HONG KONG  999077
+				CN
+
+84-86-F3   (hex)		Greenvity Communications
+8486F3     (base 16)		Greenvity Communications
+				673 S. Milpitas Blvd Suite 204
+				Milpitas  California  95035
+				US
+
+1C-52-16   (hex)		DONGGUAN HELE ELECTRONICS CO., LTD
+1C5216     (base 16)		DONGGUAN HELE ELECTRONICS CO., LTD
+				Lijiangwei Group,
+				Dongguan City  Guangdong  86
+				CN
+
+60-99-D1   (hex)		Vuzix / Lenovo
+6099D1     (base 16)		Vuzix / Lenovo
+				2166 Brighton Henrietta Town Line Road
+				Rochester  NY  14623
+				US
+
+B0-45-15   (hex)		mira fitness,LLC.
+B04515     (base 16)		mira fitness,LLC.
+				1925 West Field Court Suite100
+				Lake Forest  IL  60045
+				US
+
+14-48-8B   (hex)		Shenzhen Doov Technology Co.,Ltd
+14488B     (base 16)		Shenzhen Doov Technology Co.,Ltd
+				11st Floor,East,2nd Phase
+				 Futian District, Shenzhen  Guangdong  518040
+				CN
+
+20-12-D5   (hex)		Scientech Materials Corporation
+2012D5     (base 16)		Scientech Materials Corporation
+				No.7, Hejiang 2nd Rd., Chungli , Taoyuan Hsien 320, Taiwan
+				Taoyuan Hsien  Chungli  320
+				TW
+
+6C-6E-FE   (hex)		Core Logic Inc.
+6C6EFE     (base 16)		Core Logic Inc.
+				11th Fl., 1-B U-SPACE Bldg.
+				Seongnam  Gyeonggi-do  463-400
+				KR
+
+38-08-FD   (hex)		Silca Spa
+3808FD     (base 16)		Silca Spa
+				Via Podgora, 20 (Z.I.)
+				Vittorio Veneto  TV  31029
+				IT
+
+78-45-61   (hex)		CyberTAN Technology Inc.
+784561     (base 16)		CyberTAN Technology Inc.
+				99 Park Ave III, Hsinchu Science Park
+				Hsinchu    308
+				TW
+
+94-CE-31   (hex)		CTS Limited
+94CE31     (base 16)		CTS Limited
+				1st district, 23D, 21
+				Moscow  -  142784
+				RU
+
+80-F8-EB   (hex)		RayTight
+80F8EB     (base 16)		RayTight
+				Room 1-216, Building 25, No 9, Anningzhuang West Road
+				Haidian District  Beijing  100085
+				CN
+
+D4-37-D7   (hex)		zte corporation
+D437D7     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+2C-01-0B   (hex)		NASCENT Technology, LLC - RemKon
+2C010B     (base 16)		NASCENT Technology, LLC - RemKon
+				2744 Yorkmont Road
+				Charlotte  NC  28208
+				
+
+04-DE-DB   (hex)		Rockport Networks Inc
+04DEDB     (base 16)		Rockport Networks Inc
+				515 Legget Dr., Suite 600
+				Kanata  ON  K2K 3G4
+				CA
+
+1C-48-40   (hex)		IMS Messsysteme GmbH
+1C4840     (base 16)		IMS Messsysteme GmbH
+				Dieselstr. 55
+				Heiligenhaus  NRW  D-42579
+				DE
+
+60-50-C1   (hex)		Kinetek Sports
+6050C1     (base 16)		Kinetek Sports
+				16885 Via Del Campo Ct.
+				San Diego  Ca  92127
+				US
+
+2C-1A-31   (hex)		Electronics Company Limited
+2C1A31     (base 16)		Electronics Company Limited
+				Units 12,15&16,8/F,Metro Centre 2
+				Kowloon Bay  HongKong  852
+				CN
+
+90-B6-86   (hex)		Murata Manufacturing Co., Ltd.
+90B686     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+EC-D9-D1   (hex)		Shenzhen TG-NET Botone Technology Co.,Ltd.
+ECD9D1     (base 16)		Shenzhen TG-NET Botone Technology Co.,Ltd.
+				East F/3,No.38 Huarong Second Industry Zone
+				Shenzhen  Guangdong  518109
+				CN
+
+6C-02-73   (hex)		Shenzhen Jin Yun Video Equipment Co., Ltd.
+6C0273     (base 16)		Shenzhen Jin Yun Video Equipment Co., Ltd.
+				4th floor, 78th, Matou Road
+				Shenzhen  Guangdong  518000
+				CN
+
+54-DF-00   (hex)		Ulterius Technologies, LLC
+54DF00     (base 16)		Ulterius Technologies, LLC
+				1625 N. Waterfront Parkway
+				Wichita  KS  67206
+				US
+
+20-ED-74   (hex)		Ability enterprise co.,Ltd.
+20ED74     (base 16)		Ability enterprise co.,Ltd.
+				4F., No.8, Ln.7, Wuquan Rd, Wugu Dist, New Taipei City 24886, Taiwan(R.O.C)
+				Taipei  Taipei  24886
+				TW
+
+A0-56-B2   (hex)		Harman/Becker Automotive Systems GmbH
+A056B2     (base 16)		Harman/Becker Automotive Systems GmbH
+				Becker-Göring-Straße 16
+				Karlsbad  Baden-Württemberg  76307
+				DE
+
+44-66-6E   (hex)		IP-LINE
+44666E     (base 16)		IP-LINE
+				#204, Gangseo B/D
+				Guro-gu  Seoul  152-826
+				KR
+
+24-4F-1D   (hex)		iRule LLC
+244F1D     (base 16)		iRule LLC
+				1555 Broadway St
+				Detroit  MI  48226
+				US
+
+94-AE-E3   (hex)		Belden Hirschmann Industries (Suzhou) Ltd.
+94AEE3     (base 16)		Belden Hirschmann Industries (Suzhou) Ltd.
+				333 Yanhu Road, Huaqiao Town
+				Kunshan  Jiangsu  215332
+				CN
+
+5C-B6-CC   (hex)		NovaComm Technologies Inc.
+5CB6CC     (base 16)		NovaComm Technologies Inc.
+				902A, #560 Shengxia Rd., ZJ Inno Park
+				  Shanghai  201203
+				CN
+
+70-5B-2E   (hex)		M2Communication Inc.
+705B2E     (base 16)		M2Communication Inc.
+				Room 12, 18F., No.65, Gaotie 7th Road
+				Zhubei City  Hsinchu County  302
+				TW
+
+5C-15-15   (hex)		ADVAN
+5C1515     (base 16)		ADVAN
+				Wisma SMR.JL.Yos Sudarso Kav 89,Lt8.Suite 804,Jakarta Utara 10730
+				Jakarta  Jakarta Utara  １４３５０
+				ID
+
+D0-59-E4   (hex)		Samsung Electronics Co.,Ltd
+D059E4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-A3-64   (hex)		Samsung Electronics Co.,Ltd
+14A364     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-0A-C6   (hex)		DEXON Systems Ltd.
+B40AC6     (base 16)		DEXON Systems Ltd.
+				Baross u. 165
+				Budaors  Pest  H-2040
+				HU
+
+D8-66-EE   (hex)		BOXIN COMMUNICATION CO.,LTD.
+D866EE     (base 16)		BOXIN COMMUNICATION CO.,LTD.
+				Room 309，Block A，New materials business building
+				Haidian District  Beijing  100094
+				CN
+
+28-29-CC   (hex)		Corsa Technology Incorporated
+2829CC     (base 16)		Corsa Technology Incorporated
+				505 March Road
+				Ottawa  Ontario  K2K 3A4
+				CA
+
+18-4A-6F   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+184A6F     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+10-C3-7B   (hex)		ASUSTek COMPUTER INC.
+10C37B     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+E8-5D-6B   (hex)		Luminate Wireless
+E85D6B     (base 16)		Luminate Wireless
+				20823 Stevens Creek Blvd, Suite 300
+				Cupertino  CA  95014
+				US
+
+B4-0B-44   (hex)		Smartisan Technology Co., Ltd.
+B40B44     (base 16)		Smartisan Technology Co., Ltd.
+				7/F, Motorola Bldg., 1st Wangjing East Rd,
+				Beijing    100102
+				CN
+
+34-31-C4   (hex)		AVM GmbH
+3431C4     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+50-FE-F2   (hex)		Sify Technologies Ltd
+50FEF2     (base 16)		Sify Technologies Ltd
+				II floor, TIDEL Park,
+				chennai  Tamilnadu  600113
+				IN
+
+34-C5-D0   (hex)		Hagleitner Hygiene International GmbH
+34C5D0     (base 16)		Hagleitner Hygiene International GmbH
+				Lunastrasse 5
+				Zell am See  Salzburg  5700
+				AT
+
+A0-12-DB   (hex)		TABUCHI ELECTRIC CO.,LTD
+A012DB     (base 16)		TABUCHI ELECTRIC CO.,LTD
+				4-2-21
+				  OSAKA  532-0003
+				JP
+
+48-1A-84   (hex)		Pointer Telocation Ltd
+481A84     (base 16)		Pointer Telocation Ltd
+				14 Hamelacha Street,
+				Rosh Ha’ayin  Israel  48091
+				IL
+
+DC-66-3A   (hex)		Apacer Technology Inc.
+DC663A     (base 16)		Apacer Technology Inc.
+				1F., No.32, Zhongcheng Rd., Tucheng Dist.,
+				New Taipei City  Taiwan R.O.C.  236
+				TW
+
+08-DF-1F   (hex)		Bose Corporation
+08DF1F     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+58-1F-67   (hex)		Open-m technology limited
+581F67     (base 16)		Open-m technology limited
+				logan century buildding ,No.23 of Hai xiu road
+				Shenzhen  Guangdong  518000
+				CN
+
+48-26-E8   (hex)		Tek-Air Systems, Inc.
+4826E8     (base 16)		Tek-Air Systems, Inc.
+				41 Eagle Road
+				Danbury  CT  06810
+				US
+
+D0-5A-F1   (hex)		Shenzhen Pulier Tech CO.,Ltd
+D05AF1     (base 16)		Shenzhen Pulier Tech CO.,Ltd
+				3rd Floor, NO. B Buliding, District A, Shajing minzhu jiujiu industrial park , Shenzhen, China
+				Shenzhen  Guangdong  518104
+				CN
+
+FC-E1-86   (hex)		A3M Co., LTD
+FCE186     (base 16)		A3M Co., LTD
+				KeumJeong Highview 2F #205,
+				Gunpo  Gyeonggi  435-845
+				KR
+
+54-EF-92   (hex)		Shenzhen Elink Technology Co., LTD
+54EF92     (base 16)		Shenzhen Elink Technology Co., LTD
+				A531, Famous, No 168 Bao Yuan Road,
+				Shenzhen  Guangdong  518000
+				CN
+
+EC-E5-12   (hex)		tado GmbH
+ECE512     (base 16)		tado GmbH
+				Lindwurmstr. 76
+				Munich  Bavaria  80337
+				DE
+
+5C-F4-AB   (hex)		Zyxel Communications Corporation
+5CF4AB     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+08-B2-A3   (hex)		Cynny Italia S.r.L.
+08B2A3     (base 16)		Cynny Italia S.r.L.
+				Via delle Mantellate, 8
+				Firenze  FI  59021
+				IT
+
+70-30-5D   (hex)		Ubiquoss Inc
+70305D     (base 16)		Ubiquoss Inc
+				8F Ubiquoss B/D, 68, Pangyo-ro 255beon-gil, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+48-82-44   (hex)		Life Fitness / Div. of Brunswick
+488244     (base 16)		Life Fitness / Div. of Brunswick
+				10601 W. Belmont Ave
+				Franklin Park  IL  60131
+				US
+
+C8-31-68   (hex)		eZEX corporation
+C83168     (base 16)		eZEX corporation
+				Rm 508, Ssangyong IT Twin-Tower II, 442-5
+				Seongnam-si  Gyeonggi-do  462-120
+				KR
+
+40-B3-CD   (hex)		Chiyoda Electronics Co.,Ltd.
+40B3CD     (base 16)		Chiyoda Electronics Co.,Ltd.
+				1-3-11 Nishiki-cho
+				Warabi  Saitama  
+				JP
+
+24-33-6C   (hex)		Private
+24336C     (base 16)		Private
+
+20-25-64   (hex)		PEGATRON CORPORATION
+202564     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+C8-D5-90   (hex)		FLIGHT DATA SYSTEMS
+C8D590     (base 16)		FLIGHT DATA SYSTEMS
+				31 MCGREGORS DRIVE
+				KEILOR PARK  VICTORIA  3042
+				AU
+
+7C-FF-62   (hex)		Huizhou Super Electron Technology Co.,Ltd.
+7CFF62     (base 16)		Huizhou Super Electron Technology Co.,Ltd.
+				10F,Financial Tower,No.23,Xiapu Road
+				Huizhou City  Guangdong Province  516001
+				CN
+
+84-B5-9C   (hex)		Juniper Networks
+84B59C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C0-9D-26   (hex)		Topicon HK Lmd.
+C09D26     (base 16)		Topicon HK Lmd.
+				302, 3F, Lee Loong Building
+				Central  Hong Kong  0000
+				US
+
+44-29-38   (hex)		NietZsche enterprise Co.Ltd.
+442938     (base 16)		NietZsche enterprise Co.Ltd.
+				4F. No.560 Sec2 Chung Shan Rd.
+				New Taipei City Taiwan R.O.C  Taipei ( 臺 北 縣 / 市 )  220
+				TW
+
+A0-DA-92   (hex)		Nanjing Glarun Atten Technology Co. Ltd.
+A0DA92     (base 16)		Nanjing Glarun Atten Technology Co. Ltd.
+				Dinghuai men No. 1, Gulou District
+				    
+				CN
+
+EC-F7-2B   (hex)		HD DIGITAL TECH CO., LTD.
+ECF72B     (base 16)		HD DIGITAL TECH CO., LTD.
+				Room 602, Baoyuan road, Banan District
+				Shenzhen  Guangdong  518102
+				US
+
+4C-F4-5B   (hex)		Blue Clover Devices
+4CF45B     (base 16)		Blue Clover Devices
+				1001 Bayhill Dr
+				San Bruno  CA  94066
+				US
+
+B0-69-71   (hex)		DEI Sales, Inc.
+B06971     (base 16)		DEI Sales, Inc.
+				1 Viper Way
+				Vista  CA  92081
+				US
+
+18-89-DF   (hex)		CerebrEX Inc.
+1889DF     (base 16)		CerebrEX Inc.
+				Central Shin-Osaka Building 10F
+				Osaka  Osaka  532-0003
+				JP
+
+54-C8-0F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+54C80F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+E4-D3-32   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+E4D332     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+0C-20-26   (hex)		noax Technologies AG
+0C2026     (base 16)		noax Technologies AG
+				Am Forst 6
+				Ebersberg    85560
+				DE
+
+28-3B-96   (hex)		Cool Control LTD
+283B96     (base 16)		Cool Control LTD
+				Mivtahim 2
+				Petah Tikva  Israel  4951774
+				IL
+
+64-8D-9E   (hex)		IVT Electronic Co.,Ltd
+648D9E     (base 16)		IVT Electronic Co.,Ltd
+				F building Dongxing Insdustrial Area
+				Dongguan City  Guangdong provice  523457
+				CN
+
+CC-95-D7   (hex)		Vizio, Inc
+CC95D7     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+FC-09-F6   (hex)		GUANGDONG TONZE ELECTRIC CO.,LTD
+FC09F6     (base 16)		GUANGDONG TONZE ELECTRIC CO.,LTD
+				No.12-12 Block,Jinyuan Industrical City,Chaoshan Road,Shantou,Guangdong,china
+				Shantou  Guangdong  515021
+				CN
+
+BC-F6-1C   (hex)		Geomodeling Wuxi Technology Co. Ltd.
+BCF61C     (base 16)		Geomodeling Wuxi Technology Co. Ltd.
+				Room1708, 17/F, North Star Times Tower, No.8 BeiChen East Road
+				  Beijing  100101
+				CN
+
+FC-92-3B   (hex)		Nokia Corporation
+FC923B     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+E0-3F-49   (hex)		ASUSTek COMPUTER INC.
+E03F49     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+88-A7-3C   (hex)		Ragentek Technology Group
+88A73C     (base 16)		Ragentek Technology Group
+				D10/D11, No.3188, Xiupu Road
+				  Shanghai  201315
+				CN
+
+88-D9-62   (hex)		Canopus Systems US LLC
+88D962     (base 16)		Canopus Systems US LLC
+				Nasa Ames Research Park
+				Moffett Field  CALIFORNIA  94035
+				US
+
+D0-9C-30   (hex)		Foster Electric Company, Limited
+D09C30     (base 16)		Foster Electric Company, Limited
+				1-1-109, Tsutsujigaoka
+				Akishima  Tokyo  196-8550
+				JP
+
+94-9F-3F   (hex)		Optek Digital Technology company limited
+949F3F     (base 16)		Optek Digital Technology company limited
+				Room508 Build A, Shennan Garden, Shenzhen Science and Industry Park, Nanshan
+				Shenzhen  GuangDong  518057
+				CN
+
+78-FE-E2   (hex)		Shanghai Diveo Technology Co., Ltd
+78FEE2     (base 16)		Shanghai Diveo Technology Co., Ltd
+				No.8,Lane 777,LongWu Rd
+				  Shanghai  200232
+				CN
+
+08-6D-F2   (hex)		Shenzhen MIMOWAVE Technology Co.,Ltd
+086DF2     (base 16)		Shenzhen MIMOWAVE Technology Co.,Ltd
+				
+				Shenzhen  Guangdong  518172
+				CN
+
+48-D0-CF   (hex)		Universal Electronics, Inc.
+48D0CF     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+9C-3E-AA   (hex)		EnvyLogic Co.,Ltd.
+9C3EAA     (base 16)		EnvyLogic Co.,Ltd.
+				#605,Gwanyang Doosan Ven Digm B/D
+				Anyang-si  Gyeonggi-do  431-810
+				KR
+
+1C-FC-BB   (hex)		Realfiction ApS
+1CFCBB     (base 16)		Realfiction ApS
+				Oester Alle 42, 5
+				Copenhagen  OE  2100
+				DK
+
+F8-F0-05   (hex)		Newport Media Inc.
+F8F005     (base 16)		Newport Media Inc.
+				1 Spectrum Pointe Drive Suite 225
+				Lake Forest  CA  92630
+				US
+
+28-65-6B   (hex)		Keystone Microtech Corporation
+28656B     (base 16)		Keystone Microtech Corporation
+				9F., No.255, Dong Sec. 1,
+				Jhubei City, Hsinchu County    302
+				TW
+
+CC-9F-35   (hex)		Transbit Sp. z o.o.
+CC9F35     (base 16)		Transbit Sp. z o.o.
+				Przyczolkowa 109A
+				Warsaw     02-968
+				PL
+
+DC-C7-93   (hex)		Nokia Corporation
+DCC793     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+44-48-91   (hex)		HDMI Licensing, LLC
+444891     (base 16)		HDMI Licensing, LLC
+				1140 East Arques, Suite 100
+				Sunnyvale  CA  94085
+				US
+
+5C-25-4C   (hex)		Avire Global Pte Ltd
+5C254C     (base 16)		Avire Global Pte Ltd
+				8 Admiralty Street
+				Singapore    757438
+				SG
+
+D4-2F-23   (hex)		Akenori PTE Ltd
+D42F23     (base 16)		Akenori PTE Ltd
+				176 Joo Chiat Road, #02-02
+				Singapore    427447
+				SG
+
+98-C0-EB   (hex)		Global Regency Ltd
+98C0EB     (base 16)		Global Regency Ltd
+				20F, Phase A, Wenjin Plaza,
+				Shen Zhen  Guangdong  518000
+				CN
+
+F0-3F-F8   (hex)		R L Drake
+F03FF8     (base 16)		R L Drake
+				1 Jake Brown Road
+				Old Bridge  NJ  08857
+				US
+
+B0-C5-54   (hex)		D-Link International
+B0C554     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+48-EE-86   (hex)		UTStarcom (China) Co.,Ltd
+48EE86     (base 16)		UTStarcom (China) Co.,Ltd
+				25 Floor,A Block,1#Building,TianZuo International Center,
+				Haidian District  BeiJing  100081
+				CN
+
+88-89-14   (hex)		All Components Incorporated
+888914     (base 16)		All Components Incorporated
+				828 New Meister Lane
+				Pflugerville  TX  78660
+				US
+
+F0-32-1A   (hex)		Mita-Teknik A/S
+F0321A     (base 16)		Mita-Teknik A/S
+				Aktieselskabet af 12.12.2006
+				Roedkaersbro    8840
+				DK
+
+A8-81-F1   (hex)		BMEYE B.V.
+A881F1     (base 16)		BMEYE B.V.
+				Hoogoorddreef 60
+				Amsterdam    1101BE
+				NL
+
+C4-E9-84   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+C4E984     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+D0-69-D0   (hex)		Verto Medical Solutions, LLC
+D069D0     (base 16)		Verto Medical Solutions, LLC
+				900 Spruce St., Suite 550
+				St. Louis  Missouri  63012
+				US
+
+FC-13-49   (hex)		Global Apps Corp.
+FC1349     (base 16)		Global Apps Corp.
+				12F., No 225, Sec. 5 Nanjing E. Rd
+				Taipei    105
+				TW
+
+84-84-33   (hex)		Paradox Engineering SA
+848433     (base 16)		Paradox Engineering SA
+				Via Passeggiata, 7
+				Novazzano  Ticino  6883
+				CH
+
+44-C3-06   (hex)		SIFROM Inc.
+44C306     (base 16)		SIFROM Inc.
+				1201 N. Orange St., Ste 700 #7112
+				Wilmington  DE  19801-1186
+				US
+
+60-21-03   (hex)		I4VINE, INC
+602103     (base 16)		I4VINE, INC
+				TLI Building 6th floor, 195
+				Seongnam-si  Gyeonggi-do  462-100
+				KR
+
+FC-07-A0   (hex)		LRE Medical GmbH
+FC07A0     (base 16)		LRE Medical GmbH
+				Hofer Strasse 5
+				Noerdlingen  Bavaria  86720
+				DE
+
+1C-EE-E8   (hex)		Ilshin Elecom
+1CEEE8     (base 16)		Ilshin Elecom
+				2973, Hagun-ri, Yangchon-eup
+				Gimpo-si  Gyeonggi-do  415-843
+				KR
+
+90-31-CD   (hex)		Onyx Healthcare Inc.
+9031CD     (base 16)		Onyx Healthcare Inc.
+				2F ,No135, Lane235,
+				New Taipei City    231
+				TW
+
+E4-81-84   (hex)		Nokia
+E48184     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+14-C0-89   (hex)		DUNE HD LTD
+14C089     (base 16)		DUNE HD LTD
+				2F., No.297, Sec. 2, Tiding Blvd.,
+				Taipei    11493
+				TW
+
+F4-B6-E5   (hex)		TerraSem Co.,Ltd
+F4B6E5     (base 16)		TerraSem Co.,Ltd
+				9,Gwahaksaneop 5-ro
+				Cheongwon-Gu  ChungBuk  363-885
+				KR
+
+60-FF-DD   (hex)		C.E. ELECTRONICS, INC
+60FFDD     (base 16)		C.E. ELECTRONICS, INC
+				2107 INDUSTRIAL DR
+				BRYAN  OHIO  43506
+				US
+
+24-05-0F   (hex)		MTN Electronic Co. Ltd
+24050F     (base 16)		MTN Electronic Co. Ltd
+				MTN Industrial Park,No 3, Fuhua Road,
+				Shenzhen  Guangdong Province  518117
+				CN
+
+AC-2D-A3   (hex)		TXTR GmbH
+AC2DA3     (base 16)		TXTR GmbH
+				Rosenthaler Str. 13
+				Berlin    10119
+				DE
+
+88-9C-A6   (hex)		BTB Korea INC
+889CA6     (base 16)		BTB Korea INC
+				#1001, Suntech City 1st
+				Sungnam  Kyunggido  462-725
+				KR
+
+90-83-7A   (hex)		General Electric Water & Process Technologies
+90837A     (base 16)		General Electric Water & Process Technologies
+				6060 Spine Road
+				Boulder  Colorado  80301-3687
+				US
+
+80-BA-E6   (hex)		Neets
+80BAE6     (base 16)		Neets
+				Langballe 4
+				Horsens  Jylland  8700
+				DK
+
+F8-A2-B4   (hex)		RHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG
+F8A2B4     (base 16)		RHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG
+				Feldstr. 17
+				Mettmann    40822
+				DE
+
+E0-56-F4   (hex)		AxesNetwork Solutions inc.
+E056F4     (base 16)		AxesNetwork Solutions inc.
+				410 pepin
+				Sherbrooke  qc  j1l2y8
+				CA
+
+84-56-9C   (hex)		Coho Data, Inc.,
+84569C     (base 16)		Coho Data, Inc.,
+				1230 Midas Way, Suite 110
+				Sunnyvale  CA  94085
+				US
+
+78-AE-0C   (hex)		Far South Networks
+78AE0C     (base 16)		Far South Networks
+				49 Bell Crescent
+				Westlake  Western Cape  7945
+				ZA
+
+B0-24-F3   (hex)		Progeny Systems
+B024F3     (base 16)		Progeny Systems
+				9500 Innovation Drive
+				Manassas  VA  20110
+				US
+
+0C-54-A5   (hex)		PEGATRON CORPORATION
+0C54A5     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+8C-4D-B9   (hex)		Unmonday Ltd
+8C4DB9     (base 16)		Unmonday Ltd
+				Laivakatu 3
+				Helsinki  Uusimaa  00150
+				FI
+
+78-CA-5E   (hex)		ELNO
+78CA5E     (base 16)		ELNO
+				43 rue Michel Carré
+				Argenteuil  -  F95102
+				US
+
+2C-5A-05   (hex)		Nokia Corporation
+2C5A05     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+D4-81-CA   (hex)		iDevices, LLC
+D481CA     (base 16)		iDevices, LLC
+				136 Simsbury, Rd
+				Avon  CT  06001
+				US
+
+D8-58-D7   (hex)		CZ.NIC, z.s.p.o.
+D858D7     (base 16)		CZ.NIC, z.s.p.o.
+				Americka 23
+				  Prague  12000
+				CZ
+
+B0-D7-C5   (hex)		Logipix Ltd
+B0D7C5     (base 16)		Logipix Ltd
+				Kesmark utca 11-13
+				Budapest  -  1158
+				HU
+
+A4-3A-69   (hex)		Vers Inc
+A43A69     (base 16)		Vers Inc
+				PO Box 5265
+				Wayland  MA  01778
+				US
+
+9C-44-A6   (hex)		SwiftTest, Inc.
+9C44A6     (base 16)		SwiftTest, Inc.
+				3255 Scott Blvd.
+				Santa Clara  California  95054
+				US
+
+4C-D9-C4   (hex)		Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd
+4CD9C4     (base 16)		Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd
+				Building B10, No.8 Jinghu Road
+				Guangzhou  Guangdong  510800
+				CN
+
+50-E0-C7   (hex)		TurControlSystme AG
+50E0C7     (base 16)		TurControlSystme AG
+				Geschwister-Scholl-Strasse 7
+				Genthin  Sachsen-Anhalt  39307
+				DE
+
+B4-82-7B   (hex)		AKG Acoustics GmbH
+B4827B     (base 16)		AKG Acoustics GmbH
+				Lemboeckgasse 21-25
+				  Vienna  1230
+				AT
+
+DC-5E-36   (hex)		Paterson Technology
+DC5E36     (base 16)		Paterson Technology
+				23490 SE 51st Pl
+				Issaquah  WA  98029
+				US
+
+DC-AD-9E   (hex)		GreenPriz
+DCAD9E     (base 16)		GreenPriz
+				549, boulevard Pierre Sauvaigo
+				La Colle sur Loup    06480
+				FR
+
+B8-DF-6B   (hex)		SpotCam Co., Ltd.
+B8DF6B     (base 16)		SpotCam Co., Ltd.
+				12F.-1, No.125, Jianguo Rd.
+				New Taipei City    239
+				TW
+
+9C-88-88   (hex)		Simac Techniek NV
+9C8888     (base 16)		Simac Techniek NV
+				De Run 1101
+				Veldhoven  NB  5503LB
+				NL
+
+10-B2-6B   (hex)		base Co.,Ltd.
+10B26B     (base 16)		base Co.,Ltd.
+				F1 92 building taoyuancun longzhu road
+				Shenzhen  Guangdong  518000
+				CN
+
+4C-F0-2E   (hex)		Vifa Denmark A/S
+4CF02E     (base 16)		Vifa Denmark A/S
+				Mariendalsvej 2A
+				Viborg    DK-8800
+				US
+
+28-8A-1C   (hex)		Juniper Networks
+288A1C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+DC-CE-BC   (hex)		Shenzhen JSR Technology Co.,Ltd.
+DCCEBC     (base 16)		Shenzhen JSR Technology Co.,Ltd.
+				2-3F,E building,Yu Jianfeng science and industry park
+				Shenzhen City  Guangdong  518109
+				CN
+
+18-C8-E7   (hex)		Shenzhen Hualistone Technology Co.,Ltd
+18C8E7     (base 16)		Shenzhen Hualistone Technology Co.,Ltd
+				1708RM,Huafeng HQ Economic Building,
+				Shenzhen  Guangdong  518102
+				CN
+
+A0-3B-1B   (hex)		Inspire Tech
+A03B1B     (base 16)		Inspire Tech
+				No.588-10,Zhongzheng Rd.,Xinzhuang Dist
+				New Taipei  Taiwan  24255
+				TW
+
+7C-CD-3C   (hex)		Guangzhou Juzing Technology Co., Ltd
+7CCD3C     (base 16)		Guangzhou Juzing Technology Co., Ltd
+				Building C Rm 1906-1909
+				Guangzhou  Guangdong  510630
+				US
+
+98-43-DA   (hex)		INTERTECH
+9843DA     (base 16)		INTERTECH
+				3F. 14-9 Sarihyun-Ro. Ilsandong-Gu
+				Goyang-Si  Gyeonggi-Do  410-821
+				KR
+
+08-CA-45   (hex)		Toyou Feiji Electronics Co., Ltd.
+08CA45     (base 16)		Toyou Feiji Electronics Co., Ltd.
+				No.2 Building No.9 Yard, Dijin Road,
+				  Beijing  100095
+				CN
+
+3C-CA-87   (hex)		Iders Incorporated
+3CCA87     (base 16)		Iders Incorporated
+				27047 Oakwood Rd
+				Oakbank  Manitoba  R0E 1J2
+				CA
+
+7C-6A-B3   (hex)		IBC TECHNOLOGIES INC.
+7C6AB3     (base 16)		IBC TECHNOLOGIES INC.
+				1445 CHARLES STREET
+				Vancouver  British Columbia  V5L2S7
+				CA
+
+18-1B-EB   (hex)		Actiontec Electronics, Inc
+181BEB     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+84-A7-83   (hex)		Alcatel Lucent
+84A783     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+04-1A-04   (hex)		WaveIP
+041A04     (base 16)		WaveIP
+				1 Sky street
+				Misgav    20179
+				IL
+
+34-A5-E1   (hex)		Sensorist ApS
+34A5E1     (base 16)		Sensorist ApS
+				Nyhavn 16
+				Copenhagen K  Sjaelland  1051
+				DK
+
+80-79-AE   (hex)		ShanDong Tecsunrise  Co.,Ltd
+8079AE     (base 16)		ShanDong Tecsunrise  Co.,Ltd
+				B316,F-2,QiLu Soft Park,
+				JiNan  ShanDong  250101
+				CN
+
+7C-BD-06   (hex)		AE REFUsol
+7CBD06     (base 16)		AE REFUsol
+				Uracher Str. 91
+				Metzingen  Baden-Württemberg  72555
+				DE
+
+94-BA-56   (hex)		Shenzhen Coship Electronics Co., Ltd.
+94BA56     (base 16)		Shenzhen Coship Electronics Co., Ltd.
+				Rainbow Bldg., North, Hi-Tech Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+38-DB-BB   (hex)		Sunbow Telecom Co., Ltd.
+38DBBB     (base 16)		Sunbow Telecom Co., Ltd.
+				3F, 501-21, Chung Cheng Rd., Hsin Tien Dist.
+				New Taipei City    23148
+				TW
+
+44-8A-5B   (hex)		Micro-Star INT'L CO., LTD.
+448A5B     (base 16)		Micro-Star INT'L CO., LTD.
+				No69, LIde St.
+				Taipei    235
+				TW
+
+6C-4B-7F   (hex)		Vossloh-Schwabe Deutschland GmbH
+6C4B7F     (base 16)		Vossloh-Schwabe Deutschland GmbH
+				Wasenstrasse 25
+				Urbach    73660
+				DE
+
+90-8C-44   (hex)		H.K ZONGMU TECHNOLOGY CO., LTD.
+908C44     (base 16)		H.K ZONGMU TECHNOLOGY CO., LTD.
+				ROOM 604, BUILDING B, 977 SHANGFENG RD
+				  SHANGHAI  201201
+				CN
+
+68-8A-B5   (hex)		EDP Servicos
+688AB5     (base 16)		EDP Servicos
+				Rua Castilho, número 165, 5º andar
+				Lisboa    1070-050
+				PT
+
+24-93-CA   (hex)		Voxtronic Austria
+2493CA     (base 16)		Voxtronic Austria
+				Modecenterstrasse 17  Objekt 1
+				Vienna    1110
+				AT
+
+0C-CB-8D   (hex)		ASCO Numatics GmbH
+0CCB8D     (base 16)		ASCO Numatics GmbH
+				Otto-Hahn-Str. 7-11
+				Oelbronn-Duerrn    75248
+				DE
+
+90-79-90   (hex)		Benchmark Electronics Romania SRL
+907990     (base 16)		Benchmark Electronics Romania SRL
+				Aeroportului no 6 Ghimbav
+				Brasov    507075
+				US
+
+74-0E-DB   (hex)		Optowiz Co., Ltd
+740EDB     (base 16)		Optowiz Co., Ltd
+				D-901 Bundang Techno Park
+				Seongnam-si  Kyeonggi-do  463-760
+				KR
+
+6C-83-66   (hex)		Nanjing SAC Power Grid Automation Co., Ltd.
+6C8366     (base 16)		Nanjing SAC Power Grid Automation Co., Ltd.
+				No.11 Phoenix Road
+				Nanjing  Jiangsu Provience  211100
+				CN
+
+F8-3D-4E   (hex)		Softlink Automation System Co., Ltd
+F83D4E     (base 16)		Softlink Automation System Co., Ltd
+				No.12, Hi-tech South 7th Rd.,
+				Shenzhen  GuangDong  518057
+				CN
+
+74-D4-35   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+74D435     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+78-D9-9F   (hex)		NuCom HK Ltd.
+78D99F     (base 16)		NuCom HK Ltd.
+				Unit B 11/F, Eton Bldg, 288 Des Voeux Rd. Central
+				Hong Kong  Hong Kong  00852
+				CN
+
+14-2B-D2   (hex)		Armtel Ltd.
+142BD2     (base 16)		Armtel Ltd.
+				 33A Smolenskaya str.
+				St.  Petersburg    196084
+				RU
+
+9C-A1-0A   (hex)		SCLE SFE
+9CA10A     (base 16)		SCLE SFE
+				Parc des Aygalades – Bât 10
+				MARSEILLE  PACA  13014
+				FR
+
+88-78-9C   (hex)		Game Technologies SA
+88789C     (base 16)		Game Technologies SA
+				Plac W. Andersa 3
+				Poznan    61894
+				PL
+
+A4-89-5B   (hex)		ARK INFOSOLUTIONS PVT LTD
+A4895B     (base 16)		ARK INFOSOLUTIONS PVT LTD
+				4428, GANESH BAZAR CLOTH MARKET
+				  DELHI  110006
+				IN
+
+D0-9D-0A   (hex)		LINKCOM
+D09D0A     (base 16)		LINKCOM
+				11 Rue du Soleil Levant
+				Clamart    92140
+				FR
+
+EC-21-9F   (hex)		VidaBox LLC
+EC219F     (base 16)		VidaBox LLC
+				240 Madison Ave
+				Garden City Park  NEW YORK  11040
+				US
+
+A8-CC-C5   (hex)		Saab AB (publ)
+A8CCC5     (base 16)		Saab AB (publ)
+				Nobymalmsvagen
+				Linkoping    SE-581 82
+				SE
+
+58-46-8F   (hex)		Koncar Electronics and Informatics
+58468F     (base 16)		Koncar Electronics and Informatics
+				Fallerovo setaliste 22
+				Zagreb  Drvinje  10000
+				HR
+
+98-5D-46   (hex)		PeopleNet Communication
+985D46     (base 16)		PeopleNet Communication
+				4400 Baker Road
+				Minnetonka  Minnesota  55343
+				US
+
+F8-9F-B8   (hex)		YAZAKI Energy System Corporation
+F89FB8     (base 16)		YAZAKI Energy System Corporation
+				1-7-1 YOKOI
+				Shimada -shi,Shizuoka    427-8555
+				JP
+
+F0-F5-AE   (hex)		Adaptrum Inc.
+F0F5AE     (base 16)		Adaptrum Inc.
+				25 E Trimble Rd.
+				San Jose  California  95131
+				US
+
+FC-3F-AB   (hex)		Henan Lanxin Technology Co., Ltd
+FC3FAB     (base 16)		Henan Lanxin Technology Co., Ltd
+				4/F-B, Building No.1, 863 Central China Software Park, No.6 Cuizhu Street, High &amp; New Technology Industries Development Zone
+				Zhengzhou  Henan  450001
+				CN
+
+98-8E-4A   (hex)		NOXUS(BEIJING) TECHNOLOGY CO.,LTD
+988E4A     (base 16)		NOXUS(BEIJING) TECHNOLOGY CO.,LTD
+				02-1205,11/F, No.2 Building,No.8,Worker’s Stadium North Road Chaoyang District
+				  Beijing  100027
+				CN
+
+EC-2A-F0   (hex)		Ypsomed AG
+EC2AF0     (base 16)		Ypsomed AG
+				Brunnmattstrasse 6
+				Burgdorf  BE  3400
+				CH
+
+F8-54-AF   (hex)		ECI Telecom Ltd.
+F854AF     (base 16)		ECI Telecom Ltd.
+				30 Hasivim St.
+				Petah Tikva    49133
+				IL
+
+54-BE-F7   (hex)		PEGATRON CORPORATION
+54BEF7     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+50-B8-88   (hex)		wi2be Tecnologia S/A
+50B888     (base 16)		wi2be Tecnologia S/A
+				Rua Manoel Valdomiro de Macedo, 2285
+				Curitiba  Parana  81170-150
+				BR
+
+7C-83-06   (hex)		Glen Dimplex Nordic as
+7C8306     (base 16)		Glen Dimplex Nordic as
+				Postboks 16
+				Stjoerdal  N-T  7501
+				NO
+
+44-2A-FF   (hex)		E3 Technology, Inc.
+442AFF     (base 16)		E3 Technology, Inc.
+				Martell-house 2F, 2-28-3 Sekimachi-Kita,
+				Nerima-ku  Tokyo  177-0051
+				JP
+
+14-0D-4F   (hex)		Flextronics International
+140D4F     (base 16)		Flextronics International
+				Stretton Green Distribution Centre Langford Way
+				Warrington  Cheshire  WA4 4TQ
+				GB
+
+44-67-55   (hex)		Orbit Irrigation
+446755     (base 16)		Orbit Irrigation
+				P.O. Box 328
+				Bountiful  Utah  84011
+				US
+
+E0-FA-EC   (hex)		Platan sp. z o.o. sp. k.
+E0FAEC     (base 16)		Platan sp. z o.o. sp. k.
+				ul.Platanowa 2
+				Sopot  pomorskie  81-855
+				PL
+
+7C-E5-6B   (hex)		ESEN Optoelectronics Technology Co.,Ltd.
+7CE56B     (base 16)		ESEN Optoelectronics Technology Co.,Ltd.
+				Houcheng Yuanjiaqiao ,Jingang Town
+				Zhangjiagang  Jiangsu  215631
+				CN
+
+D4-4C-9C   (hex)		Shenzhen YOOBAO Technology Co.Ltd
+D44C9C     (base 16)		Shenzhen YOOBAO Technology Co.Ltd
+				F3,A5,Hua Tong Yuan Logistics Center,Minzhi Street,Longhua Town,Bao’an District,Shenzhen City,China
+				Shenzhen  Guangdong  518000
+				CN
+
+20-CE-C4   (hex)		Peraso Technologies
+20CEC4     (base 16)		Peraso Technologies
+				144 Front St. West, Suite 685
+				Toronto  ON  M5J 2L7
+				CA
+
+CC-47-03   (hex)		Intercon Systems Co., Ltd.
+CC4703     (base 16)		Intercon Systems Co., Ltd.
+				#915 Hanlim Human Tower,1-40 Geumjeong-dong
+				Gunpo-si  Gyeonggi-do  435-824
+				KR
+
+AC-CA-8E   (hex)		ODA Technologies
+ACCA8E     (base 16)		ODA Technologies
+				607-A Woorim Lions Valley, #425
+				Incheon    KSXX0009
+				KR
+
+08-8E-4F   (hex)		SF Software Solutions
+088E4F     (base 16)		SF Software Solutions
+				Buchenweg 32
+				Großbettlingen  Baden-Württemberg  72663
+				US
+
+54-05-36   (hex)		Vivago Oy
+540536     (base 16)		Vivago Oy
+				Itsehallintokuja 6
+				  Espoo  FI-02600
+				FI
+
+6C-90-B1   (hex)		SanLogic Inc
+6C90B1     (base 16)		SanLogic Inc
+				2350 Mission College Blvd
+				Santa Clara  CA  95054
+				US
+
+CC-7B-35   (hex)		zte corporation
+CC7B35     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+04-D4-37   (hex)		ZNV
+04D437     (base 16)		ZNV
+				4/F, W1-A, Bldg, Gaoxin S, 1st Ave., Hi-tech Park, Nanshan District, Shenzhen, P.R.C
+				Shenzhen  Guangdong  518057
+				US
+
+CC-F4-07   (hex)		EUKREA ELECTROMATIQUE SARL
+CCF407     (base 16)		EUKREA ELECTROMATIQUE SARL
+				74 AVENUE JEAN JAURES
+				PESSAC  GIRONDE  33600
+				FR
+
+DC-17-92   (hex)		Captivate Network
+DC1792     (base 16)		Captivate Network
+				2 Executive Drive Suite 301
+				Chelmsford  Massachusetts  01824
+				US
+
+28-A2-41   (hex)		exlar corp
+28A241     (base 16)		exlar corp
+				18400 west 77th street
+				chanhassen  mn  55317
+				US
+
+50-98-71   (hex)		Inventum Technologies Private Limited
+509871     (base 16)		Inventum Technologies Private Limited
+				C-70, Phase 2 Extension
+				NOIDA  Uttar Pradesh  201305
+				IN
+
+04-8C-03   (hex)		ThinPAD Technology (Shenzhen)CO.,LTD
+048C03     (base 16)		ThinPAD Technology (Shenzhen)CO.,LTD
+				Room 2305, Xingji Building, Xinsha Road
+				Shenzhen  Guangdong  518104
+				CN
+
+88-46-2A   (hex)		Telechips Inc.
+88462A     (base 16)		Telechips Inc.
+				Luther Building,7-20, Sincheon-dong,Songpa-gu,
+				Seoul  Seoul  138-240
+				KR
+
+C8-02-58   (hex)		ITW GSE ApS
+C80258     (base 16)		ITW GSE ApS
+				Smedebakken 31-33
+				Odense N    5270
+				DK
+
+30-78-6B   (hex)		TIANJIN Golden Pentagon Electronics Co., Ltd.
+30786B     (base 16)		TIANJIN Golden Pentagon Electronics Co., Ltd.
+				No. 196 Rixin Road, Binhai Science Park,
+				  Tianjin  300457
+				CN
+
+20-DF-3F   (hex)		Nanjing SAC Power Grid Automation Co., Ltd.
+20DF3F     (base 16)		Nanjing SAC Power Grid Automation Co., Ltd.
+				No.11 Phoenix Road
+				Nanjing  Jiangsu  211106
+				CN
+
+F8-51-6D   (hex)		Denwa Technology Corp.
+F8516D     (base 16)		Denwa Technology Corp.
+				1931 NW 150 TH AVE
+				Penbroke Pines  Florida  33028
+				US
+
+44-4A-65   (hex)		Silverflare Ltd.
+444A65     (base 16)		Silverflare Ltd.
+				2 Bakers Yard
+				Uxbridge  Greater London  UB8 1JZ
+				GB
+
+74-4B-E9   (hex)		EXPLORER HYPERTECH CO.,LTD
+744BE9     (base 16)		EXPLORER HYPERTECH CO.,LTD
+				7F.-9,NO.112,Xinmin St
+				New Taipei City    235
+				TW
+
+FC-60-18   (hex)		Zhejiang Kangtai Electric Co., Ltd.
+FC6018     (base 16)		Zhejiang Kangtai Electric Co., Ltd.
+				No.5, Kangtai Rd
+				Yueqing  Zhejiang  325605
+				CN
+
+F4-20-12   (hex)		Cuciniale GmbH
+F42012     (base 16)		Cuciniale GmbH
+				Heuriedweg 65
+				Lindau    88131
+				DE
+
+98-B0-39   (hex)		Nokia
+98B039     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+B8-30-A8   (hex)		Road-Track Telematics Development
+B830A8     (base 16)		Road-Track Telematics Development
+				15th Keren Hayesod St.
+				Tirat Hacarmel  Israel  15223
+				IL
+
+4C-D6-37   (hex)		Qsono Electronics Co., Ltd
+4CD637     (base 16)		Qsono Electronics Co., Ltd
+				2nd Floor,Dingxin Industry park,jiayuan Road,East Lake Development Zone
+				Wuhan  Hubei  430074
+				CN
+
+94-36-E0   (hex)		Sichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd
+9436E0     (base 16)		Sichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd
+				Guanghan City, Sichuan province Zhongshan road south three period of 36
+				Deyang Guanghan  Sichuan Province  618300
+				CN
+
+54-22-F8   (hex)		zte corporation
+5422F8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+48-6E-73   (hex)		Pica8, Inc.
+486E73     (base 16)		Pica8, Inc.
+				1032 Elwell Court, Suite 105
+				Palo Alto  CA  94303
+				US
+
+64-05-BE   (hex)		NEW LIGHT LED
+6405BE     (base 16)		NEW LIGHT LED
+				No.50, Siyuan Rd
+				New Taipei    24251
+				TW
+
+64-6E-EA   (hex)		Iskratel d.o.o.
+646EEA     (base 16)		Iskratel d.o.o.
+				Ljubljanska cesta 24a
+				Kranj    4000
+				SI
+
+D0-73-7F   (hex)		Mini-Circuits
+D0737F     (base 16)		Mini-Circuits
+				50 Yosef Levi Street
+				Kiryat Bialik Industrial Zone    27000
+				US
+
+E8-BB-3D   (hex)		Sino Prime-Tech Limited
+E8BB3D     (base 16)		Sino Prime-Tech Limited
+				Room 418, Building 1, Hua Mei Ju (D),
+				Shenzhen  Guangdong  518101
+				CN
+
+28-28-5D   (hex)		Zyxel Communications Corporation
+28285D     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+0C-F0-19   (hex)		Malgn Technology Co., Ltd.
+0CF019     (base 16)		Malgn Technology Co., Ltd.
+				Star Tower #305, 223-25
+				Seongnam-Si  Kyounggi-Do  462-738
+				KR
+
+94-9F-B4   (hex)		ChengDu JiaFaAnTai Technology Co.,Ltd
+949FB4     (base 16)		ChengDu JiaFaAnTai Technology Co.,Ltd
+				8th Floor, Building No.2, Zone A of Wisdom Valley
+				Chengdu  Sichuan  610000
+				CN
+
+40-68-26   (hex)		Thales UK Limited
+406826     (base 16)		Thales UK Limited
+				1 Linthouse Road
+				Glasgow  Scotland  G51 4BZ
+				GB
+
+F8-2B-C8   (hex)		Jiangsu Switter Co., Ltd
+F82BC8     (base 16)		Jiangsu Switter Co., Ltd
+				Room 512, Buliding 8, 118 Nanyuanbei Road
+				Suzhou City  Jiangsu Province  215006
+				CN
+
+60-C3-97   (hex)		2Wire Inc
+60C397     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+E0-7F-88   (hex)		EVIDENCE Network SIA
+E07F88     (base 16)		EVIDENCE Network SIA
+				Zilupes 4A
+				  Rīga  LV-1019
+				LV
+
+1C-7C-C7   (hex)		Coriant GmbH
+1C7CC7     (base 16)		Coriant GmbH
+				St.-Martin-Str. 76
+				Munich  Germany  81541
+				DE
+
+34-1B-22   (hex)		Grandbeing Technology Co., Ltd
+341B22     (base 16)		Grandbeing Technology Co., Ltd
+				B-301,Science and Technology Building Phase II
+				Shenzhen  Guangdong  518000
+				CN
+
+40-56-0C   (hex)		In Home Displays Ltd
+40560C     (base 16)		In Home Displays Ltd
+				Waterside House
+				Edinburgh  Lothian  EH6 6QU
+				GB
+
+58-E0-2C   (hex)		Micro Technic A/S
+58E02C     (base 16)		Micro Technic A/S
+				Smedevaenget 5
+				Aarup    5560
+				DK
+
+78-B3-CE   (hex)		Elo touch solutions
+78B3CE     (base 16)		Elo touch solutions
+				1033 McCarthy Boulevard
+				Milpitas  CA  95035
+				US
+
+88-14-2B   (hex)		Protonic Holland
+88142B     (base 16)		Protonic Holland
+				Factorij 36
+				Zwaag NH  Netherlands  1689 AL
+				NL
+
+A4-FC-CE   (hex)		Security Expert Ltd.
+A4FCCE     (base 16)		Security Expert Ltd.
+				75, Ekaterininskaya Street, of. 105
+				Perm  Perm region  614000
+				RU
+
+34-A6-8C   (hex)		Shine Profit Development Limited
+34A68C     (base 16)		Shine Profit Development Limited
+				Unit 1401B Telecom Tower
+				Kwun Tong  Kowloon  000001
+				HK
+
+34-1A-4C   (hex)		SHENZHEN WEIBU ELECTRONICS CO.,LTD.
+341A4C     (base 16)		SHENZHEN WEIBU ELECTRONICS CO.,LTD.
+				3/F, Block 132,Jindi Industrial Zone
+				Shenzhen  Guangdong  518048
+				CN
+
+04-88-E2   (hex)		Beats Electronics LLC
+0488E2     (base 16)		Beats Electronics LLC
+				1601 Cloverfield Blvd.
+				Santa Monica  California  90404
+				US
+
+A4-7A-CF   (hex)		VIBICOM COMMUNICATIONS INC.
+A47ACF     (base 16)		VIBICOM COMMUNICATIONS INC.
+				900 CORPORATE DRIVE
+				MAHWAH  NEW JERSEY  074030
+				US
+
+BC-26-1D   (hex)		HONG KONG TECON TECHNOLOGY
+BC261D     (base 16)		HONG KONG TECON TECHNOLOGY
+				ROOM 2802,BLOCK A,SHEN FANG OLAZA
+				Shenzhen  Guangdong  518000
+				CN
+
+E8-CE-06   (hex)		SkyHawke Technologies, LLC.
+E8CE06     (base 16)		SkyHawke Technologies, LLC.
+				274 Commerce Park Drive
+				Ridgeland  MS  39157
+				US
+
+C8-F3-86   (hex)		Shenzhen Xiaoniao Technology Co.,Ltd
+C8F386     (base 16)		Shenzhen Xiaoniao Technology Co.,Ltd
+				Floor 13 C-D Yunsong Buliding
+				Futian District, Shenzhen  Guangdong  518040
+				CN
+
+84-2F-75   (hex)		Innokas Group
+842F75     (base 16)		Innokas Group
+				Tarjusojantie 12
+				Kempele  Oulu  90440
+				FI
+
+CC-3C-3F   (hex)		SA.S.S. Datentechnik AG
+CC3C3F     (base 16)		SA.S.S. Datentechnik AG
+				Talhofstr. 32
+				Gilching  Bayern  82205
+				DE
+
+2C-69-BA   (hex)		RF Controls, LLC
+2C69BA     (base 16)		RF Controls, LLC
+				622 Bates Street
+				Saint Louis  Missouri  63111
+				US
+
+D4-BF-7F   (hex)		UPVEL
+D4BF7F     (base 16)		UPVEL
+				13139 Ramona Blvd. #F
+				Irwindale  CA  91706
+				US
+
+2C-72-C3   (hex)		Soundmatters
+2C72C3     (base 16)		Soundmatters
+				8060 Double R Blvd Suite 100
+				Reno  NV  89511
+				US
+
+C4-48-38   (hex)		Satcom Direct, Inc.
+C44838     (base 16)		Satcom Direct, Inc.
+				1901 Hwy A1A
+				Satellite Beach  FL  32937
+				US
+
+C8-DD-C9   (hex)		Lenovo Mobile Communication Technology Ltd.
+C8DDC9     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999,Qishan North 2nd Road,
+				Xiamen   Fujian  361006
+				US
+
+6C-86-86   (hex)		Technonia
+6C8686     (base 16)		Technonia
+				#1101, Hanshin IT Tower 235
+				  Seoul  152-768
+				KR
+
+D4-AC-4E   (hex)		BODi rS, LLC
+D4AC4E     (base 16)		BODi rS, LLC
+				7622 Rickenbacker Drive
+				Gaithersburg  MD  20879
+				US
+
+20-4C-6D   (hex)		Hugo Brennenstuhl Gmbh & Co. KG.
+204C6D     (base 16)		Hugo Brennenstuhl Gmbh & Co. KG.
+				Seestr. 1-3
+				Tuebingen  Baden-Wuerttemberg  72074
+				DE
+
+40-C4-D6   (hex)		ChongQing Camyu Technology Development Co.,Ltd.
+40C4D6     (base 16)		ChongQing Camyu Technology Development Co.,Ltd.
+				4th Floor,Tower of Venus Technology Building ,NO 60 Xing Guang Road
+				  Chong Qing  401121
+				CN
+
+A8-29-4C   (hex)		Precision Optical Transceivers, Inc.
+A8294C     (base 16)		Precision Optical Transceivers, Inc.
+				2328 Innovation Way
+				Rochester  NY  14624
+				US
+
+70-C6-AC   (hex)		Bosch Automotive Aftermarket
+70C6AC     (base 16)		Bosch Automotive Aftermarket
+				Franz Oechsle Str. 4
+				Plochingen    D-73201
+				DE
+
+7C-05-07   (hex)		PEGATRON CORPORATION
+7C0507     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+88-09-05   (hex)		MTMCommunications
+880905     (base 16)		MTMCommunications
+				2-3-10 Honmachi
+				Ichinomiya-shi  Aichi-ken  491-0853
+				US
+
+30-D4-6A   (hex)		Autosales Incorporated
+30D46A     (base 16)		Autosales Incorporated
+				1200 Souteat Avenue
+				Tallmadge  Ohio  44278
+				US
+
+28-2C-B2   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+282CB2     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+64-E5-99   (hex)		EFM Networks
+64E599     (base 16)		EFM Networks
+				6F, Benposra II 1197-1 Bojeong Giheung Gu
+				Yong In  Kyunggi do  446913
+				KR
+
+30-89-99   (hex)		Guangdong East Power Co.,
+308999     (base 16)		Guangdong East Power Co.,
+				No.6 Northern Industry Road,Songshan lake SCI&TECH Industry Park
+				DongGuan  GuangDong  523808
+				CN
+
+C8-93-46   (hex)		MXCHIP Company Limited
+C89346     (base 16)		MXCHIP Company Limited
+				Room 811,Tongpu Building,
+				Shanghai  Shanghai  200333
+				CN
+
+F4-B3-81   (hex)		WindowMaster A/S
+F4B381     (base 16)		WindowMaster A/S
+				Skelstedet 13
+				Vedbaek    2950
+				DK
+
+74-F1-02   (hex)		Beijing HCHCOM Technology Co., Ltd
+74F102     (base 16)		Beijing HCHCOM Technology Co., Ltd
+				Patton Building 8 floor,11# Wan liu zhong lu,Haidian District,Beijing,China
+				Beijing  China  100089
+				CN
+
+A0-86-1D   (hex)		Chengdu Fuhuaxin Technology co.,Ltd
+A0861D     (base 16)		Chengdu Fuhuaxin Technology co.,Ltd
+				Room 1608,Building G1,No.1800 of Yizhou Ave
+				Chengdu  Sichuan  610041
+				CN
+
+50-8D-6F   (hex)		CHAHOO Limited
+508D6F     (base 16)		CHAHOO Limited
+				B-4thFloor, 631
+				Sungnam  Gyeonggi  463-400
+				KR
+
+E8-DE-27   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+E8DE27     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+94-AC-CA   (hex)		trivum technologies GmbH
+94ACCA     (base 16)		trivum technologies GmbH
+				Heusteigstraße 37
+				Stuttgart    70108
+				DE
+
+90-82-60   (hex)		IEEE 1904.1 Working Group
+908260     (base 16)		IEEE 1904.1 Working Group
+				1351 Redwood Way,
+				Petaluma  CA  94954
+				US
+
+D4-EE-07   (hex)		HIWIFI Co., Ltd.
+D4EE07     (base 16)		HIWIFI Co., Ltd.
+				Room 1002, Zhongguancun e-Plaza A,
+				Haidian District  Beijing  100080
+				CN
+
+FC-AD-0F   (hex)		QTS NETWORKS
+FCAD0F     (base 16)		QTS NETWORKS
+				Jinyanlong Plaza, Huilongguan,
+				  Beijing  100092
+				CN
+
+98-4C-04   (hex)		Zhangzhou Keneng Electrical Equipment Co Ltd
+984C04     (base 16)		Zhangzhou Keneng Electrical Equipment Co Ltd
+				Keneng Technology Park,No.12 Wuqiao Zhong Rd
+				Zhangzhou  Fujian  363005
+				CN
+
+A4-E9-91   (hex)		SISTEMAS AUDIOVISUALES ITELSIS S.L.
+A4E991     (base 16)		SISTEMAS AUDIOVISUALES ITELSIS S.L.
+				POL.IND. DEL TAMBRE
+				SANTIAGO COMPOSTELA  A CORUÑA  15890
+				ES
+
+3C-86-A8   (hex)		Sangshin elecom .co,, LTD
+3C86A8     (base 16)		Sangshin elecom .co,, LTD
+				614-1 Wolhari Suhmyon
+				  Choongnam  339-814
+				KR
+
+84-F4-93   (hex)		OMS spol. s.r.o.
+84F493     (base 16)		OMS spol. s.r.o.
+				Dojc 419
+				Dojc  Slovakia  90602
+				SK
+
+BC-D1-77   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+BCD177     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+AC-DB-DA   (hex)		Shenzhen Geniatech Inc, Ltd
+ACDBDA     (base 16)		Shenzhen Geniatech Inc, Ltd
+				18th F, GDC Building,No.9 ,Gaoxin Central Avenue 3rd
+				Shenzhen  GuangDong  518057
+				CN
+
+D4-27-51   (hex)		Infopia Co., Ltd
+D42751     (base 16)		Infopia Co., Ltd
+				891, Hogye-dong, Dongan-gu
+				Anyang  Gyeonggi  431-080
+				KR
+
+10-3D-EA   (hex)		HFC Technology (Beijing) Ltd. Co.
+103DEA     (base 16)		HFC Technology (Beijing) Ltd. Co.
+				Building #3, Room 1214
+				Beijing  AP (Area Pacific)  100193
+				CN
+
+F0-5D-C8   (hex)		Duracell Powermat
+F05DC8     (base 16)		Duracell Powermat
+				230 Park Ave, suit 910
+				new york  NY  10169
+				US
+
+CC-5D-57   (hex)		Information  System Research Institute,Inc.
+CC5D57     (base 16)		Information  System Research Institute,Inc.
+				Metro city minamiikebukuro-bldg.5F
+				Toshima-ku  Tokyo  171-0022
+				JP
+
+64-C6-67   (hex)		Barnes&Noble
+64C667     (base 16)		Barnes&Noble
+				400 Hamilton Avenue
+				Palo Alto  CA  94301
+				US
+
+F0-F2-60   (hex)		Mobitec AB
+F0F260     (base 16)		Mobitec AB
+				Box 97
+				Herrljunga  VG  52421
+				SE
+
+04-4C-EF   (hex)		Fujian Sanao Technology Co.,Ltd
+044CEF     (base 16)		Fujian Sanao Technology Co.,Ltd
+				Fuzhou shibei bicyclic road no. 117
+				Fuzhou  Fujian  350000
+				CN
+
+4C-80-4F   (hex)		Armstrong Monitoring Corp
+4C804F     (base 16)		Armstrong Monitoring Corp
+				215 Colonnade Rd
+				Nepean  Ontario  K2E 7K3
+				CA
+
+7C-D7-62   (hex)		Freestyle Technology Pty Ltd
+7CD762     (base 16)		Freestyle Technology Pty Ltd
+				1A 24 Ricketts Road
+				Mount Waverley  Victoria  3149
+				AU
+
+90-1D-27   (hex)		zte corporation
+901D27     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+9C-31-78   (hex)		Foshan Huadian Intelligent Communications Teachnologies Co.,Ltd
+9C3178     (base 16)		Foshan Huadian Intelligent Communications Teachnologies Co.,Ltd
+				Building B,No.8 of Shishan Industrial Avenue
+				Foshan  Guangdong  528225
+				CN
+
+B0-C9-5B   (hex)		Beijing Symtech CO.,LTD
+B0C95B     (base 16)		Beijing Symtech CO.,LTD
+				Technology Park Building 2-1,The Hung Fu Pioneer Park
+				  Beijing  102209
+				CN
+
+4C-CA-53   (hex)		Skyera, Inc.
+4CCA53     (base 16)		Skyera, Inc.
+				1704 Automation Pkwy
+				San Jose  CA  95131
+				US
+
+90-FF-79   (hex)		Metro Ethernet Forum
+90FF79     (base 16)		Metro Ethernet Forum
+				6033 W. Century Boulevard
+				Los Angeles  California  90045
+				US
+
+B0-14-08   (hex)		LIGHTSPEED INTERNATIONAL CO.
+B01408     (base 16)		LIGHTSPEED INTERNATIONAL CO.
+				No.20, LANE 526 NIUPU East RD.
+				Hsinchu  Not US/Canada  30091
+				TW
+
+08-1D-FB   (hex)		Shanghai Mexon Communication Technology Co.,Ltd
+081DFB     (base 16)		Shanghai Mexon Communication Technology Co.,Ltd
+				Floor4-5, Unit B, Building 5 ,Lane 128, Jiujing Road
+				Shanghai  Shanghai  201615
+				CN
+
+98-3F-9F   (hex)		China SSJ (Suzhou) Network Technology Inc.
+983F9F     (base 16)		China SSJ (Suzhou) Network Technology Inc.
+				399 Linquan St., Dongnan Building 411
+				Suzhou  Jiangsu  215123
+				CN
+
+B8-38-CA   (hex)		Kyokko Tsushin System CO.,LTD
+B838CA     (base 16)		Kyokko Tsushin System CO.,LTD
+				2-25-7 sakado,Takatsu-ku
+				Kawasaki  Kanagawa  213-0012
+				JP
+
+C4-4E-AC   (hex)		Shenzhen Shiningworth Technology Co., Ltd.
+C44EAC     (base 16)		Shenzhen Shiningworth Technology Co., Ltd.
+				Room 610, Block B, Huameiju Business Center,
+				Shenzhen  Guangdong  518000
+				CN
+
+A8-01-80   (hex)		IMAGO Technologies GmbH
+A80180     (base 16)		IMAGO Technologies GmbH
+				Strassheimer Str. 45
+				Friedberg  Hessen  61169
+				DE
+
+0C-55-21   (hex)		Axiros GmbH
+0C5521     (base 16)		Axiros GmbH
+				Altlaufstrasse 34
+				Munich Hoehenkirchen  Bavaria  85635
+				DE
+
+68-A4-0E   (hex)		BSH Hausgeräte GmbH
+68A40E     (base 16)		BSH Hausgeräte GmbH
+				Im Gewerbepark B35
+				Regensburg  Bayern  93059
+				DE
+
+F4-C6-D7   (hex)		blackned GmbH
+F4C6D7     (base 16)		blackned GmbH
+				Am Hartholz 21
+				Alling  Bavaria  82239
+				DE
+
+D4-CA-6E   (hex)		u-blox AG
+D4CA6E     (base 16)		u-blox AG
+				Zuercherstrasse 68
+				Thalwil    8800
+				CH
+
+5C-43-D2   (hex)		HAZEMEYER
+5C43D2     (base 16)		HAZEMEYER
+				ZI Route de Grugies
+				GAUCHY  FRANCE  02430
+				FR
+
+D8-09-C3   (hex)		Cercacor Labs
+D809C3     (base 16)		Cercacor Labs
+				189 Technology Dr
+				Irvine  CA  92618
+				US
+
+E0-C2-B7   (hex)		Masimo Corporation
+E0C2B7     (base 16)		Masimo Corporation
+				40 Parker
+				Irvine  CA  92618
+				US
+
+A0-19-17   (hex)		Bertel S.p.a.
+A01917     (base 16)		Bertel S.p.a.
+				Frazione Rimale, Via Emilia Ovest 61
+				Fidenza  Parma  43036
+				IT
+
+68-B8-D9   (hex)		Act KDE, Inc.
+68B8D9     (base 16)		Act KDE, Inc.
+				196-14, Bangi-dong, Songpa-gu
+				Seoul    138-834
+				KR
+
+90-CC-24   (hex)		Synaptics, Inc
+90CC24     (base 16)		Synaptics, Inc
+				1251 McKay Drive
+				San Jose  CA   95131-1709
+				US
+
+2C-E8-71   (hex)		Alert Metalguard ApS
+2CE871     (base 16)		Alert Metalguard ApS
+				Vester Voldgade 104, st, th
+				Copenhagen V    1552
+				DK
+
+F8-7B-62   (hex)		FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch
+F87B62     (base 16)		FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch
+				6F., No.118, Ln. 235, Baociao Rd., Sindian City, Taipei County 231, Taiwan  R.O.C.
+				Taipei    231
+				TW
+
+40-27-0B   (hex)		Mobileeco Co., Ltd
+40270B     (base 16)		Mobileeco Co., Ltd
+				#2126, IT Tower B, Keumkang Penterium Bldg, 810
+				Anyang City  Kyunggi-Do  431810
+				KR
+
+74-FE-48   (hex)		ADVANTECH CO., LTD.
+74FE48     (base 16)		ADVANTECH CO., LTD.
+				NO.1, Alley 20, Lane 26
+				  TAIPEI  231
+				TW
+
+80-B9-5C   (hex)		ELFTECH Co., Ltd.
+80B95C     (base 16)		ELFTECH Co., Ltd.
+				174, Daehyeon Techno World 6F 609,
+				Uiwang-Si  Gyeonggi-Do  437-753
+				KR
+
+38-B5-BD   (hex)		E.G.O. Elektro-Ger
+38B5BD     (base 16)		E.G.O. Elektro-Ger
+				Einkauf
+				Oberderdingen    75038
+				DE
+
+20-91-8A   (hex)		PROFALUX
+20918A     (base 16)		PROFALUX
+				377 rue des Cypr
+				THYEZ  Haute Savoie  74300
+				FR
+
+E4-EE-FD   (hex)		MR&D Manufacturing
+E4EEFD     (base 16)		MR&D Manufacturing
+				Viale dell'Unione Europea, 8
+				Gallarate  Varese  21013
+				US
+
+10-5C-BF   (hex)		DuroByte Inc
+105CBF     (base 16)		DuroByte Inc
+				875 Foster Ave, Unit 101
+				Windsor  Ontario  N8X4W3
+				CA
+
+A4-6E-79   (hex)		DFT System Co.Ltd
+A46E79     (base 16)		DFT System Co.Ltd
+				Room 6B XINHAOFANG Building
+				SHENZHEN  GUANGDONG  518052
+				CN
+
+C8-8A-83   (hex)		Dongguan HuaHong Electronics Co.,Ltd
+C88A83     (base 16)		Dongguan HuaHong Electronics Co.,Ltd
+				NO.25,Xing Er Road,Chen Wu Industrial Zone,Wusha Village,Chang£§an Town
+				Dongguan City  China/Guangdong  523858
+				CN
+
+8C-C5-E1   (hex)		ShenZhen Konka Telecommunication Technology Co.,Ltd
+8CC5E1     (base 16)		ShenZhen Konka Telecommunication Technology Co.,Ltd
+				No.9008 Shennan Road
+				ShenZhen  GuangDong  518053
+				CN
+
+64-A3-41   (hex)		Wonderlan (Beijing) Technology Co., Ltd.
+64A341     (base 16)		Wonderlan (Beijing) Technology Co., Ltd.
+				Room 04D, Building D, KeShi Plaza
+				 Haidian District  Beijing  100085
+				CN
+
+78-98-FD   (hex)		Q9 Networks Inc.
+7898FD     (base 16)		Q9 Networks Inc.
+				Suite 4400, PO Box 235
+				Toronto  ON  M5K 1J3
+				CA
+
+D0-63-B4   (hex)		SolidRun Ltd.
+D063B4     (base 16)		SolidRun Ltd.
+				P.O Box 50782
+				Nazareth  ISRAEL  16165
+				IL
+
+9C-54-1C   (hex)		Shenzhen My-power Technology Co.,Ltd
+9C541C     (base 16)		Shenzhen My-power Technology Co.,Ltd
+				202¬Building 3¬Shenzhen Software Park
+				Shenzhen  Nanshan  518000
+				CN
+
+8C-33-30   (hex)		EmFirst Co., Ltd.
+8C3330     (base 16)		EmFirst Co., Ltd.
+				701 Suwon Venture Center
+				Suwon  Gyeonggi-do  442-833
+				KR
+
+08-7B-AA   (hex)		SVYAZKOMPLEKTSERVICE, LLC
+087BAA     (base 16)		SVYAZKOMPLEKTSERVICE, LLC
+				Lenskaya 2-21
+				Moscow    129327
+				US
+
+24-F2-DD   (hex)		Radiant Zemax LLC
+24F2DD     (base 16)		Radiant Zemax LLC
+				22908 NE Alder Crest Dr NE Ste 100
+				Redmond  WA  98053
+				US
+
+20-B5-C6   (hex)		Mimosa Networks
+20B5C6     (base 16)		Mimosa Networks
+				656 N. Santa Cruz. Ave., Suite B
+				Los Gatos  CA  95030
+				US
+
+E4-E4-09   (hex)		LEIFHEIT AG
+E4E409     (base 16)		LEIFHEIT AG
+				Leifhheitstreet
+				Nassau  Rheinland-Pfalz  56377
+				DE
+
+B8-77-C3   (hex)		METER Group
+B877C3     (base 16)		METER Group
+				2365 NE Hopkins Court
+				Pullman  WA  99163
+				US
+
+00-4D-32   (hex)		Andon Health Co.,Ltd.
+004D32     (base 16)		Andon Health Co.,Ltd.
+				NO.3Jin PIng Road Ya An Street
+				Tianjin    300190
+				CN
+
+FC-A9-B0   (hex)		MIARTECH (SHANGHAI),INC.
+FCA9B0     (base 16)		MIARTECH (SHANGHAI),INC.
+				3F,Building 4,No 290 Zhangheng Road Zhangjiang Hi-Tech Park,Pudong New District Shanghai,P.R.China
+				SHANGHAI  SHANGHAI  201204
+				CN
+
+94-DE-80   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+94DE80     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				
+				Pin-Jen  Taoyuan  324
+				TW
+
+2C-44-1B   (hex)		Spectrum Medical Limited
+2C441B     (base 16)		Spectrum Medical Limited
+				Harrier 4, Meteor Business Park
+				Gloucester    GL2 9QL
+				US
+
+EC-49-93   (hex)		Qihan Technology Co., Ltd 
+EC4993     (base 16)		Qihan Technology Co., Ltd 
+				20th Floor,Times Technology BuildingNo.7028,Shennan Road,Futian,
+				Shenzhen  Guangdong  518040
+				CN
+
+B0-AC-FA   (hex)		FUJITSU LIMITED
+B0ACFA     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+8C-E0-81   (hex)		zte corporation
+8CE081     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A4-4E-2D   (hex)		Adaptive Wireless Solutions, LLC
+A44E2D     (base 16)		Adaptive Wireless Solutions, LLC
+				577 Main Street
+				Hudson  MA  01749
+				US
+
+0C-CD-FB   (hex)		EDIC Systems Inc.
+0CCDFB     (base 16)		EDIC Systems Inc.
+				1-3-7 Nakamachidai
+				Yokohama  Kanagawa  224-0041
+				JP
+
+9C-8D-1A   (hex)		INTEG process group inc
+9C8D1A     (base 16)		INTEG process group inc
+				2919 E Hardies Rd, First Floor
+				Gibsonia  PA  15044
+				US
+
+48-03-62   (hex)		DESAY ELECTRONICS(HUIZHOU)CO.,LTD
+480362     (base 16)		DESAY ELECTRONICS(HUIZHOU)CO.,LTD
+				BuildingA,No.3 Desay Industrial Zone
+				Huizhou  Guangdong  516029
+				CN
+
+18-67-3F   (hex)		Hanover Displays Limited
+18673F     (base 16)		Hanover Displays Limited
+				Unit 24
+				Lewes  East Sussex  BN8 6JL
+				GB
+
+7C-0A-50   (hex)		J-MEX Inc.
+7C0A50     (base 16)		J-MEX Inc.
+				B2, 3F, No.1, Li-Hsin 1st Road,
+				Hsinchu  Taiwan  300
+				TW
+
+50-11-EB   (hex)		SilverNet Ltd
+5011EB     (base 16)		SilverNet Ltd
+				16 Cocran Close
+				Milton Keynes  Bucks  MK8 0AJ
+				GB
+
+54-DF-63   (hex)		Intrakey technologies GmbH
+54DF63     (base 16)		Intrakey technologies GmbH
+				Wiener Strasse 114-116
+				Dresden  Saxony  01219
+				DE
+
+40-F2-E9   (hex)		IBM
+40F2E9     (base 16)		IBM
+				3039 E Cornwallis Rd
+				Research Triangle Park  NC  27709
+				US
+
+74-4D-79   (hex)		Arrive Systems Inc.
+744D79     (base 16)		Arrive Systems Inc.
+				1404 Franklin Street, # 350 
+				Oakland  CA  94612
+				US
+
+9C-04-73   (hex)		Tecmobile (International) Ltd. 
+9C0473     (base 16)		Tecmobile (International) Ltd. 
+				Unit L, Braintree Industrial Estate, 
+				    HA4 0EJ 
+				GB
+
+B4-DF-FA   (hex)		Litemax Electronics Inc.
+B4DFFA     (base 16)		Litemax Electronics Inc.
+				8F, No.137,Lane 235
+				Shin-dian-Dist  New Taipei  23145
+				TW
+
+68-1C-A2   (hex)		Rosewill Inc.
+681CA2     (base 16)		Rosewill Inc.
+				17708 Rowland St.,
+				City of Industry  CA  91748
+				US
+
+60-46-16   (hex)		XIAMEN VANN INTELLIGENT CO., LTD
+604616     (base 16)		XIAMEN VANN INTELLIGENT CO., LTD
+				UNIT 101£¬NO.28 GUANRI RD., SOFTWARE PARK ¢ò
+				XIAMEN  FUJIAN  361009
+				CN
+
+E4-56-14   (hex)		Suttle Apparatus
+E45614     (base 16)		Suttle Apparatus
+				1001 East Highway 212
+				Hector  MN  55342
+				US
+
+3C-83-B5   (hex)		Advance Vision Electronics Co. Ltd.
+3C83B5     (base 16)		Advance Vision Electronics Co. Ltd.
+				6F, No. 199, Lide St. Jhonghe Dist
+				New Taipei City, Jhonghe Dist    23556
+				TW
+
+28-A1-92   (hex)		GERP Solution
+28A192     (base 16)		GERP Solution
+				Rua Costa Aguiar, 1710
+				São Paulo  SP  04204002
+				BR
+
+10-6F-EF   (hex)		Ad-Sol Nissin Corp
+106FEF     (base 16)		Ad-Sol Nissin Corp
+				Rivage Shinagawa, 4-1-8 Kounan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+6C-40-C6   (hex)		Nimbus Data, Inc.
+6C40C6     (base 16)		Nimbus Data, Inc.
+				5151 California Ave, Ste 100
+				Irvine  CA  92617
+				US
+
+10-48-B1   (hex)		Beijing Duokan Technology Limited
+1048B1     (base 16)		Beijing Duokan Technology Limited
+				Room 1105, Changxin Building, No.39 Anding Road
+				Chaoyang District  Beijing  100029
+				CN
+
+D4-93-A0   (hex)		Fidelix Oy
+D493A0     (base 16)		Fidelix Oy
+				Martinkyläntie 41
+				VANTAA  International  01720
+				FI
+
+08-EB-ED   (hex)		World Elite Technology Co.,LTD
+08EBED     (base 16)		World Elite Technology Co.,LTD
+				6/F Liyuan floor ,Dragon City North Road on the 3rd
+				ShenZhen  GuangDong  518100
+				CN
+
+DC-9F-A4   (hex)		Nokia Corporation
+DC9FA4     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+44-C3-9B   (hex)		OOO RUBEZH NPO
+44C39B     (base 16)		OOO RUBEZH NPO
+				Pionerskaya 11a
+				Bratsk  Irkutsk  665717
+				RU
+
+C4-45-67   (hex)		SAMBON PRECISON and ELECTRONICS
+C44567     (base 16)		SAMBON PRECISON and ELECTRONICS
+				204, Samjeong-dong, Ojeong-gu
+				Bucheon-city   Kyeonggi-do  421-810
+				KR
+
+48-F8-B3   (hex)		Cisco-Linksys, LLC
+48F8B3     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+D8-D2-7C   (hex)		JEMA ENERGY, SA
+D8D27C     (base 16)		JEMA ENERGY, SA
+				Pº Circuito nº10
+				Lasarte-Oria  Guipuzcoa  20160
+				ES
+
+B0-12-03   (hex)		Dynamics Hong Kong Limited
+B01203     (base 16)		Dynamics Hong Kong Limited
+				Room A4, 3/F, Friend's House , No.6A Carnarvon Road,
+				    999077
+				HK
+
+98-86-B1   (hex)		Flyaudio corporation (China)
+9886B1     (base 16)		Flyaudio corporation (China)
+				No.16 Mingzhu RD Economic&Technology
+				Guangzhou  Guangdong Province  510730
+				CN
+
+70-93-F8   (hex)		Space Monkey, Inc.
+7093F8     (base 16)		Space Monkey, Inc.
+				7707 south main street
+				Midvale  Utah  84047
+				US
+
+28-B3-AB   (hex)		Genmark Automation
+28B3AB     (base 16)		Genmark Automation
+				1201 Cadillac Ct
+				Milpitas  CA  95035
+				US
+
+C4-E7-BE   (hex)		SCSpro Co.,Ltd
+C4E7BE     (base 16)		SCSpro Co.,Ltd
+				#1203, KCC welltz valley 470-8
+				Seoul  Korea  153-710
+				KR
+
+58-87-4C   (hex)		LITE-ON CLEAN ENERGY TECHNOLOGY CORP.
+58874C     (base 16)		LITE-ON CLEAN ENERGY TECHNOLOGY CORP.
+				3F, 392, Ruey Kuang Road, Neihu,
+				Taipei    11492
+				TW
+
+28-91-D0   (hex)		Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH
+2891D0     (base 16)		Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH
+				Tabbertstraße 10
+				Berlin    12459
+				DE
+
+C0-BD-42   (hex)		ZPA Smart Energy a.s.
+C0BD42     (base 16)		ZPA Smart Energy a.s.
+				Komenskeho 821
+				Trutnov    54101
+				CZ
+
+FC-52-CE   (hex)		Control iD
+FC52CE     (base 16)		Control iD
+				Rua Hungria, 574
+				São Paulo  SP  01455-000
+				BR
+
+5C-4A-26   (hex)		Enguity Technology Corp
+5C4A26     (base 16)		Enguity Technology Corp
+				2020 Pennsylvania Ave., NW
+				Washington  DC  20006
+				US
+
+60-F2-EF   (hex)		VisionVera International Co., Ltd.
+60F2EF     (base 16)		VisionVera International Co., Ltd.
+				A1103 Gehua Building
+				  Beijing  100007
+				CN
+
+C0-3F-2A   (hex)		Biscotti, Inc.
+C03F2A     (base 16)		Biscotti, Inc.
+				5900 South Lake Forest Drive
+				McKinney  TX  75070
+				US
+
+38-1C-4A   (hex)		SIMCom Wireless Solutions Co.,Ltd.
+381C4A     (base 16)		SIMCom Wireless Solutions Co.,Ltd.
+				Building A,SIM Technology Building,No.633,Jinzhong Road,
+				  Shanghai  200335
+				CN
+
+D8-C6-91   (hex)		Hichan Technology Corp.
+D8C691     (base 16)		Hichan Technology Corp.
+				12F., No.2, Jian 8th Rd., Zhonghe Dist
+				New Taipei City    23511
+				TW
+
+E4-3F-A2   (hex)		Wuxi DSP Technologies Inc.
+E43FA2     (base 16)		Wuxi DSP Technologies Inc.
+				Rm A801,530Mansion,International High-Tech Park,Qingyuan Road
+				Wuxi  Jiangsu  214000
+				US
+
+F4-B7-2A   (hex)		TIME INTERCONNECT LTD
+F4B72A     (base 16)		TIME INTERCONNECT LTD
+				6/F, Photonics Centre
+				    
+				HK
+
+74-99-75   (hex)		IBM Corporation
+749975     (base 16)		IBM Corporation
+				4400 North First Street
+				San Jose  CA  95134
+				US
+
+2C-62-5A   (hex)		Finest Security Systems Co., Ltd
+2C625A     (base 16)		Finest Security Systems Co., Ltd
+				12F, No.103, Sec3, Nan King E. RD
+				Taipei    104
+				US
+
+20-74-CF   (hex)		Shenzhen Voxtech Co.,Ltd
+2074CF     (base 16)		Shenzhen Voxtech Co.,Ltd
+				4/F East, Building 4, Minqi Science&Technology Park, Pingshan,
+				Shenzhen  Guangdong  518055
+				CN
+
+E0-F5-CA   (hex)		CHENG UEI PRECISION INDUSTRY CO.,LTD.
+E0F5CA     (base 16)		CHENG UEI PRECISION INDUSTRY CO.,LTD.
+				No. 18, ZhongShan Rd., TuCheng Dist.,
+				New Taipei City  Taiwan  23680
+				TW
+
+A8-EF-26   (hex)		Tritonwave
+A8EF26     (base 16)		Tritonwave
+				795 Lakeshore Dr, Suite 307
+				  Quebec  H9S 0A8
+				CA
+
+20-DC-93   (hex)		Cheetah Hi-Tech, Inc.
+20DC93     (base 16)		Cheetah Hi-Tech, Inc.
+				Rm 804, No. 5, Sec. 2, Anhe Rd.
+				Taipei  Taiwan  10680
+				TW
+
+44-23-AA   (hex)		Farmage Co., Ltd.
+4423AA     (base 16)		Farmage Co., Ltd.
+				166-8 Kanazawa Toubetsu
+				  Hokkaido  061-0212
+				JP
+
+7C-FE-28   (hex)		Salutron Inc.
+7CFE28     (base 16)		Salutron Inc.
+				40979 Encyclopedia Circle
+				Fremont  CA  94538
+				US
+
+E8-10-2E   (hex)		Really Simple Software, Inc
+E8102E     (base 16)		Really Simple Software, Inc
+				P.O. Box 1086
+				Tiburon  California  94920
+				US
+
+0C-56-5C   (hex)		HyBroad Vision (Hong Kong) Technology Co Ltd
+0C565C     (base 16)		HyBroad Vision (Hong Kong) Technology Co Ltd
+				Unit 1808 18/F Tower 3 Enterprise Square
+				Kowloon Bay    
+				HK
+
+8C-6A-E4   (hex)		Viogem Limited
+8C6AE4     (base 16)		Viogem Limited
+				Paddock House
+				Orlingbury  Northamptonshire  NN141JH
+				GB
+
+54-39-68   (hex)		Edgewater Networks Inc
+543968     (base 16)		Edgewater Networks Inc
+				2895 Northwestern Parkway
+				Santa Clara  CA  95051
+				US
+
+44-0C-FD   (hex)		NetMan Co., Ltd.
+440CFD     (base 16)		NetMan Co., Ltd.
+				Rm 406, DIP, 2139, Daemyeong-dong,
+				Daegu    705-701
+				KR
+
+8C-D3-A2   (hex)		VisSim AS
+8CD3A2     (base 16)		VisSim AS
+				Vollveien 5
+				Horten  Vestfold  3183
+				NO
+
+D8-2D-E1   (hex)		Tricascade Inc.
+D82DE1     (base 16)		Tricascade Inc.
+				5020 Campus Drv.
+				Newport Beach  CA  92660
+				US
+
+14-35-8B   (hex)		Mediabridge Products, LLC.
+14358B     (base 16)		Mediabridge Products, LLC.
+				1951 Old Cuthbert Rd
+				Cherry Hill  New Jersey  08034
+				US
+
+00-F4-03   (hex)		Orbis Systems Oy
+00F403     (base 16)		Orbis Systems Oy
+				Taivaltie 5
+				Vantaa    01610
+				FI
+
+54-73-98   (hex)		Toyo Electronics Corporation
+547398     (base 16)		Toyo Electronics Corporation
+				1860-38, Simoakasaka
+				Kawagoe  Saitama  3501155
+				JP
+
+E0-A3-0F   (hex)		Pevco
+E0A30F     (base 16)		Pevco
+				1401 Tangier Drive
+				Baltimore  MD  21220
+				US
+
+20-44-3A   (hex)		Schneider Electric Asia Pacific Ltd
+20443A     (base 16)		Schneider Electric Asia Pacific Ltd
+				13F East Wing, Warwick House, Taikoo Place
+				Quarry Bay    
+				HK
+
+C4-39-3A   (hex)		SMC Networks Inc
+C4393A     (base 16)		SMC Networks Inc
+				20 Mason
+				Irvine  CA  92618
+				US
+
+5C-24-79   (hex)		Baltech AG
+5C2479     (base 16)		Baltech AG
+				Lilienthalstrasse 27
+				Hallbergmoos    85399
+				DE
+
+EC-93-27   (hex)		MEMMERT GmbH + Co. KG
+EC9327     (base 16)		MEMMERT GmbH + Co. KG
+				Aeussere Rittersbacher Strasse 38
+				Schwabach  Bavaria  91126
+				DE
+
+A0-EF-84   (hex)		Seine Image Int'l Co., Ltd
+A0EF84     (base 16)		Seine Image Int'l Co., Ltd
+				6F,4Building, NO.63,Mingz North Road
+				ZhuHai    519075
+				CN
+
+64-51-7E   (hex)		LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.
+64517E     (base 16)		LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.
+				NO.19.Jian she Road,Shi ma Village,Tang xia  Town,Dong guan,Guang dong,China
+				Dong guan  Guang dong  523731
+				CN
+
+D4-3D-7E   (hex)		Micro-Star Int'l Co, Ltd
+D43D7E     (base 16)		Micro-Star Int'l Co, Ltd
+				No.69, Lide St., Jhonghe City
+				Taipei County    235
+				US
+
+AC-D9-D6   (hex)		tci GmbH
+ACD9D6     (base 16)		tci GmbH
+				Ludwig-Rinn-Straße 10-14
+				Heuchelheim  Hessen  35452
+				US
+
+48-28-2F   (hex)		zte corporation
+48282F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+60-CB-FB   (hex)		AirScape Inc.
+60CBFB     (base 16)		AirScape Inc.
+				625 Charles Way
+				Medford  OR  97501
+				US
+
+7C-16-0D   (hex)		Saia-Burgess Controls AG
+7C160D     (base 16)		Saia-Burgess Controls AG
+				Bahnhofstrasse 18
+				Murten  FR  3280
+				CH
+
+A4-97-BB   (hex)		Hitachi Industrial Equipment Systems Co.,Ltd
+A497BB     (base 16)		Hitachi Industrial Equipment Systems Co.,Ltd
+				3, Kanda Neribei-cho
+				Chiyoda-ku  Tokyo  101-0022
+				US
+
+4C-54-27   (hex)		Linepro Sp. z o.o.
+4C5427     (base 16)		Linepro Sp. z o.o.
+				ul. Miedziana 11
+				Warszawa  mazowieckie  00-835
+				PL
+
+80-D1-8B   (hex)		Hangzhou I'converge Technology Co.,Ltd
+80D18B     (base 16)		Hangzhou I'converge Technology Co.,Ltd
+				No.618 Xixi Road,
+				Hangzhou  Zhejiang  310012
+				CN
+
+40-88-E0   (hex)		Beijing Ereneben Information Technology Limited Shenzhen Branch
+4088E0     (base 16)		Beijing Ereneben Information Technology Limited Shenzhen Branch
+				Room 14A, Building A, Honglong Central Plaza, No.3001,Heping Road, Luohu District, Shenzhen City
+				Shenzhen  Guangdong  518001
+				CN
+
+E8-54-84   (hex)		NEO Information Systems Co., Ltd.
+E85484     (base 16)		NEO Information Systems Co., Ltd.
+				609, Junganginduspia, #517-13, Sangdaeweon-Dong, Jungweon-Gu
+				Seongnam  Gyunggi-Do  462-713
+				KR
+
+74-AE-76   (hex)		iNovo Broadband, Inc.
+74AE76     (base 16)		iNovo Broadband, Inc.
+				3475 Corporate Way
+				Duluth  Georgia  30096
+				US
+
+EC-1A-59   (hex)		Belkin International Inc.
+EC1A59     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista  Ca.   90094
+				US
+
+88-10-36   (hex)		Panodic(ShenZhen) Electronics Limted
+881036     (base 16)		Panodic(ShenZhen) Electronics Limted
+				Floor 12, Grentech Building, Keji.C. Road 
+				ShenZhen  GuangDong   518052
+				CN
+
+68-B6-FC   (hex)		Hitron Technologies. Inc
+68B6FC     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+EC-A2-9B   (hex)		Kemppi Oy
+ECA29B     (base 16)		Kemppi Oy
+				Kempinkatu 1
+				Lahti  Lahti  15810
+				FI
+
+04-CE-14   (hex)		Wilocity LTD.
+04CE14     (base 16)		Wilocity LTD.
+				21 Bareket St.
+				Caesarea  Israel  38900
+				US
+
+C4-BA-99   (hex)		I+ME Actia Informatik und Mikro-Elektronik GmbH
+C4BA99     (base 16)		I+ME Actia Informatik und Mikro-Elektronik GmbH
+				Dresdenstrasse 17/18
+				Braunschweig  Niedersachsen  38690
+				DE
+
+A4-93-4C   (hex)		Cisco Systems, Inc
+A4934C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D0-D2-12   (hex)		K2NET Co.,Ltd.
+D0D212     (base 16)		K2NET Co.,Ltd.
+				K2Net Building
+				  Seoul  158-092
+				KR
+
+B0-43-5D   (hex)		NuLEDs, Inc.
+B0435D     (base 16)		NuLEDs, Inc.
+				1497 Poinsettia Ave.
+				Vista  CA  92081
+				US
+
+08-08-EA   (hex)		AMSC
+0808EA     (base 16)		AMSC
+				15775 W Schaefer Court
+				New Berlin  WI  53151
+				US
+
+E8-D4-83   (hex)		ULTIMATE Europe Transportation Equipment GmbH
+E8D483     (base 16)		ULTIMATE Europe Transportation Equipment GmbH
+				Industriestraße 3
+				3300  Niederösterreich  3300
+				AT
+
+1C-84-64   (hex)		FORMOSA WIRELESS COMMUNICATION CORP.
+1C8464     (base 16)		FORMOSA WIRELESS COMMUNICATION CORP.
+				11F., No.3-2, Yuanqu St., Nangang Dist.,
+				  Taipei City  115
+				TW
+
+34-6E-8A   (hex)		Ecosense
+346E8A     (base 16)		Ecosense
+				1414 Kolon science vallet-II., #811
+				Seoul  Guro-gu  152-878
+				KR
+
+64-F2-42   (hex)		Gerdes Aktiengesellschaft
+64F242     (base 16)		Gerdes Aktiengesellschaft
+				Bergerwiesenstraße 9
+				Meckenheim  NRW  53340
+				DE
+
+60-F2-81   (hex)		TRANWO TECHNOLOGY CO., LTD.
+60F281     (base 16)		TRANWO TECHNOLOGY CO., LTD.
+				No.236, Sec.3, Huanbei Rd.
+				Jubei City  Hsinchu County  30265
+				TW
+
+94-21-97   (hex)		Stalmart Technology Limited
+942197     (base 16)		Stalmart Technology Limited
+				Rm1106-1107E, Building F, Xihaimingzhu, No.1, Taoyuan Road
+				Shenzhen  Gunagdong  518052
+				CN
+
+A0-C3-DE   (hex)		Triton Electronic Systems Ltd.
+A0C3DE     (base 16)		Triton Electronic Systems Ltd.
+				620063, Ekaterinburg, P/O box 522
+				Ekaterinburg  Sverdlovskaya obl.  620063
+				RU
+
+D0-69-9E   (hex)		LUMINEX Lighting Control Equipment
+D0699E     (base 16)		LUMINEX Lighting Control Equipment
+				Berkenlaan 8 A
+				Hechtel - Eksel  Limburg  3940
+				BE
+
+0C-C0-C0   (hex)		MAGNETI MARELLI SISTEMAS ELECTRONICOS MEXICO
+0CC0C0     (base 16)		MAGNETI MARELLI SISTEMAS ELECTRONICOS MEXICO
+				AV. INDUSTRIA 20/21
+				TEPOTZOTLAN  MEXICO  54600
+				MX
+
+08-37-9C   (hex)		Topaz Co. LTD.
+08379C     (base 16)		Topaz Co. LTD.
+				B305-22, Acrotower, 1591 Gwanyang-dong
+				Anyang-si  Gyeonggi-Do  431-060
+				KR
+
+D8-0D-E3   (hex)		FXI TECHNOLOGIES AS
+D80DE3     (base 16)		FXI TECHNOLOGIES AS
+				Postboks 609
+				TRONDHEIM  Norge  7406
+				NO
+
+B0-D2-F5   (hex)		Vello Systems, Inc.
+B0D2F5     (base 16)		Vello Systems, Inc.
+				1530 O'Brien Drive
+				Menlo Park  California  94025
+				US
+
+70-9A-0B   (hex)		Italian Institute of Technology
+709A0B     (base 16)		Italian Institute of Technology
+				Via Morego 30
+				Genova  GE  16163
+				IT
+
+F0-FD-A0   (hex)		Acurix Networks Pty Ltd
+F0FDA0     (base 16)		Acurix Networks Pty Ltd
+				Unit 5, 348 Victoria Road,
+				Malaga, Perth  Western Austraila  6090
+				NZ
+
+B4-55-70   (hex)		Borea
+B45570     (base 16)		Borea
+				Mlaka 1b
+				Begunje    SI-4275
+				SI
+
+10-0D-2F   (hex)		Online Security Pty. Ltd.
+100D2F     (base 16)		Online Security Pty. Ltd.
+				5/21-25 Redland Drive
+				Mitcham  VIC  3132
+				AU
+
+14-2D-F5   (hex)		Amphitech
+142DF5     (base 16)		Amphitech
+				1, rue Robert & Sonia DELAUNAY
+				Paris    75011
+				FR
+
+50-57-A8   (hex)		Cisco Systems, Inc
+5057A8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-DE-FB   (hex)		Cisco Systems, Inc
+00DEFB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-A3-15   (hex)		Bless Information & Communications Co., Ltd
+3CA315     (base 16)		Bless Information & Communications Co., Ltd
+				#64-1, Wonhyoro 3-ga, Yongsan-gu,
+				Seoul    140-848
+				KR
+
+F8-30-94   (hex)		Alcatel-Lucent Telecom Limited
+F83094     (base 16)		Alcatel-Lucent Telecom Limited
+				The Quadrant, Stonehill Green 
+				SWINDON    SN5 7DJ
+				GB
+
+10-A9-32   (hex)		Beijing Cyber Cloud Technology Co. ,Ltd.
+10A932     (base 16)		Beijing Cyber Cloud Technology Co. ,Ltd.
+				2/F, Tower B, Jingmeng High-tech Building. No. 5 Shangdi East Road, Haidian District.
+				Beijing    100085
+				CN
+
+34-FC-6F   (hex)		ALCEA
+34FC6F     (base 16)		ALCEA
+				3 Rue Joly de Bammeville
+				91460  Marcoussis  
+				FR
+
+C0-B3-57   (hex)		Yoshiki Electronics Industry Ltd.
+C0B357     (base 16)		Yoshiki Electronics Industry Ltd.
+				Ooicyoyo Building 7f
+				Shinagawa-ku  Tokyo  140-0011
+				JP
+
+3C-98-BF   (hex)		Quest Controls, Inc.
+3C98BF     (base 16)		Quest Controls, Inc.
+				208 9th Street Dr. West
+				Palmetto  FL  34221
+				US
+
+D0-AE-EC   (hex)		Alpha Networks Inc.
+D0AEEC     (base 16)		Alpha Networks Inc.
+				No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C
+				Hsinchu  Taiwan  300
+				TW
+
+E8-13-24   (hex)		GuangZhou Bonsoninfo System CO.,LTD
+E81324     (base 16)		GuangZhou Bonsoninfo System CO.,LTD
+				4/F,NO.1029/31,GaoPu Road,GaoTang New Building District
+				Guangzhou  Guangdong  510663
+				CN
+
+E4-77-D4   (hex)		Minrray Industry Co.,Ltd 
+E477D4     (base 16)		Minrray Industry Co.,Ltd 
+				C5, Building 2, ZhongHaiXin  ,Science&Technology Park, Ganli Rd, LiLang Blvd., Buji
+				Shenzhen  GuangDong  518112
+				CN
+
+38-E0-8E   (hex)		Mitsubishi Electric Corporation
+38E08E     (base 16)		Mitsubishi Electric Corporation
+				2-7-3 Marunouchi Chiyoda-ku
+				Tokyo    100-8310
+				JP
+
+E4-C8-06   (hex)		Ceiec Electric Technology Inc.
+E4C806     (base 16)		Ceiec Electric Technology Inc.
+				8/F West Side, Building 201, Terra Industrial & Tradepark, Che Gong Miao,
+				Shenzhen  Guangdong  518040
+				CN
+
+E0-F9-BE   (hex)		Cloudena Corp.
+E0F9BE     (base 16)		Cloudena Corp.
+				6F., No. 5, Alley 22, Lane 513
+				Taipei City    114
+				TW
+
+B8-8F-14   (hex)		Analytica GmbH
+B88F14     (base 16)		Analytica GmbH
+				Vorholzstraße 36
+				Karlsruhe  Baden-Württemberg  76137
+				DE
+
+7C-94-B2   (hex)		Philips Healthcare PCCI
+7C94B2     (base 16)		Philips Healthcare PCCI
+				2271 Cosmos Ct
+				Carlsbad  CA  92011
+				US
+
+44-2B-03   (hex)		Cisco Systems, Inc
+442B03     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-73-CA   (hex)		Conversion Sound Inc.
+F473CA     (base 16)		Conversion Sound Inc.
+				960 N. Northwest Hwy
+				Park Ridge  IL  60068
+				US
+
+F8-F7-FF   (hex)		SYN-TECH SYSTEMS INC
+F8F7FF     (base 16)		SYN-TECH SYSTEMS INC
+				100 FOUR POINTS WAY
+				TALLAHASSEE  FL  32305
+				US
+
+A8-17-58   (hex)		Elektronik System i Umeå AB
+A81758     (base 16)		Elektronik System i Umeå AB
+				Box 7978
+				Umeå  Västerbotten  907 19
+				SE
+
+88-20-12   (hex)		LMI Technologies
+882012     (base 16)		LMI Technologies
+				1673 Cliveden Avenue
+				Delta  British Columbia  V3M 6V5
+				CA
+
+60-E9-56   (hex)		Ayla Networks, Inc
+60E956     (base 16)		Ayla Networks, Inc
+				218 Morgan Lane
+				Menlo Park  CA  94025
+				US
+
+EC-11-20   (hex)		FloDesign Wind Turbine Corporation
+EC1120     (base 16)		FloDesign Wind Turbine Corporation
+				Papirfabrikken 28
+				Silkeborg    8600
+				DK
+
+F8-97-CF   (hex)		DAESHIN-INFORMATION TECHNOLOGY CO., LTD.
+F897CF     (base 16)		DAESHIN-INFORMATION TECHNOLOGY CO., LTD.
+				6F, Chungwon Bldg., 828-5 Yuksam-Dong,Kangnam-Gu,
+				Seoul    135935
+				KR
+
+08-B4-CF   (hex)		Abicom International
+08B4CF     (base 16)		Abicom International
+				The Old Grammar School
+				Market Drayton  Shropshire  TF9 1JR
+				GB
+
+C4-95-A2   (hex)		SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD
+C495A2     (base 16)		SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD
+				ROOM 1713,BAOHUA BUILDING, HUAQIANG NORTH ROAD, FUTIAN DISTRICT, 
+				SHENZHEN  GUANGDONG  518031
+				CN
+
+8C-68-78   (hex)		Nortek-AS
+8C6878     (base 16)		Nortek-AS
+				Vangkroken 2
+				  Akreshus  1351 RUD
+				NO
+
+20-25-98   (hex)		Teleview
+202598     (base 16)		Teleview
+				#401 Sehwa, 355-1
+				Sungnam  Gyeonggi  463-828
+				KR
+
+38-F8-B7   (hex)		V2COM PARTICIPACOES S.A.
+38F8B7     (base 16)		V2COM PARTICIPACOES S.A.
+				Rua Cunha Gago, 700
+				São Paulo    05421001
+				BR
+
+F8-D4-62   (hex)		Pumatronix Equipamentos Eletronicos Ltda.
+F8D462     (base 16)		Pumatronix Equipamentos Eletronicos Ltda.
+				Rua Bartolomeu Lourenco de Gusmao 2021
+				Curitiba  PR  81650050
+				BR
+
+A0-DC-04   (hex)		Becker-Antriebe GmbH
+A0DC04     (base 16)		Becker-Antriebe GmbH
+				Friedrich-Ebert-Straße 2 - 4
+				35764 Sinn  Hessen  DE811177977
+				DE
+
+40-60-5A   (hex)		Hawkeye Tech Co. Ltd
+40605A     (base 16)		Hawkeye Tech Co. Ltd
+				13F-5, No. 736 Chung Cheng Road, Chung He
+				New Taipei    23511
+				TW
+
+A0-4C-C1   (hex)		Helixtech Corp.
+A04CC1     (base 16)		Helixtech Corp.
+				6F Lions bldg., 160-2 Gangnam-daero,
+				Seoul    137-888
+				KR
+
+34-A7-BA   (hex)		Fischer International Systems Corporation
+34A7BA     (base 16)		Fischer International Systems Corporation
+				5801 Pelican Bay Boulevard #300
+				Naples  Florida  34108
+				US
+
+04-63-E0   (hex)		Nome Oy
+0463E0     (base 16)		Nome Oy
+				Lunkintie 9
+				Oulunsalo  Oulun lللni  90460
+				FI
+
+B4-9E-E6   (hex)		SHENZHEN TECHNOLOGY CO LTD
+B49EE6     (base 16)		SHENZHEN TECHNOLOGY CO LTD
+				NO34 SHILONG RD
+				SHENZHEN  GUANGDONG  91732
+				CN
+
+BC-4B-79   (hex)		SensingTek
+BC4B79     (base 16)		SensingTek
+				2F, No.6-2,Dusing Rd.,Hsinchu Science Park, 
+				Hsinchu    30078
+				TW
+
+A4-90-05   (hex)		CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD
+A49005     (base 16)		CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD
+				409,2#,Greatwall Bldg,No.3 Kefa Road,Science & Industry Park,Nanshan District,
+				Shenzhen  Guangdong  51807
+				CN
+
+C4-0A-CB   (hex)		Cisco Systems, Inc
+C40ACB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-16-05   (hex)		Systems And Electronic Development FZCO
+681605     (base 16)		Systems And Electronic Development FZCO
+				Roundabout no. 8
+				Jebel Ali free Zone  Dubai  P.O.Box 61129
+				AE
+
+D4-A0-2A   (hex)		Cisco Systems, Inc
+D4A02A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-4E-47   (hex)		Etronic A/S
+3C4E47     (base 16)		Etronic A/S
+				Rødeledsvej 95
+				Svendborg  South Denmark  5700
+				DK
+
+F4-87-71   (hex)		Infoblox
+F48771     (base 16)		Infoblox
+				4750 Patrick Henry Drive
+				Santa Clara  California  95054
+				US
+
+54-53-ED   (hex)		Sony Corporation
+5453ED     (base 16)		Sony Corporation
+				Gotenyama Tec 5-1-2
+				Tokyo  Shinagawa-ku  141-0001
+				JP
+
+00-37-6D   (hex)		Murata Manufacturing Co., Ltd.
+00376D     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+50-00-8C   (hex)		Hong Kong Telecommunications (HKT) Limited
+50008C     (base 16)		Hong Kong Telecommunications (HKT) Limited
+				41/F, PCCW Tower, Taikoo Place,
+				    
+				HK
+
+90-2B-34   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+902B34     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, 
+				Pin-Jen  Taoyuan  324
+				TW
+
+88-C3-6E   (hex)		Beijing Ereneben lnformation Technology Limited
+88C36E     (base 16)		Beijing Ereneben lnformation Technology Limited
+				Room 14F,Building F,Honglong Central Plaza,NO,3001,Heping Road,LuoHu 
+				ShenZhen  GuangDong  518110
+				CN
+
+4C-9E-80   (hex)		KYOKKO ELECTRIC Co., Ltd.
+4C9E80     (base 16)		KYOKKO ELECTRIC Co., Ltd.
+				5-7-20, Motomachi-dori, Chuo-Ku
+				Kobe  Hyogo  6500022
+				JP
+
+5C-EB-4E   (hex)		R. STAHL HMI Systems GmbH
+5CEB4E     (base 16)		R. STAHL HMI Systems GmbH
+				Im Gewerbegebiet Pesch 14
+				Cologne    50767
+				DE
+
+34-AA-99   (hex)		Nokia
+34AA99     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+64-55-63   (hex)		Intelight Inc.
+645563     (base 16)		Intelight Inc.
+				3450 S Broadmont Drive  #126
+				Tucson  Arizona  85713
+				US
+
+94-3A-F0   (hex)		Nokia Corporation
+943AF0     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+64-54-22   (hex)		Equinox Payments
+645422     (base 16)		Equinox Payments
+				8888 E. Raintree Dr., Suite 300
+				Scottsdale  Arizona  85260
+				US
+
+08-0D-84   (hex)		GECO, Inc.
+080D84     (base 16)		GECO, Inc.
+				1754 N. 48th St.
+				Mesa  AZ  85205
+				US
+
+88-E7-12   (hex)		Whirlpool Corporation
+88E712     (base 16)		Whirlpool Corporation
+				750 Monte Dr.
+				Benton Harbor  Michigan  49022
+				US
+
+D4-12-BB   (hex)		Quadrant Components Inc. Ltd
+D412BB     (base 16)		Quadrant Components Inc. Ltd
+				Unit 5, 17/F, Metro Loft,
+				Kwai Chung,  New Territory  
+				HK
+
+24-B8-8C   (hex)		Crenus Co.,Ltd.
+24B88C     (base 16)		Crenus Co.,Ltd.
+				Mario Tower 814, 222-12
+				Seoul    152-050
+				KR
+
+BC-FE-8C   (hex)		Altronic, LLC
+BCFE8C     (base 16)		Altronic, LLC
+				712 Trumbull Ave
+				Girard  Ohio  44420
+				US
+
+64-9E-F3   (hex)		Cisco Systems, Inc
+649EF3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-BB-C1   (hex)		Absolute Analysis
+24BBC1     (base 16)		Absolute Analysis
+				2393 Teller Road Ste #109
+				Newbury Park  California  91320
+				US
+
+9C-CA-D9   (hex)		Nokia Corporation
+9CCAD9     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+04-6D-42   (hex)		Bryston Ltd.
+046D42     (base 16)		Bryston Ltd.
+				P.O. Box 2170
+				Peterborough  Ontario  K9J  7Y4
+				CA
+
+D8-E7-43   (hex)		Wush, Inc
+D8E743     (base 16)		Wush, Inc
+				17F.No 268, Liancheng Rd., Zhonghe District
+				New  Taipei City     235
+				TW
+
+64-4D-70   (hex)		dSPACE GmbH
+644D70     (base 16)		dSPACE GmbH
+				Rathenaustraße 26
+				Paderborn    33102
+				DE
+
+DC-C1-01   (hex)		SOLiD Technologies, Inc.
+DCC101     (base 16)		SOLiD Technologies, Inc.
+				9th Floor, SOLiD Space, Pangyoyeok-ro 220
+				Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+3C-E6-24   (hex)		LG Display 
+3CE624     (base 16)		LG Display 
+				9th, Fl., LG U+ building, 65-228, Hangangro, 3-ga, Yongsan-gu
+				Seoul    140-716
+				KR
+
+D8-F0-F2   (hex)		Zeebo Inc
+D8F0F2     (base 16)		Zeebo Inc
+				5405 Morehouse Drive
+				San Diego  California  92121
+				US
+
+80-60-07   (hex)		RIM
+806007     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+94-E0-D0   (hex)		HealthStream Taiwan Inc.
+94E0D0     (base 16)		HealthStream Taiwan Inc.
+				16-3, Zichiang 1st Road
+				Jhongli, Taoyuan county    32063
+				TW
+
+D8-05-2E   (hex)		Skyviia Corporation
+D8052E     (base 16)		Skyviia Corporation
+				No. 10-1, Lixing 1st Rd., Science Park,
+				Hsinchu City    300
+				TW
+
+80-94-6C   (hex)		TOKYO RADAR CORPORATION
+80946C     (base 16)		TOKYO RADAR CORPORATION
+				15-7 Nishikubo-cho
+				Hodogaya-ku, Yokohama-shi  Kanagawa  240-0022
+				JP
+
+D0-CF-5E   (hex)		Energy Micro AS
+D0CF5E     (base 16)		Energy Micro AS
+				Sandakerveien 118
+				Oslo    N-0484
+				NO
+
+18-03-FA   (hex)		IBT Interfaces
+1803FA     (base 16)		IBT Interfaces
+				Im Taubhaus 19
+				Roedermark  Hessen  63322
+				DE
+
+30-6E-5C   (hex)		Validus Technologies
+306E5C     (base 16)		Validus Technologies
+				420 North Main Street
+				East Peoria  Illinois  61611
+				US
+
+C8-94-D2   (hex)		Jiangsu Datang  Electronic Products Co., Ltd
+C894D2     (base 16)		Jiangsu Datang  Electronic Products Co., Ltd
+				NO.20
+				Nanjing  Jiangsu  211800
+				CN
+
+C8-A6-20   (hex)		Nebula, Inc
+C8A620     (base 16)		Nebula, Inc
+				215 Castro St
+				Mountain View  CA  94041
+				US
+
+EC-62-64   (hex)		Global411 Internet Services, LLC
+EC6264     (base 16)		Global411 Internet Services, LLC
+				10400 W Overland Rd #371
+				Boise  Idaho  83709
+				US
+
+00-F0-51   (hex)		KWB Gmbh
+00F051     (base 16)		KWB Gmbh
+				Industriestraße 235
+				St. Margarethen  Styria  8321
+				AT
+
+FC-94-6C   (hex)		UBIVELOX
+FC946C     (base 16)		UBIVELOX
+				#1301 KOLONG Digital Villent 222-7 Guro-dong Guro-gu
+				SEOUL    152-777
+				KR
+
+40-7B-1B   (hex)		Mettle Networks Inc.
+407B1B     (base 16)		Mettle Networks Inc.
+				111 N. Market St STE 300
+				San Jose   CA  95113
+				US
+
+40-D5-59   (hex)		MICRO S.E.R.I.
+40D559     (base 16)		MICRO S.E.R.I.
+				24, rue Henri FARMAN
+				TREMBLAY EN FRANCE  Ile de France  93290
+				FR
+
+30-6C-BE   (hex)		Skymotion Technology (HK) Limited
+306CBE     (base 16)		Skymotion Technology (HK) Limited
+				Unit 2603, 26/F, Metropole Square,
+				    852
+				HK
+
+18-38-25   (hex)		Wuhan Lingjiu High-tech Co.,Ltd.
+183825     (base 16)		Wuhan Lingjiu High-tech Co.,Ltd.
+				No.718
+				Wuhan  Hubei  430074
+				CN
+
+7C-4B-78   (hex)		Red Sun Synthesis Pte Ltd
+7C4B78     (base 16)		Red Sun Synthesis Pte Ltd
+				639, #11-544
+				    510539
+				SG
+
+64-A0-E7   (hex)		Cisco Systems, Inc
+64A0E7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+DC-F8-58   (hex)		Lorent Networks, Inc.
+DCF858     (base 16)		Lorent Networks, Inc.
+				Third Floor, Technology Complex, HAO Science Park
+				Foshan  Guangdong Province  528200
+				CN
+
+94-0B-2D   (hex)		NetView Technologies(Shenzhen) Co., Ltd
+940B2D     (base 16)		NetView Technologies(Shenzhen) Co., Ltd
+				RM2902,East Tower, Nanshan Software Park
+				Shenzhen  Guangdong  518052
+				CN
+
+80-3F-5D   (hex)		Winstars Technology Ltd
+803F5D     (base 16)		Winstars Technology Ltd
+				Block4,Taisong Industrial Park, DaLang Street, LongHua Town , Bao'an District
+				Shenzhen  Guangdong  518109
+				CN
+
+40-BF-17   (hex)		Digistar Telecom. SA
+40BF17     (base 16)		Digistar Telecom. SA
+				Av. Theodomiro Porto da Fonseca, 3101
+				Sao Leopoldo  RS  9302080
+				BR
+
+78-07-38   (hex)		Z.U.K. Elzab S.A.
+780738     (base 16)		Z.U.K. Elzab S.A.
+				ul. Kruczkowskiego 39
+				Zabrze    41-813
+				PL
+
+20-37-BC   (hex)		Kuipers Electronic Engineering BV
+2037BC     (base 16)		Kuipers Electronic Engineering BV
+				Houtkopersstraat 6
+				Zwijndrecht  Zuid-Holland  3334 KD
+				NL
+
+94-31-9B   (hex)		Alphatronics BV
+94319B     (base 16)		Alphatronics BV
+				Watergoorweg 71
+				NIJKERK  Gld  3861 MA
+				NL
+
+00-E1-75   (hex)		AK-Systems Ltd
+00E175     (base 16)		AK-Systems Ltd
+				off 62, 27/29 Pavlovskaya str.
+				Moscow    115093
+				RU
+
+CC-50-1C   (hex)		KVH Industries, Inc.
+CC501C     (base 16)		KVH Industries, Inc.
+				50 Enterprise Center
+				Middletown  RI  02842-5279
+				US
+
+04-D7-83   (hex)		Y&H E&C Co.,LTD.
+04D783     (base 16)		Y&H E&C Co.,LTD.
+				1501 Daerung Technotown 224-5
+				Anyang-city  Gyeonggi-do  431-062
+				KR
+
+54-A9-D4   (hex)		Minibar Systems
+54A9D4     (base 16)		Minibar Systems
+				7340 Westmore Road
+				Rockville  MD  20850
+				US
+
+B0-E5-0E   (hex)		NRG SYSTEMS INC
+B0E50E     (base 16)		NRG SYSTEMS INC
+				PO BOX 0509
+				Hinesburg  VT  054610509
+				US
+
+64-80-8B   (hex)		VG Controls, Inc.
+64808B     (base 16)		VG Controls, Inc.
+				11 Butternut Drive
+				Vernon  NJ  07462
+				US
+
+48-C1-AC   (hex)		PLANTRONICS, INC.
+48C1AC     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+98-58-8A   (hex)		SYSGRATION Ltd.
+98588A     (base 16)		SYSGRATION Ltd.
+				10Fl.NO.868-3.Chung Cheng Rd.
+				NewTaipei City    235
+				TW
+
+24-37-EF   (hex)		EMC Electronic Media Communication SA
+2437EF     (base 16)		EMC Electronic Media Communication SA
+				Via Cantonale 4
+				S. Antonino  Ticino  6592
+				CH
+
+28-B0-CC   (hex)		Xenya d.o.o.
+28B0CC     (base 16)		Xenya d.o.o.
+				Celovska cesta 172
+				Ljubljana    1000
+				SI
+
+20-5B-5E   (hex)		Shenzhen Wonhe Technology Co., Ltd
+205B5E     (base 16)		Shenzhen Wonhe Technology Co., Ltd
+				South Block 10th floor, Yuanxing Building, No. 1
+				Shenzhen  Guangdong  518057
+				CN
+
+C0-58-A7   (hex)		Pico Systems Co., Ltd.
+C058A7     (base 16)		Pico Systems Co., Ltd.
+				332-7 Kouya
+				Matsudo  Chiba pref.  270-0017
+				JP
+
+EC-3F-05   (hex)		Institute 706, The Second Academy China Aerospace Science & Industry Corp
+EC3F05     (base 16)		Institute 706, The Second Academy China Aerospace Science & Industry Corp
+				YongDing Road ,HaiDian District.BeiJing ,No.51
+				BeiJing    100854
+				CN
+
+48-9B-E2   (hex)		SCI Innovations Ltd
+489BE2     (base 16)		SCI Innovations Ltd
+				16C Hurst End
+				Newport Pagnell  Buckinghamshire  MK16 9HS
+				GB
+
+80-FF-A8   (hex)		UNIDIS
+80FFA8     (base 16)		UNIDIS
+				4 floors(401), 144-4, Gumi-dong
+				Sungnam-si  Gyeonggi-do  463-810
+				KR
+
+E4-35-FB   (hex)		Sabre Technology (Hull) Ltd
+E435FB     (base 16)		Sabre Technology (Hull) Ltd
+				3a Newlands Science Park
+				Hull  East Yorkshire  HU6 7TQ
+				GB
+
+C8-3B-45   (hex)		JRI
+C83B45     (base 16)		JRI
+				16 rue louis rameau
+				Bezons Cedex    95872
+				FR
+
+E8-78-A1   (hex)		BEOVIEW INTERCOM DOO
+E878A1     (base 16)		BEOVIEW INTERCOM DOO
+				TRESNJINOG CVETA 5/17
+				BELGRADE    11070
+				RS
+
+CC-EF-48   (hex)		Cisco Systems, Inc
+CCEF48     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F0-4B-6A   (hex)		Scientific Production Association Siberian Arsenal, Ltd.
+F04B6A     (base 16)		Scientific Production Association Siberian Arsenal, Ltd.
+				Bld.8A, Gorskiy Microdistrict
+				Novosibirsk    630073
+				RU
+
+64-AE-0C   (hex)		Cisco Systems, Inc
+64AE0C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E8-DA-96   (hex)		Zhuhai Tianrui Electrical Power Tech. Co., Ltd.
+E8DA96     (base 16)		Zhuhai Tianrui Electrical Power Tech. Co., Ltd.
+				Minying Technology Zone, 10# Keji 1 Road, Gangwan Main Road, Tangjia
+				Zhuhai  Guangdong  519085
+				CN
+
+B4-D8-DE   (hex)		iota Computing, Inc.
+B4D8DE     (base 16)		iota Computing, Inc.
+				2275 East Bayshore Road
+				Palo Alto  CA  94303-3222
+				US
+
+C8-90-3E   (hex)		Pakton Technologies
+C8903E     (base 16)		Pakton Technologies
+				1 Helium St
+				Narangba  QLD  4504
+				AU
+
+54-CD-A7   (hex)		Fujian Shenzhou Electronic Co.,Ltd
+54CDA7     (base 16)		Fujian Shenzhou Electronic Co.,Ltd
+				Quanzhou Economical&Technological Development Zone,Quanzhou,Fujian,China
+				QUANZHOU  FUJIAN  362005
+				CN
+
+88-6B-76   (hex)		CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD
+886B76     (base 16)		CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD
+				Shunde District of Foshan City, Guangdong Province, Guangxi Rong Ronggui Town Road, No. 148
+				Foshan  GuangDong  528305
+				CN
+
+78-F7-D0   (hex)		Silverbrook Research
+78F7D0     (base 16)		Silverbrook Research
+				3 Montague Street
+				Balmain  New South Wales  2041
+				AU
+
+20-76-00   (hex)		Actiontec Electronics, Inc
+207600     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+F0-13-C3   (hex)		SHENZHEN FENDA TECHNOLOGY CO., LTD
+F013C3     (base 16)		SHENZHEN FENDA TECHNOLOGY CO., LTD
+				Fenda Hi-Tech Park, Zhoushi Road, Shiyan, Baoan
+				ShenZhen  GuangDong  518108
+				CN
+
+04-A8-2A   (hex)		Nokia Corporation
+04A82A     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+E4-4E-18   (hex)		Gardasoft VisionLimited
+E44E18     (base 16)		Gardasoft VisionLimited
+				Units 1 and 2, Castle Acres
+				Cambridge    CB23 4JQ
+				GB
+
+20-46-A1   (hex)		VECOW Co., Ltd
+2046A1     (base 16)		VECOW Co., Ltd
+				7F., No.105, Zhongcheng Rd., Tucheng Dist.,
+				New Taipei City     23674
+				TW
+
+FC-01-CD   (hex)		FUNDACION TEKNIKER
+FC01CD     (base 16)		FUNDACION TEKNIKER
+				Avenida Otaola, 20
+				Eibar  Gipuzkoa  20600
+				ES
+
+9C-8B-F1   (hex)		The Warehouse Limited
+9C8BF1     (base 16)		The Warehouse Limited
+				Suite 601, City Point, 1600 Zhonghua Road, Huangpu District
+				Shanghai    200010
+				CN
+
+DC-2E-6A   (hex)		HCT. Co., Ltd.
+DC2E6A     (base 16)		HCT. Co., Ltd.
+				105-1, Jangam-ri, Majang-myen
+				Icheon-si  Gyeonggi-do  467-811
+				KR
+
+14-8A-70   (hex)		ADS GmbH
+148A70     (base 16)		ADS GmbH
+				Im Rohnweiher 39
+				Lohmar  Germany  D-53797
+				DE
+
+00-B3-38   (hex)		Kontron Asia Pacific Design Sdn. Bhd
+00B338     (base 16)		Kontron Asia Pacific Design Sdn. Bhd
+				Plot 554, Lorong Perusahaan 4
+				Prai Free Trade Zone  Prai, Penang  13600
+				MY
+
+84-24-8D   (hex)		Zebra Technologies Inc
+84248D     (base 16)		Zebra Technologies Inc
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+FC-E8-92   (hex)		Hangzhou Lancable Technology Co.,Ltd
+FCE892     (base 16)		Hangzhou Lancable Technology Co.,Ltd
+				Zone A,Floor 16,Zhongcai Building,68#,Tonghe Road,Binjiang District,
+				Hangzhou  Zhejiang  310051
+				CN
+
+10-71-F9   (hex)		Cloud Telecomputers, LLC
+1071F9     (base 16)		Cloud Telecomputers, LLC
+				1032 Elwell Court
+				Palo Alto  CA  94303
+				US
+
+B8-62-1F   (hex)		Cisco Systems, Inc
+B8621F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F0-02-2B   (hex)		Chrontel
+F0022B     (base 16)		Chrontel
+				2210 OToole Ave., Suite 100
+				San Jose  CA  95131
+				US
+
+D4-53-AF   (hex)		VIGO System S.A.
+D453AF     (base 16)		VIGO System S.A.
+				129/133 Poznanska str
+				Ozarow Mazowiecki  Mazowieckie  05-850
+				PL
+
+18-AD-4D   (hex)		Polostar Technology Corporation
+18AD4D     (base 16)		Polostar Technology Corporation
+				2F, No.351, Yangguang St.
+				Taipei    11491
+				TW
+
+94-C6-EB   (hex)		NOVA electronics, Inc.
+94C6EB     (base 16)		NOVA electronics, Inc.
+				Grand Axe Bldg. 3F.
+				Shibuya-ku  Tokyo  151-0064
+				JP
+
+84-3F-4E   (hex)		Tri-Tech Manufacturing, Inc.
+843F4E     (base 16)		Tri-Tech Manufacturing, Inc.
+				333 Turbine Drive
+				Rapid City  SD  57703
+				US
+
+C8-32-32   (hex)		Hunting Innova
+C83232     (base 16)		Hunting Innova
+				8383 N Sam Houston Pkwy West
+				Houston  Texas  77064
+				US
+
+54-94-78   (hex)		Silvershore Technology Partners
+549478     (base 16)		Silvershore Technology Partners
+				800 High Street
+				Palo Alto  CA  94301
+				US
+
+A0-6E-50   (hex)		Nanotek Elektronik Sistemler Ltd. Sti.
+A06E50     (base 16)		Nanotek Elektronik Sistemler Ltd. Sti.
+				Ivedik Organize Sanayi
+				Ankara    06370
+				TR
+
+4C-77-4F   (hex)		Embedded Wireless Labs 
+4C774F     (base 16)		Embedded Wireless Labs 
+				702 Level 7 Uptown 2 No.2 
+				Petaling Jaya  Selangor  47400
+				MY
+
+D0-C2-82   (hex)		Cisco Systems, Inc
+D0C282     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+14-7D-B3   (hex)		JOA TELECOM.CO.,LTD
+147DB3     (base 16)		JOA TELECOM.CO.,LTD
+				1007,Sicox tower,513-14,Sangdaewon-dong,Jungwon-gu
+				Seongnam-si  Gyeonggi-do  462-806
+				KR
+
+EC-BD-09   (hex)		FUSION Electronics Ltd
+ECBD09     (base 16)		FUSION Electronics Ltd
+				PO Box 137 - 142
+				Auckland    1151
+				NZ
+
+94-46-96   (hex)		BaudTec Corporation
+944696     (base 16)		BaudTec Corporation
+				12F, No.181, Sec.1.Tatung Rd.
+				Hsi-chih  Taipei  221
+				TW
+
+54-84-7B   (hex)		Digital Devices GmbH
+54847B     (base 16)		Digital Devices GmbH
+				Moewestr 45 A
+				Muenchen    81827
+				DE
+
+3C-27-63   (hex)		SLE quality engineering GmbH & Co. KG
+3C2763     (base 16)		SLE quality engineering GmbH & Co. KG
+				Josef-Buchinger-Str. 9
+				Grafenau  Bavaria  94481
+				DE
+
+B0-F1-BC   (hex)		Dhemax Ingenieros Ltda
+B0F1BC     (base 16)		Dhemax Ingenieros Ltda
+				Siete Oriente 1234
+				Vina del Mar  Region de Valparaiso  2530954
+				CL
+
+B8-28-8B   (hex)		Parker Hannifin Manufacturing (UK) Ltd
+B8288B     (base 16)		Parker Hannifin Manufacturing (UK) Ltd
+				Condition Monitoring Centre
+				Thetford  Norfolk  IP24 1HP
+				GB
+
+90-D1-1B   (hex)		Palomar Medical Technologies
+90D11B     (base 16)		Palomar Medical Technologies
+				15 Network Drive
+				Burlington  MA  01803
+				US
+
+34-A5-5D   (hex)		TECHNOSOFT INTERNATIONAL SRL
+34A55D     (base 16)		TECHNOSOFT INTERNATIONAL SRL
+				RO6640904
+				  Bucuresti - Sector 6  061992
+				RO
+
+80-2E-14   (hex)		azeti Networks AG
+802E14     (base 16)		azeti Networks AG
+				Am Brambusch 1a
+				Luenen  NRW  44536
+				DE
+
+D4-C1-FC   (hex)		Nokia Corporation
+D4C1FC     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+34-BC-A6   (hex)		Beijing Ding Qing Technology, Ltd.
+34BCA6     (base 16)		Beijing Ding Qing Technology, Ltd.
+				218 Han Tai Hua Office Building, 13 Huan Yuan Lu,
+				Haidian District  Beijing  100083
+				CN
+
+58-35-D9   (hex)		Cisco Systems, Inc
+5835D9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-D9-12   (hex)		Solidica, Inc.
+64D912     (base 16)		Solidica, Inc.
+				5840 Interface Drive
+				Ann Arbor  Michigan  48103
+				US
+
+C4-7B-2F   (hex)		Beijing JoinHope Image Technology Ltd.
+C47B2F     (base 16)		Beijing JoinHope Image Technology Ltd.
+				624 Room .Automation Building.95# Zhong Guancun East Road.Haidian District
+				Beijing    100190
+				CN
+
+50-8A-CB   (hex)		SHENZHEN MAXMADE TECHNOLOGY CO., LTD.
+508ACB     (base 16)		SHENZHEN MAXMADE TECHNOLOGY CO., LTD.
+				Building 3,No.5 Fuqiao Industrial Estate,
+				Shenzhen  Guangdong  518103
+				CN
+
+3C-D1-6E   (hex)		Telepower Communication Co., Ltd
+3CD16E     (base 16)		Telepower Communication Co., Ltd
+				5/F,Zonghe Building, Hantian Technology Town,Guiping RD,Nanhai District,F
+				Foshan City  Guangdong  528251
+				CN
+
+FC-2E-2D   (hex)		Lorom Industrial Co.LTD.
+FC2E2D     (base 16)		Lorom Industrial Co.LTD.
+				F1.13,Rm.2,No.78,Sec.2,An-HoRd.
+				Taipei    106
+				TW
+
+40-04-0C   (hex)		A&T
+40040C     (base 16)		A&T
+				#411, Will Town, 402-3
+				Bucheon-Si  Gyeonggi-Do  420-814
+				KR
+
+DC-3C-84   (hex)		Ticom Geomatics, Inc.
+DC3C84     (base 16)		Ticom Geomatics, Inc.
+				9130 Jollyville Rd. Ste. 300
+				Austin  Texas  78759
+				US
+
+D0-13-1E   (hex)		Sunrex Technology Corp
+D0131E     (base 16)		Sunrex Technology Corp
+				No. 188-1,Chung Cheng Road.,Ta Ya Shiang
+				Taichung    428
+				TW
+
+70-3A-D8   (hex)		Shenzhen Afoundry Electronic Co., Ltd
+703AD8     (base 16)		Shenzhen Afoundry Electronic Co., Ltd
+				201, A Building, Bole Industrial Zone, Bantian, Longgang District
+				Shenzhen   Guangdong  518129
+				CN
+
+70-4A-AE   (hex)		Xstream Flow (Pty) Ltd
+704AAE     (base 16)		Xstream Flow (Pty) Ltd
+				Room 123, Building 16, CSIR campus
+				Pretoria  Gauteng  0184
+				ZA
+
+40-B3-FC   (hex)		Logital Co. Limited 
+40B3FC     (base 16)		Logital Co. Limited 
+				Rm 901-902, 9/F, Nathan Centre, 
+				Kowloon    
+				HK
+
+A4-13-4E   (hex)		Luxul 
+A4134E     (base 16)		Luxul 
+				14203 Minuteman Drive
+				Draper  UT  84020
+				US
+
+B0-99-28   (hex)		FUJITSU LIMITED
+B09928     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+04-E1-C8   (hex)		IMS Soluções em Energia Ltda.
+04E1C8     (base 16)		IMS Soluções em Energia Ltda.
+				Av. Bernardino Silveira Pastoriza, 720
+				Porto Alegre  RS  91160-310
+				BR
+
+94-8F-EE   (hex)		Verizon Telematics
+948FEE     (base 16)		Verizon Telematics
+				2002 Summit Blvd
+				Atlanta  GA  30319
+				US
+
+50-D6-D7   (hex)		Takahata Precision
+50D6D7     (base 16)		Takahata Precision
+				4-17-1 Suniyoshi
+				Kofu    400-0851
+				JP
+
+88-F0-77   (hex)		Cisco Systems, Inc
+88F077     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-75-21   (hex)		CJSC RTSoft
+587521     (base 16)		CJSC RTSoft
+				Nikitinskaya str., 3
+				Moscow    105037
+				RU
+
+C4-0F-09   (hex)		Hermes electronic GmbH
+C40F09     (base 16)		Hermes electronic GmbH
+				Am Handwerkerpark 1
+				Essen  NRW  45309
+				DE
+
+48-F4-7D   (hex)		TechVision Holding  Internation Limited
+48F47D     (base 16)		TechVision Holding  Internation Limited
+				Offshore Incorporations Centre
+				Road Town  Tortola  VG1110
+				VG
+
+F0-81-AF   (hex)		IRZ AUTOMATION TECHNOLOGIES LTD
+F081AF     (base 16)		IRZ AUTOMATION TECHNOLOGIES LTD
+				Unit 9-10 27/F Seapower Tower
+				  Kowloon  
+				HK
+
+70-14-04   (hex)		Limited Liability Company
+701404     (base 16)		Limited Liability Company
+				I.Yakovleva St., 1
+				Cheboksary Chuvash Republic    428003
+				RU
+
+B4-35-F7   (hex)		Zhejiang Pearmain Electronics Co.ltd.
+B435F7     (base 16)		Zhejiang Pearmain Electronics Co.ltd.
+				4F Yitai Mansion, 76 Gucui Road,
+				Hangzhou  Zhejiang  310012
+				CN
+
+98-66-EA   (hex)		Industrial Control Communications, Inc.
+9866EA     (base 16)		Industrial Control Communications, Inc.
+				1600 Aspen Commons
+				Middleton  WI  53562
+				US
+
+98-30-00   (hex)		Beijing KEMACOM Technologies Co., Ltd.
+983000     (base 16)		Beijing KEMACOM Technologies Co., Ltd.
+				Room 208, Building 6, No.50, Xi San Huan Bei Road 
+				Beijing    100044
+				CN
+
+90-CF-15   (hex)		Nokia Corporation
+90CF15     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+94-8B-03   (hex)		EAGET Innovation and Technology Co., Ltd.
+948B03     (base 16)		EAGET Innovation and Technology Co., Ltd.
+				3/F, Building 4, Lianchuang Technology Park,Buji Town,
+				Shenzhen  Guangdong  518112
+				CN
+
+2C-00-33   (hex)		EControls, LLC
+2C0033     (base 16)		EControls, LLC
+				5757 Farinon Dr
+				San Antonio  TX  78249
+				US
+
+AC-19-9F   (hex)		SUNGROW POWER SUPPLY CO.,LTD.
+AC199F     (base 16)		SUNGROW POWER SUPPLY CO.,LTD.
+				NO.2 Tianhu Road, New and High Technology Industrial Development Zone
+				Hefei  Anhui  230088
+				CN
+
+7C-4A-82   (hex)		Portsmith LLC
+7C4A82     (base 16)		Portsmith LLC
+				850 E. Franklin Road
+				Meridian  ID  83642
+				US
+
+94-E8-48   (hex)		FYLDE MICRO LTD
+94E848     (base 16)		FYLDE MICRO LTD
+				8 AVROE CRESCENT
+				BLACKPOOL  LANCASHIRE  FY4 2DP
+				GB
+
+AC-5E-8C   (hex)		Utillink
+AC5E8C     (base 16)		Utillink
+				817 Woolim Lions Valley 1, 311-3 Sangdaewon-dong Jungwon-gu
+				Seongnam-si  Gyeonggi-do  462160
+				KR
+
+18-E2-88   (hex)		STT Condigi
+18E288     (base 16)		STT Condigi
+				Agnesfridsvagen 113 A
+				Malmö  Skåne  21237
+				SE
+
+1C-35-F1   (hex)		NEW Lift Neue Elektronische Wege Steuerungsbau GmbH
+1C35F1     (base 16)		NEW Lift Neue Elektronische Wege Steuerungsbau GmbH
+				Lochhamer Schlag 8
+				Graefelfing  Bavaria  82166
+				DE
+
+80-34-57   (hex)		OT Systems Limited
+803457     (base 16)		OT Systems Limited
+				Unit 1023, 10/F., Landmark North,
+				Sheung Shui, N. T.    
+				HK
+
+5C-0C-BB   (hex)		CELIZION Inc.
+5C0CBB     (base 16)		CELIZION Inc.
+				#206 Lordland EZ Tower, GuMi-Dong 153 BunDang-Gu
+				SeongNam-Si   GyeongGi-Do  463-870
+				KR
+
+C4-24-2E   (hex)		Galvanic Applied Sciences Inc
+C4242E     (base 16)		Galvanic Applied Sciences Inc
+				7000 Fisher Road SE
+				Calgary  Alberta  T2H 0W3
+				CA
+
+24-C8-6E   (hex)		Chaney Instrument Co.
+24C86E     (base 16)		Chaney Instrument Co.
+				965 Wells Street
+				Lake Geneva  WI  53147
+				US
+
+F0-AE-51   (hex)		Xi3 Corp
+F0AE51     (base 16)		Xi3 Corp
+				299 S. Main St.
+				Salt Lake City  UT  84111
+				US
+
+B8-0B-9D   (hex)		ROPEX Industrie-Elektronik GmbH
+B80B9D     (base 16)		ROPEX Industrie-Elektronik GmbH
+				Adolf-Heim-Str. 4
+				Bietigheim-Bissingen  Baden Wuerttemberg  74321
+				DE
+
+30-61-18   (hex)		Paradom Inc.
+306118     (base 16)		Paradom Inc.
+				8F, N0. 178, Sec-2, Gongdaowu Rd.
+				Hsinchu City    300
+				TW
+
+4C-73-67   (hex)		Genius Bytes Software Solutions GmbH
+4C7367     (base 16)		Genius Bytes Software Solutions GmbH
+				Merianstraße 30
+				Bochum  NRW  44801
+				DE
+
+90-EA-60   (hex)		SPI Lasers Ltd 
+90EA60     (base 16)		SPI Lasers Ltd 
+				6 wellington Park
+				Southampton  Hampshire  S0302QU
+				GB
+
+50-70-E5   (hex)		He Shan World Fair Electronics Technology Limited
+5070E5     (base 16)		He Shan World Fair Electronics Technology Limited
+				New Material Base, Gonghe Town
+				Jiangmen  Guangdong  529728
+				CN
+
+80-22-75   (hex)		Beijing Beny Wave Technology Co Ltd
+802275     (base 16)		Beijing Beny Wave Technology Co Ltd
+				No.55, Jiachuang Road
+				Tongzhou District  Beijing  101111
+				CN
+
+CC-F3-A5   (hex)		Chi Mei Communication Systems, Inc
+CCF3A5     (base 16)		Chi Mei Communication Systems, Inc
+				No.4
+				Tucheng City  Taipei County   23678
+				TW
+
+14-A9-E3   (hex)		MST CORPORATION
+14A9E3     (base 16)		MST CORPORATION
+				4th Floor Lawford House
+				London  England  N3 1 RL
+				GB
+
+F8-EA-0A   (hex)		Dipl.-Math. Michael Rauch
+F8EA0A     (base 16)		Dipl.-Math. Michael Rauch
+				Kapellenstraße 31
+				Bretten  BaWü  75015
+				DE
+
+38-31-AC   (hex)		WEG
+3831AC     (base 16)		WEG
+				Av. Pref. Waldemar Grubba, 3000
+				Jaraguá do Sul  Santa Catarina  89256-900
+				BR
+
+58-4C-19   (hex)		Chongqing Guohong Technology Development Company Limited
+584C19     (base 16)		Chongqing Guohong Technology Development Company Limited
+				Rongzhi Building, Science & Technology Venture Center,
+				Chongqing    401336
+				CN
+
+64-69-BC   (hex)		Hytera Communications Co .,ltd
+6469BC     (base 16)		Hytera Communications Co .,ltd
+				HYT Tower ,Hi-Tech Industrial Park North,Nanshan District,
+				Shenzhen  Guangdong  518057
+				CN
+
+B4-F3-23   (hex)		PETATEL INC.
+B4F323     (base 16)		PETATEL INC.
+				#322 THE O VILLE 720-25, YEOKSAM-DONG
+				GANGNAM-GU  SEOUL  135080
+				KR
+
+28-51-32   (hex)		Shenzhen Prayfly Technology Co.,Ltd
+285132     (base 16)		Shenzhen Prayfly Technology Co.,Ltd
+				16F B International Chamber of Commerce Building
+				Shenzhen  Guangdong Province   518048
+				CN
+
+E4-2F-F6   (hex)		Unicore communication Inc.
+E42FF6     (base 16)		Unicore communication Inc.
+				Rm.312 Building 2 IRICO, No.11St.4,Shangdi, Haidian District,
+				Beijing    100085
+				CN
+
+84-D9-C8   (hex)		Unipattern Co.,
+84D9C8     (base 16)		Unipattern Co.,
+				16F., No.30., Beiping E. Rd., Zhongzheng Dist.,
+				Taipei    100
+				TW
+
+94-AA-B8   (hex)		Joview(Beijing) Technology Co. Ltd.
+94AAB8     (base 16)		Joview(Beijing) Technology Co. Ltd.
+				Room 302, South Building
+				Beijing    100081
+				CN
+
+28-F3-58   (hex)		2C - Trifonov & Co
+28F358     (base 16)		2C - Trifonov & Co
+				133, Tsarigradsko Shose Blvd, BIZ IZOT, 
+				Sofia    1784
+				BG
+
+14-C2-1D   (hex)		Sabtech Industries
+14C21D     (base 16)		Sabtech Industries
+				23231 La Palma Ave
+				Yorba Linda  Ca.  92887-4788
+				US
+
+C8-84-39   (hex)		Sunrise Technologies
+C88439     (base 16)		Sunrise Technologies
+				54 Commercial Street
+				Raynham  MA  02767
+				US
+
+F0-BF-97   (hex)		Sony Corporation
+F0BF97     (base 16)		Sony Corporation
+				Gotenyama Tec 5-1-2
+				Tokyo  Shinagawa-ku  141-0001
+				JP
+
+C4-4A-D0   (hex)		FIREFLIES SYSTEMS
+C44AD0     (base 16)		FIREFLIES SYSTEMS
+				3 CHEMIN DU PRE CARRE
+				MEYLAN    38240
+				FR
+
+EC-7D-9D   (hex)		CPI
+EC7D9D     (base 16)		CPI
+				3222 Phoenixville Pike Suite 200
+				Malvern  PA  19355
+				US
+
+C8-1E-8E   (hex)		ADV Security (S) Pte Ltd
+C81E8E     (base 16)		ADV Security (S) Pte Ltd
+				56 Dunlop Street
+				    209386
+				SG
+
+A8-87-92   (hex)		Broadband Antenna Tracking Systems
+A88792     (base 16)		Broadband Antenna Tracking Systems
+				8902 Vincennes Circle, Suite D-2
+				Indianapolis  IN  46268
+				US
+
+14-F0-C5   (hex)		Xtremio Ltd.
+14F0C5     (base 16)		Xtremio Ltd.
+				POB 5246
+				Herzelyia    46152
+				IL
+
+E8-C2-29   (hex)		H-Displays (MSC) Bhd
+E8C229     (base 16)		H-Displays (MSC) Bhd
+				No. 31 & 32, Jalan Gangsa Dua
+				Johor Bahru    81700
+				MY
+
+3C-A7-2B   (hex)		MRV Communications (Networks) LTD
+3CA72B     (base 16)		MRV Communications (Networks) LTD
+				P.O Box 614
+				Yokneam     20692
+				IL
+
+04-E6-62   (hex)		Acroname Inc.
+04E662     (base 16)		Acroname Inc.
+				4822 Sterling Drive
+				Boulder  CO  80301-2350
+				US
+
+F8-7B-8C   (hex)		Amped Wireless
+F87B8C     (base 16)		Amped Wireless
+				13089 Peyton Dr. #C307
+				Chino Hills  CA  91709
+				US
+
+28-34-10   (hex)		Enigma Diagnostics Limited
+283410     (base 16)		Enigma Diagnostics Limited
+				Building 224
+				DSTL Porton Down  Salisbury  SP4 0JQ
+				GB
+
+0C-E8-2F   (hex)		Bonfiglioli Vectron GmbH
+0CE82F     (base 16)		Bonfiglioli Vectron GmbH
+				Europark Fichtenhain B6
+				Krefeld  NRW  47807
+				DE
+
+40-F4-EC   (hex)		Cisco Systems, Inc
+40F4EC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+14-B7-3D   (hex)		ARCHEAN Technologies
+14B73D     (base 16)		ARCHEAN Technologies
+				1899 avenue d'Italie
+				MONTAUBAN    82000
+				FR
+
+94-8D-50   (hex)		Beamex Oy Ab
+948D50     (base 16)		Beamex Oy Ab
+				Ristisuonraitti 10
+				Pietarsaari    FI-68600
+				FI
+
+A4-33-D1   (hex)		Fibrlink Communications Co.,Ltd.
+A433D1     (base 16)		Fibrlink Communications Co.,Ltd.
+				28F Ages Wealth World, No.1 Hangfeng Road
+				Beijing    100070
+				CN
+
+5C-BD-9E   (hex)		HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED
+5CBD9E     (base 16)		HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED
+				FLAT RM 2103,  EASEY COMMERCIAL BLDG,253-261 HENNESSY RD,  
+				  WANCHAI  999077
+				HK
+
+08-E6-72   (hex)		JEBSEE ELECTRONICS CO.,LTD.
+08E672     (base 16)		JEBSEE ELECTRONICS CO.,LTD.
+				24-3, SIN LE ROAD, 
+				TAINAN    70268
+				TW
+
+B8-E5-89   (hex)		Payter BV
+B8E589     (base 16)		Payter BV
+				Rozenlaan 115
+				Rotterdam  Zuid-Holland  3051 LP
+				NL
+
+88-E0-A0   (hex)		Shenzhen VisionSTOR Technologies Co., Ltd
+88E0A0     (base 16)		Shenzhen VisionSTOR Technologies Co., Ltd
+				12/F, East Tower,Nanshan Software Park
+				Shenzhen  Guangdong  518000
+				CN
+
+FC-10-BD   (hex)		Control Sistematizado S.A.
+FC10BD     (base 16)		Control Sistematizado S.A.
+				Cra 43 N 31 52
+				Medellin  Antioquia  10101
+				CO
+
+F0-C2-7C   (hex)		Mianyang Netop Telecom Equipment Co.,Ltd.
+F0C27C     (base 16)		Mianyang Netop Telecom Equipment Co.,Ltd.
+				No.111,East section of Puming South Road,
+				Mianyang City  Sichuan Province,   621000
+				CN
+
+24-1A-8C   (hex)		Squarehead Technology AS
+241A8C     (base 16)		Squarehead Technology AS
+				PO Box 13 Nydalen
+				Oslo    NO-0410
+				NO
+
+D4-4F-80   (hex)		Kemper Digital GmbH
+D44F80     (base 16)		Kemper Digital GmbH
+				Koenigswall 16-18
+				Recklinghausen  North-Rhine-Westphalia  45657
+				DE
+
+A4-1B-C0   (hex)		Fastec Imaging Corporation
+A41BC0     (base 16)		Fastec Imaging Corporation
+				17150 Via Del Campo
+				San Diego  California  92127
+				US
+
+20-5B-2A   (hex)		Private
+205B2A     (base 16)		Private
+
+F4-03-21   (hex)		BeNeXt B.V.
+F40321     (base 16)		BeNeXt B.V.
+				Ter Gouwstraat 3
+				Amsterdam  NH  1093JX
+				NL
+
+A0-71-A9   (hex)		Nokia Corporation
+A071A9     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+A4-E3-2E   (hex)		Silicon & Software Systems Ltd.
+A4E32E     (base 16)		Silicon & Software Systems Ltd.
+				South County Business Park
+				Leopardstown  Dublin  18
+				IE
+
+C8-C1-26   (hex)		ZPM Industria e Comercio Ltda
+C8C126     (base 16)		ZPM Industria e Comercio Ltda
+				Rua Araguaia, 175
+				Canoas  RS  92410-000
+				BR
+
+64-DE-1C   (hex)		Kingnetic Pte Ltd
+64DE1C     (base 16)		Kingnetic Pte Ltd
+				47 Kaki Bukit Place
+				    416225
+				SG
+
+A8-62-A2   (hex)		JIWUMEDIA CO., LTD.
+A862A2     (base 16)		JIWUMEDIA CO., LTD.
+				#902, Daerug Techno Town 13'th, 664
+				Geumcheon-gu  Seoul  153-803
+				KR
+
+98-4E-97   (hex)		Starlight Marketing (H. K.) Ltd.
+984E97     (base 16)		Starlight Marketing (H. K.) Ltd.
+				5/F., Shing Dao Industrial Building, 
+				    
+				HK
+
+64-DC-01   (hex)		Static Systems Group PLC
+64DC01     (base 16)		Static Systems Group PLC
+				Heathmill Road
+				Wolverhampton  West Midlands  WV5 8AN
+				GB
+
+FC-1F-C0   (hex)		EURECAM
+FC1FC0     (base 16)		EURECAM
+				BAT 9 - Miniparc
+				LES ULIS    91940
+				FR
+
+BC-67-84   (hex)		Environics Oy
+BC6784     (base 16)		Environics Oy
+				Graanintie 5
+				Mikkeli    50190
+				FI
+
+68-DC-E8   (hex)		PacketStorm Communications
+68DCE8     (base 16)		PacketStorm Communications
+				20 Meridian Rd
+				Eatontown  NJ  07724
+				US
+
+48-8E-42   (hex)		DIGALOG GmbH
+488E42     (base 16)		DIGALOG GmbH
+				Wattstraße 11-13
+				Berlin    D-13355
+				DE
+
+60-76-88   (hex)		Velodyne
+607688     (base 16)		Velodyne
+				345 Digital Drive
+				Morgan Hill  CA  95037
+				US
+
+78-CD-8E   (hex)		SMC Networks Inc
+78CD8E     (base 16)		SMC Networks Inc
+				20 Mason
+				Irvine  CA  92618
+				US
+
+2C-80-65   (hex)		HARTING Inc. of North America
+2C8065     (base 16)		HARTING Inc. of North America
+				1370 Bowes Road
+				Elgin  Illinois  60123
+				US
+
+3C-C0-C6   (hex)		d&b audiotechnik GmbH
+3CC0C6     (base 16)		d&b audiotechnik GmbH
+				Eugen Adolff Str 134
+				Backnang  Baden Wuerttemberg  71522
+				DE
+
+44-68-AB   (hex)		JUIN COMPANY, LIMITED
+4468AB     (base 16)		JUIN COMPANY, LIMITED
+				2FL, 1075-1, Wonpyeong-Dong
+				Gumi City  Gyeongsangbuk-Do  730-010
+				KR
+
+F8-10-37   (hex)		Atopia Systems, LP
+F81037     (base 16)		Atopia Systems, LP
+				681 N. Plano Road
+				Richardson  TX  75082
+				US
+
+78-A6-83   (hex)		Precidata
+78A683     (base 16)		Precidata
+				CP 672
+				2002  NE  2002
+				CH
+
+F0-25-72   (hex)		Cisco Systems, Inc
+F02572     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+04-FF-51   (hex)		NOVAMEDIA INNOVISION SP. Z O.O.
+04FF51     (base 16)		NOVAMEDIA INNOVISION SP. Z O.O.
+				WODNA 7 
+				KALISZ  WIELKOPOLSKA  62-800
+				PL
+
+4C-B4-EA   (hex)		HRD (S) PTE., LTD.
+4CB4EA     (base 16)		HRD (S) PTE., LTD.
+				Lot 7, Block 9, Phase 1, Cavite Eco-Zone,
+				Rosario  Cavite  4106
+				PH
+
+D4-4C-24   (hex)		Vuppalamritha Magnetic Components LTD
+D44C24     (base 16)		Vuppalamritha Magnetic Components LTD
+				3rd Floor, 307 ,My Home Ashoka Chambers,S.P Road, 
+				Secunderabad  AndhraPradesh  500003
+				IN
+
+F8-C6-78   (hex)		Carefusion
+F8C678     (base 16)		Carefusion
+				10020 Pacific Mesa Blvd
+				San Diego  CA  92121
+				US
+
+6C-AB-4D   (hex)		Digital Payment Technologies
+6CAB4D     (base 16)		Digital Payment Technologies
+				4105 Grandview Hwy
+				Burnaby  BC  V5C 6B4
+				CA
+
+2C-B0-DF   (hex)		Soliton Technologies Pvt Ltd
+2CB0DF     (base 16)		Soliton Technologies Pvt Ltd
+				# 683, 15th Cross 
+				Bangalore  Karnataka  560 078
+				IN
+
+EC-E5-55   (hex)		Hirschmann Automation
+ECE555     (base 16)		Hirschmann Automation
+				Stuttgarter Straße 45-51
+				Neckartenzlingen  Baden-Württemberg  72654
+				DE
+
+58-F9-8E   (hex)		SECUDOS GmbH
+58F98E     (base 16)		SECUDOS GmbH
+				Rhenus-Platz 2
+				Holzwickede  NRW  59439
+				DE
+
+B4-C4-4E   (hex)		VXL eTech Pvt Ltd
+B4C44E     (base 16)		VXL eTech Pvt Ltd
+				#91, 11th Main, Begur Main Road
+				Bangalore  Karnataka  560068
+				IN
+
+70-7E-DE   (hex)		NASTEC LTD.
+707EDE     (base 16)		NASTEC LTD.
+				111-D, Krasnorechenskaya str.
+				Khabarovsk    680006
+				RU
+
+C0-7E-40   (hex)		SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD
+C07E40     (base 16)		SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD
+				XDK BUILDING,NO.1 INDUSTRIAL AREA,BANTIAN,LONGGANG DISTRICT
+				SHENZHEN  GUANGDONG  518129
+				CN
+
+E4-4F-29   (hex)		MA Lighting Technology GmbH
+E44F29     (base 16)		MA Lighting Technology GmbH
+				Dachdeckerstraße16
+				Waldbüttelbrunn  Bavaria  97297
+				DE
+
+B4-74-9F   (hex)		ASKEY COMPUTER CORP
+B4749F     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+7C-4A-A8   (hex)		MindTree Wireless PVT Ltd
+7C4AA8     (base 16)		MindTree Wireless PVT Ltd
+				LGF, Phase III, Mindtree West Campus, 
+				Bangalore  Karnataka  560 059
+				IN
+
+80-91-C0   (hex)		AgileMesh, Inc.
+8091C0     (base 16)		AgileMesh, Inc.
+				1671 International Pkwy
+				Richardson  TX  75081
+				US
+
+E0-5F-B9   (hex)		Cisco Systems, Inc
+E05FB9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-14-3E   (hex)		Modoosis Inc.
+E0143E     (base 16)		Modoosis Inc.
+				#302, Samil Bldg., 656-282
+				Seoul    133-110
+				KR
+
+90-D8-52   (hex)		Comtec Co., Ltd.
+90D852     (base 16)		Comtec Co., Ltd.
+				 3F., No.81, Jiankang Rd.,
+				Zhonghe City  Taipei County  23586
+				TW
+
+38-01-97   (hex)		TSST Global,Inc
+380197     (base 16)		TSST Global,Inc
+				14 Floor, Bldg. No. 102, Digital Empire2, 486, Sin-dong, Yeongtong-gu, Suwon-si,
+				Su-won  Gyeonggi  443-734
+				KR
+
+AC-02-CF   (hex)		RW Tecnologia Industria e Comercio Ltda
+AC02CF     (base 16)		RW Tecnologia Industria e Comercio Ltda
+				Centro Empresarial Paulo Frederico de Toledo, 80 A
+				Santa Rita do Sapucai  Minas Gerais   37540000
+				BR
+
+D4-12-96   (hex)		Anobit Technologies Ltd.
+D41296     (base 16)		Anobit Technologies Ltd.
+				8 Hasadnaot St.
+				Herzeliya Pituach     46728
+				IL
+
+48-17-4C   (hex)		MicroPower technologies
+48174C     (base 16)		MicroPower technologies
+				4225 Executive Sq.
+				La Jolla  California  92037
+				US
+
+34-9A-0D   (hex)		ZBD Displays Ltd
+349A0D     (base 16)		ZBD Displays Ltd
+				Orchard Lea
+				Windsor  Berkshire  SL4 4RU
+				GB
+
+90-50-7B   (hex)		Advanced PANMOBIL Systems GmbH & Co. KG
+90507B     (base 16)		Advanced PANMOBIL Systems GmbH & Co. KG
+				Hansestraße 91
+				Cologne  NRW  51149
+				DE
+
+08-76-FF   (hex)		Thomson Telecom Belgium
+0876FF     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				Edegem  Antwerp  B-2650
+				BE
+
+1C-7C-11   (hex)		EID 
+1C7C11     (base 16)		EID 
+				Rua Quinta dos Medronheiros 
+				Charneca da Caparica     2820-486
+				PT
+
+20-AA-25   (hex)		IP-NET LLC
+20AA25     (base 16)		IP-NET LLC
+				10256 N.W. 47th St.
+				Sunrise  FL  33351
+				US
+
+C4-EE-F5   (hex)		II-VI Incorporated
+C4EEF5     (base 16)		II-VI Incorporated
+				Network Solutions,343 Daniel Zenker Dr., Suite 102
+				Horseheads  NY  14845
+				US
+
+E0-CF-2D   (hex)		Gemintek Corporation
+E0CF2D     (base 16)		Gemintek Corporation
+				5F-1, No.8, Alley 30, Lane 358, Rueiguang Rd.
+				Taipei    114
+				TW
+
+D4-91-AF   (hex)		Electroacustica General Iberica, S.A.
+D491AF     (base 16)		Electroacustica General Iberica, S.A.
+				Avda. Almozara, 79
+				Zaragoza    50003
+				ES
+
+C4-B5-12   (hex)		General Electric Digital Energy
+C4B512     (base 16)		General Electric Digital Energy
+				4200 Wildwood Pkwy
+				Atlanta  GA  30339
+				US
+
+00-34-F1   (hex)		Radicom Research, Inc.
+0034F1     (base 16)		Radicom Research, Inc.
+				2148 Bering Drive
+				San Jose  Ca  95131
+				US
+
+94-33-DD   (hex)		Taco Inc
+9433DD     (base 16)		Taco Inc
+				1160 Cranston Street
+				Cranston  RI  02920
+				US
+
+E0-25-38   (hex)		Titan Pet Products
+E02538     (base 16)		Titan Pet Products
+				6521 Creedmoor Rd. Suite 101
+				Raleigh  NC  27613
+				US
+
+CC-7A-30   (hex)		CMAX Wireless Co., Ltd.
+CC7A30     (base 16)		CMAX Wireless Co., Ltd.
+				KT Bongduk B/D 9F, 627-15, Bongduk-dong
+				Namgu  Daegu  705710
+				KR
+
+B8-8E-3A   (hex)		Infinite Technologies JLT
+B88E3A     (base 16)		Infinite Technologies JLT
+				Office 3203, Level 32
+				Jumeirah Lake Towers  Dubai  
+				AE
+
+58-8D-09   (hex)		Cisco Systems, Inc
+588D09     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C0-C1-C0   (hex)		Cisco-Linksys, LLC
+C0C1C0     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+60-15-C7   (hex)		IdaTech
+6015C7     (base 16)		IdaTech
+				63065 NE 18th St.
+				Bend  OR  97701
+				US
+
+DC-20-08   (hex)		ASD Electronics Ltd 
+DC2008     (base 16)		ASD Electronics Ltd 
+				DEDE INDUSTRIAL PARK,JIAN'AN ROAD,HIGH-TECH
+				Shenzhen   Guang Dong  518103
+				CN
+
+1C-83-B0   (hex)		Linked IP GmbH
+1C83B0     (base 16)		Linked IP GmbH
+				Kirchenstrasse 9
+				Anif / Niederalm  SBG  5081
+				AT
+
+A4-D1-D1   (hex)		ECOtality North America
+A4D1D1     (base 16)		ECOtality North America
+				430 S 2nd Avenue
+				Phoenix  AZ  85003
+				US
+
+C4-93-13   (hex)		100fio networks technology llc
+C49313     (base 16)		100fio networks technology llc
+				2534 crescent st. apt 3F
+				Astoria  New york  11102
+				US
+
+7C-39-20   (hex)		SSOMA SECURITY
+7C3920     (base 16)		SSOMA SECURITY
+				Unit 703, Daeryung Technotown 13th, 
+				Geumcheongu  Seoul  153754
+				KR
+
+28-C0-DA   (hex)		Juniper Networks
+28C0DA     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+9C-77-AA   (hex)		NADASNV
+9C77AA     (base 16)		NADASNV
+				2203, T-dong, Poonglim I-won Plus
+				Seongnam-si  Gyeonggi-do  463-862
+				KR
+
+10-E8-EE   (hex)		PhaseSpace
+10E8EE     (base 16)		PhaseSpace
+				1933 Davis St Suite 312
+				San Leandro  CA  94577
+				US
+
+A4-7C-1F   (hex)		Cobham plc
+A47C1F     (base 16)		Cobham plc
+				3985 Gateway Centre Blvd
+				Pinellas Park  FL  33782
+				US
+
+D4-6C-DA   (hex)		CSM GmbH
+D46CDA     (base 16)		CSM GmbH
+				Raiffeisenstraße 34
+				Filderstadt  Baden-Württemberg  70794
+				DE
+
+5C-D9-98   (hex)		D-Link Corporation
+5CD998     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd Rd., Neihu District, 
+				Taipei City     114
+				TW
+
+68-59-7F   (hex)		Alcatel Lucent
+68597F     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+F0-65-DD   (hex)		Primax Electronics Ltd.
+F065DD     (base 16)		Primax Electronics Ltd.
+				669, Ruey Kuang Road, Neihu
+				Taipei    114
+				TW
+
+70-65-82   (hex)		Suzhou Hanming Technologies Co., Ltd.
+706582     (base 16)		Suzhou Hanming Technologies Co., Ltd.
+				Suite 407, No. 166, Ren Ai Road
+				Suzhou  Jiangsu  215123
+				CN
+
+34-D2-C4   (hex)		RENA GmbH Print Systeme
+34D2C4     (base 16)		RENA GmbH Print Systeme
+				Hienlohestrasse 24
+				Otterfing  Bavaria  83624
+				DE
+
+D4-CB-AF   (hex)		Nokia Corporation
+D4CBAF     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+04-5D-56   (hex)		camtron industrial inc.
+045D56     (base 16)		camtron industrial inc.
+				5F, Kuem-Ah B/D, 31-3, Karak-dong, Songpa-gu
+				Seoul    138-801
+				KR
+
+68-23-4B   (hex)		Nihon Dengyo Kousaku
+68234B     (base 16)		Nihon Dengyo Kousaku
+				shinmachi 21-1
+				kawagoe-shi  saitama  350-1107
+				JP
+
+1C-3D-E7   (hex)		Sigma Koki Co.,Ltd.
+1C3DE7     (base 16)		Sigma Koki Co.,Ltd.
+				1-19-9 Midori
+				Sumida-ku  Tokyo  130-0021
+				JP
+
+58-BC-27   (hex)		Cisco Systems, Inc
+58BC27     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-D6-07   (hex)		Nokia Corporation
+20D607     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+6C-E0-B0   (hex)		SOUND4
+6CE0B0     (base 16)		SOUND4
+				11 quai Joseph Gillet
+				LYON    69004
+				FR
+
+9C-FF-BE   (hex)		OTSL Inc.
+9CFFBE     (base 16)		OTSL Inc.
+				HANROKU Bldg. 2F, 2-1-2
+				Shinjuku-ku  Tokyo  160-0021
+				JP
+
+00-F8-60   (hex)		PT. Panggung Electric Citrabuana
+00F860     (base 16)		PT. Panggung Electric Citrabuana
+				Jl. Raya Waru no. 1
+				Sidoarjo  Jawa Timur  61256
+				ID
+
+B8-BA-72   (hex)		Cynove
+B8BA72     (base 16)		Cynove
+				10 cite rougemont
+				Paris    75009
+				FR
+
+44-3D-21   (hex)		Nuvolt
+443D21     (base 16)		Nuvolt
+				8087 Boul. de la Rive Sud
+				Levis  Quebec  G6V 9G9
+				CA
+
+30-49-3B   (hex)		Nanjing Z-Com Wireless Co.,Ltd
+30493B     (base 16)		Nanjing Z-Com Wireless Co.,Ltd
+				Z-Com Building,NO.30 Jiangsu Software Park,NO.699-22 Xuanwu Avenue,
+				Nanjing  Jiangsu  210042
+				CN
+
+A4-5C-27   (hex)		Nintendo Co., Ltd.
+A45C27     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+6C-04-60   (hex)		RBH Access Technologies Inc.
+6C0460     (base 16)		RBH Access Technologies Inc.
+				2 Automatic Road
+				Brampton  Ontario  L6S 6K8
+				CA
+
+70-64-17   (hex)		ORBIS TECNOLOGIA ELECTRICA S.A.
+706417     (base 16)		ORBIS TECNOLOGIA ELECTRICA S.A.
+				Lerida, 61
+				Madrid  Madrid  E28020
+				US
+
+18-EF-63   (hex)		Cisco Systems, Inc
+18EF63     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-6F-EC   (hex)		Braemac CA LLC
+206FEC     (base 16)		Braemac CA LLC
+				43134 Osgood Road
+				Fremont  CA  94539
+				US
+
+10-0D-32   (hex)		Embedian, Inc.
+100D32     (base 16)		Embedian, Inc.
+				10F., 95, Nanjing E. Rd. Sec. 4, 
+				Taipei    10580
+				TW
+
+88-AC-C1   (hex)		Generiton Co., Ltd. 
+88ACC1     (base 16)		Generiton Co., Ltd. 
+				8F-1, No. 81, Shuili Rd., 
+				Hsinchu City,     30059 
+				TW
+
+88-18-AE   (hex)		Tamron Co., Ltd
+8818AE     (base 16)		Tamron Co., Ltd
+				1385,Hasunuma, Minuma-ku
+				Saitama-shi  Saitama  337-8556
+				JP
+
+7C-ED-8D   (hex)		Microsoft
+7CED8D     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+A4-BE-61   (hex)		EutroVision System, Inc.
+A4BE61     (base 16)		EutroVision System, Inc.
+				Rm 403,Building33,No.680 GuipingRd,Xuhui,
+				Shanghai    200233
+				CN
+
+D0-7D-E5   (hex)		Forward Pay Systems, Inc.
+D07DE5     (base 16)		Forward Pay Systems, Inc.
+				9531 West 78th St., #245
+				Eden Prairie  MN  55344
+				US
+
+04-DD-4C   (hex)		Velocytech
+04DD4C     (base 16)		Velocytech
+				Poppelgårdvej 11
+				Søborg  DK  2860
+				DK
+
+A4-0C-C3   (hex)		Cisco Systems, Inc
+A40CC3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+4C-BA-A3   (hex)		Bison Electronics Inc.
+4CBAA3     (base 16)		Bison Electronics Inc.
+				3F., No.28, Lane 583, Rueiguang Rd., Neihu District
+				Taipei City    11492
+				TW
+
+A8-B1-D4   (hex)		Cisco Systems, Inc
+A8B1D4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+EC-7C-74   (hex)		Justone Technologies Co., Ltd.
+EC7C74     (base 16)		Justone Technologies Co., Ltd.
+				Tongguang Building F19, 12# South Agriculture Exhibition Center Road, 
+				Beijing    100125
+				CN
+
+CC-FC-B1   (hex)		Wireless Technology, Inc.
+CCFCB1     (base 16)		Wireless Technology, Inc.
+				2064 Eastman Ave. #113
+				Ventura  CA  93003-7787
+				US
+
+3C-1A-79   (hex)		Huayuan Technology CO.,LTD
+3C1A79     (base 16)		Huayuan Technology CO.,LTD
+				R308 Block Jingmeng High-Tech Building,NO.5-1 Shangdi East Road,
+				Beijing    100085
+				CN
+
+7C-F0-98   (hex)		Bee Beans Technologies, Inc.
+7CF098     (base 16)		Bee Beans Technologies, Inc.
+				TCI B5
+				Tsukuba City  Ibaraki  305-0047
+				JP
+
+EC-66-D1   (hex)		B&W Group LTD
+EC66D1     (base 16)		B&W Group LTD
+				Dale Road
+				Worthing  Sussex  BN11 2BH
+				GB
+
+38-5F-C3   (hex)		Yu Jeong System, Co.Ltd
+385FC3     (base 16)		Yu Jeong System, Co.Ltd
+				#503, Dong il B/D, 826, Guro-3dong, 
+				Seoul    152-879
+				KR
+
+88-8B-5D   (hex)		Storage Appliance Corporation 
+888B5D     (base 16)		Storage Appliance Corporation 
+				29 Su Zhou Jie, Haidian Dist.
+				Beijing     100080
+				CN
+
+84-A9-91   (hex)		Cyber Trans Japan Co.,Ltd.
+84A991     (base 16)		Cyber Trans Japan Co.,Ltd.
+				
+				Setagaya-ku  Tokyo  155-0031
+				JP
+
+68-78-4C   (hex)		Nortel Networks
+68784C     (base 16)		Nortel Networks
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+F8-D7-56   (hex)		Simm Tronic Limited 
+F8D756     (base 16)		Simm Tronic Limited 
+				Unit 3, Waterside
+				Hoddesdon  Hertfordshire  EN11 0QR
+				GB
+
+04-A3-F3   (hex)		Emicon
+04A3F3     (base 16)		Emicon
+				shelkovskoe shosse, 77
+				Moscow    107241
+				RU
+
+1C-17-D3   (hex)		Cisco Systems, Inc
+1C17D3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+7C-E0-44   (hex)		NEON Inc
+7CE044     (base 16)		NEON Inc
+				5340 Airport Boulevard
+				Boulder  CO  80301
+				US
+
+28-4C-53   (hex)		Intune Networks
+284C53     (base 16)		Intune Networks
+				9B Beckett Way
+				Dublin     12
+				IE
+
+90-51-3F   (hex)		Elettronica Santerno SpA
+90513F     (base 16)		Elettronica Santerno SpA
+				Via della Concia 7
+				Castel Guelfo (BO)    40026
+				IT
+
+88-41-C1   (hex)		ORBISAT DA AMAZONIA IND E AEROL SA
+8841C1     (base 16)		ORBISAT DA AMAZONIA IND E AEROL SA
+				AV SHISHIMA HIFUMI, 2911
+				SAO JOSE DOS CAMPOS  São Paulo  12244-000
+				BR
+
+9C-75-14   (hex)		Wildix srl
+9C7514     (base 16)		Wildix srl
+				loc. Le Basse, 3
+				Trento  TN  38100
+				IT
+
+4C-F7-37   (hex)		SamJi Electronics Co., Ltd
+4CF737     (base 16)		SamJi Electronics Co., Ltd
+				459-21, Gasan-dong, Gumchun-ku
+				Seoul    153-803
+				KR
+
+F0-D7-67   (hex)		Axema Passagekontroll AB
+F0D767     (base 16)		Axema Passagekontroll AB
+				Box 90 215
+				Stockholm    120 23 
+				SE
+
+C8-4C-75   (hex)		Cisco Systems, Inc
+C84C75     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-02-A6   (hex)		Beijing Newmine Technology
+C802A6     (base 16)		Beijing Newmine Technology
+				10 floor,Keshi Plaza
+				Beijing    100085
+				CN
+
+4C-8B-55   (hex)		Grupo Digicon
+4C8B55     (base 16)		Grupo Digicon
+				Rua Nissin Castiel, 640
+				Gravataí  Rio Grande do Sul  94045420
+				BR
+
+6C-5C-DE   (hex)		SunReports, Inc.
+6C5CDE     (base 16)		SunReports, Inc.
+				1406 Cedarwood Dr.
+				San Mateo  CA  94403
+				US
+
+34-F3-9B   (hex)		WizLAN Ltd.
+34F39B     (base 16)		WizLAN Ltd.
+				P.O.Box 7948
+				Haifa    31078
+				IL
+
+E8-6C-DA   (hex)		Supercomputers and Neurocomputers Research Center
+E86CDA     (base 16)		Supercomputers and Neurocomputers Research Center
+				2, Chekhov st
+				Taganrog   Rostov-on-Don region   347922 
+				RU
+
+24-0B-2A   (hex)		Viettel Group
+240B2A     (base 16)		Viettel Group
+				Center for Research and Development
+				Hanoi    1111
+				VN
+
+00-B5-D6   (hex)		Omnibit Inc.
+00B5D6     (base 16)		Omnibit Inc.
+				2-7-9, Soto-Kanda
+				Chiyoda-ku  Tokyo  101-0021
+				JP
+
+54-89-22   (hex)		Zelfy Inc
+548922     (base 16)		Zelfy Inc
+				4655 Old Ironsides Dr, Suite#200
+				Santa Clara  Ca  95054
+				US
+
+50-C5-8D   (hex)		Juniper Networks
+50C58D     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+4C-30-89   (hex)		Thales Transportation Systems GmbH
+4C3089     (base 16)		Thales Transportation Systems GmbH
+				Bierweg 2
+				Arnstadt  Thuringia  99310
+				DE
+
+48-12-49   (hex)		Luxcom Technologies Inc.
+481249     (base 16)		Luxcom Technologies Inc.
+				102 Walgreen Road
+				Ottawa  Ontario  K0A 1L0
+				CA
+
+24-A9-37   (hex)		PURE Storage
+24A937     (base 16)		PURE Storage
+				650 Castro Street
+				Mt. View  CA  94041
+				US
+
+34-83-02   (hex)		iFORCOM Co., Ltd
+348302     (base 16)		iFORCOM Co., Ltd
+				1326
+				Sagamihara  Kanagawa  252-0157
+				JP
+
+B4-3D-B2   (hex)		Degreane Horizon
+B43DB2     (base 16)		Degreane Horizon
+				730 Rue de l'Initiative
+				Cuers  Var  83390
+				FR
+
+84-F6-4C   (hex)		Cross Point BV
+84F64C     (base 16)		Cross Point BV
+				Postbus 2112
+				Emmen  Drenthe  7801 CC
+				NL
+
+C0-8B-6F   (hex)		S I Sistemas Inteligentes Eletrônicos Ltda
+C08B6F     (base 16)		S I Sistemas Inteligentes Eletrônicos Ltda
+				Rua Amadeu Piotto 161
+				Curitiba  Paraná  81280020
+				BR
+
+F8-6E-CF   (hex)		Arcx Inc
+F86ECF     (base 16)		Arcx Inc
+				151 Amber St, Unit 1
+				Markham  ON  L3R 3B3
+				CA
+
+8C-84-01   (hex)		Private
+8C8401     (base 16)		Private
+
+40-84-93   (hex)		Clavister AB
+408493     (base 16)		Clavister AB
+				Sjogatan 6J
+				Ornskoldsvik    89160
+				SE
+
+78-A6-BD   (hex)		DAEYEON Control&Instrument Co,.Ltd
+78A6BD     (base 16)		DAEYEON Control&Instrument Co,.Ltd
+				ACETECHNOTOWER 2-108, 197-7, Guro3-Dong, Guro-Gu, 
+				Seoul    152-766
+				KR
+
+3C-19-15   (hex)		GFI Chrono Time
+3C1915     (base 16)		GFI Chrono Time
+				121 rue des Guillees
+				CHAURAY    79180
+				FR
+
+EC-B1-06   (hex)		Acuro Networks, Inc
+ECB106     (base 16)		Acuro Networks, Inc
+				42808 Christy St., Suite 100
+				Fremont  CA  94538
+				US
+
+C8-35-B8   (hex)		Ericsson, EAB/RWI/K
+C835B8     (base 16)		Ericsson, EAB/RWI/K
+				Skolgången 17
+				    SE-800 06
+				SE
+
+F8-9D-0D   (hex)		Control Technology Inc.
+F89D0D     (base 16)		Control Technology Inc.
+				7608 North Hudson Ave
+				Oklahoma City  OK  73116
+				US
+
+2C-3F-3E   (hex)		Alge-Timing GmbH
+2C3F3E     (base 16)		Alge-Timing GmbH
+				Rotkreuzstrasse 39
+				Lustenau    6890
+				AT
+
+08-9F-97   (hex)		LEROY AUTOMATION
+089F97     (base 16)		LEROY AUTOMATION
+				35, Boulevard du Libre Echange
+				Saint Orens de Gameville    31650
+				FR
+
+34-BA-51   (hex)		Se-Kure Controls, Inc.
+34BA51     (base 16)		Se-Kure Controls, Inc.
+				3714 Runge Street
+				Franklin Park  IL  60131
+				US
+
+6C-70-39   (hex)		Novar GmbH
+6C7039     (base 16)		Novar GmbH
+				Johannes-Mauthe-Str. 14
+				Albstadt  Baden-Württemberg  72458
+				DE
+
+98-2D-56   (hex)		Resolution Audio
+982D56     (base 16)		Resolution Audio
+				88 Hoff Street #106
+				San Francisco  CA  94110
+				US
+
+14-73-73   (hex)		TUBITAK UEKAE
+147373     (base 16)		TUBITAK UEKAE
+				ANIBAL ST.
+				KOCAELI    41470
+				TR
+
+FC-CF-62   (hex)		IBM Corp
+FCCF62     (base 16)		IBM Corp
+				2051 Mission College Blvd 
+				Santa Clara  CA  95054
+				US
+
+08-4E-1C   (hex)		H2A Systems, LLC
+084E1C     (base 16)		H2A Systems, LLC
+				7545 Irvine Center Drive
+				Irvine  CA  92618
+				US
+
+88-B6-27   (hex)		Gembird Europe BV
+88B627     (base 16)		Gembird Europe BV
+				Wittevrouwen 56
+				Almere  Flevoland  1358CD
+				NL
+
+F0-68-53   (hex)		Integrated Corporation
+F06853     (base 16)		Integrated Corporation
+				3/F, Shun On Commercial Bldg., 
+				Cetnral,    
+				HK
+
+A4-AD-B8   (hex)		Vitec Group, Camera Dynamics Ltd
+A4ADB8     (base 16)		Vitec Group, Camera Dynamics Ltd
+				William Vinten Building
+				Bury St Edmunds  Suffolk  IP33 3TB
+				GB
+
+A4-B1-21   (hex)		Arantia 2010 S.L.
+A4B121     (base 16)		Arantia 2010 S.L.
+				Volta do Castro s/n
+				Santiago de Compostela  A Coruña  15706
+				ES
+
+E0-26-36   (hex)		Nortel Networks
+E02636     (base 16)		Nortel Networks
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+5C-57-C8   (hex)		Nokia Corporation
+5C57C8     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+D4-6C-BF   (hex)		Goodrich ISR
+D46CBF     (base 16)		Goodrich ISR
+				6600 Gulton Crt
+				Albuquerque  NM  87109
+				US
+
+E0-26-30   (hex)		Intrigue Technologies, Inc.
+E02630     (base 16)		Intrigue Technologies, Inc.
+				800 Old Pond Road
+				Bridgeville  PA  15017
+				US
+
+EC-C8-82   (hex)		Cisco Systems, Inc
+ECC882     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-FD-B9   (hex)		Proware Technologies Co Ltd.
+6CFDB9     (base 16)		Proware Technologies Co Ltd.
+				2nd F1 East Wing,South Section,Factory Building 24,Science&Technology Park
+				Shenzhen  Guangdong  518000
+				CN
+
+10-18-9E   (hex)		Elmo Motion Control
+10189E     (base 16)		Elmo Motion Control
+				64 Gisin St.
+				Petach Tikva    49103
+				IL
+
+8C-56-C5   (hex)		Nintendo Co., Ltd.
+8C56C5     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+CC-B8-88   (hex)		AnB Securite s.a.
+CCB888     (base 16)		AnB Securite s.a.
+				Rue de Joie,38-40
+				Liege    4000
+				BE
+
+6C-5E-7A   (hex)		Ubiquitous Internet Telecom Co., Ltd
+6C5E7A     (base 16)		Ubiquitous Internet Telecom Co., Ltd
+				#512, 5th Floor, Kolon Digital Valley,Guro 3(sam)-dong, Guro-gu
+				Seoul    152-777
+				KR
+
+B4-2C-BE   (hex)		Direct Payment Solutions Limited
+B42CBE     (base 16)		Direct Payment Solutions Limited
+				98 Anzac Avenue
+				Auckland    1035
+				NZ
+
+CC-22-18   (hex)		InnoDigital Co., Ltd.
+CC2218     (base 16)		InnoDigital Co., Ltd.
+				No.310 3F Kofomo Tower
+				Sungnam-city  Kyunggi-do  463-825
+				KR
+
+C8-6C-1E   (hex)		Display Systems Ltd
+C86C1E     (base 16)		Display Systems Ltd
+				16-Parkovaja Street 26
+				Moscow    105484
+				RU
+
+A0-18-59   (hex)		Shenzhen Yidashi Electronics Co Ltd
+A01859     (base 16)		Shenzhen Yidashi Electronics Co Ltd
+				Building A10, Fukang Industrial Zone
+				Shenzhen   Guangdong   518110
+				CN
+
+E8-05-6D   (hex)		Nortel Networks
+E8056D     (base 16)		Nortel Networks
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+C4-59-76   (hex)		Fugoo Coorporation
+C45976     (base 16)		Fugoo Coorporation
+				8001 Irvine Center Drive
+				Irvine  CA  62618
+				US
+
+90-A7-C1   (hex)		Pakedge Device and Software Inc.
+90A7C1     (base 16)		Pakedge Device and Software Inc.
+				1011 Edwards Road
+				Burlingame  CA  94010
+				US
+
+80-BA-AC   (hex)		TeleAdapt Ltd
+80BAAC     (base 16)		TeleAdapt Ltd
+				Axis 5
+				Watford  Hertfordshire  WD244YW
+				GB
+
+50-2D-F4   (hex)		Phytec Messtechnik GmbH
+502DF4     (base 16)		Phytec Messtechnik GmbH
+				Robert-Koch-Straße 39
+				Mainz  Rheinland-Pfalz  55129
+				DE
+
+2C-CD-27   (hex)		Precor Inc
+2CCD27     (base 16)		Precor Inc
+				20031 142nd Avenue NE
+				Woodinville  WA  98072
+				US
+
+10-43-69   (hex)		Soundmax Electronic Limited 
+104369     (base 16)		Soundmax Electronic Limited 
+				Room#1505, Oriental plaza, #1072 JianShe Road
+				SHENZHEN   Guangdong  518001
+				CN
+
+C0-6C-0F   (hex)		Dobbs Stanford
+C06C0F     (base 16)		Dobbs Stanford
+				2715 Electronic Lane
+				Dallas  Texas  75220
+				US
+
+C8-6C-B6   (hex)		Optcom Co., Ltd.
+C86CB6     (base 16)		Optcom Co., Ltd.
+				792-3 Tomigaoka
+				Iwata  Shizuoka  438-0803
+				JP
+
+58-49-BA   (hex)		Chitai Electronic Corp.
+5849BA     (base 16)		Chitai Electronic Corp.
+				5F., No. 1 Lane 123, Pao-Chung Rd., Hsin-Tien City 
+				Taiepi    23144
+				TW
+
+00-D1-1C   (hex)		ACETEL
+00D11C     (base 16)		ACETEL
+				#1006, World Merdian 2-cha, 426-5,
+				Seoul    153-759
+				KR
+
+60-1D-0F   (hex)		Midnite Solar
+601D0F     (base 16)		Midnite Solar
+				17722 67th Ave NE #C
+				Arlington  WA  98223
+				US
+
+A8-F9-4B   (hex)		Eltex Enterprise Ltd.
+A8F94B     (base 16)		Eltex Enterprise Ltd.
+				Okruzhnaya st. 29v
+				Novosibirsk    630020
+				RU
+
+0C-82-30   (hex)		SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD
+0C8230     (base 16)		SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD
+				c-504,Skyworth Building,No.8 Road,High-tech south,Nanshan District,
+				Shenzhen  Guangdong  518057
+				CN
+
+74-6B-82   (hex)		MOVEK 
+746B82     (base 16)		MOVEK 
+				6517 Navaho Trail
+				Edina  Minnesota  55439
+				US
+
+9C-C0-77   (hex)		PrintCounts, LLC
+9CC077     (base 16)		PrintCounts, LLC
+				5109 W Lemon St
+				Tampa  FL  33609
+				US
+
+3C-B1-7F   (hex)		Wattwatchers Pty Ld
+3CB17F     (base 16)		Wattwatchers Pty Ld
+				22 Woodbury Rd St. Ives
+				Sydney  NSW  2075
+				AU
+
+CC-54-59   (hex)		OnTime Networks AS
+CC5459     (base 16)		OnTime Networks AS
+				Gladsvei 20
+				Oslo    0489
+				NO
+
+F8-DC-7A   (hex)		Variscite LTD
+F8DC7A     (base 16)		Variscite LTD
+				60 Medinat Hayehudim st.
+				Hertzelia    46722
+				IL
+
+D4-F1-43   (hex)		IPROAD.,Inc
+D4F143     (base 16)		IPROAD.,Inc
+				#505 Byuksan digital valley 7, 170-13,
+				Seoul    152-847
+				KR
+
+B8-F7-32   (hex)		Aryaka Networks Inc
+B8F732     (base 16)		Aryaka Networks Inc
+				691 S. Milpitas Blvd., 
+				Milpitas   CA  95035
+				US
+
+E8-DF-F2   (hex)		PRF Co., Ltd.
+E8DFF2     (base 16)		PRF Co., Ltd.
+				#510, Leaders B/D, Yatop-dong
+				Seongnam-city  Gyeonggi-do  463-828
+				KR
+
+B4-ED-54   (hex)		Wohler Technologies
+B4ED54     (base 16)		Wohler Technologies
+				31055 Huntwood Avenue
+				Hayward  CA  94544
+				US
+
+00-64-40   (hex)		Cisco Systems, Inc
+006440     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+94-C4-E9   (hex)		PowerLayer Microsystems HongKong Limited
+94C4E9     (base 16)		PowerLayer Microsystems HongKong Limited
+				23 Zhichun Rd,Liangziyinzuo Rm1009
+				Beijing    100083
+				CN
+
+88-43-E1   (hex)		Cisco Systems, Inc
+8843E1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-86-2A   (hex)		Heinz Lackmann GmbH & Co KG
+34862A     (base 16)		Heinz Lackmann GmbH & Co KG
+				Harkortstraße 15
+				Münster  NRW  48163
+				DE
+
+AC-E3-48   (hex)		MadgeTech, Inc
+ACE348     (base 16)		MadgeTech, Inc
+				879 Maple St
+				Contoocook  NH  03229
+				US
+
+54-9A-16   (hex)		Uzushio Electric Co.,Ltd.
+549A16     (base 16)		Uzushio Electric Co.,Ltd.
+				105
+				Imabari-city  Ehime pref.  7948582
+				JP
+
+90-18-AE   (hex)		Shanghai Meridian Technologies, Co. Ltd.
+9018AE     (base 16)		Shanghai Meridian Technologies, Co. Ltd.
+				Suite 6A Tongsheng Tower
+				Pudong  shanghai  200122
+				CN
+
+04-94-A1   (hex)		CATCH THE WIND INC
+0494A1     (base 16)		CATCH THE WIND INC
+				10781 JAMES PAYNE COURT
+				MANASSAS  VA  20110
+				US
+
+00-3A-99   (hex)		Cisco Systems, Inc
+003A99     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-3A-9A   (hex)		Cisco Systems, Inc
+003A9A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-3A-98   (hex)		Cisco Systems, Inc
+003A98     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-A6-E3   (hex)		David Clark Company
+50A6E3     (base 16)		David Clark Company
+				360 Franklin St.
+				Worcester  MA  01615
+				US
+
+50-93-4F   (hex)		Gradual Tecnologia Ltda.
+50934F     (base 16)		Gradual Tecnologia Ltda.
+				Rua Attilio Giaretta, 110
+				Itatiba  SP  13257-584
+				BR
+
+B8-B1-C7   (hex)		BT&COM CO.,LTD
+B8B1C7     (base 16)		BT&COM CO.,LTD
+				#1103, E&C Venture Dream Tower II
+				Seoul    152-719
+				KR
+
+DC-2C-26   (hex)		Iton Technology Limited
+DC2C26     (base 16)		Iton Technology Limited
+				Room 10E, JingFeng Building, 
+				ShenZhen  GuangDong  518034
+				CN
+
+D4-11-D6   (hex)		ShotSpotter, Inc.
+D411D6     (base 16)		ShotSpotter, Inc.
+				1060 Terra Bella Ave.
+				Mountain View  CA  94043
+				US
+
+9C-AF-CA   (hex)		Cisco Systems, Inc
+9CAFCA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+1C-0F-CF   (hex)		Sypro Optics GmbH
+1C0FCF     (base 16)		Sypro Optics GmbH
+				Carl-Zeiss-Promenade 10
+				Jena  Thuringia  07745
+				DE
+
+9C-4E-8E   (hex)		ALT Systems Ltd
+9C4E8E     (base 16)		ALT Systems Ltd
+				PoBox 17
+				Helsinki    00761
+				FI
+
+70-72-CF   (hex)		EdgeCore Networks
+7072CF     (base 16)		EdgeCore Networks
+				20 Mason
+				Irvine  CA  92618
+				US
+
+EC-D0-0E   (hex)		MiraeRecognition Co., Ltd.
+ECD00E     (base 16)		MiraeRecognition Co., Ltd.
+				PrimeBank Bldg. Annex-3F, #278-3
+				Seoul    135-833
+				KR
+
+A4-AD-00   (hex)		Ragsdale Technology
+A4AD00     (base 16)		Ragsdale Technology
+				505 Echo Lane
+				Big Bear Lake  CA  92315
+				US
+
+4C-9E-E4   (hex)		Hanyang Navicom Co.,Ltd.
+4C9EE4     (base 16)		Hanyang Navicom Co.,Ltd.
+				713, Gwanpyeong-dong, Yusung-gu
+				Daejeon    305-509
+				KR
+
+C8-72-48   (hex)		Aplicom Oy
+C87248     (base 16)		Aplicom Oy
+				Rautatienkatu 56
+				Äänekoski  Länsi-Suomi  44101
+				FI
+
+C4-7D-4F   (hex)		Cisco Systems, Inc
+C47D4F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-DF-1E   (hex)		Cisco Systems, Inc
+3CDF1E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+98-6D-C8   (hex)		TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION
+986DC8     (base 16)		TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION
+				 TOKYO SQUARE GARDEN
+				 3-1-1 Kyobashi, CHUO-KU  Tokyo  104-0031
+				JP
+
+6C-AC-60   (hex)		Venetex Corp
+6CAC60     (base 16)		Venetex Corp
+				8-3-9,Shin-machi
+				Ome-shi,  Tokyo  198-0024
+				JP
+
+F0-4B-F2   (hex)		JTECH Communications, Inc.
+F04BF2     (base 16)		JTECH Communications, Inc.
+				6413 Congress Ave.
+				Boca Raton  FL  33487
+				US
+
+04-2B-BB   (hex)		PicoCELA, Inc.
+042BBB     (base 16)		PicoCELA, Inc.
+				3-8-33, Momochihama
+				Fukuoka-city  Fukuoka  814-0001
+				JP
+
+FC-08-77   (hex)		Prentke Romich Company
+FC0877     (base 16)		Prentke Romich Company
+				1022 Heyl Rd
+				Wooster  OH  44691
+				US
+
+64-F9-70   (hex)		Kenade Electronics Technology Co.,LTD.
+64F970     (base 16)		Kenade Electronics Technology Co.,LTD.
+				F/G room,11/F,Hangdu building,Huafu Rd, Futian district,
+				ShenZhen  GuangDong  518028
+				CN
+
+C8-2E-94   (hex)		Halfa Enterprise Co., Ltd.
+C82E94     (base 16)		Halfa Enterprise Co., Ltd.
+				5F, No.102, Ming Chuan Road
+				Hsin Tien  Taipei County  23141
+				TW
+
+80-17-7D   (hex)		Nortel Networks
+80177D     (base 16)		Nortel Networks
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+7C-7B-E4   (hex)		Z'SEDAI KENKYUSHO CORPORATION
+7C7BE4     (base 16)		Z'SEDAI KENKYUSHO CORPORATION
+				Meikai sannomiya 2nd Bldg. 11th/fl.
+				Kobe  Hyogo  650-0034
+				JP
+
+F0-DE-71   (hex)		Shanghai EDO Technologies Co.,Ltd.
+F0DE71     (base 16)		Shanghai EDO Technologies Co.,Ltd.
+				Unit 12302, Building 12,498 Guoshoujing Road, Pudong New Area
+				Shanghai    201203
+				CN
+
+60-D3-0A   (hex)		Quatius Limited
+60D30A     (base 16)		Quatius Limited
+				Units 05-07, 16/F, Greenfield Tower, Concordia Plaza,
+				Kowloon    
+				HK
+
+24-CF-21   (hex)		Shenzhen State Micro Technology Co., Ltd
+24CF21     (base 16)		Shenzhen State Micro Technology Co., Ltd
+				SSMEC Building2/F, Gao Xin Nan First Avenue, Hi-Tech Park South, Nanshan
+				Shenzhen City  Guangdong Province  518057
+				CN
+
+10-BA-A5   (hex)		GANA I&C CO., LTD
+10BAA5     (base 16)		GANA I&C CO., LTD
+				154-17 kyoungdong B/D 3F karak-dong songpa-gu
+				Seoul  Korea  138-160
+				KR
+
+BC-9D-A5   (hex)		DASCOM Europe GmbH
+BC9DA5     (base 16)		DASCOM Europe GmbH
+				Heuweg 3
+				Ulm  Baden-Württemberg  89079
+				DE
+
+28-FB-D3   (hex)		Ragentek Technology Group
+28FBD3     (base 16)		Ragentek Technology Group
+				D10/D11，No.3188, Xiupu Road, PuDong District, Shanghai
+				Shanghai    201703
+				CN
+
+58-6E-D6   (hex)		Private
+586ED6     (base 16)		Private
+
+EC-30-91   (hex)		Cisco Systems, Inc
+EC3091     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-BC-11   (hex)		CombiQ AB
+64BC11     (base 16)		CombiQ AB
+				Science Park
+				Jonkoping    553 18
+				SE
+
+C8-C1-3C   (hex)		RuggedTek Hangzhou Co., Ltd
+C8C13C     (base 16)		RuggedTek Hangzhou Co., Ltd
+				Zhejiang University National Science Park
+				Hangzhou  Zhejiang  310013
+				CN
+
+F4-AC-C1   (hex)		Cisco Systems, Inc
+F4ACC1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-97-D1   (hex)		BK Electronics cc
+4097D1     (base 16)		BK Electronics cc
+				150 Swaardlelie Ave
+				Pretoria  Gauteng  0184
+				ZA
+
+0C-E9-36   (hex)		ELIMOS srl
+0CE936     (base 16)		ELIMOS srl
+				Area Science Park - Padriciano 99
+				TRIESTE    34149
+				IT
+
+A0-2E-F3   (hex)		United Integrated Services Co., Led.
+A02EF3     (base 16)		United Integrated Services Co., Led.
+				5F No 3 Lane 7 Packao Road Hsintien
+				Taipei Hsien    23144
+				TW
+
+A0-98-05   (hex)		OpenVox Communication Co Ltd
+A09805     (base 16)		OpenVox Communication Co Ltd
+				F2,Building No.14,Shangsha Science &
+				ShenZhen  GuangDong  518031
+				CN
+
+60-39-1F   (hex)		ABB Ltd
+60391F     (base 16)		ABB Ltd
+				Distribution Automation
+				Vadodara  Gujarat  390013
+				IN
+
+E8-A4-C1   (hex)		Deep Sea Electronics Ltd
+E8A4C1     (base 16)		Deep Sea Electronics Ltd
+				Highfield House
+				Hunmanby  North Yorkshire  YO14 0PH
+				GB
+
+C8-D2-C1   (hex)		Jetlun (Shenzhen) Corporation
+C8D2C1     (base 16)		Jetlun (Shenzhen) Corporation
+				1008A Skyworth Building, Gao-xin Rd South
+				Shenzhen    518057
+				CN
+
+E0-91-53   (hex)		XAVi Technologies Corp.
+E09153     (base 16)		XAVi Technologies Corp.
+				9F., No129, Xingde RD.,Sanchong Dist.,
+				New Taipei  Taiwan  24158
+				TW
+
+88-A5-BD   (hex)		QPCOM INC.
+88A5BD     (base 16)		QPCOM INC.
+				6030 NW 99 AVE
+				DORAL  FLORIDA  33178
+				US
+
+D4-C7-66   (hex)		Acentic GmbH
+D4C766     (base 16)		Acentic GmbH
+				Venloer Strasse 151-153
+				Cologne    50672
+				DE
+
+00-27-12   (hex)		MaxVision LLC
+002712     (base 16)		MaxVision LLC
+				495 Production Ave
+				Madison  AL  35758
+				US
+
+00-27-1F   (hex)		MIPRO Electronics Co., Ltd
+00271F     (base 16)		MIPRO Electronics Co., Ltd
+				814,Peikang Road
+				Chiayi    60096
+				TW
+
+00-27-0C   (hex)		Cisco Systems, Inc
+00270C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-26-CF   (hex)		DEKA R&D
+0026CF     (base 16)		DEKA R&D
+				340 Commercial Street
+				Manchester  NH  03101
+				US
+
+00-26-E7   (hex)		Shanghai ONLAN Communication Tech. Co., Ltd.
+0026E7     (base 16)		Shanghai ONLAN Communication Tech. Co., Ltd.
+				3F, 6C, No. 1658, Gumei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+00-26-E0   (hex)		ASITEQ
+0026E0     (base 16)		ASITEQ
+				5F, DONGYOUNG Bldg,382-6,Yatap dong
+				Sung Nam si  Kyounggi-do  463-827
+				KR
+
+00-27-03   (hex)		Testech Electronics Pte Ltd
+002703     (base 16)		Testech Electronics Pte Ltd
+				Block 118, #05-110,
+				Singapore    380118
+				SG
+
+00-26-F3   (hex)		SMC Networks
+0026F3     (base 16)		SMC Networks
+				20 Mason
+				Irvine  CA  92618
+				US
+
+00-26-A5   (hex)		MICROROBOT.CO.,LTD
+0026A5     (base 16)		MICROROBOT.CO.,LTD
+				167-3 Gungpyeong-ri
+				Gwangju-si  Gyeonggi-Do  464-881
+				KR
+
+00-26-A3   (hex)		FQ Ingenieria Electronica S.A.
+0026A3     (base 16)		FQ Ingenieria Electronica S.A.
+				Avda. Roquetes 9
+				Sant Pere de Ribes  Barcelona  08812
+				ES
+
+00-26-9D   (hex)		M2Mnet Co., Ltd.
+00269D     (base 16)		M2Mnet Co., Ltd.
+				607 Downtown Bld. 1043-1 Hogye-Dong Dongan-Gu
+				Anyang-City  Kyunggi-Do  431-080
+				KR
+
+00-26-97   (hex)		Alpha  Technologies Inc.
+002697     (base 16)		Alpha  Technologies Inc.
+				3767 Alpha Way
+				Bellingham  WA  98226 
+				US
+
+00-26-8A   (hex)		Terrier SC Ltd
+00268A     (base 16)		Terrier SC Ltd
+				Strettit Farm
+				East Peckham  Kent  TN12 5EE
+				GB
+
+00-26-89   (hex)		General Dynamics Robotic Systems
+002689     (base 16)		General Dynamics Robotic Systems
+				1231 Tech Court
+				Westminster  MD  21157
+				US
+
+00-26-C5   (hex)		Guangdong Gosun Telecommunications Co.,Ltd
+0026C5     (base 16)		Guangdong Gosun Telecommunications Co.,Ltd
+				Guangdong software park D, No.11, CaiPing road , Guangzhou science city
+				Guangzhou  Guangdong  510663
+				CN
+
+00-26-C4   (hex)		Cadmos microsystems S.r.l.
+0026C4     (base 16)		Cadmos microsystems S.r.l.
+				Via Pietro Frattini, 255
+				Roma    00149
+				IT
+
+00-26-C8   (hex)		System Sensor
+0026C8     (base 16)		System Sensor
+				3825 Ohio Avenue
+				Saint Charles  IL  60174
+				US
+
+00-26-7A   (hex)		wuhan hongxin telecommunication technologies co.,ltd
+00267A     (base 16)		wuhan hongxin telecommunication technologies co.,ltd
+				No.5 Donxin Road,Wuhan East Lake High-Tech Development Zone
+				Wuhan  Hubei  430073
+				CN
+
+00-26-C2   (hex)		SCDI Co. LTD
+0026C2     (base 16)		SCDI Co. LTD
+				#451, Hagal-Dong, Giheung-Gu,
+				Yongin-Si  Gyeonggi-Do  446-930
+				KR
+
+00-26-85   (hex)		Digital Innovation
+002685     (base 16)		Digital Innovation
+				Travbaneveien 6
+				Trondheim    7044
+				NO
+
+00-26-A9   (hex)		Strong Technologies Pty Ltd
+0026A9     (base 16)		Strong Technologies Pty Ltd
+				60 Wedgewood Road
+				Hallam  Victoria  3803
+				AU
+
+00-26-72   (hex)		AAMP of America
+002672     (base 16)		AAMP of America
+				13190 56th Court
+				Clearwater  Florida  33760
+				US
+
+00-25-FD   (hex)		OBR Centrum Techniki Morskiej S.A.
+0025FD     (base 16)		OBR Centrum Techniki Morskiej S.A.
+				Dickmana 62
+				Gdynia    81-109
+				US
+
+00-26-00   (hex)		TEAC Australia Pty Ltd.
+002600     (base 16)		TEAC Australia Pty Ltd.
+				75 Northgate Drive
+				Thomastown  Victoria  3074
+				AU
+
+00-25-FF   (hex)		CreNova Multimedia Co., Ltd
+0025FF     (base 16)		CreNova Multimedia Co., Ltd
+				7/F, Hana EZ Tower, Gumi-Dong 10, Sungnam Rd 43,
+				Sungnam-Si  Kyunggi-Do  463-870
+				KR
+
+00-26-59   (hex)		Nintendo Co., Ltd.
+002659     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-26-51   (hex)		Cisco Systems, Inc
+002651     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-26-12   (hex)		Space Exploration Technologies
+002612     (base 16)		Space Exploration Technologies
+				1 Rocket Road
+				Hawthorne  CA  90250
+				US
+
+00-26-16   (hex)		Rosemount Inc.
+002616     (base 16)		Rosemount Inc.
+				8200 Market Boulevard
+				Chanhassen  MN  55317
+				US
+
+00-26-0B   (hex)		Cisco Systems, Inc
+00260B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-26-23   (hex)		JRD Communication Inc
+002623     (base 16)		JRD Communication Inc
+				16/F, TCL Tower, Gaoxin Nanyi Road, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+00-26-27   (hex)		Truesell
+002627     (base 16)		Truesell
+				301 Sungyun Bldg, 89-2
+				Seocho-gu,  Seoul  137-130
+				KR
+
+00-26-4F   (hex)		Krüger &Gothe GmbH
+00264F     (base 16)		Krüger &Gothe GmbH
+				Atzendorfer Straße 19
+				Staßfurt  Sachsen Anhalt  39418
+				DE
+
+00-26-21   (hex)		InteliCloud Technology Inc.
+002621     (base 16)		InteliCloud Technology Inc.
+				895 Dove St.
+				Newport Beach  CA  92660
+				US
+
+00-26-1C   (hex)		NEOVIA INC.
+00261C     (base 16)		NEOVIA INC.
+				503 LOTTE IT CASTLE 1DONG,550-1
+				SEOUL    153-768
+				KR
+
+00-26-64   (hex)		Core System Japan
+002664     (base 16)		Core System Japan
+				Bunshu Bldg,2-27-6,Myojin
+				Hachioji  Tokyo  1920046
+				JP
+
+00-26-39   (hex)		T.M. Electronics, Inc.
+002639     (base 16)		T.M. Electronics, Inc.
+				45 Main St
+				Boylston  MA  01505
+				US
+
+00-25-C6   (hex)		kasercorp, ltd
+0025C6     (base 16)		kasercorp, ltd
+				South 20,Gaobu Road,Gaobu Town
+				Dongwan  Guangdong  523000
+				CN
+
+00-25-C5   (hex)		Star Link Communication Pvt. Ltd.
+0025C5     (base 16)		Star Link Communication Pvt. Ltd.
+				HR114/6 & Hr132/6, Pulprehladpur,
+				New Delhi    110044
+				IN
+
+00-25-C7   (hex)		altek Corporation
+0025C7     (base 16)		altek Corporation
+				3F, No. 10, Li-Hsin Road, Science-Based Industrial Park,
+				Hsinchu    
+				TW
+
+00-25-E6   (hex)		Belgian Monitoring Systems bvba
+0025E6     (base 16)		Belgian Monitoring Systems bvba
+				Th. Sevenslaan 106
+				Kortrijk  WVL  8500
+				BE
+
+00-25-E0   (hex)		CeedTec Sdn Bhd
+0025E0     (base 16)		CeedTec Sdn Bhd
+				303-4-5, Krystal Point Business Center
+				Bayan Lepas  Penang  11900
+				MY
+
+00-25-DE   (hex)		Probits Co., LTD.
+0025DE     (base 16)		Probits Co., LTD.
+				#1502, Kolon Science Valley II, 811
+				Seoul    152-878
+				KR
+
+00-25-B0   (hex)		Schmartz Inc
+0025B0     (base 16)		Schmartz Inc
+				2307 Valerian Trl
+				Round Rock  TX  78665
+				US
+
+00-25-AD   (hex)		Manufacturing Resources International
+0025AD     (base 16)		Manufacturing Resources International
+				6415 Shiloh Road East
+				Alpharetta  GA  30005
+				US
+
+00-25-AC   (hex)		I-Tech corporation
+0025AC     (base 16)		I-Tech corporation
+				1-15 Shin-ogawa machi
+				Shinjyuku-ku  Tokyo  162-0814
+				JP
+
+00-25-AB   (hex)		AIO LCD PC BU / TPV
+0025AB     (base 16)		AIO LCD PC BU / TPV
+				10F., No., 230, Liancheng Rd.
+				Zhonghe City  Taipei Taiwan  23553
+				TW
+
+00-25-EC   (hex)		Humanware
+0025EC     (base 16)		Humanware
+				445 rue du Parc Industriel
+				Longueuil  Québec  J4H 3V7
+				CA
+
+00-25-ED   (hex)		NuVo Technologies LLC
+0025ED     (base 16)		NuVo Technologies LLC
+				3015 Kustom Drive
+				Hebron  KY  41048
+				US
+
+00-25-E9   (hex)		i-mate Development, Inc.
+0025E9     (base 16)		i-mate Development, Inc.
+				8383 158th Ave. N.E., Suite 300, Redmond,
+				Washington  WA  98052-3871
+				US
+
+00-25-BA   (hex)		Alcatel-Lucent IPD
+0025BA     (base 16)		Alcatel-Lucent IPD
+				701 E. Middlefield Rd.
+				Mountain View  CA  94043
+				US
+
+00-25-BB   (hex)		INNERINT Co., Ltd.
+0025BB     (base 16)		INNERINT Co., Ltd.
+				Dongyoung CentralTower #202, Geumjung-dong,
+				Gunpo-si  Kyunggi-do  430050
+				KR
+
+00-25-B8   (hex)		Agile Communications, Inc.
+0025B8     (base 16)		Agile Communications, Inc.
+				810 Lawrence Dr
+				Thousand Oaks  California  91320
+				US
+
+00-25-B1   (hex)		Maya-Creation Corporation
+0025B1     (base 16)		Maya-Creation Corporation
+				3F, Building M-10, Centre od Hi-Tech Ind. Dist.
+				Shenzhen    518057
+				CN
+
+00-25-A1   (hex)		Enalasys
+0025A1     (base 16)		Enalasys
+				250 Avenida Campillo
+				Calexico  California  92231
+				US
+
+00-25-F3   (hex)		Nordwestdeutsche Zählerrevision
+0025F3     (base 16)		Nordwestdeutsche Zählerrevision
+				Ing. Aug. Knemeyer GmbH & Co. KG
+				Bad Laer  Niedersachsen  49196
+				DE
+
+00-25-DD   (hex)		SUNNYTEK INFORMATION CO., LTD.
+0025DD     (base 16)		SUNNYTEK INFORMATION CO., LTD.
+				12F, NO. 88, HSIN-TE ROAD
+				TAIPEI HSIEN    241
+				TW
+
+00-25-CE   (hex)		InnerSpace
+0025CE     (base 16)		InnerSpace
+				PO Box 2186
+				Grand Rapids  MI  49501
+				US
+
+00-25-49   (hex)		Jeorich Tech. Co.,Ltd.
+002549     (base 16)		Jeorich Tech. Co.,Ltd.
+				4F., No.6, Ln. 70, Sec. 2, Academia Rd., Nangang District, Taipei City 115, Taiwan (R.O.C.)
+				Taipei  Taiwan  110
+				TW
+
+00-25-39   (hex)		IfTA GmbH
+002539     (base 16)		IfTA GmbH
+				Industriestraße 33
+				Groebenzell  Bavaria  82194
+				DE
+
+00-25-37   (hex)		Runcom Technologies Ltd.
+002537     (base 16)		Runcom Technologies Ltd.
+				11 Moshe Levi Str. 11th Flr.
+				Rishon Le Zion    75658
+				IL
+
+00-25-38   (hex)		Samsung Electronics Co., Ltd., Memory Division
+002538     (base 16)		Samsung Electronics Co., Ltd., Memory Division
+				San #16 Banwol-Dong, Taean-Gu
+				Hwasung City  Gyeonggi Do  445-701
+				KR
+
+00-25-44   (hex)		LoJack Corporation
+002544     (base 16)		LoJack Corporation
+				780 Dedham Street
+				Canton  MA  02021
+				US
+
+00-25-32   (hex)		Digital Recorders
+002532     (base 16)		Digital Recorders
+				4018 Patriot Drive
+				Durham  NC  27709
+				US
+
+00-25-5D   (hex)		Morningstar Corporation
+00255D     (base 16)		Morningstar Corporation
+				10611 Iron Bridge Road
+				Jessup  MD  20794
+				US
+
+00-25-58   (hex)		MPEDIA
+002558     (base 16)		MPEDIA
+				Shinyoung Tower 12F 246-2
+				Seongnam  Gyeonggi-do  463-824
+				KR
+
+00-25-4A   (hex)		RingCube Technologies, Inc.
+00254A     (base 16)		RingCube Technologies, Inc.
+				100 West Evelyn Ave, Suite 210
+				Mountain View  CA  94041
+				US
+
+00-25-4F   (hex)		ELETTROLAB Srl
+00254F     (base 16)		ELETTROLAB Srl
+				Via Dell'Industria 25
+				San Vendemiano  Treviso  31020
+				IT
+
+00-25-83   (hex)		Cisco Systems, Inc
+002583     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-25-91   (hex)		NEXTEK, Inc.
+002591     (base 16)		NEXTEK, Inc.
+				410 Douglass Street
+				Reading  PA  19601
+				US
+
+00-25-8D   (hex)		Haier
+00258D     (base 16)		Haier
+				No.1,Haier Road
+				Qingdao  Shandong  266101
+				CN
+
+00-25-71   (hex)		Zhejiang Tianle Digital Electric Co.,Ltd
+002571     (base 16)		Zhejiang Tianle Digital Electric Co.,Ltd
+				No.8 Tianle Rd,Economic Development Zone
+				Shengzhou  Zhejiang  312400
+				CN
+
+00-25-9A   (hex)		CEStronics GmbH
+00259A     (base 16)		CEStronics GmbH
+				Friedrichstraße 243
+				Velbert    42551
+				DE
+
+00-25-02   (hex)		NaturalPoint
+002502     (base 16)		NaturalPoint
+				PO Box 2317
+				Corvallis  OR  97339
+				US
+
+00-24-F8   (hex)		Technical Solutions Company Ltd.
+0024F8     (base 16)		Technical Solutions Company Ltd.
+				Box 31750
+				Whitehorse  Yukon  Y1A 6L3
+				CA
+
+00-24-F9   (hex)		Cisco Systems, Inc
+0024F9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-F2   (hex)		Uniphone Telecommunication Co., Ltd.
+0024F2     (base 16)		Uniphone Telecommunication Co., Ltd.
+				No. 25, Chu-Kung 3rd Lane, Chu-Hou Tsung, Jen-Wu Hsiang,
+				Kaohsiung Hsien    81448
+				TW
+
+00-25-14   (hex)		PC Worth Int'l Co., Ltd.
+002514     (base 16)		PC Worth Int'l Co., Ltd.
+				18F, No.100, Sec. 1, Xintai 5th Rd., Xizhi Dist.,
+				New Taipei City  Taipei  22102
+				TW
+
+00-25-0B   (hex)		CENTROFACTOR  INC
+00250B     (base 16)		CENTROFACTOR  INC
+				Road Town, Tortola, P.O.Box 3161,
+				Tortola    194295
+				VG
+
+00-25-06   (hex)		A.I. ANTITACCHEGGIO ITALIA SRL
+002506     (base 16)		A.I. ANTITACCHEGGIO ITALIA SRL
+				VICOLO DELLE DAME 4
+				BOLOGNA    40124
+				IT
+
+00-25-1C   (hex)		EDT
+00251C     (base 16)		EDT
+				1400 SW Compton
+				Beaverton  OR  97008
+				US
+
+00-25-1A   (hex)		Psiber Data Systems Inc.
+00251A     (base 16)		Psiber Data Systems Inc.
+				7075-K Mission Gorge Rd
+				San Diego  CA  92120
+				US
+
+00-24-E1   (hex)		Convey Computer Corp.
+0024E1     (base 16)		Convey Computer Corp.
+				1302 E. Collins Blvd.
+				Richardson  TX  75081
+				US
+
+00-24-EE   (hex)		Wynmax Inc.
+0024EE     (base 16)		Wynmax Inc.
+				18F., No. 75, Sec. 1, XinTai 5th  Rd.,
+				Xizhi  City,  Taipei County  221
+				TW
+
+00-24-E3   (hex)		CAO Group
+0024E3     (base 16)		CAO Group
+				4628 West Skyhawk Drive
+				West Jordan  UT  84084
+				US
+
+00-25-07   (hex)		ASTAK Inc.
+002507     (base 16)		ASTAK Inc.
+				1911 Hartog Drive
+				San Jose  CA  95131
+				US
+
+00-24-D9   (hex)		BICOM, Inc.
+0024D9     (base 16)		BICOM, Inc.
+				755 Main Street
+				Monroe  CT  06468
+				US
+
+00-24-8E   (hex)		Infoware ZRt.
+00248E     (base 16)		Infoware ZRt.
+				Huseg u. 10/a
+				Budapest    1223
+				HU
+
+00-24-94   (hex)		Shenzhen Baoxin Tech CO., Ltd.
+002494     (base 16)		Shenzhen Baoxin Tech CO., Ltd.
+				6F Huale BLDG., Zhonghangbei Rd.,
+				Shenzhen  GuangDong  518028
+				CN
+
+00-24-89   (hex)		Vodafone Omnitel N.V.
+002489     (base 16)		Vodafone Omnitel N.V.
+				Via Jervis 13
+				10015  Ivrea  Torino
+				IT
+
+00-24-6F   (hex)		Onda Communication spa
+00246F     (base 16)		Onda Communication spa
+				via del lavoro 9
+				pordenone    33170
+				IT
+
+00-24-7F   (hex)		Nortel Networks
+00247F     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75081
+				US
+
+00-24-75   (hex)		Compass System(Embedded Dept.)
+002475     (base 16)		Compass System(Embedded Dept.)
+				1403 ACE TechnoTower 8th
+				Seoul    152-050
+				KR
+
+00-24-C3   (hex)		Cisco Systems, Inc
+0024C3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-B5   (hex)		Nortel Networks
+0024B5     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75081
+				US
+
+00-24-B0   (hex)		ESAB AB
+0024B0     (base 16)		ESAB AB
+				Box 8004
+				Göteborg    SE-402 77
+				SE
+
+00-24-C4   (hex)		Cisco Systems, Inc
+0024C4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-9D   (hex)		NES Technology Inc.
+00249D     (base 16)		NES Technology Inc.
+				#205 ACE Technotower 10, 470-5 Gasan-dong
+				Seoul    153-789
+				KR
+
+00-24-64   (hex)		Bridge Technologies Co AS
+002464     (base 16)		Bridge Technologies Co AS
+				Mølleparken 4
+				Oslo    0459
+				NO
+
+00-24-62   (hex)		Rayzone Corporation
+002462     (base 16)		Rayzone Corporation
+				#2008, B-Dong, Samho BLDG
+				Seoul    137-941
+				KR
+
+00-24-20   (hex)		NetUP Inc.
+002420     (base 16)		NetUP Inc.
+				Olof Palme st., 1, sect. 7
+				Moscow    119311
+				RU
+
+00-24-1E   (hex)		Nintendo Co., Ltd.
+00241E     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-24-1F   (hex)		DCT-Delta GmbH
+00241F     (base 16)		DCT-Delta GmbH
+				Bodanrückstraße 1
+				Bodman - Ludwigshafen  Baden-Württemberg  78351
+				DE
+
+00-24-0E   (hex)		Inventec Besta Co., Ltd.
+00240E     (base 16)		Inventec Besta Co., Ltd.
+				10FL, No.36, Lane 513, Rui Guang Road, Nei Hu Dist.
+				Taipei    114
+				TW
+
+00-24-60   (hex)		Giaval Science Development Co. Ltd.
+002460     (base 16)		Giaval Science Development Co. Ltd.
+				58 Bei Si Huan Xi Rd
+				  Beijing  100080
+				CN
+
+00-24-5C   (hex)		Design-Com Technologies Pty. Ltd.
+00245C     (base 16)		Design-Com Technologies Pty. Ltd.
+				14 Redland Drive
+				Mitcham  Victoria  3132
+				AU
+
+00-24-3D   (hex)		Emerson Appliance Motors and Controls
+00243D     (base 16)		Emerson Appliance Motors and Controls
+				1901 South St.
+				Elgin  IL  60123
+				US
+
+00-24-37   (hex)		Motorola - BSG
+002437     (base 16)		Motorola - BSG
+				1101 Marina Village Pkwy
+				Alameda  CA  94501
+				US
+
+00-24-44   (hex)		Nintendo Co., Ltd.
+002444     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-24-13   (hex)		Cisco Systems, Inc
+002413     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-4F   (hex)		Asantron Technologies Ltd.
+00244F     (base 16)		Asantron Technologies Ltd.
+				3F-1, No.30 Jihe Rd., 111
+				Taipei    11166
+				TW
+
+00-23-DD   (hex)		ELGIN S.A.
+0023DD     (base 16)		ELGIN S.A.
+				RUA BARAO DE CAMPINAS, 305
+				São Paulo    01201-901
+				BR
+
+00-23-DE   (hex)		Ansync Inc.
+0023DE     (base 16)		Ansync Inc.
+				4970 Robert J Matthews Pky
+				El Dorado Hills  CA  95762
+				US
+
+00-23-D9   (hex)		Banner Engineering
+0023D9     (base 16)		Banner Engineering
+				9714 10th Ave. N.
+				Plymouth  MN  55441
+				US
+
+00-23-DA   (hex)		Industrial Computer Source (Deutschland)GmbH
+0023DA     (base 16)		Industrial Computer Source (Deutschland)GmbH
+				Marie-Curie-Straße 9
+				Pulheim  NRW  50259
+				DE
+
+00-24-05   (hex)		Dilog Nordic AB
+002405     (base 16)		Dilog Nordic AB
+				Faktorvägen 9
+				Kungsbacka  Halland  439 34
+				SE
+
+00-23-E8   (hex)		Demco Corp.
+0023E8     (base 16)		Demco Corp.
+				#919, Doosan Venturedigm, 126-1
+				Anyang-Si  Kyungki-Do  431-070
+				US
+
+00-23-E3   (hex)		Microtronic AG
+0023E3     (base 16)		Microtronic AG
+				Duennernstrasse 32
+				Oensingen  Solothurn  4702
+				CH
+
+00-23-B7   (hex)		Q-Light Co., Ltd.
+0023B7     (base 16)		Q-Light Co., Ltd.
+				178-1 Woogye-Ri, Sangdong-Myun,
+				Gimhae-Si  GyungsangNam-Do  621-812
+				KR
+
+00-23-FD   (hex)		AFT Atlas Fahrzeugtechnik GmbH
+0023FD     (base 16)		AFT Atlas Fahrzeugtechnik GmbH
+				Gewerbestraße 14
+				Werdohl    58791
+				DE
+
+00-23-EF   (hex)		Zuend Systemtechnik AG
+0023EF     (base 16)		Zuend Systemtechnik AG
+				Industriestrasse 8
+				Altstaetten  SG  9450
+				CH
+
+00-23-AC   (hex)		Cisco Systems, Inc
+0023AC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-23-D8   (hex)		Ball-It Oy
+0023D8     (base 16)		Ball-It Oy
+				Uusikatu 24 G 76
+				Oulu    90100
+				FI
+
+00-23-9F   (hex)		Institut für Prüftechnik
+00239F     (base 16)		Institut für Prüftechnik
+				Schulstraße 3
+				Todtenweis  Bayern  86447
+				DE
+
+00-23-9D   (hex)		Mapower Electronics Co., Ltd
+00239D     (base 16)		Mapower Electronics Co., Ltd
+				No. 50 Minquan Road
+				Taoyuan County    33846
+				TW
+
+00-23-9C   (hex)		Juniper Networks
+00239C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-23-98   (hex)		Vutlan sro
+002398     (base 16)		Vutlan sro
+				ul. Svornosti 43
+				Bratislava  BA  82 106
+				SK
+
+00-23-5B   (hex)		Gulfstream
+00235B     (base 16)		Gulfstream
+				32 Lummus Drive
+				Savannah  GA  31407
+				US
+
+00-23-59   (hex)		Benchmark Electronics ( Thailand ) Public Company Limited
+002359     (base 16)		Benchmark Electronics ( Thailand ) Public Company Limited
+				94 Moo 1, Hi-Tech Industrial Estate
+				Bang Pa-in  Ayudhaya  13160
+				TH
+
+00-23-57   (hex)		Pitronot Technologies and Engineering P.T.E. Ltd.
+002357     (base 16)		Pitronot Technologies and Engineering P.T.E. Ltd.
+				8 Hatut st
+				Pardesiya    42815
+				IL
+
+00-23-55   (hex)		Kinco Automation(Shanghai) Ltd.
+002355     (base 16)		Kinco Automation(Shanghai) Ltd.
+				Bldg1, No.1387, Zhangdong Road,
+				  Shanghai  201203
+				CN
+
+00-23-73   (hex)		GridIron Systems, Inc.
+002373     (base 16)		GridIron Systems, Inc.
+				726 Palomar Ave
+				Sunnyvale  CA  94085
+				US
+
+00-23-67   (hex)		UniControls a.s.
+002367     (base 16)		UniControls a.s.
+				Krenicka 2257
+				Prague 10    100 00
+				CZ
+
+00-23-68   (hex)		Zebra Technologies Inc
+002368     (base 16)		Zebra Technologies Inc
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+00-23-6E   (hex)		Burster GmbH & Co KG
+00236E     (base 16)		Burster GmbH & Co KG
+				Talstraße 1-5
+				Gernsbach  Baden-Württemberg  76593
+				DE
+
+00-23-66   (hex)		Beijing Siasun Electronic System Co.,Ltd.
+002366     (base 16)		Beijing Siasun Electronic System Co.,Ltd.
+				Rm.1018 Huatian Bldg, No.6 Bei Xiaomachang
+				Beijing    100038
+				CN
+
+00-23-8F   (hex)		NIDEC COPAL CORPORATION
+00238F     (base 16)		NIDEC COPAL CORPORATION
+				2-18-10,SHIMURA
+				ITABASHI-KU  TOKYO  174-8550
+				JP
+
+00-23-80   (hex)		Nanoteq
+002380     (base 16)		Nanoteq
+				 PO Box 7991
+				Centurion  Gauteng  0046
+				ZA
+
+00-23-3D   (hex)		Laird Technologies
+00233D     (base 16)		Laird Technologies
+				Meesmannstrasse 103
+				Bochum    44807
+				DE
+
+00-23-3F   (hex)		Purechoice Inc
+00233F     (base 16)		Purechoice Inc
+				11481 Rupp Drive
+				Burnsville  MN  55337
+				US
+
+00-23-1B   (hex)		Danaher Motion - Kollmorgen
+00231B     (base 16)		Danaher Motion - Kollmorgen
+				201 W. Rock Road
+				Radford  VA  24141
+				US
+
+00-23-1E   (hex)		Cezzer Multimedia Technologies
+00231E     (base 16)		Cezzer Multimedia Technologies
+				Pépinière d'entreprises CREATIC
+				Plouzané    29280
+				FR
+
+00-23-1F   (hex)		Guangda Electronic & Telecommunication Technology Development Co., Ltd.
+00231F     (base 16)		Guangda Electronic & Telecommunication Technology Development Co., Ltd.
+				#8 Gaopengdong Road, Gaoxin District
+				Chengdu  Sichuan  610041
+				CN
+
+00-22-70   (hex)		ABK North America, LLC
+002270     (base 16)		ABK North America, LLC
+				440 North Wolfe Rd.
+				Sunnyvale  CA  94085
+				US
+
+00-23-13   (hex)		Qool Technologies Ltd.
+002313     (base 16)		Qool Technologies Ltd.
+				Gotanda Chuo Bldg 8f, 2-3-5
+				Shinagawa-ku  Tokyo  141-0022
+				JP
+
+00-23-10   (hex)		LNC Technology Co., Ltd.
+002310     (base 16)		LNC Technology Co., Ltd.
+				19F, No. 78-2, Sec. 3, Taichung Kang Rd.
+				Taichung    40764
+				TW
+
+00-22-CD   (hex)		Ared Technology Co., Ltd.
+0022CD     (base 16)		Ared Technology Co., Ltd.
+				6F-8 No.83 Sec.1, Nankan Rd. Luzhu Shiang
+				Taoyuan County  Taiwan  33859
+				TW
+
+00-22-CC   (hex)		SciLog, Inc.
+0022CC     (base 16)		SciLog, Inc.
+				8845 South Greenview Drive
+				Middleton  Wisconsin  53562
+				US
+
+00-22-CB   (hex)		IONODES Inc.
+0022CB     (base 16)		IONODES Inc.
+				4001 boulevard Industriel
+				Laval  Quebec  H7L4S3
+				CA
+
+00-22-C6   (hex)		Sutus Inc
+0022C6     (base 16)		Sutus Inc
+				301-3999 Henning Drive
+				Burnaby  British Columbia  V5C 6P9
+				CA
+
+00-22-E8   (hex)		Applition Co., Ltd.
+0022E8     (base 16)		Applition Co., Ltd.
+				509-1, Bundang Techno Park D-dong,
+				SeongNam  Kyunggi-do  463-760
+				KR
+
+00-22-E9   (hex)		ProVision Communications
+0022E9     (base 16)		ProVision Communications
+				1 Portland Square
+				Bristol    BS2 8RR
+				GB
+
+00-22-E6   (hex)		Intelligent Data
+0022E6     (base 16)		Intelligent Data
+				Edf. Inverinnova – Avda. Punto Mobi, 4. Parque Científico Tecnológico
+				Alcalá de Henares  Madrid  28805
+				ES
+
+00-22-E3   (hex)		Amerigon
+0022E3     (base 16)		Amerigon
+				21680 Haggerty Road
+				Northville  Michigan  48167
+				US
+
+00-22-EB   (hex)		Data Respons A/S
+0022EB     (base 16)		Data Respons A/S
+				Ellekær 6
+				Herlev    2730
+				DK
+
+00-22-EF   (hex)		iWDL Technologies
+0022EF     (base 16)		iWDL Technologies
+				10522 Meinert Rd
+				Wexford  PA  15090
+				US
+
+00-22-F2   (hex)		SunPower Corp
+0022F2     (base 16)		SunPower Corp
+				1414 Harbour Way South
+				Richmond  CA  94804
+				US
+
+00-22-E2   (hex)		WABTEC Transit Division
+0022E2     (base 16)		WABTEC Transit Division
+				130 Ridgeview Circle
+				Duncan  SC  29334
+				US
+
+00-23-01   (hex)		Witron Technology Limited
+002301     (base 16)		Witron Technology Limited
+				6/F, Xin Rui Building, 32 Tao Hua Road, Futian Free Trade Zone,
+				  Shenzhen  86
+				CN
+
+00-22-F7   (hex)		Conceptronic
+0022F7     (base 16)		Conceptronic
+				Databankweg 7
+				AMERSFOORT  utrecht  3821 AL
+				NL
+
+00-23-0C   (hex)		CLOVER ELECTRONICS CO.,LTD.
+00230C     (base 16)		CLOVER ELECTRONICS CO.,LTD.
+				AKENO 306-1
+				ISE City  MIE Prefecture  519-0501
+				JP
+
+00-23-34   (hex)		Cisco Systems, Inc
+002334     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-22-C8   (hex)		Applied Instruments B.V.
+0022C8     (base 16)		Applied Instruments B.V.
+				Dynamoweg 3
+				Vlissingen  Zeeland  NL-4382WZ
+				NL
+
+00-22-C0   (hex)		Shenzhen Forcelink Electronic Co, Ltd
+0022C0     (base 16)		Shenzhen Forcelink Electronic Co, Ltd
+				2nd and 3rd floor, Hasse manufacture building, Hasee industrial park
+				Shenzhen  Guangdong  518112
+				CN
+
+00-22-A6   (hex)		Sony Computer Entertainment America
+0022A6     (base 16)		Sony Computer Entertainment America
+				919 East Hillsdale Blvd
+				Foster City  California  94404-2175
+				US
+
+00-22-A7   (hex)		Tyco Electronics AMP GmbH
+0022A7     (base 16)		Tyco Electronics AMP GmbH
+				Amperestraße 12-14
+				Bensheim  Hessen  64625
+				DE
+
+00-22-A1   (hex)		Huawei Symantec Technologies Co.,Ltd.
+0022A1     (base 16)		Huawei Symantec Technologies Co.,Ltd.
+				Building 1,The West Zone Science Park of UESTC,No.88,Tianchen Road
+				Chengdu  Sichuan  611731
+				CN
+
+00-22-9D   (hex)		PYUNG-HWA IND.CO.,LTD
+00229D     (base 16)		PYUNG-HWA IND.CO.,LTD
+				230-1
+				HWASUNG-SI  KYUNGGI-DO  445-912
+				KR
+
+00-22-96   (hex)		LinoWave Corporation
+002296     (base 16)		LinoWave Corporation
+				1001-101 Champlain Avenue
+				Burlington  Ontario  L7L 5Z4
+				CA
+
+00-22-44   (hex)		Chengdu Linkon Communications Device Co., Ltd
+002244     (base 16)		Chengdu Linkon Communications Device Co., Ltd
+				5f-02, Juntong Building, No. 53,Shuangfeng Road, Wuhou District,
+				Chengdu  Sichuan  610041
+				CN
+
+00-22-50   (hex)		Point Six Wireless, LLC
+002250     (base 16)		Point Six Wireless, LLC
+				2333 Alumni Park Plaza
+				Lexington  KY  40517
+				US
+
+00-22-6F   (hex)		3onedata Technology Co. Ltd.
+00226F     (base 16)		3onedata Technology Co. Ltd.
+				3/F, B/2, Jiuxiangling Industrial District, Xili Town, Nanshan District,
+				Shenzhen  Guangdong  518055
+				CN
+
+00-22-78   (hex)		Shenzhen  Tongfang Multimedia  Technology Co.,Ltd.
+002278     (base 16)		Shenzhen  Tongfang Multimedia  Technology Co.,Ltd.
+				2f Sector D of TongFang Information Harbor
+				Nanshan District, Shenzhen  GuangDong  518058
+				CN
+
+00-22-7A   (hex)		Telecom Design
+00227A     (base 16)		Telecom Design
+				Za Remora
+				33170  Gradignan  
+				FR
+
+00-22-60   (hex)		AFREEY Inc.
+002260     (base 16)		AFREEY Inc.
+				6F, No.249, Chien I Road
+				Chung Ho City  Taipei County  235
+				TW
+
+00-21-EF   (hex)		Kapsys
+0021EF     (base 16)		Kapsys
+				790 Av du Docteur Maurice Donat
+				06250 Mougins  Sophia Antipolis  
+				FR
+
+00-21-ED   (hex)		Telegesis
+0021ED     (base 16)		Telegesis
+				84 Station Road
+				Marlow  Bucks  SL7 1NX
+				GB
+
+00-21-EB   (hex)		ESP SYSTEMS, LLC
+0021EB     (base 16)		ESP SYSTEMS, LLC
+				1422 East Fourth Street
+				Charlotte  NC  28204
+				US
+
+00-22-37   (hex)		Shinhint Group
+002237     (base 16)		Shinhint Group
+				Unit 1506, 15/F, Nanyang Plaza,, 57 Hung To Road,
+				    
+				HK
+
+00-22-2F   (hex)		Open Grid Computing, Inc.
+00222F     (base 16)		Open Grid Computing, Inc.
+				4030-1 West Braker Lane STE130
+				Austin  TX  78759
+				US
+
+00-21-F6   (hex)		Oracle Corporation
+0021F6     (base 16)		Oracle Corporation
+				900 Chelmsford Street
+				Lowell  MA  01851
+				US
+
+00-22-06   (hex)		Cyberdyne Inc.
+002206     (base 16)		Cyberdyne Inc.
+				504 @C49-2
+				Tsukuba-shi  Ibaraki-ken  305-0817
+				JP
+
+00-22-02   (hex)		Excito Elektronik i Skåne AB
+002202     (base 16)		Excito Elektronik i Skåne AB
+				Box 126
+				Löddeköpinge    246 22
+				SE
+
+00-22-27   (hex)		uv-electronic GmbH
+002227     (base 16)		uv-electronic GmbH
+				Grosswiesenstraße 20
+				Durchhausen  Baden-Württemberg  78591
+				DE
+
+00-22-1E   (hex)		Media Devices Co., Ltd.
+00221E     (base 16)		Media Devices Co., Ltd.
+				Rm1002 Ace TechnoTower(9th) 345-30
+				Seoul    153-802
+				KR
+
+00-22-25   (hex)		Thales Avionics Ltd
+002225     (base 16)		Thales Avionics Ltd
+				86 Bushey Road
+				London    SW20 0JW
+				GB
+
+00-22-20   (hex)		Mitac Technology Corp
+002220     (base 16)		Mitac Technology Corp
+				9th Fl., #75, Min-sheng E. Road, Sec. 3,
+				Taipei    104
+				TW
+
+00-22-0E   (hex)		Indigo Security Co., Ltd.
+00220E     (base 16)		Indigo Security Co., Ltd.
+				2nd Floor, 277-169 Sungsoo2-Ga, Sungdong-Gu
+				Seoul    133-832
+				KR
+
+00-22-07   (hex)		Inteno Broadband Technology AB
+002207     (base 16)		Inteno Broadband Technology AB
+				Stensätravägen 13
+				Skärholmen  SE  127 39 
+				SE
+
+00-22-3E   (hex)		IRTrans GmbH
+00223E     (base 16)		IRTrans GmbH
+				Einsteinstrasse 14
+				Unterschleissheim  BAYERN  85716
+				DE
+
+00-21-CE   (hex)		NTC-Metrotek
+0021CE     (base 16)		NTC-Metrotek
+				9, Nevzorovoy street
+				Saint-Petersburg    192148
+				RU
+
+00-21-CA   (hex)		ART System Co., Ltd.
+0021CA     (base 16)		ART System Co., Ltd.
+				Mobile Techno Bldg Room 910
+				Dae-Gu    702-020
+				KR
+
+00-21-CB   (hex)		SMS TECNOLOGIA ELETRONICA LTDA
+0021CB     (base 16)		SMS TECNOLOGIA ELETRONICA LTDA
+				Av. Pirâmide, 661
+				DIADEMA  São Paulo  09970330
+				BR
+
+00-21-C8   (hex)		LOHUIS Networks
+0021C8     (base 16)		LOHUIS Networks
+				2681 TV Monster
+				Votlaan 408  Votlaan  31
+				NL
+
+00-21-DB   (hex)		Santachi Video Technology (Shenzhen) Co., Ltd.
+0021DB     (base 16)		Santachi Video Technology (Shenzhen) Co., Ltd.
+				Santachi Building,#14 Kaifeng Road,Meilin,
+				Shenzhen  Guangdong  518049
+				CN
+
+00-21-BF   (hex)		Hitachi High-Tech Control Systems Corporation
+0021BF     (base 16)		Hitachi High-Tech Control Systems Corporation
+				500,Miyu-cho
+				Mito-shi  Ibaraki-ken  319-0316
+				JP
+
+00-21-BC   (hex)		ZALA COMPUTER
+0021BC     (base 16)		ZALA COMPUTER
+				EL BOUNI
+				ANNABA    23000
+				DZ
+
+00-21-B4   (hex)		APRO MEDIA CO., LTD
+0021B4     (base 16)		APRO MEDIA CO., LTD
+				#13-5,Dodang-Dong,Wonmi-Gu,
+				Bucheon-City  Kyunggi-Do  420-801
+				KR
+
+00-21-A8   (hex)		Telephonics Corporation
+0021A8     (base 16)		Telephonics Corporation
+				815 Broad Hollow Road
+				Farmingdale  New York  11790
+				US
+
+00-21-A9   (hex)		Mobilink Telecom Co.,Ltd
+0021A9     (base 16)		Mobilink Telecom Co.,Ltd
+				292-3 Sindang-ri, Sandong-myun
+				Gumi  Gyeongbuk  730-853
+				KR
+
+00-21-8D   (hex)		AP Router Ind. Eletronica LTDA
+00218D     (base 16)		AP Router Ind. Eletronica LTDA
+				Av. Lomanto Junior, 1000
+				Ilheus  Bahia  45654-000
+				BR
+
+00-21-90   (hex)		Goliath Solutions
+002190     (base 16)		Goliath Solutions
+				3082 Sterling Circle
+				Boulder  Colorado  80301
+				US
+
+00-21-85   (hex)		MICRO-STAR INT'L CO.,LTD.
+002185     (base 16)		MICRO-STAR INT'L CO.,LTD.
+				No.69,Li-De St,Jung-Ho City
+				Taipei Hsien    235
+				TW
+
+00-21-9F   (hex)		SATEL OY
+00219F     (base 16)		SATEL OY
+				Meriniitynkatu 17
+				SALO  Lansi-Suomen Laani  24100
+				FI
+
+00-21-96   (hex)		Telsey  S.p.A.
+002196     (base 16)		Telsey  S.p.A.
+				Viale dell'Industria, 1
+				Quinto  DiTreviso  31055
+				IT
+
+00-21-82   (hex)		SandLinks Systems, Ltd.
+002182     (base 16)		SandLinks Systems, Ltd.
+				P.O.Box 4629
+				Petah-Tiqwa  Israel  49277
+				IL
+
+00-21-83   (hex)		ANDRITZ HYDRO GmbH
+002183     (base 16)		ANDRITZ HYDRO GmbH
+				Eibesbrunnergasse 20
+				Vienna    1120
+				AT
+
+00-21-DF   (hex)		Martin Christ GmbH
+0021DF     (base 16)		Martin Christ GmbH
+				An der Unteren Soese 50
+				Osterode  Niedersachsen  37520
+				DE
+
+00-21-D4   (hex)		Vollmer Werke GmbH
+0021D4     (base 16)		Vollmer Werke GmbH
+				Maschinenfabrik
+				Biberach  Baden-Württemberg  88400
+				DE
+
+00-21-D6   (hex)		LXI Consortium
+0021D6     (base 16)		LXI Consortium
+				P.O. Box 1016
+				Niwot  CO  80544-1016
+				US
+
+00-21-A6   (hex)		Videotec Spa
+0021A6     (base 16)		Videotec Spa
+				Via Friuli,6
+				Schio  Vicenza  36015
+				IT
+
+00-21-59   (hex)		Juniper Networks
+002159     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-21-55   (hex)		Cisco Systems, Inc
+002155     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-21-57   (hex)		National Datacast, Inc.
+002157     (base 16)		National Datacast, Inc.
+				2100 Crystal Drive, Suite 750
+				Arlington  VA  22202
+				US
+
+00-21-3B   (hex)		Berkshire Products, Inc
+00213B     (base 16)		Berkshire Products, Inc
+				PO Box 2819
+				Cumming  GA  30028
+				US
+
+00-21-37   (hex)		Bay Controls, LLC
+002137     (base 16)		Bay Controls, LLC
+				6528 Weatherfield Ct
+				Maumee  OH  43537
+				US
+
+00-21-39   (hex)		Escherlogic Inc.
+002139     (base 16)		Escherlogic Inc.
+				1481 Rosebank Rd.
+				Pickering  Ontario  L1V 1P3
+				CA
+
+00-21-2C   (hex)		SemIndia System Private Limited
+00212C     (base 16)		SemIndia System Private Limited
+				No. 1106/9, A.M Industrial Estate, Garvebhavipalya
+				Bangalore  Karnataka  560 068
+				IN
+
+00-21-2B   (hex)		MSA Auer
+00212B     (base 16)		MSA Auer
+				Thiemannstraße 1
+				Berlin    12059
+				DE
+
+00-21-74   (hex)		AvaLAN Wireless
+002174     (base 16)		AvaLAN Wireless
+				958 San Leandro Ave, Suite 900
+				Mountain View  CA  94043
+				US
+
+00-21-79   (hex)		IOGEAR, Inc.
+002179     (base 16)		IOGEAR, Inc.
+				23 Hubble
+				Irvine  CA  92618
+				US
+
+00-21-68   (hex)		iVeia, LLC
+002168     (base 16)		iVeia, LLC
+				51 Franklin Street
+				Annapolis  MD  21401
+				US
+
+00-21-50   (hex)		EYEVIEW ELECTRONICS
+002150     (base 16)		EYEVIEW ELECTRONICS
+				3 Floor, No. 86, Kung Yeh 32 Road
+				TAICHUNG    407
+				TW
+
+00-21-4D   (hex)		Guangzhou Skytone Transmission Technology Com. Ltd.
+00214D     (base 16)		Guangzhou Skytone Transmission Technology Com. Ltd.
+				3/F West, Block 4, Huangzhou
+				Guangzhou  Guangdong  510660
+				CN
+
+00-21-2A   (hex)		Audiovox Corporation
+00212A     (base 16)		Audiovox Corporation
+				150 Marcus Blvd
+				Hauppauge  NY  11788
+				US
+
+00-21-5E   (hex)		IBM Corp
+00215E     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-1F-F6   (hex)		PS Audio International
+001FF6     (base 16)		PS Audio International
+				4826 Sterling Drive
+				Boulder  CO  80301
+				US
+
+00-21-10   (hex)		Clearbox Systems
+002110     (base 16)		Clearbox Systems
+				Suite 2, Level 2
+				Macquarie Park  NSW  2113
+				AU
+
+00-21-0C   (hex)		Cymtec Systems, Inc.
+00210C     (base 16)		Cymtec Systems, Inc.
+				10845 Olive Bouleveard
+				St Louis  MO  63141
+				US
+
+00-21-0B   (hex)		GEMINI TRAZE RFID PVT. LTD.
+00210B     (base 16)		GEMINI TRAZE RFID PVT. LTD.
+				1, DR. RANGA ROAD
+				CHENNAI  TAMILNADU  600018
+				IN
+
+00-1F-DD   (hex)		GDI LLC
+001FDD     (base 16)		GDI LLC
+				One MidAmerica Plaza
+				Oakbrook Terrace  IL  60181
+				US
+
+00-1F-DA   (hex)		Nortel Networks
+001FDA     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75081
+				US
+
+00-21-04   (hex)		Gigaset Communications GmbH
+002104     (base 16)		Gigaset Communications GmbH
+				Frankenstrasse 2
+				46395  Bocholt  
+				DE
+
+00-1F-FB   (hex)		Green Packet Bhd
+001FFB     (base 16)		Green Packet Bhd
+				Lot 1-4, Incubator 2, Technology Park Malaysia
+				Kuala Lumpur  Wilayah Persekutuan  57000
+				MY
+
+00-1F-E9   (hex)		Printrex, Inc.
+001FE9     (base 16)		Printrex, Inc.
+				276 East Gish Road
+				San Jose  CA  95112
+				US
+
+00-1F-F0   (hex)		Audio Partnership
+001FF0     (base 16)		Audio Partnership
+				Gallery Court
+				London    SE1 4BB
+				GB
+
+00-1F-EA   (hex)		Applied Media Technologies Corporation
+001FEA     (base 16)		Applied Media Technologies Corporation
+				4091 AMTC Center Drive
+				Clearwater  FL  33764
+				US
+
+00-1F-D9   (hex)		RSD Communications Ltd
+001FD9     (base 16)		RSD Communications Ltd
+				8 Borrowmeadow Road
+				Stirling  Scotland  FK7 7UW
+				GB
+
+00-1F-CE   (hex)		QTECH LLC
+001FCE     (base 16)		QTECH LLC
+				Novozavodskaya st. 18 build. 1
+				Moscow  Moscow region  121309
+				RU
+
+00-1F-8B   (hex)		Cache IQ
+001F8B     (base 16)		Cache IQ
+				8834 North Capital of Texas Hwy
+				Austin  Texas  78759
+				US
+
+00-1F-85   (hex)		Apriva ISS, LLC
+001F85     (base 16)		Apriva ISS, LLC
+				6900 E Camelback Rd
+				Scottsdale  AZ  85251
+				US
+
+00-1F-87   (hex)		Skydigital Inc.
+001F87     (base 16)		Skydigital Inc.
+				#28-9 Wonhyoro1-ga, Yongsan-gu,
+				Seoul    140-846
+				KR
+
+00-1F-88   (hex)		FMS Force Measuring Systems AG
+001F88     (base 16)		FMS Force Measuring Systems AG
+				Aspstrasse 6
+				Oberglatt  Zurich  8154
+				CH
+
+00-1F-86   (hex)		digEcor
+001F86     (base 16)		digEcor
+				1625 N. 1100 W.
+				Springville  UT  84663
+				US
+
+00-1F-A1   (hex)		Gtran Inc
+001FA1     (base 16)		Gtran Inc
+				2651 Lavery Court
+				Newbury Park  CA  91320
+				US
+
+00-1F-9F   (hex)		Thomson Telecom Belgium
+001F9F     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				Edegem  Antwerp  B-2650
+				BE
+
+00-1F-99   (hex)		SERONICS co.ltd
+001F99     (base 16)		SERONICS co.ltd
+				#401 Technopolis,
+				Daegu  Gyeong-buk  704-230
+				KR
+
+00-1F-80   (hex)		Lucas Holding bv
+001F80     (base 16)		Lucas Holding bv
+				Domein 28
+				Gemert  NB  5421AR
+				NL
+
+00-1B-58   (hex)		ACE CAD Enterprise Co., Ltd.
+001B58     (base 16)		ACE CAD Enterprise Co., Ltd.
+				2F, No. 94, Bao Chung Road,
+				Hsin Tien City,  Taipei Hsien  23144
+				TW
+
+00-1F-B0   (hex)		TimeIPS, Inc.
+001FB0     (base 16)		TimeIPS, Inc.
+				3522 N Comotara St
+				Wichita  KS  67226
+				US
+
+00-1F-AE   (hex)		Blick South Africa (Pty) Ltd
+001FAE     (base 16)		Blick South Africa (Pty) Ltd
+				PO Box 1908
+				Johannesburg  Gauteng  2108
+				ZA
+
+00-1F-79   (hex)		Lodam Electronics A/S
+001F79     (base 16)		Lodam Electronics A/S
+				Kærvej 77
+				Sønderborg  Als  DK-6400
+				DK
+
+00-1F-71   (hex)		xG Technology, Inc.
+001F71     (base 16)		xG Technology, Inc.
+				240 S. Pineapple Avenue
+				Sarasota  FL  34236
+				US
+
+00-1F-A5   (hex)		Blue-White Industries
+001FA5     (base 16)		Blue-White Industries
+				5300 Business Drive
+				Huntington Beach  CA  92649
+				US
+
+00-1F-9D   (hex)		Cisco Systems, Inc
+001F9D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1F-96   (hex)		APROTECH CO.LTD
+001F96     (base 16)		APROTECH CO.LTD
+				KOLONDIGITAL TOWER ASTON 201, 505-14
+				SEOUL    KSXX 0022
+				KR
+
+00-1F-6C   (hex)		Cisco Systems, Inc
+001F6C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1F-6F   (hex)		Fujian Sunnada Communication Co.,Ltd.
+001F6F     (base 16)		Fujian Sunnada Communication Co.,Ltd.
+				7/F Main Building,Fujian Torch Hi-Tech Innovation Park No.611 Industrial Road,Fuzhou Fuzhou Fujian China  350002 
+				Fuzhou  Fujian  350002
+				CN
+
+00-1F-60   (hex)		COMPASS SYSTEMS CORP.
+001F60     (base 16)		COMPASS SYSTEMS CORP.
+				6F, No. 413, Sec. 2, Ti-Ding Blvd.,
+				Taipei  NeihuDist  114
+				TW
+
+00-1F-6A   (hex)		PacketFlux Technologies, Inc.
+001F6A     (base 16)		PacketFlux Technologies, Inc.
+				50 11th Avenue
+				Helena  MT  59601
+				US
+
+00-1F-65   (hex)		KOREA ELECTRIC TERMINAL CO., LTD.
+001F65     (base 16)		KOREA ELECTRIC TERMINAL CO., LTD.
+				#7-38 SONGDO-DONG
+				YEONSU-GU  INCHEON  406-840
+				KR
+
+00-1F-17   (hex)		IDX Company, Ltd.
+001F17     (base 16)		IDX Company, Ltd.
+				6-28-11 Shukugawara, Tana-ku
+				Kawasaki-Shi  Kanagawa-Ken  2140021
+				JP
+
+00-1F-1B   (hex)		RoyalTek Company Ltd.
+001F1B     (base 16)		RoyalTek Company Ltd.
+				Suite 9F-1, No. 1071, Chung Cheng Rd.
+				Taoyuan Shien  Taoyuan  330
+				TW
+
+00-1F-5E   (hex)		Dyna Technology Co.,Ltd.
+001F5E     (base 16)		Dyna Technology Co.,Ltd.
+				HaoHai Building 1F,No.7,5th Street,Shangdi,
+				Beijing    100085
+				CN
+
+00-1F-55   (hex)		Honeywell Security (China) Co., Ltd.
+001F55     (base 16)		Honeywell Security (China) Co., Ltd.
+				Block 28, Section 2, Huai  De Cui Gang Industrial  Estate, Fu Yong, Bao An, ShenZhen, P.R. China
+				ShenZhen  GuangDong  518103
+				CN
+
+00-1F-54   (hex)		Lorex Technology Inc.
+001F54     (base 16)		Lorex Technology Inc.
+				250 Royal Crest Court
+				Markham  Ontario  L3R3S1
+				CA
+
+00-1F-2E   (hex)		Triangle Research Int'l Pte Ltd
+001F2E     (base 16)		Triangle Research Int'l Pte Ltd
+				10 Ubi Crescent #05-83
+				Ubi Techpark  SG  408664
+				SG
+
+00-1F-4B   (hex)		Lineage Power
+001F4B     (base 16)		Lineage Power
+				3000 Skyline Dr.
+				Mesquite  TX  75149
+				US
+
+00-1F-0D   (hex)		L3 Communications - Telemetry West
+001F0D     (base 16)		L3 Communications - Telemetry West
+				9020 Balboa Ave
+				San Diego  CA  92123
+				US
+
+00-1E-FC   (hex)		JSC MASSA-K
+001EFC     (base 16)		JSC MASSA-K
+				15, A, Pirogovskaya nab.
+				Saint-Petersburg  Leningradskiy reg.  194044
+				RU
+
+00-1F-23   (hex)		Interacoustics
+001F23     (base 16)		Interacoustics
+				Drejervaenget 8
+				Assens  DK  5610
+				DK
+
+00-1F-06   (hex)		Integrated Dispatch Solutions
+001F06     (base 16)		Integrated Dispatch Solutions
+				645 Mountain Ave
+				Wyckoff  NJ  07481
+				US
+
+00-1E-BA   (hex)		High Density Devices AS
+001EBA     (base 16)		High Density Devices AS
+				Vestre Strandgate 26
+				Kristiansand    4611
+				NO
+
+00-1E-B8   (hex)		Aloys, Inc
+001EB8     (base 16)		Aloys, Inc
+				#3F HANWHA TECHWIN R&D BLDG. 4-5, YANGHYEON-RO 405 BEON-GIL,
+				JUNGWON-GU, SEONGNAM-SI  GYEONGGI-DO  13438
+				KR
+
+00-1E-B4   (hex)		UNIFAT TECHNOLOGY LTD.
+001EB4     (base 16)		UNIFAT TECHNOLOGY LTD.
+				7/FLOOR, SUI HONG IND. BLDG.,
+				KWAI CHUNG  N.T.  
+				HK
+
+00-1E-DA   (hex)		Wesemann Elektrotechniek B.V.
+001EDA     (base 16)		Wesemann Elektrotechniek B.V.
+				Droogbloem 31
+				Rotterdam  Zuid-Holland  3068 AW
+				NL
+
+00-1E-D7   (hex)		H-Stream Wireless, Inc.
+001ED7     (base 16)		H-Stream Wireless, Inc.
+				2595 East Bayshore Road
+				Palo Alto  CA  94303
+				US
+
+00-1E-D5   (hex)		Tekon-Automatics
+001ED5     (base 16)		Tekon-Automatics
+				Zelenograd, 512-29
+				Moscow    124482
+				RU
+
+00-1E-E8   (hex)		Mytek
+001EE8     (base 16)		Mytek
+				151 Lafayette Str 3 Fl
+				New York  NY  10013
+				US
+
+00-1E-EE   (hex)		ETL Systems Ltd
+001EEE     (base 16)		ETL Systems Ltd
+				Coldwell Radio Station
+				Hereford  Herefordshire  HR2 9NE
+				GB
+
+00-1E-FA   (hex)		PROTEI Ltd.
+001EFA     (base 16)		PROTEI Ltd.
+				60A B.Sampsonievsky,  Business Center
+				St.Petersburg  RU  194044
+				RU
+
+00-1E-FB   (hex)		Trio Motion Technology Ltd
+001EFB     (base 16)		Trio Motion Technology Ltd
+				Shannon Way
+				Tewkesbury  Gloucestershire  GL20 8ND
+				GB
+
+00-1E-F8   (hex)		Emfinity Inc.
+001EF8     (base 16)		Emfinity Inc.
+				1305 Kelly Lake Road
+				Sudbury  Ontario  P3E5P5
+				CA
+
+00-1E-CB   (hex)		RPC Energoautomatika Ltd
+001ECB     (base 16)		RPC Energoautomatika Ltd
+				Krasnokazarmennaya st., 13/1
+				Moscow    111250
+				RU
+
+00-1E-A8   (hex)		Datang Mobile Communications Equipment CO.,LTD
+001EA8     (base 16)		Datang Mobile Communications Equipment CO.,LTD
+				No.29,Xueyuan Rd.
+				Beijing    100083
+				CN
+
+00-1E-AB   (hex)		TeleWell Oy
+001EAB     (base 16)		TeleWell Oy
+				Alahotie 14 b
+				Jarvenpaa  Uusimaa  04430
+				FI
+
+00-1E-9F   (hex)		Visioneering Systems, Inc.
+001E9F     (base 16)		Visioneering Systems, Inc.
+				5931 Sea Lion Place
+				Carlsbad  California  92010
+				US
+
+00-1E-6B   (hex)		Cisco SPVTG
+001E6B     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+00-1E-61   (hex)		ITEC GmbH
+001E61     (base 16)		ITEC GmbH
+				Lassnitzthal 300
+				  A-8200   Gleisdorf
+				AT
+
+00-1E-3E   (hex)		KMW Inc.
+001E3E     (base 16)		KMW Inc.
+				65 Youngchun-ri, Dongtan-myun
+				Hwasung-si  Kyungki-do  445-813
+				KR
+
+00-1E-38   (hex)		Bluecard Software Technology Co., Ltd.
+001E38     (base 16)		Bluecard Software Technology Co., Ltd.
+				D-801 Shangdi Science Building
+				Beijing    100085
+				CN
+
+00-1E-47   (hex)		PT. Hariff Daya Tunggal Engineering
+001E47     (base 16)		PT. Hariff Daya Tunggal Engineering
+				Jl. Soekarno Hatta No. 450
+				Bandung  Jawa Barat  40266
+				ID
+
+00-1E-48   (hex)		Wi-Links
+001E48     (base 16)		Wi-Links
+				332 Ayiou street
+				Limassol    3725
+				CY
+
+00-1E-8A   (hex)		eCopy, Inc
+001E8A     (base 16)		eCopy, Inc
+				1 Oracle Dr
+				Nashua  NH  03062
+				US
+
+00-1E-9B   (hex)		San-Eisha, Ltd.
+001E9B     (base 16)		San-Eisha, Ltd.
+				2-1 Ebara 5-chome
+				Shinagawa-ku  Tokyo  142-8611
+				JP
+
+00-1E-96   (hex)		Sepura Plc
+001E96     (base 16)		Sepura Plc
+				Radio House
+				Cambridge  CAMBRIDGESHIRE  CB4 1GR
+				GB
+
+00-1E-59   (hex)		Silicon Turnkey Express, LLC
+001E59     (base 16)		Silicon Turnkey Express, LLC
+				749 Miner Road
+				Highland Heights  Ohio  44143
+				US
+
+00-1E-51   (hex)		Converter Industry Srl
+001E51     (base 16)		Converter Industry Srl
+				Via Euclide, 12
+				Forli'  FC  47100
+				IT
+
+00-1E-71   (hex)		MIrcom Group of Companies
+001E71     (base 16)		MIrcom Group of Companies
+				25 Interchange Way
+				  Vaughan, Ontario  l4K 5W3
+				CA
+
+00-1D-C4   (hex)		AIOI Systems Co., Ltd.
+001DC4     (base 16)		AIOI Systems Co., Ltd.
+				KDX Omori, Bldg 8F
+				Tokyo    140-0016
+				JP
+
+00-1D-C0   (hex)		Enphase Energy
+001DC0     (base 16)		Enphase Energy
+				201 1st Street, Suite 111
+				Petaluma  CA  94952
+				US
+
+00-1D-BD   (hex)		Versamed Inc.
+001DBD     (base 16)		Versamed Inc.
+				2 Blue Hill Plaza
+				Pearl River  NY  10965
+				US
+
+00-1D-F8   (hex)		Webpro Vision Technology Corporation
+001DF8     (base 16)		Webpro Vision Technology Corporation
+				4F., No.573, Cingping Rd.
+				Anping District    708
+				TW
+
+00-1D-F9   (hex)		Cybiotronics (Far East) Limited
+001DF9     (base 16)		Cybiotronics (Far East) Limited
+				Unit 1906, Eastern Centre,
+				Quarry Bay    
+				HK
+
+00-1D-F7   (hex)		R. STAHL Schaltgeräte GmbH
+001DF7     (base 16)		R. STAHL Schaltgeräte GmbH
+				am Bahnhof 30
+				Waldenburg  Baden-Württemberg  74638
+				DE
+
+00-1E-05   (hex)		Xseed Technologies & Computing
+001E05     (base 16)		Xseed Technologies & Computing
+				Topaz House, MATAM
+				Haifa    39100
+				IL
+
+00-1E-07   (hex)		Winy Technology Co., Ltd.
+001E07     (base 16)		Winy Technology Co., Ltd.
+				305-303, Bucheon Techno-park, #365
+				Bucheon  Gyeonggi-do  421-741
+				KR
+
+00-1E-0A   (hex)		Syba Tech Limited
+001E0A     (base 16)		Syba Tech Limited
+				RM1301, Vanta Industrial Centre,
+				Kwai Chung    
+				HK
+
+00-1E-03   (hex)		LiComm Co., Ltd.
+001E03     (base 16)		LiComm Co., Ltd.
+				908-1 SEO-RI, IDONG-MYEON
+				YONGIN-SI  GYEONGGI-DO  449-834
+				KR
+
+00-1E-1B   (hex)		Digital Stream Technology, Inc.
+001E1B     (base 16)		Digital Stream Technology, Inc.
+				4,5,6th Fl., TaeChang B/D, 451-1
+				Seoul    134-030
+				KR
+
+00-1E-17   (hex)		STN BV
+001E17     (base 16)		STN BV
+				Amerikaweg 4
+				Hulst  Zeeland  4561 PB
+				NL
+
+00-1E-18   (hex)		Radio Activity srl
+001E18     (base 16)		Radio Activity srl
+				Via De Notaris 50
+				Milano  MI  20128
+				IT
+
+00-1E-15   (hex)		Beech Hill Electronics
+001E15     (base 16)		Beech Hill Electronics
+				Beechcroft, Beech Hill Road
+				Reading  Berkshire  RG7 2AU
+				GB
+
+00-1E-30   (hex)		Shireen Inc
+001E30     (base 16)		Shireen Inc
+				8531 Ziggy Lane
+				Gaithersburg  MD  20877
+				US
+
+00-1E-2E   (hex)		SIRTI S.p.A.
+001E2E     (base 16)		SIRTI S.p.A.
+				Via Bombrini 11/3
+				GENOA    16149
+				IT
+
+00-1D-DC   (hex)		HangZhou DeChangLong Tech&Info Co.,Ltd
+001DDC     (base 16)		HangZhou DeChangLong Tech&Info Co.,Ltd
+				Room 1102,KeJi Mansion,
+				HangZhou  ZheJiang  310012
+				CN
+
+00-1D-EB   (hex)		DINEC International
+001DEB     (base 16)		DINEC International
+				Rue de la Gare, 30
+				BRAINE L'ALLEUD  BRABANT WALLON  1420
+				BE
+
+00-1D-9A   (hex)		GODEX INTERNATIONAL CO., LTD
+001D9A     (base 16)		GODEX INTERNATIONAL CO., LTD
+				4F. NO.168, Lian-Cheng Road Chung-Ho City,
+				Taipei  Hsien  235
+				US
+
+00-1D-97   (hex)		Alertus Technologies LLC
+001D97     (base 16)		Alertus Technologies LLC
+				11785 Beltsville Drive
+				Beltsville  MD  20705
+				US
+
+00-1D-91   (hex)		Digitize, Inc
+001D91     (base 16)		Digitize, Inc
+				158 Edison Road
+				Lake Hopatcong  New Jersey  07849
+				US
+
+00-1D-95   (hex)		Flash, Inc.
+001D95     (base 16)		Flash, Inc.
+				3703 N. 200th St.
+				Elkhorn  NE  68022-2922
+				US
+
+00-1D-9D   (hex)		ARTJOY INTERNATIONAL LIMITED
+001D9D     (base 16)		ARTJOY INTERNATIONAL LIMITED
+				Room 1601,No.239 ZhongXing Road,LuoHu District
+				Shenzhen  Guangdong  518001
+				CN
+
+00-1D-9E   (hex)		AXION TECHNOLOGIES
+001D9E     (base 16)		AXION TECHNOLOGIES
+				151 RUE PARC INNOVATION
+				LA POCATIERE  QUEBEC  G0R1Z0
+				US
+
+00-1D-70   (hex)		Cisco Systems, Inc
+001D70     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-78   (hex)		Invengo Information Technology Co.,Ltd
+001D78     (base 16)		Invengo Information Technology Co.,Ltd
+				3/F,No.T2-B,High-Tech Industrial Park South
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1D-6F   (hex)		Chainzone Technology Co., Ltd
+001D6F     (base 16)		Chainzone Technology Co., Ltd
+				Chainzone Tech. Ind Park, Nanxin 1st Rd.
+				Foshan  Guangdong  528200
+				CN
+
+00-1D-7F   (hex)		Tekron International Ltd
+001D7F     (base 16)		Tekron International Ltd
+				409 Cuba Street, Alicetown
+				Lower Hutt  Wellington  5010
+				NZ
+
+00-1D-79   (hex)		SIGNAMAX LLC
+001D79     (base 16)		SIGNAMAX LLC
+				1090 Vermont Avenue
+				Washington  Washington D.C.  20005
+				US
+
+00-1D-AE   (hex)		CHANG TSENG TECHNOLOGY CO., LTD
+001DAE     (base 16)		CHANG TSENG TECHNOLOGY CO., LTD
+				2F NO.160 BACK BUILDING, LEN CHENG RD., CHUNG HO CITY
+				TAIPEI  HSIEN  235
+				TW
+
+00-1D-A6   (hex)		Media Numerics Limited
+001DA6     (base 16)		Media Numerics Limited
+				Rodenbacher Chaussee 6
+				Hanau  Hessen  63457
+				DE
+
+00-1D-62   (hex)		InPhase Technologies
+001D62     (base 16)		InPhase Technologies
+				2000 Pike Road
+				Longmont  Colorado  80501
+				US
+
+00-1D-63   (hex)		Miele & Cie. KG
+001D63     (base 16)		Miele & Cie. KG
+				Carl-Miele-Straße 29
+				Gütersloh    33332
+				DE
+
+00-1D-B7   (hex)		Tendril Networks, Inc.
+001DB7     (base 16)		Tendril Networks, Inc.
+				5700-D Flatiron Parkway
+				Boulder  CO  80301
+				US
+
+00-1D-8D   (hex)		Fluke Process Instruments GmbH
+001D8D     (base 16)		Fluke Process Instruments GmbH
+				Blankenburger Str. 135
+				Berlin    13127
+				DE
+
+00-1D-1F   (hex)		Siauliu Tauro Televizoriai, JSC
+001D1F     (base 16)		Siauliu Tauro Televizoriai, JSC
+				Pramones,15
+				Siauliai    LT-57318
+				LT
+
+00-1D-43   (hex)		Shenzhen G-link Digital Technology Co., Ltd.
+001D43     (base 16)		Shenzhen G-link Digital Technology Co., Ltd.
+				4F, E Building,Huachuang Da Technology Zone ,Hangcheng Highway,Gushu,Xixiang ,
+				shenzhen  GuangDong  518126
+				CN
+
+00-1D-3F   (hex)		Mitron Pty Ltd
+001D3F     (base 16)		Mitron Pty Ltd
+				Unit 11
+				Artarmon  NSW  2065
+				AU
+
+00-1D-39   (hex)		MOOHADIGITAL CO., LTD
+001D39     (base 16)		MOOHADIGITAL CO., LTD
+				Seoul Hightech Venture Center C-307 647-26
+				SEOUL    157-030
+				KR
+
+00-1D-37   (hex)		Thales-Panda Transportation System
+001D37     (base 16)		Thales-Panda Transportation System
+				6th floor, HUIJIE Plaza, 268 Zhongshan Rd.
+				nanjing  jiangsu  210008
+				CN
+
+00-1D-13   (hex)		NextGTV
+001D13     (base 16)		NextGTV
+				13F Byucksan/Kyungin Digital Valley ll
+				Seoul    153-803
+				KR
+
+00-1D-14   (hex)		SPERADTONE INFORMATION TECHNOLOGY LIMITED
+001D14     (base 16)		SPERADTONE INFORMATION TECHNOLOGY LIMITED
+				Room 1001 NO.418 Gui Ping Road,
+				Shanghai    200233
+				CN
+
+00-1D-10   (hex)		LightHaus Logic, Inc.
+001D10     (base 16)		LightHaus Logic, Inc.
+				126-1020 Mainland Street
+				Vancouver  BC  V6B 2T4
+				CA
+
+00-1D-04   (hex)		Zipit Wireless, Inc.
+001D04     (base 16)		Zipit Wireless, Inc.
+				49 Salters Road.
+				Greenville  SC  29607
+				US
+
+00-1C-F2   (hex)		Tenlon Technology Co.,Ltd.
+001CF2     (base 16)		Tenlon Technology Co.,Ltd.
+				4/F.,Shenhua Bldg,No.3155,Binhe Road,Futian District
+				Shenzhen  Guangdong  518033
+				CN
+
+00-1D-30   (hex)		YX Wireless S.A.
+001D30     (base 16)		YX Wireless S.A.
+				Av. Vicuña Mackenna #4860
+				Santiago    8580710
+				US
+
+00-1C-B2   (hex)		BPT SPA
+001CB2     (base 16)		BPT SPA
+				Via Stazione,48
+				Sesto al Reghena  Pordenone  33079
+				IT
+
+00-1C-B5   (hex)		Neihua Network Technology Co.,LTD.(NHN)
+001CB5     (base 16)		Neihua Network Technology Co.,LTD.(NHN)
+				Plot Xinmei Road 102-Q,New District
+				WuXi  Jiangsu  214028
+				CN
+
+00-1C-B4   (hex)		Iridium Satellite LLC
+001CB4     (base 16)		Iridium Satellite LLC
+				8440 S. River Parkway
+				Tempe  AZ  85284
+				US
+
+00-1C-B6   (hex)		Duzon CNT Co., Ltd.
+001CB6     (base 16)		Duzon CNT Co., Ltd.
+				14th Floor, IRE building 2
+				Seoul    150-967
+				KR
+
+00-1C-C7   (hex)		Rembrandt Technologies, LLC d/b/a REMSTREAM
+001CC7     (base 16)		Rembrandt Technologies, LLC d/b/a REMSTREAM
+				140 South Beverly Drive
+				Beverly Hills  CA  90212
+				US
+
+00-1C-BB   (hex)		MusicianLink
+001CBB     (base 16)		MusicianLink
+				2401 Cory Ave.
+				San Jose  CA  95128
+				US
+
+00-1C-8D   (hex)		Mesa Imaging
+001C8D     (base 16)		Mesa Imaging
+				Badenerstrasse 569
+				Zürich  ZH  8048
+				CH
+
+00-1C-89   (hex)		Force Communications, Inc.
+001C89     (base 16)		Force Communications, Inc.
+				3810 Arbordale Lane
+				Sachse  TX  75048
+				US
+
+00-1C-87   (hex)		Uriver Inc.
+001C87     (base 16)		Uriver Inc.
+				3rd., Fl., Bogwang Bldg., Poi-dong, 238-7 Gangnam-gu,
+				Seoul    135-964
+				KR
+
+00-1C-CD   (hex)		Alektrona Corporation
+001CCD     (base 16)		Alektrona Corporation
+				95 Hathaway Street, Suite 10
+				Providence  RI  02907
+				US
+
+00-1C-EC   (hex)		Mobilesoft (Aust.) Pty Ltd
+001CEC     (base 16)		Mobilesoft (Aust.) Pty Ltd
+				Suite 2, 27-35 Grosvenor Street
+				Sydney  NSW  2089
+				AU
+
+00-1C-E8   (hex)		Cummins Inc
+001CE8     (base 16)		Cummins Inc
+				1400 73rd Ave NE
+				Fridley  MN  55432
+				US
+
+00-1C-D0   (hex)		Circleone Co.,Ltd.
+001CD0     (base 16)		Circleone Co.,Ltd.
+				860-1,Noda
+				Beppu-shi  Ooita-ken  874-0016
+				JP
+
+00-1C-9F   (hex)		Razorstream, LLC
+001C9F     (base 16)		Razorstream, LLC
+				2381-C Renaissance Drive
+				Las Vegas  NV  89119
+				US
+
+00-1C-7D   (hex)		Excelpoint Manufacturing Pte Ltd
+001C7D     (base 16)		Excelpoint Manufacturing Pte Ltd
+				15, Changi Business Park
+				    486057
+				SG
+
+00-1C-5C   (hex)		Integrated Medical Systems, Inc.
+001C5C     (base 16)		Integrated Medical Systems, Inc.
+				1984 Obispo Avenue
+				Signal Hill  CA  90755
+				US
+
+00-1C-52   (hex)		VISIONEE SRL
+001C52     (base 16)		VISIONEE SRL
+				VIALE DELLA REPUBBLICA, 22
+				VILLORBA  TREVISO  31050
+				IT
+
+00-1C-47   (hex)		Hangzhou Hollysys Automation Co., Ltd
+001C47     (base 16)		Hangzhou Hollysys Automation Co., Ltd
+				No.10 Middle Road, Jiancaicheng, Haidian District,
+				Beijing    100096
+				CN
+
+00-1C-16   (hex)		ThyssenKrupp Elevator
+001C16     (base 16)		ThyssenKrupp Elevator
+				9280 Crestwyn Hills Drive
+				Memphis  TN  38125
+				US
+
+00-1C-19   (hex)		secunet Security Networks AG
+001C19     (base 16)		secunet Security Networks AG
+				Kronprinzenstraße 30
+				Essen  NRW  45128
+				DE
+
+00-1C-6C   (hex)		30805
+001C6C     (base 16)		30805
+				128, Jun Cheng Road,uangzhou Economic and Technological Development District
+				Guangzhou  Guangdong  510530
+				CN
+
+00-1C-61   (hex)		Galaxy  Microsystems LImited
+001C61     (base 16)		Galaxy  Microsystems LImited
+				Room 1101-03, 11/F Enterprise Square Two
+				Kowloon Bay  Kowloon  
+				HK
+
+00-1C-3B   (hex)		AmRoad Technology Inc.
+001C3B     (base 16)		AmRoad Technology Inc.
+				18F-3 No. 150 , Chien I Rd
+				Chung Ho  Taipei Hsien  23511
+				TW
+
+00-1C-3F   (hex)		International Police Technologies, Inc.
+001C3F     (base 16)		International Police Technologies, Inc.
+				4150 S. 87th E. Avenue
+				Tulsa  OK  74145
+				US
+
+00-1C-28   (hex)		Sphairon Technologies GmbH 
+001C28     (base 16)		Sphairon Technologies GmbH 
+				Philipp-Reis-Strasse 1
+				Bautzen  Saxony  02625    
+				DE
+
+00-1C-1F   (hex)		Quest Retail Technology Pty Ltd
+001C1F     (base 16)		Quest Retail Technology Pty Ltd
+				37-39 Walsh Street
+				Thebarton  SA  5031
+				AU
+
+00-1C-32   (hex)		Telian Corporation
+001C32     (base 16)		Telian Corporation
+				4FL. Namjeon Bldg. 53-3 Haandong
+				Kwangmyungsi  Kyoungkido  423060
+				KR
+
+00-1C-2B   (hex)		Alertme.com Limited
+001C2B     (base 16)		Alertme.com Limited
+				30 Station Road
+				Cambridge  Cambridgeshire  CB1 2RE
+				GB
+
+00-1C-77   (hex)		Prodys
+001C77     (base 16)		Prodys
+				C/Trigo 54 Pol. Ind. Polvoranca
+				Leganes  MADRID  28914
+				ES
+
+00-1C-6F   (hex)		Emfit Ltd
+001C6F     (base 16)		Emfit Ltd
+				Konttisentie 8 B
+				Vaajakoski    40800
+				FI
+
+00-1C-49   (hex)		Zoltan Technology Inc.
+001C49     (base 16)		Zoltan Technology Inc.
+				4F, No.30, Wunsi St.
+				Jhubei  Hsinchu  302
+				TW
+
+00-1C-63   (hex)		TRUEN
+001C63     (base 16)		TRUEN
+				4F SAMWON BLDG., 451-7
+				SEOUL    137-818
+				KR
+
+00-1B-DF   (hex)		Iskra Sistemi d.d.
+001BDF     (base 16)		Iskra Sistemi d.d.
+				Stegne 21
+				Ljubljana  Slovenia  1000
+				SI
+
+00-1B-D9   (hex)		Edgewater Wireless Systems Inc
+001BD9     (base 16)		Edgewater Wireless Systems Inc
+				50 HInes Road Suite 200
+				Ottawa  Ontario  K2K-2M5
+				CA
+
+00-1B-C7   (hex)		StarVedia Technology Inc.
+001BC7     (base 16)		StarVedia Technology Inc.
+				3F, No. 247, Done Sec. 1, Guangming 6th Rd.
+				Jhubei  Hsin-Chu County  302
+				TW
+
+00-1B-EC   (hex)		Netio Technologies Co., Ltd
+001BEC     (base 16)		Netio Technologies Co., Ltd
+				4F-1, No. 582, Rueiguang Rd., Neihu District
+				Taipei    11492
+				TW
+
+00-1C-09   (hex)		SAE Electronic Co.,Ltd.
+001C09     (base 16)		SAE Electronic Co.,Ltd.
+				23/F,Ying Long Zhan Ye Building,
+				Shenzhen  Guang Dong  518040
+				CN
+
+00-1C-0C   (hex)		TANITA Corporation
+001C0C     (base 16)		TANITA Corporation
+				1-14-2,Maeno-cho
+				Tokyo    174-8630
+				JP
+
+00-1B-A6   (hex)		intotech inc.
+001BA6     (base 16)		intotech inc.
+				 13F DMC R&D Center E3-2 Building Land Development District Sangam-Dong
+				Mapogu  Seoul  121-270
+				KR
+
+00-1B-A4   (hex)		S.A.E Afikim
+001BA4     (base 16)		S.A.E Afikim
+				Kibutz Afikim
+				Kibutz Afikim    15148
+				IL
+
+00-1B-B4   (hex)		Airvod Limited
+001BB4     (base 16)		Airvod Limited
+				Heather House
+				Sandyford Ind Est  Dublin 18  D18
+				IE
+
+00-1B-B6   (hex)		Bird Electronic Corp.
+001BB6     (base 16)		Bird Electronic Corp.
+				30303 Aurora Road
+				Solon  Ohio  44139
+				US
+
+00-1B-E8   (hex)		Ultratronik GmbH
+001BE8     (base 16)		Ultratronik GmbH
+				Dornierstr. 9
+				Gilching    822205
+				DE
+
+00-1B-E1   (hex)		ViaLogy
+001BE1     (base 16)		ViaLogy
+				2400 Lincoln Ave
+				Altadena  CA  91001
+				US
+
+00-1B-93   (hex)		JC Decaux SA DNT
+001B93     (base 16)		JC Decaux SA DNT
+				21 rue claude Bernard
+				MAUREPAS    78310
+				FR
+
+00-1B-9B   (hex)		Hose-McCann Communications
+001B9B     (base 16)		Hose-McCann Communications
+				1241 West Newport Center Drive
+				Deerfield Beach  FL  33442
+				US
+
+00-1B-9C   (hex)		SATEL sp. z o.o.
+001B9C     (base 16)		SATEL sp. z o.o.
+				Schuberta 79
+				Gdansk  pomorskie  80-172
+				PL
+
+00-1B-92   (hex)		l-acoustics
+001B92     (base 16)		l-acoustics
+				parc de la fontaine de jouvence
+				marcoussis  essonne  91462
+				FR
+
+00-1B-8E   (hex)		Hulu Sweden AB
+001B8E     (base 16)		Hulu Sweden AB
+				Box 12328, 10228
+				Kista  Stockholm  164 40
+				SE
+
+00-1B-45   (hex)		ABB AS, Division Automation Products
+001B45     (base 16)		ABB AS, Division Automation Products
+				Bergerveien 12
+				Billingstad    NO-1375
+				NO
+
+00-1B-3F   (hex)		ProCurve Networking by HP
+001B3F     (base 16)		ProCurve Networking by HP
+				60 Alexandra Terrace
+				    118502
+				SG
+
+00-1B-41   (hex)		General Infinity Co.,Ltd.
+001B41     (base 16)		General Infinity Co.,Ltd.
+				3F,No.169, Xing-ai Rd,
+				Taipei    114
+				TW
+
+00-1B-50   (hex)		Nizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)
+001B50     (base 16)		Nizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)
+				174, Gagarina Avenue
+				Nizhny Novgorod  Russia  603950
+				RU
+
+00-1B-47   (hex)		Futarque A/S
+001B47     (base 16)		Futarque A/S
+				Aagade 15B
+				Aalborg    9000
+				DK
+
+00-1B-6C   (hex)		LookX Digital Media BV
+001B6C     (base 16)		LookX Digital Media BV
+				Roekenveldweg 1
+				Brunssum  Limburg  6446DK
+				NL
+
+00-1B-6B   (hex)		Swyx Solutions AG
+001B6B     (base 16)		Swyx Solutions AG
+				Joseph-von-Fraunhofer-straße 13a
+				Dortmund    44227
+				DE
+
+00-1B-69   (hex)		Equaline Corporation
+001B69     (base 16)		Equaline Corporation
+				9F, No. 234, Section 4, Cheng-De Road,
+				  Taipei Hsien  25162
+				TW
+
+00-1B-76   (hex)		Ripcode, Inc.
+001B76     (base 16)		Ripcode, Inc.
+				1130 E. Arapaho Road
+				Richardson  TX  75081
+				US
+
+00-1B-70   (hex)		IRI Ubiteq, INC.
+001B70     (base 16)		IRI Ubiteq, INC.
+				Shinjuku-Nomura Bldg. 47F,
+				Shinjuku-ku  Tokyo  163-0547
+				JP
+
+00-1B-68   (hex)		Modnnet Co., Ltd
+001B68     (base 16)		Modnnet Co., Ltd
+				2139 Daemyung-Dong DIP main B/D Room#505, Namgu
+				Daegu  Kyungsang Bookdo  705-701
+				KR
+
+00-1B-62   (hex)		JHT Optoelectronics Co.,Ltd.
+001B62     (base 16)		JHT Optoelectronics Co.,Ltd.
+				Hetian Industrial Park 2rd,Houjie Town, Donguan,
+				Dongguan  Guangdong  523945
+				CN
+
+00-1B-8A   (hex)		2M Electronic A/S
+001B8A     (base 16)		2M Electronic A/S
+				Malervej 10
+				Taastrup    2630
+				DK
+
+00-1B-80   (hex)		LORD Corporation
+001B80     (base 16)		LORD Corporation
+				2000 West Grandview Blvd
+				Erie  Pa  16509
+				US
+
+00-1B-3E   (hex)		Curtis, Inc.
+001B3E     (base 16)		Curtis, Inc.
+				2405 Annapolis Lane
+				Minneapolis  MN  55441
+				US
+
+00-1B-37   (hex)		Computec Oy
+001B37     (base 16)		Computec Oy
+				Juholankatu 8
+				Kouvola  Kymi  45200
+				FI
+
+00-1B-07   (hex)		Mendocino Software
+001B07     (base 16)		Mendocino Software
+				47001 Benecia St.
+				Fremont  CA  94538
+				US
+
+00-1B-08   (hex)		Danfoss Drives A/S
+001B08     (base 16)		Danfoss Drives A/S
+				Ulsnaes 1
+				Graasten  6300  
+				DK
+
+00-1B-01   (hex)		Applied Radio Technologies
+001B01     (base 16)		Applied Radio Technologies
+				1124 South Service Road West
+				Oakville  Ontario  L6L 5T7
+				CA
+
+00-1B-02   (hex)		ED Co.Ltd
+001B02     (base 16)		ED Co.Ltd
+				517-15 SangDaeWon-Dong
+				SeongNam-City  GyeongGi-Do  462-806
+				KR
+
+00-1A-FC   (hex)		ModusLink Corporation
+001AFC     (base 16)		ModusLink Corporation
+				2905 Prestonwood Drive
+				Plano  Texas  75093
+				US
+
+00-1B-10   (hex)		ShenZhen Kang Hui Technology Co.,ltd
+001B10     (base 16)		ShenZhen Kang Hui Technology Co.,ltd
+				China  GuangDong
+				ShenZhen  GuangDong  518109
+				CN
+
+00-1B-0B   (hex)		Phidgets Inc.
+001B0B     (base 16)		Phidgets Inc.
+				2715A 16A Street N.W.
+				Calgary  Alberta  T2M 3R7
+				CA
+
+00-1B-0C   (hex)		Cisco Systems, Inc
+001B0C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-E0   (hex)		Mythology Tech Express Inc.
+001AE0     (base 16)		Mythology Tech Express Inc.
+				2F, No.10, Lane 235, Bao Chiao road,
+				Taipei    231
+				TW
+
+00-1A-E2   (hex)		Cisco Systems, Inc
+001AE2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-D7   (hex)		Christie Digital Systems, Inc.
+001AD7     (base 16)		Christie Digital Systems, Inc.
+				809 Wellington Street North
+				Kitchener  Ontario  N2G 4Y7
+				CA
+
+00-1B-23   (hex)		SimpleComTools
+001B23     (base 16)		SimpleComTools
+				598 Indian Trail Rd S.
+				Indian Trail  NC  28079
+				US
+
+00-1A-F6   (hex)		Woven Systems, Inc.
+001AF6     (base 16)		Woven Systems, Inc.
+				2455 Augustine Drive
+				Santa Clara  CA  95054
+				US
+
+00-1A-F9   (hex)		AeroVIronment (AV Inc)
+001AF9     (base 16)		AeroVIronment (AV Inc)
+				4685 Industrial St
+				Simi Valley  CA  93063
+				US
+
+00-1B-30   (hex)		Solitech Inc.
+001B30     (base 16)		Solitech Inc.
+				1838 Main Street
+				Stevensville  MD  21666
+				US
+
+00-1B-18   (hex)		Tsuken Electric Ind. Co.,Ltd
+001B18     (base 16)		Tsuken Electric Ind. Co.,Ltd
+				3-9 Akedouri Izumi-ku
+				Sendai City  Miyagi  981-3206
+				JP
+
+00-1A-E7   (hex)		Aztek Networks, Inc.
+001AE7     (base 16)		Aztek Networks, Inc.
+				2477 55th St. #202
+				Boulder  CO  80301
+				US
+
+00-1A-95   (hex)		Hisense Mobile Communications Technoligy Co.,Ltd.
+001A95     (base 16)		Hisense Mobile Communications Technoligy Co.,Ltd.
+				11,JiangXi Road,
+				QingDao  ShanDong  266071
+				CN
+
+00-1A-81   (hex)		Zelax
+001A81     (base 16)		Zelax
+				2nd buid., 1B, Zavodskaya st.,
+				Moscow    124681
+				RU
+
+00-1A-87   (hex)		Canhold International Limited
+001A87     (base 16)		Canhold International Limited
+				Flat 4, 13/F., Block 4, Tai Ping Industrial Centre
+				    00852
+				HK
+
+00-1A-88   (hex)		Venergy,Co,Ltd
+001A88     (base 16)		Venergy,Co,Ltd
+				West 6th Floor,M-8 Building Maqueling Zone,
+				shenzhen  guangdong  518000
+				CN
+
+00-1A-C1   (hex)		3Com Ltd
+001AC1     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-1A-BB   (hex)		Fontal Technology Incorporation
+001ABB     (base 16)		Fontal Technology Incorporation
+				Rm.522, Bldg. 52, 195, Sec. 4, ChungHsing Rd., Chutung
+				Hsinchu    310
+				TW
+
+00-1A-BD   (hex)		Impatica Inc.
+001ABD     (base 16)		Impatica Inc.
+				205-1725 St. Laurent Blvd.
+				Ottawa  ON  K1G 3V4
+				CA
+
+00-1A-AE   (hex)		Savant Systems LLC
+001AAE     (base 16)		Savant Systems LLC
+				45 Perseverance Way
+				Hyannis  Massachusetts  02601
+				US
+
+00-1A-CD   (hex)		Tidel Engineering LP
+001ACD     (base 16)		Tidel Engineering LP
+				2025 W Belt Line Road Suite 114
+				Carrollton  TX  75019
+				US
+
+00-1A-C9   (hex)		SUZUKEN CO.,LTD
+001AC9     (base 16)		SUZUKEN CO.,LTD
+				SUZUKEN TOMEI BLDG.
+				NAGOYA-SI  AICHI-KEN  465-0045
+				JP
+
+00-1A-79   (hex)		TELECOMUNICATION TECHNOLOGIES LTD.
+001A79     (base 16)		TELECOMUNICATION TECHNOLOGIES LTD.
+				4D ZHUKOVA BLV.
+				ODESSA    65121
+				UA
+
+00-1A-AA   (hex)		Analogic Corp.
+001AAA     (base 16)		Analogic Corp.
+				8 Centennial Drive
+				Peabody  MA  01960
+				US
+
+00-1A-8B   (hex)		CHUNIL ELECTRIC IND., CO.
+001A8B     (base 16)		CHUNIL ELECTRIC IND., CO.
+				308,ByuckSan Digital Valley,132-7,Gamjeon-Dong,Sasang-Gu
+				Busan  GyeongSangNamDo  617-800
+				KR
+
+00-1A-8D   (hex)		AVECS Bergen GmbH
+001A8D     (base 16)		AVECS Bergen GmbH
+				Billrothstraße 11 a
+				Bergen auf Rügen  M/V  18528
+				DE
+
+00-1A-B4   (hex)		FFEI Ltd.
+001AB4     (base 16)		FFEI Ltd.
+				Graphics House
+				Hemel Hempstead  Hertfordshire  HP2 7SU
+				GB
+
+00-1A-B5   (hex)		Home Network System
+001AB5     (base 16)		Home Network System
+				107, Hyundai I-Vally
+				Seongnam-si  Gyeonggi-do  462-714
+				KR
+
+00-1A-A4   (hex)		Future University-Hakodate
+001AA4     (base 16)		Future University-Hakodate
+				116-2 Kamedanakano-cho
+				Hakodate  Hokkaido  041-8655
+				JP
+
+00-1A-9F   (hex)		A-Link Ltd
+001A9F     (base 16)		A-Link Ltd
+				Kylavainiontie 20
+				Espoo    FI-02760
+				FI
+
+00-1A-74   (hex)		Procare International Co
+001A74     (base 16)		Procare International Co
+				5F, No.88, Jhouzih Street, Neihu District
+				Taipei    114
+				TW
+
+00-1A-BE   (hex)		COMPUTER HI-TECH INC.
+001ABE     (base 16)		COMPUTER HI-TECH INC.
+				HigashiUeno3-18-7
+				Taitoku  Tokyo  110-0015
+				JP
+
+00-1A-19   (hex)		Computer Engineering Limited
+001A19     (base 16)		Computer Engineering Limited
+				PO Box 493
+				Auckland  AK  2340
+				NZ
+
+00-1A-18   (hex)		Advanced Simulation Technology inc.
+001A18     (base 16)		Advanced Simulation Technology inc.
+				500A Huntmar Park Drive
+				Herndon  VA  20170
+				US
+
+00-1A-58   (hex)		CCV Deutschland GmbH - Celectronic eHealth Div.
+001A58     (base 16)		CCV Deutschland GmbH - Celectronic eHealth Div.
+				Gertraudenstrasse 18
+				Berlin    D-10178
+				DE
+
+00-1A-5E   (hex)		Thincom Technology Co.,Ltd
+001A5E     (base 16)		Thincom Technology Co.,Ltd
+				17F-3, No.398, Huanbei Rd.,
+				Zhongli City  Taoyuan Contry  320
+				TW
+
+00-1A-5C   (hex)		Euchner GmbH+Co. KG
+001A5C     (base 16)		Euchner GmbH+Co. KG
+				Kohlhammerstraße 16
+				Leinfelden-Echterdingen  BW  70771
+				DE
+
+00-1A-5B   (hex)		NetCare Service Co., Ltd.
+001A5B     (base 16)		NetCare Service Co., Ltd.
+				5-13-16 Shimizu, Asahi-ku
+				Osaka    535-0021
+				JP
+
+00-1A-24   (hex)		Galaxy Telecom Technologies Ltd
+001A24     (base 16)		Galaxy Telecom Technologies Ltd
+				No.25, The 1st Gaoxin Road
+				Xi'an City  Shannxi  710075
+				CN
+
+00-1A-20   (hex)		CMOTECH Co. Ltd.
+001A20     (base 16)		CMOTECH Co. Ltd.
+				5F Etronix Bldg. 17-10
+				Youngdungpo-Gu  Seoul  150-874
+				KR
+
+00-1A-4E   (hex)		NTI AG / LinMot
+001A4E     (base 16)		NTI AG / LinMot
+				Haerdlistrasse 15
+				Spreitenbach  AG  8957
+				CH
+
+00-1A-52   (hex)		Meshlinx Wireless Inc.
+001A52     (base 16)		Meshlinx Wireless Inc.
+				1410 G Avenue, Suite T
+				Plano  Texas  75074
+				US
+
+00-1A-13   (hex)		Wanlida Group Co., LTD
+001A13     (base 16)		Wanlida Group Co., LTD
+				Jiahe Road No.618
+				Xiamen  Fujian  361006
+				CN
+
+00-1A-43   (hex)		Logical Link Communications
+001A43     (base 16)		Logical Link Communications
+				1909 Central Drive Suite 205
+				Bedford  TX  76021
+				US
+
+00-1A-47   (hex)		Agami Systems, Inc.
+001A47     (base 16)		Agami Systems, Inc.
+				1269 Innsbruck Drive
+				Sunnyvale  California  94089
+				US
+
+00-1A-2D   (hex)		The Navvo Group
+001A2D     (base 16)		The Navvo Group
+				4400 Baker Road
+				Minnetonka  MN  55343
+				US
+
+00-1A-2F   (hex)		Cisco Systems, Inc
+001A2F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-A9   (hex)		Cisco Systems, Inc
+0019A9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-AE   (hex)		Hopling Technologies b.v.
+0019AE     (base 16)		Hopling Technologies b.v.
+				Camerastraat 10
+				Almere  Flevoland  1322 BC
+				NL
+
+00-19-AF   (hex)		Rigol Technologies, Inc.
+0019AF     (base 16)		Rigol Technologies, Inc.
+				No. 156 Cai He Village, Sha He Town
+				Beijing    102206
+				CN
+
+00-19-DE   (hex)		MOBITEK
+0019DE     (base 16)		MOBITEK
+				5F,No.60,Lane 321,Yang-Kwang Street
+				Taipei    114
+				US
+
+00-19-E5   (hex)		Lynx Studio Technology, Inc.
+0019E5     (base 16)		Lynx Studio Technology, Inc.
+				1540 Barton Rd # 268
+				Redlands  CA  92373
+				US
+
+00-19-DB   (hex)		MICRO-STAR INTERNATIONAL CO., LTD.
+0019DB     (base 16)		MICRO-STAR INTERNATIONAL CO., LTD.
+				NO. 69, LI-DE ST.
+				JUNG-HE CITY  TAIPEI HSIEN  235
+				TW
+
+00-1A-03   (hex)		Angel Electronics Co., Ltd.
+001A03     (base 16)		Angel Electronics Co., Ltd.
+				17, Lane 134, Shou Shan Road, Tai Shan,
+				Taipei    243
+				TW
+
+00-19-F9   (hex)		TDK-Lambda
+0019F9     (base 16)		TDK-Lambda
+				405 Essex Road
+				Neptune  NJ  07753
+				US
+
+00-19-CE   (hex)		Progressive Gaming International
+0019CE     (base 16)		Progressive Gaming International
+				920 Pilot Road
+				Las Vegas  NV  89119
+				US
+
+00-19-BD   (hex)		New Media Life
+0019BD     (base 16)		New Media Life
+				Hea Ju Bild, 5F, 837-7, Yeoksam-dong
+				Kangnam-gu  Seoul  135-080
+				KR
+
+00-19-F2   (hex)		Teradyne K.K.
+0019F2     (base 16)		Teradyne K.K.
+				272-13, Heisei, Takaono
+				Kikuchi-gun  Kumamoto  869-1232
+				JP
+
+00-19-A7   (hex)		ITU-T
+0019A7     (base 16)		ITU-T
+				Place des Nations
+				Geneva 20    CH-1211
+				CH
+
+00-19-9F   (hex)		DKT A/S
+00199F     (base 16)		DKT A/S
+				Fanoevej 6
+				Kr. Saaby    DK-4060
+				DK
+
+00-19-8D   (hex)		Ocean Optics, Inc.
+00198D     (base 16)		Ocean Optics, Inc.
+				830 Douglas Ave
+				Dunedin  FL  34698
+				US
+
+00-19-82   (hex)		SmarDTV
+001982     (base 16)		SmarDTV
+				Route de Genève 22
+				Cheseaux    CH-1033 
+				CH
+
+00-19-85   (hex)		IT Watchdogs, Inc
+001985     (base 16)		IT Watchdogs, Inc
+				12885 Research, Suite 210B
+				Austin  TX  78750
+				US
+
+00-19-51   (hex)		NETCONS, s.r.o.
+001951     (base 16)		NETCONS, s.r.o.
+				Stara Vajnorska 37
+				Bratislava  Slovakia  831 04
+				SK
+
+00-19-57   (hex)		Saafnet Canada Inc.
+001957     (base 16)		Saafnet Canada Inc.
+				107-1089 East Kent Ave (N)
+				Vancouver  BC  V5X 4V9
+				CA
+
+00-19-58   (hex)		Bluetooth SIG, Inc.
+001958     (base 16)		Bluetooth SIG, Inc.
+				5209 Lake Washington Blvd NE
+				Kirkland  WA  98033
+				US
+
+00-19-56   (hex)		Cisco Systems, Inc
+001956     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-6B   (hex)		Danpex Corporation
+00196B     (base 16)		Danpex Corporation
+				2114 Ringwood Avenue
+				San Jose  California  95131
+				US
+
+00-19-3D   (hex)		GMC Guardian Mobility Corp.
+00193D     (base 16)		GMC Guardian Mobility Corp.
+				Suite 200
+				Ottawa  ON  K2E 7Y8
+				CA
+
+00-19-86   (hex)		Cheng Hongjian
+001986     (base 16)		Cheng Hongjian
+				Rm.2305B.Sege Plaza,Huaqiang North Rd.,
+				Shenzhen  Guangdong  518057
+				US
+
+00-19-9E   (hex)		Nifty
+00199E     (base 16)		Nifty
+				miwa4-2-22-105
+				  Nagano  3800803
+				JP
+
+00-19-6A   (hex)		MikroM GmbH
+00196A     (base 16)		MikroM GmbH
+				Dovestraße 1
+				Berlin    10587
+				DE
+
+00-18-FF   (hex)		PowerQuattro Co.
+0018FF     (base 16)		PowerQuattro Co.
+				János u. 175.
+				Budapest    H-1161
+				HU
+
+00-18-F4   (hex)		EO TECHNICS Co., Ltd.
+0018F4     (base 16)		EO TECHNICS Co., Ltd.
+				91, Dongpyeon-ro
+				Anyang  Kyeonggi-Do  431-803
+				KR
+
+00-18-FC   (hex)		Altec Electronic AG
+0018FC     (base 16)		Altec Electronic AG
+				Lenggenbachstrasse 3
+				Fahrweid  Zürich  CH-8951
+				CH
+
+00-18-F6   (hex)		Thomson Telecom Belgium
+0018F6     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				Edegem  Antwerp  B-2650
+				BE
+
+00-18-F5   (hex)		Shenzhen Streaming Video Technology Company Limited
+0018F5     (base 16)		Shenzhen Streaming Video Technology Company Limited
+				5/F, Block 3, Software Part No.1, Keji Middle 2 Road,
+				Shenzhen  GaungDong  518057
+				CN
+
+00-18-F9   (hex)		VVOND, Inc.
+0018F9     (base 16)		VVOND, Inc.
+				3000 Bridge Parkway
+				Redwood City  CA  94065
+				US
+
+00-19-3B   (hex)		LigoWave
+00193B     (base 16)		LigoWave
+				138 Mountain Brook Drive
+				Canton  GA  30115
+				US
+
+00-19-35   (hex)		DUERR DENTAL AG
+001935     (base 16)		DUERR DENTAL AG
+				Hoepfigheimer Strasse 17
+				Bietigheim-Bissingen  Baden-Wuerttemberg  74321
+				DE
+
+00-19-10   (hex)		Knick Elektronische Messgeraete GmbH & Co. KG
+001910     (base 16)		Knick Elektronische Messgeraete GmbH & Co. KG
+				Beuckestraße 22
+				Berlin    14163
+				DE
+
+00-19-13   (hex)		Chuang-Yi Network Equipment Co.Ltd.
+001913     (base 16)		Chuang-Yi Network Equipment Co.Ltd.
+				238 TianMuShan Rd., West Lake district
+				HangZhou  ZheJiang  310000
+				CN
+
+00-18-FA   (hex)		Yushin Precision Equipment Co.,Ltd.
+0018FA     (base 16)		Yushin Precision Equipment Co.,Ltd.
+				11-260 KOGAHONMACHI
+				KYOTO    612-8492 JAP
+				JP
+
+00-18-EA   (hex)		Alltec GmbH
+0018EA     (base 16)		Alltec GmbH
+				An der Trave 27-31
+				Selmsdorf  Mecklenburg-Vorpommern  23923
+				DE
+
+00-18-E8   (hex)		Hacetron Corporation
+0018E8     (base 16)		Hacetron Corporation
+				No. 542,
+				Yang-Mei,  Tao-Yuan,  326
+				TW
+
+00-19-14   (hex)		Winix Co., Ltd
+001914     (base 16)		Winix Co., Ltd
+				363 Angade Bldg., Yangjae-dong
+				Seoul    137-898
+				KR
+
+00-19-06   (hex)		Cisco Systems, Inc
+001906     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-01   (hex)		F1MEDIA
+001901     (base 16)		F1MEDIA
+				610, Keumkang Hightech ¥±, 138-1 Sangdaewon-Dong, Jungwon-Gu
+				Seongnam-Si  Gyeonggi-Do  462-707
+				KR
+
+00-19-31   (hex)		Balluff GmbH
+001931     (base 16)		Balluff GmbH
+				Schurwaldstraße 9
+				Neuhausen  BW  73765
+				DE
+
+00-18-E3   (hex)		Visualgate Systems, Inc.
+0018E3     (base 16)		Visualgate Systems, Inc.
+				64 Bakersfield Street
+				Toronto  Ontario  M3J 2W7
+				CA
+
+00-18-9F   (hex)		Lenntek Corporation
+00189F     (base 16)		Lenntek Corporation
+				4F, 125 GuangMing 3rd. Road
+				Jhu Bei  Hsin Chu  302
+				TW
+
+00-18-99   (hex)		ShenZhen jieshun Science&Technology Industry CO,LTD.
+001899     (base 16)		ShenZhen jieshun Science&Technology Industry CO,LTD.
+				China GuangDong state Shenzhen City Futian section NO17. Meilin Road
+				Shenzhen  GuangDong  518049
+				CN
+
+00-18-6D   (hex)		Zhenjiang Sapphire Electronic Industry CO.
+00186D     (base 16)		Zhenjiang Sapphire Electronic Industry CO.
+				Wei San Road,Dingmao Develop Area
+				zhenjiang  jiangsu  212009
+				CN
+
+00-18-6F   (hex)		Setha Industria Eletronica LTDA
+00186F     (base 16)		Setha Industria Eletronica LTDA
+				Rua Alvaro de Macedo 134
+				Rio de Janeiro  RJ  21.250-620
+				BR
+
+00-18-75   (hex)		AnaCise Testnology Pte Ltd
+001875     (base 16)		AnaCise Testnology Pte Ltd
+				3 Bishan Place #02-06
+				    579838
+				SG
+
+00-18-C1   (hex)		Almitec Informática e Comércio
+0018C1     (base 16)		Almitec Informática e Comércio
+				461, Francisco de Morais St.
+				São Paulo    04714-010
+				BR
+
+00-18-C4   (hex)		Raba Technologies LLC
+0018C4     (base 16)		Raba Technologies LLC
+				8830 Stanford Blvd Suite 205
+				Columbia  Maryland  21045
+				US
+
+00-18-C9   (hex)		EOps Technology Limited
+0018C9     (base 16)		EOps Technology Limited
+				Room 2001, Fairmont House,
+				Hong Kong    
+				HK
+
+00-18-D8   (hex)		ARCH METER Corporation
+0018D8     (base 16)		ARCH METER Corporation
+				4F, No.3-2, Industry E. Rd.
+				Hsinchu    
+				TW
+
+00-18-D9   (hex)		Santosha Internatonal, Inc
+0018D9     (base 16)		Santosha Internatonal, Inc
+				3843 S. Bristol St. #242
+				Santa Ana  CA  92704
+				US
+
+00-18-CF   (hex)		Baldor Electric Company
+0018CF     (base 16)		Baldor Electric Company
+				600 S. Zero St.
+				Fort Smith  AR  72901
+				US
+
+00-18-BC   (hex)		ZAO NVP Bolid
+0018BC     (base 16)		ZAO NVP Bolid
+				Pionerskaya str., 4
+				Korolyov  Moscow region  141070
+				RU
+
+00-18-B7   (hex)		D3 LED, LLC
+0018B7     (base 16)		D3 LED, LLC
+				380 Mountain Rd
+				Union City  NJ  07087
+				US
+
+00-18-95   (hex)		Hansun Technologies Inc.
+001895     (base 16)		Hansun Technologies Inc.
+				Room 301, Building 103, Wangjingkejiyuan, Chaoyang District
+				Beijing    100102
+				CN
+
+00-18-83   (hex)		FORMOSA21 INC.
+001883     (base 16)		FORMOSA21 INC.
+				8F-6, NO.351, CHUNG SHAN RD., SEC.2
+				TAIPEI    235
+				TW
+
+00-18-8E   (hex)		Ekahau, Inc.
+00188E     (base 16)		Ekahau, Inc.
+				Hiilikatu 3
+				HELSINKI  UUSIMAA  00180
+				FI
+
+00-18-14   (hex)		Mitutoyo Corporation
+001814     (base 16)		Mitutoyo Corporation
+				20-1, Sakado 1-chome, Takatsu-ku,
+				Kawasaki-shi    213-8533
+				JP
+
+00-18-17   (hex)		D. E. Shaw Research, LLC
+001817     (base 16)		D. E. Shaw Research, LLC
+				120 W. 45th St., 33rd Floor
+				New York  NY  10036
+				US
+
+00-18-11   (hex)		Neuros Technology International, LLC.
+001811     (base 16)		Neuros Technology International, LLC.
+				650 W Lake St
+				Chicago  IL  60661
+				US
+
+00-17-DE   (hex)		Advantage Six Ltd
+0017DE     (base 16)		Advantage Six Ltd
+				208 George St
+				OLDHAM  Lancs  OL2 8DR
+				GB
+
+00-17-D7   (hex)		ION Geophysical Corporation Inc.
+0017D7     (base 16)		ION Geophysical Corporation Inc.
+				850 Dorothy
+				Richardson  Texas  75081
+				US
+
+00-18-37   (hex)		Universal ABIT Co., Ltd.
+001837     (base 16)		Universal ABIT Co., Ltd.
+				7F, No. 323 Yangguang St.,
+				Neihu  Taipei  114
+				TW
+
+00-18-22   (hex)		CEC TELECOM CO.,LTD.
+001822     (base 16)		CEC TELECOM CO.,LTD.
+				10thFL.CEC Building,6 Zhongguancun South Street
+				Beijing    100086
+				CN
+
+00-18-20   (hex)		w5networks
+001820     (base 16)		w5networks
+				48389 Fremont Blvd
+				Fremont  CA  94538
+				US
+
+00-18-5D   (hex)		TAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.
+00185D     (base 16)		TAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.
+				No. 23, The Third Industrial Park of Xia Village,
+				Shenzhen City,  Guangdong,  815106
+				CN
+
+00-18-5E   (hex)		Nexterm Inc.
+00185E     (base 16)		Nexterm Inc.
+				1-12-3, Shibaura, Minato-ku,
+				Tokyo    105-0023
+				JP
+
+00-18-28   (hex)		e2v technologies (UK) ltd.
+001828     (base 16)		e2v technologies (UK) ltd.
+				106 Waterhouse Lane
+				Chelmsford  Essex  CM1 2QU
+				GB
+
+00-18-35   (hex)		Thoratec / ITC
+001835     (base 16)		Thoratec / ITC
+				2656 Patton Road
+				Roseville  MN  55113
+				US
+
+00-18-01   (hex)		Actiontec Electronics, Inc
+001801     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-17-F3   (hex)		Harris Corporation
+0017F3     (base 16)		Harris Corporation
+				1025 West NASA Blvd
+				Melbourne  FL  32919
+				US
+
+00-18-4A   (hex)		Catcher, Inc.
+00184A     (base 16)		Catcher, Inc.
+				5864 Owens Ave.
+				Carlsbad  CA  92008
+				US
+
+00-18-4B   (hex)		Las Vegas Gaming, Inc.
+00184B     (base 16)		Las Vegas Gaming, Inc.
+				4000 West Ali Baba Lane, Suite D
+				Las Vegas  Nevada  89118
+				US
+
+00-18-0E   (hex)		Avega Systems
+00180E     (base 16)		Avega Systems
+				59 Victoria Street
+				McMahons Point  NSW  2060
+				AU
+
+00-17-BC   (hex)		Touchtunes Music Corporation
+0017BC     (base 16)		Touchtunes Music Corporation
+				3 Place du Commerce
+				Montréal  Québec  H3E 1H7
+				CA
+
+00-17-C1   (hex)		CM Precision Technology LTD.
+0017C1     (base 16)		CM Precision Technology LTD.
+				2 Fl, No. 177, Chien-E Road, Chung-Ho City
+				Taipei Hsien    235
+				TW
+
+00-17-B2   (hex)		SK Telesys
+0017B2     (base 16)		SK Telesys
+				4F, Kyungdong bldg, 4-4, Sunae-Dong, Pundang-Gu
+				Sungnam-City  Kunggi-Do  463-825
+				KR
+
+00-17-B1   (hex)		ACIST Medical Systems, Inc.
+0017B1     (base 16)		ACIST Medical Systems, Inc.
+				7450 Flying Cloud Drive
+				Eden Prairie  MN  55344
+				US
+
+00-17-A3   (hex)		MIX s.r.l.
+0017A3     (base 16)		MIX s.r.l.
+				Via Caldera, 21
+				Milan    I-20153
+				IT
+
+00-17-A6   (hex)		YOSIN ELECTRONICS CO., LTD.
+0017A6     (base 16)		YOSIN ELECTRONICS CO., LTD.
+				6F-2, No.17, Lan 174,Shin-Ming Road
+				Taipei    114
+				TW
+
+00-17-9C   (hex)		DEPRAG SCHULZ GMBH u. CO.
+00179C     (base 16)		DEPRAG SCHULZ GMBH u. CO.
+				Kurfürstenringg 12.18
+				Amberg  Bayern  92224
+				DE
+
+00-17-96   (hex)		Rittmeyer AG
+001796     (base 16)		Rittmeyer AG
+				Inwilerriedstrasse 57
+				Baar  ZG  CH-6341
+				CH
+
+00-17-E1   (hex)		DACOS Technologies Co., Ltd.
+0017E1     (base 16)		DACOS Technologies Co., Ltd.
+				104 Daeryung-Technotown III 448
+				SEOUL  Keumcheon-Gu  153-772
+				KR
+
+00-17-E0   (hex)		Cisco Systems, Inc
+0017E0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-17-D2   (hex)		THINLINX PTY LTD
+0017D2     (base 16)		THINLINX PTY LTD
+				31 Carwoola Crescent
+				Mooloolaba  Queensland  4557
+				AU
+
+00-17-85   (hex)		Sparr Electronics Ltd
+001785     (base 16)		Sparr Electronics Ltd
+				Sparr Electronics Ltd
+				Bangalore  Karnataka  560054
+				IN
+
+00-17-75   (hex)		TTE Germany GmbH
+001775     (base 16)		TTE Germany GmbH
+				Hermann-Schwer-Straße 3
+				Villingen-Schwenningen  Baden-Württemberg  78048
+				DE
+
+00-17-B8   (hex)		NOVATRON CO., LTD.
+0017B8     (base 16)		NOVATRON CO., LTD.
+				#601 polaris bldg., 15-3 jeongja-dong, bundang-gu
+				Seong Nam  Gyeonggi Do  463-811
+				KR
+
+00-17-BB   (hex)		Syrinx Industrial Electronics
+0017BB     (base 16)		Syrinx Industrial Electronics
+				De Factorij 13
+				Zwaag  Noord Holland  1689 AK
+				NL
+
+00-17-7C   (hex)		Smartlink Network Systems Limited
+00177C     (base 16)		Smartlink Network Systems Limited
+				L-7, Verna Electronic city
+				Nagoa  Goa  403 722
+				IN
+
+00-17-81   (hex)		Greystone Data System, Inc.
+001781     (base 16)		Greystone Data System, Inc.
+				40800 Encycopedia Circle
+				Fremont  CA  94538
+				US
+
+00-17-8D   (hex)		Checkpoint Systems, Inc.
+00178D     (base 16)		Checkpoint Systems, Inc.
+				101 Wolf Drive
+				Thorofare  NJ  08086
+				US
+
+00-17-8E   (hex)		Gunnebo Cash Automation AB
+00178E     (base 16)		Gunnebo Cash Automation AB
+				Fabriksgatan 10
+				Göteborg    402 27
+				SE
+
+00-17-C7   (hex)		MARA Systems Consulting AB
+0017C7     (base 16)		MARA Systems Consulting AB
+				Instrumentvägen 45
+				Stockholm    126 53
+				SE
+
+00-17-5D   (hex)		Dongseo system.
+00175D     (base 16)		Dongseo system.
+				974-21 Mansu-dong Namdong-gu
+				Incheon  In-Cheon  405-865
+				KR
+
+00-17-50   (hex)		GSI Group, MicroE Systems
+001750     (base 16)		GSI Group, MicroE Systems
+				8 Erie Drive
+				Natick  MA  01760
+				US
+
+00-17-55   (hex)		GE Security
+001755     (base 16)		GE Security
+				12345 SW Leveton Drive
+				Tualatin  OR  97062
+				US
+
+00-17-1D   (hex)		DIGIT
+00171D     (base 16)		DIGIT
+				Via Pasteur , 1/3
+				S.Pietro Mosezzo  NOVARA  28060
+				IT
+
+00-17-18   (hex)		Vansco Electronics Oy
+001718     (base 16)		Vansco Electronics Oy
+				Tiilenlyojankatu 5
+				FORSSA    30101
+				FI
+
+00-17-19   (hex)		Audiocodes USA, Inc
+001719     (base 16)		Audiocodes USA, Inc
+				27 World's Fair Drive
+				Somerset  NJ  08873
+				US
+
+00-17-76   (hex)		Meso Scale Diagnostics, LLC
+001776     (base 16)		Meso Scale Diagnostics, LLC
+				9238 Gaither Rd.
+				Gaithersburg  MD  20877
+				US
+
+00-17-79   (hex)		QuickTel
+001779     (base 16)		QuickTel
+				Cornishe El-Nile, Maasara
+				Cairo    11743
+				EG
+
+00-17-67   (hex)		Earforce AS
+001767     (base 16)		Earforce AS
+				P.O.Box 4
+				Bryne    4349
+				NO
+
+00-17-39   (hex)		Bright Headphone Electronics Company
+001739     (base 16)		Bright Headphone Electronics Company
+				8F, 109, Li De Street
+				Chung Ho City  Taipei County  235
+				TW
+
+00-17-2C   (hex)		TAEJIN INFOTECH
+00172C     (base 16)		TAEJIN INFOTECH
+				6F Woolim e-Biz Center, 170-5
+				Seoul    152-769
+				KR
+
+00-17-51   (hex)		Online Corporation
+001751     (base 16)		Online Corporation
+				22F-3, No. 398, Huan Pei Road,
+				Chung Li  Taoyuan  320
+				TW
+
+00-17-4C   (hex)		Millipore
+00174C     (base 16)		Millipore
+				1, rue Jacques Monod
+				Guyancourt    78280
+				FR
+
+00-17-45   (hex)		INNOTZ CO., Ltd
+001745     (base 16)		INNOTZ CO., Ltd
+				14F, Prime Center 546-4 Guui-Dong Kwanggin-Gu
+				Seoul  Seoul  
+				KR
+
+00-17-48   (hex)		Neokoros Brasil Ltda
+001748     (base 16)		Neokoros Brasil Ltda
+				Rua 86, numero 501, Setor Sul
+				Goiania  Goias  74083-330
+				BR
+
+00-17-63   (hex)		Essentia S.p.A.
+001763     (base 16)		Essentia S.p.A.
+				Via G.B. Vico, 29
+				Cella (RE)  Reggio Emilia  42040
+				IT
+
+00-17-01   (hex)		KDE, Inc.
+001701     (base 16)		KDE, Inc.
+				KDE TOWN, 42-7, Mangwol-dong
+				Hanam  Gyeonggi-do  465-150
+				KR
+
+00-16-F6   (hex)		Video Products Group
+0016F6     (base 16)		Video Products Group
+				1600 Emerson Avenue
+				Oxnard  California  93033
+				US
+
+00-16-EE   (hex)		Royaldigital Inc.
+0016EE     (base 16)		Royaldigital Inc.
+				8F., No.308, Sec.1, Neihu Rd.
+				Taipei City    114
+				TW
+
+00-16-DE   (hex)		FAST Inc
+0016DE     (base 16)		FAST Inc
+				905 Honeyspot Rd
+				Stratford  CT  06615
+				US
+
+00-16-DA   (hex)		Futronic Technology Co. Ltd.
+0016DA     (base 16)		Futronic Technology Co. Ltd.
+				Room 1016A, 10/F., Profit Ind. Bldg.,
+				Kwai Chung    00000
+				HK
+
+00-16-D4   (hex)		Compal Communications, Inc.
+0016D4     (base 16)		Compal Communications, Inc.
+				7th, FL, No. 319, Sec. 4, Pa-Teh rd.
+				Taipei    886
+				TW
+
+00-16-D7   (hex)		Sunways AG
+0016D7     (base 16)		Sunways AG
+				Macairestraße 3-5
+				Konstanz  Baden-Württemberg  78467
+				DE
+
+00-16-FF   (hex)		Wamin Optocomm Mfg Corp
+0016FF     (base 16)		Wamin Optocomm Mfg Corp
+				No. 239 Qiaohe Road
+				Zhonghe City  Taipei County  235
+				TW
+
+00-16-D1   (hex)		ZAT a.s.
+0016D1     (base 16)		ZAT a.s.
+				K Podlesi 541
+				Pribram VI    26180
+				CZ
+
+00-16-C5   (hex)		Shenzhen Xing Feng Industry Co.,Ltd
+0016C5     (base 16)		Shenzhen Xing Feng Industry Co.,Ltd
+				Floor 1 - 4, Block 25, Hongtian Jinyuan Industrial,
+				Shenzhen  GuangDong  86
+				CN
+
+00-16-CC   (hex)		Xcute Mobile Corp.
+0016CC     (base 16)		Xcute Mobile Corp.
+				3F. No.25, Ally15, Lane 120, Sec.1, Neihu Rd.
+				Taipei    114
+				TW
+
+00-17-17   (hex)		Leica Geosystems AG
+001717     (base 16)		Leica Geosystems AG
+				Heinrich Wild Strasse
+				Heerbrugg  St. Gallen  CH-9435
+				CH
+
+00-17-15   (hex)		Qstik
+001715     (base 16)		Qstik
+				Cartel Business Estate
+				Harlow  Essex  CM20 2TT
+				GB
+
+00-17-0E   (hex)		Cisco Systems, Inc
+00170E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-17-05   (hex)		Methode Electronics
+001705     (base 16)		Methode Electronics
+				7401 W. Wilson
+				Chicago  IL  60706
+				US
+
+00-16-AA   (hex)		Kei Communication Technology Inc.
+0016AA     (base 16)		Kei Communication Technology Inc.
+				8-BAN CHUOU
+				KOBE  HYOGO  650-0024
+				JP
+
+00-16-A8   (hex)		CWT CO., LTD.
+0016A8     (base 16)		CWT CO., LTD.
+				10F No. 74 Sec. 1 Chung-Hua Rd.
+				Taipei    108
+				TW
+
+00-16-A6   (hex)		Dovado FZ-LLC
+0016A6     (base 16)		Dovado FZ-LLC
+				Al-Thuraya Tower 1, office 504
+				Dubai    
+				AE
+
+00-16-ED   (hex)		Utility, Inc
+0016ED     (base 16)		Utility, Inc
+				250 E Ponce de Leon Ave Suite 700
+				Decatur  GA  30030
+				US
+
+00-16-C7   (hex)		Cisco Systems, Inc
+0016C7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-16-71   (hex)		Symphox Information Co.
+001671     (base 16)		Symphox Information Co.
+				15F, No. 51, Sec. 3, Minsheng E. Road
+				Taipei City    104
+				TW
+
+00-16-69   (hex)		MRV Communication (Networks) LTD
+001669     (base 16)		MRV Communication (Networks) LTD
+				P.O Box 614
+				Yokneam    20692
+				US
+
+00-16-68   (hex)		Eishin Electronics
+001668     (base 16)		Eishin Electronics
+				Nishiku Miyashita 1-19
+				Kobe City  Hyogo Prefecture  651-2146
+				JP
+
+00-16-40   (hex)		Asmobile Communication Inc.
+001640     (base 16)		Asmobile Communication Inc.
+				No.11 Lane 120, Li-Te Rd., Peitou 112, Taipei, Taiwan, R.O.C
+				Taipei    112
+				TW
+
+00-16-3C   (hex)		Rebox B.V.
+00163C     (base 16)		Rebox B.V.
+				Hendrik Figeeweg 1X
+				Haarlem  Noord-Holland  2031 BJ
+				NL
+
+00-16-7D   (hex)		Sky-Line Information Co., Ltd.
+00167D     (base 16)		Sky-Line Information Co., Ltd.
+				8F.,No.38,Sihyuan Rd.,
+				Sinihuang  Taipei  242
+				TW
+
+00-16-77   (hex)		Bihl + Wiedemann GmbH
+001677     (base 16)		Bihl + Wiedemann GmbH
+				Flosswoerthstr 41
+				Mannheim    68199
+				DE
+
+00-16-55   (hex)		FUHO TECHNOLOGY Co., LTD
+001655     (base 16)		FUHO TECHNOLOGY Co., LTD
+				No. 30, Lane 726, Jinma Rd, Sec. 3
+				Chang Hua    500
+				TW
+
+00-16-46   (hex)		Cisco Systems, Inc
+001646     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-16-48   (hex)		SSD Company Limited
+001648     (base 16)		SSD Company Limited
+				3-3-4 Higashiyagura
+				Kusatsu-city  Shiga  525-0054
+				JP
+
+00-16-72   (hex)		Zenway enterprise ltd
+001672     (base 16)		Zenway enterprise ltd
+				6F., No.20, Lane 150, Jhongsing Rd., Sijhih City
+				Taipei    886
+				TW
+
+00-16-5A   (hex)		Harman Specialty Group
+00165A     (base 16)		Harman Specialty Group
+				3 Oak Park Drive
+				Bedford  MA  01730
+				US
+
+00-16-59   (hex)		Z.M.P. RADWAG
+001659     (base 16)		Z.M.P. RADWAG
+				Bracka 28 street
+				RADOM  Mazowieckie  26-600
+				PL
+
+00-16-A2   (hex)		CentraLite Systems, Inc.
+0016A2     (base 16)		CentraLite Systems, Inc.
+				6420 Wall Street
+				Mobile  AL  36695
+				US
+
+00-16-95   (hex)		AVC Technology (International) Limited
+001695     (base 16)		AVC Technology (International) Limited
+				6/F Enterprise Square III
+				Kowloon Bay    
+				HK
+
+00-15-D8   (hex)		Interlink Electronics
+0015D8     (base 16)		Interlink Electronics
+				546 Flynn Road
+				Camarillo  CA  93012
+				US
+
+00-15-D4   (hex)		Emitor AB
+0015D4     (base 16)		Emitor AB
+				Sjöviksbacken 14
+				Stockholm    117 43
+				SE
+
+00-15-D5   (hex)		NICEVT
+0015D5     (base 16)		NICEVT
+				Warshawskoe shosse 125
+				Moscow    117405
+				RU
+
+00-16-0C   (hex)		LPL  DEVELOPMENT S.A. DE C.V
+00160C     (base 16)		LPL  DEVELOPMENT S.A. DE C.V
+				LAGO GINEBRA 380 P3
+				  D.F.  11480
+				MX
+
+00-16-0B   (hex)		TVWorks LLC
+00160B     (base 16)		TVWorks LLC
+				Two Belvedere Place, #200
+				Mill Valley  CA  94941
+				US
+
+00-16-03   (hex)		COOLKSKY Co., LTD
+001603     (base 16)		COOLKSKY Co., LTD
+				Shingsung offcetel A511, 1588-1 Secho
+				  Seoul  137-070
+				KR
+
+00-15-EA   (hex)		Tellumat (Pty) Ltd
+0015EA     (base 16)		Tellumat (Pty) Ltd
+				64/74 White Road
+				Cape Town  Western Province  7945
+				ZA
+
+00-15-E2   (hex)		Dr.Ing. Herbert Knauer GmbH
+0015E2     (base 16)		Dr.Ing. Herbert Knauer GmbH
+				Hegauer Weg 38
+				Berlin    14163
+				DE
+
+00-15-E1   (hex)		Picochip Ltd
+0015E1     (base 16)		Picochip Ltd
+				Upper Borough Court
+				Bath    BA1 1RG
+				GB
+
+00-15-DF   (hex)		Clivet S.p.A.
+0015DF     (base 16)		Clivet S.p.A.
+				via Camp Lonc 25
+				Feltre  Belluno  32030
+				IT
+
+00-16-1D   (hex)		Innovative Wireless Technologies, Inc.
+00161D     (base 16)		Innovative Wireless Technologies, Inc.
+				1047 Vista Park Dr.
+				Forest  VA  24551
+				US
+
+00-16-11   (hex)		Altecon Srl
+001611     (base 16)		Altecon Srl
+				Via F.lli Cairoli, 17
+				Lissone  Milano  20035
+				IT
+
+00-16-09   (hex)		Unitech electronics co., ltd.
+001609     (base 16)		Unitech electronics co., ltd.
+				5F,No.136,Lane 235 ,Pao-chiao Rd.,
+				Hsin-Tien city  Taipei Hsien  231
+				TW
+
+00-15-F5   (hex)		Sustainable Energy Systems
+0015F5     (base 16)		Sustainable Energy Systems
+				#500, 609 14th Street NW
+				Calgary  Ab  T2T 1P3
+				CA
+
+00-15-F1   (hex)		KYLINK Communications Corp.
+0015F1     (base 16)		KYLINK Communications Corp.
+				8F-8, No. 351, Sec. 2, Zhongshan Rd., Zhonghe City
+				    23504
+				TW
+
+00-16-23   (hex)		Interval Media
+001623     (base 16)		Interval Media
+				3200 Ash Street
+				Palo Alto  CA  94306
+				US
+
+00-16-19   (hex)		Lancelan Technologies S.L.
+001619     (base 16)		Lancelan Technologies S.L.
+				C/Angel Guimera 208 bis
+				Terrassa  Barcelona  08223
+				ES
+
+00-16-25   (hex)		Impinj, Inc.
+001625     (base 16)		Impinj, Inc.
+				400 Fairview Ave N, Suite 1200
+				Seattle  WA  98109
+				US
+
+00-15-86   (hex)		Xiamen Overseas Chinese Electronic Co., Ltd.
+001586     (base 16)		Xiamen Overseas Chinese Electronic Co., Ltd.
+				No. 22, Huli Street,
+				Xiamen  Fujian  361006
+				CN
+
+00-15-7E   (hex)		Weidmüller Interface GmbH & Co. KG
+00157E     (base 16)		Weidmüller Interface GmbH & Co. KG
+				Klingenbergstraße 16
+				Detmold    32758
+				DE
+
+00-15-80   (hex)		U-WAY CORPORATION
+001580     (base 16)		U-WAY CORPORATION
+				3F-2, NO. 125, LANE 235, PAO-CHIAO
+				HSINTIEN CITY  TAIPEI HSIEN  231
+				TW
+
+00-15-7C   (hex)		Dave Networks, Inc.
+00157C     (base 16)		Dave Networks, Inc.
+				2151 O'tool Avenue
+				San Jose  CA  95131
+				US
+
+00-15-7F   (hex)		ChuanG International Holding CO.,LTD.
+00157F     (base 16)		ChuanG International Holding CO.,LTD.
+				1F, NO.12, Alley 1, Lane 125, Guolian Street 4Lirn, Wuhan Village
+				Taoyuan  Longtan  325
+				US
+
+00-15-B3   (hex)		Caretech AB
+0015B3     (base 16)		Caretech AB
+				Nyborgsvägen 197
+				Kalix    95291
+				SE
+
+00-15-AA   (hex)		Rextechnik International Co.,
+0015AA     (base 16)		Rextechnik International Co.,
+				Room 5-3, No.51, Section 2, Keelung Road
+				Taipei    110
+				TW
+
+00-15-A6   (hex)		Digital Electronics Products Ltd.
+0015A6     (base 16)		Digital Electronics Products Ltd.
+				Room 301, 3 rd Floor, Tsun Yip Centre
+				Kwun Tong    852
+				HK
+
+00-15-9D   (hex)		Tripp Lite 
+00159D     (base 16)		Tripp Lite 
+				1111 W 35th Street
+				Chicago  IL  60609
+				US
+
+00-15-D6   (hex)		OSLiNK Sp. z o.o.
+0015D6     (base 16)		OSLiNK Sp. z o.o.
+				ul. Marsa 27
+				Gdansk    80299
+				PL
+
+00-15-92   (hex)		Facom UK Ltd (Melksham)
+001592     (base 16)		Facom UK Ltd (Melksham)
+				Lancaster House
+				Melksham  Wiltshire  SN104FB
+				US
+
+00-15-8B   (hex)		Park Air Systems Ltd
+00158B     (base 16)		Park Air Systems Ltd
+				Northfields
+				Peterborough    PE6 8UE
+				GB
+
+00-15-76   (hex)		LABiTec - Labor Biomedical Technologies GmbH
+001576     (base 16)		LABiTec - Labor Biomedical Technologies GmbH
+				An der Strusbek 6
+				    
+				DE
+
+00-15-BE   (hex)		Iqua Ltd.
+0015BE     (base 16)		Iqua Ltd.
+				Hyvoninkatu 1
+				Salo  Varsinais-Suomi  24240
+				US
+
+00-15-C7   (hex)		Cisco Systems, Inc
+0015C7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-5E   (hex)		Morgan Stanley
+00155E     (base 16)		Morgan Stanley
+				750 7th Avenue
+				New York  NY  10019
+				US
+
+00-15-0B   (hex)		SAGE INFOTECH LTD.
+00150B     (base 16)		SAGE INFOTECH LTD.
+				3F, No30, INDUSTRY E. 9TH RD.,SCIENCE-BASED
+				HSIN-CHU  TAIWAN  300
+				TW
+
+00-15-07   (hex)		Renaissance Learning Inc
+001507     (base 16)		Renaissance Learning Inc
+				2911 Peach Street
+				Wisconsin Rapids  Wisconsin  54494
+				US
+
+00-15-08   (hex)		Global Target Enterprise Inc
+001508     (base 16)		Global Target Enterprise Inc
+				5F, No. 186, Sec. 2, Chung-Hsing Rd.,
+				Hsin Tien,  Taipei county  231
+				TW
+
+00-15-02   (hex)		BETA tech
+001502     (base 16)		BETA tech
+				15 rue d'apollo
+				L'UNION    31240
+				FR
+
+00-14-FD   (hex)		Thecus Technology Corp.
+0014FD     (base 16)		Thecus Technology Corp.
+				15F.,No. 79,Sec. 1,Sintai 5th RD.,
+				Sijhih City  Taipei County  221
+				TW
+
+00-14-FC   (hex)		Extandon, Inc.
+0014FC     (base 16)		Extandon, Inc.
+				39350 Civic Center Drive Ste. 160
+				Fremont  CA  94538
+				US
+
+00-14-F8   (hex)		Scientific Atlanta
+0014F8     (base 16)		Scientific Atlanta
+				5030 Sugarloaf Parkway
+				Lawrenceville  Ga  30042
+				US
+
+00-14-F7   (hex)		CREVIS Co., LTD
+0014F7     (base 16)		CREVIS Co., LTD
+				157-1, Hagal-Dong
+				Youngin  Kyungki  446930
+				KR
+
+00-15-15   (hex)		Leipold+Co.GmbH
+001515     (base 16)		Leipold+Co.GmbH
+				Kreuzwiese 12
+				Rockenhausen  RLP  D-67806
+				DE
+
+00-15-0F   (hex)		mingjong
+00150F     (base 16)		mingjong
+				8F,NO.1,LANE 16,SZE CHUAN ROAD,SEC.2,PANCHIAO CITY.
+				TAIPEI    220
+				TW
+
+00-15-5C   (hex)		Dresser Wayne
+00155C     (base 16)		Dresser Wayne
+				3814 Jarrett Way
+				Austin  Texas  78728
+				US
+
+00-15-59   (hex)		Securaplane Technologies, Inc.
+001559     (base 16)		Securaplane Technologies, Inc.
+				10800 N. Mavinee Dr.
+				Tucson  AZ  85737
+				US
+
+00-15-57   (hex)		Olivetti
+001557     (base 16)		Olivetti
+				Via Jervis 77
+				Ivrea  Torino  10015
+				IT
+
+00-15-54   (hex)		Atalum Wireless S.A.
+001554     (base 16)		Atalum Wireless S.A.
+				C/ Orellana 5, 1º I
+				Madrid    28004
+				ES
+
+00-15-3B   (hex)		EMH metering GmbH & Co. KG
+00153B     (base 16)		EMH metering GmbH & Co. KG
+				Neu- Galliner Weg 1
+				  Mecklenburg-Vorpommern  
+				DE
+
+00-15-37   (hex)		Ventus Networks
+001537     (base 16)		Ventus Networks
+				800 Connecticut Ave
+				Norwalk  CT  06854
+				US
+
+00-15-33   (hex)		NADAM.CO.,LTD
+001533     (base 16)		NADAM.CO.,LTD
+				#91-3 Wangrim-Li
+				Hwaseong  Gyeonggi  445-895
+				KR
+
+00-15-34   (hex)		A Beltrónica-Companhia de Comunicações, Lda
+001534     (base 16)		A Beltrónica-Companhia de Comunicações, Lda
+				Rua Dr. José Baptista de Sousa, 27
+				Lisbon    1549-002 Lis
+				PT
+
+00-15-3F   (hex)		Alcatel Alenia Space Italia
+00153F     (base 16)		Alcatel Alenia Space Italia
+				Strada Padana Superiore 290
+				Vimodrone  MI  20090
+				IT
+
+00-15-18   (hex)		Shenzhen 10MOONS Technology Development CO.,Ltd
+001518     (base 16)		Shenzhen 10MOONS Technology Development CO.,Ltd
+				Add:3F,Huaxing building, QiaoXiang road,
+				shenzhen  guangdong  518053
+				CN
+
+00-15-26   (hex)		Remote Technologies Inc
+001526     (base 16)		Remote Technologies Inc
+				 5775 12th Ave E, Suite 180
+				Shakopee  MN  55379
+				US
+
+00-14-F1   (hex)		Cisco Systems, Inc
+0014F1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-14-EA   (hex)		S Digm Inc. (Safe Paradigm Inc.)
+0014EA     (base 16)		S Digm Inc. (Safe Paradigm Inc.)
+				5F, Shin-an Bldg. 89-8,
+				Songpa-Gu  Seoul  138-201
+				KR
+
+00-14-E5   (hex)		Alticast
+0014E5     (base 16)		Alticast
+				16th floor, Nara Bldg, 1328-3
+				  Seoul  137-070
+				KR
+
+00-14-9F   (hex)		System and Chips, Inc.
+00149F     (base 16)		System and Chips, Inc.
+				4F,No. 1, Lane 50, NanKang Road, Section 3,
+				Taipei    115
+				TW
+
+00-14-B3   (hex)		CoreStar International Corp
+0014B3     (base 16)		CoreStar International Corp
+				1044 Sandy Hill Rd
+				Irwin  PA  15642
+				US
+
+00-14-B1   (hex)		Axell Wireless Limited
+0014B1     (base 16)		Axell Wireless Limited
+				Aerial HOuse
+				Chesham  Buckinghamshire  HP5 2QD
+				GB
+
+00-14-E0   (hex)		LET'S Corporation
+0014E0     (base 16)		LET'S Corporation
+				Bancho Bldg. 4F, 2-18-20 Marunouchi, Naka
+				Nagoya  Aichi  460-0002
+				JP
+
+00-14-E2   (hex)		datacom systems inc.
+0014E2     (base 16)		datacom systems inc.
+				9 adler drive
+				east syracuse  n.y.  13057
+				US
+
+00-14-E4   (hex)		infinias, LLC
+0014E4     (base 16)		infinias, LLC
+				857 West Carmel Drive
+				Carmel  IN  46032
+				US
+
+00-14-CC   (hex)		Zetec, Inc.
+0014CC     (base 16)		Zetec, Inc.
+				8226 Bracken Place SE
+				Snoqualmie  WA  98065
+				US
+
+00-14-CB   (hex)		LifeSync Corporation
+0014CB     (base 16)		LifeSync Corporation
+				1 E Broward Boulevard, Suite 1701
+				Fort Lauderdale  Florida  33301
+				US
+
+00-14-C6   (hex)		Quixant Ltd
+0014C6     (base 16)		Quixant Ltd
+				61A Mount Pleasant
+				England  Kent  TN16 3TP
+				GB
+
+00-14-98   (hex)		Viking Design Technology
+001498     (base 16)		Viking Design Technology
+				2F, No.2, Lane 42,
+				Taipei    111
+				TW
+
+00-14-96   (hex)		Phonic Corp.
+001496     (base 16)		Phonic Corp.
+				12thFl, 59 Tung Hsing Rd
+				Taipei    110
+				TW
+
+00-14-93   (hex)		Systimax Solutions
+001493     (base 16)		Systimax Solutions
+				1300 E Lookout Drive
+				Richardson  Texas  75082
+				US
+
+00-14-DB   (hex)		Elma Trenew Electronic GmbH
+0014DB     (base 16)		Elma Trenew Electronic GmbH
+				Stuttgarter Straße 11
+				Pforzheim    75179
+				DE
+
+00-14-3A   (hex)		RAYTALK INTERNATIONAL SRL
+00143A     (base 16)		RAYTALK INTERNATIONAL SRL
+				St. Marecchia 79
+				  Verucchio (RN)  47826
+				IT
+
+00-14-36   (hex)		Qwerty Elektronik AB
+001436     (base 16)		Qwerty Elektronik AB
+				Gryt 44
+				Ösmo    610 60
+				SE
+
+00-14-6B   (hex)		Anagran, Inc.
+00146B     (base 16)		Anagran, Inc.
+				580 North Pastoria Av
+				Sunnyvale  CA  94085
+				US
+
+00-14-61   (hex)		CORONA CORPORATION
+001461     (base 16)		CORONA CORPORATION
+				7-7, HIGASHI-SHINBO
+				SANJO-SHI  NIIGATA  955-8510
+				JP
+
+00-14-62   (hex)		Digiwell Technology, inc
+001462     (base 16)		Digiwell Technology, inc
+				4F, No.1, Prosperity 1st Road
+				  Hsinchu Science Park  300
+				TW
+
+00-14-63   (hex)		IDCS N.V.
+001463     (base 16)		IDCS N.V.
+				Hellebeemden 9
+				Hasselt  Limburg  3500
+				BE
+
+00-14-65   (hex)		Novo Nordisk A/S
+001465     (base 16)		Novo Nordisk A/S
+				Novo Alle
+				Bagsvaerd    2880
+				DK
+
+00-14-74   (hex)		K40 Electronics
+001474     (base 16)		K40 Electronics
+				600 Tollgate Rd. Unit A
+				Elgin  IL  60123
+				US
+
+00-14-6F   (hex)		Kohler Co
+00146F     (base 16)		Kohler Co
+				444 Highland Drive
+				Kohler  WI  53044
+				US
+
+00-14-66   (hex)		Kleinhenz Elektronik GmbH
+001466     (base 16)		Kleinhenz Elektronik GmbH
+				Greinerberg 14
+				Munich    81371
+				DE
+
+00-14-7F   (hex)		Thomson Telecom Belgium
+00147F     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				Edegem  Antwerp  B-2650
+				BE
+
+00-14-75   (hex)		Wiline Networks, Inc.
+001475     (base 16)		Wiline Networks, Inc.
+				741 Alexander Rd
+				Princeton  NJ  08540
+				US
+
+00-14-86   (hex)		Echo Digital Audio Corporation
+001486     (base 16)		Echo Digital Audio Corporation
+				402 E Carrillo St
+				Santa Barbara  CA  93101
+				US
+
+00-14-82   (hex)		Aurora Networks
+001482     (base 16)		Aurora Networks
+				5400 Betsy Ross Drive
+				Santa Clara  CA  95054
+				US
+
+00-14-55   (hex)		Coder Electronics Corporation
+001455     (base 16)		Coder Electronics Corporation
+				Takeda Bldg, 1-30-6 Shirasagi,
+				Nakano-ku  Tokyo  165-0035
+				JP
+
+00-14-4E   (hex)		SRISA
+00144E     (base 16)		SRISA
+				36/1, Nakhimovskiy pr-t
+				  Moscow  117218
+				RU
+
+00-14-8D   (hex)		Cubic Defense Simulation Systems
+00148D     (base 16)		Cubic Defense Simulation Systems
+				2001 W. Oakridge Road
+				Orlando  FL  32809
+				US
+
+00-14-3D   (hex)		Aevoe Inc.
+00143D     (base 16)		Aevoe Inc.
+				11F, No 23, Keelung Road
+				Taipei  HsinYi District  110
+				TW
+
+00-14-15   (hex)		Intec Automation inc.
+001415     (base 16)		Intec Automation inc.
+				2751 Arbutus Rd.
+				Victoria  British Columbia  V8N 5X7
+				CA
+
+00-14-10   (hex)		Suzhou Keda Technology CO.,Ltd
+001410     (base 16)		Suzhou Keda Technology CO.,Ltd
+				131,Jinshan Road
+				Suzhou  JiangSu  215011
+				CN
+
+00-14-17   (hex)		RSE Informations Technologie GmbH
+001417     (base 16)		RSE Informations Technologie GmbH
+				Silberbergstrasse 9
+				Wolfsberg  Kärnten  9400
+				AT
+
+00-14-33   (hex)		Empower Technologies(Canada) Inc.
+001433     (base 16)		Empower Technologies(Canada) Inc.
+				Unit 405 - 5600 Parkwood Way,
+				Richmond  British Columbia  V6V 2M2
+				CA
+
+00-14-34   (hex)		Keri Systems, Inc
+001434     (base 16)		Keri Systems, Inc
+				2305 Bering Dr
+				San Jose  CA  95131
+				US
+
+00-13-DE   (hex)		Adapt4, LLC
+0013DE     (base 16)		Adapt4, LLC
+				1050 W Nasa Blvd,
+				Melbourne  FL  32901
+				US
+
+00-13-DD   (hex)		Abbott Diagnostics
+0013DD     (base 16)		Abbott Diagnostics
+				5440 Patrick Henry Drive
+				Santa Clara  CA  95054
+				US
+
+00-13-D7   (hex)		SPIDCOM Technologies SA
+0013D7     (base 16)		SPIDCOM Technologies SA
+				137 avenue du General LECLERC
+				BOURG LA REINE    92340
+				FR
+
+00-13-C7   (hex)		IONOS Co.,Ltd.
+0013C7     (base 16)		IONOS Co.,Ltd.
+				1-36-18 Miyasaka
+				Setagaya-ku  Tokyo  156-0051
+				JP
+
+00-14-23   (hex)		J-S Co. NEUROCOM
+001423     (base 16)		J-S Co. NEUROCOM
+				Energeticheskii proezd, 6
+				Moscow    111250
+				RU
+
+00-14-25   (hex)		Galactic Computing Corp.
+001425     (base 16)		Galactic Computing Corp.
+				1/F
+				Chai Wan District    
+				HK
+
+00-14-19   (hex)		SIDSA
+001419     (base 16)		SIDSA
+				PTM - TORRES QUEVEDO 1
+				TRES CANTOS  MADRID  28760
+				ES
+
+00-13-EE   (hex)		JBX Designs Inc.
+0013EE     (base 16)		JBX Designs Inc.
+				PO Box 970158
+				Boca Raton  FL  33497
+				US
+
+00-13-E5   (hex)		TENOSYS, INC.
+0013E5     (base 16)		TENOSYS, INC.
+				Seojin B/D, 1564-1, Seocho-dong,
+				  Seoul  137-070
+				KR
+
+00-13-E2   (hex)		GeoVision Inc.
+0013E2     (base 16)		GeoVision Inc.
+				9F.,No.246,Sec.1,
+				Taipei    114
+				TW
+
+00-14-02   (hex)		kk-electronic a/s
+001402     (base 16)		kk-electronic a/s
+				Cypresvej 6
+				Herning    7400
+				DK
+
+00-13-FF   (hex)		Dage-MTI of MC, Inc.
+0013FF     (base 16)		Dage-MTI of MC, Inc.
+				701 N. Roeske Ave.
+				Michigan City  IN  46360
+				US
+
+00-13-BC   (hex)		Artimi Ltd
+0013BC     (base 16)		Artimi Ltd
+				Betjeman House
+				Cambridge  Cambridgeshire  CB2 1LQ
+				GB
+
+00-14-08   (hex)		Eka Systems Inc.
+001408     (base 16)		Eka Systems Inc.
+				20251 Century Blvd
+				Germantown  MD  20874
+				US
+
+00-13-A7   (hex)		BATTELLE MEMORIAL INSTITUTE
+0013A7     (base 16)		BATTELLE MEMORIAL INSTITUTE
+				505 KING AVE
+				COLUMBUS  OHIO  43201
+				US
+
+00-13-A6   (hex)		Extricom Ltd
+0013A6     (base 16)		Extricom Ltd
+				Glil Yam
+				Herzlia    46905
+				IL
+
+00-13-A2   (hex)		MaxStream, Inc
+0013A2     (base 16)		MaxStream, Inc
+				355 South 520 West Suite 180
+				Lindon  Ut  84042
+				US
+
+00-13-9F   (hex)		Electronics Design Services, Co., Ltd.
+00139F     (base 16)		Electronics Design Services, Co., Ltd.
+				5-10-20 Tokumaru
+				Itabashi-ku  Tokyo  175-0083
+				JP
+
+00-13-A0   (hex)		ALGOSYSTEM Co., Ltd.
+0013A0     (base 16)		ALGOSYSTEM Co., Ltd.
+				656 kobirao mihara-cho
+				sakai  osaka  587-0021
+				JP
+
+00-13-9B   (hex)		ioIMAGE Ltd.
+00139B     (base 16)		ioIMAGE Ltd.
+				3 Maskit Street
+				Herzliya Pituach  IL  46733
+				IL
+
+00-13-96   (hex)		Acbel Polytech Inc.
+001396     (base 16)		Acbel Polytech Inc.
+				No.159,Sec.3, Tam-King Rd.,
+				Tamsui  Taipei  251
+				TW
+
+00-13-93   (hex)		Panta Systems, Inc.
+001393     (base 16)		Panta Systems, Inc.
+				20450 Stevens Creek Blvd.
+				Cupertino  California  95014
+				US
+
+00-13-8B   (hex)		Phantom Technologies LLC
+00138B     (base 16)		Phantom Technologies LLC
+				7825 Fay Avenue, Suite 200
+				La Jolla  CA  92037
+				US
+
+00-13-88   (hex)		WiMedia Alliance
+001388     (base 16)		WiMedia Alliance
+				2400 Camino Ramon
+				San Ramon  CA  94583
+				US
+
+00-13-6E   (hex)		Techmetro Corp.
+00136E     (base 16)		Techmetro Corp.
+				4F. Dongam B/D., 264-5, YangJae-Dong
+				Seoul    137-130
+				KR
+
+00-13-6D   (hex)		Tentaculus AB
+00136D     (base 16)		Tentaculus AB
+				Studiegangen 3
+				Ostersund  Jamtland  SE - 831 40
+				SE
+
+00-13-6A   (hex)		Hach Lange Sarl
+00136A     (base 16)		Hach Lange Sarl
+				6, route de Compois
+				VESENAZ  GENEVA  1222
+				CH
+
+00-13-B2   (hex)		Carallon Limited
+0013B2     (base 16)		Carallon Limited
+				Studio G20 Shepherds Building
+				  London  W14 0DA
+				GB
+
+00-13-AD   (hex)		Sendo Ltd
+0013AD     (base 16)		Sendo Ltd
+				Hatchford Brook
+				Birmingham  West Midlands  B26 3RZ
+				GB
+
+00-13-AA   (hex)		ALS  & TEC Ltd.
+0013AA     (base 16)		ALS  & TEC Ltd.
+				6 B. Kazachya str.
+				Saratov  Saratov region  410600
+				RU
+
+00-13-A4   (hex)		KeyEye Communications
+0013A4     (base 16)		KeyEye Communications
+				9785 Goethe
+				Sacramento  CA  95827
+				US
+
+00-13-4D   (hex)		Inepro BV
+00134D     (base 16)		Inepro BV
+				Pondweg 7
+				  Nieuw- Vennep  
+				NL
+
+00-13-4B   (hex)		ToGoldenNet Technology Inc.
+00134B     (base 16)		ToGoldenNet Technology Inc.
+				5F-1 No.25,Pu-ding.,
+				Hsin-Chu    300
+				TW
+
+00-13-84   (hex)		Advanced Motion Controls
+001384     (base 16)		Advanced Motion Controls
+				3805 Calle Tecate
+				Camarillo  California  93012
+				US
+
+00-13-7B   (hex)		Movon Corporation
+00137B     (base 16)		Movon Corporation
+				5th, Hyunjuk B/D
+				Seoul    135-092
+				KR
+
+00-13-53   (hex)		HYDAC Filtertechnik GMBH
+001353     (base 16)		HYDAC Filtertechnik GMBH
+				Industriegebiet
+				Sulzbach/Saar  Saarland  66280
+				DE
+
+00-13-63   (hex)		Verascape, Inc.
+001363     (base 16)		Verascape, Inc.
+				1101 31st St., Suite #190
+				Downers Grove  IL  60515
+				US
+
+00-13-03   (hex)		GateConnect
+001303     (base 16)		GateConnect
+				Eisenhutweg 69
+				12487 Berlin    12487
+				DE
+
+00-13-04   (hex)		Flaircomm Technologies Co. LTD
+001304     (base 16)		Flaircomm Technologies Co. LTD
+				2088 Huashan Road
+				Shanghai    200030
+				CN
+
+00-12-F9   (hex)		URYU SEISAKU, LTD.
+0012F9     (base 16)		URYU SEISAKU, LTD.
+				1-2-11
+				HIGASHINARI-KU  OSAKA  537-0002
+				JP
+
+00-13-37   (hex)		Orient Power Home Network Ltd.
+001337     (base 16)		Orient Power Home Network Ltd.
+				307 Harbour Centre, Tower 1,
+				    
+				HK
+
+00-13-34   (hex)		Arkados, Inc.
+001334     (base 16)		Arkados, Inc.
+				948 US HWY 22
+				North Plainfield  NJ  07060
+				US
+
+00-13-32   (hex)		Beijing Topsec Network Security Technology Co., Ltd.
+001332     (base 16)		Beijing Topsec Network Security Technology Co., Ltd.
+				Huakong Tower
+				Haidian District  Beijing  100085
+				CN
+
+00-13-1F   (hex)		NxtPhase T&D, Corp.
+00131F     (base 16)		NxtPhase T&D, Corp.
+				3040 E. Broadway
+				Vancouver  BC  V5M 1Z4
+				CA
+
+00-12-DC   (hex)		SunCorp Industrial Limited
+0012DC     (base 16)		SunCorp Industrial Limited
+				No.68 Guowei Road,
+				Liantang Industrial District,  Shenzhen,  
+				CN
+
+00-12-FF   (hex)		Lely Industries N.V.
+0012FF     (base 16)		Lely Industries N.V.
+				Weverskade 110
+				Maassluis  Zuid-Holland  3147PA
+				NL
+
+00-13-3A   (hex)		VadaTech Inc.
+00133A     (base 16)		VadaTech Inc.
+				11540 S. Eastern Avenue
+				Henderson  Nevada  89052
+				US
+
+00-13-2A   (hex)		Sitronics Telecom Solutions
+00132A     (base 16)		Sitronics Telecom Solutions
+				Michelska 60
+				Prague  Prague 4 - Michle  140 00
+				CZ
+
+00-12-E5   (hex)		Time America, Inc.
+0012E5     (base 16)		Time America, Inc.
+				51 W. 3rd Street #310
+				Tempe  AZ  85281
+				US
+
+00-13-0E   (hex)		Focusrite Audio Engineering Limited
+00130E     (base 16)		Focusrite Audio Engineering Limited
+				19 Lincoln Road
+				High Wycombe  Bucks  HP12 3FX
+				GB
+
+00-13-09   (hex)		Ocean Broadband Networks
+001309     (base 16)		Ocean Broadband Networks
+				2078 Walsh Ave, Suite B
+				Santa Clara  California  95050
+				US
+
+00-13-19   (hex)		Cisco Systems, Inc
+001319     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-13-1C   (hex)		LiteTouch, Inc.
+00131C     (base 16)		LiteTouch, Inc.
+				3400 South West Temple
+				Salt Lake City  UT  84115
+				US
+
+00-13-4A   (hex)		Engim, Inc.
+00134A     (base 16)		Engim, Inc.
+				40 Nagog Park
+				Acton  MA  01720
+				US
+
+00-12-D7   (hex)		Invento Networks, Inc.
+0012D7     (base 16)		Invento Networks, Inc.
+				377 Simarano Drive
+				Marlborough  MA  01752
+				US
+
+00-12-C4   (hex)		Viseon, Inc.
+0012C4     (base 16)		Viseon, Inc.
+				8445 Freeport Parkway
+				Irving  Texas  75063
+				US
+
+00-12-94   (hex)		SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC
+001294     (base 16)		SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC
+				1000 Kamisukiawara,Showa-cho
+				Nakakoma-gun  Yamanashi  409-3883
+				JP
+
+00-12-96   (hex)		Addlogix
+001296     (base 16)		Addlogix
+				459 Wald
+				Irvine  CA  92618
+				US
+
+00-12-B3   (hex)		Advance Wireless Technology Corp.
+0012B3     (base 16)		Advance Wireless Technology Corp.
+				12F No. 27-6, Sec. 2, Chung Cheng East Road
+				Tamshui    251
+				TW
+
+00-12-B0   (hex)		Efore Oyj   (Plc)
+0012B0     (base 16)		Efore Oyj   (Plc)
+				Quartetto Business Park
+				Espoo    FI - 02600
+				FI
+
+00-12-7F   (hex)		Cisco Systems, Inc
+00127F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-12-A6   (hex)		Dolby Australia
+0012A6     (base 16)		Dolby Australia
+				Level 6
+				Surry Hills  NSW  2010
+				AU
+
+00-12-A4   (hex)		ThingMagic, LLC
+0012A4     (base 16)		ThingMagic, LLC
+				One Broadway
+				Cambridge  MA  02142
+				US
+
+00-12-A9   (hex)		3Com Ltd
+0012A9     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-12-D0   (hex)		Gossen-Metrawatt-GmbH
+0012D0     (base 16)		Gossen-Metrawatt-GmbH
+				Thomas-Mann-Straße 16-20
+				Nürnberg  Bavaria  90471
+				DE
+
+00-12-99   (hex)		Ktech Telecommunications Inc
+001299     (base 16)		Ktech Telecommunications Inc
+				21540 Prairie Street Unit B
+				Chatsworth  CA  91311
+				US
+
+00-12-8C   (hex)		Woodward Governor
+00128C     (base 16)		Woodward Governor
+				1000 E. Drake Road
+				Ft. Collins  CO  80525
+				US
+
+00-12-B8   (hex)		G2 Microsystems
+0012B8     (base 16)		G2 Microsystems
+				408 Euclid Ave
+				Oakland  CA  94610
+				US
+
+00-12-7B   (hex)		VIA Networking Technologies, Inc.
+00127B     (base 16)		VIA Networking Technologies, Inc.
+				8F,533, Chung-Cheng Road, Hsin-Tien
+				Taipei    231
+				TW
+
+00-12-80   (hex)		Cisco Systems, Inc
+001280     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-12-75   (hex)		Sentilla Corporation
+001275     (base 16)		Sentilla Corporation
+				201 Marshall Street
+				Redwood City  CA  94063
+				US
+
+00-12-76   (hex)		CG Power Systems Ireland Limited
+001276     (base 16)		CG Power Systems Ireland Limited
+				Herbert House., Harmony Row, 
+				Dublin    D2
+				IE
+
+00-12-71   (hex)		Measurement Computing Corp
+001271     (base 16)		Measurement Computing Corp
+				10 Commerce Way
+				Norton  MA  02766
+				US
+
+00-12-73   (hex)		Stoke Inc
+001273     (base 16)		Stoke Inc
+				2189 Leghorn Street
+				Mountain View  CA  94043
+				US
+
+00-12-69   (hex)		Value Electronics
+001269     (base 16)		Value Electronics
+				Dong-kwan B/D, 5F, 1566-2
+				seoul    137-874
+				KR
+
+00-12-50   (hex)		Tokyo Aircaft Instrument Co., Ltd.
+001250     (base 16)		Tokyo Aircaft Instrument Co., Ltd.
+				1-35-1, Izumi-Honcho
+				Komae-Shi  Tokyo  201-8555
+				JP
+
+00-12-52   (hex)		Citronix, LLC
+001252     (base 16)		Citronix, LLC
+				2214 South Watson Road
+				Arlington  Texas  76010
+				US
+
+00-12-40   (hex)		AMOI ELECTRONICS CO.,LTD
+001240     (base 16)		AMOI ELECTRONICS CO.,LTD
+				295 Lane,Zuchongzhi Road,Zhang jiang,
+				Shanghai    201203
+				CN
+
+00-12-2E   (hex)		Signal Technology - AISD
+00122E     (base 16)		Signal Technology - AISD
+				1820 Preston Park Blvd.
+				Plano  TX  75093
+				US
+
+00-12-64   (hex)		daum electronic gmbh
+001264     (base 16)		daum electronic gmbh
+				flugplatzstraße 100
+				FÃƒÂ¼rth  Bavaria  90768
+				DE
+
+00-12-61   (hex)		Adaptix, Inc
+001261     (base 16)		Adaptix, Inc
+				1407 116th Ave. NE
+				Bellevue  WA  98004
+				US
+
+00-12-60   (hex)		Stanton Magnetics,inc.
+001260     (base 16)		Stanton Magnetics,inc.
+				3000 SW 42nd Street
+				Hollywood  FL  33312
+				US
+
+00-12-31   (hex)		Motion Control Systems, Inc.
+001231     (base 16)		Motion Control Systems, Inc.
+				PO Box 115
+				New River  VA  24129
+				US
+
+00-12-4B   (hex)		Texas Instruments
+00124B     (base 16)		Texas Instruments
+				Gaustadalleen 21
+				Oslo    N-0349
+				NO
+
+00-12-4A   (hex)		Dedicated Devices, Inc.
+00124A     (base 16)		Dedicated Devices, Inc.
+				5680 E. Franklin Road
+				Nampa  Idaho  83687
+				US
+
+00-12-43   (hex)		Cisco Systems, Inc
+001243     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-D9   (hex)		TiVo
+0011D9     (base 16)		TiVo
+				2160 Gold Ave
+				Alviso  CA  95002-2160
+				US
+
+00-11-D2   (hex)		Perception Digital Ltd
+0011D2     (base 16)		Perception Digital Ltd
+				Flat A, 8/F, Shaw House
+				Clear Water Bay  NT  
+				HK
+
+00-11-CF   (hex)		Thrane & Thrane A/S
+0011CF     (base 16)		Thrane & Thrane A/S
+				Lundtoftegårdsvej 93D
+				Lyngby  København  2800
+				DK
+
+00-11-D4   (hex)		NetEnrich, Inc
+0011D4     (base 16)		NetEnrich, Inc
+				890 Hillview Ct.
+				Milpitas  CA  95035
+				US
+
+00-11-D5   (hex)		Hangzhou Sunyard System Engineering Co.,Ltd.
+0011D5     (base 16)		Hangzhou Sunyard System Engineering Co.,Ltd.
+				Sunyard Science & Technology Building Hi-Tech Software Park(Second Land Consolidation)
+				Hangzhou  Zhejiang  310053
+				CN
+
+00-11-F8   (hex)		AIRAYA Corp
+0011F8     (base 16)		AIRAYA Corp
+				637 Adair Court
+				Morgan Hill  CA  95037
+				US
+
+00-11-F4   (hex)		woori-net
+0011F4     (base 16)		woori-net
+				#508, Hankook Moolyu, 853-1 Dongchun-Dong
+				Yongin-Si  Kyungki-Do  449-843
+				KR
+
+00-11-F6   (hex)		Asia Pacific Microsystems , Inc.
+0011F6     (base 16)		Asia Pacific Microsystems , Inc.
+				No.2,R&D Road 6 ,Science-Based Industrial Park,
+				Hsinchu    300
+				TW
+
+00-11-F0   (hex)		Wideful Limited
+0011F0     (base 16)		Wideful Limited
+				F5, 3/F., Phase II, Superluck Industrial Centre, 
+				    
+				HK
+
+00-11-F1   (hex)		QinetiQ Ltd
+0011F1     (base 16)		QinetiQ Ltd
+				Room E601
+				Malvern  Worcestershire  WR14 3PS
+				GB
+
+00-11-ED   (hex)		802 Global
+0011ED     (base 16)		802 Global
+				Studio 11,Intec 2,Wade Road
+				Hampshire    RG24 BNE
+				GB
+
+00-12-11   (hex)		Protechna Herbst GmbH & Co. KG
+001211     (base 16)		Protechna Herbst GmbH & Co. KG
+				Otto Hahn Str. 26
+				Ottobrunn  Germany/Bavaria  85521
+				DE
+
+00-12-19   (hex)		General Datacomm LLC
+001219     (base 16)		General Datacomm LLC
+				353 Christian Street, Suite 4
+				Oxford  CT  06478
+				US
+
+00-12-16   (hex)		ICP Internet Communication Payment AG
+001216     (base 16)		ICP Internet Communication Payment AG
+				Wilhelm-Stein-Weg 24
+				Hamburg    D-22339
+				DE
+
+00-12-15   (hex)		iStor Networks, Inc.
+001215     (base 16)		iStor Networks, Inc.
+				7585 Irvine Center Drive
+				Irvine  CA  92618
+				US
+
+00-12-03   (hex)		ActivNetworks
+001203     (base 16)		ActivNetworks
+				BAT L - 1 rue de Terre Neuve
+				COURTABOEUF    91944
+				FR
+
+00-11-CC   (hex)		Guangzhou Jinpeng Group Co.,Ltd.
+0011CC     (base 16)		Guangzhou Jinpeng Group Co.,Ltd.
+				No.9 Shenzhou Road,Guangzhou Science City
+				Guangzhou  Guangdong  510663
+				CN
+
+00-11-C7   (hex)		Raymarine UK Ltd
+0011C7     (base 16)		Raymarine UK Ltd
+				Marine House
+				Fareham  Hampshire  PO15 5RJ
+				GB
+
+00-11-C9   (hex)		MTT Corporation
+0011C9     (base 16)		MTT Corporation
+				2-7-12
+				Nishi-ku  Kobe  651-2241
+				JP
+
+00-11-DB   (hex)		Land-Cellular Corporation
+0011DB     (base 16)		Land-Cellular Corporation
+				12054 Miramar Parkway
+				Miramar  FL  33025
+				US
+
+00-12-24   (hex)		NexQL Corporation
+001224     (base 16)		NexQL Corporation
+				12250 Inwood Road #6
+				Dallas  TX  75244
+				US
+
+00-11-BD   (hex)		Bombardier Transportation
+0011BD     (base 16)		Bombardier Transportation
+				1501 Lebanon Church Road
+				Pittsburgh  PA  15236
+				US
+
+00-11-AA   (hex)		Uniclass Technology, Co., LTD
+0011AA     (base 16)		Uniclass Technology, Co., LTD
+				4F, No. 98, Ming chuan Rd
+				Hsintien City  Taipei Hsien  231
+				TW
+
+00-11-79   (hex)		Singular Technology Co. Ltd.
+001179     (base 16)		Singular Technology Co. Ltd.
+				21F, No.37, Sec.2, San Min Rd.,
+				Taipei    220
+				TW
+
+00-11-8A   (hex)		Viewtran Technology Limited
+00118A     (base 16)		Viewtran Technology Limited
+				3/F, R2-A builiding, High Tech Industrial Park,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-11-84   (hex)		Humo Laboratory,Ltd.
+001184     (base 16)		Humo Laboratory,Ltd.
+				Nishiogi-Kita 5-19-11
+				Suginami-ku  Tokyo  167-0042
+				JP
+
+00-11-B1   (hex)		BlueExpert Technology Corp.
+0011B1     (base 16)		BlueExpert Technology Corp.
+				8F,No.16,Lane 77,Xing-Ai Rd,Nei-Hu District
+				Taipei    11494
+				TW
+
+00-11-A6   (hex)		Sypixx Networks
+0011A6     (base 16)		Sypixx Networks
+				108 Bank Street
+				Waterbury  CT  06702
+				US
+
+00-11-B5   (hex)		Shenzhen Powercom Co.,Ltd
+0011B5     (base 16)		Shenzhen Powercom Co.,Ltd
+				Floor 16,Tower B,Zhongyin Building,North Caitian Road,Futian District,Shenzhen,P.R.China
+				Shenzhen  Guangdong province  518028
+				CN
+
+00-11-BB   (hex)		Cisco Systems, Inc
+0011BB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-66   (hex)		Taelim Electronics Co., Ltd.
+001166     (base 16)		Taelim Electronics Co., Ltd.
+				196-5, ANYANG7-DONG MANAN-GU
+				ANYANG-SI  KYUGGI-DO  430-817
+				KR
+
+00-11-64   (hex)		ACARD Technology Corp.
+001164     (base 16)		ACARD Technology Corp.
+				6F No.78 Sec1 Kwang Fu Road, Sanchung,
+				Taipei Hsien    241
+				TW
+
+00-11-A2   (hex)		Manufacturing Technology Inc
+0011A2     (base 16)		Manufacturing Technology Inc
+				70 Ready Ave NW
+				Fort Walton Beach  FL  32548
+				US
+
+00-11-9E   (hex)		Solectron Brazil
+00119E     (base 16)		Solectron Brazil
+				Rod. Campinas Mogi Mirim
+				Jaguariuna  SP  13820-000
+				BR
+
+00-11-73   (hex)		SMART Storage Systems
+001173     (base 16)		SMART Storage Systems
+				2600 W Geronimo Place
+				Chandler  AZ  85224
+				US
+
+00-11-25   (hex)		IBM Corp
+001125     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-11-1C   (hex)		Pleora Technologies Inc.
+00111C     (base 16)		Pleora Technologies Inc.
+				359 Terry Fox Drive, Suite 230
+				Kanata  ON  K2K 2E7
+				CA
+
+00-11-1F   (hex)		Doremi Labs, Inc.
+00111F     (base 16)		Doremi Labs, Inc.
+				306 E. Alameda Ave.
+				Burbank  CA  91502
+				US
+
+00-11-1D   (hex)		Hectrix Limited
+00111D     (base 16)		Hectrix Limited
+				Unit 906-911, 9/F, Stanhope Hosue,
+				North Point  Hong Kong  
+				CN
+
+00-11-19   (hex)		Solteras, Inc.
+001119     (base 16)		Solteras, Inc.
+				900 W. Santa Anita Street
+				San Gabriel  CA  91776
+				US
+
+00-11-50   (hex)		Belkin Corporation
+001150     (base 16)		Belkin Corporation
+				501 West Walnut Street
+				Compton  CA  90220-5221
+				US
+
+00-11-46   (hex)		Telecard-Pribor Ltd
+001146     (base 16)		Telecard-Pribor Ltd
+				Lustdorfskaya doroga, 162
+				Odessa    65115
+				UA
+
+00-11-0D   (hex)		SANBlaze Technology, Inc.
+00110D     (base 16)		SANBlaze Technology, Inc.
+				2 Clock Tower Place
+				Maynard  MA  01748
+				US
+
+00-11-06   (hex)		Siemens NV (Belgium)
+001106     (base 16)		Siemens NV (Belgium)
+				Atealaan 34
+				Herentals  Antwerp  2200
+				BE
+
+00-0F-F4   (hex)		Guntermann & Drunck GmbH
+000FF4     (base 16)		Guntermann & Drunck GmbH
+				Obere Leimbach 9
+				Siegen  NRW  57074
+				DE
+
+00-0F-F8   (hex)		Cisco Systems, Inc
+000FF8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-2C   (hex)		IZT GmbH
+00112C     (base 16)		IZT GmbH
+				Am Weichselgarten 5
+				Erlangen  Bavaria  91058
+				DE
+
+00-11-0E   (hex)		Tsurusaki Sealand Transportation Co. Ltd.
+00110E     (base 16)		Tsurusaki Sealand Transportation Co. Ltd.
+				1000 Misa
+				Oita    8700196
+				JP
+
+00-11-4C   (hex)		caffeina applied research ltd.
+00114C     (base 16)		caffeina applied research ltd.
+				125 baird ave
+				cochrane  alberta  t4c 1c7
+				CA
+
+00-11-41   (hex)		GoodMan Corporation
+001141     (base 16)		GoodMan Corporation
+				2F, No.572, Sec.1, Ming-Sheng N Road, Kwei-Shan Hsiang
+				Taoyuan Hsien    33300
+				TW
+
+00-11-55   (hex)		Sevis Systems
+001155     (base 16)		Sevis Systems
+				2805 N Dallas Parkway, STE 530
+				Plano  Texas  75093
+				US
+
+00-11-52   (hex)		Eidsvoll Electronics AS
+001152     (base 16)		Eidsvoll Electronics AS
+				Nedre Vilberg vei 8
+				Eidsvoll    N-2080
+				NO
+
+00-0F-CF   (hex)		DataWind Research
+000FCF     (base 16)		DataWind Research
+				555 Rene-Levesque West
+				Montreal  Quebec  H2Z 1B1
+				CA
+
+00-0F-D2   (hex)		EWA Technologies, Inc.
+000FD2     (base 16)		EWA Technologies, Inc.
+				13873 Park Center Road
+				Herndon  VA  20171
+				US
+
+00-0F-CE   (hex)		Kikusui Electronics Corp.
+000FCE     (base 16)		Kikusui Electronics Corp.
+				1-1-3,Higashi yamata
+				Yokohama  Kanagawa  224-0023
+				JP
+
+00-0F-EB   (hex)		Cylon Controls
+000FEB     (base 16)		Cylon Controls
+				Clonshaugh Industrial Estate
+				Dublin 17    
+				IE
+
+00-0F-DC   (hex)		Ueda Japan  Radio Co., Ltd.
+000FDC     (base 16)		Ueda Japan  Radio Co., Ltd.
+				Fumiiri 2-10-19
+				Ueda city  Nagano prefecture  386-8608
+				JP
+
+00-0F-8E   (hex)		DONGYANG TELECOM CO.,LTD.
+000F8E     (base 16)		DONGYANG TELECOM CO.,LTD.
+				642-7, DEUNGCHON-DONG, KANGSEO-GU
+				SEOUL  KANGSE-GU  157-841
+				KR
+
+00-0F-91   (hex)		Aerotelecom Co.,Ltd.
+000F91     (base 16)		Aerotelecom Co.,Ltd.
+				195-58 Anyang 7 Dong
+				Anyang  Kyunggi  430-817
+				US
+
+00-0F-87   (hex)		Maxcess International
+000F87     (base 16)		Maxcess International
+				222 W. Memorial Road
+				Oklahoma City  OK  73114
+				US
+
+00-0F-A1   (hex)		Gigabit Systems Inc.
+000FA1     (base 16)		Gigabit Systems Inc.
+				Fuyoh Video Building 3F
+				Yokohama  Kanagawa  241-0826
+				JP
+
+00-0F-99   (hex)		APAC opto Electronics Inc.
+000F99     (base 16)		APAC opto Electronics Inc.
+				3 Tzu Chiang Road, Hsinchu Industrial Park
+				Hukow, Hsinchu Hsien    303
+				TW
+
+00-0F-F5   (hex)		GN&S company
+000FF5     (base 16)		GN&S company
+				301 Ansan S/W center, 643-7 wongok-dong
+				Ansan city  Gyeonggi-do  425-130
+				KR
+
+00-0F-E8   (hex)		Lobos, Inc.
+000FE8     (base 16)		Lobos, Inc.
+				U&T Bldg 3F, 1-2-3 Sarugaku-cho, Chiyoda-ku,
+				Tokyo    101-0064
+				JP
+
+00-0F-B2   (hex)		Broadband Pacenet (India) Pvt. Ltd.
+000FB2     (base 16)		Broadband Pacenet (India) Pvt. Ltd.
+				7-B, Shah Industrial Estate, Off Veera Desai Road
+				Mumbai  Maharashtra  400 053
+				IN
+
+00-0F-D7   (hex)		Harman Music Group
+000FD7     (base 16)		Harman Music Group
+				8760 Sandy Parkway
+				Sandy  Utah  84070
+				US
+
+00-0F-D4   (hex)		Soundcraft
+000FD4     (base 16)		Soundcraft
+				Cranborne House
+				Potters Bar  Hertfordshire  EN6 3JN
+				GB
+
+00-0F-AF   (hex)		Dialog Inc.
+000FAF     (base 16)		Dialog Inc.
+				1-47-9
+				Toshima-ku  Tokyo  1700013
+				JP
+
+00-0F-A5   (hex)		BWA Technology GmbH
+000FA5     (base 16)		BWA Technology GmbH
+				Johann-Krane-Weg 21
+				Muenster    48149
+				DE
+
+00-0F-80   (hex)		Trinity Security Systems,Inc.
+000F80     (base 16)		Trinity Security Systems,Inc.
+				Alte Building Higashi Kanda 8F
+				Chiyoda-ku  Tokyo  101-0031
+				JP
+
+00-0F-2A   (hex)		Cableware Electronics
+000F2A     (base 16)		Cableware Electronics
+				1702 Western Ave.
+				Las Vegas  Nevada  89102
+				US
+
+00-0F-29   (hex)		Augmentix Corporation
+000F29     (base 16)		Augmentix Corporation
+				4030 W Braker Ln
+				Austin  Texas  78759
+				US
+
+00-0F-27   (hex)		TEAL Electronics, Inc.
+000F27     (base 16)		TEAL Electronics, Inc.
+				10350 Sorrento Valley Road
+				San Diego  California  92121
+				US
+
+00-0F-43   (hex)		Wasabi Systems Inc.
+000F43     (base 16)		Wasabi Systems Inc.
+				500 E. Main Street
+				Norfolk  VA  23510
+				US
+
+00-0F-48   (hex)		Polypix Inc.
+000F48     (base 16)		Polypix Inc.
+				1Fl, Sungdo Venture Tower, 165-2 Samsung-Dong, Kangnam-Ku
+				Seoul    135-881
+				KR
+
+00-0F-50   (hex)		StreamScale Limited
+000F50     (base 16)		StreamScale Limited
+				The Court, Alexandra Park
+				St Helens    WA10 3TP
+				GB
+
+00-0F-4E   (hex)		Cellink
+000F4E     (base 16)		Cellink
+				Catherinalaan 37
+				Rotselaar  Vlaams Brabant  B-3110
+				BE
+
+00-0F-47   (hex)		ROBOX SPA
+000F47     (base 16)		ROBOX SPA
+				via Sempione 82
+				Castelletto S.Ticino  NO  28053
+				IT
+
+00-0F-18   (hex)		Industrial Control Systems
+000F18     (base 16)		Industrial Control Systems
+				Houtschelf 1
+				Hardinxveld  Zuid-Holland  NL-3371 KB
+				NL
+
+00-0F-1D   (hex)		Cosmo Techs Co., Ltd.
+000F1D     (base 16)		Cosmo Techs Co., Ltd.
+				2-6-1, Matsue
+				Atsugi-shi  Kanagawa-ken  243-0005
+				JP
+
+00-0F-1B   (hex)		Ego Systems Inc.
+000F1B     (base 16)		Ego Systems Inc.
+				1206 Woolim e-Biz Center II
+				Seoul    150-834
+				KR
+
+00-0F-78   (hex)		Datacap Systems Inc
+000F78     (base 16)		Datacap Systems Inc
+				100 New Britain Blvd
+				Chalfont  PA  18914
+				US
+
+00-0F-70   (hex)		Wintec Industries, inc.
+000F70     (base 16)		Wintec Industries, inc.
+				675 Sycamore Drive
+				Milpitas,  CA  95035
+				US
+
+00-0F-74   (hex)		Qamcom Technology AB
+000F74     (base 16)		Qamcom Technology AB
+				Gruvgatan 8
+				Vastra  Frolunda  
+				SE
+
+00-0F-6D   (hex)		Midas Engineering
+000F6D     (base 16)		Midas Engineering
+				Ace Techno-Tower V #906 197-22
+				Seoul    152-848
+				KR
+
+00-0F-5F   (hex)		Nicety Technologies Inc. (NTS)
+000F5F     (base 16)		Nicety Technologies Inc. (NTS)
+				792-3 Tomioka Toyoda-cho
+				Iwata-gun  Shizuoka  438-0803
+				JP
+
+00-0F-5A   (hex)		Peribit Networks
+000F5A     (base 16)		Peribit Networks
+				2855 Bowers Ave
+				Santa Clara  CA  95051
+				US
+
+00-0F-31   (hex)		Allied Vision Technologies Canada Inc
+000F31     (base 16)		Allied Vision Technologies Canada Inc
+				101-3750 North Fraser Way
+				Burnaby  BC  V5J 5E9
+				CA
+
+00-0F-73   (hex)		RS Automation Co., Ltd
+000F73     (base 16)		RS Automation Co., Ltd
+				447-6, Gongse-Dong , Giheung-Gu
+				Youngin-City  Gyeonggi-Do  449-902
+				KR
+
+00-0F-3C   (hex)		Endeleo Limited
+000F3C     (base 16)		Endeleo Limited
+				78 Cannon Street
+				London  England  EC4N 6NQ
+				GB
+
+00-0E-AB   (hex)		Cray Inc
+000EAB     (base 16)		Cray Inc
+				901 Fifth Avenue
+				Seattle  WA  98104
+				US
+
+00-0E-AD   (hex)		Metanoia Technologies, Inc.
+000EAD     (base 16)		Metanoia Technologies, Inc.
+				5918 W. courtyard Dr.
+				Austin  TX  78730
+				US
+
+00-0E-AF   (hex)		CASTEL
+000EAF     (base 16)		CASTEL
+				ZI Saint Lambert des Levées
+				SAUMUR  Maine et Loire  49412
+				FR
+
+00-0E-F8   (hex)		SBC ASI
+000EF8     (base 16)		SBC ASI
+				Network & Infrastructure Technical Support
+				San Antonio  Texas  78215
+				US
+
+00-0E-F9   (hex)		REA Elektronik GmbH
+000EF9     (base 16)		REA Elektronik GmbH
+				Teichwiesenstraße 1
+				Muehltal  Hessen  64367
+				DE
+
+00-0E-E6   (hex)		Adimos Systems LTD
+000EE6     (base 16)		Adimos Systems LTD
+				17 Atirey-Yeda Street
+				Kfar-Saba    44643
+				IL
+
+00-0E-F6   (hex)		E-TEN Information Systems Co., Ltd.
+000EF6     (base 16)		E-TEN Information Systems Co., Ltd.
+				No. 256, Yangguang Street, Neihu Chiu
+				Taipei    114
+				TW
+
+00-0E-EA   (hex)		Shadong Luneng Jicheng Electronics,Co.,Ltd
+000EEA     (base 16)		Shadong Luneng Jicheng Electronics,Co.,Ltd
+				No.188,east,Huayuan Road
+				Jinan  Shandong  250100
+				CN
+
+00-0F-0F   (hex)		Real ID Technology Co., Ltd.
+000F0F     (base 16)		Real ID Technology Co., Ltd.
+				9F Hanmi B/D 192-19
+				Gangnam-Gu  Seoul  135-010
+				KR
+
+00-0F-16   (hex)		JAY HOW TECHNOLOGY CO.,
+000F16     (base 16)		JAY HOW TECHNOLOGY CO.,
+				NO.486,SEC. 1, WAN SHOU RD., KUEI
+				TAOYUAN HSIEN    333
+				TW
+
+00-0E-C6   (hex)		ASIX ELECTRONICS CORP.
+000EC6     (base 16)		ASIX ELECTRONICS CORP.
+				4F, NO.8, HSIN ANN RD.,
+				HSINCHU    300
+				TW
+
+00-0E-BF   (hex)		Remsdaq Limited
+000EBF     (base 16)		Remsdaq Limited
+				Parkway
+				Deeside  Flintshire  CH5 2NL
+				GB
+
+00-0E-FF   (hex)		Megasolution,Inc.
+000EFF     (base 16)		Megasolution,Inc.
+				2-7-10 Shitaya
+				Taito  TOKYO  110-0004
+				JP
+
+00-0E-E0   (hex)		Mcharge
+000EE0     (base 16)		Mcharge
+				Firstec Bldg,. 15-4 Youido-Dong
+				seoul  Youido  150-010
+				KR
+
+00-0E-9F   (hex)		TEMIC SDS GmbH
+000E9F     (base 16)		TEMIC SDS GmbH
+				Soeflinger Strasse 100
+				Ulm    89077
+				DE
+
+00-0E-96   (hex)		Cubic Defense Applications, Inc.
+000E96     (base 16)		Cubic Defense Applications, Inc.
+				P.O. Box 85587
+				San Diego  CA  92186-5587
+				US
+
+00-0E-8E   (hex)		SparkLAN Communications, Inc.
+000E8E     (base 16)		SparkLAN Communications, Inc.
+				3Fl . , No. 246, Sec. 1, Neihu Road., Neihu Chiu,
+				Taipei    114
+				TW
+
+00-0E-91   (hex)		Navico Auckland Ltd
+000E91     (base 16)		Navico Auckland Ltd
+				17-21 Kawana St
+				Northcote  Auckland  
+				NZ
+
+00-0E-48   (hex)		Lipman TransAction Solutions
+000E48     (base 16)		Lipman TransAction Solutions
+				11 Haamal St.
+				 Rosh-Haayin    48092
+				IL
+
+00-0E-3E   (hex)		Sun Optronics Inc
+000E3E     (base 16)		Sun Optronics Inc
+				4-38-4 Fuchinobe-honchou
+				Sagamihara  Kanagawa  229-0002
+				JP
+
+00-0E-33   (hex)		Shuko Electronics Co.,Ltd
+000E33     (base 16)		Shuko Electronics Co.,Ltd
+				TOHSHIN HIGASHI-IKEBUKURO Building 3F
+				TOKYO  KANTOH  170-0063
+				JP
+
+00-0E-75   (hex)		New York Air Brake Corp.
+000E75     (base 16)		New York Air Brake Corp.
+				748 Starbuck Ave.
+				Watertown  NY  13601
+				US
+
+00-0E-7C   (hex)		Televes S.A.
+000E7C     (base 16)		Televes S.A.
+				Rua Benefica Conxo 17
+				Santiago de Compostela  Coruña  15706
+				ES
+
+00-0E-66   (hex)		Hitachi Industry & Control Solutions, Ltd.
+000E66     (base 16)		Hitachi Industry & Control Solutions, Ltd.
+				5-1-26, Omika-cho, Hitachi-shi, Ibaraki
+				    319-1221
+				JP
+
+00-0E-68   (hex)		E-TOP Network Technology Inc.
+000E68     (base 16)		E-TOP Network Technology Inc.
+				No. 7, Shin Shin Rd.,
+				Tainan    702
+				TW
+
+00-0E-5E   (hex)		Raisecom Technology
+000E5E     (base 16)		Raisecom Technology
+				2 Floor, South Building of Rainbow Plaza
+				Haidian District  Beijing  100085
+				CN
+
+00-0E-56   (hex)		4G Systems GmbH & Co. KG
+000E56     (base 16)		4G Systems GmbH & Co. KG
+				Jarrestrasse 2-6
+				22303  Hamburg  
+				DE
+
+00-0E-55   (hex)		AUVITRAN
+000E55     (base 16)		AUVITRAN
+				7c chemin des Prés
+				MEYLAN    38410
+				FR
+
+00-0E-73   (hex)		Tpack A/S
+000E73     (base 16)		Tpack A/S
+				Lautrupbjerg 7 - 11
+				DK 2750  Ballerup    DK 2750
+				DK
+
+00-0E-72   (hex)		CTS electronics
+000E72     (base 16)		CTS electronics
+				Corso Vercelli 332
+				Ivrea  Torino  10015
+				IT
+
+00-0E-6E   (hex)		MAT S.A. (Mircrelec Advanced Technology)
+000E6E     (base 16)		MAT S.A. (Mircrelec Advanced Technology)
+				Mousounitsis 15
+				Peristeri  Athens  
+				GR
+
+00-0E-84   (hex)		Cisco Systems, Inc
+000E84     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-87   (hex)		adp Gauselmann GmbH
+000E87     (base 16)		adp Gauselmann GmbH
+				Boschstraße 8
+				Luebbecke  NRW  32312
+				DE
+
+00-0E-92   (hex)		Open Telecom
+000E92     (base 16)		Open Telecom
+				803-804 Daeryung Techno-town II
+				Keuncheon-Ku  Seoul  153-771
+				KR
+
+00-0E-53   (hex)		AV TECH CORPORATION
+000E53     (base 16)		AV TECH CORPORATION
+				10F,E Building,No.19-11 San Chung Rd.,NanKang
+				Taipei    115
+				TW
+
+00-0D-F9   (hex)		NDS Limited
+000DF9     (base 16)		NDS Limited
+				One Heathrow Boulevard
+				West Drayton  Middlesex  UB7 0DQ
+				GB
+
+00-0D-FD   (hex)		Huges Hi-Tech Inc.,
+000DFD     (base 16)		Huges Hi-Tech Inc.,
+				7F, 188, Sec. 2, Chung Hsing Road.
+				Hsin Tien  Taipei Hsien  231
+				TW
+
+00-0D-FB   (hex)		Komax AG
+000DFB     (base 16)		Komax AG
+				Industriestrasse 6
+				Dierikon  LU  6036
+				CH
+
+00-0E-00   (hex)		Atrie
+000E00     (base 16)		Atrie
+				10th Floor, 14, Lane 609, Sec. 5, Chung Hsin Rd., San Chung City,
+				Taipei Hsien  San Chung  241
+				TW
+
+00-0D-F4   (hex)		Watertek Co.
+000DF4     (base 16)		Watertek Co.
+				Room 1006,Haitai building,north si Huan
+				Beijing    100083
+				CN
+
+00-0D-FA   (hex)		Micro Control Systems Ltd.
+000DFA     (base 16)		Micro Control Systems Ltd.
+				8-7 Sakurai
+				Saku-shi  Nagano  385-0056
+				JP
+
+00-0D-FC   (hex)		ITFOR Inc.
+000DFC     (base 16)		ITFOR Inc.
+				Ichibancho Tokyu Bidg.,
+				  Tokyo  102-0082
+				JP
+
+00-0D-FE   (hex)		Hauppauge Computer Works, Inc.
+000DFE     (base 16)		Hauppauge Computer Works, Inc.
+				91 Cabot Court
+				Hauppauge  New York  11788
+				US
+
+00-0D-D6   (hex)		ITI    LTD
+000DD6     (base 16)		ITI    LTD
+				R&D,ITI Bangalore Complex
+				Dooravani Nagar, Bangalore  Karnataka State  560016
+				IN
+
+00-0D-D5   (hex)		O'RITE TECHNOLOGY CO.,LTD
+000DD5     (base 16)		O'RITE TECHNOLOGY CO.,LTD
+				4f-8,NO 80,GUANGFU RD.SEC 2,SANCHUNG
+				TAIPEI COUNTY    241
+				TW
+
+00-0E-0F   (hex)		ERMME
+000E0F     (base 16)		ERMME
+				9 rue Lavoisier
+				Vert-Le-Petit    91710
+				FR
+
+00-0E-10   (hex)		C-guys, Inc.
+000E10     (base 16)		C-guys, Inc.
+				Izumi Garden Wing 1F, 1-6-3
+				Tokyo    106-0032
+				JP
+
+00-0E-0A   (hex)		SAKUMA DESIGN OFFICE
+000E0A     (base 16)		SAKUMA DESIGN OFFICE
+				674-11
+				KUKI-SHI  SAITAMA  346-0029
+				JP
+
+00-0E-0E   (hex)		ESA elettronica S.P.A.
+000E0E     (base 16)		ESA elettronica S.P.A.
+				
+				Mariano Comense  CO  22066
+				IT
+
+00-0E-18   (hex)		MyA Technology
+000E18     (base 16)		MyA Technology
+				2100 Muirwood Way
+				San Jose  CA  95132
+				US
+
+00-0E-14   (hex)		Visionary Solutions, Inc.
+000E14     (base 16)		Visionary Solutions, Inc.
+				4193 Carpinteria Ave
+				Carpinteria  CA  93013
+				US
+
+00-0E-1B   (hex)		IAV GmbH
+000E1B     (base 16)		IAV GmbH
+				Carnotstraße 1
+				Berlin    10587
+				DE
+
+00-0E-13   (hex)		Accu-Sort Systems inc.
+000E13     (base 16)		Accu-Sort Systems inc.
+				511 School House Road
+				Telford  PA  18969
+				US
+
+00-0D-DE   (hex)		Joyteck Co., Ltd.
+000DDE     (base 16)		Joyteck Co., Ltd.
+				19F, No.4, Sec. 3, Min Chuan East Rd.
+				Taipei    105
+				TW
+
+00-0D-E2   (hex)		CMZ Sistemi Elettronici
+000DE2     (base 16)		CMZ Sistemi Elettronici
+				Via dell'Artiginato, 21
+				Vascon di Carbonera  Treviso  31050
+				IT
+
+00-0D-DA   (hex)		ALLIED TELESIS K.K.
+000DDA     (base 16)		ALLIED TELESIS K.K.
+				PIAZZA TIRANA N. 24/4 B
+				MILANO    20147
+				IT
+
+00-0D-CD   (hex)		GROUPE TXCOM
+000DCD     (base 16)		GROUPE TXCOM
+				ZI DU PETIT CLAMART
+				LE PLESSIS ROBINSON  HAUTS-DE-SEINE  92350
+				FR
+
+00-0D-CA   (hex)		Tait Electronics
+000DCA     (base 16)		Tait Electronics
+				535 Wairakei Rd
+				Christchurch  Canterbury  8005
+				NZ
+
+00-0D-CF   (hex)		Cidra Corp.
+000DCF     (base 16)		Cidra Corp.
+				50 Barns Park North
+				Wallingford  CT  06492
+				US
+
+00-0E-3A   (hex)		Cirrus Logic
+000E3A     (base 16)		Cirrus Logic
+				2901 Via Fortuna
+				Austin  TX  78746
+				US
+
+00-0E-3B   (hex)		Hawking Technologies, Inc.
+000E3B     (base 16)		Hawking Technologies, Inc.
+				15281A Barranca Parkway
+				Irvine  CA  92618
+				US
+
+00-0D-EC   (hex)		Cisco Systems, Inc
+000DEC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0D-F2   (hex)		Private
+000DF2     (base 16)		Private
+
+00-0E-27   (hex)		Crere Networks, Inc.
+000E27     (base 16)		Crere Networks, Inc.
+				Room 110 ETRI TBI, 52 Eoeun-dong
+				Daejeon    305-333
+				KR
+
+00-0D-A0   (hex)		NEDAP N.V.
+000DA0     (base 16)		NEDAP N.V.
+				P.O.Box 103
+				GROENLO  GLD  7141 AC
+				NL
+
+00-0D-8E   (hex)		Koden Electronics Co., Ltd.
+000D8E     (base 16)		Koden Electronics Co., Ltd.
+				5278 Uenohara
+				  Yamanashi-Ken  409-0112
+				JP
+
+00-0D-8A   (hex)		Winners Electronics Co., Ltd.
+000D8A     (base 16)		Winners Electronics Co., Ltd.
+				#340-5,Wonchun-Dong,Paldal-Gu
+				Suwon-City  Kyungki-Do  442-823
+				KR
+
+00-0D-7E   (hex)		Axiowave Networks, Inc.
+000D7E     (base 16)		Axiowave Networks, Inc.
+				200 Nickerson Road
+				Marlborough  MA  01752
+				US
+
+00-0D-71   (hex)		boca systems
+000D71     (base 16)		boca systems
+				1065 s. rogers circle
+				boca raton  fl  33487
+				US
+
+00-0D-5A   (hex)		Tiesse SpA
+000D5A     (base 16)		Tiesse SpA
+				Via Asti
+				Ivrea  TO  10015
+				IT
+
+00-0D-B8   (hex)		SCHILLER AG
+000DB8     (base 16)		SCHILLER AG
+				Altgasse 68
+				Baar  Zug  6300
+				CH
+
+00-0D-C4   (hex)		Emcore Corporation
+000DC4     (base 16)		Emcore Corporation
+				1600 Eubank Blvd, SE
+				Albuquerque  New Mexico  87123
+				US
+
+00-0D-9B   (hex)		Heraeus Electro-Nite International N.V.
+000D9B     (base 16)		Heraeus Electro-Nite International N.V.
+				Centrum Zuid 1105
+				Houthalen    3530
+				BE
+
+00-0D-7C   (hex)		Codian Ltd
+000D7C     (base 16)		Codian Ltd
+				14 Waterside Drive
+				Langley  Slough  SL3 6EZ
+				GB
+
+00-0D-6B   (hex)		Mita-Teknik A/S
+000D6B     (base 16)		Mita-Teknik A/S
+				Haandvaerkervej 1
+				Roedkaersbro    DK-8840
+				DK
+
+00-0D-43   (hex)		DRS Tactical Systems Inc.
+000D43     (base 16)		DRS Tactical Systems Inc.
+				3520 U.S. Highway 1
+				Palm Bay  FL  32905
+				US
+
+00-0D-44   (hex)		Audio BU - Logitech
+000D44     (base 16)		Audio BU - Logitech
+				1499 SE Tech Center Place
+				Vancouver  WA  98683
+				US
+
+00-0D-36   (hex)		Wu Han Routon Electronic Co., Ltd
+000D36     (base 16)		Wu Han Routon Electronic Co., Ltd
+				Miao Shan District, East Lake Hi-Tech
+				Wuhan  Hubei  430223
+				CN
+
+00-0D-3D   (hex)		Hammerhead Systems, Inc.
+000D3D     (base 16)		Hammerhead Systems, Inc.
+				640 Clyde Court
+				Mountain View  California  94043
+				US
+
+00-0D-3E   (hex)		APLUX Communications Ltd.
+000D3E     (base 16)		APLUX Communications Ltd.
+				10F, No. 166, Dah-Yeh Rd., Peitou
+				Taipei    112
+				TW
+
+00-0D-0D   (hex)		ITSupported, LLC
+000D0D     (base 16)		ITSupported, LLC
+				4989 Peachtree Parkway
+				Norcross  GA  30092
+				US
+
+00-0D-06   (hex)		Compulogic Limited
+000D06     (base 16)		Compulogic Limited
+				Unit W3, MK TWO Business Centre
+				Water Eaton  Milton Keynes  MK2 3HU
+				GB
+
+00-0D-4A   (hex)		Steag ETA-Optik
+000D4A     (base 16)		Steag ETA-Optik
+				Borsigstrasse 78.-80
+				Heinsberg    52525
+				DE
+
+00-0D-4F   (hex)		Kenwood Corporation
+000D4F     (base 16)		Kenwood Corporation
+				2967-3, Ishikawa-machi
+				Hachioji-shi  Tokyo  192-8525
+				JP
+
+00-0D-47   (hex)		Collex
+000D47     (base 16)		Collex
+				13F-3,No.142,Sec.1,Huamei W,St.,Shi Chiu
+				Taichung    403
+				TW
+
+00-0D-61   (hex)		Giga-Byte Technology Co., Ltd.
+000D61     (base 16)		Giga-Byte Technology Co., Ltd.
+				No 6, Bau Chiang Road, Hsin-Tien
+				Taipei Hsien    9999
+				TW
+
+00-0D-3B   (hex)		Microelectronics Technology Inc.
+000D3B     (base 16)		Microelectronics Technology Inc.
+				No1, Innovation Road II
+				    300
+				TW
+
+00-0D-2D   (hex)		NCT Deutschland GmbH
+000D2D     (base 16)		NCT Deutschland GmbH
+				Wildenbruchstraße 15
+				Jena  Thüringen  07745
+				DE
+
+00-0D-1E   (hex)		Control Techniques
+000D1E     (base 16)		Control Techniques
+				The Gro
+				Newtown  Powys  SY16 3BE
+				GB
+
+00-0D-52   (hex)		Comart system
+000D52     (base 16)		Comart system
+				No. 211, Ace Techno Tower III, 197-48
+				Seoul    152-050
+				KR
+
+00-0D-1A   (hex)		Mustek System Inc.
+000D1A     (base 16)		Mustek System Inc.
+				No. 25, R&D Road, Science-Based Industri
+				Hsin-Chu    300
+				TW
+
+00-0C-B8   (hex)		MEDION AG
+000CB8     (base 16)		MEDION AG
+				Am Zehnthof 77
+				Essen  NRW  45307
+				DE
+
+00-0C-BB   (hex)		ISKRAEMECO
+000CBB     (base 16)		ISKRAEMECO
+				Savska loka 4
+				Kranj  Gorenjska  4000
+				SI
+
+00-0C-C0   (hex)		Genera Oy
+000CC0     (base 16)		Genera Oy
+				Niittylanpolku 16
+				Helsinki    00621
+				FI
+
+00-0C-A8   (hex)		Garuda Networks Corporation
+000CA8     (base 16)		Garuda Networks Corporation
+				48499 Milmont Drive
+				Fremont  CA  94538
+				US
+
+00-0D-03   (hex)		Matrics, Inc.
+000D03     (base 16)		Matrics, Inc.
+				8850 Stanford Blvd
+				Columbia  MD  21045
+				US
+
+00-0C-FF   (hex)		MRO-TEK Realty Limited
+000CFF     (base 16)		MRO-TEK Realty Limited
+				#6, New BEL Road
+				Chikkamaranahalli  Bangalore  560 054
+				IN
+
+00-0C-FA   (hex)		Digital Systems Corp
+000CFA     (base 16)		Digital Systems Corp
+				3 North Main Street
+				Walkersville  Maryland  21793
+				US
+
+00-0C-FD   (hex)		Hyundai ImageQuest Co.,Ltd.
+000CFD     (base 16)		Hyundai ImageQuest Co.,Ltd.
+				San 136-1, Ami-ri, Bubal-eub
+				Ichon-si  Kyoung ki-do  467-701
+				KR
+
+00-0C-D3   (hex)		Prettl Elektronik Radeberg GmbH
+000CD3     (base 16)		Prettl Elektronik Radeberg GmbH
+				Robert-Bosch-Str. 10
+				Radeberg  Saxony  D-01454
+				DE
+
+00-0C-D7   (hex)		Nallatech Ltd
+000CD7     (base 16)		Nallatech Ltd
+				Boolean House
+				Glasgow  Scotland  G68 0BH
+				GB
+
+00-0C-D4   (hex)		Positron Public Safety Systems inc.
+000CD4     (base 16)		Positron Public Safety Systems inc.
+				5101 Buchan
+				Montreal  Quebec  H4P 2R9
+				CA
+
+00-0C-D6   (hex)		PARTNER TECH
+000CD6     (base 16)		PARTNER TECH
+				10F, NO.233-2,PAO CHIAO ROAD, SHIN TIEN
+				TAIPEI    231
+				TW
+
+00-0C-B9   (hex)		LEA
+000CB9     (base 16)		LEA
+				Bat LA FAYETTE
+				Paris  RP  924051
+				FR
+
+00-0C-BD   (hex)		Interface Masters, Inc
+000CBD     (base 16)		Interface Masters, Inc
+				2381 Zanker Rd., Suite 130
+				San Jose  California  95131
+				US
+
+00-0C-B2   (hex)		UNION co., ltd.
+000CB2     (base 16)		UNION co., ltd.
+				14Beon-Gil 17, UiChang-Gu,
+				GyeongSnagNam-Do    641-846
+				KR
+
+00-0C-EB   (hex)		CNMP Networks, Inc.
+000CEB     (base 16)		CNMP Networks, Inc.
+				1245 S. Winchester Blvd.
+				San Jose  CA  95128
+				US
+
+00-0C-CC   (hex)		Aeroscout Ltd.
+000CCC     (base 16)		Aeroscout Ltd.
+				3 Pekeris St.
+				Rehovot    76701
+				IL
+
+00-0C-C7   (hex)		Intelligent Computer Solutions Inc.
+000CC7     (base 16)		Intelligent Computer Solutions Inc.
+				9350 Eton St.
+				Chatsworth  CA  91301
+				US
+
+00-0C-BE   (hex)		Innominate Security Technologies AG
+000CBE     (base 16)		Innominate Security Technologies AG
+				Rudower Chaussee 13
+				12489  Berlin  
+				DE
+
+00-0C-A7   (hex)		Metro (Suzhou) Technologies Co., Ltd.
+000CA7     (base 16)		Metro (Suzhou) Technologies Co., Ltd.
+				No.221 Xinghai Street, Suzhou Industrial Park
+				Suzhou  Jiang Su Province  215021
+				CN
+
+00-0C-EF   (hex)		Open Networks Engineering Ltd
+000CEF     (base 16)		Open Networks Engineering Ltd
+				Classic House
+				Bishop's Stortford  Hertfordshire  CM23 5PD
+				GB
+
+00-0C-64   (hex)		X2 MSA Group
+000C64     (base 16)		X2 MSA Group
+				Care of: Agilent Technologies
+				Ipswich,  Suffolk  IP1 5PB
+				GB
+
+00-0C-A0   (hex)		StorCase Technology, Inc.
+000CA0     (base 16)		StorCase Technology, Inc.
+				17600 Newhope St.
+				Fountain Valley  CA  92708
+				US
+
+00-0C-99   (hex)		HITEL LINK Co.,Ltd
+000C99     (base 16)		HITEL LINK Co.,Ltd
+				Samsung Omni Tower 4th Fl., 395-62
+				Seoul    156-010
+				KR
+
+00-0C-5A   (hex)		IBSmm Embedded Electronics Consulting
+000C5A     (base 16)		IBSmm Embedded Electronics Consulting
+				Teufelsgrabenweg 1
+				Valley  Bavaria  D-83626
+				DE
+
+00-0C-5E   (hex)		Calypso Medical
+000C5E     (base 16)		Calypso Medical
+				2101 Fourth Avenue, Suite 1550
+				Seattle  WA  98121
+				US
+
+00-0C-61   (hex)		AC Tech corporation DBA Advanced Digital
+000C61     (base 16)		AC Tech corporation DBA Advanced Digital
+				1250-G Avenida Acaso
+				Camarillo  CA  93010
+				US
+
+00-0C-5F   (hex)		Avtec, Inc.
+000C5F     (base 16)		Avtec, Inc.
+				4335 Augusta Hwy
+				Gilbert  SC  29054
+				US
+
+00-0C-4B   (hex)		Cheops Elektronik
+000C4B     (base 16)		Cheops Elektronik
+				Jeschkenstrasse 32
+				Geretsried  Bayern  82538
+				DE
+
+00-0C-45   (hex)		Animation Technologies Inc.
+000C45     (base 16)		Animation Technologies Inc.
+				8F,No.138,Lane 235,Paochiao Road,
+				Taipei Hsien    231
+				TW
+
+00-0C-3C   (hex)		MediaChorus, Inc.
+000C3C     (base 16)		MediaChorus, Inc.
+				#205, ETRI TBI 2 Center
+				Daejon  DJ  305-333
+				KR
+
+00-0C-7C   (hex)		Internet Information Image Inc.
+000C7C     (base 16)		Internet Information Image Inc.
+				Fl. 6, No. 1, Alley 20, Lane 26, Rueigua
+				Taipei    114
+				TW
+
+00-0C-7B   (hex)		ALPHA PROJECT Co.,Ltd.
+000C7B     (base 16)		ALPHA PROJECT Co.,Ltd.
+				834 Sekishi,Higashi-ku,Hamamatsu-city
+				Shizuoka    431-3114
+				JP
+
+00-0C-77   (hex)		Life Racing Ltd
+000C77     (base 16)		Life Racing Ltd
+				Unit 6 Repton Close
+				Basildon  Essex  SS13 1LE
+				GB
+
+00-0C-69   (hex)		National Radio Astronomy Observatory
+000C69     (base 16)		National Radio Astronomy Observatory
+				P.O. Box O
+				Socorro  NM  87801
+				US
+
+00-0C-66   (hex)		Pronto Networks Inc
+000C66     (base 16)		Pronto Networks Inc
+				4637 Chabot Dr
+				Pleasanton  CA  94588
+				US
+
+00-0C-88   (hex)		Apache Micro Peripherals, Inc.
+000C88     (base 16)		Apache Micro Peripherals, Inc.
+				17526 Von Karman Ave
+				Irvine  CA  92614
+				US
+
+00-0C-82   (hex)		NETWORK TECHNOLOGIES INC
+000C82     (base 16)		NETWORK TECHNOLOGIES INC
+				1275 DANNER DRIVE
+				AURORA  OH  44202
+				US
+
+00-0C-8D   (hex)		MATRIX VISION GmbH
+000C8D     (base 16)		MATRIX VISION GmbH
+				Talstrasse 16
+				Oppenweiler  Baden-Württemberg  D-71570
+				DE
+
+00-0C-89   (hex)		AC Electric Vehicles, Ltd.
+000C89     (base 16)		AC Electric Vehicles, Ltd.
+				Markkinakuja 3
+				Jokela    05400
+				FI
+
+00-0C-4E   (hex)		Winbest Technology CO,LT
+000C4E     (base 16)		Winbest Technology CO,LT
+				7F-5No.736 Chung ChengRd.,ChungHo
+				Taipei    235
+				TW
+
+00-0B-FE   (hex)		CASTEL Broadband Limited
+000BFE     (base 16)		CASTEL Broadband Limited
+				9/F., Sui Ying Industrial Building.,
+				Tokwawan  Kowloon  150
+				HK
+
+00-0B-F5   (hex)		Shanghai Sibo Telecom Technology Co.,Ltd
+000BF5     (base 16)		Shanghai Sibo Telecom Technology Co.,Ltd
+				Floor 6 Building 18,300 Tianlin Rd.
+				Shanghai    200233
+				CN
+
+00-0C-27   (hex)		Sammy Corporation
+000C27     (base 16)		Sammy Corporation
+				SUN SHINE60 45F,3-1-1,HIGASHI-IKEBUKURO
+				TOSHIMA-KU  TOKYO  170-6045
+				JP
+
+00-0C-2A   (hex)		OCTTEL Communication Co., Ltd.
+000C2A     (base 16)		OCTTEL Communication Co., Ltd.
+				7F-1, No.300, Daduen 10th St.
+				Taichung City    408
+				TW
+
+00-0C-1C   (hex)		MicroWeb Co., Ltd.
+000C1C     (base 16)		MicroWeb Co., Ltd.
+				403 T/S/S/C, 23-14 Jang-dong, Yusong-gu,
+				Daejeon  ChoongChungDo  305-343
+				KR
+
+00-0B-DF   (hex)		Shenzhen RouterD Networks Limited
+000BDF     (base 16)		Shenzhen RouterD Networks Limited
+				8/F, Building A, Tsinghua Hi-Tech Park
+				Shenzhen    
+				CN
+
+00-0B-E6   (hex)		Datel Electronics
+000BE6     (base 16)		Datel Electronics
+				Stafford Road
+				Stone  Staffordshire  ST15 0DG
+				GB
+
+00-0B-F2   (hex)		Chih-Kan Technology Co., Ltd.
+000BF2     (base 16)		Chih-Kan Technology Co., Ltd.
+				No. 24-1, Pei Shih Chou, Ming Ho Vill.
+				Shan Sun Hsiang  Tainan Hsien  180
+				TW
+
+00-0B-EB   (hex)		Systegra AG
+000BEB     (base 16)		Systegra AG
+				Burgunderstrasse 15
+				Bellach  SO  4512
+				CH
+
+00-0B-EF   (hex)		Code Corporation
+000BEF     (base 16)		Code Corporation
+				11814 S. Election Rd., Ste 200
+				Draper  Utah  84020
+				US
+
+00-0C-05   (hex)		RPA Reserch Co., Ltd.
+000C05     (base 16)		RPA Reserch Co., Ltd.
+				4F, 90-7, Yangjae-Dong, Seocho-Ku
+				Seoul    137-130
+				US
+
+00-0C-22   (hex)		Double D Electronics Ltd
+000C22     (base 16)		Double D Electronics Ltd
+				Unit 6, Robins Wharf
+				Northfleet  Kent  DA11 9AX
+				GB
+
+00-0C-0F   (hex)		Techno-One Co., Ltd
+000C0F     (base 16)		Techno-One Co., Ltd
+				9-17-1 Higashi Sonoda
+				Amagasaki  Hyogo  661-0953
+				JP
+
+00-0C-38   (hex)		TelcoBridges Inc.
+000C38     (base 16)		TelcoBridges Inc.
+				586 Du Chenal
+				Repentigny  Quebec  J6A 7C5
+				CA
+
+00-0B-AF   (hex)		WOOJU COMMUNICATIONS Co,.Ltd
+000BAF     (base 16)		WOOJU COMMUNICATIONS Co,.Ltd
+				B-713, SK Twin Tech Tower, 345-9, Ga-San
+				Seoul    153-802
+				KR
+
+00-0B-B6   (hex)		Metalligence Technology Corp.
+000BB6     (base 16)		Metalligence Technology Corp.
+				9, Park Avenue II, Science-Based Industr
+				Hsinchu    300
+				TW
+
+00-0B-B3   (hex)		RiT technologies Ltd.
+000BB3     (base 16)		RiT technologies Ltd.
+				24 Raoul Walenberg  St.
+				Tel Aviv    69719
+				IL
+
+00-0B-B7   (hex)		Micro Systems Co.,Ltd.
+000BB7     (base 16)		Micro Systems Co.,Ltd.
+				2-15-34 Nishikubo
+				Musashino-City  Tokyo  180-0013
+				JP
+
+00-0B-BA   (hex)		Harmonic, Inc
+000BBA     (base 16)		Harmonic, Inc
+				4300 North First Street
+				San Jose  CA  95134
+				US
+
+00-0B-62   (hex)		ib-mohnen KG
+000B62     (base 16)		ib-mohnen KG
+				Stich 30 e
+				52249  Eschweiler  
+				DE
+
+00-0B-64   (hex)		Kieback & Peter GmbH & Co KG
+000B64     (base 16)		Kieback & Peter GmbH & Co KG
+				Tempelhofer Weg 50
+				Berlin    12347
+				DE
+
+00-0B-67   (hex)		Topview Technology Corporation
+000B67     (base 16)		Topview Technology Corporation
+				No. 8,Wu-Chuan Road,Wu Ku Industrial Par
+				Wu Ku Hsiang,Taipei Hsien,    248
+				TW
+
+00-0B-7D   (hex)		SOLOMON EXTREME INTERNATIONAL LTD.
+000B7D     (base 16)		SOLOMON EXTREME INTERNATIONAL LTD.
+				3F, No.20, Lane 165, Duenhua N. Rd., Sun
+				Taipei    
+				TW
+
+00-0B-94   (hex)		Digital Monitoring Products, Inc.
+000B94     (base 16)		Digital Monitoring Products, Inc.
+				2500 N. Partnership Boulevard
+				Springfield  Missouri  65803
+				US
+
+00-0B-AE   (hex)		Vitals System Inc.
+000BAE     (base 16)		Vitals System Inc.
+				Jooheung B/D 4FL. 1005-1, Youngtong-Dong
+				Suwon City  Kyonggi-Do  442-813
+				KR
+
+00-0B-D9   (hex)		General Hydrogen
+000BD9     (base 16)		General Hydrogen
+				13120 Vanier Place
+				Richmond  British Columbia  V6V 2J2
+				CA
+
+00-0B-AB   (hex)		Advantech Technology (CHINA) Co., Ltd.
+000BAB     (base 16)		Advantech Technology (CHINA) Co., Ltd.
+				No.666, Han-Pu Rd. Yu-Shan
+				Kun-Shan  Jiang Su  215316
+				CN
+
+00-0B-6D   (hex)		SOLECTRON JAPAN NAKANIIDA
+000B6D     (base 16)		SOLECTRON JAPAN NAKANIIDA
+				325 GANBARA
+				KAMIGUN  MIYAGIKEN  981-4263
+				JP
+
+00-0B-C4   (hex)		BIOTRONIK GmbH & Co
+000BC4     (base 16)		BIOTRONIK GmbH & Co
+				Woermannkehre 1
+				Berlin    12359
+				DE
+
+00-0B-57   (hex)		Silicon Laboratories
+000B57     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+00-0B-51   (hex)		Micetek International Inc.
+000B51     (base 16)		Micetek International Inc.
+				7F-1, #237, Sec. 1, wu Chuan W. Rd.
+				Taichung    403
+				TW
+
+00-0B-53   (hex)		INITIUM Co., Ltd.
+000B53     (base 16)		INITIUM Co., Ltd.
+				8F. Gongduck Bldg. 272-6 Seohyun Bundang
+				Sungnam  Kyunggi  463-824
+				KR
+
+00-0A-FB   (hex)		Ambri Limited
+000AFB     (base 16)		Ambri Limited
+				126 Greville Street
+				Chatswood  NSW  2067
+				AU
+
+00-0A-FF   (hex)		Kilchherr Elektronik AG
+000AFF     (base 16)		Kilchherr Elektronik AG
+				Aeschistrasse 25
+				Muensingen  BE  3110
+				CH
+
+00-0B-4A   (hex)		Visimetrics (UK) Ltd
+000B4A     (base 16)		Visimetrics (UK) Ltd
+				Skye House
+				Prestwick  Ayrshire  KA9 2TA
+				GB
+
+00-0B-48   (hex)		sofrel
+000B48     (base 16)		sofrel
+				2 rue du plessis
+				vern sur seiche  ille et vilaine  35770
+				FR
+
+00-0B-1E   (hex)		KAPPA opto-electronics GmbH
+000B1E     (base 16)		KAPPA opto-electronics GmbH
+				Kleines Feld 6
+				Gleichen  Niedersachsen  
+				DE
+
+00-0B-1C   (hex)		SIBCO bv
+000B1C     (base 16)		SIBCO bv
+				Schoonhout 46
+				Etten-Leur  NB  4872 ME
+				NL
+
+00-0B-37   (hex)		MANUFACTURE DES MONTRES ROLEX SA
+000B37     (base 16)		MANUFACTURE DES MONTRES ROLEX SA
+				LA HAUTE-ROUTE 82
+				BIEL-BIENNE  BE  2502
+				CH
+
+00-0A-F8   (hex)		American Telecare Inc.
+000AF8     (base 16)		American Telecare Inc.
+				7640 Golden Triangle Drive
+				Eden Prairie  MN  55344
+				US
+
+00-0B-17   (hex)		MKS Instruments
+000B17     (base 16)		MKS Instruments
+				651 Lowell Street
+				Methuen  MA  01844
+				US
+
+00-0B-2D   (hex)		Danfoss Inc.
+000B2D     (base 16)		Danfoss Inc.
+				7941 Corporate Dr
+				Baltimore  MD  21236
+				US
+
+00-0A-A3   (hex)		SHIMAFUJI ELECTRIC CO.,LTD.
+000AA3     (base 16)		SHIMAFUJI ELECTRIC CO.,LTD.
+				Daihyaku-seimei Kamata Bldg.3F
+				  Tokyo  144-0051
+				JP
+
+00-0A-A7   (hex)		FEI Electron Optics
+000AA7     (base 16)		FEI Electron Optics
+				Achtseweg Noord 5
+				Eindhoven    5651GG
+				NL
+
+00-0A-A6   (hex)		Hochiki Corporation
+000AA6     (base 16)		Hochiki Corporation
+				246, TSURUMA
+				MACHIDA  TOKYO  194-8577
+				JP
+
+00-0A-9A   (hex)		Aiptek International Inc
+000A9A     (base 16)		Aiptek International Inc
+				No 5-1 Innovation Rd 1
+				Hsin-Chu    300
+				TW
+
+00-0A-94   (hex)		ShangHai cellink CO., LTD
+000A94     (base 16)		ShangHai cellink CO., LTD
+				C3 MeiLong ZhongXin Industrial Park,No.1
+				ShangHai    200237
+				US
+
+00-0A-97   (hex)		SONICblue, Inc.
+000A97     (base 16)		SONICblue, Inc.
+				2841 Mission College Blvd.
+				Santa Clara  CA  95054
+				US
+
+00-0A-92   (hex)		Presonus Corporation
+000A92     (base 16)		Presonus Corporation
+				7257 Florida Blvd.
+				Baton Rouge  Louisiana  70806
+				US
+
+00-0A-85   (hex)		PLAT'C2,Inc
+000A85     (base 16)		PLAT'C2,Inc
+				2-3-6 SOTOKANDA
+				CHIYODA-KU  TOKYO  101-0021
+				JP
+
+00-0A-D0   (hex)		Niigata Develoment Center,  F.I.T. Co., Ltd.
+000AD0     (base 16)		Niigata Develoment Center,  F.I.T. Co., Ltd.
+				Akane-Niigata Building 2F
+				Niigata  Niigata Prefecture  950-0944
+				JP
+
+00-0A-D4   (hex)		CoreBell Systems Inc.
+000AD4     (base 16)		CoreBell Systems Inc.
+				HTVC 2317 KAIST
+				Yuseong-Gu  Daejeon  305-701
+				KR
+
+00-0A-CA   (hex)		YOKOYAMA SHOKAI CO.,Ltd.
+000ACA     (base 16)		YOKOYAMA SHOKAI CO.,Ltd.
+				6-96 Matsumura
+				Kanazawa  Ishikawa  920-0348
+				JP
+
+00-0A-CE   (hex)		RADIANTECH, INC.
+000ACE     (base 16)		RADIANTECH, INC.
+				2-1, INDUSTRY EAST RD. 1, SCIENCE-BASED
+				HSIN CHU    300
+				TW
+
+00-0A-C7   (hex)		Unication Group
+000AC7     (base 16)		Unication Group
+				3F., No. 6, Wu-Kung 5Rd., Hsinchuang Cit
+				Taipei    242
+				TW
+
+00-0A-DE   (hex)		Happy Communication Co., Ltd.
+000ADE     (base 16)		Happy Communication Co., Ltd.
+				42-11 WonMi-Dong
+				Bucheon-City  KyungGi-Do  420-110
+				KR
+
+00-0A-E2   (hex)		Binatone Electronics International, Ltd
+000AE2     (base 16)		Binatone Electronics International, Ltd
+				Floor 23A, 9 Des Voeux Road West
+				Hong Kong  China  
+				HK
+
+00-0A-DB   (hex)		Trilliant
+000ADB     (base 16)		Trilliant
+				401 Harrison Oaks Blvd. Suite 300
+				Cary  NC  27513
+				US
+
+00-0A-B8   (hex)		Cisco Systems, Inc
+000AB8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0A-AC   (hex)		TerraTec Electronic GmbH
+000AAC     (base 16)		TerraTec Electronic GmbH
+				Herrenpfad 38
+				Nettetal    41334
+				DE
+
+00-0A-BF   (hex)		HIROTA SS
+000ABF     (base 16)		HIROTA SS
+				Matukawa-Kougyoudanchi
+				Suzaka-shi  Nagano  382-0005
+				JP
+
+00-0A-BC   (hex)		Seabridge Ltd.
+000ABC     (base 16)		Seabridge Ltd.
+				3 Hanagar St.
+				Hod-Hasharon  Israel  45241
+				IL
+
+00-0A-50   (hex)		REMOTEK CORPORATION
+000A50     (base 16)		REMOTEK CORPORATION
+				6F-6, No 77, Sec 1, HSIN TAI WU ROAD,
+				HSI-CHIH  TAIPEI HSIEN  221
+				TW
+
+00-0A-58   (hex)		Freyer & Siegel Elektronik GmbH & Co. KG
+000A58     (base 16)		Freyer & Siegel Elektronik GmbH & Co. KG
+				Neuendorfstraße 18 b
+				Hennigsdorf  Brandenburg  16761
+				DE
+
+00-0A-4E   (hex)		UNITEK Electronics INC.
+000A4E     (base 16)		UNITEK Electronics INC.
+				1-18-4
+				Ohta-ku  Tokyo  143-0016
+				US
+
+00-0A-62   (hex)		Crinis Networks, Inc.
+000A62     (base 16)		Crinis Networks, Inc.
+				2099 N. Collins Blvd, Suite 200
+				Richardson  TX  75080
+				US
+
+00-0A-6A   (hex)		SVM Microwaves s.r.o.
+000A6A     (base 16)		SVM Microwaves s.r.o.
+				U Mrazovky 5
+				Praha 5    15000
+				CZ
+
+00-0A-66   (hex)		MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.
+000A66     (base 16)		MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.
+				1-4-13 OOYODONAKA,KITA-KU
+				OSAKA    531-0076
+				JP
+
+00-0A-31   (hex)		HCV Consulting
+000A31     (base 16)		HCV Consulting
+				P O Box 3692
+				Queensland     4212
+				AU
+
+00-42-52   (hex)		RLX Technologies
+004252     (base 16)		RLX Technologies
+				25231 Grograns Mill Rd
+				The Woodlands  Tx  77380
+				US
+
+00-0A-70   (hex)		MPLS Forum
+000A70     (base 16)		MPLS Forum
+				39355 California Street
+				Fremont  CA  94538
+				US
+
+00-0A-72   (hex)		STEC, INC.
+000A72     (base 16)		STEC, INC.
+				3001 Daimler Street
+				Santa Ana  CA  92705
+				US
+
+00-0A-3D   (hex)		Elo Sistemas Eletronicos S.A.
+000A3D     (base 16)		Elo Sistemas Eletronicos S.A.
+				Rua Edu Chaves, 547
+				Porto Alegre  RS  90.240-620
+				BR
+
+00-0A-46   (hex)		ARO WELDING TECHNOLOGIES SAS
+000A46     (base 16)		ARO WELDING TECHNOLOGIES SAS
+				1, avenue de Tours
+				Chateau du Loir  sarthe  72500
+				FR
+
+00-0A-71   (hex)		Avrio Technologies, Inc
+000A71     (base 16)		Avrio Technologies, Inc
+				2655 A Park Center Drive
+				Simi Valley  CA  91356
+				US
+
+00-0A-64   (hex)		Eracom Technologies
+000A64     (base 16)		Eracom Technologies
+				28 Greg Chappell Drive
+				Burleigh Heads  Qld  4220
+				AU
+
+00-0A-83   (hex)		SALTO SYSTEMS S.L.
+000A83     (base 16)		SALTO SYSTEMS S.L.
+				Arkotz, 9
+				Polígonoo Lanbarren  Oiartzun  20180
+				ES
+
+00-0A-86   (hex)		Lenze
+000A86     (base 16)		Lenze
+				PO box 101352
+				Hameln  Lower Saxony  31763
+				DE
+
+00-0A-3F   (hex)		Data East Corporation
+000A3F     (base 16)		Data East Corporation
+				4-41-10 Minami-Ogikubo
+				Suginami-ku  TOKYO  167-0052
+				JP
+
+00-0A-0C   (hex)		Scientific Research Corporation
+000A0C     (base 16)		Scientific Research Corporation
+				2300 Windy Ridge Parkway
+				Atlanta  GA  30339
+				US
+
+00-09-F6   (hex)		Shenzhen Eastern Digital Tech Ltd.
+0009F6     (base 16)		Shenzhen Eastern Digital Tech Ltd.
+				Shenzhen Futian Chegongmiao Tairan
+				Shenzhen  Guangdong  518048
+				CN
+
+00-0A-20   (hex)		SVA Networks, Inc.
+000A20     (base 16)		SVA Networks, Inc.
+				840 F Ave., Suite 104
+				Plano  TX  75074
+				US
+
+00-0A-24   (hex)		Octave Communications
+000A24     (base 16)		Octave Communications
+				85 Northwest Boulevard
+				Nashua  NH  03063
+				US
+
+00-0A-19   (hex)		Valere Power, Inc.
+000A19     (base 16)		Valere Power, Inc.
+				661 N. Plano Rd.
+				Richardson  Texas  75081
+				US
+
+00-09-DE   (hex)		Samjin Information & Communications Co., Ltd.
+0009DE     (base 16)		Samjin Information & Communications Co., Ltd.
+				MajangMyun DukPyungRi 235-2
+				Ichon  KyongGi  467-812
+				KR
+
+00-09-E0   (hex)		XEMICS S.A.
+0009E0     (base 16)		XEMICS S.A.
+				Rue de la Maladiere 71
+				CH-2007 Neuchatel  Neuchatel  2007
+				CH
+
+00-0A-01   (hex)		SOHOware, Inc.
+000A01     (base 16)		SOHOware, Inc.
+				3050 Coronado Drive
+				Santa Clara  CA  95054
+				US
+
+00-09-EC   (hex)		Daktronics, Inc.
+0009EC     (base 16)		Daktronics, Inc.
+				315 32nd Ave
+				Brookings  SD  57006
+				US
+
+00-09-CA   (hex)		iMaxNetworks(Shenzhen)Limited.
+0009CA     (base 16)		iMaxNetworks(Shenzhen)Limited.
+				4/B,South Bldg of 29th,South District of
+				Shenzhen  GuangDong  518057
+				CN
+
+00-09-CF   (hex)		iAd GmbH
+0009CF     (base 16)		iAd GmbH
+				Unterschlauersbacher Hauptstraße 10
+				Grosshabersdorf  Bavaria  90613
+				DE
+
+00-0A-11   (hex)		ExPet Technologies, Inc
+000A11     (base 16)		ExPet Technologies, Inc
+				6F, Kyonggi Small Business Center
+				Suwon, Kyonggi-do, 442-270    442-770
+				KR
+
+00-0A-0F   (hex)		Ilryung Telesys, Inc
+000A0F     (base 16)		Ilryung Telesys, Inc
+				Ilryung bldg, 34-2, Cheonho-dong
+				SEOUL    134-861
+				KR
+
+00-09-E7   (hex)		ADC Techonology
+0009E7     (base 16)		ADC Techonology
+				Sakae Members Office Bld. 4-16-8, Sakae,
+				Nagoya  Aichi  4600008
+				JP
+
+00-09-93   (hex)		Visteon Corporation
+000993     (base 16)		Visteon Corporation
+				16630 Southfield Road
+				Allen Park  Michigan  48101
+				US
+
+00-09-99   (hex)		CP GEORGES RENAULT
+000999     (base 16)		CP GEORGES RENAULT
+				38 Rue Bobby Sands
+				44800  Saint Herblain  
+				FR
+
+00-09-94   (hex)		Cronyx Engineering
+000994     (base 16)		Cronyx Engineering
+				Marshala Sokolovskogo str. 4
+				Moscow    123063
+				RU
+
+00-09-B9   (hex)		Action Imaging Solutions
+0009B9     (base 16)		Action Imaging Solutions
+				Kings Hall, St Ives Business Park
+				Huntingdon  Cambridgeshire  PE27 4WY
+				GB
+
+00-09-AC   (hex)		LANVOICE
+0009AC     (base 16)		LANVOICE
+				1364-39 SeochoDong, #201 Jihun Bldg
+				Seoul    137-072
+				KR
+
+00-09-B1   (hex)		Kanematsu Electronics, Ltd.
+0009B1     (base 16)		Kanematsu Electronics, Ltd.
+				17-5, Kyobashi 2-chome
+				Chuo-ku  Tokyo  104-8338
+				JP
+
+00-09-79   (hex)		Advanced Television Systems Committee, Inc.
+000979     (base 16)		Advanced Television Systems Committee, Inc.
+				1750 K Street NW
+				Washington  DC  20006
+				US
+
+00-09-63   (hex)		Dominion Lasercom Inc.
+000963     (base 16)		Dominion Lasercom Inc.
+				1716 Briarcrest Dr. Ste. 210
+				Bryan  TX  77802
+				US
+
+00-09-66   (hex)		TRIMBLE EUROPE BV
+000966     (base 16)		TRIMBLE EUROPE BV
+				Meerheide 45
+				Eersel  DZ  5521
+				NL
+
+00-09-C1   (hex)		PROCES-DATA A/S
+0009C1     (base 16)		PROCES-DATA A/S
+				Navervej 8
+				Silkeborg    DK-8600
+				DK
+
+00-09-BB   (hex)		MathStar, Inc.
+0009BB     (base 16)		MathStar, Inc.
+				5900 Green Oak Drive
+				Minneapolis  MN  55343
+				US
+
+00-09-68   (hex)		TECHNOVENTURE, INC.
+000968     (base 16)		TECHNOVENTURE, INC.
+				P. O. Box 5641
+				Pasadena  Texas  77508-5641
+				US
+
+00-09-61   (hex)		Switchgear and Instrumentation Ltd
+000961     (base 16)		Switchgear and Instrumentation Ltd
+				Ripley Road
+				Bradford  West Yorkshire  BD4 7EH
+				GB
+
+00-09-7C   (hex)		Cisco Systems, Inc
+00097C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-7B   (hex)		Cisco Systems, Inc
+00097B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-9D   (hex)		Haliplex Communications
+00099D     (base 16)		Haliplex Communications
+				PO Box 147
+				Mooroolbark  Vic  3138
+				AU
+
+00-09-9E   (hex)		Testech, Inc.
+00099E     (base 16)		Testech, Inc.
+				Bundang-Technopark, C-Dong, 702-Ho, #145
+				Sungnam-City  Kyungki-Do  463-070
+				KR
+
+00-09-88   (hex)		Nudian Electron Co., Ltd.
+000988     (base 16)		Nudian Electron Co., Ltd.
+				797-28 Bangbae-Dong, Seocho-Gu
+				Seoul    137-060
+				KR
+
+00-09-8E   (hex)		ipcas GmbH
+00098E     (base 16)		ipcas GmbH
+				Wetterkreuz 17
+				Erlangen  Bavaria  91058
+				DE
+
+00-09-AB   (hex)		Netcontrol Oy
+0009AB     (base 16)		Netcontrol Oy
+				Karvaamokuja 3
+				Helsinki    FIN 00380
+				FI
+
+00-09-60   (hex)		YOZAN Inc.
+000960     (base 16)		YOZAN Inc.
+				YOZAN Bld.,3-5-18, Kitazawa
+				Setagaya-ku  Tokyo  155-0031
+				JP
+
+00-09-56   (hex)		Network Systems Group, Ltd. (NSG)
+000956     (base 16)		Network Systems Group, Ltd. (NSG)
+				39 Kirpichnaya St., Suite 1302
+				Moscow    105187
+				RU
+
+00-09-00   (hex)		TMT
+000900     (base 16)		TMT
+				11 Kiryat Mada, POB 45199
+				Jerusalem    91450
+				IL
+
+00-09-01   (hex)		Shenzhen Shixuntong Information & Technoligy Co
+000901     (base 16)		Shenzhen Shixuntong Information & Technoligy Co
+				Room 403,617 Bldg;Bagua 1 Road ,Shenzhen
+				Shenzhen  Guangdong  518029
+				CN
+
+00-09-13   (hex)		SystemK Corporation
+000913     (base 16)		SystemK Corporation
+				238-9 Higashi 1, Kita 15, Higashi-ku
+				Sapporo  Hokkaido  065-0015
+				JP
+
+00-09-0E   (hex)		Helix Technology Inc.
+00090E     (base 16)		Helix Technology Inc.
+				5F, No. 6, Sec 1, Jung-Shing Rd., Wugu-S
+				Taipei    248
+				TW
+
+00-09-3C   (hex)		Jacques Technologies P/L
+00093C     (base 16)		Jacques Technologies P/L
+				268 Montague Rd
+				West End  Queensland  4101
+				AU
+
+00-09-35   (hex)		Sandvine Incorporated
+000935     (base 16)		Sandvine Incorporated
+				170 Columbia St. W.
+				Waterloo  ON  N2L 3L3
+				CA
+
+00-09-36   (hex)		Ipetronik GmbH & Co. KG
+000936     (base 16)		Ipetronik GmbH & Co. KG
+				Im Rollfeld 28
+				Baden-Baden  Baden-Württemberg  76532
+				DE
+
+00-09-37   (hex)		Inventec Appliance Corp
+000937     (base 16)		Inventec Appliance Corp
+				113, Wugung 1 RD., WuKu Industrial nPark
+				Taipei    
+				TW
+
+00-09-46   (hex)		Cluster Labs GmbH
+000946     (base 16)		Cluster Labs GmbH
+				Dauerwaldweg 1
+				Berlin  Berlin  14055
+				DE
+
+00-09-3F   (hex)		Double-Win Enterpirse CO., LTD
+00093F     (base 16)		Double-Win Enterpirse CO., LTD
+				NO.300, Sec 1, Chung Feng Rd.
+				Ping Chen City  Taoyuan Hsien  324
+				TW
+
+00-09-48   (hex)		Vista Control Systems, Corp.
+000948     (base 16)		Vista Control Systems, Corp.
+				2001 West Melinda Lane
+				Phoenix  AZ  85027
+				US
+
+00-09-49   (hex)		Glyph Technologies Inc.
+000949     (base 16)		Glyph Technologies Inc.
+				735 W. Clinton Street
+				Ithaca  NY  14850
+				US
+
+00-09-2A   (hex)		MYTECS Co.,Ltd.
+00092A     (base 16)		MYTECS Co.,Ltd.
+				1-12-39, Taishidou
+				Setagaya-ku  Tokyo  154-0004
+				JP
+
+00-09-25   (hex)		VSN Systemen BV
+000925     (base 16)		VSN Systemen BV
+				Keizersveld 83
+				Venray  Limburg  5803 AP
+				NL
+
+00-08-E0   (hex)		ATO Technology Ltd.
+0008E0     (base 16)		ATO Technology Ltd.
+				Rm. 1314-1346, Block B1, Yau Tong Ind. C
+				Hong Kong    
+				HK
+
+00-08-E4   (hex)		Envenergy Inc
+0008E4     (base 16)		Envenergy Inc
+				6307 Carpinteria Ave
+				Carpinteria  CA  93013
+				US
+
+00-08-E3   (hex)		Cisco Systems, Inc
+0008E3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-E5   (hex)		IDK Corporation
+0008E5     (base 16)		IDK Corporation
+				6-7-10
+				Yamato  Kanagawa  242-0007
+				JP
+
+00-08-D9   (hex)		Mitadenshi Co.,LTD
+0008D9     (base 16)		Mitadenshi Co.,LTD
+				1-8-6 Furuichi Asaminamiku
+				Hiroshima    731-0123
+				JP
+
+00-08-91   (hex)		Lyan Inc.
+000891     (base 16)		Lyan Inc.
+				5F-1, NO.51, SEC.2, KEELUNG RD.
+				TAIPEI    110
+				TW
+
+00-08-92   (hex)		EM Solutions
+000892     (base 16)		EM Solutions
+				101 Hyde Rd
+				Yeronga  Brisbane, QLD  4104
+				AU
+
+00-08-8C   (hex)		Quanta Network Systems Inc.
+00088C     (base 16)		Quanta Network Systems Inc.
+				13, 13F, Sec. 2, Pei-Tou Rd
+				Taipei    112
+				TW
+
+00-08-8A   (hex)		Minds@Work
+00088A     (base 16)		Minds@Work
+				15550 Rockfield Blvd. Suite C
+				Irvine  CA  92618
+				US
+
+00-08-FD   (hex)		BlueKorea Co., Ltd.
+0008FD     (base 16)		BlueKorea Co., Ltd.
+				3F, sejong Building, 379-15, Seokyo-Dong
+				Seoul    121-839
+				KR
+
+00-08-F8   (hex)		UTC CCS
+0008F8     (base 16)		UTC CCS
+				791 Commerce Blvd
+				Boca Raton  FL  33497
+				US
+
+00-08-D5   (hex)		Vanguard Networks Solutions, LLC
+0008D5     (base 16)		Vanguard Networks Solutions, LLC
+				25 Forbes Boulevard
+				Foxboro  MA  02035
+				US
+
+00-08-CD   (hex)		With-Net Inc
+0008CD     (base 16)		With-Net Inc
+				4FL B&B B/D 1403-4
+				Anyang  Kyonggi  431-061
+				US
+
+00-08-CC   (hex)		Remotec, Inc.
+0008CC     (base 16)		Remotec, Inc.
+				114 Union Valley Road
+				Oakridge  TN  37830
+				US
+
+00-08-D1   (hex)		KAREL INC.
+0008D1     (base 16)		KAREL INC.
+				ORGANIZE SANAYI BOLGESI
+				ANKARA    06935
+				TR
+
+00-08-A7   (hex)		iLogic Inc.
+0008A7     (base 16)		iLogic Inc.
+				Rm#318, TechnoComplex Bldg., 126-16, 5-g
+				Seoul    136-701
+				KR
+
+00-08-99   (hex)		Netbind, Inc.
+000899     (base 16)		Netbind, Inc.
+				5 Marine View Plaza
+				Hoboken  NJ  07030
+				US
+
+00-08-A0   (hex)		Stotz Feinmesstechnik GmbH
+0008A0     (base 16)		Stotz Feinmesstechnik GmbH
+				Hermann-Dreher Str. 6
+				Gerlingen    70839
+				DE
+
+00-08-BC   (hex)		Ilevo AB
+0008BC     (base 16)		Ilevo AB
+				Box 1561
+				Karlstad  Värmland  S-651 21
+				SE
+
+00-08-BD   (hex)		TEPG-US
+0008BD     (base 16)		TEPG-US
+				100 Simplex Drive
+				Westminster  MA  01441
+				US
+
+00-08-AE   (hex)		PacketFront Network Products AB
+0008AE     (base 16)		PacketFront Network Products AB
+				PO 1217
+				Kistagangen 2, IV  Kista Stockholm SE -16428  
+				SE
+
+00-08-C3   (hex)		Contex A/S
+0008C3     (base 16)		Contex A/S
+				Svanevang 2
+				Allerod  DK  3450
+				DK
+
+00-08-F3   (hex)		WANY
+0008F3     (base 16)		WANY
+				CEEI Cap Alpha
+				Montpellier  Herault  34940
+				FR
+
+00-08-DE   (hex)		3UP Systems
+0008DE     (base 16)		3UP Systems
+				6 Results Way
+				Cupertino  CA  95014
+				US
+
+00-08-22   (hex)		InPro Comm
+000822     (base 16)		InPro Comm
+				11F, No. 93 Shuei-Yuan Street
+				    
+				TW
+
+00-08-23   (hex)		Texa Corp.
+000823     (base 16)		Texa Corp.
+				Nara Bldg. 3F, 2-2-8 Shin-Yokohama,
+				    222-0033
+				JP
+
+00-08-1D   (hex)		Ipsil, Incorporated
+00081D     (base 16)		Ipsil, Incorporated
+				7945 MacArthur Blvd.
+				Cabin John  MD  20818
+				US
+
+00-08-2D   (hex)		Indus Teqsite Private Limited
+00082D     (base 16)		Indus Teqsite Private Limited
+				#7, Arya Gowder Road,
+				Tamil Nadu    600033
+				IN
+
+00-08-20   (hex)		Cisco Systems, Inc
+000820     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-28   (hex)		Koei Engineering Ltd.
+000828     (base 16)		Koei Engineering Ltd.
+				3-40, 5-Chome
+				Osaku    547-0026
+				JP
+
+00-08-24   (hex)		Nuance Document Imaging
+000824     (base 16)		Nuance Document Imaging
+				8390 Mayrand Street
+				Montreal   Quebec  H4P 2C9
+				CA
+
+00-08-6C   (hex)		Plasmon LMS
+00086C     (base 16)		Plasmon LMS
+				4425 ArrowsWest Drive
+				Colorado Springs  CO  80907
+				US
+
+00-08-68   (hex)		PurOptix
+000868     (base 16)		PurOptix
+				1945 Camino Vida Roble
+				Carlsbad  CA  92008
+				US
+
+00-08-69   (hex)		Command-e Technology Co.,Ltd.
+000869     (base 16)		Command-e Technology Co.,Ltd.
+				Suite 1108, Zhongsheng Mansion,
+				Beijing    100038
+				CN
+
+00-08-62   (hex)		NEC Eluminant Technologies, Inc.
+000862     (base 16)		NEC Eluminant Technologies, Inc.
+				14700 Avion Parkway
+				Chantilly  VA  20151
+				US
+
+00-08-03   (hex)		Cos Tron
+000803     (base 16)		Cos Tron
+				4F Boolim B/D, 1431-22,
+				Anyang    431-061
+				KR
+
+00-08-05   (hex)		Techno-Holon Corporation
+000805     (base 16)		Techno-Holon Corporation
+				3-19-2, Takamatsu-cho
+				Tokyo    190-0011
+				JP
+
+00-08-08   (hex)		PPT Vision, Inc.
+000808     (base 16)		PPT Vision, Inc.
+				12988 Valley View Rd.
+				Eden Prairie  MN  55344
+				US
+
+00-08-14   (hex)		TIL Technologies
+000814     (base 16)		TIL Technologies
+				Europark DePichaury, BAT 9
+				    
+				FR
+
+00-08-5C   (hex)		Shanghai Dare Technologies Co. Ltd.
+00085C     (base 16)		Shanghai Dare Technologies Co. Ltd.
+				23F, China Merchants Tower,
+				Pudong New Area,  Shanghai  
+				CN
+
+00-08-2C   (hex)		Homag AG
+00082C     (base 16)		Homag AG
+				Abt. Ess-Mp., Homag Str. 3-5
+				    
+				DE
+
+00-08-21   (hex)		Cisco Systems, Inc
+000821     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-87   (hex)		Maschinenfabrik Reinhausen GmbH
+000887     (base 16)		Maschinenfabrik Reinhausen GmbH
+				Falkensteinstraße 8
+				Regensburg  Bavaria  93059
+				DE
+
+00-08-77   (hex)		Liebert-Hiross Spa
+000877     (base 16)		Liebert-Hiross Spa
+				Via Leonardo da Vinci 8
+				Piove di Sacco  Z.I. Tognana  35020
+				IT
+
+00-08-7B   (hex)		RTX Telecom A/S
+00087B     (base 16)		RTX Telecom A/S
+				Stroemmen 6
+				    
+				DK
+
+00-08-61   (hex)		SoftEnergy Co., Ltd.
+000861     (base 16)		SoftEnergy Co., Ltd.
+				346 Sangwangsipli-Dong,
+				    
+				KR
+
+00-08-4F   (hex)		Qualstar Corporation
+00084F     (base 16)		Qualstar Corporation
+				3990B Heritage Oak Court
+				Simi Valley  CA  93063
+				US
+
+00-08-54   (hex)		Netronix, Inc.
+000854     (base 16)		Netronix, Inc.
+				3F-1, No. 31, Hsin-Tai Road,
+				    
+				TW
+
+00-08-76   (hex)		SDSystem
+000876     (base 16)		SDSystem
+				613,Hyundai I Valley,223-12,
+				Seongnam  Gyeonggi-Do  462-807
+				KR
+
+00-08-70   (hex)		Rasvia Systems, Inc.
+000870     (base 16)		Rasvia Systems, Inc.
+				3255-3 Scott Blvd.
+				Santa Clara  CA  95054
+				US
+
+00-08-6E   (hex)		Hyglo AB
+00086E     (base 16)		Hyglo AB
+				Vastberga alle 60
+				    
+				SE
+
+00-07-FD   (hex)		LANergy Ltd.
+0007FD     (base 16)		LANergy Ltd.
+				Rudloe Manor
+				    
+				GB
+
+00-07-FE   (hex)		Rigaku Corporation
+0007FE     (base 16)		Rigaku Corporation
+				3-9-12, Matsubara-cho
+				Tokyo    196-8666
+				JP
+
+00-07-BF   (hex)		Armillaire Technologies, Inc.
+0007BF     (base 16)		Armillaire Technologies, Inc.
+				10411 Motor City Drive
+				Bethesda  MD  20817
+				US
+
+00-07-BB   (hex)		Candera Inc.
+0007BB     (base 16)		Candera Inc.
+				673 South Milpitas Blvd.
+				Milpitas  CA  95035
+				US
+
+00-07-BD   (hex)		Radionet Ltd.
+0007BD     (base 16)		Radionet Ltd.
+				Keilaranta 6
+				    
+				FI
+
+00-07-C4   (hex)		JEAN Co. Ltd.
+0007C4     (base 16)		JEAN Co. Ltd.
+				7F, 2, Rei Kuang Road,
+				Taipei    
+				TW
+
+00-07-B6   (hex)		Telecom Technology Ltd.
+0007B6     (base 16)		Telecom Technology Ltd.
+				Docklands Innovation Park
+				Dublin 3    
+				IE
+
+00-07-B7   (hex)		Samurai Ind. Prods Eletronicos Ltda
+0007B7     (base 16)		Samurai Ind. Prods Eletronicos Ltda
+				R-Nebraska, 443 S/2 2o Andar
+				    04560-011
+				BR
+
+00-07-B0   (hex)		Office Details, Inc.
+0007B0     (base 16)		Office Details, Inc.
+				25 Ottawa
+				Grand Rapids  MI  49503
+				US
+
+00-07-D9   (hex)		Splicecom
+0007D9     (base 16)		Splicecom
+				Little Gillions, The Green
+				Herts    WD3 3HY
+				GB
+
+00-07-DA   (hex)		Neuro Telecom Co., Ltd.
+0007DA     (base 16)		Neuro Telecom Co., Ltd.
+				2F Misung B/D, 938-7
+				Kyunggi-do    
+				KR
+
+00-07-CD   (hex)		Kumoh Electronic Co, Ltd
+0007CD     (base 16)		Kumoh Electronic Co, Ltd
+				154-2 Chunui-dong
+				Gyeonggi-do    
+				KR
+
+00-07-CF   (hex)		Anoto AB
+0007CF     (base 16)		Anoto AB
+				Solvegatan 41
+				    
+				SE
+
+00-07-D2   (hex)		Logopak Systeme GmbH & Co. KG
+0007D2     (base 16)		Logopak Systeme GmbH & Co. KG
+				Dorfstraße 40
+				    
+				DE
+
+00-07-C9   (hex)		Technol Seven Co., Ltd.
+0007C9     (base 16)		Technol Seven Co., Ltd.
+				25-16 Tobehon-cho, Nisi-ku,
+				    
+				JP
+
+00-07-C7   (hex)		Synectics Systems Limited
+0007C7     (base 16)		Synectics Systems Limited
+				3 Acorn Business Park
+				    S8 OTB
+				GB
+
+00-07-C3   (hex)		Thomson
+0007C3     (base 16)		Thomson
+				5-7, rue Salomon de Rothschild
+				    92150
+				FR
+
+00-07-A5   (hex)		Y.D.K Co. Ltd.
+0007A5     (base 16)		Y.D.K Co. Ltd.
+				1705, Oshitate, Inagi-City,
+				    
+				JP
+
+00-07-9C   (hex)		Golden Electronics Technology Co., Ltd.
+00079C     (base 16)		Golden Electronics Technology Co., Ltd.
+				No. 29, 21st Road,
+				    
+				TW
+
+00-07-E4   (hex)		SoftRadio Co., Ltd.
+0007E4     (base 16)		SoftRadio Co., Ltd.
+				2F, Dong-Bok B/D 645-18
+				Seoul    
+				KR
+
+00-07-54   (hex)		Xyterra Computing, Inc.
+000754     (base 16)		Xyterra Computing, Inc.
+				14505 Hayden Rd.,
+				Scottsdale  AZ  85260-6953
+				US
+
+00-07-57   (hex)		Topcall International AG
+000757     (base 16)		Topcall International AG
+				Talpagasse 1
+				    
+				AT
+
+00-07-53   (hex)		Beijing Qxcomm Technology Co., Ltd.
+000753     (base 16)		Beijing Qxcomm Technology Co., Ltd.
+				4F Tower B, TongTai Building No. 33,
+				Beijing 100032    
+				CN
+
+00-07-4C   (hex)		Beicom Inc.
+00074C     (base 16)		Beicom Inc.
+				114 King Street
+				Alexandria  VA  22314
+				US
+
+00-07-4D   (hex)		Zebra Technologies Corp.
+00074D     (base 16)		Zebra Technologies Corp.
+				333 Corporate Woods Parkway
+				Vernon Hills  IL  60061
+				US
+
+00-07-32   (hex)		AAEON Technology Inc.
+000732     (base 16)		AAEON Technology Inc.
+				5F, #135, Lane 235, Pao Chiao Road
+				Taipei    
+				TW
+
+00-07-25   (hex)		Bematech International Corp.
+000725     (base 16)		Bematech International Corp.
+				5895 Shiloh Road
+				Alpharetta  GA  30005
+				US
+
+00-07-23   (hex)		ELCON Systemtechnik GmbH
+000723     (base 16)		ELCON Systemtechnik GmbH
+				Obere Hauptstraße10
+				    
+				DE
+
+00-07-1D   (hex)		Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.
+00071D     (base 16)		Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.
+				c/, Alejandro Moran, 56
+				    
+				ES
+
+00-07-20   (hex)		Trutzschler GmbH & Co. KG
+000720     (base 16)		Trutzschler GmbH & Co. KG
+				Duvenstraße 82-92
+				    
+				DE
+
+00-07-6E   (hex)		Sinetica Corporation Limited
+00076E     (base 16)		Sinetica Corporation Limited
+				Willow House
+				Monmouthshire  Usk  NP15 1HY
+				GB
+
+00-07-6F   (hex)		Synoptics Limited
+00076F     (base 16)		Synoptics Limited
+				Beacon House, Nuffield Road,
+				    
+				GB
+
+00-07-73   (hex)		Ascom Powerline Communications Ltd.
+000773     (base 16)		Ascom Powerline Communications Ltd.
+				Belpstr. 37
+				    
+				CH
+
+00-07-6C   (hex)		Daehanet, Inc.
+00076C     (base 16)		Daehanet, Inc.
+				#8-2 Chung Jung Rd 2- Ga
+				Seoul    120-012
+				KR
+
+00-07-5D   (hex)		Celleritas Inc.
+00075D     (base 16)		Celleritas Inc.
+				c/o Celeritas Ltd.
+				    
+				IL
+
+00-07-3F   (hex)		Woojyun Systec Co., Ltd.
+00073F     (base 16)		Woojyun Systec Co., Ltd.
+				4F Han Yang B/D, Yoido-dong
+				Seoul    150-010
+				KR
+
+00-07-28   (hex)		Neo Telecom
+000728     (base 16)		Neo Telecom
+				East Building 9F, 1T
+				Songpa-gu, Seoul    
+				KR
+
+00-07-2C   (hex)		Fabricom
+00072C     (base 16)		Fabricom
+				Rue Gatti De Gamond 254
+				    
+				BE
+
+00-07-2D   (hex)		CNSystems
+00072D     (base 16)		CNSystems
+				Baumkircherstrasse 1
+				    
+				AT
+
+00-07-2F   (hex)		Intransa, Inc.
+00072F     (base 16)		Intransa, Inc.
+				2670 Zanker
+				San Jose  CA  95134
+				US
+
+00-07-80   (hex)		Bluegiga Technologies OY
+000780     (base 16)		Bluegiga Technologies OY
+				P.O. BOX 120
+				FIN-02631  Espoo  
+				FI
+
+00-07-77   (hex)		Motah Ltd.
+000777     (base 16)		Motah Ltd.
+				4-4-5 Koishikawa
+				    112-0002
+				JP
+
+00-07-24   (hex)		Telemax Co., Ltd.
+000724     (base 16)		Telemax Co., Ltd.
+				6th Fl. Sungwoo B/D, 1099-1
+				Kyungki-Do,    435-040
+				KR
+
+00-07-1B   (hex)		CDVI Americas Ltd
+00071B     (base 16)		CDVI Americas Ltd
+				1637 Autoroute Laval West
+				Laval  Quebec  H7L 3W3
+				CA
+
+00-07-15   (hex)		General Research of Electronics, Inc.
+000715     (base 16)		General Research of Electronics, Inc.
+				3-12-17, Mita, Minato-ku
+				Tokyo    108-0073
+				JP
+
+00-07-37   (hex)		Soriya Co. Ltd.
+000737     (base 16)		Soriya Co. Ltd.
+				2, 8th Floor Hanshin B/O, 136-1,
+				Seoul,    
+				KR
+
+00-07-34   (hex)		ONStor, Inc.
+000734     (base 16)		ONStor, Inc.
+				130-B Knowles Drive
+				Los Gatos  CA  95032
+				US
+
+00-07-65   (hex)		Jade Quantum Technologies, Inc.
+000765     (base 16)		Jade Quantum Technologies, Inc.
+				5F, No. 116, Hsien Fu Rd.,
+				    
+				TW
+
+00-05-EA   (hex)		Rednix
+0005EA     (base 16)		Rednix
+				502, Dong-A Resort Officetel
+				Taejon    305-709
+				KR
+
+00-06-C9   (hex)		Technical Marketing Research, Inc.
+0006C9     (base 16)		Technical Marketing Research, Inc.
+				Shin Nihon Gijutsu Bldg.
+				Tokyo 105-0012    105-0012
+				JP
+
+00-06-C8   (hex)		Sumitomo Metal Micro Devices, Inc.
+0006C8     (base 16)		Sumitomo Metal Micro Devices, Inc.
+				1, Higashimukojima Higashino-cho
+				    
+				JP
+
+00-06-F1   (hex)		Optillion
+0006F1     (base 16)		Optillion
+				Kronborgsgr.9
+				    
+				SE
+
+00-06-A7   (hex)		Primarion
+0006A7     (base 16)		Primarion
+				3450 Torrance Blvd.
+				Torrance  CA  90503
+				US
+
+00-06-A9   (hex)		Universal Instruments Corp.
+0006A9     (base 16)		Universal Instruments Corp.
+				PO Box 825
+				Binghamton  NY  13902
+				US
+
+00-06-9E   (hex)		UNIQA, Inc.
+00069E     (base 16)		UNIQA, Inc.
+				477 Valley Way
+				Milpitas  CA  95035
+				US
+
+00-06-B1   (hex)		Sonicwall
+0006B1     (base 16)		Sonicwall
+				1160 Bordeaux Dr.
+				Sunnyvale  CA  94089
+				US
+
+00-06-AD   (hex)		KB Electronics Ltd.
+0006AD     (base 16)		KB Electronics Ltd.
+				150 Bluewater Rd.
+				    B4B 1G9
+				CA
+
+00-06-AF   (hex)		Xalted Networks
+0006AF     (base 16)		Xalted Networks
+				2901 Dallas Parkway
+				Plano  TX  75093
+				US
+
+00-06-D7   (hex)		Cisco Systems, Inc
+0006D7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-06-D5   (hex)		Diamond Systems Corp.
+0006D5     (base 16)		Diamond Systems Corp.
+				8430-D Central Ave.
+				Newark  CA  94560
+				US
+
+00-06-FD   (hex)		Comjet Information Systems Corp.
+0006FD     (base 16)		Comjet Information Systems Corp.
+				7Fl., No. 103, Fen Liao Street
+				    
+				TW
+
+00-06-F9   (hex)		Mitsui Zosen Systems Research Inc.
+0006F9     (base 16)		Mitsui Zosen Systems Research Inc.
+				11-1, Uno 1-chome
+				    706-0011
+				JP
+
+00-06-C0   (hex)		United Internetworks, Inc.
+0006C0     (base 16)		United Internetworks, Inc.
+				5072 North 300 West, Suite 2N
+				Provo  UT  84604
+				US
+
+00-06-E0   (hex)		MAT Co., Ltd.
+0006E0     (base 16)		MAT Co., Ltd.
+				864-3 Kwanyang-dong
+				Kyunggi-do    431-060
+				KR
+
+00-D0-B9   (hex)		MICROTEK INTERNATIONAL, INC.
+00D0B9     (base 16)		MICROTEK INTERNATIONAL, INC.
+				NO. 6 INDUSTRY EAST ROAD 3
+				TAIWAN 30077  TAIWAN 30077  R.O.C.
+				TW
+
+00-D0-5F   (hex)		VALCOM, INC.
+00D05F     (base 16)		VALCOM, INC.
+				1111 INDUSTRY AVENUE
+				ROANOKE  VA  24013
+				US
+
+00-06-75   (hex)		Banderacom, Inc.
+000675     (base 16)		Banderacom, Inc.
+				9211 Waterford Centre Blvd.
+				Austin  TX  78758
+				US
+
+00-06-98   (hex)		egnite GmbH
+000698     (base 16)		egnite GmbH
+				Erinstraße 9
+				Castrop-Rauxel    D-44575
+				DE
+
+00-06-9C   (hex)		Transmode Systems AB
+00069C     (base 16)		Transmode Systems AB
+				Jakobsdalsvagen 17
+				  Hägersten  SE-126 53
+				SE
+
+00-06-43   (hex)		SONO Computer Co., Ltd.
+000643     (base 16)		SONO Computer Co., Ltd.
+				1F., No. 8, Alley 35, Lane 91,
+				Taipei    
+				TW
+
+00-06-49   (hex)		3M Deutschland GmbH
+000649     (base 16)		3M Deutschland GmbH
+				Carl-Schurz-Str. 1
+				Neuss    D-41453
+				DE
+
+00-06-3E   (hex)		Opthos Inc.
+00063E     (base 16)		Opthos Inc.
+				590 Taylor Way
+				San Carlos  CA  94070
+				US
+
+00-06-3B   (hex)		Arcturus Networks Inc.
+00063B     (base 16)		Arcturus Networks Inc.
+				701 Evans Ave. - Suite 300
+				Toronto  Ontario  M9C 1A3
+				CA
+
+00-06-7B   (hex)		Toplink C&C Corporation
+00067B     (base 16)		Toplink C&C Corporation
+				6F-15, No. 12, Lane 609, Sec. 5
+				Taipei Hsien 241    
+				TW
+
+00-06-70   (hex)		Upponetti Oy
+000670     (base 16)		Upponetti Oy
+				Tykistokatu 4D
+				    
+				FI
+
+00-06-6F   (hex)		Korea Data Systems
+00066F     (base 16)		Korea Data Systems
+				170, Gongdan-Dong, Gumi-Si
+				Kyungbuk    730-030
+				KR
+
+00-06-68   (hex)		Vicon Industries Inc.
+000668     (base 16)		Vicon Industries Inc.
+				89 Arkay Drive
+				Hauppauge  NY  11788
+				US
+
+00-06-6D   (hex)		Compuprint S.P.A.
+00066D     (base 16)		Compuprint S.P.A.
+				Via Martiri D'Italia 26
+				    
+				IT
+
+00-06-26   (hex)		MWE GmbH
+000626     (base 16)		MWE GmbH
+				Olbrichtstraße 21
+				    
+				DE
+
+00-06-20   (hex)		Serial System Ltd.
+000620     (base 16)		Serial System Ltd.
+				76 Playfair Road
+				    367996
+				SG
+
+00-06-18   (hex)		DigiPower Manufacturing Inc.
+000618     (base 16)		DigiPower Manufacturing Inc.
+				No. 114, Floor 13, Sec. 1,
+				Taipei    
+				TW
+
+00-06-33   (hex)		Cross Match Technologies GmbH
+000633     (base 16)		Cross Match Technologies GmbH
+				Unstrutweg 4
+				  Jena  07743
+				DE
+
+00-06-86   (hex)		ZARDCOM Co., Ltd.
+000686     (base 16)		ZARDCOM Co., Ltd.
+				4F, 1548-1, Seocho Dong, Seocho-Gu
+				Seoul    
+				KR
+
+00-06-89   (hex)		yLez Technologies Pte Ltd
+000689     (base 16)		yLez Technologies Pte Ltd
+				No. 1, Tannery Road, Cencon 1,
+				    
+				SG
+
+00-06-81   (hex)		Goepel Electronic GmbH
+000681     (base 16)		Goepel Electronic GmbH
+				Goeschwitzer Str. 58-60
+				    
+				DE
+
+00-06-58   (hex)		Helmut Fischer GmbH Institut für Elektronik und Messtechnik
+000658     (base 16)		Helmut Fischer GmbH Institut für Elektronik und Messtechnik
+				Industriestraße 21
+				    
+				DE
+
+00-05-D3   (hex)		eProduction Solutions, Inc.
+0005D3     (base 16)		eProduction Solutions, Inc.
+				22001 North Park Drive
+				Kingwood  TX  77339-3804
+				US
+
+00-06-04   (hex)		@Track Communications, Inc.
+000604     (base 16)		@Track Communications, Inc.
+				1155 Kas Dr.
+				Richardson  TX  75081
+				US
+
+00-06-06   (hex)		RapidWAN, Inc.
+000606     (base 16)		RapidWAN, Inc.
+				2085 Hamilton Ave.
+				San Jose  CA  95125
+				US
+
+00-06-03   (hex)		Baker Hughes Inc.
+000603     (base 16)		Baker Hughes Inc.
+				2001 Rankin Rd.
+				Houston  TX  77073
+				US
+
+00-06-07   (hex)		Omni Directional Control Technology Inc.
+000607     (base 16)		Omni Directional Control Technology Inc.
+				8F-2, No. 94, Pao-Chung Rd.
+				Taipei  Hsien,  
+				TW
+
+00-05-F7   (hex)		Analog Devices, Inc.
+0005F7     (base 16)		Analog Devices, Inc.
+				Three Technology Way
+				Norwood   MA  02062-2666
+				US
+
+00-05-9C   (hex)		Kleinknecht GmbH, Ing. Büro
+00059C     (base 16)		Kleinknecht GmbH, Ing. Büro
+				Bachstraße 30
+				    
+				DE
+
+00-05-AE   (hex)		Mediaport USA
+0005AE     (base 16)		Mediaport USA
+				17151 Newhope Ave. #202
+				Fountain Valley  CA  92708
+				US
+
+00-05-B0   (hex)		Korea Computer Technology Co., Ltd.
+0005B0     (base 16)		Korea Computer Technology Co., Ltd.
+				KCT Bldg, 111-3 Yangjae-Dong,
+				    
+				KR
+
+00-05-B2   (hex)		Medison Co., Ltd.
+0005B2     (base 16)		Medison Co., Ltd.
+				997-4, Saechi-Dong,
+				    135-280
+				KR
+
+00-05-97   (hex)		Eagle Traffic Control Systems
+000597     (base 16)		Eagle Traffic Control Systems
+				8004 Cameron Road
+				Austin  TX  78754
+				US
+
+00-05-B5   (hex)		Broadcom Technologies
+0005B5     (base 16)		Broadcom Technologies
+				137-060
+				Secho-Gu  Seoul,  
+				KR
+
+00-05-CB   (hex)		ROIS Technologies, Inc.
+0005CB     (base 16)		ROIS Technologies, Inc.
+				6th F Changhyun B/D, 960-1
+				    431-080
+				KR
+
+00-05-C8   (hex)		VERYTECH
+0005C8     (base 16)		VERYTECH
+				#402, Jang Young Shil Kwan,
+				    
+				KR
+
+00-05-CD   (hex)		D&M Holdings Inc.
+0005CD     (base 16)		D&M Holdings Inc.
+				D&M Building, 2-1 Nisshin-cho
+				Kawasaki-shi  Kanagawa   210-8569
+				JP
+
+00-05-A2   (hex)		CELOX Networks
+0005A2     (base 16)		CELOX Networks
+				940 West Port Plaza - Ste. #300
+				St. Louis  MO  63146
+				US
+
+00-05-AA   (hex)		Moore Industries International Inc.
+0005AA     (base 16)		Moore Industries International Inc.
+				16650 Schoenborn St.
+				North Hills  CA  91343
+				US
+
+00-05-E7   (hex)		Netrake an AudioCodes Company
+0005E7     (base 16)		Netrake an AudioCodes Company
+				3000 Technology Drive
+				Plano  TX  75074
+				US
+
+00-05-F4   (hex)		System Base Co., Ltd.
+0005F4     (base 16)		System Base Co., Ltd.
+				475-22, BangBae 2 dong,
+				    
+				KR
+
+00-05-E1   (hex)		Trellis Photonics, Ltd.
+0005E1     (base 16)		Trellis Photonics, Ltd.
+				P.O.B. 36
+				    
+				IL
+
+00-05-E2   (hex)		Creativ Network Technologies
+0005E2     (base 16)		Creativ Network Technologies
+				1755 St. Regis Suite 240
+				  Quebec  H9B-2M9
+				CA
+
+00-06-13   (hex)		Kawasaki Microelectronics Incorporated
+000613     (base 16)		Kawasaki Microelectronics Incorporated
+				MTG B-5, 1-3, Nakase,
+				Mihama-ku  Chiba  261-8501
+				JP
+
+00-06-17   (hex)		Redswitch Inc.
+000617     (base 16)		Redswitch Inc.
+				1815 McCandless Drive
+				Milpitas  CA  95035-8046
+				US
+
+00-05-51   (hex)		F & S Elektronik Systeme GmbH
+000551     (base 16)		F & S Elektronik Systeme GmbH
+				Untere Waldplaetze 23
+				Stuttgart    70569
+				DE
+
+00-05-4D   (hex)		Brans Technologies, Inc.
+00054D     (base 16)		Brans Technologies, Inc.
+				501 Boramae Academy Tower
+				    
+				KR
+
+00-05-47   (hex)		Starent Networks
+000547     (base 16)		Starent Networks
+				30 International Place
+				Tewksbury  MA  01876
+				US
+
+00-05-4E   (hex)		Philips
+00054E     (base 16)		Philips
+				1000 West Maude Avenue
+				Sunnyvale  CA  94085-2810
+				US
+
+00-05-46   (hex)		KDDI Network & Solultions Inc.
+000546     (base 16)		KDDI Network & Solultions Inc.
+				2-3-1, Nishishinjunku-ku,
+				  Tokyo  163-0907
+				JP
+
+00-05-40   (hex)		FAST Corporation
+000540     (base 16)		FAST Corporation
+				2791-5 Shimo-Tsuruma
+				    242-0001
+				JP
+
+00-05-3C   (hex)		XIRCOM
+00053C     (base 16)		XIRCOM
+				2300 CORPORATE CENTER DR.
+				THOUSAND OAKS  CA  91320
+				US
+
+00-05-44   (hex)		Valley Technologies, Inc.
+000544     (base 16)		Valley Technologies, Inc.
+				1006 West College Ave.
+				State College  PA  16801
+				US
+
+00-05-2E   (hex)		Cinta Networks
+00052E     (base 16)		Cinta Networks
+				3010 North First Street
+				San Jose  CA  95134
+				US
+
+00-05-2F   (hex)		Leviton Network Solutions
+00052F     (base 16)		Leviton Network Solutions
+				2222 222nd Street S.E.
+				Bothell  WA  98021
+				US
+
+00-05-3B   (hex)		Harbour Networks Ltd., Co. Beijing
+00053B     (base 16)		Harbour Networks Ltd., Co. Beijing
+				13/F, JiuLing Building, No. 21,
+				    100089
+				CN
+
+00-05-28   (hex)		New Focus, Inc.
+000528     (base 16)		New Focus, Inc.
+				2630 Walsh Ave.
+				Santa Clara  CA  95051
+				US
+
+00-05-6B   (hex)		C.P. Technology Co., Ltd.
+00056B     (base 16)		C.P. Technology Co., Ltd.
+				12F, No. 86, Hsin Tai Wu Rd.,
+				    221
+				TW
+
+00-05-60   (hex)		LEADER COMM.CO., LTD
+000560     (base 16)		LEADER COMM.CO., LTD
+				234, Komae-ri, Kiheung-eup,
+				    449-900
+				KR
+
+00-05-5E   (hex)		Cisco Systems, Inc
+00055E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-96   (hex)		Genotech Co., Ltd.
+000596     (base 16)		Genotech Co., Ltd.
+				#308 Gunkook Bldg.,
+				Gumchon-Gu  Seoul  
+				KR
+
+00-05-79   (hex)		Universal Control Solution Corp.
+000579     (base 16)		Universal Control Solution Corp.
+				12843 Foothill Blvd.
+				Sylmar  CA  91342
+				US
+
+00-05-7F   (hex)		Acqis Technology
+00057F     (base 16)		Acqis Technology
+				1621 West El Camino Real
+				Mt. View  CA  94040
+				US
+
+00-05-73   (hex)		Cisco Systems, Inc
+000573     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-75   (hex)		CDS-Electronics BV
+000575     (base 16)		CDS-Electronics BV
+				Mozart laan 330
+				    
+				NL
+
+00-05-56   (hex)		360 Systems
+000556     (base 16)		360 Systems
+				31355 Agoura Road
+				Westlake Village  CA  91361
+				US
+
+00-05-59   (hex)		Intracom S.A.
+000559     (base 16)		Intracom S.A.
+				19 5 KM Markopoulou Ave.
+				Attika    
+				GR
+
+00-05-8C   (hex)		Opentech Inc.
+00058C     (base 16)		Opentech Inc.
+				6F, DongWon Bldg., 275
+				Seoul    137-130
+				KR
+
+00-04-C9   (hex)		Micro Electron Co., Ltd.
+0004C9     (base 16)		Micro Electron Co., Ltd.
+				13-1-205 Aobaokakita
+				Suita-city  Osaka  
+				JP
+
+00-04-BE   (hex)		OptXCon, Inc.
+0004BE     (base 16)		OptXCon, Inc.
+				P.O. Box 13449
+				Research Triangle Park  NC  27709-3449
+				US
+
+00-04-C4   (hex)		Audiotonix Group Limited
+0004C4     (base 16)		Audiotonix Group Limited
+				Unit 10, Silverglade Business Park
+				Chessington  Surrey  KT9 2QL
+				GB
+
+00-04-C1   (hex)		Cisco Systems, Inc
+0004C1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-D6   (hex)		Takagi Industrial Co., Ltd.
+0004D6     (base 16)		Takagi Industrial Co., Ltd.
+				Electronic Instrument Div.
+				418-0103  418-0103  
+				JP
+
+00-04-D1   (hex)		Drew Technologies, Inc.
+0004D1     (base 16)		Drew Technologies, Inc.
+				3915 Research Park Dr
+				Ann Arbor  MI  48108
+				US
+
+00-04-D0   (hex)		Softlink s.r.o.
+0004D0     (base 16)		Softlink s.r.o.
+				Tomkova 409
+				  Czech  Republic
+				CZ
+
+00-80-87   (hex)		OKI ELECTRIC INDUSTRY CO., LTD
+008087     (base 16)		OKI ELECTRIC INDUSTRY CO., LTD
+				10-3 SHIBAURA 4-CHOME
+				    
+				JP
+
+00-04-D9   (hex)		Titan Electronics, Inc.
+0004D9     (base 16)		Titan Electronics, Inc.
+				Rm 7, 11 Fl., No. 398,
+				Taoyuan  Taoyuan  TAIWAN
+				TW
+
+00-04-D8   (hex)		IPWireless, Inc.
+0004D8     (base 16)		IPWireless, Inc.
+				4 Landsowne Court
+				SN14  GRZ  UK
+				GB
+
+00-05-24   (hex)		BTL System (HK) Limited
+000524     (base 16)		BTL System (HK) Limited
+				14/F., Blk. B, Vita Tower,
+				Aberdeen    
+				HK
+
+00-05-22   (hex)		LEA*D Corporation, Inc.
+000522     (base 16)		LEA*D Corporation, Inc.
+				Advatech Bldg.
+				    
+				IL
+
+00-05-20   (hex)		Smartronix, Inc.
+000520     (base 16)		Smartronix, Inc.
+				22685 Three Notch Rd.
+				California  MD  20619
+				US
+
+00-04-EB   (hex)		Paxonet Communications, Inc.
+0004EB     (base 16)		Paxonet Communications, Inc.
+				4046 Clipper Court
+				Fremont  CA  94538
+				US
+
+00-04-EF   (hex)		Polestar Corp.
+0004EF     (base 16)		Polestar Corp.
+				RM #802 SeoGeon B/D, 1480,
+				  Korea  (ROK)
+				KR
+
+00-05-14   (hex)		KDT Systems Co., Ltd.
+000514     (base 16)		KDT Systems Co., Ltd.
+				102-6, Chobu-Li, Mohyun-Myun,
+				    
+				KR
+
+00-05-0B   (hex)		SICOM Systems, Inc.
+00050B     (base 16)		SICOM Systems, Inc.
+				4140 Skyron Drive
+				Doylestown  PA  18901
+				US
+
+00-05-05   (hex)		Systems Integration Solutions, Inc.
+000505     (base 16)		Systems Integration Solutions, Inc.
+				3922 Coconut Palm Drive,
+				Tampa  FL  33619
+				US
+
+00-04-FE   (hex)		Pelago Networks
+0004FE     (base 16)		Pelago Networks
+				701 E. Plano Parkway - Ste. #205
+				Plano  TX  75074
+				US
+
+00-05-18   (hex)		Jupiters Technology
+000518     (base 16)		Jupiters Technology
+				PO Box 12693
+				    
+				AU
+
+00-04-B7   (hex)		AMB i.t. Holding
+0004B7     (base 16)		AMB i.t. Holding
+				Zuiderhoutlaan 4
+				  PJ Haarlem  2012
+				NL
+
+00-04-B9   (hex)		S.I. Soubou, Inc.
+0004B9     (base 16)		S.I. Soubou, Inc.
+				4-2586-8
+				Tokorozawa  Sitama  359-0047
+				JP
+
+00-04-BB   (hex)		Bardac Corporation
+0004BB     (base 16)		Bardac Corporation
+				40 Log Canoe Circle
+				Stevensville  MD  21666
+				US
+
+00-04-BC   (hex)		Giantec, Inc.
+0004BC     (base 16)		Giantec, Inc.
+				4F, No. 3, Lane 123,
+				TAIWAN 231  TAIWAN 231  R.O.C.
+				TW
+
+00-04-AF   (hex)		Digital Fountain, Inc.
+0004AF     (base 16)		Digital Fountain, Inc.
+				600 Alabama St.
+				San Francisco  CA  94110
+				US
+
+00-04-56   (hex)		Cambium Networks Limited
+000456     (base 16)		Cambium Networks Limited
+				Unit B2, Linhay Business Park,
+				Ashburton  Devon  TQ13 7UP
+				GB
+
+00-04-58   (hex)		Fusion X Co., Ltd.
+000458     (base 16)		Fusion X Co., Ltd.
+				#905 Hansol Techno Town
+				  Zip  435-030
+				KR
+
+00-04-4F   (hex)		Schubert System Elektronik Gmbh
+00044F     (base 16)		Schubert System Elektronik Gmbh
+				Rudolf-Diesel-Str. 17
+				    
+				DE
+
+00-04-46   (hex)		CYZENTECH Co., Ltd.
+000446     (base 16)		CYZENTECH Co., Ltd.
+				601 Eunkyeong B/D 141-31,
+				  135-876  KOREA
+				KR
+
+00-04-4A   (hex)		iPolicy Networks, Inc.
+00044A     (base 16)		iPolicy Networks, Inc.
+				47467 Fremont Blvd.
+				Fremont  CA  94538
+				US
+
+00-04-40   (hex)		cyberPIXIE, Inc.
+000440     (base 16)		cyberPIXIE, Inc.
+				68 E. Wacker Place,
+				Chicago  IL  60601
+				US
+
+00-04-3C   (hex)		SONOS Co., Ltd.
+00043C     (base 16)		SONOS Co., Ltd.
+				#725 Pungsan Apt. Factory
+				Rep. of KOREA Zip  Code:  411-815
+				KR
+
+00-04-B2   (hex)		ESSEGI SRL
+0004B2     (base 16)		ESSEGI SRL
+				Via Del Cavaratori, 17
+				    
+				IT
+
+00-04-B4   (hex)		CIAC
+0004B4     (base 16)		CIAC
+				18 rue Joseph BARA
+				    
+				FR
+
+00-04-AD   (hex)		Malibu Networks
+0004AD     (base 16)		Malibu Networks
+				26637 Agoura Rd.
+				Calabasas  CA  91302
+				US
+
+00-04-A9   (hex)		SandStream Technologies, Inc.
+0004A9     (base 16)		SandStream Technologies, Inc.
+				1955 Lakeway Dr.
+				Lewisville  TX  75057
+				US
+
+00-04-61   (hex)		EPOX Computer Co., Ltd.
+000461     (base 16)		EPOX Computer Co., Ltd.
+				11F, #346, Chung San Rd.
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-04-62   (hex)		DAKOS Data & Communication Co., Ltd.
+000462     (base 16)		DAKOS Data & Communication Co., Ltd.
+				2nd Floor Bethel Building 324-1
+				Zip  code:  137-130
+				TW
+
+00-04-5F   (hex)		Avalue Technology, Inc.
+00045F     (base 16)		Avalue Technology, Inc.
+				7F, 228, Lian-Cheng Road
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-04-9C   (hex)		Surgient Networks, Inc.
+00049C     (base 16)		Surgient Networks, Inc.
+				3520 Executive Center Drive
+				Austin  TX  78731
+				US
+
+00-04-9D   (hex)		Ipanema Technologies
+00049D     (base 16)		Ipanema Technologies
+				28, Rue De La Redoute
+				    
+				FR
+
+00-04-60   (hex)		Knilink Technology, Inc.
+000460     (base 16)		Knilink Technology, Inc.
+				10F, #96, Hsin Tai Wu Rd.,
+				    TAIWAN
+				TW
+
+00-04-8F   (hex)		TD Systems Corporation
+00048F     (base 16)		TD Systems Corporation
+				100 Bearfoot Rd.
+				Hudson  MA  01749
+				US
+
+00-04-95   (hex)		Tejas Networks India Limited
+000495     (base 16)		Tejas Networks India Limited
+				#58, 1st Main Road, J.P. Nagar, 
+				Bangalore   560078  
+				IN
+
+00-04-6F   (hex)		Digitel S/A Industria Eletronica
+00046F     (base 16)		Digitel S/A Industria Eletronica
+				R. Doutor Joao Ignacio, 1165
+				  Zip:  90230.181
+				BR
+
+00-04-69   (hex)		Innocom, Inc.
+000469     (base 16)		Innocom, Inc.
+				655-2 Naebalsan-Dong
+				157-280  157-280  KOREA
+				KR
+
+00-04-87   (hex)		Cogency Semiconductor, Inc.
+000487     (base 16)		Cogency Semiconductor, Inc.
+				362 Terry Fox Drive, Suite 210
+				    
+				CA
+
+00-04-68   (hex)		Vivity, Inc.
+000468     (base 16)		Vivity, Inc.
+				3360 Mitchell Lane
+				Boulder  CO  80301
+				US
+
+00-03-E1   (hex)		Winmate Communication, Inc.
+0003E1     (base 16)		Winmate Communication, Inc.
+				9F,No.111-6,Shing-De Rd
+				Taipei     241
+				TW
+
+00-03-E4   (hex)		Cisco Systems, Inc
+0003E4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-DC   (hex)		Lexar Media, Inc.
+0003DC     (base 16)		Lexar Media, Inc.
+				47421 Bayside Parkway
+				Fremont  CA  94538
+				US
+
+00-03-D8   (hex)		iMPath Networks, Inc.
+0003D8     (base 16)		iMPath Networks, Inc.
+				1431 Merivale Rd.
+				CANADA  K2E  1B9
+				CA
+
+00-03-D5   (hex)		Advanced Communications Co., Ltd.
+0003D5     (base 16)		Advanced Communications Co., Ltd.
+				2876-1 Ooka
+				Shizuoka  41-0022  
+				JP
+
+00-03-F7   (hex)		Plast-Control GmbH
+0003F7     (base 16)		Plast-Control GmbH
+				Walter-Freitag-Str. 15
+				    
+				DE
+
+00-03-FC   (hex)		Intertex Data AB
+0003FC     (base 16)		Intertex Data AB
+				Rissneleden 45
+				    
+				SE
+
+00-03-EF   (hex)		Oneline AG
+0003EF     (base 16)		Oneline AG
+				Steinfeldstraße 3
+				    
+				DE
+
+00-03-F1   (hex)		Cicada Semiconductor, Inc.
+0003F1     (base 16)		Cicada Semiconductor, Inc.
+				811 Barton Springs Rd.
+				Austin  TX  78704
+				US
+
+00-04-30   (hex)		Netgem
+000430     (base 16)		Netgem
+				27 rue d'Orleans
+				    
+				FR
+
+00-04-2C   (hex)		Minet, Inc.
+00042C     (base 16)		Minet, Inc.
+				3F Se-A Venture Tower
+				    KOREA
+				KR
+
+00-04-2A   (hex)		Wireless Networks, Inc.
+00042A     (base 16)		Wireless Networks, Inc.
+				2322 El Camino Real
+				San Mateo  CA  94403
+				US
+
+00-04-2B   (hex)		IT Access Co., Ltd.
+00042B     (base 16)		IT Access Co., Ltd.
+				3-17-6, Shinyokohama, Kouhoku-ku
+				Yokohama-shi  Kanagawa  222-8545
+				JP
+
+00-03-D6   (hex)		RADVision, Ltd.
+0003D6     (base 16)		RADVision, Ltd.
+				24 Raul Wallenberg St.
+				    
+				IL
+
+00-03-D4   (hex)		Alloptic, Inc.
+0003D4     (base 16)		Alloptic, Inc.
+				6960 Koll Center Parkway
+				Pleasanton  CA  94566
+				US
+
+00-03-CE   (hex)		ETEN Technologies, Inc.
+0003CE     (base 16)		ETEN Technologies, Inc.
+				2F, No. 9, Lane 235, Pao-Chiao Rd.,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-03-C8   (hex)		CML Emergency Services
+0003C8     (base 16)		CML Emergency Services
+				75 Boulevard la Technologies
+				    
+				CA
+
+00-03-C3   (hex)		Micronik Multimedia
+0003C3     (base 16)		Micronik Multimedia
+				Brückenstraße 2
+				    
+				DE
+
+00-04-19   (hex)		Fibercycle Networks, Inc.
+000419     (base 16)		Fibercycle Networks, Inc.
+				20 South Santa Cruz Ave.
+				Los Gatos  CA  95030
+				US
+
+00-04-1C   (hex)		ipDialog, Inc.
+00041C     (base 16)		ipDialog, Inc.
+				1762 Technology Drive
+				San Jose  CA  95110
+				US
+
+00-04-18   (hex)		Teltronic S.A.U.
+000418     (base 16)		Teltronic S.A.U.
+				Poligono de Malpica
+				    
+				ES
+
+00-03-70   (hex)		NXTV, Inc.
+000370     (base 16)		NXTV, Inc.
+				5955 De Soto Ave, #160
+				Woodland Hills  CA  91367
+				US
+
+00-04-02   (hex)		Nexsan Technologies, Ltd.
+000402     (base 16)		Nexsan Technologies, Ltd.
+				Parker Centre
+				Derby    DE21 4SZ
+				GB
+
+00-03-ED   (hex)		Shinkawa Electric Co., Ltd.
+0003ED     (base 16)		Shinkawa Electric Co., Ltd.
+				3-2-24 3 chome
+				    
+				JP
+
+00-03-BD   (hex)		OmniCluster Technologies, Inc.
+0003BD     (base 16)		OmniCluster Technologies, Inc.
+				4950 Blue Lake Drive
+				Boca Raton  FL  33431
+				US
+
+00-03-C0   (hex)		RFTNC Co., Ltd.
+0003C0     (base 16)		RFTNC Co., Ltd.
+				3F, 1624-24, Bongchen-dong
+				  SOUTH  KOREA
+				KR
+
+00-03-B8   (hex)		NetKit Solutions, LLC
+0003B8     (base 16)		NetKit Solutions, LLC
+				26630 Agoura Road
+				Calabasas  CA  91302
+				US
+
+00-03-B7   (hex)		ZACCESS Systems
+0003B7     (base 16)		ZACCESS Systems
+				275 Shoreline Drive, #110
+				Redwood City  CA  94065
+				US
+
+00-03-A0   (hex)		Cisco Systems, Inc
+0003A0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-A2   (hex)		Catapult Communications
+0003A2     (base 16)		Catapult Communications
+				160 S. Whisman Rd.
+				Mountain View  CA  94041
+				US
+
+00-03-9C   (hex)		OptiMight Communications, Inc.
+00039C     (base 16)		OptiMight Communications, Inc.
+				980 Linda Vista Avenue
+				Mountain View  CA  94043
+				US
+
+00-03-B0   (hex)		Xsense Technology Corp.
+0003B0     (base 16)		Xsense Technology Corp.
+				11 F, 232, Sec. 3, ChengTeh Rd.
+				Taipei  TAIWAN,  103
+				TW
+
+00-03-AA   (hex)		Watlow
+0003AA     (base 16)		Watlow
+				1241 Bundy Blvd.
+				Winona  MN  55987
+				US
+
+00-03-A8   (hex)		IDOT Computers, Inc.
+0003A8     (base 16)		IDOT Computers, Inc.
+				3F., No. 137, Lane 235
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-03-55   (hex)		TeraBeam Internet Systems
+000355     (base 16)		TeraBeam Internet Systems
+				14833 NE 87th St., Bldg. C
+				Redmond  WA  98052
+				US
+
+00-03-69   (hex)		Nippon Antenna Co., Ltd.
+000369     (base 16)		Nippon Antenna Co., Ltd.
+				No. 49-8, Nishiogu,
+				Tokyo    116-8561
+				JP
+
+00-03-73   (hex)		Aselsan A.S
+000373     (base 16)		Aselsan A.S
+				Mehmet Akif Ersoy Mah.
+				    
+				TR
+
+00-03-77   (hex)		Gigabit Wireless
+000377     (base 16)		Gigabit Wireless
+				3099 N. First Street
+				San Jose  CA  95134
+				US
+
+00-03-65   (hex)		Kira Information & Communications, Ltd.
+000365     (base 16)		Kira Information & Communications, Ltd.
+				6th Fl. Anam Tower,
+				    
+				KR
+
+00-03-85   (hex)		Actelis Networks, Inc.
+000385     (base 16)		Actelis Networks, Inc.
+				1 Bazel St., P.O.B. 10173
+				    
+				IL
+
+00-03-54   (hex)		Fiber Logic Communications
+000354     (base 16)		Fiber Logic Communications
+				5F-3, No. 9, Prosperity Road One,
+				Hsinchu    
+				TW
+
+00-03-50   (hex)		BTICINO SPA
+000350     (base 16)		BTICINO SPA
+				Via L. Manara, 4
+				    
+				IT
+
+00-03-4E   (hex)		Pos Data Company, Ltd.
+00034E     (base 16)		Pos Data Company, Ltd.
+				276-2, Seo-Hyun Dong,
+				    
+				KR
+
+00-03-48   (hex)		Norscan Instruments, Ltd.
+000348     (base 16)		Norscan Instruments, Ltd.
+				7 Terracon Place
+				    R2J 4B3
+				CA
+
+00-03-46   (hex)		Hitachi Kokusai Electric, Inc.
+000346     (base 16)		Hitachi Kokusai Electric, Inc.
+				1-6-10 Uchikanda
+				    
+				JP
+
+00-03-44   (hex)		Tietech.Co., Ltd.
+000344     (base 16)		Tietech.Co., Ltd.
+				2-13-1 Chikamatoori Minamiku
+				    
+				JP
+
+00-02-E6   (hex)		Gould Instrument Systems, Inc.
+0002E6     (base 16)		Gould Instrument Systems, Inc.
+				8333 Rockside Road
+				Valley View  OH  44125
+				US
+
+00-02-E4   (hex)		JC HYUN Systems, Inc.
+0002E4     (base 16)		JC HYUN Systems, Inc.
+				Shinbong Bldg, 736-6,
+				Seoul    (135-080)
+				KR
+
+00-02-DE   (hex)		Astrodesign, Inc.
+0002DE     (base 16)		Astrodesign, Inc.
+				2-22-12 Kamikodana Ka
+				Kanagawa    
+				JP
+
+00-02-E2   (hex)		NDC Infared Engineering
+0002E2     (base 16)		NDC Infared Engineering
+				5314 N. Irwindale Ave.
+				Irwindale  CA  91706
+				US
+
+00-02-E1   (hex)		Integrated Network Corporation
+0002E1     (base 16)		Integrated Network Corporation
+				757 Route 202/206
+				Bridgewater  NJ  08807
+				US
+
+00-02-F7   (hex)		ARM
+0002F7     (base 16)		ARM
+				110, Fulbourn Road
+				    CB1 9NJ
+				GB
+
+00-D0-24   (hex)		Cognex Corporation
+00D024     (base 16)		Cognex Corporation
+				Modular Vision Systems Division
+				Portland  OR  97224
+				US
+
+00-02-F1   (hex)		Pinetron Co., Ltd.
+0002F1     (base 16)		Pinetron Co., Ltd.
+				Bldg. #1599-11,
+				Seoul    137-073
+				KR
+
+00-02-ED   (hex)		DXO Telecom Co., Ltd.
+0002ED     (base 16)		DXO Telecom Co., Ltd.
+				8F, 300-11, Yumgok-Dong,
+				    
+				KR
+
+00-02-EC   (hex)		Maschoff Design Engineering
+0002EC     (base 16)		Maschoff Design Engineering
+				1325 Kenilworth Drive
+				Woodbury  MN  55125
+				US
+
+00-03-36   (hex)		Zetes Technologies
+000336     (base 16)		Zetes Technologies
+				3 Rue De Stras Bourg
+				    
+				BE
+
+00-03-37   (hex)		Vaone, Inc.
+000337     (base 16)		Vaone, Inc.
+				6F Kyemong Art Center,
+				    135-082
+				KR
+
+00-03-3B   (hex)		TAMI Tech Co., Ltd.
+00033B     (base 16)		TAMI Tech Co., Ltd.
+				4F, Chungdo Bencher Town
+				Taejon    
+				KR
+
+00-03-2D   (hex)		IBASE Technology, Inc.
+00032D     (base 16)		IBASE Technology, Inc.
+				5F, No. 221,
+				Taipei    
+				TW
+
+00-B0-52   (hex)		Atheros Communications
+00B052     (base 16)		Atheros Communications
+				5955 T.G. Lee Blvd, Ste. 600
+				Ocala  FL  32822
+				US
+
+00-03-43   (hex)		Martin Professional A/S
+000343     (base 16)		Martin Professional A/S
+				Olof Palmes Alle 18
+				    
+				DK
+
+00-03-35   (hex)		Mirae Technology
+000335     (base 16)		Mirae Technology
+				211-15, Hon Hyun-dong,
+				Seoul    
+				KR
+
+00-02-F8   (hex)		SEAKR Engineering, Inc.
+0002F8     (base 16)		SEAKR Engineering, Inc.
+				12847 E. Peakview Ave.
+				Englewood  CO  80111
+				US
+
+00-03-14   (hex)		Teleware Network Systems
+000314     (base 16)		Teleware Network Systems
+				#7806 7th Dongil Technotown,
+				    431-062
+				KR
+
+00-03-2F   (hex)		Global Sun Technology, Inc.
+00032F     (base 16)		Global Sun Technology, Inc.
+				No. 13, Tung Yuan Rd.,
+				    
+				TW
+
+00-02-DC   (hex)		Fujitsu General Limited
+0002DC     (base 16)		Fujitsu General Limited
+				1116, Suenaga, Takatsu-Ku,
+				  213-8502  
+				JP
+
+00-02-D7   (hex)		EMPEG Ltd
+0002D7     (base 16)		EMPEG Ltd
+				1 Signet Court
+				    CB5 8LA
+				GB
+
+00-02-D3   (hex)		NetBotz, Inc.
+0002D3     (base 16)		NetBotz, Inc.
+				110044 Research Blvd.
+				Austin  TX  78759
+				US
+
+00-02-DA   (hex)		ExiO Communications, Inc.
+0002DA     (base 16)		ExiO Communications, Inc.
+				2362 Qume Drive
+				San Jose  CA  95131
+				US
+
+00-02-D4   (hex)		PDA Peripherals, Inc.
+0002D4     (base 16)		PDA Peripherals, Inc.
+				205 Orange St.
+				New Haven  CT  06510
+				US
+
+00-02-D6   (hex)		NICE Systems
+0002D6     (base 16)		NICE Systems
+				8 Hapnina St., POB 690
+				    
+				IL
+
+00-02-7D   (hex)		Cisco Systems, Inc
+00027D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-7C   (hex)		Trilithic, Inc.
+00027C     (base 16)		Trilithic, Inc.
+				9202 E. 33rd Street
+				Indianapolis  IN  46235
+				US
+
+00-02-8B   (hex)		VDSL Systems OY
+00028B     (base 16)		VDSL Systems OY
+				Tekniikantie 12
+				    
+				FI
+
+00-02-8C   (hex)		Micrel-Synergy Semiconductor
+00028C     (base 16)		Micrel-Synergy Semiconductor
+				3250 Scott Boulevard
+				Santa Clara  CA  95054
+				US
+
+00-02-8D   (hex)		Movita Technologies, Inc.
+00028D     (base 16)		Movita Technologies, Inc.
+				No. 26 Wu-Chuan 7th Road,
+				Taipei  Taiwan,  R.O.C.
+				TW
+
+00-02-98   (hex)		Broadframe Corporation
+000298     (base 16)		Broadframe Corporation
+				5828 Moonstone Ave.
+				Alta Loma  CA  91701
+				US
+
+00-02-97   (hex)		C-COR.net
+000297     (base 16)		C-COR.net
+				60 Decibel Road
+				State College  PA  16801
+				US
+
+00-02-91   (hex)		Open Network Co., Ltd.
+000291     (base 16)		Open Network Co., Ltd.
+				Seishin Bldg., 2-5-10 Shinjuku
+				  JAPAN  160-0022
+				JP
+
+00-02-C1   (hex)		Innovative Electronic Designs, Inc.
+0002C1     (base 16)		Innovative Electronic Designs, Inc.
+				9701 Taylorsville Rd.
+				Louisville  KY  40299
+				US
+
+00-02-C0   (hex)		Bencent Tzeng Industry Co., Ltd.
+0002C0     (base 16)		Bencent Tzeng Industry Co., Ltd.
+				3rd fl., No. 3 Ruey Kuang Rd.,
+				Taiwan  Taiwan  R.O.C.
+				TW
+
+00-02-99   (hex)		Apex, Inc.
+000299     (base 16)		Apex, Inc.
+				9911 Willows Rd. N.E.
+				Redmond  WA  95052
+				US
+
+00-02-75   (hex)		SMART Technologies, Inc.
+000275     (base 16)		SMART Technologies, Inc.
+				3636 Research  Road NW
+				Calgary, Alberta    T2L1Y1
+				CA
+
+00-02-C6   (hex)		Data Track Technology PLC
+0002C6     (base 16)		Data Track Technology PLC
+				153 Somerford Road
+				  UNITED  KINGDOM
+				GB
+
+00-02-A6   (hex)		Effinet Systems Co., Ltd.
+0002A6     (base 16)		Effinet Systems Co., Ltd.
+				Yugong Bldg. 502
+				    Korea
+				KR
+
+00-02-5F   (hex)		Nortel Networks
+00025F     (base 16)		Nortel Networks
+				9300 trans-CANADA Highway
+				H4S  1KS  
+				CA
+
+00-02-5C   (hex)		SCI Systems (Kunshan) Co., Ltd.
+00025C     (base 16)		SCI Systems (Kunshan) Co., Ltd.
+				312 QING YANG ROAD
+				CHINA  CHINA  215300
+				CN
+
+00-00-87   (hex)		HITACHI, LTD.
+000087     (base 16)		HITACHI, LTD.
+				NETWORK ENGINEERING DIV.
+				  TOKYO 140  
+				JP
+
+00-02-58   (hex)		Flying Packets Communications
+000258     (base 16)		Flying Packets Communications
+				388 Market Street
+				San Francisco  CA  94111
+				US
+
+00-02-4E   (hex)		Datacard Group
+00024E     (base 16)		Datacard Group
+				11111 Bren Road West
+				Minnetonka  MN  55343
+				US
+
+00-02-42   (hex)		Videoframe Systems
+000242     (base 16)		Videoframe Systems
+				101 Providence Mine Road
+				Nevada City  CA  95959
+				US
+
+00-02-44   (hex)		SURECOM Technology Co.
+000244     (base 16)		SURECOM Technology Co.
+				6F, No. 125, Sec. 2, Datung Rd.
+				Taiwan  Taiwan  R.O.C.
+				TW
+
+00-02-3E   (hex)		Selta Telematica S.p.a
+00023E     (base 16)		Selta Telematica S.p.a
+				Via Nazionale km 404.5
+				    
+				IT
+
+00-02-41   (hex)		Amer.com
+000241     (base 16)		Amer.com
+				7259 Bryan Dairy Road
+				Largo  FL  33777
+				US
+
+00-02-07   (hex)		VisionGlobal Network Corp.
+000207     (base 16)		VisionGlobal Network Corp.
+				826 E. Stale Road
+				American Fork  UT  84003
+				US
+
+00-02-08   (hex)		Unify Networks, Inc.
+000208     (base 16)		Unify Networks, Inc.
+				3160 De La Cruz Blvd.
+				Santa Clara  CA  95054
+				US
+
+00-02-04   (hex)		Bodmann Industries Elektronik GmbH
+000204     (base 16)		Bodmann Industries Elektronik GmbH
+				Messerschmittring 33
+				    
+				DE
+
+00-02-29   (hex)		Adtec Corporation
+000229     (base 16)		Adtec Corporation
+				3F Megurohigashiyama Blg
+				    
+				JP
+
+00-02-2D   (hex)		Agere Systems
+00022D     (base 16)		Agere Systems
+				P.O. Box 755
+				    
+				NL
+
+00-02-26   (hex)		XESystems, Inc.
+000226     (base 16)		XESystems, Inc.
+				317 Main Street
+				East Rochester  NY  14445
+				US
+
+00-02-25   (hex)		One Stop Systems
+000225     (base 16)		One Stop Systems
+				2235 Enterprise Street
+				Escondido  CA  92029
+				US
+
+00-02-11   (hex)		Nature Worldwide Technology Corp.
+000211     (base 16)		Nature Worldwide Technology Corp.
+				No. 1, Min-Chuan Street
+				Taiwan  Taiwan  R.O.C.
+				TW
+
+00-02-12   (hex)		SierraCom
+000212     (base 16)		SierraCom
+				99 South Street
+				Hopkinton  Ma  01748
+				US
+
+00-02-17   (hex)		Cisco Systems, Inc
+000217     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-01-7A   (hex)		Chengdu Maipu Electric Industrial Co., Ltd.
+00017A     (base 16)		Chengdu Maipu Electric Industrial Co., Ltd.
+				NANYI BUILDING, CONSULATE RD.,
+				  P.R.  
+				CN
+
+00-02-38   (hex)		Serome Technology, Inc.
+000238     (base 16)		Serome Technology, Inc.
+				555-14, Baekang B/D 7F
+				Seoul  Korea  135-120
+				KR
+
+00-02-69   (hex)		Nadatel Co., Ltd
+000269     (base 16)		Nadatel Co., Ltd
+				9F CoWell Bldg, 66-1 Banpo-Dong
+				  KOREA  137-040
+				KR
+
+00-02-64   (hex)		AudioRamp.com
+000264     (base 16)		AudioRamp.com
+				15941 Red Hill Suite 205
+				Tustin  CA  92780
+				US
+
+00-02-55   (hex)		IBM Corp
+000255     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-02-52   (hex)		Carrier Corporation
+000252     (base 16)		Carrier Corporation
+				One Carrier Place
+				Farmington  CT  06034-4015
+				US
+
+00-02-20   (hex)		CANON FINETECH INC.
+000220     (base 16)		CANON FINETECH INC.
+				717, Yaguchi, Misato-shi,
+				Saitama    341-8527
+				JP
+
+00-02-0D   (hex)		Micronpc.com
+00020D     (base 16)		Micronpc.com
+				900 E. Karcher Rd.
+				Nampa  IA  83687
+				US
+
+00-01-D4   (hex)		Leisure Time, Inc.
+0001D4     (base 16)		Leisure Time, Inc.
+				4258 Communications Drive
+				Norcross  GA  30093
+				US
+
+00-01-DD   (hex)		Avail Networks
+0001DD     (base 16)		Avail Networks
+				305 E. Eisenhower Parkway
+				Ann Arbor  MI  48108
+				US
+
+00-01-D5   (hex)		HAEDONG INFO & COMM CO., LTD
+0001D5     (base 16)		HAEDONG INFO & COMM CO., LTD
+				#801 The Corporation Center for Universi
+				Taejeon  Republic  of Korea 305
+				KR
+
+00-01-D7   (hex)		F5 Networks, Inc.
+0001D7     (base 16)		F5 Networks, Inc.
+				1322 N. Whitman Lane
+				Liberty Lake  WA  99019
+				US
+
+00-01-DE   (hex)		Trango Systems, Inc.
+0001DE     (base 16)		Trango Systems, Inc.
+				9939 V/A Pasar
+				San Diego  CA  92126
+				US
+
+00-01-DC   (hex)		Activetelco
+0001DC     (base 16)		Activetelco
+				43222 Christy Street
+				Fremont  CA  94538
+				US
+
+00-01-F9   (hex)		TeraGlobal Communications Corp.
+0001F9     (base 16)		TeraGlobal Communications Corp.
+				9171 Towne Centre Drive
+				San Diego  CA  92122
+				US
+
+00-01-FB   (hex)		DoTop Technology, Inc.
+0001FB     (base 16)		DoTop Technology, Inc.
+				10F, No. 100, Min-Chyuan Road
+				    TAIWAN
+				TW
+
+00-01-F8   (hex)		TEXIO TECHNOLOGY CORPORATION
+0001F8     (base 16)		TEXIO TECHNOLOGY CORPORATION
+				2-18-13 Shin Yokohama,
+				    222-0033
+				JP
+
+00-01-BE   (hex)		Gigalink Co., Ltd.
+0001BE     (base 16)		Gigalink Co., Ltd.
+				6th F/L Diplomatic Center 1376-1
+				    KOREA
+				KR
+
+00-01-B1   (hex)		General Bandwidth
+0001B1     (base 16)		General Bandwidth
+				12303-B Technology Blvd.
+				Austin  TX  78727
+				US
+
+00-01-BF   (hex)		Teleforce Co., Ltd.
+0001BF     (base 16)		Teleforce Co., Ltd.
+				721 yoshioka-cho kanonji-city
+				    
+				JP
+
+00-01-B4   (hex)		Wayport, Inc.
+0001B4     (base 16)		Wayport, Inc.
+				1609 Shoal Creek Blvd.
+				Austin  TX  78701
+				US
+
+00-01-BA   (hex)		IC-Net, Inc.
+0001BA     (base 16)		IC-Net, Inc.
+				5 Fl. Seasung Bldg., 311-27 Noryangjin-D
+				    KOREA
+				KR
+
+00-01-CF   (hex)		Alpha Data Parallel Systems, Ltd.
+0001CF     (base 16)		Alpha Data Parallel Systems, Ltd.
+				58 Timber Bush
+				  UNITED  KINGDOM
+				GB
+
+00-01-D0   (hex)		VitalPoint, Inc.
+0001D0     (base 16)		VitalPoint, Inc.
+				15770 Hopper Road
+				Peyton  CO  80831
+				US
+
+00-01-B0   (hex)		Fulltek Technology Co., Ltd.
+0001B0     (base 16)		Fulltek Technology Co., Ltd.
+				3F No. 8, Lane 130, Min Chuan Rd., Hsint
+				  TAIWAN  R.O.C.
+				TW
+
+00-01-A9   (hex)		BMW AG
+0001A9     (base 16)		BMW AG
+				Dept. FG-322
+				80788  Munich  
+				DE
+
+00-01-AA   (hex)		Airspan Communications, Ltd.
+0001AA     (base 16)		Airspan Communications, Ltd.
+				Cambridge House, Oxford Rd.,
+				    
+				GB
+
+00-01-9E   (hex)		ESS Technology, Inc.
+00019E     (base 16)		ESS Technology, Inc.
+				48401 Fremont Blvd.
+				Fremont  CA  94538
+				US
+
+00-01-7D   (hex)		ThermoQuest
+00017D     (base 16)		ThermoQuest
+				355 River Oaks Parkway
+				San Jose  CA  95134
+				US
+
+00-01-81   (hex)		Nortel Networks
+000181     (base 16)		Nortel Networks
+				1100 Technology Park Drive
+				Billerica  MA  01821
+				US
+
+00-01-94   (hex)		Capital Equipment Corporation
+000194     (base 16)		Capital Equipment Corporation
+				900 Middlesex Turnpike - Bldg. 2
+				Billerica  MA  01821
+				US
+
+00-01-98   (hex)		Darim Vision
+000198     (base 16)		Darim Vision
+				Taejon Expo Venture Town
+				    KOREA
+				KR
+
+00-01-E8   (hex)		Force10 Networks, Inc.
+0001E8     (base 16)		Force10 Networks, Inc.
+				1440 McCarthy Blvd.
+				Milpitas  CA  95035
+				US
+
+00-01-E9   (hex)		Litton Marine Systems B.V.
+0001E9     (base 16)		Litton Marine Systems B.V.
+				118 Burlington Road
+				ENGLAND  KT3  4NR
+				GB
+
+00-01-E5   (hex)		Supernet, Inc.
+0001E5     (base 16)		Supernet, Inc.
+				135-080 Daemeong Bldg.
+				    KOREA
+				KR
+
+00-01-A2   (hex)		Logical Co., Ltd.
+0001A2     (base 16)		Logical Co., Ltd.
+				4598 Murakushi-cho
+				  431-1207  
+				JP
+
+00-01-85   (hex)		Hitachi Aloka Medical, Ltd.
+000185     (base 16)		Hitachi Aloka Medical, Ltd.
+				3-7-19, Imai Ome-city
+				  198-8577  
+				JP
+
+00-01-C7   (hex)		Cisco Systems, Inc
+0001C7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-01-21   (hex)		WatchGuard Technologies, Inc.
+000121     (base 16)		WatchGuard Technologies, Inc.
+				605 Fifth Ave. S
+				Seattle  WA  98104-3892
+				US
+
+00-01-29   (hex)		DFI Inc.
+000129     (base 16)		DFI Inc.
+				100, Huan-Ho Street
+				Hsi-Chih City  Taipei Hsien  
+				TW
+
+00-01-19   (hex)		RTUnet (Australia)
+000119     (base 16)		RTUnet (Australia)
+				8/3-5 Gilda Court
+				Mulgrave  Vic  3170
+				AU
+
+00-01-22   (hex)		Trend Communications, Ltd.
+000122     (base 16)		Trend Communications, Ltd.
+				Knaves Beech Estate
+				Bucks, HP10 9QZ    
+				GB
+
+00-01-1A   (hex)		Hoffmann und Burmeister GbR
+00011A     (base 16)		Hoffmann und Burmeister GbR
+				Niederberger Str. 75
+				D-53909 Zuelpich    
+				DE
+
+00-01-0A   (hex)		CIS TECHNOLOGY INC.
+00010A     (base 16)		CIS TECHNOLOGY INC.
+				16F, No. 75 Hsin Tai Wu Road
+				Taipei Hsien 221    
+				TW
+
+00-01-67   (hex)		HIOKI E.E. CORPORATION
+000167     (base 16)		HIOKI E.E. CORPORATION
+				81 Koizumi, Ueda, Nagano
+				386-1192  386-1192  
+				JP
+
+00-01-68   (hex)		VITANA CORPORATION
+000168     (base 16)		VITANA CORPORATION
+				2500 Don Reid Drive
+				K1H 1E1  K1H 1E1  
+				CA
+
+00-01-62   (hex)		Cygnet Technologies, Inc.
+000162     (base 16)		Cygnet Technologies, Inc.
+				1411 LeMay Drive #301
+				Carrollton  TX  75007
+				US
+
+00-01-54   (hex)		G3M Corporation
+000154     (base 16)		G3M Corporation
+				4320 Stevens Creek Blvd. - Ste. #275
+				San Jose  CA  95129
+				US
+
+00-01-52   (hex)		CHROMATEK INC.
+000152     (base 16)		CHROMATEK INC.
+				6-10, Miyazaki 2-Chome
+				    
+				JP
+
+00-01-50   (hex)		GILAT COMMUNICATIONS, LTD.
+000150     (base 16)		GILAT COMMUNICATIONS, LTD.
+				21/D Yegia Kapayim Street
+				    
+				IL
+
+00-01-51   (hex)		Ensemble Communications
+000151     (base 16)		Ensemble Communications
+				6256 Greenman Drive - Ste. #400
+				San Diego  CA  92122
+				US
+
+00-01-15   (hex)		EXTRATECH CORPORATION
+000115     (base 16)		EXTRATECH CORPORATION
+				760 Thornton St., Unit 2
+				Post Falls  ID  83854
+				US
+
+00-01-01   (hex)		Private
+000101     (base 16)		Private
+
+00-01-0D   (hex)		Teledyne DALSA Inc.
+00010D     (base 16)		Teledyne DALSA Inc.
+				880 McCaffrey
+				St-Laurent  Quebec  H4T 2C7
+				CA
+
+00-01-05   (hex)		Beckhoff Automation GmbH
+000105     (base 16)		Beckhoff Automation GmbH
+				Eiserstraße 5
+				Verl  NRW  33415
+				DE
+
+00-B0-17   (hex)		InfoGear Technology Corp.
+00B017     (base 16)		InfoGear Technology Corp.
+				2055 Woodside Road
+				Redwood City  CA  94061
+				US
+
+00-01-2C   (hex)		Aravox Technologies, Inc.
+00012C     (base 16)		Aravox Technologies, Inc.
+				16725 40th Place North
+				Plymouth  MN  55446
+				US
+
+00-01-42   (hex)		Cisco Systems, Inc
+000142     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-01-64   (hex)		Cisco Systems, Inc
+000164     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-01-5F   (hex)		DIGITAL DESIGN GmbH
+00015F     (base 16)		DIGITAL DESIGN GmbH
+				Rauchstr. 21
+				  Berlin  D-10787
+				DE
+
+00-01-2B   (hex)		TELENET Co., Ltd.
+00012B     (base 16)		TELENET Co., Ltd.
+				
+				    
+				
+
+00-01-3F   (hex)		Neighbor World Co., Ltd.
+00013F     (base 16)		Neighbor World Co., Ltd.
+				114A YERC, 134, Shinchon_dong
+				120-749  120-749  KOREA
+				KR
+
+00-01-24   (hex)		Acer Incorporated
+000124     (base 16)		Acer Incorporated
+				21F, 88, Sec.1
+				Taipei Hsien 221    
+				TW
+
+00-30-88   (hex)		Ericsson
+003088     (base 16)		Ericsson
+				250 Holger Way
+				SAN JOSE  CA  95134
+				US
+
+00-30-20   (hex)		TSI, Inc..
+003020     (base 16)		TSI, Inc..
+				500 Cardigan Road
+				Shoreview  MN  55126
+				US
+
+00-30-95   (hex)		Procomp Informatics, Ltd.
+003095     (base 16)		Procomp Informatics, Ltd.
+				5F, 69-10, Sec. 2,
+				Tamshui, Taipei, Hsien    
+				TW
+
+00-30-CA   (hex)		Discovery Com
+0030CA     (base 16)		Discovery Com
+				4935 Century Street
+				Huntsville  AL  35816
+				US
+
+00-30-CE   (hex)		Zaffire
+0030CE     (base 16)		Zaffire
+				2630 Orchard Parkway
+				San Jose  CA  95134-2020
+				US
+
+00-30-7B   (hex)		Cisco Systems, Inc
+00307B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-B5   (hex)		Tadiran Microwave Networks
+0030B5     (base 16)		Tadiran Microwave Networks
+				4000 Greenbriar Drive
+				Stafford  TX  77477
+				US
+
+00-30-B8   (hex)		RiverDelta Networks
+0030B8     (base 16)		RiverDelta Networks
+				Three Highwood Drive East
+				Tewksbury  MA  01876
+				US
+
+00-30-71   (hex)		Cisco Systems, Inc
+003071     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-3A   (hex)		MAATEL
+00303A     (base 16)		MAATEL
+				495 RUE DE POMMARIN
+				38360 VOREPPE    
+				FR
+
+00-30-4E   (hex)		BUSTEC PRODUCTION LTD.
+00304E     (base 16)		BUSTEC PRODUCTION LTD.
+				WORLD AVIATION PARK
+				Shannon  County Clare  
+				IE
+
+00-30-A4   (hex)		Woodwind Communications System
+0030A4     (base 16)		Woodwind Communications System
+				20300 Century Blvd., Suite 200B
+				Germantown  MD  20874
+				US
+
+00-30-3B   (hex)		PowerCom Technology
+00303B     (base 16)		PowerCom Technology
+				2F, No. 34, Industry E. Road IV
+				Hsinchu 300    
+				TW
+
+00-30-BC   (hex)		Optronic AG
+0030BC     (base 16)		Optronic AG
+				untereggerstrasse 53
+				9403 Goldach    
+				CH
+
+00-B0-2D   (hex)		ViaGate Technologies, Inc.
+00B02D     (base 16)		ViaGate Technologies, Inc.
+				745 Route 202/206
+				Bridgewater  NJ  08807
+				US
+
+00-30-EE   (hex)		DSG Technology, Inc.
+0030EE     (base 16)		DSG Technology, Inc.
+				6F-4 No. 270, Chwig Hsiao
+				 Taipei    
+				TW
+
+00-30-9E   (hex)		WORKBIT CORPORATION.
+00309E     (base 16)		WORKBIT CORPORATION.
+				1-2-2 Chuou, Yamato
+				Kanagawa  242-0021    
+				JP
+
+00-30-DE   (hex)		WAGO Kontakttechnik GmbH
+0030DE     (base 16)		WAGO Kontakttechnik GmbH
+				Hansastrasse 27
+				32423 Minden    
+				DE
+
+00-30-3E   (hex)		Radcom Ltd.
+00303E     (base 16)		Radcom Ltd.
+				12 Hanechoshet Street
+				Tel-Aviv 69710    
+				IL
+
+00-30-D7   (hex)		Innovative Systems, L.L.C.
+0030D7     (base 16)		Innovative Systems, L.L.C.
+				1000 Innovative Drive
+				Mitchell  SD  57301
+				US
+
+00-B0-CE   (hex)		Viveris Technologies
+00B0CE     (base 16)		Viveris Technologies
+				1 rue Traversiere BP 20327
+				Rungis Cedex    94598
+				FR
+
+00-B0-1C   (hex)		Westport Technologies
+00B01C     (base 16)		Westport Technologies
+				15 Capella Court, Unit 116
+				Nepean  Ontario  
+				CA
+
+00-B0-4A   (hex)		Cisco Systems, Inc
+00B04A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-B0-48   (hex)		Marconi Communications Inc.
+00B048     (base 16)		Marconi Communications Inc.
+				8616 Freeport Parkway
+				Irving  TX  75063
+				US
+
+00-30-1B   (hex)		SHUTTLE, INC.
+00301B     (base 16)		SHUTTLE, INC.
+				5F, No. 34, Lane 60
+				Taipei    
+				TW
+
+00-30-21   (hex)		HSING TECH. ENTERPRISE CO.,LTD
+003021     (base 16)		HSING TECH. ENTERPRISE CO.,LTD
+				2F, NO. 22, ALLLEY 38, LANE 91
+				TAIPEI    
+				TW
+
+00-30-2C   (hex)		SYLANTRO SYSTEMS CORPORATION
+00302C     (base 16)		SYLANTRO SYSTEMS CORPORATION
+				1686 DELL AVENUE
+				CAMPBELL  CA  95008
+				US
+
+00-30-DF   (hex)		KB/TEL TELECOMUNICACIONES
+0030DF     (base 16)		KB/TEL TELECOMUNICACIONES
+				S.A. DE C.V.
+				Mexico City 14060    
+				MX
+
+00-30-30   (hex)		HARMONIX CORPORATION
+003030     (base 16)		HARMONIX CORPORATION
+				1755 OSGOOD STREET
+				NORTH ANDOVER  MA  01845
+				US
+
+00-30-63   (hex)		SANTERA SYSTEMS, INC.
+003063     (base 16)		SANTERA SYSTEMS, INC.
+				2901 SUMMIT AVENUE - STE. #100
+				PLANO  TX  75074
+				US
+
+00-30-A3   (hex)		Cisco Systems, Inc
+0030A3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-DD   (hex)		INDIGITA CORPORATION
+0030DD     (base 16)		INDIGITA CORPORATION
+				30 Corporate Park Drive
+				Irvine  CA  92606
+				US
+
+00-30-99   (hex)		BOENIG UND KALLENBACH OHG
+003099     (base 16)		BOENIG UND KALLENBACH OHG
+				AM SPOERKEL 100
+				    
+				DE
+
+00-30-F2   (hex)		Cisco Systems, Inc
+0030F2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-51   (hex)		ORBIT AVIONIC & COMMUNICATION
+003051     (base 16)		ORBIT AVIONIC & COMMUNICATION
+				SYSTEMS, LTD.
+				    
+				IL
+
+00-30-8E   (hex)		CROSS MATCH TECHNOLOGIES, INC.
+00308E     (base 16)		CROSS MATCH TECHNOLOGIES, INC.
+				3960 RCA Blvd., Suite 6001
+				Palm Beach  FL  33410
+				US
+
+00-30-27   (hex)		KERBANGO, INC.
+003027     (base 16)		KERBANGO, INC.
+				21771 STEVENS CREEK BLVD. #100
+				CUPERTINO  CA  95014
+				US
+
+00-30-33   (hex)		ORIENT TELECOM CO., LTD.
+003033     (base 16)		ORIENT TELECOM CO., LTD.
+				MISUNG BULDING 115-7
+				    KOREA
+				KR
+
+00-30-08   (hex)		AVIO DIGITAL, INC.
+003008     (base 16)		AVIO DIGITAL, INC.
+				957 INDUSTRIAL ROAD
+				SAN CARLOS  CA  94070
+				US
+
+00-30-1D   (hex)		SKYSTREAM, INC.
+00301D     (base 16)		SKYSTREAM, INC.
+				455 DeGuigne Drive
+				Sunnyvale  CA  94086-3835
+				US
+
+00-30-BA   (hex)		AC&T SYSTEM CO., LTD.
+0030BA     (base 16)		AC&T SYSTEM CO., LTD.
+				ROOM 702, KEUM-WHA PLAZA
+				435-040  SOUTH  KOREA
+				KR
+
+00-30-FD   (hex)		INTEGRATED SYSTEMS DESIGN
+0030FD     (base 16)		INTEGRATED SYSTEMS DESIGN
+				3650-G CENTRE CIRCLE DRIVE
+				FORT MILL  SC  29715
+				US
+
+00-30-B9   (hex)		ECTEL
+0030B9     (base 16)		ECTEL
+				22240 COMSAT DRIVE
+				CLARKSBURG  MD  20871
+				US
+
+00-30-7D   (hex)		GRE AMERICA, INC.
+00307D     (base 16)		GRE AMERICA, INC.
+				425 HARBOR BLVD.
+				BELMONT  CA  94002
+				US
+
+00-30-EF   (hex)		NEON TECHNOLOGY, INC.
+0030EF     (base 16)		NEON TECHNOLOGY, INC.
+				85 WEST MONTAGUE EXPRESSWAY
+				MILPITAS  CA  95035
+				US
+
+00-30-96   (hex)		Cisco Systems, Inc
+003096     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-39   (hex)		SOFTBOOK PRESS
+003039     (base 16)		SOFTBOOK PRESS
+				7745 HERSCHEL AVENUE
+				LA JOLLA  CA  92037
+				US
+
+00-D0-F8   (hex)		FUJIAN STAR TERMINAL
+00D0F8     (base 16)		FUJIAN STAR TERMINAL
+				DEVICE CO., LTD.
+				FUZHOU  FUJIAN,  CHINA 350002
+				CN
+
+00-D0-ED   (hex)		XIOX
+00D0ED     (base 16)		XIOX
+				150 DOW STREET
+				MANCHESTER  NH  03101
+				US
+
+00-D0-97   (hex)		Cisco Systems, Inc
+00D097     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-8E   (hex)		Grass Valley, A Belden Brand
+00D08E     (base 16)		Grass Valley, A Belden Brand
+				3499, Douglas B. Floreani
+				Montreal  Quebec  H4S 2C6
+				CA
+
+00-D0-56   (hex)		SOMAT CORPORATION
+00D056     (base 16)		SOMAT CORPORATION
+				702 KILLARNEY STREET
+				URBANA  IL  61801
+				US
+
+00-D0-E0   (hex)		DOOIN ELECTRONICS CO.
+00D0E0     (base 16)		DOOIN ELECTRONICS CO.
+				DOOIN BLDG. 16-6, SOONAE-DONG
+				  KOREA  463-020
+				KR
+
+00-D0-00   (hex)		FERRAN SCIENTIFIC, INC.
+00D000     (base 16)		FERRAN SCIENTIFIC, INC.
+				11558 SORRENTO VALLEY ROAD
+				SAN DIEGO  CA  92121
+				US
+
+00-D0-D0   (hex)		ZHONGXING TELECOM LTD.
+00D0D0     (base 16)		ZHONGXING TELECOM LTD.
+				8-9F BUILDING 54,301#
+				    
+				CN
+
+00-D0-53   (hex)		CONNECTED SYSTEMS
+00D053     (base 16)		CONNECTED SYSTEMS
+				126 W. FIGUEROA STREET
+				SANTA BARBARA  CA  93101
+				US
+
+00-D0-33   (hex)		DALIAN DAXIAN NETWORK
+00D033     (base 16)		DALIAN DAXIAN NETWORK
+				SYSTEM CO., LTD.
+				    
+				CN
+
+00-D0-D6   (hex)		AETHRA TELECOMUNICAZIONI
+00D0D6     (base 16)		AETHRA TELECOMUNICAZIONI
+				VIA MATTEO RICCI, 10
+				    
+				IT
+
+00-D0-63   (hex)		Cisco Systems, Inc
+00D063     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-47   (hex)		XN TECHNOLOGIES
+00D047     (base 16)		XN TECHNOLOGIES
+				P.O. BOX 350
+				CHENEY  WA  99004
+				US
+
+00-D0-55   (hex)		KATHREIN-WERKE KG
+00D055     (base 16)		KATHREIN-WERKE KG
+				ANTON-KATHREIN-STRASS 1-3
+				    
+				DE
+
+00-D0-3B   (hex)		VISION PRODUCTS PTY. LTD.
+00D03B     (base 16)		VISION PRODUCTS PTY. LTD.
+				SECOND AVENUE, TECHNOLOGY PARK
+				  AUSTRALIA  5095
+				AU
+
+00-D0-B3   (hex)		DRS Technologies Canada Ltd
+00D0B3     (base 16)		DRS Technologies Canada Ltd
+				700 Palladium Drive
+				Ottawa  Ontario  K2V 1C6
+				CA
+
+00-D0-AF   (hex)		CUTLER-HAMMER, INC.
+00D0AF     (base 16)		CUTLER-HAMMER, INC.
+				PMP CENTER
+				PITTSBURGH  PA  15205
+				US
+
+00-D0-52   (hex)		ASCEND COMMUNICATIONS, INC.
+00D052     (base 16)		ASCEND COMMUNICATIONS, INC.
+				1701 HARBOR BAY PARKWAY
+				ALAMEDA  CA  94502
+				US
+
+00-D0-AD   (hex)		TL INDUSTRIES
+00D0AD     (base 16)		TL INDUSTRIES
+				2541 TRACY ROAD
+				NORTHWOOD  OH  43619
+				US
+
+00-D0-A4   (hex)		ALANTRO COMMUNICATIONS
+00D0A4     (base 16)		ALANTRO COMMUNICATIONS
+				141 STONY CIRCLE,  STE. #210
+				SANTAROSA  CA  95401
+				US
+
+00-D0-B0   (hex)		BITSWITCH LTD.
+00D0B0     (base 16)		BITSWITCH LTD.
+				3 MEADOW COURT, AMOS ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-D0-30   (hex)		Safetran Systems Corp
+00D030     (base 16)		Safetran Systems Corp
+				10655 7th Street
+				Rancho Cucamonga  CA  91730
+				US
+
+00-30-2A   (hex)		SOUTHERN INFORMATION
+00302A     (base 16)		SOUTHERN INFORMATION
+				SYSTEM, INC.
+				HSINCHU  TAIWAN,  R.O.C.
+				TW
+
+00-30-E1   (hex)		Network Equipment Technologies, Inc.
+0030E1     (base 16)		Network Equipment Technologies, Inc.
+				6900 Paseo Padre Parkway
+				Fremont  CA  94555
+				US
+
+00-30-01   (hex)		SMP
+003001     (base 16)		SMP
+				22, RUE DES COSMONAUTES
+				    
+				FR
+
+00-D0-8B   (hex)		ADVA Optical Networking Ltd.
+00D08B     (base 16)		ADVA Optical Networking Ltd.
+				ADVAntage House
+				York    YO30 4RY
+				GB
+
+00-D0-E4   (hex)		Cisco Systems, Inc
+00D0E4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-5A   (hex)		SYMBIONICS, LTD.
+00D05A     (base 16)		SYMBIONICS, LTD.
+				ST. JOHN'S INNOVATION PARK
+				    ENGLAND
+				GB
+
+00-D0-79   (hex)		Cisco Systems, Inc
+00D079     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-21   (hex)		REGENT ELECTRONICS CORP.
+00D021     (base 16)		REGENT ELECTRONICS CORP.
+				200 CENTENNIAL AVE.-STE. #201
+				PISCATAWAY  NJ  08854
+				US
+
+00-D0-9F   (hex)		NOVTEK TEST SYSTEMS
+00D09F     (base 16)		NOVTEK TEST SYSTEMS
+				2170 PARAGON DRIVE
+				SAN JOSE  CA  95131
+				US
+
+00-D0-FE   (hex)		ASTRAL POINT
+00D0FE     (base 16)		ASTRAL POINT
+				COMMUNICATIONS, INC.
+				CHELMSFORD  MA  01824
+				US
+
+00-D0-D4   (hex)		V-BITS, INC.
+00D0D4     (base 16)		V-BITS, INC.
+				2150 TRADE ZONE BLVD.
+				SAN JOSE  CA  95131
+				US
+
+00-D0-84   (hex)		NEXCOMM SYSTEMS, INC.
+00D084     (base 16)		NEXCOMM SYSTEMS, INC.
+				SUIT #NAL-903,
+				SUNGNAM-CITY  SUNGNAM-CITY  KYUNGGI-DO,K
+				KR
+
+00-D0-99   (hex)		Elcard Wireless Systems Oy
+00D099     (base 16)		Elcard Wireless Systems Oy
+				P.O. BOX 120/BECKERINTIC 38
+				    
+				FI
+
+00-D0-E7   (hex)		VCON TELECOMMUNICATION LTD.
+00D0E7     (base 16)		VCON TELECOMMUNICATION LTD.
+				22 MASKIT STREET
+				    
+				IL
+
+00-D0-1B   (hex)		MIMAKI ENGINEERING CO., LTD.
+00D01B     (base 16)		MIMAKI ENGINEERING CO., LTD.
+				5-9-41 KITA SHINAGAWA
+				    
+				JP
+
+00-D0-0D   (hex)		MICROMERITICS INSTRUMENT
+00D00D     (base 16)		MICROMERITICS INSTRUMENT
+				CORPORATION
+				NORCROSS  GA  30093-1877
+				US
+
+00-D0-54   (hex)		SAS INSTITUTE INC.
+00D054     (base 16)		SAS INSTITUTE INC.
+				SAS CAMPUS DRIVE, R4
+				CARY  NC  27511
+				US
+
+00-D0-09   (hex)		HSING TECH. ENTERPRISE CO. LTD
+00D009     (base 16)		HSING TECH. ENTERPRISE CO. LTD
+				NO.2, LANE 128, SEC. 2
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-D0-F4   (hex)		CARINTHIAN TECH INSTITUTE
+00D0F4     (base 16)		CARINTHIAN TECH INSTITUTE
+				RICHARD-WAGNER STR. 19
+				    
+				AT
+
+00-D0-7D   (hex)		COSINE COMMUNICATIONS
+00D07D     (base 16)		COSINE COMMUNICATIONS
+				1200 BRIDGE PARKWAY
+				REDWOOD CITY  CA  94065
+				US
+
+00-D0-83   (hex)		INVERTEX, INC.
+00D083     (base 16)		INVERTEX, INC.
+				1012 MORSE AVENUE- STE.#9
+				SUNNYVALE  CA  94089
+				US
+
+00-D0-BA   (hex)		Cisco Systems, Inc
+00D0BA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-98   (hex)		Photon Dynamics Canada Inc.
+00D098     (base 16)		Photon Dynamics Canada Inc.
+				221 Whitehall Drive
+				    L3R 9T1
+				CA
+
+00-D0-BE   (hex)		EMUTEC INC.
+00D0BE     (base 16)		EMUTEC INC.
+				P.O. BOX 3035
+				EVERETT  WA  98203
+				US
+
+00-D0-92   (hex)		GLENAYRE WESTERN MULTIPLEX
+00D092     (base 16)		GLENAYRE WESTERN MULTIPLEX
+				1196 BORREGAS AVENUE
+				SUNNYVALE  CA  94089
+				US
+
+00-50-9D   (hex)		THE INDUSTREE B.V.
+00509D     (base 16)		THE INDUSTREE B.V.
+				P.O. BOX 462
+				  THE  
+				NL
+
+00-D0-B8   (hex)		Iomega Corporation
+00D0B8     (base 16)		Iomega Corporation
+				1821 West 4000 South
+				Roy  UT  84067
+				US
+
+00-50-CB   (hex)		JETTER
+0050CB     (base 16)		JETTER
+				GRAETERSTRASSE 2
+				    
+				DE
+
+00-50-58   (hex)		Sangoma Technologies
+005058     (base 16)		Sangoma Technologies
+				100 Renfrew Drive, Suite 100
+				Markham  ON  L3R 9R6
+				CA
+
+00-50-74   (hex)		ADVANCED HI-TECH CORP.
+005074     (base 16)		ADVANCED HI-TECH CORP.
+				1990 EAST GRAND AVE.
+				EL SEGUNDO  CA  90505
+				US
+
+00-50-0A   (hex)		IRIS TECHNOLOGIES, INC.
+00500A     (base 16)		IRIS TECHNOLOGIES, INC.
+				WESTMORELAND INDUSRIAL PARK
+				GREENSBURG  PA  15601
+				US
+
+00-50-6D   (hex)		VIDEOJET SYSTEMS
+00506D     (base 16)		VIDEOJET SYSTEMS
+				INTERNATIONAL INC.
+				WOODDALE  IL  60091-1073
+				US
+
+00-D0-C7   (hex)		PATHWAY, INC.
+00D0C7     (base 16)		PATHWAY, INC.
+				777 BETA DRIVE
+				MAYFIELD VILLAGE  OH  44143
+				US
+
+00-D0-7A   (hex)		AMAQUEST COMPUTER CORP.
+00D07A     (base 16)		AMAQUEST COMPUTER CORP.
+				8/F, 79 HSIN-TAI
+				  TAIWAN  R.O.C.
+				TW
+
+00-50-3F   (hex)		ANCHOR GAMES
+00503F     (base 16)		ANCHOR GAMES
+				815 PILOT ROAD - STE
+				LAS VEGAS  NV  89119
+				US
+
+00-50-32   (hex)		PICAZO COMMUNICATIONS, INC.
+005032     (base 16)		PICAZO COMMUNICATIONS, INC.
+				61 DAGGETT DRIVE
+				SAN JOSE  CA  95134
+				US
+
+00-D0-4A   (hex)		PRESENCE TECHNOLOGY GMBH
+00D04A     (base 16)		PRESENCE TECHNOLOGY GMBH
+				+ CO. KG
+				    
+				DE
+
+00-D0-74   (hex)		TAQUA SYSTEMS, INC.
+00D074     (base 16)		TAQUA SYSTEMS, INC.
+				1600 FALMOUTH RD. - STE
+				CENTERVILLE  MA  02632
+				US
+
+00-50-4D   (hex)		Tokyo Electron Device Limited
+00504D     (base 16)		Tokyo Electron Device Limited
+				1, Higashikata-machi, Tsuzuki-ku,
+				Yokohama-shi  Kanagawa-ken  
+				JP
+
+00-50-70   (hex)		CHAINTECH COMPUTER CO., LTD.
+005070     (base 16)		CHAINTECH COMPUTER CO., LTD.
+				5TH F, ALLEY 2, LANE 222
+				  TAIWAN  R.O.C.
+				TW
+
+00-50-23   (hex)		PG DESIGN ELECTRONICS, INC.
+005023     (base 16)		PG DESIGN ELECTRONICS, INC.
+				48700 STRUCTURAL DRIVE
+				CHESTERFIELD  MI  48051
+				US
+
+00-50-9E   (hex)		Les Technologies SoftAcoustik Inc.
+00509E     (base 16)		Les Technologies SoftAcoustik Inc.
+				
+				Quebec G1K  3P6    
+				CA
+
+00-50-71   (hex)		AIWA CO., LTD.
+005071     (base 16)		AIWA CO., LTD.
+				1-11, KAMITOMATSURI 4-CHOME
+				UTSUNOMIYA-SHI, TOCHIGI-KEN 320-85    
+				JP
+
+00-50-5F   (hex)		BRAND INNOVATORS
+00505F     (base 16)		BRAND INNOVATORS
+				Steenovenweg 5
+				Helmond    5708 HN
+				NL
+
+00-50-B4   (hex)		SATCHWELL CONTROL SYSTEMS, LTD
+0050B4     (base 16)		SATCHWELL CONTROL SYSTEMS, LTD
+				P.O. BOX 57,  94 FARNHAM ROAD
+				BERKSHIRE SL1 4UH    
+				GB
+
+00-50-D6   (hex)		ATLAS COPCO TOOLS AB
+0050D6     (base 16)		ATLAS COPCO TOOLS AB
+				
+				S-105 23 STOCKHOLM    
+				SE
+
+00-50-82   (hex)		FORESSON CORPORATION
+005082     (base 16)		FORESSON CORPORATION
+				3F, NO.9 SEC.1
+				TAIPEI 10404    
+				TW
+
+00-50-DF   (hex)		AirFiber, Inc.
+0050DF     (base 16)		AirFiber, Inc.
+				P.O. BOX 502148
+				SAN DIEGO  CA  92150-2148
+				US
+
+00-50-C5   (hex)		ADS Technologies, Inc
+0050C5     (base 16)		ADS Technologies, Inc
+				12627 Hiddencreek Way
+				Cerritos  CA  90703
+				US
+
+00-50-8E   (hex)		OPTIMATION, INC.
+00508E     (base 16)		OPTIMATION, INC.
+				P.O. BOX 14357
+				HUNTSVILLE  AL  35815
+				US
+
+00-50-28   (hex)		AVAL COMMUNICATIONS
+005028     (base 16)		AVAL COMMUNICATIONS
+				1777 NORTH CALIFORNIA BLVD.
+				WALNUT CREEK  CA  94596
+				US
+
+00-50-2F   (hex)		TollBridge Technologies, Inc.
+00502F     (base 16)		TollBridge Technologies, Inc.
+				872 HERMOSA DRIVE
+				SUNNYVALE  CA  94086
+				US
+
+00-50-FE   (hex)		PCTVnet ASA
+0050FE     (base 16)		PCTVnet ASA
+				STRANDVEILEN 50
+				N-1324 LYSAKER    
+				NO
+
+00-50-AB   (hex)		NALTEC, Inc.
+0050AB     (base 16)		NALTEC, Inc.
+				1-1-15, Nakanogo, Shimizu-ku
+				Shizuoka-shi  Shizuoka  424-0888
+				JP
+
+00-50-37   (hex)		KOGA ELECTRONICS CO.
+005037     (base 16)		KOGA ELECTRONICS CO.
+				5-8-10, TEHARA, RITTO-CHO
+				SHIGA, 420-3047    
+				JP
+
+00-50-A8   (hex)		OpenCon Systems, Inc.
+0050A8     (base 16)		OpenCon Systems, Inc.
+				377 HOES LANE
+				PISCATAWAY  NJ  08854
+				US
+
+00-50-9C   (hex)		BETA RESEARCH
+00509C     (base 16)		BETA RESEARCH
+				BETASTR. 1
+				85774 UNTERFOEHRING    
+				DE
+
+00-50-B1   (hex)		GIDDINGS & LEWIS
+0050B1     (base 16)		GIDDINGS & LEWIS
+				660 S. MILITARY RD.
+				FOND DU LAC  WI  54935
+				US
+
+00-50-06   (hex)		TAC AB
+005006     (base 16)		TAC AB
+				JAGERSHILLGATON 18
+				21375 MALMO    
+				SE
+
+00-50-09   (hex)		PHILIPS BROADBAND NETWORKS
+005009     (base 16)		PHILIPS BROADBAND NETWORKS
+				64 PERIMETER CENTRE EAST
+				ATLANTA  GA  30346
+				US
+
+00-50-30   (hex)		FUTURE PLUS SYSTEMS
+005030     (base 16)		FUTURE PLUS SYSTEMS
+				36 OLDE ENGLISH RD.
+				BEDFORD  NH  03110
+				US
+
+00-50-78   (hex)		MEGATON HOUSE, LTD.
+005078     (base 16)		MEGATON HOUSE, LTD.
+				ZIP: 224 NO.1-3-5 NAKAMACHIBAI
+				YOKOHAMA    
+				JP
+
+00-50-02   (hex)		OMNISEC AG
+005002     (base 16)		OMNISEC AG
+				RIETSTRASSE 14
+				CH-8108 DAELLIKON    
+				CH
+
+00-50-6A   (hex)		EDEVA, INC.
+00506A     (base 16)		EDEVA, INC.
+				298 S. SUNNYVALE AVE. - #208
+				SUNNYVALE  CA  94086
+				US
+
+00-50-AA   (hex)		KONICA MINOLTA HOLDINGS, INC.
+0050AA     (base 16)		KONICA MINOLTA HOLDINGS, INC.
+				1-6-1, Marunouchi,
+				Tokyo    100-0005
+				JP
+
+00-50-38   (hex)		DAIN TELECOM CO., LTD.
+005038     (base 16)		DAIN TELECOM CO., LTD.
+				2ND Flr., OH-SUNG BLDG. #2-28
+				YANGJAE-DONG, SEOCHO-GU  SEOUL  
+				KR
+
+00-50-B7   (hex)		BOSER TECHNOLOGY CO., LTD.
+0050B7     (base 16)		BOSER TECHNOLOGY CO., LTD.
+				15F-6, 77 HSIN TAI WU ROAD
+				TAIPEI HSIEN    
+				TW
+
+00-90-88   (hex)		BAXALL SECURITY LTD.
+009088     (base 16)		BAXALL SECURITY LTD.
+				UNIT 1 CASTLEHILL
+				STOCKPORT  Great Britain SK6 2SV  
+				GB
+
+00-90-6C   (hex)		Sartorius Hamburg GmbH
+00906C     (base 16)		Sartorius Hamburg GmbH
+				Meiendorferstraße 205
+				Hamburg    D-22145
+				DE
+
+00-90-A4   (hex)		ALTIGA NETWORKS
+0090A4     (base 16)		ALTIGA NETWORKS
+				124 GROVE STREET
+				FRANKLIN  MA  02038-3206
+				US
+
+00-90-F9   (hex)		Imagine Communications
+0090F9     (base 16)		Imagine Communications
+				3001 Dallas Parkway, Suite 300
+				Frisco  TX  75034
+				US
+
+00-90-89   (hex)		SOFTCOM MICROSYSTEMS, INC.
+009089     (base 16)		SOFTCOM MICROSYSTEMS, INC.
+				47509 SEABRIDGE DRIVE
+				FREMONT  CA  94538
+				US
+
+00-90-EE   (hex)		PERSONAL COMMUNICATIONS TECHNOLOGIES
+0090EE     (base 16)		PERSONAL COMMUNICATIONS TECHNOLOGIES
+				50 STILES ROAD
+				SALEM  NH  03079
+				US
+
+00-90-80   (hex)		NOT LIMITED, INC.
+009080     (base 16)		NOT LIMITED, INC.
+				500 ALLERTON STREET, STE #102
+				REDWOOD CITY  CA  94063
+				US
+
+00-90-E8   (hex)		MOXA TECHNOLOGIES CORP., LTD.
+0090E8     (base 16)		MOXA TECHNOLOGIES CORP., LTD.
+				7F, NO. 2, ALY6, LN 235
+				SHIENG-TIEN CITY  TAIPEI  
+				TW
+
+00-90-A1   (hex)		Flying Pig Systems/High End Systems Inc.
+0090A1     (base 16)		Flying Pig Systems/High End Systems Inc.
+				2105 Gracy Farms Lane
+				Austin  TX  78758
+				US
+
+00-90-79   (hex)		ClearOne, Inc.
+009079     (base 16)		ClearOne, Inc.
+				299 WASHINGTON STREET
+				WOBURN  MA  01801
+				US
+
+00-90-9A   (hex)		ONE WORLD SYSTEMS, INC.
+00909A     (base 16)		ONE WORLD SYSTEMS, INC.
+				1144 EAST ARQUES AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-90-C2   (hex)		JK microsystems, Inc.
+0090C2     (base 16)		JK microsystems, Inc.
+				1275 YUBA AVENUE
+				SAN PABLO  CA  94806
+				US
+
+00-50-D0   (hex)		MINERVA SYSTEMS
+0050D0     (base 16)		MINERVA SYSTEMS
+				1585 CHARLESTON ROAD
+				MOUNTAIN VIEW  CA  84943
+				US
+
+00-50-D8   (hex)		UNICORN COMPUTER CORP.
+0050D8     (base 16)		UNICORN COMPUTER CORP.
+				7 FL.,  NO. 96 KWANG FU NORTH ROAD
+				TAIPEI    
+				TW
+
+00-50-B2   (hex)		BRODEL GmbH
+0050B2     (base 16)		BRODEL GmbH
+				Distelbusch 24
+				Velbert  NRW  42549
+				DE
+
+00-90-76   (hex)		FMT AIRCRAFT GATE SUPPORT SYSTEMS AB
+009076     (base 16)		FMT AIRCRAFT GATE SUPPORT SYSTEMS AB
+				
+				SE-231 32 TRELLEBORG    
+				SE
+
+00-90-17   (hex)		Zypcom, Inc
+009017     (base 16)		Zypcom, Inc
+				28400 Kohoutek Way
+				Union City  CA  94587-1212
+				US
+
+00-90-49   (hex)		ENTRIDIA CORPORATION
+009049     (base 16)		ENTRIDIA CORPORATION
+				101 PARK CENTER PLAZA
+				SAN JOSE  CA  95113-2218
+				US
+
+00-90-E6   (hex)		ALi Corporation
+0090E6     (base 16)		ALi Corporation
+				6F, 246 NeiHu Road, Sec. 1
+				Taipei    114
+				TW
+
+00-90-70   (hex)		NEO NETWORKS, INC.
+009070     (base 16)		NEO NETWORKS, INC.
+				10300 BREN ROAD EAST
+				MINNETONKA  MN  55343
+				US
+
+00-90-30   (hex)		HONEYWELL-DATING
+009030     (base 16)		HONEYWELL-DATING
+				VIA TINTORETTO, 15
+				21012 CASSANO MAGNAGO (VA)    
+				IT
+
+00-90-08   (hex)		HanA Systems Inc.
+009008     (base 16)		HanA Systems Inc.
+				EAHO B/D 740-1
+				SEOUL    
+				KR
+
+00-90-AC   (hex)		OPTIVISION, INC.
+0090AC     (base 16)		OPTIVISION, INC.
+				3450 HILLVIEW AVENUE
+				PALO ALTO  CA  94304
+				US
+
+00-90-4E   (hex)		DELEM BV
+00904E     (base 16)		DELEM BV
+				LUCHTHAVEN WEG 42
+				5657 EB EINDHOVEN    
+				NL
+
+00-90-ED   (hex)		CENTRAL SYSTEM RESEARCH CO., LTD.
+0090ED     (base 16)		CENTRAL SYSTEM RESEARCH CO., LTD.
+				4-13-2 HIYOSHICHO
+				KOKUBUNJI-CITY  TOKYO 18500032  
+				JP
+
+00-90-1E   (hex)		Selesta Ingegneria S.p.A.
+00901E     (base 16)		Selesta Ingegneria S.p.A.
+				via di Francia, 28
+				Genova    16149
+				IT
+
+00-90-75   (hex)		NEC DO BRASIL S.A.
+009075     (base 16)		NEC DO BRASIL S.A.
+				RODOVIA PRESIDENTE DUTRA, KM 218
+				São Paulo-SP  CEP - 07210-902  
+				BR
+
+00-90-AD   (hex)		ASPECT ELECTRONICS, INC.
+0090AD     (base 16)		ASPECT ELECTRONICS, INC.
+				12740 EARHART AVE.
+				AUBURN  CA  95602
+				US
+
+00-90-01   (hex)		NISHIMU ELECTRONICS INDUSTRIES CO., LTD.
+009001     (base 16)		NISHIMU ELECTRONICS INDUSTRIES CO., LTD.
+				700 TATENO MITAGAWA-CHO
+				KANZAKI-GUN SAGA PREF.    
+				JP
+
+00-90-43   (hex)		Tattile SRL 
+009043     (base 16)		Tattile SRL 
+				1-13-10 SHIROGANE  CHUO-KU
+				FUKUOKA-CITY    
+				JP
+
+00-90-CB   (hex)		Wireless OnLine, Inc.
+0090CB     (base 16)		Wireless OnLine, Inc.
+				4410 EL CAMINO REAL,  STE #101
+				LOS ALTOS  CA  94022
+				US
+
+00-10-63   (hex)		STARGUIDE DIGITAL NETWORKS
+001063     (base 16)		STARGUIDE DIGITAL NETWORKS
+				5754 PACIFIC CENTER BLVD.
+				SAN DIEGO  CA  92121
+				US
+
+00-10-23   (hex)		Network Equipment Technologies
+001023     (base 16)		Network Equipment Technologies
+				6900 Paseo Padre Parkway
+				Freemont  CA  94555-3660
+				US
+
+00-10-2B   (hex)		UMAX DATA SYSTEMS, INC.
+00102B     (base 16)		UMAX DATA SYSTEMS, INC.
+				NO. 1-1, R&D ROAD 2
+				HSINCHU    
+				TW
+
+00-90-8A   (hex)		BAYLY COMMUNICATIONS, INC.
+00908A     (base 16)		BAYLY COMMUNICATIONS, INC.
+				105 GREEN COURT
+				AJAX  Ontario  L1S 6W9  
+				CA
+
+00-90-0E   (hex)		HANDLINK TECHNOLOGIES, INC.
+00900E     (base 16)		HANDLINK TECHNOLOGIES, INC.
+				5F, 24-2, Industry E. Road IV,
+				Hsinchu 30077    
+				TW
+
+00-90-C1   (hex)		Peco II, Inc.
+0090C1     (base 16)		Peco II, Inc.
+				7060 Huntley Road
+				Columbus  OH  43229
+				US
+
+00-10-8D   (hex)		Johnson Controls, Inc.
+00108D     (base 16)		Johnson Controls, Inc.
+				507 E. Michigan St.
+				Milwaukee  WI  53201
+				US
+
+00-10-45   (hex)		Nortel Networks
+001045     (base 16)		Nortel Networks
+				OPTera Solutions Division
+				Kanata  Ontario K2K-2X3  
+				CA
+
+00-10-7D   (hex)		AURORA COMMUNICATIONS, LTD.
+00107D     (base 16)		AURORA COMMUNICATIONS, LTD.
+				P.O. BOX 1942
+				NSW 2113    
+				AU
+
+00-90-E4   (hex)		NEC AMERICA, INC.
+0090E4     (base 16)		NEC AMERICA, INC.
+				3100 N.E. SHUTE ROAD
+				HILLSBORO  OR  97124
+				US
+
+00-90-40   (hex)		Siemens Network Convergence LLC
+009040     (base 16)		Siemens Network Convergence LLC
+				Ten Technology Park Drive
+				Westford  MA  01886-3146
+				US
+
+00-90-C8   (hex)		WAVERIDER COMMUNICATIONS (CANADA) INC.
+0090C8     (base 16)		WAVERIDER COMMUNICATIONS (CANADA) INC.
+				
+				  British Columbia V1E 4R9  
+				CA
+
+00-90-1B   (hex)		DIGITAL CONTROLS
+00901B     (base 16)		DIGITAL CONTROLS
+				305 PIONEER BLVD.
+				SPRINGBORO  OH  45066-1100
+				US
+
+00-90-F7   (hex)		NBASE COMMUNICATIONS LTD.
+0090F7     (base 16)		NBASE COMMUNICATIONS LTD.
+				INDUSTRIAL PARK
+				    
+				IL
+
+00-90-12   (hex)		GLOBESPAN SEMICONDUCTOR, INC.
+009012     (base 16)		GLOBESPAN SEMICONDUCTOR, INC.
+				100 SCHULZ DRIVE
+				RED BANK  NJ  07701
+				US
+
+00-90-B7   (hex)		DIGITAL LIGHTWAVE, INC.
+0090B7     (base 16)		DIGITAL LIGHTWAVE, INC.
+				601 CLEVELAND STREET- 5TH FL.
+				CLEARWATER  FL  33755
+				US
+
+00-90-A0   (hex)		8X8 INC.
+0090A0     (base 16)		8X8 INC.
+				2445 MISSION COLLEGE BLVD.
+				SANTA CLARA  CA  95054
+				US
+
+00-90-47   (hex)		GIGA FAST E. LTD.
+009047     (base 16)		GIGA FAST E. LTD.
+				14F, NO.112, SEC. 1
+				Hsi-Chih  Taipei Hsien  
+				TW
+
+00-90-E1   (hex)		TELENA S.P.A.
+0090E1     (base 16)		TELENA S.P.A.
+				VIA SAVONA, 146
+				20144 MILANO    
+				IT
+
+00-90-32   (hex)		PELCOMBE GROUP LTD.
+009032     (base 16)		PELCOMBE GROUP LTD.
+				MAIN ROAD
+				  ESSEX C012 4LP  
+				GB
+
+00-10-62   (hex)		NX SERVER, ILNC.
+001062     (base 16)		NX SERVER, ILNC.
+				5401 E. LA PALMA AVE.
+				ANAHEIM  CA  92807
+				US
+
+00-10-F0   (hex)		RITTAL-WERK RUDOLF LOH GmbH & Co.
+0010F0     (base 16)		RITTAL-WERK RUDOLF LOH GmbH & Co.
+				AUF DEM STUTZELBERG
+				D-35745 HERBORN    
+				DE
+
+00-10-01   (hex)		Citel
+001001     (base 16)		Citel
+				Loughborough Innovation Centre
+				Loughborough    LE11 3EH
+				GB
+
+00-10-5C   (hex)		QUANTUM DESIGNS (H.K.) LTD.
+00105C     (base 16)		QUANTUM DESIGNS (H.K.) LTD.
+				5/F., SOMERSET HOUSE, TAIKOO PLACE
+				QUARRY BAY    
+				HK
+
+00-10-CF   (hex)		FIBERLANE COMMUNICATIONS
+0010CF     (base 16)		FIBERLANE COMMUNICATIONS
+				1318 REDWOOD WAY, #200
+				PETALUMA  CA  94954
+				US
+
+00-10-69   (hex)		HELIOSS COMMUNICATIONS, INC.
+001069     (base 16)		HELIOSS COMMUNICATIONS, INC.
+				391 TOTTEM POND RD.- STE#303
+				WALTHAM  MA  02154
+				US
+
+00-10-BF   (hex)		InterAir Wireless
+0010BF     (base 16)		InterAir Wireless
+				485 CAYUGA ROAD
+				BUFFALO  NY  14225-0222
+				US
+
+00-10-26   (hex)		ACCELERATED NETWORKS, INC.
+001026     (base 16)		ACCELERATED NETWORKS, INC.
+				31238 VIA COLINAS, UNIT
+				WESTLAKE VILLAGE  CA  91362
+				US
+
+00-10-36   (hex)		INTER-TEL INTEGRATED SYSTEMS
+001036     (base 16)		INTER-TEL INTEGRATED SYSTEMS
+				7300 W. BOSTON STREET
+				CHANDLER  AZ  85226
+				US
+
+00-10-39   (hex)		Vectron Systems AG
+001039     (base 16)		Vectron Systems AG
+				Willy-Brandt-Weg 41
+				48155 Muenster    
+				DE
+
+00-10-B6   (hex)		ENTRATA COMMUNICATIONS CORP.
+0010B6     (base 16)		ENTRATA COMMUNICATIONS CORP.
+				574 HERITAGE RD.
+				SOUTHBURY  CT  06488
+				US
+
+00-10-59   (hex)		DIABLO RESEARCH CO. LLC
+001059     (base 16)		DIABLO RESEARCH CO. LLC
+				825 STEWART DRIVE
+				SUNNYVALE  CA  94086
+				US
+
+00-10-FC   (hex)		BROADBAND NETWORKS, INC.
+0010FC     (base 16)		BROADBAND NETWORKS, INC.
+				37 STEVENSON ROAD
+				WINNIPEG, MANITOBA R3H 0H9    
+				CA
+
+00-10-31   (hex)		OBJECTIVE COMMUNICATIONS, INC.
+001031     (base 16)		OBJECTIVE COMMUNICATIONS, INC.
+				75 ROCHESTER AVE.
+				PORTSMOUTH  NH  03801
+				US
+
+00-10-6D   (hex)		Axxcelera Broadband Wireless
+00106D     (base 16)		Axxcelera Broadband Wireless
+				1600 East Parham Road
+				Richmond  VA  23228
+				US
+
+00-10-4C   (hex)		Teledyne LeCroy, Inc
+00104C     (base 16)		Teledyne LeCroy, Inc
+				3385 Scott Blvd.
+				Santa Clara  CA  95054
+				US
+
+00-10-CC   (hex)		CLP COMPUTER LOGISTIK PLANUNG GmbH
+0010CC     (base 16)		CLP COMPUTER LOGISTIK PLANUNG GmbH
+				BASSERMANNSTR. 21
+				 D-81245 MUENCHEN    
+				DE
+
+00-10-30   (hex)		EION Inc.
+001030     (base 16)		EION Inc.
+				320 March Road
+				Ottawa  ON  K2K 2E3
+				CA
+
+00-10-D0   (hex)		WITCOM, LTD.
+0010D0     (base 16)		WITCOM, LTD.
+				P.O.B. 2250
+				HAIFA  31021    
+				IL
+
+00-10-93   (hex)		CMS COMPUTERS, LTD.
+001093     (base 16)		CMS COMPUTERS, LTD.
+				201 ARCADIA
+				MUMBAI 400 0021    
+				IN
+
+00-10-8F   (hex)		RAPTOR SYSTEMS
+00108F     (base 16)		RAPTOR SYSTEMS
+				69 HICKORY AVE.
+				WALTHAM  MA  02154
+				US
+
+00-10-A4   (hex)		XIRCOM
+0010A4     (base 16)		XIRCOM
+				2300 CORPORATE CENTER DR.
+				THOUSAND OAKS  CA  91320
+				US
+
+00-10-F1   (hex)		I-O CORPORATION
+0010F1     (base 16)		I-O CORPORATION
+				2256 SOUTH 3600 WEST
+				SALT LAKE CITY  UT  84119
+				US
+
+00-10-66   (hex)		ADVANCED CONTROL SYSTEMS, INC.
+001066     (base 16)		ADVANCED CONTROL SYSTEMS, INC.
+				2755 NORTHWOODS PARKWAY
+				NORCROSS  GA  30071
+				US
+
+00-10-AC   (hex)		IMCI TECHNOLOGIES
+0010AC     (base 16)		IMCI TECHNOLOGIES
+				8401 OLD COURT HKOUSE RD
+				VIENNA  VA  22182
+				US
+
+00-10-B1   (hex)		FOR-A CO., LTD.
+0010B1     (base 16)		FOR-A CO., LTD.
+				2-3-3 OOSAKU
+				CHIBA PREF. 285    
+				JP
+
+00-10-EE   (hex)		CTI PRODUCTS, INC.
+0010EE     (base 16)		CTI PRODUCTS, INC.
+				1211 W. SHARON RD.
+				CINCINNATI  OH  45240
+				US
+
+00-10-41   (hex)		BRISTOL BABCOCK, INC.
+001041     (base 16)		BRISTOL BABCOCK, INC.
+				1100 BUCKINGHAM STREET
+				WATERTOWN  CT  06795
+				US
+
+00-10-AA   (hex)		MEDIA4, INC.
+0010AA     (base 16)		MEDIA4, INC.
+				250 14TH ST. NW - STE #4002
+				ATLANTA  GA  30318
+				US
+
+00-10-E8   (hex)		TELOCITY, INCORPORATED
+0010E8     (base 16)		TELOCITY, INCORPORATED
+				992 SOUTH DE ANZA BLVD
+				SAN JOSE  CA  95129
+				US
+
+00-10-A2   (hex)		TNS
+0010A2     (base 16)		TNS
+				800 Third Street, Suite B100
+				HERNDON  VA  20170
+				US
+
+00-10-65   (hex)		RADYNE CORPORATION
+001065     (base 16)		RADYNE CORPORATION
+				5225 S. 37TH STREET
+				PHOENIX  AZ  85040
+				US
+
+00-10-9F   (hex)		PAVO, INC.
+00109F     (base 16)		PAVO, INC.
+				95 YESLER WAY
+				SEATTLE  WA  98104
+				US
+
+00-10-1D   (hex)		WINBOND ELECTRONICS CORP.
+00101D     (base 16)		WINBOND ELECTRONICS CORP.
+				NO. 4, CREATION RD. III
+				HSIN CHU    
+				TW
+
+00-10-84   (hex)		K-BOT COMMUNICATIONS
+001084     (base 16)		K-BOT COMMUNICATIONS
+				P.O. BOX 410
+				NORTON  MA  02766
+				US
+
+00-10-00   (hex)		CABLE TELEVISION LABORATORIES, INC.
+001000     (base 16)		CABLE TELEVISION LABORATORIES, INC.
+				858 Coal Creek Circle
+				Louisville  CO  80027
+				US
+
+00-10-09   (hex)		HORANET
+001009     (base 16)		HORANET
+				 ZI Route de Niort – BP 70328
+				FONTENAY LE COMTE CEDEX  VENDEE   85206
+				FR
+
+00-10-F8   (hex)		TEXIO TECHNOLOGY CORPORATION
+0010F8     (base 16)		TEXIO TECHNOLOGY CORPORATION
+				2-18-13 Shin Yokohama,
+				    222-0033
+				JP
+
+00-10-C0   (hex)		ARMA, Inc.
+0010C0     (base 16)		ARMA, Inc.
+				4851 Northshore Lane
+				North Little Rock  AR  72118
+				US
+
+00-10-5B   (hex)		NET INSIGHT AB
+00105B     (base 16)		NET INSIGHT AB
+				Västberga Allé 9
+				SE-1260  30 Hägersten  
+				SE
+
+00-10-02   (hex)		ACTIA
+001002     (base 16)		ACTIA
+				25 CHEMIN DE POUVOURVILLE
+				31432 TOULOUSE,  CEDEX 04    
+				FR
+
+00-10-EB   (hex)		SELSIUS SYSTEMS, INC.
+0010EB     (base 16)		SELSIUS SYSTEMS, INC.
+				5057 KELLER SPRINGS RD.
+				DALLAS  TX  75248
+				US
+
+00-10-57   (hex)		Rebel.com, Inc.
+001057     (base 16)		Rebel.com, Inc.
+				150 ISABELLA STREET--STE. 1000
+				OTTAWA, ONTARIO K1S 1V7    
+				CA
+
+00-10-F9   (hex)		UNIQUE SYSTEMS, INC.
+0010F9     (base 16)		UNIQUE SYSTEMS, INC.
+				181 DON PARK RD
+				MARKHAM, ONTARIO L3R 1C2    
+				CA
+
+00-10-75   (hex)		Segate Technology LLC
+001075     (base 16)		Segate Technology LLC
+				10200 S De Anza Blvd
+				Cupertino  CA  95014
+				US
+
+00-E0-03   (hex)		NOKIA WIRELESS BUSINESS COMMUN
+00E003     (base 16)		NOKIA WIRELESS BUSINESS COMMUN
+				ACCESS POINT PRODUCTS GROUP
+				CB4 0WS    
+				GB
+
+00-E0-F3   (hex)		WebSprint Communications, Inc.
+00E0F3     (base 16)		WebSprint Communications, Inc.
+				3026 SCOTT BLVD.
+				SANTA CLARA  CA  95054
+				US
+
+08-BB-CC   (hex)		AK-NORD EDV VERTRIEBSGES. mbH
+08BBCC     (base 16)		AK-NORD EDV VERTRIEBSGES. mbH
+				FRIEDRICHSTRASSE 10
+				25436 TORNESCH    
+				DE
+
+00-E0-DB   (hex)		ViaVideo Communications, Inc.
+00E0DB     (base 16)		ViaVideo Communications, Inc.
+				8900 SHOAL CREEK BLVD.
+				AUSTIN  TX  78757
+				US
+
+00-E0-A6   (hex)		TELOGY NETWORKS, INC.
+00E0A6     (base 16)		TELOGY NETWORKS, INC.
+				20250 CENTURY BLVD.
+				GERMANTOWN  MD  20874
+				US
+
+00-E0-9F   (hex)		PIXEL VISION
+00E09F     (base 16)		PIXEL VISION
+				43 NAGOG PARK
+				ACTON  MA  01720
+				US
+
+00-E0-CC   (hex)		HERO SYSTEMS, LTD.
+00E0CC     (base 16)		HERO SYSTEMS, LTD.
+				THE BARNES, COOMBELANDS LANE,
+				SURREY KT15 1HY  ENGLAND  
+				GB
+
+00-E0-80   (hex)		CONTROL RESOURCES CORPORATION
+00E080     (base 16)		CONTROL RESOURCES CORPORATION
+				16-00 POLLITT DRIVE
+				FAIR LAWN  NJ  07410
+				US
+
+00-E0-04   (hex)		PMC-SIERRA, INC.
+00E004     (base 16)		PMC-SIERRA, INC.
+				105-8555 BAXTER PLACE
+				BURNABY, BC V5A 4V7    
+				CA
+
+00-E0-3B   (hex)		PROMINET CORPORATION
+00E03B     (base 16)		PROMINET CORPORATION
+				110 TURNPIKE RD. - STE. #208
+				WESTBOROUGH  MA  01581
+				US
+
+00-E0-F5   (hex)		TELES AG
+00E0F5     (base 16)		TELES AG
+				DOVESTR. 2-4
+				10587 BERLIN    
+				DE
+
+00-E0-D7   (hex)		SUNSHINE ELECTRONICS, INC.
+00E0D7     (base 16)		SUNSHINE ELECTRONICS, INC.
+				46560 FREMONT BLVD. -STE. #113
+				FREMONT  CA  94538
+				US
+
+00-E0-B5   (hex)		ARDENT COMMUNICATIONS CORP.
+00E0B5     (base 16)		ARDENT COMMUNICATIONS CORP.
+				3801 ZANKER ROAD,  Suite A
+				SAN JOSE  CA  95134
+				US
+
+00-E0-68   (hex)		MERRIMAC SYSTEMS INC.
+00E068     (base 16)		MERRIMAC SYSTEMS INC.
+				2144 MC COY ROAD
+				CARROLLTON  TX  75006
+				US
+
+00-E0-49   (hex)		MICROWI ELECTRONIC GmbH
+00E049     (base 16)		MICROWI ELECTRONIC GmbH
+				ZUSAMSTRASSE 8
+				D 86165 AUGSBURG    
+				DE
+
+00-E0-95   (hex)		ADVANCED-VISION TECHNOLGIES CORP.
+00E095     (base 16)		ADVANCED-VISION TECHNOLGIES CORP.
+				8F-1, 87 SECTION 3, CHUNG YANG RD,
+				Tu Cheng  Taipei  
+				TW
+
+00-E0-0E   (hex)		AVALON IMAGING SYSTEMS, INC.
+00E00E     (base 16)		AVALON IMAGING SYSTEMS, INC.
+				3133 INDIAN ROAD
+				BOULDER  CO  80301
+				US
+
+00-E0-48   (hex)		SDL COMMUNICATIONS, INC.
+00E048     (base 16)		SDL COMMUNICATIONS, INC.
+				P.O. BOX 1303
+				EASTON  MA  02334
+				US
+
+00-E0-CB   (hex)		RESON, INC.
+00E0CB     (base 16)		RESON, INC.
+				300 LOPEZ ROAD
+				GOLETA  CA  93117
+				US
+
+00-E0-C8   (hex)		VIRTUAL ACCESS, LTD.
+00E0C8     (base 16)		VIRTUAL ACCESS, LTD.
+				WOODSIDE HOUSE, WINKFIELD,
+				WINDSOR, BERKSHIRE SL4 2DX  ENGLAND  
+				GB
+
+00-E0-06   (hex)		SILICON INTEGRATED SYS. CORP.
+00E006     (base 16)		SILICON INTEGRATED SYS. CORP.
+				16, CREATION RD. I
+				HSIN CHU    
+				TW
+
+00-E0-AC   (hex)		MIDSCO, INC.
+00E0AC     (base 16)		MIDSCO, INC.
+				710 ROUTE 46 EAST
+				FAIRFIELD  NJ  07004
+				US
+
+00-E0-08   (hex)		AMAZING CONTROLS! INC.
+00E008     (base 16)		AMAZING CONTROLS! INC.
+				1615 WYATT DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-E0-AE   (hex)		XAQTI CORPORATION
+00E0AE     (base 16)		XAQTI CORPORATION
+				 1630 OAKLAND RD. #A-214
+				SAN JOSE  CA  95131
+				US
+
+00-E0-E0   (hex)		SI ELECTRONICS, LTD.
+00E0E0     (base 16)		SI ELECTRONICS, LTD.
+				28-16, SHIMOMARUKO 2-CHOME,
+				TOKYO 146    
+				JP
+
+00-E0-50   (hex)		EXECUTONE INFORMATION SYSTEMS, INC.
+00E050     (base 16)		EXECUTONE INFORMATION SYSTEMS, INC.
+				478 WHEELERS FARMS ROAD
+				MILFORD  CT  06460
+				US
+
+00-E0-23   (hex)		TELRAD
+00E023     (base 16)		TELRAD
+				P.O. BOX 50
+				LOD 71100    
+				IL
+
+00-E0-2C   (hex)		AST COMPUTER
+00E02C     (base 16)		AST COMPUTER
+				16215 ALTON PARKWAY
+				IRVINE  CA  92718
+				US
+
+00-E0-67   (hex)		eac AUTOMATION-CONSULTING GmbH
+00E067     (base 16)		eac AUTOMATION-CONSULTING GmbH
+				HERMSDORFER DAMM 222
+				73467 BERLIN    
+				DE
+
+00-E0-FA   (hex)		TRL TECHNOLOGY, LTD.
+00E0FA     (base 16)		TRL TECHNOLOGY, LTD.
+				SHANNON WAY, ASHCHURCH,
+				TEWKESBURY, GLOS. GL20 8ND    
+				GB
+
+00-E0-2A   (hex)		TANDBERG TELEVISION AS
+00E02A     (base 16)		TANDBERG TELEVISION AS
+				PHILIP PEDERSENS V 20
+				N-1324 LYSAKER    
+				NO
+
+00-E0-4E   (hex)		SANYO DENKI CO., LTD.
+00E04E     (base 16)		SANYO DENKI CO., LTD.
+				812-3, Shimonogou, Ueda-Shi
+				Nagano    386-1211
+				JP
+
+00-E0-12   (hex)		PLUTO TECHNOLOGIES INTERNATIONAL INC.
+00E012     (base 16)		PLUTO TECHNOLOGIES INTERNATIONAL INC.
+				2511 55TH STREET
+				BOULDER  CO  80301
+				US
+
+00-E0-4C   (hex)		REALTEK SEMICONDUCTOR CORP.
+00E04C     (base 16)		REALTEK SEMICONDUCTOR CORP.
+				1F, NO. 11, INDUSTRY E. RD. IX
+				HSINCHU 300    
+				TW
+
+00-E0-51   (hex)		TALX CORPORATION
+00E051     (base 16)		TALX CORPORATION
+				1850 BORMAN COURT
+				ST. LOUIS  MO  63146
+				US
+
+00-60-6B   (hex)		Synclayer Inc.
+00606B     (base 16)		Synclayer Inc.
+				1-20 Himegaoka
+				GIFU 509-0249    
+				JP
+
+00-60-3B   (hex)		AMTEC spa
+00603B     (base 16)		AMTEC spa
+				LOC. S. MARTINO
+				53025 PIANCASTAGNAIO (SIENA)    
+				IT
+
+00-E0-39   (hex)		PARADYNE CORP.
+00E039     (base 16)		PARADYNE CORP.
+				8545 126TH AVENUE NORTH
+				LARGO  FL  33773
+				US
+
+00-60-0B   (hex)		LOGWARE GmbH
+00600B     (base 16)		LOGWARE GmbH
+				SCHWEDENSTR. 9
+				D-13359 BERLIN    
+				DE
+
+00-E0-C7   (hex)		EUROTECH SRL
+00E0C7     (base 16)		EUROTECH SRL
+				VIA JACOPO LINUSSIO 1
+				33030 AMAROO (UD)    
+				IT
+
+00-E0-AF   (hex)		GENERAL DYNAMICS INFORMATION SYSTEMS
+00E0AF     (base 16)		GENERAL DYNAMICS INFORMATION SYSTEMS
+				COMPUTING DEVICES, LTD.
+				FALLS CHURCH  VA  22042-4523
+				US
+
+00-E0-54   (hex)		KODAI HITEC CO., LTD.
+00E054     (base 16)		KODAI HITEC CO., LTD.
+				2-45 ONUMA HANYU CITY
+				SAITAMA.348    
+				JP
+
+00-E0-B9   (hex)		BYAS SYSTEMS
+00E0B9     (base 16)		BYAS SYSTEMS
+				2250 MONROE STREET,  #371
+				SANTA CLARA  CA  95050
+				US
+
+00-60-4B   (hex)		Safe-com GmbH & Co. KG
+00604B     (base 16)		Safe-com GmbH & Co. KG
+				Burg Lichtenfels 1
+				35104 Lichtenfels    
+				DE
+
+00-E0-EF   (hex)		DIONEX
+00E0EF     (base 16)		DIONEX
+				PO BOX 3603
+				SUNNYVALE  CA  94088-3603
+				US
+
+00-E0-2D   (hex)		InnoMediaLogic, Inc.
+00E02D     (base 16)		InnoMediaLogic, Inc.
+				3653 CHEMIN CHAMBLY
+				LONGUEUIL, QUEBEC J4L J4L    IN9
+				CA
+
+00-E0-35   (hex)		Artesyn Embedded Technologies
+00E035     (base 16)		Artesyn Embedded Technologies
+				2900 S. Diablo Way
+				Tempe  AZ  85282
+				US
+
+00-E0-90   (hex)		BECKMAN LAB. AUTOMATION DIV.
+00E090     (base 16)		BECKMAN LAB. AUTOMATION DIV.
+				90 BOROLINE ROAD
+				ALLENDALE  NJ  07401
+				US
+
+00-60-01   (hex)		InnoSys, Inc.
+006001     (base 16)		InnoSys, Inc.
+				3095 RICHMOND PKWY #207
+				RICHMOND  CA  94806
+				US
+
+00-60-FE   (hex)		LYNX SYSTEM DEVELOPERS, INC.
+0060FE     (base 16)		LYNX SYSTEM DEVELOPERS, INC.
+				175N NEW BOSTON STREET
+				WOBURN  MA  01801
+				US
+
+00-60-BD   (hex)		Enginuity Communications
+0060BD     (base 16)		Enginuity Communications
+				3545 Stern Avenue
+				St Charles  IL  60174
+				US
+
+00-08-00   (hex)		MULTITECH SYSTEMS, INC.
+000800     (base 16)		MULTITECH SYSTEMS, INC.
+				2205 WOODALE DRIVE
+				MOUNDS VIEW  MN  55112
+				US
+
+00-E0-85   (hex)		GLOBAL MAINTECH, INC.
+00E085     (base 16)		GLOBAL MAINTECH, INC.
+				6468 CITY WEST PARKWAY
+				EDEN PRAIRIE  MN  55344
+				US
+
+00-E0-BE   (hex)		GENROCO INTERNATIONAL, INC.
+00E0BE     (base 16)		GENROCO INTERNATIONAL, INC.
+				255 ENDERS COURT
+				SLINGER  WI  53086
+				US
+
+00-E0-B6   (hex)		Entrada Networks
+00E0B6     (base 16)		Entrada Networks
+				9020 JUNCTION DRIVE
+				ANNAPOLIS JUNCTION  MD  20701
+				US
+
+00-E0-F4   (hex)		INSIDE Technology A/S
+00E0F4     (base 16)		INSIDE Technology A/S
+				VENLIGHEDSVEJ 6
+				DK-2970 HOERSHOLM    
+				DK
+
+00-E0-A0   (hex)		WILTRON CO.
+00E0A0     (base 16)		WILTRON CO.
+				490 JARVIS DRIVE
+				MORGAN HILL  CA  95037
+				US
+
+00-E0-F1   (hex)		THAT CORPORATION
+00E0F1     (base 16)		THAT CORPORATION
+				734 FOREST STREET
+				MARLBOROUGH  MA  01752
+				US
+
+00-60-D5   (hex)		AMADA MIYACHI Co., Ltd
+0060D5     (base 16)		AMADA MIYACHI Co., Ltd
+				95-3, FUTASUZUKA NODA
+				CHIBA    278-0016
+				JP
+
+00-60-3F   (hex)		PATAPSCO DESIGNS
+00603F     (base 16)		PATAPSCO DESIGNS
+				5350 PARTNERS COURT
+				FREDERICK  MD  21703
+				US
+
+00-60-B5   (hex)		KEBA GmbH
+0060B5     (base 16)		KEBA GmbH
+				GEWERBEPARK URFAHR
+				A-4041 LINZ    
+				AT
+
+00-60-14   (hex)		EDEC CO., LTD.
+006014     (base 16)		EDEC CO., LTD.
+				9F OF T.O.C. BUILDING
+				SHINAGAWAKU,  TOKYO    
+				JP
+
+00-60-AC   (hex)		RESILIENCE CORPORATION
+0060AC     (base 16)		RESILIENCE CORPORATION
+				1755 EMBARCADERO ROAD-STE #120
+				PALO ALTO  CA  94303
+				US
+
+00-60-4E   (hex)		CYCLE COMPUTER CORPORATION, INC.
+00604E     (base 16)		CYCLE COMPUTER CORPORATION, INC.
+				20245 STEVENS CREEK BLVD.
+				CUPERTINO  CA  95014
+				US
+
+00-60-E1   (hex)		ORCKIT COMMUNICATIONS LTD.
+0060E1     (base 16)		ORCKIT COMMUNICATIONS LTD.
+				38 NAHALAT YIZHAK STREET
+				TEL-AVIV  67448    
+				IL
+
+00-60-D2   (hex)		LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD.
+0060D2     (base 16)		LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD.
+				#2, INNOVATION ROAD II
+				HSIN CHU    
+				TW
+
+00-60-42   (hex)		TKS (USA), INC.
+006042     (base 16)		TKS (USA), INC.
+				1201 COMMERCE
+				RICHARDSON  TX  75081
+				US
+
+00-60-79   (hex)		Mainstream Data, Inc.
+006079     (base 16)		Mainstream Data, Inc.
+				375 Chipeta Way, Suite B
+				Salt Lake City  UT  84108
+				US
+
+00-60-9A   (hex)		NJK TECHNO CO.
+00609A     (base 16)		NJK TECHNO CO.
+				N1-25 KAMIYASATO
+				KOMATSU  #923    
+				JP
+
+00-60-2B   (hex)		PEAK AUDIO
+00602B     (base 16)		PEAK AUDIO
+				1790 30TH STREET STE #414
+				BOULDER  CO  80301
+				US
+
+00-60-F1   (hex)		EXP COMPUTER, INC.
+0060F1     (base 16)		EXP COMPUTER, INC.
+				141 EILEEN WAY
+				SYOSSET  NY  11791
+				US
+
+00-60-E6   (hex)		SHOMITI SYSTEMS INCORPORATED
+0060E6     (base 16)		SHOMITI SYSTEMS INCORPORATED
+				2099 GATEWAY PLACE - STE.#220
+				SAN JOSE  CA  95110
+				US
+
+00-60-FF   (hex)		QuVis, Inc.
+0060FF     (base 16)		QuVis, Inc.
+				2921 SW WANAMAKER DRIVE
+				TOPEKA  KS  66614
+				US
+
+00-60-67   (hex)		ACER NETXUS INC.
+006067     (base 16)		ACER NETXUS INC.
+				5F-3, 5 HSIN ANN ROAD  SBIP
+				HSINCHU 300    
+				TJ
+
+00-60-9F   (hex)		PHAST CORPORATION
+00609F     (base 16)		PHAST CORPORATION
+				79 WEST 4500 SOUTH - BLDG.#14
+				SALT LAKE CITY  UT  84107
+				US
+
+00-60-40   (hex)		NETRO CORP.
+006040     (base 16)		NETRO CORP.
+				3120 SCOTT BLVD.
+				SANTA CLARA  CA  95054
+				US
+
+00-60-CC   (hex)		EMTRAK, INCORPORATED
+0060CC     (base 16)		EMTRAK, INCORPORATED
+				7150 CAMPUS DRIVE, STE #180
+				COLORADO SPRINGS  CO  80920
+				US
+
+00-60-2C   (hex)		LINX Data Terminals, Inc.
+00602C     (base 16)		LINX Data Terminals, Inc.
+				625 DIGITAL DRIVE-STE #100
+				PLANO  TX  75075
+				US
+
+00-60-7E   (hex)		GIGALABS, INC.
+00607E     (base 16)		GIGALABS, INC.
+				290 SANTA ANA COURT
+				SUNNYVALE  CA  94086
+				US
+
+00-60-CD   (hex)		VideoServer, Inc.
+0060CD     (base 16)		VideoServer, Inc.
+				5 FORBES ROAD
+				LEXINGTON  MA  02173
+				US
+
+00-60-AA   (hex)		INTELLIGENT DEVICES INC. (IDI)
+0060AA     (base 16)		INTELLIGENT DEVICES INC. (IDI)
+				1718-L BELMONT AVENUE
+				BALTIMORE  MD  21244
+				US
+
+00-60-25   (hex)		ACTIVE IMAGING PLC
+006025     (base 16)		ACTIVE IMAGING PLC
+				HATTORI HOUSE
+				MAIDENHEAD  Berkshire SL6 4UB  
+				GB
+
+00-60-A7   (hex)		MICROSENS GmbH & CO. KG
+0060A7     (base 16)		MICROSENS GmbH & CO. KG
+				Kueferstrasse 16
+				D-59067 Hamm    
+				DE
+
+00-05-A8   (hex)		WYLE ELECTRONICS
+0005A8     (base 16)		WYLE ELECTRONICS
+				3000 BOWERS AVENUE
+				SANTA CLARA  CA  95051-0919
+				US
+
+00-60-E5   (hex)		FUJI AUTOMATION CO., LTD.
+0060E5     (base 16)		FUJI AUTOMATION CO., LTD.
+				3-23-10, NEGISHI
+				URAWA-SHI, 336 SAITAMA    
+				US
+
+00-60-5E   (hex)		LIBERTY TECHNOLOGY NETWORKING
+00605E     (base 16)		LIBERTY TECHNOLOGY NETWORKING
+				P.O. BOX 11566
+				HATFIELD, PRETORIA 0028    
+				ZA
+
+00-60-C6   (hex)		DCS AG
+0060C6     (base 16)		DCS AG
+				SALZACHSTRASS 31
+				D-14129  BERLIN    
+				DE
+
+00-60-1E   (hex)		SOFTLAB, INC.
+00601E     (base 16)		SOFTLAB, INC.
+				P.O. BOX 8
+				CHIMNEY ROCK  CO  81127
+				US
+
+00-60-5D   (hex)		SCANIVALVE CORP.
+00605D     (base 16)		SCANIVALVE CORP.
+				1722 N. MADSON STREET
+				LIBERTY LAKE  WA  99019
+				US
+
+00-60-6F   (hex)		CLARION CORPORATION OF AMERICA
+00606F     (base 16)		CLARION CORPORATION OF AMERICA
+				25 Commerce Drive
+				Allendale  NJ  07401
+				US
+
+00-A0-10   (hex)		SYSLOGIC DATENTECHNIK AG
+00A010     (base 16)		SYSLOGIC DATENTECHNIK AG
+				Bruggerstrasse 69
+				CH-5400 Baden    
+				CH
+
+00-A0-59   (hex)		HAMILTON HALLMARK
+00A059     (base 16)		HAMILTON HALLMARK
+				2105 LUNDY AVENUE
+				SAN JOSE  CA  95131
+				US
+
+00-A0-39   (hex)		ROSS TECHNOLOGY, INC.
+00A039     (base 16)		ROSS TECHNOLOGY, INC.
+				5316 HWY 290 WEST - STE. #500
+				AUSTIN  TX  78735
+				US
+
+00-A0-AD   (hex)		MARCONI SPA
+00A0AD     (base 16)		MARCONI SPA
+				VIA NEGRONE, 1A
+				16153 GENOVA CORNIGLIANO    
+				IT
+
+00-A0-D6   (hex)		SBE, Inc.
+00A0D6     (base 16)		SBE, Inc.
+				4000 Executive Parkway
+				San Ramon  CA  94583
+				US
+
+00-A0-2E   (hex)		BRAND COMMUNICATIONS, LTD.
+00A02E     (base 16)		BRAND COMMUNICATIONS, LTD.
+				ENTERPRISE HOUSE, CHIVERS WAY,
+				HISTON, CAMBRIDGE CB4 4ZR    
+				GB
+
+00-60-4A   (hex)		SAIC IDEAS GROUP
+00604A     (base 16)		SAIC IDEAS GROUP
+				7120 COLUMBIA GATEWAY DRIVE
+				COLUMBIA  MD  21046
+				US
+
+00-A0-BD   (hex)		I-TECH CORP.
+00A0BD     (base 16)		I-TECH CORP.
+				10200 VALLEY VIEW ROAD
+				EDEN PRAIRIE  MN  55344
+				US
+
+00-60-90   (hex)		Artiza Networks Inc
+006090     (base 16)		Artiza Networks Inc
+				Faret Tachikawa Center Square, 2-36-2 Akebono-cho, 
+				Tachikawa-shi,  Tokyo   190-0012
+				JP
+
+00-60-0D   (hex)		Digital Logic GmbH
+00600D     (base 16)		Digital Logic GmbH
+				Stahlwerkstraße 25
+				Mudersbach    57555
+				DE
+
+00-60-30   (hex)		VILLAGE TRONIC ENTWICKLUNG
+006030     (base 16)		VILLAGE TRONIC ENTWICKLUNG
+				WELLWEG 95
+				31157 SARSTEDT    
+				DE
+
+00-A0-8D   (hex)		JACOMO CORPORATION
+00A08D     (base 16)		JACOMO CORPORATION
+				26900 E. PINK HILL ROAD
+				INDEPENDENCE  MO  64057
+				US
+
+00-A0-8E   (hex)		Check Point Software Technologies
+00A08E     (base 16)		Check Point Software Technologies
+				8333 Ridgepoint Dr.
+				Irving  TX  75063
+				US
+
+00-A0-FC   (hex)		IMAGE SCIENCES, INC.
+00A0FC     (base 16)		IMAGE SCIENCES, INC.
+				7500 INNOVATION WAY
+				MASON  OH  45040
+				US
+
+00-A0-9C   (hex)		Xyplex, Inc.
+00A09C     (base 16)		Xyplex, Inc.
+				25 FOSTER STREET
+				LITTLETON  MA  01460
+				US
+
+00-A0-0D   (hex)		THE PANDA PROJECT
+00A00D     (base 16)		THE PANDA PROJECT
+				5201 CONGRESS AVE. - C-100
+				BOCA RATON  FL  33487
+				US
+
+00-A0-E9   (hex)		ELECTRONIC RETAILING SYSTEMS INTERNATIONAL
+00A0E9     (base 16)		ELECTRONIC RETAILING SYSTEMS INTERNATIONAL
+				372 DANBURY ROAD
+				WILTON  CT  06897-2523
+				US
+
+00-A0-BE   (hex)		INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP
+00A0BE     (base 16)		INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP
+				1271 PARKMOOR AVENUE
+				SAN JOSE  CA  95126-3448
+				US
+
+00-A0-16   (hex)		MICROPOLIS CORP.
+00A016     (base 16)		MICROPOLIS CORP.
+				21211 NORDHOFF STREET
+				CHATSWORTH  CA  91311
+				US
+
+00-A0-48   (hex)		QUESTECH, LTD.
+00A048     (base 16)		QUESTECH, LTD.
+				EASTHEATH AVENUE
+				 BERKS, RG11 2PP    
+				GB
+
+00-A0-03   (hex)		Siemens Switzerland Ltd., I B T HVP
+00A003     (base 16)		Siemens Switzerland Ltd., I B T HVP
+				Building Technologies Division, International Headquarters
+				Zug    6301
+				CH
+
+00-A0-F9   (hex)		BINTEC COMMUNICATIONS GMBH
+00A0F9     (base 16)		BINTEC COMMUNICATIONS GMBH
+				SUEDWESTPARK 94
+				90449 NUERNBERG    
+				DE
+
+00-A0-F5   (hex)		RADGUARD LTD.
+00A0F5     (base 16)		RADGUARD LTD.
+				8 HANECHOSHET STREET
+				TEL-AVIV  69710    
+				IL
+
+00-A0-CA   (hex)		FUJITSU DENSO LTD.
+00A0CA     (base 16)		FUJITSU DENSO LTD.
+				3055 ORCHARD DRIVE
+				SAN JOSE  CA  95134
+				US
+
+00-A0-22   (hex)		CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING
+00A022     (base 16)		CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING
+				UNIVERSITY OF POONA CAMPUS
+				GANESH KHIND, Pune - 411 008    
+				IN
+
+00-A0-B6   (hex)		SANRITZ AUTOMATION CO., LTD.
+00A0B6     (base 16)		SANRITZ AUTOMATION CO., LTD.
+				4-21 MINAMI NARUSE
+				    
+				
+
+00-A0-79   (hex)		ALPS ELECTRIC (USA), INC.
+00A079     (base 16)		ALPS ELECTRIC (USA), INC.
+				3553 NORTH 1ST STREET
+				SAN JOSE  CA  95134
+				US
+
+00-A0-C0   (hex)		DIGITAL LINK CORP.
+00A0C0     (base 16)		DIGITAL LINK CORP.
+				217 HUMBOLDT COURT
+				SUNNYVALE  CA  94089
+				US
+
+00-A0-1E   (hex)		EST CORPORATION
+00A01E     (base 16)		EST CORPORATION
+				120 ROYALL STREET
+				CANTON  MA  02021
+				US
+
+00-A0-AE   (hex)		NUCOM SYSTEMS, INC.
+00A0AE     (base 16)		NUCOM SYSTEMS, INC.
+				9F-6, NO 4, LANE
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-A0-62   (hex)		AES PRODATA
+00A062     (base 16)		AES PRODATA
+				249 BALCATTA ROAD
+				WESTERN  AUSTRALIA  6021
+				AU
+
+00-A0-76   (hex)		CARDWARE LAB, INC.
+00A076     (base 16)		CARDWARE LAB, INC.
+				285 SOBRANTE WAY, STE.
+				SUNNYVALE  CA  94086
+				VI
+
+00-A0-A1   (hex)		EPIC DATA INC.
+00A0A1     (base 16)		EPIC DATA INC.
+				7280 RIVER ROAD
+				CANADA  V6X  1X5
+				
+
+00-A0-44   (hex)		NTT IT CO., LTD.
+00A044     (base 16)		NTT IT CO., LTD.
+				
+				  231  
+				JP
+
+00-A0-11   (hex)		MUTOH INDUSTRIES LTD.
+00A011     (base 16)		MUTOH INDUSTRIES LTD.
+				253 KANAGAWA-KEN,
+				    
+				JP
+
+00-A0-BA   (hex)		PATTON ELECTRONICS CO.
+00A0BA     (base 16)		PATTON ELECTRONICS CO.
+				7622 RICKENBACKER DRIVE
+				GAITHERSBURG  MD  20879
+				US
+
+00-A0-B5   (hex)		3H TECHNOLOGY
+00A0B5     (base 16)		3H TECHNOLOGY
+				3375 SCOTT BLVD. #336
+				SANTA CLARA  CA  95054
+				US
+
+00-A0-4D   (hex)		EDA INSTRUMENTS, INC.
+00A04D     (base 16)		EDA INSTRUMENTS, INC.
+				4 THORNCLIFFE PARK DRIVE
+				    M4H 1H1
+				CA
+
+00-A0-86   (hex)		AMBER WAVE SYSTEMS, INC.
+00A086     (base 16)		AMBER WAVE SYSTEMS, INC.
+				403 MASSACHUSETTS AVENUE
+				ACTON  MA  01720
+				US
+
+00-A0-AF   (hex)		WMS INDUSTRIES
+00A0AF     (base 16)		WMS INDUSTRIES
+				3401 N. CALIFORNIA
+				CHICAGO  IL  60618
+				US
+
+00-A0-57   (hex)		LANCOM Systems GmbH
+00A057     (base 16)		LANCOM Systems GmbH
+				Adenauer Straße 20 /B2
+				Würselen    52146
+				DE
+
+00-A0-30   (hex)		CAPTOR NV/SA
+00A030     (base 16)		CAPTOR NV/SA
+				DE HENE 13
+				    
+				BE
+
+00-A0-DE   (hex)		YAMAHA CORPORATION
+00A0DE     (base 16)		YAMAHA CORPORATION
+				10-1 Nakazawa-cho, Naka-ku
+				Hamamatsu  Shizuoka  430-8650
+				JP
+
+00-A0-84   (hex)		Dataplex Pty Ltd
+00A084     (base 16)		Dataplex Pty Ltd
+				Ground floor,
+				MACQUARIE PARK  NSW  2113
+				AU
+
+00-A0-49   (hex)		DIGITECH INDUSTRIES, INC.
+00A049     (base 16)		DIGITECH INDUSTRIES, INC.
+				PO BOX 2267
+				DANBURY  CT  06810
+				US
+
+00-A0-9D   (hex)		JOHNATHON FREEMAN TECHNOLOGIES
+00A09D     (base 16)		JOHNATHON FREEMAN TECHNOLOGIES
+				P.O. BOX 880114
+				SAN FRANCISCO  CA  94188
+				US
+
+00-A0-6B   (hex)		DMS DORSCH MIKROSYSTEM GMBH
+00A06B     (base 16)		DMS DORSCH MIKROSYSTEM GMBH
+				HOLMLUECK 13-15
+				    
+				DE
+
+00-A0-F8   (hex)		Zebra Technologies Inc
+00A0F8     (base 16)		Zebra Technologies Inc
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+00-A0-9F   (hex)		COMMVISION CORP.
+00A09F     (base 16)		COMMVISION CORP.
+				510 LOGUE AVE.
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-A0-6E   (hex)		AUSTRON, INC.
+00A06E     (base 16)		AUSTRON, INC.
+				P.O. BOX 14766
+				AUSTIN  TX  78761-4766
+				US
+
+00-20-22   (hex)		NMS Communications
+002022     (base 16)		NMS Communications
+				100 Crossing Boulevard
+				Framingham  MA  01702
+				US
+
+00-20-AE   (hex)		ORNET DATA COMMUNICATION TECH.
+0020AE     (base 16)		ORNET DATA COMMUNICATION TECH.
+				P.O. BOX 323
+				    
+				IL
+
+00-20-AA   (hex)		Ericsson Television Limited
+0020AA     (base 16)		Ericsson Television Limited
+				Solution Area Media
+				Comines Way, Hedge End  Southhampton  SO 30 4DA
+				GB
+
+00-20-A4   (hex)		MULTIPOINT NETWORKS
+0020A4     (base 16)		MULTIPOINT NETWORKS
+				19 DAVIS DRIVE
+				BELMONT  CA  94002-3001
+				US
+
+00-02-67   (hex)		NODE RUNNER, INC.
+000267     (base 16)		NODE RUNNER, INC.
+				2202 N. FORBES BLVD.
+				TUCSON  AZ  85745
+				US
+
+00-20-B1   (hex)		COMTECH RESEARCH INC.
+0020B1     (base 16)		COMTECH RESEARCH INC.
+				24271 TAHOE
+				LAGUNA NIGUEL  CA  92656
+				US
+
+00-20-32   (hex)		ALCATEL TAISEL
+002032     (base 16)		ALCATEL TAISEL
+				4, MING SHENG STREET TU-CHENG
+				  TAIWAN  ROC
+				TW
+
+00-20-E9   (hex)		DANTEL
+0020E9     (base 16)		DANTEL
+				P.O. BOX 55013
+				FRESNO  CA  93727-1388
+				US
+
+00-20-38   (hex)		VME MICROSYSTEMS INTERNATIONAL CORPORATION
+002038     (base 16)		VME MICROSYSTEMS INTERNATIONAL CORPORATION
+				12090 S. MEMORIAL PARKWAY
+				HUNTSVILLE  AL  35803
+				US
+
+00-20-A3   (hex)		Harmonic, Inc
+0020A3     (base 16)		Harmonic, Inc
+				4300 North First Street
+				San Jose  CA  95134
+				US
+
+00-20-59   (hex)		MIRO COMPUTER PRODUCTS AG
+002059     (base 16)		MIRO COMPUTER PRODUCTS AG
+				CARL MIELE STR. 4
+				D-38112 BRAUNSCHWEIG    
+				DE
+
+00-20-34   (hex)		ROTEC INDUSTRIEAUTOMATION GMBH
+002034     (base 16)		ROTEC INDUSTRIEAUTOMATION GMBH
+				GUTENBERGSTR. 15
+				    
+				DE
+
+00-20-79   (hex)		MIKRON GMBH
+002079     (base 16)		MIKRON GMBH
+				BRESLAUERSTR. 1-3
+				85386 ECHING    
+				DE
+
+00-20-05   (hex)		SIMPLE TECHNOLOGY
+002005     (base 16)		SIMPLE TECHNOLOGY
+				3001 DAIMLER ROAD
+				SANTA ANA  CA  92705
+				US
+
+00-20-18   (hex)		CIS TECHNOLOGY INC.
+002018     (base 16)		CIS TECHNOLOGY INC.
+				FL. 9-1, NO. 94, PAO CHUNG RD.
+				TAIPEI HSIEN    
+				TW
+
+00-20-98   (hex)		HECTRONIC AB
+002098     (base 16)		HECTRONIC AB
+				BOX 3002
+				S-75003 UPPSALA    
+				SE
+
+00-20-FD   (hex)		ITV TECHNOLOGIES, INC.
+0020FD     (base 16)		ITV TECHNOLOGIES, INC.
+				6800 OWENSMOUTH AVE.  #230
+				CANOGA PARK  CA  91303
+				US
+
+00-20-FA   (hex)		GDE SYSTEMS, INC.
+0020FA     (base 16)		GDE SYSTEMS, INC.
+				P.O. BOX 85468 - BLDG.#61
+				SAN DIEGO  CA  92186-5468
+				US
+
+00-20-C1   (hex)		SAXA, Inc.
+0020C1     (base 16)		SAXA, Inc.
+				NBF Platinum Tower 1-17-3 Shirokane
+				Tokyo    108-8050
+				JP
+
+00-20-80   (hex)		SYNERGY (UK) LTD.
+002080     (base 16)		SYNERGY (UK) LTD.
+				HARTCRAN HOUSE
+				WATFORD HERTS.  WD1 5EZ    
+				GB
+
+00-C0-23   (hex)		TUTANKHAMON ELECTRONICS
+00C023     (base 16)		TUTANKHAMON ELECTRONICS
+				2446 ESTAND WAY
+				PLEASANT HILL  CA  94523
+				US
+
+00-C0-8B   (hex)		RISQ MODULAR SYSTEMS, INC.
+00C08B     (base 16)		RISQ MODULAR SYSTEMS, INC.
+				39899 BALENTINE DRIVE-STE #375
+				NEWARK  CA  94560
+				US
+
+00-20-C4   (hex)		INET,INC.
+0020C4     (base 16)		INET,INC.
+				801 E. CAMPBELL-STE.#330
+				RICHARDSON  TX  75081
+				US
+
+00-20-74   (hex)		SUNGWOON SYSTEMS
+002074     (base 16)		SUNGWOON SYSTEMS
+				YUSUN BLDG.44-4
+				    KOREA
+				KR
+
+00-20-3C   (hex)		EUROTIME AB
+00203C     (base 16)		EUROTIME AB
+				BOX 277
+				    
+				SE
+
+00-20-28   (hex)		WEST EGG SYSTEMS, INC.
+002028     (base 16)		WEST EGG SYSTEMS, INC.
+				65 HIGH RIDGE ROAD-STE.#286
+				STAMFORD  CT  06905
+				US
+
+00-20-68   (hex)		ISDYNE
+002068     (base 16)		ISDYNE
+				11 ROXBURY AVENUE
+				NATICK  MA  01760
+				US
+
+00-20-C8   (hex)		LARSCOM INCORPORATED
+0020C8     (base 16)		LARSCOM INCORPORATED
+				4600 PATRICK HENRY DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-20-9D   (hex)		LIPPERT AUTOMATIONSTECHNIK
+00209D     (base 16)		LIPPERT AUTOMATIONSTECHNIK
+				D-68165 MANNHEIM
+				    
+				DE
+
+00-20-9C   (hex)		PRIMARY ACCESS CORP.
+00209C     (base 16)		PRIMARY ACCESS CORP.
+				10080 CARROLL CANYON RD
+				SAN DIEGO  CA  92131
+				US
+
+00-20-6D   (hex)		DATA RACE, INC.
+00206D     (base 16)		DATA RACE, INC.
+				11550 IH-10WEST  STE#395
+				SAN ANTONIO  TX  78230
+				US
+
+00-20-3A   (hex)		DIGITAL BI0METRICS INC.
+00203A     (base 16)		DIGITAL BI0METRICS INC.
+				5600 ROWLAND ROAD- STE.#205
+				MINNETONKA  MN  55364
+				US
+
+00-20-48   (hex)		Marconi Communications
+002048     (base 16)		Marconi Communications
+				1000 Fore Drive
+				Warrendale  PA  15086-7502
+				US
+
+00-20-DC   (hex)		DENSITRON TAIWAN LTD.
+0020DC     (base 16)		DENSITRON TAIWAN LTD.
+				KYOWA NANABANKAN 5F
+				    
+				JP
+
+00-20-0C   (hex)		ADASTRA SYSTEMS CORP.
+00200C     (base 16)		ADASTRA SYSTEMS CORP.
+				28310 INDUSTRIAL BLVD.-STE-K
+				HAYWARD  CA  94545
+				US
+
+00-20-11   (hex)		CANOPUS CO., LTD.
+002011     (base 16)		CANOPUS CO., LTD.
+				KOBE HI-TECH PARK
+				  651-22  
+				JP
+
+00-20-51   (hex)		Verilink Corporation
+002051     (base 16)		Verilink Corporation
+				127 Jetplex Circle
+				Madison  AL  35758
+				US
+
+00-20-3B   (hex)		WISDM LTD.
+00203B     (base 16)		WISDM LTD.
+				ST. JOHNS INNOVATION CENTRE
+				    ENGLAND
+				GB
+
+00-20-BA   (hex)		CENTER FOR HIGH PERFORMANCE
+0020BA     (base 16)		CENTER FOR HIGH PERFORMANCE
+				COMPUTING OF WPI
+				MARLBORO  MA  01752
+				US
+
+00-20-F5   (hex)		PANDATEL AG
+0020F5     (base 16)		PANDATEL AG
+				FASANENWEG 25
+				    
+				DE
+
+00-20-0E   (hex)		NSSLGlobal Technologies AS
+00200E     (base 16)		NSSLGlobal Technologies AS
+				Martin Linges vei 25
+				Fornebu    1364 
+				NO
+
+00-20-E7   (hex)		B&W NUCLEAR SERVICE COMPANY
+0020E7     (base 16)		B&W NUCLEAR SERVICE COMPANY
+				SPECIAL PRODUCTS & INTEG.SVCS.
+				LYNCHBURG  VA  24502
+				US
+
+00-20-F0   (hex)		UNIVERSAL MICROELECTRONICS CO.
+0020F0     (base 16)		UNIVERSAL MICROELECTRONICS CO.
+				3, 27TH RD., TAICHUNG IND.PARK
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-20-89   (hex)		T3PLUS NETWORKING, INC.
+002089     (base 16)		T3PLUS NETWORKING, INC.
+				2840 SAN TOMAS EXPRESSWAY
+				SANTA CLARA  CA  95051
+				US
+
+00-20-61   (hex)		GarrettCom, Inc.
+002061     (base 16)		GarrettCom, Inc.
+				47823 Westinghouse Dr.
+				Fremont  CA  94539
+				US
+
+00-C0-80   (hex)		NETSTAR, INC.
+00C080     (base 16)		NETSTAR, INC.
+				CEDAR BUSINESS CENTER
+				MINNEAPOLIS  MN  55425-1235
+				US
+
+00-C0-B4   (hex)		MYSON TECHNOLOGY, INC.
+00C0B4     (base 16)		MYSON TECHNOLOGY, INC.
+				2F, NO. 3, INDUSTRY E. RD.IV
+				    TAIWAN
+				TW
+
+00-C0-45   (hex)		ISOLATION SYSTEMS, LTD.
+00C045     (base 16)		ISOLATION SYSTEMS, LTD.
+				26 SIX POINT ROAD
+				CANADA  M8Z  2W9
+				CA
+
+00-70-B3   (hex)		DATA RECALL LTD.
+0070B3     (base 16)		DATA RECALL LTD.
+				SONDES PLACE
+				  UNITED  KINGDOM
+				GB
+
+00-70-B0   (hex)		M/A-COM INC. COMPANIES
+0070B0     (base 16)		M/A-COM INC. COMPANIES
+				11717 EXPLORATION LANE
+				GERMANTOWN  MD  20767
+				US
+
+00-E6-D3   (hex)		NIXDORF COMPUTER CORP.
+00E6D3     (base 16)		NIXDORF COMPUTER CORP.
+				2520 MISSION COLLEGE ROAD
+				SANTA CLARA  CA  95054
+				US
+
+00-C0-C3   (hex)		ACUSON COMPUTED SONOGRAPHY
+00C0C3     (base 16)		ACUSON COMPUTED SONOGRAPHY
+				1220 CHARLESTON ROAD
+				MOUNTAIN VIEW  CA  94039-7393
+				US
+
+00-C0-B3   (hex)		COMSTAT DATACOMM CORPORATION
+00C0B3     (base 16)		COMSTAT DATACOMM CORPORATION
+				1720 SPECTRUM DRIVE
+				LAWRENCEVILLE  GA  30243
+				US
+
+00-C0-E5   (hex)		GESPAC, S.A.
+00C0E5     (base 16)		GESPAC, S.A.
+				CHEMIN DES AULX 18
+				    
+				CH
+
+00-C0-4D   (hex)		MITEC, INC.
+00C04D     (base 16)		MITEC, INC.
+				BR-KAMEIDO 1 BUILDING
+				    
+				JP
+
+00-C0-47   (hex)		UNIMICRO SYSTEMS, INC.
+00C047     (base 16)		UNIMICRO SYSTEMS, INC.
+				44382 S. GRIMMER BLVD.
+				FREMONT  CA  94538
+				US
+
+00-C0-84   (hex)		DATA LINK CORP. LTD.
+00C084     (base 16)		DATA LINK CORP. LTD.
+				3-15-3 MIDORICHO
+				    
+				JP
+
+00-C0-41   (hex)		DIGITAL TRANSMISSION SYSTEMS
+00C041     (base 16)		DIGITAL TRANSMISSION SYSTEMS
+				4830 RIVER GREEN PARKWAY
+				DULUTH  GA  30136
+				US
+
+00-C0-1F   (hex)		S.E.R.C.E.L.
+00C01F     (base 16)		S.E.R.C.E.L.
+				B.P. 439
+				    
+				FR
+
+00-60-86   (hex)		LOGIC REPLACEMENT TECH. LTD.
+006086     (base 16)		LOGIC REPLACEMENT TECH. LTD.
+				14 ARKWRIGHT ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-C0-59   (hex)		DENSO CORPORATION
+00C059     (base 16)		DENSO CORPORATION
+				1-1, Showa-cho,
+				Kariya-shi,  Aichi  448-8661
+				JP
+
+00-C0-F1   (hex)		SHINKO ELECTRIC CO., LTD.
+00C0F1     (base 16)		SHINKO ELECTRIC CO., LTD.
+				COMPUTER SYSTEM DIVISION
+				  JAPAN  441-31
+				JP
+
+00-C0-A1   (hex)		TOKYO DENSHI SEKEI CO.
+00C0A1     (base 16)		TOKYO DENSHI SEKEI CO.
+				255-1 RENKOJI, TAMA-SHI
+				  JAPAN  206
+				JP
+
+00-C0-2E   (hex)		NETWIZ
+00C02E     (base 16)		NETWIZ
+				26 GOLOMB STREET
+				    
+				IL
+
+00-C0-0D   (hex)		ADVANCED LOGIC RESEARCH, INC.
+00C00D     (base 16)		ADVANCED LOGIC RESEARCH, INC.
+				9401 JERONIMO
+				IRVINE  CA  92618
+				US
+
+00-C0-81   (hex)		METRODATA LTD.
+00C081     (base 16)		METRODATA LTD.
+				BLENHEIM HOUSE
+				TW20 8RY  TW20 8RY  ENGLAND
+				GB
+
+00-C0-3B   (hex)		MULTIACCESS COMPUTING CORP.
+00C03B     (base 16)		MULTIACCESS COMPUTING CORP.
+				5350 HOLLISTER AVE., STE.
+				SANTA BARBARA  CA  93111
+				US
+
+00-C0-82   (hex)		MOORE PRODUCTS CO.
+00C082     (base 16)		MOORE PRODUCTS CO.
+				SUMNEYTOWN PIKE
+				SPRING HOUSE  PA  19477
+				US
+
+00-C0-99   (hex)		YOSHIKI INDUSTRIAL CO.,LTD.
+00C099     (base 16)		YOSHIKI INDUSTRIAL CO.,LTD.
+				1-38 MATSUGASAKI 2-CHOME
+				  992  
+				JP
+
+00-C0-01   (hex)		DIATEK PATIENT MANAGMENT
+00C001     (base 16)		DIATEK PATIENT MANAGMENT
+				SYSTEMS, INC.
+				SAN DIEGO  CA  92121-1723
+				US
+
+00-C0-F4   (hex)		INTERLINK SYSTEM CO., LTD.
+00C0F4     (base 16)		INTERLINK SYSTEM CO., LTD.
+				INTERLINK B/D, 476-20
+				    KOREA
+				KR
+
+00-C0-E2   (hex)		CALCOMP, INC.
+00C0E2     (base 16)		CALCOMP, INC.
+				2411 W. LAPALMA AVENUE
+				ANAHEIM  CA  92803-3250
+				US
+
+00-C0-7B   (hex)		ASCEND COMMUNICATIONS, INC.
+00C07B     (base 16)		ASCEND COMMUNICATIONS, INC.
+				1701 HARBOR BAY PARKWAY
+				ALAMEDA  CA  94502
+				US
+
+00-C0-3C   (hex)		TOWER TECH S.R.L.
+00C03C     (base 16)		TOWER TECH S.R.L.
+				VIA RIDOLFI 6,8
+				    
+				IT
+
+00-C0-1D   (hex)		GRAND JUNCTION NETWORKS, INC.
+00C01D     (base 16)		GRAND JUNCTION NETWORKS, INC.
+				3101 WHIPPLE RD., #27
+				UNION CITY  CA  94587
+				US
+
+00-C0-35   (hex)		QUINTAR COMPANY
+00C035     (base 16)		QUINTAR COMPANY
+				370 AMAPOLA AVE., STE.#106
+				TORRANCE  CA  90501
+				US
+
+00-C0-70   (hex)		SECTRA SECURE-TRANSMISSION AB
+00C070     (base 16)		SECTRA SECURE-TRANSMISSION AB
+				TEKNIKRINGEN 2
+				    
+				SE
+
+00-C0-6D   (hex)		BOCA RESEARCH, INC.
+00C06D     (base 16)		BOCA RESEARCH, INC.
+				6401 CONGRESS AVENUE
+				BOCA RATON  FL  33487
+				US
+
+00-C0-EA   (hex)		ARRAY TECHNOLOGY LTD.
+00C0EA     (base 16)		ARRAY TECHNOLOGY LTD.
+				145 FRIMLEY ROAD
+				ENGLAND  GU15  2PS
+				GB
+
+00-C0-09   (hex)		KT TECHNOLOGY (S) PTE LTD
+00C009     (base 16)		KT TECHNOLOGY (S) PTE LTD
+				KT BUILDING
+				  SINGAPORE  0511
+				SG
+
+00-C0-D6   (hex)		J1 SYSTEMS, INC.
+00C0D6     (base 16)		J1 SYSTEMS, INC.
+				3 DUNWOODY PARK-STE.#103
+				ATLANTA  GA  30338
+				US
+
+00-C0-DC   (hex)		EOS TECHNOLOGIES, INC.
+00C0DC     (base 16)		EOS TECHNOLOGIES, INC.
+				3945 FREEDOM CIRCLE, STE.#770
+				SANTA CLARA  CA  95054
+				US
+
+00-C0-72   (hex)		KNX LTD.
+00C072     (base 16)		KNX LTD.
+				HOLLINGWOOD HOUSE
+				LS21 3HA  UNITED  KINGDOM
+				GB
+
+00-C0-AE   (hex)		TOWERCOM CO. INC. DBA PC HOUSE
+00C0AE     (base 16)		TOWERCOM CO. INC. DBA PC HOUSE
+				841 E. ARTESIA BLVD.
+				CARSON  CA  90746
+				US
+
+00-C0-C2   (hex)		INFINITE NETWORKS LTD.
+00C0C2     (base 16)		INFINITE NETWORKS LTD.
+				19 BROOKSIDE ROAD, OXHEY
+				  UNITED  KINGDOM
+				GB
+
+00-C0-AF   (hex)		TEKLOGIX INC.
+00C0AF     (base 16)		TEKLOGIX INC.
+				2100 MEADOWVALE BOULEVARD
+				CANADA  L5N  7J9
+				CA
+
+00-C0-7A   (hex)		PRIVA B.V.
+00C07A     (base 16)		PRIVA B.V.
+				P.O. BOX 18
+				    
+				NL
+
+00-C0-F6   (hex)		CELAN TECHNOLOGY INC.
+00C0F6     (base 16)		CELAN TECHNOLOGY INC.
+				NO. 101, MIN-HSIANG ST.
+				TAIWAN  TAIWAN  R.O.C.
+				CN
+
+00-C0-F8   (hex)		ABOUT COMPUTING INC.
+00C0F8     (base 16)		ABOUT COMPUTING INC.
+				P.O. BOX 172
+				BELMONT  MA  02178
+				US
+
+00-C0-78   (hex)		COMPUTER SYSTEMS ENGINEERING
+00C078     (base 16)		COMPUTER SYSTEMS ENGINEERING
+				46791 FREMONT BLVD.
+				FREMONT  CA  94538
+				US
+
+00-C0-9A   (hex)		PHOTONICS CORPORATION
+00C09A     (base 16)		PHOTONICS CORPORATION
+				2940 NORTH FIRST STREET
+				SAN JOSE  CA  95123-2021
+				US
+
+00-C0-1A   (hex)		COROMETRICS MEDICAL SYSTEMS
+00C01A     (base 16)		COROMETRICS MEDICAL SYSTEMS
+				61 BARNES PARK ROAD NORTH
+				WALLINGFORD  CT  06492-0333
+				US
+
+00-C0-68   (hex)		HME Clear-Com LTD.
+00C068     (base 16)		HME Clear-Com LTD.
+				7400 Beach Drive
+				Cambridgeshire    CB25 9TP
+				GB
+
+00-C0-D8   (hex)		UNIVERSAL DATA SYSTEMS
+00C0D8     (base 16)		UNIVERSAL DATA SYSTEMS
+				5000 BRADFORD DRIVE
+				HUNTSVILLE  AL  35805-1993
+				US
+
+00-40-16   (hex)		ADC - Global Connectivity Solutions Division
+004016     (base 16)		ADC - Global Connectivity Solutions Division
+				P.O. Box 1101
+				Minneapolis  MN  55440-1101
+				US
+
+00-40-6A   (hex)		KENTEK INFORMATION SYSTEMS,INC
+00406A     (base 16)		KENTEK INFORMATION SYSTEMS,INC
+				2945 WILDERNESS PLACE
+				BOULDER  CO  80301
+				US
+
+00-40-0A   (hex)		PIVOTAL TECHNOLOGIES, INC.
+00400A     (base 16)		PIVOTAL TECHNOLOGIES, INC.
+				100 W. RINCON AVENUE-STE #211
+				CAMPBELL  CA  95008
+				US
+
+00-40-99   (hex)		NEWGEN SYSTEMS CORP.
+004099     (base 16)		NEWGEN SYSTEMS CORP.
+				17580 NEWHOPE STREET
+				FOUNTAIN VALLEY  CA  92708
+				US
+
+00-40-11   (hex)		ANDOVER CONTROLS CORPORATION
+004011     (base 16)		ANDOVER CONTROLS CORPORATION
+				300 BRICKSTONE SQUARE
+				ANDOVER  MA  01810
+				US
+
+00-40-A1   (hex)		ERGO COMPUTING
+0040A1     (base 16)		ERGO COMPUTING
+				ONE INTERCONTINENTAL WAY
+				PEABODY  MA  01960
+				US
+
+00-40-81   (hex)		MANNESMANN SCANGRAPHIC GMBH
+004081     (base 16)		MANNESMANN SCANGRAPHIC GMBH
+				RISSENER STRASSE 112-114
+				    
+				DE
+
+00-C0-8C   (hex)		PERFORMANCE TECHNOLOGIES, INC.
+00C08C     (base 16)		PERFORMANCE TECHNOLOGIES, INC.
+				315 SCIENCE PARKWAY
+				ROCHESTER  NY  14620
+				US
+
+00-C0-07   (hex)		PINNACLE DATA SYSTEMS, INC.
+00C007     (base 16)		PINNACLE DATA SYSTEMS, INC.
+				1350 WEST FIFTH AVENUE
+				COLUMBUS  OH  43212
+				US
+
+00-C0-98   (hex)		CHUNTEX ELECTRONIC CO., LTD.
+00C098     (base 16)		CHUNTEX ELECTRONIC CO., LTD.
+				6F., NO.2, ALLEY 6, LANE 235
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-C0-BE   (hex)		ALCATEL - SEL
+00C0BE     (base 16)		ALCATEL - SEL
+				LORENZ STR
+				    
+				DE
+
+00-C0-6E   (hex)		HAFT TECHNOLOGY, INC.
+00C06E     (base 16)		HAFT TECHNOLOGY, INC.
+				DAINI-DOHO BLDG.
+				  305  
+				JP
+
+00-C0-8A   (hex)		Lauterbach GmbH
+00C08A     (base 16)		Lauterbach GmbH
+				Altlaufstraße 40
+				  Höhenkirchen-Siegertsbrunn  85635
+				DE
+
+00-C0-F7   (hex)		ENGAGE COMMUNICATION, INC.
+00C0F7     (base 16)		ENGAGE COMMUNICATION, INC.
+				9053 SOQUEL DRIVE
+				APTOS  CA  95003-4034
+				US
+
+00-40-B7   (hex)		STEALTH COMPUTER SYSTEMS
+0040B7     (base 16)		STEALTH COMPUTER SYSTEMS
+				2341 REGINA CT.
+				SANTA CLARA  CA  95054
+				US
+
+00-40-AC   (hex)		SUPER WORKSTATION, INC.
+0040AC     (base 16)		SUPER WORKSTATION, INC.
+				2190 PARAGON DRIVE
+				SAN JOSE  CA  95131
+				US
+
+10-00-5A   (hex)		IBM Corp
+10005A     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-40-D1   (hex)		FUKUDA DENSHI CO., LTD.
+0040D1     (base 16)		FUKUDA DENSHI CO., LTD.
+				R & D DEPARTMENT NO. 1
+				    
+				JP
+
+00-40-69   (hex)		LEMCOM SYSTEMS, INC.
+004069     (base 16)		LEMCOM SYSTEMS, INC.
+				2104 WEST PEORIA AVENUE
+				PHOENIX  AZ  85029
+				US
+
+00-40-3B   (hex)		SYNERJET INTERNATIONAL CORP.
+00403B     (base 16)		SYNERJET INTERNATIONAL CORP.
+				5F, NO 35, KUANG FU S. ROAD
+				TAIWAN  R.  O. C.
+				TW
+
+00-80-3B   (hex)		APT COMMUNICATIONS, INC.
+00803B     (base 16)		APT COMMUNICATIONS, INC.
+				9607 DR. PERRY ROAD
+				IJAMSVILLE  MD  21754
+				US
+
+00-80-6A   (hex)		ERI (EMPAC RESEARCH INC.)
+00806A     (base 16)		ERI (EMPAC RESEARCH INC.)
+				47560 SEABRIDGE DRIVE
+				FREMONT  CA  94538
+				US
+
+00-C0-A8   (hex)		GVC CORPORATION
+00C0A8     (base 16)		GVC CORPORATION
+				1961 CONCOURSE DRIVE-STE
+				SAN JOSE  CA  95131
+				US
+
+00-40-E0   (hex)		ATOMWIDE LTD.
+0040E0     (base 16)		ATOMWIDE LTD.
+				23 THE GREENWAY
+				  UNITED  KINGDOM
+				GB
+
+00-40-A8   (hex)		IMF INTERNATIONAL LTD.
+0040A8     (base 16)		IMF INTERNATIONAL LTD.
+				NO.5 2/F KINGSFORD IND. CENTRE
+				  HONG  KONG
+				HK
+
+00-40-70   (hex)		INTERWARE CO., LTD.
+004070     (base 16)		INTERWARE CO., LTD.
+				7F KUDAN NEW CENTRAL BLDG.,
+				TOKYO 102  TOKYO 102  
+				JP
+
+00-40-8A   (hex)		TPS TELEPROCESSING SYS. GMBH
+00408A     (base 16)		TPS TELEPROCESSING SYS. GMBH
+				SCHWADERMUCHLSTRASSE 4-8
+				    
+				DE
+
+00-40-FD   (hex)		LXE
+0040FD     (base 16)		LXE
+				303 RESEARCH DRIVE
+				NORCROSS  GA  30092
+				US
+
+00-40-3F   (hex)		SSANGYONG COMPUTER SYSTEMS
+00403F     (base 16)		SSANGYONG COMPUTER SYSTEMS
+				CORPORATION
+				  KOREA  100-705
+				KR
+
+00-40-82   (hex)		LABORATORY EQUIPMENT CORP.
+004082     (base 16)		LABORATORY EQUIPMENT CORP.
+				1-7-3 MINATOMACHI
+				  300  
+				JP
+
+00-40-F1   (hex)		CHUO ELECTRONICS CO., LTD.
+0040F1     (base 16)		CHUO ELECTRONICS CO., LTD.
+				1-9-9, MOTOHONGO-CHO
+				    
+				JP
+
+00-40-A9   (hex)		DATACOM INC.
+0040A9     (base 16)		DATACOM INC.
+				146 HIGHWAY ROUTE 34 - STE 250
+				HOLMDEL  NJ  07733
+				US
+
+00-40-E3   (hex)		QUIN SYSTEMS LTD
+0040E3     (base 16)		QUIN SYSTEMS LTD
+				OAKLANDS BUSINESS CENTRE
+				  UNITED  KINGDOM
+				GB
+
+00-40-91   (hex)		PROCOMP INDUSTRIA ELETRONICA
+004091     (base 16)		PROCOMP INDUSTRIA ELETRONICA
+				AV. KENKITI SIMOMOTO, 767
+				    
+				BR
+
+00-40-EA   (hex)		PLAIN TREE SYSTEMS INC
+0040EA     (base 16)		PLAIN TREE SYSTEMS INC
+				CHIEF EXECTUVIE OFFICER
+				    
+				CA
+
+00-40-A7   (hex)		ITAUTEC PHILCO S.A.
+0040A7     (base 16)		ITAUTEC PHILCO S.A.
+				GRUPO ITAUTEC PHILCO
+				    
+				BR
+
+00-40-64   (hex)		KLA INSTRUMENTS CORPORATION
+004064     (base 16)		KLA INSTRUMENTS CORPORATION
+				160 RIO ROBLES
+				SAN JOSE  CA  95161-9055
+				US
+
+00-40-43   (hex)		Nokia Siemens Networks GmbH & Co. KG.
+004043     (base 16)		Nokia Siemens Networks GmbH & Co. KG.
+				Werner-von-Siemens Straße 2-6
+				Bruchsal  Baden-Württemberg  76646
+				DE
+
+00-40-5A   (hex)		GOLDSTAR INFORMATION & COMM.
+00405A     (base 16)		GOLDSTAR INFORMATION & COMM.
+				533, HOGAE-DONG, ANYANG-SHI
+				    KOREA
+				KR
+
+00-40-13   (hex)		NTT DATA COMM. SYSTEMS CORP.
+004013     (base 16)		NTT DATA COMM. SYSTEMS CORP.
+				DEVELOPMENT HEADQUARTERS
+				TOKYO 135  TOKYO 135  
+				JP
+
+00-40-0C   (hex)		GENERAL MICRO SYSTEMS, INC.
+00400C     (base 16)		GENERAL MICRO SYSTEMS, INC.
+				P.O. BOX 3689
+				RANCHO CUCAMONGA  CA  91729
+				US
+
+00-40-5E   (hex)		NORTH HILLS ISRAEL
+00405E     (base 16)		NORTH HILLS ISRAEL
+				P.O. BOX 1280
+				    
+				IL
+
+00-40-FA   (hex)		MICROBOARDS, INC.
+0040FA     (base 16)		MICROBOARDS, INC.
+				31-8, TAKASECHO,FUNABASHI-CITY
+				CHIBA 273  CHIBA 273  
+				JP
+
+00-40-14   (hex)		COMSOFT GMBH
+004014     (base 16)		COMSOFT GMBH
+				WACHHAUSSTR. 5A
+				    
+				DE
+
+00-40-00   (hex)		PCI COMPONENTES DA AMZONIA LTD
+004000     (base 16)		PCI COMPONENTES DA AMZONIA LTD
+				RUA JOSEF KRYSS
+				  01140  BRASIL
+				BR
+
+00-40-6C   (hex)		COPERNIQUE
+00406C     (base 16)		COPERNIQUE
+				6, MAIL DE L'EUROPE BP 25
+				    
+				FR
+
+00-40-75   (hex)		Tattile SRL 
+004075     (base 16)		Tattile SRL 
+				11-12 NORTHFIELD PROSPECT
+				  UNITED  KINGDOM
+				GB
+
+00-40-53   (hex)		AMPRO COMPUTERS
+004053     (base 16)		AMPRO COMPUTERS
+				990 ALMONDOR AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-80-38   (hex)		DATA RESEARCH & APPLICATIONS
+008038     (base 16)		DATA RESEARCH & APPLICATIONS
+				9041 EXECUTIVE PARK DR.
+				KNOXVILLE  TN  37923-4609
+				US
+
+00-80-5E   (hex)		LSI LOGIC CORPORATION
+00805E     (base 16)		LSI LOGIC CORPORATION
+				1551 MCCARTHY BOULEVARD
+				MILPITAS  CA  95035
+				US
+
+00-80-60   (hex)		NETWORK INTERFACE CORPORATION
+008060     (base 16)		NETWORK INTERFACE CORPORATION
+				15019 WEST 95 STREET
+				LENEXA  KS  66215
+				US
+
+00-80-C3   (hex)		BICC INFORMATION SYSTEMS & SVC
+0080C3     (base 16)		BICC INFORMATION SYSTEMS & SVC
+				500 CAPABILITY GREEN, LUTON
+				ENGLAND  LU1  3LT
+				GB
+
+00-80-44   (hex)		SYSTECH COMPUTER CORP.
+008044     (base 16)		SYSTECH COMPUTER CORP.
+				6465 NANCY RIDGE DRIVE
+				SAN DIEGO  CA  92121
+				US
+
+00-80-06   (hex)		COMPUADD CORPORATION
+008006     (base 16)		COMPUADD CORPORATION
+				ENGINEERING
+				AUSTIN  TX  78727
+				US
+
+00-80-9B   (hex)		JUSTSYSTEM CORPORATION
+00809B     (base 16)		JUSTSYSTEM CORPORATION
+				3-46 OKINOHAMAHIGASHI
+				    
+				JP
+
+00-80-DF   (hex)		ADC CODENOLL TECHNOLOGY CORP.
+0080DF     (base 16)		ADC CODENOLL TECHNOLOGY CORP.
+				200 CORPORATE BLVD. SO.
+				YONKERS  NY  10701
+				US
+
+00-80-28   (hex)		TRADPOST (HK) LTD
+008028     (base 16)		TRADPOST (HK) LTD
+				5/F, STAR CENTRE
+				  HONG  KONG
+				HK
+
+00-80-61   (hex)		LITTON SYSTEMS, INC.
+008061     (base 16)		LITTON SYSTEMS, INC.
+				M/S 44-20
+				AGOURA HILLS  CA  91301-0500
+				US
+
+00-80-F5   (hex)		Quantel Ltd
+0080F5     (base 16)		Quantel Ltd
+				Turnpike Road
+				Newbury  Berkshire  RG14 2NX
+				GB
+
+00-80-B9   (hex)		ARCHE TECHNOLIGIES INC.
+0080B9     (base 16)		ARCHE TECHNOLIGIES INC.
+				48502 KATO ROAD
+				FREMONT  CA  94538
+				US
+
+00-40-63   (hex)		VIA TECHNOLOGIES, INC.
+004063     (base 16)		VIA TECHNOLOGIES, INC.
+				5020 BRANDIN COURT
+				FREMONT  CA  94538
+				US
+
+00-80-8A   (hex)		SUMMIT MICROSYSTEMS CORP.
+00808A     (base 16)		SUMMIT MICROSYSTEMS CORP.
+				710 LAKEWAY-STE.#150
+				SUNNYVALE  CA  940867
+				US
+
+00-80-A7   (hex)		Honeywell International Inc
+0080A7     (base 16)		Honeywell International Inc
+				Vancouver Center of Excellence 
+				North Vancouver    V7J 3S4 
+				CA
+
+00-80-66   (hex)		ARCOM CONTROL SYSTEMS, LTD.
+008066     (base 16)		ARCOM CONTROL SYSTEMS, LTD.
+				UNIT 8, CLIFTON ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-80-CB   (hex)		FALCO DATA PRODUCTS
+0080CB     (base 16)		FALCO DATA PRODUCTS
+				440 POTRERO AVENUE
+				SUNNYVALE  CA  94086-4196
+				US
+
+00-80-07   (hex)		DLOG NC-SYSTEME
+008007     (base 16)		DLOG NC-SYSTEME
+				WERNER-VON-SIEMENS STRASSE 13
+				    GERMANY
+				
+
+00-80-62   (hex)		INTERFACE  CO.
+008062     (base 16)		INTERFACE  CO.
+				8-26 OZU 5-CHOME MINAMI-KU
+				    
+				JP
+
+00-80-1E   (hex)		XINETRON, INC.
+00801E     (base 16)		XINETRON, INC.
+				2330 B. WALSH AVE.
+				SANTA CLARA  CA  95051
+				US
+
+00-80-E2   (hex)		T.D.I. CO., LTD.
+0080E2     (base 16)		T.D.I. CO., LTD.
+				DEVELOPMENT DIV.  #3 FUJI BLDG
+				    
+				JP
+
+00-80-49   (hex)		NISSIN ELECTRIC CO., LTD.
+008049     (base 16)		NISSIN ELECTRIC CO., LTD.
+				47, UMEZU - TAKASE - CHO
+				    
+				JP
+
+00-80-C1   (hex)		LANEX CORPORATION
+0080C1     (base 16)		LANEX CORPORATION
+				10727 TUCKER STREET
+				BELTSVILLE  MD  20705
+				US
+
+00-80-A3   (hex)		Lantronix
+0080A3     (base 16)		Lantronix
+				15353 Barranca Parkway
+				Irvine  CA  92618
+				US
+
+00-80-BC   (hex)		HITACHI ENGINEERING CO., LTD
+0080BC     (base 16)		HITACHI ENGINEERING CO., LTD
+				4-8-26, OMIKACHO
+				    
+				JP
+
+00-80-36   (hex)		REFLEX MANUFACTURING SYSTEMS
+008036     (base 16)		REFLEX MANUFACTURING SYSTEMS
+				UNIT D, THE FLEMING CENTRE,
+				    ENGLAND
+				GB
+
+00-80-83   (hex)		AMDAHL
+008083     (base 16)		AMDAHL
+				1250 EAST ARQUES AVENUE
+				SUNNYVALE  CA  94088-3470
+				US
+
+00-80-B8   (hex)		DMG MORI B.U.G. CO., LTD.
+0080B8     (base 16)		DMG MORI B.U.G. CO., LTD.
+				1-1-14 Techno park,
+				Shimonopporo, Atsubetsuku, Sapporo  Hokkaido  004-0015
+				JP
+
+00-80-4D   (hex)		CYCLONE MICROSYSTEMS, INC.
+00804D     (base 16)		CYCLONE MICROSYSTEMS, INC.
+				25 SCIENCE PARK
+				NEW HAVEN  CT  06511
+				US
+
+00-80-D4   (hex)		CHASE RESEARCH LTD.
+0080D4     (base 16)		CHASE RESEARCH LTD.
+				7 CHINEHAM BUSINESS PARK
+				    ENGLAND
+				GB
+
+00-80-3D   (hex)		SURIGIKEN CO.,  LTD.
+00803D     (base 16)		SURIGIKEN CO.,  LTD.
+				YOUTH BLDG, 4-1-9 SHINJUKU
+				    
+				JP
+
+00-80-8B   (hex)		DACOLL LIMITED
+00808B     (base 16)		DACOLL LIMITED
+				DACOLL HOUSE, GARDNERS LANE
+				SCOTLAND  EH48  1TP
+				GB
+
+00-80-B2   (hex)		NETWORK EQUIPMENT TECHNOLOGIES
+0080B2     (base 16)		NETWORK EQUIPMENT TECHNOLOGIES
+				6900 PASEO PADRE PARKWAY
+				FREMONT  CA  94555
+				US
+
+00-80-76   (hex)		MCNC
+008076     (base 16)		MCNC
+				P.O. BOX 12889
+				RTP  NC  27709
+				US
+
+00-80-0B   (hex)		CSK CORPORATION
+00800B     (base 16)		CSK CORPORATION
+				18F MATSUSHITA IMP BLDG,
+				  JAPAN  540
+				JP
+
+00-80-18   (hex)		KOBE STEEL, LTD.
+008018     (base 16)		KOBE STEEL, LTD.
+				KOBE ISUZU RECRUIT BLDG.
+				    
+				JP
+
+00-80-68   (hex)		YAMATECH SCIENTIFIC LTD.
+008068     (base 16)		YAMATECH SCIENTIFIC LTD.
+				1255 LAIRD, SUITE 260
+				    
+				CA
+
+00-80-A8   (hex)		VITACOM CORPORATION
+0080A8     (base 16)		VITACOM CORPORATION
+				1330 CHARLESTON ROAD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-80-33   (hex)		EMS Aviation, Inc.
+008033     (base 16)		EMS Aviation, Inc.
+				121 WHITTENDALE DRIVE
+				MOORESTOWN  NJ  08057
+				US
+
+00-80-7C   (hex)		FIBERCOM, INC.
+00807C     (base 16)		FIBERCOM, INC.
+				3353 ORANGE AVENUE NE
+				ROANOKE  VA  24012
+				US
+
+00-80-91   (hex)		TOKYO ELECTRIC CO.,LTD
+008091     (base 16)		TOKYO ELECTRIC CO.,LTD
+				10-14 UCHIKANDA
+				TOKYO  JAPAN  101
+				JP
+
+00-00-8E   (hex)		SOLBOURNE COMPUTER, INC.
+00008E     (base 16)		SOLBOURNE COMPUTER, INC.
+				1900 PIKE ROAD
+				LONGMONT  COLORADO  80501
+				US
+
+00-00-DC   (hex)		HAYES MICROCOMPUTER PRODUCTS
+0000DC     (base 16)		HAYES MICROCOMPUTER PRODUCTS
+				P.O. BOX 105203
+				ATLANTA  GA  30348
+				US
+
+00-00-63   (hex)		BARCO CONTROL ROOMS GMBH
+000063     (base 16)		BARCO CONTROL ROOMS GMBH
+				An der Rossweid 5
+				Karlsruhe    D-76229
+				DE
+
+00-00-4E   (hex)		AMPEX CORPORATION
+00004E     (base 16)		AMPEX CORPORATION
+				581 CONFERENCE PLACE
+				GOLDEN  CO  80401
+				US
+
+00-00-2E   (hex)		SOCIETE EVIRA
+00002E     (base 16)		SOCIETE EVIRA
+				ZONE PORTUAIRE DE BREGAILLON
+				    
+				FR
+
+00-00-3F   (hex)		SYNTREX, INC.
+00003F     (base 16)		SYNTREX, INC.
+				246 INDUSTRIAL WAY WEST
+				EATONTOWN  NJ  07724
+				US
+
+00-80-9D   (hex)		Commscraft Ltd.
+00809D     (base 16)		Commscraft Ltd.
+				PO BOX 160
+				    
+				AU
+
+00-80-F4   (hex)		TELEMECANIQUE ELECTRIQUE
+0080F4     (base 16)		TELEMECANIQUE ELECTRIQUE
+				33 BIS AVENUE,
+				    
+				FR
+
+00-80-22   (hex)		SCAN-OPTICS
+008022     (base 16)		SCAN-OPTICS
+				201 TECHNOLOGY DRIVE
+				IRVINE  CA  92718
+				US
+
+00-00-CD   (hex)		Allied Telesis Labs Ltd
+0000CD     (base 16)		Allied Telesis Labs Ltd
+				27 Nazareth Avenue
+				Middleton  Christchurch  8024
+				NZ
+
+00-80-DD   (hex)		GMX INC/GIMIX
+0080DD     (base 16)		GMX INC/GIMIX
+				3223 ARNOLD LANE
+				NORTHBROOK  IL  60062-2406
+				US
+
+00-80-FB   (hex)		BVM LIMITED
+0080FB     (base 16)		BVM LIMITED
+				Lakeside House, Brickyard Road,
+				Swanmore  SOUTHAMPTON  SO32 2SA
+				GB
+
+00-80-B4   (hex)		SOPHIA SYSTEMS
+0080B4     (base 16)		SOPHIA SYSTEMS
+				3337 KIFER ROAD
+				SANTA CLARA  CA  95051
+				US
+
+00-80-7F   (hex)		DY-4 INCORPORATED
+00807F     (base 16)		DY-4 INCORPORATED
+				333 PALLADIUM DRIVE, MS 312
+				    
+				CA
+
+00-80-2D   (hex)		XYLOGICS INC
+00802D     (base 16)		XYLOGICS INC
+				53 THIRD AVENUE
+				BURLINGTON  MA  01803
+				US
+
+00-00-61   (hex)		GATEWAY COMMUNICATIONS
+000061     (base 16)		GATEWAY COMMUNICATIONS
+				2941 ALTON AVENUE
+				IRVINE  CA  92714
+				US
+
+00-00-EA   (hex)		UPNOD AB
+0000EA     (base 16)		UPNOD AB
+				BOX 23051
+				    
+				SE
+
+00-00-43   (hex)		MICRO TECHNOLOGY
+000043     (base 16)		MICRO TECHNOLOGY
+				4905 EAST LAPALMA
+				ANAHEIM  CA  92807
+				US
+
+00-00-17   (hex)		Oracle
+000017     (base 16)		Oracle
+				4200 Network Circle
+				Santa Clara  CA  95054
+				US
+
+00-00-B2   (hex)		TELEVIDEO SYSTEMS, INC.
+0000B2     (base 16)		TELEVIDEO SYSTEMS, INC.
+				550 E. BROKAW ROAD
+				SAN JOSE  CA  95161-9048
+				US
+
+00-00-EE   (hex)		NETWORK DESIGNERS, LTD.
+0000EE     (base 16)		NETWORK DESIGNERS, LTD.
+				UNIT 1A, HORNBEAM PARK
+				UNITED KINGDOM  HG2  8QT
+				GB
+
+00-00-E5   (hex)		SIGMEX LTD.
+0000E5     (base 16)		SIGMEX LTD.
+				SIGMA HOUSE
+				RH12  4UZ  ENGLAND
+				GB
+
+00-00-89   (hex)		CAYMAN SYSTEMS INC.
+000089     (base 16)		CAYMAN SYSTEMS INC.
+				26 LANSDOWNE STREET
+				CAMBRIDGE  MA  02139
+				US
+
+00-00-FF   (hex)		CAMTEC ELECTRONICS LTD.
+0000FF     (base 16)		CAMTEC ELECTRONICS LTD.
+				101 VAUGHAN WAY
+				    ENGLAND
+				GB
+
+00-00-B7   (hex)		DOVE COMPUTER CORPORATION
+0000B7     (base 16)		DOVE COMPUTER CORPORATION
+				1200 NORTH 23RD STREET
+				WILMINGTON  NC  28405
+				US
+
+00-00-F2   (hex)		SPIDER COMMUNICATIONS
+0000F2     (base 16)		SPIDER COMMUNICATIONS
+				7491 BRIAR ROAD
+				    
+				CA
+
+00-00-CC   (hex)		DENSAN CO., LTD.
+0000CC     (base 16)		DENSAN CO., LTD.
+				1-23-11, KAMITAKAIDO
+				    
+				JP
+
+00-00-A4   (hex)		ACORN COMPUTERS LIMITED
+0000A4     (base 16)		ACORN COMPUTERS LIMITED
+				FULBOURN ROAD, CHERRY HINTON
+				    ENGLAND
+				GB
+
+00-00-DB   (hex)		British Telecommunications plc
+0000DB     (base 16)		British Telecommunications plc
+				81 New Gate St
+				    England
+				GB
+
+00-00-C1   (hex)		Madge Ltd.
+0000C1     (base 16)		Madge Ltd.
+				Madge House
+				Maindenhead  Berkshire  SL6 2HP
+				GB
+
+00-00-F6   (hex)		APPLIED MICROSYSTEMS CORP.
+0000F6     (base 16)		APPLIED MICROSYSTEMS CORP.
+				5020 148 AVENUE, N.E.
+				REDMOND  WA  98073-9702
+				US
+
+00-00-77   (hex)		INTERPHASE CORPORATION
+000077     (base 16)		INTERPHASE CORPORATION
+				13800 SENLAC
+				DALLAS  TX  75234
+				US
+
+00-00-A2   (hex)		Bay Networks
+0000A2     (base 16)		Bay Networks
+				PO Box 58185
+				Santa Clara  CA  95052-8185
+				US
+
+00-00-EC   (hex)		MICROPROCESS
+0000EC     (base 16)		MICROPROCESS
+				97 BIS, RUE DE COLOMBES
+				    
+				FR
+
+00-00-C2   (hex)		INFORMATION PRESENTATION TECH.
+0000C2     (base 16)		INFORMATION PRESENTATION TECH.
+				23801 CALABASAS ROAD
+				CALABASAS  CA  91302
+				US
+
+00-00-FC   (hex)		MEIKO
+0000FC     (base 16)		MEIKO
+				650 AZTEC WEST
+				  UNITED  KINGDOM
+				GB
+
+00-00-6D   (hex)		CRAY COMMUNICATIONS, LTD.
+00006D     (base 16)		CRAY COMMUNICATIONS, LTD.
+				P.O. BOX 254, CAXTON WAY
+				  UNITED  KINGDOM
+				GB
+
+00-00-DA   (hex)		ATEX
+0000DA     (base 16)		ATEX
+				15 CROSBY DRIVE
+				BEDFORD  MA  01730
+				US
+
+00-00-DD   (hex)		TCL INCORPORATED
+0000DD     (base 16)		TCL INCORPORATED
+				41829 ALBRAE STREET
+				FREMONT  CA  94538
+				US
+
+00-00-AE   (hex)		DASSAULT ELECTRONIQUE
+0000AE     (base 16)		DASSAULT ELECTRONIQUE
+				55, QUAI MARCEL DASSAULT
+				    
+				FR
+
+00-00-A0   (hex)		SANYO Electric Co., Ltd.
+0000A0     (base 16)		SANYO Electric Co., Ltd.
+				5-5, Keihan-hondori 2-chome,
+				Moriguchi City  Osaka  570-8677
+				JP
+
+00-00-C0   (hex)		WESTERN DIGITAL CORPORATION
+0000C0     (base 16)		WESTERN DIGITAL CORPORATION
+				8105 IRVINE CENTER DRIVE
+				IRVINE  CA  92718
+				US
+
+00-00-33   (hex)		EGAN MACHINERY COMPANY
+000033     (base 16)		EGAN MACHINERY COMPANY
+				SOUTH ADAMSVILLE ROAD
+				SOMMERVILLE  NJ  08876
+				US
+
+00-00-9D   (hex)		LOCUS COMPUTING CORPORATION
+00009D     (base 16)		LOCUS COMPUTING CORPORATION
+				9800 LA CIENEGA
+				INGLEWOOD  CA  90301
+				US
+
+00-00-FD   (hex)		HIGH LEVEL HARDWARE
+0000FD     (base 16)		HIGH LEVEL HARDWARE
+				PO BOX 170 WINDMILL ROAD
+				    ENGLAND
+				GB
+
+00-00-65   (hex)		Network General Corporation
+000065     (base 16)		Network General Corporation
+				178 E Tsaman Dr
+				San Jose  CA  95134
+				US
+
+00-00-11   (hex)		NORMEREL SYSTEMES
+000011     (base 16)		NORMEREL SYSTEMES
+				58 RUE POTTIER
+				    
+				FR
+
+00-00-10   (hex)		SYTEK INC.
+000010     (base 16)		SYTEK INC.
+				1225 CHARLESTON ROAD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-00-BC   (hex)		Rockwell Automation
+0000BC     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+08-00-7E   (hex)		AMALGAMATED WIRELESS(AUS) LTD
+08007E     (base 16)		AMALGAMATED WIRELESS(AUS) LTD
+				NORTH RYDE DIVISION
+				  AUSTRALIA  2113
+				AU
+
+08-00-7F   (hex)		CARNEGIE-MELLON UNIVERSITY
+08007F     (base 16)		CARNEGIE-MELLON UNIVERSITY
+				INFORMATION TECHNOLOGY
+				PITTSBURGE  PA  15213
+				US
+
+00-00-99   (hex)		MTX, INC.
+000099     (base 16)		MTX, INC.
+				3301 TERMINAL DRIVE
+				RALEIGH  NC  27604
+				US
+
+00-00-C4   (hex)		WATERS DIV. OF MILLIPORE
+0000C4     (base 16)		WATERS DIV. OF MILLIPORE
+				34 MAPLE STREET
+				MILFORD  MA  01757
+				US
+
+00-00-EB   (hex)		MATSUSHITA COMM. IND. CO. LTD.
+0000EB     (base 16)		MATSUSHITA COMM. IND. CO. LTD.
+				3-1  4-CHOME
+				    
+				JP
+
+00-00-28   (hex)		PRODIGY SYSTEMS CORPORATION
+000028     (base 16)		PRODIGY SYSTEMS CORPORATION
+				2601 CASEY DRIVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+08-00-3B   (hex)		TORUS SYSTEMS LIMITED
+08003B     (base 16)		TORUS SYSTEMS LIMITED
+				SCIENCE PARK
+				  UNITED  KINGDOM
+				GB
+
+08-00-3C   (hex)		SCHLUMBERGER WELL SERVICES
+08003C     (base 16)		SCHLUMBERGER WELL SERVICES
+				AUSTIN ENGINEERING SERVICES
+				AUSTIN  TX  78720-0015
+				US
+
+08-00-34   (hex)		FILENET CORPORATION
+080034     (base 16)		FILENET CORPORATION
+				1575 CORPORATE DRIVE
+				COSTA MESA  CA  92626
+				US
+
+08-00-36   (hex)		INTERGRAPH CORPORATION
+080036     (base 16)		INTERGRAPH CORPORATION
+				ONE MADISON INDUSTRIAL PARK
+				HUNTSVILLE  AL  35807
+				US
+
+08-00-33   (hex)		BAUSCH & LOMB
+080033     (base 16)		BAUSCH & LOMB
+				INTERACTIVE GRAPHICS DIVISION
+				AUSITN  TX  78671
+				US
+
+08-00-48   (hex)		EUROTHERM GAUGING SYSTEMS
+080048     (base 16)		EUROTHERM GAUGING SYSTEMS
+				900 MIDDLESEX TURNPIKE, BDG. 6
+				BILLERICA  MA  01821
+				US
+
+08-00-43   (hex)		PIXEL COMPUTER INC.
+080043     (base 16)		PIXEL COMPUTER INC.
+				260 FORDHAM ROAD
+				WILMINGTON  MA  01887
+				US
+
+08-00-45   (hex)		CONCURRENT COMPUTER CORP.
+080045     (base 16)		CONCURRENT COMPUTER CORP.
+				2 CRESCENT PLACE
+				OCEANPORT  NJ  07757
+				US
+
+08-00-78   (hex)		ACCELL CORPORATION
+080078     (base 16)		ACCELL CORPORATION
+				50 SAGINAW DRIVE
+				ROCHESTER  NY  14623
+				US
+
+08-00-6D   (hex)		WHITECHAPEL COMPUTER WORKS
+08006D     (base 16)		WHITECHAPEL COMPUTER WORKS
+				75 WHITECHAPEL ROAD
+				LONDON  E1  1DU
+				GB
+
+08-00-30   (hex)		NETWORK RESEARCH CORPORATION
+080030     (base 16)		NETWORK RESEARCH CORPORATION
+				2380 N. ROSE AVENUE
+				OXNARD  CA  93010
+				US
+
+08-00-31   (hex)		LITTLE MACHINES INC.
+080031     (base 16)		LITTLE MACHINES INC.
+				4141 JUTLAND DRIVE
+				SAN DIEGO  CA  92117
+				US
+
+08-00-2E   (hex)		METAPHOR COMPUTER SYSTEMS
+08002E     (base 16)		METAPHOR COMPUTER SYSTEMS
+				2500 GARCIA AVENUE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+08-00-56   (hex)		STANFORD LINEAR ACCEL. CENTER
+080056     (base 16)		STANFORD LINEAR ACCEL. CENTER
+				2575 SANDHILL ROAD
+				MENLO PARK  CA  94025
+				US
+
+08-00-4F   (hex)		CYGNET SYSTEMS
+08004F     (base 16)		CYGNET SYSTEMS
+				2560 JUNCTION AVENUE
+				SAN JOSE  CA  95134
+				US
+
+08-00-50   (hex)		DAISY SYSTEMS CORP.
+080050     (base 16)		DAISY SYSTEMS CORP.
+				139 KIFER COURT
+				SUNNYVALE  CA  94086
+				US
+
+08-00-5E   (hex)		COUNTERPOINT COMPUTER INC.
+08005E     (base 16)		COUNTERPOINT COMPUTER INC.
+				2127 RINGWOOD AVENUE
+				SAN JOSE  CA  95131
+				US
+
+08-00-76   (hex)		PC LAN TECHNOLOGIES
+080076     (base 16)		PC LAN TECHNOLOGIES
+				5780 LINCOLN DRIVE SUITE 106
+				MINNEAPOLIS  MN  55436
+				US
+
+08-00-75   (hex)		DANSK DATA ELECTRONIK
+080075     (base 16)		DANSK DATA ELECTRONIK
+				HERLEV HOVEDGADE 199
+				    
+				DK
+
+08-00-2B   (hex)		DIGITAL EQUIPMENT CORPORATION
+08002B     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				LKG 1-2/A19
+				LITTLETON  MA  01460-1289
+				US
+
+08-00-29   (hex)		Megatek Corporation
+080029     (base 16)		Megatek Corporation
+				16868 Via Del Campo Court
+				San Diego  CA  92127
+				US
+
+02-70-B0   (hex)		M/A-COM INC. COMPANIES
+0270B0     (base 16)		M/A-COM INC. COMPANIES
+				11717 EXPLORATION LANE
+				GERMANTOWN  MD  20767
+				US
+
+00-00-53   (hex)		COMPUCORP
+000053     (base 16)		COMPUCORP
+				2211 MICHIGAN AVENUE
+				SANTA MONICA  CA  90404
+				US
+
+08-00-90   (hex)		SONOMA SYSTEMS
+080090     (base 16)		SONOMA SYSTEMS
+				4640 ADMIRALTY WAY,  STE. #600
+				MARINA DEL REY  CA  90292-6695
+				US
+
+08-00-0A   (hex)		NESTAR SYSTEMS INCORPORATED
+08000A     (base 16)		NESTAR SYSTEMS INCORPORATED
+				2585 EAST BAYSHORE ROAD
+				PALO ALTO  CA  94303
+				US
+
+00-80-0F   (hex)		STANDARD MICROSYSTEMS
+00800F     (base 16)		STANDARD MICROSYSTEMS
+				300 KENNEDY DRIVE
+				HAUPPAUGE  NY  11788
+				US
+
+00-40-6B   (hex)		SYSGEN
+00406B     (base 16)		SYSGEN
+				556 GIBRALTAR DRIVE
+				MILPITAS  CA  95035
+				US
+
+08-00-0F   (hex)		MITEL CORPORATION
+08000F     (base 16)		MITEL CORPORATION
+				350 LEGGET DRIVE
+				CANADA  K2K  1X3
+				CA
+
+08-00-23   (hex)		Panasonic Communications Co., Ltd.
+080023     (base 16)		Panasonic Communications Co., Ltd.
+				4-1-62 Minoshima Hakata Fukuoka
+				    812-8531
+				JP
+
+B0-4F-C3   (hex)		Shenzhen NVC Cloud Technology Co., Ltd.
+B04FC3     (base 16)		Shenzhen NVC Cloud Technology Co., Ltd.
+				Rm. 1406, Bld. 11A, Shenzhen Bay Eco-Technology Park, Nanshan Dist.,
+				Shenzhen  Guangdong  518063
+				CN
+
+08-00-1C   (hex)		KDD-KOKUSAI DEBNSIN DENWA CO.
+08001C     (base 16)		KDD-KOKUSAI DEBNSIN DENWA CO.
+				FUJI XEROX CO., LTD. TELEGRAPH
+				  107  
+				JP
+
+00-DD-0C   (hex)		UNGERMANN-BASS INC.
+00DD0C     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+08-00-18   (hex)		PIRELLI FOCOM NETWORKS
+080018     (base 16)		PIRELLI FOCOM NETWORKS
+				DENTON DRIVE
+				    ENGLAND
+				GB
+
+00-00-A6   (hex)		NETWORK GENERAL CORPORATION
+0000A6     (base 16)		NETWORK GENERAL CORPORATION
+				1296 B LAWRENCE STATION ROAD
+				SUNNYVALE  CA  94089
+				US
+
+00-BB-F0   (hex)		UNGERMANN-BASS INC.
+00BBF0     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-40-8E   (hex)		Tattile SRL 
+00408E     (base 16)		Tattile SRL 
+				2360 MARYLAND ROAD
+				WILLOW GROVE  PA  19090
+				US
+
+00-00-04   (hex)		XEROX CORPORATION
+000004     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+00-DD-0E   (hex)		UNGERMANN-BASS INC.
+00DD0E     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+88-57-1D   (hex)		Seongji Industry Company
+88571D     (base 16)		Seongji Industry Company
+				 54-33, Dongtanhana 1-gil
+				Hwaseong-si  Gyeonggi-do  18423
+				KR
+
+7C-F3-1B   (hex)		LG Electronics (Mobile Communications)
+7CF31B     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-01-C8   (hex)		THOMAS CONRAD CORP.
+0001C8     (base 16)		THOMAS CONRAD CORP.
+				1908-R KRAMER LANE
+				AUSTIN  TX  78758
+				US
+
+CC-EF-03   (hex)		Hunan Keyshare Communication Technology Co., Ltd.
+CCEF03     (base 16)		Hunan Keyshare Communication Technology Co., Ltd.
+				No. 19 Building, CEC Software Park, No. 39 jianshan Rd
+				Changsha  Hunan  410205
+				CN
+
+10-2F-A3   (hex)		Shenzhen Uvision-tech Technology Co.Ltd
+102FA3     (base 16)		Shenzhen Uvision-tech Technology Co.Ltd
+				shenzhen longhua Street
+				shenzhen  GuangDong  518000
+				CN
+
+70-48-F7   (hex)		Nintendo Co.,Ltd
+7048F7     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+18-E1-CA   (hex)		wanze
+18E1CA     (base 16)		wanze
+				wanjinglu
+				dandong  Liaoning  118000
+				CN
+
+EC-BE-DD   (hex)		Sagemcom Broadband SAS
+ECBEDD     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-C0-B6   (hex)		HVE, Inc. 
+00C0B6     (base 16)		HVE, Inc. 
+				Suite 2, 100 Executive Court
+				Waxahachie  TX  75165
+				US
+
+30-91-76   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+309176     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+78-C8-81   (hex)		Sony Interactive Entertainment Inc.
+78C881     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+D4-4F-68   (hex)		Eidetic Communications Inc
+D44F68     (base 16)		Eidetic Communications Inc
+				3553 31st NW
+				Calgary  Alberta  T2L2K7
+				CA
+
+74-9E-A5   (hex)		OHSUNG
+749EA5     (base 16)		OHSUNG
+				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
+				GUMI  GYEONG BUK  730-030
+				KR
+
+8C-C8-4B   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+8CC84B     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+0C-2F-B0   (hex)		Samsung Electronics Co.,Ltd
+0C2FB0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-02-16   (hex)		Cisco Systems, Inc
+B40216     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+54-A4-93   (hex)		IEEE Registration Authority
+54A493     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+6C-1C-71   (hex)		Zhejiang Dahua Technology Co., Ltd.
+6C1C71     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+CC-6A-10   (hex)		The Chamberlain Group, Inc
+CC6A10     (base 16)		The Chamberlain Group, Inc
+				300 Windsor Drive
+				Oak Brook  IL  60523
+				US
+
+F0-3F-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F03F95     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-56-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+185644     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-69-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C69D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-5A-58   (hex)		Dell Inc.
+185A58     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+C4-3A-35   (hex)		FN-LINK TECHNOLOGY LIMITED
+C43A35     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+04-D1-6E   (hex)		IEEE Registration Authority
+04D16E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+04-0E-3C   (hex)		HP Inc.
+040E3C     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+C4-E0-DE   (hex)		Zhengzhou XindaJiean Information Technology Co.,Ltd.
+C4E0DE     (base 16)		Zhengzhou XindaJiean Information Technology Co.,Ltd.
+				Tianli building A, wisdom park, no. 139, yangjin road, jinshui district
+				Zhengzhou  Henan  450003
+				CN
+
+90-1A-4F   (hex)		EM Microelectronic
+901A4F     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+C8-4F-0E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+C84F0E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+6C-D2-BA   (hex)		zte corporation
+6CD2BA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+30-3A-BA   (hex)		Guangzhou BaoLun Electronics Co., Ltd
+303ABA     (base 16)		Guangzhou BaoLun Electronics Co., Ltd
+				No.1 Building B Block, Zhongcun Street, Panyu District
+				Guangzhou  guangdong  511400
+				CN
+
+D8-8A-DC   (hex)		Huawei Device Co., Ltd.
+D88ADC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+10-E9-53   (hex)		Huawei Device Co., Ltd.
+10E953     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+7C-48-B2   (hex)		Vida Resources Lte Ltd
+7C48B2     (base 16)		Vida Resources Lte Ltd
+				10 Anson road, unit #16-20 International Plaza
+				Singapore    079903
+				SG
+
+2C-AB-33   (hex)		Texas Instruments
+2CAB33     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B8-87-C6   (hex)		Prudential Technology co.,LTD
+B887C6     (base 16)		Prudential Technology co.,LTD
+				UNIT 4,7/F BRIGHT WAY TOWER, NO33 MONG KOK RD, 
+				Hong Kong    999077 
+				CN
+
+EC-9C-32   (hex)		Sichuan AI-Link Technology Co., Ltd.
+EC9C32     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+4C-AD-A8   (hex)		PANOPTICS CORP.
+4CADA8     (base 16)		PANOPTICS CORP.
+				D-908 Bundang Technopark, 700 Pangyoro, Bundang
+				Seongnam  Gyeonggi  13516
+				KR
+
+FC-1C-A1   (hex)		Nokia
+FC1CA1     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+E8-D0-3C   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+E8D03C     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+1C-1A-DF   (hex)		Microsoft Corporation
+1C1ADF     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+D4-F5-47   (hex)		Google, Inc.
+D4F547     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+98-1B-B5   (hex)		ASSA ABLOY Korea Co., Ltd iRevo
+981BB5     (base 16)		ASSA ABLOY Korea Co., Ltd iRevo
+				10F of JEI PLATZ Bldg., 186, Gasandigital-ro, Geumcheon-gu
+				Seoul    08502
+				KR
+
+34-CB-1A   (hex)		Procter & Gamble Company
+34CB1A     (base 16)		Procter & Gamble Company
+				2 Procter & Gamble Plaza
+				Cincinnati  OH  45202
+				US
+
+F0-B1-07   (hex)		Ericsson AB
+F0B107     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+78-4F-9B   (hex)		Juniper Networks
+784F9B     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+78-3A-6C   (hex)		TECNO MOBILE LIMITED
+783A6C     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+E0-40-07   (hex)		Huawei Device Co., Ltd.
+E04007     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+38-3F-B3   (hex)		Technicolor CH USA Inc.
+383FB3     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+70-CE-8C   (hex)		Samsung Electronics Co.,Ltd
+70CE8C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+40-70-F5   (hex)		Apple, Inc.
+4070F5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-35-B5   (hex)		Apple, Inc.
+B035B5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-AF-D1   (hex)		netKTI Co., Ltd
+90AFD1     (base 16)		netKTI Co., Ltd
+				7-10F THE-ONE SQUARE, 135, Unjung-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13461
+				KR
+
+80-0C-67   (hex)		Apple, Inc.
+800C67     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-81-2A   (hex)		Apple, Inc.
+90812A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-17-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7817BE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-72-EA   (hex)		Google, Inc.
+F072EA     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+B8-7B-C5   (hex)		Apple, Inc.
+B87BC5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-51-36   (hex)		TCT mobile ltd
+F05136     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+B8-C9-B5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B8C9B5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+88-AC-C0   (hex)		Zyxel Communications Corporation
+88ACC0     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+90-FD-73   (hex)		zte corporation
+90FD73     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+1C-1E-38   (hex)		PCCW Global, Inc.
+1C1E38     (base 16)		PCCW Global, Inc.
+				475 Spring Park Pl Suite 100 Herndon VA 20170
+				Herndon  WA  20170
+				US
+
+3C-41-0E   (hex)		Cisco Systems, Inc
+3C410E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+88-D9-8F   (hex)		Juniper Networks
+88D98F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-45-E2   (hex)		CyberTAN Technology Inc.
+0045E2     (base 16)		CyberTAN Technology Inc.
+				99 Park Ave III, Hsinchu Science Park
+				Hsinchu    308
+				TW
+
+00-69-67   (hex)		IEEE Registration Authority
+006967     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F8-6F-DE   (hex)		Shenzhen Goodix Technology Co.,Ltd.
+F86FDE     (base 16)		Shenzhen Goodix Technology Co.,Ltd.
+				 F13,Phase B,Tengfei Industrial Building,Futian Free Trade Zone,Shenzhen,China
+				Shenzhen  Guangdong  518045
+				CN
+
+64-66-24   (hex)		Sagemcom Broadband SAS
+646624     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+B0-F5-30   (hex)		Hitron Technologies. Inc
+B0F530     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+74-0A-E1   (hex)		Huawei Device Co., Ltd.
+740AE1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-A8-98   (hex)		Huawei Device Co., Ltd.
+B4A898     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+0C-E4-A0   (hex)		Huawei Device Co., Ltd.
+0CE4A0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+BC-1A-E4   (hex)		Huawei Device Co., Ltd.
+BC1AE4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-3F-72   (hex)		Mellanox Technologies, Inc.
+043F72     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+1C-4D-66   (hex)		Amazon Technologies Inc.
+1C4D66     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+50-2C-C6   (hex)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
+502CC6     (base 16)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
+				Jinji West Road, Qianshan,
+				Zhuhai  Guangdong  519070
+				CN
+
+F4-FE-FB   (hex)		Samsung Electronics Co.,Ltd
+F4FEFB     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+98-49-14   (hex)		Wistron Neweb Corporation
+984914     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+0C-EE-99   (hex)		Amazon Technologies Inc.
+0CEE99     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-11-7E   (hex)		Midmark Corp
+00117E     (base 16)		Midmark Corp
+				1001 Asbury Dr
+				Buffalo Grove  IL  60089
+				US
+
+D0-28-BA   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
+D028BA     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
+				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
+				Chongqing  China  401120
+				CN
+
+A4-28-B7   (hex)		Yangtze Memory Technologies Co., Ltd.
+A428B7     (base 16)		Yangtze Memory Technologies Co., Ltd.
+				No.88 Weilai 3rd Road, East Lake High-tech Development Zone, Wuhan, Hubei, POC
+				Wuhan  Hubei  430078
+				CN
+
+94-92-D2   (hex)		KCF Technologies, Inc.
+9492D2     (base 16)		KCF Technologies, Inc.
+				336 S Fraser Street
+				State College  PA  16801
+				US
+
+E4-A8-DF   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+E4A8DF     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+8C-53-C3   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+8C53C3     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+70-2F-35   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+702F35     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-14-B8   (hex)		Nokia
+C014B8     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-76-3D   (hex)		Veea
+00763D     (base 16)		Veea
+				164 E 83rd Street
+				New York  NY  10028
+				US
+
+30-93-BC   (hex)		Sagemcom Broadband SAS
+3093BC     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+FC-F5-C4   (hex)		Espressif Inc.
+FCF5C4     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+54-CE-69   (hex)		Hikari Trading Co.,Ltd.
+54CE69     (base 16)		Hikari Trading Co.,Ltd.
+				Hikari Building,7-4-14,Ginza,Chuo-ku
+				Tokyo    104-0061
+				JP
+
+6C-C6-3B   (hex)		Taicang T&W Electronics
+6CC63B     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+58-8E-81   (hex)		Silicon Laboratories
+588E81     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+48-B0-2D   (hex)		NVIDIA Corporation
+48B02D     (base 16)		NVIDIA Corporation
+				2701 San Tomas Expressway
+				Santa Clara  CA  95050
+				US
+
+4C-E1-76   (hex)		Cisco Systems, Inc
+4CE176     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-AE-F6   (hex)		eero inc.
+6CAEF6     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+FC-8E-6E   (hex)		StreamCCTV, LLC
+FC8E6E     (base 16)		StreamCCTV, LLC
+				1129 Northern Blvd, STE. 404
+				Manhasset    11030
+				US
+
+E0-2A-E6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E02AE6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+64-12-36   (hex)		Technicolor CH USA Inc.
+641236     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+78-8B-2A   (hex)		Zhen Shi Information Technology (Shanghai) Co., Ltd.
+788B2A     (base 16)		Zhen Shi Information Technology (Shanghai) Co., Ltd.
+				5F, Building 3?No. 401 Caobao Road, Xuhui District, Shanghai, China
+				Shanghai  Shanghai  200233
+				CN
+
+AC-64-CF   (hex)		FN-LINK TECHNOLOGY LIMITED
+AC64CF     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+F0-67-28   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+F06728     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+9C-E1-76   (hex)		Cisco Systems, Inc
+9CE176     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+10-29-59   (hex)		Apple, Inc.
+102959     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-76-84   (hex)		Apple, Inc.
+E47684     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-1A-1D   (hex)		Samsung Electronics Co.,Ltd
+B41A1D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-5C-D5   (hex)		Apple, Inc.
+F05CD5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-DA-6D   (hex)		Tiandy Technologies CO.,LTD
+3CDA6D     (base 16)		Tiandy Technologies CO.,LTD
+				NO.8,haitai huake rd2 (outside ring road),huayuan new technology industrial park
+				Tianjin  Tianjin  300384
+				CN
+
+F8-0D-F0   (hex)		zte corporation
+F80DF0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+9C-E9-1C   (hex)		zte corporation
+9CE91C     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+5C-17-CF   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+5C17CF     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+A4-FA-76   (hex)		New H3C Technologies Co., Ltd
+A4FA76     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+70-EA-5A   (hex)		Apple, Inc.
+70EA5A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-FA-D3   (hex)		IEEE Registration Authority
+3CFAD3     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-60-78   (hex)		Swissbit AG
+8C6078     (base 16)		Swissbit AG
+				Industriestrasse 4
+				Bronschhofen    CH-9552
+				CH
+
+00-DD-25   (hex)		Shenzhen hechengdong Technology Co., Ltd
+00DD25     (base 16)		Shenzhen hechengdong Technology Co., Ltd
+				302, floor 3, no.90-5, Dayang Road, Xintian community, Fuhai street, Bao'an District
+				Shenzhen  GuangDong  518100
+				CN
+
+80-20-E1   (hex)		BVBA DPTechnics
+8020E1     (base 16)		BVBA DPTechnics
+				Westkapellestraat 396/44
+				Knokke-Heist  West-Vlaanderen  8300
+				BE
+
+04-45-A1   (hex)		NIRIT- Xinwei  Telecom Technology Co., Ltd.
+0445A1     (base 16)		NIRIT- Xinwei  Telecom Technology Co., Ltd.
+				2-? ??????????? ??????, ?.12, ???.2
+				Moscow    115432
+				RU
+
+8C-97-EA   (hex)		FREEBOX SAS
+8C97EA     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+30-AB-6A   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+30AB6A     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+74-9B-E8   (hex)		Hitron Technologies. Inc
+749BE8     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+5C-BA-EF   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+5CBAEF     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+4C-63-71   (hex)		Xiaomi Communications Co Ltd
+4C6371     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+D8-4D-B9   (hex)		Wu Qi Technologies,Inc.
+D84DB9     (base 16)		Wu Qi Technologies,Inc.
+				14/F, 107 Middle Road, Xiantao Big Data Valley, Yubei District
+				Chongqing  Chongqing  401120
+				CN
+
+A0-4F-85   (hex)		LG Electronics (Mobile Communications)
+A04F85     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+D8-07-B6   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D807B6     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+64-6E-97   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+646E97     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+78-50-7C   (hex)		Juniper Networks
+78507C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-12-58   (hex)		TechVoIP Sp z o.o.
+001258     (base 16)		TechVoIP Sp z o.o.
+				Os. Boleslawa Chrobrego 117 
+				Poznan  Wielkopolska  60-681
+				PL
+
+6C-16-32   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C1632     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-1A-01   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C1A01     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-78-39   (hex)		zte corporation
+347839     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+24-16-9D   (hex)		Cisco Systems, Inc
+24169D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-19-E2   (hex)		Volterra
+F419E2     (base 16)		Volterra
+				2550 Great America Way #350
+				Santa Clara  CA  95054
+				US
+
+4C-A0-03   (hex)		VITEC
+4CA003     (base 16)		VITEC
+				99 rue Pierre Semard
+				Chatillon    92320
+				FR
+
+64-F2-FB   (hex)		Hangzhou Ezviz Software Co.,Ltd.
+64F2FB     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
+				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+30-80-9B   (hex)		New H3C Technologies Co., Ltd
+30809B     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+74-22-BB   (hex)		Huawei Device Co., Ltd.
+7422BB     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+6C-0D-34   (hex)		Nokia
+6C0D34     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+4C-45-76   (hex)		China Mobile(Hangzhou) Information Technology Co.,Ltd.
+4C4576     (base 16)		China Mobile(Hangzhou) Information Technology Co.,Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+B4-40-A4   (hex)		Apple, Inc.
+B440A4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-B8-A3   (hex)		Apple, Inc.
+48B8A3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-DB-E3   (hex)		Apple, Inc.
+F4DBE3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-7C-C7   (hex)		Juniper Networks
+F07CC7     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+D4-5E-EC   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+D45EEC     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+74-C9-29   (hex)		Zhejiang Dahua Technology Co., Ltd.
+74C929     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+D4-CF-F9   (hex)		Shenzhen SEI Robotics Co.,Ltd
+D4CFF9     (base 16)		Shenzhen SEI Robotics Co.,Ltd
+				501,Productivity Building A, #5 Hi-Tech Middle 2nd Road
+				Shenzhen  Guangdong  518057
+				CN
+
+5C-B2-9E   (hex)		ASCO Power Technologies
+5CB29E     (base 16)		ASCO Power Technologies
+				160 Park Avenue
+				Florham Park  NJ  07932
+				US
+
+9C-C9-EB   (hex)		NETGEAR
+9CC9EB     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+94-CC-04   (hex)		IEEE Registration Authority
+94CC04     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+90-EC-77   (hex)		silicom
+90EC77     (base 16)		silicom
+				14 Atir-Yeda St/
+				Kfar-Sava  Israel  44000
+				IL
+
+88-C3-97   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+88C397     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+F0-F6-C1   (hex)		Sonos, Inc.
+F0F6C1     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+60-68-4E   (hex)		Samsung Electronics Co.,Ltd
+60684E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-20-FD   (hex)		Samsung Electronics Co.,Ltd
+8020FD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-CE-40   (hex)		Samsung Electronics Co.,Ltd
+B4CE40     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-03-84   (hex)		Hongkong Nano IC Technologies Co., Ltd
+540384     (base 16)		Hongkong Nano IC Technologies Co., Ltd
+				Rm. 19C, Lockhart Ctr., 301-307 Lockhart Rd., Wan Chai, Hong Kong
+				Hong Kong  Hong Kong  999077
+				CN
+
+04-BD-BF   (hex)		Samsung Electronics Co.,Ltd
+04BDBF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-7A-BF   (hex)		Samsung Electronics Co.,Ltd
+BC7ABF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-09-31   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B40931     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-E7-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94E7EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-E4-BA   (hex)		Huawei Device Co., Ltd.
+94E4BA     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-71-46   (hex)		Huawei Device Co., Ltd.
+347146     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-C5-46   (hex)		Huawei Device Co., Ltd.
+2CC546     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+0C-83-9A   (hex)		Huawei Device Co., Ltd.
+0C839A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-E0-FC   (hex)		Huawei Device Co., Ltd.
+E0E0FC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+30-50-75   (hex)		GN Audio A/S
+305075     (base 16)		GN Audio A/S
+				Lautrupbjerg 7
+				Ballerup    DK-2750
+				DK
+
+F4-B7-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4B78D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-16-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A416E7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-B9-B0   (hex)		Intracom Asia Co., Ltd
+30B9B0     (base 16)		Intracom Asia Co., Ltd
+				4F., No77, Sec. 1, Xintai 5th Rd., Xizhi Dist.
+				New Taipei City  Taiwan  221
+				TW
+
+0C-35-FE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+0C35FE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+8C-83-DF   (hex)		Nokia
+8C83DF     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+AC-4B-1E   (hex)		Integri-Sys.Com LLC
+AC4B1E     (base 16)		Integri-Sys.Com LLC
+				9130 South Dadeland Bvld. Suite 1509
+				Miami  FL  33156
+				US
+
+B0-E4-D5   (hex)		Google, Inc.
+B0E4D5     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+68-69-CA   (hex)		Hitachi, Ltd.
+6869CA     (base 16)		Hitachi, Ltd.
+				27-18, Minami Oi 6-chome, Shinagawa-ku
+				Tokyo    140-8572
+				JP
+
+AC-4A-56   (hex)		Cisco Systems, Inc
+AC4A56     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-EA-B5   (hex)		Extreme Networks, Inc.
+F4EAB5     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+00-19-77   (hex)		Extreme Networks, Inc.
+001977     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+08-EA-44   (hex)		Extreme Networks, Inc.
+08EA44     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+B0-B5-C3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B0B5C3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+70-4A-0E   (hex)		AMPAK Technology,Inc.
+704A0E     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+08-30-6B   (hex)		Palo Alto Networks
+08306B     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+00-86-9C   (hex)		Palo Alto Networks
+00869C     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+4C-B9-11   (hex)		Raisecom Technology CO.,LTD
+4CB911     (base 16)		Raisecom Technology CO.,LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+40-47-6A   (hex)		Astro Gaming
+40476A     (base 16)		Astro Gaming
+				340 Bryant St., Suite 101
+				San Francisco  CA  94107
+				US
+
+4C-CE-2D   (hex)		Danlaw Inc
+4CCE2D     (base 16)		Danlaw Inc
+				23700 research Dr.
+				Farmington Hills  MI  48335
+				US
+
+30-B2-37   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+30B237     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+BC-5A-56   (hex)		Cisco Systems, Inc
+BC5A56     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B8-7C-F2   (hex)		Extreme Networks, Inc.
+B87CF2     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+88-2B-94   (hex)		MADOKA SYSTEM Co.,Ltd.
+882B94     (base 16)		MADOKA SYSTEM Co.,Ltd.
+				2-105 Hanasakidai Moriyama-ku
+				Nagoya    463-0808
+				JP
+
+7C-EF-61   (hex)		STR Elektronik Josef Schlechtinger GmbH
+7CEF61     (base 16)		STR Elektronik Josef Schlechtinger GmbH
+				Auf dem Ohl 9
+				Wenden    57482
+				DE
+
+64-A9-65   (hex)		Linkflow Co., Ltd.
+64A965     (base 16)		Linkflow Co., Ltd.
+				54, Nonhyeon-ro 2-gil, Gangnam-gu
+				Seoul    06313
+				KR
+
+24-62-CE   (hex)		Aruba, a Hewlett Packard Enterprise Company
+2462CE     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+68-E2-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68E209     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-05-89   (hex)		T-Mobile, USA
+400589     (base 16)		T-Mobile, USA
+				3625 132nd Ave SE
+				BELLEVUE  WA  98006
+				US
+
+C0-9B-F4   (hex)		IEEE Registration Authority
+C09BF4     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F4-30-8B   (hex)		Xiaomi Communications Co Ltd
+F4308B     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+DC-6B-12   (hex)		worldcns inc.
+DC6B12     (base 16)		worldcns inc.
+				174, Namjo-ro 1-gil, Jocheon-eup
+				Jeju-si  Jeju-do  63335
+				KR
+
+70-03-9F   (hex)		Espressif Inc.
+70039F     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+A0-DE-0F   (hex)		Huawei Device Co., Ltd.
+A0DE0F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F4-87-C5   (hex)		Huawei Device Co., Ltd.
+F487C5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+08-00-88   (hex)		Brocade Communications Systems LLC
+080088     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-01-0F   (hex)		Brocade Communications Systems LLC
+00010F     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+08-B0-55   (hex)		ASKEY COMPUTER CORP
+08B055     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+04-5F-B9   (hex)		Cisco Systems, Inc
+045FB9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+CC-4E-24   (hex)		Brocade Communications Systems LLC
+CC4E24     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-E0-52   (hex)		Brocade Communications Systems LLC
+00E052     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+98-DF-82   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+98DF82     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+3C-F6-52   (hex)		zte corporation
+3CF652     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+5C-0F-FB   (hex)		Amino Communications Ltd
+5C0FFB     (base 16)		Amino Communications Ltd
+				1010 Cambourne Business Park
+				Cambourne  Cambs  CB23 6DP
+				GB
+
+74-58-F3   (hex)		Amazon Technologies Inc.
+7458F3     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-06-31   (hex)		Calix Inc.
+000631     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+A8-05-77   (hex)		Netlist, Inc.
+A80577     (base 16)		Netlist, Inc.
+				175 Technology
+				Irvine  CA  92618
+				US
+
+E4-3A-65   (hex)		MofiNetwork Inc
+E43A65     (base 16)		MofiNetwork Inc
+				11 Boynton Cir
+				Markham  Ontario  L6C 1A8
+				CA
+
+08-AA-55   (hex)		Motorola Mobility LLC, a Lenovo Company
+08AA55     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+54-21-9D   (hex)		Samsung Electronics Co.,Ltd
+54219D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-8B-E8   (hex)		Masimo Corporation
+C88BE8     (base 16)		Masimo Corporation
+				40 Parker
+				Irvine  CA  92618
+				US
+
+F0-41-C6   (hex)		Heat Tech Company, Ltd.
+F041C6     (base 16)		Heat Tech Company, Ltd.
+				221A, Tikhookeanskaya st.
+				Khabarovsk    680033
+				RU
+
+40-40-28   (hex)		ZIV
+404028     (base 16)		ZIV
+				Polígono Parque Tecnológico, 210
+				ZAMUDIO  VIZCAYA  48170
+				ES
+
+F8-6C-03   (hex)		Shenzhen Teleone Technology Co., Ltd
+F86C03     (base 16)		Shenzhen Teleone Technology Co., Ltd
+				TOWER B 5/F, SHANSHUI BUILDING, NANSHAN YUNGU INNOVATION INDUSTRY PARK, 1183 LIUXIAN AVENUE, NANSHAN, SHENZHEN, CHINA
+				Shenzhen    518000
+				CN
+
+D8-71-4D   (hex)		Texas Instruments
+D8714D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+0C-EC-80   (hex)		Texas Instruments
+0CEC80     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+10-5D-DC   (hex)		Huawei Device Co., Ltd.
+105DDC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-73-85   (hex)		Huawei Device Co., Ltd.
+DC7385     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-55-D5   (hex)		Huawei Device Co., Ltd.
+5455D5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-15-D2   (hex)		Xantech Corporation
+0015D2     (base 16)		Xantech Corporation
+				5919 Sea Otter Place
+				Carlsbad  CA  92010
+				US
+
+00-1F-40   (hex)		Speakercraft Inc.
+001F40     (base 16)		Speakercraft Inc.
+				5919 Sea Otter Place
+				Carlsbad  CA  92010
+				US
+
+18-45-93   (hex)		Taicang T&W Electronics
+184593     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+CC-9E-CA   (hex)		HMD Global Oy
+CC9ECA     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo  Espoo  02600
+				FI
+
+3C-30-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C306F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-EA-E7   (hex)		Shanghai High-Flying Electronics  Technology Co., Ltd
+34EAE7     (base 16)		Shanghai High-Flying Electronics  Technology Co., Ltd
+				Room 1002,#1Building,No.3000 Longdong Avenue,Pudong
+				Shanghai  Shanghai  201202
+				CN
+
+D4-AB-CD   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+D4ABCD     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+80-E1-BF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+80E1BF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-2C-D0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+482CD0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-19-32   (hex)		Gude Systems GmbH
+001932     (base 16)		Gude Systems GmbH
+				Von-der-Wettern-Str. 23
+				Cologne  NRW  51149
+				DE
+
+A0-CA-A5   (hex)		INTELLIGENCE TECHNOLOGY OF CEC CO., LTD
+A0CAA5     (base 16)		INTELLIGENCE TECHNOLOGY OF CEC CO., LTD
+				Tower A, NO.2 Lutuan Road, The sountern Of Future Science and Tech Zone, Changping District
+				Beijing  Beijing  102209
+				CN
+
+5C-5F-67   (hex)		Intel Corporate
+5C5F67     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+0C-54-15   (hex)		Intel Corporate
+0C5415     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+30-24-32   (hex)		Intel Corporate
+302432     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+DC-8B-28   (hex)		Intel Corporate
+DC8B28     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+1C-1B-B5   (hex)		Intel Corporate
+1C1BB5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+F8-34-41   (hex)		Intel Corporate
+F83441     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+E4-70-B8   (hex)		Intel Corporate
+E470B8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+E0-0E-E4   (hex)		DWnet Technologies(Suzhou) Corporation
+E00EE4     (base 16)		DWnet Technologies(Suzhou) Corporation
+				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
+				Suzhou    21500
+				CN
+
+E8-85-4B   (hex)		Apple, Inc.
+E8854B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-EC-95   (hex)		Apple, Inc.
+28EC95     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-FD-B1   (hex)		LG Electronics
+58FDB1     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+E0-2B-96   (hex)		Apple, Inc.
+E02B96     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-46-9D   (hex)		Cisco Meraki
+A8469D     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+6C-DE-A9   (hex)		Cisco Meraki
+6CDEA9     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+8C-CE-FD   (hex)		Shenzhen zhouhai technology co.,LTD
+8CCEFD     (base 16)		Shenzhen zhouhai technology co.,LTD
+				401-403,415-416, Area A, Block B, West Silicon Valley, 5010 Baoan Avenue, Baoan District, Shenzhen, China
+				Shenzhen  Guangdong  518110
+				CN
+
+50-FB-19   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+50FB19     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
+				SHEN ZHEN  GUANG DONG  518000
+				CN
+
+D0-AB-D5   (hex)		Intel Corporate
+D0ABD5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+68-17-29   (hex)		Intel Corporate
+681729     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+B8-08-CF   (hex)		Intel Corporate
+B808CF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+DC-71-96   (hex)		Intel Corporate
+DC7196     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+50-E0-85   (hex)		Intel Corporate
+50E085     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+94-08-C7   (hex)		Huawei Device Co., Ltd.
+9408C7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-CA-63   (hex)		Huawei Device Co., Ltd.
+C8CA63     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-3B-8F   (hex)		Intel Corporate
+983B8F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+D0-C6-37   (hex)		Intel Corporate
+D0C637     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+04-EA-56   (hex)		Intel Corporate
+04EA56     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+D4-3B-04   (hex)		Intel Corporate
+D43B04     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+38-68-93   (hex)		Intel Corporate
+386893     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+D8-3B-BF   (hex)		Intel Corporate
+D83BBF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+14-F6-D8   (hex)		Intel Corporate
+14F6D8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+E0-D4-E8   (hex)		Intel Corporate
+E0D4E8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+94-E6-F7   (hex)		Intel Corporate
+94E6F7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+4C-1D-96   (hex)		Intel Corporate
+4C1D96     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+70-3A-A6   (hex)		New H3C Technologies Co., Ltd
+703AA6     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+94-37-F7   (hex)		Huawei Device Co., Ltd.
+9437F7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-6C-59   (hex)		Intel Corporate
+046C59     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+90-3F-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+903FEA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-AB-48   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20AB48     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-D7-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CCD73C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-40-D0   (hex)		OCOSMOS Co., LTD
+D440D0     (base 16)		OCOSMOS Co., LTD
+				(Tamnip-Dong) #1, 263-1 Techno 2-Ro Yuseong-Gu
+				Daejeon  Daejeon  34026
+				KR
+
+94-E7-0B   (hex)		Intel Corporate
+94E70B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+00-1E-E0   (hex)		Urmet SpA
+001EE0     (base 16)		Urmet SpA
+				Via Bologna 188/C
+				Torino  TO  I-10154
+				IT
+
+DC-D9-AE   (hex)		Nokia Shanghai Bell Co., Ltd.
+DCD9AE     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+98-B8-BC   (hex)		Samsung Electronics Co.,Ltd
+98B8BC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-4E-16   (hex)		Samsung Electronics Co.,Ltd
+184E16     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C0-3D-03   (hex)		Samsung Electronics Co.,Ltd
+C03D03     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-97-B1   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+A497B1     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+BC-A9-93   (hex)		Cambium Networks Limited
+BCA993     (base 16)		Cambium Networks Limited
+				Unit B2, Linhay Business Park,
+				Ashburton  Devon  TQ13 7UP
+				GB
+
+10-74-6F   (hex)		MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.
+10746F     (base 16)		MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.
+				INNOPLEX, NO. 2A, MEDAN BAYAN LEPAS, BAYAN LEPAS TECHNOPLEX
+				BAYAN LEPAS  PENANG  11900
+				MY
+
+00-92-7D   (hex)		Ficosa Internationa(Taicang) C0.,Ltd.
+00927D     (base 16)		Ficosa Internationa(Taicang) C0.,Ltd.
+				No.518, Middle Suzhou Rd., Taicang Economy Developing Area,  Taicang,
+				Suzhou  Jiangsu  215400
+				CN
+
+44-16-22   (hex)		Microsoft Corporation
+441622     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+44-E6-B0   (hex)		China Mobile IOT Company Limited
+44E6B0     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+74-7A-90   (hex)		Murata Manufacturing Co., Ltd.
+747A90     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+24-E9-CA   (hex)		Huawei Device Co., Ltd.
+24E9CA     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-00-7D   (hex)		zte corporation
+14007D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+94-AE-F0   (hex)		Cisco Systems, Inc
+94AEF0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+1C-08-C1   (hex)		LG Innotek
+1C08C1     (base 16)		LG Innotek
+				978-1 Jangduk dong, Gwangsangu
+				Gwangju  Gwangju  506-731
+				KR
+
+9C-F6-1A   (hex)		Carrier Fire & Security
+9CF61A     (base 16)		Carrier Fire & Security
+				Kelvinstraat 7
+				DH Weert    6003
+				NL
+
+58-B6-23   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+58B623     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District
+				Beijing  Beijing  100085
+				CN
+
+FC-73-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC73FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-45-62   (hex)		ANDRA Sp. z o. o.
+044562     (base 16)		ANDRA Sp. z o. o.
+				Pryzmaty 6/8
+				Warszawa    02-226
+				PL
+
+00-26-9E   (hex)		Quanta Computer Inc.
+00269E     (base 16)		Quanta Computer Inc.
+				NO. 211, WEN HWA 2RD., KUEI SHAN HSIANG, TAIPEI, SHIEN
+				TAO YUAN    333
+				TW
+
+C4-54-44   (hex)		Quanta Computer Inc.
+C45444     (base 16)		Quanta Computer Inc.
+				No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang, Tao Yuan Shien, Taiwan, R. O. C.
+				Taoyuan  Taiwan  33377
+				TW
+
+00-C0-9F   (hex)		Quanta Computer Inc.
+00C09F     (base 16)		Quanta Computer Inc.
+				7F., 116, HOU-KANG ST.,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-1B-24   (hex)		Quanta Computer Inc.
+001B24     (base 16)		Quanta Computer Inc.
+				No. 211, Wen Hwa 2nd Rd.,
+				Kuei Shan Hsiang  Tao Yuan Shien  333
+				TW
+
+C8-0A-A9   (hex)		Quanta Computer Inc.
+C80AA9     (base 16)		Quanta Computer Inc.
+				211, Wen Hwa 2nd Rd.,
+				Tao Yuan  Kuei Shan  33377
+				TW
+
+60-EB-69   (hex)		Quanta Computer Inc.
+60EB69     (base 16)		Quanta Computer Inc.
+				211, Wen Hwa 2nd Rd.,Kuei Shan, 
+				Tao Yuan    33377
+				TW
+
+74-F7-F6   (hex)		Shanghai Sunmi Technology Co.,Ltd.
+74F7F6     (base 16)		Shanghai Sunmi Technology Co.,Ltd.
+				Room 505, KIC Plaza, No.388 Song Hu Road, Yang Pu District, Shanghai, China
+				Shanghai  Yang Pu District  200433
+				CN
+
+24-1A-E6   (hex)		Huawei Device Co., Ltd.
+241AE6     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+60-B7-6E   (hex)		Google, Inc.
+60B76E     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+B4-23-30   (hex)		Itron Inc
+B42330     (base 16)		Itron Inc
+				2111 N Molter Rd
+				Liberty Lake  WA  99019
+				US
+
+08-4E-BF   (hex)		Sumitomo Electric Industries, Ltd
+084EBF     (base 16)		Sumitomo Electric Industries, Ltd
+				1-1-3, Shimaya, Konohana-ku
+				Osaka    554-0024
+				JP
+
+A8-02-DB   (hex)		zte corporation
+A802DB     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+1C-5D-80   (hex)		Mitubishi Hitachi Power Systems Industries Co., Ltd.
+1C5D80     (base 16)		Mitubishi Hitachi Power Systems Industries Co., Ltd.
+				Nakaku Aioimachi
+				Yokohama    2310012
+				JP
+
+80-16-05   (hex)		Vodafone Italia S.p.A.
+801605     (base 16)		Vodafone Italia S.p.A.
+				Via Lorenteggio nr. 240
+				Milan  Italy  20147
+				IT
+
+3C-9C-0F   (hex)		Intel Corporate
+3C9C0F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+5C-44-3E   (hex)		Skullcandy
+5C443E     (base 16)		Skullcandy
+				6301 N. Landmark Dr. 
+				Park City  UT  84098
+				US
+
+F8-82-00   (hex)		CaptionCall
+F88200     (base 16)		CaptionCall
+				4215 Riverboat Road
+				Salt Lake City  UT  84123
+				US
+
+08-FB-EA   (hex)		AMPAK Technology,Inc.
+08FBEA     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+34-0F-66   (hex)		Web Sensing LLC
+340F66     (base 16)		Web Sensing LLC
+				P.O. Box 692
+				Hanover  NH  03755
+				US
+
+58-65-E6   (hex)		infomark
+5865E6     (base 16)		infomark
+				#801, KINS TOWER, JEONGJA-DONG
+				SEONGNAM  GYOUNGGI  463-847
+				KR
+
+00-50-F1   (hex)		Maxlinear, Inc
+0050F1     (base 16)		Maxlinear, Inc
+				94 Em-Hamoshavot Way.
+				Petach-Tikva    
+				IL
+
+F4-E5-78   (hex)		LLC Proizvodstvennaya Kompania TransService
+F4E578     (base 16)		LLC Proizvodstvennaya Kompania TransService
+				Ulitsa Podolskih Kursantov,  build. 3, of. 133
+				Moscow  Moscow  117545
+				RU
+
+08-54-BB   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+0854BB     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+60-EB-5A   (hex)		Asterfusion Data Technologies Co.,Ltd
+60EB5A     (base 16)		Asterfusion Data Technologies Co.,Ltd
+				B401, Building 2, Creative Industry Park, No.328 Xinghu Street, SIP, Suzhou
+				suzhou    215123
+				CN
+
+E4-D3-73   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4D373     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-BC-9A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0BC9A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-2C-09   (hex)		Nintendo Co.,Ltd
+702C09     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+E8-1B-69   (hex)		Sercomm Corporation.
+E81B69     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+68-52-D6   (hex)		UGame Technology Co.,Ltd
+6852D6     (base 16)		UGame Technology Co.,Ltd
+				3F, Bld.7, F518 Idea Land, No. 1065 Baoyuan Road, Xixiang Street, Baoan District
+				Shenzhen    518102
+				CN
+
+90-12-A1   (hex)		We Corporation Inc.
+9012A1     (base 16)		We Corporation Inc.
+				201, 33, Deokcheon-ro, Manan-gu
+				Anyang-si  Gyeonggi-do  14088
+				KR
+
+B8-80-35   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
+B88035     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
+				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
+				Shenzhen  Guangdong  518057
+				CN
+
+00-17-11   (hex)		Cytiva Sweden AB
+001711     (base 16)		Cytiva Sweden AB
+				Björkgatan 30
+				Uppsala  SE  75184
+				SE
+
+B4-C2-6A   (hex)		Garmin International
+B4C26A     (base 16)		Garmin International
+				1200 E. 151st St
+				Olathe  KS  66062
+				US
+
+E8-9F-80   (hex)		Belkin International Inc.
+E89F80     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista    90094
+				US
+
+BC-5C-4C   (hex)		ELECOM CO.,LTD.
+BC5C4C     (base 16)		ELECOM CO.,LTD.
+				2F Kudan First Place Bldg. 4-1-28
+				Chiyoda-ku  Kudan Kita  102-0073
+				JP
+
+04-AB-18   (hex)		ELECOM CO.,LTD.
+04AB18     (base 16)		ELECOM CO.,LTD.
+				2F Kudan First Place Bldg. 4-1-28
+				Chiyoda-ku  Kudan Kita  102-0073
+				JP
+
+6C-E5-F7   (hex)		New H3C Technologies Co., Ltd
+6CE5F7     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+B8-DD-71   (hex)		zte corporation
+B8DD71     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+78-F8-B8   (hex)		Rako Controls Ltd
+78F8B8     (base 16)		Rako Controls Ltd
+				Knight Road
+				Rochester  Kent  ME2 2AH
+				GB
+
+00-16-12   (hex)		Otsuka Electronics Co., Ltd.
+001612     (base 16)		Otsuka Electronics Co., Ltd.
+				1-10 Sasagaoka, Minakuchi
+				kouka  shiga  528-0061
+				JP
+
+A4-51-29   (hex)		XAG
+A45129     (base 16)		XAG
+				Block C, 115 Gaopu Road
+				Guangzhou    510663
+				CN
+
+5C-02-72   (hex)		Silicon Laboratories
+5C0272     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+FC-4A-E9   (hex)		Castlenet Technology Inc.
+FC4AE9     (base 16)		Castlenet Technology Inc.
+				5F., No. 10, Daye Rd., Beitou Dist.
+				Taipei City    112030
+				TW
+
+04-46-CF   (hex)		Beijing Venustech Cybervision Co.,Ltd.
+0446CF     (base 16)		Beijing Venustech Cybervision Co.,Ltd.
+				Venus Plaza No.21Zhongguancun Software Park,No.8 Dongbeiwang Xilu, Haidian District
+				Beijing  Beijing  100193
+				CN
+
+CC-87-4A   (hex)		Nokia
+CC874A     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-07-8E   (hex)		Garz & Fricke GmbH
+00078E     (base 16)		Garz & Fricke GmbH
+				Schlachthofstrasse 20
+				Hamburg  Hamburg  21079
+				DE
+
+B4-36-D1   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+B436D1     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-61-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+006151     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-76-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC76C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+DC-77-4C   (hex)		Cisco Systems, Inc
+DC774C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-44-41   (hex)		Remote Solution
+204441     (base 16)		Remote Solution
+				71, Gunpo Cheom Dan San eop 2-ro
+				Gunpo-si  Gyeonggi-do  15880
+				KR
+
+B8-5F-98   (hex)		Amazon Technologies Inc.
+B85F98     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+A0-85-FC   (hex)		Microsoft Corporation
+A085FC     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+C4-98-86   (hex)		Qorvo International Pte. Ltd.
+C49886     (base 16)		Qorvo International Pte. Ltd.
+				1 Changi Business Park Avenue 1
+				#04-01    486058
+				SG
+
+94-FF-61   (hex)		China Mobile Group Device Co.,Ltd.
+94FF61     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+10-19-65   (hex)		New H3C Technologies Co., Ltd
+101965     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+80-F1-F1   (hex)		Tech4home, Lda
+80F1F1     (base 16)		Tech4home, Lda
+				Rua de Fundoes N151
+				Sao Joao da Madeira  Aveiro  3700-121
+				PT
+
+14-A9-D0   (hex)		F5 Networks, Inc.
+14A9D0     (base 16)		F5 Networks, Inc.
+				801 5th Avenue
+				Seattle  WA  98104
+				US
+
+1C-50-1E   (hex)		Sunplus Technology Co., Ltd.
+1C501E     (base 16)		Sunplus Technology Co., Ltd.
+				19, Innovation First Road, Hsinchu Science Park
+				Hsinchu    300
+				TW
+
+40-95-05   (hex)		ACOINFO TECHNOLOGY CO.,LTD
+409505     (base 16)		ACOINFO TECHNOLOGY CO.,LTD
+				Building No.12,Zhongguancun Cuihu Technology Park,Haidian District,Beijing,China
+				Beijing    100095
+				CN
+
+FC-66-CF   (hex)		Apple, Inc.
+FC66CF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-1D-06   (hex)		Apple, Inc.
+AC1D06     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-A8-FC   (hex)		Apple, Inc.
+44A8FC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-10-93   (hex)		Apple, Inc.
+F81093     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-D8-9E   (hex)		Huawei Device Co., Ltd.
+5CD89E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-05-DD   (hex)		Shenzhen Cultraview Digital Technology Co., Ltd
+0405DD     (base 16)		Shenzhen Cultraview Digital Technology Co., Ltd
+				F6,M6,Maqueling, High-tech park, Nanshan district
+				Shenzhen  Guangdong  518057
+				CN
+
+38-97-A4   (hex)		ELECOM CO.,LTD.
+3897A4     (base 16)		ELECOM CO.,LTD.
+				2F Kudan First Place Bldg. 4-1-28
+				Chiyoda-ku  Kudan Kita  102-0073
+				JP
+
+E4-33-AE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+E433AE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+DC-E9-94   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+DCE994     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+38-7A-3C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+387A3C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+8C-CE-4E   (hex)		Espressif Inc.
+8CCE4E     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+B8-2D-28   (hex)		AMPAK Technology,Inc.
+B82D28     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+EC-C8-9C   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+ECC89C     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+F0-13-C1   (hex)		Hannto Technology Co., Ltd
+F013C1     (base 16)		Hannto Technology Co., Ltd
+				Rm 704,No.1,Lane 88,Shengrong Road, Free Trade Pilot Area,
+				Shanghai  Shanghai  200120
+				CN
+
+F8-0D-AC   (hex)		HP Inc.
+F80DAC     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+88-DA-1A   (hex)		Redpine Signals, Inc.
+88DA1A     (base 16)		Redpine Signals, Inc.
+				Plot 87, Sagar Society 
+				Hyderabad  AP  500034
+				IN
+
+40-B5-C1   (hex)		Cisco Systems, Inc
+40B5C1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-47-91   (hex)		Iris ID Systems, Inc.
+E44791     (base 16)		Iris ID Systems, Inc.
+				8 Clarke Drive
+				Cranbury    08512
+				US
+
+00-60-65   (hex)		B&R Industrial Automation GmbH 
+006065     (base 16)		B&R Industrial Automation GmbH 
+				B&R Straße 1
+				Eggelsberg    5142
+				AT
+
+84-9D-C2   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
+849DC2     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
+				9th Floor, No. 5 Building, 2145 Jinshajiang Rd., Putuo District
+				Shanghai    200333
+				CN
+
+18-45-16   (hex)		Texas Instruments
+184516     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D0-2E-AB   (hex)		Texas Instruments
+D02EAB     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+84-54-DF   (hex)		Huawei Device Co., Ltd.
+8454DF     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F0-F7-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F0F7E7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-55-BB   (hex)		Songwoo Information & Technology Co., Ltd
+8C55BB     (base 16)		Songwoo Information & Technology Co., Ltd
+				24-9, Jinju-daero 404beon-gil, Jinju-si, Gyeongsangnam-do, Korea 
+				Jinju  Gyeongsangnam-do  52826
+				KR
+
+7C-8F-DE   (hex)		DWnet Technologies(Suzhou) Corporation
+7C8FDE     (base 16)		DWnet Technologies(Suzhou) Corporation
+				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
+				Suzhou    21500
+				CN
+
+98-F1-81   (hex)		New H3C Technologies Co., Ltd
+98F181     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+90-80-8F   (hex)		Huawei Device Co., Ltd.
+90808F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-A9-CF   (hex)		Amazon Technologies Inc.
+40A9CF     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+58-95-D8   (hex)		IEEE Registration Authority
+5895D8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+08-38-E6   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+0838E6     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+E8-C2-DD   (hex)		Infinix mobility limited
+E8C2DD     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+48-D8-90   (hex)		FN-LINK TECHNOLOGY LIMITED
+48D890     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+78-1F-11   (hex)		RAB Lighting
+781F11     (base 16)		RAB Lighting
+				Northvale (NJ) 141 Legrand  Ave. Northvale, NJ 07647
+				 Northvale  NJ  07647
+				US
+
+F8-B9-5A   (hex)		LG Innotek
+F8B95A     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+C4-1C-9C   (hex)		JiQiDao
+C41C9C     (base 16)		JiQiDao
+				No.19, SuYuan Avenue, Jiangning District
+				NanJing  Jiangsu  210000
+				CN
+
+D4-4F-67   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D44F67     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-FF-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B4FF98     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-71-27   (hex)		Silicon Laboratories
+847127     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+00-26-4E   (hex)		r2p GmbH
+00264E     (base 16)		r2p GmbH
+				Norderhofenden 12-13
+				Flensburg    24937
+				DE
+
+B0-BB-E5   (hex)		Sagemcom Broadband SAS
+B0BBE5     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C4-18-E9   (hex)		Samsung Electronics Co.,Ltd
+C418E9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-E5-7F   (hex)		Samsung Electronics Co.,Ltd
+1CE57F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-C5-3C   (hex)		Cisco Systems, Inc
+B0C53C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+EC-CE-13   (hex)		Cisco Systems, Inc
+ECCE13     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+10-71-00   (hex)		Huawei Device Co., Ltd.
+107100     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+8C-FD-DE   (hex)		Sagemcom Broadband SAS
+8CFDDE     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+A4-68-BC   (hex)		Oakley Inc.
+A468BC     (base 16)		Oakley Inc.
+				1 Icon
+				Foothill Ranch  CA  92610
+				US
+
+60-7E-A4   (hex)		Shanghai Imilab Technology Co.Ltd
+607EA4     (base 16)		Shanghai Imilab Technology Co.Ltd
+				29F, A Tower, New Caohejing International Business Center, Guiping Road, Xuhui District
+				Shanghai  Shanghai  200000
+				CN
+
+78-95-EB   (hex)		ITEL MOBILE LIMITED
+7895EB     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+1C-9F-4E   (hex)		COOSEA GROUP (HK) COMPANY LIMITED
+1C9F4E     (base 16)		COOSEA GROUP (HK) COMPANY LIMITED
+				UNIT 5-6 16/F MULTIFIELD PLAZA 3-7A PRAT AVENUE TSIMSHATSUI
+				KL    999077
+				HK
+
+14-AB-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14AB02     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-5B-D5   (hex)		ARRIS Group, Inc.
+BC5BD5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+08-55-31   (hex)		Routerboard.com
+085531     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+3C-61-05   (hex)		Espressif Inc.
+3C6105     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+24-06-AA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+2406AA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+84-30-95   (hex)		Hon Hai Precision IND.CO.,LTD
+843095     (base 16)		Hon Hai Precision IND.CO.,LTD
+				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
+				TAIPEI  TAIWAN  33859
+				CN
+
+08-65-F0   (hex)		JM Zengge Co., Ltd
+0865F0     (base 16)		JM Zengge Co., Ltd
+				5/F Torch building, Jinou Road#288, Jianghai District
+				Jiangmen  Guangdong  529080
+				CN
+
+AC-47-1B   (hex)		Huawei Device Co., Ltd.
+AC471B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-31-92   (hex)		TP-Link Corporation Limited
+003192     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+A4-CC-B9   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+A4CCB9     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+90-FF-D6   (hex)		Honor Device Co., Ltd.
+90FFD6     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+6C-B8-81   (hex)		zte corporation
+6CB881     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+98-9A-B9   (hex)		zte corporation
+989AB9     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-8A-55   (hex)		Huawei Device Co., Ltd.
+008A55     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-A2-8A   (hex)		Huawei Device Co., Ltd.
+64A28A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-56-E3   (hex)		Apple, Inc.
+B456E3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-20-B8   (hex)		Apple, Inc.
+4C20B8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-88-E6   (hex)		Apple, Inc.
+1488E6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-0F-9A   (hex)		D-Link International
+BC0F9A     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+94-7B-BE   (hex)		Ubicquia LLC
+947BBE     (base 16)		Ubicquia LLC
+				BoA Building–Suite 1750, 401 E. Las Olas Boulevard
+				Fort Lauderdale  FL  33301
+				US
+
+24-64-9F   (hex)		Huawei Device Co., Ltd.
+24649F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+0C-17-73   (hex)		Huawei Device Co., Ltd.
+0C1773     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E8-1E-92   (hex)		Huawei Device Co., Ltd.
+E81E92     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+88-8E-68   (hex)		Huawei Device Co., Ltd.
+888E68     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+80-74-84   (hex)		ALL Winner (Hong Kong) Limited
+807484     (base 16)		ALL Winner (Hong Kong) Limited
+				Unit No.1301,13F,Sunbeam Plaza,1155 Canton Road,Mongkok,Kowloon,Hong Kong
+				Hong Kong    999077
+				CN
+
+04-98-F3   (hex)		ALPSALPINE CO,.LTD
+0498F3     (base 16)		ALPSALPINE CO,.LTD
+				6-1 NISHIDA
+				KAKUDA  MIYAGI PREF  9876-8501
+				JP
+
+64-D4-BD   (hex)		ALPSALPINE CO,.LTD
+64D4BD     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				KAKUDA-CITY  MIYAGI-PREF  981-1595
+				JP
+
+34-C7-31   (hex)		ALPSALPINE CO,.LTD
+34C731     (base 16)		ALPSALPINE CO,.LTD
+				6-3-36 Furukawanakazato,
+				Osaki  Miyagi-pref  989-6181
+				JP
+
+00-06-F5   (hex)		ALPSALPINE CO,.LTD
+0006F5     (base 16)		ALPSALPINE CO,.LTD
+				6-3-36 Furukawanakazato,
+				Osaki  Miyagi-pref  989-6181
+				JP
+
+00-07-04   (hex)		ALPSALPINE CO,.LTD
+000704     (base 16)		ALPSALPINE CO,.LTD
+				6-3-36 Furukawanakazato,
+				Osaki  Miyagi-pref  989-6181
+				JP
+
+00-06-F7   (hex)		ALPSALPINE CO,.LTD
+0006F7     (base 16)		ALPSALPINE CO,.LTD
+				6-3-36 Furukawanakazato,
+				Osaki  Miyagi-pref  989-6181
+				JP
+
+88-23-8C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+88238C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+20-FF-36   (hex)		IFLYTEK CO.,LTD.
+20FF36     (base 16)		IFLYTEK CO.,LTD.
+				National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
+				Hefei  An hui  230088
+				CN
+
+BC-42-8C   (hex)		ALPSALPINE CO,.LTD
+BC428C     (base 16)		ALPSALPINE CO,.LTD
+				nishida  6-1 
+				Kakuda-City  Miyagi-Pref  981-1595
+				JP
+
+74-95-EC   (hex)		ALPSALPINE CO,.LTD
+7495EC     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				Kakuda  Miyagi-Pref  981-1595
+				JP
+
+98-ED-7E   (hex)		eero inc.
+98ED7E     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+8C-AE-49   (hex)		IEEE Registration Authority
+8CAE49     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-21-4F   (hex)		ALPSALPINE CO,.LTD
+00214F     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi,
+				Soma-city,  Fukushima-pref.,  976-8501
+				JP
+
+78-CF-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+78CF2F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-3B-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A83B5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-EE-7B   (hex)		Roku, Inc
+B0EE7B     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+D8-31-34   (hex)		Roku, Inc
+D83134     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+10-59-32   (hex)		Roku, Inc
+105932     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+A8-CC-6F   (hex)		HMD Global Oy
+A8CC6F     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+5C-6F-69   (hex)		Broadcom Limited
+5C6F69     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+D0-12-CB   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+D012CB     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+FC-44-82   (hex)		Intel Corporate
+FC4482     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+D8-F8-83   (hex)		Intel Corporate
+D8F883     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E8-84-A5   (hex)		Intel Corporate
+E884A5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E8-F4-08   (hex)		Intel Corporate
+E8F408     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+74-8B-29   (hex)		Micobiomed
+748B29     (base 16)		Micobiomed
+				54 Changeop-ro
+				54 Changeop-ro  Gyeonggi-do  13449
+				KR
+
+00-25-50   (hex)		Riverbed Technology, Inc.
+002550     (base 16)		Riverbed Technology, Inc.
+				680 Folsom St
+				San Francisco  CA  94107
+				US
+
+58-B0-FE   (hex)		Team EPS GmbH
+58B0FE     (base 16)		Team EPS GmbH
+				Am Herdicksbach 2 - Halle 9
+				Waltrop    45731
+				DE
+
+14-3F-A6   (hex)		Sony Home Entertainment&Sound Products Inc
+143FA6     (base 16)		Sony Home Entertainment&Sound Products Inc
+				Sony City Osaki 2-10-1 Osaki Shinagawa-ku
+				Tokyo  Japan  141-8610
+				JP
+
+F0-FE-E7   (hex)		Huawei Device Co., Ltd.
+F0FEE7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-21-1D   (hex)		Huawei Device Co., Ltd.
+54211D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-49-5D   (hex)		Huawei Device Co., Ltd.
+04495D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+44-D4-53   (hex)		Sagemcom Broadband SAS
+44D453     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+DC-A1-20   (hex)		Nokia
+DCA120     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+50-52-3B   (hex)		Nokia
+50523B     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+DC-CD-74   (hex)		Japan E.M.Solutions Co., Ltd.
+DCCD74     (base 16)		Japan E.M.Solutions Co., Ltd.
+				35 Saho
+				Kato    673-1447
+				JP
+
+A0-3B-01   (hex)		Kyung In Electronics
+A03B01     (base 16)		Kyung In Electronics
+				#1411, Byucksan Digital Valley 2, 184, Gasan Digital2-ro, Geumcheon-gu
+				 Seoul    08501
+				KR
+
+14-5E-69   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+145E69     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+48-4C-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+484C29     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-D4-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4D438     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-28-0B   (hex)		Honor Device Co., Ltd.
+C0280B     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+9C-EA-97   (hex)		Honor Device Co., Ltd.
+9CEA97     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+EC-0D-E4   (hex)		Amazon Technologies Inc.
+EC0DE4     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+0C-96-CD   (hex)		MERCURY CORPORATION
+0C96CD     (base 16)		MERCURY CORPORATION
+				90, Gajaeul-ro, Seo-gu
+				INCHEON    22830
+				KR
+
+E8-D2-FF   (hex)		Sagemcom Broadband SAS
+E8D2FF     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C4-E2-87   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4E287     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-B3-01   (hex)		Intel Corporate
+F4B301     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+5C-DE-34   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+5CDE34     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+E8-A0-CD   (hex)		Nintendo Co.,Ltd
+E8A0CD     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+A0-A3-F0   (hex)		D-Link International
+A0A3F0     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+84-65-69   (hex)		New H3C Technologies Co., Ltd
+846569     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+34-F7-16   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+34F716     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+9C-82-3F   (hex)		Huawei Device Co., Ltd.
+9C823F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-F6-07   (hex)		Huawei Device Co., Ltd.
+54F607     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+68-78-48   (hex)		WESTUNITIS CO., LTD.
+687848     (base 16)		WESTUNITIS CO., LTD.
+				29F Grand Front Osaka Tower-A, 4-20, Ofukacho,
+				Osaka  Kita-ku  530-0011
+				JP
+
+50-55-8D   (hex)		China Mobile IOT Company Limited
+50558D     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+64-26-56   (hex)		Shenzhen Fanweitai Technology Service Co.,Ltd
+642656     (base 16)		Shenzhen Fanweitai Technology Service Co.,Ltd
+				Room 408, 4 / F, Jinqi Zhigu Building, 1 Tangling Road, Nanshan District, Shenzhen
+				 Shenzhen    518000
+				CN
+
+F0-25-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F0258E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-74-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C746F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-E0-03   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+64E003     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+18-CE-94   (hex)		Samsung Electronics Co.,Ltd
+18CE94     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+78-37-16   (hex)		Samsung Electronics Co.,Ltd
+783716     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+28-1B-04   (hex)		Zalliant LLC
+281B04     (base 16)		Zalliant LLC
+				425 Truax Road
+				Amsterdam  NY  12010
+				US
+
+7C-50-79   (hex)		Intel Corporate
+7C5079     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+80-38-FB   (hex)		Intel Corporate
+8038FB     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+08-B4-B1   (hex)		Google, Inc.
+08B4B1     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+34-58-7C   (hex)		MIRAE INFORMATION TECHNOLOGY CO., LTD.
+34587C     (base 16)		MIRAE INFORMATION TECHNOLOGY CO., LTD.
+				GYEONGGI-DO
+				SEONGNAM-SI  JUNGWON-GU  13376
+				KR
+
+AC-82-47   (hex)		Intel Corporate
+AC8247     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+74-9A-C0   (hex)		Cachengo, Inc.
+749AC0     (base 16)		Cachengo, Inc.
+				9575 Hwy 22
+				Huntingdon  TN  38344
+				US
+
+A4-5E-5A   (hex)		ACTIVIO Inc.
+A45E5A     (base 16)		ACTIVIO Inc.
+				Takeuchi Lorie Bldg. Room 503, 1-34-12, Takadanobaba
+				Shinjuku-ku  Tokyo  1690075
+				JP
+
+5C-56-A4   (hex)		Wanan Hongsheng Electronic Co.Ltd
+5C56A4     (base 16)		Wanan Hongsheng Electronic Co.Ltd
+				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
+				Wanan  China/jiangxi  343800
+				CN
+
+B4-85-E1   (hex)		Apple, Inc.
+B485E1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-19-F8   (hex)		Apple, Inc.
+0C19F8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-1F-C6   (hex)		Apple, Inc.
+501FC6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-9B-C6   (hex)		Huawei Device Co., Ltd.
+3C9BC6     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-09-10   (hex)		Apple, Inc.
+540910     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-FC-28   (hex)		Apple, Inc.
+9CFC28     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-69-FA   (hex)		Apple, Inc.
+CC69FA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-CE-E9   (hex)		Apple, Inc.
+10CEE9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-8D-DB   (hex)		Cisco Meraki
+0C8DDB     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+CC-03-D9   (hex)		Cisco Meraki
+CC03D9     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+00-36-BE   (hex)		Northwest Towers
+0036BE     (base 16)		Northwest Towers
+				12119 NE 99th St, Suite 2000
+				Vancouver  WA  98682
+				US
+
+A8-77-E5   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+A877E5     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+10-A4-DA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+10A4DA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-20-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+382028     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-77-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E47727     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-51-07   (hex)		Intel Corporate
+105107     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+AC-74-C4   (hex)		Maytronics Ltd.
+AC74C4     (base 16)		Maytronics Ltd.
+				Kibbutz Yizrael
+				Kibbutz Yizrael    1935000
+				IL
+
+84-D6-08   (hex)		Wingtech Mobile Communications Co., Ltd.
+84D608     (base 16)		Wingtech Mobile Communications Co., Ltd.
+				No.777,Yazhong Road,Nanhu District,
+				Jiaxing  Zhejiang  314006
+				CN
+
+34-68-93   (hex)		Tecnovideo Srl
+346893     (base 16)		Tecnovideo Srl
+				Via A. De Gasperi, 3
+				Villaverla  Vicenza  36030
+				IT
+
+3C-7A-AA   (hex)		China Dragon Technology Limited
+3C7AAA     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+6C-47-60   (hex)		Sunitec Enterprise Co.,Ltd
+6C4760     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+18-32-19   (hex)		EM Microelectronic
+183219     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+28-D3-EA   (hex)		Huawei Device Co., Ltd.
+28D3EA     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A8-F2-66   (hex)		Huawei Device Co., Ltd.
+A8F266     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+84-26-7A   (hex)		GUANGDONG TAIDE ZHILIAN TECHNOLOGY CO.,LTD
+84267A     (base 16)		GUANGDONG TAIDE ZHILIAN TECHNOLOGY CO.,LTD
+				Taide Technology Park,Jinfenghuang Industrial District, Fenggang Town,
+				Dongguan  GUANGDONG  523000 
+				CN
+
+D8-EC-5E   (hex)		Belkin International Inc.
+D8EC5E     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista    90094
+				US
+
+84-FD-27   (hex)		Silicon Laboratories
+84FD27     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin    78701
+				US
+
+CC-9C-3E   (hex)		Cisco Meraki
+CC9C3E     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+FC-A9-DC   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+FCA9DC     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+FC-58-4A   (hex)		xiamenshi c-chip technology co., ltd
+FC584A     (base 16)		xiamenshi c-chip technology co., ltd
+				Baoyuan Road
+				Shenzhen City  Guangdong Province  518101
+				CN
+
+78-65-3B   (hex)		Shaoxing Ourten Electronics Co., Ltd.
+78653B     (base 16)		Shaoxing Ourten Electronics Co., Ltd.
+				3rd Floor # 7, No. 1732 Yanhua industrial park West Renmin Road,Shangyu
+				Shaoxing  Zhejiang  312000
+				CN
+
+E0-E6-56   (hex)		Nethesis  srl
+E0E656     (base 16)		Nethesis  srl
+				strada degli olmi 12
+				Pesaro  Pesaro e Urbino  61122
+				IT
+
+90-23-B4   (hex)		New H3C Technologies Co., Ltd
+9023B4     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+88-2A-5E   (hex)		New H3C Technologies Co., Ltd
+882A5E     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+84-1E-A3   (hex)		Sagemcom Broadband SAS
+841EA3     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+F4-02-23   (hex)		PAX Computer Technology(Shenzhen) Ltd.
+F40223     (base 16)		PAX Computer Technology(Shenzhen) Ltd.
+				4/F, No.3 Building, Software Park, Second Central Science-Tech Road, High-Tech
+				Shenzhen  GuangDong  518057
+				CN
+
+64-6E-E0   (hex)		Intel Corporate
+646EE0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+04-56-E5   (hex)		Intel Corporate
+0456E5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+08-10-86   (hex)		NEC Platforms, Ltd.
+081086     (base 16)		NEC Platforms, Ltd.
+				2-3 Kandatsukasamachi
+				Chiyodaku  Tokyo  101-8532
+				JP
+
+64-79-F0   (hex)		Intel Corporate
+6479F0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+1C-D1-E0   (hex)		Cisco Systems, Inc
+1CD1E0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-45-6B   (hex)		Huawei Device Co., Ltd.
+24456B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+48-38-71   (hex)		Huawei Device Co., Ltd.
+483871     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+44-BD-DE   (hex)		BHTC GmbH
+44BDDE     (base 16)		BHTC GmbH
+				Hansastrasse 40
+				Lippstadt    59557
+				DE
+
+8C-2A-8E   (hex)		DongGuan Ramaxel Memory Technology
+8C2A8E     (base 16)		DongGuan Ramaxel Memory Technology
+				No.32, Industrial East Road,Innovation Park, High-tech Industrial Development Zone, Songshan Lake, Dongguan City, Guangdong Province,China
+				DongGuan  Guangdong  523808
+				CN
+
+40-44-FD   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+4044FD     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+E8-FD-35   (hex)		Huawei Device Co., Ltd.
+E8FD35     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+EC-C5-D2   (hex)		Huawei Device Co., Ltd.
+ECC5D2     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-60-8C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+B4608C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+B8-14-DB   (hex)		OHSUNG
+B814DB     (base 16)		OHSUNG
+				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
+				GUMI  GYEONG BUK  730-030
+				KR
+
+80-07-1B   (hex)		VSOLUTION TELECOMMUNICATION TECHNOLOGY CO.,LTD.
+80071B     (base 16)		VSOLUTION TELECOMMUNICATION TECHNOLOGY CO.,LTD.
+				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
+				Guangzhou  Guangdong  510663
+				CN
+
+FC-13-F0   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
+FC13F0     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
+				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
+				Nanjing  Jiangsu  211800
+				CN
+
+1C-6E-E6   (hex)		NHNETWORKS
+1C6EE6     (base 16)		NHNETWORKS
+				54,Chemdanyeonsin-ro 30beon-gil,Buk-gu
+				Gwangju    61080
+				KR
+
+08-F6-06   (hex)		zte corporation
+08F606     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E8-9E-0C   (hex)		MAX8USA DISTRIBUTORS INC.
+E89E0C     (base 16)		MAX8USA DISTRIBUTORS INC.
+				4757 NW 72ND AVENUE
+				MIAMI  FL  33166
+				US
+
+FC-9C-98   (hex)		Arlo Technology
+FC9C98     (base 16)		Arlo Technology
+				3030 Orchard Parkway
+				San Jose  CA  95134
+				US
+
+A0-70-B7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A070B7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-B5-54   (hex)		Huawei Device Co., Ltd.
+78B554     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+68-9E-6A   (hex)		Huawei Device Co., Ltd.
+689E6A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+28-2B-96   (hex)		Huawei Device Co., Ltd.
+282B96     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+CC-68-B6   (hex)		TP-Link Corporation Limited
+CC68B6     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+64-64-4A   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+64644A     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+A4-39-B6   (hex)		SHENZHEN PEIZHE MICROELECTRONICS CO .LTD
+A439B6     (base 16)		SHENZHEN PEIZHE MICROELECTRONICS CO .LTD
+				1110 Nanshan Street, Nanshan District, Shenzhen, China Petroleum Building 2012
+				Shenzhen    518000
+				CN
+
+F4-FB-B8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4FBB8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-33-31   (hex)		Texas Instruments
+CC3331     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+2C-B8-ED   (hex)		SonicWall
+2CB8ED     (base 16)		SonicWall
+				1033 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+C8-9B-AD   (hex)		Honor Device Co., Ltd.
+C89BAD     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District,Shenzhen, Guangdong 518040, People's Republic of China
+				Shenzhen    518040
+				CN
+
+C4-5B-BE   (hex)		Espressif Inc.
+C45BBE     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+88-90-09   (hex)		Juniper Networks
+889009     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+7C-D9-F4   (hex)		UAB Teltonika Telematics
+7CD9F4     (base 16)		UAB Teltonika Telematics
+				Saltoniskiu  str. 9B-1
+				Vilnius    LT-08105
+				LT
+
+C8-C6-4A   (hex)		Flextronics Tech.(Ind) Pvt Ltd
+C8C64A     (base 16)		Flextronics Tech.(Ind) Pvt Ltd
+				365, Benjamin Road
+				Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646
+				IN
+
+FC-4E-A4   (hex)		Apple, Inc.
+FC4EA4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-BE-EC   (hex)		Apple, Inc.
+F4BEEC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-FF-4D   (hex)		Espressif Inc.
+BCFF4D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+54-E6-1B   (hex)		Apple, Inc.
+54E61B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-9A-C1   (hex)		Nokia
+D89AC1     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+F0-B1-1D   (hex)		Nokia
+F0B11D     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-04-7D   (hex)		Motorola Solutions Inc.
+00047D     (base 16)		Motorola Solutions Inc.
+				500 W Monroe Street, Ste 4400 
+				Chicago  IL  60661-3781
+				US
+
+A4-D7-95   (hex)		Wingtech Mobile Communications Co.,Ltd
+A4D795     (base 16)		Wingtech Mobile Communications Co.,Ltd
+				No.777,Yazhong Road,Nanhu District
+				Jiaxing  Zhejiang  314001
+				CN
+
+84-AB-26   (hex)		Tiinlab Corporation
+84AB26     (base 16)		Tiinlab Corporation
+				35F,Tower A,Tanglang City,3333 Liuxian Avenue,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+F8-97-53   (hex)		Huawei Device Co., Ltd.
+F89753     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+58-94-AE   (hex)		Huawei Device Co., Ltd.
+5894AE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B0-3A-CE   (hex)		Huawei Device Co., Ltd.
+B03ACE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-AB-95   (hex)		Espressif Inc.
+34AB95     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+C4-91-CF   (hex)		Luxul 
+C491CF     (base 16)		Luxul 
+				12884 Frontrunner Blvd, Suite 201
+				Draper  UT  84020
+				US
+
+58-35-6B   (hex)		TECNO MOBILE LIMITED
+58356B     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+F8-4C-DA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F84CDA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-93-4A   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+A8934A     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+A4-05-6E   (hex)		Tiinlab Corporation
+A4056E     (base 16)		Tiinlab Corporation
+				35F,Tower A,Tanglang City,3333 Liuxian Avenue,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+8C-19-B5   (hex)		Arcadyan Corporation
+8C19B5     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+C8-7B-23   (hex)		Bose Corporation
+C87B23     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+78-D9-E9   (hex)		MOMENTUM IOT
+78D9E9     (base 16)		MOMENTUM IOT
+				100 W. BROADWAY, STE. 500
+				LONG BEACH  CA  90802
+				US
+
+2C-08-23   (hex)		Sercomm France Sarl
+2C0823     (base 16)		Sercomm France Sarl
+				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
+				Moulineaux    92370
+				FR
+
+9C-1C-37   (hex)		AltoBeam (China) Inc.
+9C1C37     (base 16)		AltoBeam (China) Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+8C-E7-48   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+8CE748     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.469,Jianghui Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+98-42-65   (hex)		Sagemcom Broadband SAS
+984265     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+B8-A3-77   (hex)		Cisco Systems, Inc
+B8A377     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-4E-2D   (hex)		Cisco Systems, Inc
+E44E2D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-CC-34   (hex)		Juniper Networks
+00CC34     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+1C-D1-07   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+1CD107     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+10-3D-1C   (hex)		Intel Corporate
+103D1C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+38-87-D5   (hex)		Intel Corporate
+3887D5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+80-65-59   (hex)		EM Microelectronic
+806559     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+D0-47-C1   (hex)		Elma Electronic AG
+D047C1     (base 16)		Elma Electronic AG
+				Hofstrasse 93
+				Wetzikon  Zuerich  8620
+				CH
+
+C0-CC-42   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+C0CC42     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+C4-23-60   (hex)		Intel Corporate
+C42360     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+08-01-0F   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+08010F     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+18-52-07   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+185207     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+E0-C6-3C   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+E0C63C     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+DC-21-5C   (hex)		Intel Corporate
+DC215C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+BC-EC-A0   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+BCECA0     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+F8-BA-E6   (hex)		Nokia
+F8BAE6     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+58-FD-5D   (hex)		Hangzhou Xinyun technology Co., Ltd.
+58FD5D     (base 16)		Hangzhou Xinyun technology Co., Ltd.
+				Room 803, Block 8, Singapore Science & Technology Park
+				Hangzhou  Zhejiang  310018
+				CN
+
+24-A7-99   (hex)		Huawei Device Co., Ltd.
+24A799     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+7C-3E-74   (hex)		Huawei Device Co., Ltd.
+7C3E74     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-89-19   (hex)		2bps
+148919     (base 16)		2bps
+				#1502 , T-dong, Pungrim I-want, 170, Seohyeon-ro
+				Seongnam-si  Gyeonggi-do  13590
+				KR
+
+4C-71-67   (hex)		PoLabs d.o.o.
+4C7167     (base 16)		PoLabs d.o.o.
+				Volavlje 30
+				Ljubljana    1000
+				SI
+
+04-71-53   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+047153     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+48-E7-DA   (hex)		AzureWave Technology Inc.
+48E7DA     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+40-C4-8C   (hex)		N-iTUS CO.,LTD.
+40C48C     (base 16)		N-iTUS CO.,LTD.
+				NiTUS 85, Deokcheon-ro
+				Anyang-si  Gyeonggi-do, Korea  14086
+				KR
+
+48-22-18   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
+482218     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
+				Shenzhen  Nanshan District  518000
+				CN
+
+30-A1-76   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+30A176     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E4-0C-FD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+E40CFD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+58-D6-97   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+58D697     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+54-37-BB   (hex)		Taicang T&W Electronics
+5437BB     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+60-F8-F2   (hex)		Synaptec
+60F8F2     (base 16)		Synaptec
+				204 George Street
+				Glasgow    G1 1XW
+				GB
+
+AC-74-B1   (hex)		Intel Corporate
+AC74B1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+1C-3C-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C3CD4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-E4-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4E451     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-26-EF   (hex)		Aruba, a Hewlett Packard Enterprise Company
+6026EF     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+F4-60-77   (hex)		Texas Instruments
+F46077     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+C0-3C-04   (hex)		Sagemcom Broadband SAS
+C03C04     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+A4-D7-3C   (hex)		Seiko Epson Corporation
+A4D73C     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+6C-10-8B   (hex)		WeLink Communications
+6C108B     (base 16)		WeLink Communications
+				4186 N Red Maple Court
+				Lehi  UT  84043
+				US
+
+F8-8E-A1   (hex)		Edgecore Networks Corporation
+F88EA1     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+7C-85-30   (hex)		Nokia
+7C8530     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+F4-63-E7   (hex)		Nanjing Maxon O.E. Tech. Co., LTD
+F463E7     (base 16)		Nanjing Maxon O.E. Tech. Co., LTD
+				6/F, Building A3, Zidong International Creative Park, Zidong Road, Qixia District, Nanjing
+				NAN JING  JIANG SU  210000
+				CN
+
+24-28-FD   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+2428FD     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+88-AE-DD   (hex)		EliteGroup Computer Systems Co., LTD
+88AEDD     (base 16)		EliteGroup Computer Systems Co., LTD
+				No. 239, Sec. 2, Ti ding Blvd.
+				Taipei City    11493
+				TW
+
+64-D0-2D   (hex)		NEXT GENERATION INTEGRATION LIMITED (NGI)
+64D02D     (base 16)		NEXT GENERATION INTEGRATION LIMITED (NGI)
+				Unit 1102, 11 / F, 29 Austin Road, TSIM SHA TSUI
+				KOWLOON  Hong Kong  999077
+				HK
+
+A0-E7-0B   (hex)		Intel Corporate
+A0E70B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+B0-D8-88   (hex)		Panasonic Corporation Automotive
+B0D888     (base 16)		Panasonic Corporation Automotive
+				5652
+				Matsumoto City  Nagano  399-8730
+				JP
+
+04-EE-EE   (hex)		Laplace System Co., Ltd.
+04EEEE     (base 16)		Laplace System Co., Ltd.
+				1-245 Kyo-machi
+				Fushimi, Kyoto  Kyoto  6128083
+				JP
+
+68-96-6A   (hex)		OHSUNG
+68966A     (base 16)		OHSUNG
+				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
+				GUMI  GYEONG BUK  730-030
+				KR
+
+90-2E-16   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+902E16     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+78-06-C9   (hex)		Huawei Device Co., Ltd.
+7806C9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E8-A6-CA   (hex)		Huawei Device Co., Ltd.
+E8A6CA     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+CC-FA-66   (hex)		Huawei Device Co., Ltd.
+CCFA66     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-7D-22   (hex)		FUJIFILM Business Innovation Corp.
+1C7D22     (base 16)		FUJIFILM Business Innovation Corp.
+				6-1 Minatomirai, Nishi-ku
+				Yokohama  Kanagawa  220-8668
+				JP
+
+34-FE-9E   (hex)		Fujitsu Limited
+34FE9E     (base 16)		Fujitsu Limited
+				4-1-1 Kamikodanaka, Nakahara-ku
+				Kawasaki-shi  Kanagawa  211-8588
+				JP
+
+0C-71-8C   (hex)		TCT mobile ltd
+0C718C     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+E0-30-F9   (hex)		Juniper Networks
+E030F9     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+24-08-5D   (hex)		Continental Aftermarket & Services GmbH
+24085D     (base 16)		Continental Aftermarket & Services GmbH
+				Sodener Strasse 9
+				Schwalbach am Taunus  Hessen  65824
+				DE
+
+34-24-3E   (hex)		zte corporation
+34243E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+38-45-3B   (hex)		Ruckus Wireless
+38453B     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+78-13-05   (hex)		IEEE Registration Authority
+781305     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+20-54-76   (hex)		Sony Corporation
+205476     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+30-17-C8   (hex)		Sony Corporation
+3017C8     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+6C-23-B9   (hex)		Sony Corporation
+6C23B9     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+6C-0E-0D   (hex)		Sony Corporation
+6C0E0D     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-19-63   (hex)		Sony Corporation
+001963     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+00-16-20   (hex)		Sony Corporation
+001620     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+00-12-EE   (hex)		Sony Corporation
+0012EE     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+D4-38-9C   (hex)		Sony Corporation
+D4389C     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+68-1B-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+681BEF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-23-45   (hex)		Sony Corporation
+002345     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-1F-E4   (hex)		Sony Corporation
+001FE4     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+F4-46-37   (hex)		Intel Corporate
+F44637     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+64-50-D6   (hex)		Liquidtool Systems
+6450D6     (base 16)		Liquidtool Systems
+				Winterseistrasse 22
+				Hasle-Rüegsau  Bern  3415
+				CH
+
+68-76-4F   (hex)		Sony Corporation
+68764F     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+38-A6-59   (hex)		Sagemcom Broadband SAS
+38A659     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+60-61-34   (hex)		Genesis Technical Systems Corp
+606134     (base 16)		Genesis Technical Systems Corp
+				Suite 1720, 510 5th St SW
+				Calgary  Alberta  T2P 3S2
+				CA
+
+A8-48-FA   (hex)		Espressif Inc.
+A848FA     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+FC-58-DF   (hex)		Interphone Service
+FC58DF     (base 16)		Interphone Service
+				Inwestorow, 8
+				Mielec  Select a state or province  39-300
+				PL
+
+98-10-82   (hex)		Nsolution Co., Ltd.
+981082     (base 16)		Nsolution Co., Ltd.
+				1001-1, 387, Simin-daero, Dongan-gu
+				Anyang-si  Gyeonggi-do  14057
+				KR
+
+C4-12-34   (hex)		Apple, Inc.
+C41234     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-A6-F6   (hex)		Apple, Inc.
+3CA6F6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-AB-4F   (hex)		Apple, Inc.
+4CAB4F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-58-3C   (hex)		Apple, Inc.
+9C583C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-DC-5F   (hex)		Cofractal, Inc.
+E4DC5F     (base 16)		Cofractal, Inc.
+				209 E Java Dr. #61593
+				Sunnyvale  CA  94089
+				US
+
+50-81-40   (hex)		HP Inc.
+508140     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+CC-89-6C   (hex)		GN Hearing A/S
+CC896C     (base 16)		GN Hearing A/S
+				Lautrupbjerg 7
+				Ballerup    2750
+				DK
+
+48-F3-F3   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
+48F3F3     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
+				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
+				 Beijing    100085
+				CN
+
+D4-73-50   (hex)		DBG Commnunications Technology  Co., Ltd.
+D47350     (base 16)		DBG Commnunications Technology  Co., Ltd.
+				Building A, No. 5 (DBG Factory), Yongda Road, Xiangshui River,West District of Daya Bay
+				Huizhou  Guangdong  516083
+				CN
+
+3C-7A-F0   (hex)		ITEL MOBILE LIMITED
+3C7AF0     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+70-DA-17   (hex)		Austrian Audio GmbH
+70DA17     (base 16)		Austrian Audio GmbH
+				Eitnergasse 15
+				Vienna  Vienna  1230
+				AT
+
+50-41-1C   (hex)		AMPAK Technology,Inc.
+50411C     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+8C-1E-D9   (hex)		Beijing Unigroup Tsingteng Microsystem Co., LTD.
+8C1ED9     (base 16)		Beijing Unigroup Tsingteng Microsystem Co., LTD.
+				06F, West District, block D, Tsinghua Tongfang science and Technology Plaza, 1 Wangzhuang Road, Haidian District,
+				Beijing  Beijing  1000083
+				CN
+
+B0-37-95   (hex)		LG Electronics
+B03795     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+A4-FF-95   (hex)		Nokia
+A4FF95     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+F4-26-79   (hex)		Intel Corporate
+F42679     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+38-61-A5   (hex)		Grabango Co
+3861A5     (base 16)		Grabango Co
+				2000 Allston Way #60
+				Berkeley  CA  94701
+				US
+
+D0-8E-79   (hex)		Dell Inc.
+D08E79     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+78-D3-ED   (hex)		NORMA
+78D3ED     (base 16)		NORMA
+				Achasan-ro 7na-gil, Seongdong-Gu
+				Seoul    04795
+				KR
+
+34-B4-72   (hex)		Espressif Inc.
+34B472     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F8-0C-58   (hex)		Taicang T&W Electronics
+F80C58     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+FC-19-99   (hex)		Xiaomi Communications Co Ltd
+FC1999     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+24-11-45   (hex)		Xiaomi Communications Co Ltd
+241145     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+50-78-B0   (hex)		Huawei Device Co., Ltd.
+5078B0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E4-07-2B   (hex)		Huawei Device Co., Ltd.
+E4072B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+FC-A8-9B   (hex)		Texas Instruments
+FCA89B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+98-F0-7B   (hex)		Texas Instruments
+98F07B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+24-46-E4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2446E4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-F0-D0   (hex)		SkyBell Technologies Inc.
+68F0D0     (base 16)		SkyBell Technologies Inc.
+				1 Jenner 
+				Irvine  CA  92618
+				US
+
+BC-D7-A5   (hex)		Aruba, a Hewlett Packard Enterprise Company
+BCD7A5     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+4C-F2-02   (hex)		Xiaomi Communications Co Ltd
+4CF202     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+88-46-04   (hex)		Xiaomi Communications Co Ltd
+884604     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+A4-55-90   (hex)		Xiaomi Communications Co Ltd
+A45590     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+08-1C-6E   (hex)		Xiaomi Communications Co Ltd
+081C6E     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+84-AC-16   (hex)		Apple, Inc.
+84AC16     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-BC-87   (hex)		Apple, Inc.
+2CBC87     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-A9-2C   (hex)		IEEE Registration Authority
+44A92C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D8-80-83   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+D88083     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+AC-B9-2F   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+ACB92F     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+18-77-58   (hex)		Audoo Limited (UK)
+187758     (base 16)		Audoo Limited (UK)
+				Unit 23 – Tileyard London, Tileyard Road
+				London  UK  N7 9AH
+				GB
+
+90-E8-68   (hex)		AzureWave Technology Inc.
+90E868     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+4C-50-F1   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4C50F1     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+FC-42-65   (hex)		Zhejiang Tmall Technology Co., Ltd.
+FC4265     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+B4-E4-54   (hex)		Amazon Technologies Inc.
+B4E454     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+0C-43-F9   (hex)		Amazon Technologies Inc.
+0C43F9     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+68-87-C6   (hex)		Cisco Systems, Inc
+6887C6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+80-24-8F   (hex)		Cisco Systems, Inc
+80248F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-94-FB   (hex)		Continental Automotive Systems Inc.
+D494FB     (base 16)		Continental Automotive Systems Inc.
+				21440 W. Lake Cook Rd.
+				Deer Park  IL  60010
+				US
+
+44-D4-54   (hex)		Sagemcom Broadband SAS
+44D454     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E8-95-26   (hex)		Luxshare Precision Industry CO., LTD.
+E89526     (base 16)		Luxshare Precision Industry CO., LTD.
+				East Jinshang Road, Jinxi Town, Kunshan City
+				Jiangsu    215324
+				CN
+
+C8-C9-A3   (hex)		Espressif Inc.
+C8C9A3     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+E4-3B-C9   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+E43BC9     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+D4-93-90   (hex)		CLEVO CO.
+D49390     (base 16)		CLEVO CO.
+				NO. 129, XINGDE ROAD
+				New TAIPEI CITY    241
+				TW
+
+BC-06-2D   (hex)		Wacom Co.,Ltd.
+BC062D     (base 16)		Wacom Co.,Ltd.
+				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
+				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
+				JP
+
+10-41-21   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+104121     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+				Av. Buriti, 1900 – Setor B – Distrito Industrial
+				Manaus  Amazonas  69075-000
+				BR
+
+50-E7-A0   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+50E7A0     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-13-98   (hex)		TrafficSim Co.,Ltd
+001398     (base 16)		TrafficSim Co.,Ltd
+				1-19-56 Taiko, Nakamura-ku
+				Nagoya  Aichi prefecture  453-0801
+				JP
+
+50-0A-52   (hex)		Huiwan Technologies Co. Ltd
+500A52     (base 16)		Huiwan Technologies Co. Ltd
+				A603,Wuhan University SZ IER Bldg., 6 Yuexing 2nd Rd., Nanshan Dist., Shenzhen
+				Shenzhen  Guang Dong  518108
+				CN
+
+40-9C-A6   (hex)		Curvalux
+409CA6     (base 16)		Curvalux
+				Electric Works, 3 Concourse Way,  
+				Sheffield    S1 2BJ
+				GB
+
+9C-97-26   (hex)		Technicolor Delivery Technologies Belgium NV
+9C9726     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+30-91-8F   (hex)		Technicolor Delivery Technologies Belgium NV
+30918F     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+E0-B9-E5   (hex)		Technicolor Delivery Technologies Belgium NV
+E0B9E5     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+80-7E-B4   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+807EB4     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+50-4B-9E   (hex)		Huawei Device Co., Ltd.
+504B9E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-7A-AE   (hex)		Huawei Device Co., Ltd.
+047AAE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+3C-93-F4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C93F4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-33-B5   (hex)		IEEE Registration Authority
+6433B5     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-4B-14   (hex)		Espressif Inc.
+8C4B14     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+D4-E8-53   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+D4E853     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+18-E2-15   (hex)		Nokia
+18E215     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+4C-E2-F1   (hex)		Udino srl
+4CE2F1     (base 16)		Udino srl
+				Via Amedeo Avogadro 24
+				Torino    10121
+				IT
+
+B8-8C-29   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+B88C29     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+BC-6A-D1   (hex)		Xiaomi Communications Co Ltd
+BC6AD1     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+84-27-B6   (hex)		China Mobile IOT Company Limited
+8427B6     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+54-44-A3   (hex)		Samsung Electronics Co.,Ltd
+5444A3     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+64-B6-23   (hex)		Schrack Seconet Care Communication GmbH
+64B623     (base 16)		Schrack Seconet Care Communication GmbH
+				Eibesbrunnergasse 18 
+				Vienna    1120
+				AT
+
+08-45-D1   (hex)		Cisco Systems, Inc
+0845D1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-40-CD   (hex)		Synclayer Inc.
+9C40CD     (base 16)		Synclayer Inc.
+				1-20 Himegaoka
+				Kani  Gifu  5090249
+				JP
+
+78-5E-E8   (hex)		IEEE Registration Authority
+785EE8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+CC-BC-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CCBCE3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-9E-84   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+089E84     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-82-D7   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+1082D7     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+30-03-C8   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+3003C8     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+08-8E-DC   (hex)		Apple, Inc.
+088EDC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-50-2E   (hex)		Apple, Inc.
+98502E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-0A-D4   (hex)		Apple, Inc.
+580AD4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-77-F3   (hex)		Apple, Inc.
+A477F3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-4A-28   (hex)		Apple, Inc.
+A84A28     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-BE-1F   (hex)		Apple, Inc.
+D8BE1F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-B7-A8   (hex)		CableFree Networks Limited
+10B7A8     (base 16)		CableFree Networks Limited
+				G6, Magdalen Centre, The Oxford Science Park, Robert Robinson Avenue
+				Oxford  ---  OX4 4GA
+				GB
+
+08-9B-F1   (hex)		eero inc.
+089BF1     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+00-11-14   (hex)		EverFocus Electronics Corp.
+001114     (base 16)		EverFocus Electronics Corp.
+				2F., No.8, Ln. 270, Sec. 3, Beishen Rd.,
+				New Taipei City  Shenkeng Dist.  222
+				TW
+
+D0-3F-27   (hex)		Wyze Labs Inc
+D03F27     (base 16)		Wyze Labs Inc
+				4030 Lake Washington Boulevard NE
+				Kirkland  WA  98033
+				US
+
+50-29-7B   (hex)		China Mobile Group Device Co.,Ltd.
+50297B     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+6C-DD-EF   (hex)		EPCOMM Inc.
+6CDDEF     (base 16)		EPCOMM Inc.
+				31072 San Antonio Street
+				Hayward  CA  94544
+				US
+
+D0-F1-21   (hex)		Xi'an LINKSCI Technology Co., Ltd
+D0F121     (base 16)		Xi'an LINKSCI Technology Co., Ltd
+				C301, block C, main building, ZTE Industrial Park, No.10, Tangyan South Road, Hi-tech Zone
+				Xi'an  Shanxi  710076
+				CN
+
+EC-1C-5D   (hex)		Siemens AG
+EC1C5D     (base 16)		Siemens AG
+				Werner-von-Siemens-Str. 50
+				Amberg    92224
+				DE
+
+78-44-4A   (hex)		Shenzhen Aiwinn information Technology Co., Ltd.
+78444A     (base 16)		Shenzhen Aiwinn information Technology Co., Ltd.
+				Room 1001, 10th floor, Building G3, TCL International E city, Shuguang community, Xili street, Nanshan district,
+				Shenzhen  GuangDong  518000
+				CN
+
+8C-B8-7E   (hex)		Intel Corporate
+8CB87E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+70-1A-B8   (hex)		Intel Corporate
+701AB8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+5C-DF-89   (hex)		Ruckus Wireless
+5CDF89     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+70-B6-4F   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+70B64F     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
+				Guangzhou  Guangdong  510663
+				CN
+
+B4-20-5B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B4205B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+18-7A-3B   (hex)		Aruba, a Hewlett Packard Enterprise Company
+187A3B     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+70-B9-BB   (hex)		Shenzhen Hankvision Technology CO.,LTD
+70B9BB     (base 16)		Shenzhen Hankvision Technology CO.,LTD
+				Huolibao Building, Gaoxin North Sixth Road, Nanshan District, Shenzhen
+				Shenzhen    518000
+				CN
+
+A4-C6-9A   (hex)		Samsung Electronics Co.,Ltd
+A4C69A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-F5-20   (hex)		KYOCERA Corporation 
+D0F520     (base 16)		KYOCERA Corporation 
+				30 Hoji
+				Kitami,  Hokkaido  099-1595
+				JP
+
+B8-94-70   (hex)		Calix Inc.
+B89470     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+94-7F-1D   (hex)		Shenzhen Fastrain Technology Co., Ltd.
+947F1D     (base 16)		Shenzhen Fastrain Technology Co., Ltd.
+				No.3 Baolong 4th Rd., Baolong Industrial Area, Longgang District,
+				Shenzhen  GuangDong  518000
+				CN
+
+60-7D-DD   (hex)		Shenzhen Shichuangyi Electronics Co.,Ltd
+607DDD     (base 16)		Shenzhen Shichuangyi Electronics Co.,Ltd
+				East Shangnan Road,Xinqiao Street Bao An District
+				Shenzhen  Guangdong  518101
+				CN
+
+24-0F-9B   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+240F9B     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+E4-29-3D   (hex)		Shenzhen Sy-Fiber Optical Communication Technology.Co.,Ltd
+E4293D     (base 16)		Shenzhen Sy-Fiber Optical Communication Technology.Co.,Ltd
+				11/F,  Manjinghua Yingshuo Commercial Building, Songgang Street, Baoan District
+				Shenzhen City  Guangdong Provicne  518105
+				CN
+
+AC-5E-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC5E14     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-DF-73   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20DF73     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-12-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48128F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-56-36   (hex)		Huawei Device Co., Ltd.
+9C5636     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-CA-63   (hex)		Seongji Industry Company
+40CA63     (base 16)		Seongji Industry Company
+				 54-33, Dongtanhana 1-gil
+				Hwaseong-si  Gyeonggi-do  18423
+				KR
+
+D4-8A-3B   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+D48A3B     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+40-06-D5   (hex)		Cisco Systems, Inc
+4006D5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-22-DE   (hex)		vivo Mobile Communication Co., Ltd.
+A022DE     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+14-DD-9C   (hex)		vivo Mobile Communication Co., Ltd.
+14DD9C     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+2C-48-81   (hex)		vivo Mobile Communication Co., Ltd.
+2C4881     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+94-31-CB   (hex)		vivo Mobile Communication Co., Ltd.
+9431CB     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+20-74-54   (hex)		vivo Mobile Communication Co., Ltd.
+207454     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+BC-22-28   (hex)		D-Link International
+BC2228     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+C4-CA-2B   (hex)		Arista Networks
+C4CA2B     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+00-24-69   (hex)		Fasttel - Smart Doorphones
+002469     (base 16)		Fasttel - Smart Doorphones
+				Klipsenstraat 18A
+				Lokeren    9160
+				BE
+
+B4-3D-08   (hex)		GX International BV
+B43D08     (base 16)		GX International BV
+				Waldfeuchterbaan 124
+				Maria Hoop  Maria Hoop  6105 BP
+				NL
+
+70-89-F5   (hex)		Dongguan Lingjie IOT Co., LTD
+7089F5     (base 16)		Dongguan Lingjie IOT Co., LTD
+				A-708, Zhongke innovation Plaza, Songshan Lake, Dongguan City
+				dongguan  Guangdong  523945
+				CN
+
+88-DC-96   (hex)		EnGenius Technologies, Inc.
+88DC96     (base 16)		EnGenius Technologies, Inc.
+				No. 500, Fusing 3rd Rd., Hwa-Ya Technology Park
+				Kuei-Shan Hsiang  TaoYuan County  333
+				TW
+
+40-B0-A1   (hex)		VALCOM CO.,LTD.
+40B0A1     (base 16)		VALCOM CO.,LTD.
+				7-25 MINOWA 3-CHOME
+				TOYONAKA CITY,OSAKA    560-0035
+				JP
+
+90-38-0C   (hex)		Espressif Inc.
+90380C     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+84-7B-57   (hex)		Intel Corporate
+847B57     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+64-CB-E9   (hex)		LG Innotek
+64CBE9     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+9C-75-6E   (hex)		Ajax Systems DMCC
+9C756E     (base 16)		Ajax Systems DMCC
+				Mazaya Business Avenue
+				Dubai    04201
+				AE
+
+F0-6C-73   (hex)		Nokia
+F06C73     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+E8-F9-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8F9D4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-C7-87   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B0C787     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-4F-9B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C4F9B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-21-4A   (hex)		Intel Corporate
+7C214A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+50-84-92   (hex)		Intel Corporate
+508492     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+48-2F-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+482FD7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-D8-1E   (hex)		MirWifi,Joint-Stock Company
+24D81E     (base 16)		MirWifi,Joint-Stock Company
+				Krasnobogatyrskaya st, building 6/1
+				Moscow     107564
+				RU
+
+98-80-BB   (hex)		IEEE Registration Authority
+9880BB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D8-B0-53   (hex)		Xiaomi Communications Co Ltd
+D8B053     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+6C-F7-84   (hex)		Xiaomi Communications Co Ltd
+6CF784     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+04-2B-58   (hex)		Shenzhen Hanzsung Technology Co.,Ltd
+042B58     (base 16)		Shenzhen Hanzsung Technology Co.,Ltd
+				8F,Bldg 3,Guole Technopark,Western Huaning Rd,Dalang,Longhua New District,Shenzhen,China
+				Shenzhen  GuangDong  518109
+				CN
+
+B8-12-DA   (hex)		 LVSWITCHES INC.
+B812DA     (base 16)		 LVSWITCHES INC.
+				F1 building,New light source base Luocun town,Nanhai district
+				Foshan  Guangdong  528000
+				CN
+
+A0-D7-F3   (hex)		Samsung Electronics Co.,Ltd
+A0D7F3     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+E8-6D-6E   (hex)		voestalpine Signaling UK Ltd.
+E86D6E     (base 16)		voestalpine Signaling UK Ltd.
+				Unit 1, Fulcrum 4, Solent Way
+				Whiteley  Hampshire  PO15 7FT
+				GB
+
+28-2A-87   (hex)		ITEL MOBILE LIMITED
+282A87     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+A8-B5-7C   (hex)		Roku, Inc
+A8B57C     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+78-C6-BB   (hex)		Analog Devices, Inc.
+78C6BB     (base 16)		Analog Devices, Inc.
+				5635 Jefferson St. NE, Suite A
+				Albuquerque  NM  87109
+				US
+
+24-26-BA   (hex)		Shenzhen Toptel Technology Co., Ltd.
+2426BA     (base 16)		Shenzhen Toptel Technology Co., Ltd.
+				Floor 6th, Building C, Guancheng Low-carbon Industrial Park, Guangming District
+				Shenzhen  GuangDong  518107
+				CN
+
+54-6C-EB   (hex)		Intel Corporate
+546CEB     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+00-93-37   (hex)		Intel Corporate
+009337     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+AC-BC-D9   (hex)		Cisco Systems, Inc
+ACBCD9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-CE-2A   (hex)		Intel Corporate
+58CE2A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+10-A5-1D   (hex)		Intel Corporate
+10A51D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+08-8E-90   (hex)		Intel Corporate
+088E90     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C0-44-42   (hex)		Apple, Inc.
+C04442     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-68-AA   (hex)		Apple, Inc.
+D468AA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-DD-60   (hex)		Apple, Inc.
+98DD60     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-C3-CC   (hex)		Apple, Inc.
+F8C3CC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-1A-28   (hex)		Mako Networks Ltd
+301A28     (base 16)		Mako Networks Ltd
+				1355 North Maclean Blvd
+				Elgin  IL  60123
+				US
+
+30-5A-99   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+305A99     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+60-4D-E1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+604DE1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-4E-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+704E6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-C6-DD   (hex)		New H3C Technologies Co., Ltd
+70C6DD     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+18-5B-00   (hex)		Nokia
+185B00     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+6C-C4-9F   (hex)		Aruba, a Hewlett Packard Enterprise Company
+6CC49F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+60-3D-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+603D29     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-C4-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54C480     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-61-DF   (hex)		China Mobile Group Device Co.,Ltd.
+A861DF     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+7C-A6-2A   (hex)		Hewlett Packard Enterprise
+7CA62A     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+1C-45-86   (hex)		Nintendo Co.,Ltd
+1C4586     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+50-7C-6F   (hex)		Intel Corporate
+507C6F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+58-9B-4A   (hex)		DWnet Technologies(Suzhou) Corporation
+589B4A     (base 16)		DWnet Technologies(Suzhou) Corporation
+				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
+				Suzhou    21500
+				CN
+
+5C-83-CD   (hex)		New platforms
+5C83CD     (base 16)		New platforms
+				Warshavskoe shosse, 35 bld 1
+				Moscow    117105
+				RU
+
+38-4B-24   (hex)		SIEMENS AG
+384B24     (base 16)		SIEMENS AG
+				Oestliche Rheinbrückenstraße 50
+				Karlsruhe  Baden-Württemberg  76181
+				DE
+
+F0-AE-66   (hex)		Cosonic Intelligent Technologies Co., Ltd.
+F0AE66     (base 16)		Cosonic Intelligent Technologies Co., Ltd.
+				Room 506, No.1 Building, No.6, South Industrial Road, Songshan Lake National High-tech Industrial Development Zone
+				Dongguan City, Guangdong Province    523808
+				CN
+
+20-80-97   (hex)		Shenzhen OXO Technology limited
+208097     (base 16)		Shenzhen OXO Technology limited
+				Room 1712-2, Building 4, Tian 'an Yungu Industrial Park, Gangtou Community, Bantian Street, Longgang District
+				Shenzhen  Guangdong  518000
+				CN
+
+7C-16-89   (hex)		Sagemcom Broadband SAS
+7C1689     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+40-11-C3   (hex)		Samsung Electronics Co.,Ltd
+4011C3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-7D-9F   (hex)		Samsung Electronics Co.,Ltd
+C47D9F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-A9-16   (hex)		Huawei Device Co., Ltd.
+3CA916     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-1C-07   (hex)		Samsung Electronics Co.,Ltd
+C41C07     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+58-FC-C6   (hex)		TOZO INC
+58FCC6     (base 16)		TOZO INC
+				1546 NW 56TH ST # 743
+				SEATTLE  WA  98107-5209
+				US
+
+00-40-36   (hex)		Minim Inc.
+004036     (base 16)		Minim Inc.
+				848 Elm Street
+				Manchester  NH  03101
+				US
+
+44-85-02   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+448502     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+A4-EF-15   (hex)		AltoBeam (China) Inc.
+A4EF15     (base 16)		AltoBeam (China) Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+D4-94-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D49400     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-15-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8415D3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-6C-65   (hex)		Texas Instruments
+A06C65     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F4-A4-54   (hex)		IEEE Registration Authority
+F4A454     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+10-E8-A7   (hex)		Wistron Neweb Corporation
+10E8A7     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+D4-2C-46   (hex)		BUFFALO.INC
+D42C46     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+10-91-A8   (hex)		Espressif Inc.
+1091A8     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+6C-3A-36   (hex)		Glowforge Inc
+6C3A36     (base 16)		Glowforge Inc
+				2200 1st Ave S
+				Seattle  WA  98134
+				US
+
+80-6A-00   (hex)		Cisco Systems, Inc
+806A00     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-6C-6D   (hex)		ARRIS Group, Inc.
+D46C6D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A0-E7-AE   (hex)		ARRIS Group, Inc.
+A0E7AE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+EC-50-AA   (hex)		Aruba, a Hewlett Packard Enterprise Company
+EC50AA     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+CC-A3-BD   (hex)		ITEL MOBILE LIMITED
+CCA3BD     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+D4-35-4A   (hex)		ALAXALA Networks Corporation
+D4354A     (base 16)		ALAXALA Networks Corporation
+				Shinkawasaki Mitsui Bldg. West Tower.13F, 1-1-2 Kashimada, Saiwai-ku
+				Kawasaki-shi  Kanagawa-ken  212-0058
+				JP
+
+40-E9-9B   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+40E99B     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+78-04-7A   (hex)		Edge Networks LLC
+78047A     (base 16)		Edge Networks LLC
+				14 Whistler Hill Lane 
+				HUNTINGTON  NY  11743
+				US
+
+BC-AF-87   (hex)		smartAC.com, Inc.
+BCAF87     (base 16)		smartAC.com, Inc.
+				5302 Egbert St, SmartACcom
+				Houston  TX  77007
+				US
+
+C0-2B-31   (hex)		Phytium Technology Co.,Ltd.
+C02B31     (base 16)		Phytium Technology Co.,Ltd.
+				Building5,XinAn Business Square,Haiyuan Middle Road Binhai New District,
+				Tianjin    300450
+				CN
+
+58-CF-79   (hex)		Espressif Inc.
+58CF79     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+4C-C4-49   (hex)		Icotera A/S
+4CC449     (base 16)		Icotera A/S
+				Vibeholms Allé 16
+				Brøndby    2605
+				DK
+
+BC-45-5B   (hex)		Samsung Electronics Co.,Ltd
+BC455B     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+B0-3C-DC   (hex)		Intel Corporate
+B03CDC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+00-09-B0   (hex)		Onkyo Technology K.K.
+0009B0     (base 16)		Onkyo Technology K.K.
+				Lux Building (5th floor),1-1-41 Kawamata
+				Higashiosaka City  Osaka  577-0063
+				JP
+
+08-F8-0D   (hex)		IEEE Registration Authority
+08F80D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+78-62-99   (hex)		BITSTREAM sp. z o.o.
+786299     (base 16)		BITSTREAM sp. z o.o.
+				Melgiewska, 7/9
+				Lublin    20-209
+				PL
+
+CC-5B-31   (hex)		Nintendo Co.,Ltd
+CC5B31     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+0C-1E-F7   (hex)		Omni-ID
+0C1EF7     (base 16)		Omni-ID
+				Omni-ID, The Enterprise Center, Coxbridge Business Park, Alton Road
+				Farnham  Surrey  GU105EH
+				GB
+
+E0-6D-18   (hex)		PIONEERCORPORATION
+E06D18     (base 16)		PIONEERCORPORATION
+				25-1,yamada
+				kawagoe-shi  saitama  3508555
+				JP
+
+8C-F8-C5   (hex)		Intel Corporate
+8CF8C5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+34-5D-9E   (hex)		Sagemcom Broadband SAS
+345D9E     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+A4-5F-B9   (hex)		DreamBig Semiconductor, Inc.
+A45FB9     (base 16)		DreamBig Semiconductor, Inc.
+				2860 Zanker Road, Suite 210
+				San Jose  CA  95134
+				US
+
+B4-D2-86   (hex)		Telechips, Inc.
+B4D286     (base 16)		Telechips, Inc.
+				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
+				Seoul  Seoul  05510
+				KR
+
+00-0F-32   (hex)		Lootom Telcovideo Network (Wuxi) Co Ltd
+000F32     (base 16)		Lootom Telcovideo Network (Wuxi) Co Ltd
+				5F, 9Building,
+				WuXi  JiangSu  214072
+				CN
+
+18-C2-3C   (hex)		Lumi United Technology Co., Ltd
+18C23C     (base 16)		Lumi United Technology Co., Ltd
+				8th Floor, JinQi Wisdom Valley, No.1 TangLing Road, LinXian Ave, Taoyuan Residential District,Nanshan District
+				ShenZhen  GuangDong  518055
+				CN
+
+04-75-F9   (hex)		Taicang T&W Electronics
+0475F9     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+E8-51-77   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+E85177     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+38-8A-21   (hex)		UAB Teltonika Telematics
+388A21     (base 16)		UAB Teltonika Telematics
+				Saltoniskiu  str. 9B-1
+				Vilnius    LT-08105
+				LT
+
+A0-59-50   (hex)		Intel Corporate
+A05950     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+50-87-4D   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+50874D     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+50-89-D1   (hex)		Huawei Device Co., Ltd.
+5089D1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-62-0B   (hex)		Broadcom Limited
+00620B     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+A4-17-52   (hex)		Hifocus Electronics India Private Limited
+A41752     (base 16)		Hifocus Electronics India Private Limited
+				No. 3 Sunguvar Street, Chintadripet
+				Chennai  Tamil Nadu  600002
+				IN
+
+40-FE-95   (hex)		New H3C Technologies Co., Ltd
+40FE95     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+BC-D0-74   (hex)		Apple, Inc.
+BCD074     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-61-C0   (hex)		Aruba, a Hewlett Packard Enterprise Company
+F061C0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+DC-CC-E6   (hex)		Samsung Electronics Co.,Ltd
+DCCCE6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-65-AE   (hex)		Samsung Electronics Co.,Ltd
+F065AE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-70-C9   (hex)		Jiangsu Aisida Electronic Co., Ltd
+1C70C9     (base 16)		Jiangsu Aisida Electronic Co., Ltd
+				Aisida Industrial Park,Lanling Road,Danyang Development Zone
+				DanYang  JiangSu  212300
+				CN
+
+9C-B8-B4   (hex)		AMPAK Technology,Inc.
+9CB8B4     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+00-40-84   (hex)		Honeywell
+004084     (base 16)		Honeywell
+				512 Virginia Dr Ste A
+				Fort Washington  PA  19034
+				US
+
+A0-53-94   (hex)		Shenzhen zediel co., Ltd.
+A05394     (base 16)		Shenzhen zediel co., Ltd.
+				Xixiang
+				Shenzhen  guangdong  518000
+				CN
+
+04-EE-E8   (hex)		IEEE Registration Authority
+04EEE8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+3C-F7-D1   (hex)		OMRON Corporation
+3CF7D1     (base 16)		OMRON Corporation
+				Shiokoji Horikawa, Shimogyo-ku
+				Kyoto    600-8530
+				JP
+
+84-B4-DB   (hex)		Silicon Laboratories
+84B4DB     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+38-C8-04   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+38C804     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+E0-07-C2   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+E007C2     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+2C-FD-B4   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+2CFDB4     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+B4-F2-67   (hex)		Compal Broadband Networks, Inc.
+B4F267     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+C0-BA-E6   (hex)		Application Solutions (Safety and Security) Ltd
+C0BAE6     (base 16)		Application Solutions (Safety and Security) Ltd
+				Unit 17, Cliffe Industrial Estate 
+				Lewes  East Sussex  BN8 6JL
+				GB
+
+18-D7-93   (hex)		IEEE Registration Authority
+18D793     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-09-E5   (hex)		Hottinger Brüel & Kjaer GmbH
+0009E5     (base 16)		Hottinger Brüel & Kjaer GmbH
+				Im Tiefen See 45
+				Darmstadt    D-64293
+				DE
+
+D8-B6-73   (hex)		Texas Instruments
+D8B673     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+98-50-A3   (hex)		SIGNALTEK JSC
+9850A3     (base 16)		SIGNALTEK JSC
+				2 Ivovaya street, floor 4, office 1,  Room 45
+				Moscow   2 Ivovaya street, floor 4, office 1,  Room 45    129329
+				RU
+
+C0-FB-C1   (hex)		ITEL MOBILE LIMITED
+C0FBC1     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+E8-17-FC   (hex)		Fujitsu Cloud Technologies Limited
+E817FC     (base 16)		Fujitsu Cloud Technologies Limited
+				JR Kawasaki Tower, 1-5, Omiyacho, Saiwai-ku
+				Kawasaki-shi  Kanagawa-ken,   212-0014
+				JP
+
+B0-DD-74   (hex)		Heimgard Technologies AS
+B0DD74     (base 16)		Heimgard Technologies AS
+				Dronning Mauds gate 15
+				Oslo   Norway  0250 
+				NO
+
+DC-36-43   (hex)		IEEE Registration Authority
+DC3643     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+10-2C-8D   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+102C8D     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+94-E6-86   (hex)		Espressif Inc.
+94E686     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F8-28-C9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F828C9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-B3-B4   (hex)		Shenzhen Furuilian Electronic Co.,Ltd.
+50B3B4     (base 16)		Shenzhen Furuilian Electronic Co.,Ltd.
+				3/F, No.5 Building Workshop, No.123, Shuitian Industrial Zone,Baoshi East Road, Shuitian Community, Shiyan Street, Bao'an District,
+				Shenzhen    518000
+				CN
+
+B4-8C-9D   (hex)		AzureWave Technology Inc.
+B48C9D     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+FC-11-93   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC1193     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-B8-83   (hex)		Cisco Systems, Inc
+34B883     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C0-79-82   (hex)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
+C07982     (base 16)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
+				B Area, 10th floor, TCL multimedia Building, TCL International E City, #1001 Zhonshanyuan road,Shenzhen
+				guangdong  China  518058
+				CN
+
+D0-ED-FF   (hex)		ZF CVCS
+D0EDFF     (base 16)		ZF CVCS
+				Am Lindener Hafen 21
+				Hannover    30453
+				DE
+
+F8-A9-1F   (hex)		ZVISION Technologies Co., Ltd
+F8A91F     (base 16)		ZVISION Technologies Co., Ltd
+				108, No.1, Block A,  Zhongguancun Software Park, Haidian District
+				Beijing  Beijing  100085
+				CN
+
+4C-BA-D7   (hex)		LG Innotek
+4CBAD7     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+7C-C9-5E   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+7CC95E     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+				dongguan   guangdong  523000
+				CN
+
+7C-CC-FC   (hex)		Quectel Wireless Solutions Co.,Ltd.
+7CCCFC     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+98-8F-E0   (hex)		IEEE Registration Authority
+988FE0     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+34-D7-37   (hex)		IBG Industriebeteiligungsgesellschaft mbH &b Co. KG
+34D737     (base 16)		IBG Industriebeteiligungsgesellschaft mbH &b Co. KG
+				Pferdmengestr. 1
+				Cologne  NRW  50968
+				DE
+
+2C-33-41   (hex)		China Mobile IOT Company Limited
+2C3341     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+AC-56-7B   (hex)		Sunnovo International Limited
+AC567B     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+9C-C1-2D   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+9CC12D     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+80-65-7C   (hex)		Apple, Inc.
+80657C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-80-84   (hex)		Apple, Inc.
+DC8084     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-C7-C3   (hex)		NETLINK ICT 
+8CC7C3     (base 16)		NETLINK ICT 
+				Jupitor Jn,Near Time kids Koothattukulam - Piravom Rd
+				Ernakulam  KL  686662
+				IN
+
+7C-35-F8   (hex)		Zhejiang Tmall Technology Co., Ltd.
+7C35F8     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310024
+				CN
+
+74-26-FF   (hex)		zte corporation
+7426FF     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C4-27-28   (hex)		zte corporation
+C42728     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C8-58-95   (hex)		Motorola Mobility LLC, a Lenovo Company
+C85895     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+E4-DA-DF   (hex)		Taicang T&W Electronics
+E4DADF     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+A8-53-7D   (hex)		Mist Systems, Inc.
+A8537D     (base 16)		Mist Systems, Inc.
+				1601 South De Anza Blvd, Suite 248
+				Cupertino  CA  95014
+				US
+
+30-34-22   (hex)		eero inc.
+303422     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+08-E0-21   (hex)		Honor Device Co., Ltd.
+08E021     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+B0-5C-16   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+B05C16     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E8-D3-22   (hex)		Cisco Systems, Inc
+E8D322     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+8C-15-53   (hex)		Beijing Memblaze Technology Co Ltd
+8C1553     (base 16)		Beijing Memblaze Technology Co Ltd
+				Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian
+				Beijing  Beijing  100192
+				CN
+
+D4-BD-4F   (hex)		Ruckus Wireless
+D4BD4F     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+5C-C9-C0   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+5CC9C0     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+6C-B1-58   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+6CB158     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+E8-81-AB   (hex)		Beijing Sankuai Online Technology Co.,Ltd
+E881AB     (base 16)		Beijing Sankuai Online Technology Co.,Ltd
+				BC Building, China Electronic Science Taiji Information Technology Industry Base, Yard 7, Rongda Road, Chaoyang District
+				Beijing    100102
+				CN
+
+1C-47-F6   (hex)		Zhidao Network Technology(Shenzhen) Co.,Ltd
+1C47F6     (base 16)		Zhidao Network Technology(Shenzhen) Co.,Ltd
+				B3, 11 / F, Exiang Technology Building, No. 31, Zhongsi Road, Gaoxin, Maling Community, Yuehai Street, Nanshan District
+				Shenzhen    518000
+				CN
+
+A0-B4-BF   (hex)		InfiNet LLC
+A0B4BF     (base 16)		InfiNet LLC
+				Office 425, 69/75 Vavilova str.
+				Moscow\    117335
+				RU
+
+E8-EB-D3   (hex)		Mellanox Technologies, Inc.
+E8EBD3     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+30-2B-DC   (hex)		Top-Unum Electronics Co., LTD
+302BDC     (base 16)		Top-Unum Electronics Co., LTD
+				No. 58, Ln. 137, Jianshan Rd., Yingge Dist., 
+				New Taipei City 239,  Taiwan  239
+				CN
+
+90-F7-B2   (hex)		New H3C Technologies Co., Ltd
+90F7B2     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+04-E3-1A   (hex)		Sagemcom Broadband SAS
+04E31A     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C0-06-0C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0060C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-A4-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B0A4F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-75-3A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+24753A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+6C-99-9D   (hex)		Amazon Technologies Inc.
+6C999D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+6C-93-08   (hex)		IEEE Registration Authority
+6C9308     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+7C-6A-60   (hex)		China Mobile Group Device Co.,Ltd.
+7C6A60     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+68-18-D9   (hex)		Hill AFB - CAPRE Group
+6818D9     (base 16)		Hill AFB - CAPRE Group
+				7278 4th Street
+				Hill AFB  UT  84056
+				US
+
+18-BC-57   (hex)		ADVA Optical Networking Ltd.
+18BC57     (base 16)		ADVA Optical Networking Ltd.
+				ADVAntage House
+				York    YO30 4RY
+				GB
+
+D8-E2-DF   (hex)		Microsoft Corporation
+D8E2DF     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+1C-61-B4   (hex)		TP-Link Corporation Limited
+1C61B4     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+9C-A2-F4   (hex)		TP-Link Corporation Limited
+9CA2F4     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+B4-69-5F   (hex)		TCT mobile ltd
+B4695F     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+38-8F-30   (hex)		Samsung Electronics Co.,Ltd
+388F30     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-44-66   (hex)		Intellics
+A04466     (base 16)		Intellics
+				697, Pangyo-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13511
+				KR
+
+44-6D-7F   (hex)		Amazon Technologies Inc.
+446D7F     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno    89507
+				US
+
+84-C6-92   (hex)		Texas Instruments
+84C692     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+6C-B2-FD   (hex)		Texas Instruments
+6CB2FD     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+6C-0F-61   (hex)		Hypervolt Ltd
+6C0F61     (base 16)		Hypervolt Ltd
+				25 Churchill Place
+				London    E14 5EY
+				GB
+
+24-06-F2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+2406F2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+C0-6D-ED   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+C06DED     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+90-93-5A   (hex)		ARRIS Group, Inc.
+90935A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+AC-8F-A9   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+AC8FA9     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+4C-73-4F   (hex)		Juniper Networks
+4C734F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C0-C1-70   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+C0C170     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+50-42-89   (hex)		zte corporation
+504289     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+44-29-1E   (hex)		AltoBeam (China) Inc.
+44291E     (base 16)		AltoBeam (China) Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+24-EB-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24EBED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-8E-7A   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+308E7A     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+2C-DD-5F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+2CDD5F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+AC-51-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC51AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-CD-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48CDD3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-66-18   (hex)		Adtran Inc
+CC6618     (base 16)		Adtran Inc
+				901 Explorer Blvd.
+				Huntsville  AL  35806-2807
+				US
+
+E0-27-6C   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+E0276C     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+DC-8E-95   (hex)		Silicon Laboratories
+DC8E95     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+28-BE-43   (hex)		vivo Mobile Communication Co., Ltd.
+28BE43     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+2C-FC-8B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+2CFC8B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+F8-AD-24   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+F8AD24     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+B0-1F-8C   (hex)		Aruba, a Hewlett Packard Enterprise Company
+B01F8C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+A8-C9-8A   (hex)		New H3C Technologies Co., Ltd
+A8C98A     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+00-26-04   (hex)		WorldCast Systems
+002604     (base 16)		WorldCast Systems
+				20 Avenue Neil Armstrong 
+				Mérignac    33700
+				FR
+
+7C-EF-40   (hex)		Nextorage Corporation
+7CEF40     (base 16)		Nextorage Corporation
+				Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku
+				Kawasaki City  Kanagawa  210-0007
+				JP
+
+1C-AF-4A   (hex)		Samsung Electronics Co.,Ltd
+1CAF4A     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+C8-12-0B   (hex)		Samsung Electronics Co.,Ltd
+C8120B     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+28-74-F5   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+2874F5     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+C0-E0-1C   (hex)		IoT Security Group, SL
+C0E01C     (base 16)		IoT Security Group, SL
+				Calle Pez Dorado, 27, local 2
+				Torremolinos  Malaga  29620
+				ES
+
+00-00-BD   (hex)		RYOSEI, Ltd.
+0000BD     (base 16)		RYOSEI, Ltd.
+				16-4, kitahatsushima-cho
+				Amagasaki-shi  Hyogo   660-0834
+				JP
+
+AC-CC-FC   (hex)		Amazon Technologies Inc.
+ACCCFC     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+90-2C-FB   (hex)		CanTops Co,.Ltd.
+902CFB     (base 16)		CanTops Co,.Ltd.
+				A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil
+				Yeongtong-gu  Suwon-si, Gyonggi-do  1660
+				KR
+
+F8-AB-82   (hex)		Xiaomi Communications Co Ltd
+F8AB82     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+EC-30-B3   (hex)		Xiaomi Communications Co Ltd
+EC30B3     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+9C-57-BC   (hex)		eero inc.
+9C57BC     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+14-2D-4D   (hex)		Apple, Inc.
+142D4D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-42-CC   (hex)		Apple, Inc.
+EC42CC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-21-1C   (hex)		Apple, Inc.
+B8211C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-3F-64   (hex)		Apple, Inc.
+B03F64     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-5A-3F   (hex)		Juniper Networks
+D45A3F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+E8-DC-6C   (hex)		Cisco Systems, Inc
+E8DC6C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A8-A2-37   (hex)		Arcadyan Corporation
+A8A237     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+2C-82-17   (hex)		Apple, Inc.
+2C8217     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-9E-61   (hex)		Lyngsoe Systems LTd
+C89E61     (base 16)		Lyngsoe Systems LTd
+				101 Simona Dr., Unit 2
+				Bolton  Ontario  L7E 4E8
+				CA
+
+C0-8D-51   (hex)		Amazon Technologies Inc.
+C08D51     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+44-B4-B2   (hex)		Amazon Technologies Inc.
+44B4B2     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+48-B4-C3   (hex)		Aruba, a Hewlett Packard Enterprise Company
+48B4C3     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+6C-15-24   (hex)		IEEE Registration Authority
+6C1524     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+78-03-4F   (hex)		Nokia
+78034F     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+C0-E9-11   (hex)		Private
+C0E911     (base 16)		Private
+
+14-F5-92   (hex)		Shenzhen SDG DONZHI Technology Co., Ltd
+14F592     (base 16)		Shenzhen SDG DONZHI Technology Co., Ltd
+				1001 SDG Information Technology Building, No.2 Qiongyu Road, Science park Community, Yuehai Street, Nanshan District,
+				Shenzhen  GuangDong  518000
+				CN
+
+4C-09-FA   (hex)		FRONTIER SMART TECHNOLOGIES LTD
+4C09FA     (base 16)		FRONTIER SMART TECHNOLOGIES LTD
+				17 Waterloo Place
+				London    SW1Y 4AR
+				GB
+
+68-A7-B4   (hex)		Honor Device Co., Ltd.
+68A7B4     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+80-3C-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+803C20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-DD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4DD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-2C-FE   (hex)		Zhejiang Tmall Technology Co., Ltd.
+242CFE     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310024
+				CN
+
+E8-D8-7E   (hex)		Amazon Technologies Inc.
+E8D87E     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+00-12-93   (hex)		ABB Switzerland Ltd.
+001293     (base 16)		ABB Switzerland Ltd.
+				Via Luserte Sud 9  Quartino 
+				Quartino     6572
+				CH
+
+9C-1F-CA   (hex)		Hangzhou AlmightyDigit Technology Co., Ltd
+9C1FCA     (base 16)		Hangzhou AlmightyDigit Technology Co., Ltd
+				Room A0041, 10 / F, building 1, Haizhi center, Cangqian street, Yuhang District
+				Hangzhou  Zhejiang   310000
+				CN
+
+2C-DC-78   (hex)		Descartes Systems (USA) LLC
+2CDC78     (base 16)		Descartes Systems (USA) LLC
+				2030 Powers Ferry Road SE
+				Atlanta  GA  303339
+				US
+
+A0-42-D1   (hex)		Huawei Device Co., Ltd.
+A042D1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+58-87-9F   (hex)		Huawei Device Co., Ltd.
+58879F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-6C-4E   (hex)		Shenzhen TINNO Mobile Technology Corp.
+E06C4E     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+80-6A-B0   (hex)		Shenzhen TINNO Mobile Technology Corp.
+806AB0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+84-70-D7   (hex)		eero inc.
+8470D7     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+10-B2-32   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+10B232     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+14-9B-F3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+149BF3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+10-07-1D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+10071D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+F4-B3-B1   (hex)		Silicon Laboratories
+F4B3B1     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+B8-50-D8   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+B850D8     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+58-1D-D8   (hex)		Sagemcom Broadband SAS
+581DD8     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+04-69-8F   (hex)		Juniper Networks
+04698F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+5C-53-C3   (hex)		Ubee Interactive Co., Limited
+5C53C3     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+				North Point    00000
+				HK
+
+AC-5A-F0   (hex)		LG Electronics
+AC5AF0     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+EC-A6-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ECA62F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-9F-51   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+C09F51     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+80-02-F4   (hex)		IEEE Registration Authority
+8002F4     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A0-CD-F3   (hex)		Murata Manufacturing Co., Ltd.
+A0CDF3     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+24-29-34   (hex)		Google, Inc.
+242934     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+38-0A-4F   (hex)		PRACHI ENTERPRISES
+380A4F     (base 16)		PRACHI ENTERPRISES
+				B-141, 2nd FLOOR SECTOR-6 NOIDA
+				NOIDA  UTTARPRADESH  201301
+				IN
+
+C8-3A-1B   (hex)		Toshiba TEC Corporation Inc
+C83A1B     (base 16)		Toshiba TEC Corporation Inc
+				Oval Court Ohsaki Mark East
+				Shinagawa-ku  Tokyo  141-8664
+				JP
+
+B4-8A-0A   (hex)		Espressif Inc.
+B48A0A     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+80-19-70   (hex)		Samsung Electronics Co.,Ltd
+801970     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E0-F7-28   (hex)		Amazon Technologies Inc.
+E0F728     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+1C-0E-D3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+1C0ED3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+24-32-AE   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+2432AE     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+38-22-F4   (hex)		Huawei Device Co., Ltd.
+3822F4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+0C-BE-F1   (hex)		Huawei Device Co., Ltd.
+0CBEF1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+AC-93-6A   (hex)		Huawei Device Co., Ltd.
+AC936A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+38-A4-4B   (hex)		Huawei Device Co., Ltd.
+38A44B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+7C-4C-A5   (hex)		SKY UK LIMITED
+7C4CA5     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+C0-3E-0F   (hex)		SKY UK LIMITED
+C03E0F     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+0C-F9-C0   (hex)		SKY UK LIMITED
+0CF9C0     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+70-50-AF   (hex)		SKY UK LIMITED
+7050AF     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+D0-58-FC   (hex)		SKY UK LIMITED
+D058FC     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+90-02-18   (hex)		SKY UK LIMITED
+900218     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+D4-DA-CD   (hex)		SKY UK LIMITED
+D4DACD     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+B0-45-30   (hex)		SKY UK LIMITED
+B04530     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+6C-A0-B4   (hex)		SKY UK LIMITED
+6CA0B4     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+3C-9E-C7   (hex)		SKY UK LIMITED
+3C9EC7     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+A4-AE-11   (hex)		Hon Hai Precision Industry Co., Ltd.
+A4AE11     (base 16)		Hon Hai Precision Industry Co., Ltd.
+				GuangDongShenZhen
+				ShenZhen  GuangDong  518109
+				CN
+
+7C-DE-78   (hex)		New H3C Technologies Co., Ltd
+7CDE78     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+3C-E0-64   (hex)		Texas Instruments
+3CE064     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+E0-92-8F   (hex)		Texas Instruments
+E0928F     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+CC-03-7B   (hex)		Texas Instruments
+CC037B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+58-1C-F8   (hex)		Intel Corporate
+581CF8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+AC-19-8E   (hex)		Intel Corporate
+AC198E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C8-5E-A9   (hex)		Intel Corporate
+C85EA9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+B8-FB-AF   (hex)		Xiamen IPRT Technology CO.,LTD
+B8FBAF     (base 16)		Xiamen IPRT Technology CO.,LTD
+				3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China.
+				xiamen  fujian  361000
+				CN
+
+34-85-18   (hex)		Espressif Inc.
+348518     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+EC-E6-A2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ECE6A2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+04-E8-B9   (hex)		Intel Corporate
+04E8B9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E0-2E-0B   (hex)		Intel Corporate
+E02E0B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+38-5C-FB   (hex)		Silicon Laboratories
+385CFB     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+C4-3D-1A   (hex)		Intel Corporate
+C43D1A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+68-53-9D   (hex)		EM Microelectronic
+68539D     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+C8-BF-4C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+C8BF4C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+E4-65-64   (hex)		SHENZHEN KTC TECHNOLOGY CO.,LTD
+E46564     (base 16)		SHENZHEN KTC TECHNOLOGY CO.,LTD
+				Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China
+				SHEN ZHEN  GUANG DONG  518100
+				CN
+
+E0-51-D8   (hex)		China Dragon Technology Limited
+E051D8     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+5C-60-BA   (hex)		HP Inc.
+5C60BA     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+E0-EF-02   (hex)		Chengdu Quanjing Intelligent Technology Co.,Ltd
+E0EF02     (base 16)		Chengdu Quanjing Intelligent Technology Co.,Ltd
+				Building A2, Chi Yuen Technology Park, 1001 College Avenue, Nanshan District, Shenzhen,P.R.C.
+				Shenzhen  Guangdong  518000
+				CN
+
+4C-A3-A7   (hex)		TECNO MOBILE LIMITED
+4CA3A7     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+A8-AB-B5   (hex)		Apple, Inc.
+A8ABB5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-64-C4   (hex)		Apple, Inc.
+5864C4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-A5-3B   (hex)		Nokia
+40A53B     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+74-80-3F   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+74803F     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+04-43-FD   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+0443FD     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+A4-89-7E   (hex)		Guangzhou Yuhong Technology Co.,Ltd.
+A4897E     (base 16)		Guangzhou Yuhong Technology Co.,Ltd.
+				Room 402, No. 11 Software Road, Tianhe District, Guangzhou
+				Guangzhou  Guangdong  510640
+				CN
+
+E8-CC-8C   (hex)		Chengdu Jiarui Hualian Communication Technology Co
+E8CC8C     (base 16)		Chengdu Jiarui Hualian Communication Technology Co
+				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
+				Chengdu  Sichuan  610000
+				CN
+
+5C-52-84   (hex)		Apple, Inc.
+5C5284     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-95-6D   (hex)		Apple, Inc.
+C0956D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-39-C8   (hex)		Apple, Inc.
+3C39C8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-9C-B4   (hex)		Aruba, a Hewlett Packard Enterprise Company
+209CB4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+EC-A1-38   (hex)		Amazon Technologies Inc.
+ECA138     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+B0-67-B5   (hex)		Apple, Inc.
+B067B5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-0A-62   (hex)		Inventus Power Eletronica do Brasil LTDA
+900A62     (base 16)		Inventus Power Eletronica do Brasil LTDA
+				Av Buriti, 4285 Distrito Industrial
+				Manaus  Amazonas  69075000
+				BR
+
+70-54-B4   (hex)		Vestel Elektronik San ve Tic. A.S.
+7054B4     (base 16)		Vestel Elektronik San ve Tic. A.S.
+				Organize san
+				Manisa  Turket  45030
+				TR
+
+08-1A-1E   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+081A1E     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+50-5F-B5   (hex)		ASKEY COMPUTER CORP
+505FB5     (base 16)		ASKEY COMPUTER CORP
+				10F, NO. 119, JIANKANG RD., ZHONGHE DIST.
+				NEW TAIPEI     235
+				TW
+
+88-DE-7C   (hex)		ASKEY COMPUTER CORP
+88DE7C     (base 16)		ASKEY COMPUTER CORP
+				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
+				NEW TAIPEI CITY    23585
+				TW
+
+AC-31-84   (hex)		Huawei Device Co., Ltd.
+AC3184     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-3F-50   (hex)		Huawei Device Co., Ltd.
+503F50     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+48-1C-B9   (hex)		SZ DJI TECHNOLOGY CO.,LTD
+481CB9     (base 16)		SZ DJI TECHNOLOGY CO.,LTD
+				6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd
+				shenzhen  guangdong  518057
+				CN
+
+B8-20-8E   (hex)		Panasonic Connect Co., Ltd.
+B8208E     (base 16)		Panasonic Connect Co., Ltd.
+				4-1-62 Minoshima, Hakata-ku
+				Fukuoka-shi  Fukuoka  812-8531
+				JP
+
+80-64-6F   (hex)		Espressif Inc.
+80646F     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+04-57-47   (hex)		GoPro
+045747     (base 16)		GoPro
+				3000 Clearview Way
+				San Mateo  CA  94402
+				US
+
+F4-2B-7D   (hex)		Chipsguide technology CO.,LTD.
+F42B7D     (base 16)		Chipsguide technology CO.,LTD.
+				No.758 in DongHua Design House, Nan Guang Road, Nan Shan Tone, ShenZhen, Guangdong, China
+				Shenzhen  Guangdong  518002
+				CN
+
+8C-52-19   (hex)		SHARP Corporation
+8C5219     (base 16)		SHARP Corporation
+				1 Takumi-cho, Sakai-ku
+				Sakai City  Osaka  590-8522
+				JP
+
+E0-BA-AD   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+E0BAAD     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+D4-2D-C5   (hex)		i-PRO Co., Ltd.
+D42DC5     (base 16)		i-PRO Co., Ltd.
+				4-1-62 Minoshima, Hakata-ku
+				Fukuoka City     812-8531
+				JP
+
+EC-1D-9E   (hex)		Quectel Wireless Solutions Co.,Ltd.
+EC1D9E     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+BC-D7-67   (hex)		BAE Systems Apllied Intelligence
+BCD767     (base 16)		BAE Systems Apllied Intelligence
+				170 Waterside House
+				Guildford  Surrey  GU2 7RQ
+				GB
+
+74-D4-23   (hex)		Amazon Technologies Inc.
+74D423     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+08-91-15   (hex)		Amazon Technologies Inc.
+089115     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+2C-69-1D   (hex)		IEEE Registration Authority
+2C691D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E0-47-35   (hex)		Ericsson AB
+E04735     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+80-39-8C   (hex)		Samsung Electronics Co.,Ltd
+80398C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+98-0D-6F   (hex)		Samsung Electronics Co.,Ltd
+980D6F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-90-FF   (hex)		Tuya Smart Inc.
+1C90FF     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+A0-44-F3   (hex)		RafaelMicro
+A044F3     (base 16)		RafaelMicro
+				8F.,No.28,Chenggong 12th St.
+				ChuBei City  HsinChu County  30264
+				TW
+
+C4-04-D8   (hex)		Aviva Links Inc.
+C404D8     (base 16)		Aviva Links Inc.
+				160 E Tasman DrSTE 102
+				SAN JOSE  CA  95134
+				US
+
+E0-CA-3C   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+E0CA3C     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+98-20-44   (hex)		New H3C Technologies Co., Ltd
+982044     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+D8-A0-E8   (hex)		zte corporation
+D8A0E8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+DC-6A-E7   (hex)		Xiaomi Communications Co Ltd
+DC6AE7     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+7C-A4-49   (hex)		Xiaomi Communications Co Ltd
+7CA449     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+10-82-3D   (hex)		Ruijie Networks Co.,LTD
+10823D     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+90-98-77   (hex)		Vestel Elektronik San ve Tic. A.S.
+909877     (base 16)		Vestel Elektronik San ve Tic. A.S.
+				Organize san
+				Manisa  Turket  45030
+				TR
+
+E0-CB-1D   (hex)		Amazon Technologies Inc.
+E0CB1D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+80-56-3C   (hex)		ZF
+80563C     (base 16)		ZF
+				Ehlersstraße 50
+				Friedrichshafen  BW  88046
+				DE
+
+D0-06-6A   (hex)		Cornelis Networks, Inc.
+D0066A     (base 16)		Cornelis Networks, Inc.
+				1500 Liberty Ridge Drive, Suite 100
+				Wayne  PA  19087
+				US
+
+2C-9E-00   (hex)		Sony Interactive Entertainment Inc.
+2C9E00     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+88-3C-93   (hex)		Alcatel-Lucent Enterprise
+883C93     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Rd
+				Calabasas  CA  91301
+				US
+
+AC-96-5B   (hex)		Lucid Motors
+AC965B     (base 16)		Lucid Motors
+				7373 Gateway Blvd
+				Newark  CA  94560
+				US
+
+84-AA-A4   (hex)		SONoC Corp.
+84AAA4     (base 16)		SONoC Corp.
+				8F-3, No. 1071, Zhongzheng Road, Taoyuan District, Taoyuan city, Taiwan
+				Taoyuan    330
+				TW
+
+E8-BF-DB   (hex)		Inodesign Group
+E8BFDB     (base 16)		Inodesign Group
+				155 Avenue Georges Hannart
+				CROIX    59170
+				FR
+
+28-7E-80   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+287E80     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.2,Jin-da Road,Huinan Industrial Park
+				Hui Zhou  Guangdong  516025
+				CN
+
+E8-FF-98   (hex)		Huawei Device Co., Ltd.
+E8FF98     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-15-51   (hex)		Huawei Device Co., Ltd.
+241551     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+58-95-7E   (hex)		Huawei Device Co., Ltd.
+58957E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-1A-0F   (hex)		ARTECHE GROUP
+001A0F     (base 16)		ARTECHE GROUP
+				Derio Bidea 28, Zabalondo Industrialdea
+				Mungia  Bizkaia  48100
+				ES
+
+B8-14-4D   (hex)		Apple, Inc.
+B8144D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-28-D3   (hex)		Apple, Inc.
+EC28D3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-65-18   (hex)		Apple, Inc.
+086518     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-57-CE   (hex)		Apple, Inc.
+2C57CE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-9F-71   (hex)		Dolphin Electronics (DongGuan) Co., Ltd.
+0C9F71     (base 16)		Dolphin Electronics (DongGuan) Co., Ltd.
+				Building 3,No.2 Baolong Road, Houjie Town,
+				Dongguan  Guangdong  523000
+				CN
+
+74-58-89   (hex)		Multilaser Industrial S.A.
+745889     (base 16)		Multilaser Industrial S.A.
+				Rua Josefa Gomes de Souza, 382
+				Extrema  Minas Gerais  37640-000
+				BR
+
+00-10-EC   (hex)		Embedded Planet
+0010EC     (base 16)		Embedded Planet
+				31225 Bainbridge Road, Suite N
+				Solon  OH  44139
+				US
+
+FC-DF-00   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+FCDF00     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+F0-1A-A0   (hex)		Aruba, a Hewlett Packard Enterprise Company
+F01AA0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+E4-8C-73   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+E48C73     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+2C-94-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C9452     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-01-B1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6001B1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-8B-76   (hex)		Calix Inc.
+1C8B76     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+2C-B6-C8   (hex)		Raisecom Technology CO., LTD
+2CB6C8     (base 16)		Raisecom Technology CO., LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+D8-34-D1   (hex)		Shenzhen Orange Digital Technology Co.,Ltd
+D834D1     (base 16)		Shenzhen Orange Digital Technology Co.,Ltd
+				Room 2305,Building 2,Phase 6 ,Vanke Yuncheng,Tongfa South Road,Xili Community,Xili Street,Nanshan District,Shenzhen
+				Shenzhen    518055
+				CN
+
+C4-61-C7   (hex)		Microsoft Corporation
+C461C7     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+AC-CB-36   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ACCB36     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+C8-40-52   (hex)		PAX Computer Technology(Shenzhen) Ltd.
+C84052     (base 16)		PAX Computer Technology(Shenzhen) Ltd.
+				4/F, No.3 Building, Software Park, Second Central Science-Tech Road, High-Tech
+				Shenzhen  GuangDong  518057
+				CN
+
+00-1E-70   (hex)		Chelton Limited
+001E70     (base 16)		Chelton Limited
+				The Chelton Centre, Fourth Avenue
+				Marlow  Buckinghamshire  SL7 1TF 
+				GB
+
+64-1A-22   (hex)		Heliospectra AB
+641A22     (base 16)		Heliospectra AB
+				Fiskhamnsgatan 2
+				Gothenburg    SE-414 58
+				SE
+
+54-70-68   (hex)		VTech Communications Limited
+547068     (base 16)		VTech Communications Limited
+				23/F, Tai Ping Industrial Centre, Block 1, 57 Ting Kok Road, Tai Po, New Territories
+				Hong kong    00852
+				HK
+
+24-09-35   (hex)		Samsung Electronics Co.,Ltd
+240935     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+84-22-89   (hex)		Samsung Electronics Co.,Ltd
+842289     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+68-EE-4B   (hex)		Sharetronic Data Technology Co.,Ltd
+68EE4B     (base 16)		Sharetronic Data Technology Co.,Ltd
+				Room 1209, 12 / F, Building 1, Yaohua Foundation Building, Shennan Avenue, Futian District
+				Shenzhen  Guangdong  518040
+				CN
+
+60-70-6C   (hex)		Google, Inc.
+60706C     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+C8-2A-DD   (hex)		Google, Inc.
+C82ADD     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+C0-A5-E8   (hex)		Intel Corporate
+C0A5E8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+90-65-84   (hex)		Intel Corporate
+906584     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+28-C5-D2   (hex)		Intel Corporate
+28C5D2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+AC-4C-A5   (hex)		Technicolor CH USA Inc.
+AC4CA5     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+00-CB-7A   (hex)		Technicolor CH USA Inc.
+00CB7A     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+48-C3-5A   (hex)		LENOVO(BEIJING)CO., LTD.
+48C35A     (base 16)		LENOVO(BEIJING)CO., LTD.
+				Lenovo HQ East,Building 1,No.10 Courtyard Xibeiwang East Road,Haidian District
+				Beijing    100176
+				CN
+
+40-E1-1C   (hex)		shenzhen Cloud High Communication Technology Co.,Ltd
+40E11C     (base 16)		shenzhen Cloud High Communication Technology Co.,Ltd
+				Room 1908, Building 1, Jinlitong Financial Center Building, No. 1100, Xingye Road, Haiwang Community, Xin'an Street, Bao'an District, Shenzhen, China  
+				Shenzhen    518128
+				CN
+
+C4-83-72   (hex)		IEEE Registration Authority
+C48372     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B4-DB-91   (hex)		CELESTICA INC.
+B4DB91     (base 16)		CELESTICA INC.
+				1900-5140 Yonge Street PO Box 42   
+				Toronto  Ontario  M2N 6L7
+				CA
+
+C0-BF-AC   (hex)		Huawei Device Co., Ltd.
+C0BFAC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+44-27-2E   (hex)		Huawei Device Co., Ltd.
+44272E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+08-1A-FD   (hex)		Huawei Device Co., Ltd.
+081AFD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+84-07-C4   (hex)		Carrier Corporation
+8407C4     (base 16)		Carrier Corporation
+				13995 Pasteur Boulevard
+				Palm Beach Gardens  FL  33418
+				US
+
+10-66-50   (hex)		Robert Bosch JuP1
+106650     (base 16)		Robert Bosch JuP1
+				Robert Bosch 1150
+				Juarez  Chihuahua  32557
+				MX
+
+A8-0C-03   (hex)		Florawise
+A80C03     (base 16)		Florawise
+				?TÜ Ar? Teknokent No:6 Sar?yer
+				?stanbul    34467
+				TR
+
+CC-8D-B5   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+CC8DB5     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+AC-EE-64   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+ACEE64     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+44-64-3C   (hex)		Cisco Systems, Inc
+44643C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-16-1B   (hex)		Cisco Systems, Inc
+24161B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A8-40-0B   (hex)		Visteon Corporation
+A8400B     (base 16)		Visteon Corporation
+				One Village Center Drive
+				Van Buren Twp  MI  48111
+				US
+
+00-12-F3   (hex)		u-blox AG
+0012F3     (base 16)		u-blox AG
+				Norra Vallgatan 64
+				Malmoe    SE-211 22
+				SE
+
+18-18-8B   (hex)		FCNT LMITED
+18188B     (base 16)		FCNT LMITED
+				Sanki Yamato Building, 7-10-1 Chuorinkan
+				Yamato  Kanagawa  242-8588
+				JP
+
+3C-B0-7E   (hex)		Arounds Intelligent Equipment Co., Ltd.
+3CB07E     (base 16)		Arounds Intelligent Equipment Co., Ltd.
+				Room 701~703,Vanke Huamao Plaza? No.508, East 2nd Section, 2ndRingRoad,Chenghua District
+				Chengdu  Sichuan  610000
+				CN
+
+5C-A0-6C   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+5CA06C     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+C0-4E-8A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C04E8A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-56-9B   (hex)		WiZ
+08569B     (base 16)		WiZ
+				Unit 1203-5, 12/F, Tower 1, Enterprise Square, 9 Sheung Yuet Road
+				Kowloon Bay  Hong Kong  0000
+				HK
+
+20-31-8D   (hex)		Giax GmbH
+20318D     (base 16)		Giax GmbH
+				Am Weichselgarten 7
+				Erlangen    91058
+				DE
+
+8C-94-6A   (hex)		New H3C Technologies Co., Ltd
+8C946A     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+FC-11-65   (hex)		Cambium Networks Limited
+FC1165     (base 16)		Cambium Networks Limited
+				Unit B2, Linhay Business Park,
+				Ashburton  Devon  TQ13 7UP
+				GB
+
+F8-00-9D   (hex)		INTRACOM DEFENSE S.A.
+F8009D     (base 16)		INTRACOM DEFENSE S.A.
+				21 Km. Markopoulou Ave.
+				Koropi  Attica  19441
+				GR
+
+20-16-42   (hex)		Microsoft Corporation
+201642     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+A8-3B-76   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+A83B76     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+48-E7-29   (hex)		Espressif Inc.
+48E729     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+90-DA-F9   (hex)		Siemens Rail Automation SAU
+90DAF9     (base 16)		Siemens Rail Automation SAU
+				Ronda de Europa, 5
+				Tres Cantos    28760 
+				ES
+
+E8-BA-E2   (hex)		Xplora Technologies AS
+E8BAE2     (base 16)		Xplora Technologies AS
+				Nedre Slottsgate 8
+				Oslo    0157
+				NO
+
+90-27-78   (hex)		Open Infrastructure
+902778     (base 16)		Open Infrastructure
+				Neufeldstrasse 125
+				Bern    3012
+				CH
+
+08-E6-3B   (hex)		zte corporation
+08E63B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+88-C1-74   (hex)		zte corporation
+88C174     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+CC-29-BD   (hex)		zte corporation
+CC29BD     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+BC-F8-8B   (hex)		zte corporation
+BCF88B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+3C-A7-AE   (hex)		zte corporation
+3CA7AE     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+9C-DE-4D   (hex)		ML vision Co.,LTD
+9CDE4D     (base 16)		ML vision Co.,LTD
+				#503, 403-dong, Bucheon Techno Park, 655, Pyeongcheon-ro
+				Bucheon-si  Gyeonggi-do  14502
+				KR
+
+10-3C-59   (hex)		zte corporation
+103C59     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+78-90-A2   (hex)		zte corporation
+7890A2     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+50-5D-7A   (hex)		zte corporation
+505D7A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+FC-33-57   (hex)		KAGA FEI Co., Ltd.
+FC3357     (base 16)		KAGA FEI Co., Ltd.
+				100-45, Shinyokohama 2-Chome
+				Kohoku-Ku Yokohama-Shi  Kanagawa  222-8508
+				JP
+
+5C-BB-EE   (hex)		zte corporation
+5CBBEE     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+68-41-8F   (hex)		Telechips, Inc.
+68418F     (base 16)		Telechips, Inc.
+				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
+				Seoul  Seoul  05510
+				KR
+
+BC-9E-BB   (hex)		Nintendo Co.,Ltd
+BC9EBB     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+F8-F0-C5   (hex)		Suzhou Kuhan Information Technologies Co.,Ltd.
+F8F0C5     (base 16)		Suzhou Kuhan Information Technologies Co.,Ltd.
+				4F?A5F, SISPARK Building 17, Industrial Park District, Suzhou
+				Suzhou  Jiangsu  215028
+				CN
+
+F8-DE-73   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F8DE73     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-1A-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC1A02     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-3B-99   (hex)		ITEL MOBILE LIMITED
+3C3B99     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+1C-1A-1B   (hex)		Shanghai Sunmi Technology Co.,Ltd.
+1C1A1B     (base 16)		Shanghai Sunmi Technology Co.,Ltd.
+				Room 505, No.388 Song Hu Road, Yang Pu District, Shanghai, China
+				Shanghai  Shanghai  200433
+				CN
+
+10-2E-00   (hex)		Intel Corporate
+102E00     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+80-38-D4   (hex)		Fibercentury Network Technology Co.,Ltd.
+8038D4     (base 16)		Fibercentury Network Technology Co.,Ltd.
+				No. 1515 and No. 1516, floor 15, unit 2, building 2, Section 1, Huayang Huafu Avenue, Tianfu new area
+				Chengdu  Sichuan  610000
+				CN
+
+7C-29-6F   (hex)		Apple, Inc.
+7C296F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-ED-CF   (hex)		Apple, Inc.
+40EDCF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-98-6B   (hex)		Apple, Inc.
+8C986B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-39-57   (hex)		Liteon Technology Corporation
+D03957     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+1C-86-82   (hex)		Apple, Inc.
+1C8682     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-54-E3   (hex)		Apple, Inc.
+8054E3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-09-C8   (hex)		Cisco Systems, Inc
+D009C8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+FC-91-89   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+FC9189     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+A8-16-9D   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+A8169D     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.2,Jin-da Road,Huinan Industrial Park
+				Hui Zhou  Guangdong  516025
+				CN
+
+AC-AD-4B   (hex)		zte corporation
+ACAD4B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+20-3A-43   (hex)		Intel Corporate
+203A43     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+44-49-88   (hex)		Intel Corporate
+444988     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+80-F7-A6   (hex)		Shenzhen C-Data Technology Co., Ltd.
+80F7A6     (base 16)		Shenzhen C-Data Technology Co., Ltd.
+				#601, Fl6, Bldg F, No.1008  Yangguang Community, Xili, Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+9C-54-40   (hex)		ChengDu TD Tech
+9C5440     (base 16)		ChengDu TD Tech
+				C3 floor, software park, No. 219, Tianhua Second Road
+				Chengdu  Tianfu Avenue, high tech Zone  610041
+				CN
+
+50-26-EF   (hex)		Murata Manufacturing Co., Ltd.
+5026EF     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+74-05-7C   (hex)		Qorvo International Pte. Ltd.
+74057C     (base 16)		Qorvo International Pte. Ltd.
+				1 Changi Business Park Avenue 1
+				#04-01    486058
+				SG
+
+F0-22-1D   (hex)		IEEE Registration Authority
+F0221D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-1F-A2   (hex)		Wuhan YuXin Semiconductor Co., Ltd.
+941FA2     (base 16)		Wuhan YuXin Semiconductor Co., Ltd.
+				15F Haida Innovation Plaza, No. 66 of Chuangye Road, Donghu New Technology Development Zone
+				Wuhan  Hubei  430074
+				CN
+
+6C-D1-99   (hex)		vivo Mobile Communication Co., Ltd.
+6CD199     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+00-09-EE   (hex)		MEIKYO ELECTRIC CO.,LTD
+0009EE     (base 16)		MEIKYO ELECTRIC CO.,LTD
+				Tokyo Ferrite Building, 1-1-14 Tabatashinmachi
+				Tokyo  Kita-ku  114-0012
+				JP
+
+E8-26-B6   (hex)		Companies House to GlucoRx Technologies Ltd.
+E826B6     (base 16)		Companies House to GlucoRx Technologies Ltd.
+				Strathpeffer Road
+				Dingwall  Scotland  IV159QF
+				GB
+
+80-AB-4D   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+80AB4D     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+4C-BA-7D   (hex)		Gemtek Technology Co., Ltd.
+4CBA7D     (base 16)		Gemtek Technology Co., Ltd.
+				No.15-1 Zhonghua Road
+				Hukou  Hsinchu  30352
+				TW
+
+D0-40-BE   (hex)		NPO RPS LLC
+D040BE     (base 16)		NPO RPS LLC
+				Internal territory of the urban settlement of Mosrentgen, the settlement of the Mosrentgen factory, building 1/10, office 206
+				Moscow    108820
+				RU
+
+F4-4D-AD   (hex)		Cable Matters Inc.
+F44DAD     (base 16)		Cable Matters Inc.
+				153 Northboro Road, Suite 5
+				Southborough  MA  01772
+				US
+
+F0-4A-3D   (hex)		Bosch Thermotechnik GmbH
+F04A3D     (base 16)		Bosch Thermotechnik GmbH
+				Sophienstraße 30-32
+				Wetzlar    35576
+				DE
+
+B4-9D-FD   (hex)		Shenzhen SDMC Technology CO.,Ltd.
+B49DFD     (base 16)		Shenzhen SDMC Technology CO.,Ltd.
+				Room 1022, Floor 10, Building A, Customs Building, No. 2, Xin'an 3rd Road, Dalang Community, Xin'an Street, Bao'an District
+				Shenzhen  GUANGDONG  518101
+				CN
+
+80-76-C2   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+8076C2     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+F8-D2-AC   (hex)		Technicolor CH USA Inc.
+F8D2AC     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+B0-BC-7A   (hex)		Harman/Becker Automotive Systems GmbH
+B0BC7A     (base 16)		Harman/Becker Automotive Systems GmbH
+				Becker-Göring-Straße 16
+				Karlsbad  Baden-Württemberg  76307
+				DE
+
+A0-A0-01   (hex)		Aruba, a Hewlett Packard Enterprise Company
+A0A001     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+DC-06-82   (hex)		Accessia Technology Ltd.
+DC0682     (base 16)		Accessia Technology Ltd.
+				Boundary House, Cricket Field Rd
+				Uxbridge    UB8 1QG
+				GB
+
+78-49-46   (hex)		Cambridge Mobile Telematics, Inc.
+784946     (base 16)		Cambridge Mobile Telematics, Inc.
+				One Broadway, 14th Floor
+				Cambridge  MA  02142
+				US
+
+F4-1A-9C   (hex)		Xiaomi Communications Co Ltd
+F41A9C     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+00-1A-EB   (hex)		Allied Telesis K.K.
+001AEB     (base 16)		Allied Telesis K.K.
+				No.2 TOC Bldg.
+				Shinagawa-ku  Tokyo  141-0031
+				JP
+
+DC-07-F8   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+DC07F8     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+34-87-3D   (hex)		Quectel Wireless Solutions Co.,Ltd.
+34873D     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				RM501,Building 13,No.99 TianZhou Road,Xuhui District,Shanghai,China
+				Shanghai  Shanghai  200233
+				CN
+
+C4-41-37   (hex)		Quectel Wireless Solutions Co.,Ltd.
+C44137     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+10-D6-80   (hex)		Tendyron Corporation
+10D680     (base 16)		Tendyron Corporation
+				Tendyron Building,Zhongguancun NO.1 Park,Beiqing Road,Haidian District,Beijing,China
+				Beijing    100000
+				CN
+
+0C-FC-18   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0CFC18     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-3E-73   (hex)		Mist Systems, Inc.
+003E73     (base 16)		Mist Systems, Inc.
+				1601 South De Anza Blvd, Suite 248
+				Cupertino  CA  95014
+				US
+
+44-D2-67   (hex)		Snorble
+44D267     (base 16)		Snorble
+				PO Box 40
+				Skillman  NJ  08558
+				US
+
+84-90-0A   (hex)		Arcadyan Corporation
+84900A     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+8C-D0-B2   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+8CD0B2     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+5C-3E-06   (hex)		Cisco Systems, Inc
+5C3E06     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-28-E5   (hex)		Cisco Systems, Inc
+C828E5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-A0-52   (hex)		Motorola Mobility LLC, a Lenovo Company
+C4A052     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+B0-FC-88   (hex)		Sagemcom Broadband SAS
+B0FC88     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+78-76-89   (hex)		eero inc.
+787689     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+0C-CC-47   (hex)		IEEE Registration Authority
+0CCC47     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+48-77-06   (hex)		NXP Semiconductor (Tianjin) LTD.
+487706     (base 16)		NXP Semiconductor (Tianjin) LTD.
+				No.15 Xinghua Avenue, Xiqing Economic Development Area
+				Tianjin    300385
+				CN
+
+E8-80-88   (hex)		LCFC(Hefei) Electronics Technology Co., Ltd
+E88088     (base 16)		LCFC(Hefei) Electronics Technology Co., Ltd
+				No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area
+				HEFEI  ANHUI  230601
+				CN
+
+BC-E8-FA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+BCE8FA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+00-FC-70   (hex)		Intrepid Control Systems, Inc.
+00FC70     (base 16)		Intrepid Control Systems, Inc.
+				1850 Research Drive
+				Troy  MI  48083
+				US
+
+08-F1-B3   (hex)		Cisco Meraki
+08F1B3     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+08-C3-B3   (hex)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
+08C3B3     (base 16)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
+				B Area, 10th floor, TCL multimedia Building, TCL International E City, #1001 Zhonshanyuan road,Shenzhen
+				guangdong  China  518058
+				CN
+
+20-45-69   (hex)		ITEL MOBILE LIMITED
+204569     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+6C-0C-9A   (hex)		Amazon Technologies Inc.
+6C0C9A     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+A4-C7-F6   (hex)		Extreme Networks, Inc.
+A4C7F6     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+CC-00-F1   (hex)		Sagemcom Broadband SAS
+CC00F1     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+D4-63-52   (hex)		Vutility Inc.
+D46352     (base 16)		Vutility Inc.
+				126 W Sego Lily Ste 150
+				Sandy  UT  84070
+				US
+
+50-5A-65   (hex)		AzureWave Technology Inc.
+505A65     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd., Xindian Dist.
+				New Taipei City    23144
+				TW
+
+30-82-16   (hex)		Apple, Inc.
+308216     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-A5-59   (hex)		IEEE Registration Authority
+C4A559     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+DC-AC-6F   (hex)		Everytale Inc
+DCAC6F     (base 16)		Everytale Inc
+				2093 Philadelphia Pike #2211
+				Claymont  DE  19703
+				US
+
+F4-15-32   (hex)		PETAiO (NanJing), Inc.
+F41532     (base 16)		PETAiO (NanJing), Inc.
+				17 / F, block A, Weien building, No. 73 Huachuang Road, Yan Chuang Park, Jiang Bei New Area
+				Nanjing  Jiangsu  211800
+				CN
+
+A8-B2-71   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A8B271     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-05-E4   (hex)		ALPSALPINE CO,.LTD
+6405E4     (base 16)		ALPSALPINE CO,.LTD
+				nishida 6-1
+				kakuda-City  Miyagi-Pref  981-1595
+				JP
+
+BC-64-D9   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+BC64D9     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+30-1F-48   (hex)		zte corporation
+301F48     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+94-0E-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+940EE7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-C7-4A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+7CC74A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+38-FC-34   (hex)		Huawei Device Co., Ltd.
+38FC34     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+3C-F6-92   (hex)		Huawei Device Co., Ltd.
+3CF692     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+28-B5-E8   (hex)		Texas Instruments
+28B5E8     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+48-29-E4   (hex)		AO 
+4829E4     (base 16)		AO 
+				Prospekt Mira
+				Moscow    129223
+				RU
+
+70-F8-AE   (hex)		Microsoft Corporation
+70F8AE     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+F8-3C-80   (hex)		MITSUMI ELECTRIC CO.,LTD.
+F83C80     (base 16)		MITSUMI ELECTRIC CO.,LTD.
+				2-11-2, Tsurumaki
+				Tama-shi  Tokyo  206-8567
+				JP
+
+D8-3A-DD   (hex)		Raspberry Pi Trading Ltd
+D83ADD     (base 16)		Raspberry Pi Trading Ltd
+				Maurice Wilkes Building, Cowley Road
+				Cambridge    CB4 0DS
+				GB
+
+64-EC-65   (hex)		vivo Mobile Communication Co., Ltd.
+64EC65     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+F4-24-62   (hex)		Selcom Electronics (Shanghai) Co., Ltd
+F42462     (base 16)		Selcom Electronics (Shanghai) Co., Ltd
+				A7/A24 No.5399, Waiqingsong Road, Qing Pu
+				Shanghai  Shanghai  201707
+				CN
+
+F4-A1-7F   (hex)		Marquardt Electronics Technology (Shanghai) Co.Ltd
+F4A17F     (base 16)		Marquardt Electronics Technology (Shanghai) Co.Ltd
+				No. 650 Qingda Road, Heqing Industrial Zone, Shanghai
+				Shanghai    201201
+				CN
+
+48-BC-E1   (hex)		Samsung Electronics Co.,Ltd
+48BCE1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+90-B4-DD   (hex)		Private
+90B4DD     (base 16)		Private
+				Hovås Snöbärsväg 2, lgh 201
+				Hovås    43654
+				SE
+
+B8-5C-EE   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
+B85CEE     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
+				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
+				 Beijing    100085
+				CN
+
+8C-79-09   (hex)		Aruba, a Hewlett Packard Enterprise Company
+8C7909     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+D0-D0-03   (hex)		Samsung Electronics Co.,Ltd
+D0D003     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+5C-76-D5   (hex)		Nokia
+5C76D5     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+8C-7A-00   (hex)		Nokia
+8C7A00     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+B8-38-EF   (hex)		ADVA Optical Networking Ltd.
+B838EF     (base 16)		ADVA Optical Networking Ltd.
+				ADVAntage House
+				York    YO30 4RY
+				GB
+
+B4-ED-D5   (hex)		Quectel Wireless Solutions Co.,Ltd.
+B4EDD5     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+2C-D1-C6   (hex)		Murata Manufacturing Co., Ltd.
+2CD1C6     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+F0-74-8D   (hex)		Ruijie Networks Co.,LTD
+F0748D     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+08-42-18   (hex)		Asyril SA
+084218     (base 16)		Asyril SA
+				Z.I. du Vivier 22
+				Villaz-St-Pierre   Fribourg  1690
+				CH
+
+D8-5B-22   (hex)		Shenzhen Hohunet Technology Co., Ltd
+D85B22     (base 16)		Shenzhen Hohunet Technology Co., Ltd
+				8th floor, block a, Huahan technology building, No.16, Langshan Road, North District, Science Park, Nanshan District, Shenzhen
+				Shenzhen  Gongdong  518000
+				CN
+
+08-91-A3   (hex)		Amazon Technologies Inc.
+0891A3     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+0C-D9-23   (hex)		GOCLOUD Networks(GAOKE Networks)
+0CD923     (base 16)		GOCLOUD Networks(GAOKE Networks)
+				Room 5-301-A02, No. 3000,  Longdong Road
+				Pudong  Shanghai  201203
+				CN
+
+90-9B-6F   (hex)		Apple, Inc.
+909B6F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-73-B4   (hex)		Apple, Inc.
+7473B4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-FC-14   (hex)		Apple, Inc.
+A4FC14     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-1A-F1   (hex)		Apple, Inc.
+A81AF1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-0C-33   (hex)		Silicon Laboratories
+980C33     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+CC-08-FA   (hex)		Apple, Inc.
+CC08FA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-58-46   (hex)		Trig Avionics Limited
+705846     (base 16)		Trig Avionics Limited
+				Heriot Watt Research Park
+				Edinburgh    EH14 4AP
+				GB
+
+84-39-8F   (hex)		Fortinet, Inc.
+84398F     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale    94086
+				US
+
+A4-A5-28   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+A4A528     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+E8-78-EE   (hex)		New H3C Technologies Co., Ltd
+E878EE     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+EC-A7-AD   (hex)		Barrot Technology Co.,Ltd.
+ECA7AD     (base 16)		Barrot Technology Co.,Ltd.
+				A1009,Block A,Jia Hua Building,No.9 Shangdi 3rd Street,Haidian District,Beijing
+				beijing  beijing  100000
+				CN
+
+9C-DB-AF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9CDBAF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-2E-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C2E57     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-D7-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8D775     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-DB-D2   (hex)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+44DBD2     (base 16)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+				309, 3th Floor, No.16, Yun Ding North Road, Huli District
+				xiamen  Fujian  361015
+				CN
+
+5C-64-F1   (hex)		Cisco Systems, Inc
+5C64F1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-2B   (hex)		Inalp Solutions AG
+00302B     (base 16)		Inalp Solutions AG
+				Badenerstrasse 13
+				Brugg    5200
+				CH
+
+1C-3B-62   (hex)		HMD Global Oy
+1C3B62     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+24-48-45   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+244845     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+E0-DC-A0   (hex)		Siemens Industrial Automation Products Ltd., Chengdu
+E0DCA0     (base 16)		Siemens Industrial Automation Products Ltd., Chengdu
+				Tianyuan Road 99
+				Cheng Du  Si Chuan  611731
+				CN
+
+88-58-BE   (hex)		kuosheng.com
+8858BE     (base 16)		kuosheng.com
+				Room 103, Building 15 of Headquarters Center, No. 555, North Panyu Ave
+				Guangzhou  Guangdong  511493
+				CN
+
+F4-64-12   (hex)		Sony Interactive Entertainment Inc.
+F46412     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+7C-4D-8F   (hex)		HP Inc.
+7C4D8F     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+3C-F9-F0   (hex)		zte corporation
+3CF9F0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+68-77-DA   (hex)		zte corporation
+6877DA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+74-D5-58   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+74D558     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+9C-CB-F7   (hex)		CLOUD STAR TECHNOLOGY CO., LTD.
+9CCBF7     (base 16)		CLOUD STAR TECHNOLOGY CO., LTD.
+				13F.-1, No. 167, Wenqing Rd  Guishan Dist
+				Taoyuan City  Taoyuan  333613
+				TW
+
+48-81-4E   (hex)		E&M SOLUTION CO,.Ltd
+48814E     (base 16)		E&M SOLUTION CO,.Ltd
+				#813-ho, 555, Byeolmang-ro
+				Ansan-si  Danwon-gu  15434
+				KR
+
+AC-80-0A   (hex)		Sony Corporation
+AC800A     (base 16)		Sony Corporation
+				Sony City Osaki 2-10-1
+				Shinagawa-ku   Tokyo  141-8610
+				JP
+
+B8-EA-98   (hex)		Xiaomi Communications Co Ltd
+B8EA98     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+78-8C-B5   (hex)		TP-Link Corporation Limited
+788CB5     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+10-C4-CA   (hex)		HUMAX Co., Ltd.
+10C4CA     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+58-C9-35   (hex)		Chiun Mai Communication System, Inc
+58C935     (base 16)		Chiun Mai Communication System, Inc
+				No.4, Minsheng St., Tucheng District
+				New Taipei City    23678
+				TW
+
+BC-49-B2   (hex)		SHENZHEN ALONG COMMUNICATION TECH CO., LTD
+BC49B2     (base 16)		SHENZHEN ALONG COMMUNICATION TECH CO., LTD
+				Room1301,ZHENYEInternationalBusinessCenter,QIANHAIRoad,NANSHAN District,SHENZHEN,PRCTEL
+				SHENZHEN    518000
+				CN
+
+94-97-AE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+9497AE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+0C-BD-75   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+0CBD75     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+AC-90-73   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC9073     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+FC-1D-3A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC1D3A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-8C-81   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+548C81     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+88-B6-BD   (hex)		Flaircomm Microelectronics, Inc.
+88B6BD     (base 16)		Flaircomm Microelectronics, Inc.
+				7F, Guomai Building, Guomai Science and Technology Park,116 Jiangbin East Avenue, Mawei District
+				Fuzhou  Fujian  350015
+				CN
+
+00-50-CA   (hex)		DZS Inc.
+0050CA     (base 16)		DZS Inc.
+				680 CENTRAL AVENUE - STE. #301
+				DOVER  NH  03820
+				US
+
+74-EE-8D   (hex)		Apollo Intelligent Connectivity (Beijing) Technology Co., Ltd.
+74EE8D     (base 16)		Apollo Intelligent Connectivity (Beijing) Technology Co., Ltd.
+				Baidu Technology Park Building No.2 No.10 Xibeiwang East Road Haidian District
+				BeiJing  BeiJing  100193
+				CN
+
+F0-9F-C2   (hex)		Ubiquiti Inc
+F09FC2     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+80-2A-A8   (hex)		Ubiquiti Inc
+802AA8     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+78-8A-20   (hex)		Ubiquiti Inc
+788A20     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+74-83-C2   (hex)		Ubiquiti Inc
+7483C2     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+E0-63-DA   (hex)		Ubiquiti Inc
+E063DA     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+24-5A-4C   (hex)		Ubiquiti Inc
+245A4C     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+E4-BE-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4BEFB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-F8-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+58F8D7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-22-32   (hex)		Ubiquiti Inc
+602232     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+E4-38-83   (hex)		Ubiquiti Inc
+E43883     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+00-03-51   (hex)		Diebold Nixdorf
+000351     (base 16)		Diebold Nixdorf
+				5995 Mayfair Road
+				North Canton  OH  44720
+				US
+
+E8-EB-DD   (hex)		Guangzhou Qingying Acoustics Technology Co., Ltd
+E8EBDD     (base 16)		Guangzhou Qingying Acoustics Technology Co., Ltd
+				Room 905, 863 Industrialization Promotion Center, Guangzhou Private Science Park, Taihe Town, Baiyun District
+				Guangzhou  Guangdong  510000
+				CN
+
+D8-58-C6   (hex)		Katch Asset Tracking Pty Limited 
+D858C6     (base 16)		Katch Asset Tracking Pty Limited 
+				98 Riley St
+				Darlinghurst   NSW  2010
+				AU
+
+C4-A1-AE   (hex)		Huawei Device Co., Ltd.
+C4A1AE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A8-71-16   (hex)		Earda Technologies co Ltd
+A87116     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+70-66-B9   (hex)		Huawei Device Co., Ltd.
+7066B9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-C6-A0   (hex)		Lumacron Technology Ltd.
+2CC6A0     (base 16)		Lumacron Technology Ltd.
+				4 Pitreavie Court, Pitreavie Business Park
+				Dunfermline  Fife  KY11 8UU
+				GB
+
+FC-D7-49   (hex)		Amazon Technologies Inc.
+FCD749     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+48-6F-33   (hex)		KYUNGWOO.SYSTEM, INC.
+486F33     (base 16)		KYUNGWOO.SYSTEM, INC.
+				68, Digital-ro 9-gil, Geumcheon-gu, Seoul, Republic of Korea
+				Seoul    08512
+				KR
+
+2C-96-82   (hex)		MitraStar Technology Corp.
+2C9682     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+EC-41-CA   (hex)		Shenzhen TecAnswer Technology co.,ltd
+EC41CA     (base 16)		Shenzhen TecAnswer Technology co.,ltd
+				1004 yuemeite Building,No.1 gaoxin South 7th Road,Gaoxin District,Yuehai Street,Nanshan District,Shenzhen
+				Shenzhen  Guangdong  518063
+				CN
+
+24-BB-C9   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+24BBC9     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+14-84-77   (hex)		New H3C Technologies Co., Ltd
+148477     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+14-96-2D   (hex)		New H3C Technologies Co., Ltd
+14962D     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+C4-A6-4E   (hex)		Quectel Wireless Solutions Co.,Ltd.
+C4A64E     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+E0-3C-1C   (hex)		IEEE Registration Authority
+E03C1C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+AC-91-9B   (hex)		Wistron Neweb Corporation
+AC919B     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+CC-F3-C8   (hex)		Technicolor CH USA Inc.
+CCF3C8     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+58-10-31   (hex)		Hon Hai Precision IND.CO.,LTD
+581031     (base 16)		Hon Hai Precision IND.CO.,LTD
+				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
+				TAIPEI  TAIWAN  33859
+				CN
+
+F8-0D-A9   (hex)		Zyxel Communications Corporation
+F80DA9     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+44-20-63   (hex)		Continental Automotive Technologies GmbH
+442063     (base 16)		Continental Automotive Technologies GmbH
+				Siemensstr. 12
+				Regensburg    93055
+				DE
+
+48-5A-0D   (hex)		Juniper Networks
+485A0D     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+30-86-F1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+3086F1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+04-36-B8   (hex)		I&C Technology
+0436B8     (base 16)		I&C Technology
+				I&C Building, 24, Pangyo-ro 255beon-gil, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13486
+				KR
+
+F0-A0-B1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F0A0B1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-4F-42   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+404F42     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-45-06   (hex)		Dell Inc.
+B44506     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+04-BF-1B   (hex)		Dell Inc.
+04BF1B     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+38-A8-51   (hex)		Quickset Defense Technologies, LLC
+38A851     (base 16)		Quickset Defense Technologies, LLC
+				3650 Woodhead Drive
+				Northbrook   IL  60062
+				US
+
+24-A4-2C   (hex)		NETIO products a.s.
+24A42C     (base 16)		NETIO products a.s.
+				U Pily 3
+				Prague    143 00
+				CZ
+
+60-1B-52   (hex)		Vodafone Italia S.p.A.
+601B52     (base 16)		Vodafone Italia S.p.A.
+				Via Lorenteggio nr. 240
+				Milan  Italy  20147
+				IT
+
+C0-8F-20   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+C08F20     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+08-FF-24   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+08FF24     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+90-B6-7A   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+90B67A     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+24-9A-C8   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+249AC8     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+A8-88-1F   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
+A8881F     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
+				NEW DELHI    NA
+				IN
+
+20-15-82   (hex)		Apple, Inc.
+201582     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-92-1A   (hex)		Apple, Inc.
+40921A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-E2-C9   (hex)		Apple, Inc.
+10E2C9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-C6-47   (hex)		Extreme Networks, Inc.
+A8C647     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+E0-28-B1   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+E028B1     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+28-C0-1B   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+28C01B     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+30-31-80   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+303180     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+5C-28-86   (hex)		Inventec(Chongqing) Corporation
+5C2886     (base 16)		Inventec(Chongqing) Corporation
+				No.66 West District 2nd Rd, Shapingba District
+				Chongqing  Chongqing  401331
+				CN
+
+FC-84-A7   (hex)		Murata Manufacturing Co., Ltd.
+FC84A7     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+88-3F-37   (hex)		UHTEK CO., LTD.
+883F37     (base 16)		UHTEK CO., LTD.
+				403DONG 503HO, 655 PYEONGCHEON-RO
+				BUCHEONSI  KYEONGGIDO  14502
+				KR
+
+9C-FF-C2   (hex)		AVI Systems GmbH
+9CFFC2     (base 16)		AVI Systems GmbH
+				Dr. Franz Wilhelmstraße 2A
+				Krems a. d. Donau    3500
+				AT
+
+44-D8-78   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+44D878     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+A0-D8-07   (hex)		Huawei Device Co., Ltd.
+A0D807     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-78-0E   (hex)		Huawei Device Co., Ltd.
+2C780E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-B2-0A   (hex)		Huawei Device Co., Ltd.
+34B20A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-F4-AB   (hex)		Espressif Inc.
+98F4AB     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+D8-BF-C0   (hex)		Espressif Inc.
+D8BFC0     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+20-26-81   (hex)		TECNO MOBILE LIMITED
+202681     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+F4-D6-20   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+F4D620     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+64-FB-92   (hex)		PPC Broadband Inc.
+64FB92     (base 16)		PPC Broadband Inc.
+				6176 E Molloy Rd
+				East Syracuse  NY  13057
+				US
+
+14-13-46   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+141346     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+94-90-34   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+949034     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+98-7A-10   (hex)		Ericsson AB
+987A10     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+54-2B-DE   (hex)		New H3C Technologies Co., Ltd
+542BDE     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+98-F7-81   (hex)		ARRIS Group, Inc.
+98F781     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+78-97-C3   (hex)		DINGXIN INFORMATION TECHNOLOGY CO.,LTD
+7897C3     (base 16)		DINGXIN INFORMATION TECHNOLOGY CO.,LTD
+				No.6 huasui Road,ZhuJiang Xincheng
+				Guangzhou  Guangdong  510623
+				CN
+
+4C-90-DB   (hex)		JL Audio
+4C90DB     (base 16)		JL Audio
+				10369 N Commerce Pkwy
+				Mirimar  FL  33025
+				US
+
+B8-99-AE   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+B899AE     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+				Chudong science and technology park, 111 shaxin road, tangxia town,
+				dongguan city  guangdong province  523710
+				CN
+
+E8-D0-B9   (hex)		Taicang T&W Electronics
+E8D0B9     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+3C-8F-06   (hex)		Shenzhen Libtor Technology Co.,Ltd
+3C8F06     (base 16)		Shenzhen Libtor Technology Co.,Ltd
+				Room 608, Building A
+				Shenzhen City  Guangdong Province  518000
+				CN
+
+B0-08-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B00875     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-F1-12   (hex)		Motorola Mobility LLC, a Lenovo Company
+8CF112     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+84-76-37   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+847637     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+FC-94-35   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC9435     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-24-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E02481     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-C0-EA   (hex)		Pepwave Limited
+A8C0EA     (base 16)		Pepwave Limited
+				A5, 5/F, HK Spinners Industrial Building, Phase 6, 481 Castle Peak Road
+				Cheung Sha Wan  Hong Kong  0
+				HK
+
+18-2A-D3   (hex)		Juniper Networks
+182AD3     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+80-B0-7B   (hex)		zte corporation
+80B07B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C8-5A-9F   (hex)		zte corporation
+C85A9F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+44-AE-AB   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+44AEAB     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+A4-F0-5E   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A4F05E     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+1C-68-7E   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
+1C687E     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
+				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
+				Shenzhen  Guangdong  518057
+				CN
+
+C0-36-56   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+C03656     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+58-85-A2   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
+5885A2     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
+				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
+				Chongqing  China  401120
+				CN
+
+2C-F8-9B   (hex)		Cisco Systems, Inc
+2CF89B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-1C   (hex)		AT&T
+00071C     (base 16)		AT&T
+				3300 E Renner Road
+				Richardson  TX  75082
+				US
+
+E0-E8-E6   (hex)		Shenzhen C-Data Technology Co., Ltd.
+E0E8E6     (base 16)		Shenzhen C-Data Technology Co., Ltd.
+				#601, Fl6, Bldg F, No.1008  Yangguang Community, Xili, Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+50-02-91   (hex)		Espressif Inc.
+500291     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+00-1D-DF   (hex)		Sunitec Enterprise Co.,Ltd
+001DDF     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F., No. 98-1, Mincyuan Rd.
+				Sindian City  Taipei County  231
+				TW
+
+8C-0F-FA   (hex)		Hutec co.,ltd
+8C0FFA     (base 16)		Hutec co.,ltd
+				46, Gunpocheomdansaneop 2-ro
+				Gunpo-si  Gyeonggi-do  15880
+				KR
+
+AC-FE-05   (hex)		ITEL MOBILE LIMITED
+ACFE05     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+78-2A-79   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+782A79     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+78-65-59   (hex)		Sagemcom Broadband SAS
+786559     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+50-D2-F5   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+50D2F5     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+24-52-6A   (hex)		Zhejiang Dahua Technology Co., Ltd.
+24526A     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+20-DF-B9   (hex)		Google, Inc.
+20DFB9     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+5C-CA-D3   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+5CCAD3     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
+				SHEN ZHEN  GUANG DONG  518000
+				CN
+
+28-16-7F   (hex)		Xiaomi Communications Co Ltd
+28167F     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+5C-E8-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CE883     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-01-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+100177     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-A1-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+44A191     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-23-A4   (hex)		Sichuan AI-Link Technology Co., Ltd.
+6023A4     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+A4-53-0E   (hex)		Cisco Systems, Inc
+A4530E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-40-3A   (hex)		IMPACT TECHNOLOGIES
+00403A     (base 16)		IMPACT TECHNOLOGIES
+				6 RUE DE L'ACADIE
+				    
+				FR
+
+F8-87-F1   (hex)		Apple, Inc.
+F887F1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-28-BF   (hex)		Continental Automotive Czech Republic s.r.o.
+9C28BF     (base 16)		Continental Automotive Czech Republic s.r.o.
+				Průmyslová 1851
+				Brandýs nad Labem    250 01
+				CZ
+
+74-D6-37   (hex)		Amazon Technologies Inc.
+74D637     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+D0-5F-64   (hex)		IEEE Registration Authority
+D05F64     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+BC-C3-1B   (hex)		Kygo Life A
+BCC31B     (base 16)		Kygo Life A
+				Sjolyst Plass 3
+				Oslo    0278
+				NO
+
+64-DF-10   (hex)		JingLue Semiconductor(SH) Ltd.
+64DF10     (base 16)		JingLue Semiconductor(SH) Ltd.
+				No.800 Naxian Rd
+				Shanghai    201210
+				CN
+
+C4-63-FB   (hex)		Neatframe AS
+C463FB     (base 16)		Neatframe AS
+				Martin Linges Vei 25
+				Fornebu  Fornebu  1364
+				NO
+
+0C-81-26   (hex)		Juniper Networks
+0C8126     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+30-57-14   (hex)		Apple, Inc.
+305714     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-44-7A   (hex)		Water-i.d. GmbH
+60447A     (base 16)		Water-i.d. GmbH
+				Daimlerstr. 20
+				Eggenstein    76344
+				DE
+
+C8-B1-CD   (hex)		Apple, Inc.
+C8B1CD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-60-CB   (hex)		Apple, Inc.
+1460CB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-F1-2A   (hex)		Apple, Inc.
+B8F12A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-AB-6A   (hex)		Chun-il Co.,Ltd.
+04AB6A     (base 16)		Chun-il Co.,Ltd.
+				13-7, Gimhae-daero 2694 beon-gil,
+				Gimhae-si  Gyeongsangnam-do  50936
+				KR
+
+54-4E-45   (hex)		Private
+544E45     (base 16)		Private
+
+04-C8-07   (hex)		Xiaomi Communications Co Ltd
+04C807     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+04-A2-22   (hex)		Arcadyan Corporation
+04A222     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+48-9B-D5   (hex)		Extreme Networks, Inc.
+489BD5     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+3C-8C-93   (hex)		Juniper Networks
+3C8C93     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+28-FE-65   (hex)		DongGuan Siyoto Electronics Co., Ltd       
+28FE65     (base 16)		DongGuan Siyoto Electronics Co., Ltd       
+				Hecheng Industrial District, QiaoTou Town
+				DongGuan City  Guangdong  523520
+				CN
+
+18-06-F5   (hex)		RAD Data Communications, Ltd.
+1806F5     (base 16)		RAD Data Communications, Ltd.
+				24 Raoul Wallenberg St.
+				Tel Aviv    69719
+				IL
+
+74-84-E1   (hex)		Dongguan Haoyuan Electronics Co.,Ltd
+7484E1     (base 16)		Dongguan Haoyuan Electronics Co.,Ltd
+				NO.161 Kejizhong RoadLiuwu Shijie Town
+				Dongguan  Guangdong  523290
+				CN
+
+44-FB-5A   (hex)		zte corporation
+44FB5A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+44-59-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4459E3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+DC-54-D7   (hex)		Amazon Technologies Inc.
+DC54D7     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+44-D3-CA   (hex)		Cisco Systems, Inc
+44D3CA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+88-9F-AA   (hex)		Hella Gutmann Solutions GmbH 
+889FAA     (base 16)		Hella Gutmann Solutions GmbH 
+				Am Krebsbach 2
+				Ihringen   Baden Württemberg  79241
+				DE
+
+E4-54-E8   (hex)		Dell Inc.
+E454E8     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+20-96-8A   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+20968A     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+8C-18-50   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+8C1850     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Hangzhou  310000
+				CN
+
+D8-D4-E6   (hex)		Hytec Inter Co., Ltd.
+D8D4E6     (base 16)		Hytec Inter Co., Ltd.
+				3-28-6 Yoyogi
+				Shibuya-ku  Tokyo  1510053
+				JP
+
+68-3F-1E   (hex)		EFFECT Photonics B.V.
+683F1E     (base 16)		EFFECT Photonics B.V.
+				Kastanjelaan 400
+				Eindhoven  Noord-Brabant  5616 LZ
+				NL
+
+00-35-FF   (hex)		Texas Instruments
+0035FF     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F8-E7-A0   (hex)		vivo Mobile Communication Co., Ltd.
+F8E7A0     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+2C-FF-EE   (hex)		vivo Mobile Communication Co., Ltd.
+2CFFEE     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+84-0B-7C   (hex)		Hitron Technologies. Inc
+840B7C     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+48-A7-3C   (hex)		Sichuan tianyi kanghe communications co., LTD
+48A73C     (base 16)		Sichuan tianyi kanghe communications co., LTD
+				No.198, section 1, xueshan avenue, jinyuan town, dayi county
+				chengdu  sichuan  611330
+				CN
+
+C8-5D-38   (hex)		HUMAX Co., Ltd.
+C85D38     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+F8-A7-63   (hex)		Zhejiang Tmall Technology Co., Ltd.
+F8A763     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+A4-98-13   (hex)		ARRIS Group, Inc.
+A49813     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+6C-29-90   (hex)		WiZ Connected Lighting Company Limited
+6C2990     (base 16)		WiZ Connected Lighting Company Limited
+				Room 3805, 148 Electric Road
+				Hong Kong  0000  0000
+				HK
+
+98-35-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9835ED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+08-4F-0A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+084F0A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-49-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A8494D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-00-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+44004D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-CF-24   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+18CF24     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-9B-3B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D89B3B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+88-40-3B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88403B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+FC-87-43   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC8743     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+80-76-93   (hex)		Newag SA
+807693     (base 16)		Newag SA
+				Wyspianskiego 3
+				Nowy Sacz  woj. Malopolskie  33-300
+				PL
+
+BC-97-40   (hex)		IEEE Registration Authority
+BC9740     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+04-88-5F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04885F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+C8-50-CE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C850CE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+50-F8-A5   (hex)		eWBM Co., Ltd.
+50F8A5     (base 16)		eWBM Co., Ltd.
+				14F, 9, Teheran-ro 20-gil
+				Gangnam-gu, Seoul    06236
+				KR
+
+14-49-BC   (hex)		DrayTek Corp.
+1449BC     (base 16)		DrayTek Corp.
+				No. 26, Fushing Rd., Hukou, Hsinchu Industrial Park,
+				Hsinchu county    30352
+				TW
+
+20-F4-78   (hex)		Xiaomi Communications Co Ltd
+20F478     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+90-73-5A   (hex)		Motorola Mobility LLC, a Lenovo Company
+90735A     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+1C-82-59   (hex)		IEEE Registration Authority
+1C8259     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-04-DF   (hex)		TERACOM TELEMATICA S.A
+0004DF     (base 16)		TERACOM TELEMATICA S.A
+				RUA AMERICA N.1000
+				Eldorado do Sul - RS    Brazil
+				BR
+
+74-38-B7   (hex)		CANON INC.
+7438B7     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+8C-04-BA   (hex)		Dell Inc.
+8C04BA     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-FA-21   (hex)		Samsung Electronics Co.,Ltd
+00FA21     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-23-02   (hex)		Samsung Electronics Co.,Ltd
+7C2302     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-B6-F7   (hex)		NEW POS TECHNOLOGY LIMITED
+18B6F7     (base 16)		NEW POS TECHNOLOGY LIMITED
+				AB Unit, 14th Floor,Block A, Financial Technology Building.No. 11 Keyuan Rd
+				Shenzhen    518057
+				CN
+
+5C-B1-5F   (hex)		Oceanblue Cloud Technology Limited
+5CB15F     (base 16)		Oceanblue Cloud Technology Limited
+				253-261 Hennessy Road
+				Hong Kong  Hong Kong  999077
+				HK
+
+18-AA-CA   (hex)		Sichuan tianyi kanghe communications co., LTD
+18AACA     (base 16)		Sichuan tianyi kanghe communications co., LTD
+				No.198, section 1, xueshan avenue, jinyuan town, dayi county, sichuan province
+				chengdu  sichuan  611330
+				CN
+
+D4-9D-C0   (hex)		Samsung Electronics Co.,Ltd
+D49DC0     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+D0-19-6A   (hex)		Ciena Corporation
+D0196A     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+44-13-D0   (hex)		zte corporation
+4413D0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+24-62-AB   (hex)		Espressif Inc.
+2462AB     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+6C-AB-05   (hex)		Cisco Systems, Inc
+6CAB05     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-E4   (hex)		Hosiden Corporation
+000BE4     (base 16)		Hosiden Corporation
+				4-33
+				Yao-city  Osaka  581-0071
+				JP
+
+60-D2-48   (hex)		ARRIS Group, Inc.
+60D248     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+48-5D-EB   (hex)		Just Add Power
+485DEB     (base 16)		Just Add Power
+				12505 STARKEY RD STE A
+				LARGO  FL  33773
+				US
+
+50-13-95   (hex)		Sichuan AI-Link Technology Co., Ltd.
+501395     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+18-D9-EF   (hex)		Shuttle Inc.
+18D9EF     (base 16)		Shuttle Inc.
+				No. 30 Lane 76, Rei Kuang Rd
+				Taipei    114
+				TW
+
+88-DA-33   (hex)		Beijing Xiaoyuer Network Technology Co., Ltd
+88DA33     (base 16)		Beijing Xiaoyuer Network Technology Co., Ltd
+				Block K1, North American International Business Centre, 86 Beiyuan Road, Chaoyang District
+				Beijing  Beijing  100012
+				CN
+
+50-41-B9   (hex)		I-O DATA DEVICE,INC.
+5041B9     (base 16)		I-O DATA DEVICE,INC.
+				3-10,Sakurada-machi
+				Kanazawa  Ishikawa  920-8512
+				JP
+
+80-DA-BC   (hex)		Megafone Limited
+80DABC     (base 16)		Megafone Limited
+				Unit 702,7/F,Bankok Bank Building,NO.18 Bonham Strand West
+				Hong Kong    999077
+				HK
+
+C0-9F-E1   (hex)		zte corporation
+C09FE1     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+18-46-44   (hex)		Home Control Singapore Pte Ltd
+184644     (base 16)		Home Control Singapore Pte Ltd
+				151 Lorong Chuan
+				Singapore    556741
+				SG
+
+B0-70-0D   (hex)		Nokia
+B0700D     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+34-6B-5B   (hex)		New H3C Technologies Co., Ltd
+346B5B     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+84-E8-92   (hex)		Actiontec Electronics, Inc
+84E892     (base 16)		Actiontec Electronics, Inc
+				301 Olcott St
+				Santa Clara  CA  95054
+				US
+
+78-E2-BD   (hex)		Vodafone Automotive S.p.A.
+78E2BD     (base 16)		Vodafone Automotive S.p.A.
+				via Astico 41
+				Varese  Italy/VA  21100
+				IT
+
+F8-48-FD   (hex)		China Mobile Group Device Co.,Ltd.
+F848FD     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+20-DA-22   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20DA22     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-21-DA   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+C821DA     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+E0-B6-55   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+E0B655     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+00-21-75   (hex)		Pacific Satellite International Ltd.
+002175     (base 16)		Pacific Satellite International Ltd.
+				20/F Tai Tung Building,
+				Wanchai    100000
+				HK
+
+88-97-46   (hex)		Sichuan AI-Link Technology Co., Ltd.
+889746     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+1C-DE-57   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+1CDE57     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E0-DC-FF   (hex)		Xiaomi Communications Co Ltd
+E0DCFF     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-77-8D   (hex)		Cisco Systems, Inc
+00778D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-8C   (hex)		Siemens AG
+000E8C     (base 16)		Siemens AG
+				Siemensstraße 10
+				Regensburg    93055
+				DE
+
+00-87-64   (hex)		Cisco Systems, Inc
+008764     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+FC-33-42   (hex)		Juniper Networks
+FC3342     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C4-68-D0   (hex)		VTech Telecommunications Ltd.
+C468D0     (base 16)		VTech Telecommunications Ltd.
+				23/F, Tai Ping Industrial Centre, Block 1,
+				HONG KONG  NA  000000
+				HK
+
+14-AE-DB   (hex)		VTech Telecommunications Ltd.
+14AEDB     (base 16)		VTech Telecommunications Ltd.
+				23/F, Tai Ping Industrial Centre, Block 1,
+				HONG KONG  NA  000000
+				HK
+
+78-DB-2F   (hex)		Texas Instruments
+78DB2F     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+8C-0F-A0   (hex)		di-soric GmbH & Co. KG
+8C0FA0     (base 16)		di-soric GmbH & Co. KG
+				Steinbeisstrasse 6
+				Urbach    73660
+				DE
+
+DC-B8-08   (hex)		Extreme Networks, Inc.
+DCB808     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+B0-E7-1D   (hex)		Shanghai Maigantech Co.,Ltd
+B0E71D     (base 16)		Shanghai Maigantech Co.,Ltd
+				Room 2211,No.88 Caoxi North Rd,Xuhui District
+				Shanghai  Shanghai  200030
+				CN
+
+F8-BB-BF   (hex)		eero inc.
+F8BBBF     (base 16)		eero inc.
+				500 Howard St Suite 900
+				San Francisco  CA  94105
+				US
+
+84-6F-CE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+846FCE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+20-65-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20658E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-3D-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+183D5E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+DC-71-37   (hex)		zte corporation
+DC7137     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+84-7C-9B   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+847C9B     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+34-41-A8   (hex)		ER-Telecom
+3441A8     (base 16)		ER-Telecom
+				Ovchinnikovskaya embankment, 20, Building 1 
+				Moscow    115324
+				RU
+
+34-DB-9C   (hex)		Sagemcom Broadband SAS
+34DB9C     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+74-40-BE   (hex)		LG Innotek
+7440BE     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+04-D4-C4   (hex)		ASUSTek COMPUTER INC.
+04D4C4     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+F0-D4-E2   (hex)		Dell Inc.
+F0D4E2     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+A8-E2-C3   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+A8E2C3     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+90-20-C2   (hex)		Aruba, a Hewlett Packard Enterprise Company
+9020C2     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+0C-A0-6C   (hex)		Industrial Cyber Sensing Inc.
+0CA06C     (base 16)		Industrial Cyber Sensing Inc.
+				Unit 1A - 343 Montrose Street North
+				Cambridge  Ontario  N3H 2H6
+				CA
+
+FC-D2-B6   (hex)		IEEE Registration Authority
+FCD2B6     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-4A-14   (hex)		Apple, Inc.
+804A14     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-3C-69   (hex)		Apple, Inc.
+703C69     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-2D-A9   (hex)		TECNO MOBILE LIMITED
+AC2DA9     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+48-04-9F   (hex)		ELECOM CO., LTD
+48049F     (base 16)		ELECOM CO., LTD
+				9FLand Axis Tower.1-1 fushimi machi,4-chome chuoku
+				osaka    5418765
+				JP
+
+08-7F-98   (hex)		vivo Mobile Communication Co., Ltd.
+087F98     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+C8-52-61   (hex)		ARRIS Group, Inc.
+C85261     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+74-88-BB   (hex)		Cisco Systems, Inc
+7488BB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-CF-12   (hex)		Espressif Inc.
+A4CF12     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+4C-6A-F6   (hex)		HMD Global Oy
+4C6AF6     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+48-9D-D1   (hex)		Samsung Electronics Co.,Ltd
+489DD1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-6F-E0   (hex)		Samsung Electronics Co.,Ltd
+B06FE0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+44-B9-94   (hex)		Douglas Lighting Controls
+44B994     (base 16)		Douglas Lighting Controls
+				280 - 3605 Gilmore Way
+				Burnaby  BC  V5G4X5
+				CA
+
+40-A9-3F   (hex)		Pivotal Commware, Inc.
+40A93F     (base 16)		Pivotal Commware, Inc.
+				1555 132nd Ave. NE
+				Bellevue  WA  98005
+				US
+
+70-BF-92   (hex)		GN Audio A/S
+70BF92     (base 16)		GN Audio A/S
+				Lautrupbjerg 7
+				Ballerup    DK-2750
+				DK
+
+C0-8C-71   (hex)		Motorola Mobility LLC, a Lenovo Company
+C08C71     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+F4-6F-4E   (hex)		Echowell
+F46F4E     (base 16)		Echowell
+				7F-8, No. 8, Sec 1, JunShing Rd.
+				New Taipei City    24872
+				TW
+
+5C-88-16   (hex)		Rockwell Automation
+5C8816     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+00-2F-5C   (hex)		Cisco Systems, Inc
+002F5C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-64-5D   (hex)		Toshiba
+F4645D     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+38-F8-5E   (hex)		HUMAX Co., Ltd.
+38F85E     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+AC-BB-61   (hex)		YSTen Technology Co.,Ltd
+ACBB61     (base 16)		YSTen Technology Co.,Ltd
+				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
+				Beijing    100101
+				CN
+
+24-79-F8   (hex)		KUPSON spol. s r.o.
+2479F8     (base 16)		KUPSON spol. s r.o.
+				Hradecka 787/14
+				Opava  Czech Republic  74601
+				CZ
+
+7C-FD-82   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+7CFD82     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+				No.168, Middle Road Of East Gate
+				Xiaobian Community  Chang'an Town  523851
+				CN
+
+18-0D-2C   (hex)		Intelbras
+180D2C     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+04-2D-B4   (hex)		First Property (Beijing) Co., Ltd Modern MOMA Branch
+042DB4     (base 16)		First Property (Beijing) Co., Ltd Modern MOMA Branch
+				Room 301A，Building No.10, No.1 Xiangheyuan Road, Dongcheng District, Beijing City
+				Beijing  Beijing  100028
+				CN
+
+04-E0-B0   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+04E0B0     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+08-EC-F5   (hex)		Cisco Systems, Inc
+08ECF5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D0-76-50   (hex)		IEEE Registration Authority
+D07650     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+60-D0-A9   (hex)		Samsung Electronics Co.,Ltd
+60D0A9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-CE-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88CEFA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-27-06   (hex)		YOISYS
+002706     (base 16)		YOISYS
+				309-52 SUNGSU-2GA, 1DONG, SUNGDONG-GU
+				SEOUL    133-827
+				KR
+
+00-CB-51   (hex)		Sagemcom Broadband SAS
+00CB51     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C4-64-B7   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+C464B7     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+EC-41-18   (hex)		XIAOMI Electronics,CO.,LTD
+EC4118     (base 16)		XIAOMI Electronics,CO.,LTD
+				Xiaomi Building, No.68 Qinghe Middle Street
+				Haidian District  Beijing  100085
+				CN
+
+D8-86-0B   (hex)		IEEE Registration Authority
+D8860B     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+34-20-03   (hex)		Shenzhen Feitengyun Technology Co.,LTD
+342003     (base 16)		Shenzhen Feitengyun Technology Co.,LTD
+				7F 4building,Yalianhaoshida industrial Park
+				Shenzhen  Guangdong  518100
+				CN
+
+F0-7D-68   (hex)		D-Link Corporation
+F07D68     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd Rd., Neihu District, 
+				Taipei City    114
+				TW
+
+40-E3-D6   (hex)		Aruba, a Hewlett Packard Enterprise Company
+40E3D6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+B4-5D-50   (hex)		Aruba, a Hewlett Packard Enterprise Company
+B45D50     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+78-DA-A2   (hex)		Cynosure Technologies Co.,Ltd
+78DAA2     (base 16)		Cynosure Technologies Co.,Ltd
+				Room 2708/2710, Building No.9A, Shenzhen Bay Science and Technology Ecological Park，Nanshan 
+				Shenzhen city  Guangdong Province  518057
+				CN
+
+38-B1-9E   (hex)		IEEE Registration Authority
+38B19E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+38-E2-6E   (hex)		ShenZhen Sweet Rain Electronics Co.,Ltd.
+38E26E     (base 16)		ShenZhen Sweet Rain Electronics Co.,Ltd.
+				Xinghua Road
+				Shenzhen  Bao'an  518101
+				CN
+
+00-D0-50   (hex)		Iskratel d.o.o.
+00D050     (base 16)		Iskratel d.o.o.
+				Ljubljanska cesta 24a
+				Kranj    4000
+				SI
+
+70-C9-C6   (hex)		Cisco Systems, Inc
+70C9C6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-B9-2F   (hex)		Technicolor CH USA Inc.
+D4B92F     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+68-9A-87   (hex)		Amazon Technologies Inc.
+689A87     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+64-AE-88   (hex)		Polytec GmbH
+64AE88     (base 16)		Polytec GmbH
+				Polytec Platz 1-7
+				Waldbronn  BW  76337
+				DE
+
+AC-A3-1E   (hex)		Aruba, a Hewlett Packard Enterprise Company
+ACA31E     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+00-17-7B   (hex)		Azalea Networks inc
+00177B     (base 16)		Azalea Networks inc
+				673 S Milpitas Blvd
+				Milpitas  CA  95035
+				US
+
+98-DA-C4   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+98DAC4     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+50-2B-98   (hex)		Es-tech International
+502B98     (base 16)		Es-tech International
+				228-70, Saneop-ro 155beon-gil, Gwonseon-gu, Suwon-si, Gyeonggi-do, Korea
+				Suwon    16648
+				KR
+
+C8-28-32   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+C82832     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+94-6A-77   (hex)		Technicolor CH USA Inc.
+946A77     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+C4-34-6B   (hex)		Hewlett Packard
+C4346B     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+80-84-A9   (hex)		oshkosh Corporation
+8084A9     (base 16)		oshkosh Corporation
+				2307 Oregon Street
+				Oshkosh  WI  54902
+				US
+
+F4-6E-95   (hex)		Extreme Networks, Inc.
+F46E95     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose    95119
+				US
+
+4C-C7-D6   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+4CC7D6     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
+				Zhuhai  Guangdong  519180
+				CN
+
+C8-08-73   (hex)		Ruckus Wireless
+C80873     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+70-1B-FB   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+701BFB     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-1B-B5   (hex)		Cherry GmbH
+001BB5     (base 16)		Cherry GmbH
+				Cherrystraße 1
+				Auerbach i. d. Opf.  Bayern  D-91275
+				DE
+
+D0-51-57   (hex)		LEAX Arkivator Telecom
+D05157     (base 16)		LEAX Arkivator Telecom
+				NanShan District YueHaiMen Street
+				ShenZhen  GuangDong  518061
+				CN
+
+28-80-88   (hex)		NETGEAR
+288088     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+64-CE-6E   (hex)		Sierra Wireless
+64CE6E     (base 16)		Sierra Wireless
+				13811 Wireless Way
+				Richmond  BC  V6V 3A4
+				CA
+
+1C-34-77   (hex)		Innovation Wireless
+1C3477     (base 16)		Innovation Wireless
+				11869 Teale Street
+				Culver City  CA  90230
+				US
+
+BC-3E-07   (hex)		Hitron Technologies. Inc
+BC3E07     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+48-FD-A3   (hex)		Xiaomi Communications Co Ltd
+48FDA3     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-16-97   (hex)		NEC Corporation
+001697     (base 16)		NEC Corporation
+				7-1, Shiba 5-chome Minato-ku,
+				tokyo  Tokyo  108-8001
+				JP
+
+00-30-13   (hex)		NEC Corporation
+003013     (base 16)		NEC Corporation
+				1-10 Nisshincho, Fuchu
+				Tokyo 183-8501    0000
+				JP
+
+04-9D-FE   (hex)		Hivesystem
+049DFE     (base 16)		Hivesystem
+				816 Kranz-techno Bldg. 388 dunchondaero, jun
+				Gyeonggi-do    KSXX0024
+				KR
+
+DC-EB-69   (hex)		Technicolor CH USA Inc.
+DCEB69     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+00-4E-35   (hex)		Hewlett Packard Enterprise
+004E35     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+F8-13-08   (hex)		Nokia
+F81308     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+F8-A2-D6   (hex)		Liteon Technology Corporation
+F8A2D6     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+18-2A-44   (hex)		HIROSE ELECTRONIC SYSTEM
+182A44     (base 16)		HIROSE ELECTRONIC SYSTEM
+				1-9-6 Ebisuminami
+				Shibuya  Tokyo  150-0022
+				JP
+
+FC-94-CE   (hex)		zte corporation
+FC94CE     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+90-86-9B   (hex)		zte corporation
+90869B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E0-18-9F   (hex)		EM Microelectronic
+E0189F     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+74-36-6D   (hex)		Vodafone Italia S.p.A.
+74366D     (base 16)		Vodafone Italia S.p.A.
+				Via Lorenteggio nr. 240
+				Milan  Italy  20147
+				IT
+
+84-DB-2F   (hex)		Sierra Wireless
+84DB2F     (base 16)		Sierra Wireless
+				1381 Wireless Way
+				Richmond  BC  V6V 3A4
+				CA
+
+94-58-CB   (hex)		Nintendo Co.,Ltd
+9458CB     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+28-EC-9A   (hex)		Texas Instruments
+28EC9A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+FC-BE-7B   (hex)		vivo Mobile Communication Co., Ltd.
+FCBE7B     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+B4-0F-B3   (hex)		vivo Mobile Communication Co., Ltd.
+B40FB3     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+EC-5C-68   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+EC5C68     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+C4-E5-06   (hex)		Piper Networks, Inc.
+C4E506     (base 16)		Piper Networks, Inc.
+				3636 Nobel Drive
+				San Diego  CA  92122
+				US
+
+30-EB-5A   (hex)		LANDIS + GYR
+30EB5A     (base 16)		LANDIS + GYR
+				78th km Old National Road Athens-Corinth 
+				Corinth     20100
+				GR
+
+F8-0F-6F   (hex)		Cisco Systems, Inc
+F80F6F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-80-E3   (hex)		CORAL NETWORK CORPORATION
+0080E3     (base 16)		CORAL NETWORK CORPORATION
+				(NOW BAY NETWORKS)
+				SANTA CLARA  CA  95052-8185
+				US
+
+B4-C6-2E   (hex)		Molex CMS
+B4C62E     (base 16)		Molex CMS
+				2222 Wellington Court
+				Lisle  IL  60532
+				US
+
+B8-25-9A   (hex)		Thalmic Labs 
+B8259A     (base 16)		Thalmic Labs 
+				24 Charles Street West 
+				Kitchener   Ontario   N2G 1H2
+				CA
+
+28-25-36   (hex)		SHENZHEN HOLATEK CO.,LTD
+282536     (base 16)		SHENZHEN HOLATEK CO.,LTD
+				Rm.1001,Unit 4,Bld.B,Kexing Science Park,Keyuan Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+B8-A1-75   (hex)		Roku, Inc.
+B8A175     (base 16)		Roku, Inc.
+				12980 Saratoga Ave
+				Saratoga  CA  95070
+				US
+
+0C-D0-F8   (hex)		Cisco Systems, Inc
+0CD0F8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-5F-90   (hex)		LAM Technologies
+745F90     (base 16)		LAM Technologies
+				Viale Ludovico Ariosto, 492/D
+				Sesto Fiorentino  FIRENZE  50019
+				IT
+
+A4-26-55   (hex)		LTI Motion (Shanghai) Co., Ltd.
+A42655     (base 16)		LTI Motion (Shanghai) Co., Ltd.
+				NO.80, Lane 2927, LaiYang Road Pudong New District
+				Shanghai  Shanghai  200137
+				CN
+
+60-A7-30   (hex)		Shenzhen Yipinfang Internet Technology Co.,Ltd
+60A730     (base 16)		Shenzhen Yipinfang Internet Technology Co.,Ltd
+				Shenzhen Konka R & D Building, 28th floor 21
+				GuangDong  Nanshan District  518000
+				CN
+
+3C-9B-D6   (hex)		Vizio, Inc
+3C9BD6     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+F8-5B-9C   (hex)		SB SYSTEMS Co.,Ltd
+F85B9C     (base 16)		SB SYSTEMS Co.,Ltd
+				2F Ventureforum, 323, Pangyo-ro, Bundang-gu
+				Seongnam-si  Gyeonngi-do  453-400
+				KR
+
+6C-A9-28   (hex)		HMD Global Oy
+6CA928     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+00-D8-61   (hex)		Micro-Star INTL CO., LTD.
+00D861     (base 16)		Micro-Star INTL CO., LTD.
+				No.69, Lide St.,
+				New Taipei City  Taiwan  235
+				TW
+
+74-C1-7D   (hex)		Infinix mobility limited
+74C17D     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+88-71-B1   (hex)		ARRIS Group, Inc.
+8871B1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F0-AF-85   (hex)		ARRIS Group, Inc.
+F0AF85     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+FC-AE-34   (hex)		ARRIS Group, Inc.
+FCAE34     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+DC-DA-80   (hex)		New H3C Technologies Co., Ltd
+DCDA80     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+CC-72-86   (hex)		Xi'an Fengyu Information Technology Co., Ltd.
+CC7286     (base 16)		Xi'an Fengyu Information Technology Co., Ltd.
+				5F, Block A, STRC, No.10, Zhangba 5th Road, Yanta
+				Xi'an  Shaanxi  710077
+				CN
+
+64-EE-B7   (hex)		Netcore Technology Inc
+64EEB7     (base 16)		Netcore Technology Inc
+				Building 6, Baolong Plant, Able Technology Park, Longgang District, 
+				Shenzhen    518116
+				CN
+
+38-81-D7   (hex)		Texas Instruments
+3881D7     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+18-04-ED   (hex)		Texas Instruments
+1804ED     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D4-32-60   (hex)		GoPro
+D43260     (base 16)		GoPro
+				3000 Clearview Way
+				San Mateo  CA  94402
+				US
+
+50-DB-3F   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+50DB3F     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+10-81-B4   (hex)		Hunan Greatwall Galaxy Science and Technology Co.,Ltd.
+1081B4     (base 16)		Hunan Greatwall Galaxy Science and Technology Co.,Ltd.
+				No. 39, Jian Shan Road
+				Changsha  Hunan  410205
+				CN
+
+00-42-79   (hex)		Sunitec Enterprise Co.,Ltd
+004279     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+00-B8-B3   (hex)		Cisco Systems, Inc
+00B8B3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-DD-9E   (hex)		GoPro
+F4DD9E     (base 16)		GoPro
+				3000 Clearview Way
+				San Mateo  CA  94402
+				US
+
+D4-D9-19   (hex)		GoPro
+D4D919     (base 16)		GoPro
+				3000 Clearview Way
+				San Mateo  CA  94402
+				US
+
+14-11-14   (hex)		TECNO MOBILE LIMITED
+141114     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+A4-50-46   (hex)		Xiaomi Communications Co Ltd
+A45046     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-7C-2D   (hex)		Samsung Electronics Co.,Ltd
+007C2D     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+B4-77-48   (hex)		Shenzhen Neoway Technology Co.,Ltd.
+B47748     (base 16)		Shenzhen Neoway Technology Co.,Ltd.
+				4F-2#,Lian Jian Science & Industry Park,Huarong Road,Dalang Street,Longhua District
+				Shenzhen  Guangdong  518000
+				CN
+
+F8-50-1C   (hex)		Tianjin Geneuo Technology Co.,Ltd
+F8501C     (base 16)		Tianjin Geneuo Technology Co.,Ltd
+				Technology Avenue South JingHai Economic Development Area,Tianjin China
+				Tianjin    301609
+				CN
+
+44-07-0B   (hex)		Google, Inc.
+44070B     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+B8-31-B5   (hex)		Microsoft Corporation
+B831B5     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+EC-F6-BD   (hex)		SNCF MOBILITÉS
+ECF6BD     (base 16)		SNCF MOBILITÉS
+				9 rue Jean-Philippe Rameau 
+				SAINT-DENIS    93200
+				FR
+
+38-B4-D3   (hex)		BSH Hausgeraete GmbH
+38B4D3     (base 16)		BSH Hausgeraete GmbH
+				Im Gewerbepark B10
+				Regensburg    93059
+				DE
+
+C8-47-82   (hex)		Areson Technology Corp.
+C84782     (base 16)		Areson Technology Corp.
+				11F., No. 646, Sec. 5, Chongxin Rd., Sanchong District
+				New Taipei City    24158
+				TW
+
+E8-93-63   (hex)		Nokia
+E89363     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+7C-0C-F6   (hex)		Guangdong Huiwei High-tech Co., Ltd.
+7C0CF6     (base 16)		Guangdong Huiwei High-tech Co., Ltd.
+				E Block No. 1 in Ecological Area in Puzhai NewArea
+				Fengshun County, Meizhou  Guangdong province  514000
+				CN
+
+74-9D-79   (hex)		Sercomm Corporation.
+749D79     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+00-D6-FE   (hex)		Cisco Systems, Inc
+00D6FE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+0C-BF-74   (hex)		Morse Micro
+0CBF74     (base 16)		Morse Micro
+				113 / 2-4 Cornwallis Street
+				Eveleigh  NSW  2015
+				AU
+
+FC-8F-7D   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+FC8F7D     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+24-BE-18   (hex)		DADOUTEK COMPANY LIMITED
+24BE18     (base 16)		DADOUTEK COMPANY LIMITED
+				14/F, Wilson Logistics Centre,No.24-28 Kung Yip St
+				Kwai Chung  New Territories  000
+				CN
+
+B4-1D-2B   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+B41D2B     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+14-C2-13   (hex)		Apple, Inc.
+14C213     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-D3-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+70D313     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-1D-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C1D36     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-BB-FE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CCBBFE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-D9-31   (hex)		Apple, Inc.
+A4D931     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-FE-D9   (hex)		Apple, Inc.
+BCFED9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-82-23   (hex)		Apple, Inc.
+808223     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-0A-60   (hex)		IEEE Registration Authority
+300A60     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-D0-65   (hex)		CKS Corporation
+80D065     (base 16)		CKS Corporation
+				1-24-11 Akebono
+				Tachikawa  Tokyo  190-0012
+				JP
+
+28-31-66   (hex)		vivo Mobile Communication Co., Ltd.
+283166     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+C0-40-04   (hex)		Medicaroid Corporation
+C04004     (base 16)		Medicaroid Corporation
+				1-6-4, Minatojima-minamimachi, Chuo-ku
+				Kobe    650-0047
+				JP
+
+20-AD-56   (hex)		Continental Automotive Systems Inc.
+20AD56     (base 16)		Continental Automotive Systems Inc.
+				21440 W. Lake Cook Rd.
+				Deer Park  IL  60010
+				US
+
+50-29-F5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+5029F5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+CC-08-FB   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+CC08FB     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+BC-AF-91   (hex)		TE Connectivity Sensor Solutions
+BCAF91     (base 16)		TE Connectivity Sensor Solutions
+				4 rue Gaye-Marie, CS 83163
+				Toulouse    31027
+				FR
+
+F0-D7-DC   (hex)		Wesine (Wuhan) Technology Co., Ltd.
+F0D7DC     (base 16)		Wesine (Wuhan) Technology Co., Ltd.
+				10th Floor, Building 2, SBI Venture Street, Hongshan District
+				Wuhan  Hubei  430074
+				CN
+
+00-72-04   (hex)		Samsung Electronics Co., Ltd. ARTIK
+007204     (base 16)		Samsung Electronics Co., Ltd. ARTIK
+				1-1, Samsungjeonja-ro
+				Hwaseong-si  Gyeonggi-do  18448
+				KR
+
+40-C8-1F   (hex)		Shenzhen Xinguodu Technology Co., Ltd.
+40C81F     (base 16)		Shenzhen Xinguodu Technology Co., Ltd.
+				F17A, JinSong Building, Tairan Industrial & Trade Park, Chegongmiao, Shennan Road，Futian District
+				Shenzhen  Guangdong  518040
+				CN
+
+14-59-C0   (hex)		NETGEAR
+1459C0     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+8C-61-A3   (hex)		ARRIS Group, Inc.
+8C61A3     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A8-10-87   (hex)		Texas Instruments
+A81087     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A0-28-33   (hex)		IEEE Registration Authority
+A02833     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C8-C2-F5   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+C8C2F5     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
+				Zhuhai  Guangdong  519180
+				CN
+
+F0-58-49   (hex)		CareView Communications
+F05849     (base 16)		CareView Communications
+				405 State HWY 121 BYP
+				Lewisville   Texas  75067
+				US
+
+34-E5-EC   (hex)		Palo Alto Networks
+34E5EC     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+A4-ED-43   (hex)		IEEE Registration Authority
+A4ED43     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-29-8D   (hex)		Shanghai AdaptComm Technology Co., Ltd.
+94298D     (base 16)		Shanghai AdaptComm Technology Co., Ltd.
+				3rd Floor, Building 14, No. 518 Xinzhuan Road, Songjiang District,
+				Shanghai    201600
+				CN
+
+00-AA-6E   (hex)		Cisco Systems, Inc
+00AA6E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-43-D7   (hex)		Agilecom Photonics Solutions Guangdong Limited
+6843D7     (base 16)		Agilecom Photonics Solutions Guangdong Limited
+				No.1-6, Shenwan Industrial Park, Shenwan Town
+				Zhongshan  Guangdong  528462
+				CN
+
+20-D8-0B   (hex)		Juniper Networks
+20D80B     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+8C-8F-8B   (hex)		China Mobile Chongqing branch
+8C8F8B     (base 16)		China Mobile Chongqing branch
+				6 building, No. 2, Xingguang three road
+				Yubei District  Chongqing  401120
+				CN
+
+B8-6A-97   (hex)		Edgecore Networks Corporation
+B86A97     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+00-0A-5E   (hex)		3COM
+000A5E     (base 16)		3COM
+				5400 Bayfront Plaza
+				Santa Clara  CA  95052-8145
+				US
+
+00-10-5A   (hex)		3COM
+00105A     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-60-97   (hex)		3COM
+006097     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-60-08   (hex)		3COM
+006008     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-1B-6E   (hex)		Keysight Technologies, Inc.
+001B6E     (base 16)		Keysight Technologies, Inc.
+				1400 Fountaingrove Pkwy.
+				Santa Rosa  CA  95403
+				US
+
+00-04-0B   (hex)		3COM EUROPE LTD
+00040B     (base 16)		3COM EUROPE LTD
+				BOUNDARY WAY
+				vvvvv  UNITED  KINGDOM
+				GB
+
+00-01-02   (hex)		3COM
+000102     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+8C-FE-74   (hex)		Ruckus Wireless
+8CFE74     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+A8-01-6D   (hex)		Aiwa Corporation
+A8016D     (base 16)		Aiwa Corporation
+				965 W Chicago Ave
+				Chicago  IL  60642
+				US
+
+04-40-A9   (hex)		New H3C Technologies Co., Ltd
+0440A9     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+4C-01-43   (hex)		eero inc.
+4C0143     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+E4-34-93   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E43493     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-29-12   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+342912     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-4B-AA   (hex)		Magic Leap, Inc.
+604BAA     (base 16)		Magic Leap, Inc.
+				1855 Griffin Rd, Room B454
+				Dania Beach  FL  33004
+				US
+
+BC-A5-8B   (hex)		Samsung Electronics Co.,Ltd
+BCA58B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-CE-B9   (hex)		Samsung Electronics Co.,Ltd
+80CEB9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-D3-FC   (hex)		Mios, Ltd.
+D0D3FC     (base 16)		Mios, Ltd.
+				645 W. 9th St.
+				Los Angeles  CA  90015
+				US
+
+6C-6C-D3   (hex)		Cisco Systems, Inc
+6C6CD3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-49-ED   (hex)		Audeze LLC
+E049ED     (base 16)		Audeze LLC
+				3410 S Susan st
+				Santa Ana  CA  92704
+				US
+
+80-30-E0   (hex)		Hewlett Packard Enterprise
+8030E0     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+E8-5D-86   (hex)		CHANG YOW TECHNOLOGIES INTERNATIONAL CO.,LTD.
+E85D86     (base 16)		CHANG YOW TECHNOLOGIES INTERNATIONAL CO.,LTD.
+				 No 88 Shuren 6th St Wufong District
+				Taichung    413
+				TW
+
+14-37-19   (hex)		PT Prakarsa Visi Valutama
+143719     (base 16)		PT Prakarsa Visi Valutama
+				Jl. Cideng Timur No.11D
+				Jakarta Pusat  Indonesia  10130
+				ID
+
+58-2F-40   (hex)		Nintendo Co.,Ltd
+582F40     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+08-90-BA   (hex)		Danlaw Inc
+0890BA     (base 16)		Danlaw Inc
+				23700 research Dr.
+				Farmington Hills    48335
+				US
+
+94-A3-CA   (hex)		KonnectONE, LLC
+94A3CA     (base 16)		KonnectONE, LLC
+				30 N Gould Street STE 4004
+				Sheridan  WY  82801
+				US
+
+24-4C-E3   (hex)		Amazon Technologies Inc.
+244CE3     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno    89507
+				US
+
+B8-BE-F4   (hex)		devolo AG
+B8BEF4     (base 16)		devolo AG
+				Charlottenburger Allee 67
+				Aachen  NRW  52068
+				DE
+
+00-01-57   (hex)		SYSWAVE CO., LTD
+000157     (base 16)		SYSWAVE CO., LTD
+				Dongho B/D 5F, 221-2
+				  KOREA  135-010
+				KR
+
+58-FD-BE   (hex)		Shenzhen Taikaida Technology Co., Ltd
+58FDBE     (base 16)		Shenzhen Taikaida Technology Co., Ltd
+				Shenzhen Baoan District Fuyong town Fengtang road Xintian building 613
+				shenzhen    518102
+				CN
+
+F4-F1-97   (hex)		EMTAKE Inc
+F4F197     (base 16)		EMTAKE Inc
+				14, Pangyoyeok ro 192, Bundang gu
+				Seongnam city  Kyeonggi do  13524
+				KR
+
+6C-ED-51   (hex)		NEXCONTROL Co.,Ltd
+6CED51     (base 16)		NEXCONTROL Co.,Ltd
+				(#303-1007, Ssangyong 3th) 397, Seokcheon-ro
+				Bucheon-si  Gyeonggi-do  14449
+				KR
+
+04-C3-E6   (hex)		IEEE Registration Authority
+04C3E6     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+28-63-36   (hex)		Siemens AG
+286336     (base 16)		Siemens AG
+				Werner-von-Siemens Strasse 50
+				Amberg    92224
+				DE
+
+14-D1-69   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14D169     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-62-E5   (hex)		Hewlett Packard
+1062E5     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+00-20-B5   (hex)		YASKAWA ELECTRIC CORPORATION
+0020B5     (base 16)		YASKAWA ELECTRIC CORPORATION
+				2-1 Kurosakishiroishi, Yahatanishi-ku,
+				Kitakyushu    806-0004
+				JP
+
+E0-62-67   (hex)		Xiaomi Communications Co Ltd
+E06267     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+70-B7-AA   (hex)		vivo Mobile Communication Co., Ltd.
+70B7AA     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+84-B3-1B   (hex)		Kinexon GmbH
+84B31B     (base 16)		Kinexon GmbH
+				Schellingstrasse, 35
+				München    80799
+				DE
+
+08-25-25   (hex)		Xiaomi Communications Co Ltd
+082525     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+C4-95-00   (hex)		Amazon Technologies Inc.
+C49500     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+F4-60-E2   (hex)		Xiaomi Communications Co Ltd
+F460E2     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+E4-D1-24   (hex)		 Mojo Networks, Inc.
+E4D124     (base 16)		 Mojo Networks, Inc.
+				339 N.Bernardo Ave
+				Mountain View  CA  94043
+				US
+
+00-13-A3   (hex)		Siemens Home & Office Comm. Devices
+0013A3     (base 16)		Siemens Home & Office Comm. Devices
+				4849 Alpha Road
+				Dallas    75244
+				US
+
+B0-B8-67   (hex)		Hewlett Packard Enterprise
+B0B867     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+C0-03-80   (hex)		Juniper Networks
+C00380     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+98-BB-99   (hex)		Phicomm (Sichuan) Co.,Ltd.
+98BB99     (base 16)		Phicomm (Sichuan) Co.,Ltd.
+				125 longquan street park road,longquan district,chengdu city
+				Sichuan  Chengdu  610015
+				CN
+
+00-26-22   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+002622     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
+				KUNSHAN  SUZHOU  215300
+				CN
+
+F8-27-2E   (hex)		Mercku
+F8272E     (base 16)		Mercku
+				509 Beaver Creek Rd.
+				Waterloo  Ontario  N2V 2L3
+				CA
+
+9C-C9-50   (hex)		Baumer Holding
+9CC950     (base 16)		Baumer Holding
+				Hummelstrasse 17
+				Frauenfeld  Thurgau  8501
+				CH
+
+F8-99-10   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+F89910     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+50-E0-EF   (hex)		Nokia
+50E0EF     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+84-8A-8D   (hex)		Cisco Systems, Inc
+848A8D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+1C-C3-EB   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+1CC3EB     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+50-4C-7E   (hex)		THE 41ST INSTITUTE OF CETC
+504C7E     (base 16)		THE 41ST INSTITUTE OF CETC
+				No.98 Xiangjiang Road,Huangdao District,Qingdao,Shandong
+				Qingdao  Shangdong  266555
+				CN
+
+00-14-13   (hex)		Trebing & Himstedt Prozeßautomation GmbH & Co. KG
+001413     (base 16)		Trebing & Himstedt Prozeßautomation GmbH & Co. KG
+				Wilhelm Hennemann Straße 13
+				Schwerin  Mecklenburg-Vorpommern  19061
+				DE
+
+00-07-99   (hex)		Tipping Point Technologies, Inc.
+000799     (base 16)		Tipping Point Technologies, Inc.
+				7501 B N. Capital of TX Hwy.
+				Austin  TX  78731
+				US
+
+D0-1C-BB   (hex)		Beijing Ctimes Digital Technology Co., Ltd.
+D01CBB     (base 16)		Beijing Ctimes Digital Technology Co., Ltd.
+				7th Floor, Jinzhou Building, Suzhou Street, No.79, Haidian District, 
+				Beijing    100089
+				CN
+
+74-87-BB   (hex)		Ciena Corporation
+7487BB     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+68-DD-26   (hex)		Shanghai Focus Vision Security Technology Co.,Ltd
+68DD26     (base 16)		Shanghai Focus Vision Security Technology Co.,Ltd
+				No.4888 Hunan Rd, Pudong New District
+				Shanghai  Shanghai  201317
+				CN
+
+28-66-E3   (hex)		AzureWave Technology Inc.
+2866E3     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+60-F1-8A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60F18A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-38-73   (hex)		Juniper Networks
+EC3873     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+78-04-73   (hex)		Texas Instruments
+780473     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A8-3E-0E   (hex)		HMD Global Oy
+A83E0E     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+10-C1-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+10C172     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-15-1E   (hex)		ETHERNET Powerlink Standarization Group (EPSG)
+00151E     (base 16)		ETHERNET Powerlink Standarization Group (EPSG)
+				c/o Zurich University of Applied Sciences
+				Winterthur    CH-8401
+				CH
+
+00-11-1E   (hex)		ETHERNET Powerlink Standarization Group (EPSG)
+00111E     (base 16)		ETHERNET Powerlink Standarization Group (EPSG)
+				c/o University of Applied Sciences
+				Winterthur  ZH  CH-8401
+				CH
+
+00-40-9D   (hex)		DigiBoard
+00409D     (base 16)		DigiBoard
+				6400 FLYING CLOUD DRIVE
+				EDEN PRAIRIE  MN  55344
+				US
+
+CC-50-E3   (hex)		Espressif Inc.
+CC50E3     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+A4-DA-32   (hex)		Texas Instruments
+A4DA32     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+00-0E-EE   (hex)		Muco Industrie BV
+000EEE     (base 16)		Muco Industrie BV
+				Pleimuiden 12e
+				Amsterdam  NH  1046 AG
+				NL
+
+7C-1C-4E   (hex)		LG Innotek
+7C1C4E     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+D8-B6-B7   (hex)		Comtrend Corporation
+D8B6B7     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+00-21-06   (hex)		RIM Testing Services
+002106     (base 16)		RIM Testing Services
+				440 Phillip Street
+				Waterloo  ON  N2L 5R9
+				CA
+
+8C-14-B4   (hex)		zte corporation
+8C14B4     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+3C-98-72   (hex)		Sercomm Corporation.
+3C9872     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+40-C3-C6   (hex)		SnapRoute
+40C3C6     (base 16)		SnapRoute
+				3960 Freedom Circle, Suite 100
+				Santa Clara  CA  95054
+				US
+
+5C-96-56   (hex)		AzureWave Technology Inc.
+5C9656     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+E0-60-66   (hex)		Sercomm Corporation.
+E06066     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+14-93-46   (hex)		PNI sensor corporation
+149346     (base 16)		PNI sensor corporation
+				2331 Circadian Way
+				Santa Rosa  CA  95407
+				US
+
+DC-E0-EB   (hex)		Nanjing Aozheng Information Technology Co.Ltd
+DCE0EB     (base 16)		Nanjing Aozheng Information Technology Co.Ltd
+				#E1-453, Zidong Road #1,Qixia District
+				Nanjing  jiangsu  210000
+				CN
+
+EC-8C-9A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC8C9A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-86-55   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B48655     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-47-59   (hex)		Beijing MEGA preponderance Science & Technology Co. Ltd
+2C4759     (base 16)		Beijing MEGA preponderance Science & Technology Co. Ltd
+				Room 2201,No.8,Ruichuang International B Block,Wangjing East Road
+				Beijing    100102
+				CN
+
+A4-15-66   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+A41566     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Wei fang Export processing Zone
+				Wei Fang  Shan Dong  261205
+				CN
+
+1C-96-5A   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+1C965A     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Wei Fang  Shan Dong  261205
+				CN
+
+40-1B-5F   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+401B5F     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+A8-E5-52   (hex)		JUWEL Aquarium AG & Co. KG
+A8E552     (base 16)		JUWEL Aquarium AG & Co. KG
+				Karl-Göx-Straße 1
+				Rotenburg / Wümme    27356
+				DE
+
+5C-CD-7C   (hex)		MEIZU Technology Co.,Ltd.
+5CCD7C     (base 16)		MEIZU Technology Co.,Ltd.
+				MEIZU Tech Bldg., Technology& Innovation Coast
+				Zhuhai  Guangdong  519085
+				CN
+
+00-13-8A   (hex)		Qingdao GoerTek Technology Co., Ltd.
+00138A     (base 16)		Qingdao GoerTek Technology Co., Ltd.
+				Room 605,Innovation Building,Hi-tech Industrial Park,
+				QINGDAO  SHANDONG  266061
+				CN
+
+A8-30-AD   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+A830AD     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Wei fang Export processing Zone
+				Wei Fang  Shan Dong  261205
+				CN
+
+BC-5F-F6   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+BC5FF6     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+C8-E7-D8   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+C8E7D8     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				Mid-Fourth Flr., Building 28, Cui Xi Fourth Road，Ke Yuan West,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+60-D2-1C   (hex)		Sunnovo International Limited
+60D21C     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+CC-51-B4   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+CC51B4     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-C3-F4   (hex)		Samsung Electronics Co.,Ltd
+00C3F4     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+B8-8A-EC   (hex)		Nintendo Co.,Ltd
+B88AEC     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+D0-D7-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D0D783     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-3B-77   (hex)		Sagemcom Broadband SAS
+AC3B77     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+B0-FC-0D   (hex)		Amazon Technologies Inc.
+B0FC0D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+CC-C9-2C   (hex)		Schindler - PORT Technology
+CCC92C     (base 16)		Schindler - PORT Technology
+				via della Pace 22
+				Locarno  Ticino  6600
+				CH
+
+00-1E-39   (hex)		Comsys Communication Ltd.
+001E39     (base 16)		Comsys Communication Ltd.
+				9 Hamenofim st.
+				Herzelia    46725
+				IL
+
+78-72-5D   (hex)		Cisco Systems, Inc
+78725D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+FC-E6-6A   (hex)		Industrial Software Co
+FCE66A     (base 16)		Industrial Software Co
+				85, Aleksandyr Malinov Blvd. Office 6
+				Sofia    1715
+				BG
+
+78-36-CC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+7836CC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+8C-CF-5C   (hex)		BEFEGA GmbH
+8CCF5C     (base 16)		BEFEGA GmbH
+				Reichenbacher Str. 22
+				Schwabach  Bavaria  91126
+				DE
+
+70-C8-33   (hex)		Wirepas Oy
+70C833     (base 16)		Wirepas Oy
+				Visiokatu 4
+				Tampere    33720
+				FI
+
+0C-73-EB   (hex)		IEEE Registration Authority
+0C73EB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+04-8A-E1   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+048AE1     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
+				Zhuhai  Guangdong  519180
+				CN
+
+F0-B5-D1   (hex)		Texas Instruments
+F0B5D1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+00-E0-00   (hex)		FUJITSU LIMITED
+00E000     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+90-84-8B   (hex)		HDR10+ Technologies, LLC
+90848B     (base 16)		HDR10+ Technologies, LLC
+				3855 SW 153rd Drive
+				Beaverton  OR  97006
+				US
+
+C8-D7-79   (hex)		QING DAO HAIER TELECOM CO.,LTD.
+C8D779     (base 16)		QING DAO HAIER TELECOM CO.,LTD.
+				No 1  Haier road,Hi-tech Zone，Qingdao，PR.China
+				Qingdao  Shandong  266101
+				CN
+
+10-B3-6F   (hex)		Bowei Technology Company Limited 
+10B36F     (base 16)		Bowei Technology Company Limited 
+				2F,Building No.6C,1658,Gumei Rd
+				Shanghai  Shanghai  200233
+				CN
+
+FC-9B-C6   (hex)		Sumavision Technologies Co.,Ltd
+FC9BC6     (base 16)		Sumavision Technologies Co.,Ltd
+				6F, Block A2, Power Creative Building,No.1 Shangdi East Road, Haidian District
+				Beijing    100085
+				CN
+
+C8-29-2A   (hex)		Barun Electronics
+C8292A     (base 16)		Barun Electronics
+				869, Jangji-ri, Dongtan-myeon
+				Hwaseong-si  Gyeonggi-do  445812
+				KR
+
+E4-82-CC   (hex)		Jumptronic GmbH
+E482CC     (base 16)		Jumptronic GmbH
+				An der Weide 5
+				Springe    31832
+				DE
+
+48-60-5F   (hex)		LG Electronics (Mobile Communications)
+48605F     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+B0-41-6F   (hex)		Shenzhen Maxtang Computer Co.,Ltd
+B0416F     (base 16)		Shenzhen Maxtang Computer Co.,Ltd
+				6/F, Bldg.3, Honghui Industrial Park, Liuxian 2nd Rd., Bao'an Dist.
+				Shenzhen  Guangdong  518101
+				CN
+
+50-1D-93   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+501D93     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-16-A8   (hex)		Microsoft Corporation
+2816A8     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+F8-F5-32   (hex)		ARRIS Group, Inc.
+F8F532     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+B0-83-D6   (hex)		ARRIS Group, Inc.
+B083D6     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+80-C7-C5   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+80C7C5     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E4-43-4B   (hex)		Dell Inc.
+E4434B     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+0C-F5-A4   (hex)		Cisco Systems, Inc
+0CF5A4     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+9C-2E-A1   (hex)		Xiaomi Communications Co Ltd
+9C2EA1     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+08-97-34   (hex)		Hewlett Packard Enterprise
+089734     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+F0-9C-D7   (hex)		Guangzhou Blue Cheetah Intelligent Technology Co., Ltd.
+F09CD7     (base 16)		Guangzhou Blue Cheetah Intelligent Technology Co., Ltd.
+				Panyu District, Guangzhou City Panyu Avenue North 555 Panyu Energy Technology Park,Industry Building 2 seats 406-407
+				Guangzhou  Guangdong   511400
+				CN
+
+BC-E1-43   (hex)		Apple, Inc.
+BCE143     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-70-33   (hex)		Apple, Inc.
+647033     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-68-78   (hex)		Apple, Inc.
+846878     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-D0-83   (hex)		Apple, Inc.
+C8D083     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-6A-BC   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+0C6ABC     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+00-80-BA   (hex)		SPECIALIX (ASIA) PTE, LTD
+0080BA     (base 16)		SPECIALIX (ASIA) PTE, LTD
+				3 WINTERSELLS ROAD
+				  UNITED  KINGDOM
+				US
+
+48-0B-B2   (hex)		IEEE Registration Authority
+480BB2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+CC-C0-79   (hex)		Murata Manufacturing Co., Ltd.
+CCC079     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+E0-19-D8   (hex)		BH TECHNOLOGIES
+E019D8     (base 16)		BH TECHNOLOGIES
+				12 RUE AMPERE
+				GRENOBLE    38000
+				FR
+
+60-30-D4   (hex)		Apple, Inc.
+6030D4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-95-EA   (hex)		Apple, Inc.
+F895EA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-F1-D8   (hex)		Apple, Inc.
+18F1D8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-CD-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3CCD5D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-76-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C7668     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-38-38   (hex)		Marking System Technology Co., Ltd.
+6C3838     (base 16)		Marking System Technology Co., Ltd.
+				76-1, Hirakawa Yokomichi
+				Joyo-shi  Kyoto  610-0101
+				JP
+
+30-D9-D9   (hex)		Apple, Inc.
+30D9D9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-0F-77   (hex)		HangZhou Gubei Electronics Technology Co.,Ltd
+780F77     (base 16)		HangZhou Gubei Electronics Technology Co.,Ltd
+				HangZhou City, Zhejiang province Binjiang District Jiang Hong Road 611 Building 1 room 106
+				Hangzhou  ZheJiang  310052
+				CN
+
+A4-38-CC   (hex)		Nintendo Co.,Ltd
+A438CC     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+74-72-1E   (hex)		Edison Labs Inc.
+74721E     (base 16)		Edison Labs Inc.
+				1122 Stanyan St
+				San Francisco  CA  94117
+				US
+
+8C-4C-DC   (hex)		PLANEX COMMUNICATIONS INC.
+8C4CDC     (base 16)		PLANEX COMMUNICATIONS INC.
+				Planex Volta Bldg., 2-11-9 Ebisu-Nishi,Shibuya-ku,Tokyo 150-0021,Japan
+				Tokyo  Tokyo  150-0021
+				JP
+
+50-65-F3   (hex)		Hewlett Packard
+5065F3     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+3C-95-09   (hex)		Liteon Technology Corporation
+3C9509     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+BC-AB-7C   (hex)		TRnP KOREA Co Ltd
+BCAB7C     (base 16)		TRnP KOREA Co Ltd
+				room1308,239 SoHyungRo,WonMiGu,
+				BuChunCity  KyungKiDo  1135
+				KR
+
+64-CB-5D   (hex)		SIA TeleSet
+64CB5D     (base 16)		SIA TeleSet
+				Krāslavas iela 5
+				Vecstropi, Naujenes par., Daugavpils distr.    LV-5413
+				LV
+
+58-21-E9   (hex)		TWPI
+5821E9     (base 16)		TWPI
+				PMB# 335; 1121 Annapolis Road
+				Odenton  MD  21113
+				US
+
+C4-9F-4C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C49F4C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-70-4A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C704A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-E3-DC   (hex)		Tecon MT, LLC
+F0E3DC     (base 16)		Tecon MT, LLC
+				3rd Khoroshevskaya st - 20
+				Moscow    123298
+				RU
+
+A8-DA-01   (hex)		Shenzhen NUOLIJIA Digital Technology Co.,Ltd
+A8DA01     (base 16)		Shenzhen NUOLIJIA Digital Technology Co.,Ltd
+				A Area of The Second Flood and D Area of The First Floor,Factory Building A,Youxinda Industrial Park,Gengyu Road,Tianliao Community,Gongming Street Office,Guangming New District,Shenzhen City,Guangdong,P.R.China
+				Shenzhen  Guangdong  518000
+				CN
+
+7C-25-86   (hex)		Juniper Networks
+7C2586     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+F0-41-C8   (hex)		IEEE Registration Authority
+F041C8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+CC-99-16   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+CC9916     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+EC-7F-C6   (hex)		ECCEL CORPORATION SAS
+EC7FC6     (base 16)		ECCEL CORPORATION SAS
+				CRA 106 15A 25 LT 88 MZ 17 BG 1, ZONA FRANCA BOGOTA
+				BOGOTA  D.C.  110921
+				CO
+
+4C-AB-FC   (hex)		zte corporation
+4CABFC     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-10-D8   (hex)		CALISTA
+0010D8     (base 16)		CALISTA
+				56A Packhorse Road
+				Bucks SL9 8EF  ENGLAND  
+				GB
+
+00-21-94   (hex)		Ping Communication
+002194     (base 16)		Ping Communication
+				Brenden 18
+				Appenzell Meistersrüte  AI  9050
+				CH
+
+5C-5A-EA   (hex)		FORD
+5C5AEA     (base 16)		FORD
+				17425 Federal Drive 
+				Allen Park  MI  48101
+				US
+
+00-0B-7B   (hex)		Test-Um Inc.
+000B7B     (base 16)		Test-Um Inc.
+				808 Calle Plano
+				Camarillo  CA  93012
+				US
+
+30-FD-38   (hex)		Google, Inc.
+30FD38     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+00-13-86   (hex)		ABB Inc/Totalflow
+001386     (base 16)		ABB Inc/Totalflow
+				123
+				Bartlesville  OK  74006
+				US
+
+00-3C-10   (hex)		Cisco Systems, Inc
+003C10     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+54-A6-5C   (hex)		Technicolor CH USA Inc.
+54A65C     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+BC-DD-C2   (hex)		Espressif Inc.
+BCDDC2     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+98-D8-63   (hex)		Shanghai High-Flying Electronics Technology Co., Ltd
+98D863     (base 16)		Shanghai High-Flying Electronics Technology Co., Ltd
+				Room 1002 ,#1Building,No.3000 Longdong Avenue,Pudong District,Shanghai,China
+				shanghai  shanghai  201203
+				CN
+
+0C-F3-46   (hex)		Xiaomi Communications Co Ltd
+0CF346     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+7C-FF-4D   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+7CFF4D     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+C8-8F-26   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+C88F26     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+70-3A-73   (hex)		Shenzhen Sundray Technologies Company Limited
+703A73     (base 16)		Shenzhen Sundray Technologies Company Limited
+				6th Floor,Block A1, Nanshan iPark, No.1001 XueYuan Road, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+10-F9-EB   (hex)		Industria Fueguina de Relojería Electrónica s.a.
+10F9EB     (base 16)		Industria Fueguina de Relojería Electrónica s.a.
+				Sarmiento 2920
+				Rio Grande  Tierra de Fuego  V9420GIV
+				AR
+
+80-AD-16   (hex)		Xiaomi Communications Co Ltd
+80AD16     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+04-4E-AF   (hex)		LG Innotek
+044EAF     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+18-94-C6   (hex)		ShenZhen Chenyee Technology Co., Ltd.
+1894C6     (base 16)		ShenZhen Chenyee Technology Co., Ltd.
+				32F, Tower A, East Pacific International Center, No.7888, Shennan Avenue, Futian District
+				Shenzhen    518040
+				CN
+
+40-BD-32   (hex)		Texas Instruments
+40BD32     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+CC-8E-71   (hex)		Cisco Systems, Inc
+CC8E71     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+38-F5-54   (hex)		HISENSE ELECTRIC CO.,LTD
+38F554     (base 16)		HISENSE ELECTRIC CO.,LTD
+				No. 218, Qianwangang Rd
+				Qingdao  Shandong  266555
+				CN
+
+88-E9-0F   (hex)		innomdlelab
+88E90F     (base 16)		innomdlelab
+				Unnam 1 gil, 3 
+				Seocho-gu  Seoul  06778
+				KR
+
+00-30-74   (hex)		EQUIINET LTD.
+003074     (base 16)		EQUIINET LTD.
+				EDISON HOUSE
+				 SWINDON, SN3 5JA    
+				GB
+
+EC-9B-8B   (hex)		Hewlett Packard Enterprise
+EC9B8B     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+B0-B3-AD   (hex)		HUMAX Co., Ltd.
+B0B3AD     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+18-A2-8A   (hex)		Essel-T Co., Ltd
+18A28A     (base 16)		Essel-T Co., Ltd
+				1211 kranztechno, 388 Dunchon-daero
+				Seongnam-si  Jungwon-gu, Gyeonggi-do  13403
+				KR
+
+20-36-5B   (hex)		Megafone Limited
+20365B     (base 16)		Megafone Limited
+				Unit 702,7/F,Bankok Bank Building,NO.18 Bonham Strand West
+				Hong Kong    999077
+				HK
+
+E8-DE-00   (hex)		ChongQing GuanFang Technology Co.,LTD
+E8DE00     (base 16)		ChongQing GuanFang Technology Co.,LTD
+				2F, A District,No.3 Middle Section of Mount Huangshan Avenue
+				ChongQing  ChongQing  401121
+				CN
+
+70-C9-4E   (hex)		Liteon Technology Corporation
+70C94E     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+70-D0-81   (hex)		Beijing Netpower Technologies Inc.
+70D081     (base 16)		Beijing Netpower Technologies Inc.
+				Room 201, Block B, NO. 15 Building, EastZone
+				Courtyard10, Xibeiwang East Road  Haidian District, Beijing  100094
+				CN
+
+FC-64-3A   (hex)		Samsung Electronics Co.,Ltd
+FC643A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-51-5B   (hex)		Samsung Electronics Co.,Ltd
+A8515B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-B7-E5   (hex)		Rayson Technology Co., Ltd.
+54B7E5     (base 16)		Rayson Technology Co., Ltd.
+				1F No.9 R&D Rd.II, Science-Based Industrial Park
+				Hsin-Chu    300
+				TW
+
+94-63-72   (hex)		vivo Mobile Communication Co., Ltd.
+946372     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+BC-0F-A7   (hex)		Ouster
+BC0FA7     (base 16)		Ouster
+				350 Treat Ave
+				San Francisco  CA  94110
+				US
+
+F8-C1-20   (hex)		Xi'an Link-Science Technology Co.,Ltd
+F8C120     (base 16)		Xi'an Link-Science Technology Co.,Ltd
+				1/F，Block F,Building zhichao Weilai,No.999,10#Caotan Road,Xi'an
+				xi'an    710016
+				CN
+
+F0-C9-D1   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+F0C9D1     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+34-7E-5C   (hex)		Sonos, Inc.
+347E5C     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+B4-FB-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B4FBF9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-6F-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+506F77     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-41-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C41E9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-E8-24   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3CE824     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-5A-06   (hex)		SHARP Corporation
+345A06     (base 16)		SHARP Corporation
+				1 Takumi-cho, Sakai-ku
+				Sakai City  Osaka  590-8522
+				JP
+
+00-19-36   (hex)		STERLITE OPTICAL TECHNOLOGIES LIMITED
+001936     (base 16)		STERLITE OPTICAL TECHNOLOGIES LIMITED
+				E-1,E-2,&E-3
+				AURANGABAD  MAHARASTRA  431136
+				IN
+
+B8-9F-09   (hex)		Wistron Neweb Corporation
+B89F09     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+04-02-CA   (hex)		Shenzhen Vtsonic Co.,ltd
+0402CA     (base 16)		Shenzhen Vtsonic Co.,ltd
+				No.35,the 2nd Industrial Zone,Tangxiayong Village,Songgang Town,Bao'an District,Shenzhen,China.
+				Shenzhen  Guangdong  518102
+				CN
+
+3C-FB-5C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+3CFB5C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+74-40-BB   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+7440BB     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+1C-11-61   (hex)		Ciena Corporation
+1C1161     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+B4-DE-31   (hex)		Cisco Systems, Inc
+B4DE31     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-40-27   (hex)		zte corporation
+A44027     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+B4-F7-A1   (hex)		LG Electronics (Mobile Communications)
+B4F7A1     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+28-ED-E0   (hex)		AMPAK Technology, Inc.
+28EDE0     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+88-BD-45   (hex)		Samsung Electronics Co.,Ltd
+88BD45     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-FC-F0   (hex)		Samsung Electronics Co.,Ltd
+54FCF0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-6A-85   (hex)		Samsung Electronics Co.,Ltd
+306A85     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+4C-DD-31   (hex)		Samsung Electronics Co.,Ltd
+4CDD31     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-B6-EE   (hex)		Dish Technologies Corp
+88B6EE     (base 16)		Dish Technologies Corp
+				94 Inverness Terrace E
+				Englewood  CO  80112
+				US
+
+70-F2-20   (hex)		Actiontec Electronics, Inc
+70F220     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+D0-81-7A   (hex)		Apple, Inc.
+D0817A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-CA-33   (hex)		Apple, Inc.
+98CA33     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-AB-1E   (hex)		Apple, Inc.
+68AB1E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-EF-00   (hex)		Apple, Inc.
+70EF00     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-77-65   (hex)		Tiesse SpA
+C87765     (base 16)		Tiesse SpA
+				Via Asti
+				Ivrea  TO  10015
+				IT
+
+2C-37-C5   (hex)		Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd
+2C37C5     (base 16)		Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd
+				ingdao high-tech park haier road 1
+				Qingdao  Shandong  266101
+				CN
+
+CC-40-D0   (hex)		NETGEAR
+CC40D0     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+7C-76-30   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+7C7630     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+98-22-EF   (hex)		Liteon Technology Corporation
+9822EF     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+78-80-38   (hex)		FUNAI ELECTRIC CO., LTD.
+788038     (base 16)		FUNAI ELECTRIC CO., LTD.
+				7-1, NAKAGAITO 7-CHOME
+				DAITO  OSAKA  5740013
+				JP
+
+BC-FF-EB   (hex)		Motorola Mobility LLC, a Lenovo Company
+BCFFEB     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+00-01-30   (hex)		Extreme Networks, Inc.
+000130     (base 16)		Extreme Networks, Inc.
+				3585 Monroe Street
+				Santa Clara  CA  95051
+				US
+
+FC-0A-81   (hex)		Extreme Networks, Inc.
+FC0A81     (base 16)		Extreme Networks, Inc.
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+F0-45-DA   (hex)		Texas Instruments
+F045DA     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B8-07-16   (hex)		vivo Mobile Communication Co., Ltd.
+B80716     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+A8-EE-C6   (hex)		Muuselabs NV/SA
+A8EEC6     (base 16)		Muuselabs NV/SA
+				Rue du Tocsin 12
+				Brussels    1000
+				BE
+
+E4-F0-42   (hex)		Google, Inc.
+E4F042     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+40-48-FD   (hex)		IEEE Registration Authority
+4048FD     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+20-B3-99   (hex)		Enterasys
+20B399     (base 16)		Enterasys
+				50 Minuteman Rd
+				Andover  MA  01810
+				US
+
+CC-2D-21   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+CC2D21     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+00-40-97   (hex)		DATEX DIVISION OF
+004097     (base 16)		DATEX DIVISION OF
+				INSTRUMENTARIUM CORP.
+				    
+				FI
+
+9C-4F-CF   (hex)		TCT mobile ltd
+9C4FCF     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+D8-96-E0   (hex)		Alibaba Cloud Computing Ltd.
+D896E0     (base 16)		Alibaba Cloud Computing Ltd.
+				Yuhang District of Hangzhou Wenyi Road, Building 1, No. 969 Xixi Park, Zhejiang Province
+				Hangzhou  Zhejiang  310000
+				CN
+
+00-18-62   (hex)		Seagate Technology
+001862     (base 16)		Seagate Technology
+				1280 Disc Drive
+				Shakopee  MN  55379
+				US
+
+1C-EE-C9   (hex)		Elo touch solutions
+1CEEC9     (base 16)		Elo touch solutions
+				1033 McCarthy Boulevard
+				Milpitas  CA  95035
+				US
+
+00-0C-50   (hex)		Seagate Technology
+000C50     (base 16)		Seagate Technology
+				M/S NW1F01
+				Longmont  CO  80503
+				US
+
+34-2A-F1   (hex)		Texas Instruments
+342AF1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+C8-DE-C9   (hex)		Coriant
+C8DEC9     (base 16)		Coriant
+				1415 W. Diehl Rd
+				Naperville  IL  60563
+				US
+
+44-D5-A5   (hex)		AddOn Computer
+44D5A5     (base 16)		AddOn Computer
+				15775 Gateway cir
+				tustin  CA  92780
+				US
+
+38-F7-3D   (hex)		Amazon Technologies Inc.
+38F73D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+C0-A0-0D   (hex)		ARRIS Group, Inc.
+C0A00D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+0C-61-11   (hex)		Anda Technologies SAC
+0C6111     (base 16)		Anda Technologies SAC
+				Av. Santa Cruz 888, Miraflores
+				Lima  Peru  Lima18
+				PE
+
+00-22-C4   (hex)		epro GmbH
+0022C4     (base 16)		epro GmbH
+				Joebkesweg 3
+				Gronau  NRW  48599
+				DE
+
+1C-33-0E   (hex)		PernixData
+1C330E     (base 16)		PernixData
+				1745 Technology Drive, Suite 800
+				San Jose  CA  95110
+				US
+
+B8-F7-4A   (hex)		RCNTEC
+B8F74A     (base 16)		RCNTEC
+				Polkovaya street 3
+				Moscow    127018
+				RU
+
+64-51-06   (hex)		Hewlett Packard
+645106     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+0C-15-39   (hex)		Apple, Inc.
+0C1539     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-56-97   (hex)		Amazon Technologies Inc.
+6C5697     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-05-FF   (hex)		SNS Solutions, Inc.
+0005FF     (base 16)		SNS Solutions, Inc.
+				2nd Fl. Hill House,
+				    
+				KR
+
+F8-7B-20   (hex)		Cisco Systems, Inc
+F87B20     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-AA-DB   (hex)		Nanjing PANENG Technology Development Co.,Ltd
+E0AADB     (base 16)		Nanjing PANENG Technology Development Co.,Ltd
+				NO.6 Paneng Road,Nanjing High-tech Zone,Jiang Su,China
+				Nanjing     210061
+				CN
+
+EC-F4-51   (hex)		Arcadyan Corporation
+ECF451     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+58-12-43   (hex)		AcSiP Technology Corp.
+581243     (base 16)		AcSiP Technology Corp.
+				3F., No.22, Dalin Rd.,
+				Taoyuan  Taoyuan County  33067
+				TW
+
+A8-9F-EC   (hex)		ARRIS Group, Inc.
+A89FEC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-BE-9E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+00BE9E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+54-C5-7A   (hex)		Sunnovo International Limited
+54C57A     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+58-C1-7A   (hex)		Cambium Networks Limited
+58C17A     (base 16)		Cambium Networks Limited
+				Unit B2, Linhay Business Park,
+				Ashburton  Devon  TQ13 7UP
+				GB
+
+38-01-9F   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+38019F     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+24-5C-CB   (hex)		AXIe Consortium, Inc.
+245CCB     (base 16)		AXIe Consortium, Inc.
+				P.O. Box 1016
+				Niwot  CO  80544-1016
+				US
+
+60-9B-C8   (hex)		Hipad Intelligent Technology Co., Ltd.
+609BC8     (base 16)		Hipad Intelligent Technology Co., Ltd.
+				No. 688, East of Huangtang Street, LinkongEconomy District
+				Nanchang  Jiangxi  330000
+				CN
+
+40-6A-8E   (hex)		Hangzhou Puwell OE Tech Ltd.
+406A8E     (base 16)		Hangzhou Puwell OE Tech Ltd.
+				Letel Technology Park, 500 Qiuyi Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+1C-0F-AF   (hex)		Lucid Vision Labs
+1C0FAF     (base 16)		Lucid Vision Labs
+				Unit 130 - 13200 Delf Place
+				Richmond  BC  V6V2A2
+				CA
+
+88-B4-A6   (hex)		Motorola Mobility LLC, a Lenovo Company
+88B4A6     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+28-CF-08   (hex)		ESSYS
+28CF08     (base 16)		ESSYS
+				gaetbeol-ro
+				Incheon    21999
+				KR
+
+00-21-28   (hex)		Oracle Corporation
+002128     (base 16)		Oracle Corporation
+				17 Network Circle
+				Menlo Park  CA  95025
+				US
+
+00-1C-73   (hex)		Arista Networks
+001C73     (base 16)		Arista Networks
+				5470 Great America Pkwy
+				Santa Clara    95054
+				US
+
+2C-8A-72   (hex)		HTC Corporation
+2C8A72     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+38-AD-8E   (hex)		New H3C Technologies Co., Ltd
+38AD8E     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+34-D0-B8   (hex)		IEEE Registration Authority
+34D0B8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D0-67-26   (hex)		Hewlett Packard Enterprise
+D06726     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+EC-FA-F4   (hex)		SenRa Tech Pvt. Ltd
+ECFAF4     (base 16)		SenRa Tech Pvt. Ltd
+				133, First Floor, Lane No. 1, Westend Marg, Saidulajab
+				New Delhi    110030
+				IN
+
+D8-8F-76   (hex)		Apple, Inc.
+D88F76     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-9C-28   (hex)		Apple, Inc.
+409C28     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-38-79   (hex)		RICOH COMPANY, LTD.
+583879     (base 16)		RICOH COMPANY, LTD.
+				1005, Shimo-ogino
+				Atsugi-City  Kanagawa-Pref.  243-0298
+				JP
+
+F4-4C-70   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+F44C70     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+C8-E7-F0   (hex)		Juniper Networks
+C8E7F0     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+B0-93-5B   (hex)		ARRIS Group, Inc.
+B0935B     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F4-49-EF   (hex)		EMSTONE
+F449EF     (base 16)		EMSTONE
+				#310, Ace Techno Tower 3rd, 38 Digital-ro-29-gil
+				Guro-Gu  Seoul  08381
+				KR
+
+54-DF-24   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+54DF24     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+AC-1D-DF   (hex)		IEEE Registration Authority
+AC1DDF     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E8-D8-19   (hex)		AzureWave Technology Inc.
+E8D819     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+78-2D-7E   (hex)		TRENDnet, Inc.
+782D7E     (base 16)		TRENDnet, Inc.
+				20675 Manhattan Place
+				Torrance  CA  90501
+				US
+
+74-1A-E0   (hex)		IEEE Registration Authority
+741AE0     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+24-B2-09   (hex)		Avaya Inc
+24B209     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+FC-65-DE   (hex)		Amazon Technologies Inc.
+FC65DE     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+B0-6E-BF   (hex)		ASUSTek COMPUTER INC.
+B06EBF     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+60-3D-26   (hex)		Technicolor CH USA Inc.
+603D26     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+BC-90-3A   (hex)		Robert Bosch GmbH
+BC903A     (base 16)		Robert Bosch GmbH
+				Postfach 1661
+				Leonberg    71226
+				DE
+
+D0-B1-28   (hex)		Samsung Electronics Co.,Ltd
+D0B128     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-54-51   (hex)		Samsung Electronics Co.,Ltd
+BC5451     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+74-86-0B   (hex)		Cisco Systems, Inc
+74860B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-2D-98   (hex)		Jinwoo Industrial system
+182D98     (base 16)		Jinwoo Industrial system
+				7F,Jinwoo Building,149 dosan-daero
+				seoul  gangnamgu  06036
+				KR
+
+D8-A5-34   (hex)		Spectronix Corporation
+D8A534     (base 16)		Spectronix Corporation
+				3-28-15, Tarumi-cho
+				Suita-city  Osaka  564-0062
+				JP
+
+EC-51-BC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+EC51BC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+F0-79-E8   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+F079E8     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+60-18-03   (hex)		Daikin Air-conditioning (Shanghai) Co., Ltd.
+601803     (base 16)		Daikin Air-conditioning (Shanghai) Co., Ltd.
+				318 Shen Fu Road, Xin Zhuang Industry Zone, Shanghai, 201108, China
+				Shanghai    201108
+				CN
+
+00-A0-96   (hex)		MITSUMI ELECTRIC CO.,LTD.
+00A096     (base 16)		MITSUMI ELECTRIC CO.,LTD.
+				2-11-2, Tsurumaki
+				Tama-shi  Tokyo  206-8567
+				JP
+
+78-61-7C   (hex)		MITSUMI ELECTRIC CO.,LTD.
+78617C     (base 16)		MITSUMI ELECTRIC CO.,LTD.
+				2-11-2, Tsurumaki
+				Tama-shi  Tokyo  206-8567
+				JP
+
+94-0E-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+940E6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-FB-50   (hex)		RoomReady/Zdi, Inc.
+64FB50     (base 16)		RoomReady/Zdi, Inc.
+				2200 N. Main Street
+				Normal  IL  61761
+				US
+
+74-EA-C8   (hex)		New H3C Technologies Co., Ltd
+74EAC8     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+B4-D6-4E   (hex)		Caldero Limited
+B4D64E     (base 16)		Caldero Limited
+				Concordia Works, 30 Sovereign Street
+				Leeds  West Yorkshire  LS1 4BA
+				GB
+
+F8-9D-BB   (hex)		Tintri
+F89DBB     (base 16)		Tintri
+				303 Ravendale Dr
+				Mountain View  CA  94070
+				US
+
+D8-A0-1D   (hex)		Espressif Inc.
+D8A01D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+C4-F3-12   (hex)		Texas Instruments
+C4F312     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+90-4E-91   (hex)		IEEE Registration Authority
+904E91     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+5C-E8-B7   (hex)		Oraimo Technology Limited
+5CE8B7     (base 16)		Oraimo Technology Limited
+				RMS 05-15，13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HONG KONG  HONG KONG  999077
+				HK
+
+3C-11-B2   (hex)		Fraunhofer FIT
+3C11B2     (base 16)		Fraunhofer FIT
+				Schloss Birlinghoven
+				Sankt Augustin    53754
+				DE
+
+10-4B-46   (hex)		Mitsubishi Electric Corporation
+104B46     (base 16)		Mitsubishi Electric Corporation
+				2-7-3
+				Chiyoda-ku  Tokyo  100-8310
+				JP
+
+DC-0C-2D   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+DC0C2D     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+D0-67-E5   (hex)		Dell Inc.
+D067E5     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+8C-FE-B4   (hex)		VSOONTECH ELECTRONICS CO., LIMITED
+8CFEB4     (base 16)		VSOONTECH ELECTRONICS CO., LIMITED
+				18th, Floor, On Hong Commericial Building, 145 Hennessy Road, Wanchai, HONG KONG
+				HongKong    999077
+				HK
+
+CC-66-B2   (hex)		Nokia
+CC66B2     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+78-CA-04   (hex)		Nokia Corporation
+78CA04     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+34-29-8F   (hex)		IEEE Registration Authority
+34298F     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+5C-EA-1D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+5CEA1D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+18-14-56   (hex)		Nokia Corporation
+181456     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu  Ou  90590
+				FI
+
+00-17-C8   (hex)		KYOCERA Display Corporation
+0017C8     (base 16)		KYOCERA Display Corporation
+				2-14-9, Tamagawadai
+				Tokyo    158-8610
+				JP
+
+38-E2-DD   (hex)		zte corporation
+38E2DD     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+88-5D-FB   (hex)		zte corporation
+885DFB     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+58-B4-2D   (hex)		YSTen Technology Co.,Ltd
+58B42D     (base 16)		YSTen Technology Co.,Ltd
+				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
+				Beijing    100101
+				CN
+
+E0-48-D3   (hex)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
+E048D3     (base 16)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
+				No.999,Dacheng East Road,
+				Fenghua  Zhejiang  315500
+				CN
+
+58-E2-8F   (hex)		Apple, Inc.
+58E28F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-7B-8A   (hex)		Apple, Inc.
+787B8A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-16-FC   (hex)		Juniper Networks
+4C16FC     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+48-BC-A6   (hex)		​ASUNG TECHNO CO.,Ltd
+48BCA6     (base 16)		​ASUNG TECHNO CO.,Ltd
+				462, Dogok-ro, Songpa-gu, Seoul, Republic of Korea
+				SEOUL  Repubilc of KOREA  05574
+				KR
+
+B0-09-DA   (hex)		Ring Solutions
+B009DA     (base 16)		Ring Solutions
+				1200 Atwater Drive, Suite 225
+				Malvern  PA  19355
+				US
+
+00-05-4F   (hex)		Garmin International
+00054F     (base 16)		Garmin International
+				1200 E. 151st St
+				Olathe  KS  66062
+				US
+
+00-5C-86   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+005C86     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+30-05-3F   (hex)		JTI Co.,Ltd.
+30053F     (base 16)		JTI Co.,Ltd.
+				102-1508, 36, Bucheon-ro 198beon-gil, 
+				Buchcheon-si  Gyeonggi-do  14557
+				KR
+
+B8-DB-1C   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+B8DB1C     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+3C-10-E6   (hex)		PHAZR Inc.
+3C10E6     (base 16)		PHAZR Inc.
+				8, Presitige Circle, Suite 104
+				Allen  TX  75002
+				US
+
+90-45-06   (hex)		Tokyo Boeki Medisys Inc.
+904506     (base 16)		Tokyo Boeki Medisys Inc.
+				1-14-21, Higashitoyoda
+				 Hino  Tokyo  191-0052
+				JP
+
+00-21-A1   (hex)		Cisco Systems, Inc
+0021A1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+FC-B6-98   (hex)		Cambridge Industries(Group) Co.,Ltd.
+FCB698     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				22 Floor,Qilai Tower;889 Yishan Road
+				Shanghai  CHINA  200233
+				CN
+
+00-01-CD   (hex)		ARtem
+0001CD     (base 16)		ARtem
+				Olgastraße 152
+				    
+				DE
+
+5C-54-6D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5C546D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-A1-D1   (hex)		Sagemcom Broadband SAS
+84A1D1     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+90-9D-7D   (hex)		ARRIS Group, Inc.
+909D7D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+78-8C-4D   (hex)		Indyme Solutions, LLC
+788C4D     (base 16)		Indyme Solutions, LLC
+				8295 Aero Place Ste 260
+				San Diego  CA  92123
+				US
+
+78-BC-1A   (hex)		Cisco Systems, Inc
+78BC1A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-59   (hex)		Sagemcom Broadband SAS
+000E59     (base 16)		Sagemcom Broadband SAS
+				2, rue du petit Albi
+				CERGY SAINT CHRISTOPHE  val d'Oise  95800
+				FR
+
+10-1D-51   (hex)		8Mesh Networks Limited
+101D51     (base 16)		8Mesh Networks Limited
+				Unit 607, 6/F, Yen Sheng Centre,
+				64 Hoi Yuen Road  Kwun Tong  000
+				HK
+
+DC-EB-53   (hex)		Wuhan QianXiao Elecronic Technology CO.,LTD
+DCEB53     (base 16)		Wuhan QianXiao Elecronic Technology CO.,LTD
+				Guanggu Xinzhongxin, No.303 of Guanggu road, East lake development zone
+				wuhan  hubei  430000
+				CN
+
+EC-8A-C7   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+EC8AC7     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+88-36-5F   (hex)		LG Electronics (Mobile Communications)
+88365F     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+28-8C-B8   (hex)		zte corporation
+288CB8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+FC-7F-56   (hex)		CoSyst Control Systems GmbH
+FC7F56     (base 16)		CoSyst Control Systems GmbH
+				Martin-Albert-Str. 1
+				Nürnberg  Bayern  90491
+				DE
+
+2C-40-53   (hex)		Samsung Electronics Co.,Ltd
+2C4053     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+0C-8F-FF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C8FFF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-B1-21   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54B121     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-81-02   (hex)		Sercomm Corporation.
+788102     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+84-AA-9C   (hex)		MitraStar Technology Corp.
+84AA9C     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+F0-EF-D2   (hex)		TF PAYMENT SERVICE CO., LTD
+F0EFD2     (base 16)		TF PAYMENT SERVICE CO., LTD
+				5F Shibadaimon Center Building, 1-10-11 Shibadaimon
+				Minato-ku  Tokyo  105-0012
+				JP
+
+24-B2-DE   (hex)		Espressif Inc.
+24B2DE     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+00-07-26   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+000726     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				A211-A213 & B201-B210, 2F, Baiying Building, 1019#, Nanhai RD, Shekou Party, Nanshan District, 
+				Shenzhen  Guangdong  518067
+				CN
+
+FC-8B-97   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+FC8B97     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
+				Shenzhen  Guangdong  518067
+				CN
+
+2C-AB-25   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+2CAB25     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
+				Shenzhen  Guangdong  518067
+				CN
+
+1C-A5-32   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+1CA532     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				1#SongGang RD, Bao'an Dist., Shenzhen, Guangdong,China
+				Shenzhen  Guangdong  518109
+				CN
+
+00-0C-03   (hex)		HDMI Licensing, LLC
+000C03     (base 16)		HDMI Licensing, LLC
+				1060 East Arques Ave.
+				Sunnyvale  CA  94085
+				US
+
+7C-BA-CC   (hex)		IEEE Registration Authority
+7CBACC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-F1-28   (hex)		Hewlett Packard Enterprise
+94F128     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville    95747
+				US
+
+10-1B-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+101B54     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+A8-0C-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A80C63     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-C3-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CC307     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-10-7F   (hex)		Ruckus Wireless
+E0107F     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+C4-01-7C   (hex)		Ruckus Wireless
+C4017C     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+04-FA-3F   (hex)		Opticore Inc.
+04FA3F     (base 16)		Opticore Inc.
+				97 Jungbudaero448beongil, Yeongtonggu
+				Suwonsi  Gyeonggido  16521
+				KR
+
+54-02-37   (hex)		Teltronic AG
+540237     (base 16)		Teltronic AG
+				Gewerbestrasse 9
+				Biberist    4562
+				CH
+
+4C-B0-08   (hex)		Shenzhen Gwelltimes Technology Co.,Ltd
+4CB008     (base 16)		Shenzhen Gwelltimes Technology Co.,Ltd
+				A4 building 15floor Zhongying Jewelry Industrial Park Bulan Road No.31 Nanwan Street Longgang District Shenzhen City China
+				Shenzhen    518112
+				CN
+
+E8-6F-F2   (hex)		Actiontec Electronics, Inc
+E86FF2     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-50-18   (hex)		AMIT, Inc.
+005018     (base 16)		AMIT, Inc.
+				No.32, Huangong Rd.,
+				Yongkang City,  Tainan County  71041
+				TW
+
+70-DE-F9   (hex)		FAI WAH INTERNATIONAL (HONG KONG) LIMITED
+70DEF9     (base 16)		FAI WAH INTERNATIONAL (HONG KONG) LIMITED
+				Room 19, 8F.,Corporation Park, 11 On Lai Street,Shatin,Shek Mun,N.T.Hong Kong
+				Hong Kong    999077
+				HK
+
+B0-EA-BC   (hex)		ASKEY COMPUTER CORP
+B0EABC     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+94-C6-91   (hex)		EliteGroup Computer Systems Co., LTD
+94C691     (base 16)		EliteGroup Computer Systems Co., LTD
+				No.239, Sec. 2, TiDing Blvd. Nei-Hu Dist.
+				Taipei  Taiwan  11439
+				TW
+
+3C-F5-91   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+3CF591     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+60-21-01   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+602101     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+7C-EB-7F   (hex)		Dmet Products Corp.
+7CEB7F     (base 16)		Dmet Products Corp.
+				118, Fujisoft Akihabara Bldg 12F, Kanda Neribeicho 3
+				Chiyodaku  Tokyo  1010022
+				JP
+
+8C-85-80   (hex)		Smart Innovation LLC
+8C8580     (base 16)		Smart Innovation LLC
+				7F,Tower B,Jianxing
+				ShenZhen  GuangZhou  518055
+				CN
+
+40-42-29   (hex)		Layer3TV, Inc
+404229     (base 16)		Layer3TV, Inc
+				1660 Wynkoop St - Suite 800
+				Denver  CO  80202
+				US
+
+FC-2F-6B   (hex)		Everspin Technologies, Inc.
+FC2F6B     (base 16)		Everspin Technologies, Inc.
+				1347 N. Alma School Rd., Suite 220
+				Chandler  AZ  85224
+				US
+
+28-7B-09   (hex)		zte corporation
+287B09     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-25-C4   (hex)		Ruckus Wireless
+0025C4     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+C0-C5-20   (hex)		Ruckus Wireless
+C0C520     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+78-B2-8D   (hex)		Beijing Tengling Technology CO.Ltd 
+78B28D     (base 16)		Beijing Tengling Technology CO.Ltd 
+				beijing haidian shangdi san jie
+				beijing    100086
+				CN
+
+A8-80-38   (hex)		ShenZhen MovingComm Technology Co., Limited
+A88038     (base 16)		ShenZhen MovingComm Technology Co., Limited
+				5F, FuXinFa Industrial Park, LiuXianDong Industrial Zone,
+				ShenZhen  GuangDong   518055
+				CN
+
+F8-1D-90   (hex)		Solidwintech
+F81D90     (base 16)		Solidwintech
+				6th Floor, SOLiD Space 220 Pangyoyeok-ro, Bundang-gu
+				Seongnam-si  Gyeongi-do  13493
+				KR
+
+A0-6A-44   (hex)		Vizio, Inc
+A06A44     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+DC-BE-7A   (hex)		Zhejiang Nurotron Biotechnology Co.
+DCBE7A     (base 16)		Zhejiang Nurotron Biotechnology Co.
+				Building4, No.99 Xiaomao Rd
+				Hangzhou  zhejiang  310011
+				CN
+
+34-38-B7   (hex)		HUMAX Co., Ltd.
+3438B7     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+CC-06-77   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+CC0677     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+78-45-01   (hex)		Biamp Systems
+784501     (base 16)		Biamp Systems
+				9300 SW Gemini Dr
+				Beaverton  OR  97008
+				US
+
+30-9C-23   (hex)		Micro-Star INTL CO., LTD.
+309C23     (base 16)		Micro-Star INTL CO., LTD.
+				No.69, Lide St.,
+				New Taipei City  Taiwan  235
+				TW
+
+54-D7-51   (hex)		Proximus
+54D751     (base 16)		Proximus
+				Bld du Roi Albert II 27
+				Brussels    1030
+				BE
+
+14-78-0B   (hex)		Varex Imaging Deutschland AG
+14780B     (base 16)		Varex Imaging Deutschland AG
+				Zweigniederlassung/Branch Walluf
+				In der Rehbach 22  Walluf  65396
+				DE
+
+AC-AF-B9   (hex)		Samsung Electronics Co.,Ltd
+ACAFB9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-B1-11   (hex)		Intel Corporate
+88B111     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+8C-39-5C   (hex)		Bit4id Srl
+8C395C     (base 16)		Bit4id Srl
+				Via Diocleziano, 107
+				Naples    80125
+				IT
+
+D4-25-8B   (hex)		Intel Corporate
+D4258B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+04-1B-6D   (hex)		LG Electronics (Mobile Communications)
+041B6D     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+F4-41-56   (hex)		Arrikto Inc.
+F44156     (base 16)		Arrikto Inc.
+				3505 El Camino Real
+				Palo Alto  CA  94306
+				US
+
+68-8D-B6   (hex)		AETEK INC.
+688DB6     (base 16)		AETEK INC.
+				 3F, No.192, Lien-Cheng Rd., Chung-Ho,
+				 New Taipei City    23553
+				TW
+
+EC-F3-42   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ECF342     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+50-FF-20   (hex)		Keenetic Limited
+50FF20     (base 16)		Keenetic Limited
+				1202, 12/F., AT TOWER, 180 ELECTRIC ROAD, NORTH POINT
+				HONG KONG    852
+				HK
+
+E4-57-40   (hex)		ARRIS Group, Inc.
+E45740     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-94-C2   (hex)		Intel Corporate
+F894C2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+70-D3-79   (hex)		Cisco Systems, Inc
+70D379     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-F8-2C   (hex)		Cisco Systems, Inc
+00F82C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-C1-B1   (hex)		Cisco Systems, Inc
+00C1B1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-FC-B1   (hex)		JJ Corp
+F4FCB1     (base 16)		JJ Corp
+				88 Soha-ro
+				Gwangmyeong-si    14316
+				KR
+
+D8-C8-E9   (hex)		Phicomm (Shanghai) Co., Ltd.
+D8C8E9     (base 16)		Phicomm (Shanghai) Co., Ltd.
+				3666 SiXian Rd.,Songjiang District
+				Shanghai  Shanghai  201616
+				CN
+
+7C-B9-60   (hex)		Shanghai X-Cheng telecom LTD
+7CB960     (base 16)		Shanghai X-Cheng telecom LTD
+				ROOM 401, Building 5, No.3000 LONG DONG Avenue, Pudong New District, Shanghai
+				Shanghai  Shanghai  201203
+				CN
+
+B0-3D-96   (hex)		Vision Valley FZ LLC
+B03D96     (base 16)		Vision Valley FZ LLC
+				Dubai Internet City
+				Dubai  Dubai  500294
+				AE
+
+98-6C-5C   (hex)		Jiangxi Gosun Guard Security Co.,Ltd
+986C5C     (base 16)		Jiangxi Gosun Guard Security Co.,Ltd
+				2rd floor,8 building Middle,Zhongxing Software Park,Changdong Avenue,Nanchang High Tech Zone,Nanchang city,Jiangxi province
+				Nan Chang City  Jiang Xi Province  330000
+				CN
+
+24-79-2A   (hex)		Ruckus Wireless
+24792A     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+30-D3-86   (hex)		zte corporation
+30D386     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+70-DB-98   (hex)		Cisco Systems, Inc
+70DB98     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B4-2A-0E   (hex)		Technicolor CH USA Inc.
+B42A0E     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+9C-C8-AE   (hex)		Becton, Dickinson  and Company
+9CC8AE     (base 16)		Becton, Dickinson  and Company
+				1 Becton Drive
+				Franklin Lakes  MA   07417-1880
+				US
+
+B0-35-9F   (hex)		Intel Corporate
+B0359F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+C0-D9-62   (hex)		ASKEY COMPUTER CORP
+C0D962     (base 16)		ASKEY COMPUTER CORP
+				10F,NO.119,JIANKANG RD.,ZHONGHE DIST XINBEI CITY
+				taipei  TAIPEI  23585
+				TW
+
+F8-0B-CB   (hex)		Cisco Systems, Inc
+F80BCB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-D3-7F   (hex)		Yu Fly Mikly Way Science and Technology Co., Ltd.
+50D37F     (base 16)		Yu Fly Mikly Way Science and Technology Co., Ltd.
+				6F, No. 1168 Huyi Road, Nanxiang Town Jiading District Shanghai 201800 CHINA
+				shanghai    201800
+				CN
+
+18-12-12   (hex)		Cepton Technologies
+181212     (base 16)		Cepton Technologies
+				103 Bonaventura Dr
+				San Jose  CA  95134
+				US
+
+70-D9-23   (hex)		vivo Mobile Communication Co., Ltd.
+70D923     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'an  DongGuan City,Guangdong  523860
+				CN
+
+B8-3A-08   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+B83A08     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+28-B4-48   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+28B448     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-05-01   (hex)		PEGATRON CORPORATION
+100501     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+2C-FA-A2   (hex)		Alcatel-Lucent Enterprise
+2CFAA2     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Rd
+				Calabasas  CA  91301
+				US
+
+A4-9B-F5   (hex)		Hybridserver Tec GmbH
+A49BF5     (base 16)		Hybridserver Tec GmbH
+				Gutenbergring 26a
+				Norderstedt  Schleswig-Holstein  22848
+				DE
+
+50-3D-A1   (hex)		Samsung Electronics Co.,Ltd
+503DA1     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+F0-97-E5   (hex)		TAMIO, INC
+F097E5     (base 16)		TAMIO, INC
+				12F-2, No.33, Sec. 1 , Mingsheng Rd.,Banqiao Dist
+				New Taipei City    22069
+				TW
+
+4C-1A-3D   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4C1A3D     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+08-02-8E   (hex)		NETGEAR
+08028E     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+E8-E7-32   (hex)		Alcatel-Lucent Enterprise
+E8E732     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Road
+				Calabasas  CA  91301
+				US
+
+B4-7C-9C   (hex)		Amazon Technologies Inc.
+B47C9C     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+F4-A7-39   (hex)		Juniper Networks
+F4A739     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+F4-70-AB   (hex)		vivo Mobile Communication Co., Ltd.
+F470AB     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+2C-5A-0F   (hex)		Cisco Systems, Inc
+2C5A0F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-31-24   (hex)		Cisco Systems, Inc
+2C3124     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-32-37   (hex)		Apple, Inc.
+503237     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-48-1A   (hex)		Apple, Inc.
+B0481A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-9C-DF   (hex)		Apple, Inc.
+B49CDF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-BF-6B   (hex)		Apple, Inc.
+48BF6B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-1D-B8   (hex)		ARRIS Group, Inc.
+2C1DB8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+58-82-1D   (hex)		H. Schomäcker GmbH
+58821D     (base 16)		H. Schomäcker GmbH
+				Heidestr. 183
+				Köln    51147
+				DE
+
+D8-A1-05   (hex)		Syslane, Co., Ltd.
+D8A105     (base 16)		Syslane, Co., Ltd.
+				#1201, Megacenter, SKntechno-park,, Sangdaeweon-dong, Joongweon-gu
+				Seongnam  Outside the US, Mexico, or Canada  462-721
+				KR
+
+BC-A0-42   (hex)		SHANGHAI FLYCO ELECTRICAL APPLIANCE CO.,LTD
+BCA042     (base 16)		SHANGHAI FLYCO ELECTRICAL APPLIANCE CO.,LTD
+				No.555,Guang Fu Lin east Road,Songjiang District
+				Shanghai  Shanghai  201613
+				CN
+
+3C-05-18   (hex)		Samsung Electronics Co.,Ltd
+3C0518     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+90-06-28   (hex)		Samsung Electronics Co.,Ltd
+900628     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-A9-FE   (hex)		GHIA Technology (Shenzhen) LTD
+B4A9FE     (base 16)		GHIA Technology (Shenzhen) LTD
+				RM 1606, BLDG 3rd, COFCO Clouds Mansion
+				Shenzhen    518101
+				CN
+
+08-B2-58   (hex)		Juniper Networks
+08B258     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+9C-84-BF   (hex)		Apple, Inc.
+9C84BF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-A0-D3   (hex)		IEEE Registration Authority
+1CA0D3     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+9C-FC-D1   (hex)		Aetheris Technology (Shanghai) Co., Ltd.
+9CFCD1     (base 16)		Aetheris Technology (Shanghai) Co., Ltd.
+				Room 225， Building No. 8, 433 Yuyuan Road
+				Shanghai  Shanghai  200040
+				CN
+
+CC-CE-1E   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+CCCE1E     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+0C-F4-D5   (hex)		Ruckus Wireless
+0CF4D5     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+7C-26-64   (hex)		Sagemcom Broadband SAS
+7C2664     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+AC-6B-0F   (hex)		CADENCE DESIGN SYSTEMS INC
+AC6B0F     (base 16)		CADENCE DESIGN SYSTEMS INC
+				2670 SEELY AVE
+				SAN JOSE  CA  95134
+				US
+
+C8-B5-AD   (hex)		Hewlett Packard Enterprise
+C8B5AD     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+7C-38-66   (hex)		Texas Instruments
+7C3866     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+0C-61-CF   (hex)		Texas Instruments
+0C61CF     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+9C-1D-58   (hex)		Texas Instruments
+9C1D58     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+38-05-AC   (hex)		Piller Group GmbH
+3805AC     (base 16)		Piller Group GmbH
+				Abgunst 24
+				Osterode    37520
+				DE
+
+34-6E-9D   (hex)		Ericsson AB
+346E9D     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+68-54-C1   (hex)		ColorTokens, Inc.
+6854C1     (base 16)		ColorTokens, Inc.
+				2101 Tasman Dr. Suite 200A
+				Santa Clara  CA  95054
+				US
+
+00-11-1B   (hex)		Targa Systems Div L-3 Communications
+00111B     (base 16)		Targa Systems Div L-3 Communications
+				2081 Merivale Rd
+				Ottawa  Ont  K2G 1G9
+				CA
+
+6C-75-0D   (hex)		WiFiSONG
+6C750D     (base 16)		WiFiSONG
+				Rm. 605, Building 3, No. 75 Wenyi West Road
+				Hangzhou  Zhejiang  310012
+				CN
+
+BC-3F-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC3F8F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-30-04   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+143004     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-DC-41   (hex)		YOUNGZONE CULTURE (SHANGHAI) CORP
+F4DC41     (base 16)		YOUNGZONE CULTURE (SHANGHAI) CORP
+				7-8th floor, #1 Building, 1006 Jinshajiang Road
+				Shanghai  Shanghai  200062
+				CN
+
+C4-83-6F   (hex)		Ciena Corporation
+C4836F     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+7C-C6-C4   (hex)		Kolff Computer Supplies b.v.
+7CC6C4     (base 16)		Kolff Computer Supplies b.v.
+				Kuipershaven 22
+				Dordrecht  Zuid-Holland  3311 AL
+				NL
+
+00-0F-4F   (hex)		PCS Systemtechnik GmbH
+000F4F     (base 16)		PCS Systemtechnik GmbH
+				66 Hillside Rd
+				Auckland    1310
+				NZ
+
+A8-0C-CA   (hex)		Shenzhen Sundray Technologies Company Limited
+A80CCA     (base 16)		Shenzhen Sundray Technologies Company Limited
+				6th Floor,Block A1, Nanshan iPark, No.1001 XueYuan Road, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+38-AA-3C   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+38AA3C     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				Suwon    443-743
+				US
+
+00-03-02   (hex)		Charles Industries, Ltd.
+000302     (base 16)		Charles Industries, Ltd.
+				5600 Apollo Drive
+				Rolling Meadows  IL  60008
+				US
+
+50-A4-D0   (hex)		IEEE Registration Authority
+50A4D0     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-00-10   (hex)		AT&T
+800010     (base 16)		AT&T
+				3300 E Renner Road
+				Richardson  TX  75082
+				US
+
+00-24-F1   (hex)		Shenzhen Fanhai Sanjiang Electronics Co., Ltd.
+0024F1     (base 16)		Shenzhen Fanhai Sanjiang Electronics Co., Ltd.
+				3Floor-Guangcai Xintiandi Building,Nanshan Rd,Nanshan,
+				Shenzhen  Guangdong  518054
+				CN
+
+14-2F-FD   (hex)		LT SECURITY INC
+142FFD     (base 16)		LT SECURITY INC
+				18738 SAN JOSE AVE
+				CITY OF INDUSTRY  CA  91748
+				US
+
+0C-3C-CD   (hex)		Universal Global Scientific Industrial Co., Ltd.
+0C3CCD     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
+				Nan-Tou  Taiwan  54261
+				TW
+
+14-AB-C5   (hex)		Intel Corporate
+14ABC5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+50-D2-13   (hex)		CviLux Corporation
+50D213     (base 16)		CviLux Corporation
+				9F,No.9,Lane 3,Sec.1,Chung-Cheng East Road, Tamshui
+				New Taipei City    25147
+				TW
+
+00-1E-29   (hex)		Hypertherm Inc
+001E29     (base 16)		Hypertherm Inc
+				15 Great Hollow Rd
+				Hanover  NH  03755
+				US
+
+50-04-B8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5004B8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-D0-B2   (hex)		Xiotech Corporation
+00D0B2     (base 16)		Xiotech Corporation
+				6455 FLYING CLOUD DRIVE
+				EDEN PRAIRIE  MN  55344
+				US
+
+5C-FF-35   (hex)		Wistron Corporation
+5CFF35     (base 16)		Wistron Corporation
+				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
+				Taipei Hsien    221
+				TW
+
+78-F2-9E   (hex)		PEGATRON CORPORATION
+78F29E     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+64-77-7D   (hex)		Hitron Technologies. Inc
+64777D     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+9C-50-EE   (hex)		Cambridge Industries(Group) Co.,Ltd.
+9C50EE     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				5/F,Building 8, 2388 ChenHang Road, MinHang District
+				shanghai    201114
+				CN
+
+40-ED-98   (hex)		IEEE Registration Authority
+40ED98     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C8-91-F9   (hex)		Sagemcom Broadband SAS
+C891F9     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison  HAUTS DE SEINE  92848
+				FR
+
+AC-DC-E5   (hex)		Procter & Gamble Company
+ACDCE5     (base 16)		Procter & Gamble Company
+				2 Procter & Gamble Plaza
+				Cincinnati  OH  45202
+				US
+
+00-B3-62   (hex)		Apple, Inc.
+00B362     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-E4-AB   (hex)		Apple, Inc.
+E4E4AB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-D2-62   (hex)		Tzukuri Pty Ltd
+60D262     (base 16)		Tzukuri Pty Ltd
+				6 Lenthall Street
+				Kensington  NSW  2033
+				AU
+
+84-04-D2   (hex)		Kirale Technologies SL
+8404D2     (base 16)		Kirale Technologies SL
+				General Vara de Rey 9, 5B
+				Logrono  La Rioja  26001
+				ES
+
+60-33-4B   (hex)		Apple, Inc.
+60334B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-AF-D7   (hex)		FUJITSU LIMITED
+38AFD7     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+28-99-3A   (hex)		Arista Networks
+28993A     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+64-EB-8C   (hex)		Seiko Epson Corporation
+64EB8C     (base 16)		Seiko Epson Corporation
+				80 Harashinden
+				Shiojiri-shi  Nagano-ken  399-0785
+				JP
+
+F4-8C-50   (hex)		Intel Corporate
+F48C50     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+DC-D2-55   (hex)		Kinpo Electronics, Inc.
+DCD255     (base 16)		Kinpo Electronics, Inc.
+				No.147, Sec. 3, Beishen Rd
+				Shenkeng Dist.  New Taipei City  222
+				TW
+
+A0-2C-36   (hex)		FN-LINK TECHNOLOGY LIMITED
+A02C36     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+00-03-20   (hex)		Xpeed, Inc.
+000320     (base 16)		Xpeed, Inc.
+				99 W. Tasman Drive
+				San Jose  CA  95134
+				US
+
+50-8A-0F   (hex)		SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.
+508A0F     (base 16)		SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.
+				No.6 Building, Longfu Industrial Area, Huarong Road, Tongsheng Community, Dalang Street, Longhua New District
+				Shenzhen  Guangdong  518000
+				CN
+
+7C-CB-E2   (hex)		IEEE Registration Authority
+7CCBE2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A8-A5-E2   (hex)		MSF-Vathauer Antriebstechnik GmbH & Co KG 
+A8A5E2     (base 16)		MSF-Vathauer Antriebstechnik GmbH & Co KG 
+				Am Hessentuch 6-8
+				Detmold  Nordrhein-Westfalen  32758
+				DE
+
+BC-A8-A6   (hex)		Intel Corporate
+BCA8A6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+74-FF-4C   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+74FF4C     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+68-AF-13   (hex)		Futura Mobility
+68AF13     (base 16)		Futura Mobility
+				515 PENNSYLVANIA AVE
+				FORT WASHINTON  PA  19034
+				US
+
+68-1A-B2   (hex)		zte corporation
+681AB2     (base 16)		zte corporation
+				12/F.,zte R&D building,kejinan Road,
+				shenzhen  guangdong  518057
+				CN
+
+7C-EB-AE   (hex)		Ridgeline Instruments
+7CEBAE     (base 16)		Ridgeline Instruments
+				4803 Innovation Drive, Suite 3B
+				Fort Collins  CO  80525
+				US
+
+E0-50-8B   (hex)		Zhejiang Dahua Technology Co., Ltd.
+E0508B     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+9C-1E-95   (hex)		Actiontec Electronics, Inc
+9C1E95     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+60-42-7F   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+60427F     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+E8-9E-B4   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+E89EB4     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+D4-6A-6A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+D46A6A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+98-FD-74   (hex)		ACT.CO.LTD
+98FD74     (base 16)		ACT.CO.LTD
+				3-RD Floor 93, Sanbon-ro
+				Gunpo-si  Gyeonggi-do  15849
+				KR
+
+64-DB-43   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+64DB43     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+00-0E-58   (hex)		Sonos, Inc.
+000E58     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+00-25-90   (hex)		Super Micro Computer, Inc.
+002590     (base 16)		Super Micro Computer, Inc.
+				980 Rock Avenue
+				San Jose  California  95131
+				US
+
+AC-1F-6B   (hex)		Super Micro Computer, Inc.
+AC1F6B     (base 16)		Super Micro Computer, Inc.
+				980 Rock Ave
+				San Jose  CA  95131
+				US
+
+00-0B-2E   (hex)		Cal-Comp Electronics & Communications Company Ltd.
+000B2E     (base 16)		Cal-Comp Electronics & Communications Company Ltd.
+				No.147, Sec. 3, Beishen Rd
+				Shenkeng Dist  New Taipei City  ---
+				TW
+
+48-65-EE   (hex)		IEEE Registration Authority
+4865EE     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D0-F7-3B   (hex)		Helmut Mauell GmbH Werk Weida
+D0F73B     (base 16)		Helmut Mauell GmbH Werk Weida
+				Am Rosenhügel 1-7
+				Velbert    42553
+				DE
+
+18-06-75   (hex)		Dilax Intelcom GmbH
+180675     (base 16)		Dilax Intelcom GmbH
+				Alt-Moabit 96b
+				Berlin    10559
+				DE
+
+00-0F-C2   (hex)		Uniwell Corporation
+000FC2     (base 16)		Uniwell Corporation
+				5-25, 3-chome, Tenma, Kita-ku
+				Osaka    530-0043
+				JP
+
+6C-EC-5A   (hex)		Hon Hai Precision Ind. CO.,Ltd.
+6CEC5A     (base 16)		Hon Hai Precision Ind. CO.,Ltd.
+				B22 Building, NO.52,Tongle Road, Foxconn Industrial Park, District Jiangnan, Nanning, Guangxi, China
+				Nanning  Guangxi  530031
+				CN
+
+44-C3-46   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+44C346     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-74-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+307496     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-8A-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+708A09     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-C5-EF   (hex)		Co-Comm Servicios Telecomunicaciones S.L.
+CCC5EF     (base 16)		Co-Comm Servicios Telecomunicaciones S.L.
+				Lisboa, 20 Las Rozas
+				Madrid  Madrid  28232
+				ES
+
+90-02-A9   (hex)		Zhejiang Dahua Technology Co., Ltd.
+9002A9     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				NO.1199 BinAn Road
+				Hangzhou  Zhejiang  310053
+				CN
+
+C0-28-8D   (hex)		Logitech, Inc
+C0288D     (base 16)		Logitech, Inc
+				4700 NW Camas Meadows Drive
+				Camas  WA  98607
+				US
+
+0C-49-33   (hex)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
+0C4933     (base 16)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
+				No. 259, Jiuzhou Road
+				Mianyang City  Sichuan Province  621000
+				CN
+
+00-00-64   (hex)		Yokogawa Digital Computer Corporation
+000064     (base 16)		Yokogawa Digital Computer Corporation
+				Shinjuku MIDWEST Bldg.4-30-3
+				Yoyogi  Shibuya-ku, Tokyo  151-0053
+				JP
+
+50-6B-8D   (hex)		Nutanix
+506B8D     (base 16)		Nutanix
+				1740 Technology Drive Ste #150
+				San Jose  CA  95110
+				US
+
+00-38-DF   (hex)		Cisco Systems, Inc
+0038DF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-CA-E5   (hex)		FREEBOX SAS
+F4CAE5     (base 16)		FREEBOX SAS
+				8 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+90-00-4E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+90004E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+7C-26-34   (hex)		ARRIS Group, Inc.
+7C2634     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+40-F4-13   (hex)		Rubezh
+40F413     (base 16)		Rubezh
+				Ulyanovskaya str. 28
+				Saratov    410056
+				RU
+
+C8-D3-FF   (hex)		Hewlett Packard
+C8D3FF     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+C4-BE-84   (hex)		Texas Instruments
+C4BE84     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas    75243
+				US
+
+F4-F5-24   (hex)		Motorola Mobility LLC, a Lenovo Company
+F4F524     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+00-BB-C1   (hex)		CANON INC.
+00BBC1     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+24-C1-BD   (hex)		CRRC DALIAN R&D CO.,LTD.
+24C1BD     (base 16)		CRRC DALIAN R&D CO.,LTD.
+				No.1 Haoyang North Street,Lvshun Economic Deveopment Zone
+				Dalian  Liaoning  116052
+				CN
+
+00-A2-EE   (hex)		Cisco Systems, Inc
+00A2EE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-59-DC   (hex)		Cisco Systems, Inc
+0059DC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-FD-45   (hex)		Hewlett Packard Enterprise
+00FD45     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+50-98-F3   (hex)		Rheem Australia Pty Ltd
+5098F3     (base 16)		Rheem Australia Pty Ltd
+				1 Alan Street
+				Rydalmere  NSW  2116
+				AU
+
+B4-D1-35   (hex)		Cloudistics
+B4D135     (base 16)		Cloudistics
+				116000 Sunrise Valley Dr Suite 210
+				Reston  VA  20190
+				US
+
+00-13-A5   (hex)		General Solutions, LTD.
+0013A5     (base 16)		General Solutions, LTD.
+				5902 Sovereign Drive
+				Houston  Texas  77036
+				US
+
+9C-3D-CF   (hex)		NETGEAR
+9C3DCF     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+24-88-94   (hex)		shenzhen lensun Communication Technology LTD
+248894     (base 16)		shenzhen lensun Communication Technology LTD
+				RM 201, Block 19, Zhiheng industry Park, Nantou Check point
+				Shenzhen   Guangdong  518000
+				CN
+
+B0-4B-BF   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
+B04BBF     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
+				JL.PALEM 1 BLOK DS-6
+				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
+				ID
+
+CC-2D-83   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+CC2D83     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+D4-6E-0E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D46E0E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+88-36-6C   (hex)		EFM Networks
+88366C     (base 16)		EFM Networks
+				6F, Benposra II 1197-1 Bojeong Giheung Gu
+				Yong In  Kyunggi do  446913
+				KR
+
+48-DA-96   (hex)		Eddy Smart Home Solutions Inc.
+48DA96     (base 16)		Eddy Smart Home Solutions Inc.
+				1600-25 Sheppard Avenue West
+				Toronto  Ontario  M2N 6S6
+				CA
+
+F0-74-E4   (hex)		Thundercomm Technology Co., Ltd
+F074E4     (base 16)		Thundercomm Technology Co., Ltd
+				Building NO.4, 99# Xiantao Data Valley Zhonglu, Yubei District, Chongqing, China 
+				chongqing    404100
+				CN
+
+A0-72-2C   (hex)		HUMAX Co., Ltd.
+A0722C     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+FC-D8-48   (hex)		Apple, Inc.
+FCD848     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-10-7B   (hex)		Samsung Electronics Co.,Ltd
+EC107B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-23-2C   (hex)		Samsung Electronics Co.,Ltd
+1C232C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E0-0D-B9   (hex)		Cree, Inc.
+E00DB9     (base 16)		Cree, Inc.
+				4600 Silicon Drive
+				Durham  NC  27703
+				US
+
+DC-0D-30   (hex)		Shenzhen Feasycom Technology Co., Ltd.
+DC0D30     (base 16)		Shenzhen Feasycom Technology Co., Ltd.
+				#2004, Huichao Science & Technology Building, Jinhai Road, Xixiang
+				Shenzhen  Guangdong  18000
+				CN
+
+F0-AC-D7   (hex)		IEEE Registration Authority
+F0ACD7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-95-A0   (hex)		Google, Inc.
+9495A0     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+00-A6-CA   (hex)		Cisco Systems, Inc
+00A6CA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+38-D5-47   (hex)		ASUSTek COMPUTER INC.
+38D547     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+FC-83-C6   (hex)		N-Radio Technologies Co., Ltd.
+FC83C6     (base 16)		N-Radio Technologies Co., Ltd.
+				2#, 7F, Satellite Buiding, Keyuan Road, Nanshan
+				ShenZhen  GuangDong  518000
+				CN
+
+30-B6-4F   (hex)		Juniper Networks
+30B64F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+1C-9D-3E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+1C9D3E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+F0-2F-A7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F02FA7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-DE-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+18DED7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-3D-D4   (hex)		CyberTAN Technology Inc.
+C83DD4     (base 16)		CyberTAN Technology Inc.
+				99 Park Ave III, Hsinchu Science Park
+				Hsinchu    308
+				TW
+
+E0-B9-4D   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+E0B94D     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+D8-45-2B   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+D8452B     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+E4-18-6B   (hex)		Zyxel Communications Corporation
+E4186B     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+00-87-31   (hex)		Cisco Systems, Inc
+008731     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+88-DE-A9   (hex)		Roku, Inc.
+88DEA9     (base 16)		Roku, Inc.
+				12980 Saratoga Ave
+				Saratoga  CA  95070
+				US
+
+78-88-8A   (hex)		CDR Sp. z o.o. Sp. k.
+78888A     (base 16)		CDR Sp. z o.o. Sp. k.
+				Palki 15
+				Zory    44-240
+				PL
+
+00-21-D1   (hex)		Samsung Electronics Co.,Ltd
+0021D1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-1F-CC   (hex)		Samsung Electronics Co.,Ltd
+001FCC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-29-83   (hex)		Boeing Defence Australia
+A42983     (base 16)		Boeing Defence Australia
+				GPO Box 767
+				Brisbane  Queensland  4001
+				AU
+
+EC-88-92   (hex)		Motorola Mobility LLC, a Lenovo Company
+EC8892     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 Merchandise Mart Plaza, Suite 1800
+				Chicago  IL  60654
+				US
+
+74-87-A9   (hex)		OCT Technology Co., Ltd.
+7487A9     (base 16)		OCT Technology Co., Ltd.
+				8F. -2, No. 94, Baojhong Rd. Sindian Dist.
+				New Taipei City    231
+				TW
+
+00-4A-77   (hex)		zte corporation
+004A77     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A4-14-37   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+A41437     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.469,Jianghui Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+60-A1-0A   (hex)		Samsung Electronics Co.,Ltd
+60A10A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+8C-71-F8   (hex)		Samsung Electronics Co.,Ltd
+8C71F8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-05-1B   (hex)		Samsung Electronics Co.,Ltd
+CC051B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+8C-77-12   (hex)		Samsung Electronics Co.,Ltd
+8C7712     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-63-D1   (hex)		Samsung Electronics Co.,Ltd
+9463D1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-21-D2   (hex)		Samsung Electronics Co.,Ltd
+0021D2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-49-7D   (hex)		Samsung Electronics Co.,Ltd
+5C497D     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+98-23-4E   (hex)		Micromedia AG
+98234E     (base 16)		Micromedia AG
+				Gartenweg 46
+				Buonas  Zug  6343
+				CH
+
+50-3F-98   (hex)		CMITECH
+503F98     (base 16)		CMITECH
+				904-ho, 25, Simin-daero 248beon-gil, Dongan-gu
+				Anyang-si  Gyeonggi-do  14067
+				KR
+
+78-20-79   (hex)		ID Tech
+782079     (base 16)		ID Tech
+				10721 Walker St
+				Cypress  CA  90630
+				US
+
+0C-60-76   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+0C6076     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+0C-EE-E6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+0CEEE6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+E4-D5-3D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+E4D53D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C0-14-3D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+C0143D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C0-18-85   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+C01885     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-74-9C   (hex)		Ruijie Networks Co.,LTD
+00749C     (base 16)		Ruijie Networks Co.,LTD
+				19# Building,Star-net Science Plaza,Juyuanzhou, 618 Jinshan Road
+				Fuzhou  Fujian  350002
+				CN
+
+58-94-CF   (hex)		Vertex Standard LMR, Inc.
+5894CF     (base 16)		Vertex Standard LMR, Inc.
+				4-8-8 Nakameguro 
+				Meguro-ku   Tokyo  153-8644
+				JP
+
+20-F8-5E   (hex)		Delta Electronics
+20F85E     (base 16)		Delta Electronics
+				252 Shangying Road
+				Taoyuan County  Taiwan  33341
+				TW
+
+78-25-AD   (hex)		Samsung Electronics Co.,Ltd
+7825AD     (base 16)		Samsung Electronics Co.,Ltd
+				416, MAETAN-3DONG, PALDAL-GU
+				SUWON CITY  KYUNGKI-DO  442-742
+				KR
+
+EC-E0-9B   (hex)		Samsung Electronics Co.,Ltd
+ECE09B     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu,
+				Suwon-City  Gyeonggi-do  443-742
+				KR
+
+00-23-E4   (hex)		IPnect co. ltd.
+0023E4     (base 16)		IPnect co. ltd.
+				808 albatross B/D 237-18
+				Seoul    153-801
+				KR
+
+70-D4-F2   (hex)		RIM
+70D4F2     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+78-D6-F0   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+78D6F0     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				Metan Dong 314, Youngtong Gu
+				Suwon  Kyung-gi Do.  443-743
+				KR
+
+BC-20-A4   (hex)		Samsung Electronics Co.,Ltd
+BC20A4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-D4-2B   (hex)		Samsung Electronics Co.,Ltd
+08D42B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+78-9E-D0   (hex)		Samsung Electronics Co.,Ltd
+789ED0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-C4-E7   (hex)		Samsung Electronics Co.,Ltd
+B0C4E7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-07-98   (hex)		Samsung Electronics Co.,Ltd
+A00798     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-1F-CD   (hex)		Samsung Electronics Co.,Ltd
+001FCD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+38-EC-E4   (hex)		Samsung Electronics Co.,Ltd
+38ECE4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-51-03   (hex)		Samsung Electronics Co.,Ltd
+945103     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-24-90   (hex)		Samsung Electronics Co.,Ltd
+002490     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-23-D7   (hex)		Samsung Electronics Co.,Ltd
+0023D7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-9B-12   (hex)		Samsung Electronics Co.,Ltd
+549B12     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-A1-3E   (hex)		Samsung Electronics Co.,Ltd
+FCA13E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-C6-96   (hex)		Samsung Electronics Co.,Ltd
+24C696     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-D7-71   (hex)		Samsung Electronics Co.,Ltd
+94D771     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E8-4E-84   (hex)		Samsung Electronics Co.,Ltd
+E84E84     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-16-32   (hex)		Samsung Electronics Co.,Ltd
+001632     (base 16)		Samsung Electronics Co.,Ltd
+				416, METAN-3DONG,
+				SUWON  KYUNGKI-DO  442-742
+				KR
+
+E4-E0-C5   (hex)		Samsung Electronics Co.,Ltd
+E4E0C5     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu
+				Suwon  Gyeonggi-do  443742
+				KR
+
+C8-14-79   (hex)		Samsung Electronics Co.,Ltd
+C81479     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-AF-05   (hex)		Samsung Electronics Co.,Ltd
+1CAF05     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-16-DB   (hex)		Samsung Electronics Co.,Ltd
+0016DB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1
+				Gumi-City  Gyeong-Buk  730-350
+				KR
+
+00-1E-E2   (hex)		Samsung Electronics Co.,Ltd
+001EE2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+20-D5-BF   (hex)		Samsung Electronics Co.,Ltd
+20D5BF     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3dong, Yeongtong-Gu
+				Suwon  Gyeonggi-Do  443742
+				KR
+
+5C-E8-EB   (hex)		Samsung Electronics Co.,Ltd
+5CE8EB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C0-BD-D1   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+C0BDD1     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+B4-79-A7   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+B479A7     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+7C-11-CB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C11CB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-25-E1   (hex)		China Mobile IOT Company Limited
+1C25E1     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+C0-F6-36   (hex)		Hangzhou Kuaiyue Technologies, Ltd.
+C0F636     (base 16)		Hangzhou Kuaiyue Technologies, Ltd.
+				Dongguan Hitech Park, Building 1-805, 288 Qiuyi Rd, Bingjiang District
+				Hangzhou  Zhejiang  310053
+				CN
+
+00-1A-22   (hex)		eQ-3 Entwicklung GmbH
+001A22     (base 16)		eQ-3 Entwicklung GmbH
+				Maiburger Str. 36
+				Leer  Niedersachsen  D-26789
+				DE
+
+B0-DF-3A   (hex)		Samsung Electronics Co.,Ltd
+B0DF3A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-57-19   (hex)		Samsung Electronics Co.,Ltd
+805719     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-BE-00   (hex)		Samsung Electronics Co.,Ltd
+34BE00     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-E2-E0   (hex)		ARRIS Group, Inc.
+54E2E0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+34-7A-60   (hex)		ARRIS Group, Inc.
+347A60     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1C-C3   (hex)		ARRIS Group, Inc.
+001CC3     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+24-0D-C2   (hex)		TCT mobile ltd
+240DC2     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+78-52-1A   (hex)		Samsung Electronics Co.,Ltd
+78521A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+70-85-C6   (hex)		ARRIS Group, Inc.
+7085C6     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+20-BB-C6   (hex)		Jabil Circuit Hungary Ltd.
+20BBC6     (base 16)		Jabil Circuit Hungary Ltd.
+				Huszár Andor 1.
+				Tiszaújváros    H-3580
+				HU
+
+04-FE-A1   (hex)		Fihonest communication co.,Ltd
+04FEA1     (base 16)		Fihonest communication co.,Ltd
+				Room902,Park road,Zhixing business-building
+				Dongguan  Guangdong  523560
+				CN
+
+EC-8C-A2   (hex)		Ruckus Wireless
+EC8CA2     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+B8-00-18   (hex)		Htel
+B80018     (base 16)		Htel
+				Dunchon-dearo, Jungwon-gu
+				Seongnam-si  Gyeonggi-do  13229
+				KR
+
+74-72-B0   (hex)		Guangzhou Shiyuan Electronics Co., Ltd. 
+7472B0     (base 16)		Guangzhou Shiyuan Electronics Co., Ltd. 
+				No.6, 4th Yunpu Road, Yunpu Industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+54-6C-0E   (hex)		Texas Instruments
+546C0E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+EC-8E-AE   (hex)		Nagravision SA
+EC8EAE     (base 16)		Nagravision SA
+				Route de Geneve 22-24, PO 7980
+				Cheseaux  Vaud  1033
+				CH
+
+A0-43-DB   (hex)		Sitael S.p.A.
+A043DB     (base 16)		Sitael S.p.A.
+				Via San Sabino, 21
+				Mola di Bari  BA  70042
+				IT
+
+E0-E7-BB   (hex)		Nureva, Inc.
+E0E7BB     (base 16)		Nureva, Inc.
+				1000, 1221 8th Street SW
+				Calgary  AB  T2R 0L4
+				CA
+
+00-10-87   (hex)		XSTREAMIS PLC
+001087     (base 16)		XSTREAMIS PLC
+				OXFORD SCIENCE PARK
+				OXFORD 0X4 4GA    00000
+				US
+
+00-B0-B3   (hex)		XSTREAMIS PLC
+00B0B3     (base 16)		XSTREAMIS PLC
+				Magdalen Centre
+				Oxford 0X4 4GA    0000
+				GB
+
+04-9F-CA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+049FCA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-01-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+50016B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-48-2D   (hex)		Ralinwi Nanjing Electronic Technology Co., Ltd.
+AC482D     (base 16)		Ralinwi Nanjing Electronic Technology Co., Ltd.
+				3rd Floor, Building B,R&D Block 3, Xuzhuang Software Park, No. 699-27, Xuanwu Avenue
+				Nanjing  Jiangsu  210046
+				CN
+
+00-23-63   (hex)		Zhuhai Raysharp Technology Co.,Ltd
+002363     (base 16)		Zhuhai Raysharp Technology Co.,Ltd
+				No.119 of Huawei Road, Qianshan Science & Technology Park,
+				Zhuhai  Guangdong  519070
+				CN
+
+00-00-1B   (hex)		Novell, Inc.
+00001B     (base 16)		Novell, Inc.
+				122 EAST 1700 SOUTH
+				PROVO  UT  84606
+				US
+
+00-90-58   (hex)		Ultra Electronics Command & Control Systems
+009058     (base 16)		Ultra Electronics Command & Control Systems
+				Knaves Beech Business Centre
+				Hemel Hemstead  Herts England  HP2 7BW
+				GB
+
+00-1C-FD   (hex)		Universal Electronics, Inc.
+001CFD     (base 16)		Universal Electronics, Inc.
+				6101 Gateway Drive
+				Cypress    90630
+				US
+
+08-00-87   (hex)		Xyplex, Inc.
+080087     (base 16)		Xyplex, Inc.
+				295 FOSTER STREET
+				LITTLETON  MA  01460
+				US
+
+DC-1A-01   (hex)		Ecoliv Technology ( Shenzhen ) Ltd.
+DC1A01     (base 16)		Ecoliv Technology ( Shenzhen ) Ltd.
+				B-734, Tianhui building, Longhua Street, Pine Road, Longhua District
+				Shenzhen  Guangdong  518109
+				CN
+
+00-54-9F   (hex)		Avaya Inc
+00549F     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+28-24-FF   (hex)		Wistron Neweb Corporation
+2824FF     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+38-25-6B   (hex)		Microsoft Mobile Oy
+38256B     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				Espoo    02150
+				FI
+
+00-1C-EF   (hex)		Primax Electronics Ltd.
+001CEF     (base 16)		Primax Electronics Ltd.
+				669, Ruey Kuang Road, Neihu
+				Taipei    114
+				TW
+
+00-02-76   (hex)		Primax Electronics Ltd.
+000276     (base 16)		Primax Electronics Ltd.
+				No. 669, Ruey Kuang Road, Neihu
+				Taipei  Taiwan,  R.O.C.
+				TW
+
+4C-B2-1C   (hex)		Maxphotonics Co.,Ltd
+4CB21C     (base 16)		Maxphotonics Co.,Ltd
+				Maxphotonics Industrial Park,Third Furong Road,Furong Industrial Area,Shajing,BaoAn
+				ShenZhen  GuangDong  518125
+				CN
+
+20-5E-F7   (hex)		Samsung Electronics Co.,Ltd
+205EF7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-1F-78   (hex)		Samsung Electronics Co.,Ltd
+141F78     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D8-47-10   (hex)		Sichuan Changhong Electric Ltd.
+D84710     (base 16)		Sichuan Changhong Electric Ltd.
+				35 East Mianxing Road,High-Tech Park,
+				MianYang  SiChuan  621000
+				CN
+
+00-19-72   (hex)		Plexus (Xiamen) Co.,ltd.
+001972     (base 16)		Plexus (Xiamen) Co.,ltd.
+				No.6 Xiangxing 2 Road
+				Xiamen  Fujian  361006
+				CN
+
+00-23-47   (hex)		ProCurve Networking by HP
+002347     (base 16)		ProCurve Networking by HP
+				60 Alexandra Terrace
+				0000    118502
+				SG
+
+00-24-A8   (hex)		ProCurve Networking by HP
+0024A8     (base 16)		ProCurve Networking by HP
+				60 Alexandra Terrace
+				0000    118502
+				SG
+
+C0-91-34   (hex)		ProCurve Networking by HP
+C09134     (base 16)		ProCurve Networking by HP
+				60 Alexandra Terrace
+				0000    118502
+				SG
+
+00-19-69   (hex)		Nortel Networks
+001969     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-18-B0   (hex)		Nortel Networks
+0018B0     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-16-CA   (hex)		Nortel Networks
+0016CA     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-0F-CD   (hex)		Nortel Networks
+000FCD     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1B-BA   (hex)		Nortel Networks
+001BBA     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-04-DC   (hex)		Nortel Networks
+0004DC     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-0C-F7   (hex)		Nortel Networks
+000CF7     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-14-0E   (hex)		Nortel Networks
+00140E     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1E-1F   (hex)		Nortel Networks
+001E1F     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+20-3A-EF   (hex)		Sivantos GmbH
+203AEF     (base 16)		Sivantos GmbH
+				Henri-Dunant-Strasse 100
+				Erlangen  Bavaria  91058
+				DE
+
+00-59-79   (hex)		Networked Energy Services
+005979     (base 16)		Networked Energy Services
+				5215 Hellyer Avenue
+				San Jose  CA  95138
+				US
+
+20-7C-8F   (hex)		Quanta Microsystems,Inc.
+207C8F     (base 16)		Quanta Microsystems,Inc.
+				No.5 Lane 91,Dongmei Rd.
+				Hsinchu    300
+				TW
+
+00-0B-34   (hex)		ShangHai Broadband Technologies CO.LTD
+000B34     (base 16)		ShangHai Broadband Technologies CO.LTD
+				17F,No.122,HuangXing Road
+				ShangHai    200090
+				CN
+
+74-B5-7E   (hex)		zte corporation
+74B57E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+B8-BB-23   (hex)		Guangdong Nufront CSC Co., Ltd
+B8BB23     (base 16)		Guangdong Nufront CSC Co., Ltd
+				A403-414, Building 13, No.232 Waihuan East Road, Higher           Education Mega Center, Guangdong 510006, China
+				Guangzhou  Guangdong  510006
+				CN
+
+34-EA-34   (hex)		HangZhou Gubei Electronics Technology Co.,Ltd
+34EA34     (base 16)		HangZhou Gubei Electronics Technology Co.,Ltd
+				Room 106, No.611 Jianghong Road, Binjiang District, Hangzhou, Zhejiang, China
+				Hangzhou  ZheJiang  310052
+				CN
+
+30-92-F6   (hex)		SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
+3092F6     (base 16)		SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
+				Suite 604-605,Xing Yuan Technology Plaza 
+				00000  ShangHai  200233
+				CN
+
+A8-AD-3D   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+A8AD3D     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+24-AF-4A   (hex)		Alcatel-Lucent IPD
+24AF4A     (base 16)		Alcatel-Lucent IPD
+				701 E. Middlefield Rd.
+				Mountain View  CA  94043
+				US
+
+7C-20-64   (hex)		Alcatel-Lucent IPD
+7C2064     (base 16)		Alcatel-Lucent IPD
+				600 March Drive
+				Kanata  Ontario  K2K2E6
+				CA
+
+44-DC-91   (hex)		PLANEX COMMUNICATIONS INC.
+44DC91     (base 16)		PLANEX COMMUNICATIONS INC.
+				2F F-NISSAY Ebisu Bldg 3-16-3 Higashi, 
+				Shibuya-ku  Tokyo  150-0011
+				JP
+
+E0-9D-B8   (hex)		PLANEX COMMUNICATIONS INC.
+E09DB8     (base 16)		PLANEX COMMUNICATIONS INC.
+				Planex Volta Bldg., 2-11-9 Ebisu-Nishi,Shibuya-ku,
+				00000    1500021
+				US
+
+00-0F-59   (hex)		Phonak AG
+000F59     (base 16)		Phonak AG
+				Länggasse 17
+				Murten  FR  3280
+				CH
+
+00-14-78   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+001478     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				3/F,Bldg.R1-B,Hi-tech Industrial Park,
+				ShenZhen  GuangDong  518057
+				CN
+
+48-F8-E1   (hex)		Nokia
+48F8E1     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+8C-90-D3   (hex)		Nokia
+8C90D3     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-28-F8   (hex)		Intel Corporate
+0028F8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+58-BC-8F   (hex)		Cognitive Systems Corp.
+58BC8F     (base 16)		Cognitive Systems Corp.
+				560 Westmount Road North
+				Waterloo  Ontario  N2L 0A9
+				CA
+
+D4-55-BE   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+D455BE     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+64-0D-CE   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+640DCE     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+54-D2-72   (hex)		Nuki Home Solutions GmbH
+54D272     (base 16)		Nuki Home Solutions GmbH
+				Muenzgrabenstrasse 92
+				Graz    8010
+				AT
+
+EC-26-FB   (hex)		TECC CO.,LTD.
+EC26FB     (base 16)		TECC CO.,LTD.
+				Guam-ro 15-gil, Buk-gu
+				Daegu    720-849
+				KR
+
+00-20-F4   (hex)		SPECTRIX CORPORATION
+0020F4     (base 16)		SPECTRIX CORPORATION
+				106 WILMOT ROAD, SUITE 250
+				DEERFIELD  IL  60015-5150
+				US
+
+04-EE-91   (hex)		x-fabric GmbH
+04EE91     (base 16)		x-fabric GmbH
+				Nachodstraße 7
+				Berlin    10779
+				DE
+
+B4-74-43   (hex)		Samsung Electronics Co.,Ltd
+B47443     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-F6-47   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+FCF647     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+18-68-6A   (hex)		zte corporation
+18686A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C4-4B-D1   (hex)		Wallys Communications  Teachnologies Co.,Ltd.
+C44BD1     (base 16)		Wallys Communications  Teachnologies Co.,Ltd.
+				5-207, DongHong Pioneer Park, #99 YangYu Lane,
+				SuZhou  JiangSu  215000
+				CN
+
+6C-B9-C5   (hex)		Delta Networks, Inc.
+6CB9C5     (base 16)		Delta Networks, Inc.
+				256 Yang Guang Street, Neihu
+				Taipei  Taiwan  11491
+				TW
+
+30-76-6F   (hex)		LG Electronics (Mobile Communications)
+30766F     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+A8-92-2C   (hex)		LG Electronics (Mobile Communications)
+A8922C     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+F8-0C-F3   (hex)		LG Electronics (Mobile Communications)
+F80CF3     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+C4-9A-02   (hex)		LG Electronics (Mobile Communications)
+C49A02     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-1F-6B   (hex)		LG Electronics (Mobile Communications)
+001F6B     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-26-E2   (hex)		LG Electronics (Mobile Communications)
+0026E2     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+DC-44-27   (hex)		IEEE Registration Authority
+DC4427     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+BC-34-00   (hex)		IEEE Registration Authority
+BC3400     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E8-88-6C   (hex)		Shenzhen SC Technologies Co.,LTD
+E8886C     (base 16)		Shenzhen SC Technologies Co.,LTD
+				4/FL,2Block,LianChuang Industrial Park,Bulan Road,Longgang
+				Shenzhen   Guangdong Province  518112
+				CN
+
+00-24-FF   (hex)		QLogic Corporation
+0024FF     (base 16)		QLogic Corporation
+				26650 Aliso Viejo Parkway
+				Aliso Viejo  CA  92656
+				US
+
+00-1E-21   (hex)		Qisda Corporation
+001E21     (base 16)		Qisda Corporation
+				157 Shan-Ying Road, Gueishan
+				Taoyuan    333
+				TW
+
+00-03-9D   (hex)		Qisda Corporation
+00039D     (base 16)		Qisda Corporation
+				157 Shan Ying Road
+				GueiShan  Taoyuan  333
+				TW
+
+00-08-0D   (hex)		Toshiba
+00080D     (base 16)		Toshiba
+				2-9, Suehiro-cho,
+				Tokyo    198-8710
+				JP
+
+00-0E-7B   (hex)		Toshiba
+000E7B     (base 16)		Toshiba
+				2-9, Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+00-03-B2   (hex)		Radware
+0003B2     (base 16)		Radware
+				8 Hamrpe Hochvim
+				000    0000
+				IL
+
+00-A0-C6   (hex)		Qualcomm Inc.
+00A0C6     (base 16)		Qualcomm Inc.
+				6455 LUSK BLVD
+				SAN DIEGO  CA  92121
+				US
+
+64-9C-81   (hex)		Qualcomm Inc.
+649C81     (base 16)		Qualcomm Inc.
+				5665 Morehouse Drive
+				San Diego  CA  92071
+				US
+
+00-1A-6A   (hex)		Tranzas, Inc.
+001A6A     (base 16)		Tranzas, Inc.
+				Queens tower C17
+				Yokohama  Kanagawa-ken  220-6217
+				JP
+
+A4-71-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A47174     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-CB-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4CB52     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-08-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B808D7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-61-1E   (hex)		Wata Electronics Co.,Ltd. 
+94611E     (base 16)		Wata Electronics Co.,Ltd. 
+				No 142,South Tanshen Road, Tanzhou Town,Zhongshan City,Guangdong,China
+				Zhongshan  Guangdong  528467
+				CN
+
+00-C0-E4   (hex)		SIEMENS BUILDING
+00C0E4     (base 16)		SIEMENS BUILDING
+				TECHNOLOGIES, INC.
+				BUFFALO GROVE  IL  60089
+				US
+
+00-0D-10   (hex)		Embedtronics Oy
+000D10     (base 16)		Embedtronics Oy
+				Leväsentie 23
+				Kuopio    70780
+				FI
+
+00-1F-A8   (hex)		Smart Energy Instruments Inc.
+001FA8     (base 16)		Smart Energy Instruments Inc.
+				297 Lakeshore Road East
+				Oakville  Ontario  L6J 1J3
+				CA
+
+00-0F-DB   (hex)		Westell Technologies Inc.
+000FDB     (base 16)		Westell Technologies Inc.
+				750 N Commons Dr
+				Aurora  IL  60504
+				US
+
+3C-07-71   (hex)		Sony Corporation
+3C0771     (base 16)		Sony Corporation
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+80-41-4E   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+80414E     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
+				Dong Guan   Guang Dong  523860
+				CN
+
+24-94-42   (hex)		OPEN ROAD SOLUTIONS , INC.
+249442     (base 16)		OPEN ROAD SOLUTIONS , INC.
+				88-13 SHUILI  ROAD
+				HSINCHU    30059
+				TW
+
+C4-64-13   (hex)		Cisco Systems, Inc
+C46413     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-10-CA   (hex)		Telco Systems, Inc. 
+0010CA     (base 16)		Telco Systems, Inc. 
+				15 Berkshire Road
+				Mansfield,  MA  02048
+				US
+
+00-E0-9E   (hex)		Quantum Corporation
+00E09E     (base 16)		Quantum Corporation
+				500 McCarthy Boulevard
+				Milpitas  CA  95035
+				US
+
+20-6A-8A   (hex)		Wistron Infocomm (Zhongshan) Corporation
+206A8A     (base 16)		Wistron Infocomm (Zhongshan) Corporation
+				168# First Avenue,Kunshan Export Processing Zone
+				Kunshan  Jiangsu  215300
+				CN
+
+78-44-76   (hex)		Zioncom Electronics (Shenzhen) Ltd.
+784476     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
+				A1&A2 building,lantian technology park, xinyu road, xingqiao henggang block, shajing street, Baoan District
+				shenzhen  guangdong  518000
+				CN
+
+00-11-65   (hex)		ZNYX Networks, Inc.
+001165     (base 16)		ZNYX Networks, Inc.
+				48421 Milmont Drive
+				Fremont  CA  94538
+				US
+
+00-0A-68   (hex)		Solarflare Communications Inc.
+000A68     (base 16)		Solarflare Communications Inc.
+				Suite 100, 7505 Irvine Center Drive
+				Irvine  CA  92618
+				US
+
+00-21-86   (hex)		Universal Global Scientific Industrial Co., Ltd.
+002186     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Sec.1, Taiping Road,
+				NANTOU    54261
+				TW
+
+18-39-19   (hex)		Unicoi Systems
+183919     (base 16)		Unicoi Systems
+				410 Peachtree Pkwy
+				Cumming  GA  30041
+				US
+
+E8-E0-B7   (hex)		Toshiba
+E8E0B7     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+68-07-15   (hex)		Intel Corporate
+680715     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+3C-B6-B7   (hex)		vivo Mobile Communication Co., Ltd.
+3CB6B7     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong  523860
+				CN
+
+C4-27-95   (hex)		Technicolor CH USA Inc.
+C42795     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+A0-20-A6   (hex)		Espressif Inc.
+A020A6     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+58-52-8A   (hex)		Mitsubishi Electric Corporation
+58528A     (base 16)		Mitsubishi Electric Corporation
+				2-7-3 Marunouchi Chiyoda-ku
+				Tokyo    100-8310
+				JP
+
+C4-F1-D1   (hex)		BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.
+C4F1D1     (base 16)		BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.
+				SOHU.COM INTERNET PLAZA, NO.1 PARK, ZHONGGUANCHUN EAST ROAD. HAIDIAN DISTRICT
+				Beijing    100000
+				CN
+
+2C-36-A0   (hex)		Capisco Limited
+2C36A0     (base 16)		Capisco Limited
+				PO Box 938
+				Auckland    0943
+				NZ
+
+B0-B2-DC   (hex)		Zyxel Communications Corporation
+B0B2DC     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+CC-5D-4E   (hex)		Zyxel Communications Corporation
+CC5D4E     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+40-4A-03   (hex)		Zyxel Communications Corporation
+404A03     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+C8-6C-87   (hex)		Zyxel Communications Corporation
+C86C87     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+00-1E-C0   (hex)		Microchip Technology Inc.
+001EC0     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+38-BC-1A   (hex)		MEIZU Technology Co., Ltd.
+38BC1A     (base 16)		MEIZU Technology Co., Ltd.
+				MEIZU Tech Bldg., Technology & Innovation Coast
+				Zhuhai  Guangdong  519085
+				CN
+
+80-29-94   (hex)		Technicolor CH USA Inc.
+802994     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+E0-88-5D   (hex)		Technicolor CH USA Inc.
+E0885D     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+34-0A-FF   (hex)		Qingdao Hisense Communications Co.,Ltd.
+340AFF     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+58-7E-61   (hex)		Qingdao Hisense Communications Co.,Ltd.
+587E61     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+C0-A1-A2   (hex)		MarqMetrix
+C0A1A2     (base 16)		MarqMetrix
+				410 West Harrison ST #200
+				Seattle  WA  98119
+				US
+
+08-D0-B7   (hex)		Qingdao Hisense Communications Co.,Ltd.
+08D0B7     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+EC-D6-8A   (hex)		Shenzhen JMicron Intelligent Technology Developmen
+ECD68A     (base 16)		Shenzhen JMicron Intelligent Technology Developmen
+				Futian District, 13th Floor , Block B Building Tai
+				Shenzhen  Guangdong Province  518040
+				CN
+
+50-52-D2   (hex)		Hangzhou Telin Technologies Co., Limited
+5052D2     (base 16)		Hangzhou Telin Technologies Co., Limited
+				8 floor,D Building,Paradise Software Park,No. 3 Xidoumen Road, Xihu District, Hangzhou
+				Hangzhou  Zhejiang  310013
+				CN
+
+90-EE-D9   (hex)		UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA
+90EED9     (base 16)		UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA
+				CRTA DE CASTELLAR, 298
+				TERRASSA  BARCELONA  08226
+				ES
+
+60-64-53   (hex)		AOD Co.,Ltd.
+606453     (base 16)		AOD Co.,Ltd.
+				No. 13155, Yuqing Street, High-Technology Development Zone,
+				Weifang  Shandong  261061
+				CN
+
+00-9E-1E   (hex)		Cisco Systems, Inc
+009E1E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-25-3E   (hex)		Sensus Metering Systems
+00253E     (base 16)		Sensus Metering Systems
+				10147 W. Emerald Street
+				Boise  Idaho  83704
+				US
+
+C8-AF-E3   (hex)		Hefei Radio Communication Technology Co., Ltd 
+C8AFE3     (base 16)		Hefei Radio Communication Technology Co., Ltd 
+				 No.108, YinXing Road, High-tech Development Zone 
+				Hefei  Anhui  230088
+				CN
+
+7C-57-4E   (hex)		COBI GmbH
+7C574E     (base 16)		COBI GmbH
+				Solmsstrasse 4
+				Frankfurt am Main    60486
+				DE
+
+28-F1-0E   (hex)		Dell Inc.
+28F10E     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+04-56-04   (hex)		Gionee Communication Equipment Co.,Ltd.
+045604     (base 16)		Gionee Communication Equipment Co.,Ltd.
+				21/F,Times Technology Building,No. 7028,Shennan Avenue,Futian District
+				Shenzhen    518000
+				CN
+
+34-C0-F9   (hex)		Rockwell Automation
+34C0F9     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+00-FE-C8   (hex)		Cisco Systems, Inc
+00FEC8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-5A-8D   (hex)		SYSTRONIK Elektronik u. Systemtechnik GmbH
+2C5A8D     (base 16)		SYSTRONIK Elektronik u. Systemtechnik GmbH
+				Gewerbestrasse 57
+				ILLMENSEE    88636
+				DE
+
+10-BE-F5   (hex)		D-Link International
+10BEF5     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+E4-7B-3F   (hex)		BEIJING CO-CLOUD TECHNOLOGY LTD.
+E47B3F     (base 16)		BEIJING CO-CLOUD TECHNOLOGY LTD.
+				903 Room，Power Create E ，No.1 Shangdi East Road
+				Beijing  Beijing  100085
+				CN
+
+0C-8A-87   (hex)		AgLogica Holdings, Inc
+0C8A87     (base 16)		AgLogica Holdings, Inc
+				333 Research Ct NW Ste 230
+				Norcross  GA  30092
+				US
+
+54-ED-A3   (hex)		Navdy, Inc.
+54EDA3     (base 16)		Navdy, Inc.
+				575 7th Street
+				San Francisco  CA  94103
+				US
+
+34-A2-A2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+34A2A2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-9D-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+749D8F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-59-07   (hex)		Shanghai HITE-BELDEN Network Technology Co., Ltd.
+945907     (base 16)		Shanghai HITE-BELDEN Network Technology Co., Ltd.
+				No. 777, Xinjun Ring Road, Pujiang Hi-Tech Park, Minhang District
+				Shanghai  Shanghai  201114
+				CN
+
+00-16-FB   (hex)		SHENZHEN MTC CO LTD
+0016FB     (base 16)		SHENZHEN MTC CO LTD
+				5/F BenYuan Bldg,6015 ShenNan Road
+				ShenZhen  GuangDong  518040
+				CN
+
+A0-41-5E   (hex)		Opsens Solution Inc.
+A0415E     (base 16)		Opsens Solution Inc.
+				2014 rue Cyrille-Duquet, suite 125
+				Quebec  QC  G1N 4N6
+				CA
+
+A8-60-B6   (hex)		Apple, Inc.
+A860B6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-B3-01   (hex)		Apple, Inc.
+C4B301     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-5F-45   (hex)		Apple, Inc.
+E05F45     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-CC-39   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+74CC39     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+38-22-D6   (hex)		Hangzhou H3C Technologies Co., Limited
+3822D6     (base 16)		Hangzhou H3C Technologies Co., Limited
+				310 Liuhe Road, Zhijiang Science Park
+				Hangzhou  Zhejiang,   310053
+				CN
+
+94-E8-C5   (hex)		ARRIS Group, Inc.
+94E8C5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+6C-3B-6B   (hex)		Routerboard.com
+6C3B6B     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+00-22-E7   (hex)		WPS Parking Systems
+0022E7     (base 16)		WPS Parking Systems
+				Hoevenweg 11
+				Eindhoven  Noord-Brabant  5652 AW
+				NL
+
+48-51-B7   (hex)		Intel Corporate
+4851B7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+B8-E7-79   (hex)		9Solutions Oy
+B8E779     (base 16)		9Solutions Oy
+				Teknologiantie 2
+				Oulu    90590
+				FI
+
+C8-64-C7   (hex)		zte corporation
+C864C7     (base 16)		zte corporation
+				12/F.,zte R&D building,kejinan Road,
+				shenzhen  guangdong  518057
+				CN
+
+48-3B-38   (hex)		Apple, Inc.
+483B38     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-91-48   (hex)		Apple, Inc.
+1C9148     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-5F-2E   (hex)		TCT mobile ltd
+905F2E     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+F8-23-B2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F823B2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-12-90   (hex)		Treeview Co.,Ltd.
+341290     (base 16)		Treeview Co.,Ltd.
+				106/29 BANGLAMUNG
+				BANGLAMUNG  CHONBURI  20150
+				TH
+
+7C-FE-4E   (hex)		Shenzhen Safe vision Technology Co.,LTD
+7CFE4E     (base 16)		Shenzhen Safe vision Technology Co.,LTD
+				Shenzhen ring view south road and 27 digital dragon industrial park industrial zone
+				shenzhen  Guangdong province  518110
+				CN
+
+64-4F-B0   (hex)		Hyunjin.com
+644FB0     (base 16)		Hyunjin.com
+				 Hyochang-dong 5-86, Yongsan-gu
+				Seoul    140-896
+				KR
+
+00-E0-E6   (hex)		INCAA Computers
+00E0E6     (base 16)		INCAA Computers
+				P.O. BOX 211
+				7300 AE APELDOORN    na
+				NL
+
+28-F3-66   (hex)		Shenzhen Bilian electronic CO.,LTD
+28F366     (base 16)		Shenzhen Bilian electronic CO.,LTD
+				NO 268，Fuqian Rd,Jutang Community,Guanlan town , LongHua new district,Shenzhen,518110,China.
+				Shenzhen    518110
+				CN
+
+E0-A3-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E0A3AC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-75-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC7574     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-A6-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20A680     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-28-B3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8828B3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-E5-97   (hex)		Gessler GmbH
+A4E597     (base 16)		Gessler GmbH
+				Gutenbergring 14
+				Rodgau    63110
+				DE
+
+00-6C-BC   (hex)		Cisco Systems, Inc
+006CBC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+5C-70-A3   (hex)		LG Electronics (Mobile Communications)
+5C70A3     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-1D-08   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
+001D08     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
+				188 NANHUAN ROAD
+				ZHANGJIAGANG  JIANGSU  215611
+				CN
+
+00-1D-82   (hex)		GN Netcom A/S
+001D82     (base 16)		GN Netcom A/S
+				Lautrupbjerg 7
+				Ballerup    DK - 2750
+				DK
+
+00-13-17   (hex)		GN Netcom A/S
+001317     (base 16)		GN Netcom A/S
+				Metalbuen 66
+				Ballerup  Skovlunde  DK-2750
+				DK
+
+00-A0-A4   (hex)		Oracle Corporation 
+00A0A4     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+74-97-81   (hex)		zte corporation
+749781     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-01-F4   (hex)		Enterasys
+0001F4     (base 16)		Enterasys
+				35 Industrial Way
+				Rochester  NH  03867
+				US
+
+00-10-9B   (hex)		Emulex Corporation
+00109B     (base 16)		Emulex Corporation
+				3333 Susan Street
+				Costa Mesa  CA  92626
+				US
+
+00-14-2A   (hex)		Elitegroup Computer Systems Co.,Ltd.
+00142A     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No.22, Alley 38, Lane 91, Sec. 1,
+				Taipei    114
+				TW
+
+00-11-5B   (hex)		Elitegroup Computer Systems Co.,Ltd.
+00115B     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No.22, Alley 38, Lane 91, Sec. 1, Nei Hu
+				Taipei    114
+				TW
+
+C0-3F-D5   (hex)		Elitegroup Computer Systems Co.,Ltd.
+C03FD5     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No. 239, Sec. 2, Ti-Ding Blvd
+				Taipei    11493
+				TW
+
+EC-A8-6B   (hex)		Elitegroup Computer Systems Co.,Ltd.
+ECA86B     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				NO. 239, Sec. 2, Ti Ding Blvd.
+				Taipei    11493
+				TW
+
+C8-9C-DC   (hex)		Elitegroup Computer Systems Co.,Ltd.
+C89CDC     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				NO. 239, Sec. 2, Ti Ding Blvd.
+				Taipei    11493
+				TW
+
+00-25-11   (hex)		Elitegroup Computer Systems Co.,Ltd.
+002511     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				NO. 239, Sec. 2, Ti Ding Blvd.
+				Taipei  Taiwan  11493
+				TW
+
+44-87-FC   (hex)		Elitegroup Computer Systems Co.,Ltd.
+4487FC     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				NO. 239, Sec. 2, Ti Ding Blvd.
+				Taipei  Taiwan  11493
+				TW
+
+A8-6B-AD   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+A86BAD     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+D8-0F-99   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+D80F99     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+B4-B1-5A   (hex)		Siemens AG Energy Management Division
+B4B15A     (base 16)		Siemens AG Energy Management Division
+				Humboldtstr. 59
+				Nurnberg  Bavaria  90459
+				DE
+
+00-24-65   (hex)		Elentec
+002465     (base 16)		Elentec
+				401-13 Chunggye-Ri,Dongtan-Myun
+				Hwasung  Kyunggi  445-811
+				KR
+
+00-08-9F   (hex)		EFM Networks
+00089F     (base 16)		EFM Networks
+				403, 4th floor Elegance 1 Bldg.
+				Sungnam-si  Kyunggi-do  463-808
+				KR
+
+00-50-FC   (hex)		Edimax Technology Co. Ltd.
+0050FC     (base 16)		Edimax Technology Co. Ltd.
+				No. 278, Xinhu 1st Road
+				Taipei City  Neihu Dist  248
+				TW
+
+9C-DF-03   (hex)		Harman/Becker Automotive Systems GmbH
+9CDF03     (base 16)		Harman/Becker Automotive Systems GmbH
+				Becker-Göring-Straße 16
+				Karlsbad  Baden-Württemberg  76307
+				DE
+
+00-11-88   (hex)		Enterasys
+001188     (base 16)		Enterasys
+				35 Industrial Way
+				Rochester  NH  03867
+				US
+
+00-16-FA   (hex)		ECI Telecom Ltd.
+0016FA     (base 16)		ECI Telecom Ltd.
+				30 Hasivim St.
+				Petah Tikva    49133
+				US
+
+F8-A1-88   (hex)		LED Roadway Lighting
+F8A188     (base 16)		LED Roadway Lighting
+				115 Chain Lake Dr.
+				Halifax  NS  B3S 1B3
+				CA
+
+A0-82-AC   (hex)		Linear DMS Solutions Sdn. Bhd.
+A082AC     (base 16)		Linear DMS Solutions Sdn. Bhd.
+				135, Jalan Utara
+				PENANG  Pulau Pinang  11700
+				MY
+
+A8-6A-C1   (hex)		HanbitEDS Co., Ltd.
+A86AC1     (base 16)		HanbitEDS Co., Ltd.
+				44-10, Techno 10-ro, Yuseong-gu
+				Daejeon  Daejeon  34027
+				KR
+
+D4-63-FE   (hex)		Arcadyan Corporation
+D463FE     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+68-93-61   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+689361     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+BC-15-AC   (hex)		Vodafone Italia S.p.A.
+BC15AC     (base 16)		Vodafone Italia S.p.A.
+				Via Lorenteggio nr. 240
+				Milan  Italy  20147
+				IT
+
+00-BD-82   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+00BD82     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+94-51-3D   (hex)		iSmart Alarm, Inc.
+94513D     (base 16)		iSmart Alarm, Inc.
+				1290 Kifer Road Suite 306
+				Sunnyvale  CA  94086
+				US
+
+00-11-74   (hex)		 Mojo Networks, Inc.
+001174     (base 16)		 Mojo Networks, Inc.
+				339 N.Bernardo Ave
+				Mountain View  CA  94043
+				US
+
+00-19-54   (hex)		Leaf Corporation.
+001954     (base 16)		Leaf Corporation.
+				Amuze 1F
+				Isehara City  Kanagawa-Pref.  259-1117
+				JP
+
+94-66-E7   (hex)		WOM Engineering
+9466E7     (base 16)		WOM Engineering
+				13F., No. 192, Sec. 2, Zhongxing Rd., Xindian Dist.
+				New Taipei City  Taiwan  231
+				TW
+
+4C-B8-B5   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+4CB8B5     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-85-C2   (hex)		ASRock Incorporation
+7085C2     (base 16)		ASRock Incorporation
+				2F., No. 37, Sec. 2, Jhongyang S. Rd., Beitou District,
+				Taipei    112
+				TW
+
+EC-93-ED   (hex)		DDoS-Guard LTD
+EC93ED     (base 16)		DDoS-Guard LTD
+				goroda Volos, 6, 904
+				Rostov-on-Don    344010
+				RU
+
+30-FC-68   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+30FC68     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-8A-96   (hex)		Cisco Systems, Inc
+008A96     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-60-A7   (hex)		Sony Interactive Entertainment Inc.
+BC60A7     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+80-8C-97   (hex)		Kaonmedia CO., LTD.
+808C97     (base 16)		Kaonmedia CO., LTD.
+				884-3, Seongnam-daero, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13517
+				KR
+
+DC-EE-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DCEE06     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-52-C7   (hex)		Bose Corporation
+0452C7     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+F0-27-45   (hex)		F-Secure Corporation
+F02745     (base 16)		F-Secure Corporation
+				Tammasaarenkatu 7
+				Helsinki    00181
+				FI
+
+54-D0-B4   (hex)		Xiamen Four-Faith Communication Technology Co.,Ltd
+54D0B4     (base 16)		Xiamen Four-Faith Communication Technology Co.,Ltd
+				3rd Floor,No,44,GuanRi Road,Software Park,XiaMen
+				XiaMen  Fujian  361000
+				CN
+
+00-13-7C   (hex)		Kaicom co., Ltd.
+00137C     (base 16)		Kaicom co., Ltd.
+				#109, Gayang Techno Town 1487, Gayang-dong,Kangso-gu
+				Seoul    157-810
+				KR
+
+E8-56-59   (hex)		Advanced-Connectek Inc.
+E85659     (base 16)		Advanced-Connectek Inc.
+				No. 2,Alley 9, Lane 45, Baoxing Rd., Xiadian Dist.,
+				New Taipei City    231
+				TW
+
+34-BF-90   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+34BF90     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+CC-B3-F8   (hex)		FUJITSU ISOTEC LIMITED
+CCB3F8     (base 16)		FUJITSU ISOTEC LIMITED
+				135,Higashinozaki,Hobara-machi,
+				Date-shi  Fukushima  960-0695
+				JP
+
+E4-A4-71   (hex)		Intel Corporate
+E4A471     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+10-F0-05   (hex)		Intel Corporate
+10F005     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+64-CC-2E   (hex)		Xiaomi Communications Co Ltd
+64CC2E     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+88-01-F2   (hex)		Vitec System Engineering Inc.
+8801F2     (base 16)		Vitec System Engineering Inc.
+				203203 Kita-shinagawa
+				Shinagawa-ku  Tokyo  140-0001
+				JP
+
+14-D1-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14D11F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+DC-09-4C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DC094C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-67-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C6758     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-BC-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24BCF8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-04-3E   (hex)		Parker Hannifin Manufacturing Germany GmbH & Co. KG
+A0043E     (base 16)		Parker Hannifin Manufacturing Germany GmbH & Co. KG
+				Gutenbergstrasse 38
+				Kaarst  Select State  41564
+				DE
+
+C8-45-29   (hex)		IMK Networks Co.,Ltd
+C84529     (base 16)		IMK Networks Co.,Ltd
+				201-Ho jungribjunja, 16-3bunji, 
+				Seoul    143-816
+				KR
+
+7C-47-7C   (hex)		IEEE Registration Authority
+7C477C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F8-77-B8   (hex)		Samsung Electronics Co.,Ltd
+F877B8     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+F0-D2-F1   (hex)		Amazon Technologies Inc.
+F0D2F1     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+A8-E3-EE   (hex)		Sony Interactive Entertainment Inc.
+A8E3EE     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+00-24-8D   (hex)		Sony Interactive Entertainment Inc.
+00248D     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+00-04-1F   (hex)		Sony Interactive Entertainment Inc.
+00041F     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+20-A9-0E   (hex)		TCT mobile ltd
+20A90E     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+EC-43-8B   (hex)		YAPTV
+EC438B     (base 16)		YAPTV
+				623 GangNamDa-Ro
+				Seocho-Gu  Seoul  06524
+				KR
+
+98-0C-A5   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+980CA5     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+44-11-02   (hex)		EDMI  Europe Ltd
+441102     (base 16)		EDMI  Europe Ltd
+				The Grainger  Suite, Dobson House
+				Newcastle upon Tyne    NE3 3PF
+				GB
+
+A8-5E-E4   (hex)		12Sided Technology, LLC
+A85EE4     (base 16)		12Sided Technology, LLC
+				1 Penn Plaza, 36th Floor
+				New York  NY  10119
+				US
+
+18-21-95   (hex)		Samsung Electronics Co.,Ltd
+182195     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+44-78-3E   (hex)		Samsung Electronics Co.,Ltd
+44783E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-A2-F4   (hex)		Chameleon Technology (UK) Limited
+0CA2F4     (base 16)		Chameleon Technology (UK) Limited
+				Gardner House,  Hornbeam Park Avenue
+				Hornbeam Park  Harrogate  HG2 8NA
+				GB
+
+BC-44-B0   (hex)		Elastifile
+BC44B0     (base 16)		Elastifile
+				Abba Even 8
+				Herzlia    4672526
+				IL
+
+74-BF-B7   (hex)		Nusoft Corporation
+74BFB7     (base 16)		Nusoft Corporation
+				3F.-1, No. 880, Zhongzheng Rd.,
+				Zhonghe Dist., New Taipei City  Taiwan (R.O.C.)   235-86
+				TW
+
+50-DA-00   (hex)		Hangzhou H3C Technologies Co., Limited
+50DA00     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+F4-ED-5F   (hex)		SHENZHEN KTC TECHNOLOGY GROUP 
+F4ED5F     (base 16)		SHENZHEN KTC TECHNOLOGY GROUP 
+				Wuhe Street
+				Shenzhen  Guangdong  518129
+				CN
+
+00-E0-E4   (hex)		FANUC ROBOTICS NORTH AMERICA, Inc.
+00E0E4     (base 16)		FANUC ROBOTICS NORTH AMERICA, Inc.
+				3900 W. HAMLIN RD.
+				ROCHESTER HILLS  MI  48309-3253
+				US
+
+00-08-96   (hex)		Printronix, Inc.
+000896     (base 16)		Printronix, Inc.
+				14600 Myford Rd.
+				Irvine  California  92623-9559
+				US
+
+24-5E-BE   (hex)		QNAP Systems, Inc.
+245EBE     (base 16)		QNAP Systems, Inc.
+				2F., No.22, Zhongxing Rd., Xizhi Dist.
+				New Taipei City    221
+				TW
+
+04-04-EA   (hex)		Valens Semiconductor Ltd.
+0404EA     (base 16)		Valens Semiconductor Ltd.
+				8 Hanagar Street
+				Hod Hasharon  Hod Hasharon  4501309
+				IL
+
+80-0D-D7   (hex)		Latticework, Inc
+800DD7     (base 16)		Latticework, Inc
+				2210 O'Toole Ave, Suite 250
+				San Jose  CA  95131
+				US
+
+D0-B5-3D   (hex)		SEPRO ROBOTIQUE
+D0B53D     (base 16)		SEPRO ROBOTIQUE
+				ZI Acti-Est Les Ajoncs
+				LA ROCHE SUR YON    F85003
+				FR
+
+00-D0-EC   (hex)		NAKAYO Inc
+00D0EC     (base 16)		NAKAYO Inc
+				Development Support Center 165 Higashiomuro-machi
+				Maebashi-shi  Gunma  379-2105
+				JP
+
+4C-CC-6A   (hex)		Micro-Star INTL CO., LTD.
+4CCC6A     (base 16)		Micro-Star INTL CO., LTD.
+				No.69, Lide St.,
+				New Taipei City  Taiwan  235
+				TW
+
+30-63-6B   (hex)		Apple, Inc.
+30636B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-88-4D   (hex)		JAPAN RADIO CO., LTD.
+70884D     (base 16)		JAPAN RADIO CO., LTD.
+				5-1-1 SHIMORENJYAKU,
+				MITAKA-SHI, TOKYO    181-8510
+				JP
+
+A4-F1-E8   (hex)		Apple, Inc.
+A4F1E8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-67-51   (hex)		Compal Broadband Networks, Inc.
+546751     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+24-0B-0A   (hex)		Palo Alto Networks
+240B0A     (base 16)		Palo Alto Networks
+				4401 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+D0-99-D5   (hex)		Alcatel-Lucent
+D099D5     (base 16)		Alcatel-Lucent
+				777 East Middlefield Road
+				Mountain View  CA  94043
+				US
+
+14-C3-C2   (hex)		K.A. Schmersal GmbH & Co. KG
+14C3C2     (base 16)		K.A. Schmersal GmbH & Co. KG
+				Möddinghofe 30
+				Wuppertal  NRW  42279
+				DE
+
+10-78-5B   (hex)		Actiontec Electronics, Inc
+10785B     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+DC-00-77   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+DC0077     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+F4-F5-A5   (hex)		Nokia Corporation
+F4F5A5     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo    24101
+				FI
+
+EC-9B-5B   (hex)		Nokia Corporation
+EC9B5B     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+2C-CC-15   (hex)		Nokia Corporation
+2CCC15     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+14-BB-6E   (hex)		Samsung Electronics Co.,Ltd
+14BB6E     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+18-86-AC   (hex)		Nokia Danmark A/S
+1886AC     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790V
+				DK
+
+00-1F-5C   (hex)		Nokia Danmark A/S
+001F5C     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790V
+				DK
+
+00-1F-00   (hex)		Nokia Danmark A/S
+001F00     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790V
+				DK
+
+00-25-47   (hex)		Nokia Danmark A/S
+002547     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-18-C5   (hex)		Nokia Danmark A/S
+0018C5     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    1790
+				DK
+
+00-16-4E   (hex)		Nokia Danmark A/S
+00164E     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-26-68   (hex)		Nokia Danmark A/S
+002668     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-24-7D   (hex)		Nokia Danmark A/S
+00247D     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-22-65   (hex)		Nokia Danmark A/S
+002265     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+F8-80-96   (hex)		Elsys Equipamentos Eletrônicos Ltda
+F88096     (base 16)		Elsys Equipamentos Eletrônicos Ltda
+				Rod. Visconde de Porto Seguro, n.º 2.660, Sitio Recreio dos Cafezais
+				Valinhos  SP  13278327
+				BR
+
+A8-11-FC   (hex)		ARRIS Group, Inc.
+A811FC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-AA   (hex)		DrayTek Corp.
+001DAA     (base 16)		DrayTek Corp.
+				No. 26, Fu-Shing Road
+				Hsin-Chu    303
+				TW
+
+E4-98-D1   (hex)		Microsoft Mobile Oy
+E498D1     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				ESPOO    02150
+				FI
+
+6C-27-79   (hex)		Microsoft Mobile Oy
+6C2779     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				ESPOO    02150
+				FI
+
+00-CF-1C   (hex)		Communication Machinery Corporation
+00CF1C     (base 16)		Communication Machinery Corporation
+				1226 ANACAPA
+				SANTA BARBARA  CA  93101
+				US
+
+28-CC-01   (hex)		Samsung Electronics Co.,Ltd
+28CC01     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D8-FB-5E   (hex)		ASKEY COMPUTER CORP
+D8FB5E     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+00-23-26   (hex)		FUJITSU LIMITED
+002326     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+0C-BF-15   (hex)		Genetec Inc.
+0CBF15     (base 16)		Genetec Inc.
+				2280 boul Alfred-Nobel
+				St. Laurent  Quebec  H4S 2A4
+				CA
+
+00-0D-4B   (hex)		Roku, Inc.
+000D4B     (base 16)		Roku, Inc.
+				399 Sherman Ave. #12
+				Palo Alto  CA  94306
+				US
+
+00-40-FB   (hex)		CASCADE COMMUNICATIONS
+0040FB     (base 16)		CASCADE COMMUNICATIONS
+				PRODUCTION QUALITY ENGINEER
+				WESTFORD  MA  01886
+				US
+
+D0-54-2D   (hex)		Cambridge Industries(Group) Co.,Ltd.
+D0542D     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				22 Floor,Qilai Tower;889 Yishan Road
+				Shanghai    200233
+				CN
+
+74-4A-A4   (hex)		zte corporation
+744AA4     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-1B-A9   (hex)		Brother industries, LTD.
+001BA9     (base 16)		Brother industries, LTD.
+				Printing & Solutions Company, Development Management Dept.
+				Nagoya  Aichi  467-8561
+				JP
+
+30-A2-20   (hex)		ARG Telecom
+30A220     (base 16)		ARG Telecom
+				No.69, W. Lavasani St. ,
+				Tehran  Tehran  1936938194
+				IR
+
+6C-F3-73   (hex)		Samsung Electronics Co.,Ltd
+6CF373     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-3A-AF   (hex)		Samsung Electronics Co.,Ltd
+9C3AAF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+78-1F-DB   (hex)		Samsung Electronics Co.,Ltd
+781FDB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+4C-A5-6D   (hex)		Samsung Electronics Co.,Ltd
+4CA56D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B8-6C-E8   (hex)		Samsung Electronics Co.,Ltd
+B86CE8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-B3-19   (hex)		Samsung Electronics Co.,Ltd
+0CB319     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-3F-47   (hex)		Samsung Electronics Co.,Ltd
+183F47     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-62-93   (hex)		Samsung Electronics Co.,Ltd
+B46293     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-A4-C8   (hex)		Samsung Electronics Co.,Ltd
+50A4C8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-00-1D   (hex)		Cabletron Systems, Inc.
+00001D     (base 16)		Cabletron Systems, Inc.
+				35 INDUSTRIAL WAY
+				ROCHESTER  NH  03867
+				US
+
+18-67-B0   (hex)		Samsung Electronics Co.,Ltd
+1867B0     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+6C-83-36   (hex)		Samsung Electronics Co.,Ltd
+6C8336     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-D8-7C   (hex)		Beijing Jingdong Century Trading Co., LTD.
+DCD87C     (base 16)		Beijing Jingdong Century Trading Co., LTD.
+				28F,Building A Zhaolin Plaza,NO.19,Ronghua Middle road,BDA Beijing
+				Beijing    100176
+				CN
+
+C4-DA-7D   (hex)		Ivium Technologies B.V.
+C4DA7D     (base 16)		Ivium Technologies B.V.
+				De Zaale 11
+				Eindhoven  Noord Brabant  5612 AJ
+				NL
+
+00-0B-6A   (hex)		Asiarock Technology Limited
+000B6A     (base 16)		Asiarock Technology Limited
+				P.O. Box957, Offshore Incorporations Cen
+				Road Town  Tortola  12345
+				VG
+
+00-90-96   (hex)		ASKEY COMPUTER CORP
+009096     (base 16)		ASKEY COMPUTER CORP
+				2F, NO. 2, LANE 497
+				TAIPEI  23136    12345
+				TW
+
+00-1B-9E   (hex)		ASKEY COMPUTER CORP
+001B9E     (base 16)		ASKEY COMPUTER CORP
+				10F,NO.119,CHIENKANG RD,
+				CHUNG-HO,TPIPEI    235
+				TW
+
+E0-CA-94   (hex)		ASKEY COMPUTER CORP
+E0CA94     (base 16)		ASKEY COMPUTER CORP
+				10F,NO.119,CHIENKANG RD,CHUNG-HO,TAIPEI,
+				TAIWAN  TAIPEI  235
+				TW
+
+00-26-B6   (hex)		ASKEY COMPUTER CORP
+0026B6     (base 16)		ASKEY COMPUTER CORP
+				10F,NO.119,CHIENKANG RD,CHUNG-HO,TAIPEI,
+				TAIWAN  TAIPEI  235
+				TW
+
+00-25-57   (hex)		BlackBerry RTS
+002557     (base 16)		BlackBerry RTS
+				440 Phillip Street
+				Waterloo  Ontario  N2L 5W9
+				CA
+
+00-1C-CC   (hex)		BlackBerry RTS
+001CCC     (base 16)		BlackBerry RTS
+				305 Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+00-30-0A   (hex)		Aztech Electronics Pte Ltd
+00300A     (base 16)		Aztech Electronics Pte Ltd
+				31 UBI ROAD 1
+				singapore    408694
+				SG
+
+00-1F-3F   (hex)		AVM GmbH
+001F3F     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin    10559
+				DE
+
+24-65-11   (hex)		AVM GmbH
+246511     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin    10559
+				DE
+
+C0-FF-D4   (hex)		NETGEAR
+C0FFD4     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+6C-B0-CE   (hex)		NETGEAR
+6CB0CE     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-8E-F2   (hex)		NETGEAR
+008EF2     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+9C-D3-6D   (hex)		NETGEAR
+9CD36D     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+C4-04-15   (hex)		NETGEAR
+C40415     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+E8-FC-AF   (hex)		NETGEAR
+E8FCAF     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+84-1B-5E   (hex)		NETGEAR
+841B5E     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+2C-B0-5D   (hex)		NETGEAR
+2CB05D     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+A0-21-B7   (hex)		NETGEAR
+A021B7     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-24-B2   (hex)		NETGEAR
+0024B2     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-1B-2F   (hex)		NETGEAR
+001B2F     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-26-4D   (hex)		Arcadyan Technology Corporation
+00264D     (base 16)		Arcadyan Technology Corporation
+				4F., No. 9 , Park Avenue II ,
+				Hsinchu  Taiwan  300
+				TW
+
+84-9C-A6   (hex)		Arcadyan Technology Corporation
+849CA6     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+E0-3E-44   (hex)		Broadcom
+E03E44     (base 16)		Broadcom
+				190 Mathilda Place
+				Sunnyvale  CA  94086
+				US
+
+00-1F-33   (hex)		NETGEAR
+001F33     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-20-40   (hex)		ARRIS Group, Inc.
+002040     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+38-6B-BB   (hex)		ARRIS Group, Inc.
+386BBB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E8-6D-52   (hex)		ARRIS Group, Inc.
+E86D52     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+3C-75-4A   (hex)		ARRIS Group, Inc.
+3C754A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E4-83-99   (hex)		ARRIS Group, Inc.
+E48399     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-21-43   (hex)		ARRIS Group, Inc.
+002143     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+74-F6-12   (hex)		ARRIS Group, Inc.
+74F612     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-24-95   (hex)		ARRIS Group, Inc.
+002495     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-24-A0   (hex)		ARRIS Group, Inc.
+0024A0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-08-0E   (hex)		ARRIS Group, Inc.
+00080E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-90-9C   (hex)		ARRIS Group, Inc.
+00909C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-12-25   (hex)		ARRIS Group, Inc.
+001225     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+14-5B-D1   (hex)		ARRIS Group, Inc.
+145BD1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+6C-C1-D2   (hex)		ARRIS Group, Inc.
+6CC1D2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+1C-14-48   (hex)		ARRIS Group, Inc.
+1C1448     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-17-84   (hex)		ARRIS Group, Inc.
+001784     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1C-11   (hex)		ARRIS Group, Inc.
+001C11     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1E-46   (hex)		ARRIS Group, Inc.
+001E46     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-18-A4   (hex)		ARRIS Group, Inc.
+0018A4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-18-C0   (hex)		ARRIS Group, Inc.
+0018C0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-74   (hex)		ARRIS Group, Inc.
+002374     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+AC-E0-10   (hex)		Liteon Technology Corporation
+ACE010     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road, ChungHo
+				New Taipei City  Taiwan  23585
+				TW
+
+74-75-48   (hex)		Amazon Technologies Inc.
+747548     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-00-B1   (hex)		Alpha Micro
+0000B1     (base 16)		Alpha Micro
+				3501 SUNFLOWER
+				SANTA ANA  CA  92704
+				US
+
+00-18-02   (hex)		Alpha Networks Inc.
+001802     (base 16)		Alpha Networks Inc.
+				No.8 Li-shing Seventh Road,Science-based Industrial Park
+				Hsinchu    300
+				TW
+
+78-84-3C   (hex)		Sony Corporation
+78843C     (base 16)		Sony Corporation
+				Gotenyama Tec,5-1-12,
+				Shinagawa-ku  Tokyo  141-0001
+				JP
+
+00-13-A9   (hex)		Sony Corporation
+0013A9     (base 16)		Sony Corporation
+				Gotenyama Tec, 5-1-2 Kitashinagawa
+				Tokyo    141-0001
+				JP
+
+FC-0F-E6   (hex)		Sony Interactive Entertainment Inc.
+FC0FE6     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+74-DE-2B   (hex)		Liteon Technology Corporation
+74DE2B     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+00-22-5F   (hex)		Liteon Technology Corporation
+00225F     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+5C-93-A2   (hex)		Liteon Technology Corporation
+5C93A2     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road, ChungHo, TaiPei Hsien
+				TaiPei  TaiWan  23585
+				TW
+
+24-FD-52   (hex)		Liteon Technology Corporation
+24FD52     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo
+				New Taipei City  Taipei  23585
+				TW
+
+2C-D0-5A   (hex)		Liteon Technology Corporation
+2CD05A     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo
+				New Taipei City  Taipei  23585
+				TW
+
+74-E5-43   (hex)		Liteon Technology Corporation
+74E543     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo
+				New Taipei City  Taipei  23585
+				TW
+
+00-15-CF   (hex)		ARRIS Group, Inc.
+0015CF     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+6C-FA-A7   (hex)		AMPAK Technology, Inc.
+6CFAA7     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road
+				Hsinchu    30352
+				TW
+
+54-E4-BD   (hex)		FN-LINK TECHNOLOGY LIMITED
+54E4BD     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				5th Floor, A Building, Haoye Logistics Park, Shugang Channel, Bao'an District,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+54-14-FD   (hex)		Orbbec 3D Technology International
+5414FD     (base 16)		Orbbec 3D Technology International
+				950 Stephenson Hwy Suite 208
+				Troy  MI  48083
+				US
+
+90-0B-C1   (hex)		Sprocomm Technologies CO.,Ltd
+900BC1     (base 16)		Sprocomm Technologies CO.,Ltd
+				5D-506 F1.6 Block,Tianfa Building,Tianan Chegongmiao Industrial Park,Futian Dist,Shenzhen China
+				Shenzhen  Guangdong  518000
+				CN
+
+00-1C-A8   (hex)		AirTies Wireless Networks
+001CA8     (base 16)		AirTies Wireless Networks
+				Gulbahar Mahallesi, Avni Diligil Sokak
+				ISTANBUL  ISTANBUL  34394
+				TR
+
+48-5D-60   (hex)		AzureWave Technology Inc.
+485D60     (base 16)		AzureWave Technology Inc.
+				8F ., No.94, Baozhong Rd. 
+				Xindian City  Taipei County  231 
+				TW
+
+DC-85-DE   (hex)		AzureWave Technology Inc.
+DC85DE     (base 16)		AzureWave Technology Inc.
+				8F ., No.94, Baozhong RD, Sindian, 
+				New Taipei City    231
+				TW
+
+B0-EE-45   (hex)		AzureWave Technology Inc.
+B0EE45     (base 16)		AzureWave Technology Inc.
+				8F ., No.94, Baozhong Rd. , Xindian Dist., 
+				New Taipei City    231
+				US
+
+00-23-8E   (hex)		ADB Broadband Italia
+00238E     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+00-1D-8B   (hex)		ADB Broadband Italia
+001D8B     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+00-13-C8   (hex)		ADB Broadband Italia
+0013C8     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+DC-0B-1A   (hex)		ADB Broadband Italia
+DC0B1A     (base 16)		ADB Broadband Italia
+				via Sarca 222
+				Milano    20126
+				IT
+
+0C-6A-E6   (hex)		Stanley Security Solutions
+0C6AE6     (base 16)		Stanley Security Solutions
+				6161 East 75th Street
+				Indianapolis  IN  46250
+				US
+
+84-26-15   (hex)		ADB Broadband Italia
+842615     (base 16)		ADB Broadband Italia
+				VIALE SARCA 336
+				MILANO    20126
+				IT
+
+F0-84-2F   (hex)		ADB Broadband Italia
+F0842F     (base 16)		ADB Broadband Italia
+				VIALE SARCA 336
+				MILANO    20126
+				IT
+
+54-27-1E   (hex)		AzureWave Technology Inc.
+54271E     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City    231
+				TW
+
+28-C2-DD   (hex)		AzureWave Technology Inc.
+28C2DD     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.,
+				New Taipei City  Taiwan  231
+				TW
+
+80-A5-89   (hex)		AzureWave Technology Inc.
+80A589     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.,
+				New Taipei City  Taiwan  231
+				TW
+
+C4-09-38   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+C40938     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building,,Star-net Science Plaza
+				Fuzhou  Fujian  350002
+				CN
+
+00-1C-50   (hex)		TCL Technoly Electronics (Huizhou) Co., Ltd.
+001C50     (base 16)		TCL Technoly Electronics (Huizhou) Co., Ltd.
+				10/F, Block A , TCL Tower
+				Shenzhen  Guangdong  518057
+				CN
+
+00-AA-02   (hex)		Intel Corporation
+00AA02     (base 16)		Intel Corporation
+				445
+				piscataway  NJ  08554
+				US
+
+AC-E5-F0   (hex)		Doppler Labs
+ACE5F0     (base 16)		Doppler Labs
+				611 Broadway Suite 523
+				New York  NY  10012
+				US
+
+F4-8E-38   (hex)		Dell Inc.
+F48E38     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+74-C6-3B   (hex)		AzureWave Technology Inc.
+74C63B     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+7C-7A-91   (hex)		Intel Corporate
+7C7A91     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+AC-7B-A1   (hex)		Intel Corporate
+AC7BA1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+6C-29-95   (hex)		Intel Corporate
+6C2995     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+98-4F-EE   (hex)		Intel Corporate
+984FEE     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+E8-2A-EA   (hex)		Intel Corporate
+E82AEA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+60-57-18   (hex)		Intel Corporate
+605718     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+C4-D9-87   (hex)		Intel Corporate
+C4D987     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+FC-F8-AE   (hex)		Intel Corporate
+FCF8AE     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+60-36-DD   (hex)		Intel Corporate
+6036DD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+10-0B-A9   (hex)		Intel Corporate
+100BA9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+8C-70-5A   (hex)		Intel Corporate
+8C705A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+60-67-20   (hex)		Intel Corporate
+606720     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+7C-5C-F8   (hex)		Intel Corporate
+7C5CF8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+B4-E1-C4   (hex)		Microsoft Mobile Oy
+B4E1C4     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				Espoo    02150
+				FI
+
+E0-75-7D   (hex)		Motorola Mobility LLC, a Lenovo Company
+E0757D     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				600 North US Highway 45
+				Libertyville  IL  60048
+				US
+
+34-BB-26   (hex)		Motorola Mobility LLC, a Lenovo Company
+34BB26     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				600 North US Highway 45
+				Libertyville  IL  60048
+				US
+
+80-6C-1B   (hex)		Motorola Mobility LLC, a Lenovo Company
+806C1B     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 Merchandise Mart Plaza, Suite 1800
+				Chicago  IL  60654
+				US
+
+00-16-EB   (hex)		Intel Corporate
+0016EB     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-18-DE   (hex)		Intel Corporate
+0018DE     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+5C-E0-C5   (hex)		Intel Corporate
+5CE0C5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+58-A8-39   (hex)		Intel Corporate
+58A839     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1E-67   (hex)		Intel Corporate
+001E67     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-22-FA   (hex)		Intel Corporate
+0022FA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-15-00   (hex)		Intel Corporate
+001500     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+A0-88-B4   (hex)		Intel Corporate
+A088B4     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+64-80-99   (hex)		Intel Corporate
+648099     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+D0-7E-35   (hex)		Intel Corporate
+D07E35     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1E-65   (hex)		Intel Corporate
+001E65     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+34-84-46   (hex)		Ericsson AB
+348446     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+04-4E-06   (hex)		Ericsson AB
+044E06     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+00-27-0E   (hex)		Intel Corporate
+00270E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-26-B9   (hex)		Dell Inc.
+0026B9     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+64-00-6A   (hex)		Dell Inc.
+64006A     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-D0-9E   (hex)		2Wire Inc
+00D09E     (base 16)		2Wire Inc
+				694 TASMAN DRIVE
+				MILPITAS  CA  95035
+				US
+
+00-19-E4   (hex)		2Wire Inc
+0019E4     (base 16)		2Wire Inc
+				1704 Automation Parkway
+				San Jose  CA  94538
+				US
+
+00-1A-C4   (hex)		2Wire Inc
+001AC4     (base 16)		2Wire Inc
+				1704 Automation Parkway
+				San Jose  CA  94538
+				US
+
+00-1B-5B   (hex)		2Wire Inc
+001B5B     (base 16)		2Wire Inc
+				1704 Automation Parkway
+				San Jose  CA  95131
+				US
+
+3C-EA-4F   (hex)		2Wire Inc
+3CEA4F     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose    95131
+				US
+
+DC-7F-A4   (hex)		2Wire Inc
+DC7FA4     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose    95131
+				US
+
+B0-D5-CC   (hex)		Texas Instruments
+B0D5CC     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+38-29-DD   (hex)		ONvocal Inc
+3829DD     (base 16)		ONvocal Inc
+				104 Otis Street, Ste 28
+				Northborough  MA  01532
+				US
+
+00-1E-C7   (hex)		2Wire Inc
+001EC7     (base 16)		2Wire Inc
+				1704 Automation Prkwy
+				San Jose    95131
+				US
+
+00-26-50   (hex)		2Wire Inc
+002650     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+00-23-51   (hex)		2Wire Inc
+002351     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+00-1E-4F   (hex)		Dell Inc.
+001E4F     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock    78682
+				US
+
+5C-26-0A   (hex)		Dell Inc.
+5C260A     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock     78682
+				US
+
+78-45-C4   (hex)		Dell Inc.
+7845C4     (base 16)		Dell Inc.
+				One Dell way
+				Round Rock    78682
+				US
+
+C8-1F-66   (hex)		Dell Inc.
+C81F66     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-15-C5   (hex)		Dell Inc.
+0015C5     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-14-22   (hex)		Dell Inc.
+001422     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+10-98-36   (hex)		Dell Inc.
+109836     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+80-0A-80   (hex)		IEEE Registration Authority
+800A80     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F8-DB-88   (hex)		Dell Inc.
+F8DB88     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+3C-A3-48   (hex)		vivo Mobile Communication Co., Ltd.
+3CA348     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+E4-5A-A2   (hex)		vivo Mobile Communication Co., Ltd.
+E45AA2     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+CC-3B-3E   (hex)		Lester Electrical
+CC3B3E     (base 16)		Lester Electrical
+				625 W A Street
+				Lincoln  NE  68522
+				US
+
+20-82-C0   (hex)		Xiaomi Communications Co Ltd
+2082C0     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+DC-6D-CD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+DC6DCD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+C4-28-2D   (hex)		Embedded Intellect Pty Ltd
+C4282D     (base 16)		Embedded Intellect Pty Ltd
+				Level 32, 101 Miller Street
+				North Sydney  NSW  2060
+				AU
+
+58-46-E1   (hex)		Baxter International Inc
+5846E1     (base 16)		Baxter International Inc
+				One Baxter Parkway
+				Deerfield  IL  60015
+				US
+
+00-17-3F   (hex)		Belkin International Inc.
+00173F     (base 16)		Belkin International Inc.
+				501 West Walnut Street
+				Compton  CA  90220-5221
+				US
+
+00-1C-DF   (hex)		Belkin International Inc.
+001CDF     (base 16)		Belkin International Inc.
+				12045 E. Waterfront Drive
+				Playa Vista  CA  90094
+				US
+
+C0-56-27   (hex)		Belkin International Inc.
+C05627     (base 16)		Belkin International Inc.
+				12045 E. Waterfront Drive
+				Playa Vista  CA  90094
+				US
+
+4C-17-EB   (hex)		Sagemcom Broadband SAS
+4C17EB     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+CC-33-BB   (hex)		Sagemcom Broadband SAS
+CC33BB     (base 16)		Sagemcom Broadband SAS
+				250 ROUTE DE L'EMPEREUR
+				RUEIL MALMAISON CEDEX  Choisissez l'état / la province  92848
+				FR
+
+D8-6C-E9   (hex)		Sagemcom Broadband SAS
+D86CE9     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+E8-F1-B0   (hex)		Sagemcom Broadband SAS
+E8F1B0     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+5C-6B-32   (hex)		Texas Instruments
+5C6B32     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+84-DD-20   (hex)		Texas Instruments
+84DD20     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-18-31   (hex)		Texas Instruments
+001831     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+24-FD-5B   (hex)		SmartThings, Inc.
+24FD5B     (base 16)		SmartThings, Inc.
+				456 University Avenue
+				Palo Alto  CA  94301
+				US
+
+28-76-CD   (hex)		Funshion Online Technologies Co.,Ltd
+2876CD     (base 16)		Funshion Online Technologies Co.,Ltd
+				Tower B 1201, Jinqiu International Building, No.6, Zhichun Road, Haidian District
+				Beijing    100088
+				CN
+
+20-55-32   (hex)		Gotech International Technology Limited
+205532     (base 16)		Gotech International Technology Limited
+				Unit 2506, 25/F, Prosperity Place,6 Shing Yip Street, Kwun Tong,  Kowloon
+				Hong Kong    00000
+				CN
+
+2C-FF-65   (hex)		Oki Electric Industry Co., Ltd.
+2CFF65     (base 16)		Oki Electric Industry Co., Ltd.
+				1-7-12 Toranomon
+				Tokyo 105-8460    
+				JP
+
+2C-27-D7   (hex)		Hewlett Packard
+2C27D7     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+98-4B-E1   (hex)		Hewlett Packard
+984BE1     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-29-26   (hex)		Applied Optoelectronics, Inc Taiwan Branch
+002926     (base 16)		Applied Optoelectronics, Inc Taiwan Branch
+				No.18,Gong 4th Rd
+				New Taipei City  Linkou District  24452
+				TW
+
+24-BA-13   (hex)		RISO KAGAKU CORPORATION
+24BA13     (base 16)		RISO KAGAKU CORPORATION
+				2-8-1 Gakuen-minami
+				Thukuba-shi  Ibaraki  305-0818
+				JP
+
+00-17-E5   (hex)		Texas Instruments
+0017E5     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-EC   (hex)		Texas Instruments
+0017EC     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-E7   (hex)		Texas Instruments
+0017E7     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-E9   (hex)		Texas Instruments
+0017E9     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+1C-BA-8C   (hex)		Texas Instruments
+1CBA8C     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-15-E9   (hex)		D-Link Corporation
+0015E9     (base 16)		D-Link Corporation
+				2F, No.233-2, Pao-Chiao Road
+				Hsin-Tien,  Taipei  231
+				TW
+
+00-1B-11   (hex)		D-Link Corporation
+001B11     (base 16)		D-Link Corporation
+				NO.289, Sinhu 3rd Rd.,
+				Neihu District,  Taipei City  114
+				TW
+
+00-26-5A   (hex)		D-Link Corporation
+00265A     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd Rd.,
+				Neihu District    114
+				TW
+
+C8-BE-19   (hex)		D-Link International
+C8BE19     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+A4-BA-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4BA76     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+00-50-C2   (hex)		IEEE Registration Authority
+0050C2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+44-00-10   (hex)		Apple, Inc.
+440010     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-56-CD   (hex)		Apple, Inc.
+0056CD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-60-37   (hex)		NXP Semiconductors
+006037     (base 16)		NXP Semiconductors
+				High Tech Campus 32, Office 1.21
+				SAF  AD  13456
+				NL
+
+DC-C0-EB   (hex)		ASSA ABLOY CÔTE PICARDE
+DCC0EB     (base 16)		ASSA ABLOY CÔTE PICARDE
+				rue Alexandre Fichet
+				Oust-Marest    80460
+				FR
+
+28-BC-56   (hex)		EMAC, Inc.
+28BC56     (base 16)		EMAC, Inc.
+				2390 EMAC Way
+				Carbondale  IL  62902
+				US
+
+00-CD-FE   (hex)		Apple, Inc.
+00CDFE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-78-CD   (hex)		Ignition Design Labs
+0078CD     (base 16)		Ignition Design Labs
+				1550 Technology Drive
+				San Jose    95110
+				US
+
+B4-36-A9   (hex)		Fibocom Wireless Inc. 
+B436A9     (base 16)		Fibocom Wireless Inc. 
+				 5/F,Tower A,Technology Building II,1057# Nanhai Blvd
+				Shenzhen  GuangDong  518000
+				CN
+
+70-CA-4D   (hex)		Shenzhen lnovance Technology Co.,Ltd.
+70CA4D     (base 16)		Shenzhen lnovance Technology Co.,Ltd.
+				LiuXian 2 Road
+				Shenzhen  Guangdong  518000
+				CN
+
+00-1A-11   (hex)		Google, Inc.
+001A11     (base 16)		Google, Inc.
+				1600 Amphitheater Parkway
+				Mountain View  CA  94043
+				US
+
+48-DB-50   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48DB50     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+C8-47-8C   (hex)		Beken Corporation
+C8478C     (base 16)		Beken Corporation
+				Building 41, Capital of Tech Leaders, 1387 Zhangdong Road, Zhangjiang High-Tech Park, Pudong New District
+				Shanghai    201203
+				CN
+
+9C-EF-D5   (hex)		Panda Wireless, Inc.
+9CEFD5     (base 16)		Panda Wireless, Inc.
+				15559 Union Ave, Suite 300
+				Los Gatos  CA  95032
+				US
+
+9C-34-26   (hex)		ARRIS Group, Inc.
+9C3426     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+2C-6E-85   (hex)		Intel Corporate
+2C6E85     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1D-D1   (hex)		ARRIS Group, Inc.
+001DD1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-CF   (hex)		ARRIS Group, Inc.
+001DCF     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-D5   (hex)		ARRIS Group, Inc.
+001DD5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-D4   (hex)		ARRIS Group, Inc.
+001DD4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E4-98-D6   (hex)		Apple, Inc.
+E498D6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-22-83   (hex)		Juniper Networks
+002283     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-10-DB   (hex)		Juniper Networks
+0010DB     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-12-1E   (hex)		Juniper Networks
+00121E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+CC-A4-62   (hex)		ARRIS Group, Inc.
+CCA462     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+48-45-20   (hex)		Intel Corporate
+484520     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+C8-0E-77   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+C80E77     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+				No.201-427,2F,Tthe Animation  Building B1 District£¬No. 126£¬Tianjin eco-city animation Road
+				Tianjin    300467
+				CN
+
+10-6F-3F   (hex)		BUFFALO.INC
+106F3F     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref.  460-8315
+				JP
+
+90-49-FA   (hex)		Intel Corporate
+9049FA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+BC-0F-64   (hex)		Intel Corporate
+BC0F64     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-00-C5   (hex)		ARRIS Group, Inc.
+0000C5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+64-55-B1   (hex)		ARRIS Group, Inc.
+6455B1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-02-B3   (hex)		Intel Corporation
+0002B3     (base 16)		Intel Corporation
+				M/S:  JF3-420
+				Hillsboro  OR  97124
+				US
+
+00-03-47   (hex)		Intel Corporation
+000347     (base 16)		Intel Corporation
+				M/S:  JF3-420
+				Hillsboro  OR  97124
+				US
+
+00-0E-0C   (hex)		Intel Corporation
+000E0C     (base 16)		Intel Corporation
+				2111 NE  25th Avenue
+				Hillsboro  OR  97124
+				US
+
+D8-D3-85   (hex)		Hewlett Packard
+D8D385     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+18-A9-05   (hex)		Hewlett Packard
+18A905     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-1B-78   (hex)		Hewlett Packard
+001B78     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+E4-FA-FD   (hex)		Intel Corporate
+E4FAFD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+94-65-9C   (hex)		Intel Corporate
+94659C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+B0-C7-45   (hex)		BUFFALO.INC
+B0C745     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg.,30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref  460-8315
+				JP
+
+14-CF-E2   (hex)		ARRIS Group, Inc.
+14CFE2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+44-E1-37   (hex)		ARRIS Group, Inc.
+44E137     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-13-20   (hex)		Intel Corporate
+001320     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-80-E1   (hex)		STMicroelectronics SRL
+0080E1     (base 16)		STMicroelectronics SRL
+				1000 AZTEC WEST
+				london    12345
+				GB
+
+F8-DB-7F   (hex)		HTC Corporation
+F8DB7F     (base 16)		HTC Corporation
+				No.23 Xinghua Road
+				Taoyuan County    330
+				TW
+
+64-A7-69   (hex)		HTC Corporation
+64A769     (base 16)		HTC Corporation
+				No.23 Xinghua Road
+				Taoyuan County    330
+				TW
+
+E8-99-C4   (hex)		HTC Corporation
+E899C4     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+BC-CF-CC   (hex)		HTC Corporation
+BCCFCC     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County    330
+				TW
+
+00-04-EA   (hex)		Hewlett Packard
+0004EA     (base 16)		Hewlett Packard
+				MAIL STOP 42LE
+				CUPERTINO  CA  95014
+				US
+
+00-12-79   (hex)		Hewlett Packard
+001279     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-13-21   (hex)		Hewlett Packard
+001321     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-08-02   (hex)		Hewlett Packard
+000802     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-02-A5   (hex)		Hewlett Packard
+0002A5     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-18-71   (hex)		Hewlett Packard
+001871     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-0E-7F   (hex)		Hewlett Packard
+000E7F     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-11-85   (hex)		Hewlett Packard
+001185     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+10-60-4B   (hex)		Hewlett Packard
+10604B     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+C8-CB-B8   (hex)		Hewlett Packard
+C8CBB8     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+84-34-97   (hex)		Hewlett Packard
+843497     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+6C-C2-17   (hex)		Hewlett Packard
+6CC217     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+14-58-D0   (hex)		Hewlett Packard
+1458D0     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+5C-8A-38   (hex)		Hewlett Packard
+5C8A38     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+EC-9A-74   (hex)		Hewlett Packard
+EC9A74     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+2C-59-E5   (hex)		Hewlett Packard
+2C59E5     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+D8-FC-38   (hex)		Giantec Semiconductor Inc
+D8FC38     (base 16)		Giantec Semiconductor Inc
+				No12, Lane647, Songtao Rd, Zhangjiang Hi-Tech Park
+				Shanghai  Shanghai  201203
+				CN
+
+AC-2A-0C   (hex)		CSR ZHUZHOU INSTITUTE CO.,LTD.
+AC2A0C     (base 16)		CSR ZHUZHOU INSTITUTE CO.,LTD.
+				Times Ave.,Zhuzhou,hunan,China
+				zhuzhou  Hunan  412001
+				CN
+
+2C-67-98   (hex)		InTalTech Ltd.
+2C6798     (base 16)		InTalTech Ltd.
+				Shlomo Ben David 5
+				Rishon LeZion    7536215
+				IL
+
+00-23-4D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+00234D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-25-56   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+002556     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+60-18-88   (hex)		zte corporation
+601888     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D8-60-B0   (hex)		bioMérieux Italia S.p.A.
+D860B0     (base 16)		bioMérieux Italia S.p.A.
+				Via di Campigliano, 58
+				Bagno a Ripoli  Firenze  50012
+				IT
+
+54-E6-FC   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+54E6FC     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
+				Shenzhen  Guangdong  518000
+				CN
+
+74-EA-3A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+74EA3A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 7, Second Part, Honghualing Industrial Zone
+				Shenzhen  Guangdong  518000
+				CN
+
+F8-1A-67   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F81A67     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan
+				shenzhen  guangdong Province  518057
+				CN
+
+EC-17-2F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+EC172F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan
+				shenzhen  guangdong Province  518057
+				CN
+
+84-77-78   (hex)		Cochlear Limited
+847778     (base 16)		Cochlear Limited
+				1 University Avenue
+				Sydney  New South Wales  2109
+				AU
+
+88-7F-03   (hex)		Comper Technology Investment Limited
+887F03     (base 16)		Comper Technology Investment Limited
+				Room 710, Wangjing SOHO Tower 1-B
+				Beijing  Beijing  100102
+				CN
+
+00-19-E0   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+0019E0     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				South Building, No.5 Keyuan Road
+				Nanshan  Shenzhen  518057
+				CN
+
+00-25-86   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+002586     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 7, Second Part, Honghualing Industrial Zone
+				Shenzhen  Guangdong  518057
+				CN
+
+F4-31-C3   (hex)		Apple, Inc.
+F431C3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-A5-C3   (hex)		Apple, Inc.
+64A5C3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-56-5A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+28565A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+6C-B5-6B   (hex)		HUMAX Co., Ltd.
+6CB56B     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village,216,Hwangsaeul-ro,Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+BC-3A-EA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+BC3AEA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
+				DONGGUAN  GUANGDONG  523860
+				CN
+
+E4-22-A5   (hex)		PLANTRONICS, INC.
+E422A5     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+D4-C9-B2   (hex)		Quanergy Systems Inc
+D4C9B2     (base 16)		Quanergy Systems Inc
+				482 Mercury Drive
+				Sunnyvale  California  94085
+				US
+
+60-21-C0   (hex)		Murata Manufacturing Co., Ltd.
+6021C0     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1 Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+88-30-8A   (hex)		Murata Manufacturing Co., Ltd.
+88308A     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1 Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+5C-DA-D4   (hex)		Murata Manufacturing Co., Ltd.
+5CDAD4     (base 16)		Murata Manufacturing Co., Ltd.
+				2288, Oaza-Ohshinohara, Yasu-cho,
+				Yasu-gun  Shiga  520-2393
+				JP
+
+00-26-E8   (hex)		Murata Manufacturing Co., Ltd.
+0026E8     (base 16)		Murata Manufacturing Co., Ltd.
+				2288, Oaza-Ohshinohara, Yasu-cho,
+				Yasu-gun  Shiga  520-2393
+				JP
+
+00-25-12   (hex)		zte corporation
+002512     (base 16)		zte corporation
+				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
+				Shenzhen  GUANGDONG  518057
+				CN
+
+00-1C-26   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+001C26     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+14-E6-E4   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+14E6E4     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan,
+				Shenzhen  Guangdong Province,  518057
+				CN
+
+34-4B-50   (hex)		zte corporation
+344B50     (base 16)		zte corporation
+				12/F,ZTE R&D Building,Kejinan Road,
+				Shenzhen  Guangdong  518057
+				CN
+
+FC-C8-97   (hex)		zte corporation
+FCC897     (base 16)		zte corporation
+				12/F.,zte R&D building,kejinan Road,
+				shenzhen  guangdong  518057
+				CN
+
+00-16-CE   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+0016CE     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-22-68   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+002268     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-18-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+001882     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				F1-20,Section F,Huawei Base,Bantian, Longgang District
+				ShenZhen  GuangDong  518129
+				CN
+
+D4-EA-0E   (hex)		Avaya Inc
+D4EA0E     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+6C-FA-58   (hex)		Avaya Inc
+6CFA58     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+20-F3-A3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20F3A3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+0C-37-DC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C37DC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+BC-76-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC7670     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+24-DB-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24DBAC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+1C-1D-67   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C1D67     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+30-0E-D5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+300ED5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+48-5A-B6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+485AB6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+54-35-30   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+543530     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+F8-66-D1   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+F866D1     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+24-69-A5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2469A5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+EC-23-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC233D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+78-F5-FD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+78F5FD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+5C-7D-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5C7D5E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+90-67-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+90671C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-25-E0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC25E0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-E3-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4E3FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-2D-B3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D02DB3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
+				Shenzhen  GuangDong  518057
+				CN
+
+E8-CD-2D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8CD2D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
+				Shenzhen  GuangDong  518057
+				CN
+
+84-A8-E4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+84A8E4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+0C-96-BF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C96BF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-E7-01   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60E701     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-08-8B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8088B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-51-C6   (hex)		Avaya Inc
+A051C6     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+F0-EB-D0   (hex)		Shanghai Feixun Communication Co.,Ltd.
+F0EBD0     (base 16)		Shanghai Feixun Communication Co.,Ltd.
+				Building 90,No,4855,Guangfulin Road
+				shanghai  Shanghai  201616
+				CN
+
+64-3E-8C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+643E8C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				Shenzhen  Guangdong  518129
+				CN
+
+00-12-D2   (hex)		Texas Instruments
+0012D2     (base 16)		Texas Instruments
+				12500 TI Boulevard
+				Dallas    75243
+				US
+
+A8-63-F2   (hex)		Texas Instruments
+A863F2     (base 16)		Texas Instruments
+				12203 S.W.Freeway, MS728
+				Stafford    77477
+				US
+
+7C-60-97   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C6097     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+CC-53-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC53B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+60-DE-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60DE44     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+10-51-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+105172     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				Shenzhen  Guangdong  518129
+				CN
+
+08-E8-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+08E84F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				Shenzhen  Guangdong  518129
+				CN
+
+88-86-03   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+888603     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen    518129
+				CN
+
+04-F9-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04F938     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen  Guangdong  518129
+				CN
+
+AC-85-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC853D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen  Guangdong  518129
+				CN
+
+48-46-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4846FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen  Guangdong  518129
+				CN
+
+D0-FF-50   (hex)		Texas Instruments
+D0FF50     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+20-C3-8F   (hex)		Texas Instruments
+20C38F     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+7C-66-9D   (hex)		Texas Instruments
+7C669D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D8-DD-FD   (hex)		Texas Instruments
+D8DDFD     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D0-5F-B8   (hex)		Texas Instruments
+D05FB8     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+E0-24-7F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E0247F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+00-46-4B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+00464B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+80-FB-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+80FB06     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+6C-A8-49   (hex)		Avaya Inc
+6CA849     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+64-C3-54   (hex)		Avaya Inc
+64C354     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+50-CD-22   (hex)		Avaya Inc
+50CD22     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+B4-A9-5A   (hex)		Avaya Inc
+B4A95A     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+84-EB-18   (hex)		Texas Instruments
+84EB18     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+EC-11-27   (hex)		Texas Instruments
+EC1127     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+58-16-26   (hex)		Avaya Inc
+581626     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+70-E4-22   (hex)		Cisco Systems, Inc
+70E422     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+00-50-0F   (hex)		Cisco Systems, Inc
+00500F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+7C-1D-D9   (hex)		Xiaomi Communications Co Ltd
+7C1DD9     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+A0-86-C6   (hex)		Xiaomi Communications Co Ltd
+A086C6     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+9C-99-A0   (hex)		Xiaomi Communications Co Ltd
+9C99A0     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+58-44-98   (hex)		Xiaomi Communications Co Ltd
+584498     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-E0-B0   (hex)		Cisco Systems, Inc
+00E0B0     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-E0-FE   (hex)		Cisco Systems, Inc
+00E0FE     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-E0-34   (hex)		Cisco Systems, Inc
+00E034     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-E0-F9   (hex)		Cisco Systems, Inc
+00E0F9     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+C8-D7-19   (hex)		Cisco-Linksys, LLC
+C8D719     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine    92612
+				US
+
+00-10-79   (hex)		Cisco Systems, Inc
+001079     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-29   (hex)		Cisco Systems, Inc
+001029     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-0E-08   (hex)		Cisco-Linksys, LLC
+000E08     (base 16)		Cisco-Linksys, LLC
+				170 West Tasman Dr.
+				San Jose  CA  95134
+				US
+
+44-03-A7   (hex)		Cisco Systems, Inc
+4403A7     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+B0-FA-EB   (hex)		Cisco Systems, Inc
+B0FAEB     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+7C-AD-74   (hex)		Cisco Systems, Inc
+7CAD74     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-60-3E   (hex)		Cisco Systems, Inc
+00603E     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-60-2F   (hex)		Cisco Systems, Inc
+00602F     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-60-47   (hex)		Cisco Systems, Inc
+006047     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-50-A2   (hex)		Cisco Systems, Inc
+0050A2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-3D   (hex)		Cisco Systems, Inc
+00023D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+20-3A-07   (hex)		Cisco Systems, Inc
+203A07     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-50-2A   (hex)		Cisco Systems, Inc
+00502A     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+BC-16-F5   (hex)		Cisco Systems, Inc
+BC16F5     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+FC-5B-39   (hex)		Cisco Systems, Inc
+FC5B39     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+34-6F-90   (hex)		Cisco Systems, Inc
+346F90     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+5C-FC-66   (hex)		Cisco Systems, Inc
+5CFC66     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+D4-6D-50   (hex)		Cisco Systems, Inc
+D46D50     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+74-A0-2F   (hex)		Cisco Systems, Inc
+74A02F     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+88-90-8D   (hex)		Cisco Systems, Inc
+88908D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F0-78-16   (hex)		Cisco Systems, Inc
+F07816     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-22-3A   (hex)		Cisco SPVTG
+00223A     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+00-21-BE   (hex)		Cisco SPVTG
+0021BE     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+14-DA-E9   (hex)		ASUSTek COMPUTER INC.
+14DAE9     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,
+				Taipei    112
+				TW
+
+F4-CF-E2   (hex)		Cisco Systems, Inc
+F4CFE2     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+A8-0C-0D   (hex)		Cisco Systems, Inc
+A80C0D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+C0-7B-BC   (hex)		Cisco Systems, Inc
+C07BBC     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+24-E9-B3   (hex)		Cisco Systems, Inc
+24E9B3     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-11-D8   (hex)		ASUSTek COMPUTER INC.
+0011D8     (base 16)		ASUSTek COMPUTER INC.
+				No.150, Li-Te Rd., Peitou
+				Taipei    112
+				TW
+
+C0-8C-60   (hex)		Cisco Systems, Inc
+C08C60     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+E8-ED-F3   (hex)		Cisco Systems, Inc
+E8EDF3     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+E4-C7-22   (hex)		Cisco Systems, Inc
+E4C722     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+64-E9-50   (hex)		Cisco Systems, Inc
+64E950     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F4-1F-C2   (hex)		Cisco Systems, Inc
+F41FC2     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+44-AD-D9   (hex)		Cisco Systems, Inc
+44ADD9     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+0C-68-03   (hex)		Cisco Systems, Inc
+0C6803     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+1C-DE-A7   (hex)		Cisco Systems, Inc
+1CDEA7     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F0-7F-06   (hex)		Cisco Systems, Inc
+F07F06     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+88-F0-31   (hex)		Cisco Systems, Inc
+88F031     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-18-F3   (hex)		ASUSTek COMPUTER INC.
+0018F3     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou
+				Taipei    112
+				TW
+
+00-1A-92   (hex)		ASUSTek COMPUTER INC.
+001A92     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou
+				Taipei    112
+				TW
+
+00-0C-41   (hex)		Cisco-Linksys, LLC
+000C41     (base 16)		Cisco-Linksys, LLC
+				121 Theory Dr.
+				Irvine  CA  92612
+				US
+
+00-16-B6   (hex)		Cisco-Linksys, LLC
+0016B6     (base 16)		Cisco-Linksys, LLC
+				121 Theory Dr.
+				Irvine  CA  92612
+				US
+
+00-18-F8   (hex)		Cisco-Linksys, LLC
+0018F8     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  CA  92612
+				US
+
+00-25-2E   (hex)		Cisco SPVTG
+00252E     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+54-D4-6F   (hex)		Cisco SPVTG
+54D46F     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+A4-A2-4A   (hex)		Cisco SPVTG
+A4A24A     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+44-E0-8E   (hex)		Cisco SPVTG
+44E08E     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+00-E0-36   (hex)		PIONEER CORPORATION
+00E036     (base 16)		PIONEER CORPORATION
+				2610 Hanazono 4-Chome
+				Saitama Prefecture, 359-8    34567
+				JP
+
+00-E0-4F   (hex)		Cisco Systems, Inc
+00E04F     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-FF   (hex)		Cisco Systems, Inc
+0010FF     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-54   (hex)		Cisco Systems, Inc
+001054     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-F6   (hex)		Cisco Systems, Inc
+0010F6     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-A6   (hex)		Cisco Systems, Inc
+0010A6     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+BC-C8-10   (hex)		Cisco SPVTG
+BCC810     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+7C-B2-1B   (hex)		Cisco SPVTG
+7CB21B     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville    30044
+				US
+
+24-76-7D   (hex)		Cisco SPVTG
+24767D     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+48-1D-70   (hex)		Cisco SPVTG
+481D70     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+F0-B2-E5   (hex)		Cisco Systems, Inc
+F0B2E5     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-23-32   (hex)		Apple, Inc.
+002332     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-23-6C   (hex)		Apple, Inc.
+00236C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-23-DF   (hex)		Apple, Inc.
+0023DF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-25-00   (hex)		Apple, Inc.
+002500     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-25-BC   (hex)		Apple, Inc.
+0025BC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-97-BD   (hex)		Cisco Systems, Inc
+5897BD     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+5C-83-8F   (hex)		Cisco Systems, Inc
+5C838F     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+EC-BD-1D   (hex)		Cisco Systems, Inc
+ECBD1D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-19-E3   (hex)		Apple, Inc.
+0019E3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1B-63   (hex)		Apple, Inc.
+001B63     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1E-C2   (hex)		Apple, Inc.
+001EC2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1F-F3   (hex)		Apple, Inc.
+001FF3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-10-FA   (hex)		Apple, Inc.
+0010FA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-50-E4   (hex)		Apple, Inc.
+0050E4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-0D-93   (hex)		Apple, Inc.
+000D93     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-FA-DF   (hex)		Apple, Inc.
+7CFADF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-A3-E4   (hex)		Apple, Inc.
+78A3E4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-8F-C6   (hex)		Apple, Inc.
+148FC6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-6A-B8   (hex)		Apple, Inc.
+286AB8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-E0-2C   (hex)		Apple, Inc.
+28E02C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-B9-BA   (hex)		Apple, Inc.
+E0B9BA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-C6-10   (hex)		Apple, Inc.
+00C610     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-F6-B1   (hex)		Apple, Inc.
+B8F6B1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-FA-BA   (hex)		Apple, Inc.
+8CFABA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-D1-C3   (hex)		Apple, Inc.
+7CD1C3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-DC-E2   (hex)		Apple, Inc.
+F0DCE2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-AB-81   (hex)		Apple, Inc.
+24AB81     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-F8-47   (hex)		Apple, Inc.
+E0F847     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-E7-CF   (hex)		Apple, Inc.
+28E7CF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-CE-8F   (hex)		Apple, Inc.
+E4CE8F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-20-66   (hex)		Apple, Inc.
+A82066     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-52-B7   (hex)		Apple, Inc.
+BC52B7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-59-48   (hex)		Apple, Inc.
+5C5948     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-BC-C8   (hex)		Apple, Inc.
+C8BCC8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-04-0B   (hex)		Apple, Inc.
+E8040B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-5A-05   (hex)		Apple, Inc.
+145A05     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-AB-A7   (hex)		Apple, Inc.
+1CABA7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-84-7A   (hex)		Apple, Inc.
+C0847A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-15-9E   (hex)		Apple, Inc.
+34159E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-B0-35   (hex)		Apple, Inc.
+58B035     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-86-D8   (hex)		Apple, Inc.
+DC86D8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-B9-31   (hex)		Apple, Inc.
+90B931     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-E1-40   (hex)		Apple, Inc.
+D0E140     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-A2-E1   (hex)		Apple, Inc.
+24A2E1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-21-4C   (hex)		Insight Energy Ventures LLC
+04214C     (base 16)		Insight Energy Ventures LLC
+				123 W. Fifth St
+				Royal Oak  MI  48067
+				US
+
+F8-32-E4   (hex)		ASUSTek COMPUTER INC.
+F832E4     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+80-EA-96   (hex)		Apple, Inc.
+80EA96     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-03-08   (hex)		Apple, Inc.
+600308     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-F1-3E   (hex)		Apple, Inc.
+04F13E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-F0-AB   (hex)		Apple, Inc.
+98F0AB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-31-C1   (hex)		Apple, Inc.
+7831C1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-3A-84   (hex)		Apple, Inc.
+783A84     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-8D-4E   (hex)		Apple, Inc.
+5C8D4E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-63-DF   (hex)		Apple, Inc.
+8863DF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-1F-A1   (hex)		Apple, Inc.
+881FA1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-E0-EB   (hex)		Apple, Inc.
+C8E0EB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-B8-E3   (hex)		Apple, Inc.
+98B8E3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-53-95   (hex)		Apple, Inc.
+885395     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-6C-1C   (hex)		Apple, Inc.
+786C1C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-8D-79   (hex)		Apple, Inc.
+4C8D79     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-E6-2B   (hex)		Apple, Inc.
+1CE62B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-30-21   (hex)		Apple, Inc.
+0C3021     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-3E-9F   (hex)		Apple, Inc.
+0C3E9F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-FC-48   (hex)		Apple, Inc.
+FCFC48     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-29-3F   (hex)		Apple, Inc.
+9C293F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-A1-AB   (hex)		Intellisis
+80A1AB     (base 16)		Intellisis
+				10350 Science Center Dr
+				San Diego  CA  92121
+				US
+
+84-28-5A   (hex)		Saffron Solutions Inc
+84285A     (base 16)		Saffron Solutions Inc
+				1337 Mass Ave #273
+				Arlington  MA  02476
+				US
+
+D4-B8-FF   (hex)		Home Control Singapore Pte Ltd
+D4B8FF     (base 16)		Home Control Singapore Pte Ltd
+				620A Lorong 1 Toa Payoh
+				Singapore  Singapore  217909
+				SG
+
+08-74-02   (hex)		Apple, Inc.
+087402     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-F6-A3   (hex)		Apple, Inc.
+94F6A3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-E0-D9   (hex)		Apple, Inc.
+98E0D9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-29-F5   (hex)		Apple, Inc.
+CC29F5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-5A-EB   (hex)		Apple, Inc.
+285AEB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-24-75   (hex)		Apple, Inc.
+F02475     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-1F-23   (hex)		Apple, Inc.
+2C1F23     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-9F-13   (hex)		Apple, Inc.
+549F13     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-DB-E2   (hex)		Apple, Inc.
+F0DBE2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-81-14   (hex)		Apple, Inc.
+748114     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-F6-43   (hex)		Apple, Inc.
+18F643     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-5E-60   (hex)		Apple, Inc.
+A45E60     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-18-28   (hex)		Apple, Inc.
+A01828     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-03-4B   (hex)		Apple, Inc.
+D0034B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-41-7F   (hex)		Apple, Inc.
+10417F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-66-7F   (hex)		Apple, Inc.
+A8667F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-25-98   (hex)		Apple, Inc.
+D02598     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-BE-05   (hex)		Apple, Inc.
+80BE05     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-A0-74   (hex)		Apple, Inc.
+24A074     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-78-8B   (hex)		Apple, Inc.
+84788B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-A4-23   (hex)		Sagemcom Broadband SAS
+84A423     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+3C-78-73   (hex)		Airsonics
+3C7873     (base 16)		Airsonics
+				1289 Fordham Blvd.
+				Chapel Hill  NC  27514
+				US
+
+9C-88-AD   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+9C88AD     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+88-94-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+88947E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+C8-A2-CE   (hex)		Oasis Media Systems LLC
+C8A2CE     (base 16)		Oasis Media Systems LLC
+				1073 Barley Sheaf Rd
+				Flemington  NJ  08822
+				US
+
+58-F4-96   (hex)		Source Chain
+58F496     (base 16)		Source Chain
+				#407-4 eBIZ.Center
+				Seoul  seoul  ASI|KR|KS013|SEOUL
+				KR
+
+58-7F-57   (hex)		Apple, Inc.
+587F57     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-7C-2D   (hex)		Leie IOT technology Co., Ltd
+D07C2D     (base 16)		Leie IOT technology Co., Ltd
+				9th floor,Hongchengxintai building,No.105,Yaojiayuan Road,Chaoyang District,Beijing
+				Beijing  Beijing  100026
+				CN
+
+EC-64-E7   (hex)		MOCACARE Corporation
+EC64E7     (base 16)		MOCACARE Corporation
+				887 Federation Way
+				Palo Alto  CA  94303
+				US
+
+40-86-2E   (hex)		JDM MOBILE INTERNET SOLUTION CO., LTD.
+40862E     (base 16)		JDM MOBILE INTERNET SOLUTION CO., LTD.
+				
+				Jiashan  Zhejiang  314100
+				CN
+
+C4-BB-EA   (hex)		Pakedge Device and Software Inc
+C4BBEA     (base 16)		Pakedge Device and Software Inc
+				3847 Breakwater Ave
+				Hayward  CA  94545
+				US
+
+98-87-44   (hex)		Wuxi Hongda Science and Technology Co.,LTD
+988744     (base 16)		Wuxi Hongda Science and Technology Co.,LTD
+				No.10 An Nan Road, Nan Quan Town, Bin Hu District
+				WUXI  Jiangsu  214128
+				CN
+
+E8-34-3E   (hex)		Beijing Infosec Technologies Co., LTD.
+E8343E     (base 16)		Beijing Infosec Technologies Co., LTD.
+				Floor 4, Tower C, Global Finance and News Center
+				Beijing  Beijing  100052
+				CN
+
+34-69-87   (hex)		zte corporation
+346987     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+98-F4-28   (hex)		zte corporation
+98F428     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A4-CC-32   (hex)		Inficomm Co., Ltd
+A4CC32     (base 16)		Inficomm Co., Ltd
+				3F, B-31 Building, Tanglang Industry Park, Taoyuan Str, Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+00-6D-52   (hex)		Apple, Inc.
+006D52     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-32-99   (hex)		Lenovo (Beijing) Co., Ltd.
+A03299     (base 16)		Lenovo (Beijing) Co., Ltd.
+				No.6, ChuangYe Road,
+				Haidian District  Beijing  100085
+				CN
+
+40-54-E4   (hex)		Wearsafe Labs Inc
+4054E4     (base 16)		Wearsafe Labs Inc
+				1429 Park Street
+				Hartford  CT  06106
+				US
+
+DC-9A-8E   (hex)		Nanjing Cocomm electronics co., LTD
+DC9A8E     (base 16)		Nanjing Cocomm electronics co., LTD
+				Room 201,the Qinheng technology park building
+				Nanjing  Jiangsu  210012
+				CN
+
+AC-EE-9E   (hex)		Samsung Electronics Co.,Ltd
+ACEE9E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B8-57-D8   (hex)		Samsung Electronics Co.,Ltd
+B857D8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+70-BF-3E   (hex)		Charles River Laboratories
+70BF3E     (base 16)		Charles River Laboratories
+				1023 Wappoo Road Suite 43B
+				Charleston  SC  29407
+				US
+
+A8-C8-7F   (hex)		Roqos, Inc.
+A8C87F     (base 16)		Roqos, Inc.
+				1775 Greensboro Station Place
+				Mclean  Virginia  22102
+				US
+
+3C-83-1E   (hex)		CKD Corporation
+3C831E     (base 16)		CKD Corporation
+				250, Ouji 2-Chome
+				Komaki  Aichi  485-8551
+				JP
+
+90-DF-FB   (hex)		HOMERIDER SYSTEMS
+90DFFB     (base 16)		HOMERIDER SYSTEMS
+				12 RUE REMORA
+				GRADIGNAN  GIRONDE  33170
+				FR
+
+30-5A-3A   (hex)		ASUSTek COMPUTER INC.
+305A3A     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+2C-08-1C   (hex)		OVH
+2C081C     (base 16)		OVH
+				2, rue Kellermann
+				Roubaix  Nord  59100
+				FR
+
+C0-84-88   (hex)		Finis Inc
+C08488     (base 16)		Finis Inc
+				7085-E Las Positas Rd
+				Livermore  CA  94551
+				US
+
+38-F5-57   (hex)		JOLATA, INC.
+38F557     (base 16)		JOLATA, INC.
+				2262 N. FIRST ST.
+				SAN JOSE  CA  95134
+				US
+
+54-A3-FA   (hex)		BQT Solutions (Australia)Pty Ltd
+54A3FA     (base 16)		BQT Solutions (Australia)Pty Ltd
+				Unit 29, 1 Talavera Road
+				North Ryde  NSW  2113
+				AU
+
+24-6C-8A   (hex)		YUKAI Engineering
+246C8A     (base 16)		YUKAI Engineering
+				16-11-101, Tomihisa, Shinjuku
+				Tokyo  -  162-0067
+				
+
+AC-C5-1B   (hex)		Zhuhai Pantum Electronics Co., Ltd.
+ACC51B     (base 16)		Zhuhai Pantum Electronics Co., Ltd.
+				Area A, 3rd floor, Building No.1, No.3883, Zhuhai Avenue, Zhuhai, Guangdong, China
+				Zhuhai  Guangdong  519000
+				CN
+
+38-5F-66   (hex)		Cisco SPVTG
+385F66     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+B8-44-D9   (hex)		Apple, Inc.
+B844D9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-7A-03   (hex)		Ciena Corporation
+9C7A03     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+5C-CF-7F   (hex)		Espressif Inc.
+5CCF7F     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+68-12-95   (hex)		Lupine Lighting Systems GmbH
+681295     (base 16)		Lupine Lighting Systems GmbH
+				Winnberger Weg 11
+				Neumarkt  Bavaria  92318
+				DE
+
+70-11-AE   (hex)		Music Life LTD
+7011AE     (base 16)		Music Life LTD
+				Unit E, 31/F, Billion Centre Tower A
+				Kowloon  N/A  00000
+				HK
+
+04-1E-7A   (hex)		DSPWorks
+041E7A     (base 16)		DSPWorks
+				12/947, MHB Colony, Gorai Road
+				Mumbai    400091
+				IN
+
+84-A7-88   (hex)		Perples
+84A788     (base 16)		Perples
+				8F, 209 Dosan-daero,
+				Seoul    135-892
+				KR
+
+AC-60-B6   (hex)		Ericsson AB
+AC60B6     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+14-B3-70   (hex)		Gigaset Digital Technology (Shenzhen) Co., Ltd.
+14B370     (base 16)		Gigaset Digital Technology (Shenzhen) Co., Ltd.
+				11/F, Matsunichi Building, No.9996 Shen Nan Boulevard,  Nan Shan District, Shenzhen, China
+				ShenZhen  Guangdong  518000
+				CN
+
+68-89-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6889C1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-49-7B   (hex)		Gemtek Technology Co., Ltd.
+1C497B     (base 16)		Gemtek Technology Co., Ltd.
+				No. 1 Jen Ai Road Hsinchu Industrial Park Hukou, Hsinchu 30352 TAIWAN, REPUBLIC OF CHINA
+				Hsinchu  TAIWAN  30352
+				TW
+
+2C-CF-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2CCF58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-93-80   (hex)		Ducere Technologies Pvt. Ltd.
+D09380     (base 16)		Ducere Technologies Pvt. Ltd.
+				222B West Marredpally
+				Secunderabad  Telangana  500026
+				IN
+
+68-F9-56   (hex)		Objetivos y Servicio de Valor Añadido
+68F956     (base 16)		Objetivos y Servicio de Valor Añadido
+				c/Monte Esquinza, 28 1ºD
+				MADRID  MADRID  28010
+				ES
+
+C8-A9-FC   (hex)		Goyoo Networks Inc.
+C8A9FC     (base 16)		Goyoo Networks Inc.
+				Building D, Kelin Blocks, No.107, Dongsi North St,
+				Beijing  Beijing  100007
+				CN
+
+FC-FE-C2   (hex)		Invensys Controls UK Limited
+FCFEC2     (base 16)		Invensys Controls UK Limited
+				401 Southway Drive
+				Plymouth  Devon  Pl6 6QT
+				GB
+
+68-9A-B7   (hex)		Atelier Vision Corporation
+689AB7     (base 16)		Atelier Vision Corporation
+				888-340 Nakagawa
+				Hamamatsu  Shizuoka  431-1304
+				JP
+
+44-4C-A8   (hex)		Arista Networks
+444CA8     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+7C-2B-E1   (hex)		Shenzhen Ferex Electrical Co.,Ltd
+7C2BE1     (base 16)		Shenzhen Ferex Electrical Co.,Ltd
+				Block 2,Jiuzhou Industrial Park,Gongming
+				Shenzhen  Guangdong  518107
+				CN
+
+50-31-AD   (hex)		ABB Global Industries and Services Private Limited
+5031AD     (base 16)		ABB Global Industries and Services Private Limited
+				21st floor, World Trade Center
+				Bangalore  Karnataka  560055
+				IN
+
+14-3E-BF   (hex)		zte corporation
+143EBF     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+FC-2F-EF   (hex)		UTT Technologies Co., Ltd.
+FC2FEF     (base 16)		UTT Technologies Co., Ltd.
+				Room 301, Building 9, No. 518 Xinzhuan
+				Shanghai  Shanghai  201612
+				CN
+
+A4-C1-38   (hex)		Telink Semiconductor (Taipei) Co. Ltd.
+A4C138     (base 16)		Telink Semiconductor (Taipei) Co. Ltd.
+				Room 1050. 10F. Buld. H, No. 3-2 YuanQu St.,
+				Taipei  Taipei  11503
+				TW
+
+20-F5-10   (hex)		Codex Digital Limited
+20F510     (base 16)		Codex Digital Limited
+				60 Poland Street
+				London  Greater London  W1F 7NT
+				GB
+
+A8-74-1D   (hex)		PHOENIX CONTACT Electronics GmbH
+A8741D     (base 16)		PHOENIX CONTACT Electronics GmbH
+				Dringenauer Str. 30
+				Bad Pyrmont  -  D-31812
+				DE
+
+F0-9A-51   (hex)		Shanghai Viroyal Electronic Technology Company Limited
+F09A51     (base 16)		Shanghai Viroyal Electronic Technology Company Limited
+				LevelB,Building#3,401 Caobao Road,Shanghai,China
+				Shanghai  Shanghai  200233
+				CN
+
+4C-B8-2C   (hex)		Cambridge Mobile Telematics, Inc.
+4CB82C     (base 16)		Cambridge Mobile Telematics, Inc.
+				One Broadway, 14th Floor
+				Cambridge  MA  02142
+				US
+
+E4-A3-2F   (hex)		Shanghai Artimen Technology Co., Ltd.
+E4A32F     (base 16)		Shanghai Artimen Technology Co., Ltd.
+				Room 4462, Third Building, No. 505, Xinge Road, Xinqiao Town, SongJiang District, Shanghai City, China
+				Shanghai  Shanghai  201206
+				CN
+
+F4-67-2D   (hex)		ShenZhen Topstar Technology Company
+F4672D     (base 16)		ShenZhen Topstar Technology Company
+				5/F Buliding 204,Tai Ran ShenZhen Science&Industry Park
+				ShenZhen  GuangZhou  518042
+				CN
+
+A8-D8-28   (hex)		Ascensia Diabetes Care
+A8D828     (base 16)		Ascensia Diabetes Care
+				5 Wood Hollow Rd,
+				Parsippany  NJ  07054
+				US
+
+B8-69-C2   (hex)		Sunitec Enterprise Co., Ltd.
+B869C2     (base 16)		Sunitec Enterprise Co., Ltd.
+				1F., No.35, Dayong St., Zhonghe Dist.,
+				New Taipei City  Taiwan  235
+				TW
+
+88-CB-A5   (hex)		Suzhou Torchstar Intelligent Technology Co.,Ltd
+88CBA5     (base 16)		Suzhou Torchstar Intelligent Technology Co.,Ltd
+				Rm1704B,Business Building, No.181, Cuiyuan Rd.,SIP
+				Suzhou  Jiangsu Province  215000
+				CN
+
+7C-A2-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7CA23E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-1A-A5   (hex)		GN Netcom A/S
+501AA5     (base 16)		GN Netcom A/S
+				Lautrupbjerg 7
+				Ballerup  Ballerup  DK-2750
+				DK
+
+A4-8D-3B   (hex)		Vizio, Inc
+A48D3B     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+1C-56-FE   (hex)		Motorola Mobility LLC, a Lenovo Company
+1C56FE     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+B8-99-B0   (hex)		Cohere Technologies
+B899B0     (base 16)		Cohere Technologies
+				404 Saratoga Avenue
+				Santa Clara  CA  95050
+				US
+
+D8-5D-EF   (hex)		Busch-Jaeger Elektro GmbH
+D85DEF     (base 16)		Busch-Jaeger Elektro GmbH
+				Freisenbergstrasse 2
+				Luedenscheid  NRW  58513
+				DE
+
+88-A2-D7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88A2D7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-32-3A   (hex)		so-logic
+00323A     (base 16)		so-logic
+				Lustkandlgasse 52
+				Vienna  Vienna  1090
+				AT
+
+80-9F-AB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+809FAB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E0-03-70   (hex)		ShenZhen Continental Wireless Technology Co., Ltd.
+E00370     (base 16)		ShenZhen Continental Wireless Technology Co., Ltd.
+				North 23F, Dongfang Technology Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+04-61-69   (hex)		MEDIA GLOBAL LINKS CO., LTD.
+046169     (base 16)		MEDIA GLOBAL LINKS CO., LTD.
+				580-16, Horikawa-cho
+				Kawasaki  Kanagawa  212-0013
+				JP
+
+BC-EB-5F   (hex)		Fujian Beifeng Telecom Technology Co., Ltd.
+BCEB5F     (base 16)		Fujian Beifeng Telecom Technology Co., Ltd.
+				A-15, Huaqiao Economic Development Zone, Shuangyang, Luojiang,
+				quanzhou  fujian  362000
+				CN
+
+AC-5A-14   (hex)		Samsung Electronics Co.,Ltd
+AC5A14     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-AB-54   (hex)		MITSUMI ELECTRIC CO.,LTD.
+F0AB54     (base 16)		MITSUMI ELECTRIC CO.,LTD.
+				2-11-2, Tsurumaki
+				Tama-shi  Tokyo  206-8567
+				JP
+
+3C-31-78   (hex)		Qolsys Inc.
+3C3178     (base 16)		Qolsys Inc.
+				1900 The Alameda
+				San Jose  Ca  95126
+				US
+
+08-EC-A9   (hex)		Samsung Electronics Co.,Ltd
+08ECA9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E0-4B-45   (hex)		Hi-P Electronics Pte Ltd
+E04B45     (base 16)		Hi-P Electronics Pte Ltd
+				12 Ang Mo Kio Street 64
+				Singapore  Singapore  569088
+				SG
+
+F4-6A-92   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+F46A92     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+F0-D6-57   (hex)		ECHOSENS
+F0D657     (base 16)		ECHOSENS
+				30 Place d'Italie
+				PARIS 13  Ile de France  75013
+				FR
+
+9C-37-F4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C37F4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-47-11   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C4711     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-EB-68   (hex)		Cheerstar Technology Co., Ltd
+5CEB68     (base 16)		Cheerstar Technology Co., Ltd
+				5th Floor,Hongye Industrial Park,
+				ShenZhen  GuangDong  518006
+				CN
+
+AC-56-2C   (hex)		LAVA INTERNATIONAL(H.K) LIMITED
+AC562C     (base 16)		LAVA INTERNATIONAL(H.K) LIMITED
+				UNIT L 1/F MAU LAM COMM BLDG 16-18
+				Hong Kong    
+				CN
+
+FC-9A-FA   (hex)		Motus Global Inc.
+FC9AFA     (base 16)		Motus Global Inc.
+				5394 Merrick Road
+				Massapequa  NY  11758
+				US
+
+14-15-7C   (hex)		TOKYO COSMOS ELECTRIC CO.,LTD.
+14157C     (base 16)		TOKYO COSMOS ELECTRIC CO.,LTD.
+				2-268 Sobudai
+				Zama  Kanagawa  252-8550
+				JP
+
+20-E4-07   (hex)		Spark srl
+20E407     (base 16)		Spark srl
+				Via A. Gramsci 86/A
+				Reggio Emilia    42124
+				IT
+
+D0-9D-AB   (hex)		TCT mobile ltd
+D09DAB     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+88-73-84   (hex)		Toshiba
+887384     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+24-69-3E   (hex)		innodisk Corporation
+24693E     (base 16)		innodisk Corporation
+				5F., No. 237, Sec. 1, Datong Rd., Xizhi Dist.
+				New Taipei City  Taiwan  221
+				TW
+
+C0-DC-6A   (hex)		Qingdao Eastsoft Communication Technology Co.,LTD
+C0DC6A     (base 16)		Qingdao Eastsoft Communication Technology Co.,LTD
+				Shandong QINGDAO, No. 16A, Shangqing Road, Shibei District
+				QINGDAO  Shandong  266023
+				CN
+
+24-B0-A9   (hex)		Shanghai Mobiletek Communication Ltd.
+24B0A9     (base 16)		Shanghai Mobiletek Communication Ltd.
+				RM201, Building 9, No 99 Tianzhou RD, Shanghai China
+				Shanghai  Shanghai  200233
+				CN
+
+1C-C5-86   (hex)		Absolute Acoustics
+1CC586     (base 16)		Absolute Acoustics
+				Av. Corifeu de Azevedo Marques, 1703
+				  Sao Paulo  05581-001
+				BR
+
+40-7F-E0   (hex)		Glory Star Technics (ShenZhen) Limited
+407FE0     (base 16)		Glory Star Technics (ShenZhen) Limited
+				4/f, West Block, Xi Li Village, Xin Wu Industry Bldg., Nan Shan District, ShenZhen, China
+				Shenzhen  China  
+				CN
+
+C8-E1-30   (hex)		Milkyway Group Ltd
+C8E130     (base 16)		Milkyway Group Ltd
+				RM 405 Tung Ming Building
+				Hong Kong  Hong Kong  999077
+				HK
+
+48-6E-FB   (hex)		Davit System Technology Co., Ltd.
+486EFB     (base 16)		Davit System Technology Co., Ltd.
+				#304 Hanlim Human Tower, LS-Ro 172
+				Gunpo-si  Gyeonggi-Do  435-824
+				KR
+
+B0-96-6C   (hex)		Lanbowan Technology Ltd.
+B0966C     (base 16)		Lanbowan Technology Ltd.
+				No. 60 Langbao Xi Road
+				Foshan  Guangdong  528051
+				CN
+
+1C-F0-3E   (hex)		Wearhaus Inc.
+1CF03E     (base 16)		Wearhaus Inc.
+				2041 Bancroft Way
+				Berkeley  CA  94704
+				US
+
+88-3B-8B   (hex)		Cheering Connection Co. Ltd.
+883B8B     (base 16)		Cheering Connection Co. Ltd.
+				Room 602, Shenzhen Software Park T2-B
+				Shenzhen  Guangdong  518057
+				CN
+
+E4-F9-39   (hex)		Minxon Hotel Technology INC.
+E4F939     (base 16)		Minxon Hotel Technology INC.
+				3F, No.37, Dongxing Rd., Xinyi Dist.
+				Taipei  Taiwan  11070
+				TW
+
+14-6B-72   (hex)		Shenzhen Fortune Ship Technology Co., Ltd.
+146B72     (base 16)		Shenzhen Fortune Ship Technology Co., Ltd.
+				Room 701-716, 7th Floor,
+				Nanshan District, Shenzhen  Guangdong  518000
+				CN
+
+B8-F0-80   (hex)		SPS, INC.
+B8F080     (base 16)		SPS, INC.
+				70, Techno8-ro
+				Yuseong-gu  Daejeon  305-500
+				KR
+
+80-50-67   (hex)		W & D TECHNOLOGY CORPORATION
+805067     (base 16)		W & D TECHNOLOGY CORPORATION
+				1F., NO.22, GONGYEQU 31TH RD
+				TAICHUNG CITY  TAIWAN  40768
+				TW
+
+78-F9-44   (hex)		Private
+78F944     (base 16)		Private
+
+24-76-56   (hex)		Shanghai Net Miles Fiber Optics Technology Co., LTD.
+247656     (base 16)		Shanghai Net Miles Fiber Optics Technology Co., LTD.
+				Flat F, 17th Floor, Southern International Mansion
+				Shanghai  Shanghai  201401
+				CN
+
+F8-CF-C5   (hex)		Motorola Mobility LLC, a Lenovo Company
+F8CFC5     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+A4-7B-85   (hex)		ULTIMEDIA Co Ltd,
+A47B85     (base 16)		ULTIMEDIA Co Ltd,
+				Guro-Gu Saeaml-ro 102
+				Seoul    152770
+				KR
+
+5C-5B-35   (hex)		Mist Systems, Inc.
+5C5B35     (base 16)		Mist Systems, Inc.
+				1601 South De Anza Blvd, Suite 248
+				Cupertino  CA  95014
+				US
+
+EC-BA-FE   (hex)		GIROPTIC
+ECBAFE     (base 16)		GIROPTIC
+				165 avenue de Bretagne
+				Lille  Nord  59000
+				FR
+
+3C-2C-94   (hex)		杭州德澜科技有限公司（HangZhou Delan Technology Co.,Ltd）
+3C2C94     (base 16)		杭州德澜科技有限公司（HangZhou Delan Technology Co.,Ltd）
+				tianmushan road no.398,Xihu District, hangzhou city, zhejiang province, China
+				Hangzhou  ZheJiang  310013
+				CN
+
+24-1B-44   (hex)		Hangzhou Tuners Electronics Co., Ltd
+241B44     (base 16)		Hangzhou Tuners Electronics Co., Ltd
+				5/F,Building No.1,No.619
+				BinJiang District, Hangzhou  ZheJiang  310053
+				CN
+
+80-A8-5D   (hex)		Osterhout Design Group
+80A85D     (base 16)		Osterhout Design Group
+				153 Townsend Suite 570
+				San Francisco  CA  94107
+				US
+
+AC-CA-AB   (hex)		Virtual Electric Inc
+ACCAAB     (base 16)		Virtual Electric Inc
+				1314 Vanna Ct
+				San Jose  CA  95131
+				US
+
+48-54-15   (hex)		NET RULES TECNOLOGIA EIRELI
+485415     (base 16)		NET RULES TECNOLOGIA EIRELI
+				Rua Madre Cabrini, 240 - 7°andar
+				São Paulo  São Paulo  04020000
+				BR
+
+78-40-E4   (hex)		Samsung Electronics Co.,Ltd
+7840E4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E0-99-71   (hex)		Samsung Electronics Co.,Ltd
+E09971     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+70-DA-9C   (hex)		TECSEN
+70DA9C     (base 16)		TECSEN
+				$401, Jeongsu Bd, 94-70,
+				SEOUL  NA  150-037
+				KR
+
+2C-A2-B4   (hex)		Fortify Technologies, LLC
+2CA2B4     (base 16)		Fortify Technologies, LLC
+				6200 Shingle Creek Pkwy, Suite 400
+				Minneapolis  Minnesota  55430
+				US
+
+10-D3-8A   (hex)		Samsung Electronics Co.,Ltd
+10D38A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-85-01   (hex)		Geberit International AG
+E48501     (base 16)		Geberit International AG
+				Schachenstrasse 77
+				Jona  SG  8645
+				CH
+
+20-62-74   (hex)		Microsoft Corporation
+206274     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+E8-16-2B   (hex)		IDEO Security Co., Ltd.
+E8162B     (base 16)		IDEO Security Co., Ltd.
+				1404, Seoul Forest IT Valley, 77, Seongsuil-ro
+				Seongdong-gu,  SEOUL  133-822
+				KR
+
+B4-73-56   (hex)		Hangzhou Treebear Networking Co., Ltd.
+B47356     (base 16)		Hangzhou Treebear Networking Co., Ltd.
+				2F,Block A, Lianhe Building, 2#, Zijinghua RD, Xihu District
+				Hangzhou  Zhejiang  310012
+				CN
+
+34-68-95   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+346895     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+84-73-03   (hex)		Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.
+847303     (base 16)		Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.
+				5th floor,Hongchengxintai building,No.105,Yaojiayuan Road,Chaoyang District,Beijing
+				Beijing  Chaoyang  100025
+				CN
+
+3C-C2-E1   (hex)		XINHUA CONTROL ENGINEERING CO.,LTD
+3CC2E1     (base 16)		XINHUA CONTROL ENGINEERING CO.,LTD
+				160 Wenjing Road, Minhang
+				Shanghai  Shanghai  200245
+				CN
+
+8C-87-3B   (hex)		Leica Camera AG
+8C873B     (base 16)		Leica Camera AG
+				Am Leitz-Park 5
+				Wetzlar  Hessen  35578
+				DE
+
+44-F4-77   (hex)		Juniper Networks
+44F477     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+14-29-71   (hex)		NEMOA ELECTRONICS (HK) CO. LTD
+142971     (base 16)		NEMOA ELECTRONICS (HK) CO. LTD
+				ROOM 610, MINGYOU PURCHASING & DISPLAYING CENTER,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+78-E9-80   (hex)		RainUs Co.,Ltd
+78E980     (base 16)		RainUs Co.,Ltd
+				E-703, Digital Empire, 16, Deogyeong-daero
+				Suwon-si  Gyeonggi-do  443-702
+				KR
+
+E0-FF-F7   (hex)		Softiron Inc.
+E0FFF7     (base 16)		Softiron Inc.
+				6540 Central Avenue
+				Newark  California  94560
+				US
+
+3C-6A-9D   (hex)		Dexatek Technology LTD.
+3C6A9D     (base 16)		Dexatek Technology LTD.
+				15F, NO.81, Sec.1, Xizhi Dist.,
+				New Taipei City    221
+				TW
+
+34-9E-34   (hex)		Evervictory Electronic Co.Ltd
+349E34     (base 16)		Evervictory Electronic Co.Ltd
+				Chu-Chi management district Humen Town, DongGuan GuangDong Province, China
+				DongGuan  GuangDong  523000
+				CN
+
+70-0F-C7   (hex)		SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.
+700FC7     (base 16)		SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.
+				Room 8B,Building C, Tongfang Information Port, Langshan Road, Science
+				Shenzhen  Guangdong  518057
+				CN
+
+BC-74-D7   (hex)		HangZhou JuRu Technology CO.,LTD
+BC74D7     (base 16)		HangZhou JuRu Technology CO.,LTD
+				No.803 Room,Shuyu Building,No.98 Wenyi West Road,Hangzhou,Zhejiang,China
+				hangzhou  zhejiang  310053
+				CN
+
+78-EB-14   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+78EB14     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+3C-49-37   (hex)		ASSMANN Electronic GmbH
+3C4937     (base 16)		ASSMANN Electronic GmbH
+				Auf dem Schueffel 3
+				Luedenscheid  Germany  58513
+				DE
+
+84-44-64   (hex)		ServerU Inc
+844464     (base 16)		ServerU Inc
+				8100 NW 64th Street
+				Miami  FL  33166
+				US
+
+00-35-60   (hex)		Rosen Aviation
+003560     (base 16)		Rosen Aviation
+				1020 Owen Loop South
+				Eugene  Oregon  97402
+				US
+
+F8-BC-41   (hex)		Rosslare Enterprises Limited
+F8BC41     (base 16)		Rosslare Enterprises Limited
+				Flat 912 Wing Fat Industrial Building
+				Kowloon Bay  Kowloon  
+				HK
+
+3C-B7-92   (hex)		Hitachi Maxell, Ltd., Optronics Division
+3CB792     (base 16)		Hitachi Maxell, Ltd., Optronics Division
+				5030 Totsuka-cho, Totsuka-ku
+				Yokohama  Kanagawa  244-0003
+				JP
+
+F8-B2-F3   (hex)		GUANGZHOU BOSMA TECHNOLOGY CO.,LTD
+F8B2F3     (base 16)		GUANGZHOU BOSMA TECHNOLOGY CO.,LTD
+				FL.3,A5,No.11 Kaiyuan Ave., Scienc City,Guangzhou,CHINA
+				Guangzhou  GuangDong  510530
+				CN
+
+28-D9-8A   (hex)		Hangzhou Konke Technology Co.,Ltd.
+28D98A     (base 16)		Hangzhou Konke Technology Co.,Ltd.
+				Hangzhou cuibai road 7, ROOM 422
+				Hangzhou  Zhejiang  310012
+				CN
+
+D8-93-41   (hex)		General Electric Global Research
+D89341     (base 16)		General Electric Global Research
+				2623 Camino Ramon
+				San Ramon  CA  94583
+				US
+
+1C-9E-CB   (hex)		Beijing Nari Smartchip Microelectronics Company Limited
+1C9ECB     (base 16)		Beijing Nari Smartchip Microelectronics Company Limited
+				Northern Territory Xixiaokou Rd,Haidian district,Beijing 100192,China
+				beijing  beijing  100192
+				CN
+
+D4-8D-D9   (hex)		Meld Technology, Inc
+D48DD9     (base 16)		Meld Technology, Inc
+				725 San Aleso Ave
+				Sunnyvale  CA  94085
+				US
+
+DC-C6-22   (hex)		BUHEUNG SYSTEM
+DCC622     (base 16)		BUHEUNG SYSTEM
+				302, 45, Jeonpa-ro, 24 Beongil
+				Anyang-si  Gyeonggi-do  430-857
+				KR
+
+90-2C-C7   (hex)		C-MAX Asia Limited
+902CC7     (base 16)		C-MAX Asia Limited
+				Unit 117, 1/F, Liven House
+				Kwun Tong  Kowloon  852
+				HK
+
+88-70-EF   (hex)		SC Professional Trading Co., Ltd.
+8870EF     (base 16)		SC Professional Trading Co., Ltd.
+				2 Soi Krungthepkreetar 21
+				Sapansoong  Bangkok  10250
+				TH
+
+94-C0-38   (hex)		Tallac Networks
+94C038     (base 16)		Tallac Networks
+				6528 Lonetree Blvd.
+				Rocklin  CA  95765
+				US
+
+68-36-B5   (hex)		DriveScale, Inc.
+6836B5     (base 16)		DriveScale, Inc.
+				530 Lakeside Dr. #190
+				Sunnyvale  CALIFORNIA  94085
+				US
+
+C4-08-80   (hex)		Shenzhen UTEPO Tech Co., Ltd.
+C40880     (base 16)		Shenzhen UTEPO Tech Co., Ltd.
+				5/F Western Block, M-8 Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+D8-80-39   (hex)		Microchip Technology Inc.
+D88039     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+5C-96-6A   (hex)		RTNET
+5C966A     (base 16)		RTNET
+				827-64, Yeoksam-dong, Kangnam-Gu
+				Seoul  -  135-080
+				KR
+
+BC-BC-46   (hex)		SKS Welding Systems GmbH
+BCBC46     (base 16)		SKS Welding Systems GmbH
+				Marie-Curie-Str. 14
+				Kaiserslautern  Rheinlandpfalz  67661
+				DE
+
+98-16-EC   (hex)		IC Intracom
+9816EC     (base 16)		IC Intracom
+				550 Commerce Blvd
+				Oldsmar  Florida  34677
+				US
+
+D0-62-A0   (hex)		China Essence Technology (Zhumadian) Co., Ltd.
+D062A0     (base 16)		China Essence Technology (Zhumadian) Co., Ltd.
+				4th Floor, Administrative Service Center Office of Yicheng District
+				Zhumadian  Henan Province  463000
+				CN
+
+90-17-9B   (hex)		Nanomegas
+90179B     (base 16)		Nanomegas
+				BD Ed.Machtens 79/22
+				BXL  Molenbeek  1080
+				BE
+
+14-F8-93   (hex)		Wuhan FiberHome Digital Technology Co.,Ltd.
+14F893     (base 16)		Wuhan FiberHome Digital Technology Co.,Ltd.
+				No.88 YouKeyuan Road
+				Wuhan  Hubei  430074
+				CN
+
+58-21-36   (hex)		KMB systems, s.r.o.
+582136     (base 16)		KMB systems, s.r.o.
+				Dr. M. Horakove 559
+				Liberec  Czech Republic  46006
+				CZ
+
+80-09-02   (hex)		Keysight Technologies, Inc.
+800902     (base 16)		Keysight Technologies, Inc.
+				1400 Fountaingrove Pkwy.
+				Santa Rosa  CA  95403
+				US
+
+04-99-E6   (hex)		Shenzhen Yoostar Technology Co., Ltd
+0499E6     (base 16)		Shenzhen Yoostar Technology Co., Ltd
+				#503，Tower D, HUA HAN Innovation Park,
+				Shenzhen  Guangdong  518000
+				CN
+
+70-FF-5C   (hex)		Cheerzing Communication(Xiamen)Technology Co.,Ltd
+70FF5C     (base 16)		Cheerzing Communication(Xiamen)Technology Co.,Ltd
+				Room N514,North Torch Building,5 Torch Road
+				Xiamen  Fujian  361005
+				CN
+
+4C-48-DA   (hex)		Beijing Autelan Technology Co.,Ltd
+4C48DA     (base 16)		Beijing Autelan Technology Co.,Ltd
+				1-4F, 3rd Area, 9#Building Zhongguancun Software Park
+				  Beijing  100193
+				CN
+
+20-5C-FA   (hex)		Yangzhou ChangLian Network Technology Co,ltd.
+205CFA     (base 16)		Yangzhou ChangLian Network Technology Co,ltd.
+				No.60, Shangfang Temple Road
+				Yangzhou City  Jiangsu  225000
+				CN
+
+84-93-0C   (hex)		InCoax Networks Europe AB
+84930C     (base 16)		InCoax Networks Europe AB
+				Strommavagen 2
+				Gavle  Sweden  80309
+				SE
+
+1C-A2-B1   (hex)		ruwido austria gmbh
+1CA2B1     (base 16)		ruwido austria gmbh
+				Koestendorferstrasse 8
+				Neumarkt a.W.  Salzburg  5202
+				AT
+
+38-4B-76   (hex)		AIRTAME ApS
+384B76     (base 16)		AIRTAME ApS
+				Vestergade 20C
+				Copenhagen C  Copenhagen  1456
+				DK
+
+38-B1-DB   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+38B1DB     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+34-F6-D2   (hex)		Panasonic Taiwan Co.,Ltd.
+34F6D2     (base 16)		Panasonic Taiwan Co.,Ltd.
+				579,Yuan Shan Road
+				New Taipei  Taiwan  235
+				
+
+64-00-2D   (hex)		Powerlinq Co., LTD
+64002D     (base 16)		Powerlinq Co., LTD
+				13 PingDong Road 4 ,
+				Zhuhai  GD   519060
+				
+
+B4-7C-29   (hex)		Shenzhen Guzidi Technology Co.,Ltd
+B47C29     (base 16)		Shenzhen Guzidi Technology Co.,Ltd
+				South 6/F,Yingtang Building,No.5 Kejiyuan Road,Nanshan District,Shenzhen City,Guangdong Province,P.R. China
+				Shenzhen  Guangdong  518000
+				CN
+
+D4-8F-33   (hex)		Microsoft Corporation
+D48F33     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+54-F8-76   (hex)		ABB AG
+54F876     (base 16)		ABB AG
+				Trafoweg 4
+				Halle / Saale  Saxony-Anhalt  06112
+				DE
+
+34-B7-FD   (hex)		Guangzhou Younghead Electronic Technology Co.,Ltd
+34B7FD     (base 16)		Guangzhou Younghead Electronic Technology Co.,Ltd
+				Room 206,Wenzhenxin Building,Block 3, No.2 Kefa RD,Hi-Tech Park, Nanshan District, Shenzhen,China
+				Shenzhen  Guangdong  518052
+				CN
+
+B4-17-80   (hex)		DTI Group Ltd
+B41780     (base 16)		DTI Group Ltd
+				50 Affleck Rd
+				Perth Airport  Western Australia  6105
+				AU
+
+48-9D-18   (hex)		Flashbay Limited
+489D18     (base 16)		Flashbay Limited
+				6 The Fountain Centre
+				London  London  SW6 2TW
+				GB
+
+90-20-3A   (hex)		BYD Precision Manufacture Co.,Ltd
+90203A     (base 16)		BYD Precision Manufacture Co.,Ltd
+				Building 23#，NO.3009 BYD Road，Pingshan
+				Shenzhen  Guangdong  518118
+				CN
+
+80-EA-CA   (hex)		Dialog Semiconductor Hellas SA
+80EACA     (base 16)		Dialog Semiconductor Hellas SA
+				Leoforos Syggrou 143
+				Athens  Attiki  17121
+				GR
+
+20-A9-9B   (hex)		Microsoft Corporation
+20A99B     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+60-48-26   (hex)		Newbridge Technologies Int. Ltd.
+604826     (base 16)		Newbridge Technologies Int. Ltd.
+				35/F Central Plaza
+				Hong Kong    
+				CN
+
+38-F3-3F   (hex)		TATSUNO CORPORATION
+38F33F     (base 16)		TATSUNO CORPORATION
+				2-6,Mita 3-Chome,Minato-ku
+				  Tokyo  108-8520
+				JP
+
+D8-0C-CF   (hex)		C.G.V. S.A.S.
+D80CCF     (base 16)		C.G.V. S.A.S.
+				18, RUE THEODORE MONOD
+				OSTWALD CEDEX  BAS-RHIN  67541
+				FR
+
+4C-BB-58   (hex)		Chicony Electronics Co., Ltd.
+4CBB58     (base 16)		Chicony Electronics Co., Ltd.
+				No.25, Wugong 6th Rd., Wugu Dist.,
+				New Taipei City 248,  TAIWAN, REPUBLIC OF CHINA  248
+				TW
+
+A4-12-42   (hex)		NEC Platforms, Ltd.
+A41242     (base 16)		NEC Platforms, Ltd.
+				800 Shimomata
+				Kakegawa  Shizuoka  436-8501
+				JP
+
+D0-0A-AB   (hex)		Yokogawa Digital Computer Corporation
+D00AAB     (base 16)		Yokogawa Digital Computer Corporation
+				Shinjuku MIDWEST Bldg.4-30-3
+				Yoyogi  Shibuya-ku, Tokyo  151-0053
+				JP
+
+C4-00-06   (hex)		Lipi Data Systems Ltd.
+C40006     (base 16)		Lipi Data Systems Ltd.
+				Mewar Industrial Area (M.I.A)
+				UDAIPUR  RAJASTHAN  313003
+				IN
+
+38-26-2B   (hex)		UTran Technology
+38262B     (base 16)		UTran Technology
+				No.130, Guoji Rd., Tucheng Dist.,
+				New Taipei City    23650
+				TW
+
+48-0C-49   (hex)		NAKAYO Inc
+480C49     (base 16)		NAKAYO Inc
+				Development Support Center 165 Higashiomuro-machi
+				Maebashi-shi  Gunma  379-2105
+				JP
+
+3C-D9-CE   (hex)		Eclipse WiFi
+3CD9CE     (base 16)		Eclipse WiFi
+				68 S Service Rd
+				Melville  NY  11747
+				US
+
+60-77-E2   (hex)		Samsung Electronics Co.,Ltd
+6077E2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-19-10   (hex)		Samsung Electronics Co.,Ltd
+FC1910     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-79-0B   (hex)		Hitachi High Technologies America, Inc.
+FC790B     (base 16)		Hitachi High Technologies America, Inc.
+				208 Fairforest Way
+				Greenville  SC  29607
+				US
+
+60-81-F9   (hex)		Helium Systems, Inc
+6081F9     (base 16)		Helium Systems, Inc
+				717 Market Street
+				San Francisco  CA  94102
+				US
+
+84-01-A7   (hex)		Greyware Automation Products, Inc
+8401A7     (base 16)		Greyware Automation Products, Inc
+				308 Oriole Ct
+				Murphy  TX  75094
+				US
+
+98-F1-70   (hex)		Murata Manufacturing Co., Ltd.
+98F170     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+68-6E-48   (hex)		Prophet Electronic Technology Corp.,Ltd
+686E48     (base 16)		Prophet Electronic Technology Corp.,Ltd
+				9F ,3 Building,No 1535,Hongmei Road ,Xuhui District
+				Shanghai  Shanghai  200233
+				CN
+
+04-C9-91   (hex)		Phistek INC.
+04C991     (base 16)		Phistek INC.
+				5 Floor, No.188, Section 3, Datong Road
+				New Taipei City    221
+				TW
+
+3C-A1-0D   (hex)		Samsung Electronics Co.,Ltd
+3CA10D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-6C-B2   (hex)		Samsung Electronics Co.,Ltd
+646CB2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+68-05-71   (hex)		Samsung Electronics Co.,Ltd
+680571     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-B4-84   (hex)		Samsung Electronics Co.,Ltd
+14B484     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F4-C4-47   (hex)		Coagent International Enterprise Limited
+F4C447     (base 16)		Coagent International Enterprise Limited
+				FLAT/RM 2 6F CROWN TND BLDG 106 HOW MING ST KWUN TONG
+				Hong Kong  Hong Kong  528133
+				CN
+
+C8-E4-2F   (hex)		Technical Research Design and Development
+C8E42F     (base 16)		Technical Research Design and Development
+				186 Lincoln street
+				Boston  MA  02111
+				US
+
+C4-C9-EC   (hex)		Gugaoo   HK Limited
+C4C9EC     (base 16)		Gugaoo   HK Limited
+				Unit 04, 7/F BRIGHT WAY TOWER
+				Kowloon, Hongkong    
+				HK
+
+34-E4-2A   (hex)		Automatic Bar Controls Inc.
+34E42A     (base 16)		Automatic Bar Controls Inc.
+				790 Eubanks Dr
+				Vacaville  CA  95688
+				US
+
+30-59-B7   (hex)		Microsoft
+3059B7     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+20-A7-87   (hex)		Bointec Taiwan Corporation Limited
+20A787     (base 16)		Bointec Taiwan Corporation Limited
+				1F, A20, L790, SEC.5,
+				TAIPEI  TAIWAN  11082
+				TW
+
+A0-FC-6E   (hex)		Telegrafia a.s.
+A0FC6E     (base 16)		Telegrafia a.s.
+				Lomena 7
+				Kosice  Slovakia  040 01
+				
+
+20-53-CA   (hex)		Risk Technology Ltd
+2053CA     (base 16)		Risk Technology Ltd
+				Matrix House, Merlin Court
+				Altrincham  Cheshire  WA14 5NL
+				GB
+
+A4-3D-78   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A43D78     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+04-57-2F   (hex)		Sertel Electronics UK Ltd
+04572F     (base 16)		Sertel Electronics UK Ltd
+				Rutland House, 148 Edmund Street,
+				Birmingham    B3 2FD
+				GB
+
+D8-97-7C   (hex)		Grey Innovation
+D8977C     (base 16)		Grey Innovation
+				255 Mary St
+				Richmond  Victoria  3121
+				AU
+
+BC-8D-0E   (hex)		Nokia
+BC8D0E     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+A4-9F-85   (hex)		Lyve Minds, Inc
+A49F85     (base 16)		Lyve Minds, Inc
+				10001 N. De Anza Blvd, Ste 300
+				Cupertino  CA  95014
+				US
+
+78-92-3E   (hex)		Nokia Corporation
+78923E     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+AC-A9-A0   (hex)		Audioengine, Ltd.
+ACA9A0     (base 16)		Audioengine, Ltd.
+				1535 Dido Mt Salem Rd
+				Ackerman  Ms  39735
+				US
+
+A4-81-EE   (hex)		Nokia Corporation
+A481EE     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+78-D6-6F   (hex)		Aristocrat Technologies Australia Pty. Ltd.
+78D66F     (base 16)		Aristocrat Technologies Australia Pty. Ltd.
+				Building A, Pinnacle Office Park
+				North Ryde  N.S.W.  2113
+				AU
+
+44-1E-91   (hex)		ARVIDA Intelligent Electronics Technology  Co.,Ltd.
+441E91     (base 16)		ARVIDA Intelligent Electronics Technology  Co.,Ltd.
+				No.3 Qiliang Road.,
+				Danyang  Jiangsu  212300
+				CN
+
+C4-62-6B   (hex)		ZPT Vigantice
+C4626B     (base 16)		ZPT Vigantice
+				Vigantice 266
+				Roznov pod Radhostem    75661
+				CZ
+
+EC-17-66   (hex)		Research Centre Module
+EC1766     (base 16)		Research Centre Module
+				3 Eight March 4Th Street
+				Moscow  Moscow  125190
+				RU
+
+A0-D1-2A   (hex)		AXPRO Technology Inc.
+A0D12A     (base 16)		AXPRO Technology Inc.
+				8F, No.128, sec. 4 Chung Hsiao E. RD.,
+				Taipei city    10866
+				TW
+
+20-9A-E9   (hex)		Volacomm Co., Ltd
+209AE9     (base 16)		Volacomm Co., Ltd
+				15F-6., No.7, Sec.3, New Taipei Blvd., Xinzhuang Dist., New Taipei City 242., Taiwan (R.O.C)
+				Xinzhuang Dist.  New Taipei City  242
+				TW
+
+34-5D-10   (hex)		Wytek
+345D10     (base 16)		Wytek
+				10 rue jean jaures
+				Poitiers    86000
+				FR
+
+6C-14-F7   (hex)		Erhardt+Leimer GmbH
+6C14F7     (base 16)		Erhardt+Leimer GmbH
+				Albert-Leimer-Platz 1
+				Stadtbergen    86391
+				DE
+
+B0-D5-9D   (hex)		Shenzhen Zowee Technology Co., Ltd
+B0D59D     (base 16)		Shenzhen Zowee Technology Co., Ltd
+				Block 5   （ZOWEE Technology Building),
+				Pingshan, Xili Town, Nanshan District  Shenzhen, Guangdong  518055
+				CN
+
+68-28-BA   (hex)		Dejai
+6828BA     (base 16)		Dejai
+				PO Box 101
+				Toorak  Vic  3142
+				AU
+
+B0-57-06   (hex)		Vallox Oy
+B05706     (base 16)		Vallox Oy
+				Myllykylantie 9-11
+				Loimaa    32200
+				FI
+
+48-EE-07   (hex)		Silver Palm Technologies LLC
+48EE07     (base 16)		Silver Palm Technologies LLC
+				9639 DOCTOR PERRY RD STE 123N
+				IJAMSVILLE  Maryland  21754
+				US
+
+50-C7-BF   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+50C7BF     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+20-5A-00   (hex)		Coval
+205A00     (base 16)		Coval
+				ZA Les Petits Champs
+				MONTELIER  Drome  26120
+				FR
+
+A8-A6-68   (hex)		zte corporation
+A8A668     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-EE-BD   (hex)		HTC Corporation
+00EEBD     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+38-F7-08   (hex)		National Resource Management, Inc.
+38F708     (base 16)		National Resource Management, Inc.
+				480 Neponset St.  Bldg. #2
+				Canton  MA  02021
+				US
+
+E0-DB-88   (hex)		Open Standard Digital-IF Interface for SATCOM Systems
+E0DB88     (base 16)		Open Standard Digital-IF Interface for SATCOM Systems
+				3090 Raritan Ave
+				Aberdeen Proving Ground  MD  21001
+				US
+
+A8-24-EB   (hex)		ZAO NPO Introtest
+A824EB     (base 16)		ZAO NPO Introtest
+				Studencheskaya st. 55
+				Ekaterinburg  Sverdlovsk region  620078
+				RU
+
+C4-0E-45   (hex)		ACK Networks,Inc.
+C40E45     (base 16)		ACK Networks,Inc.
+				Floor3,Building B.,No.1 ShangDi XinXi Rd.
+				  Beijing  100085
+				CN
+
+3C-89-A6   (hex)		KAPELSE
+3C89A6     (base 16)		KAPELSE
+				5 Allee De Saint-Cloud 
+				54600 Villers Les Nancy    
+				FR
+
+A4-6C-C1   (hex)		LTi REEnergy GmbH
+A46CC1     (base 16)		LTi REEnergy GmbH
+				Heinrich-Hertz-Straße 18
+				Unna  North Rhine-Westfalia  59423
+				DE
+
+A8-B9-B3   (hex)		ESSYS
+A8B9B3     (base 16)		ESSYS
+				Daerung Post Tower 5 15F
+				Seoul  Gasan-Dong, Geumchen-gu  153-702
+				KR
+
+6C-09-D6   (hex)		Digiquest Electronics LTD
+6C09D6     (base 16)		Digiquest Electronics LTD
+				26 Park House
+				London    NW11 7PT
+				GB
+
+48-18-42   (hex)		Shanghai Winaas Co. Equipment Co. Ltd.
+481842     (base 16)		Shanghai Winaas Co. Equipment Co. Ltd.
+				8F Building A, WanDa Square
+				  Shanghai  200433
+				CN
+
+44-70-98   (hex)		MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
+447098     (base 16)		MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
+				Unit 906,South Block,Resources Tech Building,
+				Shenzhen  Guangdong province  518000
+				CN
+
+9C-BD-9D   (hex)		SkyDisk, Inc.
+9CBD9D     (base 16)		SkyDisk, Inc.
+				2F Tenjin central place,
+				Fukuoka-shi  Fukuoka  810-0001
+				JP
+
+74-C6-21   (hex)		Zhejiang Hite Renewable Energy Co.,LTD
+74C621     (base 16)		Zhejiang Hite Renewable Energy Co.,LTD
+				NO1320,2th Ring Road(South)
+				Tongxiang City  Zhejiang Province  314500
+				CN
+
+D4-31-9D   (hex)		Sinwatec
+D4319D     (base 16)		Sinwatec
+				76 Rikhard Zorge st.
+				Ufa  Bashkortostan  450075
+				RU
+
+B0-68-B6   (hex)		Hangzhou OYE Technology Co. Ltd
+B068B6     (base 16)		Hangzhou OYE Technology Co. Ltd
+				Room 202 Building 12 Wenxinrenjia,
+				Hangzhou  Zhejiang  310051
+				CN
+
+9C-65-F9   (hex)		AcSiP Technology Corp.
+9C65F9     (base 16)		AcSiP Technology Corp.
+				3F-1, No. 207, Fusing Rd.
+				Taoyuan  Taiwan  33066
+				TW
+
+48-76-04   (hex)		Private
+487604     (base 16)		Private
+
+2C-53-4A   (hex)		Shenzhen Winyao Electronic Limited
+2C534A     (base 16)		Shenzhen Winyao Electronic Limited
+				7B Block A Fuqiao Building Fuhua Road
+				Shen Zhen  Guangdong  518000
+				CN
+
+A4-BB-AF   (hex)		Lime Instruments
+A4BBAF     (base 16)		Lime Instruments
+				1187 Brittmoore Road
+				Houston  TX  77043
+				US
+
+F4-90-CA   (hex)		Tensorcom
+F490CA     (base 16)		Tensorcom
+				5900 Pastuer Ct., Suite 105
+				Carlsbad  CA  92008
+				US
+
+E4-4C-6C   (hex)		Shenzhen Guo Wei Electronic Co,. Ltd.
+E44C6C     (base 16)		Shenzhen Guo Wei Electronic Co,. Ltd.
+				No 3038, Lo Sha Road, Liantang
+				Shenzhen  Guangdong  518004
+				CN
+
+A8-57-4E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+A8574E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+B8-43-E4   (hex)		Vlatacom
+B843E4     (base 16)		Vlatacom
+				Milutina Milankovica 5
+				Belgrade  Serbia  11080
+				RS
+
+28-22-46   (hex)		Beijing Sinoix Communication Co., LTD
+282246     (base 16)		Beijing Sinoix Communication Co., LTD
+				Gehua Tower Room 603
+				  Beijing  100000
+				CN
+
+48-B9-77   (hex)		PulseOn Oy
+48B977     (base 16)		PulseOn Oy
+				Tekniikantie 12
+				ESPOO  Uusimaa  02150
+				FI
+
+70-71-B3   (hex)		Brain Corporation
+7071B3     (base 16)		Brain Corporation
+				5665 Morehouse Dr.
+				San Diego  CA  92121
+				US
+
+64-E6-25   (hex)		Woxu Wireless Co., Ltd
+64E625     (base 16)		Woxu Wireless Co., Ltd
+				B103 Building1 No.6 Changjianghoujie
+				Nanjing    210000
+				US
+
+10-B7-13   (hex)		Private
+10B713     (base 16)		Private
+
+10-0E-7E   (hex)		Juniper Networks
+100E7E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+20-89-86   (hex)		zte corporation
+208986     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+44-C5-6F   (hex)		NGN Easy Satfinder (Tianjin) Electronic Co., Ltd
+44C56F     (base 16)		NGN Easy Satfinder (Tianjin) Electronic Co., Ltd
+				A4, Sifang Hi-tech Building, Nankai Hi-tech Industry Area, Ya'an Road, Nankai District
+				  Tianjin  300113
+				US
+
+B8-98-F7   (hex)		Gionee Communication Equipment Co,Ltd.ShenZhen
+B898F7     (base 16)		Gionee Communication Equipment Co,Ltd.ShenZhen
+				21/F Times Technology Building, 7028 Shennan Road,
+				Shenzhen  Guangdong  518040
+				CN
+
+84-83-36   (hex)		Newrun
+848336     (base 16)		Newrun
+				#803 IT Convergence Industry Bldg., Kyungpook National Univ.
+				Daegu  N/A  702-010
+				KR
+
+18-20-12   (hex)		Aztech Associates Inc.
+182012     (base 16)		Aztech Associates Inc.
+				805 Bayridge Dr.
+				Kingston  Ontario  K7P1T5
+				CA
+
+B8-26-6C   (hex)		ANOV France
+B8266C     (base 16)		ANOV France
+				Chemin de Baillot
+				Montauban  Tarn &amp; Garonne  82000
+				FR
+
+3C-30-0C   (hex)		Dewar Electronics Pty Ltd
+3C300C     (base 16)		Dewar Electronics Pty Ltd
+				32 Taylors Road
+				Croydon  Victoria  3136
+				AU
+
+98-FF-D0   (hex)		Lenovo Mobile Communication Technology Ltd.
+98FFD0     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999,Qishan North 2nd Road
+				Xiamen  Fujian  361006
+				CN
+
+A8-75-E2   (hex)		Aventura Technologies, Inc.
+A875E2     (base 16)		Aventura Technologies, Inc.
+				48 Mall Drive
+				Commack  NY  11725
+				US
+
+B8-7A-C9   (hex)		Siemens Ltd.
+B87AC9     (base 16)		Siemens Ltd.
+				885 Mountain Hwy
+				Bayswater  Victoria  3153
+				AU
+
+F0-61-30   (hex)		Advantage Pharmacy Services, LLC
+F06130     (base 16)		Advantage Pharmacy Services, LLC
+				PO Box 7
+				Madison  MO  39130-0007
+				US
+
+6C-3C-53   (hex)		SoundHawk Corp
+6C3C53     (base 16)		SoundHawk Corp
+				20380 Town Center Lane
+				Cupertino  Ca  95014
+				US
+
+08-40-27   (hex)		Gridstore Inc.
+084027     (base 16)		Gridstore Inc.
+				1975 Landings Dr.
+				Mountain View  CA  94043
+				US
+
+38-BF-2F   (hex)		Espec Corp.
+38BF2F     (base 16)		Espec Corp.
+				5-2-5 Kanokodai Minamimachi
+				Kobe City  Hyogo  561-1514
+				JP
+
+44-C4-A9   (hex)		Opticom Communication, LLC
+44C4A9     (base 16)		Opticom Communication, LLC
+				1050 Connecticut Avenue, NW
+				Washington  DC  20036
+				US
+
+C4-82-4E   (hex)		Changzhou Uchip Electronics Co., LTD.
+C4824E     (base 16)		Changzhou Uchip Electronics Co., LTD.
+				Room1801~1802,
+				  Shanghai  201206
+				CN
+
+A4-77-60   (hex)		Nokia Corporation
+A47760     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+C8-56-63   (hex)		Sunflex Europe GmbH
+C85663     (base 16)		Sunflex Europe GmbH
+				Konrad-Zuse-Str. 13
+				Schwerte  NRW  58239
+				DE
+
+88-FE-D6   (hex)		ShangHai WangYong Software Co., Ltd.
+88FED6     (base 16)		ShangHai WangYong Software Co., Ltd.
+				Shanghai Pudong Zhangjiang Hi-Tech Park,
+				Pudong Software Park 22301-283  ShangHai  201203
+				CN
+
+7C-72-E4   (hex)		Unikey Technologies
+7C72E4     (base 16)		Unikey Technologies
+				2250 Lee Rd
+				Winter Park  FL  32789
+				US
+
+7C-20-48   (hex)		KoamTac
+7C2048     (base 16)		KoamTac
+				116 Village Boulevard
+				Princeton  New Jersey  08540
+				US
+
+8C-B7-F7   (hex)		Shenzhen UniStrong Science & Technology Co., Ltd
+8CB7F7     (base 16)		Shenzhen UniStrong Science & Technology Co., Ltd
+				17/F, Global Digital Bldg, Hi-tech Park
+				Shen zhen  Guang dong  518000
+				CN
+
+38-B7-4D   (hex)		Fijowave Limited
+38B74D     (base 16)		Fijowave Limited
+				Synergy Centre
+				    Dublin 24
+				IE
+
+18-0C-14   (hex)		iSonea Limited
+180C14     (base 16)		iSonea Limited
+				125 South Tremont Street
+				Oceanside  CA  92054
+				US
+
+9C-A9-E4   (hex)		zte corporation
+9CA9E4     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+90-F3-B7   (hex)		Kirisun Communications Co., Ltd.
+90F3B7     (base 16)		Kirisun Communications Co., Ltd.
+				3-6Flrs, ROBETA Building, 1 QiMin Road, Songping Shan Area, Science & Industry Park, Nanshan District
+				Shenzhen  GuangDong  518057
+				US
+
+C4-E9-2F   (hex)		AB Sciex
+C4E92F     (base 16)		AB Sciex
+				71 Four Valley Drive
+				Concord  Ontario  L4K 4V8
+				US
+
+A8-8D-7B   (hex)		SunDroid Global limited.
+A88D7B     (base 16)		SunDroid Global limited.
+				Room 1305B, Fiyta Science Building,
+				Shenzhen  Guang Dong  518057
+				CN
+
+3C-F7-48   (hex)		Shenzhen Linsn Technology Development Co.,Ltd
+3CF748     (base 16)		Shenzhen Linsn Technology Development Co.,Ltd
+				Floor 4,Block 7,Zone 2,Baiwangxin Industrial Park
+				Shenzhen  Guangdong  518055
+				CN
+
+B0-79-08   (hex)		Cummings Engineering
+B07908     (base 16)		Cummings Engineering
+				145 S. 79th St., Ste. 26
+				Chandler  AZ  85226
+				US
+
+E4-77-23   (hex)		zte corporation
+E47723     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+1C-63-B7   (hex)		OpenProducts 237 AB
+1C63B7     (base 16)		OpenProducts 237 AB
+				Barsebäcksvägen 27
+				Löddeköpinge    24630
+				SE
+
+94-B9-B4   (hex)		Aptos Technology
+94B9B4     (base 16)		Aptos Technology
+				5F., No.65, Guangfu N. Rd., Zhongxing Vil.,
+				Hsinchu    303
+				TW
+
+6C-15-F9   (hex)		Nautronix Limited
+6C15F9     (base 16)		Nautronix Limited
+				Blackwood House
+				Aberdeen    AB10 6XU
+				GB
+
+18-AA-45   (hex)		Fon Technology
+18AA45     (base 16)		Fon Technology
+				C/Quintanavides, 15 Edificio 2 Planta 1
+				    
+				ES
+
+90-20-83   (hex)		General Engine Management Systems Ltd.
+902083     (base 16)		General Engine Management Systems Ltd.
+				GEMS
+				Egham  Surrey  TW208RN
+				GB
+
+14-B1-26   (hex)		Industrial Software Co
+14B126     (base 16)		Industrial Software Co
+				85, Aleksandyr Malinov Blvd. Office 6
+				Sofia    1715
+				BG
+
+D8-50-E6   (hex)		ASUSTek COMPUTER INC.
+D850E6     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+DC-3E-F8   (hex)		Nokia Corporation
+DC3EF8     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+A4-9F-89   (hex)		Shanghai Rui Rui Communication Technology Co.Ltd.
+A49F89     (base 16)		Shanghai Rui Rui Communication Technology Co.Ltd.
+				Room 1130,Building No.1
+				  ShangHai  201199
+				CN
+
+70-60-DE   (hex)		LaVision GmbH
+7060DE     (base 16)		LaVision GmbH
+				Anna-Vandenhoeck-Ring 19
+				Goettingen  Niedersachsen  37081
+				DE
+
+50-2E-5C   (hex)		HTC Corporation
+502E5C     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+FC-FE-77   (hex)		Hitachi Reftechno, Inc.
+FCFE77     (base 16)		Hitachi Reftechno, Inc.
+				709-2 Tomita
+				Tochigi-shi  Tochigi-ken  329-4404
+				JP
+
+70-53-3F   (hex)		Alfa Instrumentos Eletronicos Ltda.
+70533F     (base 16)		Alfa Instrumentos Eletronicos Ltda.
+				Rua Coronel Mario de Azevedo, 138
+				Sao Paulo  SP  02710-020
+				BR
+
+40-7A-80   (hex)		Nokia Corporation
+407A80     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+64-42-14   (hex)		Swisscom Energy Solutions AG
+644214     (base 16)		Swisscom Energy Solutions AG
+				Solothurnerstrasse 19
+				Olten    4600
+				CH
+
+0C-A6-94   (hex)		Sunitec Enterprise Co.,Ltd
+0CA694     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+18-44-62   (hex)		Riava Networks, Inc.
+184462     (base 16)		Riava Networks, Inc.
+				Kato Bldg. 1F, 6-12-4 Soto-Kanda
+				Chiyoda-ku  Tokyo  1010021
+				JP
+
+C0-35-80   (hex)		A&R TECH
+C03580     (base 16)		A&R TECH
+				Marksteinergasse 13
+				Vienna    1210
+				AT
+
+D0-8A-55   (hex)		Skullcandy
+D08A55     (base 16)		Skullcandy
+				1441 Ute blvd.
+				Park City  Utah  84098
+				US
+
+34-4F-3F   (hex)		IO-Power Technology Co., Ltd.
+344F3F     (base 16)		IO-Power Technology Co., Ltd.
+				1F., No.100,
+				Hsinchu City    30055
+				TW
+
+14-60-80   (hex)		zte corporation
+146080     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+9C-BB-98   (hex)		Shen Zhen RND Electronic Co.,LTD
+9CBB98     (base 16)		Shen Zhen RND Electronic Co.,LTD
+				G315,Hua Chuang Da business Certer
+				Shen Zhen  Guang Dong  518000
+				CN
+
+50-C2-71   (hex)		SECURETECH INC
+50C271     (base 16)		SECURETECH INC
+				#304, 799 Kwanyang-dong, Dongan-gu,
+				Anyang-ci  Gyunggi-do  431-767
+				KR
+
+CC-72-0F   (hex)		Viscount Systems Inc.
+CC720F     (base 16)		Viscount Systems Inc.
+				4585 Tillicum Street
+				Burnaby  British Columbia  V5J 5K9
+				CA
+
+74-2B-62   (hex)		FUJITSU LIMITED
+742B62     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+64-3F-5F   (hex)		Exablaze
+643F5F     (base 16)		Exablaze
+				Level 6
+				Sydney  NSW  2000
+				AU
+
+8C-2F-39   (hex)		IBA Dosimetry GmbH
+8C2F39     (base 16)		IBA Dosimetry GmbH
+				Bahnhofstrasse 5
+				Schwarzenbruck    90592
+				DE
+
+C0-A0-BB   (hex)		D-Link International
+C0A0BB     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+2C-CD-69   (hex)		Aqavi.com
+2CCD69     (base 16)		Aqavi.com
+				3 Riverway
+				Houston  TX  77056
+				US
+
+F4-5F-69   (hex)		Matsufu Electronics distribution Company
+F45F69     (base 16)		Matsufu Electronics distribution Company
+				Suites 1601~3, Kinwick Centre, 32 Hollywood Road, Hong Kong
+				Hong Kong    
+				HK
+
+28-A1-EB   (hex)		ETEK TECHNOLOGY (SHENZHEN) CO.,LTD
+28A1EB     (base 16)		ETEK TECHNOLOGY (SHENZHEN) CO.,LTD
+				A505-506、A509 Room,A5 Floor, Academy Of International Technology Innovation, Keji Nan 10th Road, Hi-Tech Industrial Park, Shenzhen, P.R.C.
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+B8-F8-28   (hex)		Changshu Gaoshida Optoelectronic Technology Co. Ltd.
+B8F828     (base 16)		Changshu Gaoshida Optoelectronic Technology Co. Ltd.
+				Baimao Industrail Park Changshu  Jiangsu
+				Changshu  Jiangsu  215500
+				CN
+
+3C-1A-57   (hex)		Cardiopulmonary Corp
+3C1A57     (base 16)		Cardiopulmonary Corp
+				200 Cascade Blvd
+				Milford  CT  06460
+				US
+
+54-1B-5D   (hex)		Techno-Innov
+541B5D     (base 16)		Techno-Innov
+				35 rue du champ Blanc
+				Meyzieu  Rhône  69330
+				FR
+
+9C-E7-BD   (hex)		Winduskorea co., Ltd
+9CE7BD     (base 16)		Winduskorea co., Ltd
+				RM313, Seoul-Garden Bldg,
+				Seoul    152-828
+				KR
+
+38-42-A6   (hex)		Ingenieurbuero Stahlkopf
+3842A6     (base 16)		Ingenieurbuero Stahlkopf
+				Ingenieurbuero Stahlkopf
+				Glockengießerweg 2  Bielefeld  33659
+				DE
+
+24-80-00   (hex)		Westcontrol AS
+248000     (base 16)		Westcontrol AS
+				Breivikvg 7
+				Joerpeland  -  4100
+				US
+
+1C-4B-B9   (hex)		SMG ENTERPRISE, LLC
+1C4BB9     (base 16)		SMG ENTERPRISE, LLC
+				865 LOVE ST
+				ELK GROVE VILLAGE  IL  60007
+				US
+
+34-61-78   (hex)		The Boeing Company
+346178     (base 16)		The Boeing Company
+				325 James S. McDonnell Blvd
+				Hazelwood  MO  63042-2513
+				US
+
+14-46-E4   (hex)		AVISTEL
+1446E4     (base 16)		AVISTEL
+				15 rue Auguste Bartholdi
+				Carrieres sur Seine    78420
+				FR
+
+D0-95-C7   (hex)		Pantech Co., Ltd.
+D095C7     (base 16)		Pantech Co., Ltd.
+				110-1 Ongjeong-Ri, Tongjin-Eup
+				Gimpo-Si  Gyounggi-Do  415-865
+				KR
+
+D0-2C-45   (hex)		littleBits Electronics, Inc.
+D02C45     (base 16)		littleBits Electronics, Inc.
+				60 E. 11th Street
+				New York  NY  10003
+				US
+
+04-4F-8B   (hex)		Adapteva, Inc.
+044F8B     (base 16)		Adapteva, Inc.
+				1666 Massachusetts Ave
+				Lexington  MA  02420
+				US
+
+B4-A8-2B   (hex)		Histar Digital Electronics Co., Ltd.
+B4A82B     (base 16)		Histar Digital Electronics Co., Ltd.
+				 Room 616,Block A,
+				Shenzhen  Baoan  518133
+				CN
+
+28-4D-92   (hex)		Luminator
+284D92     (base 16)		Luminator
+				900 Klein Road
+				Plano  Texas  75074
+				US
+
+54-FB-58   (hex)		WISEWARE, Lda
+54FB58     (base 16)		WISEWARE, Lda
+				Centro Social e Administrativo da ZIV
+				Zona Industrial de Vagos  Portugal  3840-385
+				PT
+
+94-0B-D5   (hex)		Himax Technologies, Inc
+940BD5     (base 16)		Himax Technologies, Inc
+				No.26, Zilian Rd., Xinshi Dist.
+				Tainan City    741
+				TW
+
+E0-D1-E6   (hex)		Aliph dba Jawbone
+E0D1E6     (base 16)		Aliph dba Jawbone
+				99 Rhode Island Street
+				San Francisco  California  94103
+				US
+
+D8-2D-9B   (hex)		Shenzhen G.Credit Communication Technology Co., Ltd
+D82D9B     (base 16)		Shenzhen G.Credit Communication Technology Co., Ltd
+				4/F, Suite A, XinNengYuan Building, 2239 Nanhai Rd., Nanshan Dist., Shenzhen, Guangdong,China
+				Shenzhen  Guangdong  518054
+				CN
+
+70-9B-FC   (hex)		Bryton Inc.
+709BFC     (base 16)		Bryton Inc.
+				6F., No. 100, Zhouzi St., Neihu Dist.
+				Taipei City    11493
+				US
+
+AC-E4-2E   (hex)		SK hynix
+ACE42E     (base 16)		SK hynix
+				SK u-Tower, 25-1, Jeongja-dong, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-844
+				KR
+
+78-FE-41   (hex)		Socus networks
+78FE41     (base 16)		Socus networks
+				2F.-2, No.215, Sec. 2, Chengde Rd., Datong Dist.,
+				Taipei City    103
+				TW
+
+20-57-21   (hex)		Salix Technology CO., Ltd.
+205721     (base 16)		Salix Technology CO., Ltd.
+				5F., No. 16, Lane 77, Hsing Ai Road
+				Taipei    114
+				TW
+
+88-36-12   (hex)		SRC Computers, LLC
+883612     (base 16)		SRC Computers, LLC
+				4240 N. Nevada Avenue
+				Colorado Springs  CO  80907
+				US
+
+08-35-71   (hex)		CASwell INC.
+083571     (base 16)		CASwell INC.
+				8F,No.242,Bo-Ai St., Shu-Lin Dist.,New Taipei City ,Taiwan.
+				New Taipei City  Taiwan  23845
+				TW
+
+98-76-B6   (hex)		Adafruit
+9876B6     (base 16)		Adafruit
+				150 Varick st
+				New York  NY  10013
+				US
+
+50-3C-C4   (hex)		Lenovo Mobile Communication Technology Ltd.
+503CC4     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,
+				Xiamen  Fujian  361006
+				US
+
+2C-7B-84   (hex)		OOO Petr Telegin
+2C7B84     (base 16)		OOO Petr Telegin
+				Gagarin avenue, 37, build P1
+				  Nizhny Novgorod  603009
+				RU
+
+A4-C0-C7   (hex)		ShenZhen Hitom Communication Technology Co..LTD
+A4C0C7     (base 16)		ShenZhen Hitom Communication Technology Co..LTD
+				Room 110,Unit A,No.1 Chuangye Building,43# YanShan Road,Shekou Area
+				ShenZhen  GuangDong  518052
+				CN
+
+30-61-12   (hex)		PAV GmbH
+306112     (base 16)		PAV GmbH
+				Georg-Kaindl-Straße 11
+				Otterfing    83624
+				DE
+
+78-9F-4C   (hex)		HOERBIGER Elektronik GmbH
+789F4C     (base 16)		HOERBIGER Elektronik GmbH
+				Justinus-Kernerstr. 7
+				Ammerbuch  Baden-Wuerttemberg  D-72119
+				DE
+
+18-10-4E   (hex)		CEDINT-UPM
+18104E     (base 16)		CEDINT-UPM
+				Campus de Montegancedo
+				  Madrid  
+				ES
+
+9C-14-65   (hex)		Edata Elektronik San. ve Tic. A.Ş.
+9C1465     (base 16)		Edata Elektronik San. ve Tic. A.Ş.
+				Tantavi Mahallesi Menteşoğlu Cad.
+				İstanbul  -  34764
+				TR
+
+4C-55-CC   (hex)		Zentri Pty Ltd
+4C55CC     (base 16)		Zentri Pty Ltd
+				Level 9, 191 Clarence St,
+				Sydney  NSW  2000
+				AU
+
+00-C5-DB   (hex)		Datatech Sistemas Digitales Avanzados SL
+00C5DB     (base 16)		Datatech Sistemas Digitales Avanzados SL
+				Cardenal Herrera Oria 165
+				  Madrid  28034
+				ES
+
+8C-F9-45   (hex)		Power Automation pte Ltd
+8CF945     (base 16)		Power Automation pte Ltd
+				28 Ayer Rajah Crescent
+				    139959
+				SG
+
+F8-42-FB   (hex)		Yasuda Joho Co.,ltd.
+F842FB     (base 16)		Yasuda Joho Co.,ltd.
+				1-11-1
+				Minato-ku  Tokyo  105-0022
+				JP
+
+88-73-98   (hex)		K2E Tekpoint
+887398     (base 16)		K2E Tekpoint
+				201,Winstower,278-51,Sungsoo2ga 3dong,Sungdong-gu,Seoul,S.Korea,133-123
+				Seoul  Sungdong-gu  133-123
+				KR
+
+2C-92-2C   (hex)		Kishu Giken Kogyou Company Ltd,.
+2C922C     (base 16)		Kishu Giken Kogyou Company Ltd,.
+				466 Nunohiki
+				Wakayama city  Wakayama prefecture  6410015
+				JP
+
+D8-FE-E3   (hex)		D-Link International
+D8FEE3     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+3C-97-7E   (hex)		IPS Technology Limited
+3C977E     (base 16)		IPS Technology Limited
+				7 Floor,E  block,Dong Hai Wang Building
+				Shenzhen  Guangodng  518000
+				CN
+
+A4-FB-8D   (hex)		Hangzhou Dunchong Technology Co.Ltd
+A4FB8D     (base 16)		Hangzhou Dunchong Technology Co.Ltd
+				Yitian Square 1#401A
+				hangzhou  zhejiang  310051
+				US
+
+F4-CD-90   (hex)		Vispiron Rotec GmbH
+F4CD90     (base 16)		Vispiron Rotec GmbH
+				Frankfurter Ring 224
+				München  Bayern  80807
+				DE
+
+80-6C-8B   (hex)		KAESER KOMPRESSOREN AG
+806C8B     (base 16)		KAESER KOMPRESSOREN AG
+				Carl-Kaeser-Strasse 26
+				Coburg  Bavaria  96450
+				DE
+
+04-3D-98   (hex)		ChongQing QingJia Electronics CO.,LTD
+043D98     (base 16)		ChongQing QingJia Electronics CO.,LTD
+				No.1,DianCe Village JiangBei District
+				  Chongqing city  400020
+				CN
+
+E0-3E-4A   (hex)		Cavanagh Group International
+E03E4A     (base 16)		Cavanagh Group International
+				9180 Four Mile Creek Rd.
+				Gainesville  GA  30506
+				US
+
+04-1B-94   (hex)		Host Mobility AB
+041B94     (base 16)		Host Mobility AB
+				Anders Personsgatan 12
+				Gothenburg  Vastra Gotaland  41664
+				SE
+
+A0-CE-C8   (hex)		CE LINK LIMITED
+A0CEC8     (base 16)		CE LINK LIMITED
+				2/F, Building G, Licheng Tech. Ind. Zone
+				Shenzhen  Guangdong  518104
+				CN
+
+90-7A-28   (hex)		Beijing Morncloud Information And Technology Co. Ltd.
+907A28     (base 16)		Beijing Morncloud Information And Technology Co. Ltd.
+				A#1107, XiaoYun center
+				Chaoyang District  Beijing  100125
+				CN
+
+10-01-CA   (hex)		Ashley Butterworth
+1001CA     (base 16)		Ashley Butterworth
+				P.O. Box 3410
+				Santa Clara  CA  95055
+				US
+
+24-6A-AB   (hex)		IT-IS International
+246AAB     (base 16)		IT-IS International
+				1 Wainstones Court
+				Middlesbrough  Cleveland  TS9 5JY
+				GB
+
+FC-4B-BC   (hex)		Sunplus Technology Co., Ltd.
+FC4BBC     (base 16)		Sunplus Technology Co., Ltd.
+				No.19, Innovation First Road
+				Hsinchu City    300
+				TW
+
+50-A0-BF   (hex)		Alba Fiber Systems Inc.
+50A0BF     (base 16)		Alba Fiber Systems Inc.
+				265 E. Merrick Rd
+				Valley Stream  NY  11580
+				US
+
+B8-36-D8   (hex)		Videoswitch
+B836D8     (base 16)		Videoswitch
+				Uspallata 3579
+				Buenos Aires  Capital Federal  C1437JCS
+				AR
+
+DC-6F-00   (hex)		Livescribe, Inc.
+DC6F00     (base 16)		Livescribe, Inc.
+				7677 Oakport Street
+				Oakland  California  94621
+				US
+
+54-E3-B0   (hex)		JVL Industri Elektronik
+54E3B0     (base 16)		JVL Industri Elektronik
+				Blokken 42
+				Birkeroed  Sjaelland  DK-3460
+				DK
+
+80-4B-20   (hex)		Ventilation Control
+804B20     (base 16)		Ventilation Control
+				Kronenstrasse 34
+				Villingen-Schwenningen  Baden-Wuerttemberg  78054
+				DE
+
+28-79-94   (hex)		Realplay Digital Technology(Shenzhen) Co.,Ltd
+287994     (base 16)		Realplay Digital Technology(Shenzhen) Co.,Ltd
+				7/F,Building E,SDG Information Port ,Kefeng Rd.,Hi-tech
+				Shenzhen  Guangdong  518057
+				CN
+
+10-7A-86   (hex)		U&U ENGINEERING INC.
+107A86     (base 16)		U&U ENGINEERING INC.
+				No.15, Gaoyang S. Rd
+				Taoyuan County    325-44
+				TW
+
+40-BD-9E   (hex)		Physio-Control, Inc
+40BD9E     (base 16)		Physio-Control, Inc
+				11811 Willows Rd NE
+				Redmond  WA  98052
+				US
+
+6C-57-79   (hex)		Aclima, Inc.
+6C5779     (base 16)		Aclima, Inc.
+				10 Lombard Street
+				San Francisco  California  94111
+				US
+
+C0-DA-74   (hex)		Hangzhou Sunyard Technology Co., Ltd.
+C0DA74     (base 16)		Hangzhou Sunyard Technology Co., Ltd.
+				No.3888 Jiangnan Ave, Binjiang District,
+				Hangzhou  Zhejiang  310053
+				CN
+
+18-D6-CF   (hex)		Kurth Electronic GmbH
+18D6CF     (base 16)		Kurth Electronic GmbH
+				Mühleweg 11
+				Eningen    72800
+				DE
+
+F4-81-39   (hex)		CANON INC.
+F48139     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+18-36-FC   (hex)		Elecsys International Corporation
+1836FC     (base 16)		Elecsys International Corporation
+				846 N Mart-Way Court
+				Olathe  KS  66061
+				US
+
+88-23-64   (hex)		Watchnet DVR Inc
+882364     (base 16)		Watchnet DVR Inc
+				Unit 5 - 351 Ferrier St.
+				Markham  Ontario  L3R 5Z2
+				CA
+
+58-1C-BD   (hex)		Affinegy
+581CBD     (base 16)		Affinegy
+				1705 S. Capital of Texas Hwy. Ste 310
+				Austin  Texas  78746
+				US
+
+28-4F-CE   (hex)		Liaoning Wontel Science and Technology Development Co.,Ltd.
+284FCE     (base 16)		Liaoning Wontel Science and Technology Development Co.,Ltd.
+				A704 Floor TaiHe building
+				Shenyang  Liaoning  110000
+				CN
+
+04-8D-38   (hex)		Netcore Technology Inc.
+048D38     (base 16)		Netcore Technology Inc.
+				9F,B block,Tsinghua Information Guard
+				Shenzhen  Guangdong  518057
+				CN
+
+2C-94-64   (hex)		Cincoze Co., Ltd.
+2C9464     (base 16)		Cincoze Co., Ltd.
+				7F., No. 4 Aly. 1 Ln. 235, Baociao Rd.,
+				New Taipei City    23145
+				US
+
+30-65-EC   (hex)		Wistron (ChongQing)
+3065EC     (base 16)		Wistron (ChongQing)
+				No.F08/F09,D zone,Konggang Functional Zone
+				  ChongQing  401120
+				CN
+
+54-2C-EA   (hex)		PROTECTRON
+542CEA     (base 16)		PROTECTRON
+				140 zone industriel
+				  CASABLANCA  18600
+				MA
+
+94-B8-C5   (hex)		RuggedCom Inc.
+94B8C5     (base 16)		RuggedCom Inc.
+				300 Applewood Crescent
+				Concord  Ontario  L4K 5C7
+				CA
+
+DC-82-5B   (hex)		JANUS, spol. s r.o.
+DC825B     (base 16)		JANUS, spol. s r.o.
+				Sarajevska 8
+				Prague  Czech Republic  12000
+				CZ
+
+9C-A5-77   (hex)		Osorno Enterprises Inc.
+9CA577     (base 16)		Osorno Enterprises Inc.
+				976 Elgin Ave
+				Winnipeg  MB  R3E 1B4
+				CA
+
+C0-43-01   (hex)		Epec Oy
+C04301     (base 16)		Epec Oy
+				P.O. Box 194
+				Seinäjoki    60101
+				FI
+
+E0-7C-62   (hex)		Whistle Labs, Inc.
+E07C62     (base 16)		Whistle Labs, Inc.
+				251 Rhode Island Street, Suite 211
+				San Francisco  CA  94013
+				US
+
+F0-7F-0C   (hex)		Leopold Kostal GmbH &Co. KG
+F07F0C     (base 16)		Leopold Kostal GmbH &Co. KG
+				An der Bellmerei 10
+				Luedenscheid  NRW  D-58513
+				DE
+
+4C-62-55   (hex)		SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.
+4C6255     (base 16)		SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.
+				Carretera Guadalajara-chapala km 15.5 #45
+				TLAJOMULCO  JALISCO  45640
+				MX
+
+08-27-19   (hex)		APS systems/electronic AG
+082719     (base 16)		APS systems/electronic AG
+				Neumatt 4
+				Niederbuchsiten  SO  4626
+				CH
+
+50-5A-C6   (hex)		GUANGDONG SUPER TELECOM CO.,LTD.
+505AC6     (base 16)		GUANGDONG SUPER TELECOM CO.,LTD.
+				4/F,NO.1025-1027 Gaopu Rd
+				Guangzhou  Guangdong  510663
+				CN
+
+9C-79-AC   (hex)		Suntec Software(Shanghai) Co., Ltd.
+9C79AC     (base 16)		Suntec Software(Shanghai) Co., Ltd.
+				17F New Hualian Mansion
+				  Shanghai  200020
+				CN
+
+4C-96-14   (hex)		Juniper Networks
+4C9614     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+B8-63-BC   (hex)		ROBOTIS, Co, Ltd
+B863BC     (base 16)		ROBOTIS, Co, Ltd
+				#1506 Ace high End Tower 3, 371-50
+				Seoul    153-787
+				KR
+
+98-0D-2E   (hex)		HTC Corporation
+980D2E     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+C4-19-EC   (hex)		Qualisys AB
+C419EC     (base 16)		Qualisys AB
+				Packhusgatan 6
+				Gothenburg    41113
+				SE
+
+60-4A-1C   (hex)		SUYIN Corporation
+604A1C     (base 16)		SUYIN Corporation
+				No.377,Fude 1st Rd
+				Taipei    221
+				TW
+
+D4-64-F7   (hex)		CHENGDU USEE DIGITAL TECHNOLOGY CO., LTD
+D464F7     (base 16)		CHENGDU USEE DIGITAL TECHNOLOGY CO., LTD
+				NO.6 CHUANGYE ROAD
+				CHENGDU  SICHUAN  610041
+				CN
+
+74-D0-2B   (hex)		ASUSTek COMPUTER INC.
+74D02B     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+60-1E-02   (hex)		EltexAlatau
+601E02     (base 16)		EltexAlatau
+				Ibragimova 9
+				Almaty  Province  050032
+				KZ
+
+E0-C6-B3   (hex)		MilDef AB
+E0C6B3     (base 16)		MilDef AB
+				Box 22079
+				Helsingborg  Skane  25022
+				SE
+
+64-72-D8   (hex)		GooWi Technology Co.,Limited
+6472D8     (base 16)		GooWi Technology Co.,Limited
+				Unit C8.,9/F,Hongming Fatoty Building
+				99 How Ming Street  Kwun Tong  999077
+				HK
+
+60-60-1F   (hex)		SZ DJI TECHNOLOGY CO.,LTD
+60601F     (base 16)		SZ DJI TECHNOLOGY CO.,LTD
+				6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd
+				shenzhen  guangdong  518057
+				CN
+
+5C-84-86   (hex)		Brightsource Industries Israel LTD
+5C8486     (base 16)		Brightsource Industries Israel LTD
+				11 Kiryat Mada st
+				Jerusalem    91450
+				IL
+
+50-CD-32   (hex)		NanJing Chaoran Science & Technology Co.,Ltd.
+50CD32     (base 16)		NanJing Chaoran Science & Technology Co.,Ltd.
+				 Block C,Floor 5,Tianzexingwang Building
+				NanJing City  JiangSu Province  210019
+				CN
+
+BC-BA-E1   (hex)		AREC Inc.
+BCBAE1     (base 16)		AREC Inc.
+				3F, No.367, Sec.2, Wenhua Rd
+				 Banqiao Dist  New Taipei City  220
+				TW
+
+18-FA-6F   (hex)		ISC applied systems corp
+18FA6F     (base 16)		ISC applied systems corp
+				295 Labrosse
+				Pointe-claire  QC  H9R-1A3
+				CA
+
+A0-1C-05   (hex)		NIMAX TELECOM CO.,LTD.
+A01C05     (base 16)		NIMAX TELECOM CO.,LTD.
+				1F. NO.308-7,SEC.1,DATONG RD
+				NEW TAIPEI CITY    221
+				TW
+
+60-E0-0E   (hex)		SHINSEI ELECTRONICS CO LTD
+60E00E     (base 16)		SHINSEI ELECTRONICS CO LTD
+				2-6-25
+				Amagasaki  Hyogo  660-0805
+				JP
+
+54-54-14   (hex)		Digital RF Corea, Inc
+545414     (base 16)		Digital RF Corea, Inc
+				2 Floor, SeMin B/D, 201, Jangdari-ro
+				Suwon-si  Gyeonggi-do  442-833
+				KR
+
+24-EB-65   (hex)		SAET I.S. S.r.l.
+24EB65     (base 16)		SAET I.S. S.r.l.
+				Via Leinì 1/B
+				San Maurizio C.se  TO  10077
+				IT
+
+D0-F2-7F   (hex)		SteadyServ Technoligies, LLC
+D0F27F     (base 16)		SteadyServ Technoligies, LLC
+				12895 Brighton Avenue
+				Carmel  IN  46032
+				US
+
+E8-94-F6   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+E894F6     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+18-84-10   (hex)		CoreTrust Inc.
+188410     (base 16)		CoreTrust Inc.
+				14F Saman Bldg. 945 Daechi-dong
+				Seoul  Republic of Korea  135-280
+				KR
+
+FC-22-9C   (hex)		Han Kyung I Net Co.,Ltd.
+FC229C     (base 16)		Han Kyung I Net Co.,Ltd.
+				3F,Seung Eun Bldg
+				Yu Seong-Gu  Dae Jeon  305-335
+				KR
+
+18-32-A2   (hex)		LAON TECHNOLOGY CO., LTD.
+1832A2     (base 16)		LAON TECHNOLOGY CO., LTD.
+				#1212 HO, BIZ CENTER, SKn TECHNOPARK
+				SEONGNAM  KYOUNGGI DO  462-721
+				KR
+
+D4-A4-99   (hex)		InView Technology Corporation
+D4A499     (base 16)		InView Technology Corporation
+				8900 Shoal Creek Blvd
+				Austin  TX  78757
+				US
+
+08-48-2C   (hex)		Raycore Taiwan Co., LTD.
+08482C     (base 16)		Raycore Taiwan Co., LTD.
+				3F-5, No.351, Sec.2, Zongshan Rd
+				New Taipei city    23504
+				TW
+
+DC-2B-CA   (hex)		Zera GmbH
+DC2BCA     (base 16)		Zera GmbH
+				Hauptstrasse 392
+				Koenigswinter  NRW  53639
+				DE
+
+94-98-A2   (hex)		Shanghai LISTEN TECH.LTD
+9498A2     (base 16)		Shanghai LISTEN TECH.LTD
+				7F,A#,NO.3699,Gonghexin Road
+				SHANGHAI  SHANGHAI  200435
+				CN
+
+E0-ED-C7   (hex)		Shenzhen Friendcom Technology Development Co., Ltd
+E0EDC7     (base 16)		Shenzhen Friendcom Technology Development Co., Ltd
+				6/F,17 Building, Guangqian Industrial Park,
+				Nanshan District, Shen Zhen CIty  Guang Dong  518055
+				CN
+
+B4-DD-15   (hex)		ControlThings Oy Ab
+B4DD15     (base 16)		ControlThings Oy Ab
+				Werner Söderströmin katu 24
+				Porvoo  Finland  06100
+				FI
+
+DC-1D-D4   (hex)		Microstep-MIS spol. s r.o.
+DC1DD4     (base 16)		Microstep-MIS spol. s r.o.
+				Cavojskeho 1
+				Bratislava    84104
+				SK
+
+FC-DD-55   (hex)		Shenzhen WeWins wireless Co.,Ltd
+FCDD55     (base 16)		Shenzhen WeWins wireless Co.,Ltd
+				6/F.,B Wing,Yuehai Piaza,Nanhai Road
+				Shenzhen  Guangdong  518000
+				CN
+
+B0-17-43   (hex)		EDISON GLOBAL CIRCUITS LLC
+B01743     (base 16)		EDISON GLOBAL CIRCUITS LLC
+				1475  Sawdust Rd
+				Spring  TX  77380-2974
+				US
+
+D0-BE-2C   (hex)		CNSLink Co., Ltd.
+D0BE2C     (base 16)		CNSLink Co., Ltd.
+				room 807, Jungang Induspia 5
+				Seongnam  Gyeonggi  462-807
+				US
+
+40-51-6C   (hex)		Grandex International Corporation
+40516C     (base 16)		Grandex International Corporation
+				4F, 525 Chung Cheng Road
+				Hsin Tien Dist.  New Taipei City  231
+				TW
+
+C0-88-5B   (hex)		SnD Tech Co., Ltd.
+C0885B     (base 16)		SnD Tech Co., Ltd.
+				 1140-4 Triple Tower C-406
+				Bucheon Si  Gyeonggi-Do  420-852
+				KR
+
+3C-FB-96   (hex)		Emcraft Systems LLC
+3CFB96     (base 16)		Emcraft Systems LLC
+				2191 S. El Camino Real
+				Oceanside  CA  92054
+				US
+
+84-62-23   (hex)		Shenzhen Coship Electronics Co., Ltd.
+846223     (base 16)		Shenzhen Coship Electronics Co., Ltd.
+				Rainbow Bldg., North, Hi-Tech Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+1C-FA-68   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+1CFA68     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+08-1F-3F   (hex)		WondaLink Inc.
+081F3F     (base 16)		WondaLink Inc.
+				2F, No. 23, R&D Road 2
+				Hsinchu    300
+				TW
+
+18-53-E0   (hex)		Hanyang Digitech Co.Ltd
+1853E0     (base 16)		Hanyang Digitech Co.Ltd
+				103, BANWOL-DONG, HWASEONG-SI, KYUNGGI-DO, KOREA
+				HWASEONG  KYUNGGI  445-330
+				KR
+
+00-C1-4F   (hex)		DDL Co,.ltd.
+00C14F     (base 16)		DDL Co,.ltd.
+				6F AFT BLDG.
+				SAPPORO  HOKKAIDO  060-0035
+				JP
+
+2C-26-C5   (hex)		zte corporation
+2C26C5     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+10-5F-06   (hex)		Actiontec Electronics, Inc
+105F06     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+08-79-99   (hex)		AIM GmbH
+087999     (base 16)		AIM GmbH
+				Sasbacherstraße 2
+				Freiburg  BW  79111
+				US
+
+C0-11-A6   (hex)		Fort-Telecom ltd.
+C011A6     (base 16)		Fort-Telecom ltd.
+				Hrustalnaya 8a
+				  Perm  614107
+				RU
+
+C0-4A-00   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+C04A00     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+04-5F-A7   (hex)		Shenzhen Yichen Technology Development Co.,LTD
+045FA7     (base 16)		Shenzhen Yichen Technology Development Co.,LTD
+				5/F Honghualing 2nd Industry Zone,Xili Town
+				Shenzhen  Guangdong  518055
+				CN
+
+94-C9-62   (hex)		Teseq AG
+94C962     (base 16)		Teseq AG
+				Nordstrasse 11F
+				Luterbach  Solothurn  4542
+				CH
+
+DC-2A-14   (hex)		Shanghai Longjing Technology Co.
+DC2A14     (base 16)		Shanghai Longjing Technology Co.
+				689 Chundong Road, Minhang District
+				  Shanghai  201108
+				CN
+
+68-86-E7   (hex)		Orbotix, Inc.
+6886E7     (base 16)		Orbotix, Inc.
+				1155 Canyon Blvd.
+				Boulder  CO  80302
+				US
+
+C0-5E-6F   (hex)		V. Stonkaus firma Kodinis Raktas
+C05E6F     (base 16)		V. Stonkaus firma Kodinis Raktas
+				Ateities 10
+				  Vilnius  08303
+				LT
+
+C0-B8-B1   (hex)		BitBox Ltd
+C0B8B1     (base 16)		BitBox Ltd
+				Whitney Road
+				Basingstoke  Hampshire  RG24 8NS
+				GB
+
+F8-2E-DB   (hex)		RTW GmbH & Co. KG
+F82EDB     (base 16)		RTW GmbH & Co. KG
+				Am Wassermann 25
+				Cologne  NRW  50829
+				DE
+
+80-8B-5C   (hex)		Shenzhen Runhuicheng Technology Co., Ltd
+808B5C     (base 16)		Shenzhen Runhuicheng Technology Co., Ltd
+				315.3rd Floor Taoyuan Commercial Building A2 ridgepole Guang Qian Industrial Estate XiLi
+				Shenzhen  Guangdong  518052
+				CN
+
+D8-19-CE   (hex)		Telesquare
+D819CE     (base 16)		Telesquare
+				670, Sampyeong-dong, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+E0-CE-C3   (hex)		ASKEY COMPUTER CORP
+E0CEC3     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+38-F5-97   (hex)		home2net GmbH
+38F597     (base 16)		home2net GmbH
+				Im Haslet 42
+				Woerth/Donau  Bayern  93086
+				DE
+
+80-7B-1E   (hex)		Corsair Memory, Inc.
+807B1E     (base 16)		Corsair Memory, Inc.
+				47100 Bayside Parkway
+				Fremont  CA  94538
+				US
+
+B4-AB-2C   (hex)		MtM Technology Corporation
+B4AB2C     (base 16)		MtM Technology Corporation
+				12F, No. 186, Fuxing Road
+				Taoyuan City  Taoyuan County  33066
+				TW
+
+74-37-2F   (hex)		Tongfang Shenzhen Cloudcomputing Technology Co.,Ltd
+74372F     (base 16)		Tongfang Shenzhen Cloudcomputing Technology Co.,Ltd
+				4,1 Building,FinanceBase,NO.8KeFaRoad,Science park
+				ShenZhen City  GuangDong  518057
+				US
+
+F0-21-9D   (hex)		Cal-Comp Electronics & Communications Company Ltd.
+F0219D     (base 16)		Cal-Comp Electronics & Communications Company Ltd.
+				No.147, Sec. 3, Beishen Rd
+				Shenkeng Dist  New Taipei City  ---
+				TW
+
+18-17-25   (hex)		Cameo Communications, Inc.
+181725     (base 16)		Cameo Communications, Inc.
+				No. 276, Sinhu 1st Rd., Neihu District,
+				Taipei    114
+				TW
+
+84-62-A6   (hex)		EuroCB (Phils), Inc.
+8462A6     (base 16)		EuroCB (Phils), Inc.
+				SFB No.2
+				Lapulapu CIty  Cebu  6015
+				PH
+
+E4-F3-65   (hex)		Time-O-Matic, Inc.
+E4F365     (base 16)		Time-O-Matic, Inc.
+				1015 Maple St.
+				Danville  IL  61832
+				US
+
+DC-C0-DB   (hex)		Shenzhen Kaiboer Technology Co., Ltd.
+DCC0DB     (base 16)		Shenzhen Kaiboer Technology Co., Ltd.
+				4/F, No. 11 Bldg., Yusheng Industrial Park, No. 467, Xixiang Sec.,
+				Shenzhen  Guangdong  518126
+				CN
+
+AC-5D-10   (hex)		Pace Americas
+AC5D10     (base 16)		Pace Americas
+				1764 Automation Parkway
+				San Jose  Ca  95131
+				US
+
+FC-62-6E   (hex)		Beijing MDC Telecom
+FC626E     (base 16)		Beijing MDC Telecom
+				26 Xiaoyun Road #B2808, Chaoyang
+				  Beijing  100016
+				CN
+
+84-C8-B1   (hex)		Incognito Software Systems Inc.
+84C8B1     (base 16)		Incognito Software Systems Inc.
+				#500 - 375 Water St
+				Vancouver  BC - British Columbia  V6B 5C6
+				CA
+
+E8-A3-64   (hex)		Signal Path International / Peachtree Audio
+E8A364     (base 16)		Signal Path International / Peachtree Audio
+				2045 120th Ave NE
+				Bellevue  Washington  98005
+				US
+
+BC-51-FE   (hex)		Swann communications Pty Ltd
+BC51FE     (base 16)		Swann communications Pty Ltd
+				Unit 13
+				Port Melbourne  Victoria  3207
+				AU
+
+88-F4-90   (hex)		Jetmobile Pte Ltd
+88F490     (base 16)		Jetmobile Pte Ltd
+				541 Orchard Road
+				Singapore    238881
+				SG
+
+1C-91-79   (hex)		Integrated System Technologies Ltd
+1C9179     (base 16)		Integrated System Technologies Ltd
+				Suite 5 Birch House
+				Aldridge  West Midlands  WS9 0NF
+				GB
+
+A0-BA-B8   (hex)		Pixon Imaging
+A0BAB8     (base 16)		Pixon Imaging
+				9530 Towne Center Dr.
+				San Diego  CA  92121
+				US
+
+74-E4-24   (hex)		APISTE CORPORATION
+74E424     (base 16)		APISTE CORPORATION
+				1-4-16 Dojimahama, Kita-ku
+				Osaka  Japan  530-0004
+				JP
+
+24-11-D0   (hex)		Chongqing Ehs Science and Technology Development Co.,Ltd.
+2411D0     (base 16)		Chongqing Ehs Science and Technology Development Co.,Ltd.
+				Saturn Business Center C3-15-7,Starlight No.5 Street
+				  Chongqing  400060
+				CN
+
+B4-61-FF   (hex)		Lumigon A/S
+B461FF     (base 16)		Lumigon A/S
+				Baadehavnsgade 2A
+				Copenhagen SV  Denmark  2450
+				DK
+
+A0-A1-30   (hex)		DLI Taiwan Branch office
+A0A130     (base 16)		DLI Taiwan Branch office
+				No.18-5, No.738. Zhong Zheng Rd
+				Taipei New City    23511
+				TW
+
+30-21-5B   (hex)		Shenzhen Ostar Display Electronic Co.,Ltd
+30215B     (base 16)		Shenzhen Ostar Display Electronic Co.,Ltd
+				Room218, CASTD Incubator Building, High-tech South Street No.1,
+				Shenzhen  Guangdong  518057
+				CN
+
+34-FA-40   (hex)		Guangzhou Robustel Technologies Co., Limited
+34FA40     (base 16)		Guangzhou Robustel Technologies Co., Limited
+				B301, Tianchang Shangmaoyuan
+				Guangzhou  Guangdong  510660
+				CN
+
+1C-5A-6B   (hex)		Philips Electronics Nederland BV
+1C5A6B     (base 16)		Philips Electronics Nederland BV
+				PO BOX 80045
+				 Eindhoven    5600 JZ
+				NL
+
+A8-75-D6   (hex)		FreeTek International Co., Ltd.
+A875D6     (base 16)		FreeTek International Co., Ltd.
+				Unit D, 15/F, Tai Ping Ind.Ctr., Blk 2, 55 Ting Kok Rd.,
+				Hong Kong  Hong KOng  1111
+				HK
+
+EC-E9-15   (hex)		STI Ltd
+ECE915     (base 16)		STI Ltd
+				Osborn Way
+				Hook  Hampshire  RG27 9HX
+				GB
+
+80-D7-33   (hex)		QSR Automations, Inc.
+80D733     (base 16)		QSR Automations, Inc.
+				2301 Stanley Gault Pkwy
+				Louisville  KY  40223
+				US
+
+30-3D-08   (hex)		GLINTT TES S.A.
+303D08     (base 16)		GLINTT TES S.A.
+				Beloura Office Park, Ed.10
+				Sintra    2710-693
+				PT
+
+A8-1F-AF   (hex)		KRYPTON POLSKA
+A81FAF     (base 16)		KRYPTON POLSKA
+				AL. JEROZOLIMSKIE 131
+				WARSZAWA  MAZOWIECKIE  02-304
+				PL
+
+30-D3-57   (hex)		Logosol, Inc.
+30D357     (base 16)		Logosol, Inc.
+				5041 ROBERT J. MATHEWS PARKWAY
+				EL DORADO HILLS  California  95762
+				US
+
+BC-39-A6   (hex)		CSUN System Technology Co.,LTD
+BC39A6     (base 16)		CSUN System Technology Co.,LTD
+				4-16-22,Chiyogaoka
+				Kawasaki-shi  Kanagawa Ken  2150005
+				JP
+
+EC-B5-41   (hex)		SHINANO E and E Co.Ltd.
+ECB541     (base 16)		SHINANO E and E Co.Ltd.
+				5511-6 Wada
+				Matsumoto City  Nagano  390-1242
+				JP
+
+D4-10-CF   (hex)		Huanshun Network Science and Technology Co., Ltd.
+D410CF     (base 16)		Huanshun Network Science and Technology Co., Ltd.
+				No. 218-1, North Binjiang Road
+				yuyao  zhejiang  315400
+				CN
+
+6C-B3-11   (hex)		Shenzhen Lianrui Electronics Co.,Ltd
+6CB311     (base 16)		Shenzhen Lianrui Electronics Co.,Ltd
+				Block C4 XinTang Industrial Park
+				Shenzhen  Guangdong  518000
+				CN
+
+10-A7-43   (hex)		SK Mtek Limited
+10A743     (base 16)		SK Mtek Limited
+				Flat/Rm 1808, 18F Tower II, Admirality
+				Hong Kong    
+				HK
+
+54-7F-A8   (hex)		TELCO systems, s.r.o.
+547FA8     (base 16)		TELCO systems, s.r.o.
+				Zvolenska cesta 20
+				Banska Bystrica  Slovak republic  974 05
+				SK
+
+54-74-E6   (hex)		Webtech Wireless
+5474E6     (base 16)		Webtech Wireless
+				215-4299 Canada Way
+				Burnaby  BC  V5G 1H3
+				CA
+
+C4-6D-F1   (hex)		DataGravity
+C46DF1     (base 16)		DataGravity
+				10 Tara Blvd
+				Nashua  NH  03062
+				US
+
+94-FD-2E   (hex)		Shanghai Uniscope Technologies Co.,Ltd
+94FD2E     (base 16)		Shanghai Uniscope Technologies Co.,Ltd
+				5th Floor, Building 10,
+				  Shanghai  200233
+				CN
+
+E4-C1-46   (hex)		Objetivos y Servicios de Valor A
+E4C146     (base 16)		Objetivos y Servicios de Valor A
+				C/ Monte Esquinza, 28, 1D
+				  Madrid  28017
+				ES
+
+D4-00-57   (hex)		MC Technologies GmbH
+D40057     (base 16)		MC Technologies GmbH
+				Kabelkamp 2
+				Hannover  Germany  30179
+				DE
+
+5C-E0-F6   (hex)		NIC.br- Nucleo de Informacao e Coordenacao do Ponto BR
+5CE0F6     (base 16)		NIC.br- Nucleo de Informacao e Coordenacao do Ponto BR
+				Av. das Nacoes Unidas, 11541, 7o andar
+				São Paulo  SP  04578-000
+				BR
+
+C8-3D-97   (hex)		Nokia Corporation
+C83D97     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+0C-F3-61   (hex)		Java Information
+0CF361     (base 16)		Java Information
+				Woolim Lions Valley 2nd B-1305
+				Seongnam-Si  Gyounggi-Do  462-120
+				KR
+
+60-0F-77   (hex)		SilverPlus, Inc
+600F77     (base 16)		SilverPlus, Inc
+				18 Technology Dr, #143
+				Irvine  CA  92618
+				US
+
+B0-35-8D   (hex)		Nokia Corporation
+B0358D     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+F8-E4-FB   (hex)		Actiontec Electronics, Inc
+F8E4FB     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+8C-4A-EE   (hex)		GIGA TMS INC
+8C4AEE     (base 16)		GIGA TMS INC
+				9F-2 NO.31 Lane 169 Kang-ning Street, Hsi-Chih
+				Taipei County 221    221
+				TW
+
+34-C9-9D   (hex)		EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.
+34C99D     (base 16)		EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.
+				Room 603, 6/F., Wanchai Central Building, 89 Lockhart Road, Wanchai, 
+				    
+				HK
+
+AC-E6-4B   (hex)		Shenzhen Baojia Battery Technology Co., Ltd.
+ACE64B     (base 16)		Shenzhen Baojia Battery Technology Co., Ltd.
+				Block A, Tongfuyu Industrial Zone
+				Shenzhen  Guangdong  518013
+				CN
+
+78-9F-87   (hex)		Siemens AG I IA PP PRM
+789F87     (base 16)		Siemens AG I IA PP PRM
+				Gleiwitzer Strasse 555
+				Nuremberg  Bavaria  90475
+				DE
+
+08-E5-DA   (hex)		NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD. 
+08E5DA     (base 16)		NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD. 
+				NO.1,XIANXIN MID-ROAD
+				NANJING  JIANGSU  210046
+				CN
+
+58-84-E4   (hex)		IP500 Alliance e.V.
+5884E4     (base 16)		IP500 Alliance e.V.
+				Scharnhorststraße 16
+				Berlin    10115
+				DE
+
+04-4B-FF   (hex)		GuangZhou Hedy Digital Technology Co., Ltd
+044BFF     (base 16)		GuangZhou Hedy Digital Technology Co., Ltd
+				B 701, Gaoke Building, TianHe Bei Road,
+				GuangZhou  GuangDong  510630
+				CN
+
+E8-71-8D   (hex)		Elsys Equipamentos Eletronicos Ltda
+E8718D     (base 16)		Elsys Equipamentos Eletronicos Ltda
+				Av. Torquato Tapajós, n. 1052 - B. Flores
+				Manaus  Amazonas  69.058-830
+				BR
+
+D0-73-8E   (hex)		DONG OH PRECISION CO., LTD. 
+D0738E     (base 16)		DONG OH PRECISION CO., LTD. 
+				#282 SHINGAL-RI, JICSAN-EUP
+				CHEONAN-SI  CHUNGCHEONGNAM-DO  331-814
+				KR
+
+64-C9-44   (hex)		LARK Technologies, Inc
+64C944     (base 16)		LARK Technologies, Inc
+				2570 W El Camino Real
+				Mountain View  CA  94040
+				US
+
+0C-93-FB   (hex)		BNS Solutions
+0C93FB     (base 16)		BNS Solutions
+				PO Box 508
+				Walpole  MA  02081
+				US
+
+E4-4F-5F   (hex)		EDS Elektronik Destek San.Tic.Ltd.Sti
+E44F5F     (base 16)		EDS Elektronik Destek San.Tic.Ltd.Sti
+				Meclis Mah. Hayran Sok. No:4
+				istanbul    34785
+				TR
+
+E8-6D-54   (hex)		Digit Mobile Inc
+E86D54     (base 16)		Digit Mobile Inc
+				5F.,No.550,Ruiguang Rd., Neihu Dist.,Taipei City 11492, Taiwan
+				Taipei  Taiwan  11492
+				TW
+
+90-B1-1C   (hex)		Dell Inc.
+90B11C     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-5D-03   (hex)		Xilinx, Inc
+005D03     (base 16)		Xilinx, Inc
+				2100 Logic drive
+				San Jose  CA  95124
+				US
+
+80-2F-DE   (hex)		Zurich Instruments AG
+802FDE     (base 16)		Zurich Instruments AG
+				Technoparkstrasse 1
+				  Zurich  8005
+				CH
+
+5C-38-E0   (hex)		Shanghai Super Electronics Technology Co.,LTD
+5C38E0     (base 16)		Shanghai Super Electronics Technology Co.,LTD
+				1/F Building A 39 Hongcao Road
+				Shanghai    200233
+				CN
+
+08-AF-78   (hex)		Totus Solutions, Inc.
+08AF78     (base 16)		Totus Solutions, Inc.
+				1505 Wallace Drive, Suite 102
+				Carrollton  TX  75006
+				US
+
+C8-C7-91   (hex)		Zero1.tv GmbH
+C8C791     (base 16)		Zero1.tv GmbH
+				Heinrich-Roller-Str. 16 B
+				  Berlin  10405
+				DE
+
+EC-D9-25   (hex)		RAMI
+ECD925     (base 16)		RAMI
+				7 RUE RAOUL FOLLEREAU
+				BUSSY ST GEORGES    77600
+				FR
+
+1C-94-92   (hex)		RUAG Schweiz AG
+1C9492     (base 16)		RUAG Schweiz AG
+				RUAG Defence 
+				Hombrechtikon  ZH  8634
+				CH
+
+B8-89-CA   (hex)		ILJIN ELECTRIC Co., Ltd.
+B889CA     (base 16)		ILJIN ELECTRIC Co., Ltd.
+				112-83, Annyeong-dong
+				Hwaseong  Gyeonggi-do  445-380
+				KR
+
+64-F5-0E   (hex)		Kinion Technology Company Limited
+64F50E     (base 16)		Kinion Technology Company Limited
+				ng Kon107A, 1/F, Enterprise Place,
+				    
+				HK
+
+D0-4C-C1   (hex)		SINTRONES Technology Corp.
+D04CC1     (base 16)		SINTRONES Technology Corp.
+				14F.-3, No.736, Zhongzheng Rd., Zhonghe Dist., New Taipei City 235, Taiwan (R.O.C.)
+				Taipei  N/A  235
+				TW
+
+50-3F-56   (hex)		Syncmold Enterprise Corp
+503F56     (base 16)		Syncmold Enterprise Corp
+				9F., No.168, Jiankang Rd., Zhonghe Dist.
+				Xinbei City    235
+				US
+
+8C-EE-C6   (hex)		Precepscion Pty. Ltd.
+8CEEC6     (base 16)		Precepscion Pty. Ltd.
+				Level 10
+				Melbourne  Victoria  3000
+				AU
+
+10-12-48   (hex)		ITG, Inc.
+101248     (base 16)		ITG, Inc.
+				YASUHARA BLDG 302, 1-42-6, ITABASHI,
+				ITABASHI-KU  TOKYO  173-0004
+				US
+
+18-48-D8   (hex)		Fastback Networks
+1848D8     (base 16)		Fastback Networks
+				2480 N 1st Street
+				San Jose  California  95131
+				US
+
+F0-D3-E7   (hex)		Sensometrix SA
+F0D3E7     (base 16)		Sensometrix SA
+				Rue Albert Richard 2
+				Geneva  GE  1201
+				CH
+
+B0-12-66   (hex)		Futaba-Kikaku
+B01266     (base 16)		Futaba-Kikaku
+				2-17-20-302 Yanaka
+				Taito-ku  Tokyo  110-0001
+				JP
+
+7C-C8-D0   (hex)		TIANJIN YAAN TECHNOLOGY CO., LTD.
+7CC8D0     (base 16)		TIANJIN YAAN TECHNOLOGY CO., LTD.
+				No.8 Ziyuan Road,Huayuan Industrial Zone
+				  Tianjin  300384
+				CN
+
+88-E9-17   (hex)		Tamaggo
+88E917     (base 16)		Tamaggo
+				2001 McGill College
+				Montreal  Quebec  H3A 3L3
+				CA
+
+88-61-5A   (hex)		Siano Mobile Silicon Ltd.
+88615A     (base 16)		Siano Mobile Silicon Ltd.
+				P.O. Box 8684
+				Netanya    42504
+				IL
+
+70-E2-4C   (hex)		SAE IT-systems GmbH & Co. KG
+70E24C     (base 16)		SAE IT-systems GmbH & Co. KG
+				Im Gewerbegebiet Pesch 14
+				Köln  NRW  50767
+				DE
+
+00-FD-4C   (hex)		NEVATEC
+00FD4C     (base 16)		NEVATEC
+				Lindaraja 2
+				Granada    18009
+				ES
+
+14-43-19   (hex)		Creative&Link Technology Limited
+144319     (base 16)		Creative&Link Technology Limited
+				 ROOM 704 HONG JIN GE BLD. NO.3018,YANHE SOUTH ROAD
+				Shenzhen  Guangdong  518002
+				US
+
+D8-AF-3B   (hex)		Hangzhou Bigbright Integrated communications system Co.,Ltd
+D8AF3B     (base 16)		Hangzhou Bigbright Integrated communications system Co.,Ltd
+				The 6floor ,Building1,No.1418-41,Moganshan Road
+				Hangzhou  Zhejiang  310015
+				CN
+
+60-32-F0   (hex)		Mplus technology
+6032F0     (base 16)		Mplus technology
+				#201  Gayang Dong, Gangsea Gu
+				Seoul    157-793
+				KR
+
+28-29-D9   (hex)		GlobalBeiMing technology (Beijing)Co. Ltd
+2829D9     (base 16)		GlobalBeiMing technology (Beijing)Co. Ltd
+				Beijing  Chaoyang District 8 Guanghua Road A seat 320 rooms
+				  Beijing   100026 
+				CN
+
+68-15-D3   (hex)		Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.
+6815D3     (base 16)		Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.
+				ul. Traugutta 7
+				Mielec    39-300
+				PL
+
+10-F3-DB   (hex)		Gridco Systems, Inc.
+10F3DB     (base 16)		Gridco Systems, Inc.
+				10-L Commerice Way
+				Woburn  MA   01801
+				US
+
+30-5D-38   (hex)		Beissbarth 
+305D38     (base 16)		Beissbarth 
+				Hanauer Str. 101
+				Muenchen    80993
+				DE
+
+60-D2-B9   (hex)		REALAND BIO CO., LTD.
+60D2B9     (base 16)		REALAND BIO CO., LTD.
+				Room 201A, N.set, Jinshan Bd., No.248 Wushan Rd., Tianhe District
+				Guangzhou  Guangdong  510630
+				CN
+
+30-FD-11   (hex)		MACROTECH (USA) INC.
+30FD11     (base 16)		MACROTECH (USA) INC.
+				1799 BAYSHORE HIGHWAY
+				BURLINGAME  CA  94010
+				US
+
+C4-DA-26   (hex)		NOBLEX SA
+C4DA26     (base 16)		NOBLEX SA
+				Vicente Padín Moreira 97
+				Ushuaia   Tierra del fuego  9410  
+				AR
+
+7C-C8-AB   (hex)		Acro Associates, Inc.
+7CC8AB     (base 16)		Acro Associates, Inc.
+				1990 Olivera Rd.
+				Concord  CA  94520
+				US
+
+60-19-29   (hex)		VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.
+601929     (base 16)		VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.
+				1-4F,Building 5,YuSheng Industrial Park,No.467,Section Xixiang,National Highway 107,Xixiang,Bao An District,Shenzhen,China
+				Shenzhen  Shenzhen  518000
+				CN
+
+48-B2-53   (hex)		Marketaxess Corporation
+48B253     (base 16)		Marketaxess Corporation
+				299 Park Avenue
+				New York  NY  10171
+				US
+
+74-94-3D   (hex)		AgJunction
+74943D     (base 16)		AgJunction
+				8444 N. 90th St
+				Scottsdale  AZ  85258
+				US
+
+58-CF-4B   (hex)		Lufkin Industries
+58CF4B     (base 16)		Lufkin Industries
+				811 Willow Oak Drive
+				Missouri City  Texas  77489
+				US
+
+68-B4-3A   (hex)		WaterFurnace International, Inc.
+68B43A     (base 16)		WaterFurnace International, Inc.
+				9000 Conservation Way
+				Fort Wayne  IN  46809
+				US
+
+4C-78-97   (hex)		Arrowhead Alarm Products Ltd
+4C7897     (base 16)		Arrowhead Alarm Products Ltd
+				344B Rosedale Road
+				Auckland  Auckland  0751
+				NZ
+
+44-E8-A5   (hex)		Myreka Technologies Sdn. Bhd.
+44E8A5     (base 16)		Myreka Technologies Sdn. Bhd.
+				2-13, JALAN MAYANG PASIR 1,
+				Bayan Baru  Penang  11950
+				MY
+
+D8-AF-F1   (hex)		Panasonic Appliances Company
+D8AFF1     (base 16)		Panasonic Appliances Company
+				2-3-1-2 Noji-higashi
+				Kusatsu City  Shiga  525-8555
+				JP
+
+2C-62-89   (hex)		Regenersis (Glenrothes) Ltd
+2C6289     (base 16)		Regenersis (Glenrothes) Ltd
+				1 James Watt Avenue
+				Glenrothes  Fife  KY7 4UA
+				GB
+
+58-EC-E1   (hex)		Newport Corporation
+58ECE1     (base 16)		Newport Corporation
+				1791 Deere Ave.
+				Irvine  California  92606
+				US
+
+4C-09-B4   (hex)		zte corporation
+4C09B4     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+60-D1-AA   (hex)		Vishal Telecommunications Pvt Ltd
+60D1AA     (base 16)		Vishal Telecommunications Pvt Ltd
+				25 Sitaram Building Dr D N Road
+				Mumbai  Maharastra  400001
+				IN
+
+70-9B-A5   (hex)		Shenzhen Y&D Electronics Co.,LTD.
+709BA5     (base 16)		Shenzhen Y&D Electronics Co.,LTD.
+				D zone3F,Shenzhen Academy of Aerospace Technology,Hi-Tech Park,south 10th Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+F4-54-33   (hex)		Rockwell Automation
+F45433     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+B4-89-10   (hex)		Coster T.E. S.P.A.
+B48910     (base 16)		Coster T.E. S.P.A.
+				Via San Giovanni Battista De La Salle 4/a
+				Milano  MI  20132
+				IT
+
+B0-C8-3F   (hex)		Jiangsu Cynray IOT Co., Ltd.
+B0C83F     (base 16)		Jiangsu Cynray IOT Co., Ltd.
+				Building D1, 1 Zidong road, Qixia district
+				Nanjing  Jiangsu  210000
+				CN
+
+3C-F3-92   (hex)		Virtualtek. Co. Ltd
+3CF392     (base 16)		Virtualtek. Co. Ltd
+				12F, ShinhanDm Bldg., 
+				  Seoul  121-708
+				KR
+
+B4-82-C5   (hex)		Relay2, Inc.
+B482C5     (base 16)		Relay2, Inc.
+				1525 McCarthy Blvd., 
+				Milpitas  CA  95035
+				US
+
+98-5E-1B   (hex)		ConversDigital Co., Ltd.
+985E1B     (base 16)		ConversDigital Co., Ltd.
+				5308 5th Bldg., Dong Seoul Univ.
+				Seongnam  Gyeonggi  461714
+				KR
+
+D4-8C-B5   (hex)		Cisco Systems, Inc
+D48CB5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+90-9D-E0   (hex)		Newland Design + Assoc. Inc.
+909DE0     (base 16)		Newland Design + Assoc. Inc.
+				3186-G Airway Ave.
+				Costa Mesa  CA  92626
+				US
+
+14-9F-E8   (hex)		Lenovo Mobile Communication Technology Ltd.
+149FE8     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone
+				Xiamen  Fujian  361006
+				CN
+
+BC-D9-40   (hex)		ASR Co,.Ltd.
+BCD940     (base 16)		ASR Co,.Ltd.
+				1-3-1 Sotokanda Chiyoda-ku
+				Tokyo    101-0021
+				JP
+
+04-9C-62   (hex)		BMT Medical Technology s.r.o.
+049C62     (base 16)		BMT Medical Technology s.r.o.
+				Cejl 50
+				Brno    65660
+				CZ
+
+0C-2A-69   (hex)		electric imp, incorporated
+0C2A69     (base 16)		electric imp, incorporated
+				5050 El Camino Real, Ste 221
+				Los Altos  California  94022
+				US
+
+C4-55-C2   (hex)		Bach-Simpson
+C455C2     (base 16)		Bach-Simpson
+				109 Meg Drive
+				London  Ontario  N6E3Z7
+				CA
+
+00-E8-AB   (hex)		Meggitt Training Systems, Inc.
+00E8AB     (base 16)		Meggitt Training Systems, Inc.
+				296 Brogdon Rd
+				Suwanee  GA  30024
+				US
+
+B4-21-8A   (hex)		Dog Hunter LLC
+B4218A     (base 16)		Dog Hunter LLC
+				8 Faneuil Hall SQ
+				Boston  MA  02109
+				US
+
+B4-A4-B5   (hex)		Zen Eye Co.,Ltd
+B4A4B5     (base 16)		Zen Eye Co.,Ltd
+				#401, 157-5 Chunui-dong
+				Bucheon-si  Gyeonggi-do  420-859
+				KR
+
+DC-37-D2   (hex)		Hunan HKT Electronic Technology Co., Ltd
+DC37D2     (base 16)		Hunan HKT Electronic Technology Co., Ltd
+				Room 428,4F,Hunan Environmental Science and Technology Committee Building,No 18 South of Wanjiali Road,Yuhua District,Changsha
+				Changsha  Hunan  410007
+				CN
+
+40-70-74   (hex)		Life Technology (China) Co., Ltd
+407074     (base 16)		Life Technology (China) Co., Ltd
+				No.1, 2F, Nanshan Digital Culture Industrial base (East Tower  Podium) 10128 Shennan Blvd, Nanshan Dist.
+				Shenzhen  Guangdong  518000
+				CN
+
+20-F0-02   (hex)		MTData Developments Pty. Ltd.
+20F002     (base 16)		MTData Developments Pty. Ltd.
+				20 Miles Street
+				Mulgrave  Victoria  3170
+				AU
+
+38-8A-B7   (hex)		ITC Networks
+388AB7     (base 16)		ITC Networks
+				3F Daiwa Shibaura Bldg
+				Tokyo    105-0023
+				JP
+
+BC-C2-3A   (hex)		Thomson Video Networks
+BCC23A     (base 16)		Thomson Video Networks
+				6, rue du Clos Courtel
+				Cesson Sevigne    35510
+				FR
+
+1C-F4-CA   (hex)		Private
+1CF4CA     (base 16)		Private
+
+AC-C2-EC   (hex)		CLT INT'L IND. CORP.
+ACC2EC     (base 16)		CLT INT'L IND. CORP.
+				11F-2, NO.1, ZHANQIAN
+				MIAOLI    36043
+				TW
+
+A8-65-B2   (hex)		DONGGUAN YISHANG ELECTRONIC TECHNOLOGY CO., LIMITED
+A865B2     (base 16)		DONGGUAN YISHANG ELECTRONIC TECHNOLOGY CO., LIMITED
+				3rd floor, B# Building ,Houdefu Logistics Park,Qingshuiao,
+				Dongguan  Guangdong  523062
+				CN
+
+E8-D0-FA   (hex)		MKS Instruments Deutschland GmbH
+E8D0FA     (base 16)		MKS Instruments Deutschland GmbH
+				Schatzbogen 43
+				Munich    81829 
+				DE
+
+98-26-2A   (hex)		Applied Research Associates, Inc
+98262A     (base 16)		Applied Research Associates, Inc
+				4300 San Mateo Boulevard NE
+				Albuquerque  NM  87110
+				US
+
+3C-91-74   (hex)		ALONG COMMUNICATION TECHNOLOGY
+3C9174     (base 16)		ALONG COMMUNICATION TECHNOLOGY
+				1301, Zhenye International Business Center,
+				Shenzhen  Guandong  518000
+				CN
+
+AC-EE-3B   (hex)		6harmonics Inc
+ACEE3B     (base 16)		6harmonics Inc
+				21 Concourse Gate - Suite 10
+				Ottawa  Ontario  K2E 7S4
+				CA
+
+1C-6B-CA   (hex)		Mitsunami Co., Ltd.
+1C6BCA     (base 16)		Mitsunami Co., Ltd.
+				2-30-11, Nishi-gotanda, Shinagawa-ku
+				Tokyo    141-0031
+				JP
+
+64-24-00   (hex)		Xorcom Ltd.
+642400     (base 16)		Xorcom Ltd.
+				Teradyon Industrial Park
+				D.N Misgav    20179
+				IL
+
+E8-3E-FB   (hex)		GEODESIC LTD.
+E83EFB     (base 16)		GEODESIC LTD.
+				18,10TH CROSS, MAYURA STREET
+				BANGALORE  KARNATAKA  560094
+				IN
+
+EC-D1-9A   (hex)		Zhuhai Liming Industries Co., Ltd
+ECD19A     (base 16)		Zhuhai Liming Industries Co., Ltd
+				No.6 Xinqing Rd,Xinqing Hi-Tech Industrial Park
+				Zhuhai  Guangdong  519100
+				CN
+
+34-81-37   (hex)		UNICARD SA
+348137     (base 16)		UNICARD SA
+				UL.WADOWICKA 12
+				KRAKOW  woj. malopolskie  30-415
+				PL
+
+38-B1-2D   (hex)		Sonotronic Nagel GmbH
+38B12D     (base 16)		Sonotronic Nagel GmbH
+				Becker-Goering-Str. 17-25
+				Karlsbad    76307
+				DE
+
+54-9D-85   (hex)		EnerAccess inc
+549D85     (base 16)		EnerAccess inc
+				3154 Le Corbusier Blvd
+				Laval  Quebec  H7L 4S8
+				CA
+
+B0-75-0C   (hex)		QA Cafe
+B0750C     (base 16)		QA Cafe
+				33 Jewell Court
+				Portsmouth  NH  03801
+				US
+
+B4-E1-EB   (hex)		Private
+B4E1EB     (base 16)		Private
+
+3C-36-3D   (hex)		Nokia Corporation
+3C363D     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+80-86-98   (hex)		Netronics Technologies Inc.
+808698     (base 16)		Netronics Technologies Inc.
+				600-15 Allstate Parkway
+				Markham  Ontario  L3R 5B4
+				CA
+
+9C-E1-0E   (hex)		NCTech Ltd
+9CE10E     (base 16)		NCTech Ltd
+				20-22 Braid Road
+				Edinburgh    EH10 6AD
+				GB
+
+A0-6D-09   (hex)		Intelcan Technosystems Inc.
+A06D09     (base 16)		Intelcan Technosystems Inc.
+				5490  Boul Thimens
+				Saint-Laurent  Quebec  H4R2K9
+				CA
+
+60-F3-DA   (hex)		Logic Way GmbH
+60F3DA     (base 16)		Logic Way GmbH
+				Hagenower Str. 73
+				Schwerin  Mecklenburg-West Pomerania  19061
+				DE
+
+FC-50-90   (hex)		SIMEX Sp. z o.o.
+FC5090     (base 16)		SIMEX Sp. z o.o.
+				ul. Wielopole 7
+				Gdañsk  pomorskie  80-556
+				PL
+
+60-B9-82   (hex)		RO.VE.R. Laboratories S.p.A.
+60B982     (base 16)		RO.VE.R. Laboratories S.p.A.
+				Via Parini, 2
+				Sirmione  Brescia  25019
+				IT
+
+B4-62-38   (hex)		Exablox
+B46238     (base 16)		Exablox
+				365 San Antonio Road
+				Mountain View  CA  94040
+				US
+
+C8-BB-D3   (hex)		Embrane
+C8BBD3     (base 16)		Embrane
+				2350 Mission College Blvd., Ste 703
+				Santa Clara  CA  95054
+				US
+
+8C-60-4F   (hex)		Cisco Systems, Inc
+8C604F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-B9-80   (hex)		Parking BOXX Inc.
+A4B980     (base 16)		Parking BOXX Inc.
+				382 NE 191st St. #93984
+				Miami  FL  33179-3899
+				US
+
+A4-7C-14   (hex)		ChargeStorm AB
+A47C14     (base 16)		ChargeStorm AB
+				Laxholmstorget 3
+				Norrköping    60221
+				SE
+
+80-20-AF   (hex)		Trade FIDES, a.s.
+8020AF     (base 16)		Trade FIDES, a.s.
+				Dornych 57
+				Brno    61700
+				CZ
+
+2C-75-0F   (hex)		Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.
+2C750F     (base 16)		Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.
+				NO.188,FengyeRoad,BaoshanDistrict
+				shanghai    200949
+				CN
+
+5C-50-15   (hex)		Cisco Systems, Inc
+5C5015     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+98-02-84   (hex)		Theobroma Systems GmbH
+980284     (base 16)		Theobroma Systems GmbH
+				Gutheil-Schoder Gasse 17
+				Wien    1230
+				US
+
+1C-D4-0C   (hex)		Kriwan Industrie-Elektronik GmbH
+1CD40C     (base 16)		Kriwan Industrie-Elektronik GmbH
+				Allmand 11
+				Forchtenberg  Baden-Würtemberg  D-74670
+				DE
+
+00-2D-76   (hex)		TITECH GmbH
+002D76     (base 16)		TITECH GmbH
+				Otto-Hahn-Str. 6
+				Muelheim-Kaerlich    56218
+				DE
+
+F8-DB-4C   (hex)		PNY Technologies, INC.
+F8DB4C     (base 16)		PNY Technologies, INC.
+				100 Jefferson Road
+				Parsippany  New Jersey  07054
+				US
+
+0C-9D-56   (hex)		Consort Controls Ltd
+0C9D56     (base 16)		Consort Controls Ltd
+				13 Campion Terrace
+				Leamington Spa    CV32 4SU
+				GB
+
+3C-B8-7A   (hex)		Private
+3CB87A     (base 16)		Private
+
+AC-14-61   (hex)		ATAW  Co., Ltd.
+AC1461     (base 16)		ATAW  Co., Ltd.
+				Dongan-gu Pyeongchon-dong 126-1
+				Anyang-si  Gyeonggi-do  431-755
+				KR
+
+E4-C6-E6   (hex)		Mophie, LLC
+E4C6E6     (base 16)		Mophie, LLC
+				2850 Red Hill Ave.
+				Santa Ana  CA  92705
+				US
+
+50-2D-1D   (hex)		Nokia Corporation
+502D1D     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+F4-8E-09   (hex)		Nokia Corporation
+F48E09     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+58-48-C0   (hex)		COFLEC
+5848C0     (base 16)		COFLEC
+				Parc d'activités du moulin de Massy
+				MASSY    91300
+				FR
+
+8C-57-FD   (hex)		LVX Western
+8C57FD     (base 16)		LVX Western
+				700 54th ave North
+				St. Cloud  MN  56303
+				US
+
+54-E6-3F   (hex)		ShenZhen LingKeWeiEr Technology Co., Ltd.
+54E63F     (base 16)		ShenZhen LingKeWeiEr Technology Co., Ltd.
+				Room 625, YiJing Building, MeiLin Rd., FuTian District
+				ShenZhen  GuandDong  518000
+				CN
+
+20-FA-BB   (hex)		Cambridge Executive Limited
+20FABB     (base 16)		Cambridge Executive Limited
+				St John's Innovation Centre
+				Cambridge  Cambridgeshire  CB40WS
+				GB
+
+14-1A-51   (hex)		Treetech Sistemas Digitais
+141A51     (base 16)		Treetech Sistemas Digitais
+				Praca Claudino Alves, 141
+				Atibaia  São Paulo  12940-800
+				BR
+
+58-7F-C8   (hex)		S2M
+587FC8     (base 16)		S2M
+				2 rue des champs
+				Saint Marcel    27950
+				FR
+
+20-05-05   (hex)		RADMAX COMMUNICATION PRIVATE LIMITED
+200505     (base 16)		RADMAX COMMUNICATION PRIVATE LIMITED
+				F-24/34, IIND FLOOR, SECTOR-7
+				DELHI  DELHI  110085
+				IN
+
+C0-35-BD   (hex)		Velocytech Aps
+C035BD     (base 16)		Velocytech Aps
+				Automatikvej 1, 3rd floor
+				SOEBORG    2860
+				DK
+
+28-71-84   (hex)		Spire Payments
+287184     (base 16)		Spire Payments
+				Units 3 & 6 Milford Trading Estate
+				Salisbury  Wiltshire  SP1 2UD
+				GB
+
+7C-B0-3E   (hex)		OSRAM GmbH
+7CB03E     (base 16)		OSRAM GmbH
+				Berliner Allee 65
+				Augsburg  Bayern  86136
+				DE
+
+3C-9F-81   (hex)		Shenzhen CATIC Bit Communications Technology Co.,Ltd
+3C9F81     (base 16)		Shenzhen CATIC Bit Communications Technology Co.,Ltd
+				in  Nanshan District,Shenzhen Software park Road 10 in Room 202
+				Shenzhen  Guangdong  518057
+				CN
+
+44-5F-7A   (hex)		Shihlin Electric & Engineering Corp.
+445F7A     (base 16)		Shihlin Electric & Engineering Corp.
+				16F  NO.88,  SEC,  6,  CHUNG  SHAN  N.  RD., TAIPEI  
+				HsinChu  HsinFun Shiang  304
+				TW
+
+44-13-19   (hex)		WKK TECHNOLOGY LTD.
+441319     (base 16)		WKK TECHNOLOGY LTD.
+				23/F., One Kowloon, No.1, Wang Yuen Street, 
+				    852
+				HK
+
+18-B5-91   (hex)		I-Storm
+18B591     (base 16)		I-Storm
+				Hogye-dong, Dongan-gu
+				Anyang-si  Gyeonggi-do  431-080
+				KR
+
+BC-8B-55   (hex)		NPP ELIKS America Inc. DBA T&M Atlantic
+BC8B55     (base 16)		NPP ELIKS America Inc. DBA T&M Atlantic
+				175 SW 7th St Suite 1812
+				Miami  FL  33130
+				US
+
+C0-49-3D   (hex)		MAITRISE TECHNOLOGIQUE
+C0493D     (base 16)		MAITRISE TECHNOLOGIQUE
+				224 RUE DE LA SAINTE BAUME
+				SAINT MAXIMIN LA SAINTE BAUME  VAR  83470
+				FR
+
+C8-45-44   (hex)		Asia Pacific CIS (Wuxi) Co, Ltd
+C84544     (base 16)		Asia Pacific CIS (Wuxi) Co, Ltd
+				No 11, Xikun Road, Wuxi New District
+				Wuxi  Jiangsu  214028
+				CN
+
+E0-EF-25   (hex)		Lintes Technology Co., Ltd.
+E0EF25     (base 16)		Lintes Technology Co., Ltd.
+				9F-1., No.150, Jian 1st Rd., Zhonghe Dist., 
+				 New Taipei City     23511
+				TW
+
+50-ED-94   (hex)		EGATEL SL
+50ED94     (base 16)		EGATEL SL
+				Parque Tecnologico de Galicia
+				Ourense    32901
+				ES
+
+48-A2-2D   (hex)		Shenzhen Huaxuchang Telecom Technology Co.,Ltd
+48A22D     (base 16)		Shenzhen Huaxuchang Telecom Technology Co.,Ltd
+				Room 501 Block B, Cyber Time Plaza
+				Shenzhen  Guangdong  518040
+				CN
+
+C8-60-00   (hex)		ASUSTek COMPUTER INC.
+C86000     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+AC-0D-FE   (hex)		Ekon GmbH - myGEKKO
+AC0DFE     (base 16)		Ekon GmbH - myGEKKO
+				Rienzfeldstraße 30
+				Bruneck  Südtirol (BZ)  39031
+				IT
+
+FC-5B-26   (hex)		MikroBits
+FC5B26     (base 16)		MikroBits
+				Jalan Petung 31 Papringan
+				Yogyakarta  DIY  55281
+				ID
+
+40-F4-07   (hex)		Nintendo Co., Ltd.
+40F407     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+B0-1C-91   (hex)		Elim Co
+B01C91     (base 16)		Elim Co
+				4F Gagu Plaza B/D 81-9, jeongja-dong, Jangan-gu, 
+				Suwon city  Gyeonggi-Do  440-300 
+				KR
+
+04-F1-7D   (hex)		Tarana Wireless
+04F17D     (base 16)		Tarana Wireless
+				2105 Martin Luther King Jr Way
+				Berkeley  CA  94704
+				US
+
+84-49-15   (hex)		vArmour Networks, Inc.
+844915     (base 16)		vArmour Networks, Inc.
+				4633 OLD IRONSIDES DR
+				SANTA CLARA  CA  95054-1807
+				US
+
+2C-BE-97   (hex)		Ingenieurbuero Bickele und Buehler GmbH
+2CBE97     (base 16)		Ingenieurbuero Bickele und Buehler GmbH
+				St.Poeltener Str. 70
+				Stuttgart  BW  70469
+				DE
+
+70-A6-6A   (hex)		Prox Dynamics AS
+70A66A     (base 16)		Prox Dynamics AS
+				Smedsvingen 4
+				Hvalstad  Akershus  1395
+				NO
+
+DC-3E-51   (hex)		Solberg & Andersen AS
+DC3E51     (base 16)		Solberg & Andersen AS
+				Litleaasvegen 61
+				Bergen    5132
+				NO
+
+90-0A-3A   (hex)		PSG Plastic Service GmbH
+900A3A     (base 16)		PSG Plastic Service GmbH
+				Pinaer Str. 12-16
+				Mannheim  BW  68309
+				DE
+
+28-CD-1C   (hex)		Espotel Oy
+28CD1C     (base 16)		Espotel Oy
+				Kappelitie 6
+				Espoo  Espoo  FI-02200
+				FI
+
+D4-43-A8   (hex)		Changzhou Haojie Electric Co., Ltd.
+D443A8     (base 16)		Changzhou Haojie Electric Co., Ltd.
+				No. 158,
+				Changzhou  Jiangsu  213022
+				CN
+
+BC-E5-9F   (hex)		WATERWORLD Technology Co.,LTD
+BCE59F     (base 16)		WATERWORLD Technology Co.,LTD
+				6 Floor,Block B,Digital Building,Garden City,No.1079,Nanhai Road,Nanshan District,
+				Shenzhen  Guangdong  518067
+				US
+
+70-41-B7   (hex)		Edwards Lifesciences LLC
+7041B7     (base 16)		Edwards Lifesciences LLC
+				One Edwards Way
+				Irvine  CA  92614
+				US
+
+DC-A8-CF   (hex)		New Spin Golf, LLC.
+DCA8CF     (base 16)		New Spin Golf, LLC.
+				1637 Burr Oak Drive
+				Libertyville  IL  60048
+				US
+
+A8-49-A5   (hex)		Lisantech Co., Ltd.
+A849A5     (base 16)		Lisantech Co., Ltd.
+				1108, STX V-Tower  Gasan-dong
+				Seoul    153-803
+				KR
+
+A0-5E-6B   (hex)		MELPER Co., Ltd.
+A05E6B     (base 16)		MELPER Co., Ltd.
+				207, 2nd FL.,Wonhyo Bldg.,1365-22
+				SEOUL    137-863
+				KR
+
+D8-78-E5   (hex)		KUHN SA
+D878E5     (base 16)		KUHN SA
+				4, impasse des fabriques
+				SAVERNE    67700
+				FR
+
+D8-24-BD   (hex)		Cisco Systems, Inc
+D824BD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-97-FB   (hex)		ADVANCED RF TECHNOLOGIES INC
+3497FB     (base 16)		ADVANCED RF TECHNOLOGIES INC
+				3116 W Vanowen St
+				Burbank  California  91505
+				US
+
+F0-3A-55   (hex)		Omega Elektronik AS
+F03A55     (base 16)		Omega Elektronik AS
+				Ege Serbest Bolgesi
+				Izmir    35410
+				TR
+
+98-BC-57   (hex)		SVA TECHNOLOGIES CO.LTD
+98BC57     (base 16)		SVA TECHNOLOGIES CO.LTD
+				5F No.192 Tinglin Road,
+				SHANGHAI    200233
+				CN
+
+DC-3C-2E   (hex)		Manufacturing System Insights, Inc.
+DC3C2E     (base 16)		Manufacturing System Insights, Inc.
+				2550 Ninth St.
+				Berkely  CA  94710
+				US
+
+F8-35-53   (hex)		Magenta Research Ltd.
+F83553     (base 16)		Magenta Research Ltd.
+				128 Litchfield Road
+				New Milford  CT  06776
+				US
+
+F4-04-4C   (hex)		ValenceTech Limited
+F4044C     (base 16)		ValenceTech Limited
+				Unit 1, 20/F., APEC Plaza
+				HONG KONG    NIL
+				CN
+
+C4-67-B5   (hex)		Libratone A/S
+C467B5     (base 16)		Libratone A/S
+				Marielundvej 43 A
+				2730 HERLEV    
+				DK
+
+4C-39-10   (hex)		Newtek Electronics co., Ltd.
+4C3910     (base 16)		Newtek Electronics co., Ltd.
+				Byucksan-Sunyoung Technopia 1004,
+				Uiwang-City  Kyunggi-Do  437-821
+				KR
+
+90-3A-A0   (hex)		Nokia
+903AA0     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+B0-6C-BF   (hex)		3ality Digital Systems GmbH
+B06CBF     (base 16)		3ality Digital Systems GmbH
+				Gut Mergenthau 1
+				Kissing  Bayern  86438
+				DE
+
+54-D0-ED   (hex)		AXIM Communications
+54D0ED     (base 16)		AXIM Communications
+				1F., No. 5, Aly. 12, Ln. 15, Sec. 6, Sinyi Rd., Sinyi Dist.,
+				Taipei    110
+				TW
+
+84-36-11   (hex)		hyungseul publishing networks
+843611     (base 16)		hyungseul publishing networks
+				526-4, paju bookcity, munbal-li, gyoha-eup
+				paju-si  Gyeonggi-do  413-832
+				KR
+
+34-40-B5   (hex)		IBM
+3440B5     (base 16)		IBM
+				3039 E Cornwallis Rd
+				Research Triangle Park  NC  27709
+				US
+
+D4-D7-48   (hex)		Cisco Systems, Inc
+D4D748     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-4F-69   (hex)		EKINOPS SAS
+344F69     (base 16)		EKINOPS SAS
+				3, Rue Blaise Pascal
+				LANNION  FRANCE  22300
+				FR
+
+F8-31-3E   (hex)		endeavour GmbH
+F8313E     (base 16)		endeavour GmbH
+				Max-Planck-Str. 04
+				Vreden  NRW  48691
+				DE
+
+14-36-05   (hex)		Nokia Corporation
+143605     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+C8-1A-FE   (hex)		DLOGIC GmbH
+C81AFE     (base 16)		DLOGIC GmbH
+				Rathausstrasse 14
+				Baar  ZG  6341
+				CH
+
+EC-63-E5   (hex)		ePBoard Design LLC
+EC63E5     (base 16)		ePBoard Design LLC
+				4065 E. La Palma Ave.
+				Anaheim  California  92807
+				US
+
+94-DB-49   (hex)		SITCORP
+94DB49     (base 16)		SITCORP
+				7 RUE CADET
+				PARIS    75015
+				FR
+
+F0-62-0D   (hex)		Shenzhen Egreat Tech Corp.,Ltd
+F0620D     (base 16)		Shenzhen Egreat Tech Corp.,Ltd
+				4F,1Building,Chuangye Industrial park
+				Shenzhen  Guangdong  518104
+				CN
+
+2C-67-FB   (hex)		ShenZhen Zhengjili Electronics Co., LTD
+2C67FB     (base 16)		ShenZhen Zhengjili Electronics Co., LTD
+				The Longhua Town Shenzhen City Streets huaning three house Science Park Road Chiayi Source fifth floor
+				Shenzhen  Guangdong  518000
+				CN
+
+3C-E5-B4   (hex)		KIDASEN INDUSTRIA E COMERCIO DE ANTENAS LTDA
+3CE5B4     (base 16)		KIDASEN INDUSTRIA E COMERCIO DE ANTENAS LTDA
+				AV SINCLER SAMBATTI, 1945
+				MARINGA  PARANA  87055-020
+				BR
+
+08-D0-9F   (hex)		Cisco Systems, Inc
+08D09F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-4B-F0   (hex)		CalDigit, Inc
+644BF0     (base 16)		CalDigit, Inc
+				1941 Miraloma Ave #B
+				Placentia  CA  92870
+				US
+
+64-ED-62   (hex)		WOORI SYSTEMS Co., Ltd
+64ED62     (base 16)		WOORI SYSTEMS Co., Ltd
+				101Ho #42-9, Jeongja-dong, Pundang-gu
+				Sungnam-si  Kyunggi-do  463-848
+				KR
+
+2C-00-2C   (hex)		UNOWHY
+2C002C     (base 16)		UNOWHY
+				11, rue Tronchet
+				Paris    75008
+				US
+
+5C-C9-D3   (hex)		PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA
+5CC9D3     (base 16)		PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA
+				AVENIDA BURITI, 4285
+				MANAUS  AMAZONAS  69075-000
+				BR
+
+C8-7C-BC   (hex)		Valink Co., Ltd. 
+C87CBC     (base 16)		Valink Co., Ltd. 
+				1F Dongwon Bldg. 90, Dangsan-Dong 3-Ga Youngdungpo-Gu
+				Seoul    150-803
+				KR
+
+B8-14-13   (hex)		Keen High Holding(HK) Ltd.
+B81413     (base 16)		Keen High Holding(HK) Ltd.
+				25th Floor, In-long Development Centre, No.6025 Shennan Ave
+				Shenzhen  Guangdong   518040
+				CN
+
+B4-94-4E   (hex)		WeTelecom Co., Ltd.
+B4944E     (base 16)		WeTelecom Co., Ltd.
+				The'O Plus #915
+				Gunpo-si  Kyunggi-do  435-805
+				KR
+
+E0-0B-28   (hex)		Inovonics
+E00B28     (base 16)		Inovonics
+				315 CTC Blvd
+				Louisville  CO  80027
+				US
+
+48-02-2A   (hex)		B-Link Electronic Limited
+48022A     (base 16)		B-Link Electronic Limited
+				NO 268,FuQian Rd, JuTang Community,GuanLan town BaoAn district,ShenZhen, 518110,China
+				Shen Zhen  Guang Dong  518110
+				CN
+
+18-E8-0F   (hex)		Viking Electronics Inc.
+18E80F     (base 16)		Viking Electronics Inc.
+				1531 Industrial St
+				Hudson  WI  54016
+				US
+
+CC-6B-F1   (hex)		Sound Masking Inc.
+CC6BF1     (base 16)		Sound Masking Inc.
+				47 - 23 - Glamis Drive Sw
+				Calgary  Alberta  T3E 6S3
+				CA
+
+2C-97-17   (hex)		I.C.Y. B.V.
+2C9717     (base 16)		I.C.Y. B.V.
+				Houtsaachmole 35
+				Lemmer  Friesland  8531 WC
+				NL
+
+2C-3F-38   (hex)		Cisco Systems, Inc
+2C3F38     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-50-E0   (hex)		Milton Security Group LLC
+4050E0     (base 16)		Milton Security Group LLC
+				111 North Harbor Blvd
+				Fullerton  CA  92832
+				US
+
+70-CA-9B   (hex)		Cisco Systems, Inc
+70CA9B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-78-BA   (hex)		Pantech Co., Ltd.
+A078BA     (base 16)		Pantech Co., Ltd.
+				110-1 Ongjeong-Ri, Tongjin-Eup
+				Gimpo-Si  Gyounggi-Do  415-865
+				KR
+
+68-BC-0C   (hex)		Cisco Systems, Inc
+68BC0C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-5B-11   (hex)		EVI HEAT AB
+345B11     (base 16)		EVI HEAT AB
+				Box 55
+				Kungsaengen    196 22
+				SE
+
+78-BA-D0   (hex)		Shinybow Technology Co. Ltd.
+78BAD0     (base 16)		Shinybow Technology Co. Ltd.
+				9Fl.,No.63,Ju Guang Rd.,Chung Ho Dist.
+				New Taipei    235
+				TW
+
+24-E6-BA   (hex)		JSC Zavod im. Kozitsky
+24E6BA     (base 16)		JSC Zavod im. Kozitsky
+				Bld. 70, 5th line, V.O, 
+				St.-Petersburg    199048
+				RU
+
+CC-A3-74   (hex)		Guangdong Guanglian Electronic Technology Co.Ltd
+CCA374     (base 16)		Guangdong Guanglian Electronic Technology Co.Ltd
+				B338,Block13,No.232 Waihuandonglu Road,High Education Mega Center
+				Guangzhou  Guangdong  510006
+				CN
+
+58-67-7F   (hex)		Clare Controls Inc.
+58677F     (base 16)		Clare Controls Inc.
+				7519 Pennsylvania Ave
+				Sarasota  FL  34243
+				US
+
+0C-5A-19   (hex)		Axtion Sdn Bhd
+0C5A19     (base 16)		Axtion Sdn Bhd
+				A13-07, Subang Avenue Serviced Suites
+				Subang Jaya  Selangor  47500
+				MY
+
+A8-BD-1A   (hex)		Honey Bee (Hong Kong) Limited
+A8BD1A     (base 16)		Honey Bee (Hong Kong) Limited
+				Flat L, 12/F., Phase 4, Kwun Tong Industrial Ctr.,
+				    
+				HK
+
+24-87-07   (hex)		SEnergy Corporation
+248707     (base 16)		SEnergy Corporation
+				Koizumi Bldg. 3F, 1-38-18
+				Yokohama city  Kanagawa Pref.  224-0003
+				JP
+
+C4-C1-9F   (hex)		National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
+C4C19F     (base 16)		National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
+				1200 Cypress Creek Rd.
+				Cedar Park  TX  78613
+				US
+
+00-08-30   (hex)		Cisco Systems, Inc
+000830     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-EE-AE   (hex)		VSS Monitoring
+C4EEAE     (base 16)		VSS Monitoring
+				1850 Gateway Dr, Suite 500
+				San Mateo  CA  94404
+				US
+
+F8-D3-A9   (hex)		AXAN Networks
+F8D3A9     (base 16)		AXAN Networks
+				2F Myungjin-Bldg Daechi-Dong Gangnam-Gu 
+				Seoul     135-845
+				KR
+
+BC-77-9F   (hex)		SBM Co., Ltd.
+BC779F     (base 16)		SBM Co., Ltd.
+				Hyunwoo Bldg 206, Anyang7-Dong
+				Anyang  Gyeonggi-Do  430-817
+				KR
+
+40-6A-AB   (hex)		RIM
+406AAB     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+9C-A3-BA   (hex)		SAKURA Internet Inc.
+9CA3BA     (base 16)		SAKURA Internet Inc.
+				7-20-1 Nishi-shinjuku
+				Shinjuku-ku  Tokyo  1600023
+				JP
+
+8C-8A-6E   (hex)		ESTUN AUTOMATION TECHNOLOY CO., LTD
+8C8A6E     (base 16)		ESTUN AUTOMATION TECHNOLOY CO., LTD
+				16,Shuige Road
+				Nanjing  Jiangsu  211106
+				CN
+
+98-82-17   (hex)		Disruptive Ltd
+988217     (base 16)		Disruptive Ltd
+				Windsor House
+				High Wycombe  Buckinghamshire  HP12 3NR
+				GB
+
+9C-5C-8D   (hex)		FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS  LTDA
+9C5C8D     (base 16)		FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS  LTDA
+				R: Vicente de Felice, 589 -  Jd.Ouro Verde
+				Limeira  São Paulo  13482-075
+				BR
+
+D4-20-6D   (hex)		HTC Corporation
+D4206D     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+7C-1E-52   (hex)		Microsoft
+7C1E52     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+DC-B4-C4   (hex)		Microsoft XCG
+DCB4C4     (base 16)		Microsoft XCG
+				1 Microsoft Way
+				Redmond  WA  98052
+				US
+
+AC-CB-09   (hex)		Hefcom Metering (Pty) Ltd
+ACCB09     (base 16)		Hefcom Metering (Pty) Ltd
+				PO Box 10770
+				Centurion  Gauteng  0046
+				ZA
+
+18-66-E3   (hex)		Veros Systems, Inc.
+1866E3     (base 16)		Veros Systems, Inc.
+				PO Box 10534
+				College Station  Texas  77842
+				US
+
+74-FD-A0   (hex)		Compupal (Group) Corporation 
+74FDA0     (base 16)		Compupal (Group) Corporation 
+				No.1555 Jiashan Avenue
+				Jiashan  Zhejiang  314113
+				CN
+
+CC-B8-F1   (hex)		EAGLE KINGDOM TECHNOLOGIES LIMITED
+CCB8F1     (base 16)		EAGLE KINGDOM TECHNOLOGIES LIMITED
+				FLAT/ RM B 26/F TWO CHINACHEM PLAZA 68 CONNAUGHT ROAD CENTRAL HK
+				    
+				HK
+
+A4-29-B7   (hex)		bluesky
+A429B7     (base 16)		bluesky
+				Rm1410 Tower A,Chengjian plaza,NO.18 beitaipingzhuang Road,Haidian district,
+				Beijing    100088
+				CN
+
+48-F3-17   (hex)		Private
+48F317     (base 16)		Private
+
+CC-F8-F0   (hex)		Xi'an HISU Multimedia Technology Co.,Ltd.
+CCF8F0     (base 16)		Xi'an HISU Multimedia Technology Co.,Ltd.
+				3 Floor , NO.1 Building , Modern Business Enterprise Centre (East) , NO.69, Jinye road , XiÂ¡Â¯an 
+				Xi'an City  Shanxi Province  710075
+				CN
+
+04-88-8C   (hex)		Eifelwerk Butler Systeme GmbH
+04888C     (base 16)		Eifelwerk Butler Systeme GmbH
+				Eifelwerkstrasse 1
+				Malbergweich    54655
+				DE
+
+D4-5A-B2   (hex)		Galleon Systems
+D45AB2     (base 16)		Galleon Systems
+				Unit 9, Fortnum Close
+				Birmingham  West Midlands  B33 0LG
+				GB
+
+30-DE-86   (hex)		Cedac Software S.r.l.
+30DE86     (base 16)		Cedac Software S.r.l.
+				Via Toscana, 3
+				Castiglione dei Pepoli  Bologna  40035
+				IT
+
+18-C4-51   (hex)		Tucson Embedded Systems
+18C451     (base 16)		Tucson Embedded Systems
+				5620 North Kolb Road
+				Tucson  AZ  85750
+				US
+
+70-46-42   (hex)		CHYNG HONG ELECTRONIC CO., LTD.
+704642     (base 16)		CHYNG HONG ELECTRONIC CO., LTD.
+				No.80, Lane 258, Sec. 3, Hansi W. Rd.,
+				Taichung    40647
+				TW
+
+D4-1C-1C   (hex)		RCF S.P.A.
+D41C1C     (base 16)		RCF S.P.A.
+				Via Raffaello Sanzio 13
+				Reggio Emilia  Italy  42124
+				IT
+
+58-92-0D   (hex)		Kinetic Avionics Limited
+58920D     (base 16)		Kinetic Avionics Limited
+				Elstree Aerodrome
+				Hertfordshire    WD6 3AW
+				GB
+
+AC-02-EF   (hex)		Comsis
+AC02EF     (base 16)		Comsis
+				3 rue Broussais
+				Paris    75014
+				FR
+
+B8-B4-2E   (hex)		Gionee Communication Equipment Co,Ltd.ShenZhen
+B8B42E     (base 16)		Gionee Communication Equipment Co,Ltd.ShenZhen
+				21/F Times Technology Building, 7028 Shennan Road, Futian District,
+				Shenzhen  Guangdong  518040
+				CN
+
+44-3E-B2   (hex)		DEOTRON Co., LTD.
+443EB2     (base 16)		DEOTRON Co., LTD.
+				506, Dain Bldg
+				Ansan  Kyonggi-do  425-856
+				KR
+
+D0-59-C3   (hex)		CeraMicro Technology Corporation
+D059C3     (base 16)		CeraMicro Technology Corporation
+				4F, No. 16-1, Sec. 6, Mingcyuan East Road
+				Taipei    114
+				TW
+
+18-2C-91   (hex)		Concept Development, Inc.
+182C91     (base 16)		Concept Development, Inc.
+				1881 Langley Avenue
+				Irvine  CA  92614-5623
+				US
+
+FC-17-94   (hex)		InterCreative Co., Ltd
+FC1794     (base 16)		InterCreative Co., Ltd
+				897-6, HoGye-Dong, DongAn-Gu,
+				AnYang-Si,  GyeongGi-Do,  431-836
+				KR
+
+B4-0B-7A   (hex)		Brusa Elektronik AG
+B40B7A     (base 16)		Brusa Elektronik AG
+				Neudorf 14
+				Sennwald  St. Gallen  9466
+				CH
+
+28-0C-B8   (hex)		Mikrosay Yazilim ve Elektronik A.S.
+280CB8     (base 16)		Mikrosay Yazilim ve Elektronik A.S.
+				Cevizli Mah. Tansel Cad. 
+				Istanbul    34846
+				TR
+
+3C-C9-9E   (hex)		Huiyang Technology Co., Ltd
+3CC99E     (base 16)		Huiyang Technology Co., Ltd
+				22D 7 Block ZhonghuiNewcity
+				Dongguan  Guangdong  523849
+				CN
+
+2C-1E-EA   (hex)		AERODEV
+2C1EEA     (base 16)		AERODEV
+				No.59,1985 Lane,Chunshen Road,
+				Shanghai    200237
+				CN
+
+1C-8E-8E   (hex)		DB Communication & Systems Co., ltd.
+1C8E8E     (base 16)		DB Communication & Systems Co., ltd.
+				3-3 Yeongdeok-dong, Giheung-gu
+				Yongin-si  Gyeonggi-do  449-908
+				KR
+
+24-EC-99   (hex)		ASKEY COMPUTER CORP
+24EC99     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+A4-4B-15   (hex)		Sun Cupid Technology (HK) LTD
+A44B15     (base 16)		Sun Cupid Technology (HK) LTD
+				Room 1201-3, 12/F., Tower 6
+				Tsim Sha Tsui    
+				HK
+
+48-C8-62   (hex)		Simo Wireless,Inc.
+48C862     (base 16)		Simo Wireless,Inc.
+				326#,Building 4,Zhongxing Industrial Park,Chuangye
+				Shenzhen  Guangdong  518054
+				CN
+
+78-BE-B6   (hex)		Enhanced Vision
+78BEB6     (base 16)		Enhanced Vision
+				5882 MACHINE DR.
+				Huntington Beach  California  92649
+				US
+
+44-9C-B5   (hex)		Alcomp, Inc
+449CB5     (base 16)		Alcomp, Inc
+				11537 Walnut Lane
+				Fort Atkinson  WI  53538
+				US
+
+B4-FC-75   (hex)		SEMA Electronics(HK) CO.,LTD
+B4FC75     (base 16)		SEMA Electronics(HK) CO.,LTD
+				Xialingbei Industrial Zone  Liaobu, 
+				Dongguan  Guangdong  523411
+				CN
+
+B0-BF-99   (hex)		WIZITDONGDO
+B0BF99     (base 16)		WIZITDONGDO
+				2F, 299-1, 3-DONG, SUNGSU 2-GA
+				SEOUL    133-833
+				KR
+
+B8-2A-DC   (hex)		EFR Europäische Funk-Rundsteuerung GmbH
+B82ADC     (base 16)		EFR Europäische Funk-Rundsteuerung GmbH
+				Nymphenburger Straße 20b
+				Munich    80335
+				DE
+
+40-F1-4C   (hex)		ISE Europe SPRL
+40F14C     (base 16)		ISE Europe SPRL
+				Fauvette 1
+				Uccle    1180
+				BE
+
+E8-94-4C   (hex)		Cogent Healthcare Systems Ltd
+E8944C     (base 16)		Cogent Healthcare Systems Ltd
+				69 Alma Road
+				Berkshire    SL4 3HT
+				GB
+
+90-67-F3   (hex)		Alcatel Lucent
+9067F3     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+D4-F0-B4   (hex)		Napco Security Technologies
+D4F0B4     (base 16)		Napco Security Technologies
+				333 Bayview Ave
+				Amityville  NY  11701
+				US
+
+68-F8-95   (hex)		Redflow Limited
+68F895     (base 16)		Redflow Limited
+				1/27 Counihan Rd 
+				Brisbane  Queensland  4073
+				AU
+
+70-B9-21   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+70B921     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+A0-E2-95   (hex)		DAT System Co.,Ltd
+A0E295     (base 16)		DAT System Co.,Ltd
+				Gun San Free Trade Area 511-1 ,
+				    573-540
+				KR
+
+A0-16-5C   (hex)		Triteka LTD
+A0165C     (base 16)		Triteka LTD
+				Malha Technology Park
+				Jerusalem    96951
+				IL
+
+9C-41-7C   (hex)		Hame  Technology Co.,  Limited 
+9C417C     (base 16)		Hame  Technology Co.,  Limited 
+				5F, No. 18 High Tech Middle Avenue One, High Tech Industrial Park, Nanshan District, 
+				Shenzhen  Guangdong  518057
+				CN
+
+9C-6A-BE   (hex)		QEES ApS.
+9C6ABE     (base 16)		QEES ApS.
+				Naverland 31, 2.tv
+				Glostrup  Hovedstaden  2600
+				DK
+
+9C-93-4E   (hex)		Xerox Corporation
+9C934E     (base 16)		Xerox Corporation
+				Mail Stop 0214 - 7E
+				Webster  NY  14580
+				US
+
+04-46-65   (hex)		Murata Manufacturing Co., Ltd.
+044665     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+2C-21-72   (hex)		Juniper Networks
+2C2172     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+90-09-17   (hex)		Far-sighted mobile
+900917     (base 16)		Far-sighted mobile
+				Technology Park Desay Building 6th-Floor
+				Shenzhen  Guangdong Province   518000
+				CN
+
+2C-8B-F2   (hex)		Hitachi Metals America Ltd
+2C8BF2     (base 16)		Hitachi Metals America Ltd
+				1920 Zanker Road
+				San Jose   CA  95112
+				US
+
+D8-97-3B   (hex)		Artesyn Embedded Technologies
+D8973B     (base 16)		Artesyn Embedded Technologies
+				16/F Lu Plaza Building
+				Kwun Tong  Kowloon  00000
+				HK
+
+38-26-CD   (hex)		ANDTEK
+3826CD     (base 16)		ANDTEK
+				Am Soeldnermoos 17
+				Hallbergmoos  Bavaria  85399
+				DE
+
+88-BF-D5   (hex)		Simple Audio Ltd
+88BFD5     (base 16)		Simple Audio Ltd
+				Unit 59 Elderpark Workspace
+				Glasgow    G51 3TR
+				GB
+
+24-CB-E7   (hex)		MYK, Inc.
+24CBE7     (base 16)		MYK, Inc.
+				4-60-30-108, Kamoi, 
+				Yokohama  Kanagawa  226-0003
+				JP
+
+B0-A1-0A   (hex)		Pivotal Systems Corporation
+B0A10A     (base 16)		Pivotal Systems Corporation
+				4683  Chabot Drive
+				Pleasanton  CA  94588
+				US
+
+80-2D-E1   (hex)		Solarbridge Technologies
+802DE1     (base 16)		Solarbridge Technologies
+				9229 Waterford Centre Blvd
+				Austin  TX  78758
+				US
+
+F4-A5-2A   (hex)		Hawa Technologies Inc
+F4A52A     (base 16)		Hawa Technologies Inc
+				336 Hayes St
+				San Francisco  California  94102
+				US
+
+0C-6E-4F   (hex)		PrimeVOLT Co., Ltd.
+0C6E4F     (base 16)		PrimeVOLT Co., Ltd.
+				2F-3, No. 9, Lane 3, Jihu Rd, Neihu
+				Taipei    11492
+				TW
+
+E8-B7-48   (hex)		Cisco Systems, Inc
+E8B748     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-99-BC   (hex)		FonSee Technology Inc.
+BC99BC     (base 16)		FonSee Technology Inc.
+				14F-2, No.32, Gaotie 2nd Rd.,
+				Zhubei City  Hsinchu County  302
+				TW
+
+78-3F-15   (hex)		EasySYNC Ltd.
+783F15     (base 16)		EasySYNC Ltd.
+				Unit 1, 2 Seaward Place
+				Glasgow  Scotland  G41 1HH
+				GB
+
+18-D0-71   (hex)		DASAN CO., LTD.
+18D071     (base 16)		DASAN CO., LTD.
+				DASAN Tower 7F, 49 Daewangpangyo-ro644beon-gil
+				Seongnam-si  Gyeonggi-do  463-760
+				KR
+
+58-E4-76   (hex)		CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD
+58E476     (base 16)		CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD
+				4th Floor,Jiaodajiepu Building,72# Kejierlu Road, 
+				Xi'an  Shaanxi Province  710100
+				CN
+
+44-7E-95   (hex)		Alpha and Omega, Inc
+447E95     (base 16)		Alpha and Omega, Inc
+				4735 Montview Blvd
+				Denver  CO  80207
+				US
+
+98-60-22   (hex)		EMW Co., Ltd.
+986022     (base 16)		EMW Co., Ltd.
+				80B-4L, 680-3 Gojan-Dong
+				Incheon    405-819
+				KR
+
+B8-D4-9D   (hex)		M Seven System Ltd.
+B8D49D     (base 16)		M Seven System Ltd.
+				24F, Trust Tower Bldg, 275-7, Yangjae2-Dong, Seocho-Gu
+				Seoul    137-739
+				KR
+
+3C-67-2C   (hex)		Sciovid Inc.
+3C672C     (base 16)		Sciovid Inc.
+				387 S Silverbrook Dr
+				Anaheim  CA  92807
+				US
+
+DC-9B-1E   (hex)		Intercom, Inc.
+DC9B1E     (base 16)		Intercom, Inc.
+				Sorimachi Bldg., 3-5, Taito 1-chome, 
+				Taito-ku  Tokyo  110-8654
+				JP
+
+BC-5F-F4   (hex)		ASRock Incorporation
+BC5FF4     (base 16)		ASRock Incorporation
+				2F.,No.37, Sec.2, Jhongyang S.Rd., Beitou Distric, 
+				Taipei    112
+				TW
+
+E8-B4-AE   (hex)		Shenzhen C&D Electronics Co.,Ltd
+E8B4AE     (base 16)		Shenzhen C&D Electronics Co.,Ltd
+				Building 2, Xia You Song Mountain Top Industrial District, You Song Village
+				Shenzhen  Guang Dong  518000
+				CN
+
+50-FA-AB   (hex)		L-tek d.o.o.
+50FAAB     (base 16)		L-tek d.o.o.
+				Obrtna cesta 18
+				Sentjernej    8310
+				SI
+
+38-91-FB   (hex)		Xenox Holding BV
+3891FB     (base 16)		Xenox Holding BV
+				Lingedijk 80
+				Tricht  Gelderland  4196 HC
+				NL
+
+A8-E0-18   (hex)		Nokia Corporation
+A8E018     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+78-1D-FD   (hex)		Jabil Inc
+781DFD     (base 16)		Jabil Inc
+				10500 Dr. Martin Luther King Jr. St. N.
+				St. Petersburg  Florida  33716
+				US
+
+18-AE-BB   (hex)		Siemens Convergence Creators GmbH&Co.KG
+18AEBB     (base 16)		Siemens Convergence Creators GmbH&Co.KG
+				Communications, Media and Technology
+				Hamburg    D-21079
+				DE
+
+B0-BD-A1   (hex)		ZAKLAD ELEKTRONICZNY SIMS
+B0BDA1     (base 16)		ZAKLAD ELEKTRONICZNY SIMS
+				POD SKARPA 51A
+				BYDGOSZCZ  KUJAWSKO-POMORSKIE  85-796
+				PL
+
+70-B2-65   (hex)		Hiltron s.r.l.
+70B265     (base 16)		Hiltron s.r.l.
+				Strada Provinciale di Caserta, 218
+				Naples    80144
+				IT
+
+CC-C6-2B   (hex)		Tri-Systems Corporation
+CCC62B     (base 16)		Tri-Systems Corporation
+				3-27-8 TRS Building 3F
+				Hachioji  Tokyo  192-0904
+				JP
+
+D8-C0-68   (hex)		Netgenetech.co.,ltd.
+D8C068     (base 16)		Netgenetech.co.,ltd.
+				704, Hanlim Venture Town., #689-6, 
+				Gunpo-si    435-862
+				KR
+
+60-11-99   (hex)		Siama Systems Inc
+601199     (base 16)		Siama Systems Inc
+				410 Saint-Nicolas Street
+				Montreal  Quebec  H2Y 2P5
+				CA
+
+6C-81-FE   (hex)		Mitsuba Corporation
+6C81FE     (base 16)		Mitsuba Corporation
+				1-2681
+				Kiryu  Gunma  376-8555
+				JP
+
+C0-27-B9   (hex)		Beijing National Railway Research & Design Institute  of Signal & Communication Co., Ltd.
+C027B9     (base 16)		Beijing National Railway Research & Design Institute  of Signal & Communication Co., Ltd.
+				Building No.18, Huayuan YiLi,Fengtai District,
+				Beijing    100073
+				CN
+
+14-74-11   (hex)		RIM
+147411     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+F8-A9-DE   (hex)		PUISSANCE PLUS
+F8A9DE     (base 16)		PUISSANCE PLUS
+				222 Impasse Louis Lépine
+				Montauban    82000
+				FR
+
+A8-8C-EE   (hex)		MicroMade Galka i Drozdz sp.j.
+A88CEE     (base 16)		MicroMade Galka i Drozdz sp.j.
+				ul. Wieniawskiego 16
+				Pila  Wielkopolskie  64-920
+				PL
+
+DC-2B-66   (hex)		InfoBLOCK S.A. de C.V.
+DC2B66     (base 16)		InfoBLOCK S.A. de C.V.
+				Hegel 229 - 10
+				Mexico City  Distrito Federal  11570
+				MX
+
+B8-87-1E   (hex)		Good Mind Industries Co., Ltd.
+B8871E     (base 16)		Good Mind Industries Co., Ltd.
+				22, Ta Yeou 2nd St, 
+				Kaohsiung    831
+				TW
+
+D4-F0-27   (hex)		Trust Power Ltd.
+D4F027     (base 16)		Trust Power Ltd.
+				13 Berkley Street
+				London    W1J 8DU
+				GB
+
+04-55-CA   (hex)		BriView (Xiamen) Corp.
+0455CA     (base 16)		BriView (Xiamen) Corp.
+				NO.1998 West of Fangshan Road,Xiang An Branch,Torch Hi-tech lndustrial Development Zone,
+				Xiamen city  Fujian Province  361102
+				CN
+
+14-35-B3   (hex)		Future Designs, Inc.
+1435B3     (base 16)		Future Designs, Inc.
+				2702 Triana Blvd
+				Huntsville  AL  35805
+				US
+
+AC-93-2F   (hex)		Nokia Corporation
+AC932F     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+00-54-AF   (hex)		Continental Automotive Systems Inc.
+0054AF     (base 16)		Continental Automotive Systems Inc.
+				21440 W. Lake Cook Rd.
+				Deer Park  IL  60010
+				US
+
+AC-CA-BA   (hex)		Midokura Co., Ltd. 
+ACCABA     (base 16)		Midokura Co., Ltd. 
+				7th Floor Azabudai Hinoki building
+				Tokyo    106-0041
+				JP
+
+0C-81-12   (hex)		Private
+0C8112     (base 16)		Private
+
+9C-95-F8   (hex)		SmartDoor Systems, LLC
+9C95F8     (base 16)		SmartDoor Systems, LLC
+				5711-A Center Lane
+				Falls Church  Virginia  22041
+				US
+
+78-19-F7   (hex)		Juniper Networks
+7819F7     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+64-09-4C   (hex)		Beijing Superbee Wireless Technology Co.,Ltd
+64094C     (base 16)		Beijing Superbee Wireless Technology Co.,Ltd
+				B7,Science-Tech Fortune Center,
+				Beijing    100192
+				CN
+
+7C-7D-41   (hex)		Jinmuyu Electronics Co., Ltd.
+7C7D41     (base 16)		Jinmuyu Electronics Co., Ltd.
+				Room 132, Building 16, Tianqiaowan
+				Beijing    101101
+				CN
+
+4C-14-80   (hex)		NOREGON SYSTEMS, INC
+4C1480     (base 16)		NOREGON SYSTEMS, INC
+				100 N. MAIN ST.  SUITE 2200
+				WINSTON - SALEM  NC  27101
+				US
+
+A4-85-6B   (hex)		Q Electronics Ltd
+A4856B     (base 16)		Q Electronics Ltd
+				Beck House, Hawksworth Road
+				Leeds  West Yorkshire  LS18 4JP
+				GB
+
+20-D5-AB   (hex)		Korea Infocom Co.,Ltd.
+20D5AB     (base 16)		Korea Infocom Co.,Ltd.
+				5F Wintek B/D 511
+				Uiwang  Kyunggi-Do  437-830
+				KR
+
+0C-F3-EE   (hex)		EM Microelectronic
+0CF3EE     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+64-D1-A3   (hex)		Sitecom Europe BV
+64D1A3     (base 16)		Sitecom Europe BV
+				Linatebaan 101
+				Rotterdam  Zuid Holland  3045 AH
+				NL
+
+F4-3E-9D   (hex)		Benu Networks, Inc.
+F43E9D     (base 16)		Benu Networks, Inc.
+				300 Rd., Suite 110
+				Billerica  MA  01821
+				US
+
+04-E2-F8   (hex)		AEP Ticketing solutions srl
+04E2F8     (base 16)		AEP Ticketing solutions srl
+				Via dei Colli, 240
+				Signa  Firenze  50058
+				IT
+
+EC-9E-CD   (hex)		Artesyn Embedded Technologies
+EC9ECD     (base 16)		Artesyn Embedded Technologies
+				2900 S. Diablo Way Suite 190
+				Tempe  Arizona  85282
+				US
+
+8C-51-05   (hex)		Shenzhen ireadygo Information Technology CO.,LTD.
+8C5105     (base 16)		Shenzhen ireadygo Information Technology CO.,LTD.
+				Room 02,11F,DESAY Building,No.1 Hi-Tech South Road
+				Shenzhen    518057
+				CN
+
+C8-20-8E   (hex)		Storagedata
+C8208E     (base 16)		Storagedata
+				Randstad 22117
+				Almere  Flevoland  1316BW
+				NL
+
+5C-5E-AB   (hex)		Juniper Networks
+5C5EAB     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+9C-80-7D   (hex)		SYSCABLE Korea Inc.
+9C807D     (base 16)		SYSCABLE Korea Inc.
+				2F KAMA Bldg 1461-15 Secho-3dong Seocho-Gu
+				Seoul    137-720
+				KR
+
+34-B5-71   (hex)		PLDS
+34B571     (base 16)		PLDS
+				Schanzenfeldstrasse 2
+				Wetzlar  Hessen  35578
+				DE
+
+3C-74-37   (hex)		RIM
+3C7437     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+EC-92-33   (hex)		Eddyfi NDT Inc
+EC9233     (base 16)		Eddyfi NDT Inc
+				2800, Louis-Lumiere street
+				Quebec  Quebec  G1P 0A4
+				CA
+
+74-38-89   (hex)		ANNAX Anzeigesysteme GmbH
+743889     (base 16)		ANNAX Anzeigesysteme GmbH
+				Wettersteinstrasse 18
+				Taufkirchen  Bavaria  82024
+				DE
+
+44-D2-CA   (hex)		Anvia TV Oy
+44D2CA     (base 16)		Anvia TV Oy
+				PO Box 29
+				SEINAJOKI    FIN60101
+				FI
+
+38-6E-21   (hex)		Wasion Group Ltd.
+386E21     (base 16)		Wasion Group Ltd.
+				No.468 West Tongzipo Road High-Tech Industrial Development Zone
+				Changsha City  Hunan Province,  410205 
+				CN
+
+28-72-F0   (hex)		ATHENA
+2872F0     (base 16)		ATHENA
+				42 RUE MONGE
+				PARIS    75005
+				FR
+
+1C-19-DE   (hex)		eyevis GmbH
+1C19DE     (base 16)		eyevis GmbH
+				Hundsschleestrasse 23
+				Reutlingen  BW  72766
+				DE
+
+60-9E-64   (hex)		Vivonic GmbH
+609E64     (base 16)		Vivonic GmbH
+				Kurfuerst-Eppstein-Ring 4
+				Sailauf  Bayern  63877
+				DE
+
+BC-15-A6   (hex)		Taiwan Jantek Electronics,Ltd.
+BC15A6     (base 16)		Taiwan Jantek Electronics,Ltd.
+				6F-1,No.1 Wu-Chuan 1St. Rd,Wu-Ku Industrial Park,
+				Sinchwang City  Taipei Hsien  24892
+				TW
+
+DC-DE-CA   (hex)		Akyllor
+DCDECA     (base 16)		Akyllor
+				Britannia House, 22, 2F, Cator Road
+				Bandar Seri Begawan BS    8811
+				BN
+
+A0-AA-FD   (hex)		EraThink Technologies Corp.
+A0AAFD     (base 16)		EraThink Technologies Corp.
+				289 Bisheng Road Building 4,Floor 4
+				Shanghai    201204
+				CN
+
+6C-A9-06   (hex)		Telefield Ltd
+6CA906     (base 16)		Telefield Ltd
+				Flat D,2/F., Valiant Industrial Centre,2-12 Au Pui Wan Street, 
+				Hongkong    852
+				CN
+
+78-22-3D   (hex)		Affirmed Networks
+78223D     (base 16)		Affirmed Networks
+				35 Nagog Park
+				Acton  MA  01720
+				US
+
+3C-02-B1   (hex)		Creation Technologies LP
+3C02B1     (base 16)		Creation Technologies LP
+				3939 North Fraser Way
+				Burnaby  BC  V5J 5J2
+				CA
+
+E4-41-E6   (hex)		Ottec Technology GmbH
+E441E6     (base 16)		Ottec Technology GmbH
+				Bünteweg 33
+				Gehrden  Lower Saxony  30989
+				DE
+
+BC-71-C1   (hex)		XTrillion, Inc.
+BC71C1     (base 16)		XTrillion, Inc.
+				1-12-3-4F 
+				Chiyoda-ku  Tokyo  101-0041
+				JP
+
+E0-E8-E8   (hex)		Olive Telecommunication Pvt. Ltd
+E0E8E8     (base 16)		Olive Telecommunication Pvt. Ltd
+				862, Udyog Vihar
+				Gurgaon  Haryana  122016
+				IN
+
+60-52-D0   (hex)		FACTS Engineering 
+6052D0     (base 16)		FACTS Engineering 
+				8049 Photonics Drive
+				New Port Richey  FL  34655
+				US
+
+B0-89-91   (hex)		LGE 
+B08991     (base 16)		LGE 
+				60-39 , Kasan -dong , Gumcheon-gu.
+				Seoul     153-801
+				KR
+
+30-14-2D   (hex)		Piciorgros GmbH
+30142D     (base 16)		Piciorgros GmbH
+				Claudiastrasse 5
+				Cologne  NRW  51149
+				DE
+
+50-AF-73   (hex)		Shenzhen Bitland Information Technology Co., Ltd.
+50AF73     (base 16)		Shenzhen Bitland Information Technology Co., Ltd.
+				1-4F,44 Building,Tanglang Industrial Park and 1-6F,#7 Building,XiLi Tongfuyu Industrial Town,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+5C-9A-D8   (hex)		FUJITSU LIMITED
+5C9AD8     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+A4-C0-E1   (hex)		Nintendo Co., Ltd.
+A4C0E1     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+4C-3B-74   (hex)		VOGTEC(H.K.) Co., Ltd
+4C3B74     (base 16)		VOGTEC(H.K.) Co., Ltd
+				Flat 01, 2/F, On Ning Building,
+				Hong Kong    999077
+				CN
+
+68-43-52   (hex)		Bhuu Limited
+684352     (base 16)		Bhuu Limited
+				Office 1, 465 Mt Eden Road
+				Auckland    1023
+				NZ
+
+EC-E9-0B   (hex)		SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH
+ECE90B     (base 16)		SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH
+				RUA GUERRA DE AGUIAR, 220
+				São Paulo  SP  08275-260
+				BR
+
+A0-8C-9B   (hex)		Xtreme Technologies Corp
+A08C9B     (base 16)		Xtreme Technologies Corp
+				200 4616 Valiant Dr NW
+				Calgary  AB  T3A0X9
+				CA
+
+A8-39-44   (hex)		Actiontec Electronics, Inc
+A83944     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+74-E0-6E   (hex)		Ergophone GmbH
+74E06E     (base 16)		Ergophone GmbH
+				Temmlerstrasse 5
+				Marburg  Hessen  35039
+				DE
+
+0C-F0-B4   (hex)		Globalsat International Technology Ltd
+0CF0B4     (base 16)		Globalsat International Technology Ltd
+				17th floor,China Youse Building,No.6013 Shennan Avenue,Futian District,
+				Shenzhen  Guangdong  518040
+				CN
+
+48-DF-1C   (hex)		Wuhan NEC Fibre Optic Communications industry Co. Ltd
+48DF1C     (base 16)		Wuhan NEC Fibre Optic Communications industry Co. Ltd
+				3rd Road Guanshan,
+				Wuhan  Hubei  430074
+				CN
+
+D4-9C-8E   (hex)		University of FUKUI
+D49C8E     (base 16)		University of FUKUI
+				3-9-1 Bunkyo
+				Fukui City    910-8507
+				JP
+
+F8-F0-14   (hex)		RackWare Inc.
+F8F014     (base 16)		RackWare Inc.
+				44053 Fremont Blvd.
+				Fremont  CA  94538
+				US
+
+28-26-A6   (hex)		PBR electronics GmbH
+2826A6     (base 16)		PBR electronics GmbH
+				Berliner Strasse 5
+				Sandhausen  Baden Wuertemmberg  69207
+				DE
+
+B4-28-F1   (hex)		E-Prime Co., Ltd.
+B428F1     (base 16)		E-Prime Co., Ltd.
+				Rm1207, Kolon Science Valley, 811,
+				Seoul    152050
+				KR
+
+C0-12-42   (hex)		Alpha Security Products
+C01242     (base 16)		Alpha Security Products
+				10715 Sikes Place, Ste. 200
+				Charlotte  NC  28277
+				US
+
+BC-20-BA   (hex)		Inspur (Shandong) Electronic Information Co., Ltd
+BC20BA     (base 16)		Inspur (Shandong) Electronic Information Co., Ltd
+				No.1036 Shunya Rd.
+				Jinan  Shandong  250101
+				CN
+
+1C-FE-A7   (hex)		IDentytech Solutins Ltd.
+1CFEA7     (base 16)		IDentytech Solutins Ltd.
+				14 Hadaya Street 
+				Ramat- Hasharon    47226
+				IL
+
+30-4E-C3   (hex)		Tianjin Techua Technology Co., Ltd.
+304EC3     (base 16)		Tianjin Techua Technology Co., Ltd.
+				12-1-1401 Tianlinyuan Fulicheng Gulouxi Road,Nankai District 
+				Tianjin    300101
+				CN
+
+B4-CF-DB   (hex)		Shenzhen Jiuzhou Electric Co.,LTD
+B4CFDB     (base 16)		Shenzhen Jiuzhou Electric Co.,LTD
+				6F,Jiuzhou Electric Building,Southern No.12RD.,Hi-Tech Industrial Park,Nanshan District,
+				Shenzhen  Guangdong  518057
+				CN
+
+FC-D4-F2   (hex)		The Coca Cola Company
+FCD4F2     (base 16)		The Coca Cola Company
+				One Coca Cola Plaza
+				Atlanta  GA  30313
+				US
+
+5C-6A-7D   (hex)		KENTKART EGE ELEKTRONIK SAN. VE TIC. LTD. STI. 
+5C6A7D     (base 16)		KENTKART EGE ELEKTRONIK SAN. VE TIC. LTD. STI. 
+				1370 SK, NO:42/304, 
+				MONTRO  IZMIR  35230
+				TR
+
+44-59-9F   (hex)		Criticare Systems, Inc
+44599F     (base 16)		Criticare Systems, Inc
+				20925 Crossroads Circle
+				Waukasha  WI  53186
+				US
+
+3C-2F-3A   (hex)		SFORZATO Corp.
+3C2F3A     (base 16)		SFORZATO Corp.
+				863
+				HINO-SHI  TOKYO  191-0022
+				JP
+
+74-CE-56   (hex)		Packet Force Technology Limited Company
+74CE56     (base 16)		Packet Force Technology Limited Company
+				 2F., No.25, Sec. 1, Shuangshi Rd., Central Dist., 
+				Taichung    40046
+				TW
+
+AC-2F-A8   (hex)		Humannix Co.,Ltd.
+AC2FA8     (base 16)		Humannix Co.,Ltd.
+				#402, 98-4, Songpa-Dong, Songpa-Gu
+				Seoul    138-170
+				KR
+
+10-64-E2   (hex)		ADFweb.com s.r.l.
+1064E2     (base 16)		ADFweb.com s.r.l.
+				Strada Nuova, 17
+				Mareno di Piave  Treviso  31010
+				IT
+
+CC-34-D7   (hex)		GEWISS S.P.A.
+CC34D7     (base 16)		GEWISS S.P.A.
+				VIA ALESSANDRO VOLTA 1
+				CENATE SOTTO    24069
+				IT
+
+F0-2A-61   (hex)		Waldo Networks, Inc.
+F02A61     (base 16)		Waldo Networks, Inc.
+				4505 Spicewood Springs Rd
+				Austin  Texas  78759
+				US
+
+C8-A7-0A   (hex)		Verizon Business
+C8A70A     (base 16)		Verizon Business
+				One Digex Plaza
+				Beltsville  MD  20705
+				US
+
+60-DA-23   (hex)		Estech Co.,Ltd
+60DA23     (base 16)		Estech Co.,Ltd
+				#717,133-1,Sangdaewon-Dong
+				Seongnam-Si  Gyeonggi-Do  462-120
+				KR
+
+44-DC-CB   (hex)		SEMINDIA SYSTEMS PVT LTD
+44DCCB     (base 16)		SEMINDIA SYSTEMS PVT LTD
+				1006/13, Sy No.49/1&3, 7th Mile, A.M Indl Estate,
+				Bangalore  Karnataka  560068
+				IN
+
+A0-DE-05   (hex)		JSC Irbis-T
+A0DE05     (base 16)		JSC Irbis-T
+				39, Gorodskoy lane
+				Tula    300012
+				RU
+
+08-17-F4   (hex)		IBM Corp
+0817F4     (base 16)		IBM Corp
+				2051 Mission College Blvd
+				Santa Clara  CA  95054
+				US
+
+CC-D8-11   (hex)		Aiconn Technology Corporation
+CCD811     (base 16)		Aiconn Technology Corporation
+				5F, NO. 9, Alley 2, Lane 35, Ji-Hu Rd., Nei-Hu, 
+				Taipei City    11494
+				TW
+
+F4-38-14   (hex)		Shanghai Howell Electronic Co.,Ltd
+F43814     (base 16)		Shanghai Howell Electronic Co.,Ltd
+				5-5/F, Bldg.1, No.788 Fengzhen Rd., 
+				Shanghai     200434
+				CN
+
+90-61-0C   (hex)		Fida International (S) Pte Ltd
+90610C     (base 16)		Fida International (S) Pte Ltd
+				Blk 16, Kallang Place 
+				    339156
+				SG
+
+3C-5F-01   (hex)		Synerchip Co., Ltd.
+3C5F01     (base 16)		Synerchip Co., Ltd.
+				c/o Synerchip USA Corp.
+				Sunnyvale  CA  94085
+				US
+
+EC-BB-AE   (hex)		Digivoice Tecnologia em Eletronica Ltda
+ECBBAE     (base 16)		Digivoice Tecnologia em Eletronica Ltda
+				Alameda Juru, 159 - Torreo
+				Barueri  São Paulo  06455-010
+				BR
+
+34-A1-83   (hex)		AWare, Inc
+34A183     (base 16)		AWare, Inc
+				614 Massachusetts Ave. 
+				Cambridge  MA  02139
+				US
+
+98-73-C4   (hex)		Sage Electronic Engineering LLC
+9873C4     (base 16)		Sage Electronic Engineering LLC
+				201 Terry St.
+				Longmont  CO  80501
+				US
+
+B4-01-42   (hex)		GCI Science & Technology Co.,LTD
+B40142     (base 16)		GCI Science & Technology Co.,LTD
+				No.381,xingangzhong road ,
+				GuangZhou  GuangDong  510310
+				CN
+
+74-0A-BC   (hex)		LightwaveRF Technology Ltd
+740ABC     (base 16)		LightwaveRF Technology Ltd
+				Innovation Campus Birmingham
+				Faraday Wharf, Holt Street  Birmingham  B4 4BB
+				GB
+
+10-A1-3B   (hex)		FUJIKURA RUBBER LTD.
+10A13B     (base 16)		FUJIKURA RUBBER LTD.
+				1-840,Mihashi,Omiya
+				Saitama     330-0856
+				JP
+
+F4-E1-42   (hex)		Delta Elektronika BV
+F4E142     (base 16)		Delta Elektronika BV
+				Vissersdijk 4
+				Zierikzee    4301 ND
+				NL
+
+AC-81-12   (hex)		Gemtek Technology Co., Ltd.
+AC8112     (base 16)		Gemtek Technology Co., Ltd.
+				No. 1 Jen Ai Road Hsinchu Industrial Park Hukou, Hsinchu 30352 TAIWAN, REPUBLIC OF CHINA
+				Hsinchu  TAIWAN  30352
+				TW
+
+68-63-59   (hex)		Advanced Digital Broadcast SA
+686359     (base 16)		Advanced Digital Broadcast SA
+				Avenue de Tournay 7
+				Pregny-Chambesy    1292
+				CH
+
+28-06-1E   (hex)		NINGBO GLOBAL USEFUL ELECTRIC CO.,LTD
+28061E     (base 16)		NINGBO GLOBAL USEFUL ELECTRIC CO.,LTD
+				No.88,Kechuang South Road,
+				Ningbo  Zhejiang  315000
+				CN
+
+64-E8-E6   (hex)		global moisture management system
+64E8E6     (base 16)		global moisture management system
+				11132 broad river road
+				irmo  sc  29063
+				US
+
+E0-D1-0A   (hex)		Katoudenkikougyousyo co ltd
+E0D10A     (base 16)		Katoudenkikougyousyo co ltd
+				oujihontyou1-4-13
+				kita-ku  tokyo-to  114-0022
+				JP
+
+C4-4B-44   (hex)		Omniprint Inc.
+C44B44     (base 16)		Omniprint Inc.
+				1923 East Deere Ave.
+				Santa Ana  CA  92705
+				US
+
+18-92-2C   (hex)		Virtual Instruments
+18922C     (base 16)		Virtual Instruments
+				100 Enterprise Way
+				Scotts Valley  CA  95066
+				US
+
+A4-9B-13   (hex)		Digital Check
+A49B13     (base 16)		Digital Check
+				630 Dundee Rd. Suite 210
+				Northbrook  IL  60062
+				US
+
+C8-EE-08   (hex)		TANGTOP TECHNOLOGY CO.,LTD
+C8EE08     (base 16)		TANGTOP TECHNOLOGY CO.,LTD
+				1F,NO.153,Ligon St.,Beitou District
+				Taipei City     112
+				TW
+
+74-72-F2   (hex)		Chipsip Technology Co., Ltd.
+7472F2     (base 16)		Chipsip Technology Co., Ltd.
+				8F-1, No.186, Jian-Yi Road, ChungHo City,
+				Taipei    235
+				TW
+
+48-C8-B6   (hex)		SysTec GmbH
+48C8B6     (base 16)		SysTec GmbH
+				Ludwig-Erhard-Strasse 6
+				Bergheim-Glessen  NRW  50129
+				DE
+
+3C-62-78   (hex)		SHENZHEN JETNET TECHNOLOGY CO.,LTD.
+3C6278     (base 16)		SHENZHEN JETNET TECHNOLOGY CO.,LTD.
+				Room 403,4th floor,Qinghua Information Building,Keyuan Road,North District of Tech-Park,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+C8-D5-FE   (hex)		Shenzhen Zowee Technology Co., Ltd
+C8D5FE     (base 16)		Shenzhen Zowee Technology Co., Ltd
+				Block 5, Science and Technology Industrial Park of
+				Shenzhen  GuangDong  518055
+				CN
+
+2C-30-68   (hex)		Pantech Co.,Ltd
+2C3068     (base 16)		Pantech Co.,Ltd
+				110-1 Ongjeong-Ri, Tongjin-Eup
+				Gimpo-Si  Gyounggi-Do  415-865
+				KR
+
+00-BD-27   (hex)		Exar Corp.
+00BD27     (base 16)		Exar Corp.
+				48720 Kato Rd.
+				Fremont  CA  94538
+				US
+
+5C-40-58   (hex)		Jefferson Audio Video Systems, Inc.
+5C4058     (base 16)		Jefferson Audio Video Systems, Inc.
+				13020 Middletown Industrial Blvd.
+				Louisville  Kentucky  40223
+				US
+
+58-D0-8F   (hex)		IEEE 1904.1 Working Group
+58D08F     (base 16)		IEEE 1904.1 Working Group
+				1351 Redwood Way,
+				Petaluma  CA  94954
+				US
+
+6C-9C-E9   (hex)		Nimble Storage
+6C9CE9     (base 16)		Nimble Storage
+				2645 Zanker Road
+				San Jose  CA  95134
+				US
+
+CC-09-C8   (hex)		IMAQLIQ LTD
+CC09C8     (base 16)		IMAQLIQ LTD
+				Obvodny Canal 93A
+				St.Petersburg    191119
+				RU
+
+9C-45-63   (hex)		DIMEP Sistemas
+9C4563     (base 16)		DIMEP Sistemas
+				Av. Mofarrej, 840
+				São Paulo    05311000
+				BR
+
+D4-3D-67   (hex)		Carma Industries Inc.
+D43D67     (base 16)		Carma Industries Inc.
+				132 Walsh Road
+				Lindsay  Ontario  K9V 4R3
+				CA
+
+E0-A6-70   (hex)		Nokia Corporation
+E0A670     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+58-DB-8D   (hex)		Fast Co., Ltd.
+58DB8D     (base 16)		Fast Co., Ltd.
+				2-11-1 Iwamotocho
+				Chiyoda-ku  Tokyo  101-0032
+				JP
+
+E4-46-BD   (hex)		C&C TECHNIC TAIWAN CO., LTD.
+E446BD     (base 16)		C&C TECHNIC TAIWAN CO., LTD.
+				ROOM6 13F, NO.2,Jian 8th ROAD
+				Taipei  Chungho City,   23511
+				TW
+
+8C-DD-8D   (hex)		Wifly-City System Inc.
+8CDD8D     (base 16)		Wifly-City System Inc.
+				4F.,-1,NO 106,RUEIGUANG Rd.Neihu District,
+				Taipei City     114
+				TW
+
+20-A2-E7   (hex)		Lee-Dickens Ltd
+20A2E7     (base 16)		Lee-Dickens Ltd
+				Rushton Rd
+				Kettering  Northamptonshire  NN14 2QW
+				GB
+
+FC-ED-B9   (hex)		Arrayent
+FCEDB9     (base 16)		Arrayent
+				570 El Camino Real #150-419
+				Redwood City  CA  94063
+				US
+
+44-ED-57   (hex)		Longicorn, inc.
+44ED57     (base 16)		Longicorn, inc.
+				Rm1001-2, 10F, Byuksan Digital Valley1
+				Seoul    152-775
+				KR
+
+EC-98-C1   (hex)		Beijing Risbo Network Technology Co.,Ltd
+EC98C1     (base 16)		Beijing Risbo Network Technology Co.,Ltd
+				1/F Yinyan Building 2A,No.23 Anningzhuangdonglu Haidian District 
+				Beijing    100085
+				CN
+
+38-A9-5F   (hex)		Actifio Inc
+38A95F     (base 16)		Actifio Inc
+				225 Wyman Street
+				Waltham  MA  02451
+				IN
+
+F4-DC-DA   (hex)		Zhuhai Jiahe Communication Technology Co., limited
+F4DCDA     (base 16)		Zhuhai Jiahe Communication Technology Co., limited
+				4/F,East Of B5,Sourth Software Park,Tangjia,
+				Zhuhai  Guangdong  519085
+				CN
+
+E8-04-62   (hex)		Cisco Systems, Inc
+E80462     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+DC-D0-F7   (hex)		Bentek Systems Ltd.
+DCD0F7     (base 16)		Bentek Systems Ltd.
+				315 - 3750 46th Ave. SE
+				Calgary  AB  T2B 0L1
+				CA
+
+D4-A9-28   (hex)		GreenWave Reality Inc
+D4A928     (base 16)		GreenWave Reality Inc
+				39 Parker
+				Irvine  California  92618
+				US
+
+E0-62-90   (hex)		Jinan Jovision Science & Technology Co., Ltd.
+E06290     (base 16)		Jinan Jovision Science & Technology Co., Ltd.
+				Room 407, Tower C, Cyber Port Building,
+				Jinan  Shandong  250013
+				CN
+
+10-0E-2B   (hex)		NEC CASIO Mobile Communications
+100E2B     (base 16)		NEC CASIO Mobile Communications
+				1753,Shimonumabe
+				Kawasaki-shi  Kanagawa  211-8666
+				JP
+
+70-E1-39   (hex)		3view Ltd
+70E139     (base 16)		3view Ltd
+				168-172 Old Street
+				London    EC1V 9BP
+				GB
+
+18-42-2F   (hex)		Alcatel Lucent
+18422F     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+C4-63-54   (hex)		U-Raku, Inc.
+C46354     (base 16)		U-Raku, Inc.
+				401-1 Deba
+				Ritto-shi  Shiga  520-3041
+				JP
+
+40-5F-BE   (hex)		RIM
+405FBE     (base 16)		RIM
+				295 Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+68-54-F5   (hex)		enLighted Inc
+6854F5     (base 16)		enLighted Inc
+				1451 Grant Rd
+				Mountain View  CA  94040
+				US
+
+7C-B5-42   (hex)		ACES Technology
+7CB542     (base 16)		ACES Technology
+				#928, Hyundai Venture Ville
+				Seoul    135-539
+				KR
+
+90-54-46   (hex)		TES ELECTRONIC SOLUTIONS
+905446     (base 16)		TES ELECTRONIC SOLUTIONS
+				Immeuble Odyssee
+				BRUZ    35170
+				FR
+
+54-4A-05   (hex)		wenglor sensoric gmbh
+544A05     (base 16)		wenglor sensoric gmbh
+				wenglor Str. 3
+				Tettnang    88069
+				DE
+
+98-E1-65   (hex)		Accutome
+98E165     (base 16)		Accutome
+				3222 Phoenixville Pike
+				Malvern  PA  19355
+				US
+
+78-57-12   (hex)		Mobile Integration Workgroup
+785712     (base 16)		Mobile Integration Workgroup
+				4580 Klahanie DR SE STE 106
+				Issaquah  WA  98029
+				US
+
+38-0A-0A   (hex)		Sky-City Communication and Electronics Limited Company
+380A0A     (base 16)		Sky-City Communication and Electronics Limited Company
+				1109, Building A, Kefa Industrial park, Huanguan south road, Guanlan, 
+				Shenzhen  Guangdong  518110
+				CN
+
+0C-D6-96   (hex)		Amimon Ltd
+0CD696     (base 16)		Amimon Ltd
+				2 Maskit st
+				Herzlia    46733
+				IL
+
+F4-DC-4D   (hex)		Beijing CCD Digital Technology Co., Ltd
+F4DC4D     (base 16)		Beijing CCD Digital Technology Co., Ltd
+				107 Dongsi North Street, Dongcheng District, 
+				Beijing    100007
+				CN
+
+40-13-D9   (hex)		Global ES
+4013D9     (base 16)		Global ES
+				Sinimäentie 8 b
+				Espoo    02631
+				FI
+
+AC-4F-FC   (hex)		SVS-VISTEK GmbH
+AC4FFC     (base 16)		SVS-VISTEK GmbH
+				Muehlbachstraße 20
+				Seefeld  BY  82229
+				DE
+
+B4-37-41   (hex)		Consert, Inc.
+B43741     (base 16)		Consert, Inc.
+				4700 Falls of Neuse Rd.
+				Raleigh  NC  27609
+				US
+
+94-85-7A   (hex)		Evantage Industries Corp
+94857A     (base 16)		Evantage Industries Corp
+				815 Bridge St. W.
+				Waterloo  Ontario  N2V 2M7
+				CA
+
+40-83-DE   (hex)		Zebra Technologies Inc
+4083DE     (base 16)		Zebra Technologies Inc
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+88-97-DF   (hex)		Entrypass Corporation Sdn. Bhd.
+8897DF     (base 16)		Entrypass Corporation Sdn. Bhd.
+				No.40, Jalan TPP 1/10,
+				Puchong  Selangor Darul Ehsan  47100
+				MY
+
+24-AF-54   (hex)		NEXGEN Mediatech Inc.
+24AF54     (base 16)		NEXGEN Mediatech Inc.
+				8F No. 150, Jianyi Rd., 
+				Chung Ho  Taipei Hsien  235
+				TW
+
+F0-F8-42   (hex)		KEEBOX, Inc.
+F0F842     (base 16)		KEEBOX, Inc.
+				10 Poppy Trail
+				Rolling Hills  California  90274
+				US
+
+DC-4E-DE   (hex)		SHINYEI TECHNOLOGY CO., LTD.
+DC4EDE     (base 16)		SHINYEI TECHNOLOGY CO., LTD.
+				6-5-2, MINATOJIMA-MINAMIMACHI, CHUO-KU
+				KOBE  HYOGO  650-0047
+				JP
+
+E0-87-B1   (hex)		Nata-Info Ltd.
+E087B1     (base 16)		Nata-Info Ltd.
+				28, Prokhorova str.
+				Yoshkar-Ola  Republic Mari-El  424007
+				RU
+
+44-7C-7F   (hex)		Innolight Technology Corporation
+447C7F     (base 16)		Innolight Technology Corporation
+				3 Results Way
+				Cupertino  CA  95014
+				US
+
+D4-96-DF   (hex)		SUNGJIN C&T CO.,LTD
+D496DF     (base 16)		SUNGJIN C&T CO.,LTD
+				Daeya
+				Sheung  Gyeonggi  429-809
+				KR
+
+5C-86-4A   (hex)		Secret Labs LLC
+5C864A     (base 16)		Secret Labs LLC
+				315 Bleecker St #308
+				New York  NY  10014
+				US
+
+F0-AD-4E   (hex)		Globalscale Technologies, Inc.
+F0AD4E     (base 16)		Globalscale Technologies, Inc.
+				5F, No. 2 Building, Minxing Industrial Park
+				Shenzhen  Guangdong  518109
+				CN
+
+90-3D-5A   (hex)		Shenzhen Wision Technology Holding Limited
+903D5A     (base 16)		Shenzhen Wision Technology Holding Limited
+				Room 26A, Jinrun Building, N0.6019, Shennan Rd., Futian District
+				Shenzhen  Guangdong  518040
+				CN
+
+7C-A2-9B   (hex)		D.SignT GmbH & Co. KG
+7CA29B     (base 16)		D.SignT GmbH & Co. KG
+				Marktstraße 10
+				Kerken    47647
+				DE
+
+A0-40-41   (hex)		SAMWONFA Co.,Ltd.
+A04041     (base 16)		SAMWONFA Co.,Ltd.
+				470-5, Moonhyun2-Dong
+				Busan    608-042
+				KR
+
+6C-22-AB   (hex)		Ainsworth Game Technology
+6C22AB     (base 16)		Ainsworth Game Technology
+				10 Holker Street 
+				Newington  New South Wales  2127
+				AU
+
+30-18-CF   (hex)		DEOS control systems GmbH
+3018CF     (base 16)		DEOS control systems GmbH
+				Birkenallee 113
+				Rheine  NRW  48432
+				DE
+
+08-FA-E0   (hex)		Fohhn Audio AG
+08FAE0     (base 16)		Fohhn Audio AG
+				Hohes Gestade 3-7
+				Nuertingen  BW  72622
+				DE
+
+58-B9-E1   (hex)		Crystalfontz America, Inc.
+58B9E1     (base 16)		Crystalfontz America, Inc.
+				12412 E. Saltese Ave.
+				Spokane Valley  WA  99216
+				US
+
+20-D9-06   (hex)		Iota, Inc.
+20D906     (base 16)		Iota, Inc.
+				2212 Queen Anne Ave. N., #348
+				Seattle  WA  98109
+				US
+
+F4-55-95   (hex)		HENGBAO Corporation LTD.
+F45595     (base 16)		HENGBAO Corporation LTD.
+				8th Floor,Tower B,Xinsheng Mansion No.5 Financial Street,
+				Beijing    100140
+				CN
+
+1C-3A-4F   (hex)		AccuSpec Electronics, LLC
+1C3A4F     (base 16)		AccuSpec Electronics, LLC
+				8140 Hawthorne Drive
+				Erie  Pennsylvania  16509
+				US
+
+9C-4E-20   (hex)		Cisco Systems, Inc
+9C4E20     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D8-75-33   (hex)		Nokia Corporation
+D87533     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+98-35-B8   (hex)		Assembled Products Corporation
+9835B8     (base 16)		Assembled Products Corporation
+				115 E. Linden
+				Rogers  Arkansas  72756
+				US
+
+28-89-15   (hex)		CashGuard Sverige AB
+288915     (base 16)		CashGuard Sverige AB
+				Finlandsgatan 16
+				Kista    16474
+				SE
+
+4C-5D-CD   (hex)		Oy Finnish Electric Vehicle Technologies Ltd
+4C5DCD     (base 16)		Oy Finnish Electric Vehicle Technologies Ltd
+				Majavantie 10
+				TUUSULA    FI-04320
+				FI
+
+70-D5-7E   (hex)		Scalar Corporation
+70D57E     (base 16)		Scalar Corporation
+				1F San-Ei Bldg
+				Shinjuku-ku  Tokyo  160-0023
+				JP
+
+B0-E3-9D   (hex)		CAT SYSTEM CO.,LTD.
+B0E39D     (base 16)		CAT SYSTEM CO.,LTD.
+				3-147-27 Higasi-sinmachi Hirohata-ku
+				Himeji  Hyogo  671-1121
+				JP
+
+7C-2E-0D   (hex)		Blackmagic Design
+7C2E0D     (base 16)		Blackmagic Design
+				11 Gateway Court
+				Melbourne  Victoria  3207
+				AU
+
+18-0C-77   (hex)		Westinghouse Electric Company, LLC
+180C77     (base 16)		Westinghouse Electric Company, LLC
+				1000 Westinghouse Drive
+				Cranberry Township  PA  16066
+				US
+
+68-CA-00   (hex)		Octopus Systems Limited
+68CA00     (base 16)		Octopus Systems Limited
+				36/F, 148 Electric Road
+				    
+				HK
+
+E0-58-9E   (hex)		Laerdal Medical
+E0589E     (base 16)		Laerdal Medical
+				Tanke Svilandsgate 30
+				Stavanger    4002
+				NO
+
+0C-1D-C2   (hex)		SeAH Networks
+0C1DC2     (base 16)		SeAH Networks
+				9F, IT Venture Tower East Wing 78 Garak-Dong,
+				Seoul  Songpa-gu  138-950
+				KR
+
+54-75-D0   (hex)		Cisco Systems, Inc
+5475D0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+60-89-B7   (hex)		KAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ
+6089B7     (base 16)		KAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ
+				Atatürk Mah. 78 sokak ,No:10, Büyükalan Mevkii
+				Izmir  Aegean  35175
+				TR
+
+30-52-5A   (hex)		NST Co., LTD
+30525A     (base 16)		NST Co., LTD
+				RM301,Daeryung Techno Town 2, 569-21
+				Seoul    153-771
+				KR
+
+2C-A7-80   (hex)		True Technologies Inc.
+2CA780     (base 16)		True Technologies Inc.
+				R476, AngelCity 1st,
+				Seongnam,  Kyungki  463-862
+				KR
+
+7C-6F-06   (hex)		Caterpillar Trimble Control Technologies
+7C6F06     (base 16)		Caterpillar Trimble Control Technologies
+				5475 Kellenburger Rd.
+				Dayton  OH  45424
+				US
+
+60-12-83   (hex)		TSB REAL TIME LOCATION SYSTEMS S.L.
+601283     (base 16)		TSB REAL TIME LOCATION SYSTEMS S.L.
+				Ronda Auguste y Louis Lumière 23, Nave 13
+				Parque Tecnológico de Valencia   Paterna (Valencia)  46980
+				ES
+
+98-DC-D9   (hex)		UNITEC Co., Ltd.
+98DCD9     (base 16)		UNITEC Co., Ltd.
+				1-2-1-Shinyokohama
+				Yokohama-shi  Kanagawa  222-0033
+				JP
+
+C0-CF-A3   (hex)		Creative Electronics & Software, Inc.
+C0CFA3     (base 16)		Creative Electronics & Software, Inc.
+				650 Sundown Road
+				South Elgin  IL  60177
+				US
+
+94-23-6E   (hex)		Shenzhen Junlan Electronic Ltd
+94236E     (base 16)		Shenzhen Junlan Electronic Ltd
+				Block C,No.2 Industrial District, Fuyuan, Tangwei,Fuyong, Bao'an
+				Shenzhen  Guangdong  518103
+				CN
+
+10-E6-AE   (hex)		Source Technologies, LLC
+10E6AE     (base 16)		Source Technologies, LLC
+				2910 Whitehall Park Drive
+				Charlotte  NC  28273
+				US
+
+FC-E1-92   (hex)		Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd
+FCE192     (base 16)		Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd
+				No.28,Xinchuang Rd.,West Gaoxin District
+				Chengdu  Sichuan  611731
+				CN
+
+40-8A-9A   (hex)		TITENG CO., Ltd.
+408A9A     (base 16)		TITENG CO., Ltd.
+				7Fl. Shindo B/D 10 Garak-dong
+				Seoul    138-160
+				KR
+
+F4-45-ED   (hex)		Portable Innovation Technology Ltd.
+F445ED     (base 16)		Portable Innovation Technology Ltd.
+				601-602, 6/F Park Building,
+				Kowloon    
+				HK
+
+5C-E2-86   (hex)		Nortel Networks
+5CE286     (base 16)		Nortel Networks
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+8C-64-0B   (hex)		Beyond Devices d.o.o.
+8C640B     (base 16)		Beyond Devices d.o.o.
+				Trzaska cesta 515
+				Brezovica pri Ljubljani    SI-1351
+				SI
+
+94-9C-55   (hex)		Alta Data Technologies
+949C55     (base 16)		Alta Data Technologies
+				4901 Rockaway Blvd, Building A
+				Rio Rancho  NM  87124
+				US
+
+D4-79-C3   (hex)		Cameronet GmbH & Co. KG
+D479C3     (base 16)		Cameronet GmbH & Co. KG
+				Elberfelder Strasse 96
+				Remscheid  NRW  42853
+				DE
+
+70-D5-E7   (hex)		Wellcore Corporation
+70D5E7     (base 16)		Wellcore Corporation
+				2870 Zanker Road
+				San Jose  CA  95134
+				US
+
+3C-F7-2A   (hex)		Nokia Corporation
+3CF72A     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+54-5F-A9   (hex)		Teracom Limited
+545FA9     (base 16)		Teracom Limited
+				B-84, Sector - 60,
+				Noida  Uttar Pradesh  201 301
+				IN
+
+6C-32-DE   (hex)		Indieon Technologies Pvt. Ltd.
+6C32DE     (base 16)		Indieon Technologies Pvt. Ltd.
+				601, Alpha 2, Gigaspace IT Park
+				Pune   Maharastra  411014
+				IN
+
+14-A6-2C   (hex)		S.M. Dezac S.A.
+14A62C     (base 16)		S.M. Dezac S.A.
+				Vial Sant jordi S/N
+				Viladecavalls  Barcelona  08232
+				ES
+
+54-7F-EE   (hex)		Cisco Systems, Inc
+547FEE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+AC-EA-6A   (hex)		GENIX INFOCOMM CO., LTD.
+ACEA6A     (base 16)		GENIX INFOCOMM CO., LTD.
+				2F, Daebo Bldg. #1009-34
+				Seoul    153-829
+				KR
+
+E0-BC-43   (hex)		C2 Microsystems, Inc.
+E0BC43     (base 16)		C2 Microsystems, Inc.
+				2833 Junction Avenue
+				San Jose  California  95134
+				US
+
+2C-A8-35   (hex)		RIM
+2CA835     (base 16)		RIM
+				295 Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+C4-1E-CE   (hex)		HMI Sources Ltd.
+C41ECE     (base 16)		HMI Sources Ltd.
+				5 Floor, Suite 2, 233 Hsin Yi Road, Section 4
+				Taipei    10681
+				TW
+
+A8-F4-70   (hex)		Fujian Newland Communication Science Technologies Co.,Ltd.
+A8F470     (base 16)		Fujian Newland Communication Science Technologies Co.,Ltd.
+				Newland Science & Technology Park No.1 Rujiang West Rd., Mawei, 
+				Fuzhou  Fujian  350015
+				CN
+
+8C-73-6E   (hex)		FUJITSU LIMITED
+8C736E     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+B8-64-91   (hex)		CK Telecom Ltd
+B86491     (base 16)		CK Telecom Ltd
+				Keji Avenue,Heyuan Hi-tech Development Zone
+				Heyuan   Guangdong Province  517000
+				CN
+
+50-F0-03   (hex)		Open Stack, Inc.
+50F003     (base 16)		Open Stack, Inc.
+				Advanced Research Center #411
+				Bun-Dang, Seong-Nam  Gyung-Gi  463-816
+				KR
+
+DC-49-C9   (hex)		CASCO SIGNAL LTD
+DC49C9     (base 16)		CASCO SIGNAL LTD
+				No.489 Xizang Bei Road
+				Shanghai    200071
+				CN
+
+70-D8-80   (hex)		Upos System sp. z o.o.
+70D880     (base 16)		Upos System sp. z o.o.
+				Sienkiewicza 13
+				Knurow  Slaskie  44-190
+				PL
+
+A0-5D-C1   (hex)		TMCT Co., LTD.
+A05DC1     (base 16)		TMCT Co., LTD.
+				5F-561, #19-11 SanChong Rd.
+				Taipei    115
+				TW
+
+58-3C-C6   (hex)		Omneality Ltd.
+583CC6     (base 16)		Omneality Ltd.
+				10B Glossop Road
+				South Croydon  Surrey  CR2 0PU
+				GB
+
+B0-C8-AD   (hex)		People Power Company
+B0C8AD     (base 16)		People Power Company
+				620 Lowell Ave
+				Palo Alto  CA  94301
+				US
+
+18-17-14   (hex)		DAEWOOIS
+181714     (base 16)		DAEWOOIS
+				7F Namkwang Centlex Bldg. 440-4 Cheongcheon2-dong 
+				Incheon  Pupyeong-gu  82
+				KR
+
+F0-EC-39   (hex)		Essec
+F0EC39     (base 16)		Essec
+				Schoebroekstraat 48
+				Paal  Limburg  3583
+				BE
+
+44-6C-24   (hex)		Reallin Electronic Co.,Ltd
+446C24     (base 16)		Reallin Electronic Co.,Ltd
+				2/F, Building 3, No.202 Zhengzhong Rd, XiHu industry Park
+				Hang Zhou  Zhe Jiang  310030
+				CN
+
+20-46-F9   (hex)		Advanced Network Devices (dba:AND)
+2046F9     (base 16)		Advanced Network Devices (dba:AND)
+				3820 Ventura Drive
+				Arlington Heights  IL  60004
+				US
+
+48-71-19   (hex)		SGB GROUP LTD.
+487119     (base 16)		SGB GROUP LTD.
+				13F,No.192,Sec.2,Chung Hsin Rd.,Hsin Tien City
+				Taipei     231
+				TW
+
+04-FE-7F   (hex)		Cisco Systems, Inc
+04FE7F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-B1-EE   (hex)		H. ZANDER GmbH & Co. KG
+A4B1EE     (base 16)		H. ZANDER GmbH & Co. KG
+				Am Gut Wolf 15
+				Aachen    52070
+				DE
+
+84-21-41   (hex)		Shenzhen Ginwave Technologies Ltd.
+842141     (base 16)		Shenzhen Ginwave Technologies Ltd.
+				4/F,R2-A,High-Tech Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+A0-23-1B   (hex)		TeleComp R&D Corp.
+A0231B     (base 16)		TeleComp R&D Corp.
+				102 SW Orange Blossom
+				Lake City  Florida  32025
+				US
+
+B8-A3-E0   (hex)		BenRui Technology Co.,Ltd
+B8A3E0     (base 16)		BenRui Technology Co.,Ltd
+				No.3A room A Unit Hongsong Building 
+				ShenZhen  GuangDong  518000
+				CN
+
+3C-F5-2C   (hex)		DSPECIALISTS GmbH
+3CF52C     (base 16)		DSPECIALISTS GmbH
+				Helmholtzstr. 2-9 L
+				Berlin    10587
+				DE
+
+EC-44-76   (hex)		Cisco Systems, Inc
+EC4476     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-18-11   (hex)		Decatur Electronics
+6C1811     (base 16)		Decatur Electronics
+				715 Bright Street
+				Decatur  IL  62522
+				US
+
+F8-E9-68   (hex)		Egker Kft.
+F8E968     (base 16)		Egker Kft.
+				Szuglo u. 49.
+				Budapest    1145
+				HU
+
+A8-99-5C   (hex)		aizo ag
+A8995C     (base 16)		aizo ag
+				Brandstrasse 33
+				Schlieren    8952
+				CH
+
+40-12-E4   (hex)		Compass-EOS
+4012E4     (base 16)		Compass-EOS
+				7 Giborei Israel
+				Natanya    42504
+				IL
+
+54-03-F5   (hex)		EBN Technology Corp.
+5403F5     (base 16)		EBN Technology Corp.
+				10F, No.90, Sec. 1, Sintai 5th Rd.
+				Sijhih City  Taipei County  22102
+				US
+
+04-C0-5B   (hex)		Tigo Energy
+04C05B     (base 16)		Tigo Energy
+				170 Knowles Dr
+				Los Gatos  CA  95032
+				US
+
+80-38-FD   (hex)		LeapFrog Enterprises, Inc.
+8038FD     (base 16)		LeapFrog Enterprises, Inc.
+				6401 Holis Street
+				Emeryville  CA  94608
+				US
+
+AC-BE-B6   (hex)		Visualedge Technology Co., Ltd.
+ACBEB6     (base 16)		Visualedge Technology Co., Ltd.
+				13FL.-1 No. 716, Zhongzheng Road, Zhonghe City,
+				Taipei County,     23511
+				TW
+
+2C-91-27   (hex)		Eintechno Corporation
+2C9127     (base 16)		Eintechno Corporation
+				3359-1, kako, Inami-cho
+				kako-gun  hyogo  675-1105
+				JP
+
+AC-58-3B   (hex)		Human Assembler, Inc.
+AC583B     (base 16)		Human Assembler, Inc.
+				2-1-11-6F
+				Shibuya-ku  Tokyo  150-0002
+				JP
+
+E8-E7-76   (hex)		Shenzhen Kootion Technology Co., Ltd
+E8E776     (base 16)		Shenzhen Kootion Technology Co., Ltd
+				3/F, Building #4, XinJianXing Industrial Park
+				Shenzhen  Guangdong Province  518108
+				CN
+
+68-1F-D8   (hex)		Siemens Industry, Inc.
+681FD8     (base 16)		Siemens Industry, Inc.
+				10670 Treena Street
+				San Diego  CA  92131
+				US
+
+40-01-C6   (hex)		3COM EUROPE LTD
+4001C6     (base 16)		3COM EUROPE LTD
+				Peoplebuilding 2
+				Hemel Hempstead  HERTS.  HP2 4NW
+				GB
+
+9C-5E-73   (hex)		Calibre UK LTD
+9C5E73     (base 16)		Calibre UK LTD
+				Cornwall House
+				Bradford  West Yorkshire  BD8 7JS
+				GB
+
+5C-14-37   (hex)		Thyssenkrupp Aufzugswerke GmbH
+5C1437     (base 16)		Thyssenkrupp Aufzugswerke GmbH
+				Bernhaeuser Str.45
+				Neuhausen a.d.F    73765
+				DE
+
+9C-55-B4   (hex)		I.S.E. S.r.l.
+9C55B4     (base 16)		I.S.E. S.r.l.
+				Via della Canapiglia 5
+				Migliarino Pisano  PISA  56010
+				IT
+
+70-2F-97   (hex)		Aava Mobile Oy
+702F97     (base 16)		Aava Mobile Oy
+				Nahkatehtaankatu 2
+				Oulu    90100
+				FI
+
+10-CA-81   (hex)		PRECIA
+10CA81     (base 16)		PRECIA
+				Le ruissol VEYRAS
+				PRIVAS    07001
+				FR
+
+40-A6-A4   (hex)		PassivSystems Ltd
+40A6A4     (base 16)		PassivSystems Ltd
+				Medway House
+				Newbury  Berks  RG14 2PZ
+				GB
+
+94-BA-31   (hex)		Visiontec da Amazônia Ltda.
+94BA31     (base 16)		Visiontec da Amazônia Ltda.
+				Rod. Geraldo Scavone, 2300 - Galpao 27
+				Jacareí  SP  12305-490
+				BR
+
+B8-94-D2   (hex)		Retail Innovation HTT AB
+B894D2     (base 16)		Retail Innovation HTT AB
+				Sjöängsvägen 2
+				Sollentuna    S-192 72
+				SE
+
+B0-E9-7E   (hex)		Advanced Micro Peripherals
+B0E97E     (base 16)		Advanced Micro Peripherals
+				Unit 1 Harrier House
+				Witchford  Cambridgeshire  CB6 2HY
+				GB
+
+F0-C2-4C   (hex)		Zhejiang FeiYue Digital Technology Co., Ltd
+F0C24C     (base 16)		Zhejiang FeiYue Digital Technology Co., Ltd
+				Baoting Industrial Park, 531 Jiaogong Road
+				 Hangzhou City  Zhejiang Province  310012
+				CN
+
+E4-75-1E   (hex)		Getinge Sterilization AB
+E4751E     (base 16)		Getinge Sterilization AB
+				Box 69
+				Getinge    31044
+				SE
+
+9C-5B-96   (hex)		NMR Corporation
+9C5B96     (base 16)		NMR Corporation
+				3F Esprit Build.,1-3-6 Nishi-Nippori
+				Arakawa-Ku  Tokyo  116-0013
+				JP
+
+60-F1-3D   (hex)		JABLOCOM s.r.o.
+60F13D     (base 16)		JABLOCOM s.r.o.
+				V Nivach 12
+				Jablonec nad Nisou    466 01
+				CZ
+
+50-25-2B   (hex)		Nethra Imaging Incorporated
+50252B     (base 16)		Nethra Imaging Incorporated
+				2855 Bowers Ave
+				Santa Clara  CA  95051
+				US
+
+F8-81-1A   (hex)		OVERKIZ
+F8811A     (base 16)		OVERKIZ
+				EUROPA 3
+				Archamps    74160
+				FR
+
+38-63-F6   (hex)		3NOD MULTIMEDIA(SHENZHEN)CO.,LTD
+3863F6     (base 16)		3NOD MULTIMEDIA(SHENZHEN)CO.,LTD
+				F6,Building11,Shenzhen Software Park
+				Shenzhen  Guangdong  518057
+				CN
+
+78-B8-1A   (hex)		INTER SALES A/S
+78B81A     (base 16)		INTER SALES A/S
+				Stavneagervej 22
+				Egaa    8250
+				DK
+
+CC-00-80   (hex)		BETTINI SRL
+CC0080     (base 16)		BETTINI SRL
+				VIA CESARE BATTISTI 22
+				CESANO MADERNO  MILAN  20031
+				IT
+
+64-4B-C3   (hex)		Shanghai WOASiS Telecommunications Ltd., Co.
+644BC3     (base 16)		Shanghai WOASiS Telecommunications Ltd., Co.
+				15F, Software Building,
+				Shanghai    200233
+				CN
+
+94-2E-63   (hex)		Finsécur
+942E63     (base 16)		Finsécur
+				52 rue Paul Lescop
+				Nanterre    92000
+				FR
+
+AC-83-17   (hex)		Shenzhen Furtunetel Communication Co., Ltd
+AC8317     (base 16)		Shenzhen Furtunetel Communication Co., Ltd
+				F19 building A zhongke plaza Nan yi street high-tech zone, Nanshan District, 
+				Shenzhen  Guangdong  518057
+				CN
+
+AC-D1-80   (hex)		Crexendo Business Solutions, Inc.
+ACD180     (base 16)		Crexendo Business Solutions, Inc.
+				10201 S. 5st  St.
+				Phoenix  AZ  85044
+				US
+
+CC-CC-4E   (hex)		Sun Fountainhead USA. Corp 
+CCCC4E     (base 16)		Sun Fountainhead USA. Corp 
+				801 S. Garfiled AVE # 236 
+				Los Angeles   California   91801
+				US
+
+68-85-40   (hex)		IGI Mobile, Inc.
+688540     (base 16)		IGI Mobile, Inc.
+				4F Kyongnam Bldg.,
+				Seoul    135-080
+				KR
+
+A0-9A-5A   (hex)		Time Domain
+A09A5A     (base 16)		Time Domain
+				330 Wynn Drive
+				Huntsville  AL  35805
+				US
+
+64-A8-37   (hex)		Juni Korea Co., Ltd
+64A837     (base 16)		Juni Korea Co., Ltd
+				E603 Bundang Techno-Park 151
+				Seongnam  Gyeonggi  463-760
+				KR
+
+20-2C-B7   (hex)		Kong Yue Electronics & Information Industry (Xinhui) Ltd.
+202CB7     (base 16)		Kong Yue Electronics & Information Industry (Xinhui) Ltd.
+				Kong Yue Industrial Park, 18 Kongyue Road, Jinguzhou
+				Jiangmen  Guangdong  529141
+				CN
+
+60-9F-9D   (hex)		CloudSwitch
+609F9D     (base 16)		CloudSwitch
+				200 Wheeler Rd
+				Burlington  MA  01803
+				US
+
+48-34-3D   (hex)		IEP GmbH
+48343D     (base 16)		IEP GmbH
+				Am Pferdemarkt 9c
+				Langenhagen  Niedersachsen  30853
+				DE
+
+D4-AA-FF   (hex)		MICRO WORLD 
+D4AAFF     (base 16)		MICRO WORLD 
+				19370 VAN NESS AVE 
+				TORRANCE   CA  90501
+				US
+
+74-E5-37   (hex)		RADSPIN
+74E537     (base 16)		RADSPIN
+				Songpa-gu Garak-dong 78
+				Seoul    138-950
+				KR
+
+00-26-E9   (hex)		SP Corp
+0026E9     (base 16)		SP Corp
+				Guro 3-dong ,Guro-gu
+				Seoul    152-780
+				KR
+
+00-26-EB   (hex)		Advanced Spectrum Technology Co., Ltd.
+0026EB     (base 16)		Advanced Spectrum Technology Co., Ltd.
+				1F., No.67 Jhongjheng Rd.
+				Sinjhuang  Taiwan  242
+				TW
+
+00-26-E1   (hex)		Stanford University, OpenFlow Group
+0026E1     (base 16)		Stanford University, OpenFlow Group
+				353 Serra Mall
+				Stanford  CA  94305-9030
+				US
+
+00-27-17   (hex)		CE Digital(Zhenjiang)Co.,Ltd
+002717     (base 16)		CE Digital(Zhenjiang)Co.,Ltd
+				Wei 3 Road, Dingmao, Eco.Dev.Zone,
+				Zhenjiang    212009
+				CN
+
+00-27-16   (hex)		Adachi-Syokai Co., Ltd.
+002716     (base 16)		Adachi-Syokai Co., Ltd.
+				228-2 Hazama Maki
+				Fukuchiyama-shi  Kyoto  620-0913
+				JP
+
+00-26-DC   (hex)		Optical Systems Design
+0026DC     (base 16)		Optical Systems Design
+				7/1 Vuko Place
+				Warriewood  NSW  2102
+				AU
+
+00-27-00   (hex)		Shenzhen Siglent Technology Co., Ltd.
+002700     (base 16)		Shenzhen Siglent Technology Co., Ltd.
+				BUILDING A8,TANGLANG INDUSTRIAL ZONE,XILI,NANSHAN
+				Shenzhen  Guangdong  518000
+				CN
+
+00-26-EC   (hex)		Legrand Home Systems, Inc
+0026EC     (base 16)		Legrand Home Systems, Inc
+				301 Fulling Mill Rd
+				Middletown  PA  17057
+				US
+
+00-26-D4   (hex)		IRCA SpA
+0026D4     (base 16)		IRCA SpA
+				Viale Venezia 31 - C.P. 248
+				San Vendemiano (Treviso)  Italy  31020
+				IT
+
+00-26-63   (hex)		Shenzhen Huitaiwei Tech. Ltd, co.
+002663     (base 16)		Shenzhen Huitaiwei Tech. Ltd, co.
+				JianDa Building,501-502
+				Shenzhen  Guangdong  518000
+				CN
+
+00-26-61   (hex)		Irumtek Co., Ltd.
+002661     (base 16)		Irumtek Co., Ltd.
+				Apt 708  513-22 Joongil Eines Platz
+				Seongnam-City  Gyunggi-do  462-120
+				KR
+
+00-26-5B   (hex)		Hitron Technologies. Inc
+00265B     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+00-26-56   (hex)		Sansonic Electronics USA
+002656     (base 16)		Sansonic Electronics USA
+				9950 Baldwin Place
+				El Monte  Cailfornia  91731
+				US
+
+00-26-7D   (hex)		A-Max Technology Macao Commercial Offshore Company Limited
+00267D     (base 16)		A-Max Technology Macao Commercial Offshore Company Limited
+				Avenida Da Praia Grande No. 409
+				Macau    
+				CN
+
+00-26-7C   (hex)		Metz-Werke GmbH & Co KG
+00267C     (base 16)		Metz-Werke GmbH & Co KG
+				Ohmstrasse 55
+				Zirndorf    90513
+				DE
+
+00-26-73   (hex)		RICOH COMPANY,LTD.
+002673     (base 16)		RICOH COMPANY,LTD.
+				810 Shimoimaizumi
+				Ebina-City  Kanagawa-Pref  243-0460
+				JP
+
+00-26-6D   (hex)		MobileAccess Networks
+00266D     (base 16)		MobileAccess Networks
+				8391 Old Courthouse Rd.
+				Vienna  VA  22182
+				US
+
+00-26-C0   (hex)		EnergyHub
+0026C0     (base 16)		EnergyHub
+				232 3rd St C201
+				Brooklyn  NY  11215
+				US
+
+00-26-C1   (hex)		ARTRAY CO., LTD.
+0026C1     (base 16)		ARTRAY CO., LTD.
+				5F Ueno Bldg, 1-17-5 Kouenjikita,
+				Tokyo    166-0002
+				JP
+
+00-26-BE   (hex)		Schoonderbeek Elektronica Systemen B.V.
+0026BE     (base 16)		Schoonderbeek Elektronica Systemen B.V.
+				Roggestraat 3-5
+				Nieuw Vennep  Noord Holland  2153GC
+				NL
+
+00-26-B5   (hex)		ICOMM Tele Ltd
+0026B5     (base 16)		ICOMM Tele Ltd
+				304, Trendset Towers,
+				Hyderabad  AP  500034
+				IN
+
+00-26-8C   (hex)		StarLeaf Ltd.
+00268C     (base 16)		StarLeaf Ltd.
+				Chaston House, Mill Court
+				Cambridge    CB22 5LD
+				GB
+
+00-26-8B   (hex)		Guangzhou Escene Computer Technology Limited
+00268B     (base 16)		Guangzhou Escene Computer Technology Limited
+				Room 209, No.54-56 Yuehe Building, Huacui Street, Tianhe Industrial Park
+				Guangzhou  Guangdong Province  510065
+				CN
+
+00-26-6F   (hex)		Coordiwise Technology Corp.
+00266F     (base 16)		Coordiwise Technology Corp.
+				2F., No.123, Sec. 1, Lioujia 5th Rd.
+				Jhubei City, Hsinchu County    30272
+				TW
+
+00-26-6E   (hex)		Nissho-denki Co.,LTD.
+00266E     (base 16)		Nissho-denki Co.,LTD.
+				3-7-6,chidori
+				ohta  Tokyo  146-0083
+				JP
+
+00-26-C3   (hex)		Insightek Corp.
+0026C3     (base 16)		Insightek Corp.
+				5F,NO.755,Chung Cheng Rd.,
+				Chung Ho City  Taipei Hsien  235
+				TW
+
+00-26-81   (hex)		Interspiro AB
+002681     (base 16)		Interspiro AB
+				Box 2853
+				Täby    18728
+				SE
+
+00-26-83   (hex)		Ajoho Enterprise Co., Ltd.
+002683     (base 16)		Ajoho Enterprise Co., Ltd.
+				7F., No.101, Ruihu St.
+				Taipei    114
+				TW
+
+00-26-98   (hex)		Cisco Systems, Inc
+002698     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-26-9B   (hex)		SOKRAT Ltd.
+00269B     (base 16)		SOKRAT Ltd.
+				Volkonskogo 2
+				Irkutsk    664007
+				RU
+
+00-26-A1   (hex)		Megger
+0026A1     (base 16)		Megger
+				4271 Bronze Way
+				Dallas  Texas  75237
+				US
+
+00-26-44   (hex)		Thomson Telecom Belgium
+002644     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				Edegem  Antwerp  B-2650
+				BE
+
+00-26-46   (hex)		SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED
+002646     (base 16)		SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED
+				No.10 Ping Nan East Road
+				Shenyang  Liao Ning  110014
+				CN
+
+00-26-3F   (hex)		LIOS Technology GmbH
+00263F     (base 16)		LIOS Technology GmbH
+				Schanzenstraße 39
+				Köln  Germany  D-51063
+				DE
+
+00-26-3B   (hex)		Onbnetech
+00263B     (base 16)		Onbnetech
+				506, Samsung IT Valley, 197-5
+				Guro-Gu  Seoul  152-848
+				KR
+
+00-26-58   (hex)		T-Platforms (Cyprus) Limited
+002658     (base 16)		T-Platforms (Cyprus) Limited
+				Themistokli Dervi 3, Julia House
+				Nicosia    P.C.-1066
+				CY
+
+00-26-4C   (hex)		Shanghai DigiVision Technology Co., Ltd.
+00264C     (base 16)		Shanghai DigiVision Technology Co., Ltd.
+				No. 333 Guangji Rd.
+				Shanghai    200083
+				CN
+
+00-26-2F   (hex)		HAMAMATSU TOA ELECTRONICS
+00262F     (base 16)		HAMAMATSU TOA ELECTRONICS
+				9162-1
+				HAMAMATSU  SIZUOKA  431-2102
+				JP
+
+00-26-31   (hex)		COMMTACT LTD
+002631     (base 16)		COMMTACT LTD
+				Nahal Snir 10
+				Yazne    81101
+				IL
+
+00-25-FB   (hex)		Tunstall Healthcare A/S
+0025FB     (base 16)		Tunstall Healthcare A/S
+				Stroemmen 6
+				Noerresundby    9400
+				DK
+
+00-25-F4   (hex)		KoCo Connector AG
+0025F4     (base 16)		KoCo Connector AG
+				Marienstraße 12
+				Berlin    10117
+				DE
+
+00-26-06   (hex)		RAUMFELD GmbH
+002606     (base 16)		RAUMFELD GmbH
+				Reichenberger Str. 124
+				Berlin    10999
+				DE
+
+00-26-07   (hex)		Enabling Technology Pty Ltd
+002607     (base 16)		Enabling Technology Pty Ltd
+				23/44 Kings Park Road
+				West Perth  Western Australia  6005
+				AU
+
+00-26-24   (hex)		Thomson Inc.
+002624     (base 16)		Thomson Inc.
+				101 West 103rd Street
+				Indianapolis  IN  46290
+				US
+
+00-26-05   (hex)		CC Systems AB
+002605     (base 16)		CC Systems AB
+				Box 83
+				Alfta    822 22
+				SE
+
+00-26-02   (hex)		SMART Temps LLC
+002602     (base 16)		SMART Temps LLC
+				435 PARK PL CIRCLE SUITE 100
+				Mishawaka  IN  46545
+				US
+
+00-26-1A   (hex)		Femtocomm System Technology Corp.
+00261A     (base 16)		Femtocomm System Technology Corp.
+				2F.-2,No.28, Taiyuan St.,
+				Jhubei City,  Hsinchu Country,  30288
+				TW
+
+00-26-34   (hex)		Infineta Systems, Inc
+002634     (base 16)		Infineta Systems, Inc
+				2870 Zanker Rd
+				San Jose  CA  95134
+				US
+
+00-25-99   (hex)		Hedon e.d. B.V.
+002599     (base 16)		Hedon e.d. B.V.
+				Elektronicaweg 15
+				Delft  Zuid Holland  2628 XG
+				NL
+
+00-25-97   (hex)		Kalki Communication Technologies
+002597     (base 16)		Kalki Communication Technologies
+				4th Floor, Survey. No. 17/1, Outer Ring Road
+				Opp. Prestige Cessna Park  Bangalore   560 103
+				IN
+
+00-25-92   (hex)		Guangzhou Shirui Electronic Co., Ltd
+002592     (base 16)		Guangzhou Shirui Electronic Co., Ltd
+				301D, No.9, Caipin Road,
+				Guangzhou  Guangdong  510663
+				CN
+
+00-25-94   (hex)		Eurodesign BG LTD
+002594     (base 16)		Eurodesign BG LTD
+				Business Park Sofia, Building 4, Floor 2
+				Sofia    1113
+				BG
+
+00-25-9F   (hex)		TechnoDigital Technologies GmbH
+00259F     (base 16)		TechnoDigital Technologies GmbH
+				Haesslerstraße 8
+				Erfurt  Thuringia  99096
+				DE
+
+00-25-9D   (hex)		Private
+00259D     (base 16)		Private
+
+00-25-98   (hex)		Zhong Shan City Litai Electronic Industrial Co. Ltd
+002598     (base 16)		Zhong Shan City Litai Electronic Industrial Co. Ltd
+				No.3 Industrial District, Wuguishan, Cheng gui Road
+				Zhong shan City  Guang dong Province  528458
+				CN
+
+00-25-E3   (hex)		Hanshinit Inc.
+0025E3     (base 16)		Hanshinit Inc.
+				Dong-Won Bld 3F, 395-13, Gal-Ma 2, Seo-Gu
+				Daejeon    302-809
+				KR
+
+00-25-D4   (hex)		General Dynamics Mission Systems
+0025D4     (base 16)		General Dynamics Mission Systems
+				150 Rustcraft Road
+				Dedham  MA  02026
+				US
+
+00-25-C2   (hex)		RingBell Co.,Ltd.
+0025C2     (base 16)		RingBell Co.,Ltd.
+				10586 KingGeorge Hwy
+				Surrey  B.C  V3T 2X3
+				CA
+
+00-25-A7   (hex)		itron
+0025A7     (base 16)		itron
+				5390 Triangle Parkway
+				Norcross  GA  30092
+				US
+
+00-25-A9   (hex)		Shanghai Embedway Information Technologies Co.,Ltd
+0025A9     (base 16)		Shanghai Embedway Information Technologies Co.,Ltd
+				2F,Building 9,Lujiazui Software Park, No.20,Lane 91,E'Shan Road
+				Shanghai    200127
+				CN
+
+00-25-B4   (hex)		Cisco Systems, Inc
+0025B4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-25-B2   (hex)		MBDA Deutschland GmbH
+0025B2     (base 16)		MBDA Deutschland GmbH
+				Hagenauer Forst 27
+				Schrobenhausen  Bavaria  86529
+				DE
+
+00-25-EF   (hex)		I-TEC Co., Ltd.
+0025EF     (base 16)		I-TEC Co., Ltd.
+				7/F,KAWARAMACHI KOYO BLDG.3-4-3,KAWARAMCHI,CHUO-KU,
+				OSAKA    541-0048
+				JP
+
+00-25-28   (hex)		Daido Signal Co., Ltd.
+002528     (base 16)		Daido Signal Co., Ltd.
+				6-17-19
+				Minato-ku  TOKYO  105-8650
+				JP
+
+00-25-26   (hex)		Genuine Technologies Co., Ltd.
+002526     (base 16)		Genuine Technologies Co., Ltd.
+				Klingelnberg Bldg.
+				Yokohama  Kanagawa  222-0033
+				JP
+
+00-25-6B   (hex)		ATENIX E.E. s.r.l.
+00256B     (base 16)		ATENIX E.E. s.r.l.
+				Via Torricelli, 15/b
+				VERONA  VR  37135
+				IT
+
+00-25-6E   (hex)		Van Breda B.V.
+00256E     (base 16)		Van Breda B.V.
+				Mercuriusweg 21
+				Brummen  Gelderland  6971 GV
+				NL
+
+00-25-65   (hex)		Vizimax Inc.
+002565     (base 16)		Vizimax Inc.
+				2284, rue de la Province
+				Longueuil  Québec  J4G 1G1
+				CA
+
+00-25-5E   (hex)		Shanghai Dare Technologies Co.,Ltd.
+00255E     (base 16)		Shanghai Dare Technologies Co.,Ltd.
+				22F,Info Tech Building, No.1555,Kongjiang Road,
+				  Shanghai  200092
+				CN
+
+00-25-3B   (hex)		din Dietmar Nocker Facilitymanagement GmbH
+00253B     (base 16)		din Dietmar Nocker Facilitymanagement GmbH
+				Kotzinastrasse 5
+				Linz  Upper Austria  4030
+				AT
+
+00-25-3D   (hex)		DRS Consolidated Controls
+00253D     (base 16)		DRS Consolidated Controls
+				21 South Street
+				Danbury  CT  06810-8147
+				US
+
+00-25-35   (hex)		Minimax GmbH & Co KG
+002535     (base 16)		Minimax GmbH & Co KG
+				Industriestrasse 10/12
+				Bad Oldesloe  SH  23840
+				DE
+
+00-25-84   (hex)		Cisco Systems, Inc
+002584     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-25-79   (hex)		J & F Labs
+002579     (base 16)		J & F Labs
+				1214 W. Boston Post Road
+				Mamaroneck  NY  10543
+				US
+
+00-25-7F   (hex)		CallTechSolution Co.,Ltd
+00257F     (base 16)		CallTechSolution Co.,Ltd
+				#123,Daewooprugio B/D,344-1, Seogyo-Dong,Mapo-gu
+				Seoul    121-837
+				KR
+
+00-25-77   (hex)		D-BOX Technologies
+002577     (base 16)		D-BOX Technologies
+				2172 de la Province
+				Longueuil  Quebec  J4G 1R7
+				CA
+
+00-25-72   (hex)		Nemo-Q International AB
+002572     (base 16)		Nemo-Q International AB
+				Box 210
+				Sollentuna    19123
+				SE
+
+00-25-29   (hex)		COMELIT GROUP S.P.A
+002529     (base 16)		COMELIT GROUP S.P.A
+				DON ARRIGONI N. 5
+				SAN LORENZO, ROVETTA  BERGAMO  24020
+				IT
+
+00-25-2A   (hex)		Chengdu GeeYa Technology Co.,LTD
+00252A     (base 16)		Chengdu GeeYa Technology Co.,LTD
+				50 Shuxi Road,
+				Chengdu  SiChuan  610091
+				CN
+
+00-25-8A   (hex)		Pole/Zero Corporation
+00258A     (base 16)		Pole/Zero Corporation
+				5530 Union Centre Drive
+				West Chester  OH  45069
+				US
+
+00-25-5F   (hex)		SenTec AG
+00255F     (base 16)		SenTec AG
+				Ringstrasse 39
+				Therwil    4106
+				CH
+
+00-24-EC   (hex)		United Information Technology Co.,Ltd.
+0024EC     (base 16)		United Information Technology Co.,Ltd.
+				5/F,9th Building,Software Park,2nd Keji-zhong Road,High-Tech Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+00-24-E6   (hex)		In Motion Technology Inc.
+0024E6     (base 16)		In Motion Technology Inc.
+				#350, 625 Agnes Street
+				New Westminster  BC  V3M 5Y4
+				CA
+
+00-24-E7   (hex)		Plaster Networks
+0024E7     (base 16)		Plaster Networks
+				935 Hamilton Avenue
+				Menlo Park  CA  94025-1431
+				US
+
+00-24-DE   (hex)		GLOBAL Technology Inc.
+0024DE     (base 16)		GLOBAL Technology Inc.
+				No.168,Shanshan Rd., Wangchun Industrial Park,
+				Ningbo    315176
+				CN
+
+00-24-DC   (hex)		Juniper Networks
+0024DC     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-24-DB   (hex)		Alcohol Monitoring Systems
+0024DB     (base 16)		Alcohol Monitoring Systems
+				1241 W. Mineral Avenue
+				Littleton  CO  80120
+				US
+
+00-25-21   (hex)		Logitek Electronic Systems, Inc.
+002521     (base 16)		Logitek Electronic Systems, Inc.
+				5622 Edgemoor Drive
+				Houston  Texas  77081
+				US
+
+00-25-1F   (hex)		ZYNUS VISION INC.
+00251F     (base 16)		ZYNUS VISION INC.
+				1-1-7-1A
+				SAGAMIHARA  KANAGAWA  229-0039
+				JP
+
+00-25-1E   (hex)		ROTEL TECHNOLOGIES
+00251E     (base 16)		ROTEL TECHNOLOGIES
+				CEVIZLIDERE 14.CD NO:2/19 BALGAT
+				ANKARA    06520
+				TR
+
+00-25-19   (hex)		Viaas Inc
+002519     (base 16)		Viaas Inc
+				3175 South Winchester Blvd
+				Campbell  CA  95008
+				US
+
+00-24-D5   (hex)		Winward Industrial Limited
+0024D5     (base 16)		Winward Industrial Limited
+				Rm.7, P Floor, Tower A,
+				HongKong    852
+				CN
+
+00-24-DD   (hex)		Centrak, Inc.
+0024DD     (base 16)		Centrak, Inc.
+				207 Penns Trail
+				Newtown  PA  18940
+				US
+
+00-24-EA   (hex)		iris-GmbH infrared & intelligent sensors
+0024EA     (base 16)		iris-GmbH infrared & intelligent sensors
+				Ostendstraße 1-14
+				Berlin    12459
+				DE
+
+00-24-ED   (hex)		YT Elec. Co,.Ltd.
+0024ED     (base 16)		YT Elec. Co,.Ltd.
+				Block B,2 Floor ,Bao Ying Industrial District,
+				Wu Lian Lu  Shenzhen  518116
+				CN
+
+00-25-03   (hex)		IBM Corp
+002503     (base 16)		IBM Corp
+				2051 Mission College Blvd 
+				Santa Clara  CA  95054
+				US
+
+00-25-04   (hex)		Valiant Communications Limited
+002504     (base 16)		Valiant Communications Limited
+				71-1 Shivaji Marg
+				New Delhi  Delhi  110015
+				IN
+
+00-25-13   (hex)		CXP DIGITAL BV
+002513     (base 16)		CXP DIGITAL BV
+				De Reulver 97A
+				Enschede    7544RT
+				NL
+
+00-24-A4   (hex)		Siklu Communication
+0024A4     (base 16)		Siklu Communication
+				7 Shoham St., , 3rd Floor
+				Petah Tikva    49517
+				IL
+
+00-24-9A   (hex)		Beijing Zhongchuang Telecommunication Test Co., Ltd.
+00249A     (base 16)		Beijing Zhongchuang Telecommunication Test Co., Ltd.
+				12-14,Block C,Beijing International Building,#18,Zhong Guan Cun Nan Road,
+				Beijing    100081
+				CN
+
+00-24-9E   (hex)		ADC-Elektronik GmbH
+00249E     (base 16)		ADC-Elektronik GmbH
+				Östingstraße 13b
+				Hamm  NRW  D-59063
+				DE
+
+00-24-9F   (hex)		RIM Testing Services
+00249F     (base 16)		RIM Testing Services
+				440 Phillip Street
+				Waterloo  Ontario  N2L 5R9
+				CA
+
+00-24-C2   (hex)		Asumo Co.,Ltd.
+0024C2     (base 16)		Asumo Co.,Ltd.
+				Oya-Kita 1-3-1
+				EBINA-CITY  KANAGAWA-PREF.  243-0419
+				JP
+
+00-24-C0   (hex)		NTI COMODO INC
+0024C0     (base 16)		NTI COMODO INC
+				Rm#502, Kangyong Bldg, Sungnam-dong
+				Sungnam-si  Kyunggi-do  462-827
+				KR
+
+00-24-BB   (hex)		CENTRAL Corporation
+0024BB     (base 16)		CENTRAL Corporation
+				NISSO 17 Bldg.7F 2-14-30
+				Yokohama  Kanagawa  222-0033
+				JP
+
+00-24-BC   (hex)		HuRob Co.,Ltd
+0024BC     (base 16)		HuRob Co.,Ltd
+				2121, Jeongwang-Dong
+				Siheung-Si  Gyeonggi-Do  429-793
+				KR
+
+00-24-AD   (hex)		Adolf Thies Gmbh & Co. KG
+0024AD     (base 16)		Adolf Thies Gmbh & Co. KG
+				Hauptstraße 76
+				Göttingen    37083
+				DE
+
+00-24-A7   (hex)		Advanced Video Communications Inc.
+0024A7     (base 16)		Advanced Video Communications Inc.
+				633 W 5th Street
+				Los Angeles  CA  90017
+				US
+
+00-24-AB   (hex)		A7 Engineering, Inc.
+0024AB     (base 16)		A7 Engineering, Inc.
+				12127 Kirkham Road Suite 101
+				Poway  CA  92064
+				US
+
+00-24-66   (hex)		Unitron nv
+002466     (base 16)		Unitron nv
+				Franrkijklaan 27
+				Poperinge  W-vl  8970
+				BE
+
+00-24-5F   (hex)		Vine Telecom CO.,Ltd.
+00245F     (base 16)		Vine Telecom CO.,Ltd.
+				191-4, 4F, Anyang-dong, Manan-gu
+				Anyang-si  Gyeonggi-do  430-010
+				KR
+
+00-24-55   (hex)		MuLogic BV
+002455     (base 16)		MuLogic BV
+				Olivier van Noortstraat 4
+				Schiedam  ZH  3124LA
+				NL
+
+00-24-88   (hex)		Centre For Development Of Telematics
+002488     (base 16)		Centre For Development Of Telematics
+				B01, Electronic City, Phase 1
+				Bangalore  Karnataka  560100
+				IN
+
+00-24-8F   (hex)		DO-MONIX
+00248F     (base 16)		DO-MONIX
+				#501, Koreana B/D
+				Seongnam-si  Gyeonggi-do  82
+				KP
+
+00-24-79   (hex)		Optec Displays, Inc.
+002479     (base 16)		Optec Displays, Inc.
+				528 S. 6th Avenue
+				City of Industry  California  91746
+				US
+
+00-24-B7   (hex)		GridPoint, Inc.
+0024B7     (base 16)		GridPoint, Inc.
+				2801 Clarendon Blvd.
+				Arlington  VA  22201
+				US
+
+00-24-AE   (hex)		IDEMIA
+0024AE     (base 16)		IDEMIA
+				18 chaussee Jules Cesar
+				OSNY    95520
+				FR
+
+00-24-68   (hex)		Sumavision Technologies Co.,Ltd
+002468     (base 16)		Sumavision Technologies Co.,Ltd
+				6F, Block A2, Power Creative Building,No.1 Shangdi East Road, Haidian District
+				Beijing    100085
+				CN
+
+00-24-3A   (hex)		Ludl Electronic Products
+00243A     (base 16)		Ludl Electronic Products
+				171 Brady Ave
+				Hawthorne  NY  10532
+				US
+
+00-24-39   (hex)		Digital Barriers Advanced Technologies
+002439     (base 16)		Digital Barriers Advanced Technologies
+				4th Floor
+				Glasgow  Lanarkshire  G1 2QQ
+				GB
+
+00-24-34   (hex)		Lectrosonics, Inc.
+002434     (base 16)		Lectrosonics, Inc.
+				581 Laser Rd.
+				Rio Rancho  NM  87124
+				US
+
+00-24-5A   (hex)		Nanjing Panda Electronics Company Limited
+00245A     (base 16)		Nanjing Panda Electronics Company Limited
+				Zhongshan EastRoad 301,
+				NANJING  JIANGSU  210016
+				CN
+
+00-24-5B   (hex)		RAIDON TECHNOLOGY, INC.
+00245B     (base 16)		RAIDON TECHNOLOGY, INC.
+				4F-8, NO.16, Lane 609, Sec.5, Chung-Hsin Rd.,
+				San-Chung City  Taipei county,  24159
+				TW
+
+00-24-59   (hex)		ABB Automation products GmbH
+002459     (base 16)		ABB Automation products GmbH
+				Eppelheimer Strasse 82
+				Heidelberg    69123
+				DE
+
+00-24-4E   (hex)		RadChips, Inc.
+00244E     (base 16)		RadChips, Inc.
+				422 East Vermijo Ave.
+				Colorado Springs  CO  80903
+				US
+
+00-24-0D   (hex)		OnePath Networks LTD.
+00240D     (base 16)		OnePath Networks LTD.
+				8 Hartom St
+				Jerusalem    91450
+				IL
+
+00-24-0B   (hex)		Virtual Computer Inc.
+00240B     (base 16)		Virtual Computer Inc.
+				3 LAN Drive
+				Westford  MA  01886
+				US
+
+00-24-02   (hex)		Op-Tection GmbH
+002402     (base 16)		Op-Tection GmbH
+				Borsigstraße 80
+				Heinsberg  Germany  52525
+				DE
+
+00-24-2F   (hex)		Micron
+00242F     (base 16)		Micron
+				8000 S Federal Way
+				Boise  ID  83716
+				US
+
+00-24-26   (hex)		NOHMI BOSAI LTD.
+002426     (base 16)		NOHMI BOSAI LTD.
+				7-3,Kudan-Minami 4-Chome,
+				Tokyo    102-8277
+				JP
+
+00-24-18   (hex)		Nextwave Semiconductor
+002418     (base 16)		Nextwave Semiconductor
+				3610 Valley Centre Dr
+				San Diego  CA  92130
+				US
+
+00-24-12   (hex)		Benign Technologies Co, Ltd.
+002412     (base 16)		Benign Technologies Co, Ltd.
+				504 room, 5F, South building, Forsafe Tower,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-24-29   (hex)		MK MASTER INC.
+002429     (base 16)		MK MASTER INC.
+				6F, -1, NO. 110,SEC. 3, JHONGSHAN RD.,
+				JHONG-HE CITY,  TAIPEI COUNTY  235
+				TW
+
+00-23-DB   (hex)		saxnet gmbh
+0023DB     (base 16)		saxnet gmbh
+				Willy-Brandt-Ring 1
+				Oelsnitz  Sachsen  08606
+				DE
+
+00-23-C8   (hex)		TEAM-R
+0023C8     (base 16)		TEAM-R
+				Gragdanski str.111, A, 9-N
+				St. Petersburg    195265
+				RU
+
+00-23-EB   (hex)		Cisco Systems, Inc
+0023EB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-23-EC   (hex)		Algorithmix GmbH
+0023EC     (base 16)		Algorithmix GmbH
+				Klettgaustrasse 21
+				Waldshut-Tiengen  BW  79761
+				US
+
+00-23-C1   (hex)		Securitas Direct AB
+0023C1     (base 16)		Securitas Direct AB
+				Angbatsbron 1
+				Malmö    21120
+				SE
+
+00-23-AA   (hex)		HFR, Inc.
+0023AA     (base 16)		HFR, Inc.
+				5F, Hana EZ Tower
+				Sungnam-si  Kyunggi-do  463-870
+				KR
+
+00-23-A5   (hex)		SageTV, LLC
+0023A5     (base 16)		SageTV, LLC
+				9800 S. La Cienega Blvd
+				Inglewood  CA  90301
+				US
+
+00-23-9E   (hex)		Jiangsu Lemote Technology Corporation Limited
+00239E     (base 16)		Jiangsu Lemote Technology Corporation Limited
+				Menglan Industrial Park,Yushan
+				Changshu  Jiangsu  215500
+				CN
+
+00-23-FC   (hex)		Ultra Stereo Labs, Inc
+0023FC     (base 16)		Ultra Stereo Labs, Inc
+				181 Bonetti Drive
+				San Luis Obispo  CA  93401
+				US
+
+00-23-8D   (hex)		Techno Design Co., Ltd.
+00238D     (base 16)		Techno Design Co., Ltd.
+				312-2
+				Aso-gun  Kumamoto-ken  861-2401
+				JP
+
+00-23-87   (hex)		ThinkFlood, Inc.
+002387     (base 16)		ThinkFlood, Inc.
+				138 Claflin St
+				Belmont  MA  02478
+				US
+
+00-23-84   (hex)		GGH Engineering s.r.l.
+002384     (base 16)		GGH Engineering s.r.l.
+				Via Agucchi 84/2
+				Bologna    40133
+				IT
+
+00-23-91   (hex)		Maxian
+002391     (base 16)		Maxian
+				21th Fl. KINS tower, 25-1
+				Seongnam-city  Gyeonggi-do  463-847
+				KR
+
+00-23-92   (hex)		Proteus Industries Inc.
+002392     (base 16)		Proteus Industries Inc.
+				340 Pioneer Way
+				Mountain View  CA  94041
+				US
+
+00-23-93   (hex)		AJINEXTEK
+002393     (base 16)		AJINEXTEK
+				9-3, Holimdong, Dalseogu
+				Daegu    704-240
+				KR
+
+00-23-7F   (hex)		PLANTRONICS, INC.
+00237F     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+00-23-6F   (hex)		DAQ System
+00236F     (base 16)		DAQ System
+				Rm 913, SungNam Woolim Lions VAlley I, 311-3
+				Sungnam-Si  Kyunggi-Do,  462-806
+				KR
+
+00-23-30   (hex)		DIZIPIA, INC.
+002330     (base 16)		DIZIPIA, INC.
+				15th Floor, East Wing, IT Venture Tower
+				Seoul    138160
+				KR
+
+00-23-69   (hex)		Cisco-Linksys, LLC
+002369     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+00-22-F8   (hex)		PIMA Electronic Systems Ltd.
+0022F8     (base 16)		PIMA Electronic Systems Ltd.
+				5 Hatzoref St.
+				Holon    58856
+				IL
+
+00-23-1C   (hex)		Fourier Systems Ltd.
+00231C     (base 16)		Fourier Systems Ltd.
+				16 Hamelacha St
+				Rosh Haayin    48091
+				IL
+
+00-23-1D   (hex)		Deltacom Electronics Ltd
+00231D     (base 16)		Deltacom Electronics Ltd
+				2F,ZIT,7km Tzarigradsko Shose
+				Sofia  Sofia-grad  1784
+				BG
+
+00-22-D7   (hex)		Nintendo Co., Ltd.
+0022D7     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-22-D6   (hex)		Cypak AB
+0022D6     (base 16)		Cypak AB
+				P.O. BOX 2332
+				Stockholm    103 18
+				SE
+
+00-22-D0   (hex)		Polar Electro Oy
+0022D0     (base 16)		Polar Electro Oy
+				Professorintie 5
+				Kempele  Oulu  90440
+				FI
+
+00-23-0A   (hex)		ARBURG GmbH & Co KG
+00230A     (base 16)		ARBURG GmbH & Co KG
+				Arthur Hehl Straße
+				Lossburg    D-72290
+				DE
+
+00-22-C3   (hex)		Zeeport Technology Inc.
+0022C3     (base 16)		Zeeport Technology Inc.
+				1F,No231,Xianzheng 2nd Rd.
+				HsinChu  Taiwan  300
+				TW
+
+00-23-16   (hex)		KISAN ELECTRONICS CO
+002316     (base 16)		KISAN ELECTRONICS CO
+				317-15
+				SEOUNG-DONG GU  SEOUL  133-123
+				KR
+
+00-23-0F   (hex)		Hirsch Electronics Corporation
+00230F     (base 16)		Hirsch Electronics Corporation
+				1900 Carnegie, Bldg. B
+				Santa Ana  CA  92705
+				US
+
+00-23-2D   (hex)		SandForce
+00232D     (base 16)		SandForce
+				12950 Saratoga Ave.
+				Saratoga  California  95070-4658
+				US
+
+00-23-23   (hex)		Zylin AS
+002323     (base 16)		Zylin AS
+				Auglendsdalen 78
+				Stavanger    4017
+				NO
+
+00-22-DE   (hex)		OPPO Digital, Inc.
+0022DE     (base 16)		OPPO Digital, Inc.
+				2629B Terminal Blvd
+				Mountain View  CA  94043
+				US
+
+00-22-F1   (hex)		Private
+0022F1     (base 16)		Private
+
+00-22-A2   (hex)		Xtramus Technologies
+0022A2     (base 16)		Xtramus Technologies
+				5th Fl., No. 102, Lide St.,
+				Zhonghe City  Taipei County  235
+				TW
+
+00-22-9E   (hex)		Social Aid Research Co., Ltd.
+00229E     (base 16)		Social Aid Research Co., Ltd.
+				South 3, West 10, Chuo-ku
+				Sapporo  Hokkaido  060-0063
+				JP
+
+00-22-85   (hex)		NOMUS COMM SYSTEMS
+002285     (base 16)		NOMUS COMM SYSTEMS
+				601, Gunjan Tower,
+				Baroda  Gujarat  390023
+				IN
+
+00-22-81   (hex)		Daintree Networks Pty
+002281     (base 16)		Daintree Networks Pty
+				1 Dalmore Drive
+				Scoresby  Victoria  3179
+				AU
+
+00-22-55   (hex)		Cisco Systems, Inc
+002255     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-22-4E   (hex)		SEEnergy Corp.
+00224E     (base 16)		SEEnergy Corp.
+				4F, No.61, Dongsing RD.
+				Taipei    110
+				TW
+
+00-22-87   (hex)		Titan Wireless LLC
+002287     (base 16)		Titan Wireless LLC
+				3914 Gattis School Rd
+				Round Rock  Texas  78664
+				US
+
+00-22-88   (hex)		Sagrad, Inc.
+002288     (base 16)		Sagrad, Inc.
+				751 North Drive
+				Melbourne  FL  32934
+				US
+
+00-22-73   (hex)		Techway
+002273     (base 16)		Techway
+				Rm 1002, Daehyun Techno World Bd,
+				Uiwang-Si,  Kyungki-Do  437-820
+				KR
+
+00-22-6B   (hex)		Cisco-Linksys, LLC
+00226B     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+00-22-67   (hex)		Nortel Networks
+002267     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75081
+				US
+
+00-22-95   (hex)		SGM Technology for lighting spa
+002295     (base 16)		SGM Technology for lighting spa
+				Via Pio La Torre 1
+				Tavullia  PU  61010
+				IT
+
+00-22-5A   (hex)		Garde Security AB
+00225A     (base 16)		Garde Security AB
+				Box 78
+				Soderhamn    S-826 22
+				SE
+
+00-22-42   (hex)		Alacron Inc.
+002242     (base 16)		Alacron Inc.
+				71 Spit Brook Rd.
+				Nashua  NH  03060
+				US
+
+00-22-34   (hex)		Corventis Inc.
+002234     (base 16)		Corventis Inc.
+				1410 Energy Park Dr. Suite #1
+				St. Paul  Minnesota  55108
+				US
+
+00-21-F7   (hex)		HPN Supply Chain
+0021F7     (base 16)		HPN Supply Chain
+				8000 Foothills Blvd
+				Roseville  CA  95747
+				US
+
+00-21-F4   (hex)		INRange Systems, Inc
+0021F4     (base 16)		INRange Systems, Inc
+				3316 5th Avenue, Suite 100
+				Altoona  PA  16602
+				US
+
+00-21-F5   (hex)		Western Engravers Supply, Inc.
+0021F5     (base 16)		Western Engravers Supply, Inc.
+				17621 N Black Canyon Highway
+				Phoenix  AZ  85023
+				US
+
+00-22-32   (hex)		Design Design Technology Ltd
+002232     (base 16)		Design Design Technology Ltd
+				Unit 9, Ash Road South
+				Wrexham  North Wales  LL13 9UG
+				GB
+
+00-22-2B   (hex)		Nucomm, Inc.
+00222B     (base 16)		Nucomm, Inc.
+				101 Bilby Road
+				Hackettstown  NJ  07840
+				US
+
+00-22-26   (hex)		Avaak, Inc.
+002226     (base 16)		Avaak, Inc.
+				9645 Scranton Rd., Suitie 110
+				San Diego  CA  92121
+				US
+
+00-22-21   (hex)		ITOH DENKI CO,LTD.
+002221     (base 16)		ITOH DENKI CO,LTD.
+				1146-2, Asazuma-cho
+				Kasai  Hyogo  679-0180
+				JP
+
+00-22-1D   (hex)		Freegene Technology LTD
+00221D     (base 16)		Freegene Technology LTD
+				3/F ,C BLDG,Weipengda Industrial Park
+				Shenzhen  Gongdong  518109
+				CN
+
+00-22-24   (hex)		Good Will Instrument Co., Ltd.
+002224     (base 16)		Good Will Instrument Co., Ltd.
+				No. 7-1 Jhongsing Road,
+				Taipei    236
+				TW
+
+00-22-45   (hex)		Leine & Linde AB
+002245     (base 16)		Leine & Linde AB
+				Box 8
+				Strängnäs  Södermanland  SE-645 21
+				SE
+
+00-22-49   (hex)		HOME MULTIENERGY SL
+002249     (base 16)		HOME MULTIENERGY SL
+				Capitán HAYA 1
+				MADRID    28020
+				ES
+
+00-22-40   (hex)		Universal Telecom S/A
+002240     (base 16)		Universal Telecom S/A
+				Avenida Paulista, 2444 - 17 andar
+				São Paulo    01310-300
+				BR
+
+00-22-0F   (hex)		MoCA (Multimedia over Coax Alliance)
+00220F     (base 16)		MoCA (Multimedia over Coax Alliance)
+				90 Inverness Circle East
+				Englewood  CA  94583
+				US
+
+00-22-0A   (hex)		OnLive, Inc
+00220A     (base 16)		OnLive, Inc
+				1091 N Shoreline Blvd
+				Mountainview  California  94043
+				US
+
+00-22-03   (hex)		Glensound Electronics Ltd
+002203     (base 16)		Glensound Electronics Ltd
+				1 - 6 Brooks Place
+				Maidstone  Kent  ME17 1UN
+				GB
+
+00-22-04   (hex)		KORATEK
+002204     (base 16)		KORATEK
+				Geumjeong-dong
+				Gunpo-si  Gyeonggi-do  435-825
+				KR
+
+00-21-FF   (hex)		Cyfrowy Polsat SA
+0021FF     (base 16)		Cyfrowy Polsat SA
+				Łubinowa
+				Warsaw  Mazowieckie  03-878
+				PL
+
+00-21-E4   (hex)		I-WIN
+0021E4     (base 16)		I-WIN
+				27 Rue des Econdeaux
+				EPINAY SUR SEINE  Seine Saint Denis  93800
+				FR
+
+00-21-E5   (hex)		Display Solution AG
+0021E5     (base 16)		Display Solution AG
+				Talhofstraße 32a
+				Gilching  D  82205
+				DE
+
+00-22-1B   (hex)		Morega Systems
+00221B     (base 16)		Morega Systems
+				5770 Hurontario Street
+				Mississauga  Ontario  L5R 3G5
+				CA
+
+00-21-B2   (hex)		Fiberblaze A/S
+0021B2     (base 16)		Fiberblaze A/S
+				Kildevangsvej 9
+				Roskilde    4000
+				DK
+
+00-21-AC   (hex)		Infrared Integrated Systems Ltd
+0021AC     (base 16)		Infrared Integrated Systems Ltd
+				Park Circle, Tithe Barn Way
+				Northampton  Northants  NN4 9BG
+				GB
+
+00-21-8E   (hex)		MEKICS CO., LTD.
+00218E     (base 16)		MEKICS CO., LTD.
+				Industrial Zone 861-10, Taegye-Dong
+				Chunchon  Kangwon  200-944
+				KR
+
+00-21-8F   (hex)		Avantgarde Acoustic Lautsprechersysteme GmbH
+00218F     (base 16)		Avantgarde Acoustic Lautsprechersysteme GmbH
+				Nibelungenstraße 349
+				Lautertal - Reichenbach  Hessen  D-64686
+				DE
+
+00-21-7E   (hex)		Telit Communication s.p.a
+00217E     (base 16)		Telit Communication s.p.a
+				Via stazione di prosecco 5B
+				SGONICO  Trieste  34010
+				IT
+
+00-21-87   (hex)		Imacs GmbH
+002187     (base 16)		Imacs GmbH
+				Mittelfeldstrasse 25
+				Kornwestheim  Germany  D-70806
+				DE
+
+00-21-81   (hex)		Si2 Microsystems Limited
+002181     (base 16)		Si2 Microsystems Limited
+				No 84, Sy No 150, EPIP, Whitefield Industrial Area
+				Bangalore  Karnataka  560066
+				IN
+
+00-21-C2   (hex)		GL Communications Inc
+0021C2     (base 16)		GL Communications Inc
+				818 West Diamond Ave
+				Gaithersburg  MD  20878
+				US
+
+00-21-E2   (hex)		visago Systems & Controls GmbH & Co. KG
+0021E2     (base 16)		visago Systems & Controls GmbH & Co. KG
+				Neuwiesenstraße 20
+				Weilheim an der Teck    D-73235
+				DE
+
+00-21-DD   (hex)		Northstar Systems Corp
+0021DD     (base 16)		Northstar Systems Corp
+				5F, No.200 Gang Qian Rd
+				Taipei    114
+				TW
+
+00-21-D5   (hex)		X2E GmbH
+0021D5     (base 16)		X2E GmbH
+				Raiffeisenstrasse 9
+				Winden  Rheinland-Pfalz  76872
+				DE
+
+00-21-A2   (hex)		EKE-Electronics Ltd.
+0021A2     (base 16)		EKE-Electronics Ltd.
+				Piispanportti 7
+				ESPOO    02240
+				FI
+
+00-21-C9   (hex)		Wavecom Asia Pacific Limited
+0021C9     (base 16)		Wavecom Asia Pacific Limited
+				201 Bio-Informatics Centre,  No.2 Science Park West Ave
+				    
+				HK
+
+00-21-4A   (hex)		Pixel Velocity, Inc
+00214A     (base 16)		Pixel Velocity, Inc
+				3917 Research Park Dr.
+				Ann Arbor  MI  48108
+				US
+
+00-21-46   (hex)		Sanmina-SCI
+002146     (base 16)		Sanmina-SCI
+				13000 South Memorial Parkway
+				Huntsville  AL  35803
+				US
+
+00-21-6E   (hex)		Function ATI (Huizhou) Telecommunications Co., Ltd.
+00216E     (base 16)		Function ATI (Huizhou) Telecommunications Co., Ltd.
+				No. 8, Huitai Road, Huitai Industrial Zone
+				Huizhou City  Guangdong Province  516006
+				CN
+
+00-21-6D   (hex)		Soltech Co., Ltd.
+00216D     (base 16)		Soltech Co., Ltd.
+				#30-3,3F
+				Yongsan Ku  Seoul  140837
+				KR
+
+00-21-65   (hex)		Presstek Inc.
+002165     (base 16)		Presstek Inc.
+				55 Executive Drive
+				Hudson  New Hampshire  03051
+				US
+
+00-21-1F   (hex)		SHINSUNG DELTATECH CO.,LTD.
+00211F     (base 16)		SHINSUNG DELTATECH CO.,LTD.
+				44-10
+				CHANGWON-CITY  KYUNGNAM-DO  641-290
+				KR
+
+00-21-24   (hex)		Optos Plc
+002124     (base 16)		Optos Plc
+				Queensferry House
+				Dunfermline  Fife  KY11 8GR
+				GB
+
+00-21-33   (hex)		Building B, Inc
+002133     (base 16)		Building B, Inc
+				1000 NW 65th Street, Suite 300
+				Ft. Lauderdale  FL  33309
+				US
+
+00-21-34   (hex)		Brandywine Communications
+002134     (base 16)		Brandywine Communications
+				1153 Warner Ave
+				Tustin  CA  92780
+				US
+
+00-21-3A   (hex)		Winchester Systems Inc.
+00213A     (base 16)		Winchester Systems Inc.
+				101 Billerica Avenue
+				Billerica,  MA  01862
+				US
+
+00-21-2E   (hex)		dresden-elektronik
+00212E     (base 16)		dresden-elektronik
+				Enno-Heidebroek-Str. 12
+				Dresden  Saxony  D-01237
+				DE
+
+00-21-30   (hex)		Keico Hightech Inc.
+002130     (base 16)		Keico Hightech Inc.
+				Ace twin tower I, 12th Fl.
+				Seoul    152-050
+				KR
+
+00-21-5B   (hex)		SenseAnywhere
+00215B     (base 16)		SenseAnywhere
+				Lisztlaan 2
+				Roosendaal    4702 KJ
+				NL
+
+00-21-4E   (hex)		GS Yuasa Power Supply Ltd.
+00214E     (base 16)		GS Yuasa Power Supply Ltd.
+				1, Inobanba-cho, Nishinosho, Kisshoin, Minami-ku,
+				Kyoto    601-8520
+				JP
+
+00-21-42   (hex)		Advanced Control Systems doo
+002142     (base 16)		Advanced Control Systems doo
+				Bulevar Zorana Djindjica 8a
+				Belgrade  Serbia  11070
+				YU
+
+00-1F-FA   (hex)		Coretree, Co, Ltd
+001FFA     (base 16)		Coretree, Co, Ltd
+				#502 IT Venture Town, 694
+				Daejeon    305-510
+				KR
+
+00-1F-F2   (hex)		VIA Technologies, Inc.
+001FF2     (base 16)		VIA Technologies, Inc.
+				1F, 531, Chung-Cheng Road
+				Hsin-Tien  Taipei  231
+				TW
+
+00-21-01   (hex)		Aplicaciones Electronicas Quasar (AEQ)
+002101     (base 16)		Aplicaciones Electronicas Quasar (AEQ)
+				C/Rey Pastor 40
+				Leganes  Madrid  28914
+				ES
+
+00-21-03   (hex)		GHI Electronics, LLC
+002103     (base 16)		GHI Electronics, LLC
+				35555 Garfield Rd.
+				Clinton Township  MI  48035
+				US
+
+00-1F-F8   (hex)		Siemens AG, Sector Industry, Drive Technologies, Motion Control Systems
+001FF8     (base 16)		Siemens AG, Sector Industry, Drive Technologies, Motion Control Systems
+				Frauenauracherstraße 80
+				Erlangen  Bavaria  91056
+				DE
+
+00-1F-D0   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+001FD0     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				
+				Pin-Jen  Taoyuan  324
+				TW
+
+00-1F-D1   (hex)		OPTEX CO.,LTD.
+001FD1     (base 16)		OPTEX CO.,LTD.
+				5-8-12
+				Otsu  Shiga  520-0101
+				JP
+
+00-1F-C9   (hex)		Cisco Systems, Inc
+001FC9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1F-DC   (hex)		Mobile Safe Track Ltd
+001FDC     (base 16)		Mobile Safe Track Ltd
+				Niemenkatu 73
+				15149  Lahti  
+				FI
+
+00-1F-D6   (hex)		Shenzhen Allywll
+001FD6     (base 16)		Shenzhen Allywll
+				Kejiyuan Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-21-17   (hex)		Tellord
+002117     (base 16)		Tellord
+				Gurogu Gurodong 170-5 Woolim e-Biz Center 709
+				Seoul    152-050
+				KR
+
+00-21-0F   (hex)		Cernium Corp
+00210F     (base 16)		Cernium Corp
+				1943 Isaac Newton Sq
+				Reston  VA  20190
+				US
+
+00-1F-F1   (hex)		Paradox Hellas S.A.
+001FF1     (base 16)		Paradox Hellas S.A.
+				3 Korinthoy St
+				Athens  Attiki  14451
+				GR
+
+00-1F-E6   (hex)		Alphion Corporation
+001FE6     (base 16)		Alphion Corporation
+				196 Princeton Hightstown Rd.
+				Princeton Junction  NJ  08550
+				US
+
+00-1F-CF   (hex)		MSI Technology GmbH
+001FCF     (base 16)		MSI Technology GmbH
+				Hanauer Landstraße 328-330
+				Frankfurt am Main  Hessen  60314
+				DE
+
+00-1F-9C   (hex)		LEDCO
+001F9C     (base 16)		LEDCO
+				47801 W Anchor Court
+				Plymouth  MI  48170
+				US
+
+00-1F-90   (hex)		Actiontec Electronics, Inc
+001F90     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-1F-91   (hex)		DBS Lodging Technologies, LLC
+001F91     (base 16)		DBS Lodging Technologies, LLC
+				21196 Limber
+				Mission Viejo  CA  92692
+				US
+
+00-1F-98   (hex)		DAIICHI-DENTSU LTD.
+001F98     (base 16)		DAIICHI-DENTSU LTD.
+				OOMORI 690-1
+				KANI  GIFU  509-0238
+				JP
+
+00-1F-93   (hex)		Xiotech Corporation
+001F93     (base 16)		Xiotech Corporation
+				6455 Flying Cloud Drive
+				Eden Prairie  MN  55344
+				US
+
+00-1F-51   (hex)		HD Communications Corp
+001F51     (base 16)		HD Communications Corp
+				2180 Fifth Ave
+				Ronkonkoma  NY  11779
+				US
+
+00-1F-53   (hex)		GEMAC Chemnitz GmbH
+001F53     (base 16)		GEMAC Chemnitz GmbH
+				Zwickauer Straße 227
+				Chemnitz  Sachsen  09116
+				DE
+
+00-1F-50   (hex)		Swissdis AG
+001F50     (base 16)		Swissdis AG
+				Grasweg 7
+				Schwarzhaeusern  BE  4911
+				CH
+
+00-1F-4C   (hex)		Roseman Engineering Ltd
+001F4C     (base 16)		Roseman Engineering Ltd
+				65 Weizman Street
+				Givataim  Israel  53468
+				IL
+
+00-1F-A9   (hex)		Atlanta DTH, Inc.
+001FA9     (base 16)		Atlanta DTH, Inc.
+				5388 New Peachtree Rd
+				Chamblee  GA  30341
+				US
+
+00-1F-A3   (hex)		T&W Electronics(Shenzhen)Co.,Ltd.
+001FA3     (base 16)		T&W Electronics(Shenzhen)Co.,Ltd.
+				2F,Baiying Building, No.1019,
+				ShenZhen  GuangDong  518067
+				CN
+
+00-1F-A2   (hex)		Datron World Communications, Inc.
+001FA2     (base 16)		Datron World Communications, Inc.
+				3030 Enterprise Court
+				Vista  California  92081
+				US
+
+00-1F-70   (hex)		Botik Technologies LTD
+001F70     (base 16)		Botik Technologies LTD
+				Trudovaya, 1
+				Pereslavl-Zalessky  Yaroslavskaya  152020
+				RU
+
+00-1F-64   (hex)		Beijing Autelan Technology Inc.
+001F64     (base 16)		Beijing Autelan Technology Inc.
+				Room B-12B01, Keshi Plaza, Xinxi road,
+				Beijing    100085
+				CN
+
+00-1F-6D   (hex)		Cisco Systems, Inc
+001F6D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1F-24   (hex)		DIGITVIEW TECHNOLOGY CO., LTD.
+001F24     (base 16)		DIGITVIEW TECHNOLOGY CO., LTD.
+				NO. 14-22, TIAN-FU ,
+				TAIPEI COUNTY    237
+				TW
+
+00-1F-21   (hex)		Inner Mongolia Yin An Science & Technology Development Co.,L
+001F21     (base 16)		Inner Mongolia Yin An Science & Technology Development Co.,L
+				YinAn Building Yiwei Road.RuYi
+				Beijing    010010
+				CN
+
+00-1F-22   (hex)		Source Photonics, Inc.
+001F22     (base 16)		Source Photonics, Inc.
+				20550 Nordhoff Street
+				Chatsworth  CA  91311
+				US
+
+00-1F-1D   (hex)		Atlas Material Testing Technology LLC
+001F1D     (base 16)		Atlas Material Testing Technology LLC
+				4114 N. Ravenswood Ave.
+				Chicago  IL  60613
+				US
+
+00-1F-15   (hex)		Bioscrypt Inc
+001F15     (base 16)		Bioscrypt Inc
+				505 Cochrane Drive
+				Markham  Ontario  L3R 8E3
+				CA
+
+00-1F-2B   (hex)		Orange Logic
+001F2B     (base 16)		Orange Logic
+				#706 AceTechnoTower 10-cha,470-5
+				SEOUL    153-789
+				KR
+
+00-1F-2A   (hex)		ACCM
+001F2A     (base 16)		ACCM
+				Obour Industrial City, Industrial zone A, lot14, block 12006.
+				Cairo    
+				EG
+
+00-1F-30   (hex)		Travelping
+001F30     (base 16)		Travelping
+				
+				Chemnitz  Saxony  09113
+				DE
+
+00-1F-48   (hex)		Mojix Inc.
+001F48     (base 16)		Mojix Inc.
+				11075 Santa Monica Blvd.
+				Los Angeles  Ca  90025
+				US
+
+00-1F-3E   (hex)		RP-Technik e.K.
+001F3E     (base 16)		RP-Technik e.K.
+				Hermann-Staudinger-Str. 10-16
+				Rodgau  Hessen  63110
+				DE
+
+00-1E-F0   (hex)		Gigafin Networks
+001EF0     (base 16)		Gigafin Networks
+				19050 Pruneridge
+				Cupertino  CA  95014
+				US
+
+00-1E-F2   (hex)		Micro Motion Inc
+001EF2     (base 16)		Micro Motion Inc
+				7070 Winchester Circle
+				Boulder  CO  80301
+				US
+
+00-1F-37   (hex)		Genesis I&C
+001F37     (base 16)		Genesis I&C
+				#515 lisantekeunotaun
+				Goyang  Gyeonggi  410-722
+				KR
+
+00-1F-2C   (hex)		Starbridge Networks
+001F2C     (base 16)		Starbridge Networks
+				3265 Meridian Parkway
+				Weston  FL  33331
+				US
+
+00-1F-31   (hex)		Radiocomp
+001F31     (base 16)		Radiocomp
+				Krakesvej 17
+				Hilleroed  Copenhagen  3400
+				DK
+
+00-1F-12   (hex)		Juniper Networks
+001F12     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-1E-EA   (hex)		Sensor Switch, Inc.
+001EEA     (base 16)		Sensor Switch, Inc.
+				900 Northrop Road
+				Wallingford  CT  06492
+				US
+
+00-1F-04   (hex)		Granch Ltd.
+001F04     (base 16)		Granch Ltd.
+				40 Koroleva str.
+				Novosibirsk  NSO  630015
+				RU
+
+00-1E-94   (hex)		SUPERCOM TECHNOLOGY CORPORATION
+001E94     (base 16)		SUPERCOM TECHNOLOGY CORPORATION
+				8F, NO 100-1, Ming-Chuan Rd.
+				Shing Tien  Taipei  231
+				TW
+
+00-1E-8F   (hex)		CANON INC.
+001E8F     (base 16)		CANON INC.
+				3-30-2
+				Ohta-Ku  Tokyo  146-8501
+				JP
+
+00-1E-A5   (hex)		ROBOTOUS, Inc.
+001EA5     (base 16)		ROBOTOUS, Inc.
+				Nex Center-201(Lab.), SK n Technopark
+				Seongnam-si  Gyeonggi-do  462-120
+				KR
+
+00-1E-A7   (hex)		Actiontec Electronics, Inc
+001EA7     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-1E-A0   (hex)		XLN-t
+001EA0     (base 16)		XLN-t
+				Hoogstraat 52
+				Putte  Antwerp  B2580
+				BE
+
+00-1E-98   (hex)		GreenLine Communications
+001E98     (base 16)		GreenLine Communications
+				Alrabiah - Alrabeea Street
+				Amman  Central Region  11953
+				JO
+
+00-1E-9A   (hex)		HAMILTON Bonaduz AG
+001E9A     (base 16)		HAMILTON Bonaduz AG
+				Via Crusch 8
+				Bonaduz  Graubuenden  7402
+				CH
+
+00-1E-DF   (hex)		Master Industrialization Center Kista
+001EDF     (base 16)		Master Industrialization Center Kista
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+00-1E-E3   (hex)		T&W Electronics (ShenZhen) Co.,Ltd
+001EE3     (base 16)		T&W Electronics (ShenZhen) Co.,Ltd
+				2F Baiying Building, No.19, NanhaiRd., Nanshan Dist
+				ShenZhen  GuangDong  518052
+				CN
+
+00-1E-D9   (hex)		Mitsubishi Precision Co.,LTd.
+001ED9     (base 16)		Mitsubishi Precision Co.,LTd.
+				345 KAMIMACHIYA
+				KAMAKURA-City  KANAGAWA-Prefecture  247-8505
+				JP
+
+00-1E-D3   (hex)		Dot Technology Int'l Co., Ltd.
+001ED3     (base 16)		Dot Technology Int'l Co., Ltd.
+				Unit 1001, Fourseas Building 208-212, Nathan Road
+				Kowloon    
+				HK
+
+00-1E-A6   (hex)		Best IT World (India) Pvt. Ltd.
+001EA6     (base 16)		Best IT World (India) Pvt. Ltd.
+				87/70/93 Mistry Industrial Complex,
+				Mumbai  Maharashtra  400093
+				IN
+
+00-1E-83   (hex)		LAN/MAN Standards Association (LMSC)
+001E83     (base 16)		LAN/MAN Standards Association (LMSC)
+				C/O IEEE Standards Association
+				Piscataway  NJ  08855-1331
+				US
+
+00-1E-7C   (hex)		Taiwick Limited
+001E7C     (base 16)		Taiwick Limited
+				5/F., Block E, Hing Yip Factory Bldg.,
+				Hong Kong  China  852
+				HK
+
+00-1E-CF   (hex)		PHILIPS ELECTRONICS UK LTD
+001ECF     (base 16)		PHILIPS ELECTRONICS UK LTD
+				PHILIPS CENTRE
+				GUILDFORD  SURREY  GU2 8XH
+				GB
+
+00-1E-22   (hex)		ARVOO Imaging Products BV
+001E22     (base 16)		ARVOO Imaging Products BV
+				Tasveld 13
+				Montfoort  UT  3417 XS
+				NL
+
+00-1E-1A   (hex)		Best Source Taiwan Inc.
+001E1A     (base 16)		Best Source Taiwan Inc.
+				2F, No.16, Lane 56, Jhongjheng W. Rd.,
+				Jhubei City,  Hsinchu County  302
+				TW
+
+00-1E-19   (hex)		GTRI
+001E19     (base 16)		GTRI
+				M/S 0821
+				Atlanta  GA  30332
+				US
+
+00-1E-14   (hex)		Cisco Systems, Inc
+001E14     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-44   (hex)		SANTEC
+001E44     (base 16)		SANTEC
+				An der Strusbek 31
+				Ahrensburg  Schleswig Holstein  22926
+				DE
+
+00-1E-62   (hex)		Siemon
+001E62     (base 16)		Siemon
+				27 Siemon Company Drive
+				Watertown  CT  06795
+				US
+
+00-1E-5C   (hex)		RB GeneralEkonomik
+001E5C     (base 16)		RB GeneralEkonomik
+				Bulevar despota stefana 59a
+				Beograd  Serbia  11000
+				YU
+
+00-1E-5D   (hex)		Holosys d.o.o.
+001E5D     (base 16)		Holosys d.o.o.
+				Kovinska 4
+				Zagreb    10090
+				HR
+
+00-1E-78   (hex)		Owitek Technology Ltd.,
+001E78     (base 16)		Owitek Technology Ltd.,
+				No.2, Lane 78, Cingshan 6th St.,
+				Taoyuan County    32657
+				TW
+
+00-1E-7A   (hex)		Cisco Systems, Inc
+001E7A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-27   (hex)		SBN TECH Co.,Ltd.
+001E27     (base 16)		SBN TECH Co.,Ltd.
+				#706 Industrial Academic Center, Konkuk University, Hwayang-dong, Gwangjin-gu
+				Seoul    143-701
+				KR
+
+00-1E-60   (hex)		Digital Lighting Systems, Inc
+001E60     (base 16)		Digital Lighting Systems, Inc
+				12302 Sw 128th ct,   #105
+				Miami  FL  33186
+				US
+
+00-1E-6C   (hex)		Opaque Systems
+001E6C     (base 16)		Opaque Systems
+				4820 Fisher Road
+				Athens  OH  45701
+				US
+
+00-1E-2F   (hex)		DiMoto Pty Ltd
+001E2F     (base 16)		DiMoto Pty Ltd
+				7 Meljaren Place
+				Buderim  Queensland  4556
+				AU
+
+00-1E-36   (hex)		IPTE
+001E36     (base 16)		IPTE
+				Geleenlaan 5
+				Genk  Limburg  3600
+				BE
+
+00-1D-A7   (hex)		Seamless Internet
+001DA7     (base 16)		Seamless Internet
+				2050 Russett Way Suite 338
+				Carson City  Nevada  89703
+				US
+
+00-1D-A5   (hex)		WB Electronics
+001DA5     (base 16)		WB Electronics
+				Langelandsvej 1A
+				Herning  Herning  7400
+				DK
+
+00-1D-A8   (hex)		Takahata Electronics Co.,Ltd
+001DA8     (base 16)		Takahata Electronics Co.,Ltd
+				1188,Kubota,Kubota-machi
+				Yonezawa-shi  Yamagata-Pref.  992-0003
+				JP
+
+00-1D-A9   (hex)		Castles Technology, Co., LTD
+001DA9     (base 16)		Castles Technology, Co., LTD
+				2F, No.205, Sec 3 Beishin Rd.,
+				Hsin-Tien City  Taipei  231
+				TW
+
+00-1D-CB   (hex)		Exéns Development Oy
+001DCB     (base 16)		Exéns Development Oy
+				Kauppakatu 36
+				Kajaani  Kainuu  87100
+				FI
+
+00-1D-CA   (hex)		PAV Electronics Limited
+001DCA     (base 16)		PAV Electronics Limited
+				7 Laverock Road
+				Airdrie  Lanarkshire  ML6 7UD
+				GB
+
+00-1D-C2   (hex)		XORTEC OY
+001DC2     (base 16)		XORTEC OY
+				Höytämöntie 6
+				Lempäälä   Pirkanmaa  33880
+				FI
+
+00-1E-0E   (hex)		MAXI VIEW HOLDINGS LIMITED
+001E0E     (base 16)		MAXI VIEW HOLDINGS LIMITED
+				Suite 2302,23/F Great Eagle Centre, 23 Harbour Road, Wanchai
+				Hong Kong    
+				CN
+
+00-1E-0F   (hex)		Briot International
+001E0F     (base 16)		Briot International
+				2 rue roger Bonnet
+				Pont de l'Arche  Eure  27340
+				FR
+
+00-1D-E3   (hex)		Intuicom
+001DE3     (base 16)		Intuicom
+				4900 Nautilus CT N
+				Boulder  CO  80301
+				US
+
+00-1D-DE   (hex)		Zhejiang Broadcast&Television Technology Co.,Ltd.
+001DDE     (base 16)		Zhejiang Broadcast&Television Technology Co.,Ltd.
+				Building No.16,Xidoumen Industry Park,Wenyi Road,
+				Hangzhou  Zhejiang  310012
+				CN
+
+00-1D-E5   (hex)		Cisco Systems, Inc
+001DE5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-EC   (hex)		Marusys
+001DEC     (base 16)		Marusys
+				Eunsung Bldg. 5F
+				Seoul    135-763
+				KR
+
+00-1D-E8   (hex)		Nikko Denki Tsushin Corporation(NDTC)
+001DE8     (base 16)		Nikko Denki Tsushin Corporation(NDTC)
+				440 Kamoshida-town, Aoba-ku
+				Yokohama    227-0033
+				JP
+
+00-1D-DA   (hex)		Mikroelektronika spol. s r. o.
+001DDA     (base 16)		Mikroelektronika spol. s r. o.
+				Dráby 849
+				Vysoké Mýto  CZ  566 01
+				CZ
+
+00-1D-B0   (hex)		FuJian HengTong Information Technology Co.,Ltd
+001DB0     (base 16)		FuJian HengTong Information Technology Co.,Ltd
+				No.14-804,Building 2,JinXiuFuCheng,No.338,HuaLin Road
+				FuZhou City  FuJian Province  350001
+				CN
+
+00-1D-B8   (hex)		Intoto Inc.
+001DB8     (base 16)		Intoto Inc.
+				3100 De La Cruz Blvd.  #300
+				Santa Clara  CA  95054
+				US
+
+00-1D-F5   (hex)		Sunshine Co,LTD
+001DF5     (base 16)		Sunshine Co,LTD
+				1-3-5 Kojimachi
+				TOKYO  Kanto region  102-0083
+				JP
+
+00-1D-F0   (hex)		Vidient Systems, Inc.
+001DF0     (base 16)		Vidient Systems, Inc.
+				4000 Burton Drive
+				Santa Clara  CA  94054
+				US
+
+00-1D-FE   (hex)		Palm, Inc
+001DFE     (base 16)		Palm, Inc
+				950 West Maude Ave
+				Sunnyvale  CA  94085
+				US
+
+00-1D-52   (hex)		Defzone B.V.
+001D52     (base 16)		Defzone B.V.
+				Transportcentrum 10
+				Enschede  Overijssel  7547 RW
+				NL
+
+00-1D-4A   (hex)		Carestream Health, Inc.
+001D4A     (base 16)		Carestream Health, Inc.
+				150 Verona Street
+				Rochestser  NY  14608
+				US
+
+00-1D-96   (hex)		WatchGuard Video
+001D96     (base 16)		WatchGuard Video
+				3001 Summit Ave.
+				Plano  TX  75074
+				US
+
+00-1D-8F   (hex)		PureWave Networks
+001D8F     (base 16)		PureWave Networks
+				2660-C Marine Way
+				Mountain View  CA  94043
+				US
+
+00-1D-8C   (hex)		La Crosse Technology LTD
+001D8C     (base 16)		La Crosse Technology LTD
+				2809 Losey Blvd. So.
+				La Crosse  WI  54601
+				US
+
+00-1D-64   (hex)		Adam Communications Systems Int Ltd
+001D64     (base 16)		Adam Communications Systems Int Ltd
+				The Mission
+				Stockport  Cheshire  SK1 3AH
+				GB
+
+00-1D-5E   (hex)		COMING MEDIA CORP.
+001D5E     (base 16)		COMING MEDIA CORP.
+				BONA Bld. 4th Fl., 548-18
+				Seoul    135-158
+				KR
+
+00-1D-55   (hex)		ZANTAZ, Inc
+001D55     (base 16)		ZANTAZ, Inc
+				5758 W. Las Positas Avenue
+				Pleasanton  CA  94588
+				US
+
+00-1D-A1   (hex)		Cisco Systems, Inc
+001DA1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-71   (hex)		Cisco Systems, Inc
+001D71     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-65   (hex)		Microwave Radio Communications
+001D65     (base 16)		Microwave Radio Communications
+				101 Billerica Avemue, Bldg 6
+				N. Billerica  MA  01862
+				US
+
+00-1D-50   (hex)		SPINETIX SA
+001D50     (base 16)		SPINETIX SA
+				Parc Scientifique de l'EPFL, Bâtiment C
+				Lausanne  VD  1015
+				CH
+
+00-1D-45   (hex)		Cisco Systems, Inc
+001D45     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-69   (hex)		Knorr-Bremse IT-Services GmbH
+001D69     (base 16)		Knorr-Bremse IT-Services GmbH
+				Moosacher Str. 80
+				Muenchen  BY  80809
+				DE
+
+00-1C-F8   (hex)		Parade Technologies, Ltd.
+001CF8     (base 16)		Parade Technologies, Ltd.
+				C/O Parade Technologies, Inc.
+				Sunnyvale  CA  94085
+				US
+
+00-1C-F7   (hex)		AudioScience
+001CF7     (base 16)		AudioScience
+				729 west 16th st
+				Costa Mesa  California  92627
+				US
+
+00-1C-F6   (hex)		Cisco Systems, Inc
+001CF6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-F5   (hex)		Wiseblue Technology Limited
+001CF5     (base 16)		Wiseblue Technology Limited
+				Rm G5, 5/F, Kingsford Industrial Building Phase II, 26-32 Kwai Hei Street,
+				Kwai Chung  N.T.  
+				HK
+
+00-1C-EE   (hex)		SHARP Corporation
+001CEE     (base 16)		SHARP Corporation
+				22-22,Nagaike-cho
+				Osaka city  Osaka prefecture  545-8522
+				JP
+
+00-1D-07   (hex)		Shenzhen Sang Fei Consumer Communications Co.,Ltd
+001D07     (base 16)		Shenzhen Sang Fei Consumer Communications Co.,Ltd
+				11 Science and Technology Road,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1D-06   (hex)		HM Electronics, Inc.
+001D06     (base 16)		HM Electronics, Inc.
+				14110 Stowe Drive
+				Poway  CA  92064
+				US
+
+00-1D-01   (hex)		Neptune Digital
+001D01     (base 16)		Neptune Digital
+				Mednarodni mejni prehod 6
+				Vrtojba  Nova Gorica  5290
+				SI
+
+00-1D-33   (hex)		Maverick Systems Inc.
+001D33     (base 16)		Maverick Systems Inc.
+				908, Daerungposttower 2-cha, 182-13
+				Seoul    152-790
+				KR
+
+00-1D-2C   (hex)		Wavetrend Technologies (Pty) Limited
+001D2C     (base 16)		Wavetrend Technologies (Pty) Limited
+				Wavetrend House, Building 816/3
+				Gauteng    2021
+				ZA
+
+00-1C-CF   (hex)		LIMETEK
+001CCF     (base 16)		LIMETEK
+				#213-1, Byucksan Digital Valley II, 480-10, Gasan-dong,
+				Seoul    153-783
+				KR
+
+00-1D-24   (hex)		Aclara Power-Line Systems Inc.
+001D24     (base 16)		Aclara Power-Line Systems Inc.
+				945 Hornet Drive
+				Hazelwood  MO  63042
+				US
+
+00-1D-18   (hex)		Power Innovation GmbH
+001D18     (base 16)		Power Innovation GmbH
+				Rehland 2
+				Achim  Niedersachsen  28832
+				DE
+
+00-1D-1B   (hex)		Sangean Electronics Inc.
+001D1B     (base 16)		Sangean Electronics Inc.
+				No. 18, Lane 7, Li-De street
+				Chung Ho City  Taipei Hsien  235
+				TW
+
+00-1D-17   (hex)		Digital Sky Corporation
+001D17     (base 16)		Digital Sky Corporation
+				5-5-15 Sotokanda,
+				Chiyoda-ku  Tokyo  101-0021
+				JP
+
+00-1D-27   (hex)		NAC-INTERCOM
+001D27     (base 16)		NAC-INTERCOM
+				AVDA. RICARDO MELLA 123-B
+				VIGO  PONTEVEDRA  36330
+				ES
+
+00-1C-E3   (hex)		Optimedical Systems
+001CE3     (base 16)		Optimedical Systems
+				235 Hembree Park Drive
+				Roswell  GA  30076
+				US
+
+00-1C-DE   (hex)		Interactive Multimedia eXchange Inc.
+001CDE     (base 16)		Interactive Multimedia eXchange Inc.
+				NO. 165 Wenlin Road.
+				Taipei  Taiwan  111
+				TW
+
+00-1D-36   (hex)		ELECTRONICS CORPORATION OF INDIA LIMITED
+001D36     (base 16)		ELECTRONICS CORPORATION OF INDIA LIMITED
+				CONTROL AND AUTOMATION DIVISION-3
+				HYDERABAD  ANDHRA PRADESH  500 062
+				IN
+
+00-1C-80   (hex)		New Business Division/Rhea-Information CO., LTD.
+001C80     (base 16)		New Business Division/Rhea-Information CO., LTD.
+				4F 594 Yeong Pung Bldg, Gueui-Dong
+				Seoul  Gwangjin-Gu  143-200
+				KR
+
+00-1C-83   (hex)		New Level Telecom Co., Ltd.
+001C83     (base 16)		New Level Telecom Co., Ltd.
+				INNOPLEX 1-703
+				Seoul    153-803
+				KR
+
+00-1C-76   (hex)		The Wandsworth Group Ltd
+001C76     (base 16)		The Wandsworth Group Ltd
+				Albert Drive
+				Woking  Surrey  GU21 5SE
+				GB
+
+00-1C-72   (hex)		Mayer & Cie GmbH & Co KG
+001C72     (base 16)		Mayer & Cie GmbH & Co KG
+				Emil Mayer Strasse 10
+				Albstadt  Baden-Württemberg  72461
+				DE
+
+00-1C-AD   (hex)		Wuhan Telecommunication Devices Co.,Ltd
+001CAD     (base 16)		Wuhan Telecommunication Devices Co.,Ltd
+				88 Youkeyuan Road,Hongshan District
+				Wuhan  Hubei  430074
+				CN
+
+00-1C-A7   (hex)		International Quartz Limited
+001CA7     (base 16)		International Quartz Limited
+				2nd Floor, 2, Dai Wang Street,
+				  Hong Kong  852
+				CN
+
+00-1C-AB   (hex)		Meyer Sound Laboratories, Inc.
+001CAB     (base 16)		Meyer Sound Laboratories, Inc.
+				2832 San Pablo Ave.
+				Berkeley  CA  94702
+				US
+
+00-1C-9E   (hex)		Dualtech IT AB
+001C9E     (base 16)		Dualtech IT AB
+				Banehagsgatan 1F
+				GOTHENBURG  Västra Götaland  41451
+				SE
+
+00-1C-C8   (hex)		INDUSTRONIC Industrie-Electronic GmbH & Co. KG
+001CC8     (base 16)		INDUSTRONIC Industrie-Electronic GmbH & Co. KG
+				Carl-Jacob-Kolb-Weg 1
+				Wertheim  Baden-Württemberg  97877
+				DE
+
+00-1C-C6   (hex)		ProStor Systems
+001CC6     (base 16)		ProStor Systems
+				5555 Central Avenue
+				Boulder  Colorado  80301
+				US
+
+00-1C-BE   (hex)		Nintendo Co., Ltd.
+001CBE     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1C-94   (hex)		LI-COR Biosciences
+001C94     (base 16)		LI-COR Biosciences
+				4647 Superior Street
+				Lincoln  NE  68504
+				US
+
+00-1C-8C   (hex)		DIAL TECHNOLOGY LTD.
+001C8C     (base 16)		DIAL TECHNOLOGY LTD.
+				6F-4, NO.18, LANE.609, SEC.5, CHONGSIN RD.,
+				SANCHONG CITY  TAIPEI COUNTY  241
+				TW
+
+00-1C-CA   (hex)		Shanghai Gaozhi Science & Technology Development Co.
+001CCA     (base 16)		Shanghai Gaozhi Science & Technology Development Co.
+				No.283 Qin Jiang Rd. Shanghai,China
+				Shanghai    200233
+				CN
+
+00-1C-C9   (hex)		Kaise Electronic Technology Co., Ltd.
+001CC9     (base 16)		Kaise Electronic Technology Co., Ltd.
+				No.678, Wunsyue Rd., Zuoying District,
+				Kaohsiung    813
+				TW
+
+00-1C-93   (hex)		ExaDigm Inc
+001C93     (base 16)		ExaDigm Inc
+				2871 Pullman St
+				Santa Ana  CA  92705
+				US
+
+00-1C-85   (hex)		Eunicorn
+001C85     (base 16)		Eunicorn
+				226-16 unbo b/d suckchon-dong songpa-gu
+				seoul    138845
+				KR
+
+00-1C-67   (hex)		Pumpkin Networks, Inc.
+001C67     (base 16)		Pumpkin Networks, Inc.
+				3FL JungHo Bldg, 108-4 Sangdo-Dong, Dongjak-Gu
+				SEOUL    156-030
+				KR
+
+00-1C-60   (hex)		CSP Frontier Technologies,Inc.
+001C60     (base 16)		CSP Frontier Technologies,Inc.
+				3-2-3,Sasazuka
+				Shibuya-ku  Tokyo  151-0073
+				JP
+
+00-1C-6A   (hex)		Weiss Engineering Ltd.
+001C6A     (base 16)		Weiss Engineering Ltd.
+				Florastrasse 42
+				Uster  ZH  8610
+				CH
+
+00-1C-0A   (hex)		Shenzhen AEE Technology Co.,Ltd.
+001C0A     (base 16)		Shenzhen AEE Technology Co.,Ltd.
+				1st Floor B Building, Shenzhen,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1C-0D   (hex)		G-Technology, Inc.
+001C0D     (base 16)		G-Technology, Inc.
+				1653 Stanford Street
+				Santa Monica  CA  90404
+				US
+
+00-1C-03   (hex)		Betty TV Technology AG
+001C03     (base 16)		Betty TV Technology AG
+				Hardturmstrasse 2
+				Zurich    80005
+				CH
+
+00-1C-46   (hex)		QTUM
+001C46     (base 16)		QTUM
+				#507 Byucksan/Kyungin Digital Valley 2 481-10
+				Seoul    153-783
+				KR
+
+00-1C-42   (hex)		Parallels, Inc.
+001C42     (base 16)		Parallels, Inc.
+				660 SW 39h Street
+				Renton  WA  98057
+				US
+
+00-1C-3E   (hex)		ECKey Corporation
+001C3E     (base 16)		ECKey Corporation
+				206A W James St
+				Lancaster  PA  17603
+				US
+
+00-1C-51   (hex)		Celeno Communications
+001C51     (base 16)		Celeno Communications
+				22 Zarhin Street
+				Ra'anana    43665
+				IL
+
+00-1C-54   (hex)		Hillstone Networks Inc
+001C54     (base 16)		Hillstone Networks Inc
+				A-1905 e-Wing Center
+				Beijing    100086
+				CN
+
+00-1C-59   (hex)		DEVON IT
+001C59     (base 16)		DEVON IT
+				1100 FIRST AVENUE
+				KING OF PRUSSIA  PA  19406
+				US
+
+00-1C-22   (hex)		Aeris Elettronica s.r.l.
+001C22     (base 16)		Aeris Elettronica s.r.l.
+				Zona Ind.le Vallecupa
+				Colonnella  Teramo  64010
+				IT
+
+00-1C-1D   (hex)		CHENZHOU GOSPELL DIGITAL TECHNOLOGY CO.,LTD
+001C1D     (base 16)		CHENZHOU GOSPELL DIGITAL TECHNOLOGY CO.,LTD
+				BAILUTANG,SUXIAN DISTRICT,
+				CHENZHOU  HUNAN  423025
+				CN
+
+00-1C-39   (hex)		S Netsystems Inc.
+001C39     (base 16)		S Netsystems Inc.
+				10F Sungwon Bldg., 141 Samsung-Dong
+				Seoul    135-716
+				KR
+
+00-1C-37   (hex)		Callpod, Inc.
+001C37     (base 16)		Callpod, Inc.
+				850 W. Jackson
+				Chicago  IL  60607
+				US
+
+00-1C-33   (hex)		Sutron
+001C33     (base 16)		Sutron
+				21300 Ridgetop Cir
+				Sterling  VA  20166
+				US
+
+00-1B-F6   (hex)		CONWISE Technology Corporation Ltd.
+001BF6     (base 16)		CONWISE Technology Corporation Ltd.
+				2F No.44, Park Ave. 2, Hsinchu Science Park
+				Hsinchu City    30075
+				TW
+
+00-1B-F8   (hex)		Digitrax Inc.
+001BF8     (base 16)		Digitrax Inc.
+				2443 Transmitter Rd,
+				Panama City  FL  32404
+				US
+
+00-1C-2F   (hex)		Pfister GmbH
+001C2F     (base 16)		Pfister GmbH
+				Stätzlinger  SStraße 70
+				Augsburg  Bavaria  86165
+				DE
+
+00-1C-27   (hex)		Sunell Electronics Co.
+001C27     (base 16)		Sunell Electronics Co.
+				3rd Floor,Bldg.514,BaGua Rd
+				ShenZhen  Guangdong  518029
+				CN
+
+00-1C-0F   (hex)		Cisco Systems, Inc
+001C0F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-48   (hex)		WiDeFi, Inc.
+001C48     (base 16)		WiDeFi, Inc.
+				1333 Gateway Blvd
+				Melbourne  FL  32901
+				US
+
+00-1B-AD   (hex)		iControl Incorporated
+001BAD     (base 16)		iControl Incorporated
+				3235 Kifer Road
+				Santa Clara  California  95051
+				US
+
+00-1B-A7   (hex)		Lorica Solutions
+001BA7     (base 16)		Lorica Solutions
+				275 Northpointe Parkway
+				Amherst  NY  14228
+				US
+
+00-1B-A5   (hex)		MyungMin Systems, Inc.
+001BA5     (base 16)		MyungMin Systems, Inc.
+				#410,Doosan Venture Dime 2-cha,1307-37
+				Kyungki-do    431-060
+				KR
+
+00-1B-F1   (hex)		Nanjing SilverNet Software Co., Ltd.
+001BF1     (base 16)		Nanjing SilverNet Software Co., Ltd.
+				3/F, 10 building, Nanjing World Window Technology & Software Park
+				Nanjing  Jiangsu  210013
+				CN
+
+00-1B-EF   (hex)		Blossoms Digital Technology Co.,Ltd.
+001BEF     (base 16)		Blossoms Digital Technology Co.,Ltd.
+				BLK25,Hengfeng Ind.City,Hezhou
+				Shenzhen  Guangdong  518126
+				CN
+
+00-1B-EB   (hex)		DMP Electronics INC.
+001BEB     (base 16)		DMP Electronics INC.
+				8F., No.12, Wucyuan 7th Rd.,
+				Taipei County    248
+				TW
+
+00-1B-A2   (hex)		IDS Imaging Development Systems GmbH
+001BA2     (base 16)		IDS Imaging Development Systems GmbH
+				Dimbacher Str. 6
+				Obersulm  BW  74182
+				DE
+
+00-1B-9D   (hex)		Novus Security Sp. z o.o.
+001B9D     (base 16)		Novus Security Sp. z o.o.
+				ul. Puławska 431
+				Warsaw  woj. mazowieckie  02-801
+				PL
+
+00-1B-C9   (hex)		FSN DISPLAY INC
+001BC9     (base 16)		FSN DISPLAY INC
+				Baeksuk-Dong 1141-1, Ilsan Techno Town 1009
+				Koyang-si  Kyeonggi-Do  410722
+				KR
+
+00-1B-C3   (hex)		Mobisolution Co.,Ltd
+001BC3     (base 16)		Mobisolution Co.,Ltd
+				848-16
+				Gumi  Gyeongbuk  730-300
+				KR
+
+00-1B-CE   (hex)		Measurement Devices Ltd
+001BCE     (base 16)		Measurement Devices Ltd
+				Redwood House
+				York  Yorkshire  YO266QR
+				GB
+
+00-1B-B8   (hex)		BLUEWAY ELECTRONIC CO;LTD
+001BB8     (base 16)		BLUEWAY ELECTRONIC CO;LTD
+				Workshop B,Dong Feng Village,
+				HuiZhou  GuangDong  516008
+				CN
+
+00-1B-B2   (hex)		Intellect International NV
+001BB2     (base 16)		Intellect International NV
+				Kleine Kloosterstraat 23
+				Zaventem  Vlaamse brabant  1932
+				BE
+
+00-1B-E7   (hex)		Postek Electronics Co., Ltd.
+001BE7     (base 16)		Postek Electronics Co., Ltd.
+				Suite 510, Shanghang Building
+				Shen Zhen  Guang Dong  518028
+				CN
+
+00-1B-E3   (hex)		Health Hero Network, Inc.
+001BE3     (base 16)		Health Hero Network, Inc.
+				2000 Seaport Blvd.
+				Redwood City  CA  94063
+				US
+
+00-1B-DC   (hex)		Vencer Co., Ltd.
+001BDC     (base 16)		Vencer Co., Ltd.
+				20F-1, No.77, Sec.1, Hsin Tai Wu Rd.,
+				Hsi Chih  Taipei  221
+				TW
+
+00-1B-D5   (hex)		Cisco Systems, Inc
+001BD5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1B-95   (hex)		VIDEO SYSTEMS SRL
+001B95     (base 16)		VIDEO SYSTEMS SRL
+				Loc. Gorizzo, 16
+				CAMINO AL TAGLIAMENTO  UD  
+				IT
+
+00-1B-90   (hex)		Cisco Systems, Inc
+001B90     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1B-7F   (hex)		TMN Technologies Telecomunicacoes Ltda
+001B7F     (base 16)		TMN Technologies Telecomunicacoes Ltda
+				Rua Nilza, 422
+				São Paulo  SP  03651-120
+				BR
+
+00-1B-7E   (hex)		Beckmann GmbH
+001B7E     (base 16)		Beckmann GmbH
+				Brandtstraße 1
+				Hoevelhof  NRW  33161
+				DE
+
+00-1B-7A   (hex)		Nintendo Co., Ltd.
+001B7A     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1B-34   (hex)		Focus System Inc.
+001B34     (base 16)		Focus System Inc.
+				19F-1, No. 266 Wen Hwa 2nd Rd., Sec. 1
+				Linkou  Taipei County  
+				TW
+
+00-1B-3A   (hex)		SIMS Corp.
+001B3A     (base 16)		SIMS Corp.
+				RAON Bldg, 9F, 92-8, Wonhyoro-2ga, Yongsan-gu
+				Seoul    140-847
+				KR
+
+00-1B-5F   (hex)		Alien Technology
+001B5F     (base 16)		Alien Technology
+				18220 Butterfield Blvd.
+				Morgan Hill  CA  95037
+				US
+
+00-1B-61   (hex)		Digital Acoustics, LLC
+001B61     (base 16)		Digital Acoustics, LLC
+				37 Sherwood Terrace
+				Lake Bluff  IL  60044
+				US
+
+00-1B-5E   (hex)		BPL Limited
+001B5E     (base 16)		BPL Limited
+				BPL Towers
+				Bangalore  Karnataka  560001
+				IN
+
+00-1B-5C   (hex)		Azuretec Co., Ltd.
+001B5C     (base 16)		Azuretec Co., Ltd.
+				3F, No.8, Alley 8, Lane 45, Baoxing Rd., Xindian Dist.,
+				New Taipei City  Taiwan  231
+				TW
+
+00-1B-72   (hex)		Sicep s.p.a.
+001B72     (base 16)		Sicep s.p.a.
+				Via calabria, 14
+				Certaldo    50052
+				IT
+
+00-1B-74   (hex)		MiraLink Corporation
+001B74     (base 16)		MiraLink Corporation
+				111 SW 5th Ave.
+				Portland  OR  97204
+				US
+
+00-1B-6D   (hex)		Midtronics, Inc.
+001B6D     (base 16)		Midtronics, Inc.
+				7000 Monroe St.
+				Willowbrook  IL  60527
+				US
+
+00-1B-6F   (hex)		Teletrak Ltd
+001B6F     (base 16)		Teletrak Ltd
+				214 Kepa Road
+				Auckland    1071
+				NZ
+
+00-1B-4B   (hex)		SANION Co., Ltd.
+001B4B     (base 16)		SANION Co., Ltd.
+				#208 ACETECHNO TOWER, 55-7, MULLAE-DONG 3GA,
+				YEONGDEUNGPO-GU  SEOUL  150-992
+				KR
+
+00-1B-2D   (hex)		Med-Eng Systems Inc.
+001B2D     (base 16)		Med-Eng Systems Inc.
+				2400 St. Laurent Blvd.
+				Ottawa  Ontario  K1G 6C4
+				CA
+
+00-1B-87   (hex)		Deepsound Tech. Co., Ltd
+001B87     (base 16)		Deepsound Tech. Co., Ltd
+				3F No. 576 Sec. 1, Minsheng N. Rd., Gueishan Township,
+				Taoyuan    333
+				TW
+
+00-1B-4D   (hex)		Areca Technology Corporation
+001B4D     (base 16)		Areca Technology Corporation
+				8F., No. 22, Lane 35, Ji-Hu Rd.
+				Taipei    114
+				TW
+
+00-1A-E3   (hex)		Cisco Systems, Inc
+001AE3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-DF   (hex)		Interactivetv Pty Limited
+001ADF     (base 16)		Interactivetv Pty Limited
+				Suite 10 Level 3
+				Pyrmont, Sydney  NSW  2009
+				US
+
+00-1A-E1   (hex)		EDGE ACCESS INC
+001AE1     (base 16)		EDGE ACCESS INC
+				5440 BEAUMONT CENTER BLVD
+				TAMPA  FL  33634
+				US
+
+00-1A-E9   (hex)		Nintendo Co., Ltd.
+001AE9     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1A-E5   (hex)		Mvox Technologies Inc.
+001AE5     (base 16)		Mvox Technologies Inc.
+				19050 Pruneridge Ave
+				Cupertino  CA  95014
+				US
+
+00-1A-E4   (hex)		Medicis Technologies Corporation
+001AE4     (base 16)		Medicis Technologies Corporation
+				11818 North Creek Parkway N.
+				Bothell  WA  98011
+				US
+
+00-1A-F8   (hex)		Copley Controls Corporation
+001AF8     (base 16)		Copley Controls Corporation
+				20 Dan Road
+				Canton  MA  02021
+				US
+
+00-1A-F5   (hex)		PENTAONE. CO., LTD.
+001AF5     (base 16)		PENTAONE. CO., LTD.
+				Hyo Chang Bldg, 3F, 1013-6, Inkye-dong Paldal-Gu,
+				Suwon City  Gyunggi-Do  422-833
+				KR
+
+00-1A-ED   (hex)		INCOTEC GmbH
+001AED     (base 16)		INCOTEC GmbH
+				Blomestrasse 25 - 27
+				Bielefeld  NRW  33609
+				DE
+
+00-1A-EE   (hex)		Shenztech Ltd
+001AEE     (base 16)		Shenztech Ltd
+				813, 8F, HOLLYWOOD PLAZA, 610 NATHAN ROAD,
+				KOWLOON    852
+				HK
+
+00-1A-CE   (hex)		YUPITERU CORPORATION
+001ACE     (base 16)		YUPITERU CORPORATION
+				3, Dannoue, Iwazu-cho, Okazaki-city, Aichi
+				Okazaki  Aichi  444-2144
+				JP
+
+00-1A-CC   (hex)		Celestial Semiconductor, Ltd
+001ACC     (base 16)		Celestial Semiconductor, Ltd
+				Ugland House, South Church Street,
+				George Town,   Cayman Islands  00000
+				KY
+
+00-1A-D2   (hex)		Eletronica Nitron Ltda
+001AD2     (base 16)		Eletronica Nitron Ltda
+				Rua Dr. Ulisses Escobar 415
+				Camanducaia  Minas Gerais  37650-000
+				BR
+
+00-1B-1D   (hex)		Phoenix International Co., Ltd
+001B1D     (base 16)		Phoenix International Co., Ltd
+				11F. No.42-1, Sec.1, Zhongyang N. Rd. Beitou
+				Taipei    112
+				TW
+
+00-1B-1A   (hex)		e-trees Japan, Inc.
+001B1A     (base 16)		e-trees Japan, Inc.
+				Oowada-cho 2-9-2
+				Hachioji-city  Tokyo  150-0001
+				JP
+
+00-1B-12   (hex)		Apprion
+001B12     (base 16)		Apprion
+				Nasa Ames Rerearch Center
+				Moffett Field  California  94035
+				US
+
+00-1A-FE   (hex)		SOFACREAL
+001AFE     (base 16)		SOFACREAL
+				149 avenue du MAINE
+				PARIS  Region Parisienne  75014
+				FR
+
+00-1A-F1   (hex)		Embedded Artists AB
+001AF1     (base 16)		Embedded Artists AB
+				Davidshallsgatan 16
+				Malmoe    21145
+				SE
+
+00-1B-0D   (hex)		Cisco Systems, Inc
+001B0D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1B-0A   (hex)		Intelligent Distributed Controls Ltd
+001B0A     (base 16)		Intelligent Distributed Controls Ltd
+				Keynes House, Chester Park
+				Derby  Derbyshire  DE21 4AS
+				GB
+
+00-1A-B1   (hex)		Asia Pacific Satellite Industries Co., Ltd.
+001AB1     (base 16)		Asia Pacific Satellite Industries Co., Ltd.
+				9th FL, IT Castle 2-Dong, #550-1, Gasan-Dong, GeumCheon-Gu,
+				Seoul    153-768
+				KR
+
+00-1A-B7   (hex)		Ethos Networks LTD.
+001AB7     (base 16)		Ethos Networks LTD.
+				2 Maskit St.
+				Herzlia    46766
+				IL
+
+00-1A-B2   (hex)		Cyber Solutions Inc.
+001AB2     (base 16)		Cyber Solutions Inc.
+				6-6-3, Minami Yoshinari
+				Sendai  Miyagi-ken  989-3204
+				JP
+
+00-1A-97   (hex)		fitivision technology Inc.
+001A97     (base 16)		fitivision technology Inc.
+				8F, No. 356, Sec. 1, Neihu Rd
+				Taipei    114
+				TW
+
+00-1A-90   (hex)		Trópico Sistemas e Telecomunicações da Amazônia LTDA. 
+001A90     (base 16)		Trópico Sistemas e Telecomunicações da Amazônia LTDA. 
+				Rod.  Campinas-Mogi-Mirim (SP 340)  Km 118,5
+				Campinas  São Paulo  13.086-902
+				BR
+
+00-1A-94   (hex)		Votronic GmbH
+001A94     (base 16)		Votronic GmbH
+				Saarbruecker Str. 8
+				St. Ingbert  Saarland  66386
+				DE
+
+00-1A-C7   (hex)		UNIPOINT
+001AC7     (base 16)		UNIPOINT
+				7F Gwangsung Bld 831-47 YeokSam-Dong
+				Seoul    135-936
+				KR
+
+00-1A-C0   (hex)		JOYBIEN TECHNOLOGIES CO., LTD.
+001AC0     (base 16)		JOYBIEN TECHNOLOGIES CO., LTD.
+				14F-7, NO.2, JIAN 8TH RD.,
+				NEW TAIPEI CITY  TAIWAN  23511
+				TW
+
+00-1A-9E   (hex)		ICON Digital International Limited
+001A9E     (base 16)		ICON Digital International Limited
+				Suite2209, 22/F., SkyLine Tower,
+				    
+				CN
+
+00-1A-98   (hex)		Asotel Communication Limited Taiwan Branch
+001A98     (base 16)		Asotel Communication Limited Taiwan Branch
+				3G17, No5, Hsin Yi Road, Sec. 5
+				Taipei    110
+				TW
+
+00-1A-72   (hex)		Mosart Semiconductor Corp.
+001A72     (base 16)		Mosart Semiconductor Corp.
+				23F., No.33, Sec.1,
+				Taipei    220
+				TW
+
+00-1A-68   (hex)		Weltec Enterprise Co., Ltd.
+001A68     (base 16)		Weltec Enterprise Co., Ltd.
+				2F, No. 351 Yung Ho Rd.
+				Chung Ho    235
+				TW
+
+00-1A-C2   (hex)		YEC Co.,Ltd.
+001AC2     (base 16)		YEC Co.,Ltd.
+				543-9 Tsuruma
+				Machida  Tokyo  194-0004
+				JP
+
+00-1A-A5   (hex)		BRN Phoenix
+001AA5     (base 16)		BRN Phoenix
+				2500 Augustine Drive, Suite 200
+				Santa Clara  CA  95054
+				US
+
+00-1A-A2   (hex)		Cisco Systems, Inc
+001AA2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-9C   (hex)		RightHand Technologies, Inc.
+001A9C     (base 16)		RightHand Technologies, Inc.
+				7450 W Wilson Avenue
+				Chicago  IL  60706
+				US
+
+00-1A-7E   (hex)		LN Srithai Comm Ltd.
+001A7E     (base 16)		LN Srithai Comm Ltd.
+				71/12 M.5, Bangna-Trad Rd, KM.52, Thakam
+				Bangpakong  Chachoengsao  24130
+				TH
+
+00-1A-5A   (hex)		Korea Electric Power Data Network  (KDN) Co., Ltd
+001A5A     (base 16)		Korea Electric Power Data Network  (KDN) Co., Ltd
+				665 NAESON-DONG,
+				GYEONGGI-DO  UIWANG-SI, NAESON-DONG  437-082
+				KR
+
+00-1A-5F   (hex)		KitWorks.fi Ltd.
+001A5F     (base 16)		KitWorks.fi Ltd.
+				Snowpolis
+				Vuokatti  Kainuu  88610
+				FI
+
+00-1A-37   (hex)		Lear Corporation
+001A37     (base 16)		Lear Corporation
+				Industriestrasse 48
+				Kronach  Bayern  96317
+				DE
+
+00-1A-38   (hex)		Sanmina-SCI
+001A38     (base 16)		Sanmina-SCI
+				13000 South Memorial Parkway
+				Huntsville  AL  35803
+				US
+
+00-1A-2B   (hex)		Ayecom Technology Co., Ltd.
+001A2B     (base 16)		Ayecom Technology Co., Ltd.
+				No. 25, R&D Road 2, Science-Based Industrial Park
+				Hsinchu    300
+				TW
+
+00-1A-28   (hex)		ASWT Co., LTD. Taiwan Branch H.K.
+001A28     (base 16)		ASWT Co., LTD. Taiwan Branch H.K.
+				7F., No.3 Lane 91, Dongmei Rd.
+				Hsinchu    30070
+				TW
+
+00-1A-2C   (hex)		SATEC Co.,LTD
+001A2C     (base 16)		SATEC Co.,LTD
+				358-4, Palgok2-Dong, Sangnok-Gu
+				Ansan-Si  Kyungki-Do  426-190
+				KR
+
+00-1A-27   (hex)		Ubistar
+001A27     (base 16)		Ubistar
+				8F, Seongo Building, 587-23
+				Seoul    135-747
+				KR
+
+00-1A-21   (hex)		Brookhuis Applied Technologies BV
+001A21     (base 16)		Brookhuis Applied Technologies BV
+				PO Box 79
+				Enschede    NL-7500
+				NL
+
+00-19-FF   (hex)		Finnzymes
+0019FF     (base 16)		Finnzymes
+				800 West Cummings Park
+				Woburn  MA  01801
+				US
+
+00-19-FA   (hex)		Cable Vision Electronics CO., LTD.
+0019FA     (base 16)		Cable Vision Electronics CO., LTD.
+				12F-3, No.16, Chien Pa Rd.
+				Chung Ho City  Taipei Hsien  235
+				TW
+
+00-1A-5D   (hex)		Mobinnova Corp.
+001A5D     (base 16)		Mobinnova Corp.
+				11F, 845, CHUNG SHAN RD
+				TAOYUAN    33059
+				TW
+
+00-1A-4D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+001A4D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				
+				Pin-Jen  Taoyuan  324
+				TW
+
+00-1A-48   (hex)		Takacom Corporation
+001A48     (base 16)		Takacom Corporation
+				304-709 Aza-Nishiyanma
+				Toki-shi  Gifu-ken  509-5202
+				JP
+
+00-1A-0B   (hex)		BONA TECHNOLOGY INC.
+001A0B     (base 16)		BONA TECHNOLOGY INC.
+				4F, E-Place Bldg., 719-24
+				Seoul    135-080
+				KR
+
+00-1A-06   (hex)		OpVista, Inc.
+001A06     (base 16)		OpVista, Inc.
+				870 North McCarthy Blvd.
+				Milpitas  California  95035
+				US
+
+00-1A-2E   (hex)		Ziova Coporation
+001A2E     (base 16)		Ziova Coporation
+				Unit 3, 7-9 Sherriffs road
+				Lonsdale  S.A.  5160
+				AU
+
+00-1A-32   (hex)		ACTIVA MULTIMEDIA
+001A32     (base 16)		ACTIVA MULTIMEDIA
+				SICP CSE
+				SANT JOAN DESPI  BARCELONA  08970
+				ES
+
+00-1A-00   (hex)		MATRIX INC.
+001A00     (base 16)		MATRIX INC.
+				AS bld.3-13-20
+				Osaka    530-0047
+				JP
+
+00-19-AD   (hex)		BOBST SA
+0019AD     (base 16)		BOBST SA
+				rte des flumeaux 50
+				PRILLY  VD  1008
+				CH
+
+00-19-A2   (hex)		ORDYN TECHNOLOGIES
+0019A2     (base 16)		ORDYN TECHNOLOGIES
+				Ozone Manay Tech Park, 
+				Bangalore     560 068
+				IN
+
+00-19-A5   (hex)		RadarFind Corporation
+0019A5     (base 16)		RadarFind Corporation
+				2100 Gateway Centre Blvd., Suite 150
+				Morrisville  NC  27560
+				US
+
+00-19-93   (hex)		Changshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea
+001993     (base 16)		Changshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea
+				No. 8 Jianye Road
+				Changshu  Jiangsu  215500
+				CN
+
+00-19-F1   (hex)		Star Communication Network Technology Co.,Ltd
+0019F1     (base 16)		Star Communication Network Technology Co.,Ltd
+				10/F,Tower B,SOHO New Town,No.88 jianguoRoad,Chaoyang District
+				Beijing    100022
+				CN
+
+00-19-EC   (hex)		Sagamore Systems, Inc.
+0019EC     (base 16)		Sagamore Systems, Inc.
+				55 Middlesex Street
+				North Chelmsford  MA  01863
+				US
+
+00-19-CC   (hex)		RCG (HK) Ltd
+0019CC     (base 16)		RCG (HK) Ltd
+				9/F., Core C, Cyberport 3
+				    
+				HK
+
+00-19-C8   (hex)		AnyDATA Corporation
+0019C8     (base 16)		AnyDATA Corporation
+				18902 Bardeen Ave.
+				Irvine  CA  91612
+				US
+
+00-19-C4   (hex)		Infocrypt Inc.
+0019C4     (base 16)		Infocrypt Inc.
+				711, BYUCKSAN DIGITAL VALLEY 1 212-16,
+				Seoul    152-050
+				KR
+
+00-19-BC   (hex)		ELECTRO CHANCE SRL
+0019BC     (base 16)		ELECTRO CHANCE SRL
+				CARHUE 3179
+				CAPITAL FEDERAL  BUENOS AIRES  1440
+				AR
+
+00-19-9B   (hex)		Diversified Technical Systems, Inc.
+00199B     (base 16)		Diversified Technical Systems, Inc.
+				909 Electric Avenue
+				Seal Beach  California  90740
+				US
+
+00-19-90   (hex)		ELM DATA Co., Ltd.
+001990     (base 16)		ELM DATA Co., Ltd.
+				2-15 TECHNO-PARK 1-CHOME
+				SAPPORO  HOKKAIDO  004-0015
+				JP
+
+00-19-8F   (hex)		Nokia Bell N.V.
+00198F     (base 16)		Nokia Bell N.V.
+				Copernicuslaan 50
+				Antwerp    B-2018
+				BE
+
+00-19-D8   (hex)		MAXFOR
+0019D8     (base 16)		MAXFOR
+				#E 809, Bundang, Techno-Park
+				Seongnam-City  Gyeonggi-Do  463-760
+				KR
+
+00-19-D5   (hex)		IP Innovations, Inc.
+0019D5     (base 16)		IP Innovations, Inc.
+				1517 146th Ave
+				Dorr  MI  49323
+				US
+
+00-19-A3   (hex)		asteel electronique atlantique
+0019A3     (base 16)		asteel electronique atlantique
+				za de la lande de saint jean
+				sainte marie de redon    35600
+				FR
+
+00-19-EA   (hex)		TeraMage Technologies Co., Ltd.
+0019EA     (base 16)		TeraMage Technologies Co., Ltd.
+				Golden Land Building Suite 907
+				Beijing    100016
+				CN
+
+00-19-6E   (hex)		Metacom (Pty) Ltd.
+00196E     (base 16)		Metacom (Pty) Ltd.
+				6 Ndabeni Business Park
+				Cape Town  Western Cape  7405
+				ZA
+
+00-19-65   (hex)		YuHua TelTech (ShangHai) Co., Ltd.
+001965     (base 16)		YuHua TelTech (ShangHai) Co., Ltd.
+				YuHua R&D Building,27 xin jin qiao road,
+				SHANGHAI    201206
+				CN
+
+00-19-66   (hex)		Asiarock Technology Limited
+001966     (base 16)		Asiarock Technology Limited
+				P.O. Box957, Offshore Incorporations Centre
+				Road Town  Tortola  
+				VG
+
+00-19-7B   (hex)		Picotest Corp.
+00197B     (base 16)		Picotest Corp.
+				8F-1, 286-9, Hsin-Ya Rd., 80673
+				Kaohsiung    80673
+				TW
+
+00-19-73   (hex)		Zeugma Systems
+001973     (base 16)		Zeugma Systems
+				Suite 250
+				Richmond  BC  V6V 2R2
+				CA
+
+00-19-75   (hex)		Beijing Huisen networks technology Inc
+001975     (base 16)		Beijing Huisen networks technology Inc
+				Jia#2 of Xili of Baiyun road,Xicheng district
+				Beijing    100045
+				CN
+
+00-19-40   (hex)		Rackable Systems
+001940     (base 16)		Rackable Systems
+				1933 Milmont Drive
+				Milpitas  CA  95035
+				US
+
+00-19-3C   (hex)		HighPoint Technologies Incorporated
+00193C     (base 16)		HighPoint Technologies Incorporated
+				1161 Cadillac Court
+				Milpitas  CA  95035
+				US
+
+00-19-5C   (hex)		Innotech Corporation
+00195C     (base 16)		Innotech Corporation
+				3-17-6
+				Yokohama  Kanagawa  222-8580
+				JP
+
+00-19-5F   (hex)		Valemount Networks Corporation
+00195F     (base 16)		Valemount Networks Corporation
+				1201- 5th Ave
+				Valemount  BC  V0E2Z0
+				CA
+
+00-19-48   (hex)		AireSpider Networks
+001948     (base 16)		AireSpider Networks
+				1171 Montague Express Way
+				Milpitas  CA  95035
+				US
+
+00-19-43   (hex)		Belden
+001943     (base 16)		Belden
+				793 Fort Mill Highway
+				Fort Mill  South Carolina  29715
+				US
+
+00-19-2E   (hex)		Spectral Instruments, Inc.
+00192E     (base 16)		Spectral Instruments, Inc.
+				420 N Bonita Ave
+				Tucson  AZ  85745
+				US
+
+00-19-2B   (hex)		Aclara RF Systems Inc.
+00192B     (base 16)		Aclara RF Systems Inc.
+				30400 Solon Road
+				Solon  OH  44139
+				US
+
+00-19-1E   (hex)		Beyondwiz Co., Ltd.
+00191E     (base 16)		Beyondwiz Co., Ltd.
+				3F, Daechang Bldg.,
+				Sungnam  Kyungki-do  463-825
+				KR
+
+00-19-81   (hex)		Vivox Inc
+001981     (base 16)		Vivox Inc
+				40 Speen Street
+				Framingham  MA  01701
+				US
+
+00-19-45   (hex)		RF COncepts, LLC
+001945     (base 16)		RF COncepts, LLC
+				1148 Wagner Drive 
+				Sevierville  TN  37862
+				US
+
+00-19-1F   (hex)		Microlink communications Inc.
+00191F     (base 16)		Microlink communications Inc.
+				8F , 31 , Hsintai Road , Chupei City , Hsinchu
+				Chupei  Taiwan  302
+				TW
+
+00-19-20   (hex)		KUME electric Co.,Ltd.
+001920     (base 16)		KUME electric Co.,Ltd.
+				4-2-24 Kitakawara
+				Itami-city  Hyougo  
+				JP
+
+00-19-26   (hex)		BitsGen Co., Ltd.
+001926     (base 16)		BitsGen Co., Ltd.
+				#502, Owner's Tower, #16-5, Sunea-dong
+				Bundang-gu  Seongnam-si  463-825
+				KR
+
+00-19-29   (hex)		2M2B Montadora de Maquinas Bahia Brasil LTDA
+001929     (base 16)		2M2B Montadora de Maquinas Bahia Brasil LTDA
+				Rua Djalma dutra, 668, Sete Portas
+				Salvador  Bahia  40240080
+				BR
+
+00-18-F1   (hex)		Chunichi Denshi Co.,LTD.
+0018F1     (base 16)		Chunichi Denshi Co.,LTD.
+				1 Denjiyama
+				Nagoya  Aichi  458-8525
+				JP
+
+00-18-F2   (hex)		Beijing Tianyu Communication Equipment Co., Ltd
+0018F2     (base 16)		Beijing Tianyu Communication Equipment Co., Ltd
+				27th Floor, Tengda Plaza
+				Beijing    100044
+				CN
+
+00-18-EC   (hex)		Welding Technology Corporation
+0018EC     (base 16)		Welding Technology Corporation
+				24775 Crestview Court
+				Farmington Hills  MI  48335
+				US
+
+00-18-ED   (hex)		Accutech Ultrasystems Co., Ltd.
+0018ED     (base 16)		Accutech Ultrasystems Co., Ltd.
+				11F-4, No. 150,
+				CHUNG-HO CITY,  TAIPEI HSIEN,  235
+				TW
+
+00-19-0B   (hex)		Southern Vision Systems, Inc.
+00190B     (base 16)		Southern Vision Systems, Inc.
+				8215 Madison Blvd, Suite 150
+				Madison  AL  35758
+				US
+
+00-19-03   (hex)		Bigfoot Networks Inc
+001903     (base 16)		Bigfoot Networks Inc
+				3925 West Braker Lane
+				Austin  TX  78759
+				US
+
+00-19-00   (hex)		Intelliverese - DBA Voicecom
+001900     (base 16)		Intelliverese - DBA Voicecom
+				5900 Windward Parkway
+				Alpharetta  Georgia  30005
+				US
+
+00-19-02   (hex)		Cambridge Consultants Ltd
+001902     (base 16)		Cambridge Consultants Ltd
+				Science Park
+				Cambridge  Cambs  CB4 0DW
+				GB
+
+00-19-2A   (hex)		Antiope Associates
+00192A     (base 16)		Antiope Associates
+				18 Clay Street
+				Fair Haven  New Jersey  07704
+				US
+
+00-19-0F   (hex)		Advansus Corp.
+00190F     (base 16)		Advansus Corp.
+				No.5 Shing Yeh Street, Kwei Hsiang
+				Taoyuan    333
+				TW
+
+00-19-11   (hex)		Just In Mobile Information Technologies (Shanghai) Co., Ltd.
+001911     (base 16)		Just In Mobile Information Technologies (Shanghai) Co., Ltd.
+				5th Floor, 2nd Area, Haiwangxing Building, 62 Xingguang Ave., N.High-Tech Park
+				Chongqing    401121
+				CN
+
+00-18-E0   (hex)		ANAVEO
+0018E0     (base 16)		ANAVEO
+				Les Carrés du parc
+				CHAMPAGNE au MONT D'OR  Rhône  F-69410
+				FR
+
+00-19-17   (hex)		Posiflex Inc.
+001917     (base 16)		Posiflex Inc.
+				6, Wu-Chuan Road
+				Taipei Hsien    248
+				TW
+
+00-19-18   (hex)		Interactive Wear AG
+001918     (base 16)		Interactive Wear AG
+				Petersbrunner Strasse 3
+				Starnberg  Bayern  82319
+				DE
+
+00-18-CB   (hex)		Tecobest Technology Limited
+0018CB     (base 16)		Tecobest Technology Limited
+				53/F.,Block A,United Plaza,
+				Shenzhen  Guangdong  518026
+				CN
+
+00-18-CE   (hex)		Dreamtech Co., Ltd
+0018CE     (base 16)		Dreamtech Co., Ltd
+				#340-5, Yang-dang Ri, Jik-san Myeon
+				Cheon-an si  Chung-Nam  330810
+				KR
+
+00-18-94   (hex)		NPCore, Inc.
+001894     (base 16)		NPCore, Inc.
+				1001, ISBIZ Tower
+				Youngdungpo Gu  Seoul  150-105
+				KR
+
+00-18-98   (hex)		KINGSTATE ELECTRONICS CORPORATION
+001898     (base 16)		KINGSTATE ELECTRONICS CORPORATION
+				10F, No.69-11, Sec.2, Chung Cheng E. Rd.,
+				Taipei County    251
+				TW
+
+00-18-92   (hex)		ads-tec GmbH
+001892     (base 16)		ads-tec GmbH
+				Raiffeisenstrasse 14
+				Leinfelden-Echterdingen  BW  70771
+				DE
+
+00-18-91   (hex)		Zhongshan General K-mate Electronics Co., Ltd
+001891     (base 16)		Zhongshan General K-mate Electronics Co., Ltd
+				3/F B1 Building, Fuwan Ind. Zone Sun Wen East Road
+				Zhongshan  Guangdong  528403
+				CN
+
+00-18-AD   (hex)		NIDEC SANKYO CORPORATION
+0018AD     (base 16)		NIDEC SANKYO CORPORATION
+				5329, Shimosuwa-machi, Suwa-gun
+				  Nagano  393-8511
+				JP
+
+00-18-AC   (hex)		Shanghai Jiao Da HISYS Technology Co. Ltd.
+0018AC     (base 16)		Shanghai Jiao Da HISYS Technology Co. Ltd.
+				7F Haoran HiTech Bldg., No.1954 Huashan Road
+				shanghai  xuhui  200030
+				US
+
+00-18-AB   (hex)		BEIJING LHWT MICROELECTRONICS INC.
+0018AB     (base 16)		BEIJING LHWT MICROELECTRONICS INC.
+				18/F,QUANTUM PLAZA,NO.27 ZHI CHUN RD.,HAI DIAN DISTRICT,BEIJING
+				    
+				CN
+
+00-18-A5   (hex)		ADigit Technologies Corp.
+0018A5     (base 16)		ADigit Technologies Corp.
+				Rm D302E,No.185 3F-2,Kur-Wong Road,
+				Tao-yuan,    325
+				TW
+
+00-18-78   (hex)		Mackware GmbH
+001878     (base 16)		Mackware GmbH
+				Schänzle 13
+				Waiblingen  Baden-Württemberg  71332
+				DE
+
+00-18-6A   (hex)		Global Link Digital Technology Co,.LTD
+00186A     (base 16)		Global Link Digital Technology Co,.LTD
+				Qibaoyiding Ind.Area
+				Dongguan  Guangdong  523051
+				CN
+
+00-18-6B   (hex)		Sambu Communics CO., LTD.
+00186B     (base 16)		Sambu Communics CO., LTD.
+				38B-1L Namdong Industrial Complex
+				Incheon    405-100
+				KR
+
+00-18-6E   (hex)		3Com Ltd
+00186E     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-18-A6   (hex)		Persistent Systems, LLC
+0018A6     (base 16)		Persistent Systems, LLC
+				118 N. Howard St. #72
+				Baltimore  MD  21201
+				US
+
+00-18-9B   (hex)		Thomson Inc.
+00189B     (base 16)		Thomson Inc.
+				101 West 103rd Street
+				Indianapolis  IN  46290-1102
+				US
+
+00-18-B2   (hex)		ADEUNIS RF
+0018B2     (base 16)		ADEUNIS RF
+				283 Rue NEEL
+				CROLLES  ISERE  38920
+				FR
+
+00-18-B3   (hex)		TEC WizHome Co., Ltd.
+0018B3     (base 16)		TEC WizHome Co., Ltd.
+				18fl., In-Song bldg., 194-15,
+				Seoul    100-952
+				KR
+
+00-18-BD   (hex)		SHENZHEN DVBWORLD TECHNOLOGY CO., LTD.
+0018BD     (base 16)		SHENZHEN DVBWORLD TECHNOLOGY CO., LTD.
+				2ND FLOOR, BUILDING A, QINGHU XINQIAO INDUSTRY AREA,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+00-18-67   (hex)		Datalogic ADC
+001867     (base 16)		Datalogic ADC
+				433 N. Fair Oaks Ave
+				Pasadena  CA  91103
+				US
+
+00-18-65   (hex)		Siemens Healthcare Diagnostics Manufacturing Ltd
+001865     (base 16)		Siemens Healthcare Diagnostics Manufacturing Ltd
+				Northern Road
+				Sudbury  Suffolk  C010 2XQ
+				GB
+
+00-18-77   (hex)		Amplex A/S
+001877     (base 16)		Amplex A/S
+				Silkeborgvej 2
+				Aarhus C    8000
+				DK
+
+00-18-89   (hex)		WinNet Solutions Limited
+001889     (base 16)		WinNet Solutions Limited
+				Rm804, Kornhill Metro Tower, Quarry Bay
+				  HK  852
+				HK
+
+00-17-F9   (hex)		Forcom Sp. z o.o.
+0017F9     (base 16)		Forcom Sp. z o.o.
+				Gajowa 6
+				Poznan  WLKP  60-815
+				PL
+
+00-17-F4   (hex)		ZERON ALLIANCE
+0017F4     (base 16)		ZERON ALLIANCE
+				 3F DOORI BUILD. 244-14 bunji, Poi-dong, Gangnam-gu
+				SEOUL    135-965
+				KR
+
+00-17-F7   (hex)		CEM Solutions Pvt Ltd
+0017F7     (base 16)		CEM Solutions Pvt Ltd
+				49,Kanija Bhavan
+				Bangalore  Karnataka  560 001
+				IN
+
+00-17-ED   (hex)		WooJooIT Ltd.
+0017ED     (base 16)		WooJooIT Ltd.
+				Hankooktire B/D 4th floor, 501-19,
+				Yangcheon-gu,  Seoul  158-839
+				KR
+
+00-18-43   (hex)		Dawevision Ltd
+001843     (base 16)		Dawevision Ltd
+				197 High Street
+				Cottenham  Cambridge  CB4 8RX
+				GB
+
+00-18-2C   (hex)		Ascend Networks, Inc.
+00182C     (base 16)		Ascend Networks, Inc.
+				No. 4 - 4, Lane 413, ChungChan Road,
+				BenQuao City  Taipei  220
+				TW
+
+00-18-1D   (hex)		ASIA ELECTRONICS CO.,LTD
+00181D     (base 16)		ASIA ELECTRONICS CO.,LTD
+				620-3 DOCHEON-DONG
+				GWANGJU    506-301
+				KR
+
+00-18-1F   (hex)		Palmmicro Communications
+00181F     (base 16)		Palmmicro Communications
+				Room 0611, Bldg.B Tsinghua Tongfang Technology Plaza
+				Beijing    100083
+				CN
+
+00-18-1B   (hex)		TaiJin Metal Co., Ltd.
+00181B     (base 16)		TaiJin Metal Co., Ltd.
+				#95-9, Hangdong7-Ga, Joong-Gu
+				In Cheon    400-037
+				KR
+
+00-18-05   (hex)		Beijing InHand Networking Technology Co.,Ltd.
+001805     (base 16)		Beijing InHand Networking Technology Co.,Ltd.
+				West Wing 11th Floor of Qiming International Mansion
+				Beijing    100085
+				CN
+
+00-18-0D   (hex)		Terabytes Server Storage Tech Corp
+00180D     (base 16)		Terabytes Server Storage Tech Corp
+				14257 E Don Julian Rd
+				City of Industry  CA  91746
+				US
+
+00-18-54   (hex)		Argard Co., Ltd
+001854     (base 16)		Argard Co., Ltd
+				2571 Lardprao Rd.
+				wangthonglang  Bangkok  10310
+				TH
+
+00-18-47   (hex)		AceNet Technology Inc.
+001847     (base 16)		AceNet Technology Inc.
+				133 Vienna Dr.
+				Milpitas  CA  95035
+				US
+
+00-18-36   (hex)		REJ Co.,Ltd
+001836     (base 16)		REJ Co.,Ltd
+				2-3-2 Fukuura, Kanazawa-ku
+				Yokohama  Kanagawa  236-8641
+				JP
+
+00-17-CC   (hex)		Alcatel-Lucent
+0017CC     (base 16)		Alcatel-Lucent
+				601 Data Dr.
+				Plano  TX  75075
+				US
+
+00-17-C4   (hex)		Quanta Microsystems, INC.
+0017C4     (base 16)		Quanta Microsystems, INC.
+				188 Wenhwa 2nd RD., Kueishan Hsiang
+				Taoyuan Shien    333
+				TW
+
+00-17-9E   (hex)		Sirit Inc
+00179E     (base 16)		Sirit Inc
+				2525 Meridian Parkway
+				Durham  NC  27713
+				US
+
+00-17-A7   (hex)		Mobile Computing Promotion Consortium
+0017A7     (base 16)		Mobile Computing Promotion Consortium
+				3-5-12 Shiba-Koen
+				Tokyo    105-0011
+				JP
+
+00-17-9F   (hex)		Apricorn
+00179F     (base 16)		Apricorn
+				12191 Kirkham RD
+				Poway  California  92064
+				US
+
+00-17-B4   (hex)		Remote Security Systems, LLC
+0017B4     (base 16)		Remote Security Systems, LLC
+				4806 Upper Brandon Place
+				Marietta  Georgia  30068
+				US
+
+00-17-AC   (hex)		O'Neil Product Development Inc.
+0017AC     (base 16)		O'Neil Product Development Inc.
+				8 Mason
+				Irvine  CA  92618
+				US
+
+00-17-AD   (hex)		AceNet Corporation
+0017AD     (base 16)		AceNet Corporation
+				7F-4, No.146, Wen-Shin Road
+				Gueishan  TAOYUAN  
+				TW
+
+00-17-DD   (hex)		Clipsal Australia
+0017DD     (base 16)		Clipsal Australia
+				33-37 Port Wakefield Rd
+				Gepps Cross  South Australia  5094
+				AU
+
+00-17-D9   (hex)		AAI Corporation
+0017D9     (base 16)		AAI Corporation
+				P.O. Box 126
+				Hunt Valley  Maryland  21030
+				US
+
+00-17-DC   (hex)		DAEMYUNG ZERO1
+0017DC     (base 16)		DAEMYUNG ZERO1
+				#809,Hyosung Intellian
+				Anyang-si  Gyeonggi-do  431-060
+				KR
+
+00-17-BF   (hex)		Coherent Research Limited
+0017BF     (base 16)		Coherent Research Limited
+				8 Princess Mews
+				Kingston upon Thames  Surrey  KT1 2SZ
+				GB
+
+00-17-BD   (hex)		Tibetsystem
+0017BD     (base 16)		Tibetsystem
+				6F IT Castle II 550-1 Gasan-dong
+				Seoul  Geumcheon-gu  153-803
+				KR
+
+00-17-A1   (hex)		3soft inc.
+0017A1     (base 16)		3soft inc.
+				shinyoung bldg 4f, chungdam-dong, gangnam-gu
+				seoul    135-100
+				KR
+
+00-17-92   (hex)		Falcom Wireless Comunications Gmbh
+001792     (base 16)		Falcom Wireless Comunications Gmbh
+				Gewerbering 6
+				Langewiesen  Thuringia  98704
+				DE
+
+00-17-97   (hex)		Telsy Elettronica S.p.A.
+001797     (base 16)		Telsy Elettronica S.p.A.
+				Corso Svizzera 185
+				Torino    10149
+				IT
+
+00-17-8C   (hex)		Independent Witness, Inc
+00178C     (base 16)		Independent Witness, Inc
+				1515 West 2200 South
+				Salt Lake City  UT  84119
+				US
+
+00-17-CB   (hex)		Juniper Networks
+0017CB     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-17-D3   (hex)		Etymotic Research, Inc.
+0017D3     (base 16)		Etymotic Research, Inc.
+				61 Martin Lane
+				Elk Grove Village  IL  60061
+				US
+
+00-17-88   (hex)		Philips Lighting BV
+001788     (base 16)		Philips Lighting BV
+				High Tech Campus 45
+				Eindhoven  Noord Brabant  5656 AE
+				NL
+
+00-17-3C   (hex)		Extreme Engineering Solutions
+00173C     (base 16)		Extreme Engineering Solutions
+				7878 Big Sky Drive
+				Madison  WI  53719
+				US
+
+00-17-36   (hex)		iiTron Inc.
+001736     (base 16)		iiTron Inc.
+				88 Mercy St.
+				Mountain View  CA  94041
+				US
+
+00-17-37   (hex)		Industrie Dial Face S.p.A.
+001737     (base 16)		Industrie Dial Face S.p.A.
+				via Canzo, 4
+				Peschiera Borromeo  Milano  20068
+				IT
+
+00-17-33   (hex)		SFR
+001733     (base 16)		SFR
+				42 Quai du point du jour
+				Boulogne Billancourt  Hauts de Seine  92659
+				FR
+
+00-17-58   (hex)		ThruVision Ltd
+001758     (base 16)		ThruVision Ltd
+				Central 127, No.18
+				Abingdon  Oxfordshire  OX14 4SA
+				GB
+
+00-17-4F   (hex)		iCatch Inc.
+00174F     (base 16)		iCatch Inc.
+				10F-2, No. 109, Sec. 6, Mincyuan E. Rd.,
+				Taipei    114
+				TW
+
+00-17-4A   (hex)		SOCOMEC
+00174A     (base 16)		SOCOMEC
+				rue de Westhouse
+				BENFELD CEDEX    67235
+				FR
+
+00-17-4E   (hex)		Parama-tech Co.,Ltd.
+00174E     (base 16)		Parama-tech Co.,Ltd.
+				2-19-8, Sharyo, Higashi-ku
+				Fukuoka    812-0068
+				JP
+
+00-17-6F   (hex)		PAX Computer Technology(Shenzhen) Ltd.
+00176F     (base 16)		PAX Computer Technology(Shenzhen) Ltd.
+				4/F, No.3 Building, Software Park, Second Central Science-Tech Road, High-Tech
+				Shenzhen  GuangDong  518057
+				CN
+
+00-17-71   (hex)		APD Communications Ltd
+001771     (base 16)		APD Communications Ltd
+				Newlands Centre
+				HULL    HU6 7TQ
+				GB
+
+00-17-5B   (hex)		ACS Solutions Switzerland Ltd.
+00175B     (base 16)		ACS Solutions Switzerland Ltd.
+				Frankenstrasse 70
+				Bern- Buempliz    3018
+				CH
+
+00-17-29   (hex)		Ubicod Co.LTD
+001729     (base 16)		Ubicod Co.LTD
+				7F Chun-gin Bldg, 53-5 Wonhyo-ro
+				Seoul    140-719
+				KR
+
+00-17-27   (hex)		Thermo Ramsey Italia s.r.l.
+001727     (base 16)		Thermo Ramsey Italia s.r.l.
+				Strada Rivoltana km 6/7
+				Rodano  Milano  20090
+				IT
+
+00-17-2A   (hex)		Proware Technology Corp.(By Unifosa)
+00172A     (base 16)		Proware Technology Corp.(By Unifosa)
+				6Fl., No. 4, Alley 1, Lane 235, PaoChao Rd., Sindian Dist.,
+				New Taipei City    231
+				TW
+
+00-17-25   (hex)		Liquid Computing
+001725     (base 16)		Liquid Computing
+				340 Terry Fox Drive
+				Ottawa  Ontario  K2K 3A2
+				CA
+
+00-17-64   (hex)		ATMedia GmbH
+001764     (base 16)		ATMedia GmbH
+				Stuhlsatzenhausweg 69
+				Saarbruecken  Saarland  66123
+				DE
+
+00-17-5E   (hex)		Zed-3
+00175E     (base 16)		Zed-3
+				501 Valley Way
+				Milpitas  CA  95035
+				US
+
+00-17-66   (hex)		Accense Technology, Inc.
+001766     (base 16)		Accense Technology, Inc.
+				35 Tansumachi
+				Shinjyuku-ku  Tokyo  1620833
+				JP
+
+00-16-D0   (hex)		ATech elektronika d.o.o.
+0016D0     (base 16)		ATech elektronika d.o.o.
+				Bac pri Materiji 30
+				Materija  SI  6242
+				SI
+
+00-16-C3   (hex)		BA Systems Inc
+0016C3     (base 16)		BA Systems Inc
+				6895 Via Del Oro
+				San Jose  CA  95119
+				US
+
+00-16-F0   (hex)		Dell
+0016F0     (base 16)		Dell
+				909 Hermosa Ct
+				Sunnyvale  CA  94085
+				US
+
+00-16-F8   (hex)		AVIQTECH TECHNOLOGY CO., LTD.
+0016F8     (base 16)		AVIQTECH TECHNOLOGY CO., LTD.
+				6F 12, Li-hsin Road, SBIP
+				Hsin-chu    300
+				TW
+
+00-17-03   (hex)		MOSDAN Internation Co.,Ltd
+001703     (base 16)		MOSDAN Internation Co.,Ltd
+				No.216 Xiwei,Shanhua Dist,
+				Tainan    741
+				TW
+
+00-16-FC   (hex)		TOHKEN CO.,LTD.
+0016FC     (base 16)		TOHKEN CO.,LTD.
+				2-16-20 Tamagawa
+				Chofu  Tokyo  182-0025
+				JP
+
+00-16-E9   (hex)		Tiba Medical Inc
+0016E9     (base 16)		Tiba Medical Inc
+				5024 Lakewood Drive
+				Plano  TX  75093
+				US
+
+00-16-DC   (hex)		ARCHOS
+0016DC     (base 16)		ARCHOS
+				12 rue AMPERE
+				IGNY  ESSONNES  91430
+				FR
+
+00-17-14   (hex)		BR Controls Nederland bv
+001714     (base 16)		BR Controls Nederland bv
+				Branderweg 1
+				Zwolle  Overijssel  8042 PD
+				NL
+
+00-17-1B   (hex)		Innovation Lab Corp.
+00171B     (base 16)		Innovation Lab Corp.
+				12FL., No. 285, Sec. 2, TiDing Blvd.,
+				Taipei    11493
+				TW
+
+00-17-09   (hex)		Exalt Communications
+001709     (base 16)		Exalt Communications
+				580 Division Street
+				Campbell  CA  95008
+				US
+
+00-16-C1   (hex)		Eleksen Ltd
+0016C1     (base 16)		Eleksen Ltd
+				Pinewood Studios
+				Iver  Bucks  SL0 0NH
+				US
+
+00-16-A9   (hex)		2EI
+0016A9     (base 16)		2EI
+				Rua dos Rubis, 77 - Assumpcao
+				Aguas de Lindoia  São Paulo  13940-000
+				BR
+
+00-16-B0   (hex)		VK Corporation
+0016B0     (base 16)		VK Corporation
+				VK B/D, 548-6, Anyang 8dong, Manan-gu
+				Anyang  Kyounggi  430-8903
+				KR
+
+00-16-B1   (hex)		KBS
+0016B1     (base 16)		KBS
+				88 rue Pierre Sémard
+				Moissy cedex  Ile de France  77552
+				FR
+
+00-16-AE   (hex)		INVENTEL
+0016AE     (base 16)		INVENTEL
+				35 rue Tournefort
+				PARIS    75005
+				FR
+
+00-16-AC   (hex)		Toho Technology Corp.
+0016AC     (base 16)		Toho Technology Corp.
+				HIGASHI 5-1
+				INAZAWA-CITY  AICHI  492-8501
+				JP
+
+00-16-83   (hex)		WEBIO International Co.,.Ltd.
+001683     (base 16)		WEBIO International Co.,.Ltd.
+				21F.,No.171 Songde Rd.,Sinyi District
+				Taipei    11085
+				TW
+
+00-16-84   (hex)		Donjin Co.,Ltd.
+001684     (base 16)		Donjin Co.,Ltd.
+				21F,Cangsong Building,Tairan,Futian
+				Shenzhen  Guangdong  518040
+				CN
+
+00-16-87   (hex)		Chubb CSC-Vendor AP
+001687     (base 16)		Chubb CSC-Vendor AP
+				Ottawa STN
+				Ottawa    K1G 6W6
+				CA
+
+00-16-7F   (hex)		Bluebird Soft Inc.
+00167F     (base 16)		Bluebird Soft Inc.
+				562-21 Gangnam-gu,
+				Seoul    135-890
+				KR
+
+00-16-4C   (hex)		PLANET INT Co., Ltd
+00164C     (base 16)		PLANET INT Co., Ltd
+				8th Floor, Saeum B/D, 1361-5
+				Seoul    137-070
+				KR
+
+00-16-49   (hex)		SetOne GmbH
+001649     (base 16)		SetOne GmbH
+				Hegenheimer Str. 2
+				Weil am Rhein    D-79576
+				DE
+
+00-16-47   (hex)		Cisco Systems, Inc
+001647     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-16-65   (hex)		Cellon France
+001665     (base 16)		Cellon France
+				Route d'Angers Le Mans cedex 9
+				Le Mans  Sarthe  72081
+				FR
+
+00-16-5F   (hex)		Fairmount Automation
+00165F     (base 16)		Fairmount Automation
+				4621 West Chester Pike
+				Newtown Square  PA  19073
+				US
+
+00-16-7C   (hex)		iRex Technologies BV
+00167C     (base 16)		iRex Technologies BV
+				HighTech Campus
+				Eindhoven  Brabant  5656AE
+				NL
+
+00-16-73   (hex)		Bury GmbH & Co. KG
+001673     (base 16)		Bury GmbH & Co. KG
+				Robert-Koch-Str. 1-7
+				Loehne  Germany  32584
+				DE
+
+00-16-94   (hex)		Sennheiser Communications A/S
+001694     (base 16)		Sennheiser Communications A/S
+				Langager 6
+				Solrød Strand  Copenhagen  2680
+				DK
+
+00-16-9C   (hex)		Cisco Systems, Inc
+00169C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-16-57   (hex)		Aegate Ltd
+001657     (base 16)		Aegate Ltd
+				Technology Centre
+				Melbourn  Hertfordshire  SG8 6DP
+				GB
+
+00-16-8C   (hex)		DSL Partner AS
+00168C     (base 16)		DSL Partner AS
+				Havreveien 49
+				Oslo    0680
+				NO
+
+00-16-1B   (hex)		Micronet Corporation
+00161B     (base 16)		Micronet Corporation
+				1788-388 Nomura Hirooka
+				Shiojiri-shi  Nagano-ken  399-0702
+				JP
+
+00-16-18   (hex)		HIVION Co., Ltd.
+001618     (base 16)		HIVION Co., Ltd.
+				2F., Akyung Bldg., 54-10, Munjeong-dong,
+				Songpa-Gu  Seoul  
+				KR
+
+00-16-1E   (hex)		Woojinnet
+00161E     (base 16)		Woojinnet
+				292 osan dongtan
+				hwaseong  kyonggi  445-813
+				KR
+
+00-16-1F   (hex)		SUNWAVETEC Co., Ltd.
+00161F     (base 16)		SUNWAVETEC Co., Ltd.
+				#823, Kwanyang-dong, Dongan-ku
+				Anyang-si  Kyungki-do  431-060
+				US
+
+00-16-14   (hex)		Picosecond Pulse Labs
+001614     (base 16)		Picosecond Pulse Labs
+				2500 55th Street
+				Boulder  CO  80301
+				US
+
+00-16-0E   (hex)		Optica Technologies Inc.
+00160E     (base 16)		Optica Technologies Inc.
+				2051 Dogwood Street
+				Louisville  CO  80027
+				US
+
+00-16-43   (hex)		Sunhillo Corporation
+001643     (base 16)		Sunhillo Corporation
+				444 Kelley Drive
+				West Berlin  New Jersey  08091
+				US
+
+00-16-44   (hex)		LITE-ON Technology Corp.
+001644     (base 16)		LITE-ON Technology Corp.
+				18F, No.392, Ruey Kuang Road, Niehu,
+				Taipei    114
+				TW
+
+00-16-3E   (hex)		Xensource, Inc.
+00163E     (base 16)		Xensource, Inc.
+				2300 Geng Rd.
+				Palo Alto  CA  94303
+				US
+
+00-15-FD   (hex)		Complete Media Systems
+0015FD     (base 16)		Complete Media Systems
+				Grove Place
+				Warninglid  West sussex  RH17 5SN
+				GB
+
+00-15-F6   (hex)		SCIENCE AND ENGINEERING SERVICES, INC.
+0015F6     (base 16)		SCIENCE AND ENGINEERING SERVICES, INC.
+				4015 PULASKI PIKE NW
+				HUNTSVILLE  AL  35810
+				US
+
+00-16-34   (hex)		Mathtech, Inc.
+001634     (base 16)		Mathtech, Inc.
+				6402 Arlington Blvd.,
+				Falls Church  Virginia  22042-2356
+				US
+
+00-16-2C   (hex)		Xanboo
+00162C     (base 16)		Xanboo
+				115 West 30th, 6th Fl
+				New York  NY  10001
+				US
+
+00-16-05   (hex)		YORKVILLE SOUND INC.
+001605     (base 16)		YORKVILLE SOUND INC.
+				4625 WITMER INDUSTRIAL ESTATE
+				NIAGARA FALLS  NY  14305
+				US
+
+00-15-F9   (hex)		Cisco Systems, Inc
+0015F9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-E3   (hex)		Dream Technologies Corporation
+0015E3     (base 16)		Dream Technologies Corporation
+				Ebisu Prime Square, 1-1-39 Hiroo
+				Tokyo    150-0012
+				JP
+
+00-15-E0   (hex)		Ericsson
+0015E0     (base 16)		Ericsson
+				Nya Vattentornet
+				Lund    SE-221 83
+				NO
+
+00-15-F3   (hex)		PELTOR AB
+0015F3     (base 16)		PELTOR AB
+				Box 2341
+				SE-331 02  Värnamo    SE-331 02
+				SE
+
+00-15-D3   (hex)		Pantech&Curitel Communications, Inc.
+0015D3     (base 16)		Pantech&Curitel Communications, Inc.
+				1451-34, Seocho-dong, Seocho-Gu
+				Seoul    137-070
+				KR
+
+00-15-AD   (hex)		Accedian Networks
+0015AD     (base 16)		Accedian Networks
+				4878 Levy, suite 202
+				St-Laurent  Quebec  H9P 2V4
+				CA
+
+00-15-AC   (hex)		Capelon AB
+0015AC     (base 16)		Capelon AB
+				Jägerhorns  väg 1
+				Kungens Kurva  Stockholm  S-141 75
+				SE
+
+00-15-A9   (hex)		KWANG WOO I&C CO.,LTD
+0015A9     (base 16)		KWANG WOO I&C CO.,LTD
+				898-23, Hogye-dong,Dongan-gu
+				    431-080
+				KR
+
+00-E0-A8   (hex)		SAT GmbH & Co.
+00E0A8     (base 16)		SAT GmbH & Co.
+				RUTHNERGASSE 1
+				VIENNA A-1210    
+				AT
+
+00-15-74   (hex)		Horizon Semiconductors Ltd.
+001574     (base 16)		Horizon Semiconductors Ltd.
+				9 Hamenofim St.
+				Herzliya    46120
+				IL
+
+00-15-8A   (hex)		SURECOM Technology Corp.
+00158A     (base 16)		SURECOM Technology Corp.
+				6F, No. 125, Sec. 2, Datung Rd.
+				Shijr City, Taipei County    221
+				TW
+
+00-15-8E   (hex)		Plustek.INC
+00158E     (base 16)		Plustek.INC
+				13F-1,No3(Building F) Yuan Qu Street
+				Taipei  Yuan Qu  115
+				TW
+
+00-15-89   (hex)		D-MAX Technology Co.,Ltd
+001589     (base 16)		D-MAX Technology Co.,Ltd
+				7F-6,NO.26,Lian Cheng RD.,Chung-Ho City
+				Taipei Hsien    235
+				US
+
+00-15-B4   (hex)		Polymap  Wireless LLC
+0015B4     (base 16)		Polymap  Wireless LLC
+				310 S. Williams Blvd. Ste. 350
+				Tucson  AZ  85711
+				US
+
+00-15-CA   (hex)		TeraRecon, Inc.
+0015CA     (base 16)		TeraRecon, Inc.
+				2955 Campus Drive, Suite 325
+				San Mateo  CA  94403
+				US
+
+00-15-98   (hex)		Kolektor group
+001598     (base 16)		Kolektor group
+				Vojkova 10
+				Idrija    5280
+				SI
+
+00-15-12   (hex)		Zurich University of Applied Sciences
+001512     (base 16)		Zurich University of Applied Sciences
+				Technikumstrasse 9
+				Winterthur  ZH  CH-8401
+				CH
+
+00-15-0A   (hex)		Sonoa Systems, Inc
+00150A     (base 16)		Sonoa Systems, Inc
+				3900 Freedom Circle
+				Santa Clara  CA  95054
+				US
+
+00-15-70   (hex)		Zebra Technologies Inc
+001570     (base 16)		Zebra Technologies Inc
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+00-15-6E   (hex)		A. W. Communication Systems Ltd
+00156E     (base 16)		A. W. Communication Systems Ltd
+				Crook Barn
+				Carlisle  Cumbria  CA6 6LH
+				GB
+
+00-15-68   (hex)		Dilithium Networks
+001568     (base 16)		Dilithium Networks
+				5401 Old Redwood Hwy
+				Petaluma  CA  94954
+				US
+
+00-15-4B   (hex)		Wonde Proud Technology Co., Ltd
+00154B     (base 16)		Wonde Proud Technology Co., Ltd
+				21F., No.100, Sec.1, Shintai 5th Rd
+				Sijhih city  Taipei County  221
+				TW
+
+00-15-48   (hex)		CUBE TECHNOLOGIES
+001548     (base 16)		CUBE TECHNOLOGIES
+				46 A CHEMIN DU MOULIN CARRON
+				69570 DARDILLY  FRANCE  
+				FR
+
+00-15-5F   (hex)		GreenPeak Technologies
+00155F     (base 16)		GreenPeak Technologies
+				Spinnerijstraat 14
+				Zele    9240
+				BE
+
+00-15-5A   (hex)		DAINIPPON PHARMACEUTICAL CO., LTD.
+00155A     (base 16)		DAINIPPON PHARMACEUTICAL CO., LTD.
+				2-6-8, DOSHOMACHI, CHUO-KU
+				OSAKA CITY  OSAKA PREF.  541-8524
+				JP
+
+00-15-1D   (hex)		M2I CORPORATION
+00151D     (base 16)		M2I CORPORATION
+				Kyonggi Venture Anyang technical center, 13th Floor, 572-5, Anyang 8-Dong, Manan-Gu
+				Anyang-Shi  Kyonggi-Do  430-731
+				KR
+
+00-15-3C   (hex)		Kprotech Co., Ltd.
+00153C     (base 16)		Kprotech Co., Ltd.
+				2nd Floor, # 202, Myoung-ji e-Space II
+				An-yang City  Gyeong-gi Do  430-817
+				KR
+
+00-15-3A   (hex)		Shenzhen Syscan Technology Co.,Ltd.
+00153A     (base 16)		Shenzhen Syscan Technology Co.,Ltd.
+				13F, Olympic Plaza,
+				Shenzhen  Guangdong  518034
+				CN
+
+00-15-32   (hex)		Consumer Technologies Group, LLC
+001532     (base 16)		Consumer Technologies Group, LLC
+				801 Brookhollow
+				Efland  NC  27243
+				US
+
+00-14-9B   (hex)		Nokota Communications, LLC
+00149B     (base 16)		Nokota Communications, LLC
+				200 Galleria Parkway
+				Atlanta  Georgia  30339
+				US
+
+00-14-A1   (hex)		Synchronous Communication Corp
+0014A1     (base 16)		Synchronous Communication Corp
+				9 floor, No168, Rueiguang Road, Neihu District
+				Taipei    114
+				TW
+
+00-14-9E   (hex)		UbONE Co., Ltd
+00149E     (base 16)		UbONE Co., Ltd
+				Shinyoung B.D. 602, SeoHyeon2-Dong
+				Seongnam-si  Gyeongg-do  463-824
+				KR
+
+00-14-A2   (hex)		Core Micro Systems Inc.
+0014A2     (base 16)		Core Micro Systems Inc.
+				Wacore Kaname-cho Bldg. 9F, 11-2, Nakamaru-cho
+				Itabashi-ku  Tokyo  173-0026
+				JP
+
+00-14-AD   (hex)		Gassner Wiege- und Meßtechnik GmbH
+0014AD     (base 16)		Gassner Wiege- und Meßtechnik GmbH
+				Münchner Bundesstraße
+				Salzburg    A-5020
+				AT
+
+00-14-AF   (hex)		Datasym POS Inc.
+0014AF     (base 16)		Datasym POS Inc.
+				45 Dalkeith Drive
+				Brantford  Ontario  N3P1M1
+				CA
+
+00-14-A9   (hex)		Cisco Systems, Inc
+0014A9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-14-FF   (hex)		Precise Automation, Inc.
+0014FF     (base 16)		Precise Automation, Inc.
+				1402 Alexandra Blvd
+				Crystal Lake  IL  60014
+				US
+
+00-14-FA   (hex)		AsGa S.A.
+0014FA     (base 16)		AsGa S.A.
+				Rod Roberto Moreira Km 04
+				Paulinia  São Paulo  13140-000
+				BR
+
+00-14-FB   (hex)		Technical Solutions Inc.
+0014FB     (base 16)		Technical Solutions Inc.
+				101-7188 Progress Way
+				Delta  BC  V4G 1M6
+				CA
+
+00-14-D2   (hex)		Kyuden Technosystems Corporation
+0014D2     (base 16)		Kyuden Technosystems Corporation
+				4-19-18 SHIMIZU,MINAMI-KU
+				FUKUOKA    815-0031
+				JP
+
+00-14-DC   (hex)		Communication System Design & Manufacturing (CSDM)
+0014DC     (base 16)		Communication System Design & Manufacturing (CSDM)
+				Postbus 181
+				Bussum  NH  1400 AD
+				NL
+
+00-14-CD   (hex)		DigitalZone Co., Ltd.
+0014CD     (base 16)		DigitalZone Co., Ltd.
+				No. 1001 E&C VentureDreamTower2
+				Seoul    152-848
+				KR
+
+00-14-C0   (hex)		Symstream Technology Group Ltd
+0014C0     (base 16)		Symstream Technology Group Ltd
+				Level 1, 3 Chester Street
+				Oakleigh  Victoria  3166
+				AU
+
+00-14-C1   (hex)		U.S. Robotics Corporation
+0014C1     (base 16)		U.S. Robotics Corporation
+				935 National Parkway
+				Schaumburg  IL  60173-5157
+				US
+
+00-14-C4   (hex)		Vitelcom Mobile Technology
+0014C4     (base 16)		Vitelcom Mobile Technology
+				PTA, Avda, Juan López Peñalver, nº 7
+				Campanillas.  Malaga.  
+				ES
+
+00-14-EC   (hex)		Acro Telecom
+0014EC     (base 16)		Acro Telecom
+				714 Woolim e-Biz Center 170-5 Guro-dong
+				Guro-Gu  Seoul  152-769
+				KR
+
+00-14-EB   (hex)		AwarePoint Corporation
+0014EB     (base 16)		AwarePoint Corporation
+				8899 University Center Lane
+				San Diego  CA  92122
+				US
+
+00-14-AB   (hex)		Senhai Electronic Technology Co., Ltd.
+0014AB     (base 16)		Senhai Electronic Technology Co., Ltd.
+				Rm.10A. 28/F.SEGPlaza Huaqiangbei Road
+				Shengzhen  Guangdong  518031
+				CN
+
+00-14-B0   (hex)		Naeil Community
+0014B0     (base 16)		Naeil Community
+				#506 AceTwin Tower 1, Guro-Dong
+				Seoul  Guro-Gu  152779
+				KR
+
+00-14-F4   (hex)		DekTec Digital Video B.V.
+0014F4     (base 16)		DekTec Digital Video B.V.
+				Van Riebeeckweg 43A
+				Hilversum  NH  1212AE
+				NL
+
+00-14-F5   (hex)		OSI Security Devices
+0014F5     (base 16)		OSI Security Devices
+				1580 Jayken Way
+				Chula Vista  California  91911
+				US
+
+00-14-8E   (hex)		Tele Power Inc.
+00148E     (base 16)		Tele Power Inc.
+				1-46-15#B1F
+				Nerima-ku  Tokyo  176-0005
+				JP
+
+00-14-8F   (hex)		Protronic (Far East) Ltd.
+00148F     (base 16)		Protronic (Far East) Ltd.
+				Rm. 2504, Nanyang Plaza,
+				Kwun Tong  Kowloon  
+				HK
+
+00-14-8C   (hex)		General Dynamics Mission Systems
+00148C     (base 16)		General Dynamics Mission Systems
+				150 Rustcraft Road
+				Dedham  MA  02026
+				US
+
+00-14-87   (hex)		American Technology Integrators
+001487     (base 16)		American Technology Integrators
+				1358 Rosalia Ave
+				San Jose  CA  95130
+				US
+
+00-14-44   (hex)		Grundfos Holding
+001444     (base 16)		Grundfos Holding
+				Poul Due Jensensvej 7
+				Bjerringbro    DK8850
+				DK
+
+00-14-37   (hex)		GSTeletech Co.,Ltd.
+001437     (base 16)		GSTeletech Co.,Ltd.
+				1385-14, Juan-Dong, Nam-gu
+				  Incheon  402-200
+				KR
+
+00-14-31   (hex)		PDL Electronics Ltd
+001431     (base 16)		PDL Electronics Ltd
+				81 Austin Street
+				Napier  Hawkes Bay  
+				NZ
+
+00-14-4D   (hex)		Intelligent Systems
+00144D     (base 16)		Intelligent Systems
+				11101 Johns Hopkins Road
+				Laurel  MD  20723
+				US
+
+00-14-4A   (hex)		Taiwan Thick-Film Ind. Corp.
+00144A     (base 16)		Taiwan Thick-Film Ind. Corp.
+				NO.126,Wuu Gong 2nd RD,
+				Taipei Hsien    248
+				TW
+
+00-14-45   (hex)		Telefon-Gradnja d.o.o.
+001445     (base 16)		Telefon-Gradnja d.o.o.
+				Plesivicka 3
+				Sveta Nedelja  Zupanija Zagrebacka  10431
+				HR
+
+00-14-68   (hex)		CelPlan International, Inc.
+001468     (base 16)		CelPlan International, Inc.
+				1920 Association Drive
+				Reston  VA  20191
+				US
+
+00-14-7C   (hex)		3Com Ltd
+00147C     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-14-81   (hex)		Multilink Inc
+001481     (base 16)		Multilink Inc
+				580 Ternes Ave
+				Elyria  OH  44035
+				US
+
+00-14-64   (hex)		Cryptosoft
+001464     (base 16)		Cryptosoft
+				Lermontova str, 3
+				  Penza region  440026
+				RU
+
+00-14-5E   (hex)		IBM Corp
+00145E     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-14-58   (hex)		HS Automatic ApS
+001458     (base 16)		HS Automatic ApS
+				Bjerringbrovej 70
+				Rodovre    2610
+				DK
+
+00-14-21   (hex)		Total Wireless Technologies Pte. Ltd.
+001421     (base 16)		Total Wireless Technologies Pte. Ltd.
+				Blk 1003, Bukit Merah Central, #04-18
+				    159836
+				SG
+
+00-14-20   (hex)		G-Links networking company
+001420     (base 16)		G-Links networking company
+				1FL. NO.15-49, MING DER SECOND ROAD,
+				Keelung    206
+				TW
+
+00-14-18   (hex)		C4Line
+001418     (base 16)		C4Line
+				1001 Hyundai Parisian,
+				Yangchun-Gu  Seoul  158-050
+				KR
+
+00-14-1B   (hex)		Cisco Systems, Inc
+00141B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-13-F0   (hex)		Wavefront Semiconductor
+0013F0     (base 16)		Wavefront Semiconductor
+				4746 44th Ave SW
+				Seattle  WA  98116
+				US
+
+00-13-EF   (hex)		Kingjon Digital Technology Co.,Ltd
+0013EF     (base 16)		Kingjon Digital Technology Co.,Ltd
+				Room 827,Huanan Dianli Bulding,No.2050
+				Shenzhen  GuangDong  518031
+				CN
+
+00-13-EB   (hex)		Sysmaster Corporation
+0013EB     (base 16)		Sysmaster Corporation
+				5801 Christie Ave.
+				Emeryville  CA  94608
+				US
+
+00-13-EC   (hex)		Netsnapper Technologies SARL
+0013EC     (base 16)		Netsnapper Technologies SARL
+				2160 Century Park East 1806
+				Los Angeles  CA  90067-2236
+				US
+
+00-14-2B   (hex)		Edata Communication Inc.
+00142B     (base 16)		Edata Communication Inc.
+				2F-1, No. 872, Chung-Cheng Rd
+				  Taipei Hsien  235
+				TW
+
+00-14-2C   (hex)		Koncept International, Inc.
+00142C     (base 16)		Koncept International, Inc.
+				2500 E Foothill Blvd. #407
+				Pasadena  CA  91107
+				US
+
+00-14-24   (hex)		Merry Electrics CO., LTD.
+001424     (base 16)		Merry Electrics CO., LTD.
+				NO.22,23rd ROAD
+				TAICHUNG CITY    40850
+				TW
+
+00-13-D0   (hex)		t+ Medical Ltd
+0013D0     (base 16)		t+ Medical Ltd
+				174E Milton Park
+				Abingdon    OX14 4SE
+				GB
+
+00-13-D2   (hex)		PAGE IBERICA, S.A.
+0013D2     (base 16)		PAGE IBERICA, S.A.
+				AV. DE LA INDUSTRIA, 24
+				TRES CANTOS  MADRID  28760
+				ES
+
+00-13-D1   (hex)		KIRK telecom A/S
+0013D1     (base 16)		KIRK telecom A/S
+				Langmarksvej 34
+				Horsens    8700
+				DK
+
+00-14-0F   (hex)		Federal State Unitary Enterprise Leningrad R&D Institute of
+00140F     (base 16)		Federal State Unitary Enterprise Leningrad R&D Institute of
+				11 Warshawskaya St.
+				  St. Petersburg  196128
+				RU
+
+00-14-07   (hex)		Sperian Protection Instrumentation
+001407     (base 16)		Sperian Protection Instrumentation
+				651 South Main Street
+				Middletown  CT  06457
+				US
+
+00-14-06   (hex)		Go Networks
+001406     (base 16)		Go Networks
+				126 Yigal Alon st.
+				Tel Aviv    67443
+				IL
+
+00-14-0A   (hex)		WEPIO Co., Ltd.
+00140A     (base 16)		WEPIO Co., Ltd.
+				#1125, Opus1, Gurodongcomplex building
+				Seoul    152-050
+				KR
+
+00-13-FA   (hex)		LifeSize Communications, Inc
+0013FA     (base 16)		LifeSize Communications, Inc
+				901 S. Mopac
+				Austin  TX  78746
+				US
+
+00-13-FB   (hex)		RKC INSTRUMENT INC.
+0013FB     (base 16)		RKC INSTRUMENT INC.
+				16-6, Kugahara 5-chome,
+				Ohta-ku  Tokyo  146-8515
+				JP
+
+00-13-DC   (hex)		IBTEK INC.
+0013DC     (base 16)		IBTEK INC.
+				16F, 30, Pei-Ping East Rd.,
+				Taipei    100
+				TW
+
+00-13-BA   (hex)		ReadyLinks Inc
+0013BA     (base 16)		ReadyLinks Inc
+				6595 Edenvale Boulevard
+				Eden Prairie  MN  55346
+				US
+
+00-13-B8   (hex)		RyCo Electronic Systems Limited
+0013B8     (base 16)		RyCo Electronic Systems Limited
+				Unit E, Cartel Business Estate
+				Harlow  Essex  CM20 2TT
+				GB
+
+00-13-B6   (hex)		Sling Media, Inc.
+0013B6     (base 16)		Sling Media, Inc.
+				1840 Gateway Center
+				San Mateo  CA  94404
+				US
+
+00-13-7D   (hex)		Dynalab, Inc.
+00137D     (base 16)		Dynalab, Inc.
+				555 Lancaster Ave.
+				Reynoldsburg  OH  43068
+				US
+
+00-13-83   (hex)		Application Technologies and Engineering Research Laboratory
+001383     (base 16)		Application Technologies and Engineering Research Laboratory
+				Shinjuku 1-chome Bldg.
+				Shinjuku-ku  Tokyo  160-0022
+				JP
+
+00-13-87   (hex)		27M Technologies AB
+001387     (base 16)		27M Technologies AB
+				Diskettgatan 11
+				Linköping     S-583 35
+				SE
+
+00-13-73   (hex)		BLwave Electronics Co., Ltd
+001373     (base 16)		BLwave Electronics Co., Ltd
+				23FGH, Block A,ZhenYe Building , BaoAn Nan Road , LuoHu , Shenzhen , China
+				ShenZhen  GuangDong  518000
+				CN
+
+00-13-66   (hex)		Neturity Technologies Inc.
+001366     (base 16)		Neturity Technologies Inc.
+				830 Stewart Drive
+				Sunnyvale  CA  94085
+				US
+
+00-13-5B   (hex)		PanelLink Cinema, LLC
+00135B     (base 16)		PanelLink Cinema, LLC
+				1070 E Arques Ave
+				Sunnyvale  CA  94085
+				US
+
+00-13-6F   (hex)		PacketMotion, Inc.
+00136F     (base 16)		PacketMotion, Inc.
+				2121 El Camino Real
+				San Mateo  CA  94403
+				US
+
+00-13-68   (hex)		Saab Danmark A/S
+001368     (base 16)		Saab Danmark A/S
+				Alsion 2
+				Soenderborg  DK  6400
+				DK
+
+00-13-AE   (hex)		Radiance Technologies, Inc.
+0013AE     (base 16)		Radiance Technologies, Inc.
+				350 Wynn Dr.
+				Huntsville  Alabama  35805
+				US
+
+00-13-97   (hex)		Oracle Corporation 
+001397     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+00-13-C3   (hex)		Cisco Systems, Inc
+0013C3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-13-BD   (hex)		HYMATOM SA
+0013BD     (base 16)		HYMATOM SA
+				Zone Industrielle
+				VENDARGUES  HERAULT  34740
+				FR
+
+00-13-91   (hex)		OUEN CO.,LTD.
+001391     (base 16)		OUEN CO.,LTD.
+				Gotanda NT Bldg.7F,
+				Shinagawa-ku  Tokyo  141-0022
+				JP
+
+00-13-23   (hex)		Cap Co., Ltd.
+001323     (base 16)		Cap Co., Ltd.
+				11F,684-2,deungchon 3-dong,gangseo-gu
+				Seoul    157-754
+				KR
+
+00-13-14   (hex)		Asiamajor Inc.
+001314     (base 16)		Asiamajor Inc.
+				6F-9, No. 268, Lian-Cheng Rd., Junghe City,
+				Taipei    235
+				TW
+
+00-13-16   (hex)		L-S-B Broadcast Technologies GmbH
+001316     (base 16)		L-S-B Broadcast Technologies GmbH
+				Gustav-Stresemann-Str. 8
+				Bingen  Rheinland-Pfalz  55411
+				DE
+
+00-13-12   (hex)		Amedia Networks Inc.
+001312     (base 16)		Amedia Networks Inc.
+				101 Crawfords Corner Rd
+				Holmdel  NJ  07733
+				US
+
+00-13-36   (hex)		Tianjin 712 Communication Broadcasting co., ltd.
+001336     (base 16)		Tianjin 712 Communication Broadcasting co., ltd.
+				No.185, Xinda Road, Hebei District
+				Tianjin    300140
+				CN
+
+00-13-5E   (hex)		EAB/RWI/K
+00135E     (base 16)		EAB/RWI/K
+				Färögatan 6
+				Stockholm  Kista  164 80
+				SE
+
+00-13-4E   (hex)		Valox Systems, Inc.
+00134E     (base 16)		Valox Systems, Inc.
+				#704, Ace Twin tower 2, 212-30, Guro-3dong, Guro-gu
+				Seoul    152-779
+				KR
+
+00-13-44   (hex)		Fargo Electronics Inc.
+001344     (base 16)		Fargo Electronics Inc.
+				6533 Flying Cloud Drive
+				Eden Prairie  MN  55344
+				US
+
+00-13-48   (hex)		Artila Electronics Co., Ltd.
+001348     (base 16)		Artila Electronics Co., Ltd.
+				2F., No.1, Alley 8, Siwei Lane, Zhongzheng Rd.,
+				Xindian City  Taipei County  231
+				TW
+
+00-12-EF   (hex)		OneAccess SA
+0012EF     (base 16)		OneAccess SA
+				28 rue de la Redoute
+				Fontenay aux Roses    92260
+				FR
+
+00-12-E9   (hex)		Abbey Systems Ltd
+0012E9     (base 16)		Abbey Systems Ltd
+				Level 4, 220 Willis St
+				Wellington    6030
+				NZ
+
+00-13-00   (hex)		IT-FACTORY, INC.
+001300     (base 16)		IT-FACTORY, INC.
+				1-16-26 TAKAGI MINAMI-KU
+				FUKUOKA-SHI  FUKUOKA-KEN  815-0004
+				JP
+
+00-13-22   (hex)		DAQ Electronics, Inc.
+001322     (base 16)		DAQ Electronics, Inc.
+				262B Old New Brunswick Road
+				Piscataway  NJ  08854
+				US
+
+00-12-D5   (hex)		Motion Reality Inc.
+0012D5     (base 16)		Motion Reality Inc.
+				200 North Cobb Parkway
+				Marietta  GA  30062
+				US
+
+00-12-D8   (hex)		International Games System Co., Ltd.
+0012D8     (base 16)		International Games System Co., Ltd.
+				No.130, Wu-Gung Rd., Wu-Gu Industrial Park,
+				Taipei    248
+				TW
+
+00-12-9A   (hex)		IRT Electronics Pty Ltd
+00129A     (base 16)		IRT Electronics Pty Ltd
+				26 Hotham Parade
+				Artarmon  NSW  2064
+				AU
+
+00-12-8D   (hex)		STB Datenservice GmbH
+00128D     (base 16)		STB Datenservice GmbH
+				Weinsbergstraße 190
+				Köln  NRW  50825
+				DE
+
+00-12-DB   (hex)		ZIEHL industrie-elektronik GmbH + Co KG
+0012DB     (base 16)		ZIEHL industrie-elektronik GmbH + Co KG
+				Daimlerstraße 13
+				Schwäbisch Hall    74523
+				DE
+
+00-12-D6   (hex)		Jiangsu Yitong High-Tech Co.,Ltd
+0012D6     (base 16)		Jiangsu Yitong High-Tech Co.,Ltd
+				No 216 Huanghe Road
+				Changshu  Jiangsu  215500
+				CN
+
+00-12-DA   (hex)		Cisco Systems, Inc
+0012DA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-12-D3   (hex)		Zetta Systems, Inc.
+0012D3     (base 16)		Zetta Systems, Inc.
+				17311 135th AVE NE
+				Woodinville  WA  98072
+				US
+
+00-12-A2   (hex)		VITA
+0012A2     (base 16)		VITA
+				PO Box 19658
+				Fountain Hills  AZ  85269
+				US
+
+00-12-A5   (hex)		Dolphin Interconnect Solutions AS
+0012A5     (base 16)		Dolphin Interconnect Solutions AS
+				NILS Hansens Vei 13
+				Oslo    0667
+				NO
+
+00-12-A8   (hex)		intec GmbH
+0012A8     (base 16)		intec GmbH
+				Rahmedestraße 90
+				Luedenscheid  NRW  58507
+				DE
+
+00-12-9E   (hex)		Surf Communications Inc.
+00129E     (base 16)		Surf Communications Inc.
+				Room 313, 3F, Bldg.52, No. 195, Chung Hsing Rd., Sec 4, Chutung, HsinChu, Taiwan
+				HsinChu    310
+				TW
+
+00-12-BA   (hex)		FSI Systems, Inc.
+0012BA     (base 16)		FSI Systems, Inc.
+				5847 County Road 41
+				Farmington  NY  14425
+				US
+
+00-12-B2   (hex)		AVOLITES LTD.
+0012B2     (base 16)		AVOLITES LTD.
+				184 PARK AVENUE
+				LONDON    NW10 7XL
+				GB
+
+00-12-AE   (hex)		HLS HARD-LINE Solutions Inc.
+0012AE     (base 16)		HLS HARD-LINE Solutions Inc.
+				53 Main Street
+				Dowling  Ontario  P0M 1R0
+				CA
+
+00-12-AF   (hex)		ELPRO Technologies
+0012AF     (base 16)		ELPRO Technologies
+				9 / 12 Billabong St.
+				Stafford  Queensland  4053
+				AU
+
+00-12-E6   (hex)		SPECTEC COMPUTER CO., LTD.
+0012E6     (base 16)		SPECTEC COMPUTER CO., LTD.
+				6F., No. 92, Nanking E. Rd. Sec. 5,
+				Taipei    105
+				TW
+
+00-12-36   (hex)		ConSentry Networks
+001236     (base 16)		ConSentry Networks
+				1690 McCandless Dr
+				Milipitas  CA  95035
+				US
+
+00-12-35   (hex)		Andrew Corporation
+001235     (base 16)		Andrew Corporation
+				2601 Telecom Pkwy
+				Richardson  TX  75082
+				US
+
+00-12-45   (hex)		Zellweger Analytics, Inc.
+001245     (base 16)		Zellweger Analytics, Inc.
+				405 Barclay Blvd.
+				Lincolnshire  Illinois  60069
+				US
+
+00-12-42   (hex)		Millennial Net
+001242     (base 16)		Millennial Net
+				 285 Billerica Road
+				Chelmsford  MA  01803
+				US
+
+00-12-41   (hex)		a2i marketing center
+001241     (base 16)		a2i marketing center
+				1024-4  Duksan Bldg Bangbaedong Seochogu Seoul Korea
+				SEOUL    137-060
+				KR
+
+00-12-3B   (hex)		KeRo Systems ApS
+00123B     (base 16)		KeRo Systems ApS
+				Allikevej 3
+				Hørsholm    2970
+				DK
+
+00-12-87   (hex)		Digital Everywhere Unterhaltungselektronik GmbH
+001287     (base 16)		Digital Everywhere Unterhaltungselektronik GmbH
+				Maria Gailer Strasse 16
+				Villach  Kärnten  9500
+				AT
+
+00-12-82   (hex)		Qovia
+001282     (base 16)		Qovia
+				7470 New Technology Way
+				Frederick  MD  21703
+				US
+
+00-12-85   (hex)		Gizmondo Europe Ltd
+001285     (base 16)		Gizmondo Europe Ltd
+				1 Meadow Gate Avenue
+				Farnborough  Hampshire  GU14 6FG
+				GB
+
+00-12-77   (hex)		Korenix Technologies Co., Ltd.
+001277     (base 16)		Korenix Technologies Co., Ltd.
+				11F-1, No. 108, MinQuan Rd.
+				Xindian City  Taipei  231
+				TW
+
+00-12-6D   (hex)		University of California, Berkeley
+00126D     (base 16)		University of California, Berkeley
+				EECS Department
+				Berkeley  CA  94720-1776
+				US
+
+00-12-67   (hex)		Panasonic Corporation
+001267     (base 16)		Panasonic Corporation
+				2460-1, Uegawa-Cho
+				Matsusaka-City  Mie  571-8506
+				JP
+
+00-12-65   (hex)		Enerdyne Technologies, Inc.
+001265     (base 16)		Enerdyne Technologies, Inc.
+				1935 Cordell Court
+				El Cajon  CA  92020
+				US
+
+00-12-57   (hex)		LeapComm Communication Technologies Inc.
+001257     (base 16)		LeapComm Communication Technologies Inc.
+				RM1804-05 South Tower Hong Kong Plaza, No.283 Huaihai Zhong Road
+				Shanghai    200021
+				CN
+
+00-12-51   (hex)		SILINK
+001251     (base 16)		SILINK
+				13 RUE POMEYS
+				LE TAILLAN    33320
+				FR
+
+00-12-8E   (hex)		Q-Free ASA
+00128E     (base 16)		Q-Free ASA
+				Th. Owesensgt. 35c
+				Trondheim    7443
+				NO
+
+00-12-92   (hex)		Griffin Technology
+001292     (base 16)		Griffin Technology
+				1930 Air Lane Drive
+				Nashville  TN  37210
+				US
+
+00-11-F3   (hex)		NeoMedia Europe AG
+0011F3     (base 16)		NeoMedia Europe AG
+				Jens-Otto-Krag-Straße 11
+				Würselen    52146
+				DE
+
+00-11-E9   (hex)		STARNEX CO., LTD.
+0011E9     (base 16)		STARNEX CO., LTD.
+				4th Floor, C&C Bldg, 228-2
+				Kwangjin-gu  Seoul  143-200
+				KR
+
+00-11-EC   (hex)		AVIX INC.
+0011EC     (base 16)		AVIX INC.
+				1-1, Fukuura, Kanazawa-ku
+				Yokohama-shi  Kanagawa  236-0004
+				JP
+
+00-11-E7   (hex)		WORLDSAT - Texas de France
+0011E7     (base 16)		WORLDSAT - Texas de France
+				220, rue Gustave Eiffel
+				Aix en Provence  Bouches du Rhone  13854
+				FR
+
+00-12-02   (hex)		Decrane Aerospace - Audio International Inc.
+001202     (base 16)		Decrane Aerospace - Audio International Inc.
+				7300 Industry Drive
+				North Little Rock  AR  72117
+				US
+
+00-11-FE   (hex)		Keiyo System Research, Inc.
+0011FE     (base 16)		Keiyo System Research, Inc.
+				Hamada park Bldg. 6F
+				Chiba-city  Chiba-pref  260-0028
+				JP
+
+00-11-FD   (hex)		KORG INC.
+0011FD     (base 16)		KORG INC.
+				4015-2, Yanokuchi
+				Inagi-City  TOKYO  206-0812
+				JP
+
+00-11-FA   (hex)		Rane Corporation
+0011FA     (base 16)		Rane Corporation
+				10802 47th Avenue West
+				Mukilteo  WA  98275-5098
+				US
+
+00-11-CE   (hex)		Ubisense Limited
+0011CE     (base 16)		Ubisense Limited
+				St. Andrews House
+				Chesterton  Cambridge  CB4 1DL
+				GB
+
+00-11-D0   (hex)		Tandberg Data ASA
+0011D0     (base 16)		Tandberg Data ASA
+				Kjelsåsveien 161
+				Oslo    0411
+				NO
+
+00-11-C3   (hex)		Transceiving System Technology Corporation
+0011C3     (base 16)		Transceiving System Technology Corporation
+				NO.85,Sec.2,Gongdaowu Rd.,
+				Hsinchu    300
+				TW
+
+00-11-C2   (hex)		United Fiber Optic Communication
+0011C2     (base 16)		United Fiber Optic Communication
+				13-1,NO.700,Jungjeng RD,Junghe City
+				Junghe City  Taipei  235
+				TW
+
+00-12-28   (hex)		Data Ltd.
+001228     (base 16)		Data Ltd.
+				J. Hagaru 9
+				Bratislava    830 05
+				SK
+
+00-12-1F   (hex)		Harding Instruments
+00121F     (base 16)		Harding Instruments
+				9431-41Ave
+				Edmonton  AB  T6E 5X7
+				CA
+
+00-12-20   (hex)		Cadco Systems
+001220     (base 16)		Cadco Systems
+				2363 Merritt Dr
+				Garland  Texas  75041
+				US
+
+00-12-29   (hex)		BroadEasy Technologies Co.,Ltd
+001229     (base 16)		BroadEasy Technologies Co.,Ltd
+				24th Floor,Tower A,JinShan Mansion,
+				Nanjing  Jiangsu  210009
+				CN
+
+00-12-26   (hex)		Japan Direx Corporation
+001226     (base 16)		Japan Direx Corporation
+				Kyocera Harajuku Bldg.
+				Shibuya-ku  Tokyo  150-0001
+				JP
+
+00-12-22   (hex)		Skardin (UK) Ltd
+001222     (base 16)		Skardin (UK) Ltd
+				No. 5 Greenway (RO24)
+				Harlow  Essex  CM19 5QB
+				GB
+
+00-11-E8   (hex)		Tixi.Com
+0011E8     (base 16)		Tixi.Com
+				Karmeliterweg 114
+				Berlin    13465
+				DE
+
+00-11-E0   (hex)		U-MEDIA Communications, Inc.
+0011E0     (base 16)		U-MEDIA Communications, Inc.
+				 9F, No.1 Jin-Shan St.
+				Hsinchu    300
+				TW
+
+00-12-0D   (hex)		Advanced Telecommunication Technologies, Inc.
+00120D     (base 16)		Advanced Telecommunication Technologies, Inc.
+				10390 Wilshire Boulevard
+				Los Angeles  California  90024
+				US
+
+00-12-0E   (hex)		AboCom
+00120E     (base 16)		AboCom
+				1F , No. 21, Yanfa 2nd Rd., SBIP
+				Hsinchu City    300
+				TW
+
+00-11-F2   (hex)		Institute of Network Technologies
+0011F2     (base 16)		Institute of Network Technologies
+				17-th Line Vasilevsky Ostrov, 54-1
+				St.Petersburg    199178
+				RU
+
+00-12-10   (hex)		WideRay Corp
+001210     (base 16)		WideRay Corp
+				25 Kearny Street
+				San Francisco  CA  94108
+				US
+
+00-11-A4   (hex)		JStream Technologies Inc.
+0011A4     (base 16)		JStream Technologies Inc.
+				Bldg.53, R405, 195 Sec.4, Chung Hsing Rd.
+				Chutung,   Hsinchu  310
+				TW
+
+00-11-98   (hex)		Prism Media Products Limited
+001198     (base 16)		Prism Media Products Limited
+				William James House
+				Cambridge  Cambridgeshire  CB4 0WX
+				GB
+
+00-11-97   (hex)		Monitoring Technologies Limited
+001197     (base 16)		Monitoring Technologies Limited
+				14 Attenburys Park Estate
+				Timperley  Cheshire  WA14 5QE
+				GB
+
+00-11-99   (hex)		2wcom Systems GmbH
+001199     (base 16)		2wcom Systems GmbH
+				Am Sophienhof 8
+				Flensburg    24941
+				DE
+
+00-11-A7   (hex)		Infilco Degremont Inc.
+0011A7     (base 16)		Infilco Degremont Inc.
+				8007 Discovery Dr.
+				Richmond  Virginia  23255-1390
+				US
+
+00-11-A9   (hex)		MOIMSTONE Co., LTD
+0011A9     (base 16)		MOIMSTONE Co., LTD
+				7th Floor JoongPyung Building 64-1
+				Seoul    137-900
+				KR
+
+00-11-A3   (hex)		LanReady Technologies Inc.
+0011A3     (base 16)		LanReady Technologies Inc.
+				4F, No. 337, SinHu 2nd Road., NeiHu District
+				  Taipei  114
+				TW
+
+00-11-76   (hex)		Intellambda Systems, Inc.
+001176     (base 16)		Intellambda Systems, Inc.
+				48501 Warm Springs Blvd, #107
+				Fremont  California  94539
+				US
+
+00-11-77   (hex)		Coaxial Networks, Inc.
+001177     (base 16)		Coaxial Networks, Inc.
+				4633 Old Ironsides Dr
+				Santa Clara  CA  95054
+				US
+
+00-11-70   (hex)		GSC SRL
+001170     (base 16)		GSC SRL
+				VIA PER VIMERCATE
+				USMATE VELATE  MILANO  20040
+				IT
+
+00-11-6B   (hex)		Digital Data Communications Asia Co.,Ltd
+00116B     (base 16)		Digital Data Communications Asia Co.,Ltd
+				8F,No.41,Lane 221,Kang-Chien RD.,Nei-Hu Dis.,
+				Taipei City    114
+				TW
+
+00-11-69   (hex)		EMS Satcom
+001169     (base 16)		EMS Satcom
+				Green Lane
+				Tewkesbury  Gloucestershire  GL20 8HD
+				GB
+
+00-11-62   (hex)		STAR MICRONICS CO.,LTD.
+001162     (base 16)		STAR MICRONICS CO.,LTD.
+				536 Shimizunanatsushinya
+				Shizuoka    424-0066
+				JP
+
+00-11-81   (hex)		InterEnergy Co.Ltd,
+001181     (base 16)		InterEnergy Co.Ltd,
+				3F Shinyokohama Bosei Bldg.
+				Yokohama city  Kanagawa  222-0033
+				JP
+
+00-11-94   (hex)		Chi Mei Communication Systems, Inc.
+001194     (base 16)		Chi Mei Communication Systems, Inc.
+				11F, No.39, Chung Hua RD. Sec 1
+				Taipei    100
+				TW
+
+00-11-BF   (hex)		AESYS S.p.A.
+0011BF     (base 16)		AESYS S.p.A.
+				Via Artigiani, 41
+				Brusaporto  Bergamo  24060
+				IT
+
+00-11-B7   (hex)		Octalix B.V.
+0011B7     (base 16)		Octalix B.V.
+				Molensteijn 60
+				De Meern    NL-3454 PT
+				NL
+
+00-11-B9   (hex)		Inner Range Pty. Ltd.
+0011B9     (base 16)		Inner Range Pty. Ltd.
+				1 Millenium Court
+				Knoxfield  Victoria  3180
+				AU
+
+00-11-09   (hex)		Micro-Star International
+001109     (base 16)		Micro-Star International
+				No 69, Li-De Street, Jung-He City,
+				Taipei    
+				TW
+
+00-11-04   (hex)		TELEXY
+001104     (base 16)		TELEXY
+				1116, HYUNDAI 41 TOWER, 917-9
+				SEOUL    158-723
+				KR
+
+00-11-61   (hex)		NetStreams, LLC
+001161     (base 16)		NetStreams, LLC
+				3600 W. Parmer Lane
+				Austin  TX  78727
+				US
+
+00-11-56   (hex)		Pharos Systems NZ
+001156     (base 16)		Pharos Systems NZ
+				Level 3, 123 Carlton Gore Road
+				Auckland  NZ  1001
+				NZ
+
+00-11-59   (hex)		MATISSE NETWORKS INC
+001159     (base 16)		MATISSE NETWORKS INC
+				339 N BERNARDO AVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-11-5C   (hex)		Cisco Systems, Inc
+00115C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-5D   (hex)		Cisco Systems, Inc
+00115D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-26   (hex)		Venstar Inc.
+001126     (base 16)		Venstar Inc.
+				9250 Owensmouth Ave.
+				Chatsworth  CA  91311
+				US
+
+00-11-2E   (hex)		CEICOM
+00112E     (base 16)		CEICOM
+				17 rue Gaston Evrard
+				Toulouse Cedex 1    31094
+				FR
+
+00-11-22   (hex)		CIMSYS Inc
+001122     (base 16)		CIMSYS Inc
+				#301,Sinsung-clean BLDG,140, Nongseo-Ri,Kiheung-Eup
+				Yongin-City  Kyunggi-Do  449-711
+				KR
+
+00-11-17   (hex)		CESNET
+001117     (base 16)		CESNET
+				Zikova 4
+				Praha 6    160 00
+				CZ
+
+00-11-16   (hex)		COTEAU VERT CO., LTD.
+001116     (base 16)		COTEAU VERT CO., LTD.
+				3-3-19 KACHIDOKI
+				CHUO-KU  TOKYO  104-0054
+				JP
+
+00-11-10   (hex)		Maxanna Technology Co., Ltd.
+001110     (base 16)		Maxanna Technology Co., Ltd.
+				Room201, No.42-3, Luyuan Road
+				Guangzhou    510095
+				CN
+
+00-11-3B   (hex)		Micronet Communications Inc.
+00113B     (base 16)		Micronet Communications Inc.
+				12F-1, No. 100, Min-Chuan Road
+				Hsin-Tien  Taipei  231
+				TW
+
+00-11-3D   (hex)		KN SOLTEC CO.,LTD.
+00113D     (base 16)		KN SOLTEC CO.,LTD.
+				98B-5L NAMDONG INDUSTRIAL COMPLEX #662-4 GOJAN-DONG
+				NAMDONG-GU  INCHEON  405-818
+				KR
+
+00-11-34   (hex)		MediaCell, Inc.
+001134     (base 16)		MediaCell, Inc.
+				600 17th St
+				Denver  CO  80202
+				US
+
+00-11-35   (hex)		Grandeye Ltd
+001135     (base 16)		Grandeye Ltd
+				6 Huxley Road
+				Guildford  Surrey  GU2 7RE
+				GB
+
+00-11-21   (hex)		Cisco Systems, Inc
+001121     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-49   (hex)		Proliphix Inc.
+001149     (base 16)		Proliphix Inc.
+				3 Lan Drive
+				Westford  MA  01886
+				US
+
+00-0F-C0   (hex)		DELCOMp
+000FC0     (base 16)		DELCOMp
+				Technologielaan 3
+				Leuven    B-3000
+				BE
+
+00-0F-BA   (hex)		Tevebox AB
+000FBA     (base 16)		Tevebox AB
+				Berglinds vag 13
+				warmdo    S-13900
+				SE
+
+00-0F-B8   (hex)		CallURL Inc.
+000FB8     (base 16)		CallURL Inc.
+				3F-11, No. 508 Sec.  5, Chung-Hsiao E. Rd.
+				Taipei    110
+				TW
+
+00-0F-B7   (hex)		Cavium
+000FB7     (base 16)		Cavium
+				2315 N First Street
+				San Jose  CA  95131
+				US
+
+00-0F-D3   (hex)		Digium
+000FD3     (base 16)		Digium
+				445 Jan Davis Drive NW
+				Huntsville  AL  35806
+				US
+
+00-0F-D1   (hex)		Applied Wireless Identifications Group, Inc.
+000FD1     (base 16)		Applied Wireless Identifications Group, Inc.
+				382 Route 59, Section 292
+				Monsey  New York  10952
+				US
+
+00-0F-C1   (hex)		WAVE Corporation
+000FC1     (base 16)		WAVE Corporation
+				3-25-5 Chidori
+				Ohta-ku  Tokyo  146-0083
+				JP
+
+00-11-00   (hex)		Schneider Electric
+001100     (base 16)		Schneider Electric
+				5460 Pottsville Pike
+				Leesport  PA  19533
+				US
+
+00-0F-FA   (hex)		Optinel Systems, Inc.
+000FFA     (base 16)		Optinel Systems, Inc.
+				6835 Deerpath Rd.
+				Elkridge  MD  21075
+				US
+
+00-0F-FD   (hex)		Glorytek Network Inc.
+000FFD     (base 16)		Glorytek Network Inc.
+				5F.-3, No.16, Sec. 1, Dongda Rd.,
+				Hsinchu    300
+				TW
+
+00-0F-F9   (hex)		Valcretec, Inc.
+000FF9     (base 16)		Valcretec, Inc.
+				Byucksan Digital Valley II 15F
+				Seoul    153-803
+				KR
+
+00-0F-C4   (hex)		NST co.,LTD.
+000FC4     (base 16)		NST co.,LTD.
+				4-3-1 SHINMIYAKODA
+				HAMAMATSU  SHIZUOKA  431-2103
+				JP
+
+00-0F-C9   (hex)		Allnet GmbH
+000FC9     (base 16)		Allnet GmbH
+				Maistraße 2
+				Germering  Bavaria  82110
+				DE
+
+00-0F-C6   (hex)		Eurocom Industries A/S
+000FC6     (base 16)		Eurocom Industries A/S
+				porsvej 2
+				Aalborg  NV  DK-9200
+				DK
+
+00-0F-BE   (hex)		e-w/you Inc.
+000FBE     (base 16)		e-w/you Inc.
+				3F FINE Bldg. 6-17-17
+				Shinagawa-ku,  Tokyo  140-0013
+				JP
+
+00-0F-A9   (hex)		PC Fabrik
+000FA9     (base 16)		PC Fabrik
+				Buchenstrasse 13-15
+				Dresden  Sachsen  01097
+				DE
+
+00-0F-9A   (hex)		Synchrony, Inc.
+000F9A     (base 16)		Synchrony, Inc.
+				6410 Commonwealth Drive
+				Roanoke  VA  24018
+				US
+
+00-0F-EA   (hex)		Giga-Byte Technology Co.,LTD.
+000FEA     (base 16)		Giga-Byte Technology Co.,LTD.
+				No.215,Nan-Ping Road,Ping-Jen City,
+				Ping-Jen  Taoyuan  324
+				TW
+
+00-0F-F7   (hex)		Cisco Systems, Inc
+000FF7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0F-D8   (hex)		Force, Inc.
+000FD8     (base 16)		Force, Inc.
+				825 Park Street
+				Christiansburg  Va  24073
+				US
+
+00-0F-8D   (hex)		FAST TV-Server AG
+000F8D     (base 16)		FAST TV-Server AG
+				Ruedesheimerstraße 11-13
+				Munich  Germany  80686
+				DE
+
+00-0F-85   (hex)		ADDO-Japan Corporation
+000F85     (base 16)		ADDO-Japan Corporation
+				Shin Edobashi Bldg. 4F, 8-6 Nihombashi Kobuna-cho
+				Chuo-ku  Tokyo  103-0024
+				JP
+
+00-0F-82   (hex)		Mortara Instrument, Inc.
+000F82     (base 16)		Mortara Instrument, Inc.
+				7865 N. 86th St.
+				Milwaukee  WI  53224
+				US
+
+00-0F-49   (hex)		Northover Solutions Limited
+000F49     (base 16)		Northover Solutions Limited
+				Heath Cottage
+				Larling  Norfolk  NR16 2RB
+				GB
+
+00-0F-4B   (hex)		Oracle Corporation
+000F4B     (base 16)		Oracle Corporation
+				900 Chelmsford Street
+				Lowell  MA  01851
+				US
+
+00-0F-44   (hex)		Tivella Inc.
+000F44     (base 16)		Tivella Inc.
+				795 Main Street
+				Half Moon Bay  CA  94019
+				US
+
+00-0F-4A   (hex)		Kyushu-kyohan co.,ltd
+000F4A     (base 16)		Kyushu-kyohan co.,ltd
+				2-6-3,Koganemachi
+				Kitakyushu-city  Fukuoka  802-0071
+				JP
+
+00-0F-81   (hex)		PAL Pacific Inc.
+000F81     (base 16)		PAL Pacific Inc.
+				79405 Highway 111
+				La Quinta  CA  92253
+				US
+
+00-0F-7F   (hex)		UBSTORAGE Co.,Ltd.
+000F7F     (base 16)		UBSTORAGE Co.,Ltd.
+				#A-108, Seoul_Sanup_Jiwon_Center
+				Ganseo-gu  Seoul  157-840
+				KR
+
+00-0F-95   (hex)		ELECOM Co.,LTD Laneed Division
+000F95     (base 16)		ELECOM Co.,LTD Laneed Division
+				8F Kanda-Muromachi Bldg.
+				Chiyoda-Ku, Tokyo.    101-0052
+				JP
+
+00-0F-55   (hex)		Datawire Communication Networks Inc.
+000F55     (base 16)		Datawire Communication Networks Inc.
+				10 Carlson Court, Suite 300
+				Toronto  Ontario  M9W 6L2
+				CA
+
+00-0F-56   (hex)		Continuum Photonics Inc
+000F56     (base 16)		Continuum Photonics Inc
+				5 Fortune Drive
+				Billerica  MA  01821
+				US
+
+00-0F-60   (hex)		Lifetron Co.,Ltd
+000F60     (base 16)		Lifetron Co.,Ltd
+				6-7,Tenjinnishimachi
+				Osaka  Osaka Prefecture  530-0045
+				JP
+
+00-0F-5B   (hex)		Delta Information Systems, Inc.
+000F5B     (base 16)		Delta Information Systems, Inc.
+				300 Welsh Road, Bldg. 3
+				Horsham  PA  19044-2273
+				US
+
+00-0F-8A   (hex)		WideView
+000F8A     (base 16)		WideView
+				F. 6, No. 8, Wu-chuan 2 Rd, Hsin-Chuang City
+				Taipei Country    242
+				TW
+
+00-0F-90   (hex)		Cisco Systems, Inc
+000F90     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0F-77   (hex)		DENTUM CO.,LTD
+000F77     (base 16)		DENTUM CO.,LTD
+				Wookyung B/D 602 #678-6
+				Seoul    157-030
+				KR
+
+00-0F-7B   (hex)		Arce Sistemas, S.A.
+000F7B     (base 16)		Arce Sistemas, S.A.
+				C/Padre Larramendi, 3 - 2º
+				Bilbao  Vizcaya  48012
+				ES
+
+00-0F-68   (hex)		Vavic Network Technology, Inc.
+000F68     (base 16)		Vavic Network Technology, Inc.
+				1st Floor, 15 Jiangong Road
+				Guangzhou  Guangdong  510665
+				CN
+
+00-0E-E2   (hex)		Custom Engineering
+000EE2     (base 16)		Custom Engineering
+				Via Beretttine 2/b
+				Fontevivo  Parma  43010
+				IT
+
+00-0E-E3   (hex)		Chiyu Technology Co.,Ltd
+000EE3     (base 16)		Chiyu Technology Co.,Ltd
+				No. 28, Renai Road, Chiayi, 600
+				Chiayi    600
+				TW
+
+00-0E-E5   (hex)		bitWallet, Inc.
+000EE5     (base 16)		bitWallet, Inc.
+				Gate City Ohsaki West Tower 18F, 1-11-1 Osaki, Shinagawa-ku
+				Tokyo    1410032
+				JP
+
+00-0E-DA   (hex)		C-TECH UNITED CORP.
+000EDA     (base 16)		C-TECH UNITED CORP.
+				5F, No 665, CHUNG CHEN RD.
+				HSIN CHUANG CITT  of TAIPEI HSIEN    242
+				TW
+
+00-0E-CF   (hex)		PROFIBUS Nutzerorganisation e.V.
+000ECF     (base 16)		PROFIBUS Nutzerorganisation e.V.
+				Haid-und-Neu-Straße 7
+				Karlsruhe  Baden-Württemberg  76131
+				DE
+
+00-0E-EB   (hex)		Sandmartin(zhong shan)Electronics Co.,Ltd
+000EEB     (base 16)		Sandmartin(zhong shan)Electronics Co.,Ltd
+				3st Industrial Area,Tan Zhou,
+				Zhongshan  Guangdong  528467
+				CN
+
+00-0E-EC   (hex)		Orban
+000EEC     (base 16)		Orban
+				1525 Alvarado St.
+				San Leandro  CA  94577
+				US
+
+00-0E-EF   (hex)		Private
+000EEF     (base 16)		Private
+
+00-0E-F1   (hex)		EZQUEST INC.
+000EF1     (base 16)		EZQUEST INC.
+				23311 E. LA PALMA AVE.
+				YORBA LINDA  CA  92887
+				US
+
+00-0E-E7   (hex)		AAC ELECTRONICS CORP.
+000EE7     (base 16)		AAC ELECTRONICS CORP.
+				FLOOR 7,SIXTH BUILDING OF NAIANYOU TNAN INDUSTRIAL AREA,NANSHAN DISTRICT
+				SHENZHEN  PROVINCE GUANGDONG  518054
+				CN
+
+00-0F-1C   (hex)		DigitAll World Co., Ltd
+000F1C     (base 16)		DigitAll World Co., Ltd
+				Sejin Bld 2F, 689 ilwon2-dong,
+				gangnam-gu  Seoul  135-946
+				KR
+
+00-0F-1A   (hex)		Gaming Support B.V.
+000F1A     (base 16)		Gaming Support B.V.
+				Industrie weg 29
+				  Rotterdam  3044 AS
+				NL
+
+00-0F-0A   (hex)		Clear Edge Networks
+000F0A     (base 16)		Clear Edge Networks
+				11250 El Camino Real
+				San Diego  CA  92130
+				US
+
+00-0F-02   (hex)		Digicube Technology Co., Ltd
+000F02     (base 16)		Digicube Technology Co., Ltd
+				8F,No. 51, Lane  35, Jihu Rd.,
+				Taipei    114
+				TW
+
+00-0F-2F   (hex)		W-LINX TECHNOLOGY CO., LTD.
+000F2F     (base 16)		W-LINX TECHNOLOGY CO., LTD.
+				 2F,ELLEN L. SKELTON BUILDING,FISHER LANE ROAD
+				TORTOLA    
+				VG
+
+00-0F-2D   (hex)		CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.
+000F2D     (base 16)		CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.
+				NO. 25, Wen-Te Rd., Lo-Shan Village
+				Kwei Shan Hsiang  Taoyuan Hsien  330
+				TW
+
+00-0E-F7   (hex)		Vulcan Portals Inc
+000EF7     (base 16)		Vulcan Portals Inc
+				505 5th Ave South, Suite 900
+				Seattle  WA  98104
+				US
+
+00-0E-F0   (hex)		Festo AG & Co. KG
+000EF0     (base 16)		Festo AG & Co. KG
+				Ruiterstraße 82
+				Esslingen    73734
+				DE
+
+00-0E-E9   (hex)		WayTech Development, Inc.
+000EE9     (base 16)		WayTech Development, Inc.
+				11Floor, 253 Min-Sheng Road
+				HsinChu    300
+				TW
+
+00-0F-40   (hex)		Optical Internetworking Forum
+000F40     (base 16)		Optical Internetworking Forum
+				48377 Fremont Blvd
+				Fremont  CA  94538
+				US
+
+00-0F-33   (hex)		DUALi Inc.
+000F33     (base 16)		DUALi Inc.
+				#505 Samsung Techno Park Bldg 471
+				Suwon  Gyeonggi-do  442-824
+				KR
+
+00-0F-05   (hex)		3B SYSTEM INC.
+000F05     (base 16)		3B SYSTEM INC.
+				1727, SANKYUK2-DONG, BUK-GU
+				DAEGU    702-845
+				KR
+
+00-0E-C9   (hex)		YOKO Technology Corp.
+000EC9     (base 16)		YOKO Technology Corp.
+				6F, No.10, Lane16, Sec2, Sze-Chuan Rd., Pan-
+				Taipei    886
+				TW
+
+00-0E-BD   (hex)		Burdick, a Quinton Compny
+000EBD     (base 16)		Burdick, a Quinton Compny
+				500 Burdick Parkway
+				Deerfield  WI  53531
+				US
+
+00-0E-B9   (hex)		HASHIMOTO Electronics Industry Co.,Ltd.
+000EB9     (base 16)		HASHIMOTO Electronics Industry Co.,Ltd.
+				3866-12 Takasu-cho
+				Matsusaka  Mie  515-0104
+				JP
+
+00-0E-B2   (hex)		Micro-Research Finland Oy
+000EB2     (base 16)		Micro-Research Finland Oy
+				Välitalontie 83 C
+				Helsinki    FIN-00660
+				FI
+
+00-0E-D0   (hex)		Privaris, Inc.
+000ED0     (base 16)		Privaris, Inc.
+				675 Peter Jefferson Pkwy, Ste 150
+				Charlottesville  Virginia  22911
+				US
+
+00-0E-C3   (hex)		Logic Controls, Inc.
+000EC3     (base 16)		Logic Controls, Inc.
+				355 Denton Avenue
+				New Hyde Park  NY  11040
+				US
+
+00-0E-C4   (hex)		Iskra Transmission d.d.
+000EC4     (base 16)		Iskra Transmission d.d.
+				Stegne 11
+				Ljubljana    1000
+				SI
+
+00-0E-C1   (hex)		MYNAH Technologies
+000EC1     (base 16)		MYNAH Technologies
+				504 Trade Center Blvd
+				Chesterfield  MO  63005
+				US
+
+00-0E-89   (hex)		CLEMATIC
+000E89     (base 16)		CLEMATIC
+				101 rue Pierre SEMARD
+				CHATILLON  R.P.  92320
+				US
+
+00-0E-79   (hex)		Ample Communications Inc.
+000E79     (base 16)		Ample Communications Inc.
+				4034 Clipper Ct.
+				Fremont  CA  94538
+				US
+
+00-0E-A1   (hex)		Formosa Teletek Corporation
+000EA1     (base 16)		Formosa Teletek Corporation
+				358,Huaya 2nd Rd.
+				Taoyuan    333
+				TW
+
+00-0E-98   (hex)		HME Clear-Com LTD.
+000E98     (base 16)		HME Clear-Com LTD.
+				7400 Beach Drive
+				Cambridgeshire    CB25 9TP
+				GB
+
+00-0E-99   (hex)		Spectrum Digital, Inc
+000E99     (base 16)		Spectrum Digital, Inc
+				12502 Exchange Drive, Suite 440
+				Stafford  TX  77477
+				US
+
+00-0E-95   (hex)		Fujiya Denki Seisakusho Co.,Ltd.
+000E95     (base 16)		Fujiya Denki Seisakusho Co.,Ltd.
+				8F Fukushima BLDG. 6-25-11,Nishi-Gotanda
+				Shinagawa-Ku  Tokyo  141-0031
+				JP
+
+00-0E-97   (hex)		Ultracker Technology CO., Inc
+000E97     (base 16)		Ultracker Technology CO., Inc
+				14F-1, No. 888, Jingguo Road, Taoyuan City,
+				Taoyuan    330
+				TW
+
+00-0E-A7   (hex)		Endace Technology
+000EA7     (base 16)		Endace Technology
+				85 Alexandra Street
+				Hamilton    3204
+				NZ
+
+00-0E-6F   (hex)		IRIS Corporation Berhad
+000E6F     (base 16)		IRIS Corporation Berhad
+				IRIS Smart Technology Complex
+				Kuala Lumpur  WP  57000
+				MY
+
+00-0E-B5   (hex)		Ecastle Electronics Co., Ltd.
+000EB5     (base 16)		Ecastle Electronics Co., Ltd.
+				#502, Namjang B/D, Bangbae-dong,
+				Seoul    137-818
+				KR
+
+00-0E-50   (hex)		Thomson Telecom Belgium
+000E50     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				Edegem  Antwerp  B-2650
+				BE
+
+00-0E-4B   (hex)		atrium c and i
+000E4B     (base 16)		atrium c and i
+				124-4, Ojeon-dong,
+				Uiwang-city  Kyunggi-Do  437-819
+				KR
+
+00-0E-2B   (hex)		Safari Technologies
+000E2B     (base 16)		Safari Technologies
+				63855 M40 Hwy
+				Lawton  MI  49065
+				US
+
+00-0E-28   (hex)		Dynamic Ratings P/L
+000E28     (base 16)		Dynamic Ratings P/L
+				C/O Wilson Transformer Co.
+				Glen Waverley  Victoria  3150
+				AU
+
+00-0E-24   (hex)		Huwell Technology Inc.
+000E24     (base 16)		Huwell Technology Inc.
+				1F 82-21, Majin Building
+				Seoul    135-010
+				KR
+
+00-0E-3F   (hex)		Soronti, Inc.
+000E3F     (base 16)		Soronti, Inc.
+				12159 Business Park Dr, Suite 140
+				Draper  Utah  84020
+				US
+
+00-0E-45   (hex)		Beijing Newtry Electronic Technology Ltd
+000E45     (base 16)		Beijing Newtry Electronic Technology Ltd
+				PO Box 95, No. 1 Bei Sha Tan,
+				Beijing    10083
+				CN
+
+00-0E-1D   (hex)		ARION Technology Inc.
+000E1D     (base 16)		ARION Technology Inc.
+				3F, Pica Bldg, 894-2, Hogye 2 Dong
+				An-Yang City  Gyeonggi-Do  
+				KR
+
+00-0E-12   (hex)		Adaptive Micro Systems Inc.
+000E12     (base 16)		Adaptive Micro Systems Inc.
+				7840 North 86th St.
+				Milwaukee  WI  53224
+				US
+
+00-0E-4F   (hex)		Trajet GmbH
+000E4F     (base 16)		Trajet GmbH
+				Rebenring 33
+				Braunschweig  Nds.  38106
+				DE
+
+00-0E-38   (hex)		Cisco Systems, Inc
+000E38     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-36   (hex)		HEINESYS, Inc.
+000E36     (base 16)		HEINESYS, Inc.
+				3F, Sungkwang Bldg. 456-13, Sungnae-dong
+				Seoul    134-848
+				KR
+
+00-0E-17   (hex)		Private
+000E17     (base 16)		Private
+
+00-0E-15   (hex)		Tadlys LTD
+000E15     (base 16)		Tadlys LTD
+				ISRAELI SHIMON 3
+				RISHON lEZYYON  ISRAEL  75654
+				US
+
+00-0E-01   (hex)		ASIP Technologies Inc.
+000E01     (base 16)		ASIP Technologies Inc.
+				10F-2, NO.322, Sec.1, Guangfu Rd.,
+				Hsinchu    300
+				TW
+
+00-0D-CB   (hex)		Petcomkorea Co., Ltd.
+000DCB     (base 16)		Petcomkorea Co., Ltd.
+				5F,689-47,Geumjeong-dong,Gunpo-si,Kyungg
+				Kyunggi-do  gunpo-si  435-050
+				KR
+
+00-0D-CC   (hex)		NEOSMART Corp.
+000DCC     (base 16)		NEOSMART Corp.
+				Yoon-B/D 4F, 475-31, Bangbae 2-dong
+				Seoul  Seocho-gu  147-819
+				KR
+
+00-0D-CE   (hex)		Dynavac Technology Pte Ltd
+000DCE     (base 16)		Dynavac Technology Pte Ltd
+				30 Tuas Avenue 9
+				    639183
+				SG
+
+00-0D-E8   (hex)		Nasaco Electronics Pte. Ltd
+000DE8     (base 16)		Nasaco Electronics Pte. Ltd
+				Level 4, Nasaco Tech Centre
+				    486056
+				SG
+
+00-0D-E9   (hex)		Napatech Aps
+000DE9     (base 16)		Napatech Aps
+				Rundofrbivej 271, 1
+				Naerum    2850
+				DK
+
+00-0D-E6   (hex)		YOUNGBO ENGINEERING CO.,LTD
+000DE6     (base 16)		YOUNGBO ENGINEERING CO.,LTD
+				Mt.22, Jaeunga-ri, Jigsan-Eup,
+				Cheonan-shi  Chungcheongnam-do  #330-810
+				KR
+
+00-0D-C3   (hex)		First Communication, Inc.
+000DC3     (base 16)		First Communication, Inc.
+				1F, No.36, Industry E. Rd. IV.,
+				Hsinchu    
+				TW
+
+00-0D-B9   (hex)		PC Engines GmbH
+000DB9     (base 16)		PC Engines GmbH
+				Flughofstrasse 58
+				8152  Glattbrugg  
+				CH
+
+00-0D-B7   (hex)		SANKO ELECTRIC CO,.LTD
+000DB7     (base 16)		SANKO ELECTRIC CO,.LTD
+				7-23 Tamanoi-cho Atsuta-ku
+				Nagoya-shi  Aichi  456-0025
+				JP
+
+00-0D-AC   (hex)		Japan CBM Corporation
+000DAC     (base 16)		Japan CBM Corporation
+				5-68-10 Nakano,
+				Nakano-Ku  Tokyo  164-0001
+				JP
+
+00-0D-DF   (hex)		Japan Image & Network Inc.
+000DDF     (base 16)		Japan Image & Network Inc.
+				5-29-12 Shiba
+				Minato-ku  Tokyo  108-0014
+				JP
+
+00-0D-DB   (hex)		AIRWAVE TECHNOLOGIES INC.
+000DDB     (base 16)		AIRWAVE TECHNOLOGIES INC.
+				3F,No.9,Industry E. 9th Road
+				Hsinchu    300
+				TW
+
+00-0E-04   (hex)		CMA/Microdialysis AB
+000E04     (base 16)		CMA/Microdialysis AB
+				Dalvägen  10 / Box 2
+				Solna    171 18
+				SE
+
+00-0D-2A   (hex)		Scanmatic AS
+000D2A     (base 16)		Scanmatic AS
+				Kilsund
+				Staubø    4920
+				NO
+
+00-0D-29   (hex)		Cisco Systems, Inc
+000D29     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0D-26   (hex)		Primagraphics Limited
+000D26     (base 16)		Primagraphics Limited
+				Cambridge House, No.2 Focus Four
+				Letchworth Garden City  Hertfordshire  SG6 2TU
+				GB
+
+00-0D-46   (hex)		Parker SSD Drives
+000D46     (base 16)		Parker SSD Drives
+				9225 Forsyth Park Drive
+				Charlotte  NC  28273-3884
+				US
+
+00-0D-41   (hex)		Siemens AG ICM MP UC RD IT KLF1
+000D41     (base 16)		Siemens AG ICM MP UC RD IT KLF1
+				Suedstrasse 9
+				Kamp-Lintfort  NRW  47475
+				DE
+
+00-0D-42   (hex)		Newbest Development Limited
+000D42     (base 16)		Newbest Development Limited
+				3/F  Unit 311-312
+				  Shatin  NT  
+				HK
+
+00-0D-3C   (hex)		i.Tech Dynamic Ltd
+000D3C     (base 16)		i.Tech Dynamic Ltd
+				Room 1112, Metroplaza Tower 2, 223 Hing
+				    852
+				HK
+
+00-0D-55   (hex)		SANYCOM Technology Co.,Ltd
+000D55     (base 16)		SANYCOM Technology Co.,Ltd
+				6F,Beijing Capital Times Square,88# Xich
+				Beijing    100031
+				CN
+
+00-0D-57   (hex)		Fujitsu I-Network Systems Limited.
+000D57     (base 16)		Fujitsu I-Network Systems Limited.
+				1-403 kosugi-cho nakahara-ku
+				kawasaki  kanagawa  211-0063
+				JP
+
+00-0D-58   (hex)		Private
+000D58     (base 16)		Private
+
+00-0D-51   (hex)		DIVR Systems, Inc.
+000D51     (base 16)		DIVR Systems, Inc.
+				2161 Saturn Ct.
+				Bakersfield  CA  93308
+				US
+
+00-0D-39   (hex)		Network Electronics
+000D39     (base 16)		Network Electronics
+				Box 1020
+				Sandefjord  Sandefjord  N3204
+				NO
+
+00-0D-35   (hex)		PAC International Ltd
+000D35     (base 16)		PAC International Ltd
+				1 Park Gate Close
+				Stockport  Cheshire  SK6 2SZ
+				GB
+
+00-0D-95   (hex)		Opti-cell, Inc.
+000D95     (base 16)		Opti-cell, Inc.
+				100 High Tower Blvd.,  Suite 301
+				Pittsburgh  PA  15205
+				US
+
+00-0D-91   (hex)		Eclipse (HQ Espana) S.L.
+000D91     (base 16)		Eclipse (HQ Espana) S.L.
+				CC de Negocios
+				Puerto de Banus  Marbella  29660
+				ES
+
+00-0D-62   (hex)		Funkwerk Dabendorf GmbH
+000D62     (base 16)		Funkwerk Dabendorf GmbH
+				Maerkische Strasse
+				Dabendorf  Brandenburg  15806
+				DE
+
+00-0D-65   (hex)		Cisco Systems, Inc
+000D65     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0D-45   (hex)		Tottori SANYO Electric Co., Ltd.
+000D45     (base 16)		Tottori SANYO Electric Co., Ltd.
+				3-201, Minami Yoshikata
+				Tottori City  Tottori  680-8634
+				JP
+
+00-0D-A1   (hex)		MIRAE ITS Co.,LTD.
+000DA1     (base 16)		MIRAE ITS Co.,LTD.
+				7F, ChangHyun B/D,960-1,HoGye1Dong
+				AnYang  KyongiGiDo  431-840
+				KR
+
+00-0D-80   (hex)		Online Development Inc
+000D80     (base 16)		Online Development Inc
+				7209 Chapman Hwy
+				Knoxville  Tn  37920
+				US
+
+00-0D-13   (hex)		Wilhelm Rutenbeck GmbH&Co.KG
+000D13     (base 16)		Wilhelm Rutenbeck GmbH&Co.KG
+				Niederworth 1-10
+				Schalksmühle  NRW  58579
+				DE
+
+00-0D-19   (hex)		ROBE Show lighting
+000D19     (base 16)		ROBE Show lighting
+				Hazovice 2090
+				Roznov pod Radhostem    756 61
+				US
+
+00-0D-1C   (hex)		Amesys Defense
+000D1C     (base 16)		Amesys Defense
+				1030 Av de la LAUZIERE
+				AIX en PROVENCE  Cedex 03  13794
+				FR
+
+00-0C-ED   (hex)		Real Digital Media
+000CED     (base 16)		Real Digital Media
+				485 North Keller Road
+				Maitland  FL  32751
+				US
+
+00-0C-F0   (hex)		M & N GmbH
+000CF0     (base 16)		M & N GmbH
+				Dieselstr 18
+				Rosbach v.d.H.    61191
+				DE
+
+00-0C-F4   (hex)		AKATSUKI ELECTRIC MFG.CO.,LTD.
+000CF4     (base 16)		AKATSUKI ELECTRIC MFG.CO.,LTD.
+				593-1,aoji­ cho
+				kusatsu shi  shiga  525-0041
+				JP
+
+00-0C-F3   (hex)		CALL IMAGE SA
+000CF3     (base 16)		CALL IMAGE SA
+				867 Route Imperiale
+				BAILLARGUES    34670
+				FR
+
+00-0C-CF   (hex)		Cisco Systems, Inc
+000CCF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0C-D8   (hex)		M. K. Juchheim GmbH & Co
+000CD8     (base 16)		M. K. Juchheim GmbH & Co
+				Moltkestraße 13 - 31
+				Fulda  Hessen  36039
+				DE
+
+00-0C-C6   (hex)		Ka-Ro electronics GmbH
+000CC6     (base 16)		Ka-Ro electronics GmbH
+				Pascalstraße 22
+				Aachen  NW  52076
+				DE
+
+00-0D-01   (hex)		P&E Microcomputer Systems, Inc.
+000D01     (base 16)		P&E Microcomputer Systems, Inc.
+				710 Commonwealth Ave
+				Boston  Ma  02215
+				US
+
+00-0D-00   (hex)		Seaway Networks Inc.
+000D00     (base 16)		Seaway Networks Inc.
+				1 Chrysalis Way
+				Ottawa  Ontario  K2G 6P9
+				CA
+
+00-0C-F9   (hex)		Xylem Water Solutions
+000CF9     (base 16)		Xylem Water Solutions
+				Gesallvagen
+				    
+				SE
+
+00-0C-C4   (hex)		Tiptel AG
+000CC4     (base 16)		Tiptel AG
+				Halskestrasse 1
+				Ratingen  NRW  40880
+				DE
+
+00-0C-BA   (hex)		Jamex, Inc.
+000CBA     (base 16)		Jamex, Inc.
+				2415 N Triphammer Rd
+				Ithaca  NY  14850
+				US
+
+00-0C-D1   (hex)		SFOM Technology Corp.
+000CD1     (base 16)		SFOM Technology Corp.
+				No.18, Lane 32, Wufu 1st Rd., Luju shian
+				Luju Shiang  Tauyuan County  338
+				TW
+
+00-0C-CE   (hex)		Cisco Systems, Inc
+000CCE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0C-E0   (hex)		Trek Diagnostics Inc.
+000CE0     (base 16)		Trek Diagnostics Inc.
+				982 Keynote Circle
+				Cleveland  Ohio  44131
+				US
+
+00-0C-E2   (hex)		Rolls-Royce
+000CE2     (base 16)		Rolls-Royce
+				105 N. Sandusky St.
+				Mt. Vernon  Ohio  43050
+				US
+
+00-0D-0C   (hex)		MDI Security Systems
+000D0C     (base 16)		MDI Security Systems
+				9518 Ninth Street
+				Rancho Cucamonga  CA  91730
+				US
+
+00-0D-16   (hex)		UHS Systems Pty Ltd
+000D16     (base 16)		UHS Systems Pty Ltd
+				PO Box 6264
+				Alexandria  NSW  2015
+				AU
+
+00-0D-1F   (hex)		AV Digital
+000D1F     (base 16)		AV Digital
+				Pottendorfer Strasse 25-27/4/1/1
+				Wien    1120
+				AT
+
+00-0C-AD   (hex)		BTU International
+000CAD     (base 16)		BTU International
+				23 Esquire Rd
+				North Billerica  MA  01862
+				US
+
+00-0C-AA   (hex)		Cubic Transportation Systems Inc
+000CAA     (base 16)		Cubic Transportation Systems Inc
+				1308 S. Washington Street
+				Tullahoma  TN  37388
+				US
+
+00-0C-AC   (hex)		Citizen Watch Co., Ltd.
+000CAC     (base 16)		Citizen Watch Co., Ltd.
+				6-1-12, Tanashi-cho
+				Nishi-Tokyo-shi  Tokyo  188-8511
+				JP
+
+00-0C-AE   (hex)		Ailocom Oy
+000CAE     (base 16)		Ailocom Oy
+				Hatanpaan valtatie 24
+				TAMPERE  FIN  33950
+				FI
+
+00-0C-A3   (hex)		Rancho Technology, Inc.
+000CA3     (base 16)		Rancho Technology, Inc.
+				10783 Bell Court
+				Rancho Cucamonga  CA  19730
+				US
+
+00-0C-9C   (hex)		Chongho information & communications
+000C9C     (base 16)		Chongho information & communications
+				Chongho Bldg, #7-61 Yangjae-dong, Seocho
+				Seoul    137-130
+				KR
+
+00-0C-97   (hex)		NV ADB TTV Technologies SA
+000C97     (base 16)		NV ADB TTV Technologies SA
+				LEUVENSESTEENWEG,585
+				ZAVENTEM  Vlaamse brabant  1930
+				BE
+
+00-0C-8F   (hex)		Nergal s.r.l.
+000C8F     (base 16)		Nergal s.r.l.
+				Viale Bardanzellu,8
+				Roma    00155
+				IT
+
+00-0C-92   (hex)		WolfVision Gmbh
+000C92     (base 16)		WolfVision Gmbh
+				VWP
+				Goetzis  Vorarlberg  A-6840
+				AT
+
+00-0C-93   (hex)		Xeline Co., Ltd.
+000C93     (base 16)		Xeline Co., Ltd.
+				7F. Chungjin Bldg., 475-22
+				Seoul    137-819
+				KR
+
+00-0C-7F   (hex)		synertronixx GmbH
+000C7F     (base 16)		synertronixx GmbH
+				Lange Laube 22
+				Hannover  Niedersachsen  30159
+				DE
+
+00-0C-81   (hex)		Schneider Electric (Australia) 
+000C81     (base 16)		Schneider Electric (Australia) 
+				80 Schneider Road
+				Eagle Farm   Qld  4009
+				AU
+
+00-0C-9E   (hex)		MemoryLink Corp.
+000C9E     (base 16)		MemoryLink Corp.
+				36 Jewelers Park Drive
+				Neenah  Wisconsin  54957
+				US
+
+00-0C-95   (hex)		PrimeNet
+000C95     (base 16)		PrimeNet
+				Hongik University, 72-1, Sangsu-Dong, Ma
+				Seoul    121-791
+				KR
+
+00-0C-76   (hex)		MICRO-STAR INTERNATIONAL CO., LTD.
+000C76     (base 16)		MICRO-STAR INTERNATIONAL CO., LTD.
+				No 69, Li-De Street, Jung-He City, Taipe
+				Taipei    
+				TW
+
+00-0C-80   (hex)		Opelcomm Inc.
+000C80     (base 16)		Opelcomm Inc.
+				46750 Fremont Blvd. Ste 210
+				Fremont  CA  94538
+				US
+
+00-0C-7D   (hex)		TEIKOKU ELECTRIC MFG. CO., LTD
+000C7D     (base 16)		TEIKOKU ELECTRIC MFG. CO., LTD
+				60,HIRANO
+				IBO-GUN  HYOGO  679-4395
+				JP
+
+00-0C-B7   (hex)		Nanjing Huazhuo Electronics Co., Ltd.
+000CB7     (base 16)		Nanjing Huazhuo Electronics Co., Ltd.
+				No.77 Gaohu Road
+				Nanjing  Jiangsu  211100
+				CN
+
+00-0C-68   (hex)		SigmaTel, Inc.
+000C68     (base 16)		SigmaTel, Inc.
+				201 Jones Road
+				Waltham  MA  02451
+				US
+
+00-0C-07   (hex)		Iftest AG
+000C07     (base 16)		Iftest AG
+				Schwimmbadstrasse 43
+				Wettingen  AG  5430
+				CH
+
+00-0C-0C   (hex)		APPRO TECHNOLOGY INC.
+000C0C     (base 16)		APPRO TECHNOLOGY INC.
+				13F, No. 66 Chung-Cheng Rd,
+				Hsin-Chuang  Taipei  242
+				TW
+
+00-0C-0E   (hex)		XtremeSpectrum, Inc.
+000C0E     (base 16)		XtremeSpectrum, Inc.
+				8133 Leesburg Pike
+				Vienna  VA  22182
+				US
+
+00-0C-12   (hex)		Micro-Optronic-Messtechnik GmbH
+000C12     (base 16)		Micro-Optronic-Messtechnik GmbH
+				Lessingstrasse 14
+				Langebrück  Saxony  D-01465
+				DE
+
+00-0C-10   (hex)		PNI Corporation
+000C10     (base 16)		PNI Corporation
+				5464 Skylane Blvd #A
+				Santa Rosa  CA  95403
+				US
+
+00-0C-40   (hex)		Altech Controls
+000C40     (base 16)		Altech Controls
+				1545 Industial Drive
+				Missouri City  Texas  77489
+				US
+
+00-0C-3E   (hex)		Crest Audio
+000C3E     (base 16)		Crest Audio
+				16-00 Pollitt Drive
+				Fair Lawn  NJ  07410
+				US
+
+00-0C-3A   (hex)		Oxance
+000C3A     (base 16)		Oxance
+				75-85 rue Richelieu
+				les Lucs sur Boulogne    85170
+				FR
+
+00-0C-35   (hex)		KaVo Dental GmbH & Co. KG
+000C35     (base 16)		KaVo Dental GmbH & Co. KG
+				Bismarkring 39
+				Biberach/Riss  Baden-Württemberg  88400
+				DE
+
+00-0C-56   (hex)		Megatel Computer (1986) Corp.
+000C56     (base 16)		Megatel Computer (1986) Corp.
+				586 Main Street
+				Glen Williams  Ontario  L7G 3T6
+				CA
+
+00-0C-57   (hex)		MACKIE Engineering Services Belgium BVBA
+000C57     (base 16)		MACKIE Engineering Services Belgium BVBA
+				Industriepark Noord 10
+				Sint Niklaas    B-9100
+				BE
+
+00-0C-23   (hex)		Beijing Lanchuan Tech. Co., Ltd.
+000C23     (base 16)		Beijing Lanchuan Tech. Co., Ltd.
+				Rm220,No.30 Shangyuancun,Gaoliangqiaolu,
+				Beijing    100044
+				CN
+
+00-0C-25   (hex)		Allied Telesis Labs, Inc. 
+000C25     (base 16)		Allied Telesis Labs, Inc. 
+				Suite 450
+				Raleigh  NC  27606
+				US
+
+00-0C-18   (hex)		Zenisu Keisoku Inc.
+000C18     (base 16)		Zenisu Keisoku Inc.
+				2-13-37
+				Fuchu-shi  Tokyo  183-0027
+				JP
+
+00-0C-0A   (hex)		Guangdong Province Electronic Technology Research Institute
+000C0A     (base 16)		Guangdong Province Electronic Technology Research Institute
+				Electronic Technology Building,NO.61-65,
+				Guangzhou  Guangdong  510630
+				CN
+
+00-0C-0B   (hex)		Broadbus Technologies
+000C0B     (base 16)		Broadbus Technologies
+				80 Central Street
+				Boxborough  Massachusetts  01719
+				US
+
+00-0C-4A   (hex)		Cygnus Microsystems (P) Limited
+000C4A     (base 16)		Cygnus Microsystems (P) Limited
+				93, Phase II,
+				Hyderabad  Andhra Pradesh  500051
+				IN
+
+00-0C-54   (hex)		Pedestal Networks, Inc
+000C54     (base 16)		Pedestal Networks, Inc
+				6503 Dumbarton Circle
+				Fremont  CA  94555
+				US
+
+00-0C-37   (hex)		Geomation, Inc.
+000C37     (base 16)		Geomation, Inc.
+				25188 Genesee Trail Road
+				Golden  CO  80401
+				US
+
+00-0B-E8   (hex)		AOIP
+000BE8     (base 16)		AOIP
+				6 rue Maryse BASTIE
+				COURCOURONNES  Idf  91080
+				FR
+
+00-0B-DC   (hex)		AKCP
+000BDC     (base 16)		AKCP
+				67/285  Muangake Village #8
+				Amphur Muang  Patomthanee  12000
+				TH
+
+00-0B-D8   (hex)		Industrial Scientific Corp.
+000BD8     (base 16)		Industrial Scientific Corp.
+				1001 Oakdale Road
+				Oakdale  PA  15071
+				US
+
+00-0B-D7   (hex)		DORMA Time + Access GmbH
+000BD7     (base 16)		DORMA Time + Access GmbH
+				Mainzer Straße 36-52
+				Bonn  Nordrheinwestfalen  53179
+				DE
+
+00-0B-DD   (hex)		TOHOKU RICOH Co., LTD.
+000BDD     (base 16)		TOHOKU RICOH Co., LTD.
+				3-1 Shinmeido
+				Shibata  Miyagi pref.  989-1695
+				JP
+
+00-0B-E5   (hex)		HIMS International Corporation
+000BE5     (base 16)		HIMS International Corporation
+				139-9
+				Daejeon  Daejeon  305-806
+				KR
+
+00-0B-E9   (hex)		Actel Corporation
+000BE9     (base 16)		Actel Corporation
+				200 Valley Road
+				Mt. Arlington  NJ  07856
+				US
+
+00-0B-E3   (hex)		Key Stream Co., Ltd.
+000BE3     (base 16)		Key Stream Co., Ltd.
+				No. 2 Nagaoka Bldg. 4F,  2-8-5 Hatchobor
+				Chuo-ku  Tokyo  104-0032
+				JP
+
+00-0B-D3   (hex)		cd3o
+000BD3     (base 16)		cd3o
+				402 W Broadway
+				San Deigo  CA  92101
+				US
+
+00-0B-D5   (hex)		Nvergence, Inc.
+000BD5     (base 16)		Nvergence, Inc.
+				Jeil Bldg. 4th, Samsung-dong 168-26, Kan
+				Seoul    135-090
+				KR
+
+00-0B-D1   (hex)		Aeronix, Inc.
+000BD1     (base 16)		Aeronix, Inc.
+				1775 W. Hibiscus Blvd,
+				Melbourne  FL  32901
+				US
+
+00-0B-D2   (hex)		Remopro Technology Inc.
+000BD2     (base 16)		Remopro Technology Inc.
+				No. 443, Huannan RD.,
+				Pingjen City  Taoyuan  324
+				TW
+
+00-0B-C7   (hex)		ICET S.p.A.
+000BC7     (base 16)		ICET S.p.A.
+				Via Quarto Negroni, 63
+				Cecchina di Ariccia  Roma  00040
+				IT
+
+00-0B-B8   (hex)		Kihoku Electronic Co.
+000BB8     (base 16)		Kihoku Electronic Co.
+				Marukatubiru 3F 4-9-6
+				Osakashi  Osaka-hu  556-0005
+				JP
+
+00-0B-C0   (hex)		China IWNComm Co., Ltd.
+000BC0     (base 16)		China IWNComm Co., Ltd.
+				4F.C Xietong Building,No.12 Gaoxin 2nd r
+				Xi'an  shaanxi  710075
+				CN
+
+00-0B-B0   (hex)		Sysnet Telematica srl
+000BB0     (base 16)		Sysnet Telematica srl
+				Viale Berbera, 49
+				Milan    20162
+				IT
+
+00-0B-B4   (hex)		RDC Semiconductor Inc.,
+000BB4     (base 16)		RDC Semiconductor Inc.,
+				6F-1 , No.2-1, Lihsin Rd, Science-Based
+				Hsin Chu    300
+				TW
+
+00-0B-CC   (hex)		JUSAN, S.A.
+000BCC     (base 16)		JUSAN, S.A.
+				Vivero, 5
+				MADRID    28040
+				ES
+
+00-0B-AC   (hex)		3Com Ltd
+000BAC     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-0B-F9   (hex)		Gemstone Communications, Inc.
+000BF9     (base 16)		Gemstone Communications, Inc.
+				6Fl., No. 102,  Hengyang Rd.
+				Taipei    100
+				TW
+
+00-0B-FC   (hex)		Cisco Systems, Inc
+000BFC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-EA   (hex)		Zultys Technologies
+000BEA     (base 16)		Zultys Technologies
+				785 Lucern Drive
+				Sunnyvale  CA  94085
+				US
+
+00-0B-9F   (hex)		Neue ELSA GmbH
+000B9F     (base 16)		Neue ELSA GmbH
+				Sonnenweg 11
+				Aachen    52070
+				DE
+
+00-0B-98   (hex)		NiceTechVision
+000B98     (base 16)		NiceTechVision
+				IntelZone 703
+				YongIn  Gugal-ri  Ki Heung  KyoungKiDo  354-2
+				KR
+
+00-0B-95   (hex)		eBet Gaming Systems Pty Ltd
+000B95     (base 16)		eBet Gaming Systems Pty Ltd
+				Suite D, 255 Rawson Street
+				Auburn  NSW  2144
+				AU
+
+00-0B-9E   (hex)		Yasing Technology Corp.
+000B9E     (base 16)		Yasing Technology Corp.
+				No. 50, Ta Hsueh Road, HsinChu, Taiwan
+				HsinChu    300
+				TW
+
+00-0B-88   (hex)		Vidisco ltd.
+000B88     (base 16)		Vidisco ltd.
+				17 Yechiel Dresner
+				Petach-Tikva    49277
+				IL
+
+00-0B-54   (hex)		BiTMICRO Networks, Inc.
+000B54     (base 16)		BiTMICRO Networks, Inc.
+				47929 Fremont Blvd
+				Fremont  CA  94538
+				US
+
+00-0B-8C   (hex)		Flextronics
+000B8C     (base 16)		Flextronics
+				Migdal HaEmek
+				23108  Hataasia 1  
+				IL
+
+00-0B-8A   (hex)		MITEQ Inc.
+000B8A     (base 16)		MITEQ Inc.
+				100 Davids Drive
+				Hauppauge  NY  11788-2034
+				US
+
+00-0B-90   (hex)		ADVA Optical Networking Ltd.
+000B90     (base 16)		ADVA Optical Networking Ltd.
+				ADVAntage House
+				York    YO30 4RY
+				GB
+
+00-0B-79   (hex)		X-COM, Inc.
+000B79     (base 16)		X-COM, Inc.
+				8809 Sudley Road
+				Manassas  VA  20110
+				US
+
+00-0B-4B   (hex)		VISIOWAVE SA
+000B4B     (base 16)		VISIOWAVE SA
+				Route de la Pierre 22
+				ECUBLENS  VAUD  CH-1024
+				CH
+
+00-0B-36   (hex)		Productivity Systems, Inc.
+000B36     (base 16)		Productivity Systems, Inc.
+				1711 Analog Drive
+				Richardson  TX  75081-1944
+				US
+
+00-0B-35   (hex)		Quad Bit System co., Ltd.
+000B35     (base 16)		Quad Bit System co., Ltd.
+				402 Gayang Technotown
+				Seoul  Kangseogu  157-810
+				KR
+
+00-0B-75   (hex)		Iosoft Ltd.
+000B75     (base 16)		Iosoft Ltd.
+				5 Woodlark Road
+				Cambridge  Cambs.  CB3 0HT
+				GB
+
+00-0B-70   (hex)		Load Technology, Inc.
+000B70     (base 16)		Load Technology, Inc.
+				4225 Production Court
+				Las Vegas  NV  89115
+				US
+
+00-0B-6F   (hex)		Media Streaming Networks Inc
+000B6F     (base 16)		Media Streaming Networks Inc
+				1905 Anam Tower, 702-10, Yeoksam dong, K
+				Seoul    135-080
+				KR
+
+00-0B-43   (hex)		Microscan Systems, Inc.
+000B43     (base 16)		Microscan Systems, Inc.
+				700 SW 39th St
+				Renton  WA  98057
+				US
+
+00-0B-45   (hex)		Cisco Systems, Inc
+000B45     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-4C   (hex)		Clarion (M) Sdn Bhd
+000B4C     (base 16)		Clarion (M) Sdn Bhd
+				Phase 3
+				Bayan Lepas  Penang  11900
+				MY
+
+00-0B-63   (hex)		Kaleidescape
+000B63     (base 16)		Kaleidescape
+				One First Street, Suite Sixteen
+				Los Altos  CA  94022
+				US
+
+00-0B-68   (hex)		Addvalue Communications Pte Ltd
+000B68     (base 16)		Addvalue Communications Pte Ltd
+				28,TAI SENG STREET #06-02
+				Singapore    534106
+				SG
+
+00-0B-58   (hex)		Astronautics C.A  LTD
+000B58     (base 16)		Astronautics C.A  LTD
+				23 hayarkon street
+				Bnei Brak    51261
+				IL
+
+00-0B-55   (hex)		ADInstruments
+000B55     (base 16)		ADInstruments
+				P. O. Box 587
+				Dunedin  Otago  9001
+				NZ
+
+00-0B-87   (hex)		American Reliance Inc.
+000B87     (base 16)		American Reliance Inc.
+				11801 Goldring Rd
+				Arcadia  CA  91006
+				US
+
+00-0B-0D   (hex)		Air2U, Inc.
+000B0D     (base 16)		Air2U, Inc.
+				No. 5-1 Innovation Rd 1, Science-based P
+				Hsin-Chu  Taiwan  300
+				TW
+
+00-0B-0B   (hex)		Corrent Corporation
+000B0B     (base 16)		Corrent Corporation
+				1711 W. Greentree Dr.
+				Tempe  AZ  85284-2717
+				US
+
+00-0B-08   (hex)		Pillar Data Systems
+000B08     (base 16)		Pillar Data Systems
+				1371 McCarthy Blvd.
+				Milpitas  CA  95035
+				US
+
+00-0B-27   (hex)		Scion Corporation
+000B27     (base 16)		Scion Corporation
+				82 Worman's Mill Court
+				Frederick  MD  21701
+				US
+
+00-0B-21   (hex)		G-Star Communications Inc.
+000B21     (base 16)		G-Star Communications Inc.
+				5F, 69-10, Sec. 2, Chung Cheng East Road
+				Taipei Hsien    251
+				TW
+
+00-0A-DA   (hex)		Vindicator Technologies
+000ADA     (base 16)		Vindicator Technologies
+				5307 Industrial Oaks Blvd.
+				Austin  Texas  78735
+				US
+
+00-0A-C9   (hex)		Zambeel Inc
+000AC9     (base 16)		Zambeel Inc
+				45700 Northport Loop East
+				Fremont  CA  94538
+				US
+
+00-0B-25   (hex)		Aeluros
+000B25     (base 16)		Aeluros
+				201 San Antonio Circle #172
+				Mountain View  CA  94040
+				US
+
+00-0B-1A   (hex)		Industrial Defender, Inc.
+000B1A     (base 16)		Industrial Defender, Inc.
+				16 Chestnut Street
+				Foxborough  MA  02035
+				US
+
+00-0B-18   (hex)		Private
+000B18     (base 16)		Private
+
+00-0B-15   (hex)		Platypus Technology
+000B15     (base 16)		Platypus Technology
+				4/1 Atchison St
+				St Leonards  NSW  2065
+				AU
+
+00-0A-FA   (hex)		Traverse Technologies Australia
+000AFA     (base 16)		Traverse Technologies Australia
+				Unit 13, 240 Sydney Rd
+				Coburg  Victoria  3058
+				AU
+
+00-0A-FC   (hex)		Core Tec Communications, LLC
+000AFC     (base 16)		Core Tec Communications, LLC
+				49 Leavenworth Street
+				Waterbury  CT  06702
+				US
+
+00-0A-EC   (hex)		Koatsu Gas Kogyo Co., Ltd.
+000AEC     (base 16)		Koatsu Gas Kogyo Co., Ltd.
+				1-5, Doyama-cho, Kita-ku, Osaka
+				Osaka    530-8411
+				JP
+
+00-0A-E7   (hex)		ELIOP S.A.
+000AE7     (base 16)		ELIOP S.A.
+				Avenida de Manoteras, 30
+				Madrid    E-28050
+				ES
+
+00-0A-E8   (hex)		Cathay Roxus Information Technology Co. LTD
+000AE8     (base 16)		Cathay Roxus Information Technology Co. LTD
+				Fuhua mansion building A/B 4F
+				Beijing    100027
+				CN
+
+00-0A-DD   (hex)		Allworx Corp.
+000ADD     (base 16)		Allworx Corp.
+				245 East Main Street
+				East Rochester  NY  14604
+				US
+
+00-0A-E1   (hex)		EG Technology
+000AE1     (base 16)		EG Technology
+				250 15th Street
+				Atlanta  GA  30318
+				US
+
+00-0A-DF   (hex)		Gennum Corporation
+000ADF     (base 16)		Gennum Corporation
+				P.O Box 489
+				Burlington  Ontario  L7R 3Y3
+				CA
+
+00-0B-3F   (hex)		Anthology Solutions Inc.
+000B3F     (base 16)		Anthology Solutions Inc.
+				1722 Ringwood Ave.
+				San Jose  CA  95131
+				US
+
+00-0B-3C   (hex)		Cygnal Integrated Products, Inc.
+000B3C     (base 16)		Cygnal Integrated Products, Inc.
+				4301 Westbank Drive
+				Austin  TX  78746
+				US
+
+00-0A-F1   (hex)		Clarity Design, Inc.
+000AF1     (base 16)		Clarity Design, Inc.
+				13029 Danielson Street
+				Poway  CA  92064-8810
+				US
+
+00-0A-F3   (hex)		Cisco Systems, Inc
+000AF3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0A-8D   (hex)		EUROTHERM LIMITED
+000A8D     (base 16)		EUROTHERM LIMITED
+				FARADAY CLOSE
+				WORTHING  WEST SUSSEX  BN13 3PL
+				GB
+
+00-0A-9F   (hex)		Pannaway Technologies, Inc.
+000A9F     (base 16)		Pannaway Technologies, Inc.
+				215 Commerce Way
+				Portsmouth  NH  03801
+				US
+
+00-0A-8F   (hex)		Aska International Inc.
+000A8F     (base 16)		Aska International Inc.
+				306 Riverseven
+				Kochi    780-8088
+				JP
+
+00-0A-A0   (hex)		Cedar Point Communications
+000AA0     (base 16)		Cedar Point Communications
+				16 Route 111, Bldg 3
+				Derry  NH  03038
+				US
+
+00-0A-8E   (hex)		Invacom Ltd
+000A8E     (base 16)		Invacom Ltd
+				Business and Technology Centre
+				Stevenage  Hertfordshire  SG1 2DX
+				GB
+
+00-0A-C1   (hex)		Futuretel
+000AC1     (base 16)		Futuretel
+				21580 Stevens Creek Blvd, Suite 208
+				Cupertino  CA  95014
+				US
+
+00-0A-BE   (hex)		OPNET Technologies CO., LTD.
+000ABE     (base 16)		OPNET Technologies CO., LTD.
+				3F, NO.5, Industry E. Rd. IX, Science-Ba
+				Hsinchu    300
+				TW
+
+00-0A-C3   (hex)		eM Technics Co., Ltd.
+000AC3     (base 16)		eM Technics Co., Ltd.
+				7F., IT Venture Tower., 78,
+				Seoul    138-803
+				KR
+
+00-0A-C4   (hex)		Daewoo Teletech Co., Ltd
+000AC4     (base 16)		Daewoo Teletech Co., Ltd
+				265-3, Seohyeon, Bundang
+				Seongnam  Gyeonggi  
+				KR
+
+00-0A-C0   (hex)		Fuyoh Video Industry CO., LTD.
+000AC0     (base 16)		Fuyoh Video Industry CO., LTD.
+				7-25 Higashi Kibogaoka
+				Yokohama-shi  Kanagawa-ken  246-0008
+				JP
+
+00-0A-AE   (hex)		Rosemount Process Analytical
+000AAE     (base 16)		Rosemount Process Analytical
+				6573A Cochran Rd.
+				Solon  Ohio  44139-3922
+				US
+
+00-0A-B3   (hex)		Fa. GIRA
+000AB3     (base 16)		Fa. GIRA
+				Dahlienstraße
+				Radevormwald  Nordrhein-Westfalen  42477
+				DE
+
+00-0A-BA   (hex)		Arcon Technology Limited
+000ABA     (base 16)		Arcon Technology Limited
+				Rm. 3711-12, 37/F., Cable TV Tower ,
+				Hong Kong    
+				CN
+
+00-0A-B6   (hex)		COMPUNETIX, INC
+000AB6     (base 16)		COMPUNETIX, INC
+				2420 MOSSIDE BLVD.
+				MONROEVILLE  PA  15146
+				US
+
+00-0A-AF   (hex)		Pipal Systems
+000AAF     (base 16)		Pipal Systems
+				2903 Bunker Hill Lane
+				Santa Clara  CA  95054
+				US
+
+00-0A-76   (hex)		Beida Jade Bird Huaguang Technology Co.,Ltd
+000A76     (base 16)		Beida Jade Bird Huaguang Technology Co.,Ltd
+				No.207 Chengfu Road, Haidian District
+				Beijing    100871
+				CN
+
+00-0A-B2   (hex)		Fresnel Wireless Systems
+000AB2     (base 16)		Fresnel Wireless Systems
+				1333 Gateway Drive
+				Melbourne  FL  32901
+				US
+
+00-0A-AA   (hex)		AltiGen Communications Inc.
+000AAA     (base 16)		AltiGen Communications Inc.
+				47427 Fremont Blvd.
+				Fremont  CA  94538
+				US
+
+00-0A-99   (hex)		Calamp Wireless Networks Inc
+000A99     (base 16)		Calamp Wireless Networks Inc
+				101-5540 Ferrier Street
+				Town of Mount-Royal  Quebec  H4P 1M2
+				CA
+
+00-0A-93   (hex)		W2 Networks, Inc.
+000A93     (base 16)		W2 Networks, Inc.
+				5808 NW Lac Leman Drive
+				Issaquah  Washington  98027
+				US
+
+00-0A-89   (hex)		Creval Systems, Inc.
+000A89     (base 16)		Creval Systems, Inc.
+				2F,24-4,Sanwolgok-Dong,Sungbuk-Ku,Seoul,
+				Seoul    136-120
+				KR
+
+00-0A-80   (hex)		Telkonet Inc.
+000A80     (base 16)		Telkonet Inc.
+				20374 Seneca Meadows Pkwy
+				Germantown  MD  21401
+				US
+
+00-0A-79   (hex)		corega K.K
+000A79     (base 16)		corega K.K
+				1-19-20, Shinyokohama
+				Yokohama-city  Kanagawa-ken  222-0033
+				JP
+
+00-0A-5C   (hex)		Carel s.p.a.
+000A5C     (base 16)		Carel s.p.a.
+				Via dell' Industria, 11
+				Brugine  Padova  35020
+				IT
+
+00-0A-5A   (hex)		GreenNET Technologies Co.,Ltd.
+000A5A     (base 16)		GreenNET Technologies Co.,Ltd.
+				No.10, Qiongyu Road,Sciences-based Indus
+				Shenzhen  Guangdong  518057
+				CN
+
+00-0A-56   (hex)		HITACHI Maxell Ltd.
+000A56     (base 16)		HITACHI Maxell Ltd.
+				6-20-1 Kinunodai
+				Yawara-mura, Tsukuba-gun  IBARAKI  300-2496
+				JP
+
+00-0A-51   (hex)		GyroSignal Technology Co., Ltd.
+000A51     (base 16)		GyroSignal Technology Co., Ltd.
+				5F,No. 77,Lide St.
+				Zhonghe City  Taipei County  23556
+				TW
+
+00-0A-2C   (hex)		Active Tchnology Corporation
+000A2C     (base 16)		Active Tchnology Corporation
+				16-23, Shibaura 2-Chome,
+				Tokyo  Tokyo  108-0023
+				JP
+
+00-0A-2A   (hex)		QSI Systems Inc.
+000A2A     (base 16)		QSI Systems Inc.
+				7 Raymond Avenue
+				Salem  NH  03079
+				US
+
+00-0A-23   (hex)		Parama Networks Inc
+000A23     (base 16)		Parama Networks Inc
+				1955 The Alameda
+				San Jose  CA  95126
+				US
+
+00-0A-1F   (hex)		ART WARE Telecommunication Co., Ltd.
+000A1F     (base 16)		ART WARE Telecommunication Co., Ltd.
+				806 Ace Techno Tower #1, 197-17
+				Seoul    152-050
+				KR
+
+00-0A-0A   (hex)		SUNIX Co., Ltd.
+000A0A     (base 16)		SUNIX Co., Ltd.
+				3Fl., No. 76, Baugau Rd.,
+				Shindian  Taipei  231
+				TW
+
+00-0A-05   (hex)		Widax Corp.
+000A05     (base 16)		Widax Corp.
+				269 Stevens Street
+				Hyannis  MA  02668
+				US
+
+00-0A-34   (hex)		Identicard Systems Incorporated
+000A34     (base 16)		Identicard Systems Incorporated
+				40 Citation Lane
+				Lancaster  Pennsylvania  17606
+				US
+
+00-0A-30   (hex)		Visteon Corporation
+000A30     (base 16)		Visteon Corporation
+				One Village Center Drive
+				Van Buren Twp  MI  48111
+				US
+
+00-0A-2F   (hex)		Artnix Inc.
+000A2F     (base 16)		Artnix Inc.
+				Chungjin B/D, 475-22 Bangbae, Seocho
+				Seoul    137-819
+				KR
+
+00-0A-15   (hex)		Silicon Data, Inc
+000A15     (base 16)		Silicon Data, Inc
+				4699 Old Ironsides Dr., #150
+				Santa Clara  CA  95054
+				US
+
+00-0A-1B   (hex)		Stream Labs
+000A1B     (base 16)		Stream Labs
+				Leninskie gori 1, bild 77
+				Moskow    119992
+				RU
+
+00-0A-1A   (hex)		Imerge Ltd
+000A1A     (base 16)		Imerge Ltd
+				Unit 6, Bar Hill Business Park
+				Bar Hill  Cambridge  CB3 8SL
+				GB
+
+00-0A-60   (hex)		Autostar Technology Pte Ltd
+000A60     (base 16)		Autostar Technology Pte Ltd
+				Unit 04-10 TECHplace II
+				Singapore  Singapore  569876
+				SG
+
+00-0A-5D   (hex)		FingerTec Worldwide Sdn Bhd
+000A5D     (base 16)		FingerTec Worldwide Sdn Bhd
+				No 6, 8 & 10
+				Bandar Kinrara 47100 PUchong  Selangor  
+				MY
+
+00-0A-39   (hex)		LoPA Information Technology
+000A39     (base 16)		LoPA Information Technology
+				710-9, Dae Lim 3-Dong
+				Young Deung po-gu  Seoul, Korea  150-814
+				KR
+
+00-0A-37   (hex)		Procera Networks, Inc.
+000A37     (base 16)		Procera Networks, Inc.
+				1299 Orleans Drive
+				Sunnyvale  CA  94089
+				US
+
+00-0A-53   (hex)		Intronics, Incorporated
+000A53     (base 16)		Intronics, Incorporated
+				2020 Lafayette Blvd.
+				Fredericksburg  Virginia  22401
+				US
+
+00-0A-4A   (hex)		Targa Systems Ltd.
+000A4A     (base 16)		Targa Systems Ltd.
+				1905 Grandtech Centre,
+				Shatin  N.T.  
+				HK
+
+00-09-D6   (hex)		KNC One GmbH
+0009D6     (base 16)		KNC One GmbH
+				Hohe Welle 10 B
+				Evessen    38173
+				DE
+
+00-09-C7   (hex)		Movistec
+0009C7     (base 16)		Movistec
+				110-5 Maryoung -ri Seosu-myun
+				Kunsan  Chonbuk  573-940
+				KR
+
+00-09-C9   (hex)		BlueWINC Co., Ltd.
+0009C9     (base 16)		BlueWINC Co., Ltd.
+				401 Korea Design Center
+				Seongnam City  Kyonggi杁o  463-828
+				KR
+
+00-09-D4   (hex)		Transtech Networks
+0009D4     (base 16)		Transtech Networks
+				100 Wood Avenue
+				Iselin  NJ  08830
+				US
+
+00-09-CB   (hex)		HBrain
+0009CB     (base 16)		HBrain
+				#705 Kwanglim Bldg 179 KumiDong
+				Seongnam  GyeonggiDo  463-810
+				KR
+
+00-09-F1   (hex)		Yamaki Electric Corporation
+0009F1     (base 16)		Yamaki Electric Corporation
+				3-7-22 Shimomeguro
+				Meguro-ku  Tokyo  153-0064
+				JP
+
+00-09-F4   (hex)		Alcon Laboratories, Inc.
+0009F4     (base 16)		Alcon Laboratories, Inc.
+				6201 South Freeway
+				Fort Worth  Tx  76134
+				US
+
+00-09-F5   (hex)		Emerson Network Power Co.,Ltd
+0009F5     (base 16)		Emerson Network Power Co.,Ltd
+				1/F,3/F Electric Building Huawei Base,Ba
+				ShenZhen  GuangDong  518029
+				CN
+
+00-09-EA   (hex)		YEM Inc.
+0009EA     (base 16)		YEM Inc.
+				1-3-33
+				Atsugi-shi  Kanagawa  243-0021
+				JP
+
+00-09-C5   (hex)		KINGENE Technology Corporation
+0009C5     (base 16)		KINGENE Technology Corporation
+				7F, No. 144, Minchuan E. Rd. Sec. 3
+				Taipei    105
+				TW
+
+00-09-CD   (hex)		HUDSON SOFT CO.,LTD.
+0009CD     (base 16)		HUDSON SOFT CO.,LTD.
+				C62,Geijutsu-no-mori
+				Sapporo  Hokkaido  005-0864
+				JP
+
+00-09-C0   (hex)		6WIND
+0009C0     (base 16)		6WIND
+				1, place Charles de Gaulle
+				Montigny-le-Bretonneux    78180
+				FR
+
+00-09-BF   (hex)		Nintendo Co., Ltd.
+0009BF     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-09-E3   (hex)		Angel Iglesias S.A.
+0009E3     (base 16)		Angel Iglesias S.A.
+				Polígono 27 Martutene
+				San Sebastián  Guipúzcoa  20014
+				ES
+
+00-09-B4   (hex)		KISAN TELECOM CO., LTD.
+0009B4     (base 16)		KISAN TELECOM CO., LTD.
+				9F, Teawon Bldg., 65 Bangyi-Dong
+				Songpa-Gu  Seoul  138-828
+				KR
+
+00-09-AE   (hex)		OKANO ELECTRIC CO.,LTD
+0009AE     (base 16)		OKANO ELECTRIC CO.,LTD
+				2-8-18 KANAYAMA-CHO
+				HIGASHIKURUME  TOKYO  203-0003
+				JP
+
+00-09-BA   (hex)		MAKU Informationstechik GmbH
+0009BA     (base 16)		MAKU Informationstechik GmbH
+				Gewerbehofstraße 7
+				Essen  NRW  45145
+				DE
+
+00-0A-04   (hex)		3Com Ltd
+000A04     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-09-71   (hex)		Time Management, Inc.
+000971     (base 16)		Time Management, Inc.
+				11 Lake Gatlin Road
+				Orlando  Florida  32806
+				US
+
+00-09-74   (hex)		Innopia Technologies, Inc.
+000974     (base 16)		Innopia Technologies, Inc.
+				5F., Institute of Technology
+				Seoul    133-791
+				KR
+
+00-09-8B   (hex)		Entropic Communications, Inc.
+00098B     (base 16)		Entropic Communications, Inc.
+				9276 Scranton Rd #200
+				San Diego  CA  92121
+				US
+
+00-09-7E   (hex)		IMI TECHNOLOGY CO., LTD
+00097E     (base 16)		IMI TECHNOLOGY CO., LTD
+				2nd floor, Eun Seok Building, 729-1
+				Gangnam-gu  Seoul  135-080
+				KR
+
+00-09-6A   (hex)		Cloverleaf Communications Inc.
+00096A     (base 16)		Cloverleaf Communications Inc.
+				2 Willow St.
+				Southborough  MA  01745-1027
+				US
+
+00-09-5A   (hex)		RACEWOOD TECHNOLOGY
+00095A     (base 16)		RACEWOOD TECHNOLOGY
+				5F-2,NO.6,CHUNG-HSING RD.,SEC.1,WU-GU
+				TAIPEI    248
+				TW
+
+00-09-4E   (hex)		BARTECH SYSTEMS INTERNATIONAL, INC
+00094E     (base 16)		BARTECH SYSTEMS INTERNATIONAL, INC
+				251 Najoles Rd Suite A
+				Millersville  Maryland  21108
+				US
+
+00-09-47   (hex)		Aztek, Inc.
+000947     (base 16)		Aztek, Inc.
+				23 Spectrum Pointe #209
+				Lake Forest  California  92630
+				US
+
+00-09-51   (hex)		Apogee Imaging Systems
+000951     (base 16)		Apogee Imaging Systems
+				151 Sunrise Avenue
+				Roseville  CA  95661
+				US
+
+00-09-3D   (hex)		Newisys,Inc.
+00093D     (base 16)		Newisys,Inc.
+				6200 Bridgepoint Parkway
+				Austin  TX  78730
+				US
+
+00-09-67   (hex)		Tachyon, Inc
+000967     (base 16)		Tachyon, Inc
+				9339 Carroll Park Drive
+				San Diego  CA  92121
+				US
+
+00-09-96   (hex)		RDI
+000996     (base 16)		RDI
+				20406 Earl St.
+				Torrance  CA  90503
+				US
+
+00-09-0C   (hex)		Mayekawa Mfg. Co. Ltd.
+00090C     (base 16)		Mayekawa Mfg. Co. Ltd.
+				16825 IH 35 North
+				Selma  Texas  78154
+				US
+
+00-09-0D   (hex)		LEADER ELECTRONICS CORP.
+00090D     (base 16)		LEADER ELECTRONICS CORP.
+				2-6-33, TSUNASHIMA-HIGASHI
+				YOKOHAMA  KANAGAWA  223-8505
+				JP
+
+00-08-FE   (hex)		UNIK C&C Co.,Ltd.
+0008FE     (base 16)		UNIK C&C Co.,Ltd.
+				706-13 UNIK BLDG 17F
+				SEOUL    135-080
+				KR
+
+00-08-FF   (hex)		Trilogy Communications Ltd
+0008FF     (base 16)		Trilogy Communications Ltd
+				26 Focus Way
+				Andover  Hampshire  SP10 5NY
+				GB
+
+00-09-04   (hex)		MONDIAL electronic
+000904     (base 16)		MONDIAL electronic
+				Eggelsberg 73
+				Eggelsberg  Oberoesterreich  5142
+				AT
+
+00-09-1F   (hex)		A&D Co., Ltd.
+00091F     (base 16)		A&D Co., Ltd.
+				1-243 Asahi
+				Kitamoto-shi  Saitama  364-8585
+				JP
+
+00-09-24   (hex)		Telebau GmbH
+000924     (base 16)		Telebau GmbH
+				Am Kraehenberg 1
+				Waldeck-Sachsenhausen  Germany  34513
+				DE
+
+00-09-21   (hex)		Planmeca Oy
+000921     (base 16)		Planmeca Oy
+				Asentajankatu 6
+				HELSINKI    00810 HELSIN
+				FI
+
+00-09-19   (hex)		MDS Gateways
+000919     (base 16)		MDS Gateways
+				Clonshaugh Industrial Estate
+				Dublin 17    
+				IE
+
+00-09-18   (hex)		SAMSUNG TECHWIN CO.,LTD
+000918     (base 16)		SAMSUNG TECHWIN CO.,LTD
+				42
+				CHANGWON  KYONGNAM  641-716
+				KR
+
+00-09-2F   (hex)		Akom Technology Corporation
+00092F     (base 16)		Akom Technology Corporation
+				5F, No. 323, Yang-Guang St.
+				Taipei    114
+				TW
+
+00-08-EF   (hex)		DIBAL,S.A.
+0008EF     (base 16)		DIBAL,S.A.
+				Astintze Kalea 24
+				Derio  Vizcaya  48160
+				ES
+
+00-08-F0   (hex)		Next Generation Systems, Inc.
+0008F0     (base 16)		Next Generation Systems, Inc.
+				PO BOX 31205
+				Dayton  OH  45437-0205
+				US
+
+00-08-E9   (hex)		NextGig
+0008E9     (base 16)		NextGig
+				9820-B Towne Centre Drive
+				San Diego  CA  92121
+				US
+
+00-09-10   (hex)		Simple Access Inc.
+000910     (base 16)		Simple Access Inc.
+				600 McCaffrey Street
+				St-Laurent  Quebec  H4T1N1
+				CA
+
+00-09-14   (hex)		COMPUTROLS INC.
+000914     (base 16)		COMPUTROLS INC.
+				221 Bark Drive
+				Harvey  LA  70058
+				US
+
+00-08-E7   (hex)		SHI ControlSystems,Ltd.
+0008E7     (base 16)		SHI ControlSystems,Ltd.
+				19,Natusima
+				Yokosuka  Kanagawa  237-8555
+				JP
+
+00-08-D7   (hex)		HOW CORPORATION
+0008D7     (base 16)		HOW CORPORATION
+				1-11-17 Chiyoda
+				Sagamihara  Kanagawa  229-0037
+				JP
+
+00-08-FC   (hex)		Gigaphoton Inc.
+0008FC     (base 16)		Gigaphoton Inc.
+				YOKOKURA SHINDEN400
+				OYAMA  TOTIGI  323-8558
+				JP
+
+00-09-38   (hex)		Allot Communications
+000938     (base 16)		Allot Communications
+				Hanagar 22 st'
+				Hod-Hasharon    45800
+				IL
+
+00-08-BF   (hex)		Aptus Elektronik AB
+0008BF     (base 16)		Aptus Elektronik AB
+				FO Petersons G 6
+				    
+				SE
+
+00-08-B8   (hex)		E.F. Johnson
+0008B8     (base 16)		E.F. Johnson
+				299 Johnson Ave.
+				Waseca  MN  56093
+				US
+
+00-08-BB   (hex)		NetExcell
+0008BB     (base 16)		NetExcell
+				15375 Barranca Pkwy, #E-106
+				Irvine  CA  92679
+				US
+
+00-08-BE   (hex)		XENPAK MSA Group
+0008BE     (base 16)		XENPAK MSA Group
+				Care of: Agilent Technologies
+				Ipswich  Suffolk  Ip1 5PB
+				GB
+
+00-08-C1   (hex)		Avistar Communications Corporation
+0008C1     (base 16)		Avistar Communications Corporation
+				15851 Dallas Pkwy.
+				Addison  TX  75001
+				US
+
+00-08-C6   (hex)		Philips Consumer Communications
+0008C6     (base 16)		Philips Consumer Communications
+				Route d'Angers
+				Cedex 9    
+				FR
+
+00-08-65   (hex)		JASCOM CO., LTD
+000865     (base 16)		JASCOM CO., LTD
+				JUAN INDUSTRIAL COMPLEX 330, 17-1,
+				JUAN-DONG NAM-GU  INCHEON  402-200
+				KR
+
+00-08-64   (hex)		Fasy S.p.A.
+000864     (base 16)		Fasy S.p.A.
+				Via Tognasca 7
+				Gallarate  Varese  21013
+				US
+
+00-08-60   (hex)		LodgeNet Entertainment Corp.
+000860     (base 16)		LodgeNet Entertainment Corp.
+				3900 W. Innovation Street
+				Sioux Falls  SD  57107
+				US
+
+00-08-97   (hex)		Quake Technologies
+000897     (base 16)		Quake Technologies
+				2880 Zanker Road
+				San Jose  CA  95134
+				US
+
+00-08-90   (hex)		AVILINKS SA
+000890     (base 16)		AVILINKS SA
+				Etic Center - CS 77 729
+				Cesson Sevigne Cedex    35577
+				FR
+
+00-08-8D   (hex)		Sigma-Links Inc.
+00088D     (base 16)		Sigma-Links Inc.
+				550-1 Higashiasakawa-cho,
+				Tokyo    193-8550
+				JP
+
+00-08-A8   (hex)		Systec Co., Ltd.
+0008A8     (base 16)		Systec Co., Ltd.
+				19 Nochidori, Nawa
+				Tokai  Aichi  476-0002
+				JP
+
+00-08-A4   (hex)		Cisco Systems, Inc
+0008A4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-00-6B   (hex)		ACCEL TECHNOLOGIES INC.
+08006B     (base 16)		ACCEL TECHNOLOGIES INC.
+				7358 TRADE STREET
+				SAN DIEGO  CA  92121
+				US
+
+00-08-84   (hex)		Index Braille AB
+000884     (base 16)		Index Braille AB
+				Box 155
+				    
+				SE
+
+00-07-E8   (hex)		EdgeWave
+0007E8     (base 16)		EdgeWave
+				15333 Avenue of Science
+				San Diego  CA  92128
+				US
+
+00-07-EB   (hex)		Cisco Systems, Inc
+0007EB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-EC   (hex)		Cisco Systems, Inc
+0007EC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-51   (hex)		Canadian Bank Note Company, Ltd.
+000851     (base 16)		Canadian Bank Note Company, Ltd.
+				18 Auriga Dr.
+				    K2E 7T9
+				CA
+
+00-08-59   (hex)		ShenZhen Unitone Electronics Co., Ltd.
+000859     (base 16)		ShenZhen Unitone Electronics Co., Ltd.
+				2 Southern Floor 702 Building
+				    
+				CN
+
+00-08-4E   (hex)		DivergeNet, Inc.
+00084E     (base 16)		DivergeNet, Inc.
+				2142 Bering Dr.
+				San Jose  CA  95131
+				US
+
+00-08-19   (hex)		Banksys
+000819     (base 16)		Banksys
+				Haachtsesteenweg 1442
+				    
+				BE
+
+00-08-1A   (hex)		Sanrad Intelligence Storage Communications (2000) Ltd.
+00081A     (base 16)		Sanrad Intelligence Storage Communications (2000) Ltd.
+				32 Habarzel St., Entrace B
+				    
+				IL
+
+00-08-10   (hex)		Key Technology, Inc.
+000810     (base 16)		Key Technology, Inc.
+				150 Avery St.
+				Walla Walla  WA  99362
+				US
+
+00-08-07   (hex)		Access Devices Limited
+000807     (base 16)		Access Devices Limited
+				Sixth Floor, 58 Oxbridge Road
+				    
+				GB
+
+00-07-FC   (hex)		Adept Systems Inc.
+0007FC     (base 16)		Adept Systems Inc.
+				2100 Boca Rio Rd.
+				Boca Raton  FL  33433
+				US
+
+00-08-25   (hex)		Acme Packet
+000825     (base 16)		Acme Packet
+				71 Third Avenue
+				Woburn  MA  01803
+				US
+
+00-07-DC   (hex)		Atek Co, Ltd.
+0007DC     (base 16)		Atek Co, Ltd.
+				B dong #205 hanyang venture park
+				Seoul    
+				KR
+
+00-08-1F   (hex)		Pou Yuen Tech Corp. Ltd.
+00081F     (base 16)		Pou Yuen Tech Corp. Ltd.
+				16F, No. 107, Sect. 3, Taichung Keng Rd.
+				    
+				TW
+
+00-07-C6   (hex)		VDS Vosskuhler GmbH
+0007C6     (base 16)		VDS Vosskuhler GmbH
+				Weibe Breite 7
+				    
+				DE
+
+00-07-F5   (hex)		Bridgeco Co AG
+0007F5     (base 16)		Bridgeco Co AG
+				Ringstr. 14
+				    
+				CH
+
+00-07-94   (hex)		Simple Devices, Inc.
+000794     (base 16)		Simple Devices, Inc.
+				111 Anza Blvd., Suite 120
+				Burlingame  CA  94010
+				US
+
+00-07-97   (hex)		Netpower Co., Ltd.
+000797     (base 16)		Netpower Co., Ltd.
+				Baekam Bldg., 6F
+				Seoul    138-162
+				KR
+
+00-07-8C   (hex)		Elektronikspecialisten i Borlange AB
+00078C     (base 16)		Elektronikspecialisten i Borlange AB
+				Box 50
+				    SE 780
+				SE
+
+00-07-CC   (hex)		Kaba Benzing GmbH
+0007CC     (base 16)		Kaba Benzing GmbH
+				Albertistrabe 3
+				    
+				DE
+
+00-07-C0   (hex)		NetZerver Inc.
+0007C0     (base 16)		NetZerver Inc.
+				26 West Lone Cactus Drive
+				Phoenix  AZ  85027
+				US
+
+00-04-7E   (hex)		Siqura B.V.
+00047E     (base 16)		Siqura B.V.
+				Zuidelijk Halfrond 4
+				    
+				NL
+
+00-07-BC   (hex)		Identix Inc.
+0007BC     (base 16)		Identix Inc.
+				6591 Sierra Lane
+				Dublin  CA  94568
+				US
+
+00-07-A9   (hex)		Novasonics
+0007A9     (base 16)		Novasonics
+				1390 Willow Road
+				Menlo Park  CA  94025
+				US
+
+00-07-A1   (hex)		VIASYS Healthcare GmbH
+0007A1     (base 16)		VIASYS Healthcare GmbH
+				Leibnizstraße 7
+				Hoechberg  Bavaria  97204
+				DE
+
+00-07-9E   (hex)		Ilinx Co., Ltd.
+00079E     (base 16)		Ilinx Co., Ltd.
+				4th Floor Korea Telecom, Yangjae Branch
+				Seoul    
+				KR
+
+00-07-A0   (hex)		e-Watch Inc.
+0007A0     (base 16)		e-Watch Inc.
+				7800 IH 10 West
+				San Antonio  TX  78229
+				US
+
+00-07-88   (hex)		Clipcomm, Inc.
+000788     (base 16)		Clipcomm, Inc.
+				5th Fl, Ssangyang Bldg.
+				Seoul    151-827
+				KR
+
+00-07-81   (hex)		Itron Inc.
+000781     (base 16)		Itron Inc.
+				2818 N. Sullivan Road
+				Spokane  WA  99216
+				US
+
+00-07-6B   (hex)		Stralfors AB
+00076B     (base 16)		Stralfors AB
+				Langgatan 21
+				    
+				SE
+
+00-07-68   (hex)		Danfoss A/S
+000768     (base 16)		Danfoss A/S
+				E16-N12, DK-6430 Nordborg
+				    
+				
+
+00-07-5F   (hex)		VCS Video Communication Systems AG
+00075F     (base 16)		VCS Video Communication Systems AG
+				Forchheimer Str. 4
+				    
+				DE
+
+00-07-B8   (hex)		Corvalent Corporation
+0007B8     (base 16)		Corvalent Corporation
+				1101 Arrow Point Dr #501
+				Cedar Park  TX  78613
+				US
+
+00-07-7B   (hex)		Millimetrix Broadband Networks
+00077B     (base 16)		Millimetrix Broadband Networks
+				Kibutz Givat Hashelosha 48800
+				    
+				IL
+
+00-07-69   (hex)		Italiana Macchi SpA
+000769     (base 16)		Italiana Macchi SpA
+				Via Matteotti 1
+				    
+				IT
+
+00-07-1A   (hex)		Finedigital Inc.
+00071A     (base 16)		Finedigital Inc.
+				4th Fl. Bomi Bldg., 661 Deungchon 3 Dong
+				Seoul    157-033
+				KR
+
+00-07-1E   (hex)		Tri-M Engineering / Nupak Dev. Corp.
+00071E     (base 16)		Tri-M Engineering / Nupak Dev. Corp.
+				6-1301 Ketch Court
+				    V3K 6X7
+				CA
+
+00-07-17   (hex)		Wieland Electric GmbH
+000717     (base 16)		Wieland Electric GmbH
+				Brennerstraße 10-14
+				    
+				DE
+
+00-07-11   (hex)		Acterna
+000711     (base 16)		Acterna
+				6620 Network Way
+				Indianapolis  IN  46278
+				US
+
+00-07-02   (hex)		Varex Imaging
+000702     (base 16)		Varex Imaging
+				1678 South Pioneer Road
+				Salt Lake City  UT  84104
+				US
+
+00-07-05   (hex)		Endress & Hauser GmbH & Co
+000705     (base 16)		Endress & Hauser GmbH & Co
+				Hauptstrabe 1 - Postfach 1261
+				    
+				DE
+
+00-06-FF   (hex)		Sheba Systems Co., Ltd.
+0006FF     (base 16)		Sheba Systems Co., Ltd.
+				5th Fl. Hyundai Jad B/D
+				Seoul    134-030
+				KR
+
+00-07-41   (hex)		Sierra Automated Systems
+000741     (base 16)		Sierra Automated Systems
+				2821 Burton Ave.
+				Burbank  CA  91504
+				US
+
+00-07-45   (hex)		Radlan Computer Communications Ltd.
+000745     (base 16)		Radlan Computer Communications Ltd.
+				Atidim Technology Park
+				Tel Aviv    61131
+				IL
+
+00-07-3E   (hex)		China Great-Wall Computer Shenzhen Co., Ltd.
+00073E     (base 16)		China Great-Wall Computer Shenzhen Co., Ltd.
+				Research & Development Center, Kefa Road
+				Shenzhen    518057
+				CN
+
+00-07-33   (hex)		DANCONTROL Engineering
+000733     (base 16)		DANCONTROL Engineering
+				Italiensvej 1-5
+				    
+				DK
+
+00-07-2B   (hex)		Jung Myung Telecom Co., Ltd.
+00072B     (base 16)		Jung Myung Telecom Co., Ltd.
+				5Fl Silla Technovil., 39-3 Dang-Dong
+				    
+				KR
+
+00-07-18   (hex)		iCanTek Co., Ltd.
+000718     (base 16)		iCanTek Co., Ltd.
+				2nd Fl. DK Plaza II, 376-5,
+				Sungman-si, Kyonggi-do    463-805
+				KR
+
+00-07-16   (hex)		J & S Marine Ltd.
+000716     (base 16)		J & S Marine Ltd.
+				Pottington Business Park
+				Devon    EX31 1LY
+				GB
+
+00-07-5C   (hex)		Eastman Kodak Company
+00075C     (base 16)		Eastman Kodak Company
+				343 State Street
+				Rochester  NY  146501245
+				US
+
+00-07-56   (hex)		Juyoung Telecom
+000756     (base 16)		Juyoung Telecom
+				#201, Dunsan Building
+				Taejon    302-846
+				KR
+
+00-07-5A   (hex)		Air Products and Chemicals, Inc.
+00075A     (base 16)		Air Products and Chemicals, Inc.
+				7201 Hamilton Blvd.
+				Allentown  PA  18195-1501
+				US
+
+00-07-48   (hex)		The Imaging Source Europe
+000748     (base 16)		The Imaging Source Europe
+				Sommerstraße 34-36
+				    
+				DE
+
+00-07-46   (hex)		TURCK, Inc.
+000746     (base 16)		TURCK, Inc.
+				3000 Campus Drive
+				Plymouth  MN  55441
+				US
+
+00-07-3B   (hex)		Tenovis GmbH & Co KG
+00073B     (base 16)		Tenovis GmbH & Co KG
+				Kleyerstraße 94
+				    
+				DE
+
+00-07-31   (hex)		Ophir-Spiricon LLC
+000731     (base 16)		Ophir-Spiricon LLC
+				3050 N 300 W
+				North Logan  UT  84341
+				US
+
+00-07-0A   (hex)		Unicom Automation Co., Ltd.
+00070A     (base 16)		Unicom Automation Co., Ltd.
+				Silk Bldg 3-31-11
+				Tokyo    164-0012
+				JP
+
+00-07-09   (hex)		Westerstrand Urfabrik AB
+000709     (base 16)		Westerstrand Urfabrik AB
+				Box 133
+				    
+				SE
+
+00-06-EB   (hex)		Global Data
+0006EB     (base 16)		Global Data
+				2250 Obispo Ave #105
+				Signal Hill  CA  90806
+				US
+
+00-06-D3   (hex)		Alpha Telecom, Inc. U.S.A.
+0006D3     (base 16)		Alpha Telecom, Inc. U.S.A.
+				1394 Borregor Ave.
+				Sunnyvale  CA  94089
+				US
+
+00-06-47   (hex)		Etrali S.A.
+000647     (base 16)		Etrali S.A.
+				221, Rue La Fontaine
+				    
+				FR
+
+00-06-A4   (hex)		INNOWELL Corp.
+0006A4     (base 16)		INNOWELL Corp.
+				#717 ChongGu Bluevill
+				    463-825
+				KR
+
+00-06-D6   (hex)		Cisco Systems, Inc
+0006D6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-06-CB   (hex)		Jotron Electronics A/S
+0006CB     (base 16)		Jotron Electronics A/S
+				Pob 54
+				    
+				NO
+
+00-06-CD   (hex)		Leaf Imaging Ltd.
+0006CD     (base 16)		Leaf Imaging Ltd.
+				7th Hatnufa st
+				Petach-Tikva    49002
+				IL
+
+00-06-95   (hex)		Ensure Technologies, Inc.
+000695     (base 16)		Ensure Technologies, Inc.
+				3526 West Liberty
+				Ann Arbor  MI  48103
+				US
+
+00-06-91   (hex)		PT Inovacao
+000691     (base 16)		PT Inovacao
+				Rua Eng. Jose F. Pinto Basto
+				    
+				PT
+
+00-06-92   (hex)		Intruvert Networks, Inc.
+000692     (base 16)		Intruvert Networks, Inc.
+				Suite 102
+				San Jose  CA  95131
+				US
+
+00-06-8B   (hex)		AirRunner Technologies, Inc.
+00068B     (base 16)		AirRunner Technologies, Inc.
+				2401 Lupine Trail
+				South Lake Tahoe  CA  96150
+				US
+
+00-06-88   (hex)		Telways Communication Co., Ltd.
+000688     (base 16)		Telways Communication Co., Ltd.
+				3F, No. 53, Lane 258
+				Taipei    114
+				TW
+
+00-06-AB   (hex)		W-Link Systems, Inc.
+0006AB     (base 16)		W-Link Systems, Inc.
+				No. 20, Park Ave. II,
+				Hsinchu    300
+				TW
+
+00-06-AC   (hex)		Intersoft Co.
+0006AC     (base 16)		Intersoft Co.
+				#1803 sun-kyoung Officetel
+				Seoul    
+				KR
+
+00-06-94   (hex)		Mobillian Corporation
+000694     (base 16)		Mobillian Corporation
+				11031 Via Frontera
+				San Diego  CA  92127
+				US
+
+00-06-C7   (hex)		RFNET Technologies Pte Ltd (S)
+0006C7     (base 16)		RFNET Technologies Pte Ltd (S)
+				Unit 233 Innovation Centre Blk 2
+				    637722
+				SG
+
+00-06-B9   (hex)		A5TEK Corp.
+0006B9     (base 16)		A5TEK Corp.
+				1233 Alderwood Ave.
+				Sunnyvale  CA  94089
+				US
+
+00-06-B3   (hex)		Diagraph Corporation
+0006B3     (base 16)		Diagraph Corporation
+				3401 Rider Trail South
+				Earth City  MO  63045-1110
+				US
+
+00-06-E3   (hex)		Quantitative Imaging Corporation
+0006E3     (base 16)		Quantitative Imaging Corporation
+				8081 Lougheed Highway
+				    
+				CA
+
+00-06-E4   (hex)		Citel Technologies Ltd.
+0006E4     (base 16)		Citel Technologies Ltd.
+				Wheatcroft Business Park
+				Nottigham    NG12 4DG
+				GB
+
+00-06-A1   (hex)		Celsian Technologies, Inc.
+0006A1     (base 16)		Celsian Technologies, Inc.
+				3002 Dow Ave., Unit 138
+				Tustin  CA  92780
+				US
+
+00-06-D9   (hex)		IPM-Net S.p.A.
+0006D9     (base 16)		IPM-Net S.p.A.
+				Via Remo De Feo
+				    
+				IT
+
+00-06-63   (hex)		Human Technology Co., Ltd.
+000663     (base 16)		Human Technology Co., Ltd.
+				3rd Fl, Hyungok Bldg.,
+				Kangnam-ku  Seoul  
+				KR
+
+00-06-65   (hex)		Sunny Giken, Inc.
+000665     (base 16)		Sunny Giken, Inc.
+				3-1-9 Nishidai Itami-shi
+				Hyogo-pref.    664-0858
+				JP
+
+00-06-69   (hex)		Datasound Laboratories Ltd
+000669     (base 16)		Datasound Laboratories Ltd
+				5 Business Park West, Avenue One
+				  ENGLAND  
+				GB
+
+00-06-6E   (hex)		Delta Electronics, Inc.
+00066E     (base 16)		Delta Electronics, Inc.
+				11F, 266 Wen-Hwa 2nd Road,
+				    
+				TW
+
+00-06-1B   (hex)		Notebook Development Lab.  Lenovo Japan Ltd.
+00061B     (base 16)		Notebook Development Lab.  Lenovo Japan Ltd.
+				1623-14 Shimotsuruma
+				    242-8502
+				JP
+
+00-06-0F   (hex)		Narad Networks Inc
+00060F     (base 16)		Narad Networks Inc
+				515 Groton Road
+				Westford  MA  01886
+				US
+
+00-06-10   (hex)		Abeona Networks Inc
+000610     (base 16)		Abeona Networks Inc
+				46117 Landing Parkway
+				Fremont  CA  94539
+				US
+
+00-06-11   (hex)		Zeus Wireless, Inc.
+000611     (base 16)		Zeus Wireless, Inc.
+				8325 Guilford Road
+				Columbia  MD  21046
+				US
+
+00-05-EC   (hex)		Mosaic Systems Inc.
+0005EC     (base 16)		Mosaic Systems Inc.
+				7 Campbell Park
+				Somerville  MA  02144
+				US
+
+00-06-62   (hex)		MBM Technology Ltd.
+000662     (base 16)		MBM Technology Ltd.
+				Victoria Rd.
+				    
+				GB
+
+00-06-5A   (hex)		Strix Systems
+00065A     (base 16)		Strix Systems
+				310 N. Westlake Blvd.
+				Westlake Village  CA  91362
+				US
+
+00-06-52   (hex)		Cisco Systems, Inc
+000652     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-06-56   (hex)		Tactel AB
+000656     (base 16)		Tactel AB
+				Norra Vallgatan 64
+				    
+				SE
+
+00-06-41   (hex)		ITCN
+000641     (base 16)		ITCN
+				8571 Gander Creek Drive
+				Miamisburg  OH  45342
+				US
+
+00-06-48   (hex)		Seedsware, Inc.
+000648     (base 16)		Seedsware, Inc.
+				 3-7-16 Technostage,
+				Izumi,  Osaka  594-1144
+				JP
+
+00-06-4C   (hex)		Invicta Networks, Inc.
+00064C     (base 16)		Invicta Networks, Inc.
+				13873 Park Center Road
+				Herndon  VA  20171
+				US
+
+00-06-74   (hex)		Spectrum Control, Inc.
+000674     (base 16)		Spectrum Control, Inc.
+				8061 Avonia Road
+				Fairview  PA  16415
+				US
+
+00-06-38   (hex)		Sungjin C&C Co., Ltd.
+000638     (base 16)		Sungjin C&C Co., Ltd.
+				1543-6, Seocho-dong, Seocho-gu,
+				Seoul    137-073
+				KR
+
+00-06-35   (hex)		PacketAir Networks, Inc.
+000635     (base 16)		PacketAir Networks, Inc.
+				11545 W. Bernardo Ct.
+				San Diego  CA  92127
+				US
+
+00-06-1A   (hex)		Zetari Inc.
+00061A     (base 16)		Zetari Inc.
+				411 Waverly Oaks Rd.
+				Waltham  MA  02452-8401
+				US
+
+00-06-1F   (hex)		Vision Components GmbH
+00061F     (base 16)		Vision Components GmbH
+				Ottostraße 2
+				    
+				DE
+
+00-06-87   (hex)		Omnitron Systems Technology, Inc.
+000687     (base 16)		Omnitron Systems Technology, Inc.
+				140 Technology
+				Irvine  CA  92618
+				US
+
+00-06-02   (hex)		Cirkitech Electronics Co.
+000602     (base 16)		Cirkitech Electronics Co.
+				B1-2, No. 361, Fu-Xing First Road
+				  Tao-Yuan  
+				TW
+
+00-05-C0   (hex)		Digital Network Alacarte Co., Ltd.
+0005C0     (base 16)		Digital Network Alacarte Co., Ltd.
+				A104, Seoul Business Incubator
+				Seoul    157-030,
+				KR
+
+00-05-B8   (hex)		Electronic Design Associates, Inc.
+0005B8     (base 16)		Electronic Design Associates, Inc.
+				331 Arcado Rd. NW
+				Lilburn  GA  30047-2841
+				US
+
+00-05-BA   (hex)		Area Netwoeks, Inc.
+0005BA     (base 16)		Area Netwoeks, Inc.
+				1148 Euclid Ave., Suite 400
+				Cleveland  OH  4415
+				US
+
+00-05-BF   (hex)		JustEzy Technology, Inc.
+0005BF     (base 16)		JustEzy Technology, Inc.
+				5F, No. 324, Sec. 1, Junghua Rd.
+				Hsinchu    
+				TW
+
+00-05-D5   (hex)		Speedcom Wireless
+0005D5     (base 16)		Speedcom Wireless
+				7020 Professional Pkwy East
+				Sarasota  FL  34240-8514
+				US
+
+00-05-C5   (hex)		Flaga HF
+0005C5     (base 16)		Flaga HF
+				Vesturhlid 7
+				    
+				IS
+
+00-05-CA   (hex)		Hitron Technology, Inc.
+0005CA     (base 16)		Hitron Technology, Inc.
+				HSINCHU SBIP SUBSIDIARY
+				Hsin-chu    
+				TW
+
+00-05-D2   (hex)		DAP Technologies
+0005D2     (base 16)		DAP Technologies
+				955 Fernand Dufour,
+				    G1M 3B2
+				CA
+
+00-05-B1   (hex)		ASB Technology BV
+0005B1     (base 16)		ASB Technology BV
+				De Ronde 15A
+				    
+				NL
+
+00-05-99   (hex)		DRS Test and Energy Management or DRS-TEM
+000599     (base 16)		DRS Test and Energy Management or DRS-TEM
+				110 Wynn Drive
+				Huntsville  AL  35805
+				US
+
+00-05-9A   (hex)		Cisco Systems, Inc
+00059A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-AB   (hex)		Cyber Fone, Inc.
+0005AB     (base 16)		Cyber Fone, Inc.
+				989 Old Eagle School Road
+				Wayne  PA  19087
+				US
+
+00-05-92   (hex)		Pultek Corp.
+000592     (base 16)		Pultek Corp.
+				74-1, Yamashita-cho,
+				    231-0023
+				JP
+
+00-05-8B   (hex)		IPmental, Inc.
+00058B     (base 16)		IPmental, Inc.
+				8F-9, No. 35, Hsin Tai Rd.
+				    
+				TW
+
+00-05-AC   (hex)		Northern Digital, Inc.
+0005AC     (base 16)		Northern Digital, Inc.
+				103 Randall Drive
+				Waterloo   Ontario  N2V 1C5
+				CA
+
+00-05-AD   (hex)		Topspin Communications, Inc.
+0005AD     (base 16)		Topspin Communications, Inc.
+				515 Ellis Street
+				Mountain View  CA  94043
+				US
+
+00-05-D1   (hex)		Metavector Technologies
+0005D1     (base 16)		Metavector Technologies
+				Steenweg Op Gierle, 100
+				    
+				BE
+
+00-05-FB   (hex)		ShareGate, Inc.
+0005FB     (base 16)		ShareGate, Inc.
+				9805 Double R Blvd.
+				Reno  NV  89511-5917
+				US
+
+00-05-FE   (hex)		Traficon N.V.
+0005FE     (base 16)		Traficon N.V.
+				Bissegemsestraat 45
+				    
+				BE
+
+00-05-F0   (hex)		SATEC
+0005F0     (base 16)		SATEC
+				P.O. Box 45022
+				  91450  
+				IL
+
+00-05-30   (hex)		Andiamo Systems, Inc.
+000530     (base 16)		Andiamo Systems, Inc.
+				375 E. Tasman Dr.
+				San Jose  CA  95134
+				US
+
+00-05-38   (hex)		Merilus, Inc.
+000538     (base 16)		Merilus, Inc.
+				#307-46165 Yale Road
+				    V2P 2P2
+				CA
+
+00-05-2B   (hex)		HORIBA, Ltd.
+00052B     (base 16)		HORIBA, Ltd.
+				2 Miyanohigashi, Kisshoin,
+				    601-8510
+				JP
+
+00-05-1D   (hex)		Airocon, Inc.
+00051D     (base 16)		Airocon, Inc.
+				116 Houghton Lane
+				Boxboro  MA  01719
+				US
+
+00-05-15   (hex)		Nuark Co., Ltd.
+000515     (base 16)		Nuark Co., Ltd.
+				12F, Anyang K center, 1591-9, Burim-dong
+				  Gunggi-do  431-065
+				KR
+
+00-05-16   (hex)		SMART Modular Technologies
+000516     (base 16)		SMART Modular Technologies
+				4305 Cushing Pkwy
+				Fremont  CA  94538
+				US
+
+00-05-77   (hex)		SM Information & Communication
+000577     (base 16)		SM Information & Communication
+				330-1 Yangjaedong
+				    137-130
+				KR
+
+00-05-70   (hex)		Baydel Ltd.
+000570     (base 16)		Baydel Ltd.
+				Baydel House
+				    
+				GB
+
+00-05-6E   (hex)		National Enhance Technology, Inc.
+00056E     (base 16)		National Enhance Technology, Inc.
+				2F, No. 196-3, Tatung Rd., Sec. 3,
+				    
+				TW
+
+00-05-6D   (hex)		Pacific Corporation
+00056D     (base 16)		Pacific Corporation
+				2-23-3 Ebisu-Minami Shibuya
+				    
+				JP
+
+00-05-81   (hex)		Snell
+000581     (base 16)		Snell
+				Southleigh Park House
+				Hampshire    P09 2PE
+				GB
+
+00-05-7D   (hex)		Sun Communications, Inc.
+00057D     (base 16)		Sun Communications, Inc.
+				Gloria Bldg 6th
+				Tokyo    162-082
+				JP
+
+00-05-86   (hex)		Lucent Technologies
+000586     (base 16)		Lucent Technologies
+				1701 Harbor Bay Parkway
+				Alameda  CA  94502
+				US
+
+00-05-7B   (hex)		Chung Nam Electronic Co., Ltd.
+00057B     (base 16)		Chung Nam Electronic Co., Ltd.
+				Unit 3, 1/F, Festigood Centre
+				Tsuen  Fanling,  
+				HK
+
+00-05-71   (hex)		Seiwa Electronics Co.
+000571     (base 16)		Seiwa Electronics Co.
+				757 Amabouki, Kukizaki-Machi
+				    300-1253
+				JP
+
+00-05-49   (hex)		Salira Optical Network Systems
+000549     (base 16)		Salira Optical Network Systems
+				2694 Orchard Parkway
+				San Jose  CA  95134
+				US
+
+00-05-4C   (hex)		RF Innovations Pty Ltd
+00054C     (base 16)		RF Innovations Pty Ltd
+				22 Boulder Road
+				Malaga  WA   6090
+				AU
+
+00-05-43   (hex)		IQ Wireless GmbH
+000543     (base 16)		IQ Wireless GmbH
+				Carl-Scheele-Str. 14
+				    
+				DE
+
+00-05-5C   (hex)		Kowa Company, Ltd.
+00055C     (base 16)		Kowa Company, Ltd.
+				Chofugaoka 3-3-1,
+				    182-0021
+				JP
+
+00-05-10   (hex)		Infinite Shanghai Communication Terminals Ltd.
+000510     (base 16)		Infinite Shanghai Communication Terminals Ltd.
+				777 Chungiao Road, Pudong
+				    
+				CN
+
+00-04-FF   (hex)		Acronet Co., Ltd.
+0004FF     (base 16)		Acronet Co., Ltd.
+				Saman B/D 2Fl
+				    137-064
+				KR
+
+00-05-01   (hex)		Cisco Systems, Inc
+000501     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-08   (hex)		Inetcam, Inc.
+000508     (base 16)		Inetcam, Inc.
+				10171 Pacific Mesa Blvd.
+				San Diego  CA  92121
+				US
+
+00-05-1B   (hex)		Magic Control Technology Corporation
+00051B     (base 16)		Magic Control Technology Corporation
+				6F, No. 120-11 Chung Shan Rd.
+				    
+				TW
+
+00-05-13   (hex)		VTLinx Multimedia Systems, Inc.
+000513     (base 16)		VTLinx Multimedia Systems, Inc.
+				8401 Colesville Road,
+				Silver Spring  MD  20910
+				US
+
+00-05-0E   (hex)		3ware, Inc.
+00050E     (base 16)		3ware, Inc.
+				701 E. Middlefield Rd.
+				Mt. View  CA  94043
+				US
+
+00-04-D7   (hex)		Omitec Instrumentation Ltd.
+0004D7     (base 16)		Omitec Instrumentation Ltd.
+				Hopton Industrial Est.
+				    ENGLAND
+				GB
+
+00-04-D4   (hex)		Proview Electronics Co., Ltd.
+0004D4     (base 16)		Proview Electronics Co., Ltd.
+				6F, No. 1, Pau-Sheng Road
+				    
+				TW
+
+00-04-DB   (hex)		Tellus Group Corp.
+0004DB     (base 16)		Tellus Group Corp.
+				4F, No. 15 Industry E. Rd., IX
+				Hsinchu  Hsinchu  Taiwan
+				TW
+
+00-04-E0   (hex)		Procket Networks
+0004E0     (base 16)		Procket Networks
+				1100 Cadillac Court
+				Milpitas  CA  95035
+				US
+
+00-04-DD   (hex)		Cisco Systems, Inc
+0004DD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-80-86   (hex)		COMPUTER GENERATION INC.
+008086     (base 16)		COMPUTER GENERATION INC.
+				3855 PRESIDENTIAL PARKWAY
+				ATLANTA  GA  30340
+				US
+
+00-05-04   (hex)		Naray Information & Communication Enterprise
+000504     (base 16)		Naray Information & Communication Enterprise
+				3F San Woo Bldg., 1543-11
+				Seoul 137-070    
+				KR
+
+00-05-09   (hex)		AVOC Nishimura Ltd.
+000509     (base 16)		AVOC Nishimura Ltd.
+				Jogasaki 4-16-14
+				    
+				JP
+
+00-04-FB   (hex)		Commtech, Inc.
+0004FB     (base 16)		Commtech, Inc.
+				9011 E. 37th Street
+				Wichita  KS  67226-2006
+				US
+
+00-04-C0   (hex)		Cisco Systems, Inc
+0004C0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-BA   (hex)		KDD Media Will Corporation
+0004BA     (base 16)		KDD Media Will Corporation
+				2-1-23 Nakameguro
+				  153-0061  
+				JP
+
+00-04-B6   (hex)		Stratex Networks, Inc.
+0004B6     (base 16)		Stratex Networks, Inc.
+				64 White Road
+				Cape Town    7945
+				ZA
+
+00-04-CD   (hex)		Extenway Solutions Inc
+0004CD     (base 16)		Extenway Solutions Inc
+				500 boul. Morgan
+				Baie-d'Urfe  Quebec H9X 3V1  
+				CA
+
+00-04-E9   (hex)		Infiniswitch Corporation
+0004E9     (base 16)		Infiniswitch Corporation
+				134 Flanders Road
+				Westborough  MA  01581
+				US
+
+00-04-E8   (hex)		IER, Inc.
+0004E8     (base 16)		IER, Inc.
+				4501 So. General Bruce Dr
+				Temple  TX  76502
+				US
+
+00-04-B3   (hex)		Videotek, Inc.
+0004B3     (base 16)		Videotek, Inc.
+				243 Shoemaker Rd.
+				Pottstown  PA  19464
+				US
+
+00-04-4C   (hex)		JENOPTIK
+00044C     (base 16)		JENOPTIK
+				Laser, Optik, Systeme GmbH
+				    
+				DE
+
+00-04-44   (hex)		Western Multiplex Corporation
+000444     (base 16)		Western Multiplex Corporation
+				1196 Borregas Avenue
+				Sunnyvale  CA  94089
+				US
+
+00-04-39   (hex)		Rosco Entertainment Technology, Inc.
+000439     (base 16)		Rosco Entertainment Technology, Inc.
+				2181 NW Front Ave.
+				Portland  OR  97209
+				US
+
+00-04-3A   (hex)		Intelligent Telecommunications, Inc.
+00043A     (base 16)		Intelligent Telecommunications, Inc.
+				1687-2, Sinil-dong
+				SOUTH  KOREA  306-230
+				KR
+
+00-04-92   (hex)		Hive Internet, Ltd.
+000492     (base 16)		Hive Internet, Ltd.
+				Unit 2, Church View Business Centre
+				Binbrook  Market Rasen, Lincolnshire  LN8 6BY
+				GB
+
+00-04-8C   (hex)		Nayna Networks, Inc.
+00048C     (base 16)		Nayna Networks, Inc.
+				157 Topaz St.
+				Milpitas  CA  95035
+				US
+
+00-04-91   (hex)		Technovision, Inc.
+000491     (base 16)		Technovision, Inc.
+				5155 Spectrum Way, Unit #31
+				L4W  5A1  
+				CA
+
+00-04-93   (hex)		Tsinghua Unisplendour Co., Ltd.
+000493     (base 16)		Tsinghua Unisplendour Co., Ltd.
+				Th-Unis Building Tsinghua
+				  P.R.  
+				CN
+
+00-04-94   (hex)		Breezecom, Ltd.
+000494     (base 16)		Breezecom, Ltd.
+				Atidim Technology Park
+				    
+				IL
+
+00-04-89   (hex)		YAFO Networks, Inc.
+000489     (base 16)		YAFO Networks, Inc.
+				1340F Charwood Rd.
+				Hanover  MD  21076
+				US
+
+00-04-8A   (hex)		Temia Vertriebs GmbH
+00048A     (base 16)		Temia Vertriebs GmbH
+				Landsbergerstraße 320
+				    
+				DE
+
+00-04-81   (hex)		Econolite Control Products, Inc.
+000481     (base 16)		Econolite Control Products, Inc.
+				3360 E. La Palma Ave.
+				Anaheim  CA  92806
+				US
+
+00-04-6C   (hex)		Cyber Technology Co., Ltd.
+00046C     (base 16)		Cyber Technology Co., Ltd.
+				1-45 Yeo Wol-Dong
+				Kyeong Gi-Do  Kyeong Gi-Do  KOREA
+				KR
+
+00-04-71   (hex)		IPrad
+000471     (base 16)		IPrad
+				24 Raoul Wallenberg St.
+				    
+				IL
+
+00-04-6E   (hex)		Cisco Systems, Inc
+00046E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-74   (hex)		LEGRAND
+000474     (base 16)		LEGRAND
+				145 Avenue De Lattre
+				    
+				FR
+
+00-04-2D   (hex)		Sarian Systems, Ltd.
+00042D     (base 16)		Sarian Systems, Ltd.
+				Beacon House
+				West Yorkshire  ENGLAND  LS29 8JZ
+				GB
+
+00-04-2E   (hex)		Netous Technologies, Ltd.
+00042E     (base 16)		Netous Technologies, Ltd.
+				1006, Block A,
+				  HONG  KONG
+				HK
+
+00-04-25   (hex)		Atmel Corporation
+000425     (base 16)		Atmel Corporation
+				Multimedia & Communications Group
+				Morrisville  NC  27560
+				US
+
+00-04-3F   (hex)		ESTeem Wireless Modems, Inc
+00043F     (base 16)		ESTeem Wireless Modems, Inc
+				415 N. Quay St., Suite 4
+				Kennewick  WA  99336
+				US
+
+00-04-33   (hex)		Cyberboard A/S
+000433     (base 16)		Cyberboard A/S
+				Kloevermarken 120
+				    
+				DK
+
+00-04-34   (hex)		Accelent Systems, Inc.
+000434     (base 16)		Accelent Systems, Inc.
+				2620 Ridgewood Rd.,
+				Akron  OH  44313
+				US
+
+00-04-77   (hex)		Scalant Systems, Inc.
+000477     (base 16)		Scalant Systems, Inc.
+				2040 Martin Avenue
+				Santa Clara  CA  95050
+				US
+
+00-04-73   (hex)		Photonex Corporation
+000473     (base 16)		Photonex Corporation
+				8C Preston Court
+				Bedford  MA  01730
+				US
+
+00-04-70   (hex)		ipUnplugged AB
+000470     (base 16)		ipUnplugged AB
+				Box 10160
+				    
+				SE
+
+00-04-5D   (hex)		BEKA Elektronik
+00045D     (base 16)		BEKA Elektronik
+				Siemenstraße 29
+				  Erftstadt  50374
+				DE
+
+00-04-59   (hex)		Veristar Corporation
+000459     (base 16)		Veristar Corporation
+				727 Allston Way
+				Berkeley  CA  94710
+				US
+
+00-04-A4   (hex)		NetEnabled, Inc.
+0004A4     (base 16)		NetEnabled, Inc.
+				1275 Kinnear Rd.
+				Columbus  OH  43212
+				US
+
+00-04-16   (hex)		Parks S/A Comunicacoes Digitais
+000416     (base 16)		Parks S/A Comunicacoes Digitais
+				Av. Pernambuco, 1001
+				    
+				BR
+
+00-04-0F   (hex)		Asus Network Technologies, Inc.
+00040F     (base 16)		Asus Network Technologies, Inc.
+				11-1, No. 675, Sec. 1, King-kuo Rd.,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-04-0A   (hex)		Sage Systems
+00040A     (base 16)		Sage Systems
+				1420 Harbor Bay Parkway
+				Alameda  CA  94502
+				US
+
+00-04-04   (hex)		Makino Milling Machine Co., Ltd.
+000404     (base 16)		Makino Milling Machine Co., Ltd.
+				4023 Nakatsu, Aikawa-machi
+				Aiko-gun  Kanagawa  243-0303
+				JP
+
+00-03-D0   (hex)		KOANKEISO Co., Ltd.
+0003D0     (base 16)		KOANKEISO Co., Ltd.
+				Zip Code 791-8042
+				    
+				JP
+
+00-03-CF   (hex)		Muxcom, Inc.
+0003CF     (base 16)		Muxcom, Inc.
+				D 602, Bundang Technopark #151
+				Kyungki Do  KOREA  463-070
+				KR
+
+00-03-D1   (hex)		Takaya Corporation
+0003D1     (base 16)		Takaya Corporation
+				Development Division
+				    
+				JP
+
+00-03-AD   (hex)		Emerson Energy Systems AB
+0003AD     (base 16)		Emerson Energy Systems AB
+				PO Box 92113
+				    
+				SE
+
+00-03-A7   (hex)		Unixtar Technology, Inc.
+0003A7     (base 16)		Unixtar Technology, Inc.
+				13F No. 100 Ming Chuan Road
+				    TAIWAN
+				TW
+
+00-03-AE   (hex)		Allied Advanced Manufacturing Pte, Ltd.
+0003AE     (base 16)		Allied Advanced Manufacturing Pte, Ltd.
+				7 International Business Park
+				  Singapore  609919
+				SG
+
+00-03-A3   (hex)		MAVIX, Ltd.
+0003A3     (base 16)		MAVIX, Ltd.
+				POB 217, Yokneam Illit,
+				    20692
+				IL
+
+00-03-B6   (hex)		QSI Corporation
+0003B6     (base 16)		QSI Corporation
+				2212 South West Temple #50
+				Salt Lake City  UT  84115
+				US
+
+00-03-B3   (hex)		IA Link Systems Co., Ltd.
+0003B3     (base 16)		IA Link Systems Co., Ltd.
+				6F-4, No. 81 Hsin Tai
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-03-EB   (hex)		Atrica
+0003EB     (base 16)		Atrica
+				5 Shenkar St. P.O.B. 12231
+				46733  46733  
+				IL
+
+00-03-E7   (hex)		Logostek Co. Ltd.
+0003E7     (base 16)		Logostek Co. Ltd.
+				19th 15 Sunusu-Academy Tower
+				Seoul  KOREA  133-123
+				KR
+
+00-03-E3   (hex)		Cisco Systems, Inc
+0003E3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-F4   (hex)		NetBurner
+0003F4     (base 16)		NetBurner
+				5405 Morehouse Drive
+				San Diego  CA  92121
+				US
+
+00-03-F2   (hex)		Seneca Networks
+0003F2     (base 16)		Seneca Networks
+				30 West Gude Dr.
+				Rockville  MD  20850
+				US
+
+00-03-F0   (hex)		Redfern Broadband Networks
+0003F0     (base 16)		Redfern Broadband Networks
+				Level 1, 1 Central Ave.,
+				    
+				AU
+
+00-03-DB   (hex)		Apogee Electronics Corp.
+0003DB     (base 16)		Apogee Electronics Corp.
+				1715 Berkeley St. 
+				Santa Monica  CA  90405-3210
+				US
+
+00-03-D2   (hex)		Crossbeam Systems, Inc.
+0003D2     (base 16)		Crossbeam Systems, Inc.
+				80 Central Street
+				Boxborough  MA  01719
+				US
+
+00-04-05   (hex)		ACN Technologies
+000405     (base 16)		ACN Technologies
+				9F, HeyKang B/D, 157-36
+				Seoul  KOREA  #135-090
+				KR
+
+00-04-01   (hex)		Osaki Electric Co., Ltd.
+000401     (base 16)		Osaki Electric Co., Ltd.
+				1131, Fujikubo, Miyoshimachi,
+				    
+				JP
+
+00-03-A1   (hex)		HIPER Information & Communication, Inc.
+0003A1     (base 16)		HIPER Information & Communication, Inc.
+				1675-7, Sinil-dong,
+				306-230  South  Korea
+				KR
+
+00-03-96   (hex)		EZ Cast Co., Ltd.
+000396     (base 16)		EZ Cast Co., Ltd.
+				6th Floor, JungAng Building,
+				    KOREA
+				KR
+
+00-03-9A   (hex)		SiConnect
+00039A     (base 16)		SiConnect
+				Delta 100
+				Swindon    SN5 7XP
+				GB
+
+00-03-63   (hex)		Miraesys Co., Ltd.
+000363     (base 16)		Miraesys Co., Ltd.
+				650-2 4 Fl. Daemyung Bldg.
+				    135-080
+				KR
+
+00-03-5F   (hex)		Prüftechnik Condition Monitoring GmbH & Co. KG
+00035F     (base 16)		Prüftechnik Condition Monitoring GmbH & Co. KG
+				Franz-Bayer-Straße 14
+				    
+				DE
+
+00-03-60   (hex)		PAC Interactive Technology, Inc.
+000360     (base 16)		PAC Interactive Technology, Inc.
+				6F, No. 30, Alley 18, Lane 478
+				Taipei    
+				TW
+
+00-03-61   (hex)		Widcomm, Inc.
+000361     (base 16)		Widcomm, Inc.
+				9645 Scranton Road
+				San Diego  CA  92121
+				US
+
+00-03-94   (hex)		Connect One
+000394     (base 16)		Connect One
+				2 Hanagar Street
+				    
+				IL
+
+00-03-8A   (hex)		America Online, Inc.
+00038A     (base 16)		America Online, Inc.
+				44900 Prentice Drive
+				Dulles  VA  20166
+				US
+
+00-03-8D   (hex)		PCS Revenue Control Systems, Inc.
+00038D     (base 16)		PCS Revenue Control Systems, Inc.
+				560 Sylvan Ave.
+				Englewood Cliffs  NJ  07632
+				US
+
+00-03-88   (hex)		Fastfame Technology Co., Ltd.
+000388     (base 16)		Fastfame Technology Co., Ltd.
+				7F, No. 111, Hsing De Rd.,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-03-59   (hex)		DigitalSis
+000359     (base 16)		DigitalSis
+				B-1405 Samho Bldg.
+				Seocho  Seoul,  
+				KR
+
+00-03-52   (hex)		Colubris Networks
+000352     (base 16)		Colubris Networks
+				440 Armand-Frappier
+				    H7V 4B4
+				CA
+
+00-03-4C   (hex)		Shanghai DigiVision Technology Co., Ltd.
+00034C     (base 16)		Shanghai DigiVision Technology Co., Ltd.
+				11F, Heng Tong
+				  Shanghai  200050
+				CN
+
+00-03-78   (hex)		HUMAX Co., Ltd.
+000378     (base 16)		HUMAX Co., Ltd.
+				271-2, Suh-hyun-Dong,
+				    
+				KR
+
+00-03-74   (hex)		Control Microsystems
+000374     (base 16)		Control Microsystems
+				48 Steacie Drive
+				Ottawa  Ontario  K2K 2A9
+				CA
+
+00-03-76   (hex)		Graphtec Technology, Inc.
+000376     (base 16)		Graphtec Technology, Inc.
+				45 Parker, Suite A
+				Irvine  CA  92618
+				US
+
+00-03-7E   (hex)		PORTech Communications, Inc.
+00037E     (base 16)		PORTech Communications, Inc.
+				150, Shiang-Shung N. Rd.,
+				Taichung  Taiwan  403, R.O.C.
+				TW
+
+00-03-6D   (hex)		Runtop, Inc.
+00036D     (base 16)		Runtop, Inc.
+				1, Lane 21, Hsin Hua Road, Kueishan
+				    
+				TW
+
+00-03-6E   (hex)		Nicon Systems (Pty) Limited
+00036E     (base 16)		Nicon Systems (Pty) Limited
+				11 Termo Street
+				    
+				ZA
+
+00-03-71   (hex)		Acomz Networks Corp.
+000371     (base 16)		Acomz Networks Corp.
+				7th Fl., Wooseok Bldg., 1007-37
+				Seoul    156-09
+				KR
+
+00-03-49   (hex)		Vidicode Datacommunicatie B.V.
+000349     (base 16)		Vidicode Datacommunicatie B.V.
+				Postbus 7164
+				    
+				NL
+
+00-03-3E   (hex)		Tateyama System Laboratory Co., Ltd.
+00033E     (base 16)		Tateyama System Laboratory Co., Ltd.
+				30 Shimonoban Oyama-cho
+				    930-1305
+				JP
+
+00-03-3C   (hex)		Daiden Co., Ltd.
+00033C     (base 16)		Daiden Co., Ltd.
+				2100-19 Tutumi, Kamimine-machi
+				    
+				JP
+
+00-03-25   (hex)		Arima Computer Corp.
+000325     (base 16)		Arima Computer Corp.
+				6th Fl., No. 327,
+				    
+				TW
+
+00-03-1F   (hex)		Condev Ltd.
+00031F     (base 16)		Condev Ltd.
+				200-1626 West 2nd Ave.
+				    
+				CA
+
+00-02-9F   (hex)		L-3 Communication Aviation Recorders
+00029F     (base 16)		L-3 Communication Aviation Recorders
+				P.O. Box 3041
+				Sarasota  FL  34230
+				US
+
+00-03-1B   (hex)		Cellvision Systems, Inc.
+00031B     (base 16)		Cellvision Systems, Inc.
+				3F-1, 75, Hsin Taiwu Road, Sec. 1
+				    
+				TW
+
+00-03-1C   (hex)		Svenska Hardvarufabriken AB
+00031C     (base 16)		Svenska Hardvarufabriken AB
+				Ole Romersvag 16, Ideon
+				    
+				SE
+
+00-01-A8   (hex)		Welltech Computer Co., Ltd.
+0001A8     (base 16)		Welltech Computer Co., Ltd.
+				13F-4, no. 150, Jian Yi Road
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-03-0C   (hex)		Telesoft Technologies Ltd.
+00030C     (base 16)		Telesoft Technologies Ltd.
+				Observatory House, Stour Park,
+				    
+				GB
+
+00-03-08   (hex)		AM Communications, Inc.
+000308     (base 16)		AM Communications, Inc.
+				100 Commerce Blvd.
+				Quakertown  PA  18951
+				US
+
+00-03-07   (hex)		Secure Works, Inc.
+000307     (base 16)		Secure Works, Inc.
+				11 Executive Drive
+				Atlanta  GA  30329
+				US
+
+00-03-06   (hex)		Fusion In Tech Co., Ltd.
+000306     (base 16)		Fusion In Tech Co., Ltd.
+				6Fl, Daeyoon Bldg. 1688-5, Seocho-dong
+				Seoul,    
+				KR
+
+00-02-FC   (hex)		Cisco Systems, Inc
+0002FC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-FA   (hex)		DX Antenna Co., Ltd.
+0002FA     (base 16)		DX Antenna Co., Ltd.
+				2-15 Hamazaki-Dori,
+				    
+				JP
+
+00-02-FB   (hex)		Baumuller Aulugen-Systemtechnik GmbH
+0002FB     (base 16)		Baumuller Aulugen-Systemtechnik GmbH
+				Ostendsts. 84
+				    
+				DE
+
+00-02-F6   (hex)		Equipe Communications
+0002F6     (base 16)		Equipe Communications
+				100 Nagog Park
+				Acton  MA  01720
+				US
+
+00-02-23   (hex)		ClickTV
+000223     (base 16)		ClickTV
+				Kemong Bldg., 4th Fl.,
+				Seoul  Korea  135-010
+				KR
+
+00-02-CB   (hex)		TriState Ltd.
+0002CB     (base 16)		TriState Ltd.
+				Shinonaga Blg. 4-11-19 Hokko-cho
+				053-0852  053-0852  
+				JP
+
+00-02-CA   (hex)		EndPoints, Inc.
+0002CA     (base 16)		EndPoints, Inc.
+				4 Preston Court
+				Bedford  MA  01730
+				US
+
+00-03-2A   (hex)		UniData Communication Systems, Inc.
+00032A     (base 16)		UniData Communication Systems, Inc.
+				2F, OhSung-Bldg, 82-15,
+				    
+				KR
+
+00-02-BF   (hex)		dotRocket, Inc.
+0002BF     (base 16)		dotRocket, Inc.
+				1901 S. Bascom, Suite 300
+				Campbell  CA  95008
+				US
+
+00-03-17   (hex)		Merlin Systems, Inc.
+000317     (base 16)		Merlin Systems, Inc.
+				3900 New Park Mall Rd.
+				Newark  CA  94560
+				US
+
+00-03-18   (hex)		Cyras Systems, Inc.
+000318     (base 16)		Cyras Systems, Inc.
+				47100 Bayside Parkway
+				Fremont  CA  94538
+				US
+
+00-02-E3   (hex)		LITE-ON Communications, Inc.
+0002E3     (base 16)		LITE-ON Communications, Inc.
+				736 S. Hillview Drive
+				Milpitas  CA  95035
+				US
+
+00-02-DD   (hex)		Bromax Communications, Ltd.
+0002DD     (base 16)		Bromax Communications, Ltd.
+				No. 20 Kuang Fu Road,
+				Hsin Chu 303    
+				TW
+
+00-02-47   (hex)		Great Dragon Information Technology (Group) Co., Ltd.
+000247     (base 16)		Great Dragon Information Technology (Group) Co., Ltd.
+				169 Beiyuan Rd.,
+				Beijing  100101,  
+				CN
+
+00-02-43   (hex)		Raysis Co., Ltd.
+000243     (base 16)		Raysis Co., Ltd.
+				997-10, Daechi-Dong, Kangnam-Ku,
+				Seoul  135-280,  South Korea
+				KR
+
+00-02-31   (hex)		Ingersoll-Rand
+000231     (base 16)		Ingersoll-Rand
+				1467 Route 31 South
+				Annandale  NJ  08801
+				US
+
+00-02-66   (hex)		Thermalogic Corporation
+000266     (base 16)		Thermalogic Corporation
+				22 Kane Industrial Drive
+				Hudson  MA  01749
+				US
+
+00-02-68   (hex)		Harris Government Communications
+000268     (base 16)		Harris Government Communications
+				Systems Division
+				Melbourne  FL  32902
+				US
+
+00-02-5E   (hex)		High Technology Ltd
+00025E     (base 16)		High Technology Ltd
+				Chongqing Jinghong
+				People's Republic  of  
+				CN
+
+00-02-60   (hex)		Accordion Networks, Inc.
+000260     (base 16)		Accordion Networks, Inc.
+				39899 Balentine Drive, #335
+				Newark  CA  94560
+				US
+
+00-02-83   (hex)		Spectrum Controls, Inc.
+000283     (base 16)		Spectrum Controls, Inc.
+				PO Box 5533
+				Bellevue  WA  98006
+				US
+
+00-02-84   (hex)		UK Grid Solutions Limited
+000284     (base 16)		UK Grid Solutions Limited
+				St Leonards Building  Redhill Business Park
+				Stafford    ST16 1TW
+				GB
+
+00-02-80   (hex)		Mu Net, Inc.
+000280     (base 16)		Mu Net, Inc.
+				442 Marrett Road
+				Lexington  MA  02421
+				US
+
+00-90-64   (hex)		Thomson Inc.
+009064     (base 16)		Thomson Inc.
+				101 West 103rd Street
+				Indianapolis  IN  46290-1102
+				US
+
+00-02-7A   (hex)		IOI Technology Corporation
+00027A     (base 16)		IOI Technology Corporation
+				4F-3 No. 125 Lane 235,
+				Taipei  TAIWAN,  R.O.C.
+				TW
+
+00-02-74   (hex)		Tommy Technologies Corp.
+000274     (base 16)		Tommy Technologies Corp.
+				#407 Heehoon Bld
+				Seoul  Seoul  KOREA
+				KR
+
+00-02-9E   (hex)		Information Equipment Co., Ltd.
+00029E     (base 16)		Information Equipment Co., Ltd.
+				740-1 Eaho Bldg., Yeok Sam-Dong
+				Seoul  Korea  #135-080
+				KR
+
+00-02-9B   (hex)		Kreatel Communications AB
+00029B     (base 16)		Kreatel Communications AB
+				Teknikringen 4C
+				    
+				SE
+
+00-02-95   (hex)		IP.Access Limited
+000295     (base 16)		IP.Access Limited
+				Melbourn Science Park
+				SG8 6EE  SG8 6EE  U.K.
+				GB
+
+00-02-72   (hex)		CC&C Technologies, Inc.
+000272     (base 16)		CC&C Technologies, Inc.
+				8F, 150, Chien I Rd., Chung Ho City,
+				Taipei County 235  Taiwan  R.O.C.
+				TW
+
+00-02-6D   (hex)		Adept Telecom
+00026D     (base 16)		Adept Telecom
+				Avenue de l'Europe
+				    
+				FR
+
+00-02-6B   (hex)		BCM Computers Co., Ltd.
+00026B     (base 16)		BCM Computers Co., Ltd.
+				6F-6, No. 66, Sec 2,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-02-93   (hex)		Solid Data Systems
+000293     (base 16)		Solid Data Systems
+				2945 Oakmead Village Court
+				Santa Clara  CA  95051
+				US
+
+00-02-89   (hex)		DNE Technologies
+000289     (base 16)		DNE Technologies
+				50 Barnes Park N
+				Wallingford  CT  06492
+				US
+
+00-01-2F   (hex)		Twinhead International Corp
+00012F     (base 16)		Twinhead International Corp
+				2FL, 2, Lane 235, Bao-Chiao Road
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-02-A7   (hex)		Vivace Networks
+0002A7     (base 16)		Vivace Networks
+				2730 Orchard Parkway
+				San Jose  CA  95134
+				US
+
+00-01-B2   (hex)		Digital Processing Systems, Inc.
+0001B2     (base 16)		Digital Processing Systems, Inc.
+				70 Valleywood Drive
+				  L3R  4T5
+				CA
+
+00-01-B8   (hex)		Netsensity, Inc.
+0001B8     (base 16)		Netsensity, Inc.
+				PO Box 1060
+				Lake Forest  CA  92630
+				US
+
+00-01-B9   (hex)		SKF (U.K.) Limited
+0001B9     (base 16)		SKF (U.K.) Limited
+				2 Michaelson Square Kirkton Campus
+				Livingston    West Lothian  EH54 7DP
+				GB
+
+00-01-B3   (hex)		Precision Electronic Manufacturing
+0001B3     (base 16)		Precision Electronic Manufacturing
+				P0187, P.O. 527948
+				Miami  FL  33152-7948
+				US
+
+00-01-BD   (hex)		Peterson Electro-Musical Products, Inc.
+0001BD     (base 16)		Peterson Electro-Musical Products, Inc.
+				11601 S. Mayfield Avenue
+				Alsip  IL  60803-2476
+				US
+
+00-02-09   (hex)		Shenzhen SED Information Technology Co., Ltd.
+000209     (base 16)		Shenzhen SED Information Technology Co., Ltd.
+				4/F., West Block, Block 414, Zhenhua Rd.
+				    
+				CN
+
+00-02-02   (hex)		Amino Communications, Ltd.
+000202     (base 16)		Amino Communications, Ltd.
+				Times House
+				UK  CB4  5LH
+				GB
+
+00-02-01   (hex)		IFM Electronic gmbh
+000201     (base 16)		IFM Electronic gmbh
+				Bechlingen 34
+				    
+				DE
+
+00-02-34   (hex)		Imperial Technology, Inc.
+000234     (base 16)		Imperial Technology, Inc.
+				2305 Utah Avenue
+				El Segundo  CA  90245
+				US
+
+00-02-36   (hex)		INIT GmbH
+000236     (base 16)		INIT GmbH
+				Kaeppelestraße 6
+				    
+				DE
+
+00-02-2B   (hex)		SAXA, Inc.
+00022B     (base 16)		SAXA, Inc.
+				NBF Platinum Tower 1-17-3 Shirokane
+				Minato-ku  Tokyo  108-8050
+				JP
+
+00-02-24   (hex)		C-COR
+000224     (base 16)		C-COR
+				15 Sterling Drive
+				Wallingford  CT  06492
+				US
+
+00-02-1F   (hex)		Aculab PLC
+00021F     (base 16)		Aculab PLC
+				Lakeside, Bramley Road
+				Milton Keynes    MK1 1PT
+				GB
+
+00-02-1A   (hex)		Zuma Networks
+00021A     (base 16)		Zuma Networks
+				8403 Fallbrook Ave.
+				West Hills  CA  91304
+				US
+
+00-01-CA   (hex)		Geocast Network Systems, Inc.
+0001CA     (base 16)		Geocast Network Systems, Inc.
+				190 Independence Drive
+				Menlo Park  CA  94025
+				US
+
+00-01-D1   (hex)		CoNet Communications, Inc.
+0001D1     (base 16)		CoNet Communications, Inc.
+				25 Mauchly, #320
+				Irvine  CA  92618
+				US
+
+00-02-22   (hex)		Chromisys, Inc.
+000222     (base 16)		Chromisys, Inc.
+				1012 Stewart Drive
+				Sunnyvale  CA  94086
+				US
+
+00-02-13   (hex)		S.D.E.L.
+000213     (base 16)		S.D.E.L.
+				Aeropole D2A
+				    
+				FR
+
+00-01-DB   (hex)		Freecom Technologies GmbH
+0001DB     (base 16)		Freecom Technologies GmbH
+				Obentrautstraße 72
+				    
+				DE
+
+00-01-DF   (hex)		ISDN Communications, Ltd.
+0001DF     (base 16)		ISDN Communications, Ltd.
+				The Stable Block, Ronans
+				    ENGLAND
+				GB
+
+00-01-EF   (hex)		Camtel Technology Corp.
+0001EF     (base 16)		Camtel Technology Corp.
+				No. 2, Wu-Kung 5 Rd., Wu-Ku
+				Taiwan  Taiwan  R.O.C.
+				TW
+
+00-02-0A   (hex)		Gefran Spa
+00020A     (base 16)		Gefran Spa
+				Via Sebina, 74
+				    
+				IT
+
+00-02-06   (hex)		Telital R&D Denmark A/S
+000206     (base 16)		Telital R&D Denmark A/S
+				9530 Stouring
+				    
+				DK
+
+00-01-79   (hex)		WIRELESS TECHNOLOGY, INC.
+000179     (base 16)		WIRELESS TECHNOLOGY, INC.
+				Anam Bldg. 2Fl, 154-17
+				    KOREA
+				KR
+
+00-01-60   (hex)		ELMEX Co., LTD.
+000160     (base 16)		ELMEX Co., LTD.
+				16-30 Kimachi
+				    
+				JP
+
+00-01-4E   (hex)		WIN Enterprises, Inc.
+00014E     (base 16)		WIN Enterprises, Inc.
+				300 Willow Street South
+				North Andover  MA  01845
+				US
+
+00-30-73   (hex)		International Microsystems, In
+003073     (base 16)		International Microsystems, In
+				521 Valley Way
+				Milpitas  CA  95035
+				US
+
+00-30-3F   (hex)		TurboComm Tech Inc.
+00303F     (base 16)		TurboComm Tech Inc.
+				4F-2, No 171, Sung-Tch Road
+				Taipei    
+				TW
+
+00-01-84   (hex)		SIEB & MEYER AG
+000184     (base 16)		SIEB & MEYER AG
+				Auf dem Schmaarkamp 21
+				    
+				DE
+
+00-01-95   (hex)		Sena Technologies, Inc.
+000195     (base 16)		Sena Technologies, Inc.
+				116-23 Shinlim-dong
+				    KOREA
+				KR
+
+00-01-A4   (hex)		Microlink Corporation
+0001A4     (base 16)		Microlink Corporation
+				11110 Ohio Ave., - Ste. #108
+				Los Angeles  CA  90034
+				US
+
+00-01-8E   (hex)		Logitec Corporation
+00018E     (base 16)		Logitec Corporation
+				8268 Rokudouhara, Misuzu
+				    
+				JP
+
+00-01-6D   (hex)		CarrierComm Inc.
+00016D     (base 16)		CarrierComm Inc.
+				2231 Rutherford, Suite 110
+				Carlsbad  CA  92008
+				US
+
+00-01-6F   (hex)		Inkel Corp.
+00016F     (base 16)		Inkel Corp.
+				CheongCheon-Dong, BuPyeong-Gu,
+				Incheon-Si    
+				KR
+
+00-01-70   (hex)		ESE Embedded System Engineer'g
+000170     (base 16)		ESE Embedded System Engineer'g
+				Mühlbachstraße 20
+				    
+				DE
+
+00-01-6A   (hex)		ALITEC
+00016A     (base 16)		ALITEC
+				Laval Technopole B.P. 102
+				    
+				FR
+
+00-01-53   (hex)		ARCHTEK TELECOM CORPORATION
+000153     (base 16)		ARCHTEK TELECOM CORPORATION
+				4F, No.9 Lane 130, Min-Chyuan Rd.
+				  231  TAIWAN
+				TW
+
+00-01-35   (hex)		KDC Corp.
+000135     (base 16)		KDC Corp.
+				200-11 AnYang 7 dong
+				    KOREA
+				KR
+
+00-01-41   (hex)		CABLE PRINT
+000141     (base 16)		CABLE PRINT
+				Jozef Cardynstraat 16
+				    
+				BE
+
+00-01-65   (hex)		AirSwitch Corporation
+000165     (base 16)		AirSwitch Corporation
+				37East 200South
+				Springville  UT  84663
+				US
+
+00-01-56   (hex)		FIREWIREDIRECT.COM, INC.
+000156     (base 16)		FIREWIREDIRECT.COM, INC.
+				4132 Spicewood Springs Rd - #I-4
+				Austin  TX  78759
+				US
+
+00-01-B7   (hex)		Centos, Inc.
+0001B7     (base 16)		Centos, Inc.
+				6F-1, NO. 15, LANE 360
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-01-B5   (hex)		Turin Networks, Inc.
+0001B5     (base 16)		Turin Networks, Inc.
+				1415 North McDowell Blvd.
+				Petaluma  CA  94954
+				US
+
+00-01-83   (hex)		ANITE TELECOMS
+000183     (base 16)		ANITE TELECOMS
+				127 Fleet Road, Fleet
+				  UNITED  KINGDOM
+				GB
+
+00-01-7E   (hex)		ADTEK System Science Co., Ltd.
+00017E     (base 16)		ADTEK System Science Co., Ltd.
+				YBP West Tower
+				  Hodogaya Yokohama  
+				JP
+
+00-01-0C   (hex)		System Talks Inc.
+00010C     (base 16)		System Talks Inc.
+				4F, PrimeNihonbashi Bld.
+				Chuo-ku Tokyo    
+				JP
+
+00-01-11   (hex)		iDigm Inc.
+000111     (base 16)		iDigm Inc.
+				7FL Sindo B/D 1604-22 Seocho-Dong
+				Seoul 137-070    
+				KR
+
+00-01-07   (hex)		Leiser GmbH
+000107     (base 16)		Leiser GmbH
+				Ilmstr. 7
+				85579 Neubiberg    
+				DE
+
+00-01-14   (hex)		KANDA TSUSHIN KOGYO CO., LTD.
+000114     (base 16)		KANDA TSUSHIN KOGYO CO., LTD.
+				23-2, Nishi-Gotanda 2-chome,
+				Tokyo 141-8533    
+				JP
+
+00-B0-F5   (hex)		NetWorth Technologies, Inc.
+00B0F5     (base 16)		NetWorth Technologies, Inc.
+				1000 Germantown Pike
+				Plymouth Metting  PA  19462
+				US
+
+00-B0-DB   (hex)		Nextcell, Inc.
+00B0DB     (base 16)		Nextcell, Inc.
+				651 East 18th Street
+				Plano  TX  75074
+				US
+
+00-B0-AE   (hex)		Symmetricom
+00B0AE     (base 16)		Symmetricom
+				2300 Orchard Parkway
+				San Jose  CA  95131
+				US
+
+00-B0-E7   (hex)		British Federal Ltd.
+00B0E7     (base 16)		British Federal Ltd.
+				Castle Mill Works
+				Dudley DY1 4DA  England  
+				GB
+
+00-B0-8E   (hex)		Cisco Systems, Inc
+00B08E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-5C   (hex)		SMAR Laboratories Corp.
+00305C     (base 16)		SMAR Laboratories Corp.
+				10960 Millridge North - Ste. #107
+				Houston  TX  77070
+				US
+
+00-30-04   (hex)		LEADTEK RESEARCH INC.
+003004     (base 16)		LEADTEK RESEARCH INC.
+				18F, No.166, Chien-Yi Road
+				Hsien    
+				TW
+
+00-30-F9   (hex)		Sollae Systems Co., Ltd.
+0030F9     (base 16)		Sollae Systems Co., Ltd.
+				607 Incheo IT Tower
+				Nam-gu  Incheon  
+				KR
+
+00-01-18   (hex)		EZ Digital Co., Ltd.
+000118     (base 16)		EZ Digital Co., Ltd.
+				Bitville Bldg. Room 703
+				Seoul    
+				KR
+
+00-01-1C   (hex)		Universal Talkware Corporation
+00011C     (base 16)		Universal Talkware Corporation
+				10 Second St. NE
+				Minneapolis  MN  55413
+				US
+
+00-01-28   (hex)		EnjoyWeb, Inc.
+000128     (base 16)		EnjoyWeb, Inc.
+				3000 Scott Blvd. #107
+				Santa Clara  CA  95054
+				US
+
+00-01-46   (hex)		Tesco Controls, Inc.
+000146     (base 16)		Tesco Controls, Inc.
+				P.O. Box 239012
+				Sacramento  CA  95823-9012
+				US
+
+00-01-49   (hex)		TDT AG
+000149     (base 16)		TDT AG
+				Siemensstraße 18
+				Essenbach    84051
+				DE
+
+00-01-31   (hex)		Bosch Security Systems, Inc.
+000131     (base 16)		Bosch Security Systems, Inc.
+				130 Perinton Parkway
+				Fairport  NY  14450
+				US
+
+00-30-BE   (hex)		City-Net Technology, Inc.
+0030BE     (base 16)		City-Net Technology, Inc.
+				135 E. Chesnut Ave., Ste.
+				Monrovia  CA  91016
+				US
+
+00-30-02   (hex)		Expand Networks
+003002     (base 16)		Expand Networks
+				Atidim Tech Park, Bldg. 4
+				Tel-Aviv 61580    
+				IL
+
+00-30-78   (hex)		Cisco Systems, Inc
+003078     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-B0-EC   (hex)		EACEM
+00B0EC     (base 16)		EACEM
+				Avenue Louise 140, Bte 6
+				B-1050 BRUSSELS    
+				BE
+
+00-B0-DF   (hex)		Starboard Storage Systems
+00B0DF     (base 16)		Starboard Storage Systems
+				12303 Airport Way
+				Broomfield  Co  80021
+				US
+
+00-01-0B   (hex)		Space CyberLink, Inc.
+00010B     (base 16)		Space CyberLink, Inc.
+				5th Fl. Guppyung Town B
+				Seoul    
+				KR
+
+00-30-9C   (hex)		Timing Applications, Inc.
+00309C     (base 16)		Timing Applications, Inc.
+				4775 Walnut St.
+				Boulder  CO  80301
+				US
+
+00-30-7E   (hex)		Redflex Communication Systems
+00307E     (base 16)		Redflex Communication Systems
+				11-29 Eastern Road
+				South Melbourne  Victoria 3205  
+				AU
+
+00-30-4F   (hex)		PLANET Technology Corporation
+00304F     (base 16)		PLANET Technology Corporation
+				11F, No. 96, Min-Chuan Road
+				Hsin-Tien Dist., New Taipei City    
+				TW
+
+00-30-22   (hex)		Fong Kai Industrial Co., Ltd.
+003022     (base 16)		Fong Kai Industrial Co., Ltd.
+				4F-3, No. 13, Wu Chuan 1st Road
+				Hsin Chuang City, Taipei Hsien    
+				TW
+
+00-30-70   (hex)		1Net Corporation
+003070     (base 16)		1Net Corporation
+				347 Elizabeth Avenue - Ste. #100
+				Somerset  NJ  08873
+				US
+
+00-30-F8   (hex)		Dynapro Systems, Inc.
+0030F8     (base 16)		Dynapro Systems, Inc.
+				800 Carleton Court
+				New Westminster  British Columbia V3M 6L3  
+				CA
+
+00-30-B7   (hex)		Teletrol Systems, Inc.
+0030B7     (base 16)		Teletrol Systems, Inc.
+				Technology Center
+				Manchester  NH  03101
+				US
+
+00-30-B3   (hex)		San Valley Systems, Inc.
+0030B3     (base 16)		San Valley Systems, Inc.
+				2105 S. Bascom Ave. - Ste. #390
+				Campbell  CA  95008
+				US
+
+00-30-09   (hex)		Tachion Networks, Inc.
+003009     (base 16)		Tachion Networks, Inc.
+				2 Meridian Road
+				Eatontown  NJ  07724
+				US
+
+00-30-7A   (hex)		Advanced Technology & Systems
+00307A     (base 16)		Advanced Technology & Systems
+				Yokohama Business Park East Tower 9F,
+				    240-0005
+				JP
+
+00-30-61   (hex)		MobyTEL
+003061     (base 16)		MobyTEL
+				4301 Connecticut Ave. NW
+				Washington  DC  20008
+				US
+
+00-30-0B   (hex)		mPHASE Technologies, Inc.
+00300B     (base 16)		mPHASE Technologies, Inc.
+				250 14th Street
+				Atlanta  GA  30318
+				US
+
+00-30-8F   (hex)		MICRILOR, Inc.
+00308F     (base 16)		MICRILOR, Inc.
+				17 Lakeside Office Park
+				Wakefield  MA  01880
+				US
+
+00-30-50   (hex)		Versa Technology
+003050     (base 16)		Versa Technology
+				4430 E. Miraloma Ave., - Ste.
+				Anaheim  CA  92807
+				US
+
+00-30-C0   (hex)		Lara Technology, Inc.
+0030C0     (base 16)		Lara Technology, Inc.
+				2345 North First Street
+				San Jose  CA  95131
+				US
+
+00-30-05   (hex)		Fujitsu Siemens Computers
+003005     (base 16)		Fujitsu Siemens Computers
+				Buergermeister ulrich 100
+				86199 Augsburg    
+				DE
+
+00-30-E0   (hex)		OXFORD SEMICONDUCTOR LTD.
+0030E0     (base 16)		OXFORD SEMICONDUCTOR LTD.
+				25 MILTON PARK
+				Abingdon  Oxon  OX14 4SH
+				GB
+
+00-30-64   (hex)		ADLINK TECHNOLOGY, INC.
+003064     (base 16)		ADLINK TECHNOLOGY, INC.
+				9F, NO. 166, JIEN-YI R.D.
+				CHUNG-HO CITY TAIPEI    
+				TW
+
+00-30-DB   (hex)		Mindready Solutions, Inc.
+0030DB     (base 16)		Mindready Solutions, Inc.
+				2800 Marie-Curie Avenue
+				Quebec    H4S 2C2
+				CA
+
+00-30-E7   (hex)		CNF MOBILE SOLUTIONS, INC.
+0030E7     (base 16)		CNF MOBILE SOLUTIONS, INC.
+				7722 E. GRAY ROAD
+				SCOTTSDALE  AZ  85260
+				US
+
+00-30-B4   (hex)		INTERSIL CORP.
+0030B4     (base 16)		INTERSIL CORP.
+				P.O. BOX 883
+				MELBOURNE  FL  32902
+				US
+
+00-30-B1   (hex)		TrunkNet
+0030B1     (base 16)		TrunkNet
+				Aubergenviller Allee 51
+				Dieburg    D-64807
+				DE
+
+00-30-60   (hex)		Powerfile, Inc.
+003060     (base 16)		Powerfile, Inc.
+				3350 Thomas Road
+				Santa Clara  CA  95054-2062
+				US
+
+00-30-A0   (hex)		TYCO SUBMARINE SYSTEMS, LTD.
+0030A0     (base 16)		TYCO SUBMARINE SYSTEMS, LTD.
+				250 INDUSTRIAL WAY WEST
+				EATONTOWN  NJ  07724
+				US
+
+00-30-15   (hex)		CP CLARE CORP.
+003015     (base 16)		CP CLARE CORP.
+				78 CHERRY HILL DRIVE
+				BEVERLY  MA  01915
+				US
+
+00-30-1F   (hex)		OPTICAL NETWORKS, INC.
+00301F     (base 16)		OPTICAL NETWORKS, INC.
+				166 BAYPOINTE PARKWAY
+				SAN JOSE  CA  95134
+				US
+
+00-30-FA   (hex)		TELICA, INC.
+0030FA     (base 16)		TELICA, INC.
+				734 FOREST STREET, BLDG.
+				MARLBORO  MA  01752
+				US
+
+00-30-4B   (hex)		ORBACOM SYSTEMS, INC.
+00304B     (base 16)		ORBACOM SYSTEMS, INC.
+				1704 TAYLORS LANE
+				CINNAMINSON  NJ  08077
+				US
+
+00-30-E9   (hex)		GMA COMMUNICATION MANUFACT'G
+0030E9     (base 16)		GMA COMMUNICATION MANUFACT'G
+				MARKETING, (1991) LTD.
+				ISRAEL  ISRAEL  49130
+				IL
+
+00-30-A5   (hex)		ACTIVE POWER
+0030A5     (base 16)		ACTIVE POWER
+				11525 STONEHOLLOW - STE.#255
+				AUSTIN  TX  78758
+				US
+
+00-30-84   (hex)		ALLIED TELESYN INTERNAIONAL
+003084     (base 16)		ALLIED TELESYN INTERNAIONAL
+				CORPORATION
+				SUNNYVALE  CA  94086
+				US
+
+00-30-43   (hex)		IDREAM TECHNOLOGIES, PTE. LTD.
+003043     (base 16)		IDREAM TECHNOLOGIES, PTE. LTD.
+				54 KALLANG BAHRU, #02-14
+				    
+				SG
+
+00-30-00   (hex)		ALLWELL TECHNOLOGY CORP.
+003000     (base 16)		ALLWELL TECHNOLOGY CORP.
+				4F, #15, LANE3, SEC.2
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-30-11   (hex)		HMS Industrial Networks   
+003011     (base 16)		HMS Industrial Networks   
+				P O Box 4126
+				    SE-300 04
+				SE
+
+00-30-68   (hex)		CYBERNETICS TECH. CO., LTD.
+003068     (base 16)		CYBERNETICS TECH. CO., LTD.
+				DAITOH BLDG. 4F 3-32-1
+				  JAPAN  171-0033
+				JP
+
+00-30-91   (hex)		TAIWAN FIRST LINE ELEC. CORP.
+003091     (base 16)		TAIWAN FIRST LINE ELEC. CORP.
+				40 Chung-Shan Road
+				Taipei County    
+				TW
+
+00-30-CD   (hex)		CONEXANT SYSTEMS, INC.
+0030CD     (base 16)		CONEXANT SYSTEMS, INC.
+				4311 JAMBOREE ROAD
+				NEWPORT BEACH  CA  92660
+				US
+
+00-30-1A   (hex)		SMARTBRIDGES PTE. LTD.
+00301A     (base 16)		SMARTBRIDGES PTE. LTD.
+				745 Toa Payoh Lorong 5
+				    319455
+				SG
+
+00-30-29   (hex)		OPICOM
+003029     (base 16)		OPICOM
+				ROOM #302, STYLE FACTORY 151
+				    KOREA
+				KR
+
+00-30-83   (hex)		Ivron Systems
+003083     (base 16)		Ivron Systems
+				19-20 YORK ROAD
+				    
+				IE
+
+00-30-B6   (hex)		Cisco Systems, Inc
+0030B6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-C7   (hex)		Macromate Corp.
+0030C7     (base 16)		Macromate Corp.
+				8F,Universal Center,Number 179
+				Taipei  Hsien  
+				TW
+
+00-30-E4   (hex)		CHIYODA SYSTEM RIKEN
+0030E4     (base 16)		CHIYODA SYSTEM RIKEN
+				2-7, KANDA-NISHIKI-CHO
+				    
+				JP
+
+00-30-66   (hex)		RFM
+003066     (base 16)		RFM
+				3079 Premiere Pkwy
+				Duluth  GA  30097
+				US
+
+00-30-31   (hex)		LIGHTWAVE COMMUNICATIONS, INC.
+003031     (base 16)		LIGHTWAVE COMMUNICATIONS, INC.
+				261 PEPE'S FARM ROAD
+				MILFORD  CT  06460
+				US
+
+00-D0-07   (hex)		MIC ASSOCIATES, INC.
+00D007     (base 16)		MIC ASSOCIATES, INC.
+				1510-1, KAIDOKI
+				JAPAN  JAPAN  206-0012
+				JP
+
+00-D0-FF   (hex)		Cisco Systems, Inc
+00D0FF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-28   (hex)		Harmonic, Inc
+00D028     (base 16)		Harmonic, Inc
+				965 Stewart Drive
+				Sunnyvale  CA  94086-3913
+				US
+
+00-D0-25   (hex)		XROSSTECH, INC.
+00D025     (base 16)		XROSSTECH, INC.
+				HABDONG B/D 5F 210-2
+				    KOREA
+				KR
+
+00-D0-44   (hex)		ALIDIAN NETWORKS, INC.
+00D044     (base 16)		ALIDIAN NETWORKS, INC.
+				1330 W. MIDDLEFIELD ROAD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-30-5B   (hex)		Toko Inc.
+00305B     (base 16)		Toko Inc.
+				18 COMIGAYA, TSURUGASHIMA-SHI
+				  JAPAN  350-2281
+				JP
+
+00-D0-49   (hex)		IMPRESSTEK CO., LTD.
+00D049     (base 16)		IMPRESSTEK CO., LTD.
+				6F, SPECIALTY CONSTRUCTION CTR
+				302-120  KOREA  (REP.)
+				KR
+
+00-D0-5B   (hex)		ACROLOOP MOTION CONTROL
+00D05B     (base 16)		ACROLOOP MOTION CONTROL
+				SYSTEMS
+				CHASKA  MN  55318
+				US
+
+00-D0-42   (hex)		MAHLO GMBH & CO. UG
+00D042     (base 16)		MAHLO GMBH & CO. UG
+				DONAUSTRASSE 12
+				    
+				DE
+
+00-D0-31   (hex)		INDUSTRIAL LOGIC CORPORATION
+00D031     (base 16)		INDUSTRIAL LOGIC CORPORATION
+				15 PIEDMONT CENTER-STE #700
+				ATLANTA  GA  30305
+				US
+
+00-D0-38   (hex)		FIVEMERE, LTD.
+00D038     (base 16)		FIVEMERE, LTD.
+				UNIT 1-HERON INDUSTRIAL ESTATE
+				RG7  1PJ  ENGLAND
+				GB
+
+00-D0-C6   (hex)		THOMAS & BETTS CORP.
+00D0C6     (base 16)		THOMAS & BETTS CORP.
+				Thomas & Betts Aust. Pty. Ltd.
+				Lidcombe  New South Wales  
+				AU
+
+00-D0-77   (hex)		LUCENT TECHNOLOGIES
+00D077     (base 16)		LUCENT TECHNOLOGIES
+				CLIENT ACCESS BUSINESS UNIT
+				HOLMDEL  NJ  07733
+				US
+
+00-D0-3E   (hex)		ROCKETCHIPS, INC.
+00D03E     (base 16)		ROCKETCHIPS, INC.
+				7901 XERXES AVE. S.
+				MINNEAPOLIS  MN  55431
+				US
+
+00-D0-93   (hex)		TQ - COMPONENTS GMBH
+00D093     (base 16)		TQ - COMPONENTS GMBH
+				GUT DELLING - MUHLSTR 2
+				    
+				DE
+
+00-D0-3F   (hex)		AMERICAN COMMUNICATION
+00D03F     (base 16)		AMERICAN COMMUNICATION
+				TECHNOLIGIES INTERNATIONAL INC
+				ROHNERT PARK  CA  94928
+				US
+
+00-D0-F7   (hex)		NEXT NETS CORPORATION
+00D0F7     (base 16)		NEXT NETS CORPORATION
+				MITA KOKUSAI BLDG. 17F
+				    
+				JP
+
+00-D0-6F   (hex)		KMC CONTROLS
+00D06F     (base 16)		KMC CONTROLS
+				P.O. BOX 497
+				NEW PARIS  IN  46553
+				US
+
+00-D0-FC   (hex)		GRANITE MICROSYSTEMS
+00D0FC     (base 16)		GRANITE MICROSYSTEMS
+				10202 N. ENTERPRISE DRIVE
+				MEQUON  WI  53092
+				US
+
+00-D0-A6   (hex)		LANBIRD TECHNOLOGY CO., LTD.
+00D0A6     (base 16)		LANBIRD TECHNOLOGY CO., LTD.
+				ROOM A-211, S.B.I.
+				  KOREA  157-030
+				KR
+
+00-D0-03   (hex)		COMDA ENTERPRISES CORP.
+00D003     (base 16)		COMDA ENTERPRISES CORP.
+				2F, NO. 501-18, CHUNGCHEN ROAD
+				TAIWAN  TAIWAN  ROC
+				TW
+
+00-D0-D2   (hex)		EPILOG CORPORATION
+00D0D2     (base 16)		EPILOG CORPORATION
+				500 CORPORATE CIRCLE - STE.
+				GOLDEN  CO  80401
+				US
+
+00-D0-F9   (hex)		ACUTE COMMUNICATIONS CORP.
+00D0F9     (base 16)		ACUTE COMMUNICATIONS CORP.
+				NO. 1, CREATION ROAD III
+				    TAIWAN
+				TW
+
+00-D0-CE   (hex)		iSystem Labs 
+00D0CE     (base 16)		iSystem Labs 
+				BRODISCE 7, 10C 
+				Trzin    1236
+				SI
+
+00-D0-18   (hex)		QWES. COM, INC.
+00D018     (base 16)		QWES. COM, INC.
+				14742 NEWPORT AVE. - STE. #203
+				TUSTIN  CA  92780
+				US
+
+00-01-A7   (hex)		UNEX TECHNOLOGY CORPORATION
+0001A7     (base 16)		UNEX TECHNOLOGY CORPORATION
+				8F-5, #130, SZE WEI RD.,
+				HSINCHU    
+				TW
+
+00-D0-8C   (hex)		GENOA TECHNOLOGY, INC.
+00D08C     (base 16)		GENOA TECHNOLOGY, INC.
+				5401 TECH CIRCLE
+				MOORPARK  CA  93021
+				US
+
+00-D0-59   (hex)		AMBIT MICROSYSTEMS CORP.
+00D059     (base 16)		AMBIT MICROSYSTEMS CORP.
+				5F-1, 5 HSIN-AN ROAD
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-D0-FD   (hex)		OPTIMA TELE.COM, INC.
+00D0FD     (base 16)		OPTIMA TELE.COM, INC.
+				4-20 Cachet Woods Court
+				Markham  ON  L6C 3G1
+				CA
+
+00-D0-A9   (hex)		SHINANO KENSHI CO., LTD.
+00D0A9     (base 16)		SHINANO KENSHI CO., LTD.
+				ELECTRONIC EQUIPMENT DIVISION
+				    
+				JP
+
+00-D0-DD   (hex)		SUNRISE TELECOM, INC.
+00D0DD     (base 16)		SUNRISE TELECOM, INC.
+				22 GREAT OAKS BLVD.
+				SAN JOSE  CA  95119
+				US
+
+00-D0-E6   (hex)		IBOND INC.
+00D0E6     (base 16)		IBOND INC.
+				3160, DE LA CRUZ BLVD.
+				SANTA CLARA  CA  95054
+				US
+
+00-D0-D1   (hex)		Sycamore Networks
+00D0D1     (base 16)		Sycamore Networks
+				220 Mill Rd
+				Chelmsford  MA  01824
+				US
+
+00-D0-87   (hex)		MICROFIRST INC.
+00D087     (base 16)		MICROFIRST INC.
+				11 EAST OAK STREET
+				OAKLAND  NJ  07436
+				US
+
+00-D0-80   (hex)		EXABYTE CORPORATION
+00D080     (base 16)		EXABYTE CORPORATION
+				1685 38TH STREET
+				BOULDER  CO  80301
+				US
+
+00-D0-91   (hex)		SMARTSAN SYSTEMS, INC.
+00D091     (base 16)		SMARTSAN SYSTEMS, INC.
+				4655 OLD IRONSIDES DR. #480
+				SANTA CLARA  CA  95054
+				US
+
+00-D0-4E   (hex)		LOGIBAG
+00D04E     (base 16)		LOGIBAG
+				2, Rue de la Mandinière
+				    
+				FR
+
+00-D0-27   (hex)		APPLIED AUTOMATION, INC.
+00D027     (base 16)		APPLIED AUTOMATION, INC.
+				P.O. BOX 9999
+				BARTLESVILLE  OK  74005-9999
+				US
+
+00-D0-72   (hex)		BROADLOGIC
+00D072     (base 16)		BROADLOGIC
+				463 S. MILPITAS BLVD.
+				MILPITAS  CA  95035
+				US
+
+00-D0-E2   (hex)		MRT MICRO, INC.
+00D0E2     (base 16)		MRT MICRO, INC.
+				14000 S. MILITARY TRAIL
+				DELRAY BEACH  FL  33484
+				US
+
+00-D0-6A   (hex)		LINKUP SYSTEMS CORPORATION
+00D06A     (base 16)		LINKUP SYSTEMS CORPORATION
+				1190 COLEMAN AVE.- STE #2C
+				SAN JOSE  CA  95110
+				US
+
+00-D0-89   (hex)		DYNACOLOR, INC.
+00D089     (base 16)		DYNACOLOR, INC.
+				No.116, Zhouzi St., Neihu Dist.
+				Taipei City    114
+				TW
+
+00-D0-2C   (hex)		CAMPBELL SCIENTIFIC, INC.
+00D02C     (base 16)		CAMPBELL SCIENTIFIC, INC.
+				815 W. 1800 N.
+				LOGAN  UT  84321-1784
+				US
+
+00-D0-CD   (hex)		ATAN TECHNOLOGY INC.
+00D0CD     (base 16)		ATAN TECHNOLOGY INC.
+				#5, ALLEY 18, LANE 81,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-D0-40   (hex)		SYSMATE CO., LTD.
+00D040     (base 16)		SYSMATE CO., LTD.
+				1091 WOLPYONG-DONG
+				  SOUTH  KOREA
+				KR
+
+00-D0-1A   (hex)		URMET  TLC S.P.A.
+00D01A     (base 16)		URMET  TLC S.P.A.
+				VIA DI CASTEL ROMANO 167
+				    
+				IT
+
+00-50-FF   (hex)		HAKKO ELECTRONICS CO., LTD.
+0050FF     (base 16)		HAKKO ELECTRONICS CO., LTD.
+				238, KAMIKASHIWANO-MACHI
+				MATTO-SHI, ISHIKAWA 924-0035    
+				JP
+
+00-50-D2   (hex)		CMC Electronics Inc
+0050D2     (base 16)		CMC Electronics Inc
+				600 Dr.Frederik-Philips Blvd
+				Montreal    QC H4M 2S9
+				CA
+
+00-50-F9   (hex)		Sensormatic Electronics LLC
+0050F9     (base 16)		Sensormatic Electronics LLC
+				1501 Yamato Rd
+				Boca Raton  FL  33431
+				US
+
+00-50-48   (hex)		INFOLIBRIA
+005048     (base 16)		INFOLIBRIA
+				411 WAVERLY OAKS RD-STE #323
+				WALTHAM  MA  02154-8414
+				US
+
+00-50-4E   (hex)		SIERRA MONITOR CORP.
+00504E     (base 16)		SIERRA MONITOR CORP.
+				1991 TAROB COURT
+				MILPITAS  CA  95035
+				US
+
+00-50-F6   (hex)		PAN-INTERNATIONAL INDUSTRIAL CORP.
+0050F6     (base 16)		PAN-INTERNATIONAL INDUSTRIAL CORP.
+				GF, NO. 176, CHANG CHUN RD.
+				TAIPEI    
+				TW
+
+00-50-6C   (hex)		Beijer Electronics Products AB
+00506C     (base 16)		Beijer Electronics Products AB
+				Box 426
+				SE-201 24  Malmoe  
+				SE
+
+00-50-D7   (hex)		TELSTRAT
+0050D7     (base 16)		TELSTRAT
+				3600 AVENUE
+				PLANO  TX  75074
+				US
+
+00-50-44   (hex)		ASACA CORPORATION
+005044     (base 16)		ASACA CORPORATION
+				420 CORPORATE CIRCLE, Unit H
+				GOLDEN  CO  80401
+				US
+
+00-50-E6   (hex)		HAKUSAN CORPORATION
+0050E6     (base 16)		HAKUSAN CORPORATION
+				J TOWER, 1-1, NIKKOU-CHO
+				    
+				JP
+
+00-50-3C   (hex)		TSINGHUA NOVEL ELECTRONICS
+00503C     (base 16)		TSINGHUA NOVEL ELECTRONICS
+				CO., LTD.
+				100084  100084  
+				CN
+
+00-50-60   (hex)		TANDBERG TELECOM AS
+005060     (base 16)		TANDBERG TELECOM AS
+				Philip Pedersens vei 20
+				1361  Lysaker  
+				NO
+
+00-50-EE   (hex)		TEK DIGITEL CORPORATION
+0050EE     (base 16)		TEK DIGITEL CORPORATION
+				20010 CENTURY BLVD. #300
+				GERMANTOWN  MD  20874
+				US
+
+00-50-45   (hex)		RIOWORKS SOLUTIONS, INC.
+005045     (base 16)		RIOWORKS SOLUTIONS, INC.
+				4F, NO.28, LANE 583
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-50-2B   (hex)		GENRAD LTD.
+00502B     (base 16)		GENRAD LTD.
+				ORION BUSINESS PARK
+				UNITED KINGDOM  SK3  OXG
+				GB
+
+00-50-2E   (hex)		CAMBEX CORPORATION
+00502E     (base 16)		CAMBEX CORPORATION
+				115 Flanders Road
+				Westborough  MA  01581
+				US
+
+00-50-6E   (hex)		CORDER ENGINEERING CORPORATION
+00506E     (base 16)		CORDER ENGINEERING CORPORATION
+				151 KALMUS DRIVE - STE #A103
+				COSTA MESA  CA  92626
+				US
+
+00-50-2C   (hex)		SOYO COMPUTER, INC.
+00502C     (base 16)		SOYO COMPUTER, INC.
+				NO. 21 WU-KUNG 5 RD.
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-50-77   (hex)		PROLIFIC TECHNOLOGY, INC.
+005077     (base 16)		PROLIFIC TECHNOLOGY, INC.
+				6F 1, LANE 51, SEC 1
+				    100
+				TW
+
+00-50-33   (hex)		MAYAN NETWORKS
+005033     (base 16)		MAYAN NETWORKS
+				3350 SCOTT BLVD. - BLDG. #9
+				SANTA CLARA  CA  95054
+				US
+
+00-50-0E   (hex)		CHROMATIS NETWORKS, INC.
+00500E     (base 16)		CHROMATIS NETWORKS, INC.
+				3 BETHESDA METRO CENTER
+				BETHESDA  MD  20814
+				US
+
+00-D0-CC   (hex)		TECHNOLOGIES LYRE INC.
+00D0CC     (base 16)		TECHNOLOGIES LYRE INC.
+				1200 ST-JEAN-BAPTISTE,
+				CANADA  G2E  5E8
+				CA
+
+00-50-EC   (hex)		OLICOM A/S
+0050EC     (base 16)		OLICOM A/S
+				NYBROVEJ 114
+				    
+				DK
+
+00-50-C9   (hex)		MASPRO DENKOH CORP.
+0050C9     (base 16)		MASPRO DENKOH CORP.
+				ASADA NISSHIN AICHI
+				    
+				JP
+
+00-50-BB   (hex)		CMS TECHNOLOGIES
+0050BB     (base 16)		CMS TECHNOLOGIES
+				13955 FARMINGTON RAOD
+				LIVONIA  MI  48154
+				US
+
+00-50-62   (hex)		KOUWELL ELECTRONICS CORP.  **
+005062     (base 16)		KOUWELL ELECTRONICS CORP.  **
+				7F, NO.99, NAN-KANG ROAD
+				    
+				TW
+
+00-50-D5   (hex)		AD SYSTEMS CORP.
+0050D5     (base 16)		AD SYSTEMS CORP.
+				1-4-1, NAKACHO, MUSASHINO CITY
+				TOKYO 180-0006    
+				JP
+
+00-50-F3   (hex)		GLOBAL NET INFORMATION CO., Ltd.
+0050F3     (base 16)		GLOBAL NET INFORMATION CO., Ltd.
+				NORTH TOWER- RM 1305
+				GUANG ZHOU 510095    
+				CN
+
+00-50-BE   (hex)		FAST MULTIMEDIA AG
+0050BE     (base 16)		FAST MULTIMEDIA AG
+				RUEDESHEIMERSTR. 11-13
+				80686 MUNICH    
+				DE
+
+00-50-6F   (hex)		G-CONNECT
+00506F     (base 16)		G-CONNECT
+				P.O. BOX 2200
+				HERZLIYA 46120    
+				IL
+
+00-50-F8   (hex)		ENTREGA TECHNOLOGIES, INC.
+0050F8     (base 16)		ENTREGA TECHNOLOGIES, INC.
+				25691 ATLANTIC OCEAN DRIVE
+				LAKE FOREST  CA  92630
+				US
+
+00-50-42   (hex)		SCI MANUFACTURING SINGAPORE PTE, LTD.
+005042     (base 16)		SCI MANUFACTURING SINGAPORE PTE, LTD.
+				3 DEPOT CLOSE
+				  SINGAPORE 109840  
+				SG
+
+00-50-C0   (hex)		GATAN, INC.
+0050C0     (base 16)		GATAN, INC.
+				5933 CORONADO LANE
+				PLEASANTON  CA  94588
+				US
+
+00-50-51   (hex)		IWATSU ELECTRIC CO., LTD.
+005051     (base 16)		IWATSU ELECTRIC CO., LTD.
+				7-41, KUGAYAMA 1-CHOME
+				SUGINAMI-KU, TOKYO 168-8501    
+				JP
+
+00-50-7D   (hex)		IFP
+00507D     (base 16)		IFP
+				LESSINGSTR. 4
+				D-78315 RADOLFZELL    
+				DE
+
+00-50-97   (hex)		MMC-EMBEDDED COMPUTERTECHNIK GmbH
+005097     (base 16)		MMC-EMBEDDED COMPUTERTECHNIK GmbH
+				ULRICHSBERGERSTR. 17
+				D-94469 DEGGENDORF    
+				DE
+
+00-50-10   (hex)		NovaNET Learning, Inc.
+005010     (base 16)		NovaNET Learning, Inc.
+				125 W. CHURCH STREET-STE. #300
+				CHAMPAIGN  IL  61820
+				US
+
+00-50-9A   (hex)		TAG ELECTRONIC SYSTEMS
+00509A     (base 16)		TAG ELECTRONIC SYSTEMS
+				GENESIS BUSINESS PARK
+				WOKING, SURREY GU21 5RW    
+				GB
+
+00-50-22   (hex)		ZONET TECHNOLOGY, INC.
+005022     (base 16)		ZONET TECHNOLOGY, INC.
+				830 ROOM, BLDG. 53, 195, SEC.4
+				HSINCHA    
+				TW
+
+00-50-07   (hex)		SIEMENS TELECOMMUNICATION SYSTEMS LIMITED
+005007     (base 16)		SIEMENS TELECOMMUNICATION SYSTEMS LIMITED
+				NO. 90, SEC. 1, CHIEN KUO NORTH ROAD
+				TAIPEI    
+				TW
+
+00-50-40   (hex)		Panasonic Electric Works Co., Ltd.
+005040     (base 16)		Panasonic Electric Works Co., Ltd.
+				Tsu-Factory, 1668, Fujikata
+				Tsu-shi  Mie-ken  514-8555
+				JP
+
+00-50-1C   (hex)		JATOM SYSTEMS, INC.
+00501C     (base 16)		JATOM SYSTEMS, INC.
+				99 MICHAEL COWPLAND DRIVE
+				ONTARIO, K2M 1X3    
+				CA
+
+00-50-92   (hex)		Rigaku Corporation Osaka Plant
+005092     (base 16)		Rigaku Corporation Osaka Plant
+				14-8 AKAOJI-CHO
+				TAKATSUKI-SHI, OSAKA 569-1146    
+				JP
+
+00-50-7A   (hex)		XPEED, INC.
+00507A     (base 16)		XPEED, INC.
+				4699 OLD IRONSIDES DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-50-69   (hex)		PixStream Incorporated
+005069     (base 16)		PixStream Incorporated
+				180 COLUMBIA ST. W.
+				Ontario N2L 3L3    
+				CA
+
+00-50-68   (hex)		ELECTRONIC INDUSTRIES ASSOCIATION
+005068     (base 16)		ELECTRONIC INDUSTRIES ASSOCIATION
+				2500 WILSON BLVD.
+				ARLINGTON  VA  22201
+				US
+
+00-50-BC   (hex)		HAMMER STORAGE SOLUTIONS
+0050BC     (base 16)		HAMMER STORAGE SOLUTIONS
+				8450 CENTRAL AVENUE
+				NEWARK  CA  94560
+				US
+
+00-90-71   (hex)		Applied Innovation Inc.
+009071     (base 16)		Applied Innovation Inc.
+				5800 Innovation Drive
+				Dublin  OH  43016-3271
+				US
+
+00-50-EB   (hex)		ALPHA-TOP CORPORATION
+0050EB     (base 16)		ALPHA-TOP CORPORATION
+				19F., NO. 2, LANE 150
+				TAIPEI    
+				TW
+
+00-50-EF   (hex)		SPE Systemhaus GmbH
+0050EF     (base 16)		SPE Systemhaus GmbH
+				WALDSTRASSE 7
+				63150 HEUSENSTAMM    
+				DE
+
+00-50-98   (hex)		GLOBALOOP, LTD.
+005098     (base 16)		GLOBALOOP, LTD.
+				12 HASHARON ROAD
+				KFAR SABA 44269    
+				IL
+
+00-50-4F   (hex)		OLENCOM ELECTRONICS
+00504F     (base 16)		OLENCOM ELECTRONICS
+				SOLTAM INDUSTRIAL PARK
+				YOKNEAM 20692    
+				IL
+
+00-90-FF   (hex)		TELLUS TECHNOLOGY INC.
+0090FF     (base 16)		TELLUS TECHNOLOGY INC.
+				40990 ENCYCLOPEDIA CIR.
+				FREMONT  CA  94538-2470
+				US
+
+00-90-3E   (hex)		N.V. PHILIPS INDUSTRIAL ACTIVITIES
+00903E     (base 16)		N.V. PHILIPS INDUSTRIAL ACTIVITIES
+				
+				B-3001 LEUVEN    
+				BE
+
+00-90-BA   (hex)		VALID NETWORKS, INC.
+0090BA     (base 16)		VALID NETWORKS, INC.
+				6 CROMWELL #102
+				IRVINE  CA  92618
+				US
+
+00-90-18   (hex)		ITO ELECTRIC INDUSTRY CO, LTD.
+009018     (base 16)		ITO ELECTRIC INDUSTRY CO, LTD.
+				4-26-12 MEIEKI NAKAMURA-KU
+				NAGOYA-CITY AICHI 450-0002    
+				JP
+
+00-90-CD   (hex)		ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.
+0090CD     (base 16)		ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.
+				R. ENG FREDERICO ULRICH -  APARTADO 3081
+				Guardeiras - 4470 Moreira Maia    
+				PT
+
+00-90-FB   (hex)		PORTWELL, INC.
+0090FB     (base 16)		PORTWELL, INC.
+				7F-4, NO. 160, SEC. 6
+				TAIPEI    
+				TW
+
+00-90-94   (hex)		OSPREY TECHNOLOGIES, INC.
+009094     (base 16)		OSPREY TECHNOLOGIES, INC.
+				600 AIRPORT BLVD. - STE. #900
+				MORRISVILLE  NC  27560
+				US
+
+00-90-B3   (hex)		AGRANAT SYSTEMS
+0090B3     (base 16)		AGRANAT SYSTEMS
+				1345 MAIN STREET
+				WALTHAM  MA  02154
+				US
+
+00-90-3C   (hex)		ATLANTIC NETWORK SYSTEMS
+00903C     (base 16)		ATLANTIC NETWORK SYSTEMS
+				IMMEUBLE Kennedy
+				  33700 MERIGNAC  
+				FR
+
+00-90-5D   (hex)		NETCOM SICHERHEITSTECHNIK GMBH
+00905D     (base 16)		NETCOM SICHERHEITSTECHNIK GMBH
+				BOPPSTRASSE 38
+				    
+				DE
+
+00-90-D1   (hex)		LEICHU ENTERPRISE CO., LTD.
+0090D1     (base 16)		LEICHU ENTERPRISE CO., LTD.
+				8F, NO. 203, PA-TEH ROAD, SEC.2
+				    
+				TW
+
+00-90-46   (hex)		DEXDYNE, LTD.
+009046     (base 16)		DEXDYNE, LTD.
+				15 MARKET PL.
+				GLOCESTERSHIRE GL7 2PB    
+				GB
+
+00-90-DA   (hex)		DYNARC, INC.
+0090DA     (base 16)		DYNARC, INC.
+				1887 LANDINGS DRIVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-90-E0   (hex)		SYSTRAN CORP.
+0090E0     (base 16)		SYSTRAN CORP.
+				4126 LINDEN AVENUE
+				DAYTON  OH  45432
+				US
+
+00-90-D0   (hex)		Thomson Telecom Belgium
+0090D0     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				B-2650 EDEGEM    
+				BE
+
+00-90-9B   (hex)		MARKEM-IMAJE
+00909B     (base 16)		MARKEM-IMAJE
+				Frihamnen 16A
+				Gothenburg    417 55
+				SE
+
+00-90-22   (hex)		IVEX
+009022     (base 16)		IVEX
+				4295 INTERNATIONAL BLVD.
+				NORCROSS  GA  30093
+				US
+
+00-90-16   (hex)		ZAC
+009016     (base 16)		ZAC
+				Stüvestraße 9
+				D-31141 Hildesheim    
+				DE
+
+00-90-A7   (hex)		CLIENTEC CORPORATION
+0090A7     (base 16)		CLIENTEC CORPORATION
+				8175 S. VIRGINIA ST.
+				RENO  NV  89511
+				US
+
+00-90-53   (hex)		DAEWOO ELECTRONICS CO., LTD.
+009053     (base 16)		DAEWOO ELECTRONICS CO., LTD.
+				DIT RESEARCH CENTER
+				CHUNG-GU  SEOUL 100-714  
+				KR
+
+00-90-DC   (hex)		TECO INFORMATION SYSTEMS
+0090DC     (base 16)		TECO INFORMATION SYSTEMS
+				CO., LTD.
+				SAN JOSE  CA  95134
+				US
+
+00-90-E2   (hex)		DISTRIBUTED PROCESSING TECHNOLOGY
+0090E2     (base 16)		DISTRIBUTED PROCESSING TECHNOLOGY
+				140 CANDACE DRIVE
+				ORLANDO  FL  32751
+				US
+
+00-90-85   (hex)		GOLDEN ENTERPRISES, INC.
+009085     (base 16)		GOLDEN ENTERPRISES, INC.
+				4450 WEST EAU GALLIE BLVD.
+				MELBOURNE  FL  32934
+				US
+
+00-90-C7   (hex)		ICOM INC.
+0090C7     (base 16)		ICOM INC.
+				6-9-16 KAMIHIGASHI
+				HIRANO-KU, OSAKA    
+				JP
+
+00-90-35   (hex)		ALPHA TELECOM, INC.
+009035     (base 16)		ALPHA TELECOM, INC.
+				2F, NO.2, LI HSIN ROAD
+				HSIN-CHU    
+				TW
+
+00-90-0F   (hex)		KAWASAKI HEAVY INDUSTRIES, LTD
+00900F     (base 16)		KAWASAKI HEAVY INDUSTRIES, LTD
+				ELEC. & CONTROL TECH CENTER
+				    
+				JP
+
+00-90-EA   (hex)		ALPHA TECHNOLOGIES, INC.
+0090EA     (base 16)		ALPHA TECHNOLOGIES, INC.
+				3767 ALPHA WAY
+				BELLINGHAM  WA  98226
+				US
+
+00-90-77   (hex)		ADVANCED FIBRE COMMUNICATIONS
+009077     (base 16)		ADVANCED FIBRE COMMUNICATIONS
+				PO BOX #751239
+				PETALUMA  CA  94975
+				US
+
+00-90-99   (hex)		ALLIED TELESIS, K.K.
+009099     (base 16)		ALLIED TELESIS, K.K.
+				NO. 2  TOC BUILDING, 7-21-11Nishi-Gotand
+				Shinagawa-Ku  Tokyo 141  
+				JP
+
+00-10-AD   (hex)		SOFTRONICS USB, INC.
+0010AD     (base 16)		SOFTRONICS USB, INC.
+				5085 LIST DRIVE
+				COLORADO SPRINGS  CO  80919
+				US
+
+00-10-A7   (hex)		UNEX TECHNOLOGY CORPORATION
+0010A7     (base 16)		UNEX TECHNOLOGY CORPORATION
+				8F-5, #130, SZE WEI RD.,
+				HSINCHU    
+				TW
+
+00-10-D5   (hex)		IMASDE CANARIAS, S.A.
+0010D5     (base 16)		IMASDE CANARIAS, S.A.
+				URB. EL CEBADAL
+				35008 LAS PALMAS G.C.    
+				ES
+
+00-10-55   (hex)		FUJITSU MICROELECTRONICS, INC.
+001055     (base 16)		FUJITSU MICROELECTRONICS, INC.
+				3545 NORTH FIRST STREET
+				SAN JOSE  CA  95134-1806
+				US
+
+00-90-7A   (hex)		Spectralink, Inc
+00907A     (base 16)		Spectralink, Inc
+				2560 55th Street
+				BOULDER  CO  80301
+				US
+
+00-90-F0   (hex)		Harmonic Video Systems Ltd.
+0090F0     (base 16)		Harmonic Video Systems Ltd.
+				19 ALON HATAVOR STREET
+				CAESAREA  Industrial Park    38900
+				IL
+
+00-90-20   (hex)		PHILIPS ANALYTICAL X-RAY B.V.
+009020     (base 16)		PHILIPS ANALYTICAL X-RAY B.V.
+				LELYWEG 1
+				7602 EA ALMELO    
+				NL
+
+00-10-A3   (hex)		OMNITRONIX, INC.
+0010A3     (base 16)		OMNITRONIX, INC.
+				760 HARRISON STREET
+				SEATTLE  WA  98109
+				US
+
+00-90-5C   (hex)		EDMI
+00905C     (base 16)		EDMI
+				626 OLD GYMPIE ROAD
+				NARANGBA  QLD 4504  
+				AU
+
+00-90-E3   (hex)		AVEX ELECTRONICS INC.
+0090E3     (base 16)		AVEX ELECTRONICS INC.
+				4807 BRADFORD DRIVE
+				HUNTSVILLE  AL  35805
+				US
+
+00-90-A9   (hex)		WESTERN DIGITAL
+0090A9     (base 16)		WESTERN DIGITAL
+				1599 NORTH BROADWAY
+				ROCHESTER  MN  55906
+				US
+
+00-90-F3   (hex)		ASPECT COMMUNICATIONS
+0090F3     (base 16)		ASPECT COMMUNICATIONS
+				1310 Ridder Park Drive
+				San Jose  CA  95131-2313
+				US
+
+00-90-4F   (hex)		ABB POWER T&D COMPANY, INC.
+00904F     (base 16)		ABB POWER T&D COMPANY, INC.
+				7036 SNOWDRIFT ROAD
+				ALLENTOWN  PA  18106
+				US
+
+00-90-60   (hex)		SYSTEM CREATE CORP.
+009060     (base 16)		SYSTEM CREATE CORP.
+				3-13-6 YOSHIKAWA BLD.
+				TOKYO    
+				JP
+
+00-90-13   (hex)		SAMSAN CORP.
+009013     (base 16)		SAMSAN CORP.
+				ELECTRONICS & COMM DIVISION
+				Kangdong-Gu  Seoul 134-050  
+				KR
+
+00-10-52   (hex)		METTLER-TOLEDO (ALBSTADT) GMBH
+001052     (base 16)		METTLER-TOLEDO (ALBSTADT) GMBH
+				P.O. BOX 2 50
+				D-72423 ALBSTADT    
+				DE
+
+00-10-6B   (hex)		SONUS NETWORKS, INC.
+00106B     (base 16)		SONUS NETWORKS, INC.
+				5 CARLISLE ROAD
+				WESTFORD  MA  01886
+				US
+
+00-10-C3   (hex)		CSI-CONTROL SYSTEMS
+0010C3     (base 16)		CSI-CONTROL SYSTEMS
+				INTERNATIONAL
+				DALLAS  TX  75229
+				US
+
+00-90-55   (hex)		PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION
+009055     (base 16)		PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION
+				5500 BUSINESS PARK DRIVE
+				ROHNERT PARK  CA  94928
+				US
+
+00-10-DD   (hex)		ENABLE SEMICONDUCTOR, INC.
+0010DD     (base 16)		ENABLE SEMICONDUCTOR, INC.
+				1740 TECHNOLOGY DRIVE
+				SAN JOSE  CA  95110
+				US
+
+00-10-2D   (hex)		HITACHI SOFTWARE ENGINEERING
+00102D     (base 16)		HITACHI SOFTWARE ENGINEERING
+				5-79, ONOECHO, NAKA-KU
+				YOKOHAMA 231    
+				JP
+
+00-10-33   (hex)		ACCESSLAN COMMUNICATIONS, INC.
+001033     (base 16)		ACCESSLAN COMMUNICATIONS, INC.
+				44 AIRPORT PARKWAY
+				SAN JOSE  CA  95110
+				US
+
+00-10-12   (hex)		PROCESSOR SYSTEMS (I) PVT LTD
+001012     (base 16)		PROCESSOR SYSTEMS (I) PVT LTD
+				24 RICHMOND ROAD
+				BANGALORE 560 025    
+				IN
+
+00-10-15   (hex)		OOmon Inc.
+001015     (base 16)		OOmon Inc.
+				PO BOX 8241
+				COBURG  OR  97408
+				US
+
+00-10-78   (hex)		NUERA COMMUNICATIONS, INC.
+001078     (base 16)		NUERA COMMUNICATIONS, INC.
+				10445 PACIFIC CENTER COURT
+				SAN DIEGO  CA  92121
+				US
+
+00-10-4F   (hex)		Oracle Corporation 
+00104F     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+00-10-7A   (hex)		AmbiCom, Inc.
+00107A     (base 16)		AmbiCom, Inc.
+				2450 SCOTT BLVD., #305
+				SANTA CLARA  CA  95050
+				US
+
+00-10-B9   (hex)		MAXTOR CORP.
+0010B9     (base 16)		MAXTOR CORP.
+				2190 MILLER DRIVE
+				LONGMONT  CO  80501-6744
+				US
+
+00-10-5D   (hex)		Draeger Medical
+00105D     (base 16)		Draeger Medical
+				Moislinger Allee 53-55
+				Luebeck    D-23542
+				DE
+
+00-10-91   (hex)		NO WIRES NEEDED BV
+001091     (base 16)		NO WIRES NEEDED BV
+				P.O. BOX 343
+				3720 AH BILTHOVEN    
+				NL
+
+00-10-1B   (hex)		CORNET TECHNOLOGY, INC.
+00101B     (base 16)		CORNET TECHNOLOGY, INC.
+				7F-4, NO. 46 CHUNG SHAN N.ROAD
+				SEC. 2, TAIPEI    
+				TJ
+
+00-10-DC   (hex)		MICRO-STAR INTERNATIONAL CO., LTD.
+0010DC     (base 16)		MICRO-STAR INTERNATIONAL CO., LTD.
+				NO. 69, LI-DE ST., JUNG-HE CITY
+				Taipei Hsien    
+				TW
+
+00-10-0A   (hex)		WILLIAMS COMMUNICATIONS GROUP
+00100A     (base 16)		WILLIAMS COMMUNICATIONS GROUP
+				ADVANCED TECHNOLOGIES
+				TULSA  OK  74103
+				US
+
+00-10-32   (hex)		ALTA TECHNOLOGY
+001032     (base 16)		ALTA TECHNOLOGY
+				9500 SOUTH 500 WEST - STE #212
+				SANDY  UT  84070
+				US
+
+00-10-80   (hex)		METAWAVE COMMUNICATIONS
+001080     (base 16)		METAWAVE COMMUNICATIONS
+				8700 148TH AVENUE N.E.
+				REDMOND  WA  98052
+				US
+
+00-10-F4   (hex)		Vertical Communications
+0010F4     (base 16)		Vertical Communications
+				3979 Freedom Circle #400
+				Santa Clara  CA  95054-1247
+				US
+
+00-10-77   (hex)		SAF DRIVE SYSTEMS, LTD.
+001077     (base 16)		SAF DRIVE SYSTEMS, LTD.
+				88 ARDELT AVE.
+				KITCHENER, ONTARIO N2C 2C9    
+				CA
+
+00-10-B3   (hex)		NOKIA MULTIMEDIA TERMINALS
+0010B3     (base 16)		NOKIA MULTIMEDIA TERMINALS
+				NOKIA HOME COMMUNICATIONS
+				SE-583 35 LINKOPING    
+				SE
+
+00-10-1E   (hex)		MATSUSHITA ELECTRONIC INSTRUMENTS CORP.
+00101E     (base 16)		MATSUSHITA ELECTRONIC INSTRUMENTS CORP.
+				23-9 KIYOHARA INDUSTRIAL PARK
+				UTSUNOMIYA Tochigi 321-32    
+				JP
+
+00-10-4D   (hex)		SURTEC INDUSTRIES, INC.
+00104D     (base 16)		SURTEC INDUSTRIES, INC.
+				NO.11, ALLEY 16, LANE 337
+				TAIPEI    
+				TW
+
+00-10-51   (hex)		CMICRO CORPORATION
+001051     (base 16)		CMICRO CORPORATION
+				17-20-2 KAMINO-CHO
+				TAKAMATSU-SHI, KAGAWA 761    
+				JP
+
+00-10-37   (hex)		CYQ've Technology Co., Ltd.
+001037     (base 16)		CYQ've Technology Co., Ltd.
+				COSMO BLDG. 10F, NO.1-7
+				SHINJUKU-KU,  TOKYO 160    
+				JP
+
+00-E0-BB   (hex)		NBX CORPORATION
+00E0BB     (base 16)		NBX CORPORATION
+				100 BRICKSTONE SQUARE
+				ANDOVER  MA  01810
+				US
+
+00-E0-8A   (hex)		GEC AVERY, LTD.
+00E08A     (base 16)		GEC AVERY, LTD.
+				FOUNDRY LANE
+				WEST MIDLANDS, B66 2LP  England  
+				GB
+
+00-E0-86   (hex)		Emerson Network Power, Avocent Division
+00E086     (base 16)		Emerson Network Power, Avocent Division
+				4991 Corporate Drive
+				HUNTSVILLE  AL  35805
+				US
+
+00-E0-1B   (hex)		SPHERE COMMUNICATIONS, INC.
+00E01B     (base 16)		SPHERE COMMUNICATIONS, INC.
+				2 ENERGY DRIVE
+				LAKE BLUFF  IL  60044
+				US
+
+00-E0-59   (hex)		CONTROLLED ENVIRONMENTS, LTD.
+00E059     (base 16)		CONTROLLED ENVIRONMENTS, LTD.
+				590 BERRY STREET
+				WINNEPEG R3H OR9    
+				CA
+
+00-E0-C5   (hex)		BCOM ELECTRONICS INC.
+00E0C5     (base 16)		BCOM ELECTRONICS INC.
+				8 FL, NO. 64, AN HO ROAD, SEC. 2
+				TAIPEI    
+				TW
+
+00-E0-EE   (hex)		MAREL HF
+00E0EE     (base 16)		MAREL HF
+				Austurhraun 9
+				Gardabaer    210
+				IS
+
+00-E0-8E   (hex)		UTSTARCOM
+00E08E     (base 16)		UTSTARCOM
+				33 WOOD AVE. SOUTH
+				ISELIN  NJ  08830
+				US
+
+00-E0-3F   (hex)		JATON CORPORATION
+00E03F     (base 16)		JATON CORPORATION
+				556 SOUTH MILPITAS BLVD.
+				MILPITAS  CA  95035
+				US
+
+00-E0-D4   (hex)		EXCELLENT COMPUTER
+00E0D4     (base 16)		EXCELLENT COMPUTER
+				551, M.K.N. ROAD
+				ALANDUR, CHENNAI 600016    
+				IN
+
+00-E0-7F   (hex)		LOGISTISTEM s.r.l.
+00E07F     (base 16)		LOGISTISTEM s.r.l.
+				VIA PANCIATICHI 94/18
+				50127 FIRENZE    
+				IT
+
+00-E0-13   (hex)		EASTERN ELECTRONIC CO., LTD.
+00E013     (base 16)		EASTERN ELECTRONIC CO., LTD.
+				NO. 4, SHIN-LONG ROAD,
+				TAO-YUAN    
+				TW
+
+00-E0-FD   (hex)		A-TREND TECHNOLOGY CO., LTD.
+00E0FD     (base 16)		A-TREND TECHNOLOGY CO., LTD.
+				10F, NO. 75, HSIN TAI WU RD.,
+				TAIPEI HSIEN 221    
+				TJ
+
+00-E0-BD   (hex)		INTERFACE SYSTEMS, INC.
+00E0BD     (base 16)		INTERFACE SYSTEMS, INC.
+				5855 INTERFACE DRIVE
+				ANN ARBOR  MI  48103-9515
+				US
+
+00-E0-6E   (hex)		FAR SYSTEMS S.p.A.
+00E06E     (base 16)		FAR SYSTEMS S.p.A.
+				VIA F. ZENI 8
+				3868 ROVERETO (TN)    
+				IT
+
+00-E0-6D   (hex)		COMPUWARE CORPORATION
+00E06D     (base 16)		COMPUWARE CORPORATION
+				One Campus Martius
+				Detroit  MI  48226
+				US
+
+00-E0-EA   (hex)		INNOVAT COMMUNICATIONS, INC.
+00E0EA     (base 16)		INNOVAT COMMUNICATIONS, INC.
+				1257 N. PLANO ROAD
+				RICHARDSON  TX  75081
+				US
+
+00-E0-64   (hex)		SAMSUNG ELECTRONICS
+00E064     (base 16)		SAMSUNG ELECTRONICS
+				99 W. TASMAN DRIVE
+				SAN JOSE  CA  95134
+				US
+
+00-E0-C9   (hex)		AutomatedLogic Corporation
+00E0C9     (base 16)		AutomatedLogic Corporation
+				1150 ROBERTS BOULEVARD
+				KENNESAW  GA  30144-3618
+				US
+
+00-E0-38   (hex)		PROXIMA CORPORATION
+00E038     (base 16)		PROXIMA CORPORATION
+				9440 CARROLL PARK DRIVE
+				SAN DIEGO  CA  92121-2298
+				US
+
+00-E0-9C   (hex)		MII
+00E09C     (base 16)		MII
+				LE parc du MOULIN
+				F95650 PUISEUX-POTOISE    
+				FR
+
+00-E0-E9   (hex)		DATA LABS, INC.
+00E0E9     (base 16)		DATA LABS, INC.
+				444 NORTH FREDERICK AVE.
+				GAITHERSBURG  MD  20877
+				US
+
+00-E0-0C   (hex)		MOTOROLA
+00E00C     (base 16)		MOTOROLA
+				5401 N. BEACH ST.  S243
+				FT. WORTH  TX  76137
+				US
+
+00-E0-0A   (hex)		DIBA, INC.
+00E00A     (base 16)		DIBA, INC.
+				3355 EDISON WAY
+				MENLO PARK  CA  94025
+				US
+
+00-E0-C4   (hex)		HORNER ELECTRIC, INC.
+00E0C4     (base 16)		HORNER ELECTRIC, INC.
+				1521 E. WASHINGTON ST.
+				INDIANAPOLIS  IN  46201
+				US
+
+00-E0-69   (hex)		JAYCOR
+00E069     (base 16)		JAYCOR
+				9775 TOWNE CENTRE DRIVE
+				SAN DIEGO  CA  92121
+				US
+
+00-E0-A4   (hex)		ESAOTE S.p.A.
+00E0A4     (base 16)		ESAOTE S.p.A.
+				via di CACIOLLE, 15
+				50127 FLORENCE    
+				IT
+
+00-E0-DE   (hex)		DATAX NV
+00E0DE     (base 16)		DATAX NV
+				RINGLAAN 51
+				B-2600 BERCHEM    
+				BE
+
+00-E0-A5   (hex)		ComCore Semiconductor, Inc.
+00E0A5     (base 16)		ComCore Semiconductor, Inc.
+				4505 LAS VIRGENES, Suite 202
+				CALABASAS  CA  91302
+				US
+
+00-E0-15   (hex)		HEIWA CORPORATION
+00E015     (base 16)		HEIWA CORPORATION
+				2-3014-8, HIROSAWA-CHO
+				GUNMA PREF. 376    
+				JP
+
+00-E0-E8   (hex)		GRETACODER Data Systems AG
+00E0E8     (base 16)		GRETACODER Data Systems AG
+				ALTHARDSTRASSE  150
+				CH-8105 REGENSDORF    
+				CH
+
+00-E0-16   (hex)		RAPID CITY COMMUNICATIONS
+00E016     (base 16)		RAPID CITY COMMUNICATIONS
+				555 CLYDE AVE.
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-E0-05   (hex)		TECHNICAL CORP.
+00E005     (base 16)		TECHNICAL CORP.
+				22-6 MINAMI SENGENCHO
+				KANAGAWA    
+				JP
+
+00-E0-C1   (hex)		MEMOREX TELEX JAPAN, LTD.
+00E0C1     (base 16)		MEMOREX TELEX JAPAN, LTD.
+				YAESUGUCHI KAIKAN, 1-7-20
+				TOKYO 103    
+				JP
+
+00-E0-A9   (hex)		FUNAI ELECTRIC CO., LTD.
+00E0A9     (base 16)		FUNAI ELECTRIC CO., LTD.
+				7-1, NAKAGAITO 7-CHOME, DAITO
+				OSAKA  574    
+				JP
+
+00-E0-84   (hex)		COMPULITE R&D
+00E084     (base 16)		COMPULITE R&D
+				3 HAROSHET STR. NEW IND. ZONE
+				RAMAT-HASHARON 47279    
+				IL
+
+00-E0-96   (hex)		SHIMADZU CORPORATION
+00E096     (base 16)		SHIMADZU CORPORATION
+				1, NISHINOKYO-KUWABARACHO
+				NAKAGYO-KU, KYOTO 604    
+				US
+
+00-E0-17   (hex)		EXXACT GmbH
+00E017     (base 16)		EXXACT GmbH
+				RHEINSTRASE 7
+				D-41836 HUCKELHOVEN    
+				DE
+
+00-60-7F   (hex)		AURORA TECHNOLOGIES, INC.
+00607F     (base 16)		AURORA TECHNOLOGIES, INC.
+				176 SECOND AVENUE
+				WALTHAM  MA  02154
+				US
+
+00-E0-29   (hex)		STANDARD MICROSYSTEMS CORP.
+00E029     (base 16)		STANDARD MICROSYSTEMS CORP.
+				6 HUGHES
+				IRVINE  CA  92718
+				US
+
+00-60-74   (hex)		QSC LLC
+006074     (base 16)		QSC LLC
+				1675 MACARTHUR BLVD
+				COSTA MESA  CA  92626
+				US
+
+00-60-76   (hex)		SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS
+006076     (base 16)		SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS
+				825-M GREENBRIER CIRCLE
+				CHESAPEAKE  VA  23320
+				US
+
+00-60-A1   (hex)		VPNet, Inc.
+0060A1     (base 16)		VPNet, Inc.
+				555 N. MATHILDA AVE.,-STE #110
+				SUNNYVALE  CA  94086
+				US
+
+00-60-27   (hex)		Superior Modular Products
+006027     (base 16)		Superior Modular Products
+				General Technology Division
+				MELBOURNE  FL  32940
+				US
+
+00-60-BC   (hex)		KeunYoung Electronics & Communication Co., Ltd.
+0060BC     (base 16)		KeunYoung Electronics & Communication Co., Ltd.
+				325-76, DAEHEUNG-DONG, MAPO-GU,
+				SEOUL    
+				KR
+
+00-60-A5   (hex)		PERFORMANCE TELECOM CORP.
+0060A5     (base 16)		PERFORMANCE TELECOM CORP.
+				10 CARLSON ROAD
+				ROCHESTER  NY  14610-1021
+				US
+
+00-60-05   (hex)		FEEDBACK DATA LTD.
+006005     (base 16)		FEEDBACK DATA LTD.
+				PARK ROAD
+				EAST SUSSEX, TN6 2QR    
+				GB
+
+00-60-2E   (hex)		CYCLADES CORPORATION
+00602E     (base 16)		CYCLADES CORPORATION
+				41934 CHRISTY STREET
+				FREMONT  CA  94538
+				US
+
+00-60-B6   (hex)		LAND COMPUTER CO., LTD.
+0060B6     (base 16)		LAND COMPUTER CO., LTD.
+				7-4-17 NISHINAKAJIMA
+				YODOGAWAKU 532    
+				JP
+
+00-60-6C   (hex)		ARESCOM
+00606C     (base 16)		ARESCOM
+				2833 JUNCTION AVE. - STE #206
+				SAN JOSE  CA  95134
+				US
+
+00-60-E3   (hex)		ARBIN INSTRUMENTS
+0060E3     (base 16)		ARBIN INSTRUMENTS
+				3206 LONGMIRE DRIVE
+				COLLEGE STATION  TX  77845
+				US
+
+00-60-71   (hex)		MIDAS LAB, INC.
+006071     (base 16)		MIDAS LAB, INC.
+				4 KATAMACHI,
+				  TOKYO 160  
+				JP
+
+00-60-61   (hex)		WHISTLE COMMUNICATIONS CORP.
+006061     (base 16)		WHISTLE COMMUNICATIONS CORP.
+				110 MARSH DRIVE-STE #100
+				FOSTER CITY  CA  94404
+				US
+
+00-60-1B   (hex)		MESA ELECTRONICS
+00601B     (base 16)		MESA ELECTRONICS
+				1323 61ST STREET
+				EMERYVILLE  CA  94608-2117
+				US
+
+00-60-C5   (hex)		ANCOT CORP.
+0060C5     (base 16)		ANCOT CORP.
+				115 CONSTITUTION DR.
+				MENLO PARK  CA  94025
+				US
+
+00-60-A9   (hex)		GESYTEC MBH
+0060A9     (base 16)		GESYTEC MBH
+				PASCALSTRASSE 6
+				D 52076 AACHEN    
+				DE
+
+00-60-F2   (hex)		LASERGRAPHICS, INC.
+0060F2     (base 16)		LASERGRAPHICS, INC.
+				20 ADA
+				IRVINE  CA  92718
+				US
+
+00-60-C3   (hex)		NETVISION CORPORATION
+0060C3     (base 16)		NETVISION CORPORATION
+				MS# 1A
+				RONKONKOMA  NY  11779
+				US
+
+00-60-29   (hex)		CARY PERIPHERALS INC.
+006029     (base 16)		CARY PERIPHERALS INC.
+				190 COLONNADE ROAD S, UNIT 9
+				NEPEAN, ONTARIO K2E 7J5    
+				CA
+
+00-60-A8   (hex)		TIDOMAT AB
+0060A8     (base 16)		TIDOMAT AB
+				
+				S-12089 STOCKHOLM    
+				SE
+
+00-60-FC   (hex)		CONSERVATION THROUGH INNOVATION LTD.
+0060FC     (base 16)		CONSERVATION THROUGH INNOVATION LTD.
+				1040 WHIPPLE ST.- STE. #225
+				PRESCOTT  AZ  86301
+				US
+
+00-60-18   (hex)		STELLAR ONE CORPORATION
+006018     (base 16)		STELLAR ONE CORPORATION
+				500 108TH AVE. NE--STE. #2200
+				BELLEVUE  WA  98004
+				US
+
+00-60-0A   (hex)		SORD COMPUTER CORPORATION
+00600A     (base 16)		SORD COMPUTER CORPORATION
+				20-7, MASAGO 5-CHOME
+				CHIBA 261    
+				JP
+
+00-60-A4   (hex)		GEW Technologies (PTY)Ltd
+0060A4     (base 16)		GEW Technologies (PTY)Ltd
+				BOX 912-561
+				SILVERTON  0127    
+				ZA
+
+00-60-64   (hex)		NETCOMM LIMITED
+006064     (base 16)		NETCOMM LIMITED
+				PO BOX 379
+				NORTH RYDE, NSW, 2113    
+				AU
+
+00-60-F9   (hex)		DIAMOND LANE COMMUNICATIONS
+0060F9     (base 16)		DIAMOND LANE COMMUNICATIONS
+				1310 REDWOOD WAY - STE.
+				PETALUMA  CA  94954
+				US
+
+00-60-EA   (hex)		StreamLogic
+0060EA     (base 16)		StreamLogic
+				21329 NORDHOFF STREET
+				CHATSWORTH  CA  91311
+				US
+
+00-60-82   (hex)		NOVALINK TECHNOLOGIES, INC.
+006082     (base 16)		NOVALINK TECHNOLOGIES, INC.
+				48511 WARM SPRINGS BLVD. #208
+				FREMONT  CA  94539
+				US
+
+00-60-E7   (hex)		RANDATA
+0060E7     (base 16)		RANDATA
+				PO BOX 209
+				HAWTHORN  VIC  3122    
+				AU
+
+00-60-D9   (hex)		TRANSYS NETWORKS INC.
+0060D9     (base 16)		TRANSYS NETWORKS INC.
+				3403 GRIFFITH
+				ST. LAURENT, QUEBEC H4T 1W5    
+				CA
+
+00-60-1F   (hex)		STALLION TECHNOLOGIES
+00601F     (base 16)		STALLION TECHNOLOGIES
+				33 WOODSTOCK ROAD
+				TOOWONG Q-L-D- 4066    
+				AU
+
+00-60-54   (hex)		CONTROLWARE GMBH
+006054     (base 16)		CONTROLWARE GMBH
+				WALDSTRASSE 92
+				63128 DIETZENBACH    
+				DE
+
+00-60-C2   (hex)		MPL AG
+0060C2     (base 16)		MPL AG
+				Taefernstrasse 20
+				CH-5405  Daettwil  
+				CH
+
+00-60-D4   (hex)		ELDAT COMMUNICATION LTD.
+0060D4     (base 16)		ELDAT COMMUNICATION LTD.
+				10 HAKISHON STREET
+				BNEI-BRAK  51203    
+				IL
+
+00-A0-4E   (hex)		VOELKER TECHNOLOGIES, INC.
+00A04E     (base 16)		VOELKER TECHNOLOGIES, INC.
+				22 NEW BOSTON COURT
+				DANVILLE  CA  94526
+				US
+
+00-A0-5A   (hex)		KOFAX IMAGE PRODUCTS
+00A05A     (base 16)		KOFAX IMAGE PRODUCTS
+				3 JENNER STREET
+				IRVINE  CA  92718-3807
+				US
+
+00-A0-52   (hex)		STANILITE ELECTRONICS PTY. LTD
+00A052     (base 16)		STANILITE ELECTRONICS PTY. LTD
+				424, LANE COVE ROAD
+				NORTH RYDE NSW 2113    
+				AU
+
+00-A0-5E   (hex)		MYRIAD LOGIC INC.
+00A05E     (base 16)		MYRIAD LOGIC INC.
+				1109 SPRING STREET
+				SILVER SPRING  MD  20910
+				US
+
+00-A0-95   (hex)		ACACIA NETWORKS, INC.
+00A095     (base 16)		ACACIA NETWORKS, INC.
+				831 WOBURN STREET
+				WILMINGTON  MA  01887
+				US
+
+00-A0-53   (hex)		COMPACT DEVICES, INC.
+00A053     (base 16)		COMPACT DEVICES, INC.
+				16795 LARK AVENUE
+				LOS GATOS  CA  95030
+				US
+
+00-A0-69   (hex)		Symmetricom, Inc.
+00A069     (base 16)		Symmetricom, Inc.
+				3750 Westwind Blvd.
+				Santa Rosa  CA  95403
+				US
+
+00-A0-7A   (hex)		ADVANCED PERIPHERALS TECHNOLOGIES, INC.
+00A07A     (base 16)		ADVANCED PERIPHERALS TECHNOLOGIES, INC.
+				
+				FUJISAWA-SHI, KANAGAWA-KEN 251    
+				JP
+
+00-60-9B   (hex)		AstroNova, Inc
+00609B     (base 16)		AstroNova, Inc
+				600 EAST GREENWICH AVE.
+				WEST WARWICK  RI  02893
+				US
+
+00-60-DB   (hex)		NTP ELEKTRONIK A/S
+0060DB     (base 16)		NTP ELEKTRONIK A/S
+				KNAPHOLM 7
+				DK-2730 HERLEV    
+				DK
+
+00-60-52   (hex)		PERIPHERALS ENTERPRISE CO., Ltd.
+006052     (base 16)		PERIPHERALS ENTERPRISE CO., Ltd.
+				3F, NO.10, ALLEY 6, LANE 45
+				TAIPEI    
+				TW
+
+00-60-B2   (hex)		PROCESS CONTROL CORP.
+0060B2     (base 16)		PROCESS CONTROL CORP.
+				6875 MIMMS DRIVE
+				ATLANTA  GA  30340
+				US
+
+00-60-81   (hex)		TV/COM INTERNATIONAL
+006081     (base 16)		TV/COM INTERNATIONAL
+				16516 VIA ESPRILLO
+				SAN DIEGO  CA  92127
+				US
+
+00-A0-05   (hex)		DANIEL INSTRUMENTS, LTD.
+00A005     (base 16)		DANIEL INSTRUMENTS, LTD.
+				TROLLSTRASSE 33
+				CH-8400 WINTERTHUR    
+				CH
+
+00-A0-F2   (hex)		INFOTEK COMMUNICATIONS, INC.
+00A0F2     (base 16)		INFOTEK COMMUNICATIONS, INC.
+				111 ANZA BLVD., #203
+				BURLINGAME  CA  94010
+				US
+
+00-A0-DF   (hex)		STS TECHNOLOGIES, INC.
+00A0DF     (base 16)		STS TECHNOLOGIES, INC.
+				13765 ST. CHARLES ROCK RD.
+				BRIDGETON  MO  63044
+				US
+
+00-A0-94   (hex)		COMSAT CORPORATION
+00A094     (base 16)		COMSAT CORPORATION
+				22300 COMSAT DRIVE
+				CLARKSBURG  MD  20871-9475
+				US
+
+00-A0-EF   (hex)		LUCIDATA LTD.
+00A0EF     (base 16)		LUCIDATA LTD.
+				LUCIDATA HOUSE
+				GREAT SHELFORD  CAMBBRIDGE CB2 5HA  
+				GB
+
+00-A0-20   (hex)		CITICORP/TTI
+00A020     (base 16)		CITICORP/TTI
+				3100 OCEAN PARK BLVD.
+				SANTA MONICA  CA  90405
+				US
+
+00-A0-CE   (hex)		Ecessa
+00A0CE     (base 16)		Ecessa
+				2800 Campus Drive 
+				Plymouth  MN  55441
+				US
+
+00-A0-28   (hex)		CONNER PERIPHERALS
+00A028     (base 16)		CONNER PERIPHERALS
+				3061 ZANKER ROAD
+				SAN JOSE  CA  95134-2128
+				US
+
+00-A0-9E   (hex)		ICTV
+00A09E     (base 16)		ICTV
+				14600 WINCHESTER BLVD.
+				LOS GATOS  CA  95030
+				US
+
+00-A0-99   (hex)		K-NET LTD.
+00A099     (base 16)		K-NET LTD.
+				SADDLERS HOUSE
+				YATELEY, SURREY GU17 7RX    
+				GB
+
+00-A0-EC   (hex)		TRANSMITTON LTD.
+00A0EC     (base 16)		TRANSMITTON LTD.
+				SMISBY ROAD
+				LEICESTERSHIRE LE65 2UG    
+				GB
+
+00-A0-67   (hex)		NETWORK SERVICES GROUP
+00A067     (base 16)		NETWORK SERVICES GROUP
+				3421 COMMISSION COURT-STE #202
+				WOODBRIDGE  VA  22192
+				US
+
+00-A0-E0   (hex)		TENNYSON TECHNOLOGIES PTY LTD
+00A0E0     (base 16)		TENNYSON TECHNOLOGIES PTY LTD
+				14 BUSINESS PARK DRIVE
+				VICTORIA - 3168    
+				AU
+
+00-A0-FD   (hex)		SCITEX DIGITAL PRINTING, INC.
+00A0FD     (base 16)		SCITEX DIGITAL PRINTING, INC.
+				3100 RESEARCH BLVD.
+				DAYTON  OH  45420
+				US
+
+00-A0-0F   (hex)		Broadband Technologies
+00A00F     (base 16)		Broadband Technologies
+				P.O. Box 13737
+				Research Triangle Park,  NC  27709-3737
+				US
+
+00-A0-02   (hex)		LEEDS & NORTHRUP AUSTRALIA PTY LTD
+00A002     (base 16)		LEEDS & NORTHRUP AUSTRALIA PTY LTD
+				PO BOX 4009
+				EIGHT MILE PLAINS  QLD 4113    
+				AU
+
+00-A0-E4   (hex)		OPTIQUEST
+00A0E4     (base 16)		OPTIQUEST
+				20490 BUSINESS PARKWAY
+				WALNUT  CA  91789
+				US
+
+00-A0-EE   (hex)		NASHOBA NETWORKS
+00A0EE     (base 16)		NASHOBA NETWORKS
+				9-11 GOLDSMITH ST.
+				LITTLETON  MA  01460
+				US
+
+00-A0-C3   (hex)		UNICOMPUTER GMBH
+00A0C3     (base 16)		UNICOMPUTER GMBH
+				LIMBURGER STRASSE 48
+				    
+				DE
+
+00-A0-0A   (hex)		Airspan
+00A00A     (base 16)		Airspan
+				Unitronics Building, Arava Street, Airport City
+				    70100
+				IL
+
+00-A0-E7   (hex)		CENTRAL DATA CORPORATION
+00A0E7     (base 16)		CENTRAL DATA CORPORATION
+				1602 NEWTON DRIVE
+				CHAMPAIGN  IL  61821
+				US
+
+00-A0-80   (hex)		Tattile SRL 
+00A080     (base 16)		Tattile SRL 
+				4000 Executive Parkway
+				San Ramon  CA  94583
+				US
+
+00-A0-2B   (hex)		TRANSITIONS RESEARCH CORP.
+00A02B     (base 16)		TRANSITIONS RESEARCH CORP.
+				SHELTER ROCK LANE
+				DANBURY  CT  06810
+				US
+
+00-A0-E8   (hex)		REUTERS HOLDINGS PLC
+00A0E8     (base 16)		REUTERS HOLDINGS PLC
+				85, FLEET STREET
+				    ENGLAND
+				GB
+
+00-A0-08   (hex)		NETCORP
+00A008     (base 16)		NETCORP
+				8 PLACE OF COMMERCE--STE #200
+				CANADA  J4W  3H2
+				CA
+
+00-A0-50   (hex)		CYPRESS SEMICONDUCTOR
+00A050     (base 16)		CYPRESS SEMICONDUCTOR
+				198 Champion Ct
+				SAN JOSE  CA  95134
+				US
+
+00-A0-DD   (hex)		AZONIX CORPORATION
+00A0DD     (base 16)		AZONIX CORPORATION
+				900 MIDDLESEX TURNPIKE
+				BILLERICA  MA  01821
+				US
+
+00-A0-75   (hex)		MICRON TECHNOLOGY, INC.
+00A075     (base 16)		MICRON TECHNOLOGY, INC.
+				8000 S. Federal Way
+				Boise  ID  83707-0006
+				US
+
+00-A0-09   (hex)		WHITETREE NETWORK
+00A009     (base 16)		WHITETREE NETWORK
+				TECHNOLOGIES, INC.
+				PALO ALTO  CA  94306
+				US
+
+00-A0-0C   (hex)		KINGMAX TECHNOLOGY, INC.
+00A00C     (base 16)		KINGMAX TECHNOLOGY, INC.
+				2FL., NO. 4, LANE 902, SEC.2
+				    
+				TW
+
+00-A0-66   (hex)		ISA CO., LTD.
+00A066     (base 16)		ISA CO., LTD.
+				SHINJUKU LAMBDAX BLDG. 5F.,
+				    
+				JP
+
+00-A0-AB   (hex)		NETCS INFORMATIONSTECHNIK GMBH
+00A0AB     (base 16)		NETCS INFORMATIONSTECHNIK GMBH
+				KATHARINENSTRASSE 17-18
+				    
+				DE
+
+00-A0-D8   (hex)		SPECTRA - TEK
+00A0D8     (base 16)		SPECTRA - TEK
+				OUTGANG LANE
+				ENGLAND  Y018  FJA
+				GB
+
+00-A0-FA   (hex)		Marconi Communication GmbH
+00A0FA     (base 16)		Marconi Communication GmbH
+				Gerberstrasse 33
+				    
+				DE
+
+00-A0-CB   (hex)		ARK TELECOMMUNICATIONS, INC.
+00A0CB     (base 16)		ARK TELECOMMUNICATIONS, INC.
+				124 CARMEN LANE--SUITE
+				SANTA MARIA  CA  93454
+				US
+
+00-A0-34   (hex)		AXEL
+00A034     (base 16)		AXEL
+				16, AVENUE DU QUEBEC
+				    
+				FR
+
+00-A0-01   (hex)		DRS Signal Solutions
+00A001     (base 16)		DRS Signal Solutions
+				700 Quince Orchard Road
+				Gaithersburg  MD  20878-1794
+				US
+
+00-20-B2   (hex)		GKD Gesellschaft Fur Kommunikation Und Datentechnik
+0020B2     (base 16)		GKD Gesellschaft Fur Kommunikation Und Datentechnik
+				SAARBURGER RING 10-12
+				 68229 MANNHEIM    
+				DE
+
+00-20-52   (hex)		RAGULA SYSTEMS
+002052     (base 16)		RAGULA SYSTEMS
+				4540 S. JUPITER DRIVE
+				SALT LAKE CITY  UT  84124
+				US
+
+00-20-FC   (hex)		MATROX
+0020FC     (base 16)		MATROX
+				1055 ST. REGIS,
+				DORVAL, QUEBEC  H9P-2T4    
+				CA
+
+00-20-FE   (hex)		TOPWARE INC. / GRAND COMPUTER
+0020FE     (base 16)		TOPWARE INC. / GRAND COMPUTER
+				CORPORATION
+				TAIPEI    R.O.C.
+				TW
+
+00-20-73   (hex)		FUSION SYSTEMS CORPORATION
+002073     (base 16)		FUSION SYSTEMS CORPORATION
+				7600 STANDISH PLACE
+				ROCKVILLE  MD  20855
+				US
+
+00-20-35   (hex)		IBM Corp
+002035     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-A0-17   (hex)		J B M CORPORATION
+00A017     (base 16)		J B M CORPORATION
+				10-1, ARAMOTOSHIN MACHI
+				    577
+				JP
+
+00-A0-25   (hex)		REDCOM LABS INC.
+00A025     (base 16)		REDCOM LABS INC.
+				ONE REDCOM CENTER
+				VICTOR  NY  14564-0995
+				US
+
+00-A0-BB   (hex)		HILAN GMBH
+00A0BB     (base 16)		HILAN GMBH
+				HAID-UND-NEU-STRASSE 7
+				    
+				DE
+
+00-A0-91   (hex)		APPLICOM INTERNATIONAL
+00A091     (base 16)		APPLICOM INTERNATIONAL
+				43, RUE MAZAGRAN
+				    
+				FR
+
+00-A0-A5   (hex)		TEKNOR MICROSYSTEME, INC.
+00A0A5     (base 16)		TEKNOR MICROSYSTEME, INC.
+				616 CURE BOIVIN
+				    J7G 2A7
+				CA
+
+00-20-B7   (hex)		NAMAQUA COMPUTERWARE
+0020B7     (base 16)		NAMAQUA COMPUTERWARE
+				P.O. BOX 7155
+				    
+				ZA
+
+00-20-E3   (hex)		MCD KENCOM CORPORATION
+0020E3     (base 16)		MCD KENCOM CORPORATION
+				20950 CASTLE ROCK ROAD
+				LAGUNA BEACH  CA  92651-1115
+				US
+
+00-20-13   (hex)		DIVERSIFIED TECHNOLOGY, INC.
+002013     (base 16)		DIVERSIFIED TECHNOLOGY, INC.
+				112 E. STATE STREET
+				RIDGELAND  MS  39157
+				US
+
+00-20-AB   (hex)		MICRO INDUSTRIES CORP.
+0020AB     (base 16)		MICRO INDUSTRIES CORP.
+				8399 GREEN MEADOWS DR. N.
+				WESTERVILLE  OH  43081
+				US
+
+00-20-8D   (hex)		CMD TECHNOLOGY
+00208D     (base 16)		CMD TECHNOLOGY
+				1 VANDERBILT
+				IRVINE  CA  92718
+				US
+
+00-20-DD   (hex)		Cybertec Pty Ltd
+0020DD     (base 16)		Cybertec Pty Ltd
+				Unit 11, 41 Higginbotham Road
+				Gladesville  NSW  2111
+				AU
+
+00-20-E6   (hex)		LIDKOPING MACHINE TOOLS AB
+0020E6     (base 16)		LIDKOPING MACHINE TOOLS AB
+				BOX 910
+				    
+				SE
+
+00-20-86   (hex)		MICROTECH ELECTRONICS LIMITED
+002086     (base 16)		MICROTECH ELECTRONICS LIMITED
+				LANCASTER ROAD
+				    KINGDOM
+				GB
+
+00-20-23   (hex)		T.C. TECHNOLOGIES PTY. LTD
+002023     (base 16)		T.C. TECHNOLOGIES PTY. LTD
+				6/60 FAIRFORD RD.
+				    
+				AU
+
+00-A0-54   (hex)		Private
+00A054     (base 16)		Private
+
+00-20-5A   (hex)		COMPUTER IDENTICS
+00205A     (base 16)		COMPUTER IDENTICS
+				5 SHAWMUT ROAD
+				CANTON  MA  02021
+				US
+
+00-20-00   (hex)		LEXMARK INTERNATIONAL, INC.
+002000     (base 16)		LEXMARK INTERNATIONAL, INC.
+				740 NEW CIRCLE ROAD
+				LEXINGTON  KY  40550
+				US
+
+00-20-1D   (hex)		KATANA PRODUCTS
+00201D     (base 16)		KATANA PRODUCTS
+				THE STUDIO, QUARRY HILL BOX,
+				WILTSHIRE SN14 9HT    
+				GB
+
+00-20-03   (hex)		PIXEL POWER LTD.
+002003     (base 16)		PIXEL POWER LTD.
+				Unit 5 College Business Park
+				CAMBRIDGE    CB1 3HD
+				GB
+
+00-20-46   (hex)		CIPRICO, INC.
+002046     (base 16)		CIPRICO, INC.
+				2800 CAMPUS DRIVE--SUITE #60
+				PLYMOUTH  MN  55441
+				US
+
+00-20-9B   (hex)		ERSAT ELECTRONIC GMBH
+00209B     (base 16)		ERSAT ELECTRONIC GMBH
+				HAARBERGSTR. 61
+				    
+				DE
+
+00-20-1C   (hex)		EXCEL, INC.
+00201C     (base 16)		EXCEL, INC.
+				355 OLD PLYMOUTH ROAD
+				SAGAMORE BEACH  MA  02562
+				US
+
+00-20-7F   (hex)		KYOEI SANGYO CO., LTD.
+00207F     (base 16)		KYOEI SANGYO CO., LTD.
+				DIR. & GEN'L MGR.IND. SYSTEMS
+				    TOKYO
+				JP
+
+00-20-C9   (hex)		VICTRON BV
+0020C9     (base 16)		VICTRON BV
+				POB 31
+				  THE  
+				NL
+
+00-20-77   (hex)		KARDIOS SYSTEMS CORP.
+002077     (base 16)		KARDIOS SYSTEMS CORP.
+				26 N SUMMIT AVE.
+				GAITHERSBURG  MD  20877
+				US
+
+00-20-7A   (hex)		WiSE Communications, Inc.
+00207A     (base 16)		WiSE Communications, Inc.
+				130 KNOWLES DRIVE
+				LOS GATOS  CA  95030
+				US
+
+00-20-3E   (hex)		LogiCan Technologies, Inc.
+00203E     (base 16)		LogiCan Technologies, Inc.
+				150 KARL CLARK ROAD
+				EDMONTON, ALBERTA T6N 1E2    
+				CA
+
+00-20-58   (hex)		ALLIED SIGNAL INC.
+002058     (base 16)		ALLIED SIGNAL INC.
+				ROUTE 46
+				TETERBORO  NJ  07608
+				US
+
+00-20-E1   (hex)		ALAMAR ELECTRONICS
+0020E1     (base 16)		ALAMAR ELECTRONICS
+				489 DIVISION STREET
+				CAMPBELL  CA  95008
+				US
+
+00-20-26   (hex)		AMKLY SYSTEMS, INC.
+002026     (base 16)		AMKLY SYSTEMS, INC.
+				15801 ROCKFIELD BLVD., #P
+				IRVINE  CA  92718
+				US
+
+00-20-65   (hex)		SUPERNET NETWORKING INC.
+002065     (base 16)		SUPERNET NETWORKING INC.
+				16 TOZERET HA'ARETZ ST.
+				TEL-AVIV 67891    
+				IL
+
+00-20-2A   (hex)		N.V. DZINE
+00202A     (base 16)		N.V. DZINE
+				KONING LEOPOLD III LAAN 2
+				    
+				BE
+
+00-20-83   (hex)		PRESTICOM INCORPORATED
+002083     (base 16)		PRESTICOM INCORPORATED
+				3275, 1ST STREET, STE. #1
+				CANADA  J3Y  8Y6
+				CA
+
+00-20-19   (hex)		OHLER GMBH
+002019     (base 16)		OHLER GMBH
+				MAYBACHSTRASE 30
+				71332 WAIBLINGEN    
+				DE
+
+00-20-9E   (hex)		BROWN'S OPERATING SYSTEM SERVICES, LTD.
+00209E     (base 16)		BROWN'S OPERATING SYSTEM SERVICES, LTD.
+				ST. AGNES HOUSE, CRESSWELL PK,
+				BLACKHEATH, London SE3 9RD    
+				GB
+
+00-20-8E   (hex)		CHEVIN SOFTWARE ENG. LTD.
+00208E     (base 16)		CHEVIN SOFTWARE ENG. LTD.
+				2 BOROUGHGATE, OTLEY,
+				LS21 3AL  UNITED  KINGDOM
+				GB
+
+00-20-97   (hex)		APPLIED SIGNAL TECHNOLOGY
+002097     (base 16)		APPLIED SIGNAL TECHNOLOGY
+				160 SOBRANTE WAY
+				SUNNYVALE  CA  94086
+				US
+
+00-C0-0B   (hex)		NORCONTROL A.S.
+00C00B     (base 16)		NORCONTROL A.S.
+				P.O. BOX 1024
+				    
+				NO
+
+00-20-B0   (hex)		GATEWAY DEVICES, INC.
+0020B0     (base 16)		GATEWAY DEVICES, INC.
+				2440 STANWELL DRIVE
+				CONCORD  CA  94520
+				US
+
+00-20-5B   (hex)		Kentrox, LLC
+00205B     (base 16)		Kentrox, LLC
+				20010 NW Tanasbourne Dr.
+				Hillsboro  OR  97124
+				US
+
+00-20-F6   (hex)		NET TEK  AND KARLNET, INC.
+0020F6     (base 16)		NET TEK  AND KARLNET, INC.
+				LITTLE STREAMS
+				  UNITED  KINGDOM
+				GB
+
+00-20-C6   (hex)		NECTEC
+0020C6     (base 16)		NECTEC
+				RAMA VI ROAD
+				    
+				TH
+
+00-20-08   (hex)		CABLE & COMPUTER TECHNOLOGY
+002008     (base 16)		CABLE & COMPUTER TECHNOLOGY
+				1555 SO. SINCLAIR STREET
+				ANAHEIM  CA  92806
+				US
+
+00-20-D3   (hex)		OST (OUEST STANDARD TELEMATIQU
+0020D3     (base 16)		OST (OUEST STANDARD TELEMATIQU
+				RUE DU BAS VILLAGE
+				    
+				FR
+
+00-C0-0E   (hex)		PSITECH, INC.
+00C00E     (base 16)		PSITECH, INC.
+				18368 BANDILIER CIRCLE
+				FOUNTAIN VALLEY  CA  92708
+				US
+
+00-C0-31   (hex)		DESIGN RESEARCH SYSTEMS, INC.
+00C031     (base 16)		DESIGN RESEARCH SYSTEMS, INC.
+				925 E. EXECUTIVE PARK DR.
+				SALT LAKE CITY  UT  84117
+				US
+
+00-07-01   (hex)		RACAL-DATACOM
+000701     (base 16)		RACAL-DATACOM
+				LAN INTERNETWORKING DIVISION
+				BOXBOROUGH  MA  01719
+				US
+
+00-C0-9C   (hex)		HIOKI E.E. CORPORATION
+00C09C     (base 16)		HIOKI E.E. CORPORATION
+				81 Koizumi, Ueda, Nagano
+				Tokyo    386-1192
+				JP
+
+00-C0-AA   (hex)		SILICON VALLEY COMPUTER
+00C0AA     (base 16)		SILICON VALLEY COMPUTER
+				441 N. WHISMAN RD., BLDG.#13
+				MT. VIEW  CA  94043
+				US
+
+00-C0-66   (hex)		DOCUPOINT, INC.
+00C066     (base 16)		DOCUPOINT, INC.
+				2701 BAYVIEW DRIVE
+				FREMONT  CA  94538
+				US
+
+00-C0-2D   (hex)		FUJI PHOTO FILM CO., LTD.
+00C02D     (base 16)		FUJI PHOTO FILM CO., LTD.
+				798 MIYANODAI KAISEI-MACHI
+				    
+				JP
+
+00-C0-F2   (hex)		TRANSITION NETWORKS
+00C0F2     (base 16)		TRANSITION NETWORKS
+				10900 Red Circle Dr.
+				MInnetonka  MN  55343
+				US
+
+00-C0-BD   (hex)		INEX TECHNOLOGIES, INC.
+00C0BD     (base 16)		INEX TECHNOLOGIES, INC.
+				3350 SCOTT BLVD.
+				SANTA CLARA  CA  95054
+				US
+
+00-C0-88   (hex)		EKF ELEKTRONIK GMBH
+00C088     (base 16)		EKF ELEKTRONIK GMBH
+				PHILIPP-REIS-STR. 4
+				    
+				DE
+
+00-C0-11   (hex)		INTERACTIVE COMPUTING DEVICES
+00C011     (base 16)		INTERACTIVE COMPUTING DEVICES
+				1735 TECHNOLOGY DRIVE-STE #720
+				SAN JOSE  CA  95110
+				US
+
+00-C0-3E   (hex)		FA. GEBR. HELLER GMBH
+00C03E     (base 16)		FA. GEBR. HELLER GMBH
+				P.O. BOX 1428, DEP. EE7
+				    
+				DE
+
+00-C0-FD   (hex)		PROSUM
+00C0FD     (base 16)		PROSUM
+				12 RUE SADI-CARNOT
+				    
+				FR
+
+00-C0-14   (hex)		TELEMATICS CALABASAS INT'L,INC
+00C014     (base 16)		TELEMATICS CALABASAS INT'L,INC
+				26630 AGOURA ROAD
+				CALABASAS  CA  91302-1988
+				US
+
+00-AA-3C   (hex)		OLIVETTI TELECOM SPA (OLTECO)
+00AA3C     (base 16)		OLIVETTI TELECOM SPA (OLTECO)
+				10062 MILLER AVE.-STE.#204
+				CUPERTINO  CA  95014
+				US
+
+00-C0-C9   (hex)		ELSAG BAILEY PROCESS
+00C0C9     (base 16)		ELSAG BAILEY PROCESS
+				AUTOMATION
+				WICKLIFFE  OH  44092
+				US
+
+00-C0-48   (hex)		BAY TECHNICAL ASSOCIATES
+00C048     (base 16)		BAY TECHNICAL ASSOCIATES
+				200 N. SECOND STREET
+				BAY ST. LOUIS  MS  39520
+				US
+
+00-C0-76   (hex)		I-DATA INTERNATIONAL A-S
+00C076     (base 16)		I-DATA INTERNATIONAL A-S
+				35-43 VADSTRUPVEJ
+				    
+				DK
+
+00-C0-46   (hex)		Blue Chip Technology Ltd
+00C046     (base 16)		Blue Chip Technology Ltd
+				Chowley Oak Lane
+				Chester  Cheshire  CH3 9EX
+				GB
+
+00-C0-97   (hex)		ARCHIPEL SA
+00C097     (base 16)		ARCHIPEL SA
+				1 RUE DU BULLOZ
+				    
+				FR
+
+00-C0-04   (hex)		JAPAN BUSINESS COMPUTER CO.LTD
+00C004     (base 16)		JAPAN BUSINESS COMPUTER CO.LTD
+				1368 FUTOO-CHO, KOHOKU-KU
+				  222  
+				JP
+
+00-C0-60   (hex)		ID SCANDINAVIA AS
+00C060     (base 16)		ID SCANDINAVIA AS
+				P.O. BOX 4227
+				    
+				NO
+
+00-40-CC   (hex)		SILCOM MANUF'G TECHNOLOGY INC.
+0040CC     (base 16)		SILCOM MANUF'G TECHNOLOGY INC.
+				5620 TIMBERLEA BOULEVARD
+				CANADA  L4W  4M6
+				CA
+
+00-C0-9E   (hex)		CACHE COMPUTERS, INC.
+00C09E     (base 16)		CACHE COMPUTERS, INC.
+				46600 LANDING PARKWAY
+				FREMONT  CA  94538
+				US
+
+00-C0-AC   (hex)		GAMBIT COMPUTER COMMUNICATIONS
+00C0AC     (base 16)		GAMBIT COMPUTER COMMUNICATIONS
+				SOLTAM INDUSTRIAL PARK
+				    
+				IL
+
+00-C0-34   (hex)		TRANSACTION NETWORK
+00C034     (base 16)		TRANSACTION NETWORK
+				SERVICES, INC.
+				LANSING  MI  48910-8356
+				US
+
+00-C0-93   (hex)		ALTA RESEARCH CORP.
+00C093     (base 16)		ALTA RESEARCH CORP.
+				614 SOUTH FEDERAL HIGHWAY
+				DEERFIELD BEACH  FL  33441
+				US
+
+00-40-E7   (hex)		ARNOS INSTRUMENTS & COMPUTER
+0040E7     (base 16)		ARNOS INSTRUMENTS & COMPUTER
+				SYSTEMS (GROUP) CO., LTD.
+				TSUEN WAN  N.T.  
+				HK
+
+00-40-87   (hex)		UBITREX CORPORATION
+004087     (base 16)		UBITREX CORPORATION
+				19TH FLOOR, 155 CARLTON STREET
+				CANADA  R3C  3H8
+				CA
+
+00-40-07   (hex)		TELMAT INFORMATIQUE
+004007     (base 16)		TELMAT INFORMATIQUE
+				6 RUE DE L'INDUSTRIE
+				    
+				FR
+
+00-40-7B   (hex)		SCIENTIFIC ATLANTA
+00407B     (base 16)		SCIENTIFIC ATLANTA
+				Information Technology
+				Norcross  GA  30091-6850
+				US
+
+00-40-2C   (hex)		ISIS DISTRIBUTED SYSTEMS, INC.
+00402C     (base 16)		ISIS DISTRIBUTED SYSTEMS, INC.
+				111 SOUTH CAYUGA STREET
+				ITHACA  NY  14850
+				US
+
+00-C0-DF   (hex)		KYE Systems Corp.
+00C0DF     (base 16)		KYE Systems Corp.
+				No. 492 Sec 5, Chung Hsin Road
+				Taipei  Hsien  241
+				TW
+
+00-C0-F5   (hex)		METACOMP, INC.
+00C0F5     (base 16)		METACOMP, INC.
+				10989 VIA FRONTERA
+				SAN DIEGO  CA  92127
+				US
+
+00-C0-91   (hex)		JABIL CIRCUIT, INC.
+00C091     (base 16)		JABIL CIRCUIT, INC.
+				32275 MALLY ROAD
+				MADISON HEIGHTS  MI  48071
+				US
+
+00-C0-49   (hex)		U.S. ROBOTICS, INC.
+00C049     (base 16)		U.S. ROBOTICS, INC.
+				8100 NORTH MCCORMICK BLVD.
+				SKOKIE  IL  60076-2999
+				US
+
+00-C0-9D   (hex)		DISTRIBUTED SYSTEMS INT'L, INC
+00C09D     (base 16)		DISTRIBUTED SYSTEMS INT'L, INC
+				531 WEST ROOSEVLET RD, STE #2
+				WHEATON  IL  60187
+				US
+
+00-C0-E9   (hex)		OAK SOLUTIONS, LTD.
+00C0E9     (base 16)		OAK SOLUTIONS, LTD.
+				BROADWAY HOUSE
+				    ENGLAND
+				GB
+
+00-C0-C5   (hex)		SID INFORMATICA
+00C0C5     (base 16)		SID INFORMATICA
+				RUA DR. GERALDO CAMPOS MOREIRA
+				    
+				BR
+
+00-C0-51   (hex)		ADVANCED INTEGRATION RESEARCH
+00C051     (base 16)		ADVANCED INTEGRATION RESEARCH
+				2188 DEL FRANCO STREET
+				SAN JOSE  CA  95131
+				US
+
+00-C0-85   (hex)		ELECTRONICS FOR IMAGING, INC.
+00C085     (base 16)		ELECTRONICS FOR IMAGING, INC.
+				2855 CAMPUS DRIVE
+				SAN MATEO  CA  94403
+				US
+
+00-C0-B2   (hex)		NORAND CORPORATION
+00C0B2     (base 16)		NORAND CORPORATION
+				550 2ND STREET SE
+				CEDAR RAPIDS  IA  52401
+				US
+
+00-C0-54   (hex)		NETWORK PERIPHERALS, LTD.
+00C054     (base 16)		NETWORK PERIPHERALS, LTD.
+				4TH FLOOR, 17 BOWATER RD.
+				    ENGLAND
+				GB
+
+00-C0-22   (hex)		LASERMASTER TECHNOLOGIES, INC.
+00C022     (base 16)		LASERMASTER TECHNOLOGIES, INC.
+				7156 SHADY OAK ROAD
+				EDEN PRAIRIE  MN  55344
+				US
+
+00-C0-25   (hex)		DATAPRODUCTS CORPORATION
+00C025     (base 16)		DATAPRODUCTS CORPORATION
+				6219 DESOTO AVENUE
+				WOODLAND HILLS  CA  91365-0746
+				US
+
+00-40-CF   (hex)		STRAWBERRY TREE, INC.
+0040CF     (base 16)		STRAWBERRY TREE, INC.
+				160 SOUTH WOLFE ROAD
+				SUNNYVALE  CA  94086
+				US
+
+00-40-77   (hex)		MAXTON TECHNOLOGY CORPORATION
+004077     (base 16)		MAXTON TECHNOLOGY CORPORATION
+				4FK, 249, SEC. 3,
+				    TAIWAN
+				TW
+
+00-C0-2C   (hex)		CENTRUM COMMUNICATIONS, INC.
+00C02C     (base 16)		CENTRUM COMMUNICATIONS, INC.
+				2880 ZANKER ROAD-STE #108
+				SAN JOSE  CA  95134
+				US
+
+00-C0-FB   (hex)		ADVANCED TECHNOLOGY LABS
+00C0FB     (base 16)		ADVANCED TECHNOLOGY LABS
+				22100 BOTHELL HIGHWAY S.E.
+				BOTHELL  WA  98041-3003
+				US
+
+00-C0-2B   (hex)		GERLOFF GESELLSCHAFT FUR
+00C02B     (base 16)		GERLOFF GESELLSCHAFT FUR
+				ELEKRONISCHE SYSTEMENTWICKLUNG
+				    
+				DE
+
+00-40-74   (hex)		CABLE AND WIRELESS
+004074     (base 16)		CABLE AND WIRELESS
+				COMMUNICATIONS, INC.
+				VIENNA  VA  22182-3964
+				US
+
+00-40-B8   (hex)		IDEA ASSOCIATES
+0040B8     (base 16)		IDEA ASSOCIATES
+				29 DUNHAM ROAD
+				BILLERICA  MA  01821
+				US
+
+00-40-E8   (hex)		CHARLES RIVER DATA SYSTEMS,INC
+0040E8     (base 16)		CHARLES RIVER DATA SYSTEMS,INC
+				983 CONCORD STREET
+				FRAMINGHAM  MA  01701
+				US
+
+00-40-C0   (hex)		VISTA CONTROLS CORPORATION
+0040C0     (base 16)		VISTA CONTROLS CORPORATION
+				27825 FREMONT COURT
+				VALENCIA  CA  91355
+				US
+
+00-C0-A0   (hex)		ADVANCE MICRO RESEARCH, INC.
+00C0A0     (base 16)		ADVANCE MICRO RESEARCH, INC.
+				2045 CORPORATE COURT
+				SAN JOSE  CA  95131
+				US
+
+00-C0-10   (hex)		HIRAKAWA HEWTECH CORP.
+00C010     (base 16)		HIRAKAWA HEWTECH CORP.
+				7F, BLDG.B, OMORI BELLPORT
+				    
+				JP
+
+00-C0-37   (hex)		DYNATEM
+00C037     (base 16)		DYNATEM
+				15795 ROCKFIELD BLVD.
+				IRVINE  CA  92718
+				US
+
+00-40-83   (hex)		TDA INDUSTRIA DE PRODUTOS
+004083     (base 16)		TDA INDUSTRIA DE PRODUTOS
+				ELETRONICOS S.A.
+				    
+				BR
+
+00-40-5B   (hex)		FUNASSET LIMITED
+00405B     (base 16)		FUNASSET LIMITED
+				ORCHARDS, 14 TOWNSEND
+				  UNITED  KINGDOM
+				GB
+
+00-40-73   (hex)		BASS ASSOCIATES
+004073     (base 16)		BASS ASSOCIATES
+				435 TASSO STREET, STE. #325
+				PALO ALTO  CA  94301
+				US
+
+00-40-7D   (hex)		EXTENSION TECHNOLOGY CORP.
+00407D     (base 16)		EXTENSION TECHNOLOGY CORP.
+				30 HOLLIS STREET
+				FRAMINGHAM  MA  01701
+				US
+
+00-80-D7   (hex)		Fantum Engineering
+0080D7     (base 16)		Fantum Engineering
+				
+				Rockwall  TX  75087
+				US
+
+00-80-7A   (hex)		AITECH SYSTEMS LTD.
+00807A     (base 16)		AITECH SYSTEMS LTD.
+				3080 OLCOTT STREET
+				SANTA CLARA  CA  95054
+				US
+
+00-80-DC   (hex)		PICKER INTERNATIONAL
+0080DC     (base 16)		PICKER INTERNATIONAL
+				595 MINER ROAD
+				CLEVELAND  OH  44143
+				US
+
+00-40-4D   (hex)		TELECOMMUNICATIONS TECHNIQUES
+00404D     (base 16)		TELECOMMUNICATIONS TECHNIQUES
+				M/S
+				GERMANTOWN  MD  20876
+				US
+
+00-40-0D   (hex)		LANNET DATA COMMUNICATIONS,LTD
+00400D     (base 16)		LANNET DATA COMMUNICATIONS,LTD
+				ATIDIM TECHNOLOG'L PARK, BG.#3
+				    
+				IL
+
+00-40-19   (hex)		AEON SYSTEMS, INC.
+004019     (base 16)		AEON SYSTEMS, INC.
+				8401 WASHINGTON PLACE NE
+				ALBUQUERQUE  NM  87113
+				US
+
+00-40-BE   (hex)		BOEING DEFENSE & SPACE
+0040BE     (base 16)		BOEING DEFENSE & SPACE
+				P.O. BOX 3999
+				SEATTLE  WA  98124-2499
+				US
+
+00-40-6E   (hex)		COROLLARY, INC.
+00406E     (base 16)		COROLLARY, INC.
+				2802 KELVIN
+				IRVINE  CA  92714
+				US
+
+00-40-76   (hex)		Sun Conversion Technologies
+004076     (base 16)		Sun Conversion Technologies
+				100 Commerce Boulevard
+				Quakertown  PA  78951-2237
+				US
+
+00-40-22   (hex)		KLEVER COMPUTERS, INC.
+004022     (base 16)		KLEVER COMPUTERS, INC.
+				1028 W. MAUDE AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-40-BF   (hex)		CHANNEL SYSTEMS INTERN'L INC.
+0040BF     (base 16)		CHANNEL SYSTEMS INTERN'L INC.
+				93 SO. LA PATERA LANE
+				SANTA BARBARA  CA  93117
+				US
+
+00-40-1E   (hex)		ICC
+00401E     (base 16)		ICC
+				8230 MONTGOMERY ROAD
+				CINCINNATI  OH  45236
+				US
+
+00-40-9A   (hex)		NETWORK EXPRESS, INC.
+00409A     (base 16)		NETWORK EXPRESS, INC.
+				2200 GREEN ROAD - STE
+				ANN ARBOR  MI  48170
+				US
+
+00-40-94   (hex)		SHOGRAPHICS, INC.
+004094     (base 16)		SHOGRAPHICS, INC.
+				1890 N. SHORELINE BLVD.
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-40-55   (hex)		METRONIX GMBH
+004055     (base 16)		METRONIX GMBH
+				NEUE KNOCHENHAUERSTRAßE 5
+				  WEST  
+				DE
+
+00-40-27   (hex)		SMC MASSACHUSETTS, INC.
+004027     (base 16)		SMC MASSACHUSETTS, INC.
+				25 WALKERS BROOK DRIVE
+				READING  MA  01867
+				US
+
+00-40-8B   (hex)		RAYLAN CORPORATION
+00408B     (base 16)		RAYLAN CORPORATION
+				120 INDEPENDENCE DRIVE
+				MENLO PARK  CA  94025
+				US
+
+00-40-EF   (hex)		HYPERCOM, INC.
+0040EF     (base 16)		HYPERCOM, INC.
+				2851 WEST KATHLEEN ROAD
+				PHOENIX  AZ  85023
+				US
+
+00-40-93   (hex)		PAXDATA NETWORKS LTD.
+004093     (base 16)		PAXDATA NETWORKS LTD.
+				COMMUNICATIONS HOUSE,
+				    ENGLAND
+				GB
+
+00-40-85   (hex)		SAAB INSTRUMENTS AB
+004085     (base 16)		SAAB INSTRUMENTS AB
+				P.O. BOX 1017
+				    
+				SE
+
+00-40-23   (hex)		LOGIC CORPORATION
+004023     (base 16)		LOGIC CORPORATION
+				3-14-10 MEIJI-SEIMEI BUILDING
+				    
+				JP
+
+00-40-A4   (hex)		ROSE ELECTRONICS
+0040A4     (base 16)		ROSE ELECTRONICS
+				P.O. BOX 742571
+				HOUSTON  TX  77274-2571
+				US
+
+00-40-08   (hex)		A PLUS INFO CORPORATION
+004008     (base 16)		A PLUS INFO CORPORATION
+				5F, NO.2, LANE 235
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-40-B5   (hex)		VIDEO TECHNOLOGY COMPUTERS LTD
+0040B5     (base 16)		VIDEO TECHNOLOGY COMPUTERS LTD
+				33/F., BLOCK #1,
+				N.T.  HONG  KONG
+				HK
+
+00-40-12   (hex)		WINDATA, INC.
+004012     (base 16)		WINDATA, INC.
+				10 BEARFOOT ROAD
+				NORTHBORO  MA  01532
+				US
+
+00-40-D5   (hex)		Sartorius Mechatronics T&H GmbH 
+0040D5     (base 16)		Sartorius Mechatronics T&H GmbH 
+				WEENDER LANDSTR: 94 - 108
+				    
+				DE
+
+00-40-10   (hex)		SONIC SYSTEMS, INC.
+004010     (base 16)		SONIC SYSTEMS, INC.
+				575 PASTORIA NORTH AVENUE
+				SUNNYVALE  CA  940867
+				US
+
+00-40-CA   (hex)		FIRST INTERNAT'L COMPUTER, INC
+0040CA     (base 16)		FIRST INTERNAT'L COMPUTER, INC
+				FIC Building
+				Neihu  Taipei 114  Taipei 114
+				TW
+
+00-40-C4   (hex)		KINKEI SYSTEM CORPORATION
+0040C4     (base 16)		KINKEI SYSTEM CORPORATION
+				1-22-17, KAMIKITA, HIRANOKU
+				    
+				JP
+
+00-40-5D   (hex)		STAR-TEK, INC.
+00405D     (base 16)		STAR-TEK, INC.
+				71 LYMAN STREET
+				NORTHBORO  MA  01532
+				US
+
+00-40-E2   (hex)		MESA RIDGE TECHNOLOGIES, INC.
+0040E2     (base 16)		MESA RIDGE TECHNOLOGIES, INC.
+				6725 MESA RIDGE ROAD-STE#100
+				SAN DIEGO  CA  92121
+				US
+
+00-40-8C   (hex)		AXIS COMMUNICATIONS AB
+00408C     (base 16)		AXIS COMMUNICATIONS AB
+				SCHEELEVAGEN 16
+				    
+				SE
+
+00-40-45   (hex)		TWINHEAD CORPORATION
+004045     (base 16)		TWINHEAD CORPORATION
+				1537 CENTRE POINTE DRIVE
+				MILPITAS  CA  95035
+				US
+
+00-40-28   (hex)		NETCOMM LIMITED
+004028     (base 16)		NETCOMM LIMITED
+				3 OLYMPIC BUSINESS CENTRE
+				  UNITED  KINGDOM
+				GB
+
+00-40-DD   (hex)		HONG TECHNOLOGIES
+0040DD     (base 16)		HONG TECHNOLOGIES
+				532 WEDDELL DRIVE
+				SUNNYVALE  CA  94089
+				US
+
+00-40-CB   (hex)		LANWAN TECHNOLOGIES
+0040CB     (base 16)		LANWAN TECHNOLOGIES
+				1566 LA PRADERA DRIVE
+				CAMPBELL  CA  95008
+				US
+
+00-40-B2   (hex)		SYSTEMFORSCHUNG
+0040B2     (base 16)		SYSTEMFORSCHUNG
+				KONIGSTRASSE 33A
+				    
+				DE
+
+00-40-E6   (hex)		C.A.E.N.
+0040E6     (base 16)		C.A.E.N.
+				2, CHEMIN LATERAL
+				    
+				FR
+
+00-40-F0   (hex)		MicroBrain,Inc.
+0040F0     (base 16)		MicroBrain,Inc.
+				Yuzan Bldg. 4F,
+				Aichi-gun AICHI    480-1117
+				JP
+
+00-40-89   (hex)		MEIDENSHA CORPORATION
+004089     (base 16)		MEIDENSHA CORPORATION
+				FACTORY NO.4, 515 KAMINAKAMIZO
+				    
+				JP
+
+00-40-15   (hex)		ASCOM INFRASYS AG
+004015     (base 16)		ASCOM INFRASYS AG
+				DPT. EASO 3726
+				    
+				CH
+
+00-80-95   (hex)		BASIC MERTON HANDELSGES.M.B.H.
+008095     (base 16)		BASIC MERTON HANDELSGES.M.B.H.
+				DURCHLASS-STRASSE 42
+				    
+				AT
+
+00-80-AE   (hex)		HUGHES NETWORK SYSTEMS
+0080AE     (base 16)		HUGHES NETWORK SYSTEMS
+				11717 EXPLORATION LANE
+				GERMANTOWN  MD  20876
+				US
+
+00-80-3A   (hex)		VARITYPER, INC.
+00803A     (base 16)		VARITYPER, INC.
+				900 MIDDLESEX TURNPIKE
+				BILLERICA  MA  01821
+				US
+
+00-80-1C   (hex)		NEWPORT SYSTEMS SOLUTIONS
+00801C     (base 16)		NEWPORT SYSTEMS SOLUTIONS
+				4019 WESTERLY AVENUE
+				NEWPORT BEACH  CA  92660
+				US
+
+00-80-56   (hex)		SPHINX Electronics GmbH & Co KG
+008056     (base 16)		SPHINX Electronics GmbH & Co KG
+				Tullastr. 3
+				    
+				DE
+
+00-80-31   (hex)		BASYS, CORP.
+008031     (base 16)		BASYS, CORP.
+				501 MACARA AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-80-DB   (hex)		GRAPHON CORPORATION
+0080DB     (base 16)		GRAPHON CORPORATION
+				1506 DELL AVE - #
+				CAMPBELL  CA  95008-6911
+				VE
+
+00-80-82   (hex)		PEP MODULAR COMPUTERS GMBH
+008082     (base 16)		PEP MODULAR COMPUTERS GMBH
+				APFELSTRANGER STR. 16
+				  WEST  
+				DE
+
+00-80-39   (hex)		ALCATEL STC AUSTRALIA
+008039     (base 16)		ALCATEL STC AUSTRALIA
+				252-280 BOTANY ROAD
+				    
+				AU
+
+00-80-23   (hex)		INTEGRATED BUSINESS NETWORKS
+008023     (base 16)		INTEGRATED BUSINESS NETWORKS
+				1BN THE SYSTEMS CENTRE
+				BUCKS HP19 3XN  -  ENGLAND
+				GB
+
+00-80-6B   (hex)		SCHMID TELECOMMUNICATION
+00806B     (base 16)		SCHMID TELECOMMUNICATION
+				BINZSTRASSE 35,
+				    
+				CH
+
+00-80-59   (hex)		STANLEY ELECTRIC CO., LTD
+008059     (base 16)		STANLEY ELECTRIC CO., LTD
+				R&D LABORATORY
+				    
+				JP
+
+00-80-41   (hex)		VEB KOMBINAT ROBOTRON
+008041     (base 16)		VEB KOMBINAT ROBOTRON
+				GRUNAER STRAßE 2, DRESDEN 8010
+				GDR  EAST  
+				DE
+
+00-80-80   (hex)		DATAMEDIA CORPORATION
+008080     (base 16)		DATAMEDIA CORPORATION
+				7401 CENTRAL HIGHWAY
+				PENNSAUKEN  NJ  08109
+				US
+
+00-80-3F   (hex)		TATUNG COMPANY
+00803F     (base 16)		TATUNG COMPANY
+				22 CHUNGSHANG N. RD. 3RD SEC.
+				TAIPEI  TAIWAN  R.O.C.
+				TW
+
+00-80-E6   (hex)		PEER NETWORKS, INC.
+0080E6     (base 16)		PEER NETWORKS, INC.
+				3350 SCOTT BLVD. BLDG. 14
+				SANTA CLARA  CA  95054
+				US
+
+00-80-E0   (hex)		XTP SYSTEMS, INC.
+0080E0     (base 16)		XTP SYSTEMS, INC.
+				1900 STATE STREET , STE
+				SANTA BARBARA  CA  93101
+				US
+
+00-80-88   (hex)		VICTOR COMPANY OF JAPAN, LTD.
+008088     (base 16)		VICTOR COMPANY OF JAPAN, LTD.
+				58-7 SHINMEI-CHO, YOKOSUKA
+				    
+				JP
+
+00-80-D8   (hex)		NETWORK PERIPHERALS INC.
+0080D8     (base 16)		NETWORK PERIPHERALS INC.
+				2890 ZONKER ROAD SUITE 209
+				SAN JOSE  CA  95134
+				US
+
+00-80-9E   (hex)		DATUS GMBH
+00809E     (base 16)		DATUS GMBH
+				INDUSTRIESTR. 2
+				  WEST  
+				DE
+
+00-80-2B   (hex)		INTEGRATED MARKETING CO
+00802B     (base 16)		INTEGRATED MARKETING CO
+				1360 BORDEAUX DRIVE
+				SUNNYVALE  CA  94089
+				US
+
+00-80-01   (hex)		PERIPHONICS CORPORATION
+008001     (base 16)		PERIPHONICS CORPORATION
+				4000 VETERANS MEMORIAL HIGHWAY
+				BOHEMIA  NEW YORK  11716
+				US
+
+00-80-97   (hex)		CENTRALP AUTOMATISMES
+008097     (base 16)		CENTRALP AUTOMATISMES
+				21, RUE MARCEL PAGNOL 69694
+				    
+				FR
+
+00-80-71   (hex)		SAI TECHNOLOGY
+008071     (base 16)		SAI TECHNOLOGY
+				4224 CAMPUS POINT COURT
+				SAN DIEGO  CA  92121-1513
+				US
+
+00-80-98   (hex)		TDK CORPORATION
+008098     (base 16)		TDK CORPORATION
+				CORP. R&D DEPT. TECH. HDQTERS.
+				CHIBA-KEN  272,  
+				JP
+
+00-80-CA   (hex)		NETCOM RESEARCH INCORPORATED
+0080CA     (base 16)		NETCOM RESEARCH INCORPORATED
+				201 TECHNOLOGY DRIVE
+				IRVINE  CA  92718
+				US
+
+00-80-D5   (hex)		CADRE TECHNOLOGIES
+0080D5     (base 16)		CADRE TECHNOLOGIES
+				19545 NW VON NEUMANN DRIVE
+				BEAVERTON  OR  97006
+				VU
+
+00-80-1B   (hex)		KODIAK TECHNOLOGY
+00801B     (base 16)		KODIAK TECHNOLOGY
+				2340 HARRIS WAY
+				SAN JOSE  CA  95131
+				US
+
+00-80-D3   (hex)		SHIVA CORP.
+0080D3     (base 16)		SHIVA CORP.
+				205 BURLINGTON ROAD
+				BEDFORD  MA  01730
+				US
+
+00-80-B3   (hex)		AVAL DATA CORPORATION
+0080B3     (base 16)		AVAL DATA CORPORATION
+				MACHIDA ENGINEERING CENTER
+				    
+				JP
+
+00-80-20   (hex)		NETWORK PRODUCTS
+008020     (base 16)		NETWORK PRODUCTS
+				DIVISION OF ANDREW CORPORATION
+				TORRANCE  CA  90503
+				US
+
+00-80-70   (hex)		COMPUTADORAS MICRON
+008070     (base 16)		COMPUTADORAS MICRON
+				GUERRERO 2001 - 19
+				    
+				MX
+
+00-80-08   (hex)		DYNATECH COMPUTER SYSTEMS
+008008     (base 16)		DYNATECH COMPUTER SYSTEMS
+				280 BERNARDO AVENUE
+				MOUNTAIN VIEW  CA  94039-7400
+				US
+
+00-00-E4   (hex)		IN2 GROUPE INTERTECHNIQUE
+0000E4     (base 16)		IN2 GROUPE INTERTECHNIQUE
+				IN2 - B.P.63
+				    
+				FR
+
+00-80-13   (hex)		THOMAS-CONRAD CORPORATION
+008013     (base 16)		THOMAS-CONRAD CORPORATION
+				1908-R KRAMER LANE
+				AUSTIN  TX  78758
+				US
+
+00-80-6E   (hex)		NIPPON STEEL CORPORATION
+00806E     (base 16)		NIPPON STEEL CORPORATION
+				31-1 SHINKAWA 2-CHOUME
+				    
+				JP
+
+00-80-10   (hex)		COMMODORE INTERNATIONAL
+008010     (base 16)		COMMODORE INTERNATIONAL
+				1200 WILSON DRIVE
+				WEST CHESTER  PA  19380
+				US
+
+00-80-47   (hex)		IN-NET CORP.
+008047     (base 16)		IN-NET CORP.
+				16720 WEST BERNARDO DRIVE
+				SAN DIEGO  CA  92127-1904
+				US
+
+00-80-67   (hex)		SQUARE D COMPANY
+008067     (base 16)		SQUARE D COMPANY
+				4041 NORTH RICHARD STREET
+				MILWAUKEE  WI  53201
+				US
+
+00-80-45   (hex)		MATSUSHITA ELECTRIC IND. CO
+008045     (base 16)		MATSUSHITA ELECTRIC IND. CO
+				COMPUTER DIVISION
+				OSAKA  571  
+				JP
+
+00-80-BF   (hex)		TAKAOKA ELECTRIC MFG. CO. LTD.
+0080BF     (base 16)		TAKAOKA ELECTRIC MFG. CO. LTD.
+				KANDA BRANCH OFFICE TONEN
+				    
+				JP
+
+00-80-F9   (hex)		HEURIKON CORPORATION
+0080F9     (base 16)		HEURIKON CORPORATION
+				8310 EXCELSIOR DRIVE
+				MADISON  WI  53717
+				US
+
+00-80-A1   (hex)		MICROTEST, INC.
+0080A1     (base 16)		MICROTEST, INC.
+				4747 N. 22ND STREET
+				PHOENIX  AZ  85016-4708
+				US
+
+00-80-A9   (hex)		CLEARPOINT RESEARCH
+0080A9     (base 16)		CLEARPOINT RESEARCH
+				190 NORTH MAIN STREET
+				  NATICK  MA
+				US
+
+00-80-17   (hex)		PFU LIMITED
+008017     (base 16)		PFU LIMITED
+				Nu 98-2 Unoke
+				Kahoku-shi, Ishikawa    929-1192
+				JP
+
+00-80-F8   (hex)		MIZAR, INC.
+0080F8     (base 16)		MIZAR, INC.
+				1419 DUNN DRIVE
+				CARROLLTON  TX  75006
+				US
+
+00-00-14   (hex)		NETRONIX
+000014     (base 16)		NETRONIX
+				1372 MCDOWELL BLVD.
+				PETULAMA  CA  94952
+				US
+
+00-00-72   (hex)		MINIWARE TECHNOLOGY
+000072     (base 16)		MINIWARE TECHNOLOGY
+				BEEMDENSTRAAT 38
+				  THE  
+				NL
+
+00-00-A1   (hex)		MARQUETTE ELECTRIC CO.
+0000A1     (base 16)		MARQUETTE ELECTRIC CO.
+				8200 WEST TOWER AVENUE
+				MILWAUKEE  WI  53223
+				US
+
+00-00-F5   (hex)		DIAMOND SALES LIMITED
+0000F5     (base 16)		DIAMOND SALES LIMITED
+				17, CHARTERHOUSE STREET
+				  UNITED  KINGDOM
+				GB
+
+00-00-5C   (hex)		TELEMATICS INTERNATIONAL INC.
+00005C     (base 16)		TELEMATICS INTERNATIONAL INC.
+				1201 CYPRESS CREEK RD
+				FT. LAUDERDALE  FL  33309
+				US
+
+00-00-AC   (hex)		CONWARE COMPUTER CONSULTING
+0000AC     (base 16)		CONWARE COMPUTER CONSULTING
+				KILLISFELDSTRAßE 64
+				    
+				DE
+
+00-00-94   (hex)		ASANTE TECHNOLOGIES
+000094     (base 16)		ASANTE TECHNOLOGIES
+				821 FOX LANE
+				SAN JOSE  CA  95131
+				US
+
+00-00-90   (hex)		MICROCOM
+000090     (base 16)		MICROCOM
+				500 RIVER RIDGE DRIVE
+				NORWOOD  MA  02062-5028
+				US
+
+00-00-47   (hex)		NICOLET INSTRUMENTS CORP.
+000047     (base 16)		NICOLET INSTRUMENTS CORP.
+				5225 VERONA ROAD
+				MADISON  WI  53711
+				US
+
+00-00-21   (hex)		SUREMAN COMP. & COMMUN. CORP.
+000021     (base 16)		SUREMAN COMP. & COMMUN. CORP.
+				10F-5 NO. 7,  SEC. 3
+				TAIPEI  TAIWAN,  R.O.C.
+				TW
+
+00-00-30   (hex)		VG LABORATORY SYSTEMS LTD
+000030     (base 16)		VG LABORATORY SYSTEMS LTD
+				TRIBUNE AVENUE
+				    ENGLAND
+				GB
+
+00-00-35   (hex)		SPECTRAGRAPHICS CORPORATION
+000035     (base 16)		SPECTRAGRAPHICS CORPORATION
+				    OR
+				SAN DIEGO  CA  92121
+				US
+
+00-00-26   (hex)		SHA-KEN CO., LTD.
+000026     (base 16)		SHA-KEN CO., LTD.
+				MINAMI-OTSUKA
+				  TOKYO  
+				JP
+
+00-00-B6   (hex)		MICRO-MATIC RESEARCH
+0000B6     (base 16)		MICRO-MATIC RESEARCH
+				AMBACHTENLAAN  21 B5
+				    
+				BE
+
+00-00-82   (hex)		LECTRA SYSTEMES SA
+000082     (base 16)		LECTRA SYSTEMES SA
+				CHEMIN DE MARTICOT
+				    
+				FR
+
+00-00-2B   (hex)		CRISP AUTOMATION, INC
+00002B     (base 16)		CRISP AUTOMATION, INC
+				5160 BLAZER PARKWAY
+				DUBLIN  OH  43017
+				US
+
+00-00-51   (hex)		HOB ELECTRONIC GMBH & CO. KG
+000051     (base 16)		HOB ELECTRONIC GMBH & CO. KG
+				BRANDSSTATTER-STR.2-10
+				    
+				DE
+
+00-00-A7   (hex)		NETWORK COMPUTING DEVICES INC.
+0000A7     (base 16)		NETWORK COMPUTING DEVICES INC.
+				350 NORTH BERNARDO
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-00-98   (hex)		CROSSCOMM CORPORATION
+000098     (base 16)		CROSSCOMM CORPORATION
+				450 DONALD LYNCH BOULEVARD
+				MARLBOROUGH  MA  01752
+				US
+
+00-00-C6   (hex)		EON SYSTEMS
+0000C6     (base 16)		EON SYSTEMS
+				10601 SOUTH DEANZA BLVD.
+				CUPERTINO  CA  95014
+				US
+
+00-00-70   (hex)		HCL LIMITED
+000070     (base 16)		HCL LIMITED
+				RESEARCH & DEVELOPMENT UNIT
+				    
+				IN
+
+00-00-8F   (hex)		Raytheon
+00008F     (base 16)		Raytheon
+				M/S 1-1-1119
+				Marlboro  MA  01752
+				US
+
+00-00-F1   (hex)		MAGNA COMPUTER CORPORATION
+0000F1     (base 16)		MAGNA COMPUTER CORPORATION
+				22 KEEWAYDIN DRIVE
+				SALEM  NH  03079
+				US
+
+00-00-54   (hex)		Schneider Electric
+000054     (base 16)		Schneider Electric
+				35 rue Joseph Monier
+				    
+				FR
+
+00-00-20   (hex)		DATAINDUSTRIER DIAB AB
+000020     (base 16)		DATAINDUSTRIER DIAB AB
+				BOX 2029
+				    
+				SE
+
+00-00-7A   (hex)		DANA COMPUTER INC.
+00007A     (base 16)		DANA COMPUTER INC.
+				550 DEL REY AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-00-45   (hex)		FORD AEROSPACE & COMM. CORP.
+000045     (base 16)		FORD AEROSPACE & COMM. CORP.
+				COLORADO SPRINGS OPERATION
+				COLORADO SPRINGS  CO  80908
+				US
+
+00-00-9C   (hex)		ROLM MIL-SPEC COMPUTERS
+00009C     (base 16)		ROLM MIL-SPEC COMPUTERS
+				3151 ZANKER ROAD
+				SAN JOSE  CA  95148
+				US
+
+00-00-7C   (hex)		AMPERE INCORPORATED
+00007C     (base 16)		AMPERE INCORPORATED
+				SHINJUKU ASAHI BLDG.
+				  TOKYO  
+				JP
+
+00-00-68   (hex)		ROSEMOUNT CONTROLS
+000068     (base 16)		ROSEMOUNT CONTROLS
+				1300 E. LAMBERT ROAD
+				LA HABRA  CA  90632
+				US
+
+00-00-E9   (hex)		ISICAD, INC.
+0000E9     (base 16)		ISICAD, INC.
+				1920 WEST CORPORATE WAY
+				ANAHEIM  CA  92803-6122
+				US
+
+00-00-9F   (hex)		AMERISTAR TECHNOLOGIES INC.
+00009F     (base 16)		AMERISTAR TECHNOLOGIES INC.
+				47 WHITTIER AVE.
+				MEDFORD  NY  11763
+				US
+
+00-00-E3   (hex)		INTEGRATED MICRO PRODUCTS LTD
+0000E3     (base 16)		INTEGRATED MICRO PRODUCTS LTD
+				IMP, NO. 1 INDUSTRIAL ESTATE
+				ENGLAND  ENGLAND  DH86TJ
+				GB
+
+00-00-AD   (hex)		BRUKER INSTRUMENTS INC.
+0000AD     (base 16)		BRUKER INSTRUMENTS INC.
+				MANNING PARK
+				BILLERICA  MA  01821
+				US
+
+00-00-74   (hex)		RICOH COMPANY LTD.
+000074     (base 16)		RICOH COMPANY LTD.
+				2446 TODA, ATSUGI CITY
+				  243  
+				JP
+
+00-00-46   (hex)		OLIVETTI NORTH AMERICA
+000046     (base 16)		OLIVETTI NORTH AMERICA
+				E 22425 APPLEWAY
+				LIBERTY LAKE  WA  99019
+				US
+
+00-00-8D   (hex)		Cryptek Inc.
+00008D     (base 16)		Cryptek Inc.
+				1501 Moran Road
+				Sterling  VA  20166
+				US
+
+00-00-3B   (hex)		i Controls, Inc.
+00003B     (base 16)		i Controls, Inc.
+				12F Doonsan building, 105-7
+				  KOREA  135-714
+				KR
+
+00-00-B3   (hex)		CIMLINC INCORPORATED
+0000B3     (base 16)		CIMLINC INCORPORATED
+				1957 CROOKS ROAD
+				TROY  MI  48084
+				US
+
+00-00-D3   (hex)		WANG LABORATORIES INC.
+0000D3     (base 16)		WANG LABORATORIES INC.
+				
+				    
+				
+
+00-00-D0   (hex)		DEVELCON ELECTRONICS LTD.
+0000D0     (base 16)		DEVELCON ELECTRONICS LTD.
+				856-51ST STREET EAST
+				    
+				CA
+
+00-00-93   (hex)		PROTEON INC.
+000093     (base 16)		PROTEON INC.
+				4 TECH CIRCLE
+				NATICK  MA  01760
+				US
+
+00-00-8B   (hex)		INFOTRON
+00008B     (base 16)		INFOTRON
+				9 NORTH OLNEY
+				CHERRY HILL  NJ  08003
+				US
+
+08-00-57   (hex)		Evans & Sutherland
+080057     (base 16)		Evans & Sutherland
+				
+				Salt Lake City  UT  
+				US
+
+08-00-5D   (hex)		GOULD INC.
+08005D     (base 16)		GOULD INC.
+				6901 WEST SUNRISE BLVD.
+				FT. LAUDERDALE  FL  33310-9148
+				US
+
+08-00-5B   (hex)		VTA TECHNOLOGIES INC.
+08005B     (base 16)		VTA TECHNOLOGIES INC.
+				2040 SHERMAN STREET
+				HOLLYWOOD  FL  33020
+				US
+
+08-00-71   (hex)		MATRA (DSIE)
+080071     (base 16)		MATRA (DSIE)
+				PARC D'AFFAIRES - B.P. 262
+				    
+				FR
+
+08-00-6C   (hex)		SUNTEK TECHNOLOGY INT'L
+08006C     (base 16)		SUNTEK TECHNOLOGY INT'L
+				586 NO. FIRST STREET
+				SAN JOSE  CA  95112
+				US
+
+08-00-67   (hex)		ComDesign
+080067     (base 16)		ComDesign
+				
+				Goleta  CA  
+				US
+
+08-00-8C   (hex)		NETWORK RESEARCH CORPORATION
+08008C     (base 16)		NETWORK RESEARCH CORPORATION
+				2380 N. ROSE AVENUE
+				OXNARD  CA  93010
+				US
+
+08-00-81   (hex)		ASTECH INC.
+080081     (base 16)		ASTECH INC.
+				670 NORTH COMMERCIAL STREET
+				MANCHESTER  NH  03101
+				US
+
+08-00-2D   (hex)		LAN-TEC INC.
+08002D     (base 16)		LAN-TEC INC.
+				2131 UNIVERSITY AVENUE
+				BERKELEY  CA  94704
+				US
+
+00-DD-00   (hex)		UNGERMANN-BASS INC.
+00DD00     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-00-AA   (hex)		XEROX CORPORATION
+0000AA     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+04-0A-E0   (hex)		XMIT AG COMPUTER NETWORKS
+040AE0     (base 16)		XMIT AG COMPUTER NETWORKS
+				11 AVENUE DE BAUMETTES
+				    
+				CH
+
+08-00-11   (hex)		TEKTRONIX INC.
+080011     (base 16)		TEKTRONIX INC.
+				TECHNICAL STANDARDS
+				BEAVERTON  OR  97077
+				US
+
+08-00-26   (hex)		NORSK DATA A.S.
+080026     (base 16)		NORSK DATA A.S.
+				P.O. BOX 25 BOGERUD
+				    
+				NO
+
+08-00-25   (hex)		CONTROL DATA
+080025     (base 16)		CONTROL DATA
+				4201 LEXINGTON AVE NORTH
+				ARDEN HILLS  MN  55112
+				US
+
+10-00-00   (hex)		Private
+100000     (base 16)		Private
+
+00-00-D7   (hex)		DARTMOUTH COLLEGE
+0000D7     (base 16)		DARTMOUTH COLLEGE
+				KIEWIT COMPUTER CENTER
+				HANOVER  NH  03755
+				US
+
+AA-00-04   (hex)		DIGITAL EQUIPMENT CORPORATION
+AA0004     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				LKG 1-2/A19
+				LITTLETON  MA  01460-1289
+				US
+
+08-00-0C   (hex)		MIKLYN DEVELOPMENT CO.
+08000C     (base 16)		MIKLYN DEVELOPMENT CO.
+				3613 ANDOVER DIVE
+				BEDFORD  TX  76021
+				US
+
+00-DD-05   (hex)		UNGERMANN-BASS INC.
+00DD05     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+08-00-1D   (hex)		ABLE COMMUNICATIONS INC.
+08001D     (base 16)		ABLE COMMUNICATIONS INC.
+				17891 CARTWRIGHT ROAD
+				IRVINE  CA  92714-6216
+				US
+
+00-DD-0B   (hex)		UNGERMANN-BASS INC.
+00DD0B     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+08-00-03   (hex)		ADVANCED COMPUTER COMM.
+080003     (base 16)		ADVANCED COMPUTER COMM.
+				720 SANTA BARBARA ST.
+				SANTA BARBARA  CA  93101
+				US
+
+00-DD-03   (hex)		UNGERMANN-BASS INC.
+00DD03     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-DD-0F   (hex)		UNGERMANN-BASS INC.
+00DD0F     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-00-01   (hex)		XEROX CORPORATION
+000001     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+08-00-17   (hex)		NATIONAL SEMICONDUCTOR
+080017     (base 16)		NATIONAL SEMICONDUCTOR
+				2900 SEMICONDUCTOR DRIVE
+				SANTA CLARA  CA  95051
+				US
+
+54-21-60   (hex)		Alula
+542160     (base 16)		Alula
+				2340 Energy Park Drive
+				St. Paul  MN  55108
+				US
+
+10-B3-C6   (hex)		Cisco Systems, Inc
+10B3C6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+10-B3-D6   (hex)		Cisco Systems, Inc
+10B3D6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-96-30   (hex)		Technicolor CH USA Inc.
+589630     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+F8-54-B8   (hex)		Amazon Technologies Inc.
+F854B8     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+78-17-35   (hex)		Nokia Shanghai Bell Co., Ltd.
+781735     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+3C-89-4D   (hex)		Dr. Ing. h.c. F. Porsche AG
+3C894D     (base 16)		Dr. Ing. h.c. F. Porsche AG
+				Porscheplatz 1
+				Stuttgart    70435
+				DE
+
+84-C8-07   (hex)		ADVA Optical Networking Ltd.
+84C807     (base 16)		ADVA Optical Networking Ltd.
+				ADVAntage House
+				York    YO30 4RY
+				GB
+
+A0-AB-51   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+A0AB51     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+64-C9-01   (hex)		INVENTEC Corporation
+64C901     (base 16)		INVENTEC Corporation
+				No.66, Hougang St., Shilin Dist., Taipei City 111, Taiwan (R.O.C.)
+				Taipei    111
+				TW
+
+74-9E-F5   (hex)		Samsung Electronics Co.,Ltd
+749EF5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+68-BF-C4   (hex)		Samsung Electronics Co.,Ltd
+68BFC4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-5E-45   (hex)		ASUSTek COMPUTER INC.
+A85E45     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+04-B1-A1   (hex)		Samsung Electronics Co.,Ltd
+04B1A1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-46-4E   (hex)		Samsung Electronics Co.,Ltd
+CC464E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F8-89-3C   (hex)		Inventec Appliances Corp.
+F8893C     (base 16)		Inventec Appliances Corp.
+				37 Wugong 5th road, New Taipei Industrial Park,
+				New Taipei City  Wugu District  24890
+				TW
+
+A0-DF-15   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A0DF15     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-AD-34   (hex)		Routerboard.com
+C4AD34     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+30-6F-07   (hex)		Nations Technologies Inc.
+306F07     (base 16)		Nations Technologies Inc.
+				18F, Nations Tower, Nanshan District
+				Shenzhen    518057
+				CN
+
+24-74-F7   (hex)		GoPro
+2474F7     (base 16)		GoPro
+				3000 Clearview Way
+				San Mateo  CA  94402
+				US
+
+7C-D5-66   (hex)		Amazon Technologies Inc.
+7CD566     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+68-63-50   (hex)		Hella India Automotive Pvt Ltd
+686350     (base 16)		Hella India Automotive Pvt Ltd
+				Unit no 201A to 201B  Nano Space Surveyno.5/1B/2 BanerBaner Pashan Link road
+				Pune  Maharastra  411045
+				IN
+
+5C-E5-0C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+5CE50C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+18-70-3B   (hex)		Huawei Device Co., Ltd.
+18703B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D8-9E-61   (hex)		Huawei Device Co., Ltd.
+D89E61     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-7E-00   (hex)		Huawei Device Co., Ltd.
+347E00     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-30-92   (hex)		Kontron Electronics AG
+003092     (base 16)		Kontron Electronics AG
+				Riedstrasse 1
+				Rotkreuz    CH-6343
+				CH
+
+E8-5A-8B   (hex)		Xiaomi Communications Co Ltd
+E85A8B     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+44-22-95   (hex)		China Mobile Iot Limited company
+442295     (base 16)		China Mobile Iot Limited company
+				No. 8 Yangliu North Road, Yubei District, Chongqing, China
+				Chong Qing  Chong Qing  401120
+				CN
+
+5C-71-0D   (hex)		Cisco Systems, Inc
+5C710D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+00-AB-48   (hex)		eero inc.
+00AB48     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+F8-55-CD   (hex)		Visteon Corporation
+F855CD     (base 16)		Visteon Corporation
+				One Village Center Drive
+				Van Buren Twp  MI  48111
+				US
+
+44-18-47   (hex)		HUNAN SCROWN ELECTRONIC INFORMATION TECH.CO.,LTD
+441847     (base 16)		HUNAN SCROWN ELECTRONIC INFORMATION TECH.CO.,LTD
+				Building No.4,Changsha Zhongdian Software Park No.39,Jianshan Road
+				Changsha  Hunan  410006
+				CN
+
+1C-C1-BC   (hex)		Yichip Microelectronics (Hangzhou) Co.,Ltd
+1CC1BC     (base 16)		Yichip Microelectronics (Hangzhou) Co.,Ltd
+				Room 401, Building 15, No.498 Guoshoujing Road, Pudong Software Park
+				Shanghai    200120
+				CN
+
+AC-61-B9   (hex)		WAMA Technology Limited
+AC61B9     (base 16)		WAMA Technology Limited
+				Room 2205, Westley Square, 48 Hoi Yuen Road, Kwun Tong, Kowloon
+				Hong Kong    00000
+				HK
+
+C4-D8-F3   (hex)		iZotope
+C4D8F3     (base 16)		iZotope
+				60 Hampshire St
+				Cambridge  MA  02139
+				US
+
+00-30-56   (hex)		HMS Industrial Networks
+003056     (base 16)		HMS Industrial Networks
+				P O Box 4126
+				Halmstad  Halland  300 04
+				SE
+
+68-0A-E2   (hex)		Silicon Laboratories
+680AE2     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+AC-8B-9C   (hex)		Primera Technology, Inc.
+AC8B9C     (base 16)		Primera Technology, Inc.
+				2 Carlson Parkway N, Ste 375
+				Plymouth  MN  55447
+				US
+
+2C-3A-FD   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+2C3AFD     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+34-49-5B   (hex)		Sagemcom Broadband SAS
+34495B     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C8-F3-19   (hex)		LG Electronics (Mobile Communications)
+C8F319     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+80-16-09   (hex)		Sleep Number
+801609     (base 16)		Sleep Number
+				1001 Third Avenue South
+				Minneapolis  MN  55404
+				US
+
+04-5E-A4   (hex)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
+045EA4     (base 16)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
+				Building 6, Baolong Plant, Able Technology Park, Longgang District
+				SHENZHEN    518116
+				CN
+
+1C-BF-C0   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+1CBFC0     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+78-B4-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+78B46A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-EB-B6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6CEBB6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-F5-5B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CF55B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-3F-67   (hex)		Huawei Device Co., Ltd.
+E83F67     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-46-EC   (hex)		Huawei Device Co., Ltd.
+3446EC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-31-39   (hex)		IEEE Registration Authority
+643139     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A4-4B-D5   (hex)		Xiaomi Communications Co Ltd
+A44BD5     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+64-95-6C   (hex)		LG Electronics
+64956C     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+14-87-6A   (hex)		Apple, Inc.
+14876A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-B5-5F   (hex)		Apple, Inc.
+E0B55F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-FF-C2   (hex)		Apple, Inc.
+F8FFC2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-EB-40   (hex)		Apple, Inc.
+E0EB40     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-69-4E   (hex)		Texas Instruments
+64694E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+94-D6-DB   (hex)		NexFi
+94D6DB     (base 16)		NexFi
+				Room 417, Building 14, No. 498, Guoshoujing Road, Pudong New Area
+				Shanghai    201203
+				CN
+
+B4-EC-F2   (hex)		Shanghai Listent Medical Tech Co., Ltd.
+B4ECF2     (base 16)		Shanghai Listent Medical Tech Co., Ltd.
+				No. 668 Qingdai Road Pudong District
+				Shanghai  Shanghai  201318
+				CN
+
+40-77-A9   (hex)		New H3C Technologies Co., Ltd
+4077A9     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+F8-33-31   (hex)		Texas Instruments
+F83331     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+C4-95-4D   (hex)		IEEE Registration Authority
+C4954D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C4-98-78   (hex)		SHANGHAI MOAAN INTELLIGENT TECHNOLOGY CO.,LTD
+C49878     (base 16)		SHANGHAI MOAAN INTELLIGENT TECHNOLOGY CO.,LTD
+				BLOCK B, 4TH FLOOR, BUILDING 2, NO. 401 CAOBAO ROAD, XUHUI DISTRICT, SHANGHAI
+				SHANGHAI    200030
+				CN
+
+6C-63-9C   (hex)		ARRIS Group, Inc.
+6C639C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A4-BB-6D   (hex)		Dell Inc.
+A4BB6D     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+6C-06-D6   (hex)		Huawei Device Co., Ltd.
+6C06D6     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+0C-8E-29   (hex)		Arcadyan Corporation
+0C8E29     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+A0-22-4E   (hex)		IEEE Registration Authority
+A0224E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+38-43-E5   (hex)		Grotech Inc
+3843E5     (base 16)		Grotech Inc
+				19, Ojeongongeop-gil
+				Uiwang-si  Gyeonggi-do  16072
+				KR
+
+CC-59-3E   (hex)		Sensium Healthcare Limited
+CC593E     (base 16)		Sensium Healthcare Limited
+				115 MILTON PARK
+				ABINGDON  OXFORDSHIRE  OX14 4SA
+				GB
+
+5C-68-D0   (hex)		Aurora Innovation Inc.
+5C68D0     (base 16)		Aurora Innovation Inc.
+				1880 Embarcadero Rd.
+				Palo Alto  CA  94303
+				US
+
+10-36-4A   (hex)		Boston Dynamics
+10364A     (base 16)		Boston Dynamics
+				78 4TH AVE
+				Waltham  MA  02451
+				US
+
+00-B8-10   (hex)		Yichip Microelectronics (Hangzhou) Co.,Ltd
+00B810     (base 16)		Yichip Microelectronics (Hangzhou) Co.,Ltd
+				Room 401, Building 15, No.498 Guoshoujing Road, Pudong Software Park
+				Shanghai    200120
+				CN
+
+A4-B2-39   (hex)		Cisco Systems, Inc
+A4B239     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1B-B0   (hex)		Bharat Electronics Limited
+001BB0     (base 16)		Bharat Electronics Limited
+				JALAHALLI POST
+				BANGALORE  KARNATAKA  560013
+				IN
+
+68-AF-FF   (hex)		Shanghai Cambricon Information Technology Co., Ltd.
+68AFFF     (base 16)		Shanghai Cambricon Information Technology Co., Ltd.
+				888 West Huanhu Road No.2, Nanhui New Town, Pudong New Area
+				Shanghai  Shanghai  200000
+				CN
+
+DC-21-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DC21E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+FC-1B-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC1BD1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-25-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+582575     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-DE-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+28DEE5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-1C-3C   (hex)		TECNO MOBILE LIMITED
+D01C3C     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+18-C0-4D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+18C04D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+8C-AA-B5   (hex)		Espressif Inc.
+8CAAB5     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+40-2C-76   (hex)		IEEE Registration Authority
+402C76     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+44-C7-FC   (hex)		Huawei Device Co., Ltd.
+44C7FC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+78-85-F4   (hex)		Huawei Device Co., Ltd.
+7885F4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F4-49-55   (hex)		MIMO TECH Co., Ltd.
+F44955     (base 16)		MIMO TECH Co., Ltd.
+				21F.-6, No. 7, Sec. 3, New Taipei Blvd., Xinzhuang Dist.,
+				New Taipei City  Taiwan  24250
+				TW
+
+08-09-C7   (hex)		Zhuhai Unitech Power Technology Co., Ltd.
+0809C7     (base 16)		Zhuhai Unitech Power Technology Co., Ltd.
+				102, Yinhua Road
+				Zhuhai  Guangdong  519000
+				CN
+
+88-54-1F   (hex)		Google, Inc.
+88541F     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+90-0C-C8   (hex)		Google, Inc.
+900CC8     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+04-1D-C7   (hex)		zte corporation
+041DC7     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+68-21-5F   (hex)		Edgecore Networks Corporation
+68215F     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+3C-28-A6   (hex)		Alcatel-Lucent Enterprise (China)
+3C28A6     (base 16)		Alcatel-Lucent Enterprise (China)
+				2/F, Building 1, No.60 Naxian Road,Pudong
+				Shanghai  Shanghai  201210
+				CN
+
+50-50-A4   (hex)		Samsung Electronics Co.,Ltd
+5050A4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-86-D9   (hex)		Samsung Electronics Co.,Ltd
+8086D9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F4-17-B8   (hex)		AirTies Wireless Networks
+F417B8     (base 16)		AirTies Wireless Networks
+				Esentepe Mah., Kore Şehitleri Cad.
+				Istanbul  Şişli  34360
+				TR
+
+3C-BF-60   (hex)		Apple, Inc.
+3CBF60     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-15-F4   (hex)		Apple, Inc.
+AC15F4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-6A-77   (hex)		Samsung Electronics Co.,Ltd
+386A77     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-14-59   (hex)		Vodafone Italia S.p.A.
+141459     (base 16)		Vodafone Italia S.p.A.
+				Via Lorenteggio nr. 240
+				Milan  Italy  20147
+				IT
+
+50-43-B9   (hex)		OktoInform RUS
+5043B9     (base 16)		OktoInform RUS
+				Bolshoy Tishinskiy pereulok, d. 26, korp.13-14, ofis 4R
+				Moscow    123557
+				RU
+
+5C-27-D4   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
+5C27D4     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
+				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
+				Shenzhen  Guangdong  518057
+				CN
+
+88-A4-79   (hex)		Apple, Inc.
+88A479     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-72-95   (hex)		Apple, Inc.
+047295     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-46-E1   (hex)		Apple, Inc.
+D446E1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-D1-62   (hex)		Apple, Inc.
+78D162     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-F8-BC   (hex)		Apple, Inc.
+08F8BC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-A2-5B   (hex)		Apple, Inc.
+90A25B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-30-0C   (hex)		Hisense Electric Co.,Ltd
+18300C     (base 16)		Hisense Electric Co.,Ltd
+				Qianwangang Roard 218
+				Qingdao  Shandong  266510
+				CN
+
+44-A5-6E   (hex)		NETGEAR
+44A56E     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+1C-91-9D   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+1C919D     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+				dongguan   guangdong  523000
+				CN
+
+FC-F2-9F   (hex)		China Mobile Iot Limited company
+FCF29F     (base 16)		China Mobile Iot Limited company
+				No. 8 Yangliu North Road, Yubei District, Chongqing, China
+				Chong Qing  Chong Qing  401120
+				CN
+
+F8-1F-32   (hex)		Motorola Mobility LLC, a Lenovo Company
+F81F32     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+B0-0A-D5   (hex)		zte corporation
+B00AD5     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+20-11-4E   (hex)		MeteRSit S.R.L.
+20114E     (base 16)		MeteRSit S.R.L.
+				Viale dell'Industria 31
+				Padova    35129
+				IT
+
+2C-57-41   (hex)		Cisco Systems, Inc
+2C5741     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A8-4D-4A   (hex)		Audiowise Technology Inc.
+A84D4A     (base 16)		Audiowise Technology Inc.
+				2F, No 1-1, Innovation RD I, Hsinchu Science Park
+				Hsincu  Taiwan  30076
+				TW
+
+78-94-E8   (hex)		Radio Bridge
+7894E8     (base 16)		Radio Bridge
+				8601 73rd Ave N, Suite 38
+				Brooklyn Park  MN  55428
+				US
+
+48-4E-FC   (hex)		ARRIS Group, Inc.
+484EFC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+B0-B3-53   (hex)		IEEE Registration Authority
+B0B353     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+54-7F-BC   (hex)		iodyne
+547FBC     (base 16)		iodyne
+				35 Miller Ave #175
+				Mill Valley  CA  94941
+				US
+
+7C-DF-A1   (hex)		Espressif Inc.
+7CDFA1     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+98-00-6A   (hex)		zte corporation
+98006A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-26-74   (hex)		Hunter Douglas
+002674     (base 16)		Hunter Douglas
+				One Duette Way
+				Broomfield  CO  80020
+				US
+
+1C-97-C5   (hex)		Ynomia Pty Ltd
+1C97C5     (base 16)		Ynomia Pty Ltd
+				153 Tooronga Rd
+				Glen Iris    3146
+				AU
+
+5C-C1-D7   (hex)		Samsung Electronics Co.,Ltd
+5CC1D7     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+38-01-46   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+380146     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+88-96-55   (hex)		Zitte corporation
+889655     (base 16)		Zitte corporation
+				4F Yokohama Kusunoki-cho Building,4-7 Kusunoki-cho,Nishi-ku
+				Yokohama  Kanagawa  2200003
+				JP
+
+F4-A4-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4A4D6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+FC-E1-4F   (hex)		BRK Brands, Inc.
+FCE14F     (base 16)		BRK Brands, Inc.
+				3901 Liberty Street
+				Aurora  IL  60504
+				US
+
+74-B6-B6   (hex)		eero inc.
+74B6B6     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+EC-97-B2   (hex)		SUMEC Machinery & Electric Co.,Ltd.
+EC97B2     (base 16)		SUMEC Machinery & Electric Co.,Ltd.
+				198# ChangJiang Road, XuanWu District, 17F, SUMEC Building
+				Nanjing  JiangSu  210018
+				CN
+
+28-FA-7A   (hex)		Zhejiang Tmall Technology Co., Ltd.
+28FA7A     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+84-2E-14   (hex)		Silicon Laboratories
+842E14     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+10-05-E1   (hex)		Nokia
+1005E1     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+08-F4-58   (hex)		Huawei Device Co., Ltd.
+08F458     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+5C-BA-2C   (hex)		Hewlett Packard Enterprise
+5CBA2C     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+34-37-94   (hex)		Hamee Corp.
+343794     (base 16)		Hamee Corp.
+				Square O2 2-12-10 Sakae-cho
+				Odawara  Kanagawa  250-0011
+				JP
+
+EC-31-6D   (hex)		Hansgrohe
+EC316D     (base 16)		Hansgrohe
+				Auestraße 5-9
+				Schiltach    77761
+				DE
+
+44-10-FE   (hex)		Huizhou Foryou General Electronics Co., Ltd.
+4410FE     (base 16)		Huizhou Foryou General Electronics Co., Ltd.
+				North Shangxia Road, Dongjiang Hi-tech Industry Park
+				Huizhou  Guangdong  516000
+				CN
+
+7C-AB-60   (hex)		Apple, Inc.
+7CAB60     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-C6-5D   (hex)		Apple, Inc.
+44C65D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-7E-B9   (hex)		Apple, Inc.
+187EB9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-A6-4D   (hex)		Cisco Systems, Inc
+4CA64D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+CC-7F-75   (hex)		Cisco Systems, Inc
+CC7F75     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-E8-74   (hex)		Apple, Inc.
+20E874     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-3F-AA   (hex)		Apple, Inc.
+D03FAA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-B9-37   (hex)		Ubee Interactive Co., Limited
+0CB937     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower 
+				North Point  Hong Kong  180
+				HK
+
+D4-DC-09   (hex)		Mist Systems, Inc.
+D4DC09     (base 16)		Mist Systems, Inc.
+				1601 South De Anza Blvd, Suite 248
+				Cupertino  CA  95014
+				US
+
+00-88-BA   (hex)		NC&C
+0088BA     (base 16)		NC&C
+				Gurogu
+				Seoul    08390
+				KR
+
+F4-73-35   (hex)		Logitech Far East
+F47335     (base 16)		Logitech Far East
+				#2 Creation Rd. 4,
+				Hsinchu    300
+				TW
+
+90-AD-FC   (hex)		Telechips, Inc.
+90ADFC     (base 16)		Telechips, Inc.
+				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
+				Seoul  Seoul  05510
+				KR
+
+5C-A6-2D   (hex)		Cisco Systems, Inc
+5CA62D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-2B-69   (hex)		Kumho Electric Inc.
+402B69     (base 16)		Kumho Electric Inc.
+				309, Bongmu-ro, Namsa-myeon, Cheoin-gu
+				Yongin-si  Gyeonggi-do  17118
+				KR
+
+E8-E9-8E   (hex)		SOLAR controls s.r.o.
+E8E98E     (base 16)		SOLAR controls s.r.o.
+				Brojova 25
+				Plzen    32600
+				CZ
+
+64-F6-BB   (hex)		Fibocom Wireless Inc.
+64F6BB     (base 16)		Fibocom Wireless Inc.
+				5/F,TowerA,Technology Building 2,1057 Nanhai Blvd, Nanshan
+				Shenzhen  518000  Guangdong
+				CN
+
+BC-16-95   (hex)		zte corporation
+BC1695     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+DC-35-F1   (hex)		Positivo Tecnologia S.A.
+DC35F1     (base 16)		Positivo Tecnologia S.A.
+				João Bettega, 5200
+				Curitiba  Paraná  81350-000
+				BR
+
+A4-08-01   (hex)		Amazon Technologies Inc.
+A40801     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+AC-1E-D0   (hex)		Temic Automotive Philippines Inc.
+AC1ED0     (base 16)		Temic Automotive Philippines Inc.
+				Bagsakan Road, FTI estate
+				Taguig    1630
+				PH
+
+2C-EA-7F   (hex)		Dell Inc.
+2CEA7F     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+34-51-80   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+345180     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+				10F, TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan District
+				Shenzhen  Guangdong  518052
+				CN
+
+A4-CF-D2   (hex)		Ubee Interactive Co., Limited
+A4CFD2     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+				North Point    00000
+				HK
+
+A8-A0-97   (hex)		ScioTeq bvba
+A8A097     (base 16)		ScioTeq bvba
+				President Kennedypark 35A
+				Kortrijk    8500
+				BE
+
+08-6B-D1   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+086BD1     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+AC-3A-67   (hex)		Cisco Systems, Inc
+AC3A67     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-B5-3D   (hex)		HUNAN GOKE MICROELECTRONICS CO.,LTD
+3CB53D     (base 16)		HUNAN GOKE MICROELECTRONICS CO.,LTD
+				No.9, East 10th Road(South), Xingsha, Changsha
+				Changsha  HUNAN  410131 
+				CN
+
+98-0D-51   (hex)		Huawei Device Co., Ltd.
+980D51     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-AD-D5   (hex)		Huawei Device Co., Ltd.
+00ADD5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+90-5D-7C   (hex)		New H3C Technologies Co., Ltd
+905D7C     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+98-FA-A7   (hex)		INNONET
+98FAA7     (base 16)		INNONET
+				C-417, Munjeong Hyundai Knowledge Industry Center, Beobwon-ro 11-gil-7
+				Songpa-gu  Seoul  05836
+				KR
+
+48-7B-5E   (hex)		SMT TELECOMM HK
+487B5E     (base 16)		SMT TELECOMM HK
+				Unit C 8/F Charmhill Centre 50 Hillwood RD.
+				Tsim Sha Tsui  Kowloon  999077
+				HK
+
+B8-E3-B1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B8E3B1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-B7-A8   (hex)		Heinzinger electronic GmbH
+00B7A8     (base 16)		Heinzinger electronic GmbH
+				Anton Jakob Str.4
+				Rosenheim  BY  83026
+				DE
+
+EC-79-49   (hex)		FUJITSU LIMITED
+EC7949     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+D4-D2-D6   (hex)		FN-LINK TECHNOLOGY LIMITED
+D4D2D6     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+10-50-72   (hex)		Sercomm Corporation.
+105072     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+90-0A-84   (hex)		Mellanox Technologies, Inc.
+900A84     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+AC-4A-67   (hex)		Cisco Systems, Inc
+AC4A67     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+70-CA-97   (hex)		Ruckus Wireless
+70CA97     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+00-09-91   (hex)		Intelligent Platforms, LLC.
+000991     (base 16)		Intelligent Platforms, LLC.
+				2500 Austin Drive
+				Charlottesville  VA  22911
+				US
+
+C8-66-5D   (hex)		Extreme Networks, Inc.
+C8665D     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+E0-1C-41   (hex)		Extreme Networks, Inc.
+E01C41     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+D8-54-A2   (hex)		Extreme Networks, Inc.
+D854A2     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+08-66-1F   (hex)		Palo Alto Networks
+08661F     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+BC-F3-10   (hex)		Extreme Networks, Inc.
+BCF310     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+28-54-71   (hex)		Huawei Device Co., Ltd.
+285471     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B8-8E-82   (hex)		Huawei Device Co., Ltd.
+B88E82     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-33-3D   (hex)		Huawei Device Co., Ltd.
+DC333D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D8-78-7F   (hex)		Ubee Interactive Co., Limited
+D8787F     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+				North Point    00000
+				HK
+
+D4-1D-71   (hex)		Palo Alto Networks
+D41D71     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+08-87-C6   (hex)		INGRAM MICRO SERVICES
+0887C6     (base 16)		INGRAM MICRO SERVICES
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN    82000
+				FR
+
+78-57-73   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+785773     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-60-89   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC6089     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-3E-92   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+843E92     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-8C-B6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+708CB6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-46-4A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+50464A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-A4-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4A402     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-15-FF   (hex)		Novatel Wireless Solutions, Inc.
+0015FF     (base 16)		Novatel Wireless Solutions, Inc.
+				9710 Scranton Rd., Suite 200
+				San Diego  CA  92121
+				US
+
+28-80-A2   (hex)		Novatel Wireless Solutions, Inc.
+2880A2     (base 16)		Novatel Wireless Solutions, Inc.
+				9710 Scranton Rd., Suite 200
+				San Diego  CA  92121
+				US
+
+68-33-2C   (hex)		KENSTEL NETWORKS LIMITED
+68332C     (base 16)		KENSTEL NETWORKS LIMITED
+				34D SECTOR 57 HSIIDC INDUSTRIAL AREA PHASE 4
+				KUNDLI  HARYANA  131028
+				IN
+
+14-5E-45   (hex)		Bamboo Systems Group
+145E45     (base 16)		Bamboo Systems Group
+				Sheraton House, Castle Park
+				Cambridge  CAMBRIDGESHIRE  CB3 0AX
+				GB
+
+70-61-7B   (hex)		Cisco Systems, Inc
+70617B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+98-59-49   (hex)		LUXOTTICA GROUP S.P.A.
+985949     (base 16)		LUXOTTICA GROUP S.P.A.
+				Piazzale Cadrona, 3
+				Milano  MI  20132
+				IT
+
+AC-67-B2   (hex)		Espressif Inc.
+AC67B2     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+9C-BD-6E   (hex)		DERA Co., Ltd
+9CBD6E     (base 16)		DERA Co., Ltd
+				Zhichun road NO7 Building B Room1203 Haidian District
+				Beijing    100191
+				CN
+
+4C-33-29   (hex)		Sweroam
+4C3329     (base 16)		Sweroam
+				Stortorget 16
+				Orebro  N/A  70211
+				SE
+
+64-E1-72   (hex)		Shenzhen Qihoo Intelligent Technology Co.,Ltd
+64E172     (base 16)		Shenzhen Qihoo Intelligent Technology Co.,Ltd
+				Room 201,Block A.No.1,Qianwan Road1 Qianhai Shenzhen-HONGKONG Cooperation Zone
+				Shenzhen  Guangdong  5181000
+				CN
+
+48-8F-5A   (hex)		Routerboard.com
+488F5A     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+10-06-45   (hex)		Sagemcom Broadband SAS
+100645     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-14-C9   (hex)		Brocade Communications Systems LLC
+0014C9     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-24-38   (hex)		Brocade Communications Systems LLC
+002438     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+74-8E-F8   (hex)		Brocade Communications Systems LLC
+748EF8     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-27-F8   (hex)		Brocade Communications Systems LLC
+0027F8     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+50-EB-1A   (hex)		Brocade Communications Systems LLC
+50EB1A     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+F8-4D-FC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+F84DFC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+84-9A-40   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+849A40     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+D8-1F-CC   (hex)		Brocade Communications Systems LLC
+D81FCC     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+C4-89-ED   (hex)		Solid Optics EU N.V.
+C489ED     (base 16)		Solid Optics EU N.V.
+				De Huchtstraat 35
+				Almere  Flevoland  1327 EC
+				NL
+
+60-F4-3A   (hex)		Edifier International
+60F43A     (base 16)		Edifier International
+				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
+				Hong Kong    070
+				CN
+
+58-A8-7B   (hex)		Fitbit, Inc.
+58A87B     (base 16)		Fitbit, Inc.
+				199 Fremont Street, 14th Fl
+				San Francisco  CA  94105
+				US
+
+5C-6B-D7   (hex)		Foshan VIOMI Electric Appliance Technology Co. Ltd.
+5C6BD7     (base 16)		Foshan VIOMI Electric Appliance Technology Co. Ltd.
+				No.2 North Xinxi Fourth Road, Xiashi Village Committee,Lunjiao Sub-district Office, Shunde District
+				Foshan  Guandong  528308
+				CN
+
+18-48-CA   (hex)		Murata Manufacturing Co., Ltd.
+1848CA     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+90-EE-C7   (hex)		Samsung Electronics Co.,Ltd
+90EEC7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-29-AB   (hex)		Samsung Electronics Co.,Ltd
+1029AB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-4E-CB   (hex)		Samsung Electronics Co.,Ltd
+184ECB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-22-A7   (hex)		NEC Platforms, Ltd.
+8022A7     (base 16)		NEC Platforms, Ltd.
+				2-3 Kandatsukasamachi
+				Chiyodaku  Tokyo  101-8532
+				JP
+
+64-E8-81   (hex)		Aruba, a Hewlett Packard Enterprise Company
+64E881     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+98-9D-5D   (hex)		Technicolor CH USA Inc.
+989D5D     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+5C-23-16   (hex)		Squirrels Research Labs LLC
+5C2316     (base 16)		Squirrels Research Labs LLC
+				8050 Freedom Ave NW Suite B
+				North Canton  OH  44720
+				US
+
+04-21-44   (hex)		Sunitec Enterprise Co.,Ltd
+042144     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+A0-27-B6   (hex)		Samsung Electronics Co.,Ltd
+A027B6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-39-17   (hex)		Samsung Electronics Co.,Ltd
+103917     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+98-80-EE   (hex)		Samsung Electronics Co.,Ltd
+9880EE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-0D-F2   (hex)		Motorola Mobility LLC, a Lenovo Company
+CC0DF2     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+94-BF-94   (hex)		Juniper Networks
+94BF94     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+94-43-4D   (hex)		Ciena Corporation
+94434D     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+A8-40-25   (hex)		Oxide Computer Company
+A84025     (base 16)		Oxide Computer Company
+				1251 Park Avenue
+				Emeryville  CA  94608
+				US
+
+10-65-A3   (hex)		Panamax LLC
+1065A3     (base 16)		Panamax LLC
+				5919 Sea Otter Place
+				Carlsbad   CA  92010
+				US
+
+C8-5B-A0   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
+C85BA0     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
+				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
+				Shenzhen  Guangdong  518057
+				CN
+
+E0-BE-03   (hex)		Lite-On Network Communication (Dongguan) Limited
+E0BE03     (base 16)		Lite-On Network Communication (Dongguan) Limited
+				30#Keji Rd,YinHu Industrial Area,Qingxi Town Dongguan City,Guang Dong China
+				Dongguan  Guang Dong  523648
+				CN
+
+5C-90-12   (hex)		Owl Cyber Defense Solutions, LLC
+5C9012     (base 16)		Owl Cyber Defense Solutions, LLC
+				38A Grove Street
+				Ridgefield  CT  06877
+				US
+
+38-F7-CD   (hex)		IEEE Registration Authority
+38F7CD     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+98-CB-A4   (hex)		Benchmark Electronics
+98CBA4     (base 16)		Benchmark Electronics
+				Free Industrial Zone, Phase 1, 
+				Bayan Lepas  Penang  11900
+				MY
+
+00-12-E3   (hex)		Agat Soft LLC
+0012E3     (base 16)		Agat Soft LLC
+				building 14, stroenie 15, room 7
+				Moscow  Serebryakova proezd  129343
+				RU
+
+00-13-51   (hex)		Niles Audio Corporation
+001351     (base 16)		Niles Audio Corporation
+				5919 Sea Otter Place
+				Carlsbad  CA  92010
+				US
+
+18-3C-B7   (hex)		Huawei Device Co., Ltd.
+183CB7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A4-88-73   (hex)		Cisco Systems, Inc
+A48873     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B8-80-4F   (hex)		Texas Instruments
+B8804F     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+FC-A5-D0   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+FCA5D0     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+04-CB-88   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+04CB88     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+A0-62-60   (hex)		Private
+A06260     (base 16)		Private
+
+A4-BD-C4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4BDC4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-91-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5C9157     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-16-93   (hex)		Lear Corporation GmbH
+481693     (base 16)		Lear Corporation GmbH
+				Industriestrasse 48
+				Kronach  Bavaria  96317
+				DE
+
+B4-79-47   (hex)		Nutanix
+B47947     (base 16)		Nutanix
+				1740 Technology Drive Ste #150
+				San Jose  CA  95110
+				US
+
+04-F8-F8   (hex)		Edgecore Networks Corporation
+04F8F8     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+5C-FE-9E   (hex)		Wiwynn Corporation Tainan Branch
+5CFE9E     (base 16)		Wiwynn Corporation Tainan Branch
+				4F, NO. 8, Beiyuan 3rd Rd., Anding Dist.,
+				Tainan    745
+				TW
+
+88-1C-95   (hex)		ITEL MOBILE LIMITED
+881C95     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+F4-69-42   (hex)		ASKEY COMPUTER CORP
+F46942     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+24-14-07   (hex)		Xiamen Sigmastar Technology Ltd.
+241407     (base 16)		Xiamen Sigmastar Technology Ltd.
+				15th Floor ,Unit A,Chuangxin Building, Software Park, Xiamen Torch Hi-Tech Industrial Development Zone, Xiamen,China
+				Xiamen  Fujian  361005
+				CN
+
+08-E9-F6   (hex)		AMPAK Technology,Inc.
+08E9F6     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+F0-2E-51   (hex)		Casa Systems
+F02E51     (base 16)		Casa Systems
+				18-20 Orion Road Lane Cove West
+				LANE COVE  NSW  2066
+				AU
+
+CC-C2-61   (hex)		IEEE Registration Authority
+CCC261     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+74-70-FD   (hex)		Intel Corporate
+7470FD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+7C-2A-31   (hex)		Intel Corporate
+7C2A31     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+B4-6B-FC   (hex)		Intel Corporate
+B46BFC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+14-4F-8A   (hex)		Intel Corporate
+144F8A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+C0-B6-F9   (hex)		Intel Corporate
+C0B6F9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+48-A4-72   (hex)		Intel Corporate
+48A472     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+D8-F2-CA   (hex)		Intel Corporate
+D8F2CA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+48-F1-7F   (hex)		Intel Corporate
+48F17F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+68-EC-C5   (hex)		Intel Corporate
+68ECC5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+7C-76-35   (hex)		Intel Corporate
+7C7635     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+64-0B-D7   (hex)		Apple, Inc.
+640BD7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-91-3D   (hex)		Apple, Inc.
+A8913D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-C9-5E   (hex)		Samsung Electronics Co.,Ltd
+4CC95E     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+0C-3B-50   (hex)		Apple, Inc.
+0C3B50     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-2B-46   (hex)		Intel Corporate
+782B46     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+34-7D-F6   (hex)		Intel Corporate
+347DF6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+CC-D9-AC   (hex)		Intel Corporate
+CCD9AC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+9C-29-76   (hex)		Intel Corporate
+9C2976     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+B8-9A-2A   (hex)		Intel Corporate
+B89A2A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+58-96-1D   (hex)		Intel Corporate
+58961D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+74-D8-3E   (hex)		Intel Corporate
+74D83E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+08-D2-3E   (hex)		Intel Corporate
+08D23E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+A8-7E-EA   (hex)		Intel Corporate
+A87EEA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+40-EC-99   (hex)		Intel Corporate
+40EC99     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+BC-54-2F   (hex)		Intel Corporate
+BC542F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+34-CF-F6   (hex)		Intel Corporate
+34CFF6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+C8-7E-A1   (hex)		TCL MOKA International Limited
+C87EA1     (base 16)		TCL MOKA International Limited
+				7/F, Building 22E 22 Science Park East Avenue
+				Hong Kong    999077
+				HK
+
+A0-51-0B   (hex)		Intel Corporate
+A0510B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+DC-FB-48   (hex)		Intel Corporate
+DCFB48     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+84-FD-D1   (hex)		Intel Corporate
+84FDD1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+40-74-E0   (hex)		Intel Corporate
+4074E0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+08-71-90   (hex)		Intel Corporate
+087190     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+5C-CD-5B   (hex)		Intel Corporate
+5CCD5B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+98-AF-65   (hex)		Intel Corporate
+98AF65     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+40-A6-B7   (hex)		Intel Corporate
+40A6B7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+0C-7A-15   (hex)		Intel Corporate
+0C7A15     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+54-8D-5A   (hex)		Intel Corporate
+548D5A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+30-66-D0   (hex)		Huawei Device Co., Ltd.
+3066D0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+3C-B2-33   (hex)		Huawei Device Co., Ltd.
+3CB233     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+20-9E-79   (hex)		Universal Electronics, Inc.
+209E79     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+AC-5F-EA   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+AC5FEA     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+04-4A-C6   (hex)		Aipon Electronics Co., Ltd
+044AC6     (base 16)		Aipon Electronics Co., Ltd
+				#78, Qiaojiao Dong road, Qiaolong, Tangxia Town
+				Dongguan City  Guangdong Province  523-710
+				CN
+
+5C-D5-B5   (hex)		Shenzhen WiSiYiLink Technology Co.,Ltd
+5CD5B5     (base 16)		Shenzhen WiSiYiLink Technology Co.,Ltd
+				Building a 3, huafengzhigu Yuanshan hi tech Industrial Park, No.62, Yinhe Road, he'ao community, Yuanshan street, Longgang District
+				Shenzhen    518100
+				CN
+
+88-94-8F   (hex)		Xi'an Zhisensor Technologies Co.,Ltd
+88948F     (base 16)		Xi'an Zhisensor Technologies Co.,Ltd
+				 No.52 Jinye 1st Road Xi'an,Shaanxi,China
+				Xi an  Xi an High-Tech Zone  710077
+				CN
+
+18-95-52   (hex)		1MORE
+189552     (base 16)		1MORE
+				TianliaoBuilding F14, New Materials Industrial Park, Xueyuan Blvd?Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+C0-FF-A8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0FFA8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-51-7E   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+C0517E     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+FC-14-99   (hex)		Aimore Acoustics Incorporation
+FC1499     (base 16)		Aimore Acoustics Incorporation
+				16F,Tianliao Building(New Material industrial Park), Xueyuan Avenue, Nanshan District
+				Shenzhen   Guangdong  518055
+				CN
+
+98-C7-A4   (hex)		Shenzhen HS Fiber Communication Equipment CO., LTD
+98C7A4     (base 16)		Shenzhen HS Fiber Communication Equipment CO., LTD
+				6F, Bld#A, Dezhong Industrial Park, Yangmei Village, Bantian Town, Longgang District
+				Shenzhen  Guangdong  518129
+				CN
+
+00-BE-D5   (hex)		New H3C Technologies Co., Ltd
+00BED5     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+00-02-C4   (hex)		OPT Machine Vision Tech Co., Ltd
+0002C4     (base 16)		OPT Machine Vision Tech Co., Ltd
+				no. 8 JInSheng Road, JinXia Zone, Chang'An Town
+				Dongguan  Guangdong  523000
+				CN
+
+AC-F1-08   (hex)		LG Innotek
+ACF108     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+08-ED-9D   (hex)		TECNO MOBILE LIMITED
+08ED9D     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+E8-6D-CB   (hex)		Samsung Electronics Co.,Ltd
+E86DCB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-49-50   (hex)		IEEE Registration Authority
+304950     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-05-C9   (hex)		LG Innotek
+0005C9     (base 16)		LG Innotek
+				LG Component R&D Center
+				Ansan-si  Gyeonggi-do  426-791
+				KR
+
+0C-DC-7E   (hex)		Espressif Inc.
+0CDC7E     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+20-98-D8   (hex)		Shenzhen Yingdakang Technology CO., LTD
+2098D8     (base 16)		Shenzhen Yingdakang Technology CO., LTD
+				8004,Building 51,Block 2,Shangtang Songzi Park, MinZhi St., Longhua Dist
+				Shenzhen    518055
+				CN
+
+7C-C7-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+7CC77E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+A0-CF-F5   (hex)		zte corporation
+A0CFF5     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+1C-01-2D   (hex)		Ficer Technology
+1C012D     (base 16)		Ficer Technology
+				2F, No.138, Daye Rd., Beitou Dist.,
+				Taipei City    11268
+				TW
+
+3C-A6-2F   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+3CA62F     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+98-B3-EF   (hex)		Huawei Device Co., Ltd.
+98B3EF     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-F9-58   (hex)		Huawei Device Co., Ltd.
+50F958     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+60-32-B1   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+6032B1     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+E4-1F-7B   (hex)		Cisco Systems, Inc
+E41F7B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-26-49   (hex)		Intel Corporate
+182649     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+88-03-E9   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+8803E9     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+34-58-40   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+345840     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-64-7A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5C647A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-7F-7B   (hex)		Huawei Device Co., Ltd.
+BC7F7B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F0-FA-C7   (hex)		Huawei Device Co., Ltd.
+F0FAC7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-EF-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DCEF80     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-6F-2D   (hex)		Wahoo Fitness
+B46F2D     (base 16)		Wahoo Fitness
+				90 W Wieuca Rd, Suite 110
+				Atlanta  GA  30342
+				US
+
+5C-85-7E   (hex)		IEEE Registration Authority
+5C857E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+84-6B-48   (hex)		ShenZhen EepuLink Co., Ltd.
+846B48     (base 16)		ShenZhen EepuLink Co., Ltd.
+				4th Floor, Building 3, Nangang 1st industrial zone, Xili street, Nanshan district,
+				ShenZhen  Guangdong  518000
+				CN
+
+B4-60-ED   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+B460ED     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+30-CC-21   (hex)		zte corporation
+30CC21     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+64-6C-80   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+646C80     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+08-9E-01   (hex)		Quanta Computer Inc.
+089E01     (base 16)		Quanta Computer Inc.
+				No.211, Wen Hwa 2nd Rd
+				Taoyuan  Taiwan  33377
+				TW
+
+A8-1E-84   (hex)		Quanta Computer Inc.
+A81E84     (base 16)		Quanta Computer Inc.
+				No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang
+				Tao Yuan    33377
+				TW
+
+C0-18-50   (hex)		Quanta Computer Inc.
+C01850     (base 16)		Quanta Computer Inc.
+				No. 211, Wen-Hwa 2nd Rd.,Kuei-Shan Dist.
+				Taoyuan City  Taiwan  33377
+				TW
+
+44-27-F3   (hex)		70mai Co.,Ltd.
+4427F3     (base 16)		70mai Co.,Ltd.
+				Room 2220, building 2, No. 588, Zixing road
+				Shanghai  MinHang District  201100
+				CN
+
+04-7D-7B   (hex)		Quanta Computer Inc.
+047D7B     (base 16)		Quanta Computer Inc.
+				NO. 211, WEN HWA 2RD.,KUEI SHAN HSIANG, TAO YUAN SHIEN,
+				TAIPEI  TAIWAN  333
+				TW
+
+00-25-DC   (hex)		Sumitomo Electric Industries, Ltd
+0025DC     (base 16)		Sumitomo Electric Industries, Ltd
+				1-1-3, Shimaya, Konohana-ku
+				Osaka    554-0024
+				JP
+
+D4-F3-37   (hex)		Xunison Ltd.
+D4F337     (base 16)		Xunison Ltd.
+				25 Kilbarbery Business Park, Upper Nangor Road
+				Dublin 22  Co. Dublin  D22 NH32
+				IE
+
+48-A2-B8   (hex)		Chengdu Vision-Zenith Tech.Co,.Ltd
+48A2B8     (base 16)		Chengdu Vision-Zenith Tech.Co,.Ltd
+				China (Sichuan) Free Trade Test Zone Chengdu Hi-tech Zone 300 Jiaozi Avenue 3 buildings 22
+				Chengdu  Sichuan  610041
+				CN
+
+C0-B8-E6   (hex)		Ruijie Networks Co.,LTD
+C0B8E6     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+8C-94-1F   (hex)		Cisco Systems, Inc
+8C941F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-7D-B4   (hex)		Cisco Systems, Inc
+687DB4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-E8-73   (hex)		HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
+58E873     (base 16)		HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
+				Build C,Wanfu Center,Binkang Road No.228,Binjiang Area
+				China    210051
+				CN
+
+B0-30-C8   (hex)		Teal Drones, Inc.
+B030C8     (base 16)		Teal Drones, Inc.
+				5200 South Highland Drive
+				Holladay   UT  84117
+				US
+
+DC-41-A9   (hex)		Intel Corporate
+DC41A9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+08-8F-2C   (hex)		Amber Technology Ltd.
+088F2C     (base 16)		Amber Technology Ltd.
+				Unit 1, 2 Daydream Street
+				Warriewood  New South Wales  2102
+				AU
+
+A8-35-12   (hex)		Huawei Device Co., Ltd.
+A83512     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+90-F6-44   (hex)		Huawei Device Co., Ltd.
+90F644     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+44-AF-28   (hex)		Intel Corporate
+44AF28     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+9C-9D-7E   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+9C9D7E     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+74-12-B3   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+7412B3     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+94-47-B0   (hex)		BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD
+9447B0     (base 16)		BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD
+				Room 2179, Floor2,Block D, Building 33, Centralised Office Area, No.99, Kechuangshisi Road, BDA, Beijing
+				BEIJING  BEIJING  100176
+				CN
+
+A0-68-1C   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+A0681C     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+6C-44-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C442A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-7C-C9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A47CC9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-0D-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C40D96     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-5C-7D   (hex)		Shenzhen Honesty Electronics Co.,Ltd.
+F85C7D     (base 16)		Shenzhen Honesty Electronics Co.,Ltd.
+				5/F,Zone B,Chitat Industrial Park,West Longping Road, Longgang District,Shenzhen City
+				Shenzhen  Guangdong  518172
+				CN
+
+84-22-5E   (hex)		SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.
+84225E     (base 16)		SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.
+				XILI STREET
+				SHENZHEN  GUANGDONG  5180000
+				CN
+
+E4-5A-D4   (hex)		Eltex Enterprise Ltd.
+E45AD4     (base 16)		Eltex Enterprise Ltd.
+				Okruzhnaya st. 29v
+				Novosibirsk    630020
+				RU
+
+84-2A-FD   (hex)		HP Inc.
+842AFD     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+1C-FE-2B   (hex)		Amazon Technologies Inc.
+1CFE2B     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+CC-48-3A   (hex)		Dell Inc.
+CC483A     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+DC-A3-A2   (hex)		Feng mi(Beijing)technology co., LTD
+DCA3A2     (base 16)		Feng mi(Beijing)technology co., LTD
+				RenHe Town barracks south street 10 yuan 33 level 301
+				shunyi district  Beijing  101300
+				CN
+
+7C-25-DA   (hex)		FN-LINK TECHNOLOGY LIMITED
+7C25DA     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+A8-69-8C   (hex)		Oracle Corporation 
+A8698C     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+EC-57-0D   (hex)		AFE Inc.
+EC570D     (base 16)		AFE Inc.
+				11210 County Line Rd
+				Mount Pleasant  WI  53177
+				US
+
+A4-AC-0F   (hex)		Huawei Device Co., Ltd.
+A4AC0F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+CC-FF-90   (hex)		Huawei Device Co., Ltd.
+CCFF90     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-05-DB   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+5405DB     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+D4-D5-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D4D51B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-91-BB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2491BB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-5E-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+645E10     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-F2-2B   (hex)		TECNO MOBILE LIMITED
+ECF22B     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+E4-5F-01   (hex)		Raspberry Pi Trading Ltd
+E45F01     (base 16)		Raspberry Pi Trading Ltd
+				Maurice Wilkes Building, Cowley Road
+				Cambridge    CB4 0DS
+				GB
+
+44-A5-4E   (hex)		Qorvo International Pte. Ltd.
+44A54E     (base 16)		Qorvo International Pte. Ltd.
+				1 Changi Business Park Avenue 1
+				#04-01    486058
+				SG
+
+C8-E6-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C8E600     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-57-8E   (hex)		eero inc.
+30578E     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+00-30-54   (hex)		Castlenet Technology Inc.
+003054     (base 16)		Castlenet Technology Inc.
+				5F., No. 10, Daye Rd., Beitou Dist.
+				Taipei City    112030
+				TW
+
+C8-16-DA   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+C816DA     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+B0-44-14   (hex)		New H3C Technologies Co., Ltd
+B04414     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+30-96-10   (hex)		Huawei Device Co., Ltd.
+309610     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-F9-47   (hex)		Senscomm Semiconductor Co., Ltd.
+64F947     (base 16)		Senscomm Semiconductor Co., Ltd.
+				Room 303-309, 3rd Floor International Building, NO.2 Suzhou Avenue West
+				Suzhou  Jiangsu  215000
+				CN
+
+DC-00-B0   (hex)		FREEBOX SAS
+DC00B0     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+70-74-14   (hex)		Murata Manufacturing Co., Ltd.
+707414     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+A0-76-4E   (hex)		Espressif Inc.
+A0764E     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+B4-FB-E3   (hex)		AltoBeam (China) Inc.
+B4FBE3     (base 16)		AltoBeam (China) Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+10-D7-B0   (hex)		Sagemcom Broadband SAS
+10D7B0     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+44-59-43   (hex)		zte corporation
+445943     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+34-36-54   (hex)		zte corporation
+343654     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+74-8F-3C   (hex)		Apple, Inc.
+748F3C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-F9-46   (hex)		Apple, Inc.
+40F946     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-09-BF   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+6C09BF     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+FC-6D-D1   (hex)		APRESIA Systems, Ltd.
+FC6DD1     (base 16)		APRESIA Systems, Ltd.
+				Tsukuba Network Technical Center, Kidamari 3550
+				Tsuchiura-shi  Ibaraki-ken  300-0026
+				JP
+
+80-C9-55   (hex)		Redpine Signals, Inc.
+80C955     (base 16)		Redpine Signals, Inc.
+				Plot 87, Sagar Society 
+				Hyderabad  AP  500034
+				IN
+
+CC-4F-5C   (hex)		IEEE Registration Authority
+CC4F5C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+4C-6D-58   (hex)		Juniper Networks
+4C6D58     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+5C-ED-8C   (hex)		Hewlett Packard Enterprise
+5CED8C     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+30-D0-42   (hex)		Dell Inc.
+30D042     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+C0-C9-E3   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+C0C9E3     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+F8-8C-21   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F88C21     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+C4-27-8C   (hex)		Huawei Device Co., Ltd.
+C4278C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+80-8F-E8   (hex)		Intelbras
+808FE8     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+7C-73-EB   (hex)		Huawei Device Co., Ltd.
+7C73EB     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E4-8F-1D   (hex)		Huawei Device Co., Ltd.
+E48F1D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+FC-CD-2F   (hex)		IEEE Registration Authority
+FCCD2F     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-B2-71   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94B271     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-05-8C   (hex)		mMax Communications, Inc.
+78058C     (base 16)		mMax Communications, Inc.
+				5151 California Ave., Suite 100
+				Irvine  CA  92617
+				US
+
+C4-A7-2B   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+C4A72B     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+CC-F5-5F   (hex)		E FOCUS INSTRUMENTS INDIA PRIVATE LIMITED
+CCF55F     (base 16)		E FOCUS INSTRUMENTS INDIA PRIVATE LIMITED
+				PLOT NO 21, 1ST FLOOR, NO 22, SAMAYAPURAM MAIN ROAD PORUR
+				CHENNAI  TAMIL NADU  600116
+				IN
+
+D0-C3-1E   (hex)		JUNGJIN Electronics Co.,Ltd
+D0C31E     (base 16)		JUNGJIN Electronics Co.,Ltd
+				41-11, Yangjipyeon-ro
+				Uiwang-si  Gyeonggi-do  16007
+				KR
+
+14-13-33   (hex)		AzureWave Technology Inc.
+141333     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+A4-17-8B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4178B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-34-00   (hex)		Hisense Electric Co.,Ltd
+5C3400     (base 16)		Hisense Electric Co.,Ltd
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+4C-3B-DF   (hex)		Microsoft Corporation
+4C3BDF     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+08-7C-39   (hex)		Amazon Technologies Inc.
+087C39     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+D8-10-CB   (hex)		Andrea Informatique
+D810CB     (base 16)		Andrea Informatique
+				30 Rue Jules Guesde
+				Paris    75014
+				FR
+
+FC-19-28   (hex)		Actions Microelectronics Co., Ltd
+FC1928     (base 16)		Actions Microelectronics Co., Ltd
+				201, No 9 Building, Software Park,Kejizhonger Rd.,
+				Shenzhen  Gangdong  518057
+				CN
+
+3C-D2-E5   (hex)		New H3C Technologies Co., Ltd
+3CD2E5     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+B0-98-BC   (hex)		Huawei Device Co., Ltd.
+B098BC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-01-6F   (hex)		Huawei Device Co., Ltd.
+24016F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-59-19   (hex)		zte corporation
+D05919     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E0-91-3C   (hex)		Kyeungin CNS Co., Ltd.
+E0913C     (base 16)		Kyeungin CNS Co., Ltd.
+				13, Gyeongin-ro, Sosa-gu
+				Bucheon-si  Gyeonggi-do  14730
+				KR
+
+00-B8-81   (hex)		New platforms LLC
+00B881     (base 16)		New platforms LLC
+				Varshavskoe shosse, 35, Bld. 1
+				Moscow    117105
+				RU
+
+00-1B-2E   (hex)		Sinkyo Electron Inc
+001B2E     (base 16)		Sinkyo Electron Inc
+				1-22-19 Daimachi
+				Hachioji-city   Tokyo  193-0931
+				JP
+
+C4-37-72   (hex)		Virtuozzo International GmbH
+C43772     (base 16)		Virtuozzo International GmbH
+				Vordergasse 59
+				Schaffhausen    8200
+				CH
+
+CC-3B-27   (hex)		TECNO MOBILE LIMITED
+CC3B27     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+08-58-A5   (hex)		Beijing Vrv Software Corpoaration Limited.
+0858A5     (base 16)		Beijing Vrv Software Corpoaration Limited.
+				Room 1602, block C, Zhongguancun Science and technology development building, 34 Zhongguancun South Street
+				Beijing  Beijing  100000
+				CN
+
+98-3F-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+983F60     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-3F-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C03FDD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-32-35   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+303235     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+E0-E2-E6   (hex)		Espressif Inc.
+E0E2E6     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+9C-73-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C7370     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-24-29   (hex)		Google, Inc.
+582429     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+E8-0A-EC   (hex)		Jiangsu Hengtong Optic-Electric Co., LTD
+E80AEC     (base 16)		Jiangsu Hengtong Optic-Electric Co., LTD
+				88 Hengtong Dadao, Qidu Town, Wujiang District
+				Suzhou  Jiangsu Province  215200
+				CN
+
+C4-DE-7B   (hex)		Huawei Device Co., Ltd.
+C4DE7B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+7C-C2-94   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+7CC294     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+40-D4-BD   (hex)		SK Networks Service CO., LTD.
+40D4BD     (base 16)		SK Networks Service CO., LTD.
+				120, Jangan-ro, Jangan-gu
+				Suwon-si  Gyeonggi-do  16312
+				KR
+
+68-D4-8B   (hex)		Hailo Technologies Ltd.
+68D48B     (base 16)		Hailo Technologies Ltd.
+				94 Yigal Alon
+				Tel Aviv    6789139
+				IL
+
+6C-1A-75   (hex)		Huawei Device Co., Ltd.
+6C1A75     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+6C-76-37   (hex)		Huawei Device Co., Ltd.
+6C7637     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+18-EE-86   (hex)		Novatel Wireless Solutions, Inc.
+18EE86     (base 16)		Novatel Wireless Solutions, Inc.
+				9710 Scranton Rd., Suite 200
+				San Diego  CA  92121
+				US
+
+A0-9F-10   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+A09F10     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+20-1B-88   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+201B88     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+				dongguan   guangdong  523000
+				CN
+
+24-94-93   (hex)		FibRSol Global Network Limited
+249493     (base 16)		FibRSol Global Network Limited
+				17, Deep vihar, Vikas Nagar,, Near Mayank hospital,, Uttam Nagar,
+				New Delhi  Delhi  110059
+				IN
+
+28-D0-44   (hex)		Shenzhen Xinyin technology company
+28D044     (base 16)		Shenzhen Xinyin technology company
+				2/F, Building C, Jianxing Technology Building, Shahe West Road, Xili Street, Nanshan District 
+				Shenzhen  Guangdong  518055
+				CN
+
+A8-40-7D   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+A8407D     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+FC-4B-57   (hex)		Peerless Instrument Division of Curtiss-Wright 
+FC4B57     (base 16)		Peerless Instrument Division of Curtiss-Wright 
+				1966D Broadhollow Road
+				East Farmingdale  NY  11735
+				US
+
+5C-10-C5   (hex)		Samsung Electronics Co.,Ltd
+5C10C5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E8-EB-34   (hex)		Cisco Systems, Inc
+E8EB34     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-60-D8   (hex)		ARRIS Group, Inc.
+5860D8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+9C-9A-C0   (hex)		LEGO System A/S
+9C9AC0     (base 16)		LEGO System A/S
+				Aastvej 1
+				Billund    DK-7190
+				DK
+
+3C-BD-C5   (hex)		Arcadyan Corporation
+3CBDC5     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+A8-DA-0C   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
+A8DA0C     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
+				NEW DELHI    110001
+				IN
+
+F8-53-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F85329     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-A5-DC   (hex)		ARRIS Group, Inc.
+50A5DC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+74-B7-B3   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+74B7B3     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+88-15-C5   (hex)		Huawei Device Co., Ltd.
+8815C5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-1B-B0   (hex)		Apple, Inc.
+B41BB0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-D3-49   (hex)		Apple, Inc.
+58D349     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-34-F0   (hex)		Apple, Inc.
+F434F0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-8C-75   (hex)		Apple, Inc.
+B08C75     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-AA-FE   (hex)		Huawei Device Co., Ltd.
+A4AAFE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F8-3B-7E   (hex)		Huawei Device Co., Ltd.
+F83B7E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+9C-28-B3   (hex)		Apple, Inc.
+9C28B3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-78-17   (hex)		Apple, Inc.
+A07817     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-87-30   (hex)		Apple, Inc.
+5C8730     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-9B-D6   (hex)		TCT mobile ltd
+DC9BD6     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+70-40-FF   (hex)		Huawei Device Co., Ltd.
+7040FF     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-D6-93   (hex)		Huawei Device Co., Ltd.
+34D693     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-1F-ED   (hex)		Nokia Shanghai Bell Co., Ltd.
+E01FED     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai 
+				Shanghai    201206
+				CN
+
+14-6B-9A   (hex)		zte corporation
+146B9A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+78-32-1B   (hex)		D-Link International
+78321B     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+04-E7-7E   (hex)		We Corporation Inc.
+04E77E     (base 16)		We Corporation Inc.
+				201, 33, Deokcheon-ro, Manan-gu
+				Anyang-si  Gyeonggi-do  14088
+				KR
+
+4C-52-EC   (hex)		SOLARWATT GmbH
+4C52EC     (base 16)		SOLARWATT GmbH
+				Maria-Reiche-Str. 2a
+				Dresden    01109
+				DE
+
+30-D9-41   (hex)		Raydium Semiconductor Corp.
+30D941     (base 16)		Raydium Semiconductor Corp.
+				2F, No. 23, LiHsin Rd., Hsinchu Science Park
+				Hsinchu, Taiwan, R.O.C.    TW 300
+				TW
+
+68-76-27   (hex)		Zhuhai Dingzhi Electronic Technology Co., Ltd
+687627     (base 16)		Zhuhai Dingzhi Electronic Technology Co., Ltd
+				6th floor, No.2 Jinliang Road, Hongqi Town, Jinwan District
+				Zhuhai  GuangDong  519000
+				CN
+
+20-0B-CF   (hex)		Nintendo Co.,Ltd
+200BCF     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+38-C0-96   (hex)		ALPSALPINE CO,.LTD
+38C096     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				KAKUDA-CITY  MIYAGI-PREF  981-1595
+				JP
+
+AC-7A-4D   (hex)		ALPSALPINE CO,.LTD
+AC7A4D     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				KAKUDA-CITY  MIYAGI-PREF  981-1595
+				JP
+
+04-76-6E   (hex)		ALPSALPINE CO,.LTD
+04766E     (base 16)		ALPSALPINE CO,.LTD
+				6-3-36 Furukawanakazato,
+				Osaki  Miyagi-pref  989-6181
+				JP
+
+24-E4-C8   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+24E4C8     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+94-8E-D3   (hex)		Arista Networks
+948ED3     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+00-26-43   (hex)		ALPSALPINE CO,.LTD
+002643     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi,
+				Soma-city,  Fukushima-pref.,  976-8501
+				JP
+
+C0-F6-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0F6EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-20-8C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC208C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-5A-85   (hex)		Wistron Neweb Corporation
+885A85     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+D8-00-93   (hex)		Aurender Inc.
+D80093     (base 16)		Aurender Inc.
+				 #1612, OBIZTOWER, 126, Beolmal-ro, Dongan-gu
+				Anyang-si  Gyeonggi-do  14057
+				KR
+
+38-90-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+389052     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-8F-9D   (hex)		Juniper Networks
+408F9D     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-15-E7   (hex)		Quantec Tontechnik
+0015E7     (base 16)		Quantec Tontechnik
+				Maenherstr. 35
+				München    D-81375
+				DE
+
+FC-B3-BC   (hex)		Intel Corporate
+FCB3BC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-CC-18   (hex)		Intel Corporate
+18CC18     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C0-3C-59   (hex)		Intel Corporate
+C03C59     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+84-1B-77   (hex)		Intel Corporate
+841B77     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+2C-A5-9C   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+2CA59C     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+34-C9-3D   (hex)		Intel Corporate
+34C93D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+6C-98-EB   (hex)		Riverbed Technology, Inc.
+6C98EB     (base 16)		Riverbed Technology, Inc.
+				680 Folsom St
+				San Francisco  CA  94107
+				US
+
+00-1F-F5   (hex)		Kongsberg Defence & Aerospace
+001FF5     (base 16)		Kongsberg Defence & Aerospace
+				Kirkegaardsveien 45  P.O.Box 1003
+				Kongsberg    NO-3601
+				NO
+
+74-EC-B2   (hex)		Amazon Technologies Inc.
+74ECB2     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+C8-6C-3D   (hex)		Amazon Technologies Inc.
+C86C3D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+C0-41-21   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+C04121     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+0C-7C-28   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+0C7C28     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+20-78-52   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+207852     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+54-FA-96   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+54FA96     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+7C-C2-C6   (hex)		TP-Link Corporation Limited
+7CC2C6     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+08-9A-C7   (hex)		zte corporation
+089AC7     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+BC-6D-05   (hex)		Dusun Electron Co.,Ltd.
+BC6D05     (base 16)		Dusun Electron Co.,Ltd.
+				NO.640 FengQing str.,DeQing, ZheJiang, China
+				huzhou  zhejiang  313200
+				CN
+
+74-4C-A1   (hex)		Liteon Technology Corporation
+744CA1     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+B4-B2-91   (hex)		LG Electronics
+B4B291     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+C0-E0-18   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0E018     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-E7-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CE747     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-FF-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A8FFBA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-78-D1   (hex)		Juniper Networks
+AC78D1     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+A4-42-3B   (hex)		Intel Corporate
+A4423B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+70-CF-49   (hex)		Intel Corporate
+70CF49     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+48-51-C5   (hex)		Intel Corporate
+4851C5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+20-EF-BD   (hex)		Roku, Inc
+20EFBD     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+EC-7C-B6   (hex)		Samsung Electronics Co.,Ltd
+EC7CB6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+58-A6-39   (hex)		Samsung Electronics Co.,Ltd
+58A639     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-E5-7C   (hex)		Espressif Inc.
+A4E57C     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+04-F9-93   (hex)		Infinix mobility limited
+04F993     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+BC-BD-9E   (hex)		ITEL MOBILE LIMITED
+BCBD9E     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+F4-2A-7D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F42A7D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+8C-0F-C9   (hex)		Huawei Device Co., Ltd.
+8C0FC9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+30-4E-1B   (hex)		Huawei Device Co., Ltd.
+304E1B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+6C-03-09   (hex)		Cisco Systems, Inc
+6C0309     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-D2-95   (hex)		Cisco Systems, Inc
+BCD295     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-50-4E   (hex)		New H3C Technologies Co., Ltd
+74504E     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+F0-39-65   (hex)		Samsung Electronics Co.,Ltd
+F03965     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-B6-62   (hex)		IC Holdings LLC
+FCB662     (base 16)		IC Holdings LLC
+				1277 Windmill Ln.
+				Midway  UT  84049
+				US
+
+50-2D-FB   (hex)		IGShare Co., Ltd.
+502DFB     (base 16)		IGShare Co., Ltd.
+				410-ho, 28, Digital-ro 30-gil
+				Guro-gu, SEOUL    08389
+				KR
+
+40-EE-15   (hex)		Zioncom Electronics (Shenzhen) Ltd.
+40EE15     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
+				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+00-F3-61   (hex)		Amazon Technologies Inc.
+00F361     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+6C-0D-E1   (hex)		Dongguan Cannice Precision Manufacturing Co., Ltd.
+6C0DE1     (base 16)		Dongguan Cannice Precision Manufacturing Co., Ltd.
+				Dongguan Cannice Precision Manufacturing Co., Ltd.
+				Dongguan  Guangdong  523170
+				CN
+
+60-6C-63   (hex)		Hitron Technologies. Inc
+606C63     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+E8-D7-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8D765     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-5E-1B   (hex)		Google, Inc.
+E45E1B     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+C4-30-CA   (hex)		SD Biosensor
+C430CA     (base 16)		SD Biosensor
+				C-4th & 5th Floor, Digital Empire Building, 980-3
+				Suwon-si  Kyonggi-do  ASI|KR|KS002|SUWON
+				KR
+
+D4-A6-51   (hex)		Tuya Smart Inc.
+D4A651     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+28-05-2E   (hex)		Dematic Corp
+28052E     (base 16)		Dematic Corp
+				507 Plymouth Ave NE
+				Grand Rapids  MI  49505
+				US
+
+88-C3-E5   (hex)		Betop Techonologies 
+88C3E5     (base 16)		Betop Techonologies 
+				6F., No. 669, Bannan Road, Zhonghe District
+				New Taipei City    235
+				TW
+
+E4-28-A4   (hex)		Prama India Private Limited
+E428A4     (base 16)		Prama India Private Limited
+				Off 103, 765 Fly Edge, TPS III Jn of S V Rd, Nr Kora Kendra
+				Borivali West, Mumbai  Maharashtra  400092
+				IN
+
+94-3A-91   (hex)		Amazon Technologies Inc.
+943A91     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+40-8C-1F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+408C1F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+2C-3F-0B   (hex)		Cisco Meraki
+2C3F0B     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+80-C5-01   (hex)		OctoGate IT Security Systems GmbH
+80C501     (base 16)		OctoGate IT Security Systems GmbH
+				Friedrich List Strasse 42
+				Paderborn  NRW  33100
+				DE
+
+04-F0-3E   (hex)		Huawei Device Co., Ltd.
+04F03E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+78-E2-2C   (hex)		Huawei Device Co., Ltd.
+78E22C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C0-D0-26   (hex)		Huawei Device Co., Ltd.
+C0D026     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-D1-9E   (hex)		Apple, Inc.
+14D19E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-C7-11   (hex)		Apple, Inc.
+40C711     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-70-17   (hex)		Apple, Inc.
+5C7017     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-EC-7B   (hex)		Apple, Inc.
+8CEC7B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-2D-B3   (hex)		AMPAK Technology,Inc.
+002DB3     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+3C-C7-86   (hex)		DONGGUAN HUARONG COMMUNICATION TECHNOLOGIES CO.,LTD.
+3CC786     (base 16)		DONGGUAN HUARONG COMMUNICATION TECHNOLOGIES CO.,LTD.
+				No.130 Dongxing East Road, Dongkeng Town
+				DONGGUAN    523450
+				CN
+
+28-C8-7C   (hex)		zte corporation
+28C87C     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+14-50-51   (hex)		SHARP Corporation
+145051     (base 16)		SHARP Corporation
+				1 Takumi-cho, Sakai-ku
+				Sakai City  Osaka  590-8522
+				JP
+
+C4-D0-E3   (hex)		Intel Corporate
+C4D0E3     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E4-FD-45   (hex)		Intel Corporate
+E4FD45     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-4C-AE   (hex)		CONTINENTAL
+184CAE     (base 16)		CONTINENTAL
+				1 AVENUE PAUL OURLIAC
+				TOULOUSE    31100
+				FR
+
+98-38-7D   (hex)		ITRONIC  TECHNOLOGY CO . , LTD .
+98387D     (base 16)		ITRONIC  TECHNOLOGY CO . , LTD .
+				2F C Building Fu Xin Lin lndustrial Park Hangcheng
+				lndustrial Zone Xixiang Street Baoan District  Shenzhen  518100
+				CN
+
+C8-D8-84   (hex)		Universal Electronics, Inc.
+C8D884     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+B4-A2-5C   (hex)		Cambium Networks Limited
+B4A25C     (base 16)		Cambium Networks Limited
+				Unit B2, Linhay Business Park,
+				Ashburton  Devon  TQ13 7UP
+				GB
+
+2C-71-FF   (hex)		Amazon Technologies Inc.
+2C71FF     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+AC-D6-18   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+ACD618     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+6C-56-40   (hex)		BLU Products Inc
+6C5640     (base 16)		BLU Products Inc
+				10814 NW 33rd Street
+				Miami  FL  33172
+				US
+
+48-78-5E   (hex)		Amazon Technologies Inc.
+48785E     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+20-C7-4F   (hex)		SensorPush
+20C74F     (base 16)		SensorPush
+				PO Box 211
+				Garrison  NY  10524
+				US
+
+48-29-52   (hex)		Sagemcom Broadband SAS
+482952     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+A4-7E-36   (hex)		EM Microelectronic
+A47E36     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+B0-5D-D4   (hex)		ARRIS Group, Inc.
+B05DD4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+24-E8-53   (hex)		LG Innotek
+24E853     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+30-7C-4A   (hex)		Huawei Device Co., Ltd.
+307C4A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-CE-1E   (hex)		Cloudtronics Pty Ltd
+2CCE1E     (base 16)		Cloudtronics Pty Ltd
+				Unit 1 6 Powells Road Brookvale
+				Sydney  NSW  2100
+				AU
+
+F0-21-E0   (hex)		eero inc.
+F021E0     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco    94107
+				US
+
+9C-DB-CB   (hex)		Wuhan Funshion Online Technologies Co.,Ltd
+9CDBCB     (base 16)		Wuhan Funshion Online Technologies Co.,Ltd
+				5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan
+				Wuhan  CN/Hubei  430000
+				CN
+
+64-17-59   (hex)		Intellivision Holdings, LLC
+641759     (base 16)		Intellivision Holdings, LLC
+				1844 E Carnegie
+				Santa Ana  CA  92705
+				US
+
+50-43-48   (hex)		ThingsMatrix Inc.
+504348     (base 16)		ThingsMatrix Inc.
+				9442 North Capital of Texas Hwy Plaza One Suite 500 Austin
+				Austin  TX  78759
+				US
+
+D8-59-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D85982     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-B2-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48B25D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-1B-34   (hex)		China Mobile Group Device Co.,Ltd.
+A41B34     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+80-45-DD   (hex)		Intel Corporate
+8045DD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C0-D4-6B   (hex)		Huawei Device Co., Ltd.
+C0D46B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+9C-95-67   (hex)		Huawei Device Co., Ltd.
+9C9567     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+58-AE-F1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+58AEF1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+A4-7B-1A   (hex)		Huawei Device Co., Ltd.
+A47B1A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-7D-05   (hex)		SERCOMM PHILIPPINES INC
+147D05     (base 16)		SERCOMM PHILIPPINES INC
+				Lot 1 & 5, Phase 1, Filinvest Technology Park 1, Brgy. Punta, Calamba City
+				Calamba    Lot 1
+				PH
+
+78-7A-6F   (hex)		Juice Technology AG
+787A6F     (base 16)		Juice Technology AG
+				Gewerbestrasse 7
+				Cham  Select State  CH-6330
+				CH
+
+E8-6C-C7   (hex)		IEEE Registration Authority
+E86CC7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+40-24-B2   (hex)		Sichuan AI-Link Technology Co., Ltd.
+4024B2     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+64-0D-22   (hex)		LG Electronics (Mobile Communications)
+640D22     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+20-A7-F9   (hex)		SHENZHEN OLANBOA TECHNOLOGY CO., LTD
+20A7F9     (base 16)		SHENZHEN OLANBOA TECHNOLOGY CO., LTD
+				4/F, Building B, Block A, Longquan Science Park, Tongfuyu Phase II, Tongsheng Community, Dalang Street, Longhua District, Shenzhen
+				shenzhen  Guangdong  518000
+				CN
+
+C0-06-C3   (hex)		TP-Link Corporation Limited
+C006C3     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+3C-15-12   (hex)		Shenzhen Huanhu Technology Co.,Ltd
+3C1512     (base 16)		Shenzhen Huanhu Technology Co.,Ltd
+				 7 / F, building C4, Hengfeng Industrial City, 739 Zhoushi Road, Hezhou community, Hangcheng street, Bao'an District, Shenzhen
+				Shenzhen    518000
+				CN
+
+8C-31-E2   (hex)		DAYOUPLUS
+8C31E2     (base 16)		DAYOUPLUS
+				3F 509, Dunchon-daero, Jungwon-gu, Seongnam-si, Gyeonggi-do, Republic of Korea
+				Seongnam-si  Gyeonggi-do  13217
+				KR
+
+10-39-4E   (hex)		Hisense broadband multimedia technology Co.,Ltd
+10394E     (base 16)		Hisense broadband multimedia technology Co.,Ltd
+				Song ling Road 399
+				Qingdao    266000
+				CN
+
+D8-D5-B9   (hex)		Rainforest Automation, Inc.
+D8D5B9     (base 16)		Rainforest Automation, Inc.
+				200 – 311 Pender St. W
+				Vancouver  British Columbia  V6B 1T3
+				CA
+
+04-BA-1C   (hex)		Huawei Device Co., Ltd.
+04BA1C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+7C-3D-2B   (hex)		Huawei Device Co., Ltd.
+7C3D2B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+18-C2-41   (hex)		SonicWall
+18C241     (base 16)		SonicWall
+				1033 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+58-45-4C   (hex)		Ericsson AB
+58454C     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+FC-4D-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC4DA6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-14-E6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B414E6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-99-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC9929     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-48-59   (hex)		Castlenet Technology Inc.
+184859     (base 16)		Castlenet Technology Inc.
+				5th Fl., No.159-1, Sec.3, Beishen Rd., Shenkeng Dist., 
+				New Taipei City    222004
+				TW
+
+14-51-7E   (hex)		New H3C Technologies Co., Ltd
+14517E     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+08-3A-38   (hex)		New H3C Technologies Co., Ltd
+083A38     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+70-F0-88   (hex)		Nintendo Co.,Ltd
+70F088     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+84-23-88   (hex)		Ruckus Wireless
+842388     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+F4-C7-AA   (hex)		Marvell Semiconductors
+F4C7AA     (base 16)		Marvell Semiconductors
+				15485 Sand Canyon Ave
+				IRVINE  CA  92618
+				US
+
+F8-AB-E5   (hex)		shenzhen worldelite electronics co., LTD
+F8ABE5     (base 16)		shenzhen worldelite electronics co., LTD
+				Office 5 F, Xiang Yu Industrial Park, Longsheng Road, Longgang Dist
+				Shenzhen  Guangdong  51800
+				CN
+
+CC-ED-21   (hex)		Nokia Shanghai Bell Co., Ltd.
+CCED21     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+10-D5-61   (hex)		Tuya Smart Inc.
+10D561     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+00-1A-86   (hex)		New Wave Design & Verification
+001A86     (base 16)		New Wave Design & Verification
+				4950 W 78th St.
+				Minneapolis  MN  55435
+				US
+
+50-9A-46   (hex)		Safetrust Inc
+509A46     (base 16)		Safetrust Inc
+				8112 Mill Creek Rd
+				Fremont  CA  94539
+				US
+
+D0-CF-D8   (hex)		Huizhou Boshijie Technology Co.,Ltd
+D0CFD8     (base 16)		Huizhou Boshijie Technology Co.,Ltd
+				No.1 Xisan road, Huifeng west road, Zhongkai high-tech zone
+				Huizhou  Guangdong  516006
+				CN
+
+84-C7-8F   (hex)		APS Networks GmbH
+84C78F     (base 16)		APS Networks GmbH
+				Rosenwiesstr. 17
+				Stuttgart    70567
+				DE
+
+F0-A3-B2   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+F0A3B2     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+08-BB-3C   (hex)		Flextronics Tech.(Ind) Pvt Ltd
+08BB3C     (base 16)		Flextronics Tech.(Ind) Pvt Ltd
+				365, Benjamin Road
+				Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646
+				IN
+
+2C-BE-EB   (hex)		Nothing Technology Limited
+2CBEEB     (base 16)		Nothing Technology Limited
+				11 Staple Inn
+				London  London  WC1V 7QH
+				GB
+
+F0-4A-02   (hex)		Cisco Systems, Inc
+F04A02     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-09-AC   (hex)		Quext, LLC
+7409AC     (base 16)		Quext, LLC
+				5214 68th St., Suite 201
+				Lubbock  TX  79424
+				US
+
+F0-01-6E   (hex)		Tianyi Telecom Terminals Company Limited
+F0016E     (base 16)		Tianyi Telecom Terminals Company Limited
+				6/F Changshang Building, No.29 North Xinhua Street, Xicheng District
+				Beijing    100031
+				CN
+
+EC-0B-AE   (hex)		Hangzhou BroadLink Technology Co.,Ltd
+EC0BAE     (base 16)		Hangzhou BroadLink Technology Co.,Ltd
+				Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China
+				Hangzhou  Zhejiang  310052
+				CN
+
+80-25-11   (hex)		ITEL MOBILE LIMITED
+802511     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+E8-A6-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8A660     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-24-2E   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+CC242E     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+08-2F-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+082FE9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+98-48-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+984874     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-A6-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1CA681     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-81-FA   (hex)		Apple, Inc.
+B881FA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-76-0E   (hex)		Apple, Inc.
+9C760E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-EA-32   (hex)		Apple, Inc.
+94EA32     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-BF-FE   (hex)		Huawei Device Co., Ltd.
+C8BFFE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+08-2E-36   (hex)		Huawei Device Co., Ltd.
+082E36     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-F4-EB   (hex)		Apple, Inc.
+50F4EB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-C7-09   (hex)		Apple, Inc.
+28C709     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-02-DE   (hex)		Sercomm Corporation.
+3802DE     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+5C-62-5A   (hex)		CANON INC.
+5C625A     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+7C-0A-3F   (hex)		Samsung Electronics Co.,Ltd
+7C0A3F     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+08-AA-89   (hex)		zte corporation
+08AA89     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A4-35-2D   (hex)		TRIZ Networks corp.
+A4352D     (base 16)		TRIZ Networks corp.
+				815 Daewangpangyo-ro
+				Sujeong-gu, Seongnam-si  Gyeonggi-do  13449
+				KR
+
+04-D6-0E   (hex)		FUNAI ELECTRIC CO., LTD.
+04D60E     (base 16)		FUNAI ELECTRIC CO., LTD.
+				7-7-1, Nakagaito
+				Daito  Osaka  574-0013
+				JP
+
+04-9F-81   (hex)		NETSCOUT SYSTEMS INC
+049F81     (base 16)		NETSCOUT SYSTEMS INC
+				310 Littleton Road
+				Westford  MA  01886 
+				US
+
+00-80-8C   (hex)		NETSCOUT SYSTEMS INC
+00808C     (base 16)		NETSCOUT SYSTEMS INC
+				310 Littleton Road
+				Westford  MA  01886 
+				US
+
+00-1F-92   (hex)		Motorola Solutions Inc.
+001F92     (base 16)		Motorola Solutions Inc.
+				500 W Monroe Street, Ste 4400
+				Chicago  IL  60661-3781
+				US
+
+00-23-BB   (hex)		Accretech SBS, Inc.
+0023BB     (base 16)		Accretech SBS, Inc.
+				2451 NW 28th Ave.
+				Portland  OR  97210
+				US
+
+B0-C9-52   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B0C952     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+F4-41-9E   (hex)		Huawei Device Co., Ltd.
+F4419E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+90-F9-B7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+90F9B7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-45-88   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F44588     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-BB-81   (hex)		Huawei Device Co., Ltd.
+C8BB81     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-47-2F   (hex)		Huawei Device Co., Ltd.
+1C472F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+20-5E-64   (hex)		Huawei Device Co., Ltd.
+205E64     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+60-57-7D   (hex)		eero inc.
+60577D     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+78-F2-35   (hex)		Sichuan AI-Link Technology Co., Ltd.
+78F235     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+F4-4E-E3   (hex)		Intel Corporate
+F44EE3     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+D0-E0-42   (hex)		Cisco Systems, Inc
+D0E042     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-37-12   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+3C3712     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+80-B6-55   (hex)		Intel Corporate
+80B655     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+0C-CB-0C   (hex)		iSYS RTS GmbH
+0CCB0C     (base 16)		iSYS RTS GmbH
+				Moosacher Str. 88
+				Munich  Bavaria  80809
+				DE
+
+44-56-E2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+4456E2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+54-AE-D2   (hex)		CSL Dualcom Ltd
+54AED2     (base 16)		CSL Dualcom Ltd
+				Salamander Quay West, Park Lane
+				Harefield  Middlesex  UB9 6NZ
+				GB
+
+F4-6F-A4   (hex)		Physik Instrumente GmbH & Co. KG
+F46FA4     (base 16)		Physik Instrumente GmbH & Co. KG
+				Auf der Roemerstr. 1
+				Karlsruhe    76228
+				DE
+
+C4-74-69   (hex)		BT9
+C47469     (base 16)		BT9
+				Dolev 33
+				Tefen    2495900
+				IL
+
+64-5D-92   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+645D92     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road, Chengdu, Sichuan
+				Chengdu  Sichuan  610000
+				CN
+
+9C-61-21   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+9C6121     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+E0-4F-BD   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+E04FBD     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+40-F4-20   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+40F420     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+CC-A2-60   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+CCA260     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+AC-E7-7B   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ACE77B     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+4C-D3-AF   (hex)		HMD Global Oy
+4CD3AF     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+C8-51-42   (hex)		Samsung Electronics Co.,Ltd
+C85142     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-0D-E7   (hex)		B METERS S.R.L.
+CC0DE7     (base 16)		B METERS S.R.L.
+				VIA FRIULI 3
+				GONARS  UDINE  33050
+				IT
+
+5C-A1-76   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+5CA176     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+10-E4-C2   (hex)		Samsung Electronics Co.,Ltd
+10E4C2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-8D-CA   (hex)		Samsung Electronics Co.,Ltd
+0C8DCA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+58-2F-F7   (hex)		Sagemcom Broadband SAS
+582FF7     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+8C-FD-15   (hex)		Imagine Marketing Private Limited
+8CFD15     (base 16)		Imagine Marketing Private Limited
+				501B, Shri Guru Har Krishan Bhavan Charat Singh Colony Road, Chakala, Andheri East,
+				Mumbai  Maharashtra  400093
+				IN
+
+AC-D8-29   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
+ACD829     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
+				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
+				Nanjing  Jiangsu  211800
+				CN
+
+68-3A-48   (hex)		SAMJIN Co., Ltd.
+683A48     (base 16)		SAMJIN Co., Ltd.
+				199-6, Anyang 7-dong, Manan-gu
+				Anyang-si  Gyeonggi-do  430-817
+				KR
+
+B0-27-CF   (hex)		Extreme Networks, Inc.
+B027CF     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+14-22-3B   (hex)		Google, Inc.
+14223B     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+48-F8-FF   (hex)		CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
+48F8FF     (base 16)		CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
+				No.9, 3rd Wuke Road, Wuhou District
+				Chengdu  Sichuan Province  610045
+				CN
+
+E8-C1-E8   (hex)		Shenzhen Xiao Bi En Culture Education Technology Co.,Ltd.
+E8C1E8     (base 16)		Shenzhen Xiao Bi En Culture Education Technology Co.,Ltd.
+				4GH Unit,Block D,Central Avenue,Intersection of Xixiang Avenue and Baoyuan Road,Labor Community,Xixiang Street,Baoan District
+				Shenzhen  China  518102
+				CN
+
+2C-DD-E9   (hex)		Arista Networks
+2CDDE9     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+70-97-41   (hex)		Arcadyan Corporation
+709741     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+C4-FF-22   (hex)		Huawei Device Co., Ltd.
+C4FF22     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A0-A0-DC   (hex)		Huawei Device Co., Ltd.
+A0A0DC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-80-8A   (hex)		Cloud Diagnostics Canada ULC
+C4808A     (base 16)		Cloud Diagnostics Canada ULC
+				72 Victoria St. S., Unit 100
+				Kitchener  Ontario  N2G 4Y9
+				CA
+
+E4-08-E7   (hex)		Quectel Wireless Solutions Co.,Ltd.
+E408E7     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+7C-70-DB   (hex)		Intel Corporate
+7C70DB     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+8C-94-CC   (hex)		SFR
+8C94CC     (base 16)		SFR
+				12 rue jean-philippe Rameau CS 80001
+				La plaine saint denis   FRANCE  93634
+				FR
+
+60-B6-E1   (hex)		Texas Instruments
+60B6E1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+6C-79-B8   (hex)		Texas Instruments
+6C79B8     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A4-D0-94   (hex)		VIVAVIS AG
+A4D094     (base 16)		VIVAVIS AG
+				Nobelstr. 18
+				Ettlingen    D-76375
+				DE
+
+8C-A3-99   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
+8CA399     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
+				NEW DELHI    NA
+				IN
+
+60-DB-15   (hex)		New H3C Technologies Co., Ltd
+60DB15     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+5C-A7-21   (hex)		New H3C Technologies Co., Ltd
+5CA721     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+98-F2-17   (hex)		Castlenet Technology Inc.
+98F217     (base 16)		Castlenet Technology Inc.
+				5F., No. 10, Daye Rd., Beitou Dist.
+				Taipei City    112030
+				TW
+
+90-80-60   (hex)		Nilfisk A/S
+908060     (base 16)		Nilfisk A/S
+				Kornmarksvej 1
+				Broendby     2605
+				DK
+
+70-A6-CC   (hex)		Intel Corporate
+70A6CC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+6C-43-3C   (hex)		TECNO MOBILE LIMITED
+6C433C     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+44-5B-ED   (hex)		Aruba, a Hewlett Packard Enterprise Company
+445BED     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+84-EB-EF   (hex)		Cisco Systems, Inc
+84EBEF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D0-3E-7D   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+D03E7D     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
+				SHEN ZHEN  GUANG DONG  518000
+				CN
+
+90-69-76   (hex)		Withrobot Inc.
+906976     (base 16)		Withrobot Inc.
+				#1001, Seoul Forest M-tower, 31, Ttukseom-ro 1-gil, Seongdong-gu
+				Seoul  Seoul  04778
+				KR
+
+FC-92-57   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+FC9257     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+60-A5-E2   (hex)		Intel Corporate
+60A5E2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+A4-2A-71   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+A42A71     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+D4-54-8B   (hex)		Intel Corporate
+D4548B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+10-09-F9   (hex)		Amazon Technologies Inc.
+1009F9     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+D0-1E-1D   (hex)		SaiNXT Technologies LLP
+D01E1D     (base 16)		SaiNXT Technologies LLP
+				Shop No. 7, Sonawala Building, 1st Floor, Proctor Road, Grant Road (E)
+				Mumbai  Maharashtra  400007
+				IN
+
+58-4D-42   (hex)		Dragos, Inc.
+584D42     (base 16)		Dragos, Inc.
+				1745 Dorsey Rd, Suite R
+				Hanover  MD  21076
+				US
+
+60-8A-10   (hex)		Microchip Technology Inc.
+608A10     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+A8-23-16   (hex)		Nokia
+A82316     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+38-E3-9F   (hex)		Motorola Mobility LLC, a Lenovo Company
+38E39F     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+44-67-52   (hex)		Wistron INFOCOMM (Zhongshan) CORPORATION
+446752     (base 16)		Wistron INFOCOMM (Zhongshan) CORPORATION
+				15 Cuiwei Road, Cuiheng New District
+				zhongshan  Guangdong  528400
+				CN
+
+78-BB-88   (hex)		Maxio Technology (Hangzhou) Ltd.
+78BB88     (base 16)		Maxio Technology (Hangzhou) Ltd.
+				6F, Building C, No.459 Qianmo Road, Juguang Center
+				Hangzhou  Zhejiang  310051
+				CN
+
+A8-64-F1   (hex)		Intel Corporate
+A864F1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+10-6F-D9   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+106FD9     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+E0-67-81   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+E06781     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+				dongguan   guangdong  523000
+				CN
+
+00-03-24   (hex)		SANYO Techno Solutions Tottori Co., Ltd.
+000324     (base 16)		SANYO Techno Solutions Tottori Co., Ltd.
+				7-101 Tachikawa-cho
+				Tottori City    680-8634
+				JP
+
+B8-AE-1D   (hex)		Guangzhou Xingyi Electronic Technology Co.,Ltd
+B8AE1D     (base 16)		Guangzhou Xingyi Electronic Technology Co.,Ltd
+				Room 805-808, Room 801, Self-made Building 4, No. 1, 3 and 5, Kesheng Road, Guangzhou Private Science Park, No. 1633, Beitai Road, Baiyun District, Guangzhou
+				Guangzhou    51000
+				CN
+
+3C-CD-57   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+3CCD57     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+B8-DA-E8   (hex)		Huawei Device Co., Ltd.
+B8DAE8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+28-DE-A8   (hex)		zte corporation
+28DEA8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+80-8A-BD   (hex)		Samsung Electronics Co.,Ltd
+808ABD     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+D8-BE-65   (hex)		Amazon Technologies Inc.
+D8BE65     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+60-E3-2B   (hex)		Intel Corporate
+60E32B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+AC-EC-85   (hex)		eero inc.
+ACEC85     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+C0-F8-27   (hex)		Rapidmax Technology Corporation
+C0F827     (base 16)		Rapidmax Technology Corporation
+				3F., No.531, Zhongzheng Rd. Xindian Dist.
+				New Taipei City    23148
+				TW
+
+B4-52-7E   (hex)		Sony Corporation
+B4527E     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+70-86-CE   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+7086CE     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+30-75-12   (hex)		Sony Corporation
+307512     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+C4-3A-BE   (hex)		Sony Corporation
+C43ABE     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+94-CE-2C   (hex)		Sony Corporation
+94CE2C     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+DC-8D-8A   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+DC8D8A     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+20-E7-B6   (hex)		Universal Electronics, Inc.
+20E7B6     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+50-0F-59   (hex)		STMicrolectronics International NV
+500F59     (base 16)		STMicrolectronics International NV
+				39, Chemin du Champ-des-Filles
+				 Geneva, Plan-les-Quates    1228
+				CH
+
+E4-2A-AC   (hex)		Microsoft Corporation
+E42AAC     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+D4-3D-F3   (hex)		Zyxel Communications Corporation
+D43DF3     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+20-57-9E   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+20579E     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+00-1E-45   (hex)		Sony Corporation
+001E45     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-0E-07   (hex)		Sony Corporation
+000E07     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+00-0A-D9   (hex)		Sony Corporation
+000AD9     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+00-23-F1   (hex)		Sony Corporation
+0023F1     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-1A-75   (hex)		Sony Corporation
+001A75     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-1C-A4   (hex)		Sony Corporation
+001CA4     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+24-5E-48   (hex)		Apple, Inc.
+245E48     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-C7-29   (hex)		Apple, Inc.
+08C729     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-84-CF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C884CF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-6A-10   (hex)		Whisker Labs - Ting
+806A10     (base 16)		Whisker Labs - Ting
+				12410 Milestone Center Dr, Suite 325
+				Germantown  MD  20876
+				US
+
+E0-23-D7   (hex)		Sleep Number
+E023D7     (base 16)		Sleep Number
+				1001 Third Avenue South
+				Minneapolis  MN  55404
+				US
+
+C4-C3-6B   (hex)		Apple, Inc.
+C4C36B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-1D-48   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+241D48     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+00-91-9E   (hex)		Intel Corporate
+00919E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+64-DC-DE   (hex)		ZheJiang FuChunJiang Information Technology Co.,Ltd
+64DCDE     (base 16)		ZheJiang FuChunJiang Information Technology Co.,Ltd
+				608 Golf Road, Dongzhou Street, Fuyang District, Hangzhou City, Zhejiang Province, China
+				Hangzhou City  Zhejiang Province  311400
+				CN
+
+0C-E1-59   (hex)		Shenzhen iStartek Technology Co., Ltd.
+0CE159     (base 16)		Shenzhen iStartek Technology Co., Ltd.
+				Zone B, 4/F, Building A6, Qinghu Dongli Industrial Park, No. 416 Xuegang North Road, Longhua  District,
+				Shenzhen  Guangdong  518109
+				CN
+
+E8-A7-30   (hex)		Apple, Inc.
+E8A730     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-06-E3   (hex)		Apple, Inc.
+6006E3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-29-BD   (hex)		Team Group Inc
+A029BD     (base 16)		Team Group Inc
+				3F., No. 166 Jian 1st Rd., 
+				Zhonghe Dist.  New Taipei City,   235
+				TW
+
+98-B1-77   (hex)		LANDIS + GYR
+98B177     (base 16)		LANDIS + GYR
+				78th km Old National Road Athens-Corinth 
+				Corinth     20100
+				GR
+
+50-F9-08   (hex)		Wizardlab Co., Ltd.
+50F908     (base 16)		Wizardlab Co., Ltd.
+				#1603, 5, Gasan digital 1-ro, Geumcheon-gu, Seoul
+				Seoul    08594
+				KR
+
+50-C2-E8   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+50C2E8     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+30-09-C0   (hex)		Motorola Mobility LLC, a Lenovo Company
+3009C0     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+FC-2E-19   (hex)		China Mobile Group Device Co.,Ltd.
+FC2E19     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+70-1A-D5   (hex)		Openpath Security, Inc.
+701AD5     (base 16)		Openpath Security, Inc.
+				13428 Maxella Ave, #866
+				Marina Del Rey  CA  90292
+				US
+
+00-0E-82   (hex)		Infinity Tech
+000E82     (base 16)		Infinity Tech
+				PO Box 149, Greenwood
+				Perth  W. A.  6924
+				AU
+
+F0-B6-1E   (hex)		Intel Corporate
+F0B61E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C8-4D-44   (hex)		Shenzhen Jiapeng Huaxiang Technology Co.,Ltd
+C84D44     (base 16)		Shenzhen Jiapeng Huaxiang Technology Co.,Ltd
+				2nd floor, building 5, taihemei Industrial Zone, 128 Chunfeng Road, longbeiling community, Tangxia Town
+				Shenzhen  Guangdong  518109
+				CN
+
+B0-46-92   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B04692     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+AC-76-4C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+AC764C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+5C-58-E6   (hex)		Palo Alto Networks
+5C58E6     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+EC-94-CB   (hex)		Espressif Inc.
+EC94CB     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+40-40-6B   (hex)		Icomera
+40406B     (base 16)		Icomera
+				Odinsgatan 28
+				Gothenburg    411 03
+				SE
+
+EC-97-E0   (hex)		Hangzhou Ezviz Software Co.,Ltd.
+EC97E0     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
+				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+D0-B6-6F   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+D0B66F     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+7C-FD-6B   (hex)		Xiaomi Communications Co Ltd
+7CFD6B     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+18-87-40   (hex)		Xiaomi Communications Co Ltd
+188740     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+34-1C-F0   (hex)		Xiaomi Communications Co Ltd
+341CF0     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+2C-3A-91   (hex)		Huawei Device Co., Ltd.
+2C3A91     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-F7-05   (hex)		Huawei Device Co., Ltd.
+64F705     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+60-6E-E8   (hex)		Xiaomi Communications Co Ltd
+606EE8     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+F0-5E-CD   (hex)		Texas Instruments
+F05ECD     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F8-38-69   (hex)		LG Electronics
+F83869     (base 16)		LG Electronics
+				Science Park W5, 10, Magokjungang 10-ro, Gangseo-gu
+				Seoul    07796
+				KR
+
+00-16-E8   (hex)		Lumissil Microsystems
+0016E8     (base 16)		Lumissil Microsystems
+				1623 Buckeye Dr.
+				Milpitas  CA  95035
+				US
+
+60-CE-41   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60CE41     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-17-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+281709     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-DF-B8   (hex)		Shenzhen Unionmemory Information System Limited
+5CDFB8     (base 16)		Shenzhen Unionmemory Information System Limited
+				Factory Flat D24/F-02, Dong Jiao Tou, Houhai Road, Shekou, Nan Shan District
+				Shenzhen  Guangdong  518067
+				CN
+
+E0-0A-F6   (hex)		Liteon Technology Corporation
+E00AF6     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+B4-0E-CF   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
+B40ECF     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
+				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
+				Nanjing  Jiangsu  211800
+				CN
+
+E0-C5-8F   (hex)		China Mobile IOT Company Limited
+E0C58F     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+2C-05-47   (hex)		Shenzhen Phaten Tech. LTD
+2C0547     (base 16)		Shenzhen Phaten Tech. LTD
+				C-6 ideamonto industril 7002 Songbai Road Guangming District Shenzhen City Guangdong, China
+				Shenzhen    518108
+				CN
+
+2C-1A-05   (hex)		Cisco Systems, Inc
+2C1A05     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-50-D1   (hex)		Murata Manufacturing Co., Ltd.
+9C50D1     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+14-00-20   (hex)		 LongSung Technology (Shanghai) Co.,Ltd.   
+140020     (base 16)		 LongSung Technology (Shanghai) Co.,Ltd.   
+				 Room 606, Block B, Bldg. 1, No. 3000 Longdong Avenue., Zhangjiang Hi-Tech Park, Pudong District
+				ShangHai    201203
+				CN
+
+44-17-93   (hex)		Espressif Inc.
+441793     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+50-3D-EB   (hex)		Zhejiang Tmall Technology Co., Ltd.
+503DEB     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+7C-66-EF   (hex)		Hon Hai Precision IND.CO.,LTD
+7C66EF     (base 16)		Hon Hai Precision IND.CO.,LTD
+				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
+				TAIPEI  TAIWAN  33859
+				CN
+
+78-50-05   (hex)		MOKO TECHNOLOGY Ltd
+785005     (base 16)		MOKO TECHNOLOGY Ltd
+				2F, Building1,No.37 Xiaxintang Xintang village,Fucheng Street,Longhua Distric
+				Shenzhen  Guangdong  518110
+				CN
+
+F8-7F-A5   (hex)		GREATEK
+F87FA5     (base 16)		GREATEK
+				ESTRADA MUNICIPAL PEDRO R SILVA
+				EXTREMA  MG  37640000
+				BR
+
+18-E1-DE   (hex)		Chengdu ChipIntelli Technology Co., Ltd
+18E1DE     (base 16)		Chengdu ChipIntelli Technology Co., Ltd
+				No. 106, 1st floor, building 6, No. 1480, North Tianfu Avenue, Chengdu high tech Zone
+				Chengdu  Sichuan   610041
+				CN
+
+8C-F6-81   (hex)		Silicon Laboratories
+8CF681     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+7C-84-37   (hex)		China Post Communications Equipment Co., Ltd.
+7C8437     (base 16)		China Post Communications Equipment Co., Ltd.
+				6 / F, block D, No.156, Beijing International Financial Building, Fuxingmennei street,Xicheng District
+				Beijing  Beijing  100031
+				CN
+
+B8-4D-43   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+B84D43     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+AC-64-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC6490     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-4A-63   (hex)		TPV Display Technology(Xiamen) Co.,Ltd.
+A84A63     (base 16)		TPV Display Technology(Xiamen) Co.,Ltd.
+				No.1, Xianghai Road, Xiamen Torch Hi-Tech Industrial Development Zone, China
+				Xiamen  Fujian  361101
+				CN
+
+24-3F-AA   (hex)		Huawei Device Co., Ltd.
+243FAA     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D8-67-D3   (hex)		Huawei Device Co., Ltd.
+D867D3     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+48-47-4B   (hex)		Huawei Device Co., Ltd.
+48474B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+80-6F-1C   (hex)		Huawei Device Co., Ltd.
+806F1C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-9F-1A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C89F1A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-68-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D86852     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-E3-42   (hex)		Tuya Smart Inc.
+84E342     (base 16)		Tuya Smart Inc.
+				FLAT/RM 806 BLK ? 8/F CHEUNG SHA WAN PLAZA 833 CHEUNG SHA WAN ROAD KL
+				hongkong  Hong Kong  999077
+				CN
+
+E0-A2-58   (hex)		Wanbang Digital Energy Co.,Ltd
+E0A258     (base 16)		Wanbang Digital Energy Co.,Ltd
+				NO.39 Longhui Road,Wujin District
+				Changzhou    213100
+				CN
+
+4C-BC-E9   (hex)		LG Innotek
+4CBCE9     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+74-5C-FA   (hex)		Shenzhen Shunrui Gaojie Technology Co., Ltd.
+745CFA     (base 16)		Shenzhen Shunrui Gaojie Technology Co., Ltd.
+				502,Building A,No.18,Gongye 2nd Road,Dakan Industrial Zone,Dakan community,Xili street,Nanshan District
+				Shenzhen  Guangdong   518055
+				CN
+
+94-A4-08   (hex)		Shenzhen Trolink Technology CO, LTD
+94A408     (base 16)		Shenzhen Trolink Technology CO, LTD
+				201 B building 4 shijie, Chashu industry 505 block, Baoan airport Sanwei community, Hangcheng street Baoan area.
+				Shenzhen  GuangDong  518000
+				CN
+
+D0-F8-65   (hex)		ITEL MOBILE LIMITED
+D0F865     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+38-5C-76   (hex)		PLANTRONICS, INC.
+385C76     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+7C-C1-77   (hex)		INGRAM MICRO SERVICES
+7CC177     (base 16)		INGRAM MICRO SERVICES
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN    82000
+				FR
+
+78-76-D9   (hex)		EXARA Group
+7876D9     (base 16)		EXARA Group
+				Andropova pr. 18 1
+				Moscow    115432
+				RU
+
+84-A9-38   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+84A938     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				No.3188,YunGu Road?Hefei   Economic and Technological   Development Area
+				HEFEI  ANHUI  230601
+				CN
+
+3C-9F-C3   (hex)		Beijing Sinead Technology Co., Ltd. 
+3C9FC3     (base 16)		Beijing Sinead Technology Co., Ltd. 
+				Room 504,Block A, New material Building, Yongfeng industrial, Haiding District, Beijing.China
+				Beijing  Beijing  100094
+				CN
+
+60-8F-A4   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+608FA4     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+38-FD-F8   (hex)		Cisco Systems, Inc
+38FDF8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-8C-47   (hex)		Tenstorrent Inc
+208C47     (base 16)		Tenstorrent Inc
+				150 Ferrand Dr #901
+				Toronto  ON  M3C 3E5
+				CA
+
+5C-2A-EF   (hex)		  r2p Asia-Pacific Pty Ltd
+5C2AEF     (base 16)		  r2p Asia-Pacific Pty Ltd
+				Unit 5, 18 Lexington Avenue, Bella Vista
+				Sydney  NSW  2153
+				AU
+
+E4-93-6A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+E4936A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+48-77-BD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4877BD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+7C-FC-16   (hex)		Apple, Inc.
+7CFC16     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-B9-45   (hex)		Apple, Inc.
+88B945     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-80-E7   (hex)		Leonardo UK Ltd
+0080E7     (base 16)		Leonardo UK Ltd
+				Christopher Martin Road
+				Basildon  Essex   SS14 3EL
+				GB
+
+10-32-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+10321D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-BE-83   (hex)		Apple, Inc.
+B0BE83     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-F4-CA   (hex)		Apple, Inc.
+DCF4CA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-EF-3A   (hex)		Sichuan AI-Link Technology Co., Ltd.
+18EF3A     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+A0-FF-22   (hex)		SHENZHEN APICAL TECHNOLOGY CO., LTD
+A0FF22     (base 16)		SHENZHEN APICAL TECHNOLOGY CO., LTD
+				9/F.B Building,Tsinghua Unis Infoport ,LangShan Road,North  District,Hi-tech Industrial Park,Nanshan
+				Shenzhen    518000
+				CN
+
+00-04-1B   (hex)		Bridgeworks Ltd.
+00041B     (base 16)		Bridgeworks Ltd.
+				Unit 1 Aero Centre  Ampress Park
+				Lymington  Hampshire  SO41 8QF
+				GB
+
+6C-D3-EE   (hex)		ZIMI CORPORATION
+6CD3EE     (base 16)		ZIMI CORPORATION
+				Room A913, 159 Chengjiang Road
+				Jiangyin City  Jiangsu Province  214400
+				CN
+
+E4-28-05   (hex)		Pivotal Optics
+E42805     (base 16)		Pivotal Optics
+				125 Wolf Road Suite 315
+				Albany  NY  12205
+				US
+
+5C-02-14   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+5C0214     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+78-5E-A2   (hex)		Sunitec Enterprise Co.,Ltd
+785EA2     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+38-1F-8D   (hex)		Tuya Smart Inc.
+381F8D     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+04-CD-15   (hex)		Silicon Laboratories
+04CD15     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin    78701
+				US
+
+A0-B5-3C   (hex)		Technicolor Delivery Technologies Belgium NV
+A0B53C     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+70-09-71   (hex)		Samsung Electronics Co.,Ltd
+700971     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+D0-1B-49   (hex)		Samsung Electronics Co.,Ltd
+D01B49     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-29-EF   (hex)		Qingdao Haier Technology Co.,Ltd
+3429EF     (base 16)		Qingdao Haier Technology Co.,Ltd
+				A01, No.1, Haier Road, Laoshan District,
+				Qingdao  Shan dong  266000
+				CN
+
+54-1D-61   (hex)		YEESTOR Microelectronics Co., Ltd
+541D61     (base 16)		YEESTOR Microelectronics Co., Ltd
+				7th Floor, Block A1, Digital Technology Park, Gaoxin 7th Road South,
+				Shenzhen    518057
+				CN
+
+34-53-D2   (hex)		Sagemcom Broadband SAS
+3453D2     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C4-BD-E5   (hex)		Intel Corporate
+C4BDE5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+30-35-C5   (hex)		Huawei Device Co., Ltd.
+3035C5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-9E-31   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+649E31     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+F8-20-A9   (hex)		Huawei Device Co., Ltd.
+F820A9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-CD-8D   (hex)		Murata Manufacturing Co., Ltd.
+24CD8D     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+48-BD-4A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48BD4A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-D4-E0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A8D4E0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-40-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A0406F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-4F-1A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+004F1A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-69-8E   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+24698E     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+74-33-A6   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+7433A6     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+2C-0D-A7   (hex)		Intel Corporate
+2C0DA7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+BC-2C-E6   (hex)		Cisco Systems, Inc
+BC2CE6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+CC-ED-4D   (hex)		Cisco Systems, Inc
+CCED4D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+FC-5F-49   (hex)		Zhejiang Dahua Technology Co., Ltd.
+FC5F49     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+6C-B0-FD   (hex)		Shenzhen Xinghai Iot Technology Co.,Ltd
+6CB0FD     (base 16)		Shenzhen Xinghai Iot Technology Co.,Ltd
+				South 8th Road, science and Technology Park, Nanshan District
+				Shenzhen    518063
+				CN
+
+D4-63-DE   (hex)		vivo Mobile Communication Co., Ltd.
+D463DE     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+A8-5B-F7   (hex)		Aruba, a Hewlett Packard Enterprise Company
+A85BF7     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+64-2C-0F   (hex)		vivo Mobile Communication Co., Ltd.
+642C0F     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+30-AF-CE   (hex)		vivo Mobile Communication Co., Ltd.
+30AFCE     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+DC-8C-1B   (hex)		vivo Mobile Communication Co., Ltd.
+DC8C1B     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+0C-90-43   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+0C9043     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+18-E7-77   (hex)		vivo Mobile Communication Co., Ltd.
+18E777     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+6C-D9-4C   (hex)		vivo Mobile Communication Co., Ltd.
+6CD94C     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+CC-71-90   (hex)		VIETNAM POST AND TELECOMMUNICATION INDUSTRY TECHNOLOGY JOINT STOCK COMPANY
+CC7190     (base 16)		VIETNAM POST AND TELECOMMUNICATION INDUSTRY TECHNOLOGY JOINT STOCK COMPANY
+				HIGH TECH INDUSTRIAL ZONE I,HOA LAC, HIGH TECH PARK, HA BANG, THACH THAT
+				HANOI  Hanoi  100000
+				VN
+
+B0-F7-C4   (hex)		Amazon Technologies Inc.
+B0F7C4     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+18-A9-A6   (hex)		Nebra Ltd
+18A9A6     (base 16)		Nebra Ltd
+				Unit 4, Bells Yew Green Business Court
+				Bells Yew Green  East Sussex  TN3 9BJ
+				GB
+
+8C-56-46   (hex)		LG Electronics
+8C5646     (base 16)		LG Electronics
+				222 LG-ro, Jinwi-Myeon
+				Pyeongtaek-si  Gyeonggi-do  17709
+				KR
+
+DC-2C-6E   (hex)		Routerboard.com
+DC2C6E     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+14-00-E9   (hex)		Mitel Networks Corporation
+1400E9     (base 16)		Mitel Networks Corporation
+				4000 Innovation Drive
+				Kanata  Ontario  K2K3K1
+				CA
+
+AC-AC-E2   (hex)		CHANGHONG (HONGKONG) TRADING LIMITED
+ACACE2     (base 16)		CHANGHONG (HONGKONG) TRADING LIMITED
+				Unit 1412, 14/F., West Tower, Shun Tak Centre, 168-200 Connaught Road Central, HongKong
+				HONG KONG  HONG KONG   999077
+				HK
+
+4C-8D-53   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4C8D53     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-7D-40   (hex)		Powervision Tech Inc.
+547D40     (base 16)		Powervision Tech Inc.
+				Zone E,Ocean Venture Valley, No.40, Yangguang Rd, Nanhai new District
+				Weihai  Shandong  264200
+				CN
+
+C0-D7-AA   (hex)		Arcadyan Corporation
+C0D7AA     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+6C-0F-0B   (hex)		China Mobile Group Device Co.,Ltd.
+6C0F0B     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+D4-B7-D0   (hex)		Ciena Corporation
+D4B7D0     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+20-20-27   (hex)		Shenzhen Sundray Technologies Company Limited
+202027     (base 16)		Shenzhen Sundray Technologies Company Limited
+				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
+				Shenzhen  Guangdong  518057
+				CN
+
+C8-41-8A   (hex)		Samsung Electronics.,LTD
+C8418A     (base 16)		Samsung Electronics.,LTD
+				129, Samsung-ro, Yeongtong-gu
+				Suwon  Gyeonggi-Do  443-742
+				KR
+
+4C-AB-F8   (hex)		ASKEY COMPUTER CORP
+4CABF8     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+F8-9E-94   (hex)		Intel Corporate
+F89E94     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-48-BE   (hex)		Amazon Technologies Inc.
+1848BE     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+68-22-8E   (hex)		Juniper Networks
+68228E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+68-67-25   (hex)		Espressif Inc.
+686725     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+80-B7-45   (hex)		The Silk Technologies ILC LTD
+80B745     (base 16)		The Silk Technologies ILC LTD
+				Haozma 1
+				Yoqneam    20692
+				IL
+
+C4-03-A8   (hex)		Intel Corporate
+C403A8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+64-42-12   (hex)		Shenzhen Water World Information Co.,Ltd.
+644212     (base 16)		Shenzhen Water World Information Co.,Ltd.
+				Room 201, No.26, Yifenghua Innovation Industrial Park, Xinshi Community, Dalang Subdistrict, Longhua District.
+				Shenzhen  Guangdong  518000
+				CN
+
+88-6E-E1   (hex)		Erbe Elektromedizin GmbH
+886EE1     (base 16)		Erbe Elektromedizin GmbH
+				Waldhoernlestrasse 17
+				Tuebingen  Baden-Wuerttemberg  72072
+				DE
+
+C4-75-AB   (hex)		Intel Corporate
+C475AB     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+0C-B0-88   (hex)		AITelecom
+0CB088     (base 16)		AITelecom
+				1018,hanshin IT Tower Digital-ro 272 Guro-gu
+				seoul    08389
+				KR
+
+DC-97-3A   (hex)		Verana Networks
+DC973A     (base 16)		Verana Networks
+				100 Apollo Drive, Suite 201
+				Chelmsford  MA  01824
+				US
+
+20-66-FD   (hex)		CONSTELL8 NV
+2066FD     (base 16)		CONSTELL8 NV
+				Sint-Bernardse steenweg 72
+				Hemiksem    2620
+				BE
+
+9C-00-D3   (hex)		SHENZHEN IK WORLD Technology Co., Ltd
+9C00D3     (base 16)		SHENZHEN IK WORLD Technology Co., Ltd
+				Aike intelligent industrial park, 167 gongchang Road, Xinhu street, Guangming New District,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+28-2D-06   (hex)		AMPAK Technology,Inc.
+282D06     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+20-2B-20   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+202B20     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+88-4D-7C   (hex)		Apple, Inc.
+884D7C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-FE-9D   (hex)		Apple, Inc.
+A8FE9D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-A3-09   (hex)		Apple, Inc.
+A0A309     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-50-D9   (hex)		Apple, Inc.
+5C50D9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-0A-08   (hex)		Alps Alpine
+000A08     (base 16)		Alps Alpine
+				20-1 Yoshima-Kogyodanchi
+				iwaki-city  Fukushima  970-1192
+				JP
+
+E8-CA-C8   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+E8CAC8     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+D4-19-F6   (hex)		NXP Semiconductor (Tianjin) LTD.
+D419F6     (base 16)		NXP Semiconductor (Tianjin) LTD.
+				No.15 Xinghua Avenue, Xiqing Economic Development Area
+				Tianjin    300385
+				CN
+
+40-AC-BF   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+40ACBF     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+64-BF-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+64BF6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-49-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+30499E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+FC-76-92   (hex)		Semptian Co.,Ltd.
+FC7692     (base 16)		Semptian Co.,Ltd.
+				Floor 19, Block 1A,  Phase 1, International Innovation Valley, Xili Community, Nanshan District
+				Shenzhen  Guangdong  518052
+				CN
+
+FC-AF-BE   (hex)		TireCheck GmbH
+FCAFBE     (base 16)		TireCheck GmbH
+				Schmelzofenvorstadt 33
+				Heidenheim/Brenz  Baden-Württemberg  89520
+				DE
+
+9C-EC-61   (hex)		Huawei Device Co., Ltd.
+9CEC61     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B0-33-66   (hex)		vivo Mobile Communication Co., Ltd.
+B03366     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+7C-C2-25   (hex)		Samsung Electronics Co.,Ltd
+7CC225     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+74-70-69   (hex)		Huawei Device Co., Ltd.
+747069     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-FB-70   (hex)		Huawei Device Co., Ltd.
+14FB70     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+84-D3-D5   (hex)		Huawei Device Co., Ltd.
+84D3D5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D4-13-F8   (hex)		Peplink International Ltd.
+D413F8     (base 16)		Peplink International Ltd.
+				A5, 5/F, HK Spinners Industrial Building, Phase 6, 481 Castle Peak Road
+				Cheung Sha Wan  Kowloon  0
+				HK
+
+C8-5A-CF   (hex)		HP Inc.
+C85ACF     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+9C-1C-6D   (hex)		HEFEI DATANG STORAGE TECHNOLOGY CO.,LTD
+9C1C6D     (base 16)		HEFEI DATANG STORAGE TECHNOLOGY CO.,LTD
+				7F BLOCK C J2 BUILDING INNOVATION PARK HIGH TECH DISTRICT
+				HEFEI  AN HUI PROVINCE PR CHINA  220038
+				CN
+
+FC-29-E3   (hex)		Infinix mobility limited
+FC29E3     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+88-C2-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88C227     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-54-D9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8054D9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-B4-23   (hex)		Amazon Technologies Inc.
+48B423     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+70-70-AA   (hex)		Amazon Technologies Inc.
+7070AA     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+9C-85-66   (hex)		Wingtech Mobile Communications Co.,Ltd.
+9C8566     (base 16)		Wingtech Mobile Communications Co.,Ltd.
+				1F-3F,Yinfeng Mansion,No.5097 of Luosha Road,Luohu District
+				Shenzhen    518011
+				CN
+
+94-A9-A8   (hex)		Texas Instruments
+94A9A8     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+64-2F-C7   (hex)		New H3C Technologies Co., Ltd
+642FC7     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+60-26-AA   (hex)		Cisco Systems, Inc
+6026AA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+5C-31-92   (hex)		Cisco Systems, Inc
+5C3192     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A8-3A-48   (hex)		Ubiqcom India Pvt Ltd
+A83A48     (base 16)		Ubiqcom India Pvt Ltd
+				First Floor, D-92, Sector-63
+				Noida  Uttar Pradesh  201301
+				IN
+
+F4-13-99   (hex)		Aerospace new generation communications Co.,Ltd
+F41399     (base 16)		Aerospace new generation communications Co.,Ltd
+				Building 3, No. 36 Xiyong Avenue
+				CHONG QING    401332
+				CN
+
+64-1A-BA   (hex)		Dryad Networks GmbH
+641ABA     (base 16)		Dryad Networks GmbH
+				Eisenbahnstr. 37
+				Eberswalde  Brandenburg  16225
+				DE
+
+34-94-54   (hex)		Espressif Inc.
+349454     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+A4-43-8C   (hex)		ARRIS Group, Inc.
+A4438C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+94-DE-B8   (hex)		Silicon Laboratories
+94DEB8     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+04-0D-84   (hex)		Silicon Laboratories
+040D84     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+4C-19-5D   (hex)		Sagemcom Broadband SAS
+4C195D     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-80-C2   (hex)		IEEE 802.1 Chair
+0080C2     (base 16)		IEEE 802.1 Chair
+				 c/o RAC Administrator , IEEE
+				Piscataway  NJ  08554
+				US
+
+48-02-86   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+480286     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+98-67-2E   (hex)		Skullcandy
+98672E     (base 16)		Skullcandy
+				6301 N. LANDMARK DRIVE
+				Park City    84098
+				US
+
+D4-35-38   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+D43538     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+10-CE-02   (hex)		Amazon Technologies Inc.
+10CE02     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+D8-53-9A   (hex)		Juniper Networks
+D8539A     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+54-F8-2A   (hex)		u-blox AG
+54F82A     (base 16)		u-blox AG
+				Zuercherstrasse 68
+				Thalwil    8800
+				CH
+
+64-CF-13   (hex)		Weigao Nikkiso(Weihai)Dialysis Equipment Co.,Ltd
+64CF13     (base 16)		Weigao Nikkiso(Weihai)Dialysis Equipment Co.,Ltd
+				No.20,Xingshan Road,Wego Industrial Zone,Chucun,Weihai,Shandong,China
+				Weihai  Shandong  264209
+				CN
+
+8C-49-7A   (hex)		Extreme Networks, Inc.
+8C497A     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+40-32-9D   (hex)		Union Image Co.,Ltd
+40329D     (base 16)		Union Image Co.,Ltd
+				Building A2, Ding Bao Hong Green High Garden, Shiyan Street, Bao 'an District
+				SHENZHEN  GuangDong  518108
+				CN
+
+4C-77-13   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+4C7713     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+6C-4B-B4   (hex)		HUMAX Co., Ltd.
+6C4BB4     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+58-9B-F7   (hex)		Hefei Radio Communication Technology Co., Ltd 
+589BF7     (base 16)		Hefei Radio Communication Technology Co., Ltd 
+				 No.108, YinXing Road, High-tech Development Zone 
+				Hefei  Anhui  230088
+				CN
+
+50-E9-DF   (hex)		Quectel Wireless Solutions Co.,Ltd.
+50E9DF     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+44-1B-88   (hex)		Apple, Inc.
+441B88     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-04-5F   (hex)		Apple, Inc.
+80045F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-3E-53   (hex)		Apple, Inc.
+9C3E53     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-89-F3   (hex)		Apple, Inc.
+C889F3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-FA-23   (hex)		Huawei Device Co., Ltd.
+E8FA23     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+EC-3A-52   (hex)		Huawei Device Co., Ltd.
+EC3A52     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+60-10-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60109E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-EA-30   (hex)		Samsung Electronics Co.,Ltd
+44EA30     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-2F-9D   (hex)		Liteon Technology Corporation
+9C2F9D     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+A4-F3-3B   (hex)		zte corporation
+A4F33B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+30-E7-BC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+30E7BC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+7C-B5-66   (hex)		Intel Corporate
+7CB566     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+90-11-95   (hex)		Amazon Technologies Inc.
+901195     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+10-B9-C4   (hex)		Apple, Inc.
+10B9C4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-7D-5B   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
+CC7D5B     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
+				No. 1500 Zuchongzhi Rd, Building #3
+				Shanghai    201203
+				CN
+
+74-95-52   (hex)		Xuzhou WIKA Electronics Control Technology Co., Ltd.
+749552     (base 16)		Xuzhou WIKA Electronics Control Technology Co., Ltd.
+				No.11 BaoLianSi Road Xuzhou Economic Development Zone
+				Xuzhou  JiangSu,PRC  221001
+				CN
+
+A8-13-06   (hex)		vivo Mobile Communication Co., Ltd.
+A81306     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+1C-34-F1   (hex)		Silicon Laboratories
+1C34F1     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+B4-31-61   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+B43161     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+4C-FE-2E   (hex)		DongGuan Siyoto Electronics Co., Ltd       
+4CFE2E     (base 16)		DongGuan Siyoto Electronics Co., Ltd       
+				Hecheng Industrial District, QiaoTou Town
+				DongGuan City  Guangdong  523520
+				CN
+
+84-5F-04   (hex)		Samsung Electronics Co.,Ltd
+845F04     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F8-C1-16   (hex)		Juniper Networks
+F8C116     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+EC-9B-2D   (hex)		China Mobile Group Device Co.,Ltd.
+EC9B2D     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+AC-93-C4   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+AC93C4     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+4C-63-EB   (hex)		Application Solutions (Electronics and Vision) Ltd
+4C63EB     (base 16)		Application Solutions (Electronics and Vision) Ltd
+				Unit 2 York Road, Burgess Hill
+				England  West Sussex, England, RH15 9TT  RH15 9TT
+				GB
+
+60-8C-DF   (hex)		Beamtrail-Sole Proprietorship
+608CDF     (base 16)		Beamtrail-Sole Proprietorship
+				Level 7 Aldar HQ
+				Abu Dhabi  Abu Dhabi  29836
+				AE
+
+D0-1B-1F   (hex)		OHSUNG
+D01B1F     (base 16)		OHSUNG
+				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
+				GUMI  GYEONG BUK  730-030
+				KR
+
+0C-4E-C0   (hex)		Maxlinear Inc
+0C4EC0     (base 16)		Maxlinear Inc
+				1060 Rincon Circle 
+				San Jose  CA  95131
+				US
+
+FC-38-C4   (hex)		China Grand Communications Co.,Ltd.
+FC38C4     (base 16)		China Grand Communications Co.,Ltd.
+				2712, Block A, Phase II, Qianhai Economic and Trade Center, China Merchants Group, No. 3041, Yihai Avenue, Nanshan street, Shenzhen Hong Kong cooperation zone, Shenzhen
+				Shenzhen  Guangdong  518066
+				CN
+
+5C-F5-1A   (hex)		Zhejiang Dahua Technology Co., Ltd.
+5CF51A     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+D8-AA-59   (hex)		Tonly Technology Co. Ltd 
+D8AA59     (base 16)		Tonly Technology Co. Ltd 
+				Section 37, Zhongkai Hi-Tech Development Zone
+				Huizhou  Guangdong  516006
+				CN
+
+2C-FD-B3   (hex)		Tonly Technology Co. Ltd 
+2CFDB3     (base 16)		Tonly Technology Co. Ltd 
+				Section 37, Zhongkai Hi-Tech Development Zone
+				Huizhou  Guangdong  516006
+				CN
+
+CC-8C-BF   (hex)		Tuya Smart Inc.
+CC8CBF     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+04-CF-4B   (hex)		Intel Corporate
+04CF4B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C0-18-03   (hex)		HP Inc.
+C01803     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+2C-78-4C   (hex)		Iton Technology Corp.
+2C784C     (base 16)		Iton Technology Corp.
+				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
+				Shenzhen  Guangdong   518116
+				CN
+
+48-87-59   (hex)		Xiaomi Communications Co Ltd
+488759     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+AC-1E-9E   (hex)		Xiaomi Communications Co Ltd
+AC1E9E     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+E0-AE-A2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E0AEA2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-45-6F   (hex)		SHENZHEN ONEGA TECHNOLOGY CO.,LTD
+44456F     (base 16)		SHENZHEN ONEGA TECHNOLOGY CO.,LTD
+				2 / F, building 3, zone B, Xusheng Xifa, Bao'an District, Shenzhen
+				Shenzhen  Guangdong  518126
+				CN
+
+34-97-6F   (hex)		Rootech, Inc.
+34976F     (base 16)		Rootech, Inc.
+				102-611 Digital Empire2, 88, Sin won-ro
+				Yeongtong-gu, Suwon  Gyeonggi-do  16681
+				KR
+
+E8-FD-F8   (hex)		Shanghai High-Flying Electronics  Technology Co., Ltd
+E8FDF8     (base 16)		Shanghai High-Flying Electronics  Technology Co., Ltd
+				Room 1002,#1Building,No.3000 Longdong Avenue,Pudong
+				Shanghai  Shanghai  201202
+				CN
+
+6C-6C-0F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C6C0F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-97-A9   (hex)		Ericsson AB
+F897A9     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+98-CA-20   (hex)		Shanghai SIMCOM Ltd.
+98CA20     (base 16)		Shanghai SIMCOM Ltd.
+				 Building A, SIM Technology Building, No.633, Jinzhong Road, Changning District
+				Shanghai    200335
+				CN
+
+DC-15-2D   (hex)		China Mobile Group Device Co.,Ltd.
+DC152D     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+00-D8-A2   (hex)		Huawei Device Co., Ltd.
+00D8A2     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-6B-1B   (hex)		Huawei Device Co., Ltd.
+DC6B1B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-28-40   (hex)		Apple, Inc.
+342840     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-E7-B0   (hex)		Apple, Inc.
+18E7B0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-57-8A   (hex)		Apple, Inc.
+50578A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-9F-DD   (hex)		Huawei Device Co., Ltd.
+D49FDD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-6D-C9   (hex)		Sagemcom Broadband SAS
+D06DC9     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+08-57-FB   (hex)		Amazon Technologies Inc.
+0857FB     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+D4-FB-8E   (hex)		Apple, Inc.
+D4FB8E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-DE-28   (hex)		Apple, Inc.
+B0DE28     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-13-1D   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+7C131D     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+D8-33-B7   (hex)		Sagemcom Broadband SAS
+D833B7     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+D8-50-A1   (hex)		Hunan Danuo Technology Co.,LTD
+D850A1     (base 16)		Hunan Danuo Technology Co.,LTD
+				No. 89, Guoqing South Road, Beihu District, Chenzhou City, Hunan Province (in Xiangnan International Logistics Park)
+				Hunan    423000
+				CN
+
+44-1A-AC   (hex)		Elektrik Uretim AS EOS
+441AAC     (base 16)		Elektrik Uretim AS EOS
+				Mustafa Kemal Mahallesi No:166 Çankaya
+				Ankara    06520
+				TR
+
+48-51-D0   (hex)		Jiangsu Xinsheng Intelligent Technology Co., Ltd. 
+4851D0     (base 16)		Jiangsu Xinsheng Intelligent Technology Co., Ltd. 
+				18th Floor,Inno laser Building,18-69 Changwu Mid Road,Changzhou Science & Education Town,Wujin District,Changzhou,Jiangsu213000,China
+				Changzhou  Jiangsu  213000
+				CN
+
+80-77-A4   (hex)		TECNO MOBILE LIMITED
+8077A4     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+B4-28-75   (hex)		Futecho Solutions Private Limited
+B42875     (base 16)		Futecho Solutions Private Limited
+				504, Commercial Complex, Savitri Cinema Compound, GK2
+				New Delhi    110048
+				IN
+
+30-23-64   (hex)		Nokia Shanghai Bell Co., Ltd.
+302364     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+0C-1C-1A   (hex)		eero inc.
+0C1C1A     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+00-C3-0A   (hex)		Xiaomi Communications Co Ltd
+00C30A     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+88-52-EB   (hex)		Xiaomi Communications Co Ltd
+8852EB     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+7C-6C-F0   (hex)		Shenzhen TINNO Mobile Technology Corp.
+7C6CF0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+				Shenzhen   guangdong  518053
+				CN
+
+00-A0-A2   (hex)		B810 S.R.L.
+00A0A2     (base 16)		B810 S.R.L.
+				Via E. Lazzaretti 2/1
+				Reggio Emilia (RE)    42122
+				IT
+
+38-68-BE   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+3868BE     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+DC-9A-7D   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+DC9A7D     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+28-A5-3F   (hex)		vivo Mobile Communication Co., Ltd.
+28A53F     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+8C-49-B6   (hex)		vivo Mobile Communication Co., Ltd.
+8C49B6     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+84-F1-D0   (hex)		EHOOME IOT PRIVATE LIMITED
+84F1D0     (base 16)		EHOOME IOT PRIVATE LIMITED
+				A-13, SECTOR-83, 
+				NOIDA  UTTAR PRADESH  201301
+				IN
+
+20-8B-D1   (hex)		NXP Semiconductor (Tianjin) LTD.
+208BD1     (base 16)		NXP Semiconductor (Tianjin) LTD.
+				No.15 Xinghua Avenue, Xiqing Economic Development Area
+				Tianjin    300385
+				CN
+
+00-0F-A0   (hex)		Canon Korea Inc.
+000FA0     (base 16)		Canon Korea Inc.
+				607, Teheran-ro, Gangnam-gu
+				Seoul  Gangnam-gu  06173
+				KR
+
+30-BB-7D   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+30BB7D     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+6C-67-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C67EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-69-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88693D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-99-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+00991D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-3F-D2   (hex)		Mellanox Technologies, Inc.
+B83FD2     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+28-3E-0C   (hex)		Preferred Robotics, Inc.
+283E0C     (base 16)		Preferred Robotics, Inc.
+				Otemachi Bldg. 1-6-1 Otemachi
+				 Chiyoda-ku  Tokyo  100-0004
+				JP
+
+30-CB-36   (hex)		Belden Singapore Pte. Ltd.
+30CB36     (base 16)		Belden Singapore Pte. Ltd.
+				151 Lorong Chuan #05-01 New Tech Park Singapore
+				Singapore    556741
+				SG
+
+8C-17-59   (hex)		Intel Corporate
+8C1759     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+04-BC-9F   (hex)		Calix Inc.
+04BC9F     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+BC-6E-6D   (hex)		EM Microelectronic
+BC6E6D     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+B0-4A-6A   (hex)		Samsung Electronics Co.,Ltd
+B04A6A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-79-8D   (hex)		Samsung Electronics Co.,Ltd
+A8798D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-ED-F4   (hex)		Samsung Electronics Co.,Ltd
+5CEDF4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-92-C2   (hex)		Square Route Co., Ltd.
+3492C2     (base 16)		Square Route Co., Ltd.
+				Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku
+				Tokyo  Tokyo  108-0075
+				JP
+
+28-3D-C2   (hex)		Samsung Electronics Co.,Ltd
+283DC2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-D4-9E   (hex)		Intel Corporate
+00D49E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+6C-A4-01   (hex)		essensys plc
+6CA401     (base 16)		essensys plc
+				Aldgate Tower, Leman Street
+				London    E1 8FA
+				GB
+
+CC-F3-05   (hex)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
+CCF305     (base 16)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
+				Second floor, Building A, FengHangAvenue, Hangcheng Street, Bao'an District
+				Shenzhen  Guangdong  518126
+				CN
+
+34-BD-20   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
+34BD20     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
+				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
+				Hangzhou    310052
+				CN
+
+64-C2-69   (hex)		eero inc.
+64C269     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+AC-2A-A1   (hex)		Cisco Systems, Inc
+AC2AA1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F8-E9-4F   (hex)		Cisco Systems, Inc
+F8E94F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+30-89-4A   (hex)		Intel Corporate
+30894A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+B8-D6-1A   (hex)		Espressif Inc.
+B8D61A     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+BC-F4-D4   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+BCF4D4     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+D8-9C-8E   (hex)		Comcast Cable Corporation
+D89C8E     (base 16)		Comcast Cable Corporation
+				1800 Arch Street
+				Philadelphia  PA  19103
+				US
+
+74-56-3C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+74563C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+EC-55-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC551C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-6B-DB   (hex)		Huawei Device Co., Ltd.
+8C6BDB     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+10-DA-49   (hex)		Huawei Device Co., Ltd.
+10DA49     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+60-18-3A   (hex)		Huawei Device Co., Ltd.
+60183A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+18-C0-07   (hex)		Huawei Device Co., Ltd.
+18C007     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-6C-C5   (hex)		Huawei Device Co., Ltd.
+E06CC5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+30-96-3B   (hex)		Huawei Device Co., Ltd.
+30963B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+90-B5-7F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+90B57F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+98-59-7A   (hex)		Intel Corporate
+98597A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+64-49-7D   (hex)		Intel Corporate
+64497D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+B4-83-51   (hex)		Intel Corporate
+B48351     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+00-25-CA   (hex)		Laird Connectivity
+0025CA     (base 16)		Laird Connectivity
+				W66 N220 Commerce Court
+				Cedarburg  WI  53012
+				US
+
+04-B9-7D   (hex)		AiVIS Co., Itd.
+04B97D     (base 16)		AiVIS Co., Itd.
+				112, Dumipo-ro, Jung-gu 
+				Incheon  Incheon  22394
+				KR
+
+C4-C0-63   (hex)		New H3C Technologies Co., Ltd
+C4C063     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+54-43-B2   (hex)		Espressif Inc.
+5443B2     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+E0-79-8D   (hex)		Silicon Laboratories
+E0798D     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+34-AD-61   (hex)		CELESTICA INC.
+34AD61     (base 16)		CELESTICA INC.
+				1900-5140 Yonge Street PO Box 42   
+				Toronto  Ontario  M2N 6L7
+				CA
+
+10-96-1A   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+10961A     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
+				SHEN ZHEN  GUANG DONG  518000
+				CN
+
+BC-E9-E2   (hex)		Brocade Communications Systems LLC
+BCE9E2     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+AC-BF-71   (hex)		Bose Corporation
+ACBF71     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+18-A5-9C   (hex)		IEEE Registration Authority
+18A59C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+AC-D3-1D   (hex)		Cisco Meraki
+ACD31D     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+74-84-69   (hex)		Nintendo Co.,Ltd
+748469     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+74-71-8B   (hex)		Apple, Inc.
+74718B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-31-7F   (hex)		Apple, Inc.
+70317F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-CF-99   (hex)		Apple, Inc.
+A4CF99     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-2E-B4   (hex)		Apple, Inc.
+4C2EB4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-19-74   (hex)		Apple, Inc.
+B41974     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-E8-92   (hex)		SHENNAN CIRCUITS CO.,LTD
+04E892     (base 16)		SHENNAN CIRCUITS CO.,LTD
+				Gao Qiao Industrial Park East,Long Gang District,
+				Shenzhen  Guangdong  518117
+				CN
+
+00-18-48   (hex)		Vecima Networks Inc.
+001848     (base 16)		Vecima Networks Inc.
+				150 Cardinal Place 
+				Saskatoon  SK  S7L 6H7
+				CA
+
+2C-55-3C   (hex)		Vecima Networks Inc.
+2C553C     (base 16)		Vecima Networks Inc.
+				150 Cardinal Place 
+				Saskatoon  SK  S7L 6H7
+				CA
+
+60-95-BD   (hex)		Apple, Inc.
+6095BD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1A-35   (hex)		BARTEC GmbH
+001A35     (base 16)		BARTEC GmbH
+				Max-Eyth-Straße 16
+				Bad Mergentheim  Bavaria  97980
+				DE
+
+8C-CB-DF   (hex)		FOXCONN INTERCONNECT TECHNOLOGY 
+8CCBDF     (base 16)		FOXCONN INTERCONNECT TECHNOLOGY 
+				66-1 Zhongshan Road, Tucheng District
+				New Taipei City  Taiwan  23680
+				TW
+
+98-F1-12   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+98F112     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+84-69-93   (hex)		HP Inc.
+846993     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+98-C8-1C   (hex)		BAYTEC LIMITED
+98C81C     (base 16)		BAYTEC LIMITED
+				107C, 31/f, The gateway, Tower 5, Harbour City, 15 canton road, Tsim Sha Tsui, Hong Kong
+				Harbour    999077
+				HK
+
+D0-98-9C   (hex)		ConMet
+D0989C     (base 16)		ConMet
+				5701 SE Columbia Way
+				Vancouver    WA  98661
+				US
+
+24-26-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2426D6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-81-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC819C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-A4-10   (hex)		Amlogic, Inc.
+1CA410     (base 16)		Amlogic, Inc.
+				2518 Mission College Blvd, Suite 120
+				Santa Clara  CA  95054
+				US
+
+20-0B-16   (hex)		Texas Instruments
+200B16     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+88-01-F9   (hex)		Texas Instruments
+8801F9     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F8-55-48   (hex)		Texas Instruments
+F85548     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+68-E7-4A   (hex)		Texas Instruments
+68E74A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+70-A6-BD   (hex)		Honor Device Co., Ltd.
+70A6BD     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+4C-9E-6C   (hex)		BROADEX TECHNOLOGIES CO.LTD
+4C9E6C     (base 16)		BROADEX TECHNOLOGIES CO.LTD
+				NO.306 YATAI ROAD
+				JIAXING  ZHEJIANG  314006
+				CN
+
+54-2F-04   (hex)		Shanghai Longcheer Technology Co., Ltd.
+542F04     (base 16)		Shanghai Longcheer Technology Co., Ltd.
+				Bldg 1,No.401,Caobao RD,Xuhui Dist
+				Shanghai    200233
+				CN
+
+E4-B6-33   (hex)		Wuxi Stars Microsystem Technology Co., Ltd
+E4B633     (base 16)		Wuxi Stars Microsystem Technology Co., Ltd
+				Room 2101, Tower C, Swan Tower, Wuxi Software Park, 111 Linghu Avenue, Xinwu District
+				Wuxi    214135
+				CN
+
+08-51-04   (hex)		Huawei Device Co., Ltd.
+085104     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+78-5B-64   (hex)		Huawei Device Co., Ltd.
+785B64     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-E1-5B   (hex)		Huawei Device Co., Ltd.
+54E15B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+AC-C4-BD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ACC4BD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+AC-A3-2F   (hex)		Solidigm Technology
+ACA32F     (base 16)		Solidigm Technology
+				1921 Corporate Center Circle, Suite 3B
+				Longmont    80501
+				US
+
+C4-A1-0E   (hex)		IEEE Registration Authority
+C4A10E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+AC-71-2E   (hex)		Fortinet, Inc.
+AC712E     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale    94086
+				US
+
+0C-EC-84   (hex)		Shenzhen TINNO Mobile Technology Corp.
+0CEC84     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+B4-39-39   (hex)		Shenzhen TINNO Mobile Technology Corp.
+B43939     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+8C-98-06   (hex)		SHENZHEN SEI ROBOTICS CO.,LTD
+8C9806     (base 16)		SHENZHEN SEI ROBOTICS CO.,LTD
+				the 4th floor,Productivity Building D,#5 Hi-Tech Middle 2nd Road,Shenzhen Hi-Tech Industrial Park, Nanshan District,Shenzhen,China
+				Shenzhen    518000
+				CN
+
+70-70-FC   (hex)		GOLD&WATER INDUSTRIAL LIMITED
+7070FC     (base 16)		GOLD&WATER INDUSTRIAL LIMITED
+				NO.77 Leighton Road, 17/F Leighton Centre Causeway Bay ,HongKong
+				HongKong    999077
+				HK
+
+98-D9-3D   (hex)		Demant Enterprise A/S
+98D93D     (base 16)		Demant Enterprise A/S
+				Kongebakken 9
+				Smorum    2765
+				DK
+
+B4-A6-78   (hex)		Zhejiang Tmall Technology Co., Ltd.
+B4A678     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310024
+				CN
+
+88-F2-BD   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+88F2BD     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+A0-F8-95   (hex)		Shenzhen TINNO Mobile Technology Corp.
+A0F895     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+6C-08-31   (hex)		ANALOG SYSTEMS
+6C0831     (base 16)		ANALOG SYSTEMS
+				UNIT 12, 38 DLF INDUSTRIAL AREA KIRTI NAGAR NEW DELHI 
+				NEW DELHI  DELHI  110015
+				IN
+
+2C-07-F6   (hex)		SKG Health Technologies Co., Ltd. 
+2C07F6     (base 16)		SKG Health Technologies Co., Ltd. 
+				23A Floor,Building 3,Zhongke R&D Park,No.009,Gaoxin South 1st Road, High-tech Zone Community,Yuehai street, Nanshan District,Shenzhen City,Guangdong Province,P.R.China
+				Shenzhen    518000
+				CN
+
+00-24-E4   (hex)		Withings
+0024E4     (base 16)		Withings
+				2 rue Maurice Hartmann
+				Issy-les-Moulineaux    92130
+				FR
+
+A4-7E-FA   (hex)		Withings
+A47EFA     (base 16)		Withings
+				2 rue Maurice Hartmann
+				Issy-les-Moulineaux    92130
+				FR
+
+78-91-DE   (hex)		Guangdong ACIGA Science&Technology Co.,Ltd
+7891DE     (base 16)		Guangdong ACIGA Science&Technology Co.,Ltd
+				L203 Biguiyuan International Club, Beijiao Town, Shunde District
+				Fo Shan  Guangdong  528312
+				CN
+
+E0-80-6B   (hex)		Xiaomi Communications Co Ltd
+E0806B     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+70-AC-08   (hex)		Silicon Laboratories
+70AC08     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+70-50-E7   (hex)		IEEE Registration Authority
+7050E7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-13-B4   (hex)		Appear AS
+0013B4     (base 16)		Appear AS
+				P.O. Box 8 Lilleaker
+				Oslo    NO-0216
+				NO
+
+38-12-7B   (hex)		Crenet Labs Co., Ltd.
+38127B     (base 16)		Crenet Labs Co., Ltd.
+				Rm. 1, 10F., No. 181, Sec. 1, Datong Rd.
+				New Taipei City  Xizhi Dist.  221451
+				TW
+
+B0-E4-5C   (hex)		Samsung Electronics Co.,Ltd
+B0E45C     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+3C-26-E4   (hex)		Cisco Systems, Inc
+3C26E4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+38-91-B7   (hex)		Cisco Systems, Inc
+3891B7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-5D-A8   (hex)		Cisco Systems, Inc
+345DA8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-4C-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC4CA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-34-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+74342B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-7F-F0   (hex)		TP-Link Corporation Limited
+687FF0     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+DC-36-0C   (hex)		Hitron Technologies. Inc
+DC360C     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+38-FD-F5   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+38FDF5     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+C4-12-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C412EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-CF-69   (hex)		meerecompany
+60CF69     (base 16)		meerecompany
+				69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of  Korea
+				Hwaseong-si    18630
+				KR
+
+4C-62-7B   (hex)		SmartCow AI Technologies Taiwan Ltd.
+4C627B     (base 16)		SmartCow AI Technologies Taiwan Ltd.
+				16F., No. 102, Songlong Rd., Xinyi Dist.,
+				Taipei City    110059
+				TW
+
+BC-7B-72   (hex)		Huawei Device Co., Ltd.
+BC7B72     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F8-2B-7F   (hex)		Huawei Device Co., Ltd.
+F82B7F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-C3-BC   (hex)		Huawei Device Co., Ltd.
+40C3BC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-FE-1C   (hex)		CHOUNG HWA TECH CO.,LTD
+34FE1C     (base 16)		CHOUNG HWA TECH CO.,LTD
+				#31 Jangja-ro, Namdong-gu
+				Incheon-si    21532
+				KR
+
+D8-68-A0   (hex)		Samsung Electronics Co.,Ltd
+D868A0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+04-29-2E   (hex)		Samsung Electronics Co.,Ltd
+04292E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+28-53-E0   (hex)		Sintela Ltd
+2853E0     (base 16)		Sintela Ltd
+				The Distillery, The Old Brewery, 9-11 Lodway,
+				Pill  Bristol  BS20 0DH
+				GB
+
+F4-93-9F   (hex)		Hon Hai Precision Industry Co., Ltd.
+F4939F     (base 16)		Hon Hai Precision Industry Co., Ltd.
+				GuangDongShenZhen
+				ShenZhen  GuangDong  518109
+				CN
+
+AC-4E-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+AC4E65     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+BC-5D-A3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+BC5DA3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+80-72-15   (hex)		SKY UK LIMITED
+807215     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+B0-3E-51   (hex)		SKY UK LIMITED
+B03E51     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+80-75-1F   (hex)		SKY UK LIMITED
+80751F     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+A4-AE-12   (hex)		Hon Hai Precision Industry Co., Ltd.
+A4AE12     (base 16)		Hon Hai Precision Industry Co., Ltd.
+				GuangDongShenZhen
+				ShenZhen  GuangDong  518109
+				CN
+
+C0-A3-6E   (hex)		SKY UK LIMITED
+C0A36E     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+00-A3-88   (hex)		SKY UK LIMITED
+00A388     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+38-F0-C8   (hex)		Logitech
+38F0C8     (base 16)		Logitech
+				7700 Gateway Blvd
+				Newark  CA  94560
+				US
+
+1C-EF-03   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+1CEF03     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
+				Guangzhou  Guangdong  510663
+				CN
+
+58-B0-3E   (hex)		Nintendo Co.,Ltd
+58B03E     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+74-13-EA   (hex)		Intel Corporate
+7413EA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-7A-3E   (hex)		Silicon Laboratories
+187A3E     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+30-05-05   (hex)		Intel Corporate
+300505     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+B0-DC-EF   (hex)		Intel Corporate
+B0DCEF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+28-BC-05   (hex)		BLU Products Inc
+28BC05     (base 16)		BLU Products Inc
+				10814 NW 33rd Street
+				Miami  FL  33172
+				US
+
+2C-A7-74   (hex)		Texas Instruments
+2CA774     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+18-4E-03   (hex)		HMD Global Oy
+184E03     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+E0-08-71   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+E00871     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+				dongguan   guangdong  523000
+				CN
+
+9C-95-6E   (hex)		Microchip Technology Inc.
+9C956E     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+DC-0B-09   (hex)		Cisco Systems, Inc
+DC0B09     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-F3-FB   (hex)		Cisco Systems, Inc
+08F3FB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+DC-F3-1C   (hex)		Texas Instruments
+DCF31C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+54-45-38   (hex)		Texas Instruments
+544538     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+78-C2-13   (hex)		Sagemcom Broadband SAS
+78C213     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+40-22-D8   (hex)		Espressif Inc.
+4022D8     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+A0-36-BC   (hex)		ASUSTek COMPUTER INC.
+A036BC     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+10-73-EB   (hex)		Infiniti Electro-Optics
+1073EB     (base 16)		Infiniti Electro-Optics
+				15 - 9th Ave S
+				Cranbrook  British Columbia  V1C 2L9
+				CA
+
+84-0B-BB   (hex)		MitraStar Technology Corp.
+840BBB     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+04-D9-C8   (hex)		Hon Hai Precision Industry Co., Ltd.
+04D9C8     (base 16)		Hon Hai Precision Industry Co., Ltd.
+				GuangDongShenZhen
+				ShenZhen  GuangDong  518109
+				CN
+
+A0-FB-83   (hex)		Honor Device Co., Ltd.
+A0FB83     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+9C-92-4F   (hex)		Apple, Inc.
+9C924F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-0E-2B   (hex)		Apple, Inc.
+200E2B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-D7-93   (hex)		Apple, Inc.
+F0D793     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-B3-06   (hex)		Apple, Inc.
+70B306     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-49-6D   (hex)		Apple, Inc.
+B8496D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-65-60   (hex)		EM Microelectronic
+906560     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+88-0A-A3   (hex)		Juniper Networks
+880AA3     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+30-3D-51   (hex)		IEEE Registration Authority
+303D51     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+CC-D3-C1   (hex)		Vestel Elektronik San ve Tic. A.S.
+CCD3C1     (base 16)		Vestel Elektronik San ve Tic. A.S.
+				Organize san
+				Manisa  Turket  45030
+				TR
+
+EC-BE-5F   (hex)		Vestel Elektronik San ve Tic. A.S.
+ECBE5F     (base 16)		Vestel Elektronik San ve Tic. A.S.
+				Organize san
+				Manisa  Turket  45030
+				TR
+
+F4-BB-C7   (hex)		vivo Mobile Communication Co., Ltd.
+F4BBC7     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+4C-36-4E   (hex)		Panasonic Connect Co., Ltd.
+4C364E     (base 16)		Panasonic Connect Co., Ltd.
+				4-1-62 Minoshima, Hakata-ku
+				Fukuoka-shi  Fukuoka  812-8531
+				JP
+
+44-71-47   (hex)		Beijing Xiaomi Electronics Co.,Ltd
+447147     (base 16)		Beijing Xiaomi Electronics Co.,Ltd
+				Xiaomi Campus
+				Beijing  Beijing  100085
+				CN
+
+A8-DC-5A   (hex)		Digital Watchdog
+A8DC5A     (base 16)		Digital Watchdog
+				16220 Bloomfield Ave
+				Cerritos  CA  90703
+				US
+
+1C-24-CD   (hex)		ASKEY COMPUTER CORP
+1C24CD     (base 16)		ASKEY COMPUTER CORP
+				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
+				NEW TAIPEI CITY    23585
+				TW
+
+64-37-A4   (hex)		TOKYOSHUHA CO.,LTD.
+6437A4     (base 16)		TOKYOSHUHA CO.,LTD.
+				1-8-9 KANDAIZUMICHO
+				CHIYODA-KU  TOKYO  101-0024
+				JP
+
+90-CA-FA   (hex)		Google, Inc.
+90CAFA     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+38-A8-9B   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+38A89B     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+00-FB-F9   (hex)		Axiado Corporation
+00FBF9     (base 16)		Axiado Corporation
+				2610 Orchard Parkway, Suite 300
+				San Jose  CA  95134
+				US
+
+DC-AA-43   (hex)		Shenzhen Terca Information Technology Co., Ltd.
+DCAA43     (base 16)		Shenzhen Terca Information Technology Co., Ltd.
+				Room1401, Block A, Building 12 , Shenzhen Bay Technology and Eco-Park , No. 18 Keji South Road , Nanshan District , Shenzhen
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+88-B4-36   (hex)		FUJIFILM Corporation
+88B436     (base 16)		FUJIFILM Corporation
+				1-324,Uetake,Kita-ku
+				Saitama  Saitama  331-9624
+				JP
+
+30-27-CF   (hex)		Canopy Growth Corp
+3027CF     (base 16)		Canopy Growth Corp
+				350 Leggett Drive
+				Ottawa  Ontario  K2K 2W7
+				CA
+
+44-16-FA   (hex)		Samsung Electronics Co.,Ltd
+4416FA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-67-1F   (hex)		Tuya Smart Inc.
+FC671F     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+84-3C-4C   (hex)		Robert Bosch SRL
+843C4C     (base 16)		Robert Bosch SRL
+				Horia Macelariu 30-34
+				Bucharest    013937
+				RO
+
+6C-72-E2   (hex)		amitek
+6C72E2     (base 16)		amitek
+				#311, KETI, 226, Chemdangwari-ro, Buk-gu, Gwangju, 61011, Rep. of KOREA
+				Gwangju    61011
+				KR
+
+78-F1-C6   (hex)		Cisco Systems, Inc
+78F1C6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-1B-2D   (hex)		Cisco Systems, Inc
+341B2D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-B5-F2   (hex)		Samsung Electronics Co.,Ltd
+64B5F2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-E8-40   (hex)		ZOWEE TECHNOLOGY(HEYUAN) CO., LTD.
+10E840     (base 16)		ZOWEE TECHNOLOGY(HEYUAN) CO., LTD.
+				Runye Precision Manufacturing Industrial Park,among the north of Xiangjing Road, the west of Xinpi Road and the south of Yangzi Road, locatd in the High-tech Zone, Heyuan City Guangdong Province
+				Heyuan  Guangdong  517000
+				CN
+
+44-05-E8   (hex)		twareLAB
+4405E8     (base 16)		twareLAB
+				338 Gwanggyojungang-ro
+				yongin  gyeonggi  16942
+				KR
+
+8C-06-CB   (hex)		Toradex AG
+8C06CB     (base 16)		Toradex AG
+				Ebenaustrasse 10 
+				Horw  LU  6048
+				CH
+
+A4-0E-75   (hex)		Aruba, a Hewlett Packard Enterprise Company
+A40E75     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+78-C5-7D   (hex)		Zyxel Communications Corporation
+78C57D     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+98-9D-E5   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+989DE5     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+44-5A-DF   (hex)		MIKAMI & CO., LTD.
+445ADF     (base 16)		MIKAMI & CO., LTD.
+				1-5-23 Eda-Nishi, Aoba-Ku
+				Yokohama-Shi  Kanagawa-Pre  225-0014
+				JP
+
+8C-35-92   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+8C3592     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+6C-B1-33   (hex)		Apple, Inc.
+6CB133     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-E7-1D   (hex)		Arista Networks
+28E71D     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+A0-46-5A   (hex)		Motorola Mobility LLC, a Lenovo Company
+A0465A     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+08-6E-9C   (hex)		Huawei Device Co., Ltd.
+086E9C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-AC-AA   (hex)		Apple, Inc.
+C4ACAA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-32-6A   (hex)		Apple, Inc.
+2C326A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-28-7D   (hex)		AltoBeam (China) Inc.
+88287D     (base 16)		AltoBeam (China) Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+D0-DA-D7   (hex)		Apple, Inc.
+D0DAD7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-D4-96   (hex)		Shenzhen Excelsecu Data Technology Co.,Ltd
+C4D496     (base 16)		Shenzhen Excelsecu Data Technology Co.,Ltd
+				Unit 701-708,7/F,South Block,SDGI Building A,No.2,Kefeng Road,YueHai Street , Nanshan District,Shenzhen, China.
+				Shenzhen    518057
+				CN
+
+00-26-7F   (hex)		Oregan Networks Ltd.
+00267F     (base 16)		Oregan Networks Ltd.
+				Diskettgatan 11B
+				Linköping    58335
+				SE
+
+44-8C-AB   (hex)		Beijing Flitlink Vientiane Technology Co., LTD
+448CAB     (base 16)		Beijing Flitlink Vientiane Technology Co., LTD
+				Building 23, No. 18, Anning Zhuang East Road, Qinghe, Haidian District, Beijing
+				Beijing    100083
+				CN
+
+14-21-03   (hex)		Calix Inc.
+142103     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+34-25-B4   (hex)		Silicon Laboratories
+3425B4     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+28-80-8A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+28808A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-66-79   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+346679     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-B1-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+40B15C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-03-B1   (hex)		ICU Medical, Inc.
+0003B1     (base 16)		ICU Medical, Inc.
+				951 Calle Amanecer
+				San Clemente  CA  92673
+				US
+
+68-26-24   (hex)		Ergatta
+682624     (base 16)		Ergatta
+				40 W 25th St Fl 9
+				New York  NY  10010
+				US
+
+70-4D-E7   (hex)		TECNO MOBILE LIMITED
+704DE7     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+74-D8-73   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+74D873     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+				No.168, Middle Road Of East Gate
+				Xiaobian Community  Chang'an Town  523851
+				CN
+
+4C-24-CE   (hex)		Sichuan AI-Link Technology Co., Ltd.
+4C24CE     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+1C-97-FB   (hex)		CoolBitX Ltd.
+1C97FB     (base 16)		CoolBitX Ltd.
+				Suite 102, Cannon Place, P.O. Box 712, N. Sound Rd
+				George Town  Grand Cayman  KY1-9006
+				KY
+
+A0-21-8B   (hex)		ACE Antenna Co., ltd
+A0218B     (base 16)		ACE Antenna Co., ltd
+				Dong Van II Industrial Zone, Bach Thuong Ward, Duy Tien Town
+				Hanam    400000
+				VN
+
+6C-97-AA   (hex)		AI TECHNOLOGY CO.,LTD.
+6C97AA     (base 16)		AI TECHNOLOGY CO.,LTD.
+				2-4-5,AZABUDAI,MINATO-KU
+				Tokyo    106-0041
+				JP
+
+6C-65-67   (hex)		BELIMO Automation AG
+6C6567     (base 16)		BELIMO Automation AG
+				brunnenbachstrasse 1
+				Hinwil  Zurich  8340
+				CH
+
+20-84-F5   (hex)		Yufei Innovation Software(Shenzhen) Co., Ltd.
+2084F5     (base 16)		Yufei Innovation Software(Shenzhen) Co., Ltd.
+				115, Building 15, Maker Town, No.4109, Liuxian Avenue, Pingshan Community, Taoyuan Street, Nanshan District, Shenzhen
+				Shenzhen    518051
+				CN
+
+30-DE-4B   (hex)		TP-Link Corporation Limited
+30DE4B     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+EC-96-BF   (hex)		eSystems MTG GmbH
+EC96BF     (base 16)		eSystems MTG GmbH
+				Bahnhofstraße 100
+				Wendlingen    73240
+				DE
+
+A4-9D-DD   (hex)		Samsung Electronics Co.,Ltd
+A49DDD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+6C-55-63   (hex)		Samsung Electronics Co.,Ltd
+6C5563     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-1B-F8   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+3C1BF8     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+D4-92-B9   (hex)		ORION NOVA, S.L.
+D492B9     (base 16)		ORION NOVA, S.L.
+				CALLE LARRAMENDI 12C 6A
+				TOLOSA  PAIS VASCO  20400
+				ES
+
+14-AC-60   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+14AC60     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+1C-22-85   (hex)		Serrature Meroni SpA
+1C2285     (base 16)		Serrature Meroni SpA
+				Via Valsorda
+				INVERIGO  CO  22044
+				IT
+
+58-F3-87   (hex)		Airios
+58F387     (base 16)		Airios
+				Peter Zuidlaan 10
+				Veldhoven    5502 NH
+				NL
+
+68-B8-BB   (hex)		Beijing Xiaomi Electronics Co.,Ltd
+68B8BB     (base 16)		Beijing Xiaomi Electronics Co.,Ltd
+				Xiaomi Campus
+				Beijing  Beijing  100085
+				CN
+
+50-FD-D5   (hex)		SJI Industry Company
+50FDD5     (base 16)		SJI Industry Company
+				54-33, Dongtanhana 1-gil
+				Hwaseong-si  Gyeonggi-do  18423
+				KR
+
+80-DB-17   (hex)		Juniper Networks
+80DB17     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+68-AA-C4   (hex)		Altice Labs S.A.
+68AAC4     (base 16)		Altice Labs S.A.
+				NIF 504705610, Rua Eng. José Ferreira Pinto Basto
+				Aveiro    3810-106
+				PT
+
+D4-20-00   (hex)		IEEE Registration Authority
+D42000     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-FD-7B   (hex)		BLU Products Inc
+80FD7B     (base 16)		BLU Products Inc
+				10814 NW 33rd Street
+				Miami  FL  33172
+				US
+
+58-93-51   (hex)		Huawei Device Co., Ltd.
+589351     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-DB-D1   (hex)		Technicolor CH USA Inc.
+E0DBD1     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+EC-A8-1F   (hex)		Technicolor CH USA Inc.
+ECA81F     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+2C-A7-EF   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+2CA7EF     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+48-4B-D4   (hex)		Technicolor CH USA Inc.
+484BD4     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+D4-E9-8A   (hex)		Intel Corporate
+D4E98A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+8C-FA-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8CFADD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-9A-25   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F89A25     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-71-0C   (hex)		Xiaomi Communications Co Ltd
+F8710C     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+3C-13-5A   (hex)		Xiaomi Communications Co Ltd
+3C135A     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+6C-5C-B1   (hex)		Silicon Laboratories
+6C5CB1     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+C0-84-E0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C084E0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-01-17   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+900117     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-BD-7A   (hex)		Aruba, a Hewlett Packard Enterprise Company
+38BD7A     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+D0-F4-F7   (hex)		Huawei Device Co., Ltd.
+D0F4F7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+38-9E-80   (hex)		zte corporation
+389E80     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+08-3A-8D   (hex)		Espressif Inc.
+083A8D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+FC-E9-D8   (hex)		Amazon Technologies Inc.
+FCE9D8     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+C4-98-94   (hex)		IEEE Registration Authority
+C49894     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B8-B2-F7   (hex)		DRIMAES INC.
+B8B2F7     (base 16)		DRIMAES INC.
+				#301, 19, Seongsuil-ro, Seongdong-gu
+				SEOUL    04779
+				KR
+
+64-29-43   (hex)		D-Link Corporation
+642943     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd Rd., Neihu District, 
+				Taipei City     114
+				TW
+
+38-65-04   (hex)		Honor Device Co., Ltd.
+386504     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+58-5B-69   (hex)		TVT CO., LTD
+585B69     (base 16)		TVT CO., LTD
+				23rd Floor Building B4 Block 9, Shenzhen Bay science and technology ecological garden, Nanshan District,
+				 Shenzhen  Guangdong  518057
+				CN
+
+A8-F1-B2   (hex)		Allwinner Technology Co., Ltd
+A8F1B2     (base 16)		Allwinner Technology Co., Ltd
+				No.9 Technology Road 2, High-Tech Zone
+				Zhuhai  Guangdong  519085
+				CN
+
+90-F8-2E   (hex)		Amazon Technologies Inc.
+90F82E     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+94-98-69   (hex)		zte corporation
+949869     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+F8-56-C3   (hex)		zte corporation
+F856C3     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+54-1F-8D   (hex)		zte corporation
+541F8D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+2C-F1-BB   (hex)		zte corporation
+2CF1BB     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+D8-4A-2B   (hex)		zte corporation
+D84A2B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+D0-F9-9B   (hex)		zte corporation
+D0F99B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+74-6F-88   (hex)		zte corporation
+746F88     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+20-08-89   (hex)		zte corporation
+200889     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+98-66-10   (hex)		zte corporation
+986610     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+28-77-77   (hex)		zte corporation
+287777     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+30-B9-30   (hex)		zte corporation
+30B930     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+70-C9-32   (hex)		Dreame Technology (Suzhou) Limited
+70C932     (base 16)		Dreame Technology (Suzhou) Limited
+				Shangjiwan Headquarter, Building E3 Economic Garden, 2288 Wuzhong Blvd
+				Suzhou  Jiangsu  215000
+				CN
+
+F8-34-5A   (hex)		Hitron Technologies. Inc
+F8345A     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+E0-B6-68   (hex)		zte corporation
+E0B668     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+C4-EB-42   (hex)		Sagemcom Broadband SAS
+C4EB42     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+F8-C2-49   (hex)		AMPERE COMPUTING LLC
+F8C249     (base 16)		AMPERE COMPUTING LLC
+				4555 GREAT AMERICA PARKWAY
+				SANTA CLARA  CA  95054
+				US
+
+A0-17-F1   (hex)		Allwinner Technology Co., Ltd
+A017F1     (base 16)		Allwinner Technology Co., Ltd
+				No.9 Technology Road 2, High-Tech Zone
+				Zhuhai  Guangdong  519085
+				CN
+
+2C-6F-4E   (hex)		Hubei Yuan Times Technology Co.,Ltd.
+2C6F4E     (base 16)		Hubei Yuan Times Technology Co.,Ltd.
+				No. B1345, Chuanggu Start-up Area, Taizi Lake Cultural and Digital Creative Industry Park, No. 18 Shenlong Avenue, Wuhan Economic & Technological Development Zone
+				wuhan  hubei  430050 
+				CN
+
+64-8C-BB   (hex)		Texas Instruments
+648CBB     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+74-B8-39   (hex)		Texas Instruments
+74B839     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+C4-D3-6A   (hex)		Texas Instruments
+C4D36A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+98-89-24   (hex)		Texas Instruments
+988924     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B0-8B-BE   (hex)		ABL GmbH
+B08BBE     (base 16)		ABL GmbH
+				Albert-Buettner-Str. 11
+				Lauf    91207
+				DE
+
+48-8F-4C   (hex)		shenzhen trolink  Technology Co.,Ltd
+488F4C     (base 16)		shenzhen trolink  Technology Co.,Ltd
+				F/5 Building -E ,Fenda Hight Technology Park,Sanwei Hangcheng Street,Bao'an ,Shenzhen 
+				shenzhen  gangdong  518101
+				CN
+
+74-4D-6D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+744D6D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-15-93   (hex)		Ruckus Wireless
+341593     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+10-9F-4F   (hex)		New H3C Intelligence Terminal Co., Ltd.
+109F4F     (base 16)		New H3C Intelligence Terminal Co., Ltd.
+				Room 406-100, 1 Yichuang Street, China-Singapore Guangzhou Knowledge City, Huangpu District, Guangzhou.
+				Guangzhou   Guangdong  510030
+				CN
+
+A0-ED-6D   (hex)		Ubee Interactive Co., Limited
+A0ED6D     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+				North Point    00000
+				HK
+
+AC-C9-06   (hex)		Apple, Inc.
+ACC906     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-BC-6D   (hex)		Apple, Inc.
+04BC6D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-0C-EE   (hex)		Robert Bosch Elektronikai Kft.
+440CEE     (base 16)		Robert Bosch Elektronikai Kft.
+				Robert Bosch u. 1.
+				Hatvan  Heves County  3000
+				HU
+
+30-19-84   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+301984     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-DE-CC   (hex)		HYBE Co.,LTD
+80DECC     (base 16)		HYBE Co.,LTD
+				42, Hangang-daero
+				Yongsan-gu  Seoul  04389
+				KR
+
+C4-35-D9   (hex)		Apple, Inc.
+C435D9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-D5-06   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+44D506     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+2C-69-CC   (hex)		Valeo Detection Systems 
+2C69CC     (base 16)		Valeo Detection Systems 
+				Laiernstrasse 12
+				Bietigheim-Bissingen  baden württemberg  74321
+				DE
+
+5C-C7-C1   (hex)		Silicon Laboratories
+5CC7C1     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+D0-CF-0E   (hex)		Sagemcom Broadband SAS
+D0CF0E     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+9C-DB-07   (hex)		Yellowtec GmbH
+9CDB07     (base 16)		Yellowtec GmbH
+				Heinrich-Hertz-Strasse 1-3
+				Monheim am Rhein  NRW  40789
+				DE
+
+D4-61-37   (hex)		IEEE Registration Authority
+D46137     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+10-5F-02   (hex)		Private
+105F02     (base 16)		Private
+
+08-08-5C   (hex)		Luna Products
+08085C     (base 16)		Luna Products
+				3145 Tiger Run Ct, Ste 110
+				Carlsbad  CA  92010
+				US
+
+B4-57-E6   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B457E6     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+BC-BD-84   (hex)		zte corporation
+BCBD84     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+2C-8A-C7   (hex)		Ubee Interactive Co., Limited
+2C8AC7     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+				North Point    00000
+				HK
+
+B8-F0-15   (hex)		Juniper Networks
+B8F015     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+28-E2-97   (hex)		Shanghai InfoTM Microelectronics Co.,Ltd
+28E297     (base 16)		Shanghai InfoTM Microelectronics Co.,Ltd
+				building 11,NO.115,lane 572,BiBo Road,
+				ShangHai    201203
+				CN
+
+58-F8-5C   (hex)		LLC Proizvodstvennaya Kompania TransService
+58F85C     (base 16)		LLC Proizvodstvennaya Kompania TransService
+				Ulitsa Podolskih Kursantov,  build. 3, of. 133
+				Moscow  Moscow  117545
+				RU
+
+1C-8B-EF   (hex)		Beijing Xiaomi Electronics Co.,Ltd
+1C8BEF     (base 16)		Beijing Xiaomi Electronics Co.,Ltd
+				Xiaomi Campus
+				Beijing  Beijing  100085
+				CN
+
+50-D4-5C   (hex)		Amazon Technologies Inc.
+50D45C     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+70-03-3F   (hex)		Pimax Technology(ShangHai)Co.,Ltd
+70033F     (base 16)		Pimax Technology(ShangHai)Co.,Ltd
+				3000 Longdong Avenue,Pudong New Area
+				Shanghai    200120
+				CN
+
+80-F1-A4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+80F1A4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-6C-24   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A46C24     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-07-1C   (hex)		Green Energy Options Ltd
+78071C     (base 16)		Green Energy Options Ltd
+				3 St. Mary's Court, Main Street
+				Cambridge  Cambridgeshire  CB23 7QS
+				GB
+
+EC-C3-B0   (hex)		zte corporation
+ECC3B0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+08-7B-12   (hex)		Sagemcom Broadband SAS
+087B12     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E4-DB-AE   (hex)		Extreme Networks, Inc.
+E4DBAE     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+30-44-49   (hex)		PLATH Signal Products GmbH & Co. KG
+304449     (base 16)		PLATH Signal Products GmbH & Co. KG
+				Gotenstrasse 18
+				  Hamburg  20097
+				DE
+
+5C-B1-2E   (hex)		Cisco Systems, Inc
+5CB12E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-6B-FF   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+BC6BFF     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+3C-6A-48   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+3C6A48     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+FC-2A-46   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+FC2A46     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+40-B6-07   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+40B607     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+F4-4D-5C   (hex)		Zyxel Communications Corporation
+F44D5C     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+80-61-6C   (hex)		New H3C Technologies Co., Ltd
+80616C     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+E4-23-3C   (hex)		Juniper Networks
+E4233C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+9C-FA-3C   (hex)		Daeyoung Electronics
+9CFA3C     (base 16)		Daeyoung Electronics
+				Pyeongdongsandan 8beon-ro 54-5
+				Gwangju    62466
+				KR
+
+FC-B0-DE   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+FCB0DE     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+1C-C3-16   (hex)		Xiamen Milesight IoT Co., Ltd.
+1CC316     (base 16)		Xiamen Milesight IoT Co., Ltd.
+				Building C09, Software Park Phase III 
+				Xiamen  Fujian  361024
+				CN
+
+64-C6-D2   (hex)		Seiko Epson Corporation
+64C6D2     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+78-24-59   (hex)		Alcatel-Lucent Enterprise
+782459     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Rd
+				Calabasas  CA  91301
+				US
+
+28-CF-51   (hex)		Nintendo Co.,Ltd
+28CF51     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+0C-35-26   (hex)		Microsoft Corporation
+0C3526     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+00-24-BF   (hex)		Carrier Culoz SA
+0024BF     (base 16)		Carrier Culoz SA
+				30, Avenue Jean Falconnier
+				Culoz    01350
+				FR
+
+B8-3C-28   (hex)		Apple, Inc.
+B83C28     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-6D-89   (hex)		Apple, Inc.
+3C6D89     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-45-00   (hex)		Apple, Inc.
+AC4500     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-B1-E4   (hex)		Apple, Inc.
+84B1E4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-EB-E9   (hex)		Apple, Inc.
+54EBE9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-16-15   (hex)		Apple, Inc.
+AC1615     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-BD-CE   (hex)		Technicolor CH USA Inc.
+48BDCE     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+48-1F-66   (hex)		China Mobile Group Device Co.,Ltd.
+481F66     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+10-68-38   (hex)		AzureWave Technology Inc.
+106838     (base 16)		AzureWave Technology Inc.
+				8F., No.94, Baozhong Rd., Xindian
+				Taipei    231
+				US
+
+74-86-69   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+748669     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+C8-0A-35   (hex)		Qingdao Hisense Smart Life Technology Co., Ltd
+C80A35     (base 16)		Qingdao Hisense Smart Life Technology Co., Ltd
+				No.399, Songling Road, Laoshan District
+				Qingdao  Shandong  266100
+				CN
+
+14-1A-AA   (hex)		Metal Work SpA
+141AAA     (base 16)		Metal Work SpA
+				Via Segni 5-7-9 25062 Concesio
+				Brescia  Italy  25062
+				IT
+
+CC-DE-DE   (hex)		Nokia
+CCDEDE     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+EC-F8-D0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ECF8D0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-DF-17   (hex)		ALPSALPINE CO,.LTD
+30DF17     (base 16)		ALPSALPINE CO,.LTD
+				nishida 6-1
+				kakuda-City  Miyagi-Pref  981-1595
+				JP
+
+D8-02-8A   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+D8028A     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+88-CE-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88CE3F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-B6-47   (hex)		Silicon Laboratories
+60B647     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+EC-73-79   (hex)		Apple, Inc.
+EC7379     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-70-56   (hex)		Arcadyan Corporation
+047056     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+40-FF-40   (hex)		GloquadTech
+40FF40     (base 16)		GloquadTech
+				801, Tower-A, 58-1, Giheung-ro, Giheung-gu, Yongin-si, Gyeonggi-do, 16976, Republic of Korea
+				Yongin-si  Gyeonggi-do  16976
+				KR
+
+E8-65-38   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+E86538     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+D4-04-E6   (hex)		Broadcom Limited
+D404E6     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+DC-E3-05   (hex)		AO 
+DCE305     (base 16)		AO 
+				Prospekt Mira
+				Moscow    129223
+				RU
+
+B8-94-D9   (hex)		Texas Instruments
+B894D9     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+7C-E2-69   (hex)		Texas Instruments
+7CE269     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+88-6D-2D   (hex)		Huawei Device Co., Ltd.
+886D2D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+08-04-B4   (hex)		Texas Instruments
+0804B4     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+30-AF-7E   (hex)		Texas Instruments
+30AF7E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+24-2A-04   (hex)		Cisco Systems, Inc
+242A04     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-95-2F   (hex)		Google, Inc.
+24952F     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+10-BE-99   (hex)		Netberg
+10BE99     (base 16)		Netberg
+				2F-1 No.36, Park St., Nangang District
+				Taipei    11560
+				TW
+
+60-DE-F4   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+60DEF4     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+84-D3-52   (hex)		Tonly Technology Co. Ltd 
+84D352     (base 16)		Tonly Technology Co. Ltd 
+				Section 37, Zhongkai Hi-Tech Development Zone
+				Huizhou  Guangdong  516006
+				CN
+
+E4-21-50   (hex)		Shanghai Chint low voltage electrical technology Co.,Ltd.
+E42150     (base 16)		Shanghai Chint low voltage electrical technology Co.,Ltd.
+				3857 Sixian Road, Songjiang District, Shanghai
+				Shanghai  Shanghai  201616
+				CN
+
+F8-D7-58   (hex)		Veratron AG
+F8D758     (base 16)		Veratron AG
+				Industriestrasse 18
+				Rüthi  St.Gallen  9464
+				CH
+
+24-FE-9A   (hex)		CyberTAN Technology Inc.
+24FE9A     (base 16)		CyberTAN Technology Inc.
+				99 Park Ave III, Hsinchu Science Park
+				Hsinchu    308
+				TW
+
+B4-CB-B8   (hex)		Universal Electronics, Inc.
+B4CBB8     (base 16)		Universal Electronics, Inc.
+				201 E Sandpointe Ave
+				SANTA ANA  CA  927075778
+				US
+
+BC-32-B2   (hex)		Samsung Electronics Co.,Ltd
+BC32B2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-D2-66   (hex)		ScaleFlux
+80D266     (base 16)		ScaleFlux
+				900 N. McCarthy Blvd.Suite 200
+				Milpitas  CA  95035
+				US
+
+28-EB-A6   (hex)		Nex-T LLC
+28EBA6     (base 16)		Nex-T LLC
+				Volgogradsky prospect, 42, building 5, floor 1, room I
+				Moscow  Select State  109316
+				RU
+
+E8-10-98   (hex)		Aruba, a Hewlett Packard Enterprise Company
+E81098     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+CC-4D-74   (hex)		Fujian Newland Payment Technology Co., Ltd.
+CC4D74     (base 16)		Fujian Newland Payment Technology Co., Ltd.
+				No. B602, Building #1, HaixiaJingmao Plaza, Fuzhou Bonded Area
+				Fuzhou    350015
+				CN
+
+A0-31-EB   (hex)		Semikron Elektronik GmbH & Co. KG
+A031EB     (base 16)		Semikron Elektronik GmbH & Co. KG
+				Sigmundstrasse 200
+				Nürnberg  Bavaria  90431
+				DE
+
+EC-8A-48   (hex)		Arista Networks
+EC8A48     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+98-86-8B   (hex)		Juniper Networks
+98868B     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+8C-5D-B2   (hex)		IEEE Registration Authority
+8C5DB2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C0-B3-C8   (hex)		LLC NTC Rotek
+C0B3C8     (base 16)		LLC NTC Rotek
+				Russian Federation, Moscow, Nizhnyaya Krasnoselskaya st., house 5, building 6, room 03
+				Moscow    107140
+				RU
+
+3C-1E-B5   (hex)		Apple, Inc.
+3C1EB5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-86-A3   (hex)		Apple, Inc.
+AC86A3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-87-2E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+74872E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-45-C4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4045C4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-95-A7   (hex)		Keyence Corporation
+7495A7     (base 16)		Keyence Corporation
+				1-3-14, Higashinakajima, Higashiyodogawa
+				Osaka  Osaka  5338555
+				JP
+
+F4-EE-31   (hex)		Cisco Systems, Inc
+F4EE31     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+14-1A-97   (hex)		Apple, Inc.
+141A97     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-62-5D   (hex)		BITNETWORKS CO.,LTD
+88625D     (base 16)		BITNETWORKS CO.,LTD
+				No.606, 83, Samwon-ro, Deogyang-gu, Goyang-si, Gyeonggi-do,Korea
+				Goyang-si    10550
+				KR
+
+B4-B9-E6   (hex)		eero inc.
+B4B9E6     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+68-59-32   (hex)		Sunitec Enterprise Co.,Ltd
+685932     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+C8-36-A3   (hex)		GERTEC BRASIL LTDA
+C836A3     (base 16)		GERTEC BRASIL LTDA
+				Avenida Jabaquara, 3060, room 601
+				Sao Paulo  São Paulo  04046500
+				BR
+
+30-B2-16   (hex)		Hitachi Energy Germany AG
+30B216     (base 16)		Hitachi Energy Germany AG
+				Havellandstr. 10-14
+				Mannheim    68309
+				DE
+
+CC-9F-7A   (hex)		Chiun Mai Communication System, Inc
+CC9F7A     (base 16)		Chiun Mai Communication System, Inc
+				No.4, Minsheng St., Tucheng District
+				New Taipei City    23678
+				TW
+
+54-14-A7   (hex)		Nanjing Qinheng Microelectronics Co., Ltd.
+5414A7     (base 16)		Nanjing Qinheng Microelectronics Co., Ltd.
+				No.18, Ningshuang Road
+				 Nanjing  Jiangsu  210012
+				CN
+
+A0-A3-B3   (hex)		Espressif Inc.
+A0A3B3     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+34-98-7A   (hex)		Espressif Inc.
+34987A     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+00-58-28   (hex)		Axon Networks Inc.
+005828     (base 16)		Axon Networks Inc.
+				15420 Laguna Canyon rd.
+				Irvine  CA  92618
+				US
+
+38-07-16   (hex)		FREEBOX SAS
+380716     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+5C-6A-EC   (hex)		IEEE Registration Authority
+5C6AEC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+4C-E7-05   (hex)		Siemens Industrial Automation Products Ltd., Chengdu
+4CE705     (base 16)		Siemens Industrial Automation Products Ltd., Chengdu
+				Tianyuan Road No.99, High Tech Zone West
+				Chengdu  Sichuan Province  611731 
+				CN
+
+0C-72-74   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+0C7274     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+48-BD-A7   (hex)		Honor Device Co., Ltd.
+48BDA7     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+EC-21-50   (hex)		vivo Mobile Communication Co., Ltd.
+EC2150     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+A0-AF-12   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A0AF12     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-8B-A9   (hex)		Ubiquiti Inc
+AC8BA9     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+9C-05-D6   (hex)		Ubiquiti Inc
+9C05D6     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+28-70-4E   (hex)		Ubiquiti Inc
+28704E     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+60-96-A4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6096A4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-45-58   (hex)		Ubiquiti Inc
+784558     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+04-A5-26   (hex)		Nokia
+04A526     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+08-15-AE   (hex)		China Mobile Group Device Co.,Ltd.
+0815AE     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+04-B4-FE   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+04B4FE     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+18-F4-6B   (hex)		Telenor Connexion AB
+18F46B     (base 16)		Telenor Connexion AB
+				116 88
+				Stockholm  Sverige  SE-116 88
+				SE
+
+28-EA-0B   (hex)		Microsoft Corporation
+28EA0B     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+C0-DD-8A   (hex)		Meta Platforms Technologies, LLC
+C0DD8A     (base 16)		Meta Platforms Technologies, LLC
+				1601 Willow Rd
+				Menlo Park  CA  94025
+				US
+
+CC-A1-74   (hex)		Meta Platforms Technologies, LLC
+CCA174     (base 16)		Meta Platforms Technologies, LLC
+				1601 Willow Rd
+				Menlo Park  CA  94025
+				US
+
+48-9E-9D   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+489E9D     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.2,Jin-da Road,Huinan Industrial Park
+				Hui Zhou  Guangdong  516025
+				CN
+
+D8-0A-E6   (hex)		zte corporation
+D80AE6     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+9C-65-EE   (hex)		DZS Inc.
+9C65EE     (base 16)		DZS Inc.
+				DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu
+				Seongnam-si  Gyeonggi-do  13493
+				KR
+
+9C-54-16   (hex)		Cisco Systems, Inc
+9C5416     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-BA-36   (hex)		u-blox AG
+20BA36     (base 16)		u-blox AG
+				Zuercherstrasse, 68
+				Thalwil  Switzerland  CH-8800
+				CH
+
+A4-6D-D4   (hex)		Silicon Laboratories
+A46DD4     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+8C-C5-8C   (hex)		ShenZhen Elsky Technology Co.,LTD
+8CC58C     (base 16)		ShenZhen Elsky Technology Co.,LTD
+				401, building A, wanguocheng, No. 9, Pingji Avenue, Shanglilang community, Nanwan street, Longgang District, Shenzhen
+				ShenZhen  GuangDong  518000
+				CN
+
+00-56-6D   (hex)		Huawei Device Co., Ltd.
+00566D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+90-CC-7A   (hex)		Huawei Device Co., Ltd.
+90CC7A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-52-34   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+645234     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+E0-1F-6A   (hex)		Huawei Device Co., Ltd.
+E01F6A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-70-4F   (hex)		zte corporation
+2C704F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+38-16-72   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+381672     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+D0-7B-6F   (hex)		Zhuhai Yunmai Technology Co.,Ltd
+D07B6F     (base 16)		Zhuhai Yunmai Technology Co.,Ltd
+				Unit 1201-1203, Youte Headquarters Building, No. 88 Xingye Road, Xiangzhou District
+				Zhuhai  Guangdong  519000
+				CN
+
+08-CC-81   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+08CC81     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road 
+				Hangzhou  Zhejiang  310052
+				CN
+
+6C-29-D2   (hex)		Cisco Systems, Inc
+6C29D2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+48-CA-C6   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+48CAC6     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+D4-38-44   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+D43844     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+2C-FE-4F   (hex)		Xiaomi Communications Co Ltd
+2CFE4F     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+90-7E-43   (hex)		zte corporation
+907E43     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+D4-53-47   (hex)		Merytronic 2012, S.L.
+D45347     (base 16)		Merytronic 2012, S.L.
+				Parque empresarial BoroaParcela 2C-1
+				Amorebieta  Bizkaia  48340
+				ES
+
+94-3E-E4   (hex)		WiSA Technologies Inc
+943EE4     (base 16)		WiSA Technologies Inc
+				15268 Northwest Greenbrier Parkway
+				Beaverton  OR  97006
+				US
+
+A8-BD-3A   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+A8BD3A     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				18F, HUAYANG TOWER,YANDAYI ROAD
+				Huizhou  Guangdong  516007
+				CN
+
+54-EF-43   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54EF43     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-1B-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D81BB5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-64-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8464DD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-A4-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68A46A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-3C-8C   (hex)		Dell Inc.
+6C3C8C     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+C4-5A-B1   (hex)		Dell Inc.
+C45AB1     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+A8-B0-28   (hex)		CubePilot Pty Ltd
+A8B028     (base 16)		CubePilot Pty Ltd
+				153 Mercer Street
+				Geelong  Victoria  3220
+				AU
+
+40-7F-5F   (hex)		Juniper Networks
+407F5F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+20-97-27   (hex)		TELTONIKA NETWORKS UAB
+209727     (base 16)		TELTONIKA NETWORKS UAB
+				K. Baršausko st. 66, Kaunas
+				Kaunas    LT-51436
+				LT
+
+54-08-3B   (hex)		IEEE Registration Authority
+54083B     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-1A-E8   (hex)		Unify Software and Solutions GmbH & Co. KG
+001AE8     (base 16)		Unify Software and Solutions GmbH & Co. KG
+				Otto-Hahn-Ring 6
+				Munich    81739
+				DE
+
+E8-6E-3A   (hex)		Sony Interactive Entertainment Inc.
+E86E3A     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+BC-B1-D3   (hex)		Cisco Meraki
+BCB1D3     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+60-82-46   (hex)		Apple, Inc.
+608246     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-B3-79   (hex)		Apple, Inc.
+98B379     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-9D-05   (hex)		Apple, Inc.
+049D05     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-73-E7   (hex)		HP Inc.
+E073E7     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+34-AA-31   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+34AA31     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+A0-4C-0C   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+A04C0C     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+C8-98-28   (hex)		zte corporation
+C89828     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+DC-36-42   (hex)		zte corporation
+DC3642     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+C8-13-8B   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+C8138B     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+6C-C2-42   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+6CC242     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+78-8A-86   (hex)		China Dragon Technology Limited
+788A86     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+20-E4-6F   (hex)		vivo Mobile Communication Co., Ltd.
+20E46F     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+60-DC-81   (hex)		AltoBeam Inc.
+60DC81     (base 16)		AltoBeam Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+84-72-93   (hex)		Texas Instruments
+847293     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F8-2E-0C   (hex)		Texas Instruments
+F82E0C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+90-06-F2   (hex)		Texas Instruments
+9006F2     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+84-F1-75   (hex)		Jiangxi Xunte Intelligent Terminal Co., Ltd
+84F175     (base 16)		Jiangxi Xunte Intelligent Terminal Co., Ltd
+				16 # 1-3/F, Zhongxing Nanchang Software Industrial Park, No. 688, Aixihu North Road, Nanchang High-tech Industrial Development Zone, Nanchang, Jiangxi Province
+				Nanchang  Jiangxi  330000
+				CN
+
+84-80-94   (hex)		Meter, Inc.
+848094     (base 16)		Meter, Inc.
+				148 Townsend St
+				San Francisco  CA  94107
+				US
+
+10-B3-D5   (hex)		Cisco Systems, Inc
+10B3D5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+30-A2-C2   (hex)		Huawei Device Co., Ltd.
+30A2C2     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-DF-D6   (hex)		zte corporation
+DCDFD6     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+AC-A8-8E   (hex)		SHARP Corporation
+ACA88E     (base 16)		SHARP Corporation
+				1 Takumi-cho, Sakai-ku
+				Sakai City  Osaka  590-8522
+				JP
+
+98-41-5C   (hex)		Nintendo Co.,Ltd
+98415C     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+70-54-25   (hex)		ARRIS Group, Inc.
+705425     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+5C-0B-CA   (hex)		Tunstall Nordic AB
+5C0BCA     (base 16)		Tunstall Nordic AB
+				Agnesfridsvagen 113A
+				Malmo    21237
+				SE
+
+28-33-34   (hex)		Huawei Device Co., Ltd.
+283334     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-A1-32   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+50A132     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+				Chudong science and technology park, 111 shaxin road, tangxia town,
+				dongguan city  guangdong province  523710
+				CN
+
+80-78-71   (hex)		ASKEY COMPUTER CORP
+807871     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+4C-B1-CD   (hex)		Ruckus Wireless
+4CB1CD     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+F4-9C-12   (hex)		Structab AB
+F49C12     (base 16)		Structab AB
+				Slotsmöllan 14B
+				HALMSTAD    30231
+				SE
+
+88-51-7A   (hex)		HMD Global Oy
+88517A     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+AC-B3-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ACB3B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-3A-88   (hex)		Universal Global Scientific Industrial Co., Ltd.
+083A88     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
+				Nan-Tou  Taiwan  54261
+				TW
+
+08-31-8B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+08318B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-B6-88   (hex)		PLANTRONICS, INC.
+F4B688     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+4C-7A-48   (hex)		Nippon Seiki (Europe) B.V.
+4C7A48     (base 16)		Nippon Seiki (Europe) B.V.
+				Antareslaan 27
+				Hoofddorp    2132
+				NL
+
+84-D1-5A   (hex)		TCT mobile ltd
+84D15A     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+B8-F6-53   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+B8F653     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+60-AB-14   (hex)		LG Innotek
+60AB14     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+BC-62-D2   (hex)		Genexis International B.V.
+BC62D2     (base 16)		Genexis International B.V.
+				Waldfeuchterbaan 124
+				Maria Hoop  Maria Hoop  6105 BP 
+				NL
+
+6C-9E-7C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+6C9E7C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+44-D5-F2   (hex)		IEEE Registration Authority
+44D5F2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-0C-86   (hex)		Cisco Systems, Inc
+000C86     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F8-3C-BF   (hex)		BOTATO ELECTRONICS SDN BHD
+F83CBF     (base 16)		BOTATO ELECTRONICS SDN BHD
+				c-1-2, JALAN BK5A/2B 47180,BANDAR KINRARA
+				PUCHONG  SELANGOR  47180
+				MY
+
+FC-58-9A   (hex)		Cisco Systems, Inc
+FC589A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F0-86-20   (hex)		Arcadyan Corporation
+F08620     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+DC-CC-8D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+DCCC8D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+F0-5C-77   (hex)		Google, Inc.
+F05C77     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+11-11-11   (hex)		Private
+111111     (base 16)		Private
+
+6C-D7-1F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+6CD71F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+F0-68-65   (hex)		Taicang T&W Electronics
+F06865     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+A4-63-A1   (hex)		Inventus Power Eletronica do Brasil LTDA
+A463A1     (base 16)		Inventus Power Eletronica do Brasil LTDA
+				Av Buriti, 4285 Distrito Industrial
+				Manaus  Amazonas  69075000
+				BR
+
+3C-9D-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C9D56     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-FD-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+70FD45     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-67-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+446747     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-4A-70   (hex)		Wacom Co.,Ltd.
+884A70     (base 16)		Wacom Co.,Ltd.
+				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
+				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
+				JP
+
+F4-B5-BB   (hex)		CERAGON NETWORKS
+F4B5BB     (base 16)		CERAGON NETWORKS
+				24 RAUEL WALLENBERG STREET
+				TEL-AVIV    96719
+				IL
+
+50-7A-C5   (hex)		Apple, Inc.
+507AC5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-6B-E8   (hex)		Apple, Inc.
+4C6BE8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-86-1E   (hex)		Apple, Inc.
+8C861E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-2B-8D   (hex)		Apple, Inc.
+542B8D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1D-29   (hex)		Doro AB
+001D29     (base 16)		Doro AB
+				Magistratsvägen 10
+				Lund    226 43
+				SE
+
+EC-A5-DE   (hex)		ONYX WIFI Inc
+ECA5DE     (base 16)		ONYX WIFI Inc
+				9891 Irvine Center Drive, Suite 200
+				Irvine    92618
+				US
+
+10-33-BF   (hex)		Technicolor CH USA Inc.
+1033BF     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+34-75-63   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+347563     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+14-2E-5E   (hex)		Sercomm Corporation.
+142E5E     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+00-25-CB   (hex)		Reiner SCT
+0025CB     (base 16)		Reiner SCT
+				Reiner Kartengeräte GmbH & Co. KG.
+				Furtwangen    78120
+				DE
+
+44-23-7C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+44237C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+C0-64-E4   (hex)		Cisco Systems, Inc
+C064E4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+30-94-35   (hex)		vivo Mobile Communication Co., Ltd.
+309435     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+D4-4B-B6   (hex)		Zhejiang Tmall Technology Co., Ltd.
+D44BB6     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+38-18-4C   (hex)		Sony Home Entertainment&Sound Products Inc
+38184C     (base 16)		Sony Home Entertainment&Sound Products Inc
+				Sony City Osaki 2-10-1 Osaki Shinagawa-ku
+				Tokyo  Japan  141-8610
+				JP
+
+D8-2F-E6   (hex)		Zhejiang Tmall Technology Co., Ltd.
+D82FE6     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+14-0F-42   (hex)		Nokia
+140F42     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-6D-61   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+006D61     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
+				Guangzhou  Guangdong  510663
+				CN
+
+C4-AC-59   (hex)		Murata Manufacturing Co., Ltd.
+C4AC59     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+FC-A4-7A   (hex)		IEEE Registration Authority
+FCA47A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E4-19-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E419C1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-66-85   (hex)		Sagemcom Broadband SAS
+B86685     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+38-1A-52   (hex)		Seiko Epson Corporation
+381A52     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+00-0A-17   (hex)		NESTAR COMMUNICATIONS, INC
+000A17     (base 16)		NESTAR COMMUNICATIONS, INC
+				No.6,19 Lane Bade Road
+				HSINCHU    300
+				TW
+
+E4-FD-A1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4FDA1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-52-A9   (hex)		Texas Instruments
+B452A9     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+54-EF-44   (hex)		Lumi United Technology Co., Ltd
+54EF44     (base 16)		Lumi United Technology Co., Ltd
+				8th Floor, JinQi Wisdom Valley, No.1 TangLing Road, LinXian Ave, Taoyuan Residential District,Nanshan District
+				ShenZhen  GuangDong  518055
+				CN
+
+40-2B-50   (hex)		ARRIS Group, Inc.
+402B50     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+78-CC-2B   (hex)		SINEWY TECHNOLOGY CO., LTD
+78CC2B     (base 16)		SINEWY TECHNOLOGY CO., LTD
+				2F., No.179, Dongmin Rd.
+				Toufen City, Miaoli County    351
+				TW
+
+D0-C8-57   (hex)		IEEE Registration Authority
+D0C857     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+FC-BC-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FCBCD1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+74-60-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7460FA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+38-EF-E3   (hex)		 INGENICO TERMINALS SAS
+38EFE3     (base 16)		 INGENICO TERMINALS SAS
+				28-32 BOULEVARD DE GRENELLE
+				PARIS    75015
+				FR
+
+50-D4-F7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+50D4F7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1F-47   (hex)		MCS Logic Inc.
+001F47     (base 16)		MCS Logic Inc.
+				6F. Samho Center B Bldg., 275-6
+				Seoul    137-941
+				KR
+
+8C-FD-18   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8CFD18     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+B4-54-59   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+B45459     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+00-09-70   (hex)		Vibration Research Corporation
+000970     (base 16)		Vibration Research Corporation
+				2385 Wilshere Drive
+				Jenison  MI  49428
+				US
+
+14-A2-A0   (hex)		Cisco Systems, Inc
+14A2A0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-AB-89   (hex)		MitraStar Technology Corp.
+E4AB89     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+78-C3-13   (hex)		China Mobile Group Device Co.,Ltd.
+78C313     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+74-34-AE   (hex)		this is engineering Inc.
+7434AE     (base 16)		this is engineering Inc.
+				352, 815 Daewangpangyo-ro, Sujeong-gu
+				Seongnam-si  Gyeonggi-do  13449
+				KR
+
+74-AD-B7   (hex)		China Mobile Group Device Co.,Ltd.
+74ADB7     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street
+				Beijing    100053
+				CN
+
+60-95-CE   (hex)		IEEE Registration Authority
+6095CE     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-E5-C0   (hex)		Samsung Electronics Co.,Ltd
+8CE5C0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-8A-76   (hex)		Samsung Electronics Co.,Ltd
+F08A76     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+EC-AA-25   (hex)		Samsung Electronics Co.,Ltd
+ECAA25     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+68-7D-6B   (hex)		Samsung Electronics Co.,Ltd
+687D6B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+48-51-69   (hex)		Samsung Electronics Co.,Ltd
+485169     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-06-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C40683     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+94-D0-0D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94D00D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+C4-8A-5A   (hex)		JFCONTROL
+C48A5A     (base 16)		JFCONTROL
+				1449-37 Seoburo
+				Suwon  Gyunggi-do  16643
+				KR
+
+B4-9A-95   (hex)		Shenzhen Boomtech Industrial Corporation
+B49A95     (base 16)		Shenzhen Boomtech Industrial Corporation
+				2F, Block E, Bao'an Intelligent Valley, Yingtian Road No.4 Xixiang Sub-District Office, Bao'an District
+				Shenzhen  Guangdong  518102
+				CN
+
+AC-83-E9   (hex)		Beijing Zile Technology Co., Ltd
+AC83E9     (base 16)		Beijing Zile Technology Co., Ltd
+				Tecent WeWork, Huilongguan East Avenue, Changping District
+				Beijing  Beijing  100096
+				CN
+
+D8-CA-06   (hex)		Titan DataCenters France
+D8CA06     (base 16)		Titan DataCenters France
+				E.SpacePark 45 Allee des ormes
+				mougins    06250
+				FR
+
+1C-20-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C20DB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-C6-5B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D0C65B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-78-B2   (hex)		Xiaomi Communications Co Ltd
+9078B2     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+B4-CF-E0   (hex)		Sichuan tianyi kanghe communications co., LTD
+B4CFE0     (base 16)		Sichuan tianyi kanghe communications co., LTD
+				No.198, section 1, xueshan avenue, jinyuan town, dayi county
+				chengdu  sichuan  611330
+				CN
+
+BC-7F-A4   (hex)		Xiaomi Communications Co Ltd
+BC7FA4     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+FC-49-2D   (hex)		Amazon Technologies Inc.
+FC492D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+74-EE-2A   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+74EE2A     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+08-7E-64   (hex)		Technicolor CH USA Inc.
+087E64     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+08-00-39   (hex)		SPIDER SYSTEMS LIMITED
+080039     (base 16)		SPIDER SYSTEMS LIMITED
+				SPIDER PARK
+				    SCOTLAND
+				GB
+
+90-47-3C   (hex)		China Mobile Group Device Co.,Ltd.
+90473C     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+88-9E-33   (hex)		TCT mobile ltd
+889E33     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+6C-8A-EC   (hex)		Nantong Coship Electronics Co., Ltd.
+6C8AEC     (base 16)		Nantong Coship Electronics Co., Ltd.
+				No.188 Xinsheng Road
+				Nantong  Jiangsu  226001
+				CN
+
+84-C2-E4   (hex)		Jiangsu Qinheng Co., Ltd.
+84C2E4     (base 16)		Jiangsu Qinheng Co., Ltd.
+				No. 18, Ningshuang Road
+				Nanjing  Jiangsu  210012
+				CN
+
+7C-21-D8   (hex)		Shenzhen Think Will Communication Technology co., LTD.
+7C21D8     (base 16)		Shenzhen Think Will Communication Technology co., LTD.
+				16F,Block A,Central Plaza,No.2002,Baoyuan Rd.,Baoan District
+				Shenzhen    518101
+				CN
+
+FC-EA-50   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+FCEA50     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-E0-6B   (hex)		W&G SPECIAL PRODUCTS
+00E06B     (base 16)		W&G SPECIAL PRODUCTS
+				SCEINCE PARK EINDHOVIN 5049
+				    
+				NL
+
+04-5C-6C   (hex)		Juniper Networks
+045C6C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+D8-F1-5B   (hex)		Espressif Inc.
+D8F15B     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+D4-F0-57   (hex)		Nintendo Co.,Ltd
+D4F057     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+6C-F1-7E   (hex)		Zhejiang Uniview Technologies Co.,Ltd.
+6CF17E     (base 16)		Zhejiang Uniview Technologies Co.,Ltd.
+				No.88,Jiangling Road
+				Hangzhou  Zhejiang,P.R.China  310051
+				CN
+
+08-3A-2F   (hex)		Guangzhou Juan Intelligent Tech Joint Stock Co.,Ltd
+083A2F     (base 16)		Guangzhou Juan Intelligent Tech Joint Stock Co.,Ltd
+				NO.9, street 3, HengLing industrial zone, Tangdong, tianhe district
+				Guangzhou  Guangdong  CN 510000
+				CN
+
+1C-3A-60   (hex)		Ruckus Wireless
+1C3A60     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+60-09-C3   (hex)		u-blox AG
+6009C3     (base 16)		u-blox AG
+				Zuercherstrasse 68
+				Thalwil    8800
+				CH
+
+48-87-64   (hex)		vivo Mobile Communication Co., Ltd.
+488764     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+5C-1C-B9   (hex)		vivo Mobile Communication Co., Ltd.
+5C1CB9     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+C0-FD-84   (hex)		zte corporation
+C0FD84     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+44-4B-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+444B7E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+DC-8C-37   (hex)		Cisco Systems, Inc
+DC8C37     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E8-D0-FC   (hex)		Liteon Technology Corporation
+E8D0FC     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+E8-E8-B7   (hex)		Murata Manufacturing Co., Ltd.
+E8E8B7     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto   617-8555
+				JP
+
+10-3D-3E   (hex)		China Mobile Group Device Co.,Ltd.
+103D3E     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+64-CC-22   (hex)		Arcadyan Corporation
+64CC22     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+4C-91-57   (hex)		Fujian LANDI Commercial Equipment Co.,Ltd
+4C9157     (base 16)		Fujian LANDI Commercial Equipment Co.,Ltd
+				Building 17,the 1st Section ,Fuzhou Software Park
+				No.89 Software Road   Fuzhou ,Fujian  350003
+				CN
+
+9C-25-BE   (hex)		Wildlife Acoustics, Inc.
+9C25BE     (base 16)		Wildlife Acoustics, Inc.
+				3 Mill and Main Place, Suite 210
+				MAYNARD  MA  01754
+				US
+
+D0-39-EA   (hex)		NetApp
+D039EA     (base 16)		NetApp
+				1395 Crossman Ave
+				Sunnyvale,  CA  94089
+				US
+
+F8-DF-E1   (hex)		MyLight Systems
+F8DFE1     (base 16)		MyLight Systems
+				290 rue Ferdinand Perrier
+				Saint Priest    69800
+				FR
+
+60-D2-DD   (hex)		Shenzhen Baitong Putian Technology Co.,Ltd.
+60D2DD     (base 16)		Shenzhen Baitong Putian Technology Co.,Ltd.
+				501,5/F,Building 1,No.2,Lianwei Street,Hualian Community,Longhua Street Longhua District
+				Shenzhen  Guangdong  518109
+				CN
+
+78-8C-77   (hex)		LEXMARK INTERNATIONAL, INC.
+788C77     (base 16)		LEXMARK INTERNATIONAL, INC.
+				740 NEW CIRCLE ROAD
+				LEXINGTON  KY  40550
+				US
+
+3C-0C-7D   (hex)		Tiny Mesh AS
+3C0C7D     (base 16)		Tiny Mesh AS
+				Elisabeth von Hübschs gate 6
+				MOSS    1534
+				NO
+
+34-76-C5   (hex)		I-O DATA DEVICE,INC.
+3476C5     (base 16)		I-O DATA DEVICE,INC.
+				3-10, SAKURADA-MACHI
+				KANAZAWA  ISHIKAWA  920-8512
+				JP
+
+24-DA-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24DA33     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+FC-AB-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FCAB90     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-93-D8   (hex)		Texas Instruments
+5893D8     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+50-51-A9   (hex)		Texas Instruments
+5051A9     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A4-97-5C   (hex)		VTech Telecommunications Ltd.
+A4975C     (base 16)		VTech Telecommunications Ltd.
+				23/F,Tai Ping Industrial Centre ,Block 1
+				Hong Kong    000000
+				CN
+
+B0-2A-1F   (hex)		 Wingtech Group (HongKong）Limited
+B02A1F     (base 16)		 Wingtech Group (HongKong）Limited
+				 FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
+				Hong Kong  Hong Kong  999077
+				HK
+
+DC-68-0C   (hex)		Hewlett Packard Enterprise
+DC680C     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+F4-02-70   (hex)		Dell Inc.
+F40270     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+1C-27-04   (hex)		zte corporation
+1C2704     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+50-78-B3   (hex)		zte corporation
+5078B3     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F0-D4-F7   (hex)		varram system
+F0D4F7     (base 16)		varram system
+				57, TECHNO 11-RO,YUSEONG-GU, DAEJEON, KOREA 
+				DAEJEON    34036
+				KR
+
+E0-CC-7A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E0CC7A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-23-CB   (hex)		Wattty Corporation
+6C23CB     (base 16)		Wattty Corporation
+				2-15-31 takaokanishi nakaku
+				hamamatsushi  shizuokaken  4338118
+				JP
+
+60-AB-67   (hex)		Xiaomi Communications Co Ltd
+60AB67     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+AC-71-0C   (hex)		China Mobile Group Device Co.,Ltd.
+AC710C     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+A8-DB-03   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+A8DB03     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+30-89-44   (hex)		DEVA Broadcast Ltd.
+308944     (base 16)		DEVA Broadcast Ltd.
+				Alexander Stamboliyski 65
+				Burgas  Burgas  8000
+				BG
+
+F4-79-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F47960     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-52-90   (hex)		KNS Group LLC (YADRO Company)
+145290     (base 16)		KNS Group LLC (YADRO Company)
+				Spartakovskaya sq., 14, bl. 1
+				Moscow    105082
+				RU
+
+5C-32-C5   (hex)		Teracom Ltd.
+5C32C5     (base 16)		Teracom Ltd.
+				11 Vasil Levski blvd.
+				Ruse    7019
+				BG
+
+AC-EE-70   (hex)		Fontem Ventures BV
+ACEE70     (base 16)		Fontem Ventures BV
+				Motion Building 8F, Radarweg 60
+				Amsterdam  Noord-Holland  1043NT
+				NL
+
+AC-E2-D3   (hex)		Hewlett Packard
+ACE2D3     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+00-FD-22   (hex)		Cisco Systems, Inc
+00FD22     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-18-FD   (hex)		Apple, Inc.
+4418FD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-B6-00   (hex)		VOIM Co., Ltd.
+00B600     (base 16)		VOIM Co., Ltd.
+				70, Seotan-ro, Jinwi-myeon
+				Pyeongtaek-si  Gyeonggi-do  17706
+				KR
+
+98-FA-9B   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+98FA9B     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+00-5B-94   (hex)		Apple, Inc.
+005B94     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-89-7E   (hex)		Apple, Inc.
+E0897E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-0C-D1   (hex)		Hewlett Packard
+B00CD1     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+48-46-C1   (hex)		FN-LINK TECHNOLOGY LIMITED
+4846C1     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+B4-D0-A9   (hex)		China Mobile Group Device Co.,Ltd.
+B4D0A9     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+FC-29-F3   (hex)		McPay Co.,LTD.
+FC29F3     (base 16)		McPay Co.,LTD.
+				No.801, 61, Digital-ro 31-gil, Guro-gu
+				Seoul    08375
+				KR
+
+F8-AF-DB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+F8AFDB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+A0-BD-1D   (hex)		Zhejiang Dahua Technology Co., Ltd.
+A0BD1D     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+E4-9F-1E   (hex)		ARRIS Group, Inc.
+E49F1E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-26-15   (hex)		Teracom Limited
+002615     (base 16)		Teracom Limited
+				B-84
+				Noida  Uttar Pradesh  201301
+				IN
+
+9C-8E-DC   (hex)		Teracom Limited
+9C8EDC     (base 16)		Teracom Limited
+				123456
+				Noida  Uttar Pradesh  201301
+				IN
+
+00-01-91   (hex)		SYRED Data Systems
+000191     (base 16)		SYRED Data Systems
+				272 Lanes Mill Road
+				Howell  NJ  07731
+				US
+
+AC-D5-64   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+ACD564     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+94-D0-75   (hex)		CIS Crypto
+94D075     (base 16)		CIS Crypto
+				Nauchnyy proezd 6
+				Moscow    117246
+				RU
+
+28-B4-FB   (hex)		Sprocomm Technologies CO.,LTD.
+28B4FB     (base 16)		Sprocomm Technologies CO.,LTD.
+				5D F1.6 Block,Tianfa Building,Tianan Chegongmiao Industrial park,Futian Dist
+				shenzhen  guangdong  518000
+				CN
+
+40-F9-D5   (hex)		Tecore Networks
+40F9D5     (base 16)		Tecore Networks
+				7030 Hi Tech Drive
+				Hanover  MD  21076
+				US
+
+CC-2C-83   (hex)		DarkMatter L.L.C
+CC2C83     (base 16)		DarkMatter L.L.C
+				Level 15, Aldar HQ
+				Abu Dhabi    27655
+				AE
+
+DC-ED-84   (hex)		Haverford Systems Inc
+DCED84     (base 16)		Haverford Systems Inc
+				152 Robbins Road
+				Downingtown  PA  19335
+				US
+
+7C-57-3C   (hex)		Aruba, a Hewlett Packard Enterprise Company
+7C573C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+2C-01-B5   (hex)		Cisco Systems, Inc
+2C01B5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C0-53-36   (hex)		Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.
+C05336     (base 16)		Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.
+				7 floor, No.1 Automobile Museum South Road, Fengtai Science and Technology Park,
+				Beijing  Beijing  100070
+				CN
+
+60-6E-D0   (hex)		SEAL AG
+606ED0     (base 16)		SEAL AG
+				Landstrasse 176
+				Wettingen    5430
+				CH
+
+2C-CC-E6   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+2CCCE6     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+E4-4C-C7   (hex)		IEEE Registration Authority
+E44CC7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D4-E8-80   (hex)		Cisco Systems, Inc
+D4E880     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A8-34-6A   (hex)		Samsung Electronics Co.,Ltd
+A8346A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-20-F6   (hex)		Samsung Electronics Co.,Ltd
+3C20F6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-38-AD   (hex)		Samsung Electronics Co.,Ltd
+7C38AD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-9C-DD   (hex)		AMPAK Technology,Inc.
+D49CDD     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+50-F7-22   (hex)		Cisco Systems, Inc
+50F722     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+98-49-E1   (hex)		Boeing Defence Australia
+9849E1     (base 16)		Boeing Defence Australia
+				GPO Box 767
+				Brisbane  Queensland  4001
+				AU
+
+04-D7-A5   (hex)		New H3C Technologies Co., Ltd
+04D7A5     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+4C-4D-66   (hex)		Nanjing Jiahao Technology Co., Ltd.
+4C4D66     (base 16)		Nanjing Jiahao Technology Co., Ltd.
+				Moling Industrial Park, Development Zone, Jiangning, Nanjing
+				Nanjing  Jiangsu  211111
+				CN
+
+90-58-51   (hex)		Technicolor CH USA Inc.
+905851     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+98-09-CF   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+9809CF     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+B8-DE-5E   (hex)		LONGCHEER TELECOMMUNICATION LIMITED
+B8DE5E     (base 16)		LONGCHEER TELECOMMUNICATION LIMITED
+				Building 1,No.401,Caobao Rd
+				Shanghai  Xuhui District  200233
+				CN
+
+88-5A-06   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+885A06     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+54-47-D3   (hex)		TSAT AS
+5447D3     (base 16)		TSAT AS
+				Martin Linges v 25
+				Fornebu    1364
+				NO
+
+CC-ED-DC   (hex)		MitraStar Technology Corp.
+CCEDDC     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+68-8B-0F   (hex)		China Mobile IOT Company Limited
+688B0F     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+F8-2F-6A   (hex)		ITEL MOBILE LIMITED
+F82F6A     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+B0-68-E6   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+B068E6     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+A4-E7-E4   (hex)		Connex GmbH
+A4E7E4     (base 16)		Connex GmbH
+				Elbestrasse 12
+				Oldenburg    26135
+				DE
+
+B8-EF-8B   (hex)		SHENZHEN CANNICE TECHNOLOGY CO.,LTD
+B8EF8B     (base 16)		SHENZHEN CANNICE TECHNOLOGY CO.,LTD
+				F-20,7A,Baoneng Technology Park
+				Shenzhen  Guangdong  518109
+				CN
+
+B8-18-6F   (hex)		ORIENTAL MOTOR CO., LTD.
+B8186F     (base 16)		ORIENTAL MOTOR CO., LTD.
+				5-8-3 Tokodai
+				Tsukuba  Ibaraki  300-2635
+				JP
+
+00-1A-3F   (hex)		Intelbras
+001A3F     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+C0-D8-34   (hex)		xvtec ltd
+C0D834     (base 16)		xvtec ltd
+				Ha'nagar 24
+				Hod Hasharon  Israel  4527713
+				IL
+
+B8-C2-53   (hex)		Juniper Networks
+B8C253     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+F0-5C-19   (hex)		Aruba, a Hewlett Packard Enterprise Company
+F05C19     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+04-BD-88   (hex)		Aruba, a Hewlett Packard Enterprise Company
+04BD88     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+9C-1C-12   (hex)		Aruba, a Hewlett Packard Enterprise Company
+9C1C12     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+18-DF-B4   (hex)		BOSUNG POWERTEC CO.,LTD.
+18DFB4     (base 16)		BOSUNG POWERTEC CO.,LTD.
+				70, Daechang-gil, Judeok-eup
+				Chungju-si  Chungcheongbuk-do  27463
+				KR
+
+20-B7-80   (hex)		Toshiba Visual Solutions Corporation Co.,Ltd
+20B780     (base 16)		Toshiba Visual Solutions Corporation Co.,Ltd
+				Shinkawasaki Mitsui Builing West Tower 19F, 1-1-2 Kashimada
+				Saiwai-ku, Kawasaki-shi  Kanagawa  212-0058
+				JP
+
+E0-37-17   (hex)		Technicolor CH USA Inc.
+E03717     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+14-D4-FE   (hex)		ARRIS Group, Inc.
+14D4FE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+EC-A9-FA   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+ECA9FA     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+				#126,BBK Road,Wusha,Chang'An
+				Dong Guan  Guang Dong  523860
+				CN
+
+00-03-A5   (hex)		Medea Corporation
+0003A5     (base 16)		Medea Corporation
+				5701 Lindero Canyon Rd.
+				Wetlake Village  CA  91362
+				US
+
+BC-E6-7C   (hex)		Cambium Networks Limited
+BCE67C     (base 16)		Cambium Networks Limited
+				Unit B2, Linhay Business Park,
+				Ashburton  Devon  TQ13 7UP
+				GB
+
+7C-1E-06   (hex)		New H3C Technologies Co., Ltd
+7C1E06     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+F0-B3-1E   (hex)		Universal Electronics, Inc.
+F0B31E     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+F8-91-73   (hex)		AEDLE SAS
+F89173     (base 16)		AEDLE SAS
+				11 Rue Campagne Première, Cour Intérieure, Entresol, CODE 13B80
+				Paris  IDF  75014
+				FR
+
+C8-4F-86   (hex)		Sophos Ltd
+C84F86     (base 16)		Sophos Ltd
+				The Pentagon
+				Abingdon  Oxfordshire  OX14 3YP
+				GB
+
+64-29-ED   (hex)		AO PKK Milandr
+6429ED     (base 16)		AO PKK Milandr
+				Gergievsky prospekt, 5
+				Zelenograd  Moscow  124498
+				RU
+
+44-3C-88   (hex)		FICOSA MAROC INTERNATIONAL
+443C88     (base 16)		FICOSA MAROC INTERNATIONAL
+				Zone Franche Technopolis Rocade Rabat-Salé 11103 Sala Al Jadida - Salé
+				Salé    11103
+				MA
+
+84-1C-70   (hex)		zte corporation
+841C70     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+54-47-41   (hex)		XCHENG HOLDING
+544741     (base 16)		XCHENG HOLDING
+				ROOM 401F, Building 5, No.3000 LONG DONG Avenue, Pudong New District
+				 Shanghai    201203
+				CN
+
+CC-F7-35   (hex)		Amazon Technologies Inc.
+CCF735     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+C4-F8-39   (hex)		Actia Automotive
+C4F839     (base 16)		Actia Automotive
+				5 rue Jorge Semprun
+				TOULOUSE    31400
+				FR
+
+C8-F7-42   (hex)		HangZhou Gubei Electronics Technology Co.,Ltd
+C8F742     (base 16)		HangZhou Gubei Electronics Technology Co.,Ltd
+				Room 106, No.611 Jianghong Road, Binjiang District, Hangzhou, Zhejiang, China
+				Hangzhou  ZheJiang  310052
+				CN
+
+00-6F-F2   (hex)		MITSUMI ELECTRIC CO.,LTD.
+006FF2     (base 16)		MITSUMI ELECTRIC CO.,LTD.
+				2-11-2, Tsurumaki
+				Tama-shi  Tokyo  206-8567
+				JP
+
+30-DF-8D   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+30DF8D     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+D4-C9-3C   (hex)		Cisco Systems, Inc
+D4C93C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+78-DD-12   (hex)		Arcadyan Corporation
+78DD12     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+2C-5D-34   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+2C5D34     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+9C-14-63   (hex)		Zhejiang Dahua Technology Co., Ltd.
+9C1463     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+64-60-38   (hex)		Hirschmann Automation and Control GmbH
+646038     (base 16)		Hirschmann Automation and Control GmbH
+				Stuttgarter Straße 45-51
+				Neckartenzlingen    D-72654
+				DE
+
+70-18-A7   (hex)		Cisco Systems, Inc
+7018A7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+CC-D3-9D   (hex)		IEEE Registration Authority
+CCD39D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D4-25-CC   (hex)		IEEE Registration Authority
+D425CC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-6D-C4   (hex)		Megapixel VR
+8C6DC4     (base 16)		Megapixel VR
+				340 S. Lemon Ave
+				Walnut  CA  91789
+				US
+
+D4-B7-61   (hex)		Sichuan AI-Link Technology Co., Ltd.
+D4B761     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+7C-03-5E   (hex)		Xiaomi Communications Co Ltd
+7C035E     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+44-FE-3B   (hex)		Arcadyan Corporation
+44FE3B     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+D8-3A-F5   (hex)		Wideband Labs LLC
+D83AF5     (base 16)		Wideband Labs LLC
+				1027 S Main Street, STE 330
+				Joplin  MO  64801
+				US
+
+38-D9-A5   (hex)		Mikotek Information Inc. 
+38D9A5     (base 16)		Mikotek Information Inc. 
+				3F, No. 20, Aly. 18, Ln. 478, Ruiguang Rd.
+				Taipei    114
+				TW
+
+4C-87-5D   (hex)		Bose Corporation
+4C875D     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+B0-E7-DE   (hex)		Homa Technologies JSC
+B0E7DE     (base 16)		Homa Technologies JSC
+				Building 5, Quang Trung Software City, District 12
+				Ho Chi Minh    729226
+				VN
+
+64-9D-99   (hex)		FS COM INC
+649D99     (base 16)		FS COM INC
+				380 Centerpoint Blvd New Castle
+				New Castle  DE  19720
+				US
+
+00-16-9D   (hex)		Cisco Systems, Inc
+00169D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+4C-96-2D   (hex)		Fresh AB
+4C962D     (base 16)		Fresh AB
+				Gransholmsvägen 136
+				Gemla    35599
+				SE
+
+00-D2-79   (hex)		VINGROUP JOINT STOCK COMPANY
+00D279     (base 16)		VINGROUP JOINT STOCK COMPANY
+				Number 7, Bang Lang 1 street, Long Bien district
+				Ha Noi  Ha Noi  100000
+				VN
+
+48-4A-30   (hex)		George Robotics Limited
+484A30     (base 16)		George Robotics Limited
+				Salisbury House, Station Road
+				Cambridge    CB1 2LA
+				GB
+
+48-61-A3   (hex)		Concern Axion JSC
+4861A3     (base 16)		Concern Axion JSC
+				90, M. Gorkogo St.
+				Izhevsk  Udmurt Republic  426000
+				RU
+
+30-4A-26   (hex)		Shenzhen Trolink Technology CO, LTD
+304A26     (base 16)		Shenzhen Trolink Technology CO, LTD
+				201 B building 4 shijie, Chashu industry 505 block, Baoan airport Sanwei community, Hangcheng street Baoan area.
+				Shenzhen  GuangDong  518000
+				CN
+
+4C-E5-AE   (hex)		Tianjin Beebox Intelligent Technology Co.,Ltd.
+4CE5AE     (base 16)		Tianjin Beebox Intelligent Technology Co.,Ltd.
+				Room 103，NO.1 of the 2nd Street
+				Tianjin Pilot Free Trade Zone Airport EconomicArea  Airport International Logistics Zone, Tianjin  300300
+				CN
+
+D4-67-D3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+D467D3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+A4-12-32   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A41232     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+48-E3-C3   (hex)		JENOPTIK Advanced Systems GmbH
+48E3C3     (base 16)		JENOPTIK Advanced Systems GmbH
+				Feldstrasse 155
+				Wedel  Schleswig-Holstein  22880
+				DE
+
+CC-35-5A   (hex)		SecuGen Corporation
+CC355A     (base 16)		SecuGen Corporation
+				2065 Martin Ave, Suite 108
+				Santa Clara  CA  95050
+				US
+
+80-54-6A   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+80546A     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+B4-47-F5   (hex)		Earda Technologies co Ltd
+B447F5     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+F4-C7-C8   (hex)		Kelvin Inc.
+F4C7C8     (base 16)		Kelvin Inc.
+				400 Centennial Parkway, Suite 190
+				Louisville  CO  80027
+				US
+
+A8-9C-A4   (hex)		Furrion Limited
+A89CA4     (base 16)		Furrion Limited
+				Units 503C & 505-508, Level 5, Core D, Cyberport 3, 100 Cyberport Road
+				Hong Kong    00000
+				HK
+
+00-00-4C   (hex)		NEC Corporation
+00004C     (base 16)		NEC Corporation
+				7-1 SHIBA  5-CHOME
+				TOKYO 108-01    0000
+				JP
+
+8C-CF-8F   (hex)		ITC Systems
+8CCF8F     (base 16)		ITC Systems
+				800 Fee Fee Road
+				St Louis  MO  63043
+				US
+
+28-75-D8   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+2875D8     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+90-E2-02   (hex)		Texas Instruments
+90E202     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+30-24-78   (hex)		Sagemcom Broadband SAS
+302478     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+7C-89-C1   (hex)		Palo Alto Networks
+7C89C1     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+84-A9-3E   (hex)		Hewlett Packard
+84A93E     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+B0-C3-87   (hex)		GOEFER, Inc.
+B0C387     (base 16)		GOEFER, Inc.
+				118 N. Market St.
+				Frederick  MD  21701
+				US
+
+08-6B-D7   (hex)		Silicon Laboratories
+086BD7     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+34-93-42   (hex)		TTE Corporation
+349342     (base 16)		TTE Corporation
+				7/F, Building 22E 22 Science Park East Avenue Hong Kong Science Park Shatin, N.T.
+				Hong Kong    999077
+				HK
+
+58-9E-C6   (hex)		Gigaset Communications GmbH
+589EC6     (base 16)		Gigaset Communications GmbH
+				Frankenstrasse 2
+				Bocholt  NRW  46395
+				DE
+
+64-C7-53   (hex)		Apple, Inc.
+64C753     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-58-AD   (hex)		China Mobile IOT Company Limited
+6458AD     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+1C-F2-9A   (hex)		Google, Inc.
+1CF29A     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+74-8A-0D   (hex)		ARRIS Group, Inc.
+748A0D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+CC-75-E2   (hex)		ARRIS Group, Inc.
+CC75E2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A0-A3-B8   (hex)		WISCLOUD
+A0A3B8     (base 16)		WISCLOUD
+				Tech Park Xia Sha
+				Hangzhou  Zhejiang  310000
+				CN
+
+38-F9-D3   (hex)		Apple, Inc.
+38F9D3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-18-3C   (hex)		Apple, Inc.
+FC183C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-0C-66   (hex)		Shenzhen Colorful Yugong Technology and Development Co., Ltd.
+A40C66     (base 16)		Shenzhen Colorful Yugong Technology and Development Co., Ltd.
+				13F, Central Business Tower, No.88 Fuhua First Rd., Futian District, Shenzhen, Guangdong, China
+				Shenzhen  Guangdong  518000
+				CN
+
+44-55-B1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4455B1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+98-F9-C7   (hex)		IEEE Registration Authority
+98F9C7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+70-0B-4F   (hex)		Cisco Systems, Inc
+700B4F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-38-8C   (hex)		Digital Products Limited
+E4388C     (base 16)		Digital Products Limited
+				53 Clark Road
+				Rothesay  New Brunswick  E2E 2K9
+				CA
+
+18-4B-DF   (hex)		Caavo Inc
+184BDF     (base 16)		Caavo Inc
+				1525 McCarthy Blvd., #1182
+				Milpitas    95035
+				US
+
+B8-9A-9A   (hex)		Xin Shi Jia Technology (Beijing) Co.,Ltd
+B89A9A     (base 16)		Xin Shi Jia Technology (Beijing) Co.,Ltd
+				Room 1002, A Tower, Zhongguancun E World Wealth Center, No.11, Zhongguancun Street, Haidian District, Beijing City
+				Beijing  Beijing  100190
+				CN
+
+8C-7B-F0   (hex)		Xufeng Development Limited
+8C7BF0     (base 16)		Xufeng Development Limited
+				FLAT/RM1616 16F INTERATIONAL TRADE CENTRE 11-19 SHA TSUI RD TSUEN WAN
+				HongKong  HongKong  999077
+				HK
+
+E0-A5-09   (hex)		Bitmain Technologies Inc
+E0A509     (base 16)		Bitmain Technologies Inc
+				Building 25, North Olympic Science & Technology Park, Baosheng South Road, Haidian District, Beijing, China
+				Beijing  BEIJING  CHINA
+				CN
+
+3C-5C-C4   (hex)		Amazon Technologies Inc.
+3C5CC4     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+D8-A7-56   (hex)		Sagemcom Broadband SAS
+D8A756     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+D8-D6-F3   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+D8D6F3     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+6C-2C-DC   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+6C2CDC     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+78-35-A0   (hex)		Zurn Industries LLC
+7835A0     (base 16)		Zurn Industries LLC
+				1747 Commerce Way
+				Paso Robles  CA  93446
+				US
+
+F4-39-09   (hex)		Hewlett Packard
+F43909     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+20-1F-31   (hex)		Inteno Broadband Technology AB
+201F31     (base 16)		Inteno Broadband Technology AB
+				Stensätravägen 13
+				Skärholmen  SE  127 39 
+				SE
+
+2C-CC-44   (hex)		Sony Interactive Entertainment Inc.
+2CCC44     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+F4-7D-EF   (hex)		Samsung Electronics Co.,Ltd
+F47DEF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-8B-B5   (hex)		Samsung Electronics Co.,Ltd
+7C8BB5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-83-3A   (hex)		Zyxel Communications Corporation
+54833A     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+78-70-52   (hex)		Welotec GmbH
+787052     (base 16)		Welotec GmbH
+				zum Hagenbach 7
+				Laer  NRW  48366
+				DE
+
+D8-A9-8B   (hex)		Texas Instruments
+D8A98B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+00-11-6C   (hex)		Nanwang Multimedia Inc.,Ltd
+00116C     (base 16)		Nanwang Multimedia Inc.,Ltd
+				Floor 12,Tianyuan Bldg,Wensan Rd#508
+				Hangzhou  Zhejiang  310013
+				CN
+
+10-B9-F7   (hex)		Niko-Servodan
+10B9F7     (base 16)		Niko-Servodan
+				Stenager 5
+				Sønderborg    6400
+				DK
+
+14-EF-CF   (hex)		SCHREDER
+14EFCF     (base 16)		SCHREDER
+				Rue Lusambo 67
+				Brussels    1190
+				BE
+
+38-30-F9   (hex)		LG Electronics (Mobile Communications)
+3830F9     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+A8-3F-A1   (hex)		IEEE Registration Authority
+A83FA1     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+6C-9B-C0   (hex)		Chemoptics Inc.
+6C9BC0     (base 16)		Chemoptics Inc.
+				261, Techno 2-ro, Yuseong-gu
+				Daejeon    34026
+				KR
+
+F4-DB-E6   (hex)		Cisco Systems, Inc
+F4DBE6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-84-98   (hex)		Beijing Jiaoda Microunion Tech.Co.,Ltd.
+248498     (base 16)		Beijing Jiaoda Microunion Tech.Co.,Ltd.
+				4-5/F,89 Building, First Section No.44 Gaoliangqiao Xie Street, Haidian District, Beijing, China
+				Beijing  Beijing  100044
+				CN
+
+C0-74-AD   (hex)		Grandstream Networks, Inc.
+C074AD     (base 16)		Grandstream Networks, Inc.
+				1297 Beacon Street
+				Brookline  MA  02446
+				US
+
+F0-95-F1   (hex)		Carl Zeiss AG
+F095F1     (base 16)		Carl Zeiss AG
+				Carl-Zeiss-Straße 22
+				Oberkochen    73447
+				DE
+
+00-F4-8D   (hex)		Liteon Technology Corporation
+00F48D     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+70-2E-D9   (hex)		Guangzhou Shiyuan Electronics Co., Ltd.
+702ED9     (base 16)		Guangzhou Shiyuan Electronics Co., Ltd.
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Gunagzhou  Guangdong  510530
+				CN
+
+70-19-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+70192F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-C2-2F   (hex)		China Entropy Co., Ltd.
+10C22F     (base 16)		China Entropy Co., Ltd.
+				Haidian District
+				Beijing    100085
+				CN
+
+BC-38-65   (hex)		JWCNETWORKS
+BC3865     (base 16)		JWCNETWORKS
+				114, Gasan digital 2-ro, Geumcheon-gu,
+				Seoul    08506
+				KR
+
+04-EB-40   (hex)		Cisco Systems, Inc
+04EB40     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-A7-F1   (hex)		Qingdao Haier Technology Co.,Ltd
+18A7F1     (base 16)		Qingdao Haier Technology Co.,Ltd
+				Building A01,Haier Information Park, No.1 Haier Road,
+				Qingdao  Shandong  266101
+				CN
+
+90-E1-7B   (hex)		Apple, Inc.
+90E17B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-1C-79   (hex)		Apple, Inc.
+D81C79     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-E6-BA   (hex)		Apple, Inc.
+58E6BA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-E4-EE   (hex)		Wistron Neweb Corporation
+44E4EE     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+DC-41-E5   (hex)		Shenzhen Zhixin Data Service Co., Ltd.
+DC41E5     (base 16)		Shenzhen Zhixin Data Service Co., Ltd.
+				 Baoyuan Road F518 Fashion Creative Park F3 Blg208
+				Baoan District, Shenzhen  Guangdong  518101
+				CN
+
+00-A5-BF   (hex)		Cisco Systems, Inc
+00A5BF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-BA-E9   (hex)		QDIS
+C8BAE9     (base 16)		QDIS
+				#512, Buliding B, 168 GaSanDigital 1st, GeumChun-Gu
+				SEOUL    08507
+				KR
+
+18-01-F1   (hex)		Xiaomi Communications Co Ltd
+1801F1     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+C4-4F-33   (hex)		Espressif Inc.
+C44F33     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+54-6A-D8   (hex)		Elster Water Metering
+546AD8     (base 16)		Elster Water Metering
+				Mas des Cavaliers II, 471 Rue Charles Nungesser 
+				Mauguio    34130
+				FR
+
+C0-84-7D   (hex)		AMPAK Technology, Inc.
+C0847D     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+04-09-A5   (hex)		HFR, Inc.
+0409A5     (base 16)		HFR, Inc.
+				5F, Hana EZ Tower
+				Sungnam-si  Kyunggi-do  463-870
+				KR
+
+94-91-7F   (hex)		ASKEY COMPUTER CORP
+94917F     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+9C-0C-DF   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+9C0CDF     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+24-21-24   (hex)		Nokia
+242124     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+94-9B-2C   (hex)		Extreme Networks, Inc.
+949B2C     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose    95119
+				US
+
+7C-D3-0A   (hex)		INVENTEC CORPORATION
+7CD30A     (base 16)		INVENTEC CORPORATION
+				Inventec Building, 66 Hou-Kang Street
+				Taipei    111
+				TW
+
+00-1E-33   (hex)		INVENTEC CORPORATION
+001E33     (base 16)		INVENTEC CORPORATION
+				Inventec Building, 66 Hou-Kang Street
+				Taipei    111
+				TW
+
+FC-1D-84   (hex)		Autobase
+FC1D84     (base 16)		Autobase
+				1201, Biz Center, SKnTechno Park, 124, Sagimakgol-ro, Jungwon-gu, Seongnam-si, Gyeonggi-do
+				Seongnam  Gyeonggi  462-721
+				KR
+
+18-AC-9E   (hex)		ITEL MOBILE LIMITED
+18AC9E     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+00-D0-96   (hex)		3COM EUROPE LTD
+00D096     (base 16)		3COM EUROPE LTD
+				BOUNDARY WAY
+				vvvvv  UNITED  KINGDOM
+				GB
+
+00-26-54   (hex)		3COM
+002654     (base 16)		3COM
+				5353 Betsy Ross Drive
+				Santa Clara    95054-1162
+				US
+
+00-50-DA   (hex)		3COM
+0050DA     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-04-76   (hex)		3COM
+000476     (base 16)		3COM
+				5400 Bayfront Plaza
+				Santa Clara  CA  95052
+				US
+
+00-04-75   (hex)		3COM
+000475     (base 16)		3COM
+				5400 Bayfront Plaza
+				Santa Clara  CA  95052
+				US
+
+44-22-F1   (hex)		S.FAC, INC
+4422F1     (base 16)		S.FAC, INC
+				Bldg A203  Techno2 ro 187
+				Yuseong-Gu  Daejeon  34025
+				KR
+
+30-09-F9   (hex)		IEEE Registration Authority
+3009F9     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B4-DD-D0   (hex)		Continental Automotive Hungary Kft
+B4DDD0     (base 16)		Continental Automotive Hungary Kft
+				Napmátka u. 6.
+				Budapest  Pest  H-1106
+				HU
+
+48-F0-27   (hex)		Chengdu newifi Co.,Ltd
+48F027     (base 16)		Chengdu newifi Co.,Ltd
+				C11 Building 2001,No.219 ,2nd Tianhua Road,Hi-tech zone
+				Chengdu  Sichuan  610000
+				CN
+
+14-C6-97   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+14C697     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+7C-03-AB   (hex)		Xiaomi Communications Co Ltd
+7C03AB     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+DC-16-B2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DC16B2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-FB-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24FB65     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-B5-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0CB527     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-2E-99   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+B42E99     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+34-2C-C4   (hex)		Compal Broadband Networks, Inc.
+342CC4     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+14-E9-B2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+14E9B2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+C8-54-4B   (hex)		Zyxel Communications Corporation
+C8544B     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+D0-7F-A0   (hex)		Samsung Electronics Co.,Ltd
+D07FA0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-90-93   (hex)		EIZO Corporation
+009093     (base 16)		EIZO Corporation
+				153 Shimokashiwano
+				Hakusan  Ishikawa  924-8856
+				JP
+
+4C-11-59   (hex)		Vision Information & Communications
+4C1159     (base 16)		Vision Information & Communications
+				151, Ulseong-gil
+				Pyeongtaek-si  Gyeonggi-do  17823
+				KR
+
+00-04-9F   (hex)		Freescale Semiconductor
+00049F     (base 16)		Freescale Semiconductor
+				2100 East  Elliot
+				Tempe  AZ  85284
+				US
+
+00-D0-7B   (hex)		COMCAM INTERNATIONAL INC
+00D07B     (base 16)		COMCAM INTERNATIONAL INC
+				1140 McDermott Drive Suite 200
+				WEST CHESTER  PA  19380
+				US
+
+E4-FC-82   (hex)		Juniper Networks
+E4FC82     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-B5-D0   (hex)		Samsung Electronics Co.,Ltd
+00B5D0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-96-E5   (hex)		Samsung Electronics Co.,Ltd
+1496E5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-6E-7B   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+C46E7B     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+C0-48-FB   (hex)		Shenzhen JingHanDa Electronics Co.Ltd
+C048FB     (base 16)		Shenzhen JingHanDa Electronics Co.Ltd
+				5th Floor,No 4 ,Road 1,ShangXue Technology industrial Park,LongGang district,ShenZhen,GuangDong,China
+				ShenZhen  GuangDong  518129
+				CN
+
+20-E8-82   (hex)		zte corporation
+20E882     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F0-9F-FC   (hex)		SHARP Corporation
+F09FFC     (base 16)		SHARP Corporation
+				1 Takumi-cho, Sakai-ku
+				Sakai City  Osaka  590-8522
+				JP
+
+0C-B5-DE   (hex)		Alcatel Lucent
+0CB5DE     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+00-0B-3B   (hex)		devolo AG
+000B3B     (base 16)		devolo AG
+				Charlottenburger Allee 67
+				Aachen  NRW  52068
+				DE
+
+24-05-88   (hex)		Google, Inc.
+240588     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+50-DC-FC   (hex)		ECOCOM
+50DCFC     (base 16)		ECOCOM
+				15ST,Block A,Fortune Plaza, No.7002 ShenNan Avenue, Futian District
+				Shenzhen  Guangdong  518040
+				CN
+
+70-0B-01   (hex)		Sagemcom Broadband SAS
+700B01     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+5C-26-23   (hex)		WaveLynx Technologies Corporation
+5C2623     (base 16)		WaveLynx Technologies Corporation
+				100 Technology Drive, Building B, Ste 150
+				Broomfield  CO  80021
+				US
+
+30-38-55   (hex)		Nokia Corporation
+303855     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu  Ou  90590
+				FI
+
+00-B6-70   (hex)		Cisco Systems, Inc
+00B670     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+AC-64-17   (hex)		Siemens AG
+AC6417     (base 16)		Siemens AG
+				Werner-von-Siemens Strasse 50
+				Amberg    92224
+				DE
+
+34-79-16   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+347916     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-66-EA   (hex)		VERTU INTERNATIONAL CORPORATION LIMITED
+3466EA     (base 16)		VERTU INTERNATIONAL CORPORATION LIMITED
+				25 St Thomas Street, Winchester, Hampshire, United Kingdom
+				Winchester  Hampshire  SO23 9HJ
+				GB
+
+28-38-5C   (hex)		FLEXTRONICS
+28385C     (base 16)		FLEXTRONICS
+				Carretera Base Aerea 5850 int 4
+				Zapopan  Jalisco  45136
+				MX
+
+0C-1C-57   (hex)		Texas Instruments
+0C1C57     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+80-6F-B0   (hex)		Texas Instruments
+806FB0     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+88-3F-99   (hex)		Siemens AG
+883F99     (base 16)		Siemens AG
+				Werner-von-Siemens-Str. 48
+				Amberg    92224
+				DE
+
+EC-6F-0B   (hex)		FADU, Inc.
+EC6F0B     (base 16)		FADU, Inc.
+				4th FL, 8, Bongeunsa-ro 68-gil, Gangnam-gu
+				Seoul    06153
+				KR
+
+00-06-EC   (hex)		Harris Corporation
+0006EC     (base 16)		Harris Corporation
+				1025 West NASA Blvd
+				Melbourne  FL  32919
+				US
+
+7C-6D-A6   (hex)		Superwave Group LLC
+7C6DA6     (base 16)		Superwave Group LLC
+				poselok Krasnaya Zarya, dom 15
+				Vsevolozhskiy raiyon  Leningradskaya oblast  193149
+				RU
+
+D0-16-B4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D016B4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-A8-B9   (hex)		SIEMENS AG
+20A8B9     (base 16)		SIEMENS AG
+				Oestliche Rheinbrueckenstrasse 50
+				Karlsruhe  Baden Wuerttemberg  76187
+				DE
+
+F0-F0-8F   (hex)		Nextek Solutions Pte Ltd
+F0F08F     (base 16)		Nextek Solutions Pte Ltd
+				105 Cecil Street, #06-01 The Octagon
+				Singapore  Singapore  069534
+				SG
+
+8C-B0-E9   (hex)		Samsung Electronics.,LTD
+8CB0E9     (base 16)		Samsung Electronics.,LTD
+				129, Samsung-ro, Yeongtong-gu
+				Suwon  Gyeonggi-Do  443-742
+				KR
+
+1C-39-47   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+1C3947     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
+				KUNSHAN  SUZHOU  215300
+				CN
+
+34-27-92   (hex)		FREEBOX SAS
+342792     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+40-A1-08   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+40A108     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+70-5A-B6   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+705AB6     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
+				KUNSHAN  SUZHOU  215300
+				CN
+
+20-1A-06   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+201A06     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
+				KUNSHAN  SUZHOU  215300
+				CN
+
+F8-A9-63   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+F8A963     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
+				KUNSHAN  SUZHOU  215300
+				CN
+
+DC-0E-A1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+DC0EA1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				No.25, Third Avenue, A Zone, Kunshan Comprehensive Free Trade Zone,, Jiangsu, 
+				KUNSHAN   SUZHOU  215300
+				CN
+
+B8-70-F4   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+B870F4     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+00-9D-6B   (hex)		Murata Manufacturing Co., Ltd.
+009D6B     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+74-59-33   (hex)		Danal Entertainment
+745933     (base 16)		Danal Entertainment
+				9th Fl. Bundang First Tower, 55 Bundang-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13591
+				KR
+
+EC-58-EA   (hex)		Ruckus Wireless
+EC58EA     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+7C-9A-54   (hex)		Technicolor CH USA Inc.
+7C9A54     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+38-8B-59   (hex)		Google, Inc.
+388B59     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+88-01-18   (hex)		BLT Co
+880118     (base 16)		BLT Co
+				Dongan-gu Burim-ro 170beon-gil 44
+				Anyangsi  Kyunggido  14055
+				KR
+
+A4-26-18   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+A42618     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+A4-61-91   (hex)		NamJunSa
+A46191     (base 16)		NamJunSa
+				12, Gimhae-daero 2635 beon-gil
+				Gimhae-si  Gyeongsangnam-do  50932
+				KR
+
+84-A2-4D   (hex)		Birds Eye Systems Private Limited
+84A24D     (base 16)		Birds Eye Systems Private Limited
+				123-126, B Wing First Floor, Chintanmani Plaza, Mohan Studio Compound, Andheri-Kurla Road, Andheri East
+				Mumbai  Maharashtra   400099
+				IN
+
+7C-6B-9C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+7C6B9C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+00-17-B6   (hex)		Aquantia Corporation
+0017B6     (base 16)		Aquantia Corporation
+				700 Tasman Drive
+				Milpitas  CA  95035
+				US
+
+10-59-17   (hex)		Tonal
+105917     (base 16)		Tonal
+				1074 Folsom St
+				San Francisco    94103
+				US
+
+D0-EF-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D0EFC1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-52-51   (hex)		IBT Ingenieurbureau Broennimann Thun
+D45251     (base 16)		IBT Ingenieurbureau Broennimann Thun
+				Kasernenstrasse 5
+				Thun  Bern  3600
+				CH
+
+00-18-B5   (hex)		Magna Carta
+0018B5     (base 16)		Magna Carta
+				Naritaweg 126
+				Amsterdam  Noord Holland  1043 CA
+				NL
+
+D8-7E-B1   (hex)		x.o.ware, inc.
+D87EB1     (base 16)		x.o.ware, inc.
+				114 E. Haley St., Ste N
+				Santa Barbara  California  93101
+				US
+
+48-57-02   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+485702     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-4F-42   (hex)		JETTER CO., Ltd.
+644F42     (base 16)		JETTER CO., Ltd.
+				265-40 Emukaecho Tanomoto
+				Sasebo-shi  Nagasaki  859-6134
+				JP
+
+DC-AF-68   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+DCAF68     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+24-EC-51   (hex)		ADF Technologies Sdn Bhd
+24EC51     (base 16)		ADF Technologies Sdn Bhd
+				Plot 88F, Lintang Bayan Lepas 10, Bayan Lepas Industrial Park Phase IV
+				Bayan Lepas  Pulau Pinang  11900
+				MY
+
+70-89-CC   (hex)		China Mobile Group Device Co.,Ltd.
+7089CC     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+2C-5B-E1   (hex)		Centripetal Networks, Inc
+2C5BE1     (base 16)		Centripetal Networks, Inc
+				2251 Corporate Park Drive, Suite 150
+				Herndon  VA  201715806
+				US
+
+DC-EF-CA   (hex)		Murata Manufacturing Co., Ltd.
+DCEFCA     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+00-BC-60   (hex)		Cisco Systems, Inc
+00BC60     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+CC-7B-61   (hex)		NIKKISO CO., LTD.
+CC7B61     (base 16)		NIKKISO CO., LTD.
+				Yebisu Garden Place Tower 22nd Floor, 20-3, Ebisu 4-Chome
+				Shibuya-ku  Tokyo  150-6022
+				JP
+
+9C-71-3A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C713A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-97-B1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C97B1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-99-69   (hex)		Dell Inc.
+A89969     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+A4-EA-8E   (hex)		Extreme Networks, Inc.
+A4EA8E     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+88-2D-53   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd.
+882D53     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd.
+				Baidu Campus, No.10 Shangdi 10th Street, Haidian District Beijing 100085 CN
+				Beijing    100085
+				CN
+
+00-D0-B5   (hex)		IPricot formerly DotCom
+00D0B5     (base 16)		IPricot formerly DotCom
+				10-12, avenue de Verdun
+				La-Garenne-Colombes    F-92250
+				FR
+
+74-6B-AB   (hex)		GUANGDONG ENOK COMMUNICATION CO., LTD
+746BAB     (base 16)		GUANGDONG ENOK COMMUNICATION CO., LTD
+				NO.139 Lixiang road, Songmushan Dalang Town
+				Dongguan, Guangdong    523770
+				CN
+
+78-29-ED   (hex)		ASKEY COMPUTER CORP
+7829ED     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+50-61-BF   (hex)		Cisco Systems, Inc
+5061BF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-03-2F   (hex)		Reduxio Systems
+F4032F     (base 16)		Reduxio Systems
+				2 Granit St
+				Petach Tikvah    4951446
+				IL
+
+94-4A-0C   (hex)		Sercomm Corporation.
+944A0C     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+00-0F-A2   (hex)		2xWireless
+000FA2     (base 16)		2xWireless
+				1065 Maurader st
+				Chico  CA  95973
+				US
+
+10-8E-E0   (hex)		Samsung Electronics Co.,Ltd
+108EE0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-A6-21   (hex)		Samsung Electronics Co.,Ltd
+FCA621     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+8C-F2-28   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+8CF228     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+70-0F-6A   (hex)		Cisco Systems, Inc
+700F6A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-B2   (hex)		SMALLBIG TECHNOLOGY
+000BB2     (base 16)		SMALLBIG TECHNOLOGY
+				3F Dongsung Bldg. 720-9 Yoksamdong
+				Gangnamgu  Seoul  135-080
+				KR
+
+00-30-5E   (hex)		Abelko Innovation
+00305E     (base 16)		Abelko Innovation
+				Box 808
+				Lulea    97125
+				SE
+
+FC-6B-F0   (hex)		TOPWELL INTERNATIONAL HOLDINDS LIMITED
+FC6BF0     (base 16)		TOPWELL INTERNATIONAL HOLDINDS LIMITED
+				Room 1301-5,Buliding China Youshe,NO.6013,ShenNan Road,CheGong Temple,FuTian District,ShenZhen,GuangDong province,China
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+00-14-77   (hex)		Trilliant
+001477     (base 16)		Trilliant
+				950 Cowie st.
+				Granby  Quebec  J2J 1P2
+				CA
+
+00-07-9B   (hex)		Aurora Networks
+00079B     (base 16)		Aurora Networks
+				2803 Mission College Blvd.
+				Santa Clara  CA  95054
+				US
+
+54-48-10   (hex)		Dell Inc.
+544810     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+54-B2-03   (hex)		PEGATRON CORPORATION
+54B203     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+38-68-DD   (hex)		INVENTEC CORPORATION
+3868DD     (base 16)		INVENTEC CORPORATION
+				NO.88, DAZHI RD.
+				TAOYUAN    33068
+				TW
+
+B8-B7-F1   (hex)		Wistron Neweb Corporation
+B8B7F1     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+80-50-F6   (hex)		ITEL MOBILE LIMITED
+8050F6     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+A8-CA-B9   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+A8CAB9     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				SUWON  KYUNGGI-DO  443-743
+				KR
+
+20-39-56   (hex)		HMD Global Oy
+203956     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+78-AF-E4   (hex)		Comau S.p.A
+78AFE4     (base 16)		Comau S.p.A
+				via Rivalta 30
+				Grugliasco  (TO)  10095
+				IT
+
+90-A1-37   (hex)		Beijing Splendidtel Communication Technology Co,. Ltd
+90A137     (base 16)		Beijing Splendidtel Communication Technology Co,. Ltd
+				4 Floor,Taixing Tower,No.11 Huayuan East Road. Haidian District
+				Beijing  Beijing  100191
+				CN
+
+80-02-9C   (hex)		Gemtek Technology Co., Ltd.
+80029C     (base 16)		Gemtek Technology Co., Ltd.
+				No.15-1 Zhonghua Road
+				Hukou  Hsinchu  30352
+				TW
+
+D0-C5-D3   (hex)		AzureWave Technology Inc.
+D0C5D3     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+14-16-9E   (hex)		 Wingtech Group (HongKong）Limited
+14169E     (base 16)		 Wingtech Group (HongKong）Limited
+				 FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
+				Hong Kong  Hong Kong  999077
+				HK
+
+F8-C3-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F8C39E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-D0-99   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E8D099     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+10-7B-A4   (hex)		Olive & Dove Co.,Ltd.
+107BA4     (base 16)		Olive & Dove Co.,Ltd.
+				803 Polaris bldg., 381, Seongnam-daero, Bundang-gu 
+				Gyeonggi-do  Seongnam-si  13555
+				KR
+
+7C-41-A2   (hex)		Nokia
+7C41A2     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+BC-32-5F   (hex)		Zhejiang Dahua Technology Co., Ltd.
+BC325F     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+50-5B-C2   (hex)		Liteon Technology Corporation
+505BC2     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+6C-21-A2   (hex)		AMPAK Technology, Inc.
+6C21A2     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+9C-2F-73   (hex)		Universal Tiancheng Technology (Beijing) Co., Ltd.
+9C2F73     (base 16)		Universal Tiancheng Technology (Beijing) Co., Ltd.
+				13 floor,Changxin Building,Anding Road No.39,Chaoyang District,Beijing
+				Beijing  Beijing  100029
+				CN
+
+D8-32-E3   (hex)		Xiaomi Communications Co Ltd
+D832E3     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+94-87-E0   (hex)		Xiaomi Communications Co Ltd
+9487E0     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+38-AF-29   (hex)		Zhejiang Dahua Technology Co., Ltd.
+38AF29     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+C8-86-29   (hex)		Shenzhen Duubee Intelligent Technologies Co.,LTD.
+C88629     (base 16)		Shenzhen Duubee Intelligent Technologies Co.,LTD.
+				9F, Block B, Unicenter, Xin’an Sub district, Bao’an District
+				Shenzhen  GuangDong  518000
+				CN
+
+CC-C2-E0   (hex)		Raisecom Technology CO., LTD
+CCC2E0     (base 16)		Raisecom Technology CO., LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+30-0A-C5   (hex)		Ruio telecommunication technologies Co., Limited
+300AC5     (base 16)		Ruio telecommunication technologies Co., Limited
+				Room 2501, Broadegate Software Building, No,1003 Keyuan Road,
+				Shenzhen  guangdong  518000
+				CN
+
+00-E0-65   (hex)		OPTICAL ACCESS INTERNATIONAL
+00E065     (base 16)		OPTICAL ACCESS INTERNATIONAL
+				500 WEST CUMMINGS PL. #3400
+				WOBURN  MA  01801
+				US
+
+44-66-FC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4466FC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+A0-28-ED   (hex)		HMD Global Oy
+A028ED     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+AC-54-74   (hex)		China Mobile IOT Company Limited
+AC5474     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+8C-1C-DA   (hex)		IEEE Registration Authority
+8C1CDA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-07-A8   (hex)		Haier Group Technologies Ltd
+0007A8     (base 16)		Haier Group Technologies Ltd
+				No. 1 Haier Road, Hi-tech Zone
+				00000    00000
+				CN
+
+98-14-D2   (hex)		Avonic
+9814D2     (base 16)		Avonic
+				Distributieweg 60
+				Delfgauw    2645EJ
+				NL
+
+14-09-DC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1409DC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-93-65   (hex)		Mapper.ai, Inc.
+EC9365     (base 16)		Mapper.ai, Inc.
+				400 Treat Ave, Suite G
+				San Francisco  CA  94110
+				US
+
+C4-BA-A3   (hex)		Beijing Winicssec Technologies Co., Ltd.
+C4BAA3     (base 16)		Beijing Winicssec Technologies Co., Ltd.
+				F block 9th floor 907 of Jiahua Building, No.9 Shangdi 3rd Street
+				Haidian District  Beijing  100085
+				CN
+
+9C-FE-A1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+9CFEA1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+D8-8A-3B   (hex)		UNIT-EM
+D88A3B     (base 16)		UNIT-EM
+				167 Merchants Street
+				Valletta    VLT 1174
+				MT
+
+EC-5A-86   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+EC5A86     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+				Road NO2, West of Industrial Park,North of Science & Technology Park
+				Dongguan  Guangdong  518057
+				CN
+
+C0-EE-B5   (hex)		Enice Network.
+C0EEB5     (base 16)		Enice Network.
+				NO.30, Shuige Rd, JiangNing Economic Development Zone, Nanjing
+				Nanjing    211106
+				CN
+
+60-DE-F3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60DEF3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-A0-09   (hex)		Xiaomi Communications Co Ltd
+50A009     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+88-96-4E   (hex)		ARRIS Group, Inc.
+88964E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+88-3F-4A   (hex)		Texas Instruments
+883F4A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+9C-A6-15   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+9CA615     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+E4-4E-76   (hex)		CHAMPIONTECH  ENTERPRISE (SHENZHEN) INC
+E44E76     (base 16)		CHAMPIONTECH  ENTERPRISE (SHENZHEN) INC
+				Against Office of Dong-Zhou Residential Committee Guang Ming
+				Shenzhen    518000
+				CN
+
+00-40-98   (hex)		DRESSLER GMBH & CO.
+004098     (base 16)		DRESSLER GMBH & CO.
+				KACKERTSTRASSE 10
+				    
+				DE
+
+00-1D-FA   (hex)		Fujian LANDI Commercial Equipment Co.,Ltd
+001DFA     (base 16)		Fujian LANDI Commercial Equipment Co.,Ltd
+				Building 17,the 1st Section ,Fuzhou Software Park
+				No.89 Software Road   Fuzhou ,Fujian  350003
+				CN
+
+9C-E6-5E   (hex)		Apple, Inc.
+9CE65E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-98-80   (hex)		Apple, Inc.
+C49880     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-33-8E   (hex)		Apple, Inc.
+E0338E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-F6-9C   (hex)		Apple, Inc.
+08F69C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-FA-83   (hex)		Qingdao Haier Technology Co.,Ltd
+04FA83     (base 16)		Qingdao Haier Technology Co.,Ltd
+				Building A01,Haier Information Park, No.1 Haier Road,
+				Qingdao  Shandong  266101
+				CN
+
+D0-76-E7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D076E7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+50-A6-7F   (hex)		Apple, Inc.
+50A67F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-61-DA   (hex)		Apple, Inc.
+D461DA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-18-98   (hex)		Apple, Inc.
+F01898     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-19-08   (hex)		Apple, Inc.
+881908     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-09-47   (hex)		Apple, Inc.
+5C0947     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-20-5E   (hex)		Apple, Inc.
+14205E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-41-A4   (hex)		Apple, Inc.
+B841A4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-16-5C   (hex)		Trackflow Ltd.
+00165C     (base 16)		Trackflow Ltd.
+				167-169 Kensington High Street
+				London  England  W86SH
+				GB
+
+64-1C-AE   (hex)		Samsung Electronics Co.,Ltd
+641CAE     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+F8-E4-4E   (hex)		MCOT INC.
+F8E44E     (base 16)		MCOT INC.
+				Yogohigashi 1-5-12
+				Matsuyama  Ehime  790-0044
+				JP
+
+40-CD-7A   (hex)		Qingdao Hisense Communications Co.,Ltd.
+40CD7A     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+DC-4E-F4   (hex)		Shenzhen MTN Electronics CO., Ltd
+DC4EF4     (base 16)		Shenzhen MTN Electronics CO., Ltd
+				MTN Industrial Park, No. 5, 9 South Futai Road, Pingxi Community, Pingdi Street, Longgang District
+				Shenzhen  Guangdong  518117
+				CN
+
+F0-81-73   (hex)		Amazon Technologies Inc.
+F08173     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno    89507
+				US
+
+EC-65-CC   (hex)		Panasonic Automotive Systems Company of America
+EC65CC     (base 16)		Panasonic Automotive Systems Company of America
+				776 Highway 74 South
+				Peachtree City  null  30269
+				US
+
+94-99-90   (hex)		VTC Telecommunications
+949990     (base 16)		VTC Telecommunications
+				750 (3rd Floor) Dien Bien Phu, District 10
+				Ho Chi Minh  Ho Chi Minh  70000
+				VN
+
+F4-BC-97   (hex)		Shenzhen Crave Communication Co., LTD
+F4BC97     (base 16)		Shenzhen Crave Communication Co., LTD
+				F3,8Building, DongFangMing IndustryZone, No.83 DabaoRD., 33 District BaoAn
+				Shenzhen    518000
+				CN
+
+28-FE-DE   (hex)		COMESTA, Inc.
+28FEDE     (base 16)		COMESTA, Inc.
+				Techno1-ro 61-7, Yuseong-gu, 
+				Daejeon    34014
+				KR
+
+90-79-10   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+907910     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-3D-E8   (hex)		LG Electronics (Mobile Communications)
+003DE8     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+68-FE-DA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+68FEDA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E8-98-6D   (hex)		Palo Alto Networks
+E8986D     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+14-4E-34   (hex)		Remote Solution
+144E34     (base 16)		Remote Solution
+				92, Chogokri, Nammyun
+				Kimcheon city  Kyungbuk  740-871
+				KR
+
+00-50-8B   (hex)		Hewlett Packard
+00508B     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+14-6B-9C   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+146B9C     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+94-8D-EF   (hex)		Oetiker Schweiz AG
+948DEF     (base 16)		Oetiker Schweiz AG
+				Spätzstrasse 11
+				Horgen    8810
+				CH
+
+2C-D9-74   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+2CD974     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+D4-F7-86   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D4F786     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+34-03-DE   (hex)		Texas Instruments
+3403DE     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+24-0A-63   (hex)		ARRIS Group, Inc.
+240A63     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-8B-37   (hex)		ARRIS Group, Inc.
+F88B37     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+20-67-7C   (hex)		Hewlett Packard Enterprise
+20677C     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+34-D7-12   (hex)		Smartisan Digital Co., Ltd
+34D712     (base 16)		Smartisan Digital Co., Ltd
+				4F, China Digital Kingdom, No.1 Wangjing North Road, Chaoyang District
+				Beijing  Beijing  100012
+				CN
+
+A0-66-10   (hex)		FUJITSU LIMITED
+A06610     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+44-FF-BA   (hex)		zte corporation
+44FFBA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E0-E6-2E   (hex)		TCT mobile ltd
+E0E62E     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+E4-2D-7B   (hex)		China Mobile IOT Company Limited
+E42D7B     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+C4-64-E3   (hex)		Texas Instruments
+C464E3     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+88-17-A3   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+8817A3     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+88-A9-A7   (hex)		IEEE Registration Authority
+88A9A7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+EC-89-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC8914     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-94-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B89436     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-14-79   (hex)		iRobot Corporation 
+501479     (base 16)		iRobot Corporation 
+				8 Crosby Drive
+				Bedford  MA  01730
+				US
+
+60-84-BD   (hex)		BUFFALO.INC
+6084BD     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+34-7E-CA   (hex)		NEXTWILL
+347ECA     (base 16)		NEXTWILL
+				JJ-Building, 20, Deongmyeong-ro 71beon-gil1, Yuseong-gu
+				Daejeon    34155
+				KR
+
+B4-2E-F8   (hex)		Eline Technology co.Ltd
+B42EF8     (base 16)		Eline Technology co.Ltd
+				kangcheng Road, Pharmaceutical Industrical Park, Yuanzhou District
+				Yichun  Jiangxi  336000
+				CN
+
+A4-D4-B2   (hex)		Shenzhen MeiG Smart Technology Co.,Ltd
+A4D4B2     (base 16)		Shenzhen MeiG Smart Technology Co.,Ltd
+				#88 Qinjiang Road, Xuhui District
+				Shanghai    200233
+				CN
+
+8C-F7-73   (hex)		Nokia
+8CF773     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+DC-DD-24   (hex)		Energica Motor Company SpA
+DCDD24     (base 16)		Energica Motor Company SpA
+				Via Cesare della Chiesa, 150
+				MODENA (MO)  Mo  41126
+				IT
+
+64-1C-B0   (hex)		Samsung Electronics Co.,Ltd
+641CB0     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+90-3A-72   (hex)		Ruckus Wireless
+903A72     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+CC-3B-58   (hex)		Curiouser Products Inc
+CC3B58     (base 16)		Curiouser Products Inc
+				712 Broadway #4
+				New York  NY  10003
+				US
+
+4C-EF-C0   (hex)		Amazon Technologies Inc.
+4CEFC0     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+8C-59-73   (hex)		Zyxel Communications Corporation
+8C5973     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+24-18-1D   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+24181D     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+58-D7-59   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+58D759     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-90-66   (hex)		Nain Inc.
+F89066     (base 16)		Nain Inc.
+				Aoyamadai building 902, Shibuya 2-9-10, Shibuya-ku
+				Tokyo    150-0002
+				JP
+
+70-06-AC   (hex)		Eastcompeace Technology Co., Ltd
+7006AC     (base 16)		Eastcompeace Technology Co., Ltd
+				Number 8 Pinggong Zhong Road,Nanping S&T Industry Community,Zhuhai,Guangdong,519060 China 
+				Zhuhai  Guangdong  519060
+				CN
+
+28-02-D8   (hex)		Samsung Electronics Co.,Ltd
+2802D8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-E5-33   (hex)		IEEE Registration Authority
+DCE533     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D8-44-5C   (hex)		DEV Tecnologia Ind Com Man Eq LTDA
+D8445C     (base 16)		DEV Tecnologia Ind Com Man Eq LTDA
+				Av Prof Lineu Prestes 2242 SL 23
+				Sao Paulo  SP  05508000
+				BR
+
+50-95-51   (hex)		ARRIS Group, Inc.
+509551     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+80-41-26   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+804126     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-F9-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ACF970     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-39-53   (hex)		zte corporation
+7C3953     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+38-E1-AA   (hex)		zte corporation
+38E1AA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+48-C7-96   (hex)		Samsung Electronics Co.,Ltd
+48C796     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F4-C2-48   (hex)		Samsung Electronics Co.,Ltd
+F4C248     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F4-71-90   (hex)		Samsung Electronics Co.,Ltd
+F47190     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-FF-BC   (hex)		IEEE Registration Authority
+C4FFBC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+0C-23-69   (hex)		Honeywell SPS
+0C2369     (base 16)		Honeywell SPS
+				700 Visions Dr.
+				Skaneateles Falls  NY  13153
+				US
+
+04-C9-D9   (hex)		Dish Technologies Corp
+04C9D9     (base 16)		Dish Technologies Corp
+				94 Inverness Terrace E
+				Englewood  CO  80112
+				US
+
+70-55-F8   (hex)		Cerebras Systems Inc
+7055F8     (base 16)		Cerebras Systems Inc
+				175 S San Antonio Rd #100
+				Los Altos  CA  94022
+				US
+
+6C-54-CD   (hex)		LAMPEX ELECTRONICS LIMITED
+6C54CD     (base 16)		LAMPEX ELECTRONICS LIMITED
+				6-2/231/B, Kukatpally,
+				Hyderabad  Telangana  500072
+				IN
+
+00-08-89   (hex)		Dish Technologies Corp
+000889     (base 16)		Dish Technologies Corp
+				94 Inverness Terrace E
+				Englewood  CO  80112
+				US
+
+F0-B5-B7   (hex)		Disruptive Technologies Research AS
+F0B5B7     (base 16)		Disruptive Technologies Research AS
+				Ytrebygdsvegen 215
+				Blomsterdalen  Hordaland  5258
+				NO
+
+B4-DE-DF   (hex)		zte corporation
+B4DEDF     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D4-90-9C   (hex)		Apple, Inc.
+D4909C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-E0-A6   (hex)		Apple, Inc.
+E4E0A6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-04-54   (hex)		ICOMM HK LIMITED
+580454     (base 16)		ICOMM HK LIMITED
+				SUITES 2302-6, 23/F GREAT EAGLE CTR 23 HARBOUR RD 
+				WANCHAI    NA
+				HK
+
+3C-9A-77   (hex)		Technicolor CH USA Inc.
+3C9A77     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+C4-77-AF   (hex)		Advanced Digital Broadcast SA
+C477AF     (base 16)		Advanced Digital Broadcast SA
+				Route de Crassier 21, B2
+				Eysins    CH-1262
+				CH
+
+94-29-0C   (hex)		Shenyang wisdom Foundation Technology Development Co., Ltd.
+94290C     (base 16)		Shenyang wisdom Foundation Technology Development Co., Ltd.
+				No. 262 North Main Street, Huanggu District, the Yellow River
+				shenyang    110000
+				CN
+
+9C-32-CE   (hex)		CANON INC.
+9C32CE     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+20-E0-9C   (hex)		Nokia
+20E09C     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+2C-FD-A1   (hex)		ASUSTek COMPUTER INC.
+2CFDA1     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+38-07-D4   (hex)		Zeppelin Systems GmbH
+3807D4     (base 16)		Zeppelin Systems GmbH
+				Messenhäuser Str. 37-45
+				Rödermark  Hessen  63322
+				DE
+
+04-19-7F   (hex)		Grasphere Japan
+04197F     (base 16)		Grasphere Japan
+				3-1-11 NNT build. 
+				Tokyo    1030013
+				JP
+
+5C-00-38   (hex)		Viasat Group S.p.A.
+5C0038     (base 16)		Viasat Group S.p.A.
+				Via Aosta 23
+				Venaria Reale   Torino  10078
+				IT
+
+8C-EC-4B   (hex)		Dell Inc.
+8CEC4B     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-50-91   (hex)		NETACCESS, INC.
+005091     (base 16)		NETACCESS, INC.
+				18 KEEWAYDIN DRIVE
+				SALEM  NH  03079
+				US
+
+B8-50-01   (hex)		Extreme Networks, Inc.
+B85001     (base 16)		Extreme Networks, Inc.
+				ONE ZEBRA PLAZA
+				HOLTSVILLE  NY  11742
+				US
+
+80-2B-F9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+802BF9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+54-B8-02   (hex)		Samsung Electronics Co.,Ltd
+54B802     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-CE-A9   (hex)		Texas Instruments
+10CEA9     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+80-5E-0C   (hex)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+805E0C     (base 16)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+				309, 3th Floor, No.16, Yun Ding North Road, Huli District
+				xiamen  Fujian  361015
+				CN
+
+6C-49-C1   (hex)		o2ones Co., Ltd.
+6C49C1     (base 16)		o2ones Co., Ltd.
+				503 Glory Tower, 3-10, Gumi-ro 9beon-gil, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13637
+				KR
+
+70-EE-A3   (hex)		Eoptolink Technology Inc. Ltd,
+70EEA3     (base 16)		Eoptolink Technology Inc. Ltd,
+				No.127 West Wulian Street
+				Chengdu  China/Sichuan  610213
+				CN
+
+70-47-E9   (hex)		vivo Mobile Communication Co., Ltd.
+7047E9     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+5C-52-1E   (hex)		Nintendo Co.,Ltd
+5C521E     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+14-44-4A   (hex)		Apollo Seiko Ltd.
+14444A     (base 16)		Apollo Seiko Ltd.
+				2271-7 Jinba
+				Gotenba  Shizuoka  412-0047
+				JP
+
+3C-2C-99   (hex)		Edgecore Networks Corporation
+3C2C99     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+68-3E-02   (hex)		SIEMENS AG, Digital Factory, Motion Control System
+683E02     (base 16)		SIEMENS AG, Digital Factory, Motion Control System
+				Varey Road
+				Congleton  Cheshire  CW12 1PH
+				GB
+
+00-02-61   (hex)		Tilgin AB
+000261     (base 16)		Tilgin AB
+				Finlandsgatan 40
+				kista    12345
+				SE
+
+00-14-C3   (hex)		Seagate Technology
+0014C3     (base 16)		Seagate Technology
+				M/S NW1F01
+				Longmont  CO  80503
+				US
+
+00-04-CF   (hex)		Seagate Technology
+0004CF     (base 16)		Seagate Technology
+				M/S NW1F01
+				Longmont  CO  80503
+				US
+
+00-20-37   (hex)		Seagate Technology
+002037     (base 16)		Seagate Technology
+				8001 E. BLOOMINGTON FWY
+				BLOOMINGTON  MN  55420
+				US
+
+5C-81-A7   (hex)		Network Devices Pty Ltd
+5C81A7     (base 16)		Network Devices Pty Ltd
+				16 Dickson Ave
+				Artarmon  NSW  2064
+				AU
+
+5C-0C-0E   (hex)		Guizhou Huaxintong Semiconductor Technology Co Ltd
+5C0C0E     (base 16)		Guizhou Huaxintong Semiconductor Technology Co Ltd
+				Sitelin Park
+				Intersection between Jin ma Ave and Qianzhong Ave  Gui An New Area, Guizhou Prov  550003
+				CN
+
+50-3C-EA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+503CEA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+00-E0-91   (hex)		LG Electronics
+00E091     (base 16)		LG Electronics
+				16, Woomyeon-dong, Seocho-gu
+				Seoul    137-724
+				KR
+
+38-43-7D   (hex)		Compal Broadband Networks, Inc.
+38437D     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+50-6F-98   (hex)		Sehaj Synergy Technologies Private Limited
+506F98     (base 16)		Sehaj Synergy Technologies Private Limited
+				E-112A, Kataria Colony, Ramanagar Extension, New Sanganer Road, Sodala, Jaipur-302019
+				Jaipur  Rajasthan  302019
+				IN
+
+4C-AE-1C   (hex)		SaiNXT Technologies LLP
+4CAE1C     (base 16)		SaiNXT Technologies LLP
+				Shop No. 7, Sonawala Building, 1st Floor, Proctor Road, Grant Road (E)
+				Mumbai  Maharashtra  400007
+				IN
+
+14-28-82   (hex)		MIDICOM ELECTRONICS CO.LTD
+142882     (base 16)		MIDICOM ELECTRONICS CO.LTD
+				Bucheon Techno Park 303-404,345
+				Seokcheon-ro,Bucheon-si  Gyeonggi-do   1501
+				KR
+
+EC-81-93   (hex)		Logitech, Inc
+EC8193     (base 16)		Logitech, Inc
+				4700 NW Camas Meadows Drive
+				Camas  WA  98607
+				US
+
+6C-DD-30   (hex)		Cisco Systems, Inc
+6CDD30     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-4E-86   (hex)		Third Millennium Systems Ltd.
+6C4E86     (base 16)		Third Millennium Systems Ltd.
+				18/19 Torfaen Business Centre, Panteg Way
+				New Inn, Pontypool  Torfaen  NP4 0LS
+				GB
+
+5C-86-C1   (hex)		DONGGUAN SOLUM ELECTRONICS CO.,LTD
+5C86C1     (base 16)		DONGGUAN SOLUM ELECTRONICS CO.,LTD
+				NO.157,13 Coastal Way TPFTZ
+				TIANJIN    300461
+				CN
+
+5C-77-76   (hex)		TCT mobile ltd
+5C7776     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+70-E5-6E   (hex)		Texas Instruments
+70E56E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+54-7D-CD   (hex)		Texas Instruments
+547DCD     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+00-AE-CD   (hex)		Pensando Systems
+00AECD     (base 16)		Pensando Systems
+				1730 Technology Drive, Suite 202
+				San Jose  CA  95110
+				US
+
+FC-9D-D8   (hex)		Beijing TongTongYiLian Science and Technology Ltd.
+FC9DD8     (base 16)		Beijing TongTongYiLian Science and Technology Ltd.
+				 Room 301,Zone 3,Building 9,No.8 Dongbeiwang West Road,Haidian District,Beijing
+				BEIJING  BEIJING  100193
+				CN
+
+DC-28-34   (hex)		HAKKO Corporation
+DC2834     (base 16)		HAKKO Corporation
+				4-5, Shiokusa 2-chome, Naniwaku
+				Osaka  Osaka  556-0024
+				JP
+
+84-50-9A   (hex)		Easy Soft TV Co., Ltd
+84509A     (base 16)		Easy Soft TV Co., Ltd
+				#1613, Heungduk U-Tower, Heungduk Jung ang-ro 120
+				Yongin-si  Gyeounggi-do  16950
+				KR
+
+00-17-30   (hex)		Automation Electronics
+001730     (base 16)		Automation Electronics
+				111 Big Horn Rd.
+				Casper  Wy  82601
+				US
+
+30-E4-8E   (hex)		Vodafone UK
+30E48E     (base 16)		Vodafone UK
+				Vodafone House 
+				Newbury   Berkshire   RG142FN
+				GB
+
+44-91-60   (hex)		Murata Manufacturing Co., Ltd.
+449160     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+B4-F1-DA   (hex)		LG Electronics (Mobile Communications)
+B4F1DA     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+C8-63-F1   (hex)		Sony Interactive Entertainment Inc.
+C863F1     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+DC-E1-AD   (hex)		Shenzhen Wintop Photoelectric Technology Co., Ltd
+DCE1AD     (base 16)		Shenzhen Wintop Photoelectric Technology Co., Ltd
+				6th Floor, 1st Building, Zone 3, South Area, Zhongguan& Honghualing Industrial Zone, No. 1213, Liuxian Avenue, Taoyuan Street, Nanshan District, Shenzhen, China
+				Shenzhen  Guangdong  518054
+				CN
+
+94-88-54   (hex)		Texas Instruments
+948854     (base 16)		Texas Instruments
+				12500 TI Boulevard
+				Dallas  TX  75243
+				US
+
+00-1D-0D   (hex)		Sony Interactive Entertainment Inc.
+001D0D     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+B0-FC-36   (hex)		CyberTAN Technology Inc.
+B0FC36     (base 16)		CyberTAN Technology Inc.
+				99 Park Ave III, Hsinchu Science Park
+				Hsinchu    308
+				TW
+
+00-1D-F4   (hex)		Magellan Technology Pty Limited
+001DF4     (base 16)		Magellan Technology Pty Limited
+				65 Johnston Street
+				Annandale  NSW  2000
+				AU
+
+6C-05-D5   (hex)		Ethertronics Inc
+6C05D5     (base 16)		Ethertronics Inc
+				5501 Oberlin Drive, Suite 100
+				SAN DIEGO  CA  92121
+				US
+
+00-19-C2   (hex)		Equustek Solutions, Inc.
+0019C2     (base 16)		Equustek Solutions, Inc.
+				#286 - 5489 Byrne Road,
+				Burnaby  BC  V5J 3J1
+				CA
+
+EC-B0-E1   (hex)		Ciena Corporation
+ECB0E1     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+78-DD-D9   (hex)		Guangzhou Shiyuan Electronics Co., Ltd. 
+78DDD9     (base 16)		Guangzhou Shiyuan Electronics Co., Ltd. 
+				No.6, 4th Yunpu Road, Yunpu Industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+F8-B7-E2   (hex)		Cisco Systems, Inc
+F8B7E2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F8-20-55   (hex)		Green Information System
+F82055     (base 16)		Green Information System
+				#202(Shopping center), Woldong-ro 28, Buk-gu
+				Gwangju    61153
+				KR
+
+74-E1-9A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+74E19A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+00-00-97   (hex)		Dell EMC
+000097     (base 16)		Dell EMC
+				176 South Street
+				Hopkinton  MA  01748
+				US
+
+8C-CF-09   (hex)		Dell EMC
+8CCF09     (base 16)		Dell EMC
+				228 South St
+				Hopkinton  MA  01748
+				US
+
+8C-83-9D   (hex)		SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD
+8C839D     (base 16)		SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD
+				ROOM 1505,BIT INNOVATION BUILDING,SCIENCE AND TECHNOLOGY PARK,NANSHAN DISTRICT
+				Shenzhen    518057
+				CN
+
+B0-C1-9E   (hex)		zte corporation
+B0C19E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+0C-37-47   (hex)		zte corporation
+0C3747     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+AC-A6-67   (hex)		Electronic Systems Protection, Inc.
+ACA667     (base 16)		Electronic Systems Protection, Inc.
+				8001 Knightdale Blvd.
+				Knightdale  NC  27545
+				US
+
+00-81-F9   (hex)		Texas Instruments
+0081F9     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+EC-B5-FA   (hex)		Philips Lighting BV
+ECB5FA     (base 16)		Philips Lighting BV
+				High Tech Campus 45
+				Eindhoven  Noord Brabant  5656 AE
+				NL
+
+44-CD-0E   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+44CD0E     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
+				Zhuhai  Guangdong  519180
+				CN
+
+E8-82-5B   (hex)		ARRIS Group, Inc.
+E8825B     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+70-99-1C   (hex)		Shenzhen Honesty Electronics Co.,Ltd
+70991C     (base 16)		Shenzhen Honesty Electronics Co.,Ltd
+				5/F,Zone B,Chitat Industrial Park,West Longping Road
+				Shenzhen City  Longgang District, Guangdong  518172
+				CN
+
+80-B0-3D   (hex)		Apple, Inc.
+80B03D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-9A-DC   (hex)		Apple, Inc.
+E49ADC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-E4-B5   (hex)		Apple, Inc.
+ACE4B5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-D2-B0   (hex)		Apple, Inc.
+D0D2B0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1C-AE   (hex)		WiChorus, Inc.
+001CAE     (base 16)		WiChorus, Inc.
+				3590 N 1st Street, Suite 300
+				San Jose  CA  95134
+				US
+
+7C-DD-76   (hex)		Suzhou Hanming Technologies Co., Ltd.
+7CDD76     (base 16)		Suzhou Hanming Technologies Co., Ltd.
+				Suite 407, No. 166, Ren Ai Road
+				Suzhou  Jiangsu  215123
+				CN
+
+24-68-80   (hex)		Braveridge.co.,ltd.
+246880     (base 16)		Braveridge.co.,ltd.
+				3-27-2, Susenji
+				Nishi-ku, Fukuoka-shi  Fukuoka  819-0373
+				JP
+
+E8-DF-70   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+E8DF70     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+28-AD-3E   (hex)		Shenzhen TONG BO WEI Technology CO.,LTD
+28AD3E     (base 16)		Shenzhen TONG BO WEI Technology CO.,LTD
+				Longhua District, Dalang street Langkou community Huarong Road Peng Tengda Industrial Park 4 5 floor
+				SHENZHEN  guangdong  518109
+				CN
+
+00-1C-56   (hex)		Pado Systems, Inc.
+001C56     (base 16)		Pado Systems, Inc.
+				#706 Loadland EZ Tower 153
+				SungNam  Gyung gi-Do  463-810
+				KR
+
+F0-6D-78   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+F06D78     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+78-44-FD   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+7844FD     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+70-7D-95   (hex)		Shenzhen City LinwlanTechnology Co. Ltd.
+707D95     (base 16)		Shenzhen City LinwlanTechnology Co. Ltd.
+				106 village road , manhole street Baoan district .
+				Shenzhen  Guangdong  518125
+				CN
+
+2C-43-1A   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+2C431A     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+A8-D3-C8   (hex)		Topcon Electronics GmbH & Co. KG
+A8D3C8     (base 16)		Topcon Electronics GmbH & Co. KG
+				Industriestraße 7
+				Geisenheim    65366
+				DE
+
+D0-59-95   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D05995     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+18-CC-88   (hex)		Hitachi Johnson Controls Air 
+18CC88     (base 16)		Hitachi Johnson Controls Air 
+				390 Number
+				 Shimizu Village Village  Shizuoka Prefecture  424-0926
+				JP
+
+80-C7-55   (hex)		Panasonic Appliances Company
+80C755     (base 16)		Panasonic Appliances Company
+				2-3-1-2 Noji-higashi
+				Kusatsu City  Shiga  525-8555
+				JP
+
+F0-BD-2E   (hex)		H+S Polatis Ltd
+F0BD2E     (base 16)		H+S Polatis Ltd
+				332/2 Cambridge Science Park
+				Cambridge    CB4 0WN
+				GB
+
+74-6E-E4   (hex)		Asia Vital Components Co.,Ltd.
+746EE4     (base 16)		Asia Vital Components Co.,Ltd.
+				Rm. 3, 7F., No.24, Wuquan 2nd Rd., Xinzhuang Dist., 
+				 New Taipei   Taiwan  24892
+				TW
+
+00-40-E4   (hex)		E-M TECHNOLOGY, INC.
+0040E4     (base 16)		E-M TECHNOLOGY, INC.
+				9245 SOUTHWEST NIMBUS AVE.
+				BEAVERTON  OR  97005
+				US
+
+98-4B-4A   (hex)		ARRIS Group, Inc.
+984B4A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E0-84-F3   (hex)		High Grade Controls Corporation
+E084F3     (base 16)		High Grade Controls Corporation
+				87 Magill Street
+				Sudbury  Ontario  P3Y1K6
+				CA
+
+70-70-8B   (hex)		Cisco Systems, Inc
+70708B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+38-9F-5A   (hex)		C-Kur TV Inc.
+389F5A     (base 16)		C-Kur TV Inc.
+				A-1902, 583, Yangcheon-ro, Gangseo-gu
+				Seoul    07547
+				KR
+
+D8-43-ED   (hex)		Suzuken
+D843ED     (base 16)		Suzuken
+				8, Higashikatahamachi, Higashiku
+				Nagoya  Aich  4610015
+				JP
+
+04-3A-0D   (hex)		SM Optics S.r.l.
+043A0D     (base 16)		SM Optics S.r.l.
+				via Michelangelo Buonarroti, 1
+				Cologno Monzese  Milan  I-20093
+				IT
+
+44-8F-17   (hex)		Samsung Electronics Co., Ltd. ARTIK
+448F17     (base 16)		Samsung Electronics Co., Ltd. ARTIK
+				1-1, Samsungjeonja-ro
+				Hwaseong-si  Gyeonggi-do  18448
+				KR
+
+00-FC-8B   (hex)		Amazon Technologies Inc.
+00FC8B     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-76-B1   (hex)		Somfy-Protect By Myfox SAS
+0076B1     (base 16)		Somfy-Protect By Myfox SAS
+				Regent Park II, Bât I, 2460 l'Occitane
+				Labège    31670
+				FR
+
+6C-C1-47   (hex)		Xiamen Hanin Electronic Technology Co., Ltd
+6CC147     (base 16)		Xiamen Hanin Electronic Technology Co., Ltd
+				#8 building, Gaoqi Nan Shi'er Road, Huli Distric
+				Xiamen  Fujian  361000
+				CN
+
+A0-72-E4   (hex)		NJ SYSTEM CO.,LTD
+A072E4     (base 16)		NJ SYSTEM CO.,LTD
+				Urim lions valley 5cha, A-1701, 144-3, Sangdaewon-dong, Jungwon-gu
+				Seongnam  Gyeonggido  13201
+				KR
+
+4C-13-65   (hex)		Emplus Technologies
+4C1365     (base 16)		Emplus Technologies
+				Bld B, 10F, No.209, Sec.1, Nangang Rd
+				Taipei    115
+				TW
+
+CC-F9-57   (hex)		u-blox AG
+CCF957     (base 16)		u-blox AG
+				Zuercherstrasse 68
+				Thalwil    8800
+				CH
+
+0C-62-A6   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+0C62A6     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+18-13-2D   (hex)		zte corporation
+18132D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+74-D2-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+74D21D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-78-D4   (hex)		Verizon 
+1878D4     (base 16)		Verizon 
+				One Verizon Way
+				Basking Ridge  NJ  07920
+				US
+
+B8-D9-4D   (hex)		Sagemcom Broadband SAS
+B8D94D     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+38-90-A5   (hex)		Cisco Systems, Inc
+3890A5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C0-74-2B   (hex)		SHENZHEN XUNLONG SOFTWARE CO.,LIMITED
+C0742B     (base 16)		SHENZHEN XUNLONG SOFTWARE CO.,LIMITED
+				Room 532, Block A, Huameiju Business Center, Xinhu Road, Baoan 82 Area
+				Shenzhen  Guangdong  518133
+				CN
+
+5C-67-76   (hex)		IDS Imaging Development Systems GmbH
+5C6776     (base 16)		IDS Imaging Development Systems GmbH
+				Dimbacher Str. 6
+				Obersulm  BW  74182
+				DE
+
+44-EA-D8   (hex)		Texas Instruments
+44EAD8     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+18-9B-A5   (hex)		IEEE Registration Authority
+189BA5     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+1C-70-22   (hex)		Murata Manufacturing Co., Ltd.
+1C7022     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+CC-98-91   (hex)		Cisco Systems, Inc
+CC9891     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+28-BF-89   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+28BF89     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+90-3D-BD   (hex)		SECURE METERS LIMITED
+903DBD     (base 16)		SECURE METERS LIMITED
+				E CLASS, PRATAP NAGAR INDUSTRIAL AREA
+				UDAIPUR  RAJASTHAN  313003
+				IN
+
+00-22-94   (hex)		KYOCERA CORPORATION 
+002294     (base 16)		KYOCERA CORPORATION 
+				2-1-1,Kagahara
+				Yokohama-shi  Kanagawa  224-8502
+				JP
+
+38-89-DC   (hex)		Opticon Sensors Europe B.V.
+3889DC     (base 16)		Opticon Sensors Europe B.V.
+				Opaallaan 35
+				Hoofddorp  Noord Holland  2132 XV
+				NL
+
+8C-45-00   (hex)		Murata Manufacturing Co., Ltd.
+8C4500     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+1C-DD-EA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+1CDDEA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+94-00-06   (hex)		jinyoung
+940006     (base 16)		jinyoung
+				1000 Dongil-ro Nowon-gu Seoul
+				Seoul    01849
+				KR
+
+20-04-0F   (hex)		Dell Inc.
+20040F     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+A4-34-12   (hex)		Thales Alenia Space
+A43412     (base 16)		Thales Alenia Space
+				26 av JF Champollion
+				Toulouse    31037
+				FR
+
+8C-85-90   (hex)		Apple, Inc.
+8C8590     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-88-C3   (hex)		Ningbo Dooya Mechanic & Electronic Technology Co., Ltd
+BC88C3     (base 16)		Ningbo Dooya Mechanic & Electronic Technology Co., Ltd
+				No.168 Shengguang road Luotuo street Zhenhai district
+				Ningbo  Zhejiang  315202
+				CN
+
+38-CD-07   (hex)		Beijing FaceCam Technology Co., Ltd.
+38CD07     (base 16)		Beijing FaceCam Technology Co., Ltd.
+				Room C115, DongSheng Building, No 8, East Road, Zhongguan Town, Haidian District
+				Beijing    100083
+				CN
+
+00-D0-60   (hex)		Panasonic Europe Ltd.
+00D060     (base 16)		Panasonic Europe Ltd.
+				LABORATORIES GMBH
+				    
+				DE
+
+EC-FA-03   (hex)		FCA
+ECFA03     (base 16)		FCA
+				800 Chrylser Dr
+				Auburn Hills  MI  48326
+				US
+
+6C-96-CF   (hex)		Apple, Inc.
+6C96CF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-1F-40   (hex)		Blu Wireless Technology Ltd
+681F40     (base 16)		Blu Wireless Technology Ltd
+				Bluwireless Technology, 5th Floor, 1 Temple Way
+				Bristol  Bristol, City of  BS2 0BY
+				GB
+
+90-AD-F7   (hex)		vivo Mobile Communication Co., Ltd.
+90ADF7     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+40-CE-24   (hex)		Cisco Systems, Inc
+40CE24     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-32-E6   (hex)		Panasonic Industrial Devices Europe GmbH
+3432E6     (base 16)		Panasonic Industrial Devices Europe GmbH
+				Zeppelinstraße 19
+				Lüneburg    21337
+				DE
+
+40-01-7A   (hex)		Cisco Systems, Inc
+40017A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+78-88-6D   (hex)		Apple, Inc.
+78886D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-EE-28   (hex)		Apple, Inc.
+20EE28     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-F6-1C   (hex)		Apple, Inc.
+B4F61C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-F4-AB   (hex)		Apple, Inc.
+08F4AB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-01-7C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+FC017C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+90-32-4B   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+90324B     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+60-2E-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+602E20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-72-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E472E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-12-7D   (hex)		MobileAria
+00127D     (base 16)		MobileAria
+				800 W El Camino Real #240
+				Mountain View  CA  94040
+				US
+
+F8-64-65   (hex)		Anova Applied Electronics, Inc.
+F86465     (base 16)		Anova Applied Electronics, Inc.
+				580 Howard Street, #403
+				san francisco  CA  94105
+				US
+
+00-20-60   (hex)		ALCATEL ITALIA S.p.A.
+002060     (base 16)		ALCATEL ITALIA S.p.A.
+				VIA TRENTO, 30
+				20059 VIMERCATE (MI)    
+				IT
+
+50-8F-4C   (hex)		Xiaomi Communications Co Ltd
+508F4C     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+A4-77-58   (hex)		Ningbo Freewings Technologies Co.,Ltd
+A47758     (base 16)		Ningbo Freewings Technologies Co.,Ltd
+				No.502 Wenshui Road, Shounan Street, Yinzhou District
+				Ningbo  Zhejiang  315192
+				CN
+
+58-A0-CB   (hex)		TrackNet, Inc
+58A0CB     (base 16)		TrackNet, Inc
+				900 Lafayette Street #329
+				Santa Clara  CA  95050
+				US
+
+E0-60-89   (hex)		Cloudleaf, Inc.
+E06089     (base 16)		Cloudleaf, Inc.
+				860 Hillview Court, Suite 350
+				Milpitas  CA  95035
+				US
+
+78-36-90   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+783690     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+				Road NO2, West of Industrial Park,North of Science & Technology Park
+				Dongguan  Guangdong  518057
+				CN
+
+BC-54-FC   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+BC54FC     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+0C-4B-54   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+0C4B54     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+E4-F0-04   (hex)		Dell Inc.
+E4F004     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+94-E3-6D   (hex)		Texas Instruments
+94E36D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F0-F8-F2   (hex)		Texas Instruments
+F0F8F2     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+34-15-13   (hex)		Texas Instruments
+341513     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+74-81-9A   (hex)		PT. Hartono Istana Teknologi
+74819A     (base 16)		PT. Hartono Istana Teknologi
+				KHR Asnawi
+				Kudus  Jawa Tengah  59332
+				ID
+
+28-35-45   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+283545     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+04-4F-4C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+044F4C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-B8-1F   (hex)		ARRIS Group, Inc.
+18B81F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+1C-15-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C151F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-8B-FC   (hex)		mixi,Inc.
+008BFC     (base 16)		mixi,Inc.
+				Sumitomo Shibuya First Tower 7F, 1-2-20 Higashi
+				Shibuya-ku  Tokyo  150-0011
+				JP
+
+A8-2B-B5   (hex)		Edgecore Networks Corporation
+A82BB5     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+E8-E1-E2   (hex)		Energotest
+E8E1E2     (base 16)		Energotest
+				Chorzowska 44B
+				Gliwice  Slask  44-100
+				PL
+
+78-11-DC   (hex)		XIAOMI Electronics,CO.,LTD
+7811DC     (base 16)		XIAOMI Electronics,CO.,LTD
+				Xiaomi Building, No.68 Qinghe Middle Street
+				Haidian District  Beijing  100085
+				CN
+
+D4-63-C6   (hex)		Motorola Mobility LLC, a Lenovo Company
+D463C6     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+F8-44-E3   (hex)		Taicang T&W Electronics
+F844E3     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+24-A5-34   (hex)		SynTrust Tech International Ltd. 
+24A534     (base 16)		SynTrust Tech International Ltd. 
+				10F-1, No. 125, Songde Road,
+				Taipei  Taiwan  110
+				TW
+
+C4-44-A0   (hex)		Cisco Systems, Inc
+C444A0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-74-2E   (hex)		Amazon Technologies Inc.
+18742E     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno    89507
+				US
+
+90-A3-65   (hex)		HMD Global Oy
+90A365     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+DC-44-B6   (hex)		Samsung Electronics Co.,Ltd
+DC44B6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-07-B6   (hex)		Samsung Electronics Co.,Ltd
+1007B6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-2D-0D   (hex)		Samsung Electronics Co.,Ltd
+342D0D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-4C-C8   (hex)		Dell Inc.
+A44CC8     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+D8-37-BE   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+D837BE     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				#1905 Mei Hong Road
+				Shanghai  Shanghai  200000
+				CN
+
+D4-68-4D   (hex)		Ruckus Wireless
+D4684D     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+8C-0C-90   (hex)		Ruckus Wireless
+8C0C90     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+6C-AA-B3   (hex)		Ruckus Wireless
+6CAAB3     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+00-13-92   (hex)		Ruckus Wireless
+001392     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+08-51-14   (hex)		QINGDAO TOPSCOMM COMMUNICATION CO., LTD
+085114     (base 16)		QINGDAO TOPSCOMM COMMUNICATION CO., LTD
+				7/F, Building 6, NO.288, Ningxia Road
+				Qingdao   Shandong  266024
+				CN
+
+D0-5A-00   (hex)		Technicolor CH USA Inc.
+D05A00     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+70-78-8B   (hex)		vivo Mobile Communication Co., Ltd.
+70788B     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+48-59-A4   (hex)		zte corporation
+4859A4     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+54-BD-79   (hex)		Samsung Electronics Co.,Ltd
+54BD79     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+A0-42-3F   (hex)		Tyan Computer Corp
+A0423F     (base 16)		Tyan Computer Corp
+				3288 Larurelview Court
+				Fremont  CA  94538
+				US
+
+70-F1-1C   (hex)		Shenzhen Ogemray Technology Co.,Ltd
+70F11C     (base 16)		Shenzhen Ogemray Technology Co.,Ltd
+				4/F,5Bldg,Dongwu Industrial Park, Donghuan 1st Rd, Longhua District.
+				Shenzhen    518059
+				CN
+
+70-65-A3   (hex)		Kandao lightforge Co., Ltd.
+7065A3     (base 16)		Kandao lightforge Co., Ltd.
+				5th Floor, M7 Steel Building, the second way in Technology Road , Nanshan District, 
+				Shenzhen  Guangdong  518057
+				CN
+
+14-14-4B   (hex)		Ruijie Networks Co.,LTD
+14144B     (base 16)		Ruijie Networks Co.,LTD
+				19-22# Building,Star-net Science Plaza,Juyuanzhou, 
+				FUZHOU  FUJIAN  350002
+				CN
+
+74-D0-DC   (hex)		Ericsson AB
+74D0DC     (base 16)		Ericsson AB
+				Torshamnsgatan 48
+				STOCKHOLM    164 83
+				SE
+
+C0-8A-DE   (hex)		Ruckus Wireless
+C08ADE     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+00-1D-2E   (hex)		Ruckus Wireless
+001D2E     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+B4-E6-2A   (hex)		LG Innotek
+B4E62A     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+A0-C5-F2   (hex)		IEEE Registration Authority
+A0C5F2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A8-6B-7C   (hex)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
+A86B7C     (base 16)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
+				ORIENTAL CYBERPORT, HIGHTECH 6 ROAD
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+B0-39-56   (hex)		NETGEAR
+B03956     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+EC-42-B4   (hex)		ADC Corporation
+EC42B4     (base 16)		ADC Corporation
+				77-1, Miyako
+				Namegawa-machi, Hiki-gun  Saitama Pref.  355-0812
+				JP
+
+60-DA-83   (hex)		Hangzhou H3C Technologies Co., Limited
+60DA83     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+2C-57-31   (hex)		 Wingtech Group (HongKong）Limited
+2C5731     (base 16)		 Wingtech Group (HongKong）Limited
+				 FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
+				Hong Kong  Hong Kong  999077
+				HK
+
+CC-46-39   (hex)		WAAV, Inc.
+CC4639     (base 16)		WAAV, Inc.
+				151 PEARL ST FL 4
+				BOSTON  MA  02110
+				US
+
+AC-9E-17   (hex)		ASUSTek COMPUTER INC.
+AC9E17     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+64-16-66   (hex)		Nest Labs Inc.
+641666     (base 16)		Nest Labs Inc.
+				3400 Hillview Ave.
+				Palo Alto  CA  94304
+				US
+
+D8-DF-7A   (hex)		Quest Software, Inc.
+D8DF7A     (base 16)		Quest Software, Inc.
+				4 Polaris Way
+				Aliso Viejo  CA  92656
+				US
+
+14-5B-E1   (hex)		nyantec GmbH
+145BE1     (base 16)		nyantec GmbH
+				Europaplatz 2
+				Berlin    10557
+				DE
+
+A0-23-9F   (hex)		Cisco Systems, Inc
+A0239F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+70-F3-5A   (hex)		Cisco Systems, Inc
+70F35A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-34-1B   (hex)		Adero Inc
+A0341B     (base 16)		Adero Inc
+				7410 HOllister Ave
+				Goleta  CA  93117
+				US
+
+A0-AF-BD   (hex)		Intel Corporate
+A0AFBD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+7C-8B-CA   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+7C8BCA     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+B0-4E-26   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+B04E26     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+B0-89-C2   (hex)		Zyptonite
+B089C2     (base 16)		Zyptonite
+				1460 Broadway, 12 fl.
+				New York  NY  10036
+				US
+
+F0-23-B9   (hex)		IEEE Registration Authority
+F023B9     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+FC-4D-D4   (hex)		Universal Global Scientific Industrial Co., Ltd.
+FC4DD4     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Taiping Rd. Sec. 1, Tsao Tuen,
+				Nan-Tou Hsien,     542
+				TW
+
+A4-F4-C2   (hex)		VNPT TECHNOLOGY
+A4F4C2     (base 16)		VNPT TECHNOLOGY
+				HoaLac Hi-Tech Park
+				HANOI  HANOI  10000
+				VN
+
+8C-14-7D   (hex)		IEEE Registration Authority
+8C147D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+30-07-4D   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+30074D     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+1C-1F-D4   (hex)		LifeBEAM Technologies LTD
+1C1FD4     (base 16)		LifeBEAM Technologies LTD
+				150 Greenwich st 4WTC - 29th floor
+				New York  NY  10007
+				US
+
+00-9A-D2   (hex)		Cisco Systems, Inc
+009AD2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-7F-77   (hex)		Connected Home
+447F77     (base 16)		Connected Home
+				19-22, Rathbone Place
+				London    W1T 1HY
+				GB
+
+E8-B6-C2   (hex)		Juniper Networks
+E8B6C2     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+94-7B-E7   (hex)		Samsung Electronics Co.,Ltd
+947BE7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-92-B9   (hex)		Samsung Electronics Co.,Ltd
+5092B9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-74-A8   (hex)		Samsung Electronics Co.,Ltd
+DC74A8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E8-39-35   (hex)		Hewlett Packard
+E83935     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-18-0A   (hex)		Cisco Meraki
+00180A     (base 16)		Cisco Meraki
+				99 Rhode Island St.
+				San Francisco,  CA  94103
+				US
+
+5C-6A-80   (hex)		Zyxel Communications Corporation
+5C6A80     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+D8-60-B3   (hex)		Guangdong Global Electronic Technology CO.，LTD
+D860B3     (base 16)		Guangdong Global Electronic Technology CO.，LTD
+				 Floor4 East side,build#6,Huangzhou industry Park, chebei Road, Tianhe District
+				GuangZhou  GuangDong  510660
+				CN
+
+64-35-1C   (hex)		e-CON SYSTEMS INDIA PVT LTD
+64351C     (base 16)		e-CON SYSTEMS INDIA PVT LTD
+				RR Tower 4, 7th Floor, TVK IND Estate, Guindy
+				Chennai  Other  600032
+				IN
+
+60-BA-18   (hex)		nextLAP GmbH
+60BA18     (base 16)		nextLAP GmbH
+				Hofmannstr. 61
+				München    81379
+				DE
+
+44-AA-50   (hex)		Juniper Networks
+44AA50     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+84-CD-62   (hex)		ShenZhen IDWELL Technology CO.,Ltd
+84CD62     (base 16)		ShenZhen IDWELL Technology CO.,Ltd
+				4F,Building 20 Changxing Industrial Park,Shayi,Shajing,BaoAn
+				ShenZhen    518000
+				CN
+
+A8-D5-79   (hex)		Beijing Chushang Science and Technology Co.,Ltd
+A8D579     (base 16)		Beijing Chushang Science and Technology Co.,Ltd
+				3A285 room,3 layer,1 building,No 11 of yongwai song zhuang road,Fengtai district,Beijing
+				Beijing  Beijing  518000
+				CN
+
+44-48-C1   (hex)		Hewlett Packard Enterprise
+4448C1     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+48-10-63   (hex)		NTT Innovation Institute, Inc.
+481063     (base 16)		NTT Innovation Institute, Inc.
+				1950 University Avenue, Suite 600
+				East Palo Alto  CA  94303
+				US
+
+A0-8E-78   (hex)		Sagemcom Broadband SAS
+A08E78     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+88-D5-0C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+88D50C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+D4-28-D5   (hex)		TCT mobile ltd
+D428D5     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+9C-AF-6F   (hex)		ITEL MOBILE LIMITED
+9CAF6F     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+FC-53-9E   (hex)		Shanghai Wind Technologies Co.,Ltd
+FC539E     (base 16)		Shanghai Wind Technologies Co.,Ltd
+				Floor 8,East Building,Guilin Technology Mansion,No.650,Caobao Road,XuHui District,Shanghai,P.R.China
+				Shanghai  Shanghai  200233
+				CN
+
+60-53-17   (hex)		Sandstone Technologies
+605317     (base 16)		Sandstone Technologies
+				1920 lyell ave
+				Rochester  NY  14606
+				US
+
+90-70-65   (hex)		Texas Instruments
+907065     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+18-A9-58   (hex)		PROVISION THAI CO., LTD.
+18A958     (base 16)		PROVISION THAI CO., LTD.
+				155/7-10 Rachadapisek Rd.,
+				Thonburi  Bangkok  10600
+				TH
+
+74-C9-A3   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+74C9A3     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+EC-8A-4C   (hex)		zte corporation
+EC8A4C     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D4-5F-25   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+D45F25     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+40-C8-CB   (hex)		AM Telecom co., Ltd.
+40C8CB     (base 16)		AM Telecom co., Ltd.
+				#608,YatapLeaders B/D, Jangmi-ro 42, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-828
+				KR
+
+2C-AB-EB   (hex)		Cisco Systems, Inc
+2CABEB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B4-C6-F8   (hex)		Axilspot Communication
+B4C6F8     (base 16)		Axilspot Communication
+				A302 Han's Innovation Building, No.9018 Beihuan Ave., Nanshan District
+				Shenzhen    518000
+				CN
+
+9C-E9-51   (hex)		Shenzhen Sang Fei Consumer Communications Ltd., Co.
+9CE951     (base 16)		Shenzhen Sang Fei Consumer Communications Ltd., Co.
+				11,Science And Technology Road, Shenzhen Hi-tech Industrial Park, Nanshan District
+				 Shenzhen City  Guangdong  518057
+				CN
+
+B8-D5-0B   (hex)		Sunitec Enterprise Co.,Ltd
+B8D50B     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+BC-66-DE   (hex)		Shadow Creator Information Technology Co.,Ltd.
+BC66DE     (base 16)		Shadow Creator Information Technology Co.,Ltd.
+				Shanghai City, Pudong New Area Zhangjiang road 368, Building 29, room 611 
+				Shanghai  Shanghai  200120
+				CN
+
+18-68-CB   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+1868CB     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.469,Jianghui Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+C4-AE-12   (hex)		Samsung Electronics Co.,Ltd
+C4AE12     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+00-1F-A4   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+001FA4     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				4F,Baiying Building, No.1019,Nanhai RD,Shekou,
+				ShenZhen  GuangDong  518067
+				CN
+
+D4-DC-CD   (hex)		Apple, Inc.
+D4DCCD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-4B-AA   (hex)		Apple, Inc.
+484BAA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-A9-04   (hex)		Apple, Inc.
+DCA904     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-AB-31   (hex)		Apple, Inc.
+6CAB31     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-74-BF   (hex)		Apple, Inc.
+4C74BF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-94-6B   (hex)		TECNO MOBILE LIMITED
+04946B     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+48-88-03   (hex)		ManTechnology Inc.
+488803     (base 16)		ManTechnology Inc.
+				12th Fl, 308-4 Seongsoodong 2ga, Seongdonggu
+				Seoul    04781
+				KR
+
+B4-36-E3   (hex)		KBVISION GROUP
+B436E3     (base 16)		KBVISION GROUP
+				337 N. Vineyard Avenue,  4th Floor,  San Jose, CA 91764
+				San Jose  CA  90847
+				US
+
+94-D2-99   (hex)		Techmation Co.,Ltd.
+94D299     (base 16)		Techmation Co.,Ltd.
+				9F., No.529, Zhongzheng Rd., Xindian Dist., New Taipei City 231, Taiwan
+				New Taipei City     231
+				TW
+
+34-1A-35   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+341A35     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+2C-02-9F   (hex)		3ALogics
+2C029F     (base 16)		3ALogics
+				#704, Hyundai office B'd, Sunae-dong, Bundang-gu
+				Seongnam-si    13601
+				KR
+
+64-D1-54   (hex)		Routerboard.com
+64D154     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+58-D9-D5   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+58D9D5     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+6C-4B-90   (hex)		LiteON
+6C4B90     (base 16)		LiteON
+				5F, No.90, Rd. Chien 1, ChungHo
+				New Taipei  Taiwan  23505
+				TW
+
+00-05-0F   (hex)		Tanaka S/S Ltd.
+00050F     (base 16)		Tanaka S/S Ltd.
+				1942 Nomura Hirooka
+				Nagano  399-0702  
+				JP
+
+98-9E-63   (hex)		Apple, Inc.
+989E63     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-6B-6E   (hex)		Apple, Inc.
+886B6E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-E4-AD   (hex)		zte corporation
+F4E4AD     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+28-FF-3E   (hex)		zte corporation
+28FF3E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+B8-D7-AF   (hex)		Murata Manufacturing Co., Ltd.
+B8D7AF     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+D4-AE-05   (hex)		Samsung Electronics Co.,Ltd
+D4AE05     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E0-48-AF   (hex)		Premietech Limited
+E048AF     (base 16)		Premietech Limited
+				Unit 805, Tower 3, Enterprise Square I
+				No. 9 Sheung Yuet Road  Kowloon Bay  HongKong  00000
+				HK
+
+2C-33-11   (hex)		Cisco Systems, Inc
+2C3311     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-82-D5   (hex)		Apple, Inc.
+5082D5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-EE-10   (hex)		Samsung Electronics Co.,Ltd
+F0EE10     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-70-0B   (hex)		GUANGZHOU CHIP TECHNOLOGIES CO.,LTD
+C4700B     (base 16)		GUANGZHOU CHIP TECHNOLOGIES CO.,LTD
+				4th floor, Building J of JiTang Industrial Zone, No. 8 NanYun fifth road, HuangPu District
+				Guangzhou  Guangdong  510700
+				CN
+
+3C-A0-67   (hex)		Liteon Technology Corporation
+3CA067     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+BC-02-4A   (hex)		HMD Global Oy
+BC024A     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+94-99-01   (hex)		Shenzhen YITOA Digital Appliance CO.,LTD
+949901     (base 16)		Shenzhen YITOA Digital Appliance CO.,LTD
+				5/F,Yitoa Building,Keji South Road 5th,Hi-tech Industrial Park,Nanshan District,
+				shenzhen  Guangdong  518000
+				CN
+
+F8-59-71   (hex)		Intel Corporate
+F85971     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+10-05-CA   (hex)		Cisco Systems, Inc
+1005CA     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+78-94-B4   (hex)		Sercomm Corporation.
+7894B4     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+44-37-08   (hex)		MRV Comunications
+443708     (base 16)		MRV Comunications
+				Hayetzira
+				Yokneam    614
+				IL
+
+28-5F-2F   (hex)		RNware Co.,Ltd.
+285F2F     (base 16)		RNware Co.,Ltd.
+				#202 ICT Park Bldg, 205, Songhyun-ro, Dalseo-gu
+				Daegu    42734
+				KR
+
+50-0F-F5   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+500FF5     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+BC-45-2E   (hex)		Knowledge Development for POF S.L.
+BC452E     (base 16)		Knowledge Development for POF S.L.
+				Ronda de Poniente 14, 2-C,D
+				Tres Cantos  Madrid  28760
+				ES
+
+DC-C6-4B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DCC64B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-33-89   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+043389     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-A0-68   (hex)		BHP LIMITED
+00A068     (base 16)		BHP LIMITED
+				1500 Post Oak Boulevard #11.08 B
+				Houston  TX  77056-3030
+				US
+
+70-3A-CB   (hex)		Google, Inc.
+703ACB     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+70-6D-EC   (hex)		Wifi-soft LLC
+706DEC     (base 16)		Wifi-soft LLC
+				616, West Monroe
+				Austin  TX  78704
+				US
+
+B0-C2-05   (hex)		BIONIME
+B0C205     (base 16)		BIONIME
+				No.100, Sec.2, Daqing St., South Dist.,
+				Taichung  Taiwan  40242
+				TW
+
+94-F5-51   (hex)		Cadi Scientific Pte Ltd
+94F551     (base 16)		Cadi Scientific Pte Ltd
+				31 Ubi Road 1, Aztech Building, #07-01A
+				Singapore    408694
+				SG
+
+10-5A-F7   (hex)		ADB Italia 
+105AF7     (base 16)		ADB Italia 
+				Viale Sarca 222
+				Milan  Italy  20126
+				IT
+
+B8-1D-AA   (hex)		LG Electronics (Mobile Communications)
+B81DAA     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-E4-00   (hex)		Sichuan Changhong Electric Ltd.
+00E400     (base 16)		Sichuan Changhong Electric Ltd.
+				No.35,East MianXin Road,MianYang,Sichaun,China.
+				MianYang  SiChuan  PRC 621000
+				CN
+
+2C-55-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C55D3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-C0-24   (hex)		EDEN SISTEMAS DE COMPUTACAO SA
+00C024     (base 16)		EDEN SISTEMAS DE COMPUTACAO SA
+				RUA DO OUVIDOR 121 5 ANDAR
+				    
+				BR
+
+7C-46-85   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+7C4685     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+1C-1E-E3   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+1C1EE3     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+44-03-2C   (hex)		Intel Corporate
+44032C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+78-68-F7   (hex)		YSTen Technology Co.,Ltd
+7868F7     (base 16)		YSTen Technology Co.,Ltd
+				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
+				Beijing    100101
+				CN
+
+00-4B-F3   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+004BF3     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+08-CC-A7   (hex)		Cisco Systems, Inc
+08CCA7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-96-AD   (hex)		Cisco Systems, Inc
+0896AD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-23-B2   (hex)		vivo Mobile Communication Co., Ltd.
+0823B2     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+88-C3-B3   (hex)		SOVICO
+88C3B3     (base 16)		SOVICO
+				2271-5 Nambusunhwan-ro, Seocho-gu
+				Seoul    06703
+				KR
+
+E0-51-24   (hex)		NXP Semiconductors
+E05124     (base 16)		NXP Semiconductors
+				411 E. Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-1D-A3   (hex)		SabiOso
+001DA3     (base 16)		SabiOso
+				189 S State Suite #250
+				Clearfield  Utah  84015
+				US
+
+54-2F-8A   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+542F8A     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+				Av. Buriti, 1900 – Setor B – Distrito Industrial
+				Manaus  Amazonas  69075-000
+				BR
+
+60-14-B3   (hex)		CyberTAN Technology Inc.
+6014B3     (base 16)		CyberTAN Technology Inc.
+				99 Park Ave III, Hsinchu Science Park
+				Hsinchu    308
+				TW
+
+10-56-11   (hex)		ARRIS Group, Inc.
+105611     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+34-78-77   (hex)		O-Net Communications (Shenzhen) Limited
+347877     (base 16)		O-Net Communications (Shenzhen) Limited
+				#10-1 South,Maqueling Industrial Park,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+00-20-CC   (hex)		DIGITAL SERVICES, LTD.
+0020CC     (base 16)		DIGITAL SERVICES, LTD.
+				9 WAYTE STREET
+				ENGLAND  PO6  3BS
+				GB
+
+68-9F-F0   (hex)		zte corporation
+689FF0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+5C-AF-06   (hex)		LG Electronics (Mobile Communications)
+5CAF06     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-17-9B   (hex)		CHANT SINCERE CO.,LTD
+00179B     (base 16)		CHANT SINCERE CO.,LTD
+				7F-2,NO.188,Sec 3,Ta Tung Rood,
+				Hsi Chih City  Taipei Hsien  221
+				TW
+
+1C-39-8A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+1C398A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E8-65-D4   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+E865D4     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+24-D5-1C   (hex)		Zhongtian broadband technology co., LTD 
+24D51C     (base 16)		Zhongtian broadband technology co., LTD 
+				Rudong hekou town Zhongtian industrial park
+				Nantong  jiangsu Province  226463
+				CN
+
+EC-43-F6   (hex)		Zyxel Communications Corporation
+EC43F6     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+60-C6-58   (hex)		PHYTRONIX Co.,Ltd.
+60C658     (base 16)		PHYTRONIX Co.,Ltd.
+				1877-3 Ootashimo-machi
+				Takamatsu  Kagawa  761-8073
+				JP
+
+FC-B5-8A   (hex)		Wapice Ltd.
+FCB58A     (base 16)		Wapice Ltd.
+				Yliopistonranta 5
+				Vaasa    65200
+				FI
+
+A4-62-DF   (hex)		DS Global. Co., LTD
+A462DF     (base 16)		DS Global. Co., LTD
+				3F, 107, Gasan digital 2-ro, Geumcheon-gu
+				Seoul    08505
+				KR
+
+4C-16-94   (hex)		shenzhen sibituo Technology Co., Ltd
+4C1694     (base 16)		shenzhen sibituo Technology Co., Ltd
+				15C Yuehua Park Nanshan Road Nanshan District
+				SHENZHEN  guangdong  518000
+				CN
+
+C8-14-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C81451     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-D4-37   (hex)		Inteno Broadband Technology AB
+44D437     (base 16)		Inteno Broadband Technology AB
+				Stensätravägen 13
+				Skärholmen  SE  127 39 
+				SE
+
+EC-E1-54   (hex)		Beijing Unisound Information Technology Co.,Ltd.
+ECE154     (base 16)		Beijing Unisound Information Technology Co.,Ltd.
+				Rm406,keyan Building,Tsinghua Hi-tech Park,High-tech Industrial Park North Area,Nanshan
+				Shenzhen    518057
+				CN
+
+6C-16-0E   (hex)		ShotTracker
+6C160E     (base 16)		ShotTracker
+				7220 W Frontage Rd
+				Merriam  KS  66203
+				US
+
+80-3A-0A   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+803A0A     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+0C-73-BE   (hex)		Dongguan Haimai Electronie Technology Co.,Ltd
+0C73BE     (base 16)		Dongguan Haimai Electronie Technology Co.,Ltd
+				Room 701，Yifeng Building7, No.8 Industrial Zone, Xianbian Road, Changan Town Xiaobian edge
+				Dongguan  Guangdong  518000
+				CN
+
+28-6F-7F   (hex)		Cisco Systems, Inc
+286F7F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F0-C8-50   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F0C850     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-01-4F   (hex)		Adtran Inc
+00014F     (base 16)		Adtran Inc
+				901 Explorer Blvd.
+				Huntsville  AL  35806-2807
+				US
+
+28-52-61   (hex)		Cisco Systems, Inc
+285261     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-AA-55   (hex)		Hunan Comtom Electronic Incorporated Co.,Ltd
+C8AA55     (base 16)		Hunan Comtom Electronic Incorporated Co.,Ltd
+				6 -7 Floor, Jindan Building B,Xiongtian Road, Furong District
+				changsha  Hunan  410126
+				CN
+
+20-78-0B   (hex)		Delta Faucet Company
+20780B     (base 16)		Delta Faucet Company
+				55 East 111th Street
+				Indianapolis  IN  46280
+				US
+
+88-09-AF   (hex)		Masimo Corporation
+8809AF     (base 16)		Masimo Corporation
+				40 Parker
+				Irvine    92618
+				US
+
+2C-D0-2D   (hex)		Cisco Systems, Inc
+2CD02D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-CC-83   (hex)		Juniper Networks
+9CCC83     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+64-DB-A0   (hex)		Select Comfort
+64DBA0     (base 16)		Select Comfort
+				9800 59th Ave N
+				Minneapolis  MN  55442
+				US
+
+F8-98-3A   (hex)		Leeman International (HongKong) Limited
+F8983A     (base 16)		Leeman International (HongKong) Limited
+				Number 13 first floor Y1 cultural creative park bantian
+				shen zhen     51800
+				CN
+
+4C-EC-EF   (hex)		Soraa, Inc.
+4CECEF     (base 16)		Soraa, Inc.
+				6500 Kaiser Dr Suite 110
+				Fremont  CA  94555
+				US
+
+1C-EF-CE   (hex)		bebro electronic GmbH
+1CEFCE     (base 16)		bebro electronic GmbH
+				MAx-Planck-Str. 6-8
+				Frickenhausen    72636
+				DE
+
+98-B6-E9   (hex)		Nintendo Co.,Ltd
+98B6E9     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+F0-15-B9   (hex)		PlayFusion Limited
+F015B9     (base 16)		PlayFusion Limited
+				St  Johns Innovation Centre
+				Cambridge    CB4 0WS
+				GB
+
+64-B0-A6   (hex)		Apple, Inc.
+64B0A6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-04-D0   (hex)		Apple, Inc.
+7C04D0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-FC-AC   (hex)		Apple, Inc.
+84FCAC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-0C-5C   (hex)		Apple, Inc.
+DC0C5C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-70-0D   (hex)		Apple, Inc.
+70700D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-E1-71   (hex)		Hewlett Packard
+30E171     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+18-65-90   (hex)		Apple, Inc.
+186590     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-62-14   (hex)		Apple, Inc.
+F86214     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-4F-43   (hex)		Apple, Inc.
+784F43     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-4D-7F   (hex)		Apple, Inc.
+404D7F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1D-72   (hex)		Wistron Corporation
+001D72     (base 16)		Wistron Corporation
+				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
+				Taipei Hsien    221
+				TW
+
+D8-19-7A   (hex)		Nuheara Ltd
+D8197A     (base 16)		Nuheara Ltd
+				Unit 5, 28 John St
+				Northbridge  WA  6003
+				AU
+
+4C-38-D5   (hex)		MITAC COMPUTING TECHNOLOGY CORPORATION
+4C38D5     (base 16)		MITAC COMPUTING TECHNOLOGY CORPORATION
+				3F., NO.1, R&D ROAD 2, HSINCHU SCIENCE PARK
+				HSINCHU    30076
+				TW
+
+54-B5-6C   (hex)		Xi'an NovaStar Tech Co., Ltd
+54B56C     (base 16)		Xi'an NovaStar Tech Co., Ltd
+				4F, Block D, Qinfeng Pavilion, Xi'an Software Park, No.68 Keji 2nd Rd.,
+				 Xi'an  Shanxi  710075
+				CN
+
+34-4C-C8   (hex)		Echodyne Corp
+344CC8     (base 16)		Echodyne Corp
+				2380 116th Ave NE
+				Bellevue   WA  98004
+				US
+
+64-13-6C   (hex)		zte corporation
+64136C     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+04-B6-48   (hex)		ZENNER
+04B648     (base 16)		ZENNER
+				Roemerstadt 6
+				Saarbruecken    66121
+				DE
+
+98-F1-99   (hex)		NEC Platforms, Ltd.
+98F199     (base 16)		NEC Platforms, Ltd.
+				2-3 Kandatsukasamachi
+				Chiyodaku  Tokyo  101-8532
+				JP
+
+18-40-A4   (hex)		Shenzhen Trylong Smart Science and Technology Co., Ltd.
+1840A4     (base 16)		Shenzhen Trylong Smart Science and Technology Co., Ltd.
+				15E, qingdian building, No#6007, Binhe road, futian district
+				Shenzhen city  Guangdong Province  518100
+				CN
+
+1C-48-CE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+1C48CE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+C8-0C-C8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C80CC8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-25-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0425C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-3E-7B   (hex)		Gafachi, Inc.
+603E7B     (base 16)		Gafachi, Inc.
+				1 W Main St., STE 650
+				Rochester  NY  14614
+				US
+
+4C-74-87   (hex)		Leader Phone Communication Technology Co., Ltd.
+4C7487     (base 16)		Leader Phone Communication Technology Co., Ltd.
+				121 Room (Park) No.1 Building, No.10 Xinghuo Road  Science City Feng-tai District, Beijing, China
+				Beijing    100070
+				CN
+
+AC-83-F3   (hex)		AMPAK Technology, Inc.
+AC83F3     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+CC-8C-DA   (hex)		Shenzhen Wei Da Intelligent Technology Go.,Ltd
+CC8CDA     (base 16)		Shenzhen Wei Da Intelligent Technology Go.,Ltd
+				5K, Block B,Yueshang Center Cultural Square Jianshe East Rd Longhua New District
+				Shenzhen    518109
+				CN
+
+D4-36-DB   (hex)		Jiangsu Toppower Automotive Electronics Co., Ltd
+D436DB     (base 16)		Jiangsu Toppower Automotive Electronics Co., Ltd
+				No. 2 Tuolanshan Road
+				Xuzhou  Jiangsu  221004
+				CN
+
+2C-DC-AD   (hex)		Wistron Neweb Corporation
+2CDCAD     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+6C-5C-14   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+6C5C14     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+E8-09-45   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+E80945     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+7C-25-87   (hex)		chaowifi.com
+7C2587     (base 16)		chaowifi.com
+				No. 502 1th Building TaiHe Square
+				HangZhou  QianJiangRoad  310002
+				CN
+
+2C-21-31   (hex)		Juniper Networks
+2C2131     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-50-1E   (hex)		Grass Valley, A Belden Brand
+00501E     (base 16)		Grass Valley, A Belden Brand
+				3499, Douglas B. Floreani
+				Montreal  Quebec  H4S 2C6
+				CA
+
+EC-0D-9A   (hex)		Mellanox Technologies, Inc.
+EC0D9A     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+90-D7-BE   (hex)		Wavelab Global Inc.
+90D7BE     (base 16)		Wavelab Global Inc.
+				12007 Sunrise Valley Drive, Suite 450
+				Reston  VA  20191
+				US
+
+24-4E-7B   (hex)		IEEE Registration Authority
+244E7B     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+30-AE-A4   (hex)		Espressif Inc.
+30AEA4     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+3C-FA-43   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3CFA43     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-5F-94   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+145F94     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-1F-82   (hex)		Cal-Comp Electronics & Communications Company Ltd.
+001F82     (base 16)		Cal-Comp Electronics & Communications Company Ltd.
+				No.147, Sec. 3, Beishen Rd
+				Shenkeng Dist  New Taipei City  ---
+				TW
+
+88-3C-1C   (hex)		MERCURY CORPORATION
+883C1C     (base 16)		MERCURY CORPORATION
+				90, Gajaeul-ro, Seo-gu
+				INCHEON    22830
+				KR
+
+00-21-44   (hex)		SS Telecoms
+002144     (base 16)		SS Telecoms
+				23 Botha Avenue
+				Centurion  Gauteng  0140
+				ZA
+
+00-6B-F1   (hex)		Cisco Systems, Inc
+006BF1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+28-34-A2   (hex)		Cisco Systems, Inc
+2834A2     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+78-23-AE   (hex)		ARRIS Group, Inc.
+7823AE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+20-71-9E   (hex)		SF Technology Co.,Ltd
+20719E     (base 16)		SF Technology Co.,Ltd
+				1/F,Block B,Building 1,ShenzhenSoftware Industry Base,Hi-Tech Industrial Park South
+				Shenzhen  Guangdong Province  518054
+				CN
+
+2C-C2-60   (hex)		Oracle Corporation 
+2CC260     (base 16)		Oracle Corporation 
+				Zarhin 13
+				Raanana    4366241
+				IL
+
+3C-3F-51   (hex)		2CRSI
+3C3F51     (base 16)		2CRSI
+				32 rue Jacobi-Netter
+				STRASBOURG  France  67200
+				FR
+
+3C-2A-F4   (hex)		Brother Industries, LTD.
+3C2AF4     (base 16)		Brother Industries, LTD.
+				15-1, Naeshirocho, Mizuho-ku
+				NAGOYA    4678561
+				JP
+
+C0-85-4C   (hex)		Ragentek Technology Group
+C0854C     (base 16)		Ragentek Technology Group
+				D10/D11，No.3188, Xiupu Road, PuDong District, Shanghai
+				Shanghai    201315
+				CN
+
+00-24-AC   (hex)		Hangzhou DPtech Technologies Co., Ltd.
+0024AC     (base 16)		Hangzhou DPtech Technologies Co., Ltd.
+				Huarong Shidai Bld., NO.3880,Jiang-Nan Avenue, Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+50-58-4F   (hex)		waytotec,Inc.
+50584F     (base 16)		waytotec,Inc.
+				#604-4,B-Dong,Bundang Technopark,148,Yatap-dong,Bundang-gu,
+				Seongnam-si  Gyeonggi-do  13511
+				KR
+
+08-5D-DD   (hex)		MERCURY CORPORATION
+085DDD     (base 16)		MERCURY CORPORATION
+				90, Gajaeul-ro, Seo-gu
+				INCHEON    22830
+				KR
+
+8C-60-E7   (hex)		MPGIO CO.,LTD
+8C60E7     (base 16)		MPGIO CO.,LTD
+				MPGIO Bldg., 98 Uijeong St.,
+				Uijeongbu  Korea / Gyeonggi  11623
+				KR
+
+CC-94-70   (hex)		Kinestral Technologies, Inc.
+CC9470     (base 16)		Kinestral Technologies, Inc.
+				400 E Jamie Ct., Ste. 201
+				South San Francisco  CA  94080
+				US
+
+B4-39-D6   (hex)		ProCurve Networking by HP
+B439D6     (base 16)		ProCurve Networking by HP
+				60 Alexandra Terrace
+				0000    118502
+				SG
+
+34-F3-9A   (hex)		Intel Corporate
+34F39A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+D8-16-C1   (hex)		DEWAV (HK) ELECTRONICS LIMITED
+D816C1     (base 16)		DEWAV (HK) ELECTRONICS LIMITED
+				UNIT NO.1-2, 06/F., PERFECT INDUSTRIAL BUILDING,NO. 31 TAI YAU STREET, SAN PO KONG
+				KOWLOON, HONG KONG    510610
+				CN
+
+CC-61-E5   (hex)		Motorola Mobility LLC, a Lenovo Company
+CC61E5     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+8C-8A-BB   (hex)		Beijing Orient View Technology Co., Ltd.
+8C8ABB     (base 16)		Beijing Orient View Technology Co., Ltd.
+				Building NO.1, LiYe Road 7
+				Huilongguan Town  Changping District, Beijing  102206
+				CN
+
+00-03-9B   (hex)		NetChip Technology, Inc.
+00039B     (base 16)		NetChip Technology, Inc.
+				335 Pioneer Way
+				Mountain View  CA  94041
+				US
+
+9C-8B-A0   (hex)		Apple, Inc.
+9C8BA0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-08-8D   (hex)		Apple, Inc.
+CC088D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-A4-ED   (hex)		Xiaomi Communications Co Ltd
+38A4ED     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+B8-99-19   (hex)		7signal Solutions, Inc
+B89919     (base 16)		7signal Solutions, Inc
+				526 S. Main Street
+				Akron  OH  44311
+				US
+
+40-FE-0D   (hex)		MAXIO
+40FE0D     (base 16)		MAXIO
+				1101-1 digital empire A, 387 simin-daero dongan-gu
+				anyang-si  kyunggi-do  14057
+				KR
+
+AC-64-DD   (hex)		IEEE Registration Authority
+AC64DD     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-B8-19   (hex)		Nokia
+94B819     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+78-7D-48   (hex)		ITEL MOBILE LIMITED
+787D48     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+88-71-E5   (hex)		Amazon Technologies Inc.
+8871E5     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+BC-39-D9   (hex)		Z-TEC
+BC39D9     (base 16)		Z-TEC
+				Donyu 1 Ro
+				Paju  Kyeongkido  10832
+				KR
+
+60-9A-C1   (hex)		Apple, Inc.
+609AC1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-8D-08   (hex)		Apple, Inc.
+748D08     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-B0-EE   (hex)		Ajile Systems, Inc.
+00B0EE     (base 16)		Ajile Systems, Inc.
+				920 Saratoga Ave.
+				San Jose  CA  95129
+				US
+
+20-DB-AB   (hex)		Samsung Electronics Co., Ltd.
+20DBAB     (base 16)		Samsung Electronics Co., Ltd.
+				416, Maetan-3Dong, Yeongtong-Gu
+				Suwon  Geyonggi-Do  443-742
+				KR
+
+38-3A-21   (hex)		IEEE Registration Authority
+383A21     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D8-38-0D   (hex)		SHENZHEN IP-COM Network Co.,Ltd
+D8380D     (base 16)		SHENZHEN IP-COM Network Co.,Ltd
+				No.1001,Zhongshangyuan Road,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+88-AD-43   (hex)		PEGATRON CORPORATION
+88AD43     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+B4-EF-FA   (hex)		Lemobile Information Technology (Beijing) Co., Ltd.
+B4EFFA     (base 16)		Lemobile Information Technology (Beijing) Co., Ltd.
+				5/F LeEco Building, 105 Yaojiayuan Road, Chaoyang District 
+				Beijing  Beijing  100025
+				CN
+
+6C-71-BD   (hex)		EZELINK TELECOM
+6C71BD     (base 16)		EZELINK TELECOM
+				Bay Square Building 06 - Office No 105
+				Dubai  Dubai  111581
+				AE
+
+60-EF-C6   (hex)		Shenzhen Chima Technologies Co Limited
+60EFC6     (base 16)		Shenzhen Chima Technologies Co Limited
+				5F, TongXin Technology Park,HengGang,LongGang,Shenzhen,China
+				Shenzhen  GuangDong  518115
+				CN
+
+00-1F-C6   (hex)		ASUSTek COMPUTER INC.
+001FC6     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+B0-C1-28   (hex)		Adler ELREHA GmbH
+B0C128     (base 16)		Adler ELREHA GmbH
+				Schwetzinger Str. 103
+				Hockenheim  Baden-Württemberg  D-68766
+				DE
+
+30-87-D9   (hex)		Ruckus Wireless
+3087D9     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+FC-CA-C4   (hex)		LifeHealth, LLC
+FCCAC4     (base 16)		LifeHealth, LLC
+				2656 Patton Rd
+				Roseville  MN  55113
+				US
+
+F0-D9-B2   (hex)		EXO S.A.
+F0D9B2     (base 16)		EXO S.A.
+				Av. Chiclana 3444
+				Buenos Aires    1260
+				AR
+
+E4-C8-01   (hex)		BLU Products Inc
+E4C801     (base 16)		BLU Products Inc
+				10814 NW 33rd Street
+				Miami  FL  33172
+				US
+
+F0-98-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F09838     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-0E-14   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+C80E14     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+AC-63-BE   (hex)		Amazon Technologies Inc.
+AC63BE     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+F8-1D-78   (hex)		IEEE Registration Authority
+F81D78     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+38-F7-B2   (hex)		SEOJUN ELECTRIC
+38F7B2     (base 16)		SEOJUN ELECTRIC
+				468 Gangseo-ro, 07573, SEOJUN ELECTRIC Ace Techno Tower 805
+				Seoul    07573
+				KR
+
+10-12-50   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+101250     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+78-02-B7   (hex)		ShenZhen Ultra Easy Technology CO.,LTD
+7802B7     (base 16)		ShenZhen Ultra Easy Technology CO.,LTD
+				608,Building 2,Guangxingyuan Industrial Park A District,
+				Baoyuan Rd  ShenZhen,Guangdong  518102
+				CN
+
+64-61-84   (hex)		VELUX
+646184     (base 16)		VELUX
+				Baekgaardsvej 40
+				Skjern    6900
+				DK
+
+E8-E5-D6   (hex)		Samsung Electronics Co.,Ltd
+E8E5D6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-7E-75   (hex)		Samsung Electronics Co.,Ltd
+C87E75     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-26-5F   (hex)		Samsung Electronics Co.,Ltd
+00265F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-23-3A   (hex)		Samsung Electronics Co.,Ltd
+00233A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-6A-0A   (hex)		ASKEY COMPUTER CORP
+086A0A     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+98-E7-F4   (hex)		Hewlett Packard
+98E7F4     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+00-07-AB   (hex)		Samsung Electronics Co.,Ltd
+0007AB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-24-86   (hex)		DesignArt Networks
+002486     (base 16)		DesignArt Networks
+				4 Ha'haroshet St
+				Ra'anana    43101
+				IL
+
+00-24-78   (hex)		Mag Tech Electronics Co Limited
+002478     (base 16)		Mag Tech Electronics Co Limited
+				Flat / Room T78 GOF Bangkok Building
+				Sheung Wan  HK  
+				HK
+
+38-2D-D1   (hex)		Samsung Electronics Co.,Ltd
+382DD1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-1B-2C   (hex)		ATRON electronic GmbH
+001B2C     (base 16)		ATRON electronic GmbH
+				Am Ziegelstadel 12 + 14
+				Markt Schwaben    85570
+				DE
+
+90-34-FC   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+9034FC     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-14-27   (hex)		JazzMutant
+001427     (base 16)		JazzMutant
+				2 allee du Doyen Georges Brus
+				Pessac    33600
+				FR
+
+00-1E-84   (hex)		Pika Technologies Inc.
+001E84     (base 16)		Pika Technologies Inc.
+				535 Legget Drive
+				Ottawa  Ontario  K2K 3B8
+				CA
+
+10-DD-B1   (hex)		Apple, Inc.
+10DDB1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-23-29   (hex)		DDRdrive LLC
+002329     (base 16)		DDRdrive LLC
+				384 Madeline CT
+				Palo Alto  CA  94306
+				US
+
+00-26-AD   (hex)		Arada Systems, Inc.
+0026AD     (base 16)		Arada Systems, Inc.
+				1024 Morse Avenue
+				Sunnyvale  CA  94089
+				US
+
+FC-1F-19   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+FC1F19     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				Suwon    443-743
+				US
+
+84-0B-2D   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+840B2D     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				SUWON  KYUNGGI-DO  443-743
+				KR
+
+20-64-32   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+206432     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				Suwon  Gyunggi-Do  443-743
+				KR
+
+B4-07-F9   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+B407F9     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				Suwon-Si, Gyeonggi_Do, Korea
+				Suwon  Gyeonggi_Do  443-743
+				KR
+
+88-9F-FA   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+889FFA     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+8C-7C-B5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+8C7CB5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C4-46-19   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+C44619     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+50-63-13   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+506313     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+60-D8-19   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+60D819     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+F8-2F-A8   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+F82FA8     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+0C-84-DC   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+0C84DC     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-16-6C   (hex)		Samsung Electronics Co.,Ltd
+00166C     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3Dong,Yeongtong-Gu
+				Suwon  Gyeonggi-Do  443-742
+				KR
+
+18-1E-B0   (hex)		Samsung Electronics Co.,Ltd
+181EB0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-7F-20   (hex)		Sagemcom Broadband SAS
+247F20     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E8-03-9A   (hex)		Samsung Electronics Co.,Ltd
+E8039A     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3Dong, Yeongtong-Gu
+				Suwon  Geyonggi  443742
+				KR
+
+30-CD-A7   (hex)		Samsung Electronics Co.,Ltd
+30CDA7     (base 16)		Samsung Electronics Co.,Ltd
+				416 MAETAN 3-DONG
+				SUWON- SI    443-742
+				US
+
+00-12-47   (hex)		Samsung Electronics Co.,Ltd
+001247     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi-City  Gyeong-Buk  730-350
+				KR
+
+00-15-99   (hex)		Samsung Electronics Co.,Ltd
+001599     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3Dong, Yeongtong-Gu
+				Suwon  AL  443-742
+				US
+
+00-12-FB   (hex)		Samsung Electronics Co.,Ltd
+0012FB     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3Dong, Yeongtong-Gu
+				Suwon-City  Gyeonggi-Do  443-742
+				KR
+
+D0-66-7B   (hex)		Samsung Electronics Co.,Ltd
+D0667B     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu
+				Suwon  Gyeonggi-do  443742
+				KR
+
+B8-5E-7B   (hex)		Samsung Electronics Co.,Ltd
+B85E7B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-92-FB   (hex)		Samsung Electronics Co.,Ltd
+E492FB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+6C-B7-F4   (hex)		Samsung Electronics Co.,Ltd
+6CB7F4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+2C-44-01   (hex)		Samsung Electronics Co.,Ltd
+2C4401     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B8-D9-CE   (hex)		Samsung Electronics Co.,Ltd
+B8D9CE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-66-AA   (hex)		Samsung Electronics Co.,Ltd
+1C66AA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-8B-FE   (hex)		Samsung Electronics Co.,Ltd
+3C8BFE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-E8-B2   (hex)		Samsung Electronics Co.,Ltd
+D4E8B2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-89-FD   (hex)		Samsung Electronics Co.,Ltd
+1489FD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-85-1F   (hex)		Samsung Electronics Co.,Ltd
+BC851F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-15-B9   (hex)		Samsung Electronics Co.,Ltd
+0015B9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1
+				Gumi-City  Gyeong-Buk  730-350
+				KR
+
+00-24-91   (hex)		Samsung Electronics Co.,Ltd
+002491     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-23-39   (hex)		Samsung Electronics Co.,Ltd
+002339     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-01-BB   (hex)		Samsung Electronics Co.,Ltd
+5001BB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-01-42   (hex)		MaxMedia Technology Limited
+C40142     (base 16)		MaxMedia Technology Limited
+				5F, No. 113, Jian 2nd Rd. Jhonghe District.
+				New Taipei City    23585
+				TW
+
+84-30-E5   (hex)		SkyHawke Technologies, LLC
+8430E5     (base 16)		SkyHawke Technologies, LLC
+				274 Commerce Park Dr, Ste M
+				Ridgeland  MS  39157
+				US
+
+1C-77-F6   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+1C77F6     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+58-E3-26   (hex)		Compass Technologies Inc.
+58E326     (base 16)		Compass Technologies Inc.
+				Unit 1012 C-dong, Woolim Lion's Valley
+				Seoul  Seoul  153-786
+				KR
+
+00-1B-2A   (hex)		Cisco Systems, Inc
+001B2A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-9D-DC   (hex)		2Wire Inc
+749DDC     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose    95131
+				US
+
+14-DD-E5   (hex)		MPMKVVCL
+14DDE5     (base 16)		MPMKVVCL
+				NISHTHA PARISAR, GOVINDPURA
+				BHOPAL  MADHYA PRADESH  462023
+				IN
+
+00-1A-09   (hex)		Wayfarer Transit Systems Ltd
+001A09     (base 16)		Wayfarer Transit Systems Ltd
+				10 Willis Way
+				Poole  Dorset  BH15 3SS
+				GB
+
+74-23-44   (hex)		Xiaomi Communications Co Ltd
+742344     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+54-88-0E   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+54880E     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+F0-25-B7   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+F025B7     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+F0-43-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F04347     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-B2-B2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9CB2B2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-C8-3A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A8C83A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-72-B1   (hex)		Samsung Electronics Co.,Ltd
+BC72B1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+78-F7-BE   (hex)		Samsung Electronics Co.,Ltd
+78F7BE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+68-48-98   (hex)		Samsung Electronics Co.,Ltd
+684898     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-23-BA   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+3423BA     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong    24180
+				US
+
+00-36-76   (hex)		ARRIS Group, Inc.
+003676     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+FC-8E-7E   (hex)		ARRIS Group, Inc.
+FC8E7E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+FC-6F-B7   (hex)		ARRIS Group, Inc.
+FC6FB7     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D4-2C-0F   (hex)		ARRIS Group, Inc.
+D42C0F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+40-0E-85   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+400E85     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong    24180
+				US
+
+C8-BA-94   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+C8BA94     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+84-38-38   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+843838     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+A0-55-DE   (hex)		ARRIS Group, Inc.
+A055DE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+80-F5-03   (hex)		ARRIS Group, Inc.
+80F503     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+44-AA-F5   (hex)		ARRIS Group, Inc.
+44AAF5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E0-9D-FA   (hex)		Wanan Hongsheng Electronic Co.Ltd
+E09DFA     (base 16)		Wanan Hongsheng Electronic Co.Ltd
+				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
+				Wanan  China/jiangxi  343800
+				CN
+
+5C-3C-27   (hex)		Samsung Electronics Co.,Ltd
+5C3C27     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+70-A8-4C   (hex)		MONAD., Inc.
+70A84C     (base 16)		MONAD., Inc.
+				702, Hanlla Sigma Vally, 545, Dunchon-daero, Jungwon-gu
+				Seongnam-Shi    13215
+				KR
+
+24-E4-3F   (hex)		Wenzhou Kunmei Communication Technology Co.,Ltd.
+24E43F     (base 16)		Wenzhou Kunmei Communication Technology Co.,Ltd.
+				Baitawang industrial zone,Yueqing,Zhejiang
+				Yueqing  Zhejiang  310025
+				CN
+
+28-7A-EE   (hex)		ARRIS Group, Inc.
+287AEE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+88-79-7E   (hex)		Motorola Mobility LLC, a Lenovo Company
+88797E     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+30-58-90   (hex)		Frontier Silicon Ltd
+305890     (base 16)		Frontier Silicon Ltd
+				137 Euston Road
+				London    NW12AA
+				GB
+
+70-8B-CD   (hex)		ASUSTek COMPUTER INC.
+708BCD     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+00-25-8B   (hex)		Mellanox Technologies, Inc.
+00258B     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+00-56-2B   (hex)		Cisco Systems, Inc
+00562B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E8-FD-90   (hex)		Turbostor
+E8FD90     (base 16)		Turbostor
+				47800 Westinghouse Drive
+				Fremont  CA  94539
+				US
+
+2C-AC-44   (hex)		CONEXTOP
+2CAC44     (base 16)		CONEXTOP
+				Room 608, 6/F, Electric Building , High-tech Park , Nanshan
+				Shenzhen    51800
+				CN
+
+D0-13-FD   (hex)		LG Electronics (Mobile Communications)
+D013FD     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+BC-64-4B   (hex)		ARRIS Group, Inc.
+BC644B     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+60-64-05   (hex)		Texas Instruments
+606405     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+18-99-F5   (hex)		Sichuan Changhong Electric Ltd.
+1899F5     (base 16)		Sichuan Changhong Electric Ltd.
+				No.35,East MianXin Road,MianYang,Sichaun,China.
+				MianYang  SiChuan  PRC 621000
+				CN
+
+00-25-C3   (hex)		21168
+0025C3     (base 16)		21168
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+00-0F-57   (hex)		CABLELOGIC Co., Ltd.
+000F57     (base 16)		CABLELOGIC Co., Ltd.
+				3F., Hwain Bldg., 1559-12 Seocho 3-dong,
+				Seoul    137-873
+				KR
+
+00-03-42   (hex)		Nortel Networks
+000342     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+A4-82-69   (hex)		Datrium, Inc.
+A48269     (base 16)		Datrium, Inc.
+				385 Moffett Park Drive
+				Sunnyvale  CA  94089
+				US
+
+10-E6-8F   (hex)		KWANGSUNG ELECTRONICS KOREA CO.,LTD.
+10E68F     (base 16)		KWANGSUNG ELECTRONICS KOREA CO.,LTD.
+				356-3, Gongdan-ro
+				Gunpo-si  Gyeonggi-do  15808
+				KR
+
+4C-FA-CA   (hex)		Cambridge Industries(Group) Co.,Ltd.
+4CFACA     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				5/F,Building 8, 2388 ChenHang Road, MinHang District
+				shanghai    201114
+				CN
+
+18-AB-F5   (hex)		Ultra Electronics Electrics
+18ABF5     (base 16)		Ultra Electronics Electrics
+				Kingsditch Lane
+				Cheltenham  Gloucestershire  GL51 9PG
+				GB
+
+B0-3E-B0   (hex)		MICRODIA Ltd.
+B03EB0     (base 16)		MICRODIA Ltd.
+				Suites 1608-1610, 16/F., Prosperity Centre, 25 Chong Yip Street,
+				Kwun Tong  Kowloon,  000000
+				HK
+
+00-15-91   (hex)		RLW Inc.
+001591     (base 16)		RLW Inc.
+				2029 Cato Ave.
+				State College  PA  16801
+				US
+
+00-18-2E   (hex)		XStreamHD
+00182E     (base 16)		XStreamHD
+				7900B Westpark Drive
+				McLean  VA  22102
+				US
+
+00-12-83   (hex)		Nortel Networks
+001283     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-11-F9   (hex)		Nortel Networks
+0011F9     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-11-58   (hex)		Nortel Networks
+001158     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-0F-6A   (hex)		Nortel Networks
+000F6A     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-0E-62   (hex)		Nortel Networks
+000E62     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-0C-F8   (hex)		Nortel Networks
+000CF8     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-26-F1   (hex)		ProCurve Networking by HP
+0026F1     (base 16)		ProCurve Networking by HP
+				60 Alexandra Terrace
+				0000    118502
+				SG
+
+38-0D-D4   (hex)		Primax Electronics Ltd.
+380DD4     (base 16)		Primax Electronics Ltd.
+				8F,No. 669, Ruey Kuang Road, Neihu
+				Taipei    114
+				TW
+
+98-FD-B4   (hex)		Primax Electronics Ltd.
+98FDB4     (base 16)		Primax Electronics Ltd.
+				No. 669, Ruey Kuang Road, Neihu
+				Taipei  Taiwan,  R.O.C.
+				TW
+
+D8-C4-6A   (hex)		Murata Manufacturing Co., Ltd.
+D8C46A     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+D8-FB-68   (hex)		Cloud Corner Ltd.
+D8FB68     (base 16)		Cloud Corner Ltd.
+				Cloud Corner Smart Bldg, Mei Ju Center NO.39 Dongcheng South Road
+				Dong Guan  Guang Dong  523129
+				CN
+
+68-53-88   (hex)		P&S Technology
+685388     (base 16)		P&S Technology
+				216 Deajiro
+				Yongin-si  Gyeonggi-do  448-813
+				KR
+
+98-2F-3C   (hex)		Sichuan Changhong Electric Ltd.
+982F3C     (base 16)		Sichuan Changhong Electric Ltd.
+				35 East Mianxing Road,High-Tech Park,
+				MianYang  SiChuan  621000
+				CN
+
+14-C1-FF   (hex)		ShenZhen QianHai Comlan communication Co.,LTD
+14C1FF     (base 16)		ShenZhen QianHai Comlan communication Co.,LTD
+				Shenzhen Nanshan district keyuan road Dongfang science and technology building,  room 2407.
+				ShenZhen  GuangDong  518000
+				CN
+
+00-04-17   (hex)		ELAU AG
+000417     (base 16)		ELAU AG
+				Dillberg 12
+				    
+				DE
+
+EC-FA-AA   (hex)		The IMS Company
+ECFAAA     (base 16)		The IMS Company
+				2929 E. Imperial Highway
+				Brea  CA  92821
+				US
+
+F0-07-86   (hex)		Shandong Bittel Electronics Co., Ltd
+F00786     (base 16)		Shandong Bittel Electronics Co., Ltd
+				No.1 Rizhao North Road
+				Rizhao  Shandong  276800
+				CN
+
+00-D0-F6   (hex)		Nokia
+00D0F6     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+54-A6-19   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+54A619     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+00-09-97   (hex)		Nortel Networks
+000997     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1C-EB   (hex)		Nortel Networks
+001CEB     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1C-17   (hex)		Nortel Networks
+001C17     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1A-8F   (hex)		Nortel Networks
+001A8F     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-17-D1   (hex)		Nortel Networks
+0017D1     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+88-83-22   (hex)		Samsung Electronics Co.,Ltd
+888322     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E8-93-09   (hex)		Samsung Electronics Co.,Ltd
+E89309     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-14-C7   (hex)		Nortel Networks
+0014C7     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1D-AF   (hex)		Nortel Networks
+001DAF     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+88-A6-C6   (hex)		Sagemcom Broadband SAS
+88A6C6     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+94-D4-69   (hex)		Cisco Systems, Inc
+94D469     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+88-2B-D7   (hex)		ADDÉNERGIE  TECHNOLOGIES
+882BD7     (base 16)		ADDÉNERGIE  TECHNOLOGIES
+				533 avenue de la montagne LOCAL 121
+				Shawinigan  Quebec  G9N 0A3
+				CA
+
+00-90-CC   (hex)		PLANEX COMMUNICATIONS INC.
+0090CC     (base 16)		PLANEX COMMUNICATIONS INC.
+				2F FENISSAY Ebisu Bldg
+				Shibuya-ku,  Tokyo  150-0011
+				JP
+
+20-57-AF   (hex)		Shenzhen FH-NET OPTOELECTRONICS CO.,LTD
+2057AF     (base 16)		Shenzhen FH-NET OPTOELECTRONICS CO.,LTD
+				5/F Building D1 TCL International E City NO.1001 Zhong  shan  yuan Rd,  Nanshan District Shenzhen china 
+				Shenzhen  GuangDong  518055
+				CN
+
+54-DC-1D   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+54DC1D     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+				Road NO2, West of Industrial Park,North of Science & Technology Park
+				Dongguan  Guangdong  518057
+				CN
+
+AC-A2-13   (hex)		Shenzhen Bilian electronic CO.,LTD
+ACA213     (base 16)		Shenzhen Bilian electronic CO.,LTD
+				NO 268，Fuqian Rd,Jutang Community
+				shenzhen  guangdong  518110
+				CN
+
+3C-33-00   (hex)		Shenzhen Bilian electronic CO.,LTD
+3C3300     (base 16)		Shenzhen Bilian electronic CO.,LTD
+				NO 268，Fuqian Rd,Jutang Community,Guanlan town , LongHua new district
+				Shenzhen  Guangdong  518110
+				CN
+
+6C-D0-32   (hex)		LG Electronics
+6CD032     (base 16)		LG Electronics
+				16, Woomyeon-dong, Seocho-gu
+				Seoul    137-724
+				KR
+
+3C-BD-D8   (hex)		LG ELECTRONICS INC
+3CBDD8     (base 16)		LG ELECTRONICS INC
+				19-1, CHEONGHO-RI, JINWI-MYEON
+				PYEONGTAEK  GYEONGGI-DO  451-713
+				KR
+
+34-4D-F7   (hex)		LG Electronics (Mobile Communications)
+344DF7     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+58-3F-54   (hex)		LG Electronics (Mobile Communications)
+583F54     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-22-CF   (hex)		PLANEX COMMUNICATIONS INC.
+0022CF     (base 16)		PLANEX COMMUNICATIONS INC.
+				2F F ・ NISSAY Ebisu Bldg3-16-3
+				Shibuya-ku  Tokyo  150-0011
+				JP
+
+E4-17-D8   (hex)		8BITDO TECHNOLOGY HK LIMITED
+E417D8     (base 16)		8BITDO TECHNOLOGY HK LIMITED
+				Rooms 1318-19, 13/F, Hollywood Plaza, 610 Nathan Road, Mongkok, Kowloon, Hong Kong
+				Hong Kong  Hong Kong  000000
+				CN
+
+9C-D3-32   (hex)		PLC Technology Ltd
+9CD332     (base 16)		PLC Technology Ltd
+				Nauchny proezd, 17
+				Moscow  Select State  117246
+				RU
+
+38-F8-CA   (hex)		OWIN Inc.
+38F8CA     (base 16)		OWIN Inc.
+				Chosunref 5fl,577,Seolleung-ro,Gangnam-gu
+				Seoul    682-20
+				KR
+
+44-33-4C   (hex)		Shenzhen Bilian electronic CO.,LTD
+44334C     (base 16)		Shenzhen Bilian electronic CO.,LTD
+				NO 268
+				Shenzhen  Guangdong  518110
+				CN
+
+64-89-9A   (hex)		LG Electronics (Mobile Communications)
+64899A     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-21-05   (hex)		Alcatel-Lucent IPD
+002105     (base 16)		Alcatel-Lucent IPD
+				701 E. Middlefield Rd.
+				Mountain View  CA  94043
+				US
+
+00-1B-C5   (hex)		IEEE Registration Authority
+001BC5     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+48-DF-37   (hex)		Hewlett Packard Enterprise
+48DF37     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+C0-E4-2D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+C0E42D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+8C-A6-DF   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+8CA6DF     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+84-16-F9   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+8416F9     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+18-D6-C7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+18D6C7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+78-C3-E9   (hex)		Samsung Electronics Co.,Ltd
+78C3E9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+8C-1A-BF   (hex)		Samsung Electronics Co.,Ltd
+8C1ABF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-CB-F8   (hex)		Samsung Electronics Co.,Ltd
+30CBF8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-CB-FD   (hex)		Samsung Electronics Co.,Ltd
+A0CBFD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-5D-75   (hex)		Samsung Electronics Co.,Ltd
+E45D75     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-E0-4D   (hex)		INTERNET INITIATIVE JAPAN, INC
+00E04D     (base 16)		INTERNET INITIATIVE JAPAN, INC
+				1-4, SANBAN-CHO, CHIYODA-KU
+				  TOKYO 102  
+				JP
+
+F8-A9-D0   (hex)		LG Electronics (Mobile Communications)
+F8A9D0     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+CC-FA-00   (hex)		LG Electronics (Mobile Communications)
+CCFA00     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+74-A7-22   (hex)		LG Electronics (Mobile Communications)
+74A722     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+F0-1C-13   (hex)		LG Electronics (Mobile Communications)
+F01C13     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+58-FC-DB   (hex)		IEEE Registration Authority
+58FCDB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B0-C5-CA   (hex)		IEEE Registration Authority
+B0C5CA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+74-19-F8   (hex)		IEEE Registration Authority
+7419F8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A8-16-B2   (hex)		LG Electronics (Mobile Communications)
+A816B2     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+64-BC-0C   (hex)		LG Electronics (Mobile Communications)
+64BC0C     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+90-C6-82   (hex)		IEEE Registration Authority
+90C682     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C0-1A-DA   (hex)		Apple, Inc.
+C01ADA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-00-31   (hex)		QPSX COMMUNICATIONS, LTD.
+000031     (base 16)		QPSX COMMUNICATIONS, LTD.
+				33 RICHARDSON STREET
+				Western    00000
+				AU
+
+00-0E-1E   (hex)		QLogic Corporation
+000E1E     (base 16)		QLogic Corporation
+				26650 Aliso Viejo Parkway
+				Aliso Viejo  CA  92656
+				US
+
+00-14-D1   (hex)		TRENDnet, Inc.
+0014D1     (base 16)		TRENDnet, Inc.
+				20675 Manhattan Place
+				Torrance  CA  90501
+				US
+
+CC-52-AF   (hex)		Universal Global Scientific Industrial Co., Ltd.
+CC52AF     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351, TAIPING RD.
+				nan tou  NAN-TOU  542
+				TW
+
+00-1C-14   (hex)		VMware, Inc.
+001C14     (base 16)		VMware, Inc.
+				3401 Hillview Avenue
+				Palo Alto  CA  94304
+				US
+
+00-50-56   (hex)		VMware, Inc.
+005056     (base 16)		VMware, Inc.
+				3401 Hillview Avenue
+				PALO ALTO  CA  94304
+				US
+
+00-12-1C   (hex)		PARROT SA
+00121C     (base 16)		PARROT SA
+				174 Quai de Jemmapes
+				Paris    75010
+				FR
+
+90-03-B7   (hex)		PARROT SA
+9003B7     (base 16)		PARROT SA
+				174 Quai de Jemmapes
+				Paris    75010
+				FR
+
+20-87-56   (hex)		SIEMENS AG
+208756     (base 16)		SIEMENS AG
+				Oestliche Rheinbrueckenstrasse 50
+				Karlsruhe  Baden-Württemberg  76187
+				DE
+
+74-B4-72   (hex)		CIESSE
+74B472     (base 16)		CIESSE
+				Via G. di Vittorio, 66
+				Rignano Sull'Arno  Florence  50067
+				IT
+
+FC-F1-52   (hex)		Sony Corporation
+FCF152     (base 16)		Sony Corporation
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+48-3C-0C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+483C0C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-9B-AD   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+309BAD     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
+				Dong Guan   Guang Dong  523860
+				CN
+
+00-1B-B1   (hex)		Wistron Neweb Corporation
+001BB1     (base 16)		Wistron Neweb Corporation
+				No. 10-1, Li-hsin Road I, Hsinchu Science Park,
+				Hsinchu    300
+				TW
+
+00-80-F7   (hex)		Zenith Electronics Corporation
+0080F7     (base 16)		Zenith Electronics Corporation
+				1000 MILWAUKEE AVENUE
+				GLENVIEW  IL  60025
+				US
+
+BC-30-7D   (hex)		Wistron Neweb Corporation
+BC307D     (base 16)		Wistron Neweb Corporation
+				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
+				HsinChu  Taiwan  308
+				TW
+
+48-A9-D2   (hex)		Wistron Neweb Corporation
+48A9D2     (base 16)		Wistron Neweb Corporation
+				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
+				HsinChu  Taiwan  308
+				TW
+
+80-EA-23   (hex)		Wistron Neweb Corporation
+80EA23     (base 16)		Wistron Neweb Corporation
+				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
+				HsinChu  Taiwan  308
+				TW
+
+00-27-13   (hex)		Universal Global Scientific Industrial Co., Ltd.
+002713     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351,SEC.1, TAIPING RD.
+				TSAOTUEN,  NANTOU  54261
+				TW
+
+BC-30-7E   (hex)		Wistron Neweb Corporation
+BC307E     (base 16)		Wistron Neweb Corporation
+				20 Park Avenue II.
+				Hsinchu    30808854
+				TW
+
+08-95-2A   (hex)		Technicolor CH USA Inc.
+08952A     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+44-32-C8   (hex)		Technicolor CH USA Inc.
+4432C8     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+38-A2-8C   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+38A28C     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+B4-A5-EF   (hex)		Sercomm Corporation.
+B4A5EF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+84-9D-64   (hex)		SMC Corporation
+849D64     (base 16)		SMC Corporation
+				4-2-2, Kinunodai
+				Tsukuba Mirai-shi  Ibaraki-ken  300-2493
+				JP
+
+00-10-C1   (hex)		OI ELECTRIC CO.,LTD
+0010C1     (base 16)		OI ELECTRIC CO.,LTD
+				7-3-16 KIKUNA
+				YOKOHAMA  KANAGAWA-KEN  222-0011
+				JP
+
+28-BE-9B   (hex)		Technicolor CH USA Inc.
+28BE9B     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+FC-52-8D   (hex)		Technicolor CH USA Inc.
+FC528D     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+50-65-83   (hex)		Texas Instruments
+506583     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B0-91-22   (hex)		Texas Instruments
+B09122     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+FC-51-A4   (hex)		ARRIS Group, Inc.
+FC51A4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+98-57-D3   (hex)		HON HAI-CCPBG  PRECISION IND.CO.,LTD.
+9857D3     (base 16)		HON HAI-CCPBG  PRECISION IND.CO.,LTD.
+				5F, No.9,Li-Hsin Road V,Science Park
+				Hsinchu    300
+				TW
+
+FC-F5-28   (hex)		Zyxel Communications Corporation
+FCF528     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+00-A0-C5   (hex)		Zyxel Communications Corporation
+00A0C5     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+A0-9E-1A   (hex)		Polar Electro Oy
+A09E1A     (base 16)		Polar Electro Oy
+				Professorintie 5
+				Kempele  Oulu  90440
+				FI
+
+1C-D6-BD   (hex)		LEEDARSON LIGHTING CO., LTD.
+1CD6BD     (base 16)		LEEDARSON LIGHTING CO., LTD.
+				No. 1511, 2nd Fanghu North Rd., Huli District
+				Xiamen  Fugian  361010
+				CN
+
+D0-D9-4F   (hex)		IEEE Registration Authority
+D0D94F     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-1E-04   (hex)		Hanson Research Corporation
+001E04     (base 16)		Hanson Research Corporation
+				9810 Variel Ave.
+				Chatsworth  CA  91311
+				US
+
+60-C0-BF   (hex)		ON Semiconductor
+60C0BF     (base 16)		ON Semiconductor
+				5005 East McDowell Road
+				Phoenix  AZ  85008
+				US
+
+AC-04-81   (hex)		Jiangsu Huaxing Electronics Co., Ltd.
+AC0481     (base 16)		Jiangsu Huaxing Electronics Co., Ltd.
+				the Industrial concentration zone, Zhiqian town,Jintan distric
+				Changzhou City  Jiangsu Province  213234
+				CN
+
+68-B3-5E   (hex)		Shenzhen Neostra Technology Co.Ltd
+68B35E     (base 16)		Shenzhen Neostra Technology Co.Ltd
+				7th Building,Huaide Cuihai Industrial Park,Fuyong,Shenzhen China
+				shenzhen    518100
+				CN
+
+40-88-05   (hex)		Motorola Mobility LLC, a Lenovo Company
+408805     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+24-E2-71   (hex)		Qingdao Hisense Communications Co.,Ltd.
+24E271     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+BC-60-10   (hex)		Qingdao Hisense Communications Co.,Ltd.
+BC6010     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+D0-FC-CC   (hex)		Samsung Electronics Co.,Ltd
+D0FCCC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+98-39-8E   (hex)		Samsung Electronics Co.,Ltd
+98398E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+44-D1-FA   (hex)		Shenzhen Yunlink Technology Co., Ltd
+44D1FA     (base 16)		Shenzhen Yunlink Technology Co., Ltd
+				Gushu, Xixiang Town, Bao'an District, 
+				Shenzhen City  Guangdong Province  518100
+				CN
+
+F0-F6-44   (hex)		Whitesky Science & Technology Co.,Ltd.
+F0F644     (base 16)		Whitesky Science & Technology Co.,Ltd.
+				Room301,Building7,NO.6,Lane365
+				  Shanghai  200052
+				CN
+
+20-F1-7C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20F17C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-6A-C2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+346AC2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-1C-FF   (hex)		Vizio, Inc
+C41CFF     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+C0-97-27   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+C09727     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+DC-29-3A   (hex)		Shenzhen Nuoshi Technology Co., LTD.
+DC293A     (base 16)		Shenzhen Nuoshi Technology Co., LTD.
+				Room 7020 of Tian Xia IC  Industry Park, Majialong Industrial Zone, YiYuan Road
+				Nanshan District, Shenzhen  Guangdong  518052
+				CN
+
+7C-6A-F3   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+7C6AF3     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+E4-62-51   (hex)		HAO CHENG GROUP LIMITED
+E46251     (base 16)		HAO CHENG GROUP LIMITED
+				 FLAT/RM C, 06/F, BEST-TO-BEST COMMERCIAL CENTRE 32-36 FERRY STREET JORDAN KL
+				Hong KOng    999077
+				HK
+
+40-56-2D   (hex)		Smartron India Pvt ltd
+40562D     (base 16)		Smartron India Pvt ltd
+				1st Floor,  Kapil Tower,  Gachibowli
+				Hyderabad  Telangana  500032
+				IN
+
+38-76-D1   (hex)		Euronda SpA
+3876D1     (base 16)		Euronda SpA
+				Via dell'artigianato, 7
+				Montecchio Precalcino  Italia/Vicenza  36030
+				IT
+
+C4-69-3E   (hex)		Turbulence Design Inc.
+C4693E     (base 16)		Turbulence Design Inc.
+				1-3-14
+				Koshigaya-City  Saitama  343-0813
+				JP
+
+00-95-69   (hex)		LSD Science and Technology Co.,Ltd.
+009569     (base 16)		LSD Science and Technology Co.,Ltd.
+				Lierda Building,No.425 Dengyun Rd.
+				Hangzhou  Zhijiang  310011
+				CN
+
+B0-CF-4D   (hex)		MI-Zone Technology Ireland
+B0CF4D     (base 16)		MI-Zone Technology Ireland
+				2nd floor,block 10 unit 3
+				dublin  Blanchardstown  15
+				IE
+
+28-9A-FA   (hex)		TCT mobile ltd
+289AFA     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+00-1A-34   (hex)		Konka Group Co., Ltd.
+001A34     (base 16)		Konka Group Co., Ltd.
+				Shenzhen Konka R & D Building, 28th floor 15-24
+				Nanshan District  Guangdong  00000
+				CN
+
+00-11-FC   (hex)		HARTING Electronics GmbH
+0011FC     (base 16)		HARTING Electronics GmbH
+				Wilhelm Harting Str. 1
+				Espelkamp  Nordrhein Westfalen  D-32339
+				DE
+
+00-23-89   (hex)		Hangzhou H3C Technologies Co., Limited
+002389     (base 16)		Hangzhou H3C Technologies Co., Limited
+				Oriental Electronics Bldg., #2, Chuangye RoadÃ‚Â£Ã‚Â¬Shangdi Information Industry Base,
+				Beijing    100085
+				US
+
+3C-E5-A6   (hex)		Hangzhou H3C Technologies Co., Limited
+3CE5A6     (base 16)		Hangzhou H3C Technologies Co., Limited
+				Oriental Electronic Bld., NO.2,Chuangye Road
+				Beijing    100085
+				CN
+
+5C-DD-70   (hex)		Hangzhou H3C Technologies Co., Limited
+5CDD70     (base 16)		Hangzhou H3C Technologies Co., Limited
+				310 Liuhe Road, Zhijiang Science Park
+				Hangzhou  Zhejiang,   310053
+				CN
+
+3C-8C-40   (hex)		Hangzhou H3C Technologies Co., Limited
+3C8C40     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District,
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+A0-67-BE   (hex)		Sicon srl
+A067BE     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+D8-20-9F   (hex)		Cubro Acronet GesmbH
+D8209F     (base 16)		Cubro Acronet GesmbH
+				Geiselberstraße 17 / 6 Floor
+				Vienna  Vienna  1110
+				AT
+
+8C-77-16   (hex)		LONGCHEER TELECOMMUNICATION LIMITED
+8C7716     (base 16)		LONGCHEER TELECOMMUNICATION LIMITED
+				Building 1,No.401,Caobao Rd
+				Shanghai  Xuhui District  200233
+				CN
+
+68-FB-7E   (hex)		Apple, Inc.
+68FB7E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-A1-34   (hex)		Apple, Inc.
+84A134     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-D3-85   (hex)		AUMA Riester GmbH & Co. KG
+A0D385     (base 16)		AUMA Riester GmbH & Co. KG
+				Aumastr. 1
+				Muellheim  Baden-Württemberg  79379
+				DE
+
+14-14-E6   (hex)		Ningbo Sanhe Digital Co.,Ltd
+1414E6     (base 16)		Ningbo Sanhe Digital Co.,Ltd
+				No.1177 Lingyun Road
+				ningbo  zhejiang  315048
+				CN
+
+00-25-82   (hex)		Maksat Technologies (P) Ltd
+002582     (base 16)		Maksat Technologies (P) Ltd
+				D-10/6, Okhla, Phase-I
+				New Delhi    110020
+				IN
+
+0C-51-01   (hex)		Apple, Inc.
+0C5101     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-F0-A2   (hex)		Apple, Inc.
+2CF0A2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-C0-49   (hex)		Broad Telecom SA
+48C049     (base 16)		Broad Telecom SA
+				c/ Margarita Salas, 22
+				Leganes  Madrid  28918
+				ES
+
+AC-6F-BB   (hex)		TATUNG Technology Inc.
+AC6FBB     (base 16)		TATUNG Technology Inc.
+				22, Chungshan N. Rd., 3rd Sec.,
+				Taipei    104
+				TW
+
+00-1C-41   (hex)		scemtec Transponder Technology GmbH
+001C41     (base 16)		scemtec Transponder Technology GmbH
+				Wehrstr. 1
+				Gummersbach  NRW  51645
+				DE
+
+14-63-08   (hex)		JABIL CIRCUIT (SHANGHAI) LTD.
+146308     (base 16)		JABIL CIRCUIT (SHANGHAI) LTD.
+				FL5-UNIT A2 NO. 1528 GUMEI ROAD
+				SHANGHAI    200233
+				CN
+
+00-1E-25   (hex)		INTEK DIGITAL
+001E25     (base 16)		INTEK DIGITAL
+				1101, 11th Fl., Anyang K-center building, 1591-9
+				Anyang  Gyeonggi-do  431-815
+				KR
+
+00-E0-CF   (hex)		INTEGRATED DEVICE
+00E0CF     (base 16)		INTEGRATED DEVICE
+				6024 Silver Creek Valley Road
+				San Jose  CA  95138
+				US
+
+90-4D-4A   (hex)		Sagemcom Broadband SAS
+904D4A     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+04-4E-5A   (hex)		ARRIS Group, Inc.
+044E5A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-60-B1   (hex)		Input/Output, Inc.
+0060B1     (base 16)		Input/Output, Inc.
+				12300 PARC CREST DRIVE
+				STAFFORD  TX  77477-2416
+				US
+
+54-7F-54   (hex)		INGENICO
+547F54     (base 16)		INGENICO
+				9, avenue de la gare - BP 25156
+				Valence cedex 9    26958
+				FR
+
+6C-24-83   (hex)		Microsoft Mobile Oy
+6C2483     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				Espoo    02150
+				FI
+
+68-91-D0   (hex)		IEEE Registration Authority
+6891D0     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E0-4F-43   (hex)		Universal Global Scientific Industrial Co., Ltd.
+E04F43     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
+				Nan-Tou  Taiwan  54261
+				TW
+
+38-70-0C   (hex)		ARRIS Group, Inc.
+38700C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-0E-2E   (hex)		Edimax Technology Co. Ltd.
+000E2E     (base 16)		Edimax Technology Co. Ltd.
+				No. 278, Xinhu 1st Road
+				Taipei City  Neihu Dist  248
+				TW
+
+00-06-5F   (hex)		ECI Telecom Ltd.
+00065F     (base 16)		ECI Telecom Ltd.
+				30 Hasivim St.
+				hasivivm    53188
+				IL
+
+00-20-8F   (hex)		ECI Telecom Ltd.
+00208F     (base 16)		ECI Telecom Ltd.
+				HASIVIM ST. 30,
+				PETACH-TIKVA 49133    49133
+				IL
+
+84-40-76   (hex)		Drivenets
+844076     (base 16)		Drivenets
+				4 ashizaf
+				Raanana    4366411
+				IL
+
+00-1C-D7   (hex)		Harman/Becker Automotive Systems GmbH
+001CD7     (base 16)		Harman/Becker Automotive Systems GmbH
+				Becker-Göring-Straße 16
+				Karlsbad  Baden-Württemberg  76307
+				DE
+
+00-3A-7D   (hex)		Cisco Systems, Inc
+003A7D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+90-C7-D8   (hex)		zte corporation
+90C7D8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-18-5C   (hex)		EDSLAB Technologies
+00185C     (base 16)		EDSLAB Technologies
+				20 Ayer Rajah Crescent
+				Crescent    139964
+				SG
+
+00-1A-45   (hex)		GN Netcom A/S
+001A45     (base 16)		GN Netcom A/S
+				Metalbuen 66
+				Ballerup  Skovlunde  DK - 2750
+				DK
+
+00-20-88   (hex)		GLOBAL VILLAGE COMMUNICATION
+002088     (base 16)		GLOBAL VILLAGE COMMUNICATION
+				1144 EAST ARQUES AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+54-13-79   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+541379     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-19-21   (hex)		Elitegroup Computer Systems Co.,Ltd.
+001921     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No.22,Alley 38,Lane 91, Sec. 1,Nei Hu Road.
+				Taipei    114
+				TW
+
+00-16-EC   (hex)		Elitegroup Computer Systems Co.,Ltd.
+0016EC     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No. 22, Alley 38, Lane 91, Sec. 1, Nei Hu Road,
+				Taipei    11441
+				TW
+
+00-07-95   (hex)		Elitegroup Computer Systems Co.,Ltd.
+000795     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No. 22, Alley 38, Lane 91,
+				Taipei    114
+				TW
+
+FC-0F-4B   (hex)		Texas Instruments
+FC0F4B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D4-88-3F   (hex)		HDPRO CO., LTD.
+D4883F     (base 16)		HDPRO CO., LTD.
+				HDPRO Bldg. 23, 362 Beon-gil, Shinheung-ro, Ojeong-gu
+				Bucheon-City  Gyunggi-Do  14491
+				KR
+
+10-88-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+1088CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+60-B6-17   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+60B617     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+DC-9C-9F   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+DC9C9F     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+74-DF-BF   (hex)		Liteon Technology Corporation
+74DFBF     (base 16)		Liteon Technology Corporation
+				7F, Bldg, C, 90, Chien 1 Road
+				Taipei  Taiwan  23585
+				TW
+
+F0-3E-90   (hex)		Ruckus Wireless
+F03E90     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+D8-D7-23   (hex)		IDS, Inc
+D8D723     (base 16)		IDS, Inc
+				6801 15 Mile Rd.
+				Sterling Heights  MI  48312
+				US
+
+84-AD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+84AD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-60-5F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+58605F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-A0-F4   (hex)		GE
+00A0F4     (base 16)		GE
+				W-657
+				WAUKESHA  WI  53188
+				US
+
+AC-0D-1B   (hex)		LG Electronics (Mobile Communications)
+AC0D1B     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+F0-D1-B8   (hex)		LEDVANCE
+F0D1B8     (base 16)		LEDVANCE
+				200 Ballardvale St
+				Wilmington  MA  01887
+				US
+
+98-6D-35   (hex)		IEEE Registration Authority
+986D35     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+88-79-5B   (hex)		Konka Group Co., Ltd.
+88795B     (base 16)		Konka Group Co., Ltd.
+				Shenzhen Konka R & D Building, 28th floor 15-24
+				Nanshan District  Guangdong  00000
+				CN
+
+08-1F-71   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+081F71     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+5C-CA-1A   (hex)		Microsoft Mobile Oy
+5CCA1A     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				Espoo    02150
+				FI
+
+FC-2F-AA   (hex)		Nokia
+FC2FAA     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+B0-7E-70   (hex)		Zadara Storage Ltd.
+B07E70     (base 16)		Zadara Storage Ltd.
+				6 Venture, Suite 140
+				Irvine  CA  92618
+				US
+
+00-80-B1   (hex)		SOFTCOM A/S
+0080B1     (base 16)		SOFTCOM A/S
+				STUDIESTRAEDE 21
+				    
+				DK
+
+20-2D-F8   (hex)		Digital Media Cartridge Ltd.
+202DF8     (base 16)		Digital Media Cartridge Ltd.
+				5F-3, No. 9, Ln 3, Jihu Rd, Neihu
+				Taipei    11492
+				TW
+
+10-D0-AB   (hex)		zte corporation
+10D0AB     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-04-C6   (hex)		YAMAHA MOTOR CO.,LTD
+0004C6     (base 16)		YAMAHA MOTOR CO.,LTD
+				Information System Division
+				Japan  Zip:  438-8501
+				JP
+
+18-A3-E8   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+18A3E8     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+74-1E-93   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+741E93     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+20-2D-07   (hex)		Samsung Electronics Co.,Ltd
+202D07     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D8-80-3C   (hex)		Anhui Huami Information Technology Company Limited
+D8803C     (base 16)		Anhui Huami Information Technology Company Limited
+				Building A4, 12th Floor, No. 800, Wangjiang Road
+				Hefei  Anhui  230088
+				CN
+
+00-34-DA   (hex)		LG Electronics (Mobile Communications)
+0034DA     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+38-10-D5   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+3810D5     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+18-C5-01   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+18C501     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+00-A0-B8   (hex)		NetApp
+00A0B8     (base 16)		NetApp
+				1395 Crossman Ave
+				Sunnyvale,  CA  94089
+				US
+
+00-C8-8B   (hex)		Cisco Systems, Inc
+00C88B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-C3-F9   (hex)		Securitas Direct AB
+24C3F9     (base 16)		Securitas Direct AB
+				Angbatsbron 1
+				Malmö    21120
+				SE
+
+2C-21-D7   (hex)		IMAX Corporation
+2C21D7     (base 16)		IMAX Corporation
+				2525 Speakman Drive
+				Mississauga  Ontario  L5K 1B1
+				CA
+
+00-09-D2   (hex)		Mai Logic Inc.
+0009D2     (base 16)		Mai Logic Inc.
+				47697 Westinghouse Dr., Suite 200
+				Fremont  CA  94539
+				US
+
+00-60-16   (hex)		CLARIION
+006016     (base 16)		CLARIION
+				COSLIN DRIVE
+				SOUTHBORO  MA  01772
+				US
+
+98-1F-B1   (hex)		Shenzhen Lemon Network Technology Co.,Ltd
+981FB1     (base 16)		Shenzhen Lemon Network Technology Co.,Ltd
+				Changhong Technology Building 1710-11,South NO.12 Road,Nanshan Technology Park,Nanshan District,Shenzhen,China.
+				shenzhen    518100
+				CN
+
+0C-5A-9E   (hex)		Wi-SUN Alliance
+0C5A9E     (base 16)		Wi-SUN Alliance
+				275 Tennant Avenue, Suite 202
+				Morgan Hill  CA  95037
+				US
+
+B4-4B-D2   (hex)		Apple, Inc.
+B44BD2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-41-5F   (hex)		Apple, Inc.
+DC415F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-12-25   (hex)		Cisco Systems, Inc
+641225     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+78-64-E6   (hex)		Green Motive Technology Limited
+7864E6     (base 16)		Green Motive Technology Limited
+				Room 1106,11 Floor，The XinYuan Square, No 418 Gui ping Road
+				shanghai  shanghai  20233
+				CN
+
+3C-BE-E1   (hex)		NIKON CORPORATION
+3CBEE1     (base 16)		NIKON CORPORATION
+				Shinagawa Intercity Tower C, 2-15-3, Konan
+				Minato-ku  Tokyo  108-6290
+				JP
+
+10-2A-B3   (hex)		Xiaomi Communications Co Ltd
+102AB3     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+40-D3-57   (hex)		Ison Technology Co., Ltd.
+40D357     (base 16)		Ison Technology Co., Ltd.
+				Room 6, 20F, No. 77, section 1, Xintai 5th Rd. Xizhi District
+				New Taipei City  Taiwan  22101
+				TW
+
+A4-15-88   (hex)		ARRIS Group, Inc.
+A41588     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F4-5C-89   (hex)		Apple, Inc.
+F45C89     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-76-8F   (hex)		Apple, Inc.
+20768F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-11-D1   (hex)		Soft Imaging System GmbH
+0011D1     (base 16)		Soft Imaging System GmbH
+				Johann-Krane-Weg 39
+				Muenster    48149
+				DE
+
+98-D6-86   (hex)		Chyi Lee industry Co., ltd.
+98D686     (base 16)		Chyi Lee industry Co., ltd.
+				No.25, Wufu Rd., Xinying Dist.
+				Tainan city    73054
+				TW
+
+8C-C6-61   (hex)		Current, powered by GE
+8CC661     (base 16)		Current, powered by GE
+				1975 Noble Road B335C
+				East Cleveland  OH  44112
+				US
+
+88-A0-84   (hex)		Formation Data Systems
+88A084     (base 16)		Formation Data Systems
+				39141 Civic Center Drive, Suite 410 
+				Fremont  CA  94538
+				US
+
+E8-B2-AC   (hex)		Apple, Inc.
+E8B2AC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-9A-79   (hex)		Apple, Inc.
+E49A79     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-A9-DE   (hex)		LG Innotek
+30A9DE     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+F0-1B-6C   (hex)		vivo Mobile Communication Co., Ltd.
+F01B6C     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+A0-B9-ED   (hex)		Skytap
+A0B9ED     (base 16)		Skytap
+				710 2nd Ave Suite 1130
+				Seattle  WA  98104
+				US
+
+94-C9-60   (hex)		Zhongshan B&T technology.co.,ltd
+94C960     (base 16)		Zhongshan B&T technology.co.,ltd
+				Floor3-4,Block A,Dong Fang Industrial park,Da che country,Nan Lang District 
+				Zhong Shan City  Guang Dong Province  528451
+				CN
+
+74-C3-30   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+74C330     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+40-3F-8C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+403F8C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+DC-B3-B4   (hex)		Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.
+DCB3B4     (base 16)		Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.
+				158 Nan Hai Road, TEDA
+				Tianjin    300457
+				CN
+
+00-1D-3B   (hex)		Nokia Danmark A/S
+001D3B     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1D-FD   (hex)		Nokia Danmark A/S
+001DFD     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1E-3B   (hex)		Nokia Danmark A/S
+001E3B     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1E-A4   (hex)		Nokia Danmark A/S
+001EA4     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-26-CC   (hex)		Nokia Danmark A/S
+0026CC     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-0E-ED   (hex)		Nokia Danmark A/S
+000EED     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+4C-25-78   (hex)		Nokia Corporation
+4C2578     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  NA  24101
+				FI
+
+BC-C6-DB   (hex)		Nokia Corporation
+BCC6DB     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  NA  24101
+				FI
+
+00-11-9F   (hex)		Nokia Danmark A/S
+00119F     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1A-16   (hex)		Nokia Danmark A/S
+001A16     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1A-89   (hex)		Nokia Danmark A/S
+001A89     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1A-DC   (hex)		Nokia Danmark A/S
+001ADC     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-25-CF   (hex)		Nokia Danmark A/S
+0025CF     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-21-AB   (hex)		Nokia Danmark A/S
+0021AB     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1F-DE   (hex)		Nokia Danmark A/S
+001FDE     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1F-DF   (hex)		Nokia Danmark A/S
+001FDF     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+54-79-75   (hex)		Nokia Corporation
+547975     (base 16)		Nokia Corporation
+				Joensuunkatu 7E
+				Salo    24101
+				FI
+
+A8-7B-39   (hex)		Nokia Corporation
+A87B39     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+00-24-7C   (hex)		Nokia Danmark A/S
+00247C     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-22-66   (hex)		Nokia Danmark A/S
+002266     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-21-FE   (hex)		Nokia Danmark A/S
+0021FE     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790V
+				DK
+
+C4-77-AB   (hex)		Beijing ASU Tech Co.,Ltd
+C477AB     (base 16)		Beijing ASU Tech Co.,Ltd
+				15/F, Global Trade Center Tower, No.36, North 3rd Ring Road, Dongcheng District, Beijing, 100013, China
+				BEI JING  BEI JING  100013
+				CN
+
+00-0B-CA   (hex)		DATAVAN TC
+000BCA     (base 16)		DATAVAN TC
+				4FL,#120-12,Chung Shan Rd, Sec.3
+				Chung Ho City, Taipei Hsien    235
+				TW
+
+70-25-59   (hex)		CyberTAN Technology Inc.
+702559     (base 16)		CyberTAN Technology Inc.
+				99, Park Avenue III, Science-Based Industrial Park
+				Hsinchu    308
+				TW
+
+60-7E-DD   (hex)		Microsoft Mobile Oy
+607EDD     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				ESPOO    02150
+				FI
+
+A8-A0-89   (hex)		Tactical Communications
+A8A089     (base 16)		Tactical Communications
+				473 Post Street
+				Camarillo  CA  93010
+				US
+
+48-36-5F   (hex)		Wintecronics Ltd.
+48365F     (base 16)		Wintecronics Ltd.
+				Rm. 3, 11F., No.716, Zhongzheng Rd., Zhonghe Dist., New Taipei City 23552, Taiwan (R.O.C.)
+				New Taipei City    23552
+				TW
+
+00-1D-20   (hex)		Comtrend Corporation
+001D20     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+08-37-3D   (hex)		Samsung Electronics Co.,Ltd
+08373D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-75-BD   (hex)		Cisco Systems, Inc
+0C75BD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+30-0D-43   (hex)		Microsoft Mobile Oy
+300D43     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 2-4
+				Espoo  N.A.  02150
+				FI
+
+00-00-0E   (hex)		FUJITSU LIMITED
+00000E     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+00-0B-5D   (hex)		FUJITSU LIMITED
+000B5D     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+C4-88-E5   (hex)		Samsung Electronics Co.,Ltd
+C488E5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-05-81   (hex)		Roku, Inc.
+080581     (base 16)		Roku, Inc.
+				12980 Saratoga Ave
+				Saratoga  CA  95070
+				US
+
+00-0D-F3   (hex)		Asmax Solutions
+000DF3     (base 16)		Asmax Solutions
+				Tatarska 5
+				Cracow    30-103
+				PL
+
+80-AC-AC   (hex)		Juniper Networks
+80ACAC     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-0D-B6   (hex)		Broadcom
+000DB6     (base 16)		Broadcom
+				1363 Redwood Way
+				Petaluma  CA  94954
+				US
+
+00-0A-F7   (hex)		Broadcom
+000AF7     (base 16)		Broadcom
+				16215 Alton Parkway
+				Irvine  CA  92618
+				US
+
+D4-01-29   (hex)		Broadcom
+D40129     (base 16)		Broadcom
+				5300 California Ave.
+				Irvine  CA  92617
+				US
+
+00-1D-00   (hex)		Brivo Systems, LLC
+001D00     (base 16)		Brivo Systems, LLC
+				4330 East West Highway
+				Bethesda  MD  20814
+				US
+
+00-20-D6   (hex)		Breezecom, Ltd.
+0020D6     (base 16)		Breezecom, Ltd.
+				ATIDIM TECHNOLOGICAL PK-BLDG.3
+				Tel-aviv    12345
+				IL
+
+00-E0-63   (hex)		Cabletron Systems, Inc.
+00E063     (base 16)		Cabletron Systems, Inc.
+				35 INDUSTRIAL WAY
+				ROCHESTER  NH  03866-5005
+				US
+
+FC-C7-34   (hex)		Samsung Electronics Co.,Ltd
+FCC734     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+84-25-DB   (hex)		Samsung Electronics Co.,Ltd
+8425DB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-EC-71   (hex)		Samsung Electronics Co.,Ltd
+B0EC71     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-58-B8   (hex)		Samsung Electronics Co.,Ltd
+E458B8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-8C-2C   (hex)		Samsung Electronics Co.,Ltd
+088C2C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-B8-53   (hex)		Samsung Electronics Co.,Ltd
+64B853     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+38-94-96   (hex)		Samsung Electronics Co.,Ltd
+389496     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-56-BF   (hex)		Samsung Electronics Co.,Ltd
+5056BF     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+90-F1-AA   (hex)		Samsung Electronics Co.,Ltd
+90F1AA     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+10-77-B1   (hex)		Samsung Electronics Co.,Ltd
+1077B1     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+00-1F-C7   (hex)		Casio Hitachi Mobile Communications Co., Ltd.
+001FC7     (base 16)		Casio Hitachi Mobile Communications Co., Ltd.
+				2-229-1, Sakuragaoka
+				Higashiyamato-shi  Tokyo  207-8501
+				JP
+
+A4-9A-58   (hex)		Samsung Electronics Co.,Ltd
+A49A58     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-EE-8B   (hex)		Samsung Electronics Co.,Ltd
+08EE8B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-A4-2A   (hex)		OB Telecom Electronic Technology Co., Ltd
+0CA42A     (base 16)		OB Telecom Electronic Technology Co., Ltd
+				17/F, Jiangong Building
+				Hangzhou  ZheJiang  310012
+				CN
+
+74-45-8A   (hex)		Samsung Electronics Co.,Ltd
+74458A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-DC-96   (hex)		Arcadyan Technology Corporation
+5CDC96     (base 16)		Arcadyan Technology Corporation
+				No.8, Sec.2, Guangfu Rd.,
+				Hsinchu City 30071,    12345
+				TW
+
+74-31-70   (hex)		Arcadyan Technology Corporation
+743170     (base 16)		Arcadyan Technology Corporation
+				4F. , No. 9 , Park Avenue II,
+				Hsinchu    300
+				TW
+
+00-1A-2A   (hex)		Arcadyan Technology Corporation
+001A2A     (base 16)		Arcadyan Technology Corporation
+				4F., No. 9 , Park Avenue II,
+				Hsinchu    300
+				TW
+
+88-25-2C   (hex)		Arcadyan Technology Corporation
+88252C     (base 16)		Arcadyan Technology Corporation
+				4F., NO.9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+40-BA-61   (hex)		ARIMA Communications Corp.
+40BA61     (base 16)		ARIMA Communications Corp.
+				6F., No.866, Jhongjheng Rd., Jhonghe Dist.
+				New Taipei City    23586
+				TW
+
+00-11-F5   (hex)		ASKEY COMPUTER CORP
+0011F5     (base 16)		ASKEY COMPUTER CORP
+				10F, NO.119, CHIENKANG  RD.,
+				CHUNG-HO, TAIPEI    235
+				TW
+
+00-16-E3   (hex)		ASKEY COMPUTER CORP
+0016E3     (base 16)		ASKEY COMPUTER CORP
+				10F, NO.119, CHIENKANG RD.,
+				CHUNG-HO, TAIPEI    235
+				TW
+
+E8-39-DF   (hex)		ASKEY COMPUTER CORP
+E839DF     (base 16)		ASKEY COMPUTER CORP
+				10F,NO.119,CHIENKANG RD,CHUNG-HO,TAIPEI,
+				TAIWAN  TAIPEI  235
+				TW
+
+1C-C6-3C   (hex)		Arcadyan Technology Corporation
+1CC63C     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+18-83-BF   (hex)		Arcadyan Technology Corporation
+1883BF     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+68-ED-43   (hex)		BlackBerry RTS
+68ED43     (base 16)		BlackBerry RTS
+				451 Phillip Street
+				Waterloo  ON  N2L 3X2
+				CA
+
+70-AA-B2   (hex)		BlackBerry RTS
+70AAB2     (base 16)		BlackBerry RTS
+				451 Phillip Street
+				Waterloo  ON  N2L 3X2
+				CA
+
+00-14-6C   (hex)		NETGEAR
+00146C     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-1E-2A   (hex)		NETGEAR
+001E2A     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-18-4D   (hex)		NETGEAR
+00184D     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-04-0E   (hex)		AVM GmbH
+00040E     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				berlin    12345
+				DE
+
+9C-C7-A6   (hex)		AVM GmbH
+9CC7A6     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				berlin  Berlin  10559
+				DE
+
+A0-63-91   (hex)		NETGEAR
+A06391     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+20-E5-2A   (hex)		NETGEAR
+20E52A     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+44-94-FC   (hex)		NETGEAR
+4494FC     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+20-0C-C8   (hex)		NETGEAR
+200CC8     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+C4-47-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4473F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-44-01   (hex)		NETGEAR
+744401     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+E0-91-F5   (hex)		NETGEAR
+E091F5     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-0F-86   (hex)		BlackBerry RTS
+000F86     (base 16)		BlackBerry RTS
+				295 Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+00-24-D2   (hex)		ASKEY COMPUTER CORP
+0024D2     (base 16)		ASKEY COMPUTER CORP
+				10F,NO.119,CHIENKANG RD,CHUNG-HO,TAIPEI,
+				TAIWAN  TAIPEI  235
+				TW
+
+B4-EE-B4   (hex)		ASKEY COMPUTER CORP
+B4EEB4     (base 16)		ASKEY COMPUTER CORP
+				10F,NO.119,CHIENKANG RD,ZHONGHE DIST NEW TAIPEI CITY
+				TAIWAN  TAIPEI  23585
+				TW
+
+E4-64-49   (hex)		ARRIS Group, Inc.
+E46449     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+40-FC-89   (hex)		ARRIS Group, Inc.
+40FC89     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+2C-9E-5F   (hex)		ARRIS Group, Inc.
+2C9E5F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-26-36   (hex)		ARRIS Group, Inc.
+002636     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1C-C1   (hex)		ARRIS Group, Inc.
+001CC1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1E-5A   (hex)		ARRIS Group, Inc.
+001E5A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-13-71   (hex)		ARRIS Group, Inc.
+001371     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-EE   (hex)		ARRIS Group, Inc.
+0023EE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1A-DE   (hex)		ARRIS Group, Inc.
+001ADE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+74-56-12   (hex)		ARRIS Group, Inc.
+745612     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-50-E3   (hex)		ARRIS Group, Inc.
+0050E3     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-21-36   (hex)		ARRIS Group, Inc.
+002136     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-16-26   (hex)		ARRIS Group, Inc.
+001626     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-19-A6   (hex)		ARRIS Group, Inc.
+0019A6     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E8-C7-4F   (hex)		Liteon Technology Corporation
+E8C74F     (base 16)		Liteon Technology Corporation
+				4F, No. 90, Chien 1 Road,
+				New Taipei City  Taiwan  23585
+				TW
+
+D0-53-49   (hex)		Liteon Technology Corporation
+D05349     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road ChungHo
+				New Taipei City  Taiwan  23585
+				TW
+
+E8-F7-24   (hex)		Hewlett Packard Enterprise
+E8F724     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+28-0D-FC   (hex)		Sony Interactive Entertainment Inc.
+280DFC     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+00-13-11   (hex)		ARRIS Group, Inc.
+001311     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D0-DF-9A   (hex)		Liteon Technology Corporation
+D0DF9A     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+1C-65-9D   (hex)		Liteon Technology Corporation
+1C659D     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+30-10-B3   (hex)		Liteon Technology Corporation
+3010B3     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road, ChungHo, TaiPei Hsien
+				TaiPei  TaiWan  23585
+				TW
+
+70-1A-04   (hex)		Liteon Technology Corporation
+701A04     (base 16)		Liteon Technology Corporation
+				4F 90 Chien 1 Rd.ChungHo
+				Taipei    23585
+				TW
+
+48-D2-24   (hex)		Liteon Technology Corporation
+48D224     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo
+				New Taipei City  Taipei  23585
+				TW
+
+20-68-9D   (hex)		Liteon Technology Corporation
+20689D     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo
+				New Taipei City  Taipei  23585
+				TW
+
+7C-BF-B1   (hex)		ARRIS Group, Inc.
+7CBFB1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+08-00-46   (hex)		Sony Corporation
+080046     (base 16)		Sony Corporation
+				Gotenyama Tec, 5-1-2 Kitashinagawa
+				Tokyo    141-0001
+				JP
+
+EC-F0-0E   (hex)		AboCom
+ECF00E     (base 16)		AboCom
+				1F , No. 21, Yanfa 2nd Rd., SBIP
+				Hsinchu City  300    886
+				TW
+
+00-E0-98   (hex)		AboCom
+00E098     (base 16)		AboCom
+				12F-3, NO. 333, SEC. 1
+				HSIN-CHU    12345
+				TW
+
+74-DA-EA   (hex)		Texas Instruments
+74DAEA     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+94-88-15   (hex)		Infinique Worldwide Inc
+948815     (base 16)		Infinique Worldwide Inc
+				513, 4185 Shipp Drive
+				Mississauga  Ontario  L4Z2Y8
+				CA
+
+D0-E4-4A   (hex)		Murata Manufacturing Co., Ltd.
+D0E44A     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+38-4F-F0   (hex)		AzureWave Technology Inc.
+384FF0     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd
+				. New Taipei City  Taiwan  231
+				TW
+
+E8-74-E6   (hex)		ADB Broadband Italia
+E874E6     (base 16)		ADB Broadband Italia
+				VIALE SARCA 336
+				MILANO    20126
+				IT
+
+00-20-E0   (hex)		Actiontec Electronics, Inc
+0020E0     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-26-62   (hex)		Actiontec Electronics, Inc
+002662     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-25-53   (hex)		ADB Broadband Italia
+002553     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+00-19-3E   (hex)		ADB Broadband Italia
+00193E     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+00-08-27   (hex)		ADB Broadband Italia
+000827     (base 16)		ADB Broadband Italia
+				Viale Sarca 222
+				pisacataway  Milano  20126
+				IT
+
+74-2F-68   (hex)		AzureWave Technology Inc.
+742F68     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd., Xindian
+				Taipei    231
+				TW
+
+4C-14-A3   (hex)		TCL Technoly Electronics (Huizhou) Co., Ltd.
+4C14A3     (base 16)		TCL Technoly Electronics (Huizhou) Co., Ltd.
+				19th Zhongkai Hi-tech Development Zone
+				Huizhou  Guangdong  516006
+				CN
+
+4C-B0-E8   (hex)		Beijing RongZhi xinghua technology co., LTD
+4CB0E8     (base 16)		Beijing RongZhi xinghua technology co., LTD
+				Beijing haidian district zhongguancun east road No. 18 smartfortune international building, room 909
+				beijing  beijing  100000
+				CN
+
+D8-87-D5   (hex)		Leadcore Technology CO.,LTD
+D887D5     (base 16)		Leadcore Technology CO.,LTD
+				1258 Mingyue Road,Shanghai.China
+				shanghai  shanghai  201206
+				CN
+
+00-F2-8B   (hex)		Cisco Systems, Inc
+00F28B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-E6-AD   (hex)		Intel Corporate
+34E6AD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+08-11-96   (hex)		Intel Corporate
+081196     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+18-3D-A2   (hex)		Intel Corporate
+183DA2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+80-9B-20   (hex)		Intel Corporate
+809B20     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-23-14   (hex)		Intel Corporate
+002314     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+34-02-86   (hex)		Intel Corporate
+340286     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1C-BF   (hex)		Intel Corporate
+001CBF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+B4-B6-76   (hex)		Intel Corporate
+B4B676     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+3C-A9-F4   (hex)		Intel Corporate
+3CA9F4     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+B8-8A-60   (hex)		Intel Corporate
+B88A60     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+78-FF-57   (hex)		Intel Corporate
+78FF57     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+9C-4E-36   (hex)		Intel Corporate
+9C4E36     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+34-13-E8   (hex)		Intel Corporate
+3413E8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-27-10   (hex)		Intel Corporate
+002710     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+A4-8E-0A   (hex)		DeLaval International AB
+A48E0A     (base 16)		DeLaval International AB
+				Gustaf De Lavals väg 15
+				TUMBA    14721
+				SE
+
+AC-2B-6E   (hex)		Intel Corporate
+AC2B6E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+9C-35-83   (hex)		Nipro Diagnostics, Inc
+9C3583     (base 16)		Nipro Diagnostics, Inc
+				2400 N.W. 55th Court.
+				Ft. Lauderdale  FL  33309
+				US
+
+C0-61-18   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+C06118     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+B8-2A-72   (hex)		Dell Inc.
+B82A72     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+F8-E0-79   (hex)		Motorola Mobility LLC, a Lenovo Company
+F8E079     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				600 North US Highway 45
+				Libertyville  IL  60048
+				US
+
+CC-C3-EA   (hex)		Motorola Mobility LLC, a Lenovo Company
+CCC3EA     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				600 North US Highway 45
+				Libertyville  IL  60048
+				US
+
+40-78-6A   (hex)		Motorola Mobility LLC, a Lenovo Company
+40786A     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 Merchandise Mart Plaza, Suite 1800
+				Chicago  IL  60654
+				US
+
+00-19-D1   (hex)		Intel Corporate
+0019D1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-19-D2   (hex)		Intel Corporate
+0019D2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1B-21   (hex)		Intel Corporate
+001B21     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+18-FF-0F   (hex)		Intel Corporate
+18FF0F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+34-DE-1A   (hex)		Intel Corporate
+34DE1A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+E8-B1-FC   (hex)		Intel Corporate
+E8B1FC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+CC-3D-82   (hex)		Intel Corporate
+CC3D82     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1F-3C   (hex)		Intel Corporate
+001F3C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-23-15   (hex)		Intel Corporate
+002315     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-16-6F   (hex)		Intel Corporate
+00166F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-0A-8A   (hex)		Cisco Systems, Inc
+000A8A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-09   (hex)		Dell Inc.
+001D09     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+00-23-AE   (hex)		Dell Inc.
+0023AE     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock    78682
+				US
+
+BC-30-5B   (hex)		Dell Inc.
+BC305B     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock    78682
+				US
+
+38-86-02   (hex)		Flexoptix GmbH
+388602     (base 16)		Flexoptix GmbH
+				Muehltalstr. 153
+				Darmstadt    64297
+				DE
+
+40-65-A3   (hex)		Sagemcom Broadband SAS
+4065A3     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+D0-22-12   (hex)		IEEE Registration Authority
+D02212     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+10-07-23   (hex)		IEEE Registration Authority
+100723     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A4-4F-29   (hex)		IEEE Registration Authority
+A44F29     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+74-F8-DB   (hex)		IEEE Registration Authority
+74F8DB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A4-3B-FA   (hex)		IEEE Registration Authority
+A43BFA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B8-CA-3A   (hex)		Dell Inc.
+B8CA3A     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+EC-F4-BB   (hex)		Dell Inc.
+ECF4BB     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+D4-BE-D9   (hex)		Dell Inc.
+D4BED9     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-19-4B   (hex)		Sagemcom Broadband SAS
+00194B     (base 16)		Sagemcom Broadband SAS
+				Le Ponnant de Paris
+				CEDEX  Paris  75512
+				FR
+
+00-1E-74   (hex)		Sagemcom Broadband SAS
+001E74     (base 16)		Sagemcom Broadband SAS
+				Le Ponnant de Paris
+				CEDEX  Paris  75512
+				FR
+
+38-3B-C8   (hex)		2Wire Inc
+383BC8     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose    95131
+				US
+
+60-FE-20   (hex)		2Wire Inc
+60FE20     (base 16)		2Wire Inc
+				1764 Automation ParkWay
+				San Jose  CA  95131
+				US
+
+00-24-56   (hex)		2Wire Inc
+002456     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+C0-83-0A   (hex)		2Wire Inc
+C0830A     (base 16)		2Wire Inc
+				1764 Automation Pkwy
+				San Jose  CA  95131
+				US
+
+00-18-3F   (hex)		2Wire Inc
+00183F     (base 16)		2Wire Inc
+				1704 Automation Parkway
+				San Jose  CA  94538
+				US
+
+00-0D-56   (hex)		Dell Inc.
+000D56     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+18-1E-78   (hex)		Sagemcom Broadband SAS
+181E78     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison  HAUTS DE SEINE  92848
+				FR
+
+00-37-B7   (hex)		Sagemcom Broadband SAS
+0037B7     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison  HAUTS DE SEINE  92848
+				FR
+
+00-54-BD   (hex)		Swelaser AB
+0054BD     (base 16)		Swelaser AB
+				Tullgårdsgatan 8
+				Stockholm    11668
+				SE
+
+00-1E-4C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+001E4C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+20-BB-76   (hex)		COL GIOVANNI PAOLO SpA
+20BB76     (base 16)		COL GIOVANNI PAOLO SpA
+				Via F.lli Ceirano n. 20
+				Moncalieri  TORINO  10024
+				IT
+
+3C-DD-89   (hex)		SOMO HOLDINGS & TECH. CO.,LTD.
+3CDD89     (base 16)		SOMO HOLDINGS & TECH. CO.,LTD.
+				6, Mujeonggonddan-Gil
+				Damyang-Gun  Jellanam-Do  57360
+				KR
+
+18-01-E3   (hex)		Bittium Wireless Ltd
+1801E3     (base 16)		Bittium Wireless Ltd
+				Tutkijantie 8
+				Oulu    50590
+				FI
+
+14-91-82   (hex)		Belkin International Inc.
+149182     (base 16)		Belkin International Inc.
+				12045 E. Waterfront Drive
+				Playa Vista  CA  90094
+				US
+
+18-62-2C   (hex)		Sagemcom Broadband SAS
+18622C     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+3C-81-D8   (hex)		Sagemcom Broadband SAS
+3C81D8     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+40-F2-01   (hex)		Sagemcom Broadband SAS
+40F201     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison  HAUTS DE SEINE  92848
+				FR
+
+D0-84-B0   (hex)		Sagemcom Broadband SAS
+D084B0     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison  HAUTS DE SEINE  92848
+				FR
+
+D8-54-3A   (hex)		Texas Instruments
+D8543A     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+64-9C-8E   (hex)		Texas Instruments
+649C8E     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+10-2E-AF   (hex)		Texas Instruments
+102EAF     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+7C-8E-E4   (hex)		Texas Instruments
+7C8EE4     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+B4-EE-D4   (hex)		Texas Instruments
+B4EED4     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+D0-37-61   (hex)		Texas Instruments
+D03761     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+C8-3E-99   (hex)		Texas Instruments
+C83E99     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+40-98-4E   (hex)		Texas Instruments
+40984E     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-EB   (hex)		Texas Instruments
+0017EB     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-E6   (hex)		Texas Instruments
+0017E6     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+C4-ED-BA   (hex)		Texas Instruments
+C4EDBA     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-18-32   (hex)		Texas Instruments
+001832     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+3C-2D-B7   (hex)		Texas Instruments
+3C2DB7     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+54-64-D9   (hex)		Sagemcom Broadband SAS
+5464D9     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+00-19-5B   (hex)		D-Link Corporation
+00195B     (base 16)		D-Link Corporation
+				NO.289, Sinhu 3rd Rd.,
+				Neihu District,  Taipei City  114
+				TW
+
+00-0F-3D   (hex)		D-Link Corporation
+000F3D     (base 16)		D-Link Corporation
+				No.8,Li-shing Seventh Road,Science-based Industrial Park,Hsimchu,
+				Hsimchu    300
+				TW
+
+24-DA-11   (hex)		NO NDA Inc
+24DA11     (base 16)		NO NDA Inc
+				828 Bryant St 
+				Palo Alto  IA  94301
+				US
+
+EC-22-80   (hex)		D-Link International
+EC2280     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,
+				SINGAPORE  Singapore  609917
+				SG
+
+9C-8E-99   (hex)		Hewlett Packard
+9C8E99     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+90-59-AF   (hex)		Texas Instruments
+9059AF     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+BC-6A-29   (hex)		Texas Instruments
+BC6A29     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+84-7E-40   (hex)		Texas Instruments
+847E40     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-35   (hex)		Intel Wireless Network Group
+001735     (base 16)		Intel Wireless Network Group
+				2111 NE 25th Ave
+				Hillsboro  OR  97124
+				US
+
+74-AC-5F   (hex)		Qiku Internet Network Scientific (Shenzhen) Co., Ltd.
+74AC5F     (base 16)		Qiku Internet Network Scientific (Shenzhen) Co., Ltd.
+				Cyber Harbor, 2nd Mengxi Road, Hi-Tech Industrial Park (North), NanShan District
+				ShenZhen  GuangDong  518000
+				CN
+
+38-CA-DA   (hex)		Apple, Inc.
+38CADA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-B3-3F   (hex)		Shenzhen TINNO Mobile Technology Corp.
+D0B33F     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				4/F.,H-3 Building,OCT Eastern lndustrial Park. NO.1 XiangShan East Road.,
+				GUANGDONG  SHENZHEN  518053
+				CN
+
+BC-D1-D3   (hex)		Shenzhen TINNO Mobile Technology Corp.
+BCD1D3     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				4/F.,H-3 Building,OCT Eastern lndustrial Park.
+				Nanshan, Shenzhen  GUANGDONG  518053
+				CN
+
+D8-3C-69   (hex)		Shenzhen TINNO Mobile Technology Corp.
+D83C69     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				4/F.,H-3 Building,OCT Eastern lndustrial Park. NO.1 XiangShan East Road
+				SHENZHEN  GUANGDONG  518053
+				CN
+
+F4-F5-D8   (hex)		Google, Inc.
+F4F5D8     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+8C-57-9B   (hex)		Wistron Neweb Corporation
+8C579B     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+00-59-AC   (hex)		KPN. B.V.
+0059AC     (base 16)		KPN. B.V.
+				Maanplein 55
+				Den Haag  Zuid holland  2516 CK
+				NL
+
+40-D8-55   (hex)		IEEE Registration Authority
+40D855     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+34-AB-37   (hex)		Apple, Inc.
+34AB37     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-00-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2400BA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+24-DF-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24DF6A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+78-8B-77   (hex)		Standar Telecom
+788B77     (base 16)		Standar Telecom
+				Sadovnicheskaya 44 s.4
+				Moscow    115035
+				RU
+
+B0-C0-90   (hex)		Chicony Electronics Co., Ltd.
+B0C090     (base 16)		Chicony Electronics Co., Ltd.
+				No.25, Wugong 6th Rd., Wugu Dist.,
+				New Taipei City 248,  TAIWAN, REPUBLIC OF CHINA  248
+				TW
+
+90-7F-61   (hex)		Chicony Electronics Co., Ltd.
+907F61     (base 16)		Chicony Electronics Co., Ltd.
+				No.25, Wu-Gong 6th Rd., Wu Ku Industrial Park,
+				New Taipei City,    248
+				TW
+
+0C-05-35   (hex)		Juniper Systems
+0C0535     (base 16)		Juniper Systems
+				1132 W. 1700 N.
+				Logan  UT  84321
+				US
+
+BC-83-A7   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+BC83A7     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit A 13-16/F,Skyworth Bldg., Gaoxin Ave.1.S.,Nanshan District
+				Shenzhen  GuangDong   518057
+				CN
+
+BC-EC-23   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+BCEC23     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit A13-16/F,Skyworth Bldg., Gaoxin Ave.1.S.,Nanshan District,Shenzhen,China
+				ShenZhen  GuangDong  518057
+				CN
+
+18-AF-61   (hex)		Apple, Inc.
+18AF61     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-F9-38   (hex)		Apple, Inc.
+5CF938     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-90-69   (hex)		Juniper Networks
+009069     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+64-64-9B   (hex)		Juniper Networks
+64649B     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+F0-1C-2D   (hex)		Juniper Networks
+F01C2D     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+30-7C-5E   (hex)		Juniper Networks
+307C5E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+AC-06-C7   (hex)		ServerNet S.r.l.
+AC06C7     (base 16)		ServerNet S.r.l.
+				Località Padriciano 99
+				Trieste  Trieste  34149
+				IT
+
+E8-3E-FC   (hex)		ARRIS Group, Inc.
+E83EFC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+90-0D-CB   (hex)		ARRIS Group, Inc.
+900DCB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-CD   (hex)		ARRIS Group, Inc.
+001DCD     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-D2   (hex)		ARRIS Group, Inc.
+001DD2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+8C-09-F4   (hex)		ARRIS Group, Inc.
+8C09F4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+88-57-EE   (hex)		BUFFALO.INC
+8857EE     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+10-1F-74   (hex)		Hewlett Packard
+101F74     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-9C-02   (hex)		Hewlett Packard
+009C02     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+F4-CE-46   (hex)		Hewlett Packard
+F4CE46     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+DC-FB-02   (hex)		BUFFALO.INC
+DCFB02     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg.,30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref  460-8315
+				JP
+
+00-16-35   (hex)		Hewlett Packard
+001635     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-08-C7   (hex)		Hewlett Packard
+0008C7     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-10-E3   (hex)		Hewlett Packard
+0010E3     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-08-83   (hex)		Hewlett Packard
+000883     (base 16)		Hewlett Packard
+				MAIL STOP 42LE
+				CUPERTINO  CA  95014
+				US
+
+A0-2B-B8   (hex)		Hewlett Packard
+A02BB8     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-19-BB   (hex)		Hewlett Packard
+0019BB     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-1F-29   (hex)		Hewlett Packard
+001F29     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-21-5A   (hex)		Hewlett Packard
+00215A     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-23-7D   (hex)		Hewlett Packard
+00237D     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+E8-ED-05   (hex)		ARRIS Group, Inc.
+E8ED05     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+78-96-84   (hex)		ARRIS Group, Inc.
+789684     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+CC-65-AD   (hex)		ARRIS Group, Inc.
+CC65AD     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-26-55   (hex)		Hewlett Packard
+002655     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-0D-9D   (hex)		Hewlett Packard
+000D9D     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-15-60   (hex)		Hewlett Packard
+001560     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-20-7B   (hex)		Intel Corporation
+00207B     (base 16)		Intel Corporation
+				2111 NE 25th Avenue
+				Hillsboro  OR  97124
+				US
+
+00-11-75   (hex)		Intel Corporation
+001175     (base 16)		Intel Corporation
+				 5200 NE ELAM YOUNG PARKWAY
+				HIllsboro  OR  97124
+				US
+
+78-0C-B8   (hex)		Intel Corporate
+780CB8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+18-5E-0F   (hex)		Intel Corporate
+185E0F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+2C-81-58   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+2C8158     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+80-02-DF   (hex)		ORA Inc.
+8002DF     (base 16)		ORA Inc.
+				No.1 Anjialou, Xiaoliangmaqiao Ave., Chaoyang Dist.
+				BeiJing    100125
+				CN
+
+00-30-6E   (hex)		Hewlett Packard
+00306E     (base 16)		Hewlett Packard
+				ENTERPRISE SYSTEMS TECH.CENTER
+				CUPERTINO  CA  95014
+				US
+
+3C-4A-92   (hex)		Hewlett Packard
+3C4A92     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+7C-7D-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C7D3D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+44-82-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4482E5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-23-4E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+00234E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+2C-23-3A   (hex)		Hewlett Packard
+2C233A     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-0A-57   (hex)		Hewlett Packard
+000A57     (base 16)		Hewlett Packard
+				10955 Tantau Avenue
+				Cupertino  CA  95014
+				US
+
+00-01-E7   (hex)		Hewlett Packard
+0001E7     (base 16)		Hewlett Packard
+				11000 Wolfe Road, Mailstop 42LE
+				Cupertino  CA  95014
+				US
+
+00-01-E6   (hex)		Hewlett Packard
+0001E6     (base 16)		Hewlett Packard
+				11000 Wolfe Road, Mailstop 42LE
+				Cupertino  CA  95014
+				US
+
+00-23-76   (hex)		HTC Corporation
+002376     (base 16)		HTC Corporation
+				No.23 Xinghua Road
+				Taoyuan County    330
+				TW
+
+38-E7-D8   (hex)		HTC Corporation
+38E7D8     (base 16)		HTC Corporation
+				No.23 Xinghua Road
+				Taoyuan County    330
+				TW
+
+18-87-96   (hex)		HTC Corporation
+188796     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+B4-CE-F6   (hex)		HTC Corporation
+B4CEF6     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+8C-DC-D4   (hex)		Hewlett Packard
+8CDCD4     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+D4-C9-EF   (hex)		Hewlett Packard
+D4C9EF     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+FC-15-B4   (hex)		Hewlett Packard
+FC15B4     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+3C-A8-2A   (hex)		Hewlett Packard
+3CA82A     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+EC-5F-23   (hex)		Qinghai Kimascend Electronics Technology Co. Ltd.
+EC5F23     (base 16)		Qinghai Kimascend Electronics Technology Co. Ltd.
+				2F,Building 6,J6 Science&Tech Park, No.6 Jiangjun Rd., Jiangning District
+				Nanjing  Jiangsu  211100
+				CN
+
+04-7D-50   (hex)		Shenzhen Kang Ying Technology Co.Ltd.
+047D50     (base 16)		Shenzhen Kang Ying Technology Co.Ltd.
+				Units 608,Saiba Electronic tower,NO.6, Langshan 2 Rd., Hi-Tech Industrial Park North , Nanshan, Shenzhen City
+				Shenzhen  Guangdong  518057
+				CN
+
+54-EF-FE   (hex)		Fullpower Technologies, Inc.
+54EFFE     (base 16)		Fullpower Technologies, Inc.
+				1200 Pacific Avenue
+				Santa Cruz  CA  95060
+				US
+
+94-09-37   (hex)		HUMAX Co., Ltd.
+940937     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bundang-gu,
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+E8-4D-D0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E84DD0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-45-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C45BA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-90-6F   (hex)		Shenzhen Tencent Computer System Co., Ltd.
+20906F     (base 16)		Shenzhen Tencent Computer System Co., Ltd.
+				5-10 Building High-tech Zone, Nanshan District, 
+				Shenzhen  Guangdong Province  518057
+				CN
+
+6C-E3-B6   (hex)		Nera Telecommunications Ltd.
+6CE3B6     (base 16)		Nera Telecommunications Ltd.
+				109 Defu Lane 10
+				Singapore  Singapore  539225
+				SG
+
+DC-D3-21   (hex)		HUMAX Co., Ltd.
+DCD321     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 11-4, Sunae-dong, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-825
+				KR
+
+6C-72-E7   (hex)		Apple, Inc.
+6C72E7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-1B-B2   (hex)		Apple, Inc.
+741BB2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-E8-73   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+6CE873     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park
+				Shenzhen  Guangdong  518057
+				CN
+
+C4-6E-1F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+C46E1F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+50-FA-84   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+50FA84     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+44-B3-2D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+44B32D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+CC-44-63   (hex)		Apple, Inc.
+CC4463     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-25-93   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+882593     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+00-1F-E1   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+001FE1     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+D8-5D-4C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D85D4C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 7, Second Part, Honghualing Industrial Zone
+				Shenzhen  Guangdong  518000
+				CN
+
+A0-F3-C1   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+A0F3C1     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan
+				shenzhen  guangdong Province  518057
+				CN
+
+00-1D-0F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+001D0F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				3/F, Bldg. R1-B,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-23-CD   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+0023CD     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				South Building, No.5 Keyuan Road, Central Zone,
+				Shenzhen  Guangdong  518000
+				CN
+
+90-48-9A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+90489A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-71-CC   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+0071CC     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+B0-5B-67   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B05B67     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-A2-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CCA223     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-6A-89   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+786A89     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-46-08   (hex)		zte corporation
+384608     (base 16)		zte corporation
+				12/F,ZTE R&D Building,Kejinan Road,
+				Shenzhen  Guangdong  518057
+				CN
+
+4C-AC-0A   (hex)		zte corporation
+4CAC0A     (base 16)		zte corporation
+				12/F,ZTE R&D Building,Kejinan Road,
+				Shenzhen  Guangdong  518057
+				CN
+
+B4-B3-62   (hex)		zte corporation
+B4B362     (base 16)		zte corporation
+				12/F,ZTE R&D Building,Kejinan Road,
+				Shenzhen  Guangdong  518057
+				CN
+
+B0-75-D5   (hex)		zte corporation
+B075D5     (base 16)		zte corporation
+				12/F,ZTE R&D Building,Kejinan Road,
+				Shenzhen  Guangdong  518057
+				CN
+
+D0-15-4A   (hex)		zte corporation
+D0154A     (base 16)		zte corporation
+				12/F.,zte R&D building,kejinan Road,
+				shenzhen  guangdong  518057
+				CN
+
+00-26-ED   (hex)		zte corporation
+0026ED     (base 16)		zte corporation
+				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
+				Shenzhen  GUANGDONG  518057
+				CN
+
+00-60-57   (hex)		Murata Manufacturing Co., Ltd.
+006057     (base 16)		Murata Manufacturing Co., Ltd.
+				1-18-1 HAKUSAN MIDORI-KU
+				YOKOHAMA  226    12345
+				JP
+
+14-B9-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14B968     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-F9-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CF96A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-3E-8E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+083E8E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-22-93   (hex)		zte corporation
+002293     (base 16)		zte corporation
+				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
+				Shenzhen  GUANGDONG  518057
+				CN
+
+10-A5-D0   (hex)		Murata Manufacturing Co., Ltd.
+10A5D0     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1,Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+50-A7-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+50A72B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-D6-BD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0CD6BD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-F8-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+00F81C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-7A-4C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+087A4C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
+				Shenzhen  GuangDong  518057
+				CN
+
+AC-E2-15   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ACE215     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+34-6B-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+346BD3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+70-72-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+70723C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+AC-E8-7B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ACE87B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+F8-3D-FF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F83DFF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+28-5F-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+285FDB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+40-4D-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+404D8E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+4C-54-99   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4C5499     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+F4-9F-F3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F49FF3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-09-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+240995     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-DB-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+84DBAC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-77-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94772B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-40-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D440F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-02-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04021F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-CD-AE   (hex)		Avaya Inc
+10CDAE     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+04-8A-15   (hex)		Avaya Inc
+048A15     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+B4-B0-17   (hex)		Avaya Inc
+B4B017     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+90-FB-5B   (hex)		Avaya Inc
+90FB5B     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+C8-F4-06   (hex)		Avaya Inc
+C8F406     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+70-52-C5   (hex)		Avaya Inc
+7052C5     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+F8-15-47   (hex)		Avaya Inc
+F81547     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+50-61-84   (hex)		Avaya Inc
+506184     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+18-59-36   (hex)		Xiaomi Communications Co Ltd
+185936     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+20-A7-83   (hex)		miControl GmbH
+20A783     (base 16)		miControl GmbH
+				Blankenfelder Chaussee 1
+				Großbeeren  Brandenburg  15831
+				DE
+
+20-0B-C7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+200BC7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen  Guangdong  518129
+				CN
+
+F8-4A-BF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F84ABF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen  Guangdong  518129
+				CN
+
+78-D7-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+78D752     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+10-47-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+104780     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+54-89-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+548998     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+00-04-0D   (hex)		Avaya Inc
+00040D     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+70-A8-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+70A8E3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen    518129
+				CN
+
+F8-E8-11   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F8E811     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen  Guangdong  518129
+				CN
+
+F8-A4-5F   (hex)		Xiaomi Communications Co Ltd
+F8A45F     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+64-09-80   (hex)		Xiaomi Communications Co Ltd
+640980     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+94-04-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94049C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				Shenzhen  Guangdong  518129
+				CN
+
+68-8F-84   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+688F84     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				SHENZHEN  GUANGDONG  518129
+				CN
+
+30-D1-7E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+30D17E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+00-50-BD   (hex)		Cisco Systems, Inc
+0050BD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-90-6F   (hex)		Cisco Systems, Inc
+00906F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-D6-EA   (hex)		Texas Instruments
+74D6EA     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+20-91-48   (hex)		Texas Instruments
+209148     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+54-4A-16   (hex)		Texas Instruments
+544A16     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+E0-2F-6D   (hex)		Cisco Systems, Inc
+E02F6D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+58-97-1E   (hex)		Cisco Systems, Inc
+58971E     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+B4-E9-B0   (hex)		Cisco Systems, Inc
+B4E9B0     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-08-32   (hex)		Cisco Systems, Inc
+000832     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+18-9C-5D   (hex)		Cisco Systems, Inc
+189C5D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+5C-A4-8A   (hex)		Cisco Systems, Inc
+5CA48A     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+1C-1D-86   (hex)		Cisco Systems, Inc
+1C1D86     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+60-73-5C   (hex)		Cisco Systems, Inc
+60735C     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+34-A8-4E   (hex)		Cisco Systems, Inc
+34A84E     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+54-78-1A   (hex)		Cisco Systems, Inc
+54781A     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-60-5C   (hex)		Cisco Systems, Inc
+00605C     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-06-C1   (hex)		Cisco Systems, Inc
+0006C1     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-E0-14   (hex)		Cisco Systems, Inc
+00E014     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+DC-A5-F4   (hex)		Cisco Systems, Inc
+DCA5F4     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+50-17-FF   (hex)		Cisco Systems, Inc
+5017FF     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+70-10-5C   (hex)		Cisco Systems, Inc
+70105C     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+10-F3-11   (hex)		Cisco Systems, Inc
+10F311     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-50-F0   (hex)		Cisco Systems, Inc
+0050F0     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-50-14   (hex)		Cisco Systems, Inc
+005014     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-90-F2   (hex)		Cisco Systems, Inc
+0090F2     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+0C-E0-E4   (hex)		PLANTRONICS, INC.
+0CE0E4     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+74-A2-E6   (hex)		Cisco Systems, Inc
+74A2E6     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+BC-F1-F2   (hex)		Cisco Systems, Inc
+BCF1F2     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+C8-00-84   (hex)		Cisco Systems, Inc
+C80084     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+40-A6-E8   (hex)		Cisco Systems, Inc
+40A6E8     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+30-85-A9   (hex)		ASUSTek COMPUTER INC.
+3085A9     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou
+				Taipei    112
+				US
+
+B8-38-61   (hex)		Cisco Systems, Inc
+B83861     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+58-0A-20   (hex)		Cisco Systems, Inc
+580A20     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+2C-3E-CF   (hex)		Cisco Systems, Inc
+2C3ECF     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+B0-59-47   (hex)		Shenzhen Qihu Intelligent Technology Company Limited
+B05947     (base 16)		Shenzhen Qihu Intelligent Technology Company Limited
+				Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone
+				Shenzhen  Guangdong  518057
+				CN
+
+34-62-88   (hex)		Cisco Systems, Inc
+346288     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+CC-D8-C1   (hex)		Cisco Systems, Inc
+CCD8C1     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+7C-0E-CE   (hex)		Cisco Systems, Inc
+7C0ECE     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+A0-EC-F9   (hex)		Cisco Systems, Inc
+A0ECF9     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+50-87-89   (hex)		Cisco Systems, Inc
+508789     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+38-1C-1A   (hex)		Cisco Systems, Inc
+381C1A     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+BC-67-1C   (hex)		Cisco Systems, Inc
+BC671C     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-19-47   (hex)		Cisco SPVTG
+001947     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+00-18-39   (hex)		Cisco-Linksys, LLC
+001839     (base 16)		Cisco-Linksys, LLC
+				121 Theory Dr.
+				Irvine  CA  92612
+				US
+
+00-22-15   (hex)		ASUSTek COMPUTER INC.
+002215     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,
+				Taipei    112
+				TW
+
+E0-CB-4E   (hex)		ASUSTek COMPUTER INC.
+E0CB4E     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+54-7C-69   (hex)		Cisco Systems, Inc
+547C69     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-17-31   (hex)		ASUSTek COMPUTER INC.
+001731     (base 16)		ASUSTek COMPUTER INC.
+				No.5 Shing Yeh Street,Kwei Shan Hsiang,Taoyuan
+				Taipei    333
+				TW
+
+DC-CE-C1   (hex)		Cisco Systems, Inc
+DCCEC1     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+9C-57-AD   (hex)		Cisco Systems, Inc
+9C57AD     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+60-FE-C5   (hex)		Apple, Inc.
+60FEC5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-25-E7   (hex)		Apple, Inc.
+E425E7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-92-6B   (hex)		Apple, Inc.
+BC926B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-1C-0C   (hex)		Apple, Inc.
+101C0C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-00-07   (hex)		Apple, Inc.
+080007     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-40-96   (hex)		Cisco Systems, Inc
+004096     (base 16)		Cisco Systems, Inc
+				170 W. Tasman Drive
+				San Jose  CA  95134
+				US
+
+30-F7-0D   (hex)		Cisco Systems, Inc
+30F70D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+E8-65-49   (hex)		Cisco Systems, Inc
+E86549     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+B0-7D-47   (hex)		Cisco Systems, Inc
+B07D47     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+38-ED-18   (hex)		Cisco Systems, Inc
+38ED18     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+38-20-56   (hex)		Cisco Systems, Inc
+382056     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+40-D3-2D   (hex)		Apple, Inc.
+40D32D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-2C-03   (hex)		Apple, Inc.
+C42C03     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-27-E4   (hex)		Apple, Inc.
+9027E4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-9A-DD   (hex)		Apple, Inc.
+109ADD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-1F-AA   (hex)		Apple, Inc.
+581FAA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-C6-63   (hex)		Apple, Inc.
+88C663     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1F-5B   (hex)		Apple, Inc.
+001F5B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-24-36   (hex)		Apple, Inc.
+002436     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-25-4B   (hex)		Apple, Inc.
+00254B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-16-CB   (hex)		Apple, Inc.
+0016CB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-17-F2   (hex)		Apple, Inc.
+0017F2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-6D-62   (hex)		Apple, Inc.
+7C6D62     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-C9-D0   (hex)		Apple, Inc.
+20C9D0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-96-7B   (hex)		Apple, Inc.
+68967B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-FC-FE   (hex)		Apple, Inc.
+84FCFE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-8B-7F   (hex)		Apple, Inc.
+E48B7F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-88-65   (hex)		Apple, Inc.
+008865     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-3B-AF   (hex)		Apple, Inc.
+BC3BAF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-E0-72   (hex)		Apple, Inc.
+3CE072     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-48-4C   (hex)		Apple, Inc.
+38484C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-67-06   (hex)		Apple, Inc.
+A46706     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-58-77   (hex)		Apple, Inc.
+8C5877     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-F0-5F   (hex)		Apple, Inc.
+7CF05F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-49-71   (hex)		Apple, Inc.
+804971     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-3E-6D   (hex)		Apple, Inc.
+6C3E6D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-67-78   (hex)		Apple, Inc.
+BC6778     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-D1-CB   (hex)		Apple, Inc.
+D8D1CB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-FA-D8   (hex)		Apple, Inc.
+A8FAD8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-17-C2   (hex)		Apple, Inc.
+B817C2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-11-BE   (hex)		Apple, Inc.
+7C11BE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-37-37   (hex)		Apple, Inc.
+283737     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-EA-D6   (hex)		Apple, Inc.
+50EAD6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-D6-BB   (hex)		Apple, Inc.
+98D6BB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-9E-FC   (hex)		Apple, Inc.
+189EFC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-CF-5C   (hex)		Apple, Inc.
+ACCF5C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-00-6E   (hex)		Apple, Inc.
+80006E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-8E-0C   (hex)		Apple, Inc.
+848E0C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-15-C2   (hex)		Apple, Inc.
+3C15C2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-70-9F   (hex)		Apple, Inc.
+6C709F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-F2-FB   (hex)		Apple, Inc.
+C0F2FB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-E3-14   (hex)		Apple, Inc.
+24E314     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-E6-50   (hex)		Apple, Inc.
+80E650     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-FD-61   (hex)		Apple, Inc.
+90FD61     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-70-45   (hex)		Apple, Inc.
+087045     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-88-08   (hex)		Apple, Inc.
+A88808     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-C3-61   (hex)		Apple, Inc.
+A4C361     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-F0-EE   (hex)		Apple, Inc.
+2CF0EE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-97-F3   (hex)		Apple, Inc.
+5C97F3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-F4-6F   (hex)		Apple, Inc.
+D4F46F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-76-BA   (hex)		Apple, Inc.
+6476BA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-E2-FD   (hex)		Apple, Inc.
+34E2FD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-48-9A   (hex)		Apple, Inc.
+04489A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-F6-1C   (hex)		Apple, Inc.
+F0F61C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-29-37   (hex)		Apple, Inc.
+8C2937     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-9F-BA   (hex)		Apple, Inc.
+B09FBA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-4D-E9   (hex)		Apple, Inc.
+0C4DE9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-F5-C6   (hex)		Apple, Inc.
+E0F5C6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-ED-CD   (hex)		Apple, Inc.
+A0EDCD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-F2-49   (hex)		Hitron Technologies. Inc
+F0F249     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+5C-F5-DA   (hex)		Apple, Inc.
+5CF5DA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-EE-69   (hex)		Apple, Inc.
+18EE69     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-9A-BE   (hex)		Apple, Inc.
+649ABE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-99-BF   (hex)		Apple, Inc.
+F099BF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-E9-6A   (hex)		Apple, Inc.
+94E96A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-29-3A   (hex)		Apple, Inc.
+AC293A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-FC-01   (hex)		Apple, Inc.
+9CFC01     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-35-EB   (hex)		Apple, Inc.
+9C35EB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-43-7C   (hex)		Apple, Inc.
+48437C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-A3-95   (hex)		Apple, Inc.
+34A395     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-7E-61   (hex)		Apple, Inc.
+787E61     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-F8-1D   (hex)		Apple, Inc.
+60F81D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-C9-86   (hex)		Apple, Inc.
+38C986     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-33-11   (hex)		Apple, Inc.
+D03311     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-7A-55   (hex)		Apple, Inc.
+507A55     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-C2-C6   (hex)		Shanghai Airm2m Communication Technology Co., Ltd
+C8C2C6     (base 16)		Shanghai Airm2m Communication Technology Co., Ltd
+				Rm.816,Building C,No.668,East Beijing Road,Huangpu District,Shanghai,China
+				Shang hai  Shang hai  200001
+				CN
+
+78-9C-85   (hex)		August Home, Inc.
+789C85     (base 16)		August Home, Inc.
+				657 Bryant Street
+				San Francisco  California  94107
+				US
+
+74-D7-CA   (hex)		Panasonic Corporation Automotive
+74D7CA     (base 16)		Panasonic Corporation Automotive
+				5652
+				Matsumoto City  Nagano  399-8730
+				JP
+
+58-82-A8   (hex)		Microsoft
+5882A8     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+58-68-5D   (hex)		Tempo Australia Pty Ltd
+58685D     (base 16)		Tempo Australia Pty Ltd
+				8/14 Rodborough Rd
+				Frenchs Forest  NSW  2086
+				AU
+
+54-4B-8C   (hex)		Juniper Networks
+544B8C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+DC-FE-07   (hex)		PEGATRON CORPORATION
+DCFE07     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+70-79-38   (hex)		Wuxi Zhanrui Electronic Technology Co.,LTD
+707938     (base 16)		Wuxi Zhanrui Electronic Technology Co.,LTD
+				Wuxi,Taihu West Road No.1188 Runhua International Building 1604
+				Wuxi  Jiangsu  214072
+				CN
+
+24-31-84   (hex)		SHARP Corporation
+243184     (base 16)		SHARP Corporation
+				22-22,Nagaike-Cho
+				Osaka-City  Osaka-Prefecture  545-8522
+				JP
+
+58-2B-DB   (hex)		Pax AB
+582BDB     (base 16)		Pax AB
+				Box 72
+				Hälleforsnäs    64806
+				SE
+
+E0-36-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E03676     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-38-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC388F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-3E-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D03E5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-9E-41   (hex)		G24 Power Limited
+C49E41     (base 16)		G24 Power Limited
+				South Lake Drive
+				Newport  Gwent  NP10 8AS
+				GB
+
+B8-13-E9   (hex)		Trace Live Network
+B813E9     (base 16)		Trace Live Network
+				#200, 5970 Centre St SE
+				Calgary  Alberta  T2H0C1
+				CA
+
+80-B7-09   (hex)		Viptela, Inc
+80B709     (base 16)		Viptela, Inc
+				1740 Technology Drive, Ste#500
+				San Jose  California  95110
+				US
+
+F0-0D-5C   (hex)		JinQianMao  Technology Co.,Ltd.
+F00D5C     (base 16)		JinQianMao  Technology Co.,Ltd.
+				58#,Jiangbin Road,Taijiang District
+				Fuzhou  Fujian  350009
+				CN
+
+54-BE-53   (hex)		zte corporation
+54BE53     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+28-0E-8B   (hex)		Beijing Spirit Technology Development Co., Ltd.
+280E8B     (base 16)		Beijing Spirit Technology Development Co., Ltd.
+				No. 26 Ave. 4 Chuangye Middle Road
+				  Beijing  100085
+				CN
+
+F4-4D-30   (hex)		Elitegroup Computer Systems Co.,Ltd.
+F44D30     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No.239,Sec.2,Ti Ding Blvd.,
+				Taipei  Taipei  
+				TW
+
+0C-86-10   (hex)		Juniper Networks
+0C8610     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+38-D4-0B   (hex)		Samsung Electronics Co.,Ltd
+38D40B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E8-3A-12   (hex)		Samsung Electronics Co.,Ltd
+E83A12     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-DA-9B   (hex)		Motorola Mobility LLC, a Lenovo Company
+24DA9B     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+A4-DC-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4DCBE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-B8-70   (hex)		Beijing Heweinet Technology Co.,Ltd.
+ECB870     (base 16)		Beijing Heweinet Technology Co.,Ltd.
+				1514 Room,15F,No.2 Building
+				Haidian District  Beijing  100085
+				CN
+
+94-BB-AE   (hex)		Husqvarna AB
+94BBAE     (base 16)		Husqvarna AB
+				Drottninggatan 2
+				Huskvarna  Sweden  56131
+				SE
+
+D4-0A-A9   (hex)		ARRIS Group, Inc.
+D40AA9     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+20-3D-66   (hex)		ARRIS Group, Inc.
+203D66     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D4-94-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D494E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-78-F0   (hex)		Beijing HuaqinWorld Technology Co.,Ltd.
+B078F0     (base 16)		Beijing HuaqinWorld Technology Co.,Ltd.
+				Beijing City, Chaoyang District Wangjing Garden Department Youle A District No. 3 building 308 room
+				Bejjing  Bejjing  100102
+				CN
+
+20-9B-CD   (hex)		Apple, Inc.
+209BCD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-95-E3   (hex)		SHANGHAI SIMCOM LIMITED
+3095E3     (base 16)		SHANGHAI SIMCOM LIMITED
+				Building A,SIM Technology Building,No.633, Jinzhong Road,Changning District , Shanghai, P.R.China
+				Shanghai  /  200355
+				CN
+
+80-65-6D   (hex)		Samsung Electronics Co.,Ltd
+80656D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-F1-36   (hex)		Samsung Electronics Co.,Ltd
+FCF136     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+B8-86-87   (hex)		Liteon Technology Corporation
+B88687     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+18-89-5B   (hex)		Samsung Electronics Co.,Ltd
+18895B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+58-49-25   (hex)		E3 Enterprise
+584925     (base 16)		E3 Enterprise
+				32F, Shinjuku Nomura Building
+				  Tokyo  163-0532
+				JP
+
+94-F2-78   (hex)		Elma Electronic
+94F278     (base 16)		Elma Electronic
+				44350 S. Grimmer Blvd
+				Fremont  CA  94538
+				US
+
+28-37-13   (hex)		Shenzhen 3Nod Digital Technology Co., Ltd.
+283713     (base 16)		Shenzhen 3Nod Digital Technology Co., Ltd.
+				Building D, No.8 Langhui Road, Tangxiayong Community, Songgang Street, Baoan District, Shenzhen City, Guangdong Province, P.R. China
+				Shenzhen  Guangdong  518105
+				CN
+
+08-94-EF   (hex)		Wistron Infocomm (Zhongshan) Corporation
+0894EF     (base 16)		Wistron Infocomm (Zhongshan) Corporation
+				No.38,East Keji Road,Zhongshan Torch Development Zone,Zhongshan City,Guangdong,China
+				Zhongshan  Guangdong  528437
+				CN
+
+E0-31-9E   (hex)		Valve Corporation
+E0319E     (base 16)		Valve Corporation
+				10900 NE 4th ST
+				Bellevue  Washington  98004
+				US
+
+3C-5C-C3   (hex)		Shenzhen First Blue Chip Technology Ltd
+3C5CC3     (base 16)		Shenzhen First Blue Chip Technology Ltd
+				3Nod Smart Building,11Floor,No.3012,Binhai Avenue, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+C4-9F-F3   (hex)		Mciao Technologies, Inc.
+C49FF3     (base 16)		Mciao Technologies, Inc.
+				Room304, Building 1, No.288 Qiuyi Rd., Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+78-8E-33   (hex)		Jiangsu SEUIC Technology Co.,Ltd
+788E33     (base 16)		Jiangsu SEUIC Technology Co.,Ltd
+				NO23.Wenzhu Road.Yuhuatai Distrct.
+				Nanjing  Jiangsu Province  210012
+				CN
+
+EC-EE-D8   (hex)		ZTLX Network Technology Co.,Ltd
+ECEED8     (base 16)		ZTLX Network Technology Co.,Ltd
+				Unit 703,No 77,CuShaHuan
+				ZhuHai  GuangDong  519000
+				CN
+
+80-EB-77   (hex)		Wistron Corporation
+80EB77     (base 16)		Wistron Corporation
+				No. 158, SingShan Rd., Neihu, Taipei 11469, Taiwan, R.O.C.
+				Neihu  Taipei  11469
+				
+
+48-39-74   (hex)		Proware Technologies Co., Ltd.
+483974     (base 16)		Proware Technologies Co., Ltd.
+				2nd F1 East Wing,South Section,Factory Building 24,Science&Technology Park, Shennan Rd, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+30-FF-F6   (hex)		HangZhou KuoHeng Technology Co.,ltd
+30FFF6     (base 16)		HangZhou KuoHeng Technology Co.,ltd
+				No.368,Wangjiali,Chang'ancun Industrial Park,Wenyan Town, Xiaoshan District, Hangzhou, CHina
+				HangZhou  ZheJiang  311258
+				CN
+
+4C-C6-81   (hex)		Shenzhen Aisat Electronic Co., Ltd.
+4CC681     (base 16)		Shenzhen Aisat Electronic Co., Ltd.
+				Golden Building 419#, Design Park,
+				Shenzhen  Guangdong  518056
+				CN
+
+48-E2-44   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+48E244     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+7C-AB-25   (hex)		MESMO TECHNOLOGY INC.
+7CAB25     (base 16)		MESMO TECHNOLOGY INC.
+				3F., No.181, ZHOUZI ST., NEIHU DIST.,
+				TAIPEI  TAIPEI  11493
+				TW
+
+B0-41-1D   (hex)		ITTIM Technologies
+B0411D     (base 16)		ITTIM Technologies
+				B1606, No.6, Zhongguancun South Street,
+				Beijing  Beijing  100086
+				CN
+
+F8-BF-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F8BF09     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-B2-5C   (hex)		Acacia Communications
+7CB25C     (base 16)		Acacia Communications
+				3 Clock Tower Place
+				Maynard  MA  01754
+				US
+
+DC-DB-70   (hex)		Tonfunk Systementwicklung und Service GmbH
+DCDB70     (base 16)		Tonfunk Systementwicklung und Service GmbH
+				Anger20
+				Falkenstein / Harz OT Ermsleben  Sachsen-Anhalt  06463
+				DE
+
+80-0B-51   (hex)		Chengdu XGimi Technology Co.,Ltd
+800B51     (base 16)		Chengdu XGimi Technology Co.,Ltd
+				5F Building A7,Tianfu Software Park,Tianfu
+				Chengdu  Sichuan  610041
+				CN
+
+F8-0D-60   (hex)		CANON INC.
+F80D60     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+F0-18-2B   (hex)		LG Chem
+F0182B     (base 16)		LG Chem
+				128, Yeoui-daero, Yeongdeungpo-gu,
+				Seoul  Seoul  150-721
+				KR
+
+34-81-F4   (hex)		SST Taiwan Ltd.
+3481F4     (base 16)		SST Taiwan Ltd.
+				5F, No. 5, Industry E Rd. VII,
+				Hsin Chu,  Taiwan  30077
+				TW
+
+7C-A2-37   (hex)		King Slide Technology CO., LTD.
+7CA237     (base 16)		King Slide Technology CO., LTD.
+				No. 6, Luke 9th Rd.,
+				Kaohsiung  Taiwan  82151
+				TW
+
+D4-04-CD   (hex)		ARRIS Group, Inc.
+D404CD     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+74-73-36   (hex)		MICRODIGTAL Inc
+747336     (base 16)		MICRODIGTAL Inc
+				10F, Ace High-End Tower 9th,
+				  Seoul  153-803
+				KR
+
+38-2B-78   (hex)		ECO PLUGS ENTERPRISE CO., LTD
+382B78     (base 16)		ECO PLUGS ENTERPRISE CO., LTD
+				10F,-6, No.117, Sec.2, Zhongbei Rd., Zhongli Dist.,
+				Taoyuan  Taiwan  32097
+				TW
+
+A4-7B-2C   (hex)		Nokia
+A47B2C     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+24-E5-AA   (hex)		Philips Oral Healthcare, Inc.
+24E5AA     (base 16)		Philips Oral Healthcare, Inc.
+				22100 Bothell Everett Hwy
+				Bothell  WA  98021
+				US
+
+78-BD-BC   (hex)		Samsung Electronics Co.,Ltd
+78BDBC     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+34-9B-5B   (hex)		Maquet GmbH
+349B5B     (base 16)		Maquet GmbH
+				Kehler Strasse 31
+				Rastatt  Baden-Württemberg  76437
+				DE
+
+88-41-57   (hex)		Shenzhen Atsmart Technology Co.,Ltd.
+884157     (base 16)		Shenzhen Atsmart Technology Co.,Ltd.
+				East 3F ,2 Building, Meijing Industry Park, Qiaoxiang Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+D8-9A-34   (hex)		Beijing SHENQI Technology Co., Ltd.
+D89A34     (base 16)		Beijing SHENQI Technology Co., Ltd.
+				No.6 Shang Di West Road
+				 Haidian District  Beijing  100085
+				CN
+
+A0-A6-5C   (hex)		Supercomputing Systems AG
+A0A65C     (base 16)		Supercomputing Systems AG
+				Technoparkstrasse 1
+				Zurich  ZH  8005
+				CH
+
+48-50-73   (hex)		Microsoft Corporation
+485073     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+E8-37-7A   (hex)		Zyxel Communications Corporation
+E8377A     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+80-3B-2A   (hex)		ABB Xiamen Low Voltage Equipment Co.,Ltd.
+803B2A     (base 16)		ABB Xiamen Low Voltage Equipment Co.,Ltd.
+				No.12-20,3rd Chuang Xin Road
+				Xiamen SEZ  Fujian  361006
+				CN
+
+7C-F9-0E   (hex)		Samsung Electronics Co.,Ltd
+7CF90E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-F0-D3   (hex)		Samsung Electronics Co.,Ltd
+50F0D3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-A7-84   (hex)		ITX security
+00A784     (base 16)		ITX security
+				9F Kolon Digital Tower Aston Bldg
+				SEOUL  (Outside US/Canada/China)  441-813
+				KR
+
+84-11-9E   (hex)		Samsung Electronics Co.,Ltd
+84119E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-9A-10   (hex)		Microsoft Corporation
+149A10     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+38-FA-CA   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+38FACA     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+5C-B4-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CB43E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-77-81   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+707781     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+54-E1-40   (hex)		INGENICO
+54E140     (base 16)		INGENICO
+				9 AVENUE DE LA GARE
+				VALENCE  DROME  26958
+				FR
+
+E4-90-7E   (hex)		Motorola Mobility LLC, a Lenovo Company
+E4907E     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+74-6A-3A   (hex)		Aperi Corporation
+746A3A     (base 16)		Aperi Corporation
+				360 Mobil Avenue
+				Camarillo  CA  93010
+				US
+
+94-A7-B7   (hex)		zte corporation
+94A7B7     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+18-44-E6   (hex)		zte corporation
+1844E6     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+3C-CE-15   (hex)		Mercedes-Benz USA, LLC
+3CCE15     (base 16)		Mercedes-Benz USA, LLC
+				One Mercedes Drive
+				Montvale  NJ  07645
+				US
+
+28-76-10   (hex)		IgniteNet
+287610     (base 16)		IgniteNet
+				1, Creation 3rd Rd.
+				Hsinchu    300
+				TW
+
+20-D7-5A   (hex)		Posh Mobile Limited
+20D75A     (base 16)		Posh Mobile Limited
+				1011A 10/F Harbour Centre Tower 1, 1 Hok Cheung Street
+				HungHom  Kowloon  00000
+				HK
+
+F4-15-63   (hex)		F5 Networks, Inc.
+F41563     (base 16)		F5 Networks, Inc.
+				1322 North Whitman Lane
+				Liberty Lake  WA  99019
+				US
+
+8C-8B-83   (hex)		Texas Instruments
+8C8B83     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+40-11-DC   (hex)		Sonance
+4011DC     (base 16)		Sonance
+				212 Avenida Fabricante
+				San Clemente  California  92672
+				US
+
+1C-83-41   (hex)		Hefei Bitland Information Technology Co.Ltd
+1C8341     (base 16)		Hefei Bitland Information Technology Co.Ltd
+				C1# Building, Bitland Industrial Park, No#4088, Jinxiu RD,Economic Development Zone, Hefei, Anhui, China
+				Hefei  Anhui  230061
+				CN
+
+08-1F-EB   (hex)		BinCube
+081FEB     (base 16)		BinCube
+				Si Ming Shan Road 116, Beilun
+				Ningbo  Zhejiang  315800
+				CN
+
+78-5F-4C   (hex)		Argox Information Co., Ltd.
+785F4C     (base 16)		Argox Information Co., Ltd.
+				7F, No.126, Lane 235, Baoqiao Rd., Xindian Dist.
+				New Taipei City  Taipei  231
+				TW
+
+34-CC-28   (hex)		Nexpring Co. LTD.,
+34CC28     (base 16)		Nexpring Co. LTD.,
+				3rd Floor, Building C, PDC Tower
+				Sungnam City  Kyungki-do  463400
+				KR
+
+54-E2-C8   (hex)		Dongguan Aoyuan Electronics Technology Co., Ltd
+54E2C8     (base 16)		Dongguan Aoyuan Electronics Technology Co., Ltd
+				Factory A7 Zhen'an Sci-Tech Industrial Park, Chang'an Town, Dongguan City, Guangdong Province, China
+				Dongguan City  Guangdong Province  523863
+				CN
+
+6C-1E-70   (hex)		Guangzhou YBDS IT Co.,Ltd
+6C1E70     (base 16)		Guangzhou YBDS IT Co.,Ltd
+				Room 318,3/F,970 Kang Wang Bei Lu,Liwan District,Guangzhou,PRC
+				Guangzhou City  Guangdong Province  510170
+				CN
+
+54-B8-0A   (hex)		D-Link International
+54B80A     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+D8-AD-DD   (hex)		Sonavation, Inc.
+D8ADDD     (base 16)		Sonavation, Inc.
+				3970 RCA Blvd.
+				Palm Beach Gardens  Florida  33410
+				US
+
+88-33-BE   (hex)		Ivenix, Inc.
+8833BE     (base 16)		Ivenix, Inc.
+				21 Water Street
+				Amesbury  MA  01913
+				US
+
+E4-8D-8C   (hex)		Routerboard.com
+E48D8C     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+70-68-79   (hex)		Saijo Denki International Co., Ltd.
+706879     (base 16)		Saijo Denki International Co., Ltd.
+				39/9 Moo 9 Soi Duangmanee
+				Muang  Nonthaburi  11000
+				TH
+
+10-AF-78   (hex)		Shenzhen ATUE Technology Co., Ltd
+10AF78     (base 16)		Shenzhen ATUE Technology Co., Ltd
+				3/F,Building 2nd, Xintang Industry Zone,Fuyong Town,Bao'an District
+				Shenzhen  Guangdong  518103
+				CN
+
+CC-19-A8   (hex)		PT Inovação e Sistemas SA
+CC19A8     (base 16)		PT Inovação e Sistemas SA
+				Rua Eng. José Ferreira Pinto Basto
+				Aveiro  Aveiro  3810-106
+				PT
+
+B4-B2-65   (hex)		DAEHO I&T
+B4B265     (base 16)		DAEHO I&T
+				211, Jayumuyeok 3-gil, MasanHoewon-gu
+				Changwon-si  Gyeongsangnam-do  630-812
+				KR
+
+E0-35-60   (hex)		Challenger Supply Holdings, LLC
+E03560     (base 16)		Challenger Supply Holdings, LLC
+				4500 Mercantile Plaza Dr.
+				Fort Worth  TX  76137
+				US
+
+3C-CB-7C   (hex)		TCT mobile ltd
+3CCB7C     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+24-9E-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+249EAB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-4B-03   (hex)		Samsung Electronics Co.,Ltd
+244B03     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+E4-CE-70   (hex)		Health & Life co., Ltd.
+E4CE70     (base 16)		Health & Life co., Ltd.
+				9F, No. 186, Jian Yi Road
+				New Taipei City  Taiwan  23553
+				TW
+
+7C-11-CD   (hex)		QianTang Technology
+7C11CD     (base 16)		QianTang Technology
+				36 Landmark Palace
+				Beijing  Beijing  100125
+				
+
+CC-A4-AF   (hex)		Shenzhen Sowell Technology Co., LTD
+CCA4AF     (base 16)		Shenzhen Sowell Technology Co., LTD
+				7F, Yizhe Building. Yuquan Road.
+				Shen Zhen  Guang Dong  518052
+				CN
+
+10-2C-83   (hex)		XIMEA
+102C83     (base 16)		XIMEA
+				Lesna 52
+				Marianka  SK  90033
+				SK
+
+6C-A7-5F   (hex)		zte corporation
+6CA75F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+8C-79-67   (hex)		zte corporation
+8C7967     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+78-58-F3   (hex)		Vachen Co.,Ltd
+7858F3     (base 16)		Vachen Co.,Ltd
+				Rm1206, Hanyang Bldg, 18, Gukhoe-daero 70-gil, Yeongdeungpo-gu
+				Seoul  Seoul  150-748
+				KR
+
+70-9C-8F   (hex)		Nero AG
+709C8F     (base 16)		Nero AG
+				Rueppurrer Str. 1A
+				Karlsruhe  BW  76137
+				DE
+
+00-7E-56   (hex)		China Dragon Technology Limited
+007E56     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+74-E2-8C   (hex)		Microsoft Corporation
+74E28C     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+00-71-C2   (hex)		PEGATRON CORPORATION
+0071C2     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+7C-82-74   (hex)		Shenzhen Hikeen Technology CO.,LTD
+7C8274     (base 16)		Shenzhen Hikeen Technology CO.,LTD
+				15rd floor,unit1,Building A of Kexing Science Park
+				Shenzhen  GuangDong  518057
+				CN
+
+94-D4-17   (hex)		GPI KOREA INC.
+94D417     (base 16)		GPI KOREA INC.
+				Daebang Triplaon B-Dong 201
+				Goyang-Si  Kyeonggi-Do  410-704
+				KR
+
+24-4B-81   (hex)		Samsung Electronics Co.,Ltd
+244B81     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+70-4E-66   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+704E66     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+D8-55-A3   (hex)		zte corporation
+D855A3     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+38-D8-2F   (hex)		zte corporation
+38D82F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F0-79-59   (hex)		ASUSTek COMPUTER INC.
+F07959     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+E0-8E-3C   (hex)		Aztech Electronics Pte Ltd
+E08E3C     (base 16)		Aztech Electronics Pte Ltd
+				31, Ubi Road 1
+				Singapore  Singapore  408694
+				SG
+
+84-4B-B7   (hex)		Beijing Sankuai Online Technology Co.,Ltd
+844BB7     (base 16)		Beijing Sankuai Online Technology Co.,Ltd
+				Block F&G, Wangjing International R & D Park,     
+				Chaoyang District  BEIJING  100102
+				CN
+
+68-F0-BC   (hex)		Shenzhen LiWiFi Technology Co., Ltd
+68F0BC     (base 16)		Shenzhen LiWiFi Technology Co., Ltd
+				No.7, Xinxi Road, Hi-Tech Park (North Zone)
+				Shenzhen  Guangdong  518057
+				CN
+
+30-0E-E3   (hex)		Aquantia Corporation
+300EE3     (base 16)		Aquantia Corporation
+				700 Tasman Drive
+				Milpitas  CA  95035
+				US
+
+18-F1-45   (hex)		NetComm Wireless Limited
+18F145     (base 16)		NetComm Wireless Limited
+				Level 2, 18-20 Orion Road
+				Lane Cove  Sydney  2066
+				AU
+
+AC-AB-BF   (hex)		AthenTek Inc.
+ACABBF     (base 16)		AthenTek Inc.
+				8F., No.356, Sec. 1, Neihu Rd., Neihu Dist.,
+				Taipei City  Taiwan  114
+				TW
+
+28-84-FA   (hex)		SHARP Corporation
+2884FA     (base 16)		SHARP Corporation
+				1 Takumi-cho, Sakai-ku
+				Sakai City  Osaka  590-8522
+				JP
+
+60-AF-6D   (hex)		Samsung Electronics Co.,Ltd
+60AF6D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B8-5A-73   (hex)		Samsung Electronics Co.,Ltd
+B85A73     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-1E-04   (hex)		D-Link International
+3C1E04     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+60-D9-A0   (hex)		Lenovo Mobile Communication Technology Ltd.
+60D9A0     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999, Qishan North 2nd Road, Information & Optoelectronics Park,
+				Xiamen  Fujian  361006
+				
+
+68-B9-83   (hex)		b-plus GmbH
+68B983     (base 16)		b-plus GmbH
+				Ulrichsberger Str. 17
+				Deggendorf  Bavaria  94469
+				DE
+
+78-B3-B9   (hex)		ShangHai sunup lighting CO.,LTD
+78B3B9     (base 16)		ShangHai sunup lighting CO.,LTD
+				RM2508,Building 2,1077# Zu Chong Zhi Rd,Zhang Jiang Hi-Tech Park,Pudong New Area,ShangHai,China
+				shanghai  shanghai  201203
+				CN
+
+04-C0-9C   (hex)		Tellabs Inc.
+04C09C     (base 16)		Tellabs Inc.
+				1415 W. Diehl Road
+				Naperville  Illinois  60563
+				US
+
+98-1D-FA   (hex)		Samsung Electronics Co.,Ltd
+981DFA     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+18-68-82   (hex)		Beward R&D Co., Ltd.
+186882     (base 16)		Beward R&D Co., Ltd.
+				Molokova street 16, apt.355
+				Krasnoyarsk  Krasnoyarsk region  660118
+				RU
+
+EC-80-09   (hex)		NovaSparks
+EC8009     (base 16)		NovaSparks
+				12 rue de Chatillon
+				Paris  Ile de France  75014
+				FR
+
+50-AD-D5   (hex)		Dynalec Corporation
+50ADD5     (base 16)		Dynalec Corporation
+				87 West Main Street
+				Sodus  NY  14551
+				US
+
+B0-45-19   (hex)		TCT mobile ltd
+B04519     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+D8-8D-5C   (hex)		Elentec
+D88D5C     (base 16)		Elentec
+				Dongtangiheung-ro 64-3
+				Gyeonggi-do  Hwaseong-si/Dongtan-myeon  445-812
+				KR
+
+74-29-AF   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+7429AF     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+3C-1A-0F   (hex)		ClearSky Data
+3C1A0F     (base 16)		ClearSky Data
+				99 Summer Street
+				Boston  MA  02110
+				US
+
+E8-CC-18   (hex)		D-Link International
+E8CC18     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+B0-91-37   (hex)		ISis ImageStream Internet Solutions, Inc
+B09137     (base 16)		ISis ImageStream Internet Solutions, Inc
+				4374 FM 1518
+				Selma  TX  78154
+				US
+
+8C-05-51   (hex)		Koubachi AG
+8C0551     (base 16)		Koubachi AG
+				Technoparkstrasse 1
+				Zurich  Zurich  8005
+				CH
+
+D8-97-BA   (hex)		PEGATRON CORPORATION
+D897BA     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+A8-D8-8A   (hex)		Wyconn
+A8D88A     (base 16)		Wyconn
+				Rennweg 97-99
+				Vienna    1030
+				AT
+
+40-EA-CE   (hex)		FOUNDER BROADBAND NETWORK SERVICE CO.,LTD
+40EACE     (base 16)		FOUNDER BROADBAND NETWORK SERVICE CO.,LTD
+				5F,Tower B,Beifa Plaza,No.16 Building
+				Haisdian District  Beijing  100088
+				CN
+
+A4-9D-49   (hex)		Ketra, Inc.
+A49D49     (base 16)		Ketra, Inc.
+				3815 S. Capital of Texas Hwy
+				Austin  TX  78704
+				US
+
+C0-38-96   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+C03896     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+2C-50-89   (hex)		Shenzhen Kaixuan Visual Technology Co.,Limited
+2C5089     (base 16)		Shenzhen Kaixuan Visual Technology Co.,Limited
+				No.19th Xifu Road, Hongxing Community
+				Shenzhen  Guangdong  518000
+				CN
+
+94-8E-89   (hex)		INDUSTRIAS UNIDAS SA DE CV
+948E89     (base 16)		INDUSTRIAS UNIDAS SA DE CV
+				CARRETERA PANAMERICANA
+				PASTEJE JOCOTITLAN  ESTADO DE MEXICO  50700
+				MX
+
+00-AE-FA   (hex)		Murata Manufacturing Co., Ltd.
+00AEFA     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+84-18-26   (hex)		Osram GmbH
+841826     (base 16)		Osram GmbH
+				Marcel Breuer Str. 6
+				Munich  Bavaria  80807
+				DE
+
+F8-E9-03   (hex)		D-Link International
+F8E903     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+E8-96-06   (hex)		testo Instruments (Shenzhen) Co., Ltd.
+E89606     (base 16)		testo Instruments (Shenzhen) Co., Ltd.
+				China Merchants Guangming Science & Technology Park,
+				Guangming New District, Shenzhen  Guangdong  518107
+				CN
+
+1C-7E-51   (hex)		3bumen.com
+1C7E51     (base 16)		3bumen.com
+				11/F FRONT BLK HANG LOK BLDG
+				HONG KONG  KONG KONG  N/A
+				HK
+
+68-72-DC   (hex)		CETORY.TV Company Limited
+6872DC     (base 16)		CETORY.TV Company Limited
+				Building C-1601, Tiley Central Plaza
+				Shenzhen  Guangdong  518054
+				CN
+
+30-77-CB   (hex)		Maike Industry(Shenzhen)CO.,LTD
+3077CB     (base 16)		Maike Industry(Shenzhen)CO.,LTD
+				Maike Industrial Garden, Sanwei village,
+				Shenzhen  Guangdong  518100
+				CN
+
+24-97-ED   (hex)		Techvision Intelligent Technology Limited
+2497ED     (base 16)		Techvision Intelligent Technology Limited
+				Room 7006B, Tianxia IC Industry Building,
+				Shenzhen  Guangdong  518052
+				CN
+
+90-9F-33   (hex)		EFM Networks
+909F33     (base 16)		EFM Networks
+				6F, Benposra II 1197-1 Bojeong Giheung Gu
+				Yong In  Kyunggi do  446913
+				KR
+
+60-04-17   (hex)		POSBANK CO.,LTD
+600417     (base 16)		POSBANK CO.,LTD
+				Room 805-808, New T Castle B/D, 429-1
+				  Seoul  153-803
+				KR
+
+20-76-93   (hex)		Lenovo (Beijing) Limited.
+207693     (base 16)		Lenovo (Beijing) Limited.
+				No.6 Chuang Ye Road Shangdi Information Industry Base,
+				  Beijing  100085
+				CN
+
+08-46-56   (hex)		VEO-LABS
+084656     (base 16)		VEO-LABS
+				14 rue du Patis Tatelin
+				RENNES  Bretagne  35700
+				FR
+
+EC-3C-5A   (hex)		SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD
+EC3C5A     (base 16)		SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD
+				5A 6FLOOR, BLOCK C12, FUYUAN INDUSTRIAL AREA, ZHOU SHI ROAD,
+				SHENZHEN  GUANGDONG  518102
+				CN
+
+44-88-CB   (hex)		Camco Technologies NV
+4488CB     (base 16)		Camco Technologies NV
+				Technologielaan 13
+				Heverlee  VB  3001
+				BE
+
+6C-BF-B5   (hex)		Noon Technology Co., Ltd
+6CBFB5     (base 16)		Noon Technology Co., Ltd
+				Building C, Zhangkeng Industrial Park, Minzhi
+				Shenzhen  GuangDong  518131
+				CN
+
+50-29-4D   (hex)		NANJING IOT SENSOR TECHNOLOGY CO,LTD
+50294D     (base 16)		NANJING IOT SENSOR TECHNOLOGY CO,LTD
+				ROOM 422 NO.420 ZHONGHUA ROAD QINHUAI DISTRICT NANJING CITY
+				Nangjing  jiangsu  210000
+				CN
+
+0C-CF-D1   (hex)		SPRINGWAVE Co., Ltd
+0CCFD1     (base 16)		SPRINGWAVE Co., Ltd
+				#B-703,U-space 1-danji,670 Sampyeong-dong Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+74-BA-DB   (hex)		Longconn Electornics(shenzhen)Co.,Ltd
+74BADB     (base 16)		Longconn Electornics(shenzhen)Co.,Ltd
+				Building D12,n 30,Xingye One Road,Fenghuang First Industrial Zone,Fuyong Street,Bao an District,Shenzhen,Guangdong Province.
+				shenzhen  guangdong  518000
+				CN
+
+B8-F3-17   (hex)		iSun Smasher Communications Private Limited
+B8F317     (base 16)		iSun Smasher Communications Private Limited
+				No. 826, Ferns Paradise, 2nd Street,
+				Bangalore  Karnataka  560037
+				IN
+
+8C-F8-13   (hex)		ORANGE POLSKA
+8CF813     (base 16)		ORANGE POLSKA
+				AL.JEROZOLIMSKIE 160
+				WARSAW  MASOVIA  02-326
+				PL
+
+54-9F-35   (hex)		Dell Inc.
+549F35     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+24-42-BC   (hex)		Alinco,incorporated
+2442BC     (base 16)		Alinco,incorporated
+				Yodoyabashi Dai-Bldg 13F,
+				Osaka  Osaka pref.  541-0043
+				JP
+
+F8-24-41   (hex)		Yeelink
+F82441     (base 16)		Yeelink
+				F10-B4, Bldg. B, International Innovation Park
+				Qingdao  Shandong  266101
+				CN
+
+10-8A-1B   (hex)		RAONIX Inc.
+108A1B     (base 16)		RAONIX Inc.
+				Changeop-Center 710, Shin-Gu Univ. Gwangmyeong-ro 377, Jungwon-gu
+				Seongnam-si  Gyeonggi-do  462-743
+				KR
+
+10-2F-6B   (hex)		Microsoft Corporation
+102F6B     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+8C-B0-94   (hex)		Airtech I&C Co., Ltd
+8CB094     (base 16)		Airtech I&C Co., Ltd
+				33B-9L #613-9, Namchon-dong
+				Namdong-gu  Incheon  405-846
+				KR
+
+94-54-93   (hex)		Rigado, LLC
+945493     (base 16)		Rigado, LLC
+				2601 25th ST SE, STE 200
+				Salem  OR  97302
+				US
+
+68-F0-6D   (hex)		ALONG INDUSTRIAL CO., LIMITED
+68F06D     (base 16)		ALONG INDUSTRIAL CO., LIMITED
+				FLAT/RM,3 11/F, HUNG TO INDUSTRIAL BUILDING
+				  HONG KONG  
+				HK
+
+F4-28-53   (hex)		Zioncom Electronics (Shenzhen) Ltd.
+F42853     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
+				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+D4-EC-86   (hex)		LinkedHope Intelligent Technologies Co., Ltd
+D4EC86     (base 16)		LinkedHope Intelligent Technologies Co., Ltd
+				2nd Floor,Building 1, Science Park,
+				Beijing  Beijing  100070
+				CN
+
+1C-9C-26   (hex)		Zoovel Technologies
+1C9C26     (base 16)		Zoovel Technologies
+				Paseo de la Castellana 259C
+				  Madrid  28046
+				ES
+
+04-67-85   (hex)		scemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH
+046785     (base 16)		scemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH
+				Gewerbeparkstr. 20
+				Reichshof-Wehnrath  NRW  51580
+				
+
+D0-FA-1D   (hex)		Qihoo  360  Technology Co.,Ltd
+D0FA1D     (base 16)		Qihoo  360  Technology Co.,Ltd
+				Building 2，6 Haoyuan
+				Chaoyang District  Beijing  100015
+				CN
+
+AC-11-D3   (hex)		Suzhou HOTEK  Video Technology Co. Ltd
+AC11D3     (base 16)		Suzhou HOTEK  Video Technology Co. Ltd
+				No.78,Keling Road,Suzhou National new and hi-tech industrial Development zone
+				Suzhou  Jiangsu  215200
+				CN
+
+84-32-EA   (hex)		ANHUI WANZTEN P&T CO., LTD
+8432EA     (base 16)		ANHUI WANZTEN P&T CO., LTD
+				9F Building B1 HUAYI science Park
+				Hefei  Anhui Province  230088
+				CN
+
+E0-1D-38   (hex)		Beijing HuaqinWorld Technology Co.,Ltd
+E01D38     (base 16)		Beijing HuaqinWorld Technology Co.,Ltd
+				30F,Beijing Silver Tower
+				Chao Yang Dist  Beijing  100027
+				CN
+
+E4-7F-B2   (hex)		FUJITSU LIMITED
+E47FB2     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+FC-6D-C0   (hex)		BME CORPORATION
+FC6DC0     (base 16)		BME CORPORATION
+				147-2
+				Kawagoe-shi  Saitama  350-0845
+				JP
+
+24-D1-3F   (hex)		MEXUS CO.,LTD
+24D13F     (base 16)		MEXUS CO.,LTD
+				1512, Seoulsup IT Valley,
+				Seoul  Seoul  133-822
+				KR
+
+78-24-AF   (hex)		ASUSTek COMPUTER INC.
+7824AF     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+FC-9F-E1   (hex)		CONWIN.Tech. Ltd
+FC9FE1     (base 16)		CONWIN.Tech. Ltd
+				4D,Tianxia IC Bldg,115 Yiyuan road, Nanshan District,Shenzhen,Guangdong,P.P.China
+				Shenzhen  Guangdong  518000
+				CN
+
+B8-9B-E4   (hex)		ABB Power Systems Power Generation
+B89BE4     (base 16)		ABB Power Systems Power Generation
+				29801 Euclid Ave
+				Wickliffe  Ohio  44092
+				US
+
+A8-1B-5D   (hex)		Foxtel Management Pty Ltd
+A81B5D     (base 16)		Foxtel Management Pty Ltd
+				Building 3, Level 3
+				NORTH RYDE  NSW  2113
+				AU
+
+50-50-65   (hex)		TAKT Corporation
+505065     (base 16)		TAKT Corporation
+				2762-8
+				Chino-City  Nagano-Pref.  391-0001
+				JP
+
+40-C6-2A   (hex)		Shanghai Jing Ren Electronic Technology Co., Ltd.
+40C62A     (base 16)		Shanghai Jing Ren Electronic Technology Co., Ltd.
+				GUI Qing Road 7 No. 3 building G7 software base A District 208 room
+				Xuhui District  Shanghai City  200233
+				CN
+
+E8-15-0E   (hex)		Nokia Corporation
+E8150E     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+C4-42-02   (hex)		Samsung Electronics Co.,Ltd
+C44202     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-AE-6F   (hex)		Circle Reliance, Inc DBA Cranberry Networks
+B4AE6F     (base 16)		Circle Reliance, Inc DBA Cranberry Networks
+				921 Rose Avenue
+				Menlo Park  CA  94025
+				US
+
+90-DA-6A   (hex)		FOCUS H&S Co., Ltd.
+90DA6A     (base 16)		FOCUS H&S Co., Ltd.
+				#113, Doosan Venture Digm, 126-1
+				Anyang  Gyeonggi-Do  431-755
+				KR
+
+DC-53-7C   (hex)		Compal Broadband Networks, Inc.
+DC537C     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+44-A6-E5   (hex)		THINKING TECHNOLOGY CO.,LTD
+44A6E5     (base 16)		THINKING TECHNOLOGY CO.,LTD
+				The 6th Floor,Gate No. 3 of Huaqiang Logistics Building
+				Nanshan, Shenzhen  Guangdong  518055
+				CN
+
+A4-5D-A1   (hex)		ADB Broadband Italia
+A45DA1     (base 16)		ADB Broadband Italia
+				VIALE SARCA 336
+				MILANO  ITALY  20126
+				
+
+0C-AC-05   (hex)		Unitend Technologies Inc.
+0CAC05     (base 16)		Unitend Technologies Inc.
+				No.6 Nanda'an Hutong, Xizhimeng st
+				Zicheng District  Beijing  100035
+				CN
+
+4C-6E-6E   (hex)		Comnect Technology CO.,LTD
+4C6E6E     (base 16)		Comnect Technology CO.,LTD
+				7-402, Xinyuan Industrial Park, No.61
+				Shenzhen  Guangdong  518055
+				CN
+
+8C-33-57   (hex)		HiteVision Digital Media Technology Co.,Ltd.
+8C3357     (base 16)		HiteVision Digital Media Technology Co.,Ltd.
+				1st building,Honghui Industrial Park,LiuXian
+				Shenzhen  Guangdong  510008
+				CN
+
+3C-AA-3F   (hex)		iKey, Ltd.
+3CAA3F     (base 16)		iKey, Ltd.
+				2621 Ridgepoint Drive
+				Austin  Texas  78754
+				US
+
+0C-38-3E   (hex)		Fanvil Technology Co., Ltd.
+0C383E     (base 16)		Fanvil Technology Co., Ltd.
+				3F, Block A, Gaoxinqi Building, Anhua Industrial Park
+				Shenzhen  Guangdong  518101
+				CN
+
+60-CD-A9   (hex)		Abloomy
+60CDA9     (base 16)		Abloomy
+				Room 501 ,CTS Building,No 1 Beishatan Chaoyang District
+				BeiJing    100083
+				CN
+
+B8-AD-3E   (hex)		BLUECOM
+B8AD3E     (base 16)		BLUECOM
+				116, Venture-ro, Yeonsu-gu,
+				Incheon    406-840
+				KR
+
+18-30-09   (hex)		Woojin Industrial Systems Co., Ltd.
+183009     (base 16)		Woojin Industrial Systems Co., Ltd.
+				95, Sari-ro, Sari-myeon
+				Goesan-gun  Chungcheongbuk-do  367-822
+				KR
+
+74-DB-D1   (hex)		Ebay Inc
+74DBD1     (base 16)		Ebay Inc
+				2211 N. First St
+				San Jose  Ca  95131
+				US
+
+30-B5-F1   (hex)		Aitexin Technology Co., Ltd
+30B5F1     (base 16)		Aitexin Technology Co., Ltd
+				1210 PDAY research center streer 2
+				Peiking    100190
+				CN
+
+B0-10-41   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+B01041     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+80-AD-67   (hex)		Kasda Networks Inc
+80AD67     (base 16)		Kasda Networks Inc
+				B-31 Building, Tanglang Industry Zone, Xili, Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+18-D5-B6   (hex)		SMG Holdings LLC
+18D5B6     (base 16)		SMG Holdings LLC
+				205 N Michigan Ave
+				Chicago  IL  60601
+				US
+
+5C-2E-59   (hex)		Samsung Electronics Co.,Ltd
+5C2E59     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-E5-39   (hex)		Moimstone Co.,Ltd
+A8E539     (base 16)		Moimstone Co.,Ltd
+				4F, 954-9 Gwanyang-dong
+				Anyang-Si  Gyeonggi-do  431-060
+				KR
+
+54-B7-53   (hex)		Hunan Fenghui Yinjia Science And Technology Co.,Ltd
+54B753     (base 16)		Hunan Fenghui Yinjia Science And Technology Co.,Ltd
+				No.15 Lutian Road
+				Changsha  Hunan  410205
+				CN
+
+10-30-47   (hex)		Samsung Electronics Co.,Ltd
+103047     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F8-84-F2   (hex)		Samsung Electronics Co.,Ltd
+F884F2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-75-4D   (hex)		Nokia
+B0754D     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+E0-CB-EE   (hex)		Samsung Electronics Co.,Ltd
+E0CBEE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+4C-39-09   (hex)		HPL Electric & Power Private Limited
+4C3909     (base 16)		HPL Electric & Power Private Limited
+				133, Pace City-1, Sec-37
+				Gurgaon  Haryana  122001
+				IN
+
+90-7E-BA   (hex)		UTEK TECHNOLOGY (SHENZHEN) CO.,LTD
+907EBA     (base 16)		UTEK TECHNOLOGY (SHENZHEN) CO.,LTD
+				6F, C Building JiaAn Industrial Zone, 72# district of Baoan, ShenZhen, China
+				SHENZHEN  Guangdong Province  518101
+				CN
+
+A0-02-DC   (hex)		Amazon Technologies Inc.
+A002DC     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+54-2A-A2   (hex)		Alpha Networks Inc.
+542AA2     (base 16)		Alpha Networks Inc.
+				No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C
+				Hsinchu  Taiwan  300
+				TW
+
+84-94-8C   (hex)		Hitron Technologies. Inc
+84948C     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+A8-F7-E0   (hex)		PLANET Technology Corporation
+A8F7E0     (base 16)		PLANET Technology Corporation
+				11F, No. 96, Min Quan Road,
+				New Taipei City    22341
+				TW
+
+44-86-C1   (hex)		Siemens Low Voltage & Products
+4486C1     (base 16)		Siemens Low Voltage & Products
+				5400 Triangle Parkway
+				Norcross  GA  30092
+				US
+
+40-45-DA   (hex)		Spreadtrum Communications (Shanghai) Co., Ltd.
+4045DA     (base 16)		Spreadtrum Communications (Shanghai) Co., Ltd.
+				Building 1, Spreadtrum Center, No.2288, Zuchongzhi Rd
+				  Shanghai  201203
+				
+
+34-51-AA   (hex)		JID GLOBAL
+3451AA     (base 16)		JID GLOBAL
+				211, Biz Plus Suwon 2F Chungho Bldg, 17 363Road, Susung-ro
+				SUWON  Gyeonggi-do  440-846
+				KR
+
+98-BE-94   (hex)		IBM
+98BE94     (base 16)		IBM
+				3039 E Cornwallis Rd
+				Research Triangle Park  NC  27709
+				US
+
+6C-19-8F   (hex)		D-Link International
+6C198F     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+C8-FF-77   (hex)		Dyson Limited
+C8FF77     (base 16)		Dyson Limited
+				Tetbury Hill
+				Malmesbury  Wiltshire  SN16 0RP
+				GB
+
+B4-9E-AC   (hex)		Imagik Int'l Corp
+B49EAC     (base 16)		Imagik Int'l Corp
+				2299 SW 37 th Ave
+				Miami  Florida  33145
+				US
+
+CC-07-E4   (hex)		Lenovo Mobile Communication Technology Ltd.
+CC07E4     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999, Qishan North 2nd Road, Information &amp; Optoelectronics Park, Torch Hi-tech Industry Development Zone, Xiamen, P.R.China
+				Xiamen  Fujian  361006
+				US
+
+C4-6B-B4   (hex)		myIDkey
+C46BB4     (base 16)		myIDkey
+				65 Enterprise
+				Aliso Viejo  CA  92656
+				US
+
+0C-63-FC   (hex)		Nanjing Signway Technology Co., Ltd
+0C63FC     (base 16)		Nanjing Signway Technology Co., Ltd
+				Rm 1001,10/F,28 Ningshuang Rd,
+				Nanjing  Jiangsu  210012
+				CN
+
+D4-E0-8E   (hex)		ValueHD Corporation
+D4E08E     (base 16)		ValueHD Corporation
+				Xinwei Xili, Nanshan District, Shenzhen City Industrial Zone, Shiling 8, 3rd Floor, North
+				Shenzhen  Guangdong  518055
+				CN
+
+C8-9F-1D   (hex)		SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD
+C89F1D     (base 16)		SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD
+				NO.6 QINGNING ROAD,CAIHUANG INDUSTRY PARK,
+				SHENZHEN  GUANGDONG  518109
+				CN
+
+14-3D-F2   (hex)		Beijing Shidai Hongyuan Network Communication Co.,Ltd
+143DF2     (base 16)		Beijing Shidai Hongyuan Network Communication Co.,Ltd
+				#505, 5F, Tower 3
+				  Beijing  100000
+				CN
+
+2C-39-C1   (hex)		Ciena Corporation
+2C39C1     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+54-EE-75   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
+54EE75     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
+				168# First Avenue,Kunshan Integrated Free Trade Zone,Kunshan,Jiangsu,China
+				Kunshan  Jiangsu  215300
+				CN
+
+08-74-F6   (hex)		Winterhalter Gastronom GmbH
+0874F6     (base 16)		Winterhalter Gastronom GmbH
+				Tettnanger Straße 72
+				Meckenbeuren  Baden-Württemberg  88074
+				DE
+
+D8-49-2F   (hex)		CANON INC.
+D8492F     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+80-0E-24   (hex)		ForgetBox
+800E24     (base 16)		ForgetBox
+				61 rue de Sèvres
+				Ville d'Avray  IDF  92140
+				FR
+
+3C-25-D7   (hex)		Nokia Corporation
+3C25D7     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+18-FF-2E   (hex)		Shenzhen Rui Ying Da Technology Co., Ltd
+18FF2E     (base 16)		Shenzhen Rui Ying Da Technology Co., Ltd
+				KaiXinda Electronic Science and Technology Park, Zhoushi Road 49,Shiyan Street,Baoan  District,ShenZhen,China
+				shenzhen  guangdong  518108
+				CN
+
+84-72-07   (hex)		I&C Technology
+847207     (base 16)		I&C Technology
+				24,Pangyo-ro 255beon-gil, Bundang-gu, Seongnam-si, Gyeonggi-do, 463-400,Korea
+				Seongnam-si  Gyeonggi-do  463-400,Korea
+				US
+
+CC-A6-14   (hex)		AIFA TECHNOLOGY CORP.
+CCA614     (base 16)		AIFA TECHNOLOGY CORP.
+				1F., No.230, Sec. 2, Bade Rd., Fongshan Dist.
+				Kaohsiung City  Taiwan  83053
+				TW
+
+90-F1-B0   (hex)		Hangzhou Anheng Info&Tech CO.,LTD
+90F1B0     (base 16)		Hangzhou Anheng Info&Tech CO.,LTD
+				15F Zhongcai Bldg,#68 Tonghe Rd
+				Hangzhou  Zhejiang  310051
+				CN
+
+4C-8B-30   (hex)		Actiontec Electronics, Inc
+4C8B30     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+08-05-CD   (hex)		DongGuang EnMai Electronic Product Co.Ltd.
+0805CD     (base 16)		DongGuang EnMai Electronic Product Co.Ltd.
+				701 7th Floor,YiFeng Building,
+				DongGuang  GuangDong Province  523843
+				CN
+
+54-D1-63   (hex)		MAX-TECH,INC
+54D163     (base 16)		MAX-TECH,INC
+				2F, 26, 2gil, Dujeonggongdan
+				Cheonan  Chungnam  331957
+				KR
+
+48-B5-A7   (hex)		Glory Horse Industries Ltd.
+48B5A7     (base 16)		Glory Horse Industries Ltd.
+				Woekshop 8, 4/F., World Wide Industrial Centre,
+				Shatin, N.T.    HKG
+				HK
+
+0C-4F-5A   (hex)		ASA-RT s.r.l.
+0C4F5A     (base 16)		ASA-RT s.r.l.
+				Strada del Lionetto 16/a
+				Torino  To  10146
+				IT
+
+D4-22-4E   (hex)		Alcatel Lucent
+D4224E     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+9C-86-DA   (hex)		Phoenix Geophysics Ltd.
+9C86DA     (base 16)		Phoenix Geophysics Ltd.
+				3781 Victoria Park Ave.
+				Toronto  ON  M1W 3K5
+				CA
+
+2C-07-3C   (hex)		DEVLINE LIMITED
+2C073C     (base 16)		DEVLINE LIMITED
+				FLAT/RM A9,9/F SILVERCORP INT TOWER
+				  HONGKONG  999077
+				CN
+
+7C-1A-03   (hex)		8Locations Co., Ltd.
+7C1A03     (base 16)		8Locations Co., Ltd.
+				1F, No. 123, Chenggong 2rd Street
+				Zhube City  Hsinchu  302
+				TW
+
+AC-B8-59   (hex)		Uniband Electronic Corp,
+ACB859     (base 16)		Uniband Electronic Corp,
+				6F-1 No. Dongguang Rd.,
+				Hsinchu  300  300
+				TW
+
+2C-9A-A4   (hex)		Eolo SpA
+2C9AA4     (base 16)		Eolo SpA
+				via Gran San Bernardo 12
+				Busto Arsizio  VA  21052
+				IT
+
+88-B1-E1   (hex)		 Mojo Networks, Inc.
+88B1E1     (base 16)		 Mojo Networks, Inc.
+				339 N.Bernardo Ave
+				Mountain View  CA  94043
+				US
+
+90-DB-46   (hex)		E-LEAD ELECTRONIC CO., LTD
+90DB46     (base 16)		E-LEAD ELECTRONIC CO., LTD
+				NO.37, GUNGDUNG 1ST RD.
+				SHENGANG SHIANG  CHANGHUA  50971
+				TW
+
+34-4F-5C   (hex)		R&amp;M AG
+344F5C     (base 16)		R&amp;M AG
+				Binzstrasse 32
+				Wetzikon  Zurich  8620
+				CH
+
+60-47-D4   (hex)		FORICS Electronic Technology Co., Ltd.
+6047D4     (base 16)		FORICS Electronic Technology Co., Ltd.
+				BLD 2A, No 1588, Lianhang Rd
+				  Shanghai  201112
+				CN
+
+FC-F8-B7   (hex)		TRONTEQ Electronic
+FCF8B7     (base 16)		TRONTEQ Electronic
+				Siemensstrasse 22
+				Reutlingen  Baden Wuerttemberg  72766
+				DE
+
+30-F4-2F   (hex)		ESP
+30F42F     (base 16)		ESP
+				126-1 Pyeongchon-dong, Dongan-gu
+				Anyang-si  Gyeonggi-do  431-755
+				KR
+
+70-4E-01   (hex)		KWANGWON TECH CO., LTD.
+704E01     (base 16)		KWANGWON TECH CO., LTD.
+				D-401, Digital-Empire Bldg., 980-3
+				Suwon  Gyeonggi-Do  443-702
+				KR
+
+74-6A-8F   (hex)		VS Vision Systems GmbH
+746A8F     (base 16)		VS Vision Systems GmbH
+				Aspelohe 27A
+				Norderstedt  Schleswig-Holstein  22848
+				DE
+
+54-A3-1B   (hex)		Shenzhen Linkworld Technology Co,.LTD
+54A31B     (base 16)		Shenzhen Linkworld Technology Co,.LTD
+				Room 667-675 , sixth floor ,
+				Shenzhen  Guangdong  518055
+				CN
+
+CC-39-8C   (hex)		Shiningtek
+CC398C     (base 16)		Shiningtek
+				No. 53, Nankeng 3 St
+				  Hsinchu  30841
+				TW
+
+18-20-A6   (hex)		Sage Co., Ltd.
+1820A6     (base 16)		Sage Co., Ltd.
+				2-24 Sumiyoshicho, Naka-ku
+				Yokohama-shi  Kanagawa  231-0013
+				JP
+
+20-EA-C7   (hex)		SHENZHEN RIOPINE ELECTRONICS CO., LTD
+20EAC7     (base 16)		SHENZHEN RIOPINE ELECTRONICS CO., LTD
+				ROOM1002~1004, BaoYuan HuaFeng Headquarters' Business Building, Xixiang Avenue (west) , Bao'an District
+				Shenzhen  Guangdong  518000
+				CN
+
+64-B3-70   (hex)		PowerComm Solutions LLC
+64B370     (base 16)		PowerComm Solutions LLC
+				15 Minneakoning Rd. Suite 311
+				Flemington  NJ  08822
+				US
+
+5C-F5-0D   (hex)		Institute of microelectronic applications
+5CF50D     (base 16)		Institute of microelectronic applications
+				Na Valentince 1003/1
+				Praha    15000
+				CZ
+
+74-9C-52   (hex)		Huizhou Desay SV Automotive Co., Ltd.
+749C52     (base 16)		Huizhou Desay SV Automotive Co., Ltd.
+				103, Hechang 5th Road West,
+				Huizhou  Guangdong  516006
+				CN
+
+C4-29-1D   (hex)		KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.
+C4291D     (base 16)		KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.
+				kemalpaşa yolu 3.km KEMALPASA 35170
+				izmir  TÜRKİYE --  35170
+				TR
+
+6C-5F-1C   (hex)		Lenovo Mobile Communication Technology Ltd.
+6C5F1C     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				 No.999, Qishan North 2nd Road,
+				Xiamen  361000  Fujian
+				US
+
+7C-E4-AA   (hex)		Private
+7CE4AA     (base 16)		Private
+
+08-3F-3E   (hex)		WSH GmbH
+083F3E     (base 16)		WSH GmbH
+				Koelner Str. 58a
+				Gummersbach  NRW  51645
+				DE
+
+2C-95-7F   (hex)		zte corporation
+2C957F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+3C-0C-48   (hex)		Servergy, Inc.
+3C0C48     (base 16)		Servergy, Inc.
+				1700 N. Redbud
+				McKinney  TEXAS  75069
+				US
+
+10-DE-E4   (hex)		automationNEXT GmbH
+10DEE4     (base 16)		automationNEXT GmbH
+				Millennium Park 4
+				Lustenau  Vorarlberg  6890
+				AT
+
+40-4A-18   (hex)		Addrek Smart Solutions
+404A18     (base 16)		Addrek Smart Solutions
+				Al Gharrafa Thani Bin Jassim St
+				Doha    
+				QA
+
+C0-C5-69   (hex)		SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD
+C0C569     (base 16)		SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD
+				Building 3,No.25 Cangwu Rd
+				  Shanghai  200233
+				CN
+
+C4-C0-AE   (hex)		MIDORI ELECTRONIC CO., LTD.
+C4C0AE     (base 16)		MIDORI ELECTRONIC CO., LTD.
+				397
+				Chikuma  Nagano  389-0804
+				JP
+
+AC-C5-95   (hex)		Graphite Systems
+ACC595     (base 16)		Graphite Systems
+				2037 Landings Drive
+				Mountain View  California  94043
+				US
+
+7C-E1-FF   (hex)		Computer Performance, Inc. DBA Digital Loggers, Inc.
+7CE1FF     (base 16)		Computer Performance, Inc. DBA Digital Loggers, Inc.
+				2695 Walsh Avenue
+				Santa Clara  CA  95051
+				US
+
+D8-15-0D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D8150D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+58-50-AB   (hex)		TLS Corporation
+5850AB     (base 16)		TLS Corporation
+				1241 Superior Ave.
+				Cleveland  OH  44114
+				US
+
+7C-CD-11   (hex)		MS-Magnet
+7CCD11     (base 16)		MS-Magnet
+				Parchevich 42
+				  Sofia  1000
+				BG
+
+98-FF-6A   (hex)		OTEC(Shanghai)Technology Co.,Ltd.
+98FF6A     (base 16)		OTEC(Shanghai)Technology Co.,Ltd.
+				13th Floor,Building 2
+				  Shanghai  200235
+				CN
+
+BC-1A-67   (hex)		YF Technology Co., Ltd
+BC1A67     (base 16)		YF Technology Co., Ltd
+				No.62,South Fumin Road,
+				Dongguang  Guangdong  523773
+				CN
+
+4C-D7-B6   (hex)		Helmer Scientific
+4CD7B6     (base 16)		Helmer Scientific
+				14400 Bergen Boulevard
+				Noblesville  Indiana  46060
+				US
+
+84-25-A4   (hex)		Tariox Limited
+8425A4     (base 16)		Tariox Limited
+				173 Highway 53
+				Cathcart  Ontario  N0E 1B0
+				CA
+
+48-3D-32   (hex)		Syscor Controls &amp; Automation
+483D32     (base 16)		Syscor Controls &amp; Automation
+				201-60 Bastion Sq
+				Victoria  BC  V8W 1J2
+				CA
+
+CC-85-6C   (hex)		SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
+CC856C     (base 16)		SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
+				Xin fengze industrial park,shangnan east road
+				SHENZHEN  GUANGDONG  518101
+				CN
+
+AC-6B-AC   (hex)		Jenny Science AG
+AC6BAC     (base 16)		Jenny Science AG
+				Sandblatte 7a
+				Rain  Luzern  6026
+				CH
+
+D8-EE-78   (hex)		Moog Protokraft
+D8EE78     (base 16)		Moog Protokraft
+				4545 W Stone Dr Bldg 135
+				Kingsport  TN  37660
+				US
+
+24-11-48   (hex)		Entropix, LLC
+241148     (base 16)		Entropix, LLC
+				100 Rawson Road
+				Victor  New York  14564
+				US
+
+C4-45-EC   (hex)		Shanghai Yali Electron Co.,LTD
+C445EC     (base 16)		Shanghai Yali Electron Co.,LTD
+				Room 1-607
+				Shanghai  Shanghai  201100
+				US
+
+E0-E6-31   (hex)		SNB TECHNOLOGIES LIMITED
+E0E631     (base 16)		SNB TECHNOLOGIES LIMITED
+				Rm 303, Building #13,
+				Long Gang district, ShenZhen  GuangDong  518000
+				CN
+
+78-B5-D2   (hex)		Ever Treasure Industrial Limited
+78B5D2     (base 16)		Ever Treasure Industrial Limited
+				15A Tung Lee Commercial Building
+				Sheung Wan    852
+				HK
+
+50-ED-78   (hex)		Changzhou Yongse Infotech Co.,Ltd
+50ED78     (base 16)		Changzhou Yongse Infotech Co.,Ltd
+				No.128 Zhengzhong Rd, Xixiashua Town
+				Changzhou  Jiangsu  213135
+				CN
+
+90-02-8A   (hex)		Shenzhen Shidean Legrand Electronic Products Co.,Ltd
+90028A     (base 16)		Shenzhen Shidean Legrand Electronic Products Co.,Ltd
+				Block39,Shahe Industrial Zone Baishizhou
+				  Guangdong  518053
+				CN
+
+1C-C1-1A   (hex)		Wavetronix
+1CC11A     (base 16)		Wavetronix
+				78 East 1700 South
+				Provo  UT  84606
+				US
+
+FC-09-D8   (hex)		ACTEON Group
+FC09D8     (base 16)		ACTEON Group
+				ZAC Athelia IV
+				La Ciotat  France  13705
+				FR
+
+74-3E-CB   (hex)		Gentrice tech
+743ECB     (base 16)		Gentrice tech
+				15F No.738-5 JhengJhong Rd
+				New Taipei city    235
+				TW
+
+7C-44-4C   (hex)		Entertainment Solutions, S.L.
+7C444C     (base 16)		Entertainment Solutions, S.L.
+				Parque Empresarial Miraflores, nave 3
+				  Zaragoza  50720
+				ES
+
+04-44-A1   (hex)		TELECON GALICIA,S.A.
+0444A1     (base 16)		TELECON GALICIA,S.A.
+				AVENIDA DE NOSTIAN
+				A CORUNA 15008     
+				ES
+
+20-C6-0D   (hex)		Shanghai annijie Information technology Co.,LTD
+20C60D     (base 16)		Shanghai annijie Information technology Co.,LTD
+				Room605,NO.9,Lane 777
+				Shanghai    200070
+				CN
+
+38-CA-97   (hex)		Contour Design LLC
+38CA97     (base 16)		Contour Design LLC
+				10 Industrial Drive
+				Windham  NH  03087
+				US
+
+BC-2D-98   (hex)		ThinGlobal LLC
+BC2D98     (base 16)		ThinGlobal LLC
+				703 wildflower RD
+				Davenport  FL  33837
+				US
+
+18-79-A2   (hex)		GMJ ELECTRIC LIMITED
+1879A2     (base 16)		GMJ ELECTRIC LIMITED
+				RM 1405, 14/F, C C WU BUILDING
+				    999077
+				HK
+
+E0-C8-6A   (hex)		SHENZHEN TW-SCIE Co., Ltd
+E0C86A     (base 16)		SHENZHEN TW-SCIE Co., Ltd
+				816# DongMing Building MinKang Road
+				Shenzhen  Guangdong  518000
+				CN
+
+BC-EE-7B   (hex)		ASUSTek COMPUTER INC.
+BCEE7B     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+34-13-A8   (hex)		Mediplan Limited
+3413A8     (base 16)		Mediplan Limited
+				245 Sheffield Road
+				Sheffield  South Yorkshire  S13 9ZD
+				GB
+
+7C-97-63   (hex)		Openmatics s.r.o.
+7C9763     (base 16)		Openmatics s.r.o.
+				Poděbradova 2842/1
+				Pilsen  Tschechien  30100
+				CZ
+
+48-A2-B7   (hex)		Kodofon JSC
+48A2B7     (base 16)		Kodofon JSC
+				97 Moskovskyi pr.
+				Voronezh    394077
+				RU
+
+CC-74-98   (hex)		Filmetrics Inc.
+CC7498     (base 16)		Filmetrics Inc.
+				3560 Dunhill Street, #100
+				San Diego  CA  92121
+				US
+
+08-5A-E0   (hex)		Recovision Technology Co., Ltd.
+085AE0     (base 16)		Recovision Technology Co., Ltd.
+				1709，No.5 Wanghai Road,
+				Xiamen  Fujian  361006
+				CN
+
+20-E7-91   (hex)		Siemens Healthcare Diagnostics, Inc
+20E791     (base 16)		Siemens Healthcare Diagnostics, Inc
+				2 Edgewater Drive
+				Norwood  MA  02062
+				US
+
+08-97-58   (hex)		Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary
+089758     (base 16)		Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary
+				QingPing Road 2,Qinghutou village
+				DongGuan  GuangDong  523711
+				CN
+
+FC-19-D0   (hex)		Cloud Vision Networks Technology Co.,Ltd.
+FC19D0     (base 16)		Cloud Vision Networks Technology Co.,Ltd.
+				F/9,Hechuan Building 2016
+				Shanghai    201103
+				CN
+
+94-86-D4   (hex)		Surveillance Pro Corporation
+9486D4     (base 16)		Surveillance Pro Corporation
+				12F., No.4, Ln. 609, Sec. 5, Chongxin Rd., Sanchong Dist.
+				New Taipei City    241
+				US
+
+9C-D6-43   (hex)		D-Link International
+9CD643     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+3C-18-A0   (hex)		Luxshare Precision Industry Company Limited
+3C18A0     (base 16)		Luxshare Precision Industry Company Limited
+				Floor 2, Block A, Sanyo New Industrial Area
+				West Haoyi Community, Shajing Subdistrict Office  Bao'an District, Shenzhen, Guangdong  523000
+				CN
+
+8C-AE-89   (hex)		Y-cam Solutions Ltd
+8CAE89     (base 16)		Y-cam Solutions Ltd
+				3 dee road
+				Richmond  Surrey  TW9 2JN
+				GB
+
+94-E9-8C   (hex)		Nokia
+94E98C     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+FC-E1-D9   (hex)		Stable Imaging Solutions LLC
+FCE1D9     (base 16)		Stable Imaging Solutions LLC
+				3709 Old Conejo Rd
+				Newbury Park  CA  91320
+				US
+
+50-20-6B   (hex)		Emerson Climate Technologies Transportation Solutions
+50206B     (base 16)		Emerson Climate Technologies Transportation Solutions
+				Axel Kiers Vej  5A
+				Hoejbjerg    8270
+				DK
+
+7C-BF-88   (hex)		Mobilicom LTD
+7CBF88     (base 16)		Mobilicom LTD
+				Hametzoda 31
+				Azor    5800174
+				IL
+
+60-DB-2A   (hex)		HNS
+60DB2A     (base 16)		HNS
+				345-50, Gasan-dong, Geumcheon-gu, Seoul, Korea[153-707]
+				Seoul  The Seoul Metropolis  82
+				KR
+
+B0-45-45   (hex)		YACOUB Automation GmbH
+B04545     (base 16)		YACOUB Automation GmbH
+				Gustav Meyer Allee 25
+				Berlin    13355
+				DE
+
+C8-EE-75   (hex)		Pishion International Co. Ltd
+C8EE75     (base 16)		Pishion International Co. Ltd
+				3F,NO,15-2,Beihuan Rd
+				Taichung City    42760
+				TW
+
+CC-34-29   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+CC3429     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+64-BA-BD   (hex)		SDJ Technologies, Inc.
+64BABD     (base 16)		SDJ Technologies, Inc.
+				2125-B Madera Road
+				Simi Valley  CA  93065
+				US
+
+24-C8-48   (hex)		mywerk Portal GmbH
+24C848     (base 16)		mywerk Portal GmbH
+				Fabrikstr. 3
+				Gronau     48599 
+				DE
+
+CC-FB-65   (hex)		Nintendo Co., Ltd.
+CCFB65     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+A0-A2-3C   (hex)		GPMS
+A0A23C     (base 16)		GPMS
+				40 Ridge Rd
+				Cornwall  VT  05753
+				US
+
+68-FC-B3   (hex)		Next Level Security Systems, Inc.
+68FCB3     (base 16)		Next Level Security Systems, Inc.
+				6353 Corte Del Abeto
+				Carlsbad  CA  92011
+				US
+
+94-C3-E4   (hex)		Atlas Copco IAS GmbH
+94C3E4     (base 16)		Atlas Copco IAS GmbH
+				Gewerbestr. 52
+				Bretten-Goelshausen    75015
+				DE
+
+34-88-5D   (hex)		Logitech Far East
+34885D     (base 16)		Logitech Far East
+				#2 Creation Rd. 4,
+				Hsinchu    300
+				TW
+
+88-57-6D   (hex)		XTA Electronics Ltd
+88576D     (base 16)		XTA Electronics Ltd
+				The Design House
+				Stourport-on-Severn  Worcestershire  DY13 9BZ
+				GB
+
+BC-41-00   (hex)		CODACO ELECTRONIC s.r.o.
+BC4100     (base 16)		CODACO ELECTRONIC s.r.o.
+				Hemy 825
+				Valasske Mezirici    75701
+				CZ
+
+FC-D8-17   (hex)		Beijing Hesun Technologies Co.Ltd.
+FCD817     (base 16)		Beijing Hesun Technologies Co.Ltd.
+				Room 1811, 18th floor, Building No. 4, Courtyard 1, Shangdi tenth Street
+				  Beijing  100085
+				CN
+
+68-2D-DC   (hex)		Wuhan Changjiang Electro-Communication Equipment CO.,LTD
+682DDC     (base 16)		Wuhan Changjiang Electro-Communication Equipment CO.,LTD
+				No.8,Yinghu Sience&Technology industrial park
+				Wuhan  Hubei  430040
+				CN
+
+E8-61-1F   (hex)		Dawning Information Industry Co.,Ltd
+E8611F     (base 16)		Dawning Information Industry Co.,Ltd
+				NO.15 Huake Street,Hi-Tech Zone
+				   Tianjin  300384
+				CN
+
+28-47-AA   (hex)		Nokia Corporation
+2847AA     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+5C-D6-1F   (hex)		Qardio, Inc
+5CD61F     (base 16)		Qardio, Inc
+				340 S Lemon Ave #1104F
+				Walnut  California  91789
+				US
+
+70-59-57   (hex)		Medallion Instrumentation Systems
+705957     (base 16)		Medallion Instrumentation Systems
+				17150 Hickory St
+				Spring Lake  MI  49456
+				US
+
+9C-44-3D   (hex)		CHENGDU XUGUANG TECHNOLOGY CO, LTD
+9C443D     (base 16)		CHENGDU XUGUANG TECHNOLOGY CO, LTD
+				2ND SECTION,PARK ROAD
+				CHENGDU  SICHUAN  610100
+				CN
+
+B4-24-E7   (hex)		Codetek Technology Co.,Ltd
+B424E7     (base 16)		Codetek Technology Co.,Ltd
+				4F.-1, No.55, Dongguang Rd., East Dist.,
+				Hsinchu City    300
+				TW
+
+54-2F-89   (hex)		Euclid Laboratories, Inc.
+542F89     (base 16)		Euclid Laboratories, Inc.
+				9151 Arvida Ln
+				Coral Gables  Florida  33156
+				US
+
+90-99-16   (hex)		ELVEES NeoTek OJSC
+909916     (base 16)		ELVEES NeoTek OJSC
+				Proezd 4922, dom 4, stroenie 2
+				Moscow  Zelenograd  124498
+				RU
+
+00-A2-FF   (hex)		abatec group AG
+00A2FF     (base 16)		abatec group AG
+				Oberregauerstraße 48
+				Regau    4844
+				AT
+
+60-24-C1   (hex)		Jiangsu Zhongxun Electronic Technology Co., Ltd
+6024C1     (base 16)		Jiangsu Zhongxun Electronic Technology Co., Ltd
+				tangshu road #8
+				yixing  jiangsu  214221
+				CN
+
+A0-14-3D   (hex)		PARROT SA
+A0143D     (base 16)		PARROT SA
+				174 Quai de Jemmapes
+				Paris    75010
+				FR
+
+FC-1B-FF   (hex)		V-ZUG AG
+FC1BFF     (base 16)		V-ZUG AG
+				Industriestrasse 66
+				  Zug  6301
+				CH
+
+F4-28-96   (hex)		SPECTO PAINEIS ELETRONICOS LTDA
+F42896     (base 16)		SPECTO PAINEIS ELETRONICOS LTDA
+				RUA WALTER JOSE CORREA, AREA 12
+				SAO JOSE  SANTA CATARINA  88122-035
+				BR
+
+78-CB-33   (hex)		DHC Software Co.,Ltd
+78CB33     (base 16)		DHC Software Co.,Ltd
+				16/F,DHC Mansion No.3 Zijin
+				Beijing    100190
+				CN
+
+60-A9-B0   (hex)		Merchandising Technologies, Inc
+60A9B0     (base 16)		Merchandising Technologies, Inc
+				1050 NW 229th Avenue
+				HIllsboro  OR  97124
+				US
+
+50-27-C7   (hex)		TECHNART Co.,Ltd
+5027C7     (base 16)		TECHNART Co.,Ltd
+				2-21 Nishiohjicho
+				Kusatsu  Shiga  525-0037
+				JP
+
+6C-5A-B5   (hex)		TCL Technoly Electronics (Huizhou) Co., Ltd.
+6C5AB5     (base 16)		TCL Technoly Electronics (Huizhou) Co., Ltd.
+				19th Zhongkai Hi-tech Development Zone
+				Huizhou  Guangdong  516006
+				CN
+
+38-5A-A8   (hex)		Beijing Zhongdun Security Technology Development Co.
+385AA8     (base 16)		Beijing Zhongdun Security Technology Development Co.
+				No.1 Capital Gymnasium South Road
+				  Beijing  100048
+				CN
+
+F4-A2-94   (hex)		EAGLE WORLD DEVELOPMENT CO., LIMITED
+F4A294     (base 16)		EAGLE WORLD DEVELOPMENT CO., LIMITED
+				1F, CMA Bldg., 64 Connaught Road Central
+				  Hong Kong  00852
+				HK
+
+EC-3E-09   (hex)		PERFORMANCE DESIGNED PRODUCTS, LLC
+EC3E09     (base 16)		PERFORMANCE DESIGNED PRODUCTS, LLC
+				14144 Ventura Blvd
+				Sherman Oaks  California  91423
+				US
+
+94-7C-3E   (hex)		Polewall Norge AS
+947C3E     (base 16)		Polewall Norge AS
+				Vige Havnevei 78
+				Kristiansand  Vest-Agder  4633
+				NO
+
+34-A3-BF   (hex)		Terewave. Inc.
+34A3BF     (base 16)		Terewave. Inc.
+				Room 217, Ssangyong Research Center
+				Yuseong-gu  Daejeon-city  305804
+				KR
+
+8C-08-8B   (hex)		Remote Solution
+8C088B     (base 16)		Remote Solution
+				92, Chogokri, Nammyun
+				Kimcheon city  Kyungbuk  740-871
+				KR
+
+B4-3E-3B   (hex)		Viableware, Inc
+B43E3B     (base 16)		Viableware, Inc
+				12220 113th Ave NE
+				Kirkland  WA  98034
+				US
+
+0C-5C-D8   (hex)		DOLI Elektronik GmbH
+0C5CD8     (base 16)		DOLI Elektronik GmbH
+				Adi-Maislinger-Str. 7
+				Munich    81373
+				DE
+
+3C-15-EA   (hex)		TESCOM CO., LTD.
+3C15EA     (base 16)		TESCOM CO., LTD.
+				#928 UTV, 1141-2 Baeksuk Ilsandong
+				Goyang  Gyeonggi  410-722
+				KR
+
+E8-04-10   (hex)		Private
+E80410     (base 16)		Private
+
+F4-BD-7C   (hex)		Chengdu jinshi communication Co., LTD
+F4BD7C     (base 16)		Chengdu jinshi communication Co., LTD
+				No. 108 #1-2-505, Eastern 5 Section, First Ring Road, JinJiang District,
+				Chengdu  Chongqing  610000
+				CN
+
+DC-C4-22   (hex)		Systembase Limited
+DCC422     (base 16)		Systembase Limited
+				Jupes Field House, Pettridge Lane
+				Warminster  Wiltshire  BA12 6DG
+				GB
+
+C8-F3-6B   (hex)		Yamato Scale Co.,Ltd.
+C8F36B     (base 16)		Yamato Scale Co.,Ltd.
+				5-22
+				Akashi  Hyogo  673-8688
+				JP
+
+98-F8-C1   (hex)		IDT Technology Limited
+98F8C1     (base 16)		IDT Technology Limited
+				Block C, 9/F.,Kaiser Estate, Phase 1,
+				Kowloon  Hong Kong  
+				HK
+
+6C-D1-B0   (hex)		WING SING ELECTRONICS HONG KONG LIMITED
+6CD1B0     (base 16)		WING SING ELECTRONICS HONG KONG LIMITED
+				No. 1, Guoyuan Industrial Zone
+				Guangzhou  Guang Dong  510385
+				CN
+
+A4-F5-22   (hex)		CHOFU SEISAKUSHO CO.,LTD
+A4F522     (base 16)		CHOFU SEISAKUSHO CO.,LTD
+				2-1
+				Shimonoseki-shi  Yamaguchi  752-8555
+				JP
+
+84-5C-93   (hex)		Chabrier Services
+845C93     (base 16)		Chabrier Services
+				354 Chemin de la Pinatte
+				Saint-Peray    07130
+				FR
+
+68-E1-66   (hex)		Private
+68E166     (base 16)		Private
+
+BC-2B-D7   (hex)		Revogi Innovation Co., Ltd.
+BC2BD7     (base 16)		Revogi Innovation Co., Ltd.
+				2018, Anhui Building, No. 6007,
+				Shenzhen,  Guangdong  518113
+				CN
+
+28-6D-97   (hex)		SAMJIN Co., Ltd.
+286D97     (base 16)		SAMJIN Co., Ltd.
+				199-6, Anyang 7-dong, Manan-gu
+				Anyang-si  Gyeonggi-do  430-817
+				KR
+
+24-EC-D6   (hex)		CSG Science & Technology Co.,Ltd.Hefei
+24ECD6     (base 16)		CSG Science & Technology Co.,Ltd.Hefei
+				No.612-1,Huangshan Road,Gaoxin District
+				Hefei  Anhui Province  230088
+				CN
+
+CC-2A-80   (hex)		Micro-Biz intelligence solutions Co.,Ltd
+CC2A80     (base 16)		Micro-Biz intelligence solutions Co.,Ltd
+				Room 611,Sunshine Building
+				Zhuhai City  Guangdong Province  519000
+				CN
+
+60-FE-F9   (hex)		Thomas & Betts
+60FEF9     (base 16)		Thomas & Betts
+				5900 Eastport Blvd
+				Richmond  VA  23231
+				US
+
+B8-DC-87   (hex)		IAI Corporation
+B8DC87     (base 16)		IAI Corporation
+				577-1 Obane
+				Shizuoka-City  Shizuoka  424-0103
+				JP
+
+7C-6F-F8   (hex)		ShenZhen ACTO Digital Video Technology Co.,Ltd.
+7C6FF8     (base 16)		ShenZhen ACTO Digital Video Technology Co.,Ltd.
+				3/F,Building 7,Software Park
+				ShenZhen  GuangDong  518055
+				CN
+
+DC-F7-55   (hex)		SITRONIK
+DCF755     (base 16)		SITRONIK
+				22 MARISCHAL GARDENS
+				ABERDEEN  ABERDEENSHIRE  AB21 9BY
+				GB
+
+5C-02-6A   (hex)		Applied Vision Corporation
+5C026A     (base 16)		Applied Vision Corporation
+				2020 Vision Lane
+				Cuyahoga Falls  OH  44223
+				US
+
+0C-93-01   (hex)		PT. Prasimax Inovasi Teknologi
+0C9301     (base 16)		PT. Prasimax Inovasi Teknologi
+				Jl. Margonda Raya 494D
+				Depok  Jawa Barat  16424
+				ID
+
+74-66-30   (hex)		T:mi Ytti
+746630     (base 16)		T:mi Ytti
+				Messitytonkatu 8 C 39
+				Helsinki  n/a  00180
+				FI
+
+6C-B3-50   (hex)		Anhui comhigher tech co.,ltd
+6CB350     (base 16)		Anhui comhigher tech co.,ltd
+				B6,717 Zhongshan South Road
+				Wuhu  Anhui  241000
+				CN
+
+38-59-F8   (hex)		MindMade Sp. z o.o.
+3859F8     (base 16)		MindMade Sp. z o.o.
+				Sniadeckich 10
+				Warsaw    00-656
+				PL
+
+4C-DF-3D   (hex)		TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD
+4CDF3D     (base 16)		TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD
+				A-1/2/A,IDA UPPAL,
+				HYDERABAD  AP  500039
+				IN
+
+E8-92-18   (hex)		Arcontia International AB
+E89218     (base 16)		Arcontia International AB
+				Gruvgatan 35A
+				Vastra Frolunda    421 30
+				SE
+
+00-75-E1   (hex)		Ampt, LLC
+0075E1     (base 16)		Ampt, LLC
+				4850 Innovation Drive
+				Fort Collins  Colorado  80525
+				US
+
+98-CD-B4   (hex)		Virident Systems, Inc.
+98CDB4     (base 16)		Virident Systems, Inc.
+				500 Yosemite Dr.
+				Milpitas  CA  95035
+				US
+
+A4-23-05   (hex)		Open Networking Laboratory
+A42305     (base 16)		Open Networking Laboratory
+				1000 El Camino Real
+				Menlo Park  CA  94025
+				US
+
+1C-48-F9   (hex)		GN Netcom A/S
+1C48F9     (base 16)		GN Netcom A/S
+				Lautrupbjerg 7
+				Ballerup  Ballerup  DK-2750
+				DK
+
+B0-FE-BD   (hex)		Private
+B0FEBD     (base 16)		Private
+
+60-69-9B   (hex)		isepos GmbH
+60699B     (base 16)		isepos GmbH
+				Wannweiler Str. 12
+				Kirchentellinsfurt    72138
+				US
+
+D4-D5-0D   (hex)		Southwest Microwave, Inc
+D4D50D     (base 16)		Southwest Microwave, Inc
+				9055 S McKemy St
+				Tempe  AZ  85284
+				US
+
+34-CD-6D   (hex)		CommSky Technologies
+34CD6D     (base 16)		CommSky Technologies
+				4655 Old Ironsides Dr
+				Santa Clara  CA  95054
+				US
+
+E4-F3-E3   (hex)		Shanghai iComhome Co.,Ltd.
+E4F3E3     (base 16)		Shanghai iComhome Co.,Ltd.
+				Small second floor of No.773 Siping Road
+				  Shanghai  200092
+				CN
+
+90-46-B7   (hex)		Vadaro Pte Ltd
+9046B7     (base 16)		Vadaro Pte Ltd
+				71 Ayer Rajah Crescent
+				    139951
+				SG
+
+04-CF-25   (hex)		MANYCOLORS, INC.
+04CF25     (base 16)		MANYCOLORS, INC.
+				3F, 4-1-18 Jinnoharu
+				Kitakyushu  Fukuoka  8070821
+				JP
+
+80-BB-EB   (hex)		Satmap Systems Ltd
+80BBEB     (base 16)		Satmap Systems Ltd
+				4 Fountain House
+				Leatherhead  Surrey  KT22 7LX
+				GB
+
+00-B7-8D   (hex)		Nanjing Shining Electric Automation Co., Ltd
+00B78D     (base 16)		Nanjing Shining Electric Automation Co., Ltd
+				NO.699,Laiyinda Road
+				Nanjing  Jiangsu  211100
+				CN
+
+60-FE-1E   (hex)		China Palms Telecom.Ltd
+60FE1E     (base 16)		China Palms Telecom.Ltd
+				2nd Floor of Building 1
+				PuDong District  Shanghai  201203
+				US
+
+B0-50-BC   (hex)		SHENZHEN BASICOM ELECTRONIC CO.,LTD.
+B050BC     (base 16)		SHENZHEN BASICOM ELECTRONIC CO.,LTD.
+				Basicom industry park, Baolong Avenue 3rd Road, Baolong industry town
+				Shenzhen  Guangdong  518116
+				CN
+
+84-1E-26   (hex)		KERNEL-I Co.,LTD
+841E26     (base 16)		KERNEL-I Co.,LTD
+				#606,ACE Techno Tower 10,470-5
+				Gasan-Dong, Geumcheon-gu, Seoul  Korea  153-789
+				KR
+
+B4-34-6C   (hex)		MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED
+B4346C     (base 16)		MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED
+				22/F. TWO INTERNATIONAL FINANCE CTR
+				Hong Kong  Hong Kong  999077
+				HK
+
+00-86-A0   (hex)		Private
+0086A0     (base 16)		Private
+
+A0-5B-21   (hex)		ENVINET GmbH
+A05B21     (base 16)		ENVINET GmbH
+				Hans-Pinsel-Str. 4
+				Haar    85540
+				DE
+
+50-B8-A2   (hex)		ImTech Technologies LLC,
+50B8A2     (base 16)		ImTech Technologies LLC,
+				2101 NE Jack London St
+				Corvallis  Oregon  97330
+				US
+
+B0-4C-05   (hex)		Fresenius Medical Care Deutschland GmbH
+B04C05     (base 16)		Fresenius Medical Care Deutschland GmbH
+				Hafenstr. 9
+				Schweinfurt    97424
+				DE
+
+B0-79-3C   (hex)		Revolv Inc
+B0793C     (base 16)		Revolv Inc
+				2060 Broadway #380
+				Boulder  CO  80302
+				US
+
+9C-4E-BF   (hex)		BoxCast
+9C4EBF     (base 16)		BoxCast
+				14538 Grapeland Ave
+				Cleveland  Ohio  44111
+				US
+
+34-A8-43   (hex)		KYOCERA Display Corporation
+34A843     (base 16)		KYOCERA Display Corporation
+				5-7-18 Higashinippori
+				Arakawa-ku  Tokyo  116-0014
+				JP
+
+74-CA-25   (hex)		Calxeda, Inc.
+74CA25     (base 16)		Calxeda, Inc.
+				7000 North Mopac Expressway
+				Austin  TX  78731
+				US
+
+5C-A3-EB   (hex)		Lokel s.r.o.
+5CA3EB     (base 16)		Lokel s.r.o.
+				Moravska 797/85
+				Ostrava  Moravskoslezsky  700 30
+				CZ
+
+C8-B3-73   (hex)		Cisco-Linksys, LLC
+C8B373     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+0C-2A-E7   (hex)		Beijing General Research Institute of Mining and Metallurgy
+0C2AE7     (base 16)		Beijing General Research Institute of Mining and Metallurgy
+				Building 23, Zone 18 of ABP, No. 188
+				  Beijing  100160
+				CN
+
+98-30-71   (hex)		DAIKYUNG VASCOM
+983071     (base 16)		DAIKYUNG VASCOM
+				DAIKYUNG Bldg.#1164-15,Gaepo-dong
+				Gangnam-gu  Seoul  135-960
+				KR
+
+D4-95-24   (hex)		Clover Network, Inc.
+D49524     (base 16)		Clover Network, Inc.
+				415 N Mathilda Ave
+				Sunnyvale  CA  94085
+				US
+
+94-50-47   (hex)		Rechnerbetriebsgruppe
+945047     (base 16)		Rechnerbetriebsgruppe
+				Werner von Siemens Str. 64
+				Würzburg  Bayern  97076
+				DE
+
+E0-31-D0   (hex)		SZ Telstar CO., LTD
+E031D0     (base 16)		SZ Telstar CO., LTD
+				Telstar Technology Park No.12&14, Longtong Industrial Zone
+				Shenzhen  Guangdong  518172
+				CN
+
+54-11-2F   (hex)		Sulzer Pump Solutions Finland Oy
+54112F     (base 16)		Sulzer Pump Solutions Finland Oy
+				Lentokentaentie 44
+				Lappeenranta    FI-53600
+				FI
+
+4C-55-B8   (hex)		Turkcell Teknoloji
+4C55B8     (base 16)		Turkcell Teknoloji
+				TUBITAK MAM Teknoloji Serbest Bolgesi Gebze
+				Kocaeli    41470
+				TR
+
+08-80-39   (hex)		Cisco SPVTG
+088039     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+E4-38-F2   (hex)		Advantage Controls
+E438F2     (base 16)		Advantage Controls
+				4700 Harold Abitz Dr.
+				Muskogee  OK  74403
+				US
+
+C4-C7-55   (hex)		Beijing HuaqinWorld Technology Co.,Ltd
+C4C755     (base 16)		Beijing HuaqinWorld Technology Co.,Ltd
+				30F,Beijing Silver Tower,No.2 North Road,
+				  Beijing  100027
+				CN
+
+0C-2D-89   (hex)		QiiQ Communications Inc.
+0C2D89     (base 16)		QiiQ Communications Inc.
+				30 East Beaver Creek Road
+				Richmond Hill  Ontario  L4B 1J2
+				CA
+
+A8-D2-36   (hex)		Lightware Visual Engineering
+A8D236     (base 16)		Lightware Visual Engineering
+				Peterdy utca 15.
+				  Budapest  H-1071
+				HU
+
+98-10-94   (hex)		Shenzhen Vsun communication technology Co.,ltd
+981094     (base 16)		Shenzhen Vsun communication technology Co.,ltd
+				Room 1903, Block A,
+				Shenzhen  Guangdong  518000
+				CN
+
+A4-F3-C1   (hex)		Open Source Robotics Foundation, Inc.
+A4F3C1     (base 16)		Open Source Robotics Foundation, Inc.
+				419 N Shoreline Blvd
+				Mountain View  CA  94043
+				US
+
+14-13-30   (hex)		Anakreon UK LLP
+141330     (base 16)		Anakreon UK LLP
+				5-th Floor
+				  London  EC3V 0EH
+				GB
+
+0C-F4-05   (hex)		Beijing Signalway Technologies Co.,Ltd
+0CF405     (base 16)		Beijing Signalway Technologies Co.,Ltd
+				Room B 1905,Tri-tower
+				Haidian District  Beijing  100190
+				CN
+
+50-61-D6   (hex)		Indu-Sol GmbH
+5061D6     (base 16)		Indu-Sol GmbH
+				Blumenstr. 3
+				Schmölln  Thüringen  04626
+				DE
+
+DC-70-14   (hex)		Private
+DC7014     (base 16)		Private
+
+78-8D-F7   (hex)		Hitron Technologies. Inc
+788DF7     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+2C-24-5F   (hex)		Babolat VS
+2C245F     (base 16)		Babolat VS
+				93 rue Andre Bollier
+				  Lyon  69007
+				FR
+
+90-56-92   (hex)		Autotalks Ltd.
+905692     (base 16)		Autotalks Ltd.
+				Kfar Netter
+				  Israel  40593
+				IL
+
+04-BF-A8   (hex)		ISB Corporation
+04BFA8     (base 16)		ISB Corporation
+				1-2-1 Shinyokohama, Kohoku-ku
+				Yokohama  Kanagawa  222-0033
+				JP
+
+8C-C7-D0   (hex)		zhejiang ebang communication co.,ltd
+8CC7D0     (base 16)		zhejiang ebang communication co.,ltd
+				1418-36#,Moganshan Road
+				hangzhou  zhejiang  310013
+				CN
+
+B8-AE-6E   (hex)		Nintendo Co., Ltd.
+B8AE6E     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+D0-EB-03   (hex)		Zhehua technology limited
+D0EB03     (base 16)		Zhehua technology limited
+				Room 2206,No 1079,A,ZhanTao Technology Building, MinZhi Street, Longhua District
+				Tortoal British Virgin Island,Hong Kong  Shenzhen,Guang Dong  518131
+				CN
+
+68-3E-EC   (hex)		ERECA
+683EEC     (base 16)		ERECA
+				75, Rue d&#39;Orgemont
+				Saint GRATIEN    95210
+				FR
+
+C4-26-28   (hex)		Airo Wireless
+C42628     (base 16)		Airo Wireless
+				12 Piedmont Center
+				Atlanta  GA  30305
+				US
+
+30-AA-BD   (hex)		Shanghai Reallytek Information Technology Co.,Ltd
+30AABD     (base 16)		Shanghai Reallytek Information Technology Co.,Ltd
+				Building No.1-906, No.3000 Long Dong Avenue
+				Shanghai    201203
+				CN
+
+A4-B8-18   (hex)		PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH
+A4B818     (base 16)		PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH
+				Ulrichsberger Str. 17
+				Deggendorf    94469
+				DE
+
+C0-4D-F7   (hex)		SERELEC
+C04DF7     (base 16)		SERELEC
+				2, Chemin du Génie
+				VENISSIEUX CEDEX    69633
+				FR
+
+0C-84-84   (hex)		Zenovia Electronics Inc.
+0C8484     (base 16)		Zenovia Electronics Inc.
+				#206, 506B St. Albert Rd.
+				St. Albert  AB  T8N 5Z1
+				CA
+
+00-59-07   (hex)		LenovoEMC Products USA, LLC
+005907     (base 16)		LenovoEMC Products USA, LLC
+				22 South St
+				Hopinkton  MA  01748
+				US
+
+50-A7-15   (hex)		Aboundi, Inc.
+50A715     (base 16)		Aboundi, Inc.
+				4 Bud Way, Unit 10
+				Nashua  NH  03063
+				US
+
+0C-04-00   (hex)		Jantar d.o.o.
+0C0400     (base 16)		Jantar d.o.o.
+				Kranjska cesta 24
+				Naklo  Slovenia  4202
+				SI
+
+68-7C-D5   (hex)		Y Soft Corporation, a.s.
+687CD5     (base 16)		Y Soft Corporation, a.s.
+				Technicka 2948/13
+				Brno  Czech Republic  616 00
+				CZ
+
+90-7A-F1   (hex)		Wally
+907AF1     (base 16)		Wally
+				1415 NE 45th St
+				Seattle  WA  98105
+				US
+
+2C-B6-93   (hex)		Radware
+2CB693     (base 16)		Radware
+				22 Raoul Wallenberg St.
+				Tel-Aviv    69710
+				IL
+
+A8-61-AA   (hex)		Cloudview Limited
+A861AA     (base 16)		Cloudview Limited
+				Kingsway House
+				St Peter Port  Guernsey  GY1 2QE
+				GB
+
+FC-11-86   (hex)		Logic3 plc
+FC1186     (base 16)		Logic3 plc
+				Rhodes Way
+				Watford  Hertfordshire  WD24 4YW
+				GB
+
+E0-18-77   (hex)		FUJITSU LIMITED
+E01877     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+E4-57-A8   (hex)		Stuart Manufacturing, Inc.
+E457A8     (base 16)		Stuart Manufacturing, Inc.
+				1615 East Wallace Street
+				Fort Wayne  Indiana  46803
+				US
+
+78-99-66   (hex)		Musilab Electronics (DongGuan)Co.,Ltd.
+789966     (base 16)		Musilab Electronics (DongGuan)Co.,Ltd.
+				A2, LinDong 3 Road, LinCun
+				DongGuan  Guangdong  523710
+				CN
+
+28-CB-EB   (hex)		One
+28CBEB     (base 16)		One
+				Mechelsesteenweg 326
+				Edegem  Antwerpen  2650
+				BE
+
+7C-A1-5D   (hex)		GN ReSound A/S
+7CA15D     (base 16)		GN ReSound A/S
+				Lautrupbjerg 7
+				Ballerup  DK-CPH  2750
+				DK
+
+3C-08-1E   (hex)		Beijing Yupont Electric Power Technology Co.,Ltd
+3C081E     (base 16)		Beijing Yupont Electric Power Technology Co.,Ltd
+				No.1,Dizang-an Nanxiang
+				  Beijing  100045
+				CN
+
+FC-58-FA   (hex)		Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.
+FC58FA     (base 16)		Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.
+				Block 3, Dong Huan Industrial Zone, Sha Jing Town
+				Shen Zhen  Guang Dong  518000
+				CN
+
+4C-CC-34   (hex)		Motorola Solutions Inc.
+4CCC34     (base 16)		Motorola Solutions Inc.
+				One Motorola Plaza
+				Holtsville  NY  11742
+				US
+
+D0-D4-71   (hex)		MVTECH co., Ltd
+D0D471     (base 16)		MVTECH co., Ltd
+				#1004, Hanshin IT Tower, 235, Guro 3-dong, Guro-Gu
+				SEOUL    152-768
+				KR
+
+08-68-D0   (hex)		Japan System Design
+0868D0     (base 16)		Japan System Design
+				Skyhills Deshio 3F
+				  Hiroshima  734-0001
+				JP
+
+D4-22-3F   (hex)		Lenovo Mobile Communication Technology Ltd.
+D4223F     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone,
+				Xiamen  Fujian  361006
+				US
+
+C8-EE-A6   (hex)		Shenzhen SHX Technology Co., Ltd
+C8EEA6     (base 16)		Shenzhen SHX Technology Co., Ltd
+				6F,No.10 buliding,JiuXiangling Industial Zone,Xili,
+				Shenzhen  Guangdong  518055
+				CN
+
+24-81-AA   (hex)		KSH International Co., Ltd.
+2481AA     (base 16)		KSH International Co., Ltd.
+				2F, No.17 Minsheng Rd, Xindian Dist.,
+				New Taipei City    23150
+				US
+
+AC-41-22   (hex)		Eclipse Electronic Systems Inc.
+AC4122     (base 16)		Eclipse Electronic Systems Inc.
+				17111 Waterview Parkway
+				Dallas  TX  75252
+				US
+
+68-97-E8   (hex)		Society of Motion Picture &amp; Television Engineers
+6897E8     (base 16)		Society of Motion Picture &amp; Television Engineers
+				3 Barker Ave. FL5
+				White Plains  NY  10601
+				US
+
+E8-E8-75   (hex)		iS5 Communications Inc.
+E8E875     (base 16)		iS5 Communications Inc.
+				#1-1815 Meyerside Drive
+				Mississauga  Ontario  L5T 1G3
+				CA
+
+C8-0E-95   (hex)		OmniLync Inc.
+C80E95     (base 16)		OmniLync Inc.
+				51a Bennington St.
+				Newton  MA  02458
+				US
+
+30-05-5C   (hex)		Brother industries, LTD.
+30055C     (base 16)		Brother industries, LTD.
+				1-1-1, Kawagishi, Mizuho-ku,
+				Nagoya  Aichi  467-8562
+				JP
+
+08-0E-A8   (hex)		Velex s.r.l.
+080EA8     (base 16)		Velex s.r.l.
+				Via Dell&#39;Artigianato 56
+				Vigodarzere  Padova  35010
+				IT
+
+B8-C4-6F   (hex)		PRIMMCON INDUSTRIES INC
+B8C46F     (base 16)		PRIMMCON INDUSTRIES INC
+				137 MinQuan Rd, 5th Floor,
+				New Taipei    23141
+				TW
+
+D8-B0-2E   (hex)		Guangzhou Zonerich Business Machine Co., LTD.
+D8B02E     (base 16)		Guangzhou Zonerich Business Machine Co., LTD.
+				North Gate, No.17 Yunjun Road, Luogang District
+				 Guangzhou  Guangdong  510530
+				CN
+
+C4-E0-32   (hex)		IEEE 1904.1 Working Group
+C4E032     (base 16)		IEEE 1904.1 Working Group
+				1351 Redwood Way,
+				Petaluma  CA  94954
+				US
+
+58-EB-14   (hex)		Proteus Digital Health
+58EB14     (base 16)		Proteus Digital Health
+				2600 Bridge Parkway, Ste 101
+				Redwood City  California  94065
+				US
+
+C4-58-C2   (hex)		Shenzhen TATFOOK Technology Co., Ltd.
+C458C2     (base 16)		Shenzhen TATFOOK Technology Co., Ltd.
+				3rd Industrial Area of Shajing Industrial Company, Haoxiang Road
+				Shenzhen  Guangdong  518104
+				CN
+
+D0-CD-E1   (hex)		Scientech Electronics
+D0CDE1     (base 16)		Scientech Electronics
+				4F, No.501-17, Zhong Zheng Rd,
+				New Taipei City    23148
+				TW
+
+5C-E0-CA   (hex)		FeiTian United (Beijing) System Technology Co., Ltd.
+5CE0CA     (base 16)		FeiTian United (Beijing) System Technology Co., Ltd.
+				3 Floor, Tower B, Huizhi Tower
+				Haidian District  Beijing  100085
+				CN
+
+E0-81-77   (hex)		GreenBytes, Inc.
+E08177     (base 16)		GreenBytes, Inc.
+				15 Gray Lane, Suite 301
+				Ashaway  RI  02804
+				US
+
+9C-98-11   (hex)		Guangzhou Sunrise Electronics Development Co., Ltd
+9C9811     (base 16)		Guangzhou Sunrise Electronics Development Co., Ltd
+				12th Floor,368 GuangZhou Avenue South
+				Guangzhou  Guangdong  510300
+				CN
+
+B8-60-91   (hex)		Onnet Technologies and Innovations LLC
+B86091     (base 16)		Onnet Technologies and Innovations LLC
+				1, 82/83 Street, New Industrial Area -II
+				Ajman  Ajman  52141
+				AE
+
+8C-76-C1   (hex)		Goden Tech Limited
+8C76C1     (base 16)		Goden Tech Limited
+				ROOM 510-511C2 NAN FUNG TOWER.,
+				    999077
+				HK
+
+8C-07-8C   (hex)		FLOW DATA INC
+8C078C     (base 16)		FLOW DATA INC
+				2309 GRAND PARK DRIVE
+				GRAND JUNCTION  CO  81505
+				US
+
+F8-DF-A8   (hex)		zte corporation
+F8DFA8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A8-95-B0   (hex)		Aker Subsea Ltd
+A895B0     (base 16)		Aker Subsea Ltd
+				Kiekhill Industrial Estate
+				  Aberdeen  AB51 3XA
+				GB
+
+10-4D-77   (hex)		Innovative Computer Engineering
+104D77     (base 16)		Innovative Computer Engineering
+				10302 Eaton Place STE 100
+				Fairfax  VA  22030
+				US
+
+C4-5D-D8   (hex)		HDMI Forum
+C45DD8     (base 16)		HDMI Forum
+				1140 East Arques Avenue, Suite 900
+				Sunnyvale  CA  94085
+				US
+
+C4-EB-E3   (hex)		RRCN SAS
+C4EBE3     (base 16)		RRCN SAS
+				23 chemin du vieux chene
+				Meylan  Isere  38246
+				FR
+
+94-75-6E   (hex)		QinetiQ North America
+94756E     (base 16)		QinetiQ North America
+				137 Delta Drive
+				Pittsburgh  PA  15238
+				US
+
+4C-1A-95   (hex)		Novakon Co., Ltd.
+4C1A95     (base 16)		Novakon Co., Ltd.
+				6F., No. 120, Lane 235, Pao Chiao Road
+				New Taipei City    23145
+				TW
+
+60-BB-0C   (hex)		Beijing HuaqinWorld Technology Co,Ltd
+60BB0C     (base 16)		Beijing HuaqinWorld Technology Co,Ltd
+				30F,Beijing Silver Tower,No.2 North Road
+				Chao Yang District  Beijing  100027
+				CN
+
+A4-2C-08   (hex)		Masterwork Automodules
+A42C08     (base 16)		Masterwork Automodules
+				11F-3, 3,PARK ST., NAN GANG
+				TAIPEI    11503
+				TW
+
+10-B9-FE   (hex)		Lika srl
+10B9FE     (base 16)		Lika srl
+				Via San Lorenzo 25
+				Carrè  Vicenza  36010
+				IT
+
+30-15-18   (hex)		Ubiquitous Communication Co. ltd.
+301518     (base 16)		Ubiquitous Communication Co. ltd.
+				JEI Platz RM No.410-1
+				  Seoul  153-792
+				KR
+
+84-17-15   (hex)		GP Electronics (HK) Ltd.
+841715     (base 16)		GP Electronics (HK) Ltd.
+				Gold Peak Industrial Building, 6F
+				Kwai Chung  NT  
+				HK
+
+84-8E-96   (hex)		Embertec Pty Ltd
+848E96     (base 16)		Embertec Pty Ltd
+				182 Fullarton Road
+				Dulwich, Adelaide  South Australia  5065
+				AU
+
+64-99-A0   (hex)		AG Elektronik AB
+6499A0     (base 16)		AG Elektronik AB
+				Smidesv 12
+				Staffanstorp    24534
+				SE
+
+08-F1-B7   (hex)		Towerstream Corpration
+08F1B7     (base 16)		Towerstream Corpration
+				55 Hammerlund Way
+				Middletown  RI  02842
+				US
+
+C0-44-E3   (hex)		Shenzhen Sinkna Electronics Co., LTD
+C044E3     (base 16)		Shenzhen Sinkna Electronics Co., LTD
+				9 Building, XinXin Tian Industry Area,
+				Shenzhen  Guangdong  5180000
+				CN
+
+18-55-0F   (hex)		Cisco SPVTG
+18550F     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+18-7A-93   (hex)		AMICCOM Electronics Corporation
+187A93     (base 16)		AMICCOM Electronics Corporation
+				Room A3, 1F., No.1, Lixing 1st Rd
+				Hsinchu    30078
+				TW
+
+88-87-DD   (hex)		DarbeeVision Inc.
+8887DD     (base 16)		DarbeeVision Inc.
+				401 N. Cotswolds Lane #C
+				Orange  California  92869
+				US
+
+30-C8-2A   (hex)		WI-BIZ srl
+30C82A     (base 16)		WI-BIZ srl
+				Via Carlo Ferrero 10
+				Cascine Vica Rivoli  Torino  10098
+				IT
+
+88-A3-CC   (hex)		Amatis Controls
+88A3CC     (base 16)		Amatis Controls
+				 210 Aspen Airport Business Center, Suite A
+				Aspen  CO  81611
+				US
+
+C0-A0-C7   (hex)		FAIRFIELD INDUSTRIES
+C0A0C7     (base 16)		FAIRFIELD INDUSTRIES
+				1111 GILLINGHAM LANE
+				SUGAR LAND  TEXAS  77478
+				US
+
+DC-A9-89   (hex)		MACANDC
+DCA989     (base 16)		MACANDC
+				2-nd Filevskaya str.7/6
+				Moscow    121096
+				RU
+
+A0-03-63   (hex)		Robert Bosch Healthcare GmbH
+A00363     (base 16)		Robert Bosch Healthcare GmbH
+				Stuttgarter Stra
+				Waiblingen  Baden-Württemberg  71332
+				DE
+
+D0-B4-98   (hex)		Robert Bosch LLC Automotive Electronics
+D0B498     (base 16)		Robert Bosch LLC Automotive Electronics
+				15000 N Haggerty
+				Plymouth  Michigan  48170
+				US
+
+E0-55-97   (hex)		Emergent Vision Technologies Inc.
+E05597     (base 16)		Emergent Vision Technologies Inc.
+				SUITE# 239 - 552A CLARKE ROAD
+				COQUITLAM  British Columbia  V3J 0A3
+				CA
+
+7C-43-8F   (hex)		E-Band Communications Corp.
+7C438F     (base 16)		E-Band Communications Corp.
+				10095 Scripps Ranch Ct.  Ste A
+				San Diego  CA  92131
+				US
+
+A0-E2-5A   (hex)		Amicus SK, s.r.o.
+A0E25A     (base 16)		Amicus SK, s.r.o.
+				Koreszkova 9
+				Skalica  Trnavsky kraj  90901
+				SK
+
+D4-0F-B2   (hex)		Applied Micro Electronics AME bv
+D40FB2     (base 16)		Applied Micro Electronics AME bv
+				Esp 100
+				Eindhoven  NB  5633 AA
+				NL
+
+44-9B-78   (hex)		The Now Factory
+449B78     (base 16)		The Now Factory
+				Arkle Road
+				Dublin 18    
+				IE
+
+F0-F6-69   (hex)		Motion Analysis Corporation
+F0F669     (base 16)		Motion Analysis Corporation
+				3617 Westwind Blvd.
+				Santa Rosa  CA  95403
+				US
+
+78-99-5C   (hex)		Nationz Technologies Inc
+78995C     (base 16)		Nationz Technologies Inc
+				12F,Tower Building #3,China Academy of Science and Technology Development,Gaoxin South Ave.1
+				Shen Zhen  GuangDong  518057
+				CN
+
+84-9D-C5   (hex)		Centera Photonics Inc.
+849DC5     (base 16)		Centera Photonics Inc.
+				3F, No 6-3 Dusing Rd.
+				Hsinchu  Taiwan  30078
+				TW
+
+58-09-43   (hex)		Private
+580943     (base 16)		Private
+
+EC-FC-55   (hex)		A. Eberle GmbH & Co. KG
+ECFC55     (base 16)		A. Eberle GmbH & Co. KG
+				Frankenstrasse 160
+				Nuernberg  Bavaria  90461
+				DE
+
+18-2A-7B   (hex)		Nintendo Co., Ltd.
+182A7B     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+68-FB-95   (hex)		Generalplus Technology Inc.
+68FB95     (base 16)		Generalplus Technology Inc.
+				3F, No.8, Dusing Rd., Hsinchu Science Park
+				Hsinchu City    30077
+				TW
+
+5C-89-D4   (hex)		Beijing Banner Electric Co.,Ltd
+5C89D4     (base 16)		Beijing Banner Electric Co.,Ltd
+				Mail Box 1033,Long cheng Garden
+				Chang Ping District  beijing  102208
+				CN
+
+54-11-5F   (hex)		Atamo Pty Ltd
+54115F     (base 16)		Atamo Pty Ltd
+				21 River Road
+				Bayswater  WA  6156
+				AU
+
+8C-AE-4C   (hex)		Plugable Technologies
+8CAE4C     (base 16)		Plugable Technologies
+				40 Lake Bellevue Dr.
+				Bellevue  WA  98005
+				US
+
+0C-C6-55   (hex)		Wuxi YSTen Technology Co.,Ltd.
+0CC655     (base 16)		Wuxi YSTen Technology Co.,Ltd.
+				Room 1801,18F, North Star Times Tower,
+				Chaoyang District  Beijing  100101
+				CN
+
+24-2F-FA   (hex)		Toshiba Global Commerce Solutions
+242FFA     (base 16)		Toshiba Global Commerce Solutions
+				B307/D121F
+				RTP  NC  27709
+				US
+
+E4-96-AE   (hex)		ALTOGRAPHICS Inc.
+E496AE     (base 16)		ALTOGRAPHICS Inc.
+				Daegu Venture Center 13F
+				  Daegu  701-020
+				KR
+
+4C-22-58   (hex)		cozybit, Inc.
+4C2258     (base 16)		cozybit, Inc.
+				605 Market Street
+				San Francisco  CA  94105
+				US
+
+F4-94-66   (hex)		CountMax,  ltd
+F49466     (base 16)		CountMax,  ltd
+				11 Titova str. 
+				poselok Lesnoy  Moscowskaya oblast  141231
+				RU
+
+F4-52-14   (hex)		Mellanox Technologies, Inc.
+F45214     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+1C-95-9F   (hex)		Veethree Electronics And Marine LLC
+1C959F     (base 16)		Veethree Electronics And Marine LLC
+				2050 47th Terrace East
+				Bradenton  Florida  34203
+				US
+
+08-81-F4   (hex)		Juniper Networks
+0881F4     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+10-F4-9A   (hex)		T3 Innovation
+10F49A     (base 16)		T3 Innovation
+				808 Calle Plano
+				Camarillo  CA  93012
+				US
+
+3C-57-BD   (hex)		Kessler Crane Inc.
+3C57BD     (base 16)		Kessler Crane Inc.
+				602 East Jefferson St
+				Plymouth  Indidana  46563
+				US
+
+04-E9-E5   (hex)		PJRC.COM, LLC
+04E9E5     (base 16)		PJRC.COM, LLC
+				14723 SW Brooke Ct
+				Sherwood  Oregon  97140
+				US
+
+60-BD-91   (hex)		Move Innovation
+60BD91     (base 16)		Move Innovation
+				Generatorvej 8B,st
+				Herlev  DK  2730
+				DK
+
+CC-4B-FB   (hex)		Hellberg Safety AB
+CC4BFB     (base 16)		Hellberg Safety AB
+				Stakebergsvagen 2
+				Stenkullen    44361
+				SE
+
+6C-AD-EF   (hex)		KZ Broadband Technologies, Ltd. 
+6CADEF     (base 16)		KZ Broadband Technologies, Ltd. 
+				1601 Tower C 
+				Shenzhen  Guangdong  518057
+				CN
+
+74-5F-AE   (hex)		TSL PPL
+745FAE     (base 16)		TSL PPL
+				Units 1-2, First Avenue
+				Marlow  Buckinghamshire  SL7 1YA
+				GB
+
+68-51-B7   (hex)		PowerCloud Systems, Inc.
+6851B7     (base 16)		PowerCloud Systems, Inc.
+				3333 Coyote Hill Rd
+				Palo Alto  CA  94304
+				US
+
+74-2D-0A   (hex)		Norfolk Elektronik AG
+742D0A     (base 16)		Norfolk Elektronik AG
+				Luzernstrasse 12
+				Eschenbach  LU  6274
+				CH
+
+70-F1-E5   (hex)		Xetawave LLC
+70F1E5     (base 16)		Xetawave LLC
+				1668 Valtec Lane
+				Boulder  CO  80301
+				US
+
+C0-AA-68   (hex)		OSASI Technos Inc.
+C0AA68     (base 16)		OSASI Technos Inc.
+				65-3, Hongu-cho, 
+				Kochi-shi, Kochi-ken     780-0945
+				JP
+
+88-D7-BC   (hex)		DEP Company
+88D7BC     (base 16)		DEP Company
+				Poryadkovy pereulok,21
+				Moscow    127055
+				RU
+
+48-5A-3F   (hex)		WISOL
+485A3F     (base 16)		WISOL
+				373-7, Gajang-dong
+				Osan-si  Gyeonggi-do  447-210
+				KR
+
+60-BC-4C   (hex)		EWM Hightec Welding GmbH
+60BC4C     (base 16)		EWM Hightec Welding GmbH
+				Dr.Günter-Henle-Str. 8
+				Mündersbach  Rheinland Pfalz  56271
+				DE
+
+1C-11-E1   (hex)		Wartsila Finland Oy
+1C11E1     (base 16)		Wartsila Finland Oy
+				Jarvikatu 2-4
+				Vaasa  Western Finland  65101
+				FI
+
+50-46-5D   (hex)		ASUSTek COMPUTER INC.
+50465D     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+74-BF-A1   (hex)		HYUNTECK
+74BFA1     (base 16)		HYUNTECK
+				#603 107-Dong, Jugong Apt., Changhyeon-ri, Hwado-eup
+				Namyangju-si  Gyeonggi-do  472-779
+				KR
+
+CC-26-2D   (hex)		Verifi, LLC
+CC262D     (base 16)		Verifi, LLC
+				9466 Meridian Way
+				West Chester   OH  45069
+				US
+
+3C-8A-E5   (hex)		Tensun Information Technology(Hangzhou) Co.,LTD
+3C8AE5     (base 16)		Tensun Information Technology(Hangzhou) Co.,LTD
+				Room 207,Building 5,Wensan Road
+				Hangzhou  Zhejiang  310013
+				CN
+
+2C-5A-A3   (hex)		PROMATE ELECTRONIC CO.LTD
+2C5AA3     (base 16)		PROMATE ELECTRONIC CO.LTD
+				4F 32,SEC.1 HUAN SHAN RD.,NEI HU,
+				TAIPEI    114
+				TW
+
+34-E0-CF   (hex)		zte corporation
+34E0CF     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+08-B7-38   (hex)		Lite-On Technogy Corp.
+08B738     (base 16)		Lite-On Technogy Corp.
+				18F, 392, RueyKuang Road, Neihu,
+				Taipei    11492
+				TW
+
+F8-AA-8A   (hex)		Axview Technology (Shenzhen) Co.,Ltd
+F8AA8A     (base 16)		Axview Technology (Shenzhen) Co.,Ltd
+				NO 1, Mei Zhong Road, Futian District
+				SHENZHEN  GUANGDONG  518049
+				CN
+
+7C-01-87   (hex)		Curtis Instruments, Inc.
+7C0187     (base 16)		Curtis Instruments, Inc.
+				200 Kisco Avenue
+				Mt Kisco  NY  10549
+				US
+
+54-F6-66   (hex)		Berthold Technologies GmbH and Co.KG
+54F666     (base 16)		Berthold Technologies GmbH and Co.KG
+				Calmbacher Strasse 22
+				Bad Wildbad    75323
+				DE
+
+34-C8-03   (hex)		Nokia Corporation
+34C803     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+F0-5F-5A   (hex)		Getriebebau NORD GmbH and Co. KG
+F05F5A     (base 16)		Getriebebau NORD GmbH and Co. KG
+				Rudolf-Diesel-Strasse 1
+				Bargteheide  Schleswig-Holstein  22941
+				DE
+
+80-1D-AA   (hex)		Avaya Inc
+801DAA     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+7C-09-2B   (hex)		Bekey A/S
+7C092B     (base 16)		Bekey A/S
+				Bredebjergvej 6
+				Taastrup    2630
+				DK
+
+84-2B-BC   (hex)		Modelleisenbahn GmbH
+842BBC     (base 16)		Modelleisenbahn GmbH
+				Plainbachstrasse 4
+				Bergheim    5101
+				AT
+
+B4-00-9C   (hex)		CableWorld Ltd.
+B4009C     (base 16)		CableWorld Ltd.
+				Kondorfa u. 6/B
+				Budapest    1112
+				HU
+
+28-9E-DF   (hex)		Danfoss Turbocor Compressors, Inc
+289EDF     (base 16)		Danfoss Turbocor Compressors, Inc
+				1769 E. Paul Dirac Ave.
+				Tallahassee  Florida  32310
+				US
+
+80-3F-D6   (hex)		bytes at work AG
+803FD6     (base 16)		bytes at work AG
+				Konradstrasse 15
+				Winterthur  ZH  8400
+				CH
+
+78-44-05   (hex)		FUJITU(HONG KONG) ELECTRONIC Co.,LTD.
+784405     (base 16)		FUJITU(HONG KONG) ELECTRONIC Co.,LTD.
+				8/F,QingHai Building,Xiang Mei Road,Futian District
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+04-4A-50   (hex)		Ramaxel Technology (Shenzhen) limited company
+044A50     (base 16)		Ramaxel Technology (Shenzhen) limited company
+				2-5/F,North Block Southeast Industrial and Commercial Building Houhai Road,Shekou Shenzhen 
+				shenzhen  guangdong  518067
+				CN
+
+0C-D9-C1   (hex)		Visteon Corporation
+0CD9C1     (base 16)		Visteon Corporation
+				One Village Center Drive
+				Van Buren Twp  MI  48111
+				US
+
+38-A5-B6   (hex)		SHENZHEN MEGMEET ELECTRICAL CO.,LTD
+38A5B6     (base 16)		SHENZHEN MEGMEET ELECTRICAL CO.,LTD
+				5th Floor,Building B, Ziguang Information Harbor
+				Shenzhen  Guangdong  518057
+				CN
+
+68-AB-8A   (hex)		RF IDeas
+68AB8A     (base 16)		RF IDeas
+				4020 Winnetka Ave
+				Rolling Meadows  IL  60008
+				US
+
+24-EE-3A   (hex)		Chengdu Yingji Electronic Hi-tech Co Ltd
+24EE3A     (base 16)		Chengdu Yingji Electronic Hi-tech Co Ltd
+				No.3 South Herui Road Hi-tech Zone
+				Chengdu City  Sichuan  611731
+				CN
+
+0C-C6-6A   (hex)		Nokia Corporation
+0CC66A     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+74-27-3C   (hex)		ChangYang Technology (Nanjing) Co., LTD
+74273C     (base 16)		ChangYang Technology (Nanjing) Co., LTD
+				NO.9 KaiCheng Road,QiLinTown
+				NanJing  JiangSu  211100
+				CN
+
+08-7C-BE   (hex)		Quintic Corp.
+087CBE     (base 16)		Quintic Corp.
+				1600 Wyatt Dr., #8
+				Santa Clara  CA  95054
+				US
+
+E8-04-F3   (hex)		Throughtek Co., Ltd.
+E804F3     (base 16)		Throughtek Co., Ltd.
+				4F, no. 221, Chong-yang Rd.
+				Taipei    11573
+				TW
+
+08-68-EA   (hex)		EITO ELECTRONICS CO., LTD.
+0868EA     (base 16)		EITO ELECTRONICS CO., LTD.
+				1-34-1 Shinmeidai
+				Hamura-shi  Tokyo  205-0023
+				JP
+
+F8-22-85   (hex)		Cypress Technology CO., LTD.
+F82285     (base 16)		Cypress Technology CO., LTD.
+				6F-5, NO., 130 Jiankang Rd.,
+				Zhonghe Dist.  New Taipei City  23585
+				TW
+
+C4-AD-21   (hex)		MEDIAEDGE Corporation
+C4AD21     (base 16)		MEDIAEDGE Corporation
+				23F Kobe Commerce, Industry and Trade Center Bldg.
+				Kobe  Hyogo  651-0083
+				JP
+
+E8-5B-F0   (hex)		Imaging Diagnostics
+E85BF0     (base 16)		Imaging Diagnostics
+				POB 698
+				Nes Ziona  N/A  74106
+				IL
+
+A4-0B-ED   (hex)		Carry Technology Co.,Ltd
+A40BED     (base 16)		Carry Technology Co.,Ltd
+				4F, No.119, JianKang Road
+				Jhonghe Dist.  New Taipei City  23585
+				TW
+
+70-23-93   (hex)		fos4X GmbH
+702393     (base 16)		fos4X GmbH
+				Thalkirchner Str. 210, Geb. 6
+				81371 München    
+				DE
+
+64-D8-14   (hex)		Cisco Systems, Inc
+64D814     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F8-5F-2A   (hex)		Nokia Corporation
+F85F2A     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+C4-38-D3   (hex)		TAGATEC CO.,LTD
+C438D3     (base 16)		TAGATEC CO.,LTD
+				#604, Dongmoon Goodmorning Tower 2, 
+				Goyang-si  Kyunggi-do  410-704
+				KR
+
+50-2E-CE   (hex)		Asahi Electronics Co.,Ltd
+502ECE     (base 16)		Asahi Electronics Co.,Ltd
+				29-25 Kariyado
+				  Kanagawa-ken  211-0022
+				JP
+
+AC-14-D2   (hex)		wi-daq, inc.
+AC14D2     (base 16)		wi-daq, inc.
+				850 NW Federal Hwy
+				Stuart  Florida  34994
+				US
+
+9C-4C-AE   (hex)		Mesa Labs
+9C4CAE     (base 16)		Mesa Labs
+				10 Evergreen Dr
+				Bozeman  MT  59715
+				US
+
+20-C1-AF   (hex)		i Wit Digital Co., Limited
+20C1AF     (base 16)		i Wit Digital Co., Limited
+				303,Buiding1,Nanhai Ecool Innovation Park,
+				Shenzhen  GuangDong  518000
+				US
+
+80-AA-A4   (hex)		USAG
+80AAA4     (base 16)		USAG
+				301 Goolsby Blvd
+				Deerfield Beach  FL  33442
+				US
+
+30-AE-F6   (hex)		Radio Mobile Access
+30AEF6     (base 16)		Radio Mobile Access
+				1 Elm Sq
+				Andover  MA  01870
+				US
+
+08-5B-0E   (hex)		Fortinet, Inc.
+085B0E     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale  California  94086
+				US
+
+EC-42-F0   (hex)		ADL Embedded Solutions, Inc.
+EC42F0     (base 16)		ADL Embedded Solutions, Inc.
+				4411 Morena Blvd.
+				San Diego  CA  92117
+				US
+
+E8-CB-A1   (hex)		Nokia Corporation
+E8CBA1     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+6C-E4-CE   (hex)		Villiger Security Solutions AG
+6CE4CE     (base 16)		Villiger Security Solutions AG
+				Giessenmatt 2
+				Sins    5643
+				CH
+
+64-9F-F7   (hex)		Kone OYj
+649FF7     (base 16)		Kone OYj
+				Myllykatu 3
+				Hyvinkaa  Hyvinkaa  05830
+				FI
+
+CC-91-2B   (hex)		TE Connectivity Touch Solutions
+CC912B     (base 16)		TE Connectivity Touch Solutions
+				2245 Brighton Henrietta Town Line Road
+				Rochester  New York  14623
+				US
+
+C0-5E-79   (hex)		SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD
+C05E79     (base 16)		SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD
+				3F,C4 Building,Yintian Industrial Zone,Xixiang,Baoan District
+				shenzhen  guangdong  518102
+				CN
+
+58-BF-EA   (hex)		Cisco Systems, Inc
+58BFEA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-01-B1   (hex)		SeekTech INC
+C401B1     (base 16)		SeekTech INC
+				3855 Ruffin Road
+				San Diego  California  92123
+				US
+
+C0-C9-46   (hex)		MITSUYA LABORATORIES INC.
+C0C946     (base 16)		MITSUYA LABORATORIES INC.
+				6-31-18
+				KAWASAKI-CITY  KANAGAWA  215-0021
+				JP
+
+F4-60-0D   (hex)		Panoptic Technology, Inc
+F4600D     (base 16)		Panoptic Technology, Inc
+				587 W Eau Gallie Blvd
+				Melbourne  FL  32935
+				US
+
+A8-2B-D6   (hex)		Shina System Co., Ltd
+A82BD6     (base 16)		Shina System Co., Ltd
+				3305, O'BizTower, 126, Beolmal-ro,
+				Anyang-Si  Gyeounggi-Do  431-763
+				KR
+
+AC-CF-23   (hex)		Hi-flying electronics technology Co.,Ltd
+ACCF23     (base 16)		Hi-flying electronics technology Co.,Ltd
+				Room B101,456 BiBo Raod,PuDong
+				  Shanghai  201200
+				CN
+
+60-90-84   (hex)		DSSD Inc
+609084     (base 16)		DSSD Inc
+				4025 Bohannon Dr
+				Menlo Park  CA  94025
+				US
+
+FC-1D-59   (hex)		I Smart Cities HK Ltd
+FC1D59     (base 16)		I Smart Cities HK Ltd
+				Unit G,10/F,Phase 2,Yip Fat IND
+				    73-75
+				HK
+
+78-C4-AB   (hex)		Shenzhen Runsil Technology Co.,Ltd
+78C4AB     (base 16)		Shenzhen Runsil Technology Co.,Ltd
+				4/F., Yuhua Building A, Yangmen Industrial Park, 
+				Shenzhen  GuangDong  518055
+				CN
+
+B0-A8-6E   (hex)		Juniper Networks
+B0A86E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+80-2A-FA   (hex)		Germaneers GmbH
+802AFA     (base 16)		Germaneers GmbH
+				Dr.-Kurt-Schumacher-Ring 3
+				Wettstetten  Bayern  85139
+				DE
+
+18-42-1D   (hex)		Private
+18421D     (base 16)		Private
+
+28-C9-14   (hex)		Taimag Corporation
+28C914     (base 16)		Taimag Corporation
+				NO. 1, West 2nd St. N.E.P.Z 
+				Kaohsiung    811
+				TW
+
+74-93-A4   (hex)		Zebra Technologies Corp.
+7493A4     (base 16)		Zebra Technologies Corp.
+				20314 Seneca Meadows Parkway
+				Germantown  Maryland  21771
+				US
+
+E4-71-85   (hex)		Securifi Ltd
+E47185     (base 16)		Securifi Ltd
+				16F-3, #482 Zhongxiao E Rd, Sec 5
+				Taipei    11083
+				TW
+
+08-0C-C9   (hex)		Mission Technology Group, dba Magma
+080CC9     (base 16)		Mission Technology Group, dba Magma
+				9918 Via Pasar
+				San Diego  CA  92126
+				US
+
+64-0E-94   (hex)		Pluribus Networks, Inc.
+640E94     (base 16)		Pluribus Networks, Inc.
+				1808 Embarcadero Rd Suite B
+				Palo Alto  CA  94303
+				US
+
+0C-B4-EF   (hex)		Digience Co.,Ltd.
+0CB4EF     (base 16)		Digience Co.,Ltd.
+				204 Building for Growth, Gumi Electronics&Information Technology Research Institute, 17 Cheomdangieop-1ro, 
+				Gumi  Gyeongbuk  
+				KR
+
+14-6A-0B   (hex)		Cypress Electronics Limited
+146A0B     (base 16)		Cypress Electronics Limited
+				11/F., Block G, East Sun Industrial Centre, 16 Shing Yip Street,
+				Hong Kong  nil  nil
+				HK
+
+5C-EE-79   (hex)		Global Digitech Co LTD
+5CEE79     (base 16)		Global Digitech Co LTD
+				1F., No.25, Aly.56, Ln. 245, Sec. 4, Bade Rd.,
+				Taipei  Taiwan  105
+				TW
+
+4C-AA-16   (hex)		AzureWave Technologies (Shanghai) Inc.
+4CAA16     (base 16)		AzureWave Technologies (Shanghai) Inc.
+				No.8 Lane 66, Chenbao Road, Malu Town Jiading District
+				Shanghai    201801
+				CN
+
+AC-40-EA   (hex)		C&T Solution Inc. 
+AC40EA     (base 16)		C&T Solution Inc. 
+				12F-1, No.700, Zhongzheng Rd., Zhonghe Dist.
+				New Taipei City  Taiwan   235
+				TW
+
+00-2A-AF   (hex)		LARsys-Automation GmbH
+002AAF     (base 16)		LARsys-Automation GmbH
+				Sinzinger Str. 3
+				Hochburg-Ach    5122
+				AT
+
+1C-E1-65   (hex)		Marshal Corporation
+1CE165     (base 16)		Marshal Corporation
+				Field Three Sotokanda Bldg.
+				5-3-6, Sotokanda, Chiyodaku  Tokyo  101-0021
+				JP
+
+40-16-FA   (hex)		EKM Metering
+4016FA     (base 16)		EKM Metering
+				363 Berkeley Way
+				Santa Cruz  CA  95062
+				US
+
+0C-13-0B   (hex)		Uniqoteq Ltd.
+0C130B     (base 16)		Uniqoteq Ltd.
+				Lemminkaisenkatu 14-18 A
+				Turku    20520 
+				FI
+
+2C-54-2D   (hex)		Cisco Systems, Inc
+2C542D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-14-01   (hex)		Hitron Technologies. Inc
+BC1401     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+94-CA-0F   (hex)		Honeywell Analytics
+94CA0F     (base 16)		Honeywell Analytics
+				2840 2nd Ave SE
+				Calgary  Alberta  T2A7X9
+				CA
+
+78-25-44   (hex)		Omnima Limited
+782544     (base 16)		Omnima Limited
+				Oxford Science Park
+				Oxford  Oxfordshire  OX4 4GP
+				GB
+
+A4-18-75   (hex)		Cisco Systems, Inc
+A41875     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-AE-9C   (hex)		Shanghai TYD Elecronic Technology Co. Ltd
+C8AE9C     (base 16)		Shanghai TYD Elecronic Technology Co. Ltd
+				21F, BLKB, NO.391 GuiPing Rd, 
+				  Shanghai  200233
+				CN
+
+AC-3F-A4   (hex)		TAIYO YUDEN CO.,LTD
+AC3FA4     (base 16)		TAIYO YUDEN CO.,LTD
+				8-1, Sakae-cho
+				Takasaki-shi  Gunma  370-8522
+				JP
+
+6C-AE-8B   (hex)		IBM Corporation
+6CAE8B     (base 16)		IBM Corporation
+				4400 North First Street
+				San Jose  CA  95134
+				US
+
+40-AC-8D   (hex)		Data Management, Inc.
+40AC8D     (base 16)		Data Management, Inc.
+				3322 Loop 306
+				San Angelo  Texas  76904
+				US
+
+80-CE-B1   (hex)		Theissen Training Systems GmbH
+80CEB1     (base 16)		Theissen Training Systems GmbH
+				Schuchardstrasse 3
+				Duesseldorf  NRW  40595
+				DE
+
+FC-2A-54   (hex)		Connected Data, Inc.
+FC2A54     (base 16)		Connected Data, Inc.
+				2905 Stender Way
+				Santa Clara  CA  95054
+				US
+
+04-5C-06   (hex)		Zmodo Technology Corporation
+045C06     (base 16)		Zmodo Technology Corporation
+				1401 Interstate Dr
+				Champaign  IL  61822
+				US
+
+74-7B-7A   (hex)		ETH Inc.
+747B7A     (base 16)		ETH Inc.
+				#202 Mazium BLG, 545-6, Dangjung-dong,
+				Gunpo-si  Gyeonggi-do  435-833
+				KR
+
+48-EA-63   (hex)		Zhejiang Uniview Technologies Co., Ltd.
+48EA63     (base 16)		Zhejiang Uniview Technologies Co., Ltd.
+				Eastcom Building C,Eastcom Avenue
+				Hangzhou  Zhejiang  310053
+				CN
+
+E8-8D-F5   (hex)		ZNYX Networks, Inc.
+E88DF5     (base 16)		ZNYX Networks, Inc.
+				48421 Milmont Drive
+				Fremont  CA  94538
+				US
+
+90-F7-2F   (hex)		Phillips Machine & Welding Co., Inc. 
+90F72F     (base 16)		Phillips Machine & Welding Co., Inc. 
+				16125 E. Gale Ave.
+				Industry  CA  91745
+				US
+
+D0-57-85   (hex)		Pantech Co., Ltd.
+D05785     (base 16)		Pantech Co., Ltd.
+				110-1 Ongjeong-Ri, Tongjin-Eup
+				Gimpo-Si  Gyounggi-Do  415-865
+				KR
+
+40-8B-07   (hex)		Actiontec Electronics, Inc
+408B07     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+28-41-21   (hex)		OptiSense Network, LLC
+284121     (base 16)		OptiSense Network, LLC
+				1308 10th Street
+				Bridgeport  TX  76426
+				US
+
+38-45-8C   (hex)		MyCloud Technology corporation
+38458C     (base 16)		MyCloud Technology corporation
+				Room 705£¬Building F, Jiahua Building£¬
+				Beijing    100085
+				CN
+
+10-E4-AF   (hex)		APR, LLC
+10E4AF     (base 16)		APR, LLC
+				4800 US HWY 280 West
+				Opelika  AL  36801
+				US
+
+F4-EA-67   (hex)		Cisco Systems, Inc
+F4EA67     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-2D-48   (hex)		bct electronic GesmbH
+2C2D48     (base 16)		bct electronic GesmbH
+				Saalachstraße 86a
+				Salzburg    5020
+				AT
+
+28-BA-18   (hex)		NextNav, LLC
+28BA18     (base 16)		NextNav, LLC
+				484 Oakmead Parkway
+				Sunnyvale  CA  94085
+				US
+
+AC-3D-75   (hex)		HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.
+AC3D75     (base 16)		HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.
+				FLOOR12B,BUILDING E,PARADISE SOFTWARE PARK,NO.3 XIDOUMEN ROAD,
+				HANGZHOU  ZHEJIANG  310012
+				CN
+
+A0-90-DE   (hex)		VEEDIMS,LLC
+A090DE     (base 16)		VEEDIMS,LLC
+				49 N. Federal Highway #397
+				Pompano Beach  Florida  33062
+				US
+
+64-2D-B7   (hex)		SEUNGIL ELECTRONICS
+642DB7     (base 16)		SEUNGIL ELECTRONICS
+				#16-8, Dodang-dong
+				Buchon  Gyuonggi-do  420-801
+				KR
+
+00-2A-6A   (hex)		Cisco Systems, Inc
+002A6A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-36-E1   (hex)		Abilis Systems SARL
+F436E1     (base 16)		Abilis Systems SARL
+				3, chemin Pré Fleuri
+				Plan-Les-Ouates  Geneva  1228
+				CH
+
+78-1C-5A   (hex)		SHARP Corporation
+781C5A     (base 16)		SHARP Corporation
+				22-22,Nagaike-cho
+				Osaka city  Osaka prefecture  545-8522
+				JP
+
+E8-0C-75   (hex)		Syncbak, Inc.
+E80C75     (base 16)		Syncbak, Inc.
+				5 Research Center
+				Marion  IA  52302
+				US
+
+80-0A-06   (hex)		COMTEC co.,ltd
+800A06     (base 16)		COMTEC co.,ltd
+				60 shimoishida,azabu-cho,
+				Miyoshi-shi  Aichi-ken  470-0206
+				JP
+
+60-8C-2B   (hex)		Hanson Technology
+608C2B     (base 16)		Hanson Technology
+				Room 1503, Zhao Jia Bang Road
+				Shanghai    200030
+				CN
+
+94-00-70   (hex)		Nokia Corporation
+940070     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+BC-2C-55   (hex)		Bear Flag Design, Inc.
+BC2C55     (base 16)		Bear Flag Design, Inc.
+				1 Thayer Road
+				Santa Cruz  CA  95060
+				US
+
+0C-75-23   (hex)		BEIJING GEHUA CATV NETWORK CO.,LTD
+0C7523     (base 16)		BEIJING GEHUA CATV NETWORK CO.,LTD
+				No.35,N.Huayuan RD.,Haidian District
+				BEIJING    100083
+				CN
+
+04-F0-21   (hex)		Compex Systems Pte Ltd
+04F021     (base 16)		Compex Systems Pte Ltd
+				135 Joo Seng Road, 
+				    368363
+				SG
+
+28-18-FD   (hex)		Aditya Infotech Ltd.
+2818FD     (base 16)		Aditya Infotech Ltd.
+				Khemka Square, A-12, Sector-4,
+				Noida  Uttar Pradesh  201301
+				IN
+
+D8-B9-0E   (hex)		Triple Domain Vision Co.,Ltd.
+D8B90E     (base 16)		Triple Domain Vision Co.,Ltd.
+				No.9, Aly. 1, Ln. 585, Sec.3, Fulin Rd.,
+				Hsinchu Conuty    307
+				TW
+
+34-2F-6E   (hex)		Anywire corporation
+342F6E     (base 16)		Anywire corporation
+				1 Zusyo, Baba
+				Nagaokakyo  Kyoto pref.  617-8550
+				JP
+
+CC-EE-D9   (hex)		VAHLE Automation GmbH
+CCEED9     (base 16)		VAHLE Automation GmbH
+				Egerbach 12a
+				Kufstein   Schwoich Tirol  6334
+				AT
+
+00-5C-B1   (hex)		Gospell DIGITAL TECHNOLOGY CO., LTD
+005CB1     (base 16)		Gospell DIGITAL TECHNOLOGY CO., LTD
+				Block F10-F13Â¡Â¢F518 Idea land Â¡Â¢Bao Yuan Road
+				Shenzhen  Guangdong  518102
+				CN
+
+B0-8E-1A   (hex)		URadio Systems Co., Ltd
+B08E1A     (base 16)		URadio Systems Co., Ltd
+				Phase II D202-2, 1355 JinJiHu Blvd
+				Suzhou  Jiangsu  215021
+				CN
+
+D8-E9-52   (hex)		KEOPSYS
+D8E952     (base 16)		KEOPSYS
+				21 RUE LOUIS DE BROGLIE
+				LANNION  BRITANY  22300
+				FR
+
+BC-A4-E1   (hex)		Nabto
+BCA4E1     (base 16)		Nabto
+				Aabogade 15
+				Aarhus  Jutland  8200
+				DK
+
+90-8F-CF   (hex)		UNO System Co., Ltd
+908FCF     (base 16)		UNO System Co., Ltd
+				#402 Kolon Science Valley °., 187-10, Guro-dong, Guro-gu
+				Seoul    152-848
+				KR
+
+40-E7-93   (hex)		Shenzhen Siviton Technology Co.,Ltd
+40E793     (base 16)		Shenzhen Siviton Technology Co.,Ltd
+				4F,Block6,Coolpad Business Centre,North of Keyuan Road,Hi-technology Zone,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+00-08-31   (hex)		Cisco Systems, Inc
+000831     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-D0-9B   (hex)		MobilMAX Technology Inc.
+34D09B     (base 16)		MobilMAX Technology Inc.
+				2F-5, No.28, Tai-Yuan St.
+				Chupei City, Hsinchu Country    302
+				TW
+
+F0-00-7F   (hex)		Janz - Contadores de Energia, SA
+F0007F     (base 16)		Janz - Contadores de Energia, SA
+				Avenida Infante D. Henrique
+				Lisbon    1800-223
+				PT
+
+30-B3-A2   (hex)		Shenzhen Heguang Measurement & Control Technology Co.,Ltd
+30B3A2     (base 16)		Shenzhen Heguang Measurement & Control Technology Co.,Ltd
+				3/F, Tower A, Xiangnian Plaza, 6060 Qiaoxiang Road, 
+				Shenzhen  Guangdong  518053
+				CN
+
+50-60-28   (hex)		Xirrus Inc.
+506028     (base 16)		Xirrus Inc.
+				2101 CORPORATE CENTER DR
+				Thousand Oaks  CALIFORNIA  91320
+				US
+
+00-91-FA   (hex)		Synapse Product Development
+0091FA     (base 16)		Synapse Product Development
+				1511 6th Ave
+				Seattle  WA  98101
+				US
+
+A0-5A-A4   (hex)		Grand Products Nevada, Inc.
+A05AA4     (base 16)		Grand Products Nevada, Inc.
+				751 Pilot Rd.
+				Las Vegas  Nevada  89119
+				US
+
+F0-EE-BB   (hex)		VIPAR GmbH
+F0EEBB     (base 16)		VIPAR GmbH
+				Lichtenbergstrasse 8
+				Garching bei Muenchen  Bavaria  85748
+				DE
+
+6C-E9-07   (hex)		Nokia Corporation
+6CE907     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+E4-FA-1D   (hex)		PAD Peripheral Advanced Design Inc.
+E4FA1D     (base 16)		PAD Peripheral Advanced Design Inc.
+				1400 Hocquart
+				Saint-Bruno  QC  J3V 6E1
+				CA
+
+1C-5C-55   (hex)		PRIMA Cinema, Inc
+1C5C55     (base 16)		PRIMA Cinema, Inc
+				1903 Wright Place, Suite 320
+				Carlsbad  CA  92008
+				US
+
+34-BA-9A   (hex)		Asiatelco Technologies Co.
+34BA9A     (base 16)		Asiatelco Technologies Co.
+				301,#8 Building,#289 Bisheng Road
+				Shanghai    201204
+				CN
+
+50-64-41   (hex)		Greenlee
+506441     (base 16)		Greenlee
+				219 S Main St
+				Dallas  TX  76104
+				US
+
+9C-1F-DD   (hex)		Accupix Inc.
+9C1FDD     (base 16)		Accupix Inc.
+				3F Gaeyang BLDG, 548-1, 
+				Anyang  Kyeonggi-Do  430-730
+				KR
+
+7C-DD-11   (hex)		Chongqing MAS SCI&TECH.Co.,Ltd
+7CDD11     (base 16)		Chongqing MAS SCI&TECH.Co.,Ltd
+				 6th Floor, Zone C2,Hi-tech Venture Park, No.105 Erlang Venture Road
+				Chongqing City    400039
+				CN
+
+B8-FD-32   (hex)		Zhejiang ROICX Microelectronics
+B8FD32     (base 16)		Zhejiang ROICX Microelectronics
+				22 Floor, 1888 Jianghui Road, Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+70-EE-50   (hex)		Netatmo
+70EE50     (base 16)		Netatmo
+				17 route de la reine
+				Boulogne-Billancourt    92100
+				FR
+
+98-4A-47   (hex)		CHG Hospital Beds
+984A47     (base 16)		CHG Hospital Beds
+				1020 Adelaide St S
+				London  ON  N6E 1R6
+				CA
+
+14-49-78   (hex)		Digital Control Incorporated
+144978     (base 16)		Digital Control Incorporated
+				19625 62nd Ave S
+				Kent  WA  98032
+				US
+
+2C-10-C1   (hex)		Nintendo Co., Ltd.
+2C10C1     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+8C-D1-7B   (hex)		CG Mobile
+8CD17B     (base 16)		CG Mobile
+				3F Caohejing Software Building, No.461 Hongcao Rd.,XuHui District
+				Shanghai    200233
+				CN
+
+50-22-67   (hex)		PixeLINK
+502267     (base 16)		PixeLINK
+				3030 Conroy Road
+				Ottawa  Ontario  K1G 6C2
+				CA
+
+3C-6A-7D   (hex)		Niigata Power Systems Co., Ltd.
+3C6A7D     (base 16)		Niigata Power Systems Co., Ltd.
+				7-26,Tatsumi 3-Chome
+				Koto-ku  TOKYO  135-0053
+				JP
+
+3C-70-59   (hex)		MakerBot Industries
+3C7059     (base 16)		MakerBot Industries
+				87 3rd Avenue
+				Brooklyn  NY  11217
+				US
+
+50-26-90   (hex)		FUJITSU LIMITED
+502690     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+24-B6-57   (hex)		Cisco Systems, Inc
+24B657     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-AF-40   (hex)		marco Systemanalyse und Entwicklung GmbH
+C8AF40     (base 16)		marco Systemanalyse und Entwicklung GmbH
+				Hans-Böckler-Straße 2
+				Dachau  Bavaria  85221
+				DE
+
+40-98-4C   (hex)		Casacom Solutions AG
+40984C     (base 16)		Casacom Solutions AG
+				Badenerstarsse 551
+				Zuerich    8046
+				CH
+
+5C-18-B5   (hex)		Talon Communications
+5C18B5     (base 16)		Talon Communications
+				10636 Scripps Summit Ct.
+				San Diego  CA  92131
+				US
+
+64-E1-61   (hex)		DEP Corp.
+64E161     (base 16)		DEP Corp.
+				Nishi-shinjuku 6-12-7
+				Shinjuku  Tokyo  160-0023
+				JP
+
+88-23-FE   (hex)		TTTech Computertechnik AG
+8823FE     (base 16)		TTTech Computertechnik AG
+				Schoenbrunnerstrasse 7
+				Vienna    1040
+				AT
+
+B8-9A-ED   (hex)		OceanServer Technology, Inc
+B89AED     (base 16)		OceanServer Technology, Inc
+				151 Martine St
+				Fall River  MA  02723
+				US
+
+C8-7D-77   (hex)		Shenzhen Kingtech Communication Equipment Co.,Ltd
+C87D77     (base 16)		Shenzhen Kingtech Communication Equipment Co.,Ltd
+				Floor3.Building A,NO.3,Road 1 of shangxue Dengxinkeng Industry Park,Bantian Street,
+				Shenzhen City  Guangdong  518112
+				CN
+
+94-AE-61   (hex)		Alcatel Lucent
+94AE61     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+5C-CE-AD   (hex)		CDYNE Corporation
+5CCEAD     (base 16)		CDYNE Corporation
+				505 Independence Pkwy Ste 300
+				Chesapeake  VA  23320
+				US
+
+AC-54-EC   (hex)		IEEE P1823 Standards Working Group
+AC54EC     (base 16)		IEEE P1823 Standards Working Group
+				445 Hoes Lane
+				Piscataway  NJ  08854
+				US
+
+70-97-56   (hex)		Happyelectronics Co.,Ltd
+709756     (base 16)		Happyelectronics Co.,Ltd
+				#A-805, Bundang Technopark,
+				Seongnam-Si    463-816
+				KR
+
+B8-20-E7   (hex)		Guangzhou Horizontal Information & Network Integration Co. Ltd
+B820E7     (base 16)		Guangzhou Horizontal Information & Network Integration Co. Ltd
+				Floor 10¬Golden Star Building¬Wushan Hanjing Road¬Tianhe District¬Guangzhou City
+				Guangzhou  Guangdong Province  510630
+				CN
+
+00-CD-90   (hex)		MAS Elektronik AG
+00CD90     (base 16)		MAS Elektronik AG
+				Pollhornbogen 19
+				Hamburg    21107
+				DE
+
+7C-6B-52   (hex)		Tigaro Wireless
+7C6B52     (base 16)		Tigaro Wireless
+				Shen A'ari 7
+				Even Yehuda    40500
+				IL
+
+00-64-A6   (hex)		Maquet CardioVascular
+0064A6     (base 16)		Maquet CardioVascular
+				1300 MacArthur Blvd
+				Mahwah  NJ  07430
+				US
+
+98-8B-AD   (hex)		Corintech Ltd.
+988BAD     (base 16)		Corintech Ltd.
+				Ashford Mill
+				Fordingbridge  Hampshire  SP6 1DZ
+				GB
+
+D4-4B-5E   (hex)		TAIYO YUDEN CO., LTD.
+D44B5E     (base 16)		TAIYO YUDEN CO., LTD.
+				8-1, Sakae-cho
+				Takasaki-shi  Gunma  370-8522
+				JP
+
+64-0E-36   (hex)		TAZTAG
+640E36     (base 16)		TAZTAG
+				Cicea 1
+				Bruz    35170
+				FR
+
+94-1D-1C   (hex)		TLab West Systems AB
+941D1C     (base 16)		TLab West Systems AB
+				Ebbe Lieberathsgatan 23B
+				Gothenburg    41265
+				SE
+
+E4-55-EA   (hex)		Dedicated Computing
+E455EA     (base 16)		Dedicated Computing
+				N26 W23880 Commerce Circle
+				Waukesha  Wisconsin  53188
+				US
+
+B0-5C-E5   (hex)		Nokia Corporation
+B05CE5     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+34-82-DE   (hex)		Kiio Inc
+3482DE     (base 16)		Kiio Inc
+				404 Holtzman Rd
+				Madison  WI  53713
+				US
+
+4C-5F-D2   (hex)		Alcatel-Lucent
+4C5FD2     (base 16)		Alcatel-Lucent
+				777 East Middlefield Road
+				Mountain View  CA  94043
+				US
+
+28-C7-18   (hex)		Altierre
+28C718     (base 16)		Altierre
+				1980 Concourse Drive
+				San Jose  United States  95131
+				US
+
+7C-4C-58   (hex)		Scale Computing, Inc.
+7C4C58     (base 16)		Scale Computing, Inc.
+				2121 El Camino Real
+				San Mateo  UNITED STATES  94403
+				US
+
+10-13-EE   (hex)		Justec International Technology INC.
+1013EE     (base 16)		Justec International Technology INC.
+				7F-2 No 113 Zihyou Road
+				Hsinchu City    30041
+				TW
+
+8C-27-1D   (hex)		QuantHouse
+8C271D     (base 16)		QuantHouse
+				52 Rue de la Victoire
+				Paris    75009
+				FR
+
+38-60-77   (hex)		PEGATRON CORPORATION
+386077     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+70-81-05   (hex)		Cisco Systems, Inc
+708105     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-ED-1A   (hex)		vastriver Technology Co., Ltd
+E0ED1A     (base 16)		vastriver Technology Co., Ltd
+				A-6A Keshi Building,No.28,Xinxi Road,Haidian,
+				Beijing    100085
+				CN
+
+D4-F6-3F   (hex)		IEA S.R.L.
+D4F63F     (base 16)		IEA S.R.L.
+				Eva Peron 4468
+				Rosario  Santa Fe  S2002LBQ 
+				AR
+
+58-B0-D4   (hex)		ZuniData Systems Inc.
+58B0D4     (base 16)		ZuniData Systems Inc.
+				4F-7,  No.65,  Gaotia 7th Rd,  Zhubei City
+				Hsinchu    302
+				TW
+
+64-55-7F   (hex)		NSFOCUS Information Technology Co., Ltd.
+64557F     (base 16)		NSFOCUS Information Technology Co., Ltd.
+				3/F,Ether Building, No.4 Beiwa Rd.,Haidian District
+				Beijing    100089
+				CN
+
+00-08-2F   (hex)		Cisco Systems, Inc
+00082F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-C7-D1   (hex)		SHARP Corporation
+9CC7D1     (base 16)		SHARP Corporation
+				22-22,Nagaike-cho
+				Osaka city  Osaka prefecture  545-8522
+				JP
+
+14-90-90   (hex)		KongTop industrial(shen zhen)CO.,LTD
+149090     (base 16)		KongTop industrial(shen zhen)CO.,LTD
+				xinwuyuan,gushu,Xixiang,Baoan,
+				Shenzhen  Guangdong  518000
+				CN
+
+38-DE-60   (hex)		Mohlenhoff GmbH
+38DE60     (base 16)		Mohlenhoff GmbH
+				Museumstraße 54a
+				Salzgitter  Niedersachsen  38229
+				DE
+
+28-39-E7   (hex)		Preceno Technology Pte.Ltd.
+2839E7     (base 16)		Preceno Technology Pte.Ltd.
+				11F, No.207-2, Sec. 3, Beixin Rd., Xindian Dist.
+				New Taipei City    23143
+				TW
+
+68-5E-6B   (hex)		PowerRay Co., Ltd.
+685E6B     (base 16)		PowerRay Co., Ltd.
+				7F-1, No 190, Sec 2, Chung Hsing Road, Sindian District
+				New Taipei City    231
+				TW
+
+20-C8-B3   (hex)		SHENZHEN BUL-TECH CO.,LTD.
+20C8B3     (base 16)		SHENZHEN BUL-TECH CO.,LTD.
+				Area C,4/F,NO.59,Longjing 2nd Road,
+				SHENZHEN   GuangDong  518101
+				CN
+
+F8-E7-B5   (hex)		µTech Tecnologia LTDA
+F8E7B5     (base 16)		µTech Tecnologia LTDA
+				Rua Lauro Linhares, 598
+				Florianopolis  Santa Catarina  88036-200
+				BR
+
+D4-CE-B8   (hex)		Enatel LTD
+D4CEB8     (base 16)		Enatel LTD
+				66 Treffers Road
+				Christchurch  Canterbury  8042
+				NZ
+
+80-7A-7F   (hex)		ABB Genway Xiamen Electrical Equipment CO., LTD
+807A7F     (base 16)		ABB Genway Xiamen Electrical Equipment CO., LTD
+				7F,No.23 Wanghai Road,Software Park 2, Lvling Road, 
+				Xiamen  Fujian Province  361008
+				CN
+
+24-DA-B6   (hex)		Sistemas de Gestión Energética S.A. de C.V
+24DAB6     (base 16)		Sistemas de Gestión Energética S.A. de C.V
+				Calzada de los Fresnos 70-A
+				Zapopan  Jalisoc  45010
+				MX
+
+B0-7D-62   (hex)		Dipl.-Ing. H. Horstmann GmbH
+B07D62     (base 16)		Dipl.-Ing. H. Horstmann GmbH
+				Humboldtstraße 2
+				Heiligenhaus    42579
+				DE
+
+B8-F5-E7   (hex)		WayTools, LLC
+B8F5E7     (base 16)		WayTools, LLC
+				401 Wilshire Blvd.
+				Santa Monica  CA  90401
+				US
+
+B8-19-99   (hex)		Nesys
+B81999     (base 16)		Nesys
+				Energeticheskaya, 1
+				Moscow    111116
+				RU
+
+34-25-5D   (hex)		Shenzhen Loadcom Technology Co.,Ltd
+34255D     (base 16)		Shenzhen Loadcom Technology Co.,Ltd
+				Yuehai Building A-13CD,Nanhai Road,Nanshan Area
+				Shenzhen  Guangdong  518054
+				CN
+
+4C-A7-4B   (hex)		Alcatel Lucent
+4CA74B     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+D0-31-10   (hex)		Ingenic Semiconductor Co.,Ltd
+D03110     (base 16)		Ingenic Semiconductor Co.,Ltd
+				Room 108,Building A,Information Center Zhongguancun Software Park 8 Dongbeiwang West Road,Haidain District
+				Beijing    100193
+				CN
+
+1C-E1-92   (hex)		Qisda Corporation
+1CE192     (base 16)		Qisda Corporation
+				157 Shan-Ying Road
+				Gueishan  Taoyuan  333
+				TW
+
+70-6F-81   (hex)		Private
+706F81     (base 16)		Private
+
+FC-00-12   (hex)		Toshiba Samsung Storage Technolgoy Korea Corporation 
+FC0012     (base 16)		Toshiba Samsung Storage Technolgoy Korea Corporation 
+				14 Floor, Bldg. No. 102, Digital Empire2, 486, Sin-dong, Yeongtong-gu, Suwon-si, 
+				Su-won   Gyeonggi   443-734 
+				KR
+
+18-14-20   (hex)		TEB SAS
+181420     (base 16)		TEB SAS
+				RD294 - Corpeau
+				Meursault  Burgundy  21190
+				FR
+
+AC-81-F3   (hex)		Nokia Corporation
+AC81F3     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+30-68-8C   (hex)		Reach Technology Inc.
+30688C     (base 16)		Reach Technology Inc.
+				4575 Cushing Parkway
+				Fremont  California  94538
+				US
+
+10-EE-D9   (hex)		Canoga Perkins Corporation
+10EED9     (base 16)		Canoga Perkins Corporation
+				20600 Prairie Street
+				Chatsworth  CA  91311
+				US
+
+94-DE-0E   (hex)		SmartOptics AS
+94DE0E     (base 16)		SmartOptics AS
+				Stalfjaera 9
+				Oslo    N-0975
+				NO
+
+C0-29-F3   (hex)		XySystem
+C029F3     (base 16)		XySystem
+				#1304 Daerung Post Tower 5
+				Seoul    153-801
+				KR
+
+AC-4A-FE   (hex)		Hisense Broadband Multimedia Technology Co.,Ltd.
+AC4AFE     (base 16)		Hisense Broadband Multimedia Technology Co.,Ltd.
+				No.11 Jiangxi Road,Shinan District
+				Qingdao City  Shandong Province  266071
+				CN
+
+54-F5-B6   (hex)		ORIENTAL PACIFIC INTERNATIONAL LIMITED
+54F5B6     (base 16)		ORIENTAL PACIFIC INTERNATIONAL LIMITED
+				5 ARGUS PLACE
+				NORTH SHORE CITY  AUCKLAND  0627
+				NZ
+
+90-34-2B   (hex)		Gatekeeper Systems, Inc.
+90342B     (base 16)		Gatekeeper Systems, Inc.
+				8 Studebaker
+				Irvine  CA  92618
+				US
+
+8C-B8-2C   (hex)		IPitomy Communications
+8CB82C     (base 16)		IPitomy Communications
+				1940 Northgate Boulevard
+				Sarasota  Florida  34234
+				US
+
+80-7D-E3   (hex)		Chongqing Sichuan Instrument Microcircuit Co.LTD.
+807DE3     (base 16)		Chongqing Sichuan Instrument Microcircuit Co.LTD.
+				Jinhua Road No.309, Beibei,
+				Chongqing    400700
+				CN
+
+DC-17-5A   (hex)		Hitachi High-Technologies Corporation
+DC175A     (base 16)		Hitachi High-Technologies Corporation
+				794, Higashitoyoi,
+				Kudamatsu City,  Yamaguchi Pref.,  744-0002,
+				JP
+
+C8-A1-BA   (hex)		Neul Ltd
+C8A1BA     (base 16)		Neul Ltd
+				Suite 42 Innovation Centre
+				Cambridge  Cambs  CB4 0EY
+				GB
+
+C4-3A-9F   (hex)		Siconix Inc.
+C43A9F     (base 16)		Siconix Inc.
+				#28, 2333 18th Ave NE
+				Calgary  Alberta  T2E 8T6
+				CA
+
+68-6E-23   (hex)		Wi3 Inc.
+686E23     (base 16)		Wi3 Inc.
+				P.O. Box 1123
+				Pittsford  NY  14534
+				US
+
+DC-F0-5D   (hex)		Letta Teknoloji
+DCF05D     (base 16)		Letta Teknoloji
+				TUBITAK Teknoloji Gelistirme Bolgesi
+				KOCAELI    41455
+				TR
+
+84-8F-69   (hex)		Dell Inc.
+848F69     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+3C-09-6D   (hex)		Powerhouse Dynamics
+3C096D     (base 16)		Powerhouse Dynamics
+				1 Bridge Street
+				Newton  MA  02458
+				US
+
+90-0D-66   (hex)		Digimore Electronics Co., Ltd
+900D66     (base 16)		Digimore Electronics Co., Ltd
+				10 FL., No. 61, Yan-Ping South Road
+				Taipei    100
+				TW
+
+0C-92-4E   (hex)		Rice Lake Weighing Systems
+0C924E     (base 16)		Rice Lake Weighing Systems
+				230 West Coleman St
+				Rice Lake  WI  54868
+				US
+
+F4-94-61   (hex)		NexGen Storage
+F49461     (base 16)		NexGen Storage
+				400 Centennial Blvd.
+				Louisville  CO  80027
+				US
+
+B8-CD-A7   (hex)		Maxeler Technologies Ltd.
+B8CDA7     (base 16)		Maxeler Technologies Ltd.
+				1 Down Place
+				London  UK  W6 9JH
+				GB
+
+54-35-DF   (hex)		Symeo GmbH
+5435DF     (base 16)		Symeo GmbH
+				Prof.-Messerschmitt-Str. 3
+				Neubiberg  Bavaria  85579
+				DE
+
+F4-3D-80   (hex)		FAG Industrial Services GmbH
+F43D80     (base 16)		FAG Industrial Services GmbH
+				Kaiserstrasse 100
+				Herzogenrath  NRW  52134
+				DE
+
+F0-DB-30   (hex)		Yottabyte
+F0DB30     (base 16)		Yottabyte
+				1750 S. Telegraph Road
+				Bloomfield Twp.  MI  48302
+				US
+
+9C-31-B6   (hex)		Kulite Semiconductor Products Inc
+9C31B6     (base 16)		Kulite Semiconductor Products Inc
+				1 Willow Tree Rd
+				Leonia  NJ  07605
+				US
+
+A4-B3-6A   (hex)		JSC SDO Chromatec
+A4B36A     (base 16)		JSC SDO Chromatec
+				94, Stroiteley street
+				Yoshkar-Ola  Mari El republic  424000
+				RU
+
+E4-DD-79   (hex)		En-Vision America, Inc.
+E4DD79     (base 16)		En-Vision America, Inc.
+				1845 Hovey Ave
+				Normal  IL  61761
+				US
+
+E8-CC-32   (hex)		Micronet  LTD
+E8CC32     (base 16)		Micronet  LTD
+				Hametzuda 27
+				Azor    58001
+				IL
+
+D4-3A-E9   (hex)		DONGGUAN ipt INDUSTRIAL CO., LTD
+D43AE9     (base 16)		DONGGUAN ipt INDUSTRIAL CO., LTD
+				No.66-1.Ist New Area, Nanshe Dist., Chigang,Humen,
+				Dongguan  Guangdong  52390
+				CN
+
+8C-5C-A1   (hex)		d-broad,INC
+8C5CA1     (base 16)		d-broad,INC
+				3-17-5 ShinYokohama Kouhoku-Ku
+				Yokohama  Kanagawa  222-0033
+				JP
+
+18-F6-50   (hex)		Multimedia Pacific Limited
+18F650     (base 16)		Multimedia Pacific Limited
+				1 Matheson Street, Shell Tower 29F/12
+				    000000
+				HK
+
+68-84-70   (hex)		eSSys Co.,Ltd
+688470     (base 16)		eSSys Co.,Ltd
+				Daerung Post Tower 5 15F, 60-3
+				Seoul  Geumcheon-gu  153-702
+				KR
+
+48-DC-FB   (hex)		Nokia Corporation
+48DCFB     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+20-B7-C0   (hex)		OMICRON electronics GmbH
+20B7C0     (base 16)		OMICRON electronics GmbH
+				Oberes Ried 1
+				Klaus    6833
+				AT
+
+80-58-C5   (hex)		NovaTec Kommunikationstechnik GmbH
+8058C5     (base 16)		NovaTec Kommunikationstechnik GmbH
+				Technologiepark 9
+				Paderborn  NRW  33100
+				DE
+
+B8-C7-16   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+B8C716     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+D4-2C-3D   (hex)		Sky Light Digital Limited
+D42C3D     (base 16)		Sky Light Digital Limited
+				Rm. 1009 Kwong Sang Hong Centre, 151-153 Hoi Bun Road, Kwun Tong, Kowloon, 
+				Hong Kong    999077
+				CN
+
+A4-5A-1C   (hex)		smart-electronic GmbH
+A45A1C     (base 16)		smart-electronic GmbH
+				Industriestrasse 29
+				St. Georgen  Baden-Württemberg  78122
+				DE
+
+80-64-59   (hex)		Nimbus Inc.
+806459     (base 16)		Nimbus Inc.
+				1359 Gwanpyeong-dong, Yuseong-gu
+				Daejeon    305-509
+				KR
+
+8C-89-A5   (hex)		Micro-Star INT'L CO., LTD
+8C89A5     (base 16)		Micro-Star INT'L CO., LTD
+				No.69, Lide st.
+				Taipei County    235
+				TW
+
+B4-A5-A9   (hex)		MODI GmbH
+B4A5A9     (base 16)		MODI GmbH
+				Kapellenweg 21
+				REICHSHOF-Sinspert    51580
+				DE
+
+C4-36-DA   (hex)		Rusteletech Ltd.
+C436DA     (base 16)		Rusteletech Ltd.
+				Ordzhonikidze Str. 11, Bldg. 40, Off. 15 
+				Moscow    115419
+				RU
+
+04-32-F4   (hex)		Partron
+0432F4     (base 16)		Partron
+				22-6, Seokwoo-dong
+				Hwaseong-si  Gyeonggi-do  445-170
+				KR
+
+1C-18-4A   (hex)		ShenZhen RicherLink Technologies Co.,LTD
+1C184A     (base 16)		ShenZhen RicherLink Technologies Co.,LTD
+				703,Building W1-A,High-Tech Industrial Park,KeJiNan 1st Road,NanShan,
+				ShenZhen  GuangDong  518057
+				CN
+
+0C-39-56   (hex)		Observator instruments
+0C3956     (base 16)		Observator instruments
+				Rietdekkerstraat 6
+				Ridderkerk  Zuid Holland  2984 BM
+				NL
+
+DC-A6-BD   (hex)		Beijing Lanbo Technology Co., Ltd.
+DCA6BD     (base 16)		Beijing Lanbo Technology Co., Ltd.
+				Room.301.Bidg.4NO.8 Shangdi West Road, Haidian  District,
+				Beijing City    100085
+				CN
+
+10-C5-86   (hex)		BIO SOUND LAB CO., LTD.
+10C586     (base 16)		BIO SOUND LAB CO., LTD.
+				Suite 311, 312 SKn Techno Park 
+				Seongnam-si  Gyeonggi-do,  462-721
+				KR
+
+10-76-8A   (hex)		EoCell
+10768A     (base 16)		EoCell
+				149 Beaconsfield Street
+				Silverwater  NSW  2128
+				AU
+
+F4-4E-FD   (hex)		Actions Semiconductor Co.,Ltd.(Cayman Islands)
+F44EFD     (base 16)		Actions Semiconductor Co.,Ltd.(Cayman Islands)
+				Po Box 309GT,Ugland House,South Church Street,
+				George Town  Grand Cayman  
+				KY
+
+24-B8-D2   (hex)		Opzoon Technology Co.,Ltd.
+24B8D2     (base 16)		Opzoon Technology Co.,Ltd.
+				11th floor, Tower BÂ£Â¬Yintai Center 2 Jianguomenwai St,.
+				Beijing  Asia  100022
+				CN
+
+A4-99-81   (hex)		FuJian Elite Power Tech CO.,LTD.
+A49981     (base 16)		FuJian Elite Power Tech CO.,LTD.
+				8th FloorÂ£Â¬56 GuanRi Road 
+				Xiamen  Fujian  361009
+				CN
+
+B8-3A-7B   (hex)		Worldplay (Canada) Inc.
+B83A7B     (base 16)		Worldplay (Canada) Inc.
+				803 - 24th Ave SE, Unit 200
+				Calgary  Alberta  T2G 1P5
+				CA
+
+14-07-E0   (hex)		Abrantix AG
+1407E0     (base 16)		Abrantix AG
+				Foerrlibuckstrasse 66
+				Zuerich  ZH  8005
+				CH
+
+DC-CF-94   (hex)		Beijing Rongcheng Hutong Technology Co., Ltd.
+DCCF94     (base 16)		Beijing Rongcheng Hutong Technology Co., Ltd.
+				Room 401A,Building No.4,Yard No.5,
+				  Beijing  100024
+				CN
+
+A4-DB-2E   (hex)		Kingspan Environmental Ltd
+A4DB2E     (base 16)		Kingspan Environmental Ltd
+				180 Gilford Road
+				Portadown  Armagh  BT63 5LF
+				GB
+
+C8-FE-30   (hex)		Bejing DAYO Mobile Communication Technology Ltd.
+C8FE30     (base 16)		Bejing DAYO Mobile Communication Technology Ltd.
+				Room 712, ULO Park Building No. 601E
+				Beijing    100102
+				CN
+
+E4-D7-1D   (hex)		Oraya Therapeutics
+E4D71D     (base 16)		Oraya Therapeutics
+				8000 Jarvis Avenue  Ste. 200
+				Newark  CA  94560
+				US
+
+24-C9-DE   (hex)		Genoray
+24C9DE     (base 16)		Genoray
+				#812 Byucksan Technopia 434-6 Sangdaewon 1-Dong
+				Seongnam-City  Gyeonggi-Do  462-716
+				KR
+
+54-05-5F   (hex)		Alcatel Lucent
+54055F     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+6C-5D-63   (hex)		ShenZhen Rapoo Technology Co., Ltd.
+6C5D63     (base 16)		ShenZhen Rapoo Technology Co., Ltd.
+				Block A1,B1,B2,1st second stage, 1st Industrial Park, 3rd Industrial Zone ,Fenghuang Fuyong, BaoAn 
+				ShenZhen    518103
+				CN
+
+94-16-73   (hex)		Point Core SARL
+941673     (base 16)		Point Core SARL
+				29/31 Rue du Bois Galon
+				FONTENAY SOUS BOIS  Ile de France  94120
+				FR
+
+5C-56-ED   (hex)		3pleplay Electronics Private Limited
+5C56ED     (base 16)		3pleplay Electronics Private Limited
+				Plot No 54, Eshwarapuri Colony
+				Hyderabad  Andhra Pradesh  500083
+				IN
+
+78-02-8F   (hex)		Adaptive Spectrum and Signal Alignment (ASSIA), Inc.
+78028F     (base 16)		Adaptive Spectrum and Signal Alignment (ASSIA), Inc.
+				333 Twin Dolphin Drive
+				Redwood City  CA  94065
+				US
+
+DC-16-A2   (hex)		Medtronic Diabetes
+DC16A2     (base 16)		Medtronic Diabetes
+				18000 Devonshire St
+				Northridge  CA  91325
+				US
+
+30-8C-FB   (hex)		Dropcam
+308CFB     (base 16)		Dropcam
+				160 Spear Street
+				San Francisco  CA  94105
+				US
+
+D0-EB-9E   (hex)		Seowoo Inc.
+D0EB9E     (base 16)		Seowoo Inc.
+				#B101 Seojung B/D, 590-9 Guui-dong, Gwangjin-gu,
+				Seoul    143-831
+				KR
+
+BC-CD-45   (hex)		VOISMART
+BCCD45     (base 16)		VOISMART
+				VIA BENIGNO CRESPI 12
+				MILANO    20159
+				IT
+
+14-3E-60   (hex)		Nokia
+143E60     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+70-32-D5   (hex)		Athena Wireless Communications Inc
+7032D5     (base 16)		Athena Wireless Communications Inc
+				12425 W Bell Rd
+				Surprise  AZ  85378
+				US
+
+78-51-0C   (hex)		LiveU Ltd.
+78510C     (base 16)		LiveU Ltd.
+				5 Hagavish St.
+				Kfar-Saba    44641
+				IL
+
+44-AA-E8   (hex)		Nanotec Electronic GmbH & Co. KG
+44AAE8     (base 16)		Nanotec Electronic GmbH & Co. KG
+				Gewerbestrasse 11
+				Landsham  Bavaria  85652
+				DE
+
+D4-28-B2   (hex)		ioBridge, Inc.
+D428B2     (base 16)		ioBridge, Inc.
+				225 Cedar Hill Street
+				Marlborough  MA  01752
+				US
+
+84-27-CE   (hex)		Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints
+8427CE     (base 16)		Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints
+				Audiovisual Engineering - 2LL
+				Salt Lake City  UT  84150
+				US
+
+48-D8-FE   (hex)		ClarIDy Solutions, Inc.
+48D8FE     (base 16)		ClarIDy Solutions, Inc.
+				7F, No.9, ParkAvenue II Rd., Hsinchu Science Park, 
+				Hsinchu    300
+				TW
+
+D4-94-5A   (hex)		COSMO CO., LTD
+D4945A     (base 16)		COSMO CO., LTD
+				1-12, Higashi-Gotanda 2-chome
+				Shinagawa-ku  Tokyo  141-0022
+				JP
+
+30-4C-7E   (hex)		Panasonic Electric Works Automation Controls Techno Co.,Ltd.
+304C7E     (base 16)		Panasonic Electric Works Automation Controls Techno Co.,Ltd.
+				2-9-18 Chidori
+				Oota-ku  Tokyo  146-8540
+				JP
+
+5C-F2-07   (hex)		Speco Technologies
+5CF207     (base 16)		Speco Technologies
+				200 New Highway
+				Amityville  New York  11701
+				US
+
+B4-2A-39   (hex)		ORBIT MERRET, spol. s r. o.
+B42A39     (base 16)		ORBIT MERRET, spol. s r. o.
+				Vodnanska 675/30
+				Praha    198 00
+				CZ
+
+70-E8-43   (hex)		Beijing C&W Optical Communication Technology Co.,Ltd.
+70E843     (base 16)		Beijing C&W Optical Communication Technology Co.,Ltd.
+				2/F Yufa Plaza, No.19 Xiaoying Beilu, Chaoyang District, 
+				Beijing    100101
+				CN
+
+2C-7E-CF   (hex)		Onzo Ltd
+2C7ECF     (base 16)		Onzo Ltd
+				6 Great Newport Street
+				London    WC2H 7JB
+				GB
+
+50-E5-49   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+50E549     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				
+				Pin-Jen  Taoyuan  324
+				TW
+
+B4-B8-8D   (hex)		Thuh Company
+B4B88D     (base 16)		Thuh Company
+				605  Territorial Dr
+				Bolingbrook  IL  60440
+				US
+
+4C-73-A5   (hex)		KOVE
+4C73A5     (base 16)		KOVE
+				14 N. Peoria Street
+				Chicago  IL  60607
+				US
+
+70-A4-1C   (hex)		Advanced Wireless Dynamics S.L.
+70A41C     (base 16)		Advanced Wireless Dynamics S.L.
+				Centro de Empresas UPM oficina 3
+				Pozuelo de Alarcon  Madrid  28223
+				ES
+
+BC-BB-C9   (hex)		Kellendonk Elektronik GmbH
+BCBBC9     (base 16)		Kellendonk Elektronik GmbH
+				Butzweilerhof Allee 4
+				Cologne  NRW  50829
+				DE
+
+E4-2A-D3   (hex)		Magneti Marelli S.p.A. Powertrain
+E42AD3     (base 16)		Magneti Marelli S.p.A. Powertrain
+				Via del Timavo 33
+				Bologna    40128
+				IT
+
+E8-3E-B6   (hex)		RIM
+E83EB6     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+BC-35-E5   (hex)		Hydro Systems Company
+BC35E5     (base 16)		Hydro Systems Company
+				3798 Round Bottom Road
+				Cincinnati  Ohio  45244
+				US
+
+9C-5D-95   (hex)		VTC Electronics Corp.
+9C5D95     (base 16)		VTC Electronics Corp.
+				5F,No.21,Sec.6,Zhongxiao E.Rd.,Nangang District
+				Taipei    11575
+				TW
+
+B8-A8-AF   (hex)		Logic S.p.A.
+B8A8AF     (base 16)		Logic S.p.A.
+				Via Galilei 5
+				Cassina de' Pecchi  MI  20060
+				IT
+
+60-F6-73   (hex)		TERUMO CORPORATION
+60F673     (base 16)		TERUMO CORPORATION
+				1500,Inokuchi,Nakai-machi
+				Ashigarakami-gun  Kanagawa  259-0151
+				JP
+
+28-CC-FF   (hex)		Corporacion Empresarial Altra SL
+28CCFF     (base 16)		Corporacion Empresarial Altra SL
+				Marie Curie 21
+				Malaga    29590
+				ES
+
+94-FD-1D   (hex)		WhereWhen Corp
+94FD1D     (base 16)		WhereWhen Corp
+				96A Flynn Avenue
+				Mountain View  California  94043
+				US
+
+4C-07-C9   (hex)		COMPUTER OFFICE Co.,Ltd.
+4C07C9     (base 16)		COMPUTER OFFICE Co.,Ltd.
+				1368-10 Muramatsu-cho
+				Ise-shi  Mie-ken  515-0507
+				JP
+
+F8-76-9B   (hex)		Neopis Co., Ltd.
+F8769B     (base 16)		Neopis Co., Ltd.
+				#401 Neo bd., 196-44 Anyang7-Dong
+				Anyang  Kyonggi-Do  430-857
+				KR
+
+74-B0-0C   (hex)		Network Video Technologies, Inc
+74B00C     (base 16)		Network Video Technologies, Inc
+				4005 Bohannon Drive
+				Menlo Park  CA  94025
+				US
+
+E8-40-40   (hex)		Cisco Systems, Inc
+E84040     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D8-9D-B9   (hex)		eMegatech International Corp.
+D89DB9     (base 16)		eMegatech International Corp.
+				Room 403, No.24 Wucyuan 2nd Rd.,
+				Sinjhuang City, Taipei County,    238
+				TW
+
+40-5A-9B   (hex)		ANOVO
+405A9B     (base 16)		ANOVO
+				ZI de Bracheux 
+				BEAUVAIS    60000
+				FR
+
+E0-69-95   (hex)		PEGATRON CORPORATION
+E06995     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+84-DE-3D   (hex)		Crystal Vision Ltd
+84DE3D     (base 16)		Crystal Vision Ltd
+				Lion Technology park
+				Whittlesford/ Cambridge  Cambs  CB22 4WL
+				GB
+
+D0-75-BE   (hex)		Reno A&E
+D075BE     (base 16)		Reno A&E
+				4655 Aircenter Circle
+				Reno  Nevada  89502
+				US
+
+BC-6E-76   (hex)		Green Energy Options Ltd
+BC6E76     (base 16)		Green Energy Options Ltd
+				3 St. Mary's Court, Main Street
+				Cambridge  Cambridgeshire  CB23 7QS
+				GB
+
+E8-28-D5   (hex)		Cots Technology
+E828D5     (base 16)		Cots Technology
+				C-702, Bundang Techno Park, 145,
+				Sungnam-City  Kyounggi-do  463-760
+				KR
+
+F8-DA-F4   (hex)		Taishan Online Technology Co., Ltd.
+F8DAF4     (base 16)		Taishan Online Technology Co., Ltd.
+				4/F Fangda Building, South Area, Hi-tech Industial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+08-D5-C0   (hex)		Seers Technology Co., Ltd
+08D5C0     (base 16)		Seers Technology Co., Ltd
+				1210 Techcenter, SKnTechnopark, 190-1
+				Seongnam-si  Gyeonggi-do  462-721
+				KR
+
+6C-33-A9   (hex)		Magicjack LP
+6C33A9     (base 16)		Magicjack LP
+				5700 Georgia Avenue
+				West Palm Beach  FL  33405
+				US
+
+10-8C-CF   (hex)		Cisco Systems, Inc
+108CCF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D8-E3-AE   (hex)		CIRTEC MEDICAL SYSTEMS
+D8E3AE     (base 16)		CIRTEC MEDICAL SYSTEMS
+				101B Cooper Court
+				Los Gatos  CA  95032
+				US
+
+08-B7-EC   (hex)		Wireless Seismic
+08B7EC     (base 16)		Wireless Seismic
+				13100 SW Freeway
+				Sugar Land  TX  77478
+				US
+
+18-AF-9F   (hex)		DIGITRONIC Automationsanlagen GmbH
+18AF9F     (base 16)		DIGITRONIC Automationsanlagen GmbH
+				Auf der Langwies 1
+				Wallbach  Hessen  65510
+				DE
+
+00-B3-42   (hex)		MacroSAN Technologies Co., Ltd.
+00B342     (base 16)		MacroSAN Technologies Co., Ltd.
+				Room 102, No.2 Building
+				Hangzhou  Zhejiang  310052
+				CN
+
+1C-F5-E7   (hex)		Turtle Industry Co., Ltd.
+1CF5E7     (base 16)		Turtle Industry Co., Ltd.
+				1-12-4 Nishineminami
+				Tsutiura  Ibaraki  300-0842
+				JP
+
+98-0E-E4   (hex)		Private
+980EE4     (base 16)		Private
+
+44-7D-A5   (hex)		VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD
+447DA5     (base 16)		VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD
+				Room 502, Wing A, World Trade Center
+				 Beijing,     
+				CN
+
+0C-CD-D3   (hex)		EASTRIVER TECHNOLOGY CO., LTD.
+0CCDD3     (base 16)		EASTRIVER TECHNOLOGY CO., LTD.
+				30 JINNIU XINCUN
+				DONGGUAN  GUANGDONG  523010
+				CN
+
+E4-6C-21   (hex)		messMa GmbH
+E46C21     (base 16)		messMa GmbH
+				Am Stadtfeld 8
+				Ixleben  Sachsen-Anhalt  39167
+				DE
+
+00-B0-33   (hex)		OAO Izhevskiy radiozavod
+00B033     (base 16)		OAO Izhevskiy radiozavod
+				19 Bazisnaya street
+				Izhevsk  Udmurt Republic  426034
+				RU
+
+08-17-35   (hex)		Cisco Systems, Inc
+081735     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-9C-1D   (hex)		Cisco Systems, Inc
+C89C1D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-37-D7   (hex)		HENRI DEPAEPE S.A.S.
+E437D7     (base 16)		HENRI DEPAEPE S.A.S.
+				75/77 RUE DU PRE BROCHET
+				SANNOIS    95112
+				FR
+
+E0-A1-D7   (hex)		SFR
+E0A1D7     (base 16)		SFR
+				40/42 Quai du point du jour
+				Boulogne Billancourt  Hauts de Seine  92659
+				FR
+
+94-81-A4   (hex)		Azuray Technologies
+9481A4     (base 16)		Azuray Technologies
+				7470 SW Bridgeport Rd
+				Durham  OR  97224
+				US
+
+BC-E0-9D   (hex)		Eoslink
+BCE09D     (base 16)		Eoslink
+				#602, 900-1
+				Anyang-City  Kyonggi-Do  431-060
+				KR
+
+9C-22-0E   (hex)		TASCAN Systems GmbH
+9C220E     (base 16)		TASCAN Systems GmbH
+				Max-Planck-Str. 38
+				Cologne  Köln  50858
+				DE
+
+7C-DD-90   (hex)		Shenzhen Ogemray Technology Co., Ltd.
+7CDD90     (base 16)		Shenzhen Ogemray Technology Co., Ltd.
+				3 Floor, 9 Building, Minxing Industrial Zone,
+				Shenzhen  Guangdong  518131
+				CN
+
+0C-3C-65   (hex)		Dome Imaging Inc
+0C3C65     (base 16)		Dome Imaging Inc
+				400 Fifth Av
+				Waltham  MA  02451
+				US
+
+C8-DF-7C   (hex)		Nokia Corporation
+C8DF7C     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+B4-4C-C2   (hex)		NR ELECTRIC CO., LTD
+B44CC2     (base 16)		NR ELECTRIC CO., LTD
+				69,Suyuan Avenue
+				Nanjing  Jiangsu  211102
+				CN
+
+48-CB-6E   (hex)		Cello Electronics (UK) Ltd
+48CB6E     (base 16)		Cello Electronics (UK) Ltd
+				Cliff Lodge
+				Leyburn  North Yorkshire  DL8 5NS
+				GB
+
+BC-43-77   (hex)		Hang Zhou Huite Technology Co.,ltd.
+BC4377     (base 16)		Hang Zhou Huite Technology Co.,ltd.
+				Rm1338,Block A¬FuLi Technology Building ,No.328,WenEr Rd
+				Hang Zhou  Zhe Jiang  310012
+				CN
+
+CC-76-69   (hex)		SEETECH
+CC7669     (base 16)		SEETECH
+				19-15, Seoku-dong
+				Hwasung-si  Gyeonggi-do  445-170
+				KR
+
+AC-20-AA   (hex)		DMATEK Co., Ltd.
+AC20AA     (base 16)		DMATEK Co., Ltd.
+				11F.-2, No.386, Shizheng Rd., Xitun Dist.,
+				Taichung    40757
+				TW
+
+FC-AF-6A   (hex)		Qulsar Inc
+FCAF6A     (base 16)		Qulsar Inc
+				Torshamnsgatan 35
+				Kista    SE-16440
+				SE
+
+34-6F-92   (hex)		White Rodgers Division
+346F92     (base 16)		White Rodgers Division
+				8100 West Florissant
+				St. Louis  MO  63136
+				US
+
+34-BD-F9   (hex)		Shanghai WDK Industrial Co.,Ltd.
+34BDF9     (base 16)		Shanghai WDK Industrial Co.,Ltd.
+				No.2100,Songzhen Road,Songjiang District
+				Shanghai    201606
+				CN
+
+CC-BE-71   (hex)		OptiLogix BV
+CCBE71     (base 16)		OptiLogix BV
+				Joop Geesinkweg 999
+				Amsterdam  NH  1096AZ
+				NL
+
+0C-46-9D   (hex)		MS Sedco
+0C469D     (base 16)		MS Sedco
+				8701 Castle Park Drive
+				Indianapolis    46256
+				US
+
+B0-9A-E2   (hex)		STEMMER IMAGING GmbH
+B09AE2     (base 16)		STEMMER IMAGING GmbH
+				Gutenbergstraße 11
+				Puchheim  By  82178
+				DE
+
+14-EE-9D   (hex)		AirNav Systems LLC
+14EE9D     (base 16)		AirNav Systems LLC
+				4660 La Jolla Village Dr. - Suite 500
+				San Diego  California  CA 92122
+				US
+
+78-D0-04   (hex)		Neousys Technology Inc.
+78D004     (base 16)		Neousys Technology Inc.
+				13F.-1, NO.1, BAOSHENG RD., 
+				YONGHE CITY  TAIPEI COUNTY   23444
+				TW
+
+88-95-B9   (hex)		Unified Packet Systems Crop
+8895B9     (base 16)		Unified Packet Systems Crop
+				1F., No32,Lane 15,SEC 6, MinQuan E Rd., 
+				Taipei  Neihu  114
+				TW
+
+D8-FE-8F   (hex)		IDFone Co., Ltd.
+D8FE8F     (base 16)		IDFone Co., Ltd.
+				7F Ace techno tower 5th B/D, 197-22
+				Guro-dong, Guro-gu  Seoul  152-766
+				KR
+
+88-8C-19   (hex)		Brady Corp Asia Pacific Ltd
+888C19     (base 16)		Brady Corp Asia Pacific Ltd
+				1, Kaki Bukit Crescent
+				    416236
+				SG
+
+44-8C-52   (hex)		KTIS CO., Ltd
+448C52     (base 16)		KTIS CO., Ltd
+				1208ho-103dong
+				Ojung-Gu, Bucheon-si  Gyeonggi-do  421-808
+				KR
+
+00-6D-FB   (hex)		Vutrix Technologies Ltd
+006DFB     (base 16)		Vutrix Technologies Ltd
+				Unit 1 Red Lodge Business Park
+				Weston-super-mare  North Somerset  BS24 7TN
+				GB
+
+84-18-88   (hex)		Juniper Networks
+841888     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+90-67-B5   (hex)		Alcatel-Lucent
+9067B5     (base 16)		Alcatel-Lucent
+				600-700 Mountain Ave.
+				Murray Hiill  NJ  07974-0636
+				US
+
+E0-F3-79   (hex)		Vaddio
+E0F379     (base 16)		Vaddio
+				9433 Science Center Drive
+				New Hope  MN  55428
+				US
+
+78-B6-C1   (hex)		AOBO Telecom Co.,Ltd
+78B6C1     (base 16)		AOBO Telecom Co.,Ltd
+				Room1508,Jiangong Building
+				Hangzhou  ZheJiang   310012
+				CN
+
+08-D2-9A   (hex)		Proformatique
+08D29A     (base 16)		Proformatique
+				10 bis rue Lucien Voilin
+				Puteaux    92800
+				FR
+
+C8-93-83   (hex)		Embedded Automation, Inc.
+C89383     (base 16)		Embedded Automation, Inc.
+				17345 Abbey Drive
+				Surrey  BC  V4N 4M3
+				CA
+
+78-A0-51   (hex)		iiNet Labs Pty Ltd 
+78A051     (base 16)		iiNet Labs Pty Ltd 
+				Level 1
+				Subiaco  WA  6008
+				AU
+
+80-4F-58   (hex)		ThinkEco, Inc.
+804F58     (base 16)		ThinkEco, Inc.
+				303 Fifth Avenue
+				New York  NY  10016
+				US
+
+04-75-F5   (hex)		CSST
+0475F5     (base 16)		CSST
+				Building 6, CSST industrial park, Tong fuyu Industrial zone
+				Shenzhen  Guangdong  518107
+				CN
+
+24-BA-30   (hex)		Technical Consumer Products, Inc.
+24BA30     (base 16)		Technical Consumer Products, Inc.
+				325 Campus Drive
+				Aurora  OH  44202
+				US
+
+18-8E-D5   (hex)		TP Vision Belgium N.V. - innovation site Brugge
+188ED5     (base 16)		TP Vision Belgium N.V. - innovation site Brugge
+				Pathoekeweg 11
+				Bruges  West Flanders  8000
+				BE
+
+E8-0C-38   (hex)		DAEYOUNG INFORMATION SYSTEM CO., LTD
+E80C38     (base 16)		DAEYOUNG INFORMATION SYSTEM CO., LTD
+				#826 TAMNIP-DONG, YUSEONG-GO, 
+				DAEJON    305-510
+				KR
+
+E0-8A-7E   (hex)		Exponent
+E08A7E     (base 16)		Exponent
+				149 Commonwealth Drive
+				Menlo Park  CA  94025
+				US
+
+E4-27-71   (hex)		Smartlabs
+E42771     (base 16)		Smartlabs
+				72, Oktyabrskaya Street
+				Moscow    127521
+				RU
+
+34-DF-2A   (hex)		Fujikon Industrial Co.,Limited
+34DF2A     (base 16)		Fujikon Industrial Co.,Limited
+				16/F., Tower 1, Grand Central Plaza,138 Shatin Rural 
+				    523930
+				HK
+
+2C-DD-0C   (hex)		Discovergy GmbH
+2CDD0C     (base 16)		Discovergy GmbH
+				Pascalstraße 15
+				Aachen  NRW  52076
+				DE
+
+40-B2-C8   (hex)		Nortel Networks
+40B2C8     (base 16)		Nortel Networks
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+70-A1-91   (hex)		Trendsetter Medical, LLC
+70A191     (base 16)		Trendsetter Medical, LLC
+				2030 Ardmore BLVD
+				Pittsburgh  PA  15221
+				US
+
+70-8B-78   (hex)		citygrow technology co., ltd
+708B78     (base 16)		citygrow technology co., ltd
+				rm1404, blk A, ,5 - 21 Pak Tin Par Street
+				Tsuen Wan    
+				HK
+
+64-31-7E   (hex)		Dexin Corporation
+64317E     (base 16)		Dexin Corporation
+				14F-8, No. 258, Lian Cheng Rd.
+				Chung Ho City, Taipei Hsien    235
+				TW
+
+3C-99-F7   (hex)		Lansentechnology AB
+3C99F7     (base 16)		Lansentechnology AB
+				Rörkullsvägen 4
+				Halmstad    30241
+				SE
+
+50-7D-02   (hex)		BIODIT
+507D02     (base 16)		BIODIT
+				Calle Gustave Eiffel 3
+				Paterna  Valencia  46980
+				ES
+
+B4-A4-E3   (hex)		Cisco Systems, Inc
+B4A4E3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+8C-1F-94   (hex)		RF Surgical System Inc. 
+8C1F94     (base 16)		RF Surgical System Inc. 
+				9740 Appaloosa Road 
+				San Diego   CA  92131
+				US
+
+44-91-DB   (hex)		Shanghai Huaqin Telecom Technology Co.,Ltd
+4491DB     (base 16)		Shanghai Huaqin Telecom Technology Co.,Ltd
+				No.1 Building,399 Keyuan Road, Zhangjian Hi-Tech Park,
+				shanghai  shanghai  201203
+				CN
+
+14-D7-6E   (hex)		CONCH ELECTRONIC Co.,Ltd
+14D76E     (base 16)		CONCH ELECTRONIC Co.,Ltd
+				No.3 Keji 1st Load.
+				Tainan    70955
+				TW
+
+CC-6B-98   (hex)		Minetec Wireless Technologies
+CC6B98     (base 16)		Minetec Wireless Technologies
+				10 Kembla Way
+				Willetton  WA  6155
+				AU
+
+3C-04-BF   (hex)		PRAVIS SYSTEMS Co.Ltd.,
+3C04BF     (base 16)		PRAVIS SYSTEMS Co.Ltd.,
+				4F, 5F Jaeyoon Bld, 75-3 Yangjae-Dong,
+				Seoul  Seocho-Gu  137-889
+				KR
+
+94-DD-3F   (hex)		A+V Link Technologies, Corp.
+94DD3F     (base 16)		A+V Link Technologies, Corp.
+				5F., No.550, Xianzheng 2nd Rd.
+				Zhubei City  Hsinchu Country  30268
+				TW
+
+F4-42-27   (hex)		S & S Research Inc.
+F44227     (base 16)		S & S Research Inc.
+				89 Access Rd #10
+				Norwood  MA  02062
+				US
+
+C8-A7-29   (hex)		SYStronics Co., Ltd.
+C8A729     (base 16)		SYStronics Co., Ltd.
+				#301-1404, Buchun Techno-Park II
+				Buchun City  Kyung gi-do  421-741
+				KR
+
+44-54-C0   (hex)		Thompson Aerospace
+4454C0     (base 16)		Thompson Aerospace
+				18 Technology
+				Irvine  CA  92618
+				US
+
+C4-F4-64   (hex)		Spica international
+C4F464     (base 16)		Spica international
+				Pot k sejmiscu 33
+				Ljubljana    1000
+				SI
+
+60-2A-54   (hex)		CardioTek B.V.
+602A54     (base 16)		CardioTek B.V.
+				Amerikalaan 70
+				Maastricht Airport  Limburg  6199AE
+				NL
+
+BC-FF-AC   (hex)		TOPCON CORPORATION
+BCFFAC     (base 16)		TOPCON CORPORATION
+				75-1, Hasunuma-cho
+				Itabashi-ku  TOKYO  174-8580
+				JP
+
+44-5E-F3   (hex)		Tonalite Holding B.V.
+445EF3     (base 16)		Tonalite Holding B.V.
+				Nieuw Amsterdamsestraat 40
+				Emmen  Drenthe  7814 VA
+				NL
+
+68-DB-96   (hex)		OPWILL Technologies CO .,LTD
+68DB96     (base 16)		OPWILL Technologies CO .,LTD
+				Room 415,Digital Media Building,NO.7 Shangdi Information Road,HaiDian District,
+				Beijing    100085
+				CN
+
+7C-55-E7   (hex)		YSI, Inc.
+7C55E7     (base 16)		YSI, Inc.
+				1725 Brannum Lane
+				Yellow Springs  Ohio  45387
+				US
+
+70-B0-8C   (hex)		Shenou Communication Equipment Co.,Ltd
+70B08C     (base 16)		Shenou Communication Equipment Co.,Ltd
+				No.118 Middle Juguang Road, High & New Industrial Zone
+				Wenzhou  Zhejiang  325029
+				CN
+
+C0-3B-8F   (hex)		Minicom Digital Signage
+C03B8F     (base 16)		Minicom Digital Signage
+				24 Hebron Road
+				Jerusalem    93542
+				IL
+
+20-FE-DB   (hex)		M2M Solution S.A.S.
+20FEDB     (base 16)		M2M Solution S.A.S.
+				Centre d'Affaires Regus Bat.D
+				Mougins     06254 
+				FR
+
+0C-8D-98   (hex)		TOP EIGHT IND CORP
+0C8D98     (base 16)		TOP EIGHT IND CORP
+				8F.,No79-1 Zhouzi St., Neihu District, Taipei City  (Neihu Technology Park)
+				Taipei    11493
+				TW
+
+40-C7-C9   (hex)		Naviit Inc.
+40C7C9     (base 16)		Naviit Inc.
+				3058A Scott Blvd.
+				Santa Clara  CA  95054
+				US
+
+7C-BB-6F   (hex)		Cosco Electronics Co., Ltd.
+7CBB6F     (base 16)		Cosco Electronics Co., Ltd.
+				#1101, ENC Dream tower, 327-27
+				Seoul    153-793
+				KR
+
+94-A7-BC   (hex)		BodyMedia, Inc.
+94A7BC     (base 16)		BodyMedia, Inc.
+				420 Fort Duquesne Blvd
+				Pittsburgh  PA  15222
+				US
+
+C8-A1-B6   (hex)		Shenzhen Longway Technologies Co., Ltd
+C8A1B6     (base 16)		Shenzhen Longway Technologies Co., Ltd
+				Suite 707,Incubation Building, China Academy of Science&Tech Development, South area 
+				Shenzhen  Guangdong  518057
+				CN
+
+64-A2-32   (hex)		OOO Samlight
+64A232     (base 16)		OOO Samlight
+				44A, Dubninskaya str., 
+				Moscow    127591
+				RU
+
+64-FC-8C   (hex)		Zonar Systems
+64FC8C     (base 16)		Zonar Systems
+				18200 Cascade Ave South
+				Seattle  WA  98118
+				US
+
+D0-57-4C   (hex)		Cisco Systems, Inc
+D0574C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F8-DA-E2   (hex)		NDC Technologies
+F8DAE2     (base 16)		NDC Technologies
+				8001 Technology Blvd
+				Dayton  OH  45424
+				US
+
+70-5E-AA   (hex)		Action Target, Inc.
+705EAA     (base 16)		Action Target, Inc.
+				PO Box 636
+				Provo  UT  84603
+				US
+
+34-F9-68   (hex)		ATEK Products, LLC
+34F968     (base 16)		ATEK Products, LLC
+				210 NE 10th Avenue
+				Brainerd  MN  56401
+				US
+
+20-B0-F7   (hex)		Enclustra GmbH
+20B0F7     (base 16)		Enclustra GmbH
+				Technoparkstrasse 1
+				Zurich  ZH  CH-8005
+				CH
+
+54-31-31   (hex)		Raster Vision Ltd
+543131     (base 16)		Raster Vision Ltd
+				Unit 1, Crundalls
+				Tonbridge   Kent  TN12 7EA
+				GB
+
+D0-E3-47   (hex)		Yoga
+D0E347     (base 16)		Yoga
+				Tammsaare tee 47
+				Tallinn  Harjumaa  11316
+				EE
+
+F0-ED-1E   (hex)		Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.
+F0ED1E     (base 16)		Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.
+				Gersan Sanayi Sitesi 658.Sokak No:16
+				ANKARA    06370
+				TR
+
+C4-16-FA   (hex)		Prysm Inc
+C416FA     (base 16)		Prysm Inc
+				180 Baytech Drive
+				San Jose  California  95134
+				US
+
+50-6F-9A   (hex)		Wi-Fi Alliance
+506F9A     (base 16)		Wi-Fi Alliance
+				3925 W. Braker Lane
+				Austin  TX  78759
+				US
+
+84-29-14   (hex)		EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG
+842914     (base 16)		EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG
+				Industriezeile 36, 
+				Linz    4020
+				AT
+
+BC-7D-D1   (hex)		Radio Data Comms
+BC7DD1     (base 16)		Radio Data Comms
+				5/20-30 Stubbs Street
+				Silverwater   New South Wales (NSW)  2128
+				AU
+
+58-50-76   (hex)		Linear Equipamentos Eletronicos SA
+585076     (base 16)		Linear Equipamentos Eletronicos SA
+				Praca Linear 100
+				Santa Rita do Sapucai  MG  37540000
+				BR
+
+F0-F9-F7   (hex)		IES GmbH & Co. KG
+F0F9F7     (base 16)		IES GmbH & Co. KG
+				Darmcher Grund 22
+				Meinerzhagen    58540
+				DE
+
+38-58-0C   (hex)		Panaccess Systems GmbH
+38580C     (base 16)		Panaccess Systems GmbH
+				Gutenbergstr. 8
+				Ismaning  BY  85737
+				DE
+
+44-51-DB   (hex)		Raytheon BBN Technologies
+4451DB     (base 16)		Raytheon BBN Technologies
+				10 Moulton Street
+				Cambridge  MA  02138
+				US
+
+DC-FA-D5   (hex)		STRONG Ges.m.b.H.
+DCFAD5     (base 16)		STRONG Ges.m.b.H.
+				Franz-Josefs-Kai 1
+				Vienna    1010
+				AT
+
+6C-8D-65   (hex)		Wireless Glue Networks, Inc.
+6C8D65     (base 16)		Wireless Glue Networks, Inc.
+				1601 N. Main Street, Suite 202
+				Walnut Creek  CA  94596
+				US
+
+98-03-A0   (hex)		ABB n.v. Power Quality Products
+9803A0     (base 16)		ABB n.v. Power Quality Products
+				10 allée centrale
+				Jumet    6040
+				BE
+
+CC-43-E3   (hex)		Trump s.a.
+CC43E3     (base 16)		Trump s.a.
+				rue de la Maitrise 9
+				Nivelles    1400
+				BE
+
+F8-C0-91   (hex)		Highgates Technology
+F8C091     (base 16)		Highgates Technology
+				1415 Highgates Ave
+				Los Angeles  CA  90042
+				US
+
+AC-9B-84   (hex)		Smak Tecnologia e Automacao
+AC9B84     (base 16)		Smak Tecnologia e Automacao
+				Av. Sto. Antonio, 201 - Bela Vista
+				Osasco  São Paulo  CEP 06086-075
+				BR
+
+90-F2-78   (hex)		Radius Gateway
+90F278     (base 16)		Radius Gateway
+				520 E. Montford Ave
+				Ada  OH  45810
+				US
+
+80-66-29   (hex)		Prescope Technologies CO.,LTD.
+806629     (base 16)		Prescope Technologies CO.,LTD.
+				12F-1,No.192,Sec 2,Chung Hsin Road
+				Hsin Tien City  Taipei County  23146
+				TW
+
+24-1F-2C   (hex)		Calsys, Inc.
+241F2C     (base 16)		Calsys, Inc.
+				2700 Augustine drive, Ste145
+				Santa Clara  California  95054
+				US
+
+F0-BD-F1   (hex)		Sipod Inc.
+F0BDF1     (base 16)		Sipod Inc.
+				4633 Old Ironsides Drive, #400
+				Santa Clara  CA  95054
+				US
+
+64-67-07   (hex)		Beijing Omnific Technology, Ltd.
+646707     (base 16)		Beijing Omnific Technology, Ltd.
+				Rm. 402, Building 1, Shui Mu Qing Hua Community
+				Beijing    100190
+				CN
+
+AC-A0-16   (hex)		Cisco Systems, Inc
+ACA016     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-E7-47   (hex)		Deltanet AG
+58E747     (base 16)		Deltanet AG
+				Riedstrasse 8
+				Dietikon  Zurich  8953
+				CH
+
+40-40-22   (hex)		ZIV
+404022     (base 16)		ZIV
+				Polígono Parque Tecnológico, 210
+				ZAMUDIO  VIZCAYA  48170
+				ES
+
+A8-5B-B0   (hex)		Shenzhen Dehoo Technology Co.,Ltd
+A85BB0     (base 16)		Shenzhen Dehoo Technology Co.,Ltd
+				5C,Tianzhan Building Tianan Cyberpark,
+				ShenZhen  Guang Dong  518040
+				CN
+
+44-A6-89   (hex)		PROMAX ELECTRONICA SA
+44A689     (base 16)		PROMAX ELECTRONICA SA
+				FRANCESC MORAGAS 71-75
+				HOSPITALET DE LLOBREGAT  BARCELONA  08907
+				ES
+
+40-61-8E   (hex)		Stella-Green Co
+40618E     (base 16)		Stella-Green Co
+				1-5-16 Edobori, Nishi-ku
+				Osaka    550-0002
+				JP
+
+68-E4-1F   (hex)		Unglaube Identech GmbH
+68E41F     (base 16)		Unglaube Identech GmbH
+				An der Moosach 3a
+				Massenhausen  Bayern  85376
+				DE
+
+4C-60-D5   (hex)		airPointe of New Hampshire
+4C60D5     (base 16)		airPointe of New Hampshire
+				35E Industrial Way
+				Rochester  NH  03867
+				US
+
+88-87-17   (hex)		CANON INC.
+888717     (base 16)		CANON INC.
+				3-30-2
+				Ohta-Ku  Tokyo  146-8501
+				JP
+
+6C-DC-6A   (hex)		Promethean Limited
+6CDC6A     (base 16)		Promethean Limited
+				Activlab
+				Blackburn  Lancashire  BB1 5SN
+				GB
+
+90-55-AE   (hex)		Ericsson, EAB/RWI/K
+9055AE     (base 16)		Ericsson, EAB/RWI/K
+				Skolgången 17
+				Gävle    SE-800 06
+				SE
+
+10-10-B6   (hex)		McCain Inc
+1010B6     (base 16)		McCain Inc
+				2365 Oak Ridge Way
+				Vista  CA  92081
+				US
+
+00-93-63   (hex)		Uni-Link Technology Co., Ltd.
+009363     (base 16)		Uni-Link Technology Co., Ltd.
+				7-5, No.66, Sec.2, Nan-Kan Rd., Lu-Chu Hsiang,Taoyuan,Taiwan
+				Taoyuan  Taiwan  338
+				TW
+
+D4-82-3E   (hex)		Argosy Technologies, Ltd.
+D4823E     (base 16)		Argosy Technologies, Ltd.
+				73-221 Haystack Road
+				Palm Desert  CA  92260
+				US
+
+00-35-32   (hex)		Electro-Metrics Corporation
+003532     (base 16)		Electro-Metrics Corporation
+				231 Enterprise Road
+				Johnstown  New York  12095
+				US
+
+08-1F-F3   (hex)		Cisco Systems, Inc
+081FF3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-37-6F   (hex)		Young Electric Sign Co
+44376F     (base 16)		Young Electric Sign Co
+				1651 N 1000 W
+				Logan  UT  84321
+				US
+
+38-9F-83   (hex)		OTN Systems N.V.
+389F83     (base 16)		OTN Systems N.V.
+				Industrielaan 17b
+				Olen    2250
+				BE
+
+BC-6A-16   (hex)		tdvine
+BC6A16     (base 16)		tdvine
+				301 Maison Maru Building 
+				Seoul    135-010
+				KR
+
+00-3A-9D   (hex)		NEC Platforms, Ltd.
+003A9D     (base 16)		NEC Platforms, Ltd.
+				800 Shimomata
+				Kakegawa  Shizuoka  436-8501
+				JP
+
+28-CD-4C   (hex)		Individual Computers GmbH
+28CD4C     (base 16)		Individual Computers GmbH
+				Im Zemmer 6
+				Woffelsbach  NRW  52152
+				DE
+
+8C-53-F7   (hex)		A&D ENGINEERING CO., LTD.
+8C53F7     (base 16)		A&D ENGINEERING CO., LTD.
+				336-6 Dangsandong 6-ga, Yeongdeungpo-gu
+				Seoul    150-810
+				KR
+
+7C-76-73   (hex)		ENMAS GmbH
+7C7673     (base 16)		ENMAS GmbH
+				Holzkoppelweg 23
+				Kiel  Schleswig-Holstein  24251
+				DE
+
+6C-6F-18   (hex)		Stereotaxis, Inc.
+6C6F18     (base 16)		Stereotaxis, Inc.
+				4320 Forest Park Ave
+				St. Louis  MO  63108
+				US
+
+84-C7-27   (hex)		Gnodal Ltd
+84C727     (base 16)		Gnodal Ltd
+				178 - 180 Hotwell Road
+				Bristol    BS8 4RP
+				GB
+
+08-76-95   (hex)		Auto Industrial Co., Ltd.
+087695     (base 16)		Auto Industrial Co., Ltd.
+				14Floor, #235 Hanshin IT Tower, 
+				Seoul    152-768
+				KR
+
+AC-CE-8F   (hex)		HWA YAO TECHNOLOGIES CO., LTD
+ACCE8F     (base 16)		HWA YAO TECHNOLOGIES CO., LTD
+				NO. 6, LN. 48, NANSING RD.,
+				YONGKANG CITY, TAINAN COUNTY     710
+				TW
+
+8C-92-36   (hex)		Aus.Linx Technology Co., Ltd.
+8C9236     (base 16)		Aus.Linx Technology Co., Ltd.
+				6F-2, No. 190, Sec. 2, Zhongxing Rd., Xindian Dist.,
+				New Taipei City    23146
+				TW
+
+10-C7-3F   (hex)		Midas Klark Teknik Ltd
+10C73F     (base 16)		Midas Klark Teknik Ltd
+				Klark Teknik Building
+				Kidderminster  Worcestershire  DY11 7HJ
+				GB
+
+F8-91-2A   (hex)		GLP German Light Products GmbH
+F8912A     (base 16)		GLP German Light Products GmbH
+				Im Stöckmädle 13
+				Karlsbad  BW  76307
+				DE
+
+44-E4-9A   (hex)		OMNITRONICS PTY LTD
+44E49A     (base 16)		OMNITRONICS PTY LTD
+				27 SARICH CRT
+				OSBORNE PARK  WA  6017
+				AU
+
+08-F2-F4   (hex)		Net One Partners Co.,Ltd.
+08F2F4     (base 16)		Net One Partners Co.,Ltd.
+				2-8 Higashi Shinagawa 2-chome,
+				Tokyo    1400002
+				JP
+
+0C-7D-7C   (hex)		Kexiang Information Technology Co, Ltd.
+0C7D7C     (base 16)		Kexiang Information Technology Co, Ltd.
+				Room 1502, Longxi Hotel No.3788 Jiangnan Avenue. 
+				Hangzhou  Zhejiang  310053
+				CN
+
+30-37-A6   (hex)		Cisco Systems, Inc
+3037A6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+DC-1D-9F   (hex)		U & B tech
+DC1D9F     (base 16)		U & B tech
+				2F, Daeyoung buliding, 1423-6, Kwanyang-1Dong,
+				Anyang-Si  Gyeonggi-Do  431-061
+				KR
+
+78-5C-72   (hex)		Hioso Technology Co., Ltd.
+785C72     (base 16)		Hioso Technology Co., Ltd.
+				6th Floor, 12th Building, Wangtang Industrial Zone,
+				Shenzhen  Guangdong  518055
+				CN
+
+58-05-56   (hex)		Elettronica GF S.r.L.
+580556     (base 16)		Elettronica GF S.r.L.
+				Via Vittori, 63
+				FAENZA  RA  48018
+				IT
+
+B0-90-74   (hex)		Fulan Electronics Limited
+B09074     (base 16)		Fulan Electronics Limited
+				Flat B&C,3/F,A1 Block, Gaoxin Cyber-Tech Zone,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+94-F6-92   (hex)		Geminico co.,Ltd.
+94F692     (base 16)		Geminico co.,Ltd.
+				#102-1112, Chunui-Technopark, 200-1,
+				Bucheon-city  Kyunggi-do  420-857
+				KR
+
+68-EF-BD   (hex)		Cisco Systems, Inc
+68EFBD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F0-24-08   (hex)		Talaris (Sweden) AB
+F02408     (base 16)		Talaris (Sweden) AB
+				Taljs Sodra Industriomrade
+				Flen    64284
+				SE
+
+80-81-A5   (hex)		TONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd
+8081A5     (base 16)		TONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd
+				Tongqing Industry Park,jiuwei,xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518126
+				CN
+
+B4-82-FE   (hex)		ASKEY COMPUTER CORP
+B482FE     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+30-7C-30   (hex)		RIM
+307C30     (base 16)		RIM
+				295 Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+BC-4E-3C   (hex)		CORE STAFF CO., LTD.
+BC4E3C     (base 16)		CORE STAFF CO., LTD.
+				Shin-osaka Oriental Bldg. 14F, 7-1-26 Nishinakajima
+				Yodogawa-ku  Osaka  532-0011
+				JP
+
+50-2A-8B   (hex)		Telekom Research and Development Sdn Bhd
+502A8B     (base 16)		Telekom Research and Development Sdn Bhd
+				TMRND Innovation Centre
+				Cyberjaya  Selangor  63000
+				MY
+
+EC-43-E6   (hex)		AWCER Ltd.
+EC43E6     (base 16)		AWCER Ltd.
+				100-413 Bucheon Technopark
+				Bucheon-city  Gyeonggi-do  421-741
+				KR
+
+78-12-B8   (hex)		ORANTEK LIMITED
+7812B8     (base 16)		ORANTEK LIMITED
+				5/F, Building E, Dakan Tech Park, Dakan village, Xili Town, Nanshan District, Shenzhen, China
+				Shenzhen  Guangdong  518000
+				CN
+
+98-BC-99   (hex)		Edeltech Co.,Ltd.
+98BC99     (base 16)		Edeltech Co.,Ltd.
+				#302 Jamae Bldg, 1010-28, Sadang-dong, Dongjak=gu
+				Seoul    156-824
+				KR
+
+F0-2F-D8   (hex)		Bi2-Vision
+F02FD8     (base 16)		Bi2-Vision
+				16-504, 21-ban, Shimomaruko 4-chome, Oota-ku
+				Tokyo    146-0092
+				JP
+
+54-42-49   (hex)		Sony Corporation
+544249     (base 16)		Sony Corporation
+				Gotenyama Tec 5-1-2
+				Tokyo  Shinagawa-ku  141-0001
+				JP
+
+90-47-16   (hex)		RORZE CORPORATION
+904716     (base 16)		RORZE CORPORATION
+				1588-2 Michinoue, Kannabe-cho
+				Fukuyama  Hiroshima  720-2104
+				JP
+
+10-44-5A   (hex)		Shaanxi Hitech Electronic Co., LTD
+10445A     (base 16)		Shaanxi Hitech Electronic Co., LTD
+				35 Tuanjienan Rode,
+				Xian  Shaanxi  710075
+				CN
+
+F4-76-26   (hex)		Viltechmeda UAB 
+F47626     (base 16)		Viltechmeda UAB 
+				Kalvariju 125
+				Vilnius    LT-08221
+				LT
+
+0C-17-F1   (hex)		TELECSYS
+0C17F1     (base 16)		TELECSYS
+				31 chemin du fief aux pretres
+				L'ORBRIE    85200
+				FR
+
+00-3A-9B   (hex)		Cisco Systems, Inc
+003A9B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-34-27   (hex)		ERCO & GENER
+2C3427     (base 16)		ERCO & GENER
+				ZI de SAINT LAMBERT DES LEVEES
+				SAUMUR    49412
+				FR
+
+80-91-2A   (hex)		Lih Rong electronic Enterprise Co., Ltd.
+80912A     (base 16)		Lih Rong electronic Enterprise Co., Ltd.
+				2F, No. 2, Lane 387, Hsin Shu Road
+				Hsin Chuang  Taipei  242
+				TW
+
+7C-2F-80   (hex)		Gigaset Communications GmbH
+7C2F80     (base 16)		Gigaset Communications GmbH
+				SCM PE 2
+				Bocholt    46395
+				DE
+
+10-B7-F6   (hex)		Plastoform Industries Ltd.
+10B7F6     (base 16)		Plastoform Industries Ltd.
+				Units 1506A - 1512, Mita Centre,
+				Kwai Chung,    
+				HK
+
+44-8E-81   (hex)		VIG
+448E81     (base 16)		VIG
+				705 Hanshin IT Tower, 60-18, Kasan-dong, Geumcheon-gu
+				Seoul    KSXX0022
+				KR
+
+88-94-F9   (hex)		Gemicom Technology, Inc.
+8894F9     (base 16)		Gemicom Technology, Inc.
+				16F, Building B, No. 98, Sec 1, Hsin-Tai-Wu Rd.
+				Hsi-Chih city  Taipei  22102
+				TW
+
+50-2A-7E   (hex)		Smart electronic GmbH
+502A7E     (base 16)		Smart electronic GmbH
+				Industrie Str. 29
+				St. Georgen    78112
+				DE
+
+5C-87-78   (hex)		Cybertelbridge co.,ltd
+5C8778     (base 16)		Cybertelbridge co.,ltd
+				#901 Acehighend tower 2
+				Seoul    152-050
+				KR
+
+38-BB-23   (hex)		OzVision America LLC
+38BB23     (base 16)		OzVision America LLC
+				400 West Cummings Park
+				Woburn  MA  01801
+				US
+
+0C-84-11   (hex)		A.O. Smith Water Products
+0C8411     (base 16)		A.O. Smith Water Products
+				25589 Hwy 1
+				McBee  SC  29101
+				US
+
+E0-AB-FE   (hex)		Orb Networks, Inc.
+E0ABFE     (base 16)		Orb Networks, Inc.
+				428 13th Street
+				Oakland  CA  94612
+				US
+
+44-83-12   (hex)		Star-Net
+448312     (base 16)		Star-Net
+				Egoz 64 
+				Kiryat Byalik  Israel  27000
+				IL
+
+A0-5D-E7   (hex)		DIRECTV, Inc.
+A05DE7     (base 16)		DIRECTV, Inc.
+				2230 E. Imperial Hwy
+				El Segundo  CA  90245
+				US
+
+08-76-18   (hex)		ViE Technologies Sdn. Bhd.
+087618     (base 16)		ViE Technologies Sdn. Bhd.
+				no. 85-A, Lintang Bayan Lepas 11,
+				Bayan Lepas  Penang  11900
+				MY
+
+D0-E4-0B   (hex)		Wearable Inc.
+D0E40B     (base 16)		Wearable Inc.
+				3825 Charles Dr.
+				Northbrook  IL  60062
+				US
+
+74-7E-1A   (hex)		Red Embedded Design Limited
+747E1A     (base 16)		Red Embedded Design Limited
+				The Wave
+				Shipley  West Yorkshire  BD17 7Du
+				GB
+
+14-A8-6B   (hex)		ShenZhen Telacom Science&Technology Co., Ltd
+14A86B     (base 16)		ShenZhen Telacom Science&Technology Co., Ltd
+				B1701/1705 Pavilion, Hua Qiang Bei RD4002, Futian District
+				ShenZhen  GuangDong  518028
+				CN
+
+0C-C3-A7   (hex)		Meritec
+0CC3A7     (base 16)		Meritec
+				P.O. Box 8003
+				Painesville  Ohio  44077
+				US
+
+DC-E2-AC   (hex)		Lumens Digital Optics Inc.
+DCE2AC     (base 16)		Lumens Digital Optics Inc.
+				5F, No.35, Sintai Rd., Jhubei City
+				Jhubei   HsinChu  302
+				TW
+
+98-D8-8C   (hex)		Nortel Networks
+98D88C     (base 16)		Nortel Networks
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+78-19-2E   (hex)		NASCENT Technology
+78192E     (base 16)		NASCENT Technology
+				2744 Yorkmont RD
+				Charlotte  NC  28208
+				US
+
+48-EB-30   (hex)		ETERNA TECHNOLOGY, INC.
+48EB30     (base 16)		ETERNA TECHNOLOGY, INC.
+				3939 veselich ave
+				los angeles  california  90039
+				US
+
+4C-32-2D   (hex)		TELEDATA NETWORKS
+4C322D     (base 16)		TELEDATA NETWORKS
+				10 Hasadnaot Street
+				HERZLIYA    46120
+				IL
+
+AC-86-7E   (hex)		Create New Technology (HK) Limited Company
+AC867E     (base 16)		Create New Technology (HK) Limited Company
+				Rm B 10/F JinFeng Building,1001 ShangBu South Road,FuTian District 
+				Shen Zhen  Guang Dong  518031
+				CN
+
+8C-59-8B   (hex)		C Technologies AB
+8C598B     (base 16)		C Technologies AB
+				Traktorvägen 11
+				Lund  Skåne  226 60
+				SE
+
+D4-4C-A7   (hex)		Informtekhnika & Communication, LLC
+D44CA7     (base 16)		Informtekhnika & Communication, LLC
+				1, build. 2/1, Verhnaya
+				Moscow    107140
+				RU
+
+A8-C2-22   (hex)		TM-Research Inc.
+A8C222     (base 16)		TM-Research Inc.
+				Hiyoshi Honcho 1-15-4
+				Yokohama  Kanagawa  223-0062
+				JP
+
+00-3D-41   (hex)		Hatteland Computer AS
+003D41     (base 16)		Hatteland Computer AS
+				Aamsosen
+				Nedre Vats  Rogaland  5578
+				NO
+
+CC-50-76   (hex)		Ocom Communications, Inc.
+CC5076     (base 16)		Ocom Communications, Inc.
+				13F-6, No. 1, Bao Sheng Rd., 
+				Yong Ho City    234
+				TW
+
+4C-C4-52   (hex)		Shang Hai Tyd. Electon Technology Ltd.
+4CC452     (base 16)		Shang Hai Tyd. Electon Technology Ltd.
+				Room No.5,N0.396,GuiLin Road, 
+				Shang Hai    200233
+				US
+
+7C-CB-0D   (hex)		Antaira Technologies, LLC
+7CCB0D     (base 16)		Antaira Technologies, LLC
+				445 Capricorn St.
+				Brea  California  92821
+				US
+
+C0-1E-9B   (hex)		Pixavi AS
+C01E9B     (base 16)		Pixavi AS
+				Dusavikveien 39
+				Stavanger    4003
+				NO
+
+80-3B-9A   (hex)		ghe-ces electronic ag
+803B9A     (base 16)		ghe-ces electronic ag
+				Hoemelstraße 17
+				Wald  ZH  8636
+				CH
+
+74-32-56   (hex)		NT-ware Systemprg GmbH
+743256     (base 16)		NT-ware Systemprg GmbH
+				Niedersachsenstrasse 6
+				Bad Iburg  NDS  49186
+				DE
+
+C4-E1-7C   (hex)		U2S co.
+C4E17C     (base 16)		U2S co.
+				104-706, SK Ventium Building, 522, Dangjeong-Dong
+				Gunpo-si  Geonggi-do  435-776
+				KR
+
+20-BF-DB   (hex)		DVL
+20BFDB     (base 16)		DVL
+				21 Gradinilor Str
+				Chisinau    MD2001
+				MD
+
+20-41-5A   (hex)		Smarteh d.o.o.
+20415A     (base 16)		Smarteh d.o.o.
+				Trg tigrovcev 1
+				Tolmin    5220
+				SI
+
+A4-DA-3F   (hex)		Bionics Corp.
+A4DA3F     (base 16)		Bionics Corp.
+				1406 Masters Tower
+				Seoul    121-748
+				KR
+
+A0-40-25   (hex)		Actioncable, Inc.
+A04025     (base 16)		Actioncable, Inc.
+				998 Westlynn Way
+				Cupertino  CA  95014
+				US
+
+4C-4B-68   (hex)		Mobile Device, Inc. 
+4C4B68     (base 16)		Mobile Device, Inc. 
+				 8F-1, No. 145, Sianjheng 9th Rd., 
+				Jhubei City,   Hsinchu County   30251
+				TW
+
+20-12-57   (hex)		Most Lucky Trading Ltd
+201257     (base 16)		Most Lucky Trading Ltd
+				Room403 No.506 Zhongshan South 2nd Road,Xuhui District 
+				Shanghai    200032
+				CN
+
+E8-DA-AA   (hex)		VideoHome Technology Corp.
+E8DAAA     (base 16)		VideoHome Technology Corp.
+				4F-1, No. 192, Da Tung Rd., Sec. 3, Hsichih,
+				Taipei Hsien    221
+				TW
+
+64-7D-81   (hex)		YOKOTA INDUSTRIAL CO,.LTD
+647D81     (base 16)		YOKOTA INDUSTRIAL CO,.LTD
+				5-55 NISHIIWATA
+				HIGASHI OSAKA-CITY  OSAKA  578-0947
+				JP
+
+7C-CF-CF   (hex)		Shanghai SEARI Intelligent System Co., Ltd
+7CCFCF     (base 16)		Shanghai SEARI Intelligent System Co., Ltd
+				No.505 Wuning Road, Putuo District
+				Shanghai    200063
+				CN
+
+68-AA-D2   (hex)		DATECS LTD.,
+68AAD2     (base 16)		DATECS LTD.,
+				BUL. TSARIGRADSKO SHOSSE 115A
+				SOFIA    1784
+				BG
+
+A4-DE-50   (hex)		Total Walther GmbH
+A4DE50     (base 16)		Total Walther GmbH
+				Frankfurter Ring 17
+				Munich    80807
+				DE
+
+1C-F0-61   (hex)		SCAPS GmbH
+1CF061     (base 16)		SCAPS GmbH
+				Bahnhofstraße 17
+				Deisenhofen  Bavaria  82041
+				DE
+
+A8-93-E6   (hex)		JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD
+A893E6     (base 16)		JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD
+				5F,301building,Tairan High-tech park, Chegongmiao,Futian zone,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+C4-AA-A1   (hex)		SUMMIT DEVELOPMENT, spol.s r.o.
+C4AAA1     (base 16)		SUMMIT DEVELOPMENT, spol.s r.o.
+				K Vodoteci 197
+				Orech  Praha-zapad  252 25
+				CZ
+
+30-32-D4   (hex)		Hanilstm Co., Ltd.
+3032D4     (base 16)		Hanilstm Co., Ltd.
+				138-6, Sangdaewon-dong Jungwon-gu
+				Seongnam  Kyonggi-do  462-120
+				KR
+
+E0-64-BB   (hex)		DigiView S.r.l.
+E064BB     (base 16)		DigiView S.r.l.
+				Via Senigallia 18/2
+				Milano    20161
+				IT
+
+DC-33-50   (hex)		TechSAT GmbH
+DC3350     (base 16)		TechSAT GmbH
+				Gruber Str. 46c
+				Poing  BY  85586
+				DE
+
+F0-BC-C8   (hex)		MaxID (Pty) Ltd
+F0BCC8     (base 16)		MaxID (Pty) Ltd
+				43 Homestead Road
+				Johannesburg  Gauteng  2128
+				ZA
+
+24-82-8A   (hex)		Prowave Technologies Ltd.
+24828A     (base 16)		Prowave Technologies Ltd.
+				2F,No.879-16,Zhongjiang Road
+				Shanghai    200333
+				CN
+
+68-CC-9C   (hex)		Mine Site Technologies
+68CC9C     (base 16)		Mine Site Technologies
+				113 Wicks Road
+				North Ryde  NSW  2113
+				AU
+
+14-6E-0A   (hex)		Private
+146E0A     (base 16)		Private
+
+0C-E7-09   (hex)		Fox Crypto B.V.
+0CE709     (base 16)		Fox Crypto B.V.
+				P.O. box 638
+				Delft  ZH  2600 AP
+				NL
+
+B4-B5-AF   (hex)		Minsung Electronics
+B4B5AF     (base 16)		Minsung Electronics
+				Mega-valley #620
+				Anyang-si  Kyeonggi-do  431-767
+				KR
+
+04-B3-B6   (hex)		Seamap (UK) Ltd
+04B3B6     (base 16)		Seamap (UK) Ltd
+				Unit 34, The Maltings
+				Shepton Mallet  Somerset  BA4 5QE
+				GB
+
+00-27-0B   (hex)		Adura Technologies
+00270B     (base 16)		Adura Technologies
+				28 Second Street
+				San Francisco  CA  94105
+				US
+
+00-27-0D   (hex)		Cisco Systems, Inc
+00270D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-27-1B   (hex)		Alec Sicherheitssysteme GmbH
+00271B     (base 16)		Alec Sicherheitssysteme GmbH
+				Friedrich-Hoelscher-Strasse 367
+				Dortmund    44328
+				DE
+
+00-27-18   (hex)		Suzhou NEW SEAUNION Video Technology Co.,Ltd
+002718     (base 16)		Suzhou NEW SEAUNION Video Technology Co.,Ltd
+				383 Jingmao Road, Industry Park
+				Suzhou  Jiangsu  215021
+				CN
+
+6C-0F-6A   (hex)		JDC Tech Co., Ltd.
+6C0F6A     (base 16)		JDC Tech Co., Ltd.
+				370-12 Daemyung-ri Daegot-myun
+				Kimpo-si  Kyunggi-do  410-853
+				KR
+
+04-B4-66   (hex)		BSP Co., Ltd.
+04B466     (base 16)		BSP Co., Ltd.
+				162-10
+				Gumi  Gyeungsangbuk Do  730-902
+				KR
+
+D8-D6-7E   (hex)		GSK CNC EQUIPMENT CO.,LTD
+D8D67E     (base 16)		GSK CNC EQUIPMENT CO.,LTD
+				No.7,1st Street,Luochong North Road,Luochongwei,No.7,1st Street,Luochong North Road,Luochongwei,No.7,1st Street,Luochong North Road,Luochongwei,
+				Guangzhou  Guangdong  510165
+				CN
+
+00-26-AE   (hex)		Wireless Measurement Ltd
+0026AE     (base 16)		Wireless Measurement Ltd
+				The Crescent
+				EMSWORTH    PO10 8JS
+				GB
+
+00-26-B1   (hex)		Navis Auto Motive Systems, Inc.
+0026B1     (base 16)		Navis Auto Motive Systems, Inc.
+				Busan, Centumjungang-ro 78, Centum Greentower 8th floor
+				BUSAN    612-822
+				KR
+
+00-26-AA   (hex)		Kenmec Mechanical Engineering Co., Ltd.
+0026AA     (base 16)		Kenmec Mechanical Engineering Co., Ltd.
+				3F, No. 97, Sec.2 Nan-Kang Rd.,
+				Taipei    11578
+				TW
+
+00-26-D2   (hex)		Pcube Systems, Inc.
+0026D2     (base 16)		Pcube Systems, Inc.
+				1857 O'Toole Lane
+				San Jose  CA  95131
+				US
+
+00-26-CD   (hex)		PurpleComm, Inc.
+0026CD     (base 16)		PurpleComm, Inc.
+				2620 Augustine Dr., Ste. 100
+				Santa Clara  CA  95054
+				US
+
+00-27-07   (hex)		Lift Complex DS, JSC
+002707     (base 16)		Lift Complex DS, JSC
+				mikrorayon Gorsky, 6
+				Novosibirsk    630073
+				RU
+
+00-26-D7   (hex)		KM Electornic Technology Co., Ltd.
+0026D7     (base 16)		KM Electornic Technology Co., Ltd.
+				5F, NO.3 Building, NO.118 Rd. Baoan District, Shenzhen China
+				Shenzhen  Guangdong  518101
+				CN
+
+00-26-D0   (hex)		Semihalf
+0026D0     (base 16)		Semihalf
+				ul. Wadowicka 8A
+				Krakow  ...  30-415
+				PL
+
+00-26-FE   (hex)		MKD Technology Inc.
+0026FE     (base 16)		MKD Technology Inc.
+				 R.B8, No.1 Lising 1st  Rd.,
+				Hsinchu    30078
+				TW
+
+00-26-A0   (hex)		moblic
+0026A0     (base 16)		moblic
+				7F, 271-1, Seohyeon-dong, Bundang-gu
+				Seongnam-si  Kyeonggi-do  463-824
+				KR
+
+00-26-E5   (hex)		AEG Power Solutions
+0026E5     (base 16)		AEG Power Solutions
+				Emil Siepmannstraße 32
+				Warstein  NRW  59581
+				DE
+
+00-26-E3   (hex)		DTI
+0026E3     (base 16)		DTI
+				Rue de la gare, 35
+				NANINNE  NAMUR  5100
+				BE
+
+00-26-BC   (hex)		General Jack Technology Ltd.
+0026BC     (base 16)		General Jack Technology Ltd.
+				The Area of Administration of Lian Bei,
+				Dong Guan  Guang Dong  523580
+				CN
+
+00-26-96   (hex)		NOOLIX Co., Ltd
+002696     (base 16)		NOOLIX Co., Ltd
+				DAECHANG B/D 3F, 8-2 SUNAE-DONG
+				SUNGNAM-SI  KYUNGGI-DO  463-825
+				KR
+
+00-26-9A   (hex)		Carina System Co., Ltd.
+00269A     (base 16)		Carina System Co., Ltd.
+				2-2-11 Kotonoo-cho
+				Kobe  Hyogo  651-0094
+				JP
+
+00-26-95   (hex)		ZT Group Int'l Inc
+002695     (base 16)		ZT Group Int'l Inc
+				350 Meadowlands Parkway
+				Secaucus  NJ  07094
+				US
+
+00-26-93   (hex)		QVidium Technologies, Inc.
+002693     (base 16)		QVidium Technologies, Inc.
+				12989 Chaparral Ridge Rd
+				San Diego  CA  92130
+				US
+
+00-26-65   (hex)		ProtectedLogic Corporation
+002665     (base 16)		ProtectedLogic Corporation
+				PO Box 67707
+				Albuquerque  NM  87193
+				US
+
+00-26-60   (hex)		Logiways
+002660     (base 16)		Logiways
+				24/26 rue Louis ARMAND
+				PARIS    75015
+				FR
+
+00-26-70   (hex)		Cinch Connectors
+002670     (base 16)		Cinch Connectors
+				1700 Finley Road
+				Lombard  IL  60148
+				US
+
+00-26-71   (hex)		AUTOVISION Co., Ltd
+002671     (base 16)		AUTOVISION Co., Ltd
+				Shinsegae YBS Bldg. 102
+				Seongdong-gu  Seoul  133-847
+				KR
+
+00-26-48   (hex)		Emitech Corp.
+002648     (base 16)		Emitech Corp.
+				No. 156-5A, ChengGong 1st St.,
+				Jhubei City  Hsinchu County  302
+				TW
+
+00-26-45   (hex)		Circontrol S.A.
+002645     (base 16)		Circontrol S.A.
+				Lepant 43
+				Terrassa  Barcelona  08223
+				ES
+
+00-26-3E   (hex)		Trapeze Networks
+00263E     (base 16)		Trapeze Networks
+				5753 West Las Positas Blvd.
+				Pleasanton  California  94588
+				US
+
+00-26-3C   (hex)		Bachmann Technology GmbH & Co. KG
+00263C     (base 16)		Bachmann Technology GmbH & Co. KG
+				Ernsthaldenstrasse 33
+				Stuttgart  BW  70565
+				DE
+
+00-26-3D   (hex)		MIA Corporation
+00263D     (base 16)		MIA Corporation
+				1-3-15 Yoshino-cho, Minami-ku
+				Yokohama  Kanagawa  232-0014
+				JP
+
+00-26-78   (hex)		Logic Instrument SA
+002678     (base 16)		Logic Instrument SA
+				43, Avenue de l'Europe
+				Domont    95330
+				FR
+
+00-26-77   (hex)		DEIF A/S
+002677     (base 16)		DEIF A/S
+				Frisenborgvej 33
+				Skive    7800
+				DK
+
+00-26-8E   (hex)		Alta Solutions, Inc.
+00268E     (base 16)		Alta Solutions, Inc.
+				11305 Rancho Bernardo Road
+				San Diego  CA  92127
+				US
+
+00-26-88   (hex)		Juniper Networks
+002688     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-25-DA   (hex)		Secura Key
+0025DA     (base 16)		Secura Key
+				20301 Nordhoff St.
+				Chatsworth  CA  91311
+				US
+
+00-25-DB   (hex)		ATI Electronics(Shenzhen) Co., LTD
+0025DB     (base 16)		ATI Electronics(Shenzhen) Co., LTD
+				2F,1st Buliding,Tangyanshan Industrial Park,
+				Shenzhen  Guangdong  518108
+				CN
+
+00-25-D5   (hex)		Robonica (Pty) Ltd
+0025D5     (base 16)		Robonica (Pty) Ltd
+				41 Park Avenue North
+				Centurion  Gauteng  0046
+				ZA
+
+00-25-E2   (hex)		Everspring Industry Co., Ltd.
+0025E2     (base 16)		Everspring Industry Co., Ltd.
+				7F., No. 609, Sec 1, Wanshou Rd.,
+				Gueishan Township  Taoyuan County  333
+				TW
+
+00-25-E1   (hex)		SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD
+0025E1     (base 16)		SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD
+				RM701,XIN'AN BUILDING,99 TIANZHOU RD,XUHUI DISTRICT,SHANGHAI
+				SHANGHAI    200233
+				CN
+
+00-26-0E   (hex)		Ablaze Systems, LLC
+00260E     (base 16)		Ablaze Systems, LLC
+				523 West Valley Road
+				Wayne  Pennsylvania  19087
+				US
+
+00-26-10   (hex)		Apacewave Technologies
+002610     (base 16)		Apacewave Technologies
+				48389 Fremont Blvd, STE#100
+				Fremont  CA  94538
+				US
+
+00-26-0D   (hex)		Mercury Systems, Inc.
+00260D     (base 16)		Mercury Systems, Inc.
+				26 Hampshire Dr
+				Hudson  NH  03051
+				US
+
+00-26-0A   (hex)		Cisco Systems, Inc
+00260A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-26-32   (hex)		Instrumentation Technologies d.d.
+002632     (base 16)		Instrumentation Technologies d.d.
+				Velika pot 22
+				Solkan  Nova Gorica  5250
+				SI
+
+00-26-2E   (hex)		Chengdu Jiuzhou Electronic Technology Inc
+00262E     (base 16)		Chengdu Jiuzhou Electronic Technology Inc
+				A2 Building,Tianfu Software Park
+				Chengdu  Sichuan  610041
+				CN
+
+00-26-2C   (hex)		IKT Advanced Technologies s.r.o.
+00262C     (base 16)		IKT Advanced Technologies s.r.o.
+				Piseckeho 334/19
+				Praha 5    15000
+				CZ
+
+00-26-29   (hex)		Juphoon System Software Inc.
+002629     (base 16)		Juphoon System Software Inc.
+				Room 910,Building 2
+				Ningbo  Zhejiang  315041
+				CN
+
+00-26-25   (hex)		MediaSputnik
+002625     (base 16)		MediaSputnik
+				Yaroslavskoe shosse, 19,
+				Moscow    129337
+				RU
+
+00-26-26   (hex)		Geophysical Survey Systems, Inc.
+002626     (base 16)		Geophysical Survey Systems, Inc.
+				12 Industrial Way
+				Salem  NH  03079
+				US
+
+00-25-CC   (hex)		Mobile Communications Korea Incorporated
+0025CC     (base 16)		Mobile Communications Korea Incorporated
+				1011-1012, Suwon High Venture Valley,
+				Suwon-si,  Gyeonggi-do,  441-360
+				KR
+
+00-25-F9   (hex)		GMK electronic design GmbH
+0025F9     (base 16)		GMK electronic design GmbH
+				Daimlerstraße 8
+				Wernberg-Koeblitz  Bavaria  D-92533
+				DE
+
+00-25-F7   (hex)		Ansaldo STS USA
+0025F7     (base 16)		Ansaldo STS USA
+				1000 Technology Drive
+				Pittsburgh  PA  15219
+				US
+
+00-26-1B   (hex)		LAUREL BANK MACHINES CO., LTD.
+00261B     (base 16)		LAUREL BANK MACHINES CO., LTD.
+				12-6
+				Kita-Ku  Tokyo  114-0013
+				JP
+
+00-26-14   (hex)		KTNF
+002614     (base 16)		KTNF
+				204,Daeryungtechnotown1,327,Gasan-Dong,
+				Seoul    153-771
+				KR
+
+00-26-03   (hex)		Shenzhen Wistar Technology Co., Ltd
+002603     (base 16)		Shenzhen Wistar Technology Co., Ltd
+				Rm919, Science &Technology Service Center
+				Shenzhen  Guangdong  518000
+				CN
+
+00-25-A6   (hex)		Central Network Solution Co., Ltd.
+0025A6     (base 16)		Central Network Solution Co., Ltd.
+				584-1, Pajang-Dong, JangAn-Gu
+				Suwon-Si,  Kyunggi-Do  440-854
+				KR
+
+00-25-AA   (hex)		Beijing Soul Technology Co.,Ltd.
+0025AA     (base 16)		Beijing Soul Technology Co.,Ltd.
+				Room 606,Xinzheng Office Building
+				BEIJING    100089
+				CN
+
+00-25-88   (hex)		Genie Industries, Inc.
+002588     (base 16)		Genie Industries, Inc.
+				18620 NE 67th Ct
+				Redmond  WA  98052
+				US
+
+00-25-80   (hex)		Equipson S.A.
+002580     (base 16)		Equipson S.A.
+				Poligono Ind. L´Alteró
+				Silla  Valencia  46460
+				ES
+
+00-25-BD   (hex)		Italdata Ingegneria dell'Idea S.p.A.
+0025BD     (base 16)		Italdata Ingegneria dell'Idea S.p.A.
+				viale Eroi di Cefalonia 123
+				Roma    00128
+				IT
+
+00-25-B7   (hex)		Costar  electronics, inc.,
+0025B7     (base 16)		Costar  electronics, inc.,
+				3fl,-1 no 13,lane 120,nei-hu road sec.1,
+				Taipei    114
+				TW
+
+00-25-7D   (hex)		PointRed Telecom Private Ltd.
+00257D     (base 16)		PointRed Telecom Private Ltd.
+				15F - 5., No. 1071, Zhongzheng Road,
+				Taoyuan City 330    330
+				TW
+
+00-25-A2   (hex)		Alta Definicion LINCEO S.L.
+0025A2     (base 16)		Alta Definicion LINCEO S.L.
+				Maria de Luna 11, nave 4
+				Zaragoza    Es-50018
+				ES
+
+00-25-6D   (hex)		Broadband Forum
+00256D     (base 16)		Broadband Forum
+				48377 Fremont Boulevard
+				Fremont  CA  94538
+				US
+
+00-25-6C   (hex)		Azimut Production Association JSC
+00256C     (base 16)		Azimut Production Association JSC
+				2-B Ataeva Street
+				Makhachkala  Dagestan  367005
+				RU
+
+00-25-63   (hex)		Luxtera Inc
+002563     (base 16)		Luxtera Inc
+				2320. Camino Vida Roble
+				Carlsbad  CA  92011
+				US
+
+00-25-93   (hex)		DatNet Informatikai Kft.
+002593     (base 16)		DatNet Informatikai Kft.
+				Hétvezér u. 5.
+				Szigetszentmiklós  Pest megye  2310
+				HU
+
+00-25-8E   (hex)		The Weather Channel
+00258E     (base 16)		The Weather Channel
+				Mail Stop 500
+				Atlanta  GA  30339
+				US
+
+00-25-A3   (hex)		Trimax Wireless, Inc.
+0025A3     (base 16)		Trimax Wireless, Inc.
+				2675 S Horseshoe Dr
+				Naples  FL  34104
+				US
+
+00-25-9C   (hex)		Cisco-Linksys, LLC
+00259C     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+00-25-C8   (hex)		S-Access GmbH
+0025C8     (base 16)		S-Access GmbH
+				Oberhausenstrasse 47
+				Wettswil a/A  Zuerich  8907
+				CH
+
+00-25-C0   (hex)		ZillionTV Corporation
+0025C0     (base 16)		ZillionTV Corporation
+				1170 Kifer Road
+				Sunnyvale  CA  94086
+				US
+
+00-25-1B   (hex)		Philips CareServant
+00251B     (base 16)		Philips CareServant
+				High Tech Campus 27
+				Eindhoven  Noord-Brabant  5656 AE
+				NL
+
+00-25-18   (hex)		Power PLUS Communications AG
+002518     (base 16)		Power PLUS Communications AG
+				Am Exerzierplatz 2
+				Mannheim  Baden Wuerttemberg  68167
+				DE
+
+00-25-15   (hex)		SFR
+002515     (base 16)		SFR
+				42 Quai du point du jour
+				Boulogne billancourt  .  92659
+				FR
+
+00-25-0D   (hex)		GZT Telkom-Telmor sp. z o.o.
+00250D     (base 16)		GZT Telkom-Telmor sp. z o.o.
+				Mickiewicza 5/7
+				Gdansk  pomorskie  80-425
+				PL
+
+00-25-0E   (hex)		gt german telematics gmbh
+00250E     (base 16)		gt german telematics gmbh
+				Rankestrasse 26
+				Berlin    D-10789
+				DE
+
+00-25-31   (hex)		Cloud Engines, Inc.
+002531     (base 16)		Cloud Engines, Inc.
+				857 Montgomery Street
+				San Francisco  CA  94133
+				US
+
+00-25-2D   (hex)		Kiryung Electronics
+00252D     (base 16)		Kiryung Electronics
+				Kiryung Bldg. 686-70, Sindaebang-dong
+				Seoul    156-010
+				KR
+
+00-25-45   (hex)		Cisco Systems, Inc
+002545     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-25-42   (hex)		Pittasoft
+002542     (base 16)		Pittasoft
+				#913 Daeryung Techno Town 8th 481-11ga
+				Geumcheon-gu  Seoul  153-775
+				KR
+
+00-25-36   (hex)		Oki Electric Industry Co., Ltd.
+002536     (base 16)		Oki Electric Industry Co., Ltd.
+				1-16-8 Chuou
+				Warabi-shi  Saitama  335-8510
+				JP
+
+00-25-41   (hex)		Maquet Critical Care AB
+002541     (base 16)		Maquet Critical Care AB
+				Röntgenvägen 2
+				Solna    SE-171 95
+				SE
+
+00-25-2B   (hex)		Stirling Energy Systems
+00252B     (base 16)		Stirling Energy Systems
+				Sandia National Labs - NSTTF
+				Albuquerque  NM  87185-1127
+				US
+
+00-25-24   (hex)		Lightcomm Technology Co., Ltd
+002524     (base 16)		Lightcomm Technology Co., Ltd
+				9/F.,Hi-Tech Venture Park Tower A,
+				ShenZhen  GuangDong  518040
+				CN
+
+00-25-4E   (hex)		Vertex Wireless Co., Ltd.
+00254E     (base 16)		Vertex Wireless Co., Ltd.
+				5F, Seohyeon Plaza, 254-5, Seohyeon-dong, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-824
+				KR
+
+00-25-46   (hex)		Cisco Systems, Inc
+002546     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-25-22   (hex)		ASRock Incorporation
+002522     (base 16)		ASRock Incorporation
+				2F., No. 37, Sec. 2, Jhongyang S. Rd., Beitou District,
+				Taipei    112
+				TW
+
+00-25-60   (hex)		Ibridge Networks & Communications Ltd.
+002560     (base 16)		Ibridge Networks & Communications Ltd.
+				28,Bedford Road East Ham
+				London    E6 2NN
+				GB
+
+00-24-B8   (hex)		free alliance sdn bhd
+0024B8     (base 16)		free alliance sdn bhd
+				B-3-2 Plaza Damas
+				Kuala Lumpur  WP  50480
+				MY
+
+00-24-B3   (hex)		Graf-Syteco GmbH & Co. KG
+0024B3     (base 16)		Graf-Syteco GmbH & Co. KG
+				Kaiserstraße 18
+				Tuningen  Baden-Württemberg  78609
+				DE
+
+00-24-F6   (hex)		MIYOSHI ELECTRONICS CORPORATION
+0024F6     (base 16)		MIYOSHI ELECTRONICS CORPORATION
+				3-13-21 KUSHIRO
+				KAWANISHI-CITY  HYOGO-PREF.  666-0024
+				JP
+
+00-24-F0   (hex)		Seanodes
+0024F0     (base 16)		Seanodes
+				Batiment Platon
+				Colomiers    31770
+				FR
+
+00-24-CB   (hex)		Autonet Mobile
+0024CB     (base 16)		Autonet Mobile
+				2235 Mercury Way Ste. 145
+				Santa Rosa  CA  95407
+				US
+
+00-24-D1   (hex)		Thomson Inc.
+0024D1     (base 16)		Thomson Inc.
+				101 West 103rd Street
+				Indianapolis  IN  46290
+				US
+
+00-24-C9   (hex)		Broadband Solutions Group
+0024C9     (base 16)		Broadband Solutions Group
+				1101 Marina Village Parkway
+				Alameda  CA  94501
+				US
+
+00-24-CA   (hex)		Tobii Technology AB
+0024CA     (base 16)		Tobii Technology AB
+				Karlsrovägen 2D
+				Danderyd    18253
+				SE
+
+00-25-08   (hex)		Maquet Cardiopulmonary AG
+002508     (base 16)		Maquet Cardiopulmonary AG
+				Hechinger Strasse 38
+				Hirrlingen    72145
+				DE
+
+00-24-FC   (hex)		QuoPin Co., Ltd.
+0024FC     (base 16)		QuoPin Co., Ltd.
+				#109, R&D Center for Advanced Technology 68 Yatap-dong Bundang-gu
+				Seongnam  Kyungki-do  463-816
+				KR
+
+00-24-FB   (hex)		Private
+0024FB     (base 16)		Private
+
+00-24-FA   (hex)		Hilger u. Kern GMBH
+0024FA     (base 16)		Hilger u. Kern GMBH
+				Kaefertaler Strasse 253-255
+				Mannheim  Baden-Württemberg  68167
+				DE
+
+00-24-D0   (hex)		Shenzhen SOGOOD Industry CO.,LTD.
+0024D0     (base 16)		Shenzhen SOGOOD Industry CO.,LTD.
+				SOGOOD Science Park,Aviation Road,XiXiang Town,Bao'an District,
+				Shenzhen  Guangzhou  518102
+				CN
+
+00-24-CC   (hex)		Fascinations Toys and Gifts, Inc.
+0024CC     (base 16)		Fascinations Toys and Gifts, Inc.
+				19224 Des Moines Way S
+				Seattle  Washington  98148
+				US
+
+00-24-C7   (hex)		Mobilarm Ltd
+0024C7     (base 16)		Mobilarm Ltd
+				768 Canning Highway
+				  Western Australia  6153
+				AU
+
+00-24-DF   (hex)		Digitalbox Europe GmbH
+0024DF     (base 16)		Digitalbox Europe GmbH
+				Sandstraße 65
+				Ratingen    40878
+				DE
+
+00-24-45   (hex)		Adtran Inc
+002445     (base 16)		Adtran Inc
+				901 Explorer Blvd.
+				Huntsville  AL  35806-2807
+				US
+
+00-24-3F   (hex)		Storwize, Inc.
+00243F     (base 16)		Storwize, Inc.
+				11 Alatlef St.
+				Yehud    56216
+				IL
+
+00-24-97   (hex)		Cisco Systems, Inc
+002497     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-A3   (hex)		Sonim Technologies Inc
+0024A3     (base 16)		Sonim Technologies Inc
+				1875 S.Grant Street
+				Sanmateo  CA  94402
+				US
+
+00-24-AA   (hex)		Dycor Technologies Ltd.
+0024AA     (base 16)		Dycor Technologies Ltd.
+				1851 94 Street
+				Edmonton  Alberta  T6N 1E6
+				CA
+
+00-24-A9   (hex)		Ag Leader Technology
+0024A9     (base 16)		Ag Leader Technology
+				2202 S Riverside Dr.
+				Ames  IA  50010
+				US
+
+00-24-A6   (hex)		TELESTAR DIGITAL GmbH
+0024A6     (base 16)		TELESTAR DIGITAL GmbH
+				Vulkanhöhe / B410
+				Dreis-Brück    54552
+				DE
+
+00-24-9B   (hex)		Action Star Enterprise Co., Ltd.
+00249B     (base 16)		Action Star Enterprise Co., Ltd.
+				10F, No.159, Sec.2, Datong Rd.
+				Xizhi Dist.  New Taipei City  221
+				TW
+
+00-24-71   (hex)		Fusion MultiSystems dba Fusion-io
+002471     (base 16)		Fusion MultiSystems dba Fusion-io
+				6350 S. 3000 E., 6th floor
+				Salt lake City  UT  84121
+				US
+
+00-24-74   (hex)		Autronica Fire And Securirty
+002474     (base 16)		Autronica Fire And Securirty
+				Haakon VII's g.4
+				  Trondheim  N-7483
+				NO
+
+00-24-46   (hex)		MMB Research Inc.
+002446     (base 16)		MMB Research Inc.
+				35 Prince Arthur Ave.
+				Toronto  Ontario  M5R 1B2
+				CA
+
+00-24-63   (hex)		Phybridge Inc
+002463     (base 16)		Phybridge Inc
+				3495 Laird Rd
+				Mississauga  Ontario  L5L5S5
+				CA
+
+00-24-72   (hex)		ReDriven Power Inc.
+002472     (base 16)		ReDriven Power Inc.
+				24A Bath Rd.
+				Iroquois  Ontario  K0E 1K0
+				CA
+
+00-24-1C   (hex)		FuGang Electronic (DG) Co.,Ltd
+00241C     (base 16)		FuGang Electronic (DG) Co.,Ltd
+				Industry Street, Dong-Keng
+				Dong Guan City    523448
+				CN
+
+00-24-19   (hex)		Private
+002419     (base 16)		Private
+
+00-24-15   (hex)		Magnetic Autocontrol GmbH
+002415     (base 16)		Magnetic Autocontrol GmbH
+				Grienmatt 20
+				Schopfheim    D-79650
+				DE
+
+00-23-E7   (hex)		Hinke A/S
+0023E7     (base 16)		Hinke A/S
+				Tingbjergvej 2
+				Bjaeverskov    DK-4632
+				DK
+
+00-23-E2   (hex)		SEA Signalisation
+0023E2     (base 16)		SEA Signalisation
+				20-22 Rue Pierre Mendès France
+				Vaulx en Velin CEDEX    69515
+				FR
+
+00-24-25   (hex)		Shenzhenshi chuangzhicheng Technology Co.,Ltd
+002425     (base 16)		Shenzhenshi chuangzhicheng Technology Co.,Ltd
+				5th Floor,Block2,25th Building,Industrial Zone West Keyuan Sci-tech Garden Nanshan Districh,Shenzhen
+				Shenzhen  Guangdong  518057
+				CN
+
+00-24-27   (hex)		SSI COMPUTER CORP
+002427     (base 16)		SSI COMPUTER CORP
+				4F, NO4, LANE 235, BAO CHIAO ROAD
+				HSIN TIEN  TAIPEI  231
+				TW
+
+00-24-11   (hex)		PharmaSmart LLC
+002411     (base 16)		PharmaSmart LLC
+				3495 Winton Place
+				Rochester  NY  14623
+				US
+
+00-24-0F   (hex)		Ishii Tool & Engineering Corporation
+00240F     (base 16)		Ishii Tool & Engineering Corporation
+				2-5-60 Higashi-Omichi
+				Oita    870-0823
+				JP
+
+00-23-FA   (hex)		RG Nets, Inc.
+0023FA     (base 16)		RG Nets, Inc.
+				316 California Ave.
+				Reno  NV  89501
+				US
+
+00-23-F2   (hex)		TVLogic
+0023F2     (base 16)		TVLogic
+				suite 914 ACE Techno Tower-9th
+				Geumcheon-gu  SEOUL  153-782
+				KR
+
+00-24-0A   (hex)		US Beverage Net
+00240A     (base 16)		US Beverage Net
+				1001 W. Fayette Street
+				Syracuse  NY  13204
+				US
+
+00-24-07   (hex)		TELEM SAS
+002407     (base 16)		TELEM SAS
+				16, RUE DE L'ETANG
+				GIERES  RHONE ALPES  38610
+				FR
+
+00-24-40   (hex)		Halo Monitoring, Inc.
+002440     (base 16)		Halo Monitoring, Inc.
+				515 Sparkman Dr.
+				Huntsville  AL  35816
+				US
+
+00-23-CF   (hex)		CUMMINS-ALLISON CORP.
+0023CF     (base 16)		CUMMINS-ALLISON CORP.
+				891 FEEHANVILLE DRIVE
+				MT. PROSPECT  IL  60056
+				US
+
+00-23-C2   (hex)		SAMSUNG Electronics. Co. LTD
+0023C2     (base 16)		SAMSUNG Electronics. Co. LTD
+				19th Fl., Korea Life Bldg. 1338-12
+				Seoul    137-860
+				KR
+
+00-23-C4   (hex)		Lux Lumen
+0023C4     (base 16)		Lux Lumen
+				Kernenergiestraat 53A
+				Wilrijk  Antwerp  2610
+				BE
+
+00-23-C5   (hex)		Radiation Safety and Control Services Inc
+0023C5     (base 16)		Radiation Safety and Control Services Inc
+				91 Portsmouth Ave
+				Stratham  New Hampshire  03885
+				US
+
+00-23-C6   (hex)		SMC Corporation
+0023C6     (base 16)		SMC Corporation
+				4-2-2, Kinunodai
+				Tsukuba Mirai-shi  Ibaraki-ken  300-2493
+				JP
+
+00-23-88   (hex)		V.T. Telematica S.p.a.
+002388     (base 16)		V.T. Telematica S.p.a.
+				Via Gorky, 21
+				San Giuliano Milanese  Milano  20098
+				IT
+
+00-23-83   (hex)		InMage Systems Inc
+002383     (base 16)		InMage Systems Inc
+				3255-1 Scott Blvd, #104
+				Santa Clara  CA  95054
+				US
+
+00-23-81   (hex)		Lengda Technology(Xiamen) Co.,Ltd.
+002381     (base 16)		Lengda Technology(Xiamen) Co.,Ltd.
+				5/F, 47 Haijing South 2nd Road,Xiamen Export Processing Zone, Haicang District,
+				Xiamen  Fujian  361026
+				CN
+
+00-23-BF   (hex)		Mainpine, Inc.
+0023BF     (base 16)		Mainpine, Inc.
+				PO Box 241
+				Wilsonville  Oregon  97070-0241
+				US
+
+00-23-B2   (hex)		Intelligent Mechatronic Systems Inc
+0023B2     (base 16)		Intelligent Mechatronic Systems Inc
+				161 Roger Street
+				Waterloo  Ontario  N2J 1B1
+				CA
+
+00-23-B5   (hex)		ORTANA LTD
+0023B5     (base 16)		ORTANA LTD
+				OSTIM KOCASINAN SANAYI SITESI
+				ANKARA    06370
+				TR
+
+00-23-B9   (hex)		 Airbus Defence and Space Deutschland GmbH
+0023B9     (base 16)		 Airbus Defence and Space Deutschland GmbH
+				Willy-Messerschmitt-Strasse 1,
+				Taufkirchen    82024 
+				DE
+
+00-23-BD   (hex)		Digital Ally, Inc.
+0023BD     (base 16)		Digital Ally, Inc.
+				1218 Valley Ridge Drive
+				Grain Valley  MO  64029
+				US
+
+00-23-C9   (hex)		Sichuan Tianyi Information Science & Technology Stock CO.,LTD
+0023C9     (base 16)		Sichuan Tianyi Information Science & Technology Stock CO.,LTD
+				No.1,Hot Spring Highway,Dayi County
+				Chengdu  Sichuan  611330
+				US
+
+00-23-CE   (hex)		KITA DENSHI CORPORATION
+0023CE     (base 16)		KITA DENSHI CORPORATION
+				12F TOKYO-NISHIIKEBUKURO Bilg.,
+				Toshima-ku,  Tokyo  171-0021
+				JP
+
+00-23-A9   (hex)		Beijing Detianquan Electromechanical Equipment Co., Ltd
+0023A9     (base 16)		Beijing Detianquan Electromechanical Equipment Co., Ltd
+				No. 2 Chapeng Road, Haidian District,
+				Beijing    100091
+				CN
+
+00-23-9B   (hex)		Elster Solutions, LLC
+00239B     (base 16)		Elster Solutions, LLC
+				208 South Rogers Lane
+				Raleigh  North Carolina  27610
+				US
+
+00-23-7B   (hex)		WHDI LLC
+00237B     (base 16)		WHDI LLC
+				2350 Mission College Blvd.
+				Santa Clara  CA  95054
+				US
+
+00-23-24   (hex)		G-PRO COMPUTER
+002324     (base 16)		G-PRO COMPUTER
+				first arrange C, YingHu industrial estate
+				DongGuan City  GuangDong Province  523648
+				CN
+
+00-23-E0   (hex)		INO Therapeutics LLC
+0023E0     (base 16)		INO Therapeutics LLC
+				2902 Dairy Drive
+				Madison  WI  53718
+				US
+
+00-23-90   (hex)		Algolware Corporation
+002390     (base 16)		Algolware Corporation
+				13F-5, No. 77, Sec. 1, Sintai 5th Rd.,
+				Taipei County  Taiwan  221
+				TW
+
+00-23-11   (hex)		Gloscom Co., Ltd.
+002311     (base 16)		Gloscom Co., Ltd.
+				#507 Changhyun Bldg.
+				Anyang City  Kyunggo-do  431-080
+				KR
+
+00-23-09   (hex)		Janam Technologies LLC
+002309     (base 16)		Janam Technologies LLC
+				100 Crossways Park West
+				Woodbury  NY  11797
+				US
+
+00-23-04   (hex)		Cisco Systems, Inc
+002304     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-23-5D   (hex)		Cisco Systems, Inc
+00235D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-23-5C   (hex)		Aprius, Inc.
+00235C     (base 16)		Aprius, Inc.
+				440 N. Wolfe Rd
+				Sunnyvale  CA  94085
+				US
+
+00-23-52   (hex)		DATASENSOR S.p.A.
+002352     (base 16)		DATASENSOR S.p.A.
+				Via Lavino, 265
+				Monte San Pietro (BO)    40050
+				IT
+
+00-23-2F   (hex)		Advanced Card Systems Ltd.
+00232F     (base 16)		Advanced Card Systems Ltd.
+				Unit 2010-13, Chevalier Commercial Centre,
+				Kowloon Bay,  SAR  
+				HK
+
+00-23-53   (hex)		F E T Elettronica snc
+002353     (base 16)		F E T Elettronica snc
+				Via Alessandro Manzoni 14/a
+				Poggibonsi  Siena  53036
+				IT
+
+00-23-42   (hex)		Coffee Equipment Company
+002342     (base 16)		Coffee Equipment Company
+				4216 6th Ave NW
+				Seattle  WA  98107
+				US
+
+00-23-37   (hex)		Global Star Solutions ULC
+002337     (base 16)		Global Star Solutions ULC
+				4600 Jacombs Road
+				Richmond  BC  V6V 3B1
+				CA
+
+00-23-19   (hex)		Sielox LLC
+002319     (base 16)		Sielox LLC
+				170 East Ninth Ave.
+				Runnemede  NJ  08078
+				US
+
+00-23-6A   (hex)		SmartRG Inc
+00236A     (base 16)		SmartRG Inc
+				501 SE Columbia Shores Blvd
+				Vancouver  WA  98661
+				US
+
+00-23-31   (hex)		Nintendo Co., Ltd.
+002331     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-23-35   (hex)		Linkflex Co.,Ltd
+002335     (base 16)		Linkflex Co.,Ltd
+				5F. Min Young Bldg. 175-2
+				Seoul    135-010
+				KR
+
+00-23-25   (hex)		IOLAN Holding
+002325     (base 16)		IOLAN Holding
+				Mon Plaisir 26
+				Etten Leur    4879AN
+				NL
+
+00-23-21   (hex)		Avitech International Corp
+002321     (base 16)		Avitech International Corp
+				15333 NE 90th Street
+				Redmond  WA  98052
+				US
+
+00-23-70   (hex)		Snell
+002370     (base 16)		Snell
+				Hartman House
+				Reading  Berks  RG6 4PB
+				GB
+
+00-22-B9   (hex)		Analogix Seminconductor, Inc
+0022B9     (base 16)		Analogix Seminconductor, Inc
+				3211 Scott Blvd., Suite 100
+				Santa Clara  CA  95054
+				US
+
+00-22-B8   (hex)		Norcott
+0022B8     (base 16)		Norcott
+				Brookfield House, Grimsditch Lane off Tarporley Road
+				Cheshire    WA4 4EA
+				GB
+
+00-22-B7   (hex)		GSS Grundig SAT-Systems GmbH
+0022B7     (base 16)		GSS Grundig SAT-Systems GmbH
+				Beutherner Strasse 43
+				Nuernberg  Bayern  90471
+				DE
+
+00-22-B3   (hex)		Sei S.p.A.
+0022B3     (base 16)		Sei S.p.A.
+				Via Ruffilli, 1
+				Curno  Bergamo  24035
+				IT
+
+00-22-9C   (hex)		Verismo Networks Inc
+00229C     (base 16)		Verismo Networks Inc
+				295 Bernando Avenue
+				Mountain View  CA  94043
+				US
+
+00-22-9A   (hex)		Lastar, Inc.
+00229A     (base 16)		Lastar, Inc.
+				3555 Kettering BLVD.
+				Moraine  Ohio  45439
+				US
+
+00-22-EE   (hex)		Algo Communication Products Ltd
+0022EE     (base 16)		Algo Communication Products Ltd
+				4500 Beedie Street
+				Burnaby  BC  V5J 5L2
+				CA
+
+00-22-EA   (hex)		Rustelcom Inc.
+0022EA     (base 16)		Rustelcom Inc.
+				Garagniy proezd, 1
+				St.-Petersburg    192288
+				RU
+
+00-22-F0   (hex)		3 Greens Aviation Limited
+0022F0     (base 16)		3 Greens Aviation Limited
+				10 Hedingham Close
+				Macclesfield    SK10 3LZ
+				GB
+
+00-22-EC   (hex)		IDEALBT TECHNOLOGY CORPORATION
+0022EC     (base 16)		IDEALBT TECHNOLOGY CORPORATION
+				6F., NO.8, LANE 345, YANGGUANG ST., NEIHU DISTRICT
+				Taipei    114
+				TW
+
+00-22-DD   (hex)		Protecta Electronics Ltd
+0022DD     (base 16)		Protecta Electronics Ltd
+				Kesmark str 7/A
+				Budapest  Hungary  1158
+				HU
+
+00-22-AB   (hex)		Shenzhen Turbosight Technology Ltd
+0022AB     (base 16)		Shenzhen Turbosight Technology Ltd
+				Unit C-8A,Shennan Garden Bldg,Hightech Park,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+00-22-9B   (hex)		AverLogic Technologies, Inc.
+00229B     (base 16)		AverLogic Technologies, Inc.
+				7F-2, No.2, Lane 258, Rui Guang Rd., Nei-Hu Dist.,
+				Taipei  Taiwan  114
+				TW
+
+00-22-BE   (hex)		Cisco Systems, Inc
+0022BE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-22-BF   (hex)		SieAmp Group of Companies
+0022BF     (base 16)		SieAmp Group of Companies
+				2 Ang Mo Kio Street 64
+				Singapore    569084
+				US
+
+00-22-DB   (hex)		Translogic Corporation
+0022DB     (base 16)		Translogic Corporation
+				10825 E. 47th Avenue
+				Denver  Colorado  80239
+				US
+
+00-22-DA   (hex)		ANATEK, LLC
+0022DA     (base 16)		ANATEK, LLC
+				3219 East Camelback Road
+				Phoenix  AZ  85018
+				US
+
+00-22-F9   (hex)		Pollin Electronic GmbH
+0022F9     (base 16)		Pollin Electronic GmbH
+				Max-Pollin-Str. 1
+				Pfoerring    85104
+				DE
+
+00-22-C5   (hex)		INFORSON Co,Ltd.
+0022C5     (base 16)		INFORSON Co,Ltd.
+				Room 704,Tower B1, ChangYuanTianDi Plaza
+				BeiJing City    100080
+				CN
+
+00-22-62   (hex)		BEP Marine
+002262     (base 16)		BEP Marine
+				13 Tarndale Grove Albany
+				Auckland    0632
+				NZ
+
+00-22-6A   (hex)		Honeywell
+00226A     (base 16)		Honeywell
+				8840 Evergreen Blvd.
+				Minneapolis  MN  55433-6040
+				US
+
+00-22-63   (hex)		Koos Technical Services, Inc.
+002263     (base 16)		Koos Technical Services, Inc.
+				1025 Greenwood Blvd.
+				Lake Mary  FL  32746
+				US
+
+00-22-6C   (hex)		LinkSprite Technologies, Inc.
+00226C     (base 16)		LinkSprite Technologies, Inc.
+				1410 Cannon Mountain Dr
+				Longmont  CO  80503
+				US
+
+00-22-5C   (hex)		Multimedia & Communication Technology
+00225C     (base 16)		Multimedia & Communication Technology
+				Digital Empire D-801 #980-3
+				Suwon-City  KyeongGi-Do  443-813
+				KR
+
+00-22-84   (hex)		DESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD
+002284     (base 16)		DESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD
+				DESAY 3rd Zone,Chenjiang,
+				Huizhou  Guangdong  516229
+				CN
+
+00-22-86   (hex)		ASTRON
+002286     (base 16)		ASTRON
+				Oudehoogeveensedijk 4
+				Dwingeloo  Drenthe  7991PD
+				NL
+
+00-22-82   (hex)		8086 Consultancy
+002282     (base 16)		8086 Consultancy
+				17 Lowfield Lane
+				Newark  Notts  NG24 3HJ
+				GB
+
+00-22-46   (hex)		Evoc Intelligent Technology Co.,Ltd.
+002246     (base 16)		Evoc Intelligent Technology Co.,Ltd.
+				No.31 Gaoxin Centeral Avenue 4th Road,Nanshan District Shenzhen City
+				Shenzhen  Guangdong  518057
+				CN
+
+00-22-48   (hex)		Microsoft Corporation
+002248     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				Redmond  Washington  98052-6399
+				US
+
+00-22-90   (hex)		Cisco Systems, Inc
+002290     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-22-8A   (hex)		Teratronik elektronische systeme gmbh
+00228A     (base 16)		Teratronik elektronische systeme gmbh
+				Karl-Ulrich-Strasse 1
+				Gross-Umstadt    D-64823
+				DE
+
+00-22-8E   (hex)		TV-NUMERIC
+00228E     (base 16)		TV-NUMERIC
+				24-26 rue Louis Armand
+				Paris    75015
+				FR
+
+00-22-54   (hex)		Bigelow Aerospace
+002254     (base 16)		Bigelow Aerospace
+				1899 W. Brooks Ave
+				North Las Vegas  NV  89032
+				US
+
+00-22-57   (hex)		3COM EUROPE LTD
+002257     (base 16)		3COM EUROPE LTD
+				Peoplebuilding 2
+				Hemel Hempstead  HERTS.  HP2 4NW
+				GB
+
+00-22-76   (hex)		Triple EYE B.V.
+002276     (base 16)		Triple EYE B.V.
+				Vaassenseweg 71
+				Emst    8166 AT
+				NL
+
+00-22-74   (hex)		FamilyPhone AB
+002274     (base 16)		FamilyPhone AB
+				Anckargripsgatan 3
+				Malmö    21119
+				SE
+
+00-22-36   (hex)		VECTOR SP. Z O.O.
+002236     (base 16)		VECTOR SP. Z O.O.
+				KRZEMOWA 6
+				GDYNIA    81-577
+				PL
+
+00-22-30   (hex)		FutureLogic Inc.
+002230     (base 16)		FutureLogic Inc.
+				425 E. Colorado St., Ste. 100
+				Glendale  CA  91205
+				US
+
+00-22-2E   (hex)		maintech GmbH
+00222E     (base 16)		maintech GmbH
+				Seeweg 60
+				Höchberg  Bavaria  97204
+				DE
+
+00-22-14   (hex)		RINNAI KOREA
+002214     (base 16)		RINNAI KOREA
+				560-2, Shibjong-1dong, Pupyoung-gu
+				Pupyoung-gu  Incheon  403-847
+				KR
+
+00-22-0B   (hex)		National Source Coding Center
+00220B     (base 16)		National Source Coding Center
+				Suite 701,Power Creative A,No.1
+				Beijing    100085
+				CN
+
+00-22-0C   (hex)		Cisco Systems, Inc
+00220C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-21-EA   (hex)		Bystronic Laser AG
+0021EA     (base 16)		Bystronic Laser AG
+				Industriestrasse 21
+				3362  Niederönz  
+				CH
+
+00-21-FD   (hex)		LACROIX TRAFFIC S.A.U
+0021FD     (base 16)		LACROIX TRAFFIC S.A.U
+				Majada 4
+				Tres Cantos  Madrid  28760
+				ES
+
+00-21-CD   (hex)		LiveTV
+0021CD     (base 16)		LiveTV
+				1333 Gateway Drive, Suite 1007
+				Melbourne  Florida  32901
+				US
+
+00-21-D0   (hex)		Global Display Solutions Spa
+0021D0     (base 16)		Global Display Solutions Spa
+				Via Tezze, 20/A
+				Cornedo Vicentino  Vicenza  36073
+				IT
+
+00-22-28   (hex)		Breeze Innovations Ltd.
+002228     (base 16)		Breeze Innovations Ltd.
+				Har Hotzvim, P.O. Box 45397
+				Jerusalem  Israel  91451
+				IL
+
+00-22-29   (hex)		Compumedics Ltd
+002229     (base 16)		Compumedics Ltd
+				30 - 40 Flockhart Street
+				Abbotsford  Victoria  3067
+				AU
+
+00-22-16   (hex)		SHIBAURA VENDING MACHINE CORPORATION
+002216     (base 16)		SHIBAURA VENDING MACHINE CORPORATION
+				Ekimae-cho13-10
+				Obama-shi  Fukui-ken  917-0077
+				JP
+
+00-21-E1   (hex)		Nortel Networks
+0021E1     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75081
+				US
+
+00-22-00   (hex)		IBM Corp
+002200     (base 16)		IBM Corp
+				2051 Mission College Blvd 
+				Santa Clara  CA  95054
+				US
+
+00-21-C6   (hex)		CSJ Global, Inc.
+0021C6     (base 16)		CSJ Global, Inc.
+				9th Fl. Samwhan Bldg. Annex, 17-26 Yeouido-dong,
+				Seoul    150-874
+				KR
+
+00-21-C3   (hex)		CORNELL Communications, Inc.
+0021C3     (base 16)		CORNELL Communications, Inc.
+				7915 N. 81st Street
+				Milwaukee  Wisconsin  53223
+				US
+
+00-21-C7   (hex)		Russound
+0021C7     (base 16)		Russound
+				5 Forbes Road
+				Newmarket  NH  03857
+				US
+
+00-21-C1   (hex)		ABB Oy / Medium Voltage Products
+0021C1     (base 16)		ABB Oy / Medium Voltage Products
+				PO Box 699
+				Vaasa    FI-65101
+				FI
+
+00-21-C0   (hex)		Mobile Appliance, Inc.
+0021C0     (base 16)		Mobile Appliance, Inc.
+				#819 Kranz Techno,
+				Seong nam  Gyeonggi-Do  462-729
+				KR
+
+00-21-BB   (hex)		Riken Keiki Co., Ltd.
+0021BB     (base 16)		Riken Keiki Co., Ltd.
+				 2-7-6 Azusawa
+				Itabashi-Ku  Tokyo  174-8744
+				JP
+
+00-21-66   (hex)		NovAtel Inc.
+002166     (base 16)		NovAtel Inc.
+				1120 - 68 Ave NE
+				Calgary  Alberta  T2E 8S5
+				CA
+
+00-21-64   (hex)		Special Design Bureau for Seismic Instrumentation
+002164     (base 16)		Special Design Bureau for Seismic Instrumentation
+				129, Krainyaya Str.
+				Saratov  Saratov region  410019
+				RU
+
+00-21-60   (hex)		Hidea Solutions Co. Ltd.
+002160     (base 16)		Hidea Solutions Co. Ltd.
+				4F, Do&Can house Dldg., #656-1683, Seongsu 1-ga 2-dong, Seongdong-gu
+				Seoul    656-1683
+				KR
+
+00-21-B1   (hex)		DIGITAL SOLUTIONS LTD
+0021B1     (base 16)		DIGITAL SOLUTIONS LTD
+				Tsarigradsko Shose 7km BLVD
+				Sofia  Sofia  1784
+				BG
+
+00-21-B0   (hex)		Tyco Telecommunications
+0021B0     (base 16)		Tyco Telecommunications
+				1011 Pawtucket Blvd
+				Lowell  Massachusetts  01853
+				US
+
+00-21-AD   (hex)		Nordic ID Oy
+0021AD     (base 16)		Nordic ID Oy
+				Myllyojankatu 2A
+				SALO    FIN-24100
+				FI
+
+00-21-7F   (hex)		Intraco Technology Pte Ltd
+00217F     (base 16)		Intraco Technology Pte Ltd
+				750e Chai Chee Road #05-01
+				Singapore    4690005
+				SG
+
+00-21-7D   (hex)		PYXIS S.R.L.
+00217D     (base 16)		PYXIS S.R.L.
+				C/O DIP. INFORMATICA E SISTEMISTICA - UNIVERSITY OF PAVIA
+				PAVIA    27100
+				IT
+
+00-21-6F   (hex)		SymCom, Inc.
+00216F     (base 16)		SymCom, Inc.
+				2880 North Plaza Drive
+				Rapid City  SD  57702
+				US
+
+00-21-A3   (hex)		Micromint
+0021A3     (base 16)		Micromint
+				111 Commerce St
+				Lake Mary  FL  32746
+				US
+
+00-21-A5   (hex)		ERLPhase Power Technologies Ltd.
+0021A5     (base 16)		ERLPhase Power Technologies Ltd.
+				74 Scurfield Blvd.
+				Winnipeg  Manitoba  R3Y 1G4
+				CA
+
+00-21-9D   (hex)		Adesys BV
+00219D     (base 16)		Adesys BV
+				Molenweer 4
+				Wateringen  Zuid Holland  2291 NR
+				NL
+
+00-21-95   (hex)		GWD Media Limited
+002195     (base 16)		GWD Media Limited
+				10 Leeds Road
+				Sheffield  South Yorkshire  S9 3TY
+				GB
+
+00-21-88   (hex)		EMC Corporation
+002188     (base 16)		EMC Corporation
+				2421 Mission College Blvd
+				Santa Clara  CA  95050
+				US
+
+00-21-1A   (hex)		LInTech Corporation
+00211A     (base 16)		LInTech Corporation
+				Krasnokazarmennaya st., 12
+				Moscow    111250
+				RU
+
+00-21-16   (hex)		Transcon Electronic Systems, spol. s r. o.
+002116     (base 16)		Transcon Electronic Systems, spol. s r. o.
+				Kvapilova 2133
+				Frydek-Mistek    73802
+				CZ
+
+00-21-15   (hex)		PHYWE Systeme GmbH & Co. KG
+002115     (base 16)		PHYWE Systeme GmbH & Co. KG
+				Robert-Bosch-Breite 10
+				Goettingen  Niedersachsen  37079
+				DE
+
+00-21-41   (hex)		RADLIVE
+002141     (base 16)		RADLIVE
+				4 Hanechoshet St.
+				Tel Aviv    69710
+				IL
+
+00-21-40   (hex)		EN Technologies Inc.
+002140     (base 16)		EN Technologies Inc.
+				Geumbok Bldg. 9F, Band-yi-dong 45-2, Songpa-gu
+				Seoul    138-828
+				KR
+
+00-21-3D   (hex)		Cermetek Microelectronics, Inc.
+00213D     (base 16)		Cermetek Microelectronics, Inc.
+				374 Turquoise Street
+				Milpitas  CA  95035
+				US
+
+00-21-11   (hex)		Uniphone Inc.
+002111     (base 16)		Uniphone Inc.
+				795 Main Street
+				Half Moon Bay  CA  94019
+				US
+
+00-21-14   (hex)		Hylab Technology Inc.
+002114     (base 16)		Hylab Technology Inc.
+				15F-2.,No.872,Jhongjheng Rd.
+				Jhonghe City,  Taipei  235
+				TW
+
+00-21-32   (hex)		Masterclock, Inc.
+002132     (base 16)		Masterclock, Inc.
+				2484 W. Clay St.
+				St. Charles  MO  63301
+				US
+
+00-21-31   (hex)		Blynke Inc.
+002131     (base 16)		Blynke Inc.
+				133 Richmond St. West
+				Toronto  Ontario  M5H 2L3
+				CA
+
+00-21-29   (hex)		Cisco-Linksys, LLC
+002129     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+00-21-1D   (hex)		Dataline AB
+00211D     (base 16)		Dataline AB
+				Katrinedalsgatan 53
+				Borås    S-50451
+				SE
+
+00-21-20   (hex)		Sequel Technologies
+002120     (base 16)		Sequel Technologies
+				2951 Cleveland Ave N
+				Roseville  MN  55113
+				US
+
+00-21-52   (hex)		General Satellite Research & Development Limited
+002152     (base 16)		General Satellite Research & Development Limited
+				Lit. E, building 2, 4 Novoladozhskaya str
+				Saint Petersburg    197110
+				RU
+
+00-21-58   (hex)		Style Flying Technology Co.
+002158     (base 16)		Style Flying Technology Co.
+				22/F,Cyber Tower B,No.2 Zhong Guan Cun South Street,Haidian District,
+				Beijing    100086
+				CN
+
+00-21-48   (hex)		Kaco Solar Korea
+002148     (base 16)		Kaco Solar Korea
+				Chung-won-ku Sang-dea-won-dong 333-1
+				Songnam  Kyung-kido  462-806
+				KR
+
+00-21-3C   (hex)		AliphCom
+00213C     (base 16)		AliphCom
+				150 Executive Park Blvd
+				San Francisco  CA  94134
+				US
+
+00-1F-B5   (hex)		I/O Interconnect Inc.
+001FB5     (base 16)		I/O Interconnect Inc.
+				1202 E Wakeham Ave
+				Santa Ana  CA  92708
+				US
+
+00-1F-E7   (hex)		Simet
+001FE7     (base 16)		Simet
+				Strada del Portone 129
+				Grugliasco  Torino  10095
+				IT
+
+00-1F-DB   (hex)		Network Supply Corp.,
+001FDB     (base 16)		Network Supply Corp.,
+				1938 NAKADAIRA KANAE
+				IIDA  NAGANO  395-0801
+				JP
+
+00-1F-BF   (hex)		Fulhua Microelectronics Corp. Taiwan Branch
+001FBF     (base 16)		Fulhua Microelectronics Corp. Taiwan Branch
+				1F, No.12, R&D Road,
+				Hsin-Chu, 300    886
+				TW
+
+00-1F-BE   (hex)		Shenzhen Mopnet Industrial Co.,Ltd
+001FBE     (base 16)		Shenzhen Mopnet Industrial Co.,Ltd
+				3F.No.3 Keyuan Rd.,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1F-C2   (hex)		Jow Tong Technology Co Ltd
+001FC2     (base 16)		Jow Tong Technology Co Ltd
+				46 Lane 337 Chung Cheng Rd
+				Yung Kang City  Tainan County  71066
+				TW
+
+00-1F-D2   (hex)		COMMTECH TECHNOLOGY MACAO COMMERCIAL OFFSHORE LTD.
+001FD2     (base 16)		COMMTECH TECHNOLOGY MACAO COMMERCIAL OFFSHORE LTD.
+				31,TAI YIP STREET, 7/F KWUN TONG,
+				KOWLOON,  HONGKONG  
+				CN
+
+00-1F-B8   (hex)		Universal Remote Control, Inc.
+001FB8     (base 16)		Universal Remote Control, Inc.
+				500 Mamaroneck Avenue
+				Harrison  NY  10528
+				US
+
+00-1F-D4   (hex)		4IPNET, INC.
+001FD4     (base 16)		4IPNET, INC.
+				38129 CAMBRIDGE COURT
+				FREMONT  CA  94536
+				US
+
+00-1F-CB   (hex)		NIW Solutions
+001FCB     (base 16)		NIW Solutions
+				P.O. Box 62
+				One Tree Hill  South Australia  5114
+				AU
+
+00-1F-F7   (hex)		Nakajima All Precision Co., Ltd.
+001FF7     (base 16)		Nakajima All Precision Co., Ltd.
+				Kami-Gomyo1480
+				Hanishina-Gun  Nagano-Ken  389-0606
+				JP
+
+00-1F-EB   (hex)		Trio Datacom Pty Ltd
+001FEB     (base 16)		Trio Datacom Pty Ltd
+				41 Aster Avenue
+				Carrum Downs  Victoria  3201
+				AU
+
+00-1F-69   (hex)		Pingood Technology Co., Ltd.
+001F69     (base 16)		Pingood Technology Co., Ltd.
+				Rm1917, South Block, Cangsong Bldg., Tairan Industrial Zone, Futian District
+				Shenzhen  Guangdong  518040
+				CN
+
+00-1F-4D   (hex)		Segnetics LLC
+001F4D     (base 16)		Segnetics LLC
+				Shkiperski protok 14
+				Saint-Petersburg    199106
+				RU
+
+00-1F-81   (hex)		Accel Semiconductor Corp
+001F81     (base 16)		Accel Semiconductor Corp
+				1F,Mainbldg,149 Chun Xiao Road,
+				Shanghai    201203
+				CN
+
+00-1F-83   (hex)		Teleplan Technology Services Sdn Bhd
+001F83     (base 16)		Teleplan Technology Services Sdn Bhd
+				2580, Tingkat Perusahaan 4B
+				Perai  Penang  13600
+				MY
+
+00-1F-9B   (hex)		POSBRO
+001F9B     (base 16)		POSBRO
+				ShinyoungGtower 6F, 271-1
+				Seongnam-si  Kyunggi-do  463-824
+				KR
+
+00-1F-78   (hex)		Blue Fox Porini Textile
+001F78     (base 16)		Blue Fox Porini Textile
+				1208 Pointe Centre Drive
+				Chattanooga  TN  37421
+				US
+
+00-1F-68   (hex)		Martinsson Elektronik AB
+001F68     (base 16)		Martinsson Elektronik AB
+				Box 9060
+				Hägersten  Stockholm  126 09
+				SE
+
+00-1F-63   (hex)		JSC Goodwin-Europa
+001F63     (base 16)		JSC Goodwin-Europa
+				20/5 Marksistskaya st.
+				Moscow    109147
+				RU
+
+00-1F-AD   (hex)		Brown Innovations, Inc
+001FAD     (base 16)		Brown Innovations, Inc
+				369 Congress Street
+				Boston  MA  02210
+				US
+
+00-1F-A6   (hex)		Stilo srl
+001FA6     (base 16)		Stilo srl
+				Via Besana, 4
+				20122  Milano  
+				IT
+
+00-1F-97   (hex)		BERTANA srl
+001F97     (base 16)		BERTANA srl
+				Viale GALILEO FERRARIS 27
+				BRUINO  TORINO  10090
+				IT
+
+00-1F-8C   (hex)		CCS Inc.
+001F8C     (base 16)		CCS Inc.
+				Shimodachiuri-agaru
+				Kyoto  Kyoto  602-8011
+				JP
+
+00-1F-10   (hex)		TOLEDO DO BRASIL INDUSTRIA DE BALANCAS  LTDA
+001F10     (base 16)		TOLEDO DO BRASIL INDUSTRIA DE BALANCAS  LTDA
+				RUA MANOEL CREMONESI, 1
+				SAO BERNARDO DO CAMPO  SP  09851-900
+				BR
+
+00-1F-0F   (hex)		Select Engineered Systems
+001F0F     (base 16)		Select Engineered Systems
+				7991 W. 26 Ave
+				Hialeah  Florida  33016
+				US
+
+00-1F-02   (hex)		Pixelmetrix Corporation Pte Ltd
+001F02     (base 16)		Pixelmetrix Corporation Pte Ltd
+				31 Kaki Bukit Road 3
+				    417818
+				SG
+
+00-1E-FE   (hex)		LEVEL s.r.o.
+001EFE     (base 16)		LEVEL s.r.o.
+				Plhovska 1997
+				Nachod    547 01
+				CZ
+
+00-1F-1A   (hex)		Prominvest
+001F1A     (base 16)		Prominvest
+				7, Bobruiskaya ulica
+				Saint-Petersburg  North-West Federal District  195009
+				RU
+
+00-1F-18   (hex)		Hakusan.Mfg.Co,.Ltd
+001F18     (base 16)		Hakusan.Mfg.Co,.Ltd
+				Tomin-Kougyou-Ikebukuro BLD.5F
+				Tosima Ward  Tokyo-Met.  171-0022
+				JP
+
+00-1F-13   (hex)		S.& A.S. Ltd.
+001F13     (base 16)		S.& A.S. Ltd.
+				Boutros Bldg. 1st bsmt
+				Beirut    2067 7808
+				LB
+
+00-1F-25   (hex)		MBS GmbH
+001F25     (base 16)		MBS GmbH
+				Römerstraße 15
+				Krefeld  Nordrhein-Westfalen  47809
+				DE
+
+00-1F-27   (hex)		Cisco Systems, Inc
+001F27     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1F-26   (hex)		Cisco Systems, Inc
+001F26     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-EF   (hex)		Cantronic International Limited
+001EEF     (base 16)		Cantronic International Limited
+				Unit 515-516, Building 15, East Wing, No 8 Science Park West Avenue, Hong Kong Science Park Phase II
+				Shatin  New Territories  852
+				HK
+
+00-1E-DE   (hex)		BYD COMPANY LIMITED
+001EDE     (base 16)		BYD COMPANY LIMITED
+				NO.1,Baoping Road,Baolong Industrial Town,Longgang
+				SHEN ZHEN  Guangdong  518116
+				CN
+
+00-1E-DD   (hex)		WASKO S.A.
+001EDD     (base 16)		WASKO S.A.
+				Berbeckiego 6
+				Gliwice  Silesia  44-100
+				PL
+
+00-1E-DB   (hex)		Giken Trastem Co., Ltd.
+001EDB     (base 16)		Giken Trastem Co., Ltd.
+				4-1 Takeda Dankawaracho Fushimiku
+				Kyoto    612-8414
+				JP
+
+00-1F-42   (hex)		Etherstack plc
+001F42     (base 16)		Etherstack plc
+				80 Abercrombie Street
+				Chippendale  NSW  2008
+				AU
+
+00-1F-35   (hex)		AIR802 LLC
+001F35     (base 16)		AIR802 LLC
+				1169 Banyon Court
+				Naperville  IL  60540
+				US
+
+00-1F-34   (hex)		Lung Hwa Electronics Co., Ltd.
+001F34     (base 16)		Lung Hwa Electronics Co., Ltd.
+				3F, 248, Pei Sheng Rd. Sec. 3,
+				Taipei  Hsien  222
+				TW
+
+00-1E-EB   (hex)		Talk-A-Phone Co.
+001EEB     (base 16)		Talk-A-Phone Co.
+				5013 N. Kedzie Ave.
+				Chicago  IL  60625
+				US
+
+00-1E-6A   (hex)		Beijing Bluexon Technology Co.,Ltd
+001E6A     (base 16)		Beijing Bluexon Technology Co.,Ltd
+				Jinqiuzhichun 7-301,Zhichun Rd.,
+				Beijing    100088
+				CN
+
+00-1E-66   (hex)		RESOL Elektronische Regelungen GmbH
+001E66     (base 16)		RESOL Elektronische Regelungen GmbH
+				Heiskampstraße 10
+				Hattingen  NRW  45527
+				DE
+
+00-1E-63   (hex)		Vibro-Meter SA
+001E63     (base 16)		Vibro-Meter SA
+				Route de Moncor 4
+				Fribourg    CH-1701
+				CH
+
+00-1E-7F   (hex)		CBM of America
+001E7F     (base 16)		CBM of America
+				1455 West Newport Center Drive
+				Deerfield Beach  Florida  33442
+				US
+
+00-1E-82   (hex)		SanDisk Corporation
+001E82     (base 16)		SanDisk Corporation
+				630 Alder Drive,
+				Milpitas  CA  95035
+				US
+
+00-1E-B1   (hex)		Cryptsoft Pty Ltd
+001EB1     (base 16)		Cryptsoft Pty Ltd
+				P.O. Box 6389
+				Fairfield Gardens  Queensland  4103
+				AU
+
+00-1E-AF   (hex)		Ophir Optronics Ltd
+001EAF     (base 16)		Ophir Optronics Ltd
+				POB 45021
+				Jerusalem    91450
+				IL
+
+00-1E-AD   (hex)		Wingtech Group Limited
+001EAD     (base 16)		Wingtech Group Limited
+				6th floor, Unit G, No.668, East Beijing Road,
+				Shanghai    200001
+				CN
+
+00-1E-D1   (hex)		Keyprocessor B.V.
+001ED1     (base 16)		Keyprocessor B.V.
+				Paasheuvelweg 20
+				Amsterdam  NH  1105 BJ
+				NL
+
+00-1E-D0   (hex)		Ingespace
+001ED0     (base 16)		Ingespace
+				6 rue de lourmede
+				Eurocentre    31621
+				FR
+
+00-1E-8E   (hex)		Hunkeler AG
+001E8E     (base 16)		Hunkeler AG
+				Bahnhofstrasse 31
+				Wikon  CH  4806
+				CH
+
+00-1E-87   (hex)		Realease Limited
+001E87     (base 16)		Realease Limited
+				15/F, Morrison Commercial Building
+				WanChai    
+				HK
+
+00-1E-CD   (hex)		KYLAND Technology Co. LTD
+001ECD     (base 16)		KYLAND Technology Co. LTD
+				Building No.2,Shixing Avenue 30#
+				Shijingshan District  Beijing  100044
+				CN
+
+00-1E-BF   (hex)		Haas Automation Inc.
+001EBF     (base 16)		Haas Automation Inc.
+				2800 Sturgis Rd
+				Oxnard  CA  93030
+				US
+
+00-1E-BC   (hex)		WINTECH AUTOMATION CO.,LTD.
+001EBC     (base 16)		WINTECH AUTOMATION CO.,LTD.
+				#1115, TAEKWANG BLVD.
+				SUWON-SI  KYUNGGI  443-816
+				KR
+
+00-1E-6F   (hex)		Magna-Power Electronics, Inc.
+001E6F     (base 16)		Magna-Power Electronics, Inc.
+				39 Royal Road
+				Flemington  NJ  08822
+				US
+
+00-1E-A1   (hex)		Brunata a/s
+001EA1     (base 16)		Brunata a/s
+				Vesterlundvej 14
+				Herlev    2730
+				DK
+
+00-1E-53   (hex)		Further Tech Co., LTD
+001E53     (base 16)		Further Tech Co., LTD
+				8F,NO 421, Sungshan RD.,Taipei, Taiwn,R.O.C.
+				Taipei    110
+				TW
+
+00-1E-4E   (hex)		DAKO EDV-Ingenieur- und Systemhaus GmbH
+001E4E     (base 16)		DAKO EDV-Ingenieur- und Systemhaus GmbH
+				Ernst-Haeckel-Platz 5/6
+				Jena  Thuringia  07745
+				DE
+
+00-1E-49   (hex)		Cisco Systems, Inc
+001E49     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-28   (hex)		Lumexis Corporation
+001E28     (base 16)		Lumexis Corporation
+				3184 Airway Ave Bldg D
+				Costa Mesa  CA  92626
+				US
+
+00-1E-24   (hex)		Zhejiang Bell Technology Co.,ltd
+001E24     (base 16)		Zhejiang Bell Technology Co.,ltd
+				6 Xidoumen Rd. West Lake district
+				Hangzhou  Zhejiang  310012
+				CN
+
+00-1E-20   (hex)		Intertain Inc.
+001E20     (base 16)		Intertain Inc.
+				Suite 608 LG Eclat-2, 245-4 Seohyun-dong, Bundang-gu
+				Sungngm-shi  Kyunggi-do  463-824
+				KR
+
+00-1E-1C   (hex)		SWS Australia Pty Limited
+001E1C     (base 16)		SWS Australia Pty Limited
+				23 Scanlon Drive
+				Epping  Victoria  3076
+				AU
+
+00-1E-12   (hex)		Ecolab
+001E12     (base 16)		Ecolab
+				655 Lone Oak Drive
+				Eagan  MN  55121
+				US
+
+00-1E-16   (hex)		Keytronix
+001E16     (base 16)		Keytronix
+				Ungargasse 64-66/1/109
+				Vienna    1030
+				AT
+
+00-1E-32   (hex)		Zensys
+001E32     (base 16)		Zensys
+				Emdrupvej 26
+				Copenhagen O    DK-2100
+				DK
+
+00-1E-35   (hex)		Nintendo Co., Ltd.
+001E35     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1E-2B   (hex)		Radio Systems Design, Inc.
+001E2B     (base 16)		Radio Systems Design, Inc.
+				601 Heron Drive
+				Logan Twp  New Jersey  08085
+				US
+
+00-1E-42   (hex)		Teltonika
+001E42     (base 16)		Teltonika
+				Zirmunu 27
+				Vilnius    LT - 09105
+				LT
+
+00-1E-08   (hex)		Centec Networks Inc
+001E08     (base 16)		Centec Networks Inc
+				 Suite 4F-13/16, Building B, No.5 Xing Han Street
+				Suzhou  Jiangsu  215021
+				CN
+
+00-1D-FB   (hex)		NETCLEUS Systems Corporation
+001DFB     (base 16)		NETCLEUS Systems Corporation
+				3F, Daiichi-maeda Bldg.
+				Yamato-shi    242-0017
+				JP
+
+00-1D-B9   (hex)		Wellspring Wireless
+001DB9     (base 16)		Wellspring Wireless
+				107 Magella Court
+				North Wales  Pa  19454
+				US
+
+00-1D-BB   (hex)		Dynamic System Electronics Corp.
+001DBB     (base 16)		Dynamic System Electronics Corp.
+				5F,NO,9,LANE 130,SEC 1,KUANGG FU RD.SAN CHUNG CITY,
+				Taipei  Hsien  24158
+				TW
+
+00-1D-B3   (hex)		HPN Supply Chain
+001DB3     (base 16)		HPN Supply Chain
+				8000 Foothills Blvd
+				Roseville  CA  95747
+				US
+
+00-1D-B1   (hex)		Crescendo Networks
+001DB1     (base 16)		Crescendo Networks
+				6 Yoni Netanyahu St.
+				Or-Yehuda    60376
+				IL
+
+00-1D-B4   (hex)		KUMHO ENG CO.,LTD
+001DB4     (base 16)		KUMHO ENG CO.,LTD
+				498-13, HYUNDAI B/D 5F
+				DAEGU    703-835
+				KR
+
+00-1D-A4   (hex)		Hangzhou System Technology CO., LTD
+001DA4     (base 16)		Hangzhou System Technology CO., LTD
+				ROOM A1505 HuaXing times plaza,NO 478 Wensan Road
+				Hangzhou  Zhejiang  310012
+				CN
+
+00-1D-9F   (hex)		MATT   R.P.Traczynscy Sp.J.
+001D9F     (base 16)		MATT   R.P.Traczynscy Sp.J.
+				Polnocna 44
+				Koscian  wielkopolskie  PL-64000
+				PL
+
+00-1D-90   (hex)		EMCO Flow Systems
+001D90     (base 16)		EMCO Flow Systems
+				2150 Miller Drive
+				Longmont  CO  80501
+				US
+
+00-1D-93   (hex)		Modacom
+001D93     (base 16)		Modacom
+				Jinsuk Building 1536-7
+				Seoul    137-073
+				KR
+
+00-1D-94   (hex)		Climax Technology Co., Ltd
+001D94     (base 16)		Climax Technology Co., Ltd
+				No. 258, Hsin Hu 2nd Road
+				Taipei City  Taipei  114
+				TW
+
+00-1D-8E   (hex)		Alereon, Inc.
+001D8E     (base 16)		Alereon, Inc.
+				7600 N. Capital of Texas Hwy
+				Austin  TX  78731
+				US
+
+00-1D-DB   (hex)		C-BEL Corporation
+001DDB     (base 16)		C-BEL Corporation
+				Futabacho 35-12
+				Itabashi-ku  Tokyo  173-0011
+				JP
+
+00-1D-E6   (hex)		Cisco Systems, Inc
+001DE6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-E7   (hex)		Marine Sonic Technology, Ltd.
+001DE7     (base 16)		Marine Sonic Technology, Ltd.
+				5508 George Washington Memorial Highway
+				White Marsh  Virginia  23183
+				US
+
+00-1D-7B   (hex)		Ice Energy, Inc.
+001D7B     (base 16)		Ice Energy, Inc.
+				9351 Eastman Park Drive
+				Windsor  Colorado  80550
+				US
+
+00-1D-6C   (hex)		ClariPhy Communications, Inc.
+001D6C     (base 16)		ClariPhy Communications, Inc.
+				16 Technology Dr., Suite 165
+				Irvine  CA  92618
+				US
+
+00-1D-C5   (hex)		Beijing Jiaxun Feihong Electricial Co., Ltd.
+001DC5     (base 16)		Beijing Jiaxun Feihong Electricial Co., Ltd.
+				Electrical Building,No. 31 Jiaoda East Road,
+				Beijing  Haidian District,  100044
+				CN
+
+00-1D-C6   (hex)		SNR Inc.
+001DC6     (base 16)		SNR Inc.
+				VBIC T223ho, ICU, 103-6 Munji-dong, Youseong-gu
+				Daejeon    305-732
+				KR
+
+00-1D-84   (hex)		Gateway, Inc.
+001D84     (base 16)		Gateway, Inc.
+				610 Gateway Drive
+				North Sioux City  South Dakota  57049
+				US
+
+00-1D-85   (hex)		Call Direct Cellular Solutions
+001D85     (base 16)		Call Direct Cellular Solutions
+				Suite 145, National Innovation Centre
+				Eveleigh  NSW  1430
+				AU
+
+00-1D-BF   (hex)		Radiient Technologies, Inc.
+001DBF     (base 16)		Radiient Technologies, Inc.
+				2084-A Walsh Ave
+				Santa Clara  CA  95050
+				US
+
+00-1D-34   (hex)		SYRIS Technology Corp
+001D34     (base 16)		SYRIS Technology Corp
+				21 F-2,  NO. 12,  SEC. 1,  Taijunggang Rd.
+				Taichung    403
+				US
+
+00-1D-32   (hex)		Longkay Communication & Technology (Shanghai) Co. Ltd
+001D32     (base 16)		Longkay Communication & Technology (Shanghai) Co. Ltd
+				No.5 Building, Unit 2, Lane 299 Bisheng Rd,
+				Shanghai    201204
+				CN
+
+00-1D-2A   (hex)		SHENZHEN BUL-TECH CO.,LTD.
+001D2A     (base 16)		SHENZHEN BUL-TECH CO.,LTD.
+				4/F, COFCO Bdlg , 3rd District,Baoan District, Shenzhen City,
+				shengzhen  guangdong  518101
+				CN
+
+00-1D-2D   (hex)		Pylone, Inc.
+001D2D     (base 16)		Pylone, Inc.
+				4F Nakano Bldg. 4-30-8 Kita-Shinjuku
+				Shinjuku-ku,  Tokyo  169-0074
+				JP
+
+00-1D-5D   (hex)		Control Dynamics Pty. Ltd.
+001D5D     (base 16)		Control Dynamics Pty. Ltd.
+				PO Box 636
+				MORLEY  Western Australia  6943
+				AU
+
+00-1D-59   (hex)		Mitra Energy & Infrastructure
+001D59     (base 16)		Mitra Energy & Infrastructure
+				Boulevard de l'Europe 131
+				1301  Wavre  
+				BE
+
+00-1D-2B   (hex)		Wuhan Pont Technology CO. , LTD
+001D2B     (base 16)		Wuhan Pont Technology CO. , LTD
+				Building E, Guandong Science and Technology Industry  Park,
+				Wuhan  Hubei  430074
+				CN
+
+00-1D-22   (hex)		Foss Analytical A/S
+001D22     (base 16)		Foss Analytical A/S
+				Slangerupgade 69
+				Hillerød  Seeland  3400
+				DK
+
+00-1D-23   (hex)		SENSUS 
+001D23     (base 16)		SENSUS 
+				44 CASTILIAN DRIVE
+				GOLETA  CALIFORNIA  93117
+				US
+
+00-1D-3E   (hex)		SAKA TECHNO SCIENCE CO.,LTD
+001D3E     (base 16)		SAKA TECHNO SCIENCE CO.,LTD
+				Nishi 105-1
+				Kanazawa  Ishikawa  920-0367
+				JP
+
+00-1D-40   (hex)		 Intel – GE Care Innovations LLC
+001D40     (base 16)		 Intel – GE Care Innovations LLC
+				3721 Douglas Blvd
+				Roseville  CA  95661
+				US
+
+00-1D-57   (hex)		CAETEC Messtechnik
+001D57     (base 16)		CAETEC Messtechnik
+				Schlossstraße 95a
+				Olching  Bayern  82140
+				DE
+
+00-1D-51   (hex)		Babcock & Wilcox Power Generation Group, Inc
+001D51     (base 16)		Babcock & Wilcox Power Generation Group, Inc
+				11864 Canon Blvd, Suite 105
+				Newport News  VA  23606
+				US
+
+00-1D-4C   (hex)		Alcatel-Lucent
+001D4C     (base 16)		Alcatel-Lucent
+				601 Data Dr.
+				Plano  TX  75075
+				US
+
+00-1D-1A   (hex)		OvisLink S.A.
+001D1A     (base 16)		OvisLink S.A.
+				C/Andres Obispo, 37. Pl. 4.
+				Madrid    28043
+				ES
+
+00-1C-B7   (hex)		USC DigiArk Corporation
+001CB7     (base 16)		USC DigiArk Corporation
+				6F Tennoz Central Tower 2-2-24 Higashishinagawa
+				Tokyo  Shinagawa-ku  140-0002
+				JP
+
+00-1C-AF   (hex)		Plato Networks Inc.
+001CAF     (base 16)		Plato Networks Inc.
+				2855 Kifer Road
+				Santa Clara  CA  95051
+				US
+
+00-1C-B1   (hex)		Cisco Systems, Inc
+001CB1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-FE   (hex)		Quartics Inc
+001CFE     (base 16)		Quartics Inc
+				15241 Laguna Canyon Road
+				Irvine  CA  92618
+				US
+
+00-1D-0B   (hex)		Power Standards Lab
+001D0B     (base 16)		Power Standards Lab
+				1201 Marina Village Parkway #101
+				Alameda  CA  94501
+				US
+
+00-1D-02   (hex)		Cybertech Telecom Development
+001D02     (base 16)		Cybertech Telecom Development
+				Hazenkoog 25
+				Alkmaar  Noord Holland  1822 BS
+				NL
+
+00-1C-E9   (hex)		Galaxy Technology Limited
+001CE9     (base 16)		Galaxy Technology Limited
+				9/F Win Full Commerical Building, 172-176 Wing Lok Street,
+				Sheung Wan,    
+				HK
+
+00-1C-EA   (hex)		Scientific-Atlanta, Inc
+001CEA     (base 16)		Scientific-Atlanta, Inc
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+00-1C-E7   (hex)		Rocon PLC Research Centre
+001CE7     (base 16)		Rocon PLC Research Centre
+				21 Vek 56A str.
+				Sofia    1700
+				US
+
+00-1C-DB   (hex)		CARPOINT CO.,LTD
+001CDB     (base 16)		CARPOINT CO.,LTD
+				1340-6, Namgang Bld 7F, Seocho-Dong
+				SEOUL    137-070
+				KR
+
+00-1C-D5   (hex)		ZeeVee, Inc.
+001CD5     (base 16)		ZeeVee, Inc.
+				1 Monarch Drive
+				Littleton  MA  01460
+				US
+
+00-1C-BC   (hex)		CastGrabber, LLC
+001CBC     (base 16)		CastGrabber, LLC
+				6507 Wilkins Avenue Ste. 212
+				Pittsburgh  PA  15217
+				US
+
+00-1C-E4   (hex)		EleSy JSC
+001CE4     (base 16)		EleSy JSC
+				Altayskaya street, 161a
+				  Tomsk oblast  634021
+				RU
+
+00-1C-E2   (hex)		Attero Tech, LLC.
+001CE2     (base 16)		Attero Tech, LLC.
+				1315 Directors Row - Suite 107
+				Fort Wayne  Indiana  46808
+				US
+
+00-1C-AA   (hex)		Bellon Pty Ltd
+001CAA     (base 16)		Bellon Pty Ltd
+				Unit 12/12-18 Victoria St East
+				Lidcombe  NSW  2000
+				AU
+
+00-1C-A0   (hex)		Production Resource Group, LLC
+001CA0     (base 16)		Production Resource Group, LLC
+				539 Temple Hill Road
+				New Windsor  NY  12553
+				US
+
+00-1C-D3   (hex)		ZP Engineering SEL
+001CD3     (base 16)		ZP Engineering SEL
+				via Ardito Desio, 60
+				ROME    00131
+				IT
+
+00-1C-CB   (hex)		Forth Corporation Public Company Limited
+001CCB     (base 16)		Forth Corporation Public Company Limited
+				226/12,13,16 Paholyothin Road
+				Bangkok    10400
+				TH
+
+00-1C-75   (hex)		Segnet Ltd.
+001C75     (base 16)		Segnet Ltd.
+				146 New London Road
+				Chelmsford Essex CM2 OAW    
+				GB
+
+00-1C-74   (hex)		Syswan Technologies Inc.
+001C74     (base 16)		Syswan Technologies Inc.
+				2050 Beavercreek Road
+				Oregon City  Oregon  97045
+				US
+
+00-1C-68   (hex)		Anhui Sun Create Electronics Co., Ltd
+001C68     (base 16)		Anhui Sun Create Electronics Co., Ltd
+				NO.199 Xiangzhang Road
+				Hefei  Anhui  230088
+				CN
+
+00-1C-66   (hex)		UCAMP CO.,LTD
+001C66     (base 16)		UCAMP CO.,LTD
+				#1015, Kolon Science Valley ¥±
+				Seoul  Guro-Dong,Guro-gu,  152-848
+				KR
+
+00-1C-98   (hex)		LUCKY TECHNOLOGY (HK) COMPANY LIMITED
+001C98     (base 16)		LUCKY TECHNOLOGY (HK) COMPANY LIMITED
+				FLAT/RM 1503 15/F ISLAND BEVERLEY NO 1 GREAT GEORGE STREET CAUSEWAY BAY
+				    999077
+				HK
+
+00-1C-81   (hex)		NextGen Venturi LTD
+001C81     (base 16)		NextGen Venturi LTD
+				Technium 2
+				Swansea  West Glamorgan  SA18PJ
+				GB
+
+00-1C-7A   (hex)		Perfectone Netware Company Ltd
+001C7A     (base 16)		Perfectone Netware Company Ltd
+				Unit 815, Sun Fung Centre,
+				Kwai Chung    
+				HK
+
+00-1C-53   (hex)		Synergy Lighting Controls
+001C53     (base 16)		Synergy Lighting Controls
+				One Lithonia Way
+				Conyers  GA  30012
+				US
+
+00-1C-4D   (hex)		Aplix IP Holdings Corporation
+001C4D     (base 16)		Aplix IP Holdings Corporation
+				2-20-9 Nishiwaseda
+				Shinjuku-ku  Tokyo  169-0051
+				JP
+
+00-1C-92   (hex)		Tervela
+001C92     (base 16)		Tervela
+				43 Nagog Park
+				Acton  MA  01720
+				US
+
+00-1C-8A   (hex)		Cirrascale Corporation
+001C8A     (base 16)		Cirrascale Corporation
+				9449 Carroll Park Drive
+				San Diego  CA  92121
+				US
+
+00-1C-38   (hex)		Bio-Rad Laboratories, Inc.
+001C38     (base 16)		Bio-Rad Laboratories, Inc.
+				245 Winter St.
+				Waltham  MA  02451
+				US
+
+00-1C-30   (hex)		Mode Lighting (UK ) Ltd.
+001C30     (base 16)		Mode Lighting (UK ) Ltd.
+				The Maltings
+				Ware  Hertfordshire  SG12 9AD
+				GB
+
+00-1C-2E   (hex)		HPN Supply Chain
+001C2E     (base 16)		HPN Supply Chain
+				8000 Foothills Blvd
+				Roseville  CA  95747
+				US
+
+00-1C-2A   (hex)		Envisacor Technologies Inc.
+001C2A     (base 16)		Envisacor Technologies Inc.
+				237 Romina Drive
+				Concord  Ontario  L4K 4V3
+				CA
+
+00-1C-02   (hex)		Pano Logic
+001C02     (base 16)		Pano Logic
+				2000 Seaport Drive, Suite 200
+				Redwood City  CA  94063
+				US
+
+00-1C-05   (hex)		Nonin Medical Inc.
+001C05     (base 16)		Nonin Medical Inc.
+				13700 1st Avenue North
+				Plymouth  MN  55441
+				US
+
+00-1C-06   (hex)		Siemens Numerical Control Ltd., Nanjing
+001C06     (base 16)		Siemens Numerical Control Ltd., Nanjing
+				No. 18 Siemens Road, Jiangning Development Zone
+				Nanjing  JiangSu  211100
+				CN
+
+00-1B-EA   (hex)		Nintendo Co., Ltd.
+001BEA     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1B-E5   (hex)		802automation Limited
+001BE5     (base 16)		802automation Limited
+				18 First Avenue
+				Worthing  West Sussex  BN14 9NJ
+				GB
+
+00-1B-E4   (hex)		TOWNET SRL
+001BE4     (base 16)		TOWNET SRL
+				VIA DEI FINALE, 20
+				61043  CAGLI (PU)  
+				IT
+
+00-1C-04   (hex)		Airgain, Inc.
+001C04     (base 16)		Airgain, Inc.
+				1930 Palomar Point Way
+				Carlsbad  CA  92008
+				US
+
+00-1C-01   (hex)		ABB Oy Drives
+001C01     (base 16)		ABB Oy Drives
+				Hiomotie 13
+				Helsinki    FI-00380
+				FI
+
+00-1B-FF   (hex)		Millennia Media inc.
+001BFF     (base 16)		Millennia Media inc.
+				4200 Day Spring CT
+				Placerville  CA  95667
+				US
+
+00-1B-F2   (hex)		KWORLD COMPUTER CO., LTD
+001BF2     (base 16)		KWORLD COMPUTER CO., LTD
+				No. 113, Jian 2nd Rd.,
+				Jhonghe  Taipei county  235
+				TW
+
+00-1B-F0   (hex)		Value Platforms Limited
+001BF0     (base 16)		Value Platforms Limited
+				Rm 712-713, Building 9, 5, Science Park West Ave.,
+				Shatin,    
+				HK
+
+00-1C-1B   (hex)		Hyperstone GmbH
+001C1B     (base 16)		Hyperstone GmbH
+				Line-Eid-Straße 3
+				Konstanz  Baden-Württemberg  78467
+				DE
+
+00-1C-10   (hex)		Cisco-Linksys, LLC
+001C10     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+00-1B-D2   (hex)		ULTRA-X ASIA PACIFIC Inc.
+001BD2     (base 16)		ULTRA-X ASIA PACIFIC Inc.
+				5-1-15 Sotokanda
+				Tokyo  Chiyoda-ku  101-0021
+				JP
+
+00-1B-8D   (hex)		Electronic Computer Systems, Inc.
+001B8D     (base 16)		Electronic Computer Systems, Inc.
+				418 Donegal Drive
+				Towson  MD  21286
+				US
+
+00-1B-86   (hex)		Bosch Access Systems GmbH
+001B86     (base 16)		Bosch Access Systems GmbH
+				Charlottenburger Allee 50
+				AACHEN    D-52068
+				DE
+
+00-1B-C2   (hex)		Integrated Control Technology Limitied
+001BC2     (base 16)		Integrated Control Technology Limitied
+				11 Canaveral Drive
+				Auckland  Auckland  0735
+				NZ
+
+00-1B-BB   (hex)		RFTech Co.,Ltd
+001BBB     (base 16)		RFTech Co.,Ltd
+				339-17 Jwahang-Ri,Wonsam-Myun,
+				Yongin-Si  Kyungki-Do  449-871
+				KR
+
+00-1B-AA   (hex)		XenICs nv
+001BAA     (base 16)		XenICs nv
+				Ambachtenlaan 44
+				Leuven  Vlaams-Brabant  B-3001
+				BE
+
+00-1B-7C   (hex)		A & R Cambridge
+001B7C     (base 16)		A & R Cambridge
+				Pembroke Avenue
+				Cambridge  CAMBS  CB25 9QR
+				GB
+
+00-1B-5D   (hex)		Vololink Pty Ltd
+001B5D     (base 16)		Vololink Pty Ltd
+				Level 2, 541 Blackburn Road
+				Mount Waverley  Victoria  3149
+				AU
+
+00-1B-5A   (hex)		Apollo Imaging Technologies, Inc.
+001B5A     (base 16)		Apollo Imaging Technologies, Inc.
+				18545 Rangeland Rd
+				Ramona  CA  92065
+				US
+
+00-1B-56   (hex)		Tehuti Networks Ltd.
+001B56     (base 16)		Tehuti Networks Ltd.
+				1, Shenkar St.
+				Hertzliya    46105
+				IL
+
+00-1B-C6   (hex)		Strato Rechenzentrum AG
+001BC6     (base 16)		Strato Rechenzentrum AG
+				Pascalstrasse 10
+				D-10587  Berlin  
+				DE
+
+00-1B-C4   (hex)		Ultratec, Inc.
+001BC4     (base 16)		Ultratec, Inc.
+				450 Science Drive
+				Madison  WI  53711
+				US
+
+00-1B-A1   (hex)		Åmic AB
+001BA1     (base 16)		Åmic AB
+				Uppsala science park
+				Uppsala    75183
+				SE
+
+00-1B-96   (hex)		General Sensing
+001B96     (base 16)		General Sensing
+				Unit 716, Cyberport 1
+				Pok Fu Lam    
+				US
+
+00-1A-EA   (hex)		Radio Terminal Systems Pty Ltd
+001AEA     (base 16)		Radio Terminal Systems Pty Ltd
+				1st Floor
+				Laverton North  Victoria  3026
+				AU
+
+00-1A-DD   (hex)		PePWave Ltd
+001ADD     (base 16)		PePWave Ltd
+				17/F., Park Building,
+				Cheung Sha Wan  Kowloon  
+				HK
+
+00-1A-D6   (hex)		JIAGNSU AETNA ELECTRIC CO.,LTD
+001AD6     (base 16)		JIAGNSU AETNA ELECTRIC CO.,LTD
+				NO.571 QIANHU ROAD,QIANQIAO INDUSTRY PARK,WUXI,JIANGSU,CHINA
+				WUXI  JIANGSU  214151
+				CN
+
+00-1A-D4   (hex)		iPOX Technology Co., Ltd.
+001AD4     (base 16)		iPOX Technology Co., Ltd.
+				15F-1, No.186, Jian-Yi Rd., Chung-Ho City,
+				Taipei    235
+				TW
+
+00-1B-14   (hex)		Carex Lighting Equipment Factory
+001B14     (base 16)		Carex Lighting Equipment Factory
+				50 Chang Tang Rd., Yan Tian District,
+				  Guangdong province  
+				CN
+
+00-1B-15   (hex)		Voxtel, Inc.
+001B15     (base 16)		Voxtel, Inc.
+				12725 SW Millikan Way
+				Beaverton  OR  97005
+				US
+
+00-1B-09   (hex)		Matrix Telecom Pvt. Ltd.
+001B09     (base 16)		Matrix Telecom Pvt. Ltd.
+				394, GIDC, Makarpura,
+				Vadodara  Gujarat  390010
+				IN
+
+00-1B-03   (hex)		Action Technology (SZ) Co., Ltd
+001B03     (base 16)		Action Technology (SZ) Co., Ltd
+				Action Technology Building Baoyuan Road, Xixiang, Bao'an District
+				Shenzhen  Guangdong  518102
+				CN
+
+00-1A-FB   (hex)		Joby Inc.
+001AFB     (base 16)		Joby Inc.
+				1535 Mission St.
+				San Francisco  CA  94103
+				US
+
+00-1A-FD   (hex)		EVOLIS
+001AFD     (base 16)		EVOLIS
+				29 avenue de la fontaine
+				Beaucouze    49070
+				FR
+
+00-1B-1E   (hex)		HART Communication Foundation
+001B1E     (base 16)		HART Communication Foundation
+				STE 1-350
+				Austin  TX  78759
+				US
+
+00-1B-4C   (hex)		Signtech
+001B4C     (base 16)		Signtech
+				609 Seonil Technopia 609
+				Sungnamsi  Kyunggido  462-120
+				KR
+
+00-1A-D5   (hex)		KMC CHAIN INDUSTRIAL CO., LTD.
+001AD5     (base 16)		KMC CHAIN INDUSTRIAL CO., LTD.
+				7F-8, No. 81, Sui-Lih Rd., Hsinchu
+				Hsinchu    300
+				TW
+
+00-1A-D0   (hex)		Albis Technologies AG
+001AD0     (base 16)		Albis Technologies AG
+				Albisriederstrasse 199
+				CH 8047  Zuerich  
+				CH
+
+00-1A-D3   (hex)		Vamp Ltd.
+001AD3     (base 16)		Vamp Ltd.
+				PO Box 810
+				Vaasa    65101
+				FI
+
+00-1A-D8   (hex)		AlsterAero GmbH
+001AD8     (base 16)		AlsterAero GmbH
+				Heidenkampsweg 45
+				Hamburg    20097
+				DE
+
+00-1A-DA   (hex)		Biz-2-Me Inc.
+001ADA     (base 16)		Biz-2-Me Inc.
+				1301 West Eau Gallie Blvd
+				Melbourne  FL  32935
+				US
+
+00-1A-6F   (hex)		MI.TEL s.r.l.
+001A6F     (base 16)		MI.TEL s.r.l.
+				VIA GUIDO ROSSA, 22
+				CORNATE D'ADDA  MILANO  20040
+				IT
+
+00-1A-71   (hex)		Diostech Co., Ltd.
+001A71     (base 16)		Diostech Co., Ltd.
+				151-21, Buk-ri, Namsa-myeon,
+				Yongin-city  Gyeonggi-do  449 884
+				KR
+
+00-1A-69   (hex)		Wuhan Yangtze Optical Technology CO.,Ltd.
+001A69     (base 16)		Wuhan Yangtze Optical Technology CO.,Ltd.
+				4#,Guanshan 2 Road
+				Wuhan  Hubei  430073
+				CN
+
+00-1A-67   (hex)		Infinite QL Sdn Bhd
+001A67     (base 16)		Infinite QL Sdn Bhd
+				G.02, Block A, Dataran Hamodal
+				Petaling Jaya  Selangor Darul Ehsan  46300
+				MY
+
+00-1A-C3   (hex)		Scientific-Atlanta, Inc
+001AC3     (base 16)		Scientific-Atlanta, Inc
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+00-1A-BF   (hex)		TRUMPF Laser Marking Systems AG
+001ABF     (base 16)		TRUMPF Laser Marking Systems AG
+				Ausserfeld
+				Gruesch  GR  7214
+				CH
+
+00-1A-B8   (hex)		Anseri Corporation
+001AB8     (base 16)		Anseri Corporation
+				35E Industrial Way
+				Rochester  NH  03867
+				US
+
+00-1A-BC   (hex)		U4EA Technologies Ltd
+001ABC     (base 16)		U4EA Technologies Ltd
+				City Point
+				Bristol    BS1 6PL
+				GB
+
+00-1A-CB   (hex)		Autocom Products Ltd
+001ACB     (base 16)		Autocom Products Ltd
+				Unit 4 Tachbrook Link, Tachbrook Park Drive
+				Warwick  Warwickshire  CV34 6RH
+				GB
+
+00-1A-CF   (hex)		C.T. ELETTRONICA
+001ACF     (base 16)		C.T. ELETTRONICA
+				Via Caduti di Nassiriya 5 B
+				Barberino Val D'Elsa (FI)    50021
+				IT
+
+00-1A-A3   (hex)		DELORME
+001AA3     (base 16)		DELORME
+				2 DELORME DRIVE
+				YARMOUTH  MAINE  04096
+				US
+
+00-1A-9B   (hex)		ADEC & Parter AG
+001A9B     (base 16)		ADEC & Parter AG
+				Staldenbachstrasse 30
+				Pfaeffikon  ZH  8808
+				CH
+
+00-1A-9D   (hex)		Skipper Wireless, Inc.
+001A9D     (base 16)		Skipper Wireless, Inc.
+				Shinjuku-Sumitomo Bldg. 20F
+				Shinjuku  Tokyo  163-0220
+				JP
+
+00-1A-85   (hex)		NV Michel Van de Wiele
+001A85     (base 16)		NV Michel Van de Wiele
+				M. Vandewielestraat 7
+				Marke  West-Vlaanderen  8510
+				BE
+
+00-1A-8E   (hex)		3Way Networks Ltd
+001A8E     (base 16)		3Way Networks Ltd
+				7200 Cambridge Research Park
+				Cambridge  Cambridgeshire  CB5 9TL
+				GB
+
+00-1A-44   (hex)		JWTrading Co., Ltd
+001A44     (base 16)		JWTrading Co., Ltd
+				1590 Kwanyang-dong, Dongan-ku
+				Ahnyang  Kyungki - do  431-060
+				KR
+
+00-1A-49   (hex)		Micro Vision Co.,LTD
+001A49     (base 16)		Micro Vision Co.,LTD
+				1-9-15
+				Niigata-city  Niigata-ken  950-0986
+				JP
+
+00-1A-3D   (hex)		Ajin Vision Co.,Ltd
+001A3D     (base 16)		Ajin Vision Co.,Ltd
+				1404, Mario-Tower, 222-12
+				Seoul    152-050
+				KR
+
+00-1A-41   (hex)		INOCOVA Co.,Ltd
+001A41     (base 16)		INOCOVA Co.,Ltd
+				5F SEOUL BD.736-17
+				Yeoksam-Dong, Kangnam-Ku  SEOUL  135-924
+				KR
+
+00-1A-33   (hex)		ASI Communications, Inc.
+001A33     (base 16)		ASI Communications, Inc.
+				1042 E Guadalupe Rd
+				Tempe  AZ  85283
+				US
+
+00-1A-23   (hex)		Ice Qube, Inc
+001A23     (base 16)		Ice Qube, Inc
+				141 Wilson Ave
+				Greensburg  Pa  15601
+				US
+
+00-1A-1D   (hex)		PChome Online Inc.
+001A1D     (base 16)		PChome Online Inc.
+				11F, 105, Sec. 2, Tun-Hwa S. Rd.
+				  Taipei  106
+				TW
+
+00-1A-17   (hex)		Teak Technologies, Inc.
+001A17     (base 16)		Teak Technologies, Inc.
+				2901 Tasman Dr., Ste. #210
+				Santa Clara  CA  95054
+				US
+
+00-1A-1C   (hex)		GT&T Engineering Pte Ltd
+001A1C     (base 16)		GT&T Engineering Pte Ltd
+				2 Ang Mo Kio St.64, Econ Building, #04-00
+				  Singapore  569084
+				SG
+
+00-1A-1F   (hex)		Coastal Environmental Systems
+001A1F     (base 16)		Coastal Environmental Systems
+				820 First Avenue South
+				Seattle  wa  98134
+				US
+
+00-1A-64   (hex)		IBM Corp
+001A64     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-1A-51   (hex)		Alfred Mann Foundation
+001A51     (base 16)		Alfred Mann Foundation
+				P.O. Box 905
+				Santa Clarita  CA  91380-9005
+				US
+
+00-1A-55   (hex)		ACA-Digital Corporation
+001A55     (base 16)		ACA-Digital Corporation
+				17 F, No. 866-7, Chung Cheng Rd.,
+				Chung Ho City  Taipei County  23586
+				TW
+
+00-19-E6   (hex)		TOYO MEDIC CO.,LTD.
+0019E6     (base 16)		TOYO MEDIC CO.,LTD.
+				1-17-22 Kitahorie, Nishi-ku
+				Osaka    550-0014
+				JP
+
+00-19-E2   (hex)		Juniper Networks
+0019E2     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-19-E8   (hex)		Cisco Systems, Inc
+0019E8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-DF   (hex)		Thomson Inc.
+0019DF     (base 16)		Thomson Inc.
+				101 West 103rd Street
+				Indianapolis  IN  46290-1102
+				US
+
+00-19-DD   (hex)		FEI-Zyfer, Inc.
+0019DD     (base 16)		FEI-Zyfer, Inc.
+				1515 S. Manchester
+				Anaheim  CA  92802
+				US
+
+00-19-B2   (hex)		XYnetsoft Co.,Ltd
+0019B2     (base 16)		XYnetsoft Co.,Ltd
+				NO.158Zhenyu Street High Industries Development area
+				ChangChun  JiLin  130000
+				CN
+
+00-19-A4   (hex)		Austar Technology (hang zhou) Co.,Ltd
+0019A4     (base 16)		Austar Technology (hang zhou) Co.,Ltd
+				7-402,West Lake Software Part
+				Hang Zhou  Zhe Jiang  310012
+				CN
+
+00-19-AA   (hex)		Cisco Systems, Inc
+0019AA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-B1   (hex)		Arrow7 Corporation
+0019B1     (base 16)		Arrow7 Corporation
+				Kamijima 3-27-7
+				Hamamatsu  Shizuoka  433-8122
+				JP
+
+00-19-B3   (hex)		Stanford Research Systems
+0019B3     (base 16)		Stanford Research Systems
+				1290-D Reamwood Ave
+				Sunnyvale  CA  94089
+				US
+
+00-1A-0A   (hex)		Adaptive Micro-Ware Inc.
+001A0A     (base 16)		Adaptive Micro-Ware Inc.
+				6917 Innovation Blvd
+				Fort Wayne  IN  46818
+				US
+
+00-1A-05   (hex)		OPTIBASE LTD
+001A05     (base 16)		OPTIBASE LTD
+				7 Shankar St.
+				Herzliya  ISRAEL  46120
+				IL
+
+00-19-D4   (hex)		ICX Technologies
+0019D4     (base 16)		ICX Technologies
+				3440 Francis-Hughes
+				Laval  Quebec  H7L 5A9
+				CA
+
+00-19-CF   (hex)		SALICRU, S.A.
+0019CF     (base 16)		SALICRU, S.A.
+				Av. Serra , 100
+				Sta.Ma.Palautordera  Barcelona  08460
+				ES
+
+00-19-FC   (hex)		PT. Ufoakses Sukses Luarbiasa
+0019FC     (base 16)		PT. Ufoakses Sukses Luarbiasa
+				Jl. Sultan Hasanudin No. 41
+				Jakarta Selatan  DKI Jakarta  12160
+				ID
+
+00-19-F4   (hex)		Convergens Oy Ltd
+0019F4     (base 16)		Convergens Oy Ltd
+				Westendintie 99 B
+				Espoo  Uusimaa  FIN-02160
+				FI
+
+00-19-96   (hex)		TurboChef Technologies Inc.
+001996     (base 16)		TurboChef Technologies Inc.
+				4240 International Parkway
+				Carrollton  Texas  75007
+				US
+
+00-19-97   (hex)		Soft Device Sdn Bhd
+001997     (base 16)		Soft Device Sdn Bhd
+				67-2 Jalan 2/27F
+				Kuala Lumpur  WP  53300
+				MY
+
+00-19-98   (hex)		SATO CORPORATION
+001998     (base 16)		SATO CORPORATION
+				1-207,ONARI-CHO,
+				SAITAMA-SHI  SAITAMA  330-0852
+				JP
+
+00-19-9C   (hex)		CTRING
+00199C     (base 16)		CTRING
+				#514, World Meridian Venture Center II
+				Keumcheon-gu  Seoul  153-803
+				KR
+
+00-19-46   (hex)		Cianet Industria e Comercio S/A
+001946     (base 16)		Cianet Industria e Comercio S/A
+				rod SC401, km01 Tecnopolis/Alfama 4o. Andar
+				Florianopolis  Santa Catarina  88030-902
+				BR
+
+00-19-49   (hex)		TENTEL  COMTECH CO., LTD.
+001949     (base 16)		TENTEL  COMTECH CO., LTD.
+				3/F., NO. 42, LANE 80, SEC. 3, NAN-KANG RD.,
+				TAIPEI    115
+				TW
+
+00-19-44   (hex)		Fossil Partners, L.P.
+001944     (base 16)		Fossil Partners, L.P.
+				2280 N. Greenville Ave.
+				Richardson  TX  75082
+				US
+
+00-19-71   (hex)		Guangzhou Unicomp Technology Co.,Ltd
+001971     (base 16)		Guangzhou Unicomp Technology Co.,Ltd
+				7/F,North Tower,Jinshan Building.No.248
+				Guangzhou  Guangdong  510630
+				CN
+
+00-19-64   (hex)		Doorking Inc.
+001964     (base 16)		Doorking Inc.
+				120 Glasgow St.
+				Inglewood  CA.  90301
+				US
+
+00-19-76   (hex)		Xipher Technologies, LLC
+001976     (base 16)		Xipher Technologies, LLC
+				156 River Road
+				Willington  CT  06279
+				US
+
+00-19-6C   (hex)		ETROVISION TECHNOLOGY
+00196C     (base 16)		ETROVISION TECHNOLOGY
+				2F, 19-5 San Chung Rd.,
+				TAIPEI    115
+				TW
+
+00-19-67   (hex)		TELDAT Sp.J.
+001967     (base 16)		TELDAT Sp.J.
+				Kijowska 44
+				Bydgoszcz  woj. kujawsko-pomorskie  85-703
+				PL
+
+00-19-52   (hex)		ACOGITO Co., Ltd
+001952     (base 16)		ACOGITO Co., Ltd
+				#501 Shinyoung Palace Tower, 246-2, Seohyun
+				Sungnam  Kyunggi  463-824
+				KR
+
+00-19-8B   (hex)		Novera Optics Korea, Inc.
+00198B     (base 16)		Novera Optics Korea, Inc.
+				463-1 Jeon Min Dong Yuseong Gu
+				Deajeon    305-811
+				KR
+
+00-19-61   (hex)		Blaupunkt  Embedded Systems GmbH
+001961     (base 16)		Blaupunkt  Embedded Systems GmbH
+				Bahnhofsstrasse 16
+				Schlitz    36110
+				DE
+
+00-19-42   (hex)		ON SOFTWARE INTERNATIONAL LIMITED
+001942     (base 16)		ON SOFTWARE INTERNATIONAL LIMITED
+				9F, NO. 17, SEC. 1, CHENG-TE RD.
+				TAIPEI    103
+				TW
+
+00-19-3F   (hex)		RDI technology(Shenzhen) Co.,LTD
+00193F     (base 16)		RDI technology(Shenzhen) Co.,LTD
+				Building C1&C2,  Xin Tang Industrial Zone,East BaiShiXia Village, Fuyong Town, Baoan District
+				SHENZHEN  GUANGDONG province  518103
+				CN
+
+00-19-41   (hex)		Pitney Bowes, Inc
+001941     (base 16)		Pitney Bowes, Inc
+				35 Waterview Drive
+				Shelton  CT  06484
+				US
+
+00-18-FD   (hex)		Optimal Technologies International Inc.
+0018FD     (base 16)		Optimal Technologies International Inc.
+				12 Spanish Main Drive
+				Freeport  GBI  
+				BS
+
+00-18-F0   (hex)		JOYTOTO Co., Ltd.
+0018F0     (base 16)		JOYTOTO Co., Ltd.
+				3F Sungwoo Bldg. 717-3, Sooseo-Dong
+				Seoul    135-220
+				KR
+
+00-18-E9   (hex)		Numata Corporation
+0018E9     (base 16)		Numata Corporation
+				8-2-39 nanko-higashi
+				Osaka-shi  Osaka-fu  559-0031
+				JP
+
+00-19-08   (hex)		Duaxes Corporation
+001908     (base 16)		Duaxes Corporation
+				2-5, Kasumigaseki 3-chome, Chiyoda-ku.
+				Tokyo  Foreign  100-6014
+				JP
+
+00-19-0C   (hex)		Encore Electronics, Inc.
+00190C     (base 16)		Encore Electronics, Inc.
+				16483 Old Valley Blvd.
+				La Puente  CA  91744
+				US
+
+00-19-19   (hex)		ASTEL Inc.
+001919     (base 16)		ASTEL Inc.
+				59-7 Jang-dong Yusung-Gu
+				Daejeon  Chungnam  305-343
+				KR
+
+00-19-2D   (hex)		Nokia Corporation
+00192D     (base 16)		Nokia Corporation
+				Rensingstraße 15
+				Bochum  NRW  44807
+				DE
+
+00-18-EF   (hex)		Escape Communications, Inc.
+0018EF     (base 16)		Escape Communications, Inc.
+				2615 Pacific Coast Hwy
+				Hermosa Beach  CA  90254
+				US
+
+00-18-E6   (hex)		Computer Hardware Design SIA
+0018E6     (base 16)		Computer Hardware Design SIA
+				Dzelzavas 120i
+				Riga    LV-1021
+				LV
+
+00-19-30   (hex)		Cisco Systems, Inc
+001930     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-27   (hex)		ImCoSys Ltd
+001927     (base 16)		ImCoSys Ltd
+				Bundesstrasse 5
+				Zug  ZG  6300
+				CH
+
+00-18-F7   (hex)		Kameleon Technologies
+0018F7     (base 16)		Kameleon Technologies
+				217, rue St Honoré
+				Paris    75001
+				FR
+
+00-18-88   (hex)		GOTIVE a.s.
+001888     (base 16)		GOTIVE a.s.
+				Zámocká 34
+				Bratislava    81101
+				SK
+
+00-18-8A   (hex)		Infinova LLC
+00188A     (base 16)		Infinova LLC
+				51 Stouts Lane, Unit 1 & 2
+				Monmouth Junction  New Jersey  08852
+				US
+
+00-18-86   (hex)		EL-TECH, INC.
+001886     (base 16)		EL-TECH, INC.
+				A-711, WOOLIM LION'S VALLEY, 371-28
+				SEOUL    150-834
+				KR
+
+00-18-87   (hex)		Metasystem SpA
+001887     (base 16)		Metasystem SpA
+				Via Oberdan 16
+				Reggio Emilia  RE  42100
+				IT
+
+00-18-BE   (hex)		ANSA Corporation
+0018BE     (base 16)		ANSA Corporation
+				17F, No. 738, Chung Cheng Road
+				Chung Ho City  Taipei County  235
+				TW
+
+00-18-BA   (hex)		Cisco Systems, Inc
+0018BA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-18-B4   (hex)		Dawon Media Inc.
+0018B4     (base 16)		Dawon Media Inc.
+				Rm503. woolim e-biz center 170-5, Guro3dong Gurogu,
+				Seoul    152-769
+				KR
+
+00-18-B6   (hex)		S3C, Inc.
+0018B6     (base 16)		S3C, Inc.
+				1010 Stewart Dr.
+				Sunnyvale  California  94085
+				US
+
+00-18-A3   (hex)		ZIPPY TECHNOLOGY CORP.
+0018A3     (base 16)		ZIPPY TECHNOLOGY CORP.
+				10F, No. 50, Mincyuan Rd., Sindian City
+				Taipei    231
+				TW
+
+00-18-A0   (hex)		Cierma Ascenseurs
+0018A0     (base 16)		Cierma Ascenseurs
+				17 avenue guiglionda de saint agathe
+				Nice  PACA  06300
+				FR
+
+00-18-93   (hex)		SHENZHEN PHOTON BROADBAND TECHNOLOGY CO.,LTD
+001893     (base 16)		SHENZHEN PHOTON BROADBAND TECHNOLOGY CO.,LTD
+				2/F Hivac BLD,2th Langshan Rd,North Hi-Tech Industrial
+				Shenzhen  Guangdong  518057
+				CN
+
+00-18-B1   (hex)		IBM Corp
+0018B1     (base 16)		IBM Corp
+				2051 Mission College Blvd
+				Santa Clara  CA  95054
+				US
+
+00-18-7B   (hex)		4NSYS Co. Ltd.
+00187B     (base 16)		4NSYS Co. Ltd.
+				3F, Hana Bldg
+				Guro-Gu  Seoul  152-100
+				KR
+
+00-18-7F   (hex)		ZODIANET
+00187F     (base 16)		ZODIANET
+				23, rue des Fraisettes
+				PALAISEAU  ESSONNE  91120
+				FR
+
+00-18-7E   (hex)		RGB Spectrum
+00187E     (base 16)		RGB Spectrum
+				950 Marina Village Pkwy
+				Alameda  CA  94501
+				US
+
+00-18-9D   (hex)		Navcast Inc.
+00189D     (base 16)		Navcast Inc.
+				Suite 612, 6711 Mississauga Road
+				Mississauga  ON  m2r 1a3
+				CA
+
+00-18-D6   (hex)		Swirlnet A/S
+0018D6     (base 16)		Swirlnet A/S
+				Diplomvej 381
+				Lyngby    DK-2800
+				DK
+
+00-18-CD   (hex)		Erae Electronics Industry Co., Ltd
+0018CD     (base 16)		Erae Electronics Industry Co., Ltd
+				#371-51, Gasan-dong
+				Geumchen-gu  Seoul  153-803
+				KR
+
+00-18-DB   (hex)		EPL Technology Ltd
+0018DB     (base 16)		EPL Technology Ltd
+				LongDong,Longgang District
+				ShenZhen  GuangDong  518116
+				CN
+
+00-18-C8   (hex)		ISONAS Inc.
+0018C8     (base 16)		ISONAS Inc.
+				6325 Gunpark Drive
+				Boulder  CO  80301
+				US
+
+00-18-49   (hex)		nVent, Schroff GmbH
+001849     (base 16)		nVent, Schroff GmbH
+				Langenalber Strasse 96-100
+				Straubenhardt    75334
+				DE
+
+00-18-46   (hex)		Crypto S.A.
+001846     (base 16)		Crypto S.A.
+				V. Ipirou 45
+				Marousi  Athens  15125
+				GR
+
+00-18-45   (hex)		Pulsar-Telecom LLC.
+001845     (base 16)		Pulsar-Telecom LLC.
+				Zaharova, 18a
+				Penza    440044
+				RU
+
+00-18-1E   (hex)		GDX Technologies Ltd.
+00181E     (base 16)		GDX Technologies Ltd.
+				61-63 Back Sneddon Street
+				Paisley  Renfrewshire  PA3 2DD
+				GB
+
+00-18-1C   (hex)		Exterity Limited
+00181C     (base 16)		Exterity Limited
+				Ridge Way, Hillend Industrial Estate
+				Dunfermline  Fife  KY11 9JD
+				GB
+
+00-18-63   (hex)		Veritech Electronics Limited
+001863     (base 16)		Veritech Electronics Limited
+				8F, 67, Sec. 1, Zhongshan Road, Xinzhuang,
+				Taipei    242
+				TW
+
+00-18-5A   (hex)		uControl, Inc.
+00185A     (base 16)		uControl, Inc.
+				5914 W. Courtyard Drive
+				Austin  TX  78730
+				US
+
+00-18-52   (hex)		StorLink Semiconductors, Inc.
+001852     (base 16)		StorLink Semiconductors, Inc.
+				1804 N. Shoreline Boulevard
+				Mountain View  CA  94043
+				US
+
+00-18-50   (hex)		Secfone Kft
+001850     (base 16)		Secfone Kft
+				51 Bercsenyi str
+				Jaszbereny    5100
+				HU
+
+00-18-58   (hex)		TagMaster AB
+001858     (base 16)		TagMaster AB
+				Kronborgsgréind 1
+				Kista  Stockholm  S-16487
+				SE
+
+00-18-24   (hex)		Kimaldi Electronics, S.L.
+001824     (base 16)		Kimaldi Electronics, S.L.
+				Ctra. de Rubí, 292 B
+				Terrassa  Barcelona  08228
+				ES
+
+00-18-3D   (hex)		Vertex Link Corporation
+00183D     (base 16)		Vertex Link Corporation
+				Meitetsu Fudosan Takebashi Bldg 6F
+				Chiyoda-ku  Tokyo  101-0054
+				JP
+
+00-18-25   (hex)		Private
+001825     (base 16)		Private
+
+00-18-79   (hex)		dSys
+001879     (base 16)		dSys
+				Soeflinger Str. 100
+				Ulm  BW  89077
+				DE
+
+00-18-03   (hex)		ArcSoft Shanghai Co. LTD
+001803     (base 16)		ArcSoft Shanghai Co. LTD
+				20th Floor, Suite (EAST) 2008, China Merchants Plaza, 333
+				Shanghai    200041
+				CN
+
+00-17-EF   (hex)		IBM Corp
+0017EF     (base 16)		IBM Corp
+				2051 Mission College Blvd 
+				Santa Clara  CA  95054
+				US
+
+00-17-F5   (hex)		LIG NEOPTEK
+0017F5     (base 16)		LIG NEOPTEK
+				926 Gosaek-dong
+				Suwon-si  Gyeonggi-do  441-813
+				KR
+
+00-17-CD   (hex)		CEC Wireless R&D Ltd.
+0017CD     (base 16)		CEC Wireless R&D Ltd.
+				West M5 Building,No.1 East Road
+				Beijing    100016
+				CN
+
+00-17-D0   (hex)		Opticom Communications, LLC
+0017D0     (base 16)		Opticom Communications, LLC
+				1050 Connecticut Avenue, NW
+				Washington  DC  20036
+				US
+
+00-17-C6   (hex)		Cross Match Technologies Inc
+0017C6     (base 16)		Cross Match Technologies Inc
+				400, boul. Jean-Lesage
+				Québec    G1K 8W1
+				CA
+
+00-17-FE   (hex)		TALOS SYSTEM INC.
+0017FE     (base 16)		TALOS SYSTEM INC.
+				6191 CORNERSTONE CT. STE #109
+				SAN DIEGO  CA  92121
+				US
+
+00-17-F8   (hex)		Motech Industries Inc.
+0017F8     (base 16)		Motech Industries Inc.
+				6F, No. 248, Sec. 3, Pei-Shen Rd.,
+				Taipei Hsien    222
+				TW
+
+00-17-C3   (hex)		KTF Technologies Inc.
+0017C3     (base 16)		KTF Technologies Inc.
+				4th Fl., Central Tower, 265-3, Seohyun-Dong
+				Sungnam-City  Kyunggi-Do  463-769
+				KR
+
+00-17-B7   (hex)		Tonze Technology Co.
+0017B7     (base 16)		Tonze Technology Co.
+				5F-10, No.6, Lane 180,
+				Taipei    11490
+				TW
+
+00-17-AB   (hex)		Nintendo Co., Ltd.
+0017AB     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-18-07   (hex)		Fanstel Corp.
+001807     (base 16)		Fanstel Corp.
+				7466 E. Monte Cristo Ave.
+				Scottsdale  Arizona  85260
+				US
+
+00-18-08   (hex)		SightLogix, Inc.
+001808     (base 16)		SightLogix, Inc.
+				745 Alexander Road
+				Princeton  NJ  08540
+				US
+
+00-17-CE   (hex)		Screen Service Spa
+0017CE     (base 16)		Screen Service Spa
+				Via G.Di Vittorio 17
+				  Brescia  25125
+				IT
+
+00-17-DB   (hex)		CANKO TECHNOLOGIES INC.
+0017DB     (base 16)		CANKO TECHNOLOGIES INC.
+				5 FL. DONG SUNG BLDG. 17-8
+				SEOUL    150-874
+				KR
+
+00-17-D6   (hex)		Bluechips Microhouse Co.,Ltd.
+0017D6     (base 16)		Bluechips Microhouse Co.,Ltd.
+				212/2 M.10 Tambol Umong
+				Lamphun    51150
+				TH
+
+00-17-87   (hex)		Brother, Brother & Sons ApS
+001787     (base 16)		Brother, Brother & Sons ApS
+				Ved Amagerbanen 9
+				Copenhagen S    DK-2300
+				DK
+
+00-17-89   (hex)		Zenitron Corporation
+001789     (base 16)		Zenitron Corporation
+				No. 8, Lane 250, Sinhu 2nd Rd., Neihu District,
+				Taipei    11494
+				TW
+
+00-17-60   (hex)		Naito Densei Machida MFG.CO.,LTD
+001760     (base 16)		Naito Densei Machida MFG.CO.,LTD
+				2-17-28 Fuchinobe
+				Sagamihara  Kanagawa  229-0006
+				JP
+
+00-17-61   (hex)		Private
+001761     (base 16)		Private
+
+00-17-68   (hex)		Zinwave Ltd
+001768     (base 16)		Zinwave Ltd
+				Zinwave Ltd, Harston Mill
+				Cambridge  Cambridgeshire  CB2 5GG
+				GB
+
+00-17-69   (hex)		Cymphonix Corp
+001769     (base 16)		Cymphonix Corp
+				8871 S. Sandy Parkway, Suite 150
+				Sandy  UT  84070
+				US
+
+00-17-62   (hex)		Solar Technology, Inc.
+001762     (base 16)		Solar Technology, Inc.
+				7620 Cetronia Road
+				Allentown  PA  18106
+				US
+
+00-17-8F   (hex)		NINGBO YIDONG ELECTRONIC CO.,LTD.
+00178F     (base 16)		NINGBO YIDONG ELECTRONIC CO.,LTD.
+				No.65 Siming East Rd
+				Yuyao City, Zhejiang Province  Zhejiang Province China  P.C 315400
+				CN
+
+00-17-94   (hex)		Cisco Systems, Inc
+001794     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-17-8A   (hex)		DARTS TECHNOLOGIES CORP.
+00178A     (base 16)		DARTS TECHNOLOGIES CORP.
+				2F,No.119,Chien Kang Rd.,
+				Chung-Ho  Taipei Hsien  235
+				TW
+
+00-17-34   (hex)		ADC Telecommunications
+001734     (base 16)		ADC Telecommunications
+				541 E Trimble Road    
+				San Jose  California  95134-1224
+				US
+
+00-17-2E   (hex)		FXC Inc.
+00172E     (base 16)		FXC Inc.
+				10-16 6F, Nihonbashi Tomizawa-Chou, Chuo-ku
+				Tokyo    103-0006
+				JP
+
+00-17-2B   (hex)		Global Technologies Inc.
+00172B     (base 16)		Global Technologies Inc.
+				4/F Kicox Bldg.,188-5,Guro-Dong,Guro-gu,
+				  Seoul  152-848
+				KR
+
+00-17-72   (hex)		ASTRO Strobel Kommunikationssysteme GmbH
+001772     (base 16)		ASTRO Strobel Kommunikationssysteme GmbH
+				Olefant 1-3
+				Bergisch Gladbach  NRW  51427
+				DE
+
+00-17-3E   (hex)		LeucotronEquipamentos Ltda.
+00173E     (base 16)		LeucotronEquipamentos Ltda.
+				Rua Jorge Dionisio Barbosa, 312
+				Santa Rita do Sapucai  Minas Gerais  37.540-000
+				BR
+
+00-17-98   (hex)		Azonic Technology Co., LTD
+001798     (base 16)		Azonic Technology Co., LTD
+				15F-3, No. 163, Sec., 1 Keelung Rd.
+				Taipei    110
+				TW
+
+00-17-47   (hex)		Trimble
+001747     (base 16)		Trimble
+				345 SW Avery Ave
+				Corvallis  OR  97333
+				US
+
+00-17-7A   (hex)		ASSA ABLOY AB
+00177A     (base 16)		ASSA ABLOY AB
+				Theres Svenssons gata 15
+				Goteborg    41755
+				SE
+
+00-16-F4   (hex)		Eidicom Co., Ltd.
+0016F4     (base 16)		Eidicom Co., Ltd.
+				Polychem B/D 4th Floor, 900-1
+				Anyang-si  Kyeonggi-do  431-060
+				KR
+
+00-16-E7   (hex)		Dynamix Promotions Limited
+0016E7     (base 16)		Dynamix Promotions Limited
+				788-790, Finchley Road
+				London    NW11 7TJ
+				GB
+
+00-16-E5   (hex)		FORDLEY DEVELOPMENT LIMITED
+0016E5     (base 16)		FORDLEY DEVELOPMENT LIMITED
+				ROOM 706, 7TH FLOOR, YU SUNG BOON BUILDING, 107-111 DES VOEUX ROAD, CENTRAL,
+				    
+				HK
+
+00-16-E6   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+0016E6     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan
+				    324
+				TW
+
+00-17-20   (hex)		Image Sensing Systems, Inc.
+001720     (base 16)		Image Sensing Systems, Inc.
+				1600 University Ave. W.
+				St. Paul  MN  55104
+				US
+
+00-17-1A   (hex)		Winegard Company
+00171A     (base 16)		Winegard Company
+				3000 Kirkwood Street
+				Burlington  IA  52601
+				US
+
+00-16-C8   (hex)		Cisco Systems, Inc
+0016C8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-16-C4   (hex)		SiRF Technology, Inc.
+0016C4     (base 16)		SiRF Technology, Inc.
+				217 Devcon Dr.
+				San Jose  CA  95112
+				US
+
+00-16-F3   (hex)		CAST Information Co., Ltd
+0016F3     (base 16)		CAST Information Co., Ltd
+				5F MSA Bldg. 891-43 Dacchi-Dong,
+				SEOUL    135-280
+				KR
+
+00-16-F5   (hex)		Dalian Golden Hualu Digital Technology Co.,Ltd
+0016F5     (base 16)		Dalian Golden Hualu Digital Technology Co.,Ltd
+				No.1 Hua Road,Qixianling
+				Dalian  LiaoNing  116023
+				CN
+
+00-16-F1   (hex)		OmniSense, LLC
+0016F1     (base 16)		OmniSense, LLC
+				72 sams point road
+				Ladys Island  SC  29907
+				US
+
+00-16-DD   (hex)		Gigabeam Corporation
+0016DD     (base 16)		Gigabeam Corporation
+				407 Springpark Place
+				Herndon  VA  20170
+				US
+
+00-17-1C   (hex)		NT MicroSystems, Inc.
+00171C     (base 16)		NT MicroSystems, Inc.
+				1-5-3-2F Tamagawadai
+				Setagaya  Tokyo  158-0096
+				JP
+
+00-17-16   (hex)		Qno Technology Inc.
+001716     (base 16)		Qno Technology Inc.
+				6F-2, No.25, Puding Road
+				Hsinchu  Taiwan  300
+				TW
+
+00-17-26   (hex)		m2c Electronic Technology Ltd.
+001726     (base 16)		m2c Electronic Technology Ltd.
+				2403, 24/F, Nanyang Plaza
+				Kwuntong  Hong Kong  999 999
+				CN
+
+00-17-21   (hex)		FITRE S.p.A.
+001721     (base 16)		FITRE S.p.A.
+				Via Valsolda, 15
+				MILANO  MI  20142
+				IT
+
+00-16-F9   (hex)		CETRTA POT, d.o.o., Kranj
+0016F9     (base 16)		CETRTA POT, d.o.o., Kranj
+				Planina 3
+				Kranj  SI  4000
+				SI
+
+00-17-0A   (hex)		INEW DIGITAL COMPANY
+00170A     (base 16)		INEW DIGITAL COMPANY
+				Supply Bureau 3th floor KT&G 203-1,
+				Daejeon    306-712
+				KR
+
+00-16-BD   (hex)		ATI Industrial Automation
+0016BD     (base 16)		ATI Industrial Automation
+				1031 Goodworth Drive
+				Apex  North Carolina  27539-3869
+				US
+
+00-16-C0   (hex)		Semtech Corporation
+0016C0     (base 16)		Semtech Corporation
+				200 Flynn Rd
+				Camarillo  California  93012
+				US
+
+00-16-C2   (hex)		Avtec Systems Inc
+0016C2     (base 16)		Avtec Systems Inc
+				14432 Albemarle Point Place
+				Chantilly  Virginia  20151
+				US
+
+00-16-BA   (hex)		WEATHERNEWS INC.
+0016BA     (base 16)		WEATHERNEWS INC.
+				NAKASE 1-3 MTG
+				CHIBA    262-0032
+				US
+
+00-16-B2   (hex)		DriveCam Inc
+0016B2     (base 16)		DriveCam Inc
+				3954 Murphy Canyon Road
+				San Diego  CA  92123
+				US
+
+00-16-B3   (hex)		Photonicbridges (China) Co., Ltd.
+0016B3     (base 16)		Photonicbridges (China) Co., Ltd.
+				No. 900, Yishan road,
+				Shanghai    200233
+				US
+
+00-16-AD   (hex)		BT-Links Company Limited
+0016AD     (base 16)		BT-Links Company Limited
+				Rm 802, Nan Fung Centre, 264-298 Castle Peak Rd
+				    
+				HK
+
+00-16-6E   (hex)		Arbitron Inc.
+00166E     (base 16)		Arbitron Inc.
+				9705 Patuxent Woods Drive
+				Columbia  MD  21046
+				US
+
+00-16-AF   (hex)		Shenzhen Union Networks Equipment Co.,Ltd.
+0016AF     (base 16)		Shenzhen Union Networks Equipment Co.,Ltd.
+				Yihai Square east building 2307, Chuangye road, Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+00-16-9E   (hex)		TV One Ltd
+00169E     (base 16)		TV One Ltd
+				Unit V Continental Approach
+				Margate  Kent  CT9 4JG
+				GB
+
+00-16-6A   (hex)		TPS
+00166A     (base 16)		TPS
+				145 quai de Stalingrad
+				Issy Les Moulineaux  Ile de France  92137
+				FR
+
+00-16-63   (hex)		KBT Mobile
+001663     (base 16)		KBT Mobile
+				4F, Polaris I, 15-3, Jeongja-dong, Bundang-gu
+				Seongnam-si,  Gyeonggi-do  463-811
+				KR
+
+00-16-9F   (hex)		Vimtron Electronics Co., Ltd.
+00169F     (base 16)		Vimtron Electronics Co., Ltd.
+				7F., No.9, Alley 2, Lane 35
+				Neihu District  Taipei City  11492
+				TW
+
+00-16-9A   (hex)		Quadrics Ltd
+00169A     (base 16)		Quadrics Ltd
+				1 Bridewell Street
+				Bristol    BS1 2AA
+				GB
+
+00-16-92   (hex)		Scientific-Atlanta, Inc.
+001692     (base 16)		Scientific-Atlanta, Inc.
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+00-16-91   (hex)		Moser-Baer AG
+001691     (base 16)		Moser-Baer AG
+				Spitalstrasse 7
+				Sumiswald  BE  3454
+				CH
+
+00-16-88   (hex)		ServerEngines LLC
+001688     (base 16)		ServerEngines LLC
+				209 N. Fair Oaks Avenue
+				Sunnyvale  CA  94085
+				US
+
+00-16-8B   (hex)		Paralan Corporation
+00168B     (base 16)		Paralan Corporation
+				455 Ruffner St.
+				San Diego  CA  92111
+				US
+
+00-16-0A   (hex)		SWEEX Europe BV
+00160A     (base 16)		SWEEX Europe BV
+				Ampereweg 3
+				Delft  Zuid-Holland  2627 BG
+				NL
+
+00-16-02   (hex)		CEYON TECHNOLOGY CO.,LTD.
+001602     (base 16)		CEYON TECHNOLOGY CO.,LTD.
+				13F Samsung Insurance B/D. #942-9
+				Suwon-City  Gyeonggi-Do  442-832
+				KR
+
+00-16-00   (hex)		CelleBrite Mobile Synchronization
+001600     (base 16)		CelleBrite Mobile Synchronization
+				25 Basel St
+				Petach Tikva    49170
+				IL
+
+00-15-F4   (hex)		Eventide
+0015F4     (base 16)		Eventide
+				1 Alsan Way
+				Little Ferry  NJ  07643
+				US
+
+00-16-29   (hex)		Nivus GmbH
+001629     (base 16)		Nivus GmbH
+				Im Täle 2
+				Eppingen  Baden-Württemberg  75031
+				DE
+
+00-16-21   (hex)		Colorado Vnet
+001621     (base 16)		Colorado Vnet
+				255 E. 6th St.
+				Loveland  CO  80537
+				US
+
+00-16-1A   (hex)		Dametric AB
+00161A     (base 16)		Dametric AB
+				Box 120
+				Skarholmen  Stockholm  SE-12723
+				SE
+
+00-16-15   (hex)		Nittan Company, Limited
+001615     (base 16)		Nittan Company, Limited
+				11-6, 1-chome, Hatagaya
+				Shibuya-ku  Tokyo  151-8535
+				JP
+
+00-16-17   (hex)		MSI
+001617     (base 16)		MSI
+				No.69, Li-De St, Jung-Ho City
+				Taipei Hsien    235
+				TW
+
+00-16-2E   (hex)		Space Shuttle Hi-Tech Co., Ltd.
+00162E     (base 16)		Space Shuttle Hi-Tech Co., Ltd.
+				No. 226, Wu-Ho St., Wu-Lung Village,
+				Hsinchu Hsien    307
+				TW
+
+00-16-2A   (hex)		Antik computers & communications s.r.o.
+00162A     (base 16)		Antik computers & communications s.r.o.
+				Razusova 2
+				Kosice  SK  SK-04001
+				SK
+
+00-16-56   (hex)		Nintendo Co., Ltd.
+001656     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-16-51   (hex)		Exeo Systems
+001651     (base 16)		Exeo Systems
+				1650, rue Michelin, suite 201
+				Laval  Québec  H7L 4R3
+				CA
+
+00-16-10   (hex)		Carina Technology
+001610     (base 16)		Carina Technology
+				690A Discovery Drive
+				Huntsville  AL  35806
+				US
+
+00-16-06   (hex)		Ideal Industries
+001606     (base 16)		Ideal Industries
+				15070 Ave. of Science #200
+				San Diego  CA  92128
+				US
+
+00-16-07   (hex)		Curves International Inc.
+001607     (base 16)		Curves International Inc.
+				100 Ritchie Road
+				Waco  Texas  76712
+				US
+
+00-16-54   (hex)		Flex-P Industries Sdn. Bhd.
+001654     (base 16)		Flex-P Industries Sdn. Bhd.
+				No.128-12-2, Menara UMNO,
+				Georgetown  Penang  10400
+				US
+
+00-16-31   (hex)		Xteam
+001631     (base 16)		Xteam
+				room 801, No.102 international Science & Techology Park
+				  Beijing  8610
+				CN
+
+00-16-4B   (hex)		Quorion Data Systems GmbH
+00164B     (base 16)		Quorion Data Systems GmbH
+				An der Klinge 6
+				Erfurt  Thuringia  99095
+				DE
+
+00-15-94   (hex)		BIXOLON CO.,LTD
+001594     (base 16)		BIXOLON CO.,LTD
+				502-508,Digital Empire Bldg.
+				Yeongtong-Gu,Suwon  Gyeonggi-Do  443-813
+				KR
+
+00-15-90   (hex)		Hectronic GmbH
+001590     (base 16)		Hectronic GmbH
+				Allmendstraße 15
+				Bonndorf  Baden-Württemberg  79848
+				DE
+
+00-15-8C   (hex)		Liab ApS
+00158C     (base 16)		Liab ApS
+				Oestre Alle 6
+				Stoevring    DK-9530
+				DK
+
+00-15-8F   (hex)		NTT Advanced Technology Corporation
+00158F     (base 16)		NTT Advanced Technology Corporation
+				Shinjuku Mitsui Bldg. 2-1-1, Nishi-shinjuku,
+				Shinjuku-ku  Tokyo  163-0431
+				JP
+
+00-15-ED   (hex)		Fulcrum Microsystems, Inc.
+0015ED     (base 16)		Fulcrum Microsystems, Inc.
+				26630 Agoura Road
+				Calabasas  CA  91302
+				US
+
+00-15-F0   (hex)		EGO BV
+0015F0     (base 16)		EGO BV
+				Parade 15
+				's-Hertogenbosch  Noord-Brabant  5211KL
+				NL
+
+00-15-EE   (hex)		Omnex Control Systems
+0015EE     (base 16)		Omnex Control Systems
+				#74 - 1833 Coast Meridian Rd.
+				Port Coquitlam  BC  V3C 6G5
+				CA
+
+00-15-C8   (hex)		FlexiPanel Ltd
+0015C8     (base 16)		FlexiPanel Ltd
+				7 bis rue Lalo
+				  Paris  75016
+				FR
+
+00-15-C0   (hex)		DIGITAL TELEMEDIA CO.,LTD.
+0015C0     (base 16)		DIGITAL TELEMEDIA CO.,LTD.
+				17TH FLOOR, CHINA YUSE BUILDING,
+				SHENZHEN  GUANGDONG  518040
+				CN
+
+00-15-C2   (hex)		3M Germany
+0015C2     (base 16)		3M Germany
+				Carl Schurz Str. 1
+				Neuss  NRW  41453
+				US
+
+00-15-88   (hex)		Salutica Allied Solutions Sdn Bhd
+001588     (base 16)		Salutica Allied Solutions Sdn Bhd
+				3 Jalan Zarib 6
+				Lahat, Ipoh  Perak  31500
+				MY
+
+00-15-83   (hex)		IVT corporation
+001583     (base 16)		IVT corporation
+				Shangdi Xinxi road, Haidian District
+				Beijing    100085
+				US
+
+00-15-85   (hex)		Aonvision Technolopy Corp.
+001585     (base 16)		Aonvision Technolopy Corp.
+				2F, No. 58, Park 2nd Ave. Science-Based Industrial Park,
+				  Hsinchu  300
+				TW
+
+00-15-A5   (hex)		DCI Co., Ltd.
+0015A5     (base 16)		DCI Co., Ltd.
+				4th Fl. Susung B/D, 893-4
+				Daejeon    305-330
+				KR
+
+00-15-B2   (hex)		Advanced Industrial Computer, Inc.
+0015B2     (base 16)		Advanced Industrial Computer, Inc.
+				17970 E. Ajax Circle
+				City of Industry  CA  91748
+				US
+
+00-15-DA   (hex)		IRITEL A.D.
+0015DA     (base 16)		IRITEL A.D.
+				Batajnicki put 23
+				Beograd  Serbia  11080
+				YU
+
+00-15-4A   (hex)		WANSHIH ELECTRONIC CO., LTD
+00154A     (base 16)		WANSHIH ELECTRONIC CO., LTD
+				3F 72, WU KONG 6th RD.,
+				TAIPEI HSIEN  TAIWAN  248
+				TW
+
+00-15-4C   (hex)		Saunders Electronics
+00154C     (base 16)		Saunders Electronics
+				192 Gannett Drive
+				South Portland  ME  04106
+				US
+
+00-15-4D   (hex)		Netronome Systems, Inc.
+00154D     (base 16)		Netronome Systems, Inc.
+				3159 Unionville Road
+				Cranberry Twp.  PA  16066
+				US
+
+00-15-49   (hex)		Dixtal Biomedica Ind. Com. Ltda
+001549     (base 16)		Dixtal Biomedica Ind. Com. Ltda
+				R. Eng. Francisco Pitta Brito, 703
+				São Paulo  SP  04753-080
+				BR
+
+00-15-3D   (hex)		ELIM PRODUCT CO.
+00153D     (base 16)		ELIM PRODUCT CO.
+				602-2 GAYANG TECHNO TOWN, GAYANG, 3-DONG
+				  SEOUL  157-793
+				KR
+
+00-15-44   (hex)		coM.s.a.t. AG
+001544     (base 16)		coM.s.a.t. AG
+				Besselstraße 3
+				Mannheim    D-68219
+				US
+
+00-15-39   (hex)		Technodrive srl
+001539     (base 16)		Technodrive srl
+				Via Leonardo da Vinci  162
+				Trezzano S/N  Milan  20090
+				IT
+
+00-15-31   (hex)		KOCOM
+001531     (base 16)		KOCOM
+				5F, KOCOM Bldg., 260-7
+				SEOUL    157-040
+				KR
+
+00-15-35   (hex)		OTE Spa
+001535     (base 16)		OTE Spa
+				via Barsanti 8
+				Florence  FI  50127
+				IT
+
+00-15-36   (hex)		Powertech co.,Ltd
+001536     (base 16)		Powertech co.,Ltd
+				#705, dongyoung Venturestel, 199-32
+				Anyang City  Kyoungki-do  430-010
+				US
+
+00-15-2B   (hex)		Cisco Systems, Inc
+00152B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-2C   (hex)		Cisco Systems, Inc
+00152C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-28   (hex)		Beacon Medical Products LLC d.b.a. BeaconMedaes
+001528     (base 16)		Beacon Medical Products LLC d.b.a. BeaconMedaes
+				14408 W 105TH ST
+				LENEXA  KS  66215
+				US
+
+00-15-27   (hex)		Balboa Instruments
+001527     (base 16)		Balboa Instruments
+				1382 Bell Ave
+				Tustin  CA  92780
+				US
+
+00-15-21   (hex)		Horoquartz
+001521     (base 16)		Horoquartz
+				BP 251
+				FONTENAY LE COMTE  VENDEE  85205
+				FR
+
+00-15-20   (hex)		Radiocrafts AS
+001520     (base 16)		Radiocrafts AS
+				Sandakerveien 64
+				  Oslo  0484
+				NO
+
+00-15-66   (hex)		A-First Technology Co., Ltd.
+001566     (base 16)		A-First Technology Co., Ltd.
+				5F, No. 111-2, Shin-Teh Rd.,
+				San-Chung City  Taipei Shien  241
+				TW
+
+00-15-6B   (hex)		Perfisans Networks Corp.
+00156B     (base 16)		Perfisans Networks Corp.
+				4118 14th Avenue
+				Markham  Ontario  L3R 0J3
+				CA
+
+00-15-47   (hex)		AiZen Solutions Inc.
+001547     (base 16)		AiZen Solutions Inc.
+				10F-1, No.29, Puding Rd.
+				Hsinchu  Hsinchu County  300
+				TW
+
+00-15-79   (hex)		Lunatone Industrielle Elektronik GmbH
+001579     (base 16)		Lunatone Industrielle Elektronik GmbH
+				Rennbahnweg 55
+				Wien    1220
+				AT
+
+00-14-D7   (hex)		Datastore Technology Corp
+0014D7     (base 16)		Datastore Technology Corp
+				9F, NO.10, SEC.1, Chung Hsing RD., Wu-Ku
+				Taipei Hsien,    248
+				TW
+
+00-14-DD   (hex)		Covergence Inc.
+0014DD     (base 16)		Covergence Inc.
+				One Clock Tower Place, Suite 200
+				Maynard  MA  01754
+				US
+
+00-14-D4   (hex)		K Technology Corporation
+0014D4     (base 16)		K Technology Corporation
+				325 Ganbara
+				Kami-gun  Miyagi-ken  981-4263
+				JP
+
+00-14-CF   (hex)		INVISIO Communications
+0014CF     (base 16)		INVISIO Communications
+				Stamholmen 157
+				Hvidovre    2650
+				DK
+
+00-14-BE   (hex)		Wink communication technology CO.LTD
+0014BE     (base 16)		Wink communication technology CO.LTD
+				Huijiang Ind Blding Dashi Town
+				Guang zhou  Guang dong  511430
+				CN
+
+00-15-11   (hex)		Data Center Systems
+001511     (base 16)		Data Center Systems
+				14802 Venture Drive
+				Dallas  TX  75234
+				US
+
+00-15-0E   (hex)		OPENBRAIN TECHNOLOGIES CO., LTD.
+00150E     (base 16)		OPENBRAIN TECHNOLOGIES CO., LTD.
+				#804,ANYANG K-CENTER,1591-9 , BURIM-DONG,DONGAN-GU,
+				ANYANG  KYUNGGI-DO  431-815
+				KR
+
+00-15-0D   (hex)		Hoana Medical, Inc.
+00150D     (base 16)		Hoana Medical, Inc.
+				828 Fort Street Mall
+				Honolulu  HI  96813
+				US
+
+00-15-1C   (hex)		LENECO
+00151C     (base 16)		LENECO
+				6th.,Dong Moon Good Morning Tower 1
+				Kyeong Ki-Do  GoYang-Si  411-817
+				KR
+
+00-15-19   (hex)		StoreAge Networking Technologies
+001519     (base 16)		StoreAge Networking Technologies
+				63 Bar-Yehuda st.
+				Nesher    36651
+				IL
+
+00-15-06   (hex)		Neo Photonics
+001506     (base 16)		Neo Photonics
+				910 E. California St.
+				Sunnyvale  CA  94085
+				US
+
+00-15-04   (hex)		GAME PLUS CO., LTD.
+001504     (base 16)		GAME PLUS CO., LTD.
+				164-57, Yeonghwa-dong, Jangan-gu
+				Suwon  Gyeonggi-do  440-818
+				KR
+
+00-15-05   (hex)		Actiontec Electronics, Inc
+001505     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-14-FE   (hex)		Artech Electronics
+0014FE     (base 16)		Artech Electronics
+				#301, Yangjae Bldg., 276-2
+				Seoul    137-895
+				KR
+
+00-14-DE   (hex)		Sage Instruments Inc.
+0014DE     (base 16)		Sage Instruments Inc.
+				240 Airport Blvd.
+				Freedom  CA  95019
+				US
+
+00-14-DF   (hex)		HI-P Tech Corporation
+0014DF     (base 16)		HI-P Tech Corporation
+				1-27-23 Higashitokorozawa
+				Tokorozawa  Saitama  359-0021
+				JP
+
+00-14-E6   (hex)		AIM Infrarotmodule GmbH
+0014E6     (base 16)		AIM Infrarotmodule GmbH
+				Soeflingerstraße 100
+				Ulm  BW  89077
+				DE
+
+00-14-F3   (hex)		ViXS Systems Inc
+0014F3     (base 16)		ViXS Systems Inc
+				2235 Sheppard Ave East
+				TORONTO  ONTARIO  M2J 5B5
+				CA
+
+00-14-7E   (hex)		InnerWireless
+00147E     (base 16)		InnerWireless
+				1155 Kas Drive, Suite 200
+				Richardson  TX  75081
+				US
+
+00-14-7D   (hex)		Aeon Digital International
+00147D     (base 16)		Aeon Digital International
+				31-6, The Bund Center
+				Shanghai  SH  200002
+				CN
+
+00-14-76   (hex)		MultiCom Industries Limited
+001476     (base 16)		MultiCom Industries Limited
+				Room 1206-7, Manhattan Center,
+				Kwai Chung, N.T.    
+				HK
+
+00-14-73   (hex)		Bookham Inc
+001473     (base 16)		Bookham Inc
+				10 Brewer Hunt Way
+				Kanata  ON  K2K 2B5
+				CA
+
+00-14-89   (hex)		B15402100 - JANDEI, S.L.
+001489     (base 16)		B15402100 - JANDEI, S.L.
+				POL. IND. POCOMACO, E-28
+				LA Coruña    15190
+				ES
+
+00-14-80   (hex)		Hitachi-LG Data Storage Korea, Inc
+001480     (base 16)		Hitachi-LG Data Storage Korea, Inc
+				19-1,Cheongho-ri
+				Pyungtaik  Kyunggi-Do  451-713
+				KR
+
+00-14-B6   (hex)		Enswer Technology Inc.
+0014B6     (base 16)		Enswer Technology Inc.
+				1F No.70 Sec.2 Chung Shun St.
+				Taipei    116
+				TW
+
+00-14-B2   (hex)		mCubelogics Corporation
+0014B2     (base 16)		mCubelogics Corporation
+				4F, Unibooks B/D, 514-1, Dogok-Dong, KangNam
+				Seoul    135-270
+				KR
+
+00-14-AE   (hex)		Wizlogics Co., Ltd.
+0014AE     (base 16)		Wizlogics Co., Ltd.
+				Rm#1321, Samchang Plaza, 173,
+				Seoul    121-745
+				KR
+
+00-14-A6   (hex)		Teranetics, Inc.
+0014A6     (base 16)		Teranetics, Inc.
+				3965 Freedom Circle
+				Santa Clara  CA  95054
+				US
+
+00-14-69   (hex)		Cisco Systems, Inc
+001469     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-14-BA   (hex)		Carvers SA de CV
+0014BA     (base 16)		Carvers SA de CV
+				Alvarez del Castillo 1550
+				Guadalajara  Jalisco  44620
+				MX
+
+00-14-8A   (hex)		Elin Ebg Traction Gmbh
+00148A     (base 16)		Elin Ebg Traction Gmbh
+				Cumberlandstrasse 32
+				Vienna    1140
+				AT
+
+00-14-6E   (hex)		H. Stoll GmbH & Co. KG
+00146E     (base 16)		H. Stoll GmbH & Co. KG
+				Stollweg
+				Reutlingen  Deutschland  72760
+				DE
+
+00-14-AA   (hex)		Ashly Audio, Inc.
+0014AA     (base 16)		Ashly Audio, Inc.
+				847 Holt Road
+				Webster  NY  14580
+				US
+
+00-14-09   (hex)		MAGNETI MARELLI   S.E. S.p.A.
+001409     (base 16)		MAGNETI MARELLI   S.E. S.p.A.
+				ZI Nord, Allee d'Argenson
+				CHATELLERAULT    86100
+				FR
+
+00-14-0B   (hex)		FIRST INTERNATIONAL COMPUTER, INC.
+00140B     (base 16)		FIRST INTERNATIONAL COMPUTER, INC.
+				FIC BUILDING, NO.300, YANG GUANG ST.,
+				  TAIPEI COUNTY  114
+				TW
+
+00-13-FD   (hex)		Nokia Danmark A/S
+0013FD     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-14-00   (hex)		MINERVA KOREA CO., LTD
+001400     (base 16)		MINERVA KOREA CO., LTD
+				#203, SH Sienne, Seohyeon-Dong
+				Seongnam-Si  Gyeonggi-Do  463-821
+				KR
+
+00-13-FC   (hex)		SiCortex, Inc
+0013FC     (base 16)		SiCortex, Inc
+				One Clocktower Place
+				Maynard  MA  01754
+				US
+
+00-13-F6   (hex)		Cintech
+0013F6     (base 16)		Cintech
+				21a route de la wantzenau
+				Hoenheim    67800
+				FR
+
+00-14-4F   (hex)		Oracle Corporation 
+00144F     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+00-14-56   (hex)		Edge Products
+001456     (base 16)		Edge Products
+				1080 South Depot Drive
+				Ogden  Utah  84404
+				US
+
+00-14-50   (hex)		Heim Systems GmbH
+001450     (base 16)		Heim Systems GmbH
+				Friedrich Ebert Strasse
+				Bergisch Gladbach  NRW  51429
+				DE
+
+00-14-52   (hex)		CALCULEX,INC.
+001452     (base 16)		CALCULEX,INC.
+				132 W. LAS CRUCES AVE.
+				LAS CRUCES  NEW MEXICO  88001
+				US
+
+00-14-42   (hex)		ATTO CORPORATION
+001442     (base 16)		ATTO CORPORATION
+				1-25-23 Hongo,
+				  Tokyo  113-8425
+				JP
+
+00-14-47   (hex)		BOAZ Inc.
+001447     (base 16)		BOAZ Inc.
+				282 Pukok-ri SongSan-myon Dangzin-gun Chungcheongnam-do, 343-834
+				Seoul  SeoCho-gu  137-070
+				KR
+
+00-14-3E   (hex)		AirLink Communications, Inc.
+00143E     (base 16)		AirLink Communications, Inc.
+				3159 Corporate Place
+				Hayward  CA  94545
+				US
+
+00-14-5D   (hex)		WJ Communications, Inc.
+00145D     (base 16)		WJ Communications, Inc.
+				401 River Oaks Parkway
+				San Jose  CA  95134
+				US
+
+00-14-3B   (hex)		Sensovation AG
+00143B     (base 16)		Sensovation AG
+				Markhallen -Str
+				Radolfzell  Baden-Württemberg  78315
+				DE
+
+00-14-2D   (hex)		Toradex AG
+00142D     (base 16)		Toradex AG
+				Altsagenstrasse 5
+				Horw  LU  6048
+				CH
+
+00-14-29   (hex)		V Center Technologies Co., Ltd.
+001429     (base 16)		V Center Technologies Co., Ltd.
+				7F-7, NO.35, Hsintai Rd.
+				Jubei City  Hsinchu  302
+				TW
+
+00-14-14   (hex)		Jumpnode Systems LLC.
+001414     (base 16)		Jumpnode Systems LLC.
+				800 Washington Ave N.
+				Minneapolis  MN  55041
+				US
+
+00-14-1E   (hex)		P.A. Semi, Inc.
+00141E     (base 16)		P.A. Semi, Inc.
+				3965 Freedom Circle, Fl 8
+				Santa Clara  CA  95054
+				US
+
+00-13-CB   (hex)		Zenitel Norway AS
+0013CB     (base 16)		Zenitel Norway AS
+				Sandaker v 24 c
+				  Oslo  0403
+				NO
+
+00-13-CF   (hex)		4Access Communications
+0013CF     (base 16)		4Access Communications
+				1 N. LaSalle St.
+				Chicago  IL  60602
+				US
+
+00-13-BE   (hex)		Virtual Conexions
+0013BE     (base 16)		Virtual Conexions
+				410 rue St-Nicolas, suite 600
+				Montréal  QUÉBEC  H2Y 2P5
+				CA
+
+00-13-B9   (hex)		BM SPA
+0013B9     (base 16)		BM SPA
+				VIA MILANO 54/56
+				Rozzano    20089
+				IT
+
+00-13-AB   (hex)		Telemotive AG
+0013AB     (base 16)		Telemotive AG
+				Breitwiesen
+				Muehlhausen  Baden Wuerttemberg  73347
+				DE
+
+00-13-C9   (hex)		Beyond Achieve Enterprises Ltd.
+0013C9     (base 16)		Beyond Achieve Enterprises Ltd.
+				XIN LIAN HI-TECH INDUSTRIAL AREA, HU-MEN
+				DONGGUAN  GUANG DONG  
+				CN
+
+00-13-C6   (hex)		OpenGear, Inc
+0013C6     (base 16)		OpenGear, Inc
+				7984 South Welby Park #101
+				Salt Lake City  UTAH  84088
+				US
+
+00-13-F3   (hex)		Giga-byte Communications Inc.
+0013F3     (base 16)		Giga-byte Communications Inc.
+				8F, No.43, Fu-Hsin Road. Hsin-Tien
+				Taipei Hsien    231
+				TW
+
+00-13-F4   (hex)		Psitek (Pty) Ltd
+0013F4     (base 16)		Psitek (Pty) Ltd
+				The Vineyards Office Estate
+				Tyger Valley  Cape Town  7530
+				ZA
+
+00-13-AC   (hex)		Sunmyung Electronics Co., LTD
+0013AC     (base 16)		Sunmyung Electronics Co., LTD
+				LARGO-PLAZA 8F, Janghang-Dong
+				Koyang  Kyungki  411-837
+				KR
+
+00-13-A8   (hex)		Tanisys Technology
+0013A8     (base 16)		Tanisys Technology
+				11001 Lakeline blvd
+				Austin  TX  78717
+				US
+
+00-13-DA   (hex)		Diskware Co., Ltd
+0013DA     (base 16)		Diskware Co., Ltd
+				1-4-12 Kiba
+				Koto-ku  Tokyo  135-0042
+				JP
+
+00-13-D8   (hex)		Princeton Instruments
+0013D8     (base 16)		Princeton Instruments
+				3660 Quakerbridge Road
+				Trenton  NJ  08619
+				US
+
+00-13-99   (hex)		STAC Corporation.
+001399     (base 16)		STAC Corporation.
+				2-16-37 fujimi
+				sayama-shi  saitama  350-1306
+				JP
+
+00-13-E9   (hex)		VeriWave, Inc.
+0013E9     (base 16)		VeriWave, Inc.
+				9600 SW Oak St.
+				Portland  OR  97223
+				US
+
+00-13-56   (hex)		FLIR Radiation Inc
+001356     (base 16)		FLIR Radiation Inc
+				100 Midland Rd
+				Oak Ridge  TN  37830
+				US
+
+00-13-5A   (hex)		Project T&E Limited
+00135A     (base 16)		Project T&E Limited
+				Room 3C, 2/F. Wah Shing Center,
+				Kwun Tong,  Kowloon,  852
+				HK
+
+00-13-61   (hex)		Biospace Co., Ltd.
+001361     (base 16)		Biospace Co., Ltd.
+				10th Floor, Poonglim Bldg, 823 Yeoksam 1-dong
+				Gangnam-gu  Seoul  135-784
+				KR
+
+00-13-62   (hex)		ShinHeung Precision Co., Ltd.
+001362     (base 16)		ShinHeung Precision Co., Ltd.
+				DaeHa Bldg. 401
+				YoungDungPoGu  Seoul  150-050
+				KR
+
+00-13-4F   (hex)		Rapidus Wireless Networks Inc.
+00134F     (base 16)		Rapidus Wireless Networks Inc.
+				47 - 14550 Morris Valley Road
+				Agassiz  British Columbia  V0M 1A1
+				CA
+
+00-13-78   (hex)		Qsan Technology, Inc.
+001378     (base 16)		Qsan Technology, Inc.
+				4F., No.103, Ruihu St., Neihu Dist.
+				Taipei    114
+				TW
+
+00-13-7A   (hex)		Netvox Technology Co., Ltd.
+00137A     (base 16)		Netvox Technology Co., Ltd.
+				No.21-1 Sec. 1 Chung Hua West Road
+				Tainan    702
+				TW
+
+00-13-81   (hex)		CHIPS & Systems, Inc.
+001381     (base 16)		CHIPS & Systems, Inc.
+				4750 Patrick Henry Drive
+				Santa Clara  California  95054
+				US
+
+00-13-79   (hex)		PONDER INFORMATION INDUSTRIES LTD.
+001379     (base 16)		PONDER INFORMATION INDUSTRIES LTD.
+				14F,No.77,lane700, Chung-Cheng Road
+				Hsin-Tien City  Taipei Hsien  231
+				TW
+
+00-13-2C   (hex)		MAZ Brandenburg GmbH
+00132C     (base 16)		MAZ Brandenburg GmbH
+				Pascalstraße 10a
+				Berlin  Berlin  10587
+				DE
+
+00-13-24   (hex)		Schneider Electric Ultra Terminal
+001324     (base 16)		Schneider Electric Ultra Terminal
+				Industriparken 32
+				Copenhagen    2750
+				DK
+
+00-13-26   (hex)		ECM Systems Ltd
+001326     (base 16)		ECM Systems Ltd
+				Ellifoot Park
+				HULL  East Yorkshire  HU12 9DZ
+				GB
+
+00-13-27   (hex)		Data Acquisitions limited
+001327     (base 16)		Data Acquisitions limited
+				84 Gasson street
+				Christchurch    
+				NZ
+
+00-13-67   (hex)		Narayon. Co., Ltd.
+001367     (base 16)		Narayon. Co., Ltd.
+				#502 Hyochang T/W 181-3
+				Seoul    138-220
+				KR
+
+00-13-5C   (hex)		OnSite Systems, Inc.
+00135C     (base 16)		OnSite Systems, Inc.
+				3900 Freedom Circle
+				Santa Clara  CA  95054-1222
+				US
+
+00-13-5F   (hex)		Cisco Systems, Inc
+00135F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-13-3B   (hex)		Speed Dragon Multimedia Limited
+00133B     (base 16)		Speed Dragon Multimedia Limited
+				Room 1312, Vanta Industrial Centre,
+				Kwai Chung  N.T.  
+				HK
+
+00-13-38   (hex)		FRESENIUS-VIAL
+001338     (base 16)		FRESENIUS-VIAL
+				Le Grand Chemin
+				BREZINS    38590
+				FR
+
+00-13-2D   (hex)		iWise Communications
+00132D     (base 16)		iWise Communications
+				Unit 3C, Arden Grove
+				Cape Town    7441
+				ZA
+
+00-13-74   (hex)		Atheros Communications, Inc.
+001374     (base 16)		Atheros Communications, Inc.
+				529 Almanor Avenue
+				Sunnyvale  CA  94085-3512
+				US
+
+00-13-69   (hex)		Honda Electron Co., LED.
+001369     (base 16)		Honda Electron Co., LED.
+				Kanematsu Building 3 Floor
+				Chuo-ku  Tokyo  104-0031
+				JP
+
+00-13-42   (hex)		Vision Research, Inc.
+001342     (base 16)		Vision Research, Inc.
+				190 Parish Drive
+				Wayne  NJ  07470
+				US
+
+00-13-40   (hex)		AD.EL s.r.l.
+001340     (base 16)		AD.EL s.r.l.
+				via S. Pertini,5
+				Martellago  VENEZIA  30030
+				IT
+
+00-13-0C   (hex)		HF System Corporation
+00130C     (base 16)		HF System Corporation
+				1520-1 Ayukai
+				Nishiokitama-Gun  Yamagata-Ken  992-0771
+				JP
+
+00-13-0F   (hex)		EGEMEN Bilgisayar Muh San ve Tic LTD STI
+00130F     (base 16)		EGEMEN Bilgisayar Muh San ve Tic LTD STI
+				Fevzi Cakmak 2 Sok 31/A
+				ANKARA  CANKAYA  06440
+				TR
+
+00-13-13   (hex)		GuangZhou Post & Telecom Equipment ltd
+001313     (base 16)		GuangZhou Post & Telecom Equipment ltd
+				139# Zhongshan Ave
+				Guangzhou  Guangdong  510630
+				CN
+
+00-12-CB   (hex)		CSS Inc.
+0012CB     (base 16)		CSS Inc.
+				151 Superior Blvd.
+				Mississauga  Ontario  L5T2L1
+				CA
+
+00-12-CE   (hex)		Advanced Cybernetics Group
+0012CE     (base 16)		Advanced Cybernetics Group
+				2953 Bunker Hill Lane
+				Santa Clara  CA  95054
+				US
+
+00-12-CA   (hex)		Mechatronic Brick Aps
+0012CA     (base 16)		Mechatronic Brick Aps
+				Alsion 2
+				6400  Sonderborg  
+				DK
+
+00-12-C7   (hex)		SECURAY Technologies Ltd.Co.
+0012C7     (base 16)		SECURAY Technologies Ltd.Co.
+				Tianjin Haitai Industrial Base ErWei Road
+				Tianjin    300384
+				CN
+
+00-12-CD   (hex)		ASEM SpA
+0012CD     (base 16)		ASEM SpA
+				Via Buia, 4
+				ARTEGNA  Udine  I-33011
+				IT
+
+00-12-E8   (hex)		Fraunhofer IMS
+0012E8     (base 16)		Fraunhofer IMS
+				Finkenstrasse 61
+				Duisburg  NRW  47057
+				DE
+
+00-12-DD   (hex)		Shengqu Information Technology (Shanghai) Co., Ltd.
+0012DD     (base 16)		Shengqu Information Technology (Shanghai) Co., Ltd.
+				No.1 Building,No. 690 Bibo Road,Pudong New Area
+				Shanghai    201203
+				CN
+
+00-13-1D   (hex)		Scanvaegt International A/S
+00131D     (base 16)		Scanvaegt International A/S
+				P.O.Pedersens vej 18
+				Aarhus  Jylland  8200 N
+				DK
+
+00-13-18   (hex)		DGSTATION Co., Ltd.
+001318     (base 16)		DGSTATION Co., Ltd.
+				Rm.401, Bldg.A, Bundang Techno Park 150, Yatap-Dong, Bundang-Gu, Sungnam-Si, Gyunggi-Do, 463-760, Korea
+				Sungnam  Gyunggi  463-760
+				KR
+
+00-13-1A   (hex)		Cisco Systems, Inc
+00131A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-12-F4   (hex)		Belco International Co.,Ltd.
+0012F4     (base 16)		Belco International Co.,Ltd.
+				212, Yeokok-Dong, Wonmi-gu
+				Puchun-Si  Kyongki-Do  420-100
+				KR
+
+00-12-F5   (hex)		Imarda New Zealand Limited
+0012F5     (base 16)		Imarda New Zealand Limited
+				Suite G16, National Innovation Centre,
+				Eveleigh NSW     2015
+				NZ
+
+00-12-DE   (hex)		Radio Components Sweden AB
+0012DE     (base 16)		Radio Components Sweden AB
+				Viderogatan 3B
+				Kista    16422
+				SE
+
+00-13-01   (hex)		IronGate S.L.
+001301     (base 16)		IronGate S.L.
+				C\Alcala 268, primera planta
+				Madrid    28027
+				ES
+
+00-12-F6   (hex)		MDK CO.,LTD.
+0012F6     (base 16)		MDK CO.,LTD.
+				2-6-27 Ibarame
+				Kashiwazaki City  Niigata  9451341
+				JP
+
+00-12-F1   (hex)		IFOTEC
+0012F1     (base 16)		IFOTEC
+				ZAC Champfeuillet
+				VOIRON    38507
+				FR
+
+00-12-F8   (hex)		WNI Resources, LLC
+0012F8     (base 16)		WNI Resources, LLC
+				2146 Bering Drive
+				San Jose  California  95131-2013
+				US
+
+00-12-7C   (hex)		SWEGON AB
+00127C     (base 16)		SWEGON AB
+				 Box 300
+				KVÄNUM  VÄSTRA GÖTALAND  SE 535 23
+				SE
+
+00-12-78   (hex)		International Bar Code
+001278     (base 16)		International Bar Code
+				160 Oak Street
+				Glastonbury  CT  06033
+				US
+
+00-12-7A   (hex)		Sanyu Industry Co.,Ltd.
+00127A     (base 16)		Sanyu Industry Co.,Ltd.
+				Midori-ku Hakusan1-11-11
+				Yokohama-shi  Kanagawa-ken  226-0006
+				JP
+
+00-12-68   (hex)		IPS d.o.o.
+001268     (base 16)		IPS d.o.o.
+				C. Ljubljanske brigade 17
+				Ljubljana    SI-1000
+				SI
+
+00-12-AC   (hex)		ONTIMETEK INC.
+0012AC     (base 16)		ONTIMETEK INC.
+				9Fl.,Owner's Tower
+				Sungnam-Si  Kyunggi-Do  463-825
+				KR
+
+00-12-BC   (hex)		Echolab LLC
+0012BC     (base 16)		Echolab LLC
+				267 Boston Road
+				Billerica  MA  01862
+				US
+
+00-12-BD   (hex)		Avantec Manufacturing Limited
+0012BD     (base 16)		Avantec Manufacturing Limited
+				Unit L, 7/F, Camelpaint Bldg, Block 3
+				    852
+				HK
+
+00-12-AB   (hex)		WiLife, Inc.
+0012AB     (base 16)		WiLife, Inc.
+				132 E. 13065 S., Suite 150
+				Draper  UT  84020
+				US
+
+00-12-9B   (hex)		E2S Electronic Engineering Solutions, S.L.
+00129B     (base 16)		E2S Electronic Engineering Solutions, S.L.
+				Sant Ferran 10
+				Barcelona    08031
+				ES
+
+00-12-98   (hex)		MICO ELECTRIC(SHENZHEN) LIMITED
+001298     (base 16)		MICO ELECTRIC(SHENZHEN) LIMITED
+				
+				SHENZHEN  GUANGDONG  518040
+				CN
+
+00-12-72   (hex)		Redux Communications Ltd.
+001272     (base 16)		Redux Communications Ltd.
+				POB 101
+				Modiin    71700
+				IL
+
+00-12-6A   (hex)		OPTOELECTRONICS Co., Ltd.
+00126A     (base 16)		OPTOELECTRONICS Co., Ltd.
+				3-1Kamiaokinishi 1-chome
+				Kawaguchi  Saitama Pref.  333-0845
+				JP
+
+00-12-C0   (hex)		HotLava Systems, Inc.
+0012C0     (base 16)		HotLava Systems, Inc.
+				6329 Chelton Drive
+				Oakland  CA  94611
+				US
+
+00-12-B7   (hex)		PTW Freiburg
+0012B7     (base 16)		PTW Freiburg
+				Loerracher Strasse 7
+				Freiburg    79115
+				DE
+
+00-12-A1   (hex)		BluePacket Communications Co., Ltd.
+0012A1     (base 16)		BluePacket Communications Co., Ltd.
+				10F-1, No. 420, Sec. 1, Keelung Rd., 110,
+				Taipei    110
+				TW
+
+00-12-06   (hex)		iQuest (NZ) Ltd
+001206     (base 16)		iQuest (NZ) Ltd
+				P.O.Box 15169
+				Hamilton  Waikato  3243
+				NZ
+
+00-12-07   (hex)		Head Strong International Limited
+001207     (base 16)		Head Strong International Limited
+				Unit 9, 20/F, Metropole Square,
+				  Guangdong  
+				HK
+
+00-12-09   (hex)		Fastrax Ltd
+001209     (base 16)		Fastrax Ltd
+				Valimotie 7
+				Vantaa  FI  01510
+				FI
+
+00-12-0B   (hex)		Chinasys Technologies Limited
+00120B     (base 16)		Chinasys Technologies Limited
+				10/F,CAGW Building,No.30 Haidian South Road
+				Beijing    100080
+				CN
+
+00-12-05   (hex)		Terrasat Communications, Inc.
+001205     (base 16)		Terrasat Communications, Inc.
+				235 Vineyard Court, suite 100
+				Morgan Hill  California  95037
+				US
+
+00-12-38   (hex)		SetaBox Technology Co., Ltd.
+001238     (base 16)		SetaBox Technology Co., Ltd.
+				9F-1, No. 293-3, Sec2, Fu-Hsing S. Rd.
+				Taipei    106
+				TW
+
+00-12-3C   (hex)		Second Rule LLC
+00123C     (base 16)		Second Rule LLC
+				4119 Walnut Street
+				Philadelphia  PA  19104
+				US
+
+00-12-3E   (hex)		ERUNE technology Co., Ltd.
+00123E     (base 16)		ERUNE technology Co., Ltd.
+				No. 429, Chin-San 2nd street,
+				Tao Yuan    326
+				TW
+
+00-12-54   (hex)		Spectra Technologies Holdings Company Ltd
+001254     (base 16)		Spectra Technologies Holdings Company Ltd
+				Unit 1301-09, Tower II
+				    852
+				HK
+
+00-12-4F   (hex)		nVent
+00124F     (base 16)		nVent
+				1665 Utica Avenue, Suite 700
+				St Louis Park  MN  55416
+				US
+
+00-12-21   (hex)		B.Braun Melsungen AG
+001221     (base 16)		B.Braun Melsungen AG
+				Schwarzenberger Weg 73-79
+				Melsungen  Hessen  34212
+				DE
+
+00-12-12   (hex)		PLUS  Corporation
+001212     (base 16)		PLUS  Corporation
+				1033-1, Oshitate
+				Inagi-shi  Tokyo  206-0811
+				JP
+
+00-12-13   (hex)		Metrohm AG
+001213     (base 16)		Metrohm AG
+				Oberdorfstrasse 68
+				Herisau  AR  9101
+				CH
+
+00-12-18   (hex)		ARUZE Corporation
+001218     (base 16)		ARUZE Corporation
+				Ariake Frontier Building A
+				Kohtoh-ku  Tokyo  135-0063
+				JP
+
+00-12-49   (hex)		Delta Elettronica S.p.A.
+001249     (base 16)		Delta Elettronica S.p.A.
+				Via Astico 41
+				Varese    21100
+				IT
+
+00-12-4D   (hex)		Inducon BV
+00124D     (base 16)		Inducon BV
+				Kerklaan 26
+				Leimuiden  ZH  2541 CG
+				NL
+
+00-12-66   (hex)		Swisscom Hospitality Services SA
+001266     (base 16)		Swisscom Hospitality Services SA
+				Chemin de l'Etang 65
+				1211  Geneva  
+				CH
+
+00-12-5E   (hex)		CAEN
+00125E     (base 16)		CAEN
+				via Vetraia, 11
+				Viareggio  LUCCA  55049
+				IT
+
+00-12-5D   (hex)		CyberNet Inc.
+00125D     (base 16)		CyberNet Inc.
+				#205, Lotte Suntech City, 513-15
+				Sungnam  Kyunggi  462-806
+				KR
+
+00-12-23   (hex)		Pixim
+001223     (base 16)		Pixim
+				915 Linda Vista Ave.
+				Mountain View  CA  94043
+				US
+
+00-12-3A   (hex)		Posystech Inc., Co.
+00123A     (base 16)		Posystech Inc., Co.
+				Room 407, Daeryung Techno Town 6,
+				Seoul    153-771
+				KR
+
+00-12-34   (hex)		Camille Bauer
+001234     (base 16)		Camille Bauer
+				Aargauerstr. 7
+				Wohlen  AG  5610
+				CH
+
+00-11-E3   (hex)		Thomson, Inc.
+0011E3     (base 16)		Thomson, Inc.
+				101 West 103rd Street
+				Indianapolis  IN  46290
+				US
+
+00-11-DC   (hex)		Glunz & Jensen
+0011DC     (base 16)		Glunz & Jensen
+				Selandia Park 1
+				Ringsted    4100
+				DK
+
+00-11-96   (hex)		Actuality Systems, Inc.
+001196     (base 16)		Actuality Systems, Inc.
+				25 Corporate Drive
+				Burlington  MA  01803
+				US
+
+00-11-87   (hex)		Category Solutions, Inc
+001187     (base 16)		Category Solutions, Inc
+				1021 W. Adams St
+				Chicago  IL  60607
+				US
+
+00-11-90   (hex)		Digital Design Corporation
+001190     (base 16)		Digital Design Corporation
+				3820 Ventura Drive
+				Arlington Heights  IL  60004
+				US
+
+00-11-C4   (hex)		Terminales de Telecomunicacion Terrestre, S.L.
+0011C4     (base 16)		Terminales de Telecomunicacion Terrestre, S.L.
+				Poligono Europolis, Calle C 26
+				Las Rozas  Madrid  28230
+				ES
+
+00-11-CB   (hex)		Jacobsons AB
+0011CB     (base 16)		Jacobsons AB
+				Nedralid s 32
+				Motala    591 97
+				SE
+
+00-11-F7   (hex)		Shenzhen Forward Industry Co., Ltd
+0011F7     (base 16)		Shenzhen Forward Industry Co., Ltd
+				4b1 F5.8, Tian An Cyber Park, Chengongmiao,
+				Shenzhen  Guangdong  518040
+				CN
+
+00-11-D3   (hex)		NextGenTel Holding ASA
+0011D3     (base 16)		NextGenTel Holding ASA
+				Sandslimarka 31
+				Bergen  Hordaland  5861
+				NO
+
+00-11-AB   (hex)		TRUSTABLE TECHNOLOGY CO.,LTD.
+0011AB     (base 16)		TRUSTABLE TECHNOLOGY CO.,LTD.
+				12FL.-1,NO.167,Fu-Shing N.Rd.,Sung-Shan area
+				Taipei    105
+				TW
+
+00-11-A5   (hex)		Fortuna Electronic Corp.
+0011A5     (base 16)		Fortuna Electronic Corp.
+				3F, No.9, Sec.1, ChangAn East Rd.,
+				Taipei    104
+				TW
+
+00-11-3C   (hex)		Micronas GmbH
+00113C     (base 16)		Micronas GmbH
+				Hans-Bunte-Strasse 19
+				Freiburg    D-79108
+				DE
+
+00-11-31   (hex)		UNATECH. CO.,LTD
+001131     (base 16)		UNATECH. CO.,LTD
+				A-727 ,GEOPYUNG TOWN,203-1
+				KANGNAM-GU  SEOUL  135-010
+				US
+
+00-11-27   (hex)		TASI, Inc
+001127     (base 16)		TASI, Inc
+				5551 Dry Fork Road
+				Cleves  OH  45002
+				US
+
+00-11-2A   (hex)		Niko NV
+00112A     (base 16)		Niko NV
+				Industriepark West 40
+				Sint-Niklaas  O/V  9100
+				BE
+
+00-11-2B   (hex)		NetModule AG
+00112B     (base 16)		NetModule AG
+				Meriedweg 11
+				Niederwangen  CH  3172
+				CH
+
+00-11-6F   (hex)		Netforyou Co., LTD.
+00116F     (base 16)		Netforyou Co., LTD.
+				1121-4 3F,  Kwanyang-dong, Dongan-gu
+				Anyang-si  Kyunggi-do  431-804
+				KR
+
+00-11-71   (hex)		DEXTER Communications, Inc.
+001171     (base 16)		DEXTER Communications, Inc.
+				2F Shinsung B/D 404-1
+				Sungnam  Gyunggi  463-420
+				KR
+
+00-11-67   (hex)		Integrated System Solution Corp.
+001167     (base 16)		Integrated System Solution Corp.
+				3F, No. 2-1, industry East Rd., I
+				Hsinchu    300
+				TW
+
+00-11-6D   (hex)		American Time and Signal
+00116D     (base 16)		American Time and Signal
+				140 Third St. South
+				Dassel  MN  55325
+				US
+
+00-11-60   (hex)		ARTDIO Company Co., LTD
+001160     (base 16)		ARTDIO Company Co., LTD
+				7th FL.., No.476, Min-Hu RD., Hsin-Chu,
+				Hsinchu    300
+				TW
+
+00-11-54   (hex)		Webpro Technologies Inc.
+001154     (base 16)		Webpro Technologies Inc.
+				2F-1, No.81, Sec. 4, Chungching N. Rd.,
+				Taipei    111
+				TW
+
+00-11-45   (hex)		ValuePoint Networks
+001145     (base 16)		ValuePoint Networks
+				350 Townsend St Ste 320
+				San Francisco,  CA  94107
+				US
+
+00-11-51   (hex)		Mykotronx
+001151     (base 16)		Mykotronx
+				359 Van Ness Way
+				Torrance  CA  90501
+				US
+
+00-11-4E   (hex)		690885 Ontario Inc.
+00114E     (base 16)		690885 Ontario Inc.
+				205 Annagem Blvd.
+				Mississauga  Ontario  L5T 2V1
+				CA
+
+00-11-2D   (hex)		iPulse Systems
+00112D     (base 16)		iPulse Systems
+				Unit 3, Riverside Industrial Park
+				Gauteng  Johannesburg  1618
+				ZA
+
+00-11-7B   (hex)		Büchi  Labortechnik AG
+00117B     (base 16)		Büchi  Labortechnik AG
+				Meierseggstrasse 40
+				Flawil  9230  SG
+				CH
+
+00-0F-EE   (hex)		XTec, Incorporated
+000FEE     (base 16)		XTec, Incorporated
+				5775 Blue Lagoon Drive
+				Miami  Florida  33126
+				US
+
+00-0F-E4   (hex)		Pantech Co.,Ltd
+000FE4     (base 16)		Pantech Co.,Ltd
+				Shinsong B/D 3F, 25-12,
+				Youngdeungpo-GU  Seoul  150-711
+				KR
+
+00-0F-E7   (hex)		Lutron Electronics Co., Inc.
+000FE7     (base 16)		Lutron Electronics Co., Inc.
+				7200 Suter Rd.
+				Coopersburg  PA  18036-1299
+				US
+
+00-0F-E6   (hex)		MBTech Systems, Inc.
+000FE6     (base 16)		MBTech Systems, Inc.
+				412 1st Ave SE
+				Cullman  Alabama  35055
+				US
+
+00-0F-DA   (hex)		YAZAKI CORPORATION
+000FDA     (base 16)		YAZAKI CORPORATION
+				1500 MISHUKU
+				SUSONO-CITY  SHIZUOKA-PREF  410-1194
+				JP
+
+00-0F-EF   (hex)		Thales e-Transactions GmbH
+000FEF     (base 16)		Thales e-Transactions GmbH
+				Konrad-Zuse-Straße 19-21
+				Bad Hersfeld  Hessen  36251
+				DE
+
+00-0F-E9   (hex)		GW TECHNOLOGIES CO.,LTD.
+000FE9     (base 16)		GW TECHNOLOGIES CO.,LTD.
+				No.38 Shangdi Xilu,Haidian District
+				Beijing    100085
+				CN
+
+00-0F-E1   (hex)		ID DIGITAL CORPORATION
+000FE1     (base 16)		ID DIGITAL CORPORATION
+				6th Fl., Mirae Bldg., 271-1, Seohyun-dong, Bundang-ku, Sungnam-si, Keongki-do, South Korea
+				Sungnam-Si  Keongki-do  463-050
+				KR
+
+00-0F-DF   (hex)		SOLOMON Technology Corp.
+000FDF     (base 16)		SOLOMON Technology Corp.
+				No.42,Sing Zhong Rd.,Nei Hu Dist.,
+				Taipei    114
+				TW
+
+00-0F-FE   (hex)		G-PRO COMPUTER
+000FFE     (base 16)		G-PRO COMPUTER
+				first arrange C YingHu industrial estate QingXi country DongGuan city
+				DongGuan  GuangDong  523648
+				CN
+
+00-11-0B   (hex)		Franklin Technology Systems
+00110B     (base 16)		Franklin Technology Systems
+				20406 Earl St
+				Torrance  CA  90503
+				US
+
+00-11-05   (hex)		Sunplus Technology Co., Ltd.
+001105     (base 16)		Sunplus Technology Co., Ltd.
+				19, Innovation First Road, Hsinchu Science Park
+				Hsinchu    300
+				TW
+
+00-11-02   (hex)		Aurora Multimedia Corp.
+001102     (base 16)		Aurora Multimedia Corp.
+				205 Commercial Court
+				Morganville  New Jersey  07751-1070
+				US
+
+00-11-23   (hex)		Appointech, Inc.
+001123     (base 16)		Appointech, Inc.
+				6F-2 No.192 Tung-Kuan Rd.
+				Hsinchu    300
+				TW
+
+00-11-0F   (hex)		netplat,Inc.
+00110F     (base 16)		netplat,Inc.
+				2F Olympia Center, 828-10, Yeoksam-dong, Gangnam-gu
+				SEOUL    135-935
+				KR
+
+00-0F-D6   (hex)		Sarotech Co., Ltd
+000FD6     (base 16)		Sarotech Co., Ltd
+				HanGang Bldg, 1549-7, Seocho-Dong,
+				Seoul    137-070
+				KR
+
+00-11-15   (hex)		EPIN Technologies, Inc.
+001115     (base 16)		EPIN Technologies, Inc.
+				Acorn Campus
+				Cupertino  CA  95014
+				US
+
+00-0F-C7   (hex)		Dionica R&D Ltd.
+000FC7     (base 16)		Dionica R&D Ltd.
+				Bologna Centre, F11
+				Mosta    MST13
+				MT
+
+00-0F-64   (hex)		D&R Electronica Weesp BV
+000F64     (base 16)		D&R Electronica Weesp BV
+				Rijnkade 15B
+				WEESP  NH  1382GS
+				NL
+
+00-0F-75   (hex)		First Silicon Solutions
+000F75     (base 16)		First Silicon Solutions
+				13939 Forest Lane
+				Larkspur  CO  80118
+				US
+
+00-0F-7C   (hex)		ACTi Corporation
+000F7C     (base 16)		ACTi Corporation
+				7F., No. 1, Alley 20, Lane 407, Sec. 2, Tiding Blvd.,
+				Taipei    114
+				TW
+
+00-0F-7A   (hex)		BeiJing NuQX Technology CO.,LTD
+000F7A     (base 16)		BeiJing NuQX Technology CO.,LTD
+				Room 812,8F Tower B,YinWang Center, No.113,Zhi Chun Road,
+				Beijing    100086
+				CN
+
+00-0F-AD   (hex)		FMN communications GmbH
+000FAD     (base 16)		FMN communications GmbH
+				Grimmelallee 4
+				Nordhausen  Thüringen  99734
+				DE
+
+00-0F-AB   (hex)		Kyushu Electronics Systems Inc.
+000FAB     (base 16)		Kyushu Electronics Systems Inc.
+				3-3, Kongo 2-Chome, Yahatanishi Ward
+				Kitakyushu City  Fukuoka Pref.  807-1263
+				JP
+
+00-0F-AC   (hex)		IEEE 802.11
+000FAC     (base 16)		IEEE 802.11
+				4125 Highlander Parkway
+				Richfield  Ohio  44286
+				US
+
+00-0F-72   (hex)		Sandburst
+000F72     (base 16)		Sandburst
+				600 Federal St
+				Andover  MA  01810
+				US
+
+00-0F-B3   (hex)		Actiontec Electronics, Inc
+000FB3     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-0F-9C   (hex)		Panduit Corp
+000F9C     (base 16)		Panduit Corp
+				17301 Ridgeland Ave
+				Tinley Park  Illinois  60477
+				US
+
+00-0F-C8   (hex)		Chantry Networks
+000FC8     (base 16)		Chantry Networks
+				1900 Minnesota Court
+				Mississauga  Ontario  L5N 3C9
+				CA
+
+00-0F-BB   (hex)		Nokia Siemens Networks GmbH & Co. KG.
+000FBB     (base 16)		Nokia Siemens Networks GmbH & Co. KG.
+				Werner-von-Siemens Straße 2-6
+				Bruchsal  Baden-Württemberg  76646
+				DE
+
+00-0F-BC   (hex)		Onkey Technologies, Inc.
+000FBC     (base 16)		Onkey Technologies, Inc.
+				780 Montague Expressway, Inc.
+				San Jose  CA  95131
+				US
+
+00-0F-B6   (hex)		Europlex Technologies
+000FB6     (base 16)		Europlex Technologies
+				Clonshaugh Business & Tech. Park
+				Clonshaugh    Dublin 17
+				IE
+
+00-0F-B9   (hex)		Adaptive Instruments
+000FB9     (base 16)		Adaptive Instruments
+				577 Main Street
+				Hudson  MA  01749
+				US
+
+00-0F-98   (hex)		Avamax Co. Ltd.
+000F98     (base 16)		Avamax Co. Ltd.
+				B1, No. 51, Section 2, ChongQing S. Rd.
+				Taipei    
+				TW
+
+00-0F-97   (hex)		Avanex Corporation
+000F97     (base 16)		Avanex Corporation
+				40919 Encyclopedia Circle
+				Fremont  CA  94538
+				US
+
+00-0F-96   (hex)		Telco Systems, Inc. 
+000F96     (base 16)		Telco Systems, Inc. 
+				15 Berkshire Road
+				Mansfield  MA  02048
+				US
+
+00-0F-8B   (hex)		Orion MultiSystems Inc
+000F8B     (base 16)		Orion MultiSystems Inc
+				3375 Scott Blvd Suite 338
+				Santa Clara  CA  95054
+				US
+
+00-0F-8C   (hex)		Gigawavetech Pte Ltd
+000F8C     (base 16)		Gigawavetech Pte Ltd
+				1 Jalan Kilang Timor
+				    159303
+				SG
+
+00-0F-38   (hex)		Netstar
+000F38     (base 16)		Netstar
+				3F,No.347, Yang-kuang St.,Nei-Hu Dis.,
+				Taipei    114
+				TW
+
+00-0F-3A   (hex)		HISHARP
+000F3A     (base 16)		HISHARP
+				NO.673,CHANG HSING ROAD PATE CITY,TAOYUAN,
+				TAIPEI    334
+				TW
+
+00-0F-30   (hex)		Raza Microelectronics Inc
+000F30     (base 16)		Raza Microelectronics Inc
+				3080 North First Street
+				San Jose  CA  95134
+				US
+
+00-0F-53   (hex)		Solarflare Communications Inc.
+000F53     (base 16)		Solarflare Communications Inc.
+				Suite 100, 7505 Irvine Center Drive
+				Irvine  CA  92618
+				US
+
+00-0F-51   (hex)		Azul Systems, Inc.
+000F51     (base 16)		Azul Systems, Inc.
+				1600 Plymouth Street
+				Mountain View  California  94043
+				US
+
+00-0F-07   (hex)		Mangrove Systems, Inc.
+000F07     (base 16)		Mangrove Systems, Inc.
+				10 Fairfield Blvd.
+				Wallingford  CT  06492
+				US
+
+00-0F-00   (hex)		Legra Systems, Inc.
+000F00     (base 16)		Legra Systems, Inc.
+				3 Burlington Woods Drive
+				Burlington  MA  01803
+				US
+
+00-0F-01   (hex)		DIGITALKS INC
+000F01     (base 16)		DIGITALKS INC
+				14 MARSHALL LANE
+				WESTON  CT  06883
+				US
+
+00-0F-03   (hex)		COM&C CO., LTD
+000F03     (base 16)		COM&C CO., LTD
+				2F Woojin BLD 1445-2 Secho-Dong
+				SEOUL    137-070
+				KR
+
+00-0F-34   (hex)		Cisco Systems, Inc
+000F34     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0F-2E   (hex)		Megapower International Corp.
+000F2E     (base 16)		Megapower International Corp.
+				Rm. 403, No 24 , Wu-Chuan 2nd Rd.,
+				Taipei Hsien    242
+				TW
+
+00-0F-26   (hex)		WorldAccxx  LLC
+000F26     (base 16)		WorldAccxx  LLC
+				4035 Tampa Rd.
+				Oldsmar  FL  34667
+				US
+
+00-0F-45   (hex)		Stretch, Inc.
+000F45     (base 16)		Stretch, Inc.
+				1322 Orleans Drive
+				Sunnyvale  CA  94089
+				US
+
+00-0F-3B   (hex)		Fuji System Machines Co., Ltd.
+000F3B     (base 16)		Fuji System Machines Co., Ltd.
+				5-8-10
+				Zama-Shi  Kanagawa-Ken  228-0003
+				JP
+
+00-0F-37   (hex)		Xambala Incorporated
+000F37     (base 16)		Xambala Incorporated
+				2674 N. 1st Street
+				San Jose  CA  95134
+				US
+
+00-0F-54   (hex)		Entrelogic Corporation
+000F54     (base 16)		Entrelogic Corporation
+				33 Boston Post Rd. West.
+				Marlborough  MA  01752
+				US
+
+00-0F-25   (hex)		AimValley B.V.
+000F25     (base 16)		AimValley B.V.
+				Utrechtseweg 38,
+				Hilversum  NH  1223 TV
+				NL
+
+00-0F-19   (hex)		Boston Scientific
+000F19     (base 16)		Boston Scientific
+				4100 Hamline Ave N.
+				St. Paul  MN  55112
+				US
+
+00-0F-10   (hex)		RDM Corporation
+000F10     (base 16)		RDM Corporation
+				608 Weber St. N
+				Waterloo  ON  N2V 1K4
+				CA
+
+00-0E-A8   (hex)		United Technologists Europe Limited
+000EA8     (base 16)		United Technologists Europe Limited
+				UTEL Laboratories, Wolves Farm Lane
+				Hadleigh  Suffolk  IP7 6BH
+				GB
+
+00-0E-AA   (hex)		Scalent Systems, Inc.
+000EAA     (base 16)		Scalent Systems, Inc.
+				490 S. California Ave
+				Palo Alto  CA  94306
+				US
+
+00-0E-AC   (hex)		MINTRON ENTERPRISE CO., LTD.
+000EAC     (base 16)		MINTRON ENTERPRISE CO., LTD.
+				NO.3,Wu-Kung 5Rd., Wu-Ku Ind Park
+				Taipei County    248
+				TW
+
+00-0E-AE   (hex)		GAWELL TECHNOLOGIES CORP.
+000EAE     (base 16)		GAWELL TECHNOLOGIES CORP.
+				2F,NO.102,SEC.3,JUNG SHAN RD,
+				JUNG HO CITY,  TAIPEI HSIEN  235
+				TW
+
+00-0E-BA   (hex)		HANMI SEMICONDUCTOR CO., LTD.
+000EBA     (base 16)		HANMI SEMICONDUCTOR CO., LTD.
+				#532-2, Gajwa-Dong, Seo-Ku,
+				Incheon,    404 250
+				KR
+
+00-0E-BC   (hex)		Paragon Fidelity GmbH
+000EBC     (base 16)		Paragon Fidelity GmbH
+				Schwadermühlstraße
+				Cadolzburg    90556
+				DE
+
+00-0E-C5   (hex)		Digital Multitools Inc
+000EC5     (base 16)		Digital Multitools Inc
+				9005 Leslie Street  Unit 205
+				Richmond Hill  Ontario  L4B 1G7
+				CA
+
+00-0E-C7   (hex)		Motorola Korea
+000EC7     (base 16)		Motorola Korea
+				Hibrand B/D 17F SW Team Motorola Korea
+				Yangjaedong  Seocho  
+				KR
+
+00-0E-8B   (hex)		Astarte Technology Co, Ltd.
+000E8B     (base 16)		Astarte Technology Co, Ltd.
+				11F, No. 166 Dah-Yeh Rd.
+				Peitou, Taipei    
+				TW
+
+00-0E-DF   (hex)		PLX Technology
+000EDF     (base 16)		PLX Technology
+				870 Maude Ave.,
+				Sunnyvale  CA  94085
+				US
+
+00-0E-E1   (hex)		ExtremeSpeed Inc.
+000EE1     (base 16)		ExtremeSpeed Inc.
+				PO Box 600
+				Mannville  Alberta  T0B 2W0
+				CA
+
+00-0E-D7   (hex)		Cisco Systems, Inc
+000ED7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-D3   (hex)		Epicenter, Inc.
+000ED3     (base 16)		Epicenter, Inc.
+				211 B Calle Pintoresco
+				San Clemente  CA  92672
+				US
+
+00-0E-9D   (hex)		Tiscali UK Ltd
+000E9D     (base 16)		Tiscali UK Ltd
+				20 Broadwick Street
+				London    W1F 8HT
+				GB
+
+00-0E-47   (hex)		NCI System Co.,Ltd.
+000E47     (base 16)		NCI System Co.,Ltd.
+				#206, Kayang Techno-Town, 1487, Kayang 3 dong, Kangseo-Ku, Seoul, Korea
+				Seoul    157-810
+				KR
+
+00-0E-46   (hex)		Niigata Seimitsu Co.,Ltd.
+000E46     (base 16)		Niigata Seimitsu Co.,Ltd.
+				3335-2, Shimonaka, Sanwa-mura
+				Nakakubiki-gun  Niigata  943-0222
+				JP
+
+00-0E-1F   (hex)		TCL Networks Equipment Co., Ltd.
+000E1F     (base 16)		TCL Networks Equipment Co., Ltd.
+				No.5 Industrial Road,Shekou
+				ShenZhen  GuangDong  518067
+				CN
+
+00-0E-26   (hex)		Gincom Technology Corp.
+000E26     (base 16)		Gincom Technology Corp.
+				15F., No. 284, Sec.3, Sanmin Rd., Taoyuan City,
+				Taoyuan,    330
+				TW
+
+00-0E-6C   (hex)		Device Drivers Limited
+000E6C     (base 16)		Device Drivers Limited
+				1-5-1-103
+				Fuchu-shi  Tokyo  1830005
+				JP
+
+00-0E-6B   (hex)		Janitza electronics GmbH
+000E6B     (base 16)		Janitza electronics GmbH
+				Vor dem Polstück  1
+				Lahnau  Hessen  35633
+				DE
+
+00-0E-5F   (hex)		activ-net GmbH & Co. KG
+000E5F     (base 16)		activ-net GmbH & Co. KG
+				Konrad-Zuse-Str. 4
+				Bochum    44801
+				DE
+
+00-0E-57   (hex)		Iworld Networking, Inc.
+000E57     (base 16)		Iworld Networking, Inc.
+				125 Hanju Bldg, Nonhyun-Dong
+				Seoul    135010
+				KR
+
+00-0E-67   (hex)		Eltis Microelectronics Ltd.
+000E67     (base 16)		Eltis Microelectronics Ltd.
+				Unit 902B, 9/F., Sunbeam Centre
+				Kwun Tong  Kowloon  
+				HK
+
+00-0E-65   (hex)		TransCore
+000E65     (base 16)		TransCore
+				8600 Jefferson St NE
+				Albuquerque  NM  87113
+				US
+
+00-0E-43   (hex)		G-Tek Electronics Sdn. Bhd.
+000E43     (base 16)		G-Tek Electronics Sdn. Bhd.
+				2493 Mukim 1, Lorong Perusahaan Lapan
+				Perai  Penang  13600
+				MY
+
+00-0E-44   (hex)		Digital 5, Inc.
+000E44     (base 16)		Digital 5, Inc.
+				101 Grovers Mill Rd.
+				Lawrenceville  NJ  08648
+				US
+
+00-0E-74   (hex)		Solar Telecom. Tech
+000E74     (base 16)		Solar Telecom. Tech
+				B B/D, 4F, Samho Venture Tower
+				Seoul    137-941
+				KR
+
+00-0E-7A   (hex)		GemWon Communications Co., Ltd.
+000E7A     (base 16)		GemWon Communications Co., Ltd.
+				3FL.,NO.32,Lane 135,Shianjeng 9th Rd.,Jubei City
+				Hsinchu    302
+				TW
+
+00-0E-80   (hex)		Thomson Technology Inc
+000E80     (base 16)		Thomson Technology Inc
+				9087A 198th ST
+				Surrey  BC  V1M-3B1
+				CA
+
+00-0E-85   (hex)		Catalyst Enterprises, Inc.
+000E85     (base 16)		Catalyst Enterprises, Inc.
+				3385 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+00-0E-32   (hex)		Kontron Medical
+000E32     (base 16)		Kontron Medical
+				Reinacherstrasse 131
+				Basel    4002
+				CH
+
+00-0E-0B   (hex)		Netac Technology Co., Ltd.
+000E0B     (base 16)		Netac Technology Co., Ltd.
+				6F, Incubator Building, China Academy of Science &Tech Development,
+				ShenZhen  GuangDong  518057
+				CN
+
+00-0E-11   (hex)		BDT Büro und Datentechnik GmbH & Co.KG 
+000E11     (base 16)		BDT Büro und Datentechnik GmbH & Co.KG 
+				Saline 29
+				Rottweil  Baden-Württemberg  D-78628
+				DE
+
+00-0D-F5   (hex)		Teletronics International Inc.
+000DF5     (base 16)		Teletronics International Inc.
+				2 Choke Cherry Road
+				Rockville  MD  20850
+				US
+
+00-0D-F7   (hex)		Space Dynamics Lab
+000DF7     (base 16)		Space Dynamics Lab
+				1695 N. Research Park Way
+				North Logan  UT  84341
+				US
+
+00-0D-EB   (hex)		CompXs Limited
+000DEB     (base 16)		CompXs Limited
+				Robert Denholm House
+				Redhill  Surrey  RH1 4HW
+				GB
+
+00-0D-EE   (hex)		Andrew RF Power Amplifier Group
+000DEE     (base 16)		Andrew RF Power Amplifier Group
+				40 Technology Drive
+				Warren  NJ  07059
+				US
+
+00-0D-EF   (hex)		Soc. Coop. Bilanciai
+000DEF     (base 16)		Soc. Coop. Bilanciai
+				via S.Ferrari 16
+				Campogalliano  Modena  41011
+				IT
+
+00-0D-E7   (hex)		Snap-on OEM Group
+000DE7     (base 16)		Snap-on OEM Group
+				2333 East Walton Blvd.
+				Auburn Hills  MI  48326
+				US
+
+00-0D-C6   (hex)		DigiRose Technology Co., Ltd.
+000DC6     (base 16)		DigiRose Technology Co., Ltd.
+				No. 1, Alley 20, Lane 26 Rueiguang Road,
+				Taipei    114
+				TW
+
+00-0D-C1   (hex)		SafeWeb Inc
+000DC1     (base 16)		SafeWeb Inc
+				2200 Powell St. Ste 590
+				Emeryville  CA  94608
+				US
+
+00-0D-F0   (hex)		QCOM TECHNOLOGY INC.
+000DF0     (base 16)		QCOM TECHNOLOGY INC.
+				4F., No.301, Sec. 2, Tiding Blvd.
+				Taipei City  Neihu District  114
+				TW
+
+00-0D-E5   (hex)		Samsung Thales
+000DE5     (base 16)		Samsung Thales
+				259 Gongdan-Dong
+				Gumi-City  Gyeongsangbuk-do  730-904
+				KR
+
+00-0D-C0   (hex)		Spagat AS
+000DC0     (base 16)		Spagat AS
+				Tonne Hutifeldtpl. 2
+				Halden  Ostfold  1767
+				NO
+
+00-0D-DD   (hex)		Profilo Telra Elektronik Sanayi ve Ticaret. A.Ş
+000DDD     (base 16)		Profilo Telra Elektronik Sanayi ve Ticaret. A.Ş
+				Cemal Sahir Sokak NO:26-28
+				İstanbul  TURKEY  34255
+				TR
+
+00-0D-F8   (hex)		ORGA Kartensysteme GmbH
+000DF8     (base 16)		ORGA Kartensysteme GmbH
+				Konrad-Zuse-Ring 1
+				Flintbek  Schleswig-Holstein  24220
+				DE
+
+00-0E-16   (hex)		SouthWing S.L.
+000E16     (base 16)		SouthWing S.L.
+				C/Avila, 48-50
+				Barcelona    08005
+				ES
+
+00-0D-A7   (hex)		Private
+000DA7     (base 16)		Private
+
+00-0D-AD   (hex)		Dataprobe, Inc.
+000DAD     (base 16)		Dataprobe, Inc.
+				1B Pearl Court
+				Allendale  NJ  07401
+				US
+
+00-0D-AB   (hex)		Parker Hannifin GmbH Electromechanical Division Europe
+000DAB     (base 16)		Parker Hannifin GmbH Electromechanical Division Europe
+				Robert-Bosch-Straße 22
+				Offenburg  Baden-Württemberg  77656
+				DE
+
+00-0D-A8   (hex)		Teletronics Technology Corporation
+000DA8     (base 16)		Teletronics Technology Corporation
+				2525 Pearl Buck Road
+				Bristol  Pennsylvania  19007
+				US
+
+00-0D-79   (hex)		Dynamic Solutions Co,.Ltd.
+000D79     (base 16)		Dynamic Solutions Co,.Ltd.
+				17-8 Nihonbashi Hakozaki-cho
+				Chuo-ku  Tokyo  103-0015
+				JP
+
+00-0D-6D   (hex)		K-Tech Devices Corp.
+000D6D     (base 16)		K-Tech Devices Corp.
+				14016-30
+				nakaminowa minowamachi kamiina  nagano  399-4601
+				JP
+
+00-0D-AF   (hex)		Plexus Corp (UK) Ltd
+000DAF     (base 16)		Plexus Corp (UK) Ltd
+				Pinnacle Hill
+				Kelso  Roxburghshire  TD5 8XX
+				GB
+
+00-0D-B1   (hex)		Japan Network Service Co., Ltd.
+000DB1     (base 16)		Japan Network Service Co., Ltd.
+				Matoba Bldg. 6F,
+				 Chuo-ku  Tokyo  104-0042
+				JP
+
+00-0D-83   (hex)		Sanmina-SCI Hungary  Ltd.
+000D83     (base 16)		Sanmina-SCI Hungary  Ltd.
+				Kota Jozsef u. 2.
+				Tatabanya  Komarom-Esztergom  2800
+				HU
+
+00-0D-7F   (hex)		MIDAS  COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)
+000D7F     (base 16)		MIDAS  COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)
+				04-12, Phase Z.Ro Technoprenuer Park
+				Singapore    139 347
+				SG
+
+00-0D-75   (hex)		Kobian Pte Ltd - Taiwan Branch
+000D75     (base 16)		Kobian Pte Ltd - Taiwan Branch
+				2F, No.580, Rueikuang Rd.,Nei Hu,Taipei,
+				Taipei  Nei Hu  114
+				TW
+
+00-0D-78   (hex)		Engineering & Security
+000D78     (base 16)		Engineering & Security
+				Martiri della Libertà   32/4
+				Genova    16155
+				IT
+
+00-0D-9E   (hex)		TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.
+000D9E     (base 16)		TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.
+				Yoshida 1221
+				Ouragun Ohizumi  Gunma  370-0523
+				JP
+
+00-0D-A3   (hex)		Emerging Technologies Limited
+000DA3     (base 16)		Emerging Technologies Limited
+				Wong's Industrial Centre, 180 Wai Yip St
+				  Nil  
+				HK
+
+00-0D-A4   (hex)		DOSCH & AMAND SYSTEMS AG
+000DA4     (base 16)		DOSCH & AMAND SYSTEMS AG
+				Scheinerstrasse 9
+				Munich  Bavaria  81679
+				DE
+
+00-0D-9A   (hex)		INFOTEC LTD
+000D9A     (base 16)		INFOTEC LTD
+				The Maltings
+				Ashby-de-la-Zouch  Leicestershire  LE65 2PS
+				GB
+
+00-0D-6E   (hex)		K-Patents Oy
+000D6E     (base 16)		K-Patents Oy
+				P.O. Box 77
+				VANTAA  FI  01511
+				FI
+
+00-0D-6A   (hex)		Redwood Technologies LTD
+000D6A     (base 16)		Redwood Technologies LTD
+				Amber House
+				Bracknell  Berkshire  RG12 1JB
+				GB
+
+00-0D-BA   (hex)		Océ Document Technologies GmbH
+000DBA     (base 16)		Océ Document Technologies GmbH
+				Max-Stromeyer-Straße  116
+				Konstanz    78467
+				DE
+
+00-0D-BD   (hex)		Cisco Systems, Inc
+000DBD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0D-B5   (hex)		GLOBALSAT TECHNOLOGY CORPORATION
+000DB5     (base 16)		GLOBALSAT TECHNOLOGY CORPORATION
+				Far East Century Park
+				Taipei Hsien    235
+				TW
+
+00-0D-97   (hex)		ABB Inc./Tropos
+000D97     (base 16)		ABB Inc./Tropos
+				1710 S. Amphlett Blvd,  Suite 304
+				San Mateo  CA  94402
+				US
+
+00-0D-96   (hex)		Vtera Technology Inc.
+000D96     (base 16)		Vtera Technology Inc.
+				No 34, Industrial East. 4th Rd.
+				HsinChu    300
+				TW
+
+00-0D-8B   (hex)		T&D Corporation
+000D8B     (base 16)		T&D Corporation
+				5652-169 Sasaga
+				Matsumoto  Nagano  399-0033
+				JP
+
+00-0D-90   (hex)		Factum Electronics AB
+000D90     (base 16)		Factum Electronics AB
+				Teknikringen 1H
+				Linköping  Östergötland  583 30
+				SE
+
+00-0D-85   (hex)		Tapwave, Inc.
+000D85     (base 16)		Tapwave, Inc.
+				1901 Landings Drive
+				Mountain View  CA  94043
+				US
+
+00-0D-82   (hex)		PHSNET
+000D82     (base 16)		PHSNET
+				Piazza Mariano Rumor, 18
+				Arcugnano  Vicenza  36057
+				IT
+
+00-0D-23   (hex)		Smart Solution, Inc
+000D23     (base 16)		Smart Solution, Inc
+				465 West Lawndale #B
+				Salt Lake City  UT  84115
+				US
+
+00-0D-27   (hex)		MICROPLEX Printware AG
+000D27     (base 16)		MICROPLEX Printware AG
+				Panzerstraße 5
+				Varel  Niedersachsen  26316
+				DE
+
+00-0D-1B   (hex)		Kyoto Electronics Manufacturing Co., Ltd.
+000D1B     (base 16)		Kyoto Electronics Manufacturing Co., Ltd.
+				56-2, Ninodan-cho, Shinden,
+				Kyoto-City  Kyoto Prefecture  601-8317
+				JP
+
+00-0D-1D   (hex)		HIGH-TEK HARNESS ENT. CO., LTD.
+000D1D     (base 16)		HIGH-TEK HARNESS ENT. CO., LTD.
+				4F-6, No18, Pu-Ting Rd. Hsinchu, Taiwan
+				Hsinchu    300
+				TW
+
+00-0D-02   (hex)		NEC Platforms, Ltd.
+000D02     (base 16)		NEC Platforms, Ltd.
+				800 Shimomata
+				Kakegawa  Shizuoka  436-8501
+				JP
+
+00-0D-07   (hex)		Calrec Audio Ltd
+000D07     (base 16)		Calrec Audio Ltd
+				Nutclough Mill
+				Hebden Bridge  West Yorkshire  HX7 8EZ
+				GB
+
+00-0D-40   (hex)		Verint Loronix Video Solutions
+000D40     (base 16)		Verint Loronix Video Solutions
+				12526 High Bluff Dr. #170
+				San DIego  CA  92130
+				US
+
+00-0D-21   (hex)		WISCORE Inc.
+000D21     (base 16)		WISCORE Inc.
+				6F, No. 180, Sec. 2, Duenhua S. Rd,
+				Taipei    106
+				TW
+
+00-0D-09   (hex)		Yuehua(Zhuhai) Electronic CO. LTD
+000D09     (base 16)		Yuehua(Zhuhai) Electronic CO. LTD
+				4Rd Pingdong,Nanping Science & Technolog
+				Zhuhai  Guangdong  519070
+				CN
+
+00-0D-37   (hex)		WIPLUG
+000D37     (base 16)		WIPLUG
+				RUA  DR. AGOSTINHO GOULAO
+				PETROPOLIS  RIO JANEIRO  25730050
+				BR
+
+00-0D-33   (hex)		Prediwave Corp.
+000D33     (base 16)		Prediwave Corp.
+				48431 Milmont Drive
+				Fremont  CA  94538
+				US
+
+00-0D-2F   (hex)		AIN Comm.Tech.Co., LTD
+000D2F     (base 16)		AIN Comm.Tech.Co., LTD
+				4F, No.76, Sec2 Mintzu Rd
+				Jung-Li City    320
+				TW
+
+00-0D-5D   (hex)		Raritan Computer, Inc
+000D5D     (base 16)		Raritan Computer, Inc
+				400 Cottontail Lane
+				Somerset  NJ  08873
+				US
+
+00-0D-63   (hex)		DENT Instruments, Inc.
+000D63     (base 16)		DENT Instruments, Inc.
+				64 NW Franklin Ave
+				Bend  OR  97701
+				US
+
+00-0D-66   (hex)		Cisco Systems, Inc
+000D66     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0C-CD   (hex)		IEC - TC57
+000CCD     (base 16)		IEC - TC57
+				3, rue de Varembé
+				Geneva  GE  1211
+				CH
+
+00-0C-CB   (hex)		Design Combus Ltd
+000CCB     (base 16)		Design Combus Ltd
+				Hatanapaan valtatie 34A
+				Tampere    FIN-33100
+				FI
+
+00-0C-C9   (hex)		ILWOO DATA & TECHNOLOGY CO.,LTD
+000CC9     (base 16)		ILWOO DATA & TECHNOLOGY CO.,LTD
+				1475-10,HWA HYUN BLD. 2nd Floor,
+				SEOUL    137-071
+				KR
+
+00-0C-E9   (hex)		BLOOMBERG L.P.
+000CE9     (base 16)		BLOOMBERG L.P.
+				731 Lexington Ave
+				NEW YORK  NEW YORK  10022
+				US
+
+00-0C-EA   (hex)		aphona Kommunikationssysteme
+000CEA     (base 16)		aphona Kommunikationssysteme
+				Entwicklungs- und VertriebsgmbH
+				Wien    1230
+				AT
+
+00-0C-DA   (hex)		FreeHand Systems, Inc.
+000CDA     (base 16)		FreeHand Systems, Inc.
+				95 First St.
+				Los Altos  CA  94022
+				US
+
+00-0C-F5   (hex)		InfoExpress
+000CF5     (base 16)		InfoExpress
+				170 S. Whisman Road, Suite B
+				Mountain View  CA  94041
+				US
+
+00-0C-EE   (hex)		jp-embedded
+000CEE     (base 16)		jp-embedded
+				Buen 21, Nr. Dalby
+				Borup    4140
+				DK
+
+00-0C-AF   (hex)		TRI TERM CO.,LTD.
+000CAF     (base 16)		TRI TERM CO.,LTD.
+				21-5 HIRAIDE KOUGIYO DANCHI
+				TOCHIGI    321-0905
+				JP
+
+00-0C-B3   (hex)		ROUND Co.,Ltd.
+000CB3     (base 16)		ROUND Co.,Ltd.
+				3-9 Gokashou-Shibahigashi
+				uji  kyoto  611-0011
+				JP
+
+00-0C-DD   (hex)		AOS technologies AG
+000CDD     (base 16)		AOS technologies AG
+				Taefernstrasse 20
+				Baden - Daettwil  AG  CH-5405
+				CH
+
+00-0C-A5   (hex)		Naman NZ LTd
+000CA5     (base 16)		Naman NZ LTd
+				13/17 Kawana St
+				Auckland    
+				NZ
+
+00-0C-A9   (hex)		Ebtron Inc.
+000CA9     (base 16)		Ebtron Inc.
+				1663 Hwy 701 South
+				Loris  SC  29569
+				US
+
+00-0C-FB   (hex)		Korea Network Systems
+000CFB     (base 16)		Korea Network Systems
+				206  JangYoungSil Bldg, 1688-5
+				Taejeon    306-230
+				KR
+
+00-0C-7A   (hex)		DaTARIUS Technologies GmbH
+000C7A     (base 16)		DaTARIUS Technologies GmbH
+				Anton Maria Schyrle Str. 7
+				Reutte  Tirol  6600
+				AT
+
+00-0C-79   (hex)		Extel Communications P/L
+000C79     (base 16)		Extel Communications P/L
+				399 Ferntree Gully Road
+				Mt Waverley  Victoria  3149
+				AU
+
+00-0C-75   (hex)		Oriental integrated electronics. LTD
+000C75     (base 16)		Oriental integrated electronics. LTD
+				281-34 Dondang-dong Wonmi-Gu
+				Bucheon    420-808
+				KR
+
+00-0C-5D   (hex)		CHIC TECHNOLOGY (CHINA) CORP.
+000C5D     (base 16)		CHIC TECHNOLOGY (CHINA) CORP.
+				7th Building,Shi'ao Ind.Zone,Longhua Tow
+				Shenzhen  Guangdong  518109
+				CN
+
+00-0C-4F   (hex)		UDTech Japan Corporation
+000C4F     (base 16)		UDTech Japan Corporation
+				Hamacho Hanacho Bldg, 2F
+				Chuo-ku  Tokyo  103-0007
+				JP
+
+00-0C-62   (hex)		ABB AB, Cewe-Control 
+000C62     (base 16)		ABB AB, Cewe-Control 
+				Dept. LPCC/RE 
+				Vasteras    721 61
+				SE
+
+00-0C-4C   (hex)		Arcor AG&Co.
+000C4C     (base 16)		Arcor AG&Co.
+				Alfred-Herrhausen-Allee 1
+				Eschborn  Hessen  65760
+				DE
+
+00-0C-47   (hex)		SK Teletech(R&D Planning Team)
+000C47     (base 16)		SK Teletech(R&D Planning Team)
+				21th FL Startower 737, Yeoksam-dong
+				Seoul    135-984
+				KR
+
+00-0C-6D   (hex)		Edwards Ltd.
+000C6D     (base 16)		Edwards Ltd.
+				Marshall Road
+				Eastbourne  East Sussex  BN22 9BA
+				GB
+
+00-0C-70   (hex)		ACC GmbH
+000C70     (base 16)		ACC GmbH
+				Am Sandfeld 15
+				Karlsruhe  Baden  76149
+				DE
+
+00-0C-6A   (hex)		MBARI
+000C6A     (base 16)		MBARI
+				7700 Sandholdt Road
+				Moss Landing  CA  95039
+				US
+
+00-0C-6B   (hex)		Kurz Industrie-Elektronik GmbH
+000C6B     (base 16)		Kurz Industrie-Elektronik GmbH
+				Foehrenbachstraße 3
+				Remshalden  Baden-Württemberg  73630
+				DE
+
+00-0C-9D   (hex)		UbeeAirWalk, Inc.
+000C9D     (base 16)		UbeeAirWalk, Inc.
+				1850 N. GreenVille Ave., Suite 164
+				Richardson  TX  75081
+				US
+
+00-0C-9F   (hex)		NKE Corporation
+000C9F     (base 16)		NKE Corporation
+				366-1 Hishikawa-cho Hazukashi Fushimi-ku
+				Kyoto-shi  Kyoto  612-8487
+				JP
+
+00-0C-84   (hex)		Eazix, Inc.
+000C84     (base 16)		Eazix, Inc.
+				Unit 301 Plaza Building B
+				Muntinlupa City  Rizal  1770
+				PH
+
+00-0C-85   (hex)		Cisco Systems, Inc
+000C85     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0C-3F   (hex)		Cogent Defence & Security Networks,
+000C3F     (base 16)		Cogent Defence & Security Networks,
+				Meadows Road,
+				Newport,  South Wales,  NP19 4SS
+				GB
+
+00-0C-30   (hex)		Cisco Systems, Inc
+000C30     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0C-9A   (hex)		Hitech Electronics Corp.
+000C9A     (base 16)		Hitech Electronics Corp.
+				4f, No. 501-15 Chung-Cheng Rd.
+				Shin-tien  Taipei Shien  231
+				TW
+
+00-0C-91   (hex)		Riverhead Networks Inc.
+000C91     (base 16)		Riverhead Networks Inc.
+				
+				Cupertino  CA  95014
+				US
+
+00-0B-DA   (hex)		EyeCross Co.,Inc.
+000BDA     (base 16)		EyeCross Co.,Inc.
+				3F  Iioka-Building
+				Tokyo  Ueno Taitoh-ku 3-4-1  110-0005
+				JP
+
+00-0B-D6   (hex)		Paxton Access Ltd
+000BD6     (base 16)		Paxton Access Ltd
+				Paxton House
+				Brighton  East Sussex  BN1 9HU
+				GB
+
+00-0B-D4   (hex)		Beijing Wise Technology & Science Development Co.Ltd
+000BD4     (base 16)		Beijing Wise Technology & Science Development Co.Ltd
+				3rd Floor Caihong Building, No.2,1st Wes
+				Beijing    100088
+				CN
+
+00-0C-1F   (hex)		Glimmerglass Networks
+000C1F     (base 16)		Glimmerglass Networks
+				26142 Eden Landing Road
+				Hayward  California  94545
+				US
+
+00-0C-20   (hex)		Fi WIn, Inc.
+000C20     (base 16)		Fi WIn, Inc.
+				8F, No. 10, Prosperity Rd. 1,
+				Hsin Chu    300
+				TW
+
+00-0C-15   (hex)		CyberPower Systems, Inc.
+000C15     (base 16)		CyberPower Systems, Inc.
+				6F, No. 32, Sec. 1, Chenggong Rd.
+				Taipei    115
+				TW
+
+00-0B-FF   (hex)		Berkeley Camera Engineering
+000BFF     (base 16)		Berkeley Camera Engineering
+				127 National Street
+				Santa Cruz  CA  95060
+				US
+
+00-0C-16   (hex)		Concorde Microsystems Inc.
+000C16     (base 16)		Concorde Microsystems Inc.
+				10427 Cogdill Road, Suite 500
+				Knoxville  TN  37932
+				US
+
+00-0C-09   (hex)		Hitachi IE Systems Co., Ltd
+000C09     (base 16)		Hitachi IE Systems Co., Ltd
+				Saiwai-cho 120-1,Inazawa-shi
+				Inazawa-shi  Aichi  492-8622
+				JP
+
+00-0B-E7   (hex)		COMFLUX TECHNOLOGY INC.
+000BE7     (base 16)		COMFLUX TECHNOLOGY INC.
+				 Room 131,Bldg. 53,195-58,Sec.4,
+				Hsinchu    310
+				TW
+
+00-0B-EC   (hex)		NIPPON ELECTRIC INSTRUMENT, INC.
+000BEC     (base 16)		NIPPON ELECTRIC INSTRUMENT, INC.
+				3-56-21 Hirado
+				Totsuka-ku  Yokohama-shi  244-0802
+				JP
+
+00-0C-02   (hex)		ABB Oy
+000C02     (base 16)		ABB Oy
+				P.O.Box 89
+				Turku    FIN-20521
+				FI
+
+00-0B-71   (hex)		Litchfield Communications Inc.
+000B71     (base 16)		Litchfield Communications Inc.
+				27 Princeton Road
+				Watertown  CT  06795
+				US
+
+00-0B-74   (hex)		Kingwave Technology Co., Ltd.
+000B74     (base 16)		Kingwave Technology Co., Ltd.
+				18F-3, No. 186, Jian-Yi Rd.
+				Chung-Ho  Taipei  235
+				TW
+
+00-0B-73   (hex)		Kodeos Communications
+000B73     (base 16)		Kodeos Communications
+				111 Corporate Blvd
+				South Plainfield  NJ  07080
+				US
+
+00-0B-76   (hex)		ET&T Technology Co. Ltd.
+000B76     (base 16)		ET&T Technology Co. Ltd.
+				6F No.101, SongJiang Rd.
+				Taipei    104
+				TW
+
+00-0B-5E   (hex)		Audio Engineering Society Inc.
+000B5E     (base 16)		Audio Engineering Society Inc.
+				60 East 42nd Street, Suite #2520
+				New York  NY  10165-2520
+				US
+
+00-0B-60   (hex)		Cisco Systems, Inc
+000B60     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-65   (hex)		Sy.A.C. srl
+000B65     (base 16)		Sy.A.C. srl
+				via Caboto 19/1
+				Trieste    34147
+				IT
+
+00-0B-5F   (hex)		Cisco Systems, Inc
+000B5F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-61   (hex)		Friedrich Lütze GmbH & Co. KG
+000B61     (base 16)		Friedrich Lütze GmbH & Co. KG
+				Bruckwiesenstraße 17 - 19
+				Weinstadt (Großheppach)  BW  71384
+				DE
+
+00-0B-59   (hex)		ScriptPro, LLC
+000B59     (base 16)		ScriptPro, LLC
+				5828 Reeds Rd.
+				Mission  Kansas  66202
+				US
+
+00-0B-5C   (hex)		Newtech Co.,Ltd
+000B5C     (base 16)		Newtech Co.,Ltd
+				K-Bldg 1-7-7 Shibadaimon Minato-ku
+				Tokyo    105-0012
+				JP
+
+00-0B-7E   (hex)		SAGINOMIYA Seisakusho Inc.
+000B7E     (base 16)		SAGINOMIYA Seisakusho Inc.
+				535 Sasai
+				Sayamashi  Saitamaken  350-1395
+				JP
+
+00-0B-80   (hex)		Lycium Networks
+000B80     (base 16)		Lycium Networks
+				9 Hamenofim St.
+				Herzliya  Israel  46733
+				IL
+
+00-0B-A7   (hex)		Maranti Networks
+000BA7     (base 16)		Maranti Networks
+				3061-B Zanker Road
+				San Jose  CA  95134
+				US
+
+00-0B-AA   (hex)		Aiphone co.,Ltd
+000BAA     (base 16)		Aiphone co.,Ltd
+				2-18 Jinno-Cho
+				Nagoya  Aichi-ken  456-8666
+				JP
+
+00-0B-A4   (hex)		Shiron Satellite Communications Ltd. (1996)
+000BA4     (base 16)		Shiron Satellite Communications Ltd. (1996)
+				23 Hasivim St.
+				Petach Tikva    49170
+				IL
+
+00-0B-D0   (hex)		XiMeta Technology Americas Inc.
+000BD0     (base 16)		XiMeta Technology Americas Inc.
+				54 Ray Street
+				New Brunswick  NJ  08901
+				US
+
+00-0B-C5   (hex)		SMC Networks, Inc.
+000BC5     (base 16)		SMC Networks, Inc.
+				38 Tesla
+				Irvine  CA  92618
+				US
+
+00-0B-C6   (hex)		ISAC, Inc.
+000BC6     (base 16)		ISAC, Inc.
+				PO Box 7682
+				Auburn  CA  95604
+				US
+
+00-0B-C1   (hex)		Bay Microsystems, Inc.
+000BC1     (base 16)		Bay Microsystems, Inc.
+				2055 Gateway Place
+				Santa Jose  CA  95110
+				US
+
+00-0B-8B   (hex)		KERAJET, S.A.
+000B8B     (base 16)		KERAJET, S.A.
+				Avda. del Boverot, 24
+				Almazora  Castellon  E-12550
+				ES
+
+00-0B-89   (hex)		Top Global Technology, Ltd.
+000B89     (base 16)		Top Global Technology, Ltd.
+				Room 3310, China World Tower No. 1
+				Beijing  Beijing  100004
+				CN
+
+00-0B-99   (hex)		SensAble Technologies, Inc.
+000B99     (base 16)		SensAble Technologies, Inc.
+				15 Constitution Way
+				Woburn  MA  01801
+				US
+
+00-0B-9C   (hex)		TriBeam Technologies, Inc.
+000B9C     (base 16)		TriBeam Technologies, Inc.
+				116 W. Eastman St., suite 208
+				Arlington Heights  IL  60004
+				US
+
+00-0B-7C   (hex)		Telex Communications
+000B7C     (base 16)		Telex Communications
+				8601 E. Cornhusker Hwy
+				Lincoln  NE  68505
+				US
+
+00-0B-83   (hex)		DATAWATT B.V.
+000B83     (base 16)		DATAWATT B.V.
+				HOUTSTRAAT 5
+				WOLVEGA    NL-8471-ZX
+				NL
+
+00-0B-20   (hex)		Hirata corporation
+000B20     (base 16)		Hirata corporation
+				111 Hitotsugi, Ueki, Kamoto,
+				  Kumamoto  861-0198
+				JP
+
+00-0B-22   (hex)		Environmental Systems and Services
+000B22     (base 16)		Environmental Systems and Services
+				20 Council Street
+				Hawthorn East  Victoria  3123
+				AU
+
+00-0B-1B   (hex)		Systronix, Inc.
+000B1B     (base 16)		Systronix, Inc.
+				939 Edison St.
+				Salt Lake City  Utah  84111
+				US
+
+00-0B-03   (hex)		Taekwang Industrial Co., Ltd
+000B03     (base 16)		Taekwang Industrial Co., Ltd
+				#191-1, Anyang-7Dong, Manan-Gu
+				Anyang-Si  South Korea  430-017
+				KR
+
+00-0B-01   (hex)		DAIICHI ELECTRONICS CO., LTD.
+000B01     (base 16)		DAIICHI ELECTRONICS CO., LTD.
+				1-11-13
+				Hitotsuya  Adachi-ku Tokyo  121-8639
+				JP
+
+00-0B-3E   (hex)		BittWare, Inc
+000B3E     (base 16)		BittWare, Inc
+				31 B South Main St
+				Concord  NH  03301
+				US
+
+00-0B-29   (hex)		LS(LG) Industrial Systems co.,Ltd
+000B29     (base 16)		LS(LG) Industrial Systems co.,Ltd
+				533 Hogye-dong, Dongan-gu
+				Anyang-si  Gyeonggi-do  
+				KR
+
+00-0B-39   (hex)		Keisoku Giken Co.,Ltd.
+000B39     (base 16)		Keisoku Giken Co.,Ltd.
+				Tsuzuki-ku
+				Yokohama  Kanagawa  224-0037
+				JP
+
+00-0B-33   (hex)		Vivato Technologies
+000B33     (base 16)		Vivato Technologies
+				444 Cedros Ave
+				Solana Beach  CA  92027
+				US
+
+00-0B-05   (hex)		Pacific Broadband Networks
+000B05     (base 16)		Pacific Broadband Networks
+				Suite 15,  Building 3, 195 Wellington Road
+				Clayton  VIC  3168
+				AU
+
+00-0B-00   (hex)		FUJIAN START COMPUTER EQUIPMENT CO.,LTD
+000B00     (base 16)		FUJIAN START COMPUTER EQUIPMENT CO.,LTD
+				HONG SHAN YUAN ROAD NO.68 HONGSHAN,GULOU
+				FUZHOU  FUJIAN  350002
+				CN
+
+00-0B-5B   (hex)		Rincon Research Corporation
+000B5B     (base 16)		Rincon Research Corporation
+				101 N. Wilmot Rd.
+				Tucson  AZ  85711
+				US
+
+00-0A-F6   (hex)		Emerson Climate Technologies Retail Solutions, Inc.
+000AF6     (base 16)		Emerson Climate Technologies Retail Solutions, Inc.
+				1640 Airport Rd
+				Kennesaw  GA  30144-7038
+				US
+
+00-0B-11   (hex)		HIMEJI ABC TRADING CO.,LTD.
+000B11     (base 16)		HIMEJI ABC TRADING CO.,LTD.
+				1-8-22
+				HJMEJI  HYOGO  670-0883
+				JP
+
+00-0B-41   (hex)		Ing. Büro Dr. Beutlhauser
+000B41     (base 16)		Ing. Büro Dr. Beutlhauser
+				Roemerweg 4
+				  Grassau  D-83224
+				DE
+
+00-0A-EA   (hex)		ADAM ELEKTRONIK LTD. ŞTI
+000AEA     (base 16)		ADAM ELEKTRONIK LTD. ŞTI
+				UZUNAYNA CAD. CELENK SOK. NO:1 Çakmak
+				İstanbul    81260
+				TR
+
+00-0A-E3   (hex)		YANG MEI TECHNOLOGY CO., LTD
+000AE3     (base 16)		YANG MEI TECHNOLOGY CO., LTD
+				21, Alley 1, Lane 342
+				Taipei    114
+				TW
+
+00-0A-DC   (hex)		RuggedCom Inc.
+000ADC     (base 16)		RuggedCom Inc.
+				30 Whitmore Road
+				Woodbridge  Ontario  L4L 7Z4
+				CA
+
+00-0A-B7   (hex)		Cisco Systems, Inc
+000AB7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0A-AD   (hex)		Stargames Corporation
+000AAD     (base 16)		Stargames Corporation
+				13 Sheridan Close
+				Milperra  NSW  2031
+				AU
+
+00-0A-B1   (hex)		GENETEC Corporation
+000AB1     (base 16)		GENETEC Corporation
+				BYGS Shinjyuku Bldg. 5F
+				Shinjuku-ku  Tokyo  162-0022
+				JP
+
+00-0A-B9   (hex)		Astera Technologies Corp.
+000AB9     (base 16)		Astera Technologies Corp.
+				 2380 Waverley Street
+				Palo Alto  CA  94301
+				US
+
+00-0A-90   (hex)		Bayside Interactive, Inc.
+000A90     (base 16)		Bayside Interactive, Inc.
+				330 Biscayne Blvd.
+				Miami  FL  33132
+				US
+
+00-0A-9D   (hex)		King Young Technology Co. Ltd.
+000A9D     (base 16)		King Young Technology Co. Ltd.
+				1Fl., No. 9, Lane 26, Gangchi Rd., Neihu
+				Taipei    114
+				TW
+
+00-0A-A1   (hex)		V V S Limited
+000AA1     (base 16)		V V S Limited
+				HPIC, 1. Ainslie Road ,
+				Glasgow  Scotland  G52 4RU
+				GB
+
+00-0A-A4   (hex)		SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD
+000AA4     (base 16)		SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD
+				FL.25A,NO.8 CHANGYANG ROAD
+				SHANGHAI    200082
+				CN
+
+00-0A-9E   (hex)		BroadWeb Corportation
+000A9E     (base 16)		BroadWeb Corportation
+				3F, 24-1, Industry East Rd., IV,
+				  Hsin-Chu  300
+				TW
+
+00-0A-E0   (hex)		Fujitsu Softek
+000AE0     (base 16)		Fujitsu Softek
+				1250 East Arques Ave
+				Sunnyvale  Ca  94085
+				US
+
+00-0A-8B   (hex)		Cisco Systems, Inc
+000A8B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0A-88   (hex)		InCypher S.A.
+000A88     (base 16)		InCypher S.A.
+				18 rue de l'Eau
+				Luxembourg    1449
+				LU
+
+00-0A-BB   (hex)		Taiwan Secom Co,. Ltd
+000ABB     (base 16)		Taiwan Secom Co,. Ltd
+				13F, 108, Sec1, Shin-Tai 5th Road
+				Hsi-Chih  Taipei County  221
+				TW
+
+00-0A-7C   (hex)		Tecton Ltd
+000A7C     (base 16)		Tecton Ltd
+				Fishers Court
+				Eastleigh  Hampshire  SO50 7HG
+				GB
+
+00-0A-6E   (hex)		Harmonic, Inc
+000A6E     (base 16)		Harmonic, Inc
+				4300 North First Street
+				San Jose  CA  95134
+				US
+
+00-0A-6D   (hex)		EKS Elektronikservice GmbH
+000A6D     (base 16)		EKS Elektronikservice GmbH
+				Enzstr. 9
+				Kornwestheim  Baden-Württemberg  70806
+				DE
+
+00-0A-43   (hex)		Chunghwa Telecom Co., Ltd.
+000A43     (base 16)		Chunghwa Telecom Co., Ltd.
+				12, Lane 551, Min-Tsu Road
+				Taoyuan    326
+				TW
+
+00-0A-45   (hex)		Audio-Technica Corp.
+000A45     (base 16)		Audio-Technica Corp.
+				Naruse 1,348
+				Machida  Tokyo  194-8566
+				JP
+
+00-0A-35   (hex)		Xilinx
+000A35     (base 16)		Xilinx
+				2100 Logic Drive
+				San Jose  CA  94110
+				US
+
+00-0A-3B   (hex)		GCT Semiconductor, Inc
+000A3B     (base 16)		GCT Semiconductor, Inc
+				2121 Ringwood Avenue
+				San Jose  CA  95131
+				US
+
+00-0A-74   (hex)		Manticom Networks Inc.
+000A74     (base 16)		Manticom Networks Inc.
+				14016-C Sullyfield Circle
+				Chantilly  VA  20151
+				US
+
+00-0A-6F   (hex)		ZyFLEX Technologies Inc
+000A6F     (base 16)		ZyFLEX Technologies Inc
+				2Fl. No. 58 Park Ave. II
+				S.B.I.P., Hsinchu    30077
+				TW
+
+00-0A-63   (hex)		DHD GmbH
+000A63     (base 16)		DHD GmbH
+				Haferkornstrasse 5
+				Leipzig  Sachsen  04129
+				DE
+
+00-0A-2E   (hex)		MAPLE NETWORKS CO., LTD
+000A2E     (base 16)		MAPLE NETWORKS CO., LTD
+				602, Dongwha
+				SEOUL    156-010
+				KR
+
+00-0A-2D   (hex)		Cabot Communications Limited
+000A2D     (base 16)		Cabot Communications Limited
+				Verona House
+				Bristol  Gloucestershire  BS16 3RY
+				US
+
+00-0A-25   (hex)		CERAGON NETWORKS
+000A25     (base 16)		CERAGON NETWORKS
+				24 RAUEL WALLENBERG STREET
+				TEL-AVIV    96719
+				IL
+
+00-0A-21   (hex)		Integra Telecom Co. Ltd
+000A21     (base 16)		Integra Telecom Co. Ltd
+				7th floor Hwayoung Bld. 112-2
+				Seoul    
+				KR
+
+00-0A-1E   (hex)		Red-M Products Limited
+000A1E     (base 16)		Red-M Products Limited
+				Neptune House
+				Wooburn Green  Buckinghamshire  HP10 0HH
+				GB
+
+00-0A-4B   (hex)		DataPower Technology, Inc.
+000A4B     (base 16)		DataPower Technology, Inc.
+				One Alewife Center
+				Cambridge  MA  02140
+				US
+
+00-0A-33   (hex)		Emulex Corporation
+000A33     (base 16)		Emulex Corporation
+				2021 Opportunity Drive
+				Roseville  CA  95678
+				US
+
+00-0A-67   (hex)		OngCorp
+000A67     (base 16)		OngCorp
+				481 Hackensack Ave.
+				Hackensack  NJ  07601
+				US
+
+00-09-F9   (hex)		ART JAPAN CO., LTD.
+0009F9     (base 16)		ART JAPAN CO., LTD.
+				322-7, Ichinotsubo,
+				Kawasaki  Kanagawa  211-0016
+				JP
+
+00-09-FC   (hex)		IPFLEX Inc.
+0009FC     (base 16)		IPFLEX Inc.
+				Mowa-Bldg 3F, 1-16-6
+				Shibuya-ku  Tokyo  150-0021
+				JP
+
+00-09-FD   (hex)		Ubinetics Limited
+0009FD     (base 16)		Ubinetics Limited
+				Cambridge Technology Centre
+				Melbourn  Hertfordshire  SG8 6DP
+				GB
+
+00-09-F7   (hex)		SED, a division of Calian
+0009F7     (base 16)		SED, a division of Calian
+				18 Innnovation Boulevard
+				Saskatoon  Saskatchewan (SK)  S7K 3P7
+				CA
+
+00-09-E2   (hex)		Sinbon Electronics Co., Ltd.
+0009E2     (base 16)		Sinbon Electronics Co., Ltd.
+				4F-13, No. 79, Sec 1, Hsin Tai Wu Rd.
+				Hsi-Chih, Taipei    221
+				TW
+
+00-09-DA   (hex)		Control Module Inc.
+0009DA     (base 16)		Control Module Inc.
+				227 Brainard Road
+				Enfield  CT  06082
+				US
+
+00-09-D7   (hex)		DC Security Products
+0009D7     (base 16)		DC Security Products
+				One Lindsay Circle
+				San Francisco  California  94124
+				US
+
+00-09-D8   (hex)		Fält Communications AB
+0009D8     (base 16)		Fält Communications AB
+				Kylgränd 6a
+				SE 906 20  Umeå  
+				SE
+
+00-0A-14   (hex)		TECO a.s.
+000A14     (base 16)		TECO a.s.
+				Havlickova 260
+				KOLIN  CZ  280 58
+				CZ
+
+00-0A-0B   (hex)		Sealevel Systems, Inc.
+000A0B     (base 16)		Sealevel Systems, Inc.
+				155 Technology Place
+				Liberty  SC  29657
+				US
+
+00-0A-10   (hex)		FAST media integrations AG
+000A10     (base 16)		FAST media integrations AG
+				Schöngrund 26
+				Rotkreuz  Canton of Zug  6343
+				CH
+
+00-09-DB   (hex)		eSpace
+0009DB     (base 16)		eSpace
+				9623 Simsbury Ct.
+				Twinsburg  OH  44087-3220
+				US
+
+00-09-D5   (hex)		Signal Communication, Inc.
+0009D5     (base 16)		Signal Communication, Inc.
+				100 Wood Ave South
+				Iselin  NJ  08830
+				US
+
+00-09-D3   (hex)		Western DataCom Co., Inc.
+0009D3     (base 16)		Western DataCom Co., Inc.
+				925-D Bassett Rd.
+				Westlake  OH  44145
+				US
+
+00-09-BC   (hex)		Utility, Inc
+0009BC     (base 16)		Utility, Inc
+				250 E Ponce de Leon Ave Suite 700
+				Decatur  GA  30030
+				US
+
+00-09-BE   (hex)		Mamiya-OP Co.,Ltd.
+0009BE     (base 16)		Mamiya-OP Co.,Ltd.
+				3-23-10, Negishi Minami-ku
+				Saitama-shi  Saitama  336-8581
+				JP
+
+00-09-E6   (hex)		Cyber Switching Inc.
+0009E6     (base 16)		Cyber Switching Inc.
+				1800 De La Cruz Blvd.
+				Santa Clara  CA  95050
+				US
+
+00-09-FB   (hex)		Philips Patient Monitoring
+0009FB     (base 16)		Philips Patient Monitoring
+				Hewlett-Packard-Str.2
+				Boeblingen    71034
+				DE
+
+00-09-8F   (hex)		Cetacean Networks
+00098F     (base 16)		Cetacean Networks
+				110 Corporate Drive
+				Portsmouth  NH  03801
+				US
+
+00-09-87   (hex)		NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.
+000987     (base 16)		NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.
+				Kasugaura
+				Oita-City  OITA  870-8632
+				JP
+
+00-09-89   (hex)		VividLogic Inc.
+000989     (base 16)		VividLogic Inc.
+				40994 Encyclopedia Circle
+				Fremont  CA  94538
+				US
+
+00-09-86   (hex)		Metalink LTD.
+000986     (base 16)		Metalink LTD.
+				Yakum Business Park
+				Yakum  HOF HASHARON  60972
+				IL
+
+00-09-8C   (hex)		Option Wireless Sweden
+00098C     (base 16)		Option Wireless Sweden
+				Sturegatan 2
+				  Sundbyberg  SE-172 24
+				SE
+
+00-09-85   (hex)		Auto Telecom Company
+000985     (base 16)		Auto Telecom Company
+				10F, No.3,Lane 16, Sec.2, Sichuan Rd.
+				Banqiao City  Taipei County  22061
+				TW
+
+00-09-8D   (hex)		Velocity Semiconductor
+00098D     (base 16)		Velocity Semiconductor
+				Suite 32 Wey House
+				Weybridge  Surrey  KT13 8NA
+				GB
+
+00-09-81   (hex)		Newport Networks
+000981     (base 16)		Newport Networks
+				Enterprise House
+				Chepstow  Monmouthshire  NP16 5PB
+				GB
+
+00-09-55   (hex)		Young Generation International Corp.
+000955     (base 16)		Young Generation International Corp.
+				4F.,No. 188, Minchuan Rd., Shindian City
+				Shindian    231
+				TW
+
+00-09-4A   (hex)		Homenet Communications
+00094A     (base 16)		Homenet Communications
+				Innovation Centre
+				Limerick    
+				IE
+
+00-09-4B   (hex)		FillFactory NV
+00094B     (base 16)		FillFactory NV
+				Schalienhoevedreef 20B
+				B-2800 Mechelen    
+				BE
+
+00-09-4D   (hex)		Braintree Communications Pty Ltd
+00094D     (base 16)		Braintree Communications Pty Ltd
+				Unit 3
+				Slacks Creek  QLD  4127
+				AU
+
+00-09-50   (hex)		Independent Storage Corporation
+000950     (base 16)		Independent Storage Corporation
+				6273 Monarch Park Place
+				Niwot  Colorado  80503
+				US
+
+00-09-54   (hex)		AMiT spol. s. r. o.
+000954     (base 16)		AMiT spol. s. r. o.
+				Naskove 3
+				150 00  Praha 5  
+				CZ
+
+00-09-92   (hex)		InterEpoch Technology,INC.
+000992     (base 16)		InterEpoch Technology,INC.
+				7F,No.3,Alley 6,Lane 235,Pao-Chiao Rd
+				Hsin-Tien  Taipei Hsien  231
+				TW
+
+00-09-95   (hex)		Castle Technology Ltd
+000995     (base 16)		Castle Technology Ltd
+				Ore Trading Estate
+				Framlingham  Suffolk  IP13 9LL
+				GB
+
+00-09-98   (hex)		Capinfo Company Limited
+000998     (base 16)		Capinfo Company Limited
+				7th Floor A Corporate Square, NO. 35 Fin
+				Beijing    100032
+				CN
+
+00-09-B6   (hex)		Cisco Systems, Inc
+0009B6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-B3   (hex)		MCM Systems Ltd
+0009B3     (base 16)		MCM Systems Ltd
+				Kolomban 9F
+				Ankaran  Slovenija  6280
+				SI
+
+00-09-5C   (hex)		Philips Medical Systems - Cardiac and Monitoring Systems (CM
+00095C     (base 16)		Philips Medical Systems - Cardiac and Monitoring Systems (CM
+				3000 Minuteman Road
+				Andover  Massachusetts  01810
+				US
+
+00-09-58   (hex)		INTELNET S.A.
+000958     (base 16)		INTELNET S.A.
+				FRANCISCO OLIVAN BAYLE, 4
+				ZARAGOZA    50015
+				ES
+
+00-09-A3   (hex)		Leadfly Techologies Corp. Ltd.
+0009A3     (base 16)		Leadfly Techologies Corp. Ltd.
+				9Fl, No.260, Bade Rd.,
+				Taipei    104
+				TW
+
+00-09-A5   (hex)		HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD
+0009A5     (base 16)		HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD
+				HEUNGJIN BLDG 3F, #217-3 POI-DONG, KANGN
+				SEOUL    135-963
+				KR
+
+00-09-62   (hex)		Sonitor Technologies AS
+000962     (base 16)		Sonitor Technologies AS
+				Forskningsveien 1B
+				Oslo  Blindern  N-0134
+				NO
+
+00-09-5D   (hex)		Dialogue Technology Corp.
+00095D     (base 16)		Dialogue Technology Corp.
+				10F, No. 196, Sec. 2, Jungshing Rd.
+				Shindian City  Taipei  231
+				TW
+
+00-09-9A   (hex)		ELMO COMPANY, LIMITED
+00099A     (base 16)		ELMO COMPANY, LIMITED
+				6-14, MEIZEN-CHO, MIZUHO-KU
+				NAGOYA  AICHI-Pref.  467-8567
+				JP
+
+00-09-9C   (hex)		Naval Research Laboratory
+00099C     (base 16)		Naval Research Laboratory
+				Code 5592
+				Washington  DC  20375-5000
+				US
+
+00-09-84   (hex)		MyCasa Network Inc.
+000984     (base 16)		MyCasa Network Inc.
+				200 Sheridan Ave #103
+				Palo Alto  CA  94306
+				US
+
+00-09-2B   (hex)		iQstor Networks, Inc.
+00092B     (base 16)		iQstor Networks, Inc.
+				2001 Corporate Center Drive
+				Newbury Park  CA  91320
+				US
+
+00-09-26   (hex)		YODA COMMUNICATIONS, INC.
+000926     (base 16)		YODA COMMUNICATIONS, INC.
+				2F, No.3-1, Industry East Road IX,
+				Hsinchu    300
+				TW
+
+00-09-27   (hex)		TOYOKEIKI CO.,LTD.
+000927     (base 16)		TOYOKEIKI CO.,LTD.
+				17-10-3,Shimosinjyo
+				Osaka    533-0021
+				JP
+
+00-09-23   (hex)		Heaman System Co., Ltd
+000923     (base 16)		Heaman System Co., Ltd
+				Building M6,National Hi-tech & Indus
+				Changsha  Hunan Province  410013
+				US
+
+00-09-1D   (hex)		Proteam Computer Corporation
+00091D     (base 16)		Proteam Computer Corporation
+				7F, No. 157. Section 2 Ta-Tung Rd
+				Hsi-Chih  Taipei Hsien  221
+				US
+
+00-08-EB   (hex)		ROMWin Co.,Ltd.
+0008EB     (base 16)		ROMWin Co.,Ltd.
+				406 OmiyaOhtaka Bldg. 1-103
+				Saitama    330-0843
+				US
+
+00-08-E8   (hex)		Excel Master Ltd.
+0008E8     (base 16)		Excel Master Ltd.
+				Room D, 3/F., Yeung Yiu Chung (No. 8) Ind. Bldg.
+				  Kowloon Bay  
+				HK
+
+00-08-DC   (hex)		Wiznet
+0008DC     (base 16)		Wiznet
+				5F Simmtech bldg., 228-3,
+				Seoul    135-830
+				KR
+
+00-08-DD   (hex)		Telena Communications, Inc.
+0008DD     (base 16)		Telena Communications, Inc.
+				6725 Mesa Ridge Road
+				San Diego  CA  92121
+				US
+
+00-08-E1   (hex)		Barix AG
+0008E1     (base 16)		Barix AG
+				Seefeld Strasse 303
+				Zürich  ZH  8008
+				US
+
+00-09-09   (hex)		Telenor Connect A/S
+000909     (base 16)		Telenor Connect A/S
+				Ellegaardvej 25L
+				Sønderborg  Als  6400
+				DK
+
+00-09-0A   (hex)		SnedFar Technology Co., Ltd.
+00090A     (base 16)		SnedFar Technology Co., Ltd.
+				15FL., No.866-2, Jung Jeng Rd.,
+				Junghe  Taipei  235
+				TW
+
+00-09-2C   (hex)		Hitpoint Inc.
+00092C     (base 16)		Hitpoint Inc.
+				No.7, Fenliao, 2nd Industrial Park, Link
+				Taipei    244
+				TW
+
+00-09-03   (hex)		Panasas, Inc
+000903     (base 16)		Panasas, Inc
+				15333 John F Kennedy Blvd, Suite 400
+				Houston  TX  77032-2351
+				US
+
+00-09-07   (hex)		Chrysalis Development
+000907     (base 16)		Chrysalis Development
+				8125 River Dr. Suite 100
+				Morton Grove  IL  60053
+				US
+
+00-09-06   (hex)		Esteem Networks
+000906     (base 16)		Esteem Networks
+				4F, No.900, Yishan Road
+				Shanghai    200233
+				CN
+
+00-09-52   (hex)		Auerswald GmbH & Co. KG
+000952     (base 16)		Auerswald GmbH & Co. KG
+				Vor den Grashoefen 1
+				Cremlingen  Niedersachsen  38162
+				DE
+
+00-09-44   (hex)		Cisco Systems, Inc
+000944     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-FB   (hex)		SonoSite, Inc.
+0008FB     (base 16)		SonoSite, Inc.
+				21919 30th Drive SE
+				Bothell  WA  98021
+				US
+
+00-08-EE   (hex)		Logic Product Development
+0008EE     (base 16)		Logic Product Development
+				411 Washington Ave N. Suite 101
+				Minneapolis  Minnesota  55401
+				US
+
+00-09-17   (hex)		WEM Technology Inc
+000917     (base 16)		WEM Technology Inc
+				8F-2, No 386, Sec 5 Nanjing East Road.
+				Taipei    105
+				TW
+
+00-08-81   (hex)		DIGITAL HANDS CO.,LTD.
+000881     (base 16)		DIGITAL HANDS CO.,LTD.
+				KAKiYA Building 2F
+				Yokohama  Kanagawa  222-0033
+				JP
+
+00-08-82   (hex)		SIGMA CORPORATION
+000882     (base 16)		SIGMA CORPORATION
+				2-3-15 Iwato-minami
+				Komae-shi  Tokyo  201-8630
+				JP
+
+00-08-73   (hex)		DapTechnology B.V.
+000873     (base 16)		DapTechnology B.V.
+				Zutphenstraat 67
+				EJ Oldenzaal    7575
+				NL
+
+00-08-7A   (hex)		Wipotec GmbH
+00087A     (base 16)		Wipotec GmbH
+				Adam-Hoffman Str. 26
+				    
+				DE
+
+00-08-71   (hex)		NORTHDATA Co., Ltd.
+000871     (base 16)		NORTHDATA Co., Ltd.
+				#302 KayangTechno-Town 1487
+				Kangseo-Gu  Seoul  157-810
+				KR
+
+00-08-B2   (hex)		SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD
+0008B2     (base 16)		SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD
+				4th Floor,Building 205,TaiRan Industry
+				Shenzhen  GUANGDONG  518040
+				CN
+
+00-08-B1   (hex)		ProQuent Systems
+0008B1     (base 16)		ProQuent Systems
+				67 Forest Street
+				Marlboro  MA  01752
+				US
+
+00-08-AF   (hex)		Novatec Corporation
+0008AF     (base 16)		Novatec Corporation
+				2-19-2 Nishi-Gotanda
+				Shinagawa-ku  Tokyo  141-0031
+				JP
+
+00-08-A6   (hex)		Multiware & Image Co., Ltd.
+0008A6     (base 16)		Multiware & Image Co., Ltd.
+				Saedong Bldg. 65-25,
+				Pusan    606-032
+				KR
+
+00-08-7E   (hex)		Bon Electro-Telecom Inc.
+00087E     (base 16)		Bon Electro-Telecom Inc.
+				Gayang 1st Factory 701, 14-81
+				Seoul    157-808
+				KR
+
+00-08-80   (hex)		BroadTel Canada Communications inc.
+000880     (base 16)		BroadTel Canada Communications inc.
+				3700 Griffith, Suite 389
+				Saint-Laurent  Quebec  H4T 2B3
+				CA
+
+00-08-6D   (hex)		Missouri FreeNet
+00086D     (base 16)		Missouri FreeNet
+				PO Box 771026
+				St. Louis  Missouri  63177-1026
+				US
+
+00-08-D4   (hex)		IneoQuest Technologies, Inc
+0008D4     (base 16)		IneoQuest Technologies, Inc
+				1931 Washington St
+				Canton  Massachusetts  02021
+				US
+
+00-08-D6   (hex)		HASSNET Inc.
+0008D6     (base 16)		HASSNET Inc.
+				2F Missy2000 B/D 725, SooSeo-Dong,
+				Seoul    135-757
+				KR
+
+00-08-CE   (hex)		IPMobileNet Inc.
+0008CE     (base 16)		IPMobileNet Inc.
+				11909 E Telegraph Rd.
+				Santa Fe Springs  CA  90670
+				US
+
+00-08-C2   (hex)		Cisco Systems, Inc
+0008C2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-C0   (hex)		ASA SYSTEMS
+0008C0     (base 16)		ASA SYSTEMS
+				S245 Korea Maritime University, 1 Dongsa
+				Busan  Busan Metropolitan City  606-791
+				KR
+
+00-08-A3   (hex)		Cisco Systems, Inc
+0008A3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-9E   (hex)		Beijing Enter-Net co.LTD
+00089E     (base 16)		Beijing Enter-Net co.LTD
+				NO 1 courtyard,
+				Beijing    100085
+				US
+
+00-08-B4   (hex)		SYSPOL
+0008B4     (base 16)		SYSPOL
+				4th Fl,SYSPOL B/D, Bangbae 4 Dong, Seoch
+				Seoul    137-064
+				US
+
+00-08-B3   (hex)		Fastwel
+0008B3     (base 16)		Fastwel
+				Profsoyuznaya 108,
+				Moscow    117313
+				RU
+
+00-08-8E   (hex)		Nihon Computer Co., Ltd.
+00088E     (base 16)		Nihon Computer Co., Ltd.
+				36-8 Higashitamachi
+				Hamamatsu  Shizuoka  430-0915
+				JP
+
+00-08-DA   (hex)		SofaWare Technologies Ltd.
+0008DA     (base 16)		SofaWare Technologies Ltd.
+				3 Hilazon St.
+				Ramat-Gan    52522
+				IL
+
+00-07-D5   (hex)		3e Technologies Int;., Inc.
+0007D5     (base 16)		3e Technologies Int;., Inc.
+				15800 Crabbs Branch Way
+				Rockville  MD  20855
+				US
+
+00-07-DB   (hex)		Kirana Networks, Inc.
+0007DB     (base 16)		Kirana Networks, Inc.
+				331 Newman Springs Road
+				Red Bank  NJ  07701
+				US
+
+00-08-6A   (hex)		Securiton Gmbh
+00086A     (base 16)		Securiton Gmbh
+				Von-Drais-Strasse 33
+				Achern    D-77855
+				DE
+
+00-08-63   (hex)		Entrisphere Inc.
+000863     (base 16)		Entrisphere Inc.
+				1601 S. De Anza Blvd.
+				Cupertino  CA  95014
+				US
+
+00-08-66   (hex)		DSX Access Systems, Inc.
+000866     (base 16)		DSX Access Systems, Inc.
+				10731 Rockwall Rd.
+				Dallas  TX  75238
+				US
+
+00-07-EF   (hex)		Lockheed Martin Tactical Systems
+0007EF     (base 16)		Lockheed Martin Tactical Systems
+				3333 Pilot Knob Road
+				Eagan  MN  55121
+				US
+
+00-07-F4   (hex)		Eletex Co., Ltd.
+0007F4     (base 16)		Eletex Co., Ltd.
+				8-2-56 Nankou-Higashi Suminoe-ku
+				    
+				JP
+
+00-07-DD   (hex)		Cradle Technologies
+0007DD     (base 16)		Cradle Technologies
+				3130 West Warren Ave.
+				Fremont  CA  94538
+				US
+
+00-08-1B   (hex)		Windigo Systems
+00081B     (base 16)		Windigo Systems
+				2210 O'Toole Ave. #200
+				San Jose  CA  95131
+				US
+
+00-07-FF   (hex)		Gluon Networks
+0007FF     (base 16)		Gluon Networks
+				5401 Old Redwood Hwy.
+				Petaluma  CA  94954
+				US
+
+00-07-F7   (hex)		Galtronics
+0007F7     (base 16)		Galtronics
+				4645 East Cotton Center Blvd.
+				Phoenix  AZ  85040
+				US
+
+00-08-5F   (hex)		Picanol N.V.
+00085F     (base 16)		Picanol N.V.
+				Polenlaan 3-7
+				    
+				BE
+
+00-08-52   (hex)		Davolink Co. Inc.
+000852     (base 16)		Davolink Co. Inc.
+				Room-604, Kumhwa Plaza,
+				Kyunggi-Do    435-040
+				KR
+
+00-08-04   (hex)		ICA Inc.
+000804     (base 16)		ICA Inc.
+				542-1 Noguki
+				    
+				JP
+
+00-08-57   (hex)		Polaris Networks, Inc.
+000857     (base 16)		Polaris Networks, Inc.
+				6810 Santa Teresa Blvd.
+				San Jose  CA  95119
+				US
+
+00-07-8B   (hex)		Wegener Communications, Inc.
+00078B     (base 16)		Wegener Communications, Inc.
+				11350 Technology Circle
+				Duluth  GA  30097
+				US
+
+00-07-83   (hex)		SynCom Network, Inc.
+000783     (base 16)		SynCom Network, Inc.
+				4F, No. 31, Hsintai Road, Chupei City,
+				    
+				TW
+
+00-07-87   (hex)		Idea System Co., Ltd.
+000787     (base 16)		Idea System Co., Ltd.
+				4-1-21 Shinmei-cho Okaya-shi
+				    
+				JP
+
+00-07-B9   (hex)		Ginganet Corporation
+0007B9     (base 16)		Ginganet Corporation
+				Kintetsu Shin Namba Building
+				Osaka Shi    1556-0017
+				JP
+
+00-04-7F   (hex)		Chr. Mayr GmbH & Co. KG
+00047F     (base 16)		Chr. Mayr GmbH & Co. KG
+				Eichenstraße 1
+				    
+				DE
+
+00-04-7B   (hex)		Schlumberger
+00047B     (base 16)		Schlumberger
+				Sugar Land Product Center
+				Sugar Land  TX  77478
+				US
+
+00-07-B4   (hex)		Cisco Systems, Inc
+0007B4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-B3   (hex)		Cisco Systems, Inc
+0007B3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-B5   (hex)		Any One Wireless Ltd.
+0007B5     (base 16)		Any One Wireless Ltd.
+				Namseoul Bd., 8F, 1304-3
+				Seoul    
+				KR
+
+00-07-85   (hex)		Cisco Systems, Inc
+000785     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-75   (hex)		Valence Semiconductor, Inc.
+000775     (base 16)		Valence Semiconductor, Inc.
+				41 Discovery
+				Irvine  CA  92618
+				US
+
+00-07-93   (hex)		Shin Satellite Public Company Limited
+000793     (base 16)		Shin Satellite Public Company Limited
+				41/103  Rattanathibet Road,
+				    
+				TH
+
+00-07-96   (hex)		LSI Systems, Inc.
+000796     (base 16)		LSI Systems, Inc.
+				10-1 Minami-kurokawa,
+				Kanagawa    215-0034
+				JP
+
+00-07-7F   (hex)		J Communications Co., Ltd.
+00077F     (base 16)		J Communications Co., Ltd.
+				124-4 Ojeon-Dong, Ulwang-City
+				    
+				KR
+
+00-07-71   (hex)		Embedded System Corporation
+000771     (base 16)		Embedded System Corporation
+				13-5, Takadanobaba 3-chome,
+				    
+				JP
+
+00-07-70   (hex)		Ubiquoss Inc
+000770     (base 16)		Ubiquoss Inc
+				Ubiquoss B/D, 68, Pangyo-ro 255beon-gil,
+				    
+				KR
+
+00-07-D1   (hex)		Spectrum Signal Processing Inc.
+0007D1     (base 16)		Spectrum Signal Processing Inc.
+				#200-2700 Production Way
+				    
+				CA
+
+00-07-A2   (hex)		Opteon Corporation
+0007A2     (base 16)		Opteon Corporation
+				70 Hastings Street
+				Wellesley  MA  02481
+				US
+
+00-06-F8   (hex)		The Boeing Company
+0006F8     (base 16)		The Boeing Company
+				5731 W. Las Positas Blvd.
+				Pleasanton  CA  94588
+				US
+
+00-06-FB   (hex)		Hitachi Printing Solutions, Ltd.
+0006FB     (base 16)		Hitachi Printing Solutions, Ltd.
+				1060, Takeda Hitachinaka-City
+				    312-8502
+				JP
+
+00-06-FC   (hex)		Fnet Co., Ltd.
+0006FC     (base 16)		Fnet Co., Ltd.
+				KFSB Bldg. 10th F. 16-2
+				Seoul    
+				KR
+
+00-06-F4   (hex)		Prime Electronics & Satellitics Inc.
+0006F4     (base 16)		Prime Electronics & Satellitics Inc.
+				69,Tung-Yuan Rd
+				Chung-Li City  Tao-Yuan County  32000
+				TW
+
+00-07-38   (hex)		Young Technology Co., Ltd.
+000738     (base 16)		Young Technology Co., Ltd.
+				D-604, Sigma-II Officetel,
+				Sungnam-si,  Kyeonggi-do  763-741
+				KR
+
+00-07-29   (hex)		Kistler Instrumente AG
+000729     (base 16)		Kistler Instrumente AG
+				Eulachstrasse 22
+				    
+				CH
+
+00-07-2A   (hex)		Innovance Networks
+00072A     (base 16)		Innovance Networks
+				19 Fairmont Avenue
+				    
+				CA
+
+00-07-4A   (hex)		Carl Valentin GmbH
+00074A     (base 16)		Carl Valentin GmbH
+				Neckarstrabe 78-80
+				    
+				DE
+
+00-07-3C   (hex)		Telecom Design
+00073C     (base 16)		Telecom Design
+				Voie Romaine, Zone de Remora
+				    
+				FR
+
+00-07-36   (hex)		Data Video Technologies Co., Ltd.
+000736     (base 16)		Data Video Technologies Co., Ltd.
+				7F, No. 352, Sec. 2
+				Taipei Hsien    
+				TW
+
+00-07-50   (hex)		Cisco Systems, Inc
+000750     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-42   (hex)		Ormazabal
+000742     (base 16)		Ormazabal
+				Parque Tecnologico 104
+				48170 Zamudio, Bizkaia    
+				ES
+
+00-07-4B   (hex)		Daihen Corporation
+00074B     (base 16)		Daihen Corporation
+				2-1-11 Tagawa Yodogawa-ku
+				    
+				JP
+
+00-07-64   (hex)		YoungWoo Telecom Co. Ltd.
+000764     (base 16)		YoungWoo Telecom Co. Ltd.
+				3F, Sehwa B/D, 355-1
+				Sungnam-Si  Kyungki-Do  
+				KR
+
+00-07-66   (hex)		Chou Chin Industrial Co., Ltd.
+000766     (base 16)		Chou Chin Industrial Co., Ltd.
+				9F, #35, Chiau An St. Chung Ho City,
+				    
+				TW
+
+00-07-61   (hex)		29530
+000761     (base 16)		29530
+				EPFL - Quartier de l'Innovation
+				Lausanne  CH  1015
+				CH
+
+00-07-55   (hex)		Lafon
+000755     (base 16)		Lafon
+				44 Avenue Victor Meunier
+				 Bassens    33530
+				FR
+
+00-07-59   (hex)		Boris Manufacturing Corp.
+000759     (base 16)		Boris Manufacturing Corp.
+				PO Box 601
+				Castle Point  NY  12511
+				US
+
+00-07-51   (hex)		m-u-t AG
+000751     (base 16)		m-u-t AG
+				Messgeräte für Medizin- und Umwelttechnik
+				Wedel    22880
+				DE
+
+00-07-19   (hex)		Mobiis Co., Ltd.
+000719     (base 16)		Mobiis Co., Ltd.
+				277-1, Shinhwa Bldg. 4F
+				Seoul,    
+				KR
+
+00-07-0D   (hex)		Cisco Systems, Inc
+00070D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-0E   (hex)		Cisco Systems, Inc
+00070E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-0B   (hex)		Novabase SGPS, SA
+00070B     (base 16)		Novabase SGPS, SA
+				Av. D Joao II, Lote 1.03.2.3
+				Lisboa    1998-031
+				PT
+
+00-07-10   (hex)		Adax, Inc.
+000710     (base 16)		Adax, Inc.
+				614 Bancroft Way
+				Berkeley  CA  94556
+				US
+
+00-06-E8   (hex)		Optical Network Testing, Inc.
+0006E8     (base 16)		Optical Network Testing, Inc.
+				55 Merchant St.
+				Honolulu  HI  96813
+				US
+
+00-06-EE   (hex)		Shenyang Neu-era Information & Technology Stock Co., Ltd
+0006EE     (base 16)		Shenyang Neu-era Information & Technology Stock Co., Ltd
+				8/F, the 21st Century Building,
+				Dvlpmnt Zone  Shenyang,  
+				CN
+
+00-06-E2   (hex)		Ceemax Technology Co., Ltd.
+0006E2     (base 16)		Ceemax Technology Co., Ltd.
+				5f-7, 736, Chung Cheng Rd.,
+				    
+				TW
+
+00-06-A5   (hex)		PINON Corp.
+0006A5     (base 16)		PINON Corp.
+				Axis Gotanda Bldg.7F-701
+				Tokyo    141-0031
+				JP
+
+00-06-9D   (hex)		Petards Ltd
+00069D     (base 16)		Petards Ltd
+				390 Princesway, Team Valley
+				Gateshead  Tyne and Wear  NE11 OTU
+				GB
+
+00-06-A8   (hex)		KC Technology, Inc.
+0006A8     (base 16)		KC Technology, Inc.
+				1900 McCarthy Blvd.
+				Milpitas  CA  95035
+				US
+
+00-06-A0   (hex)		Mx Imaging
+0006A0     (base 16)		Mx Imaging
+				2894 Columbia Street
+				Torrance  CA  90503
+				US
+
+00-06-BE   (hex)		Baumer Optronic GmbH
+0006BE     (base 16)		Baumer Optronic GmbH
+				Badstraße 30
+				    
+				DE
+
+00-06-BA   (hex)		Westwave Communications
+0006BA     (base 16)		Westwave Communications
+				463 Aviation Blvd.
+				Santa Rosa  CA  95403
+				US
+
+00-06-C4   (hex)		Piolink Inc.
+0006C4     (base 16)		Piolink Inc.
+				IT Castle 1-401, 550-1 Gasan-dong,
+				Seoul    153-803
+				KR
+
+00-06-B5   (hex)		Source Photonics, Inc.
+0006B5     (base 16)		Source Photonics, Inc.
+				20550 Nordhoff St.
+				Chatsworth  CA  91311
+				US
+
+00-06-8F   (hex)		Telemonitor, Inc.
+00068F     (base 16)		Telemonitor, Inc.
+				9055F Guilford Road
+				Columbia  MD  21046
+				US
+
+00-06-DA   (hex)		ITRAN Communications Ltd.
+0006DA     (base 16)		ITRAN Communications Ltd.
+				1 Azrieli Center,
+				Tel Aviv 67021     67021
+				IL
+
+00-06-D0   (hex)		Elgar Electronics Corp.
+0006D0     (base 16)		Elgar Electronics Corp.
+				9250 Brown Deer Rd.
+				San Diego  CA  92121
+				US
+
+00-06-CC   (hex)		JMI Electronics Co., Ltd.
+0006CC     (base 16)		JMI Electronics Co., Ltd.
+				Nanyang B/D 3F, 25-4
+				Seoul    140-080
+				KR
+
+00-06-BF   (hex)		Accella Technologies Co., Ltd.
+0006BF     (base 16)		Accella Technologies Co., Ltd.
+				Rm 512 No. 680 Gui Ping Rd.
+				Shanghai    200233
+				CN
+
+00-06-90   (hex)		Euracom Communication GmbH
+000690     (base 16)		Euracom Communication GmbH
+				Franklinstraße 14
+				    
+				DE
+
+00-06-E1   (hex)		Techno Trade s.a
+0006E1     (base 16)		Techno Trade s.a
+				732a Chaussee de Bruxelles
+				    
+				BE
+
+00-06-2E   (hex)		Aristos Logic Corp.
+00062E     (base 16)		Aristos Logic Corp.
+				27051 Towne Centre Dr.
+				Foothill Ranch  CA  92610
+				US
+
+00-06-24   (hex)		Gentner Communications Corp.
+000624     (base 16)		Gentner Communications Corp.
+				1825 Research Way
+				Salt Lake City  UT  84119
+				US
+
+00-06-25   (hex)		The Linksys Group, Inc.
+000625     (base 16)		The Linksys Group, Inc.
+				17401 Armstrong Ave.
+				Irvine  CA  92614
+				US
+
+00-06-27   (hex)		Uniwide Technologies, Inc.
+000627     (base 16)		Uniwide Technologies, Inc.
+				Korea Development Bank B/D 5th Flr
+				Taejon  302-122,  
+				KR
+
+00-06-2A   (hex)		Cisco Systems, Inc
+00062A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-06-2C   (hex)		Bivio Networks
+00062C     (base 16)		Bivio Networks
+				4457 Willow Road,
+				Pleasanton  CA  94588
+				US
+
+00-06-21   (hex)		Hinox, Co., Ltd.
+000621     (base 16)		Hinox, Co., Ltd.
+				15-7 3-chome, Sennin-cho,
+				    193-0835
+				JP
+
+00-06-4E   (hex)		Broad Net Technology Inc.
+00064E     (base 16)		Broad Net Technology Inc.
+				5F, No.58, Lane 188, Rui Kuang Road
+				    
+				TW
+
+00-06-2D   (hex)		TouchStar Technologies, L.L.C.
+00062D     (base 16)		TouchStar Technologies, L.L.C.
+				5147 South Garnett Road
+				Tulsa  OK  74146
+				US
+
+00-06-46   (hex)		ShenZhen XunBao Network Technology Co Ltd
+000646     (base 16)		ShenZhen XunBao Network Technology Co Ltd
+				F3, R2-A Building, South District
+				Shen Zhen    
+				CN
+
+00-06-4B   (hex)		Alexon Co., Ltd.
+00064B     (base 16)		Alexon Co., Ltd.
+				3-207-1 Teramoto,
+				    
+				JP
+
+00-06-3C   (hex)		Intrinsyc Software International Inc.
+00063C     (base 16)		Intrinsyc Software International Inc.
+				885 Dunsmuir Street, Suite 380
+				Vancouver  B.C.  V6C 1N5
+				CA
+
+00-06-30   (hex)		Adtranz Sweden
+000630     (base 16)		Adtranz Sweden
+				Dept. TCC/TH
+				    
+				SE
+
+00-06-37   (hex)		Toptrend-Meta Information (ShenZhen) Inc.
+000637     (base 16)		Toptrend-Meta Information (ShenZhen) Inc.
+				2/F, Bldg. 3, Section A, Nor-East Zone
+				    
+				CN
+
+00-06-1C   (hex)		Hoshino Metal Industries, Ltd.
+00061C     (base 16)		Hoshino Metal Industries, Ltd.
+				645 Yamanokami, Yabutsuka,
+				    379-2302
+				JP
+
+00-06-23   (hex)		MGE UPS Systems France
+000623     (base 16)		MGE UPS Systems France
+				140 Avenue Jean Kuntzmann
+				    
+				FR
+
+00-06-0B   (hex)		Artesyn Embedded Technologies
+00060B     (base 16)		Artesyn Embedded Technologies
+				2900 S. Diablo Way Suite 190
+				Tempe  AZ  85282
+				US
+
+00-06-7E   (hex)		WinCom Systems, Inc.
+00067E     (base 16)		WinCom Systems, Inc.
+				10900 World Trade Blvd.
+				Morrisville  NC  27560
+				US
+
+00-06-77   (hex)		SICK AG
+000677     (base 16)		SICK AG
+				Erwin-Sick Str.1
+				Waldkirch    D-79183
+				DE
+
+00-06-66   (hex)		Roving Networks
+000666     (base 16)		Roving Networks
+				809 University Avenue
+				Los Gatos  CA  95032
+				US
+
+00-06-67   (hex)		Tripp Lite
+000667     (base 16)		Tripp Lite
+				1111 W. 35th Street
+				Chicago  IL  60609
+				US
+
+00-06-4D   (hex)		Sencore
+00064D     (base 16)		Sencore
+				3200 Sencore Dr.
+				Sioux Falls  SD  57107
+				US
+
+00-06-60   (hex)		NADEX Co., Ltd.
+000660     (base 16)		NADEX Co., Ltd.
+				1 Omiyamae, Tokushige,
+				Aichi    481-0038
+				JP
+
+00-06-79   (hex)		Konami Corporation
+000679     (base 16)		Konami Corporation
+				11-14-5 Akasaka, Minato-ku,
+				    
+				JP
+
+00-06-6C   (hex)		Robinson Corporation
+00066C     (base 16)		Robinson Corporation
+				12F, No. 278 Ho Ping E. Rd.,
+				Taipei    
+				TW
+
+00-06-15   (hex)		Kimoto Electric Co., Ltd.
+000615     (base 16)		Kimoto Electric Co., Ltd.
+				3-1 Funahashi-Cho,
+				    543-0024
+				JP
+
+00-06-0A   (hex)		Blue2space
+00060A     (base 16)		Blue2space
+				Arstaangsv. 9
+				    
+				SE
+
+00-05-CE   (hex)		Prolink Microsystems Corporation
+0005CE     (base 16)		Prolink Microsystems Corporation
+				6F, No. 349, Yang-Kuang St.
+				Nei-Hu  Taipei,  
+				TW
+
+00-05-C2   (hex)		Soronti, Inc.
+0005C2     (base 16)		Soronti, Inc.
+				12159 Business Park Dr, suite 140
+				Draper  Utah  84020
+				US
+
+00-05-DF   (hex)		Electronic Innovation, Inc.
+0005DF     (base 16)		Electronic Innovation, Inc.
+				12731 Cannington Way SW
+				  Calgary, AB  T2W 1Z7
+				CA
+
+00-05-DE   (hex)		Gi Fone Korea, Inc.
+0005DE     (base 16)		Gi Fone Korea, Inc.
+				Twin Bldg. 4th Fl,
+				Seoul,    
+				KR
+
+00-05-E0   (hex)		Empirix Corp.
+0005E0     (base 16)		Empirix Corp.
+				205 Lowell St.
+				Wilmington  MA  01887
+				US
+
+00-05-D8   (hex)		Arescom, Inc.
+0005D8     (base 16)		Arescom, Inc.
+				3541 Gateway Blvd.
+				Fremont  CA  94538
+				US
+
+00-05-E4   (hex)		Red Lion Controls Inc.
+0005E4     (base 16)		Red Lion Controls Inc.
+				20 Willow Springs Circle
+				York  PA  17402
+				US
+
+00-05-F2   (hex)		Power R, Inc.
+0005F2     (base 16)		Power R, Inc.
+				756 Aloha St.
+				Seattle  WA  98109
+				US
+
+00-05-F3   (hex)		Webyn
+0005F3     (base 16)		Webyn
+				26 Rue Oes Gaudines
+				    
+				FR
+
+00-06-01   (hex)		Otanikeiki Co., Ltd.
+000601     (base 16)		Otanikeiki Co., Ltd.
+				2-10-23 Hikari-Machi
+				    732-0052
+				JP
+
+00-06-05   (hex)		Inncom International, Inc.
+000605     (base 16)		Inncom International, Inc.
+				P.O. Box 1060
+				Old Lyme  CT  06371
+				US
+
+00-05-FA   (hex)		IPOptical, Inc.
+0005FA     (base 16)		IPOptical, Inc.
+				45940 Horseshoe Drive
+				Dulles  VA  20166
+				US
+
+00-05-E5   (hex)		Renishaw PLC
+0005E5     (base 16)		Renishaw PLC
+				New Mills, Wotton-under-Edge
+				    
+				GB
+
+00-05-F5   (hex)		Geospace Technologies
+0005F5     (base 16)		Geospace Technologies
+				7007 Pinemont
+				Houston  TX  77040
+				US
+
+00-05-FD   (hex)		PacketLight Networks Ltd.
+0005FD     (base 16)		PacketLight Networks Ltd.
+				27 Habarzel St.
+				Tel-Aviv    69710
+				IL
+
+00-05-D4   (hex)		FutureSmart Networks, Inc.
+0005D4     (base 16)		FutureSmart Networks, Inc.
+				6155 Almaden Expressway
+				San Jose  CA  95120
+				US
+
+00-05-C4   (hex)		Telect, Inc.
+0005C4     (base 16)		Telect, Inc.
+				2111 N. Molter Road
+				Liberty Lake  WA  99019
+				US
+
+00-05-A3   (hex)		QEI, Inc.
+0005A3     (base 16)		QEI, Inc.
+				60 Fadem Road
+				Springfield  NJ  07081
+				US
+
+00-05-9E   (hex)		Zinwell Corporation
+00059E     (base 16)		Zinwell Corporation
+				7F, No.512, Yuan-Shan Road
+				    
+				TW
+
+00-05-A5   (hex)		KOTT
+0005A5     (base 16)		KOTT
+				Suite 305 Daeha B/D
+				    135-080
+				KR
+
+00-05-B3   (hex)		Asahi-Engineering Co., Ltd.
+0005B3     (base 16)		Asahi-Engineering Co., Ltd.
+				3-6-12-2 Gakuenhigashi-cho
+				Tokyo    187-0043
+				JP
+
+00-05-9D   (hex)		Daniel Computing Systems, Inc.
+00059D     (base 16)		Daniel Computing Systems, Inc.
+				3208 8th Avenue NE #118
+				    T2A 7V8
+				CA
+
+00-05-A4   (hex)		Lucid Voice Ltd.
+0005A4     (base 16)		Lucid Voice Ltd.
+				5 Jabotinski Street
+				    
+				IL
+
+00-05-63   (hex)		J-Works, Inc.
+000563     (base 16)		J-Works, Inc.
+				12328 Gladstone St. #1
+				Sylmor  CA  91342
+				US
+
+00-05-57   (hex)		Agile TV Corporation
+000557     (base 16)		Agile TV Corporation
+				333 Ravenswood Ave.,
+				Menlo Park  CA  94025
+				US
+
+00-05-5B   (hex)		Charles Industries, Ltd.
+00055B     (base 16)		Charles Industries, Ltd.
+				5600 Apollo Dr.
+				Rolling Meadows  IL  60008
+				US
+
+00-05-54   (hex)		Rangestar Wireless
+000554     (base 16)		Rangestar Wireless
+				9565 Soquel Drive, Suite 100
+				Aptos  CA  95003
+				US
+
+00-05-53   (hex)		DVC Company, Inc.
+000553     (base 16)		DVC Company, Inc.
+				10200 Hwy 290 W.
+				Austin  TX  78236
+				US
+
+00-05-66   (hex)		Secui.com Corporation
+000566     (base 16)		Secui.com Corporation
+				17th Fl. Samsung Yeoksam Bldg.
+				Seoul    135-080
+				KR
+
+00-05-6C   (hex)		Hung Chang Co., Ltd.
+00056C     (base 16)		Hung Chang Co., Ltd.
+				1385-14, Juan-Dong,
+				    
+				KR
+
+00-05-5F   (hex)		Cisco Systems, Inc
+00055F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-5D   (hex)		D-LINK SYSTEMS, INC.
+00055D     (base 16)		D-LINK SYSTEMS, INC.
+				53 Discover Dr.
+				Irvine  CA  92618
+				US
+
+00-05-61   (hex)		nac Image Technology, Inc.
+000561     (base 16)		nac Image Technology, Inc.
+				8-7 Sanban-cho, Chiyoda-ku,
+				    
+				JP
+
+00-05-94   (hex)		HMS Industrial Networks
+000594     (base 16)		HMS Industrial Networks
+				PO Box 4126
+				SE30004    SE
+				SE
+
+00-05-6F   (hex)		Innomedia Technologies Pvt. Ltd.
+00056F     (base 16)		Innomedia Technologies Pvt. Ltd.
+				#3278, 12th Main Road
+				    
+				IN
+
+00-05-74   (hex)		Cisco Systems, Inc
+000574     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-67   (hex)		Etymonic Design, Inc.
+000567     (base 16)		Etymonic Design, Inc.
+				41 Byron Avenue
+				    NOL 1GO
+				CA
+
+00-05-65   (hex)		Tailyn Communication Company Ltd.
+000565     (base 16)		Tailyn Communication Company Ltd.
+				No. 62, Lane 205, Nan-San Road,
+				Taoyuan Hsien    
+				TW
+
+00-05-8E   (hex)		Flextronics International GmbH & Co. Nfg. KG
+00058E     (base 16)		Flextronics International GmbH & Co. Nfg. KG
+				Schrackgasse 9-15
+				Kindberg    8650
+				AT
+
+00-05-32   (hex)		Cisco Systems, Inc
+000532     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-36   (hex)		Danam Communications, Inc.
+000536     (base 16)		Danam Communications, Inc.
+				900-3, Hokye-dong, Dongan-gu,
+				    
+				KR
+
+00-05-42   (hex)		Otari, Inc.
+000542     (base 16)		Otari, Inc.
+				4-33-3 Kokuryo-cho,
+				    
+				JP
+
+00-05-37   (hex)		Nets Technology Co., Ltd.
+000537     (base 16)		Nets Technology Co., Ltd.
+				#B1 YungJun Bldg.
+				Seoul 135-090    135-090
+				KR
+
+00-05-7C   (hex)		RCO Security AB
+00057C     (base 16)		RCO Security AB
+				Box 705
+				    
+				SE
+
+00-05-83   (hex)		ImageCom Limited
+000583     (base 16)		ImageCom Limited
+				Cedars Park, Cedars Road,
+				    SL6 1RZ
+				GB
+
+00-05-4B   (hex)		Eaton Automation AG
+00054B     (base 16)		Eaton Automation AG
+				Spinnereistrasse 8
+				St.Gallen    9008 
+				CH
+
+00-04-C8   (hex)		LIBA Maschinenfabrik GmbH
+0004C8     (base 16)		LIBA Maschinenfabrik GmbH
+				PO Box 1120
+				    
+				DE
+
+00-04-CC   (hex)		Peek Traffic B.V.
+0004CC     (base 16)		Peek Traffic B.V.
+				Postbus 2542
+				  The  
+				NL
+
+00-04-BF   (hex)		VersaLogic Corp.
+0004BF     (base 16)		VersaLogic Corp.
+				12100 SW Tualatin Rd
+				Tualatin  OR  97062
+				US
+
+00-04-C3   (hex)		CASTOR Informatique
+0004C3     (base 16)		CASTOR Informatique
+				2, Rue Du Kefir
+				94537 Orly  Cedex  
+				FR
+
+00-04-F6   (hex)		Amphus
+0004F6     (base 16)		Amphus
+				2372 Qume Drive, #F
+				San Jose  CA  95131
+				US
+
+00-04-F4   (hex)		Infinite Electronics Inc.
+0004F4     (base 16)		Infinite Electronics Inc.
+				No.478-1, Sec 2
+				    
+				TW
+
+00-04-F1   (hex)		WhereNet
+0004F1     (base 16)		WhereNet
+				107 W. McKinney Avenue
+				Rogersville  TN  37857
+				US
+
+00-05-21   (hex)		Control Microsystems
+000521     (base 16)		Control Microsystems
+				48 Steacie Drive
+				Ottawa  Ontario  K2K 2A9
+				CA
+
+00-05-23   (hex)		AVL List GmbH
+000523     (base 16)		AVL List GmbH
+				Hans List Platz 1
+				Graz    8020
+				AT
+
+00-05-1F   (hex)		Taijin Media Co., Ltd.
+00051F     (base 16)		Taijin Media Co., Ltd.
+				640-8 Tungchon-Dong
+				Seoul    157-030
+				KR
+
+00-05-0C   (hex)		Network Photonics, Inc.
+00050C     (base 16)		Network Photonics, Inc.
+				451 Aviation Boulevard
+				Santa Rosa  CA  95403
+				US
+
+00-04-EC   (hex)		Memobox SA
+0004EC     (base 16)		Memobox SA
+				1, Place Dame Suzanne
+				    
+				FR
+
+00-04-E4   (hex)		Daeryung Ind., Inc.
+0004E4     (base 16)		Daeryung Ind., Inc.
+				#219-6, Kasan Dong,
+				Seoul  Seoul  KOREA
+				KR
+
+00-05-0A   (hex)		ICS Spa
+00050A     (base 16)		ICS Spa
+				Via Romano AL
+				    
+				IT
+
+00-05-11   (hex)		Complementary Technologies Ltd
+000511     (base 16)		Complementary Technologies Ltd
+				Comtech House, 28 Manchester Road
+				    BL5 3QJ
+				GB
+
+00-05-06   (hex)		Reddo Networks AB
+000506     (base 16)		Reddo Networks AB
+				Livdjursgatan 4
+				    
+				SE
+
+00-04-E2   (hex)		SMC Networks, Inc.
+0004E2     (base 16)		SMC Networks, Inc.
+				6 Hughes
+				Irvine  CA  92618
+				US
+
+00-04-CB   (hex)		Tdsoft Communication, Ltd.
+0004CB     (base 16)		Tdsoft Communication, Ltd.
+				60 Medinat Hayehudim St.
+				    
+				IL
+
+00-05-26   (hex)		IPAS GmbH
+000526     (base 16)		IPAS GmbH
+				Hölscherstr. 27
+				    
+				DE
+
+00-04-67   (hex)		Wuhan Research Institute of MII
+000467     (base 16)		Wuhan Research Institute of MII
+				88 Youkeyuan Road,
+				430074  430074  P.R.CHINA
+				CN
+
+00-04-5A   (hex)		The Linksys Group, Inc.
+00045A     (base 16)		The Linksys Group, Inc.
+				17401 Armstrong Ave.
+				Irvine  CA  92614
+				US
+
+00-04-63   (hex)		Bosch Security Systems
+000463     (base 16)		Bosch Security Systems
+				850 Greenfield Road
+				Lancaster  PA  17601-5874
+				US
+
+00-04-5C   (hex)		Mobiwave Pte Ltd
+00045C     (base 16)		Mobiwave Pte Ltd
+				Blk 16, Kallang Place
+				    339156
+				SG
+
+00-04-53   (hex)		YottaYotta, Inc.
+000453     (base 16)		YottaYotta, Inc.
+				6020- 104 Street
+				Edmonton, AB    T6H 5S4
+				CA
+
+00-04-50   (hex)		DMD Computers SRL
+000450     (base 16)		DMD Computers SRL
+				Via Monviso, 14
+				    
+				IT
+
+00-04-43   (hex)		Agilent Technologies, Inc.
+000443     (base 16)		Agilent Technologies, Inc.
+				5301 Stevens Creek Boulevard
+				Santa Clara  CA  95051
+				US
+
+00-04-49   (hex)		Mapletree Networks
+000449     (base 16)		Mapletree Networks
+				315 Norwood Park South
+				Norwood  MA  02062
+				US
+
+00-04-2F   (hex)		International Communications Products, Inc.
+00042F     (base 16)		International Communications Products, Inc.
+				4325 Woodland Park Drive
+				West Melbourne  FL  32904
+				US
+
+00-04-29   (hex)		Pixord Corporation
+000429     (base 16)		Pixord Corporation
+				6F, No. 12, Innovation 1st Rd.,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-04-26   (hex)		Autosys
+000426     (base 16)		Autosys
+				202 Ilsinpastel,
+				Seoul  Seoul  KOREA
+				KR
+
+00-04-B8   (hex)		Kumahira Co., Ltd.
+0004B8     (base 16)		Kumahira Co., Ltd.
+				4-34 Ujinahigashi 2-Chome
+				  JAPAN  734-8567
+				JP
+
+00-04-B5   (hex)		Equitrac Corporation
+0004B5     (base 16)		Equitrac Corporation
+				1905 N.W. 82nd Avenue
+				Miami  FL  33126
+				US
+
+00-04-B1   (hex)		Signal Technology, Inc.
+0004B1     (base 16)		Signal Technology, Inc.
+				3rd. Fl. Dabo Bldg.
+				Seoul  KOREA  138-110
+				KR
+
+00-04-51   (hex)		Medrad, Inc.
+000451     (base 16)		Medrad, Inc.
+				One Medrad Drive
+				Indianola  PA  15051
+				US
+
+00-04-83   (hex)		Deltron Technology, Inc.
+000483     (base 16)		Deltron Technology, Inc.
+				8F-3, No. 125, Lane 235
+				Taipei  TAIWAN,  R.O.C.
+				TW
+
+00-04-41   (hex)		Half Dome Systems, Inc.
+000441     (base 16)		Half Dome Systems, Inc.
+				155 B-1 Moffet Park Drive
+				Sunnyvale  CA  94089
+				US
+
+00-04-A5   (hex)		Barco Projection Systems NV
+0004A5     (base 16)		Barco Projection Systems NV
+				Noordlaan 5
+				    
+				BE
+
+00-04-82   (hex)		Medialogic Corp.
+000482     (base 16)		Medialogic Corp.
+				0-3, Toyamaken-Sangyou
+				    
+				JP
+
+00-03-CA   (hex)		MTS Systems Corp.
+0003CA     (base 16)		MTS Systems Corp.
+				3001 Sheldon Drive
+				Cary,  NC  27513
+				US
+
+00-03-C7   (hex)		hopf Elektronik GmbH
+0003C7     (base 16)		hopf Elektronik GmbH
+				Nottebohmstraße 41
+				58511  Lüdenscheid  
+				DE
+
+00-03-C2   (hex)		Solphone K.K.
+0003C2     (base 16)		Solphone K.K.
+				2-11-1 Kandatsukasa-cho
+				  101-0048  
+				JP
+
+00-03-F3   (hex)		Dazzle Multimedia, Inc.
+0003F3     (base 16)		Dazzle Multimedia, Inc.
+				47211 Bayside Parkway
+				Fremont  CA  94538
+				US
+
+00-03-EC   (hex)		ICG Research, Inc.
+0003EC     (base 16)		ICG Research, Inc.
+				775 B The Queens Way
+				M8Z  1N1  
+				CA
+
+00-03-E9   (hex)		Akara Canada, Inc.
+0003E9     (base 16)		Akara Canada, Inc.
+				150 Katimavik Road
+				CANADA  K2L  2N2
+				CA
+
+00-03-E5   (hex)		Hermstedt SG
+0003E5     (base 16)		Hermstedt SG
+				Carl-Reuther - Str. 3
+				    
+				DE
+
+00-04-21   (hex)		Ocular Networks
+000421     (base 16)		Ocular Networks
+				12700, Fair Lakes Circle
+				Fairfax  VA  22033
+				US
+
+00-04-24   (hex)		TMC s.r.l.
+000424     (base 16)		TMC s.r.l.
+				202 Via A. Costa
+				    
+				IT
+
+00-04-1D   (hex)		Corega of America
+00041D     (base 16)		Corega of America
+				P.O. Box 159
+				Bothell  WA  98041-0159
+				US
+
+00-04-1A   (hex)		Ines Test and Measurement GmbH & CoKG
+00041A     (base 16)		Ines Test and Measurement GmbH & CoKG
+				An der Mühlenaue 5
+				  Bad Nenndorf  31542
+				DE
+
+00-04-1E   (hex)		Shikoku Instrumentation Co., Ltd.
+00041E     (base 16)		Shikoku Instrumentation Co., Ltd.
+				777, Oosachou, Zentsuujishi,
+				    
+				JP
+
+00-04-13   (hex)		snom technology GmbH
+000413     (base 16)		snom technology GmbH
+				Wittestr 30 G
+				Berlin    13509
+				DE
+
+00-03-B4   (hex)		Macrotek International Corp.
+0003B4     (base 16)		Macrotek International Corp.
+				2F, No. 28, Lane 46
+				Taipei  Taipei  TAIWAN
+				TW
+
+00-03-A6   (hex)		Traxit Technology, Inc.
+0003A6     (base 16)		Traxit Technology, Inc.
+				256 Great Road,
+				Littleton  MA  01461
+				US
+
+00-03-A4   (hex)		Imation Corp.
+0003A4     (base 16)		Imation Corp.
+				1 Imation Place
+				Oakdale  MN  55128-3414
+				US
+
+00-03-AB   (hex)		Bridge Information Systems
+0003AB     (base 16)		Bridge Information Systems
+				717 Office Parkway
+				St. Louis  MO  63141
+				US
+
+00-04-03   (hex)		Nexsi Corporation
+000403     (base 16)		Nexsi Corporation
+				1959 Concourse Drive
+				San Jose  CA  95131
+				US
+
+00-04-06   (hex)		Fa. Metabox AG
+000406     (base 16)		Fa. Metabox AG
+				Daimlerring 37,
+				    
+				DE
+
+00-03-F8   (hex)		SanCastle Technologies, Inc.
+0003F8     (base 16)		SanCastle Technologies, Inc.
+				2107 North First Street
+				San Jose  CA  95131
+				US
+
+00-03-FA   (hex)		TiMetra Networks
+0003FA     (base 16)		TiMetra Networks
+				500 Ellis St.
+				Mountain View  CA  94043
+				US
+
+00-03-C6   (hex)		ICUE Systems, Inc.
+0003C6     (base 16)		ICUE Systems, Inc.
+				17489 Gale Avenue
+				City of Industry  CA  91748
+				US
+
+00-03-BB   (hex)		Signal Communications Limited
+0003BB     (base 16)		Signal Communications Limited
+				Unit 217, 2/F, HKITC,
+				  HONG  KONG
+				HK
+
+00-03-BE   (hex)		Netility
+0003BE     (base 16)		Netility
+				298 South Sunnyvale Ave.
+				Sunnyvale  CA  94086
+				US
+
+00-03-DF   (hex)		Desana Systems
+0003DF     (base 16)		Desana Systems
+				1805 McCandless Ave.
+				Milpitas  CA  95035
+				US
+
+00-03-DA   (hex)		Takamisawa Cybernetics Co., Ltd.
+0003DA     (base 16)		Takamisawa Cybernetics Co., Ltd.
+				Nakano Heiwa Bldg.
+				    
+				JP
+
+00-03-D9   (hex)		Secheron SA
+0003D9     (base 16)		Secheron SA
+				Untermattweg 8
+				    
+				CH
+
+00-03-FB   (hex)		ENEGATE Co.,Ltd.
+0003FB     (base 16)		ENEGATE Co.,Ltd.
+				3-14-40 Senrioka,
+				Settsu-city  Osaka  566-8686
+				JP
+
+00-03-F6   (hex)		Allegro Networks, Inc.
+0003F6     (base 16)		Allegro Networks, Inc.
+				6399 San Ignacio Avenue
+				San Jose  CA  95119
+				US
+
+00-04-15   (hex)		Rasteme Systems Co., Ltd.
+000415     (base 16)		Rasteme Systems Co., Ltd.
+				886-2 Nihongi Nakagou-mura
+				    
+				JP
+
+00-03-98   (hex)		WISI
+000398     (base 16)		WISI
+				Wilhelm-Sihn-Str. 5-7
+				D-75223  Niefern-Oeschelbronn  
+				DE
+
+00-03-95   (hex)		California Amplifier
+000395     (base 16)		California Amplifier
+				460 Calle San Pablo
+				Camarillo  CA  93012
+				US
+
+00-03-92   (hex)		Hyundai Teletek Co., Ltd.
+000392     (base 16)		Hyundai Teletek Co., Ltd.
+				B-501, Techno Park, 148 Yatap-dong,
+				  KOREA  Republic
+				KR
+
+00-03-8E   (hex)		Atoga Systems, Inc.
+00038E     (base 16)		Atoga Systems, Inc.
+				49026 Milmont Drive
+				Fremont  CA  94538
+				US
+
+00-03-1A   (hex)		Beijing Broad Telecom Ltd., China
+00031A     (base 16)		Beijing Broad Telecom Ltd., China
+				P.O. Box #147
+				Beijing    100876
+				CN
+
+00-03-5B   (hex)		BridgeWave Communications
+00035B     (base 16)		BridgeWave Communications
+				3350 Thomad Road
+				Santa Clara  CA  95054
+				US
+
+00-03-57   (hex)		Intervoice-Brite, Inc.
+000357     (base 16)		Intervoice-Brite, Inc.
+				17811 Waterview Pkwy.
+				Dallas  TX  75252
+				US
+
+00-03-7F   (hex)		Atheros Communications, Inc.
+00037F     (base 16)		Atheros Communications, Inc.
+				5480 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+00-02-F0   (hex)		AME Optimedia Technology Co., Ltd.
+0002F0     (base 16)		AME Optimedia Technology Co., Ltd.
+				17F-2, 79 Hsin Tai Wu Road, Sec. 1,
+				    
+				TW
+
+00-03-9E   (hex)		Tera System Co., Ltd.
+00039E     (base 16)		Tera System Co., Ltd.
+				Doosung B/F Rm 302
+				Republic  of  Korea
+				KR
+
+00-03-97   (hex)		FireBrick Limited
+000397     (base 16)		FireBrick Limited
+				C/O Andrews & Arnold Ltd, 
+				Enterprise Court, Downmill Road  Bracknell, Berks  RG12 1QS
+				GB
+
+00-03-3F   (hex)		BigBand Networks, Ltd.
+00033F     (base 16)		BigBand Networks, Ltd.
+				3 Azrieli Towers
+				    
+				IL
+
+00-03-2E   (hex)		Scope Information Management, Ltd.
+00032E     (base 16)		Scope Information Management, Ltd.
+				2F Chanwoo b/o 736 Youksang-dong,
+				Seoul    135-080
+				KR
+
+00-03-7C   (hex)		Coax Media
+00037C     (base 16)		Coax Media
+				1220 Oak Industrial Lane
+				Cumming  GA  30041
+				US
+
+00-03-68   (hex)		Embedone Co., Ltd.
+000368     (base 16)		Embedone Co., Ltd.
+				Fl. 9 Annex Samhwan B/D. 17-26
+				Seoul    150-01
+				KR
+
+00-03-45   (hex)		Routrek Networks Corporation
+000345     (base 16)		Routrek Networks Corporation
+				Nilssei Shin Mizonokuchi Bldg. 1F
+				  23-0011  
+				JP
+
+00-02-C8   (hex)		Technocom Communications Technology (pte) Ltd
+0002C8     (base 16)		Technocom Communications Technology (pte) Ltd
+				189 Kaki Buckit Avenue 1
+				  Singapore  416029
+				SG
+
+00-02-B8   (hex)		WHI KONSULT AB
+0002B8     (base 16)		WHI KONSULT AB
+				Scheelegatan 11
+				  Stockholm  SE-112 28
+				SE
+
+00-02-A9   (hex)		RACOM, s.r.o.
+0002A9     (base 16)		RACOM, s.r.o.
+				Mirova 1283, Nove Mesto na Morave
+				592 31  Czech  republic
+				CZ
+
+00-02-BB   (hex)		Continuous Computing Corp
+0002BB     (base 16)		Continuous Computing Corp
+				9380 Carroll Park Drive
+				San Diego  CA  92121
+				US
+
+00-02-BC   (hex)		LVL 7 Systems, Inc.
+0002BC     (base 16)		LVL 7 Systems, Inc.
+				13000 Weston Pkwy
+				Cary  NC  27513
+				US
+
+00-03-0F   (hex)		Digital China (Shanghai) Networks Ltd.
+00030F     (base 16)		Digital China (Shanghai) Networks Ltd.
+				602-23, Haitai Building, 351 Guo Shoujin
+				Shanghai    
+				CN
+
+00-03-11   (hex)		Micro Technology Co., Ltd.
+000311     (base 16)		Micro Technology Co., Ltd.
+				Suehiro Bldg.
+				  101-0021  
+				JP
+
+00-03-0D   (hex)		Uniwill Computer Corp.
+00030D     (base 16)		Uniwill Computer Corp.
+				No. 24, Pei Yuan Rd., Chung
+				Li City    
+				TW
+
+00-03-09   (hex)		Texcel Technology PLC
+000309     (base 16)		Texcel Technology PLC
+				Thames Road
+				  ENGLAND  
+				GB
+
+00-03-03   (hex)		JAMA Electronics Co., Ltd.
+000303     (base 16)		JAMA Electronics Co., Ltd.
+				10F, No. 222-1, Sec. 3
+				Taipei Hsien    
+				TW
+
+00-03-05   (hex)		MSC Vertriebs GmbH
+000305     (base 16)		MSC Vertriebs GmbH
+				Design Center Aachen
+				AACHEN    D-52076
+				DE
+
+00-02-FE   (hex)		Viditec, Inc.
+0002FE     (base 16)		Viditec, Inc.
+				520 Central Parkway E.
+				Plano  TX  75074
+				US
+
+00-01-9F   (hex)		ReadyNet
+00019F     (base 16)		ReadyNet
+				6952 High Tech Drive
+				Midvale  UT  84047
+				US
+
+00-02-FF   (hex)		Handan BroadInfoCom
+0002FF     (base 16)		Handan BroadInfoCom
+				5th Fl. Shinsung Plaza #697-11
+				Seoul    
+				KR
+
+00-02-F4   (hex)		PCTEL, Inc.
+0002F4     (base 16)		PCTEL, Inc.
+				1331 California Circle
+				Milpitas  CA  95035
+				US
+
+00-02-E9   (hex)		CS Systemes De Securite - C3S
+0002E9     (base 16)		CS Systemes De Securite - C3S
+				23, rue de Schwobsheim
+				    
+				FR
+
+00-02-E5   (hex)		Timeware Ltd.
+0002E5     (base 16)		Timeware Ltd.
+				Brookfield Grange
+				Lancs    042 GLB
+				GB
+
+00-02-E0   (hex)		ETAS GmbH
+0002E0     (base 16)		ETAS GmbH
+				Borsigstraße 10
+				    
+				DE
+
+00-02-CE   (hex)		FoxJet, Inc.
+0002CE     (base 16)		FoxJet, Inc.
+				2016 E. Randal Mill Rd. #409
+				Arlington  TX  76011-8223
+				US
+
+00-02-C3   (hex)		Arelnet Ltd.
+0002C3     (base 16)		Arelnet Ltd.
+				3 Hayarden St.
+				    
+				IL
+
+00-03-16   (hex)		Nobell Communications, Inc.
+000316     (base 16)		Nobell Communications, Inc.
+				3410 Far West Blvd., Suite 240
+				Austin  TX  78731
+				US
+
+00-03-29   (hex)		F3, Inc.
+000329     (base 16)		F3, Inc.
+				2F, No. 7, Industry E. Rd. 9,
+				Hsinchu    
+				TW
+
+00-03-21   (hex)		Reco Research Co., Ltd.
+000321     (base 16)		Reco Research Co., Ltd.
+				No. 47-1, Sec. 2,
+				    
+				TW
+
+00-02-F5   (hex)		VIVE Synergies, Inc.
+0002F5     (base 16)		VIVE Synergies, Inc.
+				30 West Beaver Creek Road, Unit 101
+				    L4B 3K1
+				CA
+
+00-02-D5   (hex)		ACR
+0002D5     (base 16)		ACR
+				Cardoulines B2
+				    
+				FR
+
+00-02-AB   (hex)		CTC Union Technologies Co., Ltd.
+0002AB     (base 16)		CTC Union Technologies Co., Ltd.
+				8F No. 60 Zhouzi St.
+				Neihu  Taipei  114
+				TW
+
+00-02-A4   (hex)		AddPac Technology Co., Ltd.
+0002A4     (base 16)		AddPac Technology Co., Ltd.
+				3F Jeoung Am Bldg., 769-12
+				Seoul  Seoul  Korea
+				KR
+
+00-02-A0   (hex)		Flatstack Ltd.
+0002A0     (base 16)		Flatstack Ltd.
+				1112 Budapest
+				    
+				HU
+
+00-02-B2   (hex)		Cablevision
+0002B2     (base 16)		Cablevision
+				420 Crossways Park Drive West
+				Woodbury  NY  11787
+				US
+
+00-02-B7   (hex)		Watanabe Electric Industry Co., Ltd.
+0002B7     (base 16)		Watanabe Electric Industry Co., Ltd.
+				6-16-19, Jingumae, Shibuya-ku
+				    
+				JP
+
+00-02-AF   (hex)		TeleCruz Technology, Inc.
+0002AF     (base 16)		TeleCruz Technology, Inc.
+				2391 Qume Dr.
+				San Jose  CA  95131
+				US
+
+00-02-A8   (hex)		Air Link Technology
+0002A8     (base 16)		Air Link Technology
+				Bethel Bldg. 303
+				Seoul  KOREA  137-130
+				KR
+
+00-02-6A   (hex)		Cocess Telecom Co., Ltd.
+00026A     (base 16)		Cocess Telecom Co., Ltd.
+				Research & Development Dept.
+				Seoul  Seoul  KOREA
+				KR
+
+00-02-6C   (hex)		Philips CFT
+00026C     (base 16)		Philips CFT
+				Building SAN 6
+				  The  
+				NL
+
+00-02-62   (hex)		Soyo Group Soyo Com Tech Co., Ltd
+000262     (base 16)		Soyo Group Soyo Com Tech Co., Ltd
+				5H. No. 21 Wu-gong 5 Rd,
+				Taipei Hsien  Taiwan  R.O.C.
+				TW
+
+00-02-65   (hex)		Virditech Co. Ltd.
+000265     (base 16)		Virditech Co. Ltd.
+				Hyundai Topics Blgd., 11th Fl
+				Seoul  Seoul  KOREA
+				KR
+
+00-02-5B   (hex)		Cambridge Silicon Radio
+00025B     (base 16)		Cambridge Silicon Radio
+				Unit 400, Science Park,
+				  United  Kingdom
+				GB
+
+00-02-56   (hex)		Alpha Processor, Inc.
+000256     (base 16)		Alpha Processor, Inc.
+				130 C Baker Ave. Ext.
+				Concord  MA  01742
+				US
+
+00-02-59   (hex)		Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group
+000259     (base 16)		Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group
+				8F, #99, Huaihai Rd, East,
+				  CHINA  200021
+				CN
+
+00-02-94   (hex)		Tokyo Sokushin Co., Ltd.
+000294     (base 16)		Tokyo Sokushin Co., Ltd.
+				5-16-12 Nishi-Nippori
+				    
+				JP
+
+00-02-96   (hex)		Lectron Co,. Ltd.
+000296     (base 16)		Lectron Co,. Ltd.
+				9F, No.171, Sec. 2, Tatung Rd.,
+				Taiwan  Taiwan  R.O.C.
+				TW
+
+00-02-8E   (hex)		Rapid 5 Networks, Inc.
+00028E     (base 16)		Rapid 5 Networks, Inc.
+				180 Baytech Drive
+				San Jose  CA  95134-2302
+				US
+
+00-02-4F   (hex)		IPM Datacom S.R.L.
+00024F     (base 16)		IPM Datacom S.R.L.
+				Via Roma, 231
+				  Naples  
+				IT
+
+00-02-8A   (hex)		Ambit Microsystems Corporation
+00028A     (base 16)		Ambit Microsystems Corporation
+				5F-1, 5 Hsin-An Road Hsinchu,
+				    TAIWAN
+				TW
+
+00-01-FA   (hex)		HOROSCAS
+0001FA     (base 16)		HOROSCAS
+				26, LOUIS BLANC
+				    
+				FR
+
+00-02-82   (hex)		ViaClix, Inc.
+000282     (base 16)		ViaClix, Inc.
+				1400 Dell Ave., Suite B
+				Campbell  CA  95008
+				US
+
+00-02-85   (hex)		Riverstone Networks
+000285     (base 16)		Riverstone Networks
+				5200 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+00-02-79   (hex)		Control Applications, Ltd.
+000279     (base 16)		Control Applications, Ltd.
+				3 Tevuot Haarets St.
+				    
+				IL
+
+00-02-51   (hex)		Soma Networks, Inc.
+000251     (base 16)		Soma Networks, Inc.
+				650 Townsend St.
+				San Francisco  CA  94103
+				US
+
+00-01-F5   (hex)		ERIM S.A.
+0001F5     (base 16)		ERIM S.A.
+				11 Av Republique
+				    
+				FR
+
+00-01-FF   (hex)		Data Direct Networks, Inc.
+0001FF     (base 16)		Data Direct Networks, Inc.
+				9320 Lurline Avenue
+				Chatsworth  CA  91311
+				US
+
+00-01-FC   (hex)		Keyence Corporation
+0001FC     (base 16)		Keyence Corporation
+				1-3-14, Higashi-Nakajima,
+				    
+				JP
+
+00-01-FD   (hex)		Digital Voice Systems, Inc.
+0001FD     (base 16)		Digital Voice Systems, Inc.
+				234 Littleton Road
+				Westford  MA  01886
+				US
+
+00-02-10   (hex)		Fenecom
+000210     (base 16)		Fenecom
+				7/F Kon-kuk University Alumni
+				Seoul  Seoul  Korea
+				KR
+
+00-02-0B   (hex)		Native Networks, Inc.
+00020B     (base 16)		Native Networks, Inc.
+				P.O. Box 7165
+				    
+				IL
+
+00-02-18   (hex)		Advanced Scientific Corp
+000218     (base 16)		Advanced Scientific Corp
+				1 Fl., No. 26, Industry East 9th Road
+				    TAIWAN
+				TW
+
+00-01-EE   (hex)		Comtrol Europe, Ltd.
+0001EE     (base 16)		Comtrol Europe, Ltd.
+				The Courtyard Studio
+				    U.K.
+				GB
+
+00-01-F0   (hex)		Tridium, Inc.
+0001F0     (base 16)		Tridium, Inc.
+				3951 Westerre Parkway
+				Richmond  VA  23233
+				US
+
+00-01-F1   (hex)		Innovative Concepts, Inc.
+0001F1     (base 16)		Innovative Concepts, Inc.
+				8200 Greensboro Drive
+				McLean  VA  22102
+				US
+
+00-01-E2   (hex)		Ando Electric Corporation
+0001E2     (base 16)		Ando Electric Corporation
+				19-7, Kamata 4-Chrome, Ota-ku
+				    
+				JP
+
+00-02-2F   (hex)		P-Cube, Ltd.
+00022F     (base 16)		P-Cube, Ltd.
+				P.O. Box 12331
+				    
+				IL
+
+00-02-27   (hex)		ESD Electronic System Design GmbH
+000227     (base 16)		ESD Electronic System Design GmbH
+				Vahrenwalder Str. 207
+				30 165  Hannover  
+				DE
+
+00-02-1D   (hex)		Data General Communication Ltd.
+00021D     (base 16)		Data General Communication Ltd.
+				Rm. 18C, Bldg. C, CEIEC Tower
+				    
+				CN
+
+00-02-19   (hex)		Paralon Technologies
+000219     (base 16)		Paralon Technologies
+				700 Fifth Ave, Suite 6101
+				Seattle  WA  98104
+				US
+
+00-02-03   (hex)		Woonsang Telecom, Inc.
+000203     (base 16)		Woonsang Telecom, Inc.
+				104-9, Munji-Dong, Yusong-Gu
+				    KOREA
+				KR
+
+00-01-D3   (hex)		PAXCOMM, Inc.
+0001D3     (base 16)		PAXCOMM, Inc.
+				7th F The Corp. Center
+				    KOREA
+				KR
+
+00-01-E1   (hex)		Kinpo Electronics, Inc.
+0001E1     (base 16)		Kinpo Electronics, Inc.
+				No.147, Sec. 3, Beishen Rd
+				Shenkeng Dist.  New Taipei City  222
+				TW
+
+00-02-2C   (hex)		ABB Bomem, Inc.
+00022C     (base 16)		ABB Bomem, Inc.
+				585, boul. Charest Est
+				Canada  G1K  9H4
+				CA
+
+00-02-3C   (hex)		Creative Technology, Ltd.
+00023C     (base 16)		Creative Technology, Ltd.
+				31 International Business Park
+				Republic  of  
+				SG
+
+00-30-6C   (hex)		Hitex Holding GmbH
+00306C     (base 16)		Hitex Holding GmbH
+				Greschbachstraße 12
+				76229 Karlsruhe    
+				DE
+
+00-30-8B   (hex)		Brix Networks
+00308B     (base 16)		Brix Networks
+				300 Concord Road
+				Billerica  MA  01821
+				US
+
+00-01-77   (hex)		EDSL
+000177     (base 16)		EDSL
+				Habarzel 1 st
+				  ISRAEL  69710
+				IL
+
+00-01-4D   (hex)		Shin Kin Enterprises Co., Ltd
+00014D     (base 16)		Shin Kin Enterprises Co., Ltd
+				7, FU Hsing St. Tue Cheng Ind.
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-01-DA   (hex)		WINCOMM Corporation
+0001DA     (base 16)		WINCOMM Corporation
+				2F, No. 3, Prosperity Road 1,
+				  Hsinchu  Taiwan
+				TW
+
+00-01-D2   (hex)		inXtron, Inc. 
+0001D2     (base 16)		inXtron, Inc. 
+				8F, No.52, MinQuan Road, Xindian Dist.
+				New Taipei City    23141
+				TW
+
+00-01-C6   (hex)		Quarry Technologies
+0001C6     (base 16)		Quarry Technologies
+				8 New England Executive Park
+				Burlington  MA  01803
+				US
+
+00-01-6E   (hex)		Conklin Corporation
+00016E     (base 16)		Conklin Corporation
+				6141 Crooked Creek Road
+				Norcross  GA  30092-3193
+				US
+
+00-01-74   (hex)		CyberOptics Corporation
+000174     (base 16)		CyberOptics Corporation
+				5900 Golden Hills Drive
+				Golden Valley  MN  55416
+				US
+
+00-01-5E   (hex)		BEST TECHNOLOGY CO., LTD.
+00015E     (base 16)		BEST TECHNOLOGY CO., LTD.
+				7F, Haesung B/D
+				    KOREA
+				KR
+
+00-01-61   (hex)		Meta Machine Technology
+000161     (base 16)		Meta Machine Technology
+				400 Silver Cedar Court - ste. #220
+				Chapel Hill  NC  27514
+				US
+
+00-01-A1   (hex)		Mag-Tek, Inc.
+0001A1     (base 16)		Mag-Tek, Inc.
+				1710 Apollo Court
+				Seal Beach  CA  90740
+				US
+
+00-01-86   (hex)		Uwe Disch
+000186     (base 16)		Uwe Disch
+				Eichenhainstraße 14
+				    
+				DE
+
+00-01-A6   (hex)		Scientific-Atlanta Arcodan A/S
+0001A6     (base 16)		Scientific-Atlanta Arcodan A/S
+				Avgustenborg Landevej 7
+				    
+				DK
+
+00-01-72   (hex)		TechnoLand Co., LTD.
+000172     (base 16)		TechnoLand Co., LTD.
+				3-17-11 Akebono-cho
+				    
+				JP
+
+00-01-A0   (hex)		Infinilink Corporation
+0001A0     (base 16)		Infinilink Corporation
+				1740 E. Garry Ave. - Ste. #206
+				Santa Ana  CA  92705
+				US
+
+00-01-96   (hex)		Cisco Systems, Inc
+000196     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-01-99   (hex)		HeiSei Electronics
+000199     (base 16)		HeiSei Electronics
+				5/7 Alley 8, Lane 45
+				    TAIWAN
+				TW
+
+00-01-8B   (hex)		NetLinks Co., Ltd.
+00018B     (base 16)		NetLinks Co., Ltd.
+				3F Dscom Bldg., 238-3
+				    KOREA
+				KR
+
+00-01-8D   (hex)		AudeSi Technologies
+00018D     (base 16)		AudeSi Technologies
+				Suite 180, 6815
+				  AB  
+				CA
+
+00-01-9D   (hex)		E-Control Systems, Inc.
+00019D     (base 16)		E-Control Systems, Inc.
+				9420 Lurline Ave., Unite
+				Chatsworth  CA  91311
+				US
+
+00-01-CE   (hex)		Custom Micro Products, Ltd.
+0001CE     (base 16)		Custom Micro Products, Ltd.
+				450 Blandford Road
+				  UNITED  KINGDOM
+				GB
+
+00-01-BB   (hex)		Frequentis
+0001BB     (base 16)		Frequentis
+				SPITTELBREITENGASSE 34
+				    
+				AT
+
+00-01-BC   (hex)		Brains Corporation
+0001BC     (base 16)		Brains Corporation
+				2-27-8-4Fl TAMAGAWA
+				    
+				JP
+
+00-01-C0   (hex)		CompuLab, Ltd.
+0001C0     (base 16)		CompuLab, Ltd.
+				P.O. Box 66
+				    
+				IL
+
+00-01-7C   (hex)		AG-E GmbH
+00017C     (base 16)		AG-E GmbH
+				Dennewartstraße 27
+				    
+				DE
+
+00-01-08   (hex)		AVLAB Technology, Inc.
+000108     (base 16)		AVLAB Technology, Inc.
+				3F-1, No. 134, Sec. 3
+				Hsin Tien, Taipei    
+				TW
+
+00-06-2B   (hex)		INTRASERVER TECHNOLOGY
+00062B     (base 16)		INTRASERVER TECHNOLOGY
+				SEVEN OCTOBER HILL RD.
+				HOLLISTON  MA  01746
+				US
+
+00-01-00   (hex)		EQUIP'TRANS
+000100     (base 16)		EQUIP'TRANS
+				31 rue Paul Cezanne
+				LA ROCHETTE    77000
+				FR
+
+00-B0-9D   (hex)		Point Grey Research Inc.
+00B09D     (base 16)		Point Grey Research Inc.
+				305-1847 West Broadway
+				Vancouver  British Columbia V6J 1Y6  
+				CA
+
+00-01-10   (hex)		Gotham Networks
+000110     (base 16)		Gotham Networks
+				15 Discovery Way
+				Acton  MA  01720
+				US
+
+00-01-12   (hex)		Shark Multimedia Inc.
+000112     (base 16)		Shark Multimedia Inc.
+				48890 Milmont Drive  #101-D
+				Fremont  CA  94538
+				US
+
+00-01-16   (hex)		Netspect Technologies, Inc.
+000116     (base 16)		Netspect Technologies, Inc.
+				3945 Freedom Circle - Ste. #360
+				Santa Clara  CA  95054
+				US
+
+00-B0-6D   (hex)		Jones Futurex Inc.
+00B06D     (base 16)		Jones Futurex Inc.
+				3715 Atherton Road
+				Rocklin  CA  95765
+				US
+
+00-B0-94   (hex)		Alaris, Inc.
+00B094     (base 16)		Alaris, Inc.
+				47338 Fremont Boulevard
+				Fremont  CA  94538
+				US
+
+00-30-F0   (hex)		Uniform Industrial Corp.
+0030F0     (base 16)		Uniform Industrial Corp.
+				18F, 171, Shung Teh Road
+				Taipei    
+				TW
+
+00-01-3B   (hex)		BNA SYSTEMS
+00013B     (base 16)		BNA SYSTEMS
+				1637 S. Main Street
+				Milpitas  CA  95035
+				US
+
+00-01-34   (hex)		Selectron Systems AG
+000134     (base 16)		Selectron Systems AG
+				Bernstreasse 70
+				    
+				CH
+
+00-01-39   (hex)		Point Multimedia Systems
+000139     (base 16)		Point Multimedia Systems
+				4Ra 507, Shihwa Industrial Complex
+				  Korea  425-110
+				KR
+
+00-01-3E   (hex)		Ascom Tateco AB
+00013E     (base 16)		Ascom Tateco AB
+				Box 8783
+				    
+				SE
+
+00-01-2E   (hex)		PC Partner Ltd.
+00012E     (base 16)		PC Partner Ltd.
+				Rm 1901-1908, 19/F, Shatin Galleria
+				    
+				CN
+
+00-01-32   (hex)		Dranetz - BMI
+000132     (base 16)		Dranetz - BMI
+				1000 New Durham Road
+				Edison  NJ  08818
+				US
+
+00-01-13   (hex)		OLYMPUS CORPORATION
+000113     (base 16)		OLYMPUS CORPORATION
+				2-3 Kuboyama-cho, Hachioji-shi
+				Tokyo 192-8512    j
+				JP
+
+00-01-1E   (hex)		Precidia Technologies, Inc.
+00011E     (base 16)		Precidia Technologies, Inc.
+				10A Hearst Way
+				Kanata  Ontario K2M-2C4  
+				CA
+
+00-01-55   (hex)		Promise Technology, Inc.
+000155     (base 16)		Promise Technology, Inc.
+				4F, 1, Prosperity 1st Road
+				    TAIWAN
+				TW
+
+00-30-94   (hex)		Cisco Systems, Inc
+003094     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-8A   (hex)		NICOTRA SISTEMI S.P.A
+00308A     (base 16)		NICOTRA SISTEMI S.P.A
+				41 Via Primo Maggio
+				  Baranzate (MI)  20021
+				IT
+
+00-30-72   (hex)		Intellibyte Inc.
+003072     (base 16)		Intellibyte Inc.
+				Canada Trust Tower - BCE Place
+				Toronto  Ontario  M5J 2S1
+				CA
+
+00-30-40   (hex)		Cisco Systems, Inc
+003040     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-32   (hex)		MagicRam, Inc.
+003032     (base 16)		MagicRam, Inc.
+				1850 Beverly Blvd.
+				Los Angeles  CA  90057
+				US
+
+00-30-EA   (hex)		TeraForce Technology Corporation
+0030EA     (base 16)		TeraForce Technology Corporation
+				1100 EXECUTIVE DRIVE
+				RICHARDSON  TX  75081
+				US
+
+00-30-9B   (hex)		Smartware
+00309B     (base 16)		Smartware
+				49 AV Aristide
+				92160 Antony    
+				FR
+
+00-30-45   (hex)		Village Networks, Inc. (VNI)
+003045     (base 16)		Village Networks, Inc. (VNI)
+				100 Village Court - Ste. #301
+				Hazlet  NJ  07730
+				US
+
+00-30-E5   (hex)		Amper Datos S.A.
+0030E5     (base 16)		Amper Datos S.A.
+				C/Marconi n*3  (PTM)
+				28760 Madrid    
+				ES
+
+00-30-06   (hex)		SUPERPOWER COMPUTER
+003006     (base 16)		SUPERPOWER COMPUTER
+				ELECTRONICS CO., LTD.
+				Taipei 248    
+				TW
+
+00-30-38   (hex)		XCP, INC.
+003038     (base 16)		XCP, INC.
+				40 ELM STREET
+				DRYDEN  NY  13053
+				US
+
+00-30-79   (hex)		CQOS, INC.
+003079     (base 16)		CQOS, INC.
+				25 MAUCHLY  - STE. #329
+				IRVINE  CA  92618
+				US
+
+00-30-0C   (hex)		CONGRUENCY, LTD.
+00300C     (base 16)		CONGRUENCY, LTD.
+				23 HASIVIM STREET
+				PETAH-TIKVA 49170    
+				IL
+
+00-30-4C   (hex)		APPIAN COMMUNICATIONS, INC.
+00304C     (base 16)		APPIAN COMMUNICATIONS, INC.
+				80 CENTRAL STREET
+				BOXBOROUGH  MA  01719
+				US
+
+00-30-E8   (hex)		ENSIM CORP.
+0030E8     (base 16)		ENSIM CORP.
+				1215 Terra Bella Ave.
+				Mountainview  CA  94043
+				US
+
+00-30-C9   (hex)		LuxN, N
+0030C9     (base 16)		LuxN, N
+				570 Maude Court
+				Sunnyvale  CA  94086
+				US
+
+00-30-28   (hex)		FASE Saldatura srl
+003028     (base 16)		FASE Saldatura srl
+				V.R. Bernardi 5
+				TORINO    
+				IT
+
+00-30-69   (hex)		IMPACCT TECHNOLOGY CORP.
+003069     (base 16)		IMPACCT TECHNOLOGY CORP.
+				2F, NO. 12, R&D RD. II
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-30-C3   (hex)		FLUECKIGER ELEKTRONIK AG
+0030C3     (base 16)		FLUECKIGER ELEKTRONIK AG
+				KIRCHBARGSTRASSE 201
+				    
+				CH
+
+00-30-5A   (hex)		TELGEN CORPORATION
+00305A     (base 16)		TELGEN CORPORATION
+				3101 SOVEREIGN DR. - STE.
+				LANSING  MI  48911
+				US
+
+00-30-10   (hex)		VISIONETICS INTERNATIONAL
+003010     (base 16)		VISIONETICS INTERNATIONAL
+				3F, NO. 3, PROSPERITY ROAD 1
+				  TAIWAN  R.O.C.
+				TW
+
+00-30-D9   (hex)		DATACORE SOFTWARE CORP.
+0030D9     (base 16)		DATACORE SOFTWARE CORP.
+				CORPORATE PARK
+				FORT LAUDERDALE  FL  33309
+				US
+
+00-30-26   (hex)		HeiTel Digital Video GmbH
+003026     (base 16)		HeiTel Digital Video GmbH
+				Stuthagen 25
+				    
+				DE
+
+00-30-77   (hex)		ONPREM NETWORKS
+003077     (base 16)		ONPREM NETWORKS
+				42501 ALBRAE STREET
+				FREMONT  CA  94538
+				US
+
+00-30-47   (hex)		NISSEI ELECTRIC CO., LTD.
+003047     (base 16)		NISSEI ELECTRIC CO., LTD.
+				32 MIYAWAKE, SHIMONOISHIKI-CHO
+				    
+				JP
+
+00-30-D4   (hex)		AAE Systems, Inc.
+0030D4     (base 16)		AAE Systems, Inc.
+				642 North Pastoria Avenue
+				Sunnyvale  CA  94085
+				US
+
+00-D0-D7   (hex)		B2C2, INC.
+00D0D7     (base 16)		B2C2, INC.
+				2020 CHALLENGER DRIVE-
+				ALAMEDA  CA  94501
+				US
+
+00-D0-73   (hex)		ACN ADVANCED COMMUNICATIONS
+00D073     (base 16)		ACN ADVANCED COMMUNICATIONS
+				NETWORKS SA
+				    
+				CH
+
+00-D0-57   (hex)		ULTRAK, INC.
+00D057     (base 16)		ULTRAK, INC.
+				1301 WATERS RIDGE DRIVE
+				LEWISVILLE  TX  75057
+				US
+
+00-30-AB   (hex)		DELTA NETWORKS, INC.
+0030AB     (base 16)		DELTA NETWORKS, INC.
+				8, KON JAN WEST ROAD
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-30-49   (hex)		BRYANT TECHNOLOGY, LTD.
+003049     (base 16)		BRYANT TECHNOLOGY, LTD.
+				P.O. BOX 69557
+				  SOUTH  AFRICA
+				ZA
+
+00-30-6D   (hex)		LUCENT TECHNOLOGIES
+00306D     (base 16)		LUCENT TECHNOLOGIES
+				300 BAKER AVENUE - STE. #100
+				CONCORD  MA  01742-2168
+				US
+
+00-30-17   (hex)		BlueArc UK Ltd
+003017     (base 16)		BlueArc UK Ltd
+				Queensgate House
+				Bracknell    RG12 1RB
+				GB
+
+00-30-1C   (hex)		ALTVATER AIRDATA SYSTEMS
+00301C     (base 16)		ALTVATER AIRDATA SYSTEMS
+				GMBH & CO. KG
+				    
+				DE
+
+00-30-80   (hex)		Cisco Systems, Inc
+003080     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-F7   (hex)		RAMIX INC.
+0030F7     (base 16)		RAMIX INC.
+				1672 DONLON STREET
+				VENTURA  CA  93003
+				US
+
+00-30-D0   (hex)		Tellabs
+0030D0     (base 16)		Tellabs
+				1750 Founder's Parkway
+				Alpharetta  GA  30004
+				US
+
+00-30-14   (hex)		DIVIO, INC.
+003014     (base 16)		DIVIO, INC.
+				997 E. ARQUES AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-30-81   (hex)		ALTOS C&C
+003081     (base 16)		ALTOS C&C
+				150-010 RM. 1012, 44-1
+				    KOREA
+				KR
+
+00-D0-F0   (hex)		CONVISION TECHNOLOGY GMBH
+00D0F0     (base 16)		CONVISION TECHNOLOGY GMBH
+				REBENRING 33
+				    
+				DE
+
+00-D0-10   (hex)		CONVERGENT NETWORKS, INC.
+00D010     (base 16)		CONVERGENT NETWORKS, INC.
+				2 HIGHWOOD DRIVE
+				TEWKSBURY  MA  01876
+				US
+
+00-D0-4B   (hex)		LA CIE GROUP S.A.
+00D04B     (base 16)		LA CIE GROUP S.A.
+				17 RUE AMPERE
+				    
+				FR
+
+00-D0-0E   (hex)		PLURIS, INC.
+00D00E     (base 16)		PLURIS, INC.
+				10455 BANDLEY DRIVE
+				CUPERTINO  CA  95014
+				US
+
+00-D0-12   (hex)		GATEWORKS CORP.
+00D012     (base 16)		GATEWORKS CORP.
+				7631 MORRO ROAD
+				ATASCADERO  CA  93422
+				US
+
+00-D0-4D   (hex)		DIV OF RESEARCH & STATISTICS
+00D04D     (base 16)		DIV OF RESEARCH & STATISTICS
+				BOG OF THE FEDERAL RESERVE SYS
+				WASHINGTON  DC  20551
+				US
+
+00-D0-2E   (hex)		COMMUNICATION AUTOMATION CORP.
+00D02E     (base 16)		COMMUNICATION AUTOMATION CORP.
+				1180 MCDERMOTT DRIVE
+				WEST CHESTER  PA  19380
+				US
+
+00-D0-C5   (hex)		COMPUTATIONAL SYSTEMS, INC.
+00D0C5     (base 16)		COMPUTATIONAL SYSTEMS, INC.
+				835 INNOVATION DRIVE
+				KNOXVILLE  TN  37932
+				US
+
+00-D0-46   (hex)		DOLBY LABORATORIES, INC.
+00D046     (base 16)		DOLBY LABORATORIES, INC.
+				100 Potrero Avenue
+				San Francisco  CA  94103-4938
+				US
+
+00-D0-DE   (hex)		PHILIPS MULTIMEDIA NETWORK
+00D0DE     (base 16)		PHILIPS MULTIMEDIA NETWORK
+				SYSTEMS GMBH
+				    
+				DE
+
+00-D0-0C   (hex)		SNIJDER MICRO SYSTEMS
+00D00C     (base 16)		SNIJDER MICRO SYSTEMS
+				P.O. BOX 300
+				  THE  
+				NL
+
+00-D0-17   (hex)		SYNTECH INFORMATION CO., LTD.
+00D017     (base 16)		SYNTECH INFORMATION CO., LTD.
+				8F, 210, TA-TUNG RD., SEC. 3
+				TAIWAN  TAIWAN  ROC
+				TW
+
+00-D0-36   (hex)		TECHNOLOGY ATLANTA CORP.
+00D036     (base 16)		TECHNOLOGY ATLANTA CORP.
+				141 W. WIEUCA RD. N.E.
+				ATLANTA  GA  30342
+				US
+
+00-D0-E3   (hex)		ELE-CHEM ENGINEERING CO., LTD.
+00D0E3     (base 16)		ELE-CHEM ENGINEERING CO., LTD.
+				WINDSTONE OFFICE
+				SEOUL 137-130  SEOUL 137-130  KOREA
+				KR
+
+00-D0-B6   (hex)		CRESCENT NETWORKS, INC.
+00D0B6     (base 16)		CRESCENT NETWORKS, INC.
+				201 RIVERNECK ROAD
+				CHELMSFORD  MA  01842
+				US
+
+00-D0-C4   (hex)		TERATECH CORPORATION
+00D0C4     (base 16)		TERATECH CORPORATION
+				223 MIDDLESEX TRPK.
+				BURLINGTON  MA  01803-3308
+				US
+
+00-D0-61   (hex)		TREMON ENTERPRISES CO., LTD.
+00D061     (base 16)		TREMON ENTERPRISES CO., LTD.
+				15F, NO. 116, SEC. 1
+				TAIWAN  TAIWAN  ROC
+				TW
+
+00-D0-E5   (hex)		SOLIDUM SYSTEMS CORP.
+00D0E5     (base 16)		SOLIDUM SYSTEMS CORP.
+				940 BELFAST ROAD 1S.217
+				    
+				CA
+
+00-D0-45   (hex)		KVASER AB
+00D045     (base 16)		KVASER AB
+				BOX 4076
+				    
+				SE
+
+00-D0-04   (hex)		PENTACOM LTD.
+00D004     (base 16)		PENTACOM LTD.
+				8 HASADNAOT STREET
+				    
+				IL
+
+00-D0-05   (hex)		ZHS ZEITMANAGEMENTSYSTEME
+00D005     (base 16)		ZHS ZEITMANAGEMENTSYSTEME
+				HARD-UND SOFTWARE GMBH
+				    
+				DE
+
+00-D0-D3   (hex)		Cisco Systems, Inc
+00D0D3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-26   (hex)		HIRSCHMANN AUSTRIA GMBH
+00D026     (base 16)		HIRSCHMANN AUSTRIA GMBH
+				OBERER PASPELSWEG 6 - 8
+				    
+				AT
+
+00-D0-DA   (hex)		TAICOM DATA SYSTEMS CO., LTD.
+00D0DA     (base 16)		TAICOM DATA SYSTEMS CO., LTD.
+				45, WU-KUNG 5 ROAD
+				    TAIWAN
+				TW
+
+00-D0-3C   (hex)		Vieo, Inc.
+00D03C     (base 16)		Vieo, Inc.
+				12416 Hymeadow Drive,
+				Austin  TX  78750
+				US
+
+00-D0-B4   (hex)		KATSUJIMA CO., LTD.
+00D0B4     (base 16)		KATSUJIMA CO., LTD.
+				1-6-1, SHIRATORI
+				    
+				JP
+
+00-D0-86   (hex)		FOVEON, INC.
+00D086     (base 16)		FOVEON, INC.
+				2820 San Tomas Expressway
+				Santa Clara  CA  95051
+				US
+
+00-D0-A8   (hex)		NETWORK ENGINES, INC.
+00D0A8     (base 16)		NETWORK ENGINES, INC.
+				61 PLEASANT STREET
+				RANDOLPH  MA  02368
+				US
+
+00-D0-AB   (hex)		DELTAKABEL TELECOM CV
+00D0AB     (base 16)		DELTAKABEL TELECOM CV
+				HANZEWEG 14
+				  THE  
+				NL
+
+00-D0-E8   (hex)		MAC SYSTEM CO., LTD.
+00D0E8     (base 16)		MAC SYSTEM CO., LTD.
+				R&D INSTITUTE
+				KYUNGKI-DO  KOREA,  430-017
+				KR
+
+00-D0-6B   (hex)		SR TELECOM INC.
+00D06B     (base 16)		SR TELECOM INC.
+				8150 Trans Canada Highway
+				Quebec    H4S 1M5
+				CA
+
+00-D0-DC   (hex)		MODULAR MINING SYSTEMS, INC.
+00D0DC     (base 16)		MODULAR MINING SYSTEMS, INC.
+				3289 E. HEMISPHERE LOOP
+				TUCSON  AZ  85706
+				US
+
+00-D0-1E   (hex)		PINGTEL CORP.
+00D01E     (base 16)		PINGTEL CORP.
+				773 WINTER STREET
+				N. ANDOVER  MA  01845
+				US
+
+00-D0-CA   (hex)		Intrinsyc Software International Inc.
+00D0CA     (base 16)		Intrinsyc Software International Inc.
+				885 Dunsmuir Street, Suite 380
+				Vancouver  B.C.  V6C 1N5
+				CA
+
+00-D0-65   (hex)		TOKO ELECTRIC
+00D065     (base 16)		TOKO ELECTRIC
+				4008 KUROHAMA, HASUDA-SHI
+				    
+				JP
+
+00-D0-9A   (hex)		FILANET CORPORATION
+00D09A     (base 16)		FILANET CORPORATION
+				931 Benecia Avenue
+				Sunnyvale  CA  94085
+				US
+
+00-D0-AE   (hex)		ORESIS COMMUNICATIONS, INC.
+00D0AE     (base 16)		ORESIS COMMUNICATIONS, INC.
+				14670 NW GREENBRIER PKWY
+				BEAVERTON  OR  97006
+				US
+
+00-D0-F2   (hex)		MONTEREY NETWORKS
+00D0F2     (base 16)		MONTEREY NETWORKS
+				1909 N. GLENVILLE DRIVE
+				RICHARDSON  TX  75081
+				US
+
+00-D0-14   (hex)		ROOT, INC.
+00D014     (base 16)		ROOT, INC.
+				8F TOC2 Bldg, 7-21-11 Nishi-Gotanda
+				  Tokyo  141-0031
+				JP
+
+00-D0-23   (hex)		INFORTREND TECHNOLOGY, INC.
+00D023     (base 16)		INFORTREND TECHNOLOGY, INC.
+				10F, NO. 33 SAN-MIN RD.
+				    TAIWAN
+				TW
+
+00-D0-A2   (hex)		INTEGRATED DEVICE
+00D0A2     (base 16)		INTEGRATED DEVICE
+				TECHNOLOGY, INC.
+				SANTA CLARA  CA  95054
+				US
+
+00-D0-34   (hex)		ORMEC SYSTEMS CORP.
+00D034     (base 16)		ORMEC SYSTEMS CORP.
+				19 LINDEN PARK
+				ROCHESTER  NY  14625
+				US
+
+00-D0-8A   (hex)		PHOTRON USA
+00D08A     (base 16)		PHOTRON USA
+				1101 S. WINCHESTER BLVD.
+				SAN JOSE  CA  95128
+				US
+
+00-D0-A7   (hex)		TOKYO SOKKI KENKYUJO CO., LTD.
+00D0A7     (base 16)		TOKYO SOKKI KENKYUJO CO., LTD.
+				8-2, MINAMI-OHI 6-CHOME
+				  JAPAN  140-8560
+				JP
+
+00-D0-1D   (hex)		FURUNO ELECTRIC CO., LTD.
+00D01D     (base 16)		FURUNO ELECTRIC CO., LTD.
+				NO. 9-52, ASHIHARA-CHO
+				  662-8580  
+				JP
+
+00-50-4C   (hex)		Galil Motion Control
+00504C     (base 16)		Galil Motion Control
+				270 Technology Way
+				Rocklin  CA  95765
+				US
+
+00-50-76   (hex)		IBM Corp
+005076     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-50-D4   (hex)		JOOHONG INFORMATION &
+0050D4     (base 16)		JOOHONG INFORMATION &
+				COMMUNICATIONS, LTD.
+				SEOUL  SEOUL  KOREA
+				KR
+
+00-50-A6   (hex)		OPTRONICS
+0050A6     (base 16)		OPTRONICS
+				175 CREMONA DRIVE
+				GOLETA  CA  93117
+				US
+
+00-50-A9   (hex)		MOLDAT WIRELESS TECHNOLGIES
+0050A9     (base 16)		MOLDAT WIRELESS TECHNOLGIES
+				3 SHIMON ISRAELI STREET
+				    
+				IL
+
+00-50-9B   (hex)		SWITCHCORE AB
+00509B     (base 16)		SWITCHCORE AB
+				POSITIONEN 153
+				    
+				SE
+
+00-50-7E   (hex)		NEWER TECHNOLOGY
+00507E     (base 16)		NEWER TECHNOLOGY
+				4848 WEST IRVING ST.
+				WICHITA  KS  67209-2621
+				US
+
+00-50-CE   (hex)		LG INTERNATIONAL CORP.
+0050CE     (base 16)		LG INTERNATIONAL CORP.
+				LG TWIN TOWERS
+				SEOUL,  150-606    
+				KR
+
+00-50-F7   (hex)		VENTURE MANUFACTURING (SINGAPORE) LTD.
+0050F7     (base 16)		VENTURE MANUFACTURING (SINGAPORE) LTD.
+				
+				#05-01 Techplace II    569873
+				SG
+
+00-50-19   (hex)		SPRING TIDE NETWORKS, INC.
+005019     (base 16)		SPRING TIDE NETWORKS, INC.
+				85 SWANSON ROAD
+				BOXBOROUGH  MA  01719
+				US
+
+00-50-FD   (hex)		VISIONCOMM CO., LTD.
+0050FD     (base 16)		VISIONCOMM CO., LTD.
+				4, 5F, DAEWON B/D
+				YONGSAN-GU, SEOUL    
+				KR
+
+00-50-BF   (hex)		Metalligence Technology Corp.
+0050BF     (base 16)		Metalligence Technology Corp.
+				NO.9, PARK AVENUE II
+				HSIN-CHU    
+				TW
+
+00-50-36   (hex)		NETCAM, LTD.
+005036     (base 16)		NETCAM, LTD.
+				6071 N. PASEO ZALDIVAR
+				TUCSON  AZ  85750
+				US
+
+00-50-DB   (hex)		CONTEMPORARY CONTROL
+0050DB     (base 16)		CONTEMPORARY CONTROL
+				SYSTEMS, INC.
+				DOWNERS GROVE  IL  60515
+				US
+
+00-50-7C   (hex)		VIDEOCON AG
+00507C     (base 16)		VIDEOCON AG
+				ALBERT-SCHWEITZER-STR. 64
+				    
+				DE
+
+00-50-47   (hex)		Private
+005047     (base 16)		Private
+
+00-D0-6C   (hex)		SHAREWAVE, INC.
+00D06C     (base 16)		SHAREWAVE, INC.
+				5175 HILLSDALE CIRCLE
+				EL DORADO HILLS  CA  95762
+				US
+
+00-50-A7   (hex)		Cisco Systems, Inc
+0050A7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-50-55   (hex)		DOMS A/S
+005055     (base 16)		DOMS A/S
+				FORMERVANGEN 28
+				    
+				DK
+
+00-50-72   (hex)		CORVIS CORPORATION
+005072     (base 16)		CORVIS CORPORATION
+				8320 GUILFORD ROAD
+				COLUMBIA  MD  21046
+				US
+
+00-D0-EE   (hex)		DICTAPHONE CORPORATION
+00D0EE     (base 16)		DICTAPHONE CORPORATION
+				3191 BROADBRIDGE AVE.
+				STRATFORD  CT  06614-2559
+				US
+
+00-50-1B   (hex)		ABL CANADA, INC.
+00501B     (base 16)		ABL CANADA, INC.
+				8550 COTE DE LIESSE
+				ST-LAURENT (QUEBEC) H4T 1H2    
+				CA
+
+00-90-57   (hex)		AANetcom, Inc.
+009057     (base 16)		AANetcom, Inc.
+				4949 LIBERTY LANE - STE. #200
+				ALLENTOWN  PA  18106-9015
+				US
+
+00-90-83   (hex)		TURBO COMMUNICATION, INC.
+009083     (base 16)		TURBO COMMUNICATION, INC.
+				4F-2, NO. 171, SUNG-TEH ROAD
+				TAIPEI    
+				TW
+
+00-90-3D   (hex)		BIOPAC SYSTEMS, INC.
+00903D     (base 16)		BIOPAC SYSTEMS, INC.
+				42 AERO CAMINO
+				SANTA BARBARA  CA  93117
+				US
+
+00-90-D7   (hex)		NetBoost Corp.
+0090D7     (base 16)		NetBoost Corp.
+				390 CAMBRIDGE AVENUE
+				PALO ALTO  CA  94306-1506
+				US
+
+00-50-83   (hex)		GILBARCO, INC.
+005083     (base 16)		GILBARCO, INC.
+				POB 22087
+				GREENSBORO  NC  27420
+				US
+
+00-50-DC   (hex)		TAS TELEFONBAU A. SCHWABE GMBH & CO. KG
+0050DC     (base 16)		TAS TELEFONBAU A. SCHWABE GMBH & CO. KG
+				
+				D-41238 MONCHENGLADBACH    
+				DE
+
+00-50-08   (hex)		TIVA MICROCOMPUTER CORP. (TMC)
+005008     (base 16)		TIVA MICROCOMPUTER CORP. (TMC)
+				48550 FREMONT BLVD.
+				FREMONT  CA  94538
+				US
+
+00-50-52   (hex)		TIARA NETWORKS, INC.
+005052     (base 16)		TIARA NETWORKS, INC.
+				113 FOORIER AVENUE
+				FREMONT  CA  94539
+				US
+
+00-50-27   (hex)		GENICOM CORPORATION
+005027     (base 16)		GENICOM CORPORATION
+				900 CLOPPER ROAD - STE. #110
+				GAITHERSBURG  MD  20878
+				US
+
+00-50-5A   (hex)		NETWORK ALCHEMY, INC.
+00505A     (base 16)		NETWORK ALCHEMY, INC.
+				1521.5 PACIFIC AVENUE
+				SANTA CRUZ  CA  95060
+				US
+
+00-50-39   (hex)		MARINER NETWORKS
+005039     (base 16)		MARINER NETWORKS
+				1585 S. MANCHESTER AVE.
+				ANAHEIM  CA  92802-2907
+				US
+
+00-50-64   (hex)		CAE ELECTRONICS
+005064     (base 16)		CAE ELECTRONICS
+				P.O. BOX 1800
+				ST. LAURENT, QUEBEC H4L 4X4    
+				CA
+
+00-50-B8   (hex)		INOVA COMPUTERS GMBH & CO. KG
+0050B8     (base 16)		INOVA COMPUTERS GMBH & CO. KG
+				SUDETENSTRASSE 5
+				87600 KAUFBEUREN    
+				DE
+
+00-50-5B   (hex)		KAWASAKI LSI U.S.A., INC.
+00505B     (base 16)		KAWASAKI LSI U.S.A., INC.
+				2570 NORTHFIRST STREET
+				SAN JOSE  CA  95131
+				US
+
+00-50-CC   (hex)		Seagate Cloud Systems Inc
+0050CC     (base 16)		Seagate Cloud Systems Inc
+				1351 S Sunset Street
+				Longmont  CO  80501
+				US
+
+00-50-16   (hex)		Molex Canada Ltd
+005016     (base 16)		Molex Canada Ltd
+				216 Bathurst Drive
+				Waterloo  Ontario  N2V 2L7
+				CA
+
+00-50-1F   (hex)		MRG SYSTEMS, LTD.
+00501F     (base 16)		MRG SYSTEMS, LTD.
+				WILLOW HOUSE, SLAD ROAD
+				GLOS.  GL5 1QG England    
+				GB
+
+00-50-43   (hex)		MARVELL SEMICONDUCTOR, INC.
+005043     (base 16)		MARVELL SEMICONDUCTOR, INC.
+				645 ALMANOR AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-50-95   (hex)		PERACOM NETWORKS
+005095     (base 16)		PERACOM NETWORKS
+				13000 WESTON PARKWAY
+				CARY  NC  27513
+				US
+
+00-50-FA   (hex)		OXTEL, LTD.
+0050FA     (base 16)		OXTEL, LTD.
+				THE MARKET PLACE
+				0X11 7LE England    
+				GB
+
+00-90-38   (hex)		FOUNTAIN TECHNOLOGIES, INC.
+009038     (base 16)		FOUNTAIN TECHNOLOGIES, INC.
+				50 RANDOLPH ROAD
+				SOMERSET  NJ  08873
+				US
+
+00-90-B0   (hex)		VADEM
+0090B0     (base 16)		VADEM
+				1960 ZANKER RD
+				SAN JOSE  CA  95112
+				US
+
+00-90-EF   (hex)		INTEGRIX, INC.
+0090EF     (base 16)		INTEGRIX, INC.
+				2001 CORPORATE CENTER DRIVE
+				NEWBURY PARK  CA  91320
+				US
+
+00-90-C5   (hex)		INTERNET MAGIC, INC.
+0090C5     (base 16)		INTERNET MAGIC, INC.
+				6450 LUSK BLVD.-STE. #E-201
+				SAN DIEGO  CA  92121
+				US
+
+00-90-8C   (hex)		ETREND ELECTRONICS, INC.
+00908C     (base 16)		ETREND ELECTRONICS, INC.
+				2F, 22 INDUSTRY E. 9TH ROAD
+				    
+				TW
+
+00-90-48   (hex)		ZEAL CORPORATION
+009048     (base 16)		ZEAL CORPORATION
+				301, HIRAIKE
+				NAGAKUTE-CHO, AICHI-PREF. 480-1155    
+				JP
+
+00-90-B9   (hex)		BERAN INSTRUMENTS LTD.
+0090B9     (base 16)		BERAN INSTRUMENTS LTD.
+				HATCHMOOR INDUSTRIAL ESTATE
+				N DEVON EX38 7HP    
+				GB
+
+00-90-C4   (hex)		JAVELIN SYSTEMS, INC.
+0090C4     (base 16)		JAVELIN SYSTEMS, INC.
+				1881 LANGLEY AVE.
+				IRVINE  CA  92614
+				US
+
+00-90-A5   (hex)		SPECTRA LOGIC
+0090A5     (base 16)		SPECTRA LOGIC
+				1700 N. 55TH STREET
+				BOULDER  CO  80301
+				US
+
+00-90-A3   (hex)		Corecess Inc.
+0090A3     (base 16)		Corecess Inc.
+				135-726, Keopyung B-Town 1F, 203, Nonhyu
+				Seoul    
+				KR
+
+00-90-82   (hex)		FORCE INSTITUTE
+009082     (base 16)		FORCE INSTITUTE
+				PARK ALLE 345
+				DK-2605 BROENDBY    
+				DK
+
+00-90-00   (hex)		DIAMOND MULTIMEDIA
+009000     (base 16)		DIAMOND MULTIMEDIA
+				312 SE STONEMILL DRIVE
+				VANCOUVER  WA  98684
+				US
+
+00-90-6E   (hex)		PRAXON, INC.
+00906E     (base 16)		PRAXON, INC.
+				1700 DELL AVENUE
+				CAMPBELL  CA  95008
+				US
+
+00-90-54   (hex)		INNOVATIVE SEMICONDUCTORS, INC
+009054     (base 16)		INNOVATIVE SEMICONDUCTORS, INC
+				2570 W. EL CAMINO REAL
+				MOUNTAIN VIEW  CA  94040
+				US
+
+00-90-61   (hex)		PACIFIC RESEARCH & ENGINEERING CORPORATION
+009061     (base 16)		PACIFIC RESEARCH & ENGINEERING CORPORATION
+				2070 LAS PALMAS DRIVE
+				CARLSBAD  CA  92009
+				US
+
+00-90-0B   (hex)		LANNER ELECTRONICS, INC.
+00900B     (base 16)		LANNER ELECTRONICS, INC.
+				8F-4, NO. 77, SEC. 1
+				  TAIPEI HSIEN  
+				TW
+
+00-90-CE   (hex)		 avateramedical Mechatronics GmbH
+0090CE     (base 16)		 avateramedical Mechatronics GmbH
+				Gewerbepark „Am Wald“ 4
+				 ILMENAU    D-98693
+				DE
+
+00-90-07   (hex)		DOMEX TECHNOLOGY CORP.
+009007     (base 16)		DOMEX TECHNOLOGY CORP.
+				NO. 2, TECHNOLOGY RD. 1
+				 HSINCHU    
+				TW
+
+00-90-2D   (hex)		DATA ELECTRONICS (AUST.) PTY, LTD.
+00902D     (base 16)		DATA ELECTRONICS (AUST.) PTY, LTD.
+				7 SEISMIC COURT
+				VICTORIA 3178    
+				AU
+
+00-90-D4   (hex)		BindView Development Corp.
+0090D4     (base 16)		BindView Development Corp.
+				3355 WEST ALABAMA #1200
+				HOUSTON  TX  77098
+				US
+
+00-90-29   (hex)		CRYPTO AG
+009029     (base 16)		CRYPTO AG
+				P.O. BOX
+				CH-6301 Zug    
+				CH
+
+00-90-DF   (hex)		MITSUBISHI CHEMICAL AMERICA, INC.
+0090DF     (base 16)		MITSUBISHI CHEMICAL AMERICA, INC.
+				445 INDIO WAY
+				SUNNYVALE  CA  94086
+				US
+
+00-90-C0   (hex)		K.J. LAW ENGINEERS, INC.
+0090C0     (base 16)		K.J. LAW ENGINEERS, INC.
+				42300 W. NINE MILE ROAD
+				NOVI  MI  48375
+				US
+
+00-90-1F   (hex)		ADTEC PRODUCTIONS, INC.
+00901F     (base 16)		ADTEC PRODUCTIONS, INC.
+				408 RUSSELL STREET
+				NASHVILLE  TN  37206
+				US
+
+00-90-24   (hex)		PIPELINKS, INC.
+009024     (base 16)		PIPELINKS, INC.
+				2710 WALSH AVE., STE #300
+				SANTA CLARA  CA  95051
+				US
+
+00-90-3A   (hex)		NIHON MEDIA TOOL INC.
+00903A     (base 16)		NIHON MEDIA TOOL INC.
+				1875 OYAMA-CHO
+				MIE 512-1102    
+				JP
+
+00-90-B2   (hex)		AVICI SYSTEMS INC.
+0090B2     (base 16)		AVICI SYSTEMS INC.
+				12 ELIZABETH DRIVE
+				CHELMSFORD  MA  01824
+				US
+
+00-90-B6   (hex)		FIBEX SYSTEMS
+0090B6     (base 16)		FIBEX SYSTEMS
+				5350 OLD REDWOOD HIGHWAY
+				PETALUMA  CA  94954
+				US
+
+00-90-63   (hex)		COHERENT COMMUNICATIONS SYSTEMS CORPORATION
+009063     (base 16)		COHERENT COMMUNICATIONS SYSTEMS CORPORATION
+				45085 UNIVERSITY DRIVE
+				ASHBURN  VA  20147
+				US
+
+00-90-62   (hex)		ICP VORTEX COMPUTERSYSTEME GmbH
+009062     (base 16)		ICP VORTEX COMPUTERSYSTEME GmbH
+				FALTERSTRASSE 51-53
+				D 74223 FLEIN    
+				DE
+
+00-10-D3   (hex)		GRIPS ELECTRONIC GMBH
+0010D3     (base 16)		GRIPS ELECTRONIC GMBH
+				NIESENBERGERGASSE 37
+				A-8020 GRAZ    
+				AT
+
+00-10-FB   (hex)		ZIDA TECHNOLOGIES LIMITED
+0010FB     (base 16)		ZIDA TECHNOLOGIES LIMITED
+				8/F BLOCK A  GOODVIEW INDUSTRIAL BUILDIN
+				TUEN MUN NT    
+				HK
+
+00-10-53   (hex)		COMPUTER TECHNOLOGY CORP.
+001053     (base 16)		COMPUTER TECHNOLOGY CORP.
+				50 W. TECHNECENTER DRIVE
+				MILFORD  OH  45150
+				US
+
+00-10-ED   (hex)		SUNDANCE TECHNOLOGY, INC.
+0010ED     (base 16)		SUNDANCE TECHNOLOGY, INC.
+				20111 STEVENS CREEK BLVD.
+				CUPERTINO  CA  95014
+				US
+
+00-10-6C   (hex)		EDNT GmbH
+00106C     (base 16)		EDNT GmbH
+				Werner-von-Siemens-Str. 7
+				64625  Bensheim  
+				DE
+
+00-10-E9   (hex)		RAIDTEC LTD.
+0010E9     (base 16)		RAIDTEC LTD.
+				CASTLE ROAD
+				Little Island  County Cork  
+				IE
+
+00-10-03   (hex)		IMATRON, INC.
+001003     (base 16)		IMATRON, INC.
+				389 OYSTER POINT BLVD.
+				SO. SAN FRANCISCO  CA  94080
+				US
+
+00-10-71   (hex)		ADVANET INC.
+001071     (base 16)		ADVANET INC.
+				3-20-8 NODA
+				  OKAYAMI 700  
+				JP
+
+00-90-15   (hex)		CENTIGRAM COMMUNICATIONS CORP.
+009015     (base 16)		CENTIGRAM COMMUNICATIONS CORP.
+				91 EAST TASMAN DRIVE
+				SAN JOSE  CA  95134
+				US
+
+00-90-95   (hex)		UNIVERSAL AVIONICS
+009095     (base 16)		UNIVERSAL AVIONICS
+				11351 WILLOWS ROAD NE
+				REDMOND  WA  98052-2552
+				US
+
+00-90-41   (hex)		APPLIED DIGITAL ACCESS
+009041     (base 16)		APPLIED DIGITAL ACCESS
+				9855 SCRANTON ROAD
+				SAN DIEGO  CA  92121
+				US
+
+00-90-5A   (hex)		DEARBORN GROUP, INC.
+00905A     (base 16)		DEARBORN GROUP, INC.
+				33604 West 8 Mile Rd
+				Farmington Hills  MI  48335
+				US
+
+00-90-11   (hex)		WAVTrace, Inc.
+009011     (base 16)		WAVTrace, Inc.
+				1555 132ND AVE. NE
+				BELLEVUE  WA  98005
+				US
+
+00-90-65   (hex)		FINISAR CORPORATION
+009065     (base 16)		FINISAR CORPORATION
+				1389 Moffett Park Dr
+				Sunnyvale  CA  94089
+				US
+
+00-90-23   (hex)		ZILOG INC.
+009023     (base 16)		ZILOG INC.
+				910 East Hamilton Ave.
+				Campbell  CA  95008
+				US
+
+00-90-F6   (hex)		ESCALATE NETWORKS, INC.
+0090F6     (base 16)		ESCALATE NETWORKS, INC.
+				6 HUGHES
+				IRVINE  CA  92617
+				US
+
+00-90-A8   (hex)		NineTiles Networks, Ltd.
+0090A8     (base 16)		NineTiles Networks, Ltd.
+				9 Station Road
+				Waterbeach  Cambridge  CB5 9HT
+				GB
+
+00-10-2A   (hex)		ZF MICROSYSTEMS, INC.
+00102A     (base 16)		ZF MICROSYSTEMS, INC.
+				1052 ELWELL COURT
+				PALO ALTO  CA  94303-4307
+				US
+
+00-10-E5   (hex)		SOLECTRON TEXAS
+0010E5     (base 16)		SOLECTRON TEXAS
+				12455 RESEARCH BLVD. M/S 2205
+				AUSTIN  TX  78759
+				US
+
+00-10-9D   (hex)		CLARINET SYSTEMS, INC.
+00109D     (base 16)		CLARINET SYSTEMS, INC.
+				1415 KOLL CIRCLE #101
+				SAN JOSE  CA  95112
+				US
+
+00-10-0E   (hex)		MICRO LINEAR COPORATION
+00100E     (base 16)		MICRO LINEAR COPORATION
+				2092 CONCOURSE DRIVE
+				SAN JOSE  CA  95131
+				US
+
+00-90-EC   (hex)		PYRESCOM
+0090EC     (base 16)		PYRESCOM
+				3 ALLEE DU MOULIN
+				66680 CANOHES    
+				FR
+
+00-90-C3   (hex)		TOPIC SEMICONDUCTOR CORP.
+0090C3     (base 16)		TOPIC SEMICONDUCTOR CORP.
+				11F-1, NO. 2, WU-LIN RD.
+				HSIN-CHU    
+				TW
+
+00-10-C8   (hex)		COMMUNICATIONS ELECTRONICS SECURITY GROUP
+0010C8     (base 16)		COMMUNICATIONS ELECTRONICS SECURITY GROUP
+				10/4W22 FIDDLERS GREEN LANE
+				Benhall, Cheltenham  Glouster GL52 5AJ  
+				GB
+
+00-10-F3   (hex)		Nexcom International Co., Ltd.
+0010F3     (base 16)		Nexcom International Co., Ltd.
+				18F, No. 716, Chung-Cheng Road,
+				Taipei Hsien 235,    
+				TW
+
+00-10-86   (hex)		ATTO Technology, Inc.
+001086     (base 16)		ATTO Technology, Inc.
+				155 Crosspoint Pkwy.
+				Amherst  NY  14068
+				US
+
+00-10-DF   (hex)		RISE COMPUTER INC.
+0010DF     (base 16)		RISE COMPUTER INC.
+				9F, NO. 306-3, TATUNG RD.
+				TAIPEI HSIEN    
+				TW
+
+00-10-72   (hex)		GVN TECHNOLOGIES, INC.
+001072     (base 16)		GVN TECHNOLOGIES, INC.
+				8200 BRYAN DAIRY ROAD
+				LARGO  FL  33777
+				US
+
+00-10-DA   (hex)		Kollmorgen Corp
+0010DA     (base 16)		Kollmorgen Corp
+				33 S.LA PATERA LN
+				SANTA BARBARA  CA  93117
+				US
+
+00-10-E4   (hex)		NSI CORPORATION
+0010E4     (base 16)		NSI CORPORATION
+				P.O. BOX 635
+				WILSONVILLE  OR  97070
+				US
+
+00-10-7E   (hex)		BACHMANN ELECTRONIC GmbH
+00107E     (base 16)		BACHMANN ELECTRONIC GmbH
+				KREUZAECKERWEG 33
+				A 6806 FELDKIRCH    
+				AT
+
+00-10-A0   (hex)		INNOVEX TECHNOLOGIES, INC.
+0010A0     (base 16)		INNOVEX TECHNOLOGIES, INC.
+				KEYSTONE COMMONS
+				TURTLE CREEK  PA  15145
+				US
+
+00-10-16   (hex)		T.SQWARE
+001016     (base 16)		T.SQWARE
+				6, PARC ARIANE
+				78284 GUYANCOURT CEDEX    
+				FR
+
+00-10-90   (hex)		CIMETRICS, INC.
+001090     (base 16)		CIMETRICS, INC.
+				55 TEMPLE PLACE
+				BOSTON  MA  02111
+				US
+
+00-10-F5   (hex)		AMHERST SYSTEMS, INC.
+0010F5     (base 16)		AMHERST SYSTEMS, INC.
+				30 WILSON ROAD
+				BUFFALO  NY  14221
+				US
+
+00-10-3D   (hex)		PHASECOM, LTD.
+00103D     (base 16)		PHASECOM, LTD.
+				P.O. BOX 45017
+				JERUSALEM 91450    
+				IL
+
+00-10-96   (hex)		TRACEWELL SYSTEMS, INC.
+001096     (base 16)		TRACEWELL SYSTEMS, INC.
+				567 ENTERPRISE DRIVE
+				WESTERVILLE  OH  43081
+				US
+
+00-10-82   (hex)		JNA TELECOMMUNICATIONS LIMITED
+001082     (base 16)		JNA TELECOMMUNICATIONS LIMITED
+				16 SMITH ST, CHATSWOOD
+				  NSW 2067  
+				AU
+
+00-10-98   (hex)		STARNET TECHNOLOGIES, INC.
+001098     (base 16)		STARNET TECHNOLOGIES, INC.
+				2210 O'TOOLE AVE.
+				SAN JOSE  CA  95131
+				US
+
+00-10-42   (hex)		Alacritech, Inc.
+001042     (base 16)		Alacritech, Inc.
+				1995 N. First Street
+				San Jose  CA  95112
+				US
+
+00-10-68   (hex)		COMOS TELECOM
+001068     (base 16)		COMOS TELECOM
+				SAEHAN B/D/, 27-1 SUPYO-DONG
+				CHUNG-GU,  SEOUL (100-230)    
+				KR
+
+00-10-EA   (hex)		ADEPT TECHNOLOGY
+0010EA     (base 16)		ADEPT TECHNOLOGY
+				150 ROSE ORCHARD WAY
+				SAN JOSE  CA  95134
+				US
+
+00-10-AE   (hex)		SHINKO ELECTRIC INDUSTRIES CO.
+0010AE     (base 16)		SHINKO ELECTRIC INDUSTRIES CO.
+				80 OSHIMADA-MACHI
+				NAGANO-SHI 381-22    
+				JP
+
+00-10-C4   (hex)		MEDIA GLOBAL LINKS CO., LTD.
+0010C4     (base 16)		MEDIA GLOBAL LINKS CO., LTD.
+				580-16, horikawa-cho,saiwai-ku
+				Kawasaki, Kanagawa 212-0013    
+				JP
+
+00-10-FE   (hex)		DIGITAL EQUIPMENT CORPORATION
+0010FE     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				301 ROCKRIMMON BLVD, SOUTH
+				COLORADO SPRINGS  CO  80919
+				US
+
+00-10-56   (hex)		SODICK CO., LTD.
+001056     (base 16)		SODICK CO., LTD.
+				3-12-1 NAKAMACHIDAI
+				TSUZUKI-KU, YOKOHAMA  KANAGAWA 224  
+				JP
+
+00-10-CD   (hex)		INTERFACE CONCEPT
+0010CD     (base 16)		INTERFACE CONCEPT
+				3 VENELLE de KERGOS
+				29000 QUIMPER    
+				FR
+
+00-10-61   (hex)		HOSTLINK CORP.
+001061     (base 16)		HOSTLINK CORP.
+				10F-1, NO. 181
+				HSI-CHIH, TAIPEI    
+				TW
+
+00-10-99   (hex)		InnoMedia, Inc.
+001099     (base 16)		InnoMedia, Inc.
+				4800 GREAT AMERICA PARKWAY
+				SANTA CLARA  CA  95054
+				US
+
+00-10-E1   (hex)		S.I. TECH, INC.
+0010E1     (base 16)		S.I. TECH, INC.
+				P.O. BOX 609
+				GENEVA  IL  60134
+				US
+
+00-10-BB   (hex)		DATA & INFORMATION TECHNOLOGY
+0010BB     (base 16)		DATA & INFORMATION TECHNOLOGY
+				TECHNOLOGY HOUSE
+				BOTTESFORD, NOTTINGHAM NG13 OEL    
+				GB
+
+00-10-20   (hex)		Hand Held Products Inc
+001020     (base 16)		Hand Held Products Inc
+				700 Visions Drive
+				Skaneateles Falls  NY  13153-0208
+				US
+
+00-10-3A   (hex)		DIAMOND NETWORK TECH
+00103A     (base 16)		DIAMOND NETWORK TECH
+				P.O. BOX 84525
+				GREENSIDE 2034    
+				ZA
+
+00-10-04   (hex)		THE BRANTLEY COILE COMPANY,INC
+001004     (base 16)		THE BRANTLEY COILE COMPANY,INC
+				545 RESEARCH DRIVE
+				ATHENS  GA  30605
+				US
+
+00-10-EF   (hex)		DBTEL INCORPORATED
+0010EF     (base 16)		DBTEL INCORPORATED
+				NO.29 TZU-CHIANG ST.,
+				TU-CHENG TAIPEI    
+				TW
+
+00-10-88   (hex)		AMERICAN NETWORKS INC.
+001088     (base 16)		AMERICAN NETWORKS INC.
+				6800 ORANGETHORPE AVE. #A
+				BUENA PARK  CA  90620
+				US
+
+00-10-22   (hex)		SatCom Media Corporation
+001022     (base 16)		SatCom Media Corporation
+				3255-7 SCOTT BLVD.
+				SANTA CLARA  CA  95054
+				US
+
+00-10-76   (hex)		EUREM GmbH
+001076     (base 16)		EUREM GmbH
+				JULICHER STR. 338B
+				D-52070 AACHEN    
+				DE
+
+00-10-3F   (hex)		TOLLGRADE COMMUNICATIONS, INC.
+00103F     (base 16)		TOLLGRADE COMMUNICATIONS, INC.
+				493 NIXON ROAD
+				CHESWICK  PA  15024
+				US
+
+00-10-49   (hex)		ShoreTel, Inc
+001049     (base 16)		ShoreTel, Inc
+				960 Stewart Drive
+				Sunnyvale  CA  94085
+				US
+
+00-10-5E   (hex)		Spirent plc, Service Assurance Broadband
+00105E     (base 16)		Spirent plc, Service Assurance Broadband
+				5280 Corporate Dr
+				Ballenger Creek  MD  21703
+				US
+
+00-10-AF   (hex)		TAC SYSTEMS, INC.
+0010AF     (base 16)		TAC SYSTEMS, INC.
+				1035 PUTMAN DRIVE--STE.
+				HUNTSVILLE  AL  35816-2271
+				US
+
+00-10-8C   (hex)		Fujitsu Services Ltd
+00108C     (base 16)		Fujitsu Services Ltd
+				SOLIHULL PARKWAY
+				BIRMINGHAM B37 7YU  England  0000
+				GB
+
+00-10-F7   (hex)		IRIICHI TECHNOLOGIES Inc.
+0010F7     (base 16)		IRIICHI TECHNOLOGIES Inc.
+				1-26-7 CHUO, NAKANA-KU
+				 TOKYO 164    
+				JP
+
+00-10-AB   (hex)		KOITO ELECTRIC INDUSTRIES, LTD.
+0010AB     (base 16)		KOITO ELECTRIC INDUSTRIES, LTD.
+				100 MAEDA-CHO, TOTSUKA-KU
+				YOKOHAMA 244  KANAGAWA  244-8569
+				JP
+
+00-10-10   (hex)		INITIO CORPORATION
+001010     (base 16)		INITIO CORPORATION
+				2188 B DEL FRANCO STREET
+				SAN JOSE  CA  95118
+				US
+
+00-10-F2   (hex)		ANTEC
+0010F2     (base 16)		ANTEC
+				4920 AVALON RIDGE PKWY
+				NORCROSS  GA  30071
+				US
+
+00-E0-07   (hex)		Avaya ECS Ltd
+00E007     (base 16)		Avaya ECS Ltd
+				Unit 1 Sterling Court, Mundells
+				Welwyn Garden City  Hert  AL7 1LZ
+				GB
+
+00-10-BE   (hex)		MARCH NETWORKS CORPORATION
+0010BE     (base 16)		MARCH NETWORKS CORPORATION
+				303 Terry Fox Drive
+				OTTAWA, ONTARIO    K2K 3J1
+				CA
+
+00-10-58   (hex)		ArrowPoint Communications
+001058     (base 16)		ArrowPoint Communications
+				235 LITTLETON ROAD
+				WESTFORD  MA  01886
+				US
+
+00-10-0F   (hex)		INDUSTRIAL CPU SYSTEMS
+00100F     (base 16)		INDUSTRIAL CPU SYSTEMS
+				111-D W. DYER ROAD
+				SANTA ANA  CA  92707
+				US
+
+00-10-BC   (hex)		Aastra Telecom
+0010BC     (base 16)		Aastra Telecom
+				8 Federal Street
+				Billerica  MA  01821-3570
+				US
+
+00-E0-BF   (hex)		TORRENT NETWORKING TECHNOLOGIES CORP.
+00E0BF     (base 16)		TORRENT NETWORKING TECHNOLOGIES CORP.
+				8181 PROFESSIONAL PLACE
+				LANDOVER  MD  20785
+				US
+
+00-E0-E3   (hex)		SK-ELEKTRONIK GMBH
+00E0E3     (base 16)		SK-ELEKTRONIK GMBH
+				HEMMELRATHERWEG 201
+				51377 LEVERKUSEN    
+				DE
+
+00-E0-C6   (hex)		LINK2IT, L.L.C.
+00E0C6     (base 16)		LINK2IT, L.L.C.
+				4256 BECK AVENUE
+				STUDIO CITY  CA  91604
+				US
+
+00-E0-E5   (hex)		CINCO NETWORKS, INC.
+00E0E5     (base 16)		CINCO NETWORKS, INC.
+				6601 KOLL CENTER PARK WAY
+				PLEASANTON  CA  94566
+				US
+
+00-E0-61   (hex)		EdgePoint Networks, Inc.
+00E061     (base 16)		EdgePoint Networks, Inc.
+				2238 MARTIN AVENUE
+				SANTA CLARA  CA  95050
+				US
+
+00-E0-53   (hex)		CELLPORT LABS, INC.
+00E053     (base 16)		CELLPORT LABS, INC.
+				885 ARAPAHOE AVE.,
+				BOULDER  CO  80302
+				US
+
+00-E0-D3   (hex)		DATENTECHNIK GmbH
+00E0D3     (base 16)		DATENTECHNIK GmbH
+				THERESIANUMGASSE 11
+				A-1040 WIEN    
+				AT
+
+00-E0-43   (hex)		VitalCom
+00E043     (base 16)		VitalCom
+				15222 DEL AMO AVE.
+				TUSTIN  CA  92780
+				US
+
+00-E0-B3   (hex)		EtherWAN Systems, Inc.
+00E0B3     (base 16)		EtherWAN Systems, Inc.
+				14 HUGHES,  STE.B-105
+				IRVINE  CA  92618
+				US
+
+00-E0-ED   (hex)		SILICOM, LTD.
+00E0ED     (base 16)		SILICOM, LTD.
+				8 HANAGER ST.
+				KFAR-SAVA 44000    
+				IL
+
+00-E0-B8   (hex)		GATEWAY 2000
+00E0B8     (base 16)		GATEWAY 2000
+				610 GATEWAY DRIVE
+				N. SIOUX CITY  SD  57049
+				US
+
+00-E0-7C   (hex)		METTLER-TOLEDO, INC.
+00E07C     (base 16)		METTLER-TOLEDO, INC.
+				1150 DEARBORN DRIVE
+				WORTHINGTON  OH  43085
+				US
+
+00-E0-26   (hex)		Redlake MASD LLC
+00E026     (base 16)		Redlake MASD LLC
+				3440 E. Pritannia Dr.
+				Tuscon  AZ  85706
+				US
+
+00-E0-20   (hex)		TECNOMEN OY
+00E020     (base 16)		TECNOMEN OY
+				P.O. BOX 93
+				FIN-02271 ESPOO    
+				FI
+
+00-E0-0D   (hex)		RADIANT SYSTEMS
+00E00D     (base 16)		RADIANT SYSTEMS
+				1000 ALDERMAN DR.
+				ALPHARETTA  GA  30202
+				US
+
+00-E0-DC   (hex)		NEXWARE CORP.
+00E0DC     (base 16)		NEXWARE CORP.
+				825 STEWART DR.,  STE #4
+				SUNNYVALE  CA  94086
+				US
+
+00-E0-37   (hex)		CENTURY CORPORATION
+00E037     (base 16)		CENTURY CORPORATION
+				2-28-5, Taito
+				TAITO-KU,  TOKYO  101
+				JP
+
+00-E0-C2   (hex)		NECSY S.p.A.
+00E0C2     (base 16)		NECSY S.p.A.
+				VIA LISBONA 28
+				35020 PADOVA    
+				IT
+
+00-E0-FB   (hex)		LEIGHTRONIX, INC.
+00E0FB     (base 16)		LEIGHTRONIX, INC.
+				2330 JARCO DR.
+				HOLT  MI  48842
+				US
+
+00-E0-9B   (hex)		ENGAGE NETWORKS, INC.
+00E09B     (base 16)		ENGAGE NETWORKS, INC.
+				316 N. MILWAUKEE ST., STE.#214
+				MILWAUKEE  WI  53202
+				US
+
+00-E0-45   (hex)		TOUCHWAVE, INC.
+00E045     (base 16)		TOUCHWAVE, INC.
+				Maglebjergvej 5B
+				DK-2800 Lyngby    
+				DK
+
+00-E0-40   (hex)		DeskStation Technology, Inc.
+00E040     (base 16)		DeskStation Technology, Inc.
+				15729 COLLEGE BLVD.
+				LENEXA  KS  66219
+				US
+
+00-E0-1A   (hex)		COMTEC SYSTEMS. CO., LTD.
+00E01A     (base 16)		COMTEC SYSTEMS. CO., LTD.
+				404-9 CHOUNGCHEN-DONG
+				BUPYOUNG-KU, INCHON    
+				KR
+
+00-E0-78   (hex)		BERKELEY NETWORKS
+00E078     (base 16)		BERKELEY NETWORKS
+				683 RIVER OAKS PARKWAY
+				SAN JOSE  CA  95134
+				US
+
+00-E0-87   (hex)		LeCroy - Networking Productions Division
+00E087     (base 16)		LeCroy - Networking Productions Division
+				25 BURLINGTON MALL ROAD
+				BURLINGTON  MA  01803
+				US
+
+00-E0-41   (hex)		CSPI
+00E041     (base 16)		CSPI
+				43 Manning Rd.
+				Billerica  MA  01821
+				US
+
+00-E0-E2   (hex)		INNOVA CORP.
+00E0E2     (base 16)		INNOVA CORP.
+				3325 SOUTH 116TH STREET
+				SEATTLE  WA  98168
+				US
+
+00-E0-81   (hex)		TYAN COMPUTER CORP.
+00E081     (base 16)		TYAN COMPUTER CORP.
+				3288 LAUREVIEW CT
+				Fremont  CA  95035
+				US
+
+00-E0-57   (hex)		HAN MICROTELECOM. CO., LTD.
+00E057     (base 16)		HAN MICROTELECOM. CO., LTD.
+				FASHION BD., 3RD FR,
+				DONG SEO-GU, TAEJON  KOREA 302-173  
+				KR
+
+00-E0-BC   (hex)		SYMON COMMUNICATIONS, INC.
+00E0BC     (base 16)		SYMON COMMUNICATIONS, INC.
+				10701 CORPORATE DR.-STE. #290
+				STAFFORD  TX  77477
+				US
+
+00-E0-82   (hex)		ANERMA
+00E082     (base 16)		ANERMA
+				SCHAAPSDRIES 25
+				2260 WESTERLO    
+				BE
+
+00-E0-77   (hex)		WEBGEAR, INC.
+00E077     (base 16)		WEBGEAR, INC.
+				1263 OAKMEAD PKWY
+				SUNNYVALE  CA  94080
+				US
+
+00-E0-56   (hex)		HOLONTECH CORPORATION
+00E056     (base 16)		HOLONTECH CORPORATION
+				2039 SAMARITAN DRIVE
+				SAN JOSE  CA  95124
+				US
+
+00-E0-31   (hex)		HAGIWARA ELECTRIC CO., LTD.
+00E031     (base 16)		HAGIWARA ELECTRIC CO., LTD.
+				7, SHIMOKOFUKADA, ASADA-CHO
+				NISSHIN-SHI, AICHI  470-01    
+				JP
+
+00-E0-0B   (hex)		ROOFTOP COMMUNICATIONS CORP.
+00E00B     (base 16)		ROOFTOP COMMUNICATIONS CORP.
+				468 PACO DRIVE
+				LOS ALTOS  CA  94024
+				US
+
+00-E0-B2   (hex)		TELMAX COMMUNICATIONS CORP.
+00E0B2     (base 16)		TELMAX COMMUNICATIONS CORP.
+				46515 LANDING PARKWAY
+				FREMONT  CA  94538
+				US
+
+00-E0-2F   (hex)		MCNS HOLDINGS, L.P.
+00E02F     (base 16)		MCNS HOLDINGS, L.P.
+				TCI, INC.-TECHNOLOGY VENTURES
+				DENVER  CO  80217-5630
+				US
+
+00-E0-7E   (hex)		WALT DISNEY IMAGINEERING
+00E07E     (base 16)		WALT DISNEY IMAGINEERING
+				1401 FLOWER ST.
+				GLENDALE  CA  91221
+				US
+
+00-E0-99   (hex)		SAMSON AG
+00E099     (base 16)		SAMSON AG
+				WEISMULLERSTR. 3
+				D-60314 FRANKFURT    
+				DE
+
+00-60-AE   (hex)		TRIO INFORMATION SYSTEMS AB
+0060AE     (base 16)		TRIO INFORMATION SYSTEMS AB
+				FOGDEVAGEN 4B
+				  S-183 64 TABY  
+				SE
+
+00-60-53   (hex)		TOYODA MACHINE WORKS, LTD.
+006053     (base 16)		TOYODA MACHINE WORKS, LTD.
+				1-7 KITAJIZOYAMA NODACHOU
+				KARIYA CITY, AICHI    
+				JO
+
+00-60-56   (hex)		NETWORK TOOLS, INC.
+006056     (base 16)		NETWORK TOOLS, INC.
+				2975 BOWERS AVENUE, #202
+				SANTA CLARA  CA  95051-0955
+				US
+
+00-60-0C   (hex)		Eurotech Inc.
+00600C     (base 16)		Eurotech Inc.
+				10260 Old Columbia Road
+				COLUMBIA  MD  21046
+				US
+
+00-60-1C   (hex)		TELXON CORPORATION
+00601C     (base 16)		TELXON CORPORATION
+				3330 W. MARKET STREET
+				AKRON  OH  44334-0582
+				US
+
+00-60-5F   (hex)		NIPPON UNISOFT CORPORATION
+00605F     (base 16)		NIPPON UNISOFT CORPORATION
+				BR NINGYOCHO 1,2-13-9
+				TOKYO 103    
+				JP
+
+00-60-91   (hex)		FIRST PACIFIC NETWORKS, INC.
+006091     (base 16)		FIRST PACIFIC NETWORKS, INC.
+				871 FOX LANE
+				SAN JOSE  CA  95131
+				US
+
+00-60-1D   (hex)		LUCENT TECHNOLOGIES
+00601D     (base 16)		LUCENT TECHNOLOGIES
+				101 CRAWFORDS CORNER RD.
+				HOLMDEL  NJ  07733
+				US
+
+00-60-7B   (hex)		FORE SYSTEMS, INC.
+00607B     (base 16)		FORE SYSTEMS, INC.
+				1000 FORE DRIVE
+				WARRENDALE  PA  15086
+				US
+
+00-E0-6C   (hex)		Ultra Electronics Command & Control Systems
+00E06C     (base 16)		Ultra Electronics Command & Control Systems
+				Knaves Beech Business Centre
+				Hemel Hemstead  Herts England  HP2 7BW
+				GB
+
+00-E0-4A   (hex)		ZX Technologies, Inc
+00E04A     (base 16)		ZX Technologies, Inc
+				760 Spanish Oak Trail
+				Dripping Springs  TX  78620
+				US
+
+00-60-C9   (hex)		ControlNet, Inc.
+0060C9     (base 16)		ControlNet, Inc.
+				747 CAMDEN, STE. A
+				CAMPBELL  CA  95008
+				US
+
+00-E0-7A   (hex)		MIKRODIDAKT AB
+00E07A     (base 16)		MIKRODIDAKT AB
+				Skiffervägen 48
+				LUND    SE22478
+				SE
+
+00-60-32   (hex)		I-CUBE, INC.
+006032     (base 16)		I-CUBE, INC.
+				2328-C WALSH AVENUE
+				SANTA CLARA  CA  95014
+				US
+
+00-60-33   (hex)		ACUITY IMAGING, INC.
+006033     (base 16)		ACUITY IMAGING, INC.
+				9 TOWNSEND WEST
+				NASHUA  NH  03063
+				US
+
+00-60-13   (hex)		NETSTAL MASCHINEN AG
+006013     (base 16)		NETSTAL MASCHINEN AG
+				INDUSTRIESTRASSE
+				CH-8752 NAEFELS    
+				CH
+
+00-60-22   (hex)		VICOM SYSTEMS, INC.
+006022     (base 16)		VICOM SYSTEMS, INC.
+				1961 LANDINGS DRIVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-60-EE   (hex)		APOLLO
+0060EE     (base 16)		APOLLO
+				3610 BIRCH STREET--STE #100
+				NEWPORT BEACH  CA  92660
+				US
+
+00-60-D8   (hex)		ELMIC SYSTEMS, INC.
+0060D8     (base 16)		ELMIC SYSTEMS, INC.
+				DAI-ICHI SEIMEI BLDG.
+				YOKOHAMA 231    
+				JP
+
+00-60-EF   (hex)		FLYTECH TECHNOLOGY CO., LTD.
+0060EF     (base 16)		FLYTECH TECHNOLOGY CO., LTD.
+				No.168 Sing-ai Rd., Neihu District
+				TAIPEI CITY    114
+				TW
+
+00-60-85   (hex)		Storage Concepts
+006085     (base 16)		Storage Concepts
+				14352 Chamber Road
+				Tustin  CA  92780
+				US
+
+00-60-11   (hex)		CRYSTAL SEMICONDUCTOR CORP.
+006011     (base 16)		CRYSTAL SEMICONDUCTOR CORP.
+				P.O. BOX 17847
+				AUSTIN  TX  78760
+				US
+
+00-60-F5   (hex)		ICON WEST, INC.
+0060F5     (base 16)		ICON WEST, INC.
+				3342 SOUTH 300 EAST
+				SALT LAKE CITY  UT  84115
+				US
+
+00-60-62   (hex)		TELESYNC, INC.
+006062     (base 16)		TELESYNC, INC.
+				5555 OAKBROOK PKWY-STE #110
+				NORCROSS  GA  30093
+				US
+
+00-60-E9   (hex)		ATOP TECHNOLOGIES, INC.
+0060E9     (base 16)		ATOP TECHNOLOGIES, INC.
+				SUITE 305, NO. 47, PARK AVENUE II,
+				HSINCHU 30047    
+				TW
+
+00-60-43   (hex)		iDirect, INC.
+006043     (base 16)		iDirect, INC.
+				13865 Sunrise Vally Drive
+				Herndon  VA  20171
+				US
+
+00-60-28   (hex)		MACROVISION CORPORATION
+006028     (base 16)		MACROVISION CORPORATION
+				2830 De La Cruz Boulevard
+				Santa Clara  CA  95050
+				US
+
+00-60-F0   (hex)		JOHNSON & JOHNSON MEDICAL, INC
+0060F0     (base 16)		JOHNSON & JOHNSON MEDICAL, INC
+				4110 GEORGE RD.
+				TAMPA  FL  33634
+				US
+
+00-60-E0   (hex)		AXIOM TECHNOLOGY CO., LTD.
+0060E0     (base 16)		AXIOM TECHNOLOGY CO., LTD.
+				3F, 14, LANE 235
+				TAIPEI HSIEN    
+				TW
+
+00-60-96   (hex)		T.S. MICROTECH INC.
+006096     (base 16)		T.S. MICROTECH INC.
+				20818 HIGGINS COURT
+				TORRANCE  CA  90501
+				US
+
+00-60-3A   (hex)		QUICK CONTROLS LTD.
+00603A     (base 16)		QUICK CONTROLS LTD.
+				DURHAM HOUSE, WARWICK COURT
+				MANCHESTER  M24 1AE    
+				GB
+
+00-02-88   (hex)		GLOBAL VILLAGE COMMUNICATION
+000288     (base 16)		GLOBAL VILLAGE COMMUNICATION
+				1144 EAST ARQUES AVE.
+				SUNNYVALE  CA  94086
+				US
+
+00-60-34   (hex)		ROBERT BOSCH GmbH
+006034     (base 16)		ROBERT BOSCH GmbH
+				POSTBOX 11 62
+				D-64701 ERBACH    
+				DE
+
+00-60-50   (hex)		INTERNIX INC.
+006050     (base 16)		INTERNIX INC.
+				59-10 TAKAKURA-CHO
+				  TOKYO 192  
+				JP
+
+00-60-FA   (hex)		EDUCATIONAL TECHNOLOGY RESOURCES, INC.
+0060FA     (base 16)		EDUCATIONAL TECHNOLOGY RESOURCES, INC.
+				1742 CHURCH STREET
+				HOLBROOK  NY  11741
+				US
+
+00-60-DA   (hex)		Red Lion Controls, LP
+0060DA     (base 16)		Red Lion Controls, LP
+				20 Willow Springs Circle
+				York  NY  17402
+				US
+
+00-60-E4   (hex)		COMPUSERVE, INC.
+0060E4     (base 16)		COMPUSERVE, INC.
+				5000 ARLINGTON CENTRE BLVD.
+				COLUMBUS  OH  43220
+				US
+
+00-60-8F   (hex)		TEKRAM TECHNOLOGY CO., LTD.
+00608F     (base 16)		TEKRAM TECHNOLOGY CO., LTD.
+				B1, NO. 17, LANE 159, SEC. 6
+				TAIPEI    
+				TW
+
+00-60-C4   (hex)		SOLITON SYSTEMS K.K.
+0060C4     (base 16)		SOLITON SYSTEMS K.K.
+				2-4-3 SHINJUKU, SHINJUKU-KU
+				TOKYO 160    
+				JP
+
+00-A0-3C   (hex)		EG&G NUCLEAR INSTRUMENTS
+00A03C     (base 16)		EG&G NUCLEAR INSTRUMENTS
+				100 MIDLAND ROAD
+				OAK RIDGE  TN  37830
+				US
+
+00-A0-C4   (hex)		CRISTIE ELECTRONICS LTD.
+00A0C4     (base 16)		CRISTIE ELECTRONICS LTD.
+				BOND'S MILL
+				GLOUCESTERSHIRE GL10 3RG    
+				GB
+
+00-A0-63   (hex)		JRL SYSTEMS, INC.
+00A063     (base 16)		JRL SYSTEMS, INC.
+				8305 HWY 71 WEST
+				AUSTIN  TX  78735
+				US
+
+00-A0-2C   (hex)		interWAVE Communications
+00A02C     (base 16)		interWAVE Communications
+				656 BAIR ISLAND BLVD.-STE.#108
+				REDWOOD CITY  CA  94063-2704
+				US
+
+00-A0-F7   (hex)		V.I COMPUTER CORP.
+00A0F7     (base 16)		V.I COMPUTER CORP.
+				531 ENCINITAS BLVD--#114
+				ENCINITAS  CA  92024
+				US
+
+00-A0-90   (hex)		TimeStep Corporation
+00A090     (base 16)		TimeStep Corporation
+				359 TERRY FOX DRIVE
+				KANATA, ONTARIO K2K 2E7    
+				CA
+
+00-A0-EA   (hex)		ETHERCOM CORP.
+00A0EA     (base 16)		ETHERCOM CORP.
+				45990 HOTCHKISS ST.
+				FREEMONT  CA  94539
+				US
+
+00-A0-DC   (hex)		O.N. ELECTRONIC CO., LTD.
+00A0DC     (base 16)		O.N. ELECTRONIC CO., LTD.
+				3-20-27, TARUMI
+				SUITA, OSAKA 564    
+				JP
+
+00-A0-0B   (hex)		COMPUTEX CO., LTD.
+00A00B     (base 16)		COMPUTEX CO., LTD.
+				432-13 GOJYOBASHI-HIGASHI 4-CHYOME
+				 HIGASHIYAMAKU, KYOTO-CITY 605    
+				JP
+
+00-A0-E2   (hex)		Keisokugiken Corporation
+00A0E2     (base 16)		Keisokugiken Corporation
+				2021-5 Houshakuji
+				Shioya-gun  Tochigi  329-1233
+				JP
+
+00-A0-33   (hex)		imc MeBsysteme GmbH
+00A033     (base 16)		imc MeBsysteme GmbH
+				VOLTASTRASSE 5
+				D-13355 BERLIN    
+				DE
+
+00-A0-A9   (hex)		NAVTEL COMMUNICATIONS INC.
+00A0A9     (base 16)		NAVTEL COMMUNICATIONS INC.
+				55 RENFREW DRIVE
+				MARKHAM, ONTARIO L3R 8H3    
+				CA
+
+00-A0-71   (hex)		VIDEO LOTTERY TECHNOLOGIES,INC
+00A071     (base 16)		VIDEO LOTTERY TECHNOLOGIES,INC
+				2311 SOUTH 7TH AVENUE
+				BOZEMAN  MT  59715
+				US
+
+00-60-00   (hex)		XYCOM INC.
+006000     (base 16)		XYCOM INC.
+				750 N. MAPLE
+				SALINE  MI  48176
+				US
+
+00-60-45   (hex)		PATHLIGHT TECHNOLOGIES
+006045     (base 16)		PATHLIGHT TECHNOLOGIES
+				767 WARREN ROAD
+				ITHACA  NY  14850
+				US
+
+00-A0-5D   (hex)		CS COMPUTER SYSTEME GmbH
+00A05D     (base 16)		CS COMPUTER SYSTEME GmbH
+				ISARSTRASSE 3,
+				82065 BAIERBRUNN    
+				DE
+
+00-A0-61   (hex)		PURITAN BENNETT
+00A061     (base 16)		PURITAN BENNETT
+				2200 FARADAY AVENUE
+				CARLSBAD  CA  92008
+				US
+
+00-60-A6   (hex)		PARTICLE MEASURING SYSTEMS
+0060A6     (base 16)		PARTICLE MEASURING SYSTEMS
+				5475 AIRPORT BLVD.
+				BOULDER  CO  80301
+				US
+
+00-60-2A   (hex)		SYMICRON COMPUTER COMMUNICATIONS, LTD.
+00602A     (base 16)		SYMICRON COMPUTER COMMUNICATIONS, LTD.
+				UNIT 4 GREEN LANE BUSINESS PARK
+				London SE9 3TL    
+				US
+
+00-A0-6D   (hex)		MANNESMANN TALLY CORPORATION
+00A06D     (base 16)		MANNESMANN TALLY CORPORATION
+				P.O. BOX 97018
+				KENT  WA  98064-9718
+				US
+
+00-A0-F6   (hex)		AutoGas Systems Inc.
+00A0F6     (base 16)		AutoGas Systems Inc.
+				P.O. BOX 6957
+				ABIOLENE  TX  79608
+				US
+
+00-60-BE   (hex)		WEBTRONICS
+0060BE     (base 16)		WEBTRONICS
+				3B-1  8-2-12
+				SHINAGAWA-KU TOKYO 141    
+				JP
+
+00-60-BF   (hex)		MACRAIGOR SYSTEMS, INC.
+0060BF     (base 16)		MACRAIGOR SYSTEMS, INC.
+				PO BOX 1008
+				BROOKLINE VILLAGE  MA  02147
+				US
+
+00-60-80   (hex)		MICROTRONIX DATACOM LTD.
+006080     (base 16)		MICROTRONIX DATACOM LTD.
+				4056 Meadowbrook Drive, Unit 126
+				LONDON  ONTARIO  N6L 1E3
+				CA
+
+00-A0-37   (hex)		Mindray DS USA, Inc.
+00A037     (base 16)		Mindray DS USA, Inc.
+				800 Macarthur Blvd.
+				Mahwah  NJ  07430
+				US
+
+00-A0-4C   (hex)		INNOVATIVE SYSTEMS & TECHNOLOGIES, INC.
+00A04C     (base 16)		INNOVATIVE SYSTEMS & TECHNOLOGIES, INC.
+				48511 WARM SPRINGS BLVD.
+				FREMONT  CA  94539
+				US
+
+00-A0-31   (hex)		HAZELTINE CORPORATION, MS 1-17
+00A031     (base 16)		HAZELTINE CORPORATION, MS 1-17
+				450 E. PULASKI ROAD
+				GREENLAWN  NY  11740
+				US
+
+00-A0-41   (hex)		INFICON
+00A041     (base 16)		INFICON
+				2 Technology Place
+				E. Syracuse  NY  13057
+				US
+
+00-A0-A7   (hex)		VORAX CORPORATION
+00A0A7     (base 16)		VORAX CORPORATION
+				1031 EAST DUANE AVENUE, STE H
+				SUNNYVALE  CA  94086
+				US
+
+00-A0-7E   (hex)		AVID TECHNOLOGY, INC.
+00A07E     (base 16)		AVID TECHNOLOGY, INC.
+				METROPOLITAN TECHNOLOGY PARK
+				TEWKSBURY  MA  01876
+				US
+
+00-A0-6F   (hex)		Color Sentinel Systems, LLC
+00A06F     (base 16)		Color Sentinel Systems, LLC
+				97 Ridgeland Rd, Suite #2
+				ROCHESTER  NY  14623
+				US
+
+00-A0-C7   (hex)		TADIRAN TELECOMMUNICATIONS
+00A0C7     (base 16)		TADIRAN TELECOMMUNICATIONS
+				P.O. BOX 500
+				PETAH-TIKVA 49104    
+				IL
+
+00-A0-1A   (hex)		BINAR ELEKTRONIK AB
+00A01A     (base 16)		BINAR ELEKTRONIK AB
+				MAGNETUAGEN 18
+				    
+				SE
+
+00-A0-88   (hex)		ESSENTIAL COMMUNICATIONS
+00A088     (base 16)		ESSENTIAL COMMUNICATIONS
+				4374 ALEXANDER BLVD. NE-STE
+				ALBUQUERQUE  NM  87107
+				US
+
+00-A0-C2   (hex)		R.A. SYSTEMS CO., LTD.
+00A0C2     (base 16)		R.A. SYSTEMS CO., LTD.
+				1850-3 HIROOKANOMURA
+				    
+				JP
+
+00-A0-98   (hex)		NetApp
+00A098     (base 16)		NetApp
+				1395 Crossman Ave
+				Sunnyvale,  CA  94089
+				US
+
+00-A0-4B   (hex)		TFL LAN INC.
+00A04B     (base 16)		TFL LAN INC.
+				9F, NO. 499 CHUNG CHENG ROAD
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-A0-64   (hex)		KVB/ANALECT
+00A064     (base 16)		KVB/ANALECT
+				9420 JERONIMO ROAD
+				IRVINE  CA  92718
+				US
+
+00-A0-3E   (hex)		ATM FORUM
+00A03E     (base 16)		ATM FORUM
+				WORLDWIDE HEADQUARTERS
+				FOSTER CITY  CA  94404-1138
+				US
+
+00-A0-1F   (hex)		TRICORD SYSTEMS, INC.
+00A01F     (base 16)		TRICORD SYSTEMS, INC.
+				2800 NORTHWEST BOULEVARD
+				PLYMOUTH  MN  55441-2625
+				US
+
+00-A0-6C   (hex)		SHINDENGEN ELECTRIC MFG. CO., LTD.
+00A06C     (base 16)		SHINDENGEN ELECTRIC MFG. CO., LTD.
+				10-13, MINAMI-CHO, HANNOU-CITY
+				SAITAMA 357    
+				JO
+
+00-A0-DB   (hex)		FISHER & PAYKEL PRODUCTION
+00A0DB     (base 16)		FISHER & PAYKEL PRODUCTION
+				MACHINERY LIMITED
+				    
+				NZ
+
+00-A0-81   (hex)		ALCATEL DATA NETWORKS
+00A081     (base 16)		ALCATEL DATA NETWORKS
+				12502 SUNRISE VALLEY DRIVE
+				RESTON  VA  22096
+				US
+
+00-A0-B1   (hex)		FIRST VIRTUAL CORPORATION
+00A0B1     (base 16)		FIRST VIRTUAL CORPORATION
+				3393 OCTAVIUS DR.-STE.# 102
+				SANTA CLARA  CA  95054
+				US
+
+00-20-10   (hex)		JEOL SYSTEM TECHNOLOGY CO. LTD
+002010     (base 16)		JEOL SYSTEM TECHNOLOGY CO. LTD
+				3-1-2 Musashino
+				Akishima-shi  Tokyo  196-8558
+				JP
+
+00-20-9F   (hex)		MERCURY COMPUTER SYSTEMS, INC.
+00209F     (base 16)		MERCURY COMPUTER SYSTEMS, INC.
+				199 RIVERNECK ROAD
+				CHELMSFORD  MA  01824
+				US
+
+00-A0-73   (hex)		COM21, INC.
+00A073     (base 16)		COM21, INC.
+				2113 LANDINGS DRIVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-A0-3A   (hex)		KUBOTEK CORPORATION
+00A03A     (base 16)		KUBOTEK CORPORATION
+				56 NISHIAKETA-CHO, HIGASHIKUJO
+				    
+				JP
+
+00-A0-B2   (hex)		SHIMA SEIKI
+00A0B2     (base 16)		SHIMA SEIKI
+				85, SAKATA WAKAYAMA-CITY
+				    
+				JP
+
+00-A0-8B   (hex)		ASTON ELECTRONIC DESIGNS LTD.
+00A08B     (base 16)		ASTON ELECTRONIC DESIGNS LTD.
+				123/127 DEEPCUT BRIDGE ROAD
+				    ENGLAND
+				GB
+
+00-A0-97   (hex)		JC INFORMATION SYSTEMS
+00A097     (base 16)		JC INFORMATION SYSTEMS
+				4487 TECHNOLOGY DRIVE
+				FREMONT  CA  94538-6343
+				US
+
+00-A0-27   (hex)		FIREPOWER SYSTEMS, INC.
+00A027     (base 16)		FIREPOWER SYSTEMS, INC.
+				190 INDEPENDENCE DRIVE
+				MENLO PARK  CA  94025
+				US
+
+00-A0-46   (hex)		SCITEX CORP. LTD.
+00A046     (base 16)		SCITEX CORP. LTD.
+				P.O.BOX 330
+				    
+				IL
+
+00-A0-D4   (hex)		RADIOLAN,  INC.
+00A0D4     (base 16)		RADIOLAN,  INC.
+				454 DEGUIGNE DRIVE - STE
+				SUNNYVALE  CA  94086
+				US
+
+00-A0-92   (hex)		H. BOLLMANN MANUFACTURERS, LTD
+00A092     (base 16)		H. BOLLMANN MANUFACTURERS, LTD
+				26 VICTORIA WAY
+				  ENGLAND  
+				GB
+
+00-20-0D   (hex)		CARL ZEISS
+00200D     (base 16)		CARL ZEISS
+				POSTFACH 1380
+				    
+				DE
+
+00-20-2D   (hex)		TAIYO CORPORATION
+00202D     (base 16)		TAIYO CORPORATION
+				1-2-6 SANNOH, OHTA-KU
+				  143  
+				JP
+
+00-20-91   (hex)		J125, NATIONAL SECURITY AGENCY
+002091     (base 16)		J125, NATIONAL SECURITY AGENCY
+				9800 SAVAGE ROAD
+				FT. MEADE  MD  20755-6000
+				US
+
+00-20-BD   (hex)		NIOBRARA R & D CORPORATION
+0020BD     (base 16)		NIOBRARA R & D CORPORATION
+				PO BOX 3418
+				JOPLIN  MO  64803-3418
+				US
+
+00-20-54   (hex)		Sycamore Networks
+002054     (base 16)		Sycamore Networks
+				220 Mill Rd
+				Chelmsford  MA  01824
+				US
+
+00-20-A7   (hex)		PAIRGAIN TECHNOLOGIES, INC.
+0020A7     (base 16)		PAIRGAIN TECHNOLOGIES, INC.
+				14402 FRANKLIN AVENUE
+				TUSTIN  CA  92680-7013
+				US
+
+00-20-55   (hex)		ALTECH CO., LTD.
+002055     (base 16)		ALTECH CO., LTD.
+				OHISHI BLDG., 2-23-11
+				 TOKYO 116    
+				JP
+
+00-20-0A   (hex)		SOURCE-COMM CORP.
+00200A     (base 16)		SOURCE-COMM CORP.
+				25020 W. AVENUE STANFORD
+				VALENCIA  CA  91355
+				US
+
+00-20-CF   (hex)		TEST & MEASUREMENT SYSTEMS INC
+0020CF     (base 16)		TEST & MEASUREMENT SYSTEMS INC
+				2045 SITKA COURT
+				LOVELAND  CO  80538
+				US
+
+00-20-B4   (hex)		TERMA ELEKTRONIK AS
+0020B4     (base 16)		TERMA ELEKTRONIK AS
+				HOVMARKEN 4,
+				DK-8520 LYSTRUP    
+				DK
+
+00-20-E4   (hex)		HSING TECH ENTERPRISE CO., LTD
+0020E4     (base 16)		HSING TECH ENTERPRISE CO., LTD
+				NO. 2, LANE 128, SEC. 2
+				TEIPEI,    
+				TW
+
+00-20-6C   (hex)		EVERGREEN TECHNOLOGY CORP.
+00206C     (base 16)		EVERGREEN TECHNOLOGY CORP.
+				231 EMERSON STREET
+				PALO ALTO  CA  94301
+				US
+
+00-20-5E   (hex)		CASTLE ROCK, INC.
+00205E     (base 16)		CASTLE ROCK, INC.
+				20 SOUTH SANTA CRUZ AVE.
+				LOS GATOS  CA  95030
+				US
+
+00-20-12   (hex)		CAMTRONICS MEDICAL SYSTEMS
+002012     (base 16)		CAMTRONICS MEDICAL SYSTEMS
+				P.O. BOX 950
+				HARTLAND  WI  53029
+				US
+
+00-20-75   (hex)		MOTOROLA COMMUNICATION ISRAEL
+002075     (base 16)		MOTOROLA COMMUNICATION ISRAEL
+				3 KREMENETSKI STREET
+				TEL-AVIV  61250    
+				IL
+
+00-20-A5   (hex)		API ENGINEERING
+0020A5     (base 16)		API ENGINEERING
+				2689 POPLARWOOD WAY
+				SAN JOSE  CA  95132
+				US
+
+00-20-64   (hex)		PROTEC MICROSYSTEMS, INC.
+002064     (base 16)		PROTEC MICROSYSTEMS, INC.
+				297 LABROSSE
+				POINTE-CLAIRE, QUEBEC H9R 1A3    
+				CA
+
+00-20-33   (hex)		SYNAPSE TECHNOLOGIES, INC.
+002033     (base 16)		SYNAPSE TECHNOLOGIES, INC.
+				4822 ALBEMARLE ROAD, #104
+				CHARLOTTE  NC  28205
+				US
+
+00-20-CB   (hex)		PRETEC ELECTRONICS CORP.
+0020CB     (base 16)		PRETEC ELECTRONICS CORP.
+				39899 BALENTINE DR.
+				NEWARK  CA  94560
+				US
+
+00-20-EB   (hex)		CINCINNATI MICROWAVE, INC.
+0020EB     (base 16)		CINCINNATI MICROWAVE, INC.
+				ONE MICROWAVE PLAZA
+				CINCINNATI  OH  45249
+				US
+
+00-20-A0   (hex)		OA LABORATORY CO., LTD.
+0020A0     (base 16)		OA LABORATORY CO., LTD.
+				228 KAMIMACHIYA KAMAKURA
+				    
+				JP
+
+00-20-E2   (hex)		INFORMATION RESOURCE ENGINEERING
+0020E2     (base 16)		INFORMATION RESOURCE ENGINEERING
+				8029 CORPORATE DRIVE
+				BALTIMORE  MD  21236
+				US
+
+00-20-07   (hex)		SFA, INC.
+002007     (base 16)		SFA, INC.
+				1401 MCCORMICK DRIVE
+				LANDOVER  MD  20785
+				US
+
+00-20-5C   (hex)		InterNet Systems of Florida, Inc.
+00205C     (base 16)		InterNet Systems of Florida, Inc.
+				P.O. BOX 578
+				CRESTVIEW  FL  32536
+				US
+
+00-20-A2   (hex)		GALCOM NETWORKING LTD.
+0020A2     (base 16)		GALCOM NETWORKING LTD.
+				P.O. BOX 1568
+				RAMAT HASHARON 47113    
+				IL
+
+00-20-31   (hex)		Tattile SRL 
+002031     (base 16)		Tattile SRL 
+				AM PESTALOZZIRING 24
+				D-91058 ERLANGEN    
+				DE
+
+00-20-D0   (hex)		VERSALYNX CORPORATION
+0020D0     (base 16)		VERSALYNX CORPORATION
+				8950 CARLEY CIRCLE
+				SAN DIEGO  CA  92126
+				US
+
+00-20-B9   (hex)		METRICOM, INC.
+0020B9     (base 16)		METRICOM, INC.
+				980 UNIVERSITY AVENUE
+				LOS GATOS  CA  95030
+				US
+
+00-20-39   (hex)		SCINETS
+002039     (base 16)		SCINETS
+				1575 TENAKA - STE# N8
+				SUNNYVALE  CA  94087
+				US
+
+00-20-72   (hex)		WORKLINK INNOVATIONS
+002072     (base 16)		WORKLINK INNOVATIONS
+				2452 ARMSTRONG STREET
+				LIVERMORE  CA  9455O
+				US
+
+00-20-EC   (hex)		TECHWARE SYSTEMS CORP.
+0020EC     (base 16)		TECHWARE SYSTEMS CORP.
+				#100 - 12051 HORSESHOE WAY
+				  V7A  4V4
+				CA
+
+00-20-6E   (hex)		XACT, INC.
+00206E     (base 16)		XACT, INC.
+				P.O. BOX 55
+				ARGYLE  TX  76226
+				US
+
+00-20-F1   (hex)		ALTOS INDIA LIMITED
+0020F1     (base 16)		ALTOS INDIA LIMITED
+				D-60, OKLHLA INDUSTRIAL
+				    
+				IN
+
+00-20-41   (hex)		DATA NET
+002041     (base 16)		DATA NET
+				SUWON P.O. BOX 106, SUWON
+				  KOREA  440-600
+				KR
+
+00-20-76   (hex)		REUDO CORPORATION
+002076     (base 16)		REUDO CORPORATION
+				4-1-10 SHINSAN
+				    
+				JP
+
+00-20-E8   (hex)		DATATREK CORPORATION
+0020E8     (base 16)		DATATREK CORPORATION
+				4505 WYLAND DRIVE
+				ELKHART  IN  46516
+				US
+
+00-20-C5   (hex)		EAGLE TECHNOLOGY
+0020C5     (base 16)		EAGLE TECHNOLOGY
+				2865 ZANKER ROAD
+				SAN JOSE  CA  95134
+				US
+
+00-20-09   (hex)		PACKARD BELL ELEC., INC.
+002009     (base 16)		PACKARD BELL ELEC., INC.
+				9425 CANOGA AVENUE
+				CHATSWORTH  CA  913211
+				US
+
+00-20-27   (hex)		MING FORTUNE INDUSTRY CO., LTD
+002027     (base 16)		MING FORTUNE INDUSTRY CO., LTD
+				4F, NO. 800 CHUNG CHENG RD,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-20-8A   (hex)		SONIX COMMUNICATIONS, LTD.
+00208A     (base 16)		SONIX COMMUNICATIONS, LTD.
+				WILKINSON ROAD
+				    ENGLAND
+				GB
+
+00-20-D2   (hex)		RAD DATA COMMUNICATIONS, LTD.
+0020D2     (base 16)		RAD DATA COMMUNICATIONS, LTD.
+				8 HANECHOSHET STREET
+				    
+				KZ
+
+00-20-02   (hex)		SERITECH ENTERPRISE CO., LTD.
+002002     (base 16)		SERITECH ENTERPRISE CO., LTD.
+				FL. 182, NO. 531-1
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-20-4B   (hex)		AUTOCOMPUTER CO., LTD.
+00204B     (base 16)		AUTOCOMPUTER CO., LTD.
+				NO. 18, PEI YUAN ROAD
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-20-EA   (hex)		EFFICIENT NETWORKS, INC.
+0020EA     (base 16)		EFFICIENT NETWORKS, INC.
+				4201 SPRING VALLEY ROAD
+				DALLAS  TX  75244-3666
+				US
+
+00-20-6A   (hex)		OSAKA COMPUTER CORP.
+00206A     (base 16)		OSAKA COMPUTER CORP.
+				2-8 KOYACHOU NEYAGAW-SHI
+				    
+				JP
+
+00-20-DB   (hex)		XNET TECHNOLOGY, INC.
+0020DB     (base 16)		XNET TECHNOLOGY, INC.
+				426 S. HILLVIEW DRIVE
+				MILPITAS  CA  95035
+				US
+
+00-20-BB   (hex)		ZAX CORPORATION
+0020BB     (base 16)		ZAX CORPORATION
+				20-12 OGIKUBO 5-CHOME
+				  167  
+				JP
+
+00-20-A8   (hex)		SAST TECHNOLOGY CORP.
+0020A8     (base 16)		SAST TECHNOLOGY CORP.
+				225 OLD NEW BRUNSWICK RD.
+				PISCATAWAY  NJ  08854
+				US
+
+00-20-45   (hex)		ION Networks, Inc.
+002045     (base 16)		ION Networks, Inc.
+				1551 South Washington Ave.
+				Piscataway  NJ  08854
+				US
+
+00-20-49   (hex)		COMTRON, INC.
+002049     (base 16)		COMTRON, INC.
+				SANCATHERINA BLDG.
+				TOKYO  160  
+				JP
+
+00-20-50   (hex)		KOREA COMPUTER INC.
+002050     (base 16)		KOREA COMPUTER INC.
+				469, DAEHEUNG-DONG
+				    KOREA
+				KR
+
+00-20-84   (hex)		OCE PRINTING SYSTEMS, GMBH
+002084     (base 16)		OCE PRINTING SYSTEMS, GMBH
+				SIEMENSALLEE 2
+				    
+				DE
+
+00-20-8C   (hex)		GALAXY NETWORKS, INC.
+00208C     (base 16)		GALAXY NETWORKS, INC.
+				9348 DE SOTO AVENUE
+				CHATSWORTH  CA  91311
+				US
+
+00-20-2C   (hex)		WELLTRONIX CO., LTD.
+00202C     (base 16)		WELLTRONIX CO., LTD.
+				3F, NO. 36-1, HWANG HSI STREET
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-20-21   (hex)		ALGORITHMS SOFTWARE PVT. LTD.
+002021     (base 16)		ALGORITHMS SOFTWARE PVT. LTD.
+				83 JOLLY MAKER CHAMBERS II
+				    
+				IN
+
+00-C0-F9   (hex)		Artesyn Embedded Technologies
+00C0F9     (base 16)		Artesyn Embedded Technologies
+				2900 S. Diablo Way Suite 190
+				Tempe  AZ  85282
+				US
+
+00-C0-75   (hex)		XANTE CORPORATION
+00C075     (base 16)		XANTE CORPORATION
+				2559 EMOGENE STREET
+				MOBILE  AL  36606
+				US
+
+00-1C-7C   (hex)		PERQ SYSTEMS CORPORATION
+001C7C     (base 16)		PERQ SYSTEMS CORPORATION
+				2600 LIBERTY AVENUE
+				PITTSBURGH  PA  15230
+				US
+
+00-C0-39   (hex)		Teridian Semiconductor Corporation
+00C039     (base 16)		Teridian Semiconductor Corporation
+				6440 Oak Canyon
+				Irvine  CA  92618
+				US
+
+00-C0-A9   (hex)		BARRON MCCANN LTD.
+00C0A9     (base 16)		BARRON MCCANN LTD.
+				BEMAC HOUSE
+				  UNITED  KINGDOM
+				GB
+
+00-C0-4B   (hex)		CREATIVE MICROSYSTEMS
+00C04B     (base 16)		CREATIVE MICROSYSTEMS
+				9, AVENUE DU CANADA
+				91966  LES  ULIS---FRANC
+				FR
+
+00-C0-B9   (hex)		FUNK SOFTWARE, INC.
+00C0B9     (base 16)		FUNK SOFTWARE, INC.
+				222 THIRD STREET
+				CAMBRIDGE  MA  02142
+				US
+
+00-C0-15   (hex)		NEW MEDIA CORPORATION
+00C015     (base 16)		NEW MEDIA CORPORATION
+				15375 BARRANCA PARKWAY
+				IRVINE  CA  92718
+				US
+
+00-C0-83   (hex)		TRACE MOUNTAIN PRODUCTS, INC.
+00C083     (base 16)		TRACE MOUNTAIN PRODUCTS, INC.
+				1040 EAST BROKAW ROAD
+				SAN JOSE  CA  95131
+				US
+
+00-C0-94   (hex)		VMX INC.
+00C094     (base 16)		VMX INC.
+				2115 O'NEL DRIVE
+				SAN JOSE  CA  95131
+				US
+
+00-C0-19   (hex)		LEAP TECHNOLOGY, INC.
+00C019     (base 16)		LEAP TECHNOLOGY, INC.
+				20
+				BURLINGTON  MA  01803
+				US
+
+00-C0-CF   (hex)		IMATRAN VOIMA OY
+00C0CF     (base 16)		IMATRAN VOIMA OY
+				IVO
+				    
+				FI
+
+00-C0-7D   (hex)		RISC DEVELOPMENTS LTD.
+00C07D     (base 16)		RISC DEVELOPMENTS LTD.
+				117 HATFIELD ROAD
+				    ENGLAND
+				GB
+
+00-C0-43   (hex)		STRATACOM
+00C043     (base 16)		STRATACOM
+				1400 PARKMOOR AVENUE
+				SAN JOSE  CA  95126
+				US
+
+00-C0-B5   (hex)		CORPORATE NETWORK SYSTEMS,INC.
+00C0B5     (base 16)		CORPORATE NETWORK SYSTEMS,INC.
+				5711 SIX FORKS ROAD--STE #306
+				RALEIGH  NC  27609
+				US
+
+00-C0-ED   (hex)		US ARMY ELECTRONIC
+00C0ED     (base 16)		US ARMY ELECTRONIC
+				PROVING GROUND
+				SIERRA VISTA  AZ  85635
+				US
+
+00-C0-32   (hex)		I-CUBED LIMITED
+00C032     (base 16)		I-CUBED LIMITED
+				UNIT J1, THE POADDOCKS
+				CB1 4DH  CB1 4DH  ENGLAND
+				GB
+
+00-C0-A5   (hex)		DICKENS DATA SYSTEMS
+00C0A5     (base 16)		DICKENS DATA SYSTEMS
+				1175 NORTHMEADOW PKWY-STE #150
+				ROSWELL  GA  30076
+				US
+
+00-C0-EF   (hex)		ABIT CORPORATION
+00C0EF     (base 16)		ABIT CORPORATION
+				29-11 HIRAOKA-CHO
+				  192  
+				JP
+
+00-C0-61   (hex)		SOLECTEK CORPORATION
+00C061     (base 16)		SOLECTEK CORPORATION
+				6370 NANCY RIDGE DR.-STE.#109
+				SAN DIEGO  CA  92121
+				US
+
+00-C0-AD   (hex)		MARBEN COMMUNICATION SYSTEMS
+00C0AD     (base 16)		MARBEN COMMUNICATION SYSTEMS
+				1 RUE DU BOIS CHALAND
+				    
+				FR
+
+00-C0-7F   (hex)		NUPON COMPUTING CORP.
+00C07F     (base 16)		NUPON COMPUTING CORP.
+				1391 WARNER AVE., -SUITE
+				TUSTIN  CA  92680
+				US
+
+00-C0-57   (hex)		MYCO ELECTRONICS
+00C057     (base 16)		MYCO ELECTRONICS
+				MUSSERONGRAND 1G
+				    
+				SE
+
+00-C0-56   (hex)		SOMELEC
+00C056     (base 16)		SOMELEC
+				BP 7010 - 95050
+				    
+				FR
+
+00-C0-27   (hex)		CIPHER SYSTEMS, INC.
+00C027     (base 16)		CIPHER SYSTEMS, INC.
+				22115 NW Imbrie Dr #285
+				Hillsboro  OR  97124
+				US
+
+00-C0-5C   (hex)		ELONEX PLC
+00C05C     (base 16)		ELONEX PLC
+				2 APSLEY WAY
+				  UNITED  KINGDOM
+				GB
+
+00-C0-28   (hex)		JASCO CORPORATION
+00C028     (base 16)		JASCO CORPORATION
+				2967-5 ISHIKAWA-CHO,
+				    
+				JP
+
+00-C0-8D   (hex)		TRONIX PRODUCT DEVELOPMENT
+00C08D     (base 16)		TRONIX PRODUCT DEVELOPMENT
+				4908 E. MCDOWELL RD. STE.#100
+				PHOENIX  AZ  85008
+				US
+
+00-C0-2A   (hex)		OHKURA ELECTRIC CO., LTD.
+00C02A     (base 16)		OHKURA ELECTRIC CO., LTD.
+				2-90-20 SHIRAKO WAKO CITY
+				  351-01  
+				JP
+
+00-C0-FC   (hex)		ELASTIC REALITY, INC.
+00C0FC     (base 16)		ELASTIC REALITY, INC.
+				925 STEWART STREET
+				MADISON  WI  53713
+				US
+
+00-C0-BB   (hex)		FORVAL CREATIVE, INC.
+00C0BB     (base 16)		FORVAL CREATIVE, INC.
+				3-27-12 HONGO
+				    
+				JP
+
+00-C0-E0   (hex)		DSC COMMUNICATION CORP.
+00C0E0     (base 16)		DSC COMMUNICATION CORP.
+				1000 COIT ROAD,  MS#ADVP 3
+				PLANO  TX  75075
+				US
+
+00-C0-5B   (hex)		NETWORKS NORTHWEST, INC.
+00C05B     (base 16)		NETWORKS NORTHWEST, INC.
+				P.O. BOX 1188
+				ISSAQUAH  WA  98027
+				US
+
+00-C0-08   (hex)		SECO SRL
+00C008     (base 16)		SECO SRL
+				VIA CALAMANDREI 91
+				    
+				IT
+
+00-C0-B7   (hex)		AMERICAN POWER CONVERSION CORP
+00C0B7     (base 16)		AMERICAN POWER CONVERSION CORP
+				267 BOSTON ROAD #2
+				NORTH BILLERICA  MA  01862
+				US
+
+00-C0-D3   (hex)		OLYMPUS IMAGE SYSTEMS, INC.
+00C0D3     (base 16)		OLYMPUS IMAGE SYSTEMS, INC.
+				15271 BARRANCA PARKWAY
+				IRVINE  CA  92718-2201
+				US
+
+00-C0-E8   (hex)		PLEXCOM, INC.
+00C0E8     (base 16)		PLEXCOM, INC.
+				65 MORELAND ROADENUYE
+				SIMI VALLEY  CA  93065
+				US
+
+00-C0-DA   (hex)		NICE SYSTEMS LTD.
+00C0DA     (base 16)		NICE SYSTEMS LTD.
+				3 TEVUOT HA'ARETZ ST
+				    
+				IL
+
+00-C0-D1   (hex)		COMTREE TECHNOLOGY CORPORATION
+00C0D1     (base 16)		COMTREE TECHNOLOGY CORPORATION
+				5F-7, NO. 1, FU-HSING NORTH RD
+				  TAIWAN  R.O.C.
+				CN
+
+00-C0-38   (hex)		RASTER IMAGE PROCESSING SYSTEM
+00C038     (base 16)		RASTER IMAGE PROCESSING SYSTEM
+				4665 NAUTILUS COURT SOUTH
+				BOULDER  CO  80301
+				US
+
+00-40-9B   (hex)		HAL COMPUTER SYSTEMS INC.
+00409B     (base 16)		HAL COMPUTER SYSTEMS INC.
+				1315 DELL AVENUE
+				CAMPBELL  CA  95008
+				US
+
+00-40-EB   (hex)		MARTIN MARIETTA CORPORATION
+0040EB     (base 16)		MARTIN MARIETTA CORPORATION
+				12506 LAKE UNDERHILL
+				ORLANDO  FL  32825
+				US
+
+00-40-BD   (hex)		STARLIGHT NETWORKS, INC.
+0040BD     (base 16)		STARLIGHT NETWORKS, INC.
+				444 CASTRO STREET STE
+				MOUNTAIN VIEW  CA  94041
+				US
+
+00-40-ED   (hex)		NETWORK CONTROLS INT'NATL INC.
+0040ED     (base 16)		NETWORK CONTROLS INT'NATL INC.
+				9 WOODLAWN GREEN
+				CHARLOTTE  NC  28217
+				US
+
+00-40-21   (hex)		RASTER GRAPHICS
+004021     (base 16)		RASTER GRAPHICS
+				285 N. WOLFE ROAD
+				SUNNYVALE  CA  94086
+				US
+
+00-40-C1   (hex)		BIZERBA-WERKE WILHEIM KRAUT
+0040C1     (base 16)		BIZERBA-WERKE WILHEIM KRAUT
+				GMBH & CO. KG,
+				D-7460 BALINGEN  D-7460 BALINGEN  
+				DE
+
+00-40-E1   (hex)		MARNER INTERNATIONAL, INC.
+0040E1     (base 16)		MARNER INTERNATIONAL, INC.
+				1617 93RD LANE NE
+				BLAINE  MN  55449
+				US
+
+00-40-FE   (hex)		SYMPLEX COMMUNICATIONS
+0040FE     (base 16)		SYMPLEX COMMUNICATIONS
+				5 RESEARCH DRIVE
+				ANN ARBOR  MI  48103
+				US
+
+00-40-E5   (hex)		SYBUS CORPORATION
+0040E5     (base 16)		SYBUS CORPORATION
+				2300 TALL PINE DRIVE-STE. #100
+				LARGO  FL  34641
+				US
+
+00-40-A5   (hex)		CLINICOMP INTL.
+0040A5     (base 16)		CLINICOMP INTL.
+				4510 EXECCUTIVE DRIVE-STE.#200
+				SAN DIEGO  CA  92121
+				US
+
+00-40-05   (hex)		ANI COMMUNICATIONS INC.
+004005     (base 16)		ANI COMMUNICATIONS INC.
+				8 ANZIO
+				IRVINE  CA  92714
+				US
+
+00-40-D9   (hex)		AMERICAN MEGATRENDS INC.
+0040D9     (base 16)		AMERICAN MEGATRENDS INC.
+				6145F N BELT PARKWAY
+				NORCROSS  GA  30071
+				US
+
+00-40-4C   (hex)		HYPERTEC PTY LTD.
+00404C     (base 16)		HYPERTEC PTY LTD.
+				P.O. BOX 1782
+				    
+				AU
+
+00-C0-30   (hex)		INTEGRATED ENGINEERING B. V.
+00C030     (base 16)		INTEGRATED ENGINEERING B. V.
+				ELLERMANSTRAAT 15
+				  THE  
+				NL
+
+00-C0-A6   (hex)		EXICOM AUSTRALIA PTY. LTD
+00C0A6     (base 16)		EXICOM AUSTRALIA PTY. LTD
+				44-46 MANDARIN STREET
+				    
+				AU
+
+00-C0-CB   (hex)		CONTROL TECHNOLOGY CORPORATION
+00C0CB     (base 16)		CONTROL TECHNOLOGY CORPORATION
+				25 SOUTH STREET
+				HOPKINTON  MA  01748
+				US
+
+00-C0-EB   (hex)		SEH COMPUTERTECHNIK GMBH
+00C0EB     (base 16)		SEH COMPUTERTECHNIK GMBH
+				Suedring 11
+				    
+				DE
+
+00-40-DB   (hex)		ADVANCED TECHNICAL SOLUTIONS
+0040DB     (base 16)		ADVANCED TECHNICAL SOLUTIONS
+				8050 SEMINOLE OFFICE CENTER
+				SEMINOLE  FL  34642
+				US
+
+00-C0-92   (hex)		MENNEN MEDICAL INC.
+00C092     (base 16)		MENNEN MEDICAL INC.
+				10123 MAIN STREET
+				CLARENCE  NY  14031-2095
+				US
+
+00-C0-52   (hex)		BURR-BROWN
+00C052     (base 16)		BURR-BROWN
+				P.O. BOX 11400
+				TUCSON  AZ  85734-1400
+				US
+
+00-40-0E   (hex)		MEMOTEC, INC.
+00400E     (base 16)		MEMOTEC, INC.
+				7755 Henri-Bourassa
+				MONTREAL, QUEBEC     H4S 1P7
+				CA
+
+00-C0-3D   (hex)		WIESEMANN & THEIS GMBH
+00C03D     (base 16)		WIESEMANN & THEIS GMBH
+				WITTENER STR. 312
+				    
+				DE
+
+00-40-C8   (hex)		MILAN TECHNOLOGY CORPORATION
+0040C8     (base 16)		MILAN TECHNOLOGY CORPORATION
+				894 ROSS DRIVE--STE #105
+				SUNNYVALE  CA  94089
+				US
+
+00-40-BA   (hex)		ALLIANT COMPUTER SYSTEMS CORP.
+0040BA     (base 16)		ALLIANT COMPUTER SYSTEMS CORP.
+				ONE MONARCH DRIVE
+				LITTLETON  MA  01460
+				US
+
+00-40-38   (hex)		TALENT ELECTRIC INCORPORATED
+004038     (base 16)		TALENT ELECTRIC INCORPORATED
+				3RD FL., NO. 260, PA TEH ROAD
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-40-D8   (hex)		OCEAN OFFICE AUTOMATION LTD.
+0040D8     (base 16)		OCEAN OFFICE AUTOMATION LTD.
+				4TH & 5TH FLOOR, KADER BLDG.
+				  HONG  KONG
+				HK
+
+00-40-88   (hex)		MOBIUS TECHNOLOGIES, INC.
+004088     (base 16)		MOBIUS TECHNOLOGIES, INC.
+				5835 DOYLE STREET
+				EMERYVILLE  CA  94608
+				US
+
+00-40-32   (hex)		DIGITAL COMMUNICATIONS
+004032     (base 16)		DIGITAL COMMUNICATIONS
+				ASSOCIATES, INC.
+				SAN JOSE  CA  95131
+				US
+
+00-40-C2   (hex)		APPLIED COMPUTING DEVICES
+0040C2     (base 16)		APPLIED COMPUTING DEVICES
+				ALEPH PARK
+				TERRE HAUTE  IN  47802
+				US
+
+00-40-D4   (hex)		GAGE TALKER CORP.
+0040D4     (base 16)		GAGE TALKER CORP.
+				13680 NE 16TH STREET
+				BELLEVUE  WA  98005
+				US
+
+00-40-CE   (hex)		NET-SOURCE, INC.
+0040CE     (base 16)		NET-SOURCE, INC.
+				1265 EL CAMINO REAL
+				SANTA CLARA  CA  95050
+				US
+
+00-40-62   (hex)		E-SYSTEMS, INC./GARLAND DIV.
+004062     (base 16)		E-SYSTEMS, INC./GARLAND DIV.
+				P.O. BOX 660023
+				DALLAS  TX  75266-0023
+				US
+
+00-40-34   (hex)		BUSTEK CORPORATION
+004034     (base 16)		BUSTEK CORPORATION
+				4151 BURTON DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-40-1C   (hex)		AST RESEARCH, INC.
+00401C     (base 16)		AST RESEARCH, INC.
+				MS 2-78
+				IRVINE  CA  92618
+				US
+
+00-40-0F   (hex)		DATACOM TECHNOLOGIES
+00400F     (base 16)		DATACOM TECHNOLOGIES
+				11001 31ST PLACE WEST
+				EVERETT  WA  98204
+				US
+
+00-40-06   (hex)		SAMPO TECHNOLOGY CORPORATION
+004006     (base 16)		SAMPO TECHNOLOGY CORPORATION
+				26-2 TING-HU,
+				33334 TAIWAN  33334 TAIWAN  R.O.C.
+				TW
+
+00-80-AA   (hex)		MAXPEED
+0080AA     (base 16)		MAXPEED
+				1120 CHESS DRIVE
+				FOSTER CITY  CA  94404
+				US
+
+00-C0-50   (hex)		TOYO DENKI SEIZO K.K.
+00C050     (base 16)		TOYO DENKI SEIZO K.K.
+				4-6-32 HIGASHIKASHIWAGAYA
+				KANAGAWA  JAPAN  243-04
+				JP
+
+00-40-C6   (hex)		FIBERNET RESEARCH, INC.
+0040C6     (base 16)		FIBERNET RESEARCH, INC.
+				1 TARA BOULEVARD-#405
+				NASHUA  NH  03062
+				US
+
+00-40-47   (hex)		WIND RIVER SYSTEMS
+004047     (base 16)		WIND RIVER SYSTEMS
+				1010 ATLANTIC AVENUE
+				ALAMEDA  CA  94501
+				US
+
+00-40-50   (hex)		IRONICS, INCORPORATED
+004050     (base 16)		IRONICS, INCORPORATED
+				767 WARREN RD
+				ITHACA  N.Y.  14850
+				US
+
+00-80-92   (hex)		Silex Technology, Inc.
+008092     (base 16)		Silex Technology, Inc.
+				2-3-1 Hikaridai,
+				Kyoto    619-0237
+				JP
+
+00-80-93   (hex)		XYRON CORPORATION
+008093     (base 16)		XYRON CORPORATION
+				7864 LILY COURT
+				CUPERTINO  CA  95014
+				US
+
+00-80-5A   (hex)		TULIP COMPUTERS INTERNAT'L B.V
+00805A     (base 16)		TULIP COMPUTERS INTERNAT'L B.V
+				P.O. BOX 3333
+				  THE  
+				NL
+
+00-40-41   (hex)		FUJIKURA LTD.
+004041     (base 16)		FUJIKURA LTD.
+				1-5-1, KIBA, KOTO-KU
+				    
+				JP
+
+00-80-4E   (hex)		APEX COMPUTER COMPANY
+00804E     (base 16)		APEX COMPUTER COMPANY
+				4500 150TH AVENUE, NE
+				REDMOND  WA  98052
+				US
+
+00-80-55   (hex)		FERMILAB
+008055     (base 16)		FERMILAB
+				P.O. BOX 500, MS-234
+				BATAVIA  IL  60510
+				US
+
+00-80-2A   (hex)		TEST SYSTEMS & SIMULATIONS INC
+00802A     (base 16)		TEST SYSTEMS & SIMULATIONS INC
+				32429 INDUSTRIAL DRIVE
+				MADISON HEIGHTS  MI  48071-1528
+				US
+
+00-80-35   (hex)		TECHNOLOGY WORKS, INC.
+008035     (base 16)		TECHNOLOGY WORKS, INC.
+				4030 BRAKER LANE #350
+				AUSTIN  TX  78759
+				US
+
+00-80-7E   (hex)		SOUTHERN PACIFIC LTD.
+00807E     (base 16)		SOUTHERN PACIFIC LTD.
+				SANWA BLDG., 2-16-20
+				JAPAN  JAPAN  220
+				JP
+
+00-80-EF   (hex)		RATIONAL
+0080EF     (base 16)		RATIONAL
+				3320 SCOTT BOULEVARD
+				SANTA CLARA  CA  95054
+				US
+
+00-80-F0   (hex)		Panasonic Communications Co., Ltd.
+0080F0     (base 16)		Panasonic Communications Co., Ltd.
+				4-1-62 Minoshima Hakata Fukuoka
+				    812-8531
+				JP
+
+00-80-1D   (hex)		INTEGRATED INFERENCE MACHINES
+00801D     (base 16)		INTEGRATED INFERENCE MACHINES
+				1468 EAST KATELLA
+				ANAHEIM  CA  92805
+				US
+
+00-80-75   (hex)		PARSYTEC GMBH
+008075     (base 16)		PARSYTEC GMBH
+				JUELICHER STR. 338
+				  F.R.  
+				DE
+
+00-80-51   (hex)		FIBERMUX
+008051     (base 16)		FIBERMUX
+				9310 TOPANGA CANYON BLVD.
+				CHATSWORTH  CA  91311
+				US
+
+00-80-C6   (hex)		NATIONAL DATACOMM CORPORATION
+0080C6     (base 16)		NATIONAL DATACOMM CORPORATION
+				2F, 28, INDUSTRY EAST 9TH RD.
+				TAIWAN  30077  TAIWAN  30077  R.O.C.
+				TW
+
+00-80-C0   (hex)		PENRIL DATACOMM
+0080C0     (base 16)		PENRIL DATACOMM
+				1300 QUINCE ORCHARD BLVD.
+				GAITHERSBURG  MD  20878
+				US
+
+00-80-2E   (hex)		CASTLE ROCK COMPUTING
+00802E     (base 16)		CASTLE ROCK COMPUTING
+				20837 BOYCE LANE
+				SARATOGA  CA  95070-4806
+				US
+
+00-80-F2   (hex)		RAYCOM SYSTEMS INC
+0080F2     (base 16)		RAYCOM SYSTEMS INC
+				16525 SHERMAN WAY #C-8
+				VAN NUYS  CA  91406
+				US
+
+00-80-BD   (hex)		THE FURUKAWA ELECTRIC CO., LTD
+0080BD     (base 16)		THE FURUKAWA ELECTRIC CO., LTD
+				6-1, MARUNOUCHI 2-CHOME
+				  100  
+				JP
+
+00-80-25   (hex)		Telit Wireless Solutions GmbH
+008025     (base 16)		Telit Wireless Solutions GmbH
+				Mendelssohnstrasse15D
+				Hamburg    22761
+				DE
+
+00-80-EA   (hex)		ADVA Optical Networking Ltd.
+0080EA     (base 16)		ADVA Optical Networking Ltd.
+				ADVAntage House
+				York    YO30 4RY
+				GB
+
+00-00-1E   (hex)		TELSIST INDUSTRIA ELECTRONICA
+00001E     (base 16)		TELSIST INDUSTRIA ELECTRONICA
+				RUA VILHENA DE MORAES, 380
+				    
+				BR
+
+00-00-50   (hex)		RADISYS CORPORATION
+000050     (base 16)		RADISYS CORPORATION
+				15025 S.W. KOLL PARKWAY
+				BEAVERTON  OR  97006-6056
+				US
+
+00-80-04   (hex)		ANTLOW COMMUNICATIONS, LTD.
+008004     (base 16)		ANTLOW COMMUNICATIONS, LTD.
+				4 COLTHROP WAY
+				    ENGLAND
+				GB
+
+00-80-D0   (hex)		COMPUTER PERIPHERALS, INC.
+0080D0     (base 16)		COMPUTER PERIPHERALS, INC.
+				667 RANCHO CONEJO BLVD.
+				NEWBURY PARK  CA  91320
+				US
+
+00-80-24   (hex)		KALPANA, INC.
+008024     (base 16)		KALPANA, INC.
+				1154 EAST ARQUES AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-80-40   (hex)		JOHN FLUKE MANUFACTURING CO.
+008040     (base 16)		JOHN FLUKE MANUFACTURING CO.
+				P.O. BOX C9090-M/S 244F
+				EVERETT  WA  98206
+				US
+
+00-80-21   (hex)		Alcatel Canada Inc.
+008021     (base 16)		Alcatel Canada Inc.
+				349 Terry Fox Drive
+				Kanata  Ontario  K2K 2V6
+				CA
+
+00-80-E8   (hex)		CUMULUS CORPORATIION
+0080E8     (base 16)		CUMULUS CORPORATIION
+				23500 MERCANTILE ROAD
+				CLEVELAND  OH  44122
+				US
+
+00-80-69   (hex)		COMPUTONE SYSTEMS
+008069     (base 16)		COMPUTONE SYSTEMS
+				1100 NORTHMEADOW PARKWAY
+				ROSWELL  GA  30076
+				US
+
+00-80-0D   (hex)		VOSSWINKEL F.U.
+00800D     (base 16)		VOSSWINKEL F.U.
+				AM JOSTENHOF 15
+				    
+				DE
+
+00-80-D1   (hex)		KIMTRON CORPORATION
+0080D1     (base 16)		KIMTRON CORPORATION
+				1709 JUNCTION COURT
+				SAN JOSE  CA  95112
+				US
+
+00-80-42   (hex)		Artesyn Embedded Technologies
+008042     (base 16)		Artesyn Embedded Technologies
+				2900 S. Diablo Way
+				Tempe  AZ  85282
+				US
+
+00-80-9A   (hex)		NOVUS NETWORKS LTD
+00809A     (base 16)		NOVUS NETWORKS LTD
+				JOHN SCOTT HOUSE
+				    ENGLAND
+				GB
+
+00-80-00   (hex)		MULTITECH SYSTEMS, INC.
+008000     (base 16)		MULTITECH SYSTEMS, INC.
+				2205 WOODALE DRIVE
+				MOUNDS VIEW  MN  55112
+				US
+
+00-80-ED   (hex)		IQ TECHNOLOGIES, INC.
+0080ED     (base 16)		IQ TECHNOLOGIES, INC.
+				11811 NE FIRST STREET
+				BELLEVUE  WA  98005
+				US
+
+00-80-4A   (hex)		PRO-LOG
+00804A     (base 16)		PRO-LOG
+				12 UPPER RAGSDALE DRIVE
+				MONTEREY  CA  93940
+				US
+
+00-00-66   (hex)		TALARIS SYSTEMS, INC.
+000066     (base 16)		TALARIS SYSTEMS, INC.
+				11339 SORRENTO VALLEY ROAD
+				SAN DIEGO  CA  92121
+				US
+
+00-00-49   (hex)		APRICOT COMPUTERS, LTD
+000049     (base 16)		APRICOT COMPUTERS, LTD
+				90 VINCENT DRIVE
+				    ENGLAND
+				GB
+
+00-00-FA   (hex)		MICROSAGE COMPUTER SYSTEMS INC
+0000FA     (base 16)		MICROSAGE COMPUTER SYSTEMS INC
+				680 SOUTH ROCK BLVD
+				RENO  NE  89502
+				US
+
+00-00-D4   (hex)		PURE DATA LTD.
+0000D4     (base 16)		PURE DATA LTD.
+				200 WEST BEAVER CREEK ROAD
+				L4B  1B4  
+				CA
+
+00-00-19   (hex)		APPLIED DYNAMICS INTERNATIONAL
+000019     (base 16)		APPLIED DYNAMICS INTERNATIONAL
+				3800 STONE SCHOOL ROAD
+				ANN ARBOR  MI  48104-2499
+				US
+
+00-00-15   (hex)		DATAPOINT CORPORATION
+000015     (base 16)		DATAPOINT CORPORATION
+				9725 DATAPOINT DRIVE
+				SAN ANTONIO  TX  78284
+				US
+
+00-00-1C   (hex)		BELL TECHNOLOGIES
+00001C     (base 16)		BELL TECHNOLOGIES
+				330 WARREN AVENUE
+				FREMONT  CA  94539
+				US
+
+00-00-34   (hex)		NETWORK RESOURCES CORPORATION
+000034     (base 16)		NETWORK RESOURCES CORPORATION
+				61 EAST DAGGETT DRIVE
+				SAN JOSE  CA  95134
+				US
+
+00-00-22   (hex)		VISUAL TECHNOLOGY INC.
+000022     (base 16)		VISUAL TECHNOLOGY INC.
+				1703 MIDDLESEX STREET
+				LOWELL  MA  01851
+				US
+
+00-00-B5   (hex)		DATABILITY SOFTWARE SYS. INC.
+0000B5     (base 16)		DATABILITY SOFTWARE SYS. INC.
+				ONE PALMER TERRACE
+				CARLSTADT  NJ  07072
+				US
+
+00-00-2F   (hex)		TIMEPLEX INC.
+00002F     (base 16)		TIMEPLEX INC.
+				530 CHESTNUT RIDGE ROAD
+				WOODCLIFF LAKE  NJ  07675
+				US
+
+00-00-B8   (hex)		SEIKOSHA CO., LTD.
+0000B8     (base 16)		SEIKOSHA CO., LTD.
+				SYSTEM EQUIPMENT DIVISION
+				    
+				JP
+
+00-00-E6   (hex)		APTOR PRODUITS DE COMM INDUST
+0000E6     (base 16)		APTOR PRODUITS DE COMM INDUST
+				61, CHEMIN DU VIEUX-CHENE
+				    
+				FR
+
+00-00-84   (hex)		SUPERNET
+000084     (base 16)		SUPERNET
+				846 DEL REY AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-00-9A   (hex)		RC COMPUTER A/S
+00009A     (base 16)		RC COMPUTER A/S
+				LAUTRUPBJERG 1
+				    
+				DK
+
+00-00-27   (hex)		JAPAN RADIO COMPANY
+000027     (base 16)		JAPAN RADIO COMPANY
+				LABORATORY
+				    
+				JP
+
+00-00-E8   (hex)		ACCTON TECHNOLOGY CORP.
+0000E8     (base 16)		ACCTON TECHNOLOGY CORP.
+				46750 FREMONT BLVD. #104
+				FREMONT  CA  94538
+				US
+
+00-00-4B   (hex)		ICL DATA OY
+00004B     (base 16)		ICL DATA OY
+				KUTOMOTIE 16-18
+				    
+				FI
+
+00-00-E0   (hex)		QUADRAM CORP.
+0000E0     (base 16)		QUADRAM CORP.
+				ONE QUAD WAY
+				NORCROSS  GA  30093
+				US
+
+00-00-AB   (hex)		LOGIC MODELING CORPORATION
+0000AB     (base 16)		LOGIC MODELING CORPORATION
+				1520 MCCANDLESS DRIVE
+				MILPITAS  CA  95035
+				US
+
+00-80-AC   (hex)		IMLOGIX, DIVISION OF GENESYS
+0080AC     (base 16)		IMLOGIX, DIVISION OF GENESYS
+				1900 SUMMIT TOWER BLVD.STE#770
+				ORLANDO  FL  32810
+				US
+
+00-00-4F   (hex)		LOGICRAFT, INC.
+00004F     (base 16)		LOGICRAFT, INC.
+				22 COTTON ROAD
+				NASHUA  NH  03063
+				US
+
+00-00-6F   (hex)		Madge Ltd.
+00006F     (base 16)		Madge Ltd.
+				Madge House
+				Maindenhead  Berkshire  SL6 2HP
+				GB
+
+00-00-78   (hex)		LABTAM LIMITED
+000078     (base 16)		LABTAM LIMITED
+				43 MALCOLM ROAD   P.O. BOX297
+				    
+				AU
+
+00-00-5A   (hex)		SysKonnect GmbH
+00005A     (base 16)		SysKonnect GmbH
+				SIEMENSSTRAßE 23
+				    
+				DE
+
+00-00-5B   (hex)		ELTEC ELEKTRONIK AG
+00005B     (base 16)		ELTEC ELEKTRONIK AG
+				Galileo-Galilei-Strasse 11
+				    
+				DE
+
+00-00-71   (hex)		ADRA SYSTEMS INC.
+000071     (base 16)		ADRA SYSTEMS INC.
+				59 TECHNOLOGY DRIVE
+				LOWELL  MA  01851
+				US
+
+00-00-73   (hex)		SIECOR CORPORATION
+000073     (base 16)		SIECOR CORPORATION
+				P.O. BOX 13625
+				RESEARCH TRIANGLE PK  NC  27709
+				US
+
+00-00-B9   (hex)		MCDONNELL DOUGLAS COMPUTER SYS
+0000B9     (base 16)		MCDONNELL DOUGLAS COMPUTER SYS
+				DIV MCDONNELL DOUGLAS INF SYS
+				    ENGLAND
+				GB
+
+00-00-BF   (hex)		SYMMETRIC COMPUTER SYSTEMS
+0000BF     (base 16)		SYMMETRIC COMPUTER SYSTEMS
+				1620 OAKLAND ROAD  SUITE D-200
+				SAN JOSE  CA  95131
+				US
+
+00-00-2D   (hex)		CHROMATICS INC
+00002D     (base 16)		CHROMATICS INC
+				2558 MOUNTAIN INDUSTRIAL BLVD
+				TUCKER  GA  30084
+				US
+
+00-00-18   (hex)		WEBSTER COMPUTER CORPORATION
+000018     (base 16)		WEBSTER COMPUTER CORPORATION
+				16040 REDWOOD LODGE ROAD
+				LOS GATOS  CA  95033-9260
+				US
+
+00-00-C8   (hex)		ALTOS COMPUTER SYSTEMS
+0000C8     (base 16)		ALTOS COMPUTER SYSTEMS
+				2641 ORCHARD PARKWAY
+				SAN JOSE  CA  95134
+				US
+
+00-00-D5   (hex)		MICROGNOSIS INTERNATIONAL
+0000D5     (base 16)		MICROGNOSIS INTERNATIONAL
+				63 QUEEN VICTORIA STREET
+				  UNITED  KINGDOM
+				GB
+
+00-00-3A   (hex)		CHYRON CORPORATION
+00003A     (base 16)		CHYRON CORPORATION
+				265 SPAGNOLI ROAD
+				MELVILLE  NY  11747
+				US
+
+00-00-59   (hex)		Hellige GMBH
+000059     (base 16)		Hellige GMBH
+				Heinrich-von-Stephan-Str. 4
+				  West Gernany  
+				DE
+
+00-00-69   (hex)		CONCORD COMMUNICATIONS INC
+000069     (base 16)		CONCORD COMMUNICATIONS INC
+				753 FOREST STREET
+				MARLBOROUGH  MA  01752
+				US
+
+00-00-E7   (hex)		Star Gate Technologies
+0000E7     (base 16)		Star Gate Technologies
+				29300 Aurora Road
+				Solon  OH  44139
+				US
+
+00-00-4D   (hex)		DCI CORPORATION
+00004D     (base 16)		DCI CORPORATION
+				64J PRINCETON-HIGHTSTOWN RD
+				PRINCETON JUNCTION  NJ  08550
+				US
+
+00-00-23   (hex)		ABB INDUSTRIAL SYSTEMS AB
+000023     (base 16)		ABB INDUSTRIAL SYSTEMS AB
+				DEPT. SEISY/LKSB
+				    
+				SE
+
+00-00-BE   (hex)		THE NTI GROUP
+0000BE     (base 16)		THE NTI GROUP
+				4701 PATRICK HENRY DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-00-D9   (hex)		NIPPON TELEGRAPH & TELEPHONE
+0000D9     (base 16)		NIPPON TELEGRAPH & TELEPHONE
+				CORPORATION (NTT)
+				TOKYO  100-8116  
+				JP
+
+00-00-80   (hex)		CRAY COMMUNICATIONS A/S
+000080     (base 16)		CRAY COMMUNICATIONS A/S
+				SMEDEHOLM 12-14
+				    
+				DK
+
+08-00-2A   (hex)		MOSAIC TECHNOLOGIES INC.
+08002A     (base 16)		MOSAIC TECHNOLOGIES INC.
+				47 MANNING ROAD
+				BILLERICA  MA  01821-3970
+				US
+
+08-00-89   (hex)		Kinetics
+080089     (base 16)		Kinetics
+				
+				Walnut Creek  CA  
+				US
+
+08-00-86   (hex)		KONICA MINOLTA HOLDINGS, INC.
+080086     (base 16)		KONICA MINOLTA HOLDINGS, INC.
+				1-6-1, Marunouchi,
+				Tokyo    100-0005
+				JP
+
+08-00-83   (hex)		Seiko Instruments Inc.
+080083     (base 16)		Seiko Instruments Inc.
+				8, Nakase 1-chome Mihama-ku
+				Chiba-shi  Chiba  261-8507
+				JP
+
+08-00-61   (hex)		JAROGATE LTD.
+080061     (base 16)		JAROGATE LTD.
+				197-213 LYHAM ROAD
+				  UNITED  KINGDOM
+				GB
+
+08-00-5F   (hex)		SABER TECHNOLOGY CORP.
+08005F     (base 16)		SABER TECHNOLOGY CORP.
+				2381 BERING DRIVE
+				SAN JOSE  CA  95131-1125
+				US
+
+08-00-58   (hex)		SYSTEMS CONCEPTS
+080058     (base 16)		SYSTEMS CONCEPTS
+				520 THIRD STREET
+				SAN FRANCISCO  CA  94107
+				US
+
+08-00-49   (hex)		UNIVATION
+080049     (base 16)		UNIVATION
+				1037 NORTH FAIR OAKS AVE.
+				SUNNYVALE  CA  94089
+				US
+
+08-00-24   (hex)		10NET COMMUNICATIONS/DCA
+080024     (base 16)		10NET COMMUNICATIONS/DCA
+				7777 WASHINGTON VILLAGE DR.
+				DAYTON  OH  45459-3957
+				US
+
+08-00-22   (hex)		NBI INC.
+080022     (base 16)		NBI INC.
+				3450 MITCHELL LANE
+				BOULDER  CO  80301
+				US
+
+08-00-20   (hex)		Oracle Corporation
+080020     (base 16)		Oracle Corporation
+				17 Network Circle
+				Menlo Park  CA  95025
+				US
+
+08-00-1F   (hex)		SHARP CORPORATION
+08001F     (base 16)		SHARP CORPORATION
+				ENGINEERING DEPARTMENT 6
+				NARA  639-11  
+				JP
+
+08-00-14   (hex)		EXCELAN
+080014     (base 16)		EXCELAN
+				1599 FLICKINGER AVENUE
+				SAN JOSE  CA  95131
+				US
+
+AA-00-00   (hex)		DIGITAL EQUIPMENT CORPORATION
+AA0000     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				LKG 1-2/A19
+				LITTLETON  MA  01460-1289
+				US
+
+AA-00-01   (hex)		DIGITAL EQUIPMENT CORPORATION
+AA0001     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				LKG 1-2/A19
+				LITTLETON  MA  01460-1289
+				US
+
+AA-00-02   (hex)		DIGITAL EQUIPMENT CORPORATION
+AA0002     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				LKG 1-2/A19
+				LITTLETON  MA  01460-1289
+				US
+
+00-00-07   (hex)		XEROX CORPORATION
+000007     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+00-80-1F   (hex)		KRUPP ATLAS ELECTRONIK GMBH
+00801F     (base 16)		KRUPP ATLAS ELECTRONIK GMBH
+				P.O. BOX 448545
+				    
+				DE
+
+08-00-06   (hex)		SIEMENS AG
+080006     (base 16)		SIEMENS AG
+				Siemens IT Solutions and Services, SIS GO QM O
+				POB 2353  Fuerth  90713
+				DE
+
+04-E0-C4   (hex)		TRIUMPH-ADLER AG
+04E0C4     (base 16)		TRIUMPH-ADLER AG
+				HUNDINGSTRAßE 11B
+				    
+				DE
+
+02-07-01   (hex)		RACAL-DATACOM
+020701     (base 16)		RACAL-DATACOM
+				LAN INTERNETWORKING DIVISION
+				BOXBOROUGH  MA  01719
+				US
+
+08-00-13   (hex)		Exxon
+080013     (base 16)		Exxon
+				
+				    
+				US
+
+00-DD-08   (hex)		UNGERMANN-BASS INC.
+00DD08     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-00-05   (hex)		XEROX CORPORATION
+000005     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+02-1C-7C   (hex)		PERQ SYSTEMS CORPORATION
+021C7C     (base 16)		PERQ SYSTEMS CORPORATION
+				2600 LIBERTY AVENUE
+				PITTSBURGH  PA  15230
+				US
+
+08-00-65   (hex)		GENRAD INC.
+080065     (base 16)		GENRAD INC.
+				300 BAKER AVENUE
+				CONCORD  MA  01742
+				US
+
+84-A9-EA   (hex)		Career Technologies USA
+84A9EA     (base 16)		Career Technologies USA
+				9134 Independence Ave
+				Chatsworth  CA  91311
+				US
+
+00-00-09   (hex)		XEROX CORPORATION
+000009     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+00-80-E9   (hex)		Madge Ltd.
+0080E9     (base 16)		Madge Ltd.
+				Madge House
+				Maindenhead  Berkshire  SL6 2HP
+				GB
+
+00-40-D6   (hex)		LOCAMATION B.V.
+0040D6     (base 16)		LOCAMATION B.V.
+				POSTBOX 360
+				    HOLLAND
+				NL
+
+08-00-4B   (hex)		Planning Research Corp.
+08004B     (base 16)		Planning Research Corp.
+				1508 Kennedy Drive
+				Bellvue  NE  68005
+				US
+
+02-AA-3C   (hex)		OLIVETTI TELECOMM SPA (OLTECO)
+02AA3C     (base 16)		OLIVETTI TELECOMM SPA (OLTECO)
+				20300 STEVENS  CREEK BLVD.
+				CUPERTINO  CA  95014
+				US
+
+08-00-59   (hex)		A/S MYCRON
+080059     (base 16)		A/S MYCRON
+				PO BOX 6199
+				    
+				NO
+
+08-00-08   (hex)		BOLT BERANEK AND NEWMAN INC.
+080008     (base 16)		BOLT BERANEK AND NEWMAN INC.
+				70 FAWCETT STREET
+				CAMBRIDGE  MA  02138
+				US
+
+F4-74-88   (hex)		New H3C Technologies Co., Ltd
+F47488     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+FC-C2-33   (hex)		ASUSTek COMPUTER INC.
+FCC233     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+40-11-75   (hex)		IEEE Registration Authority
+401175     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-31-F0   (hex)		Samsung Electronics Co.,Ltd
+8031F0     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+58-35-26   (hex)		DEEPLET TECHNOLOGY CORP
+583526     (base 16)		DEEPLET TECHNOLOGY CORP
+				5F,No.9,Lane235,Pao-Chiao Rd., Hsin-Tien,
+				New Taipei City      23145
+				TW
+
+34-B5-A3   (hex)		CIG SHANGHAI CO LTD
+34B5A3     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road
+				SHANGHAI    201114
+				CN
+
+6C-1D-EB   (hex)		u-blox AG
+6C1DEB     (base 16)		u-blox AG
+				Zuercherstrasse 68
+				Thalwil    8800
+				CH
+
+28-52-F9   (hex)		Zhongxin Intelligent Times (Shenzhen) Co., Ltd.
+2852F9     (base 16)		Zhongxin Intelligent Times (Shenzhen) Co., Ltd.
+				3rd Floor,Building 46,Cuigang Industrial Zone 5,Fuyong Street,Baoan District
+				Shenzhen  Guangdong  518103
+				CN
+
+B8-F8-53   (hex)		Arcadyan Corporation
+B8F853     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+E0-D0-83   (hex)		Samsung Electronics Co.,Ltd
+E0D083     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+74-3C-18   (hex)		Taicang T&W Electronics
+743C18     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+4C-80-BA   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
+4C80BA     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
+				HUST Industry Park, East-Lake Development Zone
+				Wuhan  Hubei  430223
+				CN
+
+8C-02-FA   (hex)		COMMANDO Networks Limited
+8C02FA     (base 16)		COMMANDO Networks Limited
+				Rm407, 4th floor, 3-2 HuaYuan Rd., DaLang Subdistrict, LongHua District
+				Shenzhen  Guangdong  518109
+				CN
+
+F0-26-4C   (hex)		Sigrist-Photometer AG
+F0264C     (base 16)		Sigrist-Photometer AG
+				Hofurlistrasse 1
+				Ennetbürgen    6373
+				CH
+
+D8-0B-9A   (hex)		Samsung Electronics Co.,Ltd
+D80B9A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+AC-8D-34   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC8D34     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-52-99   (hex)		The Chamberlain Group, Inc
+645299     (base 16)		The Chamberlain Group, Inc
+				300 Windsor Drive
+				Oak Brook  IL  60523
+				US
+
+F8-75-A4   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+F875A4     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+00-D2-B1   (hex)		TPV Display Technology (Xiamen) Co.,Ltd.
+00D2B1     (base 16)		TPV Display Technology (Xiamen) Co.,Ltd.
+				No.1, Xianghai Road, Xiamen Torch Hi-Tech Industrial Development Zone
+				XM  Fujian  361101
+				CN
+
+C0-E4-34   (hex)		AzureWave Technology Inc.
+C0E434     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+6C-71-0D   (hex)		Cisco Systems, Inc
+6C710D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+24-6F-8C   (hex)		Huawei Device Co., Ltd.
+246F8C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-13-86   (hex)		Huawei Device Co., Ltd.
+1C1386     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+BC-2E-F6   (hex)		Huawei Device Co., Ltd.
+BC2EF6     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+44-55-C4   (hex)		Huawei Device Co., Ltd.
+4455C4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-08-29   (hex)		TOKYO ELECTRON DEVICE NAGASAKI LIMITED
+000829     (base 16)		TOKYO ELECTRON DEVICE NAGASAKI LIMITED
+				6-42 Tsukuba-machi, Isahaya-shi
+				Nagasaki  Kyushu  854-0065
+				JP
+
+1C-44-55   (hex)		Sieb & Meyer AG
+1C4455     (base 16)		Sieb & Meyer AG
+				Auf dem Schmaarkamp 21
+				Lueneburg    21339
+				DE
+
+F8-8A-5E   (hex)		Texas Instruments
+F88A5E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+5C-E7-A0   (hex)		Nokia
+5CE7A0     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+E0-1F-88   (hex)		Xiaomi Communications Co Ltd
+E01F88     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+8C-DC-02   (hex)		zte corporation
+8CDC02     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+B4-BC-7C   (hex)		Texas Instruments
+B4BC7C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+E0-AA-B0   (hex)		SUNTAILI ENTERPRISE CO. LTD,
+E0AAB0     (base 16)		SUNTAILI ENTERPRISE CO. LTD,
+				No. 6 ALY 3,LN 64 XINGFU RD, XINZHUNAG DISTRICT
+				NEW TAIPEI CITY    242
+				TW
+
+68-39-43   (hex)		ittim
+683943     (base 16)		ittim
+				1202, No.6, Zhongguancun South Street, Haidian District,
+				beijing    100080
+				CN
+
+10-C6-5E   (hex)		Adapt-IP
+10C65E     (base 16)		Adapt-IP
+				1671 Dell Avenue, Suite 130
+				Campbell  CA  95008-6900
+				US
+
+7C-A7-B0   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+7CA7B0     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+20-31-1C   (hex)		vivo Mobile Communication Co., Ltd.
+20311C     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+10-4F-58   (hex)		Aruba, a Hewlett Packard Enterprise Company
+104F58     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+B4-E8-42   (hex)		Hong Kong Bouffalo Lab Limited
+B4E842     (base 16)		Hong Kong Bouffalo Lab Limited
+				RM 1903, 19/F Lee Garden One 33 Hysan Avenue, Causeway Bay
+				HongKong    999077
+				HK
+
+00-03-CB   (hex)		SystemGear Co., Ltd.
+0003CB     (base 16)		SystemGear Co., Ltd.
+				1-9-14 Edobori
+				Osaka  Nishi-ku  550-0002
+				JP
+
+F0-A7-B2   (hex)		FUTABA CORPORATION
+F0A7B2     (base 16)		FUTABA CORPORATION
+				629 Oshiba
+				Mobara  Chiba Prefecture  297-8588
+				JP
+
+60-9B-2D   (hex)		JMACS Japan Co., Ltd.
+609B2D     (base 16)		JMACS Japan Co., Ltd.
+				11F, KM Nishi-Umeda bldg., 7-20-1 Fukushima, Fukushima-ku
+				Osaka-city  Osaka  553-0003
+				JP
+
+14-A3-2F   (hex)		Huawei Device Co., Ltd.
+14A32F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-D3-B5   (hex)		Huawei Device Co., Ltd.
+04D3B5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-BB-1C   (hex)		Huawei Device Co., Ltd.
+00BB1C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+80-AC-7C   (hex)		Sichuan AI-Link Technology Co., Ltd.
+80AC7C     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+DC-4B-FE   (hex)		Shenzhen Belon Technology CO.,LTD
+DC4BFE     (base 16)		Shenzhen Belon Technology CO.,LTD
+				Tsinghua Information
+				Shenzhen  Guangdong  518052
+				CN
+
+50-62-55   (hex)		IEEE Registration Authority
+506255     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+58-D5-0A   (hex)		Murata Manufacturing Co., Ltd.
+58D50A     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+88-A3-03   (hex)		Samsung Electronics Co.,Ltd
+88A303     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-DE-90   (hex)		Samsung Electronics Co.,Ltd
+FCDE90     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-54-CF   (hex)		Samsung Electronics Co.,Ltd
+1854CF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-79-5D   (hex)		Infinix mobility limited
+80795D     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+E8-84-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E884C6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-2C-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+642CAC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-CC-27   (hex)		Motorola Mobility LLC, a Lenovo Company
+08CC27     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+04-D3-95   (hex)		Motorola Mobility LLC, a Lenovo Company
+04D395     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+E0-98-06   (hex)		Espressif Inc.
+E09806     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F4-CF-A2   (hex)		Espressif Inc.
+F4CFA2     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F8-1E-6F   (hex)		EBG compleo GmbH
+F81E6F     (base 16)		EBG compleo GmbH
+				Oberste-Wilms-Straße 15a
+				Dortmund  Nordrhein-Westfalen  44309
+				DE
+
+F0-A3-5A   (hex)		Apple, Inc.
+F0A35A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-83-73   (hex)		Apple, Inc.
+608373     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-AD-8D   (hex)		Apple, Inc.
+84AD8D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-42-8B   (hex)		Apple, Inc.
+74428B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-91-38   (hex)		Amazon Technologies Inc.
+149138     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+6C-41-0E   (hex)		Cisco Systems, Inc
+6C410E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-31-0E   (hex)		Cisco Systems, Inc
+6C310E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+28-77-F1   (hex)		Apple, Inc.
+2877F1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-E7-7D   (hex)		Texas Instruments
+A8E77D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+DC-54-3D   (hex)		ITEL MOBILE LIMITED
+DC543D     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+0C-84-47   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+0C8447     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+9C-6B-72   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
+9C6B72     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
+				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
+				Chongqing  China  401120
+				CN
+
+50-C6-AD   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+50C6AD     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+74-8A-28   (hex)		HMD Global Oy
+748A28     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+D4-24-93   (hex)		GW Technologies Co.,Ltd
+D42493     (base 16)		GW Technologies Co.,Ltd
+				Building 16,No.8,Heying Road,Changping District
+				Beijing  Beijing  102200
+				CN
+
+00-23-E6   (hex)		Innovation Farm, Inc.
+0023E6     (base 16)		Innovation Farm, Inc.
+				47-8, Hasunuma-cho
+				Itabashi-ku  Tokyo  174-8580
+				JP
+
+EC-A9-40   (hex)		ARRIS Group, Inc.
+ECA940     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+FC-85-96   (hex)		Axonne Inc.
+FC8596     (base 16)		Axonne Inc.
+				1290 Kifer Rd. #301
+				Sunnyvale  CA  94086
+				US
+
+5C-B4-E2   (hex)		Inspur Software Group Ltd.
+5CB4E2     (base 16)		Inspur Software Group Ltd.
+				No. 1036, Langchao Road
+				Jinan  Shandong  250101
+				CN
+
+3C-51-0E   (hex)		Cisco Systems, Inc
+3C510E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D8-AE-D0   (hex)		Shanghai Engineering Science & Technology Co.,LTD CGNPC
+D8AED0     (base 16)		Shanghai Engineering Science & Technology Co.,LTD CGNPC
+				No.1588, Rd Zixing
+				Shanghai  Shanghai  200241
+				CN
+
+E0-85-9A   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+E0859A     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+0C-42-A1   (hex)		Mellanox Technologies, Inc.
+0C42A1     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+B4-7A-F1   (hex)		Hewlett Packard Enterprise
+B47AF1     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+34-9F-7B   (hex)		CANON INC.
+349F7B     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+34-F1-50   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+34F150     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+CC-52-89   (hex)		SHENZHEN OPTFOCUS TECHNOLOGY.,LTD
+CC5289     (base 16)		SHENZHEN OPTFOCUS TECHNOLOGY.,LTD
+				Floor 3, Building No.7,Tangtou 3rd Industrial Park,Shiyan Street of BaoAn District
+				ShenZhen    518000
+				CN
+
+CC-5D-78   (hex)		JTD Consulting
+CC5D78     (base 16)		JTD Consulting
+				92 King Street South, Suite 200
+				Waterloo  Ontario  N2J 1P5
+				CA
+
+BC-F9-F2   (hex)		TEKO
+BCF9F2     (base 16)		TEKO
+				Prospect Pobedy, 19
+				Kazan  Republic of Tatarstan  420138
+				RU
+
+00-0E-A4   (hex)		Quantum Corp.
+000EA4     (base 16)		Quantum Corp.
+				8560 Upland Dr.
+				Englewood  CA  80112
+				US
+
+00-50-84   (hex)		Quantum Corp.
+005084     (base 16)		Quantum Corp.
+				8560 Upland Dr.
+				Englewood  CO  80112
+				US
+
+80-9F-9B   (hex)		Sichuan AI-Link Technology Co., Ltd.
+809F9B     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+A8-2B-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A82BCD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-DC-2D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48DC2D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-EB-51   (hex)		Universal Electronics, Inc.
+ACEB51     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+60-10-A2   (hex)		Crompton Instruments
+6010A2     (base 16)		Crompton Instruments
+				12 Freebournes Road
+				Witham  Essex  CM8 3AH
+				GB
+
+C4-B2-39   (hex)		Cisco Systems, Inc
+C4B239     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B0-A4-54   (hex)		Tripwire Inc.
+B0A454     (base 16)		Tripwire Inc.
+				308 SW 2nd Avenue Suite 400
+				Portland  OR  97204
+				US
+
+64-90-C1   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+6490C1     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+CC-5C-DE   (hex)		China Mobile Group Device Co.,Ltd.
+CC5CDE     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+60-CE-86   (hex)		Sercomm Corporation.
+60CE86     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+4C-4F-EE   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+4C4FEE     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+4C-E1-75   (hex)		Cisco Systems, Inc
+4CE175     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A8-24-B8   (hex)		Nokia
+A824B8     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+90-55-DE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+9055DE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E8-91-0F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E8910F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+D0-05-E4   (hex)		Huawei Device Co., Ltd.
+D005E4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+30-AA-E4   (hex)		Huawei Device Co., Ltd.
+30AAE4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-AB-56   (hex)		WUXI FUNIDE DIGITAL CO.,LTD
+14AB56     (base 16)		WUXI FUNIDE DIGITAL CO.,LTD
+				No. 38 East Chunhui Road, Xishan Economic & Technology Development Zone
+				WUXI  JIANGSU  214101
+				CN
+
+E8-D8-D1   (hex)		HP Inc.
+E8D8D1     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+28-CD-C4   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+28CDC4     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+00-0C-DF   (hex)		JAI Manufacturing
+000CDF     (base 16)		JAI Manufacturing
+				2960-14 Uenojo Nishikata
+				Kushima  Miyazaki  888-0004
+				JP
+
+2C-91-AB   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+2C91AB     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+80-7B-3E   (hex)		Samsung Electronics Co.,Ltd
+807B3E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F8-F1-E6   (hex)		Samsung Electronics Co.,Ltd
+F8F1E6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-A9-B7   (hex)		Apple, Inc.
+88A9B7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-CE-D7   (hex)		Apple, Inc.
+ECCED7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-EB-62   (hex)		Murata Manufacturing Co., Ltd.
+48EB62     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+5C-E1-76   (hex)		Cisco Systems, Inc
+5CE176     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+AC-90-85   (hex)		Apple, Inc.
+AC9085     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-48-ED   (hex)		Dell Inc.
+3448ED     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+3C-57-31   (hex)		Cisco Systems, Inc
+3C5731     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-55-E8   (hex)		Technicolor CH USA Inc.
+6C55E8     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+34-2F-BD   (hex)		Nintendo Co.,Ltd
+342FBD     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+A0-2D-13   (hex)		AirTies Wireless Networks
+A02D13     (base 16)		AirTies Wireless Networks
+				Esentepe Mah., Kore ?ehitleri Cad.
+				Istanbul  ?i?li  34360
+				TR
+
+84-68-C8   (hex)		TOTOLINK TECHNOLOGY INT‘L LIMITED
+8468C8     (base 16)		TOTOLINK TECHNOLOGY INT‘L LIMITED
+				ROOM 702,7/F SPA CENTER NO 53055 LOCKHART ROAD 
+				WAN CHAI    999077
+				HK
+
+9C-28-F7   (hex)		Xiaomi Communications Co Ltd
+9C28F7     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+10-52-1C   (hex)		Espressif Inc.
+10521C     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+6C-42-AB   (hex)		Subscriber Networks, Inc.
+6C42AB     (base 16)		Subscriber Networks, Inc.
+				148 W. State Street
+				Kennett Square  PA  19348
+				US
+
+64-F6-F7   (hex)		Anhui Dynamic Power Co., Ltd.
+64F6F7     (base 16)		Anhui Dynamic Power Co., Ltd.
+				NO.20 Jinniu Mid Road,
+				Xuancheng  Anhui  242100
+				CN
+
+94-1C-56   (hex)		Actiontec Electronics, Inc
+941C56     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+D8-0B-CB   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
+D80BCB     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
+				No. 1500 Zuchongzhi Rd, Building #3
+				Shanghai    201203
+				CN
+
+F0-F0-A4   (hex)		Amazon Technologies Inc.
+F0F0A4     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+C0-D6-82   (hex)		Arista Networks
+C0D682     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+CC-2D-1B   (hex)		SFR
+CC2D1B     (base 16)		SFR
+				12 rue jean-philippe Rameau CS 80001
+				La plaine saint denis   FRANCE  93634
+				FR
+
+80-E5-40   (hex)		ARRIS Group, Inc.
+80E540     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-0D-B4   (hex)		Stormshield
+000DB4     (base 16)		Stormshield
+				2-10 rue Marceau
+				ISSY LES MOULINEAUX    92130
+				FR
+
+2C-F0-5D   (hex)		Micro-Star INTL CO., LTD.
+2CF05D     (base 16)		Micro-Star INTL CO., LTD.
+				No.69, Lide St.,
+				New Taipei City  Taiwan  235
+				TW
+
+94-3B-B0   (hex)		New H3C Technologies Co., Ltd
+943BB0     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+90-43-E2   (hex)		Cornami, Inc
+9043E2     (base 16)		Cornami, Inc
+				300 Orchard City Dr, Suite 131
+				Campbell  CA  95008
+				US
+
+80-30-49   (hex)		Liteon Technology Corporation
+803049     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+E8-49-43   (hex)		YUGE Information technology Co. Ltd
+E84943     (base 16)		YUGE Information technology Co. Ltd
+				Room 303, Building No. 6, ShengRong Rd. 88, Pudong, Shanghai
+				Shanghai    201203
+				CN
+
+50-14-08   (hex)		AiNET
+501408     (base 16)		AiNET
+				11700 MONTGOMERY RD
+				BELTSVILLE  MD  20705-1159
+				US
+
+28-9A-F7   (hex)		ADVA Optical Networking Ltd.
+289AF7     (base 16)		ADVA Optical Networking Ltd.
+				ADVAntage House
+				York    YO30 4RY
+				GB
+
+B0-B1-94   (hex)		zte corporation
+B0B194     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+10-C3-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+10C3AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-11-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2811EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-26-86   (hex)		DWnet Technologies(Suzhou) Corporation
+E42686     (base 16)		DWnet Technologies(Suzhou) Corporation
+				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
+				Suzhou    21500
+				CN
+
+00-69-2D   (hex)		Sunnovo International Limited
+00692D     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+38-EB-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+38EB47     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-37-96   (hex)		BIZLINK TECHNOLOGY, INC.
+0C3796     (base 16)		BIZLINK TECHNOLOGY, INC.
+				47211 BAYSIDE PARKWAY
+				Fremont  CA  94538
+				US
+
+F4-03-2A   (hex)		Amazon Technologies Inc.
+F4032A     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+14-77-40   (hex)		Huawei Device Co., Ltd.
+147740     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-15-7E   (hex)		Celona Inc.
+B4157E     (base 16)		Celona Inc.
+				10061, Bubb Road Suite 300
+				Cupertino  CA  95014
+				US
+
+18-D9-8F   (hex)		Huawei Device Co., Ltd.
+18D98F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-5E-2C   (hex)		IRay Technology Co., Ltd.
+645E2C     (base 16)		IRay Technology Co., Ltd.
+				11th Guiyang St.,
+				Yantai  Shandong  264000
+				CN
+
+00-E0-EC   (hex)		CELESTICA INC.
+00E0EC     (base 16)		CELESTICA INC.
+				1900-5140 Yonge Street PO Box 42   
+				Toronto  Ontario  M2N 6L7
+				CA
+
+70-38-11   (hex)		Siemens Mobility Limited
+703811     (base 16)		Siemens Mobility Limited
+				17 Langley Park Way
+				Chippenham  Wiltshire  SN15 1GG
+				GB
+
+64-62-66   (hex)		IEEE Registration Authority
+646266     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+48-7A-F6   (hex)		NCS ELECTRICAL SDN BHD
+487AF6     (base 16)		NCS ELECTRICAL SDN BHD
+				NO. 20, 22, 24, 26, JALAN 1/3, RAWANG INTEGRATED INDUSTRIAL PARK, 48000 Rawang Selangor, MALAYSIA
+				RAWANG  SELANGOR  48000
+				MY
+
+48-6E-70   (hex)		Zhejiang Tmall Technology Co., Ltd.
+486E70     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+60-1D-9D   (hex)		Sichuan AI-Link Technology Co., Ltd.
+601D9D     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+D8-5F-77   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
+D85F77     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
+				No. 1500 Zuchongzhi Rd, Building #3
+				Shanghai    201203
+				CN
+
+2C-97-ED   (hex)		Sony Imaging Products & Solutions Inc.
+2C97ED     (base 16)		Sony Imaging Products & Solutions Inc.
+				konan 1-7-1
+				minato-ku  Tokyo  108-0075
+				JP
+
+20-82-6A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+20826A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+B8-90-47   (hex)		Apple, Inc.
+B89047     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-9C-4A   (hex)		Apple, Inc.
+909C4A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-8C-43   (hex)		Apple, Inc.
+908C43     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-8A-6A   (hex)		AVPro Global Hldgs
+188A6A     (base 16)		AVPro Global Hldgs
+				2222 E 52nd Steeet N
+				Sioux Falls  SD  57104
+				US
+
+3C-7D-0A   (hex)		Apple, Inc.
+3C7D0A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-8A-39   (hex)		Samsung Electronics Co.,Ltd
+D48A39     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-F3-C4   (hex)		Samsung Electronics Co.,Ltd
+E4F3C4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-2F-4E   (hex)		zte corporation
+9C2F4E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F0-10-90   (hex)		New H3C Technologies Co., Ltd
+F01090     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+08-BF-A0   (hex)		Samsung Electronics Co.,Ltd
+08BFA0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+70-1F-3C   (hex)		Samsung Electronics Co.,Ltd
+701F3C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+20-50-E7   (hex)		AMPAK Technology,Inc.
+2050E7     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+D8-A8-C8   (hex)		zte corporation
+D8A8C8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+38-22-E2   (hex)		HP Inc.
+3822E2     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+08-C0-EB   (hex)		Mellanox Technologies, Inc.
+08C0EB     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+E4-E1-12   (hex)		Texas Instruments
+E4E112     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+34-14-B5   (hex)		Texas Instruments
+3414B5     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D0-03-EB   (hex)		Texas Instruments
+D003EB     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+94-DB-56   (hex)		Sony Home Entertainment&Sound Products Inc
+94DB56     (base 16)		Sony Home Entertainment&Sound Products Inc
+				Sony City Osaki 2-10-1 Osaki Shinagawa-ku
+				Tokyo  Japan  141-8610
+				JP
+
+88-9E-68   (hex)		Technicolor CH USA Inc.
+889E68     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+64-09-AC   (hex)		TCT mobile ltd
+6409AC     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+74-3A-EF   (hex)		Kaonmedia CO., LTD.
+743AEF     (base 16)		Kaonmedia CO., LTD.
+				884-3, Seongnam-daero, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13517
+				KR
+
+18-9E-2C   (hex)		Huawei Device Co., Ltd.
+189E2C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+5C-55-78   (hex)		iryx corp
+5C5578     (base 16)		iryx corp
+				14 Hughes
+				Irvine  CA  92618
+				US
+
+4C-C5-3E   (hex)		Zyxel Communications Corporation
+4CC53E     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+90-56-FC   (hex)		TECNO MOBILE LIMITED
+9056FC     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+B8-63-92   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+B86392     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+				No.168, Middle Road Of East Gate
+				Xiaobian Community  Chang'an Town  523851
+				CN
+
+68-B9-D3   (hex)		Shenzhen Trolink Technology CO, LTD
+68B9D3     (base 16)		Shenzhen Trolink Technology CO, LTD
+				201 B building 4 shijie, Chashu industry 505 block, Baoan airport Sanwei community, Hangcheng street Baoan area.
+				Shenzhen  GuangDong  518000
+				CN
+
+B8-C6-AA   (hex)		Earda Technologies co Ltd
+B8C6AA     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+54-AE-D0   (hex)		DASAN Networks, Inc. 
+54AED0     (base 16)		DASAN Networks, Inc. 
+				DASAN Tower, 49, Daewangpangyo-ro, 644 Beon-gil, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13493
+				KR
+
+10-70-FD   (hex)		Mellanox Technologies, Inc.
+1070FD     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+38-F6-01   (hex)		Solid State Storage Technology Corporation
+38F601     (base 16)		Solid State Storage Technology Corporation
+				21F, 392, Ruey Kuang Road, Neihu
+				 Taipei    11492
+				TW
+
+40-DE-AD   (hex)		Juniper Networks
+40DEAD     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+40-F5-20   (hex)		Espressif Inc.
+40F520     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+78-AA-82   (hex)		New H3C Technologies Co., Ltd
+78AA82     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+20-6C-8A   (hex)		Extreme Networks, Inc.
+206C8A     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+34-85-84   (hex)		Extreme Networks, Inc.
+348584     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+40-18-B1   (hex)		Extreme Networks, Inc.
+4018B1     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+88-5B-DD   (hex)		Extreme Networks, Inc.
+885BDD     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+98-ED-5C   (hex)		Tesla,Inc.
+98ED5C     (base 16)		Tesla,Inc.
+				3500 Deer Creek Road
+				Palo Alto  CA  94304
+				US
+
+C4-42-68   (hex)		CRESTRON ELECTRONICS, INC.
+C44268     (base 16)		CRESTRON ELECTRONICS, INC.
+				15 Volvo Drive
+				Rockleigh  NJ  07647
+				US
+
+54-71-DD   (hex)		Huawei Device Co., Ltd.
+5471DD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E4-A7-49   (hex)		Palo Alto Networks
+E4A749     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+84-D6-C5   (hex)		SolarEdge Technologies
+84D6C5     (base 16)		SolarEdge Technologies
+				1 Abba Eban St.
+				Herzelia    46725
+				IL
+
+D8-91-36   (hex)		Dover Fueling Solutions
+D89136     (base 16)		Dover Fueling Solutions
+				Industrieweg 5
+				Bladel  NBR  5531AD
+				NL
+
+C8-83-14   (hex)		Tempo Communications
+C88314     (base 16)		Tempo Communications
+				1390 Aspen Way
+				Vista  CA  92081
+				US
+
+B8-E3-EE   (hex)		Universal Electronics, Inc.
+B8E3EE     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+24-C8-D3   (hex)		McWane India Pvt Ltd
+24C8D3     (base 16)		McWane India Pvt Ltd
+				483, Kamaraj Road, Upplipalayam
+				Coimbatore  Tamil Nadu  641015
+				IN
+
+60-54-64   (hex)		Eyedro Green Solutions Inc.
+605464     (base 16)		Eyedro Green Solutions Inc.
+				130 Weber St W, Suite 201
+				Kitchener  Ontario  N2H4A2
+				CA
+
+FC-95-6A   (hex)		OCTAGON SYSTEMS CORP.
+FC956A     (base 16)		OCTAGON SYSTEMS CORP.
+				7403 Church Ranch Blvd
+				Westminster  CO  80021
+				US
+
+40-B3-1E   (hex)		Universal Electronics, Inc.
+40B31E     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+88-40-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+884033     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-F6-B5   (hex)		Nintendo Co.,Ltd
+E0F6B5     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+AC-7A-56   (hex)		Cisco Systems, Inc
+AC7A56     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-8D-BF   (hex)		Rhino Mobility LLC
+448DBF     (base 16)		Rhino Mobility LLC
+				8 The Green, Suite A
+				Dover  DE  19901
+				US
+
+94-8A-C6   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+948AC6     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+C0-A6-6D   (hex)		Inspur Group Co., Ltd.
+C0A66D     (base 16)		Inspur Group Co., Ltd.
+				No.1036 Langchao Rd.
+				Jinan  Shandong  250101
+				CN
+
+70-F0-96   (hex)		Cisco Systems, Inc
+70F096     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-20-A6   (hex)		Proxim Wireless
+0020A6     (base 16)		Proxim Wireless
+				2114 Ringwood Ave
+				San Jose  CA  95131
+				US
+
+58-50-ED   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+5850ED     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+00-05-1E   (hex)		Brocade Communications Systems LLC
+00051E     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+98-8B-0A   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+988B0A     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+BC-BA-C2   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+BCBAC2     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+AC-CB-51   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+ACCB51     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+E0-D4-62   (hex)		Huawei Device Co., Ltd.
+E0D462     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+90-98-38   (hex)		Huawei Device Co., Ltd.
+909838     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+84-CC-A8   (hex)		Espressif Inc.
+84CCA8     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+C4-F5-7C   (hex)		Brocade Communications Systems LLC
+C4F57C     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-12-F2   (hex)		Brocade Communications Systems LLC
+0012F2     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+6C-2F-8A   (hex)		Samsung Electronics Co.,Ltd
+6C2F8A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-B0-22   (hex)		TOHO Electronics INC.
+F0B022     (base 16)		TOHO Electronics INC.
+				1-13-21 Tanashioda, Chuo-Ku
+				Sagamihara-City  Kanagawa  252-0245
+				JP
+
+98-7E-CA   (hex)		Inventus Power Eletronica do Brasil LTDA
+987ECA     (base 16)		Inventus Power Eletronica do Brasil LTDA
+				Av Buriti, 4285 Distrito Industrial
+				Manaus  Amazonas  69075000
+				BR
+
+2C-9F-FB   (hex)		Wistron Neweb Corporation
+2C9FFB     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+50-38-2F   (hex)		ASE Group Chung-Li
+50382F     (base 16)		ASE Group Chung-Li
+				No 550,Chung-Hwa Road Section1
+				Chung-Li , Taoyuan  Taoyuan  32016
+				TW
+
+0C-14-D2   (hex)		China Mobile Group Device Co.,Ltd.
+0C14D2     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+D4-F8-29   (hex)		Sagemcom Broadband SAS
+D4F829     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E0-62-34   (hex)		Texas Instruments
+E06234     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+70-8C-BB   (hex)		MIMODISPLAYKOREA
+708CBB     (base 16)		MIMODISPLAYKOREA
+				#812, 19, Ojeongongeop-gil
+				Uiwang-si  Gyeonggi-do  16072
+				KR
+
+B8-48-AA   (hex)		EM Microelectronic
+B848AA     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+F8-57-2E   (hex)		Core Brands, LLC
+F8572E     (base 16)		Core Brands, LLC
+				5919 Sea Otter Place
+				Carlsbad  CA  92010
+				US
+
+00-1C-91   (hex)		Gefen LLC
+001C91     (base 16)		Gefen LLC
+				5919 Sea Otter Place
+				Carlsbad  CA  92010
+				US
+
+24-4B-FE   (hex)		ASUSTek COMPUTER INC.
+244BFE     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+7C-DD-E9   (hex)		ATOM tech Inc.
+7CDDE9     (base 16)		ATOM tech Inc.
+				Sky Menor Yokohama 422, 2-11-2 Takashima, Nishi-ku 
+				Yokohama-shi  Kanagawa  220-0011
+				JP
+
+F8-6B-D9   (hex)		Cisco Systems, Inc
+F86BD9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C0-14-FE   (hex)		Cisco Systems, Inc
+C014FE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+7C-AD-4F   (hex)		Cisco Systems, Inc
+7CAD4F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-31-A4   (hex)		Huawei Device Co., Ltd.
+0831A4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A8-E9-78   (hex)		Huawei Device Co., Ltd.
+A8E978     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F8-2F-65   (hex)		Huawei Device Co., Ltd.
+F82F65     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+28-B3-71   (hex)		Ruckus Wireless
+28B371     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+08-AC-C4   (hex)		FMTech
+08ACC4     (base 16)		FMTech
+				yuehai
+				ShenZhen    518000
+				CN
+
+DC-50-3A   (hex)		Nanjing Ticom Tech Co., Ltd.
+DC503A     (base 16)		Nanjing Ticom Tech Co., Ltd.
+				No.35 Fenghui Road, Yuhuatai District
+				Nanjing  Jiangsu  210039
+				CN
+
+18-47-3D   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+18473D     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+D4-77-B2   (hex)		Netix Global B.V.
+D477B2     (base 16)		Netix Global B.V.
+				1119RB Schipol - Rijk, Beechavenue, 113, Schipol,
+				Amsterdam NL    1119
+				NL
+
+70-B5-E8   (hex)		Dell Inc.
+70B5E8     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+94-25-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+942533     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-56-61   (hex)		IXECLOUD Tech
+605661     (base 16)		IXECLOUD Tech
+				118, 3rd Floor, Building 195, Area 1 Beiwa Road,Haidian District, Beijing
+				Beijing    100000
+				CN
+
+0C-59-9C   (hex)		Juniper Networks
+0C599C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+44-F4-E7   (hex)		Cohesity Inc
+44F4E7     (base 16)		Cohesity Inc
+				300 park ave
+				san jose  CA  95110
+				US
+
+70-69-79   (hex)		IEEE Registration Authority
+706979     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+FC-60-9B   (hex)		New H3C Technologies Co., Ltd
+FC609B     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+E8-A1-F8   (hex)		zte corporation
+E8A1F8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+98-A9-42   (hex)		Guangzhou Tozed Kangwei Intelligent Technology Co., LTD
+98A942     (base 16)		Guangzhou Tozed Kangwei Intelligent Technology Co., LTD
+				Room 1301, NO. 37 Jinlong , Nansha Street, Xiangjiang Financial Business Center, Nansha District
+				Guangzhou  Guangdong  511458
+				CN
+
+30-42-40   (hex)		zte corporation
+304240     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+4C-21-13   (hex)		Nokia Shanghai Bell Co., Ltd.
+4C2113     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+80-2D-BF   (hex)		Cisco Systems, Inc
+802DBF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-F1-50   (hex)		Guangzhou Qi'an Technology Co., Ltd.
+24F150     (base 16)		Guangzhou Qi'an Technology Co., Ltd.
+				No. 3, Dasonggang, Jiangnan Avenue Middle Road, Haizhu District, Guangzhou (office only)
+				Guangzhou  Guangdong  510220
+				CN
+
+10-8B-6A   (hex)		Antailiye Technology Co.,Ltd
+108B6A     (base 16)		Antailiye Technology Co.,Ltd
+				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen
+				SHEN ZHEN  GUANGDONG  518000
+				CN
+
+14-C8-8B   (hex)		Apple, Inc.
+14C88B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-26-51   (hex)		Apple, Inc.
+EC2651     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-3E-EF   (hex)		Apple, Inc.
+183EEF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-7E-C9   (hex)		Apple, Inc.
+607EC9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-88-2F   (hex)		Extreme Networks, Inc.
+40882F     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+E4-3D-1A   (hex)		Broadcom Limited
+E43D1A     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+64-4C-36   (hex)		Intel Corporate
+644C36     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+48-89-E7   (hex)		Intel Corporate
+4889E7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+24-EE-9A   (hex)		Intel Corporate
+24EE9A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+5C-87-9C   (hex)		Intel Corporate
+5C879C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+50-EB-71   (hex)		Intel Corporate
+50EB71     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+0C-DD-24   (hex)		Intel Corporate
+0CDD24     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+94-B8-6D   (hex)		Intel Corporate
+94B86D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+20-16-B9   (hex)		Intel Corporate
+2016B9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+38-BA-F8   (hex)		Intel Corporate
+38BAF8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+3C-6A-A7   (hex)		Intel Corporate
+3C6AA7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+34-E1-2D   (hex)		Intel Corporate
+34E12D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+00-BB-60   (hex)		Intel Corporate
+00BB60     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+60-F6-77   (hex)		Intel Corporate
+60F677     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+A0-88-69   (hex)		Intel Corporate
+A08869     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+74-E5-F9   (hex)		Intel Corporate
+74E5F9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+80-00-0B   (hex)		Intel Corporate
+80000B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+34-41-5D   (hex)		Intel Corporate
+34415D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+FC-77-74   (hex)		Intel Corporate
+FC7774     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+98-2C-BC   (hex)		Intel Corporate
+982CBC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+3C-F0-11   (hex)		Intel Corporate
+3CF011     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+28-7F-CF   (hex)		Intel Corporate
+287FCF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+80-32-53   (hex)		Intel Corporate
+803253     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+D8-C0-A6   (hex)		AzureWave Technology Inc.
+D8C0A6     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+9C-FC-E8   (hex)		Intel Corporate
+9CFCE8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+F8-AC-65   (hex)		Intel Corporate
+F8AC65     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+10-12-FB   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+1012FB     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+F0-9B-B8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F09BB8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-17-B8   (hex)		Intel Corporate
+BC17B8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+B8-CB-29   (hex)		Dell Inc.
+B8CB29     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+44-BB-3B   (hex)		Google, Inc.
+44BB3B     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+14-C1-4E   (hex)		Google, Inc.
+14C14E     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+8C-5E-BD   (hex)		Huawei Device Co., Ltd.
+8C5EBD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-A0-42   (hex)		Huawei Device Co., Ltd.
+2CA042     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+EC-C0-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ECC01B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+98-44-CE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9844CE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-D0-83   (hex)		Aruba, a Hewlett Packard Enterprise Company
+CCD083     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+C0-83-C9   (hex)		Huawei Device Co., Ltd.
+C083C9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C0-1C-30   (hex)		Shenzhen WIFI-3L Technology Co.,Ltd
+C01C30     (base 16)		Shenzhen WIFI-3L Technology Co.,Ltd
+				East 5 Floor,B Building, WeiHao Technology Park,Sunny Indusrtrial zone, Xili Town, Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+D8-C6-78   (hex)		MitraStar Technology Corp.
+D8C678     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+44-1C-7F   (hex)		Motorola Mobility LLC, a Lenovo Company
+441C7F     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+00-B8-B6   (hex)		Motorola Mobility LLC, a Lenovo Company
+00B8B6     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+1C-E6-1D   (hex)		Samsung Electronics Co.,Ltd
+1CE61D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-12-DF   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+8012DF     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+10-E7-7A   (hex)		STMicrolectronics International NV
+10E77A     (base 16)		STMicrolectronics International NV
+				39, Chemin du Champ-des-Filles
+				 Geneva, Plan-les-Quates    1228
+				CH
+
+80-EA-07   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+80EA07     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+BC-03-A7   (hex)		MFP MICHELIN
+BC03A7     (base 16)		MFP MICHELIN
+				23 place des Carmes Dechaux
+				Clermont-Ferrand    63000
+				FR
+
+90-76-9F   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+90769F     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+98-2F-F8   (hex)		Huawei Device Co., Ltd.
+982FF8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-DC-A5   (hex)		Huawei Device Co., Ltd.
+40DCA5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-6F-51   (hex)		Herospeed Digital Technology Limited
+2C6F51     (base 16)		Herospeed Digital Technology Limited
+				728 Kaichuang Avenue,Huangpu Distric
+				Guangzhou  Guangdong  510530
+				CN
+
+04-A2-F3   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+04A2F3     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+CC-DB-93   (hex)		Cisco Systems, Inc
+CCDB93     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+54-48-E6   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+5448E6     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District
+				Beijing  Beijing  100085
+				CN
+
+60-D4-E9   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+60D4E9     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+30-C5-0F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+30C50F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-68-D2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2868D2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-A9-35   (hex)		JWEntertainment
+90A935     (base 16)		JWEntertainment
+				3f 10 Dwitgol-ro
+				Gwacheon-si  Gyeonggi-do  13814
+				KR
+
+1C-D6-BE   (hex)		Wistron Neweb Corporation
+1CD6BE     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+28-D1-27   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+28D127     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+C8-68-DE   (hex)		Huawei Device Co., Ltd.
+C868DE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-0D-F7   (hex)		Huawei Device Co., Ltd.
+D00DF7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+48-05-E2   (hex)		Huawei Device Co., Ltd.
+4805E2     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F8-1B-04   (hex)		Zhong Shan City Richsound Electronic Industrial Ltd
+F81B04     (base 16)		Zhong Shan City Richsound Electronic Industrial Ltd
+				Qunle Industrial Area,East ShaGang Road,GangKou ZhongShan,GuangDong,China
+				ZhongShan  GuangDong  528400
+				CN
+
+D8-8C-79   (hex)		Google, Inc.
+D88C79     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+10-34-1B   (hex)		Spacelink
+10341B     (base 16)		Spacelink
+				8830 Complex dr
+				San Diego  CA  92123
+				US
+
+30-A4-52   (hex)		Arrival Elements BV
+30A452     (base 16)		Arrival Elements BV
+				M. Keynesplein 12-46
+				Amsterdam    1066 EP
+				NL
+
+00-1E-68   (hex)		Quanta Computer Inc.
+001E68     (base 16)		Quanta Computer Inc.
+				NO. 211, WEN HWA 2RD., KUEI SHAN HSIANG
+				TAIPEI  TAO YUAN SHIEN  333
+				TW
+
+00-23-8B   (hex)		Quanta Computer Inc.
+00238B     (base 16)		Quanta Computer Inc.
+				NO. 211, WEN HWA 2RD.,KUEI SHAN HSIANG, TAO YUAN SHIEN,
+				TAIPEI  TAIWAN  333
+				TW
+
+2C-60-0C   (hex)		Quanta Computer Inc.
+2C600C     (base 16)		Quanta Computer Inc.
+				No.211, Wen Hwa 2nd Rd
+				Taoyuan  Taiwan  33377
+				TW
+
+8C-C5-B4   (hex)		Sagemcom Broadband SAS
+8CC5B4     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-0B-A2   (hex)		Sumitomo Electric Industries, Ltd
+000BA2     (base 16)		Sumitomo Electric Industries, Ltd
+				1-1-3, Shimaya, Konohana-ku
+				Osaka    554-0024
+				JP
+
+00-08-F6   (hex)		Sumitomo Electric Industries, Ltd
+0008F6     (base 16)		Sumitomo Electric Industries, Ltd
+				1-1-3, Shimaya, Konohana-ku
+				Osaka    554-0024
+				JP
+
+00-00-5F   (hex)		Sumitomo Electric Industries, Ltd
+00005F     (base 16)		Sumitomo Electric Industries, Ltd
+				1-1-3, Shimaya, Konohana-ku
+				Osaka    554-0024
+				JP
+
+18-EC-E7   (hex)		BUFFALO.INC
+18ECE7     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+F4-69-D5   (hex)		IEEE Registration Authority
+F469D5     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+08-3A-F2   (hex)		Espressif Inc.
+083AF2     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+74-3A-20   (hex)		New H3C Technologies Co., Ltd
+743A20     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+30-C9-AB   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+30C9AB     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+3C-1A-9E   (hex)		VitalThings AS
+3C1A9E     (base 16)		VitalThings AS
+				Jarlsoveien 48
+				Tonsberg    3124
+				NO
+
+C4-D7-38   (hex)		Huawei Device Co., Ltd.
+C4D738     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-84-A1   (hex)		Cisco Systems, Inc
+C884A1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D8-77-8B   (hex)		Intelbras
+D8778B     (base 16)		Intelbras
+				BR 101, KM 210
+				São Jose  Santa Catarina  88104-800
+				BR
+
+00-03-E8   (hex)		Wavesight Limited
+0003E8     (base 16)		Wavesight Limited
+				13 Dencora Way
+				Luton  Sundon Business Park  LU3 3HP
+				GB
+
+6C-BA-B8   (hex)		Sagemcom Broadband SAS
+6CBAB8     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E0-D4-64   (hex)		Intel Corporate
+E0D464     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+C0-F6-C2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0F6C2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-AF-F7   (hex)		Arista Networks
+D4AFF7     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+60-07-7C   (hex)		Jala Group
+60077C     (base 16)		Jala Group
+				Melchor Pérez de Holguín N 2643
+				Cochabamba  Cochabamba  0000
+				BO
+
+60-98-66   (hex)		Texas Instruments
+609866     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+04-7E-23   (hex)		China Mobile IOT Company Limited
+047E23     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+14-CC-B3   (hex)		AO GK NATEKS
+14CCB3     (base 16)		AO GK NATEKS
+				Kamenshiki B. str., 4
+				Moscow    115172
+				RU
+
+DC-CD-2F   (hex)		Seiko Epson Corporation
+DCCD2F     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+94-54-CE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+9454CE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+38-8A-BE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+388ABE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+68-93-20   (hex)		New H3C Technologies Co., Ltd
+689320     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+54-84-DC   (hex)		zte corporation
+5484DC     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+38-54-9B   (hex)		zte corporation
+38549B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+08-42-96   (hex)		Mobile Technology Solutions LLC
+084296     (base 16)		Mobile Technology Solutions LLC
+				20379 Bannister Dr.
+				Macomb  MI  48044
+				US
+
+34-3E-A4   (hex)		Ring LLC
+343EA4     (base 16)		Ring LLC
+				1523 26th St
+				Santa Monica  CA  90404
+				US
+
+04-C1-D8   (hex)		Huawei Device Co., Ltd.
+04C1D8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-BC-9C   (hex)		Huawei Device Co., Ltd.
+C8BC9C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B0-FE-E5   (hex)		Huawei Device Co., Ltd.
+B0FEE5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-17-39   (hex)		ITEL MOBILE LIMITED
+C81739     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+58-D0-61   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+58D061     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-EF-B6   (hex)		Edgecore Networks Corporation
+34EFB6     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+E8-74-C7   (hex)		Sentinhealth
+E874C7     (base 16)		Sentinhealth
+				5, Avenude du Grand Sablon
+				LA TRONCHE    38700
+				FR
+
+00-1C-7B   (hex)		Castlenet Technology Inc.
+001C7B     (base 16)		Castlenet Technology Inc.
+				5F., No. 10, Daye Rd., Beitou Dist.
+				Taipei City    112030
+				TW
+
+E4-84-2B   (hex)		HANGZHOU SOFTEL OPTIC CO., LTD
+E4842B     (base 16)		HANGZHOU SOFTEL OPTIC CO., LTD
+				101 BINKANG ROAD, BINJIANG DISTRICT
+				HANGZHOU  ZHEJIANG  310052
+				CN
+
+B8-D3-09   (hex)		Cox Communications, Inc
+B8D309     (base 16)		Cox Communications, Inc
+				6205 Peachtree Dunwoody Rd
+				Atlanta  GA  30328
+				US
+
+94-02-6B   (hex)		Optictimes Co.,Ltd
+94026B     (base 16)		Optictimes Co.,Ltd
+				Hangzhou City, Zhejiang Province
+				Hangzhou  Zhejiang  310023
+				CN
+
+D4-6A-91   (hex)		SnapAV
+D46A91     (base 16)		SnapAV
+				1800 Continental Blvd
+				Charlotte  North Carolina  28273
+				US
+
+44-87-DB   (hex)		Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.
+4487DB     (base 16)		Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.
+				Tymphany Acoustic Technology (Huizhou) Co., Ltd.
+				Huizhou  Guangdong  516223
+				CN
+
+D0-3D-52   (hex)		Ava Security Limited
+D03D52     (base 16)		Ava Security Limited
+				The Charter Building, Charter Place
+				Uxbridge    UB8 1JG 
+				GB
+
+F4-90-EA   (hex)		Deciso B.V.
+F490EA     (base 16)		Deciso B.V.
+				Edison 43
+				Midddelharnis  Zuid Holland  3241LS
+				NL
+
+64-D2-C4   (hex)		Apple, Inc.
+64D2C4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-52-85   (hex)		Apple, Inc.
+DC5285     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-81-52   (hex)		Apple, Inc.
+E88152     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-81-58   (hex)		Apple, Inc.
+908158     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-AD-A3   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+B4ADA3     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+64-23-15   (hex)		Huawei Device Co., Ltd.
+642315     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A4-C7-4B   (hex)		Huawei Device Co., Ltd.
+A4C74B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-D2-3C   (hex)		Apple, Inc.
+D0D23C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-E3-DE   (hex)		Apple, Inc.
+78E3DE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-FD-CB   (hex)		IEEE Registration Authority
+18FDCB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D4-48-2D   (hex)		Shenzhen Deejoy Lighting Technology Co.,Ltd.
+D4482D     (base 16)		Shenzhen Deejoy Lighting Technology Co.,Ltd.
+				3rd Floor, Building B3, Xujingchang Industrial Park,Xinhe Community Fuyong Town,Baoan District
+				Shenzhen  Guangdong  518103
+				CN
+
+D8-F8-AF   (hex)		DAONTEC
+D8F8AF     (base 16)		DAONTEC
+				219, Gasan digital 1-ro
+				Seoul    KS013
+				KR
+
+40-8C-4C   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+408C4C     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+				Chudong science and technology park, 111 shaxin road, tangxia town,
+				dongguan city  guangdong province  523710
+				CN
+
+6C-AD-AD   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+6CADAD     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+CC-E0-DA   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
+CCE0DA     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
+				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
+				 Beijing    100085
+				CN
+
+14-1B-30   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
+141B30     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
+				Shenzhen  Nanshan District  518000
+				CN
+
+F4-6F-ED   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+F46FED     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+94-B9-7E   (hex)		Espressif Inc.
+94B97E     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+A8-30-1C   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+A8301C     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+D8-F3-BC   (hex)		Liteon Technology Corporation
+D8F3BC     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+B8-47-7A   (hex)		Dasan Electron Co., Ltd.
+B8477A     (base 16)		Dasan Electron Co., Ltd.
+				705 HaeAn-Ro #307, SangRok-Gu
+				Ansan  KyungKi  15588
+				KR
+
+7C-78-B2   (hex)		Wyze Labs Inc
+7C78B2     (base 16)		Wyze Labs Inc
+				4030 Lake Washington Boulevard NE
+				Kirkland  WA  98033
+				US
+
+D8-37-3B   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+D8373B     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+6C-2D-24   (hex)		Zhen Shi Information Technology (Shanghai) Co., Ltd.
+6C2D24     (base 16)		Zhen Shi Information Technology (Shanghai) Co., Ltd.
+				5F, Building 3?No. 401 Caobao Road, Xuhui District, Shanghai, China
+				Shanghai  Shanghai  200233
+				CN
+
+B8-AE-1C   (hex)		Smart Cube., Ltd
+B8AE1C     (base 16)		Smart Cube., Ltd
+				13F.-3, No. 78, Sec. 2, Anhe Rd., Da’an Dist., Taipei City 106, Taiwan (R.O.C.)
+				Taipei    106
+				TW
+
+80-03-84   (hex)		Ruckus Wireless
+800384     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+FC-69-8C   (hex)		ANDREAS STIHL AG & Co. KG
+FC698C     (base 16)		ANDREAS STIHL AG & Co. KG
+				Badstraße 115
+				Waiblingen    71336
+				DE
+
+00-23-A7   (hex)		Redpine Signals, Inc.
+0023A7     (base 16)		Redpine Signals, Inc.
+				Plot 87, Sagar Society 
+				Hyderabad  AP  500034
+				IN
+
+44-CE-3A   (hex)		Jiangsu Huacun Electronic Technology Co., Ltd.
+44CE3A     (base 16)		Jiangsu Huacun Electronic Technology Co., Ltd.
+				C4, 9th Floor, 266 New Century Avenue, Tongzhou District
+				Nantong City  Jiangsu Province  226300
+				CN
+
+9C-1E-A4   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+9C1EA4     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+4C-EF-56   (hex)		Shenzhen Sundray Technologies Company Limited
+4CEF56     (base 16)		Shenzhen Sundray Technologies Company Limited
+				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
+				Shenzhen  Guangdong  518057
+				CN
+
+E4-C3-2A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+E4C32A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+90-9A-4A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+909A4A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+BC-97-89   (hex)		Huawei Device Co., Ltd.
+BC9789     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+AC-12-2F   (hex)		Fantasia Trading LLC
+AC122F     (base 16)		Fantasia Trading LLC
+				5350 Ontario Mills Pkwy, Suite 100
+				Ontario  CA  91764
+				US
+
+FC-45-C3   (hex)		Texas Instruments
+FC45C3     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+AC-6A-A3   (hex)		Shenzhen Kertong Technology Co.,Ltd
+AC6AA3     (base 16)		Shenzhen Kertong Technology Co.,Ltd
+				405,Fuyuan Building ,District 45 Bao’an
+				Shenzhen  Guangdong  518101
+				CN
+
+E8-4F-4B   (hex)		Shenzhen Delos Electronic Co., Ltd
+E84F4B     (base 16)		Shenzhen Delos Electronic Co., Ltd
+				Rm 603, Tower B, Galaxy World Building, No.1 Yabao Road,Longgang District,Shenzhen,P.R.China.
+				shenzhen  guangdong  518000
+				CN
+
+B0-4A-39   (hex)		Beijing Roborock Technology Co., Ltd.
+B04A39     (base 16)		Beijing Roborock Technology Co., Ltd.
+				Floor 6,Building C,Kangjian Baosheng Plaza,No. 8 Heiquan Road,Haidian District
+				Beijing  Beijing  100085
+				CN
+
+A4-F9-E4   (hex)		AirVine Scientific, Inc.
+A4F9E4     (base 16)		AirVine Scientific, Inc.
+				1500 Wyatt Drive, Suite 9
+				Santa Clara  CA  95054
+				US
+
+F4-4F-D3   (hex)		shenzhen hemuwei technology co.,ltd
+F44FD3     (base 16)		shenzhen hemuwei technology co.,ltd
+				220, Building C, IoT Industrial Park, Bantian Street, Longgang District
+				shenzhen  guangdong  518000
+				CN
+
+68-45-71   (hex)		Huawei Device Co., Ltd.
+684571     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+84-93-A0   (hex)		Huawei Device Co., Ltd.
+8493A0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+9C-8E-9C   (hex)		Huawei Device Co., Ltd.
+9C8E9C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-14-AD   (hex)		Huawei Device Co., Ltd.
+4014AD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A8-74-84   (hex)		zte corporation
+A87484     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E0-4B-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E04BA6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-B6-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C8B6D3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+FC-8D-3D   (hex)		Leapfive Tech. Ltd.
+FC8D3D     (base 16)		Leapfive Tech. Ltd.
+				huaruizhididasha 8ceng
+				shenzhen  guangdong  518057
+				CN
+
+00-23-86   (hex)		IMI Hydronic Engineering international SA
+002386     (base 16)		IMI Hydronic Engineering international SA
+				Route de Crassier 19
+				Eysins    1262
+				CH
+
+A0-69-74   (hex)		Honor Device Co., Ltd.
+A06974     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+C0-33-DA   (hex)		Shenzhen JRUN Technologies CO., LTD
+C033DA     (base 16)		Shenzhen JRUN Technologies CO., LTD
+				A Zone,9F,Huilongda Industrial Park,Shuitian Private Industrial Park,Shiyan Street,Bao,an District.
+				Shenzhen  Guangdong  518101
+				CN
+
+60-70-72   (hex)		SHENZHEN HONGDE SMART LINK TECHNOLOGY CO., LTD
+607072     (base 16)		SHENZHEN HONGDE SMART LINK TECHNOLOGY CO., LTD
+				Fu Qian Road, Longhua district
+				ShenZhen  GuangDong province   518000
+				CN
+
+DC-B7-FC   (hex)		Alps Electric (Ireland) Ltd
+DCB7FC     (base 16)		Alps Electric (Ireland) Ltd
+				MOUNT LEADER INDUSTRIAL ESTATE
+				MILLSTREET  CO. CORK  P51 XC56
+				IE
+
+AC-FA-A5   (hex)		digitron
+ACFAA5     (base 16)		digitron
+				tehnopark A -701, 697 PanGyo-ro, Bundong 
+				Seongnam  GyeongGiDO  13511
+				KR
+
+78-C9-5E   (hex)		Midmark RTLS 
+78C95E     (base 16)		Midmark RTLS 
+				2600 Millercreek Rd
+				Traverse City  MI  49684
+				US
+
+20-CD-6E   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+20CD6E     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+08-93-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+089356     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-07-89   (hex)		Allradio Co., Ltd
+000789     (base 16)		Allradio Co., Ltd
+				76, Deokcheon-ro 34beon-gil, Manan-gu
+				Anyang-si,Gyeonggi-do  Republic of Korea  430-803
+				KR
+
+6C-14-6E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C146E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-E9-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+44E968     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+DC-4A-9E   (hex)		IEEE Registration Authority
+DC4A9E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E0-C3-77   (hex)		Samsung Electronics Co.,Ltd
+E0C377     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+4C-FB-F4   (hex)		Optimal Audio Ltd
+4CFBF4     (base 16)		Optimal Audio Ltd
+				Century Point, Halifax Rd
+				High Wycombe    HP12 3SL
+				GB
+
+64-03-7F   (hex)		Samsung Electronics Co.,Ltd
+64037F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-9D-02   (hex)		Samsung Electronics Co.,Ltd
+B49D02     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-9F-F5   (hex)		Samsung Electronics Co.,Ltd
+809FF5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-79-24   (hex)		Huawei Device Co., Ltd.
+647924     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D8-CC-98   (hex)		Huawei Device Co., Ltd.
+D8CC98     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B8-87-6E   (hex)		Yandex Services AG
+B8876E     (base 16)		Yandex Services AG
+				Werftestrasse 4, 
+				Luzern    6005
+				CH
+
+F8-6D-73   (hex)		Zengge Co., Limited
+F86D73     (base 16)		Zengge Co., Limited
+				3/F, B Building, Second Laowei Industrial Zone, Longhua District
+				Shenzhen  Guangdong  518109
+				CN
+
+58-86-94   (hex)		EFM Networks
+588694     (base 16)		EFM Networks
+				6F, Benposra II 1197-1 Bojeong Giheung Gu
+				Yong In  Kyunggi do  446913
+				KR
+
+AC-37-28   (hex)		Taicang T&W Electronics
+AC3728     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+BC-99-30   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC9930     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-68-E7   (hex)		Espressif Inc.
+E868E7     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+D0-BC-C1   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+D0BCC1     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+6C-E8-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6CE874     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-69-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C469F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-94-35   (hex)		ARRIS Group, Inc.
+C09435     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+18-B6-CC   (hex)		We Corporation Inc.
+18B6CC     (base 16)		We Corporation Inc.
+				201, 33, Deokcheon-ro, Manan-gu
+				Anyang-si  Gyeonggi-do  14088
+				KR
+
+30-A0-23   (hex)		ROCK PATH S.R.L
+30A023     (base 16)		ROCK PATH S.R.L
+				Via Federico Borromeo 2,  20017 Rho (MI), Italy
+				Milan    20017
+				IT
+
+E8-48-B8   (hex)		TP-Link Corporation Limited
+E848B8     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+78-CB-2C   (hex)		Join Digital, Inc.
+78CB2C     (base 16)		Join Digital, Inc.
+				75 E Santa Clara St., 6th Floor
+				San Jose  CA  95113
+				US
+
+30-9E-1D   (hex)		OHSUNG
+309E1D     (base 16)		OHSUNG
+				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
+				GUMI  GYEONG BUK  730-030
+				KR
+
+68-79-12   (hex)		IEEE Registration Authority
+687912     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+EC-64-88   (hex)		Honor Device Co., Ltd.
+EC6488     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+74-D6-CB   (hex)		New H3C Technologies Co., Ltd
+74D6CB     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+0C-3A-FA   (hex)		New H3C Technologies Co., Ltd
+0C3AFA     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+28-3B-82   (hex)		D-Link International
+283B82     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+0C-B6-D2   (hex)		D-Link International
+0CB6D2     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+60-BE-C4   (hex)		Apple, Inc.
+60BEC4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-B1-DD   (hex)		Apple, Inc.
+F8B1DD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-66-5A   (hex)		Apple, Inc.
+F8665A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-81-7E   (hex)		Apple, Inc.
+A8817E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-47-6E   (hex)		IEEE Registration Authority
+8C476E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+48-70-1E   (hex)		Texas Instruments
+48701E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+E8-C3-20   (hex)		Austco Marketing & Service (USA) ltd.
+E8C320     (base 16)		Austco Marketing & Service (USA) ltd.
+				9155 Sterling St Unit 100
+				Irving  TX  75063
+				US
+
+AC-33-28   (hex)		Huawei Device Co., Ltd.
+AC3328     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-23-06   (hex)		ALPSALPINE CO,.LTD
+002306     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi,
+				Soma-city,  Fukushima-pref.,  976-8501
+				JP
+
+00-24-33   (hex)		ALPSALPINE CO,.LTD
+002433     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi,
+				Soma-city,  Fukushima-pref.,  976-8501
+				JP
+
+9C-8D-7C   (hex)		ALPSALPINE CO,.LTD
+9C8D7C     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				Kakuda  Miyagi-Pref  981-1595
+				JP
+
+00-16-FE   (hex)		ALPSALPINE CO,.LTD
+0016FE     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi,
+				Soma-city,  Fukushima-pref.,  976-8501
+				JP
+
+00-19-C1   (hex)		ALPSALPINE CO,.LTD
+0019C1     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi,
+				Soma-city,  Fukushima-pref.,  976-8501
+				JP
+
+D4-76-A0   (hex)		Fortinet, Inc.
+D476A0     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale    94086
+				US
+
+80-B9-7A   (hex)		eero inc.
+80B97A     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+BC-75-36   (hex)		ALPSALPINE CO,.LTD
+BC7536     (base 16)		ALPSALPINE CO,.LTD
+				nishida  6-1 
+				Kakuda-City  Miyagi-Pref  981-1595
+				JP
+
+58-16-D7   (hex)		ALPSALPINE CO,.LTD
+5816D7     (base 16)		ALPSALPINE CO,.LTD
+				nishida  6-1 
+				Kakuda-City  Miyagi-Pref  981-1595
+				JP
+
+E0-75-0A   (hex)		ALPSALPINE CO,.LTD
+E0750A     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				kakuda-City    981-1595
+				US
+
+E0-AE-5E   (hex)		ALPSALPINE CO,.LTD
+E0AE5E     (base 16)		ALPSALPINE CO,.LTD
+				6-3-36 Furukawanakazato,
+				Osaki  Miyagi-pref  989-6181
+				JP
+
+60-8D-26   (hex)		Arcadyan Corporation
+608D26     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+B4-EC-02   (hex)		ALPSALPINE CO,.LTD
+B4EC02     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				Kakuda  Miyagi-Pref  981-1595
+				JP
+
+E4-27-61   (hex)		Honor Device Co., Ltd.
+E42761     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+8C-F3-19   (hex)		Siemens Industrial Automation Products Ltd., Chengdu
+8CF319     (base 16)		Siemens Industrial Automation Products Ltd., Chengdu
+				Tianyuan Road No.99, High Tech Zone West
+				Chengdu  Sichuan Province  611731 
+				CN
+
+1C-39-29   (hex)		OHSUNG
+1C3929     (base 16)		OHSUNG
+				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
+				GUMI  GYEONG BUK  730-030
+				KR
+
+C8-A4-0D   (hex)		Cooler Master Technology Inc
+C8A40D     (base 16)		Cooler Master Technology Inc
+				8F., No. 788-1, Zhongzheng Rd., Zhonghe Dist.
+				New Taipei City  New Taipei City  23586
+				TW
+
+38-42-0B   (hex)		Sonos, Inc.
+38420B     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+C8-3A-6B   (hex)		Roku, Inc
+C83A6B     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+A4-53-EE   (hex)		IEEE Registration Authority
+A453EE     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-49-62   (hex)		Roku, Inc
+8C4962     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+E0-2E-3F   (hex)		Huawei Device Co., Ltd.
+E02E3F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-BF-60   (hex)		TECNO MOBILE LIMITED
+C4BF60     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+D0-40-EF   (hex)		Murata Manufacturing Co., Ltd.
+D040EF     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+8C-8C-AA   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+8C8CAA     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+90-CC-DF   (hex)		Intel Corporate
+90CCDF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+08-5B-D6   (hex)		Intel Corporate
+085BD6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+B4-0E-DE   (hex)		Intel Corporate
+B40EDE     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E0-2B-E9   (hex)		Intel Corporate
+E02BE9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+BC-9A-53   (hex)		Huawei Device Co., Ltd.
+BC9A53     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-27-27   (hex)		Huawei Device Co., Ltd.
+DC2727     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F0-42-F5   (hex)		Huawei Device Co., Ltd.
+F042F5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+4C-11-54   (hex)		Mobiwire Mobiles (NingBo) Co., LTD
+4C1154     (base 16)		Mobiwire Mobiles (NingBo) Co., LTD
+				No.999 Dacheng East Road, Fenghua District, Ningbo City , Zhejiang Province, PRC
+				Ningbo  Zhejiang  315500
+				CN
+
+C8-E2-65   (hex)		Intel Corporate
+C8E265     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+8C-8D-28   (hex)		Intel Corporate
+8C8D28     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+D0-56-BF   (hex)		AMOSENSE
+D056BF     (base 16)		AMOSENSE
+				Narutu street 56
+				SEOUL  Sucho gu  06527
+				KR
+
+B4-B5-B6   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+B4B5B6     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+04-7A-0B   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+047A0B     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+90-0F-0C   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+900F0C     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+F0-A2-25   (hex)		Amazon Technologies Inc.
+F0A225     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+BC-9D-42   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+BC9D42     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+4C-75-25   (hex)		Espressif Inc.
+4C7525     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+74-04-F0   (hex)		Mobiwire Mobiles (NingBo) Co., LTD
+7404F0     (base 16)		Mobiwire Mobiles (NingBo) Co., LTD
+				No.999 Dacheng East Road, Fenghua District, Ningbo City , Zhejiang Province, PRC
+				Ningbo  Zhejiang  315500
+				CN
+
+24-0B-88   (hex)		Taicang T&W Electronics
+240B88     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+0C-93-8F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+0C938F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+78-F9-B4   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+78F9B4     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+60-A8-FE   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+60A8FE     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+D8-EF-CD   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+D8EFCD     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+6C-F7-12   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+6CF712     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+EC-75-ED   (hex)		Citrix Systems, Inc.
+EC75ED     (base 16)		Citrix Systems, Inc.
+				851 W Cypress Creek Rd
+				Fort Lauderdale  FL  33309
+				US
+
+5C-BD-9A   (hex)		Huawei Device Co., Ltd.
+5CBD9A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+8C-DE-E6   (hex)		Samsung Electronics Co.,Ltd
+8CDEE6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-EC-81   (hex)		Samsung Electronics Co.,Ltd
+10EC81     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-5D-83   (hex)		Samsung Electronics Co.,Ltd
+C45D83     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-A4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+5CA4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+14-A3-B4   (hex)		Huawei Device Co., Ltd.
+14A3B4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+9C-9C-1F   (hex)		Espressif Inc.
+9C9C1F     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+D8-09-D6   (hex)		ZEXELON CO., LTD.
+D809D6     (base 16)		ZEXELON CO., LTD.
+				195 Tonohiraga,
+				Matsudo-City  Chiba  270-0004
+				JP
+
+E8-6D-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E86DE9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-46-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+144658     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-BE-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+58BE72     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-8F-FE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+108FFE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-D7-CE   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+BCD7CE     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District, Hangzhou, Zhejiang
+				Hangzhou  Zhejiang  310000
+				CN
+
+9C-A5-70   (hex)		eero inc.
+9CA570     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+A0-41-2D   (hex)		Lansen Systems AB
+A0412D     (base 16)		Lansen Systems AB
+				Skallebackavägen 3
+				Halmstad    30241
+				SE
+
+C4-39-60   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+C43960     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+98-BE-DC   (hex)		Honor Device Co., Ltd.
+98BEDC     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+44-B6-BE   (hex)		Cisco Systems, Inc
+44B6BE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-A0-FB   (hex)		Toray Engineering D Solutions Co., Ltd.
+00A0FB     (base 16)		Toray Engineering D Solutions Co., Ltd.
+				1-45, OE 1-CHOME
+				OTSU CITY    520-2141
+				JP
+
+70-61-BE   (hex)		Wistron Neweb Corporation
+7061BE     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+34-8A-12   (hex)		Aruba, a Hewlett Packard Enterprise Company
+348A12     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+84-D3-43   (hex)		Calix Inc.
+84D343     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+D8-47-BB   (hex)		Huawei Device Co., Ltd.
+D847BB     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-14-11   (hex)		Apple, Inc.
+C41411     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-C9-5D   (hex)		Apple, Inc.
+CCC95D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-B5-D3   (hex)		SecuWorks
+38B5D3     (base 16)		SecuWorks
+				#709, 218 Gajeong-ro
+				Yuseong -gu  Daejeon  34129
+				KR
+
+34-31-8F   (hex)		Apple, Inc.
+34318F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-6F-D8   (hex)		IEEE Registration Authority
+446FD8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C8-94-02   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+C89402     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+7C-B9-4C   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
+7CB94C     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
+				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
+				Nanjing  Jiangsu  211800
+				CN
+
+DC-15-C8   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+DC15C8     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+6C-D6-30   (hex)		Rootous System Co.,Ltd
+6CD630     (base 16)		Rootous System Co.,Ltd
+				KT B/D 4Floor, 100, Ahopgeori-gil
+				Yeonseo-myeon  Sejong-si  30049
+				KR
+
+B8-07-56   (hex)		Cisco Meraki
+B80756     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+C8-33-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C833E5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-56-FE   (hex)		Cisco Meraki
+3456FE     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+B8-44-AE   (hex)		TCT mobile ltd
+B844AE     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+E4-F7-5B   (hex)		ARRIS Group, Inc.
+E4F75B     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-79-0A   (hex)		ARRIS Group, Inc.
+F8790A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+0C-CF-89   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+0CCF89     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+0C-8C-69   (hex)		Shenzhen elink smart Co., ltd
+0C8C69     (base 16)		Shenzhen elink smart Co., ltd
+				Floor 2,Building A , Hongtian Xinfengze Industrial   Park Huang Pu Community , Xin Qiao District ,Baoan Area
+				shenzhen  Guangdong Province  518101
+				CN
+
+D8-BB-C1   (hex)		Micro-Star INTL CO., LTD.
+D8BBC1     (base 16)		Micro-Star INTL CO., LTD.
+				No.69, Lide St.,
+				New Taipei City  Taiwan  235
+				TW
+
+AC-5A-FC   (hex)		Intel Corporate
+AC5AFC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+1C-93-7C   (hex)		ARRIS Group, Inc.
+1C937C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+58-FC-20   (hex)		Altice Labs S.A.
+58FC20     (base 16)		Altice Labs S.A.
+				NIF 504705610, Rua Eng. José Ferreira Pinto Basto
+				Aveiro    3810-106
+				PT
+
+58-FD-20   (hex)		Systemhouse Solutions AB
+58FD20     (base 16)		Systemhouse Solutions AB
+				Mikrofonvagen 28
+				STOCKHOLM    126 81
+				SE
+
+04-D6-F4   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+04D6F4     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+04-90-81   (hex)		Pensando Systems, Inc.
+049081     (base 16)		Pensando Systems, Inc.
+				570 Alder Drive
+				Milpitas  CA  95035
+				US
+
+4C-79-6E   (hex)		Intel Corporate
+4C796E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+98-AD-1D   (hex)		Huawei Device Co., Ltd.
+98AD1D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F8-AA-3F   (hex)		DWnet Technologies(Suzhou) Corporation
+F8AA3F     (base 16)		DWnet Technologies(Suzhou) Corporation
+				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
+				Suzhou    21500
+				CN
+
+00-68-2B   (hex)		Huawei Device Co., Ltd.
+00682B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F0-9E-4A   (hex)		Intel Corporate
+F09E4A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+F0-77-C3   (hex)		Intel Corporate
+F077C3     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+24-9A-D8   (hex)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+249AD8     (base 16)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+				309, 3th Floor, No.16, Yun Ding North Road, Huli District
+				xiamen  Fujian  361015
+				CN
+
+D8-5E-D3   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+D85ED3     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+00-E4-21   (hex)		Sony Interactive Entertainment Inc.
+00E421     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+CC-DB-04   (hex)		DataRemote Inc.
+CCDB04     (base 16)		DataRemote Inc.
+				18001 Old Cutler Rd. Suite 600
+				Palmetto Bay  FL  33157
+				US
+
+E8-9F-39   (hex)		Nokia
+E89F39     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+34-73-5A   (hex)		Dell Inc.
+34735A     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+98-1A-35   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+981A35     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-34-28   (hex)		Microchip Technology Inc.
+803428     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+28-EF-01   (hex)		Amazon Technologies Inc.
+28EF01     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+B0-22-7A   (hex)		HP Inc.
+B0227A     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+60-A7-51   (hex)		Huawei Device Co., Ltd.
+60A751     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+10-2B-41   (hex)		Samsung Electronics Co.,Ltd
+102B41     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+34-4A-C3   (hex)		HuNan ZiKun Information Technology CO., Ltd
+344AC3     (base 16)		HuNan ZiKun Information Technology CO., Ltd
+				101-8, 1st Floor, Juxing Venture Base, No. 8 Lujing Road, GaoXin Development District
+				Changsha City  Hunan Province  410000
+				CN
+
+68-2D-83   (hex)		SHENZHEN DINGHE COMMUNICATION COMPANY
+682D83     (base 16)		SHENZHEN DINGHE COMMUNICATION COMPANY
+				ROOM 1802, BAOYUNDA WULIU INFORMATION BUILDING
+				SHENZHEN  GUANGDONG  518101
+				CN
+
+A8-43-97   (hex)		Innogrit Corporation
+A84397     (base 16)		Innogrit Corporation
+				1735 Technology Dr, Suite 620
+				San Jose  CA  95110
+				US
+
+D8-CD-2C   (hex)		WUXI NEIHUA NETWORK TECHNOLOGY CO., LTD
+D8CD2C     (base 16)		WUXI NEIHUA NETWORK TECHNOLOGY CO., LTD
+				16 Lexing Road, Xinwu  District
+				Wuxi  Jiangsu  214000
+				CN
+
+08-47-4C   (hex)		Nokia
+08474C     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+90-C1-19   (hex)		Nokia
+90C119     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+7C-F8-80   (hex)		Cisco Systems, Inc
+7CF880     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-05-F8   (hex)		Bytedance
+E405F8     (base 16)		Bytedance
+				E World Center,11 Zhongguancun Street Haidian Dist
+				Beijing City  Beijing  100102
+				CN
+
+F8-45-C4   (hex)		Shenzhen Netforward Micro-Electronic Co., Ltd.
+F845C4     (base 16)		Shenzhen Netforward Micro-Electronic Co., Ltd.
+				Room 611-2?6st Floor,Building 1, The Sunmax Technology Park, No 8 Keyuan Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+78-10-53   (hex)		China Mobile Group Device Co.,Ltd.
+781053     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+00-08-0C   (hex)		VDA Group S.p.a.
+00080C     (base 16)		VDA Group S.p.a.
+				Viale Lino Zanussi 3
+				Pordenone  Pordenone  33170
+				IT
+
+D0-97-FE   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+D097FE     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+84-3A-5B   (hex)		Inventec(Chongqing) Corporation
+843A5B     (base 16)		Inventec(Chongqing) Corporation
+				No.66 West District 2nd Rd, Shapingba District
+				Chongqing  Chongqing  401331
+				CN
+
+54-49-DF   (hex)		Peloton Interactive, Inc
+5449DF     (base 16)		Peloton Interactive, Inc
+				158 W 27th St, 4th Fl
+				New York  NY  10001
+				US
+
+18-2A-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+182A57     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-3E-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F83E95     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-12-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+481258     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-EB-46   (hex)		Google, Inc.
+D8EB46     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+2C-17-E0   (hex)		SYSTEMES ET TECHNOLOGIES IDENTIFICATION (STid)
+2C17E0     (base 16)		SYSTEMES ET TECHNOLOGIES IDENTIFICATION (STid)
+				20 Parc d’activités des Pradeaux
+				GREASQUE  Select State  F-13850
+				FR
+
+CC-32-96   (hex)		Huawei Device Co., Ltd.
+CC3296     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-CD-AC   (hex)		Espressif Inc.
+98CDAC     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+80-8A-F7   (hex)		Nanoleaf
+808AF7     (base 16)		Nanoleaf
+				100 Front Street East, 4th Floor
+				Toronto  Ontario  M5A 1E1
+				CA
+
+B0-3D-C2   (hex)		Wasp artificial intelligence(Shenzhen) Co.,ltd
+B03DC2     (base 16)		Wasp artificial intelligence(Shenzhen) Co.,ltd
+				A402,Block ABCD,Building 3,Phase 1,Tianan Yungu Industrial Park,Gangtou Comunity,Bantian Street,Longhua District,Shenzhen
+				Shenzhen  Select State  518000
+				CN
+
+C8-4D-34   (hex)		LIONS Taiwan Technology Inc.
+C84D34     (base 16)		LIONS Taiwan Technology Inc.
+				3F-2, 120, Sec. 2, Gongdao 5th Rd.
+				Hsinchu  Taiwan  30072
+				TW
+
+44-6F-F8   (hex)		Dyson Limited
+446FF8     (base 16)		Dyson Limited
+				Tetbury Hill
+				Malmesbury  Wiltshire  SN16 0RP
+				GB
+
+6C-1B-3F   (hex)		MiraeSignal Co., Ltd
+6C1B3F     (base 16)		MiraeSignal Co., Ltd
+				#701,C-dong Bundang Techno Park Pangyoro 744
+				Bundang-gu Sungnam-si  Kyungkido  13510
+				KR
+
+28-AF-FD   (hex)		Cisco Systems, Inc
+28AFFD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-76-13   (hex)		Ring LLC
+9C7613     (base 16)		Ring LLC
+				1523 26th St
+				Santa Monica  CA  90404
+				US
+
+44-9B-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+449BC1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-25-D2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+2025D2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+28-F4-9B   (hex)		LEETEK
+28F49B     (base 16)		LEETEK
+				Ojeong-ro, 47
+				Bucheon-si  Gyeonggi-do  14445
+				KR
+
+18-42-D4   (hex)		Wuhan Hosan Telecommunication Technology Co.,Ltd
+1842D4     (base 16)		Wuhan Hosan Telecommunication Technology Co.,Ltd
+				Fourth Floor,Building N,Quannengtong Shuangchuang Yuan,Gold-silver Lake Street,East West Lake District,
+				Wuhan  Hubei  430043
+				CN
+
+A8-63-7D   (hex)		D-Link International
+A8637D     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+2C-43-BE   (hex)		Sunnovo International Limited
+2C43BE     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+58-10-B7   (hex)		Infinix mobility limited
+5810B7     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+B0-24-91   (hex)		Huawei Device Co., Ltd.
+B02491     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-75-1A   (hex)		Huawei Device Co., Ltd.
+98751A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-91-80   (hex)		Apple, Inc.
+1C9180     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-B9-10   (hex)		Apple, Inc.
+4CB910     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-89-01   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B48901     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-92-5C   (hex)		Apple, Inc.
+E0925C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-15-3D   (hex)		Beijing Yaxunhongda Technology Co., Ltd.
+EC153D     (base 16)		Beijing Yaxunhongda Technology Co., Ltd.
+				East area,4th floor,No.5,Shangdi 5th Street Haidian District,Beijing 
+				Beijing  Beijing  100000
+				CN
+
+D8-A3-5C   (hex)		Samsung Electronics Co.,Ltd
+D8A35C     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+C0-92-96   (hex)		zte corporation
+C09296     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+50-E2-4E   (hex)		zte corporation
+50E24E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+4C-77-66   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+4C7766     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+78-E3-6D   (hex)		Espressif Inc.
+78E36D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+14-5A-FC   (hex)		Liteon Technology Corporation
+145AFC     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+1C-A0-EF   (hex)		IEEE Registration Authority
+1CA0EF     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-18-85   (hex)		Motorola Solutions Inc.
+001885     (base 16)		Motorola Solutions Inc.
+				500 W Monroe Street, Ste 4400
+				Chicago  IL  60661-3781
+				US
+
+D8-E7-2B   (hex)		NETSCOUT SYSTEMS INC
+D8E72B     (base 16)		NETSCOUT SYSTEMS INC
+				310 Littleton Road
+				Westford  MA  01886 
+				US
+
+18-BF-B3   (hex)		Samsung Electronics Co., Ltd., Memory Division
+18BFB3     (base 16)		Samsung Electronics Co., Ltd., Memory Division
+				1, Samsungjeonja-ro
+				Hwaseong-si  Gyeonggi-do  18448
+				KR
+
+2C-8D-B1   (hex)		Intel Corporate
+2C8DB1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+58-6C-25   (hex)		Intel Corporate
+586C25     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+08-2C-ED   (hex)		Technity Solutions Inc.
+082CED     (base 16)		Technity Solutions Inc.
+				100 West Beaver Creek Rd, Unit 13
+				Richmond Hill  Ontario  L4B 1H4
+				CA
+
+34-86-5D   (hex)		Espressif Inc.
+34865D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+B4-E3-F9   (hex)		Silicon Laboratories
+B4E3F9     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+A4-9B-CD   (hex)		Cisco Systems, Inc
+A49BCD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+04-27-28   (hex)		Microsoft Corporation
+042728     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+20-66-CF   (hex)		FREEBOX SAS
+2066CF     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+2C-C8-1B   (hex)		Routerboard.com
+2CC81B     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+88-E0-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88E056     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-7D-33   (hex)		Huawei Device Co., Ltd.
+D07D33     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C0-E1-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0E1BE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-35-E5   (hex)		EM Microelectronic
+D035E5     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+90-96-F3   (hex)		BUFFALO.INC
+9096F3     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+54-0E-58   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+540E58     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+5C-64-8E   (hex)		Zyxel Communications Corporation
+5C648E     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+30-E3-96   (hex)		Huawei Device Co., Ltd.
+30E396     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-A1-51   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+C4A151     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+78-47-E3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+7847E3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY, 
+				CHENGDU  SICHUAN  611330
+				CN
+
+EC-F8-EB   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ECF8EB     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+F0-92-B4   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+F092B4     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+F4-4E-38   (hex)		Olibra LLC
+F44E38     (base 16)		Olibra LLC
+				45 legin dr
+				creskill  NJ  07626
+				US
+
+2C-63-73   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+2C6373     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+A0-D7-22   (hex)		Samsung Electronics Co.,Ltd
+A0D722     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-49-B0   (hex)		Samsung Electronics Co.,Ltd
+5049B0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E8-05-DC   (hex)		Verifone Inc.
+E805DC     (base 16)		Verifone Inc.
+				2560 North First Street, Suite 220
+				San Jose  CA  95131
+				US
+
+10-7B-CE   (hex)		Nokia
+107BCE     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+C8-05-9E   (hex)		Hefei Symboltek Co.,Ltd
+C8059E     (base 16)		Hefei Symboltek Co.,Ltd
+				Standard factory building 2 layer,Tianmen Lake 1#,No.36 Fairview Avenue District Econmic Development Zone Hefei, Anhui 
+				Hefei  Anhui  230601
+				CN
+
+34-FC-A1   (hex)		Micronet union Technology(Chengdu)Co., Ltd.
+34FCA1     (base 16)		Micronet union Technology(Chengdu)Co., Ltd.
+				No.502, Building 5, No. 528, Yuefei Road, Shibantan Street, Xindu District
+				Chengdu  Sichuan  610000
+				CN
+
+28-97-B8   (hex)		myenergi Ltd
+2897B8     (base 16)		myenergi Ltd
+				Church View Business Centre, Binbrook
+				Market Rasen  Lincolnshire  LN8 6BY
+				GB
+
+48-06-2B   (hex)		Private
+48062B     (base 16)		Private
+
+B0-A7-B9   (hex)		TP-Link Corporation Limited
+B0A7B9     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+6C-5A-B0   (hex)		TP-Link Corporation Limited
+6C5AB0     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+4C-F5-DC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+4CF5DC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+60-E6-F0   (hex)		Wistron Neweb Corporation
+60E6F0     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+20-1F-3B   (hex)		Google, Inc.
+201F3B     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+B8-25-B5   (hex)		Trakm8 Ltd
+B825B5     (base 16)		Trakm8 Ltd
+				4 Roman Park, Roman Way
+				Coleshill   West Midlands  B46 1HG
+				GB
+
+20-D2-76   (hex)		ITEL MOBILE LIMITED
+20D276     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+08-A8-42   (hex)		Huawei Device Co., Ltd.
+08A842     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-F5-D6   (hex)		IEEE Registration Authority
+C8F5D6     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+40-58-99   (hex)		Logitech Far East
+405899     (base 16)		Logitech Far East
+				#2 Creation Rd. 4,
+				Hsinchu    300
+				TW
+
+8C-4D-EA   (hex)		Cerio Corporation
+8C4DEA     (base 16)		Cerio Corporation
+				4F.-3., No.192, Sec. 2, Zhongxing Rd., Xindian Dist.
+				New Taipei City    231
+				TW
+
+04-B9-E3   (hex)		Samsung Electronics Co.,Ltd
+04B9E3     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+98-43-FA   (hex)		Intel Corporate
+9843FA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+94-AA-0A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+94AA0A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+7C-F4-62   (hex)		BEIJING HUAWOO TECHNOLOGIES CO.LTD
+7CF462     (base 16)		BEIJING HUAWOO TECHNOLOGIES CO.LTD
+				A411-3, floor 3, block A, 9 Shangdi 3rd Street, Haidian District, Beijing
+				beijing    100094
+				CN
+
+C4-5E-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C45E5C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-5C-0A   (hex)		Cisco Systems, Inc
+E85C0A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-6D-C1   (hex)		Intel Corporate
+2C6DC1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+70-B9-50   (hex)		Texas Instruments
+70B950     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D0-9F-D9   (hex)		IEEE Registration Authority
+D09FD9     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+54-C2-50   (hex)		Iskratel d.o.o.
+54C250     (base 16)		Iskratel d.o.o.
+				Ljubljanska cesta 24a
+				Kranj    4000
+				SI
+
+00-FA-B6   (hex)		Kontakt Micro-Location Sp z o.o.
+00FAB6     (base 16)		Kontakt Micro-Location Sp z o.o.
+				Stoczniowcow 3
+				Krakow    30-709
+				PL
+
+D0-17-69   (hex)		Murata Manufacturing Co., Ltd.
+D01769     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+A0-B0-86   (hex)		Hirschmann Automation and Control GmbH
+A0B086     (base 16)		Hirschmann Automation and Control GmbH
+				Stuttgarter Straße 45-51
+				Neckartenzlingen    D-72654
+				DE
+
+30-B3-46   (hex)		CJSC NORSI-TRANS
+30B346     (base 16)		CJSC NORSI-TRANS
+				B.Novodmitrovskaya, 12/15 floor 2 r. 36
+				Moscow  MOSCOW  127015
+				RU
+
+20-C1-9B   (hex)		Intel Corporate
+20C19B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+A8-55-6A   (hex)		3S System Technology Inc.
+A8556A     (base 16)		3S System Technology Inc.
+				6F, No. 5, Ln. 16, Sec. 2, Sichuan Rd., Banqiao Dist.,
+				New Taipei City    220620
+				TW
+
+5C-E4-2A   (hex)		Intel Corporate
+5CE42A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-74-E2   (hex)		IEEE Registration Authority
+1874E2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F0-C8-14   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+F0C814     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+CC-3A-DF   (hex)		Neptune Technology Group Inc.
+CC3ADF     (base 16)		Neptune Technology Group Inc.
+				1600 AL Highway 229 S
+				Tallassee  AL  36078
+				US
+
+3C-62-F0   (hex)		Sercomm Corporation.
+3C62F0     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+98-3B-67   (hex)		DWnet Technologies(Suzhou) Corporation
+983B67     (base 16)		DWnet Technologies(Suzhou) Corporation
+				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
+				Suzhou    21500
+				CN
+
+58-35-5D   (hex)		Huawei Device Co., Ltd.
+58355D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+AC-7E-01   (hex)		Huawei Device Co., Ltd.
+AC7E01     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+6C-93-92   (hex)		BEKO Technologies GmbH
+6C9392     (base 16)		BEKO Technologies GmbH
+				Im Taubental 7
+				Neuss  Nordrhein-Westfalen  41468
+				DE
+
+FC-8A-3D   (hex)		zte corporation
+FC8A3D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F8-F0-82   (hex)		NAGTECH LLC
+F8F082     (base 16)		NAGTECH LLC
+				12A, Krasnolesya Str., off 507
+				Ekaterinburg  Sverdlovskaya oblast  620110
+				RU
+
+8C-1F-64   (hex)		IEEE Registration Authority
+8C1F64     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+08-5A-11   (hex)		D-Link International
+085A11     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+50-32-5F   (hex)		Silicon Laboratories
+50325F     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+F4-7B-09   (hex)		Intel Corporate
+F47B09     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E8-78-29   (hex)		IEEE Registration Authority
+E87829     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+EC-94-68   (hex)		META SYSTEM SPA 
+EC9468     (base 16)		META SYSTEM SPA 
+				VIA LAGHETTO 1
+				MORNAGO, VARESE  ITALY  21020
+				IT
+
+1C-41-90   (hex)		Universal Electronics, Inc.
+1C4190     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+64-C4-03   (hex)		Quectel Wireless Solutions Co.,Ltd.
+64C403     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+A0-E4-53   (hex)		Sony Corporation
+A0E453     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+30-A8-DB   (hex)		Sony Corporation
+30A8DB     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+84-8E-DF   (hex)		Sony Corporation
+848EDF     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+58-48-22   (hex)		Sony Corporation
+584822     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+C0-25-A5   (hex)		Dell Inc.
+C025A5     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+B4-C8-10   (hex)		Umpi srl
+B4C810     (base 16)		Umpi srl
+				Via Consolare Rimini-San Marino, 11
+				 Rimini    47923
+				IT
+
+48-5A-67   (hex)		Shaanxi Ruixun Electronic Information Technology Co., Ltd
+485A67     (base 16)		Shaanxi Ruixun Electronic Information Technology Co., Ltd
+				11th Floor, Building A, Xi 'an National Digital Publishing Base, No. 996, Tiangu 7th Road, Software New City, Xi 'an High-tech Zone, Shaanxi Province
+				Xi’an  Shaanxi  710000
+				CN
+
+18-00-2D   (hex)		Sony Corporation
+18002D     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+D0-51-62   (hex)		Sony Corporation
+D05162     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+90-C1-15   (hex)		Sony Corporation
+90C115     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+5C-B5-24   (hex)		Sony Corporation
+5CB524     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+58-17-0C   (hex)		Sony Corporation
+58170C     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+44-D5-CC   (hex)		Amazon Technologies Inc.
+44D5CC     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+9C-5C-F9   (hex)		Sony Corporation
+9C5CF9     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+84-C7-EA   (hex)		Sony Corporation
+84C7EA     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+38-78-62   (hex)		Sony Corporation
+387862     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+00-25-E7   (hex)		Sony Corporation
+0025E7     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-24-EF   (hex)		Sony Corporation
+0024EF     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-16-B8   (hex)		Sony Corporation
+0016B8     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+64-C3-94   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+64C394     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-5C-9A   (hex)		Apple, Inc.
+945C9A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-F3-9F   (hex)		Apple, Inc.
+00F39F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-39-A9   (hex)		Hongshan Information Science and Technology (HangZhou) Co.,Ltd.
+3039A9     (base 16)		Hongshan Information Science and Technology (HangZhou) Co.,Ltd.
+				32 / F, Yuesheng International Center, Pinglan Road, Xiaoshan District, Hangzhou, Zhejiang Province
+				Hangzhou  Zhejiang Province  311215
+				CN
+
+1C-57-3E   (hex)		Altice Labs S.A.
+1C573E     (base 16)		Altice Labs S.A.
+				NIF 504705610, Rua Eng. José Ferreira Pinto Basto
+				Aveiro    3810-106
+				PT
+
+D0-16-7C   (hex)		eero inc.
+D0167C     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+A8-5B-36   (hex)		IEEE Registration Authority
+A85B36     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+4C-77-CB   (hex)		Intel Corporate
+4C77CB     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+9C-6B-F0   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
+9C6BF0     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
+				Shenzhen  Nanshan District  518000
+				CN
+
+44-95-3B   (hex)		RLTech India Private Limited
+44953B     (base 16)		RLTech India Private Limited
+				C-2, Sector-85, Noida
+				Gautam Buddha Nagar  Uttar Pradesh  201301
+				IN
+
+84-14-4D   (hex)		Intel Corporate
+84144D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+20-B8-68   (hex)		Motorola Mobility LLC, a Lenovo Company
+20B868     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+28-9C-6E   (hex)		Shanghai High-Flying Electronics  Technology Co., Ltd
+289C6E     (base 16)		Shanghai High-Flying Electronics  Technology Co., Ltd
+				Room 1002,#1Building,No.3000 Longdong Avenue,Pudong
+				Shanghai  Shanghai  201202
+				CN
+
+84-F7-03   (hex)		Espressif Inc.
+84F703     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+2C-11-65   (hex)		Silicon Laboratories
+2C1165     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+B4-1C-AB   (hex)		ICR, inc.
+B41CAB     (base 16)		ICR, inc.
+				6200 S Main St Suite 200
+				Aurora  CO  80016
+				US
+
+1C-2A-8B   (hex)		Nokia
+1C2A8B     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+94-5A-FC   (hex)		Amazon Technologies Inc.
+945AFC     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+BC-D7-D4   (hex)		Roku, Inc
+BCD7D4     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+AC-0B-FB   (hex)		Espressif Inc.
+AC0BFB     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+DC-ED-83   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+DCED83     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+00-D7-6D   (hex)		Intel Corporate
+00D76D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+50-8E-49   (hex)		Xiaomi Communications Co Ltd
+508E49     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+8C-AA-CE   (hex)		Xiaomi Communications Co Ltd
+8CAACE     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+70-5F-A3   (hex)		Xiaomi Communications Co Ltd
+705FA3     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+FC-D9-08   (hex)		Xiaomi Communications Co Ltd
+FCD908     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+30-B0-37   (hex)		New H3C Technologies Co., Ltd
+30B037     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+FC-12-2C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC122C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-33-29   (hex)		Sony Interactive Entertainment Inc.
+BC3329     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+A8-89-40   (hex)		Huawei Device Co., Ltd.
+A88940     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+CC-31-2A   (hex)		HUIZHOU TCL COMMUNICATION ELECTRON CO.,LTD
+CC312A     (base 16)		HUIZHOU TCL COMMUNICATION ELECTRON CO.,LTD
+				2nd Floor, Building 1,Dongnan Jiahao Industrial Park,NO.3 Donghe South Road, Dongxing District,Dongjiang high-tech Zone
+				Huizhou  Guangdong  516055
+				CN
+
+DC-B7-2E   (hex)		Xiaomi Communications Co Ltd
+DCB72E     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+38-B8-00   (hex)		Wistron Neweb Corporation
+38B800     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+6C-D1-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6CD1E5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-0E-B8   (hex)		LG Electronics
+300EB8     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+0C-0E-76   (hex)		D-Link International
+0C0E76     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+70-3E-97   (hex)		Iton Technology Corp.
+703E97     (base 16)		Iton Technology Corp.
+				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
+				Shenzhen  Guangdong   518116
+				CN
+
+10-47-38   (hex)		Nokia Shanghai Bell Co., Ltd.
+104738     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+6C-11-B3   (hex)		Wu Qi Technologies,Inc.
+6C11B3     (base 16)		Wu Qi Technologies,Inc.
+				14/F, 107 Middle Road, Xiantao Big Data Valley, Yubei District
+				Chongqing  Chongqing  401120
+				CN
+
+A0-94-1A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A0941A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+1C-2C-E0   (hex)		Shanghai  Mountain View Silicon
+1C2CE0     (base 16)		Shanghai  Mountain View Silicon
+				Suite 4C, Building 3,  1238 Zhangjiang Rd., Pudong
+				Shanghai    201210
+				CN
+
+00-0C-EC   (hex)		Orolia USA
+000CEC     (base 16)		Orolia USA
+				45 Becker Road  Suite A
+				West Henrietta  NY  14586
+				US
+
+08-FA-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+08FA28     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-B1-9C   (hex)		AltoBeam (China) Inc.
+F4B19C     (base 16)		AltoBeam (China) Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+A8-D0-81   (hex)		Huawei Device Co., Ltd.
+A8D081     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+74-0C-EE   (hex)		Huawei Device Co., Ltd.
+740CEE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+6C-B4-FD   (hex)		Huawei Device Co., Ltd.
+6CB4FD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-0E-9B   (hex)		ISHIDA MEDICAL CO., LTD.
+640E9B     (base 16)		ISHIDA MEDICAL CO., LTD.
+				60-1 Shogoin Rengezocho, Sakyo-Ku
+				Kyoto-Shi  Kyoto-Fu  606-8357
+				JP
+
+24-F6-03   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24F603     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-CA-85   (hex)		NEC Corporation
+F8CA85     (base 16)		NEC Corporation
+				7-1 Shiba 5-chome
+				Minato-Ku  Tokyo  108-8001
+				JP
+
+1C-9D-C2   (hex)		Espressif Inc.
+1C9DC2     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+C4-EA-1D   (hex)		Technicolor Delivery Technologies Belgium NV
+C4EA1D     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+A4-91-B1   (hex)		Technicolor Delivery Technologies Belgium NV
+A491B1     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+D4-35-1D   (hex)		Technicolor Delivery Technologies Belgium NV
+D4351D     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+EC-C1-AB   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+ECC1AB     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+18-FC-26   (hex)		Qorvo International Pte. Ltd.
+18FC26     (base 16)		Qorvo International Pte. Ltd.
+				1 Changi Business Park Avenue 1
+				#04-01    486058
+				SG
+
+58-98-35   (hex)		Technicolor Delivery Technologies Belgium NV
+589835     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+90-6A-94   (hex)		hangzhou huacheng network technology co., ltd
+906A94     (base 16)		hangzhou huacheng network technology co., ltd
+				Room 412, Building 2, No.2930, Nanhuan Road, Binjiang District
+				hangzhou  zhejiang  310052
+				CN
+
+10-0C-29   (hex)		Shenzhen NORCO lntelligent Technology Co.,Ltd
+100C29     (base 16)		Shenzhen NORCO lntelligent Technology Co.,Ltd
+				6th Fl., Bldg. B, Shum Yip U Centre, Hangcheng Sub-district, Baoan District, Shenzhen
+				Shenzhen    518126
+				CN
+
+28-36-13   (hex)		IEEE Registration Authority
+283613     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+78-52-4A   (hex)		Optonic GmbH
+78524A     (base 16)		Optonic GmbH
+				Zollhallenstr. 11
+				Freiburg    79106
+				DE
+
+00-CE-30   (hex)		Express LUCK Industrial Ltd.
+00CE30     (base 16)		Express LUCK Industrial Ltd.
+				No. 88, Baotongnan Road, Xikeng, Yuanshan Street, Longgang District
+				Shenzhen  Guangdong  518100
+				CN
+
+C4-6E-33   (hex)		Zhong Ge Smart Technology Co., Ltd.
+C46E33     (base 16)		Zhong Ge Smart Technology Co., Ltd.
+				Zhong Ge Smart Technology Co., Ltd
+				Shanghai    201199
+				CN
+
+5C-83-82   (hex)		Nokia
+5C8382     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+74-32-C2   (hex)		KYOLIS
+7432C2     (base 16)		KYOLIS
+				2 RUE DE LA RENAISSANCE
+				ANTONY    92160
+				FR
+
+0C-AA-EE   (hex)		Ansjer Electronics Co., Ltd.
+0CAAEE     (base 16)		Ansjer Electronics Co., Ltd.
+				4 Bldg., Pinglan Indl. Park, Nanping,
+				Zhuhai  Guangdong  519060
+				CN
+
+FC-A6-4C   (hex)		Alibaba cloud computing Co., Ltd
+FCA64C     (base 16)		Alibaba cloud computing Co., Ltd
+				No.12, Zhuantang science and technology economic block, Xihu District
+				Hangzhou  Zhejiang  310024
+				CN
+
+E0-69-BA   (hex)		Cisco Systems, Inc
+E069BA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-36-DA   (hex)		Cisco Systems, Inc
+2436DA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-37-A5   (hex)		Apple, Inc.
+2037A5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-B5-4F   (hex)		Apple, Inc.
+DCB54F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-EB-D6   (hex)		Espressif Inc.
+4CEBD6     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+00-8A-76   (hex)		Apple, Inc.
+008A76     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-23-9C   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+F4239C     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+D8-A6-F0   (hex)		Wu Qi Technologies,Inc.
+D8A6F0     (base 16)		Wu Qi Technologies,Inc.
+				14/F, 107 Middle Road, Xiantao Big Data Valley, Yubei District
+				Chongqing  Chongqing  401120
+				CN
+
+08-E4-DF   (hex)		Shenzhen Sande Dacom Electronics Co., Ltd
+08E4DF     (base 16)		Shenzhen Sande Dacom Electronics Co., Ltd
+				bantian
+				shenzhen  Guangdong  518129
+				CN
+
+EC-7C-2C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC7C2C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-58-08   (hex)		Taicang T&W Electronics
+145808     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+10-5A-17   (hex)		Tuya Smart Inc.
+105A17     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+B8-37-4A   (hex)		Apple, Inc.
+B8374A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-3D-B1   (hex)		Beijing H-IoT Technology Co., Ltd.
+8C3DB1     (base 16)		Beijing H-IoT Technology Co., Ltd.
+				1268, Building 2, No. 38, Kechuang Fifth Street, Beijing Economic and Technological Development Zone
+				Beijing  Beijing  101111
+				CN
+
+54-67-06   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+546706     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+C0-F5-35   (hex)		AMPAK Technology,Inc.
+C0F535     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+C4-E5-32   (hex)		Arcadyan Corporation
+C4E532     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+F8-B5-4D   (hex)		Intel Corporate
+F8B54D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+64-01-FB   (hex)		Landis+Gyr GmbH
+6401FB     (base 16)		Landis+Gyr GmbH
+				Humboldtstrasse 64
+				Nürnberg  Bavaria  90459
+				DE
+
+20-7B-D2   (hex)		ASIX Electronics Corporation
+207BD2     (base 16)		ASIX Electronics Corporation
+				4F, No. 8, Hsin Ann Road, Hsinchu Science Park
+				Hsinchu    30078
+				TW
+
+18-2D-F7   (hex)		JY COMPANY
+182DF7     (base 16)		JY COMPANY
+				A-1811 Ho, SamboTechno Tower,122, Jomaru-ro 385 Beon-gil,
+				Buchenon-si  Gyenggi-do  14556
+				KR
+
+EC-2C-11   (hex)		CWD INNOVATION LIMITED
+EC2C11     (base 16)		CWD INNOVATION LIMITED
+				101, First Floor, 439 Hasam Premji Building, Kalbadevi
+				Mumbai  Maharashtra  400002
+				IN
+
+F0-35-75   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+F03575     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+90-81-75   (hex)		Samsung Electronics Co.,Ltd
+908175     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-74-67   (hex)		Samsung Electronics Co.,Ltd
+307467     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-CD-31   (hex)		Samsung Electronics Co.,Ltd
+F0CD31     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+38-A8-CD   (hex)		IEEE Registration Authority
+38A8CD     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E4-44-E5   (hex)		Extreme Networks, Inc.
+E444E5     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+54-52-84   (hex)		Huawei Device Co., Ltd.
+545284     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-61-40   (hex)		Huawei Device Co., Ltd.
+646140     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-17-0E   (hex)		Huawei Device Co., Ltd.
+C4170E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+68-77-24   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+687724     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+20-67-E0   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+2067E0     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
+				Shenzhen    518067
+				CN
+
+7C-83-34   (hex)		IEEE Registration Authority
+7C8334     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D0-C3-5A   (hex)		Jabil Circuit de Chihuahua
+D0C35A     (base 16)		Jabil Circuit de Chihuahua
+				C/O SPACE BORDER LOGISTICS, INC 9560 Joe Rodriguez Dr. Docks 17 & 18
+				El Paso  TX  79927
+				US
+
+84-B6-30   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+84B630     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+58-C7-AC   (hex)		New H3C Technologies Co., Ltd
+58C7AC     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+E4-C0-E2   (hex)		Sagemcom Broadband SAS
+E4C0E2     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+D8-6C-5A   (hex)		HUMAX Co., Ltd.
+D86C5A     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+24-97-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+249745     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-3F-A7   (hex)		uGrid Network Inc.
+4C3FA7     (base 16)		uGrid Network Inc.
+				602 Gabriola Way
+				Ottawa  Ontario  K2T 0M2
+				CA
+
+B8-98-AD   (hex)		Motorola Mobility LLC, a Lenovo Company
+B898AD     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+94-FF-3C   (hex)		Fortinet, Inc.
+94FF3C     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale    94086
+				US
+
+70-52-D8   (hex)		ITEL MOBILE LIMITED
+7052D8     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+08-FA-79   (hex)		vivo Mobile Communication Co., Ltd.
+08FA79     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+1C-AE-3E   (hex)		IEEE Registration Authority
+1CAE3E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-1D-5B   (hex)		Tecvan Informatica Ltda
+001D5B     (base 16)		Tecvan Informatica Ltda
+				Rua Guaicurus, 145
+				Diadema  São Paulo  09911-630
+				BR
+
+9C-2B-A6   (hex)		Ruijie Networks Co.,LTD
+9C2BA6     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+94-14-57   (hex)		Shenzhen Sundray Technologies Company Limited
+941457     (base 16)		Shenzhen Sundray Technologies Company Limited
+				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
+				Shenzhen  Guangdong  518057
+				CN
+
+64-B9-4E   (hex)		Dell Technologies
+64B94E     (base 16)		Dell Technologies
+				Matam Park, Bld 8B, PO Box 15046 3190500 HAIFA ISRAEL 
+				HAIFA   HAIFA   15046 
+				IL
+
+EC-2B-EB   (hex)		Amazon Technologies Inc.
+EC2BEB     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+54-47-E8   (hex)		Syrotech Networks. Ltd.
+5447E8     (base 16)		Syrotech Networks. Ltd.
+				UNIT NO.-5 20F, KIN WING INDUSTERIAL BUILDING,33 KIN WING STREET
+				TUEN MUN    999077
+				HK
+
+3C-55-76   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+3C5576     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+0C-CA-FB   (hex)		TPVision Europe B.V
+0CCAFB     (base 16)		TPVision Europe B.V
+				Prins Bernhardplein 200
+				Amsterdam  Noord-Holland  1097 JB
+				NL
+
+BC-57-29   (hex)		Shenzhen KKM Co., Ltd
+BC5729     (base 16)		Shenzhen KKM Co., Ltd
+				Room 3B,Building 6A, BaoNeng Park, QingXiang Road, LongHua District
+				ShenZhen  Guangdong  518000
+				CN
+
+E4-82-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E48210     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-F7-B9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F8F7B9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-53-45   (hex)		Nokia
+185345     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+08-16-D5   (hex)		GOERTEK INC.
+0816D5     (base 16)		GOERTEK INC.
+				 GoerTek  park one phase 4 # east unloading platform,The Corner of Weian road & Yingqian street, High-tech Zone, Weifang, Shandong, China 261031
+				weifang  shandong  261031
+				CN
+
+1C-56-8E   (hex)		Zioncom Electronics (Shenzhen) Ltd.
+1C568E     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
+				A1&A2 Building,Lantian Technology Park, Xinyu Road, Xingqiao Henggang Block, Shajing Street, Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+E0-1F-2B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+E01F2B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+A0-82-22   (hex)		Qingdao Haier Technology Co.,Ltd
+A08222     (base 16)		Qingdao Haier Technology Co.,Ltd
+				Building A01,Haier Information Park, No.1 Haier Road,
+				Qingdao  Shandong  266101
+				CN
+
+28-56-3A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+28563A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+04-C4-61   (hex)		Murata Manufacturing Co., Ltd.
+04C461     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+AC-82-26   (hex)		Qingdao Haier Technology Co.,Ltd
+AC8226     (base 16)		Qingdao Haier Technology Co.,Ltd
+				Building A01,Haier Information Park, No.1 Haier Road,
+				Qingdao  Shandong  266101
+				CN
+
+44-48-FF   (hex)		Qingdao Haier Technology Co.,Ltd
+4448FF     (base 16)		Qingdao Haier Technology Co.,Ltd
+				Building A01,Haier Information Park, No.1 Haier Road,
+				Qingdao  Shandong  266101
+				CN
+
+A8-C2-66   (hex)		HUMAX Co., Ltd.
+A8C266     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+F8-4E-17   (hex)		Sony Corporation
+F84E17     (base 16)		Sony Corporation
+				Sony City Osaki 2-10-1
+				Shinagawa-ku   Tokyo  141-8610
+				JP
+
+54-0F-57   (hex)		Silicon Laboratories
+540F57     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+C8-CB-9E   (hex)		Intel Corporate
+C8CB9E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+D4-D7-CF   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+D4D7CF     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+F4-E4-D7   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+F4E4D7     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+E8-47-27   (hex)		Quectel Wireless Solutions Co.,Ltd.
+E84727     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+28-C5-38   (hex)		Apple, Inc.
+28C538     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-99-B9   (hex)		Apple, Inc.
+0499B9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-4D-89   (hex)		Apple, Inc.
+F84D89     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-02-8B   (hex)		Apple, Inc.
+78028B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-DB-09   (hex)		Cisco Meraki
+BCDB09     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+04-34-F6   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+0434F6     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+14-01-9C   (hex)		Ubyon Inc.
+14019C     (base 16)		Ubyon Inc.
+				10080 N. Wolfe Rd. SW3-200
+				Cupertino    95014
+				US
+
+F8-95-22   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F89522     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-B1-32   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F8B132     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-69-25   (hex)		PS INODIC CO., LTD.
+546925     (base 16)		PS INODIC CO., LTD.
+				#407, 4F, 25-32, LS-ro 116beon-gil, Dongan-gu
+				Anyang-si  Gyeonggi-do  14118
+				KR
+
+E8-CB-ED   (hex)		 Chipsea Technologies(Shenzhen) Corp.
+E8CBED     (base 16)		 Chipsea Technologies(Shenzhen) Corp.
+				9F,Block A,Garden City Digital Building,No.1079 Nanhai Road,Nanshan District,Shenzhen
+				Shenzhen    518000
+				CN
+
+78-13-E0   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+7813E0     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+48-61-EE   (hex)		Samsung Electronics Co.,Ltd
+4861EE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-4B-4D   (hex)		Samsung Electronics Co.,Ltd
+A84B4D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+60-07-C4   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+6007C4     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+08-6F-48   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+086F48     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
+				Shenzhen    518067
+				CN
+
+F4-F3-09   (hex)		Samsung Electronics Co.,Ltd
+F4F309     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+78-57-B0   (hex)		GERTEC BRASIL LTDA
+7857B0     (base 16)		GERTEC BRASIL LTDA
+				Avenida Jabaquara, 3060, room 601
+				Sao Paulo  São Paulo  04046500
+				BR
+
+C4-F1-22   (hex)		Nexar Ltd.
+C4F122     (base 16)		Nexar Ltd.
+				58 HaRakevet st
+				Tel Aviv  Tel Aviv  6777016
+				IL
+
+64-BE-63   (hex)		STORDIS GmbH
+64BE63     (base 16)		STORDIS GmbH
+				Rosenwiesstr. 17
+				Stuttgart    70567
+				DE
+
+0C-C6-FD   (hex)		Xiaomi Communications Co Ltd
+0CC6FD     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+50-DA-D6   (hex)		Xiaomi Communications Co Ltd
+50DAD6     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+18-B9-6E   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+18B96E     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+				dongguan   guangdong  523000
+				CN
+
+54-69-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+546990     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-0A-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D80A60     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-86-9A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C869A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-27-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C2768     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-78-80   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D07880     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+14-CB-65   (hex)		Microsoft Corporation
+14CB65     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+34-08-E1   (hex)		Texas Instruments
+3408E1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+50-58-B0   (hex)		Hunan Greatwall Computer System Co., Ltd.
+5058B0     (base 16)		Hunan Greatwall Computer System Co., Ltd.
+				Hunan GreatWall Industrial Park, Tianyi Science and Technology City, Xiangyun Middle Road, Tianyuan District
+				Zhuzhou  Hunan  412000
+				CN
+
+E0-6C-F6   (hex)		ESSENCORE limited
+E06CF6     (base 16)		ESSENCORE limited
+				 Suite 4006, 40/F Central Plaza, 18 Harbour Road, Wanchai,
+				Hong Kong    No code
+				HK
+
+78-C6-2B   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+78C62B     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+D4-66-24   (hex)		Cisco Systems, Inc
+D46624     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-90-19   (hex)		Beyless
+9C9019     (base 16)		Beyless
+				#725,42,Changeop-ro, Sujeong-gu
+				Seongnam-si  Gyeonggi-do  13449
+				KR
+
+3C-E0-38   (hex)		Omnifi Inc.
+3CE038     (base 16)		Omnifi Inc.
+				6701 Koll Center Parkway, Suite 250
+				Pleasanton  CA  94566
+				US
+
+00-16-82   (hex)		OMS Motion
+001682     (base 16)		OMS Motion
+				15201 NW Greenbrier Pkwy, Ste. Suite B1
+				Beaverton  OR  97006
+				US
+
+D4-F9-8D   (hex)		Espressif Inc.
+D4F98D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+1C-86-9A   (hex)		Samsung Electronics Co.,Ltd
+1C869A     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+D8-FB-D6   (hex)		Amazon Technologies Inc.
+D8FBD6     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+9C-47-F9   (hex)		LJU Automatisierungstechnik GmbH
+9C47F9     (base 16)		LJU Automatisierungstechnik GmbH
+				Am Schlahn 1
+				Potsdam  Brandenburg  D-14476
+				DE
+
+70-A8-D3   (hex)		Intel Corporate
+70A8D3     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+2C-33-58   (hex)		Intel Corporate
+2C3358     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+08-6A-E5   (hex)		Amazon Technologies Inc.
+086AE5     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+A8-17-10   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
+A81710     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
+				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
+				Nanjing  Jiangsu  211800
+				CN
+
+20-62-96   (hex)		Shenzhen Malio Technology Co.,Ltd
+206296     (base 16)		Shenzhen Malio Technology Co.,Ltd
+				Building B1, Shenzhen digital technology park, No. 16, Gaoxin South seventh Road, high tech Zone community, Yuehai street,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+A0-80-69   (hex)		Intel Corporate
+A08069     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+A0-67-20   (hex)		China Dragon Technology Limited
+A06720     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+94-C9-B7   (hex)		IEEE Registration Authority
+94C9B7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E8-EE-CC   (hex)		Fantasia Trading LLC
+E8EECC     (base 16)		Fantasia Trading LLC
+				5350 Ontario Mills Pkwy, Suite 100
+				Ontario  CA  91764
+				US
+
+5C-16-C7   (hex)		Arista Networks
+5C16C7     (base 16)		Arista Networks
+				100 W Evelyn
+				Mountain View  CA  94041
+				US
+
+4C-E0-DB   (hex)		Xiaomi Communications Co Ltd
+4CE0DB     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+7C-33-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C33F9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-16-51   (hex)		Ruijie Networks Co.,LTD
+541651     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+70-87-A7   (hex)		Murata Manufacturing Co., Ltd.
+7087A7     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+AC-04-25   (hex)		ball-b GmbH Co KG
+AC0425     (base 16)		ball-b GmbH Co KG
+				Saganer Strasse 14
+				Nuremberg  Bavaria  90475
+				DE
+
+04-BD-97   (hex)		Cisco Systems, Inc
+04BD97     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F0-3A-4B   (hex)		Bloombase, Inc.
+F03A4B     (base 16)		Bloombase, Inc.
+				1300 Island Dr Ste 103
+				Redwood City  CA  94065
+				US
+
+00-02-A3   (hex)		Hitachi Energy Switzerland Ltd
+0002A3     (base 16)		Hitachi Energy Switzerland Ltd
+				Bruggerstrasse 72
+				Baden    5400
+				CH
+
+38-F7-F1   (hex)		Huawei Device Co., Ltd.
+38F7F1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-76-A9   (hex)		Huawei Device Co., Ltd.
+4076A9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F4-38-C1   (hex)		Huawei Device Co., Ltd.
+F438C1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+28-EA-2D   (hex)		Apple, Inc.
+28EA2D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-9B-E6   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+209BE6     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+B8-E6-0C   (hex)		Apple, Inc.
+B8E60C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-35-2B   (hex)		Apple, Inc.
+48352B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-E6-C0   (hex)		Apple, Inc.
+4CE6C0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-88-A4   (hex)		Apple, Inc.
+3888A4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-DA-30   (hex)		Apple, Inc.
+44DA30     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-16-0C   (hex)		Broadcom Limited
+84160C     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+74-E6-B8   (hex)		LG Electronics
+74E6B8     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+28-D0-F5   (hex)		Ruijie Networks Co.,LTD
+28D0F5     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+94-18-65   (hex)		NETGEAR
+941865     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+C8-9B-D7   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+C89BD7     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+28-B1-33   (hex)		SHINEMAN(SHENZHEN) Tech. Cor., Ltd.
+28B133     (base 16)		SHINEMAN(SHENZHEN) Tech. Cor., Ltd.
+				BanTian
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+D0-04-B0   (hex)		Samsung Electronics Co.,Ltd
+D004B0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+98-B0-8B   (hex)		Samsung Electronics Co.,Ltd
+98B08B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-58-7C   (hex)		Shoogee GmbH & Co. KG
+A8587C     (base 16)		Shoogee GmbH & Co. KG
+				Alter Fischmarkt 11a
+				Muenster  Nordrhein-Westfalen  48143
+				DE
+
+9C-25-95   (hex)		Samsung Electronics Co.,Ltd
+9C2595     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+90-F2-60   (hex)		Shenzhen Honesty Electronics Co.,Ltd.
+90F260     (base 16)		Shenzhen Honesty Electronics Co.,Ltd.
+				5/F,Zone B,Chitat Industrial Park,West Longping Road, Longgang District,Shenzhen City
+				Shenzhen  Guangdong  518172
+				CN
+
+18-89-CF   (hex)		TECNO MOBILE LIMITED
+1889CF     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+98-5F-4F   (hex)		Tongfang Computer Co.,Ltd.
+985F4F     (base 16)		Tongfang Computer Co.,Ltd.
+				 No. 118, Chunsun East Road, Xishan Economic Development Zone (Dongting)
+				Wuxi  Jiangsu   214101
+				CN
+
+34-F8-6E   (hex)		Parker Hannifin Corporation
+34F86E     (base 16)		Parker Hannifin Corporation
+				6035 Parkland Blvd
+				Cleveland  OH  44124
+				US
+
+0C-AE-BD   (hex)		Edifier International
+0CAEBD     (base 16)		Edifier International
+				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
+				Hong Kong    070
+				CN
+
+6C-D8-69   (hex)		Guangzhou Sat Infrared Co.,LTD
+6CD869     (base 16)		Guangzhou Sat Infrared Co.,LTD
+				No.10 Dongjiang Ave. GETDD
+				Guangzhou  Guangdong  510730
+				CN
+
+38-1E-C7   (hex)		 Chipsea Technologies(Shenzhen) Corp.
+381EC7     (base 16)		 Chipsea Technologies(Shenzhen) Corp.
+				9F,Block A,Garden City Digital Building,No.1079 Nanhai Road,Nanshan District,Shenzhen
+				Shenzhen    518000
+				CN
+
+F0-A6-54   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+F0A654     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+3C-CF-B4   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
+3CCFB4     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
+				No. 1500 Zuchongzhi Rd, Building #3
+				Shanghai    201203
+				CN
+
+04-3C-E8   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+043CE8     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+A8-E6-21   (hex)		Amazon Technologies Inc.
+A8E621     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+E8-31-CD   (hex)		Espressif Inc.
+E831CD     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+88-D0-39   (hex)		Tonly Technology Co. Ltd 
+88D039     (base 16)		Tonly Technology Co. Ltd 
+				Section 37, Zhongkai Hi-Tech Development Zone
+				Huizhou  Guangdong  516006
+				CN
+
+E8-F3-75   (hex)		Nokia
+E8F375     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+10-37-11   (hex)		NORBIT ITS
+103711     (base 16)		NORBIT ITS
+				Otto Nielsens Veg 12
+				Trondheim    N-7004
+				NO
+
+C0-88-6D   (hex)		Securosys SA
+C0886D     (base 16)		Securosys SA
+				Technopark 1
+				Zürich  ZH  8005
+				CH
+
+24-81-3B   (hex)		Cisco Systems, Inc
+24813B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-09-B7   (hex)		Juniper Networks
+C409B7     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+0C-B8-E8   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+0CB8E8     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+EC-5C-84   (hex)		Murata Manufacturing Co., Ltd.
+EC5C84     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+BC-9B-5E   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+BC9B5E     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+48-74-12   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+487412     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+B0-F2-08   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+B0F208     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+F0-B2-B9   (hex)		Intel Corporate
+F0B2B9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+A0-69-D9   (hex)		New H3C Technologies Co., Ltd
+A069D9     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+20-FE-00   (hex)		Amazon Technologies Inc.
+20FE00     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+F4-21-AE   (hex)		Shanghai Xiaodu Technology Limited
+F421AE     (base 16)		Shanghai Xiaodu Technology Limited
+				4th Floor Building No.1 , No.701 Naxian Road Pilot Free Trade Zone Shanghai China
+				Shanghai    200000
+				CN
+
+F4-12-FA   (hex)		Espressif Inc.
+F412FA     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+DC-99-FE   (hex)		Armatura LLC
+DC99FE     (base 16)		Armatura LLC
+				16192 Coastal Hwy
+				Lewes  DE  19958
+				US
+
+9C-F1-55   (hex)		Nokia
+9CF155     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+E4-73-05   (hex)		Shenzhen INVT Electric CO.,Ltd
+E47305     (base 16)		Shenzhen INVT Electric CO.,Ltd
+				INVT Guangming Technology Building,Songbai Road,Matian,Guangming District,ShenZhen,China.518106
+				ShenZhen  Guangdong  518000
+				CN
+
+B0-1B-4B   (hex)		Invisible Fun Studio Limited
+B01B4B     (base 16)		Invisible Fun Studio Limited
+				809, Block 2, Yip On Factory Est, 
+				Kowloon Bay    000000
+				HK
+
+60-4F-5B   (hex)		Huawei Device Co., Ltd.
+604F5B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-DC-E2   (hex)		THALES AVS France
+14DCE2     (base 16)		THALES AVS France
+				75-77 Av. Marcel Dassault
+				Mérignac    33700
+				FR
+
+78-FB-D8   (hex)		Apple, Inc.
+78FBD8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-C3-37   (hex)		Apple, Inc.
+A4C337     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-F1-D8   (hex)		Apple, Inc.
+B0F1D8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-88-0C   (hex)		Apple, Inc.
+D0880C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-57-DC   (hex)		Apple, Inc.
+1C57DC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-74-46   (hex)		Google, Inc.
+747446     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+78-20-A5   (hex)		Nintendo Co.,Ltd
+7820A5     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+20-78-CD   (hex)		Apple, Inc.
+2078CD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-D5-3E   (hex)		Apple, Inc.
+30D53E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-23-A2   (hex)		Apple, Inc.
+5023A2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-69-8A   (hex)		Apple, Inc.
+98698A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-46-AE   (hex)		MERCURY CORPORATION
+5046AE     (base 16)		MERCURY CORPORATION
+				90, Gajaeul-ro, Seo-gu
+				INCHEON    22830
+				KR
+
+B0-99-D7   (hex)		Samsung Electronics Co.,Ltd
+B099D7     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+90-EB-48   (hex)		Shanghai XinMiaoLink Technology Co., Ltd
+90EB48     (base 16)		Shanghai XinMiaoLink Technology Co., Ltd
+				Room 601,6F ,No.1399 Minsheng Road,Pudong New Area,Shanghai,China
+				Shanghai    200120
+				CN
+
+B4-B7-42   (hex)		Amazon Technologies Inc.
+B4B742     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+78-A0-3F   (hex)		Amazon Technologies Inc.
+78A03F     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+50-C1-F0   (hex)		NXP Semiconductor (Tianjin) LTD.
+50C1F0     (base 16)		NXP Semiconductor (Tianjin) LTD.
+				No.15 Xinghua Avenue, Xiqing Economic Development Area
+				Tianjin    300385
+				CN
+
+F4-84-8D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F4848D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+58-11-22   (hex)		ASUSTek COMPUTER INC.
+581122     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+60-BE-B4   (hex)		S-Bluetech co., limited
+60BEB4     (base 16)		S-Bluetech co., limited
+				Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu
+				Shenzhen  Guangdong  518000
+				CN
+
+90-DF-7D   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+90DF7D     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+A8-54-A2   (hex)		Heimgard Technologies AS
+A854A2     (base 16)		Heimgard Technologies AS
+				Dronning Mauds gate 15
+				Oslo   Norway  0250 
+				NO
+
+74-2A-8A   (hex)		shenzhen worldelite electronics co., LTD
+742A8A     (base 16)		shenzhen worldelite electronics co., LTD
+				Office 5 F, Xiang Yu Industrial Park, Longsheng Road, Longgang Dist
+				Shenzhen  Guangdong  51800
+				CN
+
+BC-1D-89   (hex)		Motorola Mobility LLC, a Lenovo Company
+BC1D89     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+B8-7E-E5   (hex)		Intelbras
+B87EE5     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+94-AB-FE   (hex)		Nokia
+94ABFE     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+74-69-4A   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+74694A     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+78-15-2D   (hex)		UNION CHIP TECHNOLOGY LIMITED
+78152D     (base 16)		UNION CHIP TECHNOLOGY LIMITED
+				5th Floor, Building A1, Hangcheng Jinchi Industrial Park, 8TH North Road, Hangcheng Street, Bao 'an District, Shenzhen
+				shenzhen    518000
+				CN
+
+98-A9-2D   (hex)		New H3C Technologies Co., Ltd
+98A92D     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+00-A5-54   (hex)		Intel Corporate
+00A554     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+0C-86-29   (hex)		IEEE Registration Authority
+0C8629     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+50-DC-D0   (hex)		Observint Technologies, Inc.
+50DCD0     (base 16)		Observint Technologies, Inc.
+				11000 N Mopac Expressway Suite 300
+				Austin  TX  78759
+				US
+
+E0-03-6B   (hex)		Samsung Electronics Co.,Ltd
+E0036B     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+18-69-D4   (hex)		Samsung Electronics Co.,Ltd
+1869D4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-F0-EA   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+D4F0EA     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+58-76-AC   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+5876AC     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+80-69-1A   (hex)		Belkin International Inc.
+80691A     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista    90094
+				US
+
+64-31-72   (hex)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
+643172     (base 16)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
+				Room 201 and 202,Building 5,328 Pingjiang Road,Yuecheng District,Shaoxing
+				Shaoxing  Zhejiang  312000
+				CN
+
+D0-FC-D0   (hex)		HUMAX Co., Ltd.
+D0FCD0     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+20-FA-DB   (hex)		Huahao Kunpeng Technology (chengDu)  Co.,Ltd.
+20FADB     (base 16)		Huahao Kunpeng Technology (chengDu)  Co.,Ltd.
+				No.99, Hangtian Road, Section 2, East Third Ring Road,Chenghua District, Chengdu
+				Chengdu    610051
+				CN
+
+0C-8B-95   (hex)		Espressif Inc.
+0C8B95     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+68-5E-1C   (hex)		Texas Instruments
+685E1C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+38-AB-41   (hex)		Texas Instruments
+38AB41     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+CC-47-92   (hex)		ASIX Electronics Corporation
+CC4792     (base 16)		ASIX Electronics Corporation
+				4F, No. 8, Hsin Ann Road, Hsinchu Science Park
+				Hsinchu    30078
+				TW
+
+E0-46-EE   (hex)		NETGEAR
+E046EE     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+DC-BE-49   (hex)		ITEL MOBILE LIMITED
+DCBE49     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+9C-95-61   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+9C9561     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+9C-4F-5F   (hex)		Google, Inc.
+9C4F5F     (base 16)		Google, Inc.
+				15 rue Castel
+				Fontenay-sous-Bois    94120
+				FR
+
+A0-29-42   (hex)		Intel Corporate
+A02942     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+10-71-B3   (hex)		Zyxel Communications Corporation
+1071B3     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+F0-D4-15   (hex)		Intel Corporate
+F0D415     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+D4-D8-53   (hex)		Intel Corporate
+D4D853     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+04-63-D0   (hex)		Huawei Device Co., Ltd.
+0463D0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-44-8F   (hex)		Edgecore Networks Corporation
+14448F     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+34-25-BE   (hex)		Amazon Technologies Inc.
+3425BE     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+C0-ED-E5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C0EDE5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+10-A5-62   (hex)		Iton Technology Corp.
+10A562     (base 16)		Iton Technology Corp.
+				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
+				Shenzhen  Guangdong   518116
+				CN
+
+D4-A3-EB   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+D4A3EB     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+9C-BF-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9CBFCD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-9F-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B89FCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-E0-41   (hex)		Nokia
+9CE041     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+78-34-86   (hex)		Nokia
+783486     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+8C-76-3F   (hex)		ARRIS Group, Inc.
+8C763F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+28-12-93   (hex)		Honor Device Co., Ltd.
+281293     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+C0-A9-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0A938     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-24-E2   (hex)		Suzhou Denbom Electronic S&T Co., Ltd
+5C24E2     (base 16)		Suzhou Denbom Electronic S&T Co., Ltd
+				3F,Building 2, No.415,Changyang Street
+				Suzhou  Jiangsu  215000
+				CN
+
+64-98-9E   (hex)		TRINNOV AUDIO
+64989E     (base 16)		TRINNOV AUDIO
+				5 rue Edmond Michelet
+				NEUILLY PLAISANCE  Ile-de-France  93360
+				FR
+
+BC-C7-46   (hex)		Hon Hai Precision IND.CO.,LTD
+BCC746     (base 16)		Hon Hai Precision IND.CO.,LTD
+				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
+				TAIPEI  TAIWAN  33859
+				CN
+
+30-E8-E4   (hex)		Qorvo International Pte. Ltd.
+30E8E4     (base 16)		Qorvo International Pte. Ltd.
+				1 Changi Business Park Avenue 1
+				#04-01    486058
+				SG
+
+00-0D-A9   (hex)		INGETEAM
+000DA9     (base 16)		INGETEAM
+				Parque Tecnologico de Bizkaia, Edificio 110
+				Zamudio  Bizkaia  48170
+				ES
+
+30-E0-90   (hex)		Genevisio Ltd.
+30E090     (base 16)		Genevisio Ltd.
+				13F, No.33, Sec. 1, Minsheng Rd.
+				New Taipei City  Banqiao Dist.  220871
+				TW
+
+FC-B9-7E   (hex)		GE Appliances
+FCB97E     (base 16)		GE Appliances
+				4000 Buechel Bank Road
+				Louisville  KY  40225
+				US
+
+88-03-4C   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+88034C     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+48-DC-9D   (hex)		Grandprint(Beijing) Technology Co., LTD.
+48DC9D     (base 16)		Grandprint(Beijing) Technology Co., LTD.
+				Room 259, 2 / F, Building 5, 8 Dongbeiwang West Road, Haidian District,
+				Beijing    100089
+				CN
+
+64-FD-96   (hex)		Sagemcom Broadband SAS
+64FD96     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C8-EB-EC   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+C8EBEC     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+04-7C-16   (hex)		Micro-Star INTL CO., LTD.
+047C16     (base 16)		Micro-Star INTL CO., LTD.
+				No.69, Lide St.,
+				New Taipei City  Taiwan  235
+				TW
+
+94-C5-A6   (hex)		ITEL MOBILE LIMITED
+94C5A6     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+7C-EC-B1   (hex)		Apple, Inc.
+7CECB1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-E9-1E   (hex)		Apple, Inc.
+5CE91E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-D7-38   (hex)		WireStar Networks
+E0D738     (base 16)		WireStar Networks
+				PO Box 10966
+				College Station  TX  77842
+				US
+
+40-42-44   (hex)		Cisco Systems, Inc
+404244     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A8-B0-AE   (hex)		BizLink Special Cables Germany GmbH
+A8B0AE     (base 16)		BizLink Special Cables Germany GmbH
+				Eschstrasse 1
+				Friesoythe    26169
+				DE
+
+F0-B6-61   (hex)		eero inc.
+F0B661     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+E0-6A-05   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+E06A05     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+48-57-D2   (hex)		Broadcom Limited
+4857D2     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+9C-21-83   (hex)		Broadcom Limited
+9C2183     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+24-1F-BD   (hex)		Extreme Networks, Inc.
+241FBD     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+D8-34-EE   (hex)		SHURE INCORPORATED
+D834EE     (base 16)		SHURE INCORPORATED
+				5800 W. TOUHY AVE.
+				NILES  IL  60714 
+				US
+
+04-25-F0   (hex)		Nokia
+0425F0     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+1C-BC-EC   (hex)		silex technology, Inc.
+1CBCEC     (base 16)		silex technology, Inc.
+				2-3-1 Hikaridai, Seika-cho, Souraku-gun
+				Kyoto    619-0237
+				JP
+
+40-3B-7B   (hex)		Huawei Device Co., Ltd.
+403B7B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+08-30-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+0830CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+90-CD-1F   (hex)		Quectel Wireless Solutions Co.,Ltd.
+90CD1F     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+90-23-5B   (hex)		Amazon Technologies Inc.
+90235B     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+14-13-0B   (hex)		Garmin International
+14130B     (base 16)		Garmin International
+				1200 E. 151st St
+				Olathe  KS  66062
+				US
+
+48-9B-E0   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+489BE0     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+5C-FA-25   (hex)		Sagemcom Broadband SAS
+5CFA25     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+B0-A2-E7   (hex)		Shenzhen TINNO Mobile Technology Corp.
+B0A2E7     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+A0-4C-5B   (hex)		Shenzhen TINNO Mobile Technology Corp.
+A04C5B     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+BC-41-01   (hex)		Shenzhen TINNO Mobile Technology Corp.
+BC4101     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+18-D6-1C   (hex)		Shenzhen TINNO Mobile Technology Corp.
+18D61C     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+74-97-79   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+749779     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+34-CF-6C   (hex)		Hangzhou Taili wireless communication equipment Co.,Ltd
+34CF6C     (base 16)		Hangzhou Taili wireless communication equipment Co.,Ltd
+				Room 1901, No.258,  Zhonghe Middle Road, Shangcheng District, Hangzhou
+				Hangzhou  Zhejiang  310003
+				CN
+
+F8-CD-C8   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+F8CDC8     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+B0-28-5B   (hex)		JUHUA Technology Inc.
+B0285B     (base 16)		JUHUA Technology Inc.
+				No.8,Yanbao Block,Hutian Road,Pingdi Street,Longgang District
+				Shenzhen City  Guangdong Province  518117
+				CN
+
+C8-24-96   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
+C82496     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
+				No.188 Nanhuan Road, TangQiao Town
+				Zhangjiagang   Jiangsu   215611
+				CN
+
+E0-F6-78   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E0F678     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+40-22-30   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+402230     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+14-5B-B9   (hex)		ConMet
+145BB9     (base 16)		ConMet
+				5701 SE Columbia Way
+				Vancouver    WA  98661
+				US
+
+28-F7-D6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+28F7D6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+B8-B4-09   (hex)		Samsung Electronics Co.,Ltd
+B8B409     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+24-18-C0   (hex)		E. Wehrle GmbH
+2418C0     (base 16)		E. Wehrle GmbH
+				Obertalstraße 8
+				78120 Furtwangen  Baden-Württemberg  78120
+				DE
+
+AC-83-F0   (hex)		Cobalt Digital Inc.
+AC83F0     (base 16)		Cobalt Digital Inc.
+				2506 Galen Drive
+				Champaign  IL  61821
+				US
+
+AC-15-A2   (hex)		TP-Link Corporation Limited
+AC15A2     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+AC-DF-9F   (hex)		Arcadyan Corporation
+ACDF9F     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+B8-59-C8   (hex)		70mai Co.,Ltd.
+B859C8     (base 16)		70mai Co.,Ltd.
+				Room 2220, building 2, No. 588, Zixing road
+				Shanghai  MinHang District  201100
+				CN
+
+A8-E2-07   (hex)		GOIP Global Services Pvt. Ltd.
+A8E207     (base 16)		GOIP Global Services Pvt. Ltd.
+				H68, Sector 63, Noida 201301
+				Noida   Uttar Pradesh  201301
+				IN
+
+74-E7-98   (hex)		Juniper Networks
+74E798     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+D4-E2-2F   (hex)		Roku, Inc
+D4E22F     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+00-13-95   (hex)		congatec GmbH
+001395     (base 16)		congatec GmbH
+				Auwiesenstrasse 5
+				Deggendorf    94469
+				DE
+
+28-77-B1   (hex)		Tri plus grupa d.o.o.
+2877B1     (base 16)		Tri plus grupa d.o.o.
+				Banjavciceva 11
+				Zagreb  Zagreb  10000
+				HR
+
+C4-3C-B0   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+C43CB0     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+3C-0B-4F   (hex)		Yandex Services AG
+3C0B4F     (base 16)		Yandex Services AG
+				Werftestrasse 4, 
+				Luzern    6005
+				CH
+
+4C-31-2D   (hex)		Sichuan AI-Link Technology Co., Ltd.
+4C312D     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+40-5E-F6   (hex)		Samsung Electronics Co.,Ltd
+405EF6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-52-44   (hex)		Samsung Electronics Co.,Ltd
+945244     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-2E-7A   (hex)		Samsung Electronics Co.,Ltd
+9C2E7A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-63-05   (hex)		Amazon Technologies Inc.
+7C6305     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+04-4F-7A   (hex)		China Mobile Group Device Co.,Ltd.
+044F7A     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+C0-4E-30   (hex)		Espressif Inc.
+C04E30     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+AC-60-6F   (hex)		Nokia Shanghai Bell Co., Ltd.
+AC606F     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+D8-7E-6F   (hex)		CASCINATION AG
+D87E6F     (base 16)		CASCINATION AG
+				Steigerhubelstrasse 3
+				Bern  Bern  3008
+				CH
+
+54-31-D4   (hex)		TGW Mechanics GmbH
+5431D4     (base 16)		TGW Mechanics GmbH
+				Collmannstraße 2
+				Wels    4600
+				AT
+
+94-01-AC   (hex)		Wuhan Qianyang Iotian Technology Co., Ltd
+9401AC     (base 16)		Wuhan Qianyang Iotian Technology Co., Ltd
+				Unit 1301, Building B4, Wuhan future science and Technology City, Gaoxin Avenue, Wuhan East Lake New-Technology Development Zone
+				Wuhan  Hubei  430206
+				CN
+
+00-19-FB   (hex)		SKY UK LIMITED
+0019FB     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+78-3E-53   (hex)		SKY UK LIMITED
+783E53     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+24-A7-DC   (hex)		SKY UK LIMITED
+24A7DC     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+E0-16-B1   (hex)		Advanced Design Technology co.,ltd.
+E016B1     (base 16)		Advanced Design Technology co.,ltd.
+				1-1-3 Kotobukicho#10F Mitsukikotobukichobiru
+				Fucyu-city  Tokyo  1830056
+				JP
+
+E4-B5-55   (hex)		Huawei Device Co., Ltd.
+E4B555     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C0-69-11   (hex)		Arista Networks
+C06911     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+2C-93-FB   (hex)		Sercomm France Sarl
+2C93FB     (base 16)		Sercomm France Sarl
+				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
+				Moulineaux    92370
+				FR
+
+38-A6-CE   (hex)		SKY UK LIMITED
+38A6CE     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+48-02-AF   (hex)		Telit Communication s.p.a
+4802AF     (base 16)		Telit Communication s.p.a
+				Via stazione di prosecco 5B
+				SGONICO  Trieste  34010
+				IT
+
+FC-C7-37   (hex)		Shaanxi Gangsion Electronic Technology Co., Ltd
+FCC737     (base 16)		Shaanxi Gangsion Electronic Technology Co., Ltd
+				Room 12302, building 1, Greenland territorial sea, No. 6, Jinye Road, high tech Zone, Xi'an, Shaanxi
+				xi'an  Shaanxi  710076
+				CN
+
+1C-46-D1   (hex)		SKY UK LIMITED
+1C46D1     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+00-3F-10   (hex)		Shenzhen GainStrong Technology Co., Ltd.
+003F10     (base 16)		Shenzhen GainStrong Technology Co., Ltd.
+				4/F, Building B, Hengmingzhu Industrial Park, Qian Jin Road 2, Baoan District
+				Shenzhen  Guangdong  518126
+				CN
+
+88-22-B2   (hex)		Chipsea Technologies (Shenzhen) Corp.
+8822B2     (base 16)		Chipsea Technologies (Shenzhen) Corp.
+				3 / F, Block A, Building 2, Shenzhen Bay Innovation Technology Center, No.3156 keyuan South Road, Yuehai Street, Nanshan District, Shenzhen
+				Shenzhen  Guangdong  518000
+				CN
+
+68-7A-64   (hex)		Intel Corporate
+687A64     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+BC-03-58   (hex)		Intel Corporate
+BC0358     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+88-B8-63   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+88B863     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+BC-69-CB   (hex)		Panasonic Electric Works Networks Co., Ltd.
+BC69CB     (base 16)		Panasonic Electric Works Networks Co., Ltd.
+				2-12-7, Higashi-Shinbashi
+				Minato-Ku  Tokyo  105-0021
+				JP
+
+58-C5-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+58C57E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+74-3A-F4   (hex)		Intel Corporate
+743AF4     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+58-2B-0A   (hex)		Texas Instruments
+582B0A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B4-46-6B   (hex)		REALTIMEID AS
+B4466B     (base 16)		REALTIMEID AS
+				Busk Bruns veg 1 , 7760 Snåsa (Norway)
+				Snåsa    7760
+				NO
+
+C4-EB-39   (hex)		Sagemcom Broadband SAS
+C4EB39     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-52-C8   (hex)		Made Studio Design Ltd.
+0052C8     (base 16)		Made Studio Design Ltd.
+				10F., No. 169, Sec. 4, Zhongxiao E. Rd., Da-an Dist.
+				Taipei City    10690
+				TW
+
+F0-C1-CE   (hex)		GoodWe Technologies CO., Ltd
+F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
+				No.90 Zijin Rd.,New District,Suzhou,215011,China
+				Suzhou   JiangSu  215011
+				CN
+
+0C-91-92   (hex)		Intel Corporate
+0C9192     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+48-AD-9A   (hex)		Intel Corporate
+48AD9A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+68-65-B7   (hex)		Zhishang Chuanglian Technology Co., Ltd
+6865B7     (base 16)		Zhishang Chuanglian Technology Co., Ltd
+				2 / F, building F, hongfengtai Science Park, Jinyuan Road, Henggang street, Longgang District, 
+				Shenzhen    518000
+				CN
+
+08-9D-F4   (hex)		Intel Corporate
+089DF4     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+DC-46-28   (hex)		Intel Corporate
+DC4628     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+90-6A-EB   (hex)		Microsoft Corporation
+906AEB     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+E4-6A-35   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+E46A35     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+20-04-F3   (hex)		Honor Device Co., Ltd.
+2004F3     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+58-9A-3E   (hex)		Amazon Technologies Inc.
+589A3E     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+E8-38-A0   (hex)		Vizio, Inc
+E838A0     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+EC-C0-7A   (hex)		Laird Connectivity
+ECC07A     (base 16)		Laird Connectivity
+				3F.-1, No.145, Xianzheng 9th Rd.,
+				Zhubei    30251
+				TW
+
+68-B9-C2   (hex)		Earda Technologies co Ltd
+68B9C2     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+C8-1E-C2   (hex)		ITEL MOBILE LIMITED
+C81EC2     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+38-E7-C0   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+38E7C0     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.2,Jin-da Road,Huinan Industrial Park
+				Hui Zhou  Guangdong  516025
+				CN
+
+68-83-CB   (hex)		Apple, Inc.
+6883CB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-12-63   (hex)		ASKEY COMPUTER CORP
+FC1263     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+58-30-5B   (hex)		Shanghai Junqian Sensing Technology Co.,LTD
+58305B     (base 16)		Shanghai Junqian Sensing Technology Co.,LTD
+				Room 602,Building 1,NO.760,Xinjunhuan Road, Caohejing High-Tech Park,Minhang District,
+				Shanghai  Shanghai  201114
+				CN
+
+C0-71-AA   (hex)		ShenZhen OnMicro Electronics Co.,Ltd.
+C071AA     (base 16)		ShenZhen OnMicro Electronics Co.,Ltd.
+				Room 407-408, West Building, Skyworth Semiconductor Building, GaoXin South 4th Road, Yuehai Street, Nanshan District
+				Shenzhen  GuangDong  518057
+				CN
+
+9C-05-91   (hex)		Mellanox Technologies, Inc.
+9C0591     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+70-9C-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+709C45     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-09-DF   (hex)		Vestel Elektronik San ve Tic. A.S.
+0009DF     (base 16)		Vestel Elektronik San ve Tic. A.S.
+				Organize san
+				Manisa  Turket  45030
+				TR
+
+FC-07-36   (hex)		Huawei Device Co., Ltd.
+FC0736     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+94-A0-7D   (hex)		Huawei Device Co., Ltd.
+94A07D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+5C-07-58   (hex)		Ufispace Co., LTD.
+5C0758     (base 16)		Ufispace Co., LTD.
+				9F., No. 81 Jhongcheng Rd., Tucheng Dist.,
+				New Taipei    23674
+				TW
+
+DC-E6-50   (hex)		Extreme Networks, Inc.
+DCE650     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+14-2D-79   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+142D79     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+DC-B7-AC   (hex)		Aruba, a Hewlett Packard Enterprise Company
+DCB7AC     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+A0-31-31   (hex)		Procenne Digital Security
+A03131     (base 16)		Procenne Digital Security
+				Eski Buyukdere Cd. No:7/12 Maslak
+				Istanbul  Sariyer  34398
+				TR
+
+84-F4-4C   (hex)		International Integrated Systems., Inc.
+84F44C     (base 16)		International Integrated Systems., Inc.
+				6F., No.7, Sec. 2, Xianmin Blvd., Banqiao Dist., 
+				New Taipei City    22041
+				TW
+
+CC-5E-F8   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+CC5EF8     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+A4-9E-69   (hex)		Silicon Laboratories
+A49E69     (base 16)		Silicon Laboratories
+				400 W Cesar Chavez St, Silicon La
+				Austin  TX  78701
+				US
+
+48-73-10   (hex)		Juniper Networks
+487310     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+4C-FC-22   (hex)		SHANGHAI HI-TECH CONTROL SYSTEM CO.,LTD.
+4CFC22     (base 16)		SHANGHAI HI-TECH CONTROL SYSTEM CO.,LTD.
+				XinJun Ring Road 777, Caohejing Pujiang Hi-Tech Park, Minhang District
+				Shanghai  Shanghai  201114
+				CN
+
+40-33-06   (hex)		Taicang T&W Electronics
+403306     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+00-0B-F8   (hex)		Infinera, Inc.
+000BF8     (base 16)		Infinera, Inc.
+				1322 Bordeaux Drive
+				Sunnyvale  CA  94089
+				US
+
+7C-50-DA   (hex)		E.J Ward
+7C50DA     (base 16)		E.J Ward
+				8620 N. New Braunfels, Ste. 200N
+				San Antonio  TX  78217
+				US
+
+00-5C-C2   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+005CC2     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+2C-F2-A5   (hex)		Sagemcom Broadband SAS
+2CF2A5     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E4-EC-E8   (hex)		Samsung Electronics Co.,Ltd
+E4ECE8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-90-8A   (hex)		Samsung Electronics Co.,Ltd
+C8908A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+78-3E-A1   (hex)		Nokia Shanghai Bell Co., Ltd.
+783EA1     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+B0-81-01   (hex)		Honor Device Co., Ltd.
+B08101     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+48-5D-ED   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+485DED     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+5C-FC-6E   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+5CFC6E     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+30-B0-EA   (hex)		Shenzhen Chuangxin Internet Communication Technology Co., Ltd
+30B0EA     (base 16)		Shenzhen Chuangxin Internet Communication Technology Co., Ltd
+				 608, building r2-b, Gaoxin industrial village, No. 020, Gaoxin South 7th Road, Gaoxin community, Yuehai street, Nanshan District,
+				ShenZhen  GuangDong  518000
+				CN
+
+40-1A-58   (hex)		Wistron Neweb Corporation
+401A58     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+A4-1C-B4   (hex)		DFI Inc
+A41CB4     (base 16)		DFI Inc
+				No.157, Shanying Rd., Gueishan Dist., Taoyuan City 333424, Taiwan (R.O.C.)
+				Taoyuan City    333424
+				TW
+
+34-47-9A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+34479A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+7C-DC-CC   (hex)		BEIJING STARBLAZE TECHNOLOGY CO.,LTD
+7CDCCC     (base 16)		BEIJING STARBLAZE TECHNOLOGY CO.,LTD
+				Unit 907, Building 4, Building 2, No. 9 Fenghao East Road, Haidian District, Beijing 
+				Beijing    100000
+				CN
+
+70-B7-E4   (hex)		Broadcom Limited
+70B7E4     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+14-23-F2   (hex)		Broadcom Limited
+1423F2     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+74-08-DE   (hex)		Fujian Landi Commercial Technology Co., Ltd.
+7408DE     (base 16)		Fujian Landi Commercial Technology Co., Ltd.
+				Building 3A, Block A, Fuzhou Software Park, No.89 Software Road, Gulou District
+				Fuzhou  Fujian  350008
+				CN
+
+10-FC-33   (hex)		Huawei Device Co., Ltd.
+10FC33     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+94-3C-96   (hex)		Sagemcom Broadband SAS
+943C96     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+94-AD-23   (hex)		Apple, Inc.
+94AD23     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-A5-CB   (hex)		Apple, Inc.
+20A5CB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-21-CA   (hex)		Apple, Inc.
+F421CA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-02-68   (hex)		Infinera, Inc.
+3C0268     (base 16)		Infinera, Inc.
+				169 Java Drive
+				Sunnyvale  CA  94089
+				US
+
+BC-89-A7   (hex)		Apple, Inc.
+BC89A7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-04-B8   (hex)		China Hualu Panasonic AVC Networks Co., LTD.
+0404B8     (base 16)		China Hualu Panasonic AVC Networks Co., LTD.
+				No.1 Hua Road,Qixianling,High Technology Zone,Dalian,Liaoning,China
+				Dalian  LiaoNing  116023
+				CN
+
+18-D6-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+18D6DD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-01-A6   (hex)		Edgecore Networks Corporation
+E001A6     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+FC-18-03   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC1803     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-96-2E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68962E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-3D-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC3DD1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-C2-BA   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+40C2BA     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+F0-82-C0   (hex)		Silicon Laboratories
+F082C0     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+80-BC-37   (hex)		Ruckus Wireless
+80BC37     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+60-C7-BE   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+60C7BE     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+20-36-26   (hex)		TP-Link Corporation Limited
+203626     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+54-C4-5B   (hex)		Arcadyan Corporation
+54C45B     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+00-0B-3A   (hex)		PESA Inc.
+000B3A     (base 16)		PESA Inc.
+				103 Quality Circle, Suite 210
+				Huntsville  AL  35806
+				US
+
+24-F0-D3   (hex)		Samsung Electronics Co.,Ltd
+24F0D3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+58-20-71   (hex)		Samsung Electronics Co.,Ltd
+582071     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-DC-0F   (hex)		Phytium Technology Co.,Ltd.
+24DC0F     (base 16)		Phytium Technology Co.,Ltd.
+				Building5,XinAn Business Square,Haiyuan Middle Road Binhai New District,
+				Tianjin    300450
+				CN
+
+68-49-92   (hex)		Cisco Meraki
+684992     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+F8-5E-42   (hex)		Technicolor CH USA Inc.
+F85E42     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+EC-93-7D   (hex)		Technicolor CH USA Inc.
+EC937D     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+D4-E2-CB   (hex)		Technicolor CH USA Inc.
+D4E2CB     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+F8-A4-FB   (hex)		Nanjing Decowell Automation Co.,LTD
+F8A4FB     (base 16)		Nanjing Decowell Automation Co.,LTD
+				Building 3, Zifeng Research and Innovation Park phase II, Qiaolin Street, Pukou District
+				Nanjing  Jiangsu  211806
+				CN
+
+80-BE-AF   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+80BEAF     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+F8-9B-6E   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+F89B6E     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+E0-C2-64   (hex)		Intel Corporate
+E0C264     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+BC-D0-EB   (hex)		New H3C Technologies Co., Ltd
+BCD0EB     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+60-58-01   (hex)		Shandong ZTop Microelectronics Co., Ltd.
+605801     (base 16)		Shandong ZTop Microelectronics Co., Ltd.
+				2-1105A5, Jinqiao international, No. 2277, 2nd Ring Road East, Hongjialou Street, Licheng District, Jinan, Shandong Province
+				Jinan    250000
+				CN
+
+D8-63-0D   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+D8630D     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+14-DC-51   (hex)		Xiamen Cheerzing IOT Technology Co.,Ltd.
+14DC51     (base 16)		Xiamen Cheerzing IOT Technology Co.,Ltd.
+				Unit 702 7/F,No.165 East Tapu Road,Siming District
+				Xiamen  FuJian  361002
+				CN
+
+D4-BA-BA   (hex)		IEEE Registration Authority
+D4BABA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+9C-D8-E3   (hex)		Wuhan Huazhong Numerical Control Co., Ltd
+9CD8E3     (base 16)		Wuhan Huazhong Numerical Control Co., Ltd
+				Wuhan Huazhong Numerical Control Co.?Ltd
+				Wuhan  Hubei  430000
+				CN
+
+F8-07-5D   (hex)		Huawei Device Co., Ltd.
+F8075D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-33-1F   (hex)		Huawei Device Co., Ltd.
+04331F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-22-6E   (hex)		Amazon Technologies Inc.
+98226E     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+C4-AA-C4   (hex)		Zhejiang Dahua Technology Co., Ltd.
+C4AAC4     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+64-DB-F7   (hex)		Nokia Shanghai Bell Co., Ltd.
+64DBF7     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+3C-A2-C3   (hex)		vivo Mobile Communication Co., Ltd.
+3CA2C3     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+14-B3-A1   (hex)		Juniper Networks
+14B3A1     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+54-10-2E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54102E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-D5-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94D54D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-D3-AA   (hex)		FCNT LMITED
+E4D3AA     (base 16)		FCNT LMITED
+				Sanki Yamato Building, 7-10-1 Chuorinkan
+				Yamato  Kanagawa  242-8588
+				JP
+
+5C-47-5E   (hex)		Ring LLC
+5C475E     (base 16)		Ring LLC
+				1523 26th St
+				Santa Monica  CA  90404
+				US
+
+38-A9-EA   (hex)		HK DAPU ELECTRONIC TECHNOLOGY CO., LIMITED
+38A9EA     (base 16)		HK DAPU ELECTRONIC TECHNOLOGY CO., LIMITED
+				FLAT/RM 3A-7 12/F, KAISER CENTRE, NO.18 CENTRE STREET, SAI YING PUN, HK
+				HONGKONG    000000
+				HK
+
+24-E5-0F   (hex)		Google, Inc.
+24E50F     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+70-28-04   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+702804     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+C0-91-B9   (hex)		Amazon Technologies Inc.
+C091B9     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+94-D8-6B   (hex)		nass magnet Hungária Kft.
+94D86B     (base 16)		nass magnet Hungária Kft.
+				Henger u.2
+				Veszprém    8200
+				HU
+
+14-61-A4   (hex)		Honor Device Co., Ltd.
+1461A4     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+EC-84-B4   (hex)		CIG SHANGHAI CO LTD
+EC84B4     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road 
+				SHANGHAI    201114
+				CN
+
+A4-81-7A   (hex)		CIG SHANGHAI CO LTD
+A4817A     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road 
+				SHANGHAI    201114
+				CN
+
+5C-21-67   (hex)		Rockwell Automation
+5C2167     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+D0-96-86   (hex)		IEEE Registration Authority
+D09686     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C4-E5-B1   (hex)		Suzhou PanKore Integrated Circuit Technology Co. Ltd.
+C4E5B1     (base 16)		Suzhou PanKore Integrated Circuit Technology Co. Ltd.
+				Room168, Building 2, No. 128, West Shenhu Road, Suzhou Industrial Park, Suzhou City, Jiangsu Province, China
+				SuZhou  Jiangsu  215027
+				CN
+
+AC-C4-A9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ACC4A9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+7C-94-9F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+7C949F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+3C-2C-A6   (hex)		Beijing Xiaomi Electronics Co.,Ltd
+3C2CA6     (base 16)		Beijing Xiaomi Electronics Co.,Ltd
+				Xiaomi Campus
+				Beijing  Beijing  100085
+				CN
+
+34-F2-23   (hex)		Fujian Newland Communication Science Technology Co.,Ltd.
+34F223     (base 16)		Fujian Newland Communication Science Technology Co.,Ltd.
+				F5, Hongzhuo Bldg., 1, Rujiangxi Rd., Fuzhou, Fujian, China
+				Fuzhou  Fujian  350015
+				CN
+
+E0-75-26   (hex)		China Dragon Technology Limited
+E07526     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+04-B6-BE   (hex)		CIG SHANGHAI CO LTD
+04B6BE     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road 
+				SHANGHAI    201114
+				CN
+
+E4-8E-10   (hex)		CIG SHANGHAI CO LTD
+E48E10     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road 
+				SHANGHAI    201114
+				CN
+
+94-BE-09   (hex)		China Mobile Group Device Co.,Ltd.
+94BE09     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+E8-EF-22   (hex)		Siemens Numerical Control Ltd., Nanjing
+E8EF22     (base 16)		Siemens Numerical Control Ltd., Nanjing
+				18 Runhuai Road, Lishui Zone
+				Nanjing    211200
+				CN
+
+78-6C-84   (hex)		Amazon Technologies Inc.
+786C84     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+38-64-07   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+386407     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+1C-63-A5   (hex)		securityplatform
+1C63A5     (base 16)		securityplatform
+				Suite # 771, 815 daewangpangyo-ro, sujeong-gu
+				seongnam-si  gyeonggi-do  13449
+				KR
+
+94-28-6F   (hex)		zte corporation
+94286F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+40-0E-F3   (hex)		zte corporation
+400EF3     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+D8-E8-44   (hex)		zte corporation
+D8E844     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+C0-51-5C   (hex)		zte corporation
+C0515C     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+9C-63-5B   (hex)		zte corporation
+9C635B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+74-3E-39   (hex)		YUSUR Technology Co., Ltd.
+743E39     (base 16)		YUSUR Technology Co., Ltd.
+				Room 1401,building 4,yard 1, Beiqing Road No.81, Haidian District
+				Beijing  Beijing  100086
+				CN
+
+B8-D4-BC   (hex)		zte corporation
+B8D4BC     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+C4-EB-41   (hex)		Sagemcom Broadband SAS
+C4EB41     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C4-EB-43   (hex)		Sagemcom Broadband SAS
+C4EB43     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+4C-74-A7   (hex)		IEEE Registration Authority
+4C74A7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+54-C6-FF   (hex)		New H3C Technologies Co., Ltd
+54C6FF     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+F4-E9-75   (hex)		New H3C Technologies Co., Ltd
+F4E975     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+D4-D4-DA   (hex)		Espressif Inc.
+D4D4DA     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+04-03-12   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+040312     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+84-60-82   (hex)		Hyperloop Technologies, Inc dba Virgin Hyperloop
+846082     (base 16)		Hyperloop Technologies, Inc dba Virgin Hyperloop
+				2159 Bay Street
+				LOS ANGELES  CA  90021
+				US
+
+E8-AA-CB   (hex)		Samsung Electronics Co.,Ltd
+E8AACB     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+F0-4F-7C   (hex)		Amazon Technologies Inc.
+F04F7C     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+D4-3A-2C   (hex)		Google, Inc.
+D43A2C     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+E0-4B-41   (hex)		Hangzhou Beilian Low Carbon Technology Co., Ltd.
+E04B41     (base 16)		Hangzhou Beilian Low Carbon Technology Co., Ltd.
+				Room 2502, area a, building 1, No. 57, jianger Road, Changhe street, Binjiang District,
+				HangZhou  ZheJiang   310000
+				CN
+
+88-B8-6F   (hex)		Infinix mobility limited
+88B86F     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+28-0A-EE   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+280AEE     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+4C-22-F3   (hex)		Arcadyan Corporation
+4C22F3     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+38-53-19   (hex)		34ED LLC DBA Centegix
+385319     (base 16)		34ED LLC DBA Centegix
+				2120 Powers Ferry Rd, Suite 110
+				Atlanta  GA  30339
+				US
+
+20-0C-86   (hex)		GX India Pvt Ltd
+200C86     (base 16)		GX India Pvt Ltd
+				595, SECTOR-8, IMT MANESAR
+				GURGAON  Haryana  122051
+				IN
+
+70-AE-D5   (hex)		Apple, Inc.
+70AED5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-09-0F   (hex)		Fortinet, Inc.
+00090F     (base 16)		Fortinet, Inc.
+				1090 Kifer Road
+				Sunnyvale  CA  94086
+				US
+
+00-0C-E6   (hex)		Fortinet, Inc.
+000CE6     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale  CA  94086
+				US
+
+C4-7B-80   (hex)		Protempis, LLC
+C47B80     (base 16)		Protempis, LLC
+				3333 Warrenville Road, Ste 200
+				Lisle  IL  60532-1999
+				US
+
+9C-88-24   (hex)		PetroCloud LLC
+9C8824     (base 16)		PetroCloud LLC
+				8308 Sterling St
+				Irving  TX  75063
+				US
+
+54-D7-E3   (hex)		Aruba, a Hewlett Packard Enterprise Company
+54D7E3     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+5C-2F-AF   (hex)		HomeWizard B.V.
+5C2FAF     (base 16)		HomeWizard B.V.
+				Keyserswey 79
+				Noordwijk  Zuid-Holland  2201CX
+				NL
+
+78-30-F5   (hex)		TBT Inc.
+7830F5     (base 16)		TBT Inc.
+				10, Seounsandan-ro-4gil, Gyeyang-gu
+				Incheon    21072
+				KR
+
+88-AF-7B   (hex)		Nanjing Powercore Tech Co.,Ltd
+88AF7B     (base 16)		Nanjing Powercore Tech Co.,Ltd
+				Room 104-9, Block B, Animation Building, 11 Xinghuo Road, Jiangbei New Area, Nanjing
+				 Nanjing    210000
+				CN
+
+8C-8E-0D   (hex)		zte corporation
+8C8E0D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+04-00-67   (hex)		Stanley Black & Decker
+040067     (base 16)		Stanley Black & Decker
+				701 E Joppa Rd
+				Towson  MD  21286
+				US
+
+E0-B9-8A   (hex)		Shenzhen Taike industrial automation company,Ltd
+E0B98A     (base 16)		Shenzhen Taike industrial automation company,Ltd
+				34F,building B,Zhongzhou holding financial center,No.88 Haide 1st Road,Haizhu community,Yuehai street,Nanshan District,Shenzhen,Guangdong
+				Shenzhen  Guangdong  518064
+				CN
+
+A0-24-F9   (hex)		Chengdu InnovaTest Technology Co., Ltd
+A024F9     (base 16)		Chengdu InnovaTest Technology Co., Ltd
+				High Tech District
+				Chengdu  Sichuan  610000
+				CN
+
+70-47-77   (hex)		Ruckus Wireless
+704777     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+FC-3F-A6   (hex)		eero inc.
+FC3FA6     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+78-96-A3   (hex)		Extreme Networks, Inc.
+7896A3     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+48-C1-EE   (hex)		Honor Device Co., Ltd.
+48C1EE     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+50-80-4A   (hex)		Quectel Wireless Solutions Co.,Ltd.
+50804A     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+A4-86-AE   (hex)		Quectel Wireless Solutions Co.,Ltd.
+A486AE     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+CC-08-7B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC087B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-64-6C   (hex)		LG Electronics
+7C646C     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+00-03-27   (hex)		HMS Industrial Networks
+000327     (base 16)		HMS Industrial Networks
+				P O Box 4126
+				Halmstad  Halland  300 04
+				SE
+
+94-72-0F   (hex)		Guangdong Nanguang Photo&Video Systems Co., Ltd.
+94720F     (base 16)		Guangdong Nanguang Photo&Video Systems Co., Ltd.
+				Dongli Section, Highway 324, Chenghai
+				Shantou  Guangdong  515829
+				CN
+
+64-68-76   (hex)		Edifier International
+646876     (base 16)		Edifier International
+				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
+				Hong Kong    070
+				CN
+
+60-15-21   (hex)		Redarc Electronics
+601521     (base 16)		Redarc Electronics
+				23 Brodie Road (North)
+				Lonsdale  South Australia  5160
+				AU
+
+E4-26-D5   (hex)		Motorola Mobility LLC, a Lenovo Company
+E426D5     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+28-E4-24   (hex)		New H3C Technologies Co., Ltd
+28E424     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+58-D3-91   (hex)		Quectel Wireless Solutions Co.,Ltd.
+58D391     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+A8-F8-C9   (hex)		NXP Semiconductor (Tianjin) LTD.
+A8F8C9     (base 16)		NXP Semiconductor (Tianjin) LTD.
+				No.15 Xinghua Avenue, Xiqing Economic Development Area
+				Tianjin    300385
+				CN
+
+60-56-99   (hex)		Marelli Morocco LLC SARL
+605699     (base 16)		Marelli Morocco LLC SARL
+				LOT N°146, ZONE FRANCHE TANGER AUTOMOTIVE CITY
+				Tangier    90000
+				MA
+
+88-94-8E   (hex)		Max Weishaupt GmbH
+88948E     (base 16)		Max Weishaupt GmbH
+				Max-Weishaupt-Str. 14
+				Schwendi    88475
+				DE
+
+DC-B3-47   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+DCB347     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+60-6E-41   (hex)		Barrot Technology Co.,LTD
+606E41     (base 16)		Barrot Technology Co.,LTD
+				A1009, Block A, Jia Hua Building, No.9 Shangdisanjie St, Haidian District, 
+				beijing  beijing  100000
+				CN
+
+E4-9D-73   (hex)		Edgecore Networks Corporation
+E49D73     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+60-29-2B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+60292B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+5C-64-F3   (hex)		sywinkey HongKong Co,. Limited?
+5C64F3     (base 16)		sywinkey HongKong Co,. Limited?
+				RM2,3/F Ruby CDMN Building No. 480 Nathan Road KL
+				HongKong  HongKong  999077
+				CN
+
+00-1E-43   (hex)		AISIN CORPORATION
+001E43     (base 16)		AISIN CORPORATION
+				6-18, Harayama, Oka-cho
+				Okazaki  Aichi  444-8564
+				JP
+
+A8-EE-6D   (hex)		Fine Point-High Export
+A8EE6D     (base 16)		Fine Point-High Export
+				13800 Coppermine Rd
+				Herndon   VA  20171
+				US
+
+4C-06-17   (hex)		Taicang T&W Electronics
+4C0617     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+D4-9A-F6   (hex)		AzureWave Technology Inc.
+D49AF6     (base 16)		AzureWave Technology Inc.
+				8F., No.94, Baozhong Rd., Xindian
+				Taipei    231
+				US
+
+00-23-D5   (hex)		 WAREMA Renkhoff SE
+0023D5     (base 16)		 WAREMA Renkhoff SE
+				Dillberg 33
+				Marktheidenfeld  Bavaria  97828
+				DE
+
+44-EB-2E   (hex)		ALPSALPINE CO,.LTD
+44EB2E     (base 16)		ALPSALPINE CO,.LTD
+				nishida 6-1
+				kakuda-City  Miyagi-Pref  981-1595
+				JP
+
+04-7F-0E   (hex)		Barrot Technology Co.,LTD
+047F0E     (base 16)		Barrot Technology Co.,LTD
+				C7-1-1,East Area, No.2,Shangdi Xinxi Road, Haidian District
+				Beijing    100085
+				CN
+
+70-46-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+704698     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-08-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+78084D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-AA-8F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ECAA8F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-6B-14   (hex)		Barrot Technology Co.,LTD
+F86B14     (base 16)		Barrot Technology Co.,LTD
+				A1009, Block A, Jia Hua Building, No.9 Shangdisanjie St, Haidian District, 
+				beijing  beijing  100000
+				CN
+
+2C-18-09   (hex)		Apple, Inc.
+2C1809     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-47-D8   (hex)		Apple, Inc.
+FC47D8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-AB-96   (hex)		Silicon Laboratories
+90AB96     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+B0-4B-68   (hex)		NAKAYO Inc
+B04B68     (base 16)		NAKAYO Inc
+				1-3-2, Soja-machi
+				Maebashi-shi  Gunma  371-0853
+				JP
+
+D8-34-1C   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+D8341C     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+54-51-DE   (hex)		Cisco Systems, Inc
+5451DE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-33-1C   (hex)		Toast, Inc.
+F4331C     (base 16)		Toast, Inc.
+				401 Park Drive, Suite 801
+				Boston  MA  02215
+				US
+
+04-32-01   (hex)		Broadcom Limited
+043201     (base 16)		Broadcom Limited
+				15191 Alton Parkway
+				Irvine  CA  92618
+				US
+
+D8-AF-81   (hex)		AO 
+D8AF81     (base 16)		AO 
+				Filippovskiy per., 8/1
+				Moscow    119019
+				RU
+
+00-12-E0   (hex)		Codan Limited
+0012E0     (base 16)		Codan Limited
+				Technology Park, 2 Second Avenue
+				Mawson Lakes  SA  5095
+				AU
+
+38-39-6C   (hex)		Huawei Device Co., Ltd.
+38396C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-66-E5   (hex)		Huawei Device Co., Ltd.
+5066E5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-77-94   (hex)		Huawei Device Co., Ltd.
+DC7794     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+70-B6-51   (hex)		Eight Sleep
+70B651     (base 16)		Eight Sleep
+				212 W 35th StFloor 4
+				New York  NY  10123
+				US
+
+DC-A3-13   (hex)		Shenzhen Changjin Communication Technology Co.,Ltd
+DCA313     (base 16)		Shenzhen Changjin Communication Technology Co.,Ltd
+				6th Floor, Saibo Building, Tenglong Road, Minzhi Street, Longhua District, Shenzhen
+				Shenzhen    518000
+				CN
+
+68-9A-21   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+689A21     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+7C-17-79   (hex)		EM Microelectronic
+7C1779     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+90-CE-B8   (hex)		Texas Instruments
+90CEB8     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+AC-FC-82   (hex)		Shenzhen Sundray Technologies Company Limited
+ACFC82     (base 16)		Shenzhen Sundray Technologies Company Limited
+				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
+				Shenzhen  Guangdong  518057
+				CN
+
+CC-F8-26   (hex)		Samsung Electronics Co.,Ltd
+CCF826     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-22-DA   (hex)		Technicolor CH USA Inc.
+5C22DA     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+18-26-54   (hex)		Samsung Electronics Co.,Ltd
+182654     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+70-5A-6F   (hex)		IEEE Registration Authority
+705A6F     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+1C-67-60   (hex)		Phonesuite
+1C6760     (base 16)		Phonesuite
+				400 Liberty Park Court
+				Flowood    39232
+				US
+
+38-6F-6B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+386F6B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+54-11-49   (hex)		vivo Mobile Communication Co., Ltd.
+541149     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+70-7C-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+707CE3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-6F-9B   (hex)		zte corporation
+3C6F9B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+90-52-BF   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+9052BF     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+60-EF-AB   (hex)		Silicon Laboratories
+60EFAB     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+48-A9-8A   (hex)		Routerboard.com
+48A98A     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+88-1E-59   (hex)		Onion Corporation
+881E59     (base 16)		Onion Corporation
+				895 Don Mills Road
+				North York  Ontario  M3C 1W3,
+				CA
+
+2C-00-2A   (hex)		Shenzhen TINNO Mobile Technology Corp.
+2C002A     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+E8-88-43   (hex)		Xiaomi Communications Co Ltd
+E88843     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+28-02-2E   (hex)		Apple, Inc.
+28022E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-9C-A7   (hex)		Apple, Inc.
+FC9CA7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-E1-5C   (hex)		Apple, Inc.
+48E15C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-15-F5   (hex)		Apple, Inc.
+7415F5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-C6-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88C6E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-14-1B   (hex)		Secure Letter Inc.
+38141B     (base 16)		Secure Letter Inc.
+				223, Yeoksam-ro
+				Gangnam-gu  Seoul  06224
+				KR
+
+B4-61-E9   (hex)		Sichuan AI-Link Technology Co., Ltd.
+B461E9     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+64-E2-04   (hex)		NTN Technical Service Corporation
+64E204     (base 16)		NTN Technical Service Corporation
+				1578 Higashi-Kaizuka
+				Iwata  Shizuoka  438-8510
+				JP
+
+2C-98-11   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+2C9811     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+9C-D1-D0   (hex)		Guangzhou Ronsuo Electronic Technology Co.,Ltd
+9CD1D0     (base 16)		Guangzhou Ronsuo Electronic Technology Co.,Ltd
+				Address:Unit 503-505, 507, Area E, No. 80 Lanyue Road, Science Avenue, Huangpu District, Guangzhou
+				Guangzhou  Guangdong  510600
+				CN
+
+90-D6-89   (hex)		Huahao Fangzhou Technology Co.,Ltd
+90D689     (base 16)		Huahao Fangzhou Technology Co.,Ltd
+				No.99,Hangtian Road,Section 2,East Third Ring Road,Chenghua Distrct,Chengdu,SiChuan
+				Chengdu  SiChuan  610051
+				CN
+
+3C-79-2B   (hex)		Dongguan Auklink TechnologyCo.,Ltd
+3C792B     (base 16)		Dongguan Auklink TechnologyCo.,Ltd
+				401, Building 1, No. 11, Dalingshan Hupan Road
+				Dalingshan Town  Dongguan City, Guangdong Province  523810
+				CN
+
+C0-8B-2A   (hex)		Cisco Systems, Inc
+C08B2A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-CA-75   (hex)		Robert Bosch GmbH AnP
+2CCA75     (base 16)		Robert Bosch GmbH AnP
+				Robert Bosch Strasse 1
+				Ansbach    91522
+				DE
+
+5C-94-62   (hex)		Shenzhen Jiuzhou Electric Co.,LTD
+5C9462     (base 16)		Shenzhen Jiuzhou Electric Co.,LTD
+				6F,Jiuzhou Electric Building,Southern No.12RD.,Hi-Tech Industrial Park,Nanshan District,
+				Shenzhen  Guangdong  518057
+				CN
+
+E0-D8-C4   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+E0D8C4     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+CC-D8-1F   (hex)		Maipu Communication Technology Co.,Ltd.
+CCD81F     (base 16)		Maipu Communication Technology Co.,Ltd.
+				No.16 Jiuxing Avenue, Hi-tech zone
+				Chengdu  Sichuan  610094
+				CN
+
+D4-99-6C   (hex)		Juniper Networks
+D4996C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+E4-BC-AA   (hex)		Xiaomi Communications Co Ltd
+E4BCAA     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+40-4C-CA   (hex)		Espressif Inc.
+404CCA     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+BC-9E-2C   (hex)		China Mobile Group Device Co.,Ltd.
+BC9E2C     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+54-5D-D9   (hex)		EDISTEC
+545DD9     (base 16)		EDISTEC
+				Rm 1701, Gasan SKV1 Center, 171, Gasan digital 1-ro, Geumcheon-gu, Seoul
+				Seoul  Seoul  08503
+				KR
+
+00-16-16   (hex)		BROWAN COMMUNICATIONS INCORPORATION
+001616     (base 16)		BROWAN COMMUNICATIONS INCORPORATION
+				No.1 Jen-Ai Road, HsinChu Industrial Park,
+				HuKou Hsiang  HsinChu Hsien  303
+				TW
+
+C0-C7-0A   (hex)		Ruckus Wireless
+C0C70A     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+00-0E-51   (hex)		TECNA SpA
+000E51     (base 16)		TECNA SpA
+				Via Meucci, 27
+				Sastel San Pietro Terme  Bologna  40024
+				IT
+
+5C-62-8B   (hex)		TP-Link Corporation Limited
+5C628B     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+D4-3A-2F   (hex)		SHENZHEN MTC CO LTD
+D43A2F     (base 16)		SHENZHEN MTC CO LTD
+				5th Floor, 3rd Building, SHENZHEN MTC Industrial Park, XiaLilang Rd, Nanwan Street, Long’gang District
+				Shenzhen  Guangdong  518100
+				CN
+
+14-AB-EC   (hex)		Aruba, a Hewlett Packard Enterprise Company
+14ABEC     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+9C-84-B6   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+9C84B6     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+34-CA-81   (hex)		New H3C Intelligence Terminal Co., Ltd.
+34CA81     (base 16)		New H3C Intelligence Terminal Co., Ltd.
+				Room 406-100, 1 Yichuang Street, China-Singapore Guangzhou Knowledge City, Huangpu District, Guangzhou.
+				Guangzhou   Guangdong  510030
+				CN
+
+C4-67-8B   (hex)		Alphabet Capital Sdn Bhd
+C4678B     (base 16)		Alphabet Capital Sdn Bhd
+				L-3A-3A, No.2, Jalan Solaris, Solaris Mont Kiara, 50480 Kuala Lumpur, Malaysia
+				Mont Kiara  Kuala Lumpur  50480
+				MY
+
+60-F0-4D   (hex)		Honor Device Co., Ltd.
+60F04D     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+60-03-0C   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+60030C     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+28-0C-2D   (hex)		QUALVISION TECHNOLOGY CO.,LTD
+280C2D     (base 16)		QUALVISION TECHNOLOGY CO.,LTD
+				2F-5F, Bldg B, No.37, Zhenxing RoadLiyuhe Industrial Park, Loucun,Gongming, shenzhen, China, 518107
+				China  shenzhen  518107
+				CN
+
+88-67-DC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8867DC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-41-0D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+40410D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-8B-6B   (hex)		Amazon Technologies Inc.
+5C8B6B     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+48-81-D4   (hex)		Ruijie Networks Co.,LTD
+4881D4     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+24-A4-3C   (hex)		Ubiquiti Inc
+24A43C     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+44-D9-E7   (hex)		Ubiquiti Inc
+44D9E7     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+C0-61-3D   (hex)		BioIntelliSense, Inc.
+C0613D     (base 16)		BioIntelliSense, Inc.
+				17301 W. COLFAX AVENUE, SUITE 152
+				Golden  CO  80401
+				US
+
+D0-21-F9   (hex)		Ubiquiti Inc
+D021F9     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+70-A7-41   (hex)		Ubiquiti Inc
+70A741     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+18-14-AE   (hex)		Nokia
+1814AE     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+04-18-D6   (hex)		Ubiquiti Inc
+0418D6     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+00-14-91   (hex)		Daniels Electronics Ltd. dba Codan Radio Communications
+001491     (base 16)		Daniels Electronics Ltd. dba Codan Radio Communications
+				43 Erie St
+				Victoria  BC  V8V 1P8
+				CA
+
+20-0B-C5   (hex)		Cisco Systems, Inc
+200BC5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+90-E9-5E   (hex)		Cisco Systems, Inc
+90E95E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-2B-6B   (hex)		shenzhen worldelite electronics co., LTD
+C82B6B     (base 16)		shenzhen worldelite electronics co., LTD
+				Office 5 F, Xiang Yu Industrial Park, Longsheng Road, Longgang Dist
+				Shenzhen  Guangdong  51800
+				CN
+
+30-4F-75   (hex)		DZS Inc.
+304F75     (base 16)		DZS Inc.
+				DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu
+				Seongnam-si  Gyeonggi-do  13493
+				KR
+
+D0-96-FB   (hex)		DZS Inc.
+D096FB     (base 16)		DZS Inc.
+				DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu
+				Seongnam-si  Gyeonggi-do  13493
+				KR
+
+80-7C-62   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+807C62     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road 
+				Hangzhou  Zhejiang  310052
+				CN
+
+20-29-B9   (hex)		Ikotek technology SH Co., Ltd
+2029B9     (base 16)		Ikotek technology SH Co., Ltd
+				Building 2, Shanghai Business Park Phase III (Area B), No.1036 Tianlin Road, Minhang District, Shanghai 200233, China
+				Shanghai    200233
+				CN
+
+28-57-BE   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+2857BE     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+00-01-47   (hex)		DZS Inc.
+000147     (base 16)		DZS Inc.
+				7001 Oakport Street
+				Oakland  CA  94621
+				US
+
+00-02-71   (hex)		DZS Inc.
+000271     (base 16)		DZS Inc.
+				7001 Oakport Street
+				Oakland  CA  94621
+				US
+
+CC-47-40   (hex)		AzureWave Technology Inc.
+CC4740     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+6C-8F-4E   (hex)		Chongqing Yipingfang Technology Co., Ltd.
+6C8F4E     (base 16)		Chongqing Yipingfang Technology Co., Ltd.
+				No. 1-10, Tieshan Road, Biquan Street, Bishan District, Chongqing
+				ChongQing    402760
+				CN
+
+E0-1F-FC   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+E01FFC     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+88-25-08   (hex)		Meta Platforms Technologies, LLC
+882508     (base 16)		Meta Platforms Technologies, LLC
+				1601 Willow Rd
+				Menlo Park  CA  94025
+				US
+
+6C-03-70   (hex)		Extreme Networks, Inc.
+6C0370     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+9C-65-FA   (hex)		AcSiP
+9C65FA     (base 16)		AcSiP
+				3F., No. 246, Bo'ai St., Shulin Dist.,
+				New Taipei    23805
+				TW
+
+A8-C5-6F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A8C56F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+AC-7A-94   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+AC7A94     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+04-DA-28   (hex)		Chongqing Zhouhai Intelligent Technology Co., Ltd
+04DA28     (base 16)		Chongqing Zhouhai Intelligent Technology Co., Ltd
+				3rd Floor, Building A, ICC Industrial Park, Kaicheng Second Road, Hangcheng Street, Baoan District, Shenzhen City
+				shenzhen    518110
+				CN
+
+0C-01-4B   (hex)		zte corporation
+0C014B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+34-AF-A3   (hex)		Recogni Inc
+34AFA3     (base 16)		Recogni Inc
+				2590 N 1ST STSuite 320
+				San Jose  CA  95131
+				US
+
+D8-7A-3B   (hex)		Silicon Laboratories
+D87A3B     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+98-8C-B3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+988CB3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+DC-9E-AB   (hex)		Chongqing Yipingfang Technology Co., Ltd.
+DC9EAB     (base 16)		Chongqing Yipingfang Technology Co., Ltd.
+				No. 1-10, Tieshan Road, Biquan Street, Bishan District, Chongqing
+				ChongQing    402760
+				CN
+
+74-D6-E5   (hex)		Huawei Device Co., Ltd.
+74D6E5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-A4-17   (hex)		Shenzhen Belon Technology CO.,LTD
+14A417     (base 16)		Shenzhen Belon Technology CO.,LTD
+				Tsinghua Information
+				Shenzhen  Guangdong  518052
+				CN
+
+48-91-D5   (hex)		Cisco Systems, Inc
+4891D5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-F5-97   (hex)		Maasiv, LLC
+20F597     (base 16)		Maasiv, LLC
+				4939 W. Ray Road, Suite 4-200
+				Chandler  AZ  85226
+				US
+
+48-9E-CB   (hex)		Hewlett Packard Enterprise
+489ECB     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville    95747
+				US
+
+90-2A-EE   (hex)		Xiaomi Communications Co Ltd
+902AEE     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+D8-E3-5E   (hex)		LG Innotek
+D8E35E     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+78-68-29   (hex)		eero inc.
+786829     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+F4-D9-C6   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+F4D9C6     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+3C-0C-DB   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+3C0CDB     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				18F, HUAYANG TOWER,YANDAYI ROAD
+				Huizhou  Guangdong  516007
+				CN
+
+60-48-9C   (hex)		YIPPEE ELECTRONICS CO.,LIMITED
+60489C     (base 16)		YIPPEE ELECTRONICS CO.,LIMITED
+				19H MAXGRAND PLAZA NO.3 TAI YAU STREET SAN PO KONG KL
+				Kowloon    999077
+				CN
+
+D8-47-8F   (hex)		Microchip Technology Inc.
+D8478F     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+24-90-38   (hex)		Universal Biosensors Pty Ltd
+249038     (base 16)		Universal Biosensors Pty Ltd
+				1 Corporate Ave
+				Rowville  Victoria  3178
+				AU
+
+F8-ED-AE   (hex)		MOBIWIRE MOBILES(NINGBO) CO.,LTD
+F8EDAE     (base 16)		MOBIWIRE MOBILES(NINGBO) CO.,LTD
+				Buliding B,Bird Indusrtial Park No.999 Dacheng Road,Fenghua Zhejiang,China
+				NingBo  ZheJiang  315500
+				CN
+
+14-C3-5E   (hex)		FibRSol Global Network Limited
+14C35E     (base 16)		FibRSol Global Network Limited
+				17, Deep Vihar, Vikas Nagar, Near Durga Mata Mandir, Uttam Nagar New Delhi
+				New Delhi  New Delhi  110059
+				IN
+
+40-FA-FE   (hex)		Motorola Mobility LLC, a Lenovo Company
+40FAFE     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+20-1C-3A   (hex)		Nintendo Co.,Ltd
+201C3A     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-E6-0E   (hex)		Extreme Networks, Inc.
+00E60E     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+88-08-94   (hex)		Skullcandy
+880894     (base 16)		Skullcandy
+				1441 Ute blvd.
+				Park City    84098
+				US
+
+28-BE-F3   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+28BEF3     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+E0-CB-19   (hex)		Nokia
+E0CB19     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+94-98-8F   (hex)		Sagemcom Broadband SAS
+94988F     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+F0-7B-65   (hex)		Sagemcom Broadband SAS
+F07B65     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+94-DF-34   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94DF34     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-30-AF   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+7430AF     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+24-E4-CE   (hex)		Kaonmedia CO., LTD.
+24E4CE     (base 16)		Kaonmedia CO., LTD.
+				884-3, Seongnam-daero, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13517
+				KR
+
+B0-21-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B0216F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-5A-3E   (hex)		Cisco Systems, Inc
+845A3E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E8-B5-D0   (hex)		Dell Inc.
+E8B5D0     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+08-92-04   (hex)		Dell Inc.
+089204     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+68-85-A4   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+6885A4     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+B4-56-FA   (hex)		IOPSYS Software Solutions
+B456FA     (base 16)		IOPSYS Software Solutions
+				Krukmakargatan 21
+				Stockholm  Stockholm  118 51
+				SE
+
+68-F6-3B   (hex)		Amazon Technologies Inc.
+68F63B     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+80-C4-5D   (hex)		IPG Laser GmbH
+80C45D     (base 16)		IPG Laser GmbH
+				Carl-Benz-Strasse 28
+				Burbach    57299
+				DE
+
+68-EC-8A   (hex)		IKEA of Sweden AB
+68EC8A     (base 16)		IKEA of Sweden AB
+				Box 72
+				Älmhult    343 81
+				SE
+
+E8-F8-D0   (hex)		Nokia Shanghai Bell Co., Ltd.
+E8F8D0     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+40-8E-2C   (hex)		Microsoft Corporation
+408E2C     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+18-4A-53   (hex)		Apple, Inc.
+184A53     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-9F-41   (hex)		Apple, Inc.
+109F41     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-72-FE   (hex)		Apple, Inc.
+7072FE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-A7-BF   (hex)		EM Microelectronic
+90A7BF     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+10-55-E4   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+1055E4     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+04-CE-09   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+04CE09     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+40-67-9B   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+40679B     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+24-E8-E5   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+24E8E5     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+04-AB-08   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+04AB08     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+C0-68-CC   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+C068CC     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+80-EE-25   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+80EE25     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+84-88-E1   (hex)		Apple, Inc.
+8488E1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-BD-3A   (hex)		Apple, Inc.
+10BD3A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-C2-53   (hex)		Apple, Inc.
+2CC253     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-3C-1D   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+903C1D     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+BC-F4-99   (hex)		Rockwell Automation
+BCF499     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+8C-F3-E7   (hex)		solidotech
+8CF3E7     (base 16)		solidotech
+				No.1 Dongji Avenue, Jiangning District, Nanjing, Jiangsu Province, China
+				Nanjing  Jiangsu Province  211153
+				CN
+
+D4-52-C7   (hex)		Beijing L&S Lancom Platform Tech. Co., Ltd.
+D452C7     (base 16)		Beijing L&S Lancom Platform Tech. Co., Ltd.
+				901,floor 9, jelly loft, building 28, yard 9, Huinan Road, Changping District.
+				Beijing    102208
+				CN
+
+D4-E9-5E   (hex)		Texas Instruments
+D4E95E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+10-15-C1   (hex)		Zhanzuo (Beijing) Technology Co., Ltd.
+1015C1     (base 16)		Zhanzuo (Beijing) Technology Co., Ltd.
+				Room 313-2511, 3rd Floor, Shanshui Building, No. 3, Gulou East Street, Miyun District
+				Beijing    101500
+				CN
+
+F8-D0-27   (hex)		Seiko Epson Corporation
+F8D027     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+5C-66-6C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+5C666C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+4C-4B-F9   (hex)		IEEE Registration Authority
+4C4BF9     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+1C-EA-0B   (hex)		Edgecore Networks Corporation
+1CEA0B     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+44-EF-BF   (hex)		China Dragon Technology Limited
+44EFBF     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+B8-1F-5E   (hex)		Apption Labs Limited
+B81F5E     (base 16)		Apption Labs Limited
+				7-8 Westbridge Close
+				Leicester    LE3 5LW
+				GB
+
+D8-12-65   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+D81265     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+4C-B4-4A   (hex)		NANOWAVE Technologies Inc.
+4CB44A     (base 16)		NANOWAVE Technologies Inc.
+				425 Horner Avenue
+				Etobicoke  Ontario  M8W 4W3
+				CA
+
+04-8C-9A   (hex)		Huawei Device Co., Ltd.
+048C9A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+EC-3C-BB   (hex)		Huawei Device Co., Ltd.
+EC3CBB     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+8C-3A-7E   (hex)		Universal Electronics, Inc.
+8C3A7E     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+70-44-1C   (hex)		SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
+70441C     (base 16)		SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
+				7006 Caitian Rd., Futian Dist. 
+				Shen Zhen  Guang Dong  518035
+				CN
+
+B4-7C-59   (hex)		Jiangsu Hengxin Technology Co.,Ltd.
+B47C59     (base 16)		Jiangsu Hengxin Technology Co.,Ltd.
+				No.138 Taodu Road,Yixing city,Jiangsu Province,China
+				Yixing  Jiangsu  214200
+				CN
+
+30-0D-9E   (hex)		Ruijie Networks Co.,LTD
+300D9E     (base 16)		Ruijie Networks Co.,LTD
+				20# Building,Star-net Science Plaza,Juyuanzhou, 618 Jinshan Road
+				Fuzhou  Fujian  350002
+				CN
+
+EC-FA-5C   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+ECFA5C     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+F8-B4-6A   (hex)		Hewlett Packard
+F8B46A     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+BC-B0-E7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BCB0E7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-34-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5434EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-D5-A8   (hex)		ITEL MOBILE LIMITED
+88D5A8     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+20-85-93   (hex)		IEEE Registration Authority
+208593     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+AC-E3-42   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ACE342     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-17-C8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9017C8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-92-2A   (hex)		DBG HOLDINGS LIMITED
+E4922A     (base 16)		DBG HOLDINGS LIMITED
+				UNIT D, 6/F., UNISON INDUSTRIAL CENTRE, 27-31 AUPUI WAN STREET, FOTAN, N.T.
+				Hong Kong    999077
+				HK
+
+2C-64-1F   (hex)		Vizio, Inc
+2C641F     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+20-77-59   (hex)		OPTICAL NETWORK VIDEO TECHNOLOGIES (SHENZHEN) CO., LTD.
+207759     (base 16)		OPTICAL NETWORK VIDEO TECHNOLOGIES (SHENZHEN) CO., LTD.
+				The 4-6th Floor, No. 59, HuaNing Road, Xinwei Community, Dalang Street, Longhua District
+				Shenzhen    518000
+				CN
+
+54-E7-D5   (hex)		Sun Cupid Technology (HK) LTD
+54E7D5     (base 16)		Sun Cupid Technology (HK) LTD
+				Room 1201-3, 12/F., Tower 6
+				Tsim Sha Tsui    
+				HK
+
+18-90-88   (hex)		eero inc.
+189088     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+4C-56-DF   (hex)		Targus US LLC
+4C56DF     (base 16)		Targus US LLC
+				1211 North Miller Street
+				Anaheim  CA  92806
+				US
+
+24-15-10   (hex)		IEEE Registration Authority
+241510     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+6C-4D-51   (hex)		Shenzhen Ceres Technology Co., Ltd.
+6C4D51     (base 16)		Shenzhen Ceres Technology Co., Ltd.
+				#601, Fl6, Bldg F, No.1008  Yangguang Community, Xili, Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+88-9D-98   (hex)		Allied-telesisK.K.
+889D98     (base 16)		Allied-telesisK.K.
+				7-21-11 Nishi-Gotannda
+				Shinagawa-ku  Tokyo  141-0031
+				JP
+
+DC-F8-B9   (hex)		zte corporation
+DCF8B9     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+18-BF-1C   (hex)		Jiangsu Huitong Group Co.,Ltd.
+18BF1C     (base 16)		Jiangsu Huitong Group Co.,Ltd.
+				No. 24, Block 2, Taohuawu New District
+				Zhenjiang  Jiangsu  212003
+				CN
+
+AC-DE-48   (hex)		Private
+ACDE48     (base 16)		Private
+
+00-50-C7   (hex)		Private
+0050C7     (base 16)		Private
+
+48-01-C5   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+4801C5     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+B4-EE-25   (hex)		Shenzhen Belon Technology CO.,LTD
+B4EE25     (base 16)		Shenzhen Belon Technology CO.,LTD
+				Tsinghua Information
+				Shenzhen  Guangdong  518052
+				CN
+
+C8-2B-96   (hex)		Espressif Inc.
+C82B96     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+98-52-3D   (hex)		Sunitec Enterprise Co.,Ltd
+98523D     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+D0-15-A6   (hex)		Aruba, a Hewlett Packard Enterprise Company
+D015A6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+00-01-63   (hex)		Cisco Systems, Inc
+000163     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-00-84   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E00084     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-A8-9C   (hex)		Creatz inc.
+2CA89C     (base 16)		Creatz inc.
+				16, Deogyeong-daero 1556beon-gil, Yeongtong-gu
+				Suwon-si,  Gyeonggi-do,   16690
+				KR
+
+4C-DC-0D   (hex)		Coral Telecom Limited
+4CDC0D     (base 16)		Coral Telecom Limited
+				E-2, Sector 63
+				Noida  Uttar Pradesh  201301
+				IN
+
+00-4E-01   (hex)		Dell Inc.
+004E01     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+C4-E1-A1   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C4E1A1     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+AC-C3-58   (hex)		Continental Automotive Czech Republic s.r.o.
+ACC358     (base 16)		Continental Automotive Czech Republic s.r.o.
+				Průmyslová 1851
+				Brandýs nad Labem    250 01
+				CZ
+
+3C-EC-EF   (hex)		Super Micro Computer, Inc.
+3CECEF     (base 16)		Super Micro Computer, Inc.
+				980 Rock Ave
+				San Jose  CA  95131
+				US
+
+18-55-E3   (hex)		Apple, Inc.
+1855E3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-50-EB   (hex)		Apple, Inc.
+E450EB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-64-40   (hex)		Apple, Inc.
+886440     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-70-C0   (hex)		Apple, Inc.
+6070C0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-C3-71   (hex)		Apple, Inc.
+F0C371     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-FF-0A   (hex)		Wistron Neweb Corporation
+64FF0A     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+F0-99-19   (hex)		Garmin International
+F09919     (base 16)		Garmin International
+				1200 E. 151st St
+				Olathe  KS  66062
+				US
+
+00-00-DE   (hex)		CETIA
+0000DE     (base 16)		CETIA
+				150 RUE BERTHELOT
+				    
+				FR
+
+F4-3E-66   (hex)		Bee Computing (HK) Limited
+F43E66     (base 16)		Bee Computing (HK) Limited
+				Room 1902, 19/F, Lee Garden One 33 Hysan Avenue, Causeway Bay
+				Hong Kong    100043
+				HK
+
+DC-39-6F   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+DC396F     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+B4-C4-76   (hex)		Wuhan Maritime Communication Research Institute
+B4C476     (base 16)		Wuhan Maritime Communication Research Institute
+				No.312 Luoyu road, Hongshan District
+				Wuhan  Hubei  430079
+				CN
+
+68-34-89   (hex)		LEA Professional
+683489     (base 16)		LEA Professional
+				635 S. Lafayette Blvd
+				South Bend  IN  46601
+				US
+
+B4-6C-47   (hex)		Panasonic Appliances Company
+B46C47     (base 16)		Panasonic Appliances Company
+				2-3-1-2 Noji-higashi
+				Kusatsu City  Shiga  525-8555
+				JP
+
+44-42-2F   (hex)		TESTOP CO.,LTD.
+44422F     (base 16)		TESTOP CO.,LTD.
+				808RM Hanshin IT Tower ,272, Digital-ro
+				Guro-gu  Seoul  08389
+				KR
+
+54-9C-27   (hex)		Plasma Cloud Limited
+549C27     (base 16)		Plasma Cloud Limited
+				5/F, Yat Chau Building, 262 Des Voeux Road Central
+				Hong Kong    NA
+				HK
+
+D0-4E-50   (hex)		Mobiwire Mobiles (NingBo) Co., LTD
+D04E50     (base 16)		Mobiwire Mobiles (NingBo) Co., LTD
+				No.999 Dacheng East Road, Fenghua District, Ningbo City , Zhejiang Province, PRC
+				Ningbo  Zhejiang  315500
+				CN
+
+94-BF-80   (hex)		zte corporation
+94BF80     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+98-7A-14   (hex)		Microsoft Corporation
+987A14     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+C8-3D-DC   (hex)		Xiaomi Communications Co Ltd
+C83DDC     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+9C-3A-9A   (hex)		Shenzhen Sundray Technologies Company Limited
+9C3A9A     (base 16)		Shenzhen Sundray Technologies Company Limited
+				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
+				Shenzhen  Guangdong  518057
+				CN
+
+B0-B5-E8   (hex)		Ruroc LTD
+B0B5E8     (base 16)		Ruroc LTD
+				Unit 2, Barnett Way, Barnwood Estate
+				Gloucester    GL4 3RT
+				GB
+
+04-D5-90   (hex)		Fortinet, Inc.
+04D590     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale  null  94086
+				US
+
+54-15-89   (hex)		MCS Logic Inc.
+541589     (base 16)		MCS Logic Inc.
+				A-1701, Munjeong-dong, SK V1 GL Metro City, 128, Beobwon-ro, Songpa-gu, 
+				seoul  seoul  05854
+				KR
+
+84-57-33   (hex)		Microsoft Corporation
+845733     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND    98052
+				US
+
+00-24-23   (hex)		AzureWave Technologies (Shanghai) Inc.
+002423     (base 16)		AzureWave Technologies (Shanghai) Inc.
+				NO. 8, LANE 66, CHENGBAO RD.
+				SHANGHAI    201801
+				CN
+
+8C-59-3C   (hex)		IEEE Registration Authority
+8C593C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+60-29-D5   (hex)		DAVOLINK Inc.
+6029D5     (base 16)		DAVOLINK Inc.
+				112, Beolmal-ro
+				Dongan-gu, Anyang-si  Gyeonggi-do  14057
+				KR
+
+50-97-44   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+509744     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+58-F3-9C   (hex)		Cisco Systems, Inc
+58F39C     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+C4-41-1E   (hex)		Belkin International Inc.
+C4411E     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista  null  90094
+				US
+
+00-AD-63   (hex)		Dedicated Micros Malta LTD
+00AD63     (base 16)		Dedicated Micros Malta LTD
+				Blb017, Qasam Industrijali Bulebel
+				ZEJTUN    ZTN 3000
+				MT
+
+E4-15-F6   (hex)		Texas Instruments
+E415F6     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+AC-42-28   (hex)		Parta Networks
+AC4228     (base 16)		Parta Networks
+				Teknopark Izmir No:38
+				URLA  IZMIR  35433
+				TR
+
+F4-1D-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F41D6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+7C-EC-9B   (hex)		Fuzhou Teraway Information Technology Co.,Ltd
+7CEC9B     (base 16)		Fuzhou Teraway Information Technology Co.,Ltd
+				2F, Building 5#, No. 59, Yangqi Road, Cangshan District
+				Fuzhou  Fujian  350000
+				CN
+
+CC-90-70   (hex)		Cisco Systems, Inc
+CC9070     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+28-41-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2841C6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+38-01-18   (hex)		ULVAC,Inc.
+380118     (base 16)		ULVAC,Inc.
+				2500 Hagizono
+				Chigasaki  Kanagawa  253-8543
+				JP
+
+14-AD-CA   (hex)		China Mobile Iot Limited company
+14ADCA     (base 16)		China Mobile Iot Limited company
+				No. 8 Yangliu North Road, Yubei District, Chongqing, China
+				Chong Qing  Chong Qing  401120
+				CN
+
+80-91-33   (hex)		AzureWave Technology Inc.
+809133     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+B4-F5-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B4F58E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-8F-C1   (hex)		DEEPTRACK S.L.U.
+C48FC1     (base 16)		DEEPTRACK S.L.U.
+				Avenida de Barajas 32, Parque E. Omega, Edificio A
+				Alcobendas    28100
+				ES
+
+F8-23-87   (hex)		Shenzhen Horn Audio Co.,Ltd.
+F82387     (base 16)		Shenzhen Horn Audio Co.,Ltd.
+				NO.6 4th GuiHua road,PingShan,
+				Shenzhen  Guangdong  518118
+				CN
+
+E8-28-C1   (hex)		Eltex Enterprise Ltd.
+E828C1     (base 16)		Eltex Enterprise Ltd.
+				Okruzhnaya st. 29v
+				Novosibirsk    630020
+				RU
+
+78-D3-47   (hex)		Ericsson AB
+78D347     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+A4-A1-79   (hex)		Nanjing dianyan electric power automation co. LTD
+A4A179     (base 16)		Nanjing dianyan electric power automation co. LTD
+				No. 29, liuzhou north road, pukou district
+				Nanjing  Jiangsu  210031
+				CN
+
+68-DB-67   (hex)		Nantong Coship Electronics Co., Ltd.
+68DB67     (base 16)		Nantong Coship Electronics Co., Ltd.
+				No.188 Xinsheng Road
+				Nantong    226000
+				US
+
+18-19-D6   (hex)		Samsung Electronics Co.,Ltd
+1819D6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-98-DF   (hex)		Motorola Mobility LLC, a Lenovo Company
+BC98DF     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+70-FC-8F   (hex)		FREEBOX SAS
+70FC8F     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+50-1B-32   (hex)		Taicang T&W Electronics
+501B32     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+98-0D-67   (hex)		Zyxel Communications Corporation
+980D67     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+00-02-D8   (hex)		BRECIS Communications Corporation
+0002D8     (base 16)		BRECIS Communications Corporation
+				2025 Gateway Place, Suite 132
+				San Jose  CA  95110
+				US
+
+B0-A6-F5   (hex)		Xaptum, Inc.
+B0A6F5     (base 16)		Xaptum, Inc.
+				350 W Ontario ST FL 4
+				Chicago  IL  60654
+				US
+
+AC-F5-E6   (hex)		Cisco Systems, Inc
+ACF5E6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+DC-B0-82   (hex)		Nokia
+DCB082     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+F8-C3-97   (hex)		NZXT Corp. Ltd.
+F8C397     (base 16)		NZXT Corp. Ltd.
+				13164 E. Temple Ave.
+				City of Industry  California  91746
+				US
+
+70-DD-A8   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+70DDA8     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+4C-6F-9C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4C6F9C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+78-2C-29   (hex)		New H3C Technologies Co., Ltd
+782C29     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+BC-9F-E4   (hex)		Aruba, a Hewlett Packard Enterprise Company
+BC9FE4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+70-2E-80   (hex)		DIEHL Connectivity Solutions
+702E80     (base 16)		DIEHL Connectivity Solutions
+				Stephanstraße 49
+				Nürnberg  Bayern  90478
+				DE
+
+AC-A4-6E   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ACA46E     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+C8-B4-22   (hex)		ASKEY COMPUTER CORP
+C8B422     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+94-EE-9F   (hex)		HMD Global Oy
+94EE9F     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+DC-2A-A1   (hex)		MedHab LLC
+DC2AA1     (base 16)		MedHab LLC
+				3501 North US Highway 67
+				San Angelo  TX  76905
+				US
+
+E4-F3-E8   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+E4F3E8     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen   Guangdong  518000
+				CN
+
+F4-32-3D   (hex)		Sichuan tianyi kanghe communications co., LTD
+F4323D     (base 16)		Sichuan tianyi kanghe communications co., LTD
+				No.198, section 1, xueshan avenue, jinyuan town, dayi county, sichuan province
+				chengdu  sichuan  611330
+				CN
+
+F8-B7-97   (hex)		NEC Platforms, Ltd.
+F8B797     (base 16)		NEC Platforms, Ltd.
+				2-3 Kandatsukasamachi
+				Chiyodaku  Tokyo  101-8532
+				JP
+
+B0-AA-D2   (hex)		Sichuan tianyi kanghe communications co., LTD
+B0AAD2     (base 16)		Sichuan tianyi kanghe communications co., LTD
+				No.198, section 1, xueshan avenue, jinyuan town, dayi county, sichuan province
+				chengdu  sichuan  611330
+				CN
+
+10-93-97   (hex)		ARRIS Group, Inc.
+109397     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+50-75-F1   (hex)		ARRIS Group, Inc.
+5075F1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+C4-65-16   (hex)		Hewlett Packard
+C46516     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+E4-1E-0A   (hex)		IEEE Registration Authority
+E41E0A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+CC-A1-2B   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+CCA12B     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+				10F, TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan District
+				Shenzhen  Guangdong  518052
+				CN
+
+AC-00-D0   (hex)		zte corporation
+AC00D0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E8-C4-17   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E8C417     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+00-1E-A3   (hex)		Nokia Danmark A/S
+001EA3     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+38-F3-2E   (hex)		Skullcandy
+38F32E     (base 16)		Skullcandy
+				6301 N. LANDMARK DRIVE
+				Park City    84098
+				US
+
+98-1E-19   (hex)		Sagemcom Broadband SAS
+981E19     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+84-B8-66   (hex)		Beijing XiaoLu technology co. LTD
+84B866     (base 16)		Beijing XiaoLu technology co. LTD
+				Room 002, floor 2, building 1, yard 4, BeiTuCheng East Road, ChaoYang district, Beijing
+				Beijing    100102
+				CN
+
+18-BC-5A   (hex)		Zhejiang Tmall Technology Co., Ltd.
+18BC5A     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, 
+				Shenzhen  Guangdong  518000
+				CN
+
+C4-C1-38   (hex)		OWLink Technology Inc
+C4C138     (base 16)		OWLink Technology Inc
+				760 Roosevelt
+				Irvine  CA  92620
+				US
+
+AC-37-C9   (hex)		RAID Incorporated
+AC37C9     (base 16)		RAID Incorporated
+				200 Brickstone Square
+				Andover  MA  01810
+				US
+
+20-58-69   (hex)		Ruckus Wireless
+205869     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+CC-37-AB   (hex)		Edgecore Networks Corporation
+CC37AB     (base 16)		Edgecore Networks Corporation
+				1 Creation Road 3.
+				Hsinchu  Hsinchu  30077
+				TW
+
+14-22-DB   (hex)		eero inc.
+1422DB     (base 16)		eero inc.
+				230 9th St.
+				San Francisco  CA  94103
+				US
+
+C8-63-14   (hex)		IEEE Registration Authority
+C86314     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+24-31-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+243154     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-58-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C58E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+70-CD-91   (hex)		TERACOM TELEMATICA S.A
+70CD91     (base 16)		TERACOM TELEMATICA S.A
+				RUA AMERICA,1000
+				Eldorado do Sul  Rio Grande do Sul  92990-000
+				BR
+
+2C-18-75   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+2C1875     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+D0-6E-DE   (hex)		Sagemcom Broadband SAS
+D06EDE     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+18-39-9C   (hex)		Skorpios Technologies
+18399C     (base 16)		Skorpios Technologies
+				7401 Snaproll St NE
+				Albuquerque  NM  87109
+				US
+
+94-C2-BD   (hex)		TECNOBIT
+94C2BD     (base 16)		TECNOBIT
+				C/ FUDRE, 18
+				VALDEPEÑAS  CIUDAD REAL  13300
+				ES
+
+48-83-B4   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4883B4     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+84-B8-B8   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+84B8B8     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+D0-41-C9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D041C9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E8-01-8D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E8018D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+10-A3-B8   (hex)		Iskratel d.o.o.
+10A3B8     (base 16)		Iskratel d.o.o.
+				Ljubljanska cesta 24a
+				Kranj    4000
+				SI
+
+E8-EC-A3   (hex)		Dongguan Liesheng Electronic Co.Ltd
+E8ECA3     (base 16)		Dongguan Liesheng Electronic Co.Ltd
+				13th Floor South Building, Gosun Science Park, Hongtu Rd
+				Dongguan  Dongguan  523073
+				CN
+
+08-A6-BC   (hex)		Amazon Technologies Inc.
+08A6BC     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+70-1E-68   (hex)		Hanna Instruments, Inc.
+701E68     (base 16)		Hanna Instruments, Inc.
+				584 Park East Dr.
+				Woonsocket  RI  02895
+				US
+
+1C-B3-E9   (hex)		 Shenzhen Zhongke United Communication Technology 
+1CB3E9     (base 16)		 Shenzhen Zhongke United Communication Technology 
+				6C jiajiahao commercial building, Shennan avenue
+				Shenzhen  Guangdong  518000
+				CN
+
+8C-96-5F   (hex)		Shandong Zhongan Technology Co., Ltd.
+8C965F     (base 16)		Shandong Zhongan Technology Co., Ltd.
+				North of Kejia Road, East District, Jinan High-tech Zone
+				Jinan  Shandong  250100
+				CN
+
+C0-07-4A   (hex)		Brita GmbH
+C0074A     (base 16)		Brita GmbH
+				Heinrich-Hertz-Str. 4
+				Taunusstein    65232
+				DE
+
+E8-B2-FE   (hex)		HUMAX Co., Ltd.
+E8B2FE     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+80-FD-7A   (hex)		BLU Products Inc
+80FD7A     (base 16)		BLU Products Inc
+				10814 NW 33rd Street
+				Miami  FL  33172
+				US
+
+00-17-FA   (hex)		Microsoft Corporation
+0017FA     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				Redmond  Washington  98052-6399
+				US
+
+94-16-25   (hex)		Apple, Inc.
+941625     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-3B-30   (hex)		duagon AG
+543B30     (base 16)		duagon AG
+				Riedstrasse 12
+				Zürich  Dietikon  8953
+				CH
+
+B0-BB-8B   (hex)		WAVETEL TECHNOLOGY LIMITED
+B0BB8B     (base 16)		WAVETEL TECHNOLOGY LIMITED
+				ROOM 1611B, 16/F, HO KING COMMERCIAL CENTRE, 2-16 FAYUEN STREET, MONGKOK, KOWLOON
+				HONGKONG    999077
+				CN
+
+34-A8-EB   (hex)		Apple, Inc.
+34A8EB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-BF-C4   (hex)		Ruckus Wireless
+94BFC4     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+A4-83-E7   (hex)		Apple, Inc.
+A483E7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-AF-E7   (hex)		Apple, Inc.
+F4AFE7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-88-FD   (hex)		Apple, Inc.
+AC88FD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-3E-7C   (hex)		LeiShen Intelligent  System Co.Ltd
+503E7C     (base 16)		LeiShen Intelligent  System Co.Ltd
+				4th Floor,No.1 Commercial Building,Cultural Center,Tanggang Road,Tanggang Community,Shajing Street,Baoan District
+				Shenzhen  Guangdong  518104
+				CN
+
+24-58-6E   (hex)		zte corporation
+24586E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+B4-A3-05   (hex)		XIAMEN YAXON NETWORK CO., LTD.
+B4A305     (base 16)		XIAMEN YAXON NETWORK CO., LTD.
+				46#,Guanri Road, Software Park II
+				Xiamen  Fujian  361008
+				CN
+
+80-3E-48   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+803E48     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+24-3F-30   (hex)		Oxygen Broadband s.a.
+243F30     (base 16)		Oxygen Broadband s.a.
+				2 Messogeion ave., Athens Tower
+				Athens  Attiki  11527
+				GR
+
+3C-91-80   (hex)		Liteon Technology Corporation
+3C9180     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+20-32-6C   (hex)		Samsung Electronics Co.,Ltd
+20326C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-89-F1   (hex)		Samsung Electronics Co.,Ltd
+6489F1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+20-34-FB   (hex)		Xiaomi Communications Co Ltd
+2034FB     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+A8-9C-ED   (hex)		Xiaomi Communications Co Ltd
+A89CED     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+6C-A6-04   (hex)		ARRIS Group, Inc.
+6CA604     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+5C-F9-DD   (hex)		Dell Inc.
+5CF9DD     (base 16)		Dell Inc.
+				One Dell way
+				Round Rock    78682
+				US
+
+D0-EC-35   (hex)		Cisco Systems, Inc
+D0EC35     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-CF-4F   (hex)		Zyxel Communications Corporation
+BCCF4F     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+C0-10-B1   (hex)		HMD Global Oy
+C010B1     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+90-89-5F   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+90895F     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+48-D8-45   (hex)		Shenzhen Mainuoke Electronics Co., Ltd
+48D845     (base 16)		Shenzhen Mainuoke Electronics Co., Ltd
+				9th Floor, Hengtemei Building, Buji
+				Shenzhen  Guangdong  518000
+				CN
+
+0C-E0-41   (hex)		iDruide
+0CE041     (base 16)		iDruide
+				19 Rue de la Turbie
+				MONACO    98000
+				MC
+
+B8-8F-B4   (hex)		JABIL CIRCUIT ITALIA S.R.L
+B88FB4     (base 16)		JABIL CIRCUIT ITALIA S.R.L
+				via andrea appiani 12
+				milano    20121
+				IT
+
+00-52-C2   (hex)		peiker acustic GmbH
+0052C2     (base 16)		peiker acustic GmbH
+				Max-Planck-Strasse 28-32
+				Friedrichsdorf    61381
+				DE
+
+8C-53-D2   (hex)		China Mobile Group Device Co.,Ltd.
+8C53D2     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+D4-53-83   (hex)		Murata Manufacturing Co., Ltd.
+D45383     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+A0-42-46   (hex)		IT Telecom Co., Ltd.
+A04246     (base 16)		IT Telecom Co., Ltd.
+				517 TheOvalley 555-9 Hogye-dong, Dong An-gu
+				Anyang-si   Gyeonggi-do  14117
+				KR
+
+0C-F4-75   (hex)		Zliide Technologies ApS
+0CF475     (base 16)		Zliide Technologies ApS
+				Sverigesgade 6
+				Aarhus    8000
+				DK
+
+68-FF-7B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+68FF7B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+80-8F-1D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+808F1D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-12-4E   (hex)		XAC AUTOMATION CORP.
+00124E     (base 16)		XAC AUTOMATION CORP.
+				4F, 30 Industry E. Road IX
+				Hsin-Chu    300
+				US
+
+88-E0-34   (hex)		Shinwa industries(China) ltd.
+88E034     (base 16)		Shinwa industries(China) ltd.
+				No.26,Huifeng West 2 Road,Zhongkai High-tech Zone
+				Huizhou  Guangdong  516006
+				CN
+
+48-BD-0E   (hex)		Quanta Storage Inc.
+48BD0E     (base 16)		Quanta Storage Inc.
+				3F. No.188, Wenhua 2nd Rd
+				Taoyuan City  Guishan District  33383
+				TW
+
+00-0F-69   (hex)		SEW Eurodrive GmbH & Co. KG
+000F69     (base 16)		SEW Eurodrive GmbH & Co. KG
+				Ernst Blickle Str. 42
+				Bruchsal    76646
+				DE
+
+E4-58-E7   (hex)		Samsung Electronics Co.,Ltd
+E458E7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-10-4A   (hex)		The Parvus Corporation
+00104A     (base 16)		The Parvus Corporation
+				3222 S Washington St.
+				Salt Lake City  UT  84115
+				US
+
+D0-58-C0   (hex)		Qingdao Haier Multimedia Limited. 
+D058C0     (base 16)		Qingdao Haier Multimedia Limited. 
+				Pingban Building, Haier Industry Park, Laoshan District,
+				Qingdao  Shandong  266103
+				CN
+
+48-C3-B0   (hex)		Pharos Co.Ltd
+48C3B0     (base 16)		Pharos Co.Ltd
+				503 Ogong-ro 144  Deokjin-gu
+				Jeonju-si     54873
+				KR
+
+DC-58-BC   (hex)		Thomas-Krenn.AG
+DC58BC     (base 16)		Thomas-Krenn.AG
+				Speltenbach-Steinaecker 1
+				Freyung    94078
+				DE
+
+00-10-25   (hex)		Grayhill, Inc
+001025     (base 16)		Grayhill, Inc
+				561 Hillgrove Ave
+				LaGrange  IL  60525
+				US
+
+38-21-C7   (hex)		Aruba, a Hewlett Packard Enterprise Company
+3821C7     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+A4-5F-9B   (hex)		Nexell
+A45F9B     (base 16)		Nexell
+				12F, 31 Hwangsaeul-ro 258 beon-gil, Bundang-gu
+				Seongnam-si, Gyeonggi-do    13595
+				KR
+
+70-EA-1A   (hex)		Cisco Systems, Inc
+70EA1A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+80-8A-8B   (hex)		vivo Mobile Communication Co., Ltd.
+808A8B     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+98-44-B6   (hex)		INFRANOR SAS
+9844B6     (base 16)		INFRANOR SAS
+				Avenue Jean Moulin
+				LOURDES    65100
+				FR
+
+38-83-9A   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+38839A     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+DC-67-23   (hex)		barox Kommunikation GmbH
+DC6723     (base 16)		barox Kommunikation GmbH
+				Marie-Curie-Strasse 8
+				Lörrach    DE-79539
+				DE
+
+94-B4-0F   (hex)		Aruba, a Hewlett Packard Enterprise Company
+94B40F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+00-1A-1E   (hex)		Aruba, a Hewlett Packard Enterprise Company
+001A1E     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+00-24-6C   (hex)		Aruba, a Hewlett Packard Enterprise Company
+00246C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+20-1B-C9   (hex)		Juniper Networks
+201BC9     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C8-F6-C8   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+C8F6C8     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+1C-3B-8F   (hex)		Selve GmbH & Co. KG
+1C3B8F     (base 16)		Selve GmbH & Co. KG
+				Werdohler Landstraße 286
+				Lüdenscheid    58513
+				DE
+
+E4-E7-49   (hex)		Hewlett Packard
+E4E749     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+EC-C5-7F   (hex)		Suzhou Pairlink Network Technology
+ECC57F     (base 16)		Suzhou Pairlink Network Technology
+				Room304, Building 4, No.209, Zhu Yuan Road, Suzhou new district
+				Suzhou  Jiangsu  215011
+				CN
+
+38-C2-BA   (hex)		CCTV NEOTECH
+38C2BA     (base 16)		CCTV NEOTECH
+				68, Digital-ro 9-gil, Geumcheon-gu
+				Seoul    ks013
+				KR
+
+A0-F9-B7   (hex)		Ademco Smart Homes Technology(Tianjin)Co.,Ltd.
+A0F9B7     (base 16)		Ademco Smart Homes Technology(Tianjin)Co.,Ltd.
+				No.156 Nanhai Road,TEDA, Jinbin Development Park , 21st Factory Building
+				Tianjin  Tianjin  300457
+				CN
+
+A8-3C-CB   (hex)		ROSSMA
+A83CCB     (base 16)		ROSSMA
+				 Malkova,12-108
+				PERM    614087
+				RU
+
+88-6F-D4   (hex)		Dell Inc.
+886FD4     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+CC-3F-EA   (hex)		BAE Systems, Inc
+CC3FEA     (base 16)		BAE Systems, Inc
+				1098 Clark St
+				Endicott  NY  13760
+				US
+
+4C-F2-BF   (hex)		Cambridge Industries(Group) Co.,Ltd.
+4CF2BF     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				22 Floor,Qilai Tower;889 Yishan Road
+				Shanghai    200233
+				CN
+
+CC-9E-A2   (hex)		Amazon Technologies Inc.
+CC9EA2     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno    89507
+				US
+
+AC-43-30   (hex)		Versa Networks
+AC4330     (base 16)		Versa Networks
+				6001 America center Drive, Suite 400
+				San Jose  CA  95070
+				US
+
+E8-5B-B7   (hex)		Ample Systems Inc.
+E85BB7     (base 16)		Ample Systems Inc.
+				11F-2, No. 95 Minquan Rd.
+				New Taipei City     231
+				TW
+
+94-67-7E   (hex)		Belden India Private Limited
+94677E     (base 16)		Belden India Private Limited
+				Plot No. D-228, Chakan MIDC Phase 2, 
+				Village Bhamboli, Taluka:Khed  Pune, Maharashtra  410 507
+				IN
+
+AC-57-75   (hex)		HMD Global Oy
+AC5775     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+D4-3A-2E   (hex)		SHENZHEN MTC CO LTD
+D43A2E     (base 16)		SHENZHEN MTC CO LTD
+				5th Floor, 3rd Building, SHENZHEN MTC Industrial Park, XiaLilang Rd, Nanwan Street, Long’gang District
+				Shenzhen  Guangdong  518100
+				CN
+
+50-AD-92   (hex)		NX Technologies
+50AD92     (base 16)		NX Technologies
+				5F(OS Building), 57, Daeril-2gil, Beomseo-eup
+				Ulsan    44922
+				KR
+
+00-32-17   (hex)		Cisco Systems, Inc
+003217     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+94-E0-D6   (hex)		China Dragon Technology Limited
+94E0D6     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+B4-A9-FC   (hex)		Quanta Computer Inc.
+B4A9FC     (base 16)		Quanta Computer Inc.
+				No. 211, Wen-Hwa 2nd Rd.,Kuei-Shan Dist.
+				Taoyuan City  Taiwan  33377
+				TW
+
+6C-A9-36   (hex)		DisplayLink (UK) Ltd
+6CA936     (base 16)		DisplayLink (UK) Ltd
+				140 Science Park, Milton road
+				Cambridge  Cambridgeshire  CB4 0GF
+				GB
+
+70-85-40   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+708540     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+08-F1-EA   (hex)		Hewlett Packard Enterprise
+08F1EA     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+F0-0D-F5   (hex)		ACOMA Medical Industry Co,. Ltd.
+F00DF5     (base 16)		ACOMA Medical Industry Co,. Ltd.
+				2-14-14 hongo
+				bunkyo-ku  Tokyo  113-0033
+				JP
+
+68-45-F1   (hex)		TOSHIBA CLIENT SOLUTIONS CO., LTD.
+6845F1     (base 16)		TOSHIBA CLIENT SOLUTIONS CO., LTD.
+				Tachihi Building No.2, 6-1-3, Sakae-Cho
+				Tachikawa-shi  Tokyo  190-0003
+				JP
+
+78-B2-13   (hex)		DWnet Technologies(Suzhou) Corporation
+78B213     (base 16)		DWnet Technologies(Suzhou) Corporation
+				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
+				Suzhou    21500
+				CN
+
+58-C2-32   (hex)		NEC Corporation
+58C232     (base 16)		NEC Corporation
+				1753, Shimonumabe, Nakahara-Ku, Kawasaki
+				Kanagawa    211-8666
+				JP
+
+38-1D-14   (hex)		Skydio Inc.
+381D14     (base 16)		Skydio Inc.
+				114 Hazel Ave
+				Redwood City  CA  94061
+				US
+
+7C-DB-98   (hex)		ASKEY COMPUTER CORP
+7CDB98     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+38-0B-3C   (hex)		Texas Instruments
+380B3C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+9C-8C-D8   (hex)		Hewlett Packard Enterprise
+9C8CD8     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+A4-8C-C0   (hex)		JLG Industries, Inc.
+A48CC0     (base 16)		JLG Industries, Inc.
+				13224 Fountainhead Plaza
+				Hagerstown  MD  21742
+				US
+
+3C-28-6D   (hex)		Google, Inc.
+3C286D     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+00-09-3A   (hex)		Molex CMS
+00093A     (base 16)		Molex CMS
+				5224 Katrine Avenue
+				Downers Grove  IL  60515
+				US
+
+04-F9-D9   (hex)		Speaker Electronic(Jiashan) Co.,Ltd
+04F9D9     (base 16)		Speaker Electronic(Jiashan) Co.,Ltd
+				No. 8 Development Zone Road, Huimin Sub-district
+				 Jiashan  Zhejiang  314112
+				CN
+
+DC-08-0F   (hex)		Apple, Inc.
+DC080F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-E9-4E   (hex)		Apple, Inc.
+F8E94E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-2C-E2   (hex)		Apple, Inc.
+EC2CE2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-BC-60   (hex)		Apple, Inc.
+40BC60     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-36-17   (hex)		Apple, Inc.
+E83617     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-64-8B   (hex)		Apple, Inc.
+9C648B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-42-62   (hex)		Apple, Inc.
+344262     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-D0-0D   (hex)		Apple, Inc.
+14D00D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-D2-11   (hex)		Eko Devices, Inc.
+88D211     (base 16)		Eko Devices, Inc.
+				2600 10th St Ste 260
+				Berkeley  CA  94710-2597
+				US
+
+B8-C2-27   (hex)		PSTec
+B8C227     (base 16)		PSTec
+				#80, Hwanggeum 3-ro 7beon-gil, Yangchon-eup
+				Gimpo-si  Gyeonggi-do  10048
+				KR
+
+74-F7-37   (hex)		KCE
+74F737     (base 16)		KCE
+				5F KCE B/D,34,Annam-ro 369beon-gil,Bupyoung-gu
+				Incheon    21312
+				KR
+
+48-A4-93   (hex)		TAIYO YUDEN CO.,LTD
+48A493     (base 16)		TAIYO YUDEN CO.,LTD
+				8-1, Sakae-cho
+				Takasaki-shi  Gunma  370-8522
+				JP
+
+E8-2C-6D   (hex)		SmartRG, Inc.
+E82C6D     (base 16)		SmartRG, Inc.
+				501 SE Columbia Shores Blvd
+				Vancouver  WA  98661
+				US
+
+48-E6-95   (hex)		Insigma Inc
+48E695     (base 16)		Insigma Inc
+				43490, Yukon Drive, Suite 102
+				Ashburn  VA  20147
+				US
+
+B4-79-C8   (hex)		Ruckus Wireless
+B479C8     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+B4-0B-78   (hex)		Brusa Elektronik AG
+B40B78     (base 16)		Brusa Elektronik AG
+				Neudorf 14
+				Sennwald  St. Gallen  9466
+				CH
+
+C0-3D-D9   (hex)		MitraStar Technology Corp.
+C03DD9     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+2C-AA-8E   (hex)		Wyze Labs Inc
+2CAA8E     (base 16)		Wyze Labs Inc
+				4030 Lake Washington Boulevard NE
+				Kirkland  WA  98033
+				US
+
+70-3A-51   (hex)		Xiaomi Communications Co Ltd
+703A51     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+DC-48-B2   (hex)		Baraja Pty. Ltd.
+DC48B2     (base 16)		Baraja Pty. Ltd.
+				36 Bradfield Road
+				West Lindfield  NSW  2070
+				AU
+
+18-1E-95   (hex)		AuVerte
+181E95     (base 16)		AuVerte
+				14 Riverview Road
+				Niantic  CT  06357
+				US
+
+0C-95-41   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+0C9541     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
+				SHEN ZHEN  GUANG DONG  518000
+				CN
+
+3C-37-86   (hex)		NETGEAR
+3C3786     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+48-35-2E   (hex)		Shenzhen Wolck Network Product Co.,LTD
+48352E     (base 16)		Shenzhen Wolck Network Product Co.,LTD
+				9# BuJi BanTian LongBi Industry Area
+				Shenzhen  Guangdong  518129
+				CN
+
+04-E5-98   (hex)		Xiaomi Communications Co Ltd
+04E598     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+B8-2C-A0   (hex)		Resideo
+B82CA0     (base 16)		Resideo
+				2 Corporate Center Dr.
+				Melville  NY  11747
+				US
+
+6C-C7-EC   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+6CC7EC     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+B0-33-A6   (hex)		Juniper Networks
+B033A6     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+D8-96-85   (hex)		GoPro
+D89685     (base 16)		GoPro
+				3000 Clearview Way
+				San Mateo  CA  94402
+				US
+
+C0-BD-C8   (hex)		Samsung Electronics Co.,Ltd
+C0BDC8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-7B-CE   (hex)		Samsung Electronics Co.,Ltd
+647BCE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-87-B3   (hex)		Samsung Electronics Co.,Ltd
+A887B3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+6C-00-6B   (hex)		Samsung Electronics Co.,Ltd
+6C006B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-10-60   (hex)		BILLIONTON SYSTEMS, INC.
+001060     (base 16)		BILLIONTON SYSTEMS, INC.
+				3F-1, NO. 8, LANE 99
+				HSIN-CHU    
+				TW
+
+C4-D4-89   (hex)		JiangSu Joyque Information Industry Co.,Ltd
+C4D489     (base 16)		JiangSu Joyque Information Industry Co.,Ltd
+				10  Floor YaHua Building, Xi'anBei Road,
+				Xuzhou  JiangSu  221006
+				CN
+
+B4-F9-49   (hex)		optilink networks pvt ltd
+B4F949     (base 16)		optilink networks pvt ltd
+				501/502, sanjona complex, hemu kalani marg, chembur
+				mumbai  maharashtra  400071
+				IN
+
+E4-3C-80   (hex)		University of Oklahoma
+E43C80     (base 16)		University of Oklahoma
+				Advanced Radar Research Center
+				Norman  OK  73019
+				US
+
+3C-2C-30   (hex)		Dell Inc.
+3C2C30     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+70-6D-15   (hex)		Cisco Systems, Inc
+706D15     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-A1-E4   (hex)		Innotube, Inc.
+A4A1E4     (base 16)		Innotube, Inc.
+				#1212 MegaCenter SknTechnoPark 124 Sagimakgol-ro Jungwon-gu
+				Seongnam-si  Gyeonggi-do  462-120
+				KR
+
+94-EA-EA   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+94EAEA     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+				Av. Buriti, 1900 – Setor B – Distrito Industrial
+				Manaus  Amazonas  69075-000
+				BR
+
+1C-FD-08   (hex)		IEEE Registration Authority
+1CFD08     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B8-59-9F   (hex)		Mellanox Technologies, Inc.
+B8599F     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+30-13-89   (hex)		Siemens AG, Automations & Drives,
+301389     (base 16)		Siemens AG, Automations & Drives,
+				Systems Engineering
+				FÃ¼rth  Deutschlang  90766
+				DE
+
+98-D3-E7   (hex)		Netafim L
+98D3E7     (base 16)		Netafim L
+				Kibutz Magal
+				Kibutz Magal    38845
+				IL
+
+F0-63-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F063F9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-C3-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7CC385     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-0E-B3   (hex)		Shenzhen Amediatech Technology Co., Ltd.
+900EB3     (base 16)		Shenzhen Amediatech Technology Co., Ltd.
+				2th floor, block A, building B, Minsheng Industrial Zone, Longhua District
+				Shenzhen  Guangdong  518109
+				CN
+
+54-9F-AE   (hex)		iBASE Gaming Inc
+549FAE     (base 16)		iBASE Gaming Inc
+				2F., No.542-17, Zhongzheng Rd
+				Xinzhuang Dist., New Taipei City    24255
+				TW
+
+54-80-28   (hex)		Hewlett Packard Enterprise
+548028     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+54-06-8B   (hex)		Ningbo Deli Kebei Technology Co.LTD
+54068B     (base 16)		Ningbo Deli Kebei Technology Co.LTD
+				zone 2nd , 301#, Road Xuxiake, Ninghai yuelong district
+				ningbo  Zhejiang  315600
+				CN
+
+60-CE-92   (hex)		The Refined Industry Company Limited
+60CE92     (base 16)		The Refined Industry Company Limited
+				7/F Sun King Factory Bldg,1 - 7 Shing Chuen Road, Shatin, NT
+				Hong Kong  NT  000000
+				HK
+
+10-5B-AD   (hex)		Mega Well Limited
+105BAD     (base 16)		Mega Well Limited
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+74-BF-C0   (hex)		CANON INC.
+74BFC0     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+C8-D9-D2   (hex)		Hewlett Packard
+C8D9D2     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+24-FC-E5   (hex)		Samsung Electronics Co.,Ltd
+24FCE5     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+80-96-21   (hex)		Lenovo
+809621     (base 16)		Lenovo
+				1009 Think Place
+				Morrisvilee  NC  27560
+				US
+
+78-05-5F   (hex)		Shenzhen WYC Technology Co., Ltd.
+78055F     (base 16)		Shenzhen WYC Technology Co., Ltd.
+				No.618 Wenzhengxin Building，Hi-tech Park，Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+00-EA-BD   (hex)		Cisco Systems, Inc
+00EABD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+48-87-2D   (hex)		SHEN ZHEN DA XIA LONG QUE TECHNOLOGY CO.,LTD
+48872D     (base 16)		SHEN ZHEN DA XIA LONG QUE TECHNOLOGY CO.,LTD
+				Room 511, Building C,  Yuxing Technology Park, Gushu Second Road, Bao’an District
+				SHEN ZHEN  GUANG DONG  518000
+				CN
+
+E8-1A-58   (hex)		TECHNOLOGIC SYSTEMS
+E81A58     (base 16)		TECHNOLOGIC SYSTEMS
+				16525 E Laser Dr
+				Fountain Hills  AZ  85268-6534
+				US
+
+C0-BF-A7   (hex)		Juniper Networks
+C0BFA7     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+F0-54-94   (hex)		Honeywell Connected Building
+F05494     (base 16)		Honeywell Connected Building
+				1985 DOUGLAS DRIVE
+				Golden Valley  MN  55422
+				US
+
+5C-C9-99   (hex)		New H3C Technologies Co., Ltd
+5CC999     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+B0-2A-43   (hex)		Google, Inc.
+B02A43     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+C4-74-F8   (hex)		Hot Pepper, Inc.
+C474F8     (base 16)		Hot Pepper, Inc.
+				5151 California Ave., Suite 100, 
+				Irvine     92617
+				US
+
+14-22-33   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+142233     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+74-34-00   (hex)		MTG Co., Ltd.
+743400     (base 16)		MTG Co., Ltd.
+				MTG No. 2 HIKARI Bldg., 4-13 Honjindori
+				Nakamura-ku, Nagoya  Aichi  453-0041
+				JP
+
+DC-37-57   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+DC3757     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-50-99   (hex)		3COM EUROPE LTD
+005099     (base 16)		3COM EUROPE LTD
+				BOUNDARY WAY
+				HERTS. HP2 7YU      vvvvvv
+				GB
+
+04-BC-87   (hex)		Shenzhen JustLink Technology Co., LTD
+04BC87     (base 16)		Shenzhen JustLink Technology Co., LTD
+				Room 5002,The 2nd Unit  of  the   Building  East,   Laobing   Building, No.3012  Xingye Road,Baoan District
+				Shenzhen  Guangdong Province  518101
+				CN
+
+54-C3-3E   (hex)		Ciena Corporation
+54C33E     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+EC-79-F2   (hex)		Startel
+EC79F2     (base 16)		Startel
+				Xi Chuang Industrial Park，Second industrial district of Guan Long Village，Xili town ，Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+BC-B2-2B   (hex)		EM-Tech
+BCB22B     (base 16)		EM-Tech
+				40, Changwon-daero 1144beon-gil
+				Seongsan-gu Changwon  Gyeongsangnam-do  KR 642-120
+				KR
+
+D4-AB-82   (hex)		ARRIS Group, Inc.
+D4AB82     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+70-4F-B8   (hex)		ARRIS Group, Inc.
+704FB8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-60-EB   (hex)		FOURTHTRACK SYSTEMS
+0060EB     (base 16)		FOURTHTRACK SYSTEMS
+				UNIT 3 THE SYCAMORES
+				MARLOW - SL7 1QB    
+				GB
+
+18-62-E4   (hex)		Texas Instruments
+1862E4     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+60-35-C0   (hex)		SFR
+6035C0     (base 16)		SFR
+				12 rue jean-philippe Rameau CS 80001
+				La plaine saint denis   FRANCE  93634
+				FR
+
+C4-98-5C   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+C4985C     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+30-A1-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+30A1FA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-2E-90   (hex)		PALIT MICROSYSTEMS, LTD
+242E90     (base 16)		PALIT MICROSYSTEMS, LTD
+				21F.,No.88,Sec.2,Zhongxiao E.Rd.,Golden Tower,
+				TAIPEI    100
+				TW
+
+9C-AA-1B   (hex)		Microsoft Corporation
+9CAA1B     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+A8-9A-93   (hex)		Sagemcom Broadband SAS
+A89A93     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-1A-C5   (hex)		Keysight Technologies, Inc.
+001AC5     (base 16)		Keysight Technologies, Inc.
+				1400 Fountaingrove Pkwy.
+				Santa Rosa  CA  95403
+				US
+
+00-20-1E   (hex)		NETQUEST CORPORATION
+00201E     (base 16)		NETQUEST CORPORATION
+				523 FELLOWSHIP ROAD-STE.#205
+				MT. LAUREL  NJ  08054
+				US
+
+64-62-8A   (hex)		evon GmbH
+64628A     (base 16)		evon GmbH
+				Frank-Stronach-Straße 8
+				Gleisdorf  Styria  8200
+				AT
+
+04-15-D9   (hex)		Viwone
+0415D9     (base 16)		Viwone
+				54 - 56 , Avenue Hoche
+				Paris    75008
+				FR
+
+EC-B3-13   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ECB313     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+B0-8B-CF   (hex)		Cisco Systems, Inc
+B08BCF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-60-8C   (hex)		3COM
+00608C     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-A0-24   (hex)		3COM
+00A024     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-20-AF   (hex)		3COM
+0020AF     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-10-4B   (hex)		3COM
+00104B     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+A8-5A-F3   (hex)		Shanghai Siflower Communication Technology Co., Ltd
+A85AF3     (base 16)		Shanghai Siflower Communication Technology Co., Ltd
+				 Rm. 408, No. 84, Lane 887. Zhangjiang Hi-Tech Park. Zuchongzhi Rd. Shanghai, China
+				Shanghai  Shanghai  201210
+				CN
+
+70-FD-46   (hex)		Samsung Electronics Co.,Ltd
+70FD46     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+8C-83-E1   (hex)		Samsung Electronics Co.,Ltd
+8C83E1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-9F-6F   (hex)		Samsung Electronics Co.,Ltd
+889F6F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-63-C9   (hex)		Intellithings Ltd.
+5C63C9     (base 16)		Intellithings Ltd.
+				Hanehoshet 10
+				Tel Aviv  Israel  6971072
+				IL
+
+0C-96-E6   (hex)		Cloud Network Technology (Samoa) Limited
+0C96E6     (base 16)		Cloud Network Technology (Samoa) Limited
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+E0-0E-E1   (hex)		We Corporation Inc.
+E00EE1     (base 16)		We Corporation Inc.
+				201, 33, Deokcheon-ro, Manan-gu
+				Anyang-si  Gyeonggi-do  14088
+				KR
+
+00-0C-43   (hex)		Ralink Technology, Corp.
+000C43     (base 16)		Ralink Technology, Corp.
+				4F, No.2, Technology 5th Road,
+				Hsin-Chu    200
+				TW
+
+8C-92-46   (hex)		Oerlikon Textile Gmbh&Co.KG
+8C9246     (base 16)		Oerlikon Textile Gmbh&Co.KG
+				NO.9 Changyang Street
+				Suzhou  Jiangsu  215000
+				CN
+
+00-0E-94   (hex)		Maas International BV
+000E94     (base 16)		Maas International BV
+				Science Park Eindhoven 5051
+				Son  Noord Brabant  NL-5692 EB
+				NL
+
+48-98-CA   (hex)		Sichuan AI-Link Technology Co., Ltd.
+4898CA     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+24-7E-51   (hex)		zte corporation
+247E51     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E8-B5-41   (hex)		zte corporation
+E8B541     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+0C-9D-92   (hex)		ASUSTek COMPUTER INC.
+0C9D92     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+98-8E-D4   (hex)		ITEL MOBILE LIMITED
+988ED4     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+E8-A7-88   (hex)		XIAMEN LEELEN TECHNOLOGY CO., LTD
+E8A788     (base 16)		XIAMEN LEELEN TECHNOLOGY CO., LTD
+				65 Sunban South Rd., Jimei North Industrial Zone, 
+				Xiamen   Fujian  361021
+				CN
+
+58-2D-34   (hex)		Qingping Electronics (Suzhou) Co., Ltd
+582D34     (base 16)		Qingping Electronics (Suzhou) Co., Ltd
+				Room 304, A3 Building, NO.88 Dongchang Road, Suzhou Industrial Park
+				Suzhou  Jiangsu Province  215028
+				CN
+
+20-DE-88   (hex)		IC Realtime LLC
+20DE88     (base 16)		IC Realtime LLC
+				3050 N Andrews Ave Ext.
+				Pompano Beach  FL  33064
+				US
+
+F4-06-8D   (hex)		devolo AG
+F4068D     (base 16)		devolo AG
+				Charlottenburger Allee 67
+				Aachen  NRW  52068
+				DE
+
+00-1A-31   (hex)		SCAN COIN AB
+001A31     (base 16)		SCAN COIN AB
+				Jagershillgatan 26
+				Malmö  Skåne  21375
+				SE
+
+00-1B-84   (hex)		Scan Engineering Telecom
+001B84     (base 16)		Scan Engineering Telecom
+				Svobody str. 75
+				Voronezh    394030
+				RU
+
+48-2C-A0   (hex)		Xiaomi Communications Co Ltd
+482CA0     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+34-12-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3412F9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-E2-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BCE265     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-D1-A1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CD1A1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-BF-E4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88BFE4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-17-E2   (hex)		INTAI TECHNOLOGY CORP.
+4017E2     (base 16)		INTAI TECHNOLOGY CORP.
+				No.9, JINGKE RD.,NANTUN DIST.
+				TAICHUNG CITY    40852
+				TW
+
+0C-CB-85   (hex)		Motorola Mobility LLC, a Lenovo Company
+0CCB85     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+A4-E6-15   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+A4E615     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+74-1F-79   (hex)		YOUNGKOOK ELECTRONICS CO.,LTD
+741F79     (base 16)		YOUNGKOOK ELECTRONICS CO.,LTD
+				#810, Daewoo Frontier Valley 1,16-25, Dongbaekjungang-ro 16beon-gil, Giheung-gu
+				YONGIN  Gyeonggi-do  17015
+				KR
+
+A0-93-51   (hex)		Cisco Systems, Inc
+A09351     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+98-03-9B   (hex)		Mellanox Technologies, Inc.
+98039B     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100
+				Sunnyvale  CA  94085
+				US
+
+20-89-84   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+208984     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				No.25, Third Avenue, A Zone, Kunshan Comprehensive Free Trade Zone
+				KUNSHAN   SUZHOU   215300 
+				CN
+
+B4-CE-FE   (hex)		James Czekaj
+B4CEFE     (base 16)		James Czekaj
+				41716 Waterfall Rd
+				Northville  MI  48168
+				US
+
+F8-CC-6E   (hex)		DEPO Electronics Ltd
+F8CC6E     (base 16)		DEPO Electronics Ltd
+				12, kommunalnaya zona Krasnogorsk-Mitino
+				Krasnogorsk  Moscow region  143404
+				RU
+
+F8-36-9B   (hex)		Texas Instruments
+F8369B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+88-AE-1D   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+88AE1D     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD STREET KUNSHAN EXPORT PROCESSING ZONE
+				KUNSHAN  SUZHOU  215300
+				CN
+
+B8-88-E3   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+B888E3     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				No.25, Third Avenue, A Zone, Kunshan Comprehensive Free Trade Zone,, Jiangsu, 
+				KUNSHAN   SUZHOU  215300
+				CN
+
+28-9E-FC   (hex)		Sagemcom Broadband SAS
+289EFC     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-C0-55   (hex)		MODULAR COMPUTING TECHNOLOGIES
+00C055     (base 16)		MODULAR COMPUTING TECHNOLOGIES
+				2352 MAIN STREET
+				CONCORD  MA  01742
+				US
+
+E4-1F-E9   (hex)		Dunkermotoren GmbH
+E41FE9     (base 16)		Dunkermotoren GmbH
+				Allmendstr. 11
+				Bonndorf  Baden-Württemberg  79848
+				DE
+
+C4-51-8D   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+C4518D     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+48-68-34   (hex)		Silicon Motion, Inc.
+486834     (base 16)		Silicon Motion, Inc.
+				8F, No. 36, Taiyuan St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+00-11-33   (hex)		Siemens AG Austria
+001133     (base 16)		Siemens AG Austria
+				Siemensstrasse 90-92
+				Vienna    1210
+				AT
+
+00-0B-23   (hex)		Siemens Home & Office Comm. Devices
+000B23     (base 16)		Siemens Home & Office Comm. Devices
+				4849 Alpha Road
+				Dallas    74244
+				US
+
+64-13-31   (hex)		Bosch Car Multimedia (Wuhu) Co. Ltd.
+641331     (base 16)		Bosch Car Multimedia (Wuhu) Co. Ltd.
+				NO.48 North Yinhu Road
+				Wuhu city  Anhui Province  241000
+				CN
+
+18-3A-48   (hex)		VostroNet
+183A48     (base 16)		VostroNet
+				GPO Box 3154
+				Brisbane  Queensland  4000
+				AU
+
+78-2F-17   (hex)		Xlab Co.,Ltd
+782F17     (base 16)		Xlab Co.,Ltd
+				#401 4F, Achasan-ro, Seongdong-gu
+				SEOUL    04793
+				KR
+
+B0-02-7E   (hex)		MULLER SERVICES
+B0027E     (base 16)		MULLER SERVICES
+				107 Boulevard Ney
+				PARIS  ILE DE FRANCE  75018
+				FR
+
+24-FA-F3   (hex)		Shanghai Flexem Technology Co.,Ltd.
+24FAF3     (base 16)		Shanghai Flexem Technology Co.,Ltd.
+				Room 804, C6 Building,No.52 Bay Valley Technology Park, Lane 1688 North Guoquan Road, Yangpu District.
+				Shanghai    200438
+				CN
+
+88-D2-BF   (hex)		German Autolabs
+88D2BF     (base 16)		German Autolabs
+				Köpenicker Str. 154
+				Berlin  Berlin  10997
+				DE
+
+20-16-3D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+20163D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+E0-73-5F   (hex)		NUCOM
+E0735F     (base 16)		NUCOM
+				Arte, 21,5B
+				Madrid  Madrid  28033
+				ES
+
+00-51-ED   (hex)		LG Innotek
+0051ED     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+40-DC-9D   (hex)		HAJEN
+40DC9D     (base 16)		HAJEN
+				102-1302, Sinwon-ro 88, Yeongtong-gu
+				Suwon-Si  Gyeonggi-do  16681
+				KR
+
+34-0A-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+340A98     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-6D-6C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+646D6C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-B8-B4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4B8B4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-BC-C9   (hex)		PFU LIMITED
+F0BCC9     (base 16)		PFU LIMITED
+				Nu 98-2 Unoke
+				Kahoku-shi, Ishikawa    929-1192
+				JP
+
+48-75-83   (hex)		Intellion AG
+487583     (base 16)		Intellion AG
+				Schuppisstrasse 10
+				St. Gallen  St. Gallen  9016
+				CH
+
+90-4C-81   (hex)		Hewlett Packard Enterprise
+904C81     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+8C-35-79   (hex)		QDIQO Sp. z o.o.
+8C3579     (base 16)		QDIQO Sp. z o.o.
+				Stanisława Wyspiańskiego 11
+				Zielona Góra  lubuskie  65-036
+				PL
+
+38-C7-0A   (hex)		WiFiSong
+38C70A     (base 16)		WiFiSong
+				Rm. 605, Building 3, No. 75 Wenyi West Road
+				Hangzhou  Zhengjiang  310012
+				CN
+
+D8-76-0A   (hex)		Escort, Inc.
+D8760A     (base 16)		Escort, Inc.
+				5440 West Chester Rd.
+				West Chester  Ohio  45069
+				US
+
+5C-2E-D2   (hex)		ABC(XiSheng) Electronics Co.,Ltd
+5C2ED2     (base 16)		ABC(XiSheng) Electronics Co.,Ltd
+				No.2 Industrial building, FuRong 7 Road
+				ShenZhen  GongDong  518100
+				CN
+
+FC-FB-FB   (hex)		Cisco Systems, Inc
+FCFBFB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-7E-95   (hex)		Cisco Systems, Inc
+007E95     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-5A-44   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+9C5A44     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+14-CA-A0   (hex)		Hu&Co
+14CAA0     (base 16)		Hu&Co
+				105 Rue du Jardin
+				Bordeaux    33000
+				FR
+
+08-D4-6A   (hex)		LG Electronics (Mobile Communications)
+08D46A     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-10-17   (hex)		Bosch Access Systems GmbH
+001017     (base 16)		Bosch Access Systems GmbH
+				Charlottenburger Allee 50            
+				AACHEN      D-52068 
+				DE
+
+F4-EE-14   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+F4EE14     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+6C-59-40   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+6C5940     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+D0-25-16   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+D02516     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+1C-60-DE   (hex)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+1C60DE     (base 16)		MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				Mid-Fourth Flr.,Building 28,Cui Xi Fourth Road,Ke Yuan West,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+D8-24-77   (hex)		Universal Electric Corporation
+D82477     (base 16)		Universal Electric Corporation
+				168 Georgetown Road
+				Canonsburg  PA  15317
+				US
+
+00-90-7F   (hex)		WatchGuard Technologies, Inc.
+00907F     (base 16)		WatchGuard Technologies, Inc.
+				605 Fifth Ave. S
+				Seattle  WA  98104-3892
+				US
+
+4C-5E-0C   (hex)		Routerboard.com
+4C5E0C     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga    LV1009
+				LV
+
+D4-CA-6D   (hex)		Routerboard.com
+D4CA6D     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga    LV-1009
+				LV
+
+00-14-72   (hex)		China Broadband Wireless IP Standard group(ChinaBWIPS)
+001472     (base 16)		China Broadband Wireless IP Standard group(ChinaBWIPS)
+				P.O.BOX 88,West High-tech
+				Xi'an  Shaan Xi  710075
+				CN
+
+80-B5-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+80B575     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-BE-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4BE2B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-E7-C2   (hex)		Samsung Electronics Co.,Ltd
+68E7C2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+58-B1-0F   (hex)		Samsung Electronics Co.,Ltd
+58B10F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+40-06-A0   (hex)		Texas Instruments
+4006A0     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F8-2D-C0   (hex)		ARRIS Group, Inc.
+F82DC0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+18-9C-27   (hex)		ARRIS Group, Inc.
+189C27     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+3C-F5-CC   (hex)		New H3C Technologies Co., Ltd
+3CF5CC     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+D0-8A-91   (hex)		Technicolor CH USA Inc.
+D08A91     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+28-11-A5   (hex)		Bose Corporation
+2811A5     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+D8-F3-DB   (hex)		Post CH AG
+D8F3DB     (base 16)		Post CH AG
+				Wankdorfallee 4
+				Bern    3030
+				CH
+
+DC-B4-AC   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+DCB4AC     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
+				Zhuhai  Guangdong  519180
+				CN
+
+A4-92-CB   (hex)		Nokia
+A492CB     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+C0-D2-F3   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+C0D2F3     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+B8-83-03   (hex)		Hewlett Packard Enterprise
+B88303     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+20-3D-BD   (hex)		LG Innotek
+203DBD     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+A4-53-85   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+A45385     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+00-40-2F   (hex)		XLNT DESIGNS INC.
+00402F     (base 16)		XLNT DESIGNS INC.
+				15050 AVENUE OF SCIENCE
+				SAN DIEGO  CA  92128
+				US
+
+04-EC-BB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+04ECBB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+64-A2-F9   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+64A2F9     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+A8-7D-12   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A87D12     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-21-22   (hex)		Sercomm Corporation.
+D42122     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+00-C0-02   (hex)		Sercomm Corporation.
+00C002     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+BC-99-11   (hex)		Zyxel Communications Corporation
+BC9911     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+28-02-45   (hex)		Konze System Technology Co.,Ltd.
+280245     (base 16)		Konze System Technology Co.,Ltd.
+				4F., No.134, Ln. 235, Baoqiao Rd., Xindian Dist.
+				New Taipei City  ---  231
+				TW
+
+E4-8F-65   (hex)		Yelatma Instrument Making Enterprise, JSC
+E48F65     (base 16)		Yelatma Instrument Making Enterprise, JSC
+				Yanina 25
+				Yelatma  Ryazan Region  391351
+				RU
+
+00-00-A8   (hex)		Stratus Technologies
+0000A8     (base 16)		Stratus Technologies
+				5 Mill and Main Place, Suite 500
+				Maynard  MA  01754
+				US
+
+00-04-FC   (hex)		Stratus Technologies
+0004FC     (base 16)		Stratus Technologies
+				5 Mill and Main Place, Suite 500
+				Maynard  MA  01754
+				US
+
+3C-24-F0   (hex)		IEEE Registration Authority
+3C24F0     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-BB-3A   (hex)		Amazon Technologies Inc.
+00BB3A     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+0C-B3-4F   (hex)		Shenzhen Xiaoqi Intelligent Technology Co., Ltd.
+0CB34F     (base 16)		Shenzhen Xiaoqi Intelligent Technology Co., Ltd.
+				Room 1501, Block B4, Building 9, Section 2, Shenzhen Bay Science & Technology Ecological Park, West Shahe Road, Nanshan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+3C-F4-F9   (hex)		Moda-InnoChips
+3CF4F9     (base 16)		Moda-InnoChips
+				42-7(Wonsi-Dong),Dongsan-ro 27beon-gil,Danwon-gu
+				Ansan-si   Gyeonggi-Do  15433
+				KR
+
+94-19-3A   (hex)		Elvaco AB
+94193A     (base 16)		Elvaco AB
+				Kabelgatan 2T
+				Kungsbacka    43437
+				SE
+
+C0-81-35   (hex)		Ningbo Forfan technology Co., LTD
+C08135     (base 16)		Ningbo Forfan technology Co., LTD
+				Room B308,Tianjing Building,Tianan Cyber Park,Futian
+				Shenzhen  Guangdong  518040
+				CN
+
+84-0D-8E   (hex)		Espressif Inc.
+840D8E     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+00-20-82   (hex)		ONEAC CORPORATION
+002082     (base 16)		ONEAC CORPORATION
+				27944 N. BRADLEY RD.
+				LIBERTYVILLE  IL  60048
+				US
+
+40-62-31   (hex)		GIFA
+406231     (base 16)		GIFA
+				11th Fl., Suojia Business Building , No.7 Hangkong Road , Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+FC-B7-F0   (hex)		Idaho National Laboratory
+FCB7F0     (base 16)		Idaho National Laboratory
+				2525 N. Fremont Ave
+				Idaho Falls  ID  83415
+				US
+
+2C-28-B7   (hex)		Hangzhou Ruiying technology co., LTD
+2C28B7     (base 16)		Hangzhou Ruiying technology co., LTD
+				No. 1, building 305, Yunqi Town Cloud Computing Industrial Park, Hangzhou City, Xihu District
+				Hangzhou  Zhejiang  310000
+				CN
+
+10-65-30   (hex)		Dell Inc.
+106530     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+04-6B-1B   (hex)		SYSDINE Co., Ltd.
+046B1B     (base 16)		SYSDINE Co., Ltd.
+				506 Convergence technology research commercialization center 218 Gajung-Ro, Yuseong-gu
+				Daejeon-City  Daejeon-City  34129
+				KR
+
+B0-A3-7E   (hex)		QING DAO HAIER TELECOM CO.,LTD.
+B0A37E     (base 16)		QING DAO HAIER TELECOM CO.,LTD.
+				No.1,Haier Road,Qingdao 266101 P.R.China
+				Qingdao  Shandong  266101
+				CN
+
+3C-EA-F9   (hex)		JUBIXCOLTD
+3CEAF9     (base 16)		JUBIXCOLTD
+				Rm 808, 809, B dong, Gunpo IT vally, 17, Gosan-ro 148beon-gil, Gunpo-si, Gyeonggi-do, Republic of Korea
+				GUNPOSI    15850
+				KR
+
+58-DB-15   (hex)		TECNO MOBILE LIMITED
+58DB15     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+50-50-CE   (hex)		Hangzhou Dianyixia Communication Technology Co. Ltd.
+5050CE     (base 16)		Hangzhou Dianyixia Communication Technology Co. Ltd.
+				Room 207, Building 7, 1197 bin 'an road, Binjiang district,
+				Hangzhou  Zhejiang  310011
+				CN
+
+FC-69-47   (hex)		Texas Instruments
+FC6947     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+E0-7D-EA   (hex)		Texas Instruments
+E07DEA     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+DC-DE-4F   (hex)		Gionee Communication Equipment Co Ltd 
+DCDE4F     (base 16)		Gionee Communication Equipment Co Ltd 
+				21/F Times Technology Building, 7028 Shennan Road
+				Shenzhen  Futian District  518040
+				CN
+
+4C-D0-CB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CD0CB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-5D-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+505DAC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-FA-F7   (hex)		Guangdong Uniteddata Holding Group Co., Ltd.
+E8FAF7     (base 16)		Guangdong Uniteddata Holding Group Co., Ltd.
+				39L, Pearl River Tower, No.15 Zhujiang West Road,Tianhe District
+				GUANGZHOU  GUANGDONG  510623
+				CN
+
+94-9D-57   (hex)		Panasonic do Brasil Limitada
+949D57     (base 16)		Panasonic do Brasil Limitada
+				Rua Matrinxa
+				Manaus  Amazonas  69075150
+				BR
+
+88-D3-7B   (hex)		FirmTek, LLC
+88D37B     (base 16)		FirmTek, LLC
+				29300 Kohoutek Way
+				Union City  CA  94587
+				US
+
+1C-66-6D   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+1C666D     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+84-F3-EB   (hex)		Espressif Inc.
+84F3EB     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+00-1B-48   (hex)		Shenzhen Lantech Electronics Co., Ltd.
+001B48     (base 16)		Shenzhen Lantech Electronics Co., Ltd.
+				306 Room, Nanshan Water Building,
+				Shenzhen  Guangdong  518052
+				CN
+
+00-25-0C   (hex)		Senet Inc
+00250C     (base 16)		Senet Inc
+				100 Market Street, Suite 302 
+				 Portsmouth  NH  03801
+				US
+
+0C-80-63   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+0C8063     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-72-78   (hex)		Cisco Systems, Inc
+007278     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-5A-ED   (hex)		Apple, Inc.
+645AED     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-B6-58   (hex)		Apple, Inc.
+C0B658     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-A9-1C   (hex)		Apple, Inc.
+48A91C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-BC-96   (hex)		Apple, Inc.
+50BC96     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-2A-9C   (hex)		Apple, Inc.
+FC2A9C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-2C-7B   (hex)		Cisco Systems, Inc
+682C7B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-1E-98   (hex)		Ruckus Wireless
+441E98     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+A0-56-F3   (hex)		Apple, Inc.
+A056F3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-99-63   (hex)		Apple, Inc.
+549963     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-DD-5D   (hex)		Apple, Inc.
+90DD5D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-29-19   (hex)		AltoBeam (Xiamen) Technology Ltd, Co.
+DC2919     (base 16)		AltoBeam (Xiamen) Technology Ltd, Co.
+				South Building 203-38,Huoju Square ,No.56-58,Huoju Road, Huoju Park, Huoju High-tech District
+				Xiamen    361000
+				CN
+
+88-5F-E8   (hex)		IEEE Registration Authority
+885FE8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-2F-D9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+002FD9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+B4-CD-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B4CD27     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-19-F7   (hex)		Samsung Electronics Co.,Ltd
+C819F7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-C3-D6   (hex)		Juniper Networks
+64C3D6     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-A0-21   (hex)		General Dynamics Mission Systems
+00A021     (base 16)		General Dynamics Mission Systems
+				150 Rustcraft Road
+				Dedham  MA  02026
+				US
+
+F0-AF-50   (hex)		Phantom Intelligence
+F0AF50     (base 16)		Phantom Intelligence
+				319 Rue Franquet Suite F
+				Quebec  QC  G1P 4R4
+				CA
+
+C4-2C-4F   (hex)		Qingdao Hisense Mobile Communication Technology Co,Ltd
+C42C4F     (base 16)		Qingdao Hisense Mobile Communication Technology Co,Ltd
+				No.399, Song Ling Road
+				Qingdao  Shandong  266100
+				CN
+
+24-CA-CB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+24CACB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+54-3E-64   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+543E64     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+64-02-CB   (hex)		ARRIS Group, Inc.
+6402CB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F4-E1-1E   (hex)		Texas Instruments
+F4E11E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+38-80-DF   (hex)		Motorola Mobility LLC, a Lenovo Company
+3880DF     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+BC-6A-2F   (hex)		Henge Docks LLC
+BC6A2F     (base 16)		Henge Docks LLC
+				455 10th St.
+				San Francisco  California  94103
+				US
+
+0C-08-B4   (hex)		HUMAX Co., Ltd.
+0C08B4     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+00-27-05   (hex)		Sectronic
+002705     (base 16)		Sectronic
+				Z.I. Les Saulniers
+				Sainte-Maure de Touraine    37800
+				FR
+
+48-BD-3D   (hex)		New H3C Technologies Co., Ltd
+48BD3D     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+18-4C-08   (hex)		Rockwell Automation
+184C08     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+DC-02-65   (hex)		Meditech Kft
+DC0265     (base 16)		Meditech Kft
+				Üllõi út 200.
+				Budapest    1191
+				HU
+
+14-A7-2B   (hex)		currentoptronics Pvt.Ltd
+14A72B     (base 16)		currentoptronics Pvt.Ltd
+				CRT Building, Jupitor Jn , Near Time kids Koothattukulam - Piravom Rd
+				ERNAKULAM  Time Kids day care  686662
+				IN
+
+A4-DA-22   (hex)		IEEE Registration Authority
+A4DA22     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+3C-17-10   (hex)		Sagemcom Broadband SAS
+3C1710     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+DC-72-9B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DC729B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-94-97   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+909497     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-02-9B   (hex)		Plexonics Technologies LImited
+34029B     (base 16)		Plexonics Technologies LImited
+				1st Floor, 181/23 Industrial Area Phase 1
+				Chandigarh  Punjab  160002
+				IN
+
+90-03-72   (hex)		Longnan Junya Digital Technology Co. Ltd. 
+900372     (base 16)		Longnan Junya Digital Technology Co. Ltd. 
+				Champion Asia Road, Xinzhen industrial Park, Longnan national economic and technological development zone, Ganzhou city, JiangXi Province , China
+				ganzhou  jiangxi  341700
+				CN
+
+0C-C6-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0CC6CC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-58-60   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+785860     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-AB-F3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8ABF3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-DC-BC   (hex)		Samsung Electronics Co.,Ltd
+3CDCBC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-4E-70   (hex)		Samsung Electronics Co.,Ltd
+804E70     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-E6-B7   (hex)		Samsung Electronics Co.,Ltd
+D4E6B7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+8C-4C-AD   (hex)		Evoluzn Inc.
+8C4CAD     (base 16)		Evoluzn Inc.
+				34 Samoset Lane
+				Schaumburg  IL  60193
+				US
+
+8C-F9-57   (hex)		RuiXingHengFang Network (Shenzhen) Co.,Ltd
+8CF957     (base 16)		RuiXingHengFang Network (Shenzhen) Co.,Ltd
+				Room 507, 2nd tower of KangTai biological building  NO.6 KeFa Rd. NanShan District
+				Shenzhen  Guangdong  518057
+				CN
+
+4C-77-6D   (hex)		Cisco Systems, Inc
+4C776D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-E1-82   (hex)		Texas Instruments
+74E182     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+44-9E-F9   (hex)		vivo Mobile Communication Co., Ltd.
+449EF9     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+6C-C4-D5   (hex)		HMD Global Oy
+6CC4D5     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+80-C5-48   (hex)		Shenzhen Zowee Technology Co.,Ltd
+80C548     (base 16)		Shenzhen Zowee Technology Co.,Ltd
+				NO.5 Zowee technology building, Science & Technology industrial park of privately  Science & Technology industrial park of privately owned enterprises
+				Shenzhen  GuangDong  518055
+				CN
+
+10-C2-5A   (hex)		Technicolor CH USA Inc.
+10C25A     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+E8-DE-FB   (hex)		MESOTIC SAS
+E8DEFB     (base 16)		MESOTIC SAS
+				11, Avenue de la Division Leclerc
+				Cachan    94230
+				FR
+
+C4-00-AD   (hex)		Advantech Technology (CHINA) Co., Ltd.
+C400AD     (base 16)		Advantech Technology (CHINA) Co., Ltd.
+				No.666, Han-Pu Rd. Yu-Shan
+				Kun-Shan  Jiang Su  215316
+				CN
+
+94-FE-9D   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+94FE9D     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				SONGGANG
+				SHENZHEN  GUANGDONG  518105
+				CN
+
+6C-B6-CA   (hex)		DIVUS GmbH
+6CB6CA     (base 16)		DIVUS GmbH
+				Pillhof 51
+				Eppan    39057
+				IT
+
+04-D1-3A   (hex)		Xiaomi Communications Co Ltd
+04D13A     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+4C-C2-06   (hex)		Somfy
+4CC206     (base 16)		Somfy
+				50 avenue du nouveau monde
+				Cluses    74300
+				FR
+
+04-09-73   (hex)		Hewlett Packard Enterprise
+040973     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+34-99-D7   (hex)		Universal Flow Monitors, Inc.
+3499D7     (base 16)		Universal Flow Monitors, Inc.
+				1755 E. Nine Mile Rd.
+				Hazel Park  MI  48030
+				US
+
+0C-8B-D3   (hex)		ITEL MOBILE LIMITED
+0C8BD3     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+C0-A8-F0   (hex)		Adamson Systems Engineering
+C0A8F0     (base 16)		Adamson Systems Engineering
+				1401 Scugog Line 6
+				Port Perry  Ontario  L9L 1B2
+				CA
+
+9C-43-1E   (hex)		IEEE Registration Authority
+9C431E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-24-AF   (hex)		Dish Technologies Corp
+0024AF     (base 16)		Dish Technologies Corp
+				94 Inverness Terrace E
+				Englewood  CO  80112
+				US
+
+28-2C-02   (hex)		IEEE Registration Authority
+282C02     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+FC-A1-83   (hex)		Amazon Technologies Inc.
+FCA183     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno    89507
+				US
+
+6C-2A-CB   (hex)		Paxton Access Ltd
+6C2ACB     (base 16)		Paxton Access Ltd
+				Paxton House
+				Brighton  East Sussex  BN1 9HU
+				GB
+
+58-3B-D9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+583BD9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+DC-A2-66   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+DCA266     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C4-84-66   (hex)		Apple, Inc.
+C48466     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-7C-25   (hex)		Apple, Inc.
+347C25     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-2D-B7   (hex)		Apple, Inc.
+CC2DB7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-91-B5   (hex)		Infinix mobility limited
+BC91B5     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+28-2F-C2   (hex)		Automotive Data Solutions
+282FC2     (base 16)		Automotive Data Solutions
+				8400 rue Bougainville
+				Montreal  Quebec  H4P2G1
+				CA
+
+98-00-74   (hex)		Raisecom Technology CO., LTD
+980074     (base 16)		Raisecom Technology CO., LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+18-C1-9D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+18C19D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+0C-98-38   (hex)		Xiaomi Communications Co Ltd
+0C9838     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+74-EA-CB   (hex)		New H3C Technologies Co., Ltd
+74EACB     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+D4-1A-3F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+D41A3F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+D8-B1-22   (hex)		Juniper Networks
+D8B122     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+B4-C7-99   (hex)		Extreme Networks, Inc.
+B4C799     (base 16)		Extreme Networks, Inc.
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+64-6E-6C   (hex)		Radio Datacom LLC
+646E6C     (base 16)		Radio Datacom LLC
+				9601 N 35th St
+				Phoenix  AZ  85028
+				US
+
+E8-8E-60   (hex)		NSD Corporation
+E88E60     (base 16)		NSD Corporation
+				Osu 3-31-28
+				Nagoya  Aichi  460-8302
+				JP
+
+00-0F-9B   (hex)		Ross Video Limited
+000F9B     (base 16)		Ross Video Limited
+				8 John Street
+				Iroquois  Ontario  K0E 1K0
+				CA
+
+00-24-BA   (hex)		Texas Instruments
+0024BA     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+60-51-2C   (hex)		TCT mobile ltd
+60512C     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+64-DB-81   (hex)		Syszone Co., Ltd.
+64DB81     (base 16)		Syszone Co., Ltd.
+				9F Garak, 310 Ogeum-ro
+				Seoul  Seoul, Korea  138-716
+				KR
+
+44-AD-19   (hex)		XINGFEI （H.K）LIMITED 
+44AD19     (base 16)		XINGFEI （H.K）LIMITED 
+				6/F North Tower Wandelai Building  No.29 Kejinan 6th Road, Nanshan District,Shenzhen,China
+				Shenzhen     518057
+				CN
+
+38-AD-BE   (hex)		New H3C Technologies Co., Ltd
+38ADBE     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+5C-AD-76   (hex)		Shenzhen TCL New Technology Co., Ltd
+5CAD76     (base 16)		Shenzhen TCL New Technology Co., Ltd
+				B area,10 Floor, TCL Multimedia Building, TCL International E city, #1001 Zhongshan Park Road, Nanshan District
+				Shenzhen  Guangdong  518052
+				CN
+
+5C-86-5C   (hex)		Samsung Electronics Co.,Ltd
+5C865C     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+04-F1-28   (hex)		HMD Global Oy
+04F128     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+04-B1-67   (hex)		Xiaomi Communications Co Ltd
+04B167     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+EC-83-50   (hex)		Microsoft Corporation
+EC8350     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+D0-07-CA   (hex)		Juniper Networks
+D007CA     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+1C-DF-52   (hex)		Texas Instruments
+1CDF52     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+30-C5-07   (hex)		ECI Telecom Ltd.
+30C507     (base 16)		ECI Telecom Ltd.
+				30 Hasivim St.
+				Petah Tikva    49133
+				IL
+
+C8-45-8F   (hex)		Wyler AG
+C8458F     (base 16)		Wyler AG
+				Im Hoelderli 13
+				Winterthur  ZH  8405
+				CH
+
+00-1B-B9   (hex)		Elitegroup Computer Systems Co.,Ltd.
+001BB9     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No.22, Alley 38, Lane 91 , Sec. 1 , Nei Hu Road
+				Taipei    114
+				TW
+
+00-24-61   (hex)		Shin Wang Tech.
+002461     (base 16)		Shin Wang Tech.
+				632-62, Guro-Dong, Guro-Gu
+				Seoul    152-866
+				KR
+
+0C-52-03   (hex)		AGM GROUP LIMITED
+0C5203     (base 16)		AGM GROUP LIMITED
+				4F,Building B,HuaFeng Ind park,Gushu,Xixiang,BaoAn,ShenZhen,China
+				ShenZhen  GuangDong  518100
+				CN
+
+2C-54-91   (hex)		Microsoft Corporation
+2C5491     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+38-17-C3   (hex)		Hewlett Packard Enterprise
+3817C3     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+00-1E-1D   (hex)		East Coast Datacom, Inc.
+001E1D     (base 16)		East Coast Datacom, Inc.
+				245 Gus Hipp Blvd., STE 3
+				Rockledge  FL  32955
+				US
+
+78-46-C4   (hex)		DAEHAP HYPER-TECH
+7846C4     (base 16)		DAEHAP HYPER-TECH
+				#A-805, Woolim Lions Vally 5-cha, #144-3 Sangdaewon-dong, Jungwon-Gu
+				Seongnam    462-726
+				US
+
+5C-E2-8C   (hex)		Zyxel Communications Corporation
+5CE28C     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+E4-BD-4B   (hex)		zte corporation
+E4BD4B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+38-D7-CA   (hex)		7HUGS LABS
+38D7CA     (base 16)		7HUGS LABS
+				29 bd Romain Rolland 
+				Montrouge     92120
+				FR
+
+00-01-44   (hex)		Dell EMC
+000144     (base 16)		Dell EMC
+				228 South St.
+				Hopkinton  MA  01748
+				US
+
+08-00-1B   (hex)		Dell EMC
+08001B     (base 16)		Dell EMC
+				176 South Street
+				Hopkinton  MA  01748
+				US
+
+7C-01-0A   (hex)		Texas Instruments
+7C010A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+E4-2B-34   (hex)		Apple, Inc.
+E42B34     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-2E-F9   (hex)		Apple, Inc.
+3C2EF9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-4E-A7   (hex)		Apple, Inc.
+A04EA7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-98-9D   (hex)		Apple, Inc.
+F0989D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-D6-BD   (hex)		Robert Bosch GmbH
+FCD6BD     (base 16)		Robert Bosch GmbH
+				AE-BE/EKE
+				Leonberg  BW  71206
+				DE
+
+70-1F-53   (hex)		Cisco Systems, Inc
+701F53     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-39-6E   (hex)		SUNSEA TELECOMMUNICATIONS CO.,LTD.
+18396E     (base 16)		SUNSEA TELECOMMUNICATIONS CO.,LTD.
+				High tech Industrial Park,Longhua District of Shenzhen City,South central concept
+				Shenzhen    518110
+				CN
+
+EC-7D-11   (hex)		vivo Mobile Communication Co., Ltd.
+EC7D11     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+48-0E-EC   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+480EEC     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+50-3E-AA   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+503EAA     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+58-00-BB   (hex)		Juniper Networks
+5800BB     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+48-BA-4E   (hex)		Hewlett Packard
+48BA4E     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+D8-08-31   (hex)		Samsung Electronics Co.,Ltd
+D80831     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-41-C1   (hex)		Mini-Cam Limited
+9441C1     (base 16)		Mini-Cam Limited
+				Unit 4 Yew Tree Way
+				Warrington  Cheshire  WA33JD
+				GB
+
+50-4E-DC   (hex)		Ping Communication
+504EDC     (base 16)		Ping Communication
+				Brenden 18
+				Appenzell Meistersrüte  AI  9050
+				CH
+
+08-67-4E   (hex)		Hisense broadband multimedia technology Co.,Ltd
+08674E     (base 16)		Hisense broadband multimedia technology Co.,Ltd
+				Song ling Road 399
+				Qingdao    266000
+				CN
+
+50-0F-80   (hex)		Cisco Systems, Inc
+500F80     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+10-F1-F2   (hex)		LG Electronics (Mobile Communications)
+10F1F2     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+8C-68-C8   (hex)		zte corporation
+8C68C8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+EC-82-63   (hex)		zte corporation
+EC8263     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+68-3C-7D   (hex)		Magic Intelligence Technology Limited
+683C7D     (base 16)		Magic Intelligence Technology Limited
+				B13/Flat 4,East block,Jinhui Blding.Nanhai Road
+				Nanshan District, Shenzhen  guangdong  518000
+				CN
+
+0C-1C-20   (hex)		Kakao Corp
+0C1C20     (base 16)		Kakao Corp
+				242, Cheomdan-ro
+				Jeju-si  Jeju-do  63309
+				KR
+
+24-F5-A2   (hex)		Belkin International Inc.
+24F5A2     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista  null  90094
+				US
+
+74-BB-D3   (hex)		Shenzhen xeme Communication Co., Ltd.
+74BBD3     (base 16)		Shenzhen xeme Communication Co., Ltd.
+				303,Block D,Huayuan  technology innovation park,Bao Yuen road,Xixiang street,Baoan District
+				Shenzhen  Guangdong  518102 
+				CN
+
+94-28-2E   (hex)		New H3C Technologies Co., Ltd
+94282E     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+98-F5-A9   (hex)		OHSUNG
+98F5A9     (base 16)		OHSUNG
+				181
+				GUMI  KYUNGBUK  730-030
+				KR
+
+D8-9E-F3   (hex)		Dell Inc.
+D89EF3     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+38-4F-49   (hex)		Juniper Networks
+384F49     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+4C-BD-8F   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+4CBD8F     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+EC-EB-B8   (hex)		Hewlett Packard Enterprise
+ECEBB8     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+6C-B7-49   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6CB749     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+98-9C-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+989C57     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-52-82   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+185282     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+8C-3C-4A   (hex)		NAKAYO Inc
+8C3C4A     (base 16)		NAKAYO Inc
+				Development Support Center 165 Higashiomuro-machi
+				Maebashi-shi  Gunma  379-2105
+				JP
+
+70-86-C1   (hex)		Texas Instruments
+7086C1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F4-D7-B2   (hex)		LGS Innovations, LLC
+F4D7B2     (base 16)		LGS Innovations, LLC
+				13665 Dulles Technology Drive
+				Herndon  VA  20171
+				US
+
+00-15-2A   (hex)		Nokia Corporation
+00152A     (base 16)		Nokia Corporation
+				Rensingstraße 15
+				Bochum  NRW  44807
+				DE
+
+9C-4A-7B   (hex)		Nokia Corporation
+9C4A7B     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu  Ou  90590
+				FI
+
+D8-61-62   (hex)		Wistron Neweb Corporation
+D86162     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+28-84-0E   (hex)		silicon valley immigration service 
+28840E     (base 16)		silicon valley immigration service 
+				1410 Sharp Ave,
+				Campbell  CA  95008
+				US
+
+2C-D2-E7   (hex)		Nokia Corporation
+2CD2E7     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu  Ou  90590
+				FI
+
+38-6E-A2   (hex)		vivo Mobile Communication Co., Ltd.
+386EA2     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+98-2D-68   (hex)		Samsung Electronics Co., Ltd
+982D68     (base 16)		Samsung Electronics Co., Ltd
+				Samsung 1-ro
+				Hwaseong-si  Gyeonggi-do  445330
+				KR
+
+BC-2E-48   (hex)		ARRIS Group, Inc.
+BC2E48     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+60-8C-E6   (hex)		ARRIS Group, Inc.
+608CE6     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+08-00-70   (hex)		Mitsubishi Precision Co.,LTd.
+080070     (base 16)		Mitsubishi Precision Co.,LTd.
+				325 KAMIMACHIYA
+				000    00
+				JP
+
+44-4A-B0   (hex)		Zhejiang Moorgen Intelligence Technology Co., Ltd
+444AB0     (base 16)		Zhejiang Moorgen Intelligence Technology Co., Ltd
+				No.181 Changluo road Luotuo street Zhenhai district
+				Ningbo  Zhejiang  315202
+				CN
+
+DC-6A-EA   (hex)		Infinix mobility limited
+DC6AEA     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+C4-21-C8   (hex)		KYOCERA CORPORATION 
+C421C8     (base 16)		KYOCERA CORPORATION 
+				2-1-1,Kagahara,
+				Yokohama-shi  Kanagawa  224-8502
+				JP
+
+80-73-9F   (hex)		KYOCERA CORPORATION 
+80739F     (base 16)		KYOCERA CORPORATION 
+				2-1-1 Kagahara
+				Yokohama-shi  Kanagawa  224-8502
+				JP
+
+70-58-12   (hex)		Panasonic Corporation AVC Networks Company
+705812     (base 16)		Panasonic Corporation AVC Networks Company
+				1-15 Matsuo-cho
+				Kadoma  Osaka  571-8504
+				JP
+
+04-20-9A   (hex)		Panasonic Corporation AVC Networks Company
+04209A     (base 16)		Panasonic Corporation AVC Networks Company
+				1-15 Matsuo-cho
+				Kadoma City  Osaka  571-8504
+				JP
+
+34-00-8A   (hex)		IEEE Registration Authority
+34008A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A4-11-15   (hex)		Robert Bosch Engineering and Business Solutions pvt. Ltd.
+A41115     (base 16)		Robert Bosch Engineering and Business Solutions pvt. Ltd.
+				123, Industrial Layout, Hosur Road, Koramangala,
+				Bangalore  Karnataka  560095
+				IN
+
+40-D6-3C   (hex)		Equitech Industrial(DongGuan)Co.,Ltd
+40D63C     (base 16)		Equitech Industrial(DongGuan)Co.,Ltd
+				4F Building B No.2 ShiChang Road SongYuan Technology Park,DongCheng District
+				DongGuan  GuangDong  523122
+				CN
+
+F4-F3-AA   (hex)		JBL GmbH & Co. KG
+F4F3AA     (base 16)		JBL GmbH & Co. KG
+				Dieselstrasse 3
+				Neuhofen    67141
+				DE
+
+90-50-CA   (hex)		Hitron Technologies. Inc
+9050CA     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+40-99-22   (hex)		AzureWave Technology Inc.
+409922     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+C0-6D-1A   (hex)		Tianjin Henxinhuifeng Technology Co.,Ltd.
+C06D1A     (base 16)		Tianjin Henxinhuifeng Technology Co.,Ltd.
+				Rm 233, Tianjin Technology Innovation Service Center, 12 Keyan West Road, Nankai District, Tianjin, P.R.C.
+				Tianjin  Tianjin  300192
+				CN
+
+10-7B-44   (hex)		ASUSTek COMPUTER INC.
+107B44     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+84-25-3F   (hex)		silex technology, Inc.
+84253F     (base 16)		silex technology, Inc.
+				2-3-1 Hikaridai
+				Seika-cho  Kyoto  619-0237
+				JP
+
+00-08-C9   (hex)		TechniSat Digital GmbH Daun
+0008C9     (base 16)		TechniSat Digital GmbH Daun
+				Gewerbepark Merbitz Nr. 5
+				Dresden    01156
+				US
+
+D8-B1-2A   (hex)		Panasonic Mobile Communications Co.,Ltd.
+D8B12A     (base 16)		Panasonic Mobile Communications Co.,Ltd.
+				600 Saedo-cho Tsuzuki-ku
+				Yokohama City  Kanagawa  224-8539
+				JP
+
+B0-19-C6   (hex)		Apple, Inc.
+B019C6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-66-F0   (hex)		Apple, Inc.
+3866F0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-80-09   (hex)		JUPITER SYSTEMS, INC.
+008009     (base 16)		JUPITER SYSTEMS, INC.
+				3073 TEAGARDEN STREET
+				SAN LEANDRO  CA  94577-5720
+				US
+
+00-C0-64   (hex)		General Datacomm LLC
+00C064     (base 16)		General Datacomm LLC
+				353 Christian Street, Suite 4
+				Oxford  CT  06478
+				US
+
+E8-68-19   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E86819     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-AB-34   (hex)		New H3C Technologies Co., Ltd
+1CAB34     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+3C-78-43   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C7843     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-09-79   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5C0979     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-FB-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4FB5D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-01-CC   (hex)		Japan Total Design Communication Co., Ltd.
+0001CC     (base 16)		Japan Total Design Communication Co., Ltd.
+				Enesta Suginamihigashi Build., 3F,
+				    
+				JP
+
+00-30-C8   (hex)		GAD LINE, LTD.
+0030C8     (base 16)		GAD LINE, LTD.
+				BEIT ROKAR HAR HOTZVIM
+				    
+				IL
+
+00-16-E0   (hex)		3Com Ltd
+0016E0     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+D8-DE-CE   (hex)		ISUNG CO.,LTD
+D8DECE     (base 16)		ISUNG CO.,LTD
+				92, Huimanggongwon-ro
+				Siheung-si  Kyunggido  429-859
+				KR
+
+70-3E-AC   (hex)		Apple, Inc.
+703EAC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-11-C0   (hex)		Aday Technology Inc
+0011C0     (base 16)		Aday Technology Inc
+				9F.-3, No. 247, Sec. 1, Taichung Port Rd.,
+				Taichung City    403
+				TW
+
+00-05-F1   (hex)		Vrcom, Inc.
+0005F1     (base 16)		Vrcom, Inc.
+				401, Songam Bldg, 479-1,
+				Seoul    
+				KR
+
+AC-51-2C   (hex)		Infinix mobility limited
+AC512C     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+30-99-35   (hex)		zte corporation
+309935     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+0C-72-D9   (hex)		zte corporation
+0C72D9     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+10-62-D0   (hex)		Technicolor CH USA Inc.
+1062D0     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+50-64-2B   (hex)		XIAOMI Electronics,CO.,LTD
+50642B     (base 16)		XIAOMI Electronics,CO.,LTD
+				Xiaomi Building, No.68 Qinghe Middle Street
+				Haidian District  Beijing  100085
+				CN
+
+28-40-1A   (hex)		C8 MediSensors, Inc.
+28401A     (base 16)		C8 MediSensors, Inc.
+				727 University Ave
+				Los Gatos  CA  95032
+				US
+
+30-C0-1B   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+30C01B     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+88-86-C2   (hex)		STABILO International GmbH
+8886C2     (base 16)		STABILO International GmbH
+				Schwanweg 1
+				Heroldsberg    90562
+				DE
+
+08-A8-A1   (hex)		Cyclotronics Power Concepts, Inc
+08A8A1     (base 16)		Cyclotronics Power Concepts, Inc
+				PO Box 37449
+				Houston  TX  77237-7449
+				US
+
+F4-B5-20   (hex)		Biostar Microtech international corp.
+F4B520     (base 16)		Biostar Microtech international corp.
+				3F. No. 108-2 Min Chuan Road, Hsin Tien District 
+				New Taipei City  Taiwan  231
+				TW
+
+CC-2F-71   (hex)		Intel Corporate
+CC2F71     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1C-C5   (hex)		3Com Ltd
+001CC5     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+88-7A-31   (hex)		Velankani Electronics Pvt. Ltd.
+887A31     (base 16)		Velankani Electronics Pvt. Ltd.
+				43, Electronics City, Phase 1, Hosur road
+				Bangalore  Karnataka  560100
+				IN
+
+8C-0F-6F   (hex)		PEGATRON CORPORATION
+8C0F6F     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+8C-25-05   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8C2505     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-3B-AD   (hex)		NETGEAR
+8C3BAD     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+64-CF-D9   (hex)		Texas Instruments
+64CFD9     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+74-7D-24   (hex)		Phicomm (Shanghai) Co., Ltd.
+747D24     (base 16)		Phicomm (Shanghai) Co., Ltd.
+				3666 SiXian Rd.,Songjiang District
+				Shanghai  Shanghai  201616
+				CN
+
+D0-94-66   (hex)		Dell Inc.
+D09466     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+38-E5-95   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+38E595     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
+				Shenzhen  Guangdong  518067
+				CN
+
+BC-96-80   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+BC9680     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				B116,B118,A211-A213,B201-B213,A311-A313,B411-413,BF08-09 Nanshan Medical Instrument Industry Park,
+				Shenzhen  Guangdong  518067
+				CN
+
+A4-7B-9D   (hex)		Espressif Inc.
+A47B9D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+B8-F8-BE   (hex)		BLUECOM
+B8F8BE     (base 16)		BLUECOM
+				116, Venture-ro, Yeonsu-gu,
+				Incheon    406-840
+				KR
+
+00-24-82   (hex)		Ruckus Wireless
+002482     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+68-92-34   (hex)		Ruckus Wireless
+689234     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+50-A7-33   (hex)		Ruckus Wireless
+50A733     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+2C-5D-93   (hex)		Ruckus Wireless
+2C5D93     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+38-FF-36   (hex)		Ruckus Wireless
+38FF36     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+84-18-3A   (hex)		Ruckus Wireless
+84183A     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+24-C9-A1   (hex)		Ruckus Wireless
+24C9A1     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+7C-2E-DD   (hex)		Samsung Electronics Co.,Ltd
+7C2EDD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-F7-A4   (hex)		Samsung Electronics Co.,Ltd
+3CF7A4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-30-34   (hex)		Cara Systems
+103034     (base 16)		Cara Systems
+				Ruzgarlibahce Mah. Kavak Sok. No: 31/1 Smart Plaza B Blok Kat: 4
+				Istanbul  Kavacik Beykoz  23805
+				TR
+
+00-00-FE   (hex)		Annapolis Micro Systems, Inc.
+0000FE     (base 16)		Annapolis Micro Systems, Inc.
+				190 ADMIRAL COCHRANE DRIVE
+				ANNAPOLIS  MD  21401
+				US
+
+00-D0-1F   (hex)		Senetas Corporation Ltd
+00D01F     (base 16)		Senetas Corporation Ltd
+				1/11 Queens Road
+				consolidation    consolidation
+				AU
+
+64-47-E0   (hex)		Feitian Technologies Co., Ltd
+6447E0     (base 16)		Feitian Technologies Co., Ltd
+				Floor 17, Tower B, Huizhi Mansion, No.9 Xueqing Rd, Haidian District
+				Beijing    100085
+				CN
+
+B4-4F-96   (hex)		Zhejiang Xinzailing Technology co., ltd
+B44F96     (base 16)		Zhejiang Xinzailing Technology co., ltd
+				No.1805, Dongliu Road, Binjiang District 
+				Hangzhou  Zhejiang  310051
+				CN
+
+4C-65-A8   (hex)		IEEE Registration Authority
+4C65A8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B0-DF-C1   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+B0DFC1     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+9C-6F-52   (hex)		zte corporation
+9C6F52     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E8-6D-65   (hex)		AUDIO MOBIL Elektronik GmbH
+E86D65     (base 16)		AUDIO MOBIL Elektronik GmbH
+				Audio-Mobil-Straße 5 - 7
+				Braunau am Inn - Ranshofen    5282
+				AT
+
+70-6E-6D   (hex)		Cisco Systems, Inc
+706E6D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+60-47-62   (hex)		Beijing Sensoro Technology Co.,Ltd.
+604762     (base 16)		Beijing Sensoro Technology Co.,Ltd.
+				Room 2807, Building 1B, Wangjing SOHO, No10 Wangjing Street, Chaoyang District, Beijing, China
+				Beijing  Beijing  100102 PRC
+				CN
+
+BC-1C-81   (hex)		Sichuan iLink Technology Co., Ltd.
+BC1C81     (base 16)		Sichuan iLink Technology Co., Ltd.
+				Anzhou,Industrial park,Mianyang,Sichuan
+				Mianyang    622651
+				CN
+
+90-0A-1A   (hex)		Taicang T&W Electronics
+900A1A     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+50-6E-92   (hex)		Innocent Technology Co., Ltd.
+506E92     (base 16)		Innocent Technology Co., Ltd.
+				PROSIT AZUMA 3 #201, 1973, NIPPA-CHO, KOHOKU-KU, 
+				YOKOHAMA-SHI  KANAGAWA  2230057
+				JP
+
+30-FE-31   (hex)		Nokia
+30FE31     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+98-F2-B3   (hex)		Hewlett Packard Enterprise
+98F2B3     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+C4-57-1F   (hex)		June Life Inc
+C4571F     (base 16)		June Life Inc
+				649 Front Street
+				San Francisco  CA  94111
+				US
+
+88-6A-E3   (hex)		Alpha Networks Inc.
+886AE3     (base 16)		Alpha Networks Inc.
+				No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C
+				Hsinchu  Taiwan  300
+				TW
+
+1C-4D-70   (hex)		Intel Corporate
+1C4D70     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+D8-22-F4   (hex)		Avnet Silica
+D822F4     (base 16)		Avnet Silica
+				16 av carnot
+				Massy    91349
+				FR
+
+34-8F-27   (hex)		Ruckus Wireless
+348F27     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+2C-9E-EC   (hex)		Jabil Circuit Penang
+2C9EEC     (base 16)		Jabil Circuit Penang
+				Plot 56 , Hilir Sungai Keluang 1, Bayan Lepas Industrial Park, Phase 4
+				George Town  Penang  11900
+				MY
+
+00-1C-FA   (hex)		Alarm.com
+001CFA     (base 16)		Alarm.com
+				8150 Leesburg Pike
+				Vienna  VA  22182
+				US
+
+60-31-3B   (hex)		Sunnovo International Limited
+60313B     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+6C-B2-27   (hex)		Sony Video & Sound Products Inc.
+6CB227     (base 16)		Sony Video & Sound Products Inc.
+				Sony City Osaki, 2-10-1 Osaki
+				Shinagawa-ku  Tokyo  141-8610
+				JP
+
+98-6F-60   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+986F60     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+00-0C-AB   (hex)		Commend International GmbH
+000CAB     (base 16)		Commend International GmbH
+				Hoelzlstrasse 561
+				Wals  Salzburg  A-5071
+				AT
+
+74-54-27   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+745427     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+60-72-0B   (hex)		BLU Products Inc
+60720B     (base 16)		BLU Products Inc
+				10814 NW 33rd Street
+				Miami  FL  33172
+				US
+
+30-89-76   (hex)		DALIAN LAMBA TECHNOLOGY CO.,LTD
+308976     (base 16)		DALIAN LAMBA TECHNOLOGY CO.,LTD
+				Dalian Hi-tech Zone Keypark Room 1201
+				Dalian  Liaoning  116000
+				CN
+
+2C-26-17   (hex)		Oculus VR, LLC
+2C2617     (base 16)		Oculus VR, LLC
+				1 Hacker Way
+				Menlo Park  CA  94025
+				US
+
+34-D9-54   (hex)		WiBotic Inc.
+34D954     (base 16)		WiBotic Inc.
+				4000 15th Ave NE Lab 225, Fluke Hall, Box 352141
+				Seattle  WA  98195
+				US
+
+48-57-DD   (hex)		Facebook Inc
+4857DD     (base 16)		Facebook Inc
+				1 Hacker Way
+				Menlo Park    94025
+				US
+
+48-7D-2E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+487D2E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+B0-DA-F9   (hex)		ARRIS Group, Inc.
+B0DAF9     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+18-35-D1   (hex)		ARRIS Group, Inc.
+1835D1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+C0-A5-DD   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+C0A5DD     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+48-8D-36   (hex)		Arcadyan Corporation
+488D36     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+BC-D7-13   (hex)		Owl Labs
+BCD713     (base 16)		Owl Labs
+				33-1/2 Union Square
+				Somerville  MA  02143
+				US
+
+E8-E1-E1   (hex)		Gemtek Technology Co., Ltd.
+E8E1E1     (base 16)		Gemtek Technology Co., Ltd.
+				No.15-1 Zhonghua Road
+				Hukou  Hsinchu  30352
+				TW
+
+28-07-0D   (hex)		GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.
+28070D     (base 16)		GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.
+				Building1 NO.13 DABU ROAD HUADU DISTRICT
+				GUANGZHOU  GUANGDONG  510800
+				CN
+
+00-A3-D1   (hex)		Cisco Systems, Inc
+00A3D1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+FC-4D-8C   (hex)		SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD
+FC4D8C     (base 16)		SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD
+				Building 5,Hui Mingsheng industrial park,Tongfu Rd,Fu Yong street
+				Shenzhen  Guangdong  518042
+				CN
+
+FC-06-ED   (hex)		M2Motive Technology Inc.
+FC06ED     (base 16)		M2Motive Technology Inc.
+				Room 148, Lane 999, new two road, Baoshan District
+				Shanghai  Shanghai  200439
+				CN
+
+F0-D4-F6   (hex)		Lars Thrane A/S
+F0D4F6     (base 16)		Lars Thrane A/S
+				Stubbeled 2
+				Vedbæk    2950
+				DK
+
+F4-A9-97   (hex)		CANON INC.
+F4A997     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+64-DF-E9   (hex)		ATEME
+64DFE9     (base 16)		ATEME
+				6 rue Dewoitine
+				Vélizy-Villacoublay    78140
+				FR
+
+10-C6-FC   (hex)		Garmin International
+10C6FC     (base 16)		Garmin International
+				1200 East 151st Street
+				Olathe   KS  66062
+				US
+
+AC-22-05   (hex)		Compal Broadband Networks, Inc.
+AC2205     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+80-A0-36   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
+80A036     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
+				9th Floor, No. 5 Building, 2145 Jinshajiang Rd., Putuo District
+				Shanghai    200333
+				CN
+
+F0-74-85   (hex)		NGD Systems, Inc.
+F07485     (base 16)		NGD Systems, Inc.
+				355 Goddard, Suite 200
+				Irvine  CA  92618
+				US
+
+40-5C-FD   (hex)		Dell Inc.
+405CFD     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+20-F4-52   (hex)		Shanghai IUV Software Development Co. Ltd
+20F452     (base 16)		Shanghai IUV Software Development Co. Ltd
+				No.18, Lane 1387 Zhangdong Rd, Pudong, Shanghai, P.R.C
+				shanghai  shanghai  201203
+				CN
+
+50-9A-4C   (hex)		Dell Inc.
+509A4C     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+A0-09-4C   (hex)		CenturyLink
+A0094C     (base 16)		CenturyLink
+				100 CenturyLink Drive
+				Monroe    71203
+				US
+
+B4-39-34   (hex)		Pen Generations, Inc.
+B43934     (base 16)		Pen Generations, Inc.
+				8th FL., SOLiD Space,
+				Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+74-26-AC   (hex)		Cisco Systems, Inc
+7426AC     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+B0-26-28   (hex)		Broadcom Limited
+B02628     (base 16)		Broadcom Limited
+				5300 California Ave.
+				irvine  CA  92617
+				US
+
+98-74-DA   (hex)		Infinix mobility limited
+9874DA     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+40-B4-F0   (hex)		Juniper Networks
+40B4F0     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+14-3F-27   (hex)		Noccela Oy
+143F27     (base 16)		Noccela Oy
+				Kaarinantie 700
+				Turku    20540
+				FI
+
+10-58-87   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+105887     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+70-4C-A5   (hex)		Fortinet, Inc.
+704CA5     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale  null  94086
+				US
+
+9C-06-1B   (hex)		Hangzhou H3C Technologies Co., Limited
+9C061B     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+50-33-8B   (hex)		Texas Instruments
+50338B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+E8-DE-8E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+E8DE8E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+D8-D8-66   (hex)		SHENZHEN TOZED TECHNOLOGIES CO.,LTD.
+D8D866     (base 16)		SHENZHEN TOZED TECHNOLOGIES CO.,LTD.
+				 4F/A1,A2,TIANJI BUILDING,TIAN’AN CYBER PARK,FUTIAN
+				SHENZHEN  GUANGDONG  518040
+				CN
+
+D8-C0-6A   (hex)		Hunantv.com Interactive Entertainment Media Co.,Ltd.
+D8C06A     (base 16)		Hunantv.com Interactive Entertainment Media Co.,Ltd.
+				Floor 2U, Hunan International Exhibition Center, Kaifu District, Changsha City, Hunan Province, P.R.C.
+				Changsha  Hunan  410000
+				CN
+
+AC-20-2E   (hex)		Hitron Technologies. Inc
+AC202E     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+1C-5A-0B   (hex)		Tegile Systems
+1C5A0B     (base 16)		Tegile Systems
+				7999 Gateway Blvd Suite 120
+				Newark  CA  94560
+				US
+
+04-6E-02   (hex)		OpenRTLS Group
+046E02     (base 16)		OpenRTLS Group
+				De Nieuwe Ploeg 5
+				Berlicum    5258 EX
+				NL
+
+90-0E-83   (hex)		Monico Monitoring, Inc.
+900E83     (base 16)		Monico Monitoring, Inc.
+				18530 Klein Church Rd
+				Spring  TX  77379
+				US
+
+60-14-66   (hex)		zte corporation
+601466     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+68-54-ED   (hex)		Alcatel-Lucent
+6854ED     (base 16)		Alcatel-Lucent
+				777 E. Middlefield Rd
+				Mountain View  CA  94043
+				US
+
+68-02-35   (hex)		Konten Networks Inc.
+680235     (base 16)		Konten Networks Inc.
+				7F-1, No.108, Minquan Rd., Xindian Dist.,
+				New Taipei City  Taiwan  231
+				TW
+
+38-AC-3D   (hex)		Nephos Inc
+38AC3D     (base 16)		Nephos Inc
+				2840 Junction Ave.  ,
+				San Jose  CA  95134
+				US
+
+E0-37-BF   (hex)		Wistron Neweb Corporation
+E037BF     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+E8-13-67   (hex)		AIRSOUND Inc.
+E81367     (base 16)		AIRSOUND Inc.
+				515-ho,75,Techno-1ro,Yuseoung-gu
+				Daejeon    34014
+				KR
+
+00-11-92   (hex)		Cisco Systems, Inc
+001192     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+38-F1-35   (hex)		SensorTec-Canada
+38F135     (base 16)		SensorTec-Canada
+				1Yonge Street, Suite 1801
+				Toronto  ON  M5E 1W7
+				CA
+
+AC-74-09   (hex)		Hangzhou H3C Technologies Co., Limited
+AC7409     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+C4-9D-ED   (hex)		Microsoft Corporation
+C49DED     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+98-A4-0E   (hex)		Snap, Inc.
+98A40E     (base 16)		Snap, Inc.
+				64 Market Street
+				Venice  CA  90291
+				US
+
+F4-03-43   (hex)		Hewlett Packard Enterprise
+F40343     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+F0-93-C5   (hex)		Garland Technology
+F093C5     (base 16)		Garland Technology
+				2130 Oak Bend Lane
+				Garland  TX  75040
+				US
+
+98-10-E8   (hex)		Apple, Inc.
+9810E8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-D0-12   (hex)		Apple, Inc.
+C0D012     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-A9-20   (hex)		Apple, Inc.
+BCA920     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-A1-95   (hex)		Apple, Inc.
+48A195     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-03-77   (hex)		Apple, Inc.
+F80377     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-96-34   (hex)		Intel Corporate
+F49634     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+10-7D-1A   (hex)		Dell Inc.
+107D1A     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+70-AF-24   (hex)		TP Vision Belgium NV
+70AF24     (base 16)		TP Vision Belgium NV
+				Technologiepark Zwijnaarde 19
+				Gent    9052
+				BE
+
+A4-11-63   (hex)		IEEE Registration Authority
+A41163     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C4-D1-97   (hex)		Ventia Utility Services
+C4D197     (base 16)		Ventia Utility Services
+				Level 4, Tower 1, 495 Victoria Avenue
+				Chatswood  NSW  2067
+				AU
+
+2C-86-D2   (hex)		Cisco Systems, Inc
+2C86D2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+7C-E9-7C   (hex)		ITEL MOBILE LIMITED
+7CE97C     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+80-58-F8   (hex)		Motorola Mobility LLC, a Lenovo Company
+8058F8     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+DC-A4-CA   (hex)		Apple, Inc.
+DCA4CA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-8F-E9   (hex)		Apple, Inc.
+8C8FE9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-AF-25   (hex)		Nishiyama Industry Co.,LTD.
+70AF25     (base 16)		Nishiyama Industry Co.,LTD.
+				177-2
+				Fuji  Shizuoka  419-0205
+				JP
+
+E8-D1-1B   (hex)		ASKEY COMPUTER CORP
+E8D11B     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+98-00-C1   (hex)		GuangZhou CREATOR Technology Co.,Ltd.(CHINA)
+9800C1     (base 16)		GuangZhou CREATOR Technology Co.,Ltd.(CHINA)
+				Level 3,Blg 6,No 9 Keji Yuan,LanYusi St,
+				GuangZhou  GuangDong  510730
+				CN
+
+54-E1-AD   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+54E1AD     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+98-D3-D2   (hex)		MEKRA Lang GmbH & Co. KG
+98D3D2     (base 16)		MEKRA Lang GmbH & Co. KG
+				Buchheimerstr. 4
+				Ergersheim    91465
+				DE
+
+0C-5F-35   (hex)		Niagara Video Corporation
+0C5F35     (base 16)		Niagara Video Corporation
+				5627 Stoneridge Drive, Suite 316
+				Pleasanton  CA  94588
+				US
+
+F8-A3-4F   (hex)		zte corporation
+F8A34F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-19-12   (hex)		Welcat Inc
+001912     (base 16)		Welcat Inc
+				East Tower 6F, Shinagawa Seaside, 4-12-8, Higashi Shinagawa, Shinagawa Section
+				  Tokyo  140-0002
+				JP
+
+8C-78-D7   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+8C78D7     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+B8-EA-AA   (hex)		ICG NETWORKS CO.,ltd
+B8EAAA     (base 16)		ICG NETWORKS CO.,ltd
+				Room 2030，Block B，Yamei Park，Haidian District
+				BEIJING    100010
+				CN
+
+B8-F8-83   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+B8F883     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+DC-FE-18   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+DCFE18     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+70-4F-57   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+704F57     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+B0-C4-6C   (hex)		Senseit
+B0C46C     (base 16)		Senseit
+				Suschevsky val 16 str. 4
+				Moscow  Russian Federation  127018
+				RU
+
+00-02-A1   (hex)		World Wide Packets
+0002A1     (base 16)		World Wide Packets
+				PO Box 14645
+				Spokane  WA  99214
+				US
+
+00-E0-22   (hex)		Analog Devices, Inc.
+00E022     (base 16)		Analog Devices, Inc.
+				Three Technology Way
+				Norwood   MA  02062-2666
+				US
+
+14-B7-F8   (hex)		Technicolor CH USA Inc.
+14B7F8     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+90-3D-6B   (hex)		Zicon Technology Corp.
+903D6B     (base 16)		Zicon Technology Corp.
+				15F., No.688-2, Zhongzheng Rd., Zhonghe City, Taipei County 235
+				Taipei    23586
+				TW
+
+B0-40-89   (hex)		Senient Systems LTD
+B04089     (base 16)		Senient Systems LTD
+				152 Morrison St
+				Edinburgh  Other (Non US)  EH3 8EB
+				GB
+
+54-25-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5425EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-7F-6F   (hex)		Telechips, Inc.
+3C7F6F     (base 16)		Telechips, Inc.
+				19F~23F,Luther Bldg.42, Olympic-ro 35da-gil, Songpa-gu,
+				Seoul  Seoul  05510
+				KR
+
+5C-BA-37   (hex)		Microsoft Corporation
+5CBA37     (base 16)		Microsoft Corporation
+				31807 - 25th Ave SW
+				Federal Way    98023
+				US
+
+00-C0-C6   (hex)		PERSONAL MEDIA CORP.
+00C0C6     (base 16)		PERSONAL MEDIA CORP.
+				1-7-7 MY BLDG. HIRATSUKA
+				    
+				JP
+
+28-FE-CD   (hex)		Lemobile Information Technology (Beijing) Co., Ltd.
+28FECD     (base 16)		Lemobile Information Technology (Beijing) Co., Ltd.
+				5/F LeEco Building, 105 Yaojiayuan Road, Chaoyang District 
+				Beijing  Beijing  100025
+				CN
+
+C8-94-BB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C894BB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+10-B1-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+10B1F8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-9E-08   (hex)		Google, Inc.
+089E08     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+00-21-0D   (hex)		SAMSIN INNOTEC
+00210D     (base 16)		SAMSIN INNOTEC
+				SARIYUNDONG ILSANDONG-GU
+				GOYANG  KYUNGGI  411530
+				KR
+
+C8-73-24   (hex)		 Sow Cheng Technology Co. Ltd.
+C87324     (base 16)		 Sow Cheng Technology Co. Ltd.
+				No.26, Ln. 181, Xinsheng W. Rd., Dali Dist
+				Taichung    412
+				TW
+
+00-1F-16   (hex)		Wistron Corporation
+001F16     (base 16)		Wistron Corporation
+				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
+				Taipei Hsien    221
+				TW
+
+00-26-2D   (hex)		Wistron Corporation
+00262D     (base 16)		Wistron Corporation
+				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
+				Taipei Hsien    221
+				TW
+
+04-95-E6   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+0495E6     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+50-E6-66   (hex)		Shenzhen Techtion Electronics Co., Ltd.
+50E666     (base 16)		Shenzhen Techtion Electronics Co., Ltd.
+				Floor 2, C2 Building, Huafeng Industrial Park, Hangcheng Avenue, Gushu, Xixiang, Baoan
+				Shenzhen  Guangdong  518102
+				CN
+
+00-16-D3   (hex)		Wistron Corporation
+0016D3     (base 16)		Wistron Corporation
+				21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
+				Taipei Hsien    221
+				TW
+
+4C-4E-03   (hex)		TCT mobile ltd
+4C4E03     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+90-17-11   (hex)		Hagenuk Marinekommunikation GmbH
+901711     (base 16)		Hagenuk Marinekommunikation GmbH
+				Hamburger Chaussee 25
+				Flintbek    24220
+				DE
+
+00-10-DE   (hex)		INTERNATIONAL DATACASTING CORPORATION
+0010DE     (base 16)		INTERNATIONAL DATACASTING CORPORATION
+				2680 QUEENSVIEW DRIVE
+				OTTAWA,  ONTARIO  K2B 8H6
+				CA
+
+C0-D9-F7   (hex)		ShanDong Domor Intelligent S&T CO.,Ltd
+C0D9F7     (base 16)		ShanDong Domor Intelligent S&T CO.,Ltd
+				Jining high-tech zone base of production,education & research
+				Jining  Shandong  272000
+				CN
+
+00-60-8B   (hex)		ConferTech International
+00608B     (base 16)		ConferTech International
+				12110 N. PECOS STREET
+				WESTMINSTER  CO  80234-2074
+				US
+
+70-2D-84   (hex)		i4C Innovations
+702D84     (base 16)		i4C Innovations
+				3800 Concorde Parkway, Suite 400
+				Chantilly  VA  20151
+				US
+
+2C-20-0B   (hex)		Apple, Inc.
+2C200B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-66-A5   (hex)		Apple, Inc.
+8866A5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-02-77   (hex)		Cash Systemes Industrie
+000277     (base 16)		Cash Systemes Industrie
+				Technoparc Epsilon
+				    
+				FR
+
+CC-A2-19   (hex)		SHENZHEN ALONG INVESTMENT CO.,LTD
+CCA219     (base 16)		SHENZHEN ALONG INVESTMENT CO.,LTD
+				Room 1301,13F,Zhenye international Business Center,No.3101-90,Qianhai Road,Nanshan District
+				Shenzhen  Guangdong Province  518052
+				CN
+
+4C-1A-3A   (hex)		PRIMA Research And Production Enterprise Ltd.
+4C1A3A     (base 16)		PRIMA Research And Production Enterprise Ltd.
+				63, Svobody st.
+				  Nizhny Novgorod   603003
+				RU
+
+14-B3-1F   (hex)		Dell Inc.
+14B31F     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+AC-C1-EE   (hex)		Xiaomi Communications Co Ltd
+ACC1EE     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+54-19-C8   (hex)		vivo Mobile Communication Co., Ltd.
+5419C8     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+B0-B9-8A   (hex)		NETGEAR
+B0B98A     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+80-5A-04   (hex)		LG Electronics (Mobile Communications)
+805A04     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+8C-A5-A1   (hex)		Oregano Systems - Design & Consulting GmbH
+8CA5A1     (base 16)		Oregano Systems - Design & Consulting GmbH
+				Franzosengraben 8
+				Vienna    1030
+				AT
+
+B8-EC-A3   (hex)		Zyxel Communications Corporation
+B8ECA3     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+BC-83-85   (hex)		Microsoft Corporation
+BC8385     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+00-14-38   (hex)		Hewlett Packard Enterprise
+001438     (base 16)		Hewlett Packard Enterprise
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+E4-B0-05   (hex)		Beijing IQIYI Science & Technology Co., Ltd.
+E4B005     (base 16)		Beijing IQIYI Science & Technology Co., Ltd.
+				Room 1101, Floor 11, Capital Development Tower, No.2 Haidian North 1st Street,Haidian District,
+				Beijing    100080
+				CN
+
+00-00-48   (hex)		Seiko Epson Corporation
+000048     (base 16)		Seiko Epson Corporation
+				80 HIROOKA SHIOJIRI-CITY
+				japan  JAPAN  399-07
+				JP
+
+B0-E8-92   (hex)		Seiko Epson Corporation
+B0E892     (base 16)		Seiko Epson Corporation
+				3-3-5 OWA
+				SUWA-SHI  NAGANO-KEN  392-8502
+				JP
+
+AC-18-26   (hex)		Seiko Epson Corporation
+AC1826     (base 16)		Seiko Epson Corporation
+				3-3-5 OWA
+				SUWA-SHI  NAGANO-KEN  392-8502
+				JP
+
+A4-EE-57   (hex)		Seiko Epson Corporation
+A4EE57     (base 16)		Seiko Epson Corporation
+				3-3-5 OWA
+				SUWA-SHI  NAGANO-KEN  392-8502
+				JP
+
+9C-AE-D3   (hex)		Seiko Epson Corporation
+9CAED3     (base 16)		Seiko Epson Corporation
+				80 Harashinden
+				Shiojiri-shi  Nagano-ken  399-0785
+				JP
+
+70-7C-69   (hex)		Avaya Inc
+707C69     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+50-0B-91   (hex)		IEEE Registration Authority
+500B91     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F8-46-1C   (hex)		Sony Interactive Entertainment Inc.
+F8461C     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+70-4D-7B   (hex)		ASUSTek COMPUTER INC.
+704D7B     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+64-A6-8F   (hex)		Zhongshan Readboy Electronics Co.,Ltd
+64A68F     (base 16)		Zhongshan Readboy Electronics Co.,Ltd
+				Changmingshui Industrial Park Wuguishan Zhongshan City,Guangdong Province
+				Zhongshan  Guangdong  528400
+				CN
+
+38-BC-01   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+38BC01     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-1E-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+341E6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-66-39   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+886639     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-42-5A   (hex)		Cisco Systems, Inc
+00425A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-DB-F2   (hex)		Dell Inc.
+18DBF2     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+18-F8-7A   (hex)		i3 International Inc.
+18F87A     (base 16)		i3 International Inc.
+				780 Birchmount Road
+				Scarborough  Ontario  M1K5H4
+				CA
+
+4C-26-E7   (hex)		Welgate Co., Ltd.
+4C26E7     (base 16)		Welgate Co., Ltd.
+				19F, Geopyeong Bldg. 129
+				Seoul  Seoul  135726
+				KR
+
+00-60-41   (hex)		Yokogawa Digital Computer Corporation
+006041     (base 16)		Yokogawa Digital Computer Corporation
+				Shinjuku MIDWEST Bldg.4-30-3
+				Yoyogi  Shibuya-ku, Tokyo  151-0053
+				JP
+
+C8-16-A5   (hex)		Masimo Corporation
+C816A5     (base 16)		Masimo Corporation
+				40 Parker
+				Irvine  CA  92618
+				US
+
+0C-02-27   (hex)		Technicolor CH USA Inc.
+0C0227     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+4C-11-BF   (hex)		Zhejiang Dahua Technology Co., Ltd.
+4C11BF     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				NO.1199 Bin An Road,Binjiang District,HangZhou,P.R.China
+				HangZhou  ZheJiang  310053
+				CN
+
+2C-59-8A   (hex)		LG Electronics (Mobile Communications)
+2C598A     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+B0-52-16   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+B05216     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+A0-E4-CB   (hex)		Zyxel Communications Corporation
+A0E4CB     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+28-4E-D7   (hex)		OutSmart Power Systems, Inc.
+284ED7     (base 16)		OutSmart Power Systems, Inc.
+				11 Mercer Rd
+				Natick  23  01760
+				
+
+14-A7-8B   (hex)		Zhejiang Dahua Technology Co., Ltd.
+14A78B     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199, Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+A0-B8-F8   (hex)		Amgen U.S.A. Inc.
+A0B8F8     (base 16)		Amgen U.S.A. Inc.
+				1 Amgen Center Drive
+				Thousand Oaks  CA  91320
+				US
+
+88-44-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+884477     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-9D-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+149D09     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-69-75   (hex)		Angler Labs Inc
+686975     (base 16)		Angler Labs Inc
+				940 Pearce Mill Rd.
+				Wexford  PA  15090
+				US
+
+20-D2-5F   (hex)		SmartCap Technologies
+20D25F     (base 16)		SmartCap Technologies
+				L1 18 Finchley Street
+				Milton  Queensland  4064
+				AU
+
+E4-7D-BD   (hex)		Samsung Electronics Co.,Ltd
+E47DBD     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+9C-FB-D5   (hex)		vivo Mobile Communication Co., Ltd.
+9CFBD5     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+18-F7-6B   (hex)		Zhejiang Winsight Technology CO.,LTD
+18F76B     (base 16)		Zhejiang Winsight Technology CO.,LTD
+				No.3339 Linggongtang Road，NanHu District
+				Jiaxing  Zhejiang   314000
+				CN
+
+58-31-12   (hex)		DRUST
+583112     (base 16)		DRUST
+				8 rue fabre d'églantine
+				Paris    75012
+				FR
+
+9C-83-BF   (hex)		PRO-VISION, Inc.
+9C83BF     (base 16)		PRO-VISION, Inc.
+				8625-B Byron Commerce Dr. SW
+				Byron Center  MI  49315
+				US
+
+78-EF-4C   (hex)		Unetconvergence Co., Ltd.
+78EF4C     (base 16)		Unetconvergence Co., Ltd.
+				101-511, Digital Empire2, 486, Shin-dong, Youngtong-gu
+				Suwon  Kyonggi-do  443-390
+				KR
+
+58-69-6C   (hex)		Ruijie Networks Co.,LTD
+58696C     (base 16)		Ruijie Networks Co.,LTD
+				19# Building,Star-net Science Plaza,Juyuanzhou, 618 Jinshan Road
+				Fuzhou  Fujian  350002
+				CN
+
+48-D3-43   (hex)		ARRIS Group, Inc.
+48D343     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-C0-5A   (hex)		SEMAPHORE COMMUNICATIONS CORP.
+00C05A     (base 16)		SEMAPHORE COMMUNICATIONS CORP.
+				217 HUMBOLDT COURT
+				SUNNYVALE  CA  94089-1300
+				US
+
+00-07-F9   (hex)		Sensaphone
+0007F9     (base 16)		Sensaphone
+				901 Tryens Road
+				Aston  PA  19014
+				US
+
+00-1C-B3   (hex)		Apple, Inc.
+001CB3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-71-83   (hex)		Juniper Networks
+407183     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C8-1B-5C   (hex)		BCTech
+C81B5C     (base 16)		BCTech
+				14 Building, Tiandeng road 259# 
+				shanghai  xuhui district, shanghai   200237
+				CN
+
+5C-E3-0E   (hex)		ARRIS Group, Inc.
+5CE30E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+1C-C0-E1   (hex)		IEEE Registration Authority
+1CC0E1     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-1A-39   (hex)		Merten GmbH&CoKG
+001A39     (base 16)		Merten GmbH&CoKG
+				Fritz-Kotz-Str. 8
+				Wiehl  NRW  51674
+				DE
+
+00-B0-E1   (hex)		Cisco Systems, Inc
+00B0E1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-50-93   (hex)		BOEING
+005093     (base 16)		BOEING
+				3370 Miraloma Avenue
+				Anaheim  CA  92803-3105
+				US
+
+90-5C-44   (hex)		Compal Broadband Networks, Inc.
+905C44     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+E0-7C-13   (hex)		zte corporation
+E07C13     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F4-1F-88   (hex)		zte corporation
+F41F88     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+14-ED-BB   (hex)		2Wire Inc
+14EDBB     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+18-E2-9F   (hex)		vivo Mobile Communication Co., Ltd.
+18E29F     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+28-EE-52   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+28EE52     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+70-79-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+707990     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-4E-01   (hex)		CENTRAL ENGINEERING co.,ltd.
+A04E01     (base 16)		CENTRAL ENGINEERING co.,ltd.
+				2-3-19 shinyokohama kouhoku-ku
+				yokohama-shi  kanagawa  222-0033
+				JP
+
+28-CA-09   (hex)		ThyssenKrupp Elevators (Shanghai) Co.,Ltd
+28CA09     (base 16)		ThyssenKrupp Elevators (Shanghai) Co.,Ltd
+				No. 2, Xunye Rd, Sheshan Subarea Songjiang Industrial Area
+				Shanghai  Shanghai  201602
+				CN
+
+84-25-19   (hex)		Samsung Electronics
+842519     (base 16)		Samsung Electronics
+				129, Samsung-rom Yeongtong-gu
+				Suwon-si  Gyeonggi-do  16677
+				KR
+
+5C-24-43   (hex)		O-Sung Telecom Co., Ltd.
+5C2443     (base 16)		O-Sung Telecom Co., Ltd.
+				43-9 Pyeongdongro 803-gil , Gwangsan-Gu
+				Gwangju    54611
+				KR
+
+24-92-0E   (hex)		Samsung Electronics Co.,Ltd
+24920E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-42-03   (hex)		Samsung Electronics Co.,Ltd
+FC4203     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-10-81   (hex)		Samsung Electronics Co.,Ltd
+A01081     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-8B-CD   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+3C8BCD     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+4C-F9-5D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CF95D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-21-F1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8421F1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-F2-2C   (hex)		Shanghai B-star Technology Co.,Ltd.
+00F22C     (base 16)		Shanghai B-star Technology Co.,Ltd.
+				4Floor NO.1158 Xiehe Road,Changning District ,shanghai ,China 200335
+				Shanghai     200335
+				CN
+
+00-05-EE   (hex)		Vanderbilt International (SWE) AB 
+0005EE     (base 16)		Vanderbilt International (SWE) AB 
+				Englundavaegen 7
+				Solna    SE-171 41 
+				SE
+
+F0-79-60   (hex)		Apple, Inc.
+F07960     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-D7-95   (hex)		Apple, Inc.
+A0D795     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-90-E7   (hex)		HORSCH ELEKTRONIK AG
+0090E7     (base 16)		HORSCH ELEKTRONIK AG
+				HAAGERSTRASSE
+				CH-9473 GAMS    
+				CH
+
+E4-3E-D7   (hex)		Arcadyan Corporation
+E43ED7     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+54-54-CF   (hex)		PROBEDIGITAL CO.,LTD
+5454CF     (base 16)		PROBEDIGITAL CO.,LTD
+				#107 Hyundai I-Valley, 31, Galmachi-ro 244beon-gil, Jungwon-gu
+				Seongnam-si  Gyeonggi-do  13212
+				KR
+
+F8-63-3F   (hex)		Intel Corporate
+F8633F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+08-86-20   (hex)		TECNO MOBILE LIMITED
+088620     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+F0-D5-BF   (hex)		Intel Corporate
+F0D5BF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+64-74-F6   (hex)		Shooter Detection Systems
+6474F6     (base 16)		Shooter Detection Systems
+				300 Newburyport Turnpike
+				Rowley  MA  01969
+				US
+
+98-13-33   (hex)		zte corporation
+981333     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+74-8A-69   (hex)		Korea Image Technology Co., Ltd
+748A69     (base 16)		Korea Image Technology Co., Ltd
+				125, beolmal road, dongan gu,
+				anyang  gyeonggi  14056
+				KR
+
+BC-47-60   (hex)		Samsung Electronics Co.,Ltd
+BC4760     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+04-18-0F   (hex)		Samsung Electronics Co.,Ltd
+04180F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+20-13-E0   (hex)		Samsung Electronics Co.,Ltd
+2013E0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-25-66   (hex)		Samsung Electronics Co.,Ltd
+002566     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-DB-32   (hex)		Nokia Corporation
+D0DB32     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+E8-00-36   (hex)		Befs co,. ltd
+E80036     (base 16)		Befs co,. ltd
+				C-#403, 242 Pangyo-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13487
+				KR
+
+C0-9F-05   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C09F05     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+5C-49-79   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+5C4979     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+C0-F9-45   (hex)		Toshiba Toko Meter Systems Co., LTD.
+C0F945     (base 16)		Toshiba Toko Meter Systems Co., LTD.
+				3484, Sakuragaoka, Kurohama
+				Hasuda-shi  Saitama  349-0192
+				JP
+
+70-F8-E7   (hex)		IEEE Registration Authority
+70F8E7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D4-2C-44   (hex)		Cisco Systems, Inc
+D42C44     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+84-3D-C6   (hex)		Cisco Systems, Inc
+843DC6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-85   (hex)		ConteXtream Ltd
+002485     (base 16)		ConteXtream Ltd
+				94 Em-HaMoshavot
+				Petach-Tikva    49527
+				IL
+
+28-FC-F6   (hex)		Shenzhen Xin KingBrand enterprises Co.,Ltd
+28FCF6     (base 16)		Shenzhen Xin KingBrand enterprises Co.,Ltd
+				Kingbrand Industrial Zone,Nanpu Road,Shang liao ling pi keng,Shajing Town
+				Shenzhen  Guangdong  518000
+				CN
+
+00-1F-58   (hex)		EMH Energiemesstechnik GmbH
+001F58     (base 16)		EMH Energiemesstechnik GmbH
+				Vor dem Hassel 2
+				Brackel    21438
+				DE
+
+68-94-23   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+689423     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+84-4B-F5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+844BF5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+08-ED-B9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+08EDB9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+3C-77-E6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+3C77E6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+70-18-8B   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+70188B     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+5C-6D-20   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+5C6D20     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+5C-AC-4C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+5CAC4C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-16-DF   (hex)		Lundinova AB
+0016DF     (base 16)		Lundinova AB
+				Dalbyvägen 1
+				Lund  Skåne  SE-224 60
+				US
+
+00-1D-0C   (hex)		MobileCompia
+001D0C     (base 16)		MobileCompia
+				Dongwon Bldg, 725-30, Yeoksam-dong, Gangnam-gu,
+				Seoul    135-080
+				KR
+
+B8-8E-DF   (hex)		Zencheer Communication Technology Co., Ltd.
+B88EDF     (base 16)		Zencheer Communication Technology Co., Ltd.
+				Room 2706, BLDG#7, Changjiang Building, NO.12, Changjiang Road, New District
+				Wuxi  Jiangsu  214028
+				CN
+
+DC-71-44   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+DC7144     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				Suwon    443-743
+				US
+
+98-0C-82   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+980C82     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				Metan Dong 314, Youngtong Gu
+				Suwon  Kyung-gi Do.  443-743
+				KR
+
+A0-0B-BA   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+A00BBA     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				Suwon-Si, Gyeonggi_Do, Korea
+				Suwon  Gyeonggi_Do  443-743
+				KR
+
+60-6B-BD   (hex)		Samsung Electronics Co.,Ltd
+606BBD     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu
+				Suwon-si  Gyeonggi-do  443742
+				KR
+
+00-21-4C   (hex)		Samsung Electronics Co.,Ltd
+00214C     (base 16)		Samsung Electronics Co.,Ltd
+				416, METAN-3DONG,
+				SUWON  KYUNGKI-DO  442-742
+				KR
+
+08-C6-B3   (hex)		QTECH LLC
+08C6B3     (base 16)		QTECH LLC
+				Novozavodskaya st. 18 build. 1
+				Moscow  Moscow region  121309
+				RU
+
+00-18-AF   (hex)		Samsung Electronics Co.,Ltd
+0018AF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1
+				Gumi-City  Gyeong-Buk  730-350
+				KR
+
+00-1E-E1   (hex)		Samsung Electronics Co.,Ltd
+001EE1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-16-6B   (hex)		Samsung Electronics Co.,Ltd
+00166B     (base 16)		Samsung Electronics Co.,Ltd
+				416,Maetan-3Dong,Yeongtong-Gu
+				Suwon-City  Kyeonggi-Do  443-742
+				KR
+
+00-00-F0   (hex)		Samsung Electronics Co.,Ltd
+0000F0     (base 16)		Samsung Electronics Co.,Ltd
+				416, MAETAN-3DONG, PALDAL-GU
+				kwon    442-742
+				KR
+
+8C-C8-CD   (hex)		Samsung Electronics Co.,Ltd
+8CC8CD     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, Yeongtong-gu
+				Suwon  Gyeonggi-do  443742
+				KR
+
+A8-F2-74   (hex)		Samsung Electronics Co.,Ltd
+A8F274     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-87-D8   (hex)		Samsung Electronics Co.,Ltd
+D487D8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-46-17   (hex)		Samsung Electronics Co.,Ltd
+184617     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+38-0A-94   (hex)		Samsung Electronics Co.,Ltd
+380A94     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-DF-C7   (hex)		Samsung Electronics Co.,Ltd
+D0DFC7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-C1-B1   (hex)		Samsung Electronics Co.,Ltd
+D0C1B1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-18-A7   (hex)		Samsung Electronics Co.,Ltd
+8018A7     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3dong, Yeongtong-Gu
+				Suwon  Gyeonggi-Do  443742
+				KR
+
+F4-7B-5E   (hex)		Samsung Electronics Co.,Ltd
+F47B5E     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3dong, Yeongtong-Gu
+				Suwon  Gyeonggi-Do  443742
+				KR
+
+70-F9-27   (hex)		Samsung Electronics Co.,Ltd
+70F927     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-E7-1C   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+34E71C     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+88-6A-B1   (hex)		vivo Mobile Communication Co., Ltd.
+886AB1     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+6C-1E-90   (hex)		Hansol Technics Co., Ltd.
+6C1E90     (base 16)		Hansol Technics Co., Ltd.
+				55, Hansam-ro, Deoksan-Myeon
+				Jincheon-Gun  Chungbuk  27850
+				KR
+
+00-5A-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+005A13     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-50-06   (hex)		Samsung Electronics Co.,Ltd
+C45006     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-32-9B   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+88329B     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong    24180
+				US
+
+14-49-E0   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+1449E0     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong    24180
+				US
+
+D0-25-44   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+D02544     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+BC-44-86   (hex)		Samsung Electronics Co.,Ltd
+BC4486     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+20-D3-90   (hex)		Samsung Electronics Co.,Ltd
+20D390     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-01-C2   (hex)		Samsung Electronics Co.,Ltd
+9401C2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-FC-9F   (hex)		Samsung Electronics Co.,Ltd
+50FC9F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+38-0B-40   (hex)		Samsung Electronics Co.,Ltd
+380B40     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B8-FF-61   (hex)		Apple, Inc.
+B8FF61     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-61-24   (hex)		Pason Systems
+946124     (base 16)		Pason Systems
+				6130 - 3rd Street S.E.
+				Calgary  Alberta  T2H1K4
+				CA
+
+F0-72-8C   (hex)		Samsung Electronics Co.,Ltd
+F0728C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-AA-8B   (hex)		Samsung Electronics Co.,Ltd
+34AA8B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-DB-ED   (hex)		Samsung Electronics Co.,Ltd
+24DBED     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-DE-51   (hex)		 IntegraOptics
+C8DE51     (base 16)		 IntegraOptics
+				745 Albany Shaker Rd
+				Latham   NY  12110
+				US
+
+98-F0-58   (hex)		Lynxspring, Incl.
+98F058     (base 16)		Lynxspring, Incl.
+				1210 NE Windsor Drive
+				Lees Summit  MO  64086
+				US
+
+68-C4-4D   (hex)		Motorola Mobility LLC, a Lenovo Company
+68C44D     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+40-0D-10   (hex)		ARRIS Group, Inc.
+400D10     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+94-3D-C9   (hex)		Asahi Net, Inc.
+943DC9     (base 16)		Asahi Net, Inc.
+				Ginza 4-12-15 Chuo-ku
+				Tokyo    104-0061
+				JP
+
+44-04-44   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+440444     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+00-17-7E   (hex)		Meshcom Technologies Inc.
+00177E     (base 16)		Meshcom Technologies Inc.
+				Meritullinkatu 1 C
+				Helsinki    00170
+				FI
+
+A0-04-60   (hex)		NETGEAR
+A00460     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+98-84-E3   (hex)		Texas Instruments
+9884E3     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+38-D2-69   (hex)		Texas Instruments
+38D269     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+C8-FD-19   (hex)		Texas Instruments
+C8FD19     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+50-8C-B1   (hex)		Texas Instruments
+508CB1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+C4-F5-A5   (hex)		Kumalift Co., Ltd.
+C4F5A5     (base 16)		Kumalift Co., Ltd.
+				7-2-6 Saito-Asagi
+				Ibaraki  Osaka  567-0085
+				JP
+
+70-B1-4E   (hex)		ARRIS Group, Inc.
+70B14E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+30-44-87   (hex)		Hefei Radio Communication Technology Co., Ltd 
+304487     (base 16)		Hefei Radio Communication Technology Co., Ltd 
+				No.108, YinXing Road, High-tech Development Zone
+				Hefei  Anhui  230088
+				CN
+
+2C-9D-1E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C9D1E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-81-C4   (hex)		Cisco Systems, Inc
+0081C4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-E8-76   (hex)		IEEE Registration Authority
+58E876     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D0-37-42   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+D03742     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+				Coolpad Information Harbor, 2nd Mengxi road, Hi-Tech Industrial Park(North), Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+00-17-65   (hex)		Nortel Networks
+001765     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-15-E8   (hex)		Nortel Networks
+0015E8     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-15-9B   (hex)		Nortel Networks
+00159B     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-0F-06   (hex)		Nortel Networks
+000F06     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+84-B5-41   (hex)		Samsung Electronics Co.,Ltd
+84B541     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-6F-64   (hex)		Samsung Electronics Co.,Ltd
+006F64     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-66-72   (hex)		Samsung Electronics Co.,Ltd
+DC6672     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+EC-8E-B5   (hex)		Hewlett Packard
+EC8EB5     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+70-AF-6A   (hex)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
+70AF6A     (base 16)		SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
+				ORIENTAL CYBERPORT, HIGHTECH 6 ROAD
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+20-F5-43   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+20F543     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+E0-DD-C0   (hex)		vivo Mobile Communication Co., Ltd.
+E0DDC0     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+00-16-4D   (hex)		Alcatel-Lucent IPD
+00164D     (base 16)		Alcatel-Lucent IPD
+				701 E. Middlefield RD.
+				Mountain View  CA  94043
+				US
+
+00-1A-F0   (hex)		Alcatel-Lucent IPD
+001AF0     (base 16)		Alcatel-Lucent IPD
+				701 E. Middlefield Rd.
+				Mountain View  CA  94943
+				US
+
+38-52-1A   (hex)		Nokia
+38521A     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-1E-40   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
+001E40     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
+				22F, lnfo Tech Building, NO.1555 Kongjiang Road,
+				Shanghai    200092
+				CN
+
+94-D7-23   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
+94D723     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
+				22F Info-Tech Building
+				Shanghai    200092
+				CN
+
+C4-04-7B   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+C4047B     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Shenzhen University-town Business Park,Lishan Road,Taoyuan Street
+				Shenzhen  Guangdong  518055
+				CN
+
+20-F4-1B   (hex)		Shenzhen Bilian electronic CO.,LTD
+20F41B     (base 16)		Shenzhen Bilian electronic CO.,LTD
+				NO 268, Fuqian Rd,Jutang Community,Guanlan town,
+				ShenZhen  Guangdong  518110
+				CN
+
+FC-FA-F7   (hex)		Shanghai Baud Data Communication Co.,Ltd.
+FCFAF7     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
+				NO.123 JULI RD
+				SHANGHAI    201203
+				CN
+
+D8-26-B9   (hex)		Guangdong Coagent Electronics S&amp;T Co.,Ltd.
+D826B9     (base 16)		Guangdong Coagent Electronics S&amp;T Co.,Ltd.
+				Section C,Xi Nan Industrial Zone Sanshui
+				Foshan  Guangdong  528133
+				CN
+
+AC-9C-E4   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+AC9CE4     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+00-23-3E   (hex)		Alcatel-Lucent IPD
+00233E     (base 16)		Alcatel-Lucent IPD
+				701 E. Middlefield Rd.
+				Mountain View  CA  94043
+				US
+
+6C-BE-E9   (hex)		Alcatel-Lucent IPD
+6CBEE9     (base 16)		Alcatel-Lucent IPD
+				701 E. Middlefield Rd.
+				Mountain View  CA  94043
+				US
+
+00-15-40   (hex)		Nortel Networks
+001540     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1E-CA   (hex)		Nortel Networks
+001ECA     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-13-0A   (hex)		Nortel Networks
+00130A     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1F-0A   (hex)		Nortel Networks
+001F0A     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+F8-E6-1A   (hex)		Samsung Electronics Co.,Ltd
+F8E61A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-91-C8   (hex)		zte corporation
+A091C8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+6C-A8-58   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+6CA858     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+CC-2D-8C   (hex)		LG ELECTRONICS INC
+CC2D8C     (base 16)		LG ELECTRONICS INC
+				19-1,Cheongho-Ri,Jinwi-Myeon
+				Pyeongtaek  Gyeonggi-Do  451-713
+				KR
+
+98-D6-F7   (hex)		LG Electronics (Mobile Communications)
+98D6F7     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+70-05-14   (hex)		LG Electronics (Mobile Communications)
+700514     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+E8-92-A4   (hex)		LG Electronics (Mobile Communications)
+E892A4     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+10-68-3F   (hex)		LG Electronics (Mobile Communications)
+10683F     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+40-B0-FA   (hex)		LG Electronics (Mobile Communications)
+40B0FA     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-25-E5   (hex)		LG Electronics (Mobile Communications)
+0025E5     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-21-FB   (hex)		LG Electronics (Mobile Communications)
+0021FB     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+34-FC-EF   (hex)		LG Electronics (Mobile Communications)
+34FCEF     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+BC-F5-AC   (hex)		LG Electronics (Mobile Communications)
+BCF5AC     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+A8-4E-3F   (hex)		Hitron Technologies. Inc
+A84E3F     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+0C-48-85   (hex)		LG Electronics (Mobile Communications)
+0C4885     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-22-A9   (hex)		LG Electronics (Mobile Communications)
+0022A9     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+2C-6A-6F   (hex)		IEEE Registration Authority
+2C6A6F     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+08-D8-33   (hex)		Shenzhen RF Technology Co., Ltd
+08D833     (base 16)		Shenzhen RF Technology Co., Ltd
+				5/F,Building 4 ,Baokun science and Technology Industrial Park,Dalang Street,Baoan District,Shenzhen,China
+				Shenzhen  Guangdong  518109
+				CN
+
+A4-60-32   (hex)		MRV Communications (Networks) LTD
+A46032     (base 16)		MRV Communications (Networks) LTD
+				Hayetzira 6
+				Yokneam  Yokneam  20692
+				IL
+
+40-66-7A   (hex)		mediola - connected living AG
+40667A     (base 16)		mediola - connected living AG
+				Nobelring 26
+				Frankfurt am Main  Hessen  60598
+				DE
+
+68-A0-F6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68A0F6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-0E-5C   (hex)		ARRIS Group, Inc.
+000E5C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+84-5D-D7   (hex)		Shenzhen Netcom Electronics Co.,Ltd
+845DD7     (base 16)		Shenzhen Netcom Electronics Co.,Ltd
+				8/F,1 Building,Finance Base,No.8,Kefa Road,High-Tech Park
+				Shenzhen  Guangdong  518057
+				CN
+
+00-B0-64   (hex)		Cisco Systems, Inc
+00B064     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-2A-83   (hex)		Samsung Electronics Co.,Ltd
+9C2A83     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-02-10   (hex)		LG Innotek
+C80210     (base 16)		LG Innotek
+				Jangduk-dong 978-1
+				Gwang-ju  Gwangsan-gu  506-731
+				KR
+
+A0-39-F7   (hex)		LG Electronics (Mobile Communications)
+A039F7     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+1C-CA-E3   (hex)		IEEE Registration Authority
+1CCAE3     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E4-95-6E   (hex)		IEEE Registration Authority
+E4956E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B4-37-D1   (hex)		IEEE Registration Authority
+B437D1     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-55-DA   (hex)		IEEE Registration Authority
+0055DA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+78-C2-C0   (hex)		IEEE Registration Authority
+78C2C0     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-0E-E8   (hex)		Zioncom Electronics (Shenzhen) Ltd.
+000EE8     (base 16)		Zioncom Electronics (Shenzhen) Ltd.
+				West wing 5/F ., Block 1, GaoXin South Ring Rd/Keji South Rd,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-C0-95   (hex)		ZNYX Networks, Inc.
+00C095     (base 16)		ZNYX Networks, Inc.
+				48421 Milmont Drive
+				Fremont  CA  94538
+				US
+
+00-20-25   (hex)		CONTROL TECHNOLOGY, INC.
+002025     (base 16)		CONTROL TECHNOLOGY, INC.
+				5734 MIDDLEBROOK PIKE
+				KNOXVILLE  TN  37921
+				US
+
+00-1A-6B   (hex)		Universal Global Scientific Industrial Co., Ltd.
+001A6B     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351,SEC.1, TAIPING RD.
+				TSAOTUEN,  NANTOU  54261
+				TW
+
+00-16-41   (hex)		Universal Global Scientific Industrial Co., Ltd.
+001641     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351,SEC.1, TAIPING RD.
+				TSAOTUEN,  NANTOU  54261
+				TW
+
+00-10-C6   (hex)		Universal Global Scientific Industrial Co., Ltd.
+0010C6     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351,SEC.1, TAIPING RD.
+				TSAOTUEN,  NANTOU  54261
+				TW
+
+00-24-7E   (hex)		Universal Global Scientific Industrial Co., Ltd.
+00247E     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351,SEC.1,  TAIPING RD.
+				nantou  NANTOU  54261
+				TW
+
+00-DD-0A   (hex)		UNGERMANN-BASS INC.
+00DD0A     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+68-35-63   (hex)		SHENZHEN LIOWN ELECTRONICS CO.,LTD.
+683563     (base 16)		SHENZHEN LIOWN ELECTRONICS CO.,LTD.
+				ROOM 301, NO.7, GONGYE 3RD ROAD
+				SHEKOU, NANSHAN DISTRICT  SHENZHEN  518054
+				CN
+
+00-40-72   (hex)		Applied Innovation Inc.
+004072     (base 16)		Applied Innovation Inc.
+				5800 Innovation Drive
+				Dublin  OH  43016-3271
+				US
+
+00-19-38   (hex)		UMB Communications Co., Ltd.
+001938     (base 16)		UMB Communications Co., Ltd.
+				1010, 5, ACE Techno Tower, 197-22, Guro-dong, Guro-gu
+				Seoul    151-766
+				KR
+
+44-39-C4   (hex)		Universal Global Scientific Industrial Co., Ltd.
+4439C4     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141,Lane351,Taiping Rd.Sec.1
+				nan tou    542
+				TW
+
+40-2C-F4   (hex)		Universal Global Scientific Industrial Co., Ltd.
+402CF4     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Taiping Rd. Sec. 1, Tsao Tuen, 
+				Nan-Tou Hsien,    542
+				TW
+
+00-1E-37   (hex)		Universal Global Scientific Industrial Co., Ltd.
+001E37     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, LANE 351,SEC.1, TAIPING RD.
+				TSAOTUEN,  NANTOU  54261
+				TW
+
+1C-57-D8   (hex)		Kraftway Corporation PLC
+1C57D8     (base 16)		Kraftway Corporation PLC
+				16, 3rd Mytischinskaya st.
+				Moscow    129626
+				RU
+
+00-23-18   (hex)		Toshiba
+002318     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+B8-6B-23   (hex)		Toshiba
+B86B23     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+00-08-F1   (hex)		Voltaire
+0008F1     (base 16)		Voltaire
+				9 Hamenofim st.
+				Herzelia    46725
+				IL
+
+00-19-9D   (hex)		Vizio, Inc
+00199D     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+00-E0-8B   (hex)		QLogic Corporation
+00E08B     (base 16)		QLogic Corporation
+				26600 Laguna Hills Dr.
+				Aliso Viejo  CA  92656
+				US
+
+D8-EB-97   (hex)		TRENDnet, Inc.
+D8EB97     (base 16)		TRENDnet, Inc.
+				20675 Manhattan Place
+				Torrance  CA  90501
+				US
+
+00-1C-7E   (hex)		Toshiba
+001C7E     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome    1988710
+				JP
+
+00-25-17   (hex)		Venntis, LLC
+002517     (base 16)		Venntis, LLC
+				11301 James Street
+				Holland  MI  49424
+				US
+
+00-60-0F   (hex)		Westell Technologies Inc.
+00600F     (base 16)		Westell Technologies Inc.
+				750 N Commons Dr
+				Aurora  IL  60504
+				US
+
+00-18-3A   (hex)		Westell Technologies Inc.
+00183A     (base 16)		Westell Technologies Inc.
+				750 N Commons Dr
+				Aurora  IL  60504
+				US
+
+60-02-B4   (hex)		Wistron Neweb Corporation
+6002B4     (base 16)		Wistron Neweb Corporation
+				No.20 Park Avenue II
+				Hsinchu    308
+				TW
+
+94-DF-4E   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
+94DF4E     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
+				168# First Avence,Kunshan Export Processing Zone ,China
+				Kunsha  JiangSu  215300
+				CN
+
+98-EE-CB   (hex)		Wistron Infocomm (Zhongshan) Corporation
+98EECB     (base 16)		Wistron Infocomm (Zhongshan) Corporation
+				No.38,East Keji Road,Zhongshan Torch Development Zone,Zhongshan City,Guangdong,China
+				Zhongshan  Guangdong  528437
+				CN
+
+00-1B-FE   (hex)		Zavio Inc.
+001BFE     (base 16)		Zavio Inc.
+				No.1,Lising 1st Rd. Science Based Industrial Park,
+				Hsinchu    300
+				TW
+
+54-10-EC   (hex)		Microchip Technology Inc.
+5410EC     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+00-04-A3   (hex)		Microchip Technology Inc.
+0004A3     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+78-9C-E7   (hex)		Shenzhen Aikede Technology Co., Ltd
+789CE7     (base 16)		Shenzhen Aikede Technology Co., Ltd
+				Room 9B,Block B,Neptunus Mansion,
+				Shenzhen  Guangdong  518000
+				CN
+
+50-9F-3B   (hex)		OI ELECTRIC CO.,LTD
+509F3B     (base 16)		OI ELECTRIC CO.,LTD
+				7-3-16 KIKUNA
+				YOKOHAMA  KANAGAWA-KEN  222-0011
+				JP
+
+44-6E-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+446EE5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-F7-C7   (hex)		Technicolor CH USA Inc.
+88F7C7     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+68-3E-34   (hex)		MEIZU Technology Co., Ltd.
+683E34     (base 16)		MEIZU Technology Co., Ltd.
+				MEIZU Tech Bldg., Technology & Innovation Coast
+				Zhuhai  Guangdong  519085
+				CN
+
+C8-77-8B   (hex)		Mercury Systems – Trusted Mission Solutions, Inc. 
+C8778B     (base 16)		Mercury Systems – Trusted Mission Solutions, Inc. 
+				47200 Bayside Pkwy
+				Fremont  CA  94538
+				US
+
+00-04-4B   (hex)		NVIDIA
+00044B     (base 16)		NVIDIA
+				3535 Monroe St.
+				Santa Clara  CA  95051
+				US
+
+AC-9B-0A   (hex)		Sony Corporation
+AC9B0A     (base 16)		Sony Corporation
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+10-4F-A8   (hex)		Sony Corporation
+104FA8     (base 16)		Sony Corporation
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+00-0B-6B   (hex)		Wistron Neweb Corporation
+000B6B     (base 16)		Wistron Neweb Corporation
+				No. 10-1, Li-Hsin Road I, Science-based
+				Hsinchu    300
+				TW
+
+AC-04-0B   (hex)		Peloton Interactive, Inc
+AC040B     (base 16)		Peloton Interactive, Inc
+				158 W 27th St, 4th Fl
+				New York  NY  10001
+				US
+
+48-FC-B6   (hex)		LAVA INTERNATIONAL(H.K) LIMITED
+48FCB6     (base 16)		LAVA INTERNATIONAL(H.K) LIMITED
+				UNIT L 1/F MAU LAM COMM BLDG 16-18 MAU LAM ST, JORDAN KL, HK
+				Hong kong    999077
+				CN
+
+B0-E2-35   (hex)		Xiaomi Communications Co Ltd
+B0E235     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+40-C7-29   (hex)		Sagemcom Broadband SAS
+40C729     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+14-C9-13   (hex)		LG Electronics
+14C913     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+F8-A0-97   (hex)		ARRIS Group, Inc.
+F8A097     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+FC-23-25   (hex)		EosTek (Shenzhen) Co., Ltd.
+FC2325     (base 16)		EosTek (Shenzhen) Co., Ltd.
+				Room 306, Complex Building Tsinghua High-Tech Park
+				Shenzhen  Guangdong  518057
+				CN
+
+FC-3D-93   (hex)		LONGCHEER TELECOMMUNICATION LIMITED
+FC3D93     (base 16)		LONGCHEER TELECOMMUNICATION LIMITED
+				Building 1,No.401,Caobao Rd
+				Shanghai  Xuhui District  200233
+				CN
+
+D8-E0-B8   (hex)		BULAT LLC
+D8E0B8     (base 16)		BULAT LLC
+				Zagorievsiy proezd 1, room 7
+				Moscow    115547
+				RU
+
+60-31-97   (hex)		Zyxel Communications Corporation
+603197     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+58-8B-F3   (hex)		Zyxel Communications Corporation
+588BF3     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+50-67-F0   (hex)		Zyxel Communications Corporation
+5067F0     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+00-13-49   (hex)		Zyxel Communications Corporation
+001349     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+E0-98-61   (hex)		Motorola Mobility LLC, a Lenovo Company
+E09861     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+9C-8E-CD   (hex)		Amcrest Technologies
+9C8ECD     (base 16)		Amcrest Technologies
+				16727 Park Row
+				Houston  TX  77084
+				US
+
+A0-09-ED   (hex)		Avaya Inc
+A009ED     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+00-14-B4   (hex)		General Dynamics United Kingdom Ltd
+0014B4     (base 16)		General Dynamics United Kingdom Ltd
+				Castleham Road
+				St Leonards on Sea  East Sussex  TN38 9NJ
+				GB
+
+A0-B4-37   (hex)		 GD Mission Systems
+A0B437     (base 16)		 GD Mission Systems
+				8220 EAST ROOSEVELT ST R2121
+				SCOTTSDALE  AZ  85257
+				US
+
+8C-6D-50   (hex)		SHENZHEN MTC CO LTD
+8C6D50     (base 16)		SHENZHEN MTC CO LTD
+				5th Floor, 3rd Building, SHENZHEN MTC Industrial Park, XiaLilang Rd, Nanwan Street, Long’gang District
+				Shenzhen  Guangdong  518100
+				CN
+
+00-F6-63   (hex)		Cisco Systems, Inc
+00F663     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-60-90   (hex)		Samsung Electronics Co.,Ltd
+A06090     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-76-5E   (hex)		Samsung Electronics Co.,Ltd
+BC765E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E0-A8-B8   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+E0A8B8     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+				,Le Shi Building, No.105 Yaojiayuan Road,Chaoyang District,Beijing,China
+				beijing  beijing  100025
+				CN
+
+F4-5B-73   (hex)		Wanjiaan Interconnected Technology Co., Ltd
+F45B73     (base 16)		Wanjiaan Interconnected Technology Co., Ltd
+				2nd Floor,Incubation Building, Science Development Institute of China, High-tech South 1st Street, Nanshan District
+				Shenzhen  Guangdong  518040
+				CN
+
+B8-81-98   (hex)		Intel Corporate
+B88198     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+B0-D7-CC   (hex)		Tridonic GmbH & Co KG
+B0D7CC     (base 16)		Tridonic GmbH & Co KG
+				Färbergasse 15
+				Dornbirn  Vorarlberg  6851
+				AT
+
+2C-DD-A3   (hex)		Point Grey Research Inc.
+2CDDA3     (base 16)		Point Grey Research Inc.
+				305-1847 West Broadway
+				Vancouver  British Columbia V6J 1Y6  
+				CA
+
+00-80-9F   (hex)		ALE International
+00809F     (base 16)		ALE International
+				32 avenue Kléber
+				Colombes    92700
+				FR
+
+48-C6-63   (hex)		GTO Access Systems LLC
+48C663     (base 16)		GTO Access Systems LLC
+				3121 Hartsfield Road
+				Tallahassee  FL  32303
+				US
+
+00-5F-86   (hex)		Cisco Systems, Inc
+005F86     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+38-1D-D9   (hex)		FN-LINK TECHNOLOGY LIMITED
+381DD9     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+1C-B9-C4   (hex)		Ruckus Wireless
+1CB9C4     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+8C-59-C3   (hex)		ADB Italia 
+8C59C3     (base 16)		ADB Italia 
+				Viale Sarca 222
+				Milan  Italy  20126
+				IT
+
+B8-24-F0   (hex)		SOYO Technology Development Co., Ltd.
+B824F0     (base 16)		SOYO Technology Development Co., Ltd.
+				4F, 9Bldg, Longbi Industry Zone, Longgang Dist, Shenzhen City, Guangdong Pro, China
+				Shenzhen City   Guangdong Pro  518129
+				CN
+
+D8-5B-2A   (hex)		Samsung Electronics Co.,Ltd
+D85B2A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-A8-9A   (hex)		Sunitec Enterprise Co.,Ltd
+FCA89A     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+1C-7B-23   (hex)		Qingdao Hisense Communications Co.,Ltd.
+1C7B23     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+00-0B-DE   (hex)		TELDIX GmbH
+000BDE     (base 16)		TELDIX GmbH
+				Grenzhoefer Weg 36
+				Heidelberg    69123
+				DE
+
+CC-D3-1E   (hex)		IEEE Registration Authority
+CCD31E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+34-B3-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+34B354     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-6E-76   (hex)		Quarion Technology Inc
+1C6E76     (base 16)		Quarion Technology Inc
+				3248 Commerce Drive
+				Newburgh  IN  47630
+				US
+
+90-C1-C6   (hex)		Apple, Inc.
+90C1C6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-0E-E6   (hex)		Chengdu Xiyida Electronic Technology Co,.Ltd
+6C0EE6     (base 16)		Chengdu Xiyida Electronic Technology Co,.Ltd
+				Room 408,Building A,No.33 Wuqing South Road,Wuhou District
+				Chengdu  Sichuan  610000
+				CN
+
+CC-50-0A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+CC500A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+D0-46-DC   (hex)		Southwest Research Institute
+D046DC     (base 16)		Southwest Research Institute
+				6220 Culebra Road
+				San Antonio  Texas  78238
+				US
+
+70-A2-B3   (hex)		Apple, Inc.
+70A2B3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-0F-24   (hex)		Apple, Inc.
+F40F24     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-57-CA   (hex)		Apple, Inc.
+4C57CA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-07-63   (hex)		Sunniwell Cyber Tech. Co., Ltd.
+000763     (base 16)		Sunniwell Cyber Tech. Co., Ltd.
+				17th Floor Haitai Building #229
+				Beijing    100083
+				CN
+
+00-62-EC   (hex)		Cisco Systems, Inc
+0062EC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+CC-16-7E   (hex)		Cisco Systems, Inc
+CC167E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-6A-B7   (hex)		Xiaomi Communications Co Ltd
+C46AB7     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-0A-ED   (hex)		HARTING Electronics GmbH
+000AED     (base 16)		HARTING Electronics GmbH
+				Wilhelm Harting Str.1
+				Espelkamp  NRW/OWL  32339
+				DE
+
+24-0A-11   (hex)		TCT mobile ltd
+240A11     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+D8-E5-6D   (hex)		TCT mobile ltd
+D8E56D     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+54-05-93   (hex)		WOORI ELEC Co.,Ltd
+540593     (base 16)		WOORI ELEC Co.,Ltd
+				#1401~03, #1411~12, Bucheon Deawoo Techno Park, D-Dong, 261,Doyak-Ro, Wonmi-Gu,Bucheon-Si
+				Gyeonggi-Do    14523
+				KR
+
+C0-2F-F1   (hex)		Volta Networks
+C02FF1     (base 16)		Volta Networks
+				109 Kingston St, 3rd Floor
+				Boston  MA  02111
+				US
+
+E8-A7-F2   (hex)		sTraffic
+E8A7F2     (base 16)		sTraffic
+				4th Fl., KTNET Building, 338 Pangyoro, Bundang-gu
+				Seongnam  Gyeonggi-do  13493
+				KR
+
+00-1F-20   (hex)		Logitech Europe SA
+001F20     (base 16)		Logitech Europe SA
+				EPFL - Quartier de l'Innovation
+				Lausanne  CH  1015
+				CH
+
+74-1F-4A   (hex)		Hangzhou H3C Technologies Co., Limited
+741F4A     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District,
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+E4-1D-2D   (hex)		Mellanox Technologies, Inc.
+E41D2D     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+0C-DA-41   (hex)		Hangzhou H3C Technologies Co., Limited
+0CDA41     (base 16)		Hangzhou H3C Technologies Co., Limited
+				310 Liuhe Road, Zhijiang Science Park
+				Hangzhou  Zhejiang,   310053
+				CN
+
+74-25-8A   (hex)		Hangzhou H3C Technologies Co., Limited
+74258A     (base 16)		Hangzhou H3C Technologies Co., Limited
+				310 Liuhe Road, Zhijiang Science Park
+				Hangzhou  Zhejiang,   310053
+				CN
+
+A0-B6-62   (hex)		Acutvista Innovation Co., Ltd.
+A0B662     (base 16)		Acutvista Innovation Co., Ltd.
+				2F-1, No. 20 Alley 1, Lane 768, Sec. 4
+				Taipei City    11577
+				TW
+
+E4-2F-56   (hex)		OptoMET GmbH
+E42F56     (base 16)		OptoMET GmbH
+				Pfungstaedter Str. 92
+				Darmstadt    64297
+				DE
+
+F8-DA-0C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+F8DA0C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+1C-1B-0D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+1C1B0D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+48-E9-F1   (hex)		Apple, Inc.
+48E9F1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-38-09   (hex)		Ericsson AB
+903809     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+00-A0-06   (hex)		IMAGE DATA PROCESSING SYSTEM GROUP
+00A006     (base 16)		IMAGE DATA PROCESSING SYSTEM GROUP
+				SHINTOYOFUTA 2-1
+				KASHIWA-CITY, CHIBA 277    
+				JP
+
+C8-3F-26   (hex)		Microsoft Corporation
+C83F26     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+34-97-F6   (hex)		ASUSTek COMPUTER INC.
+3497F6     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+50-68-0A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+50680A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-22-38   (hex)		LOGIPLUS
+002238     (base 16)		LOGIPLUS
+				1, RUE CLEMENT ADER
+				GOSSELIES  HAINAUT  B-6041
+				BE
+
+00-0C-49   (hex)		Dangaard Telecom Denmark A/S
+000C49     (base 16)		Dangaard Telecom Denmark A/S
+				Industrivej 1
+				Padborg    DK-6330
+				DK
+
+00-08-B9   (hex)		Kaonmedia CO., LTD.
+0008B9     (base 16)		Kaonmedia CO., LTD.
+				#113 Imae 1-Dong, Bundang-Gu
+				Sungnam-City  Kyungki-Do  463-829
+				KR
+
+60-B3-87   (hex)		Synergics Technologies GmbH
+60B387     (base 16)		Synergics Technologies GmbH
+				Hummelgasse 74-76/19
+				Vienna  Austria  1130
+				AT
+
+A4-D8-CA   (hex)		HONG KONG WATER WORLD TECHNOLOGY CO. LIMITED
+A4D8CA     (base 16)		HONG KONG WATER WORLD TECHNOLOGY CO. LIMITED
+				RM B-C, 24/F, GOLDEN BEAR INDUSTRIAL CENTRE, 66-82  CHAI WAN KOK STREET,TSUEN WAN. N.T.
+				Hong Kong    999077
+				HK
+
+80-19-FE   (hex)		JianLing Technology CO., LTD
+8019FE     (base 16)		JianLing Technology CO., LTD
+				No. 383-1, Sec. 2, Jinling Rd., Pingzhen Dist.,
+				Tao Yuan    324
+				TW
+
+60-B4-F7   (hex)		Plume Design Inc
+60B4F7     (base 16)		Plume Design Inc
+				200 California Ave
+				Palo Alto  CA  94306
+				US
+
+48-7A-DA   (hex)		Hangzhou H3C Technologies Co., Limited
+487ADA     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+00-1F-45   (hex)		Enterasys
+001F45     (base 16)		Enterasys
+				50 Minuteman Road
+				Andover  MA  01810
+				US
+
+00-1E-90   (hex)		Elitegroup Computer Systems Co.,Ltd.
+001E90     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No.239, Sec. 2, Ti Ding Blvd
+				Taipei    11493
+				TW
+
+00-22-B1   (hex)		Elbit Systems Ltd.
+0022B1     (base 16)		Elbit Systems Ltd.
+				p.o.b. 539
+				Haifa    36925
+				IL
+
+00-00-B4   (hex)		Edimax Technology Co. Ltd.
+0000B4     (base 16)		Edimax Technology Co. Ltd.
+				No. 278, Xinhu 1st Road
+				Taipei City  Neihu Dist  248
+				TW
+
+00-16-8F   (hex)		GN Netcom A/S
+00168F     (base 16)		GN Netcom A/S
+				Metalbuen 66
+				Ballerup  Skovlunde  DK-2750
+				DK
+
+00-0D-87   (hex)		Elitegroup Computer Systems Co.,Ltd.
+000D87     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No.22, Alley 38, Lane 91, Sec. 1, Nei Hu
+				Taipei    114
+				TW
+
+10-78-D2   (hex)		Elitegroup Computer Systems Co.,Ltd.
+1078D2     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				NO. 239, Sec. 2, Ti Ding Blvd.
+				Taipei  Taiwan  11493
+				TW
+
+00-21-97   (hex)		Elitegroup Computer Systems Co.,Ltd.
+002197     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				NO.239, Sec. 2, Ti Ding Blvd.,
+				Taipei    11493
+				TW
+
+E4-F3-F5   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+E4F3F5     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+A0-8C-FD   (hex)		Hewlett Packard
+A08CFD     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+00-0E-03   (hex)		Emulex Corporation
+000E03     (base 16)		Emulex Corporation
+				3333 Susan Street
+				Costa Mesa  CA  92626
+				US
+
+00-CA-E5   (hex)		Cisco Systems, Inc
+00CAE5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-42-68   (hex)		Cisco Systems, Inc
+004268     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+48-83-C7   (hex)		Sagemcom Broadband SAS
+4883C7     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+40-16-3B   (hex)		Samsung Electronics Co.,Ltd
+40163B     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+44-65-0D   (hex)		Amazon Technologies Inc.
+44650D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+D4-F2-07   (hex)		DIAODIAO(Beijing)Technology CO.,Ltd
+D4F207     (base 16)		DIAODIAO(Beijing)Technology CO.,Ltd
+				48D Image Base, No 3 Guangqu Road, Chaoyang District, Beijing, China
+				Beijing    100124
+				CN
+
+D4-AD-2D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D4AD2D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+F0-8C-FB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+F08CFB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+48-55-5F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+48555F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+FC-3F-7C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FC3F7C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-4C-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+384C4F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-BF-3F   (hex)		Shenzhen Lencotion Technology Co.,Ltd
+0CBF3F     (base 16)		Shenzhen Lencotion Technology Co.,Ltd
+				LongGang,Buji Xia Shuijing,Hubei Baofeng Lndustrial Area,2/F,TowerB
+				shenzhen  Guangdong  518112
+				CN
+
+50-FF-99   (hex)		IEEE Registration Authority
+50FF99     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+84-E3-23   (hex)		Green Wave Telecommunication SDN BHD
+84E323     (base 16)		Green Wave Telecommunication SDN BHD
+				8, 12, 9 - Menara Mutiara, Bangsar, Jalan Liku, Off Jalan Bangsar
+				Kuala Lumpur    59100
+				MY
+
+70-5A-9E   (hex)		Technicolor CH USA Inc.
+705A9E     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+04-A3-16   (hex)		Texas Instruments
+04A316     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+14-0C-5B   (hex)		PLNetworks
+140C5B     (base 16)		PLNetworks
+				B-613, Tancheonsang-ro 164(Sigma 2)
+				Seongnam-si  Bundang-gu, Gyeonggi-do  13631
+				KR
+
+00-17-06   (hex)		Techfaithwireless Communication Technology Limited.
+001706     (base 16)		Techfaithwireless Communication Technology Limited.
+				2/F M8 West No.1 Jiu Xian Qiao Dong Road,
+				Beijing    100016
+				CN
+
+FC-08-4A   (hex)		FUJITSU LIMITED
+FC084A     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+BC-98-89   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+BC9889     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+24-61-5A   (hex)		China Mobile Group Device Co.,Ltd.
+24615A     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+40-5E-E1   (hex)		Shenzhen H&T Intelligent Control Co.,Ltd.
+405EE1     (base 16)		Shenzhen H&T Intelligent Control Co.,Ltd.
+				D-Zone,10/F,Shenzhen Academy of Aerospace Technology,Hi-Tech Park at Nanshan District,Shenzhen,China 
+				Shenzhen    518000
+				CN
+
+00-25-78   (hex)		JSC Concern Sozvezdie
+002578     (base 16)		JSC Concern Sozvezdie
+				Plekhanovskaya st., 14
+				Voronezh    394018
+				RU
+
+30-B4-9E   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+30B49E     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+C8-38-70   (hex)		Samsung Electronics Co.,Ltd
+C83870     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-55-3A   (hex)		QianGua Corp.
+1C553A     (base 16)		QianGua Corp.
+				Room 1106, block B,No.391,Gui Ping Road
+				Xu Hui District  ShangHai  200223
+				CN
+
+34-E7-0B   (hex)		HAN Networks Co., Ltd
+34E70B     (base 16)		HAN Networks Co., Ltd
+				5F,#37 Building,#8 Dongbeiwang Eest Road
+				Haidian District  Beijing  100193
+				CN
+
+00-78-88   (hex)		Cisco Systems, Inc
+007888     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+90-03-25   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+900325     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+98-E7-F5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+98E7F5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-5B-DA   (hex)		CliniCare LTD
+085BDA     (base 16)		CliniCare LTD
+				HaSadna 11 Suite 207
+				Ra'anana    4365006
+				IL
+
+1C-C0-35   (hex)		PLANEX COMMUNICATIONS INC.
+1CC035     (base 16)		PLANEX COMMUNICATIONS INC.
+				Planex Volta Bldg., 2-11-9 Ebisu-Nishi,Shibuya-ku,Tokyo 150-0021,Japan
+				Tokyo  Tokyo  150-0021
+				JP
+
+34-54-3C   (hex)		TAKAOKA TOKO CO.,LTD.
+34543C     (base 16)		TAKAOKA TOKO CO.,LTD.
+				8F,SIA TOYOSU PRIME SQUARE,5-6-36,Toyosu
+				Koto-ku  Tokyo  1350061
+				JP
+
+18-66-DA   (hex)		Dell Inc.
+1866DA     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+58-32-77   (hex)		Reliance Communications LLC
+583277     (base 16)		Reliance Communications LLC
+				555 Wireless Blvd
+				Hauppauge  NY  11788
+				US
+
+24-8A-07   (hex)		Mellanox Technologies, Inc.
+248A07     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+9C-9D-5D   (hex)		Raden Inc
+9C9D5D     (base 16)		Raden Inc
+				15 Maiden Lane
+				New York  NY  10038
+				US
+
+DC-4D-23   (hex)		MRV Comunications
+DC4D23     (base 16)		MRV Comunications
+				Hayetzira
+				Yokneam    614
+				IL
+
+00-23-B3   (hex)		Lyyn AB
+0023B3     (base 16)		Lyyn AB
+				IDEON Science Park
+				Lund    223 70
+				SE
+
+40-2E-28   (hex)		MiXTelematics
+402E28     (base 16)		MiXTelematics
+				Blaauwklip Office Park 2
+				Stellenbosch  Cape Province  7600
+				ZA
+
+6C-8F-B5   (hex)		Microsoft Mobile Oy
+6C8FB5     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				Espoo    02150
+				FI
+
+00-8E-73   (hex)		Cisco Systems, Inc
+008E73     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-C1   (hex)		Sony Interactive Entertainment Inc.
+0015C1     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+A0-9D-91   (hex)		SoundBridge
+A09D91     (base 16)		SoundBridge
+				#810, IT Convergence Industrial Bldg. 47, Gyeongdae-ro 17-Gil, Buk-gu,
+				Daegu    41566
+				KR
+
+40-B6-88   (hex)		LEGIC Identsystems AG
+40B688     (base 16)		LEGIC Identsystems AG
+				Binzackerstrasse 41
+				Wetzikon    8620
+				CH
+
+9C-D4-8B   (hex)		Innolux Technology Europe BV
+9CD48B     (base 16)		Innolux Technology Europe BV
+				Stationstraat 39G
+				Heerlen    6411NK
+				NL
+
+90-A6-2F   (hex)		NAVER
+90A62F     (base 16)		NAVER
+				NAVER Green Factory, 6, Buljeong-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-867
+				KR
+
+C0-C5-22   (hex)		ARRIS Group, Inc.
+C0C522     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+1C-9E-46   (hex)		Apple, Inc.
+1C9E46     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-E5-10   (hex)		Mechatro, Inc.
+C4E510     (base 16)		Mechatro, Inc.
+				169-28, Gasan Digital 2-ro, Geumcheon-Gu
+				Seoul    08500
+				KR
+
+18-A6-F7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+18A6F7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-35-1A   (hex)		Cisco Systems, Inc
+00351A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-AF-1F   (hex)		Cisco Systems, Inc
+00AF1F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+80-38-96   (hex)		SHARP Corporation
+803896     (base 16)		SHARP Corporation
+				1 Takumi-cho, Sakai-ku
+				Sakai City  Osaka  590-8522
+				JP
+
+00-60-EC   (hex)		HERMARY OPTO ELECTRONICS INC.
+0060EC     (base 16)		HERMARY OPTO ELECTRONICS INC.
+				201-4050 GRAVELEY ST
+				BURNABY, BC V5C-3T6    
+				CA
+
+C0-CC-F8   (hex)		Apple, Inc.
+C0CCF8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-4F-DA   (hex)		Apple, Inc.
+9C4FDA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-89-AD   (hex)		Apple, Inc.
+8489AD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-3A-7A   (hex)		Roku, Inc.
+AC3A7A     (base 16)		Roku, Inc.
+				12980 Saratoga Ave
+				Saratoga    95070
+				US
+
+B8-3E-59   (hex)		Roku, Inc.
+B83E59     (base 16)		Roku, Inc.
+				12980 Saratoga Ave.
+				Saratoga  CA  95070
+				US
+
+DC-3A-5E   (hex)		Roku, Inc.
+DC3A5E     (base 16)		Roku, Inc.
+				12980 Saratoga Ave.
+				Saratoga  CA  95070
+				US
+
+00-1A-73   (hex)		Gemtek Technology Co., Ltd.
+001A73     (base 16)		Gemtek Technology Co., Ltd.
+				No. 1 Jen Ai Road, Hsinchu Industrial Park, Hukou,
+				Hsinchu    303
+				TW
+
+00-90-4B   (hex)		Gemtek Technology Co., Ltd.
+00904B     (base 16)		Gemtek Technology Co., Ltd.
+				No. 1 Jen Ai Road,
+				Hukou, Hsinchu,  Taiwan  30352
+				TW
+
+00-1A-7F   (hex)		GCI Science & Technology Co.,LTD
+001A7F     (base 16)		GCI Science & Technology Co.,LTD
+				No.381, Xingangzhong Road,
+				guangzhou  guangdong  510310
+				CN
+
+00-18-0F   (hex)		Nokia Danmark A/S
+00180F     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V  Denmark  1790V
+				DK
+
+C8-97-9F   (hex)		Nokia Corporation
+C8979F     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+EC-F3-5B   (hex)		Nokia Corporation
+ECF35B     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+54-44-08   (hex)		Nokia Corporation
+544408     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  Varsinais-Suomi  24101
+				FI
+
+3C-C2-43   (hex)		Nokia Corporation
+3CC243     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  NA  24101
+				FI
+
+00-21-FC   (hex)		Nokia Danmark A/S
+0021FC     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790V
+				DK
+
+00-1F-5D   (hex)		Nokia Danmark A/S
+001F5D     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790V
+				DK
+
+00-1F-01   (hex)		Nokia Danmark A/S
+001F01     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790V
+				DK
+
+00-1B-EE   (hex)		Nokia Danmark A/S
+001BEE     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-19-79   (hex)		Nokia Danmark A/S
+001979     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-25-D0   (hex)		Nokia Danmark A/S
+0025D0     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-24-D4   (hex)		FREEBOX SAS
+0024D4     (base 16)		FREEBOX SAS
+				8 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+34-7E-39   (hex)		Nokia Danmark A/S
+347E39     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-50-7F   (hex)		DrayTek Corp.
+00507F     (base 16)		DrayTek Corp.
+				26, Fushing Rd.
+				Hsinchu  Hukou  303
+				TW
+
+64-77-91   (hex)		Samsung Electronics Co.,Ltd
+647791     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-E6-E7   (hex)		Samsung Electronics Co.,Ltd
+9CE6E7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-02-98   (hex)		Samsung Electronics Co.,Ltd
+9C0298     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+28-98-7B   (hex)		Samsung Electronics Co.,Ltd
+28987B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-FA-3E   (hex)		Samsung Electronics Co.,Ltd
+54FA3E     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+0C-89-10   (hex)		Samsung Electronics Co.,Ltd
+0C8910     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+78-AB-BB   (hex)		Samsung Electronics Co.,Ltd
+78ABBB     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+D8-C4-E9   (hex)		Samsung Electronics Co.,Ltd
+D8C4E9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-D1-1F   (hex)		Samsung Electronics Co.,Ltd
+BCD11F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F4-42-8F   (hex)		Samsung Electronics Co.,Ltd
+F4428F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-90-A2   (hex)		CyberTAN Technology Inc.
+0090A2     (base 16)		CyberTAN Technology Inc.
+				99, Park Avenue III
+				Hsinchu    12345
+				TW
+
+00-90-D6   (hex)		Crystal Group, Inc.
+0090D6     (base 16)		Crystal Group, Inc.
+				850 KACENA RD.
+				HIAWATHA  IA  52233
+				US
+
+44-6D-6C   (hex)		Samsung Electronics Co.,Ltd
+446D6C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-F4-6F   (hex)		Samsung Electronics Co.,Ltd
+00F46F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-71-5D   (hex)		Samsung Electronics Co.,Ltd
+0C715D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-80-DF   (hex)		Arcadyan Technology Corporation
+9C80DF     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+00-23-08   (hex)		Arcadyan Technology Corporation
+002308     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+88-03-55   (hex)		Arcadyan Technology Corporation
+880355     (base 16)		Arcadyan Technology Corporation
+				4F., No.9 , Park Avenue II
+				Hsinchu    300
+				TW
+
+34-BB-1F   (hex)		BlackBerry RTS
+34BB1F     (base 16)		BlackBerry RTS
+				451 Phillip Street
+				Waterloo  ON  N2L 3X2
+				CA
+
+40-6F-2A   (hex)		BlackBerry RTS
+406F2A     (base 16)		BlackBerry RTS
+				295 Phillip Street
+				Waterloo  Ontario  N2V 2S7
+				CA
+
+7C-1C-F1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C1CF1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-F5-57   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+78F557     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-28-61   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E02861     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-D0-4B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D0D04B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-00-31   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+480031     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-76-EA   (hex)		zte corporation
+D476EA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-17-5A   (hex)		Cisco Systems, Inc
+00175A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-96-D7   (hex)		AVM GmbH
+0896D7     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+50-6A-03   (hex)		NETGEAR
+506A03     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+10-0D-7F   (hex)		NETGEAR
+100D7F     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+50-4A-6E   (hex)		NETGEAR
+504A6E     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+4C-09-D4   (hex)		Arcadyan Technology Corporation
+4C09D4     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+18-C0-86   (hex)		Broadcom
+18C086     (base 16)		Broadcom
+				5300 California Avenue
+				Irvine  CA  92617
+				US
+
+00-10-18   (hex)		Broadcom
+001018     (base 16)		Broadcom
+				16215 ALTON PARKWAY
+				IRVINE  CA  92619-7013
+				US
+
+C8-FF-28   (hex)		Liteon Technology Corporation
+C8FF28     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+B8-16-19   (hex)		ARRIS Group, Inc.
+B81619     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+B0-77-AC   (hex)		ARRIS Group, Inc.
+B077AC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+FC-B4-E6   (hex)		ASKEY COMPUTER CORP
+FCB4E6     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				TAIWAN  NEW TAIPEI  23585
+				TW
+
+00-19-2C   (hex)		ARRIS Group, Inc.
+00192C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-19-5E   (hex)		ARRIS Group, Inc.
+00195E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1A-1B   (hex)		ARRIS Group, Inc.
+001A1B     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1A-66   (hex)		ARRIS Group, Inc.
+001A66     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1A-77   (hex)		ARRIS Group, Inc.
+001A77     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+64-ED-57   (hex)		ARRIS Group, Inc.
+64ED57     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A4-ED-4E   (hex)		ARRIS Group, Inc.
+A4ED4E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-21-1E   (hex)		ARRIS Group, Inc.
+00211E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-21-80   (hex)		ARRIS Group, Inc.
+002180     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1B-DD   (hex)		ARRIS Group, Inc.
+001BDD     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-6B   (hex)		ARRIS Group, Inc.
+001D6B     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-BE   (hex)		ARRIS Group, Inc.
+001DBE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-12-C9   (hex)		ARRIS Group, Inc.
+0012C9     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-A2   (hex)		ARRIS Group, Inc.
+0023A2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-ED   (hex)		ARRIS Group, Inc.
+0023ED     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1B-52   (hex)		ARRIS Group, Inc.
+001B52     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1E-8D   (hex)		ARRIS Group, Inc.
+001E8D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E0-46-9A   (hex)		NETGEAR
+E0469A     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+30-46-9A   (hex)		NETGEAR
+30469A     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-24-93   (hex)		ARRIS Group, Inc.
+002493     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-26-41   (hex)		ARRIS Group, Inc.
+002641     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-D0   (hex)		ARRIS Group, Inc.
+0015D0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-96   (hex)		ARRIS Group, Inc.
+001596     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+04-E6-76   (hex)		AMPAK Technology, Inc.
+04E676     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road
+				Hsinchu    30352
+				TW
+
+00-22-F4   (hex)		AMPAK Technology, Inc.
+0022F4     (base 16)		AMPAK Technology, Inc.
+				No. 8-1, Nanyuan 2nd Rd.
+				Jhongli  Taoyuan  320
+				TW
+
+00-1D-BA   (hex)		Sony Corporation
+001DBA     (base 16)		Sony Corporation
+				Gotenyama Tec,5-1-12,
+				Shinagawa-ku  Tokyo  141-0001
+				JP
+
+00-24-BE   (hex)		Sony Corporation
+0024BE     (base 16)		Sony Corporation
+				Gotenyama Tec. 5-1-12
+				Shinagawa-ku  Tokyo  141-0001
+				JP
+
+0C-FE-45   (hex)		Sony Interactive Entertainment Inc.
+0CFE45     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+20-16-D8   (hex)		Liteon Technology Corporation
+2016D8     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo
+				New Taipei City  Taipei  23585
+				TW
+
+F8-D0-AC   (hex)		Sony Interactive Entertainment Inc.
+F8D0AC     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+20-E5-64   (hex)		ARRIS Group, Inc.
+20E564     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+90-B1-34   (hex)		ARRIS Group, Inc.
+90B134     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+40-B7-F3   (hex)		ARRIS Group, Inc.
+40B7F3     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-17-E2   (hex)		ARRIS Group, Inc.
+0017E2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-16-75   (hex)		ARRIS Group, Inc.
+001675     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-0C-E5   (hex)		ARRIS Group, Inc.
+000CE5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-03-E0   (hex)		ARRIS Group, Inc.
+0003E0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-D0-C9   (hex)		ADVANTECH CO., LTD.
+00D0C9     (base 16)		ADVANTECH CO., LTD.
+				FL. 4, NO.  108-3
+				TAIPEI  TAIPEI  TAIWAN
+				TW
+
+64-87-D7   (hex)		ADB Broadband Italia
+6487D7     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+E0-B2-F1   (hex)		FN-LINK TECHNOLOGY LIMITED
+E0B2F1     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				5th Floor, A Building, Haoye Logistics Park, Shugang Channel, Bao'an District,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+0C-4C-39   (hex)		MitraStar Technology Corp.
+0C4C39     (base 16)		MitraStar Technology Corp.
+				4F No.6 Innovation Road II
+				Hsin-Chu    300
+				TW
+
+74-88-8B   (hex)		ADB Broadband Italia
+74888B     (base 16)		ADB Broadband Italia
+				via Sarca 222
+				Milano    20126
+				IT
+
+00-8C-54   (hex)		ADB Broadband Italia
+008C54     (base 16)		ADB Broadband Italia
+				VIALE SARCA 336
+				MILANO    20126
+				US
+
+00-24-7B   (hex)		Actiontec Electronics, Inc
+00247B     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-04-E3   (hex)		Accton Technology Corp
+0004E3     (base 16)		Accton Technology Corp
+				No. 1 Creation Rd. III,
+				Hsinchu  Hsinchu  TAIWAN
+				TW
+
+00-10-B5   (hex)		Accton Technology Corp
+0010B5     (base 16)		Accton Technology Corp
+				NO.1, CREATION RD. III
+				HSINCHU 300    12345
+				TW
+
+00-19-74   (hex)		16063
+001974     (base 16)		16063
+				1F , No. 21, Yanfa 2nd Rd., SBIP
+				Hsinchu City  Hsinchu  300
+				TW
+
+E8-61-7E   (hex)		Liteon Technology Corporation
+E8617E     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+18-CF-5E   (hex)		Liteon Technology Corporation
+18CF5E     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+F0-27-2D   (hex)		Amazon Technologies Inc.
+F0272D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+84-D6-D0   (hex)		Amazon Technologies Inc.
+84D6D0     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+18-FE-34   (hex)		Espressif Inc.
+18FE34     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+38-22-9D   (hex)		ADB Broadband Italia
+38229D     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+A4-52-6F   (hex)		ADB Broadband Italia
+A4526F     (base 16)		ADB Broadband Italia
+				via Sarca 222
+				Milano    20126
+				IT
+
+60-5B-B4   (hex)		AzureWave Technology Inc.
+605BB4     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.,
+				New Taipei City  Taiwan  231
+				TW
+
+64-D9-54   (hex)		Taicang T&W Electronics
+64D954     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD, Lu Du,
+				Taicang  Jiangsu  215412
+				CN
+
+5C-36-B8   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+5C36B8     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+				7/F，TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Road, Nanshan
+				Shenzhen  Guangdong   518052
+				CN
+
+00-AA-01   (hex)		Intel Corporation
+00AA01     (base 16)		Intel Corporation
+				445
+				piscataway  NJ  08554
+				US
+
+98-5F-D3   (hex)		Microsoft Corporation
+985FD3     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+00-DA-55   (hex)		Cisco Systems, Inc
+00DA55     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-E3-BC   (hex)		TCT mobile ltd
+18E3BC     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+CC-1F-C4   (hex)		InVue
+CC1FC4     (base 16)		InVue
+				15015 Lancaster Hwy
+				Charlotte  NC  28277
+				US
+
+00-AA-00   (hex)		Intel Corporation
+00AA00     (base 16)		Intel Corporation
+				5200 NE ELAM YOUNG PARKWAY
+				HILLSBORO  OR  97124
+				US
+
+00-C2-C6   (hex)		Intel Corporate
+00C2C6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+5C-D2-E4   (hex)		Intel Corporate
+5CD2E4     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+28-B2-BD   (hex)		Intel Corporate
+28B2BD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-22-43   (hex)		AzureWave Technology Inc.
+002243     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd., Xindian
+				Taipei    231
+				TW
+
+00-00-6E   (hex)		Artisoft Inc.
+00006E     (base 16)		Artisoft Inc.
+				691 EAST RIVER ROAD
+				TUCSON  AZ  85704
+				US
+
+44-87-23   (hex)		HOYA SERVICE CORPORATION
+448723     (base 16)		HOYA SERVICE CORPORATION
+				4-10-2 Nakano
+				Nakano-ku  Tokyo  164-8545
+				JP
+
+D8-6C-02   (hex)		Huaqin Telecom Technology Co.,Ltd
+D86C02     (base 16)		Huaqin Telecom Technology Co.,Ltd
+				No.1 Building,399 Keyuan Road, Zhangjian Hi-Tech Park, Pudong New Area
+				Shanghai    201203
+				CN
+
+60-BE-B5   (hex)		Motorola Mobility LLC, a Lenovo Company
+60BEB5     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				600 North US Highway 45
+				Libertyville  IL  60048
+				US
+
+F8-F1-B6   (hex)		Motorola Mobility LLC, a Lenovo Company
+F8F1B6     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				600 North US Highway 45
+				Libertyville  IL  60048
+				US
+
+3C-FD-FE   (hex)		Intel Corporate
+3CFDFE     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+A4-C4-94   (hex)		Intel Corporate
+A4C494     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+90-2E-1C   (hex)		Intel Corporate
+902E1C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+A4-34-D9   (hex)		Intel Corporate
+A434D9     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+68-5D-43   (hex)		Intel Corporate
+685D43     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+A0-36-9F   (hex)		Intel Corporate
+A0369F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+64-D4-DA   (hex)		Intel Corporate
+64D4DA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+40-25-C2   (hex)		Intel Corporate
+4025C2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+50-2D-A2   (hex)		Intel Corporate
+502DA2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+78-92-9C   (hex)		Intel Corporate
+78929C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+84-3A-4B   (hex)		Intel Corporate
+843A4B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+5C-51-4F   (hex)		Intel Corporate
+5C514F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+A4-4E-31   (hex)		Intel Corporate
+A44E31     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+4C-EB-42   (hex)		Intel Corporate
+4CEB42     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+F8-16-54   (hex)		Intel Corporate
+F81654     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+60-6C-66   (hex)		Intel Corporate
+606C66     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+4C-80-93   (hex)		Intel Corporate
+4C8093     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+AC-72-89   (hex)		Intel Corporate
+AC7289     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+44-85-00   (hex)		Intel Corporate
+448500     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+0C-D2-92   (hex)		Intel Corporate
+0CD292     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+DC-A9-71   (hex)		Intel Corporate
+DCA971     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+58-94-6B   (hex)		Intel Corporate
+58946B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-24-D7   (hex)		Intel Corporate
+0024D7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-24-D6   (hex)		Intel Corporate
+0024D6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1D-E0   (hex)		Intel Corporate
+001DE0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+4C-79-BA   (hex)		Intel Corporate
+4C79BA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+84-A6-C8   (hex)		Intel Corporate
+84A6C8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+58-91-CF   (hex)		Intel Corporate
+5891CF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+0C-8B-FD   (hex)		Intel Corporate
+0C8BFD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-21-5C   (hex)		Intel Corporate
+00215C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-21-6B   (hex)		Intel Corporate
+00216B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-22-FB   (hex)		Intel Corporate
+0022FB     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-15-17   (hex)		Intel Corporate
+001517     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+A0-A8-CD   (hex)		Intel Corporate
+A0A8CD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+5C-C5-D4   (hex)		Intel Corporate
+5CC5D4     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1E-64   (hex)		Intel Corporate
+001E64     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+F4-F1-E1   (hex)		Motorola Mobility LLC, a Lenovo Company
+F4F1E1     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 Merchandise Mart Plaza, Suite 1800
+				Chicago  IL  60654
+				US
+
+9C-D9-17   (hex)		Motorola Mobility LLC, a Lenovo Company
+9CD917     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 Merchandise Mart Plaza, Suite 1800
+				Chicago  IL  60654
+				US
+
+90-68-C3   (hex)		Motorola Mobility LLC, a Lenovo Company
+9068C3     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 Merchandise Mart Plaza, Suite 1800
+				Chicago  IL  60654
+				US
+
+3C-19-7D   (hex)		Ericsson AB
+3C197D     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+B4-E1-0F   (hex)		Dell Inc.
+B4E10F     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-22-19   (hex)		Dell Inc.
+002219     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+00-24-E8   (hex)		Dell Inc.
+0024E8     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock    78682
+				US
+
+B0-83-FE   (hex)		Dell Inc.
+B083FE     (base 16)		Dell Inc.
+				One Dell way
+				Round Rock    78682
+				US
+
+34-17-EB   (hex)		Dell Inc.
+3417EB     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+F8-BC-12   (hex)		Dell Inc.
+F8BC12     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+18-A9-9B   (hex)		Dell Inc.
+18A99B     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-13-72   (hex)		Dell Inc.
+001372     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-11-43   (hex)		Dell Inc.
+001143     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+4C-76-25   (hex)		Dell Inc.
+4C7625     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+44-A8-42   (hex)		Dell Inc.
+44A842     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-25-3C   (hex)		2Wire Inc
+00253C     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+34-EF-44   (hex)		2Wire Inc
+34EF44     (base 16)		2Wire Inc
+				1764 Automation Pkwy
+				San Jose  CA  95131
+				US
+
+B0-E7-54   (hex)		2Wire Inc
+B0E754     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose    95131
+				US
+
+F0-1F-AF   (hex)		Dell Inc.
+F01FAF     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-18-8B   (hex)		Dell Inc.
+00188B     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-08-74   (hex)		Dell Inc.
+000874     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+B8-E6-25   (hex)		2Wire Inc
+B8E625     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose    95131
+				US
+
+00-1D-5A   (hex)		2Wire Inc
+001D5A     (base 16)		2Wire Inc
+				1704 Automation Parkway
+				San  Jose    95131
+				US
+
+1C-44-19   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+1C4419     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+5C-35-3B   (hex)		Compal Broadband Networks, Inc.
+5C353B     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+28-FA-A0   (hex)		vivo Mobile Communication Co., Ltd.
+28FAA0     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+EC-DF-3A   (hex)		vivo Mobile Communication Co., Ltd.
+ECDF3A     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+F4-29-81   (hex)		vivo Mobile Communication Co., Ltd.
+F42981     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+84-F6-FA   (hex)		Miovision Technologies Incorporated
+84F6FA     (base 16)		Miovision Technologies Incorporated
+				148 Manitou Drive
+				KITCHENER  Ontario  N2C1L4
+				CA
+
+70-10-6F   (hex)		Hewlett Packard Enterprise
+70106F     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+F8-E7-1E   (hex)		Ruckus Wireless
+F8E71E     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+08-86-3B   (hex)		Belkin International Inc.
+08863B     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista  CA  90094
+				US
+
+24-7C-4C   (hex)		Herman Miller
+247C4C     (base 16)		Herman Miller
+				Unit 2, 2/F The Factory, 1 Yip Fat Street
+				Wong Chuk Hang    -
+				HK
+
+E4-6F-13   (hex)		D-Link International
+E46F13     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+2C-56-DC   (hex)		ASUSTek COMPUTER INC.
+2C56DC     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+00-31-46   (hex)		Juniper Networks
+003146     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-60-4C   (hex)		Sagemcom Broadband SAS
+00604C     (base 16)		Sagemcom Broadband SAS
+				27 RUE LEBLANC
+				CEDEX 15  PARIS  75512
+				FR
+
+00-1F-95   (hex)		Sagemcom Broadband SAS
+001F95     (base 16)		Sagemcom Broadband SAS
+				Le Ponnant de Paris
+				CEDEX  Paris  75512
+				FR
+
+00-23-48   (hex)		Sagemcom Broadband SAS
+002348     (base 16)		Sagemcom Broadband SAS
+				Le Ponnant de Paris
+				CEDEX  Paris  75512
+				FR
+
+00-26-91   (hex)		Sagemcom Broadband SAS
+002691     (base 16)		Sagemcom Broadband SAS
+				Le Ponnant de Paris
+				CEDEX  Paris  75512
+				FR
+
+98-8B-5D   (hex)		Sagemcom Broadband SAS
+988B5D     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison    92848
+				FR
+
+90-01-3B   (hex)		Sagemcom Broadband SAS
+90013B     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+7C-03-4C   (hex)		Sagemcom Broadband SAS
+7C034C     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+6C-2E-85   (hex)		Sagemcom Broadband SAS
+6C2E85     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+94-FE-F4   (hex)		Sagemcom Broadband SAS
+94FEF4     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+34-B1-F7   (hex)		Texas Instruments
+34B1F7     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+2C-FD-37   (hex)		Blue Calypso, Inc.
+2CFD37     (base 16)		Blue Calypso, Inc.
+				101 West Renner RD Suite 280
+				Richardson  TX  75082
+				US
+
+0C-61-27   (hex)		Actiontec Electronics, Inc
+0C6127     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+3C-D9-2B   (hex)		Hewlett Packard
+3CD92B     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+78-DE-E4   (hex)		Texas Instruments
+78DEE4     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-18-33   (hex)		Texas Instruments
+001833     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-18-34   (hex)		Texas Instruments
+001834     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-E3   (hex)		Texas Instruments
+0017E3     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-18-30   (hex)		Texas Instruments
+001830     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-23-D4   (hex)		Texas Instruments
+0023D4     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+BC-F6-85   (hex)		D-Link International
+BCF685     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+78-54-2E   (hex)		D-Link International
+78542E     (base 16)		D-Link International
+				1 Internal Business Park, #03-12.
+				SINGAPORE  Singapore  609917
+				TW
+
+C4-A8-1D   (hex)		D-Link International
+C4A81D     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,
+				SINGAPORE  Singapore  609917
+				SG
+
+00-21-91   (hex)		D-Link Corporation
+002191     (base 16)		D-Link Corporation
+				NO.289, Sinhu 3rd Rd.,
+				Neihu District,  Taipei City  114
+				TW
+
+AC-F1-DF   (hex)		D-Link International
+ACF1DF     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+C0-E4-22   (hex)		Texas Instruments
+C0E422     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+D0-07-90   (hex)		Texas Instruments
+D00790     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+3C-7D-B1   (hex)		Texas Instruments
+3C7DB1     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+F4-FC-32   (hex)		Texas Instruments
+F4FC32     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+90-D7-EB   (hex)		Texas Instruments
+90D7EB     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-E8   (hex)		Texas Instruments
+0017E8     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-17-83   (hex)		Texas Instruments
+001783     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+24-35-CC   (hex)		Zhongshan Scinan Internet of Things Co.,Ltd.
+2435CC     (base 16)		Zhongshan Scinan Internet of Things Co.,Ltd.
+				15/F Bldg 1·Dezhong Plaza Torch Development Zone Zhongshan·Guangdong
+				ZhongShan  GuangDong  528437
+				CN
+
+2C-30-33   (hex)		NETGEAR
+2C3033     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+CC-46-D6   (hex)		Cisco Systems, Inc
+CC46D6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-41-D2   (hex)		Cisco Systems, Inc
+0041D2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-AB-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2CAB00     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-CA-7B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A8CA7B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-BF-6D   (hex)		Zyxel Communications Corporation
+04BF6D     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+F8-8F-CA   (hex)		Google, Inc.
+F88FCA     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View    94043
+				US
+
+38-98-D8   (hex)		MERITECH CO.,LTD
+3898D8     (base 16)		MERITECH CO.,LTD
+				52-17 Sinjeon-Ro 41beon-gil
+				Giheung-gu, Yongin-City Kyungki-do    446-599
+				KR
+
+94-86-CD   (hex)		SEOUL ELECTRONICS&TELECOM
+9486CD     (base 16)		SEOUL ELECTRONICS&TELECOM
+				709, Namkwangcentrex 440-4, Cheongcheon-dong, 
+				Bupyeong-gu  Incheon  403-030
+				KR
+
+38-97-D6   (hex)		Hangzhou H3C Technologies Co., Limited
+3897D6     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+1C-A7-70   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+1CA770     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit A 13-16/F,Skyworth Bldg., Gaoxin Ave.1.S.,Nanshan District
+				ShenZhen  GuangDong  518057
+				CN
+
+44-19-B6   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+4419B6     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.469,Jianghui Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+68-DB-CA   (hex)		Apple, Inc.
+68DBCA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-66-98   (hex)		Apple, Inc.
+086698     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-54-36   (hex)		Apple, Inc.
+BC5436     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-4B-ED   (hex)		Apple, Inc.
+044BED     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-8D-C1   (hex)		Apple, Inc.
+6C8DC1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-AC-FB   (hex)		Crouzet Automatismes
+84ACFB     (base 16)		Crouzet Automatismes
+				2 rue du docteur Abel
+				Valence  France  26902
+				FR
+
+7C-BB-8A   (hex)		Nintendo Co., Ltd.
+7CBB8A     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+FC-FF-AA   (hex)		IEEE Registration Authority
+FCFFAA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+0C-D7-46   (hex)		Apple, Inc.
+0CD746     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-A3-7D   (hex)		Apple, Inc.
+60A37D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-A2-5E   (hex)		Juniper Networks
+88A25E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+54-1E-56   (hex)		Juniper Networks
+541E56     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+88-96-B6   (hex)		Global Fire Equipment S.A.
+8896B6     (base 16)		Global Fire Equipment S.A.
+				Sitio dos Barrabés, Armazém Nave Y,
+				São Brás de Alportel  Faro  8150-016
+				PT
+
+88-B8-D0   (hex)		Dongguan Koppo Electronic Co.,Ltd
+88B8D0     (base 16)		Dongguan Koppo Electronic Co.,Ltd
+				No.2, Third Road, Buxinji Industrial Area, Guanjingtou Village, Fenggang Town, Dongguan City, Guangdong Province, China
+				Dongguan    523705
+				CN
+
+60-19-71   (hex)		ARRIS Group, Inc.
+601971     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-CA-B8   (hex)		Dell Inc.
+F8CAB8     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-11-11   (hex)		Intel Corporation
+001111     (base 16)		Intel Corporation
+				2111 NE 25th Avenue
+				Hillsboro  OR  97124
+				US
+
+00-13-02   (hex)		Intel Corporate
+001302     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+6C-CA-08   (hex)		ARRIS Group, Inc.
+6CCA08     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+78-71-9C   (hex)		ARRIS Group, Inc.
+78719C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D4-05-98   (hex)		ARRIS Group, Inc.
+D40598     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E8-33-81   (hex)		ARRIS Group, Inc.
+E83381     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+8C-7F-3B   (hex)		ARRIS Group, Inc.
+8C7F3B     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+5C-57-1A   (hex)		ARRIS Group, Inc.
+5C571A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E8-89-2C   (hex)		ARRIS Group, Inc.
+E8892C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+94-87-7C   (hex)		ARRIS Group, Inc.
+94877C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+40-70-09   (hex)		ARRIS Group, Inc.
+407009     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+08-3E-0C   (hex)		ARRIS Group, Inc.
+083E0C     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+3C-36-E4   (hex)		ARRIS Group, Inc.
+3C36E4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+1C-1B-68   (hex)		ARRIS Group, Inc.
+1C1B68     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-04-23   (hex)		Intel Corporation
+000423     (base 16)		Intel Corporation
+				M/S:  JF3-420
+				Hillsboro  OR  97124
+				US
+
+20-73-55   (hex)		ARRIS Group, Inc.
+207355     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-ED-A5   (hex)		ARRIS Group, Inc.
+F8EDA5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+54-65-DE   (hex)		ARRIS Group, Inc.
+5465DE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+58-AC-78   (hex)		Cisco Systems, Inc
+58AC78     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+78-0A-C7   (hex)		Baofeng TV Co., Ltd.
+780AC7     (base 16)		Baofeng TV Co., Ltd.
+				Room 2D, Building 5D, Nanshan District Software Industry Base
+				ShenZhen  GuangDong  518000
+				CN
+
+00-0D-0B   (hex)		BUFFALO.INC
+000D0B     (base 16)		BUFFALO.INC
+				MELCO HI-TECH CENTER,
+				NAGOYA    457-8520
+				JP
+
+00-1D-73   (hex)		BUFFALO.INC
+001D73     (base 16)		BUFFALO.INC
+				15,Shibata Hondori 4-chome,
+				Nagoya  Aichi Pref.  457-8520
+				JP
+
+00-16-01   (hex)		BUFFALO.INC
+001601     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref.  460-8315
+				JP
+
+74-03-BD   (hex)		BUFFALO.INC
+7403BD     (base 16)		BUFFALO.INC
+				 AKAMONDORI Bldg, 30-20, Ohsu 3-chome,
+				Minami-ku, Nagoya  Aichi Pref.  457-8520
+				JP
+
+B8-FC-9A   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+B8FC9A     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+				,Le Shi Building, No.105 Yaojiayuan Road,Chaoyang District,Beijing,China
+				beijing  beijing  100025
+				CN
+
+A4-5D-36   (hex)		Hewlett Packard
+A45D36     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+F0-92-1C   (hex)		Hewlett Packard
+F0921C     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+A0-48-1C   (hex)		Hewlett Packard
+A0481C     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+A0-1D-48   (hex)		Hewlett Packard
+A01D48     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+40-A8-F0   (hex)		Hewlett Packard
+40A8F0     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+88-51-FB   (hex)		Hewlett Packard
+8851FB     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+08-2E-5F   (hex)		Hewlett Packard
+082E5F     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+E4-11-5B   (hex)		Hewlett Packard
+E4115B     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+28-92-4A   (hex)		Hewlett Packard
+28924A     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+28-80-23   (hex)		Hewlett Packard
+288023     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+CC-3E-5F   (hex)		Hewlett Packard
+CC3E5F     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+D8-9D-67   (hex)		Hewlett Packard
+D89D67     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-14-C2   (hex)		Hewlett Packard
+0014C2     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-80-5F   (hex)		Hewlett Packard
+00805F     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-18-FE   (hex)		Hewlett Packard
+0018FE     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-1A-4B   (hex)		Hewlett Packard
+001A4B     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-24-81   (hex)		Hewlett Packard
+002481     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-0F-61   (hex)		Hewlett Packard
+000F61     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+48-0F-CF   (hex)		Hewlett Packard
+480FCF     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+D4-0B-1A   (hex)		HTC Corporation
+D40B1A     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd.
+				Taoyuan County  Taiwan  330
+				TW
+
+94-53-30   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+945330     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+A0-8D-16   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A08D16     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+4C-D0-8A   (hex)		HUMAX Co., Ltd.
+4CD08A     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village,216,Hwangsaeul-ro,
+				Seongnam-si  Gyeonggi-do  463875
+				KR
+
+CC-4E-EC   (hex)		HUMAX Co., Ltd.
+CC4EEC     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bundang-gu,
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+40-3D-EC   (hex)		HUMAX Co., Ltd.
+403DEC     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bundang-gu,
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+EC-4D-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC4D47     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-40-44   (hex)		RackTop Systems Inc.
+C44044     (base 16)		RackTop Systems Inc.
+				11840 W Market Pl Suite K
+				Fulton  MD  20759
+				US
+
+4C-A1-61   (hex)		Rain Bird Corporation
+4CA161     (base 16)		Rain Bird Corporation
+				970 West Sierra Madre Ave.
+				AZUSA  CA  91702
+				US
+
+8C-AB-8E   (hex)		Shanghai Feixun Communication Co.,Ltd.
+8CAB8E     (base 16)		Shanghai Feixun Communication Co.,Ltd.
+				No.3666,Sixian Rd.,Songjiang District,Shanghai,P.R.China
+				Shanghai  Shanghai  201616
+				CN
+
+FC-64-BA   (hex)		Xiaomi Communications Co Ltd
+FC64BA     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+90-60-F1   (hex)		Apple, Inc.
+9060F1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-D1-11   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F8D111     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
+				Shenzhen  Guangdong  518000
+				CN
+
+B0-48-7A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+B0487A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
+				Shenzhen  Guangdong  518000
+				CN
+
+94-0C-6D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+940C6D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 7, Second Part, Honghualing Industrial Zone
+				Shenzhen  Guangdong  518000
+				CN
+
+A4-51-6F   (hex)		Microsoft Mobile Oy
+A4516F     (base 16)		Microsoft Mobile Oy
+				Keilalahdentie 4
+				Espoo    02150
+				FI
+
+54-27-58   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+542758     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+00-24-2B   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+00242B     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+08-18-1A   (hex)		zte corporation
+08181A     (base 16)		zte corporation
+				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
+				Shenzhen  GUANGDONG  518057
+				CN
+
+00-1E-73   (hex)		zte corporation
+001E73     (base 16)		zte corporation
+				12/F ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District,
+				Shenzhen  GUANGDONG  518057
+				CN
+
+00-15-EB   (hex)		zte corporation
+0015EB     (base 16)		zte corporation
+				5/F,A Wing,ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan District
+				Shenzhen    518057
+				US
+
+00-1C-25   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+001C25     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-19-7E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+00197E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+90-FB-A6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+90FBA6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+44-37-E6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+4437E6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+CC-AF-78   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+CCAF78     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+F4-B7-E2   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+F4B7E2     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+64-70-02   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+647002     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan,
+				Shenzhen  Guangdong Province,  518057
+				CN
+
+10-FE-ED   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+10FEED     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park
+				Shenzhen  Guangdong  518057
+				CN
+
+64-56-01   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+645601     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+F0-27-65   (hex)		Murata Manufacturing Co., Ltd.
+F02765     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1 Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+5C-F8-A1   (hex)		Murata Manufacturing Co., Ltd.
+5CF8A1     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1 Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+44-A7-CF   (hex)		Murata Manufacturing Co., Ltd.
+44A7CF     (base 16)		Murata Manufacturing Co., Ltd.
+				2288, Oaza-Ohshinohara, Yasu-cho,
+				Yasu-gun  Shiga  520-2393
+				JP
+
+00-13-E0   (hex)		Murata Manufacturing Co., Ltd.
+0013E0     (base 16)		Murata Manufacturing Co., Ltd.
+				2288, Oaza-Ohshinohara, Yasu-cho,
+				Yasu-gun  Shiga  520-2393
+				JP
+
+EC-26-CA   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+EC26CA     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+94-71-AC   (hex)		TCT mobile ltd
+9471AC     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+2C-08-8C   (hex)		HUMAX Co., Ltd.
+2C088C     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+1C-99-4C   (hex)		Murata Manufacturing Co., Ltd.
+1C994C     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1 Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+F4-55-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4559C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+80-B6-86   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+80B686     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+10-C6-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+10C61F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+CC-96-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC96A0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+F8-01-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F80113     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+A4-99-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A49947     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, 
+				Shenzhen  Guangdong  518057
+				CN
+
+C8-D1-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C8D15E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+78-59-68   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+785968     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C0-70-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C07009     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-38-BC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8038BC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-07-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4072F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-8E-92   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F48E92     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-66-4B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+00664B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-C1-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9CC172     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-7F-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+247F3C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-1F-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+581F28     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-CB-30   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ECCB30     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-DC-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4DCF9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-87-30   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+308730     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+C0-57-BC   (hex)		Avaya Inc
+C057BC     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+64-A7-DD   (hex)		Avaya Inc
+64A7DD     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+24-1F-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+241FA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-C5-8A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+18C58A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				Shenzhen  Guangdong  518129
+				CN
+
+08-00-28   (hex)		Texas Instruments
+080028     (base 16)		Texas Instruments
+				12500 TI Boulevard
+				Dallas    75243
+				US
+
+40-5F-C2   (hex)		Texas Instruments
+405FC2     (base 16)		Texas Instruments
+				12500 TI Boulevard
+				Dallas  TX  75243
+				US
+
+E0-E5-CF   (hex)		Texas Instruments
+E0E5CF     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+68-DF-DD   (hex)		Xiaomi Communications Co Ltd
+68DFDD     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+70-54-F5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7054F5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+DC-D2-FC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DCD2FC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+90-17-AC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9017AC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				Shenzhen  Guangdong  518129
+				CN
+
+34-CD-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+34CDBE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
+				Shenzhen  GuangDong  518057
+				CN
+
+D8-49-0B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D8490B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen    518129
+				CN
+
+44-32-2A   (hex)		Avaya Inc
+44322A     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+70-38-EE   (hex)		Avaya Inc
+7038EE     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+70-30-18   (hex)		Avaya Inc
+703018     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+9C-28-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C28EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+EC-24-B8   (hex)		Texas Instruments
+EC24B8     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+7C-EC-79   (hex)		Texas Instruments
+7CEC79     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+68-9E-19   (hex)		Texas Instruments
+689E19     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+20-CD-39   (hex)		Texas Instruments
+20CD39     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B4-99-4C   (hex)		Texas Instruments
+B4994C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A4-25-1B   (hex)		Avaya Inc
+A4251B     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+64-6A-52   (hex)		Avaya Inc
+646A52     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+00-10-0B   (hex)		Cisco Systems, Inc
+00100B     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-17-3B   (hex)		Cisco Systems, Inc
+00173B     (base 16)		Cisco Systems, Inc
+				170 West Tasman Dr.
+				San Jose  CA  95134-1706
+				US
+
+04-DA-D2   (hex)		Cisco Systems, Inc
+04DAD2     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F0-29-29   (hex)		Cisco Systems, Inc
+F02929     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+20-BB-C0   (hex)		Cisco Systems, Inc
+20BBC0     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+4C-4E-35   (hex)		Cisco Systems, Inc
+4C4E35     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+98-FA-E3   (hex)		Xiaomi Communications Co Ltd
+98FAE3     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+F0-B4-29   (hex)		Xiaomi Communications Co Ltd
+F0B429     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-50-80   (hex)		Cisco Systems, Inc
+005080     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-50-73   (hex)		Cisco Systems, Inc
+005073     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-90-0C   (hex)		Cisco Systems, Inc
+00900C     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-90-5F   (hex)		Cisco Systems, Inc
+00905F     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-E0-F7   (hex)		Cisco Systems, Inc
+00E0F7     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-1B-D7   (hex)		Cisco SPVTG
+001BD7     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+00-60-83   (hex)		Cisco Systems, Inc
+006083     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-60-09   (hex)		Cisco Systems, Inc
+006009     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-06-7C   (hex)		Cisco Systems, Inc
+00067C     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-7B   (hex)		Cisco Systems, Inc
+00107B     (base 16)		Cisco Systems, Inc
+				170 W.TASMAN DR.-SJA-2
+				SAN JOSE  CA  95134-1706
+				US
+
+00-50-E2   (hex)		Cisco Systems, Inc
+0050E2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-D3-F1   (hex)		Cisco Systems, Inc
+E4D3F1     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+84-78-AC   (hex)		Cisco Systems, Inc
+8478AC     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-90-A6   (hex)		Cisco Systems, Inc
+0090A6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-90-86   (hex)		Cisco Systems, Inc
+009086     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-8C   (hex)		ASUSTek COMPUTER INC.
+00248C     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+00-23-54   (hex)		ASUSTek COMPUTER INC.
+002354     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+1C-87-2C   (hex)		ASUSTek COMPUTER INC.
+1C872C     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.., Peitou,
+				Taipei    112
+				TW
+
+60-18-2E   (hex)		ShenZhen Protruly Electronic Ltd co.
+60182E     (base 16)		ShenZhen Protruly Electronic Ltd co.
+				ShenNan Road 1004
+				Shen Zhen  GuangDong  518000
+				CN
+
+C4-14-3C   (hex)		Cisco Systems, Inc
+C4143C     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+3C-08-F6   (hex)		Cisco Systems, Inc
+3C08F6     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-1E-8C   (hex)		ASUSTek COMPUTER INC.
+001E8C     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou
+				Taipei    112
+				TW
+
+00-13-D4   (hex)		ASUSTek COMPUTER INC.
+0013D4     (base 16)		ASUSTek COMPUTER INC.
+				No.5 Shing Yeh Street
+				Tao Yuan Hsien    333
+				TW
+
+20-CF-30   (hex)		ASUSTek COMPUTER INC.
+20CF30     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+BC-16-65   (hex)		Cisco Systems, Inc
+BC1665     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F8-72-EA   (hex)		Cisco Systems, Inc
+F872EA     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+D0-C7-89   (hex)		Cisco Systems, Inc
+D0C789     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F8-4F-57   (hex)		Cisco Systems, Inc
+F84F57     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+50-1C-BF   (hex)		Cisco Systems, Inc
+501CBF     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+B0-00-B4   (hex)		Cisco Systems, Inc
+B000B4     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+54-4A-00   (hex)		Cisco Systems, Inc
+544A00     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-E1-6D   (hex)		Cisco Systems, Inc
+00E16D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+78-BA-F9   (hex)		Cisco Systems, Inc
+78BAF9     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-22-CE   (hex)		Cisco SPVTG
+0022CE     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30042
+				US
+
+E0-D1-73   (hex)		Cisco Systems, Inc
+E0D173     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+E0-89-9D   (hex)		Cisco Systems, Inc
+E0899D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+C4-72-95   (hex)		Cisco Systems, Inc
+C47295     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+7C-69-F6   (hex)		Cisco Systems, Inc
+7C69F6     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+78-DA-6E   (hex)		Cisco Systems, Inc
+78DA6E     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+B8-78-2E   (hex)		Apple, Inc.
+B8782E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-05-02   (hex)		Apple, Inc.
+000502     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-0A-95   (hex)		Apple, Inc.
+000A95     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-BD-C8   (hex)		Cisco Systems, Inc
+34BDC8     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+DC-EB-94   (hex)		Cisco Systems, Inc
+DCEB94     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+84-B5-17   (hex)		Cisco Systems, Inc
+84B517     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+1C-6E-4C   (hex)		Logistic Service & Engineering Co.,Ltd
+1C6E4C     (base 16)		Logistic Service & Engineering Co.,Ltd
+				Unit N,9/F,Valiant Ind. Ctr.,2-12 Au Pui Wan St.,Fotan,Shatin,N.T.,Hong Kong
+				Hong Kong    00000
+				HK
+
+00-0F-66   (hex)		Cisco-Linksys, LLC
+000F66     (base 16)		Cisco-Linksys, LLC
+				121 Theory Dr.
+				Irvine  CA  92612
+				US
+
+24-37-4C   (hex)		Cisco SPVTG
+24374C     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+18-8B-9D   (hex)		Cisco Systems, Inc
+188B9D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+E4-AA-5D   (hex)		Cisco Systems, Inc
+E4AA5D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F4-5F-D4   (hex)		Cisco SPVTG
+F45FD4     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+2C-AB-A4   (hex)		Cisco SPVTG
+2CABA4     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+00-26-4A   (hex)		Apple, Inc.
+00264A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-1E-64   (hex)		Apple, Inc.
+041E64     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-11-24   (hex)		Apple, Inc.
+001124     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-22-41   (hex)		Apple, Inc.
+002241     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-C5-37   (hex)		Apple, Inc.
+7CC537     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-CA-39   (hex)		Apple, Inc.
+78CA39     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-E7-F4   (hex)		Apple, Inc.
+18E7F4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-CD-60   (hex)		Apple, Inc.
+70CD60     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-7B-9D   (hex)		Apple, Inc.
+8C7B9D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-9E-3F   (hex)		Apple, Inc.
+D89E3F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-C7-5D   (hex)		Apple, Inc.
+B8C75D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-74-C2   (hex)		Apple, Inc.
+0C74C2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-30-04   (hex)		Apple, Inc.
+403004     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-29-99   (hex)		Apple, Inc.
+842999     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-E2-F5   (hex)		Apple, Inc.
+74E2F5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-C9-7A   (hex)		Apple, Inc.
+E0C97A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-A8-6D   (hex)		Apple, Inc.
+68A86D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-C3-A1   (hex)		Apple, Inc.
+7CC3A1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-73-CB   (hex)		Apple, Inc.
+7073CB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-84-0D   (hex)		Apple, Inc.
+90840D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-06-88   (hex)		Apple, Inc.
+E80688     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-85-2F   (hex)		Apple, Inc.
+EC852F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-F4-B9   (hex)		Apple, Inc.
+00F4B9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-95-AE   (hex)		Apple, Inc.
+5C95AE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-03-D8   (hex)		Apple, Inc.
+9803D8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-C5-47   (hex)		Apple, Inc.
+60C547     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-5B-35   (hex)		Apple, Inc.
+685B35     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-B4-3A   (hex)		Apple, Inc.
+2CB43A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-9C-70   (hex)		Apple, Inc.
+689C70     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-0F-4A   (hex)		Apple, Inc.
+380F4A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-10-E4   (hex)		Apple, Inc.
+3010E4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-86-DD   (hex)		Apple, Inc.
+A886DD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-4C-0C   (hex)		Apple, Inc.
+444C0C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-F0-AB   (hex)		Apple, Inc.
+B4F0AB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-92-9F   (hex)		Apple, Inc.
+80929F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-04-EB   (hex)		Apple, Inc.
+9C04EB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-96-9D   (hex)		Apple, Inc.
+5C969D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-92-17   (hex)		Apple, Inc.
+609217     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-B1-53   (hex)		Apple, Inc.
+84B153     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-66-78   (hex)		Apple, Inc.
+E06678     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-D7-05   (hex)		Apple, Inc.
+48D705     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-15-52   (hex)		Apple, Inc.
+041552     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-78-5F   (hex)		Apple, Inc.
+CC785F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-CB-87   (hex)		Apple, Inc.
+88CB87     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-C1-F1   (hex)		Apple, Inc.
+F0C1F1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-38-35   (hex)		Apple, Inc.
+843835     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-00-6D   (hex)		Apple, Inc.
+8C006D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-96-8A   (hex)		Apple, Inc.
+A8968A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-1B-A1   (hex)		Apple, Inc.
+F41BA1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-D9-C7   (hex)		Apple, Inc.
+60D9C7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-AB-8E   (hex)		Apple, Inc.
+3CAB8E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-27-93   (hex)		Apple, Inc.
+F82793     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-72-40   (hex)		Apple, Inc.
+907240     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-8D-6C   (hex)		Apple, Inc.
+908D6C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-09-8A   (hex)		Apple, Inc.
+B8098A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-7C-5F   (hex)		Apple, Inc.
+4C7C5F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-64-4B   (hex)		Apple, Inc.
+68644B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-1E-E7   (hex)		Apple, Inc.
+C81EE7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-31-35   (hex)		Apple, Inc.
+A43135     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-D9-3C   (hex)		Apple, Inc.
+68D93C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-F7-6F   (hex)		Apple, Inc.
+00F76F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-85-50   (hex)		Apple, Inc.
+C88550     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-14-A6   (hex)		Apple, Inc.
+7014A6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-5A-EB   (hex)		Apple, Inc.
+985AEB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-D7-5F   (hex)		Apple, Inc.
+78D75F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-B5-2D   (hex)		Apple, Inc.
+E0B52D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-94-F8   (hex)		Apple, Inc.
+6C94F8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-CE-CD   (hex)		Apple, Inc.
+C0CECD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-4B-2A   (hex)		Cisco SPVTG
+F44B2A     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+74-6F-19   (hex)		ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.
+746F19     (base 16)		ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.
+				6F-1 ,Block D,Building 2#, Hongwan XinCun Ming JinHai Industry Area, Gushu Community, Xixiang Street, BaoAn District
+				Shenzhen  Guangdong  518000
+				CN
+
+2C-AE-2B   (hex)		Samsung Electronics Co.,Ltd
+2CAE2B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-AD-F1   (hex)		GOPEACE Inc.
+C4ADF1     (base 16)		GOPEACE Inc.
+				Woolim Bldg B-916, 14 Sagimakgol-ro 45beon-gil, Jungwon-gu
+				Seongnam  Gyeonggi  13209
+				KR
+
+58-FC-73   (hex)		Arria Live Media, Inc.
+58FC73     (base 16)		Arria Live Media, Inc.
+				2388 NE Lindsey Drive
+				Hillsboro  OR  97124
+				US
+
+0C-1A-10   (hex)		Acoustic Stream
+0C1A10     (base 16)		Acoustic Stream
+				3213 W Wheeler Street
+				Seattle  WA  98199
+				US
+
+C4-EF-70   (hex)		Home Skinovations
+C4EF70     (base 16)		Home Skinovations
+				Tavor building POB 533
+				Yokneam  Israel  2069206
+				IL
+
+5C-E3-B6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+5CE3B6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+7C-5A-67   (hex)		JNC Systems, Inc.
+7C5A67     (base 16)		JNC Systems, Inc.
+				#611, Gyeonggi Venture Yeonsung University
+				Anyang-si  Gyeonggi-do  430731
+				KR
+
+A0-F9-E0   (hex)		VIVATEL COMPANY LIMITED
+A0F9E0     (base 16)		VIVATEL COMPANY LIMITED
+				36/F,Tower Two
+				Causeway Bay  Causeway Bay  999077
+				HK
+
+C8-69-CD   (hex)		Apple, Inc.
+C869CD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-B8-05   (hex)		Apple, Inc.
+A4B805     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-C9-9B   (hex)		Tesorion Nederland B.V.
+90C99B     (base 16)		Tesorion Nederland B.V.
+				Auke Vleerstraat 6-D
+				Enschede    7521 PG
+				NL
+
+5C-AD-CF   (hex)		Apple, Inc.
+5CADCF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-0A-4E   (hex)		Planet Bingo® — 3rd Rock Gaming®
+080A4E     (base 16)		Planet Bingo® — 3rd Rock Gaming®
+				75190 Gerald Ford Dr.
+				Palm Desert  CA  92211
+				US
+
+B4-9D-0B   (hex)		BQ
+B49D0B     (base 16)		BQ
+				Sofia, 10
+				Las Rozas de Madrid  Madrid  28230
+				ES
+
+3C-8C-F8   (hex)		TRENDnet, Inc.
+3C8CF8     (base 16)		TRENDnet, Inc.
+				20675 Manhattan Place
+				Torrance  CA  90501
+				US
+
+E8-13-63   (hex)		Comstock RD, Inc.
+E81363     (base 16)		Comstock RD, Inc.
+				4415 Mason St
+				Ashton  ID  83406
+				US
+
+74-18-65   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
+741865     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
+				22F NO.1555 Kongjiang RD
+				  Shanghai  200092
+				CN
+
+BC-6C-21   (hex)		Apple, Inc.
+BC6C21     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-C3-72   (hex)		TSUZUKI DENKI
+F8C372     (base 16)		TSUZUKI DENKI
+				shinbashi 6-19-15
+				mainato-ku  tokyo-to  105-8665
+				JP
+
+D4-72-08   (hex)		Bragi GmbH
+D47208     (base 16)		Bragi GmbH
+				Herzog-Heinrich-Strasse 20
+				Munich  Bavaria  80336
+				DE
+
+A8-72-85   (hex)		IDT, INC.
+A87285     (base 16)		IDT, INC.
+				6024 SILVER CREEK VALLEY RD
+				SAN JOSE  CA  95138
+				US
+
+78-05-41   (hex)		Queclink Wireless Solutions Co., Ltd
+780541     (base 16)		Queclink Wireless Solutions Co., Ltd
+				Room 501, Building 9, No.99 Tianzhou Road
+				shanghai  shanghai  200233
+				CN
+
+04-41-69   (hex)		GoPro
+044169     (base 16)		GoPro
+				3000 Clearview Way
+				San Mateo  CA  94402
+				US
+
+C0-2D-EE   (hex)		Cuff
+C02DEE     (base 16)		Cuff
+				232 Townsend St
+				San Francisco  CA  94107
+				US
+
+6C-EB-B2   (hex)		Dongguan Sen DongLv Electronics Co.,Ltd
+6CEBB2     (base 16)		Dongguan Sen DongLv Electronics Co.,Ltd
+				Nanjiang RD 111st,Daning
+				Dongguan  Guangdong  523930
+				
+
+3C-7A-8A   (hex)		ARRIS Group, Inc.
+3C7A8A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F4-0E-22   (hex)		Samsung Electronics Co.,Ltd
+F40E22     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-1B-99   (hex)		SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.
+881B99     (base 16)		SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.
+				#4 BULIDING, HIGH TECH INDUSTRIAL PARK, HE PING COMMUNITY
+				GUANGDONG  N/A  518000
+				CN
+
+54-4E-90   (hex)		Apple, Inc.
+544E90     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-A6-A9   (hex)		Private
+A4A6A9     (base 16)		Private
+
+8C-10-D4   (hex)		Sagemcom Broadband SAS
+8C10D4     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+F8-98-B9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F898B9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-B5-59   (hex)		CNEX Labs
+5CB559     (base 16)		CNEX Labs
+				2880 Stevens Creek Blvd
+				San Jose  CA  95128
+				US
+
+B8-3A-9D   (hex)		Alarm.com
+B83A9D     (base 16)		Alarm.com
+				8281 Greensboro Dr., Suite 100
+				Tysons  VA   22102
+				US
+
+68-58-C5   (hex)		ZF TRW Automotive
+6858C5     (base 16)		ZF TRW Automotive
+				​12001 Tech Center Drive
+				Livonia  MI  48150
+				US
+
+C0-11-73   (hex)		Samsung Electronics Co.,Ltd
+C01173     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-E6-3F   (hex)		Samsung Electronics Co.,Ltd
+BCE63F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+7C-91-22   (hex)		Samsung Electronics Co.,Ltd
+7C9122     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+AC-BC-32   (hex)		Apple, Inc.
+ACBC32     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-23-EC   (hex)		Availink, Inc.
+9023EC     (base 16)		Availink, Inc.
+				Scotia Centre P.O. Box 268GT,Grand Cayman, Cayman Islands
+				Grand Cayman  Grand Cayman  999159
+				KY
+
+44-1C-A8   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+441CA8     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+B4-29-3D   (hex)		Shenzhen Urovo Technology Co.,Ltd.
+B4293D     (base 16)		Shenzhen Urovo Technology Co.,Ltd.
+				A701-710, Zondy Cyber Building, Keyuan South Road,
+				Nanshan District, Shenzhen  Guangzhou  518057
+				CN
+
+54-FF-82   (hex)		Davit Solution co.
+54FF82     (base 16)		Davit Solution co.
+				103-301,Geudaegapremier,21 Deagyeong-Daero 1484beon-Gil
+				Suwon-Si  Gyeonggi-Do  KS002
+				KR
+
+50-DF-95   (hex)		Lytx
+50DF95     (base 16)		Lytx
+				9785 Towne Centre Drive
+				San Diego  CA  92121
+				US
+
+9C-A6-9D   (hex)		Whaley Technology Co.Ltd
+9CA69D     (base 16)		Whaley Technology Co.Ltd
+				Floor 3, Building E, No666 Shengxia Road
+				  Shanghai  201203
+				CN
+
+58-53-C0   (hex)		Beijing Guang Runtong Technology Development Company co.,Ltd
+5853C0     (base 16)		Beijing Guang Runtong Technology Development Company co.,Ltd
+				Beijing city Haidian District North Third Ring Road 48, Beijing science and Technology Exhibition Center 1 building B block, room 18H
+				Beijing  Bejing  100000
+				CN
+
+2C-A5-39   (hex)		Parallel Wireless, Inc
+2CA539     (base 16)		Parallel Wireless, Inc
+				1 Tara Blvd
+				Nashua  NH  03062
+				US
+
+CC-79-4A   (hex)		BLU Products Inc.
+CC794A     (base 16)		BLU Products Inc.
+				Tower 4, Excellence Century Center
+				Shenzhen  Guangdong  518000
+				CN
+
+F4-E9-26   (hex)		Tianjin Zanpu Technology Inc.
+F4E926     (base 16)		Tianjin Zanpu Technology Inc.
+				3F Haiyi International Center, Huayuan Industrial Park, Tianjin
+				Tianjin  Tianjin  300384
+				CN
+
+90-6F-18   (hex)		Private
+906F18     (base 16)		Private
+
+98-CB-27   (hex)		Galore Networks Pvt. Ltd.
+98CB27     (base 16)		Galore Networks Pvt. Ltd.
+				#D1104, Salarpuria Serenity, 41A,
+				Bangalore  Karnataka  560068
+				IN
+
+E8-F2-E2   (hex)		LG Innotek
+E8F2E2     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+24-72-60   (hex)		IOTTECH Corp
+247260     (base 16)		IOTTECH Corp
+				4F.-1, No.55, Dongguang Rd., East Dist., Hsinchu City 300, TAIWAN ,REPUBLIC OF CHINA
+				Hsinchu  TAIWAN  300
+				TW
+
+24-5B-F0   (hex)		Liteon, Inc.
+245BF0     (base 16)		Liteon, Inc.
+				3001 Summit Avenue, Suite 400
+				Plano  Tx  75074
+				US
+
+E8-55-B4   (hex)		SAI Technology Inc.
+E855B4     (base 16)		SAI Technology Inc.
+				2376 Walsh Avenue
+				Santa Clara  California  95051
+				US
+
+34-0C-ED   (hex)		Moduel AB
+340CED     (base 16)		Moduel AB
+				Hudiksvallsgatan 8
+				Stockholm  Stockholm  11330
+				SE
+
+28-27-BF   (hex)		Samsung Electronics Co.,Ltd
+2827BF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-D8-59   (hex)		TCT mobile ltd
+94D859     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+2C-FC-E4   (hex)		CTEK Sweden AB
+2CFCE4     (base 16)		CTEK Sweden AB
+				Rostugnsvägen 3
+				Vikmanshyttan  Dalarna  SE-776 70
+				SE
+
+F4-B8-A7   (hex)		zte corporation
+F4B8A7     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+30-0C-23   (hex)		zte corporation
+300C23     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C0-B7-13   (hex)		Beijing Xiaoyuer Technology Co. Ltd.
+C0B713     (base 16)		Beijing Xiaoyuer Technology Co. Ltd.
+				No.5 Guangshunbei Rd. Rm# B129
+				Beijing  Beijing  100102
+				CN
+
+10-05-B1   (hex)		ARRIS Group, Inc.
+1005B1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+20-63-5F   (hex)		Abeeway
+20635F     (base 16)		Abeeway
+				29 chemin du vieux chêne
+				meylan  Isere  38240
+				FR
+
+08-3A-5C   (hex)		Junilab, Inc.
+083A5C     (base 16)		Junilab, Inc.
+				#205 107 Gyounggyo-Ro, Yeongtong-Gu, Suwon
+				Suwon  Gyeonggi-Do  443-766
+				KR
+
+B8-B3-DC   (hex)		DEREK (SHAOGUAN) LIMITED
+B8B3DC     (base 16)		DEREK (SHAOGUAN) LIMITED
+				Gaojiling, Taiping Town,
+				Shao Guan  Guang Dong  512500
+				CN
+
+70-2A-7D   (hex)		EpSpot AB
+702A7D     (base 16)		EpSpot AB
+				Aluddsparken 7D
+				  Stockholm  11265
+				SE
+
+4C-AE-31   (hex)		ShengHai Electronics (Shenzhen) Ltd
+4CAE31     (base 16)		ShengHai Electronics (Shenzhen) Ltd
+				Block 17&18,Hui Ming Ying Industry,YanChuan,SongGang
+				Shenzhen  Guangdong  518105
+				CN
+
+18-8E-F9   (hex)		G2C Co. Ltd.
+188EF9     (base 16)		G2C Co. Ltd.
+				1004,1591-9, K-Center Kwanyang Dong
+				Anyang Si  Kyeonggido  431-815
+				KR
+
+44-F4-36   (hex)		zte corporation
+44F436     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C4-7D-46   (hex)		FUJITSU LIMITED
+C47D46     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+18-5D-9A   (hex)		BobjGear LLC
+185D9A     (base 16)		BobjGear LLC
+				4327 S Highway 27 # 504
+				Clermont  Florida  34711
+				US
+
+F4-E9-D4   (hex)		QLogic Corporation
+F4E9D4     (base 16)		QLogic Corporation
+				26650 Aliso Viejo Parkway
+				Aliso Viejo  California  
+				US
+
+4C-B7-6D   (hex)		Novi Security
+4CB76D     (base 16)		Novi Security
+				1434 E 820 N
+				Orem  UT  84097
+				US
+
+6C-E0-1E   (hex)		Modcam AB
+6CE01E     (base 16)		Modcam AB
+				Bredgatan 4
+				Malmö  Skåne  21130
+				SE
+
+74-85-2A   (hex)		PEGATRON CORPORATION
+74852A     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+9C-B6-D0   (hex)		Rivet Networks
+9CB6D0     (base 16)		Rivet Networks
+				11940 Jollyville Rd
+				Austin  tx  78759
+				US
+
+40-B8-9A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+40B89A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+1C-B7-2C   (hex)		ASUSTek COMPUTER INC.
+1CB72C     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+4C-EE-B0   (hex)		SHC Netzwerktechnik GmbH
+4CEEB0     (base 16)		SHC Netzwerktechnik GmbH
+				Ludwigstrasse 33-37
+				Frankfurt am Main  Hessen  60327
+				DE
+
+80-01-84   (hex)		HTC Corporation
+800184     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+44-C6-9B   (hex)		Wuhan Feng Tian Information Network CO.,LTD
+44C69B     (base 16)		Wuhan Feng Tian Information Network CO.,LTD
+				Room 1002,10th Floor,Oversea talent Building A,
+				Wuhan City  Hubei Province  430074
+				CN
+
+FC-E3-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FCE33C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-25-67   (hex)		Nexxt Solutions
+C02567     (base 16)		Nexxt Solutions
+				3505 NW 107TH AVENUE
+				MIAMI  FLORIDA  33178
+				US
+
+A8-82-7F   (hex)		CIBN Oriental Network(Beijing) CO.,Ltd
+A8827F     (base 16)		CIBN Oriental Network(Beijing) CO.,Ltd
+				Floor 18B,Block B(International Resources Building),No.18B(Wanda Plaza),Shijingshan Road,Shijingshan,Beijing(100043)
+				Beijing  Beijing  100043
+				CN
+
+D0-48-F3   (hex)		DATTUS Inc
+D048F3     (base 16)		DATTUS Inc
+				3000 Kent Ave
+				W Lafayette  IN  47906
+				US
+
+B8-C3-BF   (hex)		Henan Chengshi NetWork Technology Co.，Ltd
+B8C3BF     (base 16)		Henan Chengshi NetWork Technology Co.，Ltd
+				Ruhe Road South，Kunlun Road West，Zhongyuan District，Zhengzhou，Henan，P.R.China，450007
+				Zhengzhou  Henan  450007
+				CN
+
+44-96-2B   (hex)		Aidon Oy
+44962B     (base 16)		Aidon Oy
+				Piippukatu 11
+				Jyvaskyla  Jyvaskyla  40100
+				FI
+
+E0-76-D0   (hex)		AMPAK Technology, Inc.
+E076D0     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road
+				Hsinchu  Hsinchu  30352
+				TW
+
+B0-08-BF   (hex)		Vital Connect, Inc.
+B008BF     (base 16)		Vital Connect, Inc.
+				900 E HAMILTON AVE STE 500
+				CAMPBELL  CA  95008-0667
+				US
+
+D4-52-2A   (hex)		TangoWiFi.com
+D4522A     (base 16)		TangoWiFi.com
+				TangoWiFi Team
+				Beijing  Beijing  100022
+				CN
+
+E8-07-BF   (hex)		SHENZHEN BOOMTECH INDUSTRY CO.,LTD
+E807BF     (base 16)		SHENZHEN BOOMTECH INDUSTRY CO.,LTD
+				Floor 6 East, Bldg 6, Yusheng Industrial Area, Xixiang, Bao'an District
+				Shenzhen  Guangdong  518000
+				CN
+
+84-F1-29   (hex)		Metrascale Inc.
+84F129     (base 16)		Metrascale Inc.
+				400 Liberty Ave.
+				Brooklyn  NY  11207
+				US
+
+B8-9A-CD   (hex)		ELITE OPTOELECTRONIC(ASIA)CO.,LTD
+B89ACD     (base 16)		ELITE OPTOELECTRONIC(ASIA)CO.,LTD
+				A9 jin Fu 1 Road,Tangchun lndustrial zone,Liaobu Town,Dongguan City,Guangdong Province
+				Liaobu  dongguan /guangdong  523400
+				CN
+
+D4-68-BA   (hex)		Shenzhen Sundray Technologies Company Limited
+D468BA     (base 16)		Shenzhen Sundray Technologies Company Limited
+				6th Floor,Block A1, Nanshan iPark, 
+				Nanshan District, Shenzhen 518055  Guangdong  
+				CN
+
+08-62-66   (hex)		ASUSTek COMPUTER INC.
+086266     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+9C-30-66   (hex)		RWE Effizienz GmbH
+9C3066     (base 16)		RWE Effizienz GmbH
+				Flamingoweg 1
+				Dortmund  NRW  44139
+				DE
+
+18-BD-AD   (hex)		L-TECH CORPORATION
+18BDAD     (base 16)		L-TECH CORPORATION
+				201, Moonbon-dong
+				Ilsandong-gu  Gyeonggi-do  410-560
+				KR
+
+60-E6-BC   (hex)		Sino-Telecom Technology Co.,Ltd.
+60E6BC     (base 16)		Sino-Telecom Technology Co.,Ltd.
+				6F, Building 2, No.115, Lane 1276 Nanle Rd
+				    201613
+				CN
+
+C8-C5-0E   (hex)		Shenzhen Primestone Network Technologies.Co., Ltd.
+C8C50E     (base 16)		Shenzhen Primestone Network Technologies.Co., Ltd.
+				Room 705,Complex Building, Tsinghua Hi-Tech Park
+				Shenzhen  Guangdong  518057
+				CN
+
+D0-6A-1F   (hex)		BSE CO.,LTD.
+D06A1F     (base 16)		BSE CO.,LTD.
+				626-3, Gozan-dong, Namdong-ku
+				Incheon, 405-817    
+				KR
+
+70-01-36   (hex)		FATEK Automation Corporation
+700136     (base 16)		FATEK Automation Corporation
+				5F., NO.300, SEC. 1, NEIHU RD
+				Taipei City    114
+				TW
+
+FC-A2-2A   (hex)		PT. Callysta Multi Engineering
+FCA22A     (base 16)		PT. Callysta Multi Engineering
+				Jl. Taman Cibeunying No. 2
+				Bandung  Jawa Barat  40114
+				ID
+
+A4-56-02   (hex)		fenglian Technology Co.,Ltd.
+A45602     (base 16)		fenglian Technology Co.,Ltd.
+				302 R D Building Oriental Cyberport HighTech Industrial Park Nanshan Shenzhen China
+				  Shenzhen,Guangdong Province  518057
+				CN
+
+94-E2-FD   (hex)		Boge Kompressoren OTTO Boge GmbH & Co. KG
+94E2FD     (base 16)		Boge Kompressoren OTTO Boge GmbH & Co. KG
+				Otto Boge Str. 1-7
+				Bielefeld  Westfalia  33739
+				DE
+
+F0-1E-34   (hex)		ORICO Technologies Co., Ltd
+F01E34     (base 16)		ORICO Technologies Co., Ltd
+				F-9, Block14A, Zhonghaixin Science &Technology Zone
+				ShenZhen  Guangdong  518116
+				CN
+
+DC-E0-26   (hex)		Patrol Tag, Inc
+DCE026     (base 16)		Patrol Tag, Inc
+				2800 Western Ave
+				Seattle  WA  98121
+				US
+
+B4-05-66   (hex)		SP Best Corporation Co., LTD.
+B40566     (base 16)		SP Best Corporation Co., LTD.
+				555/25 B-Avenue, Sukhaphibal 5 Road
+				Saimai  Bangkok  10220
+				TH
+
+1C-C7-2D   (hex)		Shenzhen Huapu Digital CO.,Ltd
+1CC72D     (base 16)		Shenzhen Huapu Digital CO.,Ltd
+				R2305 Malata Technology Building,NO.9998 Shennan Boulevard, Shenzhen,P.R.China 518057
+				Shenzhen  Guangzhou  518057
+				CN
+
+A8-90-08   (hex)		Beijing Yuecheng Technology Co. Ltd.
+A89008     (base 16)		Beijing Yuecheng Technology Co. Ltd.
+				Room 1601, Floor 16
+				Beijing  Beijing  100000
+				CN
+
+18-38-64   (hex)		CAP-TECH INTERNATIONAL CO., LTD.
+183864     (base 16)		CAP-TECH INTERNATIONAL CO., LTD.
+				 Rm. 6, 4F., No.120, Qiaohe Rd., Zhonghe Dist
+				New Taipei City  Taiwan  235
+				TW
+
+6C-F5-E8   (hex)		Mooredoll Inc.
+6CF5E8     (base 16)		Mooredoll Inc.
+				5F,No.50,Ln.316,Ruiguan Rd.,Neihu Dist.,Taipei 114, Taiwan
+				Taipei  Neihu  114
+				TW
+
+8C-BF-A6   (hex)		Samsung Electronics Co.,Ltd
+8CBFA6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-A8-23   (hex)		Samsung Electronics Co.,Ltd
+C8A823     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-C5-59   (hex)		Samsung Electronics Co.,Ltd
+B0C559     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F4-2C-56   (hex)		SENOR TECH CO LTD
+F42C56     (base 16)		SENOR TECH CO LTD
+				No.165, Kangning St
+				New Taipei City  Taiwan  221
+				TW
+
+FC-DC-4A   (hex)		G-Wearables Corp.
+FCDC4A     (base 16)		G-Wearables Corp.
+				901, S&CTBuilding, No.9 Zhongguancun South Avenue
+				Beijing  Beijing  100081
+				CN
+
+1C-14-B3   (hex)		Airwire Technologies
+1C14B3     (base 16)		Airwire Technologies
+				9670 Gateway Drive, Suite 250
+				Reno  NV  89521
+				US
+
+A4-8C-DB   (hex)		Lenovo
+A48CDB     (base 16)		Lenovo
+				1009 Think Place
+				Morrisvilee  NC  27560
+				US
+
+D8-5D-E2   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+D85DE2     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+3C-91-2B   (hex)		Vexata Inc
+3C912B     (base 16)		Vexata Inc
+				1735 Technology Dr Suite 520
+				San Jose  CA  95110
+				US
+
+34-6C-0F   (hex)		Pramod Telecom Pvt. Ltd
+346C0F     (base 16)		Pramod Telecom Pvt. Ltd
+				Plot No. 6-B, Malviya Nagar,
+				Lucknow  Uttar Pradesh  226004
+				IN
+
+BC-14-85   (hex)		Samsung Electronics Co.,Ltd
+BC1485     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+9C-6C-15   (hex)		Microsoft Corporation
+9C6C15     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+44-5E-CD   (hex)		Razer Inc
+445ECD     (base 16)		Razer Inc
+				2035 Corte Del Nogal
+				Carlsbad  CA  92011
+				US
+
+4C-A9-28   (hex)		Insensi
+4CA928     (base 16)		Insensi
+				2025 Broadway, 2CD
+				New York City  New York  10023
+				US
+
+E8-44-7E   (hex)		Bitdefender SRL
+E8447E     (base 16)		Bitdefender SRL
+				24 Delea Veche St.
+				Bucharest  Romania  024102
+				RO
+
+C0-33-5E   (hex)		Microsoft
+C0335E     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+B0-E0-3C   (hex)		TCT mobile ltd
+B0E03C     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+B0-49-5F   (hex)		OMRON HEALTHCARE Co., Ltd.
+B0495F     (base 16)		OMRON HEALTHCARE Co., Ltd.
+				53, Kunotsubo, Terado-cho
+				Muko  Kyoto  6170002
+				JP
+
+60-F1-89   (hex)		Murata Manufacturing Co., Ltd.
+60F189     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+74-2E-FC   (hex)		DirectPacket Research, Inc,
+742EFC     (base 16)		DirectPacket Research, Inc,
+				909 Lake Carolyn Parkway
+				Irving  Texas  75039
+				US
+
+84-CF-BF   (hex)		Fairphone
+84CFBF     (base 16)		Fairphone
+				Piet Heinkade 181A
+				Amsterdam  North Holland  1019HC
+				NL
+
+AC-D1-B8   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+ACD1B8     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+A0-C2-DE   (hex)		Costar Video Systems
+A0C2DE     (base 16)		Costar Video Systems
+				101 Wrangler, Suite 201
+				Coppell  Texas  75019
+				US
+
+88-E1-61   (hex)		Art Beijing Science and Technology Development Co., Ltd.
+88E161     (base 16)		Art Beijing Science and Technology Development Co., Ltd.
+				Room 210,Building 1#, No. 27 Qinghe Longgang Rd., Haidian District, Beijing,100192,China
+				Beijing  Beijing  100192
+				CN
+
+00-A5-09   (hex)		WigWag Inc.
+00A509     (base 16)		WigWag Inc.
+				4009 banister lane
+				austin  texas  78704
+				US
+
+74-91-BD   (hex)		Four systems Co.,Ltd.
+7491BD     (base 16)		Four systems Co.,Ltd.
+				608-608/7 Ramintra Road Kannayao
+				Bangkok  Bangkok  10230
+				TH
+
+F0-FE-6B   (hex)		Shanghai High-Flying Electronics Technology Co., Ltd
+F0FE6B     (base 16)		Shanghai High-Flying Electronics Technology Co., Ltd
+				Room 1002 ,#1Building,No.3000 Longdong Avenue,Pudong District,Shanghai,China
+				shanghai  shanghai  201203
+				CN
+
+3C-AE-69   (hex)		ESA Elektroschaltanlagen Grimma GmbH
+3CAE69     (base 16)		ESA Elektroschaltanlagen Grimma GmbH
+				Broner Ring 30
+				Grimma  Saxony  04668
+				DE
+
+D4-32-66   (hex)		Fike Corporation
+D43266     (base 16)		Fike Corporation
+				704 SW 10th Street
+				Blue Springs  MO  64015
+				US
+
+90-0C-B4   (hex)		Alinket Electronic Technology Co., Ltd
+900CB4     (base 16)		Alinket Electronic Technology Co., Ltd
+				412 Guilin Rd. 3F, Xuhui District
+				Shanghai  Shanghai  201235
+				CN
+
+48-C0-93   (hex)		Xirrus, Inc.
+48C093     (base 16)		Xirrus, Inc.
+				2101 Corporate Center Dr.
+				Thousand Oaks  CA  91320
+				US
+
+DC-09-14   (hex)		Talk-A-Phone Co.
+DC0914     (base 16)		Talk-A-Phone Co.
+				7530 N. Natchez Ave.
+				Niles  IL  60714
+				US
+
+D0-92-9E   (hex)		Microsoft Corporation
+D0929E     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+BC-52-B4   (hex)		Nokia
+BC52B4     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+94-05-B6   (hex)		Liling FullRiver Electronics & Technology Ltd
+9405B6     (base 16)		Liling FullRiver Electronics & Technology Ltd
+				FullRiver Industrial Area Economic Development Zone
+				HuNan Province    412200
+				CN
+
+00-F3-DB   (hex)		WOO Sports
+00F3DB     (base 16)		WOO Sports
+				11 Elkins St.
+				BOSTON  Massachusetts  02127
+				US
+
+78-31-2B   (hex)		zte corporation
+78312B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C8-1B-6B   (hex)		Innova Security
+C81B6B     (base 16)		Innova Security
+				Av. General Ataliba Leonel, 1205
+				Sao Paulo  Sao Paulo  02033000
+				BR
+
+B4-A8-28   (hex)		Shenzhen Concox Information Technology Co., Ltd
+B4A828     (base 16)		Shenzhen Concox Information Technology Co., Ltd
+				Floor 4th, Building B, Gaoxinqi Industrial Park, Liuxian 1st Road, district 67, Bao’an, Shenzhen, Guangdong,China
+				Shenzhen  Guangdong  518102
+				CN
+
+00-A2-F5   (hex)		Guangzhou Yuanyun Network Technology Co.,Ltd
+00A2F5     (base 16)		Guangzhou Yuanyun Network Technology Co.,Ltd
+				31/F,183 TianHe Bei Rd, Metro Plz
+				GuangZhou  GuangDong  510630
+				CN
+
+10-08-B1   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+1008B1     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+E4-8C-0F   (hex)		Discovery Insure
+E48C0F     (base 16)		Discovery Insure
+				3 Alice lane
+				Sandton  Gauteng  2196
+				ZA
+
+E4-23-54   (hex)		SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD
+E42354     (base 16)		SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD
+				4/F,Fuxing Bldg,Binlang Road,Futian Free Trade Zone,SHENZHEN.CHINA
+				SHENZHEN  Guang Dong  518038
+				CN
+
+94-BF-95   (hex)		Shenzhen Coship Electronics Co., Ltd
+94BF95     (base 16)		Shenzhen Coship Electronics Co., Ltd
+				Rainbow Bldg., North, Hi-Tech Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+44-CE-7D   (hex)		SFR
+44CE7D     (base 16)		SFR
+				5 RUE NOEL PONS
+				NANTERRE    92000
+				FR
+
+34-4D-EA   (hex)		zte corporation
+344DEA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+4C-16-F1   (hex)		zte corporation
+4C16F1     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+10-FA-CE   (hex)		Reacheng Communication Technology Co.,Ltd
+10FACE     (base 16)		Reacheng Communication Technology Co.,Ltd
+				Building No.5-401,
+				Pu Dong New District,  Shanghai  201203
+				CN
+
+94-70-D2   (hex)		WINFIRM TECHNOLOGY
+9470D2     (base 16)		WINFIRM TECHNOLOGY
+				2-1015 Lotte IT Castle
+				  Seoul  153-768
+				KR
+
+A4-4A-D3   (hex)		ST Electronics(Shanghai) Co.,Ltd
+A44AD3     (base 16)		ST Electronics(Shanghai) Co.,Ltd
+				Floors 1&3, No.6 Building, No.1151 Lianxi Road
+				Shanghai  Shanghai  201204
+				CN
+
+7C-B1-77   (hex)		Satelco AG
+7CB177     (base 16)		Satelco AG
+				Seestrasse 241
+				Au / Waedenswil  ZH  8804
+				CH
+
+CC-30-80   (hex)		VAIO Corporation
+CC3080     (base 16)		VAIO Corporation
+				5432 Toyoshina
+				Azumino  Nagano  399-8282
+				JP
+
+58-7B-E9   (hex)		AirPro Technology India Pvt. Ltd
+587BE9     (base 16)		AirPro Technology India Pvt. Ltd
+				D30, Gautam Marg,
+				Jaipur  Rajasthan  302018
+				IN
+
+8C-18-D9   (hex)		Shenzhen RF Technology Co., Ltd
+8C18D9     (base 16)		Shenzhen RF Technology Co., Ltd
+				5/F,Building 4,Baokun Science and Technology Industial Park
+				Baoan  Guangdong  518100
+				CN
+
+C4-BD-6A   (hex)		SKF GmbH
+C4BD6A     (base 16)		SKF GmbH
+				Gunnar-Wester-Strasse 12
+				Schweinfurt  DE  DE-97421
+				DE
+
+C4-01-CE   (hex)		PRESITION (2000) CO., LTD.
+C401CE     (base 16)		PRESITION (2000) CO., LTD.
+				42/6 Moo6
+				Muang  Samutsakorn  74000
+				TH
+
+18-71-17   (hex)		eta plus electronic gmbh
+187117     (base 16)		eta plus electronic gmbh
+				Lauterstr. 29
+				Nuertingen  BW  72622
+				DE
+
+EC-0E-C4   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+EC0EC4     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+30-FA-B7   (hex)		Tunai Creative
+30FAB7     (base 16)		Tunai Creative
+				12F, No.221, Sec.4, Zongxiao E. Rd, Taipei 106, Taiwan
+				TAIPEI  TAIPEI  10690
+				TW
+
+08-09-B6   (hex)		Masimo Corp
+0809B6     (base 16)		Masimo Corp
+				40 Parker
+				Irvine  CA  92618
+				US
+
+4C-F5-A0   (hex)		Scalable Network Technologies Inc
+4CF5A0     (base 16)		Scalable Network Technologies Inc
+				600 Corporate Pointe
+				Culver City  CA  90230
+				US
+
+D8-FB-11   (hex)		AXACORE
+D8FB11     (base 16)		AXACORE
+				2468 HISTORIC DECATUR RD
+				SAN DIEGO  CA  92106
+				US
+
+4C-E9-33   (hex)		RailComm, LLC
+4CE933     (base 16)		RailComm, LLC
+				1387 Fairport Road
+				Fairport  New York  14450
+				US
+
+CC-E1-7F   (hex)		Juniper Networks
+CCE17F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+E4-C6-2B   (hex)		Airware
+E4C62B     (base 16)		Airware
+				1045 Bryant St.
+				San Francisco  California  94103
+				US
+
+EC-1D-7F   (hex)		zte corporation
+EC1D7F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+AC-38-70   (hex)		Lenovo Mobile Communication Technology Ltd.
+AC3870     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999, Qishan North 2nd Road, Information & Optoelectronics Park,
+				Xiamen  Fujian  361006
+				
+
+4C-BC-42   (hex)		Shenzhen Hangsheng Electronics Co.,Ltd.
+4CBC42     (base 16)		Shenzhen Hangsheng Electronics Co.,Ltd.
+				Hangsheng Industrial Area, Fuyuan 1st Road,Heping Village, Fuyong Town,Baoan District
+				Shenzhen City  Guangdong  518103
+				CN
+
+70-F1-96   (hex)		Actiontec Electronics, Inc
+70F196     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+18-82-19   (hex)		Alibaba Cloud Computing Ltd.
+188219     (base 16)		Alibaba Cloud Computing Ltd.
+				Yuhang District of Hangzhou Wenyi Road, Building 1, No. 969 Xixi Park, Zhejiang Province
+				Hangzhou  Zhejiang  310000
+				CN
+
+28-A5-EE   (hex)		Shenzhen SDGI CATV Co., Ltd
+28A5EE     (base 16)		Shenzhen SDGI CATV Co., Ltd
+				2/F, NO, 3, QIONGYU ROAD,
+				shenzhen  Guangdong province  518057
+				CN
+
+EC-B9-07   (hex)		CloudGenix Inc
+ECB907     (base 16)		CloudGenix Inc
+				2933 Bunker Hill Lane
+				Santa Clara  CA  95054
+				US
+
+F4-28-33   (hex)		MMPC Inc.
+F42833     (base 16)		MMPC Inc.
+				#F313, KAIST-ICC, 193 Munjiro Yuseong-gu
+				Daejeon  Daejeon  305-732
+				KR
+
+0C-8C-8F   (hex)		Kamo Technology Limited
+0C8C8F     (base 16)		Kamo Technology Limited
+				Room 1502, 15/F., Yue Xiu Building,
+				Wanchai  Hong Kong  160-174
+				CN
+
+A4-A4-D3   (hex)		Bluebank Communication Technology Co.Ltd
+A4A4D3     (base 16)		Bluebank Communication Technology Co.Ltd
+				No.13-2.Jiang Ying Road,
+				  Chongqing  401336
+				CN
+
+A8-32-9A   (hex)		Digicom Futuristic Technologies Ltd.
+A8329A     (base 16)		Digicom Futuristic Technologies Ltd.
+				406 Mirror Tower, Modi Road, TST
+				    000086
+				HK
+
+F4-D0-32   (hex)		Yunnan Ideal Information&Technology.,Ltd
+F4D032     (base 16)		Yunnan Ideal Information&Technology.,Ltd
+				The 1st Floor, Building Four ,JingdianMingju,Haiyuanzhong road, High Tech Development Zone,Kunming,YunnanP.R.China
+				Kunming  Yunnan  650106
+				CN
+
+60-02-92   (hex)		PEGATRON CORPORATION
+600292     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+B4-B8-59   (hex)		Texa Spa
+B4B859     (base 16)		Texa Spa
+				Via I Maggio, 9
+				Monastier di Treviso  Treviso  31050
+				IT
+
+5C-F9-F0   (hex)		Atomos Engineering P/L
+5CF9F0     (base 16)		Atomos Engineering P/L
+				36 Park St
+				South Melbourne  Victoria  3205
+				AU
+
+70-2D-D1   (hex)		Newings Communication CO., LTD.
+702DD1     (base 16)		Newings Communication CO., LTD.
+				12F, Block 1, NO 7866, Humin Rd, Minhang District, Shanghai, China
+				Shanghai  Shanghai  200000
+				CN
+
+14-75-90   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+147590     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+50-BD-5F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+50BD5F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+98-7E-46   (hex)		Emizon Networks Limited
+987E46     (base 16)		Emizon Networks Limited
+				1 Allerton Road
+				Rugby  Warwickshire  CV23 0PA
+				GB
+
+3C-46-D8   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+3C46D8     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+4C-83-DE   (hex)		Cisco SPVTG
+4C83DE     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+A8-13-74   (hex)		Panasonic Corporation AVC Networks Company
+A81374     (base 16)		Panasonic Corporation AVC Networks Company
+				1-15 Matsuo cho
+				Kadoma city  Osaka  571-8504
+				JP
+
+08-3D-88   (hex)		Samsung Electronics Co.,Ltd
+083D88     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-4E-5D   (hex)		ZhongMiao Technology Co., Ltd.
+BC4E5D     (base 16)		ZhongMiao Technology Co., Ltd.
+				NO.2009 Lihu Avenue,  WuxiStudioA-A3
+				Wuxi  Jiangsu  214000
+				CN
+
+3C-18-9F   (hex)		Nokia Corporation
+3C189F     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+7C-6A-C3   (hex)		GatesAir, Inc
+7C6AC3     (base 16)		GatesAir, Inc
+				5300 Kings Island Drive
+				Mason  Ohio  45040
+				US
+
+5C-5B-C2   (hex)		YIK Corporation
+5C5BC2     (base 16)		YIK Corporation
+				B-4F,Pangyo Silicon Park 613
+				Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+30-59-5B   (hex)		streamnow AG
+30595B     (base 16)		streamnow AG
+				Brandstrasse 33
+				Schlieren  Zürich  8952
+				CH
+
+84-85-0A   (hex)		Hella Sonnen- und Wetterschutztechnik GmbH
+84850A     (base 16)		Hella Sonnen- und Wetterschutztechnik GmbH
+				Abfaltersbach 125
+				Abfaltersbach  Tirol  9913
+				AT
+
+08-CD-9B   (hex)		samtec automotive electronics & software GmbH
+08CD9B     (base 16)		samtec automotive electronics & software GmbH
+				Saarstrasse 27
+				Filderstadt  Baden-Wuerttemberg  70794
+				DE
+
+28-E6-E9   (hex)		SIS Sat Internet Services GmbH
+28E6E9     (base 16)		SIS Sat Internet Services GmbH
+				Justus-von-Liebig Str. 26
+				Neustadt  Niedersachsen  31535
+				DE
+
+F4-FD-2B   (hex)		ZOYI Company
+F4FD2B     (base 16)		ZOYI Company
+				827-66 Yeoksam 1-dong, Second Floor
+				Seoul  Korea  135-935
+				KR
+
+F4-F6-46   (hex)		Dediprog Technology Co. Ltd.
+F4F646     (base 16)		Dediprog Technology Co. Ltd.
+				4F,No.7,Lane 143, Xinming Rd.,
+				Taipei    114
+				TW
+
+30-0D-2A   (hex)		Zhejiang Wellcom Technology Co.,Ltd.
+300D2A     (base 16)		Zhejiang Wellcom Technology Co.,Ltd.
+				Liuhe Road,Binjiang District , Hangzhou
+				Hangzhou  Zhejiang  310012
+				
+
+04-5C-8E   (hex)		gosund GROUP CO.,LTD
+045C8E     (base 16)		gosund GROUP CO.,LTD
+				11/F., FRONT BLOCK, HANG LOK BUILDING
+				SHEUNG WAN, HK    999077
+				HK
+
+7C-C4-EF   (hex)		Devialet
+7CC4EF     (base 16)		Devialet
+				126, rue Réaumur
+				Paris  Paris  75002
+				FR
+
+D8-5D-FB   (hex)		Private
+D85DFB     (base 16)		Private
+
+DC-F1-10   (hex)		Nokia Corporation
+DCF110     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+60-8F-5C   (hex)		Samsung Electronics Co.,Ltd
+608F5C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-38-E1   (hex)		Juniper Networks
+DC38E1     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+90-8C-63   (hex)		GZ Weedong Networks Technology Co. , Ltd
+908C63     (base 16)		GZ Weedong Networks Technology Co. , Ltd
+				38th Floor,Ren Feng Building
+				Guangzhou  Guangdong  510620
+				CN
+
+E8-EF-89   (hex)		OPMEX Tech.
+E8EF89     (base 16)		OPMEX Tech.
+				18F GDC Building, 9 Gaoxin Central Avenue 3rd, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+10-92-66   (hex)		Samsung Electronics Co.,Ltd
+109266     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+EC-2E-4E   (hex)		HITACHI-LG DATA STORAGE INC
+EC2E4E     (base 16)		HITACHI-LG DATA STORAGE INC
+				4F, MSC CENTER  BLDG., 22-23 KAIGAN 3-CHOME, MINATO-KU,
+				TOKYO  TOKYO  108-0022
+				JP
+
+34-81-C4   (hex)		AVM GmbH
+3481C4     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+98-37-13   (hex)		PT.Navicom Indonesia
+983713     (base 16)		PT.Navicom Indonesia
+				Perkantoran Citragrand Blok CW7 no 10
+				Bekasi  Jawa Barat  17435
+				ID
+
+A4-7E-39   (hex)		zte corporation
+A47E39     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+CC-B6-91   (hex)		NECMagnusCommunications
+CCB691     (base 16)		NECMagnusCommunications
+				4-28 MITA 1Chome
+				 Minato-ku  Tokyo  108-0073
+				JP
+
+40-16-7E   (hex)		ASUSTek COMPUTER INC.
+40167E     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+F8-4A-73   (hex)		EUMTECH CO., LTD
+F84A73     (base 16)		EUMTECH CO., LTD
+				Room 1201, 115, Dongdeok-ro
+				Daegu  Daegu  700-719
+				KR
+
+14-2B-D6   (hex)		Guangdong Appscomm Co.,Ltd
+142BD6     (base 16)		Guangdong Appscomm Co.,Ltd
+				Rm 903, Block C3, Chuangxin Building, No.182,
+				Guangzhou  Guangdong  510663
+				CN
+
+FC-C2-DE   (hex)		Murata Manufacturing Co., Ltd.
+FCC2DE     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+98-34-9D   (hex)		Krauss Maffei Technologies GmbH
+98349D     (base 16)		Krauss Maffei Technologies GmbH
+				Krauss-Mafffei-Str. 2
+				Munich    80997
+				DE
+
+88-0F-B6   (hex)		Jabil Circuits India Pvt Ltd,-EHTP unit
+880FB6     (base 16)		Jabil Circuits India Pvt Ltd,-EHTP unit
+				B-26, MIDC, Ranjangaon, Tal.Shirur
+				Pune  Maharashtra  412220
+				IN
+
+B4-66-98   (hex)		Zealabs srl
+B46698     (base 16)		Zealabs srl
+				via Monte Grappa, 25
+				Lancenigo di Villorba  Italy  31020
+				IT
+
+68-7C-C8   (hex)		Measurement Systems S. de R.L.
+687CC8     (base 16)		Measurement Systems S. de R.L.
+				45999 Regal Plaza
+				Sterling  VA  20165
+				US
+
+74-F8-5D   (hex)		Berkeley Nucleonics Corp
+74F85D     (base 16)		Berkeley Nucleonics Corp
+				2955 Kerner Blvd #D
+				San Rafael  California  94901
+				US
+
+B0-61-C7   (hex)		Ericsson-LG Enterprise
+B061C7     (base 16)		Ericsson-LG Enterprise
+				77, Heungan-daro 81beon-gil,
+				Anyang  Gyeonggi  431-749
+				KR
+
+00-92-FA   (hex)		SHENZHEN WISKY TECHNOLOGY CO.,LTD
+0092FA     (base 16)		SHENZHEN WISKY TECHNOLOGY CO.,LTD
+				5/F W2-A,Hight-tech Park South 1 Road,Nanshan District,Shenzhen,Guangdong,China
+				Shenzhen  Guangdong  518057
+				CN
+
+4C-7F-62   (hex)		Nokia Corporation
+4C7F62     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+10-0F-18   (hex)		Fu Gang Electronic(KunShan)CO.,LTD
+100F18     (base 16)		Fu Gang Electronic(KunShan)CO.,LTD
+				No.6 Zheng Wei West Road, Jin Xi Town, Kun Shan City, Jiang Su Province, China
+				Jiang Su    215324
+				CN
+
+D0-C7-C0   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D0C7C0     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+44-11-C2   (hex)		Telegartner Karl Gartner GmbH
+4411C2     (base 16)		Telegartner Karl Gartner GmbH
+				Lerchenstr. 35
+				Steinenbronn  Baden-Wurttemberg  71144
+				DE
+
+80-59-FD   (hex)		Noviga
+8059FD     (base 16)		Noviga
+				Lefortovskaya nab., 1
+				Moscow  -  105005
+				RU
+
+40-01-07   (hex)		Arista Corp
+400107     (base 16)		Arista Corp
+				40675 Encyclopedia Circle
+				Fremont  CA  94538
+				US
+
+30-C7-50   (hex)		MIC Technology Group
+30C750     (base 16)		MIC Technology Group
+				No. 6 Gaoxin 3 road
+				Xi'an  Shaanxi  710075
+				CN
+
+18-CC-23   (hex)		Philio Technology Corporation
+18CC23     (base 16)		Philio Technology Corporation
+				8F., No.653-2, Zhongzheng Rd
+				New Taipei    242
+				TW
+
+40-78-75   (hex)		IMBEL - Industria de Material Belico do Brasil
+407875     (base 16)		IMBEL - Industria de Material Belico do Brasil
+				Rua Monsenhor Manoel Gomes,   520
+				Rio de Janeiro  RJ  20931-670
+				BR
+
+D8-81-CE   (hex)		AHN INC.
+D881CE     (base 16)		AHN INC.
+				1006,Halla sigma valley, 53, Gasandigital 2-Ro
+				Seoul    153 706
+				KR
+
+28-C8-25   (hex)		DellKing Industrial Co., Ltd
+28C825     (base 16)		DellKing Industrial Co., Ltd
+				2F,Building D,Zhongxing Science Park,  No 3,Ganli 2nd Road,Gankeng Community
+				Shenzhen  GuangDong  518112
+				CN
+
+80-61-8F   (hex)		Shenzhen sangfei consumer communications co.,ltd
+80618F     (base 16)		Shenzhen sangfei consumer communications co.,ltd
+				11 science and technology road,shenzhen hi-tech industrial park nanshan district,shenzhen 518057,PRC
+				ShenZhen  China/GuangDong  518057
+				CN
+
+D8-2A-15   (hex)		Leitner SpA
+D82A15     (base 16)		Leitner SpA
+				Via Brennero 34
+				Vipiteno  Bolzano  39049
+				IT
+
+44-7E-76   (hex)		Trek Technology (S) Pte Ltd
+447E76     (base 16)		Trek Technology (S) Pte Ltd
+				30 Loyang Way #07-15
+				Singapore  Singapore  508769
+				SG
+
+B0-EC-8F   (hex)		GMX SAS
+B0EC8F     (base 16)		GMX SAS
+				32 Rue Brancion
+				PARIS    75015
+				FR
+
+28-DE-F6   (hex)		bioMerieux Inc.
+28DEF6     (base 16)		bioMerieux Inc.
+				595 Anglum Road
+				Hazelwood  MO  63042
+				US
+
+58-05-28   (hex)		LABRIS NETWORKS
+580528     (base 16)		LABRIS NETWORKS
+				Silikon Blok 1 NK 24 Teknokent
+				ANKARA  AN  06540
+				TR
+
+E0-D3-1A   (hex)		EQUES Technology Co., Limited
+E0D31A     (base 16)		EQUES Technology Co., Limited
+				Room 301, Building 1, No.168 Jixin Road,
+				  Shanghai  201199
+				CN
+
+98-77-70   (hex)		Pep Digital Technology (Guangzhou) Co., Ltd
+987770     (base 16)		Pep Digital Technology (Guangzhou) Co., Ltd
+				23F, Yinhui Building, No.117 Longyi Road,
+				Guangzhou  Guangdong Province  510635
+				CN
+
+68-D2-47   (hex)		Portalis LC
+68D247     (base 16)		Portalis LC
+				204 Fort Union Blvd. Ste. 202
+				Midvale  UT  84047
+				US
+
+50-B6-95   (hex)		Micropoint Biotechnologies,Inc.
+50B695     (base 16)		Micropoint Biotechnologies,Inc.
+				6F, No.3, Industry 5 Road, Shekou
+				Shenzhen  Guangdong  518067
+				CN
+
+B4-43-0D   (hex)		Broadlink Pty Ltd
+B4430D     (base 16)		Broadlink Pty Ltd
+				room 1201,  No. 588 jiangnan Rd,
+				Hangzhou  Zhejiang province  310052
+				CN
+
+A0-65-18   (hex)		VNPT TECHNOLOGY
+A06518     (base 16)		VNPT TECHNOLOGY
+				HoaLac Hi-Tech Park
+				  HANOI  10000
+				VN
+
+7C-8D-91   (hex)		Shanghai Hongzhuo Information Technology co.,LTD
+7C8D91     (base 16)		Shanghai Hongzhuo Information Technology co.,LTD
+				Room.161,Building 5,No.311 Jingao RD
+				Pudong  Shanghai  200136
+				CN
+
+74-8F-1B   (hex)		MasterImage 3D
+748F1B     (base 16)		MasterImage 3D
+				131, Gasan Digital 1-ro, Geumcheon-gu
+				Seoul    153-803
+				KR
+
+08-3F-76   (hex)		Intellian Technologies, Inc.
+083F76     (base 16)		Intellian Technologies, Inc.
+				348-5 Chungho-Ri Jinwi-Myeon
+				  Gyeonggi-Do  451-862
+				KR
+
+CC-89-FD   (hex)		Nokia Corporation
+CC89FD     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+34-46-6F   (hex)		HiTEM Engineering
+34466F     (base 16)		HiTEM Engineering
+				7420 Carroll Road
+				San Diego  CA  92121
+				US
+
+38-6C-9B   (hex)		Ivy Biomedical
+386C9B     (base 16)		Ivy Biomedical
+				11 Business Park Drive
+				Branford  Connecticut  06405
+				US
+
+B4-2C-92   (hex)		Zhejiang Weirong Electronic Co., Ltd
+B42C92     (base 16)		Zhejiang Weirong Electronic Co., Ltd
+				North of South Tanghe Road, Lingxi Town,
+				 Wenzhou City   Zhejiang Province  325800
+				CN
+
+A0-77-71   (hex)		Vialis BV
+A07771     (base 16)		Vialis BV
+				Loodsboot 15
+				HOUTEN  Utrecht  3991 CJ
+				US
+
+10-DD-F4   (hex)		Maxway Electronics CO.,LTD
+10DDF4     (base 16)		Maxway Electronics CO.,LTD
+				2F Building 4,A Section,3rd Industrial zone,Tangtou
+				Shenzhen  Guangdong  518018
+				CN
+
+5C-E7-BF   (hex)		New Singularity International Technical Development Co.,Ltd
+5CE7BF     (base 16)		New Singularity International Technical Development Co.,Ltd
+				8F,NorthStar-Ultrapower Tower, No.13 Beiyuan Road, Chaoyang District, Beijing, China
+				Beijing  Beijing  100107
+				CN
+
+6C-64-1A   (hex)		Penguin Computing
+6C641A     (base 16)		Penguin Computing
+				45800 Northport Loop West
+				Fremont  CA  94538
+				US
+
+50-A0-54   (hex)		Actineon
+50A054     (base 16)		Actineon
+				47751 Fremont Blvd
+				Fremont  California  94538
+				US
+
+B4-85-47   (hex)		Amptown System Company GmbH
+B48547     (base 16)		Amptown System Company GmbH
+				Wandsbeker Strasse 26
+				Hamburg  Hamburg  22179
+				DE
+
+50-56-A8   (hex)		Jolla Ltd
+5056A8     (base 16)		Jolla Ltd
+				Itaemerenkatu 11-13
+				  Helsinki  00180
+				US
+
+E8-E7-70   (hex)		Warp9 Tech Design, Inc.
+E8E770     (base 16)		Warp9 Tech Design, Inc.
+				3650 Pheasant Run N.E.
+				Blaine  MN  55449
+				US
+
+60-96-20   (hex)		Private
+609620     (base 16)		Private
+
+C0-F9-91   (hex)		GME Standard Communications P/L
+C0F991     (base 16)		GME Standard Communications P/L
+				17 Gibbon Rd.
+				Winston Hills  New South Wales  2153
+				AU
+
+D8-7C-DD   (hex)		SANIX INCORPORATED
+D87CDD     (base 16)		SANIX INCORPORATED
+				Creation Core Fukuoka 212, 3-2-16 Kamikoga,
+				Chikushino-shi  Fukuoka  818-0041
+				JP
+
+70-7C-18   (hex)		ADATA Technology Co., Ltd
+707C18     (base 16)		ADATA Technology Co., Ltd
+				2F, No.258, Lian Cheng Rd.
+				New Taipei City    23553
+				TW
+
+14-F2-8E   (hex)		ShenYang ZhongKe-Allwin Technology Co.LTD
+14F28E     (base 16)		ShenYang ZhongKe-Allwin Technology Co.LTD
+				No.6, Gaoge Road,
+				ShenYang  Liaoning  110179
+				CN
+
+BC-14-EF   (hex)		ITON Technology Limited
+BC14EF     (base 16)		ITON Technology Limited
+				Room 1302,A ablock, Building 4
+				ShenZhen  GuangDong Pronvice  518000
+				CN
+
+08-03-71   (hex)		KRG CORPORATE
+080371     (base 16)		KRG CORPORATE
+				41 rue Perier
+				Montrouge    92120
+				FR
+
+20-0E-95   (hex)		IEC – TC9 WG43
+200E95     (base 16)		IEC – TC9 WG43
+				3, rue de Varembé
+				Geneva  GE  1211
+				CH
+
+C8-F6-8D   (hex)		S.E.TECHNOLOGIES LIMITED
+C8F68D     (base 16)		S.E.TECHNOLOGIES LIMITED
+				#303 Shiodome building Level3
+				Minato-ku  Tokyo  105-0022
+				JP
+
+3C-D4-D6   (hex)		WirelessWERX, Inc
+3CD4D6     (base 16)		WirelessWERX, Inc
+				22687 Old Canal Rd.
+				Yorba Linda  California  92887
+				US
+
+0C-12-62   (hex)		zte corporation
+0C1262     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+78-EC-74   (hex)		Kyland-USA
+78EC74     (base 16)		Kyland-USA
+				1107 SE Willow Pl
+				Blue Springs  MO  64014
+				US
+
+98-DA-92   (hex)		Vuzix Corporation
+98DA92     (base 16)		Vuzix Corporation
+				2166 Brighton Henrietta Town Line Road
+				Rochester  NY  14623
+				US
+
+38-7B-47   (hex)		AKELA, Inc.
+387B47     (base 16)		AKELA, Inc.
+				5551 Ekwill Street, Suite A
+				Santa Barbara  California  93111
+				US
+
+C0-64-C6   (hex)		Nokia Corporation
+C064C6     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+E4-04-39   (hex)		TomTom Software Ltd
+E40439     (base 16)		TomTom Software Ltd
+				20th Floor Euston Tower
+				London    NW1 3AS
+				GB
+
+D0-C4-2F   (hex)		Tamagawa Seiki Co.,Ltd.
+D0C42F     (base 16)		Tamagawa Seiki Co.,Ltd.
+				1-3-47 Kitainter Kogyodanchi
+				Hachinohe city  Aomori-Pref.  039-2245
+				US
+
+54-93-59   (hex)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
+549359     (base 16)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
+				F 4th ,5th , 6th, No.6 Building,
+				Shenzhen  Guangdong  518129
+				US
+
+90-35-6E   (hex)		Vodafone Omnitel N.V.
+90356E     (base 16)		Vodafone Omnitel N.V.
+				Via Guglielmo Jervis, 13
+				Ivrea  Italy / Tourin  10015
+				IT
+
+28-44-30   (hex)		GenesisTechnical Systems (UK) Ltd
+284430     (base 16)		GenesisTechnical Systems (UK) Ltd
+				Venture Centre
+				Coventry    CV4 7EZ
+				GB
+
+5C-11-93   (hex)		Seal One AG
+5C1193     (base 16)		Seal One AG
+				Berliner Str. 44
+				Frankfurt am Main  Hessen  60311
+				DE
+
+78-3D-5B   (hex)		TELNET Redes Inteligentes S.A.
+783D5B     (base 16)		TELNET Redes Inteligentes S.A.
+				Polígono Industrial Centrovía
+				La Muela  Zaragoza  50198
+				ES
+
+D0-B5-23   (hex)		Bestcare Cloucal Corp.
+D0B523     (base 16)		Bestcare Cloucal Corp.
+				4F.,No.106,Sec.1,Xintai 5th Rd.,
+				New Taipei City    22102
+				TW
+
+24-A4-95   (hex)		Thales Canada Inc.
+24A495     (base 16)		Thales Canada Inc.
+				105 Moatfield Road
+				Toronto  Ontario  M3B 0A4
+				CA
+
+84-76-16   (hex)		Addat s.r.o.
+847616     (base 16)		Addat s.r.o.
+				U krematoria 24
+				Liberec  Liberec  46001
+				CZ
+
+DC-05-75   (hex)		SIEMENS ENERGY AUTOMATION
+DC0575     (base 16)		SIEMENS ENERGY AUTOMATION
+				 GOA WORKS ,L-6 ,
+				VERNA  GOA   403722
+				IN
+
+E0-97-F2   (hex)		Atomax Inc.
+E097F2     (base 16)		Atomax Inc.
+				8F-1, No.300, Sec.1, Nei-hu Rd.
+				  Taipei  114
+				TW
+
+70-30-5E   (hex)		Nanjing Zhongke Menglian Information Technology Co.,LTD
+70305E     (base 16)		Nanjing Zhongke Menglian Information Technology Co.,LTD
+				3rd Floor,Building A,Area 3
+				Nanjing  Jiangsu  210042
+				CN
+
+C0-98-E5   (hex)		University of Michigan
+C098E5     (base 16)		University of Michigan
+				4808 Beyster Bldg,
+				Ann Arbor  Michigan  48109
+				US
+
+50-E1-4A   (hex)		Private
+50E14A     (base 16)		Private
+
+70-8D-09   (hex)		Nokia Corporation
+708D09     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+98-FB-12   (hex)		Grand Electronics (HK) Ltd
+98FB12     (base 16)		Grand Electronics (HK) Ltd
+				Flat/Room 1120, 11/F Beverley Commercial Centre
+				    999077
+				HK
+
+3C-10-40   (hex)		daesung network
+3C1040     (base 16)		daesung network
+				#209 e-space Bldg,Guro-dong,Guro-gu
+				Seoul    152-789
+				KR
+
+28-FC-51   (hex)		The Electric Controller and Manufacturing Co., LLC
+28FC51     (base 16)		The Electric Controller and Manufacturing Co., LLC
+				PO Box 468
+				Saint Matthews  SC  29135
+				US
+
+40-74-96   (hex)		aFUN TECHNOLOGY INC.
+407496     (base 16)		aFUN TECHNOLOGY INC.
+				2F.,No.3,Lane29,HuLu ST.,Shihlin District,
+				Taipei    11165
+				TW
+
+70-1D-7F   (hex)		Comtech Technology Co., Ltd.
+701D7F     (base 16)		Comtech Technology Co., Ltd.
+				2F, No. 42, Sec. 3 Chung Yang Rd.
+				New Taipei City    23673
+				TW
+
+70-59-86   (hex)		OOO TTV
+705986     (base 16)		OOO TTV
+				No. 75, Okulov Street, Building 8
+				Perm    614068
+				RU
+
+84-4F-03   (hex)		Ablelink Electronics Ltd
+844F03     (base 16)		Ablelink Electronics Ltd
+				Flat 1602,16/F Kodak House 2 39 Healthy Street East,
+				    
+				CN
+
+90-67-17   (hex)		Alphion India Private Limited
+906717     (base 16)		Alphion India Private Limited
+				405 Windfall, Sahar Plaza
+				Mumbai  Maharashtra  400059
+				IN
+
+60-64-A1   (hex)		RADiflow Ltd.
+6064A1     (base 16)		RADiflow Ltd.
+				31 Habarzel St.
+				Tel Aviv    6971045
+				IL
+
+58-B9-61   (hex)		SOLEM Electronique
+58B961     (base 16)		SOLEM Electronique
+				ZAE La Plaine
+				CLAPIERS    34830
+				FR
+
+0C-47-3D   (hex)		Hitron Technologies. Inc
+0C473D     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+8C-CD-A2   (hex)		ACTP, Inc.
+8CCDA2     (base 16)		ACTP, Inc.
+				2400 Sand Lake Rd
+				Orlando  FL  32809
+				US
+
+84-26-2B   (hex)		Nokia
+84262B     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+98-6C-F5   (hex)		zte corporation
+986CF5     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+44-7B-C4   (hex)		DualShine Technology(SZ)Co.,Ltd
+447BC4     (base 16)		DualShine Technology(SZ)Co.,Ltd
+				No.334-1,LuoTian 3rd Industrial Park,
+				Shen Zhen  Guang Dong  518000
+				CN
+
+9C-03-9E   (hex)		Beijing Winchannel Software Technology Co., Ltd
+9C039E     (base 16)		Beijing Winchannel Software Technology Co., Ltd
+				8F, Block E, Dazhongsi Zhongkun Plaza No. A
+				Haidian District  BEIJING  100089
+				CN
+
+68-0A-D7   (hex)		Yancheng Kecheng Optoelectronic Technology Co., Ltd
+680AD7     (base 16)		Yancheng Kecheng Optoelectronic Technology Co., Ltd
+				No.1 East Road, Kaifa Avenue,
+				Yancheng  Jiangsu  224007
+				CN
+
+BC-88-93   (hex)		VILLBAU Ltd.
+BC8893     (base 16)		VILLBAU Ltd.
+				Üllöi ut 611.
+				Budapest  -  H-1182
+				HU
+
+70-61-73   (hex)		Calantec GmbH
+706173     (base 16)		Calantec GmbH
+				Doebelner Str. 4
+				  Berlin  12627
+				DE
+
+7C-49-B9   (hex)		Plexus Manufacturing Sdn Bhd
+7C49B9     (base 16)		Plexus Manufacturing Sdn Bhd
+				Plot 87
+				Bayan Lepas  Penang  11900
+				MY
+
+9C-F8-DB   (hex)		shenzhen eyunmei technology co,.ltd
+9CF8DB     (base 16)		shenzhen eyunmei technology co,.ltd
+				8/F Yiben Building,No.1063 ChaGuang Road,XiLi Town,
+				Shenzhen  Guangdong  518055
+				CN
+
+20-D2-1F   (hex)		Wincal Technology Corp.
+20D21F     (base 16)		Wincal Technology Corp.
+				1028 South Greenwood Ave.
+				Montebello  California  90640
+				US
+
+F8-95-50   (hex)		Proton Products Chengdu Ltd
+F89550     (base 16)		Proton Products Chengdu Ltd
+				1st Ring
+				Chengdu  Sichuan  610051
+				CN
+
+58-63-9A   (hex)		TPL SYSTEMES
+58639A     (base 16)		TPL SYSTEMES
+				ZAE DU PERIGORD NOIR
+				SARLAT    24200
+				FR
+
+18-7E-D5   (hex)		shenzhen kaism technology Co. Ltd
+187ED5     (base 16)		shenzhen kaism technology Co. Ltd
+				37# chuanglong west road pinghu shenzhen
+				shenzhen    518111
+				CN
+
+84-1B-38   (hex)		Shenzhen Excelsecu Data Technology Co.,Ltd
+841B38     (base 16)		Shenzhen Excelsecu Data Technology Co.,Ltd
+				Unit 701-709,7/F，South Block,SDGI Building A, No.2,
+				Shenzhen  Guangdong  518057
+				CN
+
+4C-CB-F5   (hex)		zte corporation
+4CCBF5     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+44-70-0B   (hex)		IFFU
+44700B     (base 16)		IFFU
+				33, Annyeom-gil 112 beon-gil,jeongnam-myeon
+				Hwaseong-si  Gyeonggi-do  445-968
+				US
+
+54-A5-4B   (hex)		NSC Communications Siberia Ltd
+54A54B     (base 16)		NSC Communications Siberia Ltd
+				Ordjonikidze 38
+				  Novosibirsk  630099
+				RU
+
+BC-2B-6B   (hex)		Beijing Haier IC Design Co.,Ltd
+BC2B6B     (base 16)		Beijing Haier IC Design Co.,Ltd
+				Room 205, Tongheng Building, No.4 Huayuan Road, Haidian District
+				Beijing  Beijing  100088
+				CN
+
+98-D3-31   (hex)		Shenzhen Bolutek Technology Co.,Ltd.
+98D331     (base 16)		Shenzhen Bolutek Technology Co.,Ltd.
+				Building B, District A, Internet industry base, Baoan
+				Shenzhen  Guangdong  518000
+				CN
+
+38-EC-11   (hex)		Novatek Microelectronics Corp.
+38EC11     (base 16)		Novatek Microelectronics Corp.
+				No.1-2 Innovation Rd I.,
+				Hsinchu    300
+				TW
+
+1C-41-58   (hex)		Gemalto M2M GmbH
+1C4158     (base 16)		Gemalto M2M GmbH
+				Siemensdamm 50
+				Berlin  Berlin  13629
+				DE
+
+9C-28-40   (hex)		Discovery Technology,LTD..
+9C2840     (base 16)		Discovery Technology,LTD..
+				5th floor Building 2,Block A,Internet industrial park,
+				Shenzhen  Guangzhou  518100
+				CN
+
+E0-AF-4B   (hex)		Pluribus Networks, Inc.
+E0AF4B     (base 16)		Pluribus Networks, Inc.
+				1808 Embarcadero Rd Suite B
+				Palo Alto  CA  94303
+				US
+
+84-0F-45   (hex)		Shanghai GMT Digital Technologies Co., Ltd
+840F45     (base 16)		Shanghai GMT Digital Technologies Co., Ltd
+				Room 501-505
+				Zhangjiang Hi-tech Park  Shanghai  201204
+				CN
+
+2C-5F-F3   (hex)		Pertronic Industries
+2C5FF3     (base 16)		Pertronic Industries
+				17 Eastern Hutt Road
+				Wingate    5019
+				NZ
+
+78-49-1D   (hex)		The Will-Burt Company
+78491D     (base 16)		The Will-Burt Company
+				169 S. Main St.
+				Orrivlle  Ohio  44667
+				US
+
+F4-6A-BC   (hex)		Adonit Corp. Ltd.
+F46ABC     (base 16)		Adonit Corp. Ltd.
+				10689 Rm. A, 9F, No.107 Sec.4 Ren-Ai Rd.,
+				Taipei  Taipei  10689
+				TW
+
+28-C6-71   (hex)		Yota Devices OY
+28C671     (base 16)		Yota Devices OY
+				Elektronikkatie 13
+				Oulu    90590
+				FI
+
+D8-69-60   (hex)		Steinsvik
+D86960     (base 16)		Steinsvik
+				Rundhaug 25
+				FOERRESFJORDEN  Rogaland  5563
+				NO
+
+08-EF-3B   (hex)		MCS Logic Inc.
+08EF3B     (base 16)		MCS Logic Inc.
+				6F. Samho Center B Bldg., 275-6,Yangjae-Dong, Secho-Ku,Seoul
+				Seoul    137-941
+				KR
+
+E8-EA-DA   (hex)		Denkovi Assembly Electronics LTD
+E8EADA     (base 16)		Denkovi Assembly Electronics LTD
+				St. Stambolov str. 21
+				Byala  Rousse  7100
+				BG
+
+F8-5B-C9   (hex)		M-Cube Spa
+F85BC9     (base 16)		M-Cube Spa
+				Corso Cavour 2/2d
+				  Trieste  34132
+				IT
+
+7C-B7-7B   (hex)		Paradigm Electronics Inc
+7CB77B     (base 16)		Paradigm Electronics Inc
+				5340 Canotek Rd Unit#4
+				Ottawa  ON  K1J 9C6
+				CA
+
+B0-CE-18   (hex)		Zhejiang shenghui lighting co.,Ltd
+B0CE18     (base 16)		Zhejiang shenghui lighting co.,Ltd
+				Rm801,1th Xinye Building
+				cao he jing Develop Zone  Shanghai  200233
+				CN
+
+6C-F9-7C   (hex)		Nanoptix Inc.
+6CF97C     (base 16)		Nanoptix Inc.
+				699 Champlain St
+				Dieppe  NB  E1A 1P6
+				CA
+
+F8-FF-5F   (hex)		Shenzhen Communication Technology Co.,Ltd
+F8FF5F     (base 16)		Shenzhen Communication Technology Co.,Ltd
+				2F,6 Block, Kupai inforport,No.2 Mengxi Street,(North)High-tech Industrial Park,
+				Shenzhen  Guangdong  518057
+				CN
+
+10-22-79   (hex)		ZeroDesktop, Inc.
+102279     (base 16)		ZeroDesktop, Inc.
+				125 University Ave, Suite 150
+				Palo Alto  California  94301
+				US
+
+7C-1A-FC   (hex)		Dalian Co-Edifice Video Technology Co., Ltd
+7C1AFC     (base 16)		Dalian Co-Edifice Video Technology Co., Ltd
+				23F , Block A , #32 Huoju Road , Hi-Tech Zone
+				Dalian  Liaoning  116023
+				CN
+
+F4-7A-4E   (hex)		Woojeon&Handan
+F47A4E     (base 16)		Woojeon&Handan
+				569-12, Gasan-dong,
+				Seoul    153-803
+				KR
+
+04-84-8A   (hex)		7INOVA TECHNOLOGY LIMITED
+04848A     (base 16)		7INOVA TECHNOLOGY LIMITED
+				3F, A Building, QuanYuanFa Industrial Park, No. 72, GuanLan Rd
+				LongHua District  Shenzhen  518000
+				CN
+
+EC-22-57   (hex)		JiangSu NanJing University Electronic Information Technology Co.,Ltd
+EC2257     (base 16)		JiangSu NanJing University Electronic Information Technology Co.,Ltd
+				F7,Block 06
+				NanJing  JiangSu  210000
+				CN
+
+F0-37-A1   (hex)		Huike Electronics (SHENZHEN) CO., LTD.
+F037A1     (base 16)		Huike Electronics (SHENZHEN) CO., LTD.
+				Huike industrial park,Minying industrial park,Shuitian country,Shiyan,Baoan District
+				SHENZHEN  GUANGDONG  518108
+				CN
+
+70-4C-ED   (hex)		TMRG, Inc.
+704CED     (base 16)		TMRG, Inc.
+				11950 Democracy Drive
+				Reston  VA  20190
+				US
+
+F0-8E-DB   (hex)		VeloCloud Networks
+F08EDB     (base 16)		VeloCloud Networks
+				720 University Ave.
+				Palo Alto  CA  94301
+				US
+
+C0-A3-9E   (hex)		EarthCam, Inc.
+C0A39E     (base 16)		EarthCam, Inc.
+				84 Kennedy Street
+				Hackensack  New Jersey  07601
+				US
+
+10-9A-B9   (hex)		Tosibox Oy
+109AB9     (base 16)		Tosibox Oy
+				Elektroniikkatie 8
+				  Oulu  90590
+				FI
+
+14-2D-8B   (hex)		Incipio Technologies, Inc
+142D8B     (base 16)		Incipio Technologies, Inc
+				6001 Oak Canyon
+				Irvine  CA  92618
+				US
+
+68-EE-96   (hex)		Cisco SPVTG
+68EE96     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+78-D3-8D   (hex)		HONGKONG YUNLINK TECHNOLOGY LIMITED
+78D38D     (base 16)		HONGKONG YUNLINK TECHNOLOGY LIMITED
+				15B 15/F CHEUK NANG PLAZA 250 HENNESSY RD HK
+				ShenzhenCity  Guangdong Province  518103
+				US
+
+DC-AE-04   (hex)		CELOXICA Ltd
+DCAE04     (base 16)		CELOXICA Ltd
+				34 Porchester Road
+				  London  W2 6ES
+				GB
+
+80-05-DF   (hex)		Montage Technology Group Limited
+8005DF     (base 16)		Montage Technology Group Limited
+				Rm#A16F, Technolgy Blgd.,Yishan Rd.
+				Shanghai    200233
+				CN
+
+68-1D-64   (hex)		Sunwave Communications Co., Ltd
+681D64     (base 16)		Sunwave Communications Co., Ltd
+				581,huoju Avenue,BinJiang District
+				 Hangzhou  Zhejiang Province  310053
+				CN
+
+90-7A-0A   (hex)		Gebr. Bode GmbH & Co KG
+907A0A     (base 16)		Gebr. Bode GmbH & Co KG
+				Ochshaeuser Str. 14
+				Kassel    34266
+				DE
+
+A0-C6-EC   (hex)		ShenZhen ANYK Technology Co.,LTD
+A0C6EC     (base 16)		ShenZhen ANYK Technology Co.,LTD
+				5F,12B,ZhongXing Industrial Zone, Venture Road
+				ShenZhen  GuangDong  518054
+				CN
+
+78-E8-B6   (hex)		zte corporation
+78E8B6     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+10-78-CE   (hex)		Hanvit SI, Inc.
+1078CE     (base 16)		Hanvit SI, Inc.
+				#201 Daeheung Building, 265-18 Yangjae-dong
+				Seoul    137130
+				KR
+
+D8-DA-52   (hex)		APATOR S.A.
+D8DA52     (base 16)		APATOR S.A.
+				ul Gdanska 4A lok. C4
+				Torun  Kujawsko-Pomorskie  87-100
+				PL
+
+58-7A-4D   (hex)		Stonesoft Corporation
+587A4D     (base 16)		Stonesoft Corporation
+				Italahdenkatu 22A
+				Helsinki    00210
+				FI
+
+84-E6-29   (hex)		Bluwan SA
+84E629     (base 16)		Bluwan SA
+				Espace Lumiere, Bat 2
+				Chatou    78400
+				FR
+
+C4-7F-51   (hex)		Inventek Systems
+C47F51     (base 16)		Inventek Systems
+				2 Republic Road
+				Billerica  Ma  01862
+				US
+
+A8-97-DC   (hex)		IBM
+A897DC     (base 16)		IBM
+				4400 North First Street
+				San Jose  CA  95134
+				US
+
+CC-D2-9B   (hex)		Shenzhen Bopengfa Elec&Technology CO.,Ltd
+CCD29B     (base 16)		Shenzhen Bopengfa Elec&Technology CO.,Ltd
+				 Bldg56A,3/F,Baotian Rd3,Xixiang Town
+				shenzhen  guangdong  518000
+				CN
+
+A0-9B-BD   (hex)		Total Aviation Solutions Pty Ltd
+A09BBD     (base 16)		Total Aviation Solutions Pty Ltd
+				Suite 816A / 3 PARKLAND BVDE
+				Brisbane  QLD  4000
+				AU
+
+D4-0B-B9   (hex)		Solid Semecs bv.
+D40BB9     (base 16)		Solid Semecs bv.
+				Oostwijk 18
+				Uden  Noord Brabant  5406 XT
+				NL
+
+F4-15-FD   (hex)		Shanghai Pateo Electronic Equipment Manufacturing Co., Ltd.
+F415FD     (base 16)		Shanghai Pateo Electronic Equipment Manufacturing Co., Ltd.
+				20th Floor, Metro Tower
+				Xuhui District  Shanghai  200030
+				CN
+
+70-E0-27   (hex)		HONGYU COMMUNICATION TECHNOLOGY LIMITED
+70E027     (base 16)		HONGYU COMMUNICATION TECHNOLOGY LIMITED
+				Room4B, East Building 210,
+				Shen Zhen  Guang Dong Province  518040
+				CN
+
+E8-48-1F   (hex)		Advanced Automotive Antennas
+E8481F     (base 16)		Advanced Automotive Antennas
+				Pol.Ind Can Mitjans s/n
+				Viladecavalls  Barcelona  08232
+				ES
+
+34-95-DB   (hex)		Logitec Corporation
+3495DB     (base 16)		Logitec Corporation
+				8268 Rokudohara, Misuzu
+				Ina  Nagano  
+				JP
+
+9C-B7-93   (hex)		Creatcomm Technology Inc.
+9CB793     (base 16)		Creatcomm Technology Inc.
+				Rm 619, Buld A, Modern Plaza
+				Kunshan  Jiangsu  201203
+				CN
+
+5C-33-5C   (hex)		Swissphone Telecom AG
+5C335C     (base 16)		Swissphone Telecom AG
+				Faelmisstrasse 21
+				Samstagern  Zurich  CH-8833
+				CH
+
+04-DF-69   (hex)		Car Connectivity Consortium
+04DF69     (base 16)		Car Connectivity Consortium
+				3855 SW 153rd Drive
+				Beaverton  Oregon  97006
+				US
+
+78-DA-B3   (hex)		GBO Technology
+78DAB3     (base 16)		GBO Technology
+				1150 Bayhill Dr. Ste. 111
+				San Bruno  CA  94066
+				US
+
+70-0F-EC   (hex)		Poindus Systems Corp.
+700FEC     (base 16)		Poindus Systems Corp.
+				5F., No. 59, Lane. 77, Xing-Ai Rd., Neihu Dist.,
+				 Taipei City    114
+				TW
+
+F0-24-05   (hex)		OPUS High Technology Corporation
+F02405     (base 16)		OPUS High Technology Corporation
+				1st Floor, No. 367, Gaocui Road
+				Hsinchu City    30064
+				TW
+
+D4-10-90   (hex)		iNFORM Systems AG
+D41090     (base 16)		iNFORM Systems AG
+				Europastrasse 15
+				Glattbrugg    8152
+				CH
+
+78-D5-B5   (hex)		NAVIELEKTRO KY
+78D5B5     (base 16)		NAVIELEKTRO KY
+				HALLIMESTARINKATU 11
+				KAARINA    FIN-20780
+				FI
+
+E4-7D-5A   (hex)		Beijing Hanbang Technology Corp.
+E47D5A     (base 16)		Beijing Hanbang Technology Corp.
+				4/F,Skirt Building
+				Haidian District  Beijing  100080
+				CN
+
+E4-F7-A1   (hex)		Datafox GmbH
+E4F7A1     (base 16)		Datafox GmbH
+				Dermbacher Str. 12 - 14
+				Geisa  Thüringen  36419
+				DE
+
+10-5C-3B   (hex)		Perma-Pipe, Inc.
+105C3B     (base 16)		Perma-Pipe, Inc.
+				7720 Lehigh Ave
+				Niles  IL  60714
+				US
+
+34-9D-90   (hex)		Heinzmann GmbH & CO. KG
+349D90     (base 16)		Heinzmann GmbH & CO. KG
+				Am Haselbach 1
+				Schoenau  Baden Wuertemberg  79677
+				DE
+
+D8-62-DB   (hex)		Eno Inc.
+D862DB     (base 16)		Eno Inc.
+				2-3-18, Komagome, Toshima-ku
+				Tokyo    1700013
+				JP
+
+C4-7D-FE   (hex)		A.N. Solutions GmbH
+C47DFE     (base 16)		A.N. Solutions GmbH
+				Am Brauhaus 12
+				Dresden  Saxony  01099
+				DE
+
+CC-BD-35   (hex)		Steinel GmbH
+CCBD35     (base 16)		Steinel GmbH
+				Dieselstrasse 80-84
+				Herzebrock-Clarholz    33442
+				DE
+
+6C-EC-A1   (hex)		SHENZHEN CLOU ELECTRONICS CO. LTD.
+6CECA1     (base 16)		SHENZHEN CLOU ELECTRONICS CO. LTD.
+				5/F, building. T2, Hi-tech Industrial Park
+				SHENZ  GUANGONG  518057
+				CN
+
+B0-38-50   (hex)		Nanjing CAS-ZDC IOT SYSTEM CO.,LTD
+B03850     (base 16)		Nanjing CAS-ZDC IOT SYSTEM CO.,LTD
+				699-27 Xuanwu Avenue
+				Nanjing  Jiangsu  210000
+				CN
+
+74-8E-08   (hex)		Bestek Corp.
+748E08     (base 16)		Bestek Corp.
+				No. 6, Lane 229, Sec. 3, Chang-Xing Rd.
+				Taoyuan    33852
+				TW
+
+78-F5-E5   (hex)		BEGA Gantenbrink-Leuchten KG
+78F5E5     (base 16)		BEGA Gantenbrink-Leuchten KG
+				Hennenbusch
+				Menden  NRW  58708
+				DE
+
+8C-3C-07   (hex)		Skiva Technologies, Inc.
+8C3C07     (base 16)		Skiva Technologies, Inc.
+				8330 Sterling St
+				Irving  TX  75063
+				US
+
+38-A8-6B   (hex)		Orga BV
+38A86B     (base 16)		Orga BV
+				Strickledeweg 13
+				Schiedam    3125 AT
+				NL
+
+F0-77-65   (hex)		Sourcefire, Inc
+F07765     (base 16)		Sourcefire, Inc
+				9780 Patuxent Woods Drive
+				Columbia  Maryland  21046
+				US
+
+14-41-E2   (hex)		Monaco Enterprises, Inc.
+1441E2     (base 16)		Monaco Enterprises, Inc.
+				14820 E. Sprague Ave.
+				Spokane  WA  99216
+				US
+
+EC-D0-40   (hex)		GEA Farm Technologies GmbH
+ECD040     (base 16)		GEA Farm Technologies GmbH
+				Siemensstrasse 25-27
+				Boenen  Northrhine-Westfalia  59199
+				DE
+
+F8-0D-EA   (hex)		ZyCast Technology Inc.
+F80DEA     (base 16)		ZyCast Technology Inc.
+				No.33, Lane 181, Chung Hwa Road,
+				Hsin Chu    30060
+				TW
+
+B0-88-07   (hex)		Strata Worldwide
+B08807     (base 16)		Strata Worldwide
+				8995 Roswell Road
+				Sandy Springs  GA  30350
+				US
+
+24-95-04   (hex)		SFR
+249504     (base 16)		SFR
+				40-42 QUAI DU POINT DU JOUR
+				BOULOGNE BILLANCOURT  HAUT DE SEINE  92100
+				FR
+
+F4-58-42   (hex)		Boxx TV Ltd
+F45842     (base 16)		Boxx TV Ltd
+				Suite 17, Imperial Studios
+				  London  SW6 2AG
+				GB
+
+10-66-82   (hex)		NEC Platforms, Ltd.
+106682     (base 16)		NEC Platforms, Ltd.
+				800 Shimomata
+				Kakegawa  Shizuoka  436-8501
+				JP
+
+24-62-78   (hex)		sysmocom - systems for mobile communications GmbH
+246278     (base 16)		sysmocom - systems for mobile communications GmbH
+				Alt-Moabit 93
+				  Berlin  10559
+				DE
+
+F0-84-C9   (hex)		zte corporation
+F084C9     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D4-01-6D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D4016D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+98-5C-93   (hex)		SBG Systems SAS
+985C93     (base 16)		SBG Systems SAS
+				3bis, chemin de la Jonchere
+				Rueil Malmaison  Ile de France  92500
+				FR
+
+A0-8A-87   (hex)		HuiZhou KaiYue Electronic Co.,Ltd
+A08A87     (base 16)		HuiZhou KaiYue Electronic Co.,Ltd
+				3#,Ruttang 2nd area,Tongcheng Avenue
+				Huizhou  Guangdong  516005
+				CN
+
+28-CD-9C   (hex)		Shenzhen Dynamax Software Development Co.,Ltd.
+28CD9C     (base 16)		Shenzhen Dynamax Software Development Co.,Ltd.
+				Room 425-426,Block A,No.30,Hangkong Road
+				Shenzhen  Guangdong  518000
+				CN
+
+C0-C3-B6   (hex)		Automatic Systems
+C0C3B6     (base 16)		Automatic Systems
+				avenue mercator,5
+				Wavre  Belgium  1300
+				BE
+
+A0-EB-76   (hex)		AirCUVE Inc.
+A0EB76     (base 16)		AirCUVE Inc.
+				Guro-gu Digital-ro
+				  Seoul  152-719
+				KR
+
+FC-44-99   (hex)		Swarco LEA d.o.o.
+FC4499     (base 16)		Swarco LEA d.o.o.
+				Finzgarjeva 1A
+				Lesce    4248
+				SI
+
+DC-64-7C   (hex)		C.R.S. iiMotion GmbH
+DC647C     (base 16)		C.R.S. iiMotion GmbH
+				Hermann-Schwer-Str. 3
+				Villingen-Schwenningen    78048
+				DE
+
+14-86-92   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+148692     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+A8-15-4D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+A8154D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+5C-F3-70   (hex)		CC&C Technologies, Inc
+5CF370     (base 16)		CC&C Technologies, Inc
+				8F, 150, Chien I Rd.
+				Chung Ho  Taiwan  235
+				TW
+
+A4-E0-E6   (hex)		FILIZOLA S.A. PESAGEM E AUTOMACAO
+A4E0E6     (base 16)		FILIZOLA S.A. PESAGEM E AUTOMACAO
+				RUA JOAO VENTURA BATISTA, 450
+				  SAO PAULO  02054-100
+				BR
+
+38-17-66   (hex)		PROMZAKAZ LTD.
+381766     (base 16)		PROMZAKAZ LTD.
+				Noviy Arbat street, 21
+				  Moscow  119019
+				RU
+
+18-E8-DD   (hex)		MODULETEK
+18E8DD     (base 16)		MODULETEK
+				Unit 4A.4F.B Building. Shenfubao Science and Technology Industrial Park
+				Shenzhen  Guangdong  518038
+				CN
+
+D0-73-D5   (hex)		LIFI LABS MANAGEMENT PTY LTD
+D073D5     (base 16)		LIFI LABS MANAGEMENT PTY LTD
+				7 Cubitt St
+				Richmond  Victoria  3121
+				AU
+
+14-94-48   (hex)		BLU CASTLE S.A.
+149448     (base 16)		BLU CASTLE S.A.
+				5 RUE BONNEVOIE
+				  LUXEMBOURG  L-1260
+				US
+
+48-F9-25   (hex)		Maestronic
+48F925     (base 16)		Maestronic
+				Futura plaza 2103
+				Kwun Tong    88
+				HK
+
+38-67-93   (hex)		Asia Optical Co., Inc.
+386793     (base 16)		Asia Optical Co., Inc.
+				No. 22-3 South 2nd Road, T.E.P.Z.
+				Taichung  Taiwan  42754
+				TW
+
+0C-82-68   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+0C8268     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+D8-1E-DE   (hex)		B&W Group Ltd
+D81EDE     (base 16)		B&W Group Ltd
+				5070 Francois Cusson
+				Lachine  Quebec  H8T1B3
+				CA
+
+24-EA-40   (hex)		Helmholz GmbH & Co. KG
+24EA40     (base 16)		Helmholz GmbH & Co. KG
+				Hannberger Weg 2
+				Grossenseebach  BAY  91091
+				DE
+
+D4-29-EA   (hex)		Zimory GmbH
+D429EA     (base 16)		Zimory GmbH
+				Revalerstrasse 100
+				Berlin  Brandenburg  10245
+				DE
+
+34-AD-E4   (hex)		Shanghai Chint Power Systems Co., Ltd.
+34ADE4     (base 16)		Shanghai Chint Power Systems Co., Ltd.
+				855 Wenhe Road, Block 4
+				    201614
+				CN
+
+3C-94-D5   (hex)		Juniper Networks
+3C94D5     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+68-83-1A   (hex)		Pandora Mobility Corporation
+68831A     (base 16)		Pandora Mobility Corporation
+				1F., No.33, Fude St
+				Taoyuan  Guishan  333
+				TW
+
+FC-DB-96   (hex)		ENERVALLEY CO., LTD
+FCDB96     (base 16)		ENERVALLEY CO., LTD
+				907-101 DIGITAL EMPIRE II
+				SUWON SI  GYEONGGI DO  443 734
+				KR
+
+14-23-D7   (hex)		EUTRONIX CO., LTD.
+1423D7     (base 16)		EUTRONIX CO., LTD.
+				EUTRONIX BLDG. 4TH FLOOR
+				ANYANG  KYEONGGI  431-804
+				US
+
+DC-6F-08   (hex)		Bay Storage Technology
+DC6F08     (base 16)		Bay Storage Technology
+				6200 Stoneridge Mall Road
+				Pleasanton  CA  94588
+				US
+
+90-DA-4E   (hex)		AVANU
+90DA4E     (base 16)		AVANU
+				5205 Prospect Rd
+				San Jose  CA  95129-5034
+				US
+
+28-18-78   (hex)		Microsoft Corporation
+281878     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				Redmond  Washington  98052-6399
+				US
+
+70-38-B4   (hex)		Low Tech Solutions
+7038B4     (base 16)		Low Tech Solutions
+				350 N. Orleans
+				Chicago  IL  60654
+				US
+
+74-5F-00   (hex)		Samsung Semiconductor Inc.
+745F00     (base 16)		Samsung Semiconductor Inc.
+				3566 N. 1St Street
+				San Jose  CA  95134
+				US
+
+E0-C3-F3   (hex)		zte corporation
+E0C3F3     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+5C-20-D0   (hex)		Asoni Communication Co., Ltd.
+5C20D0     (base 16)		Asoni Communication Co., Ltd.
+				 21F-1, No.97, Sec. 4, Chongsin Rd., Sanchong District
+				New Taipei City  Taiwan  24161
+				TW
+
+AC-A4-30   (hex)		Peerless AV
+ACA430     (base 16)		Peerless AV
+				2300 White Oak Circle
+				Aurora  illinios  60502
+				US
+
+84-7A-88   (hex)		HTC Corporation
+847A88     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+A4-D8-56   (hex)		Gimbal, Inc
+A4D856     (base 16)		Gimbal, Inc
+				12526 High Bluff Drive
+				San Diego  Ca  92130
+				US
+
+78-55-17   (hex)		SankyuElectronics
+785517     (base 16)		SankyuElectronics
+				2-30-12
+				Ohta-ku  Tokyo  146-0091
+				JP
+
+B4-7F-5E   (hex)		Foresight Manufacture (S) Pte Ltd
+B47F5E     (base 16)		Foresight Manufacture (S) Pte Ltd
+				1 Sims Lane #04-09
+				  Singapore  387355
+				SG
+
+A0-FE-91   (hex)		AVAT Automation GmbH
+A0FE91     (base 16)		AVAT Automation GmbH
+				Derendinger Strasse 40
+				Tuebingen    72072
+				DE
+
+74-EC-F1   (hex)		Acumen
+74ECF1     (base 16)		Acumen
+				6F, No.207-3, Sec 3, Beisin Rd
+				Sindian Dist  New Taipei City  23143
+				US
+
+58-09-E5   (hex)		Kivic Inc.
+5809E5     (base 16)		Kivic Inc.
+				670 Sampyeong-dong, Bundang-gu
+				  Seongnam City  463-400
+				KR
+
+50-4F-94   (hex)		Loxone Electronics GmbH
+504F94     (base 16)		Loxone Electronics GmbH
+				Falkensteinstraße 6
+				Kollerschlag  Upper Austria  4154
+				AT
+
+60-B1-85   (hex)		ATH system
+60B185     (base 16)		ATH system
+				Osady Lezaku 498
+				Chrast    53851
+				CZ
+
+BC-62-9F   (hex)		Telenet Systems P. Ltd.
+BC629F     (base 16)		Telenet Systems P. Ltd.
+				2 Mani Bhuvan, Cama Road
+				Mumbai  Maharashtra  400086
+				IN
+
+38-0F-E4   (hex)		Dedicated Network Partners Oy
+380FE4     (base 16)		Dedicated Network Partners Oy
+				Linnoitustie 6
+				Espoo  -  02600
+				FI
+
+48-F2-30   (hex)		Ubizcore Co.,LTD
+48F230     (base 16)		Ubizcore Co.,LTD
+				Kranz Techno #1420, Sangdaewon 1-dong
+				Seongnam-Si    462-729
+				KR
+
+78-32-4F   (hex)		Millennium Group, Inc.
+78324F     (base 16)		Millennium Group, Inc.
+				16 Tech Circle
+				Natick  MA  01760
+				US
+
+38-43-69   (hex)		Patrol Products Consortium LLC
+384369     (base 16)		Patrol Products Consortium LLC
+				1128 Narragansett Blvd.
+				Cranston  RI  02905
+				US
+
+44-18-4F   (hex)		Fitview
+44184F     (base 16)		Fitview
+				5615 Scotts Valley Drive, Suite 110
+				Scotts Valley  CA  95066
+				US
+
+84-AC-A4   (hex)		Beijing Novel Super Digital TV Technology Co., Ltd
+84ACA4     (base 16)		Beijing Novel Super Digital TV Technology Co., Ltd
+				4F Tower B Jingmeng Hightech building
+				  Beijing  100085
+				CN
+
+54-1F-D5   (hex)		Advantage Electronics
+541FD5     (base 16)		Advantage Electronics
+				PO Box 407
+				Greenwood  IN  46143
+				US
+
+AC-E9-7F   (hex)		IoT Tech Limited
+ACE97F     (base 16)		IoT Tech Limited
+				20b Lough Road
+				Lisburn  Antrim  BT28 2HA
+				GB
+
+E8-5A-A7   (hex)		LLC Emzior
+E85AA7     (base 16)		LLC Emzior
+				Strelna, Svyazi street, 34, Lit A, of. 234
+				Saint-Petersburg    198515
+				RU
+
+9C-9C-1D   (hex)		Starkey Labs Inc.
+9C9C1D     (base 16)		Starkey Labs Inc.
+				6600 Washington Ave. S.
+				Eden Prairie  MN  55344
+				US
+
+D0-D6-CC   (hex)		Wintop
+D0D6CC     (base 16)		Wintop
+				No. 1301,Xinfei Road
+				Songjiang District  Shanghai  201612
+				CN
+
+58-D0-71   (hex)		BW Broadcast
+58D071     (base 16)		BW Broadcast
+				Unit 27 IO Centre
+				Croydon  Surrey  CR0 4WQ
+				GB
+
+1C-52-D6   (hex)		FLAT DISPLAY TECHNOLOGY CORPORATION
+1C52D6     (base 16)		FLAT DISPLAY TECHNOLOGY CORPORATION
+				No.85, Sec. 1, Fuxing Rd., South Dist
+				Taichung    402
+				TW
+
+D0-DF-B2   (hex)		Genie Networks Limited
+D0DFB2     (base 16)		Genie Networks Limited
+				5F, No.15, Lane 360, Sec., 1, Neihu Road,
+				Taipei    114
+				TW
+
+38-66-45   (hex)		OOSIC Technology CO.,Ltd
+386645     (base 16)		OOSIC Technology CO.,Ltd
+				8F,No 1559, Zuchongzhi Road
+				  Shanghai  201203
+				CN
+
+B8-5A-F7   (hex)		Ouya, Inc
+B85AF7     (base 16)		Ouya, Inc
+				11693 San Vicente Blvd
+				Los Angeles  CA  90049
+				US
+
+34-F6-2D   (hex)		SHARP Corporation
+34F62D     (base 16)		SHARP Corporation
+				1 Takumi-cho, Sakai-ku
+				Sakai City  Osaka  590-8522
+				JP
+
+4C-8F-A5   (hex)		Jastec
+4C8FA5     (base 16)		Jastec
+				Jastec B/D 2F, 92-7 Kumgok-dong, 
+				Boondang-gu,    463-804
+				KR
+
+84-ED-33   (hex)		BBMC Co.,Ltd
+84ED33     (base 16)		BBMC Co.,Ltd
+				#301, DaerungPostTower 3, 182-4,
+				Seoul  None  152-746
+				KR
+
+E8-2E-24   (hex)		Out of the Fog Research LLC
+E82E24     (base 16)		Out of the Fog Research LLC
+				565 Clyde Avenue, Suite 620
+				Mountain View  CA  94043
+				US
+
+80-FA-5B   (hex)		CLEVO CO.
+80FA5B     (base 16)		CLEVO CO.
+				NO. 129, XINGDE ROAD
+				New TAIPEI CITY    241
+				TW
+
+C0-B3-39   (hex)		Comigo Ltd.
+C0B339     (base 16)		Comigo Ltd.
+				15 HaPardes St.
+				  Yarkona  45915
+				IL
+
+20-85-8C   (hex)		Assa
+20858C     (base 16)		Assa
+				Gurogu Guro3dong Ace Twintower 2cha 209
+				  Seoul  152-779
+				KR
+
+60-CD-C5   (hex)		Taiwan Carol Electronics., Ltd
+60CDC5     (base 16)		Taiwan Carol Electronics., Ltd
+				No.202, Tung Kuang Road
+				Taichung  Taiwan  40151
+				TW
+
+D8-18-2B   (hex)		Conti Temic Microelectronic GmbH
+D8182B     (base 16)		Conti Temic Microelectronic GmbH
+				Sieboldstraße 19
+				Nuremberg  Bavaria  90411
+				DE
+
+80-CF-41   (hex)		Lenovo Mobile Communication Technology Ltd.
+80CF41     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone,
+				Xiamen  Fujian  361006
+				US
+
+9C-E1-D6   (hex)		Junger Audio-Studiotechnik GmbH
+9CE1D6     (base 16)		Junger Audio-Studiotechnik GmbH
+				Justus-von-Liebig-Strasse 7
+				12489 Berlin    
+				US
+
+48-B9-C2   (hex)		Teletics Inc.
+48B9C2     (base 16)		Teletics Inc.
+				103 Edgevalley Close NW
+				Calgary  AB  T3A 5E9
+				CA
+
+58-D6-D3   (hex)		Dairy Cheq Inc
+58D6D3     (base 16)		Dairy Cheq Inc
+				60 Baffin Place, Unit 5
+				Waterloo  Ontario  N2V 1Z7
+				CA
+
+04-6E-49   (hex)		TaiYear Electronic Technology (Suzhou) Co., Ltd
+046E49     (base 16)		TaiYear Electronic Technology (Suzhou) Co., Ltd
+				12-B101 Creative Industrial Park ,No. 328,Xinghu Street ,Suzhou Industrial Park
+				SuZhou  JiangSu  215000
+				CN
+
+2C-3B-FD   (hex)		Netstor Technology Co., Ltd.
+2C3BFD     (base 16)		Netstor Technology Co., Ltd.
+				6F, No. 1, Alley 16, Lane 235, Baoqiao Rd., Xindian District
+				New Taipei City    23145
+				US
+
+AC-3C-B4   (hex)		Nilan A/S
+AC3CB4     (base 16)		Nilan A/S
+				Nilanvej 2
+				Hedensted  Vejle amt  8722
+				DK
+
+B4-9D-B4   (hex)		Axion Technologies Inc.
+B49DB4     (base 16)		Axion Technologies Inc.
+				105-1203, 70, Jingeononam-ro
+				Namyangju  Gyeonggi-do  472-859
+				KR
+
+AC-E8-7E   (hex)		Bytemark Computer Consulting Ltd
+ACE87E     (base 16)		Bytemark Computer Consulting Ltd
+				Unit 2
+				Opus Avenue  York YO26 6BL  
+				GB
+
+80-07-A2   (hex)		Esson Technology Inc.
+8007A2     (base 16)		Esson Technology Inc.
+				Room A2, 5F Longsheng Commericial Building,
+				Baoan District  ShenZhen  518000
+				CN
+
+C0-A0-E2   (hex)		Eden Innovations
+C0A0E2     (base 16)		Eden Innovations
+				ZAC
+				Eguilles  PACA  13510
+				FR
+
+08-0F-FA   (hex)		KSP INC.
+080FFA     (base 16)		KSP INC.
+				RM 501, 138 Kwangdeokdae-ro
+				Danwon-gu, Ansan-si  Gyeonggi-do  425906
+				KR
+
+E8-AB-FA   (hex)		Shenzhen Reecam Tech.Ltd.
+E8ABFA     (base 16)		Shenzhen Reecam Tech.Ltd.
+				Room 03D-1 , North Wing Of 3 rd Floor, Block 1 , Vision Shenzhen Business Park  
+				Nanshan District, Shenzhen  Guangdong  518052
+				CN
+
+DC-B0-58   (hex)		Bürkert Werke GmbH
+DCB058     (base 16)		Bürkert Werke GmbH
+				Christian-Bürkert-Straße 13-17
+				Ingelfingen  Baden-Württemberg  74653
+				DE
+
+6C-5A-34   (hex)		Shenzhen Haitianxiong Electronic Co., Ltd.
+6C5A34     (base 16)		Shenzhen Haitianxiong Electronic Co., Ltd.
+				Rm.407, Block A, University-town Business Park, Taoyuan street, Lishan Road
+				Shenzhen  Guangdong  518055
+				CN
+
+90-38-DF   (hex)		Changzhou Tiannengbo System Co. Ltd.
+9038DF     (base 16)		Changzhou Tiannengbo System Co. Ltd.
+				#9 East Hehai Road, RM 306
+				Changzhou  Jiangsu Province  213000
+				CN
+
+18-52-53   (hex)		Pixord Corporation
+185253     (base 16)		Pixord Corporation
+				6F, No 12, Innovation 1st Road
+				Hsinchu    30076
+				TW
+
+68-3B-1E   (hex)		Countwise LTD
+683B1E     (base 16)		Countwise LTD
+				1149 Sawgrass Corporate Parkway
+				Sunrise  Florida  33323
+				US
+
+AC-A2-2C   (hex)		Baycity Technologies Ltd
+ACA22C     (base 16)		Baycity Technologies Ltd
+				10 Nazareth Ave
+				Christchurch  Canterbury  8024
+				NZ
+
+30-32-94   (hex)		W-IE-NE-R Plein & Baus GmbH
+303294     (base 16)		W-IE-NE-R Plein & Baus GmbH
+				Muellersbaum 20
+				Burscheid  NRW  51399
+				US
+
+7C-82-2D   (hex)		Nortec
+7C822D     (base 16)		Nortec
+				2740 Fenton Rd
+				Ottawa  ON  K1T3T7
+				US
+
+10-FB-F0   (hex)		KangSheng LTD.
+10FBF0     (base 16)		KangSheng LTD.
+				2F., No.11, 
+				New Taipei City    24889
+				TW
+
+6C-9A-C9   (hex)		Valentine Research, Inc.
+6C9AC9     (base 16)		Valentine Research, Inc.
+				10280 Alliance Rd
+				Cincinnati  OH  45242
+				US
+
+AC-8D-14   (hex)		Smartrove Inc
+AC8D14     (base 16)		Smartrove Inc
+				19630 Allendale Ave.
+				Saratoga  CA  95070
+				US
+
+20-91-D9   (hex)		I'M SPA
+2091D9     (base 16)		I'M SPA
+				VIA BIRON 102/3
+				MONTEVIALE  VICENZA  36050
+				IT
+
+AC-72-36   (hex)		Lexking Technology Co., Ltd.
+AC7236     (base 16)		Lexking Technology Co., Ltd.
+				2F, No. 3, Baoqiang Road,
+				New Taipei City  Taiwan  231111
+				TW
+
+3C-D7-DA   (hex)		SK Mtek microelectronics(shenzhen)limited
+3CD7DA     (base 16)		SK Mtek microelectronics(shenzhen)limited
+				12F, Micro-profit Building,South 6 road
+				Shenzhen  Guangdong  518057
+				CN
+
+04-F8-C2   (hex)		Flaircomm Microelectronics, Inc.
+04F8C2     (base 16)		Flaircomm Microelectronics, Inc.
+				7F,Guomai Building,116 East JiangBin Ave
+				Fuzhou  Fujian  350015
+				CN
+
+14-1B-F0   (hex)		Intellimedia Systems Ltd
+141BF0     (base 16)		Intellimedia Systems Ltd
+				Sandhill Barn
+				Washington  West Sussex  RH204TD
+				GB
+
+58-87-E2   (hex)		Shenzhen Coship Electronics Co., Ltd.
+5887E2     (base 16)		Shenzhen Coship Electronics Co., Ltd.
+				Rainbow Bldg., North, Hi-Tech Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+68-69-F2   (hex)		ComAp s.r.o.
+6869F2     (base 16)		ComAp s.r.o.
+				Kundratka 17
+				Prague    18000
+				CZ
+
+B8-5A-FE   (hex)		Handaer Communication Technology (Beijing) Co., Ltd
+B85AFE     (base 16)		Handaer Communication Technology (Beijing) Co., Ltd
+				Jiancaicheng West Rd.65,Xisanqi,
+				  Beijing  100096
+				CN
+
+F4-6D-E2   (hex)		zte corporation
+F46DE2     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+F0-AC-A4   (hex)		HBC-radiomatic
+F0ACA4     (base 16)		HBC-radiomatic
+				Haller Str. 45-53
+				Crailsheim  Baden Wurttemberg  74564
+				DE
+
+60-74-8D   (hex)		Atmaca Elektronik
+60748D     (base 16)		Atmaca Elektronik
+				Namik Kemal Mahallesi 177, Sokak No:2
+				Istanbul  Esenyurt  34510
+				TR
+
+B8-B7-D7   (hex)		2GIG Technologies
+B8B7D7     (base 16)		2GIG Technologies
+				2961 West Maple Loop Drive
+				Lehi  Utah  84043
+				US
+
+80-82-87   (hex)		ATCOM Technology Co.Ltd.
+808287     (base 16)		ATCOM Technology Co.Ltd.
+				A-2F, #3 , Crown industry buildings
+				Shenzhen  Guang Dong  518040
+				US
+
+28-A1-86   (hex)		enblink
+28A186     (base 16)		enblink
+				Room 212 Building 105-1 SNU
+				  SEOUL  151-742
+				KR
+
+50-39-55   (hex)		Cisco SPVTG
+503955     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+78-D1-29   (hex)		Vicos
+78D129     (base 16)		Vicos
+				Eugenmuellerstrasse 14
+				Salzburg  Salzburg  5020
+				AT
+
+84-DF-0C   (hex)		NET2GRID BV
+84DF0C     (base 16)		NET2GRID BV
+				Krullelaan 28
+				Zeist  Utrecht  3701 TD
+				NL
+
+38-8E-E7   (hex)		Fanhattan LLC
+388EE7     (base 16)		Fanhattan LLC
+				489 S El Camino Real
+				San Mateo  CA  94402
+				US
+
+5C-D4-1B   (hex)		UCZOON Technology Co., LTD
+5CD41B     (base 16)		UCZOON Technology Co., LTD
+				9 th Floor,Pan Gu Plaza,No.27 North  4 th Ring,
+				Beijing  Beijing  100029
+				CN
+
+CC-E7-98   (hex)		My Social Stuff
+CCE798     (base 16)		My Social Stuff
+				Sint-Hubertussyraat 65
+				Berchem    2600
+				BE
+
+A0-36-F0   (hex)		Comprehensive Power
+A036F0     (base 16)		Comprehensive Power
+				420 Northboro Road Central
+				Marlborough  MA  01752
+				US
+
+18-0C-AC   (hex)		CANON INC.
+180CAC     (base 16)		CANON INC.
+				3-30-2
+				Ohta-Ku  Tokyo  146-8501
+				JP
+
+78-AB-60   (hex)		ABB Australia
+78AB60     (base 16)		ABB Australia
+				PMB 88
+				Berrimah  NT  0828
+				AU
+
+84-82-F4   (hex)		Beijing Huasun Unicreate Technology Co., Ltd
+8482F4     (base 16)		Beijing Huasun Unicreate Technology Co., Ltd
+				North Region 6th Floor, Tower A, Huizhi Mansion,
+				  Beijing  100085
+				CN
+
+00-DB-1E   (hex)		Albedo Telecom SL
+00DB1E     (base 16)		Albedo Telecom SL
+				Joan d'Austria 112
+				Barcelona    08018
+				ES
+
+18-86-3A   (hex)		DIGITAL ART SYSTEM
+18863A     (base 16)		DIGITAL ART SYSTEM
+				838 rue de l'Aiguelongue
+				Montpellier  Etat  34090
+				FR
+
+0C-DC-CC   (hex)		Inala Technologies
+0CDCCC     (base 16)		Inala Technologies
+				Inala House,  557 15th Road
+				Midrand  Gauteng  1685
+				ZA
+
+98-29-1D   (hex)		Jaguar de Mexico, SA de CV
+98291D     (base 16)		Jaguar de Mexico, SA de CV
+				Calle Tabla Grande No.2
+				Jilotzongo  Estado de Mexico  54570
+				MX
+
+34-AF-2C   (hex)		Nintendo Co., Ltd.
+34AF2C     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+7C-D9-FE   (hex)		New Cosmos Electric Co., Ltd.
+7CD9FE     (base 16)		New Cosmos Electric Co., Ltd.
+				2-5-4 Mitsuyanaka
+				Osaka  Osaka-fu  532-0036
+				JP
+
+E4-90-69   (hex)		Rockwell Automation
+E49069     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+CC-C1-04   (hex)		Applied Technical Systems
+CCC104     (base 16)		Applied Technical Systems
+				P.O. Box 5705
+				Shreveport  LA  71135
+				US
+
+60-45-5E   (hex)		Liptel s.r.o.
+60455E     (base 16)		Liptel s.r.o.
+				Hradna 338
+				Liptovsky Hradok    03301
+				SK
+
+D8-06-D1   (hex)		Honeywell Fire System (Shanghai) Co,. Ltd.
+D806D1     (base 16)		Honeywell Fire System (Shanghai) Co,. Ltd.
+				No. 430, Li Bing Road, Pudong
+				Shanghai  Shanghai  201203
+				CN
+
+64-76-57   (hex)		Innovative Security Designs
+647657     (base 16)		Innovative Security Designs
+				18 Technology Drive
+				Irvine  CA  92618
+				US
+
+90-70-25   (hex)		Garea Microsys Co.,Ltd.
+907025     (base 16)		Garea Microsys Co.,Ltd.
+				4th Floor, Building 2, Software Park
+				Suzhou  Jiangsu  215163
+				CN
+
+10-D1-DC   (hex)		INSTAR Deutschland GmbH
+10D1DC     (base 16)		INSTAR Deutschland GmbH
+				Auf der Hostert 17
+				Huenstetten Bechtheim  Hessen  65510
+				DE
+
+34-99-6F   (hex)		VPI Engineering
+34996F     (base 16)		VPI Engineering
+				11814 S. Election Rd., Suite 200
+				Draper  UT  84020
+				US
+
+94-4A-09   (hex)		BitWise Controls
+944A09     (base 16)		BitWise Controls
+				98 Inverness Dr East
+				Englewood  CO  80112
+				US
+
+BC-28-D6   (hex)		Rowley Associates Limited
+BC28D6     (base 16)		Rowley Associates Limited
+				Suite 4B/4C Drake House
+				Dursley  Gloucestershire  GL11 4HH
+				GB
+
+10-BD-18   (hex)		Cisco Systems, Inc
+10BD18     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+58-69-F9   (hex)		Fusion Transactive Ltd.
+5869F9     (base 16)		Fusion Transactive Ltd.
+				PO Box 68281
+				Auckland    1145
+				NZ
+
+D4-1E-35   (hex)		TOHO Electronics INC.
+D41E35     (base 16)		TOHO Electronics INC.
+				1-13-21 Tanashioda, Chuo-Ku
+				Sagamihara-City  Kanagawa  252-0245
+				JP
+
+4C-72-B9   (hex)		PEGATRON CORPORATION
+4C72B9     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+2C-ED-EB   (hex)		Alpheus Digital Company Limited
+2CEDEB     (base 16)		Alpheus Digital Company Limited
+				Room 2, 23/F Tak King Industrial building
+				Hong Kong    852
+				HK
+
+0C-D9-96   (hex)		Cisco Systems, Inc
+0CD996     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+30-F3-3A   (hex)		+plugg srl
+30F33A     (base 16)		+plugg srl
+				via giovanni ventura, 5
+				Milano  MI  20134
+				IT
+
+0C-57-EB   (hex)		Mueller Systems
+0C57EB     (base 16)		Mueller Systems
+				48 Leona Drive, Suite C
+				Middleboro  MA  02346
+				US
+
+74-53-27   (hex)		COMMSEN CO., LIMITED
+745327     (base 16)		COMMSEN CO., LIMITED
+				12/F., San Toi Building,139 Connaught Road Central 
+				    999077
+				HK
+
+D0-8C-FF   (hex)		UPWIS AB
+D08CFF     (base 16)		UPWIS AB
+				Box 3000
+				Uppsala  Uppsala  75003
+				SE
+
+68-CE-4E   (hex)		L-3 Communications Infrared Products
+68CE4E     (base 16)		L-3 Communications Infrared Products
+				3414 Herrmann Drive
+				Garland  TX  75043
+				US
+
+68-D1-FD   (hex)		Shenzhen Trimax Technology Co.,Ltd
+68D1FD     (base 16)		Shenzhen Trimax Technology Co.,Ltd
+				Room 1016, 10F, Max Smart Commercial Center,
+				Shenzhen  Guangdong  518133
+				CN
+
+9C-06-6E   (hex)		Hytera Communications Corporation Limited
+9C066E     (base 16)		Hytera Communications Corporation Limited
+				Hytera Tower, Hi-Tech Industrial Park North, Nanshan District
+				Shenzhen  Guangdong  518057
+				US
+
+3C-EA-FB   (hex)		NSE AG
+3CEAFB     (base 16)		NSE AG
+				Bremgarterstrasse 54
+				Wohlen  AG  5610
+				CH
+
+8C-C7-AA   (hex)		Radinet Communications Inc.
+8CC7AA     (base 16)		Radinet Communications Inc.
+				7F-2, No.229, Fuxing 2nd Rd, Zhubei, 30271
+				Hsinchu  Taiwan  30271
+				US
+
+40-33-6C   (hex)		Godrej & Boyce Mfg. co. ltd
+40336C     (base 16)		Godrej & Boyce Mfg. co. ltd
+				PSS TECH CELL, 2ND FLOOR, PLANT 17, SECURITY SOLUTIONS DIVISION
+				MUMBAI  MAHARASHTRA  400079
+				IN
+
+F8-A0-3D   (hex)		Dinstar Technologies Co., Ltd.
+F8A03D     (base 16)		Dinstar Technologies Co., Ltd.
+				Floor 6, Guoxing Building
+				shenzhen  Guangdong  518052
+				US
+
+2C-D4-44   (hex)		FUJITSU LIMITED
+2CD444     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+BC-81-1F   (hex)		Ingate Systems
+BC811F     (base 16)		Ingate Systems
+				Rissneleden 45
+				Sundbyberg    17444
+				SE
+
+D8-67-D9   (hex)		Cisco Systems, Inc
+D867D9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-E7-31   (hex)		Nokia Corporation
+A4E731     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+98-A7-B0   (hex)		MCST ZAO
+98A7B0     (base 16)		MCST ZAO
+				35/50, Nizhnyaya Krasnoselskaya St.,
+				Moscow    105666
+				RU
+
+4C-06-8A   (hex)		Basler Electric Company
+4C068A     (base 16)		Basler Electric Company
+				12570 State Route 143
+				Highland  Illinois  62249
+				US
+
+E8-56-D6   (hex)		NCTech Ltd
+E856D6     (base 16)		NCTech Ltd
+				20-22 Braid Road
+				Edinburgh    EH10 6AD
+				GB
+
+C0-81-70   (hex)		Effigis GeoSolutions
+C08170     (base 16)		Effigis GeoSolutions
+				4101, rue Molson
+				Montreal  Quebec  H1Y3L1
+				CA
+
+64-22-16   (hex)		Shandong Taixin Electronic co.,Ltd
+642216     (base 16)		Shandong Taixin Electronic co.,Ltd
+				FL.6,Haichen Building
+				Jinan  Shandong  250010
+				CN
+
+44-38-39   (hex)		Cumulus Networks, inc
+443839     (base 16)		Cumulus Networks, inc
+				650 Castro Street, suite 120-245
+				Mountain View  CA  94041
+				US
+
+04-8B-42   (hex)		Skspruce Technologies
+048B42     (base 16)		Skspruce Technologies
+				A1, Tianfu Software Park, 1129 Century City Road
+				High-tech Zone, Chengdu  Sichuan  610041
+				CN
+
+50-76-A6   (hex)		Ecil Informatica Ind. Com. Ltda
+5076A6     (base 16)		Ecil Informatica Ind. Com. Ltda
+				Av. Araguacema, 388
+				Barueri  São Paulo  06460-070
+				BR
+
+A4-4C-11   (hex)		Cisco Systems, Inc
+A44C11     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+60-84-3B   (hex)		Soladigm, Inc.
+60843B     (base 16)		Soladigm, Inc.
+				195. S Milpitas Blvd
+				Milpitas  CA  95035
+				US
+
+AC-4B-C8   (hex)		Juniper Networks
+AC4BC8     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+20-9B-A5   (hex)		JIAXING GLEAD Electronics Co.,Ltd
+209BA5     (base 16)		JIAXING GLEAD Electronics Co.,Ltd
+				No.66 Zhengyuan Road in Tanghu Industrial Garden 
+				Jiaxing  Zhejiang  314003
+				CN
+
+A0-F4-50   (hex)		HTC Corporation
+A0F450     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+60-89-B1   (hex)		Key Digital Systems
+6089B1     (base 16)		Key Digital Systems
+				521 E 3rd Street
+				Mount Vernon  NY  10553
+				US
+
+44-D1-5E   (hex)		Shanghai Kingto Information Technology Ltd
+44D15E     (base 16)		Shanghai Kingto Information Technology Ltd
+				No.738 Guangji RD.3F shanghai.china
+				  shanghai  200434
+				CN
+
+00-36-FE   (hex)		SuperVision
+0036FE     (base 16)		SuperVision
+				po box 3472
+				palos verdes  CA  90274
+				US
+
+70-9E-86   (hex)		X6D Limited
+709E86     (base 16)		X6D Limited
+				199, Arch. Makariou III
+				Limassol    3030
+				CY
+
+A0-F4-19   (hex)		Nokia Corporation
+A0F419     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+1C-97-3D   (hex)		PRICOM Design
+1C973D     (base 16)		PRICOM Design
+				2755 Slocum Rd
+				Peyton  CO  80831
+				US
+
+BC-02-00   (hex)		Stewart Audio
+BC0200     (base 16)		Stewart Audio
+				100 West El Camino Real
+				Mountain View  CA  94041
+				US
+
+48-91-53   (hex)		Weinmann Geräte für Medizin GmbH + Co. KG
+489153     (base 16)		Weinmann Geräte für Medizin GmbH + Co. KG
+				Kronsaalsweg 40
+				Hamburg    D-22525
+				DE
+
+AC-94-03   (hex)		Envision Peripherals Inc
+AC9403     (base 16)		Envision Peripherals Inc
+				47490 Seabridge Dr
+				Fremont  California  94538
+				US
+
+68-D9-25   (hex)		ProSys Development Services
+68D925     (base 16)		ProSys Development Services
+				Mill House
+				Mitcham  Surrey  CR4 4HY
+				GB
+
+84-8D-84   (hex)		Rajant Corporation
+848D84     (base 16)		Rajant Corporation
+				400 East King Street
+				Malvern  PA  19355
+				US
+
+54-46-6B   (hex)		Shenzhen CZTIC Electronic Technology Co., Ltd  
+54466B     (base 16)		Shenzhen CZTIC Electronic Technology Co., Ltd  
+				Xinghe Building, Zhongxin Road, Shajing Town, Baoan
+				SHENZHEN  GUANGDONG  518104
+				CN
+
+44-B3-82   (hex)		Kuang-chi Institute of Advanced Technology
+44B382     (base 16)		Kuang-chi Institute of Advanced Technology
+				Software building, Gaoxingzhong 1st Road,
+				Shenzhen  Guangdong  518057
+				CN
+
+60-B9-33   (hex)		Deutron Electronics Corp.
+60B933     (base 16)		Deutron Electronics Corp.
+				8F, 68, Sec. 3, Nanking E. Rd.
+				Taipei  Taiwan  104
+				TW
+
+00-43-FF   (hex)		KETRON S.R.L.
+0043FF     (base 16)		KETRON S.R.L.
+				Via Giuseppe Taliercio n. 7
+				Ancona    60131
+				IT
+
+7C-AC-B2   (hex)		Bosch Software Innovations GmbH
+7CACB2     (base 16)		Bosch Software Innovations GmbH
+				Ziegelei 7
+				Immenstaad  BadenWuertemberg  88090
+				DE
+
+18-D6-6A   (hex)		Inmarsat
+18D66A     (base 16)		Inmarsat
+				99 City Road
+				London    EC1Y 1AX
+				GB
+
+1C-7C-45   (hex)		Vitek Industrial Video Products, Inc.
+1C7C45     (base 16)		Vitek Industrial Video Products, Inc.
+				28492 Constellation Rd
+				Valencia  CA  91355
+				US
+
+3C-38-88   (hex)		ConnectQuest, llc
+3C3888     (base 16)		ConnectQuest, llc
+				P.O. Box 425
+				West Simsbury  Connecticut  06092
+				US
+
+48-D7-FF   (hex)		BLANKOM Antennentechnik GmbH
+48D7FF     (base 16)		BLANKOM Antennentechnik GmbH
+				Hermann-Petersilge Str. 1
+				Bad Blankenburg  TH  07422
+				DE
+
+C4-71-30   (hex)		Fon Technology S.L.
+C47130     (base 16)		Fon Technology S.L.
+				Avda. Bruselas, n. 7, Planta 3, Alcobendas
+				  Madrid  28100
+				ES
+
+D8-33-7F   (hex)		Office FA.com Co.,Ltd.
+D8337F     (base 16)		Office FA.com Co.,Ltd.
+				293-21
+				Oyama-shi  Tochigi  329-0216
+				JP
+
+00-36-F8   (hex)		Conti Temic microelectronic GmbH
+0036F8     (base 16)		Conti Temic microelectronic GmbH
+				Dornierstraße 1
+				Markdorf    88677
+				DE
+
+A4-F7-D0   (hex)		LAN Accessories Co., Ltd.
+A4F7D0     (base 16)		LAN Accessories Co., Ltd.
+				8F-1, No. 159, Sec. 1 Hsin Tai Wu Road,
+				New Taipei City,    221
+				US
+
+C8-56-45   (hex)		Intermas France
+C85645     (base 16)		Intermas France
+				Rue de l'industrie
+				Beauvais  Oise  60000
+				FR
+
+44-34-8F   (hex)		MXT INDUSTRIAL LTDA
+44348F     (base 16)		MXT INDUSTRIAL LTDA
+				RODOVIA BR 381, KM 490, JARDIM DAS ALTEROSAS
+				BETIM  MINAS GERAIS  32670790
+				BR
+
+D4-EC-0C   (hex)		Harley-Davidson Motor Company
+D4EC0C     (base 16)		Harley-Davidson Motor Company
+				3700 W. Juneau Avenue
+				Milwaukee  Wisconsin  53208
+				US
+
+28-E6-08   (hex)		Tokheim
+28E608     (base 16)		Tokheim
+				Industrieweg 5
+				Bladel  NBr  5531 AD
+				NL
+
+74-FF-7D   (hex)		Wren Sound Systems, LLC
+74FF7D     (base 16)		Wren Sound Systems, LLC
+				169 Gateshead Way
+				Phoenixville  PA  19460
+				US
+
+AC-F0-B2   (hex)		Becker Electronics Taiwan Ltd.
+ACF0B2     (base 16)		Becker Electronics Taiwan Ltd.
+				No.32, Lane 30, Long Yuan Rd.
+				Long-Tan  Taoyuan  32544
+				TW
+
+54-2A-9C   (hex)		LSY Defense, LLC.
+542A9C     (base 16)		LSY Defense, LLC.
+				4175 Westport Rd.
+				Louisville  Kentucky  40207
+				US
+
+50-4A-5E   (hex)		Masimo Corporation
+504A5E     (base 16)		Masimo Corporation
+				40 Parker
+				Irvine  California  92618
+				US
+
+6C-A9-6F   (hex)		TransPacket AS
+6CA96F     (base 16)		TransPacket AS
+				Drammensveien 134
+				Oslo    0277
+				NO
+
+AC-01-42   (hex)		Uriel Technologies SIA
+AC0142     (base 16)		Uriel Technologies SIA
+				Dzerbenes iela 14
+				Riga    LV-1006
+				LV
+
+C4-7B-A3   (hex)		NAVIS Inc.
+C47BA3     (base 16)		NAVIS Inc.
+				Dmitrovskoe shosse 157
+				Moscow    127411
+				RU
+
+F4-48-48   (hex)		Amscreen Group Ltd
+F44848     (base 16)		Amscreen Group Ltd
+				Paragon Business Park
+				Bolton  Lancs  BL6 6HG
+				GB
+
+50-D2-74   (hex)		Steffes Corporation
+50D274     (base 16)		Steffes Corporation
+				3050 Highway 22 North
+				Dickinson  ND  58601
+				US
+
+C8-F7-04   (hex)		Building Block Video
+C8F704     (base 16)		Building Block Video
+				17 APex Park
+				Hailsham  East Sussex  BN27 2JU
+				GB
+
+50-8A-42   (hex)		Uptmate Technology Co., LTD
+508A42     (base 16)		Uptmate Technology Co., LTD
+				6F., No.5, Jian 1st Rd.,Zhonghe Dist., 
+				New Taipei City    23558
+				TW
+
+BC-EA-2B   (hex)		CityCom GmbH
+BCEA2B     (base 16)		CityCom GmbH
+				Am Kroit 25
+				Amerang  Bavaria  83123
+				DE
+
+0C-A1-38   (hex)		Blinq Wireless Inc.
+0CA138     (base 16)		Blinq Wireless Inc.
+				400 MARCH RD UNIT 240
+				KANATA  ON  K2K3H4
+				CA
+
+5C-6F-4F   (hex)		S.A. SISTEL
+5C6F4F     (base 16)		S.A. SISTEL
+				C/SOLSONES, 87
+				CASTELLAR DEL VALLES  BARCELONA  08211
+				ES
+
+90-1B-0E   (hex)		Fujitsu Technology Solutions GmbH
+901B0E     (base 16)		Fujitsu Technology Solutions GmbH
+				Buergermeister-Ulrich-Strasse 100
+				Augsburg  Bayern  86199
+				DE
+
+F8-50-63   (hex)		Verathon
+F85063     (base 16)		Verathon
+				20001 N Creek Pkwy
+				Bothell  WA  98011
+				US
+
+2C-36-F8   (hex)		Cisco Systems, Inc
+2C36F8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+84-57-87   (hex)		DVR C&C Co., Ltd.
+845787     (base 16)		DVR C&C Co., Ltd.
+				7F 720 Namkwang Centlex Bldg, Cheongcheon-dong, Bupyeong-gu
+				Incheon    403-030
+				KR
+
+58-08-FA   (hex)		Fiber Optic & telecommunication INC.
+5808FA     (base 16)		Fiber Optic & telecommunication INC.
+				161-4 Kumjeong-Dong,
+				Kunpo-city  Gyeonggi-Do  435-824
+				KR
+
+AC-3D-05   (hex)		Instorescreen Aisa
+AC3D05     (base 16)		Instorescreen Aisa
+				Room 207, North Bldg,No 28
+				Shanghai    200237
+				CN
+
+28-60-94   (hex)		CAPELEC
+286094     (base 16)		CAPELEC
+				1130 rue des Marels
+				Montpellier  Hérault  34000
+				FR
+
+A4-56-30   (hex)		Cisco Systems, Inc
+A45630     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-3C-3C   (hex)		CYBELEC SA
+C43C3C     (base 16)		CYBELEC SA
+				Rue des Uttins 27
+				Yverdon-les-Bains    1401
+				CH
+
+B8-26-D4   (hex)		Furukawa Industrial S.A. Produtos Elétricos
+B826D4     (base 16)		Furukawa Industrial S.A. Produtos Elétricos
+				Rua Hasdrubal Bellegard, 820
+				  Parana  81460-120
+				BR
+
+B8-74-47   (hex)		Convergence Technologies
+B87447     (base 16)		Convergence Technologies
+				16W215 83rd Street Suite D
+				Burr Ridge  IL  60527
+				US
+
+74-63-DF   (hex)		VTS GmbH
+7463DF     (base 16)		VTS GmbH
+				Am Königholz Ost 4
+				Eglhausen  Bavaria  85411
+				DE
+
+BC-12-5E   (hex)		Beijing  WisVideo  INC.
+BC125E     (base 16)		Beijing  WisVideo  INC.
+				RM 3A08 Technology&Fortune Center A block No.8 Xue Qing Road,Haidian District , 
+				  Beijing  100192
+				CN
+
+14-E4-EC   (hex)		mLogic LLC
+14E4EC     (base 16)		mLogic LLC
+				8440 Warner Drive
+				Culver City  CA  90232
+				US
+
+38-28-EA   (hex)		Fujian Netcom Technology Co., LTD
+3828EA     (base 16)		Fujian Netcom Technology Co., LTD
+				Netcom Technology Building, B Zone:Tongpan Software Park, 
+				Fuzhou  Fujian  350003
+				CN
+
+D0-1A-A7   (hex)		UniPrint
+D01AA7     (base 16)		UniPrint
+				Unit 309, 1 Eva Road
+				Toronto  Ontario  M9C 4Z5
+				CA
+
+84-6A-ED   (hex)		Wireless Tsukamoto.,co.LTD
+846AED     (base 16)		Wireless Tsukamoto.,co.LTD
+				16-21 1chome,Isoyama
+				Suzuka  Mie-pref  5100256
+				JP
+
+E0-5D-A6   (hex)		Detlef Fink Elektronik & Softwareentwicklung
+E05DA6     (base 16)		Detlef Fink Elektronik & Softwareentwicklung
+				Brühlstraße 13
+				Mössingen    72116
+				DE
+
+04-5A-95   (hex)		Nokia Corporation
+045A95     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+04-F4-BC   (hex)		Xena Networks
+04F4BC     (base 16)		Xena Networks
+				Graabroedretorv 6, 3. sal
+				København  Danmark  1154
+				DK
+
+80-DB-31   (hex)		Power Quotient International Co., Ltd.
+80DB31     (base 16)		Power Quotient International Co., Ltd.
+				8F., No. 49, Sec. 4, Jhongyang Rd., Tu Cheng Dist.,
+				New Taipei City    23675
+				TW
+
+1C-51-B5   (hex)		Techaya LTD
+1C51B5     (base 16)		Techaya LTD
+				P.O.B 1500
+				Pardes Hanna    3700
+				IL
+
+6C-3A-84   (hex)		Shenzhen Aero-Startech. Co.Ltd
+6C3A84     (base 16)		Shenzhen Aero-Startech. Co.Ltd
+				F3-4, Building3,Zhongyuntai Industrial Park.Shiyan Town.,
+				Shenzhen  Guangdong  518108
+				CN
+
+00-D6-32   (hex)		GE Energy
+00D632     (base 16)		GE Energy
+				Lissue Industrial Estate East
+				Lisburn  Co Antrim  BT28 2RE
+				GB
+
+0C-9E-91   (hex)		Sankosha Corporation
+0C9E91     (base 16)		Sankosha Corporation
+				1-12, Miyashimo
+				Sagamihara-shi  Kanagawa-ken  252-0212
+				JP
+
+38-3F-10   (hex)		DBL Technology Ltd.
+383F10     (base 16)		DBL Technology Ltd.
+				Unit 42, 18/F., Block D, Wah Lok Industrial Center
+				    
+				HK
+
+AC-D3-64   (hex)		ABB SPA, ABB SACE DIV.
+ACD364     (base 16)		ABB SPA, ABB SACE DIV.
+				V.LE DELL'INDUSTRIA, 18
+				VITTUONE  MI  20010
+				IT
+
+2C-EE-26   (hex)		Petroleum Geo-Services
+2CEE26     (base 16)		Petroleum Geo-Services
+				12555 Harris Branch Pkwy
+				Austin  TX  78653
+				US
+
+C8-F9-F9   (hex)		Cisco Systems, Inc
+C8F9F9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-EF-52   (hex)		Telewave Co., Ltd.
+A4EF52     (base 16)		Telewave Co., Ltd.
+				A-203, SK Twintech Tower
+				Seoul    153-773
+				KR
+
+A8-26-D9   (hex)		HTC Corporation
+A826D9     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+28-94-0F   (hex)		Cisco Systems, Inc
+28940F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B8-DA-F7   (hex)		Advanced Photonics, Inc.
+B8DAF7     (base 16)		Advanced Photonics, Inc.
+				the University of Tokyo, CCR507
+				Meguro-ku  Tokyo  153-8904
+				JP
+
+14-3A-EA   (hex)		Dynapower Company LLC
+143AEA     (base 16)		Dynapower Company LLC
+				85 Meadowland Drive
+				South Burlington  VT  05403
+				US
+
+A0-86-EC   (hex)		SAEHAN HITEC Co., Ltd
+A086EC     (base 16)		SAEHAN HITEC Co., Ltd
+				16-3, Yongsu-ri, Chowol-eup
+				Gwangju-si, Gyeonggi-do    464-865
+				KR
+
+94-2E-17   (hex)		Schneider Electric Canada Inc
+942E17     (base 16)		Schneider Electric Canada Inc
+				1400 industrielle street
+				La Prairie  Quebec  J5R 2E5
+				CA
+
+C4-60-44   (hex)		Everex Electronics Limited
+C46044     (base 16)		Everex Electronics Limited
+				Unit 3, Block A, 16/F
+				    
+				HK
+
+98-FE-03   (hex)		Ericsson - North America
+98FE03     (base 16)		Ericsson - North America
+				6300 Legacy Drive
+				Plano  TX  75024
+				US
+
+E0-3C-5B   (hex)		SHENZHEN JIAXINJIE ELECTRON CO.,LTD
+E03C5B     (base 16)		SHENZHEN JIAXINJIE ELECTRON CO.,LTD
+				Shenzhen Jiaxinjie Security Industrial park,No 6 Xin He Xin xing Industrial Park, Fuyong Town,Bao'an District 
+				SHENZHEN  GUANGDONG  518103
+				CN
+
+CC-94-4A   (hex)		Pfeiffer Vacuum GmbH
+CC944A     (base 16)		Pfeiffer Vacuum GmbH
+				Berliner Str. 43
+				Asslar  Hessen  35614
+				DE
+
+0C-85-25   (hex)		Cisco Systems, Inc
+0C8525     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B4-D8-A9   (hex)		BetterBots
+B4D8A9     (base 16)		BetterBots
+				1600 Wilson Way SE, Ste. 9
+				Smyrna  GA  30082
+				US
+
+7C-C8-D7   (hex)		Damalisk
+7CC8D7     (base 16)		Damalisk
+				Coriolis 2 
+				ECUISSES    71210
+				FR
+
+9C-B0-08   (hex)		Ubiquitous Computing Technology Corporation
+9CB008     (base 16)		Ubiquitous Computing Technology Corporation
+				2-20-1 Nishi-Gotanda
+				Shinagawa-ku  Tokyo  1410031
+				JP
+
+A8-77-6F   (hex)		Zonoff
+A8776F     (base 16)		Zonoff
+				70E Swedesford Rd
+				Malvern  PA  19355
+				US
+
+64-87-88   (hex)		Juniper Networks
+648788     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-FA-3B   (hex)		CLOOS ELECTRONIC GMBH
+00FA3B     (base 16)		CLOOS ELECTRONIC GMBH
+				Jambe ducommun 8
+				LE LOCLE    2400
+				CH
+
+54-1D-FB   (hex)		Freestyle Energy Ltd
+541DFB     (base 16)		Freestyle Energy Ltd
+				18-24 Ricketts Road
+				Mount Waverley  Victoria  3149
+				AU
+
+60-B6-06   (hex)		Phorus
+60B606     (base 16)		Phorus
+				16255 Ventura Boulevard, Suite 310
+				Encino  CA  91436
+				US
+
+90-92-B4   (hex)		Diehl BGT Defence GmbH & Co. KG
+9092B4     (base 16)		Diehl BGT Defence GmbH & Co. KG
+				Alte Nussdorfer Strasse 13
+				Ueberlingen    88662
+				DE
+
+20-AA-4B   (hex)		Cisco-Linksys, LLC
+20AA4B     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+CC-6D-EF   (hex)		TJK Tietolaite Oy
+CC6DEF     (base 16)		TJK Tietolaite Oy
+				PL 443
+				Vaasa    65101
+				FI
+
+A8-5B-F3   (hex)		Audivo GmbH
+A85BF3     (base 16)		Audivo GmbH
+				Irrenloher Damm 17
+				Schwarzenfeld    92521
+				DE
+
+B8-97-5A   (hex)		BIOSTAR Microtech Int'l Corp.
+B8975A     (base 16)		BIOSTAR Microtech Int'l Corp.
+				2Fl.  No. 108-2, Min Chuan Road, Hsin Tien Dist.,
+				 New Taipei    231
+				TW
+
+48-33-DD   (hex)		ZENNIO AVANCE Y TECNOLOGIA, S.L.
+4833DD     (base 16)		ZENNIO AVANCE Y TECNOLOGIA, S.L.
+				RIO JARAMA 132 NAVE P8.11
+				TOLEDO    45007
+				ES
+
+08-75-72   (hex)		Obelux Oy
+087572     (base 16)		Obelux Oy
+				Kutomotie 6 B
+				Helsinki    00380
+				FI
+
+10-C2-BA   (hex)		UTT Co., Ltd.
+10C2BA     (base 16)		UTT Co., Ltd.
+				
+				Seoul  Korea  135-913
+				KR
+
+90-D7-4F   (hex)		Bookeen
+90D74F     (base 16)		Bookeen
+				27, rue de la Vistule
+				Paris    75013
+				FR
+
+64-C5-AA   (hex)		South African Broadcasting Corporation
+64C5AA     (base 16)		South African Broadcasting Corporation
+				77 Twickenham Avenue
+				Auckland Park  Gauteng  2006
+				ZA
+
+98-AA-D7   (hex)		BLUE WAVE NETWORKING CO LTD
+98AAD7     (base 16)		BLUE WAVE NETWORKING CO LTD
+				No. 20, Lane 68, Da-feng RD, 
+				NEW TAIPEI  TAIPEI   23121
+				TW
+
+9C-53-CD   (hex)		ENGICAM s.r.l.
+9C53CD     (base 16)		ENGICAM s.r.l.
+				Via Dei Pratoni n.16
+				Scandicci  FIRENZE  50018
+				IT
+
+60-86-45   (hex)		Avery Weigh-Tronix, LLC
+608645     (base 16)		Avery Weigh-Tronix, LLC
+				1000 Armstrong Drive
+				Fairmont  MN  56031
+				US
+
+FC-8F-C4   (hex)		Intelligent Technology Inc.
+FC8FC4     (base 16)		Intelligent Technology Inc.
+				Yuanhe 3 Street,Tongsha Industrial Zone,
+				Dongguan  Guangdong  523127
+				CN
+
+10-FC-54   (hex)		Shany Electronic Co., Ltd. 
+10FC54     (base 16)		Shany Electronic Co., Ltd. 
+				4F, No. 92, Section 1, Nei-Hu Road
+				Taipei    114
+				TW
+
+C0-29-73   (hex)		Audyssey Laboratories Inc.
+C02973     (base 16)		Audyssey Laboratories Inc.
+				110 E. 9th Street, Suite C700
+				Los Angeles  CA  90079
+				US
+
+78-FE-3D   (hex)		Juniper Networks
+78FE3D     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+28-38-CF   (hex)		Gen2wave
+2838CF     (base 16)		Gen2wave
+				Gumi-dong, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-741
+				KR
+
+24-BC-82   (hex)		Dali Wireless, Inc.
+24BC82     (base 16)		Dali Wireless, Inc.
+				125 University Avenue, Suite 88
+				Palo Alto  CA  94301
+				US
+
+B4-0C-25   (hex)		Palo Alto Networks
+B40C25     (base 16)		Palo Alto Networks
+				4401 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+F8-F7-D3   (hex)		International Communications Corporation
+F8F7D3     (base 16)		International Communications Corporation
+				11801 Pierce St. 2nd FL
+				Riverside  CA  92505
+				US
+
+28-D1-AF   (hex)		Nokia Corporation
+28D1AF     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+24-C0-B3   (hex)		RSF
+24C0B3     (base 16)		RSF
+				45 Av Marcel Dassault
+				Toulouse  Garonne, Haute (31)  31500
+				FR
+
+FC-45-5F   (hex)		JIANGXI SHANSHUI OPTOELECTRONIC TECHNOLOGY CO.,LTD
+FC455F     (base 16)		JIANGXI SHANSHUI OPTOELECTRONIC TECHNOLOGY CO.,LTD
+				No.1010,Anping Road,Eco-Industrial Park,Lushan District
+				Jiujiang  Jiangxi  332000
+				CN
+
+F0-4A-2B   (hex)		PYRAMID Computer GmbH
+F04A2B     (base 16)		PYRAMID Computer GmbH
+				Boetzinger Strasse 60
+				Freiburg  BW  79111
+				DE
+
+30-2D-E8   (hex)		JDA, LLC (JDA Systems)
+302DE8     (base 16)		JDA, LLC (JDA Systems)
+				4080 Pike Lane
+				Concord  CA  94520
+				US
+
+48-A6-D2   (hex)		GJsun Optical Science and Tech Co.,Ltd.
+48A6D2     (base 16)		GJsun Optical Science and Tech Co.,Ltd.
+				First floor National Information Industry Park D-08
+				Guilin  Guangxi  541004
+				CN
+
+50-0B-32   (hex)		Foxda Technology Industrial(ShenZhen)Co.,LTD
+500B32     (base 16)		Foxda Technology Industrial(ShenZhen)Co.,LTD
+				1F of 1st  Building&1F-3F of 2nd Building, Foxda Industrial Zone,North of Lanzhu Road,Pingshan New District,Shenzhen City,Guangdong Province,P.R.China
+				Shenzhen  Guangdong  518122
+				CN
+
+60-35-53   (hex)		Buwon Technology
+603553     (base 16)		Buwon Technology
+				(Cunuitechnopark 102-1507) 200-1,Chunui-dong
+				Buchon-si  Gyeinggi-do  420-857
+				KR
+
+E0-39-D7   (hex)		Plexxi, Inc.
+E039D7     (base 16)		Plexxi, Inc.
+				100 Innovative Way Suite 3322
+				Nashua  NH  03062
+				US
+
+7C-33-6E   (hex)		MEG Electronics Inc.
+7C336E     (base 16)		MEG Electronics Inc.
+				Bogazici Universitesi Kuzey Kampus
+				ISTANBUL    34342
+				TR
+
+D4-E3-3F   (hex)		Nokia
+D4E33F     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+68-CD-0F   (hex)		U Tek Company Limited
+68CD0F     (base 16)		U Tek Company Limited
+				FL5, BLDG12, 3RD DISTRICT, TANGTOU INDUSTRIAL PARK
+				SHENZHEN  GUANGDONG  518018
+				CN
+
+60-3F-C5   (hex)		COX CO., LTD
+603FC5     (base 16)		COX CO., LTD
+				904HO, ACE TWIN TOWER 1-CHA
+				SEOUL    152-779
+				KR
+
+A4-E3-91   (hex)		DENY FONTAINE
+A4E391     (base 16)		DENY FONTAINE
+				ROUTE DE SAINT VALERY
+				SAINT BLIMONT    80960
+				FR
+
+AC-6F-D9   (hex)		Valueplus Inc.
+AC6FD9     (base 16)		Valueplus Inc.
+				#803, Sicox Tower, 513-14, 
+				Seongnam-si  Gyeonggi-do  462-806
+				KR
+
+DC-1E-A3   (hex)		Accensus LLC
+DC1EA3     (base 16)		Accensus LLC
+				200 South Wacker Drive
+				Chicago  IL  60606
+				US
+
+A4-01-30   (hex)		ABIsystems Co., LTD
+A40130     (base 16)		ABIsystems Co., LTD
+				308 ACE Techno Tower8 191-7 Guro-dong
+				  Seoul  
+				KR
+
+90-A7-83   (hex)		JSW PACIFIC CORPORATION 
+90A783     (base 16)		JSW PACIFIC CORPORATION 
+				3F-3, No.700, Chung-Zheng Rd, Zhonghe District
+				New Taipei City    235 
+				TW
+
+F8-46-2D   (hex)		SYNTEC Incorporation
+F8462D     (base 16)		SYNTEC Incorporation
+				3F, NO.105, Shing-shyue St., 
+				Hsinchu    300
+				TW
+
+78-A5-DD   (hex)		Shenzhen Smarteye Digital Electronics Co., Ltd
+78A5DD     (base 16)		Shenzhen Smarteye Digital Electronics Co., Ltd
+				#6 Northen Area
+				Shenzhen  Guangdong  518129
+				CN
+
+28-AF-0A   (hex)		Sirius XM Radio Inc
+28AF0A     (base 16)		Sirius XM Radio Inc
+				1221 Avenue of the Americas
+				New York  NY  10020
+				US
+
+5C-D4-AB   (hex)		Zektor
+5CD4AB     (base 16)		Zektor
+				12675 Danielson Ct. Ste 401
+				Poway  CA  92064
+				US
+
+08-FC-52   (hex)		OpenXS BV
+08FC52     (base 16)		OpenXS BV
+				Koaibosk 3
+				Terwispel  Friesland  8407ED
+				NL
+
+4C-32-D9   (hex)		M Rutty Holdings Pty. Ltd.
+4C32D9     (base 16)		M Rutty Holdings Pty. Ltd.
+				Unit 1, 4 Beaumont Road
+				Mount Kuring-Gai  New South Wales  2080
+				AU
+
+08-A1-2B   (hex)		ShenZhen EZL Technology Co., Ltd
+08A12B     (base 16)		ShenZhen EZL Technology Co., Ltd
+				RM21B, Building 2, China Phoenix Building,
+				ShenZhen  GuangDong  518026
+				CN
+
+A0-0C-A1   (hex)		SKTB SKiT
+A00CA1     (base 16)		SKTB SKiT
+				239 B. Sadovaya Str.
+				Saratov  Saratov region  410005
+				RU
+
+64-E8-4F   (hex)		Serialway Communication Technology Co. Ltd
+64E84F     (base 16)		Serialway Communication Technology Co. Ltd
+				Room 315, 706 Painting Room, 
+				Beijing    100096
+				CN
+
+2C-9E-FC   (hex)		CANON INC.
+2C9EFC     (base 16)		CANON INC.
+				3-30-2
+				Ohta-Ku  Tokyo  146-8501
+				JP
+
+18-2B-05   (hex)		8D Technologies
+182B05     (base 16)		8D Technologies
+				416, de Maisonneuve West
+				Montreal,   Quebec  H3A 1L2
+				CA
+
+24-0B-B1   (hex)		KOSTAL Industrie Elektrik GmbH 
+240BB1     (base 16)		KOSTAL Industrie Elektrik GmbH 
+				Gewerbering 20
+				Schalksmuehle  North Rhine-Westphalia  58579
+				DE
+
+20-EE-C6   (hex)		Elefirst Science & Tech Co ., ltd
+20EEC6     (base 16)		Elefirst Science & Tech Co ., ltd
+				Floor 9, No 77 Zijinmingmen Building
+				Nanjing  Jiangsu  210007
+				CN
+
+E0-1E-07   (hex)		Anite Telecoms  US. Inc
+E01E07     (base 16)		Anite Telecoms  US. Inc
+				106 Vista Centre Dr
+				Forest  VA  24551
+				US
+
+7C-6B-33   (hex)		Tenyu Tech Co. Ltd.
+7C6B33     (base 16)		Tenyu Tech Co. Ltd.
+				1F., No.10, Ln. 36, Ganzhen 2nd St.
+				New Taipei City     251
+				TW
+
+14-7D-C5   (hex)		Murata Manufacturing Co., Ltd.
+147DC5     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+00-B9-F6   (hex)		Shenzhen Super Rich Electronics Co.,Ltd
+00B9F6     (base 16)		Shenzhen Super Rich Electronics Co.,Ltd
+				RM.102,Shibida Building,No.55,Zhenhua Road,Shenzhen Futian District,
+				Shenzhen  Guangdong  518031
+				CN
+
+FC-C2-3D   (hex)		Atmel Corporation
+FCC23D     (base 16)		Atmel Corporation
+				1150 E Cheyenne Mtn Blvd
+				Colorado Springs  CO  80906
+				US
+
+88-E7-A6   (hex)		iKnowledge Integration Corp.
+88E7A6     (base 16)		iKnowledge Integration Corp.
+				10F No.2, Sec. 3, Xinsheng S. Rd.,
+				Taipei    10660
+				TW
+
+A4-46-FA   (hex)		AmTRAN Video Corporation
+A446FA     (base 16)		AmTRAN Video Corporation
+				9 Goddard
+				Irvine  CA  92618
+				US
+
+CC-E7-DF   (hex)		American Magnetics, Inc.
+CCE7DF     (base 16)		American Magnetics, Inc.
+				PO Box 2509
+				Oak Ridge  TN  37831-2509
+				US
+
+28-04-E0   (hex)		FERMAX ELECTRONICA S.A.U.
+2804E0     (base 16)		FERMAX ELECTRONICA S.A.U.
+				Tres Cruces 133
+				Valencia    46017
+				ES
+
+64-43-46   (hex)		GuangDong Quick Network Computer CO.,LTD
+644346     (base 16)		GuangDong Quick Network Computer CO.,LTD
+				12F,No.80 of Middle XianLie Road,YueXiu District
+				GuangZhou  GuangDong  510070
+				CN
+
+D4-02-4A   (hex)		Delphian Systems LLC
+D4024A     (base 16)		Delphian Systems LLC
+				720 Dartmouth Lane
+				Buffalo Grove  IL  60089
+				US
+
+00-41-B4   (hex)		Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.
+0041B4     (base 16)		Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.
+				Block 93-C, Sci. & Tech. Industry park,
+				Wuxi  Jiangsu  214028
+				CN
+
+F4-44-50   (hex)		BND Co., Ltd.
+F44450     (base 16)		BND Co., Ltd.
+				573-13 Bokhyeon-dong, Buk-gu
+				Daegu    702-020
+				KR
+
+04-62-D7   (hex)		ALSTOM HYDRO FRANCE
+0462D7     (base 16)		ALSTOM HYDRO FRANCE
+				82 Avenue Leon Blum
+				GRENOBLE    38041
+				FR
+
+D4-50-7A   (hex)		CEIVA Logic, Inc
+D4507A     (base 16)		CEIVA Logic, Inc
+				214 E Magnolia Blvd
+				Burbank  CA  91502
+				US
+
+64-D9-89   (hex)		Cisco Systems, Inc
+64D989     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-5D-D7   (hex)		Shenzhen Lifesense Medical Electronics Co., Ltd.    
+645DD7     (base 16)		Shenzhen Lifesense Medical Electronics Co., Ltd.    
+				China Academy of Science and Technology Development, Room 19A 
+				Shenzhen  Guangdong  518057
+				CN
+
+EC-46-70   (hex)		Meinberg Funkuhren GmbH & Co. KG
+EC4670     (base 16)		Meinberg Funkuhren GmbH & Co. KG
+				Lange Wand 9
+				Bad Pyrmont  NDS  31812
+				DE
+
+D0-5A-0F   (hex)		I-BT DIGITAL CO.,LTD
+D05A0F     (base 16)		I-BT DIGITAL CO.,LTD
+				17F.-8, No.866, Zhongzheng Rd., Zhonghe Dist
+				New Taipei     235
+				TW
+
+EC-96-81   (hex)		2276427 Ontario Inc
+EC9681     (base 16)		2276427 Ontario Inc
+				31-1275 Morningside Ave
+				Toronto  ON  M1B3W1
+				CA
+
+5C-07-6F   (hex)		Thought Creator
+5C076F     (base 16)		Thought Creator
+				Largo da Pirâmide, Nº 3, Sala D
+				Oeiras  Lisboa  2795-156 Linda-a-Velha
+				PT
+
+3C-0F-C1   (hex)		KBC Networks
+3C0FC1     (base 16)		KBC Networks
+				25691 Atlantic Ocean Dr
+				Lake Forest  CA  92630
+				US
+
+58-E6-36   (hex)		EVRsafe Technologies
+58E636     (base 16)		EVRsafe Technologies
+				59 North Terrace 
+				Adelaide  South Australia  5069
+				AU
+
+10-F9-EE   (hex)		Nokia Corporation
+10F9EE     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+74-2B-0F   (hex)		Infinidat Ltd.
+742B0F     (base 16)		Infinidat Ltd.
+				11 Galgalei Haplada St.
+				Herzliya Pituach  Center  46722
+				IL
+
+C8-F9-81   (hex)		Seneca s.r.l.
+C8F981     (base 16)		Seneca s.r.l.
+				Via Germania, 34
+				PADOVA    35127
+				IT
+
+24-49-7B   (hex)		Innovative Converged Devices Inc
+24497B     (base 16)		Innovative Converged Devices Inc
+				424 8th Avenue North
+				Seattle  WA  98109
+				US
+
+98-E7-9A   (hex)		Foxconn(NanJing) Communication Co.,Ltd.
+98E79A     (base 16)		Foxconn(NanJing) Communication Co.,Ltd.
+				A-2FMinfang Building No.189 Guangzhou Rd 
+				Nanjing  Jiang su  210029
+				CN
+
+A0-E9-DB   (hex)		Ningbo FreeWings Technologies Co.,Ltd
+A0E9DB     (base 16)		Ningbo FreeWings Technologies Co.,Ltd
+				Room 1107-1108, No 298 XueShi Road Yinzhou District Ningbo, 
+				Ningbo  Zhejiang  315000
+				CN
+
+78-89-73   (hex)		CMC
+788973     (base 16)		CMC
+				Industriepark De Bruwaan 37B
+				Oudenaarde  Oost-Vlaanderen  9700
+				BE
+
+14-30-7A   (hex)		Avermetrics
+14307A     (base 16)		Avermetrics
+				2973 Glendale Blvd.
+				Los Angeles  CA  90039
+				US
+
+A0-6C-EC   (hex)		RIM
+A06CEC     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+20-37-06   (hex)		Cisco Systems, Inc
+203706     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-B1-64   (hex)		Lightning Telecommunications Technology Co. Ltd
+F4B164     (base 16)		Lightning Telecommunications Technology Co. Ltd
+				Room 1302, TianÂ¡Â¯an Hi-Tech Plaza Tower A, Futian District, 
+				ShenZhen  GuangDong  518040
+				CN
+
+70-B0-35   (hex)		Shenzhen Zowee Technology Co., Ltd
+70B035     (base 16)		Shenzhen Zowee Technology Co., Ltd
+				Block 5, Science and Technology Industrial 
+				Shenzhen  Guangdong  518055
+				CN
+
+88-21-E3   (hex)		Nebusens, S.L.
+8821E3     (base 16)		Nebusens, S.L.
+				C/ Adaja S/N, Edificio M2
+				Villamayor de la Armuña  Salamanca  37185
+				ES
+
+90-B9-7D   (hex)		Johnson Outdoors Marine Electronics d/b/a Minnkota
+90B97D     (base 16)		Johnson Outdoors Marine Electronics d/b/a Minnkota
+				1531 E Madison Ave
+				Mankato  MN  56001
+				US
+
+7C-F4-29   (hex)		NUUO Inc. 
+7CF429     (base 16)		NUUO Inc. 
+				C block, 18 Sihyuan St. Jhongjheng District, 
+				Taipei    100
+				TW
+
+CC-B5-5A   (hex)		Fraunhofer ITWM
+CCB55A     (base 16)		Fraunhofer ITWM
+				Fraunhoferplatz 1
+				Kaiserslautern  Rhineland-Palatinae  67663
+				DE
+
+AC-8A-CD   (hex)		ROGER D.Wensker, G.Wensker sp.j.
+AC8ACD     (base 16)		ROGER D.Wensker, G.Wensker sp.j.
+				Gosciszewo 59
+				Sztum  Pomorskie  82-400
+				PL
+
+98-42-46   (hex)		SOL INDUSTRY PTE., LTD
+984246     (base 16)		SOL INDUSTRY PTE., LTD
+				 1 NORTH BRIDGE RD.,
+				    179094
+				SG
+
+34-29-EA   (hex)		MCD ELECTRONICS SP. Z O.O.
+3429EA     (base 16)		MCD ELECTRONICS SP. Z O.O.
+				Lelewela 26
+				Zywiec  slaskie  34-300
+				PL
+
+8C-82-A8   (hex)		Insigma Technology Co.,Ltd
+8C82A8     (base 16)		Insigma Technology Co.,Ltd
+				No.226 Tianmushan Road, 
+				Hangzhou  Zhejiang  310000
+				CN
+
+60-19-0C   (hex)		RRAMAC
+60190C     (base 16)		RRAMAC
+				15400 Medina Rd
+				Plymouth  MN  55447
+				US
+
+D0-5F-CE   (hex)		Hitachi Data Systems
+D05FCE     (base 16)		Hitachi Data Systems
+				750 Central Expressway
+				Santa Clara  CA  95050
+				US
+
+F8-03-32   (hex)		Khomp
+F80332     (base 16)		Khomp
+				Rua Joe Collaço, 253
+				Florianópolis  Santa Catarina  88037-010
+				BR
+
+28-A5-74   (hex)		Miller Electric Mfg. Co.
+28A574     (base 16)		Miller Electric Mfg. Co.
+				N676 Communication Drive
+				Appleton  WI  54914
+				US
+
+10-45-BE   (hex)		Norphonic AS
+1045BE     (base 16)		Norphonic AS
+				Fabrikkgaten 10
+				Bergen    5059
+				NO
+
+90-B8-D0   (hex)		Joyent, Inc.
+90B8D0     (base 16)		Joyent, Inc.
+				345 California Street,
+				San Francisco  CA  94104
+				US
+
+AC-47-23   (hex)		Genelec
+AC4723     (base 16)		Genelec
+				Olvitie 5
+				Iisalmi    74100
+				FI
+
+E8-BA-70   (hex)		Cisco Systems, Inc
+E8BA70     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-A4-25   (hex)		SMAX Technology Co., Ltd.
+D4A425     (base 16)		SMAX Technology Co., Ltd.
+				2F., No. 3, Wuquan 3rd, Wugu Dist.
+				New Taipei City    248
+				TW
+
+28-14-71   (hex)		Lantis co., LTD.
+281471     (base 16)		Lantis co., LTD.
+				busan innobiz center 401
+				busan    616-829
+				KR
+
+24-47-0E   (hex)		PentronicAB
+24470E     (base 16)		PentronicAB
+				Bergsliden 1
+				GUNNEBO    59093
+				SE
+
+D0-9B-05   (hex)		Emtronix
+D09B05     (base 16)		Emtronix
+				5# Gaopeng Dadao
+				Chengdu    610041
+				CN
+
+8C-11-CB   (hex)		ABUS Security-Center GmbH & Co. KG
+8C11CB     (base 16)		ABUS Security-Center GmbH & Co. KG
+				Linker Kreuthweg 5
+				Affing / Muehlhausen  Bavaria  86444
+				DE
+
+FC-83-29   (hex)		Trei technics
+FC8329     (base 16)		Trei technics
+				801 Northpoint Pkwy
+				West Palm Beach  Florida  33407
+				US
+
+14-EB-33   (hex)		BSMediasoft Co., Ltd.
+14EB33     (base 16)		BSMediasoft Co., Ltd.
+				#603, Garden Bldg., 14-13, Yoido-Dong, Youngdeungpo-Gu
+				Seoul    150-871
+				KR
+
+F4-B5-49   (hex)		Xiamen Yeastar Information Technology Co., Ltd.
+F4B549     (base 16)		Xiamen Yeastar Information Technology Co., Ltd.
+				3/F, No. 46 Guanri Road, 2nd Software Park
+				Xiamen  Fujian  361006
+				CN
+
+88-B1-68   (hex)		Delta Control GmbH
+88B168     (base 16)		Delta Control GmbH
+				Rondorfer Hauptstraße 33
+				Cologne  NRW  50997
+				DE
+
+68-87-6B   (hex)		INQ Mobile Limited
+68876B     (base 16)		INQ Mobile Limited
+				6 Hester Road
+				Battersea  London  SW11 4AN
+				GB
+
+1C-AA-07   (hex)		Cisco Systems, Inc
+1CAA07     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-5B-36   (hex)		POWERTECH INDUSTRIAL CO., LTD.
+685B36     (base 16)		POWERTECH INDUSTRIAL CO., LTD.
+				10F, No. 407, Chung Shan Rd., Sec 2,
+				Chung Ho  Taipei County  23558
+				TW
+
+28-EE-2C   (hex)		Frontline Test Equipment
+28EE2C     (base 16)		Frontline Test Equipment
+				PO Box 7507
+				Charlottesville  Virginia  22906-7507
+				US
+
+78-2E-EF   (hex)		Nokia Corporation
+782EEF     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+7C-F0-BA   (hex)		Linkwell Telesystems Pvt Ltd
+7CF0BA     (base 16)		Linkwell Telesystems Pvt Ltd
+				1-11-252/1/A, Gowra Klassic
+				Hyderabad  Andhra Pradesh  500016
+				IN
+
+AC-86-74   (hex)		Open Mesh, Inc.
+AC8674     (base 16)		Open Mesh, Inc.
+				111 SW 5th Ave Ste1150
+				Portland  OR  97204
+				US
+
+64-D2-41   (hex)		Keith & Koep GmbH
+64D241     (base 16)		Keith & Koep GmbH
+				Uellendahler Str. 199
+				Wuppertal  NRW  42109
+				DE
+
+18-B7-9E   (hex)		Invoxia
+18B79E     (base 16)		Invoxia
+				87 rue du Gouverneur Général Eboué
+				Issy-Les-Moulineaux    92130
+				FR
+
+8C-44-35   (hex)		Shanghai BroadMobi Communication Technology Co., Ltd.
+8C4435     (base 16)		Shanghai BroadMobi Communication Technology Co., Ltd.
+				Rm. 901, Bld. 9, No.1515 Gumei Rd, Xuhui District
+				Shanghai    200233
+				CN
+
+F8-1D-93   (hex)		Longdhua(Beijing) Controls Technology Co.,Ltd
+F81D93     (base 16)		Longdhua(Beijing) Controls Technology Co.,Ltd
+				Room 1203,Lixiang Building, No.111 Zhichun Road,Haidian District,
+				Beijing    10086
+				CN
+
+94-D9-3C   (hex)		ENELPS
+94D93C     (base 16)		ENELPS
+				Bul Arsenija Carnojevica 117
+				Belgrade    11070
+				RS
+
+B8-BE-BF   (hex)		Cisco Systems, Inc
+B8BEBF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-B6-4A   (hex)		ViVOtech, Inc.
+64B64A     (base 16)		ViVOtech, Inc.
+				451 El Camino Real
+				Santa Clara  CA  95050
+				US
+
+38-D1-35   (hex)		EasyIO Corporation Sdn. Bhd.
+38D135     (base 16)		EasyIO Corporation Sdn. Bhd.
+				No. 32-2 & 32-3, Jalan Puteri 2/4
+				Puchong  Selangor  47100
+				MY
+
+CC-F8-41   (hex)		Lumewave
+CCF841     (base 16)		Lumewave
+				4803 B Street
+				Sacramento  CA  95819
+				US
+
+30-EB-25   (hex)		INTEK DIGITAL
+30EB25     (base 16)		INTEK DIGITAL
+				801, 8th Fl., Anyang K-center building, 1591-9
+				Anyang    431-060
+				KR
+
+44-E4-D9   (hex)		Cisco Systems, Inc
+44E4D9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+AC-CA-54   (hex)		Telldus Technologies AB
+ACCA54     (base 16)		Telldus Technologies AB
+				Skiffervägen 102
+				Lund    224 78
+				SE
+
+90-19-00   (hex)		SCS SA
+901900     (base 16)		SCS SA
+				Via Pini, 32
+				Biasca    6710
+				CH
+
+D4-5D-42   (hex)		Nokia Corporation
+D45D42     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+B0-38-29   (hex)		Siliconware Precision Industries Co., Ltd.
+B03829     (base 16)		Siliconware Precision Industries Co., Ltd.
+				No. 123, Sec.3, Da Fong Rd, Tantzu, 
+				Taichung    427
+				TW
+
+7C-6C-39   (hex)		PIXSYS SRL
+7C6C39     (base 16)		PIXSYS SRL
+				VIA DELLA CROCE ROSSA 42
+				PADOVA  PD  35129
+				IT
+
+18-B3-BA   (hex)		Netlogic AB
+18B3BA     (base 16)		Netlogic AB
+				Datavägen 14A
+				ASKIM  Västra Götaland  43632
+				SE
+
+8C-5F-DF   (hex)		Beijing Railway Signal Factory
+8C5FDF     (base 16)		Beijing Railway Signal Factory
+				No.2 Sicun Xilu Langfa,Huangcun,
+				Beiijng    102613
+				CN
+
+D4-7B-75   (hex)		HARTING Electronics GmbH
+D47B75     (base 16)		HARTING Electronics GmbH
+				Marienwerderstraße. 3
+				Espelkamp  North Rhine Westphalia  32339
+				DE
+
+D8-DF-0D   (hex)		beroNet GmbH
+D8DF0D     (base 16)		beroNet GmbH
+				Friedrichstraße 231
+				Berlin    10969
+				DE
+
+AC-F9-7E   (hex)		ELESYS INC.
+ACF97E     (base 16)		ELESYS INC.
+				Suit 623, 812-1, Hyomun-dong
+				Ulsan  Buk-gu  683-360
+				KR
+
+20-40-05   (hex)		feno GmbH
+204005     (base 16)		feno GmbH
+				Kolpingring 22
+				Oberhaching  Bavaria  82041
+				DE
+
+D4-6F-42   (hex)		WAXESS USA Inc
+D46F42     (base 16)		WAXESS USA Inc
+				1401 Dove Street
+				Newport Beach  CA  92660
+				US
+
+30-0B-9C   (hex)		Delta Mobile Systems, Inc.
+300B9C     (base 16)		Delta Mobile Systems, Inc.
+				700 Remington Road
+				Schaumburg  Illinois  60173
+				US
+
+6C-AD-3F   (hex)		Hubbell Building Automation, Inc.
+6CAD3F     (base 16)		Hubbell Building Automation, Inc.
+				9601 Dessau Rd
+				Austin  Texas  78754
+				US
+
+B0-1B-7C   (hex)		Ontrol A.S.
+B01B7C     (base 16)		Ontrol A.S.
+				Turcan Cad No:19 Y.Dudullu
+				Umraniye  Istanbul  34775
+				TR
+
+04-C5-A4   (hex)		Cisco Systems, Inc
+04C5A4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-28-46   (hex)		NextBIT Computing Pvt. Ltd.
+BC2846     (base 16)		NextBIT Computing Pvt. Ltd.
+				30/2, 2nd Floor, R.K. Plaza,
+				Bangalore  Karnataka  560038
+				IN
+
+BC-0F-2B   (hex)		FORTUNE TECHGROUP CO.,LTD
+BC0F2B     (base 16)		FORTUNE TECHGROUP CO.,LTD
+				7-8F,No.1198 North Qinzhou Road,
+				Shanghai    200233
+				CN
+
+64-81-25   (hex)		Alphatron Marine BV
+648125     (base 16)		Alphatron Marine BV
+				Schaardijk 23
+				Rotterdam  Zuid-Holland  3063NH
+				NL
+
+8C-F9-C9   (hex)		MESADA Technology Co.,Ltd.
+8CF9C9     (base 16)		MESADA Technology Co.,Ltd.
+				TongFng Information Harbor,No.11 LangShan Road,HI-tech Park,Nanshan District,
+				Shenzhen  GuangDong  518057
+				CN
+
+C0-62-6B   (hex)		Cisco Systems, Inc
+C0626B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+94-E2-26   (hex)		D. ORtiz Consulting, LLC
+94E226     (base 16)		D. ORtiz Consulting, LLC
+				22601 N. 17th Avenue Suite 270
+				Phoenix  AZ  85027
+				US
+
+D8-C9-9D   (hex)		EA DISPLAY LIMITED
+D8C99D     (base 16)		EA DISPLAY LIMITED
+				22/F DELTA HOUSE 3 ON YIU ST
+				SHATIN NT    
+				HK
+
+10-83-D2   (hex)		Microseven Systems, LLC
+1083D2     (base 16)		Microseven Systems, LLC
+				404 South Lemon Ave., #9
+				Walnut  California  91789
+				US
+
+34-68-4A   (hex)		Teraworks Co., Ltd.
+34684A     (base 16)		Teraworks Co., Ltd.
+				Room No. 201 , 515-30 , Mok-Dong
+				Seoul    158-808
+				KR
+
+CC-FC-6D   (hex)		RIZ TRANSMITTERS
+CCFC6D     (base 16)		RIZ TRANSMITTERS
+				BOZIDAREVICEVA 13
+				ZAGREB    10000
+				HR
+
+E0-3E-7D   (hex)		data-complex GmbH
+E03E7D     (base 16)		data-complex GmbH
+				Düsterngraben 7
+				Halberstadt  Sachsen-Anhalt  38820
+				DE
+
+0C-C6-AC   (hex)		DAGS
+0CC6AC     (base 16)		DAGS
+				Ace High end Tower 7th 1802
+				Seoul  Geumcheon-gu  153-802
+				KR
+
+24-F0-FF   (hex)		GHT Co., Ltd.
+24F0FF     (base 16)		GHT Co., Ltd.
+				#16 Nanyunyi Lu, Guangzhou Science City
+				Guangzhou  Guangdong  510663
+				CN
+
+9C-C0-D2   (hex)		Conductix-Wampfler GmbH
+9CC0D2     (base 16)		Conductix-Wampfler GmbH
+				Rheinstrasse 27+33
+				  Baden-Württemberg  
+				DE
+
+CC-F6-7A   (hex)		Ayecka Communication Systems LTD
+CCF67A     (base 16)		Ayecka Communication Systems LTD
+				POB 3059
+				Hod Hasharon    45130
+				IL
+
+80-65-E9   (hex)		BenQ Corporation
+8065E9     (base 16)		BenQ Corporation
+				16 Jihu Road, Neihu
+				Taipei    114
+				TW
+
+EC-98-6C   (hex)		Lufft Mess- und Regeltechnik GmbH
+EC986C     (base 16)		Lufft Mess- und Regeltechnik GmbH
+				Gutenbergstraße 20
+				Fellbach  Baden-Württemberg  70736
+				DE
+
+D0-93-F8   (hex)		Stonestreet One LLC
+D093F8     (base 16)		Stonestreet One LLC
+				9960 Corporate Campus Drive
+				Louisville  KY  40223
+				US
+
+9C-64-5E   (hex)		Harman Consumer Group
+9C645E     (base 16)		Harman Consumer Group
+				8500 Balboa Blvd
+				Northridge  CA  91329
+				US
+
+1C-33-4D   (hex)		ITS Telecom
+1C334D     (base 16)		ITS Telecom
+				29 Hametzuda st. 
+				Azur  Israel  580001
+				IL
+
+DC-D8-7F   (hex)		Shenzhen JoinCyber Telecom Equipment Ltd
+DCD87F     (base 16)		Shenzhen JoinCyber Telecom Equipment Ltd
+				19CDE, Block A,JinFengBuilding,shangbu South Road,Futian District,
+				Shenzhen  Guangdong  518031
+				CN
+
+B4-E0-CD   (hex)		Fusion-io, Inc
+B4E0CD     (base 16)		Fusion-io, Inc
+				2880 Junction Avenue
+				San Jose  CA  95134-1922
+				US
+
+28-60-46   (hex)		Lantech Communications Global, Inc.
+286046     (base 16)		Lantech Communications Global, Inc.
+				7F, No. 45, Lane 188, Ruiguang Rd., Neihu District
+				Taipei City    11491
+				TW
+
+10-E2-D5   (hex)		Qi Hardware Inc.
+10E2D5     (base 16)		Qi Hardware Inc.
+				555 4TH STREET #403
+				San Francisco  CA  94107
+				US
+
+60-C9-80   (hex)		Trymus
+60C980     (base 16)		Trymus
+				Bucheon Techno Park 303-902
+				Bucheon-si  421-741  Gyunggi-do
+				KR
+
+A0-36-FA   (hex)		Ettus Research LLC
+A036FA     (base 16)		Ettus Research LLC
+				1043 N Shoreline Blvd
+				Mountain View  CA  94043
+				US
+
+EC-83-6C   (hex)		RM Tech Co., Ltd.
+EC836C     (base 16)		RM Tech Co., Ltd.
+				C-801, Bupyeong Woolim Lions Valley
+				Incheon City    403-911
+				KR
+
+30-39-55   (hex)		Shenzhen Jinhengjia Electronic Co., Ltd.
+303955     (base 16)		Shenzhen Jinhengjia Electronic Co., Ltd.
+				4-6 Floors, Factory Building, Jijia Industrial Park,
+				Shenzhen  Guangdong  518112
+				CN
+
+FC-5B-24   (hex)		Weibel Scientific A/S
+FC5B24     (base 16)		Weibel Scientific A/S
+				Solvang 30
+				Alleroed    3450
+				DK
+
+78-59-3E   (hex)		RAFI GmbH & Co.KG
+78593E     (base 16)		RAFI GmbH & Co.KG
+				Ravensburger Str. 128-134
+				Berg  Baden Wurttemberg  88276
+				DE
+
+50-97-72   (hex)		Westinghouse Digital
+509772     (base 16)		Westinghouse Digital
+				500 N. State College Blvd.
+				Orange  CA  92868
+				US
+
+50-3D-E5   (hex)		Cisco Systems, Inc
+503DE5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+54-04-96   (hex)		Gigawave LTD
+540496     (base 16)		Gigawave LTD
+				GIGAWAVE TECHNICAL CENTRE
+				Colchester  ESSEX  CO62NS
+				GB
+
+EC-46-44   (hex)		TTK SAS
+EC4644     (base 16)		TTK SAS
+				4, Rue du Chemin Vert
+				Clichy    92110
+				FR
+
+4C-B9-C8   (hex)		CONET CO., LTD.
+4CB9C8     (base 16)		CONET CO., LTD.
+				2-8,HIGASHIJIMA-CHO
+				ICHINOMIYA  AICHI  491-0074
+				JP
+
+8C-B6-4F   (hex)		Cisco Systems, Inc
+8CB64F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-4A-AA   (hex)		Hanscan Spain S.A.
+204AAA     (base 16)		Hanscan Spain S.A.
+				Avda. de la Vega, 1
+				Alcobendas  Madrid  28108
+				ES
+
+20-FE-CD   (hex)		System In Frontier Inc.
+20FECD     (base 16)		System In Frontier Inc.
+				4F Shinsuzuharu Bldg. 2-8-3 Akebonocyo
+				Tachikawa-shi  Tokyo  190-0012
+				JP
+
+F0-93-3A   (hex)		NxtConect
+F0933A     (base 16)		NxtConect
+				Schillerstrasse 4
+				Bad Kissingen    97688
+				DE
+
+B8-41-5F   (hex)		ASP AG
+B8415F     (base 16)		ASP AG
+				Max- Planck-Str. 15 a-c
+				Erkrath  NRW  40699
+				DE
+
+2C-B6-9D   (hex)		RED Digital Cinema
+2CB69D     (base 16)		RED Digital Cinema
+				20291 Valencia Circle
+				Lake Forest  California  92630
+				US
+
+58-2F-42   (hex)		Universal Electric Corporation
+582F42     (base 16)		Universal Electric Corporation
+				168 Georgetown Road
+				Canonsburg  PA  15317
+				US
+
+04-74-A1   (hex)		Aligera Equipamentos Digitais Ltda
+0474A1     (base 16)		Aligera Equipamentos Digitais Ltda
+				Av. Para 330 / 302
+				Porto Alegre  RS  90240-590
+				BR
+
+5C-69-84   (hex)		NUVICO
+5C6984     (base 16)		NUVICO
+				1 Enterprise Place  Unit G
+				Hicksville  NY  11801
+				US
+
+70-DD-A1   (hex)		Tellabs
+70DDA1     (base 16)		Tellabs
+				One Tellabs Center
+				Naperville  Illinois  60563
+				US
+
+94-D0-19   (hex)		Cydle Corp.
+94D019     (base 16)		Cydle Corp.
+				1203, KofomoTower, 16-3 , Sunae-Dong, Bundang-Gu
+				Seongnam-City  Gyeonggi-Do  463825
+				KR
+
+8C-27-8A   (hex)		Vocollect Inc
+8C278A     (base 16)		Vocollect Inc
+				703 Rodi Road
+				Pittsburgh  Pa  15235
+				US
+
+CC-0C-DA   (hex)		Miljovakt AS
+CC0CDA     (base 16)		Miljovakt AS
+				Gannestadveien 2
+				Borre  Vestfold  3184
+				NO
+
+E4-1C-4B   (hex)		V2 TECHNOLOGY, INC.
+E41C4B     (base 16)		V2 TECHNOLOGY, INC.
+				4450 Enterprise Street
+				Fremont  California  94538
+				US
+
+5C-F3-FC   (hex)		IBM Corp
+5CF3FC     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+A8-6A-6F   (hex)		RIM
+A86A6F     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+68-12-2D   (hex)		Special Instrument Development Co., Ltd.
+68122D     (base 16)		Special Instrument Development Co., Ltd.
+				6F-1, No. 123, Lane 235
+				Hsin Tien  Taipei Hsien  231
+				TW
+
+94-F7-20   (hex)		Tianjin Deviser Electronics Instrument Co., Ltd
+94F720     (base 16)		Tianjin Deviser Electronics Instrument Co., Ltd
+				No.40 Yibin Road,Nankai district,
+				Tianjin    300113
+				CN
+
+DC-9C-52   (hex)		Sapphire Technology Limited.
+DC9C52     (base 16)		Sapphire Technology Limited.
+				Unit 1909-1919, 19/F., Tower 2, Grand Central Plaza,
+				    
+				HK
+
+48-91-F6   (hex)		Shenzhen Reach software technology CO.,LTD
+4891F6     (base 16)		Shenzhen Reach software technology CO.,LTD
+				6/F,Block B, Kingdee Software park,#2,Keji 12th South Road,Hi-tech Industrial Park,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+64-9B-24   (hex)		V Technology Co., Ltd.
+649B24     (base 16)		V Technology Co., Ltd.
+				YBP East Tower 5F,
+				Yokohama city  Kanagawa  240-0005
+				JP
+
+84-6E-B1   (hex)		Park Assist LLC
+846EB1     (base 16)		Park Assist LLC
+				111 W28th Street
+				New York  NY  10001
+				US
+
+6C-50-4D   (hex)		Cisco Systems, Inc
+6C504D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B8-D0-6F   (hex)		GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE
+B8D06F     (base 16)		GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE
+				Rm 403, North of Software Building,Nansha IT Park,
+				Guangzhou  Guangdong Privince  511458
+				CN
+
+EC-14-F6   (hex)		BioControl AS
+EC14F6     (base 16)		BioControl AS
+				Grimstad Gard 
+				Rakkestad     N-1890
+				NO
+
+E8-99-5A   (hex)		PiiGAB, Processinformation i Goteborg AB
+E8995A     (base 16)		PiiGAB, Processinformation i Goteborg AB
+				Anders Carlssons gata 1
+				Gothenburg    417 55
+				SE
+
+40-1D-59   (hex)		Biometric Associates, LP
+401D59     (base 16)		Biometric Associates, LP
+				9475 Deereco Rd.
+				Timonium  MD  21093
+				US
+
+B8-FF-6F   (hex)		Shanghai Typrotech Technology Co.Ltd
+B8FF6F     (base 16)		Shanghai Typrotech Technology Co.Ltd
+				Design Building 903, NO.63, 
+				Shanghai    200092
+				CN
+
+1C-BD-0E   (hex)		Amplified Engineering Pty Ltd
+1CBD0E     (base 16)		Amplified Engineering Pty Ltd
+				5 Turner Avenue
+				Bentley  WA  6102
+				AU
+
+A0-F2-17   (hex)		GE Medical System(China) Co., Ltd. 
+A0F217     (base 16)		GE Medical System(China) Co., Ltd. 
+				No.19, ChangJiang Road 
+				Wuxi  Jiangsu  214028 
+				CN
+
+F0-A7-64   (hex)		GST Co., Ltd.
+F0A764     (base 16)		GST Co., Ltd.
+				#988-6, Gosaek-Dong, Gwonseon-Gu
+				Suwon-Si  Gyeonggi-Do  441-813
+				KR
+
+1C-06-56   (hex)		IDY Corporation
+1C0656     (base 16)		IDY Corporation
+				IDEMITSU Korakuen Bld 9F
+				Bunkyo-ku  Tokyo  112-0002
+				JP
+
+50-0E-6D   (hex)		TrafficCast International
+500E6D     (base 16)		TrafficCast International
+				2801 Coho Street
+				Madison  WI  53713
+				US
+
+EC-3B-F0   (hex)		NovelSat
+EC3BF0     (base 16)		NovelSat
+				Hataasia 21
+				Raanana    2396
+				IL
+
+4C-ED-DE   (hex)		ASKEY COMPUTER CORP
+4CEDDE     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+E8-E0-8F   (hex)		GRAVOTECH MARKING SAS
+E8E08F     (base 16)		GRAVOTECH MARKING SAS
+				56 AVENUE JEAN JAURES
+				LA CHAPELLE SAINT LUC  AUBE  10600
+				FR
+
+AC-AB-8D   (hex)		Lyngso Marine A/S
+ACAB8D     (base 16)		Lyngso Marine A/S
+				Lyngso Alle 2
+				Horsholm    DK-2970
+				DK
+
+60-83-B2   (hex)		GkWare e.K.
+6083B2     (base 16)		GkWare e.K.
+				Hatzper Str. 172B
+				Essen  NRW  45149
+				DE
+
+80-D0-19   (hex)		Embed, Inc
+80D019     (base 16)		Embed, Inc
+				410 Great Road
+				Littleton  MA  01460
+				US
+
+68-EB-C5   (hex)		Angstrem Telecom
+68EBC5     (base 16)		Angstrem Telecom
+				Yuzhnaya promzona, passage 4806, 4, build 3 
+				Zelenograd  Moscow  124460
+				RU
+
+A0-B5-DA   (hex)		HongKong THTF Co., Ltd
+A0B5DA     (base 16)		HongKong THTF Co., Ltd
+				2F,Sector C of Tsinghua University Academy, 
+				Shenzhen  Guangdong  518057
+				CN
+
+88-86-A0   (hex)		Simton Technologies, Ltd.
+8886A0     (base 16)		Simton Technologies, Ltd.
+				2 Taishan Road, Building C, 3rd Floor
+				Wuxi,   Province of Jiangsu,   214028
+				CN
+
+A4-50-55   (hex)		BUSWARE.DE
+A45055     (base 16)		BUSWARE.DE
+				Lindenstrasse 18
+				Scharbeutz    23684
+				DE
+
+A8-9B-10   (hex)		inMotion Ltd.
+A89B10     (base 16)		inMotion Ltd.
+				Unit 2709 Exchange Tower 
+				    KLN
+				HK
+
+B4-14-89   (hex)		Cisco Systems, Inc
+B41489     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-A8-0F   (hex)		Shenzhen Coship Electronics Co., Ltd.
+A4A80F     (base 16)		Shenzhen Coship Electronics Co., Ltd.
+				Rainbow Bldg., North, Hi-Tech Industrial Park, Nanshan District, 
+				Shenzhen  Guangdong  518057
+				CN
+
+F8-B5-99   (hex)		Guangzhou CHNAVS Digital Technology Co.,Ltd
+F8B599     (base 16)		Guangzhou CHNAVS Digital Technology Co.,Ltd
+				Buliding C, industy base of digital home application and demonstration ,zhongyi road Guangzhou higher education mega center
+				Guangzhou  Guangdong  510006
+				CN
+
+B8-92-1D   (hex)		BG T&A
+B8921D     (base 16)		BG T&A
+				4F, L&C Tower
+				Gunpo-si  Gyeonggi-do  435-845
+				KR
+
+D0-89-99   (hex)		APCON, Inc.
+D08999     (base 16)		APCON, Inc.
+				9255 SW Pioneer Court
+				Wilsonville  OR  97070
+				US
+
+C8-84-47   (hex)		Beautiful Enterprise Co., Ltd
+C88447     (base 16)		Beautiful Enterprise Co., Ltd
+				26th Floor, Beautiful Group Tower 
+				    
+				HK
+
+54-FD-BF   (hex)		Scheidt & Bachmann GmbH
+54FDBF     (base 16)		Scheidt & Bachmann GmbH
+				Breite Strasse 132
+				Moenchengladbach  NRW  41238
+				DE
+
+D0-BB-80   (hex)		SHL Telemedicine International Ltd.
+D0BB80     (base 16)		SHL Telemedicine International Ltd.
+				90 Yigal Alon
+				Tel Aviv    67891
+				IL
+
+5C-17-D3   (hex)		LGE 
+5C17D3     (base 16)		LGE 
+				60-39 , Kasan -dong , Gumcheon-gu.
+				Seoul     153-801
+				KR
+
+1C-DF-0F   (hex)		Cisco Systems, Inc
+1CDF0F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-BD-AB   (hex)		Cisco Systems, Inc
+68BDAB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+9C-AD-EF   (hex)		Obihai Technology, Inc.
+9CADEF     (base 16)		Obihai Technology, Inc.
+				2105 S. Bascom Ave #285
+				Campbell  CA  95008
+				US
+
+C8-8B-47   (hex)		Nolangroup S.P.A con Socio Unico
+C88B47     (base 16)		Nolangroup S.P.A con Socio Unico
+				via Terzi di S.Agata 2
+				Brembate di Sopra  Bergamo  24030
+				IT
+
+C4-CD-45   (hex)		Beijing Boomsense Technology CO.,LTD.
+C4CD45     (base 16)		Beijing Boomsense Technology CO.,LTD.
+				803 Building 4 INTERWEST Business Center,No.9 South Shouti Road ,HaidianDistrict,
+				Beijing    100048
+				CN
+
+8C-E7-B3   (hex)		Sonardyne International Ltd
+8CE7B3     (base 16)		Sonardyne International Ltd
+				Blackbushe Business Park
+				Yateley  Hampshire  GU46 6GD
+				GB
+
+08-8D-C8   (hex)		Ryowa Electronics Co.,Ltd
+088DC8     (base 16)		Ryowa Electronics Co.,Ltd
+				1483-1 Takahara-machi
+				Yamagata-shi  Yamagata-pref.  9900002
+				JP
+
+80-C6-CA   (hex)		Endian s.r.l.
+80C6CA     (base 16)		Endian s.r.l.
+				Pillhof 47
+				Frangarto  Bolzano  39010
+				IT
+
+70-76-F0   (hex)		LevelOne Communications (India) Private Limited
+7076F0     (base 16)		LevelOne Communications (India) Private Limited
+				2F, Lane 1, 45 Bharat Nagar
+				New Delhi  DELHI  110025
+				IN
+
+C0-2B-FC   (hex)		iNES. applied informatics GmbH
+C02BFC     (base 16)		iNES. applied informatics GmbH
+				Ohmstrasse 9
+				Ludwigsburg    71642
+				DE
+
+94-C7-AF   (hex)		Raylios Technology
+94C7AF     (base 16)		Raylios Technology
+				12F., No.16, Jian 8th Rd
+				Zhonghe City  Taipei County   23511
+				TW
+
+D8-1C-14   (hex)		Compacta International, Ltd.
+D81C14     (base 16)		Compacta International, Ltd.
+				31342 Via Las Palmas
+				San Juan Capistrano  CA  92675
+				US
+
+00-8C-10   (hex)		Black Box Corp.
+008C10     (base 16)		Black Box Corp.
+				1000 Park Drive
+				Lawrence  PA  15055
+				US
+
+90-90-3C   (hex)		TRISON TECHNOLOGY CORPORATION
+90903C     (base 16)		TRISON TECHNOLOGY CORPORATION
+				No.3, Kung-Yeh 12th Rd., Ping-Jen Industrial Park,
+				Ping-Jen City,   TaoYuan County  32459
+				TW
+
+E0-61-B2   (hex)		HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD
+E061B2     (base 16)		HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD
+				Room 806, F#, Cambridge Combridge, Shenhua Road,District Xihu, 
+				Hangzhou  Zhejiang  310030
+				CN
+
+94-11-DA   (hex)		ITF Fröschl GmbH
+9411DA     (base 16)		ITF Fröschl GmbH
+				Hauserbachstraße 9
+				Walderbach  Bavaria  93194
+				DE
+
+80-39-E5   (hex)		PATLITE CORPORATION
+8039E5     (base 16)		PATLITE CORPORATION
+				19-2
+				SANDA  HYOUGOKEN  669-1339
+				JP
+
+DC-7B-94   (hex)		Cisco Systems, Inc
+DC7B94     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+5C-CA-32   (hex)		Theben AG
+5CCA32     (base 16)		Theben AG
+				Hohenbergstraße 32
+				Haigerloch  Baden-Württemberg  72401
+				DE
+
+74-15-E2   (hex)		Tri-Sen Systems Corporation
+7415E2     (base 16)		Tri-Sen Systems Corporation
+				17625 El Camino Real Suite 200
+				Houston  TX  77058
+				US
+
+EC-C3-8A   (hex)		Accuenergy (CANADA) Inc
+ECC38A     (base 16)		Accuenergy (CANADA) Inc
+				2 Lansing Square, Suite 503
+				Toronto  Ontario  M2J 4P8
+				CA
+
+D4-8F-AA   (hex)		Sogecam Industrial, S.A.
+D48FAA     (base 16)		Sogecam Industrial, S.A.
+				Rosalind Franklin, 22-24
+				Malaga    29590
+				ES
+
+B0-81-D8   (hex)		I-sys Corp
+B081D8     (base 16)		I-sys Corp
+				2457 Aviation Ave
+				N. Charleston  South Carolina  29406
+				US
+
+14-FE-AF   (hex)		SAGITTAR LIMITED
+14FEAF     (base 16)		SAGITTAR LIMITED
+				2-102, BLD34, BAIWANGMOLIYUAN
+				BEIJING    100094
+				CN
+
+B0-B8-D5   (hex)		Nanjing Nengrui Auto Equipment CO.,Ltd
+B0B8D5     (base 16)		Nanjing Nengrui Auto Equipment CO.,Ltd
+				No.108 Ganjiabian East Yaohua Town
+				Nanjing  Jiangsu  210046
+				CN
+
+94-E7-11   (hex)		Xirka Dama Persada PT
+94E711     (base 16)		Xirka Dama Persada PT
+				Gdg CM
+				Jakarta    13150
+				ID
+
+6C-9B-02   (hex)		Nokia Corporation
+6C9B02     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+64-1E-81   (hex)		Dowslake Microsystems
+641E81     (base 16)		Dowslake Microsystems
+				21 High Street, Suite 306
+				North Andover  MA  01845
+				US
+
+EC-54-2E   (hex)		Shanghai XiMei Electronic Technology Co. Ltd
+EC542E     (base 16)		Shanghai XiMei Electronic Technology Co. Ltd
+				Room 503, No.2623, GongHeXin Road
+				Shanghai    200072
+				CN
+
+FC-D4-F6   (hex)		Messana Air.Ray Conditioning s.r.l.
+FCD4F6     (base 16)		Messana Air.Ray Conditioning s.r.l.
+				Via Venezia 18
+				Oderzo  TV  31046
+				IT
+
+D4-66-A8   (hex)		Riedo Networks Ltd
+D466A8     (base 16)		Riedo Networks Ltd
+				Route de la Fonderie 6
+				Fribourg    1700
+				CH
+
+F0-E5-C3   (hex)		Drägerwerk AG & Co. KG aA
+F0E5C3     (base 16)		Drägerwerk AG & Co. KG aA
+				Moislinger Allee 53-55
+				Luebeck  Germany  23452
+				DE
+
+D8-29-86   (hex)		Best Wish Technology LTD
+D82986     (base 16)		Best Wish Technology LTD
+				7E,Hai Yi Business Building,No.310,Tianshan RD.,
+				Shanghai    200336
+				CN
+
+44-61-32   (hex)		ecobee inc
+446132     (base 16)		ecobee inc
+				333 Adelaide St W 6th Floor
+				Toronto  Ontario  M5V1R5
+				CA
+
+F4-1F-0B   (hex)		YAMABISHI Corporation
+F41F0B     (base 16)		YAMABISHI Corporation
+				3-14-12 Kamigou
+				Ebina-city  KANAGAWA  243-0434
+				JP
+
+A0-82-C7   (hex)		P.T.I Co.,LTD
+A082C7     (base 16)		P.T.I Co.,LTD
+				1-5-1,Tsurumidan
+				Koriyama-shi  Fukushima  963-8861
+				JP
+
+04-36-04   (hex)		Gyeyoung I&T
+043604     (base 16)		Gyeyoung I&T
+				6F, Woosung Bldg. 1000-1, Daechi-dong
+				  Seoul  135-502
+				KR
+
+A4-B2-A7   (hex)		Adaxys Solutions AG
+A4B2A7     (base 16)		Adaxys Solutions AG
+				Eichtalstrasse 55
+				Hombrechtikon  CH  8634
+				CH
+
+D0-D0-FD   (hex)		Cisco Systems, Inc
+D0D0FD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-5B-70   (hex)		Innovid, Co., Ltd.
+E05B70     (base 16)		Innovid, Co., Ltd.
+				5th Floor, Boga Building, 821-3, Bangbaedong, Seochogu
+				Seoul    137-060
+				KR
+
+14-1B-BD   (hex)		Volex Inc.
+141BBD     (base 16)		Volex Inc.
+				915 Tate Blvd. SE
+				Hickory  NC  28602
+				US
+
+E8-7A-F3   (hex)		S5 Tech S.r.l.
+E87AF3     (base 16)		S5 Tech S.r.l.
+				Via Tortona 72
+				Milano    20144
+				IT
+
+CC-5C-75   (hex)		Weightech Com. Imp. Exp. Equip. Pesagem Ltda
+CC5C75     (base 16)		Weightech Com. Imp. Exp. Equip. Pesagem Ltda
+				Rodovia Virgílio Várzea, 3110 - Sala 01
+				Florianópolis  SC  88032-001
+				BR
+
+1C-6F-65   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+1C6F65     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				
+				Pin-Jen  Taoyuan  324
+				TW
+
+90-E0-F0   (hex)		IEEE 1722a Working Group
+90E0F0     (base 16)		IEEE 1722a Working Group
+				8760 Sandy Parkway
+				Sandy  Utah  84070
+				US
+
+40-52-0D   (hex)		Pico Technology
+40520D     (base 16)		Pico Technology
+				James House, Marlborough Road
+				St Neots  Cambridgeshire   PE19 8YP
+				GB
+
+80-7D-1B   (hex)		Neosystem Co. Ltd.
+807D1B     (base 16)		Neosystem Co. Ltd.
+				4-19-12 Takao
+				Dazaifu-shi  Fukuoka  818-0122
+				JP
+
+18-B2-09   (hex)		Torrey Pines Logic, Inc
+18B209     (base 16)		Torrey Pines Logic, Inc
+				12651 High Bluff Drive, #100
+				San Diego  CA  92130
+				US
+
+D8-4B-2A   (hex)		Cognitas Technologies, Inc.
+D84B2A     (base 16)		Cognitas Technologies, Inc.
+				6406 Laurel Bush Ln.
+				Sugar Land  Texas  77479
+				US
+
+68-4B-88   (hex)		Galtronics Telemetry Inc.
+684B88     (base 16)		Galtronics Telemetry Inc.
+				31 Lupi Ct
+				Palm Coast  Florida  32137
+				US
+
+98-FC-11   (hex)		Cisco-Linksys, LLC
+98FC11     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+34-E0-D7   (hex)		DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD
+34E0D7     (base 16)		DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD
+				XINJI INDUSTRIAL ZONE, MACHONG TOWN
+				DONGGUAN  GUANGDONG  523123
+				CN
+
+D8-46-06   (hex)		Silicon Valley Global Marketing
+D84606     (base 16)		Silicon Valley Global Marketing
+				830 Stewart Dr. #201
+				Sunnyvale  Ca  94085
+				US
+
+F8-AC-6D   (hex)		Deltenna Ltd
+F8AC6D     (base 16)		Deltenna Ltd
+				First Floor Unit 2
+				Chippenham  Wiltshire  SN15 1BN
+				GB
+
+F4-50-EB   (hex)		Telechips Inc
+F450EB     (base 16)		Telechips Inc
+				KORAD Bldg,1000-12, Daechi-Dong, Gangnam-Gu,
+				Seoul    135-280
+				KR
+
+98-8E-DD   (hex)		TE Connectivity Limerick
+988EDD     (base 16)		TE Connectivity Limerick
+				International Science Centre, Block 1
+				Castletroy  Co. Limerick  
+				IE
+
+A4-AE-9A   (hex)		Maestro Wireless Solutions ltd.
+A4AE9A     (base 16)		Maestro Wireless Solutions ltd.
+				3603-9, 36/F
+				Sai Ying Pun    
+				HK
+
+C8-48-F5   (hex)		MEDISON Xray Co., Ltd
+C848F5     (base 16)		MEDISON Xray Co., Ltd
+				3F Burim B/D 999 Daechi-dong 
+				Seoul    135-280
+				KR
+
+78-A7-14   (hex)		Amphenol
+78A714     (base 16)		Amphenol
+				20 Valley St.
+				Endicott  New York  13760
+				US
+
+F8-93-F3   (hex)		VOLANS
+F893F3     (base 16)		VOLANS
+				3F IJU BD 770-13 YEOKSAM-DONG
+				SEOUL    135-928
+				KR
+
+78-66-AE   (hex)		ZTEC Instruments, Inc.
+7866AE     (base 16)		ZTEC Instruments, Inc.
+				7715 Tiburon St. NE
+				Albuquerque  NM  87109
+				US
+
+4C-02-2E   (hex)		CMR KOREA CO., LTD
+4C022E     (base 16)		CMR KOREA CO., LTD
+				6F, J-Tower, 24-5 Bangi-dong, Songpa-Gu
+				Seoul    138-050
+				KR
+
+34-AA-EE   (hex)		Mikrovisatos Servisas UAB
+34AAEE     (base 16)		Mikrovisatos Servisas UAB
+				Savanoriu pr. 125
+				Kaunas    LT44146
+				LT
+
+44-D6-3D   (hex)		Talari Networks
+44D63D     (base 16)		Talari Networks
+				3200 Glen Royal Rd.
+				Raleigh   NC  27617
+				US
+
+78-A2-A0   (hex)		Nintendo Co., Ltd.
+78A2A0     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+48-FC-B8   (hex)		Woodstream Corporation
+48FCB8     (base 16)		Woodstream Corporation
+				69 N. Locust Street
+				Lititz  PA  17543
+				US
+
+D4-00-0D   (hex)		Phoenix Broadband Technologies, LLC.
+D4000D     (base 16)		Phoenix Broadband Technologies, LLC.
+				589 Bethlehem Pike
+				Montgomeryville  PA  18936
+				US
+
+AC-51-35   (hex)		MPI TECH
+AC5135     (base 16)		MPI TECH
+				Vadstrupvej 35
+				Bagsværd    DK-2880
+				DK
+
+74-B9-EB   (hex)		JinQianMao Technology Co.,Ltd.
+74B9EB     (base 16)		JinQianMao Technology Co.,Ltd.
+				Room 506 YongHeng Building NO.58 JiangBing Raod
+				FuZhou  FuJian  350005
+				CN
+
+D4-52-97   (hex)		nSTREAMS Technologies, Inc.
+D45297     (base 16)		nSTREAMS Technologies, Inc.
+				10F-2, No. 302, Ruiguang Rd., Neihu District,
+				Taipei City    114
+				TW
+
+18-80-CE   (hex)		Barberry Solutions Ltd
+1880CE     (base 16)		Barberry Solutions Ltd
+				2/13 Naviti Place
+				Auckland    0630
+				NZ
+
+24-B6-B8   (hex)		FRIEM SPA
+24B6B8     (base 16)		FRIEM SPA
+				Via Edison 1
+				Segrate  Milano  20090
+				IT
+
+A4-56-1B   (hex)		MCOT Corporation
+A4561B     (base 16)		MCOT Corporation
+				Yogohigashi 1-5-12
+				Matsuyama city  Ehime prefecture  790-0044
+				JP
+
+80-C6-3F   (hex)		Remec Broadband Wireless , LLC
+80C63F     (base 16)		Remec Broadband Wireless , LLC
+				17034 Camino San Bernardo
+				San Diego  CA  92127
+				US
+
+40-D4-0E   (hex)		Biodata Ltd
+40D40E     (base 16)		Biodata Ltd
+				10 Stocks Street
+				Manchester    M8 8QG
+				GB
+
+0C-82-6A   (hex)		Wuhan Huagong Genuine Optics Technology Co., Ltd
+0C826A     (base 16)		Wuhan Huagong Genuine Optics Technology Co., Ltd
+				Science & Technology Region of HUST, Donghu High-Tech Zone 
+				Wuhan  Hubei  430223
+				CN
+
+E0-27-1A   (hex)		TTC Next-generation Home Network System WG
+E0271A     (base 16)		TTC Next-generation Home Network System WG
+				1-1-12 Shiba Kouen
+				Minato-ku  Tokyo  105-0011
+				JP
+
+00-97-FF   (hex)		Heimann Sensor GmbH
+0097FF     (base 16)		Heimann Sensor GmbH
+				Maria-Reiche-Str. 1
+				Dresden  Sachsen  01109
+				DE
+
+E4-AB-46   (hex)		UAB Selteka
+E4AB46     (base 16)		UAB Selteka
+				DraugystÃ«s g. 19
+				Kaunas    LT-51230 
+				LT
+
+94-5B-7E   (hex)		TRILOBIT LTDA.
+945B7E     (base 16)		TRILOBIT LTDA.
+				R. ALVARENGA 1377
+				São Paulo    05509002
+				BR
+
+04-E5-48   (hex)		Cohda Wireless Pty Ltd
+04E548     (base 16)		Cohda Wireless Pty Ltd
+				Suite 5 / 83 Fullarton Road
+				Kent Town  South Australia  5067
+				AU
+
+70-71-BC   (hex)		PEGATRON CORPORATION
+7071BC     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+78-84-EE   (hex)		INDRA ESPACIO S.A.
+7884EE     (base 16)		INDRA ESPACIO S.A.
+				C/ ROC BORONAT, 133
+				BARCELONA    08018
+				ES
+
+7C-05-1E   (hex)		RAFAEL LTD.
+7C051E     (base 16)		RAFAEL LTD.
+				GUSH SEGEV POB 2250
+				HAIFA    31008
+				IL
+
+E0-1C-EE   (hex)		Bravo Tech, Inc.
+E01CEE     (base 16)		Bravo Tech, Inc.
+				6185 Phyllis Dr. Unit D.
+				Cypress  CA  90630
+				US
+
+28-93-FE   (hex)		Cisco Systems, Inc
+2893FE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+78-11-85   (hex)		NBS Payment Solutions Inc.
+781185     (base 16)		NBS Payment Solutions Inc.
+				703 Evans Ave
+				Toronto  Ontario  M9C 5E9
+				CA
+
+D0-58-75   (hex)		Active Control Technology Inc.
+D05875     (base 16)		Active Control Technology Inc.
+				1800 Appleby Line
+				Burlington  Ontario  L7L 6A1
+				CA
+
+C8-EF-2E   (hex)		Beijing Gefei Tech. Co., Ltd 
+C8EF2E     (base 16)		Beijing Gefei Tech. Co., Ltd 
+				A-603 Power Creative Plaza, NO.1 Shangdi E. Rd.,Haidian District, 
+				Beijing    100085
+				CN
+
+08-F6-F8   (hex)		GET Engineering
+08F6F8     (base 16)		GET Engineering
+				9350 Bond Ave
+				El Cajon  CA  92021
+				US
+
+3C-4C-69   (hex)		Infinity System S.L.
+3C4C69     (base 16)		Infinity System S.L.
+				Crtra. N-II, Km 48,5 Pol. Ind. Cabanillas del Campo, Parc. 12B
+				Guadalajara    19171
+				US
+
+78-30-E1   (hex)		UltraClenz, LLC
+7830E1     (base 16)		UltraClenz, LLC
+				1440 W Indiantown Road
+				Jupiter  FL  33458
+				US
+
+B0-91-34   (hex)		Taleo
+B09134     (base 16)		Taleo
+				4140 Dublin Blvd
+				Dublin  California  94568
+				US
+
+A4-C2-AB   (hex)		Hangzhou LEAD-IT Information & Technology Co.,Ltd
+A4C2AB     (base 16)		Hangzhou LEAD-IT Information & Technology Co.,Ltd
+				F2 Builder B,Xidomen Road NO.22
+				Hangzhou  Zhejiang  310012
+				CN
+
+48-AA-5D   (hex)		Store Electronic Systems
+48AA5D     (base 16)		Store Electronic Systems
+				39 rue de montigny
+				Argenteuil    95100
+				FR
+
+04-2F-56   (hex)		ATOCS (Shenzhen) LTD
+042F56     (base 16)		ATOCS (Shenzhen) LTD
+				4/F., Building 10, Tongfuyu Industry Zone, Xili Town,
+				Shenzhen    
+				CN
+
+E8-5E-53   (hex)		Infratec Datentechnik GmbH
+E85E53     (base 16)		Infratec Datentechnik GmbH
+				Gevener Weg 38
+				Neuenrade  NRW  58579
+				DE
+
+88-BA-7F   (hex)		Qfiednet Co., Ltd.
+88BA7F     (base 16)		Qfiednet Co., Ltd.
+				#204 KJ Bldg. DaeChi-Dong
+				Seoul    135-847
+				KR
+
+64-DB-18   (hex)		OpenPattern
+64DB18     (base 16)		OpenPattern
+				109/111 rue des Côtes
+				Maisons Laffitte  Yvelines  78600
+				FR
+
+90-A2-DA   (hex)		GHEO SA
+90A2DA     (base 16)		GHEO SA
+				Via Soldini, 22
+				Chiasso    CH-6830
+				CH
+
+98-89-ED   (hex)		Anadem Information Inc.
+9889ED     (base 16)		Anadem Information Inc.
+				2nd F, 79 Zhouzi Street, Neihu District, 
+				Taipei    114
+				TW
+
+D8-1B-FE   (hex)		TWINLINX CORPORATION
+D81BFE     (base 16)		TWINLINX CORPORATION
+				ESPACE DESCARTES BAT B
+				AIX EN PROVENCE  PROVENCE  13857
+				FR
+
+FC-44-63   (hex)		Universal Audio, Inc
+FC4463     (base 16)		Universal Audio, Inc
+				4585 Scotts Valley Dr.
+				Scotts Valley  CA  95066
+				US
+
+10-2D-96   (hex)		Looxcie Inc.
+102D96     (base 16)		Looxcie Inc.
+				1196 Borregas Ave.
+				Sunnyvale  CA  94089
+				US
+
+5C-35-DA   (hex)		There Corporation Oy
+5C35DA     (base 16)		There Corporation Oy
+				Elimäenkatu 5
+				Helsinki    00510
+				FI
+
+A0-69-86   (hex)		Wellav Technologies Ltd
+A06986     (base 16)		Wellav Technologies Ltd
+				15F Desay Building
+				Huizhou  Guangdong  516003
+				CN
+
+EC-8E-AD   (hex)		DLX
+EC8EAD     (base 16)		DLX
+				#401, Seoil B/D,1359-45 Seocho2-dong
+				Seoul    137-863
+				KR
+
+34-C6-9A   (hex)		Enecsys Ltd
+34C69A     (base 16)		Enecsys Ltd
+				Harston Mill
+				Cambridge  Cambridgeshire  CB22 7GG
+				GB
+
+D8-AE-90   (hex)		Itibia Technologies
+D8AE90     (base 16)		Itibia Technologies
+				5 Clausen Ct
+				West Windsor  NJ  08550
+				US
+
+B8-65-3B   (hex)		Bolymin, Inc.
+B8653B     (base 16)		Bolymin, Inc.
+				13F-1, No.20, Ta-Long Rd., 
+				Taichung    40310
+				TW
+
+38-E8-DF   (hex)		b gmbh medien + datenbanken
+38E8DF     (base 16)		b gmbh medien + datenbanken
+				Kurfuerstenstrasse 22
+				Ludwigsburg  BW  71636
+				DE
+
+1C-12-9D   (hex)		IEEE PES PSRC/SUB     
+1C129D     (base 16)		IEEE PES PSRC/SUB     
+				 Working Group H7/Sub C7 (IEEE PC37.238)
+				Piscataway  NJ  08854
+				US
+
+E0-CA-4D   (hex)		Shenzhen Unistar Communication Co.,LTD
+E0CA4D     (base 16)		Shenzhen Unistar Communication Co.,LTD
+				9/F,Qinghai Building,7043, Berhuan Road, Futian District, 
+				Shenzhen  Guangdong  518034
+				CN
+
+0C-C9-C6   (hex)		Samwin Hong Kong Limited
+0CC9C6     (base 16)		Samwin Hong Kong Limited
+				Rm 901-902, 9/F, Futura Plaza,
+				Hong Kong    
+				CN
+
+10-62-C9   (hex)		Adatis GmbH & Co. KG
+1062C9     (base 16)		Adatis GmbH & Co. KG
+				Forchheimer Straße 6
+				Nürnberg  Bavaria  90425
+				DE
+
+60-B3-C4   (hex)		Elber Srl
+60B3C4     (base 16)		Elber Srl
+				via Pontevecchio 42 W
+				Carasco  Ge  16042
+				IT
+
+04-C8-80   (hex)		Samtec Inc
+04C880     (base 16)		Samtec Inc
+				520 Park East Blvd
+				New Albany  IN  47150
+				US
+
+F8-8D-EF   (hex)		Tenebraex
+F88DEF     (base 16)		Tenebraex
+				27 Drydock Avenue
+				Boston  MA  02210
+				US
+
+04-22-34   (hex)		Wireless Standard Extensions
+042234     (base 16)		Wireless Standard Extensions
+				1322 Crossman avenue
+				Sunnyvale  California  94089
+				US
+
+F0-B6-EB   (hex)		Poslab Technology Co., Ltd.
+F0B6EB     (base 16)		Poslab Technology Co., Ltd.
+				5F-1, No.490 Bannan Rd.
+				Jhonghe City    235
+				TW
+
+80-C8-62   (hex)		Openpeak, Inc
+80C862     (base 16)		Openpeak, Inc
+				1750 Clint Moore Rd
+				Boca Raton  Florida  33487
+				US
+
+1C-8F-8A   (hex)		Phase Motion Control SpA
+1C8F8A     (base 16)		Phase Motion Control SpA
+				via Adamoli, 461
+				Genova    IT16141
+				IT
+
+FC-CC-E4   (hex)		Ascon Ltd.
+FCCCE4     (base 16)		Ascon Ltd.
+				1-15-27 Minato-machi
+				Fukuyama –shi  Hiroshima-ken  721-0964
+				JP
+
+58-50-E6   (hex)		Best Buy Corporation
+5850E6     (base 16)		Best Buy Corporation
+				7601 Penn Ave South
+				Richfield  MN  55423
+				US
+
+3C-1C-BE   (hex)		JADAK LLC
+3C1CBE     (base 16)		JADAK LLC
+				7279 William Barry Blvd
+				North Syracuse  NY  13212
+				US
+
+BC-D5-B6   (hex)		d2d technologies
+BCD5B6     (base 16)		d2d technologies
+				10611 roundwood glen ct
+				Jacksonville  Fl  32256
+				US
+
+FC-68-3E   (hex)		Directed Perception, Inc
+FC683E     (base 16)		Directed Perception, Inc
+				890C Cowan Road
+				Burlingame  California  94010
+				US
+
+28-E7-94   (hex)		Microtime Computer Inc.
+28E794     (base 16)		Microtime Computer Inc.
+				4F, No. 222, Sec. 4, Cheng-Teh Rd., 
+				Taipei    11167
+				TW
+
+0C-D5-02   (hex)		Westell Technologies Inc.
+0CD502     (base 16)		Westell Technologies Inc.
+				750 N Commons Dr
+				Aurora  IL  60504
+				US
+
+70-82-8E   (hex)		OleumTech Corporation
+70828E     (base 16)		OleumTech Corporation
+				23 Hubble
+				Irvine  CA  92618
+				US
+
+A4-38-FC   (hex)		Plastic Logic
+A438FC     (base 16)		Plastic Logic
+				650 Castro St., Suite 500
+				Mountain View  CA  94041
+				US
+
+18-FC-9F   (hex)		Changhe Electronics Co., Ltd.
+18FC9F     (base 16)		Changhe Electronics Co., Ltd.
+				6th Floor, Building B, Dajiahao Square, YuÂ¡Â¯an 1st Road, BaoÂ¡Â¯an, 
+				Shenzhen  Guangdong  518101
+				CN
+
+94-59-2D   (hex)		EKE Building Technology Systems Ltd
+94592D     (base 16)		EKE Building Technology Systems Ltd
+				Piispanportti 7
+				Espoo  -  02240
+				US
+
+CC-69-B0   (hex)		Global Traffic Technologies, LLC
+CC69B0     (base 16)		Global Traffic Technologies, LLC
+				7800 Third Street North
+				St. Paul  Minnesota  55128
+				US
+
+A0-59-3A   (hex)		V.D.S. Video Display Systems srl
+A0593A     (base 16)		V.D.S. Video Display Systems srl
+				Via Del Pantano 71
+				SCANDICCI  FI  50018
+				IT
+
+CC-EA-1C   (hex)		DCONWORKS  Co., Ltd
+CCEA1C     (base 16)		DCONWORKS  Co., Ltd
+				182-13 Daerung Post Tower 2nd 5F
+				Seoul    152-847
+				KR
+
+7C-08-D9   (hex)		Shanghai B-Star Technology Co
+7C08D9     (base 16)		Shanghai B-Star Technology Co
+				1158 Xiehe Road
+				Shanghai    200335
+				CN
+
+20-59-A0   (hex)		Paragon Technologies Inc.
+2059A0     (base 16)		Paragon Technologies Inc.
+				68 North 4th Ring Rd West,
+				Beijing    100080
+				CN
+
+38-E9-8C   (hex)		Reco S.p.A.
+38E98C     (base 16)		Reco S.p.A.
+				via dell'Industria, 8
+				Montano Lucino  CO  22070
+				IT
+
+A0-BF-A5   (hex)		CORESYS
+A0BFA5     (base 16)		CORESYS
+				267-1 Nonhyundong Gangnamgu
+				Seoul    135-833
+				KR
+
+B0-5B-1F   (hex)		THERMO FISHER SCIENTIFIC S.P.A.
+B05B1F     (base 16)		THERMO FISHER SCIENTIFIC S.P.A.
+				STRADA RIVOLTANA KM 6/7
+				RODANO  MILAN  20090
+				IT
+
+24-D2-CC   (hex)		SmartDrive Systems Inc.
+24D2CC     (base 16)		SmartDrive Systems Inc.
+				9276 Scranton Road
+				San Diego  CA  92121
+				US
+
+0C-EF-7C   (hex)		AnaCom Inc
+0CEF7C     (base 16)		AnaCom Inc
+				1996 Lundy Ave
+				San Jose  CA  95131
+				US
+
+EC-E9-F8   (hex)		Guang Zhou TRI-SUN Electronics Technology  Co., Ltd
+ECE9F8     (base 16)		Guang Zhou TRI-SUN Electronics Technology  Co., Ltd
+				9th floor Guangzhou info port building B, Keyun Road, Tianhe District, Guangzhou ,PRC
+				Guangzhou  Guangdong  510665
+				CN
+
+34-CE-94   (hex)		Parsec (Pty) Ltd
+34CE94     (base 16)		Parsec (Pty) Ltd
+				Building 8-10 Manhattan Office Park
+				Centurion  Gauteng  0157
+				ZA
+
+34-EF-8B   (hex)		NTT Communications Corporation
+34EF8B     (base 16)		NTT Communications Corporation
+				NTT Hibiya Bldg. 7F
+				Chiyoda-ku  Tokyo  100-8019
+				JP
+
+68-7F-74   (hex)		Cisco-Linksys, LLC
+687F74     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+D0-D2-86   (hex)		Beckman Coulter K.K.
+D0D286     (base 16)		Beckman Coulter K.K.
+				454-32 Higashino,
+				Nagaizumi-cho, Sunto-gun,  Shizuoka-ken  411-0943
+				JP
+
+C4-19-8B   (hex)		Dominion Voting Systems Corporation
+C4198B     (base 16)		Dominion Voting Systems Corporation
+				215 Spadina Avenue
+				Toronto  Ontario  M5T 2C7
+				CA
+
+C8-3A-35   (hex)		Tenda Technology Co., Ltd.
+C83A35     (base 16)		Tenda Technology Co., Ltd.
+				Room 601-602,R/D Building Complex,Tsinghua High-Tech Park,nanshan district
+				Shenzhen  Guandong  518057
+				CN
+
+6C-8C-DB   (hex)		Otus Technologies Ltd
+6C8CDB     (base 16)		Otus Technologies Ltd
+				26 Braid Road
+				Edinburgh  Morningside  EH10 6AD
+				GB
+
+40-F5-2E   (hex)		Leica Microsystems (Schweiz) AG
+40F52E     (base 16)		Leica Microsystems (Schweiz) AG
+				Max Schmidheiny-Strasse 201
+				Heerbrugg  SG  9435
+				CH
+
+E4-FF-DD   (hex)		ELECTRON INDIA
+E4FFDD     (base 16)		ELECTRON INDIA
+				TYPE II, NO.9, DR. V.S.I. ESTATE
+				CHENNAI  TAMIL NADU  600 041
+				IN
+
+68-A1-B7   (hex)		Honghao Mingchuan Technology (Beijing) CO.,Ltd.
+68A1B7     (base 16)		Honghao Mingchuan Technology (Beijing) CO.,Ltd.
+				Floor 8,Tower A, Wanliu Yicheng Building
+				Beijing    100089
+				CN
+
+0C-D7-C2   (hex)		Axium Technologies, Inc.
+0CD7C2     (base 16)		Axium Technologies, Inc.
+				6625 N. Calle Eva Miranda
+				Irwindale  CA  91702
+				US
+
+E8-4E-CE   (hex)		Nintendo Co., Ltd.
+E84ECE     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+10-45-F8   (hex)		LNT-Automation GmbH
+1045F8     (base 16)		LNT-Automation GmbH
+				Hans-Paul-Kaysser-Straße 1
+				Leutenbach-Nellmersbach  BW  D-71397
+				DE
+
+DC-E7-1C   (hex)		AUG Elektronik GmbH
+DCE71C     (base 16)		AUG Elektronik GmbH
+				Kleinwoellmiss 53
+				St. Martin a. W.  Styria  A-8580
+				AT
+
+A8-70-A5   (hex)		UniComm Inc.
+A870A5     (base 16)		UniComm Inc.
+				7F-7, No. 716, Chung-Cheng Road,
+				Chung-Ho City  Taipei Hsien  23500
+				TW
+
+F8-47-2D   (hex)		X2gen Digital Corp. Ltd
+F8472D     (base 16)		X2gen Digital Corp. Ltd
+				# 89, Singlong Rd 
+				Pin-Jhen City,     324
+				TW
+
+08-18-4C   (hex)		A. S. Thomas, Inc.
+08184C     (base 16)		A. S. Thomas, Inc.
+				355 Providence Hwy
+				Westwood  MA  02090
+				US
+
+10-88-0F   (hex)		Daruma Telecomunicações e Informática S.A.
+10880F     (base 16)		Daruma Telecomunicações e Informática S.A.
+				AVENIDA INDEPENDENCIA, 3500, LOTEAMENTO INDUSTRIAL
+				Taubaté  São Paulo  12032-000
+				BR
+
+FC-61-98   (hex)		NEC Personal Products, Ltd
+FC6198     (base 16)		NEC Personal Products, Ltd
+				6-80, Shimohanazawa 2-chome,
+				Yonezawa-shi  Yamagata  992-8520
+				JP
+
+74-D8-50   (hex)		Evrisko Systems
+74D850     (base 16)		Evrisko Systems
+				2322 Alpine Rd, Ste 10
+				Eau Claire  WI  54703
+				US
+
+54-B6-20   (hex)		SUHDOL E&C Co.Ltd.
+54B620     (base 16)		SUHDOL E&C Co.Ltd.
+				920, Ilsan TechnoTown 1141-1, Baekseok-dong, Ilsandong-gu
+				Goyang-si  Gyunggi-do  410-722
+				KR
+
+78-C4-0E   (hex)		H&D Wireless
+78C40E     (base 16)		H&D Wireless
+				Sjövägen 17
+				Solna    169 55
+				SE
+
+2C-06-23   (hex)		Win Leader Inc.
+2C0623     (base 16)		Win Leader Inc.
+				Level 3 ,Alexander House,
+				Ebene    
+				MU
+
+0C-27-55   (hex)		Valuable Techologies Limited
+0C2755     (base 16)		Valuable Techologies Limited
+				602, Centre Point, J.B.Nagar,
+				Mumbai  Maharashtra  400059
+				IN
+
+78-99-8F   (hex)		MEDILINE ITALIA SRL
+78998F     (base 16)		MEDILINE ITALIA SRL
+				VIA 8 MARZO, 4
+				CORTE TEGGE  REGGIO NELL'EMILIA  42025
+				IT
+
+40-EC-F8   (hex)		Siemens AG
+40ECF8     (base 16)		Siemens AG
+				I IS MS EDM
+				Munich  Germany  85630
+				DE
+
+BC-B1-81   (hex)		SHARP CORPORATION
+BCB181     (base 16)		SHARP CORPORATION
+				22-22,Nagaike-cho,
+				Osaka,    545-8522,
+				JP
+
+C8-87-3B   (hex)		Net Optics
+C8873B     (base 16)		Net Optics
+				5303 Betsy Ross Drive
+				Santa Clara  CA  95054
+				US
+
+A8-CE-90   (hex)		CVC
+A8CE90     (base 16)		CVC
+				No.361,Renhua Rd.,
+				Dali City  Taichung  412
+				TW
+
+E4-1F-13   (hex)		IBM Corp
+E41F13     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+70-1A-ED   (hex)		ADVAS CO., LTD.
+701AED     (base 16)		ADVAS CO., LTD.
+				3-8-8 Shin-yokohama, Kohoku-ku
+				Yokohama-shi  Kanagawa-ken  222-0033
+				JP
+
+64-65-C0   (hex)		Nuvon, Inc
+6465C0     (base 16)		Nuvon, Inc
+				3130 Alpine Road
+				Portola Valley  California  94028
+				US
+
+7C-1E-B3   (hex)		2N TELEKOMUNIKACE a.s.
+7C1EB3     (base 16)		2N TELEKOMUNIKACE a.s.
+				Modranska 621
+				Prague    143 01
+				CZ
+
+44-56-B7   (hex)		Spawn Labs, Inc
+4456B7     (base 16)		Spawn Labs, Inc
+				2209 Granger Lane
+				Austin  TX  78613
+				US
+
+44-C9-A2   (hex)		Greenwald Industries
+44C9A2     (base 16)		Greenwald Industries
+				212 Middlesex Avenue
+				Chester  CT  06412
+				US
+
+90-6D-C8   (hex)		DLG Automação Industrial Ltda
+906DC8     (base 16)		DLG Automação Industrial Ltda
+				Rua José Batista Soares, 53
+				Sertãozinho  São Paulo  14176-119
+				BR
+
+58-4C-EE   (hex)		Digital One Technologies, Limited
+584CEE     (base 16)		Digital One Technologies, Limited
+				Room 2203, No.1 Shangdi Xinxi Road
+				Beijing    100085
+				CN
+
+00-27-21   (hex)		Shenzhen Baoan Fenda Industrial Co., Ltd
+002721     (base 16)		Shenzhen Baoan Fenda Industrial Co., Ltd
+				Fenda Hi-Tech Park
+				Baoan   Shenzhen  518108
+				CN
+
+A0-73-32   (hex)		Cashmaster International Limited
+A07332     (base 16)		Cashmaster International Limited
+				Fairykirk Road
+				Rosyth  Fife  KY11 2QQ
+				GB
+
+64-C6-AF   (hex)		AXERRA Networks Ltd
+64C6AF     (base 16)		AXERRA Networks Ltd
+				24  Raoul Wallenberg St. , 
+				Tel-Aviv    ISRAEL  69719
+				IL
+
+44-56-8D   (hex)		PNC Technologies  Co., Ltd.
+44568D     (base 16)		PNC Technologies  Co., Ltd.
+				Development Center
+				Anyang  Gyeonggi-Do  431-836
+				KR
+
+40-61-86   (hex)		MICRO-STAR INT'L CO.,LTD
+406186     (base 16)		MICRO-STAR INT'L CO.,LTD
+				No.69,Li-De St
+				Jung-Ho City  Taipei Hsien  235
+				TW
+
+00-26-F5   (hex)		XRPLUS Inc.
+0026F5     (base 16)		XRPLUS Inc.
+				#805 Ace Techno Tower 2nd 197-17
+				Seoul    152-766
+				KR
+
+00-26-F8   (hex)		Golden Highway Industry Development Co., Ltd.
+0026F8     (base 16)		Golden Highway Industry Development Co., Ltd.
+				Floor 7, Block 8, Vision Shenzhen Business Park, No.9 Gaoxin 9th South Road
+				Shenzhen City  Guangdong Province  518057
+				CN
+
+00-26-F4   (hex)		Nesslab
+0026F4     (base 16)		Nesslab
+				489-2 Maetan 3-dong, Yeong Tong-gu
+				Suwon-si  Gyeonggi-do  443-803
+				KR
+
+00-26-EE   (hex)		TKM GmbH
+0026EE     (base 16)		TKM GmbH
+				Schlossstraße 123
+				Mönchengladbach  NRW  41238
+				DE
+
+00-26-EF   (hex)		Technology Advancement Group, Inc.
+0026EF     (base 16)		Technology Advancement Group, Inc.
+				22355 Tag Way
+				Dulles  VA  20166-9310
+				US
+
+00-26-B2   (hex)		Setrix GmbH
+0026B2     (base 16)		Setrix GmbH
+				Josephspitalstr. 15
+				Muenchen  Bayern  80331
+				DE
+
+00-26-AF   (hex)		Duelco A/S
+0026AF     (base 16)		Duelco A/S
+				Mommarkvej 5
+				Soenderborg  Soenderjylland  DK6400
+				DK
+
+00-26-B3   (hex)		Thales Communications Inc
+0026B3     (base 16)		Thales Communications Inc
+				22605 Gateway Center Drive
+				Clarksburg  MD  20871
+				US
+
+00-26-A7   (hex)		CONNECT SRL
+0026A7     (base 16)		CONNECT SRL
+				Via Cernaia, 11
+				Milan    20121
+				IT
+
+00-26-A4   (hex)		Novus Produtos Eletronicos Ltda
+0026A4     (base 16)		Novus Produtos Eletronicos Ltda
+				Rua Alvaro Chaves, 155
+				Porto Alegre  RS  90220-040
+				BR
+
+00-26-D8   (hex)		Magic Point Inc.
+0026D8     (base 16)		Magic Point Inc.
+				Suite 203, Building 17, No. 295 Lin Nan Road, Pudong Software Park Sanlin World Expo Block
+				Shanghai    2000126
+				CN
+
+00-26-D6   (hex)		Ningbo Andy Optoelectronic Co., Ltd.
+0026D6     (base 16)		Ningbo Andy Optoelectronic Co., Ltd.
+				Lanjiang Street Industrial Zone
+				Yuyao  Zhejiang  315400
+				CN
+
+00-27-0F   (hex)		Envisionnovation Inc
+00270F     (base 16)		Envisionnovation Inc
+				4 Wareham Drive
+				Mississauga  Ontario  L5M 1B6
+				CA
+
+00-27-0A   (hex)		IEE S.A.
+00270A     (base 16)		IEE S.A.
+				ZAE Weiergewan
+				Contern    L-5326
+				LU
+
+00-27-09   (hex)		Nintendo Co., Ltd.
+002709     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-26-D3   (hex)		Zeno Information System
+0026D3     (base 16)		Zeno Information System
+				#1404 A-Dong Digital Empire Bldg, 980-3, Youngtong-dong, Youngtong-gu
+				Suwon City  Gyeonggi-Do  443-702
+				KR
+
+00-26-D1   (hex)		S Squared Innovations Inc.
+0026D1     (base 16)		S Squared Innovations Inc.
+				6807-104 Street
+				Edmonton  AB  T6H 2L5
+				CA
+
+00-26-CB   (hex)		Cisco Systems, Inc
+0026CB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-27-01   (hex)		INCOstartec GmbH
+002701     (base 16)		INCOstartec GmbH
+				Rheinstraße 17
+				Teltow  Germany  14513
+				DE
+
+00-26-FB   (hex)		AirDio Wireless, Inc.
+0026FB     (base 16)		AirDio Wireless, Inc.
+				13-5, No. 79, Sec. 1, Hsin Tai Wu Road
+				Hsichih City, Taipei County  Taiwan  22101
+				TW
+
+00-27-1A   (hex)		Geenovo Technology Ltd.
+00271A     (base 16)		Geenovo Technology Ltd.
+				Unit 402, 4/F., Tower I,SHUI QING MU HUA YUAN,
+				Beijing    100080
+				CN
+
+00-27-14   (hex)		Grainmustards, Co,ltd.
+002714     (base 16)		Grainmustards, Co,ltd.
+				HEIWA MK Bldg,2-48-4,Nihonbashi-Hama-cho
+				Tokyo    103-0007
+				JP
+
+00-27-15   (hex)		Rebound Telecom. Co., Ltd
+002715     (base 16)		Rebound Telecom. Co., Ltd
+				12F,Building No.82,No.1198,North Qinzhou Rd,
+				Shanghai    200233
+				CN
+
+00-26-E6   (hex)		Visionhitech Co., Ltd.
+0026E6     (base 16)		Visionhitech Co., Ltd.
+				Vision bldg. 150-3
+				Buchon  Kyunggi-Do  420-822
+				KR
+
+00-26-DF   (hex)		TaiDoc Technology Corp.
+0026DF     (base 16)		TaiDoc Technology Corp.
+				7F, No. 127, Wugong 2nd Rd., 24888 Wugu Township
+				Taipei County  Taiwan  24888
+				TW
+
+00-26-6A   (hex)		ESSENSIUM NV
+00266A     (base 16)		ESSENSIUM NV
+				Gaston Geenslaan 9
+				LEUVEN  VL BRABANT  3001
+				BE
+
+00-26-6B   (hex)		SHINE UNION ENTERPRISE LIMITED
+00266B     (base 16)		SHINE UNION ENTERPRISE LIMITED
+				UNIT 1211, 12FL., CHEVALIER COMMERCIAL CENTER,
+				KOWLOON    NIL
+				HK
+
+00-26-67   (hex)		CARECOM CO.,LTD.
+002667     (base 16)		CARECOM CO.,LTD.
+				3-35-4
+				Chofu  Tokyo  182-0025
+				JP
+
+00-26-A2   (hex)		Instrumentation Technology Systems
+0026A2     (base 16)		Instrumentation Technology Systems
+				19360 Business Center Drive
+				Northridge  CA  91324
+				US
+
+00-26-9F   (hex)		Private
+00269F     (base 16)		Private
+
+00-26-99   (hex)		Cisco Systems, Inc
+002699     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-26-47   (hex)		WFE TECHNOLOGY CORP.
+002647     (base 16)		WFE TECHNOLOGY CORP.
+				17F NO.238,Chin-Hua N Rd,
+				Taichung    404
+				TW
+
+00-26-40   (hex)		Baustem Broadband Technologies, Ltd.
+002640     (base 16)		Baustem Broadband Technologies, Ltd.
+				910 Quantum Plaza
+				Beijing    100191
+				CN
+
+00-26-53   (hex)		DaySequerra Corporation
+002653     (base 16)		DaySequerra Corporation
+				154 Cooper Road
+				West Berlin  NJ  08091
+				US
+
+00-26-7B   (hex)		GSI Helmholtzzentrum für Schwerionenforschung GmbH
+00267B     (base 16)		GSI Helmholtzzentrum für Schwerionenforschung GmbH
+				Planckstraße 1
+				Darmstadt  Hessen  64291
+				DE
+
+00-26-87   (hex)		corega K.K
+002687     (base 16)		corega K.K
+				1-19-20, Shinyokohama
+				Yokohama-city  Kanagawa-ken  222-0033
+				JP
+
+00-26-8D   (hex)		CellTel S.p.A.
+00268D     (base 16)		CellTel S.p.A.
+				Via Romano 72
+				Scarmagno  Torino  10010
+				IT
+
+00-26-28   (hex)		companytec automação e controle ltda.
+002628     (base 16)		companytec automação e controle ltda.
+				Rua Marcilio Dias 3005
+				Pelotas  Rio Grande do Sul  96020-480
+				BR
+
+00-26-1F   (hex)		SAE Magnetics (H.K.) Ltd.
+00261F     (base 16)		SAE Magnetics (H.K.) Ltd.
+				SAE Technology Centre
+				Hong Kong Science Park  Shatin, New Territories  
+				HK
+
+00-26-1E   (hex)		QINGBANG ELEC(SZ) CO., LTD
+00261E     (base 16)		QINGBANG ELEC(SZ) CO., LTD
+				No. 2, qimin Rd. North District, High-tech Industrial Park, Nanshan,
+				Shenzhen  Guangdong  518000
+				CN
+
+00-26-19   (hex)		FRC
+002619     (base 16)		FRC
+				1511 South Benjamin Avenue
+				Mason City  IA  50401
+				US
+
+00-25-EA   (hex)		Iphion BV
+0025EA     (base 16)		Iphion BV
+				Willemstraat 106
+				Eindhoven    5616GE
+				NL
+
+00-25-F0   (hex)		Suga Electronics Limited
+0025F0     (base 16)		Suga Electronics Limited
+				Units 1904-1907, Chevalier Commercial Centre,
+				Kowloon Bay  Hong Kong  
+				CN
+
+00-25-E8   (hex)		Idaho Technology
+0025E8     (base 16)		Idaho Technology
+				390 Wakara way
+				Salt Lake city  UT  84108
+				US
+
+00-25-E4   (hex)		OMNI-WiFi, LLC
+0025E4     (base 16)		OMNI-WiFi, LLC
+				70 Sullivan Street
+				Berwick  Maine  03901
+				US
+
+00-25-FC   (hex)		ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.
+0025FC     (base 16)		ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.
+				Y. Dudullu Barbaros C. Kutup S. No. 20
+				Istanbul    34775
+				TR
+
+00-25-FA   (hex)		J&M Analytik AG
+0025FA     (base 16)		J&M Analytik AG
+				Willy-Messerschmitt-Strasse 8
+				Essingen  BW  73457
+				DE
+
+00-26-33   (hex)		MIR - Medical International Research
+002633     (base 16)		MIR - Medical International Research
+				Via del Maggiolino 125
+				Rome  RM  00155
+				IT
+
+00-25-D7   (hex)		CEDO
+0025D7     (base 16)		CEDO
+				Videnska 127
+				BRNO    61900
+				CZ
+
+00-25-D8   (hex)		KOREA MAINTENANCE
+0025D8     (base 16)		KOREA MAINTENANCE
+				3F HAELIM BUIDING 103-7, GURO-5DONG
+				SEOUL    152-842
+				KR
+
+00-25-D2   (hex)		InpegVision Co., Ltd
+0025D2     (base 16)		InpegVision Co., Ltd
+				226-3, Bugok-dong, Geumjeong-gu,
+				Busan    609-320
+				KR
+
+00-26-30   (hex)		ACOREL S.A.S
+002630     (base 16)		ACOREL S.A.S
+				3, Rue Paul LANGEVIN
+				SAINT-PERAY    F-07130
+				FR
+
+00-26-2A   (hex)		Proxense, LLC
+00262A     (base 16)		Proxense, LLC
+				689 NW Stonepine Dr
+				Bend  Oregon  97701
+				US
+
+00-25-FE   (hex)		Pilot Electronics Corporation
+0025FE     (base 16)		Pilot Electronics Corporation
+				No. 2, Tzu-Chiang 3rd Road, Chung-Li Industrial Zone,
+				Taoyuan   Hsien  32063
+				TW
+
+00-25-7B   (hex)		STJ  ELECTRONICS  PVT  LTD
+00257B     (base 16)		STJ  ELECTRONICS  PVT  LTD
+				X-24 OKHLA  INDUSTRIAL  AREA
+				NEW  DELHI  DELHI  110 020
+				IN
+
+00-25-7C   (hex)		Huachentel Technology Development Co., Ltd
+00257C     (base 16)		Huachentel Technology Development Co., Ltd
+				747 XinYu Rd. High-Tech Zone
+				Jinan  Shandong Province  250101
+				CN
+
+00-25-75   (hex)		FiberPlex Technologies, LLC
+002575     (base 16)		FiberPlex Technologies, LLC
+				10840-412 Guilford Rd
+				Annapolis Junction  MD  20701
+				US
+
+00-25-70   (hex)		Eastern Communications Company Limited
+002570     (base 16)		Eastern Communications Company Limited
+				No.398 Wensan Road,
+				Hangzhou  Zhejiang  310013
+				CN
+
+00-25-9B   (hex)		Beijing PKUNITY Microsystems Technology Co., Ltd
+00259B     (base 16)		Beijing PKUNITY Microsystems Technology Co., Ltd
+				11th Floor, Resource Plaza, No.151 North Zhongguancun Street
+				Beijing    100080
+				CN
+
+00-25-96   (hex)		GIGAVISION srl
+002596     (base 16)		GIGAVISION srl
+				Via Figini, 16
+				Muggiò  Milano  20053
+				IT
+
+00-25-95   (hex)		Northwest Signal Supply, Inc
+002595     (base 16)		Northwest Signal Supply, Inc
+				12965 SW Herman Rd
+				Tualatin  OR  97062
+				US
+
+00-25-C9   (hex)		SHENZHEN HUAPU DIGITAL CO., LTD
+0025C9     (base 16)		SHENZHEN HUAPU DIGITAL CO., LTD
+				Futian District,Chegongmiao,TianAn Cyberpark
+				ShenZhen  Guangdong Province  518040
+				CN
+
+00-25-8F   (hex)		Trident Microsystems, Inc.
+00258F     (base 16)		Trident Microsystems, Inc.
+				3408 Garrett Drive
+				Santa Clara  CA  95054
+				US
+
+00-25-89   (hex)		Hills Industries Limited
+002589     (base 16)		Hills Industries Limited
+				5 Cambria Road
+				Melbourne  VIC  3173
+				AU
+
+00-25-85   (hex)		KOKUYO S&T Co., Ltd.
+002585     (base 16)		KOKUYO S&T Co., Ltd.
+				1-8-35
+				Minato-ku  Tokyo  108-8710
+				JP
+
+00-25-81   (hex)		x-star networks Inc.
+002581     (base 16)		x-star networks Inc.
+				1F,NO1-2,Chungching S.Rd.Sec 3
+				Taipei    10076
+				TW
+
+00-25-B5   (hex)		Cisco Systems, Inc
+0025B5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-25-BE   (hex)		Tektrap Systems Inc.
+0025BE     (base 16)		Tektrap Systems Inc.
+				15 Buteau St.
+				Gatineau  Quebec  J8Z 1V4
+				CA
+
+00-25-A0   (hex)		Nintendo Co., Ltd.
+0025A0     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-25-4D   (hex)		Singapore Technologies Electronics Limited
+00254D     (base 16)		Singapore Technologies Electronics Limited
+				24 Ang Mo Kio
+				    569061
+				SG
+
+00-25-4C   (hex)		Videon Central, Inc.
+00254C     (base 16)		Videon Central, Inc.
+				2171 Sandy Drive
+				State College  PA  16803
+				US
+
+00-25-43   (hex)		MONEYTECH
+002543     (base 16)		MONEYTECH
+				Rua Guiratinga 931 un. 103
+				São Paulo  SP  04141-001
+				BR
+
+00-25-5B   (hex)		CoachComm, LLC
+00255B     (base 16)		CoachComm, LLC
+				205 Technology Parkway
+				Auburn  AL  36830
+				US
+
+00-25-16   (hex)		Integrated Design Tools, Inc.
+002516     (base 16)		Integrated Design Tools, Inc.
+				1202 E Park Avenue
+				Tallahassee  FL  32301
+				US
+
+00-25-10   (hex)		Pico-Tesla Magnetic Therapies
+002510     (base 16)		Pico-Tesla Magnetic Therapies
+				7852 South Elati
+				Littleton  CO  80120
+				US
+
+00-25-6A   (hex)		inIT - Institut Industrial IT
+00256A     (base 16)		inIT - Institut Industrial IT
+				Liebigstrasse 87
+				Lemgo  Northrhine-Westfalia  32657
+				DE
+
+00-25-62   (hex)		interbro Co. Ltd.
+002562     (base 16)		interbro Co. Ltd.
+				6F Joyang B/D, 113 Samseong-Dong, Gangnam-Gu
+				Seoul    135-090
+				KR
+
+00-25-20   (hex)		SMA Railway Technology GmbH
+002520     (base 16)		SMA Railway Technology GmbH
+				Miramstraße 87
+				Kassel  Hesse  34123
+				DE
+
+00-25-27   (hex)		Bitrode Corp.
+002527     (base 16)		Bitrode Corp.
+				9787 Green Park Industrial Drive
+				St. Louis  MO  63123
+				US
+
+00-25-25   (hex)		CTERA Networks Ltd.
+002525     (base 16)		CTERA Networks Ltd.
+				24 Imber St.
+				Petach-Tikva    495111
+				IL
+
+00-25-51   (hex)		SE-Elektronic GmbH
+002551     (base 16)		SE-Elektronic GmbH
+				Eythstraße 16
+				Göppingen    73037
+				DE
+
+00-25-3A   (hex)		CEVA, Ltd.
+00253A     (base 16)		CEVA, Ltd.
+				2 Maskit Street.
+				Herzelia    46120
+				IL
+
+00-24-A2   (hex)		Hong Kong Middleware Technology Limited
+0024A2     (base 16)		Hong Kong Middleware Technology Limited
+				Room 1315 ,Leighton Centre,77 Leighton Road
+				Causeway Bay    852
+				HK
+
+00-24-B9   (hex)		Wuhan Higheasy Electronic Technology Development Co.Ltd
+0024B9     (base 16)		Wuhan Higheasy Electronic Technology Development Co.Ltd
+				Bldg A2 Optics Valley Software Park,Guanshan 1st Rd,
+				Wuhan  Hubei  430033
+				CN
+
+00-24-BD   (hex)		Hainzl Industriesysteme GmbH
+0024BD     (base 16)		Hainzl Industriesysteme GmbH
+				Industriezeile 56
+				Linz  Upper Austria  4021
+				AT
+
+00-24-B6   (hex)		Seagate Technology
+0024B6     (base 16)		Seagate Technology
+				1280 Disc Drive
+				Shakopee  MN  55379
+				US
+
+00-24-F7   (hex)		Cisco Systems, Inc
+0024F7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-E5   (hex)		Seer Technology, Inc
+0024E5     (base 16)		Seer Technology, Inc
+				2681 Parleys Way
+				Salt Lake City  Utah  84109
+				US
+
+00-24-E2   (hex)		HASEGAWA ELECTRIC CO.,LTD.
+0024E2     (base 16)		HASEGAWA ELECTRIC CO.,LTD.
+				5-6-20 SHIOE
+				AMAGASAKI  HYOGO  661-0976
+				JP
+
+00-24-E0   (hex)		DS Tech, LLC
+0024E0     (base 16)		DS Tech, LLC
+				2210 Hutton Drive
+				Carrollton  TX  75006
+				US
+
+00-24-F3   (hex)		Nintendo Co., Ltd.
+0024F3     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-25-01   (hex)		JSC Supertel
+002501     (base 16)		JSC Supertel
+				38A Petrogradskaya emb.
+				St.Petersburg    197101
+				RU
+
+00-24-C8   (hex)		Broadband Solutions Group
+0024C8     (base 16)		Broadband Solutions Group
+				1101 Marina Village Parkway
+				Alameda  CA  94501
+				US
+
+00-24-C5   (hex)		Meridian Audio Limited
+0024C5     (base 16)		Meridian Audio Limited
+				11 Latham Road
+				Huntingdon  Cambs  PE29 6YE
+				GB
+
+00-24-96   (hex)		Ginzinger electronic systems
+002496     (base 16)		Ginzinger electronic systems
+				Gewerbegebiet Pirath 16
+				Weng  Upper Austria  4952
+				AT
+
+00-24-99   (hex)		Aquila Technologies
+002499     (base 16)		Aquila Technologies
+				8429A Washington Place NE
+				Albuquerque  NM  87113
+				US
+
+00-24-8A   (hex)		Kaga Electronics Co., Ltd.
+00248A     (base 16)		Kaga Electronics Co., Ltd.
+				Hongo 2-2-9
+				  Tokyo  113-8503
+				JP
+
+00-24-35   (hex)		WIDE CORPORATION
+002435     (base 16)		WIDE CORPORATION
+				LEADERS TOWER 7TH FL., GOMAE-DONG, GIHEUNG-GU
+				YONGIN  GYEONGGI  446-901
+				KR
+
+00-24-31   (hex)		Uni-v co.,ltd
+002431     (base 16)		Uni-v co.,ltd
+				5/F,COFCO Property Tower,
+				Shenzhen  Guangdong  518126
+				CN
+
+00-24-32   (hex)		Neostar Technology Co.,LTD
+002432     (base 16)		Neostar Technology Co.,LTD
+				8F., No.102, Sec. 1, Sintai 5th Rd.
+				Sijhih City  Taipei  22161
+				TW
+
+00-24-43   (hex)		Nortel Networks
+002443     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75081
+				US
+
+00-24-41   (hex)		Wanzl Metallwarenfabrik GmbH
+002441     (base 16)		Wanzl Metallwarenfabrik GmbH
+				Bubesheimer Straße 4
+				Leipheim  Bavaria  89340
+				DE
+
+00-24-3B   (hex)		CSSI (S) Pte Ltd
+00243B     (base 16)		CSSI (S) Pte Ltd
+				70 Bendemeer Road Unit 04-04
+				    339940
+				SG
+
+00-24-51   (hex)		Cisco Systems, Inc
+002451     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-4A   (hex)		Voyant International
+00244A     (base 16)		Voyant International
+				444 Castro St
+				Mountain View  CA  94041
+				US
+
+00-24-47   (hex)		Kaztek Systems
+002447     (base 16)		Kaztek Systems
+				17 Bromfield Road
+				Acton  MA  01720
+				US
+
+00-24-77   (hex)		Tibbo Technology
+002477     (base 16)		Tibbo Technology
+				9F-3, No 31, Lane 169, Kang-Ning St.,
+				Hsi-Chih  Taipei Hsien  221
+				TW
+
+00-24-6E   (hex)		Phihong USA Corp.
+00246E     (base 16)		Phihong USA Corp.
+				47800 Fremont Blvd.
+				Fremont  CA  94538
+				US
+
+00-24-5D   (hex)		Terberg besturingstechniek B.V.
+00245D     (base 16)		Terberg besturingstechniek B.V.
+				Lage Dijk-Noord 3
+				IJsselstein  Utrecht  3401 VA
+				NL
+
+00-24-50   (hex)		Cisco Systems, Inc
+002450     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-58   (hex)		PA Bastion CC
+002458     (base 16)		PA Bastion CC
+				97, liter K, Buddyonnovsky ave.
+				Rostov-on-Don    344011
+				RU
+
+00-24-73   (hex)		3COM EUROPE LTD
+002473     (base 16)		3COM EUROPE LTD
+				Peoplebuilding 2
+				Hemel Hempstead  HERTS.  HP2 4NW
+				GB
+
+00-24-6B   (hex)		Covia, Inc.
+00246B     (base 16)		Covia, Inc.
+				Benex S-3 Bldg., 3-20-8, Shinyokohama,Kohoku-ku,
+				Yokohama-city  Kanagawa-pref.  222-0033
+				JP
+
+00-23-F5   (hex)		WILO SE
+0023F5     (base 16)		WILO SE
+				Nortkirchenstraße 100
+				D - 44263 Dortmund  NRW  44263
+				DE
+
+00-23-FF   (hex)		Beijing HTTC Technology Ltd.
+0023FF     (base 16)		Beijing HTTC Technology Ltd.
+				B-13D-3 Keshi Building,Jia No.28 Xinxi Road,SHANGDI IT Industry Base
+				Beijing    100085
+				CN
+
+00-23-F6   (hex)		Softwell Technology Co., Ltd.
+0023F6     (base 16)		Softwell Technology Co., Ltd.
+				4F, No. 419, Jhonghe Rd., Yonghe City,
+				Taipei County    234
+				TW
+
+00-23-F3   (hex)		Glocom, Inc.
+0023F3     (base 16)		Glocom, Inc.
+				22 Firstfield Road
+				Gaithersburg  Maryland  20878
+				US
+
+00-23-F0   (hex)		Shanghai Jinghan Weighing Apparatus Co. Ltd.
+0023F0     (base 16)		Shanghai Jinghan Weighing Apparatus Co. Ltd.
+				Building 58, No.99 Chunguang Road, Xinzhuang Industrial Zone,Minhang,
+				Shanghai    201108
+				CN
+
+00-24-10   (hex)		NUETEQ Technology,Inc.
+002410     (base 16)		NUETEQ Technology,Inc.
+				11F, No. 112, Sec. 1, Zhong-Xiao E Rd.
+				Taipei    100
+				TW
+
+00-24-08   (hex)		Pacific Biosciences
+002408     (base 16)		Pacific Biosciences
+				1505 Adams Drive
+				Menlo Park  CA  94025
+				US
+
+00-24-30   (hex)		Ruby Tech Corp.
+002430     (base 16)		Ruby Tech Corp.
+				3F, NO. 1, Lane 50, Nan Kang Road, Sec. 3,
+				Taipei    11510
+				TW
+
+00-24-2E   (hex)		Datastrip Inc.
+00242E     (base 16)		Datastrip Inc.
+				1 Waterview Drive
+				Shelton  CT  06484
+				US
+
+00-24-1D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+00241D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				
+				Pin-Jen  Taoyuan  324
+				TW
+
+00-24-1A   (hex)		Red Beetle Inc.
+00241A     (base 16)		Red Beetle Inc.
+				898 Silas Deane Highway
+				Wethersfield  CT  06109
+				US
+
+00-24-14   (hex)		Cisco Systems, Inc
+002414     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-0C   (hex)		DELEC GmbH
+00240C     (base 16)		DELEC GmbH
+				Ruheweg 17-21
+				Göllheim  Rheinland-Pfalz  67307
+				DE
+
+00-23-F9   (hex)		Double-Take Software, INC.
+0023F9     (base 16)		Double-Take Software, INC.
+				8470 Allison Pointe Blvd
+				Indianapolis  IN  46250
+				US
+
+00-23-E9   (hex)		F5 Networks, Inc.
+0023E9     (base 16)		F5 Networks, Inc.
+				401 Elliott Ave. W.
+				Seattle  WA  98119
+				US
+
+00-23-EA   (hex)		Cisco Systems, Inc
+0023EA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-23-E5   (hex)		IPaXiom Networks
+0023E5     (base 16)		IPaXiom Networks
+				Aston Court
+				High Wycombe  Buckinghamshire  HP11 1LA
+				GB
+
+00-23-B6   (hex)		SECURITE COMMUNICATIONS / HONEYWELL
+0023B6     (base 16)		SECURITE COMMUNICATIONS / HONEYWELL
+				FONT DE L'ORME
+				MOUGINS  FRANCE  06250
+				US
+
+00-23-B8   (hex)		Sichuan Jiuzhou Electronic Technology Co.,Ltd
+0023B8     (base 16)		Sichuan Jiuzhou Electronic Technology Co.,Ltd
+				No.259 Jiuzhou Road,
+				Mianyang  Sichuan  621000
+				CN
+
+00-23-BA   (hex)		Chroma
+0023BA     (base 16)		Chroma
+				68, Hwa-Ya 1st Rd., Hwa-Ya Technical Park,
+				Taoyuan Hsien  Taiwan  333
+				TW
+
+00-23-BC   (hex)		EQ-SYS GmbH
+0023BC     (base 16)		EQ-SYS GmbH
+				Hinter den Gärten 15b
+				Treuenbrietzen OT Feldheim  Brandenburg  14929
+				DE
+
+00-23-B1   (hex)		Longcheer Technology (Singapore) Pte Ltd
+0023B1     (base 16)		Longcheer Technology (Singapore) Pte Ltd
+				43 Kaki Bukit View,  #04-01  ,
+				    415970
+				SG
+
+00-23-96   (hex)		ANDES TECHNOLOGY CORPORATION
+002396     (base 16)		ANDES TECHNOLOGY CORPORATION
+				2F,No. 1, Li-Hsin First Road,
+				Hsin-Chu  Taiwan  300
+				TW
+
+00-23-94   (hex)		Samjeon
+002394     (base 16)		Samjeon
+				#1313-1 Joil-Ri, Samdong-Myeun,Ulju-Gun
+				Ulsan City  South Korea  689-934
+				KR
+
+00-23-77   (hex)		Isotek Electronics Ltd
+002377     (base 16)		Isotek Electronics Ltd
+				9 Clayton Wood Bank
+				Leeds    LS16 6QZ
+				GB
+
+00-23-71   (hex)		SOAM Systel
+002371     (base 16)		SOAM Systel
+				182-13, Daerung Post Tower II, 1504
+				Seoul  Guro-dong, Guro-gu  152-847
+				KR
+
+00-23-A1   (hex)		Trend Electronics Ltd
+0023A1     (base 16)		Trend Electronics Ltd
+				Gut No. 350
+				Auranagabad  Maharashtra  431210
+				IN
+
+00-23-A6   (hex)		E-Mon
+0023A6     (base 16)		E-Mon
+				One Oxford Valley, Suite 418
+				Langhorne  PA  19047
+				US
+
+00-23-A8   (hex)		Marshall Electronics
+0023A8     (base 16)		Marshall Electronics
+				20608 Madrona Ave
+				Torrance  CA  90503
+				US
+
+00-23-9A   (hex)		EasyData Hardware GmbH
+00239A     (base 16)		EasyData Hardware GmbH
+				Breslauer Str. 24
+				Wehrheim  Hessen  D-61273
+				DE
+
+00-23-CC   (hex)		Nintendo Co., Ltd.
+0023CC     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-23-79   (hex)		Union Business Machines Co. Ltd.
+002379     (base 16)		Union Business Machines Co. Ltd.
+				Unit 2, 2/F, Block A, Hong Kong Industrial Centre,
+				Lai Chi Kok  Kowloon  
+				HK
+
+00-23-8C   (hex)		Private
+00238C     (base 16)		Private
+
+00-23-C0   (hex)		Broadway Networks
+0023C0     (base 16)		Broadway Networks
+				1754 Technology Drive, Suite 208
+				San Jose  California  95110
+				US
+
+00-23-58   (hex)		SYSTEL SA
+002358     (base 16)		SYSTEL SA
+				ZI DE BELLE AIRE
+				AYTRE    17440
+				FR
+
+00-23-56   (hex)		Packet Forensics LLC
+002356     (base 16)		Packet Forensics LLC
+				420 S Smith Rd
+				Tempe  AZ  85281
+				US
+
+00-23-50   (hex)		RDC, Inc. dba LynTec
+002350     (base 16)		RDC, Inc. dba LynTec
+				8385 Melrose Drive
+				Lenexa  KS  66214
+				US
+
+00-23-4F   (hex)		Luminous Power Technologies Pvt. Ltd.
+00234F     (base 16)		Luminous Power Technologies Pvt. Ltd.
+				C8-C9, Community Center,
+				New Delhi    110058
+				IN
+
+00-23-4B   (hex)		Inyuan Technology Inc.
+00234B     (base 16)		Inyuan Technology Inc.
+				No. 3, Singye St.,
+				Taoyuan County    33341
+				TW
+
+00-23-49   (hex)		Helmholtz Centre Berlin for Material and Energy
+002349     (base 16)		Helmholtz Centre Berlin for Material and Energy
+				Department FMD
+				Berlin    14109
+				DE
+
+00-23-46   (hex)		Vestac
+002346     (base 16)		Vestac
+				P.O. Box 7358
+				Shrewsbury  NJ  07702
+				US
+
+00-23-07   (hex)		FUTURE INNOVATION TECH CO.,LTD
+002307     (base 16)		FUTURE INNOVATION TECH CO.,LTD
+				312 3-DONG, GWANGMYUNG INDUSTRIAL COMPLEX 201
+				GWANGMYUNG  GYUNGGI  423060
+				KR
+
+00-23-05   (hex)		Cisco Systems, Inc
+002305     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-22-FF   (hex)		NIVIS LLC
+0022FF     (base 16)		NIVIS LLC
+				1000 CIRCLE 75
+				ATLANTA  GA  30339
+				US
+
+00-23-44   (hex)		Objective Interface Systems, Inc.
+002344     (base 16)		Objective Interface Systems, Inc.
+				220 Spring Street, Suite 530
+				Herndon  VA  20170-6201
+				US
+
+00-23-3C   (hex)		Alflex
+00233C     (base 16)		Alflex
+				Blauw-roodlaan 300
+				ZOETERMEER    2718 SK
+				NL
+
+00-23-33   (hex)		Cisco Systems, Inc
+002333     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-23-2E   (hex)		Kedah Electronics Engineering, LLC
+00232E     (base 16)		Kedah Electronics Engineering, LLC
+				Zelenograd, 445
+				Moscow    124498
+				RU
+
+00-23-20   (hex)		Nicira Networks
+002320     (base 16)		Nicira Networks
+				3460 W. Bayshore Rd.
+				Palo Alto  CA  94303
+				US
+
+00-23-64   (hex)		Power Instruments Pte Ltd
+002364     (base 16)		Power Instruments Pte Ltd
+				BLK 40 TOH GUAN RD EAST, #01-62 ENTERPRISE HUB
+				    608582
+				SG
+
+00-23-17   (hex)		Lasercraft Inc
+002317     (base 16)		Lasercraft Inc
+				1450 Oakbrook Drive
+				Norcross  GA  30093
+				US
+
+00-23-0E   (hex)		Gorba AG
+00230E     (base 16)		Gorba AG
+				Sandackerstrasse
+				Oberbüren  SG  CH - 9245
+				CH
+
+00-23-62   (hex)		Goldline Controls
+002362     (base 16)		Goldline Controls
+				61 Whitecap Dr
+				North Kingstown  RI  02852
+				US
+
+00-23-5E   (hex)		Cisco Systems, Inc
+00235E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-23-22   (hex)		KISS Teknical Solutions, Inc.
+002322     (base 16)		KISS Teknical Solutions, Inc.
+				1583 S. Navajo Way
+				Chandler  Arizona  85286
+				US
+
+00-22-B6   (hex)		Superflow Technologies Group
+0022B6     (base 16)		Superflow Technologies Group
+				4060 Dixon Street
+				Des Moines  IA  50266
+				US
+
+00-22-B5   (hex)		NOVITA
+0022B5     (base 16)		NOVITA
+				3F301,Namsung B/D 340-30
+				Geumcheon-Gu  Seoul  153-782
+				KR
+
+00-22-B2   (hex)		4RF Communications Ltd
+0022B2     (base 16)		4RF Communications Ltd
+				26 Glover Street
+				Ngauranga  Wellington  6031
+				NZ
+
+00-22-AC   (hex)		Hangzhou Siyuan Tech. Co., Ltd
+0022AC     (base 16)		Hangzhou Siyuan Tech. Co., Ltd
+				5 F, Tower B, No. 37, Xiang Yuan Road
+				Hangzhou  Zhejiang  310012
+				CN
+
+00-22-AD   (hex)		TELESIS TECHNOLOGIES, INC.
+0022AD     (base 16)		TELESIS TECHNOLOGIES, INC.
+				28181 River Drive
+				Circleville  Ohio  43113
+				US
+
+00-22-AE   (hex)		Mattel Inc.
+0022AE     (base 16)		Mattel Inc.
+				333 Continental Blvd.
+				El Segundo  CA  90245
+				US
+
+00-22-D5   (hex)		Eaton Corp. Electrical Group Data Center Solutions - Pulizzi
+0022D5     (base 16)		Eaton Corp. Electrical Group Data Center Solutions - Pulizzi
+				3200 S. Susan St.
+				Santa Ana  CA  92704
+				US
+
+00-22-D1   (hex)		Albrecht Jung GmbH & Co. KG
+0022D1     (base 16)		Albrecht Jung GmbH & Co. KG
+				Volmestraße 1
+				Schalksmühle  NRW  58579
+				DE
+
+00-22-D2   (hex)		All Earth Comércio de Eletrônicos LTDA.
+0022D2     (base 16)		All Earth Comércio de Eletrônicos LTDA.
+				Rua Leonida Reimman Trotti, 343
+				Campinas  São Paulo  13065-704
+				BR
+
+00-22-C2   (hex)		Proview Eletrônica do Brasil LTDA
+0022C2     (base 16)		Proview Eletrônica do Brasil LTDA
+				R. Acará 203 - Distrito Industrial
+				Manaus  Amazonas  69075-030
+				BR
+
+00-22-BD   (hex)		Cisco Systems, Inc
+0022BD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-22-BA   (hex)		HUTH Elektronik Systeme GmbH
+0022BA     (base 16)		HUTH Elektronik Systeme GmbH
+				Echternacher Str. 10
+				Troisdorf-Spich  NRW  53842
+				DE
+
+00-22-BB   (hex)		beyerdynamic GmbH & Co. KG
+0022BB     (base 16)		beyerdynamic GmbH & Co. KG
+				Theresienstraße 8
+				Heilbronn    74072
+				DE
+
+00-22-A3   (hex)		California Eastern Laboratories
+0022A3     (base 16)		California Eastern Laboratories
+				4590 Patrick Henry Dr.
+				Santa Clara  CA  95054
+				US
+
+00-23-02   (hex)		Cobalt Digital, Inc.
+002302     (base 16)		Cobalt Digital, Inc.
+				2406 East University Avenue
+				Urbana  IL  61802
+				US
+
+00-22-F5   (hex)		Advanced Realtime Tracking GmbH
+0022F5     (base 16)		Advanced Realtime Tracking GmbH
+				Am Oeferl 6
+				Weilheim  Bayern  D-82362
+				DE
+
+00-22-CA   (hex)		Anviz Biometric Tech. Co., Ltd.
+0022CA     (base 16)		Anviz Biometric Tech. Co., Ltd.
+				5th Floor, 4299 Jindu Road,
+				Shanghai    201108
+				CN
+
+00-22-C7   (hex)		SEGGER Microcontroller GmbH & Co. KG
+0022C7     (base 16)		SEGGER Microcontroller GmbH & Co. KG
+				In den Weiden 11
+				Hilden  NRW  40721
+				DE
+
+00-22-C1   (hex)		Active Storage Inc.
+0022C1     (base 16)		Active Storage Inc.
+				2295 Jefferson Street
+				Torrance  CA  90501
+				US
+
+00-22-8F   (hex)		CNRS
+00228F     (base 16)		CNRS
+				MRCT
+				Meudon  Ile de France  92195
+				FR
+
+00-22-97   (hex)		XMOS Semiconductor
+002297     (base 16)		XMOS Semiconductor
+				Venturers House
+				Bristol    BS1 4PB
+				GB
+
+00-22-92   (hex)		Cinetal
+002292     (base 16)		Cinetal
+				8651 Castle Park
+				Indianapolis  IN  46256
+				US
+
+00-22-E5   (hex)		Fisher-Rosemount Systems Inc.
+0022E5     (base 16)		Fisher-Rosemount Systems Inc.
+				12301 Research Blvd
+				Austin  Texas  78759
+				US
+
+00-22-E4   (hex)		APASS TECHNOLOGY CO., LTD.
+0022E4     (base 16)		APASS TECHNOLOGY CO., LTD.
+				2F, No. 267, Sec. 3, Chengde Rd.,
+				TEIPEI    113
+				TW
+
+00-22-4F   (hex)		Byzoro Networks Ltd.
+00224F     (base 16)		Byzoro Networks Ltd.
+				Room 5A1,Block A, Keshi Plaza,No. 28A Info. Road,
+				  Beijing  100085
+				CN
+
+00-22-51   (hex)		Lumasense Technologies
+002251     (base 16)		Lumasense Technologies
+				3033 Scott Blvd.
+				Santa Clara  CA  95054
+				US
+
+00-22-5E   (hex)		Uwin Technologies Co.,LTD
+00225E     (base 16)		Uwin Technologies Co.,LTD
+				2F,No.22.R&D RD II,SBIP
+				Hsinchu    300
+				TW
+
+00-22-58   (hex)		Taiyo Yuden Co., Ltd.
+002258     (base 16)		Taiyo Yuden Co., Ltd.
+				8-1 Sakae-Cho
+				    
+				JP
+
+00-22-5B   (hex)		Teradici Corporation
+00225B     (base 16)		Teradici Corporation
+				101 4621 Canada Way,
+				Burnaby  BC  V6G 4X8
+				CA
+
+00-22-59   (hex)		Guangzhou New Postcom Equipment Co.,Ltd.
+002259     (base 16)		Guangzhou New Postcom Equipment Co.,Ltd.
+				No.3Ã‚Â¡Ã‚Â¡Guangpuxi Road,Guangzhou Science City,
+				Guangzhou  Guangdong  510663
+				CN
+
+00-22-53   (hex)		Entorian Technologies
+002253     (base 16)		Entorian Technologies
+				8900 Shoal Creek Blvd
+				Austin  TX  78757
+				US
+
+00-22-2C   (hex)		Ceton Corp
+00222C     (base 16)		Ceton Corp
+				8259 122nd Ave NE, Suite 275
+				Kirkland  Washington  98033
+				US
+
+00-22-2D   (hex)		SMC Networks Inc.
+00222D     (base 16)		SMC Networks Inc.
+				20 Mason
+				Irvine  CA  92618
+				US
+
+00-22-2A   (hex)		SoundEar A/S
+00222A     (base 16)		SoundEar A/S
+				Rentemestervej 80
+				Copenhagen NV  Denmark  DK-2400
+				DK
+
+00-22-7E   (hex)		Chengdu 30Kaitian Communication Industry Co.Ltd
+00227E     (base 16)		Chengdu 30Kaitian Communication Industry Co.Ltd
+				No.6 Chuangye Road
+				Chengdu  Sichuan  610041
+				CN
+
+00-22-7C   (hex)		Woori SMT Co.,ltd
+00227C     (base 16)		Woori SMT Co.,ltd
+				649-2,Suwolam-ri,Seotan-Myun
+				Pyongtaek  Kyonggi-Do  451-852
+				KR
+
+00-22-77   (hex)		NEC Australia Pty Ltd
+002277     (base 16)		NEC Australia Pty Ltd
+				649-655 Springvale Rd
+				Mulgrave  Victoria  3170
+				AU
+
+00-22-3D   (hex)		JumpGen Systems, LLC
+00223D     (base 16)		JumpGen Systems, LLC
+				2111 Palomar Airport Rd
+				Carlsbad  CA  92011
+				US
+
+00-22-39   (hex)		Indiana Life Sciences Incorporated
+002239     (base 16)		Indiana Life Sciences Incorporated
+				8875 Bash Street
+				Indianapolis  Indiana  46256
+				US
+
+00-22-35   (hex)		Strukton Systems bv
+002235     (base 16)		Strukton Systems bv
+				Westkanaaldijk 2
+				Utrecht    3542 DA
+				NL
+
+00-22-79   (hex)		Nippon Conlux Co., Ltd.
+002279     (base 16)		Nippon Conlux Co., Ltd.
+				5-3-8, Chiyoda
+				Sakado-shi  Saitama  350-0214
+				JP
+
+00-22-71   (hex)		Jäger Computergesteuerte Meßtechnik GmbH.
+002271     (base 16)		Jäger Computergesteuerte Meßtechnik GmbH.
+				Rheinstraße 2-4
+				Lorsch  Hessen  64653
+				DE
+
+00-22-47   (hex)		DAC ENGINEERING CO., LTD.
+002247     (base 16)		DAC ENGINEERING CO., LTD.
+				1-5 Oyanagi-cho
+				Kyoto    601-8128
+				JP
+
+00-22-1F   (hex)		eSang Technologies Co., Ltd.
+00221F     (base 16)		eSang Technologies Co., Ltd.
+				#1-817, IT Castle 550-1, Gasan-Dong,
+				Seoul    153-768
+				KR
+
+00-21-E6   (hex)		Starlight Video Limited
+0021E6     (base 16)		Starlight Video Limited
+				5/F., Shing Dao Industrial Building,
+				    
+				HK
+
+00-21-E0   (hex)		CommAgility Ltd
+0021E0     (base 16)		CommAgility Ltd
+				Holywell Park
+				Loughborough  Leics  LE11 3AQ
+				GB
+
+00-21-DE   (hex)		Firepro Wireless
+0021DE     (base 16)		Firepro Wireless
+				27, Zamrudpur Community Center,
+				New Delhi  Haryana  110020
+				IN
+
+00-21-F9   (hex)		WIRECOM Technologies
+0021F9     (base 16)		WIRECOM Technologies
+				135, rue Jacques Charles
+				OLIVET  Loiret  45166
+				FR
+
+00-21-FA   (hex)		A4SP Technologies Ltd.
+0021FA     (base 16)		A4SP Technologies Ltd.
+				Keilaranta 19 D
+				Espoo  Uusimaa  02150
+				FI
+
+00-21-F0   (hex)		EW3 Technologies LLC
+0021F0     (base 16)		EW3 Technologies LLC
+				114 E 11th St
+				Connersville  IN  47331
+				US
+
+00-21-D3   (hex)		BOCOM SECURITY(ASIA PACIFIC) LIMITED
+0021D3     (base 16)		BOCOM SECURITY(ASIA PACIFIC) LIMITED
+				Flr.3,NO.29,#69 Guiqing RD
+				Shanghai    200233
+				CN
+
+00-21-CC   (hex)		Flextronics International
+0021CC     (base 16)		Flextronics International
+				Stretton Green Distribution Centre Langford Way
+				Warrington  Cheshire  WA4 4TQ
+				GB
+
+00-21-B9   (hex)		Universal Devices Inc.
+0021B9     (base 16)		Universal Devices Inc.
+				5353 Yarmouth Ave. #209
+				Encino  CA  91316
+				US
+
+00-21-B3   (hex)		Ross Controls
+0021B3     (base 16)		Ross Controls
+				One Ross Way
+				Lavonia  GA  30553
+				US
+
+00-21-B6   (hex)		Triacta Power Technologies Inc.
+0021B6     (base 16)		Triacta Power Technologies Inc.
+				Box 582, 7 Mill Street
+				Almonte  Ontario  K0A 1A0
+				CA
+
+00-22-17   (hex)		Neat Electronics
+002217     (base 16)		Neat Electronics
+				Varuvägen 2
+				Löddeköpinge  Skåne  SE-24642
+				SE
+
+00-22-11   (hex)		Rohati Systems
+002211     (base 16)		Rohati Systems
+				1192 Borregas Ave
+				Sunnyvale  CA  94089
+				US
+
+00-21-CF   (hex)		The Crypto Group
+0021CF     (base 16)		The Crypto Group
+				Zugerstrasse 42
+				Steinhausen  Zug  6312
+				CH
+
+00-21-C5   (hex)		3DSP Corp
+0021C5     (base 16)		3DSP Corp
+				16271 Laguna Canyon Road
+				Irvine,  CA  92618
+				US
+
+00-22-12   (hex)		CAI Networks, Inc.
+002212     (base 16)		CAI Networks, Inc.
+				4790 Irvine Blvd
+				Irvine  California  92620
+				US
+
+00-22-0D   (hex)		Cisco Systems, Inc
+00220D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-22-08   (hex)		Certicom Corp
+002208     (base 16)		Certicom Corp
+				5520 Explorer Drive, 4th Floor
+				Mississauga  ON  L4W 5L1
+				CA
+
+00-21-EE   (hex)		Full Spectrum Inc.
+0021EE     (base 16)		Full Spectrum Inc.
+				1149 Chestnut Street, Suite 100
+				Menlo Park  California  94025
+				US
+
+00-21-EC   (hex)		Solutronic GmbH
+0021EC     (base 16)		Solutronic GmbH
+				Kueferstrasse 18
+				Koengen    73257
+				DE
+
+00-22-05   (hex)		WeLink Solutions, Inc.
+002205     (base 16)		WeLink Solutions, Inc.
+				3F, No. 88, Sec. 1, Nei-Hu Rd.
+				Taipei    114
+				TW
+
+00-22-09   (hex)		Omron Healthcare Co., Ltd
+002209     (base 16)		Omron Healthcare Co., Ltd
+				24 Yamanoshita-cho Yamanouchi
+				Kyoto    6150084
+				JP
+
+00-21-8C   (hex)		TopControl GMBH
+00218C     (base 16)		TopControl GMBH
+				Enzenbergweg 24/A
+				Terlan (BZ)    39018
+				IT
+
+00-21-8A   (hex)		Electronic Design and Manufacturing Company
+00218A     (base 16)		Electronic Design and Manufacturing Company
+				31 Millrace Dr
+				Lynchburg  VA  24502
+				US
+
+00-21-8B   (hex)		Wescon Technology, Inc.
+00218B     (base 16)		Wescon Technology, Inc.
+				4655-170 Old Ironsides Drive
+				Santa Clara  California  95054
+				US
+
+00-21-84   (hex)		POWERSOFT SRL
+002184     (base 16)		POWERSOFT SRL
+				VIA ENRICO CONTI, 5
+				SCANDICCI  FI  50018
+				IT
+
+00-21-78   (hex)		Matuschek Messtechnik GmbH
+002178     (base 16)		Matuschek Messtechnik GmbH
+				Werner Heisenberg Straße 14
+				Alsdorf  NRW  52477
+				DE
+
+00-21-73   (hex)		Ion Torrent Systems, Inc.
+002173     (base 16)		Ion Torrent Systems, Inc.
+				37 Soundview Rd
+				Guilford  CT  06437
+				US
+
+00-21-77   (hex)		W. L. Gore & Associates
+002177     (base 16)		W. L. Gore & Associates
+				402 Vieves Way
+				Elkton  MD  21921
+				US
+
+00-21-72   (hex)		Seoultek Valley
+002172     (base 16)		Seoultek Valley
+				Bang-i Dong 51-5, Songpa
+				Seoul    138-050
+				KR
+
+00-21-53   (hex)		SeaMicro Inc.
+002153     (base 16)		SeaMicro Inc.
+				3250 Jay Street
+				Santa Clara  CA  95054
+				US
+
+00-21-7A   (hex)		Sejin Electron, Inc.
+00217A     (base 16)		Sejin Electron, Inc.
+				SJ Technoville
+				Seoul    153-801
+				KR
+
+00-21-A4   (hex)		Dbii Networks
+0021A4     (base 16)		Dbii Networks
+				2217 Via Blanca
+				Oceanside  CA  92054
+				US
+
+00-21-99   (hex)		Vacon Plc
+002199     (base 16)		Vacon Plc
+				P.O.Box 25
+				Vaasa    65380
+				FI
+
+00-21-A0   (hex)		Cisco Systems, Inc
+0021A0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-21-98   (hex)		Thai Radio Co, LTD
+002198     (base 16)		Thai Radio Co, LTD
+				Hi-Tech Industrial Estate
+				Ayutthaya    13160
+				TH
+
+00-21-AE   (hex)		ALCATEL-LUCENT FRANCE - WTD
+0021AE     (base 16)		ALCATEL-LUCENT FRANCE - WTD
+				7-9, Avenue Morane Saulnier
+				VELIZY    78141
+				FR
+
+00-21-AF   (hex)		Radio Frequency Systems
+0021AF     (base 16)		Radio Frequency Systems
+				Kabelkamp 20
+				Hannover    30179
+				DE
+
+00-21-54   (hex)		D-TACQ Solutions Ltd
+002154     (base 16)		D-TACQ Solutions Ltd
+				James Watt Building
+				East Kilbride  Lanarkshire  G75 0QD
+				GB
+
+00-21-69   (hex)		Prologix, LLC.
+002169     (base 16)		Prologix, LLC.
+				17217 NE 133rd Place
+				Redmond  Washington  98052-2153
+				US
+
+00-21-4B   (hex)		Shenzhen HAMP Science & Technology Co.,Ltd
+00214B     (base 16)		Shenzhen HAMP Science & Technology Co.,Ltd
+				No.302-303,3 Floor,District A,TCL Tower,Gaoxin Nan Yi Road,NanShan District
+				Shenzhen  Guangdong  518057
+				CN
+
+00-21-45   (hex)		Semptian Technologies Ltd.
+002145     (base 16)		Semptian Technologies Ltd.
+				No. 809,  Tower B, Shi Ji Ke Mao
+				Beijing    100190
+				CN
+
+00-1F-FE   (hex)		HPN Supply Chain
+001FFE     (base 16)		HPN Supply Chain
+				8000 Foothills Blvd
+				Roseville  CA  95747
+				US
+
+00-1F-FF   (hex)		Respironics, Inc.
+001FFF     (base 16)		Respironics, Inc.
+				1740 Golden Mile Highway
+				Monroeville  PA  15146
+				US
+
+00-1F-FC   (hex)		Riccius+Sohn GmbH
+001FFC     (base 16)		Riccius+Sohn GmbH
+				Haynauer Str. 49
+				Berlin    12249
+				DE
+
+00-1F-FD   (hex)		Indigo Mobile Technologies Corp.
+001FFD     (base 16)		Indigo Mobile Technologies Corp.
+				11F, No22, Lan407,TiDing Blvd Section2, Neihu Technology Park
+				Taipei City    114
+				TW
+
+00-21-21   (hex)		VRmagic GmbH
+002121     (base 16)		VRmagic GmbH
+				Augustaanlage 32
+				Mannheim  BW  68165
+				DE
+
+00-21-23   (hex)		Aerosat Avionics
+002123     (base 16)		Aerosat Avionics
+				62 State Rd.
+				Amherst  NH  03031
+				US
+
+00-21-0A   (hex)		byd:sign Corporation
+00210A     (base 16)		byd:sign Corporation
+				2-10-6 Tsukiji
+				Chuo-ku  Tokyo  104-0045
+				JP
+
+00-21-07   (hex)		Seowonintech Co Ltd.
+002107     (base 16)		Seowonintech Co Ltd.
+				689-47 Geumjeongdong
+				Gunposi  Kyoungkido  436-862
+				KR
+
+00-21-3F   (hex)		A-Team Technology Ltd.
+00213F     (base 16)		A-Team Technology Ltd.
+				Rm. 1608, 16/F., Metropole Square,
+				New Territories,    
+				HK
+
+00-21-1B   (hex)		Cisco Systems, Inc
+00211B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-21-2D   (hex)		SCIMOLEX CORPORATION
+00212D     (base 16)		SCIMOLEX CORPORATION
+				2430, Saijou, Showa-cho
+				Nakakoma-gun, Yamanashi    409-3866
+				JP
+
+00-1F-D5   (hex)		MICRORISC s.r.o.
+001FD5     (base 16)		MICRORISC s.r.o.
+				Delnicka 222
+				Jicin  kralovehradecky kraj  50601
+				CZ
+
+00-1F-B1   (hex)		Cybertech Inc.
+001FB1     (base 16)		Cybertech Inc.
+				935 Horsham Rd
+				Horsham  PA  19044
+				US
+
+00-1F-B2   (hex)		Sontheim Industrie Elektronik GmbH
+001FB2     (base 16)		Sontheim Industrie Elektronik GmbH
+				Dieselstrasse 7
+				Kempten Allgaeu  Bavaria  D-87437
+				DE
+
+00-1F-EE   (hex)		ubisys technologies GmbH
+001FEE     (base 16)		ubisys technologies GmbH
+				Am Wehrhahn 45
+				Düsseldorf  NRW  40211
+				DE
+
+00-1F-EF   (hex)		SHINSEI INDUSTRIES CO.,LTD
+001FEF     (base 16)		SHINSEI INDUSTRIES CO.,LTD
+				4-12-15,HORIFUNE, KITA-KU,
+				TOKOYO    114-0004
+				JP
+
+00-1F-EC   (hex)		Synapse Électronique
+001FEC     (base 16)		Synapse Électronique
+				1010, 7e Avenue
+				Grand-Mère  Québec  G9T 2B8
+				CA
+
+00-1F-CA   (hex)		Cisco Systems, Inc
+001FCA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1F-C3   (hex)		SmartSynch, Inc
+001FC3     (base 16)		SmartSynch, Inc
+				4400 Old Canton Rd
+				Jackson  MS  39211
+				US
+
+00-1F-E0   (hex)		EdgeVelocity Corp
+001FE0     (base 16)		EdgeVelocity Corp
+				68 Stiles Road
+				Hudson  NH  03079
+				US
+
+00-1F-D8   (hex)		A-TRUST COMPUTER CORPORATION
+001FD8     (base 16)		A-TRUST COMPUTER CORPORATION
+				3F., NO.361, FUSING 1ST RD., GUEISHAN TOWNSHIP,
+				TAOYUAN    33375
+				TW
+
+00-1F-D7   (hex)		TELERAD SA
+001FD7     (base 16)		TELERAD SA
+				2, avenue de la butte aux cailles
+				ANGLET    64600
+				FR
+
+00-1F-D3   (hex)		RIVA Networks Inc.
+001FD3     (base 16)		RIVA Networks Inc.
+				555 Riva Ave
+				East Brunswick  NJ  08816
+				US
+
+00-1F-C1   (hex)		Hanlong Technology Co.,LTD
+001FC1     (base 16)		Hanlong Technology Co.,LTD
+				2402 West Tower Building, Fuxin International Building,
+				Nanjing  Jiangsu  210002
+				CN
+
+00-1F-BB   (hex)		Xenatech Co.,LTD
+001FBB     (base 16)		Xenatech Co.,LTD
+				 514-2 Ya Tab-Dong Bun Dang Gu
+				Seong namsi  Gyong gi-do  463-839
+				KR
+
+00-1F-E8   (hex)		KURUSUGAWA Electronics Industry Inc,.
+001FE8     (base 16)		KURUSUGAWA Electronics Industry Inc,.
+				2F, 52-5, Nogata 6chome
+				Nakano-Ku  TOKYO  165-0027
+				JP
+
+00-1F-AB   (hex)		I.S HIGH TECH.INC
+001FAB     (base 16)		I.S HIGH TECH.INC
+				603-1,Sungbon-ri,Daeso-myun
+				Eumsung-gun  Chungcheongbuk-do  369-823
+				KR
+
+00-1F-AC   (hex)		Goodmill Systems Ltd
+001FAC     (base 16)		Goodmill Systems Ltd
+				Sinikalliontie 10
+				Espoo  Uusimaa  02630
+				FI
+
+00-1F-36   (hex)		Bellwin Information Co. Ltd.,
+001F36     (base 16)		Bellwin Information Co. Ltd.,
+				No.336, Beitun Rd., Beitun Dist.,
+				Taichung    406
+				TW
+
+00-1F-3D   (hex)		Qbit GmbH
+001F3D     (base 16)		Qbit GmbH
+				Stegwiesenstrasse 32
+				Bruchsal  Germany  76646
+				DE
+
+00-1F-38   (hex)		POSITRON
+001F38     (base 16)		POSITRON
+				ESTRADA TELEBRAS-UNICAMP, KM0,97 - CJ.01
+				CAMPINAS  São Paulo  13084-971
+				BR
+
+00-1F-2D   (hex)		Electro-Optical Imaging, Inc.
+001F2D     (base 16)		Electro-Optical Imaging, Inc.
+				4300 Fortune Place, Suite C
+				West Melbourne  FL  32904
+				US
+
+00-1F-89   (hex)		Signalion GmbH
+001F89     (base 16)		Signalion GmbH
+				Sudhausweg 5
+				Dresden  Saxony  01099
+				DE
+
+00-1F-8A   (hex)		Ellion Digital Inc.
+001F8A     (base 16)		Ellion Digital Inc.
+				Suite 809, Sicox Tower, 513-14, Sangdaewon-dong, Jungwon-gu
+				Sungnam-city  Kyonggi-do  426-726
+				KR
+
+00-1F-7F   (hex)		Phabrix Limited
+001F7F     (base 16)		Phabrix Limited
+				Blindmans Gate Cottage
+				Newbury  Hampshire  RG20 9XB
+				GB
+
+00-1F-76   (hex)		AirLogic Systems Inc.
+001F76     (base 16)		AirLogic Systems Inc.
+				3022 Peleke St.Suite 1
+				Lihu'e  HI  96766
+				US
+
+00-1F-73   (hex)		Teraview Technology Co., Ltd.
+001F73     (base 16)		Teraview Technology Co., Ltd.
+				23F, No. 29-5, Sec. 2, Jhongjheng E. Road,
+				Taipei County    251
+				TW
+
+00-1F-62   (hex)		JSC Stilsoft
+001F62     (base 16)		JSC Stilsoft
+				Mayakovskogo 15
+				Stavropol    355000
+				RU
+
+00-1F-67   (hex)		Hitachi,Ltd.
+001F67     (base 16)		Hitachi,Ltd.
+				Minamioi 6-27-18, Shinagawa-ku
+				Tokyo  Tokyo  140-8572
+				JP
+
+00-1F-56   (hex)		DIGITAL FORECAST
+001F56     (base 16)		DIGITAL FORECAST
+				5th Fl., 507, E&C Venture Dream Tower III, 197-33
+				Seoul  Gyunggi-do  152-719
+				KR
+
+00-1F-52   (hex)		UVT Unternehmensberatung fur Verkehr und Technik GmbH
+001F52     (base 16)		UVT Unternehmensberatung fur Verkehr und Technik GmbH
+				Josefsstraße 54-56
+				Mainz  RLP  55118
+				DE
+
+00-1F-4F   (hex)		Thinkware Co. Ltd.
+001F4F     (base 16)		Thinkware Co. Ltd.
+				15FL, Hanmi Tower, 45,
+				Seoul    138-724
+				KR
+
+00-1F-2F   (hex)		Berker GmbH & Co. KG
+001F2F     (base 16)		Berker GmbH & Co. KG
+				Klagebach 38
+				Schalksmuehle  NRW  58579
+				DE
+
+00-1F-32   (hex)		Nintendo Co., Ltd.
+001F32     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1F-44   (hex)		GE Transportation Systems
+001F44     (base 16)		GE Transportation Systems
+				2901 East Lake Road
+				Erie  PA  16501
+				US
+
+00-1F-39   (hex)		Construcciones y Auxiliar de Ferrocarriles, S.A.
+001F39     (base 16)		Construcciones y Auxiliar de Ferrocarriles, S.A.
+				C/ J.M. Iturrioz, 26
+				Beasain  Guipúzcoa  E-20200
+				ES
+
+00-1F-7C   (hex)		Witelcom AS
+001F7C     (base 16)		Witelcom AS
+				Verftsgt 10
+				Moss  Ostfold  1511
+				NO
+
+00-1F-7A   (hex)		WiWide Inc.
+001F7A     (base 16)		WiWide Inc.
+				10B10, Hua Jie Plaza
+				Beijing    100089
+				CN
+
+00-1F-77   (hex)		HEOL DESIGN
+001F77     (base 16)		HEOL DESIGN
+				1 bd d'armor
+				LANNION  BRETAGNE  22300
+				FR
+
+00-1F-94   (hex)		Lascar Electronics Ltd
+001F94     (base 16)		Lascar Electronics Ltd
+				Module House
+				Nr Salisbury  Wiltshire  SP5 2SJ
+				GB
+
+00-1F-8E   (hex)		Metris USA Inc.
+001F8E     (base 16)		Metris USA Inc.
+				44880 Falcon Place ste 100
+				Sterling  VA  20166
+				US
+
+00-1F-61   (hex)		Talent Communication Networks Inc.
+001F61     (base 16)		Talent Communication Networks Inc.
+				Rm. 910 R&F Plaza, #76, Huangpu Ave. West,
+				Guangzhou (Canton)  Guangdong Province  510360
+				CN
+
+00-1E-CE   (hex)		BISA Technologies (Hong Kong) Limited
+001ECE     (base 16)		BISA Technologies (Hong Kong) Limited
+				1102, Trans Asia Centre,
+				 Kwai Chung,    
+				HK
+
+00-1E-C8   (hex)		Rapid Mobile (Pty) Ltd
+001EC8     (base 16)		Rapid Mobile (Pty) Ltd
+				Building C,D,E Apex Corporate Park
+				Pretoria  Gauteng  0020
+				ZA
+
+00-1E-CC   (hex)		CDVI
+001ECC     (base 16)		CDVI
+				31 Avenue du Général Leclerc
+				PANTIN  Ile de France  93500
+				FR
+
+00-1E-C5   (hex)		Middle Atlantic Products Inc
+001EC5     (base 16)		Middle Atlantic Products Inc
+				300 Fairfield Road
+				Fairfield  NJ  07004
+				US
+
+00-1F-03   (hex)		NUM AG
+001F03     (base 16)		NUM AG
+				Battenhusstrasse 16
+				Teufen  AR  9053
+				CH
+
+00-1E-FF   (hex)		Mueller-Elektronik GmbH & Co. KG
+001EFF     (base 16)		Mueller-Elektronik GmbH & Co. KG
+				Franz-Kleine-Str. 18
+				Salzkotten  NRW  33154
+				DE
+
+00-1F-05   (hex)		iTAS Technology Corp.
+001F05     (base 16)		iTAS Technology Corp.
+				No. 75, Shuiyuan St.
+				Hsinchu City    30069
+				TW
+
+00-1F-07   (hex)		AZTEQ Mobile
+001F07     (base 16)		AZTEQ Mobile
+				Suite 210, 525 University Ave
+				Palo Alto  CA  94301
+				US
+
+00-1E-F6   (hex)		Cisco Systems, Inc
+001EF6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-F9   (hex)		Pascom Kommunikations systeme GmbH.
+001EF9     (base 16)		Pascom Kommunikations systeme GmbH.
+				Technologiestr. 4
+				Arbing  Upper Austria  4332
+				AT
+
+00-1E-F3   (hex)		From2
+001EF3     (base 16)		From2
+				2F, Mester inc
+				Daejeon    306-230
+				KR
+
+00-1F-19   (hex)		BEN-RI ELECTRONICA S.A.
+001F19     (base 16)		BEN-RI ELECTRONICA S.A.
+				POL. IND. VENTORRO DEL CANO
+				ALCORCON  MADRID  28925
+				ES
+
+00-1F-11   (hex)		OPENMOKO, INC.
+001F11     (base 16)		OPENMOKO, INC.
+				7F, No 300, Yang Guang Street
+				Taipei    11491
+				TW
+
+00-1E-E4   (hex)		ACS Solutions France
+001EE4     (base 16)		ACS Solutions France
+				Rue Claude Chappe
+				Guilherand Granges  Ardeche  07503
+				FR
+
+00-1E-ED   (hex)		Adventiq Ltd.
+001EED     (base 16)		Adventiq Ltd.
+				Technology House
+				Bar Hill  Cambs.  CB3 8SQ
+				GB
+
+00-1E-D2   (hex)		Ray Shine Video Technology Inc
+001ED2     (base 16)		Ray Shine Video Technology Inc
+				6F,No.98,Sec.1,Xintai 5th Rd.
+				Xizhi City  Taipei County  221
+				TW
+
+00-1E-D4   (hex)		Doble Engineering
+001ED4     (base 16)		Doble Engineering
+				85 Walnut St
+				Watertown  MA  02472
+				US
+
+00-1E-FD   (hex)		Microbit 2.0 AB
+001EFD     (base 16)		Microbit 2.0 AB
+				Nystaden 1
+				KALIX    95261
+				SE
+
+00-1E-E7   (hex)		Epic Systems Inc
+001EE7     (base 16)		Epic Systems Inc
+				390 S. Abbott Ave
+				Milpitas  CA  95035
+				US
+
+00-1E-E9   (hex)		Stoneridge Electronics AB
+001EE9     (base 16)		Stoneridge Electronics AB
+				Gårdsfogdevägen 18A
+				Bromma  Stockholm  168 66
+				SE
+
+00-1F-1C   (hex)		KOBISHI ELECTRIC Co.,Ltd.
+001F1C     (base 16)		KOBISHI ELECTRIC Co.,Ltd.
+				1805-1
+				Kounosu-shi  Saitama-ken  365-0027
+				JP
+
+00-1E-79   (hex)		Cisco Systems, Inc
+001E79     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-76   (hex)		Thermo Fisher Scientific
+001E76     (base 16)		Thermo Fisher Scientific
+				2215 Grand Avenue Parkway
+				Austin  Texas  78728
+				US
+
+00-1E-72   (hex)		PCS
+001E72     (base 16)		PCS
+				2 HENRI FARMAN
+				LESCAR  PYRENEES ATLANTIQUES  64230
+				FR
+
+00-1E-5F   (hex)		KwikByte, LLC
+001E5F     (base 16)		KwikByte, LLC
+				2430 W. 12th Street
+				Tempe  AZ  85281
+				US
+
+00-1E-5B   (hex)		Unitron Company, Inc.
+001E5B     (base 16)		Unitron Company, Inc.
+				10925 Miller Road
+				Dallas  TX  75238
+				US
+
+00-1E-5E   (hex)		COmputime Ltd.
+001E5E     (base 16)		COmputime Ltd.
+				17/F Great Eagle Centre
+				Wanchai    
+				HK
+
+00-1E-9D   (hex)		Recall Technologies, Inc.
+001E9D     (base 16)		Recall Technologies, Inc.
+				130 Enterprise Ave.
+				Palm Bay  FL  32909
+				US
+
+00-1E-95   (hex)		SIGMALINK
+001E95     (base 16)		SIGMALINK
+				DooSan VentureDigm 1028,
+				Anyang-City  Kyunggi-do  431-070
+				KR
+
+00-1E-93   (hex)		CiriTech Systems Inc
+001E93     (base 16)		CiriTech Systems Inc
+				920 Hillview Ct
+				Milpitas  CA  95035
+				US
+
+00-1E-A2   (hex)		Symx Systems, Inc.
+001EA2     (base 16)		Symx Systems, Inc.
+				6320 NW 84th Avenue
+				Miami  Florida  33166
+				US
+
+00-1E-A9   (hex)		Nintendo Co., Ltd.
+001EA9     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1E-9E   (hex)		ddm hopt + schuler Gmbh + Co. KG
+001E9E     (base 16)		ddm hopt + schuler Gmbh + Co. KG
+				Koenigsberger Strasse 12
+				Rottweil  Baden-Württemberg  78626
+				DE
+
+00-1E-BE   (hex)		Cisco Systems, Inc
+001EBE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-C3   (hex)		Kozio, Inc.
+001EC3     (base 16)		Kozio, Inc.
+				2015 Ionosphere Street
+				Longmont  CO  80504
+				US
+
+00-1E-BD   (hex)		Cisco Systems, Inc
+001EBD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-B9   (hex)		Sing Fai Technology Limited
+001EB9     (base 16)		Sing Fai Technology Limited
+				No.700, Kaohsiung University Rd., Nan-Tzu Dist.
+				Kaohsiung    811
+				TW
+
+00-1E-B7   (hex)		TBTech, Co., Ltd.
+001EB7     (base 16)		TBTech, Co., Ltd.
+				1109, Hyundai Krim, 1330-18, Seocho-dong,
+				Seoul    137-070
+				KR
+
+00-1E-69   (hex)		Thomson Inc.
+001E69     (base 16)		Thomson Inc.
+				101 West 103rd Street
+				Indianapolis  IN  46290-1102
+				US
+
+00-1E-92   (hex)		JEULIN S.A.
+001E92     (base 16)		JEULIN S.A.
+				ZI N°1
+				Evreux    F27019
+				FR
+
+00-1E-91   (hex)		KIMIN Electronic Co., Ltd.
+001E91     (base 16)		KIMIN Electronic Co., Ltd.
+				293-4, Dongdan-Dong
+				Gumi-city  GyeongBuk  730-906
+				KR
+
+00-1E-89   (hex)		CRFS Limited
+001E89     (base 16)		CRFS Limited
+				Building 7200
+				Waterbeach  Cambridgeshire  CB25 9TL
+				GB
+
+00-1E-86   (hex)		MEL Co.,Ltd.
+001E86     (base 16)		MEL Co.,Ltd.
+				Tsukagoshi 5-5-1,Warabi-shi,Saitama,Japna
+				Warabi  Saitama  335-0002
+				JP
+
+00-1E-88   (hex)		ANDOR SYSTEM SUPPORT CO., LTD.
+001E88     (base 16)		ANDOR SYSTEM SUPPORT CO., LTD.
+				Minami-Shinagawa 2-15-8
+				Sinagawa  Tokyo  140-0004
+				JP
+
+00-1E-0C   (hex)		Sherwood Information Partners, Inc.
+001E0C     (base 16)		Sherwood Information Partners, Inc.
+				1120 W, 122nd Ave, Ste 300
+				Westminster  CO  80234
+				US
+
+00-1E-02   (hex)		Sougou Keikaku Kougyou Co.,Ltd.
+001E02     (base 16)		Sougou Keikaku Kougyou Co.,Ltd.
+				HK2 bld. 2-21-10
+				Suginamiku  Tokyo  167-0053
+				JP
+
+00-1E-01   (hex)		Renesas Technology Sales Co., Ltd.
+001E01     (base 16)		Renesas Technology Sales Co., Ltd.
+				2-6-2
+				Chiyoda-ku  Tokyo  100-0004
+				JP
+
+00-1D-FF   (hex)		Network Critical Solutions Ltd
+001DFF     (base 16)		Network Critical Solutions Ltd
+				12B Southview Park
+				Reading  Berkshire  RG45AF
+				GB
+
+00-1E-00   (hex)		Shantou Institute of Ultrasonic Instruments
+001E00     (base 16)		Shantou Institute of Ultrasonic Instruments
+				No.77, Jinsha Road,
+				Shantou  Guangdong  515041
+				CN
+
+00-1E-54   (hex)		TOYO ELECTRIC Corporation
+001E54     (base 16)		TOYO ELECTRIC Corporation
+				1-39 HIKISAWA
+				KASUGAI  AICHI  480-0393
+				JP
+
+00-1E-3C   (hex)		Lyngbox Media AB
+001E3C     (base 16)		Lyngbox Media AB
+				Diskettgatan 11B
+				Linkoping    SE-58335
+				SE
+
+00-1E-4D   (hex)		Welkin Sciences, LLC
+001E4D     (base 16)		Welkin Sciences, LLC
+				102 S. Tejon St, Suite 200
+				Colorado Springs  CO  80903
+				US
+
+00-1E-4B   (hex)		City Theatrical
+001E4B     (base 16)		City Theatrical
+				475 Barell Ave
+				Carlstadt  New Jersey  07072
+				US
+
+00-1E-4A   (hex)		Cisco Systems, Inc
+001E4A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-13   (hex)		Cisco Systems, Inc
+001E13     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-0D   (hex)		Micran Ltd.
+001E0D     (base 16)		Micran Ltd.
+				Vershinina st. 47
+				Tomsk  Tomsk Region  634034
+				RU
+
+00-1E-09   (hex)		ZEFATEK Co.,LTD
+001E09     (base 16)		ZEFATEK Co.,LTD
+				326-4 Gasandong, Geumcheongu
+				Seoul    153-802
+				KR
+
+00-1E-06   (hex)		WIBRAIN
+001E06     (base 16)		WIBRAIN
+				306 JEI Plats B/D 459-11 Gasan-dong, Geumcheon-gu
+				SEOUL    153-803
+				KR
+
+00-1E-2C   (hex)		CyVerse Corporation
+001E2C     (base 16)		CyVerse Corporation
+				Shoutou Roukubankan Bldg. 4F
+				Shibuya-ku  Tokyo  150-0046
+				JP
+
+00-1E-26   (hex)		Digifriends Co. Ltd
+001E26     (base 16)		Digifriends Co. Ltd
+				Joyang B/D 6th Floor
+				Seoul    135-090
+				KR
+
+00-1E-23   (hex)		Electronic Educational Devices, Inc
+001E23     (base 16)		Electronic Educational Devices, Inc
+				1903 S Grant St
+				Denver  CO  80210
+				US
+
+00-1D-F3   (hex)		SBS Science & Technology Co., Ltd
+001DF3     (base 16)		SBS Science & Technology Co., Ltd
+				W2-B5/6 High-tech industrial park
+				ShenZhen  GuangDong  518057
+				CN
+
+00-1D-EE   (hex)		NEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.
+001DEE     (base 16)		NEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.
+				Alameda Rio Negro, 1030 - 19o. andar conj. 1904
+				Barueri  São Paulo  06454-000
+				BR
+
+00-1D-EA   (hex)		Commtest Instruments Ltd
+001DEA     (base 16)		Commtest Instruments Ltd
+				Level 2, 22 Moorhouse Ave
+				Christchurch  Canterbury  8243
+				NZ
+
+00-1D-DD   (hex)		DAT H.K. LIMITED
+001DDD     (base 16)		DAT H.K. LIMITED
+				Suite 1405 14/F., City Plaza 4, Tai Koo Wan Rd,
+				Tai Koo Shing  Hong Kong Island  064828
+				HK
+
+00-1D-E4   (hex)		Visioneered Image Systems
+001DE4     (base 16)		Visioneered Image Systems
+				10561 Garden Grove Blvd
+				Garden Grove  California  92843
+				US
+
+00-1D-E2   (hex)		Radionor Communications
+001DE2     (base 16)		Radionor Communications
+				Ingvald Ystgaards veg 23
+				Trondheim  TRD  7046
+				NO
+
+00-1D-D7   (hex)		Algolith
+001DD7     (base 16)		Algolith
+				400 Isabey
+				Saint-Laurent  Qc  H4T 1V3
+				CA
+
+00-1D-C9   (hex)		GainSpan Corp.
+001DC9     (base 16)		GainSpan Corp.
+				P.O. Box 223580
+				Carmel  CA  93922
+				US
+
+00-1D-86   (hex)		Shinwa Industries(China) Ltd.
+001D86     (base 16)		Shinwa Industries(China) Ltd.
+				8 Pingnanzhong Road, Pingnan Industrial Park, Zhongkai No.4 Road,
+				Huizhou City  Guangdong Province  516006
+				CN
+
+00-1D-88   (hex)		Clearwire
+001D88     (base 16)		Clearwire
+				1475 120th Ave NE
+				Bellevue  Washington  98005
+				US
+
+00-1D-81   (hex)		GUANGZHOU GATEWAY ELECTRONICS CO., LTD
+001D81     (base 16)		GUANGZHOU GATEWAY ELECTRONICS CO., LTD
+				B20#,4F,No.9 Jiangong Road,Tianhe Software Park,Tianhe District,
+				GUANGZHOU  Guangdong  510665
+				CN
+
+00-1D-7D   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+001D7D     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				
+				Pin-Jen  Taoyuan  324
+				TW
+
+00-1D-C7   (hex)		L-3 Communications Geneva Aerospace
+001DC7     (base 16)		L-3 Communications Geneva Aerospace
+				4240 International Parkway
+				Carrollton  Texas  75007
+				US
+
+00-1D-89   (hex)		VaultStor Corporation
+001D89     (base 16)		VaultStor Corporation
+				1010 Brioso Drive
+				Costa Mesa  CA  92627
+				US
+
+00-1D-66   (hex)		Hyundai Telecom
+001D66     (base 16)		Hyundai Telecom
+				Hyundai Telecom Bldg., 4273-12, Shingil-Dong, Youngdungpo-Gu,
+				Seoul    150-859
+				KR
+
+00-1D-77   (hex)		NSGate
+001D77     (base 16)		NSGate
+				Rm 1304, 39 Kirpichnaya Street
+				Moscow    105187
+				RU
+
+00-1D-A2   (hex)		Cisco Systems, Inc
+001DA2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-99   (hex)		Cyan Optic, Inc.
+001D99     (base 16)		Cyan Optic, Inc.
+				1390 N. McDowell Blvd
+				Petaluma  CA  94954
+				US
+
+00-1D-9B   (hex)		Hokuyo Automatic Co., Ltd.
+001D9B     (base 16)		Hokuyo Automatic Co., Ltd.
+				Niitaka 1-10-9
+				Osaka    532-0033
+				JP
+
+00-1D-BC   (hex)		Nintendo Co., Ltd.
+001DBC     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1D-B6   (hex)		BestComm Networks, Inc.
+001DB6     (base 16)		BestComm Networks, Inc.
+				4400 E. Broadway Blvd.
+				Tucson  AZ  85711
+				US
+
+00-1D-AC   (hex)		Gigamon Systems LLC
+001DAC     (base 16)		Gigamon Systems LLC
+				598 Gibraltar Drive
+				Milpitas  CA  95035
+				US
+
+00-1D-15   (hex)		Shenzhen Dolphin Electronic Co., Ltd
+001D15     (base 16)		Shenzhen Dolphin Electronic Co., Ltd
+				Building21,Baoyuan, No.1 Industrial Zone,
+				Shenzhen  Guangdong  518103
+				CN
+
+00-1D-16   (hex)		SFR
+001D16     (base 16)		SFR
+				40/42 Quai du point du jour
+				Boulongne Billancourt Hauts de Seine     92659
+				FR
+
+00-1D-11   (hex)		Analogue & Micro Ltd
+001D11     (base 16)		Analogue & Micro Ltd
+				Lakeside House
+				Llantarnam Industrial Park  Cwmbran  NP44 3XS
+				GB
+
+00-1D-12   (hex)		ROHM CO., LTD.
+001D12     (base 16)		ROHM CO., LTD.
+				21 Saiin-Mizosaki-cho,
+				Kyoto-shi  KYOTO  615-8585
+				JP
+
+00-1D-47   (hex)		Covote GmbH & Co KG
+001D47     (base 16)		Covote GmbH & Co KG
+				Ritterhufen 30
+				Berlin    14165
+				DE
+
+00-1D-41   (hex)		Hardy Instruments
+001D41     (base 16)		Hardy Instruments
+				3860 Calle Fortunada
+				San Diego  CA  92123
+				US
+
+00-1D-3D   (hex)		Avidyne Corporation
+001D3D     (base 16)		Avidyne Corporation
+				202 West Dr
+				Melbourne  FL  32904
+				US
+
+00-1D-3C   (hex)		Muscle Corporation
+001D3C     (base 16)		Muscle Corporation
+				2-5-35, Kikawa-higashi
+				Osaka    532-0012
+				JP
+
+00-1D-3A   (hex)		mh acoustics LLC
+001D3A     (base 16)		mh acoustics LLC
+				25A Summit Ave
+				Summit  NJ  07901
+				US
+
+00-1D-49   (hex)		Innovation Wireless Inc.
+001D49     (base 16)		Innovation Wireless Inc.
+				4F-1, NO.81, SHUEILI RD.
+				HSINCHU    30059
+				TW
+
+00-1D-46   (hex)		Cisco Systems, Inc
+001D46     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1D-48   (hex)		Sensor-Technik Wiedemann GmbH
+001D48     (base 16)		Sensor-Technik Wiedemann GmbH
+				Am Bärenwald 6
+				Kaufbeuren  Bayern  87600
+				DE
+
+00-1D-76   (hex)		Eyeheight Ltd.
+001D76     (base 16)		Eyeheight Ltd.
+				Unit 34, Park House
+				Watford  Herts  WD18 8PH
+				GB
+
+00-1D-7A   (hex)		Wideband Semiconductor, Inc.
+001D7A     (base 16)		Wideband Semiconductor, Inc.
+				1350 Pear Ave
+				Mountain View  CA  94043
+				US
+
+00-1D-68   (hex)		Thomson Telecom Belgium
+001D68     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				Edegem  Antwerp  B-2650
+				BE
+
+00-1D-26   (hex)		Rockridgesound Technology Co.
+001D26     (base 16)		Rockridgesound Technology Co.
+				Fumin Industrial Park, Houjie Town
+				Dong Guan  Guang Dong  523956
+				CN
+
+00-1D-35   (hex)		Viconics Electronics Inc.
+001D35     (base 16)		Viconics Electronics Inc.
+				9245 Langelier
+				Saint Leonard  Quebec  H1P3K9
+				CA
+
+00-1D-31   (hex)		HIGHPRO INTERNATIONAL R&D CO,.LTD.
+001D31     (base 16)		HIGHPRO INTERNATIONAL R&D CO,.LTD.
+				3F,No.295,RuiGuang Rd,Nei Hu,
+				Taipei    114
+				TW
+
+00-1D-61   (hex)		BIJ Corporation
+001D61     (base 16)		BIJ Corporation
+				7F Takamizawa Building,2-7-10,
+				Yokohama  Kanagawa  220-0004
+				JP
+
+00-1D-5C   (hex)		Tom Communication Industrial Co.,Ltd.
+001D5C     (base 16)		Tom Communication Industrial Co.,Ltd.
+				1173 Nippa-choh Kohoku-ku
+				Yokohama  Kanagawa  223-0057
+				JP
+
+00-1D-56   (hex)		Kramer Electronics Ltd.
+001D56     (base 16)		Kramer Electronics Ltd.
+				3 Am VeOlamo Street
+				Jerusalem    95463
+				IL
+
+00-1D-4E   (hex)		TCM Mobile LLC
+001D4E     (base 16)		TCM Mobile LLC
+				9218 Metcalf,
+				Overland Park  Kansas  66212
+				US
+
+00-1D-21   (hex)		Alcad SL
+001D21     (base 16)		Alcad SL
+				Pol. Ind. Arreche-Ugalde, 1
+				Irún  Guipúzcoa  E-20305
+				ES
+
+00-1D-1C   (hex)		Gennet s.a.
+001D1C     (base 16)		Gennet s.a.
+				2 Mesogeion ave.
+				Athens  Attiki  11527
+				GR
+
+00-1C-E1   (hex)		INDRA SISTEMAS, S.A.
+001CE1     (base 16)		INDRA SISTEMAS, S.A.
+				Ctra. de Loeches, n.º 9
+				Torrejón de Ardoz  MADRID  28850
+				ES
+
+00-1C-E0   (hex)		DASAN TPS
+001CE0     (base 16)		DASAN TPS
+				HUMAX Village 6F, 11-4 Sunae-dong, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-825
+				KR
+
+00-1C-D9   (hex)		GlobalTop Technology Inc.
+001CD9     (base 16)		GlobalTop Technology Inc.
+				16 Nan-ke 9th Rd. Science-base Industrial Park,
+				ShanHua  Tainan county  741
+				TW
+
+00-1C-DA   (hex)		Exegin Technologies Limited
+001CDA     (base 16)		Exegin Technologies Limited
+				401 - 2071 Kingsway Avenue
+				Port Coquitlam  BC  V3C 6N2
+				CA
+
+00-1C-D2   (hex)		King Champion (Hong Kong) Limited
+001CD2     (base 16)		King Champion (Hong Kong) Limited
+				Unit 1520, 15/F, Phase 1, Metro Centre,
+				Kowloon    
+				HK
+
+00-1C-A6   (hex)		Win4NET
+001CA6     (base 16)		Win4NET
+				1301 KOLON Digital Tower,
+				Kuro-gu  Seoul  152-848
+				KR
+
+00-1C-A9   (hex)		Audiomatica Srl
+001CA9     (base 16)		Audiomatica Srl
+				Via Manfredi 12
+				Florence  Italy  50136
+				IT
+
+00-1C-A1   (hex)		AKAMAI TECHNOLOGIES, INC.
+001CA1     (base 16)		AKAMAI TECHNOLOGIES, INC.
+				8 CAMBRIDGE CENTER
+				CAMBRIDGE  MA  02142
+				US
+
+00-1C-99   (hex)		Shunra Software Ltd.
+001C99     (base 16)		Shunra Software Ltd.
+				20 Hata'as St.
+				Kefar-Saba    44425
+				IL
+
+00-1C-F9   (hex)		Cisco Systems, Inc
+001CF9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-F1   (hex)		SUPoX Technology Co. , LTD.
+001CF1     (base 16)		SUPoX Technology Co. , LTD.
+				7F, 419 , Chung San Rd. , Sec 2
+				Chung Ho  Taipei Hsien  235
+				TW
+
+00-1C-CE   (hex)		By Techdesign
+001CCE     (base 16)		By Techdesign
+				C/ Tomas Edison 5
+				Arganda del Rey  Madrid  28500
+				ES
+
+00-1C-F3   (hex)		EVS BROADCAST EQUIPMENT
+001CF3     (base 16)		EVS BROADCAST EQUIPMENT
+				Liege Science Park
+				Ougree  Liege  4102
+				BE
+
+00-1C-F4   (hex)		Media Technology Systems Inc
+001CF4     (base 16)		Media Technology Systems Inc
+				766 Lakefield Road
+				Westlake Village  CA  91377
+				US
+
+00-1C-E6   (hex)		INNES
+001CE6     (base 16)		INNES
+				80 avenue des Buttes de Coësmes
+				RENNES    35700
+				FR
+
+00-1C-B9   (hex)		KWANG SUNG ELECTRONICS CO., LTD.
+001CB9     (base 16)		KWANG SUNG ELECTRONICS CO., LTD.
+				201, WORLD VENTURE TOWN 60-24, GASAN-DONG GEUMCHUN-GU,
+				SEOUL    153-801
+				KR
+
+00-1D-03   (hex)		Design Solutions Inc.
+001D03     (base 16)		Design Solutions Inc.
+				81 David Love Place
+				Goleta  Ca  93117
+				US
+
+00-1C-A3   (hex)		Terra
+001CA3     (base 16)		Terra
+				Draugystes str. 22
+				Kaunas    LT-51256
+				LT
+
+00-1C-90   (hex)		Empacket Corporation
+001C90     (base 16)		Empacket Corporation
+				2-6-3 Nishi-Gotanda
+				Shinagawa  Tokyo  141-0031
+				JP
+
+00-1C-8E   (hex)		Alcatel-Lucent IPD
+001C8E     (base 16)		Alcatel-Lucent IPD
+				701 E. Middlefield Rd.
+				Mountain View  CA  94043
+				US
+
+00-1C-8F   (hex)		Advanced Electronic Design, Inc.
+001C8F     (base 16)		Advanced Electronic Design, Inc.
+				344 John L Dietsch Blvd., Unit #2
+				North Attleboro  MA  02763
+				US
+
+00-1C-88   (hex)		TRANSYSTEM INC.
+001C88     (base 16)		TRANSYSTEM INC.
+				No. 1-2, Li-Hsin Rd 1, Science-Based Industrial Park
+				Hsinchu    300
+				TW
+
+00-1C-86   (hex)		Cranite Systems, Inc.
+001C86     (base 16)		Cranite Systems, Inc.
+				121 Albright Way
+				Los Gatos  CA  95032
+				US
+
+00-1C-4F   (hex)		MACAB AB
+001C4F     (base 16)		MACAB AB
+				Vannhögsgatan 7
+				Trelleborg    23166
+				SE
+
+00-1C-4E   (hex)		TASA International Limited
+001C4E     (base 16)		TASA International Limited
+				5FÃ‚Â£Ã‚Â¬Building2Ã‚Â£Ã‚Â¬No.1295 ,Xin Jinqiao Road,
+				Shanghai    201206
+				CN
+
+00-1C-4B   (hex)		Gener8, Inc.
+001C4B     (base 16)		Gener8, Inc.
+				897 Independence Ave
+				Mountain View  CA  94043
+				US
+
+00-1C-9B   (hex)		FEIG ELECTRONIC GmbH
+001C9B     (base 16)		FEIG ELECTRONIC GmbH
+				Lange Straße 4
+				Weilburg  Hessen  35781
+				DE
+
+00-1C-95   (hex)		Opticomm Corporation
+001C95     (base 16)		Opticomm Corporation
+				6827 Nancy Ridge Dr
+				San Diego  CA  92121
+				US
+
+00-1C-97   (hex)		Enzytek Technology Inc.,
+001C97     (base 16)		Enzytek Technology Inc.,
+				7F, No.35, Hsueh Fu Rd.,
+				Hsinchu    300,
+				TW
+
+00-1C-70   (hex)		NOVACOMM LTDA
+001C70     (base 16)		NOVACOMM LTDA
+				RUA BEIJUI, 70
+				São Paulo    04689-000
+				BR
+
+00-1C-6E   (hex)		Newbury Networks, Inc.
+001C6E     (base 16)		Newbury Networks, Inc.
+				419 Boylston Street
+				Boston  MA  02116
+				US
+
+00-1C-6B   (hex)		COVAX  Co. Ltd
+001C6B     (base 16)		COVAX  Co. Ltd
+				3-27-22 kitahanada-cho kitaku
+				sakai-shi  oosaka  591-8002
+				JP
+
+00-1C-69   (hex)		Packet Vision Ltd
+001C69     (base 16)		Packet Vision Ltd
+				SC House
+				Maidenhead  Berks  SL6 4UB
+				GB
+
+00-1C-3D   (hex)		WaveStorm
+001C3D     (base 16)		WaveStorm
+				Rue d'Oradour-sur-Glâne
+				Paris  ÃƒÅ½le-de-France  75015
+				FR
+
+00-1C-7F   (hex)		Check Point Software Technologies
+001C7F     (base 16)		Check Point Software Technologies
+				3A Jabotinsky St.
+				Ramat Gan    52520
+				IL
+
+00-1C-78   (hex)		WYPLAY SAS
+001C78     (base 16)		WYPLAY SAS
+				200 avenue de Provence
+				ALLAUCH  BdR  13190
+				FR
+
+00-1C-58   (hex)		Cisco Systems, Inc
+001C58     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-5A   (hex)		Advanced Relay Corporation
+001C5A     (base 16)		Advanced Relay Corporation
+				1896 Columbia St
+				Eugene  OR  97403
+				US
+
+00-1C-65   (hex)		JoeScan, Inc.
+001C65     (base 16)		JoeScan, Inc.
+				4510 NE 68th Dr, Ste. 124
+				Vancouver  WA  98661
+				US
+
+00-1C-5F   (hex)		Winland Electronics, Inc.
+001C5F     (base 16)		Winland Electronics, Inc.
+				1950 Excel Drive
+				Mankato  MN  56001
+				US
+
+00-1C-40   (hex)		VDG-Security bv
+001C40     (base 16)		VDG-Security bv
+				Radonstraat 10-14
+				Zoetermeer  ZH  2718 TA
+				NL
+
+00-1C-3A   (hex)		Element Labs, Inc.
+001C3A     (base 16)		Element Labs, Inc.
+				3350 Scott Boulevard
+				Santa Clara  CA  95054
+				US
+
+00-1C-18   (hex)		Sicert S.r.L.
+001C18     (base 16)		Sicert S.r.L.
+				Via Bernardino Alimena, 128
+				Rome    00173
+				IT
+
+00-1C-1A   (hex)		Thomas Instrumentation, Inc
+001C1A     (base 16)		Thomas Instrumentation, Inc
+				133 Landing Rd
+				Cape May Court House  NJ  08210
+				US
+
+00-1C-0E   (hex)		Cisco Systems, Inc
+001C0E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-13   (hex)		OPTSYS TECHNOLOGY CO., LTD.
+001C13     (base 16)		OPTSYS TECHNOLOGY CO., LTD.
+				SUITE B-802 BUNDANG TECHNO PARK
+				SEONGNAM-SI  GYEONGGI-DO  463-760
+				KR
+
+00-1C-0B   (hex)		SmartAnt Telecom
+001C0B     (base 16)		SmartAnt Telecom
+				2F, No. 669, Sec. 4, Chung Hsing Rd., Chutung
+				Hsinchu    310
+				TW
+
+00-1B-D0   (hex)		IDENTEC SOLUTIONS
+001BD0     (base 16)		IDENTEC SOLUTIONS
+				Hertzstraße 10
+				Weinheim    69469
+				DE
+
+00-1B-CD   (hex)		DAVISCOMMS (S) PTE LTD
+001BCD     (base 16)		DAVISCOMMS (S) PTE LTD
+				Blk 70 Ubi Crescent #01-07
+				    408570
+				SG
+
+00-1B-CA   (hex)		Beijing Run Technology LTD. Company
+001BCA     (base 16)		Beijing Run Technology LTD. Company
+				4/F, Hangtian Technology Building
+				  Beijing  100037
+				CN
+
+00-1B-CC   (hex)		KINGTEK CCTV ALLIANCE CO., LTD.
+001BCC     (base 16)		KINGTEK CCTV ALLIANCE CO., LTD.
+				5F-3, NO. 106, SEC. 3, HSIN YI ROAD
+				TAIPEI    106
+				TW
+
+00-1B-F4   (hex)		KENWIN INDUSTRIAL(HK) LTD.
+001BF4     (base 16)		KENWIN INDUSTRIAL(HK) LTD.
+				RM.1512 15/F SHATIN GALLERIA
+				    
+				HK
+
+00-1B-F9   (hex)		Intellitect Water Ltd
+001BF9     (base 16)		Intellitect Water Ltd
+				Suite 19, Basepoint Business Centre
+				Christchurch  Dorset  BH23 ^NW
+				GB
+
+00-1B-FA   (hex)		G.i.N. mbH
+001BFA     (base 16)		G.i.N. mbH
+				Raiffeisenstraße 15
+				Griesheim  Hessen  64347
+				DE
+
+00-1B-F3   (hex)		TRANSRADIO SenderSysteme Berlin AG
+001BF3     (base 16)		TRANSRADIO SenderSysteme Berlin AG
+				Mertensstrasse 63
+				Berlin    13587
+				DE
+
+00-1C-21   (hex)		Nucsafe Inc.
+001C21     (base 16)		Nucsafe Inc.
+				601 Oak Ridge Turnpike
+				Oak Ridge  Tennessee  37830
+				US
+
+00-1C-1E   (hex)		emtrion GmbH
+001C1E     (base 16)		emtrion GmbH
+				Alter Schlachthof 45
+				Karlsruhe  Baden Wuerttemberg  76131
+				DE
+
+00-1B-DE   (hex)		Renkus-Heinz, Inc.
+001BDE     (base 16)		Renkus-Heinz, Inc.
+				19201 Cook St.
+				Foothill Ranch  CA  92610
+				US
+
+00-1B-DB   (hex)		Valeo VECS
+001BDB     (base 16)		Valeo VECS
+				2 Avenue Fernand Pouillon
+				CRETEIL  Ile de France  94042
+				FR
+
+00-1B-D8   (hex)		FLIR Systems Inc
+001BD8     (base 16)		FLIR Systems Inc
+				65 Challenger Road
+				Ridgefield Park  NJ  07660-2103
+				US
+
+00-1B-D4   (hex)		Cisco Systems, Inc
+001BD4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-2D   (hex)		FlexRadio Systems
+001C2D     (base 16)		FlexRadio Systems
+				8900 Marybank Dr.
+				Austin  TX  78750
+				US
+
+00-1C-2C   (hex)		Synapse
+001C2C     (base 16)		Synapse
+				132 Export Circle
+				Huntsville  AL  35806
+				US
+
+00-1C-08   (hex)		Echo360, Inc.
+001C08     (base 16)		Echo360, Inc.
+				11955 Freedom Drive
+				Reston  VA  20190
+				US
+
+00-1B-C8   (hex)		MIURA CO.,LTD
+001BC8     (base 16)		MIURA CO.,LTD
+				620-1,Nakanishisoto
+				Matsuyama  Ehime  799-2425
+				JP
+
+00-1B-C1   (hex)		HOLUX Technology, Inc.
+001BC1     (base 16)		HOLUX Technology, Inc.
+				1F, No. 30, R&D Rd. II,
+				Hsinchu    300
+				TW
+
+00-1B-BC   (hex)		Silver Peak Systems, Inc.
+001BBC     (base 16)		Silver Peak Systems, Inc.
+				471 El Camino Real
+				Santa Clara  CA  95050
+				US
+
+00-1B-73   (hex)		DTL Broadcast Ltd
+001B73     (base 16)		DTL Broadcast Ltd
+				Johnson's Estate
+				HAYES  Middlesex  UB3 3BA
+				GB
+
+00-1B-71   (hex)		Telular Corp.
+001B71     (base 16)		Telular Corp.
+				311 South Wacker Drive
+				Chicago  IL  60606
+				US
+
+00-1B-97   (hex)		Violin Technologies
+001B97     (base 16)		Violin Technologies
+				33 Wood Ave South
+				Iselin  NJ  08830
+				US
+
+00-1B-A8   (hex)		UBI&MOBI,.Inc
+001BA8     (base 16)		UBI&MOBI,.Inc
+				3F, Duido Bldg, #288-5, Yangjae-Dong
+				Seocho-Gu  Seoul  137-130
+				KR
+
+00-1B-81   (hex)		DATAQ Instruments, Inc.
+001B81     (base 16)		DATAQ Instruments, Inc.
+				241 Springside Drive
+				Akron  Ohio  44333
+				US
+
+00-1B-7D   (hex)		CXR Anderson Jacobson
+001B7D     (base 16)		CXR Anderson Jacobson
+				Rue de l'ornette
+				Abondant    28410
+				FR
+
+00-1B-79   (hex)		FAIVELEY TRANSPORT
+001B79     (base 16)		FAIVELEY TRANSPORT
+				ZI du bois de plante
+				LA VILLE AUX DAMES    37700
+				FR
+
+00-1B-65   (hex)		China Gridcom Co., Ltd
+001B65     (base 16)		China Gridcom Co., Ltd
+				21/F, Huaneng Building, No. 2068 Shennan Main Road
+				Shenzhen  Guangdong  0086
+				CN
+
+00-1B-88   (hex)		Divinet Access Technologies Ltd
+001B88     (base 16)		Divinet Access Technologies Ltd
+				4th Floor, Media Center,
+				Pune  Maharashtra  411007
+				IN
+
+00-1B-83   (hex)		Finsoft Ltd
+001B83     (base 16)		Finsoft Ltd
+				16-18 Hatton Garden
+				London    EC1N 8AT
+				GB
+
+00-1B-AB   (hex)		Telchemy, Incorporated
+001BAB     (base 16)		Telchemy, Incorporated
+				2905 Premiere Parkway
+				Duluth  GA  30097
+				US
+
+00-1B-AE   (hex)		Micro Control Systems, Inc
+001BAE     (base 16)		Micro Control Systems, Inc
+				5580 Enterprise Parkway
+				Fort Myers  Florida  33905
+				US
+
+00-1B-A0   (hex)		Awox
+001BA0     (base 16)		Awox
+				93, Place Pierre Duhem,
+				Montpellier  Herault  34000
+				FR
+
+00-1B-51   (hex)		Vector Technology Corp.
+001B51     (base 16)		Vector Technology Corp.
+				No.7, Lane12, Yajou Road.
+				Tucheng  Taipei  236
+				TW
+
+00-1B-54   (hex)		Cisco Systems, Inc
+001B54     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1B-4A   (hex)		W&W Communications, Inc.
+001B4A     (base 16)		W&W Communications, Inc.
+				2903 Bunker Hill Lane
+				Santa Clara  CA  95054
+				US
+
+00-1A-FA   (hex)		Welch Allyn, Inc.
+001AFA     (base 16)		Welch Allyn, Inc.
+				4619 Jordan Road
+				Skaneateles Falls  NY  13153-0187
+				US
+
+00-1A-F7   (hex)		dataschalt e+a GmbH
+001AF7     (base 16)		dataschalt e+a GmbH
+				An der Hülshorst 7-9
+				Lübeck    23568
+				DE
+
+00-1A-F3   (hex)		Samyoung Electronics
+001AF3     (base 16)		Samyoung Electronics
+				146-1, sangdaewon-dong, joongwon-gu
+				sungnam-shi  Gyunggi-do  462-807
+				KR
+
+00-1A-EF   (hex)		Loopcomm Technology, Inc.
+001AEF     (base 16)		Loopcomm Technology, Inc.
+				18F-1, No. 150, Jian Yi Rd.,
+				Chung-Ho City  Taipei Hsien  235
+				TW
+
+00-1A-EC   (hex)		Keumbee Electronics Co.,Ltd.
+001AEC     (base 16)		Keumbee Electronics Co.,Ltd.
+				3-26, Jangsang-dong, Sangrok-gu
+				Ansan-si  Kyungki-do  426-410
+				KR
+
+00-1B-44   (hex)		SanDisk Corporation
+001B44     (base 16)		SanDisk Corporation
+				601 McCarthy Boulevard
+				Milpitas  CA  95035
+				US
+
+00-1B-46   (hex)		Blueone Technology Co.,Ltd
+001B46     (base 16)		Blueone Technology Co.,Ltd
+				Room 309,3 Floor, 404 Building, ShangBu industrial
+				Shenzhen  Guangdong  518028
+				CN
+
+00-1B-40   (hex)		Network Automation mxc AB
+001B40     (base 16)		Network Automation mxc AB
+				Box 7294
+				Stockholm    10390
+				SE
+
+00-1B-42   (hex)		Wise & Blue
+001B42     (base 16)		Wise & Blue
+				#715-3 Anyang Megavalley
+				Anyang-Si  Gyunggi-Do  431-767
+				KR
+
+00-1B-35   (hex)		ChongQing JINOU Science & Technology Development CO.,Ltd
+001B35     (base 16)		ChongQing JINOU Science & Technology Development CO.,Ltd
+				Chuangyeyuan 208# Keyuan 3rd Road 106#
+				Chongqing    400030
+				CN
+
+00-1B-36   (hex)		Tsubata Engineering Co.,Ltd. (Head Office)
+001B36     (base 16)		Tsubata Engineering Co.,Ltd. (Head Office)
+				Koyanagi 1-2
+				Ibaraki  Osaka  567-0852
+				JP
+
+00-1B-39   (hex)		Proxicast
+001B39     (base 16)		Proxicast
+				312 Sunnyfield Drive
+				Glenshaw  PA  15116
+				US
+
+00-1B-3B   (hex)		Yi-Qing CO., LTD
+001B3B     (base 16)		Yi-Qing CO., LTD
+				310 ROOM,12F
+				TAIPEI    100
+				TW
+
+00-1B-20   (hex)		TPine Technology
+001B20     (base 16)		TPine Technology
+				3F, No.1, AN-I Rd,
+				Keelung    111
+				TW
+
+00-1B-22   (hex)		Palit Microsystems ( H.K.) Ltd.
+001B22     (base 16)		Palit Microsystems ( H.K.) Ltd.
+				Room 4-6,11F,Nan Fung Commercial Center
+				Kowloon    111
+				HK
+
+00-1B-1C   (hex)		Coherent
+001B1C     (base 16)		Coherent
+				1280 Blues Hills Ave.
+				Bloomfield  CT  06002
+				US
+
+00-1B-19   (hex)		IEEE I&M Society TC9
+001B19     (base 16)		IEEE I&M Society TC9
+				100 Bureau Dr., Mail Stop 8220
+				Gaithersburg  MD  20899-8220
+				US
+
+00-1B-64   (hex)		IsaacLandKorea Co., Ltd,
+001B64     (base 16)		IsaacLandKorea Co., Ltd,
+				Rm 608, Hangang-Hyundai-Hyel Bldg. 2-36,
+				Seoul    140-871
+				KR
+
+00-1B-26   (hex)		RON-Telecom ZAO
+001B26     (base 16)		RON-Telecom ZAO
+				15 A, Zarechnaya st.
+				Trehgorny  Chelyabinsk region  456080
+				RU
+
+00-1B-13   (hex)		Icron Technologies Corporation
+001B13     (base 16)		Icron Technologies Corporation
+				221 - 4664 Lougheed Highway
+				Burnaby  BC  V5C 5T5
+				CA
+
+00-1B-0F   (hex)		Petratec
+001B0F     (base 16)		Petratec
+				12 Derech HaSharon
+				Kfar Saba  Sharon  44271
+				IL
+
+00-1A-A9   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+001AA9     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+00-1A-A8   (hex)		Mamiya Digital Imaging Co., Ltd.
+001AA8     (base 16)		Mamiya Digital Imaging Co., Ltd.
+				2-2, 1-chome, Koraku
+				Bunkyo-ku  Tokyo  112-0004
+				JP
+
+00-1A-99   (hex)		Smarty (HZ) Information Electronics Co., Ltd
+001A99     (base 16)		Smarty (HZ) Information Electronics Co., Ltd
+				Yonghua Industrial District,Huishen Road,Zhenlong Town
+				HuiZhou  GuangDong  516227
+				CN
+
+00-1A-96   (hex)		ECLER S.A.
+001A96     (base 16)		ECLER S.A.
+				Motors 166-168
+				Barcelona    08038
+				ES
+
+00-1A-91   (hex)		FusionDynamic Ltd.
+001A91     (base 16)		FusionDynamic Ltd.
+				1 B.S.R. towers, 4-th floor
+				Ramat Gan    52573
+				IL
+
+00-1A-8C   (hex)		Sophos Ltd
+001A8C     (base 16)		Sophos Ltd
+				The Pentagon
+				Abingdon  Oxfordshire  OX14 3YP
+				GB
+
+00-1A-B3   (hex)		VISIONITE INC.
+001AB3     (base 16)		VISIONITE INC.
+				#707 Daeryung Technotown-2 569-21
+				Seoul    153-771
+				KR
+
+00-1A-CA   (hex)		Tilera Corporation
+001ACA     (base 16)		Tilera Corporation
+				1900 West Park Drive
+				Westborough  MA  01581
+				US
+
+00-1A-84   (hex)		V One Multimedia Pte Ltd
+001A84     (base 16)		V One Multimedia Pte Ltd
+				Blk 54, Kallang Bahru
+				    339336
+				SG
+
+00-1A-B9   (hex)		PMC
+001AB9     (base 16)		PMC
+				56, avenue Raspail
+				Saint Maur    94100
+				FR
+
+00-1A-BA   (hex)		Caton Overseas Limited
+001ABA     (base 16)		Caton Overseas Limited
+				Room 102, No. 101, Lane 91
+				Shanghai    200127
+				CN
+
+00-1A-D1   (hex)		FARGO CO., LTD.
+001AD1     (base 16)		FARGO CO., LTD.
+				4F. KYEMYUNG B/D
+				SEOUL    135 885
+				KR
+
+00-1A-3A   (hex)		Dongahelecomm
+001A3A     (base 16)		Dongahelecomm
+				678-3,Jeil-ri,Yanggi-myun,Cheoin-gu
+				Yongin-si  Gyeonggi-do  449-821
+				KR
+
+00-1A-3B   (hex)		Doah Elecom Inc.
+001A3B     (base 16)		Doah Elecom Inc.
+				8th fl. Century Plaza, 277-40
+				Seoul    133-123
+				KR
+
+00-1A-3C   (hex)		Technowave Ltd.
+001A3C     (base 16)		Technowave Ltd.
+				Sakurai Bldg.1F,
+				Musashino-shi  Tokyo  180-0006
+				JP
+
+00-1A-40   (hex)		A-FOUR TECH CO., LTD.
+001A40     (base 16)		A-FOUR TECH CO., LTD.
+				6F, No. 108, Min-Chuan Rd.,
+				Hsin-Tien  Taipei  23141
+				TW
+
+00-1A-30   (hex)		Cisco Systems, Inc
+001A30     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-7B   (hex)		Teleco, Inc.
+001A7B     (base 16)		Teleco, Inc.
+				430 Woodruff Rd.
+				Greenville  SC  29607
+				US
+
+00-1A-36   (hex)		Aipermon GmbH & Co. KG
+001A36     (base 16)		Aipermon GmbH & Co. KG
+				Zamdorfer Str. 100
+				Munich  Bavaria  D-81677
+				DE
+
+00-1A-26   (hex)		Deltanode Solutions AB
+001A26     (base 16)		Deltanode Solutions AB
+				Box 92 184
+				Stockholm    120 09
+				SE
+
+00-1A-6D   (hex)		Cisco Systems, Inc
+001A6D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-6E   (hex)		Impro Technologies
+001A6E     (base 16)		Impro Technologies
+				47B Gillits Rd
+				Pinetown  KwaZulu-Natal  3610
+				ZA
+
+00-1A-6C   (hex)		Cisco Systems, Inc
+001A6C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-4A   (hex)		Qumranet Inc.
+001A4A     (base 16)		Qumranet Inc.
+				530 Lakeside Drive
+				Sunnyvale  California  94085
+				US
+
+00-1A-3E   (hex)		Faster Technology LLC
+001A3E     (base 16)		Faster Technology LLC
+				1812 Avenue D
+				Katy  Texas  77493
+				US
+
+00-1A-63   (hex)		Elster Solutions, LLC,
+001A63     (base 16)		Elster Solutions, LLC,
+				208 South Rogers Lane
+				Raleigh  NC  27610
+				US
+
+00-1A-59   (hex)		Ircona
+001A59     (base 16)		Ircona
+				Unit 4B-1, Corporate Park
+				Blanchardstown  Dublin  15
+				IE
+
+00-1A-46   (hex)		Digital Multimedia Technology Co., Ltd
+001A46     (base 16)		Digital Multimedia Technology Co., Ltd
+				Doorim Bldg, 3rd Fl, 164-21 Poi-Dong,
+				Seoul  Kangnam-Gu  135-960
+				KR
+
+00-1A-25   (hex)		DELTA DORE
+001A25     (base 16)		DELTA DORE
+				BONNEMAIN
+				COMBOURG  BRETAGNE 35  35270
+				FR
+
+00-19-FE   (hex)		SHENZHEN SEECOMM TECHNOLOGY CO.,LTD.
+0019FE     (base 16)		SHENZHEN SEECOMM TECHNOLOGY CO.,LTD.
+				Room 609,404Yannan Road
+				ShenZhen  Guangdong  
+				CN
+
+00-19-FD   (hex)		Nintendo Co., Ltd.
+0019FD     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1A-0D   (hex)		HandHeld entertainment, Inc.
+001A0D     (base 16)		HandHeld entertainment, Inc.
+				539 Bryant Street, Suite 403
+				San Francisco  CA  94103
+				US
+
+00-1A-0E   (hex)		Cheng Uei Precision Industry Co.,Ltd
+001A0E     (base 16)		Cheng Uei Precision Industry Co.,Ltd
+				Junda Industry District, Dongkeng Town,Dongguan City
+				DongGuan  Guang Dong  523455
+				CN
+
+00-19-CD   (hex)		Chengdu ethercom information technology Ltd.
+0019CD     (base 16)		Chengdu ethercom information technology Ltd.
+				South Extension of Tianfu Wide Road No.7 department room 201
+				Chengdu  Sichuan  610041
+				CN
+
+00-19-D9   (hex)		Zeutschel GmbH
+0019D9     (base 16)		Zeutschel GmbH
+				Heerweg 2
+				Tübingen-Hirschau  BW  D-72070
+				DE
+
+00-1A-01   (hex)		Smiths Medical
+001A01     (base 16)		Smiths Medical
+				4350 Rivergreen Parkway
+				Duluth  GA  30096
+				US
+
+00-19-CA   (hex)		Broadata Communications, Inc
+0019CA     (base 16)		Broadata Communications, Inc
+				2545 W 237th St Ste K
+				Torrance  CA  90505
+				US
+
+00-19-D3   (hex)		TRAK Microwave
+0019D3     (base 16)		TRAK Microwave
+				4726 Eisenhower Blvd
+				Tampa  FL  33634
+				US
+
+00-19-C3   (hex)		Qualitrol
+0019C3     (base 16)		Qualitrol
+				Wildflower Way
+				Belfast  Co. Antrim  BT12 6TA
+				GB
+
+00-19-BE   (hex)		Altai Technologies Limited
+0019BE     (base 16)		Altai Technologies Limited
+				2/F, East Wing, Lakeside 2, 10 Science Park West Avenue,
+				Shatin  New Territories  
+				HK
+
+00-19-B4   (hex)		Intellio Ltd
+0019B4     (base 16)		Intellio Ltd
+				Gyarmat u. 99/B
+				Budapest    1147
+				HU
+
+00-19-BA   (hex)		Paradox Security Systems Ltd
+0019BA     (base 16)		Paradox Security Systems Ltd
+				780 Industrial Blvd
+				St-Eustache  Quebec  J7R 5V3
+				CA
+
+00-19-A1   (hex)		LG INFORMATION & COMM.
+0019A1     (base 16)		LG INFORMATION & COMM.
+				60-39,Kasan-dong,Kumchon-ku
+				Seoul    153-023
+				KR
+
+00-19-A8   (hex)		WiQuest Communications
+0019A8     (base 16)		WiQuest Communications
+				915 Enterprise Blvd.
+				Allen  Texas  75013
+				US
+
+00-19-ED   (hex)		Axesstel Inc.
+0019ED     (base 16)		Axesstel Inc.
+				6815 Flanders Sr.
+				San Diego  CA  92121
+				US
+
+00-19-F6   (hex)		Acconet (PTE) Ltd
+0019F6     (base 16)		Acconet (PTE) Ltd
+				No. 16 Ayer Rajah Crescent
+				Singapore    139965
+				SG
+
+00-1A-15   (hex)		gemalto e-Payment
+001A15     (base 16)		gemalto e-Payment
+				6 rue de la Verrerie
+				Meudon    92197
+				FR
+
+00-19-68   (hex)		Digital Video Networks(Shanghai) CO. LTD.
+001968     (base 16)		Digital Video Networks(Shanghai) CO. LTD.
+				9th Floor,Hechuan Building, No.1026 YiShan Rd
+				Shanghai    201103
+				CN
+
+00-19-7F   (hex)		PLANTRONICS, INC.
+00197F     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+00-19-7A   (hex)		MAZeT GmbH
+00197A     (base 16)		MAZeT GmbH
+				Goeschwitzer Str. 32
+				Jena    D-07745
+				DE
+
+00-19-78   (hex)		Datum Systems, Inc.
+001978     (base 16)		Datum Systems, Inc.
+				3666 Tiffani Ct.
+				Santa Cruz  CA  95065
+				US
+
+00-19-89   (hex)		Sonitrol Corporation
+001989     (base 16)		Sonitrol Corporation
+				1707 Orlando Central Pkwy.
+				Orlando  FL  32809
+				US
+
+00-19-80   (hex)		Gridpoint Systems
+001980     (base 16)		Gridpoint Systems
+				4043 Carling Avenue, Suite 200
+				Ottawa  Ontario  K2K 2A3
+				CA
+
+00-19-83   (hex)		CCT R&D Limited
+001983     (base 16)		CCT R&D Limited
+				18/F CCT Telecom Building
+				Fotan, Shatin  N.T.  000
+				HK
+
+00-19-4C   (hex)		Fujian Stelcom information & Technology CO.,Ltd
+00194C     (base 16)		Fujian Stelcom information & Technology CO.,Ltd
+				4F,Building A,Start Science Park, No.68,Hongshanyuan Rd
+				Fuzhou  Fujian  350002
+				CN
+
+00-19-4A   (hex)		TESTO AG
+00194A     (base 16)		TESTO AG
+				Testo Straße 1
+				Lenzkirch  Baden-Württemberg  79853
+				DE
+
+00-19-8A   (hex)		Northrop Grumman Systems Corp.
+00198A     (base 16)		Northrop Grumman Systems Corp.
+				7055 Troy Hill Drive
+				Elkridge  Maryland  21075
+				US
+
+00-19-60   (hex)		DoCoMo Systems, Inc.
+001960     (base 16)		DoCoMo Systems, Inc.
+				Meguro Techno Bldg. 2nd Floor
+				Shinagawa-ku  Tokyo  141-0031
+				JP
+
+00-19-5A   (hex)		Jenaer Antriebstechnik GmbH
+00195A     (base 16)		Jenaer Antriebstechnik GmbH
+				Buchaer Strasse 1
+				Jena  Thueringen  07745
+				DE
+
+00-19-6D   (hex)		Raybit Systems Korea, Inc
+00196D     (base 16)		Raybit Systems Korea, Inc
+				Dream Tower 1221
+				Seoul    158-718
+				KR
+
+00-19-70   (hex)		Z-Com, Inc.
+001970     (base 16)		Z-Com, Inc.
+				7F-2, NO.9, PROSPERITY 1ST RD.
+				HSINCHU    300
+				TW
+
+00-19-50   (hex)		Harman Multimedia
+001950     (base 16)		Harman Multimedia
+				8400 Balboa Blvd.
+				Northridge  CA  91329
+				US
+
+00-18-EE   (hex)		Videology Imaging Solutions, Inc.
+0018EE     (base 16)		Videology Imaging Solutions, Inc.
+				37 M Lark Industrial Parkway
+				Greenville  RI  02828-3001
+				US
+
+00-18-EB   (hex)		Blue Zen Enterprises Private Limited
+0018EB     (base 16)		Blue Zen Enterprises Private Limited
+				No 2&3 (First Floor) Kurban Ali Street
+				Chennai  Tamil Nadu  600002
+				IN
+
+00-19-24   (hex)		LBNL  Engineering
+001924     (base 16)		LBNL  Engineering
+				1 Cyclotron Rd.
+				Berkeley  CA  94720
+				US
+
+00-19-1A   (hex)		IRLINK
+00191A     (base 16)		IRLINK
+				HanYoung B/D 6F, 4-6
+				SEOUL    138-824
+				KR
+
+00-19-16   (hex)		PayTec AG
+001916     (base 16)		PayTec AG
+				Rosengartenstrasse 3
+				Zollikerberg  ZH  8125
+				CH
+
+00-19-0E   (hex)		Atech Technology Co., Ltd.
+00190E     (base 16)		Atech Technology Co., Ltd.
+				4 Fl., No. 103, Sec 2, Jiuzong Rd.
+				Taipei    114
+				TW
+
+00-19-39   (hex)		Gigamips
+001939     (base 16)		Gigamips
+				5th Floor, Yangjae Building, 261, Yangjae-Dong
+				Seocho-Gu  Seoul  137-130
+				KR
+
+00-19-3A   (hex)		OESOLUTIONS
+00193A     (base 16)		OESOLUTIONS
+				Technopark, 958-3 Daechon-Dong, Buk-Gu
+				Gwangju  Buk-Gu  500-706
+				KR
+
+00-18-E2   (hex)		Topdata Sistemas de Automacao Ltda
+0018E2     (base 16)		Topdata Sistemas de Automacao Ltda
+				Rua Dr Carvalho Chaves, 662
+				Curitiba  PR  80.220-010
+				BR
+
+00-19-22   (hex)		CM Comandos Lineares
+001922     (base 16)		CM Comandos Lineares
+				Av Eng Alberto de Zagottis, 760
+				São Paulo  SP  04675-085
+				BR
+
+00-19-1D   (hex)		Nintendo Co., Ltd.
+00191D     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-19-2F   (hex)		Cisco Systems, Inc
+00192F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-05   (hex)		SCHRACK Seconet AG
+001905     (base 16)		SCHRACK Seconet AG
+				Eibesbrunnergasse 18
+				Wien  Österreich  1122
+				AT
+
+00-19-07   (hex)		Cisco Systems, Inc
+001907     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-18-FB   (hex)		Compro Technology
+0018FB     (base 16)		Compro Technology
+				3/F No 12, Alley 6, Lane 45, Pao Shin Rd
+				Hsintien    231
+				TW
+
+00-18-C3   (hex)		CS Corporation
+0018C3     (base 16)		CS Corporation
+				CS-building, Pangyo seven venture valley 625
+				 Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+00-18-CA   (hex)		Viprinet GmbH
+0018CA     (base 16)		Viprinet GmbH
+				Basilikastraße 3
+				Bingen am Rhein    55411
+				DE
+
+00-18-C7   (hex)		Real Time Automation
+0018C7     (base 16)		Real Time Automation
+				2825 N Mayfair Rd Ste 11
+				Wauwatosa  WI  53222
+				US
+
+00-18-BB   (hex)		Eliwell Controls srl
+0018BB     (base 16)		Eliwell Controls srl
+				Via dell'Industria, 15
+				Pieve d'Alpago  Belluno  32010
+				IT
+
+00-18-BF   (hex)		Essence Technology Solution, Inc.
+0018BF     (base 16)		Essence Technology Solution, Inc.
+				B1, No. 207, Beisin Rd., Sec. 3
+				Sindian, Taipei County    231
+				TW
+
+00-18-8C   (hex)		Mobile Action Technology Inc.
+00188C     (base 16)		Mobile Action Technology Inc.
+				5F, No. 205-3, Sec. 3, Beishin Rd.
+				Shindian City, Taipei    231
+				TW
+
+00-18-8F   (hex)		Montgomery Technology, Inc.
+00188F     (base 16)		Montgomery Technology, Inc.
+				800 East Commerce Street
+				Greenville  AL  36037
+				US
+
+00-18-84   (hex)		Fon Technology S.L.
+001884     (base 16)		Fon Technology S.L.
+				Avda. Bruselas, n. 7, Planta 3, Alcobendas
+				  Madrid  28100
+				ES
+
+00-18-80   (hex)		Maxim Integrated Products
+001880     (base 16)		Maxim Integrated Products
+				160 Rio Robles
+				San Jose  CA  95134
+				US
+
+00-18-D0   (hex)		AtRoad,  A Trimble Company
+0018D0     (base 16)		AtRoad,  A Trimble Company
+				47071 Bayside Parkway
+				Fremont  California  94538
+				US
+
+00-18-D2   (hex)		High-Gain Antennas LLC
+0018D2     (base 16)		High-Gain Antennas LLC
+				11679 S. Cormorant Circle
+				Parker  CO  80134
+				US
+
+00-18-D3   (hex)		TEAMCAST
+0018D3     (base 16)		TEAMCAST
+				Centre Espace Performance
+				Saint Gregoire    35769
+				FR
+
+00-18-C6   (hex)		OPW Fuel Management Systems
+0018C6     (base 16)		OPW Fuel Management Systems
+				6900 Santa Fe Drive
+				Hodgkins  Illinois  60525
+				US
+
+00-18-7C   (hex)		INTERCROSS, LLC
+00187C     (base 16)		INTERCROSS, LLC
+				Novoselov str., 58/7
+				Ryazan    390049
+				RU
+
+00-18-70   (hex)		E28 Shanghai Limited
+001870     (base 16)		E28 Shanghai Limited
+				2/F Eastern Tower
+				Shanghai    200001
+				CN
+
+00-18-72   (hex)		Expertise Engineering
+001872     (base 16)		Expertise Engineering
+				4186 Sorrento Valley Blvd Suite -J
+				San Diego  CA  92121
+				US
+
+00-18-DC   (hex)		Prostar Co., Ltd.
+0018DC     (base 16)		Prostar Co., Ltd.
+				A-703 Technotown, 250-3 Hagye-dong, Nowon-gu
+				Seoul    139-230
+				KR
+
+00-18-D1   (hex)		Siemens Home & Office Comm. Devices
+0018D1     (base 16)		Siemens Home & Office Comm. Devices
+				4849 Alpha Rd.
+				Dallas  Texas  75244
+				US
+
+00-18-AA   (hex)		Protec Fire Detection plc
+0018AA     (base 16)		Protec Fire Detection plc
+				Protec House
+				Nelson  Lancashire  BB9 6LQ
+				GB
+
+00-18-96   (hex)		Great Well Electronic LTD
+001896     (base 16)		Great Well Electronic LTD
+				The Third Industrial  Area
+				Shenzhen  Guangdong  518110
+				US
+
+00-18-90   (hex)		RadioCOM, s.r.o.
+001890     (base 16)		RadioCOM, s.r.o.
+				Misikova 22
+				Bratislava    811 06
+				SK
+
+00-18-B9   (hex)		Cisco Systems, Inc
+0018B9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-18-B8   (hex)		New Voice International AG
+0018B8     (base 16)		New Voice International AG
+				St. Gallerstrasse 8
+				Lachen  SZ  8853
+				CH
+
+00-18-A1   (hex)		Tiqit Computers, Inc.
+0018A1     (base 16)		Tiqit Computers, Inc.
+				2215 Old Page Mill Rd
+				Palo Alto  CA  94304
+				US
+
+00-18-12   (hex)		Beijing Xinwei Telecom Technology Co., Ltd.
+001812     (base 16)		Beijing Xinwei Telecom Technology Co., Ltd.
+				Xinwei Bldg., No. 7 Zhongguancun Software Park,
+				Haidian District  Beijing  100094
+				CN
+
+00-18-0B   (hex)		Brilliant Telecommunications
+00180B     (base 16)		Brilliant Telecommunications
+				307 Orchard City Dr.
+				Campbell  CA  95008
+				US
+
+00-18-61   (hex)		Ooma, Inc.
+001861     (base 16)		Ooma, Inc.
+				555 University Avenue
+				Palo Alto  CA  94301
+				US
+
+00-18-5B   (hex)		Network Chemistry, Inc
+00185B     (base 16)		Network Chemistry, Inc
+				1700 Seaport Blvd
+				Redwood City  CA  94063
+				US
+
+00-18-55   (hex)		Aeromaritime Systembau GmbH
+001855     (base 16)		Aeromaritime Systembau GmbH
+				Ludwig-Erhard-Str. 16
+				D-85375  Neufahrn  
+				DE
+
+00-18-51   (hex)		SWsoft
+001851     (base 16)		SWsoft
+				13755 Sunrise Valley Drive, Suite 600
+				Herndon  VA  20171
+				US
+
+00-18-74   (hex)		Cisco Systems, Inc
+001874     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-18-69   (hex)		KINGJIM
+001869     (base 16)		KINGJIM
+				No.10-18,2-Chome
+				Chiyoda-ku  Tokyo  101-0031
+				JP
+
+00-18-56   (hex)		EyeFi, Inc
+001856     (base 16)		EyeFi, Inc
+				149 Commonwealth Drive
+				Menlo Park  CA  94025
+				US
+
+00-18-4E   (hex)		Lianhe Technologies, Inc.
+00184E     (base 16)		Lianhe Technologies, Inc.
+				3F, #119, DaHu ShanZhuang St.
+				Neihu District  Taipei City  114
+				TW
+
+00-18-4C   (hex)		Bogen Communications
+00184C     (base 16)		Bogen Communications
+				50 Spring St.
+				Ramsey  NJ  07446
+				US
+
+00-18-26   (hex)		Cale Access AB
+001826     (base 16)		Cale Access AB
+				Box 1031
+				Kista    SE-164 21
+				SE
+
+00-18-2D   (hex)		Artec Design
+00182D     (base 16)		Artec Design
+				Teaduspargi 6/1
+				Tallinn    12618
+				EE
+
+00-18-2A   (hex)		Taiwan Video & Monitor
+00182A     (base 16)		Taiwan Video & Monitor
+				3F, 141 Jen Ai Rd Sec. 3
+				Taipei City    106
+				TW
+
+00-18-3B   (hex)		CENITS Co., Ltd.
+00183B     (base 16)		CENITS Co., Ltd.
+				3F, Yangjae Bldg., 264-3
+				Seoul    137-130
+				KR
+
+00-18-3C   (hex)		Encore Software Limited
+00183C     (base 16)		Encore Software Limited
+				6F Leo Complex
+				Bangalore  Karnataka  560025
+				IN
+
+00-18-41   (hex)		High Tech Computer Corp
+001841     (base 16)		High Tech Computer Corp
+				23 Hsin Hua Rd.
+				Taoyuan    330
+				TW
+
+00-18-19   (hex)		Cisco Systems, Inc
+001819     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-18-10   (hex)		IPTrade S.A.
+001810     (base 16)		IPTrade S.A.
+				Parc Scientifique
+				Sart-Tilman  Wallonie  4031
+				BE
+
+00-18-09   (hex)		CRESYN
+001809     (base 16)		CRESYN
+				8-22,Jamwon-dong
+				Seoul  Seocho-Gu  #137-902
+				KR
+
+00-18-04   (hex)		E-TEK DIGITAL TECHNOLOGY LIMITED
+001804     (base 16)		E-TEK DIGITAL TECHNOLOGY LIMITED
+				UNIT1520,15/F.,TOWER 2,GRAND CENTURY PLACE,193 PRINCE EDWARD ROAD WEST,KOWLOON,
+				    
+				HK
+
+00-18-00   (hex)		UNIGRAND LTD
+001800     (base 16)		UNIGRAND LTD
+				7F-2, No.45, Jingde St., Jhonghe City,
+				    235
+				TW
+
+00-17-FD   (hex)		Amulet Hotkey
+0017FD     (base 16)		Amulet Hotkey
+				Cavalier Road
+				Heathfield  Devon  TQ12 6TQ
+				GB
+
+00-17-FC   (hex)		Suprema Inc.
+0017FC     (base 16)		Suprema Inc.
+				16F Parkview Office Tower,
+				Seongnam  Gyeonggi  463-863
+				KR
+
+00-17-FB   (hex)		FA
+0017FB     (base 16)		FA
+				628-7, Dungchon-Dong
+				Seoul  Kangseo-Ku  157-838
+				KR
+
+00-17-D8   (hex)		Magnum Semiconductor, Inc.
+0017D8     (base 16)		Magnum Semiconductor, Inc.
+				591 Yosemite Drive
+				Milpitas  CA  95035
+				US
+
+00-17-DA   (hex)		Spans Logic
+0017DA     (base 16)		Spans Logic
+				201 San Antonio Circle
+				Mountain View  CA  94040
+				US
+
+00-17-CF   (hex)		iMCA-GmbH
+0017CF     (base 16)		iMCA-GmbH
+				Dorfstrasse 28b
+				Itzehoe  Schleswig-Holstein  25524
+				DE
+
+00-17-B9   (hex)		Gambro Lundia AB
+0017B9     (base 16)		Gambro Lundia AB
+				BOX 10101
+				LUND  SkÃƒÂ¥ne  22010
+				SE
+
+00-17-B3   (hex)		Aftek Infosys Limited
+0017B3     (base 16)		Aftek Infosys Limited
+				Pawan Complex
+				Pune  Maharashtra  411 038
+				IN
+
+00-17-A2   (hex)		Camrivox Ltd.
+0017A2     (base 16)		Camrivox Ltd.
+				The Jeffreys Building
+				Cambridge  Cambridgeshire  CB4 0WS
+				GB
+
+00-17-5F   (hex)		XENOLINK Communications Co., Ltd.
+00175F     (base 16)		XENOLINK Communications Co., Ltd.
+				2nd Fl., Jungyou B/D 797-22
+				Seoul    135-930
+				KR
+
+00-17-5C   (hex)		SHARP CORPORATION
+00175C     (base 16)		SHARP CORPORATION
+				1, Takumi-Cho,
+				Sakai city  Osaka Prefecture  590-8522
+				JP
+
+00-17-9D   (hex)		Kelman Limited
+00179D     (base 16)		Kelman Limited
+				Rathdown Close
+				Lisburn  Co. Antrim  BT28 2RB
+				GB
+
+00-17-90   (hex)		HYUNDAI DIGITECH Co, Ltd.
+001790     (base 16)		HYUNDAI DIGITECH Co, Ltd.
+				13th Fl, Choung-Jin Bldg, 53-5
+				Seoul    140-719
+				KR
+
+00-17-91   (hex)		LinTech GmbH
+001791     (base 16)		LinTech GmbH
+				Friedrich-Engels-Str. 35
+				Berlin    13156
+				DE
+
+00-17-95   (hex)		Cisco Systems, Inc
+001795     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-17-59   (hex)		Cisco Systems, Inc
+001759     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-17-54   (hex)		Arkino HiTOP Corporation Limited
+001754     (base 16)		Arkino HiTOP Corporation Limited
+				5F., No.437, Tao Ying Rd
+				Taoyuan City  Taoyuan County  33068,
+				TW
+
+00-17-52   (hex)		DAGS, Inc
+001752     (base 16)		DAGS, Inc
+				C-510, Woolim Lion's Valley, 371-28, Gasan Dong, Geumcheon Ku
+				Seoul    153-786
+				KR
+
+00-17-56   (hex)		Vinci Labs Oy
+001756     (base 16)		Vinci Labs Oy
+				Finlaysoninkuja 21 A
+				Tampere  Länsi-Suomi  33210
+				FI
+
+00-17-77   (hex)		Obsidian Research Corporation
+001777     (base 16)		Obsidian Research Corporation
+				120 - 4445 Calgary Trail NW
+				Edmonton  Alberta  T6H 5R7
+				CA
+
+00-17-6A   (hex)		Avago Technologies
+00176A     (base 16)		Avago Technologies
+				350 West Trimble Rd
+				San Jose  CA  95131
+				US
+
+00-17-86   (hex)		wisembed
+001786     (base 16)		wisembed
+				808, hansin IT tower, 235 guro3-dong, guro-gu
+				Seoul    152-768
+				KR
+
+00-17-82   (hex)		LoBenn Inc.
+001782     (base 16)		LoBenn Inc.
+				150 Katimavik Road
+				Ottawa  Ontario  K2L 2N2
+				CA
+
+00-17-78   (hex)		Central Music Co.
+001778     (base 16)		Central Music Co.
+				0711-0712 Tower D, SOHO New Town
+				Beijing    100022
+				CN
+
+00-17-6B   (hex)		Kiyon, Inc.
+00176B     (base 16)		Kiyon, Inc.
+				9381 Judicial Drive
+				San Diego  CA  92121
+				US
+
+00-17-99   (hex)		SmarTire Systems Inc.
+001799     (base 16)		SmarTire Systems Inc.
+				Suite 150
+				Richmond  BC  V6V 2J1
+				CA
+
+00-17-7F   (hex)		Worldsmart Retech
+00177F     (base 16)		Worldsmart Retech
+				23 Hi-Tech Court
+				Eight Mile Plains  QLD  4113
+				AU
+
+00-17-6E   (hex)		DUCATI SISTEMI
+00176E     (base 16)		DUCATI SISTEMI
+				VIA MARCO EMILIO LEPIDO, 182
+				BOLOGNA    40132
+				IT
+
+00-17-74   (hex)		Elesta GmbH
+001774     (base 16)		Elesta GmbH
+				Gottlieb Daimler Strasse 1
+				Konstanz    78467
+				DE
+
+00-17-0C   (hex)		Twig Com Ltd.
+00170C     (base 16)		Twig Com Ltd.
+				Meriniitynkatu 11
+				  Salo  2400
+				FI
+
+00-17-0D   (hex)		Dust Networks Inc.
+00170D     (base 16)		Dust Networks Inc.
+				30695 Huntwood Ave.
+				Hayward  Ca.  94544
+				US
+
+00-17-0B   (hex)		Contela, Inc.
+00170B     (base 16)		Contela, Inc.
+				6-8 Soonae-dong, Bundang-gu,
+				Sungnam  Kyunggi-do  463-825
+				KR
+
+00-17-0F   (hex)		Cisco Systems, Inc
+00170F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-17-04   (hex)		Shinco Electronics Group Co.,Ltd
+001704     (base 16)		Shinco Electronics Group Co.,Ltd
+				No.5 Waihuan Road
+				Changzhou  Jiangsu  213022
+				CN
+
+00-17-07   (hex)		InGrid, Inc
+001707     (base 16)		InGrid, Inc
+				920 Cassatt Rd
+				Berwyn  Pa  19312
+				US
+
+00-17-12   (hex)		ISCO International
+001712     (base 16)		ISCO International
+				1001 Cambridge Drive
+				Elk Grove Village  IL  60007
+				US
+
+00-16-D8   (hex)		Senea AB
+0016D8     (base 16)		Senea AB
+				Företagsallen 12
+				Åkersberga    18484
+				SE
+
+00-16-D6   (hex)		TDA Tech Pty Ltd
+0016D6     (base 16)		TDA Tech Pty Ltd
+				210 / 54 Currie Street
+				Adelaide  South Australia  5000
+				AU
+
+00-16-D5   (hex)		Synccom Co., Ltd
+0016D5     (base 16)		Synccom Co., Ltd
+				#306 Myungi e-space  218-20
+				Anyang-si  Kyungki-do  430-817
+				KR
+
+00-16-C9   (hex)		NAT Seattle, Inc.
+0016C9     (base 16)		NAT Seattle, Inc.
+				22125 17th Ave SE
+				Bothell  WA  98021
+				US
+
+00-16-C6   (hex)		North Atlantic Industries
+0016C6     (base 16)		North Atlantic Industries
+				170 Wilbur Place
+				Bohemia  NY  11716
+				US
+
+00-17-24   (hex)		Studer Professional Audio GmbH
+001724     (base 16)		Studer Professional Audio GmbH
+				Althardstrasse 30
+				Regensdorf  Zürich  CH-8105
+				CH
+
+00-17-02   (hex)		Osung Midicom Co., Ltd
+001702     (base 16)		Osung Midicom Co., Ltd
+				231-18, Dorim2-dong,
+				Seoul,  Youngdeungpo-gu  150-832
+				KR
+
+00-16-F7   (hex)		L-3 Communications, Aviation Recorders
+0016F7     (base 16)		L-3 Communications, Aviation Recorders
+				100 Cattlemen Rd.
+				Sarasota  FL  34232
+				US
+
+00-17-2D   (hex)		Axcen Photonics Corporation
+00172D     (base 16)		Axcen Photonics Corporation
+				6F, No. 119, Baujung Rd.,
+				Shindian City, Taipei    231
+				TW
+
+00-17-41   (hex)		DEFIDEV
+001741     (base 16)		DEFIDEV
+				20 rue Raymond Marcheron
+				Vanves    92170
+				FR
+
+00-17-38   (hex)		International Business Machines
+001738     (base 16)		International Business Machines
+				1 Azrieli Center
+				Tel Aviv    67021
+				IL
+
+00-17-1E   (hex)		Theo Benning GmbH & Co. KG
+00171E     (base 16)		Theo Benning GmbH & Co. KG
+				Muensterstraße 135-137
+				Bocholt  NRW  46397
+				DE
+
+00-16-D2   (hex)		Caspian
+0016D2     (base 16)		Caspian
+				170 Baytech Drive
+				San Jose  CA  95134
+				US
+
+00-16-A4   (hex)		Ezurio Ltd
+0016A4     (base 16)		Ezurio Ltd
+				Unit 2
+				London    NW9 5HD
+				GB
+
+00-16-99   (hex)		Tonic DVB Marketing Ltd
+001699     (base 16)		Tonic DVB Marketing Ltd
+				Unit B, 10/F, Summit Building,
+				Hung Hom  Kowloon  
+				HK
+
+00-16-9B   (hex)		Alstom Transport
+00169B     (base 16)		Alstom Transport
+				11, 13 avenue de Bel Air
+				Villeurbanne  Rhone  69100
+				FR
+
+00-16-90   (hex)		J-TEK INCORPORATION
+001690     (base 16)		J-TEK INCORPORATION
+				2F-1, No. 83, Sec. 2, GongDaoWu Rd.,
+				Hsinchu City    30070
+				TW
+
+00-16-93   (hex)		PowerLink Technology Inc.
+001693     (base 16)		PowerLink Technology Inc.
+				N0. 18, Alley 1, Lane 151, Sec. 1, Jhongsing Rd., Wugu Township
+				Taipei Hsien    248
+				TW
+
+00-16-98   (hex)		T&A Mobile Phones
+001698     (base 16)		T&A Mobile Phones
+				4/F, South Building,No.2966, Jinke Road
+				Pudong  Shanghai  201203
+				CN
+
+00-16-62   (hex)		Liyuh Technology Ltd.
+001662     (base 16)		Liyuh Technology Ltd.
+				4F, No.19, Ln.221, Ganqian Rd., Neihu District
+				Taipei    114
+				TW
+
+00-16-61   (hex)		Novatium Solutions (P) Ltd
+001661     (base 16)		Novatium Solutions (P) Ltd
+				3rd Floor, Temple Towers, #672
+				Chennai  Tamil Nadu  600035
+				IN
+
+00-16-64   (hex)		Prod-El SpA
+001664     (base 16)		Prod-El SpA
+				Via Palmanova 185
+				Milano  MI  20132
+				IT
+
+00-16-5E   (hex)		Precision I/O
+00165E     (base 16)		Precision I/O
+				4005 Miranda Ave., Suite 210
+				Palo Alto  CA  94304-1232
+				US
+
+00-16-58   (hex)		Fusiontech Technologies Inc.
+001658     (base 16)		Fusiontech Technologies Inc.
+				6F, No.78, Cheng Kung Rd., Sec. 1,
+				Taipei    115
+				TW
+
+00-16-A5   (hex)		Tandberg Storage ASA
+0016A5     (base 16)		Tandberg Storage ASA
+				Postboks 191
+				    
+				NO
+
+00-16-A1   (hex)		3Leaf Networks
+0016A1     (base 16)		3Leaf Networks
+				3255-1 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+00-16-66   (hex)		Quantier Communication Inc.
+001666     (base 16)		Quantier Communication Inc.
+				1F, No. 36, Industry E. Rd IV,
+				Hsin-Chu    300
+				TW
+
+00-16-81   (hex)		Vector Informatik GmbH
+001681     (base 16)		Vector Informatik GmbH
+				Ingersheimer Str. 24
+				Stuttgart  Baden-Württemberg  70499
+				DE
+
+00-BA-C0   (hex)		Biometric Access Company
+00BAC0     (base 16)		Biometric Access Company
+				2555 North IH 35
+				Round Rock  Texas  78664
+				US
+
+00-16-85   (hex)		Elisa Oyj
+001685     (base 16)		Elisa Oyj
+				Elektroniikkatie 4
+				90570  Oulu  
+				FI
+
+00-16-80   (hex)		Bally Gaming + Systems
+001680     (base 16)		Bally Gaming + Systems
+				950 Sandhill Road
+				Reno  NV  89521
+				US
+
+00-16-96   (hex)		QDI Technology (H.K.) Limited
+001696     (base 16)		QDI Technology (H.K.) Limited
+				16/F, Standard Chartered Bank Building 4-4A
+				Hong Kong    
+				CN
+
+00-16-BE   (hex)		INFRANET, Inc.
+0016BE     (base 16)		INFRANET, Inc.
+				8th Floor, Cowell B/D, 66-1
+				Seoul    137-040
+				KR
+
+00-16-AB   (hex)		Dansensor A/S
+0016AB     (base 16)		Dansensor A/S
+				Roennedevej 18
+				Ringsted    DK-4100
+				DK
+
+00-16-53   (hex)		LEGO System A/S IE Electronics Division
+001653     (base 16)		LEGO System A/S IE Electronics Division
+				Aastvej 1
+				  Billund Kommune  7190
+				DK
+
+00-16-52   (hex)		Hoatech Technologies, Inc.
+001652     (base 16)		Hoatech Technologies, Inc.
+				1F., No.224, Guosheng St.
+				Zhubei  HsinChu Hsien  30244
+				TW
+
+00-16-50   (hex)		 Kratos EPD    
+001650     (base 16)		 Kratos EPD    
+				Herley General Microwave Israel.
+				KIBBUTZ EYAL    45840
+				IL
+
+00-15-FA   (hex)		Cisco Systems, Inc
+0015FA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-FC   (hex)		Littelfuse Startco
+0015FC     (base 16)		Littelfuse Startco
+				3714 Kinnear Place
+				Saskatoon  SK  S7P 0A6
+				CA
+
+00-15-F7   (hex)		Wintecronics Ltd.
+0015F7     (base 16)		Wintecronics Ltd.
+				No. 716, 11F-3, Jung Jeng Rd.
+				Chung Ho City  Taipei Hsien  235
+				TW
+
+00-16-30   (hex)		Vativ Technologies
+001630     (base 16)		Vativ Technologies
+				9339 Genesee Avenue
+				San Diego  CA  92121
+				US
+
+00-16-2F   (hex)		Geutebrück GmbH
+00162F     (base 16)		Geutebrück GmbH
+				Im Nassen 7-9
+				Windhagen    53578
+				DE
+
+00-16-2B   (hex)		Togami Electric Mfg.co.,Ltd.
+00162B     (base 16)		Togami Electric Mfg.co.,Ltd.
+				1-1 Ohtakara-Kitamachi
+				  Saga.PRF  840-0802
+				JP
+
+00-16-42   (hex)		Pangolin
+001642     (base 16)		Pangolin
+				9501 Satellite Boulevard, Suite 109
+				Orlando  FL  32837
+				US
+
+00-16-37   (hex)		CITEL SpA
+001637     (base 16)		CITEL SpA
+				Via L. G. Columella, 36
+				Milan  MI  20128
+				IT
+
+00-16-08   (hex)		Sequans Communications
+001608     (base 16)		Sequans Communications
+				19 Le Parvis de la Défense
+				  PARIS LA DEFENSE CEDEX  92073
+				FR
+
+00-16-24   (hex)		Teneros, Inc.
+001624     (base 16)		Teneros, Inc.
+				215 Castro St.
+				Mt. View  CA  94041
+				US
+
+00-15-F8   (hex)		Kingtronics Industrial Co. Ltd.
+0015F8     (base 16)		Kingtronics Industrial Co. Ltd.
+				Penthouse, Century Centre,
+				Kowloon    
+				HK
+
+00-16-1C   (hex)		e:cue
+00161C     (base 16)		e:cue
+				Friedrich-List-Strasse 23
+				Paderborn    33100
+				DE
+
+00-15-B8   (hex)		Tahoe
+0015B8     (base 16)		Tahoe
+				ul. Uniwersytecka 1
+				Wroclaw    50951
+				PL
+
+00-15-B6   (hex)		ShinMaywa Industries, Ltd.
+0015B6     (base 16)		ShinMaywa Industries, Ltd.
+				1-1 Shinmeiwa-cho
+				Takarazuka  Hyogo  665-8550
+				JP
+
+00-15-B0   (hex)		AUTOTELENET CO.,LTD
+0015B0     (base 16)		AUTOTELENET CO.,LTD
+				2F, 898-24, Hogye2-dong, Dongan-gu
+				Anyang-City  Kyunggi-do  431-836
+				KR
+
+00-15-B1   (hex)		Ambient Corporation
+0015B1     (base 16)		Ambient Corporation
+				79 Chapel St.
+				Newton  MA  02458
+				US
+
+00-15-9F   (hex)		Terascala, Inc.
+00159F     (base 16)		Terascala, Inc.
+				145 Bodwell Street
+				Avon  MA  02322
+				US
+
+00-15-9E   (hex)		Mad Catz Interactive Inc
+00159E     (base 16)		Mad Catz Interactive Inc
+				Units 3+4 West Point Row
+				Bristol  South Gloucestershire  BS32 4QG
+				US
+
+00-15-A1   (hex)		ECA-SINTERS
+0015A1     (base 16)		ECA-SINTERS
+				5, rue Paul Mesplé
+				TOULOUSE  Cedex 01  31106
+				FR
+
+00-15-93   (hex)		U4EA Technologies Inc.
+001593     (base 16)		U4EA Technologies Inc.
+				48860 Milmont Drive
+				Fremont  CA  94538
+				US
+
+00-15-81   (hex)		MAKUS Inc.
+001581     (base 16)		MAKUS Inc.
+				4F Daedo Bldg. 748-14 Yeoksam-dong, Kangnam-gu
+				  Seoul  135-080
+				US
+
+00-15-7A   (hex)		Telefin S.p.A.
+00157A     (base 16)		Telefin S.p.A.
+				Via Albere 87/A
+				Verona  VR  37138
+				IT
+
+00-15-C3   (hex)		Ruf Telematik AG
+0015C3     (base 16)		Ruf Telematik AG
+				Ruetistrasse 13
+				Schlieren  ZH  8952
+				CH
+
+00-15-E6   (hex)		MOBILE TECHNIKA Inc.
+0015E6     (base 16)		MOBILE TECHNIKA Inc.
+				Sotobori Sky Bld. 5th Floor
+				Shinjuku-ku  Tokyo  162-0845
+				JP
+
+00-15-DB   (hex)		Canesta Inc.
+0015DB     (base 16)		Canesta Inc.
+				965 West Maude Avenue
+				Sunnyvale  California  94085
+				US
+
+00-15-8D   (hex)		Jennic Ltd
+00158D     (base 16)		Jennic Ltd
+				Furnival Street
+				Sheffield  Yorkshire  S1 4QT
+				US
+
+00-15-84   (hex)		Schenck Process GmbH
+001584     (base 16)		Schenck Process GmbH
+				Pallaswiesenstraße 100
+				Darmstadt  Hessen  64293
+				DE
+
+00-15-CC   (hex)		UQUEST, LTD.
+0015CC     (base 16)		UQUEST, LTD.
+				Sannomiya Intes Bldg. 8F
+				KOBE  HYOGO  651-0086
+				JP
+
+00-15-C6   (hex)		Cisco Systems, Inc
+0015C6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-D7   (hex)		Reti Corporation
+0015D7     (base 16)		Reti Corporation
+				6F,No 13, Lane 120, Sec 1, Neihu Rd.,
+				Taipei City    114
+				TW
+
+00-15-CB   (hex)		Surf Communication Solutions Ltd.
+0015CB     (base 16)		Surf Communication Solutions Ltd.
+				P.O. Box 343
+				Yokneam    20164
+				IL
+
+00-15-A7   (hex)		Robatech AG
+0015A7     (base 16)		Robatech AG
+				Pilatusring 10
+				Muri  AG  5630
+				CH
+
+00-15-23   (hex)		Meteor Communications Corporation
+001523     (base 16)		Meteor Communications Corporation
+				22614 66th Avenue South
+				Kent  WA  98032
+				US
+
+00-15-24   (hex)		Numatics, Inc.
+001524     (base 16)		Numatics, Inc.
+				46280 Dylan Dr.
+				Novi  Michigan  48377
+				US
+
+00-15-1B   (hex)		Isilon Systems Inc.
+00151B     (base 16)		Isilon Systems Inc.
+				3101 Western Avenue
+				Seattle  WA  98121
+				US
+
+00-15-73   (hex)		NewSoft  Technology Corporation
+001573     (base 16)		NewSoft  Technology Corporation
+				3F, 19-3, SanChong RD, NanKang,
+				Taipei    115
+				US
+
+00-15-75   (hex)		Nevis Networks Inc.
+001575     (base 16)		Nevis Networks Inc.
+				3945 Freedom Circle
+				Santa Clara  CA  95054
+				US
+
+00-15-6C   (hex)		SANE SYSTEM CO., LTD
+00156C     (base 16)		SANE SYSTEM CO., LTD
+				0-2 Heungan-daero 439 beon-gil Dongan-gu
+				Anyang-si  Kyunggi-do  431-804
+				KR
+
+00-15-6A   (hex)		DG2L Technologies Pvt. Ltd.
+00156A     (base 16)		DG2L Technologies Pvt. Ltd.
+				AML Center 1, Gnd. Floor, 8 Mahal Indl. Est.
+				Mumbai  Maharashtra  400093
+				IN
+
+00-15-29   (hex)		N3 Corporation
+001529     (base 16)		N3 Corporation
+				#402 GwangMyeong Techno Town
+				GyeongGi-Do    423-031
+				KR
+
+00-15-2D   (hex)		TenX Networks, LLC
+00152D     (base 16)		TenX Networks, LLC
+				4855 Wiley Post Way
+				Salt Lake City  UT  84116
+				US
+
+00-15-6F   (hex)		Xiranet Communications GmbH
+00156F     (base 16)		Xiranet Communications GmbH
+				Bertolt-Brecht-Allee 24
+				Dresden  Saxony  01309
+				US
+
+00-15-72   (hex)		Red-Lemon
+001572     (base 16)		Red-Lemon
+				Unit 4, 9/F, Paramount Building
+				Chai Wan    
+				HK
+
+00-15-67   (hex)		RADWIN Inc.
+001567     (base 16)		RADWIN Inc.
+				900 Corporate Drive
+				Mahwah  NJ  07430
+				US
+
+00-15-5B   (hex)		Sampo Corporation
+00155B     (base 16)		Sampo Corporation
+				216 Chung Shan Road,
+				  Taipei Hsien  220
+				TW
+
+00-15-53   (hex)		Cytyc Corporation
+001553     (base 16)		Cytyc Corporation
+				250 Campus Dive
+				Marlborough  MA  01752
+				US
+
+00-15-51   (hex)		RadioPulse Inc.
+001551     (base 16)		RadioPulse Inc.
+				2nd fl. Hans B/D, 111-55
+				Seoul    134-883
+				KR
+
+00-15-52   (hex)		Wi-Gear Inc.
+001552     (base 16)		Wi-Gear Inc.
+				340 Church Street
+				San Francisco  CA  94114
+				US
+
+00-15-3E   (hex)		Q-Matic Sweden AB
+00153E     (base 16)		Q-Matic Sweden AB
+				Neongatan 8
+				Molndal    431 53
+				SE
+
+00-15-42   (hex)		MICROHARD S.R.L.
+001542     (base 16)		MICROHARD S.R.L.
+				Via Primo Maggio 36
+				San Vittore Olona  Milano  20028
+				IT
+
+00-15-4E   (hex)		IEC
+00154E     (base 16)		IEC
+				3, rue de Varembé
+				CH - 1211  GENEVA  20
+				DE
+
+00-15-50   (hex)		Nits Technology Inc
+001550     (base 16)		Nits Technology Inc
+				2FL. No. 8 Alley 16, Lane 235, Bauchiau Rd.,
+				Shindian City  Taipei Hsien  231
+				TW
+
+00-15-46   (hex)		ITG Worldwide Sdn Bhd
+001546     (base 16)		ITG Worldwide Sdn Bhd
+				2, Jalan AstakaU8/83
+				Shah Alam  Selangor Darul Ehsan  40150
+				MY
+
+00-15-5D   (hex)		Microsoft Corporation
+00155D     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				Redmond  WA  98052-8300
+				US
+
+00-15-62   (hex)		Cisco Systems, Inc
+001562     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-14-E1   (hex)		Data Display AG
+0014E1     (base 16)		Data Display AG
+				Industriestraße 1
+				Germering  Bayern  82110
+				DE
+
+00-14-E3   (hex)		mm-lab GmbH
+0014E3     (base 16)		mm-lab GmbH
+				Stammheimer Strasse 10
+				Kornwestheim    
+				DE
+
+00-14-D9   (hex)		IP Fabrics, Inc.
+0014D9     (base 16)		IP Fabrics, Inc.
+				3720 SW 141st Avenue 
+				Beaverton  Oregon  97006
+				US
+
+00-14-D6   (hex)		Jeongmin Electronics Co.,Ltd.
+0014D6     (base 16)		Jeongmin Electronics Co.,Ltd.
+				#710, Byuksan Digital Valley 2,
+				Seoul    153 783
+				KR
+
+00-14-F9   (hex)		Vantage Controls
+0014F9     (base 16)		Vantage Controls
+				1061 South 800 East
+				Orem  UT  84097
+				US
+
+00-14-E7   (hex)		Stolinx,. Inc
+0014E7     (base 16)		Stolinx,. Inc
+				3F Ohchang Bldg., 61 Yangjae-dong
+				Seoul    137-889
+				KR
+
+00-14-E9   (hex)		Nortech International
+0014E9     (base 16)		Nortech International
+				32A Wiganthorpe Road
+				Pietermartizburg  KwaZulu Natal  3201
+				ZA
+
+00-14-ED   (hex)		Airak, Inc.
+0014ED     (base 16)		Airak, Inc.
+				21641 Beaumeade Circle
+				Ashburn  Virginia  20147
+				US
+
+00-14-CE   (hex)		NF CORPORATION
+0014CE     (base 16)		NF CORPORATION
+				6-3-20, Tsunashima-higashi
+				Yokohama  Kanagawa  223-8508
+				JP
+
+00-14-D0   (hex)		BTI Systems Inc.
+0014D0     (base 16)		BTI Systems Inc.
+				50 Northside Road
+				Ottawa  Ontario  K2H 5Z6
+				CA
+
+00-15-03   (hex)		PROFIcomms s.r.o.
+001503     (base 16)		PROFIcomms s.r.o.
+				Turgenevova 5
+				Brno  EU/Europe  618 00
+				CZ
+
+00-15-09   (hex)		Plus Technology Co., Ltd
+001509     (base 16)		Plus Technology Co., Ltd
+				Office #205,  Gayang Techno-town,
+				  Seoul  157-810
+				KR
+
+00-14-F0   (hex)		Business Security OL AB
+0014F0     (base 16)		Business Security OL AB
+				Box 110 65
+				Lund    220 11
+				SE
+
+00-14-F2   (hex)		Cisco Systems, Inc
+0014F2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-10   (hex)		Techsphere Co., Ltd
+001510     (base 16)		Techsphere Co., Ltd
+				4F, Wonil Bldg., 980-54, Bangbae-dong, SeoCho-gu
+				  Seoul  137-060
+				KR
+
+00-15-13   (hex)		EFS sas
+001513     (base 16)		EFS sas
+				BP 34
+				MILLERY    F-69390
+				US
+
+00-14-8B   (hex)		Globo Electronic GmbH & Co. KG
+00148B     (base 16)		Globo Electronic GmbH & Co. KG
+				Industriestrasse 4a
+				Niederlauer  Bayern  97618
+				DE
+
+00-14-90   (hex)		ASP Corporation
+001490     (base 16)		ASP Corporation
+				465 Industrial Park Road
+				Hartwell  GA  30643
+				US
+
+00-14-84   (hex)		Cermate Technologies Inc.
+001484     (base 16)		Cermate Technologies Inc.
+				7F-1, No 168 Lien-Chen Rd.
+				Chung-Ho Dist  New Taipei City  
+				TW
+
+00-14-79   (hex)		NEC Magnus Communications,Ltd.
+001479     (base 16)		NEC Magnus Communications,Ltd.
+				 22-23, Kaigan 3-chome
+				Minato-ku  Tokyo  108-0022
+				JP
+
+00-14-7B   (hex)		Iteris, Inc.
+00147B     (base 16)		Iteris, Inc.
+				1515 S. Manchester Ave.
+				Anaheim  CA  92802
+				US
+
+00-14-BB   (hex)		Open Interface North America
+0014BB     (base 16)		Open Interface North America
+				506 2nd Avenue, Suite 420
+				Seattle  WA  98104
+				US
+
+00-14-70   (hex)		Prokom Software SA
+001470     (base 16)		Prokom Software SA
+				Al. Jerozolimskie 65/79
+				Warszawa  Mazowieckie  00-697
+				PL
+
+00-14-67   (hex)		ArrowSpan Inc.
+001467     (base 16)		ArrowSpan Inc.
+				4699 Old Ironsides Dr. Suite 100
+				Santa Clara  CA  95054
+				US
+
+00-14-5F   (hex)		ADITEC CO. LTD
+00145F     (base 16)		ADITEC CO. LTD
+				4F Hyowon B/D, 99-5,
+				  Seoul  138-805
+				KR
+
+00-14-88   (hex)		Akorri
+001488     (base 16)		Akorri
+				11 Falcon Ridge Dr
+				Hopkinton  MA  01748
+				US
+
+00-14-7A   (hex)		Eubus GmbH
+00147A     (base 16)		Eubus GmbH
+				Gollierstraße 70  Aufgang E  4.Stock
+				Munich  Bavaria  80339
+				DE
+
+00-14-6D   (hex)		RF Technologies
+00146D     (base 16)		RF Technologies
+				3125 N 126th Street
+				Brookfield  WI  53005
+				US
+
+00-14-AC   (hex)		Bountiful WiFi
+0014AC     (base 16)		Bountiful WiFi
+				707 West 700 South
+				Woods Cross  Utah  84087
+				US
+
+00-14-A8   (hex)		Cisco Systems, Inc
+0014A8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-14-A0   (hex)		Accsense, Inc.
+0014A0     (base 16)		Accsense, Inc.
+				460 Ward Drive
+				Santa Barbara  California  93111
+				US
+
+00-14-59   (hex)		Moram Co., Ltd.
+001459     (base 16)		Moram Co., Ltd.
+				3F, Manwol Bldg., 1022-4
+				Suwon-shi  Gyounggi-do  443-813
+				KR
+
+00-14-57   (hex)		T-VIPS AS
+001457     (base 16)		T-VIPS AS
+				Ostensjoveien 18
+				  Oslo  NO-0661
+				NO
+
+00-14-53   (hex)		ADVANTECH TECHNOLOGIES CO.,LTD
+001453     (base 16)		ADVANTECH TECHNOLOGIES CO.,LTD
+				#1202 ACE TECHNO TOWER, 684-1
+				  Seoul  157-721
+				KR
+
+00-14-54   (hex)		Symwave
+001454     (base 16)		Symwave
+				10251 Vista Sorrento Parkway
+				San Diego  CA  92121
+				US
+
+00-13-F8   (hex)		Dex Security Solutions
+0013F8     (base 16)		Dex Security Solutions
+				10 Junction Road Parktown
+				Johannesburg  Guteng  2000
+				ZA
+
+00-13-F9   (hex)		Cavera Systems
+0013F9     (base 16)		Cavera Systems
+				2355 Oakland Rd, Suite#33
+				San Jose  CA  95131
+				US
+
+00-13-F2   (hex)		Klas Ltd
+0013F2     (base 16)		Klas Ltd
+				Bracetown Business Park
+				Clonee  Co Meath  
+				IE
+
+00-13-F7   (hex)		SMC Networks, Inc.
+0013F7     (base 16)		SMC Networks, Inc.
+				38 Tesla
+				Irvine  CA  92618
+				US
+
+00-14-4B   (hex)		Hifn, Inc.
+00144B     (base 16)		Hifn, Inc.
+				750 University Ave
+				Los Gatos  CA  95032
+				US
+
+00-14-41   (hex)		Innovation Sound Technology Co., LTD.
+001441     (base 16)		Innovation Sound Technology Co., LTD.
+				Building 2th.,Cuihai Industrial Area,
+				Shenzhen  Guangdong  518103
+				CN
+
+00-14-3C   (hex)		Rheinmetall Canada Inc.
+00143C     (base 16)		Rheinmetall Canada Inc.
+				225 boul du seminaire sud
+				St-Jean-sur-Richelieu  Quebec  J3B 8E9
+				CA
+
+00-14-1A   (hex)		DEICY CORPORATION
+00141A     (base 16)		DEICY CORPORATION
+				3-3-6,Sakae-cho,Hamura-shi,
+				  Tokyo  205-0002
+				JP
+
+00-14-1C   (hex)		Cisco Systems, Inc
+00141C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-14-0C   (hex)		GKB CCTV CO., LTD.
+00140C     (base 16)		GKB CCTV CO., LTD.
+				7F, No. 1, Lane 641,
+				Ta Ya Hsiang,  TAICHUNG  428
+				TW
+
+00-13-FE   (hex)		GRANDTEC ELECTRONIC CORP.
+0013FE     (base 16)		GRANDTEC ELECTRONIC CORP.
+				8F,NO.268,Lian Cheng Rd.,Chung Ho City,
+				Taipei    235
+				TW
+
+00-14-35   (hex)		CityCom Corp.
+001435     (base 16)		CityCom Corp.
+				3F., No.532, Sec. 2,
+				Jhonghe City  Taipei Hsien  23557
+				TW
+
+00-14-48   (hex)		Inventec Multimedia & Telecom Corporation
+001448     (base 16)		Inventec Multimedia & Telecom Corporation
+				5F,NO.396,Sec.1 Nei-Hu Road
+				Taipei    114
+				TW
+
+00-14-16   (hex)		Scosche Industries, Inc.
+001416     (base 16)		Scosche Industries, Inc.
+				PO Box 2901
+				Oxnard  CA  93034
+				US
+
+00-14-26   (hex)		NL Technology
+001426     (base 16)		NL Technology
+				800 Turnpike Street
+				North Andover  MA  01845
+				US
+
+00-13-C5   (hex)		LIGHTRON FIBER-OPTIC DEVICES INC.
+0013C5     (base 16)		LIGHTRON FIBER-OPTIC DEVICES INC.
+				51-1 Moonpyung-Dong, Taeduck-Gu
+				  Taejon  306-220
+				KR
+
+00-13-C4   (hex)		Cisco Systems, Inc
+0013C4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-13-C2   (hex)		WACOM Co.,Ltd
+0013C2     (base 16)		WACOM Co.,Ltd
+				2-510-1 Toyonodai Otone-machi
+				Kitasaitama-gun  Saitama  349-1148
+				JP
+
+00-13-BF   (hex)		Media System Planning Corp.
+0013BF     (base 16)		Media System Planning Corp.
+				4F Velco-Kuromon Bldg.
+				Taito-ku,  Tokyo  110-0005
+				JP
+
+00-13-BB   (hex)		Smartvue Corporation
+0013BB     (base 16)		Smartvue Corporation
+				102 Woodmont Boulevard
+				Nashville  TN  37205
+				US
+
+00-13-B5   (hex)		Wavesat
+0013B5     (base 16)		Wavesat
+				1375, Trans-Canada Highway
+				Dorval  Quebec  H9P 2W8
+				CA
+
+00-13-AF   (hex)		NUMA Technology,Inc.
+0013AF     (base 16)		NUMA Technology,Inc.
+				4F,No778,Sec 4,Patch Rd.
+				Taipei    115
+				TW
+
+00-13-B0   (hex)		Jablotron
+0013B0     (base 16)		Jablotron
+				Pod Skalkou 33
+				Jablonec nad Nisou    46601
+				CZ
+
+00-13-9A   (hex)		K-ubique ID Corp.
+00139A     (base 16)		K-ubique ID Corp.
+				Yamasan Bldg.8F,
+				Chuo-ku  Tokyo  103-0023
+				JP
+
+00-13-9E   (hex)		Ciara Technologies Inc.
+00139E     (base 16)		Ciara Technologies Inc.
+				9300 Trans Canada Highway
+				Saint-Laurent  Quebec  H4S 1K5
+				CA
+
+00-13-9D   (hex)		MaxLinear Hispania S.L.U.
+00139D     (base 16)		MaxLinear Hispania S.L.U.
+				Ronda Narcis Monturiol 
+				Estarriol, 11D  Paterna  46980
+				ES
+
+00-13-D5   (hex)		RuggedCom
+0013D5     (base 16)		RuggedCom
+				300 Applewood Crescent (Unit 1)
+				Concord,   Ontario  L4K 5C7
+				CA
+
+00-13-D6   (hex)		TII NETWORK TECHNOLOGIES, INC.
+0013D6     (base 16)		TII NETWORK TECHNOLOGIES, INC.
+				1385 AKRON STREET
+				COPIAGUE  NY  11726
+				US
+
+00-13-DB   (hex)		SHOEI Electric Co.,Ltd
+0013DB     (base 16)		SHOEI Electric Co.,Ltd
+				1-29-2,Wakabayashi
+				Setagaya-ku  Tokyo  154-0023
+				JP
+
+00-13-CD   (hex)		MTI co. LTD
+0013CD     (base 16)		MTI co. LTD
+				166-10 Karak-dong
+				Songpa-ku  Seoul  138-810
+				KR
+
+00-13-D3   (hex)		MICRO-STAR INTERNATIONAL CO., LTD.
+0013D3     (base 16)		MICRO-STAR INTERNATIONAL CO., LTD.
+				NO. 69, LI-DE ST.
+				JUNG-HE CITY  TAIPEI HSIEN  235
+				TW
+
+00-13-E6   (hex)		Technolution
+0013E6     (base 16)		Technolution
+				Zuidelijkhalfrond 1
+				GOUDA  ZH  2801 DD
+				NL
+
+00-13-DF   (hex)		Ryvor Corp.
+0013DF     (base 16)		Ryvor Corp.
+				15145 Red Hill Ave.
+				Tustin  CA  92780
+				US
+
+00-13-8D   (hex)		Kinghold
+00138D     (base 16)		Kinghold
+				11F, No. 965, Jungjeng Rd.
+				Junghe  Taipei  235
+				TW
+
+00-13-ED   (hex)		PSIA
+0013ED     (base 16)		PSIA
+				517-13 Induspis 5th
+				SungNam  KyungGi  
+				KR
+
+00-13-B1   (hex)		Intelligent Control Systems (Asia) Pte Ltd
+0013B1     (base 16)		Intelligent Control Systems (Asia) Pte Ltd
+				70 Ubi Crescent #01-12
+				    408570
+				SG
+
+00-13-3C   (hex)		QUINTRON SYSTEMS INC.
+00133C     (base 16)		QUINTRON SYSTEMS INC.
+				2105 SO. BLOSSER ROAD
+				SANTA MARIA  CALIFORNIA  93458
+				US
+
+00-13-3D   (hex)		Micro Memory Curtiss Wright Co
+00133D     (base 16)		Micro Memory Curtiss Wright Co
+				9540 Vassar Avenue
+				Chatsworth  CA  91311
+				US
+
+00-13-3F   (hex)		Eppendorf Instrumente GmbH
+00133F     (base 16)		Eppendorf Instrumente GmbH
+				Barkhausenweg 1
+				Hamburg  DE  22339
+				DE
+
+00-13-41   (hex)		Shandong New Beiyang Information Technology Co.,Ltd
+001341     (base 16)		Shandong New Beiyang Information Technology Co.,Ltd
+				NO.11 Xinwei Road
+				Weihai city  Shandong  264200
+				CN
+
+00-13-30   (hex)		EURO PROTECTION SURVEILLANCE
+001330     (base 16)		EURO PROTECTION SURVEILLANCE
+				30 Rue du Doubs
+				STRASBOURG    67100
+				FR
+
+00-13-25   (hex)		Cortina Systems Inc
+001325     (base 16)		Cortina Systems Inc
+				840 W California Ave, Suite 100
+				Sunnyvale  CA  94086
+				US
+
+00-13-31   (hex)		CellPoint Connect
+001331     (base 16)		CellPoint Connect
+				Billedvej 4
+				Copenhagen    2100
+				DK
+
+00-13-35   (hex)		VS Industry Berhad
+001335     (base 16)		VS Industry Berhad
+				Plo 47, Senai Ind. Est. II,
+				Senai  Johor  81400
+				MY
+
+00-13-2F   (hex)		Interactek
+00132F     (base 16)		Interactek
+				Sigmal 2 BLDG #C-319, 18 Kumi-dong
+				Seongnam  Kyung-gi  463-741
+				KR
+
+00-13-4C   (hex)		YDT Technology International
+00134C     (base 16)		YDT Technology International
+				2F., No.218, Rueiguang Rd.,
+				Taipei,    114
+				TW
+
+00-13-59   (hex)		ProTelevision Technologies A/S
+001359     (base 16)		ProTelevision Technologies A/S
+				Marielundvej 16,2
+				Herlev  Copenhagen  2730
+				DK
+
+00-13-50   (hex)		Silver Spring Networks, Inc
+001350     (base 16)		Silver Spring Networks, Inc
+				575 Broadway Street
+				Redwood City  CA  94063
+				US
+
+00-13-7F   (hex)		Cisco Systems, Inc
+00137F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-13-82   (hex)		Cetacea Networks Corporation
+001382     (base 16)		Cetacea Networks Corporation
+				3708 West 36th Avenue
+				Vancouver  British Columbia  V6N 2S4
+				CA
+
+00-13-90   (hex)		Termtek Computer Co., Ltd
+001390     (base 16)		Termtek Computer Co., Ltd
+				2F, No. 100, Li De St.,
+				Chung Ho City  Taipei Hsien  235
+				TW
+
+00-13-75   (hex)		American Security Products Co.
+001375     (base 16)		American Security Products Co.
+				11925 Pacific ave.
+				Fontana  CA  92335
+				US
+
+00-13-58   (hex)		Realm Systems, Inc.
+001358     (base 16)		Realm Systems, Inc.
+				9350 South 535 East
+				Sandy  Utah  84070
+				US
+
+00-12-C1   (hex)		Check Point Software Technologies
+0012C1     (base 16)		Check Point Software Technologies
+				5 Ha'solelim St.
+				Tel Aviv    67897
+				IL
+
+00-12-BB   (hex)		Telecommunications Industry Association TR-41 Committee
+0012BB     (base 16)		Telecommunications Industry Association TR-41 Committee
+				2500 Wilson Blvd., Suite 300
+				Arlington  VA  22201
+				US
+
+00-12-B6   (hex)		Santa Barbara Infrared, Inc.
+0012B6     (base 16)		Santa Barbara Infrared, Inc.
+				30 S. Calle Cesar Chavez
+				Santa Barbara  CA  93103
+				US
+
+00-12-B9   (hex)		Fusion Digital Technology
+0012B9     (base 16)		Fusion Digital Technology
+				Victoria Mews, 23 Millfield Road
+				Bingley    BD16 1PY
+				GB
+
+00-12-ED   (hex)		AVG Advanced Technologies
+0012ED     (base 16)		AVG Advanced Technologies
+				4140 Utica Ridge Road
+				Bettendorf  IA  52722
+				US
+
+00-12-EA   (hex)		Trane
+0012EA     (base 16)		Trane
+				4833 White Bear Parkway
+				St. Paul  MN  55110
+				US
+
+00-12-E7   (hex)		Projectek Networking Electronics Corp.
+0012E7     (base 16)		Projectek Networking Electronics Corp.
+				5F-9, No. 16, Lane 609, Sec. 5, Chungshin Rd.,
+				Sanchung, Taipei    241
+				TW
+
+00-12-C3   (hex)		WIT S.A.
+0012C3     (base 16)		WIT S.A.
+				138 avenue Léon  Bérenger
+				Saint Laurent du Var  PACA  06700
+				FR
+
+00-12-C8   (hex)		Perfect tech
+0012C8     (base 16)		Perfect tech
+				3F,No.9,LANE175,NANKAN RD.,
+				LUJHU  TAOYUAN  338
+				TW
+
+00-12-C6   (hex)		TGC America, Inc
+0012C6     (base 16)		TGC America, Inc
+				2901 Tasman Drive, Suite 111
+				Santa Clara  CA  95054
+				US
+
+00-12-CC   (hex)		Bitatek CO., LTD
+0012CC     (base 16)		Bitatek CO., LTD
+				6F.,No 115,Wugong 3rd Rd
+				Wugu District  New Taipei City  248
+				TW
+
+00-12-FA   (hex)		THX LTD
+0012FA     (base 16)		THX LTD
+				5201 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+00-13-06   (hex)		Always On Wireless
+001306     (base 16)		Always On Wireless
+				3701 Kirby Dr
+				Houston  TX  77098
+				US
+
+00-12-FD   (hex)		OPTIMUS IC S.A.
+0012FD     (base 16)		OPTIMUS IC S.A.
+				NAWOJOWSKA 118
+				NOWY SACZ  MALOPOLSKA  33-300
+				PL
+
+00-13-05   (hex)		Epicom, Inc.
+001305     (base 16)		Epicom, Inc.
+				PO Box 24839
+				Oakland  CA  94623-1839
+				US
+
+00-12-E4   (hex)		ZIEHL industrie-electronik GmbH + Co KG
+0012E4     (base 16)		ZIEHL industrie-electronik GmbH + Co KG
+				Daimlerstraße 13
+				Schwaebisch Hall    74523
+				DE
+
+00-12-97   (hex)		O2Micro, Inc.
+001297     (base 16)		O2Micro, Inc.
+				3118 Patrick Henry Drive
+				Santa Clara  CA  95054
+				US
+
+00-12-9D   (hex)		First International Computer do Brasil
+00129D     (base 16)		First International Computer do Brasil
+				Rodovia BR 459
+				Santa Rita do Sapucaí  Minas Gerais  
+				BR
+
+00-12-9C   (hex)		Yulinet
+00129C     (base 16)		Yulinet
+				11F, Samhomoolsan B/D 275-6, Yangjae-dong
+				Seocho  Seoul  137-941
+				KR
+
+00-12-90   (hex)		KYOWA Electric & Machinery Corp.
+001290     (base 16)		KYOWA Electric & Machinery Corp.
+				4-8-16,Masuizumi
+				Kanazawa  Ishikawa  921-8025
+				JP
+
+00-12-91   (hex)		KWS Computersysteme GmbH
+001291     (base 16)		KWS Computersysteme GmbH
+				Carl Zeiss Str. 1
+				Ettlingen  BW  76275
+				DE
+
+00-12-95   (hex)		Aiware Inc.
+001295     (base 16)		Aiware Inc.
+				J-Tower 2F
+				Fuchu-shi  Tokyo  183-0044
+				JP
+
+00-12-8B   (hex)		Sensory Networks Inc
+00128B     (base 16)		Sensory Networks Inc
+				Level 6, 140 William St
+				East Sydney  NSW  2011
+				AU
+
+00-12-8F   (hex)		Montilio
+00128F     (base 16)		Montilio
+				1 maskit st.
+				Hertzelia    46763
+				IL
+
+00-12-A3   (hex)		Trust International B.V.
+0012A3     (base 16)		Trust International B.V.
+				Laan van Barcelona 600
+				Dordrecht  Zuid holland  3317 DD
+				NL
+
+00-12-A7   (hex)		ISR TECHNOLOGIES Inc
+0012A7     (base 16)		ISR TECHNOLOGIES Inc
+				1100, rue Notre-Dame Ouest
+				Montreal  Quebec  H3C 1K3
+				CA
+
+00-12-AA   (hex)		IEE, Inc.
+0012AA     (base 16)		IEE, Inc.
+				7740 Lemona Avenue
+				Van Nuys,  CA  91405
+				US
+
+00-12-9F   (hex)		RAE Systems
+00129F     (base 16)		RAE Systems
+				3775 North First Street
+				San Jose  CA  95134
+				US
+
+00-12-B5   (hex)		Vialta, Inc.
+0012B5     (base 16)		Vialta, Inc.
+				48461 Fremont Blvd.
+				Fremont  CA  94538
+				US
+
+00-12-B1   (hex)		Dai Nippon Printing Co., Ltd
+0012B1     (base 16)		Dai Nippon Printing Co., Ltd
+				2-8-21,Akabane-minami
+				Kita-ku  Tokyo  115-0044
+				JP
+
+00-12-89   (hex)		Advance Sterilization Products
+001289     (base 16)		Advance Sterilization Products
+				33 Technology Drive
+				Irvine  California  92618
+				US
+
+00-12-84   (hex)		Lab33 Srl
+001284     (base 16)		Lab33 Srl
+				C.so F. Perrone 24
+				Genoa  GE  16152
+				IT
+
+00-12-81   (hex)		March Networks S.p.A.
+001281     (base 16)		March Networks S.p.A.
+				Via Dei Lavoratori Autobianchi n. 1,
+				Desio  Milano  20033
+				IT
+
+00-12-7E   (hex)		Digital Lifestyles Group, Inc.
+00127E     (base 16)		Digital Lifestyles Group, Inc.
+				801 South Sentous Ave.
+				City of Industry  CA  91748
+				US
+
+00-12-6B   (hex)		Ascalade Communications Limited
+00126B     (base 16)		Ascalade Communications Limited
+				Unit 10-11, 35/F, Cable TV Tower,
+				    
+				HK
+
+00-12-33   (hex)		JRC TOKKI Co.,Ltd.
+001233     (base 16)		JRC TOKKI Co.,Ltd.
+				3-2-1 Shinyoshidahigashi Kohoku-ku
+				Yokohama  Kanagawa  223-8572
+				JP
+
+00-12-5B   (hex)		KAIMEI ELECTRONI
+00125B     (base 16)		KAIMEI ELECTRONI
+				14-3F, NO.81,SEC. 1,HSIN-TAI-WU ROAD,HSICHIH,
+				TAIPEI HSIEN  HSICHIH  221
+				TW
+
+00-12-59   (hex)		THERMO ELECTRON KARLSRUHE
+001259     (base 16)		THERMO ELECTRON KARLSRUHE
+				DIESELSTRAßE 4
+				KARLSRUHE  Baden-Württemberg  76227
+				DE
+
+00-12-5A   (hex)		Microsoft Corporation
+00125A     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				Redmond  Washington  98052-6399
+				US
+
+00-12-3D   (hex)		GES Co, Ltd
+00123D     (base 16)		GES Co, Ltd
+				 Room 710, Bundang Technopark, 700
+				Gyeonggi-Do    463-400
+				KR
+
+00-12-39   (hex)		S Net Systems Inc.
+001239     (base 16)		S Net Systems Inc.
+				10F Sungwon Bldg. Samsung-dong
+				Seoul    135-090
+				KR
+
+00-12-2F   (hex)		Sanei Electric Inc.
+00122F     (base 16)		Sanei Electric Inc.
+				5F Taisou-Ikebukuro Bldg.
+				Toshima-ku  Tokyo  171-0014
+				JP
+
+00-12-30   (hex)		Picaso Infocommunication CO., LTD.
+001230     (base 16)		Picaso Infocommunication CO., LTD.
+				3F, Suntechcity, Sangdaewon 1-dong,
+				Sungnam-city  Kyunggi-do  462-725
+				KR
+
+00-12-46   (hex)		T.O.M TECHNOLOGY INC..
+001246     (base 16)		T.O.M TECHNOLOGY INC..
+				906 Woolim E-biz Center 2,
+				Seoul  Guro-Gu  184-1
+				KR
+
+00-12-56   (hex)		LG INFORMATION & COMM.
+001256     (base 16)		LG INFORMATION & COMM.
+				459-9,KASAN-DONG,KUMCHON-GU,
+				SEOUL    153-023
+				KR
+
+00-12-14   (hex)		Koenig & Bauer AG
+001214     (base 16)		Koenig & Bauer AG
+				Friedrich-Koenig-Str. 4
+				Wuerzburg  Bavaria  97080
+				DE
+
+00-12-0F   (hex)		IEEE 802.3
+00120F     (base 16)		IEEE 802.3
+				
+				Oban     PA34 5EJ
+				GB
+
+00-12-1D   (hex)		Netfabric Corporation
+00121D     (base 16)		Netfabric Corporation
+				67 Federal Road
+				Brookfield  CT  06804
+				US
+
+00-12-0C   (hex)		CE-Infosys Pte Ltd
+00120C     (base 16)		CE-Infosys Pte Ltd
+				390 Havelock Road
+				    169662
+				SG
+
+00-11-B3   (hex)		YOSHIMIYA CO.,LTD.
+0011B3     (base 16)		YOSHIMIYA CO.,LTD.
+				2-3-24 Bainan
+				OSAKA  OSAKA-Pref  557-0033
+				JP
+
+00-11-B6   (hex)		Open Systems International
+0011B6     (base 16)		Open Systems International
+				4101 Arrowhead Drive
+				Medina  MN  55340
+				US
+
+00-11-B0   (hex)		Fortelink Inc.
+0011B0     (base 16)		Fortelink Inc.
+				42501 Albrae street suite 202
+				Fremont  CA  94538
+				US
+
+00-11-AC   (hex)		Simtec Electronics
+0011AC     (base 16)		Simtec Electronics
+				Avondale Drive
+				Tarleton  Lancashire  PR4 6AX
+				GB
+
+00-11-AD   (hex)		Shanghai Ruijie Technology
+0011AD     (base 16)		Shanghai Ruijie Technology
+				27F, 420 Jiangning Rd.
+				Shanghai    200041
+				CN
+
+00-11-CD   (hex)		Axsun Technologies
+0011CD     (base 16)		Axsun Technologies
+				1 Fortune Drive
+				Billerica  MA  02460
+				US
+
+00-11-C5   (hex)		TEN Technology
+0011C5     (base 16)		TEN Technology
+				555 East Ocean Blvd.
+				Long Beach  CA  90802
+				US
+
+00-11-BE   (hex)		AGP Telecom Co. Ltd
+0011BE     (base 16)		AGP Telecom Co. Ltd
+				9F, 134 Chung-Hsiao E. RD
+				Taipei    106
+				TW
+
+00-11-BA   (hex)		Elexol Pty Ltd
+0011BA     (base 16)		Elexol Pty Ltd
+				Level 2 / 146 Bundall Road
+				Bundall  Queensland  4217
+				AU
+
+00-11-BC   (hex)		Cisco Systems, Inc
+0011BC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-A8   (hex)		Quest Technologies
+0011A8     (base 16)		Quest Technologies
+				1060 Corporate Center Drive
+				Oconomowoc  Wisconsin  53066
+				US
+
+00-11-A1   (hex)		VISION NETWARE CO.,LTD
+0011A1     (base 16)		VISION NETWARE CO.,LTD
+				Ace Twin Tower (2), #709
+				Seoul  Guro-Gu  152-050
+				KR
+
+00-11-E2   (hex)		Hua Jung Components Co., Ltd.
+0011E2     (base 16)		Hua Jung Components Co., Ltd.
+				5F, No.13, Lane 120, Sec.1, Nei Hu Road
+				Taipei    114
+				TW
+
+00-11-DA   (hex)		Vivaas Technology Inc.
+0011DA     (base 16)		Vivaas Technology Inc.
+				15F, No. 10, Sec 1, Pei-Hsin Rd.,
+				Hsin-Tien city  Taipei Hsien,  231
+				TW
+
+00-11-DD   (hex)		FROMUS TEC. Co., Ltd.
+0011DD     (base 16)		FROMUS TEC. Co., Ltd.
+				2F 896-8 Hogye2-dong Dongan-Gu
+				    431-836
+				KR
+
+00-11-EB   (hex)		Innovative Integration
+0011EB     (base 16)		Innovative Integration
+				2390A Ward Avenue
+				Simi Valley  CA  93065
+				US
+
+00-11-EA   (hex)		IWICS Inc.
+0011EA     (base 16)		IWICS Inc.
+				19125 North Creek Parkway
+				Bothell  WA  98011
+				US
+
+00-11-E4   (hex)		Danelec Electronics A/S
+0011E4     (base 16)		Danelec Electronics A/S
+				Blokken 44
+				Birkeroed  Copenhagen  3460
+				DK
+
+00-11-E1   (hex)		Arcelik A.S
+0011E1     (base 16)		Arcelik A.S
+				Cumhuriyet Mah., E5 Yan Yol, No:1,
+				Istanbul    34520 
+				TR
+
+00-11-FB   (hex)		Heidelberg Engineering GmbH
+0011FB     (base 16)		Heidelberg Engineering GmbH
+				Tiergartenstraße 15
+				Heidelberg  Baden-Württemberg  69121
+				DE
+
+00-11-D6   (hex)		HandEra, Inc.
+0011D6     (base 16)		HandEra, Inc.
+				2859 104th St.
+				Des Moines  IA  50322
+				US
+
+00-11-CA   (hex)		Long Range Systems, Inc.
+0011CA     (base 16)		Long Range Systems, Inc.
+				4550 Excel Parkway
+				Addison  Texas  75001
+				US
+
+00-11-EF   (hex)		Conitec Datensysteme GmbH
+0011EF     (base 16)		Conitec Datensysteme GmbH
+				Dieselstraße 11c
+				Dieburg  Hessen  64807
+				DE
+
+00-11-4F   (hex)		US Digital Television, Inc
+00114F     (base 16)		US Digital Television, Inc
+				5807 N. Andrews Way
+				Fort Lauderdale  FL  33309
+				US
+
+00-11-82   (hex)		IMI Norgren Ltd
+001182     (base 16)		IMI Norgren Ltd
+				PO Box 22
+				Lichfield  Staffordshire  WS13 6SB
+				GB
+
+00-11-7A   (hex)		Singim International Corp.
+00117A     (base 16)		Singim International Corp.
+				6F-2, No. 190, Sec. 2 Chung Hsin Road,
+				Hsin Tien City    231
+				TW
+
+00-11-48   (hex)		Prolon Control Systems
+001148     (base 16)		Prolon Control Systems
+				Herstedvesterstraede 56
+				Albertslund    DK-2620
+				DK
+
+00-11-40   (hex)		Nanometrics Inc.
+001140     (base 16)		Nanometrics Inc.
+				250 Herzberg Rd.
+				Kanata  Ontario  K2K 2A1
+				CA
+
+00-11-44   (hex)		Assurance Technology Corp
+001144     (base 16)		Assurance Technology Corp
+				6304 Potomac Avenue
+				Alexandria  Virginia  22307
+				US
+
+00-11-63   (hex)		SYSTEM SPA DEPT. ELECTRONICS
+001163     (base 16)		SYSTEM SPA DEPT. ELECTRONICS
+				VIA GHIAROLA VECCHIA 73
+				FIORANO MODENESE  MODENA  I-41042
+				IT
+
+00-11-8F   (hex)		EUTECH INSTRUMENTS PTE. LTD.
+00118F     (base 16)		EUTECH INSTRUMENTS PTE. LTD.
+				Blk 55,Ayer Rajah Crescent, #04-16/24.
+				    139949
+				SG
+
+00-11-8D   (hex)		Hanchang System Corp.
+00118D     (base 16)		Hanchang System Corp.
+				1058-2, Shinkil-dong, Danwon-gu,
+				Ansan-si  Gyeonggi-do  425-839
+				KR
+
+00-11-5F   (hex)		ITX Security Co., Ltd.
+00115F     (base 16)		ITX Security Co., Ltd.
+				9F Kolon Digital Tower Aston Bldg. 505-14
+				Gasan-dong Geumcheon-gu  SEOUL  153-803
+				KR
+
+00-11-53   (hex)		Trident Tek, Inc.
+001153     (base 16)		Trident Tek, Inc.
+				8041 Cessna Ave #200
+				Gaithersburg  MD  20879
+				US
+
+00-11-72   (hex)		COTRON CORPORATION
+001172     (base 16)		COTRON CORPORATION
+				12FL,No.150,Sec.4,Cheng-De Rd
+				Taipei City    111
+				TW
+
+00-11-A0   (hex)		Vtech Engineering Canada Ltd
+0011A0     (base 16)		Vtech Engineering Canada Ltd
+				200-7671 Alderbridge Way
+				Richmond  BC  V6X 1Z9
+				CA
+
+00-11-9B   (hex)		Telesynergy Research Inc.
+00119B     (base 16)		Telesynergy Research Inc.
+				4F, No. 49, Tung Hsin Rd.,
+				Taipei    110
+				TW
+
+00-11-91   (hex)		CTS-Clima Temperatur Systeme GmbH
+001191     (base 16)		CTS-Clima Temperatur Systeme GmbH
+				Lotzenäcker 21
+				Hechingen  Baden-Württemberg  72379
+				DE
+
+00-11-89   (hex)		Aerotech Inc
+001189     (base 16)		Aerotech Inc
+				101 Zeta Drive
+				Pittsburgh  PA  15238
+				US
+
+00-0F-FB   (hex)		Nippon Denso Industry Co., Ltd.
+000FFB     (base 16)		Nippon Denso Industry Co., Ltd.
+				3-14-19
+				Shibaura, Minato-ku  Tokyo,  108-8560
+				JP
+
+00-0F-F2   (hex)		Loud Technologies Inc.
+000FF2     (base 16)		Loud Technologies Inc.
+				16220 Wood-Red Rd. NE
+				Woodinville  WA  98072
+				US
+
+00-0F-F1   (hex)		nex-G Systems Pte.Ltd
+000FF1     (base 16)		nex-G Systems Pte.Ltd
+				25 Kallang Ave
+				    339416
+				SG
+
+00-11-01   (hex)		CET Technologies Pte Ltd
+001101     (base 16)		CET Technologies Pte Ltd
+				100 Jurong East Street 21
+				    609602
+				SG
+
+00-0F-FF   (hex)		Control4
+000FFF     (base 16)		Control4
+				11734 S. Election Drive
+				Draper  UT  84020
+				US
+
+00-0F-FC   (hex)		Merit Li-Lin Ent.
+000FFC     (base 16)		Merit Li-Lin Ent.
+				No. 20 Wu-Long 6 Rd.
+				Wu-Ku  Taipei  242
+				TW
+
+00-11-13   (hex)		Fraunhofer FOKUS
+001113     (base 16)		Fraunhofer FOKUS
+				Kaiserin-Augusta-Allee 31
+				Berlin    10589
+				DE
+
+00-11-12   (hex)		Honeywell CMSS
+001112     (base 16)		Honeywell CMSS
+				8323 Lindbergh Ct
+				Sarasota  FL  34243
+				US
+
+00-0F-E0   (hex)		NComputing Co.,Ltd.
+000FE0     (base 16)		NComputing Co.,Ltd.
+				6th Fl, JEI-Platz B/D
+				Seoul  Gasan-dong Geumcheon-Gu  459-11
+				KR
+
+00-0F-E3   (hex)		Damm Cellular Systems A/S
+000FE3     (base 16)		Damm Cellular Systems A/S
+				Moellegade 68
+				Soenderborg    DK-6400
+				DK
+
+00-11-28   (hex)		Streamit
+001128     (base 16)		Streamit
+				Flight Forum 3543
+				  Eindhoven  5657 DW
+				NL
+
+00-11-3F   (hex)		Alcatel DI
+00113F     (base 16)		Alcatel DI
+				ZI lavoisier
+				EU  Normandie  76260
+				FR
+
+00-11-37   (hex)		AICHI ELECTRIC CO., LTD.
+001137     (base 16)		AICHI ELECTRIC CO., LTD.
+				1
+				kasugai city  aichi pref.  486-8666
+				JP
+
+00-0F-F3   (hex)		Jung Myoung Communications&Technology
+000FF3     (base 16)		Jung Myoung Communications&Technology
+				1th FL., Dong IL Bldg.107 Yangjae-Dong
+				Seocho-Ku  Seoul  137-130
+				KR
+
+00-11-3A   (hex)		SHINBORAM
+00113A     (base 16)		SHINBORAM
+				4F DAHNWORLD BUILDING, 154-11 SAMSUNG-DONG
+				SEOUL    135-879
+				KR
+
+00-0F-89   (hex)		Winnertec System Co., Ltd.
+000F89     (base 16)		Winnertec System Co., Ltd.
+				#405, 4th Floor. Ace-Techno Tower III, 197-48,
+				Seoul    152-766
+				KR
+
+00-0F-A4   (hex)		Sprecher Automation GmbH
+000FA4     (base 16)		Sprecher Automation GmbH
+				Franckstrasse 51
+				Linz  Oberösterreich  4018
+				AT
+
+00-0F-A6   (hex)		S2 Security Corporation
+000FA6     (base 16)		S2 Security Corporation
+				6 Abbott Road
+				Wellesley  MA  02481
+				US
+
+00-0F-AA   (hex)		Nexus Technologies
+000FAA     (base 16)		Nexus Technologies
+				10 National Ave.
+				Fletcher  NC  28732
+				US
+
+00-0F-A8   (hex)		Photometrics, Inc.
+000FA8     (base 16)		Photometrics, Inc.
+				3440 E Britannia Drive
+				Tucson  AZ  85706-5006
+				US
+
+00-0F-BD   (hex)		MRV Communications (Networks) LTD
+000FBD     (base 16)		MRV Communications (Networks) LTD
+				P.O Box 614
+				Yokneam    20692
+				IL
+
+00-0F-B4   (hex)		Timespace Technology
+000FB4     (base 16)		Timespace Technology
+				Blackstone Road
+				Huntingdon  Cambridgeshire  PE29 6TT
+				GB
+
+00-0F-9D   (hex)		DisplayLink (UK) Ltd
+000F9D     (base 16)		DisplayLink (UK) Ltd
+				Mount Pleasant House
+				Cambridge  Cambridgeshire  CB3 0RN
+				GB
+
+00-0F-C5   (hex)		KeyMed Ltd
+000FC5     (base 16)		KeyMed Ltd
+				KeyMed House
+				Southend on Sea  Essex  SS2 5QH
+				GB
+
+00-0F-BF   (hex)		DGT Sp. z o.o.
+000FBF     (base 16)		DGT Sp. z o.o.
+				ul. Jaskowa Dolina 15
+				Gdansk  woj. pomorskie  80-252
+				PL
+
+00-0F-92   (hex)		Microhard Systems Inc.
+000F92     (base 16)		Microhard Systems Inc.
+				#17, 2135-32Ave NE
+				Calgary  AB  T2E6Z3
+				CA
+
+00-0F-CB   (hex)		3Com Ltd
+000FCB     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-0F-D5   (hex)		Schwechat - RISE
+000FD5     (base 16)		Schwechat - RISE
+				Am Concorde Park 2A
+				Schwechat    2320
+				AT
+
+00-0F-67   (hex)		West Instruments
+000F67     (base 16)		West Instruments
+				Unit 5, The Hyde, Lower Bevendean
+				Brighton  East Sussex  BN2 4JU
+				GB
+
+00-0F-6E   (hex)		BBox
+000F6E     (base 16)		BBox
+				Gyar u. 2. (115)
+				Budaors    H-2040
+				HU
+
+00-0F-6F   (hex)		FTA Communication Technologies
+000F6F     (base 16)		FTA Communication Technologies
+				11, rue Pierre Werner
+				Betzdorf    L-6832
+				LU
+
+00-0F-63   (hex)		Obzerv Technologies
+000F63     (base 16)		Obzerv Technologies
+				400 Jean Lesage
+				Quebec  QC  G1K8W1
+				CA
+
+00-0F-21   (hex)		Scientific Atlanta, Inc
+000F21     (base 16)		Scientific Atlanta, Inc
+				5030 Sugarloaf Parkway
+				Lawrenceville  Ga  30042
+				US
+
+00-0F-11   (hex)		Prodrive B.V.
+000F11     (base 16)		Prodrive B.V.
+				P.O. 28030
+				Eindhoven    5602 JA
+				NL
+
+00-0F-13   (hex)		Nisca corporation
+000F13     (base 16)		Nisca corporation
+				430-1
+				Masuho-Cho  Yamanashi-Ken  400-0593
+				JP
+
+00-0F-14   (hex)		Mindray Co., Ltd.
+000F14     (base 16)		Mindray Co., Ltd.
+				Mindray Building, Keji 12th Road South
+				Shenzhen  Guangdong  518057
+				CN
+
+00-0F-65   (hex)		icube Corp.
+000F65     (base 16)		icube Corp.
+				Olympia Center 2F,828-10,Yeoksam-dong,Kangnam-ku
+				Seoul  South  135-935
+				KR
+
+00-0F-5D   (hex)		Genexis BV
+000F5D     (base 16)		Genexis BV
+				Lodewijktraat 1A
+				5652 AC  Eindhoven    
+				SE
+
+00-0F-58   (hex)		Adder Technology Limited
+000F58     (base 16)		Adder Technology Limited
+				Technology House
+				Bar Hill  Cambridgeshire  CB3 8SQ
+				GB
+
+00-0F-12   (hex)		Panasonic Europe Ltd.
+000F12     (base 16)		Panasonic Europe Ltd.
+				Hesebergweg 49-51
+				Peine    D-31228
+				DE
+
+00-0F-0E   (hex)		WaveSplitter Technologies, Inc.
+000F0E     (base 16)		WaveSplitter Technologies, Inc.
+				2248 North First Street
+				San Jose  CA  95131
+				US
+
+00-0F-0C   (hex)		SYNCHRONIC ENGINEERING
+000F0C     (base 16)		SYNCHRONIC ENGINEERING
+				25 CAP DARNETAL
+				DARNETAL  FRANCE  76160
+				FR
+
+00-0F-0B   (hex)		Kentima Technologies AB
+000F0B     (base 16)		Kentima Technologies AB
+				Box 174
+				Staffanstorp  Skåne  245 44
+				SE
+
+00-0F-46   (hex)		SINAR AG
+000F46     (base 16)		SINAR AG
+				Stadtweg 24
+				Feuerthalen  ZH  CH-8245
+				CH
+
+00-0F-41   (hex)		Zipher Ltd
+000F41     (base 16)		Zipher Ltd
+				7 Faraday Building
+				Nottingham  Nottinghamshire  NG7 2QP
+				GB
+
+00-0F-4D   (hex)		TalkSwitch
+000F4D     (base 16)		TalkSwitch
+				1545 Carling Ave
+				Ottawa  Ontario  K1Z 8P9
+				CA
+
+00-0F-71   (hex)		Sanmei Electronics Co.,Ltd
+000F71     (base 16)		Sanmei Electronics Co.,Ltd
+				2-2-1,Seikai,Shimizu
+				Shizuoka    424-0924
+				JP
+
+00-0F-6B   (hex)		GateWare Communications GmbH
+000F6B     (base 16)		GateWare Communications GmbH
+				Allersberger Strasse 185 F
+				Nuernberg  Bavaria  D-90461
+				DE
+
+00-0E-D5   (hex)		COPAN Systems Inc.
+000ED5     (base 16)		COPAN Systems Inc.
+				2605 Trade Centre Ave.
+				Longmont  CO  80503
+				US
+
+00-0E-CA   (hex)		WTSS Inc
+000ECA     (base 16)		WTSS Inc
+				5999 Avenida Encinas
+				Carlsbad  CA  92008
+				US
+
+00-0E-CC   (hex)		Tableau, LLC
+000ECC     (base 16)		Tableau, LLC
+				N8 W22195 Johnson Drive, Suite 100
+				Waukesha  WI  53186
+				US
+
+00-0E-CB   (hex)		VineSys Technology
+000ECB     (base 16)		VineSys Technology
+				3350 Scott Blvd. building 15-03
+				Santa Clara  CA  95054
+				US
+
+00-0E-D2   (hex)		Filtronic plc
+000ED2     (base 16)		Filtronic plc
+				The Waterfront
+				Saltaire  W Yorks  BD18 3TT
+				GB
+
+00-0E-C8   (hex)		Zoran Corporation
+000EC8     (base 16)		Zoran Corporation
+				1390 Kifer Rd.
+				Sunnyvale  CA  94086
+				US
+
+00-0E-D9   (hex)		Aksys, Ltd.
+000ED9     (base 16)		Aksys, Ltd.
+				2 Marriott Drive
+				Lincolnshire  IL  60069
+				US
+
+00-0E-B4   (hex)		GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD.
+000EB4     (base 16)		GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD.
+				AVE. 398 ZHONGSHAN
+				GUANGZHOU  GUANGDONG  510660
+				CN
+
+00-0E-B1   (hex)		Newcotech,Ltd
+000EB1     (base 16)		Newcotech,Ltd
+				Anyang Megavally 715-3
+				Anyang City  Gueonggi-Do  431-160
+				KR
+
+00-0E-A9   (hex)		Shanghai Xun Shi Communications Equipment Ltd. Co.
+000EA9     (base 16)		Shanghai Xun Shi Communications Equipment Ltd. Co.
+				Hi-Tech King World, Unit C603
+				Shanghai    200001
+				CN
+
+00-0E-B7   (hex)		Knovative, Inc.
+000EB7     (base 16)		Knovative, Inc.
+				11245 West Bernardo Court
+				San Diego  CA  92127
+				US
+
+00-0E-FA   (hex)		Optoway Technology Incorporation
+000EFA     (base 16)		Optoway Technology Incorporation
+				No. 38, Kuang Fu South Road
+				Hu Kou  Hsin Chu  303
+				TW
+
+00-0E-FD   (hex)		FUJINON CORPORATION
+000EFD     (base 16)		FUJINON CORPORATION
+				1-324 UETAKE, KITA-KU,
+				SAITAMA CITY  SAITAMA  331-9624
+				JP
+
+00-0E-F5   (hex)		iPAC Technology Co., Ltd.
+000EF5     (base 16)		iPAC Technology Co., Ltd.
+				6F, No. 30, Shingjung Road, Neihu
+				Taipei    114
+				TW
+
+00-0E-FB   (hex)		Macey Enterprises
+000EFB     (base 16)		Macey Enterprises
+				P.O. Box 7267
+				Tempe  AZ  85281
+				US
+
+00-0F-09   (hex)		Private
+000F09     (base 16)		Private
+
+00-0E-DC   (hex)		Tellion INC.
+000EDC     (base 16)		Tellion INC.
+				5th Fl. BONA Venture Town
+				Seoul  Seocho-gu.  137-719
+				KR
+
+00-0E-CD   (hex)		SKOV A/S
+000ECD     (base 16)		SKOV A/S
+				Hedelund 4
+				Roslev    DK-7870
+				DK
+
+00-0E-DB   (hex)		XiNCOM Corp.
+000EDB     (base 16)		XiNCOM Corp.
+				2840 Industrial Ave.
+				Hubbard  OR  97032
+				US
+
+00-0E-C2   (hex)		Lowrance Electronics, Inc.
+000EC2     (base 16)		Lowrance Electronics, Inc.
+				12000 E. Skelly Drive
+				Tulsa  OK  74128
+				US
+
+00-0E-A3   (hex)		CNCR-IT CO.,LTD,HangZhou P.R.CHINA
+000EA3     (base 16)		CNCR-IT CO.,LTD,HangZhou P.R.CHINA
+				Yinjiang mansion NO.5F Wenyi Road
+				HangZhou  ZheJiang  310012
+				CN
+
+00-0E-A2   (hex)		McAfee, Inc
+000EA2     (base 16)		McAfee, Inc
+				350 SW 12th Avenue
+				Deerfield Beach  FL  33442
+				US
+
+00-0E-9B   (hex)		Ambit Microsystems Corporation
+000E9B     (base 16)		Ambit Microsystems Corporation
+				5F-1, 5 Hsin-An Rd. Science-Based Industrial Park
+				Hsinchu    300
+				TW
+
+00-0E-78   (hex)		Amtelco
+000E78     (base 16)		Amtelco
+				4800 Curtin Drive
+				McFarland  WI  53558
+				US
+
+00-0E-71   (hex)		Gemstar Technology Development Ltd.
+000E71     (base 16)		Gemstar Technology Development Ltd.
+				Unit 201, Stulex house, 698 prince edward road east, san po kong, Kolwoon
+				Hong Kong    852
+				HK
+
+00-0E-70   (hex)		in2 Networks
+000E70     (base 16)		in2 Networks
+				320 W  200 S
+				SLC  UT  84101
+				US
+
+00-0E-37   (hex)		Harms & Wende GmbH & Co.KG
+000E37     (base 16)		Harms & Wende GmbH & Co.KG
+				Grossmoorkehre 9
+				Hamburg    D-21079
+				DE
+
+00-0E-31   (hex)		Olympus Soft Imaging Solutions GmbH
+000E31     (base 16)		Olympus Soft Imaging Solutions GmbH
+				Johann-Krane-Weg 39
+				  Münster  48149
+				DE
+
+00-0E-2F   (hex)		Roche Diagnostics GmbH
+000E2F     (base 16)		Roche Diagnostics GmbH
+				Roche Diabetes Care Insulin Delivery Systems
+				D-68305 Mannheim    
+				DE
+
+00-0E-2A   (hex)		Private
+000E2A     (base 16)		Private
+
+00-0E-9E   (hex)		Topfield Co., Ltd
+000E9E     (base 16)		Topfield Co., Ltd
+				4th floor, Deoksan Bldg 260-4, Seohyun-dong
+				Seongnam  Bundang-Ku  463-824
+				KR
+
+00-0E-41   (hex)		NIHON MECHATRONICS CO.,LTD.
+000E41     (base 16)		NIHON MECHATRONICS CO.,LTD.
+				9-6 SHIOMIDAI, MIYAMAE-KU
+				KAWASAKI-SHI  KANAGAWA-KEN  216-0013
+				JP
+
+00-0E-3C   (hex)		Transact Technologies Inc
+000E3C     (base 16)		Transact Technologies Inc
+				20 Bomax Drive
+				Ithaca  New York  14850
+				US
+
+00-0E-63   (hex)		Lemke Diagnostics GmbH
+000E63     (base 16)		Lemke Diagnostics GmbH
+				Radeburger Str. 47
+				Volkersdorf  Saxony  01468
+				DE
+
+00-0E-5B   (hex)		ParkerVision - Direct2Data
+000E5B     (base 16)		ParkerVision - Direct2Data
+				9432 Baymeadows Way
+				Jacksonville  FL  32246
+				US
+
+00-0E-60   (hex)		360SUN Digital Broadband Corporation
+000E60     (base 16)		360SUN Digital Broadband Corporation
+				2F-2, No.2, Jianba Rd.,
+				Chung Ho  Taipei  235
+				TW
+
+00-0E-54   (hex)		AlphaCell Wireless Ltd.
+000E54     (base 16)		AlphaCell Wireless Ltd.
+				22 Zarhin street
+				Raanana    43662
+				IL
+
+00-0E-4E   (hex)		Waveplus Technology Co., Ltd.
+000E4E     (base 16)		Waveplus Technology Co., Ltd.
+				347 HsinHu 2nd Rd., NeiHu
+				Taipei    114
+				TW
+
+00-0E-4A   (hex)		Changchun Huayu WEBPAD Co.,LTD
+000E4A     (base 16)		Changchun Huayu WEBPAD Co.,LTD
+				4370 Gaoxin Road, High-Tech
+				Changchun  Jilin  130012
+				CN
+
+00-0E-93   (hex)		Milénio 3 Sistemas Electrónicos, Lda.
+000E93     (base 16)		Milénio 3 Sistemas Electrónicos, Lda.
+				Edifício Via Norte, R. Espido 164C S403
+				Maia  Minho  4470-177
+				PT
+
+00-0E-8D   (hex)		Systems in Progress Holding GmbH
+000E8D     (base 16)		Systems in Progress Holding GmbH
+				Exerzierplatzstrasse 85
+				Graz  Styria  8051
+				AT
+
+00-0E-76   (hex)		GEMSOC INNOVISION INC.
+000E76     (base 16)		GEMSOC INNOVISION INC.
+				9F,No.516,Sec,1Neihu Rd.,
+				Taipei    114
+				TW
+
+00-0E-7D   (hex)		Electronics Line 3000 Ltd.
+000E7D     (base 16)		Electronics Line 3000 Ltd.
+				2 Granit St.
+				Petah Tikva  Kiryar Arie  449130
+				IL
+
+00-0E-2C   (hex)		Netcodec co.
+000E2C     (base 16)		Netcodec co.
+				401 Daeion S/W Center, 48 Jangdong
+				Daejon    305-715
+				KR
+
+00-0E-23   (hex)		Incipient, Inc.
+000E23     (base 16)		Incipient, Inc.
+				230 Third Ave.
+				Waltham  MA  02451
+				US
+
+00-0E-25   (hex)		Hannae Technology Co., Ltd
+000E25     (base 16)		Hannae Technology Co., Ltd
+				4F, Hyunjin Bldg., #798-30, Yeoksam-Dong
+				SEOUL    135-080
+				KR
+
+00-0E-20   (hex)		ACCESS Systems Americas, Inc.
+000E20     (base 16)		ACCESS Systems Americas, Inc.
+				1188 East Arques Avenue
+				Sunnyvale  CA  94085
+				US
+
+00-0E-21   (hex)		MTU Friedrichshafen GmbH
+000E21     (base 16)		MTU Friedrichshafen GmbH
+				Maybachplatz 1
+				Friedrichshafen  Baden Wuertemberg  88040
+				DE
+
+00-0D-D4   (hex)		Symantec Corporation
+000DD4     (base 16)		Symantec Corporation
+				275 2nd Ave
+				Waltham  MA  02541
+				US
+
+00-0D-D2   (hex)		Simrad Optronics ASA
+000DD2     (base 16)		Simrad Optronics ASA
+				Ensjøveienn 23B
+				PO Box 6114 Etterstad  NO-0602 Oslo  
+				NO
+
+00-0D-D1   (hex)		Stryker Corporation
+000DD1     (base 16)		Stryker Corporation
+				4100 E Milham
+				Kalamazoo  MI  49001
+				US
+
+00-0D-D7   (hex)		Bright
+000DD7     (base 16)		Bright
+				1-12-44 Aobadai
+				Kashiwa-shi  Chiba-ken  277-0055
+				JP
+
+00-0D-D9   (hex)		Anton Paar GmbH
+000DD9     (base 16)		Anton Paar GmbH
+				Anton-Paar-Strasse 20
+				Graz    8054
+				AT
+
+00-0D-DC   (hex)		VAC
+000DDC     (base 16)		VAC
+				20F, N0. 456, Sec. 4, Hsin Yi Rd.,
+				Taipei    110
+				TW
+
+00-0D-E0   (hex)		ICPDAS Co.,LTD
+000DE0     (base 16)		ICPDAS Co.,LTD
+				 No. 111, Kuang-Fu N. Rd., Hsin-Chu Indu
+				HSINCHU    303
+				TW
+
+00-0D-E3   (hex)		AT Sweden AB
+000DE3     (base 16)		AT Sweden AB
+				P.O. Box 1166
+				Kista  Stockholm  SE-164 26
+				SE
+
+00-0D-EA   (hex)		Kingtel Telecommunication Corp.
+000DEA     (base 16)		Kingtel Telecommunication Corp.
+				147 Kang Ning St.
+				Hsi Chih City  Taipei Hsien  221
+				TW
+
+00-0D-ED   (hex)		Cisco Systems, Inc
+000DED     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0D-E4   (hex)		DIGINICS, Inc.
+000DE4     (base 16)		DIGINICS, Inc.
+				178-7 Poi-dong
+				Kangnam-gu  Seoul  135-961
+				KR
+
+00-0E-09   (hex)		Shenzhen Coship Software Co.,LTD.
+000E09     (base 16)		Shenzhen Coship Software Co.,LTD.
+				7/F,Block A,W2 Bldg,Hi-Tech Industrial Park,Shenzhen,China
+				Shenzhen  Guangdong  518057
+				CN
+
+00-0E-05   (hex)		WIRELESS MATRIX CORP.
+000E05     (base 16)		WIRELESS MATRIX CORP.
+				UNIT 1A-3751 NORTH FRASER WAY
+				BURNABY  BC  V5J 5G4
+				CA
+
+00-0E-22   (hex)		Private
+000E22     (base 16)		Private
+
+00-0E-1C   (hex)		Hach Company
+000E1C     (base 16)		Hach Company
+				5600 Lindbergh Drive
+				Loveland  CO  80538
+				US
+
+00-0E-02   (hex)		Advantech AMT Inc.
+000E02     (base 16)		Advantech AMT Inc.
+				657 Orly Ave.
+				Dorval  Quebec  H9P 1G1
+				CA
+
+00-0D-C9   (hex)		THALES Elektronik Systeme GmbH
+000DC9     (base 16)		THALES Elektronik Systeme GmbH
+				Fritz-Ludwig-Str. 1
+				Koblenz    56070
+				DE
+
+00-0D-81   (hex)		Pepperl+Fuchs GmbH
+000D81     (base 16)		Pepperl+Fuchs GmbH
+				Lilienthalstraße 200
+				Mannheim    68307
+				DE
+
+00-0D-7A   (hex)		DiGATTO Asia Pacific Pte Ltd
+000D7A     (base 16)		DiGATTO Asia Pacific Pte Ltd
+				190 Mddle Road, #19-05 Fortune Center
+				    188979
+				SG
+
+00-0D-77   (hex)		FalconStor Software
+000D77     (base 16)		FalconStor Software
+				125 Baylis Rd
+				Melville  NY  11747
+				US
+
+00-0D-76   (hex)		Hokuto Denshi Co,. Ltd.
+000D76     (base 16)		Hokuto Denshi Co,. Ltd.
+				3-7 Odori Nishi 16-Chome Chuoku
+				Sapporo  Hokkaido  060-0042
+				JP
+
+00-0D-7B   (hex)		Consensys Computers Inc.
+000D7B     (base 16)		Consensys Computers Inc.
+				215 Shields Ct.
+				Markham  ON  L3R 8V2
+				CA
+
+00-0D-8F   (hex)		King Tsushin Kogyo Co., LTD.
+000D8F     (base 16)		King Tsushin Kogyo Co., LTD.
+				 1-10-1 Edanishi Aobaku
+				  Yokohama  225-0014
+				JP
+
+00-0D-89   (hex)		Bils Technology Inc
+000D89     (base 16)		Bils Technology Inc
+				508 S River Oaks Drive
+				Indialantic  FL  32903
+				US
+
+00-0D-86   (hex)		Huber + Suhner AG
+000D86     (base 16)		Huber + Suhner AG
+				Degersheimerstrasse 14
+				9100  Herisau  
+				CH
+
+00-0D-C8   (hex)		AirMagnet, Inc
+000DC8     (base 16)		AirMagnet, Inc
+				830 E. Arques Avenue
+				Sunnyvale  CA  94085
+				US
+
+00-0D-BE   (hex)		Bel Fuse Europe Ltd.,UK
+000DBE     (base 16)		Bel Fuse Europe Ltd.,UK
+				45/46 Riverside 2
+				Rochester  Kent  ME2 4DP
+				GB
+
+00-0D-BC   (hex)		Cisco Systems, Inc
+000DBC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0D-9F   (hex)		RF Micro Devices
+000D9F     (base 16)		RF Micro Devices
+				2191 Zanker Road
+				San Jose  CA  95131
+				US
+
+00-0D-A5   (hex)		Fabric7 Systems, Inc
+000DA5     (base 16)		Fabric7 Systems, Inc
+				1300 Crittenden Lane
+				Mountain View  CA  94043
+				US
+
+00-0D-C5   (hex)		EchoStar Global B.V. 
+000DC5     (base 16)		EchoStar Global B.V. 
+				Schuilenburglaan 5a
+				Almelo  Overijssel  7604BJ
+				NL
+
+00-0D-99   (hex)		Orbital Sciences Corp.; Launch Systems Group
+000D99     (base 16)		Orbital Sciences Corp.; Launch Systems Group
+				3380 S. Price Rd.
+				Chandler,  AZ  85248
+				US
+
+00-0D-6C   (hex)		M-Audio
+000D6C     (base 16)		M-Audio
+				45 E ST Joseph St.
+				Arcadia  CA  91006
+				US
+
+00-0D-70   (hex)		Datamax Corporation
+000D70     (base 16)		Datamax Corporation
+				4501 Parkway Commerce Blvd
+				Orlando  FL  32808
+				US
+
+00-0D-59   (hex)		Amity Systems, Inc.
+000D59     (base 16)		Amity Systems, Inc.
+				888 Tasman Drive
+				Milpitas  CA  95035
+				US
+
+00-0D-4E   (hex)		NDR Co.,LTD.
+000D4E     (base 16)		NDR Co.,LTD.
+				Sumitomo seimei minatomachi MT BLDG
+				Osak  Kinki  550-0015
+				JP
+
+00-0D-50   (hex)		Galazar Networks
+000D50     (base 16)		Galazar Networks
+				35 Fitzgerald Ave
+				Ottawa  ON  K2H 1E6
+				CA
+
+00-0D-17   (hex)		Turbo Networks Co.Ltd
+000D17     (base 16)		Turbo Networks Co.Ltd
+				2F,No 1223, Chung Cheng Rd.
+				Tao Yuan    330
+				TW
+
+00-0D-18   (hex)		Mega-Trend Electronics CO., LTD.
+000D18     (base 16)		Mega-Trend Electronics CO., LTD.
+				Tong Fu Yu Ind., Ku Keng Village, Guan Lan
+				Shengzhen  Guang Dong  518110
+				CN
+
+00-0D-20   (hex)		ASAHIKASEI TECHNOSYSTEM CO.,LTD.
+000D20     (base 16)		ASAHIKASEI TECHNOSYSTEM CO.,LTD.
+				Kanda Jinbocho 1-105
+				Chiyoda-ku  Tokyo  101-8101
+				JP
+
+00-0D-49   (hex)		Triton Systems of Delaware, Inc.
+000D49     (base 16)		Triton Systems of Delaware, Inc.
+				522 E. Railroad St.
+				Long Beach  MS  39560
+				US
+
+00-0D-48   (hex)		AEWIN Technologies Co., Ltd.
+000D48     (base 16)		AEWIN Technologies Co., Ltd.
+				7F, No. 2, Lane 47, Sec. 3, Nan-Gang Rd.
+				TAIPEI    115
+				TW
+
+00-0D-24   (hex)		SENTEC E&E CO., LTD.
+000D24     (base 16)		SENTEC E&E CO., LTD.
+				No. 32. Gong5 Rd.
+				Lungtan  Taoyuan  325
+				TW
+
+00-0D-22   (hex)		Unitronics LTD
+000D22     (base 16)		Unitronics LTD
+				Unitronics Building
+				Ben Gurion Airport    70100
+				IL
+
+00-0D-14   (hex)		Vtech Innovation LP dba Advanced American Telephones
+000D14     (base 16)		Vtech Innovation LP dba Advanced American Telephones
+				203-600 Parsippany Rd
+				Parsippany  NJ  07054
+				US
+
+00-0D-5B   (hex)		Smart Empire Investments Limited
+000D5B     (base 16)		Smart Empire Investments Limited
+				Suite 2001-2006,Level 20 Landmark North
+				Xin Jie  Hong Kong  00852
+				CN
+
+00-0D-3A   (hex)		Microsoft Corp.
+000D3A     (base 16)		Microsoft Corp.
+				One Microsoft Way
+				Redmond  Wa.  98052
+				US
+
+00-0D-30   (hex)		IceFyre Semiconductor
+000D30     (base 16)		IceFyre Semiconductor
+				Suite 300
+				Kanata  Ontario  K2K 3C9
+				CA
+
+00-0D-31   (hex)		Compellent Technologies, Inc.
+000D31     (base 16)		Compellent Technologies, Inc.
+				7625 Smetana Lane
+				Eden Prairie  Minnesota  55344
+				US
+
+00-0D-2C   (hex)		Net2Edge Limited
+000D2C     (base 16)		Net2Edge Limited
+				Kulite House Stroudley Road
+				Basingstoke  Hampshire  RG24 8UG
+				GB
+
+00-0D-25   (hex)		SANDEN CORPORATION
+000D25     (base 16)		SANDEN CORPORATION
+				20 Kotobuki-cho
+				Isesaki-shi  Gunma  372-8502
+				JP
+
+00-0D-6F   (hex)		Ember Corporation
+000D6F     (base 16)		Ember Corporation
+				343 Congress St
+				Boston  Ma  02210
+				US
+
+00-0D-5E   (hex)		NEC Personal Products
+000D5E     (base 16)		NEC Personal Products
+				6-80, Shimohanazawa 2-Chome
+				Yonezawa-shi  Yamagata  992-8520
+				JP
+
+00-0D-3F   (hex)		VTI Instruments Corporation
+000D3F     (base 16)		VTI Instruments Corporation
+				5425 Warner Road, Suite 13
+				Valley View  OH  44125
+				US
+
+00-0C-E3   (hex)		Option International N.V.
+000CE3     (base 16)		Option International N.V.
+				Kolonel Begaultlaan 45
+				Leuven  Brabant  3012
+				BE
+
+00-0C-E7   (hex)		MediaTek Inc.
+000CE7     (base 16)		MediaTek Inc.
+				1F, No. 13, Innovation Road 1,
+				Hsinchu    300
+				TW
+
+00-0C-E8   (hex)		GuangZhou AnJuBao Co., Ltd
+000CE8     (base 16)		GuangZhou AnJuBao Co., Ltd
+				HeiQiaoTang TangXia TianHe
+				GuangZhou  GuangDong  510665
+				CN
+
+00-0C-E4   (hex)		NeuroCom International, Inc.
+000CE4     (base 16)		NeuroCom International, Inc.
+				9570 SE Lawnfield Rd
+				Clackamas  OR  97015
+				US
+
+00-0C-B5   (hex)		Premier Technolgies, Inc
+000CB5     (base 16)		Premier Technolgies, Inc
+				PO Box 159
+				Long Lake  MN  55356
+				US
+
+00-0C-B6   (hex)		NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD
+000CB6     (base 16)		NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD
+				5th floor,Building 5,ChangJiangHou Street No.6
+				Nanjing  Jiangsu  210018
+				CN
+
+00-0C-C3   (hex)		BeWAN systems
+000CC3     (base 16)		BeWAN systems
+				16 rue du Moulin des Bruyères Courbevoie
+				Courbevoie  Hauts de Seine  92400
+				FR
+
+00-0C-B4   (hex)		AutoCell Laboratories, Inc.
+000CB4     (base 16)		AutoCell Laboratories, Inc.
+				174 Concord Street
+				Peterborough,  New Hampshire  03458
+				US
+
+00-0C-B1   (hex)		Salland Engineering (Europe) BV
+000CB1     (base 16)		Salland Engineering (Europe) BV
+				Bedrijvenpark Berkum
+				Zwolle  OV  8024 HA
+				NL
+
+00-0C-BC   (hex)		Iscutum
+000CBC     (base 16)		Iscutum
+				#899-6 Ho-Gye Dong, Dong-An Gu
+				An-Yang City  Kyong-Gi Do  431-080
+				KR
+
+00-0D-04   (hex)		Foxboro Eckardt Development GmbH
+000D04     (base 16)		Foxboro Eckardt Development GmbH
+				Glockenstrasse 52
+				Stuttgart  Baden-Württemberg  70376
+				DE
+
+00-0D-08   (hex)		AboveCable, Inc.
+000D08     (base 16)		AboveCable, Inc.
+				8403 Colesville Road, #825
+				Silver Spring  MD  20910
+				US
+
+00-0D-05   (hex)		cybernet manufacturing inc.
+000D05     (base 16)		cybernet manufacturing inc.
+				5 holland
+				irvine  ca  92618
+				US
+
+00-0C-FE   (hex)		Grand Electronic Co., Ltd
+000CFE     (base 16)		Grand Electronic Co., Ltd
+				Room 1710, Block B Lucky tower, No.3 Don
+				Beijing    100027
+				CN
+
+00-0D-0E   (hex)		Inqnet Systems, Inc.
+000D0E     (base 16)		Inqnet Systems, Inc.
+				321 NKIC Center,
+				Seoul    120-100
+				KR
+
+00-0D-11   (hex)		DENTSPLY - Gendex
+000D11     (base 16)		DENTSPLY - Gendex
+				901 West Oakton Street
+				Des Plaines  IL  60018-1884
+				US
+
+00-0C-C8   (hex)		Xytronix Research & Design, Inc.
+000CC8     (base 16)		Xytronix Research & Design, Inc.
+				1488 East 2300 North
+				North Logan  UT  84341-1627
+				US
+
+00-0C-CA   (hex)		HGST a Western Digital Company
+000CCA     (base 16)		HGST a Western Digital Company
+				3403 Yerba Buena Road
+				San Jose  CA  95135
+				US
+
+00-0C-D0   (hex)		Symetrix
+000CD0     (base 16)		Symetrix
+				6408 216th St SW
+				Mountlake Terrace  WA  98043
+				US
+
+00-0C-D9   (hex)		Itcare Co., Ltd
+000CD9     (base 16)		Itcare Co., Ltd
+				408 KT Seocho, 1001-1 Bangbae-dong,
+				Seoul    137-850
+				KR
+
+00-0C-D5   (hex)		Passave Inc.
+000CD5     (base 16)		Passave Inc.
+				1557 Jasper Dr.
+				Sunnyvale  CA  94087
+				US
+
+00-0C-D2   (hex)		Schaffner EMV AG
+000CD2     (base 16)		Schaffner EMV AG
+				Nordstrasse 1
+				Luterbach    CH-4542
+				CH
+
+00-0A-07   (hex)		WebWayOne Ltd
+000A07     (base 16)		WebWayOne Ltd
+				11 Kingfisher Court,
+				Newbury  Berkshire  RG14 5SJ
+				GB
+
+00-0C-B0   (hex)		Star Semiconductor Corporation
+000CB0     (base 16)		Star Semiconductor Corporation
+				6F, No.17, Li-Hsin Rd
+				Hsinchu City    300
+				TW
+
+00-0C-34   (hex)		Vixen Co., Ltd.
+000C34     (base 16)		Vixen Co., Ltd.
+				5-17-3 Higashitokorozawa
+				Tokorozawa  Saitama  359-0021
+				JP
+
+00-0C-58   (hex)		M&S Systems
+000C58     (base 16)		M&S Systems
+				2861 Congressman Lane
+				Dallas  TX  75220
+				US
+
+00-0C-51   (hex)		Scientific Technologies Inc.
+000C51     (base 16)		Scientific Technologies Inc.
+				6550 Dumbarton Circle
+				Fremont  CA  94560
+				US
+
+00-0C-73   (hex)		TELSON ELECTRONICS CO., LTD
+000C73     (base 16)		TELSON ELECTRONICS CO., LTD
+				Telson Venture Tower., 949-3 Dogok-Dong
+				Seoul  Kangnam-Ku  135-739
+				KR
+
+00-0C-65   (hex)		Sunin Telecom
+000C65     (base 16)		Sunin Telecom
+				1025-5 Dokok-Ri, Wabu-Eub
+				Namyangju-City  Kyunggi-Do  472-900
+				KR
+
+00-0C-6C   (hex)		Eve Systems GmbH
+000C6C     (base 16)		Eve Systems GmbH
+				Rotkreuzplatz 1
+				Munich    80634
+				DE
+
+00-0C-6F   (hex)		Amtek system co.,LTD.
+000C6F     (base 16)		Amtek system co.,LTD.
+				14F-11,No.79,Sec. 1 ,Hsin Tai Wu Rd.,
+				Taipei    221
+				TW
+
+00-0C-7E   (hex)		Tellium Incorporated
+000C7E     (base 16)		Tellium Incorporated
+				2 Crescent Place
+				Oceanport  New Jersey  07757
+				US
+
+00-0C-87   (hex)		AMD
+000C87     (base 16)		AMD
+				4555 Great America Pkwy
+				Santa Clara  CA  95054
+				US
+
+00-0C-98   (hex)		LETEK Communications Inc.
+000C98     (base 16)		LETEK Communications Inc.
+				Taeyang Bd. 2nd Floor, 2486
+				SongNam  Kyunggi-do  462-824
+				KR
+
+00-0C-8E   (hex)		Mentor Engineering Inc
+000C8E     (base 16)		Mentor Engineering Inc
+				2891 Sunridge Way NE
+				Calgary  Alberta  T1Y7K7
+				CA
+
+00-0C-A2   (hex)		Harmonic Video Network
+000CA2     (base 16)		Harmonic Video Network
+				10 Ha'amal st. Park Afek
+				Rosh Ha'ayin    48092
+				IL
+
+00-0C-A4   (hex)		Prompttec Product Management GmbH
+000CA4     (base 16)		Prompttec Product Management GmbH
+				Mariatrosterstr. 41
+				Graz  AUSTRIA  A-8043
+				AT
+
+00-0C-5B   (hex)		HANWANG TECHNOLOGY CO.,LTD
+000C5B     (base 16)		HANWANG TECHNOLOGY CO.,LTD
+				8F,Automation Building,95 Zhongguancun,
+				Beijing    100080
+				CN
+
+00-0C-60   (hex)		ACM Systems
+000C60     (base 16)		ACM Systems
+				3034 Gold Canal Drive
+				Rancho Cordova  CA  95670
+				US
+
+00-0C-83   (hex)		Logical Solutions
+000C83     (base 16)		Logical Solutions
+				100T Washington Street
+				Milford  CT  06460
+				US
+
+00-0C-96   (hex)		OQO, Inc.
+000C96     (base 16)		OQO, Inc.
+				1800 Illinois Street
+				San Francisco  CA  94124
+				US
+
+00-0C-08   (hex)		HUMEX Technologies Corp.
+000C08     (base 16)		HUMEX Technologies Corp.
+				5F, No.5, Lane 44, Szu Wei Rd. Taan Taip
+				Taipei    106
+				TW
+
+00-0C-0D   (hex)		Communications & Power Industries / Satcom Division
+000C0D     (base 16)		Communications & Power Industries / Satcom Division
+				811 Hansen Way MS S-600
+				Palo Alto  CA  94303
+				US
+
+00-0C-01   (hex)		Abatron AG
+000C01     (base 16)		Abatron AG
+				Lettenstrasse 9
+				Rotkreuz    CH-6343
+				CH
+
+00-0C-39   (hex)		Sentinel Wireless Inc.
+000C39     (base 16)		Sentinel Wireless Inc.
+				439 S. Union St.
+				South Lawrence  MA  01843
+				US
+
+00-0C-33   (hex)		Compucase Enterprise Co. Ltd.
+000C33     (base 16)		Compucase Enterprise Co. Ltd.
+				225 Lane 54, An Ho Road, Section 2nd.
+				Tainan City    70942
+				TW
+
+00-0B-F6   (hex)		Nitgen Co., Ltd
+000BF6     (base 16)		Nitgen Co., Ltd
+				4th FL. 1337-31 Seocho-dong, Seocho-ku
+				Seoul    137-860
+				KR
+
+00-0B-FD   (hex)		Cisco Systems, Inc
+000BFD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-FA   (hex)		EXEMYS SRL
+000BFA     (base 16)		EXEMYS SRL
+				LOYOLA 680
+				CAPITAL FEDERAL  BS AS  C1414
+				AR
+
+00-0B-F4   (hex)		Private
+000BF4     (base 16)		Private
+
+00-0B-FB   (hex)		D-NET International Corporation
+000BFB     (base 16)		D-NET International Corporation
+				15, Wu-Chuan 5th Road, Wu-Ku Industrial
+				Taipei  Hsieh    248
+				US
+
+00-0C-1D   (hex)		Mettler & Fuchs AG
+000C1D     (base 16)		Mettler & Fuchs AG
+				Querstrasse 17
+				CH-8951  Fahrweid  
+				CH
+
+00-0C-1E   (hex)		Global Cache
+000C1E     (base 16)		Global Cache
+				160 East California Street
+				Jacksonville  OR  97530
+				US
+
+00-0C-1A   (hex)		Quest Technical Solutions Inc.
+000C1A     (base 16)		Quest Technical Solutions Inc.
+				4110 Mourning Dove Crt.
+				Melbourne  FL  32934
+				US
+
+00-0C-24   (hex)		ANATOR
+000C24     (base 16)		ANATOR
+				44, rue d'Estienne d'Orves
+				sartrouville  yvelines  78500
+				FR
+
+00-0C-19   (hex)		Telio Communications GmbH
+000C19     (base 16)		Telio Communications GmbH
+				Elbchaussee 1
+				Hamburg    22765
+				DE
+
+00-0C-13   (hex)		MediaQ
+000C13     (base 16)		MediaQ
+				2975 San Ysidro Way
+				Santa Clara  CA  95051
+				US
+
+00-0C-06   (hex)		Nixvue Systems  Pte Ltd
+000C06     (base 16)		Nixvue Systems  Pte Ltd
+				30 Loyang Way, #07-02
+				Singapore  Singapore  S508769
+				SG
+
+00-0C-2D   (hex)		FullWave Technology Co., Ltd.
+000C2D     (base 16)		FullWave Technology Co., Ltd.
+				7F-6, No.26, TaiYuan St.,
+				JuBei  Hsin Chu  302
+				TW
+
+00-0C-26   (hex)		Weintek Labs. Inc.
+000C26     (base 16)		Weintek Labs. Inc.
+				3F, No.910, Chung Cheng Rd.
+				Chung Ho city  Taipei Hsien  236
+				TW
+
+00-0C-2B   (hex)		ELIAS Technology, Inc.
+000C2B     (base 16)		ELIAS Technology, Inc.
+				3F, 1015, Yung-An Road,
+				Taoyuan City  Taoyuan  330
+				TW
+
+00-0B-F0   (hex)		MoTEX Products Co., Ltd.
+000BF0     (base 16)		MoTEX Products Co., Ltd.
+				C.P.O.Box 6912
+				Chong-gu  Seoul  82
+				KR
+
+00-0B-F1   (hex)		LAP Laser Applikations
+000BF1     (base 16)		LAP Laser Applikations
+				Zeppelinstraße 23
+				Lüneburg  Niedersachsen  21337
+				DE
+
+00-0B-EE   (hex)		inc.jet, Incorporated
+000BEE     (base 16)		inc.jet, Incorporated
+				One Winnenden Road
+				Norwich  CT  06360
+				US
+
+00-0B-8D   (hex)		Avvio Networks
+000B8D     (base 16)		Avvio Networks
+				11 Donovan Dr
+				Bedford  MA  01730
+				US
+
+00-0B-85   (hex)		Cisco Systems, Inc
+000B85     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-7F   (hex)		Align Engineering LLC
+000B7F     (base 16)		Align Engineering LLC
+				245 Highlands Drive
+				Friday Harbor   WA  98250
+				US
+
+00-0B-A6   (hex)		Miyakawa Electric Works Ltd.
+000BA6     (base 16)		Miyakawa Electric Works Ltd.
+				2-1-6,
+				Yokohama  Kanagawa  222-0001
+				JP
+
+00-0B-93   (hex)		Ritter Elektronik
+000B93     (base 16)		Ritter Elektronik
+				Leverkuser Straße 65
+				Remscheid  NRW  42897
+				DE
+
+00-0B-9B   (hex)		Sirius System Co, Ltd.
+000B9B     (base 16)		Sirius System Co, Ltd.
+				3-27 Funado-cho
+				Ashiya  Hyogo  659-0093
+				JP
+
+00-0B-E2   (hex)		Lumenera Corporation
+000BE2     (base 16)		Lumenera Corporation
+				2520B St. Laurent Blvd.
+				Ottawa  Ontario  K1B 4R8
+				CA
+
+00-0B-E1   (hex)		Nokia NET Product Operations
+000BE1     (base 16)		Nokia NET Product Operations
+				313 Fairchild Drive
+				Mountain View  California  94043
+				US
+
+00-0B-A8   (hex)		HANBACK ELECTRONICS CO., LTD.
+000BA8     (base 16)		HANBACK ELECTRONICS CO., LTD.
+				306-7, Galma-dong, Seo-gu
+				Daejeon    302-171
+				KR
+
+00-0B-A9   (hex)		CloudShield Technologies, Inc.
+000BA9     (base 16)		CloudShield Technologies, Inc.
+				212 Gilbraltar Drive
+				Sunnyvale  CA  94089
+				US
+
+00-0B-A1   (hex)		Fujikura Solutions Ltd.
+000BA1     (base 16)		Fujikura Solutions Ltd.
+				1565-6,Shirakusadai,Fukaya-shi
+				Saitama-ken    369-1106
+				JP
+
+00-0B-8E   (hex)		Ascent Corporation
+000B8E     (base 16)		Ascent Corporation
+				2-16-19, Kawaraya-machi, Chuo-Ku,
+				Osaka-City  Osaka-Pref  542-0066
+				JP
+
+00-0B-8F   (hex)		AKITA ELECTRONICS SYSTEMS CO.,LTD.
+000B8F     (base 16)		AKITA ELECTRONICS SYSTEMS CO.,LTD.
+				85,AZA USHIRONO,AIKAWA,YUWA-MACHI
+				KAWABE-GUN  AKITA-KEN  010-1231
+				JP
+
+00-0B-CB   (hex)		Fagor Automation , S. Coop
+000BCB     (base 16)		Fagor Automation , S. Coop
+				San Andres s/n
+				  Guipuzcoa  20500
+				ES
+
+00-0B-C8   (hex)		AirFlow Networks
+000BC8     (base 16)		AirFlow Networks
+				444 Castro St
+				Mountain View  Ca  94041
+				US
+
+00-0B-CE   (hex)		Free2move AB
+000BCE     (base 16)		Free2move AB
+				Sperlingsgatan 7
+				Halmstad  Halland  30248
+				SE
+
+00-0B-CF   (hex)		AGFA NDT INC.
+000BCF     (base 16)		AGFA NDT INC.
+				50 Industrial Park Road
+				Lewistown  PA  17044
+				US
+
+00-0B-C3   (hex)		Multiplex, Inc.
+000BC3     (base 16)		Multiplex, Inc.
+				5000 Hadley Rd.
+				S. Plainfield  NJ  07040
+				US
+
+00-0B-BE   (hex)		Cisco Systems, Inc
+000BBE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-E0   (hex)		SercoNet Ltd.
+000BE0     (base 16)		SercoNet Ltd.
+				16 Ha'haroshet st.
+				Ra'anana    43657
+				IL
+
+00-0B-BD   (hex)		Connexionz Limited
+000BBD     (base 16)		Connexionz Limited
+				1 Show Place
+				Christchurch    
+				NZ
+
+00-0B-40   (hex)		Cambridge Industries Group (CIG)
+000B40     (base 16)		Cambridge Industries Group (CIG)
+				2560 Junction Avenue
+				San Jose    95134
+				US
+
+00-0B-42   (hex)		commax Co., Ltd.
+000B42     (base 16)		commax Co., Ltd.
+				513-11, Sangdaewon-Dong, Jungwon-Ku
+				Sungnam-City  Kyunggi-Do  462-120
+				KR
+
+00-0B-47   (hex)		Advanced Energy
+000B47     (base 16)		Advanced Energy
+				1625 Sharp Point Drive
+				Fort Collins  Colorado  80525
+				US
+
+00-0B-81   (hex)		Kaparel Corporation
+000B81     (base 16)		Kaparel Corporation
+				97 Randall Drive
+				Waterloo  Ontario  N2V-1C5
+				CA
+
+00-0B-82   (hex)		Grandstream Networks, Inc.
+000B82     (base 16)		Grandstream Networks, Inc.
+				1297 Beacon Street
+				Brookline  MA  02446
+				US
+
+00-0B-6E   (hex)		Neff Instrument Corp.
+000B6E     (base 16)		Neff Instrument Corp.
+				700 South Myrtle Ave.
+				Monrovia  CA  91016
+				US
+
+00-0B-72   (hex)		Lawo AG
+000B72     (base 16)		Lawo AG
+				Am Oberwald 8
+				Rastatt  Baden-Württemberg  76437
+				DE
+
+00-0B-31   (hex)		Yantai ZhiYang Scientific and technology industry CO., LTD
+000B31     (base 16)		Yantai ZhiYang Scientific and technology industry CO., LTD
+				5F-4, NO. 64, Gong-Jian Rd.
+				Hsi-Chih City  Taipei County  221
+				CN
+
+00-0B-2F   (hex)		bplan GmbH
+000B2F     (base 16)		bplan GmbH
+				Industriestrasse 23b
+				Steinbach  Hessen  61449
+				DE
+
+00-0B-3D   (hex)		CONTAL OK Ltd.
+000B3D     (base 16)		CONTAL OK Ltd.
+				Frana Mraza 2/289
+				Zilina    01124
+				SK
+
+00-0B-4D   (hex)		Emuzed
+000B4D     (base 16)		Emuzed
+				46750 Lakeview Boulevard
+				Fremont  California  94538
+				US
+
+00-0B-24   (hex)		AirLogic
+000B24     (base 16)		AirLogic
+				807-1, Bundangtechnopark D, 151,
+				Sungnam-Si  Kyungki-Do  463-760
+				KR
+
+00-0B-78   (hex)		TAIFATECH INC.
+000B78     (base 16)		TAIFATECH INC.
+				8F-1 No.289, Sec.2  Guangfu Rd.
+				Hsinchu    300
+				TW
+
+00-0B-6C   (hex)		Sychip Inc.
+000B6C     (base 16)		Sychip Inc.
+				2805 N. Dallas Parkway Suite 400
+				Plano  Texas  75093
+				US
+
+00-91-D6   (hex)		Crystal Group, Inc.
+0091D6     (base 16)		Crystal Group, Inc.
+				850 Kacena Rd.
+				Hiawatha  IA  52233
+				US
+
+00-0B-5A   (hex)		HyperEdge
+000B5A     (base 16)		HyperEdge
+				333 Pierce Road Suite #200
+				Itasca  IL  60143
+				US
+
+00-0B-0F   (hex)		Bosch Rexroth
+000B0F     (base 16)		Bosch Rexroth
+				Luchthavenweg 20
+				Eindhoven  Noord Brabant  NL5657 EB
+				NL
+
+00-0B-0C   (hex)		Agile Systems Inc.
+000B0C     (base 16)		Agile Systems Inc.
+				575 Kumpf Drive
+				Waterloo  Ontario  N2V 1K3
+				CA
+
+00-0B-0A   (hex)		dBm Optics
+000B0A     (base 16)		dBm Optics
+				300 S. Public Road
+				Lafayette  Colorado  80026
+				US
+
+00-0B-09   (hex)		Ifoundry Systems Singapore
+000B09     (base 16)		Ifoundry Systems Singapore
+				Block 1, Unit 101B, Innovation Centre, 1
+				    637722
+				SG
+
+00-0B-1D   (hex)		LayerZero Power Systems, Inc.
+000B1D     (base 16)		LayerZero Power Systems, Inc.
+				3559 Townley Road
+				Shaker Heights  OH  44122-5156
+				US
+
+00-0B-19   (hex)		Vernier Networks, Inc.
+000B19     (base 16)		Vernier Networks, Inc.
+				490 E. Middlefield Road
+				Mountain View  CA  94043
+				US
+
+00-0B-16   (hex)		Communication Machinery Corporation
+000B16     (base 16)		Communication Machinery Corporation
+				402 E. Gutierrez St.
+				Santa Barbara  CA  93101
+				US
+
+00-0B-12   (hex)		NURI Telecom Co., Ltd.
+000B12     (base 16)		NURI Telecom Co., Ltd.
+				B-10F Woolim Lion's Valley 371-28
+				Geuncheon-gu  Seoul  153-803
+				KR
+
+00-0A-C5   (hex)		Color Kinetics
+000AC5     (base 16)		Color Kinetics
+				10 Milk Street
+				Boston  Masachusetts  02108
+				US
+
+00-0A-BD   (hex)		Rupprecht & Patashnick Co.
+000ABD     (base 16)		Rupprecht & Patashnick Co.
+				25 Corporate Circle
+				Albany  NY  12203
+				US
+
+00-0A-CB   (hex)		XPAK MSA Group
+000ACB     (base 16)		XPAK MSA Group
+				Care of: Molex Fiber Optics
+				Downers Grove  IL  60515
+				US
+
+00-0A-D5   (hex)		Brainchild Electronic Co., Ltd.
+000AD5     (base 16)		Brainchild Electronic Co., Ltd.
+				No.209, Chung Yang Rd.,
+				Taipei    115
+				TW
+
+00-0A-D6   (hex)		BeamReach Networks
+000AD6     (base 16)		BeamReach Networks
+				755 North Mathilda Ave
+				Sunnyvale  California  94086
+				US
+
+00-0A-FE   (hex)		NovaPal Ltd
+000AFE     (base 16)		NovaPal Ltd
+				Floor 6
+				Ealing  London  W5 2ST
+				GB
+
+00-0A-FD   (hex)		Kentec Electronics
+000AFD     (base 16)		Kentec Electronics
+				620 Allendale Rd
+				King of Prussia  PA  19406
+				US
+
+00-0A-EF   (hex)		OTRUM ASA
+000AEF     (base 16)		OTRUM ASA
+				Brattekleiv
+				Færvik    N-4818
+				NO
+
+00-0A-E5   (hex)		ScottCare Corporation
+000AE5     (base 16)		ScottCare Corporation
+				4791 West 150th Street
+				Cleveland  Ohio  44135
+				US
+
+00-0A-B0   (hex)		LOYTEC electronics GmbH
+000AB0     (base 16)		LOYTEC electronics GmbH
+				Stolzenthalergasse 24/3
+				Vienna    1080
+				AT
+
+00-0A-B5   (hex)		Digital Electronic Network
+000AB5     (base 16)		Digital Electronic Network
+				8 rue du sacré  coeur
+				Saint Laurent sur Sevre  Vendee  85290
+				FR
+
+00-0A-D2   (hex)		JEPICO Corporation
+000AD2     (base 16)		JEPICO Corporation
+				Nishi-shinjyuku2-7-1
+				Shinjyuku-ku  Tokyo  163-0729
+				JP
+
+00-0A-98   (hex)		M+F Gwinner GmbH & Co
+000A98     (base 16)		M+F Gwinner GmbH & Co
+				Weidenbaumsweg 91 a
+				Hamburg    21029
+				DE
+
+00-0A-9B   (hex)		TB Group Inc
+000A9B     (base 16)		TB Group Inc
+				 4F NREG Hongo 3-chome Bldg., 3-26-6, Hngo, Bunkyo-ku, 
+				Tokyo    113-003
+				JP
+
+00-0A-6C   (hex)		Walchem Corporation
+000A6C     (base 16)		Walchem Corporation
+				5 Boynton Road
+				Holliston  MA  01746
+				US
+
+00-0A-5F   (hex)		almedio inc.
+000A5F     (base 16)		almedio inc.
+				32-13, sakae-cho 2 chome
+				higashimurayama-shi  tokyo  189-0013
+				JP
+
+00-0A-6B   (hex)		Tadiran Telecom Business Systems LTD
+000A6B     (base 16)		Tadiran Telecom Business Systems LTD
+				18 Hasivim St.
+				Petach Tikva    49105
+				IL
+
+00-0A-61   (hex)		Cellinx Systems Inc.
+000A61     (base 16)		Cellinx Systems Inc.
+				408 Woosung Character199 officetel
+				Seoul    135-856
+				KR
+
+00-0A-78   (hex)		OLITEC
+000A78     (base 16)		OLITEC
+				B.P. 592
+				NANCY cedex    54009
+				FR
+
+00-0A-A9   (hex)		Brooks Automation GmbH
+000AA9     (base 16)		Brooks Automation GmbH
+				Goeschwitzer Strasse 25
+				Jena  Thuringia  07745
+				DE
+
+00-0A-A5   (hex)		MAXLINK INDUSTRIES LIMITED
+000AA5     (base 16)		MAXLINK INDUSTRIES LIMITED
+				29A SHENZHEN SPECIAL ZONE
+				SHENZHEN  GUANGDONG  518009
+				CN
+
+00-0A-A2   (hex)		SYSTEK INC.
+000AA2     (base 16)		SYSTEK INC.
+				JCOM BUILDING 402, OJEON-DONG 124-4,
+				UIWANG-SI  GYUNGGI-DO  437-070
+				KR
+
+00-0A-5B   (hex)		Power-One as
+000A5B     (base 16)		Power-One as
+				P.O. Box 1543
+				Drammen    3007
+				NO
+
+00-0A-55   (hex)		MARKEM Corporation
+000A55     (base 16)		MARKEM Corporation
+				150 Congress Street
+				Keene  NH  03431
+				US
+
+00-0A-73   (hex)		Scientific Atlanta
+000A73     (base 16)		Scientific Atlanta
+				5030 Sugarloaf Parkway
+				Lawrenceville  Ga  30042
+				US
+
+00-0A-69   (hex)		SUNNY bell Technology Co., Ltd.
+000A69     (base 16)		SUNNY bell Technology Co., Ltd.
+				#502 BUWON B/D 107-45 BANPO-DONG
+				SEOUL    137-806
+				KR
+
+00-0A-84   (hex)		Rainsun Enterprise Co., Ltd.
+000A84     (base 16)		Rainsun Enterprise Co., Ltd.
+				No.14-3 , Lane 235, Ho-Chen Road
+				ShinDian City  TAIPEI  231
+				TW
+
+00-0A-7E   (hex)		The Advantage Group
+000A7E     (base 16)		The Advantage Group
+				1610 Des Peres Road
+				St. Louis  MO  63131
+				US
+
+00-0A-4C   (hex)		Molecular Devices Corporation
+000A4C     (base 16)		Molecular Devices Corporation
+				1311 Orleans Drive
+				Sunnyvale  CA  94089
+				US
+
+00-0A-4D   (hex)		Noritz Corporation
+000A4D     (base 16)		Noritz Corporation
+				5 Minami-Futami,
+				Akashi-shi  Hyogo  674-0093
+				JP
+
+00-0A-91   (hex)		HemoCue AB
+000A91     (base 16)		HemoCue AB
+				Box 1204
+				Ängelholm  Skåne län   26223
+				SE
+
+00-09-F2   (hex)		Cohu, Inc., Electronics Division
+0009F2     (base 16)		Cohu, Inc., Electronics Division
+				3912 Calle Fortunada
+				San Diego  CA  92123
+				US
+
+00-09-E9   (hex)		Cisco Systems, Inc
+0009E9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-DC   (hex)		Galaxis Technology AG
+0009DC     (base 16)		Galaxis Technology AG
+				Steinmetzstraße 7
+				Lübeck  Schleswig-Holstein  23556
+				DE
+
+00-0A-3A   (hex)		J-THREE INTERNATIONAL Holding Co., Ltd.
+000A3A     (base 16)		J-THREE INTERNATIONAL Holding Co., Ltd.
+				No. 1, Yu-3 Rd., Youth Industrial Park
+				Yang-mei, Taoyuan Hsien    326
+				TW
+
+00-0A-47   (hex)		Allied Vision Technologies
+000A47     (base 16)		Allied Vision Technologies
+				Taschenweg 2a
+				Stadtroda  Thüringen  07646
+				DE
+
+00-0A-3C   (hex)		Enerpoint Ltd.
+000A3C     (base 16)		Enerpoint Ltd.
+				Kaivopuistontie 33
+				Rauma    26100
+				FI
+
+00-0A-44   (hex)		Avery Dennison Deutschland GmbH
+000A44     (base 16)		Avery Dennison Deutschland GmbH
+				Ohmstraße 3
+				Eching    85386
+				DE
+
+00-09-F8   (hex)		UNIMO TECHNOLOGY CO., LTD.
+0009F8     (base 16)		UNIMO TECHNOLOGY CO., LTD.
+				BANGBAE DONG 479-12
+				SEOUL    137-820
+				KR
+
+00-09-FF   (hex)		X.net 2000 GmbH
+0009FF     (base 16)		X.net 2000 GmbH
+				Koenigsberger Str. 2c
+				Reinheim    64354
+				DE
+
+00-0A-03   (hex)		ENDESA SERVICIOS, S.L.
+000A03     (base 16)		ENDESA SERVICIOS, S.L.
+				AVGDA PARAL.LEL, 51
+				BARCELONA    08004
+				ES
+
+00-09-FE   (hex)		Daisy Technologies, Inc.
+0009FE     (base 16)		Daisy Technologies, Inc.
+				1209 Orange Street
+				City of Wilmington  DE  19801
+				US
+
+00-0A-28   (hex)		Motorola
+000A28     (base 16)		Motorola
+				600 N. US Hwy 45
+				Libertyville  IL  60048
+				US
+
+00-0A-29   (hex)		Pan Dacom Networking AG
+000A29     (base 16)		Pan Dacom Networking AG
+				Dreieich Plaza 1B
+				Dreieich  Hessen  D-63303
+				DE
+
+00-09-EB   (hex)		HuMANDATA LTD.
+0009EB     (base 16)		HuMANDATA LTD.
+				1-2-10
+				Ibaraki  Osaka  567-0034
+				JP
+
+00-09-E8   (hex)		Cisco Systems, Inc
+0009E8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-ED   (hex)		CipherOptics
+0009ED     (base 16)		CipherOptics
+				701 Corporate Center Drive
+				Raleigh  North Carolina  27607
+				US
+
+00-0A-40   (hex)		Crown Audio -- Harmanm International
+000A40     (base 16)		Crown Audio -- Harmanm International
+				1718 W. Mishawaka Rd
+				Elkhart  IN  46517
+				US
+
+00-0A-26   (hex)		CEIA S.p.A.
+000A26     (base 16)		CEIA S.p.A.
+				Zona Industriale di Viciomaggio 54
+				Arezzo  AR  52040
+				IT
+
+00-0A-1D   (hex)		Optical Communications Products Inc.
+000A1D     (base 16)		Optical Communications Products Inc.
+				20961 Knapp St.
+				Chatsworth  CA  91311
+				US
+
+00-0A-16   (hex)		Lassen Research
+000A16     (base 16)		Lassen Research
+				31695 Forward Road
+				Manton  CA  96059
+				US
+
+00-0A-18   (hex)		Vichel Inc.
+000A18     (base 16)		Vichel Inc.
+				3F Jang Bldg. 92-6 Yangjae-dong, Secho-g
+				Seoul    137-130
+				KR
+
+00-0A-06   (hex)		Teledex LLC
+000A06     (base 16)		Teledex LLC
+				6311 San Ignacio Avenue
+				San Jose  CA  95119
+				US
+
+00-09-A9   (hex)		Ikanos Communications
+0009A9     (base 16)		Ikanos Communications
+				47709 Fremont Blvd
+				Fremont  CA  94538
+				US
+
+00-09-9F   (hex)		VIDEX INC.
+00099F     (base 16)		VIDEX INC.
+				1105 NE Circle Blvd
+				Corvallis  OR  97330
+				US
+
+00-09-A2   (hex)		Interface Co., Ltd.
+0009A2     (base 16)		Interface Co., Ltd.
+				2-5-12-201 Kyonancho
+				Musashino-city  Tokyo  180-0023
+				JP
+
+00-09-A1   (hex)		Telewise Communications, Inc.
+0009A1     (base 16)		Telewise Communications, Inc.
+				2050 Ringwood Avenue
+				San Jose  CA  95131
+				US
+
+00-09-7D   (hex)		SecWell Networks Oy
+00097D     (base 16)		SecWell Networks Oy
+				P.O.BOX 174
+				Tampere    33101
+				FI
+
+00-09-76   (hex)		Datasoft ISDN Systems GmbH
+000976     (base 16)		Datasoft ISDN Systems GmbH
+				Schillerplatz 3
+				St. Poelten  Lower Austria  3100
+				AT
+
+00-09-C6   (hex)		Visionics Corporation
+0009C6     (base 16)		Visionics Corporation
+				5600 Rowland Road
+				Minnetonka  MN  55343
+				US
+
+00-09-D1   (hex)		SERANOA NETWORKS INC
+0009D1     (base 16)		SERANOA NETWORKS INC
+				CONCORD OFFICE CENTER
+				CONCORD  MA  01742
+				US
+
+00-09-CE   (hex)		SpaceBridge Semiconductor Corp.
+0009CE     (base 16)		SpaceBridge Semiconductor Corp.
+				115 rue Champlain
+				Hull  Quebec  J8X3R1
+				CA
+
+00-09-B8   (hex)		Entise Systems
+0009B8     (base 16)		Entise Systems
+				10095 Judy Avenue
+				Cupertino  CA  95014
+				US
+
+00-09-AF   (hex)		e-generis
+0009AF     (base 16)		e-generis
+				13 rue du chene germain
+				cesson sevigne    35510
+				FR
+
+00-09-AD   (hex)		HYUNDAI SYSCOMM, INC.
+0009AD     (base 16)		HYUNDAI SYSCOMM, INC.
+				SAN 136-1, AMI-RI, BUBAL-EUB
+				ICHON  KYOUNGKI-DO  467-701
+				KR
+
+00-09-BD   (hex)		Epygi Technologies, Ltd.
+0009BD     (base 16)		Epygi Technologies, Ltd.
+				5040 Addison Circle
+				Addison  Texas  75001
+				US
+
+00-09-C2   (hex)		Onity, Inc.
+0009C2     (base 16)		Onity, Inc.
+				2232 Northmont Parkway
+				Duluth  GA  30096
+				US
+
+00-09-C3   (hex)		NETAS
+0009C3     (base 16)		NETAS
+				Alemdag Cad. No 171
+				ISTANBUL    81244
+				TR
+
+00-09-B5   (hex)		3J Tech. Co., Ltd.
+0009B5     (base 16)		3J Tech. Co., Ltd.
+				342 Fushing N. Rd., 2F, Taipei, Taiwan
+				Taipei    104
+				TW
+
+00-09-82   (hex)		Loewe Opta GmbH
+000982     (base 16)		Loewe Opta GmbH
+				Industriestrasse 11
+				Kronach    96317
+				DE
+
+00-09-83   (hex)		GlobalTop Technology, Inc.
+000983     (base 16)		GlobalTop Technology, Inc.
+				 #16 Nan-Ke 9th Road
+				Tainan    741
+				TW
+
+00-09-DD   (hex)		Mavin Technology Inc.
+0009DD     (base 16)		Mavin Technology Inc.
+				Room 305, Bldg. 52 No. 195-28
+				Chutung, Hsinchu    310
+				TW
+
+00-09-7A   (hex)		Louis Design Labs.
+00097A     (base 16)		Louis Design Labs.
+				2F,NO 4, Lane 497, Chung-Cheng Rd.,Hsin-
+				Hsin-Tien  Taipei Hsien  231
+				TW
+
+00-09-6B   (hex)		IBM Corp
+00096B     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-09-6D   (hex)		Powernet Technologies Corp.
+00096D     (base 16)		Powernet Technologies Corp.
+				371-51, Gasan-Dong Kumchon-Gu,
+				Seoul    153-803
+				KR
+
+00-09-64   (hex)		Hi-Techniques, Inc.
+000964     (base 16)		Hi-Techniques, Inc.
+				2515 Frazier Ave.
+				Madison  WI  53713-1505
+				US
+
+00-09-65   (hex)		HyunJu Computer Co., Ltd.
+000965     (base 16)		HyunJu Computer Co., Ltd.
+				222-22, Hyunju B/D, Guro 3 Dong, Gurogu
+				Seoul    152-848
+				KR
+
+00-09-39   (hex)		ShibaSoku Co.,Ltd.
+000939     (base 16)		ShibaSoku Co.,Ltd.
+				6-8 Shinbashi 4-chome
+				Minato-ku  Tokyo  105-0004
+				JP
+
+00-09-33   (hex)		Ophit Co.Ltd.
+000933     (base 16)		Ophit Co.Ltd.
+				3F. Suntechnovil, 5-27  Mangpo-Dong ,
+				Kyungki-Do    137-070
+				KR
+
+00-09-32   (hex)		Omnilux
+000932     (base 16)		Omnilux
+				130 W. Union St.
+				Pasadena  CA  91103
+				US
+
+00-09-1C   (hex)		CacheVision, Inc
+00091C     (base 16)		CacheVision, Inc
+				1990 Concourse Drive
+				San Jose  CA  95131
+				US
+
+00-09-1A   (hex)		Macat Optics & Electronics Co., Ltd.
+00091A     (base 16)		Macat Optics & Electronics Co., Ltd.
+				15/F., Macat Center, No. 63 Macat Road
+				Huizhou  Guangdong  516001
+				CN
+
+00-09-1B   (hex)		Digital Generation Inc.
+00091B     (base 16)		Digital Generation Inc.
+				5F, Ho-Sam B/D, #30-3, Bongchun6-Dong
+				Kwanak-Ku,  Seoul  151-089
+				KR
+
+00-09-29   (hex)		Sanyo Industries (UK) Limited
+000929     (base 16)		Sanyo Industries (UK) Limited
+				School Road
+				Lowestoft  Suffolk  NR33 9NA
+				GB
+
+00-09-28   (hex)		Telecore
+000928     (base 16)		Telecore
+				1800 North Glenville
+				Richardson  TX  75081
+				US
+
+00-09-2E   (hex)		B&Tech System Inc.
+00092E     (base 16)		B&Tech System Inc.
+				#601, Seo-Jung B/D, 830-24, Youksam-Dong
+				Seoul    
+				KR
+
+00-09-6F   (hex)		Beijing Zhongqing Elegant Tech. Corp.,Limited
+00096F     (base 16)		Beijing Zhongqing Elegant Tech. Corp.,Limited
+				Rm.508, A-Building, Shangdi Digital Scie
+				Beijing    100084
+				CN
+
+00-09-5E   (hex)		Masstech Group Inc.
+00095E     (base 16)		Masstech Group Inc.
+				2 East Beaver Creek Rd.
+				Richmond Hill  Ontario  L4B 2N3
+				CA
+
+00-09-4F   (hex)		elmegt GmbH & Co. KG
+00094F     (base 16)		elmegt GmbH & Co. KG
+				Kommunikationstechnik
+				Peine  Niedersachsen  D-31228
+				DE
+
+00-09-43   (hex)		Cisco Systems, Inc
+000943     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-02   (hex)		Redline Communications Inc.
+000902     (base 16)		Redline Communications Inc.
+				302 Town Centre Blvd
+				Markham  ON  L3R 0E8
+				CA
+
+00-08-FA   (hex)		KEB Automation KG
+0008FA     (base 16)		KEB Automation KG
+				Südstraße 38
+				Barntrup  NRW  D-32683
+				DE
+
+00-09-59   (hex)		Sitecsoft
+000959     (base 16)		Sitecsoft
+				7th Gugu BD. 145-18 Samsung-Dong
+				Seoul  Seoul  135-090
+				KR
+
+00-09-57   (hex)		Supercaller, Inc.
+000957     (base 16)		Supercaller, Inc.
+				101 Saginaw Drive
+				Redwood City  CA  94063
+				US
+
+00-08-D2   (hex)		ZOOM Networks Inc.
+0008D2     (base 16)		ZOOM Networks Inc.
+				13F,XinLuDao Building,No.1175,Nanshan Ro
+				Shen Zhen  GuangDong Province  518052
+				US
+
+00-08-C5   (hex)		Liontech Co., Ltd.
+0008C5     (base 16)		Liontech Co., Ltd.
+				306, Wooyoung Techno Center, 273-15,
+				Seoul    133-831
+				KR
+
+00-08-AA   (hex)		KARAM
+0008AA     (base 16)		KARAM
+				98-3,  Hankangro 2-KA, Yongsan
+				Seoul    140-012
+				KR
+
+00-08-AB   (hex)		EnerLinx.com, Inc.
+0008AB     (base 16)		EnerLinx.com, Inc.
+				3965 South Woodhill Lane
+				New Berlin  WI  53151
+				US
+
+00-08-AD   (hex)		Toyo-Linx Co., Ltd.
+0008AD     (base 16)		Toyo-Linx Co., Ltd.
+				Hirakawa-Cho, Chiyada-ku,
+				Tokyo    102-0093
+				JP
+
+00-08-F2   (hex)		C&S Technology
+0008F2     (base 16)		C&S Technology
+				C&S Venture Bldg., NonHyun-Dong,
+				SEOUL    135-829
+				KR
+
+00-08-EA   (hex)		Motion Control Engineering, Inc
+0008EA     (base 16)		Motion Control Engineering, Inc
+				11380 White Rock Road
+				Rancho Cordova  CA  95742
+				US
+
+00-08-ED   (hex)		ST&T Instrument Corp.
+0008ED     (base 16)		ST&T Instrument Corp.
+				16 Shing-Gong Road, Yung-Kung Industrial
+				Yung-Kung  Tainan  710
+				TW
+
+00-08-88   (hex)		OULLIM Information Technology Inc,.
+000888     (base 16)		OULLIM Information Technology Inc,.
+				a-10th FL,. IT Venture Tower,
+				Seoul    138-803
+				KR
+
+00-08-85   (hex)		EMS Dr. Thomas Wünsche
+000885     (base 16)		EMS Dr. Thomas Wünsche
+				Sonnenhang 3
+				    
+				DE
+
+00-08-72   (hex)		Sorenson Communications
+000872     (base 16)		Sorenson Communications
+				4192 South Riverboat Road
+				Salt Lake City  UT  84123
+				US
+
+00-08-9A   (hex)		Alcatel Microelectronics
+00089A     (base 16)		Alcatel Microelectronics
+				Excelsiorlaan 44-46
+				B-1930 Zavantem    
+				BE
+
+00-08-A1   (hex)		CNet Technology Inc.
+0008A1     (base 16)		CNet Technology Inc.
+				No.15, Park Avenue II, Science-Based Ind
+				Hsin-Chu    300
+				TW
+
+00-08-93   (hex)		LE INFORMATION COMMUNICATION INC.
+000893     (base 16)		LE INFORMATION COMMUNICATION INC.
+				Rm, 4501, DA-Dong Chungang Circulation C
+				Seoul    152-721
+				KR
+
+00-08-CA   (hex)		TwinHan Technology Co.,Ltd
+0008CA     (base 16)		TwinHan Technology Co.,Ltd
+				13F-6,No 79,Sec 1,Hsin Tai Wu RD.,Hsi-Ch
+				Taipei Hsien    221
+				TW
+
+00-08-B6   (hex)		RouteFree, Inc.
+0008B6     (base 16)		RouteFree, Inc.
+				3400 Hillview Ave., Building 5
+				Palo Alto  CA  94304
+				US
+
+00-08-D8   (hex)		Dowkey Microwave
+0008D8     (base 16)		Dowkey Microwave
+				4822 McGrath Street
+				Ventura  Ca  93003
+				US
+
+00-08-DF   (hex)		Alistel Inc.
+0008DF     (base 16)		Alistel Inc.
+				Midori Bldg. 2F
+				Yokohama  Kanagawa  222-0001
+				JP
+
+00-08-DB   (hex)		Corrigent Systems
+0008DB     (base 16)		Corrigent Systems
+				126 Yigal Alon
+				Tel Aviv    67443
+				IL
+
+00-08-7C   (hex)		Cisco Systems, Inc
+00087C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-79   (hex)		CEM Corporation
+000879     (base 16)		CEM Corporation
+				P.O. Box 200
+				Matthews  NC  28106
+				US
+
+00-08-7D   (hex)		Cisco Systems, Inc
+00087D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-75   (hex)		Acorp Electronics Corp.
+000875     (base 16)		Acorp Electronics Corp.
+				8F, No.111-6,Shing Teh Rd,
+				San Chung  Taipei Hsien  241
+				TW
+
+00-08-16   (hex)		Bluelon ApS
+000816     (base 16)		Bluelon ApS
+				Nattergalevej 6
+				    
+				DK
+
+00-08-11   (hex)		VOIX Corporation
+000811     (base 16)		VOIX Corporation
+				1991-3 4th Floor Top's Venture Tower
+				Seoul    138-090
+				KR
+
+00-08-06   (hex)		Raonet Systems, Inc.
+000806     (base 16)		Raonet Systems, Inc.
+				West Wing 14F, IT Venture Tower 78
+				Seoul    138-803
+				KR
+
+00-08-6F   (hex)		Resources Computer Network Ltd.
+00086F     (base 16)		Resources Computer Network Ltd.
+				Rm 324, Tech Centre, 72 Tat Chee Ave.,
+				    
+				HK
+
+00-08-67   (hex)		Uptime Devices
+000867     (base 16)		Uptime Devices
+				11724 Dunfries Lane
+				Austin  Texas  78754
+				US
+
+00-07-F8   (hex)		ITDevices, Inc.
+0007F8     (base 16)		ITDevices, Inc.
+				606 110th Ave. NE
+				Bellevue  WA  98004
+				US
+
+00-07-F3   (hex)		Thinkengine Networks
+0007F3     (base 16)		Thinkengine Networks
+				100 Nickerson Road
+				Marlborough  MA  01752
+				US
+
+00-08-1C   (hex)		@pos.com
+00081C     (base 16)		@pos.com
+				3051 North First Street
+				San Jose  CA  95134
+				US
+
+00-08-1E   (hex)		Repeatit AB
+00081E     (base 16)		Repeatit AB
+				Farogatan 7
+				    
+				SE
+
+00-08-56   (hex)		Gamatronic Electronic Industries Ltd.
+000856     (base 16)		Gamatronic Electronic Industries Ltd.
+				Hartum Street 14
+				    
+				IL
+
+00-08-53   (hex)		Schleicher GmbH & Co. Relaiswerke KG
+000853     (base 16)		Schleicher GmbH & Co. Relaiswerke KG
+				Pichelswerderstrasse 3-5
+				    
+				DE
+
+00-08-26   (hex)		Colorado Med Tech
+000826     (base 16)		Colorado Med Tech
+				6175 Longbow Dr.
+				Boulder  CO  80301
+				US
+
+00-08-5E   (hex)		PCO AG
+00085E     (base 16)		PCO AG
+				Donaupark 11
+				    
+				DE
+
+00-07-9A   (hex)		Verint Systems Inc
+00079A     (base 16)		Verint Systems Inc
+				1800 Berlier, Suite 440
+				Laval,   Quebec  H7L 4S4
+				CA
+
+00-07-74   (hex)		GuangZhou Thinker Technology Co. Ltd.
+000774     (base 16)		GuangZhou Thinker Technology Co. Ltd.
+				109 Zhongshan Ave., Tianhe District
+				    510630
+				CN
+
+00-07-98   (hex)		Selea SRL
+000798     (base 16)		Selea SRL
+				Via A. Moro No. 69
+				    
+				IT
+
+00-07-91   (hex)		International Data Communications, Inc.
+000791     (base 16)		International Data Communications, Inc.
+				47873 Fremont Blvd.
+				Fremont  CA  04538
+				US
+
+00-07-EE   (hex)		telco Informationssysteme GmbH
+0007EE     (base 16)		telco Informationssysteme GmbH
+				Schulstrasse 38
+				    
+				DE
+
+00-07-E2   (hex)		Bitworks, Inc.
+0007E2     (base 16)		Bitworks, Inc.
+				#1 Bitworks Way
+				Prairie Grove  AR  72753
+				US
+
+00-07-E6   (hex)		edgeflow Canada Inc.
+0007E6     (base 16)		edgeflow Canada Inc.
+				329 March Road
+				    K2K 2E1
+				CA
+
+00-07-E5   (hex)		Coup Corporation
+0007E5     (base 16)		Coup Corporation
+				1-24-4 Marusen 2nd Bld. 4F,
+				Tokyo    
+				JP
+
+00-07-DE   (hex)		eCopilt AB
+0007DE     (base 16)		eCopilt AB
+				Veddestavagen 24
+				    
+				SE
+
+00-07-C8   (hex)		Brain21, Inc.
+0007C8     (base 16)		Brain21, Inc.
+				19F Mesa B/D, 204 Hoihyun-Dong
+				Seoul    100-051
+				KR
+
+00-07-C5   (hex)		Gcom, Inc.
+0007C5     (base 16)		Gcom, Inc.
+				1800 Woodfield Dr.
+				Savoy  IL  61874
+				US
+
+00-07-C1   (hex)		Overture Networks, Inc.
+0007C1     (base 16)		Overture Networks, Inc.
+				637 Davis Drive
+				Morrisville  NC  227560
+				US
+
+00-07-A7   (hex)		A-Z Inc.
+0007A7     (base 16)		A-Z Inc.
+				5-5-17 Kamikoushien
+				    
+				JP
+
+00-07-A6   (hex)		Leviton Manufacturing Co., Inc.
+0007A6     (base 16)		Leviton Manufacturing Co., Inc.
+				4330 Michoud Blvd
+				New Orleans  LA  70129
+				US
+
+00-07-A3   (hex)		Ositis Software, Inc.
+0007A3     (base 16)		Ositis Software, Inc.
+				6120 Stoneridge Mall Road
+				Pleasanton  CA  94588
+				US
+
+00-07-C2   (hex)		Netsys Telecom
+0007C2     (base 16)		Netsys Telecom
+				4F, KyungNam B/D, 830-48, YeokSam-Dong
+				Seoul    135-080
+				KR
+
+00-07-8F   (hex)		Emkay Innovative Products
+00078F     (base 16)		Emkay Innovative Products
+				53, Pao Hsing Rd., Hsintien City
+				Taipei    
+				TW
+
+00-07-82   (hex)		Oracle Corporation 
+000782     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+00-07-AE   (hex)		Britestream Networks, Inc.
+0007AE     (base 16)		Britestream Networks, Inc.
+				12401 Research Blvd.
+				Austin  TX  78759
+				US
+
+00-07-B1   (hex)		Equator Technologies
+0007B1     (base 16)		Equator Technologies
+				1300 White Oaks Rd.
+				Campbell  CA  95008
+				US
+
+00-05-F9   (hex)		TOA Corporation
+0005F9     (base 16)		TOA Corporation
+				2-1 Takamatsu-cho,
+				Hyogo    665-0043
+				JP
+
+00-07-CA   (hex)		Creatix Polymedia Ges Fur Kommunikaitonssysteme
+0007CA     (base 16)		Creatix Polymedia Ges Fur Kommunikaitonssysteme
+				Heinrich-Barth-Straße 3
+				    
+				DE
+
+00-07-DF   (hex)		Vbrick Systems Inc.
+0007DF     (base 16)		Vbrick Systems Inc.
+				12 Beaumont Road
+				Wallingford  CT  06492
+				US
+
+00-07-44   (hex)		Unico, Inc.
+000744     (base 16)		Unico, Inc.
+				3725 Nicholson Rd.
+				Franksville  WI  53126
+				US
+
+00-07-49   (hex)		CENiX Inc.
+000749     (base 16)		CENiX Inc.
+				5141 California Avenue
+				Irvine  CA  92612
+				US
+
+00-07-3D   (hex)		Nanjing Postel Telecommunications Co., Ltd.
+00073D     (base 16)		Nanjing Postel Telecommunications Co., Ltd.
+				No. 187, ShengZhou Road,
+				    210004
+				CN
+
+00-07-39   (hex)		Scotty Group Austria Gmbh
+000739     (base 16)		Scotty Group Austria Gmbh
+				Teslastrasse 4
+				8074 Grambach    8074
+				AT
+
+00-07-4E   (hex)		IPFRONT Inc
+00074E     (base 16)		IPFRONT Inc
+				4F ALT Bldg.,
+				  Tokyo  101-0021
+				JP
+
+00-07-52   (hex)		Rhythm Watch Co., Ltd.
+000752     (base 16)		Rhythm Watch Co., Ltd.
+				321 Shinshukushinden, Showa-Machi,
+				    344-0196
+				JP
+
+00-07-4F   (hex)		Cisco Systems, Inc
+00074F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-43   (hex)		Chelsio Communications
+000743     (base 16)		Chelsio Communications
+				170 S. Whismon Rd.
+				Mountain View  CA  94041-1512
+				US
+
+00-07-47   (hex)		Mecalc
+000747     (base 16)		Mecalc
+				PO Box 7958
+				    
+				ZA
+
+00-07-79   (hex)		Sungil Telecom Co., Ltd.
+000779     (base 16)		Sungil Telecom Co., Ltd.
+				#321, Gongdan-Dong,
+				    730-030
+				KR
+
+00-07-7E   (hex)		Elrest GmbH
+00077E     (base 16)		Elrest GmbH
+				Leibnizstraße 10
+				    
+				DE
+
+00-07-78   (hex)		GERSTEL GmbH & Co. KG
+000778     (base 16)		GERSTEL GmbH & Co. KG
+				Eberhard-Gerstel-Platz 1
+				Mülheim an der Ruhr    
+				DE
+
+00-07-6D   (hex)		Flexlight Networks
+00076D     (base 16)		Flexlight Networks
+				15 Atir Yeda St.
+				    
+				IL
+
+00-07-30   (hex)		Hutchison OPTEL Telecom Technology Co., Ltd.
+000730     (base 16)		Hutchison OPTEL Telecom Technology Co., Ltd.
+				No. 28 Xinwai Street
+				Beijing    
+				CN
+
+00-07-22   (hex)		The Nielsen Company
+000722     (base 16)		The Nielsen Company
+				501 Brooker Creek Blvd.
+				Oldsmar  FL  34677
+				US
+
+00-07-60   (hex)		TOMIS Information & Telecom Corp.
+000760     (base 16)		TOMIS Information & Telecom Corp.
+				Youngdeungpo telephone office - extensio
+				Seoul    
+				KR
+
+00-07-35   (hex)		Flarion Technologies, Inc.
+000735     (base 16)		Flarion Technologies, Inc.
+				135 Route 202/206 South
+				Bedminster  NJ  07921
+				US
+
+00-07-5E   (hex)		Ametek Power Instruments
+00075E     (base 16)		Ametek Power Instruments
+				4050 NW 121 Avenue
+				Coral Springs  FL  33065
+				US
+
+00-07-1F   (hex)		European Systems Integration
+00071F     (base 16)		European Systems Integration
+				455 Promenade Des Anglas
+				    
+				FR
+
+00-07-21   (hex)		Formac Elektronik GmbH
+000721     (base 16)		Formac Elektronik GmbH
+				Dofstraße 33
+				    
+				DE
+
+00-07-86   (hex)		Wireless Networks Inc.
+000786     (base 16)		Wireless Networks Inc.
+				#300, 3016 Fifth Ave. NE
+				    T2A 6K4
+				CA
+
+00-06-BC   (hex)		Macrolink, Inc.
+0006BC     (base 16)		Macrolink, Inc.
+				1500 N Kellogg Dr.
+				Anaheim  CA  92807
+				US
+
+00-06-C2   (hex)		Smartmatic Corporation
+0006C2     (base 16)		Smartmatic Corporation
+				6400 Congress Ave., Suite 1300
+				Boca Raton  FL  33487
+				US
+
+00-06-54   (hex)		Winpresa Building Automation Technologies GmbH
+000654     (base 16)		Winpresa Building Automation Technologies GmbH
+				Vivenotgasse 53/2
+				    
+				AT
+
+00-06-B4   (hex)		Vorne Industries, Inc.
+0006B4     (base 16)		Vorne Industries, Inc.
+				1445 Industrial Dr.
+				Itasca  IL  60143-1849
+				US
+
+00-06-AE   (hex)		Himachal Futuristic Communications Ltd
+0006AE     (base 16)		Himachal Futuristic Communications Ltd
+				8, Commercial Complex
+				New Dehli    110048
+				IN
+
+00-06-E5   (hex)		Fujian Newland Computer Ltd. Co.
+0006E5     (base 16)		Fujian Newland Computer Ltd. Co.
+				141F Sunshine Holiday Hotel
+				Fuzhou Fujian    350005
+				CN
+
+00-06-DE   (hex)		Flash Technology
+0006DE     (base 16)		Flash Technology
+				P.O. Box 681509
+				Franklin  TN  37068
+				US
+
+00-06-DF   (hex)		AIDONIC Corporation
+0006DF     (base 16)		AIDONIC Corporation
+				2-7-10 Otsuka, Bunkyo-ku,
+				  Tokyo,  112-0012
+				JP
+
+00-06-DD   (hex)		AT & T Laboratories - Cambridge Ltd
+0006DD     (base 16)		AT & T Laboratories - Cambridge Ltd
+				24a Trumpington Street
+				  ENGLAND  
+				GB
+
+00-06-F0   (hex)		Digeo, Inc.
+0006F0     (base 16)		Digeo, Inc.
+				8815 122nd Ave., NE
+				Kirkland  WA  98033
+				US
+
+00-07-00   (hex)		Zettamedia Korea
+000700     (base 16)		Zettamedia Korea
+				Suite 1008, Kumkang Venturetel, 1108
+				Kyounggido,    
+				KR
+
+00-06-C5   (hex)		INNOVI Technologies Limited
+0006C5     (base 16)		INNOVI Technologies Limited
+				31st Floor, China Online Centre
+				  Wanchai  
+				HK
+
+00-06-C6   (hex)		lesswire AG
+0006C6     (base 16)		lesswire AG
+				Im Technologiepark 25
+				    
+				DE
+
+00-06-B7   (hex)		TELEM GmbH
+0006B7     (base 16)		TELEM GmbH
+				Lise-Meitner-Allee 31
+				    
+				DE
+
+00-06-EF   (hex)		Maxxan Systems, Inc.
+0006EF     (base 16)		Maxxan Systems, Inc.
+				107 Bonaventura Drive
+				San Jose  CA  95134
+				US
+
+00-06-E9   (hex)		Intime Corp.
+0006E9     (base 16)		Intime Corp.
+				324-4, Yangjae-dong, 2F
+				    
+				KR
+
+00-06-EA   (hex)		ELZET80 Mikrocomputer GmbH&Co. KG
+0006EA     (base 16)		ELZET80 Mikrocomputer GmbH&Co. KG
+				Theaterplatz 9
+				    
+				DE
+
+00-07-08   (hex)		Bitrage Inc.
+000708     (base 16)		Bitrage Inc.
+				100 Southpark Blvd.
+				Saint Augustine  FL  32086
+				US
+
+00-07-12   (hex)		JAL Information Technology
+000712     (base 16)		JAL Information Technology
+				Network Solution Dep. JAL-Tamachi Bldg.
+				Tokyo    
+				JP
+
+00-07-13   (hex)		IP One, Inc.
+000713     (base 16)		IP One, Inc.
+				Sammi Bldg., 1004
+				Seoul,    135-083
+				KR
+
+00-07-07   (hex)		Interalia Inc.
+000707     (base 16)		Interalia Inc.
+				4110-79th Street N.W.
+				    T3B 5C2
+				CA
+
+00-06-F2   (hex)		Platys Communications
+0006F2     (base 16)		Platys Communications
+				3150A Coronado Dr.
+				Santa Clara  CA  95054
+				US
+
+00-06-FA   (hex)		IP SQUARE Co, Ltd.
+0006FA     (base 16)		IP SQUARE Co, Ltd.
+				1-9-11, Hakataekihigashi,
+				Fukuoka    812-0013
+				JP
+
+00-07-03   (hex)		CSEE Transport
+000703     (base 16)		CSEE Transport
+				4, avenue du CANADA
+				    
+				FR
+
+00-07-06   (hex)		Sanritz Corporation
+000706     (base 16)		Sanritz Corporation
+				1-30-13, Narimasu,
+				    175-0094
+				JP
+
+00-06-D1   (hex)		Tahoe Networks, Inc.
+0006D1     (base 16)		Tahoe Networks, Inc.
+				3052 Orchard Drive
+				San Jose  CA  95134
+				US
+
+00-06-D4   (hex)		Interactive Objects, Inc.
+0006D4     (base 16)		Interactive Objects, Inc.
+				12600 SE 38th St.
+				Bellevue  WA  98006
+				US
+
+00-06-CA   (hex)		American Computer & Digital Components, Inc. (ACDC)
+0006CA     (base 16)		American Computer & Digital Components, Inc. (ACDC)
+				440 Cloverleaf Drive
+				Baldwin Park  CA  91706
+				US
+
+00-06-CE   (hex)		DATENO
+0006CE     (base 16)		DATENO
+				Rue Amiral Berenger
+				    
+				FR
+
+00-06-8E   (hex)		HID Corporation
+00068E     (base 16)		HID Corporation
+				9292 Jeronimo Road
+				Irvine  CA  92618-1905
+				US
+
+00-06-8A   (hex)		NeuronNet Co. Ltd. R&D Center
+00068A     (base 16)		NeuronNet Co. Ltd. R&D Center
+				735-34 Dasung Bldg., Yuksam-dong,
+				    
+				KR
+
+00-06-85   (hex)		NetNearU Corporation
+000685     (base 16)		NetNearU Corporation
+				2908 Finfeather Road
+				Bryan  TX  77801
+				US
+
+00-06-50   (hex)		Tiburon Networks, Inc.
+000650     (base 16)		Tiburon Networks, Inc.
+				200 Minuteman Rd.
+				Andover  MA  01810
+				US
+
+00-06-5E   (hex)		Photuris, Inc.
+00065E     (base 16)		Photuris, Inc.
+				20 Corporate Place South
+				Piscataway  NJ  08854
+				US
+
+00-06-7F   (hex)		Digeo, Inc.
+00067F     (base 16)		Digeo, Inc.
+				8815 122nd Avenue NE
+				Kirkland  WA  98033
+				US
+
+00-06-83   (hex)		Bravara Communications, Inc.
+000683     (base 16)		Bravara Communications, Inc.
+				2650 East Bayshore Road
+				Palo Alto  CA  94303
+				US
+
+00-06-55   (hex)		Yipee, Inc.
+000655     (base 16)		Yipee, Inc.
+				555 International Drive
+				Williamsville  NY  14221
+				US
+
+00-06-76   (hex)		Novra Technologies Inc.
+000676     (base 16)		Novra Technologies Inc.
+				900-330 St. Mary Avenue
+				Winnipeg  Manitoba  R3C 3Z5
+				CA
+
+00-06-64   (hex)		Fostex Corporation
+000664     (base 16)		Fostex Corporation
+				3-2-35, Musashino, Akishima,
+				Tokyo    196-0021
+				JP
+
+00-06-7A   (hex)		JMP Systems
+00067A     (base 16)		JMP Systems
+				3rd Fl. Shinwha Bldg.,
+				Seocho-ku  Seoul,  
+				KR
+
+00-06-73   (hex)		TKH Security Solutions USA
+000673     (base 16)		TKH Security Solutions USA
+				12920 Cloverleaf Center Drive
+				Germantown  MD  20874
+				US
+
+00-06-9B   (hex)		AVT Audio Video Technologies GmbH
+00069B     (base 16)		AVT Audio Video Technologies GmbH
+				Rathsbergstraße 17
+				    
+				DE
+
+00-06-93   (hex)		Flexus Computer Technology, Inc.
+000693     (base 16)		Flexus Computer Technology, Inc.
+				8F-2, No.5, Alley22, Lane 513,
+				Taipei 114    
+				TW
+
+00-06-5D   (hex)		Heidelberg Web Systems
+00065D     (base 16)		Heidelberg Web Systems
+				121 Technology Dr.
+				Durham  NH  03824
+				US
+
+00-06-B0   (hex)		Comtech EF Data Corp.
+0006B0     (base 16)		Comtech EF Data Corp.
+				2114 W. 7th St.
+				Tempe  AZ  85281
+				US
+
+00-06-96   (hex)		Advent Networks
+000696     (base 16)		Advent Networks
+				9600 Great Hills Tr.
+				Austin  TX  78759
+				US
+
+00-05-D7   (hex)		Vista Imaging, Inc.
+0005D7     (base 16)		Vista Imaging, Inc.
+				521 Taylor Way
+				San Carlos  CA  94070
+				US
+
+00-05-DB   (hex)		PSI Nentec GmbH
+0005DB     (base 16)		PSI Nentec GmbH
+				Greschbachstraße12
+				Karlsruhe    76229
+				DE
+
+00-05-DD   (hex)		Cisco Systems, Inc
+0005DD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-06-28   (hex)		Cisco Systems, Inc
+000628     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-06-1D   (hex)		MIP Telecom, Inc.
+00061D     (base 16)		MIP Telecom, Inc.
+				3rd Floor, Sangil BLDG,
+				Seoul    151-069
+				KR
+
+00-06-19   (hex)		Connection Technology Systems
+000619     (base 16)		Connection Technology Systems
+				18F-6, No. 79, Sec. 1,
+				Hsinchih  Taipei,  
+				TW
+
+00-06-40   (hex)		White Rock Networks
+000640     (base 16)		White Rock Networks
+				Suite #900
+				Dallas  TX  75252
+				US
+
+00-06-44   (hex)		NextGen Business Solutions, Inc
+000644     (base 16)		NextGen Business Solutions, Inc
+				KKS Higashi-Sapporo Bldg.3-5-3-24, Higashi-Sapporo
+				Shiroishi-ku, Sapporo-city  Hokkaido  003-0003
+				JP
+
+00-06-45   (hex)		Meisei Electric Co. Ltd.
+000645     (base 16)		Meisei Electric Co. Ltd.
+				249-1, Moriya-kou, Moriya
+				    302-0192
+				JP
+
+A0-6A-00   (hex)		Verilink Corporation
+A06A00     (base 16)		Verilink Corporation
+				127 Jetplex Circle
+				Madison  AL  35758
+				US
+
+00-05-F8   (hex)		Real Time Access, Inc.
+0005F8     (base 16)		Real Time Access, Inc.
+				455 N. Canyons Pkwy.
+				Livermore  CA  94550
+				US
+
+00-05-EB   (hex)		Blue Ridge Networks, Inc.
+0005EB     (base 16)		Blue Ridge Networks, Inc.
+				14120 Parke Long Court
+				Chantilly  VA  20151
+				US
+
+00-05-E8   (hex)		TurboWave, Inc.
+0005E8     (base 16)		TurboWave, Inc.
+				555 South State
+				Orem  UT  84058
+				US
+
+00-05-F6   (hex)		Young Chang Co. Ltd.
+0005F6     (base 16)		Young Chang Co. Ltd.
+				1432 Main Street
+				Waltham  MA  02451
+				US
+
+00-05-FC   (hex)		Schenck Pegasus Corp.
+0005FC     (base 16)		Schenck Pegasus Corp.
+				2890 John R Road
+				Troy  MI  48083
+				US
+
+00-06-3A   (hex)		Dura Micro, Inc.
+00063A     (base 16)		Dura Micro, Inc.
+				13580 Fifth Street
+				Chino  CA  91710
+				US
+
+00-06-32   (hex)		Mesco Engineering GmbH
+000632     (base 16)		Mesco Engineering GmbH
+				Wiesentalstraße 74
+				    
+				DE
+
+00-06-34   (hex)		GTE Airfone Inc.
+000634     (base 16)		GTE Airfone Inc.
+				2809 Butterfield
+				Oakbrook  IL  60522
+				US
+
+00-06-0C   (hex)		Melco Industries, Inc.
+00060C     (base 16)		Melco Industries, Inc.
+				1575 W. 124th Ave.
+				Denver  CO  80234
+				US
+
+00-06-0E   (hex)		IGYS Systems, Inc.
+00060E     (base 16)		IGYS Systems, Inc.
+				7373 Lincoln Way
+				Garden Grove  CA  92841
+				US
+
+00-06-14   (hex)		Prism Holdings
+000614     (base 16)		Prism Holdings
+				P.O. Box 901,
+				Gauteng    
+				ZA
+
+00-06-08   (hex)		At-Sky SAS
+000608     (base 16)		At-Sky SAS
+				ZI Athelia 3, Voi Atlas
+				    
+				FR
+
+00-05-C3   (hex)		Pacific Instruments, Inc.
+0005C3     (base 16)		Pacific Instruments, Inc.
+				4080 Pike Lane
+				Concord  CA  94520
+				US
+
+00-05-B9   (hex)		Airvana, Inc.
+0005B9     (base 16)		Airvana, Inc.
+				25 Industrial Ave.
+				Chlemsford  MA  01824
+				US
+
+00-05-BC   (hex)		Resource Data Management Ltd
+0005BC     (base 16)		Resource Data Management Ltd
+				80 Johnstone Avenue,
+				Scotland    G52 4NZ
+				GB
+
+00-05-BE   (hex)		Kongsberg Seatex AS
+0005BE     (base 16)		Kongsberg Seatex AS
+				Pirsenteret
+				    
+				NO
+
+00-05-BD   (hex)		ROAX BV
+0005BD     (base 16)		ROAX BV
+				Sterrenbergweg 29
+				    
+				NL
+
+00-05-C1   (hex)		A-Kyung Motion, Inc.
+0005C1     (base 16)		A-Kyung Motion, Inc.
+				54-10, Munjung-Dong
+				Seoul    
+				KR
+
+00-05-B4   (hex)		Aceex Corporation
+0005B4     (base 16)		Aceex Corporation
+				2F, No. 2, Alley 1, Sze-Wei Lane
+				    23138
+				TW
+
+00-05-98   (hex)		CRONOS S.r.l.
+000598     (base 16)		CRONOS S.r.l.
+				Via cavour 58/A
+				    
+				IT
+
+00-05-B7   (hex)		Arbor Technology Corp.
+0005B7     (base 16)		Arbor Technology Corp.
+				5F, No. 738, Zhong Zheng Rd.,
+				    
+				TW
+
+00-05-9B   (hex)		Cisco Systems, Inc
+00059B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-7E   (hex)		Eckelmann Steuerungstechnik GmbH
+00057E     (base 16)		Eckelmann Steuerungstechnik GmbH
+				Berliner Strasse 161
+				    
+				DE
+
+00-05-80   (hex)		FibroLAN Ltd.
+000580     (base 16)		FibroLAN Ltd.
+				2 Hacarmel st., POB 544
+				Yokneam Illit    20692
+				IL
+
+00-05-82   (hex)		ClearCube Technology
+000582     (base 16)		ClearCube Technology
+				8834 Capital of Texas Hwy,
+				Austin  TX  78759
+				US
+
+00-05-D9   (hex)		Techno Valley, Inc.
+0005D9     (base 16)		Techno Valley, Inc.
+				ASIC Venture Town 5F,
+				Seoul    135-072
+				KR
+
+00-05-DC   (hex)		Cisco Systems, Inc
+0005DC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-D0   (hex)		Solinet Systems
+0005D0     (base 16)		Solinet Systems
+				1200-180 Elgin St.
+				    K2P 2K3
+				CA
+
+00-05-9F   (hex)		Yotta Networks, Inc.
+00059F     (base 16)		Yotta Networks, Inc.
+				2201 Avenue K
+				Plano  TX  75074
+				US
+
+00-05-87   (hex)		Locus, Incorporated
+000587     (base 16)		Locus, Incorporated
+				5540 Research Park Drive
+				Madison  WI  53711
+				US
+
+00-05-90   (hex)		Swissvoice Ltd.
+000590     (base 16)		Swissvoice Ltd.
+				Ziegelmattstrasse 1
+				    
+				CH
+
+00-05-95   (hex)		Alesis Corporation
+000595     (base 16)		Alesis Corporation
+				1633 26th Street
+				Santa Monica  CA  90404
+				US
+
+00-05-78   (hex)		Private
+000578     (base 16)		Private
+
+00-05-72   (hex)		Deonet Co., Ltd.
+000572     (base 16)		Deonet Co., Ltd.
+				#127-5 Jinyoung B/D 3th F,
+				Seoul    
+				KR
+
+00-05-76   (hex)		NSM Technology Ltd.
+000576     (base 16)		NSM Technology Ltd.
+				22 Floor, Times Tower
+				Koloon    
+				HK
+
+00-05-6A   (hex)		Heuft Systemtechnik GmbH
+00056A     (base 16)		Heuft Systemtechnik GmbH
+				Brohltalstr 31-33
+				Deutschland    
+				DE
+
+00-05-68   (hex)		Piltofish Networks AB
+000568     (base 16)		Piltofish Networks AB
+				Stora Badhusgatan 18-20
+				    
+				SE
+
+00-05-B6   (hex)		INSYS Microelectronics GmbH
+0005B6     (base 16)		INSYS Microelectronics GmbH
+				Hermann-Köhl-Straße 22
+				    
+				DE
+
+00-05-55   (hex)		Japan Cash Machine Co., Ltd.
+000555     (base 16)		Japan Cash Machine Co., Ltd.
+				No. 3-15, 2-chome, Nishiwaki,
+				    547-0035
+				JP
+
+00-05-52   (hex)		Xycotec Computer GmbH
+000552     (base 16)		Xycotec Computer GmbH
+				Karl-Heinz-Beckurts-Str. 4
+				    
+				DE
+
+00-05-4A   (hex)		Ario Data Networks, Inc.
+00054A     (base 16)		Ario Data Networks, Inc.
+				2890 Zanker Road, Suite 203
+				San Jose  CA  95134
+				US
+
+00-05-48   (hex)		Disco Corporation
+000548     (base 16)		Disco Corporation
+				13-11 Omori-Kita 2-chome
+				Ota-ku  Tokyo  143-8580
+				JP
+
+00-04-F7   (hex)		Omega Band, Inc.
+0004F7     (base 16)		Omega Band, Inc.
+				9020-I Capital of Texas Hghwy N
+				Austin  TX  78759
+				US
+
+00-04-EE   (hex)		Lincoln Electric Company
+0004EE     (base 16)		Lincoln Electric Company
+				22801 St. Clair Avenue
+				Cleveland  OH  44117-1199
+				US
+
+00-04-F0   (hex)		International Computers, Ltd
+0004F0     (base 16)		International Computers, Ltd
+				1 Wenlock Way
+				    UK
+				GB
+
+00-05-27   (hex)		SJ Tek Co. Ltd
+000527     (base 16)		SJ Tek Co. Ltd
+				Ho gae Dong 976-5, Dong An Ku,
+				    
+				KR
+
+00-05-29   (hex)		Shanghai Broadan Communication Technology Co., Ltd
+000529     (base 16)		Shanghai Broadan Communication Technology Co., Ltd
+				15F, Suntime International Mansion
+				    200122
+				CN
+
+00-05-2C   (hex)		Supreme Magic Corporation
+00052C     (base 16)		Supreme Magic Corporation
+				Sun Towers Center Bldg., 13F
+				    154-0024
+				JP
+
+00-05-3E   (hex)		KID Systeme GmbH
+00053E     (base 16)		KID Systeme GmbH
+				Luneburger Schanze 30
+				    
+				DE
+
+00-05-3F   (hex)		VisionTek, Inc.
+00053F     (base 16)		VisionTek, Inc.
+				1175 Lakeside Dr.
+				Gurnee  IL  60031
+				US
+
+00-05-3D   (hex)		Agere Systems
+00053D     (base 16)		Agere Systems
+				1371 McCarthy Blvd.
+				Milpitas  CA  95035
+				US
+
+00-05-00   (hex)		Cisco Systems, Inc
+000500     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-19   (hex)		Siemens Building Technologies AG,
+000519     (base 16)		Siemens Building Technologies AG,
+				Cerberus Division
+				    
+				CH
+
+00-05-0D   (hex)		Midstream Technologies, Inc.
+00050D     (base 16)		Midstream Technologies, Inc.
+				777 108th Ave. NE
+				Bellevue  WA  98004-5140
+				US
+
+00-05-34   (hex)		Northstar Engineering Ltd.
+000534     (base 16)		Northstar Engineering Ltd.
+				P.O. Box 40
+				    
+				GB
+
+00-05-35   (hex)		Chip PC Ltd.
+000535     (base 16)		Chip PC Ltd.
+				20 A.L. Motzkin St.
+				Tirat Carmel    39100
+				IL
+
+00-05-07   (hex)		Fine Appliance Corp.
+000507     (base 16)		Fine Appliance Corp.
+				7Fl., No. 499,
+				    
+				TW
+
+00-04-FD   (hex)		Japan Control Engineering Co., Ltd.
+0004FD     (base 16)		Japan Control Engineering Co., Ltd.
+				1-5-1, Higashiamagawa, Takatsuki-shi
+				    
+				JP
+
+00-05-62   (hex)		Digital View Limited
+000562     (base 16)		Digital View Limited
+				2201 Nan Yang Plaza,
+				Kowloon    
+				HK
+
+00-04-E5   (hex)		Glonet Systems, Inc.
+0004E5     (base 16)		Glonet Systems, Inc.
+				11Fl., Jeil Bldg., 94-46, 7Ka
+				    
+				KR
+
+00-04-D2   (hex)		Adcon Telemetry GmbH
+0004D2     (base 16)		Adcon Telemetry GmbH
+				Inkustraße 24
+				    
+				AT
+
+00-04-D3   (hex)		Toyokeiki Co., Ltd.
+0004D3     (base 16)		Toyokeiki Co., Ltd.
+				Wada 3967-10, Matsumoto-City
+				    
+				JP
+
+00-04-AA   (hex)		Jetstream Communications
+0004AA     (base 16)		Jetstream Communications
+				5400 Hellyer Avenue
+				San Jose  CA  95138-1005
+				US
+
+00-04-A0   (hex)		Verity Instruments, Inc.
+0004A0     (base 16)		Verity Instruments, Inc.
+				2901 Eisenhower St.
+				Carrollton  TX  75007
+				US
+
+00-04-9E   (hex)		Wirelink Co., Ltd.
+00049E     (base 16)		Wirelink Co., Ltd.
+				11F, Geoseong B/D 541, Dowha-Dong,
+				    KOREA
+				KR
+
+00-04-9A   (hex)		Cisco Systems, Inc
+00049A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-79   (hex)		Radius Co., Ltd.
+000479     (base 16)		Radius Co., Ltd.
+				1-48-11, Itabashi
+				    
+				JP
+
+00-04-B0   (hex)		ELESIGN Co., Ltd.
+0004B0     (base 16)		ELESIGN Co., Ltd.
+				9Fl. TaeKyoung Bldg.,
+				  R.O.  KOREA
+				KR
+
+00-04-AB   (hex)		Mavenir Inc.
+0004AB     (base 16)		Mavenir Inc.
+				1700 International Parkway
+				Richardson  TX  75081
+				US
+
+00-04-A7   (hex)		FabiaTech Corporation
+0004A7     (base 16)		FabiaTech Corporation
+				4F-3, No. 18, Lane 609
+				Taipei  Hsien,  TAIWAN R.O.C
+				TW
+
+00-04-98   (hex)		Mahi Networks
+000498     (base 16)		Mahi Networks
+				1039 N. McDowell Blvd.
+				Petaluma  CA  94954
+				US
+
+00-04-97   (hex)		MacroSystem Digital Video AG
+000497     (base 16)		MacroSystem Digital Video AG
+				Schoellinger Feld 28
+				    
+				DE
+
+00-04-D5   (hex)		Hitachi Information & Communication Engineering, Ltd.
+0004D5     (base 16)		Hitachi Information & Communication Engineering, Ltd.
+				Queen's Tower B21F, 2-3-3, Minatomirai,
+				Nishi-ku,  Yokohama,  220-6121
+				JP
+
+00-04-CA   (hex)		FreeMs Corp.
+0004CA     (base 16)		FreeMs Corp.
+				Shinhan Bldg. 6F,
+				Seoul  150-736  KOREA
+				KR
+
+00-04-88   (hex)		Eurotherm Controls
+000488     (base 16)		Eurotherm Controls
+				741F Miller Drive
+				Lessburg  VA  20175
+				US
+
+00-04-85   (hex)		PicoLight
+000485     (base 16)		PicoLight
+				4665 Nautilus Court South
+				Boulder  CO  80301
+				US
+
+00-04-DA   (hex)		Relax Technology, Inc.
+0004DA     (base 16)		Relax Technology, Inc.
+				DBA/ Granite Digital
+				Union City  CA  94587
+				US
+
+00-04-C5   (hex)		ASE Technologies, USA
+0004C5     (base 16)		ASE Technologies, USA
+				6721 Baum Dr.
+				Knoxville  TN  37919
+				US
+
+00-04-36   (hex)		ELANsat Technologies, Inc.
+000436     (base 16)		ELANsat Technologies, Inc.
+				No. 11, Lane 19, Pateh Road,
+				Hsinchu  TAIWAN,  R.O.C.
+				TW
+
+00-04-32   (hex)		Voyetra Turtle Beach, Inc.
+000432     (base 16)		Voyetra Turtle Beach, Inc.
+				150 Clearbrook Road, Suite 162
+				Elmsford  NY  10523
+				US
+
+00-04-37   (hex)		Powin Information Technology, Inc.
+000437     (base 16)		Powin Information Technology, Inc.
+				8F, No. 70, Zhou-Z St.
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-04-0C   (hex)		Kanno Works, Ltd.
+00040C     (base 16)		Kanno Works, Ltd.
+				1-5-25 Kamitomino,
+				    
+				JP
+
+00-04-08   (hex)		Sanko Electronics Co., Ltd.
+000408     (base 16)		Sanko Electronics Co., Ltd.
+				3-802 ueda tenpaku-ku
+				  nagoya  
+				JP
+
+00-04-07   (hex)		Topcon Positioning Systems, Inc.
+000407     (base 16)		Topcon Positioning Systems, Inc.
+				5758 W. Las Positas Blvd.
+				Pleasanton  CA  94588
+				US
+
+00-04-09   (hex)		Cratos Networks
+000409     (base 16)		Cratos Networks
+				313 Littleton Road
+				Chelmsford  MA  01824
+				US
+
+00-04-55   (hex)		ANTARA.net
+000455     (base 16)		ANTARA.net
+				747 Camden Ave.
+				Campbell  CA  95008
+				US
+
+00-04-57   (hex)		Universal Access Technology, Inc.
+000457     (base 16)		Universal Access Technology, Inc.
+				2 Fl., No. 5, Alley 22,
+				Nei Hu  Taipei,  TAIWAN 114
+				TW
+
+00-04-4D   (hex)		Cisco Systems, Inc
+00044D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-54   (hex)		Quadriga UK
+000454     (base 16)		Quadriga UK
+				Baird House
+				    ENGLAND
+				GB
+
+00-04-48   (hex)		Polaroid Corporation
+000448     (base 16)		Polaroid Corporation
+				300 Baker Avenue
+				Concord  MA  01742
+				US
+
+00-04-47   (hex)		Acrowave Systems Co., Ltd.
+000447     (base 16)		Acrowave Systems Co., Ltd.
+				Maru B/D 86-6, Nonhyun-Dong
+				KOREA  zip:  135-818
+				KR
+
+00-04-3E   (hex)		Telencomm
+00043E     (base 16)		Telencomm
+				2551 Walsh Avenue
+				Santa Clara  CA  95051
+				US
+
+00-04-6D   (hex)		Cisco Systems, Inc
+00046D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-66   (hex)		ARMITEL Co.
+000466     (base 16)		ARMITEL Co.
+				F5, Doman Plaza 353-4,
+				Republic  of  KOREA
+				KR
+
+00-03-E2   (hex)		Comspace Corporation
+0003E2     (base 16)		Comspace Corporation
+				955 Freeport Pkwy
+				Coppell  TX  75019
+				US
+
+00-03-FF   (hex)		Microsoft Corporation
+0003FF     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  WA  98052
+				US
+
+00-04-14   (hex)		Umezawa Musen Denki Co., Ltd.
+000414     (base 16)		Umezawa Musen Denki Co., Ltd.
+				14-3, Minami 1, Nishi 8,
+				Hokkaido  JAPAN  060-0061
+				JP
+
+00-04-28   (hex)		Cisco Systems, Inc
+000428     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-86   (hex)		Ho Net, Inc.
+000386     (base 16)		Ho Net, Inc.
+				Venture Company Center
+				  KOREA  442-760
+				KR
+
+00-03-7D   (hex)		Stellcom
+00037D     (base 16)		Stellcom
+				10525 Vista Sorrento Parkway
+				San Diego  CA  92121
+				US
+
+00-03-83   (hex)		Metera Networks, Inc.
+000383     (base 16)		Metera Networks, Inc.
+				1202 Richardson Dr.
+				Richardson  TX  75080
+				US
+
+00-03-CC   (hex)		Momentum Computer, Inc.
+0003CC     (base 16)		Momentum Computer, Inc.
+				1815 Aston Avenue
+				Carlsbad  CA  92008-7310
+				US
+
+00-03-D7   (hex)		NextNet Wireless, Inc.
+0003D7     (base 16)		NextNet Wireless, Inc.
+				9555 James Ave. So.
+				Bloomington  MN  55431
+				US
+
+00-03-D3   (hex)		Internet Energy Systems, Inc.
+0003D3     (base 16)		Internet Energy Systems, Inc.
+				4218 Trumbo Ct.
+				Fairfax  VA  22033
+				US
+
+00-03-CD   (hex)		Clovertech, Inc.
+0003CD     (base 16)		Clovertech, Inc.
+				3-1-5 Naka-cho Musashino-shi
+				Tokyo  180-0006  
+				JP
+
+00-03-8B   (hex)		PLUS-ONE I&T, Inc.
+00038B     (base 16)		PLUS-ONE I&T, Inc.
+				7F, A-San Venture Tower,
+				    KOREA
+				KR
+
+00-03-8C   (hex)		Total Impact
+00038C     (base 16)		Total Impact
+				295 Willis Ave.
+				Camarillo  CA  93010
+				US
+
+00-03-EE   (hex)		MKNet Corporation
+0003EE     (base 16)		MKNet Corporation
+				711-B Charcot Ave.
+				San Jose  CA  95131
+				US
+
+00-03-EA   (hex)		Mega System Technologies, Inc.
+0003EA     (base 16)		Mega System Technologies, Inc.
+				2F, No. 41, Lane 76,
+				Taipei  Taipei  TAIWAN
+				TW
+
+00-03-E6   (hex)		Entone, Inc.
+0003E6     (base 16)		Entone, Inc.
+				2755 Campus Dr Ste 235
+				San Mateo  CA   94403
+				US
+
+00-03-A9   (hex)		AXCENT Media AG
+0003A9     (base 16)		AXCENT Media AG
+				Technologiepark 13
+				    
+				DE
+
+00-03-9F   (hex)		Cisco Systems, Inc
+00039F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-90   (hex)		Digital Video Communications, Inc.
+000390     (base 16)		Digital Video Communications, Inc.
+				500 W. Cummings Park
+				Woburn  MA  07801
+				US
+
+00-03-B5   (hex)		Entra Technology Co.
+0003B5     (base 16)		Entra Technology Co.
+				Fl. 3, No. 5, Alley 2,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-03-64   (hex)		Scenix Semiconductor, Inc.
+000364     (base 16)		Scenix Semiconductor, Inc.
+				1330 Charleston Rd.
+				Mountainview  CA  94043
+				US
+
+00-03-5E   (hex)		Metropolitan Area Networks, Inc.
+00035E     (base 16)		Metropolitan Area Networks, Inc.
+				1299 Pennsylvania Avenue, NW
+				Washington  DC  20004
+				US
+
+00-03-5C   (hex)		Saint Song Corp.
+00035C     (base 16)		Saint Song Corp.
+				4F, No. 12, Lane 94, Tsao Ti Wzi
+				    222
+				TW
+
+00-03-5D   (hex)		Bosung Hi-Net Co., Ltd.
+00035D     (base 16)		Bosung Hi-Net Co., Ltd.
+				Youngil B/O 2F,
+				    137-130
+				KR
+
+00-03-79   (hex)		Proscend Communications, Inc.
+000379     (base 16)		Proscend Communications, Inc.
+				2F, No.36, Industry E. Rd. IV,
+				Hsinchu    300
+				TW
+
+00-03-6F   (hex)		Telsey SPA
+00036F     (base 16)		Telsey SPA
+				Viale Dell Industria, 1
+				DiTreviso-    
+				IT
+
+00-03-72   (hex)		ULAN
+000372     (base 16)		ULAN
+				5F-3, No. 31-1, Lane 169,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-03-3A   (hex)		Silicon Wave, Inc.
+00033A     (base 16)		Silicon Wave, Inc.
+				6256 Greenwich Drive
+				San Diego  CA  92122
+				US
+
+00-03-32   (hex)		Cisco Systems, Inc
+000332     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-0E   (hex)		Core Communications Co., Ltd.
+00030E     (base 16)		Core Communications Co., Ltd.
+				3F Shopping Center Bd. of
+				Seoul (121-050)    (121-050)
+				KR
+
+00-03-12   (hex)		TRsystems GmbH
+000312     (base 16)		TRsystems GmbH
+				Eglishalde 16
+				 Trossingen  Baden-Wuerttemberg  D-78647
+				DE
+
+00-03-41   (hex)		Axon Digital Design
+000341     (base 16)		Axon Digital Design
+				Lange Wagenstraat 55
+				    
+				NL
+
+00-80-37   (hex)		Ericsson Group
+008037     (base 16)		Ericsson Group
+				Telefonaktiebolaget
+				    
+				SE
+
+00-03-3D   (hex)		ILSHin Lab
+00033D     (base 16)		ILSHin Lab
+				KCS B/D 228-13 Young Dap-Dong
+				Seoul    
+				KR
+
+00-03-66   (hex)		ASM Pacific Technology
+000366     (base 16)		ASM Pacific Technology
+				12/F Watson Centre
+				Kwai Chung    
+				HK
+
+00-03-62   (hex)		Vodtel Communications, Inc.
+000362     (base 16)		Vodtel Communications, Inc.
+				12F, No 166 Chien-Yi Road
+				    235
+				TW
+
+00-03-4D   (hex)		Chiaro Networks, Ltd.
+00034D     (base 16)		Chiaro Networks, Ltd.
+				P.O. Box 832427
+				Richardson  TX  75083-2427
+				US
+
+00-03-22   (hex)		IDIS Co., Ltd.
+000322     (base 16)		IDIS Co., Ltd.
+				7th Floor, 646-7 Yuksam-Dong,
+				    
+				KR
+
+00-03-1D   (hex)		Taiwan Commate Computer, Inc.
+00031D     (base 16)		Taiwan Commate Computer, Inc.
+				8F, No. 94, Sec 1,
+				    
+				TW
+
+00-03-26   (hex)		Iwasaki Information Systems Co., Ltd.
+000326     (base 16)		Iwasaki Information Systems Co., Ltd.
+				3361 Oshi
+				    
+				JP
+
+00-02-90   (hex)		Woorigisool, Inc.
+000290     (base 16)		Woorigisool, Inc.
+				Yoopoong Bldg.
+				Seoul  Seoul  KOREA
+				KR
+
+00-02-92   (hex)		Logic Innovations, Inc.
+000292     (base 16)		Logic Innovations, Inc.
+				6205 Lusk Blvd.
+				San Diego  CA  92121-2731
+				US
+
+00-02-86   (hex)		Occam Networks
+000286     (base 16)		Occam Networks
+				4183 State Street
+				Santa Barbara  CA  93110
+				US
+
+00-02-D2   (hex)		Workstation AG
+0002D2     (base 16)		Workstation AG
+				Schaffhauserstrasse 55
+				    
+				CH
+
+00-02-CD   (hex)		TeleDream, Inc.
+0002CD     (base 16)		TeleDream, Inc.
+				Shinhwa Bldg., 940-10 Daechi-Dong
+				    
+				KR
+
+00-02-D0   (hex)		Comdial Corporation
+0002D0     (base 16)		Comdial Corporation
+				1180 Seminole Trail
+				Charlottesville  VA  22901
+				US
+
+00-02-CC   (hex)		M.C.C.I
+0002CC     (base 16)		M.C.C.I
+				3520 Krums Corners Rd.
+				Ithaca  NY  14850
+				US
+
+00-02-B0   (hex)		Hokubu Communication & Industrial Co., Ltd.
+0002B0     (base 16)		Hokubu Communication & Industrial Co., Ltd.
+				Fushiogami-aza-oki 27-1
+				Fukushima    960-8514
+				JP
+
+00-02-AA   (hex)		PLcom Co., Ltd.
+0002AA     (base 16)		PLcom Co., Ltd.
+				Hosung B/D, #1083-1, Hogye-Dong
+				  South  Korea
+				KR
+
+00-02-B5   (hex)		Avnet, Inc.
+0002B5     (base 16)		Avnet, Inc.
+				2211 S. 47th Street
+				Phoenix  AZ  85034
+				US
+
+00-02-B4   (hex)		DAPHNE
+0002B4     (base 16)		DAPHNE
+				101 Chaussee De Binche
+				    
+				BE
+
+00-02-AC   (hex)		3PAR data
+0002AC     (base 16)		3PAR data
+				4209 Technology Drive
+				Fremont  CA  94538
+				US
+
+00-02-D9   (hex)		Reliable Controls
+0002D9     (base 16)		Reliable Controls
+				120 Hallowell Road
+				Victoria,   B.C.  V9A 7K2
+				CA
+
+00-02-EF   (hex)		CCC Network Systems Group Ltd.
+0002EF     (base 16)		CCC Network Systems Group Ltd.
+				13 Farnborough Business Centre
+				  ENGLAND  
+				GB
+
+00-02-E8   (hex)		E.D.&A.
+0002E8     (base 16)		E.D.&A.
+				Energielaan 16
+				    
+				BE
+
+00-02-F2   (hex)		eDevice, Inc.
+0002F2     (base 16)		eDevice, Inc.
+				420 Lexington Avenue
+				New York  NY  10170
+				US
+
+00-02-9D   (hex)		Merix Corp.
+00029D     (base 16)		Merix Corp.
+				Jin-Su Building, 49-16
+				Seoul  Seoul  KOREA
+				KR
+
+00-02-C5   (hex)		Evertz Microsystems Ltd.
+0002C5     (base 16)		Evertz Microsystems Ltd.
+				5292 John Lucas Drive
+				  Ontario  L7L 5Z9
+				CA
+
+00-02-4A   (hex)		Cisco Systems, Inc
+00024A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-49   (hex)		Aviv Infocom Co, Ltd.
+000249     (base 16)		Aviv Infocom Co, Ltd.
+				962-5, Kwanyang-Dong, Dongan-Gu,
+				  Korea  (ROK)
+				KR
+
+00-02-45   (hex)		Lampus Co, Ltd.
+000245     (base 16)		Lampus Co, Ltd.
+				6th Bldg., Samgong,
+				Korea  Korea  137-044
+				KR
+
+00-02-32   (hex)		Avision, Inc.
+000232     (base 16)		Avision, Inc.
+				No. 20, Creation Rd. 1,
+				Hsinchu  Taiwan,  R.O.C.
+				TW
+
+00-02-35   (hex)		Paragon Networks International
+000235     (base 16)		Paragon Networks International
+				61 Commerce Drive
+				Brookfield  CT  06804
+				US
+
+00-02-37   (hex)		Cosmo Research Corp.
+000237     (base 16)		Cosmo Research Corp.
+				Cosmo Bldg, 3-148-5
+				    
+				KW
+
+00-02-28   (hex)		Necsom, Ltd.
+000228     (base 16)		Necsom, Ltd.
+				Necsom Ltd. c/o Koirsto
+				    
+				FI
+
+00-02-46   (hex)		All-Win Tech Co., Ltd.
+000246     (base 16)		All-Win Tech Co., Ltd.
+				11F, No. 111-7, Hsing De Rd.,
+				Taipei Hsien  Taiwan,  R.O.C.
+				TW
+
+00-02-3A   (hex)		ZSK Stickmaschinen GmbH
+00023A     (base 16)		ZSK Stickmaschinen GmbH
+				Magdeburger Straße 38-40
+				    
+				DE
+
+00-02-7F   (hex)		ask-technologies.com
+00027F     (base 16)		ask-technologies.com
+				36 Wellington Business Park
+				    
+				GB
+
+00-02-7E   (hex)		Cisco Systems, Inc
+00027E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-10-95   (hex)		Thomson Inc.
+001095     (base 16)		Thomson Inc.
+				101 West 103rd Street
+				Indianapolis  IN  46290-1102
+				US
+
+00-02-5D   (hex)		Calix Networks
+00025D     (base 16)		Calix Networks
+				1035 North McDowell Blvd.
+				Petaluma  CA  94954
+				US
+
+00-02-7B   (hex)		Amplify Net, Inc.
+00027B     (base 16)		Amplify Net, Inc.
+				47381 Bayside Parkway
+				Fremont  CA  94538
+				US
+
+00-02-73   (hex)		Coriolis Networks
+000273     (base 16)		Coriolis Networks
+				330 Codmanhill Road
+				Boxborough  MA  01719
+				US
+
+00-02-57   (hex)		Microcom Corp.
+000257     (base 16)		Microcom Corp.
+				8333A Green Meadows Dr. N.
+				Westerville  OH  43081
+				US
+
+00-02-53   (hex)		Televideo, Inc.
+000253     (base 16)		Televideo, Inc.
+				2345 Harris Way
+				San Jose  CA  95131
+				US
+
+00-02-6F   (hex)		Senao International Co., Ltd.
+00026F     (base 16)		Senao International Co., Ltd.
+				2F, No. 531, Chung-Cheng Rd.,
+				    TAIWAN
+				TW
+
+00-02-30   (hex)		Intersoft Electronics
+000230     (base 16)		Intersoft Electronics
+				Lammerdries 27
+				    
+				BE
+
+00-02-1C   (hex)		Network Elements, Inc.
+00021C     (base 16)		Network Elements, Inc.
+				9782 SW Nimbus Avenue
+				Beaverton  OR  97008
+				US
+
+00-02-0C   (hex)		Metro-Optix
+00020C     (base 16)		Metro-Optix
+				2201 Avenue K
+				Plano  TX  75074
+				US
+
+00-02-16   (hex)		Cisco Systems, Inc
+000216     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-14   (hex)		DTVRO
+000214     (base 16)		DTVRO
+				813 Daegong Bldg.,
+				KOREA  KOREA  135-080
+				KR
+
+00-02-0F   (hex)		AATR
+00020F     (base 16)		AATR
+				306 Chemin des Miroirs
+				    
+				FR
+
+00-01-C3   (hex)		Acromag, Inc.
+0001C3     (base 16)		Acromag, Inc.
+				30765 S. Wixom Road
+				Wixom  MI  48393
+				US
+
+00-01-C2   (hex)		ARK Research Corp.
+0001C2     (base 16)		ARK Research Corp.
+				1198 Saratoga Ave. #11D
+				San Jose  CA  95129
+				US
+
+00-01-EA   (hex)		Cirilium Corp.
+0001EA     (base 16)		Cirilium Corp.
+				1615 S. 52nd Street
+				Tempe  AZ  85281
+				US
+
+00-01-E0   (hex)		Fast Systems, Inc.
+0001E0     (base 16)		Fast Systems, Inc.
+				87-9 Yang-Jae, Seo-Cho,
+				    KOREA
+				KR
+
+00-01-AC   (hex)		Sitara Networks, Inc.
+0001AC     (base 16)		Sitara Networks, Inc.
+				60 Hickory Drive
+				Waltham  MA  02451
+				US
+
+00-01-ED   (hex)		SETA Corp.
+0001ED     (base 16)		SETA Corp.
+				Ariake Frontier Bldg. B
+				  JAPAN  135-0063
+				JP
+
+00-01-F6   (hex)		Association of Musical Electronics Industry
+0001F6     (base 16)		Association of Musical Electronics Industry
+				Ito Bldg. 4th Floor 2-16-9 Misaki-cho,
+				    
+				JP
+
+00-01-CB   (hex)		EVR
+0001CB     (base 16)		EVR
+				12 Raul Wallenberg St.
+				  Tel Aviv  69719
+				IL
+
+00-01-D6   (hex)		manroland AG
+0001D6     (base 16)		manroland AG
+				Stadtbachstraße 1
+				    
+				DE
+
+00-01-AD   (hex)		Coach Master International  d.b.a. CMI Worldwide, Inc.
+0001AD     (base 16)		Coach Master International  d.b.a. CMI Worldwide, Inc.
+				600 Stewart Street
+				Seattle  WA  98101
+				US
+
+00-01-88   (hex)		LXCO Technologies ag
+000188     (base 16)		LXCO Technologies ag
+				Gimmerstraße 69
+				    
+				DE
+
+00-01-9B   (hex)		Kyoto Microcomputer Co., Ltd.
+00019B     (base 16)		Kyoto Microcomputer Co., Ltd.
+				2-44 nakayama oe nishikyo-ku
+				kyoto    
+				JP
+
+00-01-7F   (hex)		Experience Music Project
+00017F     (base 16)		Experience Music Project
+				110 -110th Avenue NE - Ste. #400
+				Bellevue  WA  98004
+				US
+
+00-01-5A   (hex)		Digital Video Broadcasting
+00015A     (base 16)		Digital Video Broadcasting
+				DVB, % European Broadcasting Union
+				    
+				CH
+
+00-01-2A   (hex)		Telematica Sistems Inteligente
+00012A     (base 16)		Telematica Sistems Inteligente
+				Rua Miguel Casagrande, 200
+				São Paulo    
+				BR
+
+00-01-66   (hex)		TC GROUP A/S
+000166     (base 16)		TC GROUP A/S
+				Sindalsvej 34
+				Risskov    DK-8240
+				DK
+
+00-01-76   (hex)		Orient Silver Enterprises
+000176     (base 16)		Orient Silver Enterprises
+				8740 White Oak Avenue
+				Rancho Cucamonga  CA  91730
+				US
+
+00-01-58   (hex)		Electro Industries/Gauge Tech
+000158     (base 16)		Electro Industries/Gauge Tech
+				1800 Shames Drive
+				Westbury  NY  11590
+				US
+
+00-01-2D   (hex)		Komodo Technology
+00012D     (base 16)		Komodo Technology
+				170 Knowles Drive
+				Los Gatos  CA  95032
+				US
+
+00-01-48   (hex)		X-traWeb Inc.
+000148     (base 16)		X-traWeb Inc.
+				6750 West 93rd Street - Ste. #210
+				Overland Park  KS  66212
+				US
+
+00-01-87   (hex)		I2SE GmbH
+000187     (base 16)		I2SE GmbH
+				Friedrich-Ebert-Str. 61
+				Leipzig    04109
+				DE
+
+00-01-80   (hex)		AOpen, Inc.
+000180     (base 16)		AOpen, Inc.
+				6F, 88, Sec.1, Hsin Tai
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-01-97   (hex)		Cisco Systems, Inc
+000197     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-01-9A   (hex)		LEUNIG GmbH
+00019A     (base 16)		LEUNIG GmbH
+				Wilhelm-Ostwald-Str. 17
+				    
+				DE
+
+00-01-59   (hex)		S1 Corporation
+000159     (base 16)		S1 Corporation
+				R&D Center, S1 Bldg.
+				  KOREA  135-010
+				KR
+
+00-01-71   (hex)		Allied Data Technologies
+000171     (base 16)		Allied Data Technologies
+				Pascalweg 1,
+				  THE  
+				NL
+
+00-30-AC   (hex)		Systeme Lauer GmbH & Co., Ltd.
+0030AC     (base 16)		Systeme Lauer GmbH & Co., Ltd.
+				Kelterstrasse 59
+				72669 Unterensingen    
+				DE
+
+00-30-FB   (hex)		AZS Technology AG
+0030FB     (base 16)		AZS Technology AG
+				Steinbeisstrasse 2-4
+				72510 Stetten A.K.M.    
+				DE
+
+00-30-AE   (hex)		Times N System, Inc.
+0030AE     (base 16)		Times N System, Inc.
+				1826 Kramer Lane - Ste.
+				Austin  TX  78758
+				US
+
+00-30-03   (hex)		Phasys Ltd.
+003003     (base 16)		Phasys Ltd.
+				#100-9404 41st Avenue
+				Edmonton  Alberta T6X 1R2  
+				CA
+
+00-30-E2   (hex)		GARNET SYSTEMS CO., LTD.
+0030E2     (base 16)		GARNET SYSTEMS CO., LTD.
+				Sungwon Bldg. 545-7
+				Seoul    
+				KR
+
+00-01-3A   (hex)		SHELCAD COMMUNICATIONS, LTD.
+00013A     (base 16)		SHELCAD COMMUNICATIONS, LTD.
+				P.O. Box 8513
+				    
+				IL
+
+00-01-40   (hex)		Sendtek Corporation
+000140     (base 16)		Sendtek Corporation
+				12F-3, 333, Sec.1
+				    TAIWAN
+				TW
+
+00-01-23   (hex)		Schneider Electric Japan Holdings Ltd.
+000123     (base 16)		Schneider Electric Japan Holdings Ltd.
+				Schneider Electric Osaka Building
+				4-4-9 Kitahama  Chuo-ku, Osaka  541-0041
+				JP
+
+00-01-25   (hex)		YAESU MUSEN CO., LTD.
+000125     (base 16)		YAESU MUSEN CO., LTD.
+				Tennozu Parkside Building
+				Shinagawa-ku, Tokyo 140-0002    
+				JP
+
+00-01-26   (hex)		PAC Labs
+000126     (base 16)		PAC Labs
+				3079 Kilgore Road
+				Rancho Cordova  CA  95670
+				US
+
+00-01-1B   (hex)		Unizone Technologies, Inc.
+00011B     (base 16)		Unizone Technologies, Inc.
+				5Floor HaeSung Bldg.
+				SeoCho-Ku  Seoul  
+				KR
+
+00-01-1D   (hex)		Centillium Communications
+00011D     (base 16)		Centillium Communications
+				47211 Lakeview Blvd.
+				Fremont  CA  94538
+				US
+
+00-01-1F   (hex)		RC Networks, Inc.
+00011F     (base 16)		RC Networks, Inc.
+				6727 Flanders Drive - Ste. #212
+				San Diego  CA  92121
+				US
+
+00-B0-80   (hex)		Mannesmann Ipulsys B.V.
+00B080     (base 16)		Mannesmann Ipulsys B.V.
+				Bordewijklaan 18
+				2591 XR The Hague    
+				NL
+
+00-B0-1E   (hex)		Rantic Labs, Inc.
+00B01E     (base 16)		Rantic Labs, Inc.
+				702 Brazos,  Suite #500
+				Austin  TX  78701
+				US
+
+00-B0-F0   (hex)		CALY NETWORKS
+00B0F0     (base 16)		CALY NETWORKS
+				295 Santa Anna Court
+				Sunnyvale  CA  94086
+				US
+
+00-B0-9A   (hex)		Morrow Technologies Corp.
+00B09A     (base 16)		Morrow Technologies Corp.
+				2300 Tall Pines Drive
+				Largo  FL  33771-5342
+				US
+
+00-30-2E   (hex)		Hoft & Wessel AG
+00302E     (base 16)		Hoft & Wessel AG
+				Rotenburger Strasse 20
+				30659 Hannover    
+				DE
+
+00-30-ED   (hex)		Expert Magnetics Corp.
+0030ED     (base 16)		Expert Magnetics Corp.
+				12/F., Unit D, MTG Bldg., 1-3, Nakase
+				Mihama-ku, Chiba-city, 261-8501    
+				JP
+
+00-30-0F   (hex)		IMT - Information Management T
+00300F     (base 16)		IMT - Information Management T
+				Gewerbestrasse 8
+				CH-9470 Buchs    
+				CH
+
+00-30-82   (hex)		TAIHAN ELECTRIC WIRE CO., LTD.
+003082     (base 16)		TAIHAN ELECTRIC WIRE CO., LTD.
+				Communication Engineering Team
+				Seoul    
+				KR
+
+00-30-A9   (hex)		Netiverse, Inc.
+0030A9     (base 16)		Netiverse, Inc.
+				100 Century Center Court
+				San Jose  CA  95112
+				US
+
+00-30-FE   (hex)		DSA GmbH
+0030FE     (base 16)		DSA GmbH
+				Pascalstraße 28
+				52076 Aachen    
+				DE
+
+00-30-C4   (hex)		Canon Imaging Systems Inc.
+0030C4     (base 16)		Canon Imaging Systems Inc.
+				1-24 Yoneyama, Chuo-ku
+				Niigata-shi  Niigata  950-0916
+				JP
+
+00-30-4D   (hex)		ESI
+00304D     (base 16)		ESI
+				3701 E. Plano Parkway
+				Plano  TX  75074
+				US
+
+08-14-43   (hex)		UNIBRAIN S.A.
+081443     (base 16)		UNIBRAIN S.A.
+				84, ETHNIKIS ANTISTASEOS
+				    
+				GR
+
+00-B0-09   (hex)		Grass Valley, A Belden Brand
+00B009     (base 16)		Grass Valley, A Belden Brand
+				3499, Douglas B. Floreani
+				Montreal  Quebec  H4S 2C6
+				CA
+
+00-B0-AC   (hex)		SIAE-Microelettronica S.p.A.
+00B0AC     (base 16)		SIAE-Microelettronica S.p.A.
+				Via Michelangelo Buonarroti, 21
+				20093 Cologno M. (Ml)    
+				IT
+
+00-30-23   (hex)		COGENT COMPUTER SYSTEMS, INC.
+003023     (base 16)		COGENT COMPUTER SYSTEMS, INC.
+				10 RIVER ROAD - STE. #205
+				UXBRIDGE  MA  01569
+				US
+
+00-30-90   (hex)		CYRA TECHNOLOGIES, INC.
+003090     (base 16)		CYRA TECHNOLOGIES, INC.
+				8000 CAPWELL DRIVE
+				OAKLAND  CA  94621
+				US
+
+00-30-A7   (hex)		SCHWEITZER ENGINEERING
+0030A7     (base 16)		SCHWEITZER ENGINEERING
+				LABORATORIES, INC.
+				PULLMAN  WA  99163
+				US
+
+00-30-7C   (hex)		ADID SA
+00307C     (base 16)		ADID SA
+				70 RU ANATOLE FRANCE
+				92 300 LEVALLOIS-PERRET CEDEX    
+				FR
+
+00-30-55   (hex)		Renesas Technology America, Inc.
+003055     (base 16)		Renesas Technology America, Inc.
+				450 Holger Way
+				San Jose  CA  95134
+				US
+
+00-30-2F   (hex)		GE Aviation System
+00302F     (base 16)		GE Aviation System
+				3290 Patterson Ave., S.E.
+				Grand Rapids  MI  49512
+				US
+
+00-30-0E   (hex)		Klotz Digital AG
+00300E     (base 16)		Klotz Digital AG
+				Hans-Stiessbergerstraße 2A
+				D-85540 Haar    
+				DE
+
+00-30-D5   (hex)		DResearch GmbH
+0030D5     (base 16)		DResearch GmbH
+				Otto-Schmirgal-Str.3
+				10319 Berlin    
+				DE
+
+00-30-18   (hex)		Jetway Information Co., Ltd.
+003018     (base 16)		Jetway Information Co., Ltd.
+				4F, No. 168, LI THE ST.
+				Chung Ho City 235  Taipei  
+				TW
+
+00-30-9F   (hex)		AMBER NETWORKS
+00309F     (base 16)		AMBER NETWORKS
+				2475 AUGUSTINE DR.
+				SANTA CLARA  CA  95054
+				US
+
+00-30-A8   (hex)		OL'E COMMUNICATIONS, INC.
+0030A8     (base 16)		OL'E COMMUNICATIONS, INC.
+				1962 ZANKER ROAD
+				SAN JOSE  CA  95112
+				US
+
+00-30-D1   (hex)		INOVA CORPORATION
+0030D1     (base 16)		INOVA CORPORATION
+				110 AVON STREET
+				CHARLOTTESVILE  VA  22902
+				US
+
+00-30-BB   (hex)		CacheFlow, Inc.
+0030BB     (base 16)		CacheFlow, Inc.
+				650 Almanor Drive
+				Sunnyvale  CA  94086
+				US
+
+00-30-AF   (hex)		Honeywell GmbH
+0030AF     (base 16)		Honeywell GmbH
+				Boeblinger Str. 17
+				D-71098 Schoenaich    
+				DE
+
+00-30-AA   (hex)		AXUS MICROSYSTEMS, INC.
+0030AA     (base 16)		AXUS MICROSYSTEMS, INC.
+				2F-4, NO.18/N. 609, SEC. 5
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-30-89   (hex)		Spectrapoint Wireless, LLC
+003089     (base 16)		Spectrapoint Wireless, LLC
+				1125 E. Collins Blvd.
+				Richardson  TX  75081
+				US
+
+00-30-9A   (hex)		ASTRO TERRA CORP.
+00309A     (base 16)		ASTRO TERRA CORP.
+				11526 SORRENTO VALLEY ROAD
+				SAN DIEGO  CA  92121
+				US
+
+00-30-87   (hex)		VEGA GRIESHABER KG
+003087     (base 16)		VEGA GRIESHABER KG
+				AM HOHENSTEIN 113
+				    
+				DE
+
+00-30-62   (hex)		IP Video Networks Inc
+003062     (base 16)		IP Video Networks Inc
+				6650 Lusk Blvd
+				SAN DIEGO  CA  92121
+				US
+
+00-30-2D   (hex)		QUANTUM BRIDGE COMMUNICATIONS
+00302D     (base 16)		QUANTUM BRIDGE COMMUNICATIONS
+				ONE HIGH STREET
+				NORTH ANDOVER  MA  01845
+				US
+
+00-30-CB   (hex)		OMNI FLOW COMPUTERS, INC.
+0030CB     (base 16)		OMNI FLOW COMPUTERS, INC.
+				10701 CORPORATE DRIVE-STE.#300
+				STAFFORD  TX  77477
+				US
+
+00-30-6B   (hex)		CMOS SYSTEMS, INC.
+00306B     (base 16)		CMOS SYSTEMS, INC.
+				23440 HAWTHORNE BLVD-STE #290
+				TORRANCE  CA  90505
+				US
+
+00-30-AD   (hex)		SHANGHAI COMMUNICATION
+0030AD     (base 16)		SHANGHAI COMMUNICATION
+				TECHNOLOGIES CENTER
+				  P.R.  
+				CN
+
+00-30-CF   (hex)		TWO TECHNOLOGIES, INC.
+0030CF     (base 16)		TWO TECHNOLOGIES, INC.
+				419 SARGON WAY
+				HORSHAM  PA  19044
+				US
+
+00-30-B2   (hex)		L-3 Sonoma EO
+0030B2     (base 16)		L-3 Sonoma EO
+				428 Aviation Blvd
+				Santa Rosa  CA  95403
+				US
+
+00-30-35   (hex)		Corning Incorporated
+003035     (base 16)		Corning Incorporated
+				Data Center
+				Corning  NY  14831
+				US
+
+00-30-7F   (hex)		IRLAN LTD.
+00307F     (base 16)		IRLAN LTD.
+				1 HATAMAR STREET
+				    
+				IL
+
+00-D0-15   (hex)		UNIVEX MICROTECHNOLOGY CORP.
+00D015     (base 16)		UNIVEX MICROTECHNOLOGY CORP.
+				2, TZE-CHIANG 3RD ROAD
+				    TAIWAN
+				TW
+
+00-D0-48   (hex)		ECTON, INC.
+00D048     (base 16)		ECTON, INC.
+				5168 CAMPUS DRIVE
+				PLYMOUTH MEETING  PA  19462
+				US
+
+00-D0-A5   (hex)		AMERICAN ARIUM
+00D0A5     (base 16)		AMERICAN ARIUM
+				14281 CHAMBERS ROAD
+				TUSTIN  CA  92780
+				US
+
+00-30-5D   (hex)		DIGITRA SYSTEMS, INC.
+00305D     (base 16)		DIGITRA SYSTEMS, INC.
+				8-61, GAWOL-DONG
+				  KOREA  140-150
+				KR
+
+00-30-36   (hex)		RMP ELEKTRONIKSYSTEME GMBH
+003036     (base 16)		RMP ELEKTRONIKSYSTEME GMBH
+				HANNS-MARTIN-SCHLE'R-STR.12-14
+				    
+				DE
+
+00-D0-CF   (hex)		MORETON BAY
+00D0CF     (base 16)		MORETON BAY
+				12/97 JIJAWS STREET
+				    
+				AU
+
+00-D0-7F   (hex)		STRATEGY & TECHNOLOGY, LIMITED
+00D07F     (base 16)		STRATEGY & TECHNOLOGY, LIMITED
+				Suite 4.2, Clifton Heights
+				  Bristol  BS8 1EJ
+				GB
+
+00-30-E6   (hex)		Draeger Medical Systems, Inc.
+0030E6     (base 16)		Draeger Medical Systems, Inc.
+				6 Tech Drive
+				Andover  MA  01810
+				US
+
+00-30-BD   (hex)		BELKIN COMPONENTS
+0030BD     (base 16)		BELKIN COMPONENTS
+				501 WEST WALNUT STREET
+				COMPTON  CA  90220
+				US
+
+00-30-07   (hex)		OPTI, INC.
+003007     (base 16)		OPTI, INC.
+				1440 MCCARTHY BLVD.
+				MILPITAS  CA  95035
+				US
+
+00-D0-C2   (hex)		BALTHAZAR TECHNOLOGY AB
+00D0C2     (base 16)		BALTHAZAR TECHNOLOGY AB
+				ANKDAMMSGATAN 24
+				    
+				SE
+
+00-D0-22   (hex)		INCREDIBLE TECHNOLOGIES, INC.
+00D022     (base 16)		INCREDIBLE TECHNOLOGIES, INC.
+				1600 HICKS ROAD
+				ROLLING MEADOWS  IL  60008
+				US
+
+00-D0-71   (hex)		ECHELON CORP.
+00D071     (base 16)		ECHELON CORP.
+				2901 Patrick Henry Dr.
+				Santa Clara  CA  95054 
+				US
+
+00-D0-4F   (hex)		BITRONICS, INC.
+00D04F     (base 16)		BITRONICS, INC.
+				P.O. BOX 22290
+				LEHIGH VALLEY  PA  18002-2290
+				US
+
+00-D0-69   (hex)		TECHNOLOGIC SYSTEMS
+00D069     (base 16)		TECHNOLOGIC SYSTEMS
+				16610 E. LASER DRIVE-STE. #10
+				FOUNTAIN HILLS  AZ  85268
+				US
+
+00-D0-90   (hex)		Cisco Systems, Inc
+00D090     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-F5   (hex)		ORANGE MICRO, INC.
+00D0F5     (base 16)		ORANGE MICRO, INC.
+				1400 N. LAKEVIEW AVE.
+				ANAHEIM  CA  92807
+				US
+
+00-D0-E9   (hex)		Advantage Century Telecommunication Corp.
+00D0E9     (base 16)		Advantage Century Telecommunication Corp.
+				4F, 41, Tunghsin Rd.
+				Taipei    
+				TW
+
+00-D0-94   (hex)		Seeion Control LLC
+00D094     (base 16)		Seeion Control LLC
+				117 Stephanie Lane
+				vista  CA  92084-5316
+				US
+
+00-D0-FB   (hex)		TEK MICROSYSTEMS, INCORPORATED
+00D0FB     (base 16)		TEK MICROSYSTEMS, INCORPORATED
+				ONE NORTH AVENUE
+				BURLINGTON  MA  01803
+				US
+
+00-D0-66   (hex)		WINTRISS ENGINEERING CORP.
+00D066     (base 16)		WINTRISS ENGINEERING CORP.
+				6344 FERRIS SQUARE
+				SAN DIEGO  CA  92121
+				US
+
+00-D0-82   (hex)		IOWAVE INC.
+00D082     (base 16)		IOWAVE INC.
+				1010 WISCONSIN AVENUE
+				WASHINGTON  DC  20007
+				US
+
+00-D0-81   (hex)		RTD Embedded Technologies, Inc.
+00D081     (base 16)		RTD Embedded Technologies, Inc.
+				103 Innovation Blvd.
+				State College  PA  16803
+				US
+
+00-D0-02   (hex)		DITECH CORPORATION
+00D002     (base 16)		DITECH CORPORATION
+				825 EAST MIDDLEFIELD RD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-D0-85   (hex)		OTIS ELEVATOR COMPANY
+00D085     (base 16)		OTIS ELEVATOR COMPANY
+				5 FARM SPRINGS RD.
+				FARMINGTON  CT  06032
+				US
+
+00-D0-11   (hex)		PRISM VIDEO, INC.
+00D011     (base 16)		PRISM VIDEO, INC.
+				15851 DALLAS PARKWAY-STE.#1060
+				ADDISON  TX  75001
+				US
+
+00-D0-DF   (hex)		KUZUMI ELECTRONICS, INC.
+00D0DF     (base 16)		KUZUMI ELECTRONICS, INC.
+				28-6 IIJIMA-CHYO, SAKAE-KU
+				    
+				JP
+
+00-D0-9B   (hex)		SPECTEL LTD.
+00D09B     (base 16)		SPECTEL LTD.
+				21 STILLORGAN INDUSTRIAL PARK
+				    
+				IE
+
+00-D0-67   (hex)		CAMPIO COMMUNICATIONS
+00D067     (base 16)		CAMPIO COMMUNICATIONS
+				2033 GATEWAY PL, SUITE #600
+				SAN JOSE  CA  95110
+				US
+
+00-D0-58   (hex)		Cisco Systems, Inc
+00D058     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-32   (hex)		YANO ELECTRIC CO., LTD.
+00D032     (base 16)		YANO ELECTRIC CO., LTD.
+				7-3-1 IBUKIDAIHIGASHIMACHI
+				    
+				JP
+
+00-D0-F1   (hex)		SEGA ENTERPRISES, LTD.
+00D0F1     (base 16)		SEGA ENTERPRISES, LTD.
+				12-14 HIGASHIKOUJIYA 2-CHOME
+				    
+				JP
+
+00-D0-3A   (hex)		ZONEWORX, INC.
+00D03A     (base 16)		ZONEWORX, INC.
+				40925 COUNTY CENTER DRIVE
+				TEMECULA  CA  92592
+				US
+
+00-D0-01   (hex)		VST TECHNOLOGIES, INC.
+00D001     (base 16)		VST TECHNOLOGIES, INC.
+				125 NAGOG PARK
+				ACTON  MA  01720
+				US
+
+00-50-3E   (hex)		Cisco Systems, Inc
+00503E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-50-20   (hex)		MEDIASTAR CO., LTD.
+005020     (base 16)		MEDIASTAR CO., LTD.
+				3FL, SOHUN BLDG.
+				    KOREA
+				KR
+
+00-D0-75   (hex)		ALARIS MEDICAL SYSTEMS, INC.
+00D075     (base 16)		ALARIS MEDICAL SYSTEMS, INC.
+				P.O. BOX 85335
+				SAN DIEGO  CA  92121-2733
+				US
+
+00-D0-E1   (hex)		AVIONITEK ISRAEL INC.
+00D0E1     (base 16)		AVIONITEK ISRAEL INC.
+				1 ETGAR STREET
+				    
+				IL
+
+00-D0-08   (hex)		MACTELL CORPORATION
+00D008     (base 16)		MACTELL CORPORATION
+				7000 CAMERON ROAD
+				AUSTIN  TX  78752
+				US
+
+00-D0-D9   (hex)		DEDICATED MICROCOMPUTERS
+00D0D9     (base 16)		DEDICATED MICROCOMPUTERS
+				1 Thellow Heath Park
+				Northwich    CW9 6JB
+				GB
+
+00-D0-0B   (hex)		RHK TECHNOLOGY, INC.
+00D00B     (base 16)		RHK TECHNOLOGY, INC.
+				1050 EAST MAPLE ROAD
+				TROY  MI  48083
+				US
+
+00-D0-9C   (hex)		KAPADIA COMMUNICATIONS
+00D09C     (base 16)		KAPADIA COMMUNICATIONS
+				3925 WEST BROKER LANE
+				AUSTIN  TX  78759
+				US
+
+00-D0-F3   (hex)		SOLARI DI UDINE SPA
+00D0F3     (base 16)		SOLARI DI UDINE SPA
+				VIA GINO PIERI 29
+				    
+				IT
+
+00-D0-39   (hex)		UTILICOM, INC.
+00D039     (base 16)		UTILICOM, INC.
+				323 LOVE PLACE
+				SANTA BARBARA  CA  93112-3289
+				US
+
+00-D0-A0   (hex)		MIPS DENMARK
+00D0A0     (base 16)		MIPS DENMARK
+				LAUTRUPVANG 2B
+				DK  -  
+				DK
+
+00-D0-0A   (hex)		LANACCESS TELECOM S.A.
+00D00A     (base 16)		LANACCESS TELECOM S.A.
+				GRAN VIA 8-10  4  1
+				    
+				ES
+
+00-D0-1C   (hex)		SBS TECHNOLOGIES,
+00D01C     (base 16)		SBS TECHNOLOGIES,
+				CONNECTIVITY PRODUCTS
+				ST. PAUL  MN  55121-1245
+				US
+
+00-D0-D5   (hex)		GRUNDIG AG
+00D0D5     (base 16)		GRUNDIG AG
+				KURGARTENSGTREET 37
+				    
+				DE
+
+00-D0-41   (hex)		AMIGO TECHNOLOGY CO., LTD.
+00D041     (base 16)		AMIGO TECHNOLOGY CO., LTD.
+				4F-1B, NO.12, LANE 609, SEC.5,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-D0-9D   (hex)		VERIS INDUSTRIES
+00D09D     (base 16)		VERIS INDUSTRIES
+				10831 SW CASCADE
+				PORTLAND  OR  97223
+				US
+
+00-D0-6D   (hex)		ACRISON, INC.
+00D06D     (base 16)		ACRISON, INC.
+				20 EMPIRE BLVD.
+				MOONACHIE  NJ  07074
+				US
+
+00-D0-2B   (hex)		JETCELL, INC.
+00D02B     (base 16)		JETCELL, INC.
+				173 CONSTITUTION DRIVE
+				MENLO PARK  CA  94025-1106
+				US
+
+00-D0-62   (hex)		DIGIGRAM
+00D062     (base 16)		DIGIGRAM
+				PARC DE PRE MILLIET
+				    
+				FR
+
+00-D0-8D   (hex)		PHOENIX GROUP, INC.
+00D08D     (base 16)		PHOENIX GROUP, INC.
+				123 MARCUS BLVD.
+				HAUPPAUGE  NY  11788
+				US
+
+00-D0-3D   (hex)		GALILEO TECHNOLOGY, LTD.
+00D03D     (base 16)		GALILEO TECHNOLOGY, LTD.
+				MOSHAV MANOF
+				    
+				IL
+
+00-50-C6   (hex)		LOOP TELECOMMUNICATION INTERNATIONAL, INC.
+0050C6     (base 16)		LOOP TELECOMMUNICATION INTERNATIONAL, INC.
+				7F, No. 8, Hsin Ann Road
+				Hsinchu    -   
+				TW
+
+00-50-9F   (hex)		HORIZON COMPUTER
+00509F     (base 16)		HORIZON COMPUTER
+				TRINITY BLDG. 4-22-7
+				 TOKYO 106    
+				JP
+
+00-50-A5   (hex)		CAPITOL BUSINESS SYSTEMS, LTD.
+0050A5     (base 16)		CAPITOL BUSINESS SYSTEMS, LTD.
+				43/44 RIVERSIDE
+				ROCHESTER, KENT  England ME2 4DP  
+				GB
+
+00-50-00   (hex)		NEXO COMMUNICATIONS, INC.
+005000     (base 16)		NEXO COMMUNICATIONS, INC.
+				2ND FL., 160, MINGCHU ROAD
+				HSINCHU CITY    
+				TW
+
+00-50-90   (hex)		DCTRI
+005090     (base 16)		DCTRI
+				NO.40 XUE YUAN RD
+				    
+				CN
+
+00-50-3B   (hex)		MEDIAFIRE CORPORATION
+00503B     (base 16)		MEDIAFIRE CORPORATION
+				11317 FREDERICK AVENUE
+				BELTSVILLE  MD  20705
+				US
+
+00-50-46   (hex)		MENICX INTERNATIONAL CO., LTD.
+005046     (base 16)		MENICX INTERNATIONAL CO., LTD.
+				NO.9, MING TSUN ROAD
+				TAIWAN 310  TAIWAN 310  R.O.C.
+				TW
+
+00-50-41   (hex)		Coretronic Corporation
+005041     (base 16)		Coretronic Corporation
+				NO.11, LI HSIN RD.
+				    
+				TW
+
+00-50-B0   (hex)		TECHNOLOGY ATLANTA CORPORATION
+0050B0     (base 16)		TECHNOLOGY ATLANTA CORPORATION
+				500 Sugar Mill Road
+				Atlanta  GA  30350
+				US
+
+00-50-DD   (hex)		SERRA SOLDADURA, S.A.
+0050DD     (base 16)		SERRA SOLDADURA, S.A.
+				POL. IND. ZONA FRANCA,
+				    
+				ES
+
+00-50-63   (hex)		OY COMSEL SYSTEM AB
+005063     (base 16)		OY COMSEL SYSTEM AB
+				TEGELBRUKSGATAN 5-7
+				FIN-65100 VASA    
+				FI
+
+00-50-8D   (hex)		ABIT COMPUTER CORPORATION
+00508D     (base 16)		ABIT COMPUTER CORPORATION
+				3F-7, NO. 79, SEC.1
+				TAIPEI HSIEN    
+				TW
+
+00-50-A0   (hex)		DELTA COMPUTER SYSTEMS, INC.
+0050A0     (base 16)		DELTA COMPUTER SYSTEMS, INC.
+				11719 NE 95TH STREET - STE.
+				VANCOUVER  WA  98682-2444
+				US
+
+00-50-66   (hex)		AtecoM GmbH advanced telecomunication modules
+005066     (base 16)		AtecoM GmbH advanced telecomunication modules
+				KAISERSTR. 100
+				D-52134 HERZOGENRATH    
+				DE
+
+00-50-59   (hex)		iBAHN
+005059     (base 16)		iBAHN
+				10757 S. River Front Parkway
+				South Jordan  UT  84095
+				US
+
+00-50-D9   (hex)		ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA
+0050D9     (base 16)		ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA
+				VIA SOCRATES M. BITTENCOURT, 1099
+				32010-010 Contagem MG    
+				BR
+
+00-50-01   (hex)		YAMASHITA SYSTEMS CORP.
+005001     (base 16)		YAMASHITA SYSTEMS CORP.
+				5-7-12 IKEGAMI
+				OTA-KU TOKYO    
+				JP
+
+00-50-67   (hex)		AEROCOMM, INC.
+005067     (base 16)		AEROCOMM, INC.
+				13256 W. 98TH STREET
+				LENEXA  KS  66215
+				US
+
+00-50-B6   (hex)		GOOD WAY IND. CO., LTD.
+0050B6     (base 16)		GOOD WAY IND. CO., LTD.
+				5F, NO.8, ALLEY 6,
+				  TAIWAN  R.O.C.
+				TW
+
+00-50-4B   (hex)		BARCONET N.V.
+00504B     (base 16)		BARCONET N.V.
+				LUIPAARDSTRAAT 12
+				    
+				BE
+
+00-50-EA   (hex)		XEL COMMUNICATIONS, INC.
+0050EA     (base 16)		XEL COMMUNICATIONS, INC.
+				17101 E. OHIO DRIVE
+				AURORA  CO  80017
+				US
+
+00-50-C8   (hex)		Addonics Technologies, Inc.
+0050C8     (base 16)		Addonics Technologies, Inc.
+				1918 Junction Ave.,
+				San Jose  CA  95131
+				US
+
+00-50-89   (hex)		SAFETY MANAGEMENT SYSTEMS
+005089     (base 16)		SAFETY MANAGEMENT SYSTEMS
+				Burgemeester Burgerslaan 40
+				NH Rosmalen    5245
+				NL
+
+00-50-F4   (hex)		SIGMATEK GMBH & CO. KG
+0050F4     (base 16)		SIGMATEK GMBH & CO. KG
+				A-5112 LAMPRECHTSHAUSEN,
+				    
+				AT
+
+00-50-21   (hex)		EIS INTERNATIONAL, INC.
+005021     (base 16)		EIS INTERNATIONAL, INC.
+				1351 WASHINGTON BLVD.
+				STAMFORD  CT  06902
+				US
+
+00-50-5E   (hex)		DIGITEK MICROLOGIC S.A.
+00505E     (base 16)		DIGITEK MICROLOGIC S.A.
+				SANT JOAN DE LA SALLE 6
+				    
+				ES
+
+00-50-AE   (hex)		FDK Co., Ltd
+0050AE     (base 16)		FDK Co., Ltd
+				2281 Washizu
+				Shizuoka-ken  431-0495  
+				JP
+
+00-50-E7   (hex)		PARADISE INNOVATIONS (ASIA)
+0050E7     (base 16)		PARADISE INNOVATIONS (ASIA)
+				PTE. LTD.
+				  SINGAPORE  554914
+				SG
+
+00-50-FB   (hex)		VSK ELECTRONICS
+0050FB     (base 16)		VSK ELECTRONICS
+				VENETIELAAN 39
+				    
+				BE
+
+00-90-73   (hex)		GAIO TECHNOLOGY
+009073     (base 16)		GAIO TECHNOLOGY
+				OAK-YOKOHAMA BLDG.
+				NISHI-KU YOKOHAMA-CITY  Kanagawa  
+				JP
+
+00-90-7B   (hex)		E-TECH, INC.
+00907B     (base 16)		E-TECH, INC.
+				30, R&D ROAD 2
+				HSINCHU    
+				TW
+
+00-90-81   (hex)		ALOHA NETWORKS, INC.
+009081     (base 16)		ALOHA NETWORKS, INC.
+				1001A O'REILLY AVENUE
+				SAN FRANCISCO  CA  94129-0472
+				US
+
+00-90-1C   (hex)		mps Software Gmbh
+00901C     (base 16)		mps Software Gmbh
+				LUDWIGSTR 36
+				85551 KIRCHHEIM    
+				DE
+
+00-50-86   (hex)		TELKOM SA, LTD.
+005086     (base 16)		TELKOM SA, LTD.
+				TELKOM LABORATORY
+				PRETORIA    
+				ZA
+
+00-50-1A   (hex)		IQinVision
+00501A     (base 16)		IQinVision
+				33122 Valle Road
+				San Juan Capistrano  CA  92675-4853
+				US
+
+00-50-8F   (hex)		ASITA TECHNOLOGIES INT'L LTD.
+00508F     (base 16)		ASITA TECHNOLOGIES INT'L LTD.
+				UNIT 2 BALLYBRIT BUSINESS PARK
+				    
+				IE
+
+00-50-15   (hex)		BRIGHT STAR ENGINEERING
+005015     (base 16)		BRIGHT STAR ENGINEERING
+				19 ENFIELD DRIVE
+				ANDOVER  MA  01810
+				US
+
+00-50-57   (hex)		BROADBAND ACCESS SYSTEMS
+005057     (base 16)		BROADBAND ACCESS SYSTEMS
+				48 South Park St #208
+				Montclair  NJ  01752
+				US
+
+00-50-88   (hex)		AMANO CORPORATION
+005088     (base 16)		AMANO CORPORATION
+				275, MAMEDO-CHO
+				222-8558    
+				JP
+
+00-50-31   (hex)		AEROFLEX LABORATORIES, INC.
+005031     (base 16)		AEROFLEX LABORATORIES, INC.
+				35 SOUTH SERVICE ROAD
+				PLAINVIEW  NY  11803
+				US
+
+00-90-DB   (hex)		NEXT LEVEL COMMUNICATIONS
+0090DB     (base 16)		NEXT LEVEL COMMUNICATIONS
+				6085 STATE FARM DRIVE
+				ROHNERT PARK  CA  94928
+				US
+
+00-90-56   (hex)		TELESTREAM, INC.
+009056     (base 16)		TELESTREAM, INC.
+				848 GOLD FLAT RD., SUITE 1
+				NEVADA CITY  CA  95959
+				US
+
+00-90-68   (hex)		DVT CORP.
+009068     (base 16)		DVT CORP.
+				1670 OAKBROOK DR. - STE. #330
+				NORCROSS  GA  30093
+				US
+
+00-90-5E   (hex)		RAULAND-BORG CORPORATION
+00905E     (base 16)		RAULAND-BORG CORPORATION
+				3450 W. OAKTON ST.
+				SKOKIE  IL  60076
+				US
+
+00-90-AF   (hex)		J. MORITA MFG. CORP.
+0090AF     (base 16)		J. MORITA MFG. CORP.
+				680 HIGASHIHAMA MINAMI-CHO
+				FUSHIMI-KU, KYOTO  612-8213  
+				JP
+
+00-50-03   (hex)		Xrite Inc
+005003     (base 16)		Xrite Inc
+				4300 44TH Street, S.E.
+				Grand Rapids  MI  49512
+				US
+
+00-50-D3   (hex)		DIGITAL AUDIO PROCESSING PTY. LTD.
+0050D3     (base 16)		DIGITAL AUDIO PROCESSING PTY. LTD.
+				PO BOX 40
+				NSW 2138    
+				AU
+
+00-50-AD   (hex)		CommUnique Wireless Corp.
+0050AD     (base 16)		CommUnique Wireless Corp.
+				1070 MARINA VILLAGE PARKWAY
+				ALAMEDA  CA  94501
+				US
+
+00-50-AF   (hex)		INTERGON, INC.
+0050AF     (base 16)		INTERGON, INC.
+				5800 RANCHESTER DRIVE
+				HOUSTON  TX  77036
+				US
+
+00-90-34   (hex)		IMAGIC, INC.
+009034     (base 16)		IMAGIC, INC.
+				235 West Road #7
+				Portsmouth  NH  03801
+				US
+
+00-90-AA   (hex)		INDIGO ACTIVE VISION SYSTEMS LIMITED
+0090AA     (base 16)		INDIGO ACTIVE VISION SYSTEMS LIMITED
+				THE EDINBURGH TECHNOPOLE
+				Edinburgh EH26 OPJ    
+				GB
+
+00-90-5B   (hex)		RAYMOND AND LAE ENGINEERING
+00905B     (base 16)		RAYMOND AND LAE ENGINEERING
+				208 COMMERCE DR.,  UNIT #3C
+				FORT COLLINS  CO  80524
+				US
+
+00-90-BC   (hex)		TELEMANN CO., LTD.
+0090BC     (base 16)		TELEMANN CO., LTD.
+				6F DONGSIN BLDG.
+				SEOUL, 135-270    
+				KR
+
+00-90-0A   (hex)		PROTON ELECTRONIC INDUSTRIAL CO., LTD.
+00900A     (base 16)		PROTON ELECTRONIC INDUSTRIAL CO., LTD.
+				
+				PANCHIAO, Taipei County    
+				TW
+
+00-90-F8   (hex)		MEDIATRIX TELECOM
+0090F8     (base 16)		MEDIATRIX TELECOM
+				4229 GARLOCK
+				QUEBEC J1L 2C8    
+				CA
+
+00-90-10   (hex)		SIMULATION LABORATORIES, INC.
+009010     (base 16)		SIMULATION LABORATORIES, INC.
+				10078 TYLER PLACE #A
+				IJAMSVILLE  MD  21754
+				US
+
+00-90-C6   (hex)		OPTIM SYSTEMS, INC.
+0090C6     (base 16)		OPTIM SYSTEMS, INC.
+				8201 GREENSBORO DR.-STE. #1000
+				MCLEAN  VA  22102
+				US
+
+00-90-2E   (hex)		NAMCO LIMITED
+00902E     (base 16)		NAMCO LIMITED
+				1-1-32 SHIN-URASHIMA-CHO
+				KANAGAWA 221-0031    
+				JP
+
+00-90-37   (hex)		ACUCOMM, INC.
+009037     (base 16)		ACUCOMM, INC.
+				4633 OLD IRONSIDES - STE #310
+				SANTA CLARA  CA  95054
+				US
+
+00-90-78   (hex)		MER TELEMANAGEMENT SOLUTIONS, LTD.
+009078     (base 16)		MER TELEMANAGEMENT SOLUTIONS, LTD.
+				5 HATSOREF STR.
+				HOLON    
+				IL
+
+00-90-B8   (hex)		ROHDE & SCHWARZ GMBH & CO. KG
+0090B8     (base 16)		ROHDE & SCHWARZ GMBH & CO. KG
+				POSTFACH: 80 14 69/ABT.: 3CK
+				D-81614 MUNCHEN    
+				DE
+
+00-90-1A   (hex)		UNISPHERE SOLUTIONS
+00901A     (base 16)		UNISPHERE SOLUTIONS
+				5 CARLISLE ROAD
+				WESTFORD  MA  01886
+				US
+
+00-90-B5   (hex)		NIKON CORPORATION
+0090B5     (base 16)		NIKON CORPORATION
+				Electronic Imaging Division, Designing D
+				TOKYO 140-8601    
+				JP
+
+00-90-05   (hex)		PROTECH SYSTEMS CO., LTD.
+009005     (base 16)		PROTECH SYSTEMS CO., LTD.
+				5F, NO. 34, LANE 80, SEC. 3
+				TAIPEI    
+				TW
+
+00-90-59   (hex)		TELECOM DEVICE K.K.
+009059     (base 16)		TELECOM DEVICE K.K.
+				SANMIYANAGA BLDG. 3F, 1-5-12
+				  TOKYO 107  
+				JP
+
+00-90-CA   (hex)		ACCORD VIDEO TELECOMMUNICATIONS, LTD.
+0090CA     (base 16)		ACCORD VIDEO TELECOMMUNICATIONS, LTD.
+				10, MARTIN GEHL STR, PO BOX 3564
+				Petach-Tikva 49130    
+				IL
+
+00-90-E9   (hex)		JANZ COMPUTER AG
+0090E9     (base 16)		JANZ COMPUTER AG
+				Im Dörener Feld 8
+				D-33100  Paderborn  
+				DE
+
+00-90-EB   (hex)		SENTRY TELECOM SYSTEMS
+0090EB     (base 16)		SENTRY TELECOM SYSTEMS
+				8664 COMMERCE COURT
+				BURNABY  BC V5A 4N7  
+				CA
+
+00-90-FE   (hex)		ELECOM CO., LTD.  (LANEED DIV.)
+0090FE     (base 16)		ELECOM CO., LTD.  (LANEED DIV.)
+				TOKYU BANCHO BLDG.
+				Chiyoda-ku  TOKYO  102-0081
+				JP
+
+00-90-BB   (hex)		TAINET COMMUNICATION SYSTEM Corp.
+0090BB     (base 16)		TAINET COMMUNICATION SYSTEM Corp.
+				3 FL, NO. 6, ALLEY 23, LANE 91 SEC. 1
+				Taipei    
+				TW
+
+00-90-90   (hex)		I-BUS
+009090     (base 16)		I-BUS
+				9174 SKY PARK COURT
+				SAN DIEGO  CA  92123
+				US
+
+00-90-D5   (hex)		EUPHONIX, INC.
+0090D5     (base 16)		EUPHONIX, INC.
+				220 PORTAGE AVE.
+				PALO ALTO  CA  94306
+				US
+
+00-90-4A   (hex)		CONCUR SYSTEM TECHNOLOGIES
+00904A     (base 16)		CONCUR SYSTEM TECHNOLOGIES
+				2525 WALLINGWOOD DR.-STE. #804
+				AUSTIN  TX  78746
+				US
+
+00-90-8F   (hex)		AUDIO CODES LTD.
+00908F     (base 16)		AUDIO CODES LTD.
+				3A NETANYAHU STREET
+				OR YEHUDA 60256    
+				IL
+
+00-90-9E   (hex)		Critical IO, LLC
+00909E     (base 16)		Critical IO, LLC
+				485 E. 17th Street
+				Costa Mesa  CA  92627
+				US
+
+00-10-92   (hex)		NETCORE INC.
+001092     (base 16)		NETCORE INC.
+				12F-2, 537, SEC.2
+				HSINCHU    
+				TW
+
+00-10-1C   (hex)		OHM TECHNOLOGIES INTL, LLC
+00101C     (base 16)		OHM TECHNOLOGIES INTL, LLC
+				4 EXECUTIVE CIRCLE, Suite 185
+				IRVINE  CA  92614
+				US
+
+00-10-46   (hex)		ALCORN MCBRIDE INC.
+001046     (base 16)		ALCORN MCBRIDE INC.
+				3300 S. HIAWASSEE  #105
+				ORLANDO  FL  32835
+				US
+
+00-10-28   (hex)		COMPUTER TECHNICA, INC.
+001028     (base 16)		COMPUTER TECHNICA, INC.
+				3-5-19 HIGASHINAKA HAKATA-KU
+				FUKUOKA  816    
+				JP
+
+00-10-B7   (hex)		COYOTE TECHNOLOGIES, LLC
+0010B7     (base 16)		COYOTE TECHNOLOGIES, LLC
+				4360 PARK TERRACE DRIVE
+				WESTLAKE VILLAGE  CA  91361
+				US
+
+00-90-E5   (hex)		TEKNEMA, INC.
+0090E5     (base 16)		TEKNEMA, INC.
+				2656 E. BAYSHORE ROAD
+				PALO ALTO  CA  94303
+				US
+
+00-90-F4   (hex)		LIGHTNING INSTRUMENTATION
+0090F4     (base 16)		LIGHTNING INSTRUMENTATION
+				BOVERESSES 50
+				1010 LAUSANNE    
+				CH
+
+00-90-74   (hex)		ARGON NETWORKS, INC.
+009074     (base 16)		ARGON NETWORKS, INC.
+				25 PORTER ROAD
+				LITTLETON  MA  01460
+				US
+
+00-90-9F   (hex)		DIGI-DATA CORPORATION
+00909F     (base 16)		DIGI-DATA CORPORATION
+				7165 Columbia Gateway Drive
+				Columbia  MD  21045
+				US
+
+00-90-3B   (hex)		TriEMS Research Lab, Inc.
+00903B     (base 16)		TriEMS Research Lab, Inc.
+				1275 N. TUSTIN AVENUE
+				ANAHEIM  CA  92807
+				US
+
+00-10-C9   (hex)		MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.
+0010C9     (base 16)		MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.
+				
+				Kamakura-city, Kanagawa 247    
+				JP
+
+00-04-00   (hex)		LEXMARK INTERNATIONAL, INC.
+000400     (base 16)		LEXMARK INTERNATIONAL, INC.
+				740 NEW CIRCLE ROAD
+				LEXINGTON  KY  40550
+				US
+
+00-10-C5   (hex)		PROTOCOL TECHNOLOGIES, INC.
+0010C5     (base 16)		PROTOCOL TECHNOLOGIES, INC.
+				4 FIRST STREET
+				BRIDGEWATER  MA  02324
+				US
+
+00-10-1A   (hex)		PictureTel Corp.
+00101A     (base 16)		PictureTel Corp.
+				100 MINUTEMAN ROAD, MS641
+				ANDOVER  MA  01810
+				US
+
+00-10-47   (hex)		ECHO ELETRIC CO. LTD.
+001047     (base 16)		ECHO ELETRIC CO. LTD.
+				NO.6-17-1-602 Higashi Hongou
+				Yokohama City    226
+				JP
+
+00-10-A5   (hex)		OXFORD INSTRUMENTS
+0010A5     (base 16)		OXFORD INSTRUMENTS
+				Halifax Road
+				Buckinghamshire    HP12 3SE
+				GB
+
+00-10-D7   (hex)		ARGOSY RESEARCH INC.
+0010D7     (base 16)		ARGOSY RESEARCH INC.
+				NO. 44, LANE 411, CHUNG HUA RD
+				    
+				TW
+
+00-10-2C   (hex)		Lasat Networks A/S
+00102C     (base 16)		Lasat Networks A/S
+				Skalhuse 13
+				SK-9240 Nibe    
+				DK
+
+00-10-FD   (hex)		COCOM A/S
+0010FD     (base 16)		COCOM A/S
+				TELETONVEJ 8
+				DK 2860 SOBORG    
+				DK
+
+00-90-19   (hex)		HERMES ELECTRONICS CO., LTD.
+009019     (base 16)		HERMES ELECTRONICS CO., LTD.
+				3-2-12 YUSHIMA, BUNKYO-KU
+				TOKYO, 113-0034    
+				JP
+
+00-90-D8   (hex)		WHITECROSS SYSTEMS
+0090D8     (base 16)		WHITECROSS SYSTEMS
+				3A WATERSIDE PARK, COOKHAM RD
+				BERKSHIRE RG12 1RB    
+				GB
+
+00-10-4E   (hex)		CEOLOGIC
+00104E     (base 16)		CEOLOGIC
+				ZA DE PISSALOOP
+				78192 TRAPPES    
+				FR
+
+00-10-C2   (hex)		WILLNET, INC.
+0010C2     (base 16)		WILLNET, INC.
+				JOWA-TAKANAWA  BLDG. 8F
+				TOKYO    
+				JP
+
+00-10-40   (hex)		INTERMEC CORPORATION
+001040     (base 16)		INTERMEC CORPORATION
+				6001 36TH AVE WEST
+				EVERETT  WA  98203-9280
+				US
+
+00-10-2E   (hex)		NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.
+00102E     (base 16)		NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.
+				PLOT NO. 2, COCHIN EXPORT PROCESSING  ZO
+				KAKKANAD, COCHIN 682 030    
+				IN
+
+00-10-B0   (hex)		MERIDIAN TECHNOLOGY CORP.
+0010B0     (base 16)		MERIDIAN TECHNOLOGY CORP.
+				11 MCBRIDE CORP. CENTER DR.
+				CHESTERFIELD  MD  63005
+				US
+
+00-10-21   (hex)		ENCANTO NETWORKS, INC.
+001021     (base 16)		ENCANTO NETWORKS, INC.
+				2953 BUNKER HILL LANE
+				SANTA CLARA  CA  95054
+				US
+
+00-10-64   (hex)		DNPG, LLC
+001064     (base 16)		DNPG, LLC
+				20 North Wentworth Avenue
+				Londonderry  NH  03053
+				US
+
+00-10-74   (hex)		ATEN INTERNATIONAL CO., LTD.
+001074     (base 16)		ATEN INTERNATIONAL CO., LTD.
+				12F, NO.101, SUNG CHIANG RD.
+				TAIPEI, 10428    
+				TW
+
+00-10-9E   (hex)		AWARE, INC.
+00109E     (base 16)		AWARE, INC.
+				ONE OAK PARK
+				BEDFORD  MA  01730
+				US
+
+00-10-05   (hex)		UEC COMMERCIAL
+001005     (base 16)		UEC COMMERCIAL
+				P.O. BOX 54,
+				4300 DURBAN    
+				ZA
+
+00-10-B8   (hex)		ISHIGAKI COMPUTER SYSTEM CO.
+0010B8     (base 16)		ISHIGAKI COMPUTER SYSTEM CO.
+				1-1-1, KYOBASHI,
+				Tokyo    
+				JP
+
+00-10-8B   (hex)		LASERANIMATION SOLLINGER GMBH
+00108B     (base 16)		LASERANIMATION SOLLINGER GMBH
+				CRELLESTR. 19/20
+				D 10827 BERLIN    
+				DE
+
+00-10-C7   (hex)		DATA TRANSMISSION NETWORK
+0010C7     (base 16)		DATA TRANSMISSION NETWORK
+				9110 W. DODGE RD. - STE.#200
+				OMAHA  NE  68114
+				US
+
+00-10-70   (hex)		CARADON TREND LTD.
+001070     (base 16)		CARADON TREND LTD.
+				P.O. BOX 34, HORSHAM
+				WEST SUSSEX, RH12 2YF  ENGLAND  
+				GB
+
+00-10-BA   (hex)		MARTINHO-DAVIS SYSTEMS, INC.
+0010BA     (base 16)		MARTINHO-DAVIS SYSTEMS, INC.
+				1260 OLD INNES ROAD
+				OTTAWA, ONTARIO K1B 3V3    
+				CA
+
+00-10-B4   (hex)		ATMOSPHERE NETWORKS
+0010B4     (base 16)		ATMOSPHERE NETWORKS
+				10460 BANDLEY DRIVE
+				CUPERTINO  CA  95014
+				US
+
+00-04-AC   (hex)		IBM Corp
+0004AC     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-10-67   (hex)		Ericsson
+001067     (base 16)		Ericsson
+				250 Holger Way
+				SAN JOSE  CA  95134
+				US
+
+00-E0-7D   (hex)		NETRONIX, INC.
+00E07D     (base 16)		NETRONIX, INC.
+				340 THOR PLACE
+				BREA  CA  92821
+				US
+
+00-E0-28   (hex)		APTIX CORPORATION
+00E028     (base 16)		APTIX CORPORATION
+				2880 N. FIRST STREET
+				SAN JOSE  CA  95134
+				US
+
+00-E0-8C   (hex)		NEOPARADIGM LABS, INC.
+00E08C     (base 16)		NEOPARADIGM LABS, INC.
+				1735 N. FIRST ST.,  STE #108
+				SAN JOSE  CA  95112
+				US
+
+00-E0-A1   (hex)		HIMA PAUL HILDEBRANDT GmbH Co. KG
+00E0A1     (base 16)		HIMA PAUL HILDEBRANDT GmbH Co. KG
+				POSTBOX 1261
+				D-68777 BRUEHL NEAR MANNHEIM    
+				DE
+
+00-E0-88   (hex)		LTX-Credence CORPORATION
+00E088     (base 16)		LTX-Credence CORPORATION
+				825 UNIVERSITY AVENUE
+				NORWOOD  MA  02062-2643
+				US
+
+00-E0-5D   (hex)		UNITEC CO., LTD.
+00E05D     (base 16)		UNITEC CO., LTD.
+				KISOGAWA-CHO  ICHINOTORI 24
+				HAGURI-GUN AICHI 493    
+				JP
+
+00-E0-5E   (hex)		JAPAN AVIATION ELECTRONICS INDUSTRY, LTD.
+00E05E     (base 16)		JAPAN AVIATION ELECTRONICS INDUSTRY, LTD.
+				
+				TOKYO 196  JAPAN  
+				JP
+
+00-E0-9D   (hex)		SARNOFF CORPORATION
+00E09D     (base 16)		SARNOFF CORPORATION
+				CN 5300
+				PRINCETON  NJ  08543-5300
+				US
+
+00-E0-58   (hex)		PHASE ONE DENMARK A/S
+00E058     (base 16)		PHASE ONE DENMARK A/S
+				ROSKILDEVEJ 39
+				DK-2000 FREDERIKSBERG    
+				DK
+
+00-E0-76   (hex)		DEVELOPMENT CONCEPTS, INC.
+00E076     (base 16)		DEVELOPMENT CONCEPTS, INC.
+				1000 N. BROAD STREET
+				LANSDALE  PA  19446
+				US
+
+00-E0-F8   (hex)		DICNA CONTROL AB
+00E0F8     (base 16)		DICNA CONTROL AB
+				STENYXEGATAN 21 C
+				213 76 MALMOE    
+				SE
+
+00-E0-F2   (hex)		ARLOTTO COMNET, INC.
+00E0F2     (base 16)		ARLOTTO COMNET, INC.
+				7F-4,55,TUNG-KUANG ROAD
+				HSIN-CHU, 300    
+				TW
+
+00-E0-E1   (hex)		G2 NETWORKS, INC.
+00E0E1     (base 16)		G2 NETWORKS, INC.
+				142 SO. SANTA CRUZ AVE.
+				LOS GATOS  CA  95030-6702
+				US
+
+00-E0-3D   (hex)		FOCON ELECTRONIC SYSTEMS A/S
+00E03D     (base 16)		FOCON ELECTRONIC SYSTEMS A/S
+				DAMVANG, PO BOX 269
+				DK-6400 SONDERBORG    
+				DK
+
+00-E0-46   (hex)		BENTLY NEVADA CORP.
+00E046     (base 16)		BENTLY NEVADA CORP.
+				PO BOX 157
+				MINDEN  NV  89423
+				US
+
+00-E0-7B   (hex)		BAY NETWORKS
+00E07B     (base 16)		BAY NETWORKS
+				125 NAGOG PARK
+				ACTON  MA  01720
+				US
+
+00-E0-1D   (hex)		WebTV NETWORKS, INC.
+00E01D     (base 16)		WebTV NETWORKS, INC.
+				305 LYTTON AVE.
+				PALO ALTO  CA  94301
+				US
+
+00-E0-CD   (hex)		SAAB SENSIS CORPORATION
+00E0CD     (base 16)		SAAB SENSIS CORPORATION
+				85 Collamer Crossings
+				East Syracuse  NY  13057
+				US
+
+00-E0-8D   (hex)		PRESSURE SYSTEMS, INC.
+00E08D     (base 16)		PRESSURE SYSTEMS, INC.
+				34 RESEARCH DRIVE
+				HAMPTON  VA  23666
+				US
+
+00-E0-19   (hex)		ING. GIORDANO ELETTRONICA
+00E019     (base 16)		ING. GIORDANO ELETTRONICA
+				VIA PIETRO COSSA  115/12
+				10146-TORINO    
+				IT
+
+00-E0-47   (hex)		InFocus Corporation
+00E047     (base 16)		InFocus Corporation
+				27500 SW Parkway Avenue
+				Wilsonville  OR  97070-8238
+				US
+
+00-E0-C3   (hex)		SAKAI SYSTEM DEVELOPMENT CORP.
+00E0C3     (base 16)		SAKAI SYSTEM DEVELOPMENT CORP.
+				PORTUS CENTER BLD., 4-45-1
+				OSAKA-FU, 590    
+				JP
+
+00-E0-92   (hex)		ADMTEK INCORPORATED
+00E092     (base 16)		ADMTEK INCORPORATED
+				1962 ZANKER ROAD
+				SAN JOSE  CA  95112
+				US
+
+00-E0-FF   (hex)		SECURITY DYNAMICS TECHNOLOGIES, Inc.
+00E0FF     (base 16)		SECURITY DYNAMICS TECHNOLOGIES, Inc.
+				20 CROSBY DRIVE
+				BEDFORD  MA  01730
+				US
+
+00-E0-AB   (hex)		DIMAT S.A.
+00E0AB     (base 16)		DIMAT S.A.
+				C/BISCAIA 383 3
+				08023  BARCELONA    
+				ES
+
+00-E0-30   (hex)		MELITA INTERNATIONAL CORP.
+00E030     (base 16)		MELITA INTERNATIONAL CORP.
+				5051 PEACHTREE CORNERS CIRCLE
+				NORCROSS  GA  30092
+				US
+
+00-E0-33   (hex)		E.E.P.D. GmbH
+00E033     (base 16)		E.E.P.D. GmbH
+				ROEMER-STRASSE 4
+				85229 MARKT INDERSDORF    
+				DE
+
+00-E0-A2   (hex)		MICROSLATE INC.
+00E0A2     (base 16)		MICROSLATE INC.
+				9625 IGNACE - STE. D
+				BROSSARD  QC J4Y 2P3    
+				CA
+
+00-E0-79   (hex)		A.T.N.R.
+00E079     (base 16)		A.T.N.R.
+				BP 966
+				91976 COURTABOEUF    
+				FR
+
+00-E0-75   (hex)		Verilink Corporation
+00E075     (base 16)		Verilink Corporation
+				127 Jetplex Circle
+				Madison  AL  35758
+				US
+
+00-60-39   (hex)		SanCom Technology, Inc.
+006039     (base 16)		SanCom Technology, Inc.
+				7719 WOOD HOLLOW DRIVE
+				AUSTIN  TX  78731
+				US
+
+00-60-49   (hex)		VINA TECHNOLOGIES
+006049     (base 16)		VINA TECHNOLOGIES
+				6 UNION SQUARE - STE F
+				UNION CITY  CA  94587
+				US
+
+00-60-8D   (hex)		UNIPULSE CORP.
+00608D     (base 16)		UNIPULSE CORP.
+				2-7, SENGENDAI-NISHI
+				SAITAMA 343    
+				JO
+
+00-E0-2E   (hex)		SPC ELECTRONICS CORPORATION
+00E02E     (base 16)		SPC ELECTRONICS CORPORATION
+				2-1-3 SHIBASAKI, CHOFU-SHI
+				TOKYO, 182    
+				JP
+
+00-E0-9A   (hex)		Positron Inc.
+00E09A     (base 16)		Positron Inc.
+				5101 Buchan Street
+				Montreal,  Québec  H4P 2R9
+				CA
+
+00-E0-3E   (hex)		ALFATECH, INC.
+00E03E     (base 16)		ALFATECH, INC.
+				SHIN-OSAKA EITO BLDG.
+				OSAKA    
+				JP
+
+00-60-99   (hex)		SBE, Inc.
+006099     (base 16)		SBE, Inc.
+				4000 Executive Parkway
+				San Ramon  CA  94583
+				US
+
+00-60-B3   (hex)		Z-COM, INC.
+0060B3     (base 16)		Z-COM, INC.
+				7F-2, NO.9, PROSPERITY 1ST RD.
+				HSINCHU    
+				TW
+
+00-60-02   (hex)		SCREEN SUBTITLING SYSTEMS, LTD
+006002     (base 16)		SCREEN SUBTITLING SYSTEMS, LTD
+				THE OLD RECTORY
+				CLAYDON  IPSWICH  IP6 OEQ  
+				GB
+
+00-60-89   (hex)		XATA
+006089     (base 16)		XATA
+				151 EAST CLIFF ROAD-STE.#10
+				BURNSVILLE  MN  55337
+				US
+
+00-60-21   (hex)		DSC CORPORATION
+006021     (base 16)		DSC CORPORATION
+				RECRUIT-SHINOHTSUKA BLDG.,
+				TOKYO 170    
+				JP
+
+00-60-B8   (hex)		CORELIS Inc.
+0060B8     (base 16)		CORELIS Inc.
+				12607 Hiddencreek Way
+				Cerritos  CA  90703
+				US
+
+00-E0-AA   (hex)		ELECTROSONIC LTD.
+00E0AA     (base 16)		ELECTROSONIC LTD.
+				HAWLEY MILL, HAWLEY RD.
+				DARTFORD, KENT DA2 7SY    
+				GB
+
+00-E0-10   (hex)		HESS SB-AUTOMATENBAU GmbH
+00E010     (base 16)		HESS SB-AUTOMATENBAU GmbH
+				HINDENBURGSTRASSE 27-29
+				D-71106 MAGSTADT    
+				DE
+
+00-E0-D2   (hex)		VERSANET COMMUNICATIONS, INC.
+00E0D2     (base 16)		VERSANET COMMUNICATIONS, INC.
+				628 N. DIAMOND BAR BLVD.
+				DIAMOND BAR  CA  91765
+				US
+
+00-60-CE   (hex)		ACCLAIM COMMUNICATIONS
+0060CE     (base 16)		ACCLAIM COMMUNICATIONS
+				5000 OLD IRONSIDES DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-60-36   (hex)		AIT Austrian Institute of Technology GmbH
+006036     (base 16)		AIT Austrian Institute of Technology GmbH
+				Donau-City-Straße 1
+				Vienna    1220
+				AT
+
+00-60-8E   (hex)		HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH
+00608E     (base 16)		HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH
+				AM GNEISENAUFLOT 8
+				 D-66538 NEUNHIRCHEN    
+				DE
+
+00-60-1A   (hex)		KEITHLEY INSTRUMENTS
+00601A     (base 16)		KEITHLEY INSTRUMENTS
+				30500 BAINBRIDGE RD.
+				SOLON  OH  44139
+				US
+
+00-60-6A   (hex)		MITSUBISHI WIRELESS COMMUNICATIONS. INC.
+00606A     (base 16)		MITSUBISHI WIRELESS COMMUNICATIONS. INC.
+				2001 CHERRY DRIVE
+				BRASELTON  GA  30517
+				US
+
+00-60-AD   (hex)		MegaChips Corporation
+0060AD     (base 16)		MegaChips Corporation
+				4-1-6,Miyahara
+				  Osaka  532-0003
+				JP
+
+00-60-55   (hex)		CORNELL UNIVERSITY
+006055     (base 16)		CORNELL UNIVERSITY
+				729 Rhodes Hall
+				ITHACA  NY  14850-4902
+				US
+
+00-60-6D   (hex)		DIGITAL EQUIPMENT CORP.
+00606D     (base 16)		DIGITAL EQUIPMENT CORP.
+				550 KING STREET
+				LITTLETON  MA  01460
+				US
+
+00-60-B9   (hex)		NEC Platforms, Ltd
+0060B9     (base 16)		NEC Platforms, Ltd
+				2-6-1,Kitamikata,Takatsu-ku
+				Kawasaki    213-8511
+				JP
+
+00-60-9C   (hex)		Perkin-Elmer Incorporated
+00609C     (base 16)		Perkin-Elmer Incorporated
+				710 Bridgeport Ave.
+				Shelton  CT  06484
+				US
+
+00-60-CF   (hex)		ALTEON NETWORKS, INC.
+0060CF     (base 16)		ALTEON NETWORKS, INC.
+				50 GREAT OAKS BLVD.
+				SAN JOSE  CA  95119
+				US
+
+00-60-75   (hex)		PENTEK, INC.
+006075     (base 16)		PENTEK, INC.
+				1 PARK WAY
+				UPPER SADDLE RIVER  NJ  07458
+				US
+
+00-60-B7   (hex)		CHANNELMATIC, INC.
+0060B7     (base 16)		CHANNELMATIC, INC.
+				1700 GILLESPIE WAY
+				EL CAJON  CA  92020-0901
+				US
+
+00-60-06   (hex)		SOTEC CO., LTD
+006006     (base 16)		SOTEC CO., LTD
+				YOKOHAMA BASHAMICHI BLDG.,
+				YOKOHAMA  231    
+				JP
+
+00-60-BA   (hex)		SAHARA NETWORKS, INC.
+0060BA     (base 16)		SAHARA NETWORKS, INC.
+				335 HIGHLAND AVE.
+				CHESHIRE  CT  06410
+				US
+
+00-60-98   (hex)		HT COMMUNICATIONS
+006098     (base 16)		HT COMMUNICATIONS
+				4480 SHOPPING LANE
+				SIMI VALLEY  CA  93063
+				US
+
+00-60-DE   (hex)		Kayser-Threde GmbH
+0060DE     (base 16)		Kayser-Threde GmbH
+				Wolfratshauser Str. 48
+				D-81379  Munich  
+				DE
+
+00-60-D0   (hex)		SNMP RESEARCH INCORPORATED
+0060D0     (base 16)		SNMP RESEARCH INCORPORATED
+				3001 KIMBERLIN HEIGHTS ROAD
+				KNOXVILLE  TN  37920-9716
+				US
+
+00-60-15   (hex)		NET2NET CORPORATION
+006015     (base 16)		NET2NET CORPORATION
+				131 COOLIDGE STREET
+				HUDSON  MA  01749
+				US
+
+00-60-9D   (hex)		PMI FOOD EQUIPMENT GROUP
+00609D     (base 16)		PMI FOOD EQUIPMENT GROUP
+				701 RIDGE AVENUE
+				TROY  OH  45374
+				US
+
+00-60-A2   (hex)		NIHON UNISYS LIMITED CO.
+0060A2     (base 16)		NIHON UNISYS LIMITED CO.
+				P.O. BOX 135
+				SHINONOME 1-10-9    
+				JP
+
+00-60-84   (hex)		DIGITAL VIDEO
+006084     (base 16)		DIGITAL VIDEO
+				4920 AVALON RIDGE PKWY
+				NORCROSS  GA  30092
+				US
+
+00-60-2D   (hex)		ALERTON TECHNOLOGIES, INC.
+00602D     (base 16)		ALERTON TECHNOLOGIES, INC.
+				6670 185TH AVE. N.E.
+				REDMOND  WA  98052
+				US
+
+00-60-F8   (hex)		Loran International Technologies Inc.
+0060F8     (base 16)		Loran International Technologies Inc.
+				955 GREEN VALLEY CRESCENT
+				OTTAWA, ONTARIO K2C 3V4    
+				CA
+
+00-60-78   (hex)		POWER MEASUREMENT LTD.
+006078     (base 16)		POWER MEASUREMENT LTD.
+				2195 KEATING CROSS ROAD
+				SAANICHTON, B.C. V8M 2A5    
+				CA
+
+00-60-E8   (hex)		HITACHI COMPUTER PRODUCTS (AMERICA), INC.
+0060E8     (base 16)		HITACHI COMPUTER PRODUCTS (AMERICA), INC.
+				3101 TASMAN DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-60-F6   (hex)		NEXTEST COMMUNICATIONS PRODUCTS, INC.
+0060F6     (base 16)		NEXTEST COMMUNICATIONS PRODUCTS, INC.
+				TWO MID AMERICA PLAZA, STE.500
+				OAKBROOK TERRACE  IL  60181
+				US
+
+00-60-72   (hex)		VXL INSTRUMENTS, LIMITED
+006072     (base 16)		VXL INSTRUMENTS, LIMITED
+				PLOT NO. 17, KONAPPANA AGRAHARA
+				BANGALORE -  561 229    
+				IN
+
+00-60-51   (hex)		QUALITY SEMICONDUCTOR
+006051     (base 16)		QUALITY SEMICONDUCTOR
+				851 MARTIN AVENUE
+				SANTA CLARA  CA  95050
+				US
+
+00-60-92   (hex)		MICRO/SYS, INC.
+006092     (base 16)		MICRO/SYS, INC.
+				3447 OCEAN VIEW BLVD.
+				GLENDALE  CA  91208
+				US
+
+00-60-9E   (hex)		ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS
+00609E     (base 16)		ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS
+				1250 EYE STREET NW - STE #200
+				WASHINGTON  DC  20005
+				US
+
+00-60-10   (hex)		NETWORK MACHINES, INC.
+006010     (base 16)		NETWORK MACHINES, INC.
+				255 OLD NEW BRUNSWICK RD., # N320
+				PISCATAWAY  NJ  08854
+				US
+
+00-60-44   (hex)		LITTON/POLY-SCIENTIFIC
+006044     (base 16)		LITTON/POLY-SCIENTIFIC
+				2200 SOUTH MAIN STREET
+				BLACKSBURG  VA  24060
+				US
+
+00-60-04   (hex)		COMPUTADORES MODULARES SA
+006004     (base 16)		COMPUTADORES MODULARES SA
+				AVDA MONTESIERRA S/N
+				41020-SEVILLA    
+				ES
+
+00-60-E2   (hex)		QUEST ENGINEERING & DEVELOPMENT
+0060E2     (base 16)		QUEST ENGINEERING & DEVELOPMENT
+				1345 EAST ROCK WREN ROAD
+				PHOENIX  AZ  85048
+				US
+
+00-60-B4   (hex)		GLENAYRE R&D INC.
+0060B4     (base 16)		GLENAYRE R&D INC.
+				1570 KOOTENAY STREET
+				VANCOUVER, BC V5K 5B8    
+				CA
+
+00-A0-1D   (hex)		Red Lion Controls, LP
+00A01D     (base 16)		Red Lion Controls, LP
+				20 Willow Springs Circle
+				York  NY  17402
+				US
+
+00-A0-A6   (hex)		M.I. SYSTEMS, K.K.
+00A0A6     (base 16)		M.I. SYSTEMS, K.K.
+				2-7-12-308 Satsukigaoka
+				Ikeda-Shi  Osaka  563-0029
+				JP
+
+00-A0-51   (hex)		ANGIA COMMUNICATIONS. INC.
+00A051     (base 16)		ANGIA COMMUNICATIONS. INC.
+				441 EAST BAY BLVD.
+				PROVO  UTAH  84606
+				US
+
+00-A0-13   (hex)		TELTREND LTD.
+00A013     (base 16)		TELTREND LTD.
+				RINGWAY HOUSE, BELL ROAD
+				BASINGSTOKE HAMPSHIRE RG24 8F    
+				GB
+
+00-A0-B9   (hex)		EAGLE TECHNOLOGY, INC.
+00A0B9     (base 16)		EAGLE TECHNOLOGY, INC.
+				6800 ORANGETHORPE AVE.UNIT
+				BUENA PARK  CA  90620
+				US
+
+00-A0-19   (hex)		NEBULA CONSULTANTS, INC.
+00A019     (base 16)		NEBULA CONSULTANTS, INC.
+				1449 DUNCAN DRIVE
+				DELTA, BC V4L 1R5    
+				CA
+
+00-A0-ED   (hex)		Brooks Automation, Inc.
+00A0ED     (base 16)		Brooks Automation, Inc.
+				15 Elizabeth Drive
+				Chelmsford  MA  01824
+				US
+
+00-60-CA   (hex)		HARMONIC SYSTEMS INCORPORATED
+0060CA     (base 16)		HARMONIC SYSTEMS INCORPORATED
+				199 1ST STREET - STE #302
+				LOS ALTOS  CA  94022
+				US
+
+00-60-24   (hex)		GRADIENT TECHNOLOGIES, INC.
+006024     (base 16)		GRADIENT TECHNOLOGIES, INC.
+				2 MOUNT ROYAL AVENUE
+				MARLBORO  MA  01752
+				US
+
+00-60-AF   (hex)		PACIFIC MICRO DATA, INC.
+0060AF     (base 16)		PACIFIC MICRO DATA, INC.
+				16751 MILLIKAN AVENUE
+				IRVINE  CA  92714
+				US
+
+00-60-38   (hex)		Nortel Networks
+006038     (base 16)		Nortel Networks
+				Global Operations Engineering
+				Brampton  ON  l6T 5P6 Cana
+				CA
+
+00-60-4F   (hex)		Tattile SRL 
+00604F     (base 16)		Tattile SRL 
+				552-51 AJIGAURA
+				IBARAKI, 311-12    
+				JP
+
+00-A0-D0   (hex)		TEN X TECHNOLOGY, INC.
+00A0D0     (base 16)		TEN X TECHNOLOGY, INC.
+				13091 POND SPRINGS ROAD, Suite B-200
+				AUSTIN  TX  78729
+				US
+
+00-A0-BC   (hex)		VIASAT, INCORPORATED
+00A0BC     (base 16)		VIASAT, INCORPORATED
+				6155 El Camino Real
+				Carlsbad  Ca  92009
+				US
+
+00-A0-5B   (hex)		MARQUIP, INC.
+00A05B     (base 16)		MARQUIP, INC.
+				1245 E. WASHINGTON AVE.
+				MADISON  WI  53703
+				US
+
+00-A0-8C   (hex)		MultiMedia LANs, Inc.
+00A08C     (base 16)		MultiMedia LANs, Inc.
+				5600 EXECUTIVE CENTER DRIVE
+				CHARLOTTE  NC  28212
+				US
+
+00-A0-58   (hex)		GLORY, LTD.
+00A058     (base 16)		GLORY, LTD.
+				1-3-1 SHIMOTENO, HIMEJI
+				HYOGO PREF. 670    
+				JP
+
+00-A0-77   (hex)		FUJITSU NEXION, INC.
+00A077     (base 16)		FUJITSU NEXION, INC.
+				289 GREAT ROAD
+				ACTON  MA  01720-4739
+				US
+
+00-A0-A0   (hex)		COMPACT DATA, LTD.
+00A0A0     (base 16)		COMPACT DATA, LTD.
+				58 DITTON WALK
+				CAMBRIDGE CB5 8QE    
+				GB
+
+00-A0-38   (hex)		EMAIL ELECTRONICS
+00A038     (base 16)		EMAIL ELECTRONICS
+				P.O. BOX 154
+				MOOROOLBARK, 3138    
+				AU
+
+00-A0-65   (hex)		Symantec Corporation
+00A065     (base 16)		Symantec Corporation
+				20330 Stevens Creek Blvd.
+				Cupertino  CA  95014
+				US
+
+00-A0-A3   (hex)		RELIABLE POWER METERS
+00A0A3     (base 16)		RELIABLE POWER METERS
+				400 BLOSSOM HILL ROAD
+				LOS GATOS  CA  95032-4511
+				US
+
+00-A0-55   (hex)		Data Device Corporation
+00A055     (base 16)		Data Device Corporation
+				105 Wilbur Place
+				Bohemia  NY  11716
+				US
+
+00-A0-74   (hex)		PERCEPTION TECHNOLOGY
+00A074     (base 16)		PERCEPTION TECHNOLOGY
+				40 SHAWMUT ROAD
+				CANTON  MA  02021-1409
+				US
+
+00-A0-7F   (hex)		GSM-SYNTEL, LTD.
+00A07F     (base 16)		GSM-SYNTEL, LTD.
+				VICTORIA WORKS, QUEENS MILL RD
+				HD1  3PG  ENGLAND
+				GB
+
+00-A0-29   (hex)		COULTER CORPORATION
+00A029     (base 16)		COULTER CORPORATION
+				11800 S.W. 147TH AVE.
+				MIAMI  FL  33196
+				US
+
+00-A0-87   (hex)		Microsemi Corporation
+00A087     (base 16)		Microsemi Corporation
+				400 March Road
+				Ontario    K2K 3H4
+				CA
+
+00-A0-43   (hex)		AMERICAN TECHNOLOGY LABS, INC.
+00A043     (base 16)		AMERICAN TECHNOLOGY LABS, INC.
+				115 WEST 3RD STREET
+				STEVENSVILLE  MT  59870
+				US
+
+00-A0-42   (hex)		SPUR PRODUCTS CORP.
+00A042     (base 16)		SPUR PRODUCTS CORP.
+				9288 W. EMERALD STREET
+				BOISE  ID  83704
+				US
+
+00-A0-C1   (hex)		ORTIVUS MEDICAL AB
+00A0C1     (base 16)		ORTIVUS MEDICAL AB
+				BOX 513
+				    
+				SE
+
+00-A0-4F   (hex)		AMERITEC CORP.
+00A04F     (base 16)		AMERITEC CORP.
+				760 ARROW GRAND CIRCLE
+				COVINA  CA  91722
+				US
+
+00-A0-CF   (hex)		SOTAS, INC.
+00A0CF     (base 16)		SOTAS, INC.
+				2 RESEARCH PLACE, STE.
+				ROCKVILLE  MD  20850
+				US
+
+00-A0-72   (hex)		OVATION SYSTEMS LTD.
+00A072     (base 16)		OVATION SYSTEMS LTD.
+				GREAT HASELEY TRAD. EST.
+				  ENGLAND  
+				GB
+
+00-A0-82   (hex)		NKT ELEKTRONIK A/S
+00A082     (base 16)		NKT ELEKTRONIK A/S
+				NKT ALLE 85
+				    
+				DK
+
+00-A0-F0   (hex)		TORONTO MICROELECTRONICS INC.
+00A0F0     (base 16)		TORONTO MICROELECTRONICS INC.
+				5149 BRADCO BOULEVARD
+				    L4W 2A6
+				CA
+
+00-A0-D7   (hex)		KASTEN CHASE APPLIED RESEARCH
+00A0D7     (base 16)		KASTEN CHASE APPLIED RESEARCH
+				5100 ORBITOR DRIVE
+				    L4W 4Z4
+				CA
+
+00-A0-F1   (hex)		MTI
+00A0F1     (base 16)		MTI
+				4905 E. LA PALMA AVENUE
+				ANAHEIM  CA  92807
+				US
+
+00-A0-B3   (hex)		ZYKRONIX
+00A0B3     (base 16)		ZYKRONIX
+				7248 SOUTH TUCSON WAY
+				ENGLEWOOD  CO  80112
+				US
+
+00-A0-FF   (hex)		TELLABS OPERATIONS, INC.
+00A0FF     (base 16)		TELLABS OPERATIONS, INC.
+				1000 REMINGTON BLVD.
+				    60440
+				US
+
+00-A0-E5   (hex)		NHC COMMUNICATIONS
+00A0E5     (base 16)		NHC COMMUNICATIONS
+				5450 COTE DE LIESSE
+				MONTREAL,  QUEBEC  H4P 1A5
+				CA
+
+00-A0-36   (hex)		APPLIED NETWORK TECHNOLOGY
+00A036     (base 16)		APPLIED NETWORK TECHNOLOGY
+				319 LITTLETON ROAD--STE #101
+				WESTFORD  MA  01886-4133
+				US
+
+00-A0-D2   (hex)		ALLIED TELESIS INTERNATIONAL CORPORATION
+00A0D2     (base 16)		ALLIED TELESIS INTERNATIONAL CORPORATION
+				950 KIFER ROAD
+				SUNNYVALE  CA  94086
+				US
+
+00-A0-9B   (hex)		QPSX COMMUNICATIONS, LTD.
+00A09B     (base 16)		QPSX COMMUNICATIONS, LTD.
+				33 RICHARDSON STREET
+				Western    00000
+				AU
+
+00-A0-00   (hex)		CENTILLION NETWORKS, INC.
+00A000     (base 16)		CENTILLION NETWORKS, INC.
+				359 RAVENDALE DRIVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-A0-8A   (hex)		BROOKTROUT TECHNOLOGY, INC.
+00A08A     (base 16)		BROOKTROUT TECHNOLOGY, INC.
+				144 GOULD STREET- SUITE #200
+				NEEDHAM  MA  02194
+				US
+
+00-A0-7B   (hex)		DAWN COMPUTER INCORPORATION
+00A07B     (base 16)		DAWN COMPUTER INCORPORATION
+				6 KEXUEYUAN SOUTH ROAD
+				    
+				CN
+
+00-A0-5C   (hex)		INVENTORY CONVERSION, INC./
+00A05C     (base 16)		INVENTORY CONVERSION, INC./
+				NEKOTECH DIVISION
+				HAMPTON  NH  03842
+				US
+
+00-20-0F   (hex)		EBRAINS Inc
+00200F     (base 16)		EBRAINS Inc
+				Tachibana Bldg
+				Taito-ku  Tokyo  110-0003
+				JP
+
+00-A0-D3   (hex)		INSTEM COMPUTER SYSTEMS, LTD.
+00A0D3     (base 16)		INSTEM COMPUTER SYSTEMS, LTD.
+				WALTON INDUSTRIAL ESTATE
+				    
+				GB
+
+00-A0-B4   (hex)		TEXAS MICROSYSTEMS, INC.
+00A0B4     (base 16)		TEXAS MICROSYSTEMS, INC.
+				5959 CORPORATE DRIVE
+				HOUSTON  TX  77036
+				US
+
+00-A0-60   (hex)		ACER PERIPHERALS, INC.
+00A060     (base 16)		ACER PERIPHERALS, INC.
+				9F, 135 CHIAN KUO N. RD. SEC 2
+				    
+				TW
+
+00-A0-83   (hex)		ASIMMPHONY TURKEY
+00A083     (base 16)		ASIMMPHONY TURKEY
+				ELECTRONICS, LTD.
+				    V7C 4N1
+				CA
+
+00-A0-AA   (hex)		SPACELABS MEDICAL
+00A0AA     (base 16)		SPACELABS MEDICAL
+				5150 220 Ave SE
+				Issaquah  WA  98027
+				US
+
+00-A0-3B   (hex)		TOSHIN ELECTRIC CO., LTD.
+00A03B     (base 16)		TOSHIN ELECTRIC CO., LTD.
+				3FL. RIVER-STONE 3RD. BLG.234
+				  213  
+				JP
+
+00-A0-F3   (hex)		STAUBLI
+00A0F3     (base 16)		STAUBLI
+				183 RUE DES USINES
+				    
+				FR
+
+00-20-DF   (hex)		KYOSAN ELECTRIC MFG. CO., LTD.
+0020DF     (base 16)		KYOSAN ELECTRIC MFG. CO., LTD.
+				2-29, HEIAN-CHO, TSURUMI-KU
+				    
+				JP
+
+00-20-C7   (hex)		AKAI Professional M.I. Corp.
+0020C7     (base 16)		AKAI Professional M.I. Corp.
+				1-3, Hiranuma 1-Chome,
+				  220-0023  
+				JP
+
+00-A0-04   (hex)		NETPOWER, INC.
+00A004     (base 16)		NETPOWER, INC.
+				545 OAKMEAD PARKWAY
+				SUNNYVALE  CA  94086
+				US
+
+00-20-29   (hex)		TELEPROCESSING PRODUCTS, INC.
+002029     (base 16)		TELEPROCESSING PRODUCTS, INC.
+				4565 E. INDUSTRIAL STREET
+				SIMI VALLEY  CA  93063
+				US
+
+00-20-69   (hex)		ISDN SYSTEMS CORPORATION
+002069     (base 16)		ISDN SYSTEMS CORPORATION
+				8320 OLD COURTHOUSE RD.
+				VIENNA  VA  22182
+				US
+
+00-20-8B   (hex)		LAPIS TECHNOLOGIES, INC.
+00208B     (base 16)		LAPIS TECHNOLOGIES, INC.
+				1100 MARINA VILLAGE PKWY
+				ALAMEDA  CA  94501
+				US
+
+00-20-2B   (hex)		ADVANCED TELECOMMUNICATIONS MODULES, LTD.
+00202B     (base 16)		ADVANCED TELECOMMUNICATIONS MODULES, LTD.
+				
+				Cambridge CB3 OBL    
+				GB
+
+00-20-6B   (hex)		KONICA MINOLTA HOLDINGS, INC.
+00206B     (base 16)		KONICA MINOLTA HOLDINGS, INC.
+				1-6-1, Marunouchi,
+				Tokyo    100-0005
+				JP
+
+00-20-04   (hex)		YAMATAKE-HONEYWELL CO., LTD.
+002004     (base 16)		YAMATAKE-HONEYWELL CO., LTD.
+				54 SUZUKAWA, ISEHARA
+				KANAGAWA 259-11    
+				JP
+
+00-20-15   (hex)		ACTIS COMPUTER SA
+002015     (base 16)		ACTIS COMPUTER SA
+				16 CHEMIN DES AULX
+				    
+				CH
+
+00-20-99   (hex)		BON ELECTRIC CO., LTD.
+002099     (base 16)		BON ELECTRIC CO., LTD.
+				4-4 28, MIZUDO-CHO
+				HYOGO  HYOGO  
+				JP
+
+00-20-F9   (hex)		PARALINK NETWORKS, INC.
+0020F9     (base 16)		PARALINK NETWORKS, INC.
+				4F, NO. 27, SEC.3, PATEH RD.
+				TAIPEI    
+				TW
+
+00-20-92   (hex)		CHESS ENGINEERING B.V.
+002092     (base 16)		CHESS ENGINEERING B.V.
+				NIEUWE GRACHT 74
+				    
+				NL
+
+00-20-43   (hex)		NEURON COMPANY LIMITED
+002043     (base 16)		NEURON COMPANY LIMITED
+				15 KWAI YI ROAD,  BLOCK 2,
+				KWAI CHUNG,   N.T.    
+				HK
+
+00-20-71   (hex)		IBR GMBH
+002071     (base 16)		IBR GMBH
+				KOHLERSTR. 45
+				D-46286 DORSTEN    
+				DE
+
+00-20-7C   (hex)		AUTEC GMBH
+00207C     (base 16)		AUTEC GMBH
+				BAHNHOFSTR. 57
+				55234 FRAMERSHEIM    
+				DE
+
+00-20-57   (hex)		TITZE DATENTECHNIK GmbH
+002057     (base 16)		TITZE DATENTECHNIK GmbH
+				DIESELSTRASSE 10
+				DS-71272 RENNINGEN-2    
+				DE
+
+00-20-E5   (hex)		APEX DATA, INC.
+0020E5     (base 16)		APEX DATA, INC.
+				6624 OWENS DRIVE
+				PLEASANTON  CA  94588
+				US
+
+00-20-87   (hex)		MEMOTEC, INC.
+002087     (base 16)		MEMOTEC, INC.
+				7755 Henri-Bourassa
+				MONTREAL, QUEBEC     H4S 1P7
+				CA
+
+00-20-BC   (hex)		Long Reach Networks Pty Ltd
+0020BC     (base 16)		Long Reach Networks Pty Ltd
+				Unit 3, 118-122 Bowden St
+				MEADOWBANK NSW 2114    
+				AU
+
+00-C0-C0   (hex)		SHORE MICROSYSTEMS, INC.
+00C0C0     (base 16)		SHORE MICROSYSTEMS, INC.
+				23 POCAHONTAS AVENUE
+				OCEANPORT  NJ  07757
+				US
+
+00-C0-0C   (hex)		RELIA TECHNOLGIES
+00C00C     (base 16)		RELIA TECHNOLGIES
+				1F., NO. 24, INDUSTRY E. 9TH
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-C0-73   (hex)		XEDIA CORPORATION
+00C073     (base 16)		XEDIA CORPORATION
+				301 BALLARDVALE STREET
+				WILMINGTON  MA  01887
+				US
+
+00-C0-D4   (hex)		AXON NETWORKS, INC.
+00C0D4     (base 16)		AXON NETWORKS, INC.
+				104 SPRUCE STREET
+				WATERTOWN  MA  02172
+				US
+
+00-C0-CD   (hex)		COMELTA, S.A.
+00C0CD     (base 16)		COMELTA, S.A.
+				AVDA. PARC TECNOLOGIC, 4
+				    
+				ES
+
+00-20-ED   (hex)		GIGA-BYTE TECHNOLOGY CO., LTD.
+0020ED     (base 16)		GIGA-BYTE TECHNOLOGY CO., LTD.
+				365 CLOVERLEAF
+				BALDWIN PARK  CA  91706
+				US
+
+00-20-85   (hex)		Eaton Corporation
+002085     (base 16)		Eaton Corporation
+				8380 Capital Blvd.
+				RALEIGH  NC  27616
+				US
+
+00-20-CD   (hex)		HYBRID NETWORKS, INC.
+0020CD     (base 16)		HYBRID NETWORKS, INC.
+				10201 BUBB ROAD
+				CUPERTINO  CA  95014-4167
+				US
+
+00-20-2E   (hex)		DAYSTAR DIGITAL
+00202E     (base 16)		DAYSTAR DIGITAL
+				5556 ATLANTA HIGHWAY
+				FLOWERY BRANCH  GA  30542
+				US
+
+00-20-B3   (hex)		Tattile SRL 
+0020B3     (base 16)		Tattile SRL 
+				3 APOLLO PLACE
+				    
+				AU
+
+00-20-EE   (hex)		GTECH CORPORATION
+0020EE     (base 16)		GTECH CORPORATION
+				55 TECHNOLOGY WAY
+				WEST GREENWICH  RI  02817
+				US
+
+00-20-4C   (hex)		MITRON COMPUTER PTE LTD.
+00204C     (base 16)		MITRON COMPUTER PTE LTD.
+				1020 HOUGANG AVENUE 1 #03-3504
+				  SINGAPORE  1953
+				SG
+
+00-20-17   (hex)		ORBOTECH
+002017     (base 16)		ORBOTECH
+				INDUSTRIAL ZONE
+				    
+				IL
+
+00-20-93   (hex)		LANDINGS TECHNOLOGY CORP.
+002093     (base 16)		LANDINGS TECHNOLOGY CORP.
+				163 WATER STREET
+				EXETER  NH  03833
+				US
+
+00-20-63   (hex)		WIPRO INFOTECH LTD.
+002063     (base 16)		WIPRO INFOTECH LTD.
+				UNITS 47-48, SDF BLOCK VII
+				    
+				
+
+00-20-16   (hex)		SHOWA ELECTRIC WIRE & CABLE CO
+002016     (base 16)		SHOWA ELECTRIC WIRE & CABLE CO
+				NO. 20-25, SEISHIN 8-CHOME
+				  229  
+				JP
+
+00-20-4D   (hex)		INOVIS GMBH
+00204D     (base 16)		INOVIS GMBH
+				HANNS-BRAUN STRASSE 50
+				    
+				DE
+
+00-20-5F   (hex)		GAMMADATA COMPUTER GMBH
+00205F     (base 16)		GAMMADATA COMPUTER GMBH
+				GUTENBERGSTR. 13
+				    
+				DE
+
+00-20-1F   (hex)		BEST POWER TECHNOLOGY, INC.
+00201F     (base 16)		BEST POWER TECHNOLOGY, INC.
+				P.O. BOX 280
+				NECEDAH  WI  54646
+				US
+
+00-20-B6   (hex)		AGILE NETWORKS, INC.
+0020B6     (base 16)		AGILE NETWORKS, INC.
+				200 BAKER AVENUE
+				CONCORD  MA  01742
+				US
+
+00-20-D1   (hex)		MICROCOMPUTER SYSTEMS (M) SDN.
+0020D1     (base 16)		MICROCOMPUTER SYSTEMS (M) SDN.
+				23-25, JALAN JEJAKA TUJUH
+				    
+				MY
+
+00-20-CE   (hex)		LOGICAL DESIGN GROUP, INC.
+0020CE     (base 16)		LOGICAL DESIGN GROUP, INC.
+				6301 CHAPEL HILL ROAD
+				RALEIGH  NC  27607
+				US
+
+00-20-14   (hex)		GLOBAL VIEW CO., LTD.
+002014     (base 16)		GLOBAL VIEW CO., LTD.
+				4F, NO. 23, LANE 306
+				  TAIWAN  R.O.C.
+				TW
+
+00-20-C2   (hex)		TEXAS MEMORY SYSTEMS, INC.
+0020C2     (base 16)		TEXAS MEMORY SYSTEMS, INC.
+				11200 WESTHEIMER RD-STE#1000
+				HOUSTON  TX  77042
+				US
+
+00-C0-F3   (hex)		NETWORK COMMUNICATIONS CORP.
+00C0F3     (base 16)		NETWORK COMMUNICATIONS CORP.
+				5501 GREEN VALLEY DRIVE
+				BLOOMINGTON  MN  55437-1085
+				US
+
+00-20-56   (hex)		NEOPRODUCTS
+002056     (base 16)		NEOPRODUCTS
+				25 CHAPMAN STREET
+				    
+				AU
+
+00-20-42   (hex)		DATAMETRICS CORP.
+002042     (base 16)		DATAMETRICS CORP.
+				8966 COMANCHE AVE.
+				CHATSWORTH  CA  91311
+				US
+
+00-20-78   (hex)		RUNTOP, INC.
+002078     (base 16)		RUNTOP, INC.
+				5/F, NO. 10, ALLEY 8, LANE 45
+				  TAIWAN  R.O.C.
+				TW
+
+00-20-06   (hex)		GARRETT COMMUNICATIONS, INC.
+002006     (base 16)		GARRETT COMMUNICATIONS, INC.
+				48531 WARMSPRINGS BLVD.
+				FREMONT  CA  94539
+				US
+
+00-20-24   (hex)		PACIFIC COMMUNICATION SCIENCES
+002024     (base 16)		PACIFIC COMMUNICATION SCIENCES
+				9645 SCRANTON ROAD
+				SAN DIEGO  CA  92121
+				US
+
+00-20-5D   (hex)		NANOMATIC OY
+00205D     (base 16)		NANOMATIC OY
+				PUISTOLAN RAITTI 4
+				    
+				FI
+
+00-C0-05   (hex)		LIVINGSTON ENTERPRISES, INC.
+00C005     (base 16)		LIVINGSTON ENTERPRISES, INC.
+				6920 KOLL CENTER PARKWAY #220
+				PLEASANTON  CA  94566
+				US
+
+00-C0-77   (hex)		DAEWOO TELECOM LTD.
+00C077     (base 16)		DAEWOO TELECOM LTD.
+				PRODUCTS DESIGN DEPT. 1
+				SEOUL  SEOUL  KOREA
+				KR
+
+00-C0-C8   (hex)		MICRO BYTE PTY. LTD.
+00C0C8     (base 16)		MICRO BYTE PTY. LTD.
+				197 SHERBOURNE RD.
+				  AUSTRALIA  3094
+				AU
+
+00-C0-69   (hex)		Axxcelera Broadband Wireless
+00C069     (base 16)		Axxcelera Broadband Wireless
+				111 Castilian Drive
+				Santa Barbara  CA  93117
+				US
+
+00-C0-67   (hex)		UNITED BARCODE INDUSTRIES
+00C067     (base 16)		UNITED BARCODE INDUSTRIES
+				12240 INDIAN CREEK COURT
+				BELTSVILLE  MD  20705
+				US
+
+00-C0-A3   (hex)		DUAL ENTERPRISES CORPORATION
+00C0A3     (base 16)		DUAL ENTERPRISES CORPORATION
+				9TH FLOOR 48 NAN-KANG ROAD
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-C0-18   (hex)		LANART CORPORATION
+00C018     (base 16)		LANART CORPORATION
+				145 ROSEMARY STREET
+				NEEDHAM  MA  02194
+				US
+
+00-9D-8E   (hex)		CARDIAC RECORDERS, INC.
+009D8E     (base 16)		CARDIAC RECORDERS, INC.
+				34 SCARBORO ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-BB-01   (hex)		OCTOTHORPE CORP.
+00BB01     (base 16)		OCTOTHORPE CORP.
+				285 WEST GREEN STREET
+				PASADENA  CA  91105
+				US
+
+00-C0-33   (hex)		TELEBIT COMMUNICATIONS APS
+00C033     (base 16)		TELEBIT COMMUNICATIONS APS
+				SKANDERBORGVEJ 234
+				    
+				DK
+
+00-C0-90   (hex)		PRAIM S.R.L.
+00C090     (base 16)		PRAIM S.R.L.
+				VIA MACCANI, 169
+				    ITALY
+				
+
+00-C0-DE   (hex)		ZCOMM, INC.
+00C0DE     (base 16)		ZCOMM, INC.
+				1050 C EAST DUANE AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-C0-13   (hex)		NETRIX
+00C013     (base 16)		NETRIX
+				13595 DULLES TECHNOLOGY DRIVE
+				HERNDON  VA  22071
+				US
+
+00-C0-6B   (hex)		OSI PLUS CORPORATION
+00C06B     (base 16)		OSI PLUS CORPORATION
+				2-1-23 NAKAMEGURO
+				    
+				JP
+
+00-C0-4C   (hex)		DEPARTMENT OF FOREIGN AFFAIRS
+00C04C     (base 16)		DEPARTMENT OF FOREIGN AFFAIRS
+				& TRADE
+				    
+				AU
+
+00-C0-7C   (hex)		HIGHTECH INFORMATION
+00C07C     (base 16)		HIGHTECH INFORMATION
+				SYSTEM LTD.
+				  HONG  KONG
+				HK
+
+00-C0-B8   (hex)		FRASER'S HILL LTD.
+00C0B8     (base 16)		FRASER'S HILL LTD.
+				27502 W. GILL ROAD
+				MORRISTOWN  AZ  85342
+				US
+
+00-C0-62   (hex)		IMPULSE TECHNOLOGY
+00C062     (base 16)		IMPULSE TECHNOLOGY
+				210 DAHLONEGA ST.#204
+				CUMMING  GA  30130
+				US
+
+00-C0-EC   (hex)		DAUPHIN TECHNOLOGY
+00C0EC     (base 16)		DAUPHIN TECHNOLOGY
+				450 EISENHOWER LANE NORTH
+				LOMBARD  IL  60148
+				US
+
+00-C0-86   (hex)		THE LYNK CORPORATION
+00C086     (base 16)		THE LYNK CORPORATION
+				101 QUEENS DRIVE
+				KING OF PRUSSIA  PA  19406
+				US
+
+00-C0-58   (hex)		DATAEXPERT CORP.
+00C058     (base 16)		DATAEXPERT CORP.
+				1156 SONOPRA COURTN-KANG RD.
+				SUNNYVALE  CA  94086
+				US
+
+00-C0-D0   (hex)		RATOC SYSTEM INC.
+00C0D0     (base 16)		RATOC SYSTEM INC.
+				ASAHI NAMBA BLDG.
+				  556  
+				JP
+
+00-C0-BF   (hex)		TECHNOLOGY CONCEPTS, LTD.
+00C0BF     (base 16)		TECHNOLOGY CONCEPTS, LTD.
+				GRANGE ESTATE
+				  UNITED  KINGDOM
+				GB
+
+00-C0-BA   (hex)		NETVANTAGE
+00C0BA     (base 16)		NETVANTAGE
+				201 CONTINENTAL BLVD.-STE.#201
+				EL SECUNDO  CA  90245
+				US
+
+00-C0-5E   (hex)		VARI-LITE, INC.
+00C05E     (base 16)		VARI-LITE, INC.
+				201 REGAL ROW
+				DALLAS  TX  75247
+				US
+
+00-C0-D5   (hex)		Werbeagentur Jürgen Siebert
+00C0D5     (base 16)		Werbeagentur Jürgen Siebert
+				Im Klostergarten 8
+				D-50321 Brühl    
+				DE
+
+00-C0-63   (hex)		MORNING STAR TECHNOLOGIES, INC
+00C063     (base 16)		MORNING STAR TECHNOLOGIES, INC
+				1760 ZOLLINGER ROAD
+				COLUMBUS  OH  43221
+				US
+
+00-C0-21   (hex)		NETEXPRESS
+00C021     (base 16)		NETEXPRESS
+				989 EAST HILLSDALE BLVD.
+				FOSTER CITY  CA  94404-2113
+				US
+
+00-C0-DB   (hex)		IPC CORPORATION (PTE) LTD.
+00C0DB     (base 16)		IPC CORPORATION (PTE) LTD.
+				122 EUNOS AVE., 7 #05-10
+				  SINGAPORE  1440
+				SG
+
+00-C0-E3   (hex)		OSITECH COMMUNICATIONS, INC.
+00C0E3     (base 16)		OSITECH COMMUNICATIONS, INC.
+				679 SOUTHGATE DRIVE
+				CANADA  N1G  4S2
+				CA
+
+00-C0-FE   (hex)		APTEC COMPUTER SYSTEMS, INC.
+00C0FE     (base 16)		APTEC COMPUTER SYSTEMS, INC.
+				P.O. BOX 6750
+				PORTLAND  OR  97228-6750
+				US
+
+00-C0-16   (hex)		ELECTRONIC THEATRE CONTROLS
+00C016     (base 16)		ELECTRONIC THEATRE CONTROLS
+				3030 LAURA LANE
+				MIDDLETON  WI  53562
+				US
+
+00-C0-BC   (hex)		TELECOM AUSTRALIA/CSSC
+00C0BC     (base 16)		TELECOM AUSTRALIA/CSSC
+				LOCKED BAG 8812
+				    
+				AU
+
+00-C0-C1   (hex)		QUAD/GRAPHICS, INC.
+00C0C1     (base 16)		QUAD/GRAPHICS, INC.
+				N63 W23075 HWY 74
+				SUSSEX  WI  53089
+				US
+
+00-C0-89   (hex)		TELINDUS DISTRIBUTION
+00C089     (base 16)		TELINDUS DISTRIBUTION
+				GELDENAAKSEBAAN 335
+				    
+				BE
+
+00-C0-B0   (hex)		GCC TECHNOLOGIES,INC.
+00C0B0     (base 16)		GCC TECHNOLOGIES,INC.
+				580 WINTER STREET
+				WALTHAM  MA  02154
+				US
+
+00-C0-0A   (hex)		MICRO CRAFT
+00C00A     (base 16)		MICRO CRAFT
+				2-4-3 NISHIFURUMATSU
+				    
+				JP
+
+00-C0-74   (hex)		TOYODA AUTOMATIC LOOM
+00C074     (base 16)		TOYODA AUTOMATIC LOOM
+				WORKS, LTD.
+				  448  
+				JP
+
+00-40-4E   (hex)		FLUENT, INC.
+00404E     (base 16)		FLUENT, INC.
+				594 WORCESTER ROAD-STE.#308
+				NATICK  MA  01760
+				US
+
+00-40-8D   (hex)		THE GOODYEAR TIRE & RUBBER CO.
+00408D     (base 16)		THE GOODYEAR TIRE & RUBBER CO.
+				1144 EAST MARKET STREET
+				AKRON  OH  44316
+				US
+
+00-40-1B   (hex)		PRINTER SYSTEMS CORP.
+00401B     (base 16)		PRINTER SYSTEMS CORP.
+				207 PERRY PARKWAY
+				GAITHERSBURG  MD  20877-2142
+				US
+
+00-40-A3   (hex)		MICROUNITY SYSTEMS ENGINEERING
+0040A3     (base 16)		MICROUNITY SYSTEMS ENGINEERING
+				255 CASPIAN DRIVE
+				SUNNYVALE  CA  94089-1015
+				US
+
+00-40-B3   (hex)		ParTech Inc.
+0040B3     (base 16)		ParTech Inc.
+				8383 Seneca Turnpike
+				NEW HARTFORD  NY  13413
+				US
+
+00-40-1D   (hex)		INVISIBLE SOFTWARE, INC.
+00401D     (base 16)		INVISIBLE SOFTWARE, INC.
+				1142 CHESS DRIVE
+				FOSTER CITY  CA  94404
+				US
+
+00-C0-CA   (hex)		ALFA, INC.
+00C0CA     (base 16)		ALFA, INC.
+				11-1, INDUSTRY EAST ROAD IV
+				    TAIWAN
+				TW
+
+00-C0-6C   (hex)		SVEC COMPUTER CORP.
+00C06C     (base 16)		SVEC COMPUTER CORP.
+				3F, 531-1 CHUNG CHENG RD.
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-40-FF   (hex)		TELEBIT CORPORATION
+0040FF     (base 16)		TELEBIT CORPORATION
+				1315 CHESAPEAKE TERRACE
+				SUNNYVALE  CA  94089-1100
+				US
+
+00-40-1F   (hex)		COLORGRAPH LTD
+00401F     (base 16)		COLORGRAPH LTD
+				UNIT 2, MARS HOUSE
+				RG7 4QW -  UNITED  KINGDOM
+				GB
+
+00-40-AF   (hex)		DIGITAL PRODUCTS, INC.
+0040AF     (base 16)		DIGITAL PRODUCTS, INC.
+				411 WAVERLY OAKS ROAD
+				WALTHAM  MA  02154
+				US
+
+00-40-F7   (hex)		Polaroid Corporation
+0040F7     (base 16)		Polaroid Corporation
+				300 Baker Avenue
+				Concord  MA  01742
+				US
+
+00-40-37   (hex)		SEA-ILAN, INC.
+004037     (base 16)		SEA-ILAN, INC.
+				14602 NORTH US HIGHWAY #31
+				CARMEL  IN  46032
+				US
+
+00-C0-26   (hex)		LANS TECHNOLOGY CO., LTD.
+00C026     (base 16)		LANS TECHNOLOGY CO., LTD.
+				153 MINTSU RD. 2F, TAOYUAN,
+				TAIWAN  R.  O. C.
+				TW
+
+00-40-7E   (hex)		EVERGREEN SYSTEMS, INC.
+00407E     (base 16)		EVERGREEN SYSTEMS, INC.
+				120 LANDING COURT-SUITE
+				NOVATO  CA  94945
+				US
+
+00-40-F9   (hex)		COMBINET
+0040F9     (base 16)		COMBINET
+				333 W. EL CAMINO REAL-STE#310
+				SUNNYVALE  CA  94087
+				US
+
+00-C0-A7   (hex)		SEEL LTD.
+00C0A7     (base 16)		SEEL LTD.
+				3 YOUNG SQUARE
+				    SCOTLAND
+				GB
+
+00-C0-4A   (hex)		GROUP 2000 AG
+00C04A     (base 16)		GROUP 2000 AG
+				P.O. BOX 331
+				    
+				CH
+
+00-40-54   (hex)		CONNECTION MACHINES SERVICES
+004054     (base 16)		CONNECTION MACHINES SERVICES
+				12 HENSHAW STREET
+				WOBURN  MA  01801-466664
+				US
+
+00-40-04   (hex)		ICM CO. LTD.
+004004     (base 16)		ICM CO. LTD.
+				4-2-9 NIHONBASHI NANIWA-KU
+				    
+				JP
+
+00-40-18   (hex)		ADOBE SYSTEMS, INC.
+004018     (base 16)		ADOBE SYSTEMS, INC.
+				1585 CHARLESTON ROAD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-40-4A   (hex)		WEST AUSTRALIAN DEPARTMENT
+00404A     (base 16)		WEST AUSTRALIAN DEPARTMENT
+				OF EMPLOYMENT (DEVET)
+				  WESTERN  
+				AU
+
+00-40-3C   (hex)		FORKS, INC.
+00403C     (base 16)		FORKS, INC.
+				1-27-4 IRIYA,
+				  110  
+				JP
+
+00-40-42   (hex)		N.A.T. GMBH
+004042     (base 16)		N.A.T. GMBH
+				GOETHESTR. 2
+				    
+				DE
+
+00-40-F2   (hex)		JANICH & KLASS COMPUTERTECHNIK
+0040F2     (base 16)		JANICH & KLASS COMPUTERTECHNIK
+				ZUM ALTEN ZOLLHAUS 20
+				    
+				DE
+
+00-40-A2   (hex)		KINGSTAR TECHNOLOGY INC.
+0040A2     (base 16)		KINGSTAR TECHNOLOGY INC.
+				1-3F, NO. 185, SEC. 3,
+				TAIPEI  TAIWAN,  R.O.C.
+				TW
+
+00-40-DC   (hex)		TRITEC ELECTRONIC GMBH
+0040DC     (base 16)		TRITEC ELECTRONIC GMBH
+				ROBERT KOCH STR. 35
+				    
+				DE
+
+00-40-60   (hex)		COMENDEC LTD
+004060     (base 16)		COMENDEC LTD
+				ENTERPRISE WAY,
+				BIRMINGHAM  BIRMINGHAM  ENGLAND
+				GB
+
+00-40-56   (hex)		MCM JAPAN LTD.
+004056     (base 16)		MCM JAPAN LTD.
+				SYUUKAEN BLD. 2-11-1
+				    
+				JP
+
+00-40-30   (hex)		GK COMPUTER
+004030     (base 16)		GK COMPUTER
+				BASLER STRASSE 103
+				    
+				DE
+
+00-40-40   (hex)		RING ACCESS, INC.
+004040     (base 16)		RING ACCESS, INC.
+				957-R INDUSTRIAL ROAD
+				SAN CARLOS  CA  94070
+				US
+
+00-80-57   (hex)		ADSOFT, LTD.
+008057     (base 16)		ADSOFT, LTD.
+				Im Baumgarten 6
+				  MOHLIN  CH-4313 
+				CH
+
+00-80-BB   (hex)		HUGHES LAN SYSTEMS
+0080BB     (base 16)		HUGHES LAN SYSTEMS
+				1225 CHARLESTON ROAD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-40-3D   (hex)		Teradata Corporation
+00403D     (base 16)		Teradata Corporation
+				17095 Via Del Campo
+				San Diego  CA  92127
+				US
+
+00-40-D0   (hex)		MITAC INTERNATIONAL CORP.
+0040D0     (base 16)		MITAC INTERNATIONAL CORP.
+				8TH FL. 585 MING SHENG E. RD.
+				    
+				TW
+
+00-40-B6   (hex)		COMPUTERM  CORPORATION
+0040B6     (base 16)		COMPUTERM  CORPORATION
+				111 WOOD STREET
+				PITTSBURGH  PA  15222
+				US
+
+00-40-A6   (hex)		Cray, Inc.
+0040A6     (base 16)		Cray, Inc.
+				655F LONE OAK DRIVE
+				EAGAN  MN  55121
+				US
+
+00-40-3E   (hex)		RASTER OPS CORPORATION
+00403E     (base 16)		RASTER OPS CORPORATION
+				2500 WALSH AVENUE
+				SANTA CLARA  CA  95051
+				US
+
+00-40-46   (hex)		UDC RESEARCH LIMITED
+004046     (base 16)		UDC RESEARCH LIMITED
+				8A KING WAN INDUSTRIAL BLDG.
+				  HONG  KONG
+				HK
+
+00-C0-D7   (hex)		TAIWAN TRADING CENTER DBA
+00C0D7     (base 16)		TAIWAN TRADING CENTER DBA
+				TTC COMPUTER PRODUCTS
+				IRVING  TX  75038
+				US
+
+00-40-DA   (hex)		TELSPEC LTD
+0040DA     (base 16)		TELSPEC LTD
+				LANCASTER PARKER ROAD
+				    ENGLAND
+				GB
+
+00-40-C7   (hex)		RUBY TECH CORPORATION
+0040C7     (base 16)		RUBY TECH CORPORATION
+				6F-1, NO.3, LANE 250,
+				TAIPEI  TAIWAN,  R.O.C.
+				TW
+
+00-40-52   (hex)		STAR TECHNOLOGIES, INC.
+004052     (base 16)		STAR TECHNOLOGIES, INC.
+				515 SHAW ROAD
+				STERLING  VA  22075
+				US
+
+00-40-2E   (hex)		PRECISION SOFTWARE, INC.
+00402E     (base 16)		PRECISION SOFTWARE, INC.
+				600 S FEDERAL HWY STE
+				DEERFIELD BEACH  FL  33441-4193
+				US
+
+00-40-2B   (hex)		TRIGEM COMPUTER, INC.
+00402B     (base 16)		TRIGEM COMPUTER, INC.
+				KISUNG B/D 4F, 784-6
+				SEOUL  KOREA  135-080
+				KR
+
+00-40-1A   (hex)		FUJI ELECTRIC CO., LTD.
+00401A     (base 16)		FUJI ELECTRIC CO., LTD.
+				NEW YURAKUCHO BLDG
+				    
+				JP
+
+00-40-5F   (hex)		AFE COMPUTERS LTD.
+00405F     (base 16)		AFE COMPUTERS LTD.
+				62 ANCHORAGE ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-40-80   (hex)		ATHENIX CORPORATION
+004080     (base 16)		ATHENIX CORPORATION
+				675 ALMANOR AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-40-51   (hex)		Garbee and Garbee
+004051     (base 16)		Garbee and Garbee
+				4390 Darr Circle
+				Colorado Springs  CO  80908
+				US
+
+00-40-7A   (hex)		SOCIETE D'EXPLOITATION DU CNIT
+00407A     (base 16)		SOCIETE D'EXPLOITATION DU CNIT
+				2 GLACE DE LA DEFENSE 92053
+				    
+				FR
+
+00-40-31   (hex)		KOKUSAI ELECTRIC CO., LTD
+004031     (base 16)		KOKUSAI ELECTRIC CO., LTD
+				2-1 YASUUCHI
+				TOYAMA  939-23  
+				JP
+
+00-40-D3   (hex)		KIMPSION INTERNATIONAL CORP.
+0040D3     (base 16)		KIMPSION INTERNATIONAL CORP.
+				4701 PATRICK HENRY DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-40-EE   (hex)		OPTIMEM
+0040EE     (base 16)		OPTIMEM
+				297 N. BERNARDO AVENUE
+				MOUNTAIN VIEW  CA  94043-5205
+				US
+
+00-40-25   (hex)		MOLECULAR DYNAMICS
+004025     (base 16)		MOLECULAR DYNAMICS
+				880 EAST ARQUES AVENUE
+				SUNNYVALE  CA  94086-4536
+				US
+
+00-40-67   (hex)		OMNIBYTE CORPORATION
+004067     (base 16)		OMNIBYTE CORPORATION
+				245 WEST ROOSEVELT ROAD
+				WEST CHICAGO  IL  60185
+				US
+
+00-40-C3   (hex)		FISCHER AND PORTER CO.
+0040C3     (base 16)		FISCHER AND PORTER CO.
+				125 E. COUNTY LINE ROAD
+				WARMINSTER  PA  18974
+				US
+
+00-40-EC   (hex)		MIKASA SYSTEM ENGINEERING
+0040EC     (base 16)		MIKASA SYSTEM ENGINEERING
+				CO., LTD.
+				    
+				JP
+
+00-80-2F   (hex)		NATIONAL INSTRUMENTS CORP.
+00802F     (base 16)		NATIONAL INSTRUMENTS CORP.
+				11500 North Mopac Expressway
+				AUSTIN  TX  78759-3504
+				US
+
+00-80-54   (hex)		FRONTIER TECHNOLOGIES CORP.
+008054     (base 16)		FRONTIER TECHNOLOGIES CORP.
+				10201 NO. PT. WASHINGTON ROAD
+				MEQUON  WI  53092
+				US
+
+00-80-53   (hex)		INTELLICOM, INC.
+008053     (base 16)		INTELLICOM, INC.
+				20415 NORDHOFF STREET
+				CHATSWORTH  CA  91311
+				US
+
+00-80-26   (hex)		NETWORK PRODUCTS CORPORATION
+008026     (base 16)		NETWORK PRODUCTS CORPORATION
+				1440 WEST COLORADO BLVD.
+				PASADENA  CA  91105
+				US
+
+00-80-B0   (hex)		ADVANCED INFORMATION
+0080B0     (base 16)		ADVANCED INFORMATION
+				TECHNOLOGY, INC.
+				    
+				JP
+
+00-80-FA   (hex)		RWT GMBH
+0080FA     (base 16)		RWT GMBH
+				TALANGERSTR. 5-7
+				  WEST  
+				DE
+
+00-80-FD   (hex)		EXSCEED CORPRATION
+0080FD     (base 16)		EXSCEED CORPRATION
+				1-15-12, KITAKASE, SAIWAI-KU
+				    
+				JP
+
+00-80-FE   (hex)		AZURE TECHNOLOGIES, INC.
+0080FE     (base 16)		AZURE TECHNOLOGIES, INC.
+				63 SOUTH STREET
+				HOPKINTON  MA  01748-2212
+				US
+
+00-80-3C   (hex)		TVS ELECTRONICS LTD
+00803C     (base 16)		TVS ELECTRONICS LTD
+				44, MILLER ROAD
+				    
+				IN
+
+00-80-46   (hex)		Tattile SRL 
+008046     (base 16)		Tattile SRL 
+				DEPT. OF ELECTRICAL ENGIN'ING
+				    
+				CA
+
+00-40-02   (hex)		PERLE SYSTEMS LIMITED
+004002     (base 16)		PERLE SYSTEMS LIMITED
+				60 RENFREW DRIVE
+				CANADA  L3R  0E1
+				CA
+
+00-40-49   (hex)		Roche Diagnostics International Ltd.
+004049     (base 16)		Roche Diagnostics International Ltd.
+				FORRENSTRASSE
+				ROTKREUZ  ZG  6343
+				CH
+
+00-40-29   (hex)		Compex
+004029     (base 16)		Compex
+				
+				    
+				US
+
+00-40-9E   (hex)		CONCURRENT TECHNOLOGIES  LTD.
+00409E     (base 16)		CONCURRENT TECHNOLOGIES  LTD.
+				654 THE CRESCENT
+				  UNITED  KINGDOM
+				GB
+
+00-80-AD   (hex)		CNET TECHNOLOGY, INC.
+0080AD     (base 16)		CNET TECHNOLOGY, INC.
+				2199 ZANKER ROAD
+				SAN JOSE  CA  95131
+				US
+
+00-80-0E   (hex)		ATLANTIX CORPORATION
+00800E     (base 16)		ATLANTIX CORPORATION
+				5401 NW BROKENSOUND BLVD.
+				BOCA RATON  FL  33431
+				US
+
+00-80-AB   (hex)		DUKANE NETWORK INTEGRATION
+0080AB     (base 16)		DUKANE NETWORK INTEGRATION
+				2900 DUKANE DRIVE
+				ST. CHARLES  IL  60174
+				US
+
+00-80-F1   (hex)		OPUS SYSTEMS
+0080F1     (base 16)		OPUS SYSTEMS
+				3000 CORONADO DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-80-29   (hex)		EAGLE TECHNOLOGY, INC.
+008029     (base 16)		EAGLE TECHNOLOGY, INC.
+				6800 ORANGETHORPE AVE.UNIT
+				BUENA PARK  CA  90620
+				US
+
+00-80-72   (hex)		MICROPLEX SYSTEMS LTD.
+008072     (base 16)		MICROPLEX SYSTEMS LTD.
+				301-2071 Kingsway
+				Port Coquitlam  BC  V3C6N2
+				CA
+
+00-40-01   (hex)		Zero One Technology Co. Ltd.
+004001     (base 16)		Zero One Technology Co. Ltd.
+				10 Fl., No. 8, Lane 360, Sec 1, 
+				Neihu Dist.,  Taipei City  114
+				TW
+
+00-40-71   (hex)		ATM COMPUTER GMBH
+004071     (base 16)		ATM COMPUTER GMBH
+				BUCKLESTR. 1-5,POSTFACH 101043
+				    
+				DE
+
+00-80-11   (hex)		DIGITAL SYSTEMS INT'L. INC.
+008011     (base 16)		DIGITAL SYSTEMS INT'L. INC.
+				7659 178TH PL. NE
+				REDMOND  WA  98073-0908
+				US
+
+00-80-34   (hex)		SMT GOUPIL
+008034     (base 16)		SMT GOUPIL
+				3 RUE DES ARCHIVES
+				    
+				FR
+
+00-80-E4   (hex)		NORTHWEST DIGITAL SYSTEMS, INC
+0080E4     (base 16)		NORTHWEST DIGITAL SYSTEMS, INC
+				P.O. BOX 15288
+				SEATTLE  WA  98115
+				US
+
+00-80-EC   (hex)		SUPERCOMPUTING SOLUTIONS, INC.
+0080EC     (base 16)		SUPERCOMPUTING SOLUTIONS, INC.
+				6175 NANCY RIDGE BLVD.
+				SAN DIEGO  CA  92121
+				US
+
+00-80-2C   (hex)		THE SAGE GROUP PLC
+00802C     (base 16)		THE SAGE GROUP PLC
+				SAGE HOUSE, BENTON PARK ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-80-D6   (hex)		NUVOTECH, INC.
+0080D6     (base 16)		NUVOTECH, INC.
+				2015 BRIDGEWAY, SUITE 204
+				SAUSALITO  CA  94965
+				US
+
+00-80-0A   (hex)		JAPAN COMPUTER CORP.
+00800A     (base 16)		JAPAN COMPUTER CORP.
+				L. K. BLDG. HIGASHI KANDA
+				    
+				JP
+
+00-80-4B   (hex)		EAGLE TECHNOLOGIES PTY.LTD.
+00804B     (base 16)		EAGLE TECHNOLOGIES PTY.LTD.
+				70 KEYS ROAD
+				    
+				AU
+
+00-80-C8   (hex)		D-LINK SYSTEMS, INC.
+0080C8     (base 16)		D-LINK SYSTEMS, INC.
+				53 Discover Dr.
+				Irvine  CA  92618
+				US
+
+00-80-12   (hex)		INTEGRATED MEASUREMENT SYSTEMS
+008012     (base 16)		INTEGRATED MEASUREMENT SYSTEMS
+				9525 SW GEMINI DRIVE
+				BEAVERTON  OR  97005
+				US
+
+00-80-27   (hex)		ADAPTIVE SYSTEMS, INC.
+008027     (base 16)		ADAPTIVE SYSTEMS, INC.
+				1400 N.W. COMPTON DRIVE
+				BEAVERTON  OR  97006
+				US
+
+00-80-FC   (hex)		AVATAR CORPORATION
+0080FC     (base 16)		AVATAR CORPORATION
+				65 SOUTH STREET
+				HOPKINTON  MA  01748
+				US
+
+00-80-16   (hex)		WANDEL AND GOLTERMANN
+008016     (base 16)		WANDEL AND GOLTERMANN
+				1030 SWABIA COURT
+				  NC  27709
+				US
+
+00-80-A2   (hex)		CREATIVE ELECTRONIC SYSTEMS
+0080A2     (base 16)		CREATIVE ELECTRONIC SYSTEMS
+				Avenue Eugène-Lance 38bis
+				    
+				CH
+
+00-80-CC   (hex)		MICROWAVE BYPASS SYSTEMS
+0080CC     (base 16)		MICROWAVE BYPASS SYSTEMS
+				25 BRAINTREE HILL OFFICE PARK
+				BRAINTREE  MA  02184
+				US
+
+00-80-A5   (hex)		SPEED INTERNATIONAL
+0080A5     (base 16)		SPEED INTERNATIONAL
+				1320 ARBOLITA DR.
+				LA HABRA  CA  90631
+				US
+
+00-80-79   (hex)		MICROBUS DESIGNS LTD.
+008079     (base 16)		MICROBUS DESIGNS LTD.
+				TREADAWAY HILL
+				  UNITED  KINGDOM
+				GB
+
+00-00-79   (hex)		NETWORTH INCORPORATED
+000079     (base 16)		NETWORTH INCORPORATED
+				8404 ESTERS BOULEVARD
+				IRVING  TX  75063
+				US
+
+00-00-91   (hex)		ANRITSU CORPORATION
+000091     (base 16)		ANRITSU CORPORATION
+				1800, ONNA
+				    
+				JP
+
+00-00-75   (hex)		Nortel Networks
+000075     (base 16)		Nortel Networks
+				Global Operations Engineering
+				Brampton  ON  l6T 5P6 Cana
+				CA
+
+00-00-A5   (hex)		Tattile SRL 
+0000A5     (base 16)		Tattile SRL 
+				P.O. BOX 17220
+				BOULDER  CO  80308-7220
+				US
+
+00-00-36   (hex)		ATARI CORPORATION
+000036     (base 16)		ATARI CORPORATION
+				1196 BORREGAS AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-00-F8   (hex)		DIGITAL EQUIPMENT CORPORATION
+0000F8     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				LKG 1-2/A19
+				LITTLETON  MA  01460-1289
+				US
+
+00-80-5C   (hex)		AGILIS CORPORATION
+00805C     (base 16)		AGILIS CORPORATION
+				1101 SAN ANTONIO ROAD
+				Mountain View  CA  94043-1008
+				US
+
+00-80-C5   (hex)		NOVELLCO DE MEXICO
+0080C5     (base 16)		NOVELLCO DE MEXICO
+				CONSTITUYENTES NO. 907
+				11950 MEXICO  11950 MEXICO  D.F.
+				MX
+
+00-80-78   (hex)		PRACTICAL PERIPHERALS, INC.
+008078     (base 16)		PRACTICAL PERIPHERALS, INC.
+				375 CONEJO RIDGE AVENUE
+				THOUSAND OAKS  CA  91361
+				US
+
+00-80-F6   (hex)		SYNERGY MICROSYSTEMS
+0080F6     (base 16)		SYNERGY MICROSYSTEMS
+				9605 SCRANTON ROAD-STE #700
+				SAN DIEGO  CA  92121-1773
+				US
+
+00-80-7B   (hex)		ARTEL COMMUNICATIONS CORP.
+00807B     (base 16)		ARTEL COMMUNICATIONS CORP.
+				22 KANE INDUSTRIAL DRIVE
+				HUDSON  MA  01749
+				US
+
+00-80-14   (hex)		ESPRIT SYSTEMS
+008014     (base 16)		ESPRIT SYSTEMS
+				14F, NO. 1, SEC. 4
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-80-B7   (hex)		STELLAR COMPUTER
+0080B7     (base 16)		STELLAR COMPUTER
+				95 WELLS AVENUE
+				NEWTON  MA  02159
+				
+
+00-00-ED   (hex)		APRIL
+0000ED     (base 16)		APRIL
+				60, RUE DE CARTALE
+				    
+				FR
+
+00-00-A3   (hex)		NETWORK APPLICATION TECHNOLOGY
+0000A3     (base 16)		NETWORK APPLICATION TECHNOLOGY
+				1686 DELL AVENUE
+				CAMPBELL  CA  95008
+				US
+
+00-00-39   (hex)		TOSHIBA CORPORATION
+000039     (base 16)		TOSHIBA CORPORATION
+				COMPUTER DIVISION
+				TOKYO  105  
+				JP
+
+00-00-3C   (hex)		AUSPEX SYSTEMS INC.
+00003C     (base 16)		AUSPEX SYSTEMS INC.
+				5200 GREAT AMERICA PKWY
+				SANTA CLARA  CA  95054
+				US
+
+00-00-7E   (hex)		CLUSTRIX CORPORATION
+00007E     (base 16)		CLUSTRIX CORPORATION
+				960 HAMLIN COURT
+				SUNNYVALE  CA  94089
+				US
+
+00-00-CB   (hex)		COMPU-SHACK ELECTRONIC GMBH
+0000CB     (base 16)		COMPU-SHACK ELECTRONIC GMBH
+				RINGSTR. 56 - 58, 5450 NEUWIED
+				  WEST  
+				DE
+
+00-00-13   (hex)		CAMEX
+000013     (base 16)		CAMEX
+				75 KNEELAND STREET
+				BOSTON  MA  02111
+				US
+
+00-00-95   (hex)		SONY TEKTRONIX CORP.
+000095     (base 16)		SONY TEKTRONIX CORP.
+				P.O. BOX 5209 TOKYO INT'L
+				    
+				JP
+
+00-00-57   (hex)		SCITEX CORPORATION LTD.
+000057     (base 16)		SCITEX CORPORATION LTD.
+				P.O. BOX 330
+				    
+				IL
+
+00-00-D6   (hex)		PUNCH LINE HOLDING
+0000D6     (base 16)		PUNCH LINE HOLDING
+				P.O. BOX 391708
+				  SOUTH  AFRICA
+				ZA
+
+00-00-9E   (hex)		MARLI S.A.
+00009E     (base 16)		MARLI S.A.
+				CHEMIN TAVERNEY 3
+				    
+				CH
+
+00-00-42   (hex)		METIER MANAGEMENT SYSTEMS LTD.
+000042     (base 16)		METIER MANAGEMENT SYSTEMS LTD.
+				3 FOUNDATION STREET
+				    ENGLAND
+				GB
+
+00-00-7D   (hex)		Oracle Corporation
+00007D     (base 16)		Oracle Corporation
+				17 Network Circle
+				Menlo Park  CA  95025
+				US
+
+00-00-96   (hex)		MARCONI ELECTRONICS LTD.
+000096     (base 16)		MARCONI ELECTRONICS LTD.
+				BROWNS LANE, THE AIRPORT
+				  UNITED  KINGDOM
+				GB
+
+00-00-5E   (hex)		ICANN, IANA Department
+00005E     (base 16)		ICANN, IANA Department
+				INTERNET ASS'NED NOS.AUTHORITY
+				Los Angeles  CA  90094-2536
+				US
+
+00-00-38   (hex)		CSS LABS
+000038     (base 16)		CSS LABS
+				2134 SOUTH RIPCHEY
+				SANTA ANA  CA  92705
+				US
+
+00-00-44   (hex)		CASTELLE CORPORATION
+000044     (base 16)		CASTELLE CORPORATION
+				3255-3 SCOTT BOULEVARD
+				SANTA CLARA  CA  95054
+				US
+
+00-00-CE   (hex)		MEGADATA CORP.
+0000CE     (base 16)		MEGADATA CORP.
+				35 ORVILLE DRIVE
+				BOHEMIA  NY  11716
+				US
+
+00-00-7B   (hex)		RESEARCH MACHINES
+00007B     (base 16)		RESEARCH MACHINES
+				P.O. BOX 75
+				    ENGLAND
+				GB
+
+00-00-0F   (hex)		NEXT, INC.
+00000F     (base 16)		NEXT, INC.
+				3475 DEER CREEK ROAD
+				PALO ALTO  CA  94304
+				US
+
+00-00-BB   (hex)		TRI-DATA
+0000BB     (base 16)		TRI-DATA
+				505 EAST MIDDLEFIELD ROAD
+				MOUNTAIN VIEW  CA  94043-4082
+				US
+
+00-00-1A   (hex)		ADVANCED MICRO DEVICES
+00001A     (base 16)		ADVANCED MICRO DEVICES
+				P.O. BOX 3453
+				SUNNYVALE  CA  94088
+				US
+
+00-00-7F   (hex)		LINOTYPE-HELL AG
+00007F     (base 16)		LINOTYPE-HELL AG
+				POSTFACH 56 60
+				    
+				DE
+
+08-00-6F   (hex)		PHILIPS APELDOORN B.V.
+08006F     (base 16)		PHILIPS APELDOORN B.V.
+				P.O. BOX 105
+				  THE  
+				NL
+
+00-00-40   (hex)		APPLICON, INC.
+000040     (base 16)		APPLICON, INC.
+				4251 PLYMOUTH RD 48015
+				ANN ARBOR  MI  48106-0986
+				US
+
+00-00-5D   (hex)		CS TELECOM
+00005D     (base 16)		CS TELECOM
+				4-16 AVENUE DU GENERAL LECLERC
+				    
+				FR
+
+00-00-12   (hex)		INFORMATION TECHNOLOGY LIMITED
+000012     (base 16)		INFORMATION TECHNOLOGY LIMITED
+				MAYLANDS AVE. HEMEL HEMPSTEAD
+				  HERTS  ENGLAND
+				GB
+
+00-00-8A   (hex)		DATAHOUSE INFORMATION SYSTEMS
+00008A     (base 16)		DATAHOUSE INFORMATION SYSTEMS
+				DIRECTOR OF OPERATIONS
+				GU34  3QW  ENGLAND
+				GB
+
+00-00-32   (hex)		Marconi plc
+000032     (base 16)		Marconi plc
+				28 ELSTREE WAY, BOREHAMWOOD
+				  UNITED  KINGDOM
+				GB
+
+00-00-85   (hex)		CANON INC.
+000085     (base 16)		CANON INC.
+				DVTECH. DEV. CENTER DEPT.12
+				    
+				JP
+
+00-00-4A   (hex)		ADC CODENOLL TECHNOLOGY CORP.
+00004A     (base 16)		ADC CODENOLL TECHNOLOGY CORP.
+				200 CORPORATE BLVD. SO.
+				YONKERS  NY  10701
+				US
+
+08-00-8F   (hex)		CHIPCOM CORPORATION
+08008F     (base 16)		CHIPCOM CORPORATION
+				SOUTHBOROUGH OFFICE
+				SOUTHBOROUGH  MA  01772-1886
+				US
+
+00-00-6A   (hex)		COMPUTER CONSOLES INC.
+00006A     (base 16)		COMPUTER CONSOLES INC.
+				COMPUTER PRODUCTS DIVISION
+				IRVINE  CA  92718
+				US
+
+08-00-3E   (hex)		CODEX CORPORATION
+08003E     (base 16)		CODEX CORPORATION
+				50 EAST COMMERCE DRIVE
+				SCHAUMBURG  IL  60173
+				US
+
+08-00-40   (hex)		FERRANTI COMPUTER SYS. LIMITED
+080040     (base 16)		FERRANTI COMPUTER SYS. LIMITED
+				WYTHENSHAWE DIVISION
+				  UNITED  KINGDOM
+				GB
+
+08-00-3A   (hex)		ORCATECH INC.
+08003A     (base 16)		ORCATECH INC.
+				2680 QUEENSVIEW DRIVE
+				CANADA  K2B  8H6
+				CA
+
+08-00-3D   (hex)		CADNETIX CORPORATIONS
+08003D     (base 16)		CADNETIX CORPORATIONS
+				5797 CENTRAL AVENUE
+				BOULDER  CO  80301
+				US
+
+08-00-38   (hex)		BULL S.A.S.
+080038     (base 16)		BULL S.A.S.
+				rue Jean Jaures B.P.68
+				Les Clayes sous Bois    78430
+				FR
+
+08-00-73   (hex)		TECMAR INC.
+080073     (base 16)		TECMAR INC.
+				6225 COCHRAN ROAD
+				SOLON  OH  44139
+				US
+
+08-00-72   (hex)		XEROX CORP UNIV GRANT PROGRAM
+080072     (base 16)		XEROX CORP UNIV GRANT PROGRAM
+				ZEROX SYSTEMS INSTITUTE
+				WEBSTER  NY  14580
+				US
+
+08-00-6A   (hex)		AT&T
+08006A     (base 16)		AT&T
+				3300 E Renner Road
+				Richardson  TX  75082
+				US
+
+08-00-7A   (hex)		INDATA
+08007A     (base 16)		INDATA
+				GJERDRUMS VEI 12 C
+				    
+				NO
+
+08-00-79   (hex)		THE DROID WORKS
+080079     (base 16)		THE DROID WORKS
+				P.O. BOX CS 8180
+				SAN RAFAEL  CA  94912
+				US
+
+08-00-4D   (hex)		CORVUS SYSTEMS INC.
+08004D     (base 16)		CORVUS SYSTEMS INC.
+				2100 CORVUS DRIVE
+				SAN JOSE  CA  95124
+				US
+
+08-00-2F   (hex)		PRIME COMPUTER INC.
+08002F     (base 16)		PRIME COMPUTER INC.
+				100 CROSBY DRIVE
+				BEDFORD  MA  01730-1402
+				US
+
+08-00-2C   (hex)		BRITTON LEE INC.
+08002C     (base 16)		BRITTON LEE INC.
+				14600 WINCHESTER BLVD
+				LOS GATOS  CA  95030
+				US
+
+08-00-62   (hex)		General Dynamics
+080062     (base 16)		General Dynamics
+				
+				Fort Worth  TX  
+				US
+
+08-00-5C   (hex)		FOUR PHASE SYSTEMS
+08005C     (base 16)		FOUR PHASE SYSTEMS
+				2001 LOGIC DRIVE
+				SAN JOSE  CA  95124-3452
+				US
+
+08-00-5A   (hex)		IBM Corp
+08005A     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+08-00-52   (hex)		INSYSTEC
+080052     (base 16)		INSYSTEC
+				450 LAKEMONT AVENUE
+				WINTER PARK  FL  32792
+				US
+
+08-00-1E   (hex)		APOLLO COMPUTER INC.
+08001E     (base 16)		APOLLO COMPUTER INC.
+				15 ELIZABETH DRIVE
+				CHELMSFORD  MA  01824
+				US
+
+08-00-19   (hex)		GENERAL ELECTRIC CORPORATION
+080019     (base 16)		GENERAL ELECTRIC CORPORATION
+				1285 BOSTON AVENUE
+				BRIDGEPORT  CT  06602
+				US
+
+02-70-01   (hex)		RACAL-DATACOM
+027001     (base 16)		RACAL-DATACOM
+				LAN INTERNETWORKING DIVISION
+				BOXBOROUGH  MA  01719
+				US
+
+08-00-0E   (hex)		NCR CORPORATION
+08000E     (base 16)		NCR CORPORATION
+				WORLD HEADQUARTERS
+				DAYTON  OH  45479
+				US
+
+00-DD-09   (hex)		UNGERMANN-BASS INC.
+00DD09     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-00-02   (hex)		XEROX CORPORATION
+000002     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+00-00-03   (hex)		XEROX CORPORATION
+000003     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+00-00-06   (hex)		XEROX CORPORATION
+000006     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+08-00-01   (hex)		COMPUTERVISION CORPORATION
+080001     (base 16)		COMPUTERVISION CORPORATION
+				14 CROSBY DRIVE MS 5-1
+				BEDFORD  MA  01730
+				US
+
+08-00-05   (hex)		SYMBOLICS INC.
+080005     (base 16)		SYMBOLICS INC.
+				257 VASSAR STREET
+				CAMBRIDGE  MA  02139
+				US
+
+00-DD-07   (hex)		UNGERMANN-BASS INC.
+00DD07     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-00-08   (hex)		XEROX CORPORATION
+000008     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+00-00-3D   (hex)		UNISYS
+00003D     (base 16)		UNISYS
+				MS8-010
+				SAN JOSE  CA  95150-6685
+				US
+
+00-DD-0D   (hex)		UNGERMANN-BASS INC.
+00DD0D     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+08-00-64   (hex)		Sitasys AG
+080064     (base 16)		Sitasys AG
+				Freiburgstrasse 251
+				    
+				CH
+
+08-00-02   (hex)		BRIDGE COMMUNICATIONS INC.
+080002     (base 16)		BRIDGE COMMUNICATIONS INC.
+				2081 STIERLING ROAD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+08-00-1A   (hex)		TIARA/ 10NET
+08001A     (base 16)		TIARA/ 10NET
+				7777 WASHINGTON VILLAGE DRIVE
+				DAYTON  OHIO  45459-3957
+				US
+
+08-00-8B   (hex)		PYRAMID TECHNOLOGY CORP.
+08008B     (base 16)		PYRAMID TECHNOLOGY CORP.
+				1295 CHARLESTON ROAD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+08-00-12   (hex)		BELL ATLANTIC INTEGRATED SYST.
+080012     (base 16)		BELL ATLANTIC INTEGRATED SYST.
+				40 TALL PINE DRIVE
+				SUDBURY  MA  01776
+				US
+
+14-A1-BF   (hex)		ASSA ABLOY Korea Co., Ltd Unilock
+14A1BF     (base 16)		ASSA ABLOY Korea Co., Ltd Unilock
+				10f of JEI PLATZ Bldg., 186, Gasandigital 1-ro
+				Geumcheon-gu  Seoul  08502
+				KR
+
+94-83-C4   (hex)		GL Technologies (Hong Kong) Limited
+9483C4     (base 16)		GL Technologies (Hong Kong) Limited
+				103B Enterprise Place, 5W Science Park
+				NT    00000
+				HK
+
+08-00-30   (hex)		ROYAL MELBOURNE INST OF TECH
+080030     (base 16)		ROYAL MELBOURNE INST OF TECH
+				GPO BOX 2476V
+				MELBOURNE  VIC  3001
+				AU
+
+00-00-0B   (hex)		MATRIX CORPORATION
+00000B     (base 16)		MATRIX CORPORATION
+				1203 NEW HOPE ROAD
+				RALEIGH  NORTH CAROLINA   276
+				US
+
+00-00-9B   (hex)		INFORMATION INTERNATIONAL, INC
+00009B     (base 16)		INFORMATION INTERNATIONAL, INC
+				5F., THE 7TH INDUSTRY BLDG.
+				  JAPAN  150
+				JP
+
+9C-93-B0   (hex)		Megatronix (Beijing) Technology Co., Ltd.
+9C93B0     (base 16)		Megatronix (Beijing) Technology Co., Ltd.
+				Floor11,Building C, Rongxin Center Chungyuan Road 34#, chaoyang distric, Beijing, P.R.China
+				Beijing  Beijing  100012
+				CN
+
+64-AE-F1   (hex)		Qingdao Hisense Electronics Co.,Ltd.
+64AEF1     (base 16)		Qingdao Hisense Electronics Co.,Ltd.
+				Qianwangang Roard 218
+				Qingdao  Shandong  266510
+				CN
+
+08-00-16   (hex)		BARRISTER INFO SYS CORP
+080016     (base 16)		BARRISTER INFO SYS CORP
+				ONE TECHNOLOGY CENTER
+				BUFFALO  NY  14203
+				US
+
+44-CB-8B   (hex)		LG Innotek
+44CB8B     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+B4-05-5D   (hex)		Inspur Electronic Information Industry Co.,Ltd.
+B4055D     (base 16)		Inspur Electronic Information Industry Co.,Ltd.
+				No 224 Shanda Road
+				Jinan  Shandong  250013
+				CN
+
+98-48-27   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+984827     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+D4-F5-EF   (hex)		Hewlett Packard Enterprise
+D4F5EF     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+28-BD-89   (hex)		Google, Inc.
+28BD89     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+EC-1B-BD   (hex)		Silicon Laboratories
+EC1BBD     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin    78735
+				US
+
+D8-A3-15   (hex)		vivo Mobile Communication Co., Ltd.
+D8A315     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+80-64-7A   (hex)		Ola Sense Inc
+80647A     (base 16)		Ola Sense Inc
+				764 Avenue A
+				Redondo Beach    90277
+				US
+
+70-F8-2B   (hex)		DWnet Technologies(Suzhou) Corporation
+70F82B     (base 16)		DWnet Technologies(Suzhou) Corporation
+				No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China
+				Suzhou    21500
+				CN
+
+14-24-75   (hex)		4DReplay, Inc
+142475     (base 16)		4DReplay, Inc
+				1286 Folsom Street
+				San Francisco  CA  94103
+				US
+
+10-DC-B6   (hex)		IEEE Registration Authority
+10DCB6     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F8-9E-28   (hex)		Cisco Meraki
+F89E28     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+F8-C4-F3   (hex)		Shanghai Infinity Wireless Technologies Co.,Ltd.
+F8C4F3     (base 16)		Shanghai Infinity Wireless Technologies Co.,Ltd.
+				Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai
+				Shanghai  Shanghai  200082
+				CN
+
+D4-77-2B   (hex)		Nanjing Ztlink Network Technology Co.,Ltd
+D4772B     (base 16)		Nanjing Ztlink Network Technology Co.,Ltd
+				No.0 Mozhou East Road , Jiangning Economic & Technological Development Zone, Jiangning District
+				Nanjing  Jiangsu  211111
+				CN
+
+64-F9-C0   (hex)		ANALOG DEVICES
+64F9C0     (base 16)		ANALOG DEVICES
+				32990 ALVARADO NILES RD
+				UNION CITY  CA  94587
+				US
+
+18-D0-C5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+18D0C5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+34-ED-1B   (hex)		Cisco Systems, Inc
+34ED1B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-A5-11   (hex)		NETGEAR
+BCA511     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-0A-7B   (hex)		Cornelius Consult
+000A7B     (base 16)		Cornelius Consult
+				Im Vogelsang 21
+				Hattingen  NRW  45527
+				DE
+
+C4-44-7D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4447D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-E9-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+30E98E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-8B-34   (hex)		Shanghai Smart System Technology Co., Ltd
+748B34     (base 16)		Shanghai Smart System Technology Co., Ltd
+				Room 902C-1, 560 Shengxia Road, Zhangjiang Hi-Tech Park, Shanghai 201203, China
+				Shanghai  Shanghai  201210
+				CN
+
+AC-BD-70   (hex)		Huawei Device Co., Ltd.
+ACBD70     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-D2-62   (hex)		SZ DJI TECHNOLOGY CO.,LTD
+34D262     (base 16)		SZ DJI TECHNOLOGY CO.,LTD
+				6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd
+				shenzhen  guangdong  518057
+				CN
+
+08-12-A5   (hex)		Amazon Technologies Inc.
+0812A5     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+80-7F-F8   (hex)		Juniper Networks
+807FF8     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+44-03-77   (hex)		IEEE Registration Authority
+440377     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-24-87   (hex)		Transact Campus, Inc.
+002487     (base 16)		Transact Campus, Inc.
+				22601 North 19th Avenue
+				Phoenix  AZ  85027
+				US
+
+B4-E9-A3   (hex)		port industrial automation GmbH
+B4E9A3     (base 16)		port industrial automation GmbH
+				Regensburger Str. 7b
+				Halle (S.)    06132
+				DE
+
+38-E8-EE   (hex)		Nanjing Youkuo Electric Technology Co., Ltd
+38E8EE     (base 16)		Nanjing Youkuo Electric Technology Co., Ltd
+				100 Jiangjun Road,Jiangning
+				Nanjing  Jiangsu  211100
+				CN
+
+90-B8-E0   (hex)		SHENZHEN YANRAY TECHNOLOGY CO.,LTD
+90B8E0     (base 16)		SHENZHEN YANRAY TECHNOLOGY CO.,LTD
+				5A, 4th Building, Huafengzhenbao Industrial Park, Beihuan Road, Shiyan Street, Baoan District, 
+				Shenzhen  Guangdong  518000
+				CN
+
+9C-F5-31   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+9CF531     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+80-E4-55   (hex)		New H3C Technologies Co., Ltd
+80E455     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+2C-4C-C6   (hex)		Murata Manufacturing Co., Ltd.
+2C4CC6     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+7C-21-0D   (hex)		Cisco Systems, Inc
+7C210D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+4C-BC-72   (hex)		Primex Wireless
+4CBC72     (base 16)		Primex Wireless
+				965 Wells Street
+				Lake Geneva  WI  53147
+				US
+
+68-02-B8   (hex)		Compal Broadband Networks, Inc.
+6802B8     (base 16)		Compal Broadband Networks, Inc.
+				13F., No.1, Taiyuan 1st St.
+				Zhubei City  Hsinchu County  30265
+				TW
+
+34-63-D4   (hex)		BIONIX SUPPLYCHAIN TECHNOLOGIES SLU
+3463D4     (base 16)		BIONIX SUPPLYCHAIN TECHNOLOGIES SLU
+				Poligono Pocomaco Avenida Primera Parcela B3 Nave F
+				La Coruña  La Coruña  15190
+				ES
+
+08-F7-E9   (hex)		HRCP Research and Development Partnership
+08F7E9     (base 16)		HRCP Research and Development Partnership
+				1-24-2 Taito, Taito-ku
+				Tokyo    1100016
+				JP
+
+D4-9E-3B   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+D49E3B     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+DC-DC-E2   (hex)		Samsung Electronics Co.,Ltd
+DCDCE2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A0-AC-69   (hex)		Samsung Electronics Co.,Ltd
+A0AC69     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-89-FB   (hex)		Samsung Electronics Co.,Ltd
+1089FB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-4B-DD   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+DC4BDD     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+C0-B5-CD   (hex)		Huawei Device Co., Ltd.
+C0B5CD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+4C-50-77   (hex)		Huawei Device Co., Ltd.
+4C5077     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-2D-BB   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+502DBB     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+5C-3A-3D   (hex)		zte corporation
+5C3A3D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+30-FD-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+30FD65     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-A1-AE   (hex)		Apple, Inc.
+7CA1AE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-22-FB   (hex)		Apple, Inc.
+3C22FB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-EA-FC   (hex)		ELL-IoT Inc
+58EAFC     (base 16)		ELL-IoT Inc
+				32 Journey
+				Aliso Viejo  CA  92656
+				US
+
+90-13-DA   (hex)		Athom B.V.
+9013DA     (base 16)		Athom B.V.
+				Rigtersbleek-Zandvoort 10
+				Enschede    7521BE 
+				NL
+
+14-11-5D   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+14115D     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+E4-F3-27   (hex)		ATOL LLC
+E4F327     (base 16)		ATOL LLC
+				Bolshaya Novodmitrovskaya str., 14, build 4
+				Moscow    127015
+				RU
+
+68-19-AC   (hex)		Guangzhou Xianyou Intelligent Technogoly CO., LTD
+6819AC     (base 16)		Guangzhou Xianyou Intelligent Technogoly CO., LTD
+				No.32 Xixiu Road, Xiuquan Street,Huadu District
+				Guangzhou  Guangdong  510800
+				CN
+
+E8-2E-0C   (hex)		NETINT Technologies Inc.
+E82E0C     (base 16)		NETINT Technologies Inc.
+				#306, 3500 Gilmore Way
+				Burnaby  BC  V5G0B8
+				CA
+
+18-92-A4   (hex)		Ciena Corporation
+1892A4     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+10-08-2C   (hex)		Texas Instruments
+10082C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B0-73-5D   (hex)		Huawei Device Co., Ltd.
+B0735D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+5C-3A-45   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+5C3A45     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+A0-3C-31   (hex)		Shenzhen Belon Technology CO.,LTD
+A03C31     (base 16)		Shenzhen Belon Technology CO.,LTD
+				Tsinghua Information
+				Shenzhen  Guangdong  518052
+				CN
+
+A8-97-CD   (hex)		ARRIS Group, Inc.
+A897CD     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+40-4C-77   (hex)		ARRIS Group, Inc.
+404C77     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+2C-E3-10   (hex)		Stratacache
+2CE310     (base 16)		Stratacache
+				40 N Main St, Suite 2600
+				Dayton  OH  45423
+				US
+
+00-22-A0   (hex)		APTIV SERVICES US, LLC
+0022A0     (base 16)		APTIV SERVICES US, LLC
+				5725 Innovation Drive
+				Troy  MI  48098
+				US
+
+A4-30-7A   (hex)		Samsung Electronics Co.,Ltd
+A4307A     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+FC-8E-5B   (hex)		China Mobile Iot Limited company
+FC8E5B     (base 16)		China Mobile Iot Limited company
+				No. 8 Yangliu North Road, Yubei District, Chongqing, China
+				Chong Qing  Chong Qing  401120
+				CN
+
+14-2A-14   (hex)		ShenZhen Selenview Digital Technology Co.,Ltd
+142A14     (base 16)		ShenZhen Selenview Digital Technology Co.,Ltd
+				615,Block A,Huafeng internet Creative Park,107 Gonghe Industrial Road,Baoan District,Shenzhen,China
+				Shenzhen  Guangdong  518102
+				CN
+
+D8-7E-76   (hex)		ITEL MOBILE LIMITED
+D87E76     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+38-4B-5B   (hex)		ZTRON TECHNOLOGY LIMITED
+384B5B     (base 16)		ZTRON TECHNOLOGY LIMITED
+				12/F,JunZi Plaza, Qiaoxiang Road, Futian District
+				Shenzhen  Guangdong  518000
+				CN
+
+B8-61-42   (hex)		Beijing Tricolor Technology Co., Ltd
+B86142     (base 16)		Beijing Tricolor Technology Co., Ltd
+				Room 808, Building 1, Yard 39, Linfeng 2nd Road, Haidian
+				Beijing    102206
+				CN
+
+20-0A-0D   (hex)		IEEE Registration Authority
+200A0D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E4-7C-65   (hex)		Sunstar Communication Technology  Co., Ltd
+E47C65     (base 16)		Sunstar Communication Technology  Co., Ltd
+				4F,Building D1, Mould Industrial Park, No.199 of Xiqu Ave,West High-tech Zone
+				Chengdu  Sichuan  611731
+				CN
+
+9C-54-DA   (hex)		SkyBell Technologies Inc.
+9C54DA     (base 16)		SkyBell Technologies Inc.
+				1 Jenner 
+				Irvine  CA  92618
+				US
+
+4C-49-4F   (hex)		zte corporation
+4C494F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C4-74-1E   (hex)		zte corporation
+C4741E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-D0-78   (hex)		Eltex of Sweden AB
+00D078     (base 16)		Eltex of Sweden AB
+				Södra Portgatan 19
+				OSBY  Skåne  283 50
+				SE
+
+5C-78-F8   (hex)		Huawei Device Co., Ltd.
+5C78F8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B8-27-C5   (hex)		Huawei Device Co., Ltd.
+B827C5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-89-83   (hex)		Samsung Electronics Co.,Ltd
+DC8983     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-CB-99   (hex)		Samsung Electronics Co.,Ltd
+5CCB99     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-60-75   (hex)		Baidu Online Network Technology (Beijing) Co., Ltd
+D46075     (base 16)		Baidu Online Network Technology (Beijing) Co., Ltd
+				Baidu Campus, No.10 Shangdi 10th Street, Haidian District
+				 Beijing    100085
+				CN
+
+78-C5-F8   (hex)		Huawei Device Co., Ltd.
+78C5F8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D4-5D-64   (hex)		ASUSTek COMPUTER INC.
+D45D64     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+90-B1-44   (hex)		Samsung Electronics Co.,Ltd
+90B144     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+48-DD-0C   (hex)		eero inc.
+48DD0C     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+94-0C-98   (hex)		Apple, Inc.
+940C98     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-FB-E9   (hex)		Apple, Inc.
+E8FBE9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-EC-0D   (hex)		Apple, Inc.
+38EC0D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-27-8C   (hex)		BUFFALO.INC
+58278C     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+14-0A-C5   (hex)		Amazon Technologies Inc.
+140AC5     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+20-83-F8   (hex)		Advanced Digital Broadcast SA
+2083F8     (base 16)		Advanced Digital Broadcast SA
+				Route de Lausanne 319
+				Bellevue    CH-1293
+				SZ
+
+C8-C7-50   (hex)		Motorola Mobility LLC, a Lenovo Company
+C8C750     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+2C-DC-D7   (hex)		AzureWave Technology Inc.
+2CDCD7     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+34-E3-DA   (hex)		Hoval Aktiengesellschaft
+34E3DA     (base 16)		Hoval Aktiengesellschaft
+				Austrasse 70
+				Vaduz    9490
+				LI
+
+E0-BB-9E   (hex)		Seiko Epson Corporation
+E0BB9E     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+48-D2-4F   (hex)		Sagemcom Broadband SAS
+48D24F     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E4-AA-EC   (hex)		Tianjin Hualai Technology Co., Ltd
+E4AAEC     (base 16)		Tianjin Hualai Technology Co., Ltd
+				Overseas Chinese business building No. 10, Jinping Road, Nankai District, Tianjin
+				TIANJIN    300190
+				CN
+
+94-BE-46   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+94BE46     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+AC-F8-CC   (hex)		ARRIS Group, Inc.
+ACF8CC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+8C-5A-25   (hex)		ARRIS Group, Inc.
+8C5A25     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+48-3F-DA   (hex)		Espressif Inc.
+483FDA     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+6C-5D-3A   (hex)		Microsoft Corporation
+6C5D3A     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND    98052
+				US
+
+CC-D4-2E   (hex)		Arcadyan Corporation
+CCD42E     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+C8-53-E1   (hex)		Beijing Bytedance Network Technology Co., Ltd
+C853E1     (base 16)		Beijing Bytedance Network Technology Co., Ltd
+				No.1 Building, Zhonghang Square, West Road of the Northern 3rd Circuit, Haidian Distrct
+				Beijing  Beijing  100098
+				CN
+
+14-16-9D   (hex)		Cisco Systems, Inc
+14169D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+48-A2-E6   (hex)		Resideo
+48A2E6     (base 16)		Resideo
+				2 Corporate Center Dr.
+				Melville  NY  11747
+				US
+
+90-E2-FC   (hex)		IEEE Registration Authority
+90E2FC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F0-08-D1   (hex)		Espressif Inc.
+F008D1     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+58-94-B2   (hex)		BrainCo
+5894B2     (base 16)		BrainCo
+				????????????????1107?
+				???  ???  518000
+				CN
+
+B0-95-75   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+B09575     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+B4-B0-55   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B4B055     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-8C-16   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+048C16     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+98-DD-5B   (hex)		TAKUMI JAPAN LTD
+98DD5B     (base 16)		TAKUMI JAPAN LTD
+				3-9-3 Uchiyama building 7F Nishishinbashi
+				Minato-ku Tokyo  Tokyo  1050003
+				JP
+
+3C-5C-F1   (hex)		eero inc.
+3C5CF1     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+14-AE-85   (hex)		IEEE Registration Authority
+14AE85     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+90-74-9D   (hex)		IRay Technology Co., Ltd.
+90749D     (base 16)		IRay Technology Co., Ltd.
+				11th Guiyang St.,
+				Yantai  Shandong  264000
+				CN
+
+8C-3B-32   (hex)		Microfan B.V.
+8C3B32     (base 16)		Microfan B.V.
+				Industriestraat 23
+				Horst  Limburg  5961 PH
+				NL
+
+D0-D3-E0   (hex)		Aruba, a Hewlett Packard Enterprise Company
+D0D3E0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+64-5C-F3   (hex)		ParanTek Inc.
+645CF3     (base 16)		ParanTek Inc.
+				3F, 40-15 Gilju-Ro, 411 Beon-Gil
+				Wonmi-Gu, Bucheon City  Gyeonggi-Do  14488
+				KR
+
+B0-CC-FE   (hex)		Huawei Device Co., Ltd.
+B0CCFE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-0D-F9   (hex)		Huawei Device Co., Ltd.
+540DF9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-66-19   (hex)		Huawei Device Co., Ltd.
+006619     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+FC-39-64   (hex)		ITEL MOBILE LIMITED
+FC3964     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+14-47-2D   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+14472D     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+E4-90-FD   (hex)		Apple, Inc.
+E490FD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-AB-1A   (hex)		Apple, Inc.
+84AB1A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-6D-31   (hex)		FIREWALLA INC
+206D31     (base 16)		FIREWALLA INC
+				75 E. Santa Clara St. STE 600
+				San Jose  CA  95113
+				US
+
+D0-65-44   (hex)		Apple, Inc.
+D06544     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-6F-2D   (hex)		Shenzhen Sundray Technologies Company Limited
+186F2D     (base 16)		Shenzhen Sundray Technologies Company Limited
+				5th Floor, Block A4, Nanshan ipark,NO.1001 Xue Yuan Road, Nanshan District, Shenzhen 518055, P.R. China
+				Shenzhen  Guangdong  518057
+				CN
+
+F8-4F-AD   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+F84FAD     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+4C-0A-3D   (hex)		ADNACOM INC.
+4C0A3D     (base 16)		ADNACOM INC.
+				200-5050 Kingsway
+				Burnaby  BC  V5H 4H2
+				CA
+
+3C-80-6B   (hex)		Hunan Voc Acoustics Technology Co., Ltd.
+3C806B     (base 16)		Hunan Voc Acoustics Technology Co., Ltd.
+				State Industrialpark, Jiulong Development Zone, Yanling County
+				Zhuzhou  Hunan  412500
+				CN
+
+60-DE-35   (hex)		GITSN, Inc.
+60DE35     (base 16)		GITSN, Inc.
+				 #601~602, Daerung Post Tower 1, 288, Digital-ro
+				Guro-gu  Seoul  08390
+				KR
+
+28-31-7E   (hex)		Hongkong Nano IC Technologies Co., Ltd
+28317E     (base 16)		Hongkong Nano IC Technologies Co., Ltd
+				 Rm. 19C, Lockhart Ctr., 301-307 Lockhart Rd., Wan Chai, Hong Kong.
+				Hongkong    999077
+				CN
+
+A8-41-22   (hex)		China Mobile (Hangzhou) Information Technology Co.,Ltd.
+A84122     (base 16)		China Mobile (Hangzhou) Information Technology Co.,Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+6C-DD-BC   (hex)		Samsung Electronics Co.,Ltd
+6CDDBC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-7F-76   (hex)		Cisco Systems, Inc
+CC7F76     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-BC-68   (hex)		Wuhan Funshion Online Technologies Co.,Ltd
+40BC68     (base 16)		Wuhan Funshion Online Technologies Co.,Ltd
+				5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan
+				Wuhan  CN/Hubei  430000
+				CN
+
+DC-98-40   (hex)		Microsoft Corporation
+DC9840     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND    98052
+				US
+
+44-76-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+447654     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-D9-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7CD9A0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-33-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F033E5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-F1-8C   (hex)		Huawei Device Co., Ltd.
+B4F18C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B8-CE-F6   (hex)		Mellanox Technologies, Inc.
+B8CEF6     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+B8-02-A4   (hex)		Aeonsemi, Inc.
+B802A4     (base 16)		Aeonsemi, Inc.
+				Cassia Court, Suite 716, 10 Market Street
+				Camana Bay  Grand Cayman  KY1-9006
+				KY
+
+E4-83-26   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E48326     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-05-BB   (hex)		IEEE Registration Authority
+9405BB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-5F-AD   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+8C5FAD     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+AC-C2-5D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ACC25D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+8C-0C-87   (hex)		Nokia
+8C0C87     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+C4-32-D1   (hex)		Farlink Technology Limited
+C432D1     (base 16)		Farlink Technology Limited
+				Flat A&B,9/F,Wing Cheong Factory Building,121 King Lam Street,Cheung Sha Wan,Hong Kong.
+				Hongkong    0000
+				HK
+
+CC-41-8E   (hex)		MSA Innovation
+CC418E     (base 16)		MSA Innovation
+				1100 Cranberry Woods Road
+				Cranberry Township  PA  16066
+				US
+
+CC-A7-C1   (hex)		Google, Inc.
+CCA7C1     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+38-84-79   (hex)		Cisco Meraki
+388479     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+7C-9E-BD   (hex)		Espressif Inc.
+7C9EBD     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+1C-02-19   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+1C0219     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+C8-D7-78   (hex)		BSH Hausgeraete GmbH
+C8D778     (base 16)		BSH Hausgeraete GmbH
+				Im Gewerbepark B10
+				Regensburg    93059
+				DE
+
+9C-61-1D   (hex)		Panasonic Corporation of North America
+9C611D     (base 16)		Panasonic Corporation of North America
+				1200 Ridgeway Ave
+				Rochester  NY  14615
+				US
+
+C0-95-DA   (hex)		NXP India Private Limited
+C095DA     (base 16)		NXP India Private Limited
+				1st Floor, Muttha Towers, Don Bosco Marg, Off Airport Road, Yerwada
+				Pune  Maharashtra  411006
+				IN
+
+B4-22-00   (hex)		Brother Industries, LTD.
+B42200     (base 16)		Brother Industries, LTD.
+				15-1, Naeshirocho, Mizuho-ku
+				NAGOYA    4678561
+				JP
+
+68-49-B2   (hex)		CARLO GAVAZZI LTD
+6849B2     (base 16)		CARLO GAVAZZI LTD
+				BLB042, Bulebel Industrial Estate 
+				Zejtun     ZTN 3000
+				MT
+
+48-7A-FF   (hex)		ESSYS
+487AFF     (base 16)		ESSYS
+				gaetbeol-ro
+				Incheon    21999
+				KR
+
+40-B6-E7   (hex)		Huawei Device Co., Ltd.
+40B6E7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-B4-5D   (hex)		Huawei Device Co., Ltd.
+D0B45D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+88-36-CF   (hex)		Huawei Device Co., Ltd.
+8836CF     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A4-C5-4E   (hex)		Huawei Device Co., Ltd.
+A4C54E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D4-BB-E6   (hex)		Huawei Device Co., Ltd.
+D4BBE6     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-9E-EE   (hex)		Positivo Tecnologia S.A.
+009EEE     (base 16)		Positivo Tecnologia S.A.
+				João Bettega, 5200
+				Curitiba  Paraná  81350-000
+				BR
+
+90-B8-32   (hex)		Extreme Networks, Inc.
+90B832     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+40-2F-86   (hex)		LG Innotek
+402F86     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+D4-22-CD   (hex)		Xsens Technologies B.V.
+D422CD     (base 16)		Xsens Technologies B.V.
+				Pantheon 6-a
+				Enschede    7521 PR
+				NL
+
+C8-67-5E   (hex)		Extreme Networks, Inc.
+C8675E     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+9C-5D-12   (hex)		Extreme Networks, Inc.
+9C5D12     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+F0-9C-E9   (hex)		Extreme Networks, Inc.
+F09CE9     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+C4-13-E2   (hex)		Extreme Networks, Inc.
+C413E2     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+F4-EB-9F   (hex)		Ellu Company 2019 SL
+F4EB9F     (base 16)		Ellu Company 2019 SL
+				Paseo de la Castellana 144 14B
+				Madrid  Madrid  28046
+				ES
+
+E8-98-C2   (hex)		ZETLAB Company
+E898C2     (base 16)		ZETLAB Company
+				Savelkinsky passage, 4
+				Zelenograd  Moscow  124482
+				RU
+
+D4-1A-C8   (hex)		Nippon Printer Engineering
+D41AC8     (base 16)		Nippon Printer Engineering
+				2660 Katsuyama
+				Fujikawaguchiko-town  Yamanashi-Pref.  401-0310
+				JP
+
+50-61-F6   (hex)		Universal Electronics, Inc.
+5061F6     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+00-0C-32   (hex)		Avionic Design GmbH
+000C32     (base 16)		Avionic Design GmbH
+				Wragekamp 10
+				Hamburg    22397
+				DE
+
+00-0A-0D   (hex)		Amphenol
+000A0D     (base 16)		Amphenol
+				Holzhauser Strasse 175
+				Berlin    13509
+				DE
+
+F4-54-20   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+F45420     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+				Av. Buriti, 1900 – Setor B – Distrito Industrial
+				Manaus  Amazonas  69075-000
+				BR
+
+4C-40-88   (hex)		SANSHIN ELECTRONICS CO.,LTD.
+4C4088     (base 16)		SANSHIN ELECTRONICS CO.,LTD.
+				4-4-12, Shiba, Minato-ku,
+				Tokyo    108-8404
+				JP
+
+64-DD-E9   (hex)		Xiaomi Communications Co Ltd
+64DDE9     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+0C-81-7D   (hex)		EEP Elektro-Elektronik Pranjic GmbH
+0C817D     (base 16)		EEP Elektro-Elektronik Pranjic GmbH
+				Am Luftschacht 21
+				Gelsenkirchen    45886
+				DE
+
+04-F5-F4   (hex)		Proxim Wireless
+04F5F4     (base 16)		Proxim Wireless
+				2114 Ringwood Ave
+				San Jose  CA  95131
+				US
+
+C8-BC-E5   (hex)		Sense Things Japan INC.
+C8BCE5     (base 16)		Sense Things Japan INC.
+				3-5-7 Kawaramachi,Chuo-ku
+				Osaka    541-0048
+				JP
+
+E8-B4-70   (hex)		IEEE Registration Authority
+E8B470     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-1B-ED   (hex)		Brocade Communications Systems LLC
+001BED     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-0C-DB   (hex)		Brocade Communications Systems LLC
+000CDB     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-04-80   (hex)		Brocade Communications Systems LLC
+000480     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+60-9C-9F   (hex)		Brocade Communications Systems LLC
+609C9F     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-00-88   (hex)		Brocade Communications Systems LLC
+000088     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-60-DF   (hex)		Brocade Communications Systems LLC
+0060DF     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-60-69   (hex)		Brocade Communications Systems LLC
+006069     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-05-33   (hex)		Brocade Communications Systems LLC
+000533     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+B0-45-02   (hex)		Huawei Device Co., Ltd.
+B04502     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-1F-F1   (hex)		Huawei Device Co., Ltd.
+1C1FF1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-EF-1C   (hex)		360 AI Technology Co.Ltd
+B4EF1C     (base 16)		360 AI Technology Co.Ltd
+				MTK Building B?No.6 Jiuxianqiao Road, Chaoyang District, Beijing, P.R.C. 
+				Beijing  Beijing  100015
+				CN
+
+14-DE-39   (hex)		Huawei Device Co., Ltd.
+14DE39     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B8-F0-09   (hex)		Espressif Inc.
+B8F009     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+FC-71-FA   (hex)		Trane Technologies
+FC71FA     (base 16)		Trane Technologies
+				6200 Troup Hwy.
+				Tyler  TX  75707
+				US
+
+CC-BE-59   (hex)		Calix Inc.
+CCBE59     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+84-A3-B5   (hex)		Propulsion systems
+84A3B5     (base 16)		Propulsion systems
+				Dooren 72
+				Merchtem  Vlaams brabant  1785
+				BE
+
+30-FC-EB   (hex)		LG Electronics (Mobile Communications)
+30FCEB     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+24-68-B0   (hex)		Samsung Electronics Co.,Ltd
+2468B0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-13-38   (hex)		Kimball Electronics Group, LLC
+1C1338     (base 16)		Kimball Electronics Group, LLC
+				1205 Kimball Blvd
+				Jasper  IN  47546
+				US
+
+9C-ED-FA   (hex)		EVUlution AG
+9CEDFA     (base 16)		EVUlution AG
+				Via da Clalt 12
+				Poschiavo  GR  7742
+				CH
+
+EC-63-ED   (hex)		Hyundai Autoever Corp.
+EC63ED     (base 16)		Hyundai Autoever Corp.
+				38, Teheran-ro 114-gil
+				Gangnam-gu, Seoul    06176
+				KR
+
+D4-67-61   (hex)		XonTel Technology Co.
+D46761     (base 16)		XonTel Technology Co.
+				XonTel, Borj ALadel Tower, Fahad Al-Salem St Fl 21
+				Kuwait    0000
+				KW
+
+E4-41-22   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+E44122     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+9C-19-C2   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+9C19C2     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+				dongguan   guangdong  523000
+				CN
+
+BC-26-A1   (hex)		FACTORY FIVE Corporation
+BC26A1     (base 16)		FACTORY FIVE Corporation
+				3-391-1, Kamikitadai,
+				 Higashiyamato  Tokyo  207-0023
+				JP
+
+74-CB-F3   (hex)		Lava international limited
+74CBF3     (base 16)		Lava international limited
+				A-154D, Sector-63
+				Noida  Uttar Pradesh  201301
+				IN
+
+F0-D1-4F   (hex)		LINEAR LLC
+F0D14F     (base 16)		LINEAR LLC
+				5919 Sea Otter Place
+				Carlsbad  CA  92010
+				US
+
+00-11-68   (hex)		HomeLogic LLC
+001168     (base 16)		HomeLogic LLC
+				5919 Sea Otter Place
+				Carlsbad  CA  92010
+				US
+
+18-DF-C1   (hex)		Aetheros
+18DFC1     (base 16)		Aetheros
+				909 Montgomery Street, Suite 104
+				San Francisco    94133
+				US
+
+FC-BC-0E   (hex)		Zhejiang Cainiao Supply Chain Management Co., Ltd
+FCBC0E     (base 16)		Zhejiang Cainiao Supply Chain Management Co., Ltd
+				Block B1, XIXI center, No.588 West Wenyi Road, Xihu District
+				Hangzhou  Zhejiang  310000
+				CN
+
+2C-D0-66   (hex)		Xiaomi Communications Co Ltd
+2CD066     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+B0-5C-DA   (hex)		HP Inc.
+B05CDA     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+DC-BD-7A   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+DCBD7A     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+90-16-BA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9016BA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-AA-EF   (hex)		Huawei Device Co., Ltd.
+60AAEF     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-F3-F5   (hex)		Huawei Device Co., Ltd.
+D0F3F5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D4-46-49   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D44649     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-00-B0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9400B0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-79-EF   (hex)		Greenpacket Berhad, Taiwan
+2479EF     (base 16)		Greenpacket Berhad, Taiwan
+				B-23A-3, The Ascent Paradigm, No. 1, Jalan SS7/26A, Kelana Jaya, 47301 Petaling Jaya
+				Petaling Jaya  Selangor  47301
+				MY
+
+AC-23-34   (hex)		Infinix mobility limited
+AC2334     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+00-2B-67   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+002B67     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+F8-BC-0E   (hex)		eero inc.
+F8BC0E     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+50-E0-39   (hex)		Zyxel Communications Corporation
+50E039     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+B8-57-76   (hex)		lignex1
+B85776     (base 16)		lignex1
+				354-25, Sanhodae-ro
+				Gumi-si  Gyeongsangbuk-do, Korea  39262
+				KR
+
+24-00-FA   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd
+2400FA     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  311100
+				CN
+
+C8-3D-FC   (hex)		AlphaTheta Corporation
+C83DFC     (base 16)		AlphaTheta Corporation
+				6F,Yokohama i-Mark Place, 4-4-5 Minatomirai, Nishi-ku
+				Yokohama  Kanagawa  220-0012
+				JP
+
+E0-19-95   (hex)		Nutanix
+E01995     (base 16)		Nutanix
+				1740 Technology Drive Ste #150
+				San Jose  CA  95110
+				US
+
+F8-51-28   (hex)		SimpliSafe
+F85128     (base 16)		SimpliSafe
+				294 Washington St
+				Boston  MA  02108
+				US
+
+AC-1F-09   (hex)		shenzhen RAKwireless technology  Co.,Ltd
+AC1F09     (base 16)		shenzhen RAKwireless technology  Co.,Ltd
+				Room 506, Bldg B, New Compark, Pingshan First Road, Taoyuan Street,Nanshan District
+				shenzhen  guangdong  518057
+				CN
+
+BC-13-A8   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+BC13A8     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+90-77-EE   (hex)		Cisco Systems, Inc
+9077EE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-13-CC   (hex)		Cisco Systems, Inc
+3C13CC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+94-E3-EE   (hex)		zte corporation
+94E3EE     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D8-DC-40   (hex)		Apple, Inc.
+D8DC40     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-5F-C5   (hex)		Apple, Inc.
+805FC5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-F9-20   (hex)		Cisco Systems, Inc
+10F920     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-69-80   (hex)		Apple, Inc.
+206980     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-32-A8   (hex)		Intel Corporate
+6432A8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+80-19-34   (hex)		Intel Corporate
+801934     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+40-A3-CC   (hex)		Intel Corporate
+40A3CC     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+E4-A7-A0   (hex)		Intel Corporate
+E4A7A0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+3C-4D-BE   (hex)		Apple, Inc.
+3C4DBE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-26-2C   (hex)		Apple, Inc.
+48262C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-7D-DA   (hex)		Apple, Inc.
+147DDA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-91-0C   (hex)		Apple, Inc.
+C4910C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-99-61   (hex)		Sagemcom Broadband SAS
+6C9961     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+50-C7-09   (hex)		Juniper Networks
+50C709     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+80-6D-97   (hex)		Private
+806D97     (base 16)		Private
+
+64-5D-86   (hex)		Intel Corporate
+645D86     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+18-1D-EA   (hex)		Intel Corporate
+181DEA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+18-56-80   (hex)		Intel Corporate
+185680     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+A0-A4-C5   (hex)		Intel Corporate
+A0A4C5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+F4-D1-08   (hex)		Intel Corporate
+F4D108     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+20-79-18   (hex)		Intel Corporate
+207918     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+A8-6D-AA   (hex)		Intel Corporate
+A86DAA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+38-00-25   (hex)		Intel Corporate
+380025     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+C0-E3-A0   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+C0E3A0     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+8C-E4-68   (hex)		Guangzhou Sageran Technology Co., Ltd.
+8CE468     (base 16)		Guangzhou Sageran Technology Co., Ltd.
+				Room 1902, Ruian Guangzhou Center, 374 Beijing Road, Yuexiu District
+				Guangzhou  Guangdong  510030
+				CN
+
+C8-B2-9B   (hex)		Intel Corporate
+C8B29B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+6C-6A-77   (hex)		Intel Corporate
+6C6A77     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+A4-B1-C1   (hex)		Intel Corporate
+A4B1C1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+34-2E-B7   (hex)		Intel Corporate
+342EB7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+8C-C6-81   (hex)		Intel Corporate
+8CC681     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+CC-F9-E4   (hex)		Intel Corporate
+CCF9E4     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+3C-58-C2   (hex)		Intel Corporate
+3C58C2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+E4-5E-37   (hex)		Intel Corporate
+E45E37     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+24-41-8C   (hex)		Intel Corporate
+24418C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+60-F2-62   (hex)		Intel Corporate
+60F262     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+C0-B8-83   (hex)		Intel Corporate
+C0B883     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+C8-09-A8   (hex)		Intel Corporate
+C809A8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+90-78-41   (hex)		Intel Corporate
+907841     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+58-A0-23   (hex)		Intel Corporate
+58A023     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+D4-D2-52   (hex)		Intel Corporate
+D4D252     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+28-48-E7   (hex)		Huawei Device Co., Ltd.
+2848E7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-D3-B0   (hex)		Intel Corporate
+04D3B0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+E0-6C-A6   (hex)		Creotech Instruments S.A.
+E06CA6     (base 16)		Creotech Instruments S.A.
+				ul. Gen. L. Okulickiego 7/9
+				Piaseczno  Mazovia  05-500
+				PL
+
+44-68-0C   (hex)		Wacom Co.,Ltd.
+44680C     (base 16)		Wacom Co.,Ltd.
+				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
+				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
+				JP
+
+98-0E-24   (hex)		Phytium Technology Co.,Ltd.
+980E24     (base 16)		Phytium Technology Co.,Ltd.
+				Building5,XinAn Business Square,Haiyuan Middle Road Binhai New District,
+				Tianjin    300450
+				CN
+
+A8-30-BC   (hex)		Samsung Electronics Co.,Ltd
+A830BC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-63-DE   (hex)		CLOUDWALK TECHNOLOGY CO.,LTD
+0063DE     (base 16)		CLOUDWALK TECHNOLOGY CO.,LTD
+				Five Floors of Block 106, West Jinkai Avenue, Yubei District
+				Chongqing  Chongqing  401120
+				CN
+
+60-A4-23   (hex)		Silicon Laboratories
+60A423     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+78-46-D4   (hex)		Samsung Electronics Co.,Ltd
+7846D4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-3E-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E43EC6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-88-1E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+38881E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-DB-07   (hex)		Intel Corporate
+2CDB07     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+98-8D-46   (hex)		Intel Corporate
+988D46     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+E4-26-8B   (hex)		Huawei Device Co., Ltd.
+E4268B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+68-88-A1   (hex)		Universal Electronics, Inc.
+6888A1     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+00-1E-B2   (hex)		LG Innotek
+001EB2     (base 16)		LG Innotek
+				Hanyang Univ. 1271, Sa-dong, Sangrok-gu
+				Ansan-si  Gyeonggi-do  426-791
+				KR
+
+C0-86-B3   (hex)		Shenzhen Voxtech Co., Ltd.
+C086B3     (base 16)		Shenzhen Voxtech Co., Ltd.
+				Floors 1-4,Factory Building 26,Shancheng Industrial Park,Shiyan Street,Bao'an District,Shenzhen, Guangdong,China
+				Shenzhen     518000
+				CN
+
+44-AD-B1   (hex)		Sagemcom Broadband SAS
+44ADB1     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+1C-98-C1   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+1C98C1     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+A0-9B-17   (hex)		Taicang T&W Electronics
+A09B17     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+44-01-BB   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+4401BB     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+A0-D8-3D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+A0D83D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+58-F2-FC   (hex)		Huawei Device Co., Ltd.
+58F2FC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-3A-EA   (hex)		Cisco Systems, Inc
+643AEA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D0-14-11   (hex)		IEEE Registration Authority
+D01411     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+3C-53-D7   (hex)		CEDES AG
+3C53D7     (base 16)		CEDES AG
+				Kantonsstrasse 14
+				Landquart    7302
+				CH
+
+E8-13-6E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8136E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-AE-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CAE13     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-2E-FE   (hex)		Shenzhen Comnect Technology Co.,LTD
+4C2EFE     (base 16)		Shenzhen Comnect Technology Co.,LTD
+				G Zone, 3/F, Building 1, Baisha High-Tech Park, No. 3011, Shahe Road West, XiLi Street, Nanshan District
+				Shenzhen    518055
+				CN
+
+DC-D4-44   (hex)		Huawei Device Co., Ltd.
+DCD444     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-B2-60   (hex)		TENO NETWORK TECHNOLOGIES COMPANY LIMITED
+E0B260     (base 16)		TENO NETWORK TECHNOLOGIES COMPANY LIMITED
+				RM 1302, 13/F CHEONG K BLDG 84-86 DES VOEUX RD CENTRAL  HONG KONG
+				Hong Kong    999077
+				HK
+
+A4-46-B4   (hex)		Huawei Device Co., Ltd.
+A446B4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+0C-C8-44   (hex)		Cambridge Mobile Telematics, Inc.
+0CC844     (base 16)		Cambridge Mobile Telematics, Inc.
+				One Broadway, 14th Floor
+				Cambridge  MA  02142
+				US
+
+E8-DA-20   (hex)		Nintendo Co.,Ltd
+E8DA20     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+48-23-35   (hex)		Dialog Semiconductor Hellas SA
+482335     (base 16)		Dialog Semiconductor Hellas SA
+				Achileos 8 & Katsoni Str
+				Kalithea, Athens    17674
+				GR
+
+8C-85-C1   (hex)		Aruba, a Hewlett Packard Enterprise Company
+8C85C1     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+20-A1-71   (hex)		Amazon Technologies Inc.
+20A171     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+7C-F9-A0   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+7CF9A0     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+6C-A4-D1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+6CA4D1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+54-AB-3A   (hex)		Quanta Computer Inc.
+54AB3A     (base 16)		Quanta Computer Inc.
+				No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang, Tao Yuan Shien, Taiwan, R. O. C.
+				Taoyuan  Taiwan  33377
+				TW
+
+E8-9A-8F   (hex)		Quanta Computer Inc.
+E89A8F     (base 16)		Quanta Computer Inc.
+				211, Wen Hwa 2nd Rd.,Kuei Shan, Tao Yuan 
+				TAIPEI    33377
+				TW
+
+EC-6C-9A   (hex)		Arcadyan Corporation
+EC6C9A     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+34-6D-9C   (hex)		Carrier Corporation
+346D9C     (base 16)		Carrier Corporation
+				6304 Thompson Rd
+				East Syracuse  NY  13057
+				US
+
+D4-F7-56   (hex)		zte corporation
+D4F756     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E0-69-3A   (hex)		Innophase Inc.
+E0693A     (base 16)		Innophase Inc.
+				6815 Flanders Drive Suite 150
+				San Diego  CA  92121
+				US
+
+54-88-DE   (hex)		Cisco Systems, Inc
+5488DE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+78-2B-64   (hex)		Bose Corporation
+782B64     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+24-FD-0D   (hex)		Intelbras
+24FD0D     (base 16)		Intelbras
+				BR 101, KM 210
+				São Jose  Santa Catarina  88104-800
+				BR
+
+34-55-94   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+345594     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+9C-6B-37   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+9C6B37     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+A8-37-59   (hex)		Huawei Device Co., Ltd.
+A83759     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-AA-56   (hex)		China Dragon Technology Limited
+40AA56     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+68-54-5A   (hex)		Intel Corporate
+68545A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+3C-E3-E7   (hex)		China Mobile Group Device Co.,Ltd.
+3CE3E7     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+CC-47-BD   (hex)		Rhombus Systems
+CC47BD     (base 16)		Rhombus Systems
+				770 L St, Suite 1480
+				Sacramento  CA  95814
+				US
+
+4C-93-A6   (hex)		IEEE Registration Authority
+4C93A6     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-1E-31   (hex)		infomark
+001E31     (base 16)		infomark
+				5F.,Geown Bldg.,1360-53
+				Seoul  Seocho-dong,Seocho-gu  137-863
+				KR
+
+50-F7-ED   (hex)		Huawei Device Co., Ltd.
+50F7ED     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+4C-B9-9B   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+4CB99B     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+BC-7E-8B   (hex)		Samsung Electronics Co.,Ltd
+BC7E8B     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+0C-31-DC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C31DC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+40-DD-D1   (hex)		Beautiful Card Corporation
+40DDD1     (base 16)		Beautiful Card Corporation
+				Wenming 1st St.,
+				Taoyuan    33383
+				TW
+
+C0-E7-BF   (hex)		Sichuan AI-Link Technology Co., Ltd.
+C0E7BF     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+54-77-8A   (hex)		Hewlett Packard Enterprise
+54778A     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+24-71-52   (hex)		Dell Inc.
+247152     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+64-33-DB   (hex)		Texas Instruments
+6433DB     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A4-06-E9   (hex)		Texas Instruments
+A406E9     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B0-B1-13   (hex)		Texas Instruments
+B0B113     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+4C-AE-EC   (hex)		Guangzhou limee technology co.,LTD
+4CAEEC     (base 16)		Guangzhou limee technology co.,LTD
+				No.2, Yichuang Street, Zhongxin Guangzhou Knowledge City, Huangpu District, Guangzhou
+				Guangzhou  Guangdong  510555
+				CN
+
+00-40-AB   (hex)		ROLAND DG CORPORATION
+0040AB     (base 16)		ROLAND DG CORPORATION
+				1-1-3 Shinmiyakoda, Kita-ku
+				Hamamatsu-shi  Shizuoka-ken  431-2103
+				JP
+
+00-12-B4   (hex)		Work Microwave GmbH
+0012B4     (base 16)		Work Microwave GmbH
+				Rudolf-Diesel-Ring 2
+				Holzkirchen    83607
+				DE
+
+24-B1-05   (hex)		Prama Hikvision India Private Limited
+24B105     (base 16)		Prama Hikvision India Private Limited
+				Prama Hikvision India Pvt Ltd, Akurli Cross Road No 1, Kandivali East
+				Mumbai  Maharashtra  400101
+				IN
+
+80-60-B7   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+8060B7     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+90-AA-C3   (hex)		Hitron Technologies. Inc
+90AAC3     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+44-91-7C   (hex)		HMD Global Oy
+44917C     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo  Paimio  02600
+				FI
+
+DC-72-23   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+DC7223     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+34-20-E3   (hex)		Ruckus Wireless
+3420E3     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+24-5F-9F   (hex)		Huawei Device Co., Ltd.
+245F9F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+CC-B0-A8   (hex)		Huawei Device Co., Ltd.
+CCB0A8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-28-73   (hex)		Huawei Device Co., Ltd.
+502873     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+8C-47-BE   (hex)		Dell Inc.
+8C47BE     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+14-2C-78   (hex)		GooWi Wireless Technology Co., Limited
+142C78     (base 16)		GooWi Wireless Technology Co., Limited
+				RM402 Building212, Tairan Technology Park, Futian District
+				Shenzhen  Guangdong  518000
+				CN
+
+98-FC-84   (hex)		IEEE Registration Authority
+98FC84     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+20-F4-4F   (hex)		Nokia
+20F44F     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+04-76-B0   (hex)		Cisco Systems, Inc
+0476B0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-F0-78   (hex)		Cisco Systems, Inc
+40F078     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+78-D7-1A   (hex)		Ciena Corporation
+78D71A     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+78-53-F2   (hex)		Roxton Systems Ltd.
+7853F2     (base 16)		Roxton Systems Ltd.
+				Floor 4, premise 1, room 6, Ostapovsky proezd,15k2
+				Moscow  Moscow  109316
+				RU
+
+9C-69-37   (hex)		Qorvo International Pte. Ltd.
+9C6937     (base 16)		Qorvo International Pte. Ltd.
+				1 Changi Business Park Avenue 1
+				#04-01    486058
+				SG
+
+F8-2E-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F82E3F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-A5-AF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+90A5AF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-7C-3F   (hex)		ASUSTek COMPUTER INC.
+3C7C3F     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+34-91-6F   (hex)		UserGate Ltd.
+34916F     (base 16)		UserGate Ltd.
+				Nikolaeva str., 11, 602
+				Novosibirsk    630090
+				RU
+
+0C-8B-7D   (hex)		Vizio, Inc
+0C8B7D     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+EC-4D-3E   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+EC4D3E     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+D8-A4-91   (hex)		Huawei Device Co., Ltd.
+D8A491     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+68-13-24   (hex)		Huawei Device Co., Ltd.
+681324     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A8-C0-92   (hex)		Huawei Device Co., Ltd.
+A8C092     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-60-CA   (hex)		Apple, Inc.
+9860CA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-90-BB   (hex)		Apple, Inc.
+4490BB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-FD-6A   (hex)		Apple, Inc.
+34FD6A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-3E-B3   (hex)		Zyxel Communications Corporation
+EC3EB3     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+8C-D6-7F   (hex)		EM Microelectronic
+8CD67F     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+5C-91-FD   (hex)		Jaewoncnc
+5C91FD     (base 16)		Jaewoncnc
+				A-501~507, H-Businesspark, 25 Beobwon-ro11gil, Songpa-gu, Seoul, Korea
+				Seoul    05836
+				KR
+
+FC-44-9F   (hex)		zte corporation
+FC449F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+20-4E-F6   (hex)		AzureWave Technology Inc.
+204EF6     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+44-35-83   (hex)		Apple, Inc.
+443583     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-CA-73   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+38CA73     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+				Chudong science and technology park, 111 shaxin road, tangxia town,
+				dongguan city  guangdong province  523710
+				CN
+
+6C-0D-C4   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+6C0DC4     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+C4-40-F6   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C440F6     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+00-55-B1   (hex)		Shanghai Baud Data Communication Co.,Ltd.
+0055B1     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
+				NO.123 JULI RD
+				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
+				CN
+
+74-90-1F   (hex)		Ragile Networks Inc.
+74901F     (base 16)		Ragile Networks Inc.
+				35649 Embassy common Fremont ca 94536
+				Fremont  CA  94536
+				US
+
+C0-25-2F   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+C0252F     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+54-9F-C6   (hex)		Cisco Systems, Inc
+549FC6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F0-1D-2D   (hex)		Cisco Systems, Inc
+F01D2D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-3B-32   (hex)		Intelbras
+443B32     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+D4-1B-81   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+D41B81     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+78-45-B3   (hex)		Huawei Device Co., Ltd.
+7845B3     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+20-DC-FD   (hex)		Huawei Device Co., Ltd.
+20DCFD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+FC-65-B3   (hex)		Huawei Device Co., Ltd.
+FC65B3     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+10-9D-7A   (hex)		Huawei Device Co., Ltd.
+109D7A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-63-73   (hex)		OBARA KOREA
+DC6373     (base 16)		OBARA KOREA
+				97-23, Barangongdan-ro 4-gil
+				Hwaseong-si  Gyeonggi-do  18623
+				KR
+
+D4-7E-E4   (hex)		China Mobile IOT Company Limited
+D47EE4     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+88-89-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88892F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-E5-B0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+28E5B0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-A8-52   (hex)		SENSAIO PTE LTD
+1CA852     (base 16)		SENSAIO PTE LTD
+				160 Robinson Road #14-04
+				SINGAPORE  SINGAPORE  068914
+				SG
+
+78-7D-F3   (hex)		Sterlite Technologies Limited
+787DF3     (base 16)		Sterlite Technologies Limited
+				IFFCO Tower, 3rd Floor, Plot No.3, Sector 29,CH Baktawar Singh Rd, Institutional Area,
+				Gurugram  Haryana  122002
+				IN
+
+C0-94-AD   (hex)		zte corporation
+C094AD     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+34-2B-70   (hex)		Arris
+342B70     (base 16)		Arris
+				2500 Walsh Ave.
+				Santa Clara  CA  95014
+				US
+
+1C-90-BE   (hex)		Ericsson AB
+1C90BE     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+00-16-3B   (hex)		Communications & Power Industries
+00163B     (base 16)		Communications & Power Industries
+				Suite , 60 Decibel Road
+				State College  PA  16801
+				US
+
+9C-B2-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9CB2E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-73-1D   (hex)		ifm electronic gmbh
+74731D     (base 16)		ifm electronic gmbh
+				ifm-Straße 1
+				Tettnang  BW  88069
+				DE
+
+00-0B-4E   (hex)		Communications & Power Industries
+000B4E     (base 16)		Communications & Power Industries
+				1000 Klein Road
+				Plano  TX  75074
+				US
+
+00-03-34   (hex)		Omega Engineering Inc.
+000334     (base 16)		Omega Engineering Inc.
+				800 Connecticut Ave. Suite 5N01,
+				Norwalk  CT  06854
+				US
+
+5C-61-99   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+5C6199     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+E8-DB-84   (hex)		Espressif Inc.
+E8DB84     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+D0-55-09   (hex)		Nintendo Co.,Ltd
+D05509     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+A0-77-51   (hex)		ASMedia Technology Inc.
+A07751     (base 16)		ASMedia Technology Inc.
+				6F, No.115, Minquan Rd.,
+				New Taipei City    23141
+				TW
+
+30-56-84   (hex)		SHENZHEN YUNJI INTELLIGENT TECHNOLOGY CO.,LTD
+305684     (base 16)		SHENZHEN YUNJI INTELLIGENT TECHNOLOGY CO.,LTD
+				A-SIDE A2 BUILDING 2/F ENET NEW INDUSTRIAL PARK,NO.20 DAFU INDUSTRIAL ZONE, AOBEI COMMUNITY, GUANLAN, LONGHUA NEW DISTRICT
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+14-56-3A   (hex)		Huawei Device Co., Ltd.
+14563A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+70-90-B7   (hex)		Huawei Device Co., Ltd.
+7090B7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-94-94   (hex)		Hong Kong Bouffalo Lab Limited
+249494     (base 16)		Hong Kong Bouffalo Lab Limited
+				RM 1903, 19/F Lee Garden One 33 Hysan Avenue, Causeway Bay
+				HongKong    999077
+				HK
+
+30-BE-3B   (hex)		Mitsubishi Electric Corporation
+30BE3B     (base 16)		Mitsubishi Electric Corporation
+				2-7-3 Marunouchi, Chiyoda-ku
+				Tokyo    100-8310
+				JP
+
+0C-B7-89   (hex)		Honor Device Co., Ltd.
+0CB789     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+78-91-E9   (hex)		Raisecom Technology CO.,LTD
+7891E9     (base 16)		Raisecom Technology CO.,LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+8C-34-01   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+8C3401     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+60-DB-98   (hex)		Calix Inc.
+60DB98     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+68-72-C3   (hex)		Samsung Electronics Co.,Ltd
+6872C3     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+70-B1-3D   (hex)		Samsung Electronics Co.,Ltd
+70B13D     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+FC-7F-F1   (hex)		Aruba, a Hewlett Packard Enterprise Company
+FC7FF1     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+3C-A3-7E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3CA37E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-E4-3B   (hex)		ASIX Electronics Corporation
+F8E43B     (base 16)		ASIX Electronics Corporation
+				4F, No. 8, Hsin Ann Road, Hsinchu Science Park
+				Hsinchu    30078
+				TW
+
+48-EF-61   (hex)		Huawei Device Co., Ltd.
+48EF61     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+78-F0-9B   (hex)		Huawei Device Co., Ltd.
+78F09B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-E9-3A   (hex)		AzureWave Technology Inc.
+00E93A     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+00-C5-2C   (hex)		Juniper Networks
+00C52C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-34-A1   (hex)		RF-LAMBDA USA INC.
+0034A1     (base 16)		RF-LAMBDA USA INC.
+				9115 Brown Deer Road | San Diego
+				CA    92121
+				US
+
+60-35-73   (hex)		Earda Technologies co Ltd
+603573     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+A4-97-33   (hex)		ASKEY COMPUTER CORP
+A49733     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+5C-FB-3A   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+5CFB3A     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+18-0F-76   (hex)		D-Link International
+180F76     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+00-AD-24   (hex)		D-Link International
+00AD24     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+60-63-4C   (hex)		D-Link International
+60634C     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+C4-E9-0A   (hex)		D-Link International
+C4E90A     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+F0-B4-D2   (hex)		D-Link International
+F0B4D2     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+E0-1C-FC   (hex)		D-Link International
+E01CFC     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+F0-2F-74   (hex)		ASUSTek COMPUTER INC.
+F02F74     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+00-6E-02   (hex)		Xovis AG
+006E02     (base 16)		Xovis AG
+				Industriestrasse 1
+				Zollikofen  Bern  3052
+				CH
+
+AC-F8-5C   (hex)		Chengdu Higon Integrated Circuit Design Co,. Ltd.
+ACF85C     (base 16)		Chengdu Higon Integrated Circuit Design Co,. Ltd.
+				Suite22-31, 11Floor, Block E5,Tianfu Software Park, Chengdu Gaoxin District
+				Chengdu  Sichuan  610041
+				CN
+
+18-11-71   (hex)		Guangzhou Doctorpai Education & Technology Co.,Ltd
+181171     (base 16)		Guangzhou Doctorpai Education & Technology Co.,Ltd
+				Floor 5, Building C1, Greenland Central Plaza
+				Huangpu District, Guangzhou  Guangdong Province  510700
+				CN
+
+E0-6D-17   (hex)		Apple, Inc.
+E06D17     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-B3-EC   (hex)		Apple, Inc.
+F0B3EC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-65-A6   (hex)		Apple, Inc.
+F465A6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-98-E8   (hex)		D-Link International
+7898E8     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+44-F2-1B   (hex)		Apple, Inc.
+44F21B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-65-0C   (hex)		Apple, Inc.
+74650C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-D4-36   (hex)		Motorola Mobility LLC, a Lenovo Company
+FCD436     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+0C-EC-8D   (hex)		Motorola Mobility LLC, a Lenovo Company
+0CEC8D     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+18-4F-5D   (hex)		JRC Mobility Inc.
+184F5D     (base 16)		JRC Mobility Inc.
+				NAKANO CENTRAL PARK EAST 10-1, Nakano 4-chome
+				Nakano-ku  Tokyo  164-8570
+				JP
+
+F0-23-AE   (hex)		AMPAK Technology,Inc.
+F023AE     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+E0-77-26   (hex)		Huawei Device Co., Ltd.
+E07726     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+94-A6-7E   (hex)		NETGEAR
+94A67E     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+A8-9A-D7   (hex)		Nokia
+A89AD7     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+48-25-67   (hex)		Poly
+482567     (base 16)		Poly
+				6001 America Center Drive
+				San Jose  CA  95002
+				US
+
+84-F1-47   (hex)		Cisco Systems, Inc
+84F147     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-9F-89   (hex)		Texas Instruments
+249F89     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+24-76-25   (hex)		Texas Instruments
+247625     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F8-7A-41   (hex)		Cisco Systems, Inc
+F87A41     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-39-B8   (hex)		Ciena Corporation
+D439B8     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+30-C3-D9   (hex)		ALPSALPINE CO,.LTD
+30C3D9     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				Kakuda  Miyagi-Pref  981-1595
+				JP
+
+00-1B-FB   (hex)		ALPSALPINE CO,.LTD
+001BFB     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi,
+				Soma-city,  Fukushima-pref.,  976-8501
+				JP
+
+74-E9-BF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+74E9BF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-10-9F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D8109F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-AE-19   (hex)		Roku, Inc
+ACAE19     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+34-FE-C5   (hex)		Shenzhen Sunwoda intelligent hardware Co.,Ltd
+34FEC5     (base 16)		Shenzhen Sunwoda intelligent hardware Co.,Ltd
+				No.6-6,Yan Shan Rd.,Baoan District,Shenzhen City,China
+				Shenzhen  Guangdong  518105
+				CN
+
+A8-F7-66   (hex)		ITE Tech Inc
+A8F766     (base 16)		ITE Tech Inc
+				3F, No.13, Chuangsin 1st Rd., Hsinchu Science Park
+				Hsinchu  Taiwan  30076
+				TW
+
+00-21-3E   (hex)		TomTom International BV
+00213E     (base 16)		TomTom International BV
+				Oosterdoksstraat 114
+				Amsterdam  North Holland  1011 DK
+				NL
+
+68-3E-26   (hex)		Intel Corporate
+683E26     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+8C-55-4A   (hex)		Intel Corporate
+8C554A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+40-1C-83   (hex)		Intel Corporate
+401C83     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+38-FC-98   (hex)		Intel Corporate
+38FC98     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+50-2F-9B   (hex)		Intel Corporate
+502F9B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+F8-5E-A0   (hex)		Intel Corporate
+F85EA0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+A4-6B-B6   (hex)		Intel Corporate
+A46BB6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+FC-0C-45   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+FC0C45     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+54-67-E6   (hex)		SHENZHEN MTC CO LTD
+5467E6     (base 16)		SHENZHEN MTC CO LTD
+				5th Floor, 3rd Building, SHENZHEN MTC Industrial Park, XiaLilang Rd, Nanwan Street, Long’gang District
+				Shenzhen  Guangdong  518100
+				CN
+
+3C-54-47   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C5447     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-6B-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+006B6F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-3D-6E   (hex)		Cisco Systems, Inc
+A03D6E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+70-9C-D1   (hex)		Intel Corporate
+709CD1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+00-0E-B6   (hex)		Riverbed Technology, Inc.
+000EB6     (base 16)		Riverbed Technology, Inc.
+				680 Folsom St
+				San Francisco  CA  94107
+				US
+
+84-44-AF   (hex)		Zhejiang Tmall Technology Co., Ltd.
+8444AF     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+8C-64-D4   (hex)		Hyeco Smart Tech Co.,Ltd
+8C64D4     (base 16)		Hyeco Smart Tech Co.,Ltd
+				12 Beiqian Lane,Industrial Park
+				Suzhou  Jiangsu  215000
+				CN
+
+8C-DE-F9   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+8CDEF9     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+58-AE-2B   (hex)		Huawei Device Co., Ltd.
+58AE2B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-3C-1F   (hex)		Intel Corporate
+D03C1F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+B0-8B-D0   (hex)		Cisco Systems, Inc
+B08BD0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-D7-04   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6CD704     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-3A-D6   (hex)		Samsung Electronics Co.,Ltd
+543AD6     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+54-46-17   (hex)		zte corporation
+544617     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+5C-85-F8   (hex)		SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
+5C85F8     (base 16)		SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
+				7006 Caitian Rd., Futian Dist. 
+				Shen Zhen  Guang Dong  518035
+				CN
+
+14-23-0A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14230A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-AE-A8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+58AEA8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-EC-5B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+48EC5B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+00-77-E4   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+0077E4     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+80-22-78   (hex)		China Mobile IOT Company Limited
+802278     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+90-3C-B3   (hex)		Edgecore Networks Corporation
+903CB3     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+D8-14-DF   (hex)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+D814DF     (base 16)		TCL King Electrical Appliances (Huizhou) Co., Ltd
+				10F, TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan District
+				Shenzhen  Guangdong  518052
+				CN
+
+90-02-7A   (hex)		Shenzhen Sworix Techonlogy Co., Ltd
+90027A     (base 16)		Shenzhen Sworix Techonlogy Co., Ltd
+				Room202, 2nd floor, Jianghao commercial center, Jianghao Industrial area,Jihua road 430, Bantian, Longgang
+				Shenzhen    518129
+				CN
+
+3C-06-A7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+3C06A7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+24-E9-27   (hex)		TomTom International BV
+24E927     (base 16)		TomTom International BV
+				Oosterdoksstraat 114
+				Amsterdam  North Holland  1011 DK
+				NL
+
+84-5C-F3   (hex)		Intel Corporate
+845CF3     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+D0-5A-FD   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+D05AFD     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+58-41-20   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+584120     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+64-D7-C0   (hex)		Huawei Device Co., Ltd.
+64D7C0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+94-60-10   (hex)		Huawei Device Co., Ltd.
+946010     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-79-3D   (hex)		Boditech Med
+2C793D     (base 16)		Boditech Med
+				43, Geodudanji 1-gil, Dongnae-myeon, 
+				Chuncheon-si, Gangwon-do    24398
+				KR
+
+6C-02-E0   (hex)		HP Inc.
+6C02E0     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+24-5B-83   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+245B83     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+F0-F5-64   (hex)		Samsung Electronics Co.,Ltd
+F0F564     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-DC-B2   (hex)		Extreme Networks, Inc.
+00DCB2     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  NH  95119
+				US
+
+6C-13-D5   (hex)		Cisco Systems, Inc
+6C13D5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-08-B0   (hex)		HUBER+SUHNER BKtel GmbH
+0008B0     (base 16)		HUBER+SUHNER BKtel GmbH
+				Benzstraße 4
+				41836 Hückelhoven-Baal  NRW  41836
+				DE
+
+84-DB-9E   (hex)		Pink Nectarine Health AB
+84DB9E     (base 16)		Pink Nectarine Health AB
+				Munkbron 11
+				Stockholm    111 28
+				SE
+
+18-69-D8   (hex)		Tuya Smart Inc.
+1869D8     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+68-AB-BC   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+68ABBC     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+34-C1-03   (hex)		Hangzhou Huamu Technology Co.,Ltd.
+34C103     (base 16)		Hangzhou Huamu Technology Co.,Ltd.
+				Xiangnan village,Yiqiao Town,Xiaoshan District,Hangzhou City,Zhejiang
+				Hangzhou    311256
+				CN
+
+64-13-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6413AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-60-88   (hex)		Intel Corporate
+B06088     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+0C-73-29   (hex)		Sercomm Corporation.
+0C7329     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+5C-C3-36   (hex)		ittim
+5CC336     (base 16)		ittim
+				1202, No.6, Zhongguancun South Street, Haidian District,
+				beijing    100080
+				CN
+
+FC-04-1C   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+FC041C     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+F4-D4-88   (hex)		Apple, Inc.
+F4D488     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-2F-67   (hex)		Apple, Inc.
+682F67     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-3D-E1   (hex)		Huawei Device Co., Ltd.
+003DE1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F0-6F-46   (hex)		Ubiik
+F06F46     (base 16)		Ubiik
+				2F, No. 151, Aikou 1st Street, 
+				Zhubei City  Hsinchu County  302
+				TW
+
+50-ED-3C   (hex)		Apple, Inc.
+50ED3C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-40-09   (hex)		zte corporation
+FC4009     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+24-A6-5E   (hex)		zte corporation
+24A65E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+48-00-7D   (hex)		DTS ELEKTRONIK SAN. TIC. LTD. STI.
+48007D     (base 16)		DTS ELEKTRONIK SAN. TIC. LTD. STI.
+				MAHMUTBEY MAH. 2650.SOK. NO:21
+				ISTANBUL    34218
+				TR
+
+30-B1-B5   (hex)		Arcadyan Corporation
+30B1B5     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+64-07-F6   (hex)		Samsung Electronics Co.,Ltd
+6407F6     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+E0-CB-BC   (hex)		Cisco Meraki
+E0CBBC     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+68-3A-1E   (hex)		Cisco Meraki
+683A1E     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+D8-EC-E5   (hex)		Zyxel Communications Corporation
+D8ECE5     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+C4-70-AB   (hex)		Ruijie Networks Co.,LTD
+C470AB     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+CC-6B-1E   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+CC6B1E     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+F0-D0-8C   (hex)		TCT mobile ltd
+F0D08C     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+84-90-00   (hex)		Arnold&Richter Cine Technik GmbH & Co. Betriebs KG
+849000     (base 16)		Arnold&Richter Cine Technik GmbH & Co. Betriebs KG
+				Herbert-Bayer-Str. 10
+				Munchen  Bavaria  80807
+				DE
+
+30-F9-4B   (hex)		Universal Electronics, Inc.
+30F94B     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+B4-8A-5F   (hex)		Juniper Networks
+B48A5F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+70-DF-F7   (hex)		ARRIS Group, Inc.
+70DFF7     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E0-E8-BB   (hex)		Unicom Vsens Telecommunications Co., Ltd.
+E0E8BB     (base 16)		Unicom Vsens Telecommunications Co., Ltd.
+				Room612,613,615,6Floors,Block3,Hengji center,N0.18 Jianguomen inner Street,Dondcheng Distict, Beijing,P.R.China
+				Beijing    100005
+				CN
+
+E4-C9-0B   (hex)		Radwin
+E4C90B     (base 16)		Radwin
+				Habarzel 27
+				Tel Aviv  -- select --  6971039
+				IL
+
+98-27-82   (hex)		IEEE Registration Authority
+982782     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+38-A0-67   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+38A067     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+7C-1B-93   (hex)		Huawei Device Co., Ltd.
+7C1B93     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-2D-3C   (hex)		Huawei Device Co., Ltd.
+DC2D3C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-11-19   (hex)		IEEE Registration Authority
+041119     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E4-55-A8   (hex)		Cisco Meraki
+E455A8     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+08-81-B2   (hex)		Logitech (China) Technology Co., Ltd
+0881B2     (base 16)		Logitech (China) Technology Co., Ltd
+				1111 Changshou Road
+				Shanghai    200001
+				CN
+
+C4-F1-74   (hex)		eero inc.
+C4F174     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+28-D0-EA   (hex)		Intel Corporate
+28D0EA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E0-0C-E5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E00CE5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-41-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2841EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-00-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C004D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-D3-20   (hex)		ITEL MOBILE LIMITED
+04D320     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+1C-99-57   (hex)		Intel Corporate
+1C9957     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+FC-34-97   (hex)		ASUSTek COMPUTER INC.
+FC3497     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+84-7A-B6   (hex)		AltoBeam (China) Inc.
+847AB6     (base 16)		AltoBeam (China) Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+78-A6-A0   (hex)		Hangzhou Ezviz Software Co.,Ltd.
+78A6A0     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
+				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+48-51-CF   (hex)		Intelbras
+4851CF     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+4C-5D-3C   (hex)		Cisco Systems, Inc
+4C5D3C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+34-73-2D   (hex)		Cisco Systems, Inc
+34732D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+04-7B-CB   (hex)		Universal Global Scientific Industrial Co., Ltd.
+047BCB     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
+				Nan-Tou  Taiwan  54261
+				TW
+
+8C-34-46   (hex)		Huawei Device Co., Ltd.
+8C3446     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+80-47-86   (hex)		Samsung Electronics Co.,Ltd
+804786     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+D4-47-5A   (hex)		ScreenBeam, Inc.
+D4475A     (base 16)		ScreenBeam, Inc.
+				3301 Olcott St
+				Santa Clara  CA  95054
+				US
+
+E4-41-64   (hex)		Nokia
+E44164     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+34-E9-FE   (hex)		Metis Co., Ltd.
+34E9FE     (base 16)		Metis Co., Ltd.
+				25, Saenari-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13509
+				KR
+
+AC-13-9C   (hex)		Adtran Inc
+AC139C     (base 16)		Adtran Inc
+				901 Explorer Blvd.
+				Huntsville  AL  35806-2807
+				US
+
+A4-CE-DA   (hex)		Arcadyan Corporation
+A4CEDA     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+8C-43-61   (hex)		Hailo Digital Hub GmbH & Co. KG
+8C4361     (base 16)		Hailo Digital Hub GmbH & Co. KG
+				Lahnstrasse 3a
+				Giessen  Hessen  35398
+				DE
+
+98-C3-D2   (hex)		Ningbo Sanxing Medical Electric Co.,Ltd
+98C3D2     (base 16)		Ningbo Sanxing Medical Electric Co.,Ltd
+				No.26 FengWan Road,Cicheng Town,Jiangbei District,Ningbo,China 
+				Ningbo    315029
+				CN
+
+24-5D-FC   (hex)		IEEE Registration Authority
+245DFC     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+48-7E-48   (hex)		Earda Technologies co Ltd
+487E48     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+E0-E3-7C   (hex)		Huawei Device Co., Ltd.
+E0E37C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-18-C6   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+2418C6     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+30-78-D3   (hex)		Virgilant Technologies Ltd.
+3078D3     (base 16)		Virgilant Technologies Ltd.
+				2F., No.3, Aly. 19, Lane 8, Tianmu E. Rd.,Shilin Dist., 
+				Taipei City  Taiwan  11153
+				TW
+
+60-18-95   (hex)		Dell Inc.
+601895     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+E8-EA-4D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8EA4D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-FF-D8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3CFFD8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-61-7E   (hex)		Huawei Device Co., Ltd.
+4C617E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-10-7B   (hex)		Texas Instruments
+B4107B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+64-97-14   (hex)		eero inc.
+649714     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+CC-86-EC   (hex)		Silicon Laboratories
+CC86EC     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin    78701
+				US
+
+40-41-01   (hex)		Rockwell Automation
+404101     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+7C-55-A7   (hex)		Kastle Systems
+7C55A7     (base 16)		Kastle Systems
+				6402 Arlington Blvd
+				Falls Church  VA  22042
+				US
+
+40-BE-EE   (hex)		Shenzhen Yunding Information Technology Co.,Ltd
+40BEEE     (base 16)		Shenzhen Yunding Information Technology Co.,Ltd
+				32G, Tower E, CR Land Building, Tong Gu Road 5#, Nanshan District,,Guangdong,CN
+				 Shenzhen  Guangdong  518000
+				CN
+
+A4-4C-62   (hex)		Hangzhou Microimage Software Co., Ltd
+A44C62     (base 16)		Hangzhou Microimage Software Co., Ltd
+				Room 313, Unit B, Building 2, 399 Danfeng Road, Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+FC-E8-06   (hex)		Edifier International
+FCE806     (base 16)		Edifier International
+				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
+				Hong Kong    070
+				CN
+
+F4-C7-95   (hex)		WEY Technology AG
+F4C795     (base 16)		WEY Technology AG
+				Dorfstrasse 57
+				Unterengstringen  Zurich  8103
+				CH
+
+44-B4-62   (hex)		Flextronics Tech.(Ind) Pvt Ltd
+44B462     (base 16)		Flextronics Tech.(Ind) Pvt Ltd
+				365, Benjamin Road
+				Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646
+				IN
+
+F8-D4-78   (hex)		Flextronics Tech.(Ind) Pvt Ltd
+F8D478     (base 16)		Flextronics Tech.(Ind) Pvt Ltd
+				365, Benjamin Road
+				Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646
+				IN
+
+50-C2-ED   (hex)		GN Audio A/S
+50C2ED     (base 16)		GN Audio A/S
+				Lautrupbjerg 7
+				Ballerup    DK-2750
+				DK
+
+90-A8-22   (hex)		Amazon Technologies Inc.
+90A822     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+74-AD-98   (hex)		Cisco Systems, Inc
+74AD98     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+84-8C-8D   (hex)		Apple, Inc.
+848C8D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-5C-B5   (hex)		IEEE Registration Authority
+0C5CB5     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E8-4F-25   (hex)		Murata Manufacturing Co., Ltd.
+E84F25     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+04-25-E0   (hex)		Taicang T&W Electronics
+0425E0     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+30-85-EB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+3085EB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+84-06-FA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+8406FA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+C0-DC-D7   (hex)		Huawei Device Co., Ltd.
+C0DCD7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+30-37-B3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3037B3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-CB-19   (hex)		HP Inc.
+14CB19     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+0C-E4-41   (hex)		Apple, Inc.
+0CE441     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-2A-A9   (hex)		Apple, Inc.
+B82AA9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-64-C0   (hex)		Apple, Inc.
+7864C0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-52-47   (hex)		Huawei Device Co., Ltd.
+385247     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E8-1C-D8   (hex)		Apple, Inc.
+E81CD8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-06-30   (hex)		Apple, Inc.
+3C0630     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-02-28   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+F40228     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+0C-83-CC   (hex)		Alpha Networks Inc.
+0C83CC     (base 16)		Alpha Networks Inc.
+				No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C
+				Hsinchu  Taiwan  300
+				TW
+
+EC-B9-70   (hex)		Ruijie Networks Co.,LTD
+ECB970     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+30-83-98   (hex)		Espressif Inc.
+308398     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F8-89-D2   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+F889D2     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+10-27-F5   (hex)		TP-Link Corporation Limited
+1027F5     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+B0-4F-13   (hex)		Dell Inc.
+B04F13     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+C0-4B-13   (hex)		WonderSound Technology Co., Ltd
+C04B13     (base 16)		WonderSound Technology Co., Ltd
+				10A, Center of Shenmao, News Road 59, Meiling community, Lianhua Street, Futian district
+				Shenzhen    518034
+				CN
+
+9C-7F-81   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+9C7F81     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+C4-BC-D7   (hex)		New Ryatek
+C4BCD7     (base 16)		New Ryatek
+				Room 103, 1st floor, building 19, yard 1, Baosheng South Road, Haidian District, Beijing
+				Beijing  Beijing  100192
+				CN
+
+C0-AE-FD   (hex)		Shenzhen HC-WLAN Technology Co.,Ltd
+C0AEFD     (base 16)		Shenzhen HC-WLAN Technology Co.,Ltd
+				Room 201E, Block D, Donghai Wang Industrial Zone, No. 369, Bulong Road, Bantian Street, Longgang District
+				Shenzhen  Guangdong  518129
+				CN
+
+20-6A-94   (hex)		Hitron Technologies. Inc
+206A94     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+30-95-87   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+309587     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+DC-87-CB   (hex)		Beijing Perfectek Technologies Co., Ltd.
+DC87CB     (base 16)		Beijing Perfectek Technologies Co., Ltd.
+				A-17, No. 101, 6F, Building 24, No. 68, Beiqing Road, Haidian District
+				Beijing  Beijing  100094
+				CN
+
+10-2D-41   (hex)		Sichuan AI-Link Technology Co., Ltd.
+102D41     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+64-27-53   (hex)		Huawei Device Co., Ltd.
+642753     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+7C-F6-66   (hex)		Tuya Smart Inc.
+7CF666     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+28-53-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+28534E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-B0-0A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CB00A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-C0-6A   (hex)		Zahner-Elektrik Ingeborg Zahner-Schiller GmbH & Co. KG.
+00C06A     (base 16)		Zahner-Elektrik Ingeborg Zahner-Schiller GmbH & Co. KG.
+				Thüringer Str. 12
+				Kronach - Gundelsdorf  Bavaria  96317
+				DE
+
+20-1E-88   (hex)		Intel Corporate
+201E88     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+20-CE-2A   (hex)		IEEE Registration Authority
+20CE2A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+58-13-D3   (hex)		Gemtek Technology Co., Ltd.
+5813D3     (base 16)		Gemtek Technology Co., Ltd.
+				No.15-1 Zhonghua Road
+				Hukou  Hsinchu  30352
+				TW
+
+00-E5-E4   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+00E5E4     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+14-69-A2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+1469A2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY, 
+				CHENGDU  SICHUAN  611330
+				CN
+
+04-6B-25   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+046B25     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY, 
+				CHENGDU  SICHUAN  611330
+				CN
+
+10-12-B4   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+1012B4     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY, 
+				CHENGDU  SICHUAN  611330
+				CN
+
+9C-32-A9   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+9C32A9     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+68-26-2A   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+68262A     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+B8-22-4F   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+B8224F     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+90-86-74   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+908674     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+88-C9-B3   (hex)		IEEE Registration Authority
+88C9B3     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C8-BD-69   (hex)		Samsung Electronics Co.,Ltd
+C8BD69     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-3A-B1   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+643AB1     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road, Chengdu, Sichuan
+				Chengdu  Sichuan  610000
+				CN
+
+44-BA-46   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+44BA46     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+A8-76-50   (hex)		Samsung Electronics Co.,Ltd
+A87650     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-D1-7D   (hex)		Samsung Electronics Co.,Ltd
+54D17D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+60-3A-AF   (hex)		Samsung Electronics Co.,Ltd
+603AAF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-48-A5   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+8048A5     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,TianYi International Hotel
+				Chengdu  Sichuan  61000
+				CN
+
+54-66-F9   (hex)		ConMet
+5466F9     (base 16)		ConMet
+				5701 SE Columbia Way
+				Vancouver    WA  98661
+				US
+
+58-91-53   (hex)		China Mobile IOT Company Limited
+589153     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+B8-13-32   (hex)		AMPAK Technology,Inc.
+B81332     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+98-7D-DD   (hex)		China Mobile Group Device Co.,Ltd.
+987DDD     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+44-DB-60   (hex)		Nanjing Baihezhengliu Technology Co., Ltd
+44DB60     (base 16)		Nanjing Baihezhengliu Technology Co., Ltd
+				Science and technology innovation center, Shiqiu street, Lishui District
+				Nanjing  Jiangsu  211222
+				CN
+
+B8-B7-7D   (hex)		Guangdong Transtek Medical Electronics CO.,Ltd
+B8B77D     (base 16)		Guangdong Transtek Medical Electronics CO.,Ltd
+				Zone A, No.105 ,Dongli Road,  Torch Development District  Zhongshan ,  CN  528437 
+				 Zhongshan  Guangdong  528437
+				CN
+
+C4-78-A2   (hex)		Huawei Device Co., Ltd.
+C478A2     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+9C-9E-71   (hex)		Huawei Device Co., Ltd.
+9C9E71     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+0C-9A-3C   (hex)		Intel Corporate
+0C9A3C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+DC-21-48   (hex)		Intel Corporate
+DC2148     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+74-CF-00   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+74CF00     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+2C-EA-DC   (hex)		ASKEY COMPUTER CORP
+2CEADC     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+AC-E1-4F   (hex)		Autonomic Controls, Inc.
+ACE14F     (base 16)		Autonomic Controls, Inc.
+				28 Kaysal Ct
+				ARMONK  NY  10504
+				US
+
+AC-97-6C   (hex)		Greenliant
+AC976C     (base 16)		Greenliant
+				3970 Freedom Circle, Suite 100
+				Santa Clara  CA  95054
+				US
+
+38-14-28   (hex)		Dell Inc.
+381428     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+74-5D-68   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+745D68     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+20-CF-AE   (hex)		Cisco Systems, Inc
+20CFAE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+98-49-9F   (hex)		Domo Tactical Communications
+98499F     (base 16)		Domo Tactical Communications
+				DTC Fusion 2, 1100 Parkway
+				Whiteley  Hampshire  PO15 7AB
+				GB
+
+C0-F9-B0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0F9B0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-8C-4A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+148C4A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-9B-B4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+609BB4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-23-8D   (hex)		Samsung Electronics Co.,Ltd
+C0238D     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+28-11-A8   (hex)		Intel Corporate
+2811A8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C0-FB-F9   (hex)		IEEE Registration Authority
+C0FBF9     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+4C-D5-77   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+4CD577     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+EC-08-E5   (hex)		Motorola Mobility LLC, a Lenovo Company
+EC08E5     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+80-CC-9C   (hex)		NETGEAR
+80CC9C     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+7C-27-BC   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+7C27BC     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+50-70-97   (hex)		China Mobile Group Device Co.,Ltd.
+507097     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+CC-15-31   (hex)		Intel Corporate
+CC1531     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+28-0F-EB   (hex)		LG Innotek
+280FEB     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+74-E2-0C   (hex)		Amazon Technologies Inc.
+74E20C     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+10-54-03   (hex)		INTARSO GmbH
+105403     (base 16)		INTARSO GmbH
+				Schuchardstr. 3
+				Düsseldorf  NRW  40595
+				DE
+
+00-0C-04   (hex)		Tecnova
+000C04     (base 16)		Tecnova
+				2383 N Delany Rd
+				Waukegan  IL  60087-1836
+				US
+
+84-47-09   (hex)		Shenzhen IP3 Century Intelligent Technology CO.,Ltd
+844709     (base 16)		Shenzhen IP3 Century Intelligent Technology CO.,Ltd
+				aiying.li@ip3-tech.com
+				Shenzhen    518057
+				CN
+
+00-91-EB   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+0091EB     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+44-9F-46   (hex)		Huawei Device Co., Ltd.
+449F46     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+34-51-84   (hex)		Huawei Device Co., Ltd.
+345184     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+FC-F7-7B   (hex)		Huawei Device Co., Ltd.
+FCF77B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+8C-AE-DB   (hex)		NAGTECH LLC
+8CAEDB     (base 16)		NAGTECH LLC
+				12A, Krasnolesya Str., off 507
+				Ekaterinburg  Sverdlovskaya oblast  620110
+				RU
+
+DC-F5-6E   (hex)		Wellysis Corp.
+DCF56E     (base 16)		Wellysis Corp.
+				311 Gangnam-daero
+				Seocho-gu  Seoul  06628
+				KR
+
+00-00-60   (hex)		Kontron Europe GmbH
+000060     (base 16)		Kontron Europe GmbH
+				Gutenbergstraße 2
+				Ismaning    85737
+				DE
+
+60-FC-F1   (hex)		Private
+60FCF1     (base 16)		Private
+
+E8-4F-A7   (hex)		Huawei Device Co., Ltd.
+E84FA7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C0-D0-63   (hex)		EM Microelectronic
+C0D063     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+7C-10-C9   (hex)		ASUSTek COMPUTER INC.
+7C10C9     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+00-C0-6F   (hex)		KOMATSU LTD.
+00C06F     (base 16)		KOMATSU LTD.
+				3-25-1, Shinomiya
+				Hiratsuka-Shi  Kanagawa-Ken  254-8555
+				JP
+
+A8-67-1E   (hex)		RATP
+A8671E     (base 16)		RATP
+				117, AVENUE MICHELET
+				SAINT-OUEN    93400
+				FR
+
+8C-E9-B4   (hex)		Zhejiang Dahua Technology Co., Ltd.
+8CE9B4     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+08-85-5B   (hex)		Kontron Europe GmbH
+08855B     (base 16)		Kontron Europe GmbH
+				Gutenbergstraße 2
+				Ismaning    85737
+				DE
+
+E4-B5-03   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+E4B503     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+EC-F4-0C   (hex)		Cisco Systems, Inc
+ECF40C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+10-06-ED   (hex)		Cisco Systems, Inc
+1006ED     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-EB-68   (hex)		Cisco Systems, Inc
+D4EB68     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-4D-84   (hex)		Cisco Systems, Inc
+C44D84     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+20-53-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+205383     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-85-7B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B8857B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+24-21-AB   (hex)		Sony Corporation
+2421AB     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-22-98   (hex)		Sony Corporation
+002298     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-1B-59   (hex)		Sony Corporation
+001B59     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+8C-64-22   (hex)		Sony Corporation
+8C6422     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+B8-F9-34   (hex)		Sony Corporation
+B8F934     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+40-B8-37   (hex)		Sony Corporation
+40B837     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+E0-63-E5   (hex)		Sony Corporation
+E063E5     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+4C-21-D0   (hex)		Sony Corporation
+4C21D0     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+1C-7B-21   (hex)		Sony Corporation
+1C7B21     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-0F-DE   (hex)		Sony Corporation
+000FDE     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+3C-01-EF   (hex)		Sony Corporation
+3C01EF     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+10-2C-EF   (hex)		EMU Electronic AG
+102CEF     (base 16)		EMU Electronic AG
+				Joechlerweg 2
+				Baar  Zug  6340
+				CH
+
+6C-CF-39   (hex)		Guangdong Starfive Technology Co., Ltd.
+6CCF39     (base 16)		Guangdong Starfive Technology Co., Ltd.
+				Room S201, Zone A, No.2 Haoyang Road, Yunlu Community, Daliang Street, Shunde District, Foshan, Guangdong, 528309, China
+				Foshan  Guangdong  528309
+				CN
+
+B4-CD-F5   (hex)		CUB ELECPARTS INC.
+B4CDF5     (base 16)		CUB ELECPARTS INC.
+				No. 6, Lane 546, Sec. 6, Changlu Road
+				Fuhsin Township, Changhua County  Taiwan  50648
+				TW
+
+38-65-B2   (hex)		Apple, Inc.
+3865B2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-DE-3A   (hex)		Apple, Inc.
+D8DE3A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-78-65   (hex)		Apple, Inc.
+E87865     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-4E-CF   (hex)		Apple, Inc.
+A04ECF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-D0-65   (hex)		ESYLUX GmbH
+50D065     (base 16)		ESYLUX GmbH
+				An der Strusbek, 40
+				Ahrensburg  Deutschland  22926
+				DE
+
+08-87-C7   (hex)		Apple, Inc.
+0887C7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-1D-96   (hex)		Intel Corporate
+8C1D96     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+60-DD-8E   (hex)		Intel Corporate
+60DD8E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+90-59-3C   (hex)		AZ-TECHNOLOGY SDN BHD
+90593C     (base 16)		AZ-TECHNOLOGY SDN BHD
+				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
+				PETALING JAYA  SELANGOR  47301
+				MY
+
+1C-C1-0C   (hex)		Intel Corporate
+1CC10C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+F4-A4-75   (hex)		Intel Corporate
+F4A475     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+38-FF-13   (hex)		Joint Stock Company Research Instinite Masshtab
+38FF13     (base 16)		Joint Stock Company Research Instinite Masshtab
+				5A, Kantemirovskaya st.
+				Saint-Petersburg    194100
+				RU
+
+D0-DB-B7   (hex)		Casa Systems
+D0DBB7     (base 16)		Casa Systems
+				18-20 Orion Road Lane Cove West
+				LANE COVE  NSW  2066
+				AU
+
+28-64-EF   (hex)		Shenzhen Fsan Intelligent Technology Co.,Ltd
+2864EF     (base 16)		Shenzhen Fsan Intelligent Technology Co.,Ltd
+				Building 14C, Zhonghaixin Innovation Industry City, Ganli Road, Jihua street,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+C8-9E-43   (hex)		NETGEAR
+C89E43     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+7C-C2-55   (hex)		Super Micro Computer, Inc.
+7CC255     (base 16)		Super Micro Computer, Inc.
+				980 Rock Ave
+				San Jose  CA  95131
+				US
+
+18-07-12   (hex)		Shenzhen Dazoo Technologies CO.,Ltd
+180712     (base 16)		Shenzhen Dazoo Technologies CO.,Ltd
+				Room 501, building B, pinchuanyuan science and technology park, shuidou xinwei village, yousong community, longhua street, longhua district, Shenzhen
+				518000  Shenzhen  518000
+				CN
+
+20-BE-CD   (hex)		eero inc.
+20BECD     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+00-08-AC   (hex)		 BST GmbH
+0008AC     (base 16)		 BST GmbH
+				Remusweg 1
+				Bielefeld  Nordrhein-Westfalen  33729
+				DE
+
+BC-09-1B   (hex)		Intel Corporate
+BC091B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+00-BF-AF   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+00BFAF     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+00-64-AF   (hex)		Dish Technologies Corp
+0064AF     (base 16)		Dish Technologies Corp
+				94 Inverness Terrace E
+				Englewood  CO  80111
+				US
+
+04-EC-D8   (hex)		Intel Corporate
+04ECD8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+F0-2A-2B   (hex)		IEEE Registration Authority
+F02A2B     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D0-49-7C   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+D0497C     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+B4-EC-FF   (hex)		Wuhan IPG Technologies Co., Ltd.
+B4ECFF     (base 16)		Wuhan IPG Technologies Co., Ltd.
+				Room 01, Floor 18, Building 15, No.18 Jinronggang 4th Road,Putian IOT R&D Base (2nd Phase), East Lak
+				Wuhan  HUBEI  430070
+				CN
+
+F0-57-A6   (hex)		Intel Corporate
+F057A6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+64-26-77   (hex)		BKM-Micronic Richtfunkanlagen GmbH
+642677     (base 16)		BKM-Micronic Richtfunkanlagen GmbH
+				Im Steinernen Kreuz 19
+				Wurmberg    75449
+				DE
+
+4C-2F-D7   (hex)		Huawei Device Co., Ltd.
+4C2FD7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D4-74-15   (hex)		Huawei Device Co., Ltd.
+D47415     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-58-6F   (hex)		Huawei Device Co., Ltd.
+50586F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F0-B1-3F   (hex)		Huawei Device Co., Ltd.
+F0B13F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-E6-39   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1CE639     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-D7-78   (hex)		Texas Instruments
+20D778     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+70-07-77   (hex)		OnTarget Technologies, Inc
+700777     (base 16)		OnTarget Technologies, Inc
+				355 Madison Ave
+				New York    10017
+				US
+
+10-F6-05   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+10F605     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+5C-8F-40   (hex)		TECNO MOBILE LIMITED
+5C8F40     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+10-3F-44   (hex)		Xiaomi Communications Co Ltd
+103F44     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+9C-BC-F0   (hex)		Xiaomi Communications Co Ltd
+9CBCF0     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+50-98-39   (hex)		Xiaomi Communications Co Ltd
+509839     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+74-15-75   (hex)		Xiaomi Communications Co Ltd
+741575     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+9C-5A-81   (hex)		Xiaomi Communications Co Ltd
+9C5A81     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+5C-D0-6E   (hex)		Xiaomi Communications Co Ltd
+5CD06E     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+90-F1-57   (hex)		Garmin International
+90F157     (base 16)		Garmin International
+				1200 E. 151st St
+				Olathe  KS  66062
+				US
+
+FC-5C-45   (hex)		Ruckus Wireless
+FC5C45     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+4C-02-20   (hex)		Xiaomi Communications Co Ltd
+4C0220     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+40-E1-E4   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+40E1E4     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+E4-46-B0   (hex)		Fujitsu Client Computing Limited
+E446B0     (base 16)		Fujitsu Client Computing Limited
+				1-1-2 Kashimada, Saiwai-ku
+				Kawasaki  Kanagawa  212-0058
+				JP
+
+80-CB-BC   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+80CBBC     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+E0-75-AA   (hex)		Beijing Jingling Information System Technology Co., Ltd.
+E075AA     (base 16)		Beijing Jingling Information System Technology Co., Ltd.
+				2002.2nd Floor, A 36, Haidian Street, Haidian District
+				Beijing    100080
+				CN
+
+F4-CE-48   (hex)		Extreme Networks, Inc.
+F4CE48     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+58-48-49   (hex)		IEEE Registration Authority
+584849     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+70-89-76   (hex)		Tuya Smart Inc.
+708976     (base 16)		Tuya Smart Inc.
+				FLAT/RM 806 BLK ? 8/F CHEUNG SHA WAN PLAZA 833 CHEUNG SHA WAN ROAD KL
+				hongkong  Hong Kong  999077
+				CN
+
+08-99-E8   (hex)		KEMAS GmbH
+0899E8     (base 16)		KEMAS GmbH
+				Wüstenbrander Str. 9
+				Oberlungwitz    09353
+				DE
+
+18-F8-7F   (hex)		Wha Yu Industrial Co., Ltd.
+18F87F     (base 16)		Wha Yu Industrial Co., Ltd.
+				No.326, Sec 2. Kung Tao 5 Road
+				HsinChu City  Taiwan  30070
+				TW
+
+44-4F-8E   (hex)		WiZ
+444F8E     (base 16)		WiZ
+				Unit 1203-5, 12/F, Tower 1, Enterprise Square, 9 Sheung Yuet Road
+				Kowloon Bay  Hong Kong  0000
+				HK
+
+EC-35-4D   (hex)		Wingtech Mobile Communications Co.,Ltd
+EC354D     (base 16)		Wingtech Mobile Communications Co.,Ltd
+				No.777,Yazhong Road,Nanhu District
+				Jiaxing  Zhejiang  314001
+				CN
+
+80-61-5F   (hex)		Beijing Sinead Technology Co., Ltd. 
+80615F     (base 16)		Beijing Sinead Technology Co., Ltd. 
+				Room 504,Block A, New material Building, Yongfeng industrial, Haiding District, Beijing.China
+				Beijing  Beijing  100094
+				CN
+
+44-AE-44   (hex)		Huawei Device Co., Ltd.
+44AE44     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+20-B0-01   (hex)		Technicolor Delivery Technologies Belgium NV
+20B001     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+7C-39-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C3985     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-B1-E9   (hex)		Technicolor Delivery Technologies Belgium NV
+A4B1E9     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+30-56-96   (hex)		Infinix mobility limited
+305696     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+7C-B0-73   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+7CB073     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+B0-E9-FE   (hex)		Woan Technology (Shenzhen) Co., Ltd.
+B0E9FE     (base 16)		Woan Technology (Shenzhen) Co., Ltd.
+				1-2F, Building B4, Yintian Industrial Zone, Yantian Community, Xixiang Street, Bao'an District, Shenzhen, Guangdong, P.R.China
+				Shenzhen  Guangdong  518102
+				CN
+
+00-BD-3E   (hex)		Vizio, Inc
+00BD3E     (base 16)		Vizio, Inc
+				39 Tesla
+				Irvine  CA  92618
+				US
+
+C8-96-65   (hex)		Microsoft Corporation
+C89665     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+0C-E5-A3   (hex)		SharkNinja
+0CE5A3     (base 16)		SharkNinja
+				85 Cude Ln
+				Madison  TN  37115
+				US
+
+40-91-51   (hex)		Espressif Inc.
+409151     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+CC-3F-8A   (hex)		KOMATSU LTD.
+CC3F8A     (base 16)		KOMATSU LTD.
+				3-25-1, Shinomiya
+				Hiratsuka-Shi  Kanagawa-Ken  254-8555
+				JP
+
+34-31-7F   (hex)		Panasonic Appliances Company
+34317F     (base 16)		Panasonic Appliances Company
+				2-3-1-2 Noji-higashi
+				Kusatsu City  Shiga  525-8555
+				JP
+
+10-00-20   (hex)		Apple, Inc.
+100020     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-64-24   (hex)		Aruba, a Hewlett Packard Enterprise Company
+946424     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+BC-1E-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC1E85     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-56-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B85600     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-59-CE   (hex)		Earda Technologies co Ltd
+B859CE     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+8C-7A-3D   (hex)		Xiaomi Communications Co Ltd
+8C7A3D     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+30-5F-77   (hex)		New H3C Technologies Co., Ltd
+305F77     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+7C-24-99   (hex)		Apple, Inc.
+7C2499     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-7A-AA   (hex)		Apple, Inc.
+8C7AAA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-36-F8   (hex)		Hyundai Kefico
+9C36F8     (base 16)		Hyundai Kefico
+				102, Gosan-ro
+				 Gunpo-si  Gyeonggi-do  15849
+				KR
+
+E0-B7-2E   (hex)		ShenZhen Qualmesh Technology Co.,Ltd.
+E0B72E     (base 16)		ShenZhen Qualmesh Technology Co.,Ltd.
+				Room 03, 10th floor, building 1, kaidar group center building, 168 Tongsha Road, Xinwei community, Xili street, Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+04-42-1A   (hex)		ASUSTek COMPUTER INC.
+04421A     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+2C-E0-32   (hex)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
+2CE032     (base 16)		TCL King Electrical Appliances(Huizhou)Co.,Ltd
+				B Area, 10th floor, TCL multimedia Building, TCL International E City, #1001 Zhonshanyuan road,Shenzhen
+				guangdong  China  518058
+				CN
+
+A0-D2-B1   (hex)		Amazon Technologies Inc.
+A0D2B1     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+80-6D-71   (hex)		Amazon Technologies Inc.
+806D71     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+08-16-05   (hex)		Vodafone Italia S.p.A.
+081605     (base 16)		Vodafone Italia S.p.A.
+				Via Lorenteggio nr. 240
+				Milan  Italy  20147
+				IT
+
+20-7C-14   (hex)		Qotom
+207C14     (base 16)		Qotom
+				Huafeng Intelligence Valley, Hangcheng Street
+				Shenzhen  GuangDong  518000
+				CN
+
+1C-53-F9   (hex)		Google, Inc.
+1C53F9     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+2C-B0-FD   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+2CB0FD     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+				Chudong science and technology park, 111 shaxin road, tangxia town,
+				dongguan city  guangdong province  523710
+				CN
+
+C4-FB-C8   (hex)		Shenzhen Candour Co., Ltd.
+C4FBC8     (base 16)		Shenzhen Candour Co., Ltd.
+				Room 1501,East Building,Skyworth Semiconductor Building ,No.18,Gaoxin South 4th Road,Nanshan District
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+E8-01-15   (hex)		COOCAA Network Technology CO.,TD.
+E80115     (base 16)		COOCAA Network Technology CO.,TD.
+				306, east block, Skyworth semiconductor design building, 18 Gaoxin South 4th Road, Gaoxin community, Yuehai street, Nanshan District, Shenzhen
+				shenzhen    0755-27357001
+				CN
+
+8C-EA-12   (hex)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+8CEA12     (base 16)		Shenzhen MiaoMing  Intelligent Technology Co.,Ltd
+				Chudong science and technology park, 111 shaxin road, tangxia town,
+				dongguan city  guangdong province  523710
+				CN
+
+88-AC-9E   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+88AC9E     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+C8-BD-4D   (hex)		Samsung Electronics Co.,Ltd
+C8BD4D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+2C-15-BF   (hex)		Samsung Electronics Co.,Ltd
+2C15BF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+3C-E4-B0   (hex)		Texas Instruments
+3CE4B0     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B4-B0-24   (hex)		TP-Link Corporation Limited
+B4B024     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+18-F2-2C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+18F22C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+98-97-CC   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+9897CC     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+04-38-55   (hex)		SCOPUS INTERNATIONAL-BELGIUM
+043855     (base 16)		SCOPUS INTERNATIONAL-BELGIUM
+				A-46, Ground floor, Pandav Nagar, Ganesh ngr complex, 
+				New Delhi  Delhi  110092
+				IN
+
+E8-97-9A   (hex)		Quectel Wireless Solutions Co.,Ltd.
+E8979A     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+5C-A6-E6   (hex)		TP-Link Corporation Limited
+5CA6E6     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+B8-8A-72   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+B88A72     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+C4-36-C0   (hex)		BUFFALO.INC
+C436C0     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+2C-53-D7   (hex)		Sonova AG
+2C53D7     (base 16)		Sonova AG
+				Laubisruetistrasse 28
+				Staefa    8712
+				CH
+
+0C-C4-13   (hex)		Google, Inc.
+0CC413     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+D4-8F-A2   (hex)		Huawei Device Co., Ltd.
+D48FA2     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+88-81-B9   (hex)		Huawei Device Co., Ltd.
+8881B9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+74-63-C2   (hex)		Huawei Device Co., Ltd.
+7463C2     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+3C-38-F4   (hex)		Sony Corporation
+3C38F4     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+DC-A7-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DCA782     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-51-70   (hex)		Zhongshan K-mate General Electronics Co.,Ltd
+045170     (base 16)		Zhongshan K-mate General Electronics Co.,Ltd
+				NO.2 ,5th Xinsheng Street,East Mu He Jing Road, Gangkou Town
+				Zhongshan  Guangdong  528447
+				CN
+
+38-45-54   (hex)		Harman/Becker Automotive Systems GmbH
+384554     (base 16)		Harman/Becker Automotive Systems GmbH
+				Becker-Göring-Straße 16
+				Karlsbad  Baden-Württemberg  76307
+				DE
+
+88-D8-2E   (hex)		Intel Corporate
+88D82E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-0E-AC   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+180EAC     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+4C-EA-AE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4CEAAE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+50-54-7B   (hex)		Nanjing Qinheng Microelectronics Co., Ltd.
+50547B     (base 16)		Nanjing Qinheng Microelectronics Co., Ltd.
+				No.18, Ningshuang Road
+				 Nanjing  Jiangsu  210012
+				CN
+
+14-49-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+144920     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-1A-D1   (hex)		Zyxel Communications Corporation
+D41AD1     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+B8-45-F4   (hex)		New H3C Technologies Co., Ltd
+B845F4     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+EC-01-D5   (hex)		Cisco Systems, Inc
+EC01D5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+90-F3-B8   (hex)		China Mobile Group Device Co.,Ltd.
+90F3B8     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+38-56-3D   (hex)		Microsoft Corporation
+38563D     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+10-BC-97   (hex)		vivo Mobile Communication Co., Ltd.
+10BC97     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+CC-81-2A   (hex)		vivo Mobile Communication Co., Ltd.
+CC812A     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+9C-82-81   (hex)		vivo Mobile Communication Co., Ltd.
+9C8281     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+B8-D4-3E   (hex)		vivo Mobile Communication Co., Ltd.
+B8D43E     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+0C-60-46   (hex)		vivo Mobile Communication Co., Ltd.
+0C6046     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+8C-67-94   (hex)		vivo Mobile Communication Co., Ltd.
+8C6794     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+08-B4-9D   (hex)		TECNO MOBILE LIMITED
+08B49D     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+28-93-7D   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+28937D     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+98-7E-E3   (hex)		vivo Mobile Communication Co., Ltd.
+987EE3     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+D4-C3-B0   (hex)		Gearlinx Pty Ltd
+D4C3B0     (base 16)		Gearlinx Pty Ltd
+				518 Haven Road, Haven Road
+				Upper Brookfield  QLD  4069
+				AU
+
+E0-70-EA   (hex)		HP Inc.
+E070EA     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+94-29-57   (hex)		Airpo Networks Technology Co.,Ltd.
+942957     (base 16)		Airpo Networks Technology Co.,Ltd.
+				Room 209,Building 3, Jianda Industrial Park, Xin an San Lu, Baoan District,
+				shenzhen  GuangDong  518000
+				CN
+
+40-5F-7D   (hex)		TCT mobile ltd
+405F7D     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+4C-03-4F   (hex)		Intel Corporate
+4C034F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+04-D9-21   (hex)		Occuspace
+04D921     (base 16)		Occuspace
+				302 Washington Street Suite 315
+				San Diego  CA  92103
+				US
+
+98-6E-E8   (hex)		IEEE Registration Authority
+986EE8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+1C-73-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C73E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-83-E8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8C83E8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-57-E5   (hex)		Beijing Royaltech Co.,Ltd
+6457E5     (base 16)		Beijing Royaltech Co.,Ltd
+				201, building 7, Boya CC4 courtyard, Life Science Park, Beiqing Road, Changping District, Beijing
+				Beijing    100000
+				CN
+
+FC-9B-D4   (hex)		EdgeQ
+FC9BD4     (base 16)		EdgeQ
+				2550 Great America Way, STE 325
+				Santa Clara  CA  95054
+				US
+
+14-57-90   (hex)		Qingdao Haier Technology Co.,Ltd
+145790     (base 16)		Qingdao Haier Technology Co.,Ltd
+				Building A01,Haier Information Park, No.1 Haier Road,
+				Qingdao  Shandong  266101
+				CN
+
+F8-29-C0   (hex)		Availink, Inc.
+F829C0     (base 16)		Availink, Inc.
+				Scotia Centre P.O. Box 268GT,Grand Cayman, Cayman Islands
+				Grand Cayman  Grand Cayman  999159
+				KY
+
+24-B7-2A   (hex)		China Dragon Technology Limited
+24B72A     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+34-A5-B4   (hex)		NAVTECH PTE LTD
+34A5B4     (base 16)		NAVTECH PTE LTD
+				101 CECIL STREET
+				SINGAPORE    437872
+				SG
+
+E8-9F-6D   (hex)		Espressif Inc.
+E89F6D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+98-77-CB   (hex)		Vorteks ED
+9877CB     (base 16)		Vorteks ED
+				Mirkovci, Street 2, number 142a
+				Skopje    1000
+				MK
+
+34-98-B5   (hex)		NETGEAR
+3498B5     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+38-94-61   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+389461     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+48-55-19   (hex)		Espressif Inc.
+485519     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F8-FC-E1   (hex)		Amazon Technologies Inc.
+F8FCE1     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+70-32-17   (hex)		Intel Corporate
+703217     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-59-F5   (hex)		Cisco Systems, Inc
+1859F5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+14-C9-CF   (hex)		Sigmastar Technology Ltd.
+14C9CF     (base 16)		Sigmastar Technology Ltd.
+				15th Floor ,Unit A,Chuangxin Building, Software Park, Xiamen Torch Hi-Tech Industrial Development Zone, Xiamen,China
+				Xiamen City  Fujian Province  361001
+				CN
+
+DC-62-94   (hex)		Guangzhou Lango Electronics Technology Co.,Ltd.
+DC6294     (base 16)		Guangzhou Lango Electronics Technology Co.,Ltd.
+				Room 238, Room 406, No. 1, Yichuang Street, Huangpu District
+				Guangzhou  Guangdong  510336
+				CN
+
+5C-46-B0   (hex)		SIMCom Wireless Solutions Limited
+5C46B0     (base 16)		SIMCom Wireless Solutions Limited
+				SIMCom Headquarters Building, Building 3, No. 289 Linhong Road, Changning District, Shanghai P.R. China
+				Shanghai    200335
+				CN
+
+3C-21-9C   (hex)		Intel Corporate
+3C219C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+EC-42-69   (hex)		HMD Global Oy
+EC4269     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+28-1D-21   (hex)		IN ONE SMART TECHNOLOGY(H,K,)LIMITED
+281D21     (base 16)		IN ONE SMART TECHNOLOGY(H,K,)LIMITED
+				UNIT I 1/F MAU LAM COMM BLDG 16-18 MAU LAM ST JORDAN KL HK
+				HONGKONG    999077
+				HK
+
+74-E3-36   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+74E336     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+B0-73-9C   (hex)		Amazon Technologies Inc.
+B0739C     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+C4-34-5B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4345B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-BA-20   (hex)		Silicon Laboratories
+84BA20     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+00-3C-84   (hex)		Silicon Laboratories
+003C84     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+C0-2C-5C   (hex)		Apple, Inc.
+C02C5C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-57-63   (hex)		Apple, Inc.
+D45763     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-3E-5E   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+483E5E     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+50-EB-F6   (hex)		ASUSTek COMPUTER INC.
+50EBF6     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+C4-48-FA   (hex)		Taicang T&W Electronics
+C448FA     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+A8-98-92   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A89892     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+E0-72-0A   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+E0720A     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+60-FF-12   (hex)		Samsung Electronics Co.,Ltd
+60FF12     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-C6-13   (hex)		Samsung Electronics Co.,Ltd
+24C613     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-E1-29   (hex)		Samsung Electronics Co.,Ltd
+94E129     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-A0-D6   (hex)		ChengDu TD Tech
+D0A0D6     (base 16)		ChengDu TD Tech
+				C3 floor, software park, No. 219, Tianhua Second Road
+				Chengdu  Tianfu Avenue, high tech Zone  610041
+				CN
+
+24-D9-04   (hex)		Sichuan Changhong Network Technologies Co., Ltd.
+24D904     (base 16)		Sichuan Changhong Network Technologies Co., Ltd.
+				#35, East Mianxing Road, Hi-Tech Park
+				Mianyang  Sichuan  621000
+				CN
+
+90-27-59   (hex)		Nanjing Jiahao Technology Co., Ltd.
+902759     (base 16)		Nanjing Jiahao Technology Co., Ltd.
+				Moling Industrial Park, Development Zone, Jiangning, Nanjing
+				Nanjing  Jiangsu  211111
+				CN
+
+00-13-CA   (hex)		ATX
+0013CA     (base 16)		ATX
+				8-1602 Tricont Avenue
+				Whitby  ON  L1N 7C3
+				CA
+
+28-04-C6   (hex)		Wanan Hongsheng Electronic Co.Ltd
+2804C6     (base 16)		Wanan Hongsheng Electronic Co.Ltd
+				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
+				Wanan  China/jiangxi  343800
+				CN
+
+D4-79-54   (hex)		Huawei Device Co., Ltd.
+D47954     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-4F-96   (hex)		Alps Alpine
+C44F96     (base 16)		Alps Alpine
+				20-1, Yoshima Industrial Park
+				Iwaki  Fukushima  970-1192
+				JP
+
+68-58-11   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+685811     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+C8-39-AC   (hex)		Huawei Device Co., Ltd.
+C839AC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+14-55-94   (hex)		Huawei Device Co., Ltd.
+145594     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+08-C0-6C   (hex)		Huawei Device Co., Ltd.
+08C06C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+FC-02-96   (hex)		Xiaomi Communications Co Ltd
+FC0296     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+60-E8-5B   (hex)		Texas Instruments
+60E85B     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B4-BA-02   (hex)		Agatel Ltd
+B4BA02     (base 16)		Agatel Ltd
+				Apex House, Calthrope Road
+				Birmingham  —  B15 1TR
+				GB
+
+14-EB-B6   (hex)		TP-Link Corporation Limited
+14EBB6     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+54-AF-97   (hex)		TP-Link Corporation Limited
+54AF97     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+54-CF-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54CF8D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-63-D9   (hex)		ARRIS Group, Inc.
+F863D9     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A4-05-D6   (hex)		ARRIS Group, Inc.
+A405D6     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+DC-A6-33   (hex)		ARRIS Group, Inc.
+DCA633     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+18-45-B3   (hex)		IEEE Registration Authority
+1845B3     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+EC-E7-44   (hex)		Omntec mfg. inc
+ECE744     (base 16)		Omntec mfg. inc
+				2420 Pond Road.
+				Ronkonkoma  NY  11779
+				US
+
+2C-4D-DE   (hex)		TECNO MOBILE LIMITED
+2C4DDE     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+30-3F-7B   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+303F7B     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+D4-84-57   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+D48457     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+D8-CF-BF   (hex)		Motorola Mobility LLC, a Lenovo Company
+D8CFBF     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+D4-88-66   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D48866     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-C0-9B   (hex)		Tellabs Enterprise, Inc.
+00C09B     (base 16)		Tellabs Enterprise, Inc.
+				4240 International Parkway  Suite 105
+				Carrollton  TX  75007
+				US
+
+68-BE-49   (hex)		Nebula Matrix
+68BE49     (base 16)		Nebula Matrix
+				24/F Ahoke Aurora Plaza, Zhongmei RD, Longhua Dist.
+				Shenzhen  Guangdong  518000
+				CN
+
+94-0D-2D   (hex)		Universal Electronics, Inc.
+940D2D     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+94-F8-27   (hex)		Shanghai Imilab Technology Co.Ltd
+94F827     (base 16)		Shanghai Imilab Technology Co.Ltd
+				29F, A Tower, New Caohejing International Business Center, Guiping Road, Xuhui District
+				Shanghai  Shanghai  200000
+				CN
+
+F0-B0-40   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+F0B040     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+48-2F-6B   (hex)		Aruba, a Hewlett Packard Enterprise Company
+482F6B     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+74-86-E2   (hex)		Dell Inc.
+7486E2     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+A8-8C-3E   (hex)		Microsoft Corporation
+A88C3E     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+34-CE-69   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+34CE69     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+70-B8-F6   (hex)		Espressif Inc.
+70B8F6     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+14-9E-5D   (hex)		JSC IB Reform
+149E5D     (base 16)		JSC IB Reform
+				Varshavskoe shosse, 125, bld. 1, s. 3, fl. 6, room 10/23
+				Moscow    117587
+				RU
+
+F8-25-51   (hex)		Seiko Epson Corporation
+F82551     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+E4-84-D3   (hex)		Xiaomi Communications Co Ltd
+E484D3     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+04-10-6B   (hex)		Xiaomi Communications Co Ltd
+04106B     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+04-CC-BC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04CCBC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-E5-04   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1CE504     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-0B-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C0BAB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-A2-5A   (hex)		Shanghai Mo xiang Network Technology CO.,ltd
+E0A25A     (base 16)		Shanghai Mo xiang Network Technology CO.,ltd
+				Room#418-421, ShaHeXiLi, 2-2 XiLi North Road, LiCheng Community, Xili Street, NanShan District, Shenzhen City
+				Shenzhen  Guangdong  518071
+				CN
+
+14-7E-A1   (hex)		Britania Eletrônicos S.A.
+147EA1     (base 16)		Britania Eletrônicos S.A.
+				Dona Francisca St. 12340, Pirabeiraba
+				Joinville  Santa Catarina  89239-270
+				BR
+
+E8-16-56   (hex)		Hangzhou BroadLink Technology Co.,Ltd
+E81656     (base 16)		Hangzhou BroadLink Technology Co.,Ltd
+				Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China
+				Hangzhou  Zhejiang  310052
+				CN
+
+94-D2-BC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94D2BC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-53-A8   (hex)		ACL Airshop BV
+7453A8     (base 16)		ACL Airshop BV
+				Kantoorweg 7
+				West Knollendam  NH  1525 RJ
+				NL
+
+68-C8-EB   (hex)		Rockwell Automation
+68C8EB     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+20-1F-54   (hex)		Raisecom Technology CO., LTD
+201F54     (base 16)		Raisecom Technology CO., LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+7C-97-E1   (hex)		Huawei Device Co., Ltd.
+7C97E1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-3E-9E   (hex)		Huawei Device Co., Ltd.
+C83E9E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+60-DD-70   (hex)		Apple, Inc.
+60DD70     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-A5-F9   (hex)		Apple, Inc.
+98A5F9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-D0-45   (hex)		Intel Corporate
+E0D045     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+00-0C-36   (hex)		S-Takaya Electronics Industry Co.,Ltd.
+000C36     (base 16)		S-Takaya Electronics Industry Co.,Ltd.
+				3121-1 Satomi Satosyo-cho
+				Asakuchi-gun  Okayama  719-0301
+				JP
+
+EC-A9-07   (hex)		Apple, Inc.
+ECA907     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-87-BA   (hex)		TP-Link Corporation Limited
+2887BA     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+34-60-F9   (hex)		TP-Link Corporation Limited
+3460F9     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+64-25-EC   (hex)		guangdong kesheng zhixun technology 
+6425EC     (base 16)		guangdong kesheng zhixun technology 
+				1603?building B,kupai building,high-tech Industrial park,Nanshan district,shengzhen
+				shengzhen  guangdong  518000
+				CN
+
+68-4A-E9   (hex)		Samsung Electronics Co.,Ltd
+684AE9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-50-E8   (hex)		Nomadix, Inc
+0050E8     (base 16)		Nomadix, Inc
+				21600 Oxnard St. 19th Floor, 
+				Woodland Hills  CA  91367
+				US
+
+54-AC-FC   (hex)		LIZN ApS
+54ACFC     (base 16)		LIZN ApS
+				Stejlbjergparken 37
+				Vejle    7120
+				DK
+
+F4-B8-98   (hex)		Texas Instruments
+F4B898     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B0-D2-78   (hex)		Texas Instruments
+B0D278     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A4-39-B3   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+A439B3     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+6C-FF-CE   (hex)		Sagemcom Broadband SAS
+6CFFCE     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C8-99-B2   (hex)		Arcadyan Corporation
+C899B2     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+B0-38-93   (hex)		Onda TLC GmbH
+B03893     (base 16)		Onda TLC GmbH
+				Lakeside Science and Technology Park B13a
+				Klagenfurt    9020
+				AT
+
+1C-9D-72   (hex)		Technicolor CH USA Inc.
+1C9D72     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+0C-B8-15   (hex)		Espressif Inc.
+0CB815     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+80-0C-F9   (hex)		Amazon Technologies Inc.
+800CF9     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+A0-92-08   (hex)		Tuya Smart Inc.
+A09208     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+C8-72-7E   (hex)		Nokia
+C8727E     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-F8-71   (hex)		Demant A/S
+00F871     (base 16)		Demant A/S
+				Kongebakken 9
+				Smørum    2765
+				DK
+
+60-A6-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60A6C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-8C-86   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+208C86     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-A9-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F0A951     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-D6-9A   (hex)		Intel Corporate
+64D69A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-5E-0B   (hex)		zte corporation
+185E0B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D0-BB-61   (hex)		zte corporation
+D0BB61     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+AC-73-52   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+AC7352     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+58-8F-CF   (hex)		Hangzhou Ezviz Software Co.,Ltd.
+588FCF     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
+				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+A8-4F-B1   (hex)		Cisco Systems, Inc
+A84FB1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-C2-75   (hex)		GN Audio A/S
+50C275     (base 16)		GN Audio A/S
+				Lautrupbjerg 7
+				Ballerup    DK-2750
+				DK
+
+94-B5-55   (hex)		Espressif Inc.
+94B555     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+74-F2-FA   (hex)		Xiaomi Communications Co Ltd
+74F2FA     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+3C-E9-F7   (hex)		Intel Corporate
+3CE9F7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+F4-CE-23   (hex)		Intel Corporate
+F4CE23     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+5C-84-3C   (hex)		Sony Interactive Entertainment Inc.
+5C843C     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+E8-AE-C5   (hex)		Arista Networks
+E8AEC5     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+40-17-F6   (hex)		TKH SECURITY,S.L.U.
+4017F6     (base 16)		TKH SECURITY,S.L.U.
+				Calle Paquiro, 32
+				Málaga  Málaga  29006
+				ES
+
+00-40-58   (hex)		UKG
+004058     (base 16)		UKG
+				900 Chelmsford Street
+				Lowell  MA  01851
+				US
+
+2C-30-1A   (hex)		Technicolor CH USA Inc for Telus
+2C301A     (base 16)		Technicolor CH USA Inc for Telus
+				4855 Peachtree Industrial Blvd, #200
+				Norcross  GA  30092
+				US
+
+E8-C7-CF   (hex)		Wistron Neweb Corporation
+E8C7CF     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+C0-49-EF   (hex)		Espressif Inc.
+C049EF     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+EC-E7-A7   (hex)		Intel Corporate
+ECE7A7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E4-2B-79   (hex)		Nokia
+E42B79     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+C8-14-B4   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+C814B4     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+00-19-8E   (hex)		Demant A/S
+00198E     (base 16)		Demant A/S
+				Kongebakken 9
+				Smørum    2765
+				DK
+
+00-0B-44   (hex)		Concord Idea Corp.
+000B44     (base 16)		Concord Idea Corp.
+				498 Markland Street, Unit 2
+				Markham  Ontario  L6C 1Z6
+				CA
+
+60-FB-00   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+60FB00     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+CC-5C-61   (hex)		Huawei Device Co., Ltd.
+CC5C61     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-F4-2B   (hex)		Huawei Device Co., Ltd.
+1CF42B     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+6C-51-BF   (hex)		Huawei Device Co., Ltd.
+6C51BF     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-92-00   (hex)		FiRa Consortium
+D09200     (base 16)		FiRa Consortium
+				3855 SW 153RD Drive
+				Beaverton  OR  97003
+				US
+
+E8-93-F3   (hex)		Graphiant Inc
+E893F3     (base 16)		Graphiant Inc
+				760 Navajo Way
+				Fremont  CA  94539
+				US
+
+28-02-44   (hex)		Apple, Inc.
+280244     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-5F-02   (hex)		Apple, Inc.
+E85F02     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-F6-2D   (hex)		Juniper Networks
+E0F62D     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+BC-DF-58   (hex)		Google, Inc.
+BCDF58     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+7C-C1-80   (hex)		Apple, Inc.
+7CC180     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-D0-4C   (hex)		Eseye Design Ltd
+00D04C     (base 16)		Eseye Design Ltd
+				20 Nugent Road, The Surrey Research Park
+				Surrey  Guildford  GU2 7AF
+				GB
+
+BC-60-6B   (hex)		Shanghai Baud Data Communication Co.,Ltd.
+BC606B     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
+				NO.123 JULI RD
+				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
+				CN
+
+DC-FE-23   (hex)		Murata Manufacturing Co., Ltd.
+DCFE23     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+34-73-79   (hex)		xFusion Digital Technologies Co., Limited
+347379     (base 16)		xFusion Digital Technologies Co., Limited
+				9th Floor, Building 1, Zensun Boya Square, Longzihu Wisdom Island, Zhengdong New District
+				Zhengzhou  Henan  450000
+				CN
+
+04-E6-9E   (hex)		ZHONGGUANCUN XINHAIZEYOU TECHNOLOGY CO.,LTD
+04E69E     (base 16)		ZHONGGUANCUN XINHAIZEYOU TECHNOLOGY CO.,LTD
+				13th Floor,Unit3,Building2,IC Park,NO.9 FengHao East Road, Haidian District
+				Beijing  Beijing  100094
+				CN
+
+7C-8A-C0   (hex)		EVBox BV
+7C8AC0     (base 16)		EVBox BV
+				Kabelweg 47
+				Amsterdam  Noord holland  1014 BA
+				NL
+
+AC-80-AE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+AC80AE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+D8-3D-CC   (hex)		shenzhen UDD Technologies,co.,Ltd
+D83DCC     (base 16)		shenzhen UDD Technologies,co.,Ltd
+				Unit D, 6th Floor, Jialitai Bldg., No.45 Yanshan Road, Shekou, Nanshan District, Shenzhen, China
+				shenzhen  guangdong  51800
+				CN
+
+04-17-B6   (hex)		Smart Innovation LLC
+0417B6     (base 16)		Smart Innovation LLC
+				7F,Tower B,Jianxing
+				ShenZhen  GuangZhou  518055
+				CN
+
+CC-60-C8   (hex)		Microsoft Corporation
+CC60C8     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+00-EB-D8   (hex)		MERCUSYS TECHNOLOGIES CO., LTD.
+00EBD8     (base 16)		MERCUSYS TECHNOLOGIES CO., LTD.
+				3F,Zone B,Building R1,High-Tech Industrial Village,No.023 High-Tech South 4 Road,Nanshan,Shenzhen
+				Shenzhen  Guangdong  518057
+				CN
+
+6C-8D-77   (hex)		Cisco Systems, Inc
+6C8D77     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-11-B2   (hex)		Cisco Systems, Inc
+7411B2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+EC-7C-5C   (hex)		Juniper Networks
+EC7C5C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+10-54-D2   (hex)		IEEE Registration Authority
+1054D2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-10-43   (hex)		A2 CORPORATION
+001043     (base 16)		A2 CORPORATION
+				1-7-1 Togoshi
+				Tokyo  Shinagawa-ku  1420041
+				JP
+
+C4-DF-39   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+C4DF39     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+80-97-33   (hex)		 Shenzhen Elebao Technology Co., Ltd
+809733     (base 16)		 Shenzhen Elebao Technology Co., Ltd
+				F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District
+				shenzhen  GUANGDONG  518126
+				CN
+
+F4-6D-2F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F46D2F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+00-A2-65   (hex)		M2Motive Technology Inc.
+00A265     (base 16)		M2Motive Technology Inc.
+				Room 402,No. 125 North Jiangsu Road, Changning District
+				Shanghai  Shanghai  200042
+				CN
+
+D8-36-5F   (hex)		Intelbras
+D8365F     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+74-04-F1   (hex)		Intel Corporate
+7404F1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+00-04-35   (hex)		InfiNet LLC
+000435     (base 16)		InfiNet LLC
+				Office 425, 69/75 Vavilova str.
+				Moscow\    117335
+				RU
+
+54-78-C9   (hex)		AMPAK Technology,Inc.
+5478C9     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+FC-10-1A   (hex)		Palo Alto Networks
+FC101A     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+6C-AE-E3   (hex)		Nokia
+6CAEE3     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+0C-AC-8A   (hex)		Sagemcom Broadband SAS
+0CAC8A     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+10-63-4B   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+10634B     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+E8-4D-EC   (hex)		Xerox Corporation
+E84DEC     (base 16)		Xerox Corporation
+				800 Phillips Rd
+				Webster  NY  14450
+				US
+
+C8-B8-2F   (hex)		eero inc.
+C8B82F     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+B4-3A-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B43AE2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-C8-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F0C8B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-5D-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B85DC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-A7-C6   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
+B4A7C6     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
+				NEW DELHI    NA
+				IN
+
+D0-A4-6F   (hex)		China Dragon Technology Limited
+D0A46F     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+1C-76-F2   (hex)		Samsung Electronics Co.,Ltd
+1C76F2     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+40-35-E6   (hex)		Samsung Electronics Co.,Ltd
+4035E6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+2C-60-CD   (hex)		NR ELECTRIC CO., LTD
+2C60CD     (base 16)		NR ELECTRIC CO., LTD
+				69,Suyuan Avenue
+				Nanjing  Jiangsu  211102
+				CN
+
+28-6B-35   (hex)		Intel Corporate
+286B35     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+30-43-D7   (hex)		IEEE Registration Authority
+3043D7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A4-1E-E1   (hex)		Taicang T&W Electronics
+A41EE1     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+E8-FB-1C   (hex)		AzureWave Technology Inc.
+E8FB1C     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+C0-EE-40   (hex)		Laird Connectivity
+C0EE40     (base 16)		Laird Connectivity
+				50 South Main St
+				Akron  Ohio  44308
+				US
+
+A4-7D-9F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+A47D9F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+30-04-5C   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+30045C     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+3C-46-45   (hex)		Shanghai Infinity Wireless Technologies Co.,Ltd.
+3C4645     (base 16)		Shanghai Infinity Wireless Technologies Co.,Ltd.
+				Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai
+				Shanghai  Shanghai  200082
+				CN
+
+A4-F9-33   (hex)		Intel Corporate
+A4F933     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+10-F6-0A   (hex)		Intel Corporate
+10F60A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+70-D8-23   (hex)		Intel Corporate
+70D823     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+88-8F-A4   (hex)		Huawei Device Co., Ltd.
+888FA4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-68-AC   (hex)		Huawei Device Co., Ltd.
+5068AC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+90-79-CF   (hex)		zte corporation
+9079CF     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+8C-1E-80   (hex)		Cisco Systems, Inc
+8C1E80     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-39-2F   (hex)		INGRAM MICRO SERVICES
+50392F     (base 16)		INGRAM MICRO SERVICES
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN    82000
+				FR
+
+FC-84-17   (hex)		Honor Device Co., Ltd.
+FC8417     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+2C-A7-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2CA79E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-7F-B2   (hex)		ARRIS Group, Inc.
+0C7FB2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+C4-DE-E2   (hex)		Espressif Inc.
+C4DEE2     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+68-B6-B3   (hex)		Espressif Inc.
+68B6B3     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+FC-A0-5A   (hex)		Oray.com co., LTD.
+FCA05A     (base 16)		Oray.com co., LTD.
+				8008Rm, building No.1 GuoDing d. Yangpu District
+				Shanghai  Shanghai  200433
+				CN
+
+84-EA-97   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+84EA97     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+14-B2-E5   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+14B2E5     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+E0-CB-56   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+E0CB56     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+90-48-6C   (hex)		Ring LLC
+90486C     (base 16)		Ring LLC
+				1523 26th St
+				Santa Monica  CA  90404
+				US
+
+3C-82-C0   (hex)		Technicolor CH USA Inc.
+3C82C0     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+10-24-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+102407     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-D9-EB   (hex)		Petabit Scale, Inc.
+74D9EB     (base 16)		Petabit Scale, Inc.
+				5814 Lonetree Blvd, Ste 200
+				Rocklin  CA  95765
+				US
+
+D0-21-AC   (hex)		Yohana
+D021AC     (base 16)		Yohana
+				3460 Hillview Ave.
+				Palo Alto  CA  94304
+				US
+
+7C-E1-52   (hex)		THE GOODYEAR TIRE & RUBBER COMPANY
+7CE152     (base 16)		THE GOODYEAR TIRE & RUBBER COMPANY
+				200 Innovation Way
+				Akron  OH  44316
+				US
+
+28-CD-C1   (hex)		Raspberry Pi Trading Ltd
+28CDC1     (base 16)		Raspberry Pi Trading Ltd
+				Maurice Wilkes Building, Cowley Road
+				Cambridge    CB4 0DS
+				GB
+
+00-90-3F   (hex)		WorldCast Systems
+00903F     (base 16)		WorldCast Systems
+				20 Avenue Neil Armstrong 
+				Mérignac    33700
+				FR
+
+AC-B5-66   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+ACB566     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+38-1F-26   (hex)		IEEE Registration Authority
+381F26     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+EC-21-25   (hex)		Toshiba Corp.
+EC2125     (base 16)		Toshiba Corp.
+				1-1 Shibaura 1-Chome, Minato-Ku
+				Tokyo    105-8001
+				JP
+
+00-E5-F1   (hex)		BUFFALO.INC
+00E5F1     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+34-EE-2A   (hex)		ConMet
+34EE2A     (base 16)		ConMet
+				5701 SE Columbia Way
+				Vancouver    WA  98661
+				US
+
+50-E6-36   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+50E636     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+68-4E-05   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+684E05     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+78-20-BD   (hex)		Polysense (Beijing) Technologies Co. Ltd
+7820BD     (base 16)		Polysense (Beijing) Technologies Co. Ltd
+				9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist.
+				Beijing    100085
+				CN
+
+F0-4D-D4   (hex)		Sagemcom Broadband SAS
+F04DD4     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+AC-29-29   (hex)		Infinix mobility limited
+AC2929     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+5C-1B-F4   (hex)		Apple, Inc.
+5C1BF4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-51-AB   (hex)		Apple, Inc.
+A851AB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-CE-0D   (hex)		Shenzhen juduoping Technology Co.,Ltd
+3CCE0D     (base 16)		Shenzhen juduoping Technology Co.,Ltd
+				Baoan Xin'an Streat
+				Shenzhen    002052
+				CN
+
+04-99-BB   (hex)		Apple, Inc.
+0499BB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-E9-AA   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+60E9AA     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+24-0F-5E   (hex)		Shenzhen z-router Technology Co., Ltd
+240F5E     (base 16)		Shenzhen z-router Technology Co., Ltd
+				406,Block A,Taojindi Building ,Tenglong Road,Longhua New District,
+				Shenzhen  GuangDong  518000
+				CN
+
+E8-3A-4B   (hex)		China Mobile Group Device Co.,Ltd.
+E83A4B     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+78-66-9D   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+78669D     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				 No.2, Jin-da Road, Huinan High-tech Industrial Park, Hui-ao Avenue
+				Huizhou  Guangdong  516025
+				CN
+
+48-46-8D   (hex)		Zepcam B.V.
+48468D     (base 16)		Zepcam B.V.
+				Delftechpark, 17-19
+				Delft    2628 XJ
+				NL
+
+00-0E-DD   (hex)		SHURE INCORPORATED
+000EDD     (base 16)		SHURE INCORPORATED
+				5800 W. TOUHY AVE.
+				NILES  IL  60714 
+				US
+
+6C-97-6D   (hex)		Motorola Mobility LLC, a Lenovo Company
+6C976D     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+64-11-A4   (hex)		Motorola Mobility LLC, a Lenovo Company
+6411A4     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+90-49-92   (hex)		YSTen Technology Co.,Ltd
+904992     (base 16)		YSTen Technology Co.,Ltd
+				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
+				Beijing    100101
+				CN
+
+18-FD-74   (hex)		Routerboard.com
+18FD74     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+40-D9-5A   (hex)		AMPAK Technology,Inc.
+40D95A     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+4C-D0-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CD0DD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-90-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4902A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-5E-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+905E44     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-87-7F   (hex)		Magnetar Technology Shenzhen Co., LTD.
+F0877F     (base 16)		Magnetar Technology Shenzhen Co., LTD.
+				Room211, Building1, No.26 Puzai Road, Pingdi Longgang
+				Shenzhen  GUANGDONG  518117
+				CN
+
+74-D4-DD   (hex)		Quanta Computer Inc.
+74D4DD     (base 16)		Quanta Computer Inc.
+				No. 211, Wenhua 2nd Rd., Guishan Dist.
+				Taoyuan City  Taiwan  33377
+				TW
+
+C8-D6-B7   (hex)		Solidigm Technology
+C8D6B7     (base 16)		Solidigm Technology
+				1921 Corporate Center Circle, Suite 3B
+				Longmont  CO  80501
+				US
+
+10-F0-68   (hex)		Ruckus Wireless
+10F068     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+44-3C-9C   (hex)		Pintsch GmbH
+443C9C     (base 16)		Pintsch GmbH
+				Huenxer Strasse 149
+				Dinslaken    46537
+				DE
+
+20-64-DE   (hex)		Sunitec Enterprise Co.,Ltd
+2064DE     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+A4-0F-98   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A40F98     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+D8-80-DC   (hex)		Huawei Device Co., Ltd.
+D880DC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E8-B3-EF   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E8B3EF     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+B4-9F-4D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+B49F4D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+F4-6C-68   (hex)		Wistron Neweb Corporation
+F46C68     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+74-B7-25   (hex)		Huawei Device Co., Ltd.
+74B725     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-8E-DF   (hex)		Huawei Device Co., Ltd.
+408EDF     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+BC-44-34   (hex)		Shenzhen TINNO Mobile Technology Corp.
+BC4434     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+70-66-2A   (hex)		Sony Interactive Entertainment Inc.
+70662A     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+34-AC-11   (hex)		China Mobile Group Device Co.,Ltd.
+34AC11     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+44-32-C2   (hex)		GOAL Co., Ltd.
+4432C2     (base 16)		GOAL Co., Ltd.
+				2-16-6 Mitsuyakita Yodogawa-ku
+				Osaka-shi  Osaka-fu  532-0032
+				JP
+
+18-B1-85   (hex)		Qiao Information Technology (Zhengzhou) Co., Ltd.
+18B185     (base 16)		Qiao Information Technology (Zhengzhou) Co., Ltd.
+				Room 405-1, Area A, 4th Floor, Wisdom Island Building, No.6, Zhongdao East, Zhengdong New District,
+				Zhengzhou  Henan  450000
+				CN
+
+A0-B7-65   (hex)		Espressif Inc.
+A0B765     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+CC-DB-A7   (hex)		Espressif Inc.
+CCDBA7     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+C8-6C-20   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+C86C20     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+C0-C9-76   (hex)		Shenzhen TINNO Mobile Technology Corp.
+C0C976     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+B4-C0-F5   (hex)		Shenzhen TINNO Mobile Technology Corp.
+B4C0F5     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+E8-F7-91   (hex)		Xiaomi Communications Co Ltd
+E8F791     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+0C-97-5F   (hex)		Aruba, a Hewlett Packard Enterprise Company
+0C975F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+DC-71-DD   (hex)		AX Technologies
+DC71DD     (base 16)		AX Technologies
+				1400 Broadway, 18th Floor
+				New York City  NY  10018
+				US
+
+54-A9-C8   (hex)		Home Control Singapore Pte Ltd
+54A9C8     (base 16)		Home Control Singapore Pte Ltd
+				151 Lorong Chuan
+				Singapore    556741
+				SG
+
+3C-69-D1   (hex)		ADC Automotive Distance Control System GmbH
+3C69D1     (base 16)		ADC Automotive Distance Control System GmbH
+				Peter-Dornier Strasse 10
+				Lindau  Bavaria  88131
+				DE
+
+04-BA-D6   (hex)		D-Link Corporation
+04BAD6     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd Rd., Neihu District, 
+				Taipei City     114
+				TW
+
+30-3F-5D   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
+303F5D     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
+				JL.PALEM 1 BLOK DS-6
+				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
+				ID
+
+30-7F-10   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+307F10     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+A4-90-CE   (hex)		vivo Mobile Communication Co., Ltd.
+A490CE     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+B0-FB-DD   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+B0FBDD     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+E0-9C-8D   (hex)		Seakeeper, Inc.
+E09C8D     (base 16)		Seakeeper, Inc.
+				45310 Abell House Lane Suite 350
+				California  MD  20619
+				US
+
+34-3A-20   (hex)		Aruba, a Hewlett Packard Enterprise Company
+343A20     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+7C-0C-92   (hex)		Suzhou Mobydata Smart System Co.,Ltd.
+7C0C92     (base 16)		Suzhou Mobydata Smart System Co.,Ltd.
+				3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China
+				Suzhou  Jingsu  215000
+				CN
+
+18-E9-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+18E91D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-70-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48706F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-6A-DD   (hex)		Liteon Technology Corporation
+F46ADD     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+98-D7-42   (hex)		Samsung Electronics Co.,Ltd
+98D742     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-2A-F1   (hex)		TCT mobile ltd
+C82AF1     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+3C-E9-0E   (hex)		Espressif Inc.
+3CE90E     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+A8-42-E3   (hex)		Espressif Inc.
+A842E3     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+04-26-05   (hex)		Bosch Building Automation GmbH
+042605     (base 16)		Bosch Building Automation GmbH
+				Kapellenweg 42
+				Verl    33415
+				DE
+
+A0-BD-CD   (hex)		SKY UK LIMITED
+A0BDCD     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+3C-89-94   (hex)		SKY UK LIMITED
+3C8994     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+04-81-9B   (hex)		SKY UK LIMITED
+04819B     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+50-70-43   (hex)		SKY UK LIMITED
+507043     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+04-B8-6A   (hex)		SKY UK LIMITED
+04B86A     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+3C-45-7A   (hex)		SKY UK LIMITED
+3C457A     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+3C-FE-AC   (hex)		Cisco Systems, Inc
+3CFEAC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+04-A7-41   (hex)		Cisco Systems, Inc
+04A741     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-88-9D   (hex)		Huawei Device Co., Ltd.
+A0889D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D4-9B-74   (hex)		Kinetic Technologies
+D49B74     (base 16)		Kinetic Technologies
+				6399 San Ignacio Ave #250
+				San Jose  CA  95119
+				US
+
+20-47-ED   (hex)		SKY UK LIMITED
+2047ED     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+40-F8-DF   (hex)		CANON INC.
+40F8DF     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+F4-6B-8C   (hex)		Hon Hai Precision Industry Co., Ltd.
+F46B8C     (base 16)		Hon Hai Precision Industry Co., Ltd.
+				GuangDongShenZhen
+				ShenZhen  GuangDong  518109
+				CN
+
+74-37-5F   (hex)		SERCOMM PHILIPPINES INC
+74375F     (base 16)		SERCOMM PHILIPPINES INC
+				Lot 1 & 5, Phase 1, Filinvest Technology Park 1, Brgy. Punta, Calamba City
+				Calamba    Lot 1
+				PH
+
+F4-3B-D8   (hex)		Intel Corporate
+F43BD8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+7C-67-AB   (hex)		Roku, Inc
+7C67AB     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+0C-7F-ED   (hex)		IEEE Registration Authority
+0C7FED     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E0-86-14   (hex)		Novatel Wireless Solutions, Inc.
+E08614     (base 16)		Novatel Wireless Solutions, Inc.
+				9710 Scranton Rd., Suite 200
+				San Diego  CA  92121
+				US
+
+A8-DE-68   (hex)		Beijing Wide Technology Co.,Ltd
+A8DE68     (base 16)		Beijing Wide Technology Co.,Ltd
+				Floor7,Block B,Yicheng wealth center,No. 22,Ronghua Middle Road,Beijing Economic and Technological Development Zone
+				Beijing  Beijing  100000
+				CN
+
+3C-4E-56   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+3C4E56     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+6C-30-2A   (hex)		Texas Instruments
+6C302A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+74-46-B3   (hex)		Texas Instruments
+7446B3     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+08-B6-1F   (hex)		Espressif Inc.
+08B61F     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+94-4E-5B   (hex)		Ubee Interactive Co., Limited
+944E5B     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+				North Point    00000
+				HK
+
+B4-BA-9D   (hex)		SKY UK LIMITED
+B4BA9D     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+50-F2-61   (hex)		Photon Sail Technologies
+50F261     (base 16)		Photon Sail Technologies
+				8 Robinson Road, ASO Building
+				Singapore    048544
+				SG
+
+00-41-0E   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+00410E     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+FC-61-79   (hex)		IEEE Registration Authority
+FC6179     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+4C-72-74   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+4C7274     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
+				ShenZHEN  GuangDong  518104
+				CN
+
+98-A2-C0   (hex)		Cisco Systems, Inc
+98A2C0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+EC-74-D7   (hex)		Grandstream Networks Inc
+EC74D7     (base 16)		Grandstream Networks Inc
+				126 brookline avenue
+				boston  MA  02215
+				US
+
+30-63-71   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+306371     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
+				ShenZHEN  GuangDong  518104
+				CN
+
+88-12-AC   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+8812AC     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+5C-3E-1B   (hex)		Apple, Inc.
+5C3E1B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-2A-CA   (hex)		Apple, Inc.
+7C2ACA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-8E-EC   (hex)		Apple, Inc.
+288EEC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-8C-F2   (hex)		YINUOLINK CO.,LTD
+A08CF2     (base 16)		YINUOLINK CO.,LTD
+				3F, Bldg 5, Gaoxinjian Industrial Park, Fuyuan 1st Road, Heping, Fuhai, Bao'an
+				Shenzhen  Guangdong  518103
+				CN
+
+40-47-5E   (hex)		eero inc.
+40475E     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+20-E6-DF   (hex)		eero inc.
+20E6DF     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+F4-93-1C   (hex)		Universal Electronics, Inc.
+F4931C     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+C8-84-8C   (hex)		Ruckus Wireless
+C8848C     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+B0-78-39   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+B07839     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+74-9E-75   (hex)		Aruba, a Hewlett Packard Enterprise Company
+749E75     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+E0-5A-1B   (hex)		Espressif Inc.
+E05A1B     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+48-8A-E8   (hex)		vivo Mobile Communication Co., Ltd.
+488AE8     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+CC-BA-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CCBA6F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-5C-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+785C5E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+98-81-8A   (hex)		Huawei Device Co., Ltd.
+98818A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A8-AA-7C   (hex)		Huawei Device Co., Ltd.
+A8AA7C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-C2-F7   (hex)		Huawei Device Co., Ltd.
+B4C2F7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-32-83   (hex)		COMTTI Intelligent Technology(Shenzhen) Co., Ltd.
+1C3283     (base 16)		COMTTI Intelligent Technology(Shenzhen) Co., Ltd.
+				Building 7/6 building 6 room 307, Area A, Baoan Internet Industrial Base, Mabu Community, Xixiang Street, Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+F4-1C-71   (hex)		SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD
+F41C71     (base 16)		SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD
+				17/F,Block 1A,Software Industry Base, XueFu Road,Nanshan  District,
+				Shenzhen  GuangDong  518100
+				CN
+
+D8-F5-07   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D8F507     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+C4-EF-DA   (hex)		Honeywell
+C4EFDA     (base 16)		Honeywell
+				9680 Old Bailes Rd, Fort Mill, SC 29707
+				Fort Mill  SC  29707
+				US
+
+00-25-DF   (hex)		Taser International Inc.
+0025DF     (base 16)		Taser International Inc.
+				17800 N 85th St.
+				Scottsdale  AZ  85255
+				US
+
+E8-86-CF   (hex)		Nokia
+E886CF     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+34-38-AF   (hex)		Inlab Networks GmbH
+3438AF     (base 16)		Inlab Networks GmbH
+				Josef-Wuerth-Str. 3
+				Gruenwald  Bavaria  82031
+				DE
+
+D8-54-82   (hex)		Oxit, LLC
+D85482     (base 16)		Oxit, LLC
+				3131 Westinghouse Blvd
+				Charlotte  NC  28273
+				US
+
+08-CB-E5   (hex)		R3 Solutions GmbH
+08CBE5     (base 16)		R3 Solutions GmbH
+				Kurfürstendamm 21
+				Berlin    10719
+				DE
+
+D4-AD-20   (hex)		Jinan USR IOT Technology Limited
+D4AD20     (base 16)		Jinan USR IOT Technology Limited
+				Floor F1 & Part of Floor F2, Building No. 9,Diya shuang chuang Industrial Zone, No.2566,Century Main Road,Gaoxin District Jinan,Shandong China
+				Shandong  Jinan  250014
+				CN
+
+00-20-67   (hex)		Private
+002067     (base 16)		Private
+				445
+				sfgsg  NJ  12345
+				US
+
+BC-5E-33   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+BC5E33     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+F4-05-95   (hex)		Sagemcom Broadband SAS
+F40595     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+BC-10-7B   (hex)		Samsung Electronics Co.,Ltd
+BC107B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-AE-60   (hex)		Amazon Technologies Inc.
+10AE60     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+1C-FC-17   (hex)		Cisco Systems, Inc
+1CFC17     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-48-77   (hex)		Honor Device Co., Ltd.
+504877     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+F8-5C-7E   (hex)		Shenzhen Honesty Electronics Co.,Ltd.
+F85C7E     (base 16)		Shenzhen Honesty Electronics Co.,Ltd.
+				5/F,Zone B,Chitat Industrial Park,West Longping Road, Longgang District,Shenzhen City
+				Shenzhen  Guangdong  518172
+				CN
+
+FC-9F-FD   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+FC9FFD     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+1C-B8-BA   (hex)		XIAMEN LEELEN TECHNOLOGY CO., LTD
+1CB8BA     (base 16)		XIAMEN LEELEN TECHNOLOGY CO., LTD
+				LEELEN building, No.780 TieShan Road, GuanKou Town , JiMei District 
+				Xiamen  Fujian  361021
+				CN
+
+F0-CC-E0   (hex)		Shenzhen All-Smartlink Technology Co.,Ltd.
+F0CCE0     (base 16)		Shenzhen All-Smartlink Technology Co.,Ltd.
+				502, Building B, Guangming Industry Park, Minzhi, Shenzhen, Guangdong, China
+				Shenzhen  Guangdong  518100
+				CN
+
+44-E2-F1   (hex)		NewRadio Technologies Co. , Ltd.
+44E2F1     (base 16)		NewRadio Technologies Co. , Ltd.
+				1408, Building 4, Tianan Yungu, Bantian
+				Shenzhen  Guangdong  518129
+				CN
+
+78-C1-AE   (hex)		Hangzhou Ezviz Software Co.,Ltd.
+78C1AE     (base 16)		Hangzhou Ezviz Software Co.,Ltd.
+				Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+30-C6-D7   (hex)		New H3C Technologies Co., Ltd
+30C6D7     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+F8-24-E4   (hex)		Beyonics Technology Electronic (Changshu) Co., Ltd
+F824E4     (base 16)		Beyonics Technology Electronic (Changshu) Co., Ltd
+				18 Yinhuan Road, Changshu New & Hi-tech Industrial Development Zone of Jiangsu
+				Changshu  Jiangsu  215500
+				CN
+
+10-09-0C   (hex)		JANOME Corporation
+10090C     (base 16)		JANOME Corporation
+				1463 Hazama-Machi
+				Hachioji-Shi  Tokyo  193-0941
+				JP
+
+1C-6A-76   (hex)		Apple, Inc.
+1C6A76     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-7E-67   (hex)		Apple, Inc.
+6C7E67     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-C6-F0   (hex)		Apple, Inc.
+A4C6F0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-8F-D9   (hex)		Apple, Inc.
+A88FD9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-95-42   (hex)		Apple, Inc.
+089542     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-F2-42   (hex)		Huawei Device Co., Ltd.
+D4F242     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C0-2E-26   (hex)		iRhythm Technologies, Inc.
+C02E26     (base 16)		iRhythm Technologies, Inc.
+				11085 Knott Avenue
+				Cypress  CA  90630
+				US
+
+74-D7-13   (hex)		Huaqin Technology Co.,Ltd
+74D713     (base 16)		Huaqin Technology Co.,Ltd
+				Building 11, No. 399, Keyuan Road, Pudong New Area
+				Shanghai    201203
+				CN
+
+64-E2-20   (hex)		Qisda Corporation
+64E220     (base 16)		Qisda Corporation
+				No. 157, Shanying Rd., Gueishan Dist., Taoyuan City 33341, Taiwan
+				Taoyuan    33341
+				TW
+
+E4-9C-67   (hex)		Apple, Inc.
+E49C67     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-DF-C9   (hex)		Hangzhou Microimage Software Co., Ltd
+ECDFC9     (base 16)		Hangzhou Microimage Software Co., Ltd
+				Room 313, Unit B, Building 2, 399 Danfeng Road, Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+BC-E0-01   (hex)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
+BCE001     (base 16)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
+				8 Floor, Bd B, information port, Langshan RD, Nanshan district, 
+				Shenzhen  Guangdong  518057
+				CN
+
+FC-22-D3   (hex)		FDSYS
+FC22D3     (base 16)		FDSYS
+				12, Seonyu-ro 43na-gil, Yeongdeungpo-gu
+				Seoul    07210
+				KR
+
+4C-5C-DF   (hex)		ITEL MOBILE LIMITED
+4C5CDF     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+3C-E4-41   (hex)		Amazon Technologies Inc.
+3CE441     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+44-42-01   (hex)		Amazon Technologies Inc.
+444201     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+40-C1-F6   (hex)		Shenzhen Jingxun Technology Co., Ltd.
+40C1F6     (base 16)		Shenzhen Jingxun Technology Co., Ltd.
+				3/F, A5 Building, Zhiyuan Community, No. 1001, Xueyuan Road, Nanshan District
+				Shenzhen    518071
+				CN
+
+E4-6D-7F   (hex)		Ciena Corporation
+E46D7F     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+84-8D-CE   (hex)		Ciena Corporation
+848DCE     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+9C-C8-93   (hex)		Juniper Networks
+9CC893     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+A0-95-7F   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+A0957F     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+64-13-5A   (hex)		Itectra A/S
+64135A     (base 16)		Itectra A/S
+				Sofiendalsvej 85
+				Aalborg SV    9200
+				DK
+
+F8-3B-1D   (hex)		Technicolor CH USA Inc.
+F83B1D     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+E4-BF-FA   (hex)		Technicolor CH USA Inc.
+E4BFFA     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+CC-77-C9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+CC77C9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+5C-27-63   (hex)		Itibia Technologies
+5C2763     (base 16)		Itibia Technologies
+				1630, 3F, Phase I, International Science Park, No.1355 Jinjihu Avenue,
+				Suzhou  Jiangsu  215021
+				CN
+
+80-27-6C   (hex)		Cisco Systems, Inc
+80276C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-4E-F6   (hex)		Cisco Systems, Inc
+6C4EF6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-57-2C   (hex)		Allwinner Technology Co., Ltd
+2C572C     (base 16)		Allwinner Technology Co., Ltd
+				No.9 Technology Road 2, High-Tech Zone
+				Zhuhai  Guangdong  519085
+				CN
+
+54-E1-B6   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+54E1B6     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+F4-C1-14   (hex)		Technicolor CH USA Inc.
+F4C114     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+BC-52-74   (hex)		Samsung Electronics Co.,Ltd
+BC5274     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-DA-C2   (hex)		Technicolor CH USA Inc.
+80DAC2     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+3C-06-64   (hex)		Beijing Leagrid Technology Co.,Ltd.
+3C0664     (base 16)		Beijing Leagrid Technology Co.,Ltd.
+				No. 86-N2216, Wanxing Road, Changyang, Fangshan District, Beijing
+				Beijing  Beijing  102488
+				CN
+
+98-CC-E4   (hex)		Shenzhen Mindray Animal Medical Technology Co.,LTD
+98CCE4     (base 16)		Shenzhen Mindray Animal Medical Technology Co.,LTD
+				Tower 4, YESUN Intelligent Community 3 ,No.1301-88
+				Shenzhen  Guanguang Road,Guanlan Street,Longhua District  518110
+				CN
+
+90-09-DF   (hex)		Intel Corporate
+9009DF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+E4-0D-36   (hex)		Intel Corporate
+E40D36     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C8-EF-BC   (hex)		Inspur Communication Technology Co.,Ltd.
+C8EFBC     (base 16)		Inspur Communication Technology Co.,Ltd.
+				1306 Inspur street
+				JiNan  ShanDong  250014
+				CN
+
+50-07-C3   (hex)		Amazon Technologies Inc.
+5007C3     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+14-9F-43   (hex)		Cisco Meraki
+149F43     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+8C-84-42   (hex)		Cisco Systems, Inc
+8C8442     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+84-F1-17   (hex)		Newseason
+84F117     (base 16)		Newseason
+				No. 1 Letang road, Tangxiayong gongyequ, Songgang street, Bao An district, 
+				Shenzhen  Guangdong  518000
+				CN
+
+94-78-06   (hex)		NINGBO SUNVOT TECHNOLOGY CO.,LTD
+947806     (base 16)		NINGBO SUNVOT TECHNOLOGY CO.,LTD
+				ROOM 305,NO.1,BUILDING 4,NO.79,XIAOGANG WEISAN ROAD,XIAOGANG STREET,BEILUN DISTRICT
+				NingBo  Zhejiang  315800
+				CN
+
+CC-CC-77   (hex)		Zaram Technology. Inc.
+CCCC77     (base 16)		Zaram Technology. Inc.
+				2nd Fl, Fine Venture Building, 41, Seongnam-daero 925beon-gil, Bundang-gu, Seongnam-si, Gyeonggi-do, Republic of Korea [13496]
+				Bundang-gu    13496
+				KR
+
+BC-45-8C   (hex)		Shenzhen Topwise Communication Co.,Ltd
+BC458C     (base 16)		Shenzhen Topwise Communication Co.,Ltd
+				5/F,Shengtang Building East Block,Tairan Road 9,Futian District,Shenzhen
+				Shenzhen    518042
+				CN
+
+2C-08-B4   (hex)		Huawei Device Co., Ltd.
+2C08B4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+78-4F-24   (hex)		Taicang T&W Electronics
+784F24     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+68-13-E2   (hex)		Eltex Enterprise LTD
+6813E2     (base 16)		Eltex Enterprise LTD
+				Timiryazeva street, 17
+				Almaty    050040
+				KZ
+
+80-C3-BA   (hex)		Sonova Consumer Hearing GmbH
+80C3BA     (base 16)		Sonova Consumer Hearing GmbH
+				Am Labor 1
+				Wedemark  Niedersachsen  30900
+				DE
+
+9C-54-67   (hex)		Nokia
+9C5467     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+58-E4-34   (hex)		Juniper Networks
+58E434     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+E8-A0-ED   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+E8A0ED     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+B4-E4-6B   (hex)		China Mobile IOT Company Limited
+B4E46B     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+B4-61-42   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B46142     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-66-9A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C669A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-1E-97   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC1E97     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-04-21   (hex)		zte corporation
+B40421     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E8-43-68   (hex)		zte corporation
+E84368     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+48-1B-40   (hex)		Technicolor CH USA Inc.
+481B40     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+BC-02-6E   (hex)		Silicon Laboratories
+BC026E     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+B4-35-22   (hex)		Silicon Laboratories
+B43522     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+F4-0B-9F   (hex)		CIG SHANGHAI CO LTD
+F40B9F     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road 
+				SHANGHAI    201114
+				CN
+
+60-57-47   (hex)		CIG SHANGHAI CO LTD
+605747     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road
+				SHANGHAI    201114
+				CN
+
+BC-B9-23   (hex)		Alta Networks
+BCB923     (base 16)		Alta Networks
+				192 N. Old Highway 91
+				Hurricane  UT  84737
+				US
+
+94-F3-92   (hex)		Fortinet, Inc.
+94F392     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale    94086
+				US
+
+D4-AD-FC   (hex)		Shenzhen Intellirocks Tech co.,ltd
+D4ADFC     (base 16)		Shenzhen Intellirocks Tech co.,ltd
+				No. 2901, 2902, 2903, 2904, 3002, Block C, Section 1, Chuangzhi Yuncheng Building, Liuxian Avenue
+				Shenzhen  Xili Community, Xili Street, Nanshan District, Guangdong  518000
+				CN
+
+84-93-B2   (hex)		zte corporation
+8493B2     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+28-01-1C   (hex)		zte corporation
+28011C     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+70-11-0E   (hex)		zte corporation
+70110E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+F8-AA-B3   (hex)		DESSMANN (China) Machinery & Electronic  Co., Ltd
+F8AAB3     (base 16)		DESSMANN (China) Machinery & Electronic  Co., Ltd
+				1-3 Bld 1,NO.7 South Jianghui Rd,Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+E4-66-AB   (hex)		zte corporation
+E466AB     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+64-DB-38   (hex)		zte corporation
+64DB38     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+D8-8C-73   (hex)		zte corporation
+D88C73     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+54-CE-82   (hex)		zte corporation
+54CE82     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+EC-DA-3B   (hex)		Espressif Inc.
+ECDA3B     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+64-44-D5   (hex)		TD Tech
+6444D5     (base 16)		TD Tech
+				15F, building D, Yeqing building, No. 9, Wangjing North Road, Chaoyang District, Beijing
+				BeiJing    100102
+				CN
+
+C8-7F-54   (hex)		ASUSTek COMPUTER INC.
+C87F54     (base 16)		ASUSTek COMPUTER INC.
+				No.15,Lide Rd., Beitou, Dist.,Taipei 112,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+6C-70-CB   (hex)		Samsung Electronics Co.,Ltd
+6C70CB     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+E8-8F-6F   (hex)		TCT mobile ltd
+E88F6F     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+84-FC-E6   (hex)		Espressif Inc.
+84FCE6     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+B8-5E-71   (hex)		Technicolor CH USA Inc.
+B85E71     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+90-7B-C6   (hex)		Texas Instruments
+907BC6     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D4-DA-21   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+D4DA21     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+C4-79-05   (hex)		Zhejiang Uniview Technologies Co.,Ltd.
+C47905     (base 16)		Zhejiang Uniview Technologies Co.,Ltd.
+				No.88,Jiangling Road
+				Hangzhou  Zhejiang,P.R.China  310051
+				CN
+
+44-B7-D0   (hex)		Microchip Technology Inc.
+44B7D0     (base 16)		Microchip Technology Inc.
+				2355 W Chandler Blvd
+				Chandler  AZ  85224-6199
+				US
+
+90-48-46   (hex)		Texas Instruments
+904846     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+6C-91-06   (hex)		Katena Computing Technologies
+6C9106     (base 16)		Katena Computing Technologies
+				7244 Carrizo Drive
+				La Jolla  CA  92037
+				US
+
+50-27-A9   (hex)		eero inc.
+5027A9     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+D0-4E-99   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D04E99     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-A7-66   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+20A766     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-05-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C058E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-1A-94   (hex)		Apple, Inc.
+201A94     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-E5-EF   (hex)		Apple, Inc.
+B0E5EF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-8F-F6   (hex)		Apple, Inc.
+288FF6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-B9-65   (hex)		Apple, Inc.
+58B965     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-31-74   (hex)		Apple, Inc.
+743174     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-C7-25   (hex)		Apple, Inc.
+F0C725     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A4-11-BB   (hex)		Cisco Systems, Inc
+A411BB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+50-49-21   (hex)		Cisco Systems, Inc
+504921     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+10-BB-F3   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+10BBF3     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+90-39-5E   (hex)		Silicon Laboratories
+90395E     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+C8-F2-B4   (hex)		Guizhou Huaxin Information Technology Co., Ltd.
+C8F2B4     (base 16)		Guizhou Huaxin Information Technology Co., Ltd.
+				Building 1#, Electronic Information Industry Park of Machang Town, Guian New Area, Guizhou Province.
+				Gui'an New Area  Guizhou Province  550025
+				CN
+
+E0-A1-CE   (hex)		zte corporation
+E0A1CE     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+24-A6-FA   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+24A6FA     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+0C-64-22   (hex)		Beijing Wiseasy Technology Co.,Ltd.
+0C6422     (base 16)		Beijing Wiseasy Technology Co.,Ltd.
+				Room 01 , 27th Floor, No. 1 Building , No. 36 Xiaoyun Road, Chaoyang District
+				Beijing    100027
+				CN
+
+2C-75-CB   (hex)		Novitec Co., Ltd.
+2C75CB     (base 16)		Novitec Co., Ltd.
+				30-18, Baekjegobun-ro 39-gil, Songpa-gu
+				Seoul    05609
+				KR
+
+04-9F-15   (hex)		Humane
+049F15     (base 16)		Humane
+				969 Folsom St
+				San Francisco  CA  94062
+				US
+
+38-38-A6   (hex)		Arista Networks
+3838A6     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+50-23-6D   (hex)		Nintendo Co.,Ltd
+50236D     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+A0-39-75   (hex)		Leo Bodnar Electronics Ltd
+A03975     (base 16)		Leo Bodnar Electronics Ltd
+				Unit 8 New Rookery Farm
+				Silverstone    NN12 8UP
+				GB
+
+EC-83-B7   (hex)		PUWELL CLOUD TECH LIMITED
+EC83B7     (base 16)		PUWELL CLOUD TECH LIMITED
+				Room 1702, 17/F, Hong Kong Trade Centre, Nos. 161-167 Des Voeux Road Central, Hong Kong
+				Hong Kong    999077
+				HK
+
+74-93-DA   (hex)		ASKEY COMPUTER CORP
+7493DA     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+C8-4A-A0   (hex)		Sony Interactive Entertainment Inc.
+C84AA0     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+4C-96-8A   (hex)		Wacom Co.,Ltd.
+4C968A     (base 16)		Wacom Co.,Ltd.
+				Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1
+				Nishi-shinjuku,Shinjuku-ku  Tokyo  160-6131
+				JP
+
+E8-26-8D   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+E8268D     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+D8-31-2C   (hex)		zte corporation
+D8312C     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+9C-55-8F   (hex)		Lockin Technology(Beijing) Co.,Ltd.
+9C558F     (base 16)		Lockin Technology(Beijing) Co.,Ltd.
+				12 / F, building B1, No. 1 Zhongguancun, Beiqing Road
+				Beijing  Haidian District  100011
+				CN
+
+B0-EB-7F   (hex)		Juniper Networks
+B0EB7F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+68-FC-B6   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+68FCB6     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+94-7B-AE   (hex)		Xiaomi Communications Co Ltd
+947BAE     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+00-C2-8F   (hex)		Allied Telesis K.K.
+00C28F     (base 16)		Allied Telesis K.K.
+				2nd. TOC Bldg. 7-21-11 Nishi-Gotanda, Shinagawa-ku, Tokyo
+				Tokyo    141-0031
+				JP
+
+D8-AD-49   (hex)		Honor Device Co., Ltd.
+D8AD49     (base 16)		Honor Device Co., Ltd.
+				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+				Shenzhen   Guangdong  518040
+				CN
+
+38-F8-F6   (hex)		Adtran Inc
+38F8F6     (base 16)		Adtran Inc
+				901 Explorer Blvd.
+				Huntsville  AL  35806-2807
+				US
+
+B4-E2-65   (hex)		Shenzhen SDMC Technology CO.,Ltd.
+B4E265     (base 16)		Shenzhen SDMC Technology CO.,Ltd.
+				19/F, Changhong Science & Technology Mansion, No.18, Keji South 12th Road, High-tech Industrial Park, Nanshan District
+				Shenzhen  GUANGDONG  518027
+				CN
+
+38-47-F2   (hex)		Recogni Inc
+3847F2     (base 16)		Recogni Inc
+				2590 N 1ST STSuite 320
+				San Jose  CA  95131
+				US
+
+E0-38-2D   (hex)		IEEE Registration Authority
+E0382D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+9C-53-22   (hex)		TP-Link Corporation Limited
+9C5322     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+48-22-54   (hex)		TP-Link Corporation Limited
+482254     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+DC-D2-FD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DCD2FD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-73-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5873D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-B0-87   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CB087     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-72-7E   (hex)		WISDRI (wuhan) Automation Company Limited
+A8727E     (base 16)		WISDRI (wuhan) Automation Company Limited
+				No. 9, Fenghuangyuan 1st Road, Donghu New Technology Development Zone
+				Wuhan  Hubei  430000
+				CN
+
+88-B4-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88B4BE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C8-29-C8   (hex)		Palo Alto Networks
+C829C8     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+7C-57-58   (hex)		HP Inc.
+7C5758     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+4C-06-B7   (hex)		ProDVX Europe B.V.
+4C06B7     (base 16)		ProDVX Europe B.V.
+				Europalaan 10
+				Den Bosch  NB  5235BC
+				NL
+
+78-60-5B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+78605B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+04-F9-F8   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+04F9F8     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+C4-53-79   (hex)		Micronview Limited Liability Company
+C45379     (base 16)		Micronview Limited Liability Company
+				700 LAVACA, STE 1401 AUSTIN?TX 787015
+				AUSTIN    787015
+				US
+
+80-4A-F2   (hex)		Sonos, Inc.
+804AF2     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+04-4B-A5   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+044BA5     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+F4-2D-06   (hex)		zte corporation
+F42D06     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+1C-67-4A   (hex)		zte corporation
+1C674A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+B4-84-D5   (hex)		GooWi Wireless Technology Co., Limited
+B484D5     (base 16)		GooWi Wireless Technology Co., Limited
+				RM1601,Crative BuildingII East Tianan
+				City Futian Shenzhen  Guangdong  518000
+				CN
+
+98-BF-F4   (hex)		MARKIN co., Ltd.
+98BFF4     (base 16)		MARKIN co., Ltd.
+				101 DONG 1303 HO 36, Bucheon 198beon-gil
+				Bucheon-si  Gyeonggi-do  14557
+				KR
+
+54-07-7D   (hex)		NETGEAR
+54077D     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+44-4A-D6   (hex)		Shenzhen Rinocloud Technology Co.,Ltd.
+444AD6     (base 16)		Shenzhen Rinocloud Technology Co.,Ltd.
+				Qianhai Complex A201, Qianwan Road 1, Qianhai Shenzhen-Hong Kong Cooperation Zone, Shenzhen,P.R.China
+				shenzhen  guangdong  440300
+				CN
+
+18-9E-AD   (hex)		Shenzhen Chengqian Information Technology Co., Ltd
+189EAD     (base 16)		Shenzhen Chengqian Information Technology Co., Ltd
+				A730-731, Huafeng Internet Creative Park, No. 107 Gonghe Industrial Road, Xixiang Street, Bao'an District
+				Shenzhen  Guangdong  518100
+				CN
+
+94-DD-F8   (hex)		Brother Industries, LTD.
+94DDF8     (base 16)		Brother Industries, LTD.
+				15-1, Naeshirocho, Mizuho-ku
+				NAGOYA    4678561
+				JP
+
+84-B3-86   (hex)		IEEE Registration Authority
+84B386     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A4-5D-5E   (hex)		Wilk Elektronik S.A.
+A45D5E     (base 16)		Wilk Elektronik S.A.
+				Mikolowska 42
+				Laziska Gorne  Slaskie  43-173
+				PL
+
+FC-31-5D   (hex)		Apple, Inc.
+FC315D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-A6-CD   (hex)		Apple, Inc.
+74A6CD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-7C-F2   (hex)		Apple, Inc.
+2C7CF2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-D7-A1   (hex)		Apple, Inc.
+30D7A1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-BC-D0   (hex)		zte corporation
+3CBCD0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+64-6E-60   (hex)		zte corporation
+646E60     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+4C-42-1E   (hex)		Cisco Systems, Inc
+4C421E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-8E-F6   (hex)		Infinix mobility limited
+408EF6     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+E0-2D-F0   (hex)		ALPSALPINE CO,.LTD
+E02DF0     (base 16)		ALPSALPINE CO,.LTD
+				nishida 6-1
+				kakuda-City  Miyagi-Pref  981-1595
+				JP
+
+5C-34-5B   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+5C345B     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+58-70-7F   (hex)		Ericsson AB
+58707F     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+88-74-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+887477     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-B8-29   (hex)		Juniper Networks
+28B829     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+D0-A9-D3   (hex)		EM Microelectronic
+D0A9D3     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+14-DD-02   (hex)		Liangang Optoelectronic Technology CO., Ltd.
+14DD02     (base 16)		Liangang Optoelectronic Technology CO., Ltd.
+				150 JingHai West Road,ShaQu Village ShaTou Area,ChangAn Town
+				DongGuan GuangDong    523846
+				CN
+
+D0-39-FA   (hex)		Samsung Electronics Co.,Ltd
+D039FA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-0B-1D   (hex)		Samsung Electronics Co.,Ltd
+B40B1D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+AC-80-FB   (hex)		Samsung Electronics Co.,Ltd
+AC80FB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-B2-B4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+64B2B4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+60-C7-27   (hex)		Digiboard Eletronica da Amazonia Ltda
+60C727     (base 16)		Digiboard Eletronica da Amazonia Ltda
+				1111-A Matrinxa
+				Manaus  Amazonia  69075-150
+				BR
+
+48-31-DB   (hex)		Huawei Device Co., Ltd.
+4831DB     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+3C-3B-4D   (hex)		Toyo Seisakusho Kaisha, Limited
+3C3B4D     (base 16)		Toyo Seisakusho Kaisha, Limited
+				2-4-6 Honjyo
+				Higashi-Osaka  Osaka  578-0953
+				JP
+
+14-7F-0F   (hex)		Texas Instruments
+147F0F     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+00-92-A5   (hex)		LG Innotek
+0092A5     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+D8-63-8C   (hex)		Shenzhen Dttek Technology Co., Ltd.
+D8638C     (base 16)		Shenzhen Dttek Technology Co., Ltd.
+				Unit 405,Building 2C,Shenzhen Software Industrial Base, 10th Hi-Tech South Road,Yuehai Street
+				Shenzhen  Guangdong  518057
+				CN
+
+04-F7-78   (hex)		Sony Interactive Entertainment Inc.
+04F778     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+90-31-4B   (hex)		AltoBeam Inc.
+90314B     (base 16)		AltoBeam Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+20-5F-3D   (hex)		Adtran Inc
+205F3D     (base 16)		Adtran Inc
+				Victory House, Vision Park, Chivers Way, Histon
+				Cambridge    CB24 9ZR
+				GB
+
+34-7D-E4   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+347DE4     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+CC-CF-83   (hex)		CIG SHANGHAI CO LTD
+CCCF83     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road 
+				SHANGHAI    201114
+				CN
+
+24-D3-37   (hex)		Xiaomi Communications Co Ltd
+24D337     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+B4-63-6F   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+B4636F     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+10-CF-0F   (hex)		Apple, Inc.
+10CF0F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-CA-41   (hex)		AO 
+1CCA41     (base 16)		AO 
+				Verhnyaya Krasnoselskaya, 11A, building 3, fl. 3, cab. 8.
+				Moscow    107140
+				RU
+
+30-40-74   (hex)		zte corporation
+304074     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+A0-10-77   (hex)		zte corporation
+A01077     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+7C-7A-3C   (hex)		New H3C Technologies Co., Ltd
+7C7A3C     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+FC-A0-F3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+FCA0F3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-A8-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04A81C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-84-73   (hex)		Cisco Systems, Inc
+148473     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C0-EA-C3   (hex)		IEEE Registration Authority
+C0EAC3     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+9C-F8-6B   (hex)		AgiTech Distribution Limited
+9CF86B     (base 16)		AgiTech Distribution Limited
+				Unit F, 11/F, CNT Tower, 338 Hennessy Road, Wan Chai
+				Hong Kong  Hong Kong  999077
+				HK
+
+48-31-77   (hex)		Nintendo Co.,Ltd
+483177     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+AC-17-54   (hex)		tiko Energy Solutions AG
+AC1754     (base 16)		tiko Energy Solutions AG
+				Pflanzschulstrasse 7
+				Zürich  Zürich  8004
+				CH
+
+A4-C2-3E   (hex)		Huizhou Speed Wireless Technology Co.,Ltd
+A4C23E     (base 16)		Huizhou Speed Wireless Technology Co.,Ltd
+				138 Huize Avenue, Shangxia District
+				Dongjiang Hi tech Industrial Park, Shuikou  Huizhou, Guangdong  516000
+				CN
+
+14-0F-A6   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+140FA6     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-50-C4   (hex)		IMD
+0050C4     (base 16)		IMD
+				Dornierstr. 4
+				Puchheim    82178
+				DE
+
+7C-45-F9   (hex)		IEEE Registration Authority
+7C45F9     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+AC-E0-D6   (hex)		koreabts
+ACE0D6     (base 16)		koreabts
+				362-11, Jongga-ro, Jung-gu, Ulsan, Republic of Korea
+				Ulsan    44428
+				KR
+
+14-F5-F9   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+14F5F9     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+BC-73-A4   (hex)		ANDA TELECOM PVT LTD
+BC73A4     (base 16)		ANDA TELECOM PVT LTD
+				E-36 Amar Colony, Lajpat Nagar, New Delhi
+				New Delhi  Delhi  110024
+				IN
+
+54-B7-BD   (hex)		Arcadyan Corporation
+54B7BD     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+00-1A-A6   (hex)		Elbit Systems Deutschland GmbH & Co. KG
+001AA6     (base 16)		Elbit Systems Deutschland GmbH & Co. KG
+				Eberhard-Finckh-Strasse 55
+				Ulm  Baden-Wurttemberg  89075
+				DE
+
+60-FA-B1   (hex)		Kempower Oyj
+60FAB1     (base 16)		Kempower Oyj
+				Ala-Okeroistentie 29
+				Lahti    15700
+				FI
+
+E8-97-B8   (hex)		Chiun Mai Communication System, Inc
+E897B8     (base 16)		Chiun Mai Communication System, Inc
+				No.4, MingSheng St. TuCheng District
+				New Taipei City    23679
+				TW
+
+94-F5-24   (hex)		Chengdu BeiZhongWangXin Technology Co.Ltd
+94F524     (base 16)		Chengdu BeiZhongWangXin Technology Co.Ltd
+				Room 1209,Building 13,No.599,Middle YiZhou Avenue Chengdu, China
+				chengdu    610000
+				CN
+
+C8-78-7D   (hex)		D-Link Corporation
+C8787D     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd Rd., Neihu District, 
+				Taipei City     114
+				TW
+
+8C-E0-42   (hex)		vivo Mobile Communication Co., Ltd.
+8CE042     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+FC-57-03   (hex)		Hisense broadband multimedia technology Co.,Ltd
+FC5703     (base 16)		Hisense broadband multimedia technology Co.,Ltd
+				Song ling Road 399
+				Qingdao    266000
+				CN
+
+94-2A-6F   (hex)		Ubiquiti Inc
+942A6F     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+F4-E2-C6   (hex)		Ubiquiti Inc
+F4E2C6     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+D8-B3-70   (hex)		Ubiquiti Inc
+D8B370     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+B0-A7-32   (hex)		Espressif Inc.
+B0A732     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+B0-B2-1C   (hex)		Espressif Inc.
+B0B21C     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+B4-FB-E4   (hex)		Ubiquiti Inc
+B4FBE4     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+68-72-51   (hex)		Ubiquiti Inc
+687251     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+54-02-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+540295     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+FC-EC-DA   (hex)		Ubiquiti Inc
+FCECDA     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+E0-9B-27   (hex)		Ciena Corporation
+E09B27     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+40-F2-1C   (hex)		DZS Inc.
+40F21C     (base 16)		DZS Inc.
+				5700 Tennyson Parkway, Suite 400
+				Plano  TX  75024
+				US
+
+00-18-0C   (hex)		DZS Inc.
+00180C     (base 16)		DZS Inc.
+				22A-1051 Baxter Road
+				Ottawa  Ontario  K2C 3P2
+				CA
+
+00-E0-DF   (hex)		DZS Inc.
+00E0DF     (base 16)		DZS Inc.
+				Wohlenbergstrasse. 3
+				Hannover    30179
+				DE
+
+F4-12-DA   (hex)		zte corporation
+F412DA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+C0-2C-17   (hex)		Cisco Systems, Inc
+C02C17     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+04-47-2A   (hex)		Palo Alto Networks
+04472A     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+98-49-25   (hex)		Juniper Networks
+984925     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+D0-93-95   (hex)		IEEE Registration Authority
+D09395     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-A0-1B   (hex)		DZS Inc.
+00A01B     (base 16)		DZS Inc.
+				48664 MILMONT DRIVE
+				FREMONT  CA  94538
+				US
+
+44-63-70   (hex)		LCFC(Hefei) Electronics Technology Co., Ltd
+446370     (base 16)		LCFC(Hefei) Electronics Technology Co., Ltd
+				No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area
+				HEFEI  ANHUI  230601
+				CN
+
+C0-48-84   (hex)		Sigma Bilisim Sist. Tekn. Elk. Enj. ve San. D??. Tic. Ltd. ?ti.
+C04884     (base 16)		Sigma Bilisim Sist. Tekn. Elk. Enj. ve San. D??. Tic. Ltd. ?ti.
+				CEV?ZL?DERE MAH. 1226. SOK. NO:14/1 AYTUNA APT. 
+				ANKARA    06520
+				TR
+
+80-AF-CA   (hex)		Shenzhen Cudy Technology Co., Ltd.
+80AFCA     (base 16)		Shenzhen Cudy Technology Co., Ltd.
+				Room A606, Gaoxinqi Industrial Park, Baoan 67 Dist
+				Baoan 67 District, Shenzhen    518101
+				CN
+
+1C-6E-74   (hex)		EnOcean Edge Inc.
+1C6E74     (base 16)		EnOcean Edge Inc.
+				8184 S. Highland Dr. Ste C5
+				Sandy  UT  84093
+				US
+
+7C-BF-AE   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+7CBFAE     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+7C-89-31   (hex)		Huawei Device Co., Ltd.
+7C8931     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+48-25-F3   (hex)		Huawei Device Co., Ltd.
+4825F3     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-17-A8   (hex)		Meta Platforms Technologies, LLC
+B417A8     (base 16)		Meta Platforms Technologies, LLC
+				1 Hacker Way
+				Menlo Park  CA  94025
+				US
+
+7C-ED-C6   (hex)		Amazon Technologies Inc.
+7CEDC6     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+50-30-F4   (hex)		Exascend, Inc.
+5030F4     (base 16)		Exascend, Inc.
+				530 Lawrence Expy., #416
+				Sunnyvale  CA  94085
+				US
+
+DC-EC-E3   (hex)		LYOTECH LABS LLC
+DCECE3     (base 16)		LYOTECH LABS LLC
+				8 the Green suite R
+				Dover    19901
+				US
+
+FC-35-E6   (hex)		Visteon Corporation
+FC35E6     (base 16)		Visteon Corporation
+				One Village Center Dr
+				Belleville  MI  48111
+				US
+
+C0-95-73   (hex)		AIxLink
+C09573     (base 16)		AIxLink
+				Office 2702, Unit3, Building 1, Shudu Center Phase II. 333 Jiqing Third Road. High-Tech Zone
+				Chegndu  Sichuan  610041
+				CN
+
+94-CB-CD   (hex)		zte corporation
+94CBCD     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+80-5F-8E   (hex)		Huizhou BYD Electronic Co., Ltd.
+805F8E     (base 16)		Huizhou BYD Electronic Co., Ltd.
+				Xiangshui River, Economic Development Zone, Daya Bay, Huizhou, Guangdong, China
+				Huizhou  Guangdong  516000
+				CN
+
+8C-BA-25   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+8CBA25     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+54-72-5E   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+54725E     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+F8-14-FE   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+F814FE     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5, Huitai Road Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+CC-62-FE   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+CC62FE     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+A8-3A-79   (hex)		Mist Systems, Inc.
+A83A79     (base 16)		Mist Systems, Inc.
+				1601 South De Anza Blvd, Suite 248
+				Cupertino  CA  95014
+				US
+
+EC-2A-72   (hex)		Dell Inc.
+EC2A72     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+00-BE-43   (hex)		Dell Inc.
+00BE43     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+60-5B-30   (hex)		Dell Inc.
+605B30     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+C8-4B-D6   (hex)		Dell Inc.
+C84BD6     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+E8-65-5F   (hex)		Dell Inc.
+E8655F     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+E8-B2-65   (hex)		Dell Inc.
+E8B265     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+AC-91-A1   (hex)		Dell Inc.
+AC91A1     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+A8-52-D4   (hex)		Aruba, a Hewlett Packard Enterprise Company
+A852D4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+54-88-FE   (hex)		Xiaoniu network technology (Shanghai) Co., Ltd.
+5488FE     (base 16)		Xiaoniu network technology (Shanghai) Co., Ltd.
+				Room 706, building 3, no.20 east road, jingan district.
+				Shang hai    200040
+				CN
+
+F4-EE-08   (hex)		Dell Inc.
+F4EE08     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+90-8D-6E   (hex)		Dell Inc.
+908D6E     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+F4-D5-80   (hex)		YAMAHA CORPORATION
+F4D580     (base 16)		YAMAHA CORPORATION
+				10-1 Nakazawa-cho, Naka-ku
+				Hamamatsu  Shizuoka  430-8650
+				JP
+
+38-B5-C9   (hex)		INGRAM MICRO SERVICES
+38B5C9     (base 16)		INGRAM MICRO SERVICES
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN    82000
+				FR
+
+84-4D-BE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+844DBE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+80-B9-46   (hex)		Nokia
+80B946     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+98-4B-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+984B06     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-FF-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ACFF6B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-AB-16   (hex)		NPO RTT LLC
+38AB16     (base 16)		NPO RTT LLC
+				Goncharnaya st,  30, bld 1, B529
+				Moscow  Select State  115172
+				RU
+
+C4-CB-E1   (hex)		Dell Inc.
+C4CBE1     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+2C-D7-FF   (hex)		LANCOM Systems GmbH
+2CD7FF     (base 16)		LANCOM Systems GmbH
+				Adenauer Straße 20 /B2
+				Würselen    52146
+				DE
+
+1C-88-0C   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+1C880C     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+34-85-11   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+348511     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+28-C1-A0   (hex)		Apple, Inc.
+28C1A0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-2C-73   (hex)		Apple, Inc.
+EC2C73     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-C0-6F   (hex)		Apple, Inc.
+7CC06F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-97-38   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+B09738     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+EC-81-50   (hex)		Apple, Inc.
+EC8150     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-2F-CA   (hex)		Apple, Inc.
+D42FCA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-58-A5   (hex)		Apple, Inc.
+D058A5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-67-AB   (hex)		EZELINK TELECOM
+2C67AB     (base 16)		EZELINK TELECOM
+				Bay Square Building 06 - Office No 105
+				Dubai  Dubai  111581
+				AE
+
+94-3F-D6   (hex)		Apple, Inc.
+943FD6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-06-92   (hex)		IEEE Registration Authority
+700692     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F8-B8-B4   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+F8B8B4     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+68-1A-A4   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+681AA4     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+48-55-5E   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+48555E     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+8C-DF-2C   (hex)		vivo Mobile Communication Co., Ltd.
+8CDF2C     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+CC-B5-4C   (hex)		Texas Instruments
+CCB54C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+74-A5-8C   (hex)		Texas Instruments
+74A58C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+3C-E0-02   (hex)		Texas Instruments
+3CE002     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+98-03-8A   (hex)		Texas Instruments
+98038A     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F8-79-28   (hex)		zte corporation
+F87928     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+B8-60-61   (hex)		China Mobile Group Device Co.,Ltd.
+B86061     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+D8-8E-D4   (hex)		eero inc.
+D88ED4     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+7C-8A-E1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+7C8AE1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+54-E4-A9   (hex)		BHR Tech GmbH
+54E4A9     (base 16)		BHR Tech GmbH
+				Georg-Franz-Koller-Straße 18
+				Bisamberg    2102
+				AT
+
+20-80-58   (hex)		Ciena Corporation
+208058     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+68-4A-AE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+684AAE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-D7-55   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60D755     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-45-CD   (hex)		IoT Diagnostics
+A445CD     (base 16)		IoT Diagnostics
+				10052 Commerce Park Drive
+				Cincinnati  OH  45246
+				US
+
+94-62-69   (hex)		ARRIS Group, Inc.
+946269     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D0-DD-49   (hex)		Juniper Networks
+D0DD49     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C8-63-FC   (hex)		ARRIS Group, Inc.
+C863FC     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+1C-CC-D6   (hex)		Xiaomi Communications Co Ltd
+1CCCD6     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+A8-C2-52   (hex)		Huawei Device Co., Ltd.
+A8C252     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A0-41-47   (hex)		Huawei Device Co., Ltd.
+A04147     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-AE-CB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1CAECB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-F1-9E   (hex)		Groupe Atlantic
+4CF19E     (base 16)		Groupe Atlantic
+				Ideal Boilers, National Ave
+				Hull  East Yorkshire  HU5 4JB
+				GB
+
+20-36-D7   (hex)		Shanghai Reacheng  Communication Technology Co.,Ltd
+2036D7     (base 16)		Shanghai Reacheng  Communication Technology Co.,Ltd
+				No. 80, Lane 1505 Zuchongzhi Road
+				Shanghai  Shanghai  201203
+				CN
+
+68-07-0A   (hex)		TPVision Europe B.V
+68070A     (base 16)		TPVision Europe B.V
+				Prins Bernhardplein 200
+				Amsterdam  Noord-Holland  1097 JB
+				NL
+
+4C-EB-BD   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+4CEBBD     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+7C-C9-26   (hex)		Wuhan GreeNet Information Service Co.,Ltd.
+7CC926     (base 16)		Wuhan GreeNet Information Service Co.,Ltd.
+				4-6F, Building 2, Phase 6, Optical Valley Software Park, East Lake High-Tech Development Zone
+				Wuhan    430000
+				CN
+
+5C-75-AF   (hex)		Fitbit, Inc.
+5C75AF     (base 16)		Fitbit, Inc.
+				199 Fremont Street, 14th Fl
+				San Francisco  CA  94105
+				US
+
+38-BA-B0   (hex)		Broadcom
+38BAB0     (base 16)		Broadcom
+				1320 Ridder Park
+				San Jose  CA  95131
+				US
+
+70-87-9E   (hex)		Beken Corporation
+70879E     (base 16)		Beken Corporation
+				Building 41, Capital of Tech Leaders, 1387 Zhangdong Road, Zhangjiang High-Tech Park, Pudong New District
+				Shanghai    201203
+				CN
+
+B4-50-62   (hex)		EmBestor Technology Inc.
+B45062     (base 16)		EmBestor Technology Inc.
+				7F, No.1, Chin-Shan 8th St
+				Hsin-Chu, Taiwan    300
+				TW
+
+04-4A-6C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+044A6C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-FB-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+38FB14     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-E4-A2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F0E4A2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-51-89   (hex)		SG Wireless Limited
+7C5189     (base 16)		SG Wireless Limited
+				RM 504 5/F Sun Fung Industrial Building 8-12 Ma Kok Street
+				Tsuen Wan    NA
+				HK
+
+10-63-C8   (hex)		Liteon Technology Corporation
+1063C8     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+58-20-59   (hex)		Xiaomi Communications Co Ltd
+582059     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+90-27-2B   (hex)		Algorab S.r.l.
+90272B     (base 16)		Algorab S.r.l.
+				Via Luigi Negrelli, 21/13
+				Lavis  TN  38015
+				IT
+
+4C-BC-B4   (hex)		ABB SpA - DIN Rail
+4CBCB4     (base 16)		ABB SpA - DIN Rail
+				V.le dell'industria 18
+				Vittuone  Milan  20010
+				IT
+
+94-D5-05   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+94D505     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+74-E1-B6   (hex)		Apple, Inc.
+74E1B6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-A5-2C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+24A52C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-27-59   (hex)		Levven Electronics Ltd.
+482759     (base 16)		Levven Electronics Ltd.
+				9741 54 Ave NW
+				Edmonton  Alberta  T6E 5J4
+				CA
+
+AC-77-13   (hex)		Honeywell Safety Products (Shanghai) Co.,Ltd
+AC7713     (base 16)		Honeywell Safety Products (Shanghai) Co.,Ltd
+				430 Li Bing Road Zhang Jiang Hi-Tech ParkPudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+08-84-9D   (hex)		Amazon Technologies Inc.
+08849D     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+18-A4-A9   (hex)		Vanu Inc.
+18A4A9     (base 16)		Vanu Inc.
+				81 Hartwell Ave
+				Lexington  MA  02421
+				US
+
+80-E8-2C   (hex)		Hewlett Packard
+80E82C     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+D4-AD-BD   (hex)		Cisco Systems, Inc
+D4ADBD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-40-AE   (hex)		NIIC Technology Co., Ltd.
+2440AE     (base 16)		NIIC Technology Co., Ltd.
+				Room 8218, Building 3#B, No. 268 Furong Road, Jingkai District
+				Hefei    230601
+				CN
+
+F4-0E-01   (hex)		Apple, Inc.
+F40E01     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-95-CE   (hex)		Apple, Inc.
+1495CE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-DE-06   (hex)		Apple, Inc.
+50DE06     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-D1-35   (hex)		Xtreme Power Systems
+5CD135     (base 16)		Xtreme Power Systems
+				2440 Kiowa Blvd. N. #102
+				Lake Havasu City  AZ  86403
+				US
+
+78-69-D4   (hex)		Shenyang Vibrotech Instruments Inc.
+7869D4     (base 16)		Shenyang Vibrotech Instruments Inc.
+				No 23-2 Yunfeng St. Tiexi Dist. 
+				Shenyang   Liaoning  110021
+				CN
+
+08-26-97   (hex)		Zyxel Communications Corporation
+082697     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+CC-CC-CC   (hex)		Silicon Laboratories
+CCCCCC     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+CC-66-0A   (hex)		Apple, Inc.
+CC660A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-1D-43   (hex)		Apple, Inc.
+FC1D43     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-CB-9F   (hex)		TECNO MOBILE LIMITED
+64CB9F     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+4C-FB-FE   (hex)		Sercomm Japan Corporation
+4CFBFE     (base 16)		Sercomm Japan Corporation
+				8F, 3-1, YuanQu St., NanKang, Taipei 115, Taiwan
+				Taipei     115
+				TW
+
+C0-CB-F1   (hex)		Mobiwire Mobiles (NingBo) Co., LTD
+C0CBF1     (base 16)		Mobiwire Mobiles (NingBo) Co., LTD
+				No.999 Dacheng East Road, Fenghua District, Ningbo City , Zhejiang Province, PRC
+				Ningbo  Zhejiang  315500
+				CN
+
+FC-7D-6C   (hex)		HYESUNG TECHWIN Co., Ltd
+FC7D6C     (base 16)		HYESUNG TECHWIN Co., Ltd
+				#1509,545,Dunchon-daero, Jungwon-gu
+				Seongnam   Gyeonggi-do  13215
+				KR
+
+E4-7E-9A   (hex)		zte corporation
+E47E9A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+2C-16-BD   (hex)		IEEE Registration Authority
+2C16BD     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+30-A8-89   (hex)		DECIMATOR DESIGN
+30A889     (base 16)		DECIMATOR DESIGN
+				UNIT 5 / 11 PRECISION PLACE
+				VINEYARD  NSW  2765
+				AU
+
+B4-A2-EB   (hex)		IEEE Registration Authority
+B4A2EB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+1C-D5-E2   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+1CD5E2     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+00-24-E9   (hex)		Samsung Electronics Co.,Ltd
+0024E9     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3Dong, Yeongtong-Gu
+				Suwon City  Geyonggi Do  443-742
+				KR
+
+68-3B-78   (hex)		Cisco Systems, Inc
+683B78     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F8-60-F0   (hex)		Aruba, a Hewlett Packard Enterprise Company
+F860F0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+5C-A1-E0   (hex)		EmbedWay Technologies
+5CA1E0     (base 16)		EmbedWay Technologies
+				6F, Building 8, No 2388, Chenhang Rd, Shanghai
+				Shanghai    201114
+				CN
+
+84-D4-12   (hex)		Palo Alto Networks
+84D412     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+68-AB-09   (hex)		Nokia
+68AB09     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+F4-CE-36   (hex)		Nordic Semiconductor ASA
+F4CE36     (base 16)		Nordic Semiconductor ASA
+				Otto Nielsens veg 12
+				Trondheim    NO-7052
+				NO
+
+B4-60-77   (hex)		Sichuan Changhong Electric Ltd.
+B46077     (base 16)		Sichuan Changhong Electric Ltd.
+				No.35,East MianXin Road,MianYang,Sichaun,China.
+				MianYang  SiChuan  PRC 621000
+				CN
+
+00-F6-20   (hex)		Google, Inc.
+00F620     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+F4-33-28   (hex)		CIMCON Lighting Inc.
+F43328     (base 16)		CIMCON Lighting Inc.
+				35 Crosby Drive
+				Bedford  MA  01730
+				US
+
+7C-94-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C942A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-B7-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1CB796     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-47-BC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3847BC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-92-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+549209     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-59-09   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+745909     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-5A-C7   (hex)		Cisco Systems, Inc
+5C5AC7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-B7-4B   (hex)		Technicolor CH USA Inc.
+3CB74B     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+00-ED-B8   (hex)		KYOCERA Corporation 
+00EDB8     (base 16)		KYOCERA Corporation 
+				30 Hoji
+				Kitami,  Hokkaido  099-1595
+				JP
+
+9C-99-CD   (hex)		Voippartners
+9C99CD     (base 16)		Voippartners
+				Via di Passolombardo 35
+				Rome     00133
+				IT
+
+C4-C6-03   (hex)		Cisco Systems, Inc
+C4C603     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-A1-3A   (hex)		SES-imagotag
+BCA13A     (base 16)		SES-imagotag
+				St.-Peter-Gürtel 10b
+				Graz    8010
+				AT
+
+28-23-F5   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+2823F5     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+F0-10-AB   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+F010AB     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhang Tong Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+B4-DC-09   (hex)		Guangzhou Dawei Communication Co.,Ltd
+B4DC09     (base 16)		Guangzhou Dawei Communication Co.,Ltd
+				Zone A 906#, International Business Incubator, No.3 Juquan Road, Huangpu District
+				Guangzhou  Guangdong  510660
+				CN
+
+98-86-5D   (hex)		Nokia Shanghai Bell Co., Ltd.
+98865D     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+7C-B5-9B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+7CB59B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+2C-4F-52   (hex)		Cisco Systems, Inc
+2C4F52     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-A0-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68A03E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+B8-C3-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B8C385     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan     523808
+				CN
+
+4C-E9-E4   (hex)		New H3C Technologies Co., Ltd
+4CE9E4     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+AC-DB-48   (hex)		ARRIS Group, Inc.
+ACDB48     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+C8-0D-32   (hex)		Holoplot GmbH
+C80D32     (base 16)		Holoplot GmbH
+				Ringbahnstr. 12, Hof A2
+				Berlin    12099
+				DE
+
+D0-57-94   (hex)		Sagemcom Broadband SAS
+D05794     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+04-D9-F5   (hex)		ASUSTek COMPUTER INC.
+04D9F5     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+B8-91-C9   (hex)		Handreamnet
+B891C9     (base 16)		Handreamnet
+				#1203 Ace High-end Tower II, 61, Digital-ro 26-gil, Guro-Gu
+				Seoul    08389
+				KR
+
+C8-A7-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C8A776     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-00-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A400E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-C4-FC   (hex)		Xiaomi Communications Co Ltd
+B4C4FC     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+C8-D6-9D   (hex)		Arab International Optronics
+C8D69D     (base 16)		Arab International Optronics
+				El Salam St. 
+				El Salam City   Cairo  11371
+				EG
+
+40-5B-D8   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+405BD8     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+54-EC-2F   (hex)		Ruckus Wireless
+54EC2F     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+28-99-C7   (hex)		LINDSAY BROADBAND INC
+2899C7     (base 16)		LINDSAY BROADBAND INC
+				2035 2 FISHER DRIVE
+				PETERBOROUGH  Ontario  K9J 6X6
+				CA
+
+FC-BD-67   (hex)		Arista Networks
+FCBD67     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+00-25-7E   (hex)		NEW POS TECHNOLOGY LIMITED
+00257E     (base 16)		NEW POS TECHNOLOGY LIMITED
+				6FRM, 6F, China Economic Trade Building
+				Shenzhen  Guangdong  518000
+				CN
+
+F8-AE-27   (hex)		John Deere Electronic Solutions
+F8AE27     (base 16)		John Deere Electronic Solutions
+				1441 44th St N
+				Fargo  ND  58102
+				US
+
+74-45-CE   (hex)		CRESYN
+7445CE     (base 16)		CRESYN
+				8-22,Jamwon-dong
+				Seoul  Seocho-Gu  #137-902
+				KR
+
+C4-F7-D5   (hex)		Cisco Systems, Inc
+C4F7D5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+1C-64-99   (hex)		Comtrend Corporation
+1C6499     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+10-DC-4A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+10DC4A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+88-EF-16   (hex)		ARRIS Group, Inc.
+88EF16     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+8C-A9-6F   (hex)		D&M Holdings Inc.
+8CA96F     (base 16)		D&M Holdings Inc.
+				D&M Building, 2-1 Nisshin-cho
+				Kawasaki-shi  Kanagawa    210-8569
+				JP
+
+7C-D6-61   (hex)		Xiaomi Communications Co Ltd
+7CD661     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+B0-FD-0B   (hex)		IEEE Registration Authority
+B0FD0B     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+98-B8-BA   (hex)		LG Electronics (Mobile Communications)
+98B8BA     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+0C-E9-9A   (hex)		ATLS ALTEC
+0CE99A     (base 16)		ATLS ALTEC
+				3 RUE DE LA GUIVERNONE ZI DU VERT GALANT 
+				ST OUEN L AUMONE    95310
+				FR
+
+4C-11-AE   (hex)		Espressif Inc.
+4C11AE     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+8C-89-FA   (hex)		Zhejiang Hechuan Technology Co., Ltd.
+8C89FA     (base 16)		Zhejiang Hechuan Technology Co., Ltd.
+				No. 9, Fucai Road, Longyou Industrial Zone
+				Quzhou  Zhejiang  324000
+				CN
+
+4C-BC-48   (hex)		Cisco Systems, Inc
+4CBC48     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+80-D0-4A   (hex)		Technicolor CH USA Inc.
+80D04A     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+48-D8-75   (hex)		China TransInfo Technology Co., Ltd
+48D875     (base 16)		China TransInfo Technology Co., Ltd
+				Qianfang Building, Phase I, Zhongguancun Software Park, 8 Wangxi Road, Haidian District
+				Beijing    100085
+				CN
+
+D4-78-9B   (hex)		Cisco Systems, Inc
+D4789B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+48-3F-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+483FE9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-3C-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+143CC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-E5-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A8E544     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+18-20-D5   (hex)		ARRIS Group, Inc.
+1820D5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+30-50-FD   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+3050FD     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-40-BC   (hex)		ALGORITHMICS LTD.
+0040BC     (base 16)		ALGORITHMICS LTD.
+				3 DRAYTON PARK
+				    ENGLAND
+				GB
+
+00-40-65   (hex)		GTE SPACENET
+004065     (base 16)		GTE SPACENET
+				1700 OLD MEADOW ROAD
+				MCLEAN  VA  22102
+				US
+
+88-E6-4B   (hex)		Juniper Networks
+88E64B     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+D8-D0-90   (hex)		Dell Inc.
+D8D090     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+50-C4-DD   (hex)		BUFFALO.INC
+50C4DD     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+E0-02-A5   (hex)		ABB Robotics
+E002A5     (base 16)		ABB Robotics
+				Hydrovägen 10
+				Västerås    721 68
+				SE
+
+F4-2E-7F   (hex)		Aruba, a Hewlett Packard Enterprise Company
+F42E7F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+B4-CC-04   (hex)		Piranti
+B4CC04     (base 16)		Piranti
+				126, Beolmal-ro
+				Dongan-gu, Anyang-si, Gyeonggi-do    14057
+				KR
+
+B8-D5-26   (hex)		Zyxel Communications Corporation
+B8D526     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+F0-B9-68   (hex)		ITEL MOBILE LIMITED
+F0B968     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+04-E5-6E   (hex)		THUB Co., ltd.
+04E56E     (base 16)		THUB Co., ltd.
+				#607 2, Busandaehak-ro 63beon-gil, Geumjeong-gu
+				Busan    46241
+				KR
+
+1C-7F-2C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C7F2C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+88-BC-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88BCC1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-BF-CE   (hex)		Shenzhen Century Xinyang Technology Co., Ltd
+1CBFCE     (base 16)		Shenzhen Century Xinyang Technology Co., Ltd
+				3F, North Building, Bantian High-tech industrial Zone, No. 2 of Bell Road
+				Shenzhen  Guangdong  518129
+				CN
+
+F8-30-02   (hex)		Texas Instruments
+F83002     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A8-A1-59   (hex)		ASRock Incorporation
+A8A159     (base 16)		ASRock Incorporation
+				2F., No. 37, Sec. 2, Jhongyang S. Rd., Beitou District,
+				Taipei    112
+				TW
+
+78-DA-07   (hex)		Zhejiang Tmall Technology Co., Ltd.
+78DA07     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, 
+				Shenzhen  Guangdong  518000
+				CN
+
+44-A6-1E   (hex)		INGRAM MICRO SERVICES
+44A61E     (base 16)		INGRAM MICRO SERVICES
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN    82000
+				FR
+
+38-D2-CA   (hex)		Zhejiang Tmall Technology Co., Ltd.
+38D2CA     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+10-9E-3A   (hex)		Zhejiang Tmall Technology Co., Ltd.
+109E3A     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, 
+				Shenzhen  Guangdong  518000
+				CN
+
+90-4D-C3   (hex)		Flonidan A/S
+904DC3     (base 16)		Flonidan A/S
+				Islandsvej 29
+				Horsens    8700
+				DK
+
+00-0D-F1   (hex)		IONIX INC.
+000DF1     (base 16)		IONIX INC.
+				Ssangyong IT Twin Tower 604, 442-17, Sangdaewon-dong, Jungwon-gu,
+				Seongnam-si  Gyeonggi-do  462-120
+				KR
+
+00-07-7C   (hex)		Westermo Network Technologies AB
+00077C     (base 16)		Westermo Network Technologies AB
+				Stora Sundby
+				Sweden    SE-640 40
+				SE
+
+8C-42-6D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8C426D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-F8-91   (hex)		Kaonmedia CO., LTD.
+90F891     (base 16)		Kaonmedia CO., LTD.
+				884-3, Seongnam-daero, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13517
+				KR
+
+44-5D-5E   (hex)		SHENZHEN Coolkit Technology CO.,LTD
+445D5E     (base 16)		SHENZHEN Coolkit Technology CO.,LTD
+				B09 2nd Floor, T6 ArtZone XiLi, Nanshan Dist
+				shenzhen  guangdong  518110
+				CN
+
+50-AD-71   (hex)		Tessolve Semiconductor Private Limited
+50AD71     (base 16)		Tessolve Semiconductor Private Limited
+				Plot No: 31, P2, Electronic City Phase II, Electronic City
+				Bengaluru  Karnataka  560100
+				IN
+
+20-2A-C5   (hex)		Petite-En
+202AC5     (base 16)		Petite-En
+				1, Gwanak-ro, Gwanak-gu
+				Seoul    08826
+				KR
+
+A8-BF-3C   (hex)		HDV Phoelectron Technology Limited
+A8BF3C     (base 16)		HDV Phoelectron Technology Limited
+				 Room 1103, Hang Seng Mongkok Building, 677 Nathan Road,Mongkok
+				Kowloon  Hong Kong  518103
+				CN
+
+D4-F5-27   (hex)		SIEMENS AG
+D4F527     (base 16)		SIEMENS AG
+				Oestliche Rheinbrückenstraße 50
+				Karlsruhe  Baden-Württemberg  76181
+				DE
+
+B8-B2-F8   (hex)		Apple, Inc.
+B8B2F8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-46-0A   (hex)		Apple, Inc.
+98460A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-5D-0A   (hex)		Apple, Inc.
+B85D0A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-9A-1D   (hex)		Apple, Inc.
+7C9A1D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-30-25   (hex)		Apple, Inc.
+103025     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-AC-D7   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+70ACD7     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+54-62-E2   (hex)		Apple, Inc.
+5462E2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-9D-99   (hex)		Apple, Inc.
+149D99     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-7B-AC   (hex)		Nokia
+147BAC     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+90-6D-05   (hex)		BXB ELECTRONICS CO., LTD
+906D05     (base 16)		BXB ELECTRONICS CO., LTD
+				6F.-1, NO.288-5, Xinya Rd., Qianzhen Dist.
+				Kaohsiung    80673
+				TW
+
+D4-BB-C8   (hex)		vivo Mobile Communication Co., Ltd.
+D4BBC8     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+48-95-07   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+489507     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+CC-DC-55   (hex)		Dragonchip Limited
+CCDC55     (base 16)		Dragonchip Limited
+				Room 601-2, 6/F, IC Development Centre, No. 6 Science Park West Avenue, Hong Kong Science Park, Shatin, N.T.
+				Hong Kong    NA
+				HK
+
+28-FF-B2   (hex)		Toshiba Corp.
+28FFB2     (base 16)		Toshiba Corp.
+				1-1 Shibaura 1-Chome, Minato-Ku
+				Tokyo    105-8001
+				JP
+
+1C-60-D2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+1C60D2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+F4-B5-AA   (hex)		zte corporation
+F4B5AA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E8-AC-AD   (hex)		zte corporation
+E8ACAD     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+08-36-C9   (hex)		NETGEAR
+0836C9     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+74-5B-C5   (hex)		IEEE Registration Authority
+745BC5     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+94-40-C9   (hex)		Hewlett Packard Enterprise
+9440C9     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+A0-41-A7   (hex)		NL Ministry of Defense
+A041A7     (base 16)		NL Ministry of Defense
+				PO Box 10000
+				  Noord Holland  1780 CA Den Helder
+				NL
+
+E4-46-DA   (hex)		Xiaomi Communications Co Ltd
+E446DA     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+1C-12-B0   (hex)		Amazon Technologies Inc.
+1C12B0     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+4C-BC-98   (hex)		IEEE Registration Authority
+4CBC98     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+2C-F4-32   (hex)		Espressif Inc.
+2CF432     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+64-73-66   (hex)		Shenzhen Siera Technology Ltd
+647366     (base 16)		Shenzhen Siera Technology Ltd
+				Room 2039, Shenhai Building, Wanzhong Village, Bulong Road, Minzhi, Longhua district,  City: Shenzhen
+				Shenzhen  Guangdong  518131
+				CN
+
+04-1E-FA   (hex)		BISSELL Homecare, Inc.
+041EFA     (base 16)		BISSELL Homecare, Inc.
+				2345 Walker Ave NW
+				Grand Rapids  MI  49544
+				US
+
+D8-55-75   (hex)		Samsung Electronics Co.,Ltd
+D85575     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-11-A3   (hex)		Samsung Electronics Co.,Ltd
+D411A3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+04-BA-8D   (hex)		Samsung Electronics Co.,Ltd
+04BA8D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+74-4D-28   (hex)		Routerboard.com
+744D28     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+00-A0-85   (hex)		Private
+00A085     (base 16)		Private
+
+E0-5A-9F   (hex)		IEEE Registration Authority
+E05A9F     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-5A-F8   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+8C5AF8     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+D4-58-00   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D45800     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+90-84-2B   (hex)		LEGO System A/S
+90842B     (base 16)		LEGO System A/S
+				Aastvej 1
+				Billund    DK-7190
+				DK
+
+00-26-7E   (hex)		PARROT SA
+00267E     (base 16)		PARROT SA
+				174 Quai de Jemmapes
+				Paris    75010
+				FR
+
+2C-55-7C   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+2C557C     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+F4-BC-DA   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+F4BCDA     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+00-09-15   (hex)		CAS Corp.
+000915     (base 16)		CAS Corp.
+				#19, Ganap-Ri
+				Yangju-Gun  Kyunggi-Do  482-841
+				KR
+
+58-D9-C3   (hex)		Motorola Mobility LLC, a Lenovo Company
+58D9C3     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+2C-73-A0   (hex)		Cisco Systems, Inc
+2C73A0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-3E-07   (hex)		Electrolux
+443E07     (base 16)		Electrolux
+				Corso Lino Zanussi 24
+				Porcia  PORDENONE  33080
+				IT
+
+84-85-E6   (hex)		Guangdong Asano Technology CO.,Ltd.
+8485E6     (base 16)		Guangdong Asano Technology CO.,Ltd.
+				Changsheng Road, Songxia Industrial Park, Songgang, Shishan Town, Nanhai
+				 Foshan   Guangdong, China.  528200
+				CN
+
+3C-83-75   (hex)		Microsoft Corporation
+3C8375     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+00-0A-A8   (hex)		ePipe Pty. Ltd.
+000AA8     (base 16)		ePipe Pty. Ltd.
+				P.O. Box 1428
+				Brisbane  Queensland  4066
+				AU
+
+00-29-C2   (hex)		Cisco Systems, Inc
+0029C2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-7C-0B   (hex)		Ruckus Wireless
+187C0B     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+D4-7B-35   (hex)		NEO Monitors AS
+D47B35     (base 16)		NEO Monitors AS
+				PoBox 384
+				Loerenskog  Loerenskog  1471
+				NO
+
+00-08-78   (hex)		Benchmark Storage Innovations
+000878     (base 16)		Benchmark Storage Innovations
+				3122 Sterling Circle
+				Boulder  CO  80301
+				US
+
+6C-F3-7F   (hex)		Aruba, a Hewlett Packard Enterprise Company
+6CF37F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+78-A7-EB   (hex)		1MORE
+78A7EB     (base 16)		1MORE
+				TianliaoBuilding F14
+				New Materials Industrial Park,Xueyuan Blvd  Shenzhen, Nanshan District  518005
+				CN
+
+48-5D-36   (hex)		Verizon 
+485D36     (base 16)		Verizon 
+				One Verizon Way
+				Basking Ridge  NJ  07030
+				US
+
+20-C0-47   (hex)		Verizon 
+20C047     (base 16)		Verizon 
+				One Verizon Way
+				Basking Ridge    07030
+				US
+
+34-6B-46   (hex)		Sagemcom Broadband SAS
+346B46     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+7C-60-4A   (hex)		Avelon
+7C604A     (base 16)		Avelon
+				Bändliweg 20
+				Zurich    8048
+				CH
+
+18-64-72   (hex)		Aruba, a Hewlett Packard Enterprise Company
+186472     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+84-D4-7E   (hex)		Aruba, a Hewlett Packard Enterprise Company
+84D47E     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+24-DE-C6   (hex)		Aruba, a Hewlett Packard Enterprise Company
+24DEC6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+00-17-A0   (hex)		RoboTech srl
+0017A0     (base 16)		RoboTech srl
+				Via Mazzini 82
+				Sarzana (SP)    I-19038
+				IT
+
+10-3D-0A   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+103D0A     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+94-27-90   (hex)		TCT mobile ltd
+942790     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+A4-17-91   (hex)		Shenzhen Decnta Technology Co.,LTD.
+A41791     (base 16)		Shenzhen Decnta Technology Co.,LTD.
+				F13,No.02,Building Shangqi,Nanhaidadao 4050 Nanshan District,Shenzhen,P.R.China
+				shenzhen  Guangdong  518057
+				CN
+
+34-DA-B7   (hex)		zte corporation
+34DAB7     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+10-9C-70   (hex)		Prusa Research s.r.o.
+109C70     (base 16)		Prusa Research s.r.o.
+				Partyzanska 188/7a
+				Prague    17000
+				CZ
+
+E8-4C-56   (hex)		INTERCEPT SERVICES LIMITED
+E84C56     (base 16)		INTERCEPT SERVICES LIMITED
+				Bates Mill, Colne Road
+				Huddersfield  North Yorkshire  HD1 3AG
+				GB
+
+A4-19-08   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+A41908     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+80-D3-36   (hex)		CERN
+80D336     (base 16)		CERN
+				CH-1211 
+				GENEVE  SUISSE/SWITZ  023
+				CH
+
+64-25-5E   (hex)		Observint Technologies, Inc.
+64255E     (base 16)		Observint Technologies, Inc.
+				11000 N Mopac Expressway Suite 300
+				Austin  TX  78759
+				US
+
+90-94-0A   (hex)		Analog Devices, Inc
+90940A     (base 16)		Analog Devices, Inc
+				Unit 2200, Airport Business Park, Kinsale Road
+				Cork    T12 X36X
+				IE
+
+40-B0-76   (hex)		ASUSTek COMPUTER INC.
+40B076     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+D4-3D-39   (hex)		Dialog Semiconductor
+D43D39     (base 16)		Dialog Semiconductor
+				B-7F, SiliconPark, 35, Pangyo-ro 255beon-gil, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13486
+				KR
+
+00-14-A5   (hex)		Gemtek Technology Co., Ltd.
+0014A5     (base 16)		Gemtek Technology Co., Ltd.
+				No. 1 Jen Ai Road
+				Hukou, Hsinchu    303
+				TW
+
+C0-B5-D7   (hex)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+C0B5D7     (base 16)		CHONGQING FUGUI ELECTRONICS CO.,LTD.
+				Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+				Chongqing  Chongqing  401332
+				CN
+
+D4-AD-71   (hex)		Cisco Systems, Inc
+D4AD71     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+70-2B-1D   (hex)		E-Domus International Limited
+702B1D     (base 16)		E-Domus International Limited
+				1st Floor
+				London    W1W 7BL
+				GB
+
+F0-85-C1   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+F085C1     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A,6/F,Baotian Rd3,Xixiang Town,Baoan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+4C-DD-7D   (hex)		LHP Telematics LLC
+4CDD7D     (base 16)		LHP Telematics LLC
+				17406 Tiller Ct. STE 100
+				westfield  IN  46074
+				US
+
+B8-BC-5B   (hex)		Samsung Electronics Co.,Ltd
+B8BC5B     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+10-8E-BA   (hex)		Molekule
+108EBA     (base 16)		Molekule
+				1184 Harrison Street
+				San Francisco    94103
+				US
+
+4C-21-8C   (hex)		Panasonic India Private limited
+4C218C     (base 16)		Panasonic India Private limited
+				12th floor, Ambience tower, Ambience Island
+				Gurgaon  Haryana  122002
+				IN
+
+2C-4E-7D   (hex)		Chunghua Intelligent Network Equipment Inc.
+2C4E7D     (base 16)		Chunghua Intelligent Network Equipment Inc.
+				2F-3, No.5, Sec. 3, New Taipei Blvd.,, XinZhung Dist, 
+				New Taipei City  選擇州  242
+				TW
+
+A4-F4-65   (hex)		ITEL MOBILE LIMITED
+A4F465     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+4C-91-7A   (hex)		IEEE Registration Authority
+4C917A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+74-3A-65   (hex)		NEC Corporation
+743A65     (base 16)		NEC Corporation
+				7-1, Shiba 5-chome, Minato-ku
+				Tokyo    108-8001
+				JP
+
+00-25-5C   (hex)		NEC Corporation
+00255C     (base 16)		NEC Corporation
+				1753, Shimonumabe, Nakahara-Ku, Kawasaki
+				Kanagawa    211-8666
+				JP
+
+68-4F-64   (hex)		Dell Inc.
+684F64     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+CC-70-ED   (hex)		Cisco Systems, Inc
+CC70ED     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+90-7E-30   (hex)		LARS
+907E30     (base 16)		LARS
+				Swierkowa 14
+				Niepruszewo    64-320
+				PL
+
+84-EB-3E   (hex)		Vivint Smart Home
+84EB3E     (base 16)		Vivint Smart Home
+				4931 N. 300 W.
+				Provo  UT  84604
+				US
+
+00-A0-D5   (hex)		Sierra Wireless
+00A0D5     (base 16)		Sierra Wireless
+				13811 Wireless Way
+				Richmond  RICHMOND B.C.  V6V 3A4
+				CA
+
+18-BB-26   (hex)		FN-LINK TECHNOLOGY LIMITED
+18BB26     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+18-B9-05   (hex)		Hong Kong Bouffalo Lab Limited
+18B905     (base 16)		Hong Kong Bouffalo Lab Limited
+				RM 1903, 19/F Lee Garden One 33 Hysan Avenue, Causeway Bay
+				HongKong    999077
+				HK
+
+EC-F0-FE   (hex)		zte corporation
+ECF0FE     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+94-A4-0C   (hex)		Diehl Metering GmbH
+94A40C     (base 16)		Diehl Metering GmbH
+				Industriestrasse 13
+				Ansbach    91522
+				DE
+
+70-B3-17   (hex)		Cisco Systems, Inc
+70B317     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B0-02-47   (hex)		AMPAK Technology, Inc.
+B00247     (base 16)		AMPAK Technology, Inc.
+				3F.,No.15-1 Zhonghua Road,Hsinchu Industrial Park, Hukou,Hsinchu
+				Hsinchu  Taiwan ROC.  30352
+				TW
+
+BC-E7-96   (hex)		Wireless CCTV Ltd
+BCE796     (base 16)		Wireless CCTV Ltd
+				charles Babbage house
+				Rochdale  Greater Manchester  ol164nw
+				GB
+
+94-8F-CF   (hex)		ARRIS Group, Inc.
+948FCF     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A8-F5-DD   (hex)		ARRIS Group, Inc.
+A8F5DD     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+9C-82-75   (hex)		Yichip Microelectronics (Hangzhou) Co.,Ltd
+9C8275     (base 16)		Yichip Microelectronics (Hangzhou) Co.,Ltd
+				Room 401, Building 15, No.498 Guoshoujing Road, Pudong Software Park
+				Shanghai    200120
+				CN
+
+5C-CB-CA   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+5CCBCA     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+28-E9-8E   (hex)		Mitsubishi Electric Corporation
+28E98E     (base 16)		Mitsubishi Electric Corporation
+				2-7-3 Marunouchi Chiyoda-ku
+				Tokyo    100-8310
+				JP
+
+34-F8-E7   (hex)		Cisco Systems, Inc
+34F8E7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B0-90-7E   (hex)		Cisco Systems, Inc
+B0907E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-73-60   (hex)		Earda Technologies co Ltd
+2C7360     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+50-8C-F5   (hex)		China Mobile Group Device Co.,Ltd.
+508CF5     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+1C-54-9E   (hex)		Universal Electronics, Inc.
+1C549E     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+E4-CA-12   (hex)		zte corporation
+E4CA12     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D4-9E-05   (hex)		zte corporation
+D49E05     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+58-5F-F6   (hex)		zte corporation
+585FF6     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+40-B3-0E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+40B30E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+04-CE-7E   (hex)		NXP France Semiconductors France
+04CE7E     (base 16)		NXP France Semiconductors France
+				Parc les Algorithmes,Saint Aubin
+				Gif sur Yvette    91193
+				FR
+
+C0-9A-D0   (hex)		Apple, Inc.
+C09AD0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-B0-1F   (hex)		Apple, Inc.
+94B01F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-CC-4D   (hex)		Shenzhen mantunsci co., LTD
+98CC4D     (base 16)		Shenzhen mantunsci co., LTD
+				3 floor, 3 environmental protection industrial park, Nanshan District
+				Shenzhen   Guangdong  518000
+				CN
+
+B8-C7-4A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B8C74A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+D8-CE-3A   (hex)		Xiaomi Communications Co Ltd
+D8CE3A     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+10-2C-6B   (hex)		AMPAK Technology, Inc.
+102C6B     (base 16)		AMPAK Technology, Inc.
+				3F.,No.15-1 Zhonghua Road,Hsinchu Industrial Park, Hukou,Hsinchu, Taiwan (R.O.C.)
+				Hsinchu  Taiwan ROC.  30352
+				TW
+
+74-85-C4   (hex)		New H3C Technologies Co., Ltd
+7485C4     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+94-F6-D6   (hex)		Apple, Inc.
+94F6D6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-2D-7C   (hex)		Apple, Inc.
+F82D7C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-BA-E4   (hex)		Shanghai MXCHIP Information Technology Co., Ltd.
+D0BAE4     (base 16)		Shanghai MXCHIP Information Technology Co., Ltd.
+				Room 811,Tongpu Building
+				Shanghai  Shanghai  200333
+				CN
+
+48-D3-5D   (hex)		Private
+48D35D     (base 16)		Private
+
+C0-13-2B   (hex)		Sichuan Changhong Electric Ltd.
+C0132B     (base 16)		Sichuan Changhong Electric Ltd.
+				No.35,East MianXin Road,MianYang,Sichaun,China.
+				MianYang  SiChuan  PRC 621000
+				CN
+
+0C-B4-A4   (hex)		Xintai Automobile Intelligent Network Technology
+0CB4A4     (base 16)		Xintai Automobile Intelligent Network Technology
+				Room3703E Changfu Jinmao Building，Shihua Road
+				Futian Duty Free Zone，Fubao Street，Futian District  Shenzhen City  518000
+				CN
+
+90-63-3B   (hex)		Samsung Electronics Co.,Ltd
+90633B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-AA-B6   (hex)		Samsung Electronics Co.,Ltd
+FCAAB6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-2E-47   (hex)		Suzhou SmartChip Semiconductor Co., LTD
+C82E47     (base 16)		Suzhou SmartChip Semiconductor Co., LTD
+				9A,Science Plaza,1355 JinJiHu Avenue, Suzhou Industrial Park,
+				Suzhou   Jiangsu  215021
+				CN
+
+C0-22-50   (hex)		Koss Corporation
+C02250     (base 16)		Koss Corporation
+				4129 N. Port Washington Ave.
+				Milwaukee  WI  53212
+				US
+
+A0-B5-49   (hex)		Arcadyan Corporation
+A0B549     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+00-1F-5A   (hex)		Beckwith Electric Co.
+001F5A     (base 16)		Beckwith Electric Co.
+				6190 118th Ave No
+				Largo  Florida  33773
+				US
+
+98-5D-82   (hex)		Arista Networks
+985D82     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+24-53-BF   (hex)		Enernet
+2453BF     (base 16)		Enernet
+				1007 B-dong, Hyundai Knowledge Industry Center, 70 Dusan-ro, Geumcheon-gu, Seoul, KOREA
+				SEOUL    08584
+				KR
+
+04-33-85   (hex)		Nanchang BlackShark Co.,Ltd.
+043385     (base 16)		Nanchang BlackShark Co.,Ltd.
+				Room 319, Jiaoqiao Town Office Building, Economic and Technical development zone, Nanchang City, Jiangxi Province.
+				Nanchang    330013
+				CN
+
+84-E5-D8   (hex)		Guangdong UNIPOE IoT Technology Co.,Ltd.
+84E5D8     (base 16)		Guangdong UNIPOE IoT Technology Co.,Ltd.
+				11th Fl., BLDG. B1, Guangda WE Valley, Songshan Lake District
+				Dongguan  Guangdong  523808
+				CN
+
+A8-BC-9C   (hex)		Cloud Light Technology Limited
+A8BC9C     (base 16)		Cloud Light Technology Limited
+				3/F, 6 Science Park East Avenue Hong Kong Science Park Shatin, N.T., Hong Kong
+				Hong Kong    00000
+				HK
+
+A8-90-42   (hex)		Beijing Wanwei Intelligent Technology Co., Ltd.
+A89042     (base 16)		Beijing Wanwei Intelligent Technology Co., Ltd.
+				Room 616, Section 1, Cuicing, No. 1 Shanyuan Street, Haidian District
+				Beijing  Beijing  100000
+				CN
+
+18-BE-92   (hex)		Delta Networks, Inc.
+18BE92     (base 16)		Delta Networks, Inc.
+				256 Yang Guang Street, Neihu
+				Taipei  Taiwan  11491
+				TW
+
+90-C5-4A   (hex)		vivo Mobile Communication Co., Ltd.
+90C54A     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+BC-75-96   (hex)		Beijing Broadwit Technology Co., Ltd.
+BC7596     (base 16)		Beijing Broadwit Technology Co., Ltd.
+				Beijing Changping District Beijing International Information Industry Base Jizhida Building 3rd Floor Southeast
+				Beijing  Beijing  10000
+				CN
+
+1C-34-DA   (hex)		Mellanox Technologies, Inc.
+1C34DA     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+2C-A0-2F   (hex)		Veroguard Systems Pty Ltd
+2CA02F     (base 16)		Veroguard Systems Pty Ltd
+				PO Box 5003
+				Clayton  VIC  3168
+				AU
+
+6C-5C-3D   (hex)		IEEE Registration Authority
+6C5C3D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+78-23-27   (hex)		Samsung Electronics Co.,Ltd
+782327     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-F7-56   (hex)		Samsung Electronics Co.,Ltd
+DCF756     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+68-A4-7D   (hex)		Sun Cupid Technology (HK) LTD
+68A47D     (base 16)		Sun Cupid Technology (HK) LTD
+				16/F, CEO Tower, 77 Wing Hong Street, Kowloon
+				Hong Kong    00000
+				HK
+
+18-4B-0D   (hex)		Ruckus Wireless
+184B0D     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+D4-12-43   (hex)		AMPAK Technology, Inc.
+D41243     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+48-A6-B8   (hex)		Sonos, Inc.
+48A6B8     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+B8-78-26   (hex)		Nintendo Co.,Ltd
+B87826     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+DC-CB-A8   (hex)		Explora Technologies Inc
+DCCBA8     (base 16)		Explora Technologies Inc
+				360, Franquet Street
+				Quebec    G1P 4N3
+				CA
+
+C0-78-78   (hex)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+C07878     (base 16)		FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.
+				Xin Qing Science & Technology Industrial Park,Jin An Town,Doumen ,Zhuhai,Guangdong,PRC
+				Zhuhai  Guangdong  519180
+				CN
+
+E4-B9-7A   (hex)		Dell Inc.
+E4B97A     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+34-DA-C1   (hex)		SAE Technologies Development(Dongguan) Co., Ltd.
+34DAC1     (base 16)		SAE Technologies Development(Dongguan) Co., Ltd.
+				Winnerway Industrial Area,Nancheng
+				Dongguan City  Guangdong Province  523087
+				CN
+
+70-5D-CC   (hex)		EFM Networks
+705DCC     (base 16)		EFM Networks
+				6F, Benposra II 1197-1 Bojeong Giheung Gu
+				Yong In  Kyunggi do  446913
+				KR
+
+D0-92-FA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D092FA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+E8-5A-D1   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E85AD1     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+A8-23-FE   (hex)		LG Electronics
+A823FE     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+E0-5D-5C   (hex)		Oy Everon Ab
+E05D5C     (base 16)		Oy Everon Ab
+				Teräskatu 8
+				Turku    20520
+				FI
+
+68-8F-2E   (hex)		Hitron Technologies. Inc
+688F2E     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+E0-46-E5   (hex)		Gosuncn Technology Group Co., Ltd.
+E046E5     (base 16)		Gosuncn Technology Group Co., Ltd.
+				6F, 2819 KaiChuang Blvd., Science Town, Huangpu District
+				Guangzhou City   Guangdong  510530
+				CN
+
+1C-59-9B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C599B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-BD-1E   (hex)		5VT Technologies,Taiwan LTd.
+D4BD1E     (base 16)		5VT Technologies,Taiwan LTd.
+				6F,No.19-9,SanChong Rd.,Nangang Dist,
+				Taipei    11501
+				TW
+
+BC-9B-68   (hex)		Technicolor CH USA Inc.
+BC9B68     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+CC-D4-A1   (hex)		MitraStar Technology Corp.
+CCD4A1     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+08-BA-5F   (hex)		Qingdao Hisense Electronics Co.,Ltd.
+08BA5F     (base 16)		Qingdao Hisense Electronics Co.,Ltd.
+				Qianwangang Roard 218
+				Qingdao  Shandong  266510
+				CN
+
+10-DF-FC   (hex)		Siemens AG
+10DFFC     (base 16)		Siemens AG
+				Siemensstrasse 10
+				Regensburg    93055
+				DE
+
+84-7F-3D   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+847F3D     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+C4-FD-E6   (hex)		DRTECH
+C4FDE6     (base 16)		DRTECH
+				29, Dunchon-daero 541beon-gil, Jungwon-gu
+				Seongnam  Gyeonggi-do  13216
+				KR
+
+CC-98-8B   (hex)		SONY Visual Products Inc.
+CC988B     (base 16)		SONY Visual Products Inc.
+				2-10-1 Osaki
+				Shinagawa-ku  Tokyo  141-8610
+				JP
+
+30-E3-D6   (hex)		Spotify USA Inc.
+30E3D6     (base 16)		Spotify USA Inc.
+				45 West 18th Street
+				New York  NY  10011
+				US
+
+9C-A5-25   (hex)		Shandong USR IOT Technology Limited
+9CA525     (base 16)		Shandong USR IOT Technology Limited
+				Floor 11,Building 1,No.1166 Xinluo  Street,Gaoxin District,Jinan,Shandong,250101,China
+				Jinan  Shandong  250101
+				CN
+
+E0-45-6D   (hex)		China Mobile Group Device Co.,Ltd.
+E0456D     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+28-39-26   (hex)		CyberTAN Technology Inc.
+283926     (base 16)		CyberTAN Technology Inc.
+				99 Park Ave III, Hsinchu Science Park
+				Hsinchu    308
+				TW
+
+8C-FC-A0   (hex)		Shenzhen Smart Device Technology Co., LTD.
+8CFCA0     (base 16)		Shenzhen Smart Device Technology Co., LTD.
+				SSMEC Building,Gao Xin Nan First Avenue Hi-Tech Park South,Nanshan
+				Shenzhen  GuangDong  518057
+				CN
+
+1C-42-7D   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+1C427D     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+80-69-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+806933     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-26-C7   (hex)		Cisco Systems, Inc
+BC26C7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-5E-A1   (hex)		PsiKick, Inc.
+BC5EA1     (base 16)		PsiKick, Inc.
+				2348 Walsh Ave
+				Santa Clara  CA  95051
+				US
+
+94-4F-4C   (hex)		Sound United LLC
+944F4C     (base 16)		Sound United LLC
+				One Viper Way
+				Vista  CA  92081
+				US
+
+18-81-0E   (hex)		Apple, Inc.
+18810E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-8C-4A   (hex)		Apple, Inc.
+608C4A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-B5-87   (hex)		Apple, Inc.
+74B587     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-B6-D8   (hex)		Apple, Inc.
+FCB6D8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-6A-2C   (hex)		IEEE Registration Authority
+3C6A2C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+24-1B-7A   (hex)		Apple, Inc.
+241B7A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-FE-57   (hex)		Apple, Inc.
+8CFE57     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-A6-00   (hex)		Apple, Inc.
+C0A600     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E0-C2-86   (hex)		Aisai Communication Technology Co., Ltd.
+E0C286     (base 16)		Aisai Communication Technology Co., Ltd.
+				Room 2610 Asia Trade Centre,
+				Kwai Chung  N.T.  852
+				HK
+
+74-05-A5   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+7405A5     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+28-6D-CD   (hex)		Beijing Winner Microelectronics Co.,Ltd. 
+286DCD     (base 16)		Beijing Winner Microelectronics Co.,Ltd. 
+				Floor 18, YinDu Building, No.67 FuCheng Road, HaiDian District
+				Beijing    100142
+				CN
+
+54-10-31   (hex)		SMARTO
+541031     (base 16)		SMARTO
+				25 QUAI GALLIENI
+				SURESNES  HAUT DE SEINE  92150
+				FR
+
+44-A4-66   (hex)		GROUPE LDLC
+44A466     (base 16)		GROUPE LDLC
+				Groupe LDLC - 2 rue des Erables
+				LIMONEST  Rhone  69760
+				FR
+
+D8-0D-17   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D80D17     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+18-C2-BF   (hex)		BUFFALO.INC
+18C2BF     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+E8-1C-BA   (hex)		Fortinet, Inc.
+E81CBA     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale  null  94086
+				US
+
+F0-B0-14   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+F0B014     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+18-89-A0   (hex)		Wuhan Funshion Online Technologies Co.,Ltd
+1889A0     (base 16)		Wuhan Funshion Online Technologies Co.,Ltd
+				5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan
+				Wuhan  CN/Hubei  430000
+				CN
+
+0C-2A-86   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+0C2A86     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+FC-61-E9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+FC61E9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+40-56-62   (hex)		GuoTengShengHua Electronics LTD.
+405662     (base 16)		GuoTengShengHua Electronics LTD.
+				1st floor,No. 15 of Tech North 2nd Road,Nanshan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+E4-DB-6D   (hex)		Beijing Xiaomi Electronics Co., Ltd.
+E4DB6D     (base 16)		Beijing Xiaomi Electronics Co., Ltd.
+				Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+				Beijing  Beijing  10085
+				CN
+
+00-A0-D1   (hex)		INVENTEC CORPORATION
+00A0D1     (base 16)		INVENTEC CORPORATION
+				INVENTEC BUILDING
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-18-CC   (hex)		AXIOHM SAS
+0018CC     (base 16)		AXIOHM SAS
+				1 RUE D'ARCUEIL
+				MONTROUGE    92120
+				FR
+
+00-18-27   (hex)		NEC UNIFIED SOLUTIONS NEDERLAND B.V.
+001827     (base 16)		NEC UNIFIED SOLUTIONS NEDERLAND B.V.
+				ANTON PHILIPSWEG 1
+				HILVERSUM  NH  1223KZ
+				NL
+
+00-90-04   (hex)		3COM EUROPE LTD
+009004     (base 16)		3COM EUROPE LTD
+				3COM CENTRE, BOUNDARY WAY
+				HERTS.  HP2 7YU    00000
+				GB
+
+00-06-8C   (hex)		3COM
+00068C     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+02-60-8C   (hex)		3COM
+02608C     (base 16)		3COM
+				5400 BAYFRONT PLAZA
+				SANTA CLARA  CA  95052
+				US
+
+00-D0-D8   (hex)		3COM
+00D0D8     (base 16)		3COM
+				2133 LEGHORN STREET
+				MOUNTAIN VIEW  CA  94043
+				US
+
+18-93-7F   (hex)		AMPAK Technology, Inc.
+18937F     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+A4-35-23   (hex)		Guangdong Donyan Network Technologies Co.,Ltd.
+A43523     (base 16)		Guangdong Donyan Network Technologies Co.,Ltd.
+				No.6,Kejizhong Road,Chuangye Building,Hi-tech Zone
+				Shantou  Guangdong  515000
+				CN
+
+B4-A9-4F   (hex)		MERCURY CORPORATION
+B4A94F     (base 16)		MERCURY CORPORATION
+				90, Gajaeul-ro, Seo-gu
+				INCHEON    22830
+				KR
+
+80-3A-F4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+803AF4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+48-A0-F8   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+48A0F8     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+F8-5E-3C   (hex)		SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
+F85E3C     (base 16)		SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
+				4F,Bldg A2,Hedian Industrial Park,NO.8 Shijing Rd,Guanlan,Longhua District,ShenZhen,China
+				shengzhen    518110
+				CN
+
+28-3E-76   (hex)		Common Networks
+283E76     (base 16)		Common Networks
+				1390 Market St. Suite 820
+				San Francisco  CA  94102
+				US
+
+DC-39-79   (hex)		Cisco Systems, Inc
+DC3979     (base 16)		Cisco Systems, Inc
+				280 Hope Street
+				Mountain View  CA  94041
+				US
+
+0C-53-31   (hex)		ETH Zurich
+0C5331     (base 16)		ETH Zurich
+				Dept. Computer Science, Universitätstr. 6
+				Zurich  ZH  8092
+				CH
+
+DC-90-88   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DC9088     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-81-2D   (hex)		PAX Computer Technology(Shenzhen) Ltd.
+54812D     (base 16)		PAX Computer Technology(Shenzhen) Ltd.
+				4/F, No.3 Building, Software Park, Second Central Science-Tech Road, High-Tech
+				Shenzhen  GuangDong  518057
+				CN
+
+0C-9A-42   (hex)		FN-LINK TECHNOLOGY LIMITED
+0C9A42     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+00-08-09   (hex)		Systemonic AG
+000809     (base 16)		Systemonic AG
+				Am Waldschloesschen 1
+				    
+				DE
+
+8C-41-F4   (hex)		IPmotion GmbH
+8C41F4     (base 16)		IPmotion GmbH
+				Ludwig-Rinn-Straße 8-16
+				Heuchelheim  Hessen  35452
+				DE
+
+70-4F-08   (hex)		Shenzhen Huisheng Information Technology Co., Ltd.
+704F08     (base 16)		Shenzhen Huisheng Information Technology Co., Ltd.
+				 Room 4A-205, Software Industry Base, Yuehai St
+				Nanshan District, Shenzhen  Guangdong  518000
+				CN
+
+88-35-C1   (hex)		OI ELECTRIC CO.,LTD
+8835C1     (base 16)		OI ELECTRIC CO.,LTD
+				7-3-16 KIKUNA
+				YOKOHAMA  KANAGAWA-KEN  222-0011
+				JP
+
+30-42-A1   (hex)		ilumisys Inc. DBA Toggled
+3042A1     (base 16)		ilumisys Inc. DBA Toggled
+				1820 E. Big Beaver Road
+				Troy  MI  48083
+				US
+
+00-26-B7   (hex)		Kingston Technology Company, Inc.
+0026B7     (base 16)		Kingston Technology Company, Inc.
+				17600 Newhope St.
+				Fountain Valley  CA  92708
+				US
+
+40-62-EA   (hex)		China Mobile Group Device Co.,Ltd.
+4062EA     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+4C-0F-C7   (hex)		Earda Technologies co Ltd
+4C0FC7     (base 16)		Earda Technologies co Ltd
+				5/F,Block 2 East area,Haosheng Industrial Park,
+				Guangzhou  Guangdong  511400
+				CN
+
+CC-21-19   (hex)		Samsung Electronics Co.,Ltd
+CC2119     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-23-03   (hex)		Belkin International Inc.
+302303     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista  null  90094
+				US
+
+9C-F6-DD   (hex)		IEEE Registration Authority
+9CF6DD     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-1E-80   (hex)		Icotera A/S
+001E80     (base 16)		Icotera A/S
+				Vibeholms Allé 16
+				Brøndby    2605
+				DK
+
+48-88-1E   (hex)		EthoSwitch LLC
+48881E     (base 16)		EthoSwitch LLC
+				1298 Evans Road
+				Wall Township   NJ  07719
+				US
+
+3C-71-BF   (hex)		Espressif Inc.
+3C71BF     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+00-03-93   (hex)		Apple, Inc.
+000393     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-00-C3   (hex)		Harris Corporation
+0000C3     (base 16)		Harris Corporation
+				1025 West NASA Blvd
+				Melbourne  FL  32919
+				US
+
+30-4B-07   (hex)		Motorola Mobility LLC, a Lenovo Company
+304B07     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+34-5A-BA   (hex)		tcloud intelligence
+345ABA     (base 16)		tcloud intelligence
+				Bao'an District, No. 400 Xiangshan Avenue
+				ShenZhen  GuangDong  518105
+				CN
+
+50-2F-A8   (hex)		Cisco Systems, Inc
+502FA8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+90-2B-D2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+902BD2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-D5-9D   (hex)		Sagemcom Broadband SAS
+08D59D     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+C0-83-59   (hex)		IEEE Registration Authority
+C08359     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+EC-83-D5   (hex)		GIRD Systems Inc
+EC83D5     (base 16)		GIRD Systems Inc
+				11260 Chester Road, Ste. 600
+				Cincinnati  OH  45246
+				US
+
+14-94-2F   (hex)		USYS CO.,LTD.
+14942F     (base 16)		USYS CO.,LTD.
+				#911, SeoulTechnoPark, 232, Gongneung-ro, Nowon-gu
+				Seoul    KS013
+				KR
+
+FC-B1-0D   (hex)		Shenzhen Tian Kun Technology Co.,LTD.
+FCB10D     (base 16)		Shenzhen Tian Kun Technology Co.,LTD.
+				Layer 8,Nanyuan Maple Building,No.1088 Nanshan Avenue,Nanshan Street,Nanshan District,Shenzhen
+				Shenzhen  Guangdong  518048
+				CN
+
+20-F7-7C   (hex)		vivo Mobile Communication Co., Ltd.
+20F77C     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+00-1E-EC   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+001EEC     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street
+				KUNSHAN CITY  SUZHOU PROVINCE  215300
+				CN
+
+F0-76-1C   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+F0761C     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 15, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
+				KUNSHAN  SUZHOU  215300
+				CN
+
+00-04-AE   (hex)		Sullair Corporation
+0004AE     (base 16)		Sullair Corporation
+				3700 East Michigan Blvd
+				Michigan City  IN  46360
+				US
+
+00-45-1D   (hex)		Cisco Systems, Inc
+00451D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-D6-35   (hex)		WBS Technology
+A0D635     (base 16)		WBS Technology
+				Unit32, 2 Slough Ave, Slough Business Park
+				Silverwater  New South Wales  2128
+				AU
+
+34-80-0D   (hex)		Cavium Inc
+34800D     (base 16)		Cavium Inc
+				15485 Sand Canyon Ave
+				Irvine  CA  92618
+				US
+
+B4-4B-D6   (hex)		IEEE Registration Authority
+B44BD6     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D8-91-2A   (hex)		Zyxel Communications Corporation
+D8912A     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+3C-42-7E   (hex)		IEEE Registration Authority
+3C427E     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-0B-A3   (hex)		Siemens AG
+000BA3     (base 16)		Siemens AG
+				Werner-von-Siemens-Straße 65
+				Erlangen  Bavaria  91052
+				DE
+
+00-0C-8A   (hex)		Bose Corporation
+000C8A     (base 16)		Bose Corporation
+				Automotive Systems Division (ASD)
+				Stow  MA  01775-9102
+				US
+
+24-3A-82   (hex)		IRTS
+243A82     (base 16)		IRTS
+				639 BD DES ARMARIS, IRTS
+				TOULON  Provence Alpes Cotes d'Azur  83100
+				FR
+
+88-09-07   (hex)		MKT Systemtechnik GmbH & Co. KG
+880907     (base 16)		MKT Systemtechnik GmbH & Co. KG
+				Hasskampstraße 75-77
+				Bünde  NRW  32257
+				DE
+
+58-A4-8E   (hex)		PixArt Imaging Inc.
+58A48E     (base 16)		PixArt Imaging Inc.
+				No.5, Innovation Road 1, HsinChu Science Park,
+				Hsin-Chu    300
+				TW
+
+30-D6-59   (hex)		Merging Technologies SA
+30D659     (base 16)		Merging Technologies SA
+				Le Verney 4
+				Puidoux  Outside the U.S or Canada  1070
+				CH
+
+70-2A-D5   (hex)		Samsung Electronics Co.,Ltd
+702AD5     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+88-97-65   (hex)		exands
+889765     (base 16)		exands
+				RM2202 , No. 666 Gubei road
+				shanghai    200336
+				CN
+
+38-6E-88   (hex)		zte corporation
+386E88     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+B8-85-84   (hex)		Dell Inc.
+B88584     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+40-EE-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+40EEDD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-18-86   (hex)		SmarDTV
+B01886     (base 16)		SmarDTV
+				Route de Genève 22
+				Cheseaux    CH-1033 
+				CH
+
+AC-75-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC751D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-9E-97   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+289E97     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-15-25   (hex)		Chamberlain Access Solutions
+001525     (base 16)		Chamberlain Access Solutions
+				8271 E. Gelding Drive
+				Scottsdale  AZ  85260
+				US
+
+00-1E-B0   (hex)		ImesD Electronica S.L.
+001EB0     (base 16)		ImesD Electronica S.L.
+				d'Entença 81
+				Barcelona    08015
+				ES
+
+64-1C-67   (hex)		DIGIBRAS INDUSTRIA DO BRASILS/A
+641C67     (base 16)		DIGIBRAS INDUSTRIA DO BRASILS/A
+				Rua Tambaqui, 180-B - MANAUS - AM ¨C BRAZIL
+				manaus  MANAUS  69075-210 
+				BR
+
+60-05-8A   (hex)		Hitachi Metals, Ltd.
+60058A     (base 16)		Hitachi Metals, Ltd.
+				Shinagawa Season Terrace, 2-70, Konan 1-chome
+				Minato-ku  Tokyo  108-8224
+				JP
+
+BC-22-FB   (hex)		RF Industries
+BC22FB     (base 16)		RF Industries
+				PO Box 5
+				Welland  SA  5007
+				AU
+
+00-80-B6   (hex)		Mercury Systems – Trusted Mission Solutions, Inc. 
+0080B6     (base 16)		Mercury Systems – Trusted Mission Solutions, Inc. 
+				6681 OWENS DRIVE
+				PLEASONTON  CA  94588
+				US
+
+08-51-2E   (hex)		Orion Diagnostica Oy
+08512E     (base 16)		Orion Diagnostica Oy
+				Koivu-Mankkaan tie 6
+				Espoo    02100
+				FI
+
+98-A4-04   (hex)		Ericsson AB
+98A404     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+00-CC-3F   (hex)		Universal Electronics, Inc.
+00CC3F     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+74-B9-1E   (hex)		Nanjing Bestway Automation System Co., Ltd
+74B91E     (base 16)		Nanjing Bestway Automation System Co., Ltd
+				#50 Baoxiang Road, Jiangning Bin Jiang Economic Development Zone
+				nanjing  jiangsu  211161
+				CN
+
+A0-19-B2   (hex)		IEEE Registration Authority
+A019B2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-15-C7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8C15C7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-FA-9D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60FA9D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+DC-99-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+DC9914     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-3F-D3   (hex)		Texas Instruments
+4C3FD3     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B0-53-65   (hex)		China Mobile IOT Company Limited
+B05365     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+30-88-41   (hex)		Sichuan AI-Link Technology Co., Ltd.
+308841     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou,Industrial Park
+				Anzhou,Industrial Park  Sichuan  621000
+				CN
+
+44-EF-CF   (hex)		UGENE SOLUTION inc.
+44EFCF     (base 16)		UGENE SOLUTION inc.
+				A-1508, 1509, 583, Yangcheon-ro, Gangseo-gu
+				Seoul    KS013
+				KR
+
+30-45-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+304596     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-F4-E6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0F4E6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-EB-80   (hex)		Samsung Electronics Co.,Ltd
+74EB80     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-E0-DC   (hex)		Samsung Electronics Co.,Ltd
+0CE0DC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D8-68-C3   (hex)		Samsung Electronics Co.,Ltd
+D868C3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-93-D9   (hex)		Samsung Electronics Co.,Ltd
+C493D9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-2B-B9   (hex)		Samsung Electronics Co.,Ltd
+A82BB9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+AC-FD-93   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+ACFD93     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road,Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+00-B8-C2   (hex)		Heights Telecom T ltd
+00B8C2     (base 16)		Heights Telecom T ltd
+				Moshe Lerer 15
+				Nes Ziona     7404996
+				IL
+
+F4-BF-80   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4BF80     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-0E-8F   (hex)		Sercomm Corporation.
+000E8F     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+A0-E6-17   (hex)		MATIS
+A0E617     (base 16)		MATIS
+				2/F,Hatchobori MIYATA Bldg.,1-8-2,
+				Shintomi,Chuo-Ku,  Tokyo  104-0041
+				JP
+
+70-01-B5   (hex)		Cisco Systems, Inc
+7001B5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1F-49   (hex)		Manhattan TV Ltd
+001F49     (base 16)		Manhattan TV Ltd
+				3 Phoenix Park,
+				London    NW2 7LN
+				GB
+
+88-D6-52   (hex)		AMERGINT Technologies
+88D652     (base 16)		AMERGINT Technologies
+				2315 Briargate Pkwy, Suite 100
+				Colorado Springs  CO  80920
+				US
+
+FC-90-FA   (hex)		Independent Technologies
+FC90FA     (base 16)		Independent Technologies
+				1960 Ridgeview Rd
+				Blair  NE  68008
+				US
+
+D0-B2-14   (hex)		PoeWit Inc
+D0B214     (base 16)		PoeWit Inc
+				2307 Sea Island Dr
+				Fort Lauderdale  FL  33301
+				US
+
+C4-24-56   (hex)		Palo Alto Networks
+C42456     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+B4-B6-86   (hex)		Hewlett Packard
+B4B686     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+4C-ED-FB   (hex)		ASUSTek COMPUTER INC.
+4CEDFB     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+7C-2E-BD   (hex)		Google, Inc.
+7C2EBD     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+6C-AF-15   (hex)		Webasto SE
+6CAF15     (base 16)		Webasto SE
+				Kraillinger Straße 5
+				Stockdorf  Bayern  82131
+				DE
+
+E4-E1-30   (hex)		TCT mobile ltd
+E4E130     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+0C-21-38   (hex)		Hengstler GmbH
+0C2138     (base 16)		Hengstler GmbH
+				Uhlandstrasse49
+				Aldingen  BW  78554
+				DE
+
+E4-60-59   (hex)		Pingtek Co., Ltd.
+E46059     (base 16)		Pingtek Co., Ltd.
+				5F., No.786, Zhongzheng Rd., Zhonghe Dist.
+				New Taipei City    235
+				TW
+
+E0-19-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E0191D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-D1-BA   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+68D1BA     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+1C-1A-C0   (hex)		Apple, Inc.
+1C1AC0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-78-C2   (hex)		Innowireless / QUCELL Networks
+3078C2     (base 16)		Innowireless / QUCELL Networks
+				Innowireless Bldg.  190 Seohyeon-ro
+				Bundang-gu, Seongnam-si  Gyeonggi-do  13590
+				KR
+
+40-50-B5   (hex)		Shenzhen New Species Technology Co., Ltd.
+4050B5     (base 16)		Shenzhen New Species Technology Co., Ltd.
+				Room 1827,Building R&D,EVOC intelligence valley,No 11,Gao xin west road,Guangming New District
+				Shenzhen    518107
+				CN
+
+3C-15-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3C15FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-93-4A   (hex)		Sierra Wireless
+CC934A     (base 16)		Sierra Wireless
+				1381 Wireless Way 
+				Richmond BC   CA   V6V 3A4 
+				GB
+
+00-CF-C0   (hex)		China Mobile Group Device Co.,Ltd.
+00CFC0     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+DC-33-0D   (hex)		QING DAO HAIER TELECOM CO.,LTD.
+DC330D     (base 16)		QING DAO HAIER TELECOM CO.,LTD.
+				No 1  Haier road,Hi-tech Zone，Qingdao，PR.China
+				Qingdao  Shandong  266101
+				CN
+
+68-89-75   (hex)		nuoxc
+688975     (base 16)		nuoxc
+				龙岗区横岗街道西坑社区西坑梧岗路9号2栋
+				深圳市  广东省  518173
+				CN
+
+40-F0-4E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+40F04E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+00-21-F2   (hex)		EASY3CALL Technology Limited
+0021F2     (base 16)		EASY3CALL Technology Limited
+				Room 1903-6, 19/F., HING YIP Commercial Centre
+				Hong Kong    999077
+				CN
+
+00-15-C4   (hex)		FLOVEL CO., LTD.
+0015C4     (base 16)		FLOVEL CO., LTD.
+				The Tachihi building No,3 hall, 6-1, Sakae-cho,
+				Tokyo    190-0003
+				US
+
+00-11-E6   (hex)		Scientific Atlanta
+0011E6     (base 16)		Scientific Atlanta
+				5030 Sugarloaf Parkway
+				Lawrenceville  Ga  30042
+				US
+
+24-F1-28   (hex)		Telstra
+24F128     (base 16)		Telstra
+				231 Elisabeth St
+				SYDNEY  NSW  2000
+				AU
+
+E0-38-3F   (hex)		zte corporation
+E0383F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D4-72-26   (hex)		zte corporation
+D47226     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+40-83-1D   (hex)		Apple, Inc.
+40831D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-D3-A2   (hex)		Apple, Inc.
+DCD3A2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-1D-D9   (hex)		Apple, Inc.
+5C1DD9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-05-88   (hex)		Ruijie Networks Co.,LTD
+800588     (base 16)		Ruijie Networks Co.,LTD
+				20# Building,Star-net Science Plaza,Juyuanzhou, 618 Jinshan Road
+				Fuzhou  Fujian  350002
+				CN
+
+F0-0E-1D   (hex)		Megafone Limited
+F00E1D     (base 16)		Megafone Limited
+				Unit 702,7/F,Bankok Bank Building,NO.18 Bonham Strand West
+				Hong Kong    999077
+				HK
+
+88-AE-07   (hex)		Apple, Inc.
+88AE07     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+68-FE-F7   (hex)		Apple, Inc.
+68FEF7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-35-EE   (hex)		FN-LINK TECHNOLOGY LIMITED
+AC35EE     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+88-11-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+881196     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-0E-EE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E40EEE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-D9-97   (hex)		Yuduan Mobile Co., Ltd.
+28D997     (base 16)		Yuduan Mobile Co., Ltd.
+				Room 401 No 84 Lane 887 Zuchongzhi Rd.
+				Shanghai    201203
+				CN
+
+30-1F-9A   (hex)		IEEE Registration Authority
+301F9A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+0C-2C-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C2C54     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-C1-9E   (hex)		Ruckus Wireless
+D4C19E     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+70-69-5A   (hex)		Cisco Systems, Inc
+70695A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-BF-77   (hex)		Cisco Systems, Inc
+00BF77     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D0-77-14   (hex)		Motorola Mobility LLC, a Lenovo Company
+D07714     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+30-B7-D4   (hex)		Hitron Technologies. Inc
+30B7D4     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+B4-81-BF   (hex)		Meta-Networks, LLC
+B481BF     (base 16)		Meta-Networks, LLC
+				Office 106C, 5/2, Varshavskaya street
+				Saint-Petersburg  Saint-Petersburg  196128
+				RU
+
+94-6A-B0   (hex)		Arcadyan Corporation
+946AB0     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+48-18-FA   (hex)		Nocsys
+4818FA     (base 16)		Nocsys
+				1F, No. 63 Building, No. 421 Hong Cao Road, Xuhui District
+				Shanghai  Shanghai  200233
+				CN
+
+58-7A-6A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+587A6A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+A0-38-F8   (hex)		OURA Health Oy
+A038F8     (base 16)		OURA Health Oy
+				Elektroniikkatie 3
+				Oulu    90590
+				FI
+
+68-79-24   (hex)		ELS-GmbH & Co. KG
+687924     (base 16)		ELS-GmbH & Co. KG
+				Dammstrasse 21
+				Werther  NRW  33824
+				DE
+
+28-FD-80   (hex)		IEEE Registration Authority
+28FD80     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+0C-AE-7D   (hex)		Texas Instruments
+0CAE7D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+30-45-11   (hex)		Texas Instruments
+304511     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+E8-1A-AC   (hex)		ORFEO SOUNDWORKS Inc.
+E81AAC     (base 16)		ORFEO SOUNDWORKS Inc.
+				612, 11-41, Simin-daero 327beon-gil, Dongan-gu
+				Anyang    14055
+				KR
+
+00-07-58   (hex)		DragonWave Inc.
+000758     (base 16)		DragonWave Inc.
+				600-411 Leggett Drive,
+				Kanata,  Ontario  K2K 3C9
+				CA
+
+F0-FC-C8   (hex)		ARRIS Group, Inc.
+F0FCC8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-DF-15   (hex)		Sunitec Enterprise Co.,Ltd
+F8DF15     (base 16)		Sunitec Enterprise Co.,Ltd
+				3F.,No.98-1,Mincyuan Rd.Sindian City
+				Taipei County 231    231141
+				CN
+
+00-1D-B5   (hex)		Juniper Networks
+001DB5     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+B0-26-80   (hex)		Cisco Systems, Inc
+B02680     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-93-98   (hex)		Nokia Corporation
+D49398     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  N.A.  24101
+				FI
+
+00-19-37   (hex)		CommerceGuard AB
+001937     (base 16)		CommerceGuard AB
+				Gustavslundsv 151A
+				BROMMA    16714
+				SE
+
+FC-7C-02   (hex)		Phicomm (Shanghai) Co., Ltd.
+FC7C02     (base 16)		Phicomm (Shanghai) Co., Ltd.
+				3666 SiXian Rd.,Songjiang District
+				Shanghai  Shanghai  201616
+				CN
+
+A8-61-0A   (hex)		ARDUINO AG
+A8610A     (base 16)		ARDUINO AG
+				Corso San Gottardo 6A
+				Chiasso    6830
+				CH
+
+60-97-DD   (hex)		MicroSys Electronics GmbH
+6097DD     (base 16)		MicroSys Electronics GmbH
+				Muehlweg 1
+				Sauerlach    82054
+				DE
+
+04-79-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+047970     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-57-E3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A057E3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-B0-44   (hex)		ASKEY COMPUTER CORP
+1CB044     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+F4-84-4C   (hex)		Texas Instruments
+F4844C     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B4-F2-E8   (hex)		ARRIS Group, Inc.
+B4F2E8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+3C-57-4F   (hex)		China Mobile Group Device Co.,Ltd.
+3C574F     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+D4-9C-F4   (hex)		Palo Alto Networks
+D49CF4     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+8C-16-45   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+8C1645     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+68-98-61   (hex)		Beacon Inc
+689861     (base 16)		Beacon Inc
+				82-1, Anyangcheondong-ro, Dongan-gu
+				anyang  Gyeonggi-do  14042
+				KR
+
+60-98-13   (hex)		Shanghai Visking Digital Technology Co. LTD
+609813     (base 16)		Shanghai Visking Digital Technology Co. LTD
+				Room 1301, Building A8, No.1688 Guoquan North Road, Yangpu District
+				Shanghai    200082
+				CN
+
+50-6B-4B   (hex)		Mellanox Technologies, Inc.
+506B4B     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+B4-1C-30   (hex)		zte corporation
+B41C30     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+70-5A-AC   (hex)		Samsung Electronics Co.,Ltd
+705AAC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+2C-95-69   (hex)		ARRIS Group, Inc.
+2C9569     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A0-39-EE   (hex)		Sagemcom Broadband SAS
+A039EE     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E4-CB-59   (hex)		Beijing Loveair Science and Technology Co. Ltd.
+E4CB59     (base 16)		Beijing Loveair Science and Technology Co. Ltd.
+				103,Block B, Kelin Building, No.107, Dongsi North Street, Dongcheng District,
+				 Beijing    100000
+				CN
+
+B4-E6-2D   (hex)		Espressif Inc.
+B4E62D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+84-74-60   (hex)		zte corporation
+847460     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+4C-82-CF   (hex)		Dish Technologies Corp
+4C82CF     (base 16)		Dish Technologies Corp
+				94 Inverness Terrace E
+				Englewood  CO  80112
+				US
+
+28-57-67   (hex)		Dish Technologies Corp
+285767     (base 16)		Dish Technologies Corp
+				94 Inverness Terrace E
+				Englewood  CO  80112
+				US
+
+70-16-9F   (hex)		EtherCAT Technology Group
+70169F     (base 16)		EtherCAT Technology Group
+				Ostendstr. 196
+				NUremberg    90482
+				DE
+
+68-EF-43   (hex)		Apple, Inc.
+68EF43     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-2B-20   (hex)		Apple, Inc.
+D02B20     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-61-F6   (hex)		Apple, Inc.
+2C61F6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-A3-3D   (hex)		Apple, Inc.
+D4A33D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-76-6F   (hex)		Apple, Inc.
+F0766F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-98-AD   (hex)		Apple, Inc.
+4098AD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-4D-73   (hex)		Apple, Inc.
+6C4D73     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-84-66   (hex)		Extreme Networks, Inc.
+D88466     (base 16)		Extreme Networks, Inc.
+				145 Rio Robles
+				San Jose  CA  95134
+				US
+
+00-04-96   (hex)		Extreme Networks, Inc.
+000496     (base 16)		Extreme Networks, Inc.
+				3585 Monroe Street
+				Santa Clara  CA  95051
+				US
+
+00-E0-2B   (hex)		Extreme Networks, Inc.
+00E02B     (base 16)		Extreme Networks, Inc.
+				10460 BANDLEY DRIVE
+				CUPERINT0  CA  95014
+				US
+
+5C-0E-8B   (hex)		Extreme Networks, Inc.
+5C0E8B     (base 16)		Extreme Networks, Inc.
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+74-67-F7   (hex)		Extreme Networks, Inc.
+7467F7     (base 16)		Extreme Networks, Inc.
+				1 Zebra Plaza
+				Holtsville  NY  11742
+				US
+
+E4-30-22   (hex)		Hanwha Techwin Security Vietnam
+E43022     (base 16)		Hanwha Techwin Security Vietnam
+				Plot O-2, Que Vo industrial park (Expanded area), 
+				Nam Son Commune, Bac Ninh City  Bac Ninh Province  000
+				VN
+
+04-4F-17   (hex)		HUMAX Co., Ltd.
+044F17     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+E4-8F-34   (hex)		Vodafone Italia S.p.A.
+E48F34     (base 16)		Vodafone Italia S.p.A.
+				Via Lorenteggio nr. 240
+				Milan  Italy  20147
+				IT
+
+68-5A-CF   (hex)		Samsung Electronics Co.,Ltd
+685ACF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-A8-A7   (hex)		Samsung Electronics Co.,Ltd
+0CA8A7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-67-2F   (hex)		Bowers & Wilkins
+B0672F     (base 16)		Bowers & Wilkins
+				900 Middlefield Rd Floor 4
+				Redwood City  CA  94063
+				US
+
+10-CD-6E   (hex)		FISYS
+10CD6E     (base 16)		FISYS
+				303 Expotel, 44, Dunsan-daero 117beon-gil, Seo-gu, Daejeon, Korea
+				Daejeon, Korea    KS015
+				KR
+
+D8-63-75   (hex)		Xiaomi Communications Co Ltd
+D86375     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+D8-9C-67   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+D89C67     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+64-20-9F   (hex)		Tilgin AB
+64209F     (base 16)		Tilgin AB
+				Finlandsgatan 40
+				Kista    16474
+				SE
+
+A4-3E-51   (hex)		ANOV FRANCE
+A43E51     (base 16)		ANOV FRANCE
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN    82000
+				FR
+
+70-26-05   (hex)		SONY Visual Products Inc.
+702605     (base 16)		SONY Visual Products Inc.
+				2-10-1 Osaki
+				Shinagawa-ku  Tokyo  141-8610
+				JP
+
+00-90-F1   (hex)		Seagate Cloud Systems Inc
+0090F1     (base 16)		Seagate Cloud Systems Inc
+				6305 El Camino Real
+				Carlsbad  CA  92009
+				US
+
+84-5A-81   (hex)		ffly4u
+845A81     (base 16)		ffly4u
+				3, avenue Didier Daurat
+				Toulouse    31400
+				FR
+
+CC-81-DA   (hex)		Phicomm (Shanghai) Co., Ltd.
+CC81DA     (base 16)		Phicomm (Shanghai) Co., Ltd.
+				3666 SiXian Rd.,Songjiang District
+				Shanghai  Shanghai  201616
+				CN
+
+00-80-6C   (hex)		Secure Systems & Services
+00806C     (base 16)		Secure Systems & Services
+				24, Chemin de la Pouranque
+				F-13752  LES PENNES MIRABEAU  CS30084
+				FR
+
+00-72-63   (hex)		Netcore Technology Inc.
+007263     (base 16)		Netcore Technology Inc.
+				ORIENTAL CYBERPORT,HIGHTECH 6 ROAD
+				Shenzhen    518057
+				CN
+
+1C-27-DD   (hex)		Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.
+1C27DD     (base 16)		Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.
+				Beiwu Innovation park, #23 Beiwu Villiage Road
+				Beijing  Beijing  100000
+				CN
+
+B8-C8-EB   (hex)		ITEL MOBILE LIMITED
+B8C8EB     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+80-C5-F2   (hex)		AzureWave Technology Inc.
+80C5F2     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+64-F8-8A   (hex)		China Mobile IOT Company Limited
+64F88A     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+68-DB-54   (hex)		Phicomm (Shanghai) Co., Ltd.
+68DB54     (base 16)		Phicomm (Shanghai) Co., Ltd.
+				3666 SiXian Rd.,Songjiang District
+				Shanghai  Shanghai  201616
+				CN
+
+B4-52-53   (hex)		Seagate Technology
+B45253     (base 16)		Seagate Technology
+				1280 Disc Drive
+				Shakopee  MN  55379
+				US
+
+00-11-C6   (hex)		Seagate Technology
+0011C6     (base 16)		Seagate Technology
+				M/S NW1F01
+				Longmont  CO  80503
+				US
+
+00-1D-38   (hex)		Seagate Technology
+001D38     (base 16)		Seagate Technology
+				M/S NW1F01
+				Longmont  CO  80503
+				US
+
+00-50-13   (hex)		Seagate Cloud Systems Inc
+005013     (base 16)		Seagate Cloud Systems Inc
+				7420 E. Dry Creek Parkway
+				Longmont  CO  80503
+				US
+
+C8-DF-84   (hex)		Texas Instruments
+C8DF84     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+24-0D-6C   (hex)		SMND
+240D6C     (base 16)		SMND
+				16-39, LS-ro 91 beon-gil, Dongan-gu
+				Anyang-si  Gyeonggi-do  14119
+				KR
+
+48-55-5C   (hex)		Wu Qi Technologies,Inc.
+48555C     (base 16)		Wu Qi Technologies,Inc.
+				Xiantao street data on the 19th East Road
+				Chongqing City   Yubei District  401120
+				CN
+
+18-F0-E4   (hex)		Xiaomi Communications Co Ltd
+18F0E4     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources , No.68 Qinghe Middle Street , Haidian District
+				Beijing  Beijing  100089
+				CN
+
+58-8A-5A   (hex)		Dell Inc.
+588A5A     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+9C-8C-6E   (hex)		Samsung Electronics Co.,Ltd
+9C8C6E     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+DC-4F-22   (hex)		Espressif Inc.
+DC4F22     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F8-6C-E1   (hex)		Taicang T&W Electronics
+F86CE1     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+1C-73-28   (hex)		Connected Home
+1C7328     (base 16)		Connected Home
+				19-22, Rathbone Place
+				London    W1T 1HY
+				GB
+
+D8-E0-04   (hex)		Vodia Networks Inc
+D8E004     (base 16)		Vodia Networks Inc
+				33 Broad St
+				Boston  MA  02109
+				US
+
+2C-FD-AB   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+2CFDAB     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+30-B4-B8   (hex)		LG Electronics
+30B4B8     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+38-0E-4D   (hex)		Cisco Systems, Inc
+380E4D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+38-73-EA   (hex)		IEEE Registration Authority
+3873EA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+4C-52-62   (hex)		Fujitsu Technology Solutions GmbH
+4C5262     (base 16)		Fujitsu Technology Solutions GmbH
+				Buergermeister-Ulrich-Strasse 100
+				Augsburg  Bayern  86199
+				DE
+
+80-3B-F6   (hex)		LOOK EASY INTERNATIONAL LIMITED
+803BF6     (base 16)		LOOK EASY INTERNATIONAL LIMITED
+				4th Floor, No. 551, Guang-Fu South Road
+				Taipei  Xinyi District  11074
+				TW
+
+30-EB-1F   (hex)		Skylab M&C Technology Co.,Ltd
+30EB1F     (base 16)		Skylab M&C Technology Co.,Ltd
+				6 Floor,No.9 Building,Lijincheng Scientific&Technical park,Gongye East Road,Longhua District
+				Shenzhen  Guangdong  518109
+				CN
+
+54-9A-4C   (hex)		GUANGDONG HOMECARE TECHNOLOGY CO.,LTD. 
+549A4C     (base 16)		GUANGDONG HOMECARE TECHNOLOGY CO.,LTD. 
+				8F,12#, Taihua Industrial Park, Hangkong Rd., Gushu， Baoan District
+				Shenzhen  Guangdong  518128
+				CN
+
+EC-1D-8B   (hex)		Cisco Systems, Inc
+EC1D8B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+EC-70-97   (hex)		ARRIS Group, Inc.
+EC7097     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+58-19-F8   (hex)		ARRIS Group, Inc.
+5819F8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D0-7F-C4   (hex)		Ou Wei Technology Co.，Ltd. of Shenzhen City
+D07FC4     (base 16)		Ou Wei Technology Co.，Ltd. of Shenzhen City
+				Registered Address: Room 201, Block D, Huahan Innovation Park, Langshan Road, Xili Street, Nanshan District,
+				Shenzhen  Guangdong  518057
+				CN
+
+14-79-F3   (hex)		China Mobile Group Device Co.,Ltd.
+1479F3     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+0C-CE-F6   (hex)		Guizhou Fortuneship Technology Co., Ltd
+0CCEF6     (base 16)		Guizhou Fortuneship Technology Co., Ltd
+				2nd Floor, Factory Building 4, Hi-Tech Industrial Park, Xinpu Economic Development Zone, Xinpu New District
+				Zunyi City  Guizhou Province  56300
+				CN
+
+18-06-FF   (hex)		Acer Computer(Shanghai) Limited.
+1806FF     (base 16)		Acer Computer(Shanghai) Limited.
+				Room1806-20, No.769, Jiujiang Road, Huangpu District
+				Shanghai    200000
+				CN
+
+C4-CD-82   (hex)		Hangzhou Lowan Information Technology Co., Ltd.
+C4CD82     (base 16)		Hangzhou Lowan Information Technology Co., Ltd.
+				502 Building B, United Mansion, No.2 Zijinghua Road
+				Hangzhou  Zhejiang  310023
+				CN
+
+30-FB-94   (hex)		Shanghai Fangzhiwei Information Technology CO.,Ltd.
+30FB94     (base 16)		Shanghai Fangzhiwei Information Technology CO.,Ltd.
+				The 17th  Building A Unit,No. 1688 Lianhang Road,Minhang District,Shanghai City
+				Shanghai    201100
+				CN
+
+00-23-A0   (hex)		Hana CNS Co., LTD.
+0023A0     (base 16)		Hana CNS Co., LTD.
+				Taejang-dong 1720-52 Taejang-NongGong-Danji
+				Wonju  Gangwon-do  220-962
+				KR
+
+F4-06-A5   (hex)		Hangzhou Bianfeng Networking Technology Co., Ltd.
+F406A5     (base 16)		Hangzhou Bianfeng Networking Technology Co., Ltd.
+				BlockC，2F，Building B，Paradise Software Park
+				Hangzhou  Zhejiang  310012
+				CN
+
+A4-B5-2E   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+A4B52E     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+3C-A5-81   (hex)		vivo Mobile Communication Co., Ltd.
+3CA581     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+34-E9-11   (hex)		vivo Mobile Communication Co., Ltd.
+34E911     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+64-CB-A3   (hex)		Pointmobile
+64CBA3     (base 16)		Pointmobile
+				B-9F kabul Great Valley, 32, Digital-ro 9-gil, Geumcheon-gu
+				Seoul  Seoul  08512
+				KR
+
+EC-FA-BC   (hex)		Espressif Inc.
+ECFABC     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+08-BA-22   (hex)		Swaive Corporation
+08BA22     (base 16)		Swaive Corporation
+				3565 Kettmann Road
+				San Jose  CA  95121
+				US
+
+B0-EC-E1   (hex)		Private
+B0ECE1     (base 16)		Private
+
+60-E7-8A   (hex)		UNISEM
+60E78A     (base 16)		UNISEM
+				10-7,Jangjinam-gil,Dongtan-meyeon
+				Hwaseong-si  Gyeonggi-do  18510
+				KR
+
+28-29-86   (hex)		APC by Schneider Electric
+282986     (base 16)		APC by Schneider Electric
+				800 Federal St.
+				Andover  MA  01810
+				US
+
+70-7D-B9   (hex)		Cisco Systems, Inc
+707DB9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-BE-AC   (hex)		Edimax Technology Co. Ltd.
+08BEAC     (base 16)		Edimax Technology Co. Ltd.
+				No. 278, Xinhu 1st Road
+				Taipei City  Neihu Dist  248
+				TW
+
+00-24-24   (hex)		Ace Axis Limited
+002424     (base 16)		Ace Axis Limited
+				602 Delta Business Park, Welton Road
+				Swindon    SN5 7XP
+				GB
+
+50-C9-A0   (hex)		SKIPPER AS
+50C9A0     (base 16)		SKIPPER AS
+				Enebakkvn 150
+				Oslo    0612
+				NO
+
+74-83-EF   (hex)		Arista Networks
+7483EF     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+00-E0-F6   (hex)		DECISION EUROPE
+00E0F6     (base 16)		DECISION EUROPE
+				3, rue de Lattre de Tassigny
+				85170 SAINT DENIS LA CHEVASSE    
+				FR
+
+CC-2D-E0   (hex)		Routerboard.com
+CC2DE0     (base 16)		Routerboard.com
+				Mikrotikls SIA
+				Riga  Riga  LV1009
+				LV
+
+00-BF-61   (hex)		Samsung Electronics Co.,Ltd
+00BF61     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+78-67-D7   (hex)		Apple, Inc.
+7867D7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-C1-11   (hex)		Apple, Inc.
+B8C111     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-46-B4   (hex)		FormericaOE
+1046B4     (base 16)		FormericaOE
+				5F-11, No.38, Taiyuan Street
+				 Zhubei City   Hsinchu County  302
+				TW
+
+9C-E3-3F   (hex)		Apple, Inc.
+9CE33F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-6B-1C   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+386B1C     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+DC-55-83   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+DC5583     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+00-12-48   (hex)		Dell EMC
+001248     (base 16)		Dell EMC
+				176 South Street
+				Hopkinton  MA  01748
+				US
+
+00-60-48   (hex)		Dell EMC
+006048     (base 16)		Dell EMC
+				171 SOUTH ST.,
+				HOPKINTON  MA  01748
+				US
+
+7C-C9-5A   (hex)		Dell EMC
+7CC95A     (base 16)		Dell EMC
+				176 South Street
+				Hopkinton  MA  01748
+				US
+
+D0-04-01   (hex)		Motorola Mobility LLC, a Lenovo Company
+D00401     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+74-28-57   (hex)		Mayfield Robotics
+742857     (base 16)		Mayfield Robotics
+				400 Convention Way
+				Redwood City  CA  94063
+				US
+
+58-90-43   (hex)		Sagemcom Broadband SAS
+589043     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+B4-A3-82   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+B4A382     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+A4-07-B6   (hex)		Samsung Electronics Co.,Ltd
+A407B6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+40-49-8A   (hex)		Synapticon GmbH
+40498A     (base 16)		Synapticon GmbH
+				Daimlerstr. 26
+				Schönaich    71101
+				DE
+
+38-9D-92   (hex)		Seiko Epson Corporation
+389D92     (base 16)		Seiko Epson Corporation
+				2070 Kotobuki Koaka
+				Matsumoto-shi  Nagano-ken  399-8702
+				JP
+
+8C-0F-83   (hex)		Angie Hospitality LLC
+8C0F83     (base 16)		Angie Hospitality LLC
+				12465 S Fort St, Ste 300
+				Draper  UT  84020-9021
+				US
+
+DC-68-EB   (hex)		Nintendo Co.,Ltd
+DC68EB     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+E8-36-1D   (hex)		Sense Labs, Inc.
+E8361D     (base 16)		Sense Labs, Inc.
+				485 Massachusetts Ave
+				Cambridge  MA  02139
+				US
+
+08-78-08   (hex)		Samsung Electronics Co.,Ltd
+087808     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-75-98   (hex)		Samsung Electronics Co.,Ltd
+887598     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C0-17-4D   (hex)		Samsung Electronics Co.,Ltd
+C0174D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+20-F1-9E   (hex)		ARRIS Group, Inc.
+20F19E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+C8-9F-42   (hex)		VDII Innovation AB
+C89F42     (base 16)		VDII Innovation AB
+				Nedre Holländaregatan 5
+				Helsingborg    25225 
+				SE
+
+70-91-F3   (hex)		Universal Electronics, Inc.
+7091F3     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+08-00-69   (hex)		Silicon Graphics
+080069     (base 16)		Silicon Graphics
+				2011 N. SHORELINE BLVD.
+				MOUNTAIN VIEW  CA  94039-7311
+				US
+
+00-22-91   (hex)		Cisco Systems, Inc
+002291     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+10-FC-B6   (hex)		mirusystems CO.,LTD
+10FCB6     (base 16)		mirusystems CO.,LTD
+				#1001, 2-dong, Pangoyo seven venture valley, 228-gil, Pangyo-ro
+				Bundang-gu, Seongnam-si, Gyeonggi-do    13487
+				KR
+
+04-D6-AA   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+04D6AA     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+50-A8-3A   (hex)		S Mobile Devices Limited
+50A83A     (base 16)		S Mobile Devices Limited
+				Unit B-303, 3rd Floor, Tower-B, Plot No-7,Advant IT Park Ltd , Sector-142
+				NOIDA  Uttar Pradesh  201301
+				IN
+
+64-05-E9   (hex)		Shenzhen WayOS Technology Crop., Ltd.
+6405E9     (base 16)		Shenzhen WayOS Technology Crop., Ltd.
+				F18, Yousong Business Building, Longhua New District, Shenzhen, China
+				Shenzhen  Guangdong  518109
+				CN
+
+A0-70-99   (hex)		Beijing Huacan Electronics Co., Ltd
+A07099     (base 16)		Beijing Huacan Electronics Co., Ltd
+				NO.122, Room 2006, 20/F, Qingyun Contemporary Tower, Building 9, Manting Fangyuan Residential District, Qing Yun Li, Hai Dian District
+				Beijing    100036
+				CN
+
+48-D6-D5   (hex)		Google, Inc.
+48D6D5     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+0C-58-42   (hex)		DME Micro
+0C5842     (base 16)		DME Micro
+				unit 310 Lakeside 1, 8 Science Park West Ave, Shatin
+				Hong Kong    Hong Kong
+				HK
+
+B8-10-D4   (hex)		Masimo Corporation
+B810D4     (base 16)		Masimo Corporation
+				40 Parker
+				Irvine  CA  92618
+				US
+
+BC-82-5D   (hex)		MITSUMI ELECTRIC CO.,LTD.
+BC825D     (base 16)		MITSUMI ELECTRIC CO.,LTD.
+				2-11-2, Tsurumaki
+				Tama-shi  Tokyo  206-8567
+				JP
+
+D0-66-6D   (hex)		Shenzhen Bus-Lan Technology Co., Ltd.
+D0666D     (base 16)		Shenzhen Bus-Lan Technology Co., Ltd.
+				928-931 Chuangke Building, 72-1 South Huanguan Rd, Guan Lan Jie Dao, Longhua District
+				Shenzhen  Guangdong  518100 
+				CN
+
+08-15-2F   (hex)		Samsung Electronics Co., Ltd. ARTIK
+08152F     (base 16)		Samsung Electronics Co., Ltd. ARTIK
+				1-1, Samsungjeonja-ro
+				Hwaseong-si  Gyeonggi-do  18448
+				KR
+
+F4-F5-DB   (hex)		Xiaomi Communications Co Ltd
+F4F5DB     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+CC-22-37   (hex)		IEEE Registration Authority
+CC2237     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+38-D6-20   (hex)		Limidea Concept Pte. Ltd.
+38D620     (base 16)		Limidea Concept Pte. Ltd.
+				101 Cecil Street #09-07, Tong Eng Building
+				Singapore  Singapore  069533
+				SG
+
+74-F9-1A   (hex)		Onface
+74F91A     (base 16)		Onface
+				#1408, Mario Tower, 30Gil-28, Digital-ro, Guro-gu
+				Seoul    08389
+				KR
+
+A4-34-F1   (hex)		Texas Instruments
+A434F1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+18-60-24   (hex)		Hewlett Packard
+186024     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+BC-3D-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC3D85     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-54-FA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2054FA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-37-8B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+38378B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-5C-4B   (hex)		GN Audio A/S
+745C4B     (base 16)		GN Audio A/S
+				Lautrupbjerg 7
+				Ballerup    DK-2750
+				DK
+
+00-14-9D   (hex)		Sound ID Inc.
+00149D     (base 16)		Sound ID Inc.
+				3430 West Bayshore Road
+				Palo Alto  California  94303
+				US
+
+A8-E8-24   (hex)		INIM ELECTRONICS S.R.L.
+A8E824     (base 16)		INIM ELECTRONICS S.R.L.
+				VIA DEI LAVORATORI 10 - FRAZIONE CENTOBUCHI
+				MONTEPRANDONE  ASCOLI PICENO  63076
+				IT
+
+10-49-63   (hex)		HARTING K.K.
+104963     (base 16)		HARTING K.K.
+				1-7-9, Shin-Yokohama, Kohoku-ku
+				Yokohama-city  Kanagawa  222-0033
+				JP
+
+8C-D4-8E   (hex)		ITEL MOBILE LIMITED
+8CD48E     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+64-2B-8A   (hex)		ALL BEST Industrial Co., Ltd.
+642B8A     (base 16)		ALL BEST Industrial Co., Ltd.
+				6F., No.210-20, Sec. 3, Zhongyang Rd., Tucheng Dist.,
+				New Taipei City    23680
+				TW
+
+B8-EE-0E   (hex)		Sagemcom Broadband SAS
+B8EE0E     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+EC-D0-9F   (hex)		Xiaomi Communications Co Ltd
+ECD09F     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+78-E1-03   (hex)		Amazon Technologies Inc.
+78E103     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+00-06-59   (hex)		EAL (Apeldoorn) B.V.
+000659     (base 16)		EAL (Apeldoorn) B.V.
+				Molenmakershoek 14
+				Apeldoorn    7328JK
+				NL
+
+E4-EC-10   (hex)		Nokia Corporation
+E4EC10     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu  Ou  90590
+				FI
+
+00-26-92   (hex)		Mitsubishi Electric Corporation
+002692     (base 16)		Mitsubishi Electric Corporation
+				2-7-3 Marunouchi
+				Chiyoda-ku  Tokyo  100-8310
+				JP
+
+8C-C1-21   (hex)		Panasonic Corporation AVC Networks Company
+8CC121     (base 16)		Panasonic Corporation AVC Networks Company
+				1-15 Matsuo-cho
+				Kadoma  Osaka  571-8504
+				JP
+
+EC-04-41   (hex)		ShenZhen TIGO Semiconductor Co., Ltd.
+EC0441     (base 16)		ShenZhen TIGO Semiconductor Co., Ltd.
+				Room B6-709, Funian Plaza, No.3 Shihua Road, Futian Bonded Area
+				shenzhen  China / Guangdong  518048
+				CN
+
+AC-BE-75   (hex)		Ufine Technologies Co.,Ltd.
+ACBE75     (base 16)		Ufine Technologies Co.,Ltd.
+				46, Geumgok-dong, Bundang-gu
+				Seong-nam-si  Gyeonggi-do  463-804
+				KR
+
+00-C0-8F   (hex)		Panasonic Electric Works Co., Ltd.
+00C08F     (base 16)		Panasonic Electric Works Co., Ltd.
+				Tsu-Factory
+				Mie-ken  514-8555  0000
+				JP
+
+B0-35-0B   (hex)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
+B0350B     (base 16)		MOBIWIRE MOBILES (NINGBO) CO.,LTD
+				No.999,Dacheng East Road,
+				Fenghua  Zhejiang  315500
+				CN
+
+28-A6-AC   (hex)		seca gmbh & co. kg
+28A6AC     (base 16)		seca gmbh & co. kg
+				Hammer Steindamm 3-25
+				Hamburg  Germany  22089
+				DE
+
+A8-BE-27   (hex)		Apple, Inc.
+A8BE27     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-A5-3E   (hex)		Apple, Inc.
+C0A53E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+44-4E-6D   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+444E6D     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+90-B1-E0   (hex)		Beijing Nebula Link Technology Co., Ltd
+90B1E0     (base 16)		Beijing Nebula Link Technology Co., Ltd
+				Room 1201, Building C, Caizhi International Plaza, Haidian District
+				Beijing    100083
+				CN
+
+6C-09-0A   (hex)		GEMATICA SRL
+6C090A     (base 16)		GEMATICA SRL
+				Via Diocleziano, 107
+				NAPOLI    80125
+				IT
+
+70-E1-FD   (hex)		FLEXTRONICS
+70E1FD     (base 16)		FLEXTRONICS
+				Carretera Base Aerea 5850 int 4
+				Zapopan  Jalisco  45136
+				MX
+
+74-E6-0F   (hex)		TECNO MOBILE LIMITED
+74E60F     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+00-1A-A7   (hex)		Torian Wireless
+001AA7     (base 16)		Torian Wireless
+				204 Johnston Street
+				Collingwood  Victoria  3066
+				AU
+
+0C-B4-59   (hex)		Marketech International Corp.
+0CB459     (base 16)		Marketech International Corp.
+				10F.,NO.3-2,Yuancyu St.,Nangang Dist.
+				Taipei    11503
+				TW
+
+80-14-A8   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+8014A8     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+				Room 406,Originality Building B3, NO.162 Science Avenue,Science Town
+				Guangzhou  Guangdong  510663
+				CN
+
+40-9B-CD   (hex)		D-Link International
+409BCD     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+00-2E-C7   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+002EC7     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-8E-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+488EEF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-75-95   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+547595     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+C4-71-54   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+C47154     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+58-61-63   (hex)		Quantum Networks (SG) Pte. Ltd.
+586163     (base 16)		Quantum Networks (SG) Pte. Ltd.
+				8, UBI ROAD, 2 ZERVEX #08-10,
+				Singapore    408538
+				SG
+
+EC-3D-FD   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+EC3DFD     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+94-D0-29   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+94D029     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+30-84-54   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+308454     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+5C-03-39   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5C0339     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-28-19   (hex)		Liteon Technology Corporation
+F82819     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+00-15-E5   (hex)		Cheertek Inc.
+0015E5     (base 16)		Cheertek Inc.
+				No.2, Du-Sing First Road, Science-Based Industrial Park,
+				Hsinchu    300
+				TW
+
+50-E9-71   (hex)		Jibo, Inc.
+50E971     (base 16)		Jibo, Inc.
+				230 Congress Street
+				Boston  MA  02110
+				US
+
+30-F7-7F   (hex)		S Mobile Devices Limited
+30F77F     (base 16)		S Mobile Devices Limited
+				Unit B-303, 3rd Floor, Tower-B, Plot No-7,Advant IT Park Ltd , Sector-142
+				NOIDA  Uttar Pradesh  201301
+				IN
+
+D8-6C-63   (hex)		Google, Inc.
+D86C63     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+08-40-F3   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+0840F3     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+94-FB-B2   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+94FBB2     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+				No.1, Songgang Avenue, Songgang Street, Bao’an District
+				Shenzhen  Guangdong  518105
+				CN
+
+00-1E-99   (hex)		Vantanol Industrial Corporation
+001E99     (base 16)		Vantanol Industrial Corporation
+				9F, NO 31 . Shin-Tai Road
+				Jubei City  Shinchu  302
+				TW
+
+58-B6-33   (hex)		Ruckus Wireless
+58B633     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+5C-51-81   (hex)		Samsung Electronics Co.,Ltd
+5C5181     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+60-8E-08   (hex)		Samsung Electronics Co.,Ltd
+608E08     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-3D-37   (hex)		Ruckus Wireless
+543D37     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+2C-E6-CC   (hex)		Ruckus Wireless
+2CE6CC     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+00-22-7F   (hex)		Ruckus Wireless
+00227F     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+74-91-1A   (hex)		Ruckus Wireless
+74911A     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+00-C0-5D   (hex)		L&N TECHNOLOGIES
+00C05D     (base 16)		L&N TECHNOLOGIES
+				2899 AGOURA ROAD #196
+				WESTLAKE VILLAGE  CA  91361-3200
+				US
+
+58-C5-83   (hex)		ITEL MOBILE LIMITED
+58C583     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+18-20-4C   (hex)		Kummler+Matter AG
+18204C     (base 16)		Kummler+Matter AG
+				Hohlstrasse 176
+				Zürich    8004
+				CH
+
+18-D2-25   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+18D225     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+18-B4-30   (hex)		Nest Labs Inc.
+18B430     (base 16)		Nest Labs Inc.
+				3400 Hillview Ave.
+				Palo Alto  CA  94304
+				US
+
+30-B1-64   (hex)		Power Electronics International Inc.
+30B164     (base 16)		Power Electronics International Inc.
+				561-8 Plate Drive
+				East Dundee    60118
+				US
+
+F8-8A-3C   (hex)		IEEE Registration Authority
+F88A3C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+A4-04-50   (hex)		nFore Technology Inc.
+A40450     (base 16)		nFore Technology Inc.
+				5F, NO 31, Ln 258, Rulguang Rd
+				Taipei  Neihu District  11491
+				TW
+
+FC-5A-1D   (hex)		Hitron Technologies. Inc
+FC5A1D     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+94-14-7A   (hex)		vivo Mobile Communication Co., Ltd.
+94147A     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+38-17-E1   (hex)		Technicolor CH USA Inc.
+3817E1     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+98-28-A6   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+9828A6     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+				KUNSHAN  SUZHOU  215300
+				CN
+
+94-3F-C2   (hex)		Hewlett Packard Enterprise
+943FC2     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+68-1D-EF   (hex)		Shenzhen CYX Technology Co., Ltd.
+681DEF     (base 16)		Shenzhen CYX Technology Co., Ltd.
+				2/F, Bldg. 6, Guangxi Industrial Park, Jianshe Rd.,  Longhua New Dist., Shenzhen
+				Shenzhen    518109
+				CN
+
+B4-00-16   (hex)		 INGENICO TERMINALS SAS
+B40016     (base 16)		 INGENICO TERMINALS SAS
+				28-32 BOULEVARD DE GRENELLE
+				PARIS    75015
+				FR
+
+AC-20-3E   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
+AC203E     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
+				HUST Industry Park, East-Lake Development Zone
+				Wuhan  Hubei  430223
+				CN
+
+B0-1F-29   (hex)		Helvetia INC.
+B01F29     (base 16)		Helvetia INC.
+				8-11 tokaichi-nishimachi, kitaku
+				Okayama  okayama  7000856
+				JP
+
+88-0F-10   (hex)		Huami Information Technology Co.,Ltd.
+880F10     (base 16)		Huami Information Technology Co.,Ltd.
+				Room 1201 Building A4, National Animation Industry Base
+				Hefei  Anhui  230088
+				CN
+
+14-61-2F   (hex)		Avaya Inc
+14612F     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+00-30-9D   (hex)		Nimble Microsystems, Inc.
+00309D     (base 16)		Nimble Microsystems, Inc.
+				50 Church Street - 5th Floor
+				Cambridge  MA  02138
+				US
+
+8C-21-0A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+8C210A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan
+				shenzhen  guangdong Province  518057
+				CN
+
+4C-18-9A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4C189A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+CC-4B-73   (hex)		AMPAK Technology, Inc.
+CC4B73     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+00-15-DC   (hex)		KT&C Co., Ltd.
+0015DC     (base 16)		KT&C Co., Ltd.
+				487-4, KT&C Bldg.
+				GangSeo-Ku  Seoul  157-849
+				KR
+
+00-18-7D   (hex)		Armorlink Co .Ltd
+00187D     (base 16)		Armorlink Co .Ltd
+				No. 515 of Xinzhuang Industry Park Shenfu Road
+				Shanghai Province  Shanghai  201108
+				CN
+
+F4-30-B9   (hex)		Hewlett Packard
+F430B9     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+C8-DB-26   (hex)		Logitech
+C8DB26     (base 16)		Logitech
+				7700 Gateway Blvd
+				Newark  CA  94560
+				US
+
+A4-0E-2B   (hex)		Facebook Inc
+A40E2B     (base 16)		Facebook Inc
+				1 Hacker Way
+				Menlo Park  CA  94025
+				US
+
+AC-4E-2E   (hex)		Shenzhen JingHanDa Electronics Co.Ltd
+AC4E2E     (base 16)		Shenzhen JingHanDa Electronics Co.Ltd
+				5th Floor,No 4 ,Road 1,ShangXue Technology industrial Park,LongGang district,ShenZhen,GuangDong,China
+				ShenZhen  GuangDong  518129
+				CN
+
+4C-91-0C   (hex)		 Lanix Internacional, S.A. de C.V.
+4C910C     (base 16)		 Lanix Internacional, S.A. de C.V.
+				Carretera Nogales Km8.5
+				Hermosillo  Sonora  83160
+				MX
+
+A4-78-86   (hex)		Avaya Inc
+A47886     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+04-03-D6   (hex)		Nintendo Co.,Ltd
+0403D6     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+5C-1A-6F   (hex)		Cambridge Industries(Group) Co.,Ltd.
+5C1A6F     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				5/F,Building 8, 2388 ChenHang Road, MinHang District
+				shanghai    201114
+				CN
+
+3C-4C-D0   (hex)		CERAGON NETWORKS
+3C4CD0     (base 16)		CERAGON NETWORKS
+				24 RAUEL WALLENBERG STREET
+				TEL-AVIV    96719
+				IL
+
+F4-0E-83   (hex)		ARRIS Group, Inc.
+F40E83     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+98-F7-D7   (hex)		ARRIS Group, Inc.
+98F7D7     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+B4-BF-F6   (hex)		Samsung Electronics Co.,Ltd
+B4BFF6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+2C-3A-E8   (hex)		Espressif Inc.
+2C3AE8     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+88-BD-78   (hex)		Flaircomm Microelectronics,Inc.
+88BD78     (base 16)		Flaircomm Microelectronics,Inc.
+				7F, Guomai Building, Guomai Science and Technology Park,  116 East JiangBin Road,
+				Fuzhou  Fujian  350015
+				CN
+
+58-C5-CB   (hex)		Samsung Electronics Co.,Ltd
+58C5CB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+20-6B-E7   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+206BE7     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+18-2C-B4   (hex)		Nectarsoft Co., Ltd.
+182CB4     (base 16)		Nectarsoft Co., Ltd.
+				330, Seongam-ro, Mapo-gu
+				Seoul  Seoul  03920
+				KR
+
+54-C9-DF   (hex)		FN-LINK TECHNOLOGY LIMITED
+54C9DF     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+74-F6-1C   (hex)		HTC Corporation
+74F61C     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+B8-FF-B3   (hex)		MitraStar Technology Corp.
+B8FFB3     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+EC-23-7B   (hex)		zte corporation
+EC237B     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A0-C9-A0   (hex)		Murata Manufacturing Co., Ltd.
+A0C9A0     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+98-2D-BA   (hex)		Fibergate Inc.
+982DBA     (base 16)		Fibergate Inc.
+				KDX Shibadaimon.Bld 2F 2-10-12 Shibadaimon
+				Tokyo  Minato-ku  1050012
+				JP
+
+84-C0-EF   (hex)		Samsung Electronics Co.,Ltd
+84C0EF     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+00-A3-8E   (hex)		Cisco Systems, Inc
+00A38E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-D5-5E   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+E0D55E     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+A0-40-A0   (hex)		NETGEAR
+A040A0     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-0D-2B   (hex)		Racal Instruments
+000D2B     (base 16)		Racal Instruments
+				4 Goodyear Street
+				Irvine  CA  92618
+				US
+
+48-A7-4E   (hex)		zte corporation
+48A74E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+BC-8A-E8   (hex)		QING DAO HAIER TELECOM CO.,LTD.
+BC8AE8     (base 16)		QING DAO HAIER TELECOM CO.,LTD.
+				No 1 Haier Road Hi-tech Zone
+				Qingdao    266000
+				CN
+
+F4-DE-0C   (hex)		ESPOD Ltd.
+F4DE0C     (base 16)		ESPOD Ltd.
+				6 Marjanishvili St. (Green Building) | 0102 Tbilisi | Georgia
+				Tbilisi  Tbilisi  0102
+				GE
+
+3C-52-82   (hex)		Hewlett Packard
+3C5282     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+08-ED-02   (hex)		IEEE Registration Authority
+08ED02     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E8-FD-E8   (hex)		CeLa Link Corporation
+E8FDE8     (base 16)		CeLa Link Corporation
+				401-1, Partners Tower1, Gasan digital 1-ro 83, Geumcheon-gu
+				Seoul    08589
+				KR
+
+28-C6-3F   (hex)		Intel Corporate
+28C63F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+88-CC-45   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+88CC45     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+60-08-37   (hex)		ivvi Scientific(Nanchang)Co.Ltd
+600837     (base 16)		ivvi Scientific(Nanchang)Co.Ltd
+				Coolpad Cyber Harbor,2nd Mengxi Road,Hi-TechIndustrial Park(North),NanShan District,ShenZhen,P.R.C.
+				shenzhen  Guangdong  518057
+				CN
+
+EC-36-3F   (hex)		Markov Corporation
+EC363F     (base 16)		Markov Corporation
+				650 Vaqueros Avenue, Suite A
+				Sunnyvale  CA  94085
+				US
+
+58-04-CB   (hex)		Tianjin Huisun Technology Co.,Ltd.
+5804CB     (base 16)		Tianjin Huisun Technology Co.,Ltd.
+				4/f, Building 3, No 1 Haitai Huake Street (outside Ring Road)
+				  Tianjin  300384
+				CN
+
+60-D7-E3   (hex)		IEEE Registration Authority
+60D7E3     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+18-93-D7   (hex)		Texas Instruments
+1893D7     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A8-B8-6E   (hex)		LG Electronics (Mobile Communications)
+A8B86E     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+CC-90-E8   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+CC90E8     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+7C-4F-7D   (hex)		Sawwave
+7C4F7D     (base 16)		Sawwave
+				SKn TechnoPark 1207
+				SeongNam-Si  Gyenggi-do  13207
+				KR
+
+9C-AC-6D   (hex)		Universal Electronics, Inc.
+9CAC6D     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+08-EA-40   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+08EA40     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268， Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+00-D0-95   (hex)		Alcatel-Lucent Enterprise
+00D095     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Road
+				Calabasas  CA  91301
+				US
+
+00-20-DA   (hex)		Alcatel-Lucent Enterprise
+0020DA     (base 16)		Alcatel-Lucent Enterprise
+				26801 West Agoura Road
+				CALABASAS  CA  91301
+				US
+
+6C-59-76   (hex)		Shanghai Tricheer Technology Co.,Ltd.
+6C5976     (base 16)		Shanghai Tricheer Technology Co.,Ltd.
+				Rm 907, Building 1, Lane 399, Shengxia Road,Zhangjiang Hi-Tech Park,Pudong District,Shanghai
+				Shanghai  Shanghai  201203
+				CN
+
+7C-7B-8B   (hex)		Control Concepts, Inc.
+7C7B8B     (base 16)		Control Concepts, Inc.
+				18760 Lake Dr. East
+				Chanhassen  MN  55317
+				US
+
+84-A9-C4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+84A9C4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-08-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A0086F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+34-CE-00   (hex)		XIAOMI Electronics,CO.,LTD
+34CE00     (base 16)		XIAOMI Electronics,CO.,LTD
+				Xiaomi Building, No.68 Qinghe Middle Street
+				Haidian District  Beijing  100085
+				CN
+
+D0-6F-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D06F82     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-F4-79   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A0F479     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-47-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+844765     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-FF-1F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4FF1F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-37-65   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B83765     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+34-5B-BB   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+345BBB     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+C4-0B-CB   (hex)		Xiaomi Communications Co Ltd
+C40BCB     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+84-AF-EC   (hex)		BUFFALO.INC
+84AFEC     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+5C-C6-E9   (hex)		Edifier International
+5CC6E9     (base 16)		Edifier International
+				Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway
+				Hong Kong    070
+				CN
+
+98-DD-EA   (hex)		Infinix mobility limited
+98DDEA     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+00-1D-44   (hex)		Krohne
+001D44     (base 16)		Krohne
+				Ludwig-Krohne-Str. 5
+				Duisburg    47058
+				DE
+
+A8-A1-98   (hex)		TCT mobile ltd
+A8A198     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+E0-C0-D1   (hex)		CK Telecom (Shenzhen) Limited
+E0C0D1     (base 16)		CK Telecom (Shenzhen) Limited
+				Floor 9th, Building 4C,Software Industry Base, Xuefu Road, Hi-Tech Park, Nanshan Dist.
+				Shenzhen  Guangdong  518057
+				CN
+
+AC-B5-7D   (hex)		Liteon Technology Corporation
+ACB57D     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+D4-61-9D   (hex)		Apple, Inc.
+D4619D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-49-8B   (hex)		ZOOM SERVER
+D0498B     (base 16)		ZOOM SERVER
+				North keyuan Road
+				Shenzhen    518057
+				CN
+
+08-27-CE   (hex)		NAGANO KEIKI CO., LTD.
+0827CE     (base 16)		NAGANO KEIKI CO., LTD.
+				2150 IKUTA
+				UEDA  NAGANO  386-0411
+				JP
+
+C0-D3-C0   (hex)		Samsung Electronics Co.,Ltd
+C0D3C0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-8B-C1   (hex)		Samsung Electronics Co.,Ltd
+948BC1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-56-8E   (hex)		Samsung Electronics Co.,Ltd
+14568E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-BD-61   (hex)		Apple, Inc.
+14BD61     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+50-3A-7D   (hex)		AlphaTech PLC Int’l Co., Ltd.
+503A7D     (base 16)		AlphaTech PLC Int’l Co., Ltd.
+				13F., No.618, Sec. 7, New Taipei Blvd., Xinzhuang Dist., 
+				New Taipei City    24260
+				TW
+
+F4-C4-D6   (hex)		Shenzhen Xinfa Electronic Co.,ltd
+F4C4D6     (base 16)		Shenzhen Xinfa Electronic Co.,ltd
+				No 57, Baoli Road, Buji Town
+				Longgang District  Shenzhen, Guangdong   518112
+				CN
+
+68-37-E9   (hex)		Amazon Technologies Inc.
+6837E9     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+2C-A1-7D   (hex)		ARRIS Group, Inc.
+2CA17D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+D8-32-14   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+D83214     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+10-95-4B   (hex)		Megabyte Ltd.
+10954B     (base 16)		Megabyte Ltd.
+				Unit 507, 5/F, Building 12W, NO.12 Science Park Avenue, Hong Kong Science Park, Shatin, New Territories
+				Hong Kong    NA
+				HK
+
+D8-32-5A   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+D8325A     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+9C-DA-3E   (hex)		Intel Corporate
+9CDA3E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-2C-C8   (hex)		Cisco Systems, Inc
+002CC8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C0-02-8D   (hex)		WINSTAR Display CO.,Ltd
+C0028D     (base 16)		WINSTAR Display CO.,Ltd
+				1F., No.77, Ln. 188, Pinghe S. Rd., Daya Dist., Taichung City 428, Taiwan (R.O.C.)
+				Taichung City    428
+				TW
+
+E8-9F-EC   (hex)		CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
+E89FEC     (base 16)		CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
+				No.9, 3rd Wuke Road, Wuhou District
+				Chengdu  Sichuan Province  610045
+				CN
+
+80-26-89   (hex)		D-Link International
+802689     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+F8-AB-05   (hex)		Sagemcom Broadband SAS
+F8AB05     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+7C-50-49   (hex)		Apple, Inc.
+7C5049     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-7D-EB   (hex)		Shanghai Notion Information Technology CO.,LTD.
+E47DEB     (base 16)		Shanghai Notion Information Technology CO.,LTD.
+				Room 201,Building 3,NO 289,Bisheng Rd,Pudong district,Shanghai,China
+				Shanghai  Shanghai  201203
+				CN
+
+C4-B9-CD   (hex)		Cisco Systems, Inc
+C4B9CD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-61-FE   (hex)		Hangzhou H3C Technologies Co., Limited
+D461FE     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+2C-4D-54   (hex)		ASUSTek COMPUTER INC.
+2C4D54     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+34-96-72   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+349672     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+64-B4-73   (hex)		Xiaomi Communications Co Ltd
+64B473     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+74-51-BA   (hex)		Xiaomi Communications Co Ltd
+7451BA     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+6C-B4-A7   (hex)		Landauer, Inc.
+6CB4A7     (base 16)		Landauer, Inc.
+				2 Science Road
+				Glenwood  IL  60425
+				US
+
+78-02-F8   (hex)		Xiaomi Communications Co Ltd
+7802F8     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-23-8A   (hex)		Ciena Corporation
+00238A     (base 16)		Ciena Corporation
+				920 Elkridge Landing
+				Linthicum  MD  21090
+				US
+
+00-10-81   (hex)		DPS, INC.
+001081     (base 16)		DPS, INC.
+				4922 EAST YALE AVENUE
+				FRESNO  CA  93727
+				US
+
+40-F3-85   (hex)		IEEE Registration Authority
+40F385     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+88-78-73   (hex)		Intel Corporate
+887873     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+F8-75-88   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F87588     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-4C-7F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F44C7F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-A2-4B   (hex)		Juniper Networks
+28A24B     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+08-00-27   (hex)		PCS Systemtechnik GmbH
+080027     (base 16)		PCS Systemtechnik GmbH
+				600 Suffold St
+				Lowell  MA  01854
+				US
+
+F8-A5-C5   (hex)		Cisco Systems, Inc
+F8A5C5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+7C-5A-1C   (hex)		Sophos Ltd
+7C5A1C     (base 16)		Sophos Ltd
+				The Pentagon
+				Abingdon  Oxfordshire  OX14 3YP
+				GB
+
+B0-F1-EC   (hex)		AMPAK Technology, Inc.
+B0F1EC     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road Hsinchu Industrial Park, Hukou
+				Hsinchu  Taiwan ROC.  30352 
+				TW
+
+54-2B-57   (hex)		Night Owl SP
+542B57     (base 16)		Night Owl SP
+				4720 Radio Rd
+				Naples  FL  34104
+				US
+
+50-1E-2D   (hex)		StreamUnlimited Engineering GmbH
+501E2D     (base 16)		StreamUnlimited Engineering GmbH
+				Gutheil-Schoder-Gasse 10
+				Vienna    1100
+				AT
+
+E4-5D-51   (hex)		SFR
+E45D51     (base 16)		SFR
+				12 rue jean-philippe Rameau CS 80001
+				La plaine saint denis   FRANCE  93634
+				FR
+
+EC-01-EE   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+EC01EE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+60-49-C1   (hex)		Avaya Inc
+6049C1     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+9C-66-50   (hex)		Glodio Technolies Co.,Ltd Tianjin Branch
+9C6650     (base 16)		Glodio Technolies Co.,Ltd Tianjin Branch
+				Room 904, No.1-2 LanYuan Road, HuaYuan Industrial Area
+				TianJin  TianJin  300384
+				CN
+
+A0-A3-3B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A0A33B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-67-A2   (hex)		Intel Corporate
+7C67A2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-E0-5A   (hex)		GALEA NETWORK SECURITY
+00E05A     (base 16)		GALEA NETWORK SECURITY
+				2 PLACE du COMMERCE - STE #320
+				BROSSARD, QUEBEC J4W 2T8    
+				CA
+
+48-A3-80   (hex)		Gionee Communication Equipment Co.,Ltd.
+48A380     (base 16)		Gionee Communication Equipment Co.,Ltd.
+				21/F,Times Technology Building,No. 7028,Shennan Avenue,Futian District
+				Shenzhen    518000
+				CN
+
+94-65-2D   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+94652D     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+1C-B8-57   (hex)		Becon Technologies Co,.Ltd.
+1CB857     (base 16)		Becon Technologies Co,.Ltd.
+				Room C405-A Induckwon IT Vally, 40, Imiro
+				Uiwang city  Kyunggi-do  16006
+				KR
+
+68-27-37   (hex)		Samsung Electronics Co.,Ltd
+682737     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+F0-6E-32   (hex)		MICROTEL INNOVATION S.R.L.
+F06E32     (base 16)		MICROTEL INNOVATION S.R.L.
+				Via Armentera 8
+				BORGO VALSUGANA  TN  38051
+				IT
+
+54-C4-15   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+54C415     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.469,Jianghui Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+3C-F8-62   (hex)		Intel Corporate
+3CF862     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+28-16-AD   (hex)		Intel Corporate
+2816AD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-60-D3   (hex)		AT&T
+0060D3     (base 16)		AT&T
+				3300 E Renner Road
+				Richardson  TX  75082
+				US
+
+84-8D-C7   (hex)		Cisco SPVTG
+848DC7     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+00-19-92   (hex)		Adtran Inc
+001992     (base 16)		Adtran Inc
+				901 Explorer Blvd.
+				Huntsville  AL  35806-2807
+				US
+
+04-5D-4B   (hex)		Sony Corporation
+045D4B     (base 16)		Sony Corporation
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+78-AF-58   (hex)		GIMASI SA
+78AF58     (base 16)		GIMASI SA
+				Via Luigi Lavizzari 18
+				Mendrisio  TI  6850
+				CH
+
+90-50-5A   (hex)		unGlue, Inc
+90505A     (base 16)		unGlue, Inc
+				7150 Helmsdale Circle
+				West Hils  CA  91307
+				US
+
+8C-93-51   (hex)		Jigowatts Inc.
+8C9351     (base 16)		Jigowatts Inc.
+				5892-5 Endo
+				Fujisawa  Kanagawa  252-0816
+				JP
+
+D8-38-FC   (hex)		Ruckus Wireless
+D838FC     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+34-78-D7   (hex)		Gionee Communication Equipment Co.,Ltd.
+3478D7     (base 16)		Gionee Communication Equipment Co.,Ltd.
+				21/F,Times Technology Building,No. 7028,Shennan Avenue,Futian District
+				Shenzhen    518000
+				CN
+
+5C-CC-A0   (hex)		Gridwiz Inc.
+5CCCA0     (base 16)		Gridwiz Inc.
+				4F, 25 Sanun-ro 208beon-gil, Bundang-gu
+				Seongnam  Gyeonggi  13460
+				KR
+
+68-31-FE   (hex)		Teladin Co.,Ltd.
+6831FE     (base 16)		Teladin Co.,Ltd.
+				Digital-ro 33 gil, Guro-gu
+				Seoul    08377
+				KR
+
+58-00-E3   (hex)		Liteon Technology Corporation
+5800E3     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+2C-0B-E9   (hex)		Cisco Systems, Inc
+2C0BE9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-30-18   (hex)		MCS Logic Inc.
+C43018     (base 16)		MCS Logic Inc.
+				6F. Samho Center B Bldg., 275-6,Yangjae-Dong, Secho-Ku,Seoul
+				Seoul    137-941
+				KR
+
+D0-FF-98   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D0FF98     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-E5-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B0E5ED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-86-E9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C486E9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-0A-E4   (hex)		Wistron Corporation
+000AE4     (base 16)		Wistron Corporation
+				21F, No. 88, Section 1, Hsin Tai  Wu Rd.
+				Taipei    221
+				TW
+
+34-4B-3D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+344B3D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+FC-3C-E9   (hex)		Tsingtong Technologies Co, Ltd.
+FC3CE9     (base 16)		Tsingtong Technologies Co, Ltd.
+				Rm A03-72, Floor B1, Building 1, No.13 Dazhongsi, Haidian District
+				Beijing    100098
+				CN
+
+A4-08-F5   (hex)		Sagemcom Broadband SAS
+A408F5     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-B0-91   (hex)		Transmeta Corp.
+00B091     (base 16)		Transmeta Corp.
+				3940 Freedom Circle
+				Santa Clara  CA  95054
+				US
+
+AC-C6-62   (hex)		MitraStar Technology Corp.
+ACC662     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+88-6B-44   (hex)		Sunnovo International Limited
+886B44     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+A4-58-0F   (hex)		IEEE Registration Authority
+A4580F     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C8-F7-33   (hex)		Intel Corporate
+C8F733     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+E0-A7-00   (hex)		Verkada Inc
+E0A700     (base 16)		Verkada Inc
+				325 Sharon Park Drive, Suite 519
+				Menlo Park    94025
+				US
+
+58-40-4E   (hex)		Apple, Inc.
+58404E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-C5-F3   (hex)		Apple, Inc.
+D0C5F3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-9F-EF   (hex)		Apple, Inc.
+BC9FEF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-AB-37   (hex)		Apple, Inc.
+20AB37     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-F4-45   (hex)		Apple, Inc.
+60F445     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-F9-7C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+48F97C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+40-B9-3C   (hex)		Hewlett Packard Enterprise
+40B93C     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+C0-BF-C0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0BFC0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-D9-CB   (hex)		Lesira Manufacturing Pty Ltd
+9CD9CB     (base 16)		Lesira Manufacturing Pty Ltd
+				34 Gemsbok Street
+				Pretoria  Gauteng  0186
+				ZA
+
+94-E9-79   (hex)		Liteon Technology Corporation
+94E979     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+A0-3D-6F   (hex)		Cisco Systems, Inc
+A03D6F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-E0-AF   (hex)		Cisco Systems, Inc
+A0E0AF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+4C-B8-1C   (hex)		SAM Electronics GmbH
+4CB81C     (base 16)		SAM Electronics GmbH
+				Behringstr. 120
+				Hamburg  Hamburg  22763
+				DE
+
+00-30-48   (hex)		Super Micro Computer, Inc.
+003048     (base 16)		Super Micro Computer, Inc.
+				2051 Junction Avenue
+				San Jose  CA  95131
+				US
+
+44-D2-44   (hex)		Seiko Epson Corporation
+44D244     (base 16)		Seiko Epson Corporation
+				80 Harashinden
+				Shiojiri-shi  Nagano-ken  399-0785
+				JP
+
+A0-8C-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A08CF8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-F9-5C   (hex)		U.I. Lapp GmbH
+7CF95C     (base 16)		U.I. Lapp GmbH
+				Schulze-Delitzsch-Strasse 25
+				Stuttgart    70565
+				DE
+
+A4-E6-B1   (hex)		Shanghai Joindata Technology Co.,Ltd.
+A4E6B1     (base 16)		Shanghai Joindata Technology Co.,Ltd.
+				26F,Building1,No428,South Yanggao Road,Pudong District
+				Shanghai  Shanghai  200127
+				CN
+
+C0-9C-04   (hex)		Shaanxi GuoLian Digital TV Technology Co.,Ltd.
+C09C04     (base 16)		Shaanxi GuoLian Digital TV Technology Co.,Ltd.
+				No. 15, the first Gaoxin road Hi-tech development district
+				Xi'an  Shaanxi  710075
+				CN
+
+AC-D6-57   (hex)		Shaanxi GuoLian Digital TV Technology Co.,Ltd.
+ACD657     (base 16)		Shaanxi GuoLian Digital TV Technology Co.,Ltd.
+				Chief Building, Fifth Yannan Road, Qujiang New District
+				xi'an  shaanxi  71000
+				CN
+
+00-76-86   (hex)		Cisco Systems, Inc
+007686     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+8C-2F-A6   (hex)		Solid Optics B.V.
+8C2FA6     (base 16)		Solid Optics B.V.
+				Huchtstraat 35
+				Almere    1327EC
+				NL
+
+8C-19-2D   (hex)		IEEE Registration Authority
+8C192D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-AC-E0   (hex)		ARRIS Group, Inc.
+00ACE0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-75-32   (hex)		INID BV
+007532     (base 16)		INID BV
+				Mariettahof 27
+				Haarlem  NH  2033WS
+				NL
+
+64-73-E2   (hex)		Arbiter Systems, Inc.
+6473E2     (base 16)		Arbiter Systems, Inc.
+				1324 Vendels Circle
+				Paso Robles  California  93446
+				US
+
+88-C6-26   (hex)		Logitech, Inc
+88C626     (base 16)		Logitech, Inc
+				4700 NW Camas Meadows Dr
+				Camas  WA  98607
+				US
+
+D0-60-8C   (hex)		zte corporation
+D0608C     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+AC-23-3F   (hex)		Shenzhen Minew Technologies Co., Ltd.
+AC233F     (base 16)		Shenzhen Minew Technologies Co., Ltd.
+				H Building, Gangzhilong Science Park, QInglong Road
+				Shenzhen    518109
+				CN
+
+7C-03-C9   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+7C03C9     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+B8-E9-37   (hex)		Sonos, Inc.
+B8E937     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+E4-5D-52   (hex)		Avaya Inc
+E45D52     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+00-23-F7   (hex)		Private
+0023F7     (base 16)		Private
+
+3C-80-AA   (hex)		Ransnet Singapore Pte Ltd
+3C80AA     (base 16)		Ransnet Singapore Pte Ltd
+				114, Lavender Street, #08-83, CT Hub 2
+				Singapore  Singapore  338729
+				SG
+
+B4-96-91   (hex)		Intel Corporate
+B49691     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+C8-21-58   (hex)		Intel Corporate
+C82158     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+24-20-C7   (hex)		Sagemcom Broadband SAS
+2420C7     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+D4-C8-B0   (hex)		Prime Electronics & Satellitics Inc.
+D4C8B0     (base 16)		Prime Electronics & Satellitics Inc.
+				69,Tung-Yuan Rd
+				Chung-Li City  Tao-Yuan County  32000
+				TW
+
+44-6A-B7   (hex)		ARRIS Group, Inc.
+446AB7     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+70-1C-E7   (hex)		Intel Corporate
+701CE7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+9C-2A-70   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+9C2A70     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+70-3D-15   (hex)		Hangzhou H3C Technologies Co., Limited
+703D15     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+E4-9E-12   (hex)		FREEBOX SAS
+E49E12     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+04-81-AE   (hex)		Clack Corporation
+0481AE     (base 16)		Clack Corporation
+				4462 Duraform Lane
+				Windsor  WI  53598
+				US
+
+9C-13-AB   (hex)		Chanson Water Co., Ltd.
+9C13AB     (base 16)		Chanson Water Co., Ltd.
+				2F, No.88-11, Sec 1, Guangfu Rd, Sanchong Dist.
+				New Taipei City  Taiwan  241
+				TW
+
+98-E4-76   (hex)		Zentan
+98E476     (base 16)		Zentan
+				10F-3, No. 260, Sec.2 New Taipei Blvd., Sanchong District
+				New Taipei City    24158
+				TW
+
+14-A5-1A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14A51A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-75-03   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+047503     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-EF-8C   (hex)		Zhejiang Dahua Technology Co., Ltd.
+3CEF8C     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				NO.1199 Bin An Road,Binjiang District,HangZhou,P.R.China
+				HangZhou  ZheJiang  310053
+				CN
+
+A4-D9-A4   (hex)		neXus ID Solutions AB
+A4D9A4     (base 16)		neXus ID Solutions AB
+				Telefonvägen 26
+				Stockholm    12626
+				SE
+
+48-4D-7E   (hex)		Dell Inc.
+484D7E     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+D4-E9-0B   (hex)		CVT CO.,LTD
+D4E90B     (base 16)		CVT CO.,LTD
+				Secho gu BangBae 3 dong 1001-1
+				seoul  KangNam  KS013
+				KR
+
+CC-B0-DA   (hex)		Liteon Technology Corporation
+CCB0DA     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+18-F2-92   (hex)		Shannon Systems
+18F292     (base 16)		Shannon Systems
+				Suite 1801,Wentong Building,739 Kunming Road, Yangpu, Shanghai
+				Shanghai    200000
+				CN
+
+8C-EA-1B   (hex)		Edgecore Networks Corporation
+8CEA1B     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+E0-2C-F3   (hex)		MRS Electronic GmbH
+E02CF3     (base 16)		MRS Electronic GmbH
+				Klaus-Gutsch-Str. 7
+				Rottweil    78628
+				DE
+
+50-B3-63   (hex)		Digitron da Amazonia S/A
+50B363     (base 16)		Digitron da Amazonia S/A
+				Av. Eng. Luis Carlos Berrini , 1297
+				São Paulo  São Paulo  04571010
+				BR
+
+2C-0E-3D   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+2C0E3D     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+58-E1-6C   (hex)		Ying Hua Information Technology (Shanghai)Co., LTD
+58E16C     (base 16)		Ying Hua Information Technology (Shanghai)Co., LTD
+				Room 37 ,Building 13b, No. 4 , lane 600, Tianshan Road ,Changning District Shanghai 
+				Shanghai    201210
+				CN
+
+9C-7D-A3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C7DA3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-C6-4F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4C64F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-FD-17   (hex)		TCT mobile ltd
+CCFD17     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+00-D7-8F   (hex)		Cisco Systems, Inc
+00D78F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+2C-BA-BA   (hex)		Samsung Electronics Co.,Ltd
+2CBABA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+40-D3-AE   (hex)		Samsung Electronics Co.,Ltd
+40D3AE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+2C-DD-95   (hex)		Taicang T&W Electronics
+2CDD95     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+88-E8-7F   (hex)		Apple, Inc.
+88E87F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-F4-8E   (hex)		Apple, Inc.
+9CF48E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-F7-E6   (hex)		Apple, Inc.
+5CF7E6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-53-AC   (hex)		Apple, Inc.
+B853AC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-3C-AE   (hex)		Apple, Inc.
+203CAE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-3B-E3   (hex)		Apple, Inc.
+A03BE3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-32-75   (hex)		Apple, Inc.
+4C3275     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-7A-55   (hex)		ALE International
+487A55     (base 16)		ALE International
+				32 avenue Kléber
+				Colombes    92700
+				FR
+
+00-1E-AE   (hex)		Continental Automotive Systems Inc.
+001EAE     (base 16)		Continental Automotive Systems Inc.
+				21440 West Lake Cook Road
+				Deer Park  IL  60010
+				US
+
+50-2B-73   (hex)		Tenda Technology Co.,Ltd.Dongguan branch
+502B73     (base 16)		Tenda Technology Co.,Ltd.Dongguan branch
+				Room 79,Yuanyi Road,Dalang Town,Dongguan Guangdong 523770
+				Dongguan  Guangdong  523770
+				CN
+
+04-BA-36   (hex)		Li Seng Technology Ltd
+04BA36     (base 16)		Li Seng Technology Ltd
+				Rm901, 9/F Shiu Fung Hong Building, 239-241 Wing Lok Street, Hong Kong
+				Hong Kong    0000
+				HK
+
+10-72-23   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+107223     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+				Av. Buriti, 1900 – Setor B – Distrito Industrial
+				Manaus  Amazonas  69075-000
+				BR
+
+E0-68-6D   (hex)		Raybased AB
+E0686D     (base 16)		Raybased AB
+				A Odhners Gata 41
+				Västra Frölunda    42130
+				SE
+
+18-61-C7   (hex)		lemonbeat GmbH
+1861C7     (base 16)		lemonbeat GmbH
+				Deutsche Str. 5
+				Dortmund    44339
+				DE
+
+9C-DC-71   (hex)		Hewlett Packard Enterprise
+9CDC71     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+B4-F8-1E   (hex)		Kinova
+B4F81E     (base 16)		Kinova
+				6110, rue Doris-Lussier,
+				Boisbriand  Qc  J7H 0E8
+				CA
+
+D0-3D-C3   (hex)		AQ Corporation
+D03DC3     (base 16)		AQ Corporation
+				205, Saneop-ro 155beon-gil, Gwonseon-gu
+				Suwon  Gyeonggi-do  16648
+				KR
+
+EC-01-E2   (hex)		FOXCONN INTERCONNECT TECHNOLOGY
+EC01E2     (base 16)		FOXCONN INTERCONNECT TECHNOLOGY
+				66-1, Chungshan Rd., Tucheng Dist.
+				New Taipei City  Taiwan (R.O.C.)    23680
+				TW
+
+B4-E7-82   (hex)		Vivalnk
+B4E782     (base 16)		Vivalnk
+				4655 Old Ironsides Dr, #390
+				Santa Clara  CA  95054
+				US
+
+44-09-B8   (hex)		Salcomp (Shenzhen) CO., LTD.
+4409B8     (base 16)		Salcomp (Shenzhen) CO., LTD.
+				Salcomp Road, Furong Industrial Area, Xinqiao, Shajing, Baoan District
+				Shenzhen  Guangdong  518125
+				CN
+
+38-16-D1   (hex)		Samsung Electronics Co.,Ltd
+3816D1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-17-6A   (hex)		Samsung Electronics Co.,Ltd
+D0176A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-88-90   (hex)		Samsung Electronics Co.,Ltd
+D48890     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-92-BE   (hex)		Samsung Electronics Co.,Ltd
+5492BE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+20-5D-47   (hex)		vivo Mobile Communication Co., Ltd.
+205D47     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+10-C6-0C   (hex)		Domino UK Ltd
+10C60C     (base 16)		Domino UK Ltd
+				Trafalgar Way
+				Cambridge  Cambridgeshire  CB23 8TU
+				GB
+
+04-31-10   (hex)		Inspur Group Co., Ltd.
+043110     (base 16)		Inspur Group Co., Ltd.
+				No.1036 Langchao Rd.
+				Jinan  Shandong  250101
+				CN
+
+94-9A-A9   (hex)		Microsoft Corporation
+949AA9     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+AC-AB-2E   (hex)		Beijing LasNubes Technology Co., Ltd.
+ACAB2E     (base 16)		Beijing LasNubes Technology Co., Ltd.
+				Chao-Yang-Bei-Lu No. 103, Room 1109-1110
+				Beijing    100025
+				CN
+
+60-0B-03   (hex)		Hangzhou H3C Technologies Co., Limited
+600B03     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+A0-AB-1B   (hex)		D-Link International
+A0AB1B     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+D8-42-E2   (hex)		Canary Connect, Inc.
+D842E2     (base 16)		Canary Connect, Inc.
+				132 East 43rd Street
+				New York    10017
+				US
+
+C8-B2-1E   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+C8B21E     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
+				SHEN ZHEN  GUANG DONG  518000
+				CN
+
+00-06-78   (hex)		D&M Holdings Inc.
+000678     (base 16)		D&M Holdings Inc.
+				D&M Building, 2-1 Nisshin-cho
+				Kawasaki-shi  Kanagawa   210-8569
+				JP
+
+E0-28-6D   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+E0286D     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+88-4C-CF   (hex)		Pulzze Systems, Inc
+884CCF     (base 16)		Pulzze Systems, Inc
+				1290-B Reamwood Ave
+				Sunnyvale  CA  94089
+				US
+
+50-09-59   (hex)		Technicolor CH USA Inc.
+500959     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+E4-12-18   (hex)		ShenZhen Rapoo Technology Co., Ltd.
+E41218     (base 16)		ShenZhen Rapoo Technology Co., Ltd.
+				22,Jinxiu Road East,Pingshan District,Shenzhen,China
+				Shenzhen  Guangdong  518122
+				CN
+
+00-19-84   (hex)		ESTIC Corporation
+001984     (base 16)		ESTIC Corporation
+				2-5-9 Hashibahigashino-cho
+				Moriguchi  Osaka  570-0031
+				JP
+
+00-16-28   (hex)		Magicard Ltd
+001628     (base 16)		Magicard Ltd
+				Hampshire Road
+				Weymouth  Dorset  DT4 9XD
+				GB
+
+70-2E-22   (hex)		zte corporation
+702E22     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C8-E7-76   (hex)		PTCOM Technology
+C8E776     (base 16)		PTCOM Technology
+				NO.189-8, SEC. 3, NANJING E. RD., ZHONGSHAN DIST.
+				Taipei    10488
+				TW
+
+00-02-78   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+000278     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Mae-tan-dong,
+				Suwon  Suwon  KOREA
+				KR
+
+00-23-99   (hex)		Samsung Electronics Co.,Ltd
+002399     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3dong, yeongtong-gu, Suwon-city
+				suwon    443-742
+				KR
+
+00-17-C9   (hex)		Samsung Electronics Co.,Ltd
+0017C9     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan-3Dong, Yeongtong-Gu
+				Suwon  Geyonggi-Do  443-742
+				KR
+
+90-6E-BB   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+906EBB     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+18-F4-6A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+18F46A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+4C-0F-6E   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+4C0F6E     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+78-E4-00   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+78E400     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-21-2F   (hex)		Phoebe Micro Inc.
+00212F     (base 16)		Phoebe Micro Inc.
+				47606 Kato Rd
+				Fremont  CA  94538
+				US
+
+38-59-F9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+3859F9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+EC-55-F9   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+EC55F9     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C4-73-1E   (hex)		Samsung Electronics Co.,Ltd
+C4731E     (base 16)		Samsung Electronics Co.,Ltd
+				416, Maetan 3dong, Yeongtong-Gu
+				Suwon  Gyeonggi-Do  443742
+				KR
+
+5C-0A-5B   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+5C0A5B     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				Suwon    443-743
+				US
+
+7C-E9-D3   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+7CE9D3     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+1C-3E-84   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+1C3E84     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+B8-76-3F   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+B8763F     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+60-F4-94   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+60F494     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+80-56-F2   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+8056F2     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+7C-F8-54   (hex)		Samsung Electronics Co.,Ltd
+7CF854     (base 16)		Samsung Electronics Co.,Ltd
+				415, Maetan-3dong, Yeongtong-gu, Suwon-City Gyeonggi-do 443-742
+				Suwon    443-742
+				KR
+
+00-1B-98   (hex)		Samsung Electronics Co.,Ltd
+001B98     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				GUMI  Gyeong-Buk  730-350
+				KR
+
+00-1A-8A   (hex)		Samsung Electronics Co.,Ltd
+001A8A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi-City  Gyeong-Buk  730-350
+				KR
+
+3C-5A-37   (hex)		Samsung Electronics Co.,Ltd
+3C5A37     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F4-9F-54   (hex)		Samsung Electronics Co.,Ltd
+F49F54     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-C3-AC   (hex)		Samsung Electronics Co.,Ltd
+34C3AC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+44-F4-59   (hex)		Samsung Electronics Co.,Ltd
+44F459     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-26-5D   (hex)		Samsung Electronics Co.,Ltd
+00265D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-F9-E8   (hex)		Samsung Electronics Co.,Ltd
+CCF9E8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D8-57-EF   (hex)		Samsung Electronics Co.,Ltd
+D857EF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-E2-C2   (hex)		Samsung Electronics Co.,Ltd
+18E2C2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+98-52-B1   (hex)		Samsung Electronics Co.,Ltd
+9852B1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-40-E2   (hex)		Samsung Electronics Co.,Ltd
+E440E2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-3B-59   (hex)		Samsung Electronics Co.,Ltd
+103B59     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D8-90-E8   (hex)		Samsung Electronics Co.,Ltd
+D890E8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-62-EA   (hex)		Samsung Electronics Co.,Ltd
+C462EA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-F4-2A   (hex)		Samsung Electronics Co.,Ltd
+14F42A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-08-C2   (hex)		Samsung Electronics Co.,Ltd
+0808C2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-FE-3C   (hex)		Samsung Electronics Co.,Ltd
+CCFE3C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+28-BA-B5   (hex)		Samsung Electronics Co.,Ltd
+28BAB5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-26-66   (hex)		Samsung Electronics Co.,Ltd
+182666     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-D6-C9   (hex)		Samsung Electronics Co.,Ltd
+30D6C9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+CC-07-AB   (hex)		Samsung Electronics Co.,Ltd
+CC07AB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-25-67   (hex)		Samsung Electronics Co.,Ltd
+002567     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-B1-F3   (hex)		Samsung Electronics Co.,Ltd
+BCB1F3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-62-B8   (hex)		Samsung Electronics Co.,Ltd
+1C62B8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-3A-28   (hex)		Samsung Electronics Co.,Ltd
+B43A28     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+78-A8-73   (hex)		Samsung Electronics Co.,Ltd
+78A873     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-1C-43   (hex)		Samsung Electronics Co.,Ltd
+001C43     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-23-D6   (hex)		Samsung Electronics Co.,Ltd
+0023D6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E4-12-1D   (hex)		Samsung Electronics Co.,Ltd
+E4121D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+44-D6-E1   (hex)		Snuza International Pty. Ltd.
+44D6E1     (base 16)		Snuza International Pty. Ltd.
+				Unit 11, Roeland Square, Roeland Street
+				Cape Town  Western Cape  8001
+				ZA
+
+FC-91-14   (hex)		Technicolor CH USA Inc.
+FC9114     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+00-2A-10   (hex)		Cisco Systems, Inc
+002A10     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-A2-89   (hex)		Cisco Systems, Inc
+00A289     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+44-E9-DD   (hex)		Sagemcom Broadband SAS
+44E9DD     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+00-0F-5E   (hex)		Veo
+000F5E     (base 16)		Veo
+				910 Rincon Circle
+				San Jose  CA  95131
+				US
+
+00-13-28   (hex)		Westech Korea Inc.,
+001328     (base 16)		Westech Korea Inc.,
+				548-9, Gajwa3-Dong,Seo-ku,
+				Incheon    404-817
+				KR
+
+B8-BF-83   (hex)		Intel Corporate
+B8BF83     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+8C-61-02   (hex)		Beijing Baofengmojing Technologies Co., Ltd
+8C6102     (base 16)		Beijing Baofengmojing Technologies Co., Ltd
+				7/F, Tower C, Zhizhen Plaza, No.7 Zhichun Rd, Haidian District
+				Beijing    100191
+				CN
+
+54-8C-A0   (hex)		Liteon Technology Corporation
+548CA0     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+7C-79-E8   (hex)		PayRange Inc.
+7C79E8     (base 16)		PayRange Inc.
+				700 NE Multnomah St. Ste 1400
+				Portland  OR  97232
+				US
+
+A4-31-11   (hex)		ZIV
+A43111     (base 16)		ZIV
+				Polígono Parque Tecnológico, 210
+				ZAMUDIO  VIZCAYA  48170
+				ES
+
+00-80-73   (hex)		DWB ASSOCIATES
+008073     (base 16)		DWB ASSOCIATES
+				9360 SW GEMINI DRIVE
+				BEAVERTON  OR  97005-7151
+				US
+
+80-A1-D7   (hex)		Shanghai DareGlobal Technologies Co.,Ltd
+80A1D7     (base 16)		Shanghai DareGlobal Technologies Co.,Ltd
+				22F,Info Tech Building,No.1555,Kongjiang Rd.
+				Shanghai    200092
+				CN
+
+EC-1F-72   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+EC1F72     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93 Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+8C-0D-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8C0D76     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-BE-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+84BE52     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-9F-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+849FB5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-CA-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4CAA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+84-E0-F4   (hex)		IEEE Registration Authority
+84E0F4     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D8-30-62   (hex)		Apple, Inc.
+D83062     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-E5-4D   (hex)		ARRIS Group, Inc.
+D0E54D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A0-C5-62   (hex)		ARRIS Group, Inc.
+A0C562     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+84-96-D8   (hex)		ARRIS Group, Inc.
+8496D8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-26-D9   (hex)		ARRIS Group, Inc.
+0026D9     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E8-50-8B   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+E8508B     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+F8-04-2E   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+F8042E     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak
+				Bangpakong  Chachoengsao  24180
+				TH
+
+00-D0-37   (hex)		ARRIS Group, Inc.
+00D037     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+84-E0-58   (hex)		ARRIS Group, Inc.
+84E058     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+70-76-30   (hex)		ARRIS Group, Inc.
+707630     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+04-BB-F9   (hex)		Pavilion Data Systems Inc
+04BBF9     (base 16)		Pavilion Data Systems Inc
+				2560 N 1st St, #220
+				San Jose  CA  95131
+				US
+
+E4-BE-ED   (hex)		Netcore Technology Inc.
+E4BEED     (base 16)		Netcore Technology Inc.
+				ORIENTAL CYBERPORT,HIGHTECH 6 ROAD
+				Shenzhen    518057
+				CN
+
+58-FB-84   (hex)		Intel Corporate
+58FB84     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-C0-17   (hex)		NetAlly
+00C017     (base 16)		NetAlly
+				2075 Research Parkway
+				Colorado Springs  CO  80920
+				US
+
+5C-B0-66   (hex)		ARRIS Group, Inc.
+5CB066     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+BC-8A-A3   (hex)		NHN Entertainment
+BC8AA3     (base 16)		NHN Entertainment
+				Play Museum, 629 Sampyeong-dong, Bundang-gu
+				Seongnam-si, Gyeonggi-do    463-400
+				KR
+
+A8-BD-27   (hex)		Hewlett Packard Enterprise
+A8BD27     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+34-57-60   (hex)		MitraStar Technology Corp.
+345760     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+C0-D3-91   (hex)		IEEE Registration Authority
+C0D391     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D4-9B-5C   (hex)		Chongqing Miedu Technology Co., Ltd.
+D49B5C     (base 16)		Chongqing Miedu Technology Co., Ltd.
+				7-602 No.118 DaPing Main Street Yuzhong District
+				Chongqing    400000
+				CN
+
+E8-EB-11   (hex)		Texas Instruments
+E8EB11     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+44-BF-E3   (hex)		Shenzhen Longtech Electronics Co.,Ltd
+44BFE3     (base 16)		Shenzhen Longtech Electronics Co.,Ltd
+				No.148 Zhengfeng Industrial Area Donghuan RD Huangpu Village Shaijing Town Baoan District
+				Shenzhen  Guangdong  518125
+				CN
+
+3C-6F-EA   (hex)		Panasonic India Pvt. Ltd.
+3C6FEA     (base 16)		Panasonic India Pvt. Ltd.
+				12th Floor, Ambience Tower, Ambience Island, NH - 8
+				Gurgaon  Haryana  122002
+				IN
+
+00-22-61   (hex)		Frontier Silicon Ltd
+002261     (base 16)		Frontier Silicon Ltd
+				137 Euston Road
+				London    NW12AA
+				GB
+
+00-19-88   (hex)		Wi2Wi, Inc
+001988     (base 16)		Wi2Wi, Inc
+				2107 N. 1st Street
+				San Jose  CA  95131
+				US
+
+18-DC-56   (hex)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+18DC56     (base 16)		Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd
+				8/F.high Tech Plaza,TianAn Cyberpark,Chegongmiao
+				Shenzhen  Guangdong  518040
+				CN
+
+00-16-F2   (hex)		Dmobile System Co., Ltd.
+0016F2     (base 16)		Dmobile System Co., Ltd.
+				2F, No.13-20, Sec.6, Mincyuan E.Rd,
+				Taipei    114
+				TW
+
+34-07-4F   (hex)		AccelStor, Inc.
+34074F     (base 16)		AccelStor, Inc.
+				10F, No. 465, Sec. 6, Zhongxiao E. Rd., Nangang Dist.
+				Taipei City    11557
+				TW
+
+B4-A9-84   (hex)		Symantec Corporation
+B4A984     (base 16)		Symantec Corporation
+				350 Ellis Street
+				Mountain View  CA  94043
+				US
+
+B0-B2-8F   (hex)		Sagemcom Broadband SAS
+B0B28F     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+44-14-41   (hex)		AudioControl Inc.
+441441     (base 16)		AudioControl Inc.
+				22410 70Th Ave West, STE 1 
+				Mountlake Terrace  WA  98043
+				US
+
+C8-8D-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C88D83     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-E0-11   (hex)		UNIDEN CORPORATION
+00E011     (base 16)		UNIDEN CORPORATION
+				2-12-7 Hatchobori,
+				Chuo-ku  Tokyo  104-8512
+				JP
+
+00-25-55   (hex)		Visonic Technologies 1993 Ltd.
+002555     (base 16)		Visonic Technologies 1993 Ltd.
+				23 Habarzel st'
+				Tel - Aviv    69710
+				IL
+
+58-98-6F   (hex)		Revolution Display
+58986F     (base 16)		Revolution Display
+				912 Ruberta Ave
+				Glendale  CA  91201
+				US
+
+C8-1F-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C81FBE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-3D-B2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+203DB2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-D5-39   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48D539     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-1F-9A   (hex)		Nortel Networks
+001F9A     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75082-4399
+				US
+
+00-0A-0E   (hex)		Invivo Research Inc.
+000A0E     (base 16)		Invivo Research Inc.
+				12601 Research Parkway
+				Orlando  Florida  32826
+				US
+
+00-16-60   (hex)		Nortel Networks
+001660     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-1E-7E   (hex)		Nortel Networks
+001E7E     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-13-65   (hex)		Nortel Networks
+001365     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-04-38   (hex)		Nortel Networks
+000438     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+00-0E-C0   (hex)		Nortel Networks
+000EC0     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+D8-4F-B8   (hex)		LG ELECTRONICS
+D84FB8     (base 16)		LG ELECTRONICS
+				84 Wanam-ro Seongsan-gu
+				Changwon-si  Gyeongsangnam-do  642-713
+				KR
+
+00-0A-EB   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+000AEB     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Hi-Tech Park R1-B3
+				Shenzhen  Guangdong  518057
+				CN
+
+2C-37-31   (hex)		SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.
+2C3731     (base 16)		SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.
+				Building # 22 and #23, Zone 5, Bai Wang Xin Industrial Park, Song Bai Road
+				ShenZhen  GUANGDONG  518108
+				CN
+
+60-EE-5C   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+60EE5C     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+64-88-FF   (hex)		Sichuan Changhong Electric Ltd.
+6488FF     (base 16)		Sichuan Changhong Electric Ltd.
+				35 East Mianxing Road,High-Tech Park,
+				MianYang  SiChuan  621000
+				CN
+
+00-21-62   (hex)		Nortel Networks
+002162     (base 16)		Nortel Networks
+				8200 Dixie Rd
+				Brampton  Ontario  0000
+				CA
+
+02-E6-D3   (hex)		NIXDORF COMPUTER CORP.
+02E6D3     (base 16)		NIXDORF COMPUTER CORP.
+				NIXDORF TECHNOLOGY CENTER
+				SANTA CLARA  CA  95054
+				US
+
+00-16-B9   (hex)		ProCurve Networking by HP
+0016B9     (base 16)		ProCurve Networking by HP
+				8000 Foothills Blvd
+				Roseville  CA  95747
+				US
+
+C4-08-4A   (hex)		Nokia
+C4084A     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+00-08-01   (hex)		HighSpeed Surfing Inc.
+000801     (base 16)		HighSpeed Surfing Inc.
+				44790 S. Grimmer Blvd.
+				Fremont  CA  94538
+				US
+
+00-07-72   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+000772     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+E0-30-05   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+E03005     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+3C-40-4F   (hex)		GUANGDONG PISEN ELECTRONICS CO.,LTD
+3C404F     (base 16)		GUANGDONG PISEN ELECTRONICS CO.,LTD
+				Building C,Liuyue Jintang Industry Zone
+				Shenzhen  Guangdong  518173
+				CN
+
+0C-A4-02   (hex)		Alcatel-Lucent IPD
+0CA402     (base 16)		Alcatel-Lucent IPD
+				600 March Drive
+				Kanata  Ontario  K2K2E6
+				CA
+
+A0-F3-E4   (hex)		Alcatel-Lucent IPD
+A0F3E4     (base 16)		Alcatel-Lucent IPD
+				600 March Drive
+				Kanata  Ontario  K2K2E6
+				CA
+
+84-DB-FC   (hex)		Nokia
+84DBFC     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+7C-FC-3C   (hex)		Visteon Corporation
+7CFC3C     (base 16)		Visteon Corporation
+				One Village Center Drive
+				Van Buren Twp  MI  48111
+				US
+
+98-1E-0F   (hex)		Jeelan (Shanghai Jeelan Technology Information Inc
+981E0F     (base 16)		Jeelan (Shanghai Jeelan Technology Information Inc
+				Room 302,Building 17, No.658, Jinzhong Road
+				shanghai    200052
+				CN
+
+48-88-CA   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+4888CA     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+38-56-10   (hex)		CANDY HOUSE, Inc.
+385610     (base 16)		CANDY HOUSE, Inc.
+				119 University Ave.
+				Palo Alto  CA  94301
+				US
+
+00-A7-42   (hex)		Cisco Systems, Inc
+00A742     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-AA-70   (hex)		LG Electronics (Mobile Communications)
+00AA70     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+F8-95-C7   (hex)		LG Electronics (Mobile Communications)
+F895C7     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+84-D9-31   (hex)		Hangzhou H3C Technologies Co., Limited
+84D931     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+00-11-6E   (hex)		Peplink International Ltd.
+00116E     (base 16)		Peplink International Ltd.
+				17/F., Park Building
+				Cheung Sha Wan  Kowloon  0000
+				HK
+
+54-09-55   (hex)		zte corporation
+540955     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-1E-75   (hex)		LG Electronics (Mobile Communications)
+001E75     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-1C-62   (hex)		LG Electronics (Mobile Communications)
+001C62     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+50-55-27   (hex)		LG Electronics (Mobile Communications)
+505527     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+88-C9-D0   (hex)		LG Electronics (Mobile Communications)
+88C9D0     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+C0-41-F6   (hex)		LG ELECTRONICS INC
+C041F6     (base 16)		LG ELECTRONICS INC
+				19-1,Cheongho-Ri,Jinwi-Myeon
+				Pyeongtaek  Gyeonggi-Do  451-713
+				KR
+
+8C-3A-E3   (hex)		LG Electronics (Mobile Communications)
+8C3AE3     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+90-A4-6A   (hex)		SISNET CO., LTD
+90A46A     (base 16)		SISNET CO., LTD
+				1409, SJ Technoville 60-19, Gasan-dong, Geumcheon-Gu
+				Seoul    KS013
+				KR
+
+14-E7-C8   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+14E7C8     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+EC-CD-6D   (hex)		Allied Telesis, Inc.
+ECCD6D     (base 16)		Allied Telesis, Inc.
+				3041 Orchard Parkway
+				San Jose    95134
+				US
+
+18-33-9D   (hex)		Cisco Systems, Inc
+18339D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+54-27-6C   (hex)		Jiangsu Houge Technology Corp.
+54276C     (base 16)		Jiangsu Houge Technology Corp.
+				No.20 Xizhang North Road, Fenghuang Town
+				Zhangjiagang  Jiangsu  215614
+				CN
+
+9C-A3-A9   (hex)		Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd
+9CA3A9     (base 16)		Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd
+				NO.9, street 3, HengLing industrial zone, Tangdong, tianhe district
+				Guangzhou  Guangdong  510000
+				CN
+
+7C-C7-09   (hex)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+7CC709     (base 16)		SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+				Bldg56A, 6/F, Baotian Rd3, Baoan District, Shenzhen, P.R.C
+				Shenzhen  Guangdong  518100
+				CN
+
+A0-3E-6B   (hex)		IEEE Registration Authority
+A03E6B     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+98-02-D8   (hex)		IEEE Registration Authority
+9802D8     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+64-FB-81   (hex)		IEEE Registration Authority
+64FB81     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+08-21-EF   (hex)		Samsung Electronics Co.,Ltd
+0821EF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-14-5F   (hex)		Samsung Electronics Co.,Ltd
+34145F     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+2C-26-5F   (hex)		IEEE Registration Authority
+2C265F     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+D0-05-2A   (hex)		Arcadyan Corporation
+D0052A     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+E4-50-9A   (hex)		HW Communications Ltd
+E4509A     (base 16)		HW Communications Ltd
+				Parkfield
+				Lancaster    LA1 4TZ
+				GB
+
+70-29-00   (hex)		Shenzhen ChipTrip Technology Co,Ltd
+702900     (base 16)		Shenzhen ChipTrip Technology Co,Ltd
+				The 8th floor of  VIA Technology Building  NO. 9966 Shennan road , Nanshan Distict  Shenzhen
+				Shenzhen    518000
+				CN
+
+EC-AA-A0   (hex)		PEGATRON CORPORATION
+ECAAA0     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+00-E0-DD   (hex)		Zenith Electronics Corporation
+00E0DD     (base 16)		Zenith Electronics Corporation
+				1000 MILWAUKEE AVENUE
+				GLENVIEW  IL  60025
+				US
+
+50-CE-75   (hex)		Measy Electronics Co., Ltd.
+50CE75     (base 16)		Measy Electronics Co., Ltd.
+				#1506, Block B, Hai Song Bldg, Tairan 9th Road
+				Shenzhen  Guang Dong   518040
+				CN
+
+00-04-5B   (hex)		Techsan Electronics Co., Ltd.
+00045B     (base 16)		Techsan Electronics Co., Ltd.
+				North Wing
+				  UNITED  KINGDOM
+				GB
+
+00-07-BA   (hex)		UTStarcom Inc
+0007BA     (base 16)		UTStarcom Inc
+				1275 Harbor Bay PKWY
+				Alameda  CA  94502
+				US
+
+90-A2-10   (hex)		United Telecoms Ltd
+90A210     (base 16)		United Telecoms Ltd
+				18A/19,Doddanekundi Industrial Area,
+				Bangalore  Karanataka  560048
+				IN
+
+6C-0B-84   (hex)		Universal Global Scientific Industrial Co., Ltd.
+6C0B84     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, TaiPing Road, Sec.1
+				Tsao-Tuen   Nan-Tou  54261
+				TW
+
+00-15-97   (hex)		AETA AUDIO SYSTEMS
+001597     (base 16)		AETA AUDIO SYSTEMS
+				18-22, avenue Edouard Herriot
+				Le Plessis Robinson    92350
+				FR
+
+00-23-97   (hex)		Westell Technologies Inc.
+002397     (base 16)		Westell Technologies Inc.
+				750 N Commons Dr
+				Aurora  IL  60504
+				US
+
+60-E3-AC   (hex)		LG Electronics (Mobile Communications)
+60E3AC     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+90-F0-52   (hex)		MEIZU Technology Co., Ltd.
+90F052     (base 16)		MEIZU Technology Co., Ltd.
+				MEIZU Tech Bldg., Technology & Innovation Coast
+				Zhuhai  Guangdong  519085
+				CN
+
+00-16-39   (hex)		Ubiquam Co., Ltd.
+001639     (base 16)		Ubiquam Co., Ltd.
+				Technovill 4F,272-3 Yatap3
+				Seongnam  Kyeonggi  463-836
+				KR
+
+00-0C-29   (hex)		VMware, Inc.
+000C29     (base 16)		VMware, Inc.
+				3401 Hillview Avenue
+				Palo Alto  CA  94304
+				US
+
+00-05-69   (hex)		VMware, Inc.
+000569     (base 16)		VMware, Inc.
+				3401 Hillview Avenue
+				Palo Alto  CA  94304
+				US
+
+00-0B-0E   (hex)		Trapeze Networks
+000B0E     (base 16)		Trapeze Networks
+				5753 W. Las Positas Blvd
+				Pleasanton  CA  94588
+				US
+
+8C-FD-F0   (hex)		Qualcomm Inc.
+8CFDF0     (base 16)		Qualcomm Inc.
+				5775 Morehouse Drive
+				San Diego  CA  92121
+				US
+
+C4-BB-4C   (hex)		Zebra Information Tech Co. Ltd
+C4BB4C     (base 16)		Zebra Information Tech Co. Ltd
+				Room 415, No.569 Anchi Road, JiaDing District 
+				Shanghai    201804
+				CN
+
+98-CF-53   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+98CF53     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
+				Dong Guan   Guang Dong  523860
+				CN
+
+D4-A1-48   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D4A148     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-65-CA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D065CA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-6B-2C   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+486B2C     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
+				Dong Guan   Guang Dong  523860
+				CN
+
+6C-25-B9   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+6C25B9     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
+				Dong Guan   Guang Dong  523860
+				CN
+
+2C-28-2D   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+2C282D     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
+				Dong Guan   Guang Dong  523860
+				CN
+
+48-13-F3   (hex)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+4813F3     (base 16)		BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+				 LiWu INDUSTRIAL PARK,Wusha,Chang'an
+				Dong Guan   Guang Dong  523860
+				CN
+
+00-40-9F   (hex)		Telco Systems, Inc. 
+00409F     (base 16)		Telco Systems, Inc. 
+				15 Berkshire Road
+				Mansfield,  MA  02048
+				US
+
+00-00-1F   (hex)		Telco Systems, Inc. 
+00001F     (base 16)		Telco Systems, Inc. 
+				15 Berkshire Road
+				Mansfield  MA  02048
+				US
+
+00-A0-12   (hex)		Telco Systems, Inc. 
+00A012     (base 16)		Telco Systems, Inc. 
+				15 Berkshire Road
+				Mansfield  MA  02048
+				US
+
+8C-EB-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8CEBC6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B0-89-00   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B08900     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-CB-68   (hex)		DAEHAP HYPER-TECH
+78CB68     (base 16)		DAEHAP HYPER-TECH
+				302,Galmachiro,Woolim Lions Valley 5-cha #A-810,Jungwon-Gu
+				Seongnam,  Gyeonggido  445-918
+				KR
+
+34-ED-0B   (hex)		 Shanghai XZ-COM.CO.,Ltd.
+34ED0B     (base 16)		 Shanghai XZ-COM.CO.,Ltd.
+				11th Floor,B Building ,No.100 Qinzhou  Road  ,Shanghai
+				shanghai  shanghai  200235
+				CN
+
+F0-DE-F1   (hex)		Wistron Infocomm (Zhongshan) Corporation
+F0DEF1     (base 16)		Wistron Infocomm (Zhongshan) Corporation
+				168KunShan, 
+				JiangSu    215300
+				CN
+
+F8-0F-41   (hex)		Wistron Infocomm (Zhongshan) Corporation
+F80F41     (base 16)		Wistron Infocomm (Zhongshan) Corporation
+				Torch High-tech Industrial Development Zone, 
+				ZhongShan  Guangdong  528437
+				CN
+
+3C-97-0E   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
+3C970E     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
+				168# First Avence, 
+				Kunshan  JiangSu  215300
+				CN
+
+30-14-4A   (hex)		Wistron Neweb Corporation
+30144A     (base 16)		Wistron Neweb Corporation
+				20 Park Avenue II, Hsin Science Park, Hsinchu 308, Taiwan
+				HsinChu  Taiwan  308
+				TW
+
+4C-0B-BE   (hex)		Microsoft
+4C0BBE     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+0C-25-76   (hex)		LONGCHEER TELECOMMUNICATION LIMITED
+0C2576     (base 16)		LONGCHEER TELECOMMUNICATION LIMITED
+				Building 1,No.401,Caobao Rd
+				Shanghai  Xuhui District  200233
+				CN
+
+D8-D4-3C   (hex)		Sony Corporation
+D8D43C     (base 16)		Sony Corporation
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+E4-02-9B   (hex)		Intel Corporate
+E4029B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+DC-1A-C5   (hex)		vivo Mobile Communication Co., Ltd.
+DC1AC5     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong  523860
+				CN
+
+F4-5E-AB   (hex)		Texas Instruments
+F45EAB     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+A8-FC-B7   (hex)		Consolidated Resource Imaging
+A8FCB7     (base 16)		Consolidated Resource Imaging
+				2943 S Wilson CT NW
+				Grand Rapids  MI  49534
+				US
+
+00-C0-00   (hex)		LANOPTICS, LTD.
+00C000     (base 16)		LANOPTICS, LTD.
+				P.O. BOX 184
+				ISRAEL  ISRAEL  10551
+				IL
+
+84-51-81   (hex)		Samsung Electronics Co.,Ltd
+845181     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-C2-87   (hex)		Technicolor CH USA Inc.
+B0C287     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+CC-35-40   (hex)		Technicolor CH USA Inc.
+CC3540     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+8C-04-FF   (hex)		Technicolor CH USA Inc.
+8C04FF     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+FC-94-E3   (hex)		Technicolor CH USA Inc.
+FC94E3     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6
+				Lawrenceville  GA  30044
+				US
+
+B8-8D-12   (hex)		Apple, Inc.
+B88D12     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-EF-68   (hex)		Zyxel Communications Corporation
+90EF68     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+C8-16-BD   (hex)		Qingdao Hisense Communications Co.,Ltd.
+C816BD     (base 16)		Qingdao Hisense Communications Co.,Ltd.
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+00-EB-D5   (hex)		Cisco Systems, Inc
+00EBD5     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C4-8F-07   (hex)		Shenzhen Yihao Hulian Science and Technology Co., Ltd.
+C48F07     (base 16)		Shenzhen Yihao Hulian Science and Technology Co., Ltd.
+				Room A, Floor 6, Building 210, Tairan Industry and Trade Park, Che Kung Temple, Futian District, Shenzhen, Guangdong Province
+				ShenZhen  Guangdong  518000
+				CN
+
+DC-78-34   (hex)		LOGICOM SA
+DC7834     (base 16)		LOGICOM SA
+				55 Rue de Lisbonne
+				PARIS    75008
+				FR
+
+CC-CC-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CCCC81     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+6C-95-22   (hex)		Scalys
+6C9522     (base 16)		Scalys
+				Lansinkesweg 4
+				Hengelo    7553 AE
+				NL
+
+B4-56-B9   (hex)		Teraspek Technologies Co.,Ltd
+B456B9     (base 16)		Teraspek Technologies Co.,Ltd
+				14th floor,Block C,Beijing International Building, Zhongguancun South Street, Beijng, China, 100081
+				Beijing    100081
+				CN
+
+9C-DD-1F   (hex)		Intelligent Steward Co.,Ltd
+9CDD1F     (base 16)		Intelligent Steward Co.,Ltd
+				Room 508-598 XiTianGeZhuang Town Government Office Building,8# XiTong Road ,Economic Development District ,MiYun County ,BeiJing City 
+				BeiJing City     101509
+				CN
+
+3C-68-16   (hex)		VXi Corporation
+3C6816     (base 16)		VXi Corporation
+				271 Locust Street
+				Dover  NH  03820
+				US
+
+E8-11-CA   (hex)		SHANDONG KAER ELECTRIC.CO.,LTD
+E811CA     (base 16)		SHANDONG KAER ELECTRIC.CO.,LTD
+				No.58, Dalian Road, Weihai, 264209 Shandong Province, P.R.China 
+				Weihai  Shandong  264209
+				CN
+
+70-28-8B   (hex)		Samsung Electronics Co.,Ltd
+70288B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-8A-7B   (hex)		Samsung Electronics Co.,Ltd
+348A7B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D0-57-7B   (hex)		Intel Corporate
+D0577B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+78-00-9E   (hex)		Samsung Electronics Co.,Ltd
+78009E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+AC-C3-3A   (hex)		Samsung Electronics Co.,Ltd
+ACC33A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-F2-01   (hex)		Samsung Electronics Co.,Ltd
+54F201     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C4-A3-66   (hex)		zte corporation
+C4A366     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+60-73-BC   (hex)		zte corporation
+6073BC     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+7C-35-48   (hex)		Transcend Information
+7C3548     (base 16)		Transcend Information
+				No.70, XingZhong Rd., NeiHu Dist.,
+				Taipei  Taiwan  114
+				TW
+
+18-B1-69   (hex)		Sonicwall
+18B169     (base 16)		Sonicwall
+				2001 Logic Drive
+				San Jose  CA  95124-3452
+				US
+
+44-44-50   (hex)		OttoQ
+444450     (base 16)		OttoQ
+				20370 Town Center Lane, Suite 205
+				Cupertino  CA  95014
+				US
+
+50-F5-DA   (hex)		Amazon Technologies Inc.
+50F5DA     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+10-12-12   (hex)		Vivo International Corporation Pty Ltd
+101212     (base 16)		Vivo International Corporation Pty Ltd
+				9-13 Bibby Street, 
+				NSW  Chiswick  2046
+				AU
+
+C8-5B-76   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+C85B76     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+78-FF-CA   (hex)		TECNO MOBILE LIMITED
+78FFCA     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+04-65-65   (hex)		Testop
+046565     (base 16)		Testop
+				808, Hanshin IT tower, 272 digital-ro
+				Guro-gu  Seoul  KS013
+				KR
+
+A8-BB-50   (hex)		WiZ IoT Company Limited
+A8BB50     (base 16)		WiZ IoT Company Limited
+				148 Electric Road
+				Hong Kong    0000
+				HK
+
+08-C0-21   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+08C021     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-08-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+600810     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-43-5A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+48435A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-8E-F2   (hex)		Apple, Inc.
+8C8EF2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-B0-ED   (hex)		Apple, Inc.
+90B0ED     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-3E-BF   (hex)		GOGORO TAIWAN LIMITED
+F03EBF     (base 16)		GOGORO TAIWAN LIMITED
+				No.33 Dinghu Rd.
+				GuiShan Dist.  Taoyuan  333
+				TW
+
+3C-92-DC   (hex)		Octopod Technology Co. Ltd.
+3C92DC     (base 16)		Octopod Technology Co. Ltd.
+				822 Lane Zhennan Road
+				Shanghai    200331
+				CN
+
+10-00-FD   (hex)		LaonPeople
+1000FD     (base 16)		LaonPeople
+				402-3, Bundang Techno Park B, 148
+				Sungnam-si  Gyeonggi-do  463-760
+				KR
+
+C4-7C-8D   (hex)		IEEE Registration Authority
+C47C8D     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+74-5C-9F   (hex)		TCT mobile ltd
+745C9F     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+8C-99-E6   (hex)		TCT mobile ltd
+8C99E6     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+44-9F-7F   (hex)		DataCore Software Corporation
+449F7F     (base 16)		DataCore Software Corporation
+				6300 NW 5th Way
+				Fort Lauderdale  FL  33309
+				US
+
+84-83-19   (hex)		Hangzhou Zero Zero Technology Co., Ltd.
+848319     (base 16)		Hangzhou Zero Zero Technology Co., Ltd.
+				Bldg 13&14, Dream Town, Hangzhou, Zhejiang
+				Hangzhou  Zhejiang  310000
+				CN
+
+A8-15-59   (hex)		Breathometer, Inc.
+A81559     (base 16)		Breathometer, Inc.
+				863 Mitten Road, Suite 104
+				Burlingame  CA  94010
+				US
+
+70-BA-EF   (hex)		Hangzhou H3C Technologies Co., Limited
+70BAEF     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District,
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+58-6A-B1   (hex)		Hangzhou H3C Technologies Co., Limited
+586AB1     (base 16)		Hangzhou H3C Technologies Co., Limited
+				466 Changhe Road, Binjiang District,
+				Hangzhou  Zhejiang, P.R.China  310052
+				CN
+
+00-90-06   (hex)		Hamamatsu Photonics K.K.
+009006     (base 16)		Hamamatsu Photonics K.K.
+				812 JOKO-CHO
+				HAMAMATSU    431-3196
+				JP
+
+00-1A-F4   (hex)		Handreamnet
+001AF4     (base 16)		Handreamnet
+				#1209 MarioTower, 28
+				Seoul    152-741
+				KR
+
+04-D3-CF   (hex)		Apple, Inc.
+04D3CF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-82-F2   (hex)		Appel Elektronik GmbH
+4882F2     (base 16)		Appel Elektronik GmbH
+				Ludwig-Rinn-Str.10
+				Heuchelheim  Hessen  35452
+				DE
+
+7C-B0-C2   (hex)		Intel Corporate
+7CB0C2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-17-93   (hex)		Tigi Corporation
+001793     (base 16)		Tigi Corporation
+				2070 Chain Bridge road
+				Vienna  Va  22182
+				US
+
+00-03-58   (hex)		Hanyang Digitech Co.Ltd
+000358     (base 16)		Hanyang Digitech Co.Ltd
+				13F, Acetwintower2, 212-30, Guro-Dong
+				Seoul    12304
+				KR
+
+C4-CA-D9   (hex)		Hangzhou H3C Technologies Co., Limited
+C4CAD9     (base 16)		Hangzhou H3C Technologies Co., Limited
+				310 Liuhe Road, Zhijiang Science Park
+				Hangzhou  Zhejiang,   310053
+				CN
+
+58-66-BA   (hex)		Hangzhou H3C Technologies Co., Limited
+5866BA     (base 16)		Hangzhou H3C Technologies Co., Limited
+				310 Liuhe Road, Zhijiang Science Park
+				Hangzhou  Zhejiang,   310053
+				CN
+
+E0-C7-9D   (hex)		Texas Instruments
+E0C79D     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+4C-0B-3A   (hex)		TCT mobile ltd
+4C0B3A     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+E4-2D-02   (hex)		TCT mobile ltd
+E42D02     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+0C-BD-51   (hex)		TCT mobile ltd
+0CBD51     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+40-00-E0   (hex)		Derek(Shaoguan)Limited
+4000E0     (base 16)		Derek(Shaoguan)Limited
+				Gaojiling,Taiping Town, Shixing County
+				Shaoguan  Guangdong  512500
+				CN
+
+FC-BC-9C   (hex)		Vimar Spa
+FCBC9C     (base 16)		Vimar Spa
+				Viale Vicenza 14
+				Marostica  Vicenza  36063
+				IT
+
+14-9E-CF   (hex)		Dell Inc.
+149ECF     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+E8-09-59   (hex)		Guoguang Electric Co.,Ltd
+E80959     (base 16)		Guoguang Electric Co.,Ltd
+				No.8 Jinghu Road, Xinhua Street, Huadu Reg
+				Guangzhou  Guangdong  510800
+				CN
+
+D8-94-03   (hex)		Hewlett Packard Enterprise
+D89403     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+E0-0E-DA   (hex)		Cisco Systems, Inc
+E00EDA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D0-A4-B1   (hex)		Sonifex Ltd.
+D0A4B1     (base 16)		Sonifex Ltd.
+				61 Station Road
+				Irthlingborough  Northamptonshire  NN9 5QE
+				GB
+
+F4-9E-EF   (hex)		Taicang T&W Electronics
+F49EEF     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+C4-F0-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4F081     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-13-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+801382     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-FE-22   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94FE22     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-CC-55   (hex)		Juniper Networks
+F4CC55     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+50-DD-4F   (hex)		Automation Components, Inc
+50DD4F     (base 16)		Automation Components, Inc
+				2305 Pleasant View Rd
+				Middleton  WI  53562
+				US
+
+34-1F-E4   (hex)		ARRIS Group, Inc.
+341FE4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-24-F4   (hex)		Kaminario, Ltd.
+0024F4     (base 16)		Kaminario, Ltd.
+				Yatam Industrial Park
+				Yokneam  ISRAEL  20692
+				IL
+
+00-1A-29   (hex)		Johnson Outdoors Marine Electronics d/b/a Minnkota
+001A29     (base 16)		Johnson Outdoors Marine Electronics d/b/a Minnkota
+				1220 Old Alpharetta Rd
+				Alpharetta  GA  30041
+				US
+
+00-90-AE   (hex)		ITALTEL S.p.A/RF-UP-I
+0090AE     (base 16)		ITALTEL S.p.A/RF-UP-I
+				LOCALITA' BOSCHETTO
+				67100 L'AQUILA    na
+				IT
+
+00-17-7D   (hex)		IDT Technology Limited
+00177D     (base 16)		IDT Technology Limited
+				Block C, 9/F, Kaiser Estate, Phase I
+				na    na
+				HK
+
+00-A0-45   (hex)		PHOENIX CONTACT Electronics GmbH
+00A045     (base 16)		PHOENIX CONTACT Electronics GmbH
+				POSTFACH 1341
+				lower saxony    D-31812
+				DE
+
+00-23-78   (hex)		GN Netcom A/S
+002378     (base 16)		GN Netcom A/S
+				Lautrupbjerg 7
+				Ballerup    DK - 2750
+				DK
+
+50-C9-71   (hex)		GN Netcom A/S
+50C971     (base 16)		GN Netcom A/S
+				Lautrupbjerg 7
+				Ballerup    DK - 2750
+				DK
+
+F0-40-7B   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+F0407B     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+94-88-5E   (hex)		Surfilter Network Technology Co., Ltd. 
+94885E     (base 16)		Surfilter Network Technology Co., Ltd. 
+				6/f,2 Building,Kejizhong Rd2,Software Park,High-Tech District,Nanshan,Shenzhen,China
+				Shenzhen  Guangdong  518000
+				CN
+
+C8-25-E1   (hex)		Lemobile Information Technology (Beijing) Co., Ltd
+C825E1     (base 16)		Lemobile Information Technology (Beijing) Co., Ltd
+				WENHUAYING NORTH (No.1, LINKONG 2nd St), GAOLIYING, SHUNYI DISTRICT, BEIJING
+				Beijing  Beijing  101300
+				CN
+
+94-50-89   (hex)		SimonsVoss Technologies GmbH
+945089     (base 16)		SimonsVoss Technologies GmbH
+				Feringastr. 4
+				Unterfoehring  Bavaria  85774
+				DE
+
+04-2A-E2   (hex)		Cisco Systems, Inc
+042AE2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-B6-F5   (hex)		IEEE Registration Authority
+E0B6F5     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-90-FA   (hex)		Emulex Corporation
+0090FA     (base 16)		Emulex Corporation
+				3333 Susan Street
+				Costa Mesa  CA  92626
+				US
+
+00-E0-D5   (hex)		Emulex Corporation
+00E0D5     (base 16)		Emulex Corporation
+				3333 Susan Street
+				Costa Mesa  CA  92626
+				US
+
+00-10-35   (hex)		Elitegroup Computer Systems Co.,Ltd.
+001035     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				6F, NO. 88, SEC. 6
+				Shih Lin  TAIPEI  00000
+				TW
+
+00-0A-E6   (hex)		Elitegroup Computer Systems Co.,Ltd.
+000AE6     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No.22, Alley 38, Lane 91, Sec. 1, Nei Hu
+				Taipei    114
+				TW
+
+74-27-EA   (hex)		Elitegroup Computer Systems Co.,Ltd.
+7427EA     (base 16)		Elitegroup Computer Systems Co.,Ltd.
+				No. 239, Sec. 2, Ti Ding Blvd., 
+				Taipei    11493
+				US
+
+64-99-68   (hex)		Elentec
+649968     (base 16)		Elentec
+				401-13 Chunggye-Ri
+				Dongtan-Myun  Kyunggi  445-811
+				KR
+
+00-40-9C   (hex)		TRANSWARE
+00409C     (base 16)		TRANSWARE
+				21, RUE DU 8 MAI 1945
+				    
+				FR
+
+B0-1B-D2   (hex)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+B01BD2     (base 16)		Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+				,Le Shi Building, No.105 Yaojiayuan Road,Chaoyang District,Beijing,China
+				beijing  beijing  100025
+				CN
+
+54-48-9C   (hex)		CDOUBLES ELECTRONICS CO. LTD.
+54489C     (base 16)		CDOUBLES ELECTRONICS CO. LTD.
+				11F.-6, No. 7,Sec. 3, New Taipei Blvd., Xinzhuang Dist.
+				New Taipei City    24250
+				TW
+
+E4-A1-E6   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+E4A1E6     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+84-00-2D   (hex)		PEGATRON CORPORATION
+84002D     (base 16)		PEGATRON CORPORATION
+				No. 76, Ligong St., Beitou,
+				Taipei    112
+				TW
+
+40-82-56   (hex)		Continental Automotive GmbH
+408256     (base 16)		Continental Automotive GmbH
+				VD=-Strasse 1
+				Babenhausen  Garmany  64832
+				DE
+
+5C-C7-D7   (hex)		AZROAD TECHNOLOGY COMPANY LIMITED
+5CC7D7     (base 16)		AZROAD TECHNOLOGY COMPANY LIMITED
+				Block B2, No.14 Jian'an rd. Shajing, Bao'an District,
+				Shenzhen    518104
+				CN
+
+98-6B-3D   (hex)		ARRIS Group, Inc.
+986B3D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E0-07-1B   (hex)		Hewlett Packard Enterprise
+E0071B     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+1C-AB-C0   (hex)		Hitron Technologies. Inc
+1CABC0     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+1C-3A-DE   (hex)		Samsung Electronics Co.,Ltd
+1C3ADE     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+00-23-60   (hex)		Lookit Technology Co., Ltd
+002360     (base 16)		Lookit Technology Co., Ltd
+				FL 8 Seashore Mansion
+				Shenzhen  Guangdong  518100
+				CN
+
+84-FE-DC   (hex)		Borqs Beijing Ltd.
+84FEDC     (base 16)		Borqs Beijing Ltd.
+				Tower A, Building B23, Universal Business Park, No.10 Jiuxianqiao Road
+				Chaoyang District  Beijing  100015
+				CN
+
+60-83-34   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+608334     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-7E-66   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E47E66     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-DB-DA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94DBDA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-D9-E4   (hex)		BRILLIANTTS CO., LTD
+54D9E4     (base 16)		BRILLIANTTS CO., LTD
+				Daewangpangyo-ro
+				Seongnam-si    13494
+				KR
+
+F4-62-D0   (hex)		Not for Radio, LLC
+F462D0     (base 16)		Not for Radio, LLC
+				425 Front St
+				Lititz  PA  17543
+				US
+
+98-DE-D0   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+98DED0     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+50-89-65   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+508965     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+00-5B-A1   (hex)		shanghai huayuan chuangxin software CO., LTD.
+005BA1     (base 16)		shanghai huayuan chuangxin software CO., LTD.
+				Room D13 , Floor 13,Lane 1006, Jinshajiang road,putuo District
+				Shanghai  Shanghai  200333
+				CN
+
+58-D6-7A   (hex)		TCPlink
+58D67A     (base 16)		TCPlink
+				Daerungpost tower 1-cha 1720, 288 digital-ro,Guro-gu
+				seoul    08390
+				KR
+
+98-07-2D   (hex)		Texas Instruments
+98072D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F0-C7-7F   (hex)		Texas Instruments
+F0C77F     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+00-0A-C2   (hex)		Wuhan FiberHome Digital Technology Co.,Ltd.
+000AC2     (base 16)		Wuhan FiberHome Digital Technology Co.,Ltd.
+				No.88 YouKeyuan Road,Hongshan District,W
+				Wuhan  Hubei  430074
+				CN
+
+10-DA-43   (hex)		NETGEAR
+10DA43     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+B8-05-AB   (hex)		zte corporation
+B805AB     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+78-96-82   (hex)		zte corporation
+789682     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D4-67-E7   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D467E7     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+E4-2F-26   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+E42F26     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+04-C1-B9   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+04C1B9     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan City  Hubei Province  430074
+				CN
+
+C4-BE-D4   (hex)		Avaya Inc
+C4BED4     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+D0-17-C2   (hex)		ASUSTek COMPUTER INC.
+D017C2     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+34-99-71   (hex)		Quanta Storage Inc.
+349971     (base 16)		Quanta Storage Inc.
+				3F. No.188, Wenhua 2nd Rd
+				Taoyuan City  Guishan District  33383
+				TW
+
+9C-52-F8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9C52F8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-13-DB   (hex)		Juniper Networks
+EC13DB     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+5C-F2-86   (hex)		IEEE Registration Authority
+5CF286     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+E8-FD-72   (hex)		SHANGHAI LINGUO TECHNOLOGY CO., LTD.
+E8FD72     (base 16)		SHANGHAI LINGUO TECHNOLOGY CO., LTD.
+				No.2,277 Lane,Yongdeng Road,Putuo District,Shanghai,China
+				Shanghai  Shanghai  200000
+				CN
+
+98-BB-1E   (hex)		BYD Precision Manufacture Company Ltd.
+98BB1E     (base 16)		BYD Precision Manufacture Company Ltd.
+				7/Floor, Building 5#, No3000 LongDong Avenue, Pudong District
+				Shanghai  Shanghai  201203
+				CN
+
+AC-5F-3E   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+AC5F3E     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+54-6D-52   (hex)		TOPVIEW OPTRONICS CORP.
+546D52     (base 16)		TOPVIEW OPTRONICS CORP.
+				No.8, Wuquan Rd., New Taipei Industrial Park, Wugu District
+				 New Taipei City     24886
+				TW
+
+04-C1-03   (hex)		Clover Network, Inc.
+04C103     (base 16)		Clover Network, Inc.
+				415 N Mathilda Ave
+				Sunnyvale  CA  94085
+				US
+
+28-0C-28   (hex)		Unigen DataStorage Corporation
+280C28     (base 16)		Unigen DataStorage Corporation
+				11F.-6, No.251, Fuxing 1st St., Zhubei City, Hsinchu County 302, Taiwan (R.O.C.)
+				Zhubei City    30271
+				TW
+
+A4-BF-01   (hex)		Intel Corporate
+A4BF01     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+20-8B-37   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+208B37     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+08-BE-77   (hex)		Green Electronics
+08BE77     (base 16)		Green Electronics
+				47801 Fremont Blvd
+				Fremont  CA  94538
+				US
+
+50-9E-A7   (hex)		Samsung Electronics Co.,Ltd
+509EA7     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-81-95   (hex)		Samsung Electronics Co.,Ltd
+A88195     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+88-AD-D2   (hex)		Samsung Electronics Co.,Ltd
+88ADD2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-CC-FC   (hex)		Cisco Systems, Inc
+00CCFC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-C5   (hex)		Sony Interactive Entertainment Inc.
+0019C5     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+00-13-15   (hex)		Sony Interactive Entertainment Inc.
+001315     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+1C-23-4F   (hex)		EDMI  Europe Ltd
+1C234F     (base 16)		EDMI  Europe Ltd
+				The Grainger  Suite, Dobson House
+				Newcastle upon Tyne    NE3 3PF
+				GB
+
+A4-44-D1   (hex)		 Wingtech Group (HongKong）Limited
+A444D1     (base 16)		 Wingtech Group (HongKong）Limited
+				 FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
+				Hong Kong  Hong Kong  999077
+				HK
+
+00-6C-FD   (hex)		Sichuan Changhong Electric Ltd.
+006CFD     (base 16)		Sichuan Changhong Electric Ltd.
+				No.35,East MianXin Road,MianYang,Sichaun,China.
+				MianYang  SiChuan  PRC 621000
+				CN
+
+54-5A-A6   (hex)		Espressif Inc.
+545AA6     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+FC-1A-11   (hex)		vivo Mobile Communication Co., Ltd.
+FC1A11     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+00-1A-57   (hex)		Matrix Design Group, LLC
+001A57     (base 16)		Matrix Design Group, LLC
+				5741 Prospect Dr.
+				Newburgh  IN  47630
+				US
+
+A0-C5-89   (hex)		Intel Corporate
+A0C589     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-1E-1E   (hex)		Honeywell Life Safety
+001E1E     (base 16)		Honeywell Life Safety
+				12 Clintonville Road
+				Northford  CT  0422
+				US
+
+00-23-40   (hex)		MiXTelematics
+002340     (base 16)		MiXTelematics
+				Blaauwklip Office Park 2
+				Stellenbosch  Western Cape  7600
+				ZA
+
+B4-8B-19   (hex)		Apple, Inc.
+B48B19     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-FD-FE   (hex)		IEEE Registration Authority
+38FDFE     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+2C-09-CB   (hex)		COBS AB
+2C09CB     (base 16)		COBS AB
+				Box 9242
+				Goteborg    40095
+				SE
+
+BC-EC-5D   (hex)		Apple, Inc.
+BCEC5D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-A0-2B   (hex)		Apple, Inc.
+28A02B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-44-81   (hex)		Nokia Corporation
+A84481     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  NA  24101
+				FI
+
+88-44-F6   (hex)		Nokia Corporation
+8844F6     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo  NA  24101
+				FI
+
+F4-4D-17   (hex)		GOLDCARD HIGH-TECH CO.,LTD.
+F44D17     (base 16)		GOLDCARD HIGH-TECH CO.,LTD.
+				No.158, Jinqiao Stree,Economic&Technological Development Area,
+				Hangzhou   Zhejiang  310018
+				CN
+
+38-B8-EB   (hex)		IEEE Registration Authority
+38B8EB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+98-97-D1   (hex)		MitraStar Technology Corp.
+9897D1     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+B8-32-41   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
+B83241     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
+				HUST Industry Park, East-Lake Development Zone
+				Wuhan  Hubei  430223
+				CN
+
+00-60-DC   (hex)		NEC Magnus Communications,Ltd.
+0060DC     (base 16)		NEC Magnus Communications,Ltd.
+				18 Nihon-odori,Naka-ku
+				Yokohama, Kanagawa    231-0021
+				JP
+
+90-72-82   (hex)		Sagemcom Broadband SAS
+907282     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+00-1C-35   (hex)		Nokia Danmark A/S
+001C35     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1C-9A   (hex)		Nokia Danmark A/S
+001C9A     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1C-D6   (hex)		Nokia Danmark A/S
+001CD6     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1C-D4   (hex)		Nokia Danmark A/S
+001CD4     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1D-98   (hex)		Nokia Danmark A/S
+001D98     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1D-E9   (hex)		Nokia Danmark A/S
+001DE9     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1E-3A   (hex)		Nokia Danmark A/S
+001E3A     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-25-48   (hex)		Nokia Danmark A/S
+002548     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-22-FC   (hex)		Nokia Danmark A/S
+0022FC     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-22-FD   (hex)		Nokia Danmark A/S
+0022FD     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-21-AA   (hex)		Nokia Danmark A/S
+0021AA     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-1D-6E   (hex)		Nokia Danmark A/S
+001D6E     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen  V  DK-1790
+				DK
+
+00-23-B4   (hex)		Nokia Danmark A/S
+0023B4     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-13-70   (hex)		Nokia Danmark A/S
+001370     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+9C-18-74   (hex)		Nokia Danmark A/S
+9C1874     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790V
+				DK
+
+00-1B-AF   (hex)		Nokia Danmark A/S
+001BAF     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+C8-D1-0B   (hex)		Nokia Corporation
+C8D10B     (base 16)		Nokia Corporation
+				Joensuunkatu 7
+				Salo    24101
+				FI
+
+5C-C6-D0   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+5CC6D0     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1A-9A   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+001A9A     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+CC-6D-A0   (hex)		Roku, Inc.
+CC6DA0     (base 16)		Roku, Inc.
+				12980 Saratoga Ave.
+				Saratoga  CA  95070
+				US
+
+00-16-E4   (hex)		VANGUARD SECURITY ENGINEERING CORP.
+0016E4     (base 16)		VANGUARD SECURITY ENGINEERING CORP.
+				3, LANE 32, KSO CHING RD.
+				YANGMEI  TAOYUAN  326
+				US
+
+3C-89-70   (hex)		Neosfar
+3C8970     (base 16)		Neosfar
+				101 W. Broadway, Suite 300
+				San Diego  CA  92101
+				US
+
+00-17-42   (hex)		FUJITSU LIMITED
+001742     (base 16)		FUJITSU LIMITED
+				403, Kosugi-cho 1-chome, Nakahara-ku
+				Kawasaki  Kanagawa  211-0063
+				JP
+
+00-19-99   (hex)		Fujitsu Technology Solutions GmbH
+001999     (base 16)		Fujitsu Technology Solutions GmbH
+				Buergermeister-Ulrich-Strasse 100
+				Augsburg    86199
+				DE
+
+00-5A-39   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+005A39     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+A0-89-E4   (hex)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+A089E4     (base 16)		Skyworth Digital Technology(Shenzhen) Co.,Ltd
+				7F,Block A,Skyworth Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+78-CA-83   (hex)		IEEE Registration Authority
+78CA83     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+0C-11-67   (hex)		Cisco Systems, Inc
+0C1167     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-EA-E8   (hex)		ARRIS Group, Inc.
+74EAE8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+F8-8E-85   (hex)		Comtrend Corporation
+F88E85     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+02-CF-1C   (hex)		Communication Machinery Corporation
+02CF1C     (base 16)		Communication Machinery Corporation
+				1226 ANACAPA
+				SANTA BARBARA  CA  93101
+				US
+
+00-90-F5   (hex)		CLEVO CO.
+0090F5     (base 16)		CLEVO CO.
+				35, WU-GON 6TH ROAD
+				TAIPEI HSIEN    12345
+				TW
+
+00-30-FF   (hex)		DataFab Systems Inc.
+0030FF     (base 16)		DataFab Systems Inc.
+				ROOM #1910, 19F, NO. 333
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-0F-F6   (hex)		DARFON LIGHTING CORP
+000FF6     (base 16)		DARFON LIGHTING CORP
+				31, Lane17, Zihciang N. Road
+				Taoyuan    333
+				TW
+
+00-21-00   (hex)		Gemtek Technology Co., Ltd.
+002100     (base 16)		Gemtek Technology Co., Ltd.
+				No.1 Jen Ai Road, Hsinchu Industrial Park,
+				Hukou,  Hsinchu  303
+				TW
+
+50-F5-20   (hex)		Samsung Electronics Co.,Ltd
+50F520     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-B3-10   (hex)		Samsung Electronics Co.,Ltd
+64B310     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-EB-D3   (hex)		Samsung Electronics Co.,Ltd
+A4EBD3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C8-10-73   (hex)		CENTURY OPTICOMM CO.,LTD
+C81073     (base 16)		CENTURY OPTICOMM CO.,LTD
+				WEITUO COMMUNITY,HECHUAN INDUSTRIAL PARK, HECHUAN DISTRICT,CHONGQING,CHINA
+				Chongqing    401121
+				CN
+
+34-37-59   (hex)		zte corporation
+343759     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+FC-2F-40   (hex)		Calxeda, Inc.
+FC2F40     (base 16)		Calxeda, Inc.
+				7000 North Mopac Expressway
+				Austin  TX  78731
+				US
+
+BC-62-0E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BC620E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+74-A5-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+74A528     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+5C-F6-DC   (hex)		Samsung Electronics Co.,Ltd
+5CF6DC     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+00-26-E4   (hex)		Canal +
+0026E4     (base 16)		Canal +
+				48 quai du point du jour
+				Boulogne-Billancourt    92659
+				FR
+
+00-01-17   (hex)		Canal +
+000117     (base 16)		Canal +
+				23 Rue LeBlanc
+				75906 Paris Cedex 15    12345
+				FR
+
+E0-1D-3B   (hex)		Cambridge Industries(Group) Co.,Ltd.
+E01D3B     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				22 Floor, Qilai Tower, #889 Yishan Road
+				Shanghai  Shanghai  200233
+				CN
+
+70-C7-6F   (hex)		INNO S
+70C76F     (base 16)		INNO S
+				215beon-gil, 119
+				Guri-si  Gyeonggi-do  471-060
+				KR
+
+38-19-2F   (hex)		Nokia Corporation
+38192F     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+B8-C6-8E   (hex)		Samsung Electronics Co.,Ltd
+B8C68E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+04-FE-31   (hex)		Samsung Electronics Co.,Ltd
+04FE31     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+4C-BC-A5   (hex)		Samsung Electronics Co.,Ltd
+4CBCA5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D8-31-CF   (hex)		Samsung Electronics Co.,Ltd
+D831CF     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-83-31   (hex)		Samsung Electronics Co.,Ltd
+188331     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+9C-65-B0   (hex)		Samsung Electronics Co.,Ltd
+9C65B0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+84-55-A5   (hex)		Samsung Electronics Co.,Ltd
+8455A5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-7C-01   (hex)		Samsung Electronics Co.,Ltd
+A87C01     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-D0-9C   (hex)		Samsung Electronics Co.,Ltd
+B0D09C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+50-C8-E5   (hex)		Samsung Electronics Co.,Ltd
+50C8E5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1,Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-20-D4   (hex)		Cabletron Systems, Inc.
+0020D4     (base 16)		Cabletron Systems, Inc.
+				35 INDUSTRIAL WAY
+				ROHESTER  NH  03866-5005
+				US
+
+00-E0-3A   (hex)		Cabletron Systems, Inc.
+00E03A     (base 16)		Cabletron Systems, Inc.
+				35 INDUSTRIAL WAY - BLDG. #36
+				ROCHESTER  NH  03867
+				US
+
+00-10-E7   (hex)		Breezecom, Ltd.
+0010E7     (base 16)		Breezecom, Ltd.
+				PO Box 13139
+				Tel-Aviv    12345
+				IL
+
+94-92-BC   (hex)		SYNTECH(HK) TECHNOLOGY LIMITED
+9492BC     (base 16)		SYNTECH(HK) TECHNOLOGY LIMITED
+				Unit No.1,12/F.,Perfect Industrial Building,31 Tai Yau Street, San Po Kong, Kowloon, Hong Kong 999077
+				Kowloon    999077
+				HK
+
+00-1D-19   (hex)		Arcadyan Technology Corporation
+001D19     (base 16)		Arcadyan Technology Corporation
+				4F., No. 9 , Park Avenue II,
+				Hsinchu    300
+				TW
+
+00-12-BF   (hex)		Arcadyan Technology Corporation
+0012BF     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II
+				Hsinchu    300
+				TW
+
+50-7E-5D   (hex)		Arcadyan Technology Corporation
+507E5D     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+7C-4F-B5   (hex)		Arcadyan Technology Corporation
+7C4FB5     (base 16)		Arcadyan Technology Corporation
+				4F, No. 9, Park Avenue II ,
+				Hsinchu    300
+				TW
+
+00-22-3F   (hex)		NETGEAR
+00223F     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-0F-B5   (hex)		NETGEAR
+000FB5     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-09-5B   (hex)		NETGEAR
+00095B     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-1A-4F   (hex)		AVM GmbH
+001A4F     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin    10559
+				DE
+
+00-1C-4A   (hex)		AVM GmbH
+001C4A     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin    10559
+				DE
+
+00-15-0C   (hex)		AVM GmbH
+00150C     (base 16)		AVM GmbH
+				Alt-Moabit 95
+				Berlin    10559
+				DE
+
+00-26-FF   (hex)		BlackBerry RTS
+0026FF     (base 16)		BlackBerry RTS
+				440 Phillip Street
+				Waterloo  Ontario  N2L 5W9
+				CA
+
+A4-E4-B8   (hex)		BlackBerry RTS
+A4E4B8     (base 16)		BlackBerry RTS
+				295 Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+00-30-67   (hex)		BIOSTAR Microtech Int'l Corp.
+003067     (base 16)		BIOSTAR Microtech Int'l Corp.
+				2FL. NO. 108-2 MIN CHUAN ROAD
+				HSIN TIEN CITY, TAIPEI HSIEN    12345
+				TW
+
+F4-0B-93   (hex)		BlackBerry RTS
+F40B93     (base 16)		BlackBerry RTS
+				451 Phillip Street
+				Waterloo  ON  N2L 3X2
+				CA
+
+1C-69-A5   (hex)		BlackBerry RTS
+1C69A5     (base 16)		BlackBerry RTS
+				451 Phillip Street
+				Waterloo  ON  N2L 3X2
+				CA
+
+94-EB-CD   (hex)		BlackBerry RTS
+94EBCD     (base 16)		BlackBerry RTS
+				295 Phillip Street
+				Waterloo  Ontario  N2L3W8
+				CA
+
+28-C6-8E   (hex)		NETGEAR
+28C68E     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+04-A1-51   (hex)		NETGEAR
+04A151     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+F8-73-94   (hex)		NETGEAR
+F87394     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+20-4E-7F   (hex)		NETGEAR
+204E7F     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+C0-3F-0E   (hex)		NETGEAR
+C03F0E     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-26-F2   (hex)		NETGEAR
+0026F2     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-13-8F   (hex)		Asiarock Technology Limited
+00138F     (base 16)		Asiarock Technology Limited
+				P.O. Box957, Offshore Incorporations Centre
+				Road Town  Tortola  12345
+				VG
+
+80-37-73   (hex)		NETGEAR
+803773     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+A4-2B-8C   (hex)		NETGEAR
+A42B8C     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+CC-7D-37   (hex)		ARRIS Group, Inc.
+CC7D37     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A4-7A-A4   (hex)		ARRIS Group, Inc.
+A47AA4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-17-00   (hex)		ARRIS Group, Inc.
+001700     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-16-B5   (hex)		ARRIS Group, Inc.
+0016B5     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-A8   (hex)		ARRIS Group, Inc.
+0015A8     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-15-9A   (hex)		ARRIS Group, Inc.
+00159A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-11-80   (hex)		ARRIS Group, Inc.
+001180     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-0B-06   (hex)		ARRIS Group, Inc.
+000B06     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-D0-88   (hex)		ARRIS Group, Inc.
+00D088     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-12-8A   (hex)		ARRIS Group, Inc.
+00128A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-75   (hex)		ARRIS Group, Inc.
+002375     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-A3   (hex)		ARRIS Group, Inc.
+0023A3     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1A-DB   (hex)		ARRIS Group, Inc.
+001ADB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1F-7E   (hex)		ARRIS Group, Inc.
+001F7E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-11-AE   (hex)		ARRIS Group, Inc.
+0011AE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+94-CC-B9   (hex)		ARRIS Group, Inc.
+94CCB9     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+3C-43-8E   (hex)		ARRIS Group, Inc.
+3C438E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-24-C1   (hex)		ARRIS Group, Inc.
+0024C1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-25-F2   (hex)		ARRIS Group, Inc.
+0025F2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-25-F1   (hex)		ARRIS Group, Inc.
+0025F1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-14-04   (hex)		ARRIS Group, Inc.
+001404     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1A-AD   (hex)		ARRIS Group, Inc.
+001AAD     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-26-BA   (hex)		ARRIS Group, Inc.
+0026BA     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-23-0B   (hex)		ARRIS Group, Inc.
+00230B     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+74-E7-C6   (hex)		ARRIS Group, Inc.
+74E7C6     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1C-12   (hex)		ARRIS Group, Inc.
+001C12     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+5C-33-8E   (hex)		Alpha Networks Inc.
+5C338E     (base 16)		Alpha Networks Inc.
+				No.8 Li-shing Seventh Road,Science-based
+				Hsinchu    300
+				TW
+
+28-E3-47   (hex)		Liteon Technology Corporation
+28E347     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+44-6D-57   (hex)		Liteon Technology Corporation
+446D57     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+9C-B7-0D   (hex)		Liteon Technology Corporation
+9CB70D     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+68-A3-C4   (hex)		Liteon Technology Corporation
+68A3C4     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+70-F1-A1   (hex)		Liteon Technology Corporation
+70F1A1     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo,Taipei Hsien,Taiwan,
+				TaiPei  TaiWan  23585
+				TW
+
+00-D9-D1   (hex)		Sony Interactive Entertainment Inc.
+00D9D1     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+B0-05-94   (hex)		Liteon Technology Corporation
+B00594     (base 16)		Liteon Technology Corporation
+				4F,90,Chien 1 Road,ChungHo
+				New Taipei City  Taipei  23585
+				TW
+
+EC-08-6B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+EC086B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+94-A1-A2   (hex)		AMPAK Technology, Inc.
+94A1A2     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road
+				Hukou  Hsinchu  30352
+				TW
+
+00-01-4A   (hex)		Sony Corporation
+00014A     (base 16)		Sony Corporation
+				Gotenyama Tec, 5-1-2 Kitashinagawa
+				Tokyo    141-0001
+				JP
+
+98-3B-16   (hex)		AMPAK Technology, Inc.
+983B16     (base 16)		AMPAK Technology, Inc.
+				No.1,Jen Ai Road
+				Hsinchu    30352
+				TW
+
+40-95-58   (hex)		Aisino Corporation
+409558     (base 16)		Aisino Corporation
+				No.18A, Xingshikou Road,
+				Beijing    100195
+				CN
+
+18-28-61   (hex)		AirTies Wireless Networks
+182861     (base 16)		AirTies Wireless Networks
+				Gulbahar Mahallesi, Avni Diligil Sokak
+				ISTANBUL  ISTANBUL  34394
+				TR
+
+6C-71-D9   (hex)		AzureWave Technology Inc.
+6C71D9     (base 16)		AzureWave Technology Inc.
+				9F.,No.92,Baozhong Rd
+				Xindian District  New Taipei City  231
+				TW
+
+D0-E7-82   (hex)		AzureWave Technology Inc.
+D0E782     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd
+				. New Taipei City  Taiwan  231
+				TW
+
+6C-AD-F8   (hex)		AzureWave Technology Inc.
+6CADF8     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd
+				. New Taipei City  Taiwan  231
+				TW
+
+A8-1D-16   (hex)		AzureWave Technology Inc.
+A81D16     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+34-C3-D2   (hex)		FN-LINK TECHNOLOGY LIMITED
+34C3D2     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+54-F6-C5   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+54F6C5     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+D0-D4-12   (hex)		ADB Broadband Italia
+D0D412     (base 16)		ADB Broadband Italia
+				VIALE SARCA 336
+				MILANO    20126
+				IT
+
+00-26-B8   (hex)		Actiontec Electronics, Inc
+0026B8     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+00-26-FC   (hex)		AcSiP Technology Corp.
+0026FC     (base 16)		AcSiP Technology Corp.
+				3F., No.22, Dalin Rd.,
+				Taoyuan City,  Taoyuan County  330
+				TW
+
+00-15-AF   (hex)		AzureWave Technology Inc.
+0015AF     (base 16)		AzureWave Technology Inc.
+				8F., No.94, Baozhong Rd., Xindian
+				Taipei    231
+				TW
+
+74-F0-6D   (hex)		AzureWave Technology Inc.
+74F06D     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd., Xindian
+				Taipei    231
+				TW
+
+44-D8-32   (hex)		AzureWave Technology Inc.
+44D832     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd., Xindian
+				Taipei    231
+				TW
+
+E0-B9-A5   (hex)		AzureWave Technology Inc.
+E0B9A5     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baoshong Rd.
+				Xindian City, Taipei County    231
+				TW
+
+78-18-81   (hex)		AzureWave Technology Inc.
+781881     (base 16)		AzureWave Technology Inc.
+				8F., No.94 Baozhong Rd.,
+				Xindian, Taipei    23144
+				TW
+
+B0-46-FC   (hex)		MitraStar Technology Corp.
+B046FC     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+E0-41-36   (hex)		MitraStar Technology Corp.
+E04136     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu  Taiwan  300
+				TW
+
+00-1C-A2   (hex)		ADB Broadband Italia
+001CA2     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+00-22-33   (hex)		ADB Broadband Italia
+002233     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222
+				MILANO    20126
+				IT
+
+30-39-F2   (hex)		ADB Broadband Italia
+3039F2     (base 16)		ADB Broadband Italia
+				VIALE SARCA 222 
+				MILANO     20126 
+				IT
+
+00-17-C2   (hex)		ADB Broadband Italia
+0017C2     (base 16)		ADB Broadband Italia
+				v.Sarca 222
+				Milano    20126
+				IT
+
+68-9C-5E   (hex)		AcSiP Technology Corp.
+689C5E     (base 16)		AcSiP Technology Corp.
+				3F., No.22, Dalin Rd.
+				Taoyuan  Taoyuan County  33067
+				TW
+
+9C-0E-4A   (hex)		Shenzhen Vastking Electronic Co.,Ltd.
+9C0E4A     (base 16)		Shenzhen Vastking Electronic Co.,Ltd.
+				2/F Building 6,ZhengZhong Industrial Park,Qiaotou Community,Fuyong,Baoan,ShenZhen China
+				Shenzhen  Guangdong  518103
+				CN
+
+A8-58-40   (hex)		Cambridge Industries(Group) Co.,Ltd.
+A85840     (base 16)		Cambridge Industries(Group) Co.,Ltd.
+				5/F,Building 8, 2388 ChenHang Road, MinHang District
+				shanghai    201114
+				CN
+
+A0-D3-7A   (hex)		Intel Corporate
+A0D37A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+88-96-F2   (hex)		Valeo Schalter und Sensoren GmbH
+8896F2     (base 16)		Valeo Schalter und Sensoren GmbH
+				Laiernstrasse 12
+				Bietigheim-Bissingen  Germany  74321
+				DE
+
+00-10-73   (hex)		TECHNOBOX, INC.
+001073     (base 16)		TECHNOBOX, INC.
+				140 Mount Holly Bypass
+				Lumberton  NJ  08048-1114
+				US
+
+20-93-4D   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+20934D     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building,,Star-net Science Plaza
+				Fuzhou  Fujian  350002
+				CN
+
+00-90-27   (hex)		Intel Corporation
+009027     (base 16)		Intel Corporation
+				HF1-06
+				HILLSBORO  OR  97124
+				US
+
+C4-85-08   (hex)		Intel Corporate
+C48508     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+68-05-CA   (hex)		Intel Corporate
+6805CA     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+24-77-03   (hex)		Intel Corporate
+247703     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+74-E5-0B   (hex)		Intel Corporate
+74E50B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+B8-03-05   (hex)		Intel Corporate
+B80305     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-A0-C9   (hex)		Intel Corporation
+00A0C9     (base 16)		Intel Corporation
+				5200 NE ELAM YOUNG PARKWAY
+				HILLSBORO  OR  97124
+				US
+
+14-18-77   (hex)		Dell Inc.
+141877     (base 16)		Dell Inc.
+				One Dell way
+				Round Rock    78682
+				US
+
+E0-97-96   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E09796     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen  Guangdong  518129
+				CN
+
+1C-40-24   (hex)		Dell Inc.
+1C4024     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+18-FB-7B   (hex)		Dell Inc.
+18FB7B     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+F8-B1-56   (hex)		Dell Inc.
+F8B156     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+14-1A-A3   (hex)		Motorola Mobility LLC, a Lenovo Company
+141AA3     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 Merchandise Mart Plaza, Suite 1800
+				Chicago  IL  60654
+				US
+
+34-07-FB   (hex)		Ericsson AB
+3407FB     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+A4-A1-C2   (hex)		Ericsson AB
+A4A1C2     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+00-06-5B   (hex)		Dell Inc.
+00065B     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+84-2B-2B   (hex)		Dell Inc.
+842B2B     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock     78682
+				US
+
+F0-4D-A2   (hex)		Dell Inc.
+F04DA2     (base 16)		Dell Inc.
+				One Dell Way, MS RR5-45
+				Round Rock     78682
+				US
+
+E0-DB-55   (hex)		Dell Inc.
+E0DB55     (base 16)		Dell Inc.
+				One Dell way
+				Round Rock    78682
+				US
+
+00-0F-1F   (hex)		Dell Inc.
+000F1F     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+24-B6-FD   (hex)		Dell Inc.
+24B6FD     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+74-E6-E2   (hex)		Dell Inc.
+74E6E2     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+34-E6-D7   (hex)		Dell Inc.
+34E6D7     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+00-1E-C9   (hex)		Dell Inc.
+001EC9     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+00-21-70   (hex)		Dell Inc.
+002170     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+00-21-9B   (hex)		Dell Inc.
+00219B     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+B8-AC-6F   (hex)		Dell Inc.
+B8AC6F     (base 16)		Dell Inc.
+				One Dell Way,  MS RR5-45
+				Round Rock    78682
+				US
+
+8C-A9-82   (hex)		Intel Corporate
+8CA982     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+BC-77-37   (hex)		Intel Corporate
+BC7737     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+14-30-C6   (hex)		Motorola Mobility LLC, a Lenovo Company
+1430C6     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				600 North US Highway 45
+				Libertyville  IL  60048
+				US
+
+D8-FC-93   (hex)		Intel Corporate
+D8FC93     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+D4-AE-52   (hex)		Dell Inc.
+D4AE52     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+28-16-2E   (hex)		2Wire Inc
+28162E     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose    95131
+				US
+
+F8-18-97   (hex)		2Wire Inc
+F81897     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose    95131
+				US
+
+94-C1-50   (hex)		2Wire Inc
+94C150     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+5C-F8-21   (hex)		Texas Instruments
+5CF821     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+88-07-4B   (hex)		LG Electronics (Mobile Communications)
+88074B     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+00-0D-72   (hex)		2Wire Inc
+000D72     (base 16)		2Wire Inc
+				1704 Automation Parkway
+				San Jose  CA  95131
+				US
+
+00-12-88   (hex)		2Wire Inc
+001288     (base 16)		2Wire Inc
+				1704 Automation Parkway
+				San Jose  CA  94538
+				US
+
+00-78-9E   (hex)		Sagemcom Broadband SAS
+00789E     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+E8-BE-81   (hex)		Sagemcom Broadband SAS
+E8BE81     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				Rueil Malmaison Cedex  Hauts de Seine  92848
+				FR
+
+68-15-90   (hex)		Sagemcom Broadband SAS
+681590     (base 16)		Sagemcom Broadband SAS
+				250 ROUTE DE L'EMPEREUR
+				RUEIL MALMAISON CEDEX  Choisissez l'état / la province  92848
+				FR
+
+F4-EB-38   (hex)		Sagemcom Broadband SAS
+F4EB38     (base 16)		Sagemcom Broadband SAS
+				15 Avenue Ambroise  Croizat
+				DOMERAT  Allier  03410
+				FR
+
+00-1B-BF   (hex)		Sagemcom Broadband SAS
+001BBF     (base 16)		Sagemcom Broadband SAS
+				14 Rue Paul Dautier
+				VÃƒÂ©lizy    78457
+				FR
+
+00-25-69   (hex)		Sagemcom Broadband SAS
+002569     (base 16)		Sagemcom Broadband SAS
+				Le Ponnant de Paris
+				CEDEX  Paris  75512
+				FR
+
+14-1F-BA   (hex)		IEEE Registration Authority
+141FBA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+80-7B-85   (hex)		IEEE Registration Authority
+807B85     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+CC-1B-E0   (hex)		IEEE Registration Authority
+CC1BE0     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+F4-0E-11   (hex)		IEEE Registration Authority
+F40E11     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+10-F6-81   (hex)		vivo Mobile Communication Co., Ltd.
+10F681     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+00-21-7C   (hex)		2Wire Inc
+00217C     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+00-1F-B3   (hex)		2Wire Inc
+001FB3     (base 16)		2Wire Inc
+				1764 Automation Parkway
+				San Jose  CA  95131
+				US
+
+00-22-75   (hex)		Belkin International Inc.
+002275     (base 16)		Belkin International Inc.
+				12045 E. Waterfront Drive
+				Playa Vista  CA  90094
+				US
+
+00-57-D2   (hex)		Cisco Systems, Inc
+0057D2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-67-16   (hex)		Lily Robotics
+3C6716     (base 16)		Lily Robotics
+				75 Boardman Pl
+				San Francisco  CA  94103
+				US
+
+00-D0-BD   (hex)		Lattice Semiconductor Corp. (LPA)
+00D0BD     (base 16)		Lattice Semiconductor Corp. (LPA)
+				2115 O’Nel Drive
+				San Jose  CA  95131
+				US
+
+00-1F-3A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+001F3A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C8-A0-30   (hex)		Texas Instruments
+C8A030     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+78-C5-E5   (hex)		Texas Instruments
+78C5E5     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+0C-FD-37   (hex)		SUSE Linux GmbH
+0CFD37     (base 16)		SUSE Linux GmbH
+				Maxfeldstraße 5
+				Nürnberg  Bavaria  90409
+				DE
+
+2C-22-8B   (hex)		CTR SRL
+2C228B     (base 16)		CTR SRL
+				Via Lario 33
+				Cantù  Cantù (CO)  22063
+				IT
+
+0C-6F-9C   (hex)		Shaw Communications Inc.
+0C6F9C     (base 16)		Shaw Communications Inc.
+				Suite 900, 630 3rd Avenue S.W.
+				CALGARY  ALBERTA  T2P 4L4
+				CA
+
+00-17-E4   (hex)		Texas Instruments
+0017E4     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+04-E4-51   (hex)		Texas Instruments
+04E451     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+50-56-63   (hex)		Texas Instruments
+505663     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+88-33-14   (hex)		Texas Instruments
+883314     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+64-7B-D4   (hex)		Texas Instruments
+647BD4     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+D8-95-2F   (hex)		Texas Instruments
+D8952F     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+B8-FF-FE   (hex)		Texas Instruments
+B8FFFE     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+2C-E4-12   (hex)		Sagemcom Broadband SAS
+2CE412     (base 16)		Sagemcom Broadband SAS
+				250 route de l'Empereur
+				RUEIL MALMAISON CEDEX  Hauts de Seine  92848
+				FR
+
+44-C1-5C   (hex)		Texas Instruments
+44C15C     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+00-22-A5   (hex)		Texas Instruments
+0022A5     (base 16)		Texas Instruments
+				12500 TI Boulevard, MS 8723
+				Dallas  TX  75243
+				US
+
+E0-43-DB   (hex)		Shenzhen ViewAt Technology Co.,Ltd. 
+E043DB     (base 16)		Shenzhen ViewAt Technology Co.,Ltd. 
+				9A,Microprofit,6th Gaoxin South Road, High-Tech Industrial Park, Nanshan, Shenzhen, CHINA.
+				shenzhen  guangdong  518057
+				CN
+
+3C-CF-5B   (hex)		ICOMM HK LIMITED
+3CCF5B     (base 16)		ICOMM HK LIMITED
+				SUITES 2302-6, 23/F GREAT EAGLE CTR 23 HARBOUR RD 
+				WANCHAI    NA
+				HK
+
+24-05-F5   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+2405F5     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+3C-35-56   (hex)		Cognitec Systems GmbH
+3C3556     (base 16)		Cognitec Systems GmbH
+				Großenhainer Str. 101
+				Dresden  Saxony  01127
+				DE
+
+3C-90-66   (hex)		SmartRG, Inc.
+3C9066     (base 16)		SmartRG, Inc.
+				501 SE Columbia Shores Blvd
+				Vancouver  WA  98661
+				US
+
+00-0D-88   (hex)		D-Link Corporation
+000D88     (base 16)		D-Link Corporation
+				No.8, Li-Hsing 7 Road, Science-Based Ind
+				Hsinchu    30077
+				TW
+
+00-11-95   (hex)		D-Link Corporation
+001195     (base 16)		D-Link Corporation
+				2F No. 233-2, Pao-Chiao Road
+				Taipei  Taiwan  0000
+				TW
+
+00-13-46   (hex)		D-Link Corporation
+001346     (base 16)		D-Link Corporation
+				2F, No.233-2, Pao-Chiao Road
+				Hsin-Tien,  Taipei  231
+				TW
+
+78-E3-B5   (hex)		Hewlett Packard
+78E3B5     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+78-AC-C0   (hex)		Hewlett Packard
+78ACC0     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+68-B5-99   (hex)		Hewlett Packard
+68B599     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+1C-C1-DE   (hex)		Hewlett Packard
+1CC1DE     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+B8-A3-86   (hex)		D-Link International
+B8A386     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+1C-7E-E5   (hex)		D-Link International
+1C7EE5     (base 16)		D-Link International
+				1 International Business Park, #03-12, The Synergy 
+				SINGAPORE    609917
+				SG
+
+1C-BD-B9   (hex)		D-Link International
+1CBDB9     (base 16)		D-Link International
+				1 INTERNATIONAL  BUSINESS  PARK,
+				SINGAPORE    609917
+				SG
+
+00-14-2F   (hex)		Savvius
+00142F     (base 16)		Savvius
+				1340 Treat Boulevard, Suite 500
+				Walnut Creek  CA  94597
+				US
+
+28-BC-18   (hex)		SourcingOverseas Co. Ltd
+28BC18     (base 16)		SourcingOverseas Co. Ltd
+				2F., No.616, Sec.5, Zhongshan N. Rd., Shilin Dist.,
+				Taipei City    111
+				TW
+
+94-AB-DE   (hex)		OMX Technology - FZE
+94ABDE     (base 16)		OMX Technology - FZE
+				Dubai Silicon Oasis - THUB - 1-D-OFF-124
+				Dubai    65673
+				AE
+
+9C-DF-B1   (hex)		Shenzhen Crave Communication Co., LTD
+9CDFB1     (base 16)		Shenzhen Crave Communication Co., LTD
+				F3,8Building,DongFangMing IndustryZone,No.83 DabaoRD.,33 District BaoAn
+				Shenzhen  Guangdong  518000
+				CN
+
+AC-CF-85   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ACCF85     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan  Guangdong  523808 
+				CN
+
+38-71-DE   (hex)		Apple, Inc.
+3871DE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-81-EB   (hex)		Apple, Inc.
+7081EB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-BA-75   (hex)		Everest Networks, Inc
+34BA75     (base 16)		Everest Networks, Inc
+				2933 Bunker Hill Ln., Suite 100
+				Santa Clara  CA  95054
+				US
+
+7C-18-CD   (hex)		E-TRON Co.,Ltd.
+7C18CD     (base 16)		E-TRON Co.,Ltd.
+				66-11, Nonhyeon 2-dong, Gangnam-gu
+				Seoul    06049
+				KR
+
+00-E0-FC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+00E0FC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				KEFA ROAD, SCIENCE-BASED INDUSTRIAL PARK
+				SHENZHEN 518057    12345
+				CN
+
+64-16-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6416F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 2, Zone B,Huawei Industrial Park,Bantian, Longgang District
+				Shenzhen  Guangdong  518129
+				CN
+
+F4-03-04   (hex)		Google, Inc.
+F40304     (base 16)		Google, Inc.
+				1600 Amphitheatre Pkwy
+				Mt. View  CA  94043
+				US
+
+54-60-09   (hex)		Google, Inc.
+546009     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+A4-77-33   (hex)		Google, Inc.
+A47733     (base 16)		Google, Inc.
+				1600 Ampitheatre Parkway
+				Mountain View    94043
+				US
+
+80-7A-BF   (hex)		HTC Corporation
+807ABF     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+78-F8-82   (hex)		LG Electronics (Mobile Communications)
+78F882     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+C0-2C-7A   (hex)		Shenzhen Horn Audio Co.,Ltd.
+C02C7A     (base 16)		Shenzhen Horn Audio Co.,Ltd.
+				Block17,Tongfuyu lnd.Zone,Dalang,Baoan 
+				Shenzhen  Guang Dong   518109 
+				CN
+
+1C-CB-99   (hex)		TCT mobile ltd
+1CCB99     (base 16)		TCT mobile ltd
+				No.86 hechang 7th road, zhongkai, Hi-Tech District
+				Hui Zhou  Guang Dong  516006
+				CN
+
+A4-2B-B0   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+A42BB0     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+18-8B-45   (hex)		Cisco Systems, Inc
+188B45     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+60-69-44   (hex)		Apple, Inc.
+606944     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-C6-9A   (hex)		Juniper Networks
+B0C69A     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+2C-6B-F5   (hex)		Juniper Networks
+2C6BF5     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C4-2F-90   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+C42F90     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.469,Jianghui Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+F4-CA-24   (hex)		FreeBit Co., Ltd.
+F4CA24     (base 16)		FreeBit Co., Ltd.
+				E.Space Tower 3-6 Maruyama-Cho
+				Shibuya-ku  Tokyo  150-0044
+				JP
+
+00-D0-B7   (hex)		Intel Corporation
+00D0B7     (base 16)		Intel Corporation
+				5200 NE ELAM YOUNG PARKWAY
+				HILLSBORO  OR  97124
+				US
+
+00-1D-D6   (hex)		ARRIS Group, Inc.
+001DD6     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+90-3E-AB   (hex)		ARRIS Group, Inc.
+903EAB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+30-60-23   (hex)		ARRIS Group, Inc.
+306023     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+14-AB-F0   (hex)		ARRIS Group, Inc.
+14ABF0     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-14-F6   (hex)		Juniper Networks
+0014F6     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+90-1A-CA   (hex)		ARRIS Group, Inc.
+901ACA     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+C8-3F-B4   (hex)		ARRIS Group, Inc.
+C83FB4     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+E0-B7-0A   (hex)		ARRIS Group, Inc.
+E0B70A     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-1D-CE   (hex)		ARRIS Group, Inc.
+001DCE     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-13-E8   (hex)		Intel Corporate
+0013E8     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-13-CE   (hex)		Intel Corporate
+0013CE     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+2C-76-8A   (hex)		Hewlett Packard
+2C768A     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+C8-34-8E   (hex)		Intel Corporate
+C8348E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+4C-34-88   (hex)		Intel Corporate
+4C3488     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+10-02-B5   (hex)		Intel Corporate
+1002B5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-40-26   (hex)		BUFFALO.INC
+004026     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref.  460-8315
+				JP
+
+4C-E6-76   (hex)		BUFFALO.INC
+4CE676     (base 16)		BUFFALO.INC
+				AKAMONDORI Bldg., 30-20,Ohsu 3-chome
+				Naka-ku,Nagoya  Aichi Pref.  460-8315
+				JP
+
+00-0B-CD   (hex)		Hewlett Packard
+000BCD     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-0F-20   (hex)		Hewlett Packard
+000F20     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-11-0A   (hex)		Hewlett Packard
+00110A     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+B8-B8-1E   (hex)		Intel Corporate
+B8B81E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+B4-6D-83   (hex)		Intel Corporate
+B46D83     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3
+				Kulim  Kedah  09000
+				MY
+
+00-0E-35   (hex)		Intel Corporation
+000E35     (base 16)		Intel Corporation
+				2111 NE 25th Ave
+				Hillsboro  OR  97123
+				US
+
+00-07-E9   (hex)		Intel Corporation
+0007E9     (base 16)		Intel Corporation
+				2111 NE 25th Avenue
+				Hillsboro  OR  97124
+				US
+
+00-17-08   (hex)		Hewlett Packard
+001708     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+00-17-A4   (hex)		Hewlett Packard
+0017A4     (base 16)		Hewlett Packard
+				20555 State Highway 249
+				Houston  TX  77070
+				US
+
+C0-05-C2   (hex)		ARRIS Group, Inc.
+C005C2     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-30-C1   (hex)		Hewlett Packard
+0030C1     (base 16)		Hewlett Packard
+				11000 WOLFE ROAD
+				CUPERTINO  CA  95014
+				US
+
+00-80-A0   (hex)		Hewlett Packard
+0080A0     (base 16)		Hewlett Packard
+				ALAMEDA RIO NEGRO,
+				houston  tx  77070
+				BR
+
+D4-85-64   (hex)		Hewlett Packard
+D48564     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+24-BE-05   (hex)		Hewlett Packard
+24BE05     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive W
+				Houston    77070
+				US
+
+FC-3F-DB   (hex)		Hewlett Packard
+FC3FDB     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston  TX  77070
+				US
+
+30-8D-99   (hex)		Hewlett Packard
+308D99     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+58-20-B1   (hex)		Hewlett Packard
+5820B1     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+94-57-A5   (hex)		Hewlett Packard
+9457A5     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+00-0E-B3   (hex)		Hewlett Packard
+000EB3     (base 16)		Hewlett Packard
+				2580 55th Street
+				Boulder  CO  80301
+				US
+
+08-00-09   (hex)		Hewlett Packard
+080009     (base 16)		Hewlett Packard
+				ENTERPRISE SYSTEMS TECH.CENTER
+				CUPERTINO  CA  95014
+				US
+
+90-CD-B6   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+90CDB6     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+40-49-0F   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+40490F     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-26-5C   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+00265C     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-22-69   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+002269     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+D8-79-88   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+D87988     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+74-A7-8E   (hex)		zte corporation
+74A78E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+00-09-2D   (hex)		HTC Corporation
+00092D     (base 16)		HTC Corporation
+				No.23 Xinghua Road,
+				Taoyuan County     330
+				TW
+
+44-31-92   (hex)		Hewlett Packard
+443192     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+A0-D3-C1   (hex)		Hewlett Packard
+A0D3C1     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+38-EA-A7   (hex)		Hewlett Packard
+38EAA7     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+AC-16-2D   (hex)		Hewlett Packard
+AC162D     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+80-C1-6E   (hex)		Hewlett Packard
+80C16E     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+B4-B5-2F   (hex)		Hewlett Packard
+B4B52F     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+D0-7E-28   (hex)		Hewlett Packard
+D07E28     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+D0-BF-9C   (hex)		Hewlett Packard
+D0BF9C     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+7C-61-93   (hex)		HTC Corporation
+7C6193     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., 
+				Taoyuan County    330
+				TW
+
+90-E7-C4   (hex)		HTC Corporation
+90E7C4     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd.
+				Taoyuan County  Taiwan  330
+				TW
+
+BC-EA-FA   (hex)		Hewlett Packard
+BCEAFA     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+74-46-A0   (hex)		Hewlett Packard
+7446A0     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+2C-44-FD   (hex)		Hewlett Packard
+2C44FD     (base 16)		Hewlett Packard
+				11445 Compaq Center Drive
+				Houston    77070
+				US
+
+04-53-D5   (hex)		Sysorex Global Holdings
+0453D5     (base 16)		Sysorex Global Holdings
+				Suite 195 2479 E. Bayshore Road
+				Palo Alto  CA  94303
+				US
+
+EC-52-DC   (hex)		WORLD MEDIA AND TECHNOLOGY Corp.
+EC52DC     (base 16)		WORLD MEDIA AND TECHNOLOGY Corp.
+				600 Brickell World Plaza, suite 1775
+				Miami    33132
+				US
+
+94-B2-CC   (hex)		PIONEER CORPORATION
+94B2CC     (base 16)		PIONEER CORPORATION
+				1-1 Shin-ogura
+				Kawasaki-shi  Kanagawa Prefecture  2120031
+				JP
+
+04-52-F3   (hex)		Apple, Inc.
+0452F3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-C2-55   (hex)		Texas Instruments
+88C255     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+CC-78-AB   (hex)		Texas Instruments
+CC78AB     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+1C-78-39   (hex)		Shenzhen Tencent Computer System Co., Ltd.
+1C7839     (base 16)		Shenzhen Tencent Computer System Co., Ltd.
+				36/F, Tencent Building, Kejizhongyi Avenue, Hi-Tech Park
+				Shenzhen  Guangdong  518057
+				CN
+
+FC-D7-33   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+FCD733     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+5C-89-9A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+5C899A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+A8-1B-5A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A81B5A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
+				DONGGUAN  GUANGDONG  523860
+				CN
+
+2C-5B-B8   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+2C5BB8     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,WUSHA,CHANG'AN,DONGGUAN,GUANGDONG,CHINA
+				DONGGUAN  GUANGDONG  523860
+				CN
+
+08-EB-74   (hex)		HUMAX Co., Ltd.
+08EB74     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 11-4, Sunae-dong, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-825
+				KR
+
+E0-05-C5   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+E005C5     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 7, Second Part, Honghualing Industrial Zone
+				Shenzhen  Guangdong  518000
+				CN
+
+38-83-45   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+388345     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park,Shennan Rd, Nanshan, 
+				Shenzhen,  Guangdong Province  518057
+				CN
+
+EC-88-8F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+EC888F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park
+				Shenzhen  Guangdong  518057
+				CN
+
+64-66-B3   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+6466B3     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)  Central Science and Technology Park
+				Shenzhen  Guangdong  518057
+				CN
+
+28-32-C5   (hex)		HUMAX Co., Ltd.
+2832C5     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village,216,Hwangsaeul-ro,Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+F0-F3-36   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F0F336     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+BC-46-99   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+BC4699     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4)
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+F4-83-CD   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F483CD     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24 (floors 1,3,4,5) and 28 (floors1-4) 
+				Shennan Rd, Nanshan  Shenzhen,Guangdong Province  518057
+				CN
+
+00-21-27   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+002127     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				South Building, No.5 Keyuan Road, Central Zone,
+				Shenzhen  Guangdong  518000
+				CN
+
+5C-63-BF   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+5C63BF     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				1-6F, Building 2, Pingshandayuan Industrial, South Zone,
+				Shenzhen  Guangdong  518000
+				CN
+
+14-2D-27   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+142D27     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+88-E3-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88E3AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-05-28   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C40528     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-DF-BD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3CDFBD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-9F-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+509F27     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-71-7A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+80717A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-21-E8   (hex)		Murata Manufacturing Co., Ltd.
+0021E8     (base 16)		Murata Manufacturing Co., Ltd.
+				2288, Oaza-Ohshinohara, Yasu-cho,
+				Yasu-gun  Shiga  520-2393
+				JP
+
+00-0E-6D   (hex)		Murata Manufacturing Co., Ltd.
+000E6D     (base 16)		Murata Manufacturing Co., Ltd.
+				2288, Oaza-Ohshinohara, Yasu-cho,
+				Yasu-gun  Shiga  520-2393
+				JP
+
+D0-27-88   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+D02788     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+90-4C-E5   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+904CE5     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-1F-E2   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+001FE2     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+00-16-CF   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+0016CF     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+20-02-AF   (hex)		Murata Manufacturing Co., Ltd.
+2002AF     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1 Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+98-F5-37   (hex)		zte corporation
+98F537     (base 16)		zte corporation
+				12/F.,zte R&D building,kejinan Road,
+				shenzhen  guangdong  518057
+				CN
+
+5C-4C-A9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5C4CA9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+F4-C7-14   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4C714     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District,
+				Shenzhen  Guangdong  518108
+				CN
+
+28-6E-D4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+286ED4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				HUAWEI Industrial Base Bantian,Longgang
+				Shenzhen  guangdong  518129
+				CN
+
+00-1E-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+001E10     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				HUAWEI INDUSTRIAL PK BANTIAN, LONGGANG DIST SHENZHEN
+				SHENZHEN  GUANGDONG  518077
+				CN
+
+D4-78-56   (hex)		Avaya Inc
+D47856     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+D8-42-AC   (hex)		Shanghai Feixun Communication Co.,Ltd.
+D842AC     (base 16)		Shanghai Feixun Communication Co.,Ltd.
+				Building 90, No. 4855, Guangfulin Road, Songjiang District
+				Shanghai    201616
+				CN
+
+54-39-DF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5439DF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				Shenzhen  Guangdong  518129
+				CN
+
+28-3C-E4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+283CE4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate,Shiyan Baoan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+2C-F4-C5   (hex)		Avaya Inc
+2CF4C5     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+3C-3A-73   (hex)		Avaya Inc
+3C3A73     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+FC-83-99   (hex)		Avaya Inc
+FC8399     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+58-7F-66   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+587F66     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+64-A6-51   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+64A651     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-63-61   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+086361     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				Building 17,Nangang Industrial Park, Tangtou 3nd Industrial Estate
+				Shenzhen  GuangDong  518057
+				CN
+
+A0-12-90   (hex)		Avaya Inc
+A01290     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+38-BB-3C   (hex)		Avaya Inc
+38BB3C     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+F8-73-A2   (hex)		Avaya Inc
+F873A2     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+CC-F9-54   (hex)		Avaya Inc
+CCF954     (base 16)		Avaya Inc
+				360 Mt Kemble Ave
+				Morristown  NJ  07960
+				US
+
+8C-34-FD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8C34FD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-F7-F3   (hex)		Xiaomi Communications Co Ltd
+ACF7F3     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+D4-97-0B   (hex)		Xiaomi Communications Co Ltd
+D4970B     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+8C-BE-BE   (hex)		Xiaomi Communications Co Ltd
+8CBEBE     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+14-F6-5A   (hex)		Xiaomi Communications Co Ltd
+14F65A     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-9E-C8   (hex)		Xiaomi Communications Co Ltd
+009EC8     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+0C-1D-AF   (hex)		Xiaomi Communications Co Ltd
+0C1DAF     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+08-19-A6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0819A6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+3C-F8-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3CF808     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+48-62-76   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+486276     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+B4-15-13   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B41513     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+AC-4E-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+AC4E91     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+28-31-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+283152     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base,Bantian,Longgang,Shenzhen
+				ShenZhen  GuangDong  518129
+				CN
+
+34-80-B3   (hex)		Xiaomi Communications Co Ltd
+3480B3     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+F4-8B-32   (hex)		Xiaomi Communications Co Ltd
+F48B32     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+00-90-21   (hex)		Cisco Systems, Inc
+009021     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-90-B1   (hex)		Cisco Systems, Inc
+0090B1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-B6   (hex)		Texas Instruments
+001AB6     (base 16)		Texas Instruments
+				108 Wild Basin Ste 350
+				Austin  TX  78746
+				US
+
+00-12-D1   (hex)		Texas Instruments
+0012D1     (base 16)		Texas Instruments
+				12500 TI Boulevard,
+				Dallas    75243
+				US
+
+00-12-37   (hex)		Texas Instruments
+001237     (base 16)		Texas Instruments
+				12500 TI Boulevard,
+				Dallas    75243
+				US
+
+A0-E6-F8   (hex)		Texas Instruments
+A0E6F8     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+70-FF-76   (hex)		Texas Instruments
+70FF76     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D0-39-72   (hex)		Texas Instruments
+D03972     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+5C-31-3E   (hex)		Texas Instruments
+5C313E     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+F4-B8-5E   (hex)		Texas Instruments
+F4B85E     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+68-C9-0B   (hex)		Texas Instruments
+68C90B     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+74-88-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+74882A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+4C-B1-6C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CB16C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1-4,Huawei Industrial Base,Bantian,Longgang
+				ShenZhen  GuangDong  518129
+				CN
+
+04-BD-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04BD70     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				D1,Huawei Industrial Base
+				Shenzhen  Guangdong  518129
+				CN
+
+D4-F5-13   (hex)		Texas Instruments
+D4F513     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+50-72-24   (hex)		Texas Instruments
+507224     (base 16)		Texas Instruments
+				12500 TI BLVD
+				Dallas    75243
+				US
+
+00-90-D9   (hex)		Cisco Systems, Inc
+0090D9     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-90-92   (hex)		Cisco Systems, Inc
+009092     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-2F   (hex)		Cisco Systems, Inc
+00102F     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-0D   (hex)		Cisco Systems, Inc
+00100D     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-07   (hex)		Cisco Systems, Inc
+001007     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-10-14   (hex)		Cisco Systems, Inc
+001014     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+00-90-BF   (hex)		Cisco Systems, Inc
+0090BF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-50-D1   (hex)		Cisco Systems, Inc
+0050D1     (base 16)		Cisco Systems, Inc
+				170 W. TASMAN DR.
+				SAN JOSE  CA  95134-1706
+				US
+
+1C-E6-C7   (hex)		Cisco Systems, Inc
+1CE6C7     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+CC-D5-39   (hex)		Cisco Systems, Inc
+CCD539     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+4C-00-82   (hex)		Cisco Systems, Inc
+4C0082     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+7C-95-F3   (hex)		Cisco Systems, Inc
+7C95F3     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+34-DB-FD   (hex)		Cisco Systems, Inc
+34DBFD     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+88-5A-92   (hex)		Cisco Systems, Inc
+885A92     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-40-0B   (hex)		Cisco Systems, Inc
+00400B     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-60-70   (hex)		Cisco Systems, Inc
+006070     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+50-06-04   (hex)		Cisco Systems, Inc
+500604     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-E0-1E   (hex)		Cisco Systems, Inc
+00E01E     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+00-11-2F   (hex)		ASUSTek COMPUTER INC.
+00112F     (base 16)		ASUSTek COMPUTER INC.
+				No.150, Li-Te Rd., Peitou
+				Taipei    112
+				TW
+
+00-1B-FC   (hex)		ASUSTek COMPUTER INC.
+001BFC     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou
+				Taipei    112
+				TW
+
+A0-55-4F   (hex)		Cisco Systems, Inc
+A0554F     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+20-4C-9E   (hex)		Cisco Systems, Inc
+204C9E     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+84-B8-02   (hex)		Cisco Systems, Inc
+84B802     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+B0-AA-77   (hex)		Cisco Systems, Inc
+B0AA77     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+BC-C4-93   (hex)		Cisco Systems, Inc
+BCC493     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+A4-6C-2A   (hex)		Cisco Systems, Inc
+A46C2A     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+D0-A5-A6   (hex)		Cisco Systems, Inc
+D0A5A6     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+3C-5E-C3   (hex)		Cisco Systems, Inc
+3C5EC3     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+64-F6-9D   (hex)		Cisco Systems, Inc
+64F69D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-03-89   (hex)		PLANTRONICS, INC.
+000389     (base 16)		PLANTRONICS, INC.
+				345 ENCINAL STREET
+				SANTA CRUZ  CA  95060
+				US
+
+D0-72-DC   (hex)		Cisco Systems, Inc
+D072DC     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+28-C7-CE   (hex)		Cisco Systems, Inc
+28C7CE     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F4-0F-1B   (hex)		Cisco Systems, Inc
+F40F1B     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F8-C2-88   (hex)		Cisco Systems, Inc
+F8C288     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+1C-6A-7A   (hex)		Cisco Systems, Inc
+1C6A7A     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-1E-E5   (hex)		Cisco-Linksys, LLC
+001EE5     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine    92612
+				US
+
+48-44-87   (hex)		Cisco SPVTG
+484487     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+38-C8-5C   (hex)		Cisco SPVTG
+38C85C     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+48-5B-39   (hex)		ASUSTek COMPUTER INC.
+485B39     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,Taipei 112 ,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+BC-AE-C5   (hex)		ASUSTek COMPUTER INC.
+BCAEC5     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,
+				Taipei    112
+				TW
+
+10-BF-48   (hex)		ASUSTek COMPUTER INC.
+10BF48     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd.,Peitou,
+				Taipei    112
+				TW
+
+50-67-AE   (hex)		Cisco Systems, Inc
+5067AE     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+F0-9E-63   (hex)		Cisco Systems, Inc
+F09E63     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+6C-99-89   (hex)		Cisco Systems, Inc
+6C9989     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+18-E7-28   (hex)		Cisco Systems, Inc
+18E728     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+00-12-17   (hex)		Cisco-Linksys, LLC
+001217     (base 16)		Cisco-Linksys, LLC
+				121 Theory Dr.
+				Irvine  CA  92612
+				US
+
+00-13-10   (hex)		Cisco-Linksys, LLC
+001310     (base 16)		Cisco-Linksys, LLC
+				121 Theory Dr.
+				Irvine  CA  92612
+				US
+
+04-6C-9D   (hex)		Cisco Systems, Inc
+046C9D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+84-B2-61   (hex)		Cisco Systems, Inc
+84B261     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+E4-48-C7   (hex)		Cisco SPVTG
+E448C7     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Pkwy
+				Lawrenceville  GA  30044
+				US
+
+00-10-1F   (hex)		Cisco Systems, Inc
+00101F     (base 16)		Cisco Systems, Inc
+				170 WEST TASMAN DRIVE
+				SAN JOSE  CA  95134-1706
+				US
+
+54-A2-74   (hex)		Cisco Systems, Inc
+54A274     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+60-FB-42   (hex)		Apple, Inc.
+60FB42     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-B9-E8   (hex)		Apple, Inc.
+64B9E8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-1D-4F   (hex)		Apple, Inc.
+001D4F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-23-12   (hex)		Apple, Inc.
+002312     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-E0-1D   (hex)		Cisco Systems, Inc
+80E01D     (base 16)		Cisco Systems, Inc
+				170 West Tasman Drive
+				San Jose  CA  95134
+				US
+
+D8-A2-5E   (hex)		Apple, Inc.
+D8A25E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-0A-27   (hex)		Apple, Inc.
+000A27     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-34-51   (hex)		Apple, Inc.
+183451     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+0C-77-1A   (hex)		Apple, Inc.
+0C771A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-6A-BA   (hex)		Apple, Inc.
+286ABA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+4C-B1-99   (hex)		Apple, Inc.
+4CB199     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C0-9F-42   (hex)		Apple, Inc.
+C09F42     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D0-23-DB   (hex)		Apple, Inc.
+D023DB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-DE-E2   (hex)		Apple, Inc.
+70DEE2     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-CB-A1   (hex)		Apple, Inc.
+F0CBA1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-20-32   (hex)		Apple, Inc.
+182032     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-3C-FC   (hex)		Apple, Inc.
+403CFC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-60-BC   (hex)		Apple, Inc.
+4860BC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-51-C9   (hex)		Apple, Inc.
+3451C9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-6C-8F   (hex)		Apple, Inc.
+406C8F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-55-CA   (hex)		Apple, Inc.
+5855CA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-2B-61   (hex)		Apple, Inc.
+DC2B61     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+40-A6-D9   (hex)		Apple, Inc.
+40A6D9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-FA-CD   (hex)		Apple, Inc.
+60FACD     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-3E-E1   (hex)		Apple, Inc.
+003EE1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-25-3F   (hex)		Apple, Inc.
+FC253F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-F7-E4   (hex)		Apple, Inc.
+04F7E4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-C0-59   (hex)		Apple, Inc.
+34C059     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-D1-A9   (hex)		Apple, Inc.
+F0D1A9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-56-81   (hex)		Apple, Inc.
+705681     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-10-9F   (hex)		Apple, Inc.
+14109F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-0C-CE   (hex)		Apple, Inc.
+040CCE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-EA-A8   (hex)		Apple, Inc.
+54EAA8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-E1-4C   (hex)		Apple, Inc.
+28E14C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E4-C6-3D   (hex)		Apple, Inc.
+E4C63D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-E4-3A   (hex)		Apple, Inc.
+54E43A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-DB-56   (hex)		Apple, Inc.
+04DB56     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-3C-0B   (hex)		Apple, Inc.
+AC3C0B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-11-24   (hex)		Apple, Inc.
+701124     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-26-65   (hex)		Apple, Inc.
+042665     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-35-86   (hex)		Apple, Inc.
+EC3586     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+78-FD-94   (hex)		Apple, Inc.
+78FD94     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-BE-08   (hex)		Apple, Inc.
+2CBE08     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+E8-80-2E   (hex)		Apple, Inc.
+E8802E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-61-71   (hex)		Apple, Inc.
+006171     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+8C-7C-92   (hex)		Apple, Inc.
+8C7C92     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-34-95   (hex)		Apple, Inc.
+B03495     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-37-B7   (hex)		Apple, Inc.
+F437B7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-7F-3E   (hex)		Apple, Inc.
+AC7F3E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-0B-5C   (hex)		Apple, Inc.
+280B5C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-FD-EC   (hex)		Apple, Inc.
+ACFDEC     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-9B-9C   (hex)		Apple, Inc.
+DC9B9C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-72-4F   (hex)		Apple, Inc.
+54724F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D8-CF-9C   (hex)		Apple, Inc.
+D8CF9C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+7C-6D-F8   (hex)		Apple, Inc.
+7C6DF8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+04-E5-36   (hex)		Apple, Inc.
+04E536     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-BB-CF   (hex)		Apple, Inc.
+A8BBCF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-40-08   (hex)		Apple, Inc.
+6C4008     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-A3-86   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+FCA386     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+40-33-1A   (hex)		Apple, Inc.
+40331A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+CC-C7-60   (hex)		Apple, Inc.
+CCC760     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-4C-C4   (hex)		Apple, Inc.
+BC4CC4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-37-14   (hex)		Apple, Inc.
+DC3714     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-A2-E4   (hex)		Apple, Inc.
+20A2E4     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-F0-76   (hex)		Apple, Inc.
+28F076     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-13-57   (hex)		ATP Electronics, Inc.
+141357     (base 16)		ATP Electronics, Inc.
+				2590 North First Street Suite 150
+				San Jose  CA  95131
+				US
+
+B8-B2-EB   (hex)		Googol Technology (HK) Limited
+B8B2EB     (base 16)		Googol Technology (HK) Limited
+				Unit 1008-09, 10/F C-Bons International Center
+				Kwun Tong  Kowloon  nil
+				HK
+
+FC-CF-43   (hex)		HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD
+FCCF43     (base 16)		HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD
+				Meisiqi lndustrialPark,Yuechang,
+				Huizhou  Guangdong  516000
+				CN
+
+D8-48-EE   (hex)		Hangzhou Xueji Technology Co., Ltd.
+D848EE     (base 16)		Hangzhou Xueji Technology Co., Ltd.
+				Room 1902, Tower D, West Intime City
+				Hangzhou  Zhejiang  310012
+				CN
+
+B4-EF-04   (hex)		DAIHAN Scientific Co., Ltd.
+B4EF04     (base 16)		DAIHAN Scientific Co., Ltd.
+				326, Sinpyoungsukhwaro
+				Wonju-si,  Gangwon-do  26358
+				KR
+
+A4-DE-C9   (hex)		QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.
+A4DEC9     (base 16)		QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.
+				Sun Jia Tuan Township, Huan Cui District, Weihai, P.R.China
+				 Weihai  Shan Dong  264201
+				CN
+
+CC-E0-C3   (hex)		EXTEN Technologies, Inc.
+CCE0C3     (base 16)		EXTEN Technologies, Inc.
+				4201 W Parmer Lane Bldg A, Ste 200
+				Austin  TX  78727
+				US
+
+64-6A-74   (hex)		AUTH-SERVERS, LLC
+646A74     (base 16)		AUTH-SERVERS, LLC
+				43479 Stukely Dr
+				Sterling  VA  20166
+				US
+
+4C-8E-CC   (hex)		SILKAN SA
+4C8ECC     (base 16)		SILKAN SA
+				Immeuble le Sirius
+				Meudon La Foret  Ile de France  92360
+				FR
+
+E4-35-C8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E435C8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-54-B9   (hex)		Nokia
+0C54B9     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+84-10-0D   (hex)		Motorola Mobility LLC, a Lenovo Company
+84100D     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+D0-0F-6D   (hex)		T&W Electronics Company
+D00F6D     (base 16)		T&W Electronics Company
+				89# Jiang Nan RD, Lu Du
+				Taicang  Jiangsu  21500
+				CN
+
+90-8D-78   (hex)		D-Link International
+908D78     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+7C-71-76   (hex)		Wuxi iData Technology Company Ltd.
+7C7176     (base 16)		Wuxi iData Technology Company Ltd.
+				Floor 11, Building B1, Wuxi(Binhu) National Sensing Information Center, No. 999 Gaolang East Road, Wuxi City, Jiangsu Province, P.R.C.
+				Wuxi  Jiangsu  214131
+				CN
+
+7C-01-91   (hex)		Apple, Inc.
+7C0191     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-1B-C8   (hex)		Hunan Topview Network System CO.,LTD
+2C1BC8     (base 16)		Hunan Topview Network System CO.,LTD
+				RM 3002,3009,3010 Yuelu High-Tech Zone, Hanpu Couty, Yuelu District
+				Changsha  Hunan  410208
+				CN
+
+A8-47-4A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+A8474A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+C4-00-49   (hex)		Kamama
+C40049     (base 16)		Kamama
+				100 Enterprise Way
+				Scotts Valley  CA  95066
+				US
+
+80-D6-05   (hex)		Apple, Inc.
+80D605     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-E8-48   (hex)		Axiim
+98E848     (base 16)		Axiim
+				12126 NE 106th Pl
+				Kirkland  WA  98033
+				US
+
+C0-4A-09   (hex)		Zhejiang Everbright Communication Equip. Co,. Ltd
+C04A09     (base 16)		Zhejiang Everbright Communication Equip. Co,. Ltd
+				291# Wei 19th Rd.
+				Wenzhou  Zhejiang  325600
+				CN
+
+A0-1E-0B   (hex)		MINIX Technology Limited
+A01E0B     (base 16)		MINIX Technology Limited
+				Unit 1501, Chevalier Commercial Center
+				Kowloon Bay  Kowloon  000000
+				HK
+
+68-E8-EB   (hex)		Linktel Technologies Co.,Ltd
+68E8EB     (base 16)		Linktel Technologies Co.,Ltd
+				No.20 University Science Park Road,
+				Wuhan  Hubei  430223
+				CN
+
+A8-45-CD   (hex)		Siselectron Technology LTD.
+A845CD     (base 16)		Siselectron Technology LTD.
+				5F., No.232, Sec. 2, Sioulang Rd., Yonghe Dist.,
+				New Taipei City  Taiwan  23453
+				TW
+
+D0-C1-93   (hex)		SKYBELL, INC
+D0C193     (base 16)		SKYBELL, INC
+				1 JENNER, SUITE 100
+				IRVINE  CA  92618
+				US
+
+AC-64-62   (hex)		zte corporation
+AC6462     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C0-25-A2   (hex)		NEC Platforms, Ltd.
+C025A2     (base 16)		NEC Platforms, Ltd.
+				2-3 Kandatsukasamachi
+				Chiyodaku  Tokyo  101-8532
+				JP
+
+48-13-7E   (hex)		Samsung Electronics Co.,Ltd
+48137E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-F7-72   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+30F772     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+DC-3C-F6   (hex)		Atomic Rules LLC
+DC3CF6     (base 16)		Atomic Rules LLC
+				287 Chester Rd
+				Auburn  NH  03032
+				US
+
+08-9B-4B   (hex)		iKuai Networks
+089B4B     (base 16)		iKuai Networks
+				So Boss Tech Center 2 # 716
+				Fengtai District  Beijing  100068
+				CN
+
+44-73-D6   (hex)		Logitech
+4473D6     (base 16)		Logitech
+				7700 Gateway Blvd
+				Newark  CA  94560
+				US
+
+10-CC-1B   (hex)		Liverock technologies,INC
+10CC1B     (base 16)		Liverock technologies,INC
+				Shinjuku 5-13-10,Joshu-Bldg. 4F
+				Tokyo  Shinjuku-ku  160-0022
+				JP
+
+E8-07-34   (hex)		Champion Optical Network Engineering, LLC
+E80734     (base 16)		Champion Optical Network Engineering, LLC
+				23645 Mercantile Rd.
+				Beachwood  OH  44122
+				US
+
+A4-38-31   (hex)		RF elements s.r.o.
+A43831     (base 16)		RF elements s.r.o.
+				Jasenovská 2528
+				Humenne  SK  06603
+				SK
+
+38-05-46   (hex)		Foctek Photonics, Inc.
+380546     (base 16)		Foctek Photonics, Inc.
+				No. 8, the 7th Road Phase II of Minhou Tieling Industrial District
+				Fuzhou  Fujian  350100
+				CN
+
+D4-83-04   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+D48304     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+DC-2B-2A   (hex)		Apple, Inc.
+DC2B2A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+9C-8D-D3   (hex)		Leonton Technologies
+9C8DD3     (base 16)		Leonton Technologies
+				3F, No.501-16, Zhongzheng Rd., Xindian Dist.
+				New Taipei City  Taiwan  231
+				TW
+
+E4-1A-2C   (hex)		ZPE Systems, Inc.
+E41A2C     (base 16)		ZPE Systems, Inc.
+				39420 Liberty Street,  #253
+				Fremont  CA  94538
+				US
+
+E8-BD-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8BDD1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F4-15-35   (hex)		SPON Communication Technology Co.,Ltd
+F41535     (base 16)		SPON Communication Technology Co.,Ltd
+				B Building, Lugu International Industrial Zone, NO.229, Tongzipo Road, Changsha, China
+				changsha  hunan  410000
+				CN
+
+38-0A-AB   (hex)		Formlabs
+380AAB     (base 16)		Formlabs
+				35 Medford St
+				Somerville  MA  02143
+				US
+
+38-2D-E8   (hex)		Samsung Electronics Co.,Ltd
+382DE8     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C0-89-97   (hex)		Samsung Electronics Co.,Ltd
+C08997     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A8-15-D6   (hex)		Shenzhen Meione Technology CO., LTD
+A815D6     (base 16)		Shenzhen Meione Technology CO., LTD
+				12th FloorFutian Sports Park Cultural Industries Headquarters Building No. 3030 Fuqiang Road, Futian District
+				Shenzhen  Guangdong  518000
+				CN
+
+C0-7C-D1   (hex)		PEGATRON CORPORATION
+C07CD1     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+90-D8-F3   (hex)		zte corporation
+90D8F3     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D4-45-E8   (hex)		Jiangxi Hongpai Technology Co., Ltd.
+D445E8     (base 16)		Jiangxi Hongpai Technology Co., Ltd.
+				5th Floor,C Region, Zhejiang University Science Park,No. 698,
+				Nanchang  Jiangxi  330096
+				CN
+
+34-26-06   (hex)		CarePredict, Inc.
+342606     (base 16)		CarePredict, Inc.
+				PO Box 551686
+				Fort Lauderdale  Florida  33355
+				US
+
+38-B7-25   (hex)		Wistron Infocomm (Zhongshan) Corporation
+38B725     (base 16)		Wistron Infocomm (Zhongshan) Corporation
+				No.38,East Keji Road,Zhongshan Torch Development Zone,Zhongshan City,Guangdong,China
+				Zhongshan  Guangdong  528437
+				CN
+
+AC-EC-80   (hex)		ARRIS Group, Inc.
+ACEC80     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+50-7B-9D   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+507B9D     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+6C-72-20   (hex)		D-Link International
+6C7220     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+30-A2-43   (hex)		Shenzhen Prifox Innovation Technology Co., Ltd.
+30A243     (base 16)		Shenzhen Prifox Innovation Technology Co., Ltd.
+				Room B905, Bldg 4, Software Industry Park,
+				Shenzhen  Guangdong Province  518057
+				
+
+38-01-95   (hex)		Samsung Electronics Co.,Ltd
+380195     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+24-6E-96   (hex)		Dell Inc.
+246E96     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+44-97-5A   (hex)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+44975A     (base 16)		SHENZHEN FAST TECHNOLOGIES CO.,LTD
+				Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China
+				Shenzhen  Guangdong  518057
+				CN
+
+50-45-F7   (hex)		Liuhe Intelligence Technology Ltd.
+5045F7     (base 16)		Liuhe Intelligence Technology Ltd.
+				7th Floor,Information Building,
+				Beijing  Beijing  100085
+				CN
+
+AC-67-6F   (hex)		Electrocompaniet A.S.
+AC676F     (base 16)		Electrocompaniet A.S.
+				Breivikveien 7
+				Tau  Rogaland  4120
+				NO
+
+64-0D-E6   (hex)		Petra Systems
+640DE6     (base 16)		Petra Systems
+				One Cragwood Road
+				South Plainfield  NJ  07080
+				US
+
+E0-55-3D   (hex)		Cisco Meraki
+E0553D     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco  California  94158
+				US
+
+FC-33-5F   (hex)		Polyera
+FC335F     (base 16)		Polyera
+				8045 Lamon Avenue
+				Skokie  IL  60077
+				US
+
+84-D4-C8   (hex)		Widex A/S
+84D4C8     (base 16)		Widex A/S
+				Nymoellevej 6
+				Lynge  Alleroed  DK3540
+				DK
+
+EC-21-E5   (hex)		Toshiba
+EC21E5     (base 16)		Toshiba
+				2-9,Suehiro-Cho
+				Ome  Tokyo  1988710
+				JP
+
+04-C2-3E   (hex)		HTC Corporation
+04C23E     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+E0-1A-EA   (hex)		Allied Telesis, Inc.
+E01AEA     (base 16)		Allied Telesis, Inc.
+				3041 Orchard Parkway
+				San Jose  CALIFORNIA  95134
+				US
+
+28-B9-D9   (hex)		Radisys Corporation
+28B9D9     (base 16)		Radisys Corporation
+				5435 NE Dawson Creek Drive
+				Hillsboro  OR  97124
+				US
+
+F4-C6-13   (hex)		Alcatel-Lucent Shanghai Bell Co., Ltd
+F4C613     (base 16)		Alcatel-Lucent Shanghai Bell Co., Ltd
+				No. 389, Ningqiao Road, Pudong Jinqiao
+				Shanghai    201206
+				CN
+
+44-5F-8C   (hex)		Intercel Group Limited
+445F8C     (base 16)		Intercel Group Limited
+				Unit 6, 17/F, Vanta industrial Centre,
+				New Territories, Hong Kong    
+				CN
+
+B8-89-81   (hex)		Chengdu InnoThings Technology Co., Ltd.
+B88981     (base 16)		Chengdu InnoThings Technology Co., Ltd.
+				West Port Technology Enterprise Incubator Park
+				Chengdu  Sichuan  610000
+				CN
+
+F0-26-24   (hex)		WAFA TECHNOLOGIES CO., LTD.
+F02624     (base 16)		WAFA TECHNOLOGIES CO., LTD.
+				Room302, Longtaili Building
+				Shenzhen  Guangdong  518057
+				CN
+
+F8-F4-64   (hex)		Rawe Electonic GmbH
+F8F464     (base 16)		Rawe Electonic GmbH
+				Bregenzer Str. 67-69
+				Weiler im Allgäu  Bavaria  88171
+				DE
+
+5C-51-88   (hex)		Motorola Mobility LLC, a Lenovo Company
+5C5188     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+EC-01-33   (hex)		TRINUS SYSTEMS INC.
+EC0133     (base 16)		TRINUS SYSTEMS INC.
+				UNITECH VENTURE TOWN SUITE 801
+				GOYANG-SI  GYEONGGI-DO  410-722
+				KR
+
+2C-C5-48   (hex)		IAdea Corporation
+2CC548     (base 16)		IAdea Corporation
+				3F, No.33, Lane 77, Xing-ai Road
+				Taipei  Taiwan  114
+				TW
+
+14-DD-A9   (hex)		ASUSTek COMPUTER INC.
+14DDA9     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+18-4F-32   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+184F32     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+DC-A3-AC   (hex)		RBcloudtech
+DCA3AC     (base 16)		RBcloudtech
+				5th Floor, Jiangnan Street NO.3900, Binjiang District, Hangzhou City.
+				Hangzhou  Zhejiang  310052
+				CN
+
+0C-E7-25   (hex)		Microsoft Corporation
+0CE725     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+58-F1-02   (hex)		BLU Products Inc.
+58F102     (base 16)		BLU Products Inc.
+				Tower 4, Excellence Century Center
+				Shenzhen  Guangdong  518000
+				CN
+
+B4-AE-2B   (hex)		Microsoft
+B4AE2B     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+94-9F-3E   (hex)		Sonos, Inc.
+949F3E     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+30-89-D3   (hex)		HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED
+3089D3     (base 16)		HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED
+				FLAT A-8 9/F DELYA INDUSTRIAL CENTRE 7 SHEK PAI TAU ROAD
+				Hong Kong    
+				CN
+
+5C-B3-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CB395     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-6C-AC   (hex)		Fortinet, Inc.
+906CAC     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale  California  94086
+				US
+
+3C-DA-2A   (hex)		zte corporation
+3CDA2A     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+84-2E-27   (hex)		Samsung Electronics Co.,Ltd
+842E27     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-AD-D1   (hex)		Bosung Electronics Co., Ltd.
+1CADD1     (base 16)		Bosung Electronics Co., Ltd.
+				74-12, Saemaeul-ro.
+				Gumi-si  Gyeongsangbuk-do  730-930
+				KR
+
+08-2C-B0   (hex)		Network Instruments
+082CB0     (base 16)		Network Instruments
+				10701 Red Circle Dr
+				Minnetonka  Minnesota  55343
+				US
+
+A0-13-CB   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+A013CB     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+D0-04-92   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D00492     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+14-32-D1   (hex)		Samsung Electronics Co.,Ltd
+1432D1     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+18-16-C9   (hex)		Samsung Electronics Co.,Ltd
+1816C9     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+00-FC-8D   (hex)		Hitron Technologies. Inc
+00FC8D     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+84-DF-19   (hex)		Chuango Security Technology Corporation
+84DF19     (base 16)		Chuango Security Technology Corporation
+				6-17, Overseas Students Pioneer Park,
+				Fuzhou  Fujian  350015
+				CN
+
+DC-15-DB   (hex)		Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.
+DC15DB     (base 16)		Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.
+				Room 821, block E, No.6 Taiping Street, Xicheng District
+				Beijing    100005
+				CN
+
+E0-DB-10   (hex)		Samsung Electronics Co.,Ltd
+E0DB10     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-61-72   (hex)		ZODIAC AEROSPACE SAS
+546172     (base 16)		ZODIAC AEROSPACE SAS
+				61 rue Pierre Curie
+				PLAISIR    78370
+				FR
+
+EC-60-E0   (hex)		AVI-ON LABS
+EC60E0     (base 16)		AVI-ON LABS
+				2585 LARKSPUR DR
+				PARK CITY  UT  84060
+				US
+
+B4-6D-35   (hex)		Dalian Seasky Automation Co;Ltd
+B46D35     (base 16)		Dalian Seasky Automation Co;Ltd
+				Room 408, DUT Science & Technology Park Building B, No.80 Software Park Road,          High-Tech Industrial Zone, Dalian, Liaoning, China
+				Dalian  Liao Ning  116023
+				CN
+
+3C-A3-1A   (hex)		Oilfind International LLC
+3CA31A     (base 16)		Oilfind International LLC
+				12651 Briar Forest Dr, Suite 151
+				Houston  Texas  77077
+				US
+
+30-F3-35   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+30F335     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-F2-E3   (hex)		Starcor Beijing Co.,Limited
+E8F2E3     (base 16)		Starcor Beijing Co.,Limited
+				NO.210 Block B, Building 2
+				Beijing  Berijing  100089
+				CN
+
+64-59-F8   (hex)		Vodafone Omnitel B.V.
+6459F8     (base 16)		Vodafone Omnitel B.V.
+				VIA JERVIS, 13 10015 IVREA (TO)
+				    
+				IT
+
+6C-44-18   (hex)		Zappware
+6C4418     (base 16)		Zappware
+				Ilgatlaan 19
+				Hasselt  Limburg  3500
+				BE
+
+A8-D4-09   (hex)		USA 111 Inc
+A8D409     (base 16)		USA 111 Inc
+				5885 Green Pointe Dr. Suite B Groveport, OH 43125
+				Groveport  Ohio  43125
+				US
+
+6C-45-98   (hex)		Antex Electronic Corp.
+6C4598     (base 16)		Antex Electronic Corp.
+				170 He Ping St.,
+				Tainan City    73443
+				TW
+
+68-A3-78   (hex)		FREEBOX SAS
+68A378     (base 16)		FREEBOX SAS
+				16 rue de la Ville l'Eveque
+				PARIS  IdF  75008
+				FR
+
+34-0A-22   (hex)		TOP-ACCESS ELECTRONICS CO LTD
+340A22     (base 16)		TOP-ACCESS ELECTRONICS CO LTD
+				No. 2 Building 
+				MingZhi Street  BaoAn District,ShenzheN  518131
+				CN
+
+E8-66-C4   (hex)		Diamanti
+E866C4     (base 16)		Diamanti
+				111 N. Market Street
+				San Jose  CA  95113
+				US
+
+D4-D7-A9   (hex)		Shanghai Kaixiang Info Tech LTD
+D4D7A9     (base 16)		Shanghai Kaixiang Info Tech LTD
+				A401, NO.509 Caobao Road, Shanghai, PRC
+				Shanghai  Shanghai  200233
+				CN
+
+34-3D-98   (hex)		JinQianMao Technology Co.,Ltd.
+343D98     (base 16)		JinQianMao Technology Co.,Ltd.
+				58#,Jiangbin Road,Taijiang District
+				Fuzhou  Fujian  350009
+				CN
+
+F4-47-13   (hex)		Leading Public Performance Co., Ltd.
+F44713     (base 16)		Leading Public Performance Co., Ltd.
+				137/77-78 Moo 1 Nanthanagarden Soi 12 Pathum-Rangsit Road Banklang Muang Pathumthani 12000 Thailand
+				Pathumthani  Pathumthani  12000
+				TH
+
+5C-A1-78   (hex)		TableTop Media (dba Ziosk)
+5CA178     (base 16)		TableTop Media (dba Ziosk)
+				12404 Park Central Drive
+				Dallas  TX  75251
+				US
+
+9C-BE-E0   (hex)		Biosoundlab Co., Ltd.
+9CBEE0     (base 16)		Biosoundlab Co., Ltd.
+				(Sangdaewon-dong, Sunil Technopia 907-908ho)
+				Jungwon-gu  Seongnam-si Gyeonggi-do,  462726
+				KR
+
+0C-41-3E   (hex)		Microsoft Corporation
+0C413E     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+D0-6F-4A   (hex)		TOPWELL INTERNATIONAL HOLDINGS LIMITED
+D06F4A     (base 16)		TOPWELL INTERNATIONAL HOLDINGS LIMITED
+				Unit 2506, 25/F, Prosperity Place,
+				Hong Kong  N/A  N/A
+				CN
+
+04-92-EE   (hex)		iway AG
+0492EE     (base 16)		iway AG
+				Badenerstrasse 569
+				Zurich  ZH  8048
+				CH
+
+80-74-59   (hex)		K's Co.,Ltd.
+807459     (base 16)		K's Co.,Ltd.
+				2864-16 Ryomitsuyanagi
+				Yonago  Tottori  683-0853
+				JP
+
+60-19-70   (hex)		HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.
+601970     (base 16)		HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.
+				Room -611, TianAn High-Tech Plaza II , Futian District, Shenzhen, China
+				Shenzhen  Guangdong  518040
+				CN
+
+A4-08-EA   (hex)		Murata Manufacturing Co., Ltd.
+A408EA     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+B8-78-79   (hex)		Roche Diagnostics GmbH
+B87879     (base 16)		Roche Diagnostics GmbH
+				Sandhofer Strasse 116
+				Mannheim  Baden-Wuerttemberg  68305
+				DE
+
+D0-83-D4   (hex)		Xtel Wireless ApS
+D083D4     (base 16)		Xtel Wireless ApS
+				Alfred Nobels vej 21E
+				Aalborg Oest  Nordjylland  9220
+				DK
+
+08-D3-4B   (hex)		Techman Electronics (Changshu) Co., Ltd.
+08D34B     (base 16)		Techman Electronics (Changshu) Co., Ltd.
+				No.66, Dalian Road, High-Tech Industrial Park
+				Changshu  Jiangsu Province  215500
+				CN
+
+78-A3-51   (hex)		SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
+78A351     (base 16)		SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
+				2F,Bldg. A,Kangmai Industrial Park,Renmin Rd
+				Shenzhen  Guangdong  518110
+				CN
+
+E4-69-5A   (hex)		Dictum Health, Inc.
+E4695A     (base 16)		Dictum Health, Inc.
+				255 3rd Street, Suite 102
+				Oakland  CA  94607
+				US
+
+7C-7A-53   (hex)		Phytrex Technology Corp.
+7C7A53     (base 16)		Phytrex Technology Corp.
+				8F-16, No.81, Shuili Rd.,
+				Hsinchu  Taiwan  30059
+				TW
+
+10-78-73   (hex)		Shenzhen Jinkeyi Communication Co., Ltd.
+107873     (base 16)		Shenzhen Jinkeyi Communication Co., Ltd.
+				No. 10 Shun King Road, Zhen Ping Xi Cun,
+				Shenzhen  Guangdong  518117
+				CN
+
+48-EE-0C   (hex)		D-Link International
+48EE0C     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+EC-3C-88   (hex)		MCNEX Co.,Ltd.
+EC3C88     (base 16)		MCNEX Co.,Ltd.
+				Hanshin IT Tower2 11F, Digital lo 9 gil
+				Geumcheon-Gu  Seoul  153-712
+				KR
+
+70-AD-54   (hex)		Malvern Instruments Ltd
+70AD54     (base 16)		Malvern Instruments Ltd
+				Grovewood Rd
+				Malvern  Worcestershire  WR14 1XZ
+				GB
+
+90-00-DB   (hex)		Samsung Electronics Co.,Ltd
+9000DB     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B4-EF-39   (hex)		Samsung Electronics Co.,Ltd
+B4EF39     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+F0-2A-23   (hex)		Creative Next Design
+F02A23     (base 16)		Creative Next Design
+				6-6-15, Kaminopporo 3-jo,
+				Sapporo-shi  Hokkaido  004-0033
+				JP
+
+58-47-04   (hex)		 Shenzhen Webridge Technology Co.,Ltd
+584704     (base 16)		 Shenzhen Webridge Technology Co.,Ltd
+				B2-22/F Chinese Technology Development Institute, High South Road, Nanshan District, Shenzhen, China
+				Shenzhen  Guangdong  518000
+				CN
+
+74-A0-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+74A063     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-E2-FD   (hex)		SKG Electric Group(Thailand) Co., Ltd.
+ECE2FD     (base 16)		SKG Electric Group(Thailand) Co., Ltd.
+				3F,The Second Building,Sanhe village , Longhua Rd, Baoan Dist., Shenzhen, China
+				Shenzhen  Guangdong  518301
+				CN
+
+14-8F-21   (hex)		Garmin International
+148F21     (base 16)		Garmin International
+				1200 E. 151st St
+				Olathe  KS  66062
+				US
+
+9C-68-5B   (hex)		Octonion SA
+9C685B     (base 16)		Octonion SA
+				EPFL Innovation Park, Bâtiment C
+				Lausanne  Vaud  1015
+				CH
+
+7C-53-4A   (hex)		Metamako
+7C534A     (base 16)		Metamako
+				Suite 207
+				Sydney  Other  2000
+				AU
+
+BC-B3-08   (hex)		HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED
+BCB308     (base 16)		HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED
+				Building D10-D11
+				PuDong District  Shanghai  201315
+				CN
+
+6C-2E-72   (hex)		B&B EXPORTING LIMITED
+6C2E72     (base 16)		B&B EXPORTING LIMITED
+				Bldg.#D,Xinhe Industrial Park
+				Guangzhou  Guangdong  510880
+				CN
+
+5C-CC-FF   (hex)		Techroutes Network Pvt Ltd
+5CCCFF     (base 16)		Techroutes Network Pvt Ltd
+				WW1-SF, Malibu Towne
+				Gurgaon  Haryana  122002
+				IN
+
+90-C3-5F   (hex)		Nanjing Jiahao Technology Co., Ltd.
+90C35F     (base 16)		Nanjing Jiahao Technology Co., Ltd.
+				Moling Industrial Park, Development Zone, Jiangning, Nanjing
+				Nanjing  Jiangsu  211111
+				CN
+
+C8-08-E9   (hex)		LG Electronics
+C808E9     (base 16)		LG Electronics
+				222 LG-ro, JINWI-MYEON
+				Pyeongtaek-si  Gyeonggi-do  451-713
+				KR
+
+18-3A-2D   (hex)		Samsung Electronics Co.,Ltd
+183A2D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+EC-74-BA   (hex)		Hirschmann Automation and Control GmbH
+EC74BA     (base 16)		Hirschmann Automation and Control GmbH
+				Stuttgarter Strasse 45-51
+				Neckartenzlingen  Baden-Württemberg  72654
+				DE
+
+FC-32-88   (hex)		CELOT Wireless Co., Ltd
+FC3288     (base 16)		CELOT Wireless Co., Ltd
+				4Fl.,NongHyup Bldg.,#1588-10 Gwanyang-Dong
+				Anyang City,  Gyeonggi-Do  431-727
+				KR
+
+D8-74-95   (hex)		zte corporation
+D87495     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+5C-3B-35   (hex)		Gehirn Inc.
+5C3B35     (base 16)		Gehirn Inc.
+				1-3-6 Kudan-kita
+				Chiyoda  Tokyo  102-0073
+				JP
+
+E4-FE-D9   (hex)		EDMI Europe Ltd
+E4FED9     (base 16)		EDMI Europe Ltd
+				The Grainger Suite, Dobson House, Regent  Centre
+				Newcastle upon Tyne  Newcastle upon Tyne  NE3 3PF
+				GB
+
+5C-F7-C3   (hex)		SYNTECH (HK) TECHNOLOGY LIMITED
+5CF7C3     (base 16)		SYNTECH (HK) TECHNOLOGY LIMITED
+				Unit No. 1, 12/F., Perfect Industrial Building ,
+				Kowloon, Hong Kong    999077
+				HK
+
+9C-E2-30   (hex)		JULONG CO,.LTD.
+9CE230     (base 16)		JULONG CO,.LTD.
+				308，QianShanZhong Road,TieDong District,AnShan
+				AnShan City  LiaoNing Province  114051
+				CN
+
+5C-41-E7   (hex)		Wiatec International Ltd.
+5C41E7     (base 16)		Wiatec International Ltd.
+				Unit 601-605,TaoJinDi Electronic Commercial
+				Shenzhen  GuangDong  518131
+				CN
+
+34-4C-A4   (hex)		amazipoint technology Ltd.
+344CA4     (base 16)		amazipoint technology Ltd.
+				1F,No. 14, Aly. 32, Ln. 133, Zhongyang Rd.,
+				 New Taipei City,    231
+				TW
+
+A8-F0-38   (hex)		SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD
+A8F038     (base 16)		SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD
+				Room A,Forth Floor,Building B,Hengmingzhu Industrial Park,Xixiang Forist and Fruit Bureau,Qianjin Road, Baoan District,Shenzhen city,Guangdong provice
+				    518126
+				CN
+
+AC-C7-3F   (hex)		VITSMO CO., LTD.
+ACC73F     (base 16)		VITSMO CO., LTD.
+				RM1418-1419, HansinIntervalley 24 Bldg.
+				  SEOUL  135-918
+				KR
+
+74-E2-77   (hex)		Vizmonet Pte Ltd
+74E277     (base 16)		Vizmonet Pte Ltd
+				32,Canberra drive,#05-28
+				    76431
+				SG
+
+14-89-3E   (hex)		VIXTEL TECHNOLOGIES LIMTED
+14893E     (base 16)		VIXTEL TECHNOLOGIES LIMTED
+				ROOM 1409, 14/F, BLOCK B, KAILEY CENTER
+				CHAI WAN    
+				HK
+
+BC-54-F9   (hex)		Drogoo Technology Co., Ltd.
+BC54F9     (base 16)		Drogoo Technology Co., Ltd.
+				Shenzhen Dayun software town 17 2 floor
+				Shenzhen  Guangdong  518172
+				CN
+
+78-FC-14   (hex)		Family Zone Cyber Safety Ltd 
+78FC14     (base 16)		Family Zone Cyber Safety Ltd 
+				175 Heytesbury Rd
+				Subiaco  WA  6008
+				AU
+
+38-09-A4   (hex)		Firefly Integrations
+3809A4     (base 16)		Firefly Integrations
+				1013 Elroy Dr
+				Middlebury  IN  46540
+				US
+
+BC-E7-67   (hex)		Quanzhou  TDX Electronics Co., Ltd
+BCE767     (base 16)		Quanzhou  TDX Electronics Co., Ltd
+				Hi-tech Park economic and tech development zone
+				Quanzhou  Fujian province  362005
+				CN
+
+FC-AF-AC   (hex)		Socionext Inc.
+FCAFAC     (base 16)		Socionext Inc.
+				19 Nishikujo-Kasuga-cho
+				Minaki-ku  Kyoto  601-8413
+				JP
+
+BC-4D-FB   (hex)		Hitron Technologies. Inc
+BC4DFB     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+2C-33-7A   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+2C337A     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+84-DD-B7   (hex)		Cilag GmbH International
+84DDB7     (base 16)		Cilag GmbH International
+				Gubelstrasse 34
+				Zug  _  CH-6300
+				CH
+
+08-EF-AB   (hex)		SAYME WIRELESS SENSOR NETWORK
+08EFAB     (base 16)		SAYME WIRELESS SENSOR NETWORK
+				Calle Albert Einstein 18, 4a
+				Santander  Cantabria  39011
+				ES
+
+70-76-FF   (hex)		KERLINK
+7076FF     (base 16)		KERLINK
+				1 rue Jacqueline AURIOL
+				THORIGNE FOUILLARD    35235
+				FR
+
+14-36-C6   (hex)		Lenovo Mobile Communication Technology Ltd.
+1436C6     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999, Qishan North 2nd Road, Information & Optoelectronics Park,
+				Xiamen  Fujian  361006
+				
+
+68-F7-28   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+68F728     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+38-2C-4A   (hex)		ASUSTek COMPUTER INC.
+382C4A     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+30-73-50   (hex)		Inpeco SA
+307350     (base 16)		Inpeco SA
+				Via San Gottardo 10
+				Lugano  Ticino  6900
+				CH
+
+DC-EC-06   (hex)		Heimi Network Technology Co., Ltd.
+DCEC06     (base 16)		Heimi Network Technology Co., Ltd.
+				Room 12B12, Block A2, Long-Term World Building,
+				Beijing  Beijing  100080
+				CN
+
+CC-BD-D3   (hex)		Ultimaker B.V.
+CCBDD3     (base 16)		Ultimaker B.V.
+				Burgemeester Rozeveld van de Venlaan 11
+				Geldermalsen  Gelderland  4191 PL
+				NL
+
+8C-E7-8C   (hex)		DK Networks
+8CE78C     (base 16)		DK Networks
+				20F-3, No.689, Zhong-Zheng Road, Zhong-He Dist.
+				New Taipei City  Taiwan  235
+				TW
+
+54-51-46   (hex)		AMG Systems Ltd.
+545146     (base 16)		AMG Systems Ltd.
+				3 The Omega Centre
+				Biggleswade  Bedfordshire  SG18 8QB
+				GB
+
+84-63-D6   (hex)		Microsoft Corporation
+8463D6     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+EC-13-B2   (hex)		Netonix
+EC13B2     (base 16)		Netonix
+				6 East Main St
+				Leola  PA  17540
+				US
+
+10-4E-07   (hex)		Shanghai Genvision Industries Co.,Ltd
+104E07     (base 16)		Shanghai Genvision Industries Co.,Ltd
+				2/F Building E,NO.55,Luo Jin Road,MinHang District,Shanghai
+				Shanghai  Shanghai  200237
+				CN
+
+04-9B-9C   (hex)		Eadingcore  Intelligent Technology Co., Ltd.
+049B9C     (base 16)		Eadingcore  Intelligent Technology Co., Ltd.
+				No. 169 Lijia city C District comprehensive 3 layer C3-10 mall，Five-One road
+				Fuzhou  Fujian  350000
+				CN
+
+84-26-90   (hex)		BEIJING THOUGHT SCIENCE CO.,LTD.
+842690     (base 16)		BEIJING THOUGHT SCIENCE CO.,LTD.
+				1-1102,Intermational Business Park,No.1 ShangDi Xinxi Rd,Haidian District,Beijing
+				beijing  beijing  100085
+				CN
+
+80-19-67   (hex)		Shanghai Reallytek Information Technology  Co.,Ltd
+801967     (base 16)		Shanghai Reallytek Information Technology  Co.,Ltd
+				906 Room,No.1 Building,No.3000 Longdong Avenue
+				  Shanghai  201203
+				CN
+
+2C-F7-F1   (hex)		Seeed Technology Inc.
+2CF7F1     (base 16)		Seeed Technology Inc.
+				 5th Floor, 8th Building, Shiling industrial Park, XiLi Town, NanShan dist. Shenzhen
+				ShenZhen  GuangDong  518055
+				CN
+
+3C-1E-13   (hex)		HANGZHOU SUNRISE TECHNOLOGY CO., LTD
+3C1E13     (base 16)		HANGZHOU SUNRISE TECHNOLOGY CO., LTD
+				No.9, LongTan Road, CangQian Town, YuHang District, Hangzhou, China
+				HangZhou  ZheJiang  311121
+				CN
+
+08-11-5E   (hex)		Bitel Co., Ltd.
+08115E     (base 16)		Bitel Co., Ltd.
+				9F Yohyun B/D, 242-29, Nonhyun-dong
+				Seoul  Gangnam-gu  135830
+				KR
+
+08-81-BC   (hex)		HongKong Ipro Technology Co., Limited
+0881BC     (base 16)		HongKong Ipro Technology Co., Limited
+				Flat/Rm A3 9/F Silvercorp Int Tower
+				  HONGKONG  999077
+				HK
+
+C0-98-79   (hex)		Acer Inc.
+C09879     (base 16)		Acer Inc.
+				8F, 88, Sec.1, Xintai 5th Rd.
+				New Taipei City  N/A  221
+				TW
+
+B8-4F-D5   (hex)		Microsoft Corporation
+B84FD5     (base 16)		Microsoft Corporation
+				1 Microsoft Way
+				Redmond  Washington  98052
+				FI
+
+D8-4A-87   (hex)		OI ELECTRIC CO.,LTD
+D84A87     (base 16)		OI ELECTRIC CO.,LTD
+				7-3-16 KIKUNA
+				YOKOHAMA  KANAGAWA-KEN  222-0011
+				JP
+
+F0-3D-29   (hex)		Actility
+F03D29     (base 16)		Actility
+				110 rue des Poissonniers
+				Paris  Paris  75018
+				FR
+
+88-70-8C   (hex)		Lenovo Mobile Communication Technology Ltd.
+88708C     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999, Qishan North 2nd Road, Information & Optoelectronics Park,
+				Xiamen  Fujian  361006
+				
+
+50-14-B5   (hex)		Richfit Information Technology Co., Ltd
+5014B5     (base 16)		Richfit Information Technology Co., Ltd
+				Room 1501, Gehua Tower, Suite N0.1, Qinglong lane, Dongcheng District
+				Beijing  Beijing  100007
+				CN
+
+DC-DA-4F   (hex)		GETCK TECHNOLOGY,  INC
+DCDA4F     (base 16)		GETCK TECHNOLOGY,  INC
+				Room 508, NO .48 ZhengYi road
+				  SHANGHAI  200082
+				CN
+
+10-12-18   (hex)		Korins Inc.
+101218     (base 16)		Korins Inc.
+				Rm. 608, Suntechcity Bldg.
+				Seongnam  Gyeonggi  462-725
+				KR
+
+34-28-F0   (hex)		ATN International Limited
+3428F0     (base 16)		ATN International Limited
+				4210, Office Tower, Convention Plaza
+				Hong Kong  Hong Kong  00000
+				HK
+
+CC-10-A3   (hex)		Beijing Nan Bao Technology Co., Ltd.
+CC10A3     (base 16)		Beijing Nan Bao Technology Co., Ltd.
+				Room 8476，Floor 8,Building 3
+				Shijingshan District  Beijing  100041
+				CN
+
+5C-AA-FD   (hex)		Sonos, Inc.
+5CAAFD     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara  CA  93101
+				US
+
+14-ED-E4   (hex)		Kaiam Corporation
+14EDE4     (base 16)		Kaiam Corporation
+				39677 Eureka Drive
+				Newark  California  94560
+				US
+
+D0-12-42   (hex)		BIOS Corporation
+D01242     (base 16)		BIOS Corporation
+				2-43-15 Tomigaya
+				Shibuya-ku  TOKYO  151-0063
+				JP
+
+60-36-96   (hex)		The Sapling Company
+603696     (base 16)		The Sapling Company
+				1633 Republic Rd
+				Huntingdon Valley  PA  19006
+				US
+
+54-FF-CF   (hex)		Mopria Alliance
+54FFCF     (base 16)		Mopria Alliance
+				2400 Camino Ramon, Ste #375
+				San Ramon  CA  94583
+				US
+
+F4-F2-6D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+F4F26D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+40-4E-EB   (hex)		Higher Way Electronic Co., Ltd.
+404EEB     (base 16)		Higher Way Electronic Co., Ltd.
+				No.15 Jingke E. Rd., Nantun District
+				  Taichung  408
+				TW
+
+C4-56-FE   (hex)		Lava International Ltd.
+C456FE     (base 16)		Lava International Ltd.
+				Room 705, Block A, HengYue Building
+				  Shanghai  518054
+				CN
+
+AC-B7-4F   (hex)		METEL s.r.o.
+ACB74F     (base 16)		METEL s.r.o.
+				Zizkuv Kopec 617
+				Ceska Skalice  NA  55203
+				CZ
+
+C0-EE-FB   (hex)		OnePlus Tech (Shenzhen) Ltd
+C0EEFB     (base 16)		OnePlus Tech (Shenzhen) Ltd
+				18F Tairan Building C, Tairan 8th Road  Chegongmiao, Futian
+				Shenzhen  Guangdong  518040
+				CN
+
+30-42-25   (hex)		BURG-WÄCHTER KG
+304225     (base 16)		BURG-WÄCHTER KG
+				Altenhofer Weg 15
+				Wetter  NRW  58300
+				DE
+
+FC-DB-B3   (hex)		Murata Manufacturing Co., Ltd.
+FCDBB3     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+CC-F5-38   (hex)		3isysnetworks
+CCF538     (base 16)		3isysnetworks
+				11F-2 No1247 , Jung Jeng RD ,
+				Taipei  Taiwan  0000
+				TW
+
+B8-BD-79   (hex)		TrendPoint Systems
+B8BD79     (base 16)		TrendPoint Systems
+				1595 East 6th Street
+				Corona  CA  92879
+				US
+
+74-F4-13   (hex)		Maxwell Forest
+74F413     (base 16)		Maxwell Forest
+				Level 2, 51 Murray Street
+				Pyrmont  NSW  2009
+				AU
+
+A0-06-27   (hex)		NEXPA System
+A00627     (base 16)		NEXPA System
+				#105, YBS bldg,227-1 Yongdap-Dong
+				  Seoul  ASI/KR/KS013/SEOUL
+				KR
+
+30-33-35   (hex)		Boosty
+303335     (base 16)		Boosty
+				40 Princes Street
+				Ipswich  Suffolk  IP11RJ
+				GB
+
+4C-9E-FF   (hex)		Zyxel Communications Corporation
+4C9EFF     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+BC-9C-C5   (hex)		Beijing Huafei Technology Co., Ltd.
+BC9CC5     (base 16)		Beijing Huafei Technology Co., Ltd.
+				2 floor, Research building, Guanghua Pioneer Park, No.18, Anningzhuang East Rd, Haidian District, Beijing, China.
+				Beijing  Beijing  100085
+				CN
+
+5C-B8-CB   (hex)		Allis Communications
+5CB8CB     (base 16)		Allis Communications
+				10F.-3,No.31-1, Lane 169 Kangning St.,
+				New Taipei City  New Taipei City  221
+				TW
+
+34-F0-CA   (hex)		Shenzhen Linghangyuan Digital Technology Co.,Ltd.
+34F0CA     (base 16)		Shenzhen Linghangyuan Digital Technology Co.,Ltd.
+				Building R, Linghangyuan Industrial Park, No. 163 Banxuegang Road, Longgang Distrial, Shenzhen, China
+				Shenzhen  Guangdong  518129
+				CN
+
+70-72-0D   (hex)		Lenovo Mobile Communication Technology Ltd.
+70720D     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999, Qishan North 2nd Road, Information & Optoelectronics Park, Torch Hi-tech Industry Development Zone, Xiamen, P.R.China
+				Xiamen  Fujian  361000
+				CN
+
+3C-CD-5A   (hex)		Technische Alternative GmbH
+3CCD5A     (base 16)		Technische Alternative GmbH
+				Langestr. 124
+				Amaliendorf  Lower Austria  A-3872
+				AT
+
+FC-AA-14   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+FCAA14     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+				Pin-Jen  Taoyuan  324
+				TW
+
+94-D6-0E   (hex)		shenzhen yunmao information technologies co., ltd
+94D60E     (base 16)		shenzhen yunmao information technologies co., ltd
+				H4-3A, Twelve Oaks Manor, bulong road
+				shenzhen  guanggong  518127
+				CN
+
+50-67-87   (hex)		Planet Networks
+506787     (base 16)		Planet Networks
+				1 Ivy Crest Ln
+				Rockaway  NJ  07866
+				US
+
+8C-BF-9D   (hex)		Shanghai Xinyou Information Technology Ltd. Co.
+8CBF9D     (base 16)		Shanghai Xinyou Information Technology Ltd. Co.
+				905，418 Guiqing Road, Xuhui District,
+				Shanghai  Shanghai  200233
+				CN
+
+9C-AD-97   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+9CAD97     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+				Building D21,No.1, East Zone 1st Road
+				Chongqing  Chongqing  401332
+				CN
+
+88-29-50   (hex)		Netmoon Technology Co., Ltd
+882950     (base 16)		Netmoon Technology Co., Ltd
+				2nd Floor, Building No.1, NO.319, Qingpi Avenue
+				Wenjiang District  Chengdu  611130
+				CN
+
+7C-E5-24   (hex)		Quirky, Inc.
+7CE524     (base 16)		Quirky, Inc.
+				606 W 28th Street
+				New York  NY  10001
+				US
+
+F4-D2-61   (hex)		SEMOCON Co., Ltd
+F4D261     (base 16)		SEMOCON Co., Ltd
+				B-19F, Gunpo IT Valley, Dangjeong-dong, 17, Gosan-ro 148beon-gil,
+				Gunpo-si  Gyeonggi-do  435-833
+				KR
+
+48-D8-55   (hex)		Telvent
+48D855     (base 16)		Telvent
+				P.I. Alcobendas c/ Valgrande. 6
+				Alcobendas  Madrid  28108
+				ES
+
+08-F7-28   (hex)		GLOBO Multimedia Sp. z o.o. Sp.k.
+08F728     (base 16)		GLOBO Multimedia Sp. z o.o. Sp.k.
+				Gryfinska 104
+				Szczecin  Zachodniopomorskie  70-772
+				PL
+
+20-6E-9C   (hex)		Samsung Electronics Co.,Ltd
+206E9C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+6C-2F-2C   (hex)		Samsung Electronics Co.,Ltd
+6C2F2C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+B0-09-D3   (hex)		Avizia
+B009D3     (base 16)		Avizia
+				12018 Sunrise Valley Drive
+				Reston  VA  20191
+				US
+
+60-C1-CB   (hex)		Fujian Great Power PLC Equipment Co.,Ltd
+60C1CB     (base 16)		Fujian Great Power PLC Equipment Co.,Ltd
+				6/F.Bld.34.Zone C.Software Park
+				Fuzhou  Fujian,China  350003
+				CN
+
+BC-25-F0   (hex)		3D Display Technologies Co., Ltd.
+BC25F0     (base 16)		3D Display Technologies Co., Ltd.
+				4F., No.542-17, Zhongzheng Rd
+				New Taipei City    242
+				TW
+
+C0-3D-46   (hex)		Shanghai Sango Network Technology Co.,Ltd
+C03D46     (base 16)		Shanghai Sango Network Technology Co.,Ltd
+				No 666 Zhangheng Road
+				Pudong  Shanghai  210203
+				CN
+
+64-EA-C5   (hex)		SiboTech Automation Co., Ltd.
+64EAC5     (base 16)		SiboTech Automation Co., Ltd.
+				5th Floor, Bld 3
+				Shanghai  Shanghai  201612
+				CN
+
+30-F7-D7   (hex)		Thread Technology Co., Ltd
+30F7D7     (base 16)		Thread Technology Co., Ltd
+				4F, A Block, CYG, No.2,Mid GaoXin
+				Shenzhen  GuangDong  518055
+				CN
+
+18-22-7E   (hex)		Samsung Electronics Co.,Ltd
+18227E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+30-C7-AE   (hex)		Samsung Electronics Co.,Ltd
+30C7AE     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+74-DA-38   (hex)		Edimax Technology Co. Ltd.
+74DA38     (base 16)		Edimax Technology Co. Ltd.
+				No. 278, Xinhu 1st Road
+				Taipei City  Neihu Dist  248
+				TW
+
+E4-F4-C6   (hex)		NETGEAR
+E4F4C6     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+CC-A0-E5   (hex)		DZG Metering GmbH
+CCA0E5     (base 16)		DZG Metering GmbH
+				Heidelberger Str. 32
+				Oranienburg  Brandenburg  16515
+				DE
+
+1C-1C-FD   (hex)		Dalian Hi-Think Computer Technology, Corp
+1C1CFD     (base 16)		Dalian Hi-Think Computer Technology, Corp
+				Hi-Think Software Building,No.6 Hi-Tech Street, Qixianling Industrial Base, Hi-Tech Zone, Dalian, China
+				Dalian  LiaoNing  116023
+				CN
+
+90-AE-1B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+90AE1B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+60-E3-27   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+60E327     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+48-D1-8E   (hex)		Metis Communication Co.,Ltd
+48D18E     (base 16)		Metis Communication Co.,Ltd
+				#102-805 Digital Empire2
+				Suwon-Si  GyeongGi-Do  443-734
+				KR
+
+F8-66-01   (hex)		Suzhou Chi-tek information technology Co., Ltd
+F86601     (base 16)		Suzhou Chi-tek information technology Co., Ltd
+				Rm204C、204D, Building A7,
+				 SuZhou  Jiangsu  215123
+				CN
+
+14-56-45   (hex)		Savitech Corp.
+145645     (base 16)		Savitech Corp.
+				3F, No.309, Guangming 1st Rd.,
+				Zhubei  Hsinchu  30259
+				TW
+
+70-62-B8   (hex)		D-Link International
+7062B8     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy, Singapore
+				Singapore  Singapore  609917
+				SG
+
+AC-A9-19   (hex)		TrekStor GmbH
+ACA919     (base 16)		TrekStor GmbH
+				Kastanienallee 8-10
+				Lorsch  Hessen  64653
+				DE
+
+B0-25-AA   (hex)		Private
+B025AA     (base 16)		Private
+
+D4-B4-3E   (hex)		Messcomp Datentechnik GmbH
+D4B43E     (base 16)		Messcomp Datentechnik GmbH
+				Neudecker Str. 11
+				Wasserburg  Bayern  83512
+				DE
+
+94-C0-14   (hex)		Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek
+94C014     (base 16)		Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek
+				ul. Gdynska 32
+				PL9482565081  Mazowieckie  26-600
+				PL
+
+9C-FB-F1   (hex)		MESOMATIC GmbH & Co.KG
+9CFBF1     (base 16)		MESOMATIC GmbH & Co.KG
+				Siemensstr. 36
+				Kernen i.R.    71394
+				DE
+
+10-27-BE   (hex)		TVIP
+1027BE     (base 16)		TVIP
+				190000 ul. Decabristov, h.6 А, of.10-Н
+				  Saint-Petersburg  197227
+				RU
+
+20-87-AC   (hex)		AES motomation
+2087AC     (base 16)		AES motomation
+				48501 Warm Springs Blvd.
+				Fremont  CA  94539
+				US
+
+70-93-83   (hex)		Intelligent Optical Network High Tech CO.,LTD.
+709383     (base 16)		Intelligent Optical Network High Tech CO.,LTD.
+				Room 205,Building 11,Jia
+				Changping District  Beijing  102200
+				CN
+
+80-D4-33   (hex)		LzLabs GmbH
+80D433     (base 16)		LzLabs GmbH
+				Alte Winterthurerstrasse 14B
+				Wallisellen  Zurich  8304
+				CH
+
+B0-DA-00   (hex)		CERA ELECTRONIQUE
+B0DA00     (base 16)		CERA ELECTRONIQUE
+				PARC D&#39;ACTIVITES
+				VAL DE REUIL  HAUTE NORMANDIE  27100
+				FR
+
+1C-AB-01   (hex)		Innovolt
+1CAB01     (base 16)		Innovolt
+				14 Piedmont Center
+				Atlanta  GA  30305
+				US
+
+D8-B6-D6   (hex)		Blu Tether Limited
+D8B6D6     (base 16)		Blu Tether Limited
+				7600 Leesburg Pike
+				Falls Church  VA  22043
+				US
+
+6C-2C-06   (hex)		OOO NPP Systemotechnika-NN
+6C2C06     (base 16)		OOO NPP Systemotechnika-NN
+				Nartova lane, 2v
+				Nizhny Novgorod  Nizhegorodskaya oblast  603057
+				RU
+
+C4-91-3A   (hex)		Shenzhen Sanland Electronic Co., ltd.
+C4913A     (base 16)		Shenzhen Sanland Electronic Co., ltd.
+				3 floor,Block D, Glory Technology Industrial Park,
+				ShenZhen  Guangdong  518116
+				CN
+
+94-51-BF   (hex)		Hyundai ESG
+9451BF     (base 16)		Hyundai ESG
+				Gangnam-gu
+				Seoul  KOREA, REPUBLIC OF  135-845
+				KR
+
+F0-15-A0   (hex)		KyungDong One Co., Ltd.
+F015A0     (base 16)		KyungDong One Co., Ltd.
+				205-38, Gasan digital 1-ro,
+				  Seoul  153-803
+				KR
+
+C4-4E-1F   (hex)		BlueN
+C44E1F     (base 16)		BlueN
+				121-122 3F
+				Daegu  Korea  700-809
+				KR
+
+B0-86-9E   (hex)		Chloride S.r.L
+B0869E     (base 16)		Chloride S.r.L
+				Via Fornace ,30
+				CastelGuelfo (Bologna)  Italy  40023
+				IT
+
+D0-57-A1   (hex)		Werma Signaltechnik GmbH & Co. KG
+D057A1     (base 16)		Werma Signaltechnik GmbH & Co. KG
+				Duerbheimer Strasse
+				Rietheim-Weilheim    78604
+				DE
+
+B4-B5-42   (hex)		Hubbell Power Systems, Inc.
+B4B542     (base 16)		Hubbell Power Systems, Inc.
+				8100 Churchill Ave
+				Leeds  AL  35094
+				US
+
+54-CD-EE   (hex)		ShenZhen Apexis Electronic Co.,Ltd
+54CDEE     (base 16)		ShenZhen Apexis Electronic Co.,Ltd
+				12th floor,Keji BuildiHigng
+				 ShenZhen   GuangDong   518057
+				CN
+
+88-E8-F8   (hex)		YONG TAI ELECTRONIC (DONGGUAN) LTD.
+88E8F8     (base 16)		YONG TAI ELECTRONIC (DONGGUAN) LTD.
+				Yuan Shan Bei Managed Region
+				Dong Guan  Guang Dong  523583
+				CN
+
+90-98-64   (hex)		Impex-Sat GmbH&amp;Co KG
+909864     (base 16)		Impex-Sat GmbH&amp;Co KG
+				Beim Giesshaus 7
+				Glueckstadt    25348
+				DE
+
+DC-E5-78   (hex)		Experimental Factory of Scientific Engineering and Special Design Department
+DCE578     (base 16)		Experimental Factory of Scientific Engineering and Special Design Department
+				9, Academician Semenov prospect
+				Chernogolovka  Moscow region  142432
+				RU
+
+D8-65-95   (hex)		Toy's Myth Inc.
+D86595     (base 16)		Toy's Myth Inc.
+				304, Yongsan-gu Changup-Jiwon center
+				  Seoul  140-240
+				KR
+
+F4-B5-2F   (hex)		Juniper Networks
+F4B52F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C0-F7-9D   (hex)		Powercode
+C0F79D     (base 16)		Powercode
+				300 Industrial Dr
+				Random Lake  Wisconsin  53075
+				US
+
+C4-C9-19   (hex)		Energy Imports Ltd
+C4C919     (base 16)		Energy Imports Ltd
+				306a Broadway Ave
+				Palmerston North  Manawatu  4414
+				NZ
+
+38-F0-98   (hex)		Vapor Stone Rail Systems
+38F098     (base 16)		Vapor Stone Rail Systems
+				10000 Cavendish
+				Saint-Laurent  Quebec  H4M2V1
+				CA
+
+64-E8-92   (hex)		Morio Denki Co., Ltd.
+64E892     (base 16)		Morio Denki Co., Ltd.
+				2, Nadooka
+				Ryugasaki  Ibaraki  301-0845
+				JP
+
+D8-DD-5F   (hex)		BALMUDA Inc.
+D8DD5F     (base 16)		BALMUDA Inc.
+				5-1-21 Kyonancho
+				Musashino  Tokyo  180-0023
+				JP
+
+D8-61-94   (hex)		Objetivos y Sevicios de Valor Añadido
+D86194     (base 16)		Objetivos y Sevicios de Valor Añadido
+				Calle Monte Esquinza 28, 1ºD
+				Madrid    28010
+				ES
+
+E8-FC-60   (hex)		ELCOM Innovations Private Limited
+E8FC60     (base 16)		ELCOM Innovations Private Limited
+				9TH FLOOR, MERIDIEN COMMERCIAL TOWER
+				New Delhi    110001
+				US
+
+58-9C-FC   (hex)		FreeBSD Foundation
+589CFC     (base 16)		FreeBSD Foundation
+				P.O. Box 20247
+				Boulder  CO   80308-3247
+				US
+
+70-2C-1F   (hex)		Wisol
+702C1F     (base 16)		Wisol
+				377-3, Gajang-dong, Osan-si
+				    447-210
+				KR
+
+C8-D4-29   (hex)		Muehlbauer AG
+C8D429     (base 16)		Muehlbauer AG
+				Josef-Mühlbauer-Platz 1
+				Roding  Bavaria  93426
+				DE
+
+F8-5C-45   (hex)		IC Nexus Co. Ltd.
+F85C45     (base 16)		IC Nexus Co. Ltd.
+				6F-1, No.3-2 Park Street
+				Taipei    115
+				TW
+
+AC-E0-69   (hex)		ISAAC Instruments
+ACE069     (base 16)		ISAAC Instruments
+				240 Frechette
+				Chambly  Quebec  J3L2Z5
+				CA
+
+30-B5-C2   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+30B5C2     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+E0-7F-53   (hex)		TECHBOARD SRL
+E07F53     (base 16)		TECHBOARD SRL
+				Via Della Scienza, 50
+				Modena    41122
+				IT
+
+48-FE-EA   (hex)		HOMA B.V.
+48FEEA     (base 16)		HOMA B.V.
+				P.O. Box 545
+				Enschede    7500 AM
+				NL
+
+E8-EA-6A   (hex)		StarTech.com
+E8EA6A     (base 16)		StarTech.com
+				45 Artisans Cres
+				London  Ontario  N5V5E9
+				CA
+
+04-DB-8A   (hex)		Suntech International Ltd.
+04DB8A     (base 16)		Suntech International Ltd.
+				Room 605, IT Mirae Tower
+				  Seoul  153-760
+				KR
+
+90-DF-B7   (hex)		s.m.s smart microwave sensors GmbH
+90DFB7     (base 16)		s.m.s smart microwave sensors GmbH
+				In den Waashainen 1
+				Braunschweig  NI  38108
+				DE
+
+08-57-00   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+085700     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+FC-27-A2   (hex)		TRANS ELECTRIC CO., LTD.
+FC27A2     (base 16)		TRANS ELECTRIC CO., LTD.
+				771,Sec.2 Chungsan Rd,Huatang
+				Changhua  Taiwan  503
+				TW
+
+FC-BB-A1   (hex)		Shenzhen Minicreate Technology Co.,Ltd
+FCBBA1     (base 16)		Shenzhen Minicreate Technology Co.,Ltd
+				5/F.,5th,Building,Animation Park,Yuehai Road
+				Shenzhen  Guangdong  518066
+				CN
+
+F0-8A-28   (hex)		JIANGSU HENGSION ELECTRONIC S and T CO.,LTD
+F08A28     (base 16)		JIANGSU HENGSION ELECTRONIC S and T CO.,LTD
+				4F,Building 3
+				ChangZhou  Jiangsu  213125
+				CN
+
+28-BB-59   (hex)		RNET Technologies, Inc.
+28BB59     (base 16)		RNET Technologies, Inc.
+				240. W. Elmwood Dr.
+				Dayton  OHIO  45459-4248
+				US
+
+24-26-42   (hex)		SHARP Corporation.
+242642     (base 16)		SHARP Corporation.
+				22-22,Abeno-ku
+				Osaka-City  Osaka-Prefecture  545-8522
+				JP
+
+34-DE-34   (hex)		zte corporation
+34DE34     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+FC-16-07   (hex)		Taian Technology(Wuxi) Co.,Ltd.
+FC1607     (base 16)		Taian Technology(Wuxi) Co.,Ltd.
+				Gaolang East Road No.29
+				Wuxi  Jiangsu  214000
+				CN
+
+AC-02-CA   (hex)		HI Solutions, Inc.
+AC02CA     (base 16)		HI Solutions, Inc.
+				4105 Royal Drive
+				Kennesaw  GA  30144
+				US
+
+74-6F-3D   (hex)		Contec GmbH
+746F3D     (base 16)		Contec GmbH
+				Oberahrer Straße 9
+				Sainerholz  RP  56244
+				DE
+
+4C-0D-EE   (hex)		JABIL CIRCUIT (SHANGHAI) LTD.
+4C0DEE     (base 16)		JABIL CIRCUIT (SHANGHAI) LTD.
+				FL5-UNIT A2 NO 1528 GUMEI ROAD
+				  SHANGHAI  200233
+				CN
+
+D0-63-4D   (hex)		Meiko Maschinenbau GmbH &amp; Co. KG
+D0634D     (base 16)		Meiko Maschinenbau GmbH &amp; Co. KG
+				Englerstraße 3
+				Offenburg    77652
+				DE
+
+00-8B-43   (hex)		RFTECH
+008B43     (base 16)		RFTECH
+				Cheoin-gu
+				Yongin  Gyeonggi  449-871
+				KR
+
+8C-41-F2   (hex)		RDA Technologies Ltd.
+8C41F2     (base 16)		RDA Technologies Ltd.
+				Suite 2203, CC Wu Building,
+				WanChai  Hong Kong  00000
+				HK
+
+E0-36-E3   (hex)		Stage One International Co., Ltd.
+E036E3     (base 16)		Stage One International Co., Ltd.
+				Fl. 5., No. 10., Lane 321, Yangguang St.,
+				Taipei City    11491
+				TW
+
+DC-05-2F   (hex)		National Products Inc.
+DC052F     (base 16)		National Products Inc.
+				8410 Dallas Ave S.
+				Seattle  WA  98108
+				US
+
+D0-BD-01   (hex)		DS International
+D0BD01     (base 16)		DS International
+				806ho, ACE HITECH21 B/D
+				Busan  Busan  612-020
+				KR
+
+8C-DE-99   (hex)		Comlab Inc.
+8CDE99     (base 16)		Comlab Inc.
+				2300 Leon-Harmel, suite 220
+				Quebec  Quebec  G1N 4L2
+				CA
+
+4C-E1-BB   (hex)		Zhuhai HiFocus Technology Co., Ltd.
+4CE1BB     (base 16)		Zhuhai HiFocus Technology Co., Ltd.
+				The second floor of the friend industrial park,
+				zhuhai  guangdong  519080
+				US
+
+24-A8-7D   (hex)		Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.
+24A87D     (base 16)		Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.
+				101 Moo 2 Teparak Road ,
+				Bangsaothong  Samutprakarn  10540
+				TH
+
+A4-09-CB   (hex)		Alfred Kaercher GmbH &amp; Co KG
+A409CB     (base 16)		Alfred Kaercher GmbH &amp; Co KG
+				Alfred Kaercher Gmbh &amp; Co KG
+				Winnenden  Baden-Wuerttemberg  71364
+				DE
+
+8C-56-9D   (hex)		Imaging Solutions Group
+8C569D     (base 16)		Imaging Solutions Group
+				1387 Fairport Rd
+				Fairport  NY  14450
+				US
+
+40-B6-B1   (hex)		SUNGSAM CO,.Ltd
+40B6B1     (base 16)		SUNGSAM CO,.Ltd
+				SUNGSAM Bldg, 7-1, BAnga-ro 23beon-gil, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-829
+				KR
+
+84-FE-9E   (hex)		RTC Industries, Inc.
+84FE9E     (base 16)		RTC Industries, Inc.
+				2800 Golf Road
+				Rolling Meadows  IL  60008
+				US
+
+FC-4B-1C   (hex)		INTERSENSOR S.R.L.
+FC4B1C     (base 16)		INTERSENSOR S.R.L.
+				101 Bd. Iuliu Maniu str., Bl. A2, Sc. 2, #47
+				  Bucharest  061094
+				RO
+
+40-30-67   (hex)		Conlog (Pty) Ltd
+403067     (base 16)		Conlog (Pty) Ltd
+				270 Felix Dlamini Road
+				Durban  Kwa-zulu Natal  4000
+				ZA
+
+E8-61-83   (hex)		Black Diamond Advanced Technology, LLC
+E86183     (base 16)		Black Diamond Advanced Technology, LLC
+				7450 S. Priest Drive
+				Tempe  AZ  85283
+				US
+
+38-C9-A9   (hex)		SMART High Reliability Solutions, Inc.
+38C9A9     (base 16)		SMART High Reliability Solutions, Inc.
+				1325 N Fiesta Blvd., #101
+				Gilbert  AZ  85233
+				US
+
+50-1A-C5   (hex)		Microsoft
+501AC5     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+B0-98-9F   (hex)		LG CNS
+B0989F     (base 16)		LG CNS
+				53-94 Jinwisandan-ro, Jinwuy-Myun
+				Pyungtaek-City  Kyunggi-Do  451-862
+				KR
+
+C0-F1-C4   (hex)		Pacidal Corporation Ltd.
+C0F1C4     (base 16)		Pacidal Corporation Ltd.
+				3F., No. 11, Aly 3, Ln. 123, Sec. 3 Ren'ai Rd.
+				Taipei City    106
+				TW
+
+60-03-47   (hex)		Billion Electric Co. Ltd.
+600347     (base 16)		Billion Electric Co. Ltd.
+				8F., No.192, Sec. 2, Zhongxing Rd.,
+				New Taipei City,    231
+				TW
+
+F0-D3-A7   (hex)		CobaltRay Co., Ltd
+F0D3A7     (base 16)		CobaltRay Co., Ltd
+				Room 409,Humanteco Building,#281-16
+				Seoul    133120
+				KR
+
+38-A5-3C   (hex)		COMECER Netherlands
+38A53C     (base 16)		COMECER Netherlands
+				Madame Curieweg 1
+				Joure  Friesland  8500 AC
+				NL
+
+5C-FF-FF   (hex)		Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd
+5CFFFF     (base 16)		Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd
+				3/F, B5 Building, Xinfu Industrial Park, Heping Village
+				Shenzhen, Guangdong 518101    
+				US
+
+08-52-40   (hex)		EbV Elektronikbau- und Vertriebs GmbH
+085240     (base 16)		EbV Elektronikbau- und Vertriebs GmbH
+				Heisterner Weg 8 - 12
+				Burbach  Nordrhein-Westfalen  57299
+				DE
+
+B8-C1-A2   (hex)		Dragon Path Technologies Co., Limited
+B8C1A2     (base 16)		Dragon Path Technologies Co., Limited
+				12/F., San Toi Building,
+				Central  Hong Kong  
+				HK
+
+80-F2-5E   (hex)		Kyynel
+80F25E     (base 16)		Kyynel
+				Pirttikuja 3
+				  Oulu  90450
+				FI
+
+68-69-2E   (hex)		Zycoo Co.,Ltd
+68692E     (base 16)		Zycoo Co.,Ltd
+				F7,B7,Tianfu Software park
+				Chengdu  Sichuan  610000
+				CN
+
+D4-68-67   (hex)		Neoventus Design Group
+D46867     (base 16)		Neoventus Design Group
+				2350 Commonwealth Dr, Suite E
+				Charlottesville  VA  22901
+				US
+
+2C-18-AE   (hex)		Trend Electronics Co., Ltd.
+2C18AE     (base 16)		Trend Electronics Co., Ltd.
+				4F-3, No 17, Lane 77, Sec. 2
+				Taipei  Taiwan  10446
+				TW
+
+F8-1C-E5   (hex)		Telefonbau Behnke GmbH
+F81CE5     (base 16)		Telefonbau Behnke GmbH
+				Robert-Jungk-Str. 3
+				Kirkel  Saarland  66459
+				DE
+
+88-91-66   (hex)		Viewcooper Corp.
+889166     (base 16)		Viewcooper Corp.
+				Room 1061, A,Seven Block, No.128 Huayuan Rd
+				SHANGHAI    200083
+				CN
+
+10-33-78   (hex)		FLECTRON Co., LTD
+103378     (base 16)		FLECTRON Co., LTD
+				A-625, Sigma2, Tancheonsang-ro 164
+				Seongnam-si  Gyeonggi-do  463-741
+				KR
+
+14-ED-A5   (hex)		Wächter GmbH Sicherheitssysteme
+14EDA5     (base 16)		Wächter GmbH Sicherheitssysteme
+				Alte Ricklinger Str. 3
+				Hannover  Garbsen  30823
+				DE
+
+50-C0-06   (hex)		Carmanah Signs
+50C006     (base 16)		Carmanah Signs
+				#5 6025 12 Street SE
+				Calgary  Alberta  T2H2K1
+				CA
+
+04-CB-1D   (hex)		Traka plc
+04CB1D     (base 16)		Traka plc
+				30 Stilebrook Road
+				Bucks  Buckinghamshire  MK46 5EA
+				GB
+
+A4-E9-A3   (hex)		Honest Technology Co., Ltd
+A4E9A3     (base 16)		Honest Technology Co., Ltd
+				5F, KyungDong Bldg. 906-5,
+				  Daejeon  305-330
+				KR
+
+A0-E5-E9   (hex)		enimai Inc
+A0E5E9     (base 16)		enimai Inc
+				701 Villa St
+				Mountain View  California  94041
+				US
+
+9C-21-6A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+9C216A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+F8-62-AA   (hex)		xn systems
+F862AA     (base 16)		xn systems
+				#917, Worldmerdian 2nd
+				  Seoul  153759
+				KR
+
+10-7B-EF   (hex)		Zyxel Communications Corporation
+107BEF     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+B4-62-AD   (hex)		Elysia Germany GmbH
+B462AD     (base 16)		Elysia Germany GmbH
+				Benzstr.4
+				Straubenhardt  Baden-Wuerttemberg  75334
+				DE
+
+34-5C-40   (hex)		Cargt Holdings LLC
+345C40     (base 16)		Cargt Holdings LLC
+				8820 Hillside Dr
+				Lenexa  KANSAS (KS)  66227
+				US
+
+68-19-3F   (hex)		Digital Airways
+68193F     (base 16)		Digital Airways
+				5, Place Jean SIARD
+				ARGENTAN  NORMANDY  61200
+				FR
+
+B4-75-0E   (hex)		Belkin International Inc.
+B4750E     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista  Ca.   90094
+				US
+
+94-10-3E   (hex)		Belkin International Inc.
+94103E     (base 16)		Belkin International Inc.
+				12045 East Waterfront Drive
+				Playa Vista  Ca.   90094
+				US
+
+7C-B7-33   (hex)		ASKEY COMPUTER CORP
+7CB733     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+30-51-F8   (hex)		BYK-Gardner GmbH
+3051F8     (base 16)		BYK-Gardner GmbH
+				Lausitzer Strasse 8
+				Geretsried  Bavarian  82538
+				DE
+
+E8-F2-26   (hex)		MILLSON CUSTOM SOLUTIONS INC.
+E8F226     (base 16)		MILLSON CUSTOM SOLUTIONS INC.
+				2036 COLUMBIA STREET
+				VANCOUVER  BRITISH COLUMBIA  V5Y 3E1
+				CA
+
+44-EE-30   (hex)		Budelmann Elektronik GmbH
+44EE30     (base 16)		Budelmann Elektronik GmbH
+				Von-Renesse-Weg 60
+				Muenster  North Rhine-Westphalia  48163
+				DE
+
+FC-1E-16   (hex)		IPEVO corp
+FC1E16     (base 16)		IPEVO corp
+				3F,No.53,Bo-ai Road,Taipei 100,Taiwan
+				Taipei    10044
+				TW
+
+3C-6E-63   (hex)		Mitron OY
+3C6E63     (base 16)		Mitron OY
+				Yrittäjankaari 19
+				FORSSA  Kanta-Hame  30420
+				FI
+
+A4-05-9E   (hex)		STA Infinity LLP
+A4059E     (base 16)		STA Infinity LLP
+				WINNINGTON HOUSE
+				London    N12 0DR
+				GB
+
+A0-BF-50   (hex)		S.C. ADD-PRODUCTION S.R.L.
+A0BF50     (base 16)		S.C. ADD-PRODUCTION S.R.L.
+				36, Dragomirna str.
+				Chisinau    MD-2008
+				MD
+
+E8-D4-E0   (hex)		Beijing BenyWave Technology Co., Ltd.
+E8D4E0     (base 16)		Beijing BenyWave Technology Co., Ltd.
+				No.55, Jiachuang Road, Taihu Town
+				  Beijing  101111
+				CN
+
+FC-01-9E   (hex)		VIEVU
+FC019E     (base 16)		VIEVU
+				105 W. John St
+				Seattle  WA  98119
+				US
+
+64-21-84   (hex)		Nippon Denki Kagaku Co.,LTD
+642184     (base 16)		Nippon Denki Kagaku Co.,LTD
+				Nishino Gotochou 18
+				Kyoto City  Kyoto Pref  607-8356
+				JP
+
+24-64-EF   (hex)		CYG SUNRI CO.,LTD.
+2464EF     (base 16)		CYG SUNRI CO.,LTD.
+				No. 3, Langshan 1st Road, North Area of Hi-Tech Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+D8-27-0C   (hex)		MaxTronic International Co., Ltd.
+D8270C     (base 16)		MaxTronic International Co., Ltd.
+				4F., No.529, Zhongzheng Rd., Xindian Dist.
+				New Taipei City  Taiwan  231
+				TW
+
+B4-CC-E9   (hex)		PROSYST
+B4CCE9     (base 16)		PROSYST
+				2C Rue de l' EPINOY
+				TEMPLEMARS    59175
+				FR
+
+C4-D6-55   (hex)		Tercel technology co.,ltd
+C4D655     (base 16)		Tercel technology co.,ltd
+				Huafa South Road, Futian District,
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+58-BD-F9   (hex)		Sigrand
+58BDF9     (base 16)		Sigrand
+				UNIT 602 6/F, Causeway Bay Comm Bldg,
+				  Hong Kong  999077
+				HK
+
+C0-C6-87   (hex)		Cisco SPVTG
+C0C687     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+C4-93-80   (hex)		Speedytel technology
+C49380     (base 16)		Speedytel technology
+				ROOM 1103,HANG SENG MONGKOK BUILDING,677 NATHAN ROAD,MONGKOK,KOWLOON
+				HONG KONG  HONG KONG  
+				HK
+
+00-7D-FA   (hex)		Volkswagen Group of America
+007DFA     (base 16)		Volkswagen Group of America
+				3800 Hamlin Rd
+				Auburn Hills  MI  48326
+				US
+
+2C-71-55   (hex)		HiveMotion
+2C7155     (base 16)		HiveMotion
+				1806, STX-V Tower
+				Seoul    153-803
+				KR
+
+20-18-0E   (hex)		Shenzhen Sunchip Technology Co., Ltd
+20180E     (base 16)		Shenzhen Sunchip Technology Co., Ltd
+				Room 818-831, Building B1, Mingyou Purchasing Center, Bao'an District, Shenzhen, China
+				Shenzhen  Guangdong  518101
+				CN
+
+80-B2-19   (hex)		ELEKTRON TECHNOLOGY UK LIMITED
+80B219     (base 16)		ELEKTRON TECHNOLOGY UK LIMITED
+				BROERS BUILDING,
+				CAMBRIDGE  CAMBS  CB3 0FA
+				US
+
+E0-AE-B2   (hex)		Bender GmbH &amp; Co.KG
+E0AEB2     (base 16)		Bender GmbH &amp; Co.KG
+				Londorfer Straße 65
+				Grünberg  Hessen  35305
+				DE
+
+F8-4A-7F   (hex)		Innometriks Inc
+F84A7F     (base 16)		Innometriks Inc
+				3654 Ocean Ranch Blvd
+				Oceanside  Ca  92056
+				US
+
+74-A4-B5   (hex)		Powerleader Science and Technology Co. Ltd.
+74A4B5     (base 16)		Powerleader Science and Technology Co. Ltd.
+				Powerleader Technology Park, #3 Guanyi Rd.
+				Shenzhen  Guangdong  518110
+				CN
+
+90-9F-43   (hex)		Accutron Instruments Inc.
+909F43     (base 16)		Accutron Instruments Inc.
+				11 Mary Street
+				Sudbury  Ontario  P3C1B4
+				CA
+
+28-94-AF   (hex)		Samhwa Telecom
+2894AF     (base 16)		Samhwa Telecom
+				293-7, Doksan-dong
+				Seoul  Seoul  153-813
+				KR
+
+AC-50-36   (hex)		Pi-Coral Inc
+AC5036     (base 16)		Pi-Coral Inc
+				2130 Gold St
+				San Jose  CA  95002-1177
+				US
+
+0C-9B-13   (hex)		Shanghai Magic Mobile Telecommunication Co.Ltd.
+0C9B13     (base 16)		Shanghai Magic Mobile Telecommunication Co.Ltd.
+				 B7 parts, second floor
+				Waigaoqiao Free Trade Zone  Shanghai  200131
+				CN
+
+94-BF-1E   (hex)		eflow Inc. / Smart Device Planning and Development Division
+94BF1E     (base 16)		eflow Inc. / Smart Device Planning and Development Division
+				Ryoka-Yoyogi building 3F
+				Shibuya-Ku  TOKYO  151-0051
+				JP
+
+E8-51-6E   (hex)		TSMART Inc.
+E8516E     (base 16)		TSMART Inc.
+				The-O-valley 306,
+				Anyang-si  Gyeonggi-do  431-080
+				KR
+
+AC-22-0B   (hex)		ASUSTek COMPUTER INC.
+AC220B     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+B8-87-A8   (hex)		Step Ahead Innovations Inc.
+B887A8     (base 16)		Step Ahead Innovations Inc.
+				20 Wintersport Ln.
+				Williston  VT  05495
+				US
+
+E0-A1-98   (hex)		NOJA Power Switchgear Pty Ltd
+E0A198     (base 16)		NOJA Power Switchgear Pty Ltd
+				16 Archimedes Place
+				Murarrie  QLD  4172
+				AU
+
+88-35-4C   (hex)		Transics
+88354C     (base 16)		Transics
+				p/a Ter Waarde 91
+				Ieper    8900
+				BE
+
+3C-61-04   (hex)		Juniper Networks
+3C6104     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+CC-4A-E1   (hex)		fourtec -Fourier Technologies
+CC4AE1     (base 16)		fourtec -Fourier Technologies
+				16 Hamelacha St. POB 11681
+				Rosh Ha’ayin    48091
+				IL
+
+8C-4B-59   (hex)		3D Imaging & Simulations Corp
+8C4B59     (base 16)		3D Imaging & Simulations Corp
+				815, Timnip-Dong, Yuseong-Gu
+				  Daejeon  305510
+				KR
+
+5C-33-27   (hex)		Spazio Italia srl
+5C3327     (base 16)		Spazio Italia srl
+				Via G.Galilei, 50
+				Padenghe sul Garda  BS  25080
+				IT
+
+50-76-91   (hex)		Tekpea, Inc.
+507691     (base 16)		Tekpea, Inc.
+				2225 East Bayshore Road
+				Palo Alto  California  94303
+				US
+
+28-F5-32   (hex)		ADD-Engineering BV
+28F532     (base 16)		ADD-Engineering BV
+				P.O. BOX 5893
+				ROTTERDAM  ZH  3008 AW
+				NL
+
+94-40-A2   (hex)		Anywave Communication Technologies, Inc.
+9440A2     (base 16)		Anywave Communication Technologies, Inc.
+				300 Knightsbridge Parkway, Suite 150
+				Lincolnshire  IL  60069
+				US
+
+1C-86-AD   (hex)		MCT CO., LTD.
+1C86AD     (base 16)		MCT CO., LTD.
+				C-815/816, Garden5 Works, 52 Chungmin-ro
+				Songpa-gu  Seoul  138-961
+				KR
+
+28-D9-3E   (hex)		Telecor Inc.
+28D93E     (base 16)		Telecor Inc.
+				6205 Kestrel Road
+				Mississauga  Ontario  L5T 2A1
+				CA
+
+64-0B-4A   (hex)		Digital Telecom Technology Limited
+640B4A     (base 16)		Digital Telecom Technology Limited
+				1708 Nan Fung Tower,
+				    00852
+				US
+
+38-42-33   (hex)		Wildeboer Bauteile GmbH
+384233     (base 16)		Wildeboer Bauteile GmbH
+				Marker Weg 11
+				Weener  Niedersachsen  26826
+				US
+
+3C-8A-B0   (hex)		Juniper Networks
+3C8AB0     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C0-34-B4   (hex)		Gigastone Corporation
+C034B4     (base 16)		Gigastone Corporation
+				12F.NO 480. Rueiguang Rd.
+				Taipei    11492
+				TW
+
+CC-E8-AC   (hex)		SOYEA Technology Co.,Ltd.
+CCE8AC     (base 16)		SOYEA Technology Co.,Ltd.
+				STB department,Floor 4,Building 11 south
+				hangzhou  zhejiang  310007
+				CN
+
+70-F1-76   (hex)		Data Modul AG
+70F176     (base 16)		Data Modul AG
+				Landsberger Str. 322
+				Munich  Bavaria  80687
+				DE
+
+B8-47-C6   (hex)		SanJet Technology Corp.
+B847C6     (base 16)		SanJet Technology Corp.
+				4F,No2,Li-Hsin Rd., 6,
+				Hsinchu    30078
+				TW
+
+B8-CD-93   (hex)		Penetek, Inc
+B8CD93     (base 16)		Penetek, Inc
+				6F, No.18, Wuqun 7th Rd, Wugu Dist
+				New Taipei City    248
+				TW
+
+28-DB-81   (hex)		Shanghai Guao Electronic Technology Co., Ltd
+28DB81     (base 16)		Shanghai Guao Electronic Technology Co., Ltd
+				No.6, Alley 1225 TongPu Road,
+				  Shanghai  200333
+				CN
+
+38-06-B4   (hex)		A.D.C. GmbH
+3806B4     (base 16)		A.D.C. GmbH
+				Peter-Dornier-Str. 10
+				Lindau    88131
+				DE
+
+B8-24-1A   (hex)		SWEDA INFORMATICA LTDA
+B8241A     (base 16)		SWEDA INFORMATICA LTDA
+				RUA DONA BRIGIDA, 713
+				SAO PAULO  SP  04111-081
+				BR
+
+A0-B1-00   (hex)		ShenZhen Cando Electronics Co.,Ltd
+A0B100     (base 16)		ShenZhen Cando Electronics Co.,Ltd
+				Building A, Dagang Industrial Zone, Changzhen Community
+				Shenzhen City  Guangdong  518132
+				CN
+
+20-1D-03   (hex)		Elatec GmbH
+201D03     (base 16)		Elatec GmbH
+				Lilienthalstr. 3
+				Puchheim  Bayern  82178
+				DE
+
+E0-67-B3   (hex)		Shenzhen C-Data Technology Co., Ltd
+E067B3     (base 16)		Shenzhen C-Data Technology Co., Ltd
+				#601, Fl6, Bldg F, No.1008  Yangguang Community
+				Shenzhen  Guangdong  518055
+				CN
+
+1C-4A-F7   (hex)		AMON INC
+1C4AF7     (base 16)		AMON INC
+				HANJUN BLDG 4/F, SHINGILDONG 110-4
+				  SEOUL  150839
+				KR
+
+E4-77-6B   (hex)		AARTESYS AG
+E4776B     (base 16)		AARTESYS AG
+				Bahnhofplatz 7
+				Biel  Bern  CH-2501
+				CH
+
+30-F3-1D   (hex)		zte corporation
+30F31D     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A0-EC-80   (hex)		zte corporation
+A0EC80     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+0C-C8-1F   (hex)		Summer Infant, Inc.
+0CC81F     (base 16)		Summer Infant, Inc.
+				1275 Park East Drive
+				Woonsocket  Rhode Island  02895
+				US
+
+A8-FB-70   (hex)		WiseSec L.t.d
+A8FB70     (base 16)		WiseSec L.t.d
+				145 yaffo ST.
+				Haifa  Israel  37503
+				IL
+
+E4-81-B3   (hex)		Shenzhen ACT Industrial Co.,Ltd.
+E481B3     (base 16)		Shenzhen ACT Industrial Co.,Ltd.
+				NO.5 B/D,BEISHAN INDUSTRIAL PARK,BEISHAN R/D,
+				Shenzhen  Guangdong  518083
+				CN
+
+C0-6C-6D   (hex)		MagneMotion, Inc.
+C06C6D     (base 16)		MagneMotion, Inc.
+				139 Barnum Road
+				Devens  Massachusetts  01434
+				US
+
+E8-80-D8   (hex)		GNTEK Electronics Co.,Ltd.
+E880D8     (base 16)		GNTEK Electronics Co.,Ltd.
+				Suzhou Industrial Park
+				Suzhou  Jiangsu  215021
+				CN
+
+30-3E-AD   (hex)		Sonavox Canada Inc
+303EAD     (base 16)		Sonavox Canada Inc
+				81 Zenway Blvd #25
+				Woodbridge  Ontario  L4S0S5
+				CA
+
+F8-35-DD   (hex)		Gemtek Technology Co., Ltd.
+F835DD     (base 16)		Gemtek Technology Co., Ltd.
+				No. 1 Jen Ai Road Hsinchu Industrial Park Hukou, Hsinchu 30352 TAIWAN, REPUBLIC OF CHINA
+				Hsinchu  TAIWAN  30352
+				TW
+
+D8-B0-4C   (hex)		Jinan USR IOT Technology Co., Ltd.
+D8B04C     (base 16)		Jinan USR IOT Technology Co., Ltd.
+				#1-523, Huizhan Guoji Cheng, Gaoxin Qu
+				JINAN  SHANDONG  250101
+				CN
+
+CC-04-B4   (hex)		Select Comfort
+CC04B4     (base 16)		Select Comfort
+				9800 59th Ave N
+				Minneapolis  MN  55442
+				US
+
+5C-15-E1   (hex)		AIDC TECHNOLOGY (S) PTE LTD
+5C15E1     (base 16)		AIDC TECHNOLOGY (S) PTE LTD
+				NO.1 GOLDHILL PLAZA #03-21
+				SINGAPORE    308899
+				SG
+
+E8-51-9D   (hex)		Yeonhab Precision Co.,LTD
+E8519D     (base 16)		Yeonhab Precision Co.,LTD
+				219-27, Haksusosa-Gil, Mokcheon-Eup
+				Cheonan  Chungcheongnamdo  330-844
+				KR
+
+DC-57-26   (hex)		Power-One
+DC5726     (base 16)		Power-One
+				Via San Girgio 642
+				Terranuova  Arezzo  52028
+				IT
+
+F8-DA-DF   (hex)		EcoTech, Inc.
+F8DADF     (base 16)		EcoTech, Inc.
+				999 Postal Road
+				Allentown  PA  18109
+				US
+
+30-AE-7B   (hex)		Deqing Dusun Electron CO., LTD
+30AE7B     (base 16)		Deqing Dusun Electron CO., LTD
+				No. 640 FengQing Street, Deqing
+				Huzhou  Zhejiang  313200
+				CN
+
+68-EC-62   (hex)		YODO Technology Corp. Ltd.
+68EC62     (base 16)		YODO Technology Corp. Ltd.
+				8F., No.168-1, Liancheng Rd
+				Taipei City    235
+				TW
+
+18-88-57   (hex)		Beijing Jinhong Xi-Dian Information Technology Corp.
+188857     (base 16)		Beijing Jinhong Xi-Dian Information Technology Corp.
+				4th -5th Floor, 1# Building NO.1 Zhonghe Road
+				  Beijing  100070
+				CN
+
+B8-C8-55   (hex)		Shanghai GBCOM Communication Technology Co.,Ltd.
+B8C855     (base 16)		Shanghai GBCOM Communication Technology Co.,Ltd.
+				Room 602, Building 6, No.
+				  Shanghai  200241
+				CN
+
+78-30-3B   (hex)		Stephen Technologies Co.,Limited
+78303B     (base 16)		Stephen Technologies Co.,Limited
+				5/F, Building NO.1, TongXin Industry Zone
+				Shenzhen  Guangdong  518115
+				CN
+
+CC-1A-FA   (hex)		zte corporation
+CC1AFA     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+6C-8B-2F   (hex)		zte corporation
+6C8B2F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+8C-5A-F0   (hex)		Exeltech Solar Products
+8C5AF0     (base 16)		Exeltech Solar Products
+				3001 Northern Cross Blvd #361
+				Fort Worth  TX  76137
+				US
+
+B0-80-8C   (hex)		Laser Light Engines
+B0808C     (base 16)		Laser Light Engines
+				8C Industrial Way
+				Salem  New Hamshire  03079
+				US
+
+D8-DC-E9   (hex)		Kunshan Erlab ductless filtration system Co.,Ltd
+D8DCE9     (base 16)		Kunshan Erlab ductless filtration system Co.,Ltd
+				NO.100 Liu Shi Jin Road
+				Kunshan  Jiangsu  215300
+				CN
+
+DC-D5-2A   (hex)		Sunny Heart Limited
+DCD52A     (base 16)		Sunny Heart Limited
+				Rm. 1516, 15/F, Hewlett Center
+				Kwun Tong Kowloon    852
+				HK
+
+D8-66-C6   (hex)		Shenzhen Daystar Technology Co.,ltd
+D866C6     (base 16)		Shenzhen Daystar Technology Co.,ltd
+				The 5th Floor,#4 Building, Minxing Industria Zone
+				Shenzhen  Guangdong  518131
+				CN
+
+D0-0E-A4   (hex)		Porsche Cars North America
+D00EA4     (base 16)		Porsche Cars North America
+				980 Hammond Drive
+				Atlanta  GA  30328
+				US
+
+78-4B-08   (hex)		f.robotics acquisitions ltd
+784B08     (base 16)		f.robotics acquisitions ltd
+				Yevulim, Industrial Zone
+				Pardesia  Hasharon  42815
+				IL
+
+84-E4-D9   (hex)		Shenzhen NEED technology Ltd.
+84E4D9     (base 16)		Shenzhen NEED technology Ltd.
+				Room 581 ,Jinda technology center,No.8, Kefeng road,
+				Shenzhen  Guangdong  518057
+				CN
+
+40-BC-73   (hex)		Cronoplast  S.L.
+40BC73     (base 16)		Cronoplast  S.L.
+				Pol.Ind.S.Ermengol II -
+				ABRERA  BARCELONA  08630
+				ES
+
+40-07-C0   (hex)		Railtec Systems GmbH
+4007C0     (base 16)		Railtec Systems GmbH
+				Sonnenbergstr. 19
+				Hergiswil  Nidwalden  6052
+				CH
+
+A4-D3-B5   (hex)		GLITEL Stropkov, s.r.o.
+A4D3B5     (base 16)		GLITEL Stropkov, s.r.o.
+				Cintorinska 557/73
+				Stropkov    09101
+				SK
+
+D4-3A-65   (hex)		IGRS Engineering Lab Ltd.
+D43A65     (base 16)		IGRS Engineering Lab Ltd.
+				8F,Taipeng Mansion
+				Haidian District  Beijing  10000
+				CN
+
+F4-99-AC   (hex)		WEBER Schraubautomaten GmbH
+F499AC     (base 16)		WEBER Schraubautomaten GmbH
+				Hans-Urmiller-Ring 56
+				Wolfratshausen  Bayern  82515
+				DE
+
+D0-50-99   (hex)		ASRock Incorporation
+D05099     (base 16)		ASRock Incorporation
+				2F., No.37, Sec. 2, Jhongyang S. Rd.
+				Taipei    112
+				US
+
+A4-9E-DB   (hex)		AutoCrib, Inc.
+A49EDB     (base 16)		AutoCrib, Inc.
+				3011 S. Croddy Way
+				Santa Ana  CA  92704
+				US
+
+1C-76-CA   (hex)		Terasic Technologies Inc.
+1C76CA     (base 16)		Terasic Technologies Inc.
+				9F., No.176, Sec.2, Gongdao 5th Rd
+				Hsinchu City    30070
+				TW
+
+88-89-64   (hex)		GSI Electronics Inc.
+888964     (base 16)		GSI Electronics Inc.
+				5200 Armand-Frappier
+				St-Hubert  Quebec  J3Z 1G5
+				CA
+
+7C-D8-44   (hex)		Enmotus Inc
+7CD844     (base 16)		Enmotus Inc
+				65 Enterprise
+				Aliso Viejo  CA  92656
+				US
+
+44-61-9C   (hex)		FONsystem co. ltd.
+44619C     (base 16)		FONsystem co. ltd.
+				3F annex of Venture support center
+				  GwangJu  500-706
+				KR
+
+70-82-0E   (hex)		as electronics GmbH
+70820E     (base 16)		as electronics GmbH
+				Kantstraße 10
+				Großbettlingen  Baden -Württemberg  72663
+				DE
+
+0C-11-05   (hex)		AKUVOX (XIAMEN) NETWORKS CO., LTD
+0C1105     (base 16)		AKUVOX (XIAMEN) NETWORKS CO., LTD
+				Suite 201-15, 31 WangHai Rd
+				Xiamen  Fujian  361008
+				CN
+
+5C-22-C4   (hex)		DAE EUN ELETRONICS CO., LTD
+5C22C4     (base 16)		DAE EUN ELETRONICS CO., LTD
+				1029 Hokye-Dong, Dongan-Goo
+				Anyang-Shi  Kyongki-Do  431-080
+				KR
+
+F8-FE-A8   (hex)		Technico Japan Corporation
+F8FEA8     (base 16)		Technico Japan Corporation
+				AM Building 9F, 2-5-3,
+				Tokyo    160-0022
+				JP
+
+18-00-DB   (hex)		Fitbit Inc.
+1800DB     (base 16)		Fitbit Inc.
+				150 Spear St Ste 200
+				San Francisco  CA  94105
+				US
+
+78-A1-06   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+78A106     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+6C-61-26   (hex)		Rinicom Holdings
+6C6126     (base 16)		Rinicom Holdings
+				Riverway House
+				Lancaster  Lancashire  LA1 2RX
+				GB
+
+88-68-5C   (hex)		Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd
+88685C     (base 16)		Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd
+				Area c,2/F,Building 1, BaoAn foreign trade industrial zone
+				BaoAn District, Shenzhen  Guangdong province  518100
+				CN
+
+10-28-31   (hex)		Morion Inc.
+102831     (base 16)		Morion Inc.
+				Shosse Kosmonavtov, 111
+				Perm  Permsky Krai  614990
+				US
+
+D8-29-16   (hex)		Ascent Communication Technology
+D82916     (base 16)		Ascent Communication Technology
+				13/F., Shum Tower
+				 Hong Kong    9999
+				HK
+
+2C-F2-03   (hex)		EMKO ELEKTRONIK SAN VE TIC AS
+2CF203     (base 16)		EMKO ELEKTRONIK SAN VE TIC AS
+				DOSAB, KARANFIL SOK, NO:6
+				  BURSA  16369
+				TR
+
+B4-FE-8C   (hex)		Centro Sicurezza Italia SpA
+B4FE8C     (base 16)		Centro Sicurezza Italia SpA
+				Via Venaria 28-30
+				Alpignano  Torino  10091
+				IT
+
+40-E7-30   (hex)		DEY Storage Systems, Inc.
+40E730     (base 16)		DEY Storage Systems, Inc.
+				215 South B Street
+				San Mateo  CA  94401
+				US
+
+68-B0-94   (hex)		INESA ELECTRON CO.,LTD
+68B094     (base 16)		INESA ELECTRON CO.,LTD
+				5F, NO.168, Tianlin Road
+				  Shanghai  200233
+				CN
+
+A0-73-FC   (hex)		Rancore Technologies Private Limited
+A073FC     (base 16)		Rancore Technologies Private Limited
+				5th Floor, Court House
+				Dhobi Talao  Maharashtra  400 002
+				IN
+
+44-F8-49   (hex)		Union Pacific Railroad
+44F849     (base 16)		Union Pacific Railroad
+				1400 Douglas St. STOP 0610
+				Omaha  NE  68179
+				US
+
+CC-0D-EC   (hex)		Cisco SPVTG
+CC0DEC     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+1C-37-BF   (hex)		Cloudium Systems Ltd.
+1C37BF     (base 16)		Cloudium Systems Ltd.
+				Hartnett Centre
+				Limerick    00
+				IE
+
+50-AB-BF   (hex)		Hoseo Telecom
+50ABBF     (base 16)		Hoseo Telecom
+				701 ACE Techno Tower 684-1
+				Seoul    157-721
+				KR
+
+0C-72-2C   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+0C722C     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+9C-E6-35   (hex)		Nintendo Co., Ltd.
+9CE635     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+60-A4-4C   (hex)		ASUSTek COMPUTER INC.
+60A44C     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+18-5A-E8   (hex)		Zenotech.Co.,Ltd
+185AE8     (base 16)		Zenotech.Co.,Ltd
+				E-503, BundangTechno Park, Yatap-dong
+				Seongnam    463-760
+				KR
+
+C4-7D-CC   (hex)		Zebra Technologies Inc
+C47DCC     (base 16)		Zebra Technologies Inc
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+E0-AE-ED   (hex)		LOENK
+E0AEED     (base 16)		LOENK
+				F9, Cheongdam Venture Plaza
+				  SEOUL  135-951
+				KR
+
+E4-92-E7   (hex)		Gridlink Tech. Co.,Ltd.
+E492E7     (base 16)		Gridlink Tech. Co.,Ltd.
+				Room No. 619, No. 108 Jiang Bin Dong Road
+				Fuzhou  Fujian  350015
+				CN
+
+CC-04-7C   (hex)		G-WAY Microwave
+CC047C     (base 16)		G-WAY Microwave
+				38 Leuning Street
+				South Hackensack  New Jersey  07078
+				US
+
+64-53-5D   (hex)		Frauscher Sensortechnik
+64535D     (base 16)		Frauscher Sensortechnik
+				Gewerbestraße 1
+				St. Marienkirchen  Upper Austria  4774
+				US
+
+3C-6F-F7   (hex)		EnTek Systems, Inc.
+3C6FF7     (base 16)		EnTek Systems, Inc.
+				562 Starlight Dr.
+				Sautee Nacoochee  GA  30571
+				US
+
+2C-7B-5A   (hex)		Milper Ltd
+2C7B5A     (base 16)		Milper Ltd
+				32 Shaham St.
+				Petach Tikva    49250
+				IL
+
+D4-BF-2D   (hex)		SE Controls Asia Pacific Ltd
+D4BF2D     (base 16)		SE Controls Asia Pacific Ltd
+				Unit 301, 3/F, Hung To Centre,
+				Kwun Tong  Kowloon  
+				HK
+
+E0-D9-A2   (hex)		Hippih aps
+E0D9A2     (base 16)		Hippih aps
+				Sceince Park Scion
+				Lyngby    2800
+				DK
+
+FC-06-47   (hex)		Cortland Research, LLC
+FC0647     (base 16)		Cortland Research, LLC
+				12 S Main St., Ste 207
+				Homer  NY  13077
+				US
+
+6C-D1-46   (hex)		FRAMOS GmbH
+6CD146     (base 16)		FRAMOS GmbH
+				Mehlbeerenstr. 2
+				Taufkirchen    82024
+				DE
+
+54-E0-32   (hex)		Juniper Networks
+54E032     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+54-61-EA   (hex)		Zaplox AB
+5461EA     (base 16)		Zaplox AB
+				Scheelev
+				Lund  Sk  22370
+				SE
+
+D0-8B-7E   (hex)		Passif Semiconductor
+D08B7E     (base 16)		Passif Semiconductor
+				400 S. El Camino Real Suite 250
+				San Mateo  California  94402
+				US
+
+04-58-6F   (hex)		Sichuan Whayer information industry Co.,LTD
+04586F     (base 16)		Sichuan Whayer information industry Co.,LTD
+				Layer 16,Building 10, C Area
+				Chengdu City    610041
+				CN
+
+FC-9F-AE   (hex)		Fidus Systems Inc
+FC9FAE     (base 16)		Fidus Systems Inc
+				35 Fitzgerald Road
+				Ottawa  Ontario  K2H 1E6
+				CA
+
+68-1E-8B   (hex)		InfoSight Corporation
+681E8B     (base 16)		InfoSight Corporation
+				20700 US Hwy 23
+				Chillicothe  Ohio  45601
+				US
+
+D0-52-A8   (hex)		Physical Graph Corporation
+D052A8     (base 16)		Physical Graph Corporation
+				11654 Plaza America Drive
+				Reston  VA  20190
+				US
+
+CC-3A-61   (hex)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+CC3A61     (base 16)		SAMSUNG ELECTRO MECHANICS CO., LTD.
+				314, Maetan3-Dong, Yeongtong-Gu
+				Suwon  Gyunggi-Do  443-743
+				US
+
+F8-D7-BF   (hex)		REV Ritter GmbH
+F8D7BF     (base 16)		REV Ritter GmbH
+				Frankenstra
+				M  Bavaria  63776
+				DE
+
+48-BE-2D   (hex)		Symanitron
+48BE2D     (base 16)		Symanitron
+				Ap.103, 17 Rudnevka str.,111674
+				  Moscow  
+				RU
+
+F0-23-29   (hex)		SHOWA DENKI CO.,LTD.
+F02329     (base 16)		SHOWA DENKI CO.,LTD.
+				1-25
+				Daito-city  Osaka  574-0052
+				JP
+
+F0-73-AE   (hex)		PEAK-System Technik
+F073AE     (base 16)		PEAK-System Technik
+				Otto-Roehm-Str 69
+				Darmstadt  Hessen  64293
+				DE
+
+48-B8-DE   (hex)		HOMEWINS TECHNOLOGY CO.,LTD.
+48B8DE     (base 16)		HOMEWINS TECHNOLOGY CO.,LTD.
+				10F-1, NO. 122, QIAOHE RD.,
+				NEW TAIPEI CITY,    235
+				TW
+
+10-EA-59   (hex)		Cisco SPVTG
+10EA59     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+0C-19-1F   (hex)		Inform Electronik
+0C191F     (base 16)		Inform Electronik
+				Emek mah.Ordu cad.No-49-51-53
+				Sarigazi-Sancaktepe  Istanbul  34785
+				US
+
+10-65-CF   (hex)		IQSIM
+1065CF     (base 16)		IQSIM
+				2000 Route des Lucioles
+				BIOT    06410
+				FR
+
+68-4C-A8   (hex)		Shenzhen Herotel Tech. Co., Ltd.
+684CA8     (base 16)		Shenzhen Herotel Tech. Co., Ltd.
+				Room W1402, West Tower, No.10128, Shennan Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+98-20-8E   (hex)		Definium Technologies
+98208E     (base 16)		Definium Technologies
+				34 Fairthorne Road
+				Launceston  Tasmania  7250
+				AU
+
+70-4A-E4   (hex)		Rinstrum Pty Ltd
+704AE4     (base 16)		Rinstrum Pty Ltd
+				41 Success St
+				Acacia Ridge  QLD  4110
+				AU
+
+08-3A-B8   (hex)		Shinoda Plasma Co., Ltd.
+083AB8     (base 16)		Shinoda Plasma Co., Ltd.
+				4-6-7, Minatojima Minamimachi, Chuo-ku
+				Kobe  Hyogo  6500047
+				JP
+
+A0-DD-97   (hex)		PolarLink Technologies, Ltd
+A0DD97     (base 16)		PolarLink Technologies, Ltd
+				6FL 352, Zhonghua 1st Rd. Kaohsiung 804 Taiwan
+				Kaohsiung  Taiwan  804
+				TW
+
+EC-89-F5   (hex)		Lenovo Mobile Communication Technology Ltd.
+EC89F5     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone,
+				Xiamen  Fujian  361006
+				US
+
+B4-98-42   (hex)		zte corporation
+B49842     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+70-54-D2   (hex)		PEGATRON CORPORATION
+7054D2     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+64-5A-04   (hex)		Chicony Electronics Co., Ltd.
+645A04     (base 16)		Chicony Electronics Co., Ltd.
+				No.25, Wugong 6th Rd., Wugu Dist.,
+				New Taipei City 248,  TAIWAN, REPUBLIC OF CHINA  248
+				TW
+
+AC-17-02   (hex)		Fibar Group sp. z o.o.
+AC1702     (base 16)		Fibar Group sp. z o.o.
+				ul. Lotnicza 1
+				Poznan    60-421
+				PL
+
+98-4C-D3   (hex)		Mantis Deposition
+984CD3     (base 16)		Mantis Deposition
+				2 Goodson Industrial Mews
+				Thame  Oxfordshire  OX9 3BX
+				GB
+
+08-60-6E   (hex)		ASUSTek COMPUTER INC.
+08606E     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+3C-57-D5   (hex)		FiveCo
+3C57D5     (base 16)		FiveCo
+				Ch. de la Rueyre 116
+				Renens  VD  1020
+				US
+
+F8-48-97   (hex)		Hitachi, Ltd.
+F84897     (base 16)		Hitachi, Ltd.
+				27-18, Minami Oi 6-chome, Shinagawa-ku
+				Tokyo    140-8572
+				JP
+
+F8-0B-D0   (hex)		Datang Telecom communication terminal (Tianjin) Co., Ltd.
+F80BD0     (base 16)		Datang Telecom communication terminal (Tianjin) Co., Ltd.
+				Garden East Roadon the 15th,
+				Haidian District  Beijing  100191
+				CN
+
+E8-9A-FF   (hex)		Fujian LANDI Commercial Equipment Co.,Ltd
+E89AFF     (base 16)		Fujian LANDI Commercial Equipment Co.,Ltd
+				Building 17,the 1st Section ,Fuzhou Software Park
+				No.89 Software Road   Fuzhou ,Fujian  350003
+				CN
+
+0C-8C-DC   (hex)		Suunto Oy
+0C8CDC     (base 16)		Suunto Oy
+				Valimotie 7
+				Vantaa  Uusimaa  02710
+				FI
+
+60-C5-A8   (hex)		Beijing LT Honway Technology Co.,Ltd
+60C5A8     (base 16)		Beijing LT Honway Technology Co.,Ltd
+				Room 1703,A1 Tower, Changyuan Tiandi, No.18,Suzhou Street
+				beijing  beijing  100086
+				CN
+
+B4-DF-3B   (hex)		Chromlech
+B4DF3B     (base 16)		Chromlech
+				19 av. Gabriel Faure
+				THORIGNE FOUILLARD    35235
+				FR
+
+7C-9A-9B   (hex)		VSE valencia smart energy
+7C9A9B     (base 16)		VSE valencia smart energy
+				Sir Alexander Fleming n
+				Paterna  Valencia  46980
+				ES
+
+84-E7-14   (hex)		Liang Herng Enterprise,Co.Ltd.
+84E714     (base 16)		Liang Herng Enterprise,Co.Ltd.
+				1FL,No.27,KweiYang Street,Sanchung District,New Taipei City,Taiwan,R.O.C. 
+				New Taipei City    241
+				TW
+
+B8-29-F7   (hex)		Blaster Tech
+B829F7     (base 16)		Blaster Tech
+				13337 South Street
+				Cerritos  CA  90703
+				US
+
+E4-A7-FD   (hex)		Cellco Partnership
+E4A7FD     (base 16)		Cellco Partnership
+				One Verizon Way
+				Baskin Ridge  New Jersey  07920
+				US
+
+2C-E2-A8   (hex)		DeviceDesign
+2CE2A8     (base 16)		DeviceDesign
+				Yeongtong-dong, Yeongtong-gu
+				Suwon-si  Gyeonggi-do  443-813
+				KR
+
+00-B5-6D   (hex)		David Electronics Co., LTD.
+00B56D     (base 16)		David Electronics Co., LTD.
+				9F, -2, No. 188, Sec. 3, Ta-Tung Rd.,
+				New Taipei City,     22103
+				TW
+
+B8-04-15   (hex)		Bayan Audio
+B80415     (base 16)		Bayan Audio
+				5 The Pavilions
+				Pease Pottage  West Sussex  RH11 9BJ
+				GB
+
+D4-13-6F   (hex)		Asia Pacific Brands
+D4136F     (base 16)		Asia Pacific Brands
+				PO Box 113001
+				Auckland  Newmarket  1149
+				NZ
+
+C8-E1-A7   (hex)		Vertu Corporation Limited
+C8E1A7     (base 16)		Vertu Corporation Limited
+				Beacon Hill Road
+				Church Crookham  Hampshire  GU52 8DY
+				GB
+
+4C-AB-33   (hex)		KST technology
+4CAB33     (base 16)		KST technology
+				Bangi-dong, songpa-gu
+				  Seoul  138-050
+				KR
+
+F4-47-2A   (hex)		Nanjing Rousing Sci. and Tech. Industrial Co., Ltd
+F4472A     (base 16)		Nanjing Rousing Sci. and Tech. Industrial Co., Ltd
+				A630,F6,NO.58 Nanhu Road,Jianye District
+				Nanjing  Jiangsu  210017
+				CN
+
+DC-02-8E   (hex)		zte corporation
+DC028E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+A8-45-E9   (hex)		Firich Enterprises CO., LTD.
+A845E9     (base 16)		Firich Enterprises CO., LTD.
+				10F., No. 75, Sec. 1, Xintai 5th Rd., Xizhi Dist.
+				New Taipei City  Taiwan (R.O.C.)  886
+				TW
+
+48-52-61   (hex)		SOREEL
+485261     (base 16)		SOREEL
+				18 Rue de la Gâtine
+				CHOLET  FRANCE  49304
+				FR
+
+64-62-23   (hex)		Cellient Co., Ltd.
+646223     (base 16)		Cellient Co., Ltd.
+				6F Glass Tower, 366-4 Yatap-dong Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-827
+				KR
+
+98-47-3C   (hex)		SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
+98473C     (base 16)		SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
+				Suite 604-605,Xing Yuan Technology Plaza 418 Gui Ping Road  ShangHAI
+				Shanghai    200233
+				CN
+
+54-81-AD   (hex)		Eagle Research Corporation
+5481AD     (base 16)		Eagle Research Corporation
+				4237 State Route 34
+				Hurricane  West Virginia  25526
+				US
+
+54-A0-4F   (hex)		t-mac Technologies Ltd
+54A04F     (base 16)		t-mac Technologies Ltd
+				Stand Park
+				Chesterfield  Derbyshire  S41 8JT
+				GB
+
+14-DB-85   (hex)		S NET MEDIA
+14DB85     (base 16)		S NET MEDIA
+				4F, SEHYUN BLDG, 1581-7
+				SEOUL    137-875
+				KR
+
+B8-DA-F1   (hex)		Strahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH
+B8DAF1     (base 16)		Strahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH
+				Ostdamm 139
+				Duelmen  NRW  48249
+				DE
+
+D4-5C-70   (hex)		Wi-Fi Alliance
+D45C70     (base 16)		Wi-Fi Alliance
+				10900-B Stonelake Boulevard
+				Austin  TX  78759
+				US
+
+EC-47-3C   (hex)		Redwire, LLC
+EC473C     (base 16)		Redwire, LLC
+				8 Thorndike St
+				Everett  MA  02149
+				US
+
+3C-C1-2C   (hex)		AES Corporation
+3CC12C     (base 16)		AES Corporation
+				285 Newbury St
+				Peabody  MA  01960
+				US
+
+94-9B-FD   (hex)		Trans New Technology, Inc.
+949BFD     (base 16)		Trans New Technology, Inc.
+				KY Bldg. 8F, 5-14-4 Nishinippori
+				Arakawa  Tokyo  116-0013
+				JP
+
+A0-0A-BF   (hex)		Wieson Technologies Co., Ltd.
+A00ABF     (base 16)		Wieson Technologies Co., Ltd.
+				7F, No. 276, Sec. 1, Datong Rd
+				New Taipei City    221
+				TW
+
+8C-CD-E8   (hex)		Nintendo Co., Ltd.
+8CCDE8     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+7C-B2-32   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+7CB232     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+00-E6-66   (hex)		ARIMA Communications Corp.
+00E666     (base 16)		ARIMA Communications Corp.
+				6F.,No.866,Zhongzheng Rd.,Zhonghe Dist.,
+				New Taipei City  Taiwan  23586
+				TW
+
+34-BD-FA   (hex)		Cisco SPVTG
+34BDFA     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+F4-1E-26   (hex)		Simon-Kaloi Engineering
+F41E26     (base 16)		Simon-Kaloi Engineering
+				31192 La Baya Drive Unit G
+				Westlake Village  CA  91362
+				US
+
+70-25-26   (hex)		Nokia
+702526     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+18-D9-49   (hex)		Qvis Labs, LLC
+18D949     (base 16)		Qvis Labs, LLC
+				3204 Rustic River Cove
+				Austin  TX  78746-2001
+				US
+
+D8-08-F5   (hex)		Arcadia Networks Co. Ltd. 
+D808F5     (base 16)		Arcadia Networks Co. Ltd. 
+				Cheung Sha Wan 5-B FL
+				Kowloon    0633
+				HK
+
+0C-C4-7E   (hex)		EUCAST Co., Ltd.
+0CC47E     (base 16)		EUCAST Co., Ltd.
+				Room 303, 1018-2 Unjung-dong, Bundang-Gu
+				Seongnam-si  Kyunggi-do  463-440
+				KR
+
+50-72-4D   (hex)		BEG Brueck Electronic GmbH
+50724D     (base 16)		BEG Brueck Electronic GmbH
+				Schlosserstraße 30
+				Lindlar  Nordrhein-Westfalen  51789
+				DE
+
+78-3C-E3   (hex)		Kai-EE
+783CE3     (base 16)		Kai-EE
+				3F.-12, No.79, Sec. 1, Xintai 5th Rd.,
+				 New Taipei City    22101
+				TW
+
+B8-98-B0   (hex)		Atlona Inc.
+B898B0     (base 16)		Atlona Inc.
+				70 Daggett Dr.
+				San Jose  CA  95134
+				US
+
+24-69-4A   (hex)		Jasmine Systems Inc.
+24694A     (base 16)		Jasmine Systems Inc.
+				50 Charles Lindbergh Blvd. Suite 411
+				Uniondale  NY  11553
+				US
+
+08-0C-0B   (hex)		SysMik GmbH Dresden
+080C0B     (base 16)		SysMik GmbH Dresden
+				Bertolt-Brecht-Allee 24
+				Dresden    01309
+				DE
+
+DC-BF-90   (hex)		HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.
+DCBF90     (base 16)		HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.
+				Qiaoxing Science Technological&Industrial Zone Tangquan
+				Huizhou  Guangdong  516023
+				CN
+
+04-9F-06   (hex)		Smobile Co., Ltd.
+049F06     (base 16)		Smobile Co., Ltd.
+				T-1009, Poongrim i-won Plus, 255-1
+				Seohyeon-dong, Bundang-gu  Seongnam-si, Gyeonggi-do  463-862
+				KR
+
+28-9A-4B   (hex)		SteelSeries ApS
+289A4B     (base 16)		SteelSeries ApS
+				656 West Randolph, Suite 2E
+				Chicago  IL  60661
+				US
+
+A0-8C-15   (hex)		Gerhard D. Wempe KG
+A08C15     (base 16)		Gerhard D. Wempe KG
+				Steinstrasse 23
+				  Hamburg  20095
+				DE
+
+90-CF-6F   (hex)		Dlogixs Co Ltd
+90CF6F     (base 16)		Dlogixs Co Ltd
+				DLogixs Bldg, #351-1, Anyang-Dong
+				Anyang-si  Gyeonggi-do  430-010
+				KR
+
+C8-FB-26   (hex)		Cisco SPVTG
+C8FB26     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+B8-58-10   (hex)		NUMERA, INC.
+B85810     (base 16)		NUMERA, INC.
+				1511 3RD AVE
+				SEATTLE  WA  98101
+				US
+
+EC-D9-50   (hex)		IRT SA
+ECD950     (base 16)		IRT SA
+				Puits-Godet 16
+				NEUCHATEL  NE  2000
+				CH
+
+7C-02-BC   (hex)		Hansung Electronics Co. LTD
+7C02BC     (base 16)		Hansung Electronics Co. LTD
+				319, Bong san-ri, San dong-myun
+				Gumi    730-853
+				KR
+
+B8-24-10   (hex)		Magneti Marelli Slovakia s.r.o.
+B82410     (base 16)		Magneti Marelli Slovakia s.r.o.
+				Industrial Park Kechnec
+				Kechnec    04458
+				SK
+
+10-5F-49   (hex)		Cisco SPVTG
+105F49     (base 16)		Cisco SPVTG
+				5030 Sugarloaf Parkway
+				Lawrenceville  GA  30044
+				US
+
+1C-5C-60   (hex)		Shenzhen Belzon Technology Co.,LTD.
+1C5C60     (base 16)		Shenzhen Belzon Technology Co.,LTD.
+				5F Block 1,Zhongxin Building,Chuangye Rd
+				Shenzhen  Guangdong  518054
+				CN
+
+B8-B9-4E   (hex)		Shenzhen iBaby Labs, Inc.
+B8B94E     (base 16)		Shenzhen iBaby Labs, Inc.
+				Room 218, Building 17,Shangsha Innovation Science and Technology Park,Futian District
+				Shenzhen  Guangdong  518047
+				CN
+
+AC-C6-98   (hex)		Kohzu Precision Co., Ltd.
+ACC698     (base 16)		Kohzu Precision Co., Ltd.
+				2-6-15, Kurigi, Asao-ku
+				Kawasaki-shi  Kanagawa  215-8521
+				JP
+
+7C-38-6C   (hex)		Real Time Logic
+7C386C     (base 16)		Real Time Logic
+				12515 Academy Ridge View
+				Colorado Springs  Colorado  80921
+				US
+
+20-67-B1   (hex)		Pluto inc.
+2067B1     (base 16)		Pluto inc.
+				Hongo5-21-1-303
+				Bunkyo-ku  Tokyo  113-0033
+				JP
+
+18-9A-67   (hex)		CSE-Servelec Limited
+189A67     (base 16)		CSE-Servelec Limited
+				Rotherside Road
+				Sheffield    S21 4HL
+				GB
+
+08-7D-21   (hex)		Altasec technology corporation
+087D21     (base 16)		Altasec technology corporation
+				9F-1, No.75, Sec.1, Xintai 5th Rd.,
+				New Taipei City  Taiwan  221
+				TW
+
+F8-05-1C   (hex)		DRS Imaging and Targeting Solutions
+F8051C     (base 16)		DRS Imaging and Targeting Solutions
+				100 N Babcock St
+				Melbourne  FL  32935
+				US
+
+78-D3-4F   (hex)		Pace-O-Matic, Inc.
+78D34F     (base 16)		Pace-O-Matic, Inc.
+				4150 Blue Ridge Industrial Parkway
+				Norcross  GA  30071
+				US
+
+A4-46-6B   (hex)		EOC Technology
+A4466B     (base 16)		EOC Technology
+				#1601 Acro Palace, 1594 Gwanyang-dong, Dongan-gu
+				Anyang-si  Gyeonggi-do  431-060
+				KR
+
+90-1E-DD   (hex)		GREAT COMPUTER CORPORATION
+901EDD     (base 16)		GREAT COMPUTER CORPORATION
+				4F., No.236, Fude 2nd Rd., Xizhi Dist., 
+				New Taipei City    22151
+				TW
+
+34-D7-B4   (hex)		Tributary Systems, Inc.
+34D7B4     (base 16)		Tributary Systems, Inc.
+				3717 Commerce Place
+				Bedford  Texas  76021
+				US
+
+F4-0F-9B   (hex)		WAVELINK
+F40F9B     (base 16)		WAVELINK
+				#701, Dongyoung Venture'stel 3rd, 202-4,
+				Anyang-si  Kyungki-do  430-817
+				KR
+
+64-5F-FF   (hex)		Nicolet Neuro
+645FFF     (base 16)		Nicolet Neuro
+				1850 Deming Way
+				Middleton  WI  53562
+				US
+
+70-0B-C0   (hex)		Dewav Technology Company
+700BC0     (base 16)		Dewav Technology Company
+				Room 1408, Real Estate Mansion
+				  Shangahi  200120
+				CN
+
+CC-14-A6   (hex)		Yichun MyEnergy Domain, Inc
+CC14A6     (base 16)		Yichun MyEnergy Domain, Inc
+				349W. Yuanshan Rd, Yichun
+				Yichun  Jiangxi  336000
+				CN
+
+10-9F-A9   (hex)		Actiontec Electronics, Inc
+109FA9     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+C0-A3-64   (hex)		3D Systems Massachusetts
+C0A364     (base 16)		3D Systems Massachusetts
+				19 Connector Road
+				Andover  MA  01810
+				US
+
+1C-5F-FF   (hex)		Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch
+1C5FFF     (base 16)		Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch
+				Room 14A, Building A, Honglong Central Plaza, No.3001,Heping Road, Luohu District, Shenzhen City
+				Shenzhen  Guangdong  518001
+				CN
+
+60-45-BD   (hex)		Microsoft
+6045BD     (base 16)		Microsoft
+				1 Microsoft Way
+				Redmond  Washington  98052
+				US
+
+24-10-64   (hex)		Shenzhen Ecsino Tecnical Co. Ltd
+241064     (base 16)		Shenzhen Ecsino Tecnical Co. Ltd
+				7F Guoxin build ChangXin Road. Nan'shan District
+				Shenzhen  Guangdong  518000
+				CN
+
+7C-EB-EA   (hex)		ASCT
+7CEBEA     (base 16)		ASCT
+				4F., No.49, Wu-Gong 6th Rd. Wu-Gu Industrial Park,
+				New Taipei City    248
+				TW
+
+9C-0D-AC   (hex)		Tymphany HK Limited
+9C0DAC     (base 16)		Tymphany HK Limited
+				RM 1307-8
+				43-59, Queen's Road East  Wanchai  
+				HK
+
+70-B5-99   (hex)		Embedded Technologies s.r.o.
+70B599     (base 16)		Embedded Technologies s.r.o.
+				Doubravice 134
+				Turnov    51101
+				CZ
+
+EC-4C-4D   (hex)		ZAO NPK RoTeK
+EC4C4D     (base 16)		ZAO NPK RoTeK
+				Bild. 119-1, Prospekt Mira
+				Moscow  Moscow  129223
+				RU
+
+A4-D1-8F   (hex)		Shenzhen Skyee Optical Fiber Communication Technology Ltd. 
+A4D18F     (base 16)		Shenzhen Skyee Optical Fiber Communication Technology Ltd. 
+				No.5 Bldg. Yimin Industrial Park, No.31, Makan South Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+58-34-3B   (hex)		Glovast Technology Ltd.
+58343B     (base 16)		Glovast Technology Ltd.
+				6F., No.23, JianKang Rd., SongShan Dist.,
+				Taipei    105
+				TW
+
+88-96-76   (hex)		TTC MARCONI s.r.o.
+889676     (base 16)		TTC MARCONI s.r.o.
+				Trebohosticka s.r.o.
+				Praha    10000
+				CZ
+
+5C-17-37   (hex)		I-View Now, LLC.
+5C1737     (base 16)		I-View Now, LLC.
+				1421 E. Sunset
+				Las Vegas  NV  89119
+				US
+
+AC-0A-61   (hex)		Labor S.r.L.
+AC0A61     (base 16)		Labor S.r.L.
+				Via della Scrofa 117
+				  Rome  00186
+				IT
+
+1C-43-EC   (hex)		JAPAN CIRCUIT CO.,LTD
+1C43EC     (base 16)		JAPAN CIRCUIT CO.,LTD
+				NKF-Kawasaki-Building 7F
+				Kawasaki  Kanagawa  2100005
+				JP
+
+54-D1-B0   (hex)		Universal Laser Systems, Inc
+54D1B0     (base 16)		Universal Laser Systems, Inc
+				16008 N 81st street
+				scottsdale  az  85260
+				US
+
+78-52-62   (hex)		Shenzhen Hojy Software Co., Ltd.
+785262     (base 16)		Shenzhen Hojy Software Co., Ltd.
+				3F,East of Building25,Keyuanxi,Number 5,Kezhixi Road, Science & Industry Park ,Nan Shan District ,Shenzhen
+				ShenZhen  GuangDong  508057
+				CN
+
+74-6A-89   (hex)		Rezolt Corporation
+746A89     (base 16)		Rezolt Corporation
+				2855 Bowers Avenue
+				Santa Clara  CA  95051
+				US
+
+74-14-89   (hex)		SRT Wireless
+741489     (base 16)		SRT Wireless
+				4101 SW 47th Avenue #102
+				Davie  Florida  33314
+				US
+
+24-1B-13   (hex)		Shanghai Nutshell Electronic Co., Ltd.
+241B13     (base 16)		Shanghai Nutshell Electronic Co., Ltd.
+				365 Guoshoujing RD.,Zhangjiang Hi-Tech Park, Pudong District
+				Shanghai  Shanghai  201203
+				CN
+
+20-01-4F   (hex)		Linea Research Ltd
+20014F     (base 16)		Linea Research Ltd
+				1 Marquis Business Centre
+				Baldock  Hertfordshire  SG7 6XL
+				GB
+
+EC-0E-D6   (hex)		ITECH INSTRUMENTS SAS
+EC0ED6     (base 16)		ITECH INSTRUMENTS SAS
+				3 Avenue de la Maranne
+				Châteauneuf-Les-Martigues    13220
+				FR
+
+24-09-17   (hex)		Devlin Electronics Limited
+240917     (base 16)		Devlin Electronics Limited
+				Unit D1
+				Basingstoke  Hampshire  RG226HZ
+				GB
+
+9C-54-CA   (hex)		Zhengzhou VCOM Science and Technology Co.,Ltd
+9C54CA     (base 16)		Zhengzhou VCOM Science and Technology Co.,Ltd
+				National 863 Software Park£¬No.6 Cuizhu Street, Hi-tech Indusry Developing Park
+				ZhengZhou City  Henan Province  450001
+				CN
+
+B4-35-64   (hex)		Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.
+B43564     (base 16)		Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.
+				1801 unit,Tian an Cyber Times Tower A,Futian District
+				Shenzhen  Guangdong  518000
+				CN
+
+00-BF-15   (hex)		Genetec Inc.
+00BF15     (base 16)		Genetec Inc.
+				2280 boul. Alfred-Nobel
+				St,. Laurent  Quebec  H4S 2A4
+				CA
+
+38-EE-9D   (hex)		Anedo Ltd.
+38EE9D     (base 16)		Anedo Ltd.
+				Huelsmeyerstraße 35
+				Eydelstedt    49406
+				DE
+
+78-BE-BD   (hex)		STULZ GmbH
+78BEBD     (base 16)		STULZ GmbH
+				Holsteiner Chausse 283
+				  Hamburg  22457
+				DE
+
+D4-DF-57   (hex)		Alpinion Medical Systems
+D4DF57     (base 16)		Alpinion Medical Systems
+				1F Verdi Tower 222-22 
+				Seoul    181-848
+				KR
+
+50-48-EB   (hex)		BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.
+5048EB     (base 16)		BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.
+				RM 701 Unit 2 Huirong Bldg. No.106 Lianhuachi East RD. Xuanwu Dist. Beijing
+				BEIJING  CHINA  100055
+				CN
+
+B4-0E-96   (hex)		HERAN 
+B40E96     (base 16)		HERAN 
+				No.88, Keji 3rd Rd., Guishan Township
+				Taoyuan  R.O.C  333
+				TW
+
+50-8C-77   (hex)		DIRMEIER Schanktechnik GmbH &Co KG
+508C77     (base 16)		DIRMEIER Schanktechnik GmbH &Co KG
+				Alfons-Goppel-Straße 5
+				92526 Oberviechtach    
+				DE
+
+40-70-4A   (hex)		Power Idea Technology Limited
+40704A     (base 16)		Power Idea Technology Limited
+				1401A, Mintai Building, WenXin 5 Road, ShenZhen, PRC
+				Guang Dong  Shen Zhen  518054
+				CN
+
+54-5E-BD   (hex)		NL Technologies
+545EBD     (base 16)		NL Technologies
+				33 Laird Drive
+				Toronto  ON  M4G3S8
+				CA
+
+F4-7F-35   (hex)		Cisco Systems, Inc
+F47F35     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-C1-68   (hex)		DinBox Sverige AB
+BCC168     (base 16)		DinBox Sverige AB
+				Surbrunnsgatan 14
+				Stockholm    11427
+				SE
+
+DC-30-9C   (hex)		Heyrex Limited
+DC309C     (base 16)		Heyrex Limited
+				Level 1, 236-256 Karori Road
+				Wellington    6147
+				NZ
+
+2C-00-F7   (hex)		XOS
+2C00F7     (base 16)		XOS
+				15 Tech Valley Drive
+				East Greenbush  NY  12061
+				US
+
+28-F6-06   (hex)		Syes srl
+28F606     (base 16)		Syes srl
+				Via Zanella 21
+				Lissone (MB)  Monza Brianza  20851
+				IT
+
+0C-AF-5A   (hex)		GENUS POWER INFRASTRUCTURES LIMITED
+0CAF5A     (base 16)		GENUS POWER INFRASTRUCTURES LIMITED
+				SPL-3 RIICO INDUSTRIAL AREA
+				JAIPUR  RAJASTHAN  302022
+				IN
+
+7C-EF-8A   (hex)		Inhon International Ltd.
+7CEF8A     (base 16)		Inhon International Ltd.
+				2F, No.552, Ruiguang Rd, Neihu Dist
+				Taipei  Taiwan  114
+				TW
+
+24-11-25   (hex)		Hutek Co., Ltd.
+241125     (base 16)		Hutek Co., Ltd.
+				E-402 Bundang Technopark 
+				Seongnam-city  Gyeonggi-do  463-760
+				KR
+
+B4-31-B8   (hex)		Aviwest
+B431B8     (base 16)		Aviwest
+				6 rue du Patis Tatelin
+				Rennes    35700
+				FR
+
+CC-18-7B   (hex)		Manzanita Systems, Inc.
+CC187B     (base 16)		Manzanita Systems, Inc.
+				14269 Danielson Street
+				Poway  CA  92064
+				US
+
+08-BE-09   (hex)		Astrol Electronic AG
+08BE09     (base 16)		Astrol Electronic AG
+				Vorderi Böde 3
+				Oberrohrdorf  AG  5452
+				CH
+
+B4-1D-EF   (hex)		Internet Laboratories, Inc.
+B41DEF     (base 16)		Internet Laboratories, Inc.
+				P.O. Box 7697
+				Atlanta  GA  30357
+				US
+
+80-93-93   (hex)		Xapt GmbH
+809393     (base 16)		Xapt GmbH
+				Neidenburger Str. 10
+				Gelsenkirchen  NRW  45897
+				DE
+
+A0-07-B6   (hex)		Advanced Technical Support, Inc.
+A007B6     (base 16)		Advanced Technical Support, Inc.
+				10 Grassmere Ave
+				West Hartford  CT  06110
+				US
+
+0C-D2-B5   (hex)		Binatone Telecommunication Pvt. Ltd
+0CD2B5     (base 16)		Binatone Telecommunication Pvt. Ltd
+				A36, G/F, Sector 4
+				  Uttar Pradesh  201301
+				IN
+
+48-46-F1   (hex)		Uros Oy
+4846F1     (base 16)		Uros Oy
+				Tutkijantie 4
+				OULU    90590
+				FI
+
+B8-27-EB   (hex)		Raspberry Pi Foundation
+B827EB     (base 16)		Raspberry Pi Foundation
+				Mitchell Wood House
+				Caldecote  Cambridgeshire  CB23 7NU
+				US
+
+84-AF-1F   (hex)		Beat System Service Co,. Ltd.
+84AF1F     (base 16)		Beat System Service Co,. Ltd.
+				1-11-1-2F, Nodaya-cho
+				Okayama-city  Okayama  700-0815
+				JP
+
+B0-58-C4   (hex)		Broadcast Microwave Services, Inc
+B058C4     (base 16)		Broadcast Microwave Services, Inc
+				12367 Crosthwaite Circle
+				Poway  CA  92064
+				US
+
+74-57-98   (hex)		TRUMPF Laser GmbH + Co. KG
+745798     (base 16)		TRUMPF Laser GmbH + Co. KG
+				Aichhalder Str. 39
+				Schramberg  BW  78713
+				DE
+
+28-17-CE   (hex)		Omnisense Ltd
+2817CE     (base 16)		Omnisense Ltd
+				3rd Floor St Andrew's House
+				Cambridge  Cambridgeshire  CB2 3BZ
+				GB
+
+3C-CE-73   (hex)		Cisco Systems, Inc
+3CCE73     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B0-BD-6D   (hex)		Echostreams Innovative Solutions
+B0BD6D     (base 16)		Echostreams Innovative Solutions
+				1130 Coiner Ct.
+				City of Industry  CA  91748
+				US
+
+60-44-F5   (hex)		Easy Digital Ltd.
+6044F5     (base 16)		Easy Digital Ltd.
+				Victoria Buildings, 1 Haddington Road
+				Dublin    4
+				IE
+
+90-AC-3F   (hex)		BrightSign LLC
+90AC3F     (base 16)		BrightSign LLC
+				16795 Lark Ave.
+				Los Gatos  CA  95032
+				US
+
+78-A1-83   (hex)		Advidia
+78A183     (base 16)		Advidia
+				3 Riverway
+				Houston  TX  77056
+				US
+
+A8-D0-E5   (hex)		Juniper Networks
+A8D0E5     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+F8-99-55   (hex)		Fortress Technology Inc
+F89955     (base 16)		Fortress Technology Inc
+				51 Grand Marshall Drive
+				Scarborough  Ontario  M1B 5N6
+				CA
+
+4C-C9-4F   (hex)		Nokia
+4CC94F     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+0C-E5-D3   (hex)		DH electronics GmbH
+0CE5D3     (base 16)		DH electronics GmbH
+				Am Anger 8
+				Bergen    83346
+				DE
+
+E4-25-E9   (hex)		Color-Chip
+E425E9     (base 16)		Color-Chip
+				Tavor Building 1
+				New Industrial Park  Yokneam  20692
+				IL
+
+14-B1-C8   (hex)		InfiniWing, Inc.
+14B1C8     (base 16)		InfiniWing, Inc.
+				19925 Stevens Creek Blvd
+				Cupertino  CA  95014
+				US
+
+E8-40-F2   (hex)		PEGATRON CORPORATION
+E840F2     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+50-05-3D   (hex)		CyWee Group Ltd
+50053D     (base 16)		CyWee Group Ltd
+				3F, No.28, Lane128
+				Taipei    10462
+				TW
+
+F8-8C-1C   (hex)		KAISHUN ELECTRONIC TECHNOLOGY CO., LTD. BEIJING
+F88C1C     (base 16)		KAISHUN ELECTRONIC TECHNOLOGY CO., LTD. BEIJING
+				NO.1 FARM, HENGQIAO VILLAGE WEST, MACHIKOU TOWN, 
+				BEIJING    102200
+				CN
+
+1C-0B-52   (hex)		EPICOM S.A
+1C0B52     (base 16)		EPICOM S.A
+				Autovia Andalucia Km 12.700
+				Getafe  Madrid  28905
+				ES
+
+74-7E-2D   (hex)		Beijing Thomson CITIC Digital Technology Co. LTD.
+747E2D     (base 16)		Beijing Thomson CITIC Digital Technology Co. LTD.
+				8301, No.8 Workshop, 3 Yongchangbei Road
+				Beijing    100176
+				CN
+
+88-5C-47   (hex)		Alcatel Lucent
+885C47     (base 16)		Alcatel Lucent
+				Via Energy Park, 14
+				Vimercate  MB  20871
+				IT
+
+3C-C1-F6   (hex)		Melange Systems Pvt. Ltd.
+3CC1F6     (base 16)		Melange Systems Pvt. Ltd.
+				4/1, 7th Cross, Kumarapark West
+				Bangalore  Karnataka  560020
+				IN
+
+94-FA-E8   (hex)		Shenzhen Eycom Technology Co., Ltd 
+94FAE8     (base 16)		Shenzhen Eycom Technology Co., Ltd 
+				EYANG Building, No. 3 of Qimin Rd, Langshan 2nd Street, North Area of Hi-Tech Industrial Zone, Nanshan District
+				Shenzhen  Guang Dong  518057
+				CN
+
+B4-82-55   (hex)		Research Products Corporation
+B48255     (base 16)		Research Products Corporation
+				1015 E. Washington Ave
+				Madison  WI  53703
+				US
+
+80-16-B7   (hex)		Brunel University
+8016B7     (base 16)		Brunel University
+				School of IS, Computing & Maths
+				Uxbridge  Middlesex  UB8 3PH
+				GB
+
+00-8D-DA   (hex)		Link One Co., Ltd.
+008DDA     (base 16)		Link One Co., Ltd.
+				601F   Chungjuk tower 546-9 
+				Buchion  Gyeonggi-do   420-864
+				KR
+
+C4-98-05   (hex)		Minieum Networks, Inc
+C49805     (base 16)		Minieum Networks, Inc
+				6404 International Parkway
+				Plano  Texas  75093
+				US
+
+90-F4-C1   (hex)		Rand McNally
+90F4C1     (base 16)		Rand McNally
+				9855 Woods Drive
+				Skokie  IL  60077
+				US
+
+18-19-3F   (hex)		Tamtron Oy
+18193F     (base 16)		Tamtron Oy
+				P.O.Box 15 (Vestonkatu 11)
+				Tampere    33561
+				FI
+
+94-44-44   (hex)		LG Innotek
+944444     (base 16)		LG Innotek
+				Jangduk-dong, Gwangsan-gu
+				Gwang-ju    506-731
+				KR
+
+4C-64-D9   (hex)		Guangdong Leawin Group Co., Ltd
+4C64D9     (base 16)		Guangdong Leawin Group Co., Ltd
+				10/F, Domain Bldg,No.8 Keji Road(E),HiTech Development District,
+				Shantou  Guangdong  515041
+				CN
+
+94-01-49   (hex)		AutoHotBox
+940149     (base 16)		AutoHotBox
+				14090 SW Frwy, Ste. 300
+				Sugar Land  TX  77478
+				US
+
+1C-B0-94   (hex)		HTC Corporation
+1CB094     (base 16)		HTC Corporation
+				No. 23, Xinghua Rd., Taoyuan City
+				Taoyuan County  Taiwan  330
+				TW
+
+9C-01-11   (hex)		Shenzhen Newabel Electronic Co., Ltd.
+9C0111     (base 16)		Shenzhen Newabel Electronic Co., Ltd.
+				5Flr, South Tower of Sichuan Bld.,
+				Shenzhen  Guangdong  518028
+				CN
+
+40-0E-67   (hex)		Tremol Ltd.
+400E67     (base 16)		Tremol Ltd.
+				6 Toledo str.
+				Veliko Turnovo    5000
+				BG
+
+C0-DF-77   (hex)		Conrad Electronic SE
+C0DF77     (base 16)		Conrad Electronic SE
+				Klaus Conrad Str. 1
+				Hirschau  Bavaria  92240
+				DE
+
+30-55-ED   (hex)		Trex Network LLC
+3055ED     (base 16)		Trex Network LLC
+				Room 505, Tower B Nongke Building, 
+				Beijing    100097
+				CN
+
+F0-F7-55   (hex)		Cisco Systems, Inc
+F0F755     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+1C-B2-43   (hex)		TDC A/S
+1CB243     (base 16)		TDC A/S
+				Telehøjen 1
+				Odense SØ    5220
+				DK
+
+38-BF-33   (hex)		NEC CASIO Mobile Communications
+38BF33     (base 16)		NEC CASIO Mobile Communications
+				1753,Shimonumabe
+				Kawasaki-shi  Kanagawa  211-8666
+				JP
+
+B4-67-E9   (hex)		Qingdao GoerTek Technology Co., Ltd.
+B467E9     (base 16)		Qingdao GoerTek Technology Co., Ltd.
+				5F, No.3 Building, Fortune Center
+				Qingdao  Shandong  266061
+				CN
+
+18-67-51   (hex)		KOMEG Industrielle Messtechnik GmbH
+186751     (base 16)		KOMEG Industrielle Messtechnik GmbH
+				Zum Wasserwerk 3
+				Völklingen    66333
+				DE
+
+64-5E-BE   (hex)		Yahoo! JAPAN
+645EBE     (base 16)		Yahoo! JAPAN
+				Midtown Tower
+				Minato-ku  Tokyo  107-6211
+				JP
+
+CC-C5-0A   (hex)		SHENZHEN DAJIAHAO TECHNOLOGY CO.,LTD
+CCC50A     (base 16)		SHENZHEN DAJIAHAO TECHNOLOGY CO.,LTD
+				3F Buliding 1, 2th Park TaoHuaYuan Tech- Innovation,
+				Shenzhen  Guangdong  518102
+				CN
+
+1C-B1-7F   (hex)		NEC Platforms, Ltd.
+1CB17F     (base 16)		NEC Platforms, Ltd.
+				800 Shimomata
+				Kakegawa  Shizuoka  436-8501
+				JP
+
+E4-2C-56   (hex)		Lilee Systems, Ltd.
+E42C56     (base 16)		Lilee Systems, Ltd.
+				2905 Stender Way, Suite 78
+				Santa Clara  CA  95054
+				US
+
+48-ED-80   (hex)		daesung eltec
+48ED80     (base 16)		daesung eltec
+				#509 SJ Technoville, 60-19, Gasan-dong
+				Seoul    153-769
+				KR
+
+C8-07-18   (hex)		TDSi
+C80718     (base 16)		TDSi
+				Unit 10 Concept Park
+				Poole  Dorset  BH12 4QT
+				GB
+
+58-1D-91   (hex)		Advanced Mobile Telecom co.,ltd.
+581D91     (base 16)		Advanced Mobile Telecom co.,ltd.
+				#608, Yatap Leaders Bldg. 342-1
+				Seongnam-si  Gyeonggi-do  463-828
+				KR
+
+D8-BF-4C   (hex)		Victory Concept Electronics Limited
+D8BF4C     (base 16)		Victory Concept Electronics Limited
+				4/F., CAC Tower,
+				Kwun Tong  Kowloon  KLN
+				HK
+
+3C-B9-A6   (hex)		Belden Deutschland GmbH
+3CB9A6     (base 16)		Belden Deutschland GmbH
+				Stuttgarter Straße 45-51
+				Neckartenzlingen    72654
+				DE
+
+8C-0C-A3   (hex)		Amper
+8C0CA3     (base 16)		Amper
+				Marconi 3, PTM
+				Tres Cantos  Madrid  28760
+				US
+
+94-DF-58   (hex)		IJ Electron CO.,Ltd.
+94DF58     (base 16)		IJ Electron CO.,Ltd.
+				401 ACE HIGHEND8, 345-4 GASAN-DONG
+				SEOUL    153-802
+				KR
+
+48-D5-4C   (hex)		Jeda Networks
+48D54C     (base 16)		Jeda Networks
+				2618 San Miguel Drive
+				Newport Beach  Ca.  92660
+				US
+
+8C-DE-52   (hex)		ISSC Technologies Corp.
+8CDE52     (base 16)		ISSC Technologies Corp.
+				4F, No.8, Dusing Rd.,
+				Hsinchu City     30078
+				TW
+
+08-25-22   (hex)		ADVANSEE
+082522     (base 16)		ADVANSEE
+				9 Rue Alfred Kastler
+				NANTES    44307
+				FR
+
+4C-2F-9D   (hex)		ICM Controls
+4C2F9D     (base 16)		ICM Controls
+				7313 William Barry Blvd
+				North Syracuse  NY  13212
+				US
+
+E4-67-BA   (hex)		Danish Interpretation Systems A/S
+E467BA     (base 16)		Danish Interpretation Systems A/S
+				Vestre Teglgade 12
+				Copenhagen  SV  2450
+				DK
+
+BC-B8-52   (hex)		Cybera, Inc.
+BCB852     (base 16)		Cybera, Inc.
+				9009 Carothers Parkway
+				Franklin  TN  37067
+				US
+
+C4-93-00   (hex)		8Devices
+C49300     (base 16)		8Devices
+				Gedimino st. 47
+				Kaunas  LT  44242
+				LT
+
+6C-A6-82   (hex)		EDAM information & communications
+6CA682     (base 16)		EDAM information & communications
+				601, Hanlim Veture town, 689-6
+				Gunpo  Gyenggi-Do  435-862
+				KR
+
+28-D5-76   (hex)		Premier Wireless, Inc.
+28D576     (base 16)		Premier Wireless, Inc.
+				4222 E. La Palma Ave.
+				Anaheim  CA  92807
+				US
+
+70-D6-B6   (hex)		Metrum Technologies
+70D6B6     (base 16)		Metrum Technologies
+				315 South University Parks Drive
+				Waco  Texas  76701
+				US
+
+C0-A0-DE   (hex)		Multi Touch Oy
+C0A0DE     (base 16)		Multi Touch Oy
+				Henry Fordin katu 6
+				Helsinki    00150
+				FI
+
+40-BC-8B   (hex)		itelio GmbH
+40BC8B     (base 16)		itelio GmbH
+				Franz-Larcher-Straße 4
+				Kiefersfelden  Bavaria  83088
+				DE
+
+9C-A1-34   (hex)		Nike, Inc.
+9CA134     (base 16)		Nike, Inc.
+				1 Bowerman Drive
+				Beaverton  OR  97005
+				US
+
+50-FC-30   (hex)		Treehouse Labs
+50FC30     (base 16)		Treehouse Labs
+				601 Great Oaks Dr.
+				Round Rock  TX  78681
+				US
+
+B8-96-74   (hex)		AllDSP GmbH & Co. KG
+B89674     (base 16)		AllDSP GmbH & Co. KG
+				Spenglerstrasse 6
+				Hamm  NRW  59067
+				DE
+
+48-E1-AF   (hex)		Vity
+48E1AF     (base 16)		Vity
+				180 rue Pierre Landais
+				Caudan  56  56850
+				FR
+
+1C-BB-A8   (hex)		OJSC Ufimskiy Zavod Promsvyaz
+1CBBA8     (base 16)		OJSC Ufimskiy Zavod Promsvyaz
+				39, 50 let SSSR
+				Ufa  Bashkortostan  450071
+				RU
+
+00-6B-A0   (hex)		SHENZHEN UNIVERSAL INTELLISYS PTE LTD
+006BA0     (base 16)		SHENZHEN UNIVERSAL INTELLISYS PTE LTD
+				ROOM 1607-1608,XINGJI MANSION
+				SHENZHEN  GUANGDONG  518104
+				CN
+
+A8-98-C6   (hex)		Shinbo Co., Ltd.
+A898C6     (base 16)		Shinbo Co., Ltd.
+				203-14, Anyang 7-Dong, Manan-Gu
+				Anyang-Si  Kyungki-Do  430-817
+				KR
+
+B4-21-1D   (hex)		Beijing GuangXin Technology Co., Ltd
+B4211D     (base 16)		Beijing GuangXin Technology Co., Ltd
+				Room 313,B Bld,Horizon International Tower,Zhichun Road,6,Haidian District,Beijing City,P.R.China
+				Beijing    100086
+				CN
+
+90-3C-AE   (hex)		Yunnan KSEC Digital Technology Co.,Ltd.
+903CAE     (base 16)		Yunnan KSEC Digital Technology Co.,Ltd.
+				3F,NO.176 Keyi ROAD,High and New Technological Industrial Development Zone
+				Kunming  Yunnan  650106
+				CN
+
+70-70-4C   (hex)		Purple Communications, Inc
+70704C     (base 16)		Purple Communications, Inc
+				595 Menlo
+				Rocklin  CA  95765
+				US
+
+D8-97-60   (hex)		C2 Development, Inc.
+D89760     (base 16)		C2 Development, Inc.
+				127 S Bell Ave
+				Ames  IA  50010
+				US
+
+F4-7A-CC   (hex)		SolidFire, Inc.
+F47ACC     (base 16)		SolidFire, Inc.
+				1620 Pearl Street
+				Boulder  Colorado  80302
+				US
+
+90-56-82   (hex)		Lenbrook Industries Limited
+905682     (base 16)		Lenbrook Industries Limited
+				633 Granite Court
+				Pickering  Ontario  L1W 3K1
+				CA
+
+F0-DA-7C   (hex)		RLH INDUSTRIES,INC.
+F0DA7C     (base 16)		RLH INDUSTRIES,INC.
+				936 N. MAIN ST.
+				ORANGE  CA  92867
+				US
+
+AC-31-9D   (hex)		Shenzhen TG-NET Botone Technology Co.,Ltd.
+AC319D     (base 16)		Shenzhen TG-NET Botone Technology Co.,Ltd.
+				2nd floor,Building No.6,Pengtengda industrial zone,Huarong road,Dalang Street Office,
+				Shenzhen  Guangdong  518109
+				CN
+
+20-10-7A   (hex)		Gemtek Technology Co., Ltd.
+20107A     (base 16)		Gemtek Technology Co., Ltd.
+				No. 1 Jen Ai Road Hsinchu Industrial Park Hukou, Hsinchu 30352 TAIWAN, REPUBLIC OF CHINA
+				Hsinchu  TAIWAN  30352
+				TW
+
+78-DD-D6   (hex)		c-scape
+78DDD6     (base 16)		c-scape
+				westerkade 22
+				Gouda    2802 SL
+				NL
+
+C0-91-32   (hex)		Patriot Memory
+C09132     (base 16)		Patriot Memory
+				47027 Benicia
+				Fremont  CA  94555
+				US
+
+90-18-5E   (hex)		Apex Tool Group GmbH & Co OHG
+90185E     (base 16)		Apex Tool Group GmbH & Co OHG
+				Industriestraße 1
+				Westhausen    73463
+				DE
+
+F8-FE-5C   (hex)		Reciprocal Labs Corp
+F8FE5C     (base 16)		Reciprocal Labs Corp
+				3 S. Pinckney St.
+				Madison  WI  53703
+				US
+
+6C-9C-ED   (hex)		Cisco Systems, Inc
+6C9CED     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-86-F4   (hex)		Ctek, Inc.
+2486F4     (base 16)		Ctek, Inc.
+				34 Miraleste Plaza
+				Rancho Palos Verdes  California  90275
+				US
+
+C4-23-7A   (hex)		WhizNets Inc.
+C4237A     (base 16)		WhizNets Inc.
+				830 Stewart Drive
+				Sunnyvale  California  94085
+				US
+
+F4-E6-D7   (hex)		Solar Power Technologies, Inc.
+F4E6D7     (base 16)		Solar Power Technologies, Inc.
+				3006 Bee Caves Rd.
+				Austin  Texas  78746
+				US
+
+B8-74-24   (hex)		Viessmann Elektronik GmbH
+B87424     (base 16)		Viessmann Elektronik GmbH
+				Beetwiese 2
+				Allendorf (Eder)    35108
+				DE
+
+B4-51-F9   (hex)		NB Software
+B451F9     (base 16)		NB Software
+				Eichhalde 3
+				Weissach i. T.  Baden-Württemberg  71554
+				DE
+
+30-16-8D   (hex)		ProLon
+30168D     (base 16)		ProLon
+				17510 rue Charles, Suite 100
+				Mirabel  Quebec   J7J 1X9
+				CA
+
+E4-AF-A1   (hex)		HES-SO
+E4AFA1     (base 16)		HES-SO
+				Case postale 2134
+				Sion    1950
+				CH
+
+A8-87-ED   (hex)		ARC Wireless LLC
+A887ED     (base 16)		ARC Wireless LLC
+				6330 N. Washington St.
+				Denver  CO  80216
+				US
+
+D4-D2-49   (hex)		Power Ethernet
+D4D249     (base 16)		Power Ethernet
+				4th Floor, Holborn Gate
+				London    WC2A 1AH 
+				GB
+
+80-42-7C   (hex)		Adolf Tedsen GmbH & Co. KG
+80427C     (base 16)		Adolf Tedsen GmbH & Co. KG
+				Otto-Hahn-Str. 13-15
+				Trittau  Schleswig-Holstein  D-22946
+				DE
+
+E0-DA-DC   (hex)		JVC KENWOOD Corporation
+E0DADC     (base 16)		JVC KENWOOD Corporation
+				3-12, Moriyacho, Kanagawa-ku
+				Yokohama-shi  Kanagawa  221-0022
+				JP
+
+E8-43-B6   (hex)		QNAP Systems, Inc.
+E843B6     (base 16)		QNAP Systems, Inc.
+				2F., No.22, Zhongxing Rd., Xizhi Dist.
+				New Taipei City    221
+				TW
+
+B8-9B-C9   (hex)		SMC Networks Inc
+B89BC9     (base 16)		SMC Networks Inc
+				20 Mason 
+				Irvine  CA  92618
+				US
+
+40-9F-C7   (hex)		BAEKCHUN I&C Co., Ltd.
+409FC7     (base 16)		BAEKCHUN I&C Co., Ltd.
+				67-5, Gyesu-dong
+				Bucheon-si  Gyeonggi-do  422-070
+				KR
+
+00-FC-58   (hex)		WebSilicon Ltd.
+00FC58     (base 16)		WebSilicon Ltd.
+				25, Habarzel St.,
+				Tel-Aviv    69710
+				IL
+
+98-35-71   (hex)		Sub10 Systems Ltd
+983571     (base 16)		Sub10 Systems Ltd
+				Ash House
+				Kingsteignton  Devon  TQ12 3RZ
+				GB
+
+54-04-A6   (hex)		ASUSTek COMPUTER INC.
+5404A6     (base 16)		ASUSTek COMPUTER INC.
+				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+				Taipei  Taiwan  112
+				TW
+
+18-6D-99   (hex)		Adanis Inc.
+186D99     (base 16)		Adanis Inc.
+				#2015-2016 Geumkang Penterium
+				Hakuro, Dongan-Gu, Anyang-Si  Kyunggi-Do  431-060
+				KR
+
+A0-E2-01   (hex)		AVTrace Ltd.(China)
+A0E201     (base 16)		AVTrace Ltd.(China)
+				RM704, District B1, Originality Building, No.162 KeXue Avenue Science Town,GUANGZHOU,CHINA 
+				GUANGZHOU  GUANGDONG  510611
+				US
+
+F0-DE-B9   (hex)		ShangHai Y&Y Electronics Co., Ltd
+F0DEB9     (base 16)		ShangHai Y&Y Electronics Co., Ltd
+				No.3, 588 Tianxiong Road, Shanghai International Medical Zone(SIMZ),
+				Shanghai    201318
+				CN
+
+7C-A6-1D   (hex)		MHL, LLC
+7CA61D     (base 16)		MHL, LLC
+				1140 East Arques Avenue
+				Sunnyvale  CA  94085
+				US
+
+9C-F6-7D   (hex)		Ricardo Prague, s.r.o.
+9CF67D     (base 16)		Ricardo Prague, s.r.o.
+				Thamova 13
+				Praha 8    186 00
+				CZ
+
+98-C8-45   (hex)		PacketAccess
+98C845     (base 16)		PacketAccess
+				611 North Main Street
+				Goldfield  IA  50543
+				US
+
+98-90-80   (hex)		Linkpower Network System Inc Ltd.
+989080     (base 16)		Linkpower Network System Inc Ltd.
+				Room 202, Build 18, Shahe Industrial Zone
+				Shenzhen  Guangdong  518053
+				CN
+
+F8-33-76   (hex)		Good Mind Innovation Co., Ltd.
+F83376     (base 16)		Good Mind Innovation Co., Ltd.
+				20, Lane 200, Cheng Hu Rd. 
+				Kaohsiung    833
+				TW
+
+50-F6-1A   (hex)		Kunshan JADE Technologies co., Ltd.
+50F61A     (base 16)		Kunshan JADE Technologies co., Ltd.
+				12th Floor, Southern Building, Pudong Software Park,828 Xueyuan Road, Bacheng Town 
+				Kunshan  Jiangsu  215311
+				CN
+
+54-20-18   (hex)		Tely Labs
+542018     (base 16)		Tely Labs
+				545 Middlefield Road
+				Menlo Park  CA  94025
+				US
+
+58-1F-EF   (hex)		Tuttnaer LTD
+581FEF     (base 16)		Tuttnaer LTD
+				Har-Tuv B
+				Beith Shemesh    99000
+				IL
+
+58-BD-A3   (hex)		Nintendo Co., Ltd.
+58BDA3     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+F8-F2-5A   (hex)		G-Lab GmbH
+F8F25A     (base 16)		G-Lab GmbH
+				Schiffbaustrasse 10
+				Zurich  CH  8005
+				CH
+
+30-7E-CB   (hex)		SFR
+307ECB     (base 16)		SFR
+				40/42 Quai du point du jour
+				Boulongne Billancourt  Hauts de Seine  92659
+				FR
+
+68-F1-25   (hex)		Data Controls Inc.
+68F125     (base 16)		Data Controls Inc.
+				Fukashiro Bldg, 8F
+				Taito-ku  Tokyo  111-0052
+				JP
+
+BC-76-4E   (hex)		Rackspace US, Inc.
+BC764E     (base 16)		Rackspace US, Inc.
+				5000 Walzem Rd.
+				San Antonio  TX  78218
+				US
+
+CC-C8-D7   (hex)		CIAS Elettronica srl
+CCC8D7     (base 16)		CIAS Elettronica srl
+				Via Giovanni Durando 38
+				Milan    20158
+				IT
+
+84-D3-2A   (hex)		IEEE 1905.1
+84D32A     (base 16)		IEEE 1905.1
+				445 Hoes Lane
+				Piscataway   NJ  08855-1331
+				US
+
+4C-02-89   (hex)		LEX COMPUTECH CO., LTD
+4C0289     (base 16)		LEX COMPUTECH CO., LTD
+				3F, No.77, LI DE St. Chung Ho Dist., 
+				New Taipei City    23556
+				TW
+
+C0-E5-4E   (hex)		ARIES Embedded GmbH
+C0E54E     (base 16)		ARIES Embedded GmbH
+				Schöngeisinger Str. 84
+				 Fürstenfeldbruck    D-82256
+				DE
+
+F8-C0-01   (hex)		Juniper Networks
+F8C001     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+18-7C-81   (hex)		Valeo Vision Systems
+187C81     (base 16)		Valeo Vision Systems
+				Dunmore Road
+				County Galway    
+				IE
+
+AC-CC-8E   (hex)		Axis Communications AB
+ACCC8E     (base 16)		Axis Communications AB
+				Emdalavägen 14
+				LUND    22369
+				SE
+
+8C-94-CF   (hex)		Encell Technology, Inc.
+8C94CF     (base 16)		Encell Technology, Inc.
+				1412 Sachem Place, Suite 204
+				Charlottesville  VA  22901
+				US
+
+6C-A7-80   (hex)		Nokia Corporation
+6CA780     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+30-57-AC   (hex)		IRLAB LTD.
+3057AC     (base 16)		IRLAB LTD.
+				3rd Floor, 2A Biulding, Huihao Industrial Park
+				Shenzhen  Guang Dong  518106
+				CN
+
+84-2B-50   (hex)		Huria Co.,Ltd.
+842B50     (base 16)		Huria Co.,Ltd.
+				#190-28 Chungchun-2Dong
+				Incheon    403-032
+				KR
+
+48-F7-F1   (hex)		Nokia
+48F7F1     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+8C-8E-76   (hex)		taskit GmbH
+8C8E76     (base 16)		taskit GmbH
+				Groß-Berliner Damm 37
+				Berlin    12487
+				DE
+
+A0-13-3B   (hex)		HiTi Digital, Inc.
+A0133B     (base 16)		HiTi Digital, Inc.
+				9F., No.225, Sec. 3, Beixin Rd., Xindian Dist.,
+				Xindian Dist.  New Taipei City  231
+				TW
+
+9C-57-11   (hex)		Feitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.
+9C5711     (base 16)		Feitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.
+				Building B,Horizon International Tower,No.6 Zhichun Rd,Haidian District,
+				Beijing    100088
+				CN
+
+88-F4-88   (hex)		cellon communications technology(shenzhen)Co.,Ltd.
+88F488     (base 16)		cellon communications technology(shenzhen)Co.,Ltd.
+				13/F C Building,Gaoxin S.Ave.,Hi-Tech Industrial Park,Nanshan,shenzhen518057,PRC
+				shenzhen  Guangdong  518057
+				CN
+
+44-8E-12   (hex)		DT Research, Inc.
+448E12     (base 16)		DT Research, Inc.
+				2000 Concourse Drive 
+				San Jose  CA  95131
+				US
+
+B8-BB-6D   (hex)		ENERES Co.,Ltd.
+B8BB6D     (base 16)		ENERES Co.,Ltd.
+				1907 Tokyo Art Center
+				Adahci-ku  Tokyo  120-0034
+				JP
+
+14-37-3B   (hex)		PROCOM Systems
+14373B     (base 16)		PROCOM Systems
+				#1001, Kranz Techno, 5442-1
+				Seongnam-si  Gyunggi-do  462-729
+				KR
+
+18-97-FF   (hex)		TechFaith Wireless Technology Limited
+1897FF     (base 16)		TechFaith Wireless Technology Limited
+				Building C, Jia No.5, Rongchang East Street, BDA District, 
+				Beijing    100176
+				CN
+
+4C-55-85   (hex)		Hamilton Systems
+4C5585     (base 16)		Hamilton Systems
+				3143 Production Drive
+				Fairfield  OH  45014
+				US
+
+EC-EA-03   (hex)		DARFON LIGHTING CORP
+ECEA03     (base 16)		DARFON LIGHTING CORP
+				167, Shanying Road
+				Gueishan  Taoyuan  33341
+				TW
+
+30-F9-ED   (hex)		Sony Corporation
+30F9ED     (base 16)		Sony Corporation
+				Gotenyama Tec 5-1-2
+				Tokyo  Shinagawa-ku  141-0001
+				JP
+
+58-2E-FE   (hex)		Lighting Science Group
+582EFE     (base 16)		Lighting Science Group
+				1227 South Patrick Drive
+				Satellite Beach  FL  32937
+				US
+
+CC-60-BB   (hex)		Empower RF Systems
+CC60BB     (base 16)		Empower RF Systems
+				316 W. Florence Ave
+				Inglewood  CA  90301
+				US
+
+7C-DD-20   (hex)		IOXOS Technologies S.A.
+7CDD20     (base 16)		IOXOS Technologies S.A.
+				4 Chemin de Fontenailles
+				GLAND  VAUD  CH-1196
+				CH
+
+EC-F2-36   (hex)		NEOMONTANA ELECTRONICS
+ECF236     (base 16)		NEOMONTANA ELECTRONICS
+				Mladost-4, bl. 483, mag. 13
+				Sofia    1715
+				BG
+
+04-18-B6   (hex)		Private
+0418B6     (base 16)		Private
+
+E4-A5-EF   (hex)		TRON LINK ELECTRONICS CO., LTD.
+E4A5EF     (base 16)		TRON LINK ELECTRONICS CO., LTD.
+				FLAT A, 20/F., BLOCK 4,ON NING GARDEN,
+				KOWLOON    999077
+				HK
+
+30-71-B2   (hex)		Hangzhou Prevail Optoelectronic Equipment Co.,LTD.
+3071B2     (base 16)		Hangzhou Prevail Optoelectronic Equipment Co.,LTD.
+				Industrial Development Area, Guali Town,
+				Hangzhou City  Zhe Jiang  311241
+				CN
+
+DC-CE-41   (hex)		FE GLOBAL HONG KONG LIMITED
+DCCE41     (base 16)		FE GLOBAL HONG KONG LIMITED
+				FLAT 204-205 2/F LAFORD CENTRE838 LAI CHI KOK RD CHEUNG SHA WAN KL
+				SHENZHEN    518057
+				CN
+
+FC-6C-31   (hex)		LXinstruments GmbH
+FC6C31     (base 16)		LXinstruments GmbH
+				Herrenberger Str. 130
+				Boeblingen    71034
+				DE
+
+70-5C-AD   (hex)		Konami Gaming Inc
+705CAD     (base 16)		Konami Gaming Inc
+				585 Trade Center Drive
+				Las Vegas  Nevada  89119
+				US
+
+3C-6F-45   (hex)		Fiberpro Inc.
+3C6F45     (base 16)		Fiberpro Inc.
+				59-4 Jang-dong, Yusong-gu
+				  Deajeon  305-343
+				KR
+
+70-31-87   (hex)		ACX GmbH
+703187     (base 16)		ACX GmbH
+				Äußere Zwickauer Straße 8
+				Zwickau    08064
+				DE
+
+30-E4-DB   (hex)		Cisco Systems, Inc
+30E4DB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+88-E0-F3   (hex)		Juniper Networks
+88E0F3     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+80-97-1B   (hex)		Altenergy Power System,Inc.
+80971B     (base 16)		Altenergy Power System,Inc.
+				No.1 Yatai Road, 
+				Jiaxing City,    Zhejiang Province,  314050
+				CN
+
+58-76-75   (hex)		Beijing ECHO Technologies Co.,Ltd
+587675     (base 16)		Beijing ECHO Technologies Co.,Ltd
+				NO1 Street 4 Shangdi  
+				BeiJing    100085
+				CN
+
+0C-51-F7   (hex)		CHAUVIN ARNOUX
+0C51F7     (base 16)		CHAUVIN ARNOUX
+				LA QUEUE DEVEE
+				REUX  PONT L EVEQUE  14130
+				FR
+
+0C-FC-83   (hex)		Airoha Technology Corp.,
+0CFC83     (base 16)		Airoha Technology Corp.,
+				5F, No.6-5, Dushing Road , Hsinchu Science Park
+				Hsinchu    300
+				TW
+
+00-7F-28   (hex)		Actiontec Electronics, Inc
+007F28     (base 16)		Actiontec Electronics, Inc
+				3301 Olcott St.
+				Santa Clara  CA  95054
+				US
+
+80-47-31   (hex)		Packet Design, Inc.
+804731     (base 16)		Packet Design, Inc.
+				2455 Augustine Drive
+				Santa Clara  CA  95054
+				US
+
+B0-9B-D4   (hex)		GNH Software India Private Limited
+B09BD4     (base 16)		GNH Software India Private Limited
+				9/14 Sengani Amman Koil Street
+				Chennai  Tamilnadu  600032
+				IN
+
+F0-8B-FE   (hex)		COSTEL.,CO.LTD
+F08BFE     (base 16)		COSTEL.,CO.LTD
+				223-39, Sangdaewon-Dong, Jungwon-Gu
+				Seongnam-si  Kyunggi-Do  462-807
+				KR
+
+3C-26-D5   (hex)		Sotera Wireless
+3C26D5     (base 16)		Sotera Wireless
+				9444 Waples Street
+				San Diego  CA  92121
+				US
+
+E8-4E-06   (hex)		EDUP INTERNATIONAL (HK) CO., LTD
+E84E06     (base 16)		EDUP INTERNATIONAL (HK) CO., LTD
+				20D Room, Block B, Modern Windows Buidling, FuTian District,
+				Shenzhen  Guangdong  518028
+				CN
+
+00-07-7D   (hex)		Cisco Systems, Inc
+00077D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+CC-D9-E9   (hex)		SCR Engineers Ltd.
+CCD9E9     (base 16)		SCR Engineers Ltd.
+				6 Haomanut St.
+				Netanya    42504
+				IL
+
+34-A7-09   (hex)		Trevil srl
+34A709     (base 16)		Trevil srl
+				Via Copernico 1
+				Pozzo d'Adda  MI  20060
+				IT
+
+E0-C9-22   (hex)		Jireh Energy Tech., Ltd.
+E0C922     (base 16)		Jireh Energy Tech., Ltd.
+				#606 Seoul Forest Hallasigmavalley, 325-2
+				Seoul  Seongdong-Gu  133-120
+				KR
+
+90-5F-8D   (hex)		modas GmbH
+905F8D     (base 16)		modas GmbH
+				Belziger Str. 69-71
+				Berlin    10823
+				DE
+
+98-29-3F   (hex)		Fujian Start Computer Equipment Co.,Ltd
+98293F     (base 16)		Fujian Start Computer Equipment Co.,Ltd
+				No.68 Hongshangyuan Road,  
+				Fuzhou City,   Fujian Province,  350002
+				CN
+
+B4-5C-A4   (hex)		Thing-talk Wireless Communication Technologies Corporation Limited
+B45CA4     (base 16)		Thing-talk Wireless Communication Technologies Corporation Limited
+				498 Guo Shou Jing Road, Suite 10402
+				Shanghai    201203
+				CN
+
+90-8D-1D   (hex)		GH Technologies
+908D1D     (base 16)		GH Technologies
+				5022 Binhe Road, Block B, United Plaza
+				Shenzhen    518026
+				CN
+
+44-4F-5E   (hex)		Pan Studios Co.,Ltd.
+444F5E     (base 16)		Pan Studios Co.,Ltd.
+				1F., NO.402, SEC. 2, JHONGYANG N. RD., BEITOU DISTRICT,
+				TAIPEI CITY     11258
+				TW
+
+D0-AF-B6   (hex)		Linktop Technology Co., LTD
+D0AFB6     (base 16)		Linktop Technology Co., LTD
+				2F Guangye Buliding, Torch Hi-Tech, 
+				Xiamen  Fujian  361006
+				CN
+
+98-EC-65   (hex)		Cosesy ApS
+98EC65     (base 16)		Cosesy ApS
+				Tyttebaervej 2
+				Ans  Jylland  DK-8643
+				DK
+
+AC-C9-35   (hex)		Ness Corporation
+ACC935     (base 16)		Ness Corporation
+				4/167 Prospect Highway
+				Sydney  NSW  2147
+				AU
+
+00-8D-4E   (hex)		CJSC NII STT
+008D4E     (base 16)		CJSC NII STT
+				N.Leningradskaya str, 10
+				Smolensk    214012
+				RU
+
+98-F8-DB   (hex)		Marini Impianti Industriali s.r.l.
+98F8DB     (base 16)		Marini Impianti Industriali s.r.l.
+				Via delle Province, 6A
+				Cisterna di Latina    04012
+				IT
+
+58-E8-08   (hex)		AUTONICS CORPORATION
+58E808     (base 16)		AUTONICS CORPORATION
+				41-5 YONGDANG-DONG
+				YANGSAN-SI  KYEONGNAM  626-847
+				KR
+
+DC-05-ED   (hex)		Nabtesco  Corporation
+DC05ED     (base 16)		Nabtesco  Corporation
+				9-18, Kaigan 1-chome
+				Minato-ku  Tokyo  105-0022
+				JP
+
+4C-98-EF   (hex)		Zeo
+4C98EF     (base 16)		Zeo
+				320 Nevada St
+				Newton   MA  02460
+				US
+
+00-A1-DE   (hex)		ShenZhen ShiHua Technology CO.,LTD
+00A1DE     (base 16)		ShenZhen ShiHua Technology CO.,LTD
+				Room505,5/F TsingYi Building,LangShan 2ed Road,High-Tech Industrial Park,
+				ShenZhen  GuangDong  518052
+				CN
+
+80-6C-BC   (hex)		NET New Electronic Technology GmbH
+806CBC     (base 16)		NET New Electronic Technology GmbH
+				Lerchenberg 7
+				Finning  Bavarian  86923
+				DE
+
+90-90-60   (hex)		RSI VIDEO TECHNOLOGIES
+909060     (base 16)		RSI VIDEO TECHNOLOGIES
+				56, Rue Jean-Giraudoux - BAT 60
+				STRASBOURG  Bas-Rhin  67200
+				FR
+
+BC-81-99   (hex)		BASIC Co.,Ltd.
+BC8199     (base 16)		BASIC Co.,Ltd.
+				Keiefu-Building 9F
+				Minato-ku  Tokyo  108-0014
+				JP
+
+DC-A7-D9   (hex)		Compressor Controls Corp
+DCA7D9     (base 16)		Compressor Controls Corp
+				4725 121st Street
+				Des Moines  Iowa  50323
+				US
+
+38-FE-C5   (hex)		Ellips B.V.
+38FEC5     (base 16)		Ellips B.V.
+				Esp 300
+				Eindhoven  Noord-Brabant  5633 AE
+				NL
+
+C4-55-A6   (hex)		Cadac Holdings Ltd
+C455A6     (base 16)		Cadac Holdings Ltd
+				1 New Street
+				Luton  Bedfordshire  LU1 5DX
+				GB
+
+5C-77-57   (hex)		Haivision Network Video
+5C7757     (base 16)		Haivision Network Video
+				4445 Garand
+				Montreal  QC  H4R 2H9
+				CA
+
+D4-D8-98   (hex)		Korea CNO Tech Co., Ltd
+D4D898     (base 16)		Korea CNO Tech Co., Ltd
+				#240-1,Uigok-Ri
+				Mungyeong-Si  Gyeongsangbuk-do  745-853
+				KR
+
+B4-AA-4D   (hex)		Ensequence, Inc.
+B4AA4D     (base 16)		Ensequence, Inc.
+				111 SW 5th Ave Suite 1400
+				Portland  OR  97204
+				US
+
+B8-3D-4E   (hex)		Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch
+B83D4E     (base 16)		Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch
+				2/F,Building#5,1690Cailun Road,Zhangjiang Hi-tech Park,
+				Shanghai    201203
+				CN
+
+50-87-B8   (hex)		Nuvyyo Inc
+5087B8     (base 16)		Nuvyyo Inc
+				1 Smythe Rd
+				Carleton Place  Ontario  K7C4J4
+				CA
+
+C0-EA-E4   (hex)		Sonicwall
+C0EAE4     (base 16)		Sonicwall
+				2001 Logic Drive
+				San Jose  CA  95124-3452
+				US
+
+08-38-A5   (hex)		Funkwerk plettac electronic GmbH
+0838A5     (base 16)		Funkwerk plettac electronic GmbH
+				Wuerzburger Str. 150
+				Fuerth  Bavaria  90766
+				DE
+
+CC-1E-FF   (hex)		Metrological Group BV
+CC1EFF     (base 16)		Metrological Group BV
+				Mariniersweg 151
+				Rotterdam  Zuid-Holland  3011NK
+				NL
+
+18-4E-94   (hex)		MESSOA TECHNOLOGIES INC.
+184E94     (base 16)		MESSOA TECHNOLOGIES INC.
+				13611 12th St., Unit B
+				Chino  CA  91710
+				US
+
+6C-39-1D   (hex)		Beijing ZhongHuaHun Network Information center
+6C391D     (base 16)		Beijing ZhongHuaHun Network Information center
+				6F BeiAo Mansion,HuiXin East Street A2,
+				Beijing    100029
+				CN
+
+80-B3-2A   (hex)		UK Grid Solutions Ltd
+80B32A     (base 16)		UK Grid Solutions Ltd
+				Harry Kerr Drive
+				Stafford   Staffordshire  ST17 4LX
+				GB
+
+40-55-39   (hex)		Cisco Systems, Inc
+405539     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E0-F2-11   (hex)		Digitalwatt
+E0F211     (base 16)		Digitalwatt
+				Via Dante, 18
+				Renate Brianza  MB  20055
+				IT
+
+F8-69-71   (hex)		Seibu Electric Co.,
+F86971     (base 16)		Seibu Electric Co.,
+				1458-7
+				Hachioji  Tokyo  193-0941
+				JP
+
+44-AA-27   (hex)		udworks Co., Ltd.
+44AA27     (base 16)		udworks Co., Ltd.
+				#810, Byuksan3cha Digital Valley, 212-13, Guro-dong, Guro-gu
+				Seoul    152-775
+				KR
+
+E8-F9-28   (hex)		RFTECH SRL
+E8F928     (base 16)		RFTECH SRL
+				VIA VENETO, 22
+				SCHIO  VICENZA  36015
+				IT
+
+1C-95-5D   (hex)		I-LAX ELECTRONICS INC.
+1C955D     (base 16)		I-LAX ELECTRONICS INC.
+				2283 ARGENTIA RD.- UNIT # 10
+				MISSISSAUGA  ON.  L5N 5Z2
+				CA
+
+60-F5-9C   (hex)		CRU-Dataport
+60F59C     (base 16)		CRU-Dataport
+				1000 SE Tech Center Drive
+				Vancouver  WA  98683
+				US
+
+B0-A7-2A   (hex)		Ensemble Designs, Inc.
+B0A72A     (base 16)		Ensemble Designs, Inc.
+				870 Gold Flat Road
+				Nevada City  CA  95959
+				US
+
+64-00-F1   (hex)		Cisco Systems, Inc
+6400F1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B8-F4-D0   (hex)		Herrmann Ultraschalltechnik GmbH & Co. Kg
+B8F4D0     (base 16)		Herrmann Ultraschalltechnik GmbH & Co. Kg
+				Descostraße 3-9
+				Karlsbad  Baden-Württemberg  76307
+				DE
+
+08-AC-A5   (hex)		Benu Video, Inc.
+08ACA5     (base 16)		Benu Video, Inc.
+				300 Concord Rd., Suite #110
+				Billerica  MA  01821
+				US
+
+58-6D-8F   (hex)		Cisco-Linksys, LLC
+586D8F     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+10-E3-C7   (hex)		Seohwa Telecom
+10E3C7     (base 16)		Seohwa Telecom
+				678 Seohwa Bldg
+				Gasan-Dong, Gumcheon-Gu  Seoul  153-803
+				KR
+
+74-65-D1   (hex)		Atlinks
+7465D1     (base 16)		Atlinks
+				30 Avenue Geroge V
+				Paris    75008
+				FR
+
+04-0A-83   (hex)		Alcatel-Lucent
+040A83     (base 16)		Alcatel-Lucent
+				Via Trento, 30
+				Vimenrcate  MB  2059
+				IT
+
+C4-56-00   (hex)		Galleon Embedded Computing
+C45600     (base 16)		Galleon Embedded Computing
+				Grenseveien 97c
+				Oslo  Oslo  N-0602
+				NO
+
+BC-3E-13   (hex)		Accordance Systems Inc.
+BC3E13     (base 16)		Accordance Systems Inc.
+				2F, No. 31, Sec. 6, Hsin Yi Road
+				Taipei    11085
+				TW
+
+A8-1B-18   (hex)		XTS CORP
+A81B18     (base 16)		XTS CORP
+				10125 NW 116TH WAY, SUITE 5
+				MEDLEY  FLORIDA  33178
+				US
+
+D0-A3-11   (hex)		Neuberger Gebäudeautomation GmbH
+D0A311     (base 16)		Neuberger Gebäudeautomation GmbH
+				Oberer Kaiserweg 6
+				Rothenburg o.d.T.  Bayern  91541
+				DE
+
+04-1D-10   (hex)		Dream Ware Inc.
+041D10     (base 16)		Dream Ware Inc.
+				5-23-7 Masugata, Tama-ku,
+				Kawasaki  Kanagawa  214-0032
+				JP
+
+80-14-40   (hex)		Sunlit System Technology Corp
+801440     (base 16)		Sunlit System Technology Corp
+				8F, No.19,Lane 120, Sec1, Neihu Rd.
+				Tapiei    114
+				TW
+
+18-0B-52   (hex)		Nanotron Technologies GmbH
+180B52     (base 16)		Nanotron Technologies GmbH
+				Alt-Moabit 60
+				Berlin    10555
+				DE
+
+DC-07-C1   (hex)		HangZhou QiYang Technology Co.,Ltd.
+DC07C1     (base 16)		HangZhou QiYang Technology Co.,Ltd.
+				Floor 5, Building 2, Road XiYuanYi, WestLake Technology Park,
+				HangZhou  ZheJiang  310028
+				CN
+
+C0-A2-6D   (hex)		Abbott Point of Care
+C0A26D     (base 16)		Abbott Point of Care
+				400 College Road East
+				Princeton  NJ  08540
+				US
+
+00-BB-8E   (hex)		HME Co., Ltd.
+00BB8E     (base 16)		HME Co., Ltd.
+				No.200 , Liao Bei Str.,San Min Dist.,
+				Kaohsiung    807
+				TW
+
+D8-2A-7E   (hex)		Nokia Corporation
+D82A7E     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+80-1F-02   (hex)		Edimax Technology Co. Ltd.
+801F02     (base 16)		Edimax Technology Co. Ltd.
+				No. 278, Xinhu 1st Road
+				Taipei City  Neihu Dist  248
+				TW
+
+58-EE-CE   (hex)		Icon Time Systems
+58EECE     (base 16)		Icon Time Systems
+				15201 NW Greenbrier Parkway
+				Beaverton  OR  97006
+				US
+
+64-7F-DA   (hex)		TEKTELIC Communications Inc.
+647FDA     (base 16)		TEKTELIC Communications Inc.
+				7657 10th Street NE
+				Calgary  Alberta  T2E 8X2
+				CA
+
+AC-06-13   (hex)		Senselogix Ltd
+AC0613     (base 16)		Senselogix Ltd
+				56 Carlton Court, Ford William Morgan
+				St. Asaph  Debighshire  LL17 0JG
+				GB
+
+74-78-18   (hex)		Jurumani Solutions
+747818     (base 16)		Jurumani Solutions
+				321 14th Road
+				Midrand    1685
+				ZA
+
+E0-1F-0A   (hex)		Xslent Energy Technologies. LLC
+E01F0A     (base 16)		Xslent Energy Technologies. LLC
+				7428 Redwood Blvd
+				Novato  CA  94945
+				US
+
+44-37-19   (hex)		2 Save Energy Ltd
+443719     (base 16)		2 Save Energy Ltd
+				The Annexe, Field House Barn
+				Sherborne St John  Hampshire  RG24 9LR
+				GB
+
+84-EA-99   (hex)		Vieworks
+84EA99     (base 16)		Vieworks
+				6F Suntechcity 2,307-2 Sangdaewon-dong, Jungwon-gu
+				Seongnam   Gyeonggi  462-806
+				KR
+
+E0-0C-7F   (hex)		Nintendo Co., Ltd.
+E00C7F     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+E4-8A-D5   (hex)		RF WINDOW CO., LTD.
+E48AD5     (base 16)		RF WINDOW CO., LTD.
+				14F, Daerung Posttower3
+				Seoul    152-746
+				KR
+
+FC-F1-CD   (hex)		OPTEX-FA CO.,LTD.
+FCF1CD     (base 16)		OPTEX-FA CO.,LTD.
+				91 Awata-cho
+				Kyoto    600-8815
+				JP
+
+44-25-BB   (hex)		Bamboo Entertainment Corporation
+4425BB     (base 16)		Bamboo Entertainment Corporation
+				179 South Street
+				Boston  MA  02111
+				US
+
+7C-DA-84   (hex)		Dongnian Networks Inc.
+7CDA84     (base 16)		Dongnian Networks Inc.
+				90 Wensan Road, Building 8-A303
+				Hangzhou  Zhejiang  310012
+				CN
+
+BC-C6-1A   (hex)		SPECTRA EMBEDDED SYSTEMS
+BCC61A     (base 16)		SPECTRA EMBEDDED SYSTEMS
+				Khasra No. 24, Village Ghumman,1st Floor, Chawla Mansion,
+				Parwanoo  Himachal Pradesh  173 220
+				IN
+
+04-70-BC   (hex)		Globalstar Inc.
+0470BC     (base 16)		Globalstar Inc.
+				461 S Milpitas Blvd
+				Milpitas  CA  95035
+				US
+
+88-DD-79   (hex)		Voltaire
+88DD79     (base 16)		Voltaire
+				13, Zarchin St
+				Raanana    43662
+				IL
+
+64-F9-87   (hex)		Avvasi Inc.
+64F987     (base 16)		Avvasi Inc.
+				103 Randall Dr.
+				Waterloo  ON  N2V 1C5
+				CA
+
+D8-5D-84   (hex)		CAx soft GmbH
+D85D84     (base 16)		CAx soft GmbH
+				Noettinger Strasse 3
+				Karlsbad  BW  76307
+				DE
+
+D4-E3-2C   (hex)		S. Siedle & Sohne
+D4E32C     (base 16)		S. Siedle & Sohne
+				Bregstrasse 1
+				Furtwangen    D-78120
+				DE
+
+7C-6A-DB   (hex)		SafeTone Technology Co.,Ltd
+7C6ADB     (base 16)		SafeTone Technology Co.,Ltd
+				Room 323,ZhuouJi Plaza,No.16 AnDe Road,East District,
+				Beijing    100011
+				CN
+
+90-2E-87   (hex)		LabJack
+902E87     (base 16)		LabJack
+				3232 S Vance St STE 100
+				Lakewood  CO  80227
+				US
+
+A4-24-B3   (hex)		FlatFrog Laboratories AB
+A424B3     (base 16)		FlatFrog Laboratories AB
+				Magistratsvägen 10
+				Lund  Skåne  22643
+				SE
+
+94-CD-AC   (hex)		Creowave Oy
+94CDAC     (base 16)		Creowave Oy
+				Lentokatu 2
+				Oulunsalo    FIN-90460
+				FI
+
+14-4C-1A   (hex)		Max Communication GmbH
+144C1A     (base 16)		Max Communication GmbH
+				Siemensstrasse 47
+				Rellingen    25462
+				DE
+
+34-08-04   (hex)		D-Link Corporation
+340804     (base 16)		D-Link Corporation
+				No.289, Sinhu 3rd Rd., Neihu District, 
+				Taipei City     114
+				TW
+
+F0-5D-89   (hex)		Dycon Limited
+F05D89     (base 16)		Dycon Limited
+				Unit D
+				Mountain Ash  Rhondda Cynon Taff  CF45 4ER
+				GB
+
+AC-80-D6   (hex)		Hexatronic AB
+AC80D6     (base 16)		Hexatronic AB
+				Exportgatan 47B
+				Gothenburg    42246 
+				SE
+
+9C-F9-38   (hex)		AREVA NP GmbH
+9CF938     (base 16)		AREVA NP GmbH
+				Seligenstaedter Str. 100
+				Karlstein  Germany  63791
+				DE
+
+8C-DB-25   (hex)		ESG Solutions
+8CDB25     (base 16)		ESG Solutions
+				20 Hyperion Court
+				Kingston  Ontario  K7K 7K2
+				CA
+
+FC-35-98   (hex)		Favite Inc.
+FC3598     (base 16)		Favite Inc.
+				No.19, Lane 78, Yanhe St.,
+				Jhubei City  Hsinchu County  302
+				TW
+
+90-D9-2C   (hex)		HUG-WITSCHI AG
+90D92C     (base 16)		HUG-WITSCHI AG
+				Auriedstrasse 10
+				Boesingen  Fribourg  3178
+				CH
+
+98-8E-34   (hex)		ZHEJIANG BOXSAM ELECTRONIC CO.,LTD
+988E34     (base 16)		ZHEJIANG BOXSAM ELECTRONIC CO.,LTD
+				No.288,LONGTAN ROAD,
+				JINHUA CITY  ZHEJIANG PROVINCE,  321017
+				CN
+
+C4-71-FE   (hex)		Cisco Systems, Inc
+C471FE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+40-22-ED   (hex)		Digital Projection Ltd
+4022ED     (base 16)		Digital Projection Ltd
+				Greenside Way
+				Manchester  Lancs  M24 1XX
+				GB
+
+98-94-49   (hex)		Skyworth Wireless Technology Ltd.
+989449     (base 16)		Skyworth Wireless Technology Ltd.
+				Unit A Rm.3A01, Skyworth Bldg., Gaoxin Ave. 1.S.,
+				Nanshan District  Shenzhen  518057
+				CN
+
+2C-A1-57   (hex)		acromate, Inc.
+2CA157     (base 16)		acromate, Inc.
+				#1101, JnK Digital Tower, 111
+				Seoul    152-848
+				KR
+
+94-20-53   (hex)		Nokia Corporation
+942053     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+28-85-2D   (hex)		Touch Networks
+28852D     (base 16)		Touch Networks
+				2515 152nd Ave NE
+				Redmond  Washington  98052
+				US
+
+B8-BA-68   (hex)		Xi'an Jizhong Digital Communication Co.,Ltd
+B8BA68     (base 16)		Xi'an Jizhong Digital Communication Co.,Ltd
+				10 Block NO.1 Enterprise Newly-typed Industrial Zone High-Tech Zone XiÂ¡Â¯an,China
+				Xi'an  ShaanXi  710119
+				CN
+
+B0-B3-2B   (hex)		Slican Sp. z o.o.
+B0B32B     (base 16)		Slican Sp. z o.o.
+				M. Konopnickiej 18
+				Bydgoszcz  Kujawsko-Pomorskie  85-124
+				PL
+
+58-42-E4   (hex)		Baxter International Inc
+5842E4     (base 16)		Baxter International Inc
+				One Baxter Parkway
+				Deerfield  IL  60015
+				US
+
+B8-79-7E   (hex)		Secure Meters (UK) Limited
+B8797E     (base 16)		Secure Meters (UK) Limited
+				Secure House
+				Winchester  Hampshire  SO23 7RX
+				GB
+
+CC-9E-00   (hex)		Nintendo Co., Ltd.
+CC9E00     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+58-A7-6F   (hex)		iD corporation
+58A76F     (base 16)		iD corporation
+				goryokaku bld. 2F
+				hakodate  hokkaido  040-0011
+				JP
+
+00-06-F6   (hex)		Cisco Systems, Inc
+0006F6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-7D-B6   (hex)		Aliwei Communications, Inc
+747DB6     (base 16)		Aliwei Communications, Inc
+				Keji 6 Road , Hi-tech Industrial Park  
+				Shenzhen  Guangdong  518057
+				CN
+
+B0-65-63   (hex)		Shanghai Railway Communication Factory
+B06563     (base 16)		Shanghai Railway Communication Factory
+				No.179 West Jiangchang road
+				Shanghai    200436
+				CN
+
+40-18-D7   (hex)		Smartronix, Inc.
+4018D7     (base 16)		Smartronix, Inc.
+				44150 Smartronix Way
+				Hollywood  MD  20636
+				US
+
+4C-2C-80   (hex)		Beijing Skyway Technologies Co.,Ltd 
+4C2C80     (base 16)		Beijing Skyway Technologies Co.,Ltd 
+				No.5 Jiangtai Road, 
+				Beijing    100015
+				CN
+
+D4-9E-6D   (hex)		Wuhan Zhongyuan Huadian Science & Technology Co.,
+D49E6D     (base 16)		Wuhan Zhongyuan Huadian Science & Technology Co.,
+				NO.6, 6 Road, Sci. & Tech. region of HUST, East Lake Development Zone,
+				Wuhan   Hubei  430223
+				CN
+
+6C-2E-33   (hex)		Accelink Technologies Co.,Ltd.
+6C2E33     (base 16)		Accelink Technologies Co.,Ltd.
+				88 Youkeyuan Road,
+				Wuhan  Hubei  430074
+				CN
+
+40-98-7B   (hex)		Aisino Corporation
+40987B     (base 16)		Aisino Corporation
+				No.18 A,Xingshikou Road,Haidian District,
+				Beijing    100195
+				CN
+
+BC-38-D2   (hex)		Pandachip Limited
+BC38D2     (base 16)		Pandachip Limited
+				Unit 210, 2/F (Lakeside 1), Building 15, No. 8 Science Park West Avenue
+				Shatin, N.T.    
+				HK
+
+20-05-E8   (hex)		OOO InProMedia
+2005E8     (base 16)		OOO InProMedia
+				pr.4806, d.6
+				Zelenograd  Moscow  124466
+				RU
+
+F0-02-48   (hex)		SmarteBuilding
+F00248     (base 16)		SmarteBuilding
+				3267 Bee Cave Road
+				Austin  TX  78746
+				US
+
+AC-6F-4F   (hex)		Enspert Inc
+AC6F4F     (base 16)		Enspert Inc
+				2F., Daehwa B/D, 
+				Seoul    135090
+				KR
+
+E8-28-77   (hex)		TMY Co., Ltd.
+E82877     (base 16)		TMY Co., Ltd.
+				Attic Bldg. 3F, 1-2-10 Ise-cho,
+				Ashikaga-shi  Tochigi  326-0053
+				JP
+
+F0-C8-8C   (hex)		LeddarTech Inc.
+F0C88C     (base 16)		LeddarTech Inc.
+				2740 Einstein Street
+				Quebec City    G1P 4S4
+				CA
+
+40-37-AD   (hex)		Macro Image Technology, Inc.
+4037AD     (base 16)		Macro Image Technology, Inc.
+				East Bldg., 6th Floor, IT Venture Tower,
+				Seoul    138-950
+				KR
+
+28-ED-58   (hex)		JAG Jakob AG
+28ED58     (base 16)		JAG Jakob AG
+				Industriestrasse 20
+				BRUEGG  BE  2555
+				CH
+
+48-6B-91   (hex)		Fleetwood Group Inc.
+486B91     (base 16)		Fleetwood Group Inc.
+				11832 James St
+				Holland  Michigan  49424
+				US
+
+64-34-09   (hex)		BITwave Pte Ltd
+643409     (base 16)		BITwave Pte Ltd
+				2 Serangoon North Ave 5
+				    554911
+				SG
+
+40-C2-45   (hex)		Shenzhen Hexicom Technology Co., Ltd.
+40C245     (base 16)		Shenzhen Hexicom Technology Co., Ltd.
+				1510 West Building,Nanshan Software Park, Nanshan Dist.
+				Shenzhen  Guangdong  518053
+				CN
+
+CC-55-AD   (hex)		RIM
+CC55AD     (base 16)		RIM
+				Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+E8-75-7F   (hex)		FIRS Technologies(Shenzhen) Co., Ltd
+E8757F     (base 16)		FIRS Technologies(Shenzhen) Co., Ltd
+				Rm 12A, Area A, Hongsong Business Building, Tairan 9th Rd, Chegongmiao, 
+				Shenzhen  Guangdong  518040
+				CN
+
+F0-F7-B3   (hex)		Phorm
+F0F7B3     (base 16)		Phorm
+				222 Regent Street
+				London    W1B 5TR
+				GB
+
+00-D3-8D   (hex)		Hotel Technology Next Generation
+00D38D     (base 16)		Hotel Technology Next Generation
+				650 E. Algonquin Road
+				Schaumburg  IL  60173
+				US
+
+C8-3E-A7   (hex)		KUNBUS GmbH
+C83EA7     (base 16)		KUNBUS GmbH
+				Heerweg 15C
+				Denkendorf  BW  D-73770
+				DE
+
+60-89-3C   (hex)		Thermo Fisher Scientific P.O.A.
+60893C     (base 16)		Thermo Fisher Scientific P.O.A.
+				46 Jonspin Rd.
+				Wilmington  MA  01887
+				US
+
+D8-6B-F7   (hex)		Nintendo Co., Ltd.
+D86BF7     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+74-CD-0C   (hex)		Smith Myers Communications Ltd.
+74CD0C     (base 16)		Smith Myers Communications Ltd.
+				The Omega Centre
+				Biggleswade  BEDS  SG18 8QB
+				GB
+
+CC-CE-40   (hex)		Janteq Corp
+CCCE40     (base 16)		Janteq Corp
+				9272 Jeronimo Road
+				Irvine  CA  92618
+				US
+
+B8-EE-79   (hex)		YWire Technologies, Inc.
+B8EE79     (base 16)		YWire Technologies, Inc.
+				1372 Overdale
+				Montreal  QC  H3G 1V3
+				CA
+
+74-D6-75   (hex)		WYMA Tecnologia
+74D675     (base 16)		WYMA Tecnologia
+				Rua Clímaco Barbosa, 171-179
+				São Paulo    01523-000
+				BR
+
+B4-0E-DC   (hex)		LG-Ericsson Co.,Ltd.
+B40EDC     (base 16)		LG-Ericsson Co.,Ltd.
+				533,Hogye-1dong,Dongan-gu
+				Anyang-shi  Kyungki-do  431-749
+				KR
+
+E0-EE-1B   (hex)		Panasonic Automotive Systems Company of America
+E0EE1B     (base 16)		Panasonic Automotive Systems Company of America
+				776 Highway 74 South
+				Peachtree City  Georgia  30269
+				US
+
+74-BE-08   (hex)		ATEK Products, LLC
+74BE08     (base 16)		ATEK Products, LLC
+				210 NE 10th Avenue
+				Brainerd  MN  56401
+				US
+
+60-63-FD   (hex)		Transcend Communication Beijing Co.,Ltd.
+6063FD     (base 16)		Transcend Communication Beijing Co.,Ltd.
+				A-6,Keshi plaza,28#,Information Road
+				Beijing    100085
+				CN
+
+D8-B6-C1   (hex)		NetworkAccountant, Inc.
+D8B6C1     (base 16)		NetworkAccountant, Inc.
+				12101 Tukwila International Blvd.
+				Seattle  Washington  98168
+				US
+
+74-A4-A7   (hex)		QRS Music Technologies, Inc.
+74A4A7     (base 16)		QRS Music Technologies, Inc.
+				269 Quaker Drive
+				Seneca  PA  16346
+				US
+
+70-02-58   (hex)		01DB-METRAVIB
+700258     (base 16)		01DB-METRAVIB
+				200 CHEMIN DES ORMEAUX
+				LIMONEST CEDEX  RHONE  69578
+				FR
+
+F4-55-E0   (hex)		Niceway CNC Technology Co.,Ltd.Hunan Province
+F455E0     (base 16)		Niceway CNC Technology Co.,Ltd.Hunan Province
+				5/F,Innovation-Undertaking Center,HuanBao Industrial Park,199#,ZhenHua Road,
+				Changsha  Hunan  410116
+				CN
+
+20-FD-F1   (hex)		3COM EUROPE LTD
+20FDF1     (base 16)		3COM EUROPE LTD
+				Peoplebuilding 2
+				Hemel Hempstead  HERTS.  HP2 4NW
+				GB
+
+84-97-B8   (hex)		Memjet Inc.
+8497B8     (base 16)		Memjet Inc.
+				15920 Bernardo Center Drive
+				San Diego  CA  92127
+				US
+
+A0-DD-E5   (hex)		SHARP Corporation
+A0DDE5     (base 16)		SHARP Corporation
+				22-22,Nagaike-cho
+				Osaka city  Osaka prefecture  545-8522
+				JP
+
+20-6A-FF   (hex)		Atlas Elektronik UK Limited
+206AFF     (base 16)		Atlas Elektronik UK Limited
+				A22 Buliding, Dorset Green Tech. Park
+				Dorchester  Dorset  DT2 8ZB
+				GB
+
+AC-34-CB   (hex)		Shanhai GBCOM Communication Technology Co. Ltd
+AC34CB     (base 16)		Shanhai GBCOM Communication Technology Co. Ltd
+				Room 602, Building 6, No.555 Dongchuan Road
+				Shanghai     200241
+				CN
+
+90-88-A2   (hex)		IONICS TECHNOLOGY ME LTDA
+9088A2     (base 16)		IONICS TECHNOLOGY ME LTDA
+				RUA DEP. ANTONIO EDU VIEIRA
+				FLORIAN POLIS  SANTA CATARINA  88040000
+				BR
+
+40-CD-3A   (hex)		Z3 Technology
+40CD3A     (base 16)		Z3 Technology
+				2720 Harrison St
+				Evanston  IL  60201
+				US
+
+48-2C-EA   (hex)		Motorola Inc Business Light Radios
+482CEA     (base 16)		Motorola Inc Business Light Radios
+				8000 W Sunrise Boulevard
+				Plantation  Florida  33324
+				US
+
+00-33-6C   (hex)		SynapSense Corporation
+00336C     (base 16)		SynapSense Corporation
+				2365 Iron Point Road, Suite 100
+				Folsom  CA  95630
+				US
+
+F8-66-F2   (hex)		Cisco Systems, Inc
+F866F2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+AC-61-23   (hex)		Drivven, Inc.
+AC6123     (base 16)		Drivven, Inc.
+				12001 Network Boulevard
+				San Antonio  TX  78249
+				US
+
+10-0C-24   (hex)		pomdevices, LLC
+100C24     (base 16)		pomdevices, LLC
+				178 Colvard Park Dr
+				Durham  NC  27713
+				US
+
+58-F6-BF   (hex)		Kyoto University
+58F6BF     (base 16)		Kyoto University
+				Yoshida-Hommachi
+				Kyoto    6068501
+				JP
+
+78-EC-22   (hex)		Shanghai Qihui Telecom Technology Co., LTD
+78EC22     (base 16)		Shanghai Qihui Telecom Technology Co., LTD
+				Room 501, No 2 BoYun Rd, PuDong New Area, 
+				Shanghai    201203
+				CN
+
+0C-15-C5   (hex)		SDTEC Co., Ltd.
+0C15C5     (base 16)		SDTEC Co., Ltd.
+				167, Churye-2Dong, Sasang-Gu,
+				Busan     617-716
+				KR
+
+FC-75-E6   (hex)		Handreamnet
+FC75E6     (base 16)		Handreamnet
+				#1209 MarioTower, 222-12, Guro-Dong, Guro-Gu
+				Seoul  Guro-Gu  152-848
+				KR
+
+A0-A7-63   (hex)		Polytron Vertrieb GmbH
+A0A763     (base 16)		Polytron Vertrieb GmbH
+				Langwiesenweg 64-71
+				Bad Wildbad  Baden-Württemberg  75323
+				DE
+
+EC-23-68   (hex)		IntelliVoice Co.,Ltd.
+EC2368     (base 16)		IntelliVoice Co.,Ltd.
+				3-6 Kioicho
+				Chiyoda  Tokyo  102-0094
+				JP
+
+74-90-50   (hex)		Renesas Electronics Corporation
+749050     (base 16)		Renesas Electronics Corporation
+				1753, Shimonumabe, Nakahara-Ku
+				Kawasaki  Kanagawa  211-8668
+				JP
+
+A4-21-8A   (hex)		Nortel Networks
+A4218A     (base 16)		Nortel Networks
+				CARRETERA BASE AEREA # 5850
+				Zapopan  Jalisco  44130
+				MX
+
+F8-FB-2F   (hex)		Santur Corporation
+F8FB2F     (base 16)		Santur Corporation
+				40931 Encyclopedia Circle
+				Fremont  California  94538
+				US
+
+2C-CD-43   (hex)		Summit Technology Group
+2CCD43     (base 16)		Summit Technology Group
+				145 Belmont Drive
+				Somerset  NJ  08873
+				US
+
+64-99-5D   (hex)		LGE 
+64995D     (base 16)		LGE 
+				60-39 , Kasan -dong , Gumcheon-gu.
+				Seoul     153-801
+				KR
+
+7C-EF-18   (hex)		Creative Product Design Pty. Ltd.
+7CEF18     (base 16)		Creative Product Design Pty. Ltd.
+				82 Victoria Street
+				Sandringham  Victoria  3191
+				AU
+
+FC-7C-E7   (hex)		FCI USA LLC
+FC7CE7     (base 16)		FCI USA LLC
+				825 Old Trail Road
+				Etters  PA  17319
+				US
+
+14-54-12   (hex)		Entis Co., Ltd.
+145412     (base 16)		Entis Co., Ltd.
+				2-20-6, Hanaoka Bldg, 6F
+				Tokyo    1030007
+				JP
+
+7C-3E-9D   (hex)		PATECH
+7C3E9D     (base 16)		PATECH
+				#23-17. WonhyoRo-2Ga
+				YongSan-Gu  Seoul  140112
+				KR
+
+24-45-97   (hex)		GEMUE Gebr. Mueller Apparatebau
+244597     (base 16)		GEMUE Gebr. Mueller Apparatebau
+				Fritz-Mueller-Strasse 6-8
+				Ingelfingen Criesbach    74653
+				DE
+
+78-81-8F   (hex)		Server Racks Australia Pty Ltd
+78818F     (base 16)		Server Racks Australia Pty Ltd
+				4 - 6 Endurance Ave
+				Queanbeyan  NSW  2620
+				AU
+
+28-48-46   (hex)		GridCentric Inc.
+284846     (base 16)		GridCentric Inc.
+				350 Bloor St. E
+				Toronto  Ontario  M4W 0A1
+				CA
+
+30-69-4B   (hex)		RIM
+30694B     (base 16)		RIM
+				295 Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+6C-62-6D   (hex)		Micro-Star INT'L CO., LTD
+6C626D     (base 16)		Micro-Star INT'L CO., LTD
+				No.69, Lide St., Jhonghe City
+				Taipei Conuty    235
+				TW
+
+28-06-8D   (hex)		ITL, LLC
+28068D     (base 16)		ITL, LLC
+				P.O. Box 41875
+				Nashville  TN  37204
+				US
+
+C0-0D-7E   (hex)		Additech, Inc.
+C00D7E     (base 16)		Additech, Inc.
+				10925 Kinghurst
+				Houston  TX  77099
+				US
+
+84-C7-A9   (hex)		C3PO S.A.
+84C7A9     (base 16)		C3PO S.A.
+				Alejandro Goicoechea 6 Local 9
+				Sant Just Desvern  Barcelona  ES08960
+				ES
+
+D8-71-57   (hex)		Lenovo Mobile Communication Technology Ltd.
+D87157     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				No.999,Qishan North 2nd Road,Information&Optoelectronics Park,Torch Hi-tech Industry Development Zone,
+				Xiamen  Fujian  361006
+				CN
+
+60-9A-A4   (hex)		GVI SECURITY INC.
+609AA4     (base 16)		GVI SECURITY INC.
+				2801 TRADE CENTER DR STE.120
+				CARROLLTON  TX  75007
+				US
+
+64-10-84   (hex)		HEXIUM Technical Development Co., Ltd.
+641084     (base 16)		HEXIUM Technical Development Co., Ltd.
+				Vaci ut 51b
+				BUDAPEST    H-1134
+				HU
+
+34-21-09   (hex)		Jensen Scandinavia AS
+342109     (base 16)		Jensen Scandinavia AS
+				Balder Allé 3
+				Jessheim    2050
+				NO
+
+3C-10-6F   (hex)		ALBAHITH TECHNOLOGIES 
+3C106F     (base 16)		ALBAHITH TECHNOLOGIES 
+				165, King Abdullah Second Street
+				Amman    11953
+				JO
+
+0C-DD-EF   (hex)		Nokia Corporation
+0CDDEF     (base 16)		Nokia Corporation
+				Elektroniikkatie 10
+				Oulu    90570
+				FI
+
+EC-FE-7E   (hex)		BlueRadios, Inc.
+ECFE7E     (base 16)		BlueRadios, Inc.
+				7173 S. Havana Street, Suite 600
+				Englewood  Colorado  80112
+				US
+
+E4-AD-7D   (hex)		SCL Elements
+E4AD7D     (base 16)		SCL Elements
+				5800 St-Denis, #222
+				Montreal  Quebec  H2S3l5
+				CA
+
+F0-9C-BB   (hex)		RaonThink Inc.
+F09CBB     (base 16)		RaonThink Inc.
+				916, Byucksan Digital Valley 2-Cha, 481-10, Kasan-Dong, Kumcheon-Gu, 
+				Seoul    153-783
+				KR
+
+10-CC-DB   (hex)		AXIMUM PRODUITS ELECTRONIQUES
+10CCDB     (base 16)		AXIMUM PRODUITS ELECTRONIQUES
+				ZI DELTA INDUSTRIE
+				MARSEILLE CEDEX 11    13368
+				FR
+
+38-C7-BA   (hex)		CS Services Co.,Ltd.
+38C7BA     (base 16)		CS Services Co.,Ltd.
+				Imon BLDG 95 Edomachi
+				Kobe  Hyogo  6500033
+				JP
+
+EC-5C-69   (hex)		MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD.
+EC5C69     (base 16)		MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD.
+				1-16,5-CHOME,KOMATSU-DORI,
+				KOBE  HYOGO  652-0865
+				JP
+
+6C-92-BF   (hex)		Inspur Electronic Information Industry Co.,Ltd.
+6C92BF     (base 16)		Inspur Electronic Information Industry Co.,Ltd.
+				No 224 Shanda Road
+				Jinan  Shandong  250013
+				CN
+
+44-A8-C2   (hex)		SEWOO TECH CO., LTD
+44A8C2     (base 16)		SEWOO TECH CO., LTD
+				689-20 GEUMJUNG-DONG 
+				GUNPO-SI  KYUNGGI-DO  435-862
+				KR
+
+80-EE-73   (hex)		Shuttle Inc.
+80EE73     (base 16)		Shuttle Inc.
+				No. 30 Lane 76, Rei Kuang Rd
+				Taipei    114
+				TW
+
+FC-E2-3F   (hex)		CLAY PAKY SPA
+FCE23F     (base 16)		CLAY PAKY SPA
+				Via Pastrengo 3/b
+				Seriate  Bergamo  24068
+				IT
+
+58-57-0D   (hex)		Danfoss Solar Inverters
+58570D     (base 16)		Danfoss Solar Inverters
+				Jyllandsgade 28
+				Sønderborg    DK-6400
+				DK
+
+C4-82-3F   (hex)		Fujian Newland Auto-ID Tech. Co,.Ltd.
+C4823F     (base 16)		Fujian Newland Auto-ID Tech. Co,.Ltd.
+				Newland Science & Technology Park, No.1 Rujiang West Rd., Mawei
+				Fuzhou  Fujian  350015
+				CN
+
+E8-5B-5B   (hex)		LG ELECTRONICS INC
+E85B5B     (base 16)		LG ELECTRONICS INC
+				19-1, CHEONGHO-RI, JINWI-MYEON
+				PYEONGTAEK  GYEONGGI-DO  451-713
+				KR
+
+BC-A9-D6   (hex)		Cyber-Rain, Inc.
+BCA9D6     (base 16)		Cyber-Rain, Inc.
+				5272 Evanwood Avenue
+				Oak Park  California  91377-4809
+				US
+
+6C-3E-9C   (hex)		KE Knestel Elektronik GmbH
+6C3E9C     (base 16)		KE Knestel Elektronik GmbH
+				Osterwalder Str. 12
+				Hopferbach  Bavaria  87496
+				DE
+
+8C-D6-28   (hex)		Ikor Metering
+8CD628     (base 16)		Ikor Metering
+				Francisco Grandmontagne 4
+				San Sebastian  Guipuzcoa  20008
+				ES
+
+24-3C-20   (hex)		Dynamode Group
+243C20     (base 16)		Dynamode Group
+				Head Office, 132a St Albans Road
+				Watford  Herts  WD24 4AE
+				GB
+
+3C-39-C3   (hex)		JW Electronics Co., Ltd.
+3C39C3     (base 16)		JW Electronics Co., Ltd.
+				3A17, No. 5 Hsin-yi Rd., Sec. 5
+				Taipei    110
+				TW
+
+3C-05-AB   (hex)		Product Creation Studio
+3C05AB     (base 16)		Product Creation Studio
+				425 Westlake Ave N
+				Seattle  WA  98109
+				US
+
+F0-43-35   (hex)		DVN(Shanghai)Ltd.
+F04335     (base 16)		DVN(Shanghai)Ltd.
+				11F,Hechuan Building,2016 Yishan Rd,
+				Shanghai    201103
+				CN
+
+A4-79-E4   (hex)		KLINFO Corp
+A479E4     (base 16)		KLINFO Corp
+				301 923 wolpyung-dong
+				Daejeon    302-852
+				KR
+
+48-1B-D2   (hex)		Intron Scientific co., ltd.
+481BD2     (base 16)		Intron Scientific co., ltd.
+				6F., NO. 136,Sec 2,Keelung Rd., Da-an district
+				Taipei    106
+				TW
+
+D0-F0-DB   (hex)		Ericsson
+D0F0DB     (base 16)		Ericsson
+				250 Holger Way
+				SAN JOSE  CA  95134
+				US
+
+7C-14-76   (hex)		Damall Technologies SAS
+7C1476     (base 16)		Damall Technologies SAS
+				Corso della Repubblica 65
+				Fabriano  Ancona  60044
+				IT
+
+8C-54-1D   (hex)		LGE 
+8C541D     (base 16)		LGE 
+				60-39 , Kasan -dong , Gumcheon-gu.
+				Seoul     153-801
+				KR
+
+00-A2-DA   (hex)		INAT GmbH
+00A2DA     (base 16)		INAT GmbH
+				Ostendstraße 50A
+				Nuremberg  Bavaria  90482
+				DE
+
+00-3C-C5   (hex)		WONWOO Engineering Co., Ltd
+003CC5     (base 16)		WONWOO Engineering Co., Ltd
+				7F 201, Techno-Park SsangYong III, 
+				Bucheon City  Gyeonggi-Do  421-808
+				KR
+
+F0-77-D0   (hex)		Xcellen
+F077D0     (base 16)		Xcellen
+				15F KINS Tower 25-1,Jeongja-dong,Bungdang-gu,
+				Seongnam  Gyeonggi  463811
+				KR
+
+4C-C6-02   (hex)		Radios, Inc.
+4CC602     (base 16)		Radios, Inc.
+				31355 State Road 46
+				Sorrenot  Floriad  32776
+				US
+
+80-71-1F   (hex)		Juniper Networks
+80711F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+88-FD-15   (hex)		LINEEYE CO., LTD
+88FD15     (base 16)		LINEEYE CO., LTD
+				5F Marufuku Bldg. 39-1 Karahashi
+				Kyoto    601-8468
+				JP
+
+88-4B-39   (hex)		Siemens AG, Healthcare Sector
+884B39     (base 16)		Siemens AG, Healthcare Sector
+				Henkestrasse 127
+				Erlangen  Bavaria  91052
+				DE
+
+D8-28-C9   (hex)		General Electric Consumer and Industrial
+D828C9     (base 16)		General Electric Consumer and Industrial
+				AP35-1405
+				Louisville  KY  40225
+				US
+
+44-C2-33   (hex)		Guangzhou Comet Technology Development Co.Ltd
+44C233     (base 16)		Guangzhou Comet Technology Development Co.Ltd
+				Rm 304,FL 3,Block G,Science and  Technology Innovation Base,
+				Guangzhou  Guangdong  510663
+				CN
+
+30-EF-D1   (hex)		Alstom Strongwish (Shenzhen) Co., Ltd.
+30EFD1     (base 16)		Alstom Strongwish (Shenzhen) Co., Ltd.
+				5F,Building No.6, Keji Middle 2 Road High-Tech Industrial Park, 
+				Shen Zhen  Guangdong  518057
+				CN
+
+7C-2C-F3   (hex)		Secure Electrans Ltd
+7C2CF3     (base 16)		Secure Electrans Ltd
+				Pioneer House, Pioneer Business Park
+				Ellesmere Port    CH65 1AD
+				GB
+
+08-16-51   (hex)		SHENZHEN SEA STAR TECHNOLOGY CO.,LTD
+081651     (base 16)		SHENZHEN SEA STAR TECHNOLOGY CO.,LTD
+				Seastar industrial Park, BaoLong  6th Ave
+				ShenZhen  GuangDong  518116
+				CN
+
+A8-63-DF   (hex)		DISPLAIRE CORPORATION
+A863DF     (base 16)		DISPLAIRE CORPORATION
+				1300 Valley House Dr, Ste 100
+				Rohnert Park  CA  94928
+				US
+
+18-3B-D2   (hex)		BYD Precision Manufacture Company Ltd.
+183BD2     (base 16)		BYD Precision Manufacture Company Ltd.
+				No3000 LongDong Avenue, Pudong District
+				Shanghai    201203
+				CN
+
+E4-35-93   (hex)		Hangzhou GoTo technology Co.Ltd
+E43593     (base 16)		Hangzhou GoTo technology Co.Ltd
+				Room 1303,Boee buliding,3760 Nanhuan Road, Binjiang, 
+				Hangzhou  Zhejiang  310053
+				CN
+
+2C-3A-28   (hex)		Fagor Electrónica
+2C3A28     (base 16)		Fagor Electrónica
+				B. San Andres, s/n
+				Mondragón  Guipuzcoa  20500
+				ES
+
+B4-58-61   (hex)		CRemote, LLC
+B45861     (base 16)		CRemote, LLC
+				1195 Noel Drive
+				MENLO PARK  CA  94025
+				US
+
+B0-97-3A   (hex)		E-Fuel Corporation
+B0973A     (base 16)		E-Fuel Corporation
+				15466 Los Gatos Blvd. #37
+				Los Gatos  CA  95032
+				US
+
+20-4E-6B   (hex)		Axxana(israel) ltd
+204E6B     (base 16)		Axxana(israel) ltd
+				Habarzel 38
+				Tel aviv    69710
+				IL
+
+80-F5-93   (hex)		IRCO Sistemas de Telecomunicación S.A.
+80F593     (base 16)		IRCO Sistemas de Telecomunicación S.A.
+				Via Sergia 98
+				Mataró  Barcelona  08302
+				ES
+
+E4-97-F0   (hex)		Shanghai VLC Technologies Ltd. Co.
+E497F0     (base 16)		Shanghai VLC Technologies Ltd. Co.
+				Room 901, B-Zone, East Beijing Road
+				Shanghai    200001
+				CN
+
+B4-08-32   (hex)		TC Communications
+B40832     (base 16)		TC Communications
+				17575 Cartwright Road
+				Irvine  CA  92614
+				US
+
+EC-DE-3D   (hex)		Lamprey Networks, Inc.
+ECDE3D     (base 16)		Lamprey Networks, Inc.
+				58 Dover Road
+				Durham  NH  03824
+				US
+
+6C-FF-BE   (hex)		MPB Communications Inc.
+6CFFBE     (base 16)		MPB Communications Inc.
+				147 Hymus Blvd
+				Pointe-Claire  Quebec  H9R 1E9
+				CA
+
+30-41-74   (hex)		ALTEC LANSING LLC
+304174     (base 16)		ALTEC LANSING LLC
+				535 ROUTES 6 & 209
+				MILFORD  PA  18337
+				US
+
+80-B2-89   (hex)		Forworld Electronics Ltd.
+80B289     (base 16)		Forworld Electronics Ltd.
+				No.16 Keyuan 2nd Rd., Situn District
+				Taichung City    886
+				TW
+
+E8-3A-97   (hex)		Toshiba Corporation
+E83A97     (base 16)		Toshiba Corporation
+				1-1-1, Shibaura, Minato-ku
+				Tokyo    00000
+				JP
+
+10-56-CA   (hex)		Peplink International Ltd.
+1056CA     (base 16)		Peplink International Ltd.
+				17/F, Park Building,
+				Cheung Sha Wan    
+				HK
+
+48-6F-D2   (hex)		StorSimple Inc
+486FD2     (base 16)		StorSimple Inc
+				2350 Mission College Blvd
+				Santa Clara  CA  95054
+				US
+
+A0-3A-75   (hex)		PSS Belgium N.V.
+A03A75     (base 16)		PSS Belgium N.V.
+				Hoogveld 50
+				Dendermonde    9200
+				BE
+
+24-DB-AD   (hex)		ShopperTrak RCT Corporation
+24DBAD     (base 16)		ShopperTrak RCT Corporation
+				200 W. Monroe Street
+				Chicago  IL  60606
+				US
+
+9C-EB-E8   (hex)		BizLink (Kunshan) Co.,Ltd
+9CEBE8     (base 16)		BizLink (Kunshan) Co.,Ltd
+				No.168,Nanhe Road,Economic & Technological Development Zone,
+				Kunshan City  Jiangsu Province  215300
+				CN
+
+04-0E-C2   (hex)		ViewSonic Mobile China Limited
+040EC2     (base 16)		ViewSonic Mobile China Limited
+				Room 601, The Gate Tower B, No.19, Zhongguancun Street, Haidian District
+				Beijing    100080
+				CN
+
+C8-D1-D1   (hex)		AGAiT Technology Corporation
+C8D1D1     (base 16)		AGAiT Technology Corporation
+				5F,No.27-8, Sec. 2, Zhongzheng E. Rd., Danshui Township 
+				Taipei County     25170
+				TW
+
+00-DB-45   (hex)		THAMWAY CO.,LTD.
+00DB45     (base 16)		THAMWAY CO.,LTD.
+				3-9-2
+				Fuji  Shizuoka  417-0001
+				JP
+
+D4-9C-28   (hex)		JayBird LLC
+D49C28     (base 16)		JayBird LLC
+				3676 California Ave
+				Salt Lake City  UT  84104
+				US
+
+74-F7-26   (hex)		Neuron Robotics
+74F726     (base 16)		Neuron Robotics
+				91 Pearson Ave
+				Somerville  MA  02144
+				US
+
+28-72-C5   (hex)		Smartmatic Corp
+2872C5     (base 16)		Smartmatic Corp
+				1001 Broken Sound Pkwy NW Suite D
+				Boca Raton  Florida  33487
+				US
+
+E0-8F-EC   (hex)		REPOTEC CO., LTD.
+E08FEC     (base 16)		REPOTEC CO., LTD.
+				3F, 258. 
+				CHUNG HO CITY, TAIPEI COUNTY    235
+				TW
+
+AC-E9-AA   (hex)		Hay Systems Ltd
+ACE9AA     (base 16)		Hay Systems Ltd
+				Watermark
+				Livingston  West Lothian  EH54 7EG
+				GB
+
+08-2A-D0   (hex)		SRD Innovations Inc.
+082AD0     (base 16)		SRD Innovations Inc.
+				11525 Valley Ridge Dr. NW
+				Calgary  AB  T3B 5T4
+				CA
+
+88-98-21   (hex)		TERAON
+889821     (base 16)		TERAON
+				2F Seohan Bldg., 1552-10, Seocho-Dong, Seocho-Gu,
+				Seoul    137-070
+				KR
+
+E0-E7-51   (hex)		Nintendo Co., Ltd.
+E0E751     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-3A-AF   (hex)		BlueBit Ltd.
+003AAF     (base 16)		BlueBit Ltd.
+				Unit B, 21/F., 78 Hung To Road,
+				Kowloon,     
+				HK
+
+64-16-8D   (hex)		Cisco Systems, Inc
+64168D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-3A-9C   (hex)		Cisco Systems, Inc
+003A9C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+7C-6C-8F   (hex)		AMS NEVE LTD
+7C6C8F     (base 16)		AMS NEVE LTD
+				BILLINGTON ROAD
+				BURNLEY  LANCASHIRE  BB11 5UB
+				GB
+
+88-ED-1C   (hex)		Cudo Communication Co., Ltd.
+88ED1C     (base 16)		Cudo Communication Co., Ltd.
+				10F ArirangTV 1467-80, Seocho-3dong, Seocho-gu
+				Seoul    137-868
+				KR
+
+9C-CD-82   (hex)		CHENG UEI PRECISION INDUSTRY CO.,LTD
+9CCD82     (base 16)		CHENG UEI PRECISION INDUSTRY CO.,LTD
+				No.18, Chung Shan Rd., Tu-Cheng Industry Park 
+				Tu Cheng City  Taipei Hsien  23680
+				TW
+
+F0-62-81   (hex)		ProCurve Networking by HP
+F06281     (base 16)		ProCurve Networking by HP
+				60 Alexandra Terrace
+				    118502
+				SG
+
+C0-9C-92   (hex)		COBY
+C09C92     (base 16)		COBY
+				COBY Electronics ShenZhen R&D Center 
+				SHENZHEN  GUANGDONG  518109
+				CN
+
+C0-38-F9   (hex)		Nokia Danmark A/S
+C038F9     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+F4-63-49   (hex)		Diffon Corporation
+F46349     (base 16)		Diffon Corporation
+				Digital Tower Aston 1505
+				Seoul    153803
+				KR
+
+74-F0-7D   (hex)		BnCOM Co.,Ltd
+74F07D     (base 16)		BnCOM Co.,Ltd
+				Room1007, Daehyun Techno World, 174
+				Uiwang-si  Gyeonggi-do  437-753
+				KR
+
+F8-52-DF   (hex)		VNL Europe AB
+F852DF     (base 16)		VNL Europe AB
+				Finlandsgatan 10
+				Kista    164 74
+				SE
+
+A8-CB-95   (hex)		EAST BEST CO., LTD.
+A8CB95     (base 16)		EAST BEST CO., LTD.
+				4F,NO.98,SHING TEH ROAD
+				SAN CHUNG CITY   TAIPEI  241
+				TW
+
+F4-5F-F7   (hex)		DQ Technology Inc.
+F45FF7     (base 16)		DQ Technology Inc.
+				5111 Johnson Drive
+				Pleasanton  CA  94588
+				US
+
+7C-3B-D5   (hex)		Imago Group
+7C3BD5     (base 16)		Imago Group
+				Ramon Marti Alsina 2-4-6
+				Badalona  Barcelona  08911
+				ES
+
+5C-E2-23   (hex)		Delphin Technology AG
+5CE223     (base 16)		Delphin Technology AG
+				Lustheide 81
+				Bergisch-Gladbach    51427
+				DE
+
+F8-71-FE   (hex)		The Goldman Sachs Group, Inc.
+F871FE     (base 16)		The Goldman Sachs Group, Inc.
+				Christchurch Court | 10-15 Newgate Street
+				London  London  EC1A 7HD
+				GB
+
+2C-19-84   (hex)		IDN Telecom, Inc.
+2C1984     (base 16)		IDN Telecom, Inc.
+				2669 Great Arbor Way
+				Union City  CA  94587
+				US
+
+D8-C3-FB   (hex)		DETRACOM
+D8C3FB     (base 16)		DETRACOM
+				41 AVENUE DE L'EUROPE
+				CASTELNAU D'ESTRETEFONDS    31620
+				FR
+
+58-F6-7B   (hex)		Xia Men UnionCore Technology LTD.
+58F67B     (base 16)		Xia Men UnionCore Technology LTD.
+				(224)2F Chuangye Building,Xiamen Pioneering Park for Overseas Chinese Scholars
+				Xia Men  Fu Jian  361009
+				CN
+
+6C-F0-49   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+6CF049     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+				
+				Pin-Jen  Taoyuan  324
+				TW
+
+64-4F-74   (hex)		LENUS Co., Ltd.
+644F74     (base 16)		LENUS Co., Ltd.
+				18-5 Gwacheon-Dong
+				Gwacheon  Gyeonggi-Do  427-060
+				KR
+
+78-7F-62   (hex)		GiK mbH
+787F62     (base 16)		GiK mbH
+				Goethestraße 5
+				Aachen    52064
+				DE
+
+40-15-97   (hex)		Protect America, Inc.
+401597     (base 16)		Protect America, Inc.
+				5100 N IH-35
+				Round Rock  TX  78681
+				US
+
+C4-FC-E4   (hex)		DishTV NZ Ltd
+C4FCE4     (base 16)		DishTV NZ Ltd
+				10 Penney Ave
+				Auckland    1041
+				NZ
+
+E8-0B-13   (hex)		Akib Systems Taiwan, INC
+E80B13     (base 16)		Akib Systems Taiwan, INC
+				No.582-1, RuiGuang Rd
+				Taipei    114
+				TW
+
+EC-6C-9F   (hex)		Chengdu Volans Technology CO.,LTD
+EC6C9F     (base 16)		Chengdu Volans Technology CO.,LTD
+				2nd Floor Building 4B Hi-Tech Incubation Park,Nanyan Xian,Tianfu Ave
+				Chengdu  Sichuan  610041
+				CN
+
+40-EF-4C   (hex)		Fihonest communication co.,Ltd
+40EF4C     (base 16)		Fihonest communication co.,Ltd
+				Room902,Park road,Zhixing business-building
+				Dongguan  Guangdong  523560
+				CN
+
+00-27-1E   (hex)		Xagyl Communications
+00271E     (base 16)		Xagyl Communications
+				1667 Marronier Crt
+				Cumberland  Ontario  K4C 1C2
+				CA
+
+00-27-1D   (hex)		Comba Telecom Systems (China) Ltd.
+00271D     (base 16)		Comba Telecom Systems (China) Ltd.
+				10 Shenzhou Road
+				Guangzhou  Guangdong  510663
+				CN
+
+00-27-20   (hex)		NEW-SOL COM
+002720     (base 16)		NEW-SOL COM
+				Bucheon Tecnopark 403-602
+				Bucheon city  Kyoungki-do  420-734
+				KR
+
+00-26-F0   (hex)		cTrixs International GmbH.
+0026F0     (base 16)		cTrixs International GmbH.
+				Lieferinger Hauptstr. 140
+				Salzburg  Salzburg  5020
+				AT
+
+00-26-EA   (hex)		Cheerchip Electronic Technology (ShangHai) Co., Ltd.
+0026EA     (base 16)		Cheerchip Electronic Technology (ShangHai) Co., Ltd.
+				ROOM 1202, NO. 51, 7 Area, NO. 1467 CAOBAO ROAD;
+				SHANGHAI    201101
+				CN
+
+00-27-08   (hex)		Nordiag ASA
+002708     (base 16)		Nordiag ASA
+				Frysjaveien 40
+				Oslo    0884
+				NO
+
+00-27-02   (hex)		SolarEdge Technologies
+002702     (base 16)		SolarEdge Technologies
+				1 Abba Eban St.
+				Herzelia    46725
+				IL
+
+00-27-04   (hex)		Accelerated Concepts, Inc
+002704     (base 16)		Accelerated Concepts, Inc
+				1208 E Kennedy Blvd
+				Tampa  FL  33602
+				US
+
+00-26-FA   (hex)		BandRich Inc.
+0026FA     (base 16)		BandRich Inc.
+				7F., No.188, Baociao Road
+				Sindian City  Taipei  23145
+				TW
+
+00-26-F9   (hex)		S.E.M. srl
+0026F9     (base 16)		S.E.M. srl
+				via Lecco, 61
+				Vimercate  Monza Brianza  20059
+				IT
+
+00-26-FD   (hex)		Interactive Intelligence
+0026FD     (base 16)		Interactive Intelligence
+				7601 Interactive Way
+				  IN  46278
+				US
+
+00-26-F7   (hex)		Nivetti Systems Pvt. Ltd.
+0026F7     (base 16)		Nivetti Systems Pvt. Ltd.
+				#727,8th Main, JP Nagar 3rd Phase
+				Bangalore    560078
+				IN
+
+00-26-F6   (hex)		Military Communication Institute
+0026F6     (base 16)		Military Communication Institute
+				ul. Warszawska 22A
+				Zegrze    05-130
+				PL
+
+00-26-DD   (hex)		Fival Science & Technology Co.,Ltd.
+0026DD     (base 16)		Fival Science & Technology Co.,Ltd.
+				1/F, Building 57, No.461
+				Shanghai  Shanghai  200233
+				CN
+
+00-26-DE   (hex)		FDI MATELEC
+0026DE     (base 16)		FDI MATELEC
+				Route de saint symphorien
+				Les landes Génusson    85130
+				FR
+
+00-26-DA   (hex)		Universal Media Corporation /Slovakia/ s.r.o.
+0026DA     (base 16)		Universal Media Corporation /Slovakia/ s.r.o.
+				Mickiewiczova 7104/14
+				Bratislava    811 07
+				SK
+
+00-26-DB   (hex)		Ionics EMS Inc.
+0026DB     (base 16)		Ionics EMS Inc.
+				Carmelray Industrial Park 2, Brgy. Tulo
+				Calamba  Laguna  4027
+				PH
+
+00-26-D5   (hex)		Ory Solucoes em Comercio de Informatica Ltda.
+0026D5     (base 16)		Ory Solucoes em Comercio de Informatica Ltda.
+				Av. Unisinos, 615
+				Sao Leopoldo  RS  93022000
+				BR
+
+00-26-CE   (hex)		Kozumi USA Corp.
+0026CE     (base 16)		Kozumi USA Corp.
+				3005 Hartridge Terrace
+				Wellington  FL  33414
+				US
+
+00-27-11   (hex)		LanPro Inc
+002711     (base 16)		LanPro Inc
+				1880 NW 93Av
+				Miami  Florida  33172
+				US
+
+00-26-86   (hex)		Quantenna Communcations, Inc.
+002686     (base 16)		Quantenna Communcations, Inc.
+				3450 W. Warren Ave.
+				Fremont  CA  94538
+				US
+
+00-26-84   (hex)		KISAN SYSTEM
+002684     (base 16)		KISAN SYSTEM
+				GWANGMYEONG TECHNOPARK B-403
+				GWANGMYEONG  GYEONGGI  423-050
+				KR
+
+00-26-80   (hex)		SIL3 Pty.Ltd
+002680     (base 16)		SIL3 Pty.Ltd
+				Factory 10
+				DANDENONG  VICTORIA  3175
+				AU
+
+00-26-BF   (hex)		ShenZhen Temobi Science&Tech Development Co.,Ltd
+0026BF     (base 16)		ShenZhen Temobi Science&Tech Development Co.,Ltd
+				4FloorG, Jinrun Tower, 6019 Shennan Road
+				ShenZhen    518000
+				CN
+
+00-26-B4   (hex)		Ford Motor Company
+0026B4     (base 16)		Ford Motor Company
+				20300 Rotunda Drive
+				Dearborn  MI  48124
+				US
+
+00-26-CA   (hex)		Cisco Systems, Inc
+0026CA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-26-C9   (hex)		Proventix Systems, Inc.
+0026C9     (base 16)		Proventix Systems, Inc.
+				4518 Valleydale Road
+				Birmingham  AL  35242
+				US
+
+00-26-90   (hex)		I DO IT
+002690     (base 16)		I DO IT
+				1308, WoolimLions2nd Doksan Station
+				Seoul    153-787
+				KR
+
+00-26-8F   (hex)		MTA SpA
+00268F     (base 16)		MTA SpA
+				Viale dell Industria 12
+				Codogno  LODI  26845
+				IT
+
+00-26-79   (hex)		Euphonic Technologies, Inc.
+002679     (base 16)		Euphonic Technologies, Inc.
+				2-5-10 Shin-yokohama, Kouhoku-ku
+				Yokohama    222-0033
+				JP
+
+00-26-AC   (hex)		Shanghai LUSTER Teraband photonic Co., Ltd.
+0026AC     (base 16)		Shanghai LUSTER Teraband photonic Co., Ltd.
+				F4, No.39 ChengZhong Rd.
+				Shanghai    201800
+				CN
+
+00-26-A6   (hex)		TRIXELL
+0026A6     (base 16)		TRIXELL
+				460, Rue du pommarin
+				MOIRANS    38210
+				FR
+
+00-26-9C   (hex)		ITUS JAPAN CO. LTD
+00269C     (base 16)		ITUS JAPAN CO. LTD
+				7F Shinkawa B/D
+				Chuoku  Tokyo  1040033
+				JP
+
+00-26-94   (hex)		Senscient Ltd
+002694     (base 16)		Senscient Ltd
+				Unit 2, Block A, Arena Business Centre
+				Poole  Dorset  BH17 7FJ
+				GB
+
+00-26-76   (hex)		COMMidt AS
+002676     (base 16)		COMMidt AS
+				Kikregata 57-59
+				Levanger  Nord-Troendelag  7600
+				NO
+
+00-26-1D   (hex)		COP SECURITY SYSTEM CORP.
+00261D     (base 16)		COP SECURITY SYSTEM CORP.
+				4~7F, No.5, Lane 130, Min-Chung Rd.,
+				Taipei    23141
+				TW
+
+00-26-17   (hex)		OEM Worldwide
+002617     (base 16)		OEM Worldwide
+				2920 Kelly Ave
+				Watertown  SD  57201
+				US
+
+00-26-13   (hex)		Engel Axil S.L.
+002613     (base 16)		Engel Axil S.L.
+				Puig dels Tudons, 6
+				Barbera del Valles  Barcelona  08210
+				ES
+
+00-26-38   (hex)		Xia Men Joyatech Co., Ltd.
+002638     (base 16)		Xia Men Joyatech Co., Ltd.
+				Room 304, 28th Building, Guanri Road, Xiamen Software Park
+				Xiamen  Fujian Province  361008
+				CN
+
+00-26-3A   (hex)		Digitec Systems
+00263A     (base 16)		Digitec Systems
+				7,1st Street, Kasturibai Nagar
+				Chennai  Tamil Nadu  600054
+				IN
+
+00-26-0F   (hex)		Linn Products Ltd
+00260F     (base 16)		Linn Products Ltd
+				Glasgow Road
+				Glasgow  Scotland  G76 0EQ
+				GB
+
+00-26-0C   (hex)		Dataram
+00260C     (base 16)		Dataram
+				186 Princeton Rd.
+				West Windsor  NJ  08550
+				US
+
+00-26-2B   (hex)		Wongs Electronics Co. Ltd.
+00262B     (base 16)		Wongs Electronics Co. Ltd.
+				Wanfeng Ind. Esata, Shajing, Baoan,
+				Shenzhen  Guang Dong  518104
+				CN
+
+00-26-20   (hex)		ISGUS GmbH
+002620     (base 16)		ISGUS GmbH
+				Oberdorfstraße 18 - 22
+				VS - Schwenningen  BW  78054
+				DE
+
+00-26-01   (hex)		Cutera Inc
+002601     (base 16)		Cutera Inc
+				3240 Bayshore Blvd
+				Brisbane  CA  94405
+				US
+
+00-26-35   (hex)		Bluetechnix GmbH
+002635     (base 16)		Bluetechnix GmbH
+				Waidhausenstr. 3/19
+				Vienna    1140
+				AT
+
+00-26-57   (hex)		OOO NPP EKRA
+002657     (base 16)		OOO NPP EKRA
+				I.Yakovleva St., 3
+				Cheboksary  Chuvash Republic  428003
+				RU
+
+00-26-52   (hex)		Cisco Systems, Inc
+002652     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-26-66   (hex)		EFM Networks
+002666     (base 16)		EFM Networks
+				6F, Benposra II 1197-1 Bojeong Giheung Gu
+				Yong In  Kyunggi do  446913
+				KR
+
+00-25-F5   (hex)		DVS Korea, Co., Ltd
+0025F5     (base 16)		DVS Korea, Co., Ltd
+				497-3, SangHa-Dong, Giheung-gu
+				Yong-In city  Gyeonggi-do  446-914
+				KR
+
+00-25-EB   (hex)		Reutech Radar Systems (PTY) Ltd
+0025EB     (base 16)		Reutech Radar Systems (PTY) Ltd
+				35 Elektron Avenue
+				Stellenbosch  Western Cape  7600
+				ZA
+
+00-25-EE   (hex)		Avtex Ltd
+0025EE     (base 16)		Avtex Ltd
+				Unit G5 Capital Business Park
+				Cardiff    CF3 2PX
+				GB
+
+00-25-AE   (hex)		Microsoft Corporation
+0025AE     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				Redmond  Washington  98052-6399
+				US
+
+00-25-AF   (hex)		COMFILE Technology
+0025AF     (base 16)		COMFILE Technology
+				Guro 5 dong, Guro-gu
+				Seoul    152-842
+				KR
+
+00-25-A8   (hex)		Kontron (BeiJing) Technology Co.,Ltd
+0025A8     (base 16)		Kontron (BeiJing) Technology Co.,Ltd
+				17 Building, Block #1,ABP.  188 Western South 4th Ring Road
+				BeiJing    100070
+				CN
+
+00-25-D9   (hex)		DataFab Systems Inc.
+0025D9     (base 16)		DataFab Systems Inc.
+				385-3 Hongzun Road
+				Pingzhen City  Taoyuan County  32466
+				TW
+
+00-25-D6   (hex)		The Kroger Co.
+0025D6     (base 16)		The Kroger Co.
+				11450 Grooms Road
+				Blue Ash  OH  45242
+				US
+
+00-25-D1   (hex)		Eastern Asia Technology Limited
+0025D1     (base 16)		Eastern Asia Technology Limited
+				8F-1, No. 188, Baoqiao Rd., Xindian Dist.
+				New Taipei City    23145
+				TW
+
+00-25-CD   (hex)		Skylane Optics
+0025CD     (base 16)		Skylane Optics
+				Rue d'Arlon, 6
+				Windhof    8399
+				LU
+
+00-25-BF   (hex)		Wireless Cables Inc.
+0025BF     (base 16)		Wireless Cables Inc.
+				1414 Soquel Ave, Ste 212
+				Santa Cruz  CA  95062
+				US
+
+00-25-B9   (hex)		Cypress Solutions Inc
+0025B9     (base 16)		Cypress Solutions Inc
+				3066 Beta Ave
+				  BC  V5G 4K4
+				CA
+
+00-25-B6   (hex)		Telecom FM
+0025B6     (base 16)		Telecom FM
+				895 Plymouth Road
+				Slough  Berkshire  SL1 4LP
+				GB
+
+00-25-A5   (hex)		Walnut Media Network
+0025A5     (base 16)		Walnut Media Network
+				440 N Wolfe Rd
+				Sunnyvale  CA  94085
+				US
+
+00-25-A4   (hex)		EuroDesign embedded technologies GmbH
+0025A4     (base 16)		EuroDesign embedded technologies GmbH
+				Waldstratraße 4A
+				Kirchdorf a.d. Amper  Bayern  85414
+				DE
+
+00-25-C1   (hex)		Nawoo Korea Corp.
+0025C1     (base 16)		Nawoo Korea Corp.
+				4Fl., Hanwon Bldg., 6-1, Sunae-dong, Bundang-gu,
+				Seongnam-si  Gyeonggi-do  463-825
+				KR
+
+00-25-F6   (hex)		netTALK.com, Inc.
+0025F6     (base 16)		netTALK.com, Inc.
+				1100 NW 163RD DRIVE
+				NORTH MIAMI BEACH  FL  33169
+				US
+
+00-25-7A   (hex)		CAMCO Produktions- und Vertriebs-GmbH für  Beschallungs- und Beleuchtungsanlagen
+00257A     (base 16)		CAMCO Produktions- und Vertriebs-GmbH für  Beschallungs- und Beleuchtungsanlagen
+				Fischpicke 5
+				Wenden  NRW  57482
+				DE
+
+00-25-76   (hex)		NELI TECHNOLOGIES
+002576     (base 16)		NELI TECHNOLOGIES
+				Route Nationale
+				LE RHEU    35650
+				FR
+
+00-25-74   (hex)		KUNIMI MEDIA DEVICE Co., Ltd.
+002574     (base 16)		KUNIMI MEDIA DEVICE Co., Ltd.
+				3 KITAMACHIDA YAMAZAKI
+				KUNIMI, DATE  FUKUSHIMA  969-1771
+				JP
+
+00-25-59   (hex)		Syphan Technologies Ltd
+002559     (base 16)		Syphan Technologies Ltd
+				The Watermill
+				Skipton  North Yorkshire  BD23 3AG
+				GB
+
+00-25-54   (hex)		Pixel8 Networks
+002554     (base 16)		Pixel8 Networks
+				22 Great Oaks Blvd, Suite 150
+				San Jose  CA  95119
+				US
+
+00-25-40   (hex)		Quasar Technologies, Inc.
+002540     (base 16)		Quasar Technologies, Inc.
+				1701 Barrett Lakes Boulevard
+				Kennesaw  GA  30144
+				US
+
+00-25-33   (hex)		WITTENSTEIN AG
+002533     (base 16)		WITTENSTEIN AG
+				Walter-Wittenstein-Straße 1
+				Igersheim    97999
+				DE
+
+00-25-30   (hex)		Aetas Systems Inc.
+002530     (base 16)		Aetas Systems Inc.
+				3A3, No. 1, LiHsin Road I
+				HsinChu  Taiwan  30078
+				TW
+
+00-25-2C   (hex)		Entourage Systems, Inc.
+00252C     (base 16)		Entourage Systems, Inc.
+				7901 Jones Branch Drive
+				McLean  Virginia  22102
+				US
+
+00-25-8C   (hex)		ESUS ELEKTRONIK SAN. VE DIS. TIC. LTD. STI.
+00258C     (base 16)		ESUS ELEKTRONIK SAN. VE DIS. TIC. LTD. STI.
+				ESENSEHIR MAHALLESI KURKCULER CADDESI
+				ISTANBUL    34776
+				TR
+
+00-25-5A   (hex)		Tantalus Systems Corp.
+00255A     (base 16)		Tantalus Systems Corp.
+				301-3480 Gilmore Way
+				Burnaby  BC  V5G 4Y1
+				CA
+
+00-25-87   (hex)		Vitality, Inc.
+002587     (base 16)		Vitality, Inc.
+				One Broadway
+				Cambridge  MA  02142
+				US
+
+00-25-73   (hex)		ST Electronics (Info-Security) Pte Ltd
+002573     (base 16)		ST Electronics (Info-Security) Pte Ltd
+				100, Jurong East Street 21, ST Electronics Jurong East Bldg
+				    609602
+				SG
+
+00-25-6F   (hex)		Dantherm Power
+00256F     (base 16)		Dantherm Power
+				Marienlystvej 65
+				Skive    7800
+				DK
+
+00-25-2F   (hex)		Energy, Inc.
+00252F     (base 16)		Energy, Inc.
+				3297 Pacific Street
+				Charleston  SC  29418
+				US
+
+00-25-0A   (hex)		Security Expert Co. Ltd
+00250A     (base 16)		Security Expert Co. Ltd
+				8F-3, No.2, Jian 8th Rd.,
+				Jhonghe  Taipei  235
+				TW
+
+00-25-05   (hex)		eks Engel GmbH & Co. KG
+002505     (base 16)		eks Engel GmbH & Co. KG
+				Schuetzenstrasse 2
+				Wenden-Hillmicke  NRW  57482
+				DE
+
+00-25-09   (hex)		SHARETRONIC Group LTD
+002509     (base 16)		SHARETRONIC Group LTD
+				ShaJing,Bao'an Zone,
+				ShenZhen  Guangdong  518104
+				CN
+
+00-24-DA   (hex)		Innovar Systems Limited
+0024DA     (base 16)		Innovar Systems Limited
+				12155 Commissioner Drive
+				North Jackson  Ohio  44451
+				US
+
+00-24-D8   (hex)		IlSung Precision
+0024D8     (base 16)		IlSung Precision
+				182-2, Jegi-ri, Jeongnam-myeon
+				Hwanseong-si  Gyeonggi-do  445-964
+				KR
+
+00-24-CD   (hex)		Willow Garage, Inc.
+0024CD     (base 16)		Willow Garage, Inc.
+				68 Willow Rd.
+				Menlo Park  CA  94025
+				US
+
+00-24-D3   (hex)		QUALICA Inc.
+0024D3     (base 16)		QUALICA Inc.
+				5-29-15,Toyo,
+				Tokyo    135-0016
+				JP
+
+00-24-CE   (hex)		Exeltech Inc
+0024CE     (base 16)		Exeltech Inc
+				7317 Jack Newell Blvd North
+				Fort Worth  TX  76118
+				US
+
+00-24-CF   (hex)		Inscape Data Corporation
+0024CF     (base 16)		Inscape Data Corporation
+				1611 South Main Street
+				Milpitas  CA  95035
+				US
+
+00-24-C6   (hex)		Hager Electro SAS
+0024C6     (base 16)		Hager Electro SAS
+				132, boulevard d'Europe
+				Obernai  Bas-Rhin  67215
+				FR
+
+00-24-FD   (hex)		Accedian Networks Inc
+0024FD     (base 16)		Accedian Networks Inc
+				2351 Alfred Nobel Blvd
+				Saint Laurent  QC  h4s 2A9
+				CA
+
+00-25-23   (hex)		OCP Inc.
+002523     (base 16)		OCP Inc.
+				18495 S Dixie Hwy    PMB 107
+				Miami  Florida  33157
+				US
+
+00-25-1D   (hex)		DSA Encore, LLC
+00251D     (base 16)		DSA Encore, LLC
+				50 Pocono Rd
+				Brookfield  CT  06804
+				US
+
+00-25-0F   (hex)		On-Ramp Wireless, Inc.
+00250F     (base 16)		On-Ramp Wireless, Inc.
+				16885 West Bernardo Drive
+				San Diego  CA  92127
+				US
+
+00-24-F5   (hex)		NDS Surgical Imaging
+0024F5     (base 16)		NDS Surgical Imaging
+				5750 Hellyer Ave.
+				San Jose  CA.  95138
+				US
+
+00-24-67   (hex)		AOC International (Europe) GmbH
+002467     (base 16)		AOC International (Europe) GmbH
+				Lahnstrasse 86A
+				Berlin    12055
+				DE
+
+00-24-6D   (hex)		Weinzierl Engineering GmbH
+00246D     (base 16)		Weinzierl Engineering GmbH
+				Bahnhofstrasse 6
+				Tyrlaching  Bayern  84558
+				DE
+
+00-24-70   (hex)		AUROTECH ultrasound AS.
+002470     (base 16)		AUROTECH ultrasound AS.
+				Svingen 1
+				Tydal  Sr-Tr  N-7590
+				NO
+
+00-24-6A   (hex)		Solid Year Co., Ltd.
+00246A     (base 16)		Solid Year Co., Ltd.
+				2F-1, No. 94, Bao-chung Road,
+				Hsin-tien City  Taipei Hsien  23147
+				TW
+
+00-24-92   (hex)		Motorola, Broadband Solutions Group
+002492     (base 16)		Motorola, Broadband Solutions Group
+				1101 Marina Village Parkway
+				Alameda  CA  94501
+				US
+
+00-24-8B   (hex)		HYBUS CO., LTD.
+00248B     (base 16)		HYBUS CO., LTD.
+				Rm# 701, Daerung Post Tower 1st
+				SEOUL    152-790
+				KR
+
+00-24-84   (hex)		Bang and Olufsen Medicom a/s
+002484     (base 16)		Bang and Olufsen Medicom a/s
+				Gimsinglundvej 20
+				Struer  DK  DK7600
+				DK
+
+00-24-80   (hex)		Meteocontrol GmbH
+002480     (base 16)		Meteocontrol GmbH
+				Spichererstrasse 48
+				Augsburg  Bavaria  86152
+				DE
+
+00-24-7A   (hex)		FU YI CHENG Technology Co., Ltd.
+00247A     (base 16)		FU YI CHENG Technology Co., Ltd.
+				13F, No. 105-1, Jilin Rd., Luju Shiang,
+				Taoyuan    338
+				TW
+
+00-24-76   (hex)		TAP.tv
+002476     (base 16)		TAP.tv
+				16w361 South Frontage Road
+				Burr Ridge  IL  60527
+				US
+
+00-24-B4   (hex)		ESCATRONIC GmbH
+0024B4     (base 16)		ESCATRONIC GmbH
+				Wuerzburger Str. 8
+				Laatzen  Lower Saxony  30880
+				DE
+
+00-24-B1   (hex)		Coulomb Technologies
+0024B1     (base 16)		Coulomb Technologies
+				1692 Dell Ave
+				Campbell  CA  95008
+				US
+
+00-24-9C   (hex)		Bimeng Comunication System Co. Ltd
+00249C     (base 16)		Bimeng Comunication System Co. Ltd
+				Level 16/f, Tower B,Sinotrans Plaza,No.43, Xi Zhi Men Northern Road,Hai dian District
+				Beijing    100044
+				CN
+
+00-24-98   (hex)		Cisco Systems, Inc
+002498     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-24-52   (hex)		Silicon Software GmbH
+002452     (base 16)		Silicon Software GmbH
+				Steubenstrasse 46
+				Mannheim  Baden-Wuerttemberg  68163
+				DE
+
+00-24-53   (hex)		Initra d.o.o.
+002453     (base 16)		Initra d.o.o.
+				Slomskova 33
+				Ljubljana    1000
+				SI
+
+00-24-4C   (hex)		Solartron Metrology Ltd
+00244C     (base 16)		Solartron Metrology Ltd
+				Steyning Way
+				Bognor Regis  West Sussex  PO20 9ST
+				GB
+
+00-24-48   (hex)		SpiderCloud Wireless, Inc
+002448     (base 16)		SpiderCloud Wireless, Inc
+				475 Sycamore Drive
+				Milpitas  CA  95035
+				US
+
+00-24-4B   (hex)		PERCEPTRON INC
+00244B     (base 16)		PERCEPTRON INC
+				47827 HALYARD DR
+				PLYMOUTH  MI  48170
+				US
+
+00-24-28   (hex)		EnergyICT
+002428     (base 16)		EnergyICT
+				Theodoor Sevenslaan 104a
+				Kortrijk    8500
+				BE
+
+00-24-17   (hex)		Thomson Telecom Belgium
+002417     (base 16)		Thomson Telecom Belgium
+				Prins Boudewijnlaan 47
+				Edegem  Antwerp  B-2650
+				BE
+
+00-24-16   (hex)		Any Use
+002416     (base 16)		Any Use
+				LG APT 211-1805,
+				Yongin City  Gyeong-Gi Province  448-150
+				KR
+
+00-24-2A   (hex)		Hittite Microwave Corporation
+00242A     (base 16)		Hittite Microwave Corporation
+				20 Alpha Rd
+				Chelmsford  MA  01824
+				US
+
+00-24-22   (hex)		Knapp Logistik Automation GmbH
+002422     (base 16)		Knapp Logistik Automation GmbH
+				Günter Knapp-Straße 5-7
+				Hart bei Graz  Styria  8075
+				AT
+
+00-24-1B   (hex)		iWOW Communications Pte Ltd
+00241B     (base 16)		iWOW Communications Pte Ltd
+				1 Lorong 2 Toa Payoh #04-01
+				    319637
+				SG
+
+00-24-5E   (hex)		Hivision Co.,ltd
+00245E     (base 16)		Hivision Co.,ltd
+				2201-2202, COFCO Property Tower,
+				Shenzhen  Guangdong  518101
+				CN
+
+00-24-4D   (hex)		Hokkaido Electronics Corporation
+00244D     (base 16)		Hokkaido Electronics Corporation
+				1-1 East 10 North 10
+				Sapporo  Hokkaido  065-0010
+				JP
+
+00-24-42   (hex)		Axona Limited
+002442     (base 16)		Axona Limited
+				Unit 4U St. Albans Enterprise Centre
+				St. Albans  Herts  AL3 6EN
+				GB
+
+00-24-00   (hex)		Nortel Networks
+002400     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75081
+				US
+
+00-23-FB   (hex)		IP Datatel, LLC.
+0023FB     (base 16)		IP Datatel, LLC.
+				13110 Southwest Freeway
+				Sugar Land  Texas  77478
+				US
+
+00-24-09   (hex)		The Toro Company
+002409     (base 16)		The Toro Company
+				5825 Jasmine Street
+				Riverside  CA  92504
+				US
+
+00-24-06   (hex)		Pointmobile
+002406     (base 16)		Pointmobile
+				301,World Meridian Verture Center-1 60-24
+				Seoul  Geumcheon-gu  153781
+				KR
+
+00-24-3C   (hex)		S.A.A.A.
+00243C     (base 16)		S.A.A.A.
+				Z.A. Croix Saint Mathieu
+				GALLARDON  Eure et Loir  28320
+				FR
+
+00-23-D3   (hex)		AirLink WiFi Networking Corp.
+0023D3     (base 16)		AirLink WiFi Networking Corp.
+				19F-1 Room A , No.97, Sec 4, Chung Hsin Rd.,
+				San Chung City,  Taipei Hsien  241
+				TW
+
+00-23-CA   (hex)		Behind The Set, LLC
+0023CA     (base 16)		Behind The Set, LLC
+				2185 Knollwood Dr.
+				Boulder  CO  80302
+				US
+
+00-23-CB   (hex)		Shenzhen Full-join Technology Co.,Ltd
+0023CB     (base 16)		Shenzhen Full-join Technology Co.,Ltd
+				9/F,No.1,Xinrui Road,Hourui ,Xixiang Town, Bao'an District
+				ShenZhen  GuangDong  518000
+				CN
+
+00-23-AD   (hex)		Xmark Corporation
+0023AD     (base 16)		Xmark Corporation
+				309 Legget  Drive
+				Ottawa  Ontario  K2K 3A3
+				CA
+
+00-23-AB   (hex)		Cisco Systems, Inc
+0023AB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-23-A4   (hex)		New Concepts Development Corp.
+0023A4     (base 16)		New Concepts Development Corp.
+				2650 Bridge Lane
+				Woodstock  IL  60098
+				US
+
+00-23-DC   (hex)		Benein, Inc
+0023DC     (base 16)		Benein, Inc
+				Hyojachonjesangga228 B9, 297,
+				Sengnam-si  Kyunggi-do  463-818
+				KR
+
+00-23-D1   (hex)		TRG
+0023D1     (base 16)		TRG
+				Wisma Kosgoro 13th Floor
+				Jakarta Pusat    10350
+				ID
+
+00-23-FE   (hex)		Biodevices, SA
+0023FE     (base 16)		Biodevices, SA
+				Rua 5 de Outubro, 309
+				Porto    4100-175
+				PT
+
+00-23-F4   (hex)		Masternaut
+0023F4     (base 16)		Masternaut
+				4, rue Charles Cros
+				Louviers    27407
+				FR
+
+00-23-D0   (hex)		Uniloc USA Inc.
+0023D0     (base 16)		Uniloc USA Inc.
+				3333 Michelson Drive
+				Irvine  CA  92612
+				US
+
+00-23-C3   (hex)		LogMeIn, Inc.
+0023C3     (base 16)		LogMeIn, Inc.
+				500 Unicorn Park Drive
+				Woburn  Massachusetts  01801
+				US
+
+00-23-B0   (hex)		COMXION Technology Inc.
+0023B0     (base 16)		COMXION Technology Inc.
+				11F, No. 111, Sec 2, Keelung Rd., Sinyi Distric
+				Taipei  Taiwan  110
+				TW
+
+00-23-E1   (hex)		Cavena Image Products AB
+0023E1     (base 16)		Cavena Image Products AB
+				Nytorpsvägen 26
+				Täby  Stockholm  se-183 53
+				SE
+
+00-23-7E   (hex)		ELSTER GMBH
+00237E     (base 16)		ELSTER GMBH
+				KUHLMANNSTRASSE 10
+				HAMELN    31785
+				DE
+
+00-23-7C   (hex)		NEOTION
+00237C     (base 16)		NEOTION
+				ZI les Paluds
+				AUBAGNE    F-13400
+				FR
+
+00-23-7A   (hex)		RIM
+00237A     (base 16)		RIM
+				295 Phillip Street
+				Waterloo  Ontario  N2L 3W8
+				CA
+
+00-23-6D   (hex)		ResMed Ltd
+00236D     (base 16)		ResMed Ltd
+				1, Elizabeth Macarthur Drive
+				Bella Vista  NSW  2153
+				AU
+
+00-23-6B   (hex)		Xembedded, Inc.
+00236B     (base 16)		Xembedded, Inc.
+				1050 Highland Dr
+				Ann Arbor  MI  48108
+				US
+
+00-23-61   (hex)		Unigen Corporation
+002361     (base 16)		Unigen Corporation
+				45388 Warm Springs Blvd
+				Fremont  CA  94539
+				US
+
+00-23-2C   (hex)		Senticare
+00232C     (base 16)		Senticare
+				161 Worcester Rd
+				Framingham  MA  01701
+				US
+
+00-23-2B   (hex)		IRD A/S
+00232B     (base 16)		IRD A/S
+				Kullinggade 31
+				Svendborg  Fyn  5700
+				DK
+
+00-23-36   (hex)		METEL s.r.o.
+002336     (base 16)		METEL s.r.o.
+				Zizkuv Kopec 617
+				Ceska Skalice  Nachod  55203
+				CZ
+
+00-23-38   (hex)		OJ-Electronics A/S
+002338     (base 16)		OJ-Electronics A/S
+				Stenager 13B
+				Sønderborg    6400
+				DK
+
+00-23-3B   (hex)		C-Matic Systems Ltd
+00233B     (base 16)		C-Matic Systems Ltd
+				Warren Court
+				Crowborough  East Sussex  TN6 2QX
+				GB
+
+00-23-2A   (hex)		eonas IT-Beratung und -Entwicklung GmbH
+00232A     (base 16)		eonas IT-Beratung und -Entwicklung GmbH
+				Greifenhagener Str. 54
+				Berlin    10437
+				DE
+
+00-23-27   (hex)		Shouyo Electronics CO., LTD
+002327     (base 16)		Shouyo Electronics CO., LTD
+				4F., No.8, Lane 345, Yang Kung St.
+				Taipei    11491
+				TW
+
+00-23-28   (hex)		ALCON TELECOMMUNICATIONS CO., LTD.
+002328     (base 16)		ALCON TELECOMMUNICATIONS CO., LTD.
+				2nd FL, NO 480-5, SEC. 6, YEN-PING N. RD.,
+				TAIPEI  TAIWAN  111
+				TW
+
+00-23-72   (hex)		MORE STAR INDUSTRIAL GROUP LIMITED
+002372     (base 16)		MORE STAR INDUSTRIAL GROUP LIMITED
+				Rm1221-1225, F12 Sangda Science and Technology Building ,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-23-4C   (hex)		KTC AB
+00234C     (base 16)		KTC AB
+				F O Petersons gata 6
+				Vastra Frolunda  Gothenburg  SE-42131
+				SE
+
+00-23-43   (hex)		TEM AG
+002343     (base 16)		TEM AG
+				Triststrasse 8
+				Chur    7007
+				CH
+
+00-23-5F   (hex)		Silicon Micro Sensors GmbH
+00235F     (base 16)		Silicon Micro Sensors GmbH
+				Grenzstrasse 28 / Gebäude 32
+				Dresden  Saxony  01109
+				DE
+
+00-23-85   (hex)		ANTIPODE
+002385     (base 16)		ANTIPODE
+				5 RUE DE DOUAI
+				PARIS  ILE DE FRANCE  75009
+				FR
+
+00-22-D8   (hex)		Shenzhen GST Security and Safety Technology Limited
+0022D8     (base 16)		Shenzhen GST Security and Safety Technology Limited
+				Room 502,Building 6 of Kupai Infomation Harbour,
+				Shenzhen  Guangdong  518040
+				CN
+
+00-22-DC   (hex)		Vigil Health Solutions Inc.
+0022DC     (base 16)		Vigil Health Solutions Inc.
+				2102-4464 Markham St
+				Victoria  BC  V8Z 7X8
+				CA
+
+00-22-D9   (hex)		Fortex Industrial Ltd.
+0022D9     (base 16)		Fortex Industrial Ltd.
+				Flat 16, 12 /F.,Pacific Trade Centre
+				Kowloon  Hong Kong  852
+				CN
+
+00-22-D3   (hex)		Hub-Tech
+0022D3     (base 16)		Hub-Tech
+				77, Imae-dong
+				Seongnam-si  Gyeonggi-do  463-829
+				KR
+
+00-22-D4   (hex)		ComWorth Co., Ltd.
+0022D4     (base 16)		ComWorth Co., Ltd.
+				2-35-7 Nishimagome
+				Ohta-ku  Tokyo  143-0026
+				JP
+
+00-22-FE   (hex)		Advanced Illumination
+0022FE     (base 16)		Advanced Illumination
+				440 State Garage Road
+				Rochester  Vermont  05767
+				US
+
+00-23-00   (hex)		Cayee Computer Ltd.
+002300     (base 16)		Cayee Computer Ltd.
+				Units 1002-1003, 10/F, Join-In Hang Sing Centre
+				Kwai Chung  N.T  
+				HK
+
+00-22-F3   (hex)		SHARP Corporation
+0022F3     (base 16)		SHARP Corporation
+				22-22,Nagaike-cho
+				Osaka city  Osaka prefecture  545-8522
+				JP
+
+00-22-F6   (hex)		Syracuse Research Corporation
+0022F6     (base 16)		Syracuse Research Corporation
+				6225 Running Ridge Road
+				North Syracuse  NY  13212
+				US
+
+00-23-0D   (hex)		Nortel Networks
+00230D     (base 16)		Nortel Networks
+				2221 Lakeside Blvd
+				Richardson  TX  75081
+				US
+
+00-23-03   (hex)		LITE-ON IT Corporation
+002303     (base 16)		LITE-ON IT Corporation
+				14F, No. 392, Ruey Kuang Road, Neihu
+				Taipei City    114
+				TW
+
+00-22-ED   (hex)		TSI Power Corporation
+0022ED     (base 16)		TSI Power Corporation
+				1103 West Pierce Avenue
+				Antigo  WI  54409
+				US
+
+00-22-E1   (hex)		ZORT Labs, LLC.
+0022E1     (base 16)		ZORT Labs, LLC.
+				44H Dover Point Road
+				Dover  NH  03820
+				US
+
+00-22-E0   (hex)		Atlantic Software Technologies S.r.L.
+0022E0     (base 16)		Atlantic Software Technologies S.r.L.
+				Via Martino Bassi, 9
+				Milano    20148
+				IT
+
+00-22-DF   (hex)		TAMUZ Monitors
+0022DF     (base 16)		TAMUZ Monitors
+				Tiedenkamp 16
+				Henstedt-Ulzburg  SH  24558
+				DE
+
+00-23-1A   (hex)		ITF Co., Ltd.
+00231A     (base 16)		ITF Co., Ltd.
+				2-2-11 Nishiki-cho
+				Tachikawa-shi  Tokyo  190-0022
+				JP
+
+00-22-BC   (hex)		JDSU France SAS
+0022BC     (base 16)		JDSU France SAS
+				34 rue Necker
+				SAINT ETIENNE  LOIRE  42000
+				FR
+
+00-22-AA   (hex)		Nintendo Co., Ltd.
+0022AA     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-22-C9   (hex)		Lenord, Bauer & Co GmbH
+0022C9     (base 16)		Lenord, Bauer & Co GmbH
+				Dohlenstr 32
+				Oberhausen  NRW  46145
+				DE
+
+00-22-8C   (hex)		Photon Europe GmbH
+00228C     (base 16)		Photon Europe GmbH
+				Jülicher Straße 376
+				Aachen  Nordrhein-Westfalen  52070
+				DE
+
+00-22-8B   (hex)		Kensington Computer Products Group
+00228B     (base 16)		Kensington Computer Products Group
+				333 Twin Dolphin Dr.
+				Redwood Shores  CA  94065
+				US
+
+00-22-8D   (hex)		GBS Laboratories LLC
+00228D     (base 16)		GBS Laboratories LLC
+				2325 Dulles Corner Blvd
+				Herndon  VA  20171
+				US
+
+00-22-4C   (hex)		Nintendo Co., Ltd.
+00224C     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-22-4A   (hex)		RAYLASE AG
+00224A     (base 16)		RAYLASE AG
+				Argelsrieder Feld 2-4
+				Wessling  Bavaria  82234
+				DE
+
+00-22-4B   (hex)		AIRTECH TECHNOLOGIES, INC.
+00224B     (base 16)		AIRTECH TECHNOLOGIES, INC.
+				19fl-4, no.77, Hsin Tai Wu Rd., sec.1, Hsin-Chih
+				Taipei    221
+				TW
+
+00-22-56   (hex)		Cisco Systems, Inc
+002256     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-22-52   (hex)		ZOLL Lifecor Corporation
+002252     (base 16)		ZOLL Lifecor Corporation
+				121 Freeport Road
+				Pittsburgh  PA  15238
+				US
+
+00-22-4D   (hex)		MITAC INTERNATIONAL CORP.
+00224D     (base 16)		MITAC INTERNATIONAL CORP.
+				6TH FL., NO187, TIDING BLVD., SEC. 2
+				Taipei    114
+				TW
+
+00-22-9F   (hex)		Sensys Traffic AB
+00229F     (base 16)		Sensys Traffic AB
+				Slottsgatan 14
+				Jonkoping  Smaland  55322
+				SE
+
+00-22-99   (hex)		SeaMicro Inc.
+002299     (base 16)		SeaMicro Inc.
+				4677 Old Ironsides Dr.,
+				Santa Clara  CA  95054
+				US
+
+00-22-6D   (hex)		Shenzhen GIEC Electronics Co., Ltd.
+00226D     (base 16)		Shenzhen GIEC Electronics Co., Ltd.
+				24/F, XiNian Center, ShenNan Road 6021#, Futian District
+				Shenzhen  Guangdong Province  518040
+				CN
+
+00-22-6E   (hex)		Gowell Electronic Limited
+00226E     (base 16)		Gowell Electronic Limited
+				Room 3601 ,36 Floor,Golden Central Tower,Jintian Road,Futian Central District,
+				Shenzhen  GuangDong  518048
+				CN
+
+00-22-5D   (hex)		Digicable Network India Pvt. Ltd.
+00225D     (base 16)		Digicable Network India Pvt. Ltd.
+				7B, Shah Industrial Estate
+				Andheri - West, Mumbai.  Maharashtra  400 053
+				IN
+
+00-22-7B   (hex)		Apogee Labs, Inc.
+00227B     (base 16)		Apogee Labs, Inc.
+				210 S. 3rd St.
+				North Wales  PA  19454
+				US
+
+00-22-7D   (hex)		YE DATA INC.
+00227D     (base 16)		YE DATA INC.
+				182 Shinko
+				Iruma  Saitama  358-0055
+				JP
+
+00-22-A8   (hex)		Ouman Oy
+0022A8     (base 16)		Ouman Oy
+				Voimatie 6
+				Kempele    FIN-90440
+				FI
+
+00-22-23   (hex)		TimeKeeping Systems, Inc.
+002223     (base 16)		TimeKeeping Systems, Inc.
+				30700 Bainbridge Road
+				Solon  OH  44139
+				US
+
+00-22-1A   (hex)		Audio Precision
+00221A     (base 16)		Audio Precision
+				5750 SW Arctic Drive
+				Beaverton  OR  97005
+				US
+
+00-22-18   (hex)		AKAMAI TECHNOLOGIES INC
+002218     (base 16)		AKAMAI TECHNOLOGIES INC
+				150 BROADWAY
+				CAMBRIDGE  MA  02142
+				US
+
+00-22-3C   (hex)		RATIO Entwicklungen GmbH
+00223C     (base 16)		RATIO Entwicklungen GmbH
+				Ludwig-Erhard-Strasse 22
+				Hamburg    20459
+				DE
+
+00-21-E7   (hex)		Informatics Services Corporation
+0021E7     (base 16)		Informatics Services Corporation
+				140, Negin Bldg.,
+				Tehran    1549534511
+				IR
+
+00-21-DC   (hex)		TECNOALARM S.r.l.
+0021DC     (base 16)		TECNOALARM S.r.l.
+				Via Cirie'
+				San Mauro Torinese  Torino  10099
+				IT
+
+00-21-F1   (hex)		Tutus Data AB
+0021F1     (base 16)		Tutus Data AB
+				Svardvagen 11
+				Danderyd  Stockholm  18233
+				SE
+
+00-21-E3   (hex)		SerialTek LLC
+0021E3     (base 16)		SerialTek LLC
+				1570 Oakland Road
+				San Jose  CA  95131
+				US
+
+00-22-1C   (hex)		Private
+00221C     (base 16)		Private
+
+00-22-22   (hex)		Schaffner Deutschland GmbH
+002222     (base 16)		Schaffner Deutschland GmbH
+				Nürtingen Branch
+				Nürtingen  BW  D-72622
+				DE
+
+00-21-F8   (hex)		Enseo, Inc.
+0021F8     (base 16)		Enseo, Inc.
+				401 International Parkway
+				Richardson  TX  75081
+				US
+
+00-21-F3   (hex)		Si14 SpA
+0021F3     (base 16)		Si14 SpA
+				Via Tommaseo 77
+				Padova  PD  35131
+				IT
+
+00-22-31   (hex)		SMT&C Co., Ltd.
+002231     (base 16)		SMT&C Co., Ltd.
+				2Fr. Haksan Bldg. 110, Gwangjang-dong, Gwangjin-gu
+				Seoul    143-802
+				KR
+
+00-22-13   (hex)		PCI CORPORATION
+002213     (base 16)		PCI CORPORATION
+				No.25, Lane 66, Hebei 1st St.,  Beitun District
+				Taichung    406
+				TW
+
+00-22-01   (hex)		Aksys Networks Inc
+002201     (base 16)		Aksys Networks Inc
+				428, 3553 - 31 Street NW
+				Calgary    T2L 2K7
+				CA
+
+00-21-7B   (hex)		Bastec AB
+00217B     (base 16)		Bastec AB
+				Hästvägen 4A
+				Malmö  SE  212 35
+				SE
+
+00-21-76   (hex)		YMax Telecom Ltd.
+002176     (base 16)		YMax Telecom Ltd.
+				11 Moshe Levi str.
+				Rishon Le Zion    75658
+				IL
+
+00-21-71   (hex)		Wesung TNC Co., Ltd.
+002171     (base 16)		Wesung TNC Co., Ltd.
+				102-1409, Bucheon Chunui Technopark 1st,
+				Bucheon-City,  Gyeongggi-Do  420-857
+				KR
+
+00-21-93   (hex)		Videofon MV
+002193     (base 16)		Videofon MV
+				6 Blackoak Mews
+				Newtown  PA  18940
+				US
+
+00-21-92   (hex)		Baoding Galaxy Electronic Technology  Co.,Ltd
+002192     (base 16)		Baoding Galaxy Electronic Technology  Co.,Ltd
+				NO.91 Fengfan Rd.,GaoKai District,Baoding City,Hebei Prov.China 071051
+				Baoding City  Hebei Prov.  071051
+				CN
+
+00-21-A7   (hex)		Hantle System Co., Ltd.
+0021A7     (base 16)		Hantle System Co., Ltd.
+				481-10 Byucksan Digital Vally II, RM 1511
+				Seoul City  Seoul  153-783
+				KR
+
+00-21-9C   (hex)		Honeywld Technology Corp.
+00219C     (base 16)		Honeywld Technology Corp.
+				No.40,Hsueh-Fu Rd.
+				Hsinchu    300
+				TW
+
+00-21-9A   (hex)		Cambridge Visual Networks Ltd
+00219A     (base 16)		Cambridge Visual Networks Ltd
+				61 Selwyn Road
+				Cambridge  Cambridgeshire  CB3 9EA
+				GB
+
+00-21-D8   (hex)		Cisco Systems, Inc
+0021D8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-21-D7   (hex)		Cisco Systems, Inc
+0021D7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-21-D9   (hex)		SEKONIC CORPORATION
+0021D9     (base 16)		SEKONIC CORPORATION
+				7-24-14
+				NERIMA-KU  TOKYO  178-8686
+				JP
+
+00-21-DA   (hex)		Automation Products Group Inc.
+0021DA     (base 16)		Automation Products Group Inc.
+				1025 West 1700 North
+				Logan  Utah  84321
+				US
+
+00-21-B5   (hex)		Galvanic Ltd
+0021B5     (base 16)		Galvanic Ltd
+				38 Nothumberland Road
+				Dublin    2
+				IE
+
+00-21-BD   (hex)		Nintendo Co., Ltd.
+0021BD     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-21-C4   (hex)		Consilium AB
+0021C4     (base 16)		Consilium AB
+				Västra Finnbodavägen 2-4
+				Nacka  Stockholm  13131
+				SE
+
+00-21-89   (hex)		AppTech, Inc.
+002189     (base 16)		AppTech, Inc.
+				363 E Greyhound Pass
+				Carmel  Indiana  46032
+				US
+
+00-21-22   (hex)		Chip-pro Ltd.
+002122     (base 16)		Chip-pro Ltd.
+				5F.-4, No.63, Siwei Rd., North District,
+				Hsinchu    300
+				TW
+
+00-21-25   (hex)		KUK JE TONG SHIN Co.,LTD
+002125     (base 16)		KUK JE TONG SHIN Co.,LTD
+				476-3
+				Incheon  Kwangyouk-Si  407-060
+				KR
+
+00-21-26   (hex)		Shenzhen Torch Equipment Co., Ltd.
+002126     (base 16)		Shenzhen Torch Equipment Co., Ltd.
+				Floor 5, Block 3, Liming Industrial District, Zhongshanyuan Road, Nanshan,
+				Shenzhen  Guangdong  518052
+				CN
+
+00-21-13   (hex)		Padtec S/A
+002113     (base 16)		Padtec S/A
+				Road Campinas Mogi-Mirim km 118,5
+				Campinas  São Paulo  13086-902
+				BR
+
+00-21-12   (hex)		WISCOM SYSTEM CO.,LTD
+002112     (base 16)		WISCOM SYSTEM CO.,LTD
+				100 Jiangjun Road,Jiangning,
+				Nanjing    211100
+				CN
+
+00-21-0E   (hex)		Orpak Systems L.T.D.
+00210E     (base 16)		Orpak Systems L.T.D.
+				31 Lechi St
+				Bnei - Brak    51114
+				IL
+
+00-21-61   (hex)		Yournet Inc.
+002161     (base 16)		Yournet Inc.
+				KT R&D Center
+				Seoul    137-792
+				KR
+
+00-21-5F   (hex)		IHSE GmbH
+00215F     (base 16)		IHSE GmbH
+				Maybachstraße 11
+				Oberteuringen  Baden-Württemberg  88094
+				DE
+
+00-21-35   (hex)		ALCATEL-LUCENT
+002135     (base 16)		ALCATEL-LUCENT
+				Ramirez de Prado 5
+				Madrid    28045
+				ES
+
+00-21-38   (hex)		Cepheid
+002138     (base 16)		Cepheid
+				904 Caribbean Drive
+				Sunnyvale  CA  94089
+				US
+
+00-21-47   (hex)		Nintendo Co., Ltd.
+002147     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-21-49   (hex)		China Daheng Group ,Inc.
+002149     (base 16)		China Daheng Group ,Inc.
+				12F Daheng Science & Technology Tower ,NO.3 Suzhou Str.
+				Beijing    100080
+				CN
+
+00-21-56   (hex)		Cisco Systems, Inc
+002156     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-21-51   (hex)		Millinet Co., Ltd.
+002151     (base 16)		Millinet Co., Ltd.
+				2F, West Building, IT Venture Tower, 78, Garakbon-Dong
+				Songpa-gu  Seoul  138-803
+				US
+
+00-21-6C   (hex)		ODVA
+00216C     (base 16)		ODVA
+				4220 Varsity Drive
+				Ann Arbor  MI  48108-5006
+				US
+
+00-21-1C   (hex)		Cisco Systems, Inc
+00211C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-21-18   (hex)		Athena Tech, Inc.
+002118     (base 16)		Athena Tech, Inc.
+				3721 Macintosh Dr
+				Warrenton  VA  20187
+				US
+
+00-1F-BD   (hex)		Kyocera Wireless Corp.
+001FBD     (base 16)		Kyocera Wireless Corp.
+				10300 Campus Point Drive
+				San Diego  CA  92121
+				US
+
+00-1F-B9   (hex)		Paltronics
+001FB9     (base 16)		Paltronics
+				1145 Paltronics Ct
+				Crystal Lake  IL  60014
+				US
+
+00-1F-B7   (hex)		WiMate Technologies Corp.
+001FB7     (base 16)		WiMate Technologies Corp.
+				14A Building 2, Guimiao Garden, Nanguanglu, Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+00-1F-B4   (hex)		SmartShare Systems
+001FB4     (base 16)		SmartShare Systems
+				Tonsbakken 16-18
+				Skovlunde    DK-2740
+				DK
+
+00-1F-B6   (hex)		Chi Lin Technology Co., Ltd.
+001FB6     (base 16)		Chi Lin Technology Co., Ltd.
+				No.18, Sheng Li 1st St., Jen Te Hsiang,
+				Tainan  Taiwan  71758
+				CN
+
+00-1F-C8   (hex)		Up-Today Industrial Co., Ltd.
+001FC8     (base 16)		Up-Today Industrial Co., Ltd.
+				7/F., Unify Commercial & Industrial Building
+				Kowloon    
+				HK
+
+00-1F-C5   (hex)		Nintendo Co., Ltd.
+001FC5     (base 16)		Nintendo Co., Ltd.
+				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+00-1F-C0   (hex)		Control Express Finland Oy
+001FC0     (base 16)		Control Express Finland Oy
+				Laitaatsillantie 3
+				Savonlinna    57170
+				FI
+
+00-1F-BC   (hex)		EVGA Corporation
+001FBC     (base 16)		EVGA Corporation
+				2900 Saturn St.
+				Brea  CA  92821
+				US
+
+00-1F-F9   (hex)		Advanced Knowledge Associates
+001FF9     (base 16)		Advanced Knowledge Associates
+				3350 Scott Blvd, Suite 40
+				Santa Clara  CA  95054-3119
+				US
+
+00-1F-ED   (hex)		Tecan Systems Inc.
+001FED     (base 16)		Tecan Systems Inc.
+				2450 Zanker Road
+				San Jose  CA  95131
+				US
+
+00-1F-E5   (hex)		In-Circuit GmbH
+001FE5     (base 16)		In-Circuit GmbH
+				Königsbrücker Strasse 69
+				Dresden    01099
+				DE
+
+00-1F-F4   (hex)		Power Monitors, Inc.
+001FF4     (base 16)		Power Monitors, Inc.
+				800 North Main Street
+				Mt. Crawford  Virginia  22841
+				US
+
+00-1F-5F   (hex)		Blatand GmbH
+001F5F     (base 16)		Blatand GmbH
+				Lichtenbergstrße 8
+				Garching  Bavaria  85748
+				DE
+
+00-1F-57   (hex)		Phonik Innovation Co.,LTD
+001F57     (base 16)		Phonik Innovation Co.,LTD
+				29/167 Moo2, 345 Rd, Lampo,
+				Nonthaburi    11110
+				TH
+
+00-1F-59   (hex)		Kronback Tracers
+001F59     (base 16)		Kronback Tracers
+				c/o DTU, R254
+				Ballerup  Copenhagen  2750
+				DK
+
+00-1F-4E   (hex)		ConMed Linvatec
+001F4E     (base 16)		ConMed Linvatec
+				11311 Concept Blvd.
+				Largo  FL  33773
+				US
+
+00-1F-AA   (hex)		Taseon, Inc.
+001FAA     (base 16)		Taseon, Inc.
+				 3099 N. First Street
+				San Jose  CA  95134
+				US
+
+00-1F-7B   (hex)		TechNexion Ltd.
+001F7B     (base 16)		TechNexion Ltd.
+				17F-1, No. 16, Jian Ba Road,
+				Chung Ho   Taipei  235
+				TW
+
+00-1F-7D   (hex)		Embedded Wireless GmbH
+001F7D     (base 16)		Embedded Wireless GmbH
+				Soeflinger Strasse 200
+				Ulm  BW  89077
+				DE
+
+00-1F-8D   (hex)		Ingenieurbuero Stark GmbH und Ko. KG
+001F8D     (base 16)		Ingenieurbuero Stark GmbH und Ko. KG
+				Rudolf-Diesel-Strasse 44
+				Laichingen  BW  89150
+				DE
+
+00-1F-AF   (hex)		NextIO, Inc.
+001FAF     (base 16)		NextIO, Inc.
+				8303 N MoPac Expressway
+				Austin  TX  78759
+				US
+
+00-1F-74   (hex)		Eigen Development
+001F74     (base 16)		Eigen Development
+				1807 W10th Ave
+				Vancouver  BC  V6J 2A9
+				CA
+
+00-1F-75   (hex)		GiBahn Media
+001F75     (base 16)		GiBahn Media
+				1816 Rosedale Suseo-dong
+				Seoul    135-885
+				KR
+
+00-1F-8F   (hex)		Shanghai Bellmann Digital Source Co.,Ltd.
+001F8F     (base 16)		Shanghai Bellmann Digital Source Co.,Ltd.
+				404-408 Main Bd, FDUSP, No.11 Guotai Rd.
+				Shanghai    200433
+				CN
+
+00-1F-84   (hex)		Gigle Semiconductor
+001F84     (base 16)		Gigle Semiconductor
+				Barcelona Activa - Vivero Glorias
+				Barcelona    08018
+				ES
+
+00-1F-6E   (hex)		Vtech Engineering Corporation
+001F6E     (base 16)		Vtech Engineering Corporation
+				20 New England Business Center
+				Andover  MA  01810
+				US
+
+00-1F-66   (hex)		PLANAR LLC
+001F66     (base 16)		PLANAR LLC
+				32, Elkina str
+				Chelyabinsk  SU  454091
+				RU
+
+00-1F-A0   (hex)		A10 Networks
+001FA0     (base 16)		A10 Networks
+				3 West Plumeria Drive
+				San Jose  CA  95134
+				US
+
+00-1F-9E   (hex)		Cisco Systems, Inc
+001F9E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1E-E6   (hex)		Shenzhen Advanced Video Info-Tech Co., Ltd.
+001EE6     (base 16)		Shenzhen Advanced Video Info-Tech Co., Ltd.
+				Tianxiang 11A,  Tian'an Cyber Park , Futian
+				Shenzhen  Guangdong  518048
+				CN
+
+00-1E-F7   (hex)		Cisco Systems, Inc
+001EF7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1F-0B   (hex)		Federal State Unitary Enterprise Industrial UnionElectropribor
+001F0B     (base 16)		Federal State Unitary Enterprise Industrial UnionElectropribor
+				
+				Penza    440011
+				RU
+
+00-1F-0C   (hex)		Intelligent Digital Services GmbH
+001F0C     (base 16)		Intelligent Digital Services GmbH
+				Grevesmuehlener Strasse 8
+				Mallentin  Mecklenburg-Vorpommern  23639
+				DE
+
+00-1F-08   (hex)		RISCO LTD
+001F08     (base 16)		RISCO LTD
+				32 Hacharoshet St
+				Kiriat Malachi    83101
+				IL
+
+00-1F-43   (hex)		ENTES ELEKTRONIK
+001F43     (base 16)		ENTES ELEKTRONIK
+				Y. Dudullu Org. San. Bol. And Sanayi Sit. No.6
+				Istanbul  Dudullu  34775
+				TR
+
+00-1F-14   (hex)		NexG
+001F14     (base 16)		NexG
+				5F Seoul Academy Bldg, Daechi-Dong, Gangnam-Gu,
+				Seoul    135-280
+				KR
+
+00-1E-F1   (hex)		Servimat
+001EF1     (base 16)		Servimat
+				ZAET Les Haies
+				St Maximin  Oise  60740
+				FR
+
+00-1E-F4   (hex)		L-3 Communications Display Systems
+001EF4     (base 16)		L-3 Communications Display Systems
+				1355 Bluegrass Lakes Parkway
+				Alpharetta  GA  30004-8458
+				US
+
+00-1E-F5   (hex)		Hitek Automated Inc.
+001EF5     (base 16)		Hitek Automated Inc.
+				Room C3-901, No.383, Huamen Shijia
+				Hangzhou    310012
+				CN
+
+00-1F-0E   (hex)		Japan Kyastem Co., Ltd
+001F0E     (base 16)		Japan Kyastem Co., Ltd
+				1-4-4
+				Tachikawa  Tokyo  190-0022
+				JP
+
+00-1F-28   (hex)		HPN Supply Chain
+001F28     (base 16)		HPN Supply Chain
+				8000 Foothills Blvd
+				Roseville  CA  95747
+				US
+
+00-1F-1E   (hex)		Astec Technology Co., Ltd
+001F1E     (base 16)		Astec Technology Co., Ltd
+				12F, No.2, Jian Ba Rd.
+				Chung Ho  Taipei Hsien  235
+				TW
+
+00-1F-4A   (hex)		Albentia Systems S.A.
+001F4A     (base 16)		Albentia Systems S.A.
+				Albala 13
+				Madrid    28037
+				ES
+
+00-1E-AA   (hex)		E-Senza Technologies GmbH
+001EAA     (base 16)		E-Senza Technologies GmbH
+				Blarerstrasse 56
+				Konstanz  BW  78462
+				DE
+
+00-1E-9C   (hex)		Fidustron INC
+001E9C     (base 16)		Fidustron INC
+				NO.770-6, Jhongiheng Rd.
+				Jhonghe City  Taipei County  235
+				TW
+
+00-1E-97   (hex)		Medium Link System Technology CO., LTD,
+001E97     (base 16)		Medium Link System Technology CO., LTD,
+				11F.-2, No.7, Alley 92, Lane 77, Sec. 4, Sinhai Rd.,
+				Wunshan District,  Taipei  11693
+				TW
+
+00-1E-8B   (hex)		Infra Access Korea Co., Ltd.
+001E8B     (base 16)		Infra Access Korea Co., Ltd.
+				#902, Sambo Saving Bank B/D,
+				Kwanak-gu,  Seoul  151-830
+				KR
+
+00-1E-BB   (hex)		BLUELIGHT TECHNOLOGY INC.
+001EBB     (base 16)		BLUELIGHT TECHNOLOGY INC.
+				6472 CAMDEN AVE., SUITE 102B
+				SAN JOSE  CA  95120
+				US
+
+00-1E-B5   (hex)		Ever Sparkle Technologies Ltd
+001EB5     (base 16)		Ever Sparkle Technologies Ltd
+				Unit 403, Nan Fung Commercial Centre
+				Kowloon Bay  Kowloon  
+				HK
+
+00-1E-B3   (hex)		Primex Wireless
+001EB3     (base 16)		Primex Wireless
+				965 Wells Street
+				Lake Geneva  WI  53147
+				US
+
+00-1E-85   (hex)		Lagotek Corporation
+001E85     (base 16)		Lagotek Corporation
+				11661 SE 1st St. #208
+				Bellevue  WA  98005
+				US
+
+00-1E-D8   (hex)		Digital United Inc.
+001ED8     (base 16)		Digital United Inc.
+				9F, No.220, Gangcian Rd.
+				Taipei    11444
+				TW
+
+00-1E-D6   (hex)		Alentec & Orion AB
+001ED6     (base 16)		Alentec & Orion AB
+				Grustagsvägen 4
+				138 40  ÄLTA  
+				SE
+
+00-1E-C6   (hex)		Obvius Holdings LLC
+001EC6     (base 16)		Obvius Holdings LLC
+				20811 NW Cornell Road
+				Hillsboro  OR  97124
+				US
+
+00-1E-C4   (hex)		Celio Corp
+001EC4     (base 16)		Celio Corp
+				265 E 100 S  # 280
+				Salt Lake City  UT  84111
+				US
+
+00-1E-C1   (hex)		3COM EUROPE LTD
+001EC1     (base 16)		3COM EUROPE LTD
+				Peoplebuilding 2
+				Hemel Hempstead  HERTS.  HP2 4NW
+				GB
+
+00-1E-B6   (hex)		TAG Heuer SA
+001EB6     (base 16)		TAG Heuer SA
+				Rue Louis-Joseph Chevrolet 6A
+				la Chaux-de-Fonds  NE  2300
+				CH
+
+00-1E-AC   (hex)		Armadeus Systems
+001EAC     (base 16)		Armadeus Systems
+				Business Campus
+				MULHOUSE cedex  Haut-Rhin  68058
+				FR
+
+00-1E-77   (hex)		Air2App
+001E77     (base 16)		Air2App
+				50 Old Forge Rd
+				Hanover  MA  02339
+				US
+
+00-1E-7B   (hex)		R.I.CO. S.r.l.
+001E7B     (base 16)		R.I.CO. S.r.l.
+				via Adriatica, 17
+				Castelfidardo  AN  60022
+				IT
+
+00-1E-6E   (hex)		Shenzhen First Mile Communications Ltd
+001E6E     (base 16)		Shenzhen First Mile Communications Ltd
+				5th Floor, Block R3-A
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1E-6D   (hex)		IT R&D Center
+001E6D     (base 16)		IT R&D Center
+				461-25, Jeonmin-dong,Yuseong-Gu
+				Daejeon    305-811
+				KR
+
+00-1E-34   (hex)		CryptoMetrics
+001E34     (base 16)		CryptoMetrics
+				160 Michael Cowpland Dr
+				Ottawa  Ontario  K2M 1P6
+				CA
+
+00-1E-2D   (hex)		STIM
+001E2D     (base 16)		STIM
+				ZAC les COUSTELLIERS
+				CASTRIES  HERAULT  34160
+				FR
+
+00-1E-41   (hex)		Microwave Communication & Component, Inc.
+001E41     (base 16)		Microwave Communication & Component, Inc.
+				#204, WOOLIM LION`S VALLEY 2, 680
+				Seoul    150-787
+				KR
+
+00-1D-FC   (hex)		KSIC
+001DFC     (base 16)		KSIC
+				#6F, Korea Federation of Teacher's Associations, 114-1, TaeBong-Ro,
+				Seoul  Seocho-Ku  137-715
+				KR
+
+00-1E-55   (hex)		COWON SYSTEMS,Inc.
+001E55     (base 16)		COWON SYSTEMS,Inc.
+				6th Fl. COWON TOWER,689-3,
+				Seoul    135-080
+				KR
+
+00-1E-56   (hex)		Bally Wulff Entertainment GmbH
+001E56     (base 16)		Bally Wulff Entertainment GmbH
+				Maybachufer 48-51
+				Berlin    12045
+				DE
+
+00-1E-3F   (hex)		TrellisWare Technologies, Inc.
+001E3F     (base 16)		TrellisWare Technologies, Inc.
+				16516 Via Esprillo, Suite 300
+				San Diego  CA  92127
+				US
+
+00-1E-57   (hex)		ALCOMA, spol. s r.o.
+001E57     (base 16)		ALCOMA, spol. s r.o.
+				Klukovice 313, Praha - 5
+				Praha    152 00
+				CZ
+
+00-1E-50   (hex)		BATTISTONI RESEARCH
+001E50     (base 16)		BATTISTONI RESEARCH
+				PARCO DONICA 56
+				FISCIANO  SALERNO  84084
+				IT
+
+00-1E-11   (hex)		ELELUX INTERNATIONAL LTD
+001E11     (base 16)		ELELUX INTERNATIONAL LTD
+				3F., NO.103 CHOW TZE STREET
+				TAIPEI    114
+				TW
+
+00-1D-F2   (hex)		Netflix, Inc.
+001DF2     (base 16)		Netflix, Inc.
+				100 Winchester Circle
+				Los Gatos  CA  95032
+				US
+
+00-1D-EF   (hex)		TRIMM, INC.
+001DEF     (base 16)		TRIMM, INC.
+				407 RAILROAD STREET
+				BUTNER  NC  27509
+				US
+
+00-1D-F1   (hex)		Intego Systems, Inc.
+001DF1     (base 16)		Intego Systems, Inc.
+				5343 Bowden Road
+				Jacksonville  FL  32216
+				US
+
+00-1D-ED   (hex)		Grid Net, Inc.
+001DED     (base 16)		Grid Net, Inc.
+				340 Brannan Street
+				San Francisco  CA  94107
+				US
+
+00-1D-C3   (hex)		RIKOR TV, Ltd
+001DC3     (base 16)		RIKOR TV, Ltd
+				Kostomarovsky per.,3
+				Moscow    105120
+				RU
+
+00-1D-C1   (hex)		Audinate Pty L
+001DC1     (base 16)		Audinate Pty L
+				Level 1, 458 Wattle St
+				Ultimo  NSW  2007
+				AU
+
+00-1D-B2   (hex)		HOKKAIDO ELECTRIC ENGINEERING CO.,LTD.
+001DB2     (base 16)		HOKKAIDO ELECTRIC ENGINEERING CO.,LTD.
+				Nishinopporo 120-8
+				Ebetu-City  Hokkaido  069-0832
+				JP
+
+00-1D-AD   (hex)		Sinotech Engineering Consultants, Inc.  Geotechnical Enginee
+001DAD     (base 16)		Sinotech Engineering Consultants, Inc.  Geotechnical Enginee
+				Basement No.7 Lane 26, Yat-Sen Rd.
+				Taipei    110
+				TW
+
+00-1D-AB   (hex)		SwissQual License AG
+001DAB     (base 16)		SwissQual License AG
+				Baarerstrasse 78
+				Zug  Postfach  117
+				CH
+
+00-1D-9C   (hex)		Rockwell Automation
+001D9C     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+00-1D-A0   (hex)		Heng Yu Electronic Manufacturing Company Limited
+001DA0     (base 16)		Heng Yu Electronic Manufacturing Company Limited
+				Room 1503-5, Nan Fung Com'l Centre,
+				Kowloon    
+				HK
+
+00-1D-D8   (hex)		Microsoft Corporation
+001DD8     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				Redmond  Washington  98052-6399
+				US
+
+00-1D-C8   (hex)		Navionics Research Inc., dba SCADAmetrics
+001DC8     (base 16)		Navionics Research Inc., dba SCADAmetrics
+				1133 Pond Road
+				Wildwood  Missouri  63038
+				US
+
+00-1D-CC   (hex)		Ayon Cyber Security, Inc
+001DCC     (base 16)		Ayon Cyber Security, Inc
+				2350 Commerce Park Dr.
+				Palm Bay  FL  32905
+				US
+
+00-1D-92   (hex)		MICRO-STAR INT'L CO.,LTD.
+001D92     (base 16)		MICRO-STAR INT'L CO.,LTD.
+				No.69,Li-De St,Jung-Ho City
+				Taipei  Hsien  235
+				TW
+
+00-1D-8A   (hex)		TechTrex Inc
+001D8A     (base 16)		TechTrex Inc
+				6221 Highway 7, Unit 12
+				Woodbridge  Ontalio  L4H 0K8
+				CA
+
+00-1D-80   (hex)		Beijing Huahuan Eletronics Co.,Ltd
+001D80     (base 16)		Beijing Huahuan Eletronics Co.,Ltd
+				No.26,Shangdi 6th St.Haidian District,
+				Beijing    100085
+				CN
+
+00-1D-83   (hex)		Emitech Corporation
+001D83     (base 16)		Emitech Corporation
+				2F,No.7-1,Industry E,Rd.9
+				Hsinchu    308
+				TW
+
+00-1D-74   (hex)		Tianjin China-Silicon Microelectronics Co., Ltd.
+001D74     (base 16)		Tianjin China-Silicon Microelectronics Co., Ltd.
+				301,3F Building 211,No.214 Hongqi Road, Nankai District, Tianjin China
+				Tianjin    300190
+				CN
+
+00-1D-4B   (hex)		Grid Connect Inc.
+001D4B     (base 16)		Grid Connect Inc.
+				1630 W. Diehl Rd
+				Naperville  IL  60563
+				US
+
+00-1D-4D   (hex)		Adaptive Recognition Hungary, Inc
+001D4D     (base 16)		Adaptive Recognition Hungary, Inc
+				Kiralyhago ter 8-9
+				Budapest  Europe  1126
+				HU
+
+00-1D-1E   (hex)		KYUSHU TEN CO.,LTD
+001D1E     (base 16)		KYUSHU TEN CO.,LTD
+				2360 YUNOKIMOTOMACHI
+				SASEBO-City  NAGASAKI Prefecture  857-0115
+				JP
+
+00-1D-1D   (hex)		Inter-M Corporation
+001D1D     (base 16)		Inter-M Corporation
+				653-5 Banghak-Dong, Dobong-Ku
+				Seoul    132-846
+				KR
+
+00-1D-0E   (hex)		Agapha Technology co., Ltd.
+001D0E     (base 16)		Agapha Technology co., Ltd.
+				9F No.121, Shingde Rd.,
+				Sanchung City  Taipei County  241
+				TW
+
+00-1D-0A   (hex)		Davis Instruments, Inc.
+001D0A     (base 16)		Davis Instruments, Inc.
+				3465 Diablo Ave.
+				Hayward  CA  94545
+				US
+
+00-1D-67   (hex)		AMEC
+001D67     (base 16)		AMEC
+				9F,No.360,Ruel Guang Rd,Neihu
+				Taipei    114
+				TW
+
+00-1D-7C   (hex)		ABE Elettronica S.p.A.
+001D7C     (base 16)		ABE Elettronica S.p.A.
+				Via Leonardo da Vinci, 92
+				CARAVAGGIO  BG  24043
+				IT
+
+00-1D-6D   (hex)		Confidant International LLC
+001D6D     (base 16)		Confidant International LLC
+				2530 Meridian Pkwy
+				Durham  North Carolina  27713
+				US
+
+00-1D-75   (hex)		Radioscape PLC
+001D75     (base 16)		Radioscape PLC
+				1 Albany Terrace
+				Regent's Park  London  NW1 4DS
+				GB
+
+00-1D-53   (hex)		S&O Electronics (Malaysia) Sdn. Bhd.
+001D53     (base 16)		S&O Electronics (Malaysia) Sdn. Bhd.
+				Lot 202, Bakar Arang
+				08000 Sungai Petani  Kedah  
+				MY
+
+00-1D-54   (hex)		Sunnic Technology & Merchandise INC.
+001D54     (base 16)		Sunnic Technology & Merchandise INC.
+				6F, NO.74,ZHOU-Z ST.,
+				Taipei    114
+				TW
+
+00-1D-5F   (hex)		OverSpeed SARL
+001D5F     (base 16)		OverSpeed SARL
+				15, allee du Bois Cailley
+				Le Thuit-Signol  Normandie  27370
+				FR
+
+00-1D-58   (hex)		CQ Inc
+001D58     (base 16)		CQ Inc
+				5F, No. 43, Lane 76, Rui Guang Road
+				Taipei    114
+				TW
+
+00-1D-87   (hex)		VigTech Labs Sdn Bhd
+001D87     (base 16)		VigTech Labs Sdn Bhd
+				45-11 The Boulevard Mid Valley City
+				Kuala Lumpur  Selangor  59200
+				MY
+
+00-1D-2F   (hex)		QuantumVision Corporation
+001D2F     (base 16)		QuantumVision Corporation
+				335 Plantation Way
+				Roswell  Ga  30075
+				US
+
+00-1C-E5   (hex)		MBS Electronic Systems GmbH
+001CE5     (base 16)		MBS Electronic Systems GmbH
+				Ringstrasse 3
+				82319 Starnberg  Bavaria  82319
+				DE
+
+00-1C-DD   (hex)		COWBELL ENGINEERING CO., LTD.
+001CDD     (base 16)		COWBELL ENGINEERING CO., LTD.
+				1739-1 Nagatoro
+				SAKU  Nagano  385-0021
+				JP
+
+00-1C-C2   (hex)		Part II Research, Inc.
+001CC2     (base 16)		Part II Research, Inc.
+				4601 E. Airport Dr.
+				Ontario  CA  91761
+				US
+
+00-1C-BD   (hex)		Ezze Mobile Tech., Inc.
+001CBD     (base 16)		Ezze Mobile Tech., Inc.
+				3F, Bubmusa Bldg., 151-31
+				  Seoul  135-824
+				KR
+
+00-1C-B8   (hex)		CBC Co., Ltd
+001CB8     (base 16)		CBC Co., Ltd
+				2-15-13, Tsukishima, Chuo-ku
+				Tokyo    104-0052
+				JP
+
+00-1C-AC   (hex)		Qniq Technology Corp.
+001CAC     (base 16)		Qniq Technology Corp.
+				5F, No.133, Sec.4, Minsheng E. Rd.,
+				Taipei    105
+				TW
+
+00-1C-A5   (hex)		Zygo Corporation
+001CA5     (base 16)		Zygo Corporation
+				21 Laurel Brook Rd.
+				Middlefield  CT  06455
+				US
+
+00-1C-9D   (hex)		Liecthi AG
+001C9D     (base 16)		Liecthi AG
+				10 Unterholz Street
+				Kriegstetten  Solothurn  4566
+				CH
+
+00-1C-FF   (hex)		Napera Networks Inc
+001CFF     (base 16)		Napera Networks Inc
+				7683 SE 27th
+				Mercer Island  WA  98040
+				US
+
+00-1C-DC   (hex)		Custom Computer Services, Inc.
+001CDC     (base 16)		Custom Computer Services, Inc.
+				1020 Spring City Drive
+				Waukesha  WI  53186
+				US
+
+00-1C-D1   (hex)		Waves Audio LTD
+001CD1     (base 16)		Waves Audio LTD
+				Azrilei Center 3, Triangle tower
+				Tel Aviv  Central  67023
+				IL
+
+00-1C-ED   (hex)		ENVIRONNEMENT SA
+001CED     (base 16)		ENVIRONNEMENT SA
+				111 bd. Robespierre
+				POISSY  Yvelines  78300
+				FR
+
+00-1C-BA   (hex)		VerScient, Inc.
+001CBA     (base 16)		VerScient, Inc.
+				7700 Equitable Drive
+				Eden Prairie  MN  55344
+				US
+
+00-1C-B0   (hex)		Cisco Systems, Inc
+001CB0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-4C   (hex)		Petrotest Instruments
+001C4C     (base 16)		Petrotest Instruments
+				Ludwig-Erhard-Ring 13
+				Dahlewitz  BBG  15827
+				DE
+
+00-1C-45   (hex)		Chenbro Micom Co., Ltd.
+001C45     (base 16)		Chenbro Micom Co., Ltd.
+				15Fl., No. 150, Jian Yi Road
+				Chung Ho City  Taipei Hsien  235
+				TW
+
+00-1C-3C   (hex)		Seon Design Inc.
+001C3C     (base 16)		Seon Design Inc.
+				111-3B Burbidge Street
+				Coquitlam  BC  V3K 7B2
+				CA
+
+00-1C-57   (hex)		Cisco Systems, Inc
+001C57     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1C-5D   (hex)		Leica Microsystems
+001C5D     (base 16)		Leica Microsystems
+				Lothbury House Cambridge Technopark
+				Cambridge    CB5 8PB
+				GB
+
+00-1C-5E   (hex)		ASTON France
+001C5E     (base 16)		ASTON France
+				151 Avenue Gallieni
+				BAGNOLET  ile de france  93177
+				FR
+
+00-1C-55   (hex)		Shenzhen Kaifa Technology Co.
+001C55     (base 16)		Shenzhen Kaifa Technology Co.
+				7006 Caitian Road, Futian District,
+				Shenzhen  Guangdong  518035
+				CN
+
+00-1C-5B   (hex)		Chubb Electronic Security Systems Ltd
+001C5B     (base 16)		Chubb Electronic Security Systems Ltd
+				Shadsworth Road
+				Blackburn  Lancashire  BB1 2PR
+				GB
+
+00-1C-44   (hex)		Bosch Security Systems BV
+001C44     (base 16)		Bosch Security Systems BV
+				Kapittelweg 10
+				4827 HG  Breda  Brabant  4827
+				NL
+
+00-1C-82   (hex)		Genew Technologies
+001C82     (base 16)		Genew Technologies
+				3A3 Building B1, Cyber-tech Zone,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-1C-84   (hex)		STL Solution Co.,Ltd.
+001C84     (base 16)		STL Solution Co.,Ltd.
+				#710, World Meridian Venture Center I
+				Seoul    152781
+				KR
+
+00-1C-79   (hex)		Cohesive Financial Technologies LLC
+001C79     (base 16)		Cohesive Financial Technologies LLC
+				200 South Wacker Dr.
+				Chicago  IL  60606
+				US
+
+00-1C-64   (hex)		Landis+Gyr
+001C64     (base 16)		Landis+Gyr
+				30000 Mill Creek Ave. Suite 100
+				Alpharetta  GA  30022
+				US
+
+00-1C-31   (hex)		Mobile XP Technology Co., LTD
+001C31     (base 16)		Mobile XP Technology Co., LTD
+				Room No.2506,Tri-tower C building,No.66 Zhongguancun East Road,Haidian District
+				Beijing    100080
+				CN
+
+00-1C-8B   (hex)		MJ Innovations Ltd.
+001C8B     (base 16)		MJ Innovations Ltd.
+				333 Wyecroft Road
+				Oakville  Ontario  L6K 2H2
+				CA
+
+00-1C-6D   (hex)		KYOHRITSU ELECTRONIC INDUSTRY CO., LTD.
+001C6D     (base 16)		KYOHRITSU ELECTRONIC INDUSTRY CO., LTD.
+				2-5-1, NIPPONBASHI-NISHI,
+				OSAKA    556-0004
+				JP
+
+00-1C-96   (hex)		Linkwise Technology Pte Ltd
+001C96     (base 16)		Linkwise Technology Pte Ltd
+				Blk 3, Ang Mo Kio Industrial Park 2A
+				    568050
+				SG
+
+00-1C-29   (hex)		CORE DIGITAL ELECTRONICS CO., LTD
+001C29     (base 16)		CORE DIGITAL ELECTRONICS CO., LTD
+				1006# 102 CHUNUITECHNOPARK 200-1
+				BUCHEON-CITY  GYUNGGI-DO  420-857
+				KR
+
+00-1C-24   (hex)		Formosa Wireless Systems Corp.
+001C24     (base 16)		Formosa Wireless Systems Corp.
+				No. 408, Guandong Rd.,
+				HsinChu City    300
+				TW
+
+00-1C-20   (hex)		CLB Benelux
+001C20     (base 16)		CLB Benelux
+				Ramgatseweg 17
+				Raamsdonksveer  NBR  4941 VN
+				NL
+
+00-1C-1C   (hex)		Center Communication Systems GmbH
+001C1C     (base 16)		Center Communication Systems GmbH
+				Ignaz-Koeck-Strasse 19
+				Vienna    A-1210
+				AT
+
+00-1B-DA   (hex)		UTStarcom Inc
+001BDA     (base 16)		UTStarcom Inc
+				1275 Harbor Bay PKWY
+				Alameda  CA  94502
+				US
+
+00-1B-D1   (hex)		SOGESTMATIC
+001BD1     (base 16)		SOGESTMATIC
+				409 Route de la Gare
+				CHATEAUNEUF DE GADAGNE  PACA  84470
+				FR
+
+00-1C-00   (hex)		Entry Point, LLC
+001C00     (base 16)		Entry Point, LLC
+				735 Robins
+				Idaho Falls  Idaho  83401
+				US
+
+00-1B-FD   (hex)		Dignsys Inc.
+001BFD     (base 16)		Dignsys Inc.
+				14F, Digital Empire Bldg., B-1408
+				Suwon  Gyeonggi-do  443-813
+				KR
+
+00-1B-D6   (hex)		Kelvin Hughes Ltd
+001BD6     (base 16)		Kelvin Hughes Ltd
+				New North Road
+				Ilford  Essex  IG6 2UR
+				GB
+
+00-1B-CF   (hex)		Dataupia Corporation
+001BCF     (base 16)		Dataupia Corporation
+				One Alewife Center
+				Cambridge  MA  02140
+				US
+
+00-1B-CB   (hex)		PEMPEK SYSTEMS PTY LTD
+001BCB     (base 16)		PEMPEK SYSTEMS PTY LTD
+				UNIT 3 / 13 HOYLE AVENUE
+				CASTLE HILL  NSW  2154
+				AU
+
+00-1B-F5   (hex)		Tellink Sistemas de Telecomunicación S.L.
+001BF5     (base 16)		Tellink Sistemas de Telecomunicación S.L.
+				C/ María Tubau Nº 5 Bajo B
+				Madrid    28050
+				ES
+
+00-1B-E6   (hex)		VR AG
+001BE6     (base 16)		VR AG
+				Rütistrasse 18
+				Schlieren    CH-8952
+				CH
+
+00-1B-E2   (hex)		AhnLab,Inc.
+001BE2     (base 16)		AhnLab,Inc.
+				6th Fl, CCMM Bldg, 12 Yeouido-dong
+				Seoul    150869
+				KR
+
+00-1B-E0   (hex)		TELENOT ELECTRONIC GmbH
+001BE0     (base 16)		TELENOT ELECTRONIC GmbH
+				Wiesentalstraße 42
+				Aalen  Baden-Württemberg  73434
+				DE
+
+00-1C-34   (hex)		HUEY CHIAO INTERNATIONAL CO., LTD.
+001C34     (base 16)		HUEY CHIAO INTERNATIONAL CO., LTD.
+				5F, NO. 649-1,
+				HSIN CHUANG CITY  TAIPEI  242
+				TW
+
+00-1C-36   (hex)		iNEWiT NV
+001C36     (base 16)		iNEWiT NV
+				Schaliënhoevedreef 20D
+				Mechelen  Antwerp  2800
+				BE
+
+00-1C-15   (hex)		iPhotonix LLC
+001C15     (base 16)		iPhotonix LLC
+				2600 N Central Expressway
+				Richardson  Texas  75080
+				US
+
+00-1C-07   (hex)		Cwlinux Limited
+001C07     (base 16)		Cwlinux Limited
+				Unit 138, 13/F, Weswick Commercial Building,
+				Wan Chai    
+				HK
+
+00-1B-A3   (hex)		Flexit Group GmbH
+001BA3     (base 16)		Flexit Group GmbH
+				Bräuhausstraße 14
+				Salzburg  Salzburg  5020
+				AT
+
+00-1B-9F   (hex)		Calyptech Pty Ltd
+001B9F     (base 16)		Calyptech Pty Ltd
+				5/486 Lower Heidelberg Road
+				Heidelberg  Victoria  3084
+				AU
+
+00-1B-9A   (hex)		Apollo Fire Detectors Ltd
+001B9A     (base 16)		Apollo Fire Detectors Ltd
+				36 Brookside Road
+				Havant  Hampshire  P09 1JR
+				GB
+
+00-1B-BD   (hex)		FMC Kongsberg Subsea AS
+001BBD     (base 16)		FMC Kongsberg Subsea AS
+				Kirkegaardsveien 45
+				Kongsberg  Buskerud  3601
+				NO
+
+00-1B-BE   (hex)		ICOP Digital
+001BBE     (base 16)		ICOP Digital
+				16801 W. 116th St.
+				Lenexa  KS  66219
+				US
+
+00-1B-B3   (hex)		Condalo GmbH
+001BB3     (base 16)		Condalo GmbH
+				Kohlstatt 3
+				Lichtenau  Bavaria  86706
+				DE
+
+00-1B-B7   (hex)		Alta Heights Technology Corp.
+001BB7     (base 16)		Alta Heights Technology Corp.
+				108 Alta Heights Court
+				Los Gatos  California  95030
+				US
+
+00-1B-99   (hex)		KS System GmbH
+001B99     (base 16)		KS System GmbH
+				Alexanderstraße 37
+				Muelheim  NRW  45472
+				DE
+
+00-1B-8F   (hex)		Cisco Systems, Inc
+001B8F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1B-8C   (hex)		JMicron Technology Corp.
+001B8C     (base 16)		JMicron Technology Corp.
+				1F, No.13, Innovation Road 1
+				Hsinchu    300
+				TW
+
+00-1B-91   (hex)		EFKON AG
+001B91     (base 16)		EFKON AG
+				Dietrich-Keller-Strasse 20
+				8074 Raaba    
+				AT
+
+00-1B-82   (hex)		Taiwan Semiconductor Co., Ltd.
+001B82     (base 16)		Taiwan Semiconductor Co., Ltd.
+				11F, No. 205, Sec. 3, Beishin Rd,
+				Shindian  Taipei  231
+				TW
+
+00-1B-89   (hex)		EMZA Visual Sense Ltd.
+001B89     (base 16)		EMZA Visual Sense Ltd.
+				20 Ha'ta'as St., Beith Hapamon
+				Kfar Saba    44425
+				IL
+
+00-1B-8B   (hex)		NEC Platforms, Ltd.
+001B8B     (base 16)		NEC Platforms, Ltd.
+				800 Shimomata
+				Kakegawa  Shizuoka  436-8501
+				JP
+
+00-1B-AC   (hex)		Curtiss Wright Controls Embedded Computing
+001BAC     (base 16)		Curtiss Wright Controls Embedded Computing
+				10201 Wateridge Circle
+				San Diego  CA  92121
+				US
+
+00-1B-6A   (hex)		Powerwave Technologies Sweden AB
+001B6A     (base 16)		Powerwave Technologies Sweden AB
+				164 26
+				Knarrarnäsgatan 7, Kista    
+				SE
+
+00-1B-67   (hex)		Cisco Systems Inc
+001B67     (base 16)		Cisco Systems Inc
+				The Stella Building
+				Swindon  Wiltshire  SN5 6NX
+				GB
+
+00-1B-7B   (hex)		The Tintometer Ltd
+001B7B     (base 16)		The Tintometer Ltd
+				Solar Way
+				Amesbury  Wiltshire  SP4 7SZ
+				GB
+
+00-1B-75   (hex)		Hypermedia Systems
+001B75     (base 16)		Hypermedia Systems
+				2B Bergman St.
+				Rehovot    76705
+				IL
+
+00-1B-27   (hex)		Merlin CSI
+001B27     (base 16)		Merlin CSI
+				12625 Danielson Court
+				Poway  CA  92064
+				US
+
+00-1B-1B   (hex)		Siemens AG,
+001B1B     (base 16)		Siemens AG,
+				I IA SC MF-K PE 3
+				76187 Karlsruhe   Baden Wuerttemberg  
+				DE
+
+00-1B-57   (hex)		SEMINDIA SYSTEMS PRIVATE LIMITED
+001B57     (base 16)		SEMINDIA SYSTEMS PRIVATE LIMITED
+				#1106/9,A.M.Industrial Estate,Garvebhai palya,
+				BANGALORE  KARNATAKA  560068
+				IN
+
+00-1B-55   (hex)		Hurco Automation Ltd.
+001B55     (base 16)		Hurco Automation Ltd.
+				6F, No. 31, Shintai Rd.
+				Jubei City,  Hsinchu Hsien  30244
+				TW
+
+00-1B-53   (hex)		Cisco Systems, Inc
+001B53     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1B-49   (hex)		Roberts Radio limited
+001B49     (base 16)		Roberts Radio limited
+				Swinton Works
+				Mexborough  South Yorkshire  S64 8AJ
+				GB
+
+00-1B-0E   (hex)		InoTec GmbH Organisationssysteme
+001B0E     (base 16)		InoTec GmbH Organisationssysteme
+				Biedrichstrasse 11
+				Woelfersheim  Hessen  D-61200
+				DE
+
+00-1B-04   (hex)		Affinity International S.p.a
+001B04     (base 16)		Affinity International S.p.a
+				C.so Savona 51
+				Villastellone    I10029
+				IT
+
+00-1B-06   (hex)		Ateliers R. LAUMONIER
+001B06     (base 16)		Ateliers R. LAUMONIER
+				Ateliers R. LAUMONIER
+				Nesles-la-Vallée  Val d'Oise  95690
+				FR
+
+00-1B-31   (hex)		Neural Image. Co. Ltd.
+001B31     (base 16)		Neural Image. Co. Ltd.
+				A307, CASI, Osaka Univ.
+				Suita city  Osaka  565-0871
+				JP
+
+00-1B-29   (hex)		Avantis.Co.,Ltd
+001B29     (base 16)		Avantis.Co.,Ltd
+				502 SEOIL BLDG.
+				SEOUL    132-872
+				KR
+
+00-1B-2B   (hex)		Cisco Systems, Inc
+001B2B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1B-28   (hex)		POLYGON, JSC
+001B28     (base 16)		POLYGON, JSC
+				37/1, Karl Marx str., floor 5
+				Ufa  Bashkortostan  450077
+				RU
+
+00-1B-43   (hex)		Beijing DG Telecommunications equipment Co.,Ltd
+001B43     (base 16)		Beijing DG Telecommunications equipment Co.,Ltd
+				No.5 Jiangtai Road, Chaoyang District
+				Beijing    100016
+				CN
+
+00-1B-3C   (hex)		Software Technologies Group,Inc.
+001B3C     (base 16)		Software Technologies Group,Inc.
+				10330 W. Roosevelt Road
+				Weschester  IL  60154
+				US
+
+00-1B-3D   (hex)		EuroTel Spa
+001B3D     (base 16)		EuroTel Spa
+				viale Martiri della Liberta,4
+				Lissone  Milan  20035
+				IT
+
+00-1B-66   (hex)		Sennheiser electronic GmbH & Co. KG
+001B66     (base 16)		Sennheiser electronic GmbH & Co. KG
+				Am Labor 1
+				Wedemark  Niedersachsen  30900
+				DE
+
+00-1B-60   (hex)		NAVIGON AG
+001B60     (base 16)		NAVIGON AG
+				Berliner Platz 11
+				Wuerzburg  Bavaria  97080
+				DE
+
+00-1B-05   (hex)		YMC AG
+001B05     (base 16)		YMC AG
+				Sonnenstrasse 4
+				Kreuzlingen  Thurgau  8280
+				CH
+
+00-1A-FF   (hex)		Wizyoung Tech.
+001AFF     (base 16)		Wizyoung Tech.
+				9F, No. 25, Sec. 1, Nanjing E. Rd.
+				Taipei    104
+				TW
+
+00-1B-00   (hex)		Neopost Technologies
+001B00     (base 16)		Neopost Technologies
+				113 rue Jean-Marin Naudin
+				Bagneux    92220
+				FR
+
+00-1B-4E   (hex)		Navman New Zealand
+001B4E     (base 16)		Navman New Zealand
+				7-21 Kawana Street
+				Auckland    0627
+				NZ
+
+00-1B-16   (hex)		Celtro Ltd.
+001B16     (base 16)		Celtro Ltd.
+				Azorim Business Park
+				Petach Tikva    49527
+				IL
+
+00-1A-E6   (hex)		Atlanta Advanced Communications Holdings Limited
+001AE6     (base 16)		Atlanta Advanced Communications Holdings Limited
+				1900 West Oak Circle, Marietta
+				Atlanta  Georgia  30062
+				US
+
+00-1A-D9   (hex)		International Broadband Electric Communications, Inc.
+001AD9     (base 16)		International Broadband Electric Communications, Inc.
+				285 Dunlop Blvd. SW
+				Huntsville  AL  35824
+				US
+
+00-1A-C8   (hex)		ISL (Instrumentation Scientifique de Laboratoire)
+001AC8     (base 16)		ISL (Instrumentation Scientifique de Laboratoire)
+				Impasse des 4 vents
+				VERSON  CALVADOS  14790
+				FR
+
+00-1A-AB   (hex)		eWings s.r.l.
+001AAB     (base 16)		eWings s.r.l.
+				via S. Quasimodo 46
+				Castel Maggiore  Bologna  40013
+				IT
+
+00-1A-AC   (hex)		Corelatus AB
+001AAC     (base 16)		Corelatus AB
+				Tegnergatan 37
+				Stockholm    11161
+				SE
+
+00-1A-AF   (hex)		BLUSENS TECHNOLOGY
+001AAF     (base 16)		BLUSENS TECHNOLOGY
+				EDIFICIO CNL,- AV.
+				15707 - SANTIAGO DE COMPOSTELA  A Coruña  
+				ES
+
+00-1A-B0   (hex)		Signal Networks Pvt. Ltd.,
+001AB0     (base 16)		Signal Networks Pvt. Ltd.,
+				No.12, Kalpataru Apartments,
+				Bangalore  Karnataka  560001
+				IN
+
+00-1A-A1   (hex)		Cisco Systems, Inc
+001AA1     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-1A-C6   (hex)		Micro Control Designs
+001AC6     (base 16)		Micro Control Designs
+				17490 Caribou Dr
+				Monument  Co.  80132
+				US
+
+00-1A-F2   (hex)		Dynavisions Schweiz AG
+001AF2     (base 16)		Dynavisions Schweiz AG
+				Freisinger Landstraße 21
+				D-80939  Muenchen  
+				DE
+
+00-1A-82   (hex)		PROBA Building Automation Co.,LTD
+001A82     (base 16)		PROBA Building Automation Co.,LTD
+				Penghuan Building 501, Shangdi East Road #1, Haidian District,
+				Beijing    100085
+				CN
+
+00-1A-7C   (hex)		Hirschmann Multimedia B.V.
+001A7C     (base 16)		Hirschmann Multimedia B.V.
+				Pampuslaan 170
+				Weesp  Noord-Holland  1382 JS
+				NL
+
+00-1A-7A   (hex)		Lismore Instruments Limited
+001A7A     (base 16)		Lismore Instruments Limited
+				Unit 2 Tristar Centre, Star Road
+				Horsham  West Sussex  RH13 8RA
+				GB
+
+00-1A-78   (hex)		ubtos
+001A78     (base 16)		ubtos
+				Rn.213, Woolim Lions Valley, #680
+				seoul  Gasan-dong  153-803
+				KR
+
+00-1A-76   (hex)		SDT information Technology Co.,LTD.
+001A76     (base 16)		SDT information Technology Co.,LTD.
+				Samil B/B 2F, 5-63 Hyochang-dong
+				Seoul    140-896
+				KR
+
+00-1A-70   (hex)		Cisco-Linksys, LLC
+001A70     (base 16)		Cisco-Linksys, LLC
+				121 Theory Drive
+				Irvine  California  92612
+				US
+
+00-1A-61   (hex)		PacStar Corp.
+001A61     (base 16)		PacStar Corp.
+				15055 SW Sequoia Pkwy, Suite 100
+				Portland  OR  97006
+				US
+
+00-1A-62   (hex)		Data Robotics, Incorporated
+001A62     (base 16)		Data Robotics, Incorporated
+				1881 Landings Dr
+				Mountain View  CA  94043
+				US
+
+00-1A-54   (hex)		Hip Shing Electronics Ltd.
+001A54     (base 16)		Hip Shing Electronics Ltd.
+				Unit 1/2/3, 20/F, New Treasure Center
+				    
+				HK
+
+00-1A-42   (hex)		Techcity Technology co., Ltd.
+001A42     (base 16)		Techcity Technology co., Ltd.
+				4F, No. 4, Alley 1, Szu Wei Lane, Chung Cheng Rd.,
+				Hsin Tein City  Taipei Hsien  231
+				TW
+
+00-1A-50   (hex)		PheeNet Technology Corp.
+001A50     (base 16)		PheeNet Technology Corp.
+				Rm. 3, 20F, No. 79, Sec. 1 Hsin Tai Wu Rd.
+				Hsi-Chih  New-Taipei City  221
+				TW
+
+00-1A-53   (hex)		Zylaya
+001A53     (base 16)		Zylaya
+				444 N. Frederick Ave.
+				Gaithersburg  MD  20877
+				US
+
+00-1A-4C   (hex)		Crossbow Technology, Inc
+001A4C     (base 16)		Crossbow Technology, Inc
+				4145 N. First Street
+				San Jose  CA  95134
+				US
+
+00-1A-1A   (hex)		Gentex Corporation/Electro-Acoustic Products
+001A1A     (base 16)		Gentex Corporation/Electro-Acoustic Products
+				2456 Brown Avenue
+				Manchester  NH  03103
+				US
+
+00-1A-12   (hex)		Essilor
+001A12     (base 16)		Essilor
+				64 Bis Avenue Aubert
+				94300  Vincennes  
+				FR
+
+00-1A-7D   (hex)		cyber-blue(HK)Ltd
+001A7D     (base 16)		cyber-blue(HK)Ltd
+				Room 1408 block C stars Plaza HongLiRoad,FuTian District
+				Shenzhen  GuangDong  518028
+				CN
+
+00-1A-60   (hex)		Wave Electronics Co.,Ltd.
+001A60     (base 16)		Wave Electronics Co.,Ltd.
+				3th Fl.,DaeSan Plaza B/D,Guun-Dong, 12-1,Gwonseon-Gu
+				Suwon-si  Kyeonggi-Do  441-814
+				KR
+
+00-1A-56   (hex)		ViewTel Co,. Ltd.
+001A56     (base 16)		ViewTel Co,. Ltd.
+				#B-502,Bundang Techno Park 148
+				BunDang-Ku, SeongNam-Si  GyeongGi-Do  463-760
+				KR
+
+00-19-F3   (hex)		Cetis, Inc
+0019F3     (base 16)		Cetis, Inc
+				5025 Galley Rd
+				Colorado Springs  CO  80915
+				US
+
+00-19-EF   (hex)		SHENZHEN LINNKING ELECTRONICS CO.,LTD
+0019EF     (base 16)		SHENZHEN LINNKING ELECTRONICS CO.,LTD
+				Room 901,B Block,Qinghua Information Center Hi-tec park North District,Nanshan District,Shenzhen
+				shenzhen  guangdong  518057
+				CN
+
+00-19-F7   (hex)		Onset Computer Corporation
+0019F7     (base 16)		Onset Computer Corporation
+				P.O. Box 3450
+				Pocasset  MA  02559
+				US
+
+00-19-EE   (hex)		CARLO GAVAZZI CONTROLS SPA-Controls Division
+0019EE     (base 16)		CARLO GAVAZZI CONTROLS SPA-Controls Division
+				Via Safforze 8
+				BELLUNO  BL  I-32100
+				IT
+
+00-19-BF   (hex)		Citiway technology Co.,ltd
+0019BF     (base 16)		Citiway technology Co.,ltd
+				No.2 Building,Jia 32,Beiheyan Avenue,East City
+				Peijing    100006
+				CN
+
+00-19-B6   (hex)		Euro Emme s.r.l.
+0019B6     (base 16)		Euro Emme s.r.l.
+				Via Belvedere, 24
+				Galliate Lombardo  Varese  21020
+				IT
+
+00-19-EB   (hex)		Pyronix Ltd
+0019EB     (base 16)		Pyronix Ltd
+				Braithwell Way
+				Rotherham  South Yorkshire  S66 8QY
+				GB
+
+00-19-E7   (hex)		Cisco Systems, Inc
+0019E7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-E9   (hex)		S-Information Technolgy, Co., Ltd.
+0019E9     (base 16)		S-Information Technolgy, Co., Ltd.
+				Sungwoo Bldg, 717-3 Suseo-dong,
+				Seoul    135-884
+				KR
+
+00-19-DA   (hex)		Welltrans O&E Technology Co. , Ltd.
+0019DA     (base 16)		Welltrans O&E Technology Co. , Ltd.
+				the 3rd Floor, building C-D, Hi-tech Digital Harbor, Guandong Industrial Park
+				Wuhan  Hubei  430074
+				CN
+
+00-1A-14   (hex)		Xin Hua Control Engineering Co.,Ltd.
+001A14     (base 16)		Xin Hua Control Engineering Co.,Ltd.
+				160 Wenjing Rd., Minhang
+				Shanghai    2000245
+				CN
+
+00-1A-10   (hex)		LUCENT TRANS ELECTRONICS CO.,LTD
+001A10     (base 16)		LUCENT TRANS ELECTRONICS CO.,LTD
+				9F-1,No.16,Chien Pah Rd.
+				Chung Ho  Taipei  235
+				TW
+
+00-1A-0C   (hex)		Swe-Dish Satellite Systems AB
+001A0C     (base 16)		Swe-Dish Satellite Systems AB
+				Torggatan 15
+				Solna  Stockholm  SE-171 06
+				SE
+
+00-19-DC   (hex)		ENENSYS Technologies
+0019DC     (base 16)		ENENSYS Technologies
+				Le Germanium
+				RENNES  Brittany  35700
+				FR
+
+00-19-D0   (hex)		Cathexis
+0019D0     (base 16)		Cathexis
+				PO Box 1091
+				Durban  KwaZulu Natal  4320
+				ZA
+
+00-19-D6   (hex)		LS Cable and System Ltd.
+0019D6     (base 16)		LS Cable and System Ltd.
+				12F LS Tower, 1026-6, Hogey-dong
+				Anyang-si  Gyeonggi-do  431-080
+				KR
+
+00-19-D7   (hex)		FORTUNETEK CO., LTD
+0019D7     (base 16)		FORTUNETEK CO., LTD
+				12F, No. 75, Sec 1, Chongqing S. Rd.,
+				Taipei    100
+				TW
+
+00-1A-02   (hex)		SECURE CARE PRODUCTS, INC
+001A02     (base 16)		SECURE CARE PRODUCTS, INC
+				39 CHENELL DRIVE
+				CONCORD  NH  03301
+				US
+
+00-19-F8   (hex)		Embedded Systems Design, Inc.
+0019F8     (base 16)		Embedded Systems Design, Inc.
+				6810 Deerpath Road
+				Elkridge  MD  21075
+				US
+
+00-1A-07   (hex)		Arecont Vision
+001A07     (base 16)		Arecont Vision
+				2400 N. Lincoln Ave
+				Altadena  CA  91001
+				US
+
+00-1A-08   (hex)		Simoco Ltd.
+001A08     (base 16)		Simoco Ltd.
+				Field House
+				Derby    DE1 1NH
+				GB
+
+00-1A-04   (hex)		Interay Solutions BV
+001A04     (base 16)		Interay Solutions BV
+				Mr. W.M. Oppedijk van Veenweg 8
+				BURGUM  Friesland  9251 GA
+				NL
+
+00-19-C9   (hex)		S&C ELECTRIC COMPANY
+0019C9     (base 16)		S&C ELECTRIC COMPANY
+				1135 ATLANTIC AVE
+				ALAMEDA  CA  94501
+				US
+
+00-19-B5   (hex)		Famar Fueguina S.A.
+0019B5     (base 16)		Famar Fueguina S.A.
+				Rodney 70
+				Buenos Aires    1427
+				AR
+
+00-19-B8   (hex)		Boundary Devices
+0019B8     (base 16)		Boundary Devices
+				7200 W. Oakland
+				Chandler  AZ  85226
+				US
+
+00-19-5D   (hex)		ShenZhen XinHuaTong Opto Electronics Co.,Ltd
+00195D     (base 16)		ShenZhen XinHuaTong Opto Electronics Co.,Ltd
+				5F,BaodaZhou,Shancheng Industrial Zone,BaoAn District
+				ShenZhen  GuangDong  518108
+				CN
+
+00-19-53   (hex)		Chainleader Communications Corp.
+001953     (base 16)		Chainleader Communications Corp.
+				5F, No. 400, Sec. 2 Bade Rd.,
+				Taipei    105
+				TW
+
+00-19-55   (hex)		Cisco Systems, Inc
+001955     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-19-59   (hex)		Staccato Communications Inc.
+001959     (base 16)		Staccato Communications Inc.
+				6195 Lusk Blvd.
+				San Diego  CA  92121
+				US
+
+00-19-4D   (hex)		Avago Technologies Sdn Bhd
+00194D     (base 16)		Avago Technologies Sdn Bhd
+				Bayan Lepas Free Industrial Zone
+				Bayan Lepas  Penang  11900
+				MY
+
+00-19-4E   (hex)		Ultra Electronics - TCS (Tactical Communication Systems)
+00194E     (base 16)		Ultra Electronics - TCS (Tactical Communication Systems)
+				5990 Cote De Liesse
+				TMR  Quebec  H4T 1V7
+				CA
+
+00-19-AC   (hex)		GSP SYSTEMS Inc.
+0019AC     (base 16)		GSP SYSTEMS Inc.
+				13FL, 101 Dong, Chunui Techno Park 1,
+				Bucheon-City  Gyeonggi-Do  420-857
+				KR
+
+00-19-B0   (hex)		HanYang System
+0019B0     (base 16)		HanYang System
+				701Ho, Kofomo Techno Center II, 1289-5
+				Shihung-Shi  Kyunggi-Do  429-850
+				KR
+
+00-19-95   (hex)		Jurong Hi-Tech (Suzhou)Co.ltd
+001995     (base 16)		Jurong Hi-Tech (Suzhou)Co.ltd
+				275,Xing Long Street, Suzhou Indudtrial Park
+				Suzhou  Jiang Su  215021
+				CN
+
+00-19-9A   (hex)		EDO-EVI
+00199A     (base 16)		EDO-EVI
+				7065 Columbia Gateway Dr.
+				Columbia  MD  21046
+				US
+
+00-19-94   (hex)		Jorjin Technologies Inc.
+001994     (base 16)		Jorjin Technologies Inc.
+				5F, No.28, Lane141, Sing-ai Rd.
+				Taipei    114
+				TW
+
+00-19-7C   (hex)		Riedel Communications GmbH
+00197C     (base 16)		Riedel Communications GmbH
+				Uellendahler Str. 353
+				Wuppertal  NRW  42109
+				DE
+
+00-19-A0   (hex)		NIHON DATA SYSTENS, INC.
+0019A0     (base 16)		NIHON DATA SYSTENS, INC.
+				6-9, Koyo-cho naka
+				Kobe-shi  Hyogo  658-0032
+				JP
+
+00-19-91   (hex)		avinfo
+001991     (base 16)		avinfo
+				Jiahuiyuan 703,Huaao Center,31# Zizhuyuan Road,
+				Beijing    100089
+				CN
+
+00-19-8C   (hex)		iXSea
+00198C     (base 16)		iXSea
+				55 av auguste Renoir
+				Marly le Roi    78160
+				FR
+
+00-19-62   (hex)		Commerciant, LP
+001962     (base 16)		Commerciant, LP
+				2901 Wilcrest
+				Houston  Texas  77042
+				US
+
+00-19-6F   (hex)		SensoPart GmbH
+00196F     (base 16)		SensoPart GmbH
+				Am Wiedenbach 1
+				Wieden  Baden-Württemberg  D-79695
+				DE
+
+00-18-DD   (hex)		Silicondust Engineering Ltd
+0018DD     (base 16)		Silicondust Engineering Ltd
+				38 Lillington Road
+				Auckland    
+				NZ
+
+00-18-DF   (hex)		The Morey Corporation
+0018DF     (base 16)		The Morey Corporation
+				100 Morey Drive
+				Woodridge  IL  60517
+				US
+
+00-18-E1   (hex)		Verkerk Service Systemen
+0018E1     (base 16)		Verkerk Service Systemen
+				Molenvliet 1
+				Zwijndrecht  Zuid-Holland  NL-3335LH
+				NL
+
+00-18-DA   (hex)		Würth Elektronik eiSos GmbH & Co. KG
+0018DA     (base 16)		Würth Elektronik eiSos GmbH & Co. KG
+				Max-Eyth-Straße 1
+				Waldenburg    74638
+				DE
+
+00-18-D5   (hex)		REIGNCOM
+0018D5     (base 16)		REIGNCOM
+				14F Kamco Yanjae Tower, 949-3
+				Seoul    135-739
+				KR
+
+00-18-E7   (hex)		Cameo Communications, INC.
+0018E7     (base 16)		Cameo Communications, INC.
+				NO.42, Sec. 6, Mincyuan E. Rd.
+				Taipei    114
+				TW
+
+00-18-E4   (hex)		YIGUANG
+0018E4     (base 16)		YIGUANG
+				3/FL.Industry zone,Fuxinlin,Hangcheng,Xixiang,Baoan
+				Shenzhen  Guangdong  518126
+				CN
+
+00-18-E5   (hex)		Adhoco AG
+0018E5     (base 16)		Adhoco AG
+				Technopark
+				Winterthur  ZH  CH-8406 
+				CH
+
+00-19-0A   (hex)		HASWARE INC.
+00190A     (base 16)		HASWARE INC.
+				4-12-3 HIGASHI
+				KUNITACHI  TOKYO  186-0002
+				JP
+
+00-19-23   (hex)		Phonex Korea Co., LTD.
+001923     (base 16)		Phonex Korea Co., LTD.
+				33-3, Geoyeo-Dong
+				Seoul  Songpa-Gu  138-814
+				KR
+
+00-19-1C   (hex)		Sensicast Systems
+00191C     (base 16)		Sensicast Systems
+				200 Reservoir St
+				Needham  MA  02494
+				US
+
+00-19-28   (hex)		Siemens AG, Transportation Systems
+001928     (base 16)		Siemens AG, Transportation Systems
+				Ackerstraße 22
+				Braunschweig    38126
+				DE
+
+00-19-15   (hex)		TECOM Co., Ltd.
+001915     (base 16)		TECOM Co., Ltd.
+				23 R&D Road 2 Science Based Industrial Park
+				Hsin-Chu    300
+				TW
+
+00-19-1B   (hex)		Sputnik Engineering AG
+00191B     (base 16)		Sputnik Engineering AG
+				Höheweg 85
+				Biel-Bienne BE    2502
+				CH
+
+00-19-09   (hex)		DEVI - Danfoss A/S
+001909     (base 16)		DEVI - Danfoss A/S
+				Ulvehavevej 61
+				Vejle    7100
+				DK
+
+00-19-33   (hex)		Strix Systems, Inc.
+001933     (base 16)		Strix Systems, Inc.
+				26610 Agoura Road
+				Calabasas  CA  91302
+				US
+
+00-19-04   (hex)		WB Electronics Sp. z o.o.
+001904     (base 16)		WB Electronics Sp. z o.o.
+				ul. Poznanska 129/133
+				Ozarow Mazowiecki  Mazowieckie  05-850
+				PL
+
+00-19-34   (hex)		TRENDON TOUCH TECHNOLOGY CORP.
+001934     (base 16)		TRENDON TOUCH TECHNOLOGY CORP.
+				2F No.5, Alley 22, Lane 513, Rueiguang Rd., Neihu
+				Taipei City    114
+				TW
+
+00-19-0D   (hex)		IEEE 1394c
+00190D     (base 16)		IEEE 1394c
+				c/o 1394 Trade Association
+				Southlake  TX  76092
+				US
+
+00-18-81   (hex)		Buyang Electronics Industrial Co., Ltd
+001881     (base 16)		Buyang Electronics Industrial Co., Ltd
+				434-140, Oryu-Dong
+				Incheon    404-300
+				KR
+
+00-18-76   (hex)		WowWee Ltd.
+001876     (base 16)		WowWee Ltd.
+				92 Granville Rd. Suite 301A-C
+				T.S.T. East  Kowloon  
+				HK
+
+00-18-7A   (hex)		Wiremold
+00187A     (base 16)		Wiremold
+				60 Woodlawn St.
+				West Hartford  CT  06110
+				US
+
+00-18-6C   (hex)		Neonode AB
+00186C     (base 16)		Neonode AB
+				Biblioteksgatan 11, 1st floor
+				Stockholm    S-111 46
+				SE
+
+00-18-73   (hex)		Cisco Systems, Inc
+001873     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-18-5F   (hex)		TAC Inc.
+00185F     (base 16)		TAC Inc.
+				66 Nishiishigatsubocho Nishinanajyo Shimogyoku
+				Kyoto    600-8896
+				JP
+
+00-18-D4   (hex)		Unified Display Interface SIG
+0018D4     (base 16)		Unified Display Interface SIG
+				15201 SW Greenbrier Road
+				Beaverton  Oregon  97006
+				US
+
+00-18-A7   (hex)		Yoggie Security Systems LTD.
+0018A7     (base 16)		Yoggie Security Systems LTD.
+				P.P.Box 156
+				Beth Halevy    42870
+				IL
+
+00-18-A2   (hex)		XIP Technology AB
+0018A2     (base 16)		XIP Technology AB
+				PO Box 437
+				Jönköping  Sweden  SE- 551 16
+				SE
+
+00-18-9C   (hex)		Weldex Corporation
+00189C     (base 16)		Weldex Corporation
+				6751 Katella Avenue
+				Cypress  CA  90630
+				US
+
+00-18-9A   (hex)		HANA Micron Inc.
+00189A     (base 16)		HANA Micron Inc.
+				#95-1 Wonnam-Li, Umbong-Myeon
+				Asan-City  Chung-Nam  336-864
+				KR
+
+00-18-64   (hex)		Eaton Corporation
+001864     (base 16)		Eaton Corporation
+				730, rue Commerciale
+				St-Jean-Chrysostome  QC  G6Z 2C5
+				CA
+
+00-18-66   (hex)		Leutron Vision
+001866     (base 16)		Leutron Vision
+				Industriestrasse 57
+				Glattbrugg  ZH  8152
+				CH
+
+00-18-60   (hex)		SIM Technology Group Shanghai Simcom Ltd.,
+001860     (base 16)		SIM Technology Group Shanghai Simcom Ltd.,
+				SIM Technology building,
+				Shanghai    200233
+				CN
+
+00-18-97   (hex)		JESS-LINK PRODUCTS Co., LTD
+001897     (base 16)		JESS-LINK PRODUCTS Co., LTD
+				9F, No. 176, Jian-Yi Rd., Chung Ho City
+				Taipei County    235
+				TW
+
+00-18-9E   (hex)		OMNIKEY GmbH.
+00189E     (base 16)		OMNIKEY GmbH.
+				Ferihumerstrasse 13
+				Linz  Upperaustria  4040
+				AT
+
+00-18-A9   (hex)		Ethernet Direct Corporation
+0018A9     (base 16)		Ethernet Direct Corporation
+				19F,No.345 Chung Ho Road, Yung Ho City
+				Taipei    234
+				TW
+
+00-18-A8   (hex)		AnNeal Technology Inc.
+0018A8     (base 16)		AnNeal Technology Inc.
+				Room 106, No. 47, Science Park Rd. II
+				Hsinchu    300
+				TW
+
+00-18-C2   (hex)		Firetide, Inc
+0018C2     (base 16)		Firetide, Inc
+				16795 Lark Av, Suite 200
+				Los Gatos  CA  95032
+				US
+
+00-18-3E   (hex)		Digilent, Inc
+00183E     (base 16)		Digilent, Inc
+				215 E. Main St.
+				Pullman  WA  99163
+				US
+
+00-18-42   (hex)		Nokia Danmark A/S
+001842     (base 16)		Nokia Danmark A/S
+				Frederikskaj
+				Copenhagen V    DK-1790
+				DK
+
+00-18-40   (hex)		3 Phoenix, Inc.
+001840     (base 16)		3 Phoenix, Inc.
+				14585 Avion Pkway
+				Chantilly  Virginia  20151
+				US
+
+00-18-44   (hex)		Heads Up Technologies, Inc.
+001844     (base 16)		Heads Up Technologies, Inc.
+				2033 Chennault Drive, Suite 100
+				Carrollton  Texas  75006-5119
+				US
+
+00-18-21   (hex)		SINDORICOH
+001821     (base 16)		SINDORICOH
+				277-22, 2ga, Sungsu-dong, Sungdong-gu,
+				Seoul    133-120
+				KR
+
+00-18-23   (hex)		Delta Electronics, Inc.
+001823     (base 16)		Delta Electronics, Inc.
+				186 Ruey Kuang Road, Neihu,
+				Taipei    114
+				TW
+
+00-18-15   (hex)		GZ Technologies, Inc.
+001815     (base 16)		GZ Technologies, Inc.
+				Room 1, 5F., No.94, Baojhong Rd.
+				Taipei    231
+				TW
+
+00-18-57   (hex)		Unilever R&D
+001857     (base 16)		Unilever R&D
+				Bldg. 50
+				Bedford  Bedfordshire  MK44 1LQ
+				GB
+
+00-18-53   (hex)		Atera Networks LTD.
+001853     (base 16)		Atera Networks LTD.
+				31, Habarzel St.
+				Tel-Aviv    69710
+				IL
+
+00-18-59   (hex)		Strawberry Linux Co.,Ltd.
+001859     (base 16)		Strawberry Linux Co.,Ltd.
+				1-28-8-204 Higashiayase
+				Adachiku  Tokyo  120-0004
+				JP
+
+00-18-4F   (hex)		8 Ways Technology Corp.
+00184F     (base 16)		8 Ways Technology Corp.
+				2F-1, No. 216, Sec. 3, Roosevelt Rd.
+				  Taipei  231
+				TW
+
+00-18-06   (hex)		Hokkei Industries Co., Ltd.
+001806     (base 16)		Hokkei Industries Co., Ltd.
+				Imahira 432
+				Hakusan  Ishikawa  924-0827
+				JP
+
+00-18-18   (hex)		Cisco Systems, Inc
+001818     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-18-1A   (hex)		AVerMedia Information Inc.
+00181A     (base 16)		AVerMedia Information Inc.
+				5F., No. 135, Jian 1st Rd.,
+				  New Taipei City  235
+				TW
+
+00-18-16   (hex)		Ubixon Co., Ltd.
+001816     (base 16)		Ubixon Co., Ltd.
+				Cheongdong Building 2F
+				Seoul    137-070
+				KR
+
+00-18-2B   (hex)		Softier
+00182B     (base 16)		Softier
+				Tidhar 3
+				Ra'anana  none  43665
+				IL
+
+00-18-29   (hex)		Gatsometer
+001829     (base 16)		Gatsometer
+				Claes Tillyweg 2
+				Haarlem  Noord-Holland  2031 CW
+				NL
+
+00-18-38   (hex)		PanAccess Communications,Inc.
+001838     (base 16)		PanAccess Communications,Inc.
+				Floor 8,Tower B,Global Trade Center,36 Beisanhuandonglu,Dongcheng District
+				  Beijing  100013
+				CN
+
+00-17-F0   (hex)		SZCOM Broadband Network Technology Co.,Ltd
+0017F0     (base 16)		SZCOM Broadband Network Technology Co.,Ltd
+				Room 602 No.8 Building ,Shenzhen Software Park,
+				Shenzhen  Guangdong  518057
+				CN
+
+00-17-F1   (hex)		Renu Electronics Pvt Ltd
+0017F1     (base 16)		Renu Electronics Pvt Ltd
+				Sr No 2/6, Baner Road,
+				Pune  Maharashtra  411045
+				IN
+
+00-17-FF   (hex)		PLAYLINE Co.,Ltd.
+0017FF     (base 16)		PLAYLINE Co.,Ltd.
+				1-4-21 MOTOAKASAKA
+				TOKYO    107-0051
+				JP
+
+00-17-F6   (hex)		Pyramid Meriden Inc.
+0017F6     (base 16)		Pyramid Meriden Inc.
+				45 Gracey Ave.
+				Meriden  CT  06451
+				US
+
+00-17-C5   (hex)		SonicWALL
+0017C5     (base 16)		SonicWALL
+				1143 Borregas Ave
+				Sunnyvale  CA  95126
+				US
+
+00-17-BE   (hex)		Tratec Telecom B.V.
+0017BE     (base 16)		Tratec Telecom B.V.
+				De Smalle Zijde 12
+				Veenendaal    NL0-3903 LP
+				NL
+
+00-17-C0   (hex)		PureTech Systems, Inc.
+0017C0     (base 16)		PureTech Systems, Inc.
+				1950 W Rose Garden Lane
+				Phoenix  AZ  85027
+				US
+
+00-17-BA   (hex)		SEDO CO., LTD.
+0017BA     (base 16)		SEDO CO., LTD.
+				302, KT Bldg, 1ANNEX, 35-1
+				Seoul    150-038
+				KR
+
+00-17-D4   (hex)		Monsoon Multimedia, Inc
+0017D4     (base 16)		Monsoon Multimedia, Inc
+				1730 South Amphlett blvd. Suite 101
+				San Mateo  CA  94402
+				US
+
+00-17-80   (hex)		Applied Biosystems B.V.
+001780     (base 16)		Applied Biosystems B.V.
+				Blk 33, Marsiling Industrial Estate Road 3,
+				    739256
+				SG
+
+00-17-A5   (hex)		Ralink Technology Corp
+0017A5     (base 16)		Ralink Technology Corp
+				Suite 215, Bldg 53. 195-61 Sec.4, Chung Hsing Rd,
+				Chutung  Hsinchu  310
+				TW
+
+00-17-A8   (hex)		EDM Corporation
+0017A8     (base 16)		EDM Corporation
+				3-5-2 Itabashi
+				Itabashi-ku  Tokyo  173-0004
+				JP
+
+00-17-A9   (hex)		Sentivision
+0017A9     (base 16)		Sentivision
+				Marynarska 19a
+				Warsaw  Mazowieckie  02-674
+				PL
+
+00-17-AF   (hex)		Enermet
+0017AF     (base 16)		Enermet
+				Salvesenintie
+				Jyskä    FIN-40420
+				FI
+
+00-17-AA   (hex)		elab-experience inc.
+0017AA     (base 16)		elab-experience inc.
+				104 Anotsupia
+				Tsu-shi  mie prefecture  514-0131
+				JP
+
+00-17-AE   (hex)		GAI-Tronics
+0017AE     (base 16)		GAI-Tronics
+				Brunel Drive
+				Burton Upon Trent  Staffordshire  DE13 0BZ
+				GB
+
+00-17-B5   (hex)		Peerless Systems Corporation
+0017B5     (base 16)		Peerless Systems Corporation
+				2381 Rosecrans Avenue, Suite 400
+				El Segundo  CA  90245
+				US
+
+00-17-6C   (hex)		Pivot3, Inc.
+00176C     (base 16)		Pivot3, Inc.
+				6605 Cypresswood Drive, Ste 350
+				Spring  TX  77379-7741
+				US
+
+00-17-70   (hex)		Arti Industrial Electronics Ltd.
+001770     (base 16)		Arti Industrial Electronics Ltd.
+				Ger-San Sitesi, 657. Sokak
+				Ankara    06370
+				TR
+
+00-17-8B   (hex)		Teledyne Technologies Incorporated
+00178B     (base 16)		Teledyne Technologies Incorporated
+				12333 West Olympic Blvd
+				Los Angeles  CA  90064
+				US
+
+00-17-DF   (hex)		Cisco Systems, Inc
+0017DF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-17-46   (hex)		Freedom9 Inc.
+001746     (base 16)		Freedom9 Inc.
+				4140B SLADEVIEW CRE.,
+				MISSISSAUGA,  Ontario  L5L6A1
+				CA
+
+00-17-4D   (hex)		DYNAMIC NETWORK FACTORY, INC.
+00174D     (base 16)		DYNAMIC NETWORK FACTORY, INC.
+				26250 EDEN LANDING RD.
+				HAYWARD  CA  94545
+				US
+
+00-17-44   (hex)		Araneo Ltd.
+001744     (base 16)		Araneo Ltd.
+				103 Medinat Hayehudim
+				Herzliya    46733
+				IL
+
+00-17-49   (hex)		HYUNDAE YONG-O-SA CO.,LTD
+001749     (base 16)		HYUNDAE YONG-O-SA CO.,LTD
+				448-10, Hyuckjae B/D Seongnae, Kangdong-gu
+				Seoul    134-847
+				KR
+
+00-17-43   (hex)		Deck Srl
+001743     (base 16)		Deck Srl
+				Via Fabio Filzi 2
+				Milan    20124
+				IT
+
+00-17-28   (hex)		Selex Communications
+001728     (base 16)		Selex Communications
+				Via Pieragostini 80
+				Genova    16151
+				IT
+
+00-17-22   (hex)		Hanazeder Electronic GmbH
+001722     (base 16)		Hanazeder Electronic GmbH
+				J.M. Dimmelstr 10
+				Ried i. I.  Oberösterreich  4910
+				AT
+
+00-17-3D   (hex)		Neology
+00173D     (base 16)		Neology
+				13000 Gregg Street Suite A
+				Poway  CA  92064
+				US
+
+00-17-40   (hex)		Bluberi Gaming Technologies Inc
+001740     (base 16)		Bluberi Gaming Technologies Inc
+				2125, rue Letendre Suite 420
+				Drummondville  Quebec  J2C 7G1
+				CA
+
+00-17-32   (hex)		Science-Technical Center RISSA
+001732     (base 16)		Science-Technical Center RISSA
+				st. Abramtsevskaja, h.9
+				Moscow    128572
+				RU
+
+00-17-6D   (hex)		CORE CORPORATION
+00176D     (base 16)		CORE CORPORATION
+				1-22-3, Sangenjaya,
+				Setagaya-ku  Tokyo-to  154-8552
+				JP
+
+00-17-73   (hex)		Laketune Technologies Co. Ltd
+001773     (base 16)		Laketune Technologies Co. Ltd
+				No. 38 Zijinghua Rd. Westlake District
+				Hangzhou  Zhejiang  310013
+				CN
+
+00-17-3A   (hex)		Cloudastructure Inc
+00173A     (base 16)		Cloudastructure Inc
+				585 Broadway
+				Redwood City  CA  94063
+				US
+
+00-17-2F   (hex)		NeuLion Incorporated
+00172F     (base 16)		NeuLion Incorporated
+				1600 Old Country Road
+				Plainview  NY  11803
+				US
+
+00-17-23   (hex)		Summit Data Communications
+001723     (base 16)		Summit Data Communications
+				526 South Main Street
+				Akron  Ohio  44311
+				US
+
+00-17-1F   (hex)		IMV Corporation
+00171F     (base 16)		IMV Corporation
+				2-6-10 Takejima
+				Osaka    555-0011
+				JP
+
+00-17-53   (hex)		nFore Technology Inc.
+001753     (base 16)		nFore Technology Inc.
+				5F, NO 31, Ln 258, Rulguang Rd
+				Taipei  Neihu District  11491
+				TW
+
+00-17-57   (hex)		RIX TECHNOLOGY LIMITED
+001757     (base 16)		RIX TECHNOLOGY LIMITED
+				17 DAI WANG STREET
+				TAI PO  NEW TERRITORIES  
+				HK
+
+00-16-BB   (hex)		Law-Chain Computer Technology Co Ltd
+0016BB     (base 16)		Law-Chain Computer Technology Co Ltd
+				7F-2, 286-4, hsin ya road, chien chen district
+				Kaohsiung    80673
+				TW
+
+00-16-B4   (hex)		Private
+0016B4     (base 16)		Private
+
+00-16-A7   (hex)		AWETA G&P
+0016A7     (base 16)		AWETA G&P
+				Burg. Winkellaan 3
+				Nootdorp    2631 HG
+				NL
+
+00-17-10   (hex)		Casa Systems Inc.
+001710     (base 16)		Casa Systems Inc.
+				10, New England Business Center Dr.
+				Andover  MA  01810
+				US
+
+00-16-BF   (hex)		PaloDEx Group Oy
+0016BF     (base 16)		PaloDEx Group Oy
+				P.O. Box 64
+				Tuusula    04301
+				FI
+
+00-16-B7   (hex)		Seoul Commtech
+0016B7     (base 16)		Seoul Commtech
+				448-11, Seongnae 3dong. Gangdong gu,
+				Seoul    134033
+				KR
+
+00-16-E1   (hex)		SiliconStor, Inc.
+0016E1     (base 16)		SiliconStor, Inc.
+				48430 Lakeview Blvd.
+				Fremont  CA  94538
+				US
+
+00-16-E2   (hex)		American Fibertek, Inc.
+0016E2     (base 16)		American Fibertek, Inc.
+				120 Belmont Drive
+				Somerset  New Jersey  08873-1204
+				US
+
+00-17-13   (hex)		Tiger NetCom
+001713     (base 16)		Tiger NetCom
+				J-15 Mudan Cun, Yijing Huayuan,
+				Shenzhen  Guangdong  518003
+				CN
+
+00-16-CD   (hex)		HIJI HIGH-TECH CO., LTD.
+0016CD     (base 16)		HIJI HIGH-TECH CO., LTD.
+				Ohga 8133
+				Hayami  Oita  879-1504
+				JP
+
+00-16-EF   (hex)		Koko Fitness, Inc.
+0016EF     (base 16)		Koko Fitness, Inc.
+				136 Longwater Drive
+				Norwell  MA  02061
+				US
+
+00-16-FD   (hex)		Jaty Electronics
+0016FD     (base 16)		Jaty Electronics
+				Jaty Bldg 10F, 1659-5 Bongchun11-Dong
+				Seoul    151-832
+				KR
+
+00-16-78   (hex)		SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD
+001678     (base 16)		SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD
+				GAOKE INDUSTRIAL PARK, NO.8 TANGKENG ROAD, SHIYAN TOWN
+				SHENZHEN  GUANGDONG  518108
+				CN
+
+00-16-74   (hex)		EuroCB (Phils.), Inc.
+001674     (base 16)		EuroCB (Phils.), Inc.
+				SFB No.2
+				Lapulapu City  Cebu  6015
+				PH
+
+00-16-70   (hex)		SKNET Corporation
+001670     (base 16)		SKNET Corporation
+				Fontana Shinyokohama
+				Yokohama  Kanagawa  222-0033
+				JP
+
+00-16-89   (hex)		Pilkor Electronics Co., Ltd
+001689     (base 16)		Pilkor Electronics Co., Ltd
+				381,Wonchun-Dong,Yeoungtong-Gu
+				Suwon  Kyung Ki-Do  442-380
+				KR
+
+00-16-8A   (hex)		id-Confirm Inc
+00168A     (base 16)		id-Confirm Inc
+				1800 Boulder St
+				Denver  CO  80211
+				US
+
+00-16-86   (hex)		Karl Storz Imaging
+001686     (base 16)		Karl Storz Imaging
+				175 Cremona Dr.
+				Goleta  CA  93117
+				US
+
+00-16-8D   (hex)		KORWIN CO., Ltd.
+00168D     (base 16)		KORWIN CO., Ltd.
+				3rd Floor, Hana Bldg, 123-7 Nonhyun-dong
+				Seoul    135-010
+				KR
+
+00-16-8E   (hex)		Vimicro corporation
+00168E     (base 16)		Vimicro corporation
+				15/F,Shining Tower,No.35,xueyuan
+				Beijing    100083
+				CN
+
+00-16-4F   (hex)		World Ethnic Broadcastin Inc.
+00164F     (base 16)		World Ethnic Broadcastin Inc.
+				50 California Street, Suite 1500
+				San Francisco  California  94111
+				US
+
+00-16-7E   (hex)		DIBOSS.CO.,LTD
+00167E     (base 16)		DIBOSS.CO.,LTD
+				126-1, Gongdan-dong
+				Gumi  Gyeongbuk  730-902
+				KR
+
+00-16-7B   (hex)		Haver&Boecker
+00167B     (base 16)		Haver&Boecker
+				Carl-Haver-Platz 3
+				Oelde  NRW  59302
+				DE
+
+00-16-79   (hex)		eOn Communications
+001679     (base 16)		eOn Communications
+				4105 Royal Drive, Suite 100
+				Kennesaw  Georgia  30144
+				US
+
+00-16-A0   (hex)		Auto-Maskin
+0016A0     (base 16)		Auto-Maskin
+				Sophie Radichs Vei 7
+				LILLESTROM  Akershus  2003
+				NO
+
+00-16-5D   (hex)		AirDefense, Inc.
+00165D     (base 16)		AirDefense, Inc.
+				4800 North Point Pkwy
+				Alpharetta  GA  30022
+				US
+
+00-16-5B   (hex)		Grip Audio
+00165B     (base 16)		Grip Audio
+				6345 W. Louise Drive
+				Glendale  Arizona  85310-4243
+				US
+
+00-16-67   (hex)		A-TEC Subsystem INC.
+001667     (base 16)		A-TEC Subsystem INC.
+				4F, No. 86, Chung-Hsing Road, Shijr City,
+				    221
+				TW
+
+00-16-4A   (hex)		Vibration Technology Limited
+00164A     (base 16)		Vibration Technology Limited
+				Vibtech House, Central Boulevard
+				Larbert  Scotland  FK5 4RU
+				GB
+
+00-16-45   (hex)		Power Distribution, Inc.
+001645     (base 16)		Power Distribution, Inc.
+				4200 Oakleys Ct.
+				Richmond  VA  23223
+				US
+
+00-16-3F   (hex)		CReTE SYSTEMS Inc.
+00163F     (base 16)		CReTE SYSTEMS Inc.
+				7F,No.250,Sec.3,Pei Shen Rd.,Shen Keng Hsiang
+				Taipei County    22204
+				TW
+
+00-16-3D   (hex)		Tsinghua Tongfang Legend Silicon Tech. Co., Ltd.
+00163D     (base 16)		Tsinghua Tongfang Legend Silicon Tech. Co., Ltd.
+				26F TSINGHUA TONGFANG HI-TECH PLAZA
+				BEIJING    100083
+				CN
+
+00-16-2D   (hex)		STNet Co., Ltd.
+00162D     (base 16)		STNet Co., Ltd.
+				Shin-wha Building 4F, 954-25
+				Anyang-si  Kyungki-do   431-060
+				KR
+
+00-16-27   (hex)		embedded-logic DESIGN AND MORE GmbH
+001627     (base 16)		embedded-logic DESIGN AND MORE GmbH
+				Hansestrasse 24
+				Muenster  NRW  48153
+				DE
+
+00-16-3A   (hex)		YVES TECHNOLOGY CO., LTD.
+00163A     (base 16)		YVES TECHNOLOGY CO., LTD.
+				No.74, Fusing 2nd Rd.
+				Gueishan  Taoyuan  33377
+				TW
+
+00-16-38   (hex)		TECOM Co., Ltd.
+001638     (base 16)		TECOM Co., Ltd.
+				23 R&D Road 2 Science Based Industrial Park
+				Hsin-Chu    300
+				TW
+
+00-16-33   (hex)		Oxford Diagnostics Ltd.
+001633     (base 16)		Oxford Diagnostics Ltd.
+				Sandybrae
+				Oxford  Oxon.  OX1 5HJ
+				GB
+
+00-15-EC   (hex)		Boca Devices LLC
+0015EC     (base 16)		Boca Devices LLC
+				7647 Sierra Ter
+				Boca Raton  Florida  33433
+				US
+
+00-15-EF   (hex)		NEC TOKIN Corporation
+0015EF     (base 16)		NEC TOKIN Corporation
+				 1-1,Asahi-Cho 7-chome,Shiroishi,
+				Miyagi    989-0223
+				JP
+
+00-15-E4   (hex)		Zimmer Elektromedizin
+0015E4     (base 16)		Zimmer Elektromedizin
+				Junkersstrasse 9
+				Neu-Ulm  Bayern  89231
+				DE
+
+00-16-22   (hex)		BBH SYSTEMS GMBH
+001622     (base 16)		BBH SYSTEMS GMBH
+				Böttgerstraße 40
+				Weiden i.d.OPf.  Bayern  92637
+				DE
+
+00-16-13   (hex)		LibreStream Technologies Inc.
+001613     (base 16)		LibreStream Technologies Inc.
+				895 Waverley Street
+				Winnipeg  Manitoba  R3T 5P4
+				CA
+
+00-16-0F   (hex)		BADGER METER INC
+00160F     (base 16)		BADGER METER INC
+				4545 W BROWN DEER RD
+				MILWAUKEE  WI  53223
+				US
+
+00-16-04   (hex)		Sigpro
+001604     (base 16)		Sigpro
+				655 W Evelyn ST
+				Mountain View  CA  94041
+				US
+
+00-15-FB   (hex)		setex schermuly textile computer gmbh
+0015FB     (base 16)		setex schermuly textile computer gmbh
+				Hauptstraße 25
+				Mengerskirchen  Hessen  35794
+				DE
+
+00-15-FE   (hex)		SCHILLING ROBOTICS LLC
+0015FE     (base 16)		SCHILLING ROBOTICS LLC
+				260 COUSTEAU PL
+				DAVIS  CA  95618
+				US
+
+00-16-0D   (hex)		Be Here Corporation
+00160D     (base 16)		Be Here Corporation
+				39300 Civic Center Dr., Suite 180
+				Fremont  CA  94538
+				US
+
+00-15-C9   (hex)		Gumstix, Inc
+0015C9     (base 16)		Gumstix, Inc
+				3130 Alpine Road
+				Portola Valley  CA  94028
+				US
+
+00-15-BA   (hex)		iba AG
+0015BA     (base 16)		iba AG
+				Koenigswarterstrasse 44
+				Fuerth  Bavaria  90762
+				DE
+
+00-15-BB   (hex)		SMA Solar Technology AG
+0015BB     (base 16)		SMA Solar Technology AG
+				Sonnenallee 1
+				Niestetal  Hessen  34266
+				DE
+
+00-15-BF   (hex)		technicob
+0015BF     (base 16)		technicob
+				4 Rue Camille Saint-Saens
+				LANESTER  Morbihan  56602
+				US
+
+00-15-82   (hex)		Pulse Eight Limited
+001582     (base 16)		Pulse Eight Limited
+				13 The Metro Centre
+				Peterbourugh  PE2 7UH  
+				GB
+
+00-15-7B   (hex)		Leuze electronic GmbH + Co. KG
+00157B     (base 16)		Leuze electronic GmbH + Co. KG
+				In der Braike 1
+				Owen  Baden-Württemberg  73277
+				DE
+
+00-15-78   (hex)		Audio / Video Innovations
+001578     (base 16)		Audio / Video Innovations
+				A3-3375 North Service Road
+				Burlington  ON  L7N 3G2
+				CA
+
+00-15-AE   (hex)		kyung il
+0015AE     (base 16)		kyung il
+				woar rong-myn yougate-ri 101-2
+				paju-city  gyeong gi  413-813
+				KR
+
+00-15-BC   (hex)		Develco
+0015BC     (base 16)		Develco
+				Olof Palmes Allé 40
+				Aarhus N    8200
+				DK
+
+00-15-BD   (hex)		Group 4 Technology Ltd
+0015BD     (base 16)		Group 4 Technology Ltd
+				Challenge House
+				Tewkesbury  Gloucestershire  GL20 8UQ
+				GB
+
+00-15-B5   (hex)		CI Network Corp.
+0015B5     (base 16)		CI Network Corp.
+				2F Daini Inoue Bldg
+				Tokyo    107-0052
+				JP
+
+00-15-CD   (hex)		Exartech International Corp.
+0015CD     (base 16)		Exartech International Corp.
+				3/F, No.62, Lane 188, Ruei Guang Rd., Neihu
+				Taipei    114
+				TW
+
+00-15-D9   (hex)		PKC Electronics Oy
+0015D9     (base 16)		PKC Electronics Oy
+				Pajuniityntie 43
+				RAAHE    92120
+				FI
+
+00-15-DD   (hex)		IP Control Systems Ltd.
+0015DD     (base 16)		IP Control Systems Ltd.
+				Unit 15, Hi-Tech Village,
+				Boldon  Tyne & Wear  NE35 9PE
+				GB
+
+00-15-9C   (hex)		B-KYUNG SYSTEM Co.,Ltd.
+00159C     (base 16)		B-KYUNG SYSTEM Co.,Ltd.
+				#812,WOOLIM E-BIZ CENTER,170-5
+				GURO-DONG  GURO-GU  152-847
+				KR
+
+00-15-95   (hex)		Quester Tangent Corporation
+001595     (base 16)		Quester Tangent Corporation
+				201 - 9865 West Saanich Road
+				Sidney  BC  V8L 5Y8
+				CA
+
+00-15-87   (hex)		Takenaka Seisakusho Co.,Ltd
+001587     (base 16)		Takenaka Seisakusho Co.,Ltd
+				178 HISHIE
+				HIGASHI-OSAKA CITY  OSAKA  578-0984
+				JP
+
+00-15-1A   (hex)		Hunter Engineering Company
+00151A     (base 16)		Hunter Engineering Company
+				11250 Hunter Drive
+				Bridgeton  Missouri  63044
+				US
+
+00-15-14   (hex)		Hu Zhou NAVA Networks&Electronics Ltd.
+001514     (base 16)		Hu Zhou NAVA Networks&Electronics Ltd.
+				3/F,No.328-4,Guang Yuan Rd.
+				Hu Zhou  Zhe Jiang  313000
+				CN
+
+00-15-16   (hex)		URIEL SYSTEMS INC.
+001516     (base 16)		URIEL SYSTEMS INC.
+				#204 Byucksan Digitalvalley 1st, 212-16, Guro-dong, Guro-gu
+				Seoul    152-050
+				KR
+
+00-15-45   (hex)		SEECODE Co., Ltd.
+001545     (base 16)		SEECODE Co., Ltd.
+				4th Floor, Amin Bldg., 110-1, Yangjaedong, Seochogu
+				Seoul    137-891
+				KR
+
+00-15-43   (hex)		Aberdeen Test Center
+001543     (base 16)		Aberdeen Test Center
+				400 Colleran Road
+				Aberdeen Proving Grounds  MD  21005-5059
+				US
+
+00-15-41   (hex)		StrataLight Communications, Inc.
+001541     (base 16)		StrataLight Communications, Inc.
+				2105 S. Bascom Avenue
+				Campbell  CA  95008
+				US
+
+00-15-69   (hex)		PECO II, Inc.
+001569     (base 16)		PECO II, Inc.
+				7060 Huntley Road
+				Columbus  OH  43229
+				US
+
+00-15-64   (hex)		BEHRINGER Spezielle Studiotechnik GmbH
+001564     (base 16)		BEHRINGER Spezielle Studiotechnik GmbH
+				Hanns-Martin-Schleyer-Str. 36-38
+				Willich    
+				DE
+
+00-15-63   (hex)		Cisco Systems, Inc
+001563     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-15-61   (hex)		JJPlus Corporation
+001561     (base 16)		JJPlus Corporation
+				678 Massachusetts Ave
+				Cambridge  MA  02139
+				US
+
+00-15-71   (hex)		Nolan Systems
+001571     (base 16)		Nolan Systems
+				1595 Cleo Springs Dr.
+				San Jose  Ca.  95131
+				US
+
+00-15-65   (hex)		XIAMEN YEALINK NETWORK TECHNOLOGY CO.,LTD
+001565     (base 16)		XIAMEN YEALINK NETWORK TECHNOLOGY CO.,LTD
+				7F Hualian Electronic BLDG.580 Jiahe Road,Xiamen China
+				Xiamen  Fujian  361006
+				CN
+
+00-15-38   (hex)		RFID, Inc.
+001538     (base 16)		RFID, Inc.
+				14100 East Jewell Ave.
+				Aurora  CO  80012
+				US
+
+00-15-2E   (hex)		PacketHop, Inc.
+00152E     (base 16)		PacketHop, Inc.
+				1301 Shoreway Road
+				Belmont  California  94002
+				US
+
+00-15-58   (hex)		FOXCONN
+001558     (base 16)		FOXCONN
+				No.2,2nd DongHuan Road,10th YouSong
+				ShenZhen  GuangDong  518109
+				US
+
+00-15-1F   (hex)		Multivision Intelligent Surveillance (Hong Kong) Ltd
+00151F     (base 16)		Multivision Intelligent Surveillance (Hong Kong) Ltd
+				26/F, Aitken Vanson Centre,
+				    
+				HK
+
+00-15-22   (hex)		Dea Security
+001522     (base 16)		Dea Security
+				Via Togliatti
+				Santo Stefano Magra  SP  19037
+				IT
+
+00-15-4F   (hex)		one RF Technology
+00154F     (base 16)		one RF Technology
+				1360 Route des Dolines
+				Valbonne Sophia-Antipolis  PACA  06560
+				FR
+
+00-15-01   (hex)		LexBox
+001501     (base 16)		LexBox
+				3, avenue Didier Daurat
+				TOULOUSE    31400
+				FR
+
+00-14-A3   (hex)		Vitelec BV
+0014A3     (base 16)		Vitelec BV
+				kapittelweg 18
+				Breda  NB  NL 4827 HG
+				NL
+
+00-14-97   (hex)		ZHIYUAN Eletronics co.,ltd.
+001497     (base 16)		ZHIYUAN Eletronics co.,ltd.
+				2 Floor, NO.3 Building, Huangzhou Industrial Estate, Chebei Road,
+				Guangzhou  Guangdong  510660
+				CN
+
+00-14-99   (hex)		Helicomm Inc
+001499     (base 16)		Helicomm Inc
+				1947 Camino Vida Roble
+				Carlsbad  CA  92008
+				US
+
+00-14-92   (hex)		Liteon, Mobile Media Solution SBU
+001492     (base 16)		Liteon, Mobile Media Solution SBU
+				4F, 3, Lane 768, Sec. 4,
+				Taipei    115
+				TW
+
+00-14-94   (hex)		ESU AG
+001494     (base 16)		ESU AG
+				Lukasstrasse 29
+				St. Gallen    9008
+				CH
+
+00-14-EF   (hex)		TZero Technologies, Inc.
+0014EF     (base 16)		TZero Technologies, Inc.
+				455 W. Maude Avenue
+				Sunnyvale  CA  94085
+				US
+
+00-14-BC   (hex)		SYNECTIC TELECOM EXPORTS PVT. LTD.
+0014BC     (base 16)		SYNECTIC TELECOM EXPORTS PVT. LTD.
+				196, 1st Main, 3rd Stage, 4th Block
+				BANGALORE    560079
+				IN
+
+00-14-B9   (hex)		MSTAR SEMICONDUCTOR
+0014B9     (base 16)		MSTAR SEMICONDUCTOR
+				11-13 rue René Jacques
+				Issy les Moulineaux    92130
+				FR
+
+00-14-BD   (hex)		incNETWORKS, Inc
+0014BD     (base 16)		incNETWORKS, Inc
+				198 Brighton Ave
+				Long Branch  NJ  07740
+				US
+
+00-14-B7   (hex)		AR Infotek Inc.
+0014B7     (base 16)		AR Infotek Inc.
+				9F, No.185, GangQian Road
+				Taipei    11494
+				TW
+
+00-14-CA   (hex)		Key Radio Systems Limited
+0014CA     (base 16)		Key Radio Systems Limited
+				Venus House
+				Aldermaston  Berkshire  RG7 8DA
+				GB
+
+00-14-C8   (hex)		Contemporary Research Corp
+0014C8     (base 16)		Contemporary Research Corp
+				4355 Excel Pkwy
+				Addison  TX  75001
+				US
+
+00-14-C5   (hex)		Alive Technologies Pty Ltd
+0014C5     (base 16)		Alive Technologies Pty Ltd
+				11 Technology Drive
+				Arundel  Queensland  4214
+				AU
+
+00-14-DA   (hex)		Huntleigh Healthcare
+0014DA     (base 16)		Huntleigh Healthcare
+				Huntleigh Healthcare - Diagnostic Products Division
+				Cardiff    CF24 5HN
+				GB
+
+00-14-D5   (hex)		Datang Telecom Technology CO. , LCD,Optical Communication Br
+0014D5     (base 16)		Datang Telecom Technology CO. , LCD,Optical Communication Br
+				3rd Floor,Building 8,Hi-Tech Incubation Park,
+				ChengDu  SiChuan  610041
+				CN
+
+00-14-D3   (hex)		SEPSA
+0014D3     (base 16)		SEPSA
+				calle Albatros, 7 y 9
+				PINTO  Madrid  28320
+				ES
+
+00-14-D8   (hex)		bio-logic SA
+0014D8     (base 16)		bio-logic SA
+				1, rue de l'Europe
+				CLAIX    38640
+				FR
+
+00-14-EE   (hex)		Western Digital Technologies, Inc.
+0014EE     (base 16)		Western Digital Technologies, Inc.
+				20511 Lake Forest Dr.
+				Lake Forest  Ca  92630
+				US
+
+00-14-B5   (hex)		PHYSIOMETRIX,INC
+0014B5     (base 16)		PHYSIOMETRIX,INC
+				101 BILLERICA AVE #5
+				N. BILLERICA  MA  01862
+				US
+
+00-14-9C   (hex)		HF Company
+00149C     (base 16)		HF Company
+				Node Park Touraine
+				BP1 Tauxigny    37310
+				FR
+
+00-14-5C   (hex)		Intronics B.V.
+00145C     (base 16)		Intronics B.V.
+				Koolhovenstraat 1E
+				Barneveld  Gelderland  3772 MT
+				NL
+
+00-14-5B   (hex)		SeekerNet Inc.
+00145B     (base 16)		SeekerNet Inc.
+				300 Satellite Blvd.
+				Suwanee  Georgia  30024
+				US
+
+00-14-49   (hex)		Sichuan Changhong Electric Ltd.
+001449     (base 16)		Sichuan Changhong Electric Ltd.
+				No.35,East MianXin Road,MianYang,Sichaun,China.
+				MianYang  SiChuan  PRC 621000
+				CN
+
+00-14-46   (hex)		SuperVision Solutions LLC
+001446     (base 16)		SuperVision Solutions LLC
+				762 Industrial Dr.
+				Elmhurst  IL  60126
+				US
+
+00-14-40   (hex)		ATOMIC Corporation
+001440     (base 16)		ATOMIC Corporation
+				MAMPO BLDG
+				TAITO-KU  TOKYO  111-0053
+				JP
+
+00-14-2E   (hex)		77 Elektronika Kft.
+00142E     (base 16)		77 Elektronika Kft.
+				Fehervari ut 98.
+				  Budapest  H-1163
+				HU
+
+00-14-30   (hex)		ViPowER, Inc
+001430     (base 16)		ViPowER, Inc
+				9F., No.205-3, Sec. 3, Beisin Rd
+				Sindian  Taipei County  231
+				TW
+
+00-14-32   (hex)		Tarallax Wireless, Inc.
+001432     (base 16)		Tarallax Wireless, Inc.
+				10 West 100 South,
+				Salt Lake City  UT  84101
+				US
+
+00-14-85   (hex)		Giga-Byte
+001485     (base 16)		Giga-Byte
+				No.215,Nan-Ping Road,
+				Pin-Jen  Taoyuan  326
+				TW
+
+00-14-83   (hex)		eXS Inc.
+001483     (base 16)		eXS Inc.
+				1900 Alameda de las Pulgas
+				San Mateo  CA  94403
+				US
+
+00-14-71   (hex)		Eastern Asia Technology Limited
+001471     (base 16)		Eastern Asia Technology Limited
+				8F-1, No. 188, Baoqiao Rd., Xindian Dist.
+				New Taipei City    23145
+				TW
+
+00-14-6A   (hex)		Cisco Systems, Inc
+00146A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-14-4C   (hex)		General Meters Corp.
+00144C     (base 16)		General Meters Corp.
+				1935 Dominion Way
+				Colorado Springs  Colorado  80918
+				US
+
+00-14-43   (hex)		Consultronics Europe Ltd
+001443     (base 16)		Consultronics Europe Ltd
+				Electron Way
+				Chandlers Ford  Hants  SO53 4SE
+				GB
+
+00-14-60   (hex)		Kyocera Wireless Corp.
+001460     (base 16)		Kyocera Wireless Corp.
+				10300 Campus Point Drive
+				San Diego  CA  92121
+				US
+
+00-13-F5   (hex)		Akimbi Systems
+0013F5     (base 16)		Akimbi Systems
+				1400 Fashion Island Blvd
+				San Mateo  CA  94404
+				US
+
+00-13-F1   (hex)		AMOD Technology Co., Ltd.
+0013F1     (base 16)		AMOD Technology Co., Ltd.
+				2F., No. 16, Prosperity Road II
+				Hsinchu,    30078
+				TW
+
+00-13-E7   (hex)		Halcro
+0013E7     (base 16)		Halcro
+				Suite 1, Level 1
+				Wayville  South Australia  5034
+				AU
+
+00-13-EA   (hex)		Kamstrup A/S
+0013EA     (base 16)		Kamstrup A/S
+				Industrivej 28
+				Stilling    8660
+				DK
+
+00-13-E1   (hex)		Iprobe AB
+0013E1     (base 16)		Iprobe AB
+				Finlandsgatan 12
+				  Kista  SE-16474
+				SE
+
+00-13-E3   (hex)		CoVi Technologies, Inc.
+0013E3     (base 16)		CoVi Technologies, Inc.
+				6300 Bridgepoint Parkway
+				Austin  Texas  78730
+				US
+
+00-13-E4   (hex)		YANGJAE SYSTEMS CORP.
+0013E4     (base 16)		YANGJAE SYSTEMS CORP.
+				1202. HANSHIN IT TOWER Guro-3Dong,
+				  Seoul  152-848
+				KR
+
+00-13-C1   (hex)		Asoka USA Corporation
+0013C1     (base 16)		Asoka USA Corporation
+				558 Pilgrim Drive
+				Foster City  CA  94404
+				US
+
+00-13-C0   (hex)		Trix Tecnologia Ltda.
+0013C0     (base 16)		Trix Tecnologia Ltda.
+				Rua da Paz, 1957 - Chácara Santo Antônio
+				São Paulo    04713-002
+				BR
+
+00-14-1F   (hex)		SunKwang Electronics Co., Ltd
+00141F     (base 16)		SunKwang Electronics Co., Ltd
+				#365(Techno-park, 301 dong, 901 ho,) Samjung-dong, Ohjung-ku,
+				Bucheon-shi  Kyunggi-do  421-809
+				KR
+
+00-14-12   (hex)		S-TEC electronics AG
+001412     (base 16)		S-TEC electronics AG
+				Industriestrasse 49
+				  Zug  6300
+				CH
+
+00-14-11   (hex)		Deutschmann Automation GmbH & Co. KG
+001411     (base 16)		Deutschmann Automation GmbH & Co. KG
+				Carl-Zeiss-Str. 8
+				Bad Camberg    D - 65520
+				DE
+
+00-14-05   (hex)		OpenIB, Inc.
+001405     (base 16)		OpenIB, Inc.
+				OpenFabrics, Inc., c/o QLogic Corporation
+				Mountain View  CA  94043-4655
+				US
+
+00-45-01   (hex)		Midmark RTLS
+004501     (base 16)		Midmark RTLS
+				2600 Miller Creek Road
+				Traverse City  MI  49684
+				US
+
+00-14-03   (hex)		Renasis, LLC
+001403     (base 16)		Renasis, LLC
+				1530 N. State St.
+				Lehi  UT  84043
+				US
+
+00-14-01   (hex)		Rivertree Networks Corp.
+001401     (base 16)		Rivertree Networks Corp.
+				R#304, K-Center, 1591-9
+				Anyang-si  Kyunggi-do  431-815
+				KR
+
+00-13-D9   (hex)		Matrix Product Development, Inc.
+0013D9     (base 16)		Matrix Product Development, Inc.
+				13 North Bird Street
+				Sun Prairie  WI  53590
+				US
+
+00-13-CC   (hex)		Tall Maple Systems
+0013CC     (base 16)		Tall Maple Systems
+				85 Saratoga Ave Suite 139
+				Santa Clara  CA  95051
+				US
+
+00-13-94   (hex)		Infohand Co.,Ltd
+001394     (base 16)		Infohand Co.,Ltd
+				Kranz-Techno #1207, 5442-1, Sangdaewon-dong, Jungwon-gu
+				Seongnam-si  Gyeonggi-do  462-819
+				KR
+
+00-13-89   (hex)		Redes de Telefonía Móvil S.A.
+001389     (base 16)		Redes de Telefonía Móvil S.A.
+				C/Puerto de la Morcuera 14 B4
+				Leganés  Madrid  28918
+				ES
+
+00-13-8C   (hex)		Kumyoung.Co.Ltd
+00138C     (base 16)		Kumyoung.Co.Ltd
+				Seoul KY building, 40-17 Hangang Ro, 3Ga, Youngsan-Gu
+				Seoul    140-880
+				KR
+
+00-13-A1   (hex)		Crow Electronic Engeneering
+0013A1     (base 16)		Crow Electronic Engeneering
+				12 Kinneret st.
+				Airport City    
+				IL
+
+00-13-9C   (hex)		Exavera Technologies, Inc.
+00139C     (base 16)		Exavera Technologies, Inc.
+				195 New Hampshire Avenue
+				Portsmouth  NH  03801
+				US
+
+00-13-55   (hex)		TOMEN Cyber-business Solutions, Inc.
+001355     (base 16)		TOMEN Cyber-business Solutions, Inc.
+				2-11-19 Kohnan
+				TOKYO    108-0075
+				JP
+
+00-13-57   (hex)		Soyal Technology Co., Ltd.
+001357     (base 16)		Soyal Technology Co., Ltd.
+				10F, No. 27, Lane 169, Kangning St., Shijr City,
+				Taipei    221
+				TW
+
+00-13-60   (hex)		Cisco Systems, Inc
+001360     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-13-8E   (hex)		FOAB Elektronik AB
+00138E     (base 16)		FOAB Elektronik AB
+				Sankt Jorgens Vag 8
+				Gothenburg    422 49
+				SE
+
+00-13-76   (hex)		Tabor Electronics Ltd.
+001376     (base 16)		Tabor Electronics Ltd.
+				9 Hatatsia St.
+				Tel Hanan    20302
+				IL
+
+00-13-5D   (hex)		NTTPC Communications, Inc.
+00135D     (base 16)		NTTPC Communications, Inc.
+				3-25 Kanda Jinbo-cho
+				Chiyoda-ku  Tokyo  101-0051
+				JP
+
+00-13-52   (hex)		Naztec, Inc.
+001352     (base 16)		Naztec, Inc.
+				820 Park Two Dr.
+				Sugar Land  TX  77478
+				US
+
+00-13-6C   (hex)		TomTom
+00136C     (base 16)		TomTom
+				Oosterdoksstraat 114
+				1011 DK  Amsterdam  
+				NL
+
+00-13-64   (hex)		Paradigm Technology Inc..
+001364     (base 16)		Paradigm Technology Inc..
+				3F, No. 285, Sec.2, Ti-Ding Blvd Nei-Hu,
+				Taipei    114
+				TW
+
+00-13-6B   (hex)		E-TEC
+00136B     (base 16)		E-TEC
+				2-17-14-503 Hakataekimae
+				Fukuoka  Fukuokaken  812-0011
+				JP
+
+00-13-80   (hex)		Cisco Systems, Inc
+001380     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-13-85   (hex)		Add-On Technology Co., LTD.
+001385     (base 16)		Add-On Technology Co., LTD.
+				1F, No.11, Lane 206, Da-An Road Sec. 1,
+				Taipei    106
+				TW
+
+00-13-B3   (hex)		Ecom Communications Technology Co., Ltd.
+0013B3     (base 16)		Ecom Communications Technology Co., Ltd.
+				Floor 7, Machinery Industry Building, No.22,
+				Beijing    
+				CN
+
+00-13-B7   (hex)		Scantech ID
+0013B7     (base 16)		Scantech ID
+				Vanadiumweg 22
+				Amersfoort  Utrecht  3812 PZ
+				NL
+
+00-13-08   (hex)		Nuvera Fuel Cells
+001308     (base 16)		Nuvera Fuel Cells
+				129 Concord Road, #1
+				Billerica  MA  01821
+				US
+
+00-13-07   (hex)		Paravirtual Corporation
+001307     (base 16)		Paravirtual Corporation
+				2953 Bunker Hill Lane
+				Santa Clara  CA  95054
+				US
+
+00-12-FC   (hex)		PLANET System Co.,LTD
+0012FC     (base 16)		PLANET System Co.,LTD
+				4th Floor, Daehan B/D, 873-29,
+				Seoul    137-064
+				KR
+
+00-12-FE   (hex)		Lenovo Mobile Communication Technology Ltd.
+0012FE     (base 16)		Lenovo Mobile Communication Technology Ltd.
+				Xiamen Overseas Chinese Electronic Science Park,Huoju High Technology Development Zone
+				XIA MEN  FU JIAN  361009
+				CN
+
+00-12-EC   (hex)		Movacolor b.v.
+0012EC     (base 16)		Movacolor b.v.
+				Koperslagersstraat 31
+				Sneek  Friesland  8601 WL
+				NL
+
+00-12-EB   (hex)		PDH Solutions, LLC
+0012EB     (base 16)		PDH Solutions, LLC
+				34154 Bennett Rd
+				Warren  OR  97053
+				US
+
+00-13-43   (hex)		Matsushita Electronic Components (Europe) GmbH
+001343     (base 16)		Matsushita Electronic Components (Europe) GmbH
+				Zeppelinstraße 19
+				Lueneburg  Niedersachsen  21337
+				DE
+
+00-13-3E   (hex)		MetaSwitch
+00133E     (base 16)		MetaSwitch
+				1411 Harbor Bay Parkway
+				Alameda  CA  94502
+				US
+
+00-13-45   (hex)		Eaton Corporation
+001345     (base 16)		Eaton Corporation
+				4201 North 27th Street
+				Milwaukee  Wisconsin  53216
+				US
+
+00-13-47   (hex)		Red Lion Controls, LP
+001347     (base 16)		Red Lion Controls, LP
+				20 Willow Springs Circle
+				York  NY  17402
+				US
+
+00-13-2E   (hex)		ITian Coporation
+00132E     (base 16)		ITian Coporation
+				4F Youngho Bd.1605-1 Seocho-dong
+				Seoul    137-070
+				KR
+
+00-13-39   (hex)		CCV Deutschland GmbH
+001339     (base 16)		CCV Deutschland GmbH
+				Gewerbering 1
+				Au i. d. Hallertau  Bayern  84072
+				DE
+
+00-13-29   (hex)		VSST Co., LTD
+001329     (base 16)		VSST Co., LTD
+				suit 3202, Korea World Trade Center 159-1
+				Seoul    135-729
+				KR
+
+00-13-2B   (hex)		Phoenix Digital
+00132B     (base 16)		Phoenix Digital
+				7650 East Evans Rd. Bldg. A
+				Scottsdale  Az  85260
+				US
+
+00-13-0B   (hex)		Mextal B.V.
+00130B     (base 16)		Mextal B.V.
+				De Tienden 48
+				Nuenen  Noord Brabant  5674TB
+				NL
+
+00-13-0D   (hex)		GALILEO AVIONICA
+00130D     (base 16)		GALILEO AVIONICA
+				VIALE EUROPA
+				 NERVIANO  MILANO  20014
+				IT
+
+00-12-F7   (hex)		Xiamen Xinglian Electronics Co., Ltd.
+0012F7     (base 16)		Xiamen Xinglian Electronics Co., Ltd.
+				Xinglian Electronics (Xingtel) Building,Chuangxin Road,
+				Xiamen  Fujian  361006
+				CN
+
+00-13-1B   (hex)		BeCell Innovations Corp.
+00131B     (base 16)		BeCell Innovations Corp.
+				12F-9, No. 79, Shin-Tai 5th Rd Sec 1,
+				Shih-chih,  Taipei  221
+				TW
+
+00-12-E2   (hex)		ALAXALA Networks Corporation
+0012E2     (base 16)		ALAXALA Networks Corporation
+				890 Kashimada, Saiwai-ku
+				Kawasaki-shi  Kanagawa-ken  212-0058
+				JP
+
+00-12-DF   (hex)		Novomatic AG
+0012DF     (base 16)		Novomatic AG
+				Wiener Strasse 158
+				Gumpoldskirchen  Niederösterreich  A-2352
+				AT
+
+00-12-D4   (hex)		Princeton Technology, Ltd
+0012D4     (base 16)		Princeton Technology, Ltd
+				K.A.I. Bldg. 3F
+				Chiyodaku  Tokyo  101-0032
+				JP
+
+00-12-D9   (hex)		Cisco Systems, Inc
+0012D9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-12-C2   (hex)		Apex Electronics Factory
+0012C2     (base 16)		Apex Electronics Factory
+				No.3 Industrial Zone, No.4 Block,
+				Shen Zhen  Guang Dong  518103
+				CN
+
+00-12-BE   (hex)		Astek Corporation
+0012BE     (base 16)		Astek Corporation
+				5055 Corporate Plaza Drive
+				Colorado Springs  Colorado  80919
+				US
+
+00-12-E1   (hex)		Alliant Networks, Inc
+0012E1     (base 16)		Alliant Networks, Inc
+				1259 Birchwood Dr.
+				Sunnyvale  CA  94089
+				US
+
+00-12-C5   (hex)		V-Show  Technology (China) Co.,Ltd
+0012C5     (base 16)		V-Show  Technology (China) Co.,Ltd
+				7F, Tengda Plaza, No.168
+				HaiDian District,  Beijing  100089
+				CN
+
+00-12-A0   (hex)		NeoMeridian Sdn Bhd
+0012A0     (base 16)		NeoMeridian Sdn Bhd
+				3A-1, Perdana The Place
+				Bandar Damansara Perdana  Selangor  47820
+				MY
+
+00-12-86   (hex)		ENDEVCO CORP
+001286     (base 16)		ENDEVCO CORP
+				30700 RANCHO VIEJO ROAD
+				SAN JUAN CAPISTRANO  CA  92675
+				US
+
+00-12-63   (hex)		Data Voice Technologies GmbH
+001263     (base 16)		Data Voice Technologies GmbH
+				Stockholmer Allee 32b
+				Dortmund  NRW  D-44269
+				DE
+
+00-12-70   (hex)		NGES Denro Systems
+001270     (base 16)		NGES Denro Systems
+				7055 Troy Hill Dr
+				Elkridge  MD  21075
+				US
+
+00-12-6E   (hex)		Seidel Elektronik GmbH Nfg.KG
+00126E     (base 16)		Seidel Elektronik GmbH Nfg.KG
+				Frauentalerstrasse 100
+				Deutschlandsberg  Steiermark  8530
+				AT
+
+00-12-6F   (hex)		Rayson Technology Co., Ltd.
+00126F     (base 16)		Rayson Technology Co., Ltd.
+				1F No.9 R&D Rd.II, Science-Based Industrial Park
+				Hsin-Chu    300
+				TW
+
+00-12-5C   (hex)		Green Hills Software, Inc.
+00125C     (base 16)		Green Hills Software, Inc.
+				30 West Sola Street
+				Santa Barbara  CA  93101
+				US
+
+00-12-5F   (hex)		AWIND Inc.
+00125F     (base 16)		AWIND Inc.
+				17F., No. 886-5, Jungjeng Rd
+				Taipei County    235
+				TW
+
+00-12-2D   (hex)		SiNett Corporation
+00122D     (base 16)		SiNett Corporation
+				640 W. California Avenue
+				Sunnyvale  CA  94086
+				US
+
+00-12-74   (hex)		NIT lab
+001274     (base 16)		NIT lab
+				Skoriny str., 65-3
+				Minsk  Minskaya obl.  220013
+				BY
+
+00-12-53   (hex)		AudioDev AB
+001253     (base 16)		AudioDev AB
+				Kabingatan 9
+				Malmö    SE-212 39
+				SE
+
+00-12-4C   (hex)		BBWM Corporation
+00124C     (base 16)		BBWM Corporation
+				6F, No. 578, Rui Guang Road, Nei Hu
+				Taipei    114
+				TW
+
+00-12-55   (hex)		NetEffect Incorporated
+001255     (base 16)		NetEffect Incorporated
+				9211 Waterford Centre Blvd
+				Austin  Texas  78758
+				US
+
+00-12-44   (hex)		Cisco Systems, Inc
+001244     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-12-2C   (hex)		Soenen Controls N.V.
+00122C     (base 16)		Soenen Controls N.V.
+				Wijnedalestraat 190
+				Roeselare  W-VL  8800
+				BE
+
+00-12-2B   (hex)		Virbiage Pty Ltd
+00122B     (base 16)		Virbiage Pty Ltd
+				Level 4
+				Melbourne  Victoria  3000
+				AU
+
+00-12-32   (hex)		LeWiz Communications Inc.
+001232     (base 16)		LeWiz Communications Inc.
+				1376 N. 4th St. #300
+				San Jose  CA  95112
+				US
+
+00-12-1A   (hex)		Techno Soft Systemnics Inc.
+00121A     (base 16)		Techno Soft Systemnics Inc.
+				2-5-17, Ebisu-nishi, Naniwa-ku,
+				Osaka    556-0003
+				JP
+
+00-12-1B   (hex)		Sound Devices, LLC
+00121B     (base 16)		Sound Devices, LLC
+				300 Wengel Drive
+				Reedsburg  WI  53959
+				US
+
+00-11-DF   (hex)		Current Energy
+0011DF     (base 16)		Current Energy
+				5440 Harvest Hill, Ste 100
+				Dallas  TX  75230
+				US
+
+00-11-D7   (hex)		eWerks Inc
+0011D7     (base 16)		eWerks Inc
+				420-2166 Mountain Grove Ave
+				Burlington  Ontario  L7P4X4
+				CA
+
+00-12-04   (hex)		u10 Networks, Inc.
+001204     (base 16)		u10 Networks, Inc.
+				2-2-14 Kakinokizaka
+				Meguro  Tokyo  152-0022
+				JP
+
+00-12-0A   (hex)		Emerson Climate Technologies GmbH
+00120A     (base 16)		Emerson Climate Technologies GmbH
+				Heerstrasse 111
+				Waiblingen  BW  71332
+				DE
+
+00-12-08   (hex)		Gantner Instruments GmbH
+001208     (base 16)		Gantner Instruments GmbH
+				Montafonerstrasse 8
+				Schruns  Vorarlberg  6780
+				AT
+
+00-12-01   (hex)		Cisco Systems, Inc
+001201     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-EE   (hex)		Estari, Inc.
+0011EE     (base 16)		Estari, Inc.
+				1800 Paxton St
+				Harrisburg  PA  17104
+				US
+
+00-12-00   (hex)		Cisco Systems, Inc
+001200     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-DE   (hex)		EURILOGIC
+0011DE     (base 16)		EURILOGIC
+				Centrale Parc Bât 7
+				Chatenay Malabry    92298
+				FR
+
+00-11-C8   (hex)		Powercom Co., Ltd.
+0011C8     (base 16)		Powercom Co., Ltd.
+				8F, No. 246, Lien Chen Rd.
+				Chung Ho  Taipei  235
+				TW
+
+00-11-B8   (hex)		Liebherr - Elektronik GmbH
+0011B8     (base 16)		Liebherr - Elektronik GmbH
+				Peter - Dornier - Strasse 11
+				Lindau (Bodensee)  Bavaria  88131
+				DE
+
+00-11-B4   (hex)		Westermo Network Technologies AB
+0011B4     (base 16)		Westermo Network Technologies AB
+				Stora Sundby
+				Sweden    SE-640 40
+				SE
+
+00-11-78   (hex)		Chiron Technology Ltd
+001178     (base 16)		Chiron Technology Ltd
+				Wyvols Court
+				Reading  Berkshire  RG7 1WY
+				GB
+
+00-11-6A   (hex)		Domo Ltd
+00116A     (base 16)		Domo Ltd
+				Wessex House
+				Eastleigh  Hampshire  SO50 9FD
+				GB
+
+00-11-93   (hex)		Cisco Systems, Inc
+001193     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-8C   (hex)		Missouri Department of Transportation
+00118C     (base 16)		Missouri Department of Transportation
+				P.O. Box 270
+				Jefferson City  Missouri  65102
+				US
+
+00-11-8E   (hex)		Halytech Mace
+00118E     (base 16)		Halytech Mace
+				Unit 11, 22 Lexington Drive
+				Baulkham Hills  NSW  2153
+				AU
+
+00-11-86   (hex)		Prime Systems, Inc.
+001186     (base 16)		Prime Systems, Inc.
+				16267-333
+				Suwa-gun Hara-mura  Nagano  391-0100
+				JP
+
+00-11-83   (hex)		Datalogic ADC, Inc.
+001183     (base 16)		Datalogic ADC, Inc.
+				959 Terry St
+				Eugene  OR  97402
+				US
+
+00-11-7D   (hex)		ZMD America, Inc.
+00117D     (base 16)		ZMD America, Inc.
+				15373 Innovation Drive
+				San Dieo  CA  92128
+				US
+
+00-11-7F   (hex)		Neotune Information Technology Corporation,.LTD
+00117F     (base 16)		Neotune Information Technology Corporation,.LTD
+				1703#  No.737  North of Caoxi Rd.
+				Shanghai    200030
+				CN
+
+00-11-9D   (hex)		Diginfo Technology Corporation
+00119D     (base 16)		Diginfo Technology Corporation
+				10Fl., No.82, Fu Hsing North Road
+				Taipei    106
+				TW
+
+00-11-9C   (hex)		EP&T Energy
+00119C     (base 16)		EP&T Energy
+				358 Eastern Valley Way
+				Sydney  NSW  2067
+				AU
+
+00-11-9A   (hex)		Alkeria srl
+00119A     (base 16)		Alkeria srl
+				25 Via Giuntini
+				Navacchio (PI)    I-56023
+				IT
+
+00-11-C1   (hex)		4P MOBILE DATA PROCESSING
+0011C1     (base 16)		4P MOBILE DATA PROCESSING
+				VIALE REGIONE VENETO 26
+				PADOVA  PD  35127
+				IT
+
+00-11-B2   (hex)		2001 Technology Inc.
+0011B2     (base 16)		2001 Technology Inc.
+				7F-10, 79 Hsin Tai 5th. Rd. Sec.1
+				Hsi Chih  Taipei County  221
+				TW
+
+00-11-AF   (hex)		Medialink-i,Inc
+0011AF     (base 16)		Medialink-i,Inc
+				1-9-10 Hamamatsu-Cho
+				Minato-Ku  Tokyo  105-0013
+				JP
+
+00-11-5E   (hex)		ProMinent Dosiertechnik GmbH
+00115E     (base 16)		ProMinent Dosiertechnik GmbH
+				Im Schumachergewann 5-11
+				Heidelberg  BW  69123
+				DE
+
+00-11-7C   (hex)		e-zy.net
+00117C     (base 16)		e-zy.net
+				Smirnis 14
+				Veria  Imathia  59100
+				GR
+
+00-11-39   (hex)		STOEBER ANTRIEBSTECHNIK GmbH + Co. KG.
+001139     (base 16)		STOEBER ANTRIEBSTECHNIK GmbH + Co. KG.
+				Kieselbronner Str. 12
+				Pforzheim    75177
+				DE
+
+00-11-3E   (hex)		JL Corporation
+00113E     (base 16)		JL Corporation
+				4-4-17 SUGE
+				KAWASAKI-CITY  KANAGAWA-KEN  214-0001
+				JP
+
+00-11-38   (hex)		TAISHIN CO., LTD.
+001138     (base 16)		TAISHIN CO., LTD.
+				200-7 Nakano
+				Nakano  Nagano  383-0013
+				JP
+
+00-11-36   (hex)		Goodrich Sensor Systems
+001136     (base 16)		Goodrich Sensor Systems
+				14300 Judicial Road
+				Burnsville  Minnesota  55306-4898
+				US
+
+00-11-4B   (hex)		Francotyp-Postalia GmbH
+00114B     (base 16)		Francotyp-Postalia GmbH
+				Triftweg 21-26
+				Birkenwerder  Brandenburg  16547
+				DE
+
+00-11-47   (hex)		Secom-Industry co.LTD.
+001147     (base 16)		Secom-Industry co.LTD.
+				Fukuoka Kuramoto Ichihonki 3-3
+				Shiroishi  Miyagi  989-0295
+				JP
+
+00-11-4A   (hex)		KAYABA INDUSTRY Co,.Ltd.
+00114A     (base 16)		KAYABA INDUSTRY Co,.Ltd.
+				World Trade Center Bldg., 4-1
+				Minato-ku,  Tokyo Meto.  105-6111
+				JP
+
+00-11-42   (hex)		e-SMARTCOM  INC.
+001142     (base 16)		e-SMARTCOM  INC.
+				3F, 216, Imok-Dong
+				Suwon  Kyoungki-Do  440-310
+				KR
+
+00-11-20   (hex)		Cisco Systems, Inc
+001120     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-18   (hex)		BLX IC Design Corp., Ltd.
+001118     (base 16)		BLX IC Design Corp., Ltd.
+				Rm 1006, Quantum Plaza
+				Beijing    100083
+				CN
+
+00-11-07   (hex)		RGB Networks Inc.
+001107     (base 16)		RGB Networks Inc.
+				2929 Campus Drive
+				San Mateo  CA  94403
+				US
+
+00-11-08   (hex)		Orbital Data Corporation
+001108     (base 16)		Orbital Data Corporation
+				1900 S. Norfolk St. Ste 320
+				San Mateo  CA  94403
+				US
+
+00-11-0C   (hex)		Atmark Techno, Inc.
+00110C     (base 16)		Atmark Techno, Inc.
+				2F SD BLDG, 2-2-3-14 Atsubetsu-nishi, Atsubetsu-ku
+				Sapporo  Hokkaido  004-0062
+				JP
+
+00-11-4D   (hex)		Atsumi Electric Co.,LTD.
+00114D     (base 16)		Atsumi Electric Co.,LTD.
+				4-2-2 Shin-Miyakoda, Kita-ku
+				Hamamatsu  Shizuoka  431-2103
+				JP
+
+00-11-30   (hex)		Allied Telesis (Hong Kong) Ltd.
+001130     (base 16)		Allied Telesis (Hong Kong) Ltd.
+				Room F, 3/F, Yeung Yiu Chong (no. 8) Industrial building,
+				    
+				HK
+
+00-11-29   (hex)		Paradise Datacom Ltd.
+001129     (base 16)		Paradise Datacom Ltd.
+				1 Wheaton Road
+				Witham  Essex UK  CM8 1UJ
+				GB
+
+00-11-57   (hex)		Oki Electric Industry Co., Ltd.
+001157     (base 16)		Oki Electric Industry Co., Ltd.
+				1-7-12 Toranomon
+				Tokyo 105-8460    
+				JP
+
+00-0F-D9   (hex)		FlexDSL Telecommunications AG
+000FD9     (base 16)		FlexDSL Telecommunications AG
+				Haus zum Engel
+				Altendorf  Schwyz  8852
+				CH
+
+00-0F-D0   (hex)		ASTRI
+000FD0     (base 16)		ASTRI
+				18/F Tower 6, Gateway, 9 Canton Rd
+				    
+				HK
+
+00-0F-CA   (hex)		A-JIN TECHLINE CO, LTD
+000FCA     (base 16)		A-JIN TECHLINE CO, LTD
+				327-35
+				Kumchun-Ku  Seoul  153-802
+				KR
+
+00-0F-EC   (hex)		ARKUS Inc.
+000FEC     (base 16)		ARKUS Inc.
+				3-8 Chuo-cho
+				3-8 Noda, Kitaa-Ku    700-0971
+				JP
+
+00-0F-ED   (hex)		Anam Electronics Co., Ltd
+000FED     (base 16)		Anam Electronics Co., Ltd
+				645 Sungkok-dong
+				Ansan-city  Kyungki-do  425-834
+				KR
+
+00-0F-E5   (hex)		MERCURY SECURITY CORPORATION
+000FE5     (base 16)		MERCURY SECURITY CORPORATION
+				2355 MIRA MAR AVE.
+				LONG BEACH  CA  90815
+				US
+
+00-0F-AE   (hex)		E2O Communications
+000FAE     (base 16)		E2O Communications
+				52 Serangoon North Ave 4
+				    555853
+				SG
+
+00-0F-B1   (hex)		Cognio Inc.
+000FB1     (base 16)		Cognio Inc.
+				101 Orchard Ridge Drive
+				Gaithersburg  MD  20878
+				US
+
+00-0F-A7   (hex)		Raptor Networks Technology
+000FA7     (base 16)		Raptor Networks Technology
+				65 Enterprise Road
+				Aliso Viejo  CA  92656
+				US
+
+00-0F-F0   (hex)		Sunray Co. Ltd.
+000FF0     (base 16)		Sunray Co. Ltd.
+				Osawa2-5-5 Mitaka
+				  Tokyo  181-0015
+				JP
+
+00-11-03   (hex)		kawamura electric inc.
+001103     (base 16)		kawamura electric inc.
+				3-86 akatsuki-cho
+				seto  aichi  489-0071
+				JP
+
+00-0F-DD   (hex)		SORDIN AB
+000FDD     (base 16)		SORDIN AB
+				Rorlaggarvagen 8
+				Varnamo  Smaland  S-331 34
+				SE
+
+00-0F-C3   (hex)		PalmPalm Technology, Inc.
+000FC3     (base 16)		PalmPalm Technology, Inc.
+				Samsung-dong 156-3, Gangnam-gu
+				Seoul    135-091
+				KR
+
+00-0F-88   (hex)		AMETEK, Inc.
+000F88     (base 16)		AMETEK, Inc.
+				150 Freeport Road
+				Pittsburgh  PA  15238
+				US
+
+00-0F-7E   (hex)		Ablerex Electronics Co., LTD
+000F7E     (base 16)		Ablerex Electronics Co., LTD
+				1F, No.3 Lane 7, Paokao Rd.
+				Hsintien  Taipei Hsien  23114
+				TW
+
+00-0F-83   (hex)		Brainium Technologies Inc.
+000F83     (base 16)		Brainium Technologies Inc.
+				#201 - 11491 Kingston Street
+				Maple Ridge  BC  V2X 0Y6
+				CA
+
+00-0F-84   (hex)		Astute Networks, Inc.
+000F84     (base 16)		Astute Networks, Inc.
+				15015 Ave of Science
+				San Diego  CA  92128
+				US
+
+00-0F-5C   (hex)		Day One Digital Media Limited
+000F5C     (base 16)		Day One Digital Media Limited
+				197 Archers Rd
+				Auckland  North Island  1310
+				NZ
+
+00-0F-52   (hex)		YORK Refrigeration, Marine & Controls
+000F52     (base 16)		YORK Refrigeration, Marine & Controls
+				Jens Juulsvej 28
+				Viby J  DK  8362
+				DK
+
+00-0F-4C   (hex)		Elextech INC
+000F4C     (base 16)		Elextech INC
+				554-2, Gasan-Dong, Gumcheon-Gu
+				Seoul    153-023
+				KR
+
+00-0F-93   (hex)		Landis+Gyr Ltd.
+000F93     (base 16)		Landis+Gyr Ltd.
+				Feldstrasse 1
+				Zug    CH-6301
+				CH
+
+00-0F-94   (hex)		Genexis BV
+000F94     (base 16)		Genexis BV
+				Lodewijktraat 1A
+				5652 AC  Eindhoven    
+				SE
+
+00-0F-6C   (hex)		ADDI-DATA GmbH
+000F6C     (base 16)		ADDI-DATA GmbH
+				Airport Boulevard B210
+				RHEINMUENSTER  BW  77836
+				DE
+
+00-0F-8F   (hex)		Cisco Systems, Inc
+000F8F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0F-7D   (hex)		Xirrus
+000F7D     (base 16)		Xirrus
+				310 North Westlake Blvd.
+				Westlake Village  CA  91362
+				US
+
+00-0F-76   (hex)		Digital Keystone, Inc.
+000F76     (base 16)		Digital Keystone, Inc.
+				1975 El Camino Real
+				Mountain View  CA  94040
+				US
+
+00-0F-9E   (hex)		Murrelektronik GmbH
+000F9E     (base 16)		Murrelektronik GmbH
+				Falkenstraße 3
+				Oppenweiler  Baden-Württemberg  71570
+				DE
+
+00-0F-79   (hex)		Bluetooth Interest Group Inc.
+000F79     (base 16)		Bluetooth Interest Group Inc.
+				4F, No. 9, Alley 2, Lane 35, Ji-Hu Rd.
+				Taipei    114
+				TW
+
+00-0F-17   (hex)		Insta Elektro GmbH
+000F17     (base 16)		Insta Elektro GmbH
+				Hohe Steinert 10
+				Luedenscheid  NRW  58509
+				DE
+
+00-0F-1E   (hex)		Chengdu KT Electric Co.of High & New Technology
+000F1E     (base 16)		Chengdu KT Electric Co.of High & New Technology
+				No.2 Gaopeng Dong Road,High & New Development Zone
+				Chengdu  Sichuan  610041
+				CN
+
+00-0F-15   (hex)		Icotera A/S
+000F15     (base 16)		Icotera A/S
+				Vibeholms Allé 16
+				Brøndby    2605
+				DK
+
+00-0F-39   (hex)		IRIS SENSORS
+000F39     (base 16)		IRIS SENSORS
+				ZA les Ufernets
+				TOULAUD  Ardeche  F07130
+				FR
+
+00-0F-3E   (hex)		CardioNet, Inc
+000F3E     (base 16)		CardioNet, Inc
+				1010 Second Avenue
+				San Diego  CA  92101
+				US
+
+00-0F-3F   (hex)		Big Bear Networks
+000F3F     (base 16)		Big Bear Networks
+				345 Potrero Ave
+				Sunny Vale  California  94085
+				US
+
+00-0F-35   (hex)		Cisco Systems, Inc
+000F35     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0F-36   (hex)		Accurate Techhnologies, Inc.
+000F36     (base 16)		Accurate Techhnologies, Inc.
+				47199 Cartier Dr.
+				Wixom  Michigan  48393
+				US
+
+00-0F-28   (hex)		Itronix Corporation
+000F28     (base 16)		Itronix Corporation
+				South 801 Stevens Street
+				Spokane  WA  99204
+				US
+
+00-0F-23   (hex)		Cisco Systems, Inc
+000F23     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0F-22   (hex)		Helius, Inc.
+000F22     (base 16)		Helius, Inc.
+				333 South 520 West
+				Lindon  UT  84042
+				US
+
+00-0F-24   (hex)		Cisco Systems, Inc
+000F24     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-FC   (hex)		JTAG Technologies B.V.
+000EFC     (base 16)		JTAG Technologies B.V.
+				Boschdijk 50
+				Eindhoven  NB  5612 AN
+				NL
+
+00-0E-FE   (hex)		EndRun Technologies LLC
+000EFE     (base 16)		EndRun Technologies LLC
+				2270 Northpoint Parkway
+				Santa Rosa  CA  95407
+				US
+
+00-0F-2C   (hex)		Uplogix, Inc.
+000F2C     (base 16)		Uplogix, Inc.
+				Bldg 1, Suite 235
+				Austin  TX  78730
+				US
+
+00-0F-2B   (hex)		GREENBELL SYSTEMS
+000F2B     (base 16)		GREENBELL SYSTEMS
+				2TH Floor, Doonam Bldg, 236-11 Nonhyun-Dong, Kangnam-Ku
+				Seoul    135-010
+				KR
+
+00-0E-F2   (hex)		Infinico Corporation
+000EF2     (base 16)		Infinico Corporation
+				4F, F-1 Bldg., 1-2-12,
+				Tokyo    105-0013
+				JP
+
+00-0F-0D   (hex)		Hunt Electronic Co., Ltd.
+000F0D     (base 16)		Hunt Electronic Co., Ltd.
+				6FI, NO. 57-59, Jiun H Sien Rd., Chi Tu District
+				Keelung  Taiwan  206
+				TW
+
+00-0F-08   (hex)		Indagon Oy
+000F08     (base 16)		Indagon Oy
+				Nuijamiestentie 5 A
+				Helsinki  -  00400
+				FI
+
+00-0F-04   (hex)		cim-usa inc
+000F04     (base 16)		cim-usa inc
+				10813 nw 30th street
+				miami  florida  33172
+				US
+
+00-0F-42   (hex)		Xalyo Systems
+000F42     (base 16)		Xalyo Systems
+				Grenier 9
+				Commugny  VD  1291
+				CH
+
+00-0E-A5   (hex)		BLIP Systems
+000EA5     (base 16)		BLIP Systems
+				Haekken 2
+				Vodskov  Vester Hassing  9310
+				DK
+
+00-0E-A0   (hex)		NetKlass Technology Inc.
+000EA0     (base 16)		NetKlass Technology Inc.
+				2F-1, No.30,Tai Yuen Street,
+				Chupei City,  Hsinchu,  302
+				TW
+
+00-0E-E4   (hex)		BOE TECHNOLOGY GROUP CO.,LTD
+000EE4     (base 16)		BOE TECHNOLOGY GROUP CO.,LTD
+				No.10 Jiuxianqiao Road,Chaoyang District,Beijing,PRC
+				Beijing    100016
+				CN
+
+00-0E-DE   (hex)		REMEC, Inc.
+000EDE     (base 16)		REMEC, Inc.
+				2144 Franklin Drive NE
+				Palm Bay  Florida  32905-4021
+				US
+
+00-0E-9C   (hex)		Benchmark Electronics 
+000E9C     (base 16)		Benchmark Electronics 
+				3535 Technology Drive
+				Rochester  MN  55901
+				US
+
+00-0E-9A   (hex)		BOE TECHNOLOGY GROUP CO.,LTD
+000E9A     (base 16)		BOE TECHNOLOGY GROUP CO.,LTD
+				No.10 Jiuxianqiao Road,Chaoyang District,Beijing,PRC
+				Beijing    100016
+				CN
+
+00-0E-90   (hex)		PONICO CORP.
+000E90     (base 16)		PONICO CORP.
+				602, Ace Twin Tower 1, 212-1 Guro-dong
+				Gurogu  Seoul  152-766
+				KR
+
+00-0E-8A   (hex)		Avara Technologies Pty. Ltd.
+000E8A     (base 16)		Avara Technologies Pty. Ltd.
+				9 Business Park Drive
+				Notting Hill  Victoria  3168
+				AU
+
+00-0E-B8   (hex)		Iiga co.,Ltd
+000EB8     (base 16)		Iiga co.,Ltd
+				3F TKBldg. 3-5-2 Sotokanda
+				Chiyoda-Ku  Tokyo  101-0021
+				JP
+
+00-0E-BE   (hex)		B&B Electronics Manufacturing Co.
+000EBE     (base 16)		B&B Electronics Manufacturing Co.
+				707 Dayton Road
+				Ottawa  Ilinois  61350
+				US
+
+00-0E-BB   (hex)		Everbee Networks
+000EBB     (base 16)		Everbee Networks
+				41, Boulevard des Capucines
+				Paris    75002
+				FR
+
+00-0E-CE   (hex)		S.I.T.T.I. S.p.A.
+000ECE     (base 16)		S.I.T.T.I. S.p.A.
+				Via Cadorna 69
+				Vimodrone  Milan  I-20090
+				IT
+
+00-0E-D4   (hex)		CRESITT INDUSTRIE
+000ED4     (base 16)		CRESITT INDUSTRIE
+				12 rue de Blois
+				Orleans  BP 6744  45067  cedex
+				FR
+
+00-0E-D6   (hex)		Cisco Systems, Inc
+000ED6     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-D8   (hex)		Positron Access Solutions Corp
+000ED8     (base 16)		Positron Access Solutions Corp
+				5101 Buchan Street
+				  Montreal, Quebec  H4P 2R9
+				CA
+
+00-0E-D1   (hex)		Osaka Micro Computer.
+000ED1     (base 16)		Osaka Micro Computer.
+				Isonokamicyo 3-11-7
+				Kishiwada  Osaka  5960001
+				JP
+
+00-0E-B0   (hex)		Solutions Radio BV
+000EB0     (base 16)		Solutions Radio BV
+				Prinsegracht 82
+				The Hague  ZH  2512 GC
+				NL
+
+00-0E-83   (hex)		Cisco Systems, Inc
+000E83     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-81   (hex)		Devicescape Software, Inc.
+000E81     (base 16)		Devicescape Software, Inc.
+				1000 Marina Blvd
+				Brisbane  CA  94005
+				US
+
+00-0E-88   (hex)		VIDEOTRON CORP.
+000E88     (base 16)		VIDEOTRON CORP.
+				17-16,2-CHOME
+				HACHIOJI  TOKYO  193-0835
+				JP
+
+00-0E-86   (hex)		Alcatel North America
+000E86     (base 16)		Alcatel North America
+				2301 Sugar Bush Road
+				Raleigh  NC  27612
+				US
+
+00-0E-69   (hex)		China Electric Power Research Institute
+000E69     (base 16)		China Electric Power Research Institute
+				No.15 Xiaoying East Road,Qinghe,Beijing,China
+				Beijing    100085
+				CN
+
+00-0E-61   (hex)		MICROTROL LIMITED
+000E61     (base 16)		MICROTROL LIMITED
+				16 ELGAR BUSINESS CENTRE
+				HALLOW  WORCESTER  WR2 6NJ
+				GB
+
+00-0E-64   (hex)		Elphel, Inc
+000E64     (base 16)		Elphel, Inc
+				3200 S. Elpmer St.
+				Magna  UT  84044
+				US
+
+00-0E-49   (hex)		Forsway Scandinavia AB
+000E49     (base 16)		Forsway Scandinavia AB
+				Kanikegränd 3B
+				541 34  Skövde  
+				SE
+
+00-0E-42   (hex)		Motic Incoporation Ltd.
+000E42     (base 16)		Motic Incoporation Ltd.
+				Room 2907-8, Windsor  House
+				Hong Kong    
+				CN
+
+00-0E-3D   (hex)		Televic N.V.
+000E3D     (base 16)		Televic N.V.
+				Leo Bekaertlaan 1
+				Izegem    8870
+				BE
+
+00-0E-39   (hex)		Cisco Systems, Inc
+000E39     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0E-34   (hex)		NexGen City, LP
+000E34     (base 16)		NexGen City, LP
+				1680 Glenville
+				Richardson  Texas  75081
+				US
+
+00-0E-6A   (hex)		3Com Ltd
+000E6A     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-0E-5A   (hex)		TELEFIELD inc.
+000E5A     (base 16)		TELEFIELD inc.
+				3F, Kumbo Bldg, 2-9, Seokchon-Dong
+				Seoul    138-190
+				KR
+
+00-0E-5D   (hex)		Triple Play Technologies A/S
+000E5D     (base 16)		Triple Play Technologies A/S
+				Herstedvang 8
+				Albertslund    DK-2620
+				DK
+
+00-0E-52   (hex)		Optium Corporation
+000E52     (base 16)		Optium Corporation
+				500 Horizon Dr
+				Chalfont  PA  18914
+				US
+
+00-0E-7E   (hex)		ionSign Oy
+000E7E     (base 16)		ionSign Oy
+				P.O.BOX  246
+				Rauma    
+				FI
+
+00-0E-77   (hex)		Decru, Inc.
+000E77     (base 16)		Decru, Inc.
+				275 Shoreline Dr
+				Redwood City  CA  94065
+				US
+
+00-0E-4D   (hex)		Numesa Inc.
+000E4D     (base 16)		Numesa Inc.
+				4444 Westgrove Suite 300
+				Addison  TX  75001
+				US
+
+00-0E-4C   (hex)		Bermai Inc.
+000E4C     (base 16)		Bermai Inc.
+				410 Cambridge Ave
+				Palo Alto  CA  94306
+				US
+
+00-0E-2D   (hex)		Hyundai Digital Technology Co.,Ltd.
+000E2D     (base 16)		Hyundai Digital Technology Co.,Ltd.
+				223-22, Sangdaewon-1dong, Jungwon-gu
+				Seongnam-si  Kyoungki-do  462-807
+				KR
+
+00-0E-30   (hex)		AERAS Networks, Inc.
+000E30     (base 16)		AERAS Networks, Inc.
+				P.O. Box 7330
+				Laguna Niguel  CA  92607-7330
+				US
+
+00-0E-29   (hex)		Shester Communications Inc
+000E29     (base 16)		Shester Communications Inc
+				159 S. Lincoln
+				Spokane  WA  99201
+				US
+
+00-0D-E1   (hex)		Control Products, Inc.
+000DE1     (base 16)		Control Products, Inc.
+				1724 Lake Drive West
+				Chanhassen  MN  55317
+				US
+
+00-0D-D0   (hex)		TetraTec Instruments GmbH
+000DD0     (base 16)		TetraTec Instruments GmbH
+				Gewerbestrasse 8
+				Steinenbronn  BW  71144
+				DE
+
+00-0D-D3   (hex)		SAMWOO Telecommunication Co.,Ltd.
+000DD3     (base 16)		SAMWOO Telecommunication Co.,Ltd.
+				
+				Gunpo  Kyoung-Gi  435-831
+				KR
+
+00-0D-D8   (hex)		BBN
+000DD8     (base 16)		BBN
+				7F-3,NO.186, Jian Yi Rd ., Chung Ho City
+				Taipei    235
+				TW
+
+00-0D-B3   (hex)		SDO Communication Corperation
+000DB3     (base 16)		SDO Communication Corperation
+				6F, No.112, Shin Min Street
+				Chung Ho City  Taipei Hsien  235
+				TW
+
+00-0D-AE   (hex)		SAMSUNG HEAVY INDUSTRIES CO., LTD.
+000DAE     (base 16)		SAMSUNG HEAVY INDUSTRIES CO., LTD.
+				493, Banweol-Ri, Taean-Eup
+				Hwaseong-City  Kyeonggi-Do  445-973
+				KR
+
+00-0D-B2   (hex)		Ammasso, Inc.
+000DB2     (base 16)		Ammasso, Inc.
+				345 Summer Street
+				Boston  MA  02210
+				US
+
+00-0E-0D   (hex)		Hesch Schröder GmbH
+000E0D     (base 16)		Hesch Schröder GmbH
+				Boschstraße 8
+				Neustadt  Niedersachsen  31535
+				DE
+
+00-0D-F6   (hex)		Technology Thesaurus Corp.
+000DF6     (base 16)		Technology Thesaurus Corp.
+				NO. 6, East 4th St. KEPZ
+				KAOHSIUNG    806
+				TW
+
+00-0D-FF   (hex)		CHENMING MOLD INDUSTRY CORP.
+000DFF     (base 16)		CHENMING MOLD INDUSTRY CORP.
+				2F No. 26, Lane 513, Rei Kuang Rd.
+				Taipei    114
+				TW
+
+00-0D-C7   (hex)		COSMIC ENGINEERING INC.
+000DC7     (base 16)		COSMIC ENGINEERING INC.
+				1-3-5, Nishihirayama
+				Hino-shi  TOKYO  191-0055
+				JP
+
+00-0D-C2   (hex)		Private
+000DC2     (base 16)		Private
+
+00-0D-BF   (hex)		TekTone Sound & Signal Mfg., Inc.
+000DBF     (base 16)		TekTone Sound & Signal Mfg., Inc.
+				277 Industrial Park Rd.
+				Franklin  NC  28734
+				US
+
+00-0E-19   (hex)		LogicaCMG Pty Ltd
+000E19     (base 16)		LogicaCMG Pty Ltd
+				17-19 Orion Road
+				Lane Cove  NSW  2066
+				AU
+
+00-0E-1A   (hex)		JPS Communications
+000E1A     (base 16)		JPS Communications
+				5800 Departure Drive
+				Raleigh  NC  27616
+				US
+
+00-0E-06   (hex)		Team Simoco Ltd
+000E06     (base 16)		Team Simoco Ltd
+				Field House
+				Derby  Derbyshire  DE1 1NH
+				GB
+
+00-0D-5C   (hex)		Robert Bosch GmbH, VT-ATMO
+000D5C     (base 16)		Robert Bosch GmbH, VT-ATMO
+				Wernerstrasse 51
+				Stuttgart  BW  70469
+				DE
+
+00-0D-60   (hex)		IBM Corp
+000D60     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-0D-67   (hex)		Ericsson
+000D67     (base 16)		Ericsson
+				349 Terry Fox Drive
+				Kanata  Ottawa  K2K 2V6
+				CA
+
+00-0D-5F   (hex)		Minds Inc
+000D5F     (base 16)		Minds Inc
+				1919 boul lionel bertrand
+				Boisbriand  Quebec  J7H 1N8
+				CA
+
+00-0D-98   (hex)		S.W.A.C. Schmitt-Walter Automation Consult GmbH
+000D98     (base 16)		S.W.A.C. Schmitt-Walter Automation Consult GmbH
+				Oedenpullach 1
+				Oberhaching  Bavaria  82041
+				DE
+
+00-0D-8C   (hex)		Shanghai Wedone Digital Ltd. CO.
+000D8C     (base 16)		Shanghai Wedone Digital Ltd. CO.
+				893-899 Huashan Road,
+				Shanghai    200031
+				CN
+
+00-0D-94   (hex)		AFAR Communications,Inc
+000D94     (base 16)		AFAR Communications,Inc
+				81 David Love Place
+				Santa Barbara  CA  93117
+				US
+
+00-0D-AA   (hex)		S.A.Tehnology co.,Ltd.
+000DAA     (base 16)		S.A.Tehnology co.,Ltd.
+				80-12 Yangjae 1 Dong
+				Seoul  South Korea  137-890
+				KR
+
+00-0D-A6   (hex)		Universal Switching Corporation
+000DA6     (base 16)		Universal Switching Corporation
+				7671 San Fernando Rd
+				Burbank  CA  91505-1073
+				US
+
+00-0D-8D   (hex)		Prosoft Technology, Inc
+000D8D     (base 16)		Prosoft Technology, Inc
+				5201 Truxtun Ave
+				Bakersfield  CA  93300
+				US
+
+00-0D-84   (hex)		Makus Inc.
+000D84     (base 16)		Makus Inc.
+				4F Daedo Bldg., 748-14 Yeoksam-dong
+				Kangnam-gu  Seoul  135-080
+				KR
+
+00-0D-73   (hex)		Technical Support, Inc.
+000D73     (base 16)		Technical Support, Inc.
+				11253 John Galt Blvd
+				Omaha  Nebraska  68137
+				US
+
+00-0D-69   (hex)		TMT&D Corporation
+000D69     (base 16)		TMT&D Corporation
+				2-24-1
+				Fuchu-si  Tokyo  183-0057
+				JP
+
+00-0D-A2   (hex)		Infrant Technologies, Inc.
+000DA2     (base 16)		Infrant Technologies, Inc.
+				48820 Kato Road
+				Fremont  CA  94538
+				US
+
+00-0D-68   (hex)		Vinci Systems, Inc.
+000D68     (base 16)		Vinci Systems, Inc.
+				8330 Boone Boulevard
+				Vienna  VA  22182
+				US
+
+00-0D-64   (hex)		COMAG Handels AG
+000D64     (base 16)		COMAG Handels AG
+				Zillenhardtstraße 41
+				Goeppingen  Baden-Württemberg  73037
+				DE
+
+00-0D-74   (hex)		Sand Network Systems, Inc.
+000D74     (base 16)		Sand Network Systems, Inc.
+				434 Payran Street, Suite B
+				Petaluma  CA  94952
+				US
+
+00-0D-7D   (hex)		Afco Systems
+000D7D     (base 16)		Afco Systems
+				200 Finn Court
+				Farmingdale  NY  11735
+				US
+
+00-0D-54   (hex)		3Com Ltd
+000D54     (base 16)		3Com Ltd
+				Peoplebuilding 2
+				Hemel Hempstead  Herts  HP2 4NW
+				GB
+
+00-0D-4C   (hex)		Outline Electronics Ltd.
+000D4C     (base 16)		Outline Electronics Ltd.
+				7/F Benson Tower
+				Kwun Tong  Kowloon  
+				HK
+
+00-0D-0F   (hex)		Finlux Ltd
+000D0F     (base 16)		Finlux Ltd
+				Radiomiehenkatu 3
+				Turku    FIN-20321
+				FI
+
+00-0D-12   (hex)		AXELL Corporation
+000D12     (base 16)		AXELL Corporation
+				Akihabara UDX South Wing 10F
+				Chiyoda-ku  Tokyo  101-8973
+				JP
+
+00-0D-34   (hex)		Shell International Exploration and Production, Inc.
+000D34     (base 16)		Shell International Exploration and Production, Inc.
+				BTC-Gasmer
+				Houston  TX  77001
+				US
+
+00-0D-32   (hex)		DispenseSource, Inc.
+000D32     (base 16)		DispenseSource, Inc.
+				29801 Santa Margarita Parkway
+				Rancho Santa Margarita  CA  92688
+				US
+
+00-0C-F6   (hex)		Sitecom Europe BV
+000CF6     (base 16)		Sitecom Europe BV
+				Sevillaweg 122
+				Rotterdam  ZH  3047 AL
+				NL
+
+00-0C-F2   (hex)		GAMESA Eólica
+000CF2     (base 16)		GAMESA Eólica
+				Polígono Agustinos. C/ A s/n.
+				Pamplona  NAVARRA  31013
+				ES
+
+00-0D-2E   (hex)		Matsushita Avionics Systems Corporation
+000D2E     (base 16)		Matsushita Avionics Systems Corporation
+				26200 Enterprise Way
+				Lake Forest  CA  92630
+				US
+
+00-0D-28   (hex)		Cisco Systems, Inc
+000D28     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0D-4D   (hex)		Ninelanes
+000D4D     (base 16)		Ninelanes
+				#405 4F Diplomatic Center
+				Seoul    1376-1
+				KR
+
+00-0D-53   (hex)		Beijing 5w Communication Corp.
+000D53     (base 16)		Beijing 5w Communication Corp.
+				NO.4,Zhong-Guan-Cun South 4 street,
+				Beijing    100080
+				CN
+
+00-0C-FC   (hex)		S2io Technologies Corp
+000CFC     (base 16)		S2io Technologies Corp
+				505 March Rd
+				Ottawa  Ontario  K2K 2M5
+				CA
+
+00-0D-38   (hex)		NISSIN INC.
+000D38     (base 16)		NISSIN INC.
+				10-7 KAMEI-CHO
+				TAKARAZUKA  HYOGO  665-0047
+				JP
+
+00-0D-15   (hex)		Voipac s.r.o.
+000D15     (base 16)		Voipac s.r.o.
+				Ul. Janka Krala 3
+				Trencin    911 01
+				SK
+
+00-0C-A1   (hex)		SIGMACOM Co., LTD.
+000CA1     (base 16)		SIGMACOM Co., LTD.
+				DacomBldg 7F 200-12 Anyang-dong
+				    430-817
+				KR
+
+00-0C-A6   (hex)		Mintera Corporation
+000CA6     (base 16)		Mintera Corporation
+				847 Rogers Street
+				Lowell  MA  01852
+				US
+
+00-0C-C1   (hex)		Eaton Corporation
+000CC1     (base 16)		Eaton Corporation
+				2300 Badger Drive
+				Waukesha  WI  53188
+				US
+
+00-0C-8B   (hex)		Connect Tech Inc
+000C8B     (base 16)		Connect Tech Inc
+				42 Arrow Road
+				Guelph  Ontario  N1K 1S6
+				CA
+
+00-0C-90   (hex)		Octasic Inc.
+000C90     (base 16)		Octasic Inc.
+				4101 Molson St.
+				Montreal  Quebec  H1Y 3L1
+				CA
+
+00-0C-8C   (hex)		KODICOM CO.,LTD.
+000C8C     (base 16)		KODICOM CO.,LTD.
+				A-Dong 5FI.,SK Twin Tower 345-9,
+				Seoul    153-023
+				KR
+
+00-0C-C2   (hex)		ControlNet (India) Private Limited
+000CC2     (base 16)		ControlNet (India) Private Limited
+				L-44, Unit - I
+				Verna, Salcete  Goa  403 722
+				IN
+
+00-0C-94   (hex)		United Electronic Industries, Inc. (EUI)
+000C94     (base 16)		United Electronic Industries, Inc. (EUI)
+				27 Renmar Ave
+				Walpole  MA  02081
+				US
+
+00-0C-9B   (hex)		EE Solutions, Inc
+000C9B     (base 16)		EE Solutions, Inc
+				8F, No. 9, Park II Ave., Science-Based I
+				Hsin Chu    300
+				TW
+
+00-0C-E1   (hex)		The Open Group
+000CE1     (base 16)		The Open Group
+				Apex Plaza
+				Reading  Berks  RG1 1AX
+				GB
+
+00-0C-DC   (hex)		BECS Technology, Inc
+000CDC     (base 16)		BECS Technology, Inc
+				9487 Dielman Rock Island Industrial Driv
+				St. Louis  MO  63132
+				US
+
+00-0C-C5   (hex)		Nextlink Co., Ltd.
+000CC5     (base 16)		Nextlink Co., Ltd.
+				C 605, Technopark #145 Yatop-dong,
+				Seongnam-si  Bundang-gu, Gyeonggi  463-760
+				KR
+
+00-0C-DE   (hex)		ABB STOTZ-KONTAKT GmbH
+000CDE     (base 16)		ABB STOTZ-KONTAKT GmbH
+				Eppelheimer Straße 82
+				Heidelberg  Baden-Württemberg  69123
+				DE
+
+00-0C-BF   (hex)		Holy Stone Ent. Co., Ltd.
+000CBF     (base 16)		Holy Stone Ent. Co., Ltd.
+				1F, No.62, Sec.2, Huang Shan Rd.,
+				Taipei    114
+				US
+
+00-0C-4D   (hex)		Curtiss-Wright Controls Avionics & Electronics
+000C4D     (base 16)		Curtiss-Wright Controls Avionics & Electronics
+				Landscape House,
+				Churchtown,  Dublin  14
+				IE
+
+00-0C-44   (hex)		Automated Interfaces, Inc.
+000C44     (base 16)		Automated Interfaces, Inc.
+				120 Confederate Lane
+				Greer  South Carolina  29651
+				US
+
+00-0C-3B   (hex)		Orion Electric Co., Ltd.
+000C3B     (base 16)		Orion Electric Co., Ltd.
+				41-1, Iehisa-cho
+				Takefu-shi  Fukui  915-8555
+				JP
+
+00-0C-71   (hex)		Wybron, Inc
+000C71     (base 16)		Wybron, Inc
+				4830 LIst Dr
+				Colorado Springs  Colorado  80919
+				US
+
+00-0C-72   (hex)		Tempearl Industrial Co., Ltd.
+000C72     (base 16)		Tempearl Industrial Co., Ltd.
+				3-1-42 Ohzu
+				Hiroshima-shi  Hiroshima  732-0802
+				JP
+
+00-0C-78   (hex)		In-Tech Electronics Limited
+000C78     (base 16)		In-Tech Electronics Limited
+				Unit A, 13th Floor., Wing Tai Centre
+				Kwun Tong  Kowloon  
+				HK
+
+00-0C-59   (hex)		Indyme Electronics, Inc.
+000C59     (base 16)		Indyme Electronics, Inc.
+				9085 Aero Dr.
+				San Diego  CA  92123
+				US
+
+00-0C-5C   (hex)		GTN Systems B.V.
+000C5C     (base 16)		GTN Systems B.V.
+				Postbus 12236
+				Amsterdam    
+				NL
+
+00-0C-55   (hex)		Microlink Communications Inc.
+000C55     (base 16)		Microlink Communications Inc.
+				8F, 31, Hsintai Road
+				Hsinchu    302
+				TW
+
+00-0C-52   (hex)		Roll Systems Inc.
+000C52     (base 16)		Roll Systems Inc.
+				53 Third Avenue
+				Burlington  MA  01803
+				US
+
+00-0C-74   (hex)		RIVERTEC CORPORATION
+000C74     (base 16)		RIVERTEC CORPORATION
+				882-5 MIYAGASAKI
+				IMABARI  EHIME  799-1537
+				JP
+
+00-0C-67   (hex)		OYO ELECTRIC CO.,LTD
+000C67     (base 16)		OYO ELECTRIC CO.,LTD
+				63-1 Nakamichi Omote
+				Joyo  Kyoto  610-0101
+				JP
+
+00-0C-2E   (hex)		Openet information technology(shenzhen) Co., Ltd.
+000C2E     (base 16)		Openet information technology(shenzhen) Co., Ltd.
+				2/F,A tower,international tech-innovatio
+				shenzhen  guangdong  518057
+				CN
+
+00-0C-2C   (hex)		Enwiser Inc.
+000C2C     (base 16)		Enwiser Inc.
+				4F, Cheongseok B/D
+				Seoul  Seoul  135-010
+				KR
+
+00-0C-28   (hex)		RIFATRON
+000C28     (base 16)		RIFATRON
+				9th FL, SHINTAEYANG BLDG
+				SEOUL  SEOCHO-GU  137-041
+				KR
+
+00-0C-3D   (hex)		Glsystech Co., Ltd.
+000C3D     (base 16)		Glsystech Co., Ltd.
+				Song Bo B/D 3F
+				Seoul    
+				KR
+
+00-0C-2F   (hex)		SeorimTechnology Co.,Ltd.
+000C2F     (base 16)		SeorimTechnology Co.,Ltd.
+				2F DIPLOMATIC CENTER B/D 1376-1 SEOCHO2-
+				SEOUL    137-072
+				US
+
+00-0C-31   (hex)		Cisco Systems, Inc
+000C31     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0C-53   (hex)		Private
+000C53     (base 16)		Private
+
+00-0C-48   (hex)		QoStek Corporation
+000C48     (base 16)		QoStek Corporation
+				7F, 22, Taiyuen Street
+				Chupei  Hsinchu Hsien  302
+				TW
+
+00-0C-63   (hex)		Zenith Electronics Corporation
+000C63     (base 16)		Zenith Electronics Corporation
+				2000 Millbrook Drive
+				Lincolnshire  Illinois  60069
+				US
+
+00-0B-BB   (hex)		Etin Systems Co., Ltd
+000BBB     (base 16)		Etin Systems Co., Ltd
+				12F, IT Venture Tower,
+				Seoul    138-803
+				KR
+
+00-0B-BC   (hex)		En Garde Systems, Inc.
+000BBC     (base 16)		En Garde Systems, Inc.
+				2101 White Cloud St. NE
+				Albuquerque  NM  87112
+				US
+
+00-0B-B1   (hex)		Super Star Technology Co., Ltd.
+000BB1     (base 16)		Super Star Technology Co., Ltd.
+				No. 7 Lane 306,Sec. 2,Tai-Lin Rd.
+				Taipei Hsien    243
+				US
+
+00-0B-BF   (hex)		Cisco Systems, Inc
+000BBF     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-AD   (hex)		PC-PoS Inc.
+000BAD     (base 16)		PC-PoS Inc.
+				309 Commissioners Road West
+				London  Ontario  N6J 1Y4
+				CA
+
+00-0B-A0   (hex)		T&L Information Inc.
+000BA0     (base 16)		T&L Information Inc.
+				898-44 Hokye-Dong, Dongan-Gu
+				Anyang  Kyungki-Do  431-836
+				KR
+
+00-0C-17   (hex)		AJA Video Systems Inc
+000C17     (base 16)		AJA Video Systems Inc
+				180 Litton Drive
+				Grass Valley  CA  95945
+				US
+
+00-0C-11   (hex)		NIPPON DEMPA CO.,LTD.
+000C11     (base 16)		NIPPON DEMPA CO.,LTD.
+				1-4-8
+				kakegawa city  shizuoka pref.  436-0028
+				JP
+
+00-0C-14   (hex)		Diagnostic Instruments, Inc.
+000C14     (base 16)		Diagnostic Instruments, Inc.
+				6540 Burroughs
+				Sterling Heights  MI  48314
+				US
+
+00-0B-B5   (hex)		nStor Technologies, Inc.
+000BB5     (base 16)		nStor Technologies, Inc.
+				100 Technology Park
+				Lake Mary  FL  32746
+				US
+
+00-0B-B9   (hex)		Imsys AB
+000BB9     (base 16)		Imsys AB
+				Johanneslundsvagen 3
+				Upplands Vasby    SE-19461
+				SE
+
+00-0C-21   (hex)		Faculty of Science and Technology, Keio University
+000C21     (base 16)		Faculty of Science and Technology, Keio University
+				3-14-1 Hiyoshi, Kohoku-ku
+				Yokohama  Kanagawa  223-8522
+				JP
+
+00-0C-1B   (hex)		ORACOM Co, Ltd.
+000C1B     (base 16)		ORACOM Co, Ltd.
+				3rd Fl, A-Sung Bldg, 999-3
+				Seoul    135-280
+				KR
+
+00-0B-C9   (hex)		Electroline Equipment
+000BC9     (base 16)		Electroline Equipment
+				8265 boul. St-Michel
+				Montreal  Quebec  H1Z 3E4
+				CA
+
+00-0B-C2   (hex)		Corinex Communication Corp.
+000BC2     (base 16)		Corinex Communication Corp.
+				#308 1168 Hamilton Street
+				Vancouver  B.C.  V6B 2S2
+				US
+
+00-0B-F7   (hex)		NIDEK CO.,LTD
+000BF7     (base 16)		NIDEK CO.,LTD
+				34-14 Maehama
+				Gamagori  Aich  443-0038
+				JP
+
+00-0C-00   (hex)		BEB Industrie-Elektronik AG
+000C00     (base 16)		BEB Industrie-Elektronik AG
+				Progressastrasse 31
+				Oberburg  BE  3414
+				CH
+
+00-0B-F3   (hex)		BAE SYSTEMS
+000BF3     (base 16)		BAE SYSTEMS
+				6500 Tracor Lane
+				Austin  Texas  78725
+				US
+
+00-0B-ED   (hex)		ELM Inc.
+000BED     (base 16)		ELM Inc.
+				2398 Kasedamiyahara
+				Minamisatsuma  Kagoshima  897-1124
+				JP
+
+00-0B-91   (hex)		Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH
+000B91     (base 16)		Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH
+				Tiniusstraße 12-15
+				Berlin    D-13089
+				DE
+
+00-0B-97   (hex)		Matsushita Electric Industrial Co.,Ltd.
+000B97     (base 16)		Matsushita Electric Industrial Co.,Ltd.
+				3-1-1 Yagumo-Naka-Machi
+				Moriguchi City  Osaka  570-8501
+				JP
+
+00-0B-92   (hex)		Ascom Danmark A/S
+000B92     (base 16)		Ascom Danmark A/S
+				Fabriksparken 42
+				Glostrup  Denmark  2600
+				DK
+
+00-0B-9A   (hex)		Shanghai Ulink Telecom Equipment Co. Ltd.
+000B9A     (base 16)		Shanghai Ulink Telecom Equipment Co. Ltd.
+				6 Floor, Building 3
+				Shanghai    200083
+				CN
+
+00-0B-9D   (hex)		TwinMOS Technologies Inc.
+000B9D     (base 16)		TwinMOS Technologies Inc.
+				303 No.3, Tzu Chiang Rd., Hu Kou Xiang,
+				Hsin Chu    303
+				TW
+
+00-0B-96   (hex)		Innotrac Diagnostics Oy
+000B96     (base 16)		Innotrac Diagnostics Oy
+				Kalevantie 25
+				Turku  Åbo  20520
+				FI
+
+00-0B-56   (hex)		Cybernetics
+000B56     (base 16)		Cybernetics
+				111 Cybernetics Way STE 300
+				Yorktown  VA  23693
+				US
+
+00-0B-50   (hex)		Oxygnet
+000B50     (base 16)		Oxygnet
+				402 E. Carrillo St.
+				Santa Barbara  CA  93101
+				US
+
+00-0B-52   (hex)		JOYMAX ELECTRONICS CO. LTD.
+000B52     (base 16)		JOYMAX ELECTRONICS CO. LTD.
+				No.5 Dong-Yuan Road 2, Jhong-Li Industrial Park,
+				Tao-Yuan    32063
+				TW
+
+00-0B-69   (hex)		Franke Finland Oy
+000B69     (base 16)		Franke Finland Oy
+				Vartiokuja 1
+				NAARAJARVI    FIN-76850
+				FI
+
+00-0B-A5   (hex)		Quasar Cipta Mandiri, PT
+000BA5     (base 16)		Quasar Cipta Mandiri, PT
+				Jl. Palasari 9A
+				Bandung  West Java  40262
+				ID
+
+00-0B-49   (hex)		RF-Link System Inc.
+000B49     (base 16)		RF-Link System Inc.
+				No.6, Nan-Ke 5th Rd., Hsin-Shi,
+				Tainan County    744
+				TW
+
+00-0B-46   (hex)		Cisco Systems, Inc
+000B46     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0B-7A   (hex)		L-3 Linkabit
+000B7A     (base 16)		L-3 Linkabit
+				9890 Town Center Drive
+				San Diego  CA  92121
+				US
+
+00-0B-84   (hex)		BODET
+000B84     (base 16)		BODET
+				Route de la Tourlandry
+				TREMENTINES  FRANCE  49340
+				FR
+
+00-0B-77   (hex)		Cogent Systems, Inc.
+000B77     (base 16)		Cogent Systems, Inc.
+				209 Fair Oaks Ave.
+				South Pasadena  CA  91030
+				US
+
+00-0B-66   (hex)		Teralink Communications
+000B66     (base 16)		Teralink Communications
+				Capital Tower 15F,
+				Daejeon    302120
+				KR
+
+00-0B-2C   (hex)		Eiki Industrial Co. Ltd.
+000B2C     (base 16)		Eiki Industrial Co. Ltd.
+				4-12 Manzai-cho, Kita-ku
+				Osaka    530
+				JP
+
+00-0B-26   (hex)		Wetek Corporation
+000B26     (base 16)		Wetek Corporation
+				4F, NO.17, Kuanfu N. Road
+				Hsin Chu Industrial Park    303
+				TW
+
+00-0B-28   (hex)		Quatech Inc.
+000B28     (base 16)		Quatech Inc.
+				662 Wolf Ledges Pkwy.
+				Akron  OH  44311
+				US
+
+00-0B-2A   (hex)		HOWTEL Co., Ltd.
+000B2A     (base 16)		HOWTEL Co., Ltd.
+				J-COM Bd. 4F, 124-4 OJEON-DONG
+				UIWANG-SHI  KYOUNGGI-DO  437-070
+				KR
+
+00-0B-30   (hex)		Beijing Gongye Science & Technology Co.,Ltd
+000B30     (base 16)		Beijing Gongye Science & Technology Co.,Ltd
+				Unit D.17/E,Shenlanhuating mid Road No.6
+				Beijing    100029
+				CN
+
+00-0A-F2   (hex)		NeoAxiom Corp.
+000AF2     (base 16)		NeoAxiom Corp.
+				1520 Montague Expressway
+				San Jose  CA  95131
+				US
+
+00-0A-F5   (hex)		Airgo Networks, Inc.
+000AF5     (base 16)		Airgo Networks, Inc.
+				900 Arastradero Rd
+				Palo Alto  CA  94304
+				US
+
+00-0A-F0   (hex)		SHIN-OH ELECTRONICS CO., LTD. R&D
+000AF0     (base 16)		SHIN-OH ELECTRONICS CO., LTD. R&D
+				#729-5, Bonoh-Dong, Ansan-City, Kyunggi-
+				Ansan-City  Kyunggi-Do  425-180
+				KR
+
+00-0A-F4   (hex)		Cisco Systems, Inc
+000AF4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0A-EE   (hex)		GCD Hard- & Software GmbH
+000AEE     (base 16)		GCD Hard- & Software GmbH
+				Henkestraße 79
+				Erlangen  Bayern  91052
+				DE
+
+00-0A-D8   (hex)		IPCserv Technology Corp.
+000AD8     (base 16)		IPCserv Technology Corp.
+				6f,No.107,Pan-Hsin Rd
+				Pan-Chiao  Taipei  22046
+				TW
+
+00-0A-D7   (hex)		Origin ELECTRIC CO.,LTD.
+000AD7     (base 16)		Origin ELECTRIC CO.,LTD.
+				1-18-1
+				TOSHIMA WARD  TOKYO MET.  171-8555
+				JP
+
+00-0B-38   (hex)		Knürr GmbH
+000B38     (base 16)		Knürr GmbH
+				Mariakirchener Straße 38
+				Arnstorf  Bavaria  94424
+				DE
+
+00-0B-32   (hex)		VORMETRIC, INC.
+000B32     (base 16)		VORMETRIC, INC.
+				2060 CORPORATE CT
+				SAN JOSE  CA  95131
+				US
+
+00-0B-07   (hex)		Voxpath Networks
+000B07     (base 16)		Voxpath Networks
+				7600B Capital of Texas Highway  - North
+				Austin  Texas  78731
+				US
+
+00-0B-04   (hex)		Volktek Corporation
+000B04     (base 16)		Volktek Corporation
+				4F., No.192, Lian-Chang Road, Chang-Ho
+				Taipei    
+				TW
+
+00-0A-F9   (hex)		HiConnect, Inc.
+000AF9     (base 16)		HiConnect, Inc.
+				Rm #906, Haksan Cosmostel, 110
+				Kwangjin-Gu  Seoul  143-802
+				KR
+
+00-0B-1F   (hex)		I CON Computer Co.
+000B1F     (base 16)		I CON Computer Co.
+				3F, No. 142 , Hsin Ming Road
+				Neihu  Taipei  114
+				TW
+
+00-0B-13   (hex)		ZETRON INC
+000B13     (base 16)		ZETRON INC
+				PO Box 97004
+				REDMOND  WA  98073
+				US
+
+00-0B-10   (hex)		11wave Technonlogy Co.,Ltd
+000B10     (base 16)		11wave Technonlogy Co.,Ltd
+				10F,no.285 sec.2 ,Ti-Ding Ave,NaiHu.Taip
+				Taipei    114
+				TW
+
+00-0A-E9   (hex)		AirVast Technology Inc.
+000AE9     (base 16)		AirVast Technology Inc.
+				3F.-5, No.6, Lane 609, Sec. 5, Chongsin Rd.
+				Sanchong City  Taipei  241
+				TW
+
+00-0B-2B   (hex)		HOSTNET CORPORATION
+000B2B     (base 16)		HOSTNET CORPORATION
+				10F-12,No. 12 Lane 609, Sec.5,Chunghsin
+				Sanchung  Taipei Hsien  241
+				TW
+
+00-0B-02   (hex)		Dallmeier electronic
+000B02     (base 16)		Dallmeier electronic
+				Würzburgerstraße 5
+				Regensburg  Bavaria  93059
+				DE
+
+00-0A-CD   (hex)		Sunrich Technology Limited
+000ACD     (base 16)		Sunrich Technology Limited
+				Unit 1301, Eastern Centre, 1065 King's R
+				Quarry Bay    
+				HK
+
+00-0A-CC   (hex)		Winnow Networks, Inc.
+000ACC     (base 16)		Winnow Networks, Inc.
+				701 Emerson Road
+				St. Louis  MO  63141
+				US
+
+00-0A-CF   (hex)		PROVIDEO Multimedia Co. Ltd.
+000ACF     (base 16)		PROVIDEO Multimedia Co. Ltd.
+				5F, NO.8, ALLEY 2, TZU-WEI LANE,
+				HSIN TIEN CITY  TAIPEI HSIEN,  231
+				TW
+
+00-0A-D1   (hex)		MWS
+000AD1     (base 16)		MWS
+				12, quai Papacino
+				NICE    06300
+				FR
+
+00-0A-7D   (hex)		Valo, Inc.
+000A7D     (base 16)		Valo, Inc.
+				1351 Redwood Way
+				Petaluma  CA  94954
+				US
+
+00-0A-7F   (hex)		Teradon Industries, Inc
+000A7F     (base 16)		Teradon Industries, Inc
+				7500 2nd ST NW
+				Albuquerque  NM  87120
+				US
+
+00-0A-81   (hex)		TEIMA Audiotex S.L.
+000A81     (base 16)		TEIMA Audiotex S.L.
+				C/ Tirvia, 6, local B
+				Madrid    28040
+				ES
+
+00-0A-87   (hex)		Integrated Micromachines Inc.
+000A87     (base 16)		Integrated Micromachines Inc.
+				1400 S. Shamrock Ave.
+				Monrovia  CA  91016
+				US
+
+00-0A-77   (hex)		Bluewire Technologies LLC
+000A77     (base 16)		Bluewire Technologies LLC
+				420 N. O St.
+				Tulare  Ca  93274
+				US
+
+00-0A-8C   (hex)		Guardware Systems Ltd.
+000A8C     (base 16)		Guardware Systems Ltd.
+				Ulloi ut 102.
+				Budapest    H-1089
+				HU
+
+00-0A-96   (hex)		MEWTEL TECHNOLOGY INC.
+000A96     (base 16)		MEWTEL TECHNOLOGY INC.
+				E15FL. IT VENTURE TOWER
+				SEOUL    138-803
+				KR
+
+00-0A-82   (hex)		TATSUTA SYSTEM ELECTRONICS CO.,LTD.
+000A82     (base 16)		TATSUTA SYSTEM ELECTRONICS CO.,LTD.
+				IWATATYOU2-3-1
+				HIGASHIOOSAKA-SHI  OOSAKA-FU  578-8585
+				JP
+
+00-0A-D3   (hex)		INITECH Co., Ltd
+000AD3     (base 16)		INITECH Co., Ltd
+				3F, INITECH Bldg, 559-5,
+				Seoul  Songpa  138-816
+				KR
+
+00-0A-C8   (hex)		ZPSYS CO.,LTD. (Planning&Management)
+000AC8     (base 16)		ZPSYS CO.,LTD. (Planning&Management)
+				106 Ace Techno Tower1
+				Seoul    152-050
+				KR
+
+00-0A-C6   (hex)		Overture Networks.
+000AC6     (base 16)		Overture Networks.
+				637 Davis Drive
+				Morrisville  NC  27560
+				US
+
+00-0A-AB   (hex)		Toyota Technical Development Corporation
+000AAB     (base 16)		Toyota Technical Development Corporation
+				1-9, Imae, Hanamoto-cho
+				Toyota  Aichi  470-0334
+				JP
+
+00-0A-B4   (hex)		ETIC Telecommunications
+000AB4     (base 16)		ETIC Telecommunications
+				13, chemin du vieux-chene ZIRST
+				MEYLAN  Isere  38240
+				FR
+
+00-0A-7A   (hex)		Kyoritsu Electric Co., Ltd.
+000A7A     (base 16)		Kyoritsu Electric Co., Ltd.
+				2-3-17
+				Komae-shi  Tokyo  201-0005
+				JP
+
+00-0A-9C   (hex)		Server Technology, Inc.
+000A9C     (base 16)		Server Technology, Inc.
+				1040 Sandhill Drive
+				Reno  Nevada  89521
+				US
+
+00-0A-75   (hex)		Caterpillar, Inc
+000A75     (base 16)		Caterpillar, Inc
+				Mailstop Location AC6130
+				Mossville  IL  61552-0610
+				US
+
+00-0A-12   (hex)		Azylex Technology, Inc
+000A12     (base 16)		Azylex Technology, Inc
+				7-2Fl., No. 738 Chung Cheng Road,
+				Chung Ho City  Taipei  235
+				TW
+
+00-0A-13   (hex)		Honeywell Video Systems
+000A13     (base 16)		Honeywell Video Systems
+				6554 176 Street
+				Surrey  BC  V3S 4G5
+				CA
+
+00-0A-09   (hex)		TaraCom Integrated Products, Inc.
+000A09     (base 16)		TaraCom Integrated Products, Inc.
+				830 Stewart Dr.
+				Sunnyvale  CA  94085
+				US
+
+00-0A-41   (hex)		Cisco Systems, Inc
+000A41     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0A-36   (hex)		Synelec Telecom Multimedia
+000A36     (base 16)		Synelec Telecom Multimedia
+				Zone Industrielle
+				Saint Sernin sur Rance  Aveyron  F-12380
+				FR
+
+00-0A-48   (hex)		Albatron Technology
+000A48     (base 16)		Albatron Technology
+				6F, No 716, Chung Cheng,
+				Chung-Ho City  Taipei Hsien  
+				TW
+
+00-0A-3E   (hex)		EADS Telecom
+000A3E     (base 16)		EADS Telecom
+				Landshuter Strasse 26
+				Munich  Bavaria  85716
+				DE
+
+00-0A-59   (hex)		HW server
+000A59     (base 16)		HW server
+				Italska 15
+				Prague 2  Czech Republic  120 00
+				KM
+
+00-0A-54   (hex)		Laguna Hills, Inc.
+000A54     (base 16)		Laguna Hills, Inc.
+				3-5-2
+				Chiyoda-ku  Tokyo  102-0083
+				JP
+
+00-0A-4F   (hex)		Brain Boxes Limited
+000A4F     (base 16)		Brain Boxes Limited
+				Unit 3c, Wavertree Boulevard South
+				Liverpool  Merseyside  L7 9PF
+				GB
+
+00-0A-52   (hex)		AsiaRF Ltd.
+000A52     (base 16)		AsiaRF Ltd.
+				3F, No.176, Yongzhen Road
+				New Taipei City  Taipei  234
+				TW
+
+00-0A-02   (hex)		ANNSO CO., LTD.
+000A02     (base 16)		ANNSO CO., LTD.
+				5F, No. 100, Min-Chuan Road, Shing-Tien
+				Shing-Tien City Taipei Hsien  Taiwan  221
+				TW
+
+00-0A-65   (hex)		GentechMedia.co.,ltd.
+000A65     (base 16)		GentechMedia.co.,ltd.
+				solvit bldg 2f, 402-8, yangjae-don,
+				seocho-gu,  seoul  137-899
+				KR
+
+00-0A-22   (hex)		Amperion Inc
+000A22     (base 16)		Amperion Inc
+				250 Apollo Drive
+				Chelmsford  MA  01824
+				US
+
+00-0A-1C   (hex)		Bridge Information Co., Ltd.
+000A1C     (base 16)		Bridge Information Co., Ltd.
+				No.3, Lane 106, Wu-Kung 2 Rd.,
+				Taipei    248
+				TW
+
+00-0A-32   (hex)		Xsido Corporation
+000A32     (base 16)		Xsido Corporation
+				3F,2-8-13,Shiba-Daimon,
+				Tokyo    105-0012
+				JP
+
+00-0A-2B   (hex)		Etherstuff
+000A2B     (base 16)		Etherstuff
+				208 W. Mimosa Circle
+				San Marcos  TX  78666
+				US
+
+00-0A-42   (hex)		Cisco Systems, Inc
+000A42     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-0A-38   (hex)		Apani Networks
+000A38     (base 16)		Apani Networks
+				1800 E. Imperial Hwy
+				Brea  CA  92821
+				US
+
+00-09-A8   (hex)		Eastmode Pte Ltd
+0009A8     (base 16)		Eastmode Pte Ltd
+				30 Loyang Way #07-06
+				    508769
+				SG
+
+00-09-AA   (hex)		Data Comm for Business, Inc.
+0009AA     (base 16)		Data Comm for Business, Inc.
+				2949 County Road 1000 East
+				Dewey  IL  61853
+				US
+
+00-09-A4   (hex)		HARTEC Corporation
+0009A4     (base 16)		HARTEC Corporation
+				KOUHOKUKU SHIN-YOKOHAMA
+				YOKOHAMA-SHI  KANAGAWA-KEN  222-0033
+				JP
+
+00-09-A6   (hex)		Ignis Optics, Inc.
+0009A6     (base 16)		Ignis Optics, Inc.
+				482 W. San Carlos
+				San Jose  California  95110
+				US
+
+00-09-A7   (hex)		Bang & Olufsen A/S
+0009A7     (base 16)		Bang & Olufsen A/S
+				Peter Bangs Vej 15
+				Struer    7600
+				DK
+
+00-09-C8   (hex)		SINAGAWA TSUSHIN KEISOU SERVICE
+0009C8     (base 16)		SINAGAWA TSUSHIN KEISOU SERVICE
+				13-5 Fuke , Sumiyoshi , Onahama
+				Iwaki City  Fukushima Prefecture  971-8124
+				JP
+
+00-09-B7   (hex)		Cisco Systems, Inc
+0009B7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-B2   (hex)		L&F Inc.
+0009B2     (base 16)		L&F Inc.
+				4-2-9
+				ITABASHI-KU  Tokyo  175-0083
+				JP
+
+00-09-F3   (hex)		WELL Communication Corp.
+0009F3     (base 16)		WELL Communication Corp.
+				11F, No.778, Chung Cheng Rd., Chung Ho C
+				Chung Ho    235
+				TW
+
+00-09-EF   (hex)		Vocera Communications
+0009EF     (base 16)		Vocera Communications
+				525 Race St.
+				San Jose  California  95126
+				US
+
+00-09-C4   (hex)		Medicore Co., Ltd
+0009C4     (base 16)		Medicore Co., Ltd
+				72-3 5th Fl., Luna Bldg, Chungdam-dong
+				Seoul    135-080
+				KR
+
+00-09-D9   (hex)		Neoscale Systems, Inc
+0009D9     (base 16)		Neoscale Systems, Inc
+				1500 Mc Candless Drive
+				Milpitas  CA  95035
+				US
+
+00-09-D0   (hex)		Solacom Technologies Inc.
+0009D0     (base 16)		Solacom Technologies Inc.
+				80 Jean-Proulx
+				Gatineau  Quebec  J8Z 1W1
+				CA
+
+00-09-CC   (hex)		Moog GmbH
+0009CC     (base 16)		Moog GmbH
+				Hanns-Klemm-Str. 28
+				Boeblingen    D-71034
+				DE
+
+00-0A-00   (hex)		Mediatek Corp.
+000A00     (base 16)		Mediatek Corp.
+				8F, No 69-5, Sec.2, Chung Cheng East Rd.
+				Taipei    251
+				TW
+
+00-09-F0   (hex)		Shimizu Technology Inc.
+0009F0     (base 16)		Shimizu Technology Inc.
+				15-6, No.107, Chung Shan Rd., Sec.1
+				Hsin Chuan,  Taipei  242
+				US
+
+00-09-E4   (hex)		K Tech Infosystem Inc.
+0009E4     (base 16)		K Tech Infosystem Inc.
+				B-405, Bundang Techno-Park 148, Yatap-do
+				Seongnam  Kyonggi-Do  464-070
+				KR
+
+00-09-72   (hex)		Securebase,Inc
+000972     (base 16)		Securebase,Inc
+				2nd Fl,Seungseung-Bldg,Dokok 2-Dong,Kang
+				Seoul    135-854
+				KR
+
+00-09-78   (hex)		AIJI System Co., Ltd.
+000978     (base 16)		AIJI System Co., Ltd.
+				#208 Samho-Park-Tower Bldg. 1122-10, Ing
+				Suwon  Gyeonggi-do  442-835
+				KR
+
+00-09-73   (hex)		Lenten Technology Co., Ltd.
+000973     (base 16)		Lenten Technology Co., Ltd.
+				16F, No.51, Sec.2, Gungyi Road,
+				Taichung City    408
+				TW
+
+00-09-75   (hex)		fSONA Communications Corporation
+000975     (base 16)		fSONA Communications Corporation
+				#140-11120 Horseshoe Way
+				Richmond  BC  V7A 5H7
+				CA
+
+00-09-77   (hex)		Brunner Elektronik AG
+000977     (base 16)		Brunner Elektronik AG
+				Müllerwis 1
+				Hittnau  Zurich  8335
+				CH
+
+00-09-69   (hex)		Meret Optical Communications
+000969     (base 16)		Meret Optical Communications
+				10070 Mesa Rim Road
+				San Diego  California  92121
+				US
+
+00-09-42   (hex)		Wireless Technologies, Inc
+000942     (base 16)		Wireless Technologies, Inc
+				Ohmori Mitsubishi Bldg., 7F, Sannoh 2-chome
+				Tokyo    143-0023
+				JP
+
+00-09-45   (hex)		Palmmicro Communications Inc
+000945     (base 16)		Palmmicro Communications Inc
+				630 Alder Dr
+				Milpitas  CA  95035
+				US
+
+00-09-3E   (hex)		C&I Technologies
+00093E     (base 16)		C&I Technologies
+				#303 Kwanbo Plaza B/D, 1467-2
+				Anyang-Shi  Kyunggi-Do  431-808
+				KR
+
+00-09-40   (hex)		AGFEO GmbH & Co. KG
+000940     (base 16)		AGFEO GmbH & Co. KG
+				Postfach 140107
+				Bielefeld  Rhine Westfalia  33621
+				DE
+
+00-09-7F   (hex)		Vsecure 2000 LTD.
+00097F     (base 16)		Vsecure 2000 LTD.
+				11 Moshe Levi St.
+				Rishon LeZion    75658
+				IL
+
+00-09-80   (hex)		Power Zenith Inc.
+000980     (base 16)		Power Zenith Inc.
+				Tsujido Nishikaigan 1-10-7
+				Fujisawa  Kanagawa  251-0046
+				JP
+
+00-09-A0   (hex)		Microtechno Corporation
+0009A0     (base 16)		Microtechno Corporation
+				2-33-36 Shimoodanaka
+				Kawasaki  Kanagawa  211-0041
+				JP
+
+00-09-9B   (hex)		Western Telematic Inc.
+00099B     (base 16)		Western Telematic Inc.
+				5 Sterling
+				Irvine  CA  92618
+				US
+
+00-09-90   (hex)		ACKSYS Communications & systems
+000990     (base 16)		ACKSYS Communications & systems
+				ZA du Val Joyeux
+				VILLEPREUX    F-78450
+				FR
+
+00-09-53   (hex)		Linkage System Integration Co.Ltd.
+000953     (base 16)		Linkage System Integration Co.Ltd.
+				40 Gongjianfang
+				Nanjing  Jiangsu  210006
+				CN
+
+00-09-4C   (hex)		Communication Weaver Co.,Ltd.
+00094C     (base 16)		Communication Weaver Co.,Ltd.
+				1~3 COWEAVER B/D 446-19,
+				SEOUL    121-841
+				KR
+
+00-09-6E   (hex)		GIANT ELECTRONICS LTD.
+00096E     (base 16)		GIANT ELECTRONICS LTD.
+				7/F., ELITE INDUSTRIAL BUILDING,
+				KWUN TONG  KOWLOON  
+				HK
+
+00-09-6C   (hex)		Imedia Semiconductor Corp.
+00096C     (base 16)		Imedia Semiconductor Corp.
+				4988 Great America Pkwy.
+				Santa Clara  CA  95054
+				US
+
+00-09-5F   (hex)		Telebyte, Inc.
+00095F     (base 16)		Telebyte, Inc.
+				270 Pulaski Road
+				Greenlawn  NY  11740-1616
+				US
+
+00-09-8A   (hex)		EqualLogic Inc
+00098A     (base 16)		EqualLogic Inc
+				9 Townsend West
+				Nashua  NH  03062
+				US
+
+00-08-F9   (hex)		Artesyn Embedded Technologies
+0008F9     (base 16)		Artesyn Embedded Technologies
+				2900 S. Diablo Way Suite 190
+				Tempe  AZ  85282
+				US
+
+00-08-F4   (hex)		Bluetake Technology Co., Ltd.
+0008F4     (base 16)		Bluetake Technology Co., Ltd.
+				6F, No. 33, Lane 155, Sec. 3, Pei Shen R
+				Taipei  Taiwan  222
+				TW
+
+00-08-F7   (hex)		Hitachi Ltd, Semiconductor & Integrated Circuits Gr
+0008F7     (base 16)		Hitachi Ltd, Semiconductor & Integrated Circuits Gr
+				20-1 Josuihon-chou 5chome
+				Kodaira-shi  Tokyo  187-8588
+				JP
+
+00-09-20   (hex)		EpoX COMPUTER CO.,LTD.
+000920     (base 16)		EpoX COMPUTER CO.,LTD.
+				10th Floor, No.346,Chung San Rd.,Sec.2,
+				Chung Ho City,Taipei Hsien    235
+				TW
+
+00-09-22   (hex)		TST Biometrics GmbH
+000922     (base 16)		TST Biometrics GmbH
+				Moehlstraße 39
+				81675  Munich  
+				DE
+
+00-09-16   (hex)		Listman Home Technologies, Inc.
+000916     (base 16)		Listman Home Technologies, Inc.
+				1100 Northmeadow Parkway
+				Roswell  Georgia  30076
+				US
+
+00-09-11   (hex)		Cisco Systems, Inc
+000911     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-12   (hex)		Cisco Systems, Inc
+000912     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-08   (hex)		VTech Technology Corp.
+000908     (base 16)		VTech Technology Corp.
+				2F-2, No. 124, Chung Cheng Rd., Shihlin
+				Taipei    11141
+				TW
+
+00-09-0B   (hex)		MTL  Instruments PLC
+00090B     (base 16)		MTL  Instruments PLC
+				Power Court
+				Luton  Bedfordshire  LU1 3JJ
+				GB
+
+00-09-3B   (hex)		HYUNDAI NETWORKS INC.
+00093B     (base 16)		HYUNDAI NETWORKS INC.
+				SAN 136-1  AMI-RI  BUBAL_EUP
+				ICHON  KYUNGKI-DO  467-701
+				KR
+
+00-09-34   (hex)		Dream-Multimedia-Tv GmbH
+000934     (base 16)		Dream-Multimedia-Tv GmbH
+				Brückstraße 29
+				Menden  Sauerland  58706
+				DE
+
+00-09-31   (hex)		Future Internet, Inc.
+000931     (base 16)		Future Internet, Inc.
+				11'th Floor Samhomoolsan Bldg, B/Bldg, 2
+				Seoul  Kyung-Ki  137-130
+				KP
+
+00-08-F5   (hex)		YESTECHNOLOGY Co.,Ltd.
+0008F5     (base 16)		YESTECHNOLOGY Co.,Ltd.
+				4th FL Kyung-Am B/D 157-27 Samsung-Dong,
+				  Seoul  135-090
+				KR
+
+00-08-EC   (hex)		Optical Zonu Corporation
+0008EC     (base 16)		Optical Zonu Corporation
+				15028 Delano Street
+				Van Nuys  CA  91411-2016
+				US
+
+00-08-E6   (hex)		Littlefeet
+0008E6     (base 16)		Littlefeet
+				13000 Gregg Street
+				Poway  California  92064
+				US
+
+00-09-30   (hex)		AeroConcierge Inc.
+000930     (base 16)		AeroConcierge Inc.
+				10256 Yonge St.
+				Richmond Hill  Ont.  L4C 3B7
+				CA
+
+00-09-1E   (hex)		Firstech Technology Corp.
+00091E     (base 16)		Firstech Technology Corp.
+				8fl.,No.267,section 4,Hsin-Yi Rd. ,Da-An
+				Taipei    106
+				TW
+
+00-08-E2   (hex)		Cisco Systems, Inc
+0008E2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-09-05   (hex)		iTEC Technologies Ltd.
+000905     (base 16)		iTEC Technologies Ltd.
+				160-1, Karak-Dong, Songpa-Gu
+				Seoul    138-809
+				KR
+
+00-08-A5   (hex)		Peninsula Systems Inc.
+0008A5     (base 16)		Peninsula Systems Inc.
+				6902 Verde Ridge Rd.
+				Rancho Palos Verdes  CA  90275
+				US
+
+00-08-A2   (hex)		ADI Engineering, Inc.
+0008A2     (base 16)		ADI Engineering, Inc.
+				1769A Worth Park
+				Charlottesville  VA  22911
+				US
+
+00-08-98   (hex)		Gigabit Optics Corporation
+000898     (base 16)		Gigabit Optics Corporation
+				1156 Aster Ave.
+				Sunnyvale  CA  94086-6810
+				US
+
+00-08-9B   (hex)		ICP Electronics Inc.
+00089B     (base 16)		ICP Electronics Inc.
+				4F, No. 22, Chung-Hsing Rd. Shi-Chi City
+				Taipei    221
+				TW
+
+00-08-9C   (hex)		Elecs Industry Co., Ltd.
+00089C     (base 16)		Elecs Industry Co., Ltd.
+				1-22-23,Shinsaku,Takatsu-Ku
+				Kawasaki  Kanagawa  213-0014
+				JP
+
+00-08-9D   (hex)		UHD-Elektronik
+00089D     (base 16)		UHD-Elektronik
+				Zuercherstrasse 12
+				Baden  AG  5400
+				CH
+
+00-08-CF   (hex)		Nippon Koei Power Systems Co., Ltd.
+0008CF     (base 16)		Nippon Koei Power Systems Co., Ltd.
+				2940 Shinyoshida-cho
+				Kohoku-ku  Yokohama  223-8506
+				JP
+
+00-08-CB   (hex)		Zeta Broadband Inc.
+0008CB     (base 16)		Zeta Broadband Inc.
+				660 Vista Way, Suite B
+				Milpitas  CA  95035
+				US
+
+00-08-D3   (hex)		Hercules Technologies S.A.S.
+0008D3     (base 16)		Hercules Technologies S.A.S.
+				6,place des colombes
+				Rennes  Bretagne  35000
+				FR
+
+00-08-D0   (hex)		Musashi Engineering Co., LTD.
+0008D0     (base 16)		Musashi Engineering Co., LTD.
+				3-11-7, Nishi-shimbashi
+				Minato-ku  Tokyo  105-0003
+				JP
+
+00-08-BA   (hex)		Erskine Systems Ltd
+0008BA     (base 16)		Erskine Systems Ltd
+				Salter Road
+				Scarborough  North Yorkshire  YO11 3DU
+				GB
+
+00-08-B5   (hex)		TAI GUEN ENTERPRISE CO., LTD
+0008B5     (base 16)		TAI GUEN ENTERPRISE CO., LTD
+				N0.400, 10F-7 HUANPEI RD.,
+				CHUNG LI    320-61
+				TW
+
+00-08-B7   (hex)		HIT Incorporated
+0008B7     (base 16)		HIT Incorporated
+				4F, 8, Lane 235, Pao-Chiao Road,
+				Shin Tien  Taipei  231
+				TW
+
+00-08-A9   (hex)		SangSang Technology, Inc.
+0008A9     (base 16)		SangSang Technology, Inc.
+				64-8, Nogok-ri, Docheok-myun,
+				Gwangju  Kyonggi-do  464-882
+				KR
+
+00-08-C8   (hex)		Soneticom, Inc.
+0008C8     (base 16)		Soneticom, Inc.
+				4325 Woodland Park Drive, Suite 102
+				West Melbourne  Florida  32904
+				US
+
+00-08-C4   (hex)		Hikari Co.,Ltd.
+0008C4     (base 16)		Hikari Co.,Ltd.
+				418-4 Minaminoda Chigenobu-cho
+				Onsen-gun  Ehime  791-0297
+				JP
+
+00-08-8F   (hex)		ADVANCED DIGITAL TECHNOLOGY
+00088F     (base 16)		ADVANCED DIGITAL TECHNOLOGY
+				ADT BLDG.,3-3, YANGJAE-DONG,
+				SEOUL    
+				KR
+
+00-08-8B   (hex)		Tropic Networks Inc.
+00088B     (base 16)		Tropic Networks Inc.
+				135 Micheal Cowpland Drive
+				Ottawa  Ontario  K2M2E9
+				CA
+
+00-08-6B   (hex)		MIPSYS
+00086B     (base 16)		MIPSYS
+				19C, Avenue des Indes
+				LES ULIS Cedex    FR-91969
+				FR
+
+00-08-7F   (hex)		SPAUN electronic GmbH & Co. KG
+00087F     (base 16)		SPAUN electronic GmbH & Co. KG
+				Byk-Gulden - Str. 22
+				    
+				DE
+
+00-08-86   (hex)		Hansung Teliann, Inc.
+000886     (base 16)		Hansung Teliann, Inc.
+				195-1, Neungpyung-ri, Opo-eub
+				    
+				KR
+
+00-08-58   (hex)		Novatechnology Inc.
+000858     (base 16)		Novatechnology Inc.
+				Nova Bldg. 4F 641 03
+				Seoul    135-080
+				KR
+
+00-08-50   (hex)		Arizona Instrument Corp.
+000850     (base 16)		Arizona Instrument Corp.
+				1912 W. 4th Street
+				Tempe  AZ  85281
+				US
+
+00-08-5B   (hex)		Hanbit Electronics Co., Ltd.
+00085B     (base 16)		Hanbit Electronics Co., Ltd.
+				414-5, Woncheon-Dong, Paldal-Gu
+				    
+				KR
+
+00-08-2B   (hex)		Wooksung Electronics, Inc.
+00082B     (base 16)		Wooksung Electronics, Inc.
+				Jaho-Bldg. 6F, Tanbang-Dong,
+				    
+				KR
+
+00-08-2E   (hex)		Multitone Electronics PLC
+00082E     (base 16)		Multitone Electronics PLC
+				Multitone House, Beggarwood Lane
+				    
+				GB
+
+00-07-ED   (hex)		Altera Corporation
+0007ED     (base 16)		Altera Corporation
+				101 Innovation Drive
+				San Jose  CA  95134
+				US
+
+00-07-F1   (hex)		TeraBurst Networks Inc.
+0007F1     (base 16)		TeraBurst Networks Inc.
+				985 Stewart Drive
+				Sunnyvale  CA  94086
+				US
+
+00-07-F2   (hex)		IOA Corporation
+0007F2     (base 16)		IOA Corporation
+				350 Potrero Ave.
+				Sunnyvale  CA  94085
+				US
+
+00-07-EA   (hex)		Massana, Inc.
+0007EA     (base 16)		Massana, Inc.
+				2901 Tasman Drive
+				Santa Clara  CA  95054
+				US
+
+00-07-F0   (hex)		LogiSync LLC
+0007F0     (base 16)		LogiSync LLC
+				1313 Lear Industrial Parkway
+				Avon  OH  44011
+				US
+
+00-07-E7   (hex)		FreeWave Technologies
+0007E7     (base 16)		FreeWave Technologies
+				1880 S. Flaitron Ct.
+				Boulder  CO  80301
+				US
+
+00-07-D6   (hex)		Commil Ltd.
+0007D6     (base 16)		Commil Ltd.
+				P.O. Box 10050
+				    
+				IL
+
+00-07-D7   (hex)		Caporis Networks AG
+0007D7     (base 16)		Caporis Networks AG
+				Süggelstraße 31
+				    
+				DE
+
+00-07-D4   (hex)		Zhejiang Yutong Network Communication Co Ltd.
+0007D4     (base 16)		Zhejiang Yutong Network Communication Co Ltd.
+				805 HuaXing Technical Building
+				Zhejiang    
+				CN
+
+00-07-CE   (hex)		Cabletime Limited
+0007CE     (base 16)		Cabletime Limited
+				64 Greenham Road
+				Newbury  Berkshire  RG14 7HX
+				GB
+
+00-07-D3   (hex)		SPGPrints B.V.
+0007D3     (base 16)		SPGPrints B.V.
+				Raamstraat 1-3, 5831 AT Boxmeer
+				Boxmeer    
+				NL
+
+00-08-13   (hex)		Diskbank, Inc.
+000813     (base 16)		Diskbank, Inc.
+				3F Focus Building, 725-25
+				Seoul    135-080
+				KR
+
+00-08-0F   (hex)		Proximion Fiber Optics AB
+00080F     (base 16)		Proximion Fiber Optics AB
+				Isafjordsgatan 9
+				    
+				SE
+
+00-08-12   (hex)		GM-2 Corporation
+000812     (base 16)		GM-2 Corporation
+				Shiba-Matushira-Bldg.
+				Tokyo  Minato-ku  105-0014
+				JP
+
+00-08-0B   (hex)		Birka BPA Informationssystem AB
+00080B     (base 16)		Birka BPA Informationssystem AB
+				Box 20100
+				    
+				SE
+
+00-08-0A   (hex)		Espera-Werke GmbH
+00080A     (base 16)		Espera-Werke GmbH
+				Moltkestrasse 17- 33
+				    
+				DE
+
+00-07-E3   (hex)		Navcom Technology, Inc.
+0007E3     (base 16)		Navcom Technology, Inc.
+				123 West Torrance Blvd.,
+				Redondo Beach  CA  90277
+				US
+
+00-07-E1   (hex)		WIS Communications Co. Ltd.
+0007E1     (base 16)		WIS Communications Co. Ltd.
+				4/F Building 533
+				Shenzhen Guangdong Providence    
+				CN
+
+00-07-E0   (hex)		Palm Inc.
+0007E0     (base 16)		Palm Inc.
+				950 West Maude Ave
+				Sunnyvale  CA  94085-2801
+				US
+
+00-07-FA   (hex)		ITT Co., Ltd.
+0007FA     (base 16)		ITT Co., Ltd.
+				1-14-7, Mukohjyuku,
+				    
+				JP
+
+00-07-F6   (hex)		Qqest Software Systems
+0007F6     (base 16)		Qqest Software Systems
+				860 East 4500 South #200
+				Murray  UT  84107
+				US
+
+00-07-FB   (hex)		Giga Stream UMTS Technologies GmbH
+0007FB     (base 16)		Giga Stream UMTS Technologies GmbH
+				Konrad-Zuse-Strabe 7
+				    
+				DE
+
+00-08-5D   (hex)		Mitel Corporation
+00085D     (base 16)		Mitel Corporation
+				350 Legget Drive
+				-    K2K 2W7
+				CA
+
+00-08-55   (hex)		NASA-Goddard Space Flight Center
+000855     (base 16)		NASA-Goddard Space Flight Center
+				Code 561
+				Greenbelt  MD  20771
+				US
+
+00-08-5A   (hex)		IntiGate Inc.
+00085A     (base 16)		IntiGate Inc.
+				309E IT Venture Tower
+				Seoul    138-803
+				KR
+
+00-08-17   (hex)		EmergeCore Networks LLC
+000817     (base 16)		EmergeCore Networks LLC
+				10542 S. Jordan Gateway
+				South Jordan  UT  84095
+				US
+
+00-08-15   (hex)		CATS Co., Ltd.
+000815     (base 16)		CATS Co., Ltd.
+				751-2 Kachida-cho,
+				    224-0034
+				JP
+
+00-08-2A   (hex)		Powerwallz Network Security
+00082A     (base 16)		Powerwallz Network Security
+				120-13160 Vanier Place,
+				    V6V 2J2
+				CA
+
+00-07-AC   (hex)		Eolring
+0007AC     (base 16)		Eolring
+				10 Rue Alfred Kastler
+				    
+				FR
+
+00-07-AA   (hex)		Quantum Data Inc.
+0007AA     (base 16)		Quantum Data Inc.
+				2111 Big Timber Rd.
+				Elgin  IL  60123-1100
+				US
+
+00-07-A4   (hex)		GN Netcom Ltd.
+0007A4     (base 16)		GN Netcom Ltd.
+				12-13 Sedling Road, Wear Est., District
+				  England  NE38 9BZ
+				GB
+
+00-07-9D   (hex)		Musashi Co., Ltd.
+00079D     (base 16)		Musashi Co., Ltd.
+				3-21-1, Shimo-ochiai,
+				Tokyo    161-0033
+				JP
+
+00-07-9F   (hex)		Action Digital Inc.
+00079F     (base 16)		Action Digital Inc.
+				10650 Main St.
+				Fairfax  VA  22030
+				US
+
+00-04-7C   (hex)		Skidata AG
+00047C     (base 16)		Skidata AG
+				T-697553 Untersbergstr. 40
+				    
+				AT
+
+00-07-BE   (hex)		DataLogic SpA
+0007BE     (base 16)		DataLogic SpA
+				Via Candini, 2
+				Bologna    
+				IT
+
+00-07-AF   (hex)		Red Lion Controls, LP
+0007AF     (base 16)		Red Lion Controls, LP
+				20 Willow Springs Circle
+				York  NY  17402
+				US
+
+00-07-67   (hex)		Yuxing Electronics Company Limited
+000767     (base 16)		Yuxing Electronics Company Limited
+				Unit 1808, 18/F Tower 3,
+				Kowloon Bay,  Kowloon  
+				HK
+
+00-07-5B   (hex)		Gibson Guitars
+00075B     (base 16)		Gibson Guitars
+				309 Park Plus Blvd.
+				Nashville  TN  37217
+				US
+
+00-07-62   (hex)		Group Sense Limited
+000762     (base 16)		Group Sense Limited
+				27/F, Wu Chung House,
+				Wanchai    
+				HK
+
+00-07-84   (hex)		Cisco Systems, Inc
+000784     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-07-76   (hex)		Federal APD
+000776     (base 16)		Federal APD
+				42775 Nine Mile Rd.
+				Novi  MI  48375
+				US
+
+00-07-7A   (hex)		Infoware System Co., Ltd.
+00077A     (base 16)		Infoware System Co., Ltd.
+				Mizorogi Daiichi Bldg 4 F
+				Tokyo    
+				JP
+
+00-07-90   (hex)		Tri-M Technologies (s) Limited
+000790     (base 16)		Tri-M Technologies (s) Limited
+				Blk 25, Kallang Avenue #07-01/04
+				    339416
+				SG
+
+00-07-8D   (hex)		NetEngines Ltd.
+00078D     (base 16)		NetEngines Ltd.
+				146 Walnut Tree Close
+				    GUI 4UB
+				GB
+
+00-07-8A   (hex)		Mentor Data System Inc.
+00078A     (base 16)		Mentor Data System Inc.
+				No. 24-1, Industry East 4 Rd.,
+				Hsin-Chu,    
+				TW
+
+00-07-92   (hex)		Sütron Electronic GmbH
+000792     (base 16)		Sütron Electronic GmbH
+				Kurze Straße 29
+				    
+				DE
+
+00-07-B2   (hex)		Transaccess S.A.
+0007B2     (base 16)		Transaccess S.A.
+				R. Galeno De Castro, 1445
+				São Paulo SP    
+				BR
+
+00-07-AD   (hex)		Pentacon GmbH Foto-und Feinwerktechnik
+0007AD     (base 16)		Pentacon GmbH Foto-und Feinwerktechnik
+				Enderstrabe 94
+				    
+				DE
+
+00-07-D0   (hex)		Automat Engenharia de Automação Ltda.
+0007D0     (base 16)		Automat Engenharia de Automação Ltda.
+				Rua Santo Antonio, 917 - Reboucas
+				    80230-120
+				BR
+
+00-07-6A   (hex)		NEXTEYE Co., Ltd.
+00076A     (base 16)		NEXTEYE Co., Ltd.
+				Shinsegi Plaza 4F, 900-9,
+				Kyunggi    431-070
+				KR
+
+00-06-E6   (hex)		DongYang Telecom Co., Ltd.
+0006E6     (base 16)		DongYang Telecom Co., Ltd.
+				642-7 Deung Chon-Dong, KangSeo-Gu
+				  Seoul  157-841
+				KR
+
+00-06-DC   (hex)		Syabas Technology (Amquest)
+0006DC     (base 16)		Syabas Technology (Amquest)
+				4727 Paseo Padre Parkway
+				Fremont  CA  94555
+				US
+
+00-07-0C   (hex)		SVA-Intrusion.com Co. Ltd.
+00070C     (base 16)		SVA-Intrusion.com Co. Ltd.
+				The 4th Floor, No. 28 Building
+				Shanghai    20233
+				CN
+
+00-07-0F   (hex)		Fujant, Inc.
+00070F     (base 16)		Fujant, Inc.
+				6305 Carpinteria Avenue
+				Carpinteria  CA  93013-2901
+				US
+
+00-07-14   (hex)		Brightcom
+000714     (base 16)		Brightcom
+				6 Hanechoshet St.,
+				    
+				IL
+
+00-06-F3   (hex)		AcceLight Networks
+0006F3     (base 16)		AcceLight Networks
+				70 Abele Road, Building 1200
+				Pittsburgh  PA  15017
+				US
+
+00-06-D2   (hex)		Tundra Semiconductor Corp.
+0006D2     (base 16)		Tundra Semiconductor Corp.
+				603 March Road
+				    K2K-2M5
+				CA
+
+00-06-D8   (hex)		Maple Optical Systems
+0006D8     (base 16)		Maple Optical Systems
+				3200 North First St.
+				San Jose  CA  95134
+				US
+
+00-06-CF   (hex)		Thales Avionics In-Flight Systems, LLC
+0006CF     (base 16)		Thales Avionics In-Flight Systems, LLC
+				17481 Red Hill Avenue
+				Irvine  CA  92614-5630
+				US
+
+00-06-FE   (hex)		Ambrado, Inc
+0006FE     (base 16)		Ambrado, Inc
+				11301 W. President George Bush Fwy.
+				Richardson  TX  75080
+				US
+
+00-06-E7   (hex)		Bit Blitz Communications Inc.
+0006E7     (base 16)		Bit Blitz Communications Inc.
+				830 Hillview Ct., #290
+				Milpitas  CA  95035
+				US
+
+00-06-ED   (hex)		Inara Networks
+0006ED     (base 16)		Inara Networks
+				3031 Tisch Way,
+				San Jose  CA  95128
+				US
+
+00-06-DB   (hex)		ICHIPS Co., Ltd.
+0006DB     (base 16)		ICHIPS Co., Ltd.
+				3F, Samjeon Bldg., 236-3
+				Seoul-City    135-01
+				KR
+
+00-07-27   (hex)		Zi Corporation (HK) Ltd.
+000727     (base 16)		Zi Corporation (HK) Ltd.
+				30/F, China Resources Building
+				    
+				HK
+
+00-07-2E   (hex)		North Node AB
+00072E     (base 16)		North Node AB
+				Skeppsloron 42
+				    
+				SE
+
+00-06-99   (hex)		Vida Design Co.
+000699     (base 16)		Vida Design Co.
+				10F, No. 278 Ho Ping E. Rd.,
+				    
+				TW
+
+00-06-8D   (hex)		SEPATON, Inc.
+00068D     (base 16)		SEPATON, Inc.
+				400 Nickerson Rd.
+				Marlborough  MA  01752
+				US
+
+00-06-A3   (hex)		Bitran Corporation
+0006A3     (base 16)		Bitran Corporation
+				2213 Mochida
+				    
+				JP
+
+00-06-9F   (hex)		Kuokoa Networks
+00069F     (base 16)		Kuokoa Networks
+				2901 Tasman Dr.
+				Santa Clara  CA  95054
+				US
+
+00-06-A2   (hex)		Microtune, Inc.
+0006A2     (base 16)		Microtune, Inc.
+				6440 Lusk Blvd., Suite D205
+				San Diego  CA  92121
+				US
+
+00-06-A6   (hex)		Artistic Licence Engineering Ltd
+0006A6     (base 16)		Artistic Licence Engineering Ltd
+				24 Forward Drive
+				Harrow  Middlesex  HA3 8NT
+				GB
+
+00-06-B8   (hex)		Bandspeed Pty Ltd
+0006B8     (base 16)		Bandspeed Pty Ltd
+				Level 9, 5000 Collins Street
+				    
+				AU
+
+00-06-BB   (hex)		ATI Technologies Inc.
+0006BB     (base 16)		ATI Technologies Inc.
+				75 Tiverton Court
+				    
+				CA
+
+00-06-BD   (hex)		BNTECHNOLOGY Co., Ltd.
+0006BD     (base 16)		BNTECHNOLOGY Co., Ltd.
+				602 Youngshin Bldg. 238-8
+				Seoul    
+				KR
+
+00-06-C3   (hex)		Schindler Elevator Ltd.
+0006C3     (base 16)		Schindler Elevator Ltd.
+				R&D-CO
+				  Ebikon  CH-6030
+				CH
+
+00-06-AA   (hex)		VT Miltope
+0006AA     (base 16)		VT Miltope
+				4900 Pearl East Circle
+				Boulder  CO  80301
+				US
+
+00-06-57   (hex)		Market Central, Inc.
+000657     (base 16)		Market Central, Inc.
+				500 Business Center Drive
+				Pittsburgh  PA  15205-1333
+				US
+
+00-06-97   (hex)		R & D Center
+000697     (base 16)		R & D Center
+				5F, Seungwon B/D, 810-9
+				Seoul    
+				KR
+
+00-06-9A   (hex)		e & Tel
+00069A     (base 16)		e & Tel
+				100 Sejong-no Chongno-gu,
+				    
+				KR
+
+00-06-7D   (hex)		Takasago Ltd.
+00067D     (base 16)		Takasago Ltd.
+				1-24-16 Mizonokuchi Takatsu-ku
+				    
+				JP
+
+00-06-71   (hex)		Softing AG
+000671     (base 16)		Softing AG
+				Richard-Reitzner-Allee 6
+				    
+				DE
+
+00-06-72   (hex)		Netezza
+000672     (base 16)		Netezza
+				1671 Worcester Road
+				Framingham  MA  01701
+				US
+
+00-06-6A   (hex)		InfiniCon Systems, Inc.
+00066A     (base 16)		InfiniCon Systems, Inc.
+				700 American Ave.
+				King of Prussia  PA  19406
+				US
+
+00-06-61   (hex)		NIA Home Technologies Corp.
+000661     (base 16)		NIA Home Technologies Corp.
+				Innovation Incubator, NTHU,
+				Hsinchu  30013,  
+				TW
+
+00-06-B2   (hex)		Linxtek Co.
+0006B2     (base 16)		Linxtek Co.
+				2F Kum-a B/D 31-3 Karak-dong,
+				    138-160
+				KR
+
+00-06-B6   (hex)		Nir-Or Israel Ltd.
+0006B6     (base 16)		Nir-Or Israel Ltd.
+				11 Amal St.
+				    
+				IL
+
+00-06-84   (hex)		Biacore AB
+000684     (base 16)		Biacore AB
+				Software, Electronics and Optics
+				    
+				SE
+
+00-06-82   (hex)		Convedia
+000682     (base 16)		Convedia
+				4190 Still Creek Dr.
+				    V5C 6C6
+				CA
+
+00-05-E3   (hex)		LightSand Communications, Inc.
+0005E3     (base 16)		LightSand Communications, Inc.
+				375 Los Coches St.
+				Milpitas  CA  94539
+				US
+
+00-05-ED   (hex)		Technikum Joanneum GmbH
+0005ED     (base 16)		Technikum Joanneum GmbH
+				Alte Poststrasse 149
+				    
+				AT
+
+00-05-EF   (hex)		ADOIR Digital Technology
+0005EF     (base 16)		ADOIR Digital Technology
+				28 Fl, ZhaoFeng World Trade Bldg.
+				Shanghai  200050,  
+				CN
+
+00-06-00   (hex)		Toshiba Teli Corporation
+000600     (base 16)		Toshiba Teli Corporation
+				 4-7-1 Asahigaoka, Hino-Shi,
+				  Tokyo  191-0065
+				JP
+
+00-06-6B   (hex)		Sysmex Corporation
+00066B     (base 16)		Sysmex Corporation
+				4-4-4 Takatsukadai,
+				    651-2271
+				JP
+
+00-05-5A   (hex)		Power Dsine Ltd.
+00055A     (base 16)		Power Dsine Ltd.
+				1 Hanagar St., P.O. Box 7220
+				    
+				IL
+
+00-06-53   (hex)		Cisco Systems, Inc
+000653     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-06-4F   (hex)		PRO-NETS Technology Corporation
+00064F     (base 16)		PRO-NETS Technology Corporation
+				Pao-Chung Road,
+				Hsin Tien  Taipei,  
+				TW
+
+00-06-12   (hex)		Accusys, Inc.
+000612     (base 16)		Accusys, Inc.
+				5F, No. 38, Taiyuan St
+				Hsinchu County    30265
+				TW
+
+00-06-09   (hex)		Crossport Systems
+000609     (base 16)		Crossport Systems
+				10940 NE 33rd Place
+				Bellevue  WA  98005
+				US
+
+00-06-16   (hex)		Tel Net Co., Ltd.
+000616     (base 16)		Tel Net Co., Ltd.
+				3F BOF Bldg 730-15 Goje Song
+				    
+				KR
+
+00-06-0D   (hex)		Wave7 Optics
+00060D     (base 16)		Wave7 Optics
+				1075 Windward Ridge Pkwy.
+				Alpharetta  GA  30005
+				US
+
+00-06-4A   (hex)		Honeywell Co., Ltd. (KOREA)
+00064A     (base 16)		Honeywell Co., Ltd. (KOREA)
+				56, Chaam-dong, Chonan-city
+				    
+				KR
+
+00-06-3F   (hex)		Everex Communications Inc.
+00063F     (base 16)		Everex Communications Inc.
+				5020A Brandin Ct.
+				Fremont  CA  94538
+				US
+
+00-06-3D   (hex)		Microwave Data Systems Inc.
+00063D     (base 16)		Microwave Data Systems Inc.
+				175 Science Parkway
+				Rochester  NY  14620
+				US
+
+00-06-39   (hex)		Newtec
+000639     (base 16)		Newtec
+				Laarstraat 5
+				    
+				BE
+
+00-06-2F   (hex)		Pivotech Systems Inc.
+00062F     (base 16)		Pivotech Systems Inc.
+				200 Centennial Ave.,
+				Piscataway  NJ  08854
+				US
+
+00-06-36   (hex)		Jedai Broadband Networks
+000636     (base 16)		Jedai Broadband Networks
+				331 Newman Springs Rd.
+				Red Bank  NJ  07701
+				US
+
+00-06-51   (hex)		Aspen Networks Inc.
+000651     (base 16)		Aspen Networks Inc.
+				3777 Stevens Creek Blvd
+				Santa Clara  CA  95051
+				US
+
+00-06-5C   (hex)		Malachite Technologies, Inc.
+00065C     (base 16)		Malachite Technologies, Inc.
+				195 New Hampshire Avenue
+				Portsmouth  NH  03801
+				US
+
+00-06-42   (hex)		Genetel Systems Inc.
+000642     (base 16)		Genetel Systems Inc.
+				Mockwoo B/D, 912 Walpyoung-Dong
+				    302-852
+				KR
+
+00-05-E9   (hex)		Unicess Network, Inc.
+0005E9     (base 16)		Unicess Network, Inc.
+				870 Dorothy Dr. #708
+				Richardson  TX  75081
+				US
+
+00-05-E6   (hex)		Egenera, Inc.
+0005E6     (base 16)		Egenera, Inc.
+				165 Forest St.
+				Marlboro  MA  01752
+				US
+
+00-06-1E   (hex)		Maxan Systems
+00061E     (base 16)		Maxan Systems
+				1-84, Woulam-dong
+				    
+				KR
+
+00-06-22   (hex)		Chung Fu Chen Yeh Enterprise Corp.
+000622     (base 16)		Chung Fu Chen Yeh Enterprise Corp.
+				2F No. 666 Jing Ping Road,
+				Taipei Hsien    
+				TW
+
+00-05-88   (hex)		Sensoria Corp.
+000588     (base 16)		Sensoria Corp.
+				15950 Bernardo Ctr. Dr.
+				San Diego  CA  92127
+				US
+
+00-05-8D   (hex)		Lynx Photonic Networks, Inc.
+00058D     (base 16)		Lynx Photonic Networks, Inc.
+				13 Hamelaha St.
+				    
+				IL
+
+00-05-8A   (hex)		Netcom Co., Ltd.
+00058A     (base 16)		Netcom Co., Ltd.
+				1F, No. 7, Lane 242,
+				Taipei    
+				TW
+
+00-05-91   (hex)		Active Silicon Ltd
+000591     (base 16)		Active Silicon Ltd
+				Pinewood Mews
+				Iver    SL0 0NA
+				GB
+
+00-05-93   (hex)		Grammar Engine Inc.
+000593     (base 16)		Grammar Engine Inc.
+				921 Eastwind Drive
+				Westerville  OH  43081
+				US
+
+00-05-C7   (hex)		I/F-COM A/S
+0005C7     (base 16)		I/F-COM A/S
+				Ellegaardvej 36
+				    
+				DK
+
+00-05-CC   (hex)		Sumtel Communications, Inc.
+0005CC     (base 16)		Sumtel Communications, Inc.
+				1F, No. 173, Gung Yuan Road,
+				Hsinchu City    30054
+				TW
+
+00-05-CF   (hex)		Thunder River Technologies, Inc.
+0005CF     (base 16)		Thunder River Technologies, Inc.
+				23 Corporate Plaza Ste. 250
+				Newport Beach  CA  92660
+				US
+
+00-05-C6   (hex)		Triz Communications
+0005C6     (base 16)		Triz Communications
+				Anwon Bldg. 7th Fl.
+				Seoul    150-010
+				KR
+
+00-05-D6   (hex)		L-3 Linkabit
+0005D6     (base 16)		L-3 Linkabit
+				9890 Town Center Drive
+				San Diego  CA  92121
+				US
+
+00-05-DA   (hex)		Apex Automationstechnik
+0005DA     (base 16)		Apex Automationstechnik
+				Vossenkamp 4
+				    
+				DE
+
+00-05-A1   (hex)		Zenocom
+0005A1     (base 16)		Zenocom
+				No.402, 4th floor, Wongok Bldg.
+				Seoul    
+				KR
+
+00-05-A9   (hex)		Princeton Networks, Inc.
+0005A9     (base 16)		Princeton Networks, Inc.
+				100 Century Center Ct. #100
+				San Jose  CA  95112
+				US
+
+00-05-AF   (hex)		InnoScan Computing A/S
+0005AF     (base 16)		InnoScan Computing A/S
+				Soren Frichsvej 42R
+				    
+				DK
+
+00-05-A6   (hex)		Extron Electronics
+0005A6     (base 16)		Extron Electronics
+				1230 S. Lewis
+				Anahiem  CA  92805
+				US
+
+00-05-A0   (hex)		MOBILINE Kft.
+0005A0     (base 16)		MOBILINE Kft.
+				Lehel Utca 14
+				    H-1134
+				HU
+
+00-05-84   (hex)		AbsoluteValue Systems, Inc.
+000584     (base 16)		AbsoluteValue Systems, Inc.
+				715-D North Dr.
+				Melbourne  FL  32934
+				US
+
+00-05-8F   (hex)		CLCsoft co.
+00058F     (base 16)		CLCsoft co.
+				Dept. of Electrical Engineering
+				    
+				KR
+
+00-05-BB   (hex)		Myspace AB
+0005BB     (base 16)		Myspace AB
+				Sveavagen 33
+				    
+				SE
+
+00-05-17   (hex)		Shellcomm, Inc.
+000517     (base 16)		Shellcomm, Inc.
+				Rm #6122 ETRI TBI Center, 1,
+				    
+				KR
+
+00-05-1C   (hex)		Xnet Technology Corp.
+00051C     (base 16)		Xnet Technology Corp.
+				9F-16, No. 12, Lane 609,
+				    
+				TW
+
+00-04-F9   (hex)		Xtera Communications, Inc.
+0004F9     (base 16)		Xtera Communications, Inc.
+				500 W Bethany Drive
+				Allen  TX  75013
+				US
+
+00-04-FA   (hex)		NBS Technologies Inc.
+0004FA     (base 16)		NBS Technologies Inc.
+				703 Evans Avenue, Suite 400
+				Ontario    M9C 5E9
+				CA
+
+00-05-41   (hex)		Advanced Systems Co., Ltd.
+000541     (base 16)		Advanced Systems Co., Ltd.
+				2-9-7 Nishikicho,
+				    190-0022
+				JP
+
+00-05-45   (hex)		Internet Photonics
+000545     (base 16)		Internet Photonics
+				1030 Broad St., 2nd Floor
+				Shrewsbury  NJ  07702
+				US
+
+00-05-3A   (hex)		Willowglen Services Pte Ltd
+00053A     (base 16)		Willowglen Services Pte Ltd
+				151 Lorong Chuan,
+				    556741
+				SG
+
+00-05-31   (hex)		Cisco Systems, Inc
+000531     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-05-39   (hex)		A Brand New World in Sweden AB
+000539     (base 16)		A Brand New World in Sweden AB
+				Box 1223
+				    
+				SE
+
+00-05-2A   (hex)		Ikegami Tsushinki Co., Ltd.
+00052A     (base 16)		Ikegami Tsushinki Co., Ltd.
+				5-6-16 Ikegami Ohta-ku,
+				    146-8567
+				JP
+
+00-05-2D   (hex)		Zoltrix International Limited
+00052D     (base 16)		Zoltrix International Limited
+				Room 701 Po Hing Centre,
+				    
+				HK
+
+00-05-25   (hex)		Puretek Industrial Co., Ltd.
+000525     (base 16)		Puretek Industrial Co., Ltd.
+				No. 14, 4 Flr. Lane 235
+				    
+				TW
+
+00-05-58   (hex)		Synchronous, Inc.
+000558     (base 16)		Synchronous, Inc.
+				77 Las Colinas Lane
+				San Jose  CA  95119
+				US
+
+00-05-50   (hex)		Vcomms Connect Limited
+000550     (base 16)		Vcomms Connect Limited
+				75 The Esplanade, Level 3
+				Wellington Mail Centre 5045  Wellington  
+				NZ
+
+00-05-12   (hex)		Zebra Technologies Inc
+000512     (base 16)		Zebra Technologies Inc
+				475 Half Day Road
+				Lincolnshire  IL  60069
+				US
+
+00-05-03   (hex)		ICONAG
+000503     (base 16)		ICONAG
+				AM Bahnhof 2
+				    
+				DE
+
+00-05-7A   (hex)		Overture Networks
+00057A     (base 16)		Overture Networks
+				637 Davis Drive
+				Morrisville  NC  27560
+				US
+
+00-05-64   (hex)		Tsinghua Bitway Co., Ltd.
+000564     (base 16)		Tsinghua Bitway Co., Ltd.
+				12 Floor, Tower C, Corporate
+				    
+				CN
+
+00-04-F8   (hex)		QUALICABLE TV Industria E Com., Ltda
+0004F8     (base 16)		QUALICABLE TV Industria E Com., Ltda
+				Av. Joao Paulo Ablas, 308
+				    
+				BR
+
+00-04-F5   (hex)		SnowShore Networks, Inc.
+0004F5     (base 16)		SnowShore Networks, Inc.
+				285 Billerica Road
+				Chelmsford  MA  01824
+				US
+
+00-04-F2   (hex)		Polycom
+0004F2     (base 16)		Polycom
+				1000 West 14th Street
+				  Canada  V7P3P3
+				CA
+
+00-04-F3   (hex)		FS FORTH-SYSTEME GmbH
+0004F3     (base 16)		FS FORTH-SYSTEME GmbH
+				Küferstraße 8
+				    
+				DE
+
+00-04-ED   (hex)		Billion Electric Co., Ltd.
+0004ED     (base 16)		Billion Electric Co., Ltd.
+				8F, No.192, Sec.2, Chung Hsing Rd.,
+				Taiwan  Taiwan  ROC
+				TW
+
+00-04-E7   (hex)		Lightpointe Communications, Inc
+0004E7     (base 16)		Lightpointe Communications, Inc
+				10140 Barnes Canyon Road
+				San Diego  CA  92121
+				US
+
+00-04-E6   (hex)		Banyan Network Private Limited
+0004E6     (base 16)		Banyan Network Private Limited
+				443, 8th Floor, Guna Complex
+				    
+				IN
+
+00-04-DE   (hex)		Cisco Systems, Inc
+0004DE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-A2   (hex)		L.S.I. Japan Co., Ltd.
+0004A2     (base 16)		L.S.I. Japan Co., Ltd.
+				1-8-14 Sendagaya Shibuya-Ku
+				Tokyo  151-0051  
+				JP
+
+00-04-9B   (hex)		Cisco Systems, Inc
+00049B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-99   (hex)		Chino Corporation
+000499     (base 16)		Chino Corporation
+				1 Mori, Fujioka City,
+				  Zip:  375-8505
+				JP
+
+00-04-8E   (hex)		Ohm Tech Labs, Inc.
+00048E     (base 16)		Ohm Tech Labs, Inc.
+				141 Lanza Ave., B-12
+				Garfield  NJ  07026
+				US
+
+00-04-A6   (hex)		SAF Tehnika Ltd.
+0004A6     (base 16)		SAF Tehnika Ltd.
+				91 Dzirnavu Str.,
+				    
+				LV
+
+00-04-A8   (hex)		Broadmax Technologies, Inc.
+0004A8     (base 16)		Broadmax Technologies, Inc.
+				180, Wai Yip Street,
+				  HONG  KONG
+				HK
+
+00-04-A1   (hex)		Pathway Connectivity
+0004A1     (base 16)		Pathway Connectivity
+				1439-17 Avenue SE
+				Calgary  Alberta  T2G 1J9
+				CA
+
+00-04-CE   (hex)		Patria Ailon
+0004CE     (base 16)		Patria Ailon
+				Naulakatu 3
+				    
+				FI
+
+00-04-C7   (hex)		NetMount
+0004C7     (base 16)		NetMount
+				P.O.B. 2325
+				    
+				IL
+
+00-04-8D   (hex)		 Teo Technologies, Inc
+00048D     (base 16)		 Teo Technologies, Inc
+				11609 49th Place West
+				Mukilteo  WA  98275
+				US
+
+00-04-90   (hex)		Optical Access
+000490     (base 16)		Optical Access
+				P.O. Box 114
+				    
+				IL
+
+00-04-E1   (hex)		Infinior Microsystems
+0004E1     (base 16)		Infinior Microsystems
+				2F, Accufar Bldg, 234-10,
+				Seoul  KOREA  138-220
+				KR
+
+00-04-C2   (hex)		Magnipix, Inc.
+0004C2     (base 16)		Magnipix, Inc.
+				3539 St-Charles Blvd., Suite 212
+				  CANADA  H9H3C4
+				CA
+
+00-04-86   (hex)		ITTC, University of Kansas
+000486     (base 16)		ITTC, University of Kansas
+				2335 Irving Hill Rd.
+				Lawrence  KS  66045
+				US
+
+00-04-8B   (hex)		Poscon Corporation
+00048B     (base 16)		Poscon Corporation
+				#606 Ho-Dong, Nam Gu,
+				  SOUTH  KOREA
+				KR
+
+00-04-84   (hex)		Amann GmbH
+000484     (base 16)		Amann GmbH
+				Unteranger 6
+				    
+				DE
+
+00-04-78   (hex)		G. Star Technology Corporation
+000478     (base 16)		G. Star Technology Corporation
+				4th Floor, No. 118, Sector 2
+				Taipei City  Taipei City  TAIWAN
+				TW
+
+00-04-7A   (hex)		AXXESSIT ASA
+00047A     (base 16)		AXXESSIT ASA
+				AXXESSIT ASA HALDEN
+				    
+				NO
+
+00-04-6A   (hex)		Navini Networks
+00046A     (base 16)		Navini Networks
+				3605 E. Plano Pkwy,
+				Plano  TX  75074
+				US
+
+00-04-6B   (hex)		Palm Wireless, Inc.
+00046B     (base 16)		Palm Wireless, Inc.
+				48933 Warm Springs Blvd.
+				Fremont  CA  94539
+				US
+
+00-04-72   (hex)		Telelynx, Inc.
+000472     (base 16)		Telelynx, Inc.
+				3F-1, 66 Nankan Rd.,
+				    TAIWAN
+				TW
+
+00-04-64   (hex)		Pulse-Link Inc
+000464     (base 16)		Pulse-Link Inc
+				1934 Kellogg Avenue
+				Carlsbad  CA  92008
+				US
+
+00-04-65   (hex)		i.s.t isdn-support technik GmbH
+000465     (base 16)		i.s.t isdn-support technik GmbH
+				Rhein Strasse 7E
+				    
+				DE
+
+00-04-5E   (hex)		PolyTrax Information Technology AG
+00045E     (base 16)		PolyTrax Information Technology AG
+				Martin-Kollar - Str. 5
+				    
+				DE
+
+00-04-11   (hex)		Inkra Networks, Inc.
+000411     (base 16)		Inkra Networks, Inc.
+				40971 Encyclopedia Circle
+				Fremont  CA  94538
+				US
+
+00-04-10   (hex)		Spinnaker Networks, Inc.
+000410     (base 16)		Spinnaker Networks, Inc.
+				107 Gamma Drive
+				Pittsburgh  PA  15238
+				US
+
+00-04-12   (hex)		WaveSmith Networks, Inc.
+000412     (base 16)		WaveSmith Networks, Inc.
+				40 Nagog Park
+				Acton  MA  01720-3425
+				US
+
+00-04-42   (hex)		NACT
+000442     (base 16)		NACT
+				191 W. 5200 N.
+				Provo  UT  84604
+				US
+
+00-04-45   (hex)		LMS Skalar Instruments GmbH
+000445     (base 16)		LMS Skalar Instruments GmbH
+				Willi-Eichler-Str 11
+				    
+				DE
+
+00-04-4E   (hex)		Cisco Systems, Inc
+00044E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-52   (hex)		RocketLogix, Inc.
+000452     (base 16)		RocketLogix, Inc.
+				6504 International Parkway
+				Plano  TX  75093
+				US
+
+00-04-27   (hex)		Cisco Systems, Inc
+000427     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-04-20   (hex)		Slim Devices, Inc.
+000420     (base 16)		Slim Devices, Inc.
+				12 South First St.
+				San Jose  CA  95113
+				US
+
+00-04-3D   (hex)		INDEL AG
+00043D     (base 16)		INDEL AG
+				Tufiwis 26
+				    
+				CH
+
+00-04-3B   (hex)		Lava Computer Mfg., Inc.
+00043B     (base 16)		Lava Computer Mfg., Inc.
+				2 Vulcan St.
+				  CANADA  M9W-1L2
+				CA
+
+00-04-31   (hex)		GlobalStreams, Inc.
+000431     (base 16)		GlobalStreams, Inc.
+				2882 Prospect Park Drive
+				Rancho Cordova  CA  95670
+				US
+
+00-03-C4   (hex)		Tomra Systems ASA
+0003C4     (base 16)		Tomra Systems ASA
+				Drengsrudhagen 2
+				    
+				NO
+
+00-03-C5   (hex)		Mobotix AG
+0003C5     (base 16)		Mobotix AG
+				Wingertsweilerhof 6
+				    
+				DE
+
+00-03-BF   (hex)		Centerpoint Broadband Technologies, Inc.
+0003BF     (base 16)		Centerpoint Broadband Technologies, Inc.
+				1741 Technology Drive,
+				San Jose  CA  95110-1310
+				US
+
+00-03-B9   (hex)		Hualong Telecom Co., Ltd.
+0003B9     (base 16)		Hualong Telecom Co., Ltd.
+				9 Guanghua St.
+				  P.R.  
+				CN
+
+00-03-F9   (hex)		Pleiades Communications, Inc.
+0003F9     (base 16)		Pleiades Communications, Inc.
+				2830 Market Loop #104
+				South Lake  TX  76092
+				US
+
+00-03-FE   (hex)		Cisco Systems, Inc
+0003FE     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-F5   (hex)		Chip2Chip
+0003F5     (base 16)		Chip2Chip
+				2249 Zanker Rd.
+				San Jose  CA  95131
+				US
+
+00-03-91   (hex)		Advanced Digital Broadcast, Ltd.
+000391     (base 16)		Advanced Digital Broadcast, Ltd.
+				8F, 145 Chung Shan N. Rd. Sec. 2,
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-03-AC   (hex)		Fronius Schweissmaschinen
+0003AC     (base 16)		Fronius Schweissmaschinen
+				Günter Fronius-Straße 1
+				    
+				AT
+
+00-03-99   (hex)		Dongju Informations & Communications Co., Ltd.
+000399     (base 16)		Dongju Informations & Communications Co., Ltd.
+				#305, Eunsuk Bldg. Samsung-dong
+				Republic  of  KOREA
+				KR
+
+00-03-FD   (hex)		Cisco Systems, Inc
+0003FD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-BA   (hex)		Oracle Corporation
+0003BA     (base 16)		Oracle Corporation
+				17 Network Circle
+				Menlo Park  CA  95025
+				US
+
+00-03-AF   (hex)		Paragea Communications
+0003AF     (base 16)		Paragea Communications
+				207 Perry Parkway
+				Gaithersburg  MD  20877
+				US
+
+00-03-0B   (hex)		Hunter Technology, Inc.
+00030B     (base 16)		Hunter Technology, Inc.
+				1408, Woolim e-biz Center,
+				Seoul    135-270
+				KR
+
+00-03-C9   (hex)		TECOM Co., Ltd.
+0003C9     (base 16)		TECOM Co., Ltd.
+				23, R&D Road 2
+				Hsin-Chu    
+				TW
+
+00-03-C1   (hex)		Packet Dynamics Ltd
+0003C1     (base 16)		Packet Dynamics Ltd
+				2 Buckstane Park
+				UK  EH10  GPA
+				GB
+
+00-03-DE   (hex)		OTC Wireless
+0003DE     (base 16)		OTC Wireless
+				602 Charlot Ave.
+				San Jose  CA  95131
+				US
+
+00-03-28   (hex)		Mace Group, Inc.
+000328     (base 16)		Mace Group, Inc.
+				5101 Commerce Dr.
+				Baldwin Park  CA  91706
+				US
+
+00-03-2B   (hex)		GAI Datenfunksysteme GmbH
+00032B     (base 16)		GAI Datenfunksysteme GmbH
+				Riedleparkstraße 28
+				Friedrichshafen    88045
+				DE
+
+00-03-2C   (hex)		ABB Switzerland Ltd
+00032C     (base 16)		ABB Switzerland Ltd
+				Dept. ATEP
+				Austrasse    
+				CH
+
+00-03-23   (hex)		Cornet Technology, Inc.
+000323     (base 16)		Cornet Technology, Inc.
+				6800 Versar Center, Suite 216
+				Springfield  VA  22151-4147
+				US
+
+00-03-80   (hex)		SSH Communications Security Corp.
+000380     (base 16)		SSH Communications Security Corp.
+				Fredrikinkatu 42
+				    
+				FI
+
+00-03-82   (hex)		A-One Co., Ltd.
+000382     (base 16)		A-One Co., Ltd.
+				6-9-20, Shimoichiba-cho,
+				    
+				JP
+
+00-03-7A   (hex)		Taiyo Yuden Co., Ltd.
+00037A     (base 16)		Taiyo Yuden Co., Ltd.
+				8-1 Sakae-Cho
+				    
+				JP
+
+00-03-75   (hex)		NetMedia, Inc.
+000375     (base 16)		NetMedia, Inc.
+				10940 N. Stallard Place
+				Tuscon  AZ  85737
+				US
+
+00-03-5A   (hex)		Photron Limited
+00035A     (base 16)		Photron Limited
+				1-1-8, Fujimi,
+				Chiyoda-ku    102-0071
+				JP
+
+00-03-53   (hex)		Mitac, Inc.
+000353     (base 16)		Mitac, Inc.
+				No. 2, Chung-Hsiao Street
+				Chitu  Keelung,  
+				TW
+
+00-03-4F   (hex)		Sur-Gard Security
+00034F     (base 16)		Sur-Gard Security
+				401 Magnetic Drive
+				Ontario    M3J 3H9
+				CA
+
+00-03-7B   (hex)		IDEC IZUMI Corporation
+00037B     (base 16)		IDEC IZUMI Corporation
+				7-31, Nishimiyahara
+				    
+				JP
+
+00-03-67   (hex)		Jasmine Networks, Inc.
+000367     (base 16)		Jasmine Networks, Inc.
+				1940 Zanker Road
+				San Jose  CA  95112
+				US
+
+00-03-6A   (hex)		Mainnet, Ltd.
+00036A     (base 16)		Mainnet, Ltd.
+				P.O. Box 2324
+				    
+				IL
+
+00-03-6B   (hex)		Cisco Systems, Inc
+00036B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-6C   (hex)		Cisco Systems, Inc
+00036C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-8F   (hex)		Weinschel Corporation
+00038F     (base 16)		Weinschel Corporation
+				5305 Spectrum Drive
+				Frederick  MD  21703
+				US
+
+00-03-84   (hex)		AETA
+000384     (base 16)		AETA
+				Kepler 6
+				Le Plessis Robinson    92350
+				FR
+
+00-03-87   (hex)		Blaze Network Products
+000387     (base 16)		Blaze Network Products
+				5180 Hacienda Drive
+				Dublin  CA  94568
+				US
+
+00-03-81   (hex)		Ingenico International
+000381     (base 16)		Ingenico International
+				1/9 Apollo Street
+				    
+				AU
+
+00-03-40   (hex)		Floware Wireless Systems, Ltd.
+000340     (base 16)		Floware Wireless Systems, Ltd.
+				28 Hacharoshet Steet
+				    60250
+				IL
+
+00-01-EC   (hex)		Ericsson Group
+0001EC     (base 16)		Ericsson Group
+				Telefonaktiebolaget
+				    
+				SE
+
+00-03-33   (hex)		Digitel Co., Ltd.
+000333     (base 16)		Digitel Co., Ltd.
+				835-6, Yoksam-dong
+				    
+				KR
+
+00-03-38   (hex)		Oak Technology
+000338     (base 16)		Oak Technology
+				139 Kifer Court
+				Sunnyvale  CA  94086-5160
+				US
+
+00-03-39   (hex)		Eurologic Systems, Ltd.
+000339     (base 16)		Eurologic Systems, Ltd.
+				Clonshaugh Industrial Estate
+				Clonshaugh  Dublin 17  
+				IE
+
+00-03-31   (hex)		Cisco Systems, Inc
+000331     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-30   (hex)		Imagenics, Co., Ltd.
+000330     (base 16)		Imagenics, Co., Ltd.
+				1-31-5 Kokuryo-Cho
+				  182-0022  
+				JP
+
+00-03-4A   (hex)		RIAS Corporation
+00034A     (base 16)		RIAS Corporation
+				46600 Fremont Blvd.
+				Fremont  CA  94538
+				US
+
+00-02-CF   (hex)		ZyGate Communications, Inc.
+0002CF     (base 16)		ZyGate Communications, Inc.
+				2F, No.48, Lung-Chin Road
+				    
+				TW
+
+00-02-D1   (hex)		Vivotek, Inc.
+0002D1     (base 16)		Vivotek, Inc.
+				5F-1, 168-1, Lien-Chen Rd,
+				    
+				TW
+
+00-02-C2   (hex)		Net Vision Telecom
+0002C2     (base 16)		Net Vision Telecom
+				#206 Software Support Center
+				305-343  Rep.  of Korea
+				KR
+
+00-02-B6   (hex)		Acrosser Technology Co., Ltd.
+0002B6     (base 16)		Acrosser Technology Co., Ltd.
+				No. 116-2 Guang-Fu Rd.
+				Taipei  Taipei  R.O.C.
+				TW
+
+00-02-B1   (hex)		Anritsu, Ltd.
+0002B1     (base 16)		Anritsu, Ltd.
+				Rutherford Close
+				  UNITED  KINGDOM
+				GB
+
+00-02-AD   (hex)		HOYA Corporation
+0002AD     (base 16)		HOYA Corporation
+				2-7-5 Naka-Ochiai, Shinjuku-ku,
+				  Tokyo  161-8525
+				JP
+
+00-02-AE   (hex)		Scannex Electronics Ltd.
+0002AE     (base 16)		Scannex Electronics Ltd.
+				Unit 8 English Business Park
+				Hove    BN3 7ET
+				GB
+
+00-03-04   (hex)		Pacific Broadband Communications
+000304     (base 16)		Pacific Broadband Communications
+				3103 North First St.
+				San Jose  CA  95134
+				US
+
+00-03-01   (hex)		EXFO
+000301     (base 16)		EXFO
+				400 Godin Avenue
+				Quebec   G1M 2K2    
+				CA
+
+00-02-FD   (hex)		Cisco Systems, Inc
+0002FD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-03-00   (hex)		Barracuda Networks, Inc.
+000300     (base 16)		Barracuda Networks, Inc.
+				3175 S. Winchester Blvd
+				Campbell  CA  95008
+				US
+
+00-02-BD   (hex)		Bionet Co., Ltd.
+0002BD     (base 16)		Bionet Co., Ltd.
+				3F, Medison Venture Tower,
+				    KOREA
+				KR
+
+00-02-BE   (hex)		Totsu Engineering, Inc.
+0002BE     (base 16)		Totsu Engineering, Inc.
+				 5-16-20 Roppongi Minato-ku
+				Tokyo    106-8551
+				JP
+
+00-02-B9   (hex)		Cisco Systems, Inc
+0002B9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-BA   (hex)		Cisco Systems, Inc
+0002BA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-F9   (hex)		MIMOS Berhad
+0002F9     (base 16)		MIMOS Berhad
+				Technology Park Malaysia
+				Kuala Lumpur    57000
+				MY
+
+00-02-F3   (hex)		Media Serve Co., Ltd.
+0002F3     (base 16)		Media Serve Co., Ltd.
+				Dongsung Bldg. #17-8, Youido-dong,
+				Seoul    
+				KR
+
+00-02-EA   (hex)		Focus Enhancements
+0002EA     (base 16)		Focus Enhancements
+				1370 Dell Ave.
+				Campbell  CA  95008
+				US
+
+00-03-13   (hex)		Access Media SPA
+000313     (base 16)		Access Media SPA
+				Via delle Industrie, 4/g
+				24035 LALLIO (BG)    
+				IT
+
+00-03-10   (hex)		E-Globaledge Corporation
+000310     (base 16)		E-Globaledge Corporation
+				7F Nakameguro GT Tower 
+				 Meduro-ku, Tokyo    153-0051
+				JP
+
+00-03-0A   (hex)		Argus Technologies
+00030A     (base 16)		Argus Technologies
+				8F, No. 183, Kang Chien Rd.
+				    114
+				TW
+
+00-03-1E   (hex)		Optranet, Inc.
+00031E     (base 16)		Optranet, Inc.
+				7041 Koll Center Pkwy
+				Pleasanton  CA  94566
+				US
+
+00-03-15   (hex)		Cidco Incorporated
+000315     (base 16)		Cidco Incorporated
+				220 Cochrane Circle
+				Morgan Hill  CA  95037
+				US
+
+00-03-19   (hex)		Infineon AG
+000319     (base 16)		Infineon AG
+				P.O. Box 800949
+				    
+				DE
+
+00-02-E7   (hex)		CAB GmbH & Co KG
+0002E7     (base 16)		CAB GmbH & Co KG
+				Wilhelm-Schickard-Str 14
+				    
+				DE
+
+00-02-DF   (hex)		Net Com Systems, Inc.
+0002DF     (base 16)		Net Com Systems, Inc.
+				15-3, Yoido-Dong,
+				Seoul    
+				KR
+
+00-02-DB   (hex)		NETSEC
+0002DB     (base 16)		NETSEC
+				13505 Dulles Technology Dr., Ste. 1
+				Herdon  VA  20171
+				US
+
+00-02-4B   (hex)		Cisco Systems, Inc
+00024B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-4D   (hex)		Mannesman Dematic Colby Pty. Ltd.
+00024D     (base 16)		Mannesman Dematic Colby Pty. Ltd.
+				24 Narabang Way
+				    
+				AU
+
+00-02-50   (hex)		Geyser Networks, Inc.
+000250     (base 16)		Geyser Networks, Inc.
+				535 Del Rey Avenue
+				Sunnyvale  CA  94086
+				US
+
+00-02-48   (hex)		Pilz GmbH & Co.
+000248     (base 16)		Pilz GmbH & Co.
+				Felix-Wankel-Straße 2
+				    
+				DE
+
+00-02-4C   (hex)		SiByte, Inc.
+00024C     (base 16)		SiByte, Inc.
+				2805 Bowers Avenue
+				Santa Clara  CA  95051-0917
+				US
+
+00-02-5A   (hex)		Catena Networks
+00025A     (base 16)		Catena Networks
+				307 Legget Drive
+				Canada  K2K  3C8
+				CA
+
+00-02-6E   (hex)		NeGeN Access, Inc.
+00026E     (base 16)		NeGeN Access, Inc.
+				33 Boston Post Rd. West
+				Marlborough  MA  01752
+				US
+
+00-02-70   (hex)		Crewave Co., Ltd.
+000270     (base 16)		Crewave Co., Ltd.
+				F7, Pureun Bldg., 28-1
+				Seoul  KOREA  137-030
+				KR
+
+00-02-3B   (hex)		Ericsson
+00023B     (base 16)		Ericsson
+				250 Holger Way
+				SAN JOSE  CA  95134
+				US
+
+00-02-39   (hex)		Visicom
+000239     (base 16)		Visicom
+				10052 Mesa Ridge Ct.
+				San Diego  CA  92121
+				US
+
+00-02-33   (hex)		Mantra Communications, Inc.
+000233     (base 16)		Mantra Communications, Inc.
+				12850 Middlebrook Road
+				Germantown  MD  20874
+				US
+
+00-02-A2   (hex)		Hilscher GmbH
+0002A2     (base 16)		Hilscher GmbH
+				Rheinstraße 15
+				    
+				DE
+
+00-02-54   (hex)		WorldGate
+000254     (base 16)		WorldGate
+				3190 Tremont Avenue
+				Trevose  PA  19053
+				US
+
+00-02-9A   (hex)		Storage Apps
+00029A     (base 16)		Storage Apps
+				3 Princess Road
+				Lawrenceville  NJ  08648
+				US
+
+00-02-8F   (hex)		Globetek, Inc.
+00028F     (base 16)		Globetek, Inc.
+				1607 Akron Peninsula Rd.
+				Akron  OH  44313-5190
+				US
+
+00-02-87   (hex)		Adapcom
+000287     (base 16)		Adapcom
+				172-A Component Drive
+				San Jose  CA  95131
+				US
+
+00-02-81   (hex)		Madge Ltd.
+000281     (base 16)		Madge Ltd.
+				Madge House
+				Maindenhead  Berkshire  SL6 2HP
+				GB
+
+00-02-63   (hex)		UPS Manufacturing SRL
+000263     (base 16)		UPS Manufacturing SRL
+				Via Giordano, 54
+				  Verona  
+				IT
+
+00-02-40   (hex)		Seedek Co., Ltd.
+000240     (base 16)		Seedek Co., Ltd.
+				#709, 1638-32, Sammo
+				    KOREA
+				KR
+
+00-01-F3   (hex)		QPS, Inc.
+0001F3     (base 16)		QPS, Inc.
+				8015 E. Crystal Drive
+				Anaheim  CA  92807
+				US
+
+00-01-E4   (hex)		Sitera, Inc.
+0001E4     (base 16)		Sitera, Inc.
+				1820 Lefthand Circle
+				Longmont  CO  80501
+				US
+
+00-01-E3   (hex)		Siemens AG
+0001E3     (base 16)		Siemens AG
+				Schlavenhorst 88
+				    
+				DE
+
+00-01-EB   (hex)		C-COM Corporation
+0001EB     (base 16)		C-COM Corporation
+				3F, No. 48, Park Ave. II SBIP
+				Hsinchu Taiwan  Hsinchu Taiwan  R.O.C.
+				TW
+
+00-01-F2   (hex)		Mark of the Unicorn, Inc.
+0001F2     (base 16)		Mark of the Unicorn, Inc.
+				1280 Massachusetts Ave.
+				Cambridge  MA  02138
+				US
+
+00-01-D9   (hex)		Sigma, Inc.
+0001D9     (base 16)		Sigma, Inc.
+				32-3 Seijyo 9 Chome
+				    
+				JP
+
+00-01-C5   (hex)		Simpler Networks
+0001C5     (base 16)		Simpler Networks
+				555 Dr Frederick Philips
+				  H4M  2X4
+				CA
+
+00-01-C9   (hex)		Cisco Systems, Inc
+0001C9     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-02-1B   (hex)		Kollmorgen-Servotronix
+00021B     (base 16)		Kollmorgen-Servotronix
+				POB 3919, Petach Tikya
+				  49130  
+				IL
+
+00-02-1E   (hex)		SIMTEL S.R.L.
+00021E     (base 16)		SIMTEL S.R.L.
+				Via Bonifacio Lupi, 25
+				    
+				IT
+
+00-02-21   (hex)		DSP Application, Ltd.
+000221     (base 16)		DSP Application, Ltd.
+				12F-12, No. 79, Sec. 1 Hsin Tai Wu Rd.
+				    TAIWAN
+				TW
+
+00-01-F7   (hex)		Image Display Systems, Inc.
+0001F7     (base 16)		Image Display Systems, Inc.
+				46560 Fremont Blvd.
+				Fremont  CA  94538
+				US
+
+00-02-00   (hex)		Net & Sys Co., Ltd.
+000200     (base 16)		Net & Sys Co., Ltd.
+				Kuro Hitech Industrial Complex 304,
+				    KOREA
+				KR
+
+00-01-C4   (hex)		NeoWave, Inc.
+0001C4     (base 16)		NeoWave, Inc.
+				10th KRIHS Bldg. 1591-6
+				  SOUTH  KOREA
+				KR
+
+00-01-C1   (hex)		Vitesse Semiconductor Corporation
+0001C1     (base 16)		Vitesse Semiconductor Corporation
+				Hoerkaer 18
+				    
+				DK
+
+00-01-D8   (hex)		Teltronics, Inc.
+0001D8     (base 16)		Teltronics, Inc.
+				4125 Keller Springs Road
+				Addison  TX  25001
+				US
+
+00-02-05   (hex)		Hitachi Denshi, Ltd.
+000205     (base 16)		Hitachi Denshi, Ltd.
+				32 Miyaki-cho Kodaira-shi
+				  JAPAN  187-8511
+				JP
+
+00-02-15   (hex)		Cotas Computer Technology A/B
+000215     (base 16)		Cotas Computer Technology A/B
+				Paludan-Mullers Vej 82
+				    
+				DK
+
+00-02-2A   (hex)		Asound Electronic
+00022A     (base 16)		Asound Electronic
+				Xianxi Industries Zone Changan Town
+				    
+				CN
+
+00-01-8C   (hex)		Mega Vision
+00018C     (base 16)		Mega Vision
+				5765 Thornwood Drive
+				Goleta  CA  93117
+				US
+
+00-01-8F   (hex)		Kenetec, Inc.
+00018F     (base 16)		Kenetec, Inc.
+				115 Hurley Road
+				Oxford  CT  06748
+				US
+
+00-01-7B   (hex)		Heidelberger Druckmaschinen AG
+00017B     (base 16)		Heidelberger Druckmaschinen AG
+				Kurfürsten-Anlage  52-60
+				    
+				DE
+
+00-01-9C   (hex)		JDS Uniphase Inc.
+00019C     (base 16)		JDS Uniphase Inc.
+				570 West Hunt Club Road
+				    
+				CA
+
+00-01-A3   (hex)		GENESYS LOGIC, INC.
+0001A3     (base 16)		GENESYS LOGIC, INC.
+				10F, No. 11, Ln.3.,
+				    
+				TW
+
+00-01-82   (hex)		DICA TECHNOLOGIES AG
+000182     (base 16)		DICA TECHNOLOGIES AG
+				Rotherstr, 19
+				    
+				DE
+
+00-01-89   (hex)		Refraction Technology, Inc.
+000189     (base 16)		Refraction Technology, Inc.
+				2626 Lombardy Lane - Ste. #105
+				Dallas  TX  75220
+				US
+
+00-01-93   (hex)		Hanbyul Telecom Co., Ltd.
+000193     (base 16)		Hanbyul Telecom Co., Ltd.
+				5th Fl. Oksan Bldg.
+				    KOREA
+				KR
+
+00-30-F5   (hex)		Wild Lab. Ltd.
+0030F5     (base 16)		Wild Lab. Ltd.
+				1-33-17-604 Harayama
+				Urawa City Saitama prif.  336-0931  
+				JP
+
+00-01-5D   (hex)		Oracle Corporation 
+00015D     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+00-01-73   (hex)		AMCC
+000173     (base 16)		AMCC
+				6290 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-01-6C   (hex)		FOXCONN
+00016C     (base 16)		FOXCONN
+				105 S Puente St.
+				Brea  CA  92821
+				US
+
+00-01-75   (hex)		Radiant Communications Corp.
+000175     (base 16)		Radiant Communications Corp.
+				5001 Hadley Road
+				South Plainfield  NJ  07080
+				US
+
+00-01-AF   (hex)		Artesyn Embedded Technologies
+0001AF     (base 16)		Artesyn Embedded Technologies
+				2900 S. Diablo Way
+				Tempe  AZ  85282
+				US
+
+00-01-8A   (hex)		ROI COMPUTER AG
+00018A     (base 16)		ROI COMPUTER AG
+				Werner-von-Siemens-Str. 1
+				    
+				DE
+
+00-01-92   (hex)		Texas Digital Systems
+000192     (base 16)		Texas Digital Systems
+				400 Technology Parkway
+				College Station  TX  77845
+				US
+
+00-01-5C   (hex)		CADANT INC.
+00015C     (base 16)		CADANT INC.
+				4343 Commerce Court - Ste. #207
+				Lisle  IL  60532
+				US
+
+00-01-69   (hex)		Celestix Networks Pte Ltd.
+000169     (base 16)		Celestix Networks Pte Ltd.
+				18 Tannery Lane #05-03
+				  SINGAPORE  347780
+				SG
+
+00-01-6B   (hex)		LightChip, Inc.
+00016B     (base 16)		LightChip, Inc.
+				5 Industrial Way
+				Salem  NH  03079
+				US
+
+00-01-B6   (hex)		SAEJIN T&M Co., Ltd.
+0001B6     (base 16)		SAEJIN T&M Co., Ltd.
+				2nd Fl., Saejin Bldg., 689
+				    KOREA
+				KR
+
+00-01-AB   (hex)		Main Street Networks
+0001AB     (base 16)		Main Street Networks
+				4030 Moorpark Ave.
+				San Jose  CA  95117-1849
+				US
+
+00-01-45   (hex)		WINSYSTEMS, INC.
+000145     (base 16)		WINSYSTEMS, INC.
+				715 Stadium Drive
+				Arlington  TX  76011
+				US
+
+00-01-37   (hex)		IT Farm Corporation
+000137     (base 16)		IT Farm Corporation
+				Asashiseimei Fuchu Bldg. 11F
+				  183-0055  
+				JP
+
+00-01-3C   (hex)		TIW SYSTEMS
+00013C     (base 16)		TIW SYSTEMS
+				2211 Lawson Lane
+				Santa Clara  CA  95054
+				US
+
+00-01-33   (hex)		KYOWA Electronic Instruments C
+000133     (base 16)		KYOWA Electronic Instruments C
+				3-5-1, Cyofugaoka
+				Cyofu  Tokyo  
+				JP
+
+00-01-A5   (hex)		Nextcomm, Inc.
+0001A5     (base 16)		Nextcomm, Inc.
+				12413 Willows Road NE - Ste. #210
+				Kirkland  WA  98034
+				US
+
+00-01-90   (hex)		SMK-M
+000190     (base 16)		SMK-M
+				1055 Tierra Del Rey
+				Chula Vista  CA  91910
+				US
+
+00-01-4C   (hex)		Berkeley Process Control
+00014C     (base 16)		Berkeley Process Control
+				4124 Lakeside Dr
+				Richmond  CA  94806
+				US
+
+00-01-43   (hex)		Cisco Systems, Inc
+000143     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-01-4B   (hex)		Ennovate Networks, Inc.
+00014B     (base 16)		Ennovate Networks, Inc.
+				60 Codman Hill Road
+				Boxborough  MA  01719
+				US
+
+00-01-3D   (hex)		RiscStation Ltd.
+00013D     (base 16)		RiscStation Ltd.
+				168 Elliott Street
+				  UNITED  KINGDOM
+				GB
+
+00-01-20   (hex)		OSCILLOQUARTZ S.A.
+000120     (base 16)		OSCILLOQUARTZ S.A.
+				Rue Des Brevards 16
+				2002 Neuchatel    
+				CH
+
+00-30-46   (hex)		Controlled Electronic Manageme
+003046     (base 16)		Controlled Electronic Manageme
+				Unit 4 Ravenhill Business Park
+				Belfast    
+				IE
+
+00-30-98   (hex)		Global Converging Technologies
+003098     (base 16)		Global Converging Technologies
+				1800 Preston Park Blvd.
+				Plano  TX  75093
+				US
+
+00-30-0D   (hex)		MMC Technology, Inc.
+00300D     (base 16)		MMC Technology, Inc.
+				#1502, Seoul Venture Town, Aju Bldg
+				Seoul 135-080    
+				KR
+
+00-30-75   (hex)		ADTECH
+003075     (base 16)		ADTECH
+				RUE DU VAL ST LAMBERT 191 / i
+				 SERAING    4100
+				BE
+
+00-B0-69   (hex)		Honewell Oy
+00B069     (base 16)		Honewell Oy
+				P.O. Box 168, FIN-78201
+				    
+				FI
+
+00-B0-C2   (hex)		Cisco Systems, Inc
+00B0C2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-B0-3B   (hex)		HiQ Networks
+00B03B     (base 16)		HiQ Networks
+				2475 Augustine Drive
+				Santa Clara  CA  95054
+				US
+
+00-01-27   (hex)		OPEN Networks Pty Ltd
+000127     (base 16)		OPEN Networks Pty Ltd
+				Level 5, 342 Flinders Street
+				Melbourne    VIC 3000
+				AU
+
+00-01-0E   (hex)		Bri-Link Technologies Co., Ltd
+00010E     (base 16)		Bri-Link Technologies Co., Ltd
+				2F, No. 63, Chow-Tze Street
+				Taipei 114    
+				TW
+
+00-30-37   (hex)		Packard Bell Nec Services
+003037     (base 16)		Packard Bell Nec Services
+				299 avenue Patton, BP 645
+				49006 Angers Cedex 01    
+				FR
+
+00-30-57   (hex)		QTelNet, Inc.
+003057     (base 16)		QTelNet, Inc.
+				400 - 3115 12th Street NE
+				Calgary  Alberta  T2E 7J2
+				CA
+
+00-30-FC   (hex)		Terawave Communications, Inc.
+0030FC     (base 16)		Terawave Communications, Inc.
+				30695 Huntwood Avenue
+				Hayward  CA  94544
+				US
+
+00-B0-86   (hex)		LocSoft Limited
+00B086     (base 16)		LocSoft Limited
+				7 Bright Street
+				Clitheroe  Lancashire  BB7 1NW
+				GB
+
+00-30-A2   (hex)		Lightner Engineering
+0030A2     (base 16)		Lightner Engineering
+				8551 La Jolla Shores Dr
+				La Jolla  CA  92037
+				US
+
+00-30-42   (hex)		DeTeWe-Deutsche Telephonwerke
+003042     (base 16)		DeTeWe-Deutsche Telephonwerke
+				Zeughofstrasse 1
+				D-10997 Berlin    
+				DE
+
+00-B0-C7   (hex)		Tellabs Operations, Inc.
+00B0C7     (base 16)		Tellabs Operations, Inc.
+				One Tellabs Center
+				Naperville  IL  60563
+				US
+
+00-B0-2A   (hex)		ORSYS GmbH
+00B02A     (base 16)		ORSYS GmbH
+				Am Stadtgraben 25
+				D-88677 Markdorf    
+				DE
+
+00-01-04   (hex)		DVICO Co., Ltd.
+000104     (base 16)		DVICO Co., Ltd.
+				Kookmin Card B/D 6F 267-2
+				Sungnam-si Kyungki-do 463-050    
+				KR
+
+00-01-06   (hex)		Tews Datentechnik GmbH
+000106     (base 16)		Tews Datentechnik GmbH
+				Am Bahnhof 7
+				25469 Halstenbek    
+				DE
+
+00-01-09   (hex)		Nagano Japan Radio Co., Ltd.
+000109     (base 16)		Nagano Japan Radio Co., Ltd.
+				Shimohigano 1163, Inasato-machi
+				Nagano 381-2288    
+				JP
+
+00-02-9C   (hex)		3COM
+00029C     (base 16)		3COM
+				405 SPRING HILL ROAD
+				SHARON  NH  03458
+				US
+
+00-B0-19   (hex)		UTC CCS
+00B019     (base 16)		UTC CCS
+				791 Commerce Blvd
+				Boca Raton  FL  33497
+				US
+
+00-30-6F   (hex)		SEYEON TECH. CO., LTD.
+00306F     (base 16)		SEYEON TECH. CO., LTD.
+				NAMCHEON BLDG. 6F,
+				  KOREA  135-280
+				KR
+
+00-30-3D   (hex)		IVA CORPORATION
+00303D     (base 16)		IVA CORPORATION
+				142 NORTH RD STE R
+				SUDBURY  MA  01776
+				US
+
+00-30-F4   (hex)		STARDOT TECHNOLOGIES
+0030F4     (base 16)		STARDOT TECHNOLOGIES
+				6820-H ORANGE THORPE AVE.
+				BUENA PARK  CA  90620
+				US
+
+00-30-19   (hex)		Cisco Systems, Inc
+003019     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-76   (hex)		Akamba Corporation
+003076     (base 16)		Akamba Corporation
+				15595 Los Gatos Blvd.
+				Los Gatos  CA  95032
+				US
+
+00-30-EC   (hex)		BORGARDT
+0030EC     (base 16)		BORGARDT
+				DIESELSTR. 15
+				    
+				DE
+
+00-30-F3   (hex)		At Work Computers
+0030F3     (base 16)		At Work Computers
+				P.O. Box 947
+				Corvallis  OR  97339
+				US
+
+00-30-CC   (hex)		Tenor Networks, Inc.
+0030CC     (base 16)		Tenor Networks, Inc.
+				100 Nagog Park
+				Acton  MA  01720-3409
+				US
+
+00-30-B0   (hex)		Convergenet Technologies
+0030B0     (base 16)		Convergenet Technologies
+				2222 Trade Zone Boulevard
+				San Jose  CA  95131
+				US
+
+00-30-EB   (hex)		TURBONET COMMUNICATIONS, INC.
+0030EB     (base 16)		TURBONET COMMUNICATIONS, INC.
+				19F-1, NO. 171, SUNG-TEH ROAD
+				TAIPEI    
+				TW
+
+00-30-A1   (hex)		WEBGATE Inc.
+0030A1     (base 16)		WEBGATE Inc.
+				4F, Pika Bldg., 894-20, Hoyke 2-dong
+				Anyang-Si  Kyunggi-Do  
+				KR
+
+00-30-6A   (hex)		PENTA MEDIA CO., LTD.
+00306A     (base 16)		PENTA MEDIA CO., LTD.
+				E-504 Bundang Technopark,151
+				Seongnam  Gyeonggi-do  
+				KR
+
+00-30-86   (hex)		Transistor Devices, Inc.
+003086     (base 16)		Transistor Devices, Inc.
+				36A Newburgh Road
+				Hackettstown  NJ  07840
+				US
+
+00-30-44   (hex)		CradlePoint, Inc
+003044     (base 16)		CradlePoint, Inc
+				805 W. Franklin St.
+				Boise  ID  83702
+				US
+
+00-30-C2   (hex)		COMONE
+0030C2     (base 16)		COMONE
+				Parc De Marticot
+				33610 Cestas    
+				FR
+
+00-30-53   (hex)		Basler AG
+003053     (base 16)		Basler AG
+				An Der Strusbek 60-62
+				22926 Ahrensburg    
+				DE
+
+00-30-D2   (hex)		WIN TECHNOLOGIES, CO., LTD.
+0030D2     (base 16)		WIN TECHNOLOGIES, CO., LTD.
+				4F-6, No. 81, Sec. 1
+				Taipei    
+				TW
+
+00-30-97   (hex)		AB Regin
+003097     (base 16)		AB Regin
+				Box 366
+				SE-26123  Landskrona  
+				SE
+
+00-30-5F   (hex)		Hasselblad
+00305F     (base 16)		Hasselblad
+				Hejrevej 30
+				Copenhagen  NV  DK-2400
+				DK
+
+00-30-DC   (hex)		RIGHTECH CORPORATION
+0030DC     (base 16)		RIGHTECH CORPORATION
+				4F, NO. 351, CHUNG-SHUN RD.
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-30-25   (hex)		CHECKOUT COMPUTER SYSTEMS, LTD
+003025     (base 16)		CHECKOUT COMPUTER SYSTEMS, LTD
+				TOWNSEND FARM ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-30-12   (hex)		DIGITAL ENGINEERING LTD.
+003012     (base 16)		DIGITAL ENGINEERING LTD.
+				2 TRENCH ROAD, MALLUSK
+				  NORTHERN  
+				IE
+
+00-30-C6   (hex)		CONTROL SOLUTIONS, INC.
+0030C6     (base 16)		CONTROL SOLUTIONS, INC.
+				201 85TH AVENUE NW
+				MINNEAPOLIS  MN  55433
+				US
+
+00-30-D6   (hex)		MSC VERTRIEBS GMBH
+0030D6     (base 16)		MSC VERTRIEBS GMBH
+				INDUSTRIESTR. 16
+				    
+				DE
+
+00-30-41   (hex)		SAEJIN T & M CO., LTD.
+003041     (base 16)		SAEJIN T & M CO., LTD.
+				2ND FL., SAEJIN BLDG. 689
+				  135-230  KOREA
+				KR
+
+00-30-8C   (hex)		Quantum Corporation
+00308C     (base 16)		Quantum Corporation
+				10125 Federal Drive
+				Colorado Springs  CO  80908
+				US
+
+00-30-E3   (hex)		SEDONA NETWORKS CORP.
+0030E3     (base 16)		SEDONA NETWORKS CORP.
+				10A HEARST WAY
+				CANADA  K2L  2P4
+				CA
+
+00-30-BF   (hex)		MULTIDATA GMBH
+0030BF     (base 16)		MULTIDATA GMBH
+				Dieburger Str. 96a
+				    
+				DE
+
+00-D0-0F   (hex)		SPEECH DESIGN GMBH
+00D00F     (base 16)		SPEECH DESIGN GMBH
+				INDUSTRIESTR. 1
+				    
+				DE
+
+00-30-58   (hex)		API MOTION
+003058     (base 16)		API MOTION
+				45 HAZELWOOD DRIVE
+				AMHERST  NY  14228
+				US
+
+00-30-34   (hex)		SET ENGINEERING
+003034     (base 16)		SET ENGINEERING
+				15750 VINEYARD BLVD. STE. #100
+				MORGAN HILL  CA  95037
+				US
+
+00-30-4A   (hex)		Fraunhofer IPMS
+00304A     (base 16)		Fraunhofer IPMS
+				Maria-Reiche-Strasse 2
+				Dresden    01109
+				DE
+
+00-30-8D   (hex)		Pinnacle Systems, Inc.
+00308D     (base 16)		Pinnacle Systems, Inc.
+				Frankfurter Str. 3c
+				D-38122  Braunschweig  
+				DE
+
+00-30-A6   (hex)		VIANET TECHNOLOGIES, LTD.
+0030A6     (base 16)		VIANET TECHNOLOGIES, LTD.
+				8 HACHARASH STREET
+				    
+				IL
+
+00-D0-BF   (hex)		PIVOTAL TECHNOLOGIES
+00D0BF     (base 16)		PIVOTAL TECHNOLOGIES
+				70 S. LAKE AVENUE - STE. #900
+				PASADENA  CA  91101
+				US
+
+00-30-3C   (hex)		ONNTO CORP.
+00303C     (base 16)		ONNTO CORP.
+				12F-2,  NO. 161
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-30-24   (hex)		Cisco Systems, Inc
+003024     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-30-F6   (hex)		SECURELOGIX CORPORATION
+0030F6     (base 16)		SECURELOGIX CORPORATION
+				13750 SAN PEDRO
+				SAN ANTONIO  TX  78232
+				US
+
+00-D0-2F   (hex)		VLSI TECHNOLOGY INC.
+00D02F     (base 16)		VLSI TECHNOLOGY INC.
+				8375 S. RIVER PARKWAY
+				TEMPE  AZ  85284
+				US
+
+00-30-D8   (hex)		SITEK
+0030D8     (base 16)		SITEK
+				VIA MONTE FIORINO 9
+				    
+				IT
+
+00-30-16   (hex)		ISHIDA CO., LTD.
+003016     (base 16)		ISHIDA CO., LTD.
+				959-1 SHIMOMAGARI
+				    
+				JP
+
+00-D0-B1   (hex)		OMEGA ELECTRONICS SA
+00D0B1     (base 16)		OMEGA ELECTRONICS SA
+				ROUTE DE SOLEURE 68
+				    
+				CH
+
+00-D0-16   (hex)		SCM MICROSYSTEMS, INC.
+00D016     (base 16)		SCM MICROSYSTEMS, INC.
+				160 KNOWLES DRIVE
+				LOS GATOS  CA  95032
+				US
+
+00-D0-43   (hex)		ZONAL RETAIL DATA SYSTEMS
+00D043     (base 16)		ZONAL RETAIL DATA SYSTEMS
+				24 FORTH STREET
+				    SCOTLAND
+				GB
+
+00-D0-C1   (hex)		HARMONIC DATA SYSTEMS, LTD.
+00D0C1     (base 16)		HARMONIC DATA SYSTEMS, LTD.
+				10 BEIT SHAMAI STREET
+				  ISRAEL  67018
+				IL
+
+00-D0-AC   (hex)		Commscope, Inc
+00D0AC     (base 16)		Commscope, Inc
+				140 Vista Centre Drive
+				Forest  VA  24551
+				US
+
+00-D0-7C   (hex)		KOYO ELECTRONICS INC. CO.,LTD.
+00D07C     (base 16)		KOYO ELECTRONICS INC. CO.,LTD.
+				1-171 TENJIN-CHO KODAIRA
+				    
+				JP
+
+00-D0-BC   (hex)		Cisco Systems, Inc
+00D0BC     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-CB   (hex)		DASAN CO., LTD.
+00D0CB     (base 16)		DASAN CO., LTD.
+				DASAN Tower 7F, 49 Daewangpangyo-ro644beon-gil
+				Seonggnam-Si  Gyeoenggi-do  463-4000
+				KR
+
+00-D0-19   (hex)		DAINIPPON SCREEN CORPORATE
+00D019     (base 16)		DAINIPPON SCREEN CORPORATE
+				REPRESENTATIVES OF AMERICA,INC
+				IRVINE  CA  92614
+				US
+
+00-D0-35   (hex)		BEHAVIOR TECH. COMPUTER CORP.
+00D035     (base 16)		BEHAVIOR TECH. COMPUTER CORP.
+				20F-B, No.98, Sec. 1,
+				Sijhih City  Taipei County  22102
+				TW
+
+00-D0-DB   (hex)		MCQUAY INTERNATIONAL
+00D0DB     (base 16)		MCQUAY INTERNATIONAL
+				13600 INDUSTRIAL PARK BLVD.
+				MINNEAPOLIS  MN  55441
+				US
+
+00-D0-70   (hex)		LONG WELL ELECTRONICS CORP.
+00D070     (base 16)		LONG WELL ELECTRONICS CORP.
+				4F, NO. 59-1, TSAO DI WEI
+				TAIWAN 222  TAIWAN 222  R.O.C.
+				TW
+
+00-D0-29   (hex)		WAKEFERN FOOD CORPORATION
+00D029     (base 16)		WAKEFERN FOOD CORPORATION
+				230 RARITAN CENTER PARKWAY
+				EDISON  NJ  08837
+				US
+
+00-D0-C3   (hex)		VIVID TECHNOLOGY PTE, LTD.
+00D0C3     (base 16)		VIVID TECHNOLOGY PTE, LTD.
+				1003 BUKIT MERAH CENTRAL
+				    
+				SG
+
+00-D0-13   (hex)		PRIMEX AEROSPACE COMPANY
+00D013     (base 16)		PRIMEX AEROSPACE COMPANY
+				P.O. BOX 97009
+				REDMOND  WA  98073-9709
+				US
+
+00-D0-A3   (hex)		VOCAL DATA, INC.
+00D0A3     (base 16)		VOCAL DATA, INC.
+				1701 N GREENVILLE #304
+				RICHARDSON  TX  75081
+				US
+
+00-D0-7E   (hex)		KEYCORP LTD.
+00D07E     (base 16)		KEYCORP LTD.
+				P.O. BOX 199
+				    
+				AU
+
+00-D0-20   (hex)		AIM SYSTEM, INC.
+00D020     (base 16)		AIM SYSTEM, INC.
+				4TH FLOOR CHUNGWOO B/D 219-1
+				    KOREA
+				KR
+
+00-D0-C8   (hex)		Prevas A/S
+00D0C8     (base 16)		Prevas A/S
+				Lyskær 3EF
+				DK-2730  Herlev  
+				DK
+
+00-50-17   (hex)		RSR S.R.L.
+005017     (base 16)		RSR S.R.L.
+				VIA SINIGAGLIA, 38
+				  22075  
+				IT
+
+00-50-65   (hex)		TDK-Lambda Corporation
+005065     (base 16)		TDK-Lambda Corporation
+				36-1 Kasuminosato
+				Ami-Machi  Inashiki-Gun Ibaraki,  300-0396
+				JP
+
+00-50-B9   (hex)		XITRON TECHNOLOGIES, INC.
+0050B9     (base 16)		XITRON TECHNOLOGIES, INC.
+				6295-D FERRIS SQUARE
+				SAN DIEGO  CA  92121
+				US
+
+00-50-6B   (hex)		SPX-ATEG
+00506B     (base 16)		SPX-ATEG
+				802 S. MAIN STREET
+				WAYLAND  MI  49348
+				US
+
+00-D0-76   (hex)		Bank of America
+00D076     (base 16)		Bank of America
+				1100 Merrill Drive
+				Pennington  NJ  08534
+				US
+
+00-D0-51   (hex)		O2 MICRO, INC.
+00D051     (base 16)		O2 MICRO, INC.
+				2901 TASMAN DRIVE, STE.#205
+				SANTA CLARA  CA  95054
+				US
+
+00-D0-BB   (hex)		Cisco Systems, Inc
+00D0BB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-6E   (hex)		TRENDVIEW RECORDERS LTD.
+00D06E     (base 16)		TRENDVIEW RECORDERS LTD.
+				4 AIRFIELD WAY
+				  UNITED  KINGDOM
+				GB
+
+00-D0-5C   (hex)		KATHREIN TechnoTrend GmbH
+00D05C     (base 16)		KATHREIN TechnoTrend GmbH
+				Ing.- Anton-Kathrein Str. 2
+				    
+				DE
+
+00-D0-EA   (hex)		NEXTONE COMMUNICATIONS, INC.
+00D0EA     (base 16)		NEXTONE COMMUNICATIONS, INC.
+				9700 GREAT SENECA HGHWY
+				ROCKVILLE  MD  20850
+				US
+
+00-D0-64   (hex)		MULTITEL
+00D064     (base 16)		MULTITEL
+				2905 RUE DE CELLES
+				CANADA  CANADA  G2C-1W7
+				CA
+
+00-D0-5E   (hex)		STRATABEAM TECHNOLOGY, INC.
+00D05E     (base 16)		STRATABEAM TECHNOLOGY, INC.
+				1943 LANDINGS DRIVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-D0-AA   (hex)		CHASE COMMUNICATIONS
+00D0AA     (base 16)		CHASE COMMUNICATIONS
+				ST. LEONARDS ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-D0-5D   (hex)		INTELLIWORXX, INC.
+00D05D     (base 16)		INTELLIWORXX, INC.
+				1819 MAIN STREET,  STE #1101
+				SARASOTA  FL  34236
+				US
+
+00-D0-A1   (hex)		OSKAR VIERLING GMBH + CO. KG
+00D0A1     (base 16)		OSKAR VIERLING GMBH + CO. KG
+				PRETZFELDER STR. 21
+				    
+				DE
+
+00-D0-06   (hex)		Cisco Systems, Inc
+00D006     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-2A   (hex)		Voxent Systems Ltd.
+00D02A     (base 16)		Voxent Systems Ltd.
+				Unit 2, Rowan House
+				Chippenham  Wiltshire  SN14 0SQ
+				GB
+
+00-D0-8F   (hex)		ARDENT TECHNOLOGIES, INC.
+00D08F     (base 16)		ARDENT TECHNOLOGIES, INC.
+				250 N. WOLFE ROAD
+				SUNNYVALE  CA  94086
+				US
+
+00-D0-FA   (hex)		Thales e-Security Ltd.
+00D0FA     (base 16)		Thales e-Security Ltd.
+				Meadow View House, Crendon Industrial Estate
+				Aylesbury  Buckinghamshire  HP18 9EQ
+				GB
+
+00-D0-EB   (hex)		LIGHTERA NETWORKS, INC.
+00D0EB     (base 16)		LIGHTERA NETWORKS, INC.
+				10201 BUBB ROAD
+				CUPERTINO  CA  95014
+				US
+
+00-50-A1   (hex)		CARLO GAVAZZI, INC.
+0050A1     (base 16)		CARLO GAVAZZI, INC.
+				222 PENNBRIGHT DR. - STE.#210
+				HOUSTON  TX  77090
+				US
+
+00-D0-C0   (hex)		Cisco Systems, Inc
+00D0C0     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-D0-68   (hex)		IWILL CORPORATION
+00D068     (base 16)		IWILL CORPORATION
+				NO.10, WU-CHUAN 3 RD,
+				    TAIWAN
+				TW
+
+00-50-29   (hex)		1394 PRINTER WORKING GROUP
+005029     (base 16)		1394 PRINTER WORKING GROUP
+				P.O. BOX 23158
+				SAN JOSE  CA  95153
+				US
+
+00-50-81   (hex)		MURATA MACHINERY, LTD.
+005081     (base 16)		MURATA MACHINERY, LTD.
+				136, TAKEDA-MUKAISHIRO-CHO
+				FUSHIMI-KU, KYOTO 612-8686    
+				JP
+
+00-50-AC   (hex)		MAPLE COMPUTER CORPORATION
+0050AC     (base 16)		MAPLE COMPUTER CORPORATION
+				2F, NO. 184, SEC. 2
+				Taipei    
+				TJ
+
+00-50-49   (hex)		Arbor Networks Inc
+005049     (base 16)		Arbor Networks Inc
+				6 Omni Way
+				Chelmsford  MA  01824
+				US
+
+00-50-0D   (hex)		SATORI ELECTORIC CO., LTD.
+00500D     (base 16)		SATORI ELECTORIC CO., LTD.
+				TIGUSADAI 38-8  MIDORI-KU
+				YOKOHAMA, KANAGAWA    
+				JP
+
+00-50-A3   (hex)		TransMedia Communications, Inc.
+0050A3     (base 16)		TransMedia Communications, Inc.
+				20 GREAT OAKS BLVD., #210
+				SAN JOSE  CA  95119
+				US
+
+00-50-A4   (hex)		IO TECH, INC.
+0050A4     (base 16)		IO TECH, INC.
+				25971 CANNON ROAD
+				CLEVELAND  OH  44146
+				US
+
+00-50-5C   (hex)		TUNDO CORPORATION
+00505C     (base 16)		TUNDO CORPORATION
+				7 GIBOREI ISRAEL STREET
+				    
+				IL
+
+00-50-B3   (hex)		VOICEBOARD CORPORATION
+0050B3     (base 16)		VOICEBOARD CORPORATION
+				3151 WEST FIFTH STREET
+				OXNARD  CA  93030
+				US
+
+00-50-8C   (hex)		RSI SYSTEMS
+00508C     (base 16)		RSI SYSTEMS
+				5555 W. 78TH STREET, Suite F
+				EDINA  MN  55439
+				US
+
+00-50-E1   (hex)		NS TECH ELECTRONICS SDN BHD
+0050E1     (base 16)		NS TECH ELECTRONICS SDN BHD
+				No. 37, Lorong 23, Geylang
+				Singapore 388371    
+				SG
+
+00-50-DE   (hex)		SIGNUM SYSTEMS CORP.
+0050DE     (base 16)		SIGNUM SYSTEMS CORP.
+				1211 Flynn Rd,
+				Camarillo  CA  93021
+				US
+
+00-50-75   (hex)		KESTREL SOLUTIONS
+005075     (base 16)		KESTREL SOLUTIONS
+				2370 CHARLESTON ROAD
+				MT. VIEW  CA  94043
+				US
+
+00-50-ED   (hex)		ANDA NETWORKS
+0050ED     (base 16)		ANDA NETWORKS
+				2921 COPPER ROAD
+				SANTA CLARA  CA  95051
+				US
+
+00-50-96   (hex)		SALIX TECHNOLOGIES, INC.
+005096     (base 16)		SALIX TECHNOLOGIES, INC.
+				904 WIND RIVER LANE- STE. #101
+				GAITHERSBURG  MD  20878
+				US
+
+00-50-12   (hex)		CBL - GMBH
+005012     (base 16)		CBL - GMBH
+				DARMSTAEDTER STR. 81
+				D-64839 MUENSTER    
+				DE
+
+00-50-F2   (hex)		MICROSOFT CORP.
+0050F2     (base 16)		MICROSOFT CORP.
+				ONE MICROSOFT WAY
+				REDMOND  WA  98052-6399
+				US
+
+00-50-4A   (hex)		ELTECO A.S.
+00504A     (base 16)		ELTECO A.S.
+				ROSINSKA CESTA  P.O. BOX C-9
+				    
+				SK
+
+00-50-C1   (hex)		GEMFLEX NETWORKS, LTD.
+0050C1     (base 16)		GEMFLEX NETWORKS, LTD.
+				230-6651 FRASERWOOD PL.
+				CANADA  V6W  1J3
+				CA
+
+00-50-CF   (hex)		VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE
+0050CF     (base 16)		VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE
+				210 YADI OFFICE BUILDING
+				BEIJING 100088    
+				CN
+
+00-50-24   (hex)		NAVIC SYSTEMS, INC.
+005024     (base 16)		NAVIC SYSTEMS, INC.
+				74 CRESCENT STREET
+				  NEEDHAM  MA
+				US
+
+00-90-BD   (hex)		OMNIA COMMUNICATIONS, INC.
+0090BD     (base 16)		OMNIA COMMUNICATIONS, INC.
+				100 NICKERSON ROAD
+				MARLBOROUGH  MA  01752
+				US
+
+00-90-B4   (hex)		WILLOWBROOK TECHNOLOGIES
+0090B4     (base 16)		WILLOWBROOK TECHNOLOGIES
+				7120 HAYVENHURST AVE.-STE.#401
+				VAN NUYS  CA  91406
+				US
+
+00-90-03   (hex)		APLIO
+009003     (base 16)		APLIO
+				18 Avenue Du 8 Mai 1945
+				    
+				FR
+
+00-90-31   (hex)		MYSTICOM, LTD.
+009031     (base 16)		MYSTICOM, LTD.
+				P.O. 8364
+				NATANIA 42504    
+				IL
+
+00-90-9D   (hex)		NovaTech Process Solutions, LLC
+00909D     (base 16)		NovaTech Process Solutions, LLC
+				11500 Cronridge Drive
+				Owings Mills  MD  21117
+				US
+
+00-90-DD   (hex)		MIHARU COMMUNICATIONS Inc
+0090DD     (base 16)		MIHARU COMMUNICATIONS Inc
+				
+				KANAGAWA    
+				JP
+
+00-90-28   (hex)		NIPPON SIGNAL CO., LTD.
+009028     (base 16)		NIPPON SIGNAL CO., LTD.
+				11 HIRAIDE-KOGIO-DANCHI
+				UISUNOMIYA TOCHIGI 321-8651    
+				JP
+
+00-90-7D   (hex)		Lake Communications
+00907D     (base 16)		Lake Communications
+				1 Westbrook, Milton Road
+				    
+				IE
+
+00-90-C9   (hex)		DPAC Technologies
+0090C9     (base 16)		DPAC Technologies
+				7321 Lincoln Way
+				Garden Grove  CA  92841
+				US
+
+00-50-7B   (hex)		MERLOT COMMUNICATIONS
+00507B     (base 16)		MERLOT COMMUNICATIONS
+				BERKSHIRE CORPORATE PARK
+				BETHEL  CT  06801
+				US
+
+00-50-CD   (hex)		DIGIANSWER A/S
+0050CD     (base 16)		DIGIANSWER A/S
+				SKALHUSE 5
+				    
+				DK
+
+00-50-2D   (hex)		ACCEL, INC.
+00502D     (base 16)		ACCEL, INC.
+				1F, NO. 7, R&D 1ST ROAD
+				HSINCHU    
+				TW
+
+00-50-3A   (hex)		DATONG ELECTRONICS LTD.
+00503A     (base 16)		DATONG ELECTRONICS LTD.
+				CLAYTON WOOD CLOSE
+				Leeds LS16 6QE    
+				GB
+
+00-50-87   (hex)		TERASAKI ELECTRIC CO., LTD.
+005087     (base 16)		TERASAKI ELECTRIC CO., LTD.
+				7-2-10 HANNAN-CHO ABENO-KU
+				OSAKA, 545-0021    
+				JP
+
+00-50-26   (hex)		COSYSTEMS, INC.
+005026     (base 16)		COSYSTEMS, INC.
+				1263 OAKMEAD PARKWAY
+				SUNNYVALE  CA  94086
+				US
+
+00-90-2C   (hex)		DATA & CONTROL EQUIPMENT LTD.
+00902C     (base 16)		DATA & CONTROL EQUIPMENT LTD.
+				COUNTY FARM, WENDOVER RD.
+				BUCKS. HP22 STA    
+				GB
+
+00-90-1D   (hex)		PEC (NZ) LTD.
+00901D     (base 16)		PEC (NZ) LTD.
+				2 STATION ROAD
+				MARTON    
+				NZ
+
+00-90-97   (hex)		Sycamore Networks
+009097     (base 16)		Sycamore Networks
+				220 Mill Rd
+				Chelmsford  MA  01824
+				US
+
+00-90-25   (hex)		BAE Systems Australia (Electronic Systems) Pty Ltd
+009025     (base 16)		BAE Systems Australia (Electronic Systems) Pty Ltd
+				2 Second Ave
+				Mawson Lakes  South Australia  5095
+				AU
+
+00-90-4C   (hex)		Epigram, Inc.
+00904C     (base 16)		Epigram, Inc.
+				870 West Maude Ave.
+				Sunnyvale  CA  94086
+				US
+
+00-90-84   (hex)		ATECH SYSTEM
+009084     (base 16)		ATECH SYSTEM
+				4F DAEBOONG BLDG. 1451-78
+				 SEOUL  137-070    
+				KR
+
+00-90-6A   (hex)		TURNSTONE SYSTEMS, INC.
+00906A     (base 16)		TURNSTONE SYSTEMS, INC.
+				274 Ferguson Drive
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-90-87   (hex)		ITIS
+009087     (base 16)		ITIS
+				CENTRE ESPACE PERFORMANCE
+				35769 SAINT-GREGOIRE CEDEX    
+				FR
+
+00-90-51   (hex)		ULTIMATE TECHNOLOGY CORP.
+009051     (base 16)		ULTIMATE TECHNOLOGY CORP.
+				100 RAWSON ROAD
+				VICTOR  NY  14564
+				US
+
+00-90-26   (hex)		ADVANCED SWITCHING COMMUNICATIONS, INC.
+009026     (base 16)		ADVANCED SWITCHING COMMUNICATIONS, INC.
+				8330 BOONE BOULEVARD--5TH FL.
+				VIENNA  VA  22182
+				US
+
+00-90-D3   (hex)		GIESECKE & DEVRIENT GmbH
+0090D3     (base 16)		GIESECKE & DEVRIENT GmbH
+				PRINZREGENTENSTRASSE 159
+				D-81677  MUNCHEN    
+				DE
+
+00-90-67   (hex)		WalkAbout Computers, Inc.
+009067     (base 16)		WalkAbout Computers, Inc.
+				2655 N. OCEAN DRIVE--STE. #510
+				SINGER ISLAND  FL  33404
+				US
+
+00-90-2A   (hex)		COMMUNICATION DEVICES, INC.
+00902A     (base 16)		COMMUNICATION DEVICES, INC.
+				85 Fulton Street
+				Boonton  NJ  07005-1912
+				US
+
+00-90-0D   (hex)		Overland Storage Inc.
+00900D     (base 16)		Overland Storage Inc.
+				9112 Spectrum Center Blvd
+				SAN DIEGO  CA  92123
+				US
+
+00-90-CF   (hex)		NORTEL
+0090CF     (base 16)		NORTEL
+				250 SIDNEY STREET
+				Belleville  Ontario K8N 5B7  
+				CA
+
+00-90-72   (hex)		SIMRAD AS
+009072     (base 16)		SIMRAD AS
+				P.O. BOX 111
+				  3191 HORTEN  
+				NO
+
+00-90-2F   (hex)		NETCORE SYSTEMS, INC.
+00902F     (base 16)		NETCORE SYSTEMS, INC.
+				187 BALLARDVALE STREET
+				WILMINGTON  MA  01887
+				US
+
+00-90-98   (hex)		SBC DESIGNS, INC.
+009098     (base 16)		SBC DESIGNS, INC.
+				3077-H LEEMAN FERRY ROAD
+				HUNTSVILLE  AL  35801
+				US
+
+00-90-45   (hex)		Marconi Communications
+009045     (base 16)		Marconi Communications
+				1000 Fore Drive
+				Warrendale  PA  15086-7502
+				US
+
+00-90-36   (hex)		ens, inc.
+009036     (base 16)		ens, inc.
+				P.O. BOX 19207
+				RALEIGH  NC  27619
+				US
+
+00-90-8B   (hex)		Tattile SRL
+00908B     (base 16)		Tattile SRL
+				2600 Fernbrook Lane
+				Plymouth  MN  55447
+				US
+
+00-90-44   (hex)		ASSURED DIGITAL, INC.
+009044     (base 16)		ASSURED DIGITAL, INC.
+				9-11 GOLDSMITH ST.
+				LITTLETON  MA  01460
+				US
+
+00-90-91   (hex)		DigitalScape, Inc.
+009091     (base 16)		DigitalScape, Inc.
+				6 MORGAN  - STE.#100
+				IRVINE  CA  92618
+				US
+
+00-90-7E   (hex)		VETRONIX CORP.
+00907E     (base 16)		VETRONIX CORP.
+				2030 ALAMEDE PADRE SERRA
+				SANTA BARBARA  CA  93103
+				US
+
+00-90-50   (hex)		Teleste Corporation
+009050     (base 16)		Teleste Corporation
+				Telestenkatu 1
+				LITTOINEN    FI-20660
+				FI
+
+00-90-4D   (hex)		SPEC S.A.
+00904D     (base 16)		SPEC S.A.
+				CASP 172 3-B
+				08013 BARCELONA    
+				ES
+
+00-90-FD   (hex)		CopperCom, Inc.
+0090FD     (base 16)		CopperCom, Inc.
+				3255-1 SCOTT BLVD.,--STE.#103
+				SANTA CLARA  CA  95054
+				US
+
+00-90-39   (hex)		SHASTA NETWORKS
+009039     (base 16)		SHASTA NETWORKS
+				249 HUMBOLDT COURT
+				SUNNYVALE  CA  94089-1300
+				US
+
+00-90-FC   (hex)		NETWORK COMPUTING DEVICES
+0090FC     (base 16)		NETWORK COMPUTING DEVICES
+				301 RAVENDALE DRIVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-90-14   (hex)		ROTORK INSTRUMENTS, LTD.
+009014     (base 16)		ROTORK INSTRUMENTS, LTD.
+				CHAUL END LANE
+				LU4 8EZ  England  
+				GB
+
+00-90-8D   (hex)		VICKERS ELECTRONICS SYSTEMS
+00908D     (base 16)		VICKERS ELECTRONICS SYSTEMS
+				1151 W. MASON-MORROW RD.
+				LEBANON  OH  45036
+				US
+
+00-90-42   (hex)		ECCS, Inc.
+009042     (base 16)		ECCS, Inc.
+				ONE SHEILA DRIVE
+				TINTON FALLS  NJ  07724
+				US
+
+00-90-33   (hex)		INNOVAPHONE AG
+009033     (base 16)		INNOVAPHONE AG
+				Boeblinger Str. 76
+				SINDELFINGEN    D71065
+				DE
+
+00-90-02   (hex)		ALLGON AB
+009002     (base 16)		ALLGON AB
+				GARDATORGET 1
+				412 50 GOTEBORG    
+				SE
+
+00-10-D4   (hex)		STORAGE COMPUTER CORPORATION
+0010D4     (base 16)		STORAGE COMPUTER CORPORATION
+				11 RIVERSIDE STREET
+				NASHUA  NH  03062
+				US
+
+00-06-29   (hex)		IBM Corp
+000629     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-10-A9   (hex)		ADHOC TECHNOLOGIES
+0010A9     (base 16)		ADHOC TECHNOLOGIES
+				1150 FIRST STREET
+				SAN JOSE  CA  95112
+				US
+
+00-10-8A   (hex)		TeraLogic, Inc.
+00108A     (base 16)		TeraLogic, Inc.
+				707 CALIFORNIA STREET
+				MOUNTAIN VIEW  CA  94041
+				US
+
+00-10-24   (hex)		NAGOYA ELECTRIC WORKS CO., LTD
+001024     (base 16)		NAGOYA ELECTRIC WORKS CO., LTD
+				29-1 SHINODA, MIWA-CHO
+				AMA-GUN, AICHI 490-12    
+				JP
+
+00-10-D6   (hex)		Exelis
+0010D6     (base 16)		Exelis
+				7310 Innovation Blvd., M/S 536
+				Ft Wayne  IN  46818
+				US
+
+00-10-48   (hex)		HTRC AUTOMATION, INC.
+001048     (base 16)		HTRC AUTOMATION, INC.
+				285 LAVAL STREET
+				QUEBEC J0B 1H0    
+				CA
+
+00-10-97   (hex)		WinNet Metropolitan Communications Systems, Inc.
+001097     (base 16)		WinNet Metropolitan Communications Systems, Inc.
+				661 EAST ARQUES AVE.
+				SUNNYVALE  CA  94086
+				US
+
+00-10-85   (hex)		POLARIS COMMUNICATIONS, INC.
+001085     (base 16)		POLARIS COMMUNICATIONS, INC.
+				10200 SW ALLEN BLVD.
+				BEAVERTON  OR  97005
+				US
+
+00-10-0C   (hex)		ITO CO., LTD.
+00100C     (base 16)		ITO CO., LTD.
+				8-2 MIYANOSHITA-CHO
+				HIRAKATA-CITY, OSAKA    
+				JP
+
+00-10-06   (hex)		Thales Contact Solutions Ltd.
+001006     (base 16)		Thales Contact Solutions Ltd.
+				Tolbar Way
+				Southampton, SO30 2ZP    
+				GB
+
+00-90-09   (hex)		I Controls, Inc.
+009009     (base 16)		I Controls, Inc.
+				2nd Fl, I'Park 302, 11 Jeongja-Dong,
+				Seongnam  Gyeonggi-Do  463-859
+				KR
+
+00-90-8E   (hex)		Nortel Networks Broadband Access
+00908E     (base 16)		Nortel Networks Broadband Access
+				39660 Eureka Drive
+				Newark  CA  94560
+				US
+
+00-90-7C   (hex)		DIGITALCAST, INC.
+00907C     (base 16)		DIGITALCAST, INC.
+				503, ILKWANG BLDG., 1656-2
+				SEOCHO-KU   SEOUL  
+				KR
+
+00-01-FE   (hex)		DIGITAL EQUIPMENT CORPORATION
+0001FE     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				301 ROCKRIMMON BLVD, SOUTH
+				COLORADO SPRINGS  CO  80919
+				US
+
+00-90-BE   (hex)		IBC/INTEGRATED BUSINESS COMPUTERS
+0090BE     (base 16)		IBC/INTEGRATED BUSINESS COMPUTERS
+				2685 C PARK CENTER DRIVE
+				SIMI VALLEY  CA  93065
+				US
+
+00-10-3C   (hex)		IC ENSEMBLE, INC.
+00103C     (base 16)		IC ENSEMBLE, INC.
+				3255-2 SCOTT BLVD.--STE.#105
+				SANTA CLARA  CA  95054
+				US
+
+00-10-19   (hex)		SIRONA DENTAL SYSTEMS GmbH & Co. KG
+001019     (base 16)		SIRONA DENTAL SYSTEMS GmbH & Co. KG
+				FABRIKSTRASSE 31
+				64625 BENSHEIM    
+				DE
+
+00-90-DE   (hex)		CARDKEY SYSTEMS, INC.
+0090DE     (base 16)		CARDKEY SYSTEMS, INC.
+				1757 TAPO CANYON ROAD
+				SIMI VALLEY  CA  93063
+				US
+
+00-90-6B   (hex)		APPLIED RESOURCES, INC.
+00906B     (base 16)		APPLIED RESOURCES, INC.
+				9821 WIDMER ROAD
+				LENEXA  KS  66215-1239
+				US
+
+00-10-E2   (hex)		ArrayComm, Inc.
+0010E2     (base 16)		ArrayComm, Inc.
+				3141 ZANKER ROAD
+				SAN JOSE  CA  95134
+				US
+
+00-10-D2   (hex)		NITTO TSUSHINKI CO., LTD
+0010D2     (base 16)		NITTO TSUSHINKI CO., LTD
+				7-27-11, TODOROKI, SETAGAYA-KU
+				TOKYO 151    
+				JP
+
+00-10-D9   (hex)		IBM JAPAN, FUJISAWA MT+D
+0010D9     (base 16)		IBM JAPAN, FUJISAWA MT+D
+				KIRIHARA-CHO 1, FUJISAWA CITY
+				KANAGAWA 252    
+				JP
+
+00-90-66   (hex)		Troika Networks, Inc.
+009066     (base 16)		Troika Networks, Inc.
+				2829 Townsgate Road,
+				Westlake Village  CA  91361
+				US
+
+00-10-94   (hex)		Performance Analysis Broadband, Spirent plc
+001094     (base 16)		Performance Analysis Broadband, Spirent plc
+				27349 Agoura Road
+				Calabasas Hills  CA  91301
+				US
+
+00-10-50   (hex)		RION CO., LTD.
+001050     (base 16)		RION CO., LTD.
+				3-20-41 HIGASHIMOTOMACHI
+				KOKUBUNJI, TOKYO 185    
+				JP
+
+00-10-9C   (hex)		M-SYSTEM CO., LTD.
+00109C     (base 16)		M-SYSTEM CO., LTD.
+				1-1-25 SHIN URASHIMA CHOU
+				 YOKOHAMA 221    
+				JP
+
+00-10-CE   (hex)		VOLAMP, LTD.
+0010CE     (base 16)		VOLAMP, LTD.
+				UNIT 3 RIVERSIDE BUSINESS PARK
+				FARNHAM, SURREY  ENGLAND  
+				GB
+
+00-10-B2   (hex)		COACTIVE AESTHETICS
+0010B2     (base 16)		COACTIVE AESTHETICS
+				4000 BRIDGEWAY - STE. #303
+				SAUSALITA  CA  94965
+				US
+
+00-10-5F   (hex)		ZODIAC DATA SYSTEMS
+00105F     (base 16)		ZODIAC DATA SYSTEMS
+				5 Av Des Andes
+				Les Ulis    91940
+				FR
+
+00-10-3E   (hex)		NETSCHOOLS CORPORATION
+00103E     (base 16)		NETSCHOOLS CORPORATION
+				2003 LANDINGS DRIVE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-10-CB   (hex)		FACIT K.K.
+0010CB     (base 16)		FACIT K.K.
+				HIMEI NIHOMBASHI BLDG. 3F
+				CHUO-KU, TOKYO 103    
+				JP
+
+00-10-E0   (hex)		Oracle Corporation 
+0010E0     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+00-10-7C   (hex)		P-COM, INC.
+00107C     (base 16)		P-COM, INC.
+				3175 S. WINCHESTER BLVD.
+				CAMPBELL  CA  95008
+				US
+
+00-10-BD   (hex)		THE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)
+0010BD     (base 16)		THE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)
+				1-1-12 Shiba Kouen, Minato-ku
+				MINATO-KU,    TOKYO  105-0011
+				JP
+
+00-10-08   (hex)		VIENNA SYSTEMS CORPORATION
+001008     (base 16)		VIENNA SYSTEMS CORPORATION
+				6651 FRASERWOOD PLACE
+				RICHMOND, B.C. V6W 1J3    
+				CA
+
+00-10-D1   (hex)		Top Layer Networks, Inc.
+0010D1     (base 16)		Top Layer Networks, Inc.
+				4 MECHANIC ST.- STE#212
+				NATICK  MA  01760
+				US
+
+00-10-6A   (hex)		DIGITAL MICROWAVE CORPORATION
+00106A     (base 16)		DIGITAL MICROWAVE CORPORATION
+				170 ROSE ORCHARD WAY
+				SAN JOSE  CA  95134
+				US
+
+00-10-6F   (hex)		TRENTON TECHNOLOGY INC.
+00106F     (base 16)		TRENTON TECHNOLOGY INC.
+				2350 CENTENNIAL DRIVE
+				GAINESVILLE  GA  30504
+				US
+
+00-10-34   (hex)		GNP Computers
+001034     (base 16)		GNP Computers
+				555 E.Huntington Drive
+				Monrovia  CA  91016
+				US
+
+00-10-44   (hex)		InnoLabs Corporation
+001044     (base 16)		InnoLabs Corporation
+				2F-4, NO. 16, LANE 609, CHUNG-HSIN RD.
+				Taipei Hsien    
+				TW
+
+00-10-A1   (hex)		KENDIN SEMICONDUCTOR, INC.
+0010A1     (base 16)		KENDIN SEMICONDUCTOR, INC.
+				1550 S. BASCOM AVE., STE. #250
+				CAMPBELL  CA  95008
+				US
+
+00-10-A8   (hex)		RELIANCE COMPUTER CORP.
+0010A8     (base 16)		RELIANCE COMPUTER CORP.
+				3032 BUNKER HILL LANE
+				SANTA CLARA  CA  95054
+				US
+
+00-10-6E   (hex)		TADIRAN COM. LTD.
+00106E     (base 16)		TADIRAN COM. LTD.
+				26 HASHOFTIM ST.
+				HOLON  58102    
+				IL
+
+00-10-9A   (hex)		NETLINE
+00109A     (base 16)		NETLINE
+				7, Rue de Bievres
+				92140 CLAMART    
+				FR
+
+00-10-89   (hex)		WebSonic
+001089     (base 16)		WebSonic
+				3466 EDWARD AVE.
+				SANTA CLARA  CA  95054
+				US
+
+00-10-E6   (hex)		APPLIED INTELLIGENT SYSTEMS, INC.
+0010E6     (base 16)		APPLIED INTELLIGENT SYSTEMS, INC.
+				3923 RANCHERO DRIVE
+				ANN ARBOR  MI  48108
+				US
+
+00-10-3B   (hex)		HIPPI NETWORKING FORUM
+00103B     (base 16)		HIPPI NETWORKING FORUM
+				PO BOX 10173
+				ALBUQUERQUE  NM  87184-0173
+				US
+
+00-E0-83   (hex)		JATO TECHNOLOGIES, INC.
+00E083     (base 16)		JATO TECHNOLOGIES, INC.
+				505 EAST HUNTLAND DR. STE #550
+				AUSTIN  TX  78752
+				US
+
+00-E0-72   (hex)		LYNK
+00E072     (base 16)		LYNK
+				RABIN BUILDING
+				D.N. MISGAV 201    
+				IL
+
+00-E0-AD   (hex)		EES TECHNOLOGY, LTD.
+00E0AD     (base 16)		EES TECHNOLOGY, LTD.
+				25 EASTWAYS
+				WITHAM, ESSEX, CM8 3AL    
+				GB
+
+00-E0-94   (hex)		OSAI SRL
+00E094     (base 16)		OSAI SRL
+				VIA TORINO
+				603-IVREA (TO)    
+				IT
+
+00-E0-32   (hex)		MISYS FINANCIAL SYSTEMS, LTD.
+00E032     (base 16)		MISYS FINANCIAL SYSTEMS, LTD.
+				BUCKHOLT DRIVE,
+				WARNDON, WORCESTER WR49SR    
+				GB
+
+00-E0-C0   (hex)		SEIWA ELECTRIC MFG. CO., LTD.
+00E0C0     (base 16)		SEIWA ELECTRIC MFG. CO., LTD.
+				86 TARADA SHIN-IKE,
+				KYOTO PREFECTURE    
+				JP
+
+00-E0-D1   (hex)		TELSIS LIMITED
+00E0D1     (base 16)		TELSIS LIMITED
+				16 BARNES WALLACE ROAD
+				FAREHAM, HAMPSHIRE PO15 5TT  ENGLAND  
+				GB
+
+00-E0-F0   (hex)		ABLER TECHNOLOGY, INC.
+00E0F0     (base 16)		ABLER TECHNOLOGY, INC.
+				4F, NO. 54  SEC. 4
+				TAIPEI    
+				TW
+
+00-E0-02   (hex)		CROSSROADS SYSTEMS, INC.
+00E002     (base 16)		CROSSROADS SYSTEMS, INC.
+				9390 RESEARCH BLVD.
+				AUSTIN  TX  78759
+				US
+
+00-E0-D6   (hex)		COMPUTER & COMMUNICATION RESEARCH LAB.
+00E0D6     (base 16)		COMPUTER & COMMUNICATION RESEARCH LAB.
+				
+				CHUTUNG, HSINCHU    
+				TW
+
+00-E0-74   (hex)		TIERNAN COMMUNICATIONS, INC.
+00E074     (base 16)		TIERNAN COMMUNICATIONS, INC.
+				11025 ROSELLE ST.
+				SAN DIEGO  CA  92121
+				US
+
+00-E0-D9   (hex)		TAZMO CO., LTD.
+00E0D9     (base 16)		TAZMO CO., LTD.
+				6186 KINOKO, IBARA-SHI
+				OKAYAMA 715    
+				JP
+
+00-E0-55   (hex)		INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A.
+00E055     (base 16)		INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A.
+				CL. PIQUER NO.3
+				28033 MADRID    
+				ES
+
+00-E0-B4   (hex)		TECHNO SCOPE CO., LTD.
+00E0B4     (base 16)		TECHNO SCOPE CO., LTD.
+				13-6-7 KISHIMATI URAWASI
+				SAITAMA 336    
+				JP
+
+00-E0-71   (hex)		EPIS MICROCOMPUTER
+00E071     (base 16)		EPIS MICROCOMPUTER
+				LAUTLINGER STRASSE 147
+				72458 ALBSTADT    
+				DE
+
+00-E0-66   (hex)		ProMax Systems, Inc.
+00E066     (base 16)		ProMax Systems, Inc.
+				16 TECHNOLOGY DRIVE--BLDG.#106
+				IRVINE  CA  92656
+				US
+
+00-E0-93   (hex)		ACKFIN NETWORKS
+00E093     (base 16)		ACKFIN NETWORKS
+				575 N. PASTORIA AVE.
+				SUNNYVALE  CA  94086
+				US
+
+00-E0-42   (hex)		Pacom Systems Ltd.
+00E042     (base 16)		Pacom Systems Ltd.
+				UNIT 22 38/46 SOUTH ST.
+				RYDALMERE 2116  NSW  
+				AU
+
+00-E0-EB   (hex)		DIGICOM SYSTEMS, INCORPORATED
+00E0EB     (base 16)		DIGICOM SYSTEMS, INCORPORATED
+				188 TOPAZ STREET
+				MILPITAS  CA  95035
+				US
+
+00-E0-1C   (hex)		Cradlepoint, Inc
+00E01C     (base 16)		Cradlepoint, Inc
+				1199 Shoreline Lane
+				Boise  ID  83702
+				US
+
+00-E0-27   (hex)		DUX, INC.
+00E027     (base 16)		DUX, INC.
+				5-18-19, NISHIKAMATA, OTA-KU
+				TOKYO-TO, 144    
+				JP
+
+00-E0-4B   (hex)		JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH
+00E04B     (base 16)		JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH
+				
+				D94469 DEGGENDORF    
+				DE
+
+00-E0-97   (hex)		CARRIER ACCESS CORPORATION
+00E097     (base 16)		CARRIER ACCESS CORPORATION
+				5395 PEARL PARKWAY
+				BOULDER  CO  80301
+				US
+
+00-E0-89   (hex)		ION Networks, Inc.
+00E089     (base 16)		ION Networks, Inc.
+				1551 South Washington Ave.
+				Piscataway  NJ  08854
+				US
+
+00-E0-70   (hex)		DH TECHNOLOGY
+00E070     (base 16)		DH TECHNOLOGY
+				3003 ROLLIE GATES DRIVE
+				PASO ROBLES  CA  93446
+				US
+
+00-E0-5C   (hex)		PHC Corporation
+00E05C     (base 16)		PHC Corporation
+				2-38-5 Nishishimbashi
+				Minato-ku  Tokyo  105-8433
+				JP
+
+00-E0-24   (hex)		GADZOOX NETWORKS
+00E024     (base 16)		GADZOOX NETWORKS
+				5850 HELLYER AVENUE
+				SAN JOSE  CA  95138
+				US
+
+00-60-5B   (hex)		IntraServer Technology, Inc.
+00605B     (base 16)		IntraServer Technology, Inc.
+				125 HOPPING BROOK PARK
+				HOLLISTON  MA  01746
+				US
+
+00-60-D7   (hex)		ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)
+0060D7     (base 16)		ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)
+				ECUBLENS
+				CH-1015 LAUSANNE    
+				CH
+
+00-E0-BA   (hex)		BERGHOF AUTOMATIONSTECHNIK GmbH
+00E0BA     (base 16)		BERGHOF AUTOMATIONSTECHNIK GmbH
+				HARRET STRASSE 1
+				D 72800 ENINGEN    
+				DE
+
+00-E0-21   (hex)		FREEGATE CORP.
+00E021     (base 16)		FREEGATE CORP.
+				710 LAKEWAY  STE.#230
+				SUNNYVALE  CA  94086
+				US
+
+00-E0-5B   (hex)		WEST END SYSTEMS CORP.
+00E05B     (base 16)		WEST END SYSTEMS CORP.
+				39 WINNER'S CIRCLE DR.,
+				ARNPRIOR, ONTARIO    K7S 3G9    
+				CA
+
+00-E0-44   (hex)		LSICS CORPORATION
+00E044     (base 16)		LSICS CORPORATION
+				3-8-3 NINOMIYA, TSKUKUBA SHI
+				IBARAGI-KEN, 305    
+				JP
+
+00-E0-CA   (hex)		BEST DATA PRODUCTS
+00E0CA     (base 16)		BEST DATA PRODUCTS
+				21800 NORDHOFF STREET
+				CHATSWORTH  CA  91311
+				US
+
+00-E0-A7   (hex)		IPC INFORMATION SYSTEMS, INC.
+00E0A7     (base 16)		IPC INFORMATION SYSTEMS, INC.
+				METRO CENTER
+				STAMFORD  CT  06907
+				US
+
+00-E0-62   (hex)		HOST ENGINEERING
+00E062     (base 16)		HOST ENGINEERING
+				200 EAST MAIN STREET -STE.#700
+				JOHNSON CITY  TN  37604
+				US
+
+00-E0-CE   (hex)		ARN
+00E0CE     (base 16)		ARN
+				51, RUE GASTON LAURIAU
+				F-93512 MONTREUIL CEDEX    
+				FR
+
+00-E0-5F   (hex)		e-Net, Inc.
+00E05F     (base 16)		e-Net, Inc.
+				12325 HYMEADOW DRIVE
+				AUSTIN  TX  78750
+				US
+
+00-E0-1F   (hex)		AVIDIA Systems, Inc.
+00E01F     (base 16)		AVIDIA Systems, Inc.
+				135 NORTH PLAINS INDUSTRIAL RD
+				WALLINGFORD  CT  06492
+				US
+
+00-E0-D0   (hex)		NETSPEED, INC.
+00E0D0     (base 16)		NETSPEED, INC.
+				12303 TECHNOLOGY BLVD.
+				AUSTIN  TX  78727
+				US
+
+00-E0-60   (hex)		SHERWOOD
+00E060     (base 16)		SHERWOOD
+				21056 FORBES STREET
+				HAYWARD  CA  94545
+				US
+
+00-E0-6A   (hex)		KAPSCH AG
+00E06A     (base 16)		KAPSCH AG
+				WAGENSEILGASSE 1
+				1120-VIENNA    
+				AT
+
+00-E0-01   (hex)		STRAND LIGHTING LIMITED
+00E001     (base 16)		STRAND LIGHTING LIMITED
+				GRANT WAY
+				MIDDLESEX  England TW7 5QD  
+				GB
+
+00-E0-D8   (hex)		LANBit Computer, Inc.
+00E0D8     (base 16)		LANBit Computer, Inc.
+				12F, 552 CHUNG HSIAO E., RD.
+				    
+				TW
+
+00-E0-E7   (hex)		RAYTHEON E-SYSTEMS, INC.
+00E0E7     (base 16)		RAYTHEON E-SYSTEMS, INC.
+				1301 E. COLLINS
+				RICHARDSON  TX  75081
+				US
+
+00-E0-3C   (hex)		AdvanSys
+00E03C     (base 16)		AdvanSys
+				1150 RINGWOOD COURT
+				SAN JOSE  CA  95131
+				US
+
+00-E0-73   (hex)		NATIONAL AMUSEMENT NETWORK, INC.
+00E073     (base 16)		NATIONAL AMUSEMENT NETWORK, INC.
+				401 N. MICHIGAN AVENUE
+				CHICAGO  IL  60611
+				US
+
+00-60-66   (hex)		LACROIX Trafic
+006066     (base 16)		LACROIX Trafic
+				1 ere Avenue, 11 eme rue
+				06516 CARROS    
+				FR
+
+00-60-F4   (hex)		ADVANCED COMPUTER SOLUTIONS, Inc.
+0060F4     (base 16)		ADVANCED COMPUTER SOLUTIONS, Inc.
+				12675 DANIELSON COURT
+				POWAY  CA  92064
+				US
+
+00-60-60   (hex)		Data Innovations North America
+006060     (base 16)		Data Innovations North America
+				120 Kimball Avenue Suite 100
+				South Burlington  VT  05403
+				US
+
+00-60-35   (hex)		DALLAS SEMICONDUCTOR, INC.
+006035     (base 16)		DALLAS SEMICONDUCTOR, INC.
+				4401 SOUTH BELTWOOD PARKWAY
+				DALLAS  TX  75244-3292
+				US
+
+00-60-07   (hex)		ACRES GAMING, INC.
+006007     (base 16)		ACRES GAMING, INC.
+				815 NW 9TH STREET
+				CORVALLIS  OR  97330
+				US
+
+00-60-58   (hex)		COPPER MOUNTAIN COMMUNICATIONS, INC.
+006058     (base 16)		COPPER MOUNTAIN COMMUNICATIONS, INC.
+				6650 LUSK BLVD.-STE #B103
+				SAN DIEGO  CA  92121
+				US
+
+00-60-FB   (hex)		PACKETEER, INC.
+0060FB     (base 16)		PACKETEER, INC.
+				10201 N. DE ANZA BOULEVARD
+				CUPERTINO  CA  95014
+				US
+
+00-60-C1   (hex)		WaveSpan Corporation
+0060C1     (base 16)		WaveSpan Corporation
+				500 N. BERNARDO AVE.
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-60-3C   (hex)		HAGIWARA SYS-COM CO., LTD.
+00603C     (base 16)		HAGIWARA SYS-COM CO., LTD.
+				2-4-3 NISHIKI NAKA-KU
+				AICHI 460    
+				JP
+
+00-60-7D   (hex)		SENTIENT NETWORKS INC.
+00607D     (base 16)		SENTIENT NETWORKS INC.
+				2201 CANTU COURT-STE #205
+				SARASOTA  FL  34232
+				US
+
+00-60-19   (hex)		Roche Diagnostics
+006019     (base 16)		Roche Diagnostics
+				9115 Hague Road
+				Indianapolis  IN  46250-0457
+				US
+
+00-60-59   (hex)		TECHNICAL COMMUNICATIONS CORP.
+006059     (base 16)		TECHNICAL COMMUNICATIONS CORP.
+				100 DOMINO DRIVE
+				CONCORD  MA  01742
+				US
+
+00-60-03   (hex)		TERAOKA WEIGH SYSTEM PTE, LTD.
+006003     (base 16)		TERAOKA WEIGH SYSTEM PTE, LTD.
+				3A TUAS AVENUE 8
+				  SINGAPORE 639128  
+				SG
+
+00-60-7A   (hex)		DVS GMBH
+00607A     (base 16)		DVS GMBH
+				KREPENSTRASSE 8
+				D-30165 HANNOVER    
+				DE
+
+00-60-F3   (hex)		Performance Analysis Broadband, Spirent plc
+0060F3     (base 16)		Performance Analysis Broadband, Spirent plc
+				27349 Agoura Road
+				Calabasas Hills  CA  91301
+				US
+
+00-60-7C   (hex)		WaveAccess, Ltd.
+00607C     (base 16)		WaveAccess, Ltd.
+				P.O. BOX 2473
+				RA'ANANA 43663    
+				IL
+
+00-60-A0   (hex)		SWITCHED NETWORK TECHNOLOGIES, INC.
+0060A0     (base 16)		SWITCHED NETWORK TECHNOLOGIES, INC.
+				13805 1ST AVENUE NORTH
+				PLYMOUTH  MN  55441-5455
+				US
+
+00-60-17   (hex)		TOKIMEC INC.
+006017     (base 16)		TOKIMEC INC.
+				2-16, MINAMI-KAMATA, OHTA-KU
+				TOKYO 144    
+				JP
+
+00-60-26   (hex)		VIKING Modular Solutions
+006026     (base 16)		VIKING Modular Solutions
+				11 COLUMBIA
+				LAGUNA HILLS  CA  92656
+				US
+
+00-60-6E   (hex)		DAVICOM SEMICONDUCTOR, INC.
+00606E     (base 16)		DAVICOM SEMICONDUCTOR, INC.
+				2457 AUGUSTINE DRIVE
+				SANTA CLARA  CA  95054
+				US
+
+00-60-C7   (hex)		AMATI COMMUNICATIONS CORP.
+0060C7     (base 16)		AMATI COMMUNICATIONS CORP.
+				2043 SAMARITAN DRIVE
+				SAN JOSE  CA  95124
+				US
+
+10-00-E8   (hex)		NATIONAL SEMICONDUCTOR
+1000E8     (base 16)		NATIONAL SEMICONDUCTOR
+				2900 SEMICONDUCTOR DRIVE
+				SANTA CLARA  CA  95051
+				US
+
+00-60-73   (hex)		REDCREEK COMMUNICATIONS, INC.
+006073     (base 16)		REDCREEK COMMUNICATIONS, INC.
+				3900 NEWPARK MALL ROAD
+				NEWARK  CA  94560
+				US
+
+00-60-FD   (hex)		NetICs, Inc.
+0060FD     (base 16)		NetICs, Inc.
+				42 NAGOG PARK
+				ACTON  MA  01720
+				US
+
+00-60-CB   (hex)		HITACHI ZOSEN CORPORATION
+0060CB     (base 16)		HITACHI ZOSEN CORPORATION
+				3-4, SAKURAJIMA 1-CHOME
+				KONOHANA-KU, OSAKA 554    
+				JP
+
+00-60-C8   (hex)		KUKA WELDING SYSTEMS & ROBOTS
+0060C8     (base 16)		KUKA WELDING SYSTEMS & ROBOTS
+				BLUECHERSTRASSE 144
+				D-86165 AUGSBURG    
+				DE
+
+00-60-23   (hex)		PERICOM SEMICONDUCTOR CORP.
+006023     (base 16)		PERICOM SEMICONDUCTOR CORP.
+				2380 BERING DRIVE
+				SAN JOSE  CA  95131
+				US
+
+00-60-63   (hex)		PSION DACOM PLC.
+006063     (base 16)		PSION DACOM PLC.
+				PSION DACOM HOUSE
+				CROWNHILL  MILTON KEYNES  MK8 0EF  
+				GB
+
+00-60-31   (hex)		HRK SYSTEMS
+006031     (base 16)		HRK SYSTEMS
+				P.O. BOX 514
+				WESTVILLE 3630    
+				ZA
+
+00-60-0E   (hex)		WAVENET INTERNATIONAL, INC.
+00600E     (base 16)		WAVENET INTERNATIONAL, INC.
+				5825 KENNEDY ROAD
+				MISSISSAUGA, ONTARIO L4Z 2G3    
+				CA
+
+00-60-A3   (hex)		CONTINUUM TECHNOLOGY CORP.
+0060A3     (base 16)		CONTINUUM TECHNOLOGY CORP.
+				220 CONTINUUM DRIVE
+				FLETCHER  NC  28732
+				US
+
+00-60-3D   (hex)		3CX
+00603D     (base 16)		3CX
+				2085 HAMILTON AVE., -STE.#220
+				SAN JOSE  CA  95125
+				US
+
+00-60-ED   (hex)		RICARDO TEST AUTOMATION LTD.
+0060ED     (base 16)		RICARDO TEST AUTOMATION LTD.
+				LOWESMOOR WHARF
+				WORCESTER, WR12RS    
+				GB
+
+00-60-12   (hex)		POWER COMPUTING CORPORATION
+006012     (base 16)		POWER COMPUTING CORPORATION
+				10261 BUBB ROAD
+				CUPERTINO  CA  95014
+				US
+
+00-60-4D   (hex)		MMC NETWORKS, INC.
+00604D     (base 16)		MMC NETWORKS, INC.
+				1134 EAST ARQUES AVENUE
+				SUNNYVALE  CA  94086-4602
+				US
+
+00-60-F7   (hex)		DATAFUSION SYSTEMS
+0060F7     (base 16)		DATAFUSION SYSTEMS
+				P.O. BOX 582
+				STELLENBOSCH,  7599    
+				ZA
+
+00-60-20   (hex)		PIVOTAL NETWORKING, INC.
+006020     (base 16)		PIVOTAL NETWORKING, INC.
+				7246 SHARON DR., STE
+				SAN JOSE  CA  95129
+				US
+
+00-60-C0   (hex)		Nera Networks AS
+0060C0     (base 16)		Nera Networks AS
+				Kokstadveien 23
+				Bergen    5020
+				NO
+
+00-60-77   (hex)		PRISA NETWORKS
+006077     (base 16)		PRISA NETWORKS
+				6620 Mesa Ridge Road,
+				San Diego  CA  92121
+				US
+
+00-60-94   (hex)		IBM Corp
+006094     (base 16)		IBM Corp
+				3039 E Cornwallis Road
+				Research Triangle Park  NC  27709-2195
+				US
+
+00-60-AB   (hex)		LARSCOM INCORPORATED
+0060AB     (base 16)		LARSCOM INCORPORATED
+				1845 MCCANDLESS DRIVE
+				MILPITAS  CA  95035
+				US
+
+00-60-DD   (hex)		MYRICOM, INC.
+0060DD     (base 16)		MYRICOM, INC.
+				325B N. SANTA ANITA AVE.
+				ARCADIA  CA  91006
+				US
+
+00-60-46   (hex)		VMETRO, INC.
+006046     (base 16)		VMETRO, INC.
+				1880 DAIRY ASHFORD- STE #535
+				HOUSTON  TX  77077
+				US
+
+00-60-68   (hex)		Dialogic Corporation
+006068     (base 16)		Dialogic Corporation
+				9800 Cavendish Blvd, 5th Floor
+				Montreal  Quebec  H4M 2V9
+				CA
+
+00-60-5A   (hex)		CELCORE, INC.
+00605A     (base 16)		CELCORE, INC.
+				8001 CENTERVIEW PARKWAY
+				MEMPHIS  TN  38018
+				US
+
+00-60-95   (hex)		ACCU-TIME SYSTEMS, INC.
+006095     (base 16)		ACCU-TIME SYSTEMS, INC.
+				420 SOMERS ROAD
+				ELLINGTON  CT  06029
+				US
+
+00-60-8A   (hex)		CITADEL COMPUTER
+00608A     (base 16)		CITADEL COMPUTER
+				29 ARMORY RD
+				MILFORD  MA  03055
+				US
+
+00-60-93   (hex)		VARIAN
+006093     (base 16)		VARIAN
+				2700 MITCHELL DR.
+				WALNUT GREEK  CA  94598
+				US
+
+00-A0-3F   (hex)		COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C
+00A03F     (base 16)		COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C
+				% APPLE COMPUTER, INC.
+				CUPERTINO  CA  95014
+				US
+
+00-A0-2D   (hex)		1394 Trade Association
+00A02D     (base 16)		1394 Trade Association
+				3925 WEST BRAKER LANE
+				AUSTIN  TX  78759
+				US
+
+00-A0-7C   (hex)		TONYANG NYLON CO., LTD.
+00A07C     (base 16)		TONYANG NYLON CO., LTD.
+				ELECTRONIC RESEARCH LAB
+				ANYANG-CITY, KYUNGKI-DO 430-080    
+				KR
+
+00-A0-9A   (hex)		NIHON KOHDEN AMERICA
+00A09A     (base 16)		NIHON KOHDEN AMERICA
+				2446 DUPONT DRIVE
+				IRVINE  CA  92715
+				US
+
+00-A0-93   (hex)		B/E AEROSPACE, Inc.
+00A093     (base 16)		B/E AEROSPACE, Inc.
+				17481 RED HILL
+				IRVINE  CA  92714-5630
+				US
+
+00-A0-78   (hex)		Marconi Communications
+00A078     (base 16)		Marconi Communications
+				1000 Fore Drive
+				Warrendale  PA  15086-7502
+				US
+
+00-A0-BF   (hex)		WIRELESS DATA GROUP MOTOROLA
+00A0BF     (base 16)		WIRELESS DATA GROUP MOTOROLA
+				1201 E. WILEY ROAD
+				SCHAUMBURG  IL  60173
+				US
+
+00-A0-5F   (hex)		BTG Electronics Design BV
+00A05F     (base 16)		BTG Electronics Design BV
+				P.O. Box 1543
+				BA Oud Beijerland    
+				NL
+
+00-A0-CD   (hex)		DR. JOHANNES HEIDENHAIN GmbH
+00A0CD     (base 16)		DR. JOHANNES HEIDENHAIN GmbH
+				DR.-JOHANNES-HEIDENHAIN STR.
+				83301 TRAUNREUT    
+				DE
+
+00-A0-DA   (hex)		INTEGRATED SYSTEMS Technology, Inc.
+00A0DA     (base 16)		INTEGRATED SYSTEMS Technology, Inc.
+				4601 PRESIDENTS DRIVE
+				LANHAM  MD  20706
+				US
+
+00-A0-2A   (hex)		TRANCELL SYSTEMS
+00A02A     (base 16)		TRANCELL SYSTEMS
+				3180 DE LA CRUZ BLVD.-STE#200
+				SANTA CLARA  CA  95054-2402
+				US
+
+00-A0-1C   (hex)		NASCENT NETWORKS CORPORATION
+00A01C     (base 16)		NASCENT NETWORKS CORPORATION
+				277 MAIN STREET,  3RD FLR.
+				MARLBORO  MA  01752
+				US
+
+00-A0-8F   (hex)		DESKNET SYSTEMS, INC.
+00A08F     (base 16)		DESKNET SYSTEMS, INC.
+				80 BUSINESS PARK DRIVE
+				ARMONK  NY  10504
+				US
+
+00-A0-CC   (hex)		LITE-ON COMMUNICATIONS, INC.
+00A0CC     (base 16)		LITE-ON COMMUNICATIONS, INC.
+				720 S. HILLVIEW DRIVE
+				MILPITAS  CA  95035
+				US
+
+00-A0-E6   (hex)		DIALOGIC CORPORATION
+00A0E6     (base 16)		DIALOGIC CORPORATION
+				1515 ROUTE 10
+				PARSIPPANY  NJ  07054
+				US
+
+00-A0-4A   (hex)		NISSHIN ELECTRIC CO., LTD.
+00A04A     (base 16)		NISSHIN ELECTRIC CO., LTD.
+				5, MEOTOGOSHI, MUTSUSHI,
+				AICHI 481    
+				JP
+
+00-A0-35   (hex)		CYLINK CORPORATION
+00A035     (base 16)		CYLINK CORPORATION
+				3131 JAY STREET
+				SANTA CLARA  CA  95054
+				US
+
+00-A0-3D   (hex)		OPTO-22
+00A03D     (base 16)		OPTO-22
+				43044 BUSINESS PARK DR.
+				TEMECULA  CA  92590
+				US
+
+00-A0-56   (hex)		MICROPROSS
+00A056     (base 16)		MICROPROSS
+				33, RUE GANTOIS
+				59000 LILLE    
+				FR
+
+00-A0-E1   (hex)		WESTPORT RESEARCH ASSOCIATES, INC.
+00A0E1     (base 16)		WESTPORT RESEARCH ASSOCIATES, INC.
+				6102 ARLINGTON
+				RAYTOWN  MO  64133
+				US
+
+00-A0-B7   (hex)		CORDANT, INC.
+00A0B7     (base 16)		CORDANT, INC.
+				11400 COMMERCE PARK DR.
+				RESTON  VA  22091-1506
+				US
+
+00-A0-26   (hex)		TELDAT, S.A.
+00A026     (base 16)		TELDAT, S.A.
+				PARQUE TECNOLOGICO MADRID
+				28760 TACS CAN TOS (MADRID)    
+				ES
+
+00-A0-23   (hex)		APPLIED CREATIVE TECHNOLOGY, INC.
+00A023     (base 16)		APPLIED CREATIVE TECHNOLOGY, INC.
+				2626 LOMBARDY LANE--STE.#107
+				DALLAS  TX  75220
+				US
+
+00-A0-89   (hex)		XPOINT TECHNOLOGIES, INC.
+00A089     (base 16)		XPOINT TECHNOLOGIES, INC.
+				902 CLINT MOORE RD.-STE#132
+				BOCA RATON  FL  33487
+				US
+
+00-A0-07   (hex)		APEXX TECHNOLOGY, INC.
+00A007     (base 16)		APEXX TECHNOLOGY, INC.
+				506 S. 11TH
+				BOISE  ID  83707
+				US
+
+00-A0-47   (hex)		INTEGRATED FITNESS CORP.
+00A047     (base 16)		INTEGRATED FITNESS CORP.
+				26 6TH STREET
+				STAMFORD  CT  06905
+				US
+
+00-A0-32   (hex)		GES SINGAPORE PTE. LTD.
+00A032     (base 16)		GES SINGAPORE PTE. LTD.
+				14 SUNGEI KADUT AVENUE
+				  SINGAPORE  2572
+				SG
+
+00-A0-E3   (hex)		XKL SYSTEMS CORP.
+00A0E3     (base 16)		XKL SYSTEMS CORP.
+				8420 154TH AVE. NE
+				REDMOND  WA  98052
+				US
+
+00-A0-14   (hex)		CSIR
+00A014     (base 16)		CSIR
+				P.O. BOX 395
+				  SOUTH  AFRICA
+				ZA
+
+00-A0-15   (hex)		WYLE
+00A015     (base 16)		WYLE
+				3000 BOWERS AVENUE
+				SANTA CLARA  CA  95051
+				US
+
+00-A0-6A   (hex)		Verilink Corporation
+00A06A     (base 16)		Verilink Corporation
+				127 Jetplex Circle
+				Madison  AL  35758
+				US
+
+00-A0-18   (hex)		CREATIVE CONTROLLERS, INC.
+00A018     (base 16)		CREATIVE CONTROLLERS, INC.
+				128 KENDRICK LANE
+				PICAYUNE  MS  39466
+				US
+
+00-A0-FE   (hex)		BOSTON TECHNOLOGY, INC.
+00A0FE     (base 16)		BOSTON TECHNOLOGY, INC.
+				100 QUANNAPOWITT PARKWAY
+				WAKEFIELD  MA  01880
+				US
+
+00-A0-EB   (hex)		Encore Networks, Inc.
+00A0EB     (base 16)		Encore Networks, Inc.
+				3800 Concorde Parkway,
+				Chantilly,  VA  20151
+				US
+
+00-A0-7D   (hex)		SEEQ TECHNOLOGY, INC.
+00A07D     (base 16)		SEEQ TECHNOLOGY, INC.
+				47131 BAYSIDE PARKWAY
+				FREMONT  CA  94538
+				US
+
+00-A0-D9   (hex)		CONVEX COMPUTER CORPORATION
+00A0D9     (base 16)		CONVEX COMPUTER CORPORATION
+				3000 WATERVIEW PARKWAY
+				RICHARDSON  TX  75083-3851
+				US
+
+00-A0-70   (hex)		COASTCOM
+00A070     (base 16)		COASTCOM
+				1151 HARBOR BAY PARKWAY
+				ALAMEDA  CA  94502-6511
+				US
+
+00-20-DE   (hex)		JAPAN DIGITAL LABORAT'Y CO.LTD
+0020DE     (base 16)		JAPAN DIGITAL LABORAT'Y CO.LTD
+				JDL KAWASAKI R & D CENTER
+				KANAGAWA-KEN    215
+				JP
+
+00-20-0B   (hex)		OCTAGON SYSTEMS CORP.
+00200B     (base 16)		OCTAGON SYSTEMS CORP.
+				7403 Church Ranch Blvd
+				Westminster  CO  80021
+				US
+
+00-20-94   (hex)		CUBIX CORPORATION
+002094     (base 16)		CUBIX CORPORATION
+				2800 LOCKHEED WAY
+				CARSON CITY  NV  89706
+				US
+
+00-20-F7   (hex)		CYBERDATA CORPORATION
+0020F7     (base 16)		CYBERDATA CORPORATION
+				3 Justin Court
+				MONTEREY  CA  93940
+				US
+
+00-20-D7   (hex)		JAPAN MINICOMPUTER SYSTEMS CO., Ltd.
+0020D7     (base 16)		JAPAN MINICOMPUTER SYSTEMS CO., Ltd.
+				3-33-18 TAKAIDOHIGASHI
+				TOKYO 168    
+				JP
+
+00-20-C3   (hex)		COUNTER SOLUTIONS LTD.
+0020C3     (base 16)		COUNTER SOLUTIONS LTD.
+				263 HEAGE ROAD
+				RIPLEY, DERBYS DE5 3GH    
+				GB
+
+00-20-47   (hex)		STEINBRECHER CORP.
+002047     (base 16)		STEINBRECHER CORP.
+				30 NORTH AVENUE
+				BURLINGTON  MA  01803
+				US
+
+00-20-D5   (hex)		VIPA GMBH
+0020D5     (base 16)		VIPA GMBH
+				WETTERKREUZ 27
+				    
+				DE
+
+00-20-1A   (hex)		MRV Communications, Inc.
+00201A     (base 16)		MRV Communications, Inc.
+				20415 Nordhoff St.
+				Chatsworth  CA  91311
+				US
+
+00-20-F2   (hex)		Oracle Corporation 
+0020F2     (base 16)		Oracle Corporation 
+				500 Oracle Parkway
+				Redwood Shores  CA  94065
+				US
+
+00-20-B8   (hex)		PRIME OPTION, INC.
+0020B8     (base 16)		PRIME OPTION, INC.
+				2341 W. 205TH STREET #116
+				TORRANCE  CA  90501
+				US
+
+00-20-AD   (hex)		LINQ SYSTEMS
+0020AD     (base 16)		LINQ SYSTEMS
+				P.O. BOX 11040
+				TUCSON  AZ  85734
+				US
+
+00-20-7D   (hex)		ADVANCED COMPUTER APPLICATIONS
+00207D     (base 16)		ADVANCED COMPUTER APPLICATIONS
+				107 PENNS TRAIL
+				NEWTOWN  PA  18940
+				US
+
+00-20-2F   (hex)		ZETA COMMUNICATIONS, LTD.
+00202F     (base 16)		ZETA COMMUNICATIONS, LTD.
+				ZENITH HOUSE
+				WREXHAM, CLWYD, LL12 8LX    
+				GB
+
+00-20-9A   (hex)		THE 3DO COMPANY
+00209A     (base 16)		THE 3DO COMPANY
+				600 GALVESTON DRIVE
+				REDWOOD CITY  CA  94063
+				US
+
+00-20-62   (hex)		SCORPION LOGIC, LTD.
+002062     (base 16)		SCORPION LOGIC, LTD.
+				19 BROOKSIDE ROAD
+				HERTS WD1 4BW    
+				GB
+
+00-20-81   (hex)		TITAN ELECTRONICS
+002081     (base 16)		TITAN ELECTRONICS
+				3033 SCIENCE PARK ROAD
+				SAN DIEGO  CA  92121
+				US
+
+00-20-D9   (hex)		PANASONIC TECHNOLOGIES, INC./MIECO-US
+0020D9     (base 16)		PANASONIC TECHNOLOGIES, INC./MIECO-US
+				1703 N. RANDALL RD.
+				ELGIN  IL  60123
+				US
+
+00-20-6F   (hex)		FLOWPOINT CORPORATION
+00206F     (base 16)		FLOWPOINT CORPORATION
+				7291 CORONADO DRIVE, STE# 4
+				SAN JOSE  CA  95129
+				US
+
+00-20-20   (hex)		MEGATRON COMPUTER INDUSTRIES PTY, LTD.
+002020     (base 16)		MEGATRON COMPUTER INDUSTRIES PTY, LTD.
+				
+				    
+				AU
+
+00-20-1B   (hex)		NORTHERN TELECOM/NETWORK
+00201B     (base 16)		NORTHERN TELECOM/NETWORK
+				SYSTEMS CORPORATION
+				CANADA    K8N 5B7
+				CA
+
+00-20-F3   (hex)		RAYNET CORPORATION
+0020F3     (base 16)		RAYNET CORPORATION
+				155 CONSTITUTION DRIVE
+				MENLO PARK  CA  94025
+				US
+
+00-20-90   (hex)		ADVANCED COMPRESSION TECHNOLOGY, INC.
+002090     (base 16)		ADVANCED COMPRESSION TECHNOLOGY, INC.
+				820 FLYNN ROAD
+				CAMARILLO  CA  93012
+				US
+
+00-20-C0   (hex)		PULSE ELECTRONICS, INC.
+0020C0     (base 16)		PULSE ELECTRONICS, INC.
+				5706 FREDERICK AVENUE
+				ROCKVILLE  MD  20852
+				US
+
+00-20-7E   (hex)		FINECOM CO., LTD.
+00207E     (base 16)		FINECOM CO., LTD.
+				1108 HWAKOK-DONG, KANGSEO-KU
+				SEOUL    
+				KR
+
+00-20-4E   (hex)		NETWORK SECURITY SYSTEMS, INC.
+00204E     (base 16)		NETWORK SECURITY SYSTEMS, INC.
+				9401 WAPLES STREET,STE. #100
+				SAN DIEGO  CA  92121
+				US
+
+00-20-CA   (hex)		DIGITAL OCEAN
+0020CA     (base 16)		DIGITAL OCEAN
+				11206 THOMPSON AVENUE
+				LENEXA  KS  66219-2303
+				US
+
+00-20-95   (hex)		RIVA ELECTRONICS
+002095     (base 16)		RIVA ELECTRONICS
+				UNIT 17, BARRSFOLD RD.
+				LANCASHIRE  ENGLAND  BL5 3XW
+				GB
+
+00-20-FB   (hex)		OCTEL COMMUNICATIONS CORP.
+0020FB     (base 16)		OCTEL COMMUNICATIONS CORP.
+				1001 MURPHY RANCH RD
+				MILPITAS  CA  95035
+				US
+
+00-20-70   (hex)		HYNET, LTD.
+002070     (base 16)		HYNET, LTD.
+				102 JABOTINSKY ST.
+				PETACH TIKVA 49130    
+				IL
+
+00-20-BE   (hex)		LAN ACCESS CORP.
+0020BE     (base 16)		LAN ACCESS CORP.
+				2730 MONTEREY STREET, STE.#102
+				TORRANCE  CA  90503
+				US
+
+00-20-3F   (hex)		JUKI CORPORATION
+00203F     (base 16)		JUKI CORPORATION
+				8-2-1 KOKURYO-CHO
+				    
+				JP
+
+00-20-A9   (hex)		WHITE HORSE INDUSTRIAL
+0020A9     (base 16)		WHITE HORSE INDUSTRIAL
+				4F. NO.16, ALLEY 56, LANE 181
+				    
+				TW
+
+00-20-96   (hex)		Invensys
+002096     (base 16)		Invensys
+				Robershaw Industrial Products
+				Marysville  TN  37801
+				US
+
+00-20-4A   (hex)		PRONET GMBH
+00204A     (base 16)		PRONET GMBH
+				KARLSTRASSE 49
+				    
+				DE
+
+00-20-FF   (hex)		SYMMETRICAL TECHNOLOGIES
+0020FF     (base 16)		SYMMETRICAL TECHNOLOGIES
+				500 HUNTMAR PARK DRIVE
+				HERNDON  VA  22070
+				US
+
+00-20-44   (hex)		GENITECH PTY LTD
+002044     (base 16)		GENITECH PTY LTD
+				P.O. BOX 196
+				    
+				AU
+
+00-20-EF   (hex)		USC CORPORATION
+0020EF     (base 16)		USC CORPORATION
+				6-4, OSAKI 1-CHOME
+				  141  
+				JP
+
+00-20-30   (hex)		ANALOG & DIGITAL SYSTEMS
+002030     (base 16)		ANALOG & DIGITAL SYSTEMS
+				1/2 LAVELLE ROAD
+				    
+				IN
+
+00-20-AC   (hex)		INTERFLEX DATENSYSTEME GMBH
+0020AC     (base 16)		INTERFLEX DATENSYSTEME GMBH
+				GROBWIESENSTRASE 24
+				    WESTGERMANY
+				DE
+
+00-20-D8   (hex)		Nortel Networks
+0020D8     (base 16)		Nortel Networks
+				4401 Great America Pkwy.
+				Santa Clara  CA  94588
+				US
+
+00-20-66   (hex)		GENERAL MAGIC, INC.
+002066     (base 16)		GENERAL MAGIC, INC.
+				2465 LATHAM STREET
+				MOUNTAIN VIEW  CA  94040
+				US
+
+00-20-01   (hex)		DSP SOLUTIONS, INC.
+002001     (base 16)		DSP SOLUTIONS, INC.
+				2464 EMBARCADERO WAY
+				PALO ALTO  CA  94303
+				US
+
+00-20-BF   (hex)		AEHR TEST SYSTEMS
+0020BF     (base 16)		AEHR TEST SYSTEMS
+				1667 PLYMOUTH STREET
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-20-53   (hex)		HUNTSVILLE MICROSYSTEMS, INC.
+002053     (base 16)		HUNTSVILLE MICROSYSTEMS, INC.
+				P.O. BOX 12415
+				HUNTSVILLE  AL  35815
+				US
+
+00-20-A1   (hex)		DOVATRON
+0020A1     (base 16)		DOVATRON
+				PRODUCTS DIVISION
+				LONGMONT  CO  80501
+				US
+
+00-C0-2F   (hex)		OKUMA CORPORATION
+00C02F     (base 16)		OKUMA CORPORATION
+				OGUCHI-CHO, NIWA-GUN
+				    
+				JP
+
+00-C0-1E   (hex)		LA FRANCAISE DES JEUX
+00C01E     (base 16)		LA FRANCAISE DES JEUX
+				CENTRE DE ROUSSY/DTI
+				    
+				FR
+
+00-C0-E1   (hex)		SONIC SOLUTIONS
+00C0E1     (base 16)		SONIC SOLUTIONS
+				1891 E. FRANCISCO BLVD.
+				SAN RAFAEL  CA  94901
+				US
+
+00-20-36   (hex)		BMC SOFTWARE
+002036     (base 16)		BMC SOFTWARE
+				1600 CITY WEST BLVD., #1600
+				HOUSTON  TX  77042
+				US
+
+00-20-F8   (hex)		CARRERA COMPUTERS, INC.
+0020F8     (base 16)		CARRERA COMPUTERS, INC.
+				23181 VERDUGO DRIVE-STE.#105A
+				LAGUNA HILLS  CA  92653
+				US
+
+00-C0-65   (hex)		SCOPE COMMUNICATIONS, INC.
+00C065     (base 16)		SCOPE COMMUNICATIONS, INC.
+				100 OTIS STREET
+				NORTHBORO  MA  01532
+				US
+
+00-C0-79   (hex)		FONSYS CO.,LTD.
+00C079     (base 16)		FONSYS CO.,LTD.
+				209-5, YANGJAE, SEOCHO
+				    KOREA
+				KR
+
+00-C0-0F   (hex)		QUANTUM SOFTWARE SYSTEMS LTD.
+00C00F     (base 16)		QUANTUM SOFTWARE SYSTEMS LTD.
+				175 TERRENCE MATTHEWS CRESCENT
+				  K2L  3T5
+				CA
+
+00-C0-87   (hex)		UUNET TECHNOLOGIES, INC.
+00C087     (base 16)		UUNET TECHNOLOGIES, INC.
+				3110 FAIRVIEW PARK DR. #570
+				FALLS CHURCH  VA  22042
+				US
+
+00-C0-06   (hex)		NIPPON AVIONICS CO., LTD.
+00C006     (base 16)		NIPPON AVIONICS CO., LTD.
+				INDUSTRIAL SYSTEM DIVISION
+				    
+				JP
+
+00-C0-A4   (hex)		UNIGRAF OY
+00C0A4     (base 16)		UNIGRAF OY
+				RUUKINTIE 18
+				    
+				FI
+
+00-C0-29   (hex)		Nexans Deutschland GmbH - ANS
+00C029     (base 16)		Nexans Deutschland GmbH - ANS
+				Bonnenbroicher Str. 100
+				    
+				DE
+
+00-C0-FA   (hex)		CANARY COMMUNICATIONS, INC.
+00C0FA     (base 16)		CANARY COMMUNICATIONS, INC.
+				1851 ZANKER ROAD
+				SAN JOSE  CA  95112-4213
+				US
+
+00-C0-40   (hex)		ECCI
+00C040     (base 16)		ECCI
+				15070-B AVENUE OF SCIENCE
+				SAN DIEGO  CA  92128
+				US
+
+00-C0-1C   (hex)		INTERLINK COMMUNICATIONS LTD.
+00C01C     (base 16)		INTERLINK COMMUNICATIONS LTD.
+				BRUNEL ROAD,
+				    ENGLAND
+				GB
+
+00-C0-42   (hex)		DATALUX CORP.
+00C042     (base 16)		DATALUX CORP.
+				2836 CESSNA DRIVE
+				WINCHESTER  VA  22601
+				US
+
+00-C0-71   (hex)		AREANEX COMMUNICATIONS, INC.
+00C071     (base 16)		AREANEX COMMUNICATIONS, INC.
+				3333 OCTAVIUS DRIVE UNIT C
+				SANTA CLARA  CA  95051
+				US
+
+00-C0-44   (hex)		EMCOM CORPORATION
+00C044     (base 16)		EMCOM CORPORATION
+				840 AVENUE
+				PLANO  TX  75074
+				US
+
+00-C0-E6   (hex)		Verilink Corporation
+00C0E6     (base 16)		Verilink Corporation
+				127 Jetplex Circle
+				Madison  AL  35758
+				US
+
+00-C0-96   (hex)		TAMURA CORPORATION
+00C096     (base 16)		TAMURA CORPORATION
+				COMMUNICATION SYSTEMS DIV.
+				    
+				JP
+
+00-C0-4E   (hex)		COMTROL CORPORATION
+00C04E     (base 16)		COMTROL CORPORATION
+				2675 PATTON ROAD
+				ST. PAUL  MN  55113
+				US
+
+00-C0-3F   (hex)		STORES AUTOMATED SYSTEMS, INC.
+00C03F     (base 16)		STORES AUTOMATED SYSTEMS, INC.
+				1360 ADAMS ROAD
+				BENSALEM  PA  19020
+				US
+
+00-C0-36   (hex)		RAYTECH ELECTRONIC CORP.
+00C036     (base 16)		RAYTECH ELECTRONIC CORP.
+				2F, NO.6, LANE 497
+				  TAIWAN  R.O.C.
+				TW
+
+00-C0-A2   (hex)		INTERMEDIUM A/S
+00C0A2     (base 16)		INTERMEDIUM A/S
+				ODINSVEJ 19
+				    
+				DK
+
+00-C0-53   (hex)		Aspect Software Inc.
+00C053     (base 16)		Aspect Software Inc.
+				6 Technology Park Drive
+				Westford  MA  01886
+				US
+
+00-C0-CC   (hex)		TELESCIENCES CO SYSTEMS, INC.
+00C0CC     (base 16)		TELESCIENCES CO SYSTEMS, INC.
+				351 NEW ALBANY RD.
+				MOORESTOWN  NJ  08057-1177
+				US
+
+00-C0-CE   (hex)		CEI SYSTEMS & ENGINEERING PTE
+00C0CE     (base 16)		CEI SYSTEMS & ENGINEERING PTE
+				BLK 73 #02-18 AYER RAJAH CRESC
+				  SINGAPORE  0513
+				SG
+
+00-40-4F   (hex)		SPACE & NAVAL WARFARE SYSTEMS
+00404F     (base 16)		SPACE & NAVAL WARFARE SYSTEMS
+				NUWC
+				NEWPORT  RI  02841-5047
+				US
+
+00-40-8F   (hex)		WM-DATA MINFO AB
+00408F     (base 16)		WM-DATA MINFO AB
+				OLOF ASKLUNDS GATA 14
+				    
+				SE
+
+00-40-D7   (hex)		STUDIO GEN INC.
+0040D7     (base 16)		STUDIO GEN INC.
+				3-12-8 TAKANAWA #202
+				    
+				JP
+
+00-40-57   (hex)		LOCKHEED - SANDERS
+004057     (base 16)		LOCKHEED - SANDERS
+				DANIEL WEBSTER HIGHWAY SOUTH
+				NASHUA  NH  03061-0868
+				US
+
+00-40-17   (hex)		Silex Technology America
+004017     (base 16)		Silex Technology America
+				157 West 7065 South
+				Salt Lake City  UT  84047
+				US
+
+00-C0-D9   (hex)		QUINTE NETWORK CONFIDENTIALITY
+00C0D9     (base 16)		QUINTE NETWORK CONFIDENTIALITY
+				EQUIPMENT INC.
+				CANADA  K8N  1C3
+				CA
+
+00-C0-B1   (hex)		GENIUS NET CO.
+00C0B1     (base 16)		GENIUS NET CO.
+				4F, HANSOO B/D 210-5
+				  SOUTH  KOREA
+				KR
+
+00-C0-D2   (hex)		SYNTELLECT, INC.
+00C0D2     (base 16)		SYNTELLECT, INC.
+				15810 N. 28TH AVENUE
+				PHOENIX  AZ  85023
+				US
+
+00-C0-7E   (hex)		KUBOTA CORPORATION ELECTRONIC
+00C07E     (base 16)		KUBOTA CORPORATION ELECTRONIC
+				DEVICE DEPT.
+				  JAPAN  #581
+				JP
+
+00-C0-DD   (hex)		QLogic Corporation
+00C0DD     (base 16)		QLogic Corporation
+				6321 Bury Dr.
+				Eden Prarie  MN  55346
+				US
+
+00-C0-1B   (hex)		SOCKET COMMUNICATIONS, INC.
+00C01B     (base 16)		SOCKET COMMUNICATIONS, INC.
+				2823 WHIPPLE RD.
+				UNION CITY  CA  94587
+				US
+
+00-40-6F   (hex)		SYNC RESEARCH INC.
+00406F     (base 16)		SYNC RESEARCH INC.
+				7 STUDEBAKER
+				IRVINE  CA  92718
+				US
+
+00-40-F3   (hex)		NETCOR
+0040F3     (base 16)		NETCOR
+				850 AUBURN COURT
+				FREMONT  CA  94538
+				US
+
+00-40-4B   (hex)		MAPLE COMPUTER SYSTEMS
+00404B     (base 16)		MAPLE COMPUTER SYSTEMS
+				P.O. BOX 10050
+				CANADA  ALA  4L5
+				CA
+
+00-40-33   (hex)		ADDTRON TECHNOLOGY CO., LTD.
+004033     (base 16)		ADDTRON TECHNOLOGY CO., LTD.
+				46560 FREMONT BLVD. #303
+				FREMONT  CA  94538
+				US
+
+00-C0-8E   (hex)		NETWORK INFORMATION TECHNOLOGY
+00C08E     (base 16)		NETWORK INFORMATION TECHNOLOGY
+				10430 S. DE ANZA BLVD.
+				CUPERTINO  CA  95014
+				US
+
+00-C0-C7   (hex)		SPARKTRUM MICROSYSTEMS, INC.
+00C0C7     (base 16)		SPARKTRUM MICROSYSTEMS, INC.
+				2860 ZANKER ROAD,  STE.#210
+				SAN JOSE  CA  95134
+				US
+
+00-C0-C4   (hex)		COMPUTER OPERATIONAL
+00C0C4     (base 16)		COMPUTER OPERATIONAL
+				REQUIREMENT ANALYSTS LTD
+				GU12 4LZ  GU12 4LZ  ENGLAND
+				GB
+
+00-C0-12   (hex)		NETSPAN CORPORATION
+00C012     (base 16)		NETSPAN CORPORATION
+				1411 E. CAMPBELL RD
+				RICHARDSON  TX  75081
+				US
+
+00-40-AD   (hex)		SMA REGELSYSTEME GMBH
+0040AD     (base 16)		SMA REGELSYSTEME GMBH
+				HANNOVERSCHE STR. 1-5
+				    
+				DE
+
+00-40-6D   (hex)		LANCO, INC.
+00406D     (base 16)		LANCO, INC.
+				800 WEST AIRPORT FREEWAY
+				IRVING  TX  75062
+				US
+
+00-40-CD   (hex)		TERA MICROSYSTEMS, INC.
+0040CD     (base 16)		TERA MICROSYSTEMS, INC.
+				2500 GREAT AMERICA PARKWAY
+				SANTA CLARA  CA  95054
+				US
+
+00-40-F5   (hex)		OEM ENGINES
+0040F5     (base 16)		OEM ENGINES
+				1190 DELL AVENUE, STE.
+				CAMPBELL  CA  95008
+				US
+
+00-40-39   (hex)		OPTEC DAIICHI DENKO CO., LTD.
+004039     (base 16)		OPTEC DAIICHI DENKO CO., LTD.
+				FIBER OPTICS & TELECOM. DIV.
+				    JAPAN
+				
+
+00-40-79   (hex)		JUKO MANUFACTURE COMPANY, LTD.
+004079     (base 16)		JUKO MANUFACTURE COMPANY, LTD.
+				FLAT C, 3RD FLOOR, CDW BLDG.
+				  HONG  KONG
+				HK
+
+00-C0-20   (hex)		ARCO ELECTRONIC, CONTROL LTD.
+00C020     (base 16)		ARCO ELECTRONIC, CONTROL LTD.
+				2750 NORTH 29TH AVE.-STE.#316
+				HOLLYWOOD  FL  33020
+				US
+
+00-C0-E7   (hex)		FIBERDATA AB
+00C0E7     (base 16)		FIBERDATA AB
+				P.O. BOX 20095
+				    
+				SE
+
+00-C0-5F   (hex)		FINE-PAL COMPANY LIMITED
+00C05F     (base 16)		FINE-PAL COMPANY LIMITED
+				RM. 9, 11F, KINGSFORD IND. CTR
+				  HONG  KONG
+				HK
+
+00-40-AE   (hex)		DELTA CONTROLS, INC.
+0040AE     (base 16)		DELTA CONTROLS, INC.
+				13520 78TH AVENUE
+				CANADA  V3W  8J6
+				CA
+
+00-40-F6   (hex)		KATRON COMPUTERS INC.
+0040F6     (base 16)		KATRON COMPUTERS INC.
+				4 FL. NO. 2, ALLEY 23
+				TAIPEI  TAIPEI  TAIWAN
+				TW
+
+00-40-86   (hex)		MICHELS & KLEBERHOFF COMPUTER
+004086     (base 16)		MICHELS & KLEBERHOFF COMPUTER
+				GATHE 117
+				    
+				DE
+
+00-40-92   (hex)		ASP COMPUTER PRODUCTS, INC.
+004092     (base 16)		ASP COMPUTER PRODUCTS, INC.
+				160 SAN GABRIEL DRIVE
+				SUNNYVALE  CA  94086
+				US
+
+00-40-68   (hex)		EXTENDED SYSTEMS
+004068     (base 16)		EXTENDED SYSTEMS
+				6123 NORTH MEEKER AVENUE
+				BOISE  ID  83704
+				US
+
+00-40-78   (hex)		WEARNES AUTOMATION PTE LTD
+004078     (base 16)		WEARNES AUTOMATION PTE LTD
+				801 LORONG 7, TOA PAYOH
+				  SINGAPORE  1231
+				SG
+
+00-40-F4   (hex)		CAMEO COMMUNICATIONS, INC.
+0040F4     (base 16)		CAMEO COMMUNICATIONS, INC.
+				71 SPITBROOK ROAD, STE #410
+				NASHUA  NH  030603
+				US
+
+00-40-B4   (hex)		NEXTCOM K.K.
+0040B4     (base 16)		NEXTCOM K.K.
+				1-12-1 SHIBUYA
+				    
+				JP
+
+00-40-B0   (hex)		BYTEX CORPORATION, ENGINEERING
+0040B0     (base 16)		BYTEX CORPORATION, ENGINEERING
+				13873 PARK CENTER ROAD
+				HERNDON  VA  22071
+				US
+
+00-80-D9   (hex)		EMK Elektronik GmbH & Co. KG
+0080D9     (base 16)		EMK Elektronik GmbH & Co. KG
+				Obere Bergstrasse 28
+				75335  Dobel  
+				DE
+
+00-40-59   (hex)		YOSHIDA KOGYO K. K.
+004059     (base 16)		YOSHIDA KOGYO K. K.
+				TECHNICAL RESEARCH DEPT.
+				  939  
+				JP
+
+00-40-95   (hex)		R.P.T. INTERGROUPS INT'L LTD.
+004095     (base 16)		R.P.T. INTERGROUPS INT'L LTD.
+				9F, 50 MIN CHUAN RD
+				TAIWAN  TAIWAN  R.O.C.
+				TW
+
+00-40-35   (hex)		OPCOM
+004035     (base 16)		OPCOM
+				1215 W. CROSBY RD.
+				CARROLLTON  TX  75006
+				US
+
+00-40-5C   (hex)		FUTURE SYSTEMS, INC.
+00405C     (base 16)		FUTURE SYSTEMS, INC.
+				ROOM 102 DONG BANG B/D,
+				SEOUL 130-080  SEOUL 130-080  KOREA
+				KR
+
+00-40-61   (hex)		DATATECH ENTERPRISES CO., LTD.
+004061     (base 16)		DATATECH ENTERPRISES CO., LTD.
+				(LIN KOU INDUSTRIAL ZONE SEC,4
+				TAOYUAN COUNTY  TAIWAN  R.O.C.
+				TW
+
+00-00-8C   (hex)		Alloy Computer Products (Australia) Pty Ltd
+00008C     (base 16)		Alloy Computer Products (Australia) Pty Ltd
+				Unit 4/585 Blackburn Road
+				Notting Hill  Victoria  3168
+				AU
+
+00-40-B9   (hex)		MACQ ELECTRONIQUE SA
+0040B9     (base 16)		MACQ ELECTRONIQUE SA
+				RUE DE L'AERONEF 2
+				    
+				BE
+
+00-40-BB   (hex)		GOLDSTAR CABLE CO., LTD.
+0040BB     (base 16)		GOLDSTAR CABLE CO., LTD.
+				555, HOGYE-DONG, ANYANG-SHI
+				    KOREA
+				KR
+
+00-40-B1   (hex)		CODONICS INC.
+0040B1     (base 16)		CODONICS INC.
+				17991 ENGLEWOOD DRIVE
+				MIDDLEBURG HTS  OH  44130
+				US
+
+00-40-F8   (hex)		SYSTEMHAUS DISCOM
+0040F8     (base 16)		SYSTEMHAUS DISCOM
+				DISTRIBUTED COMPUTING GMBH
+				    
+				DE
+
+00-40-D2   (hex)		PAGINE CORPORATION
+0040D2     (base 16)		PAGINE CORPORATION
+				1961-A CONCOURSE DRIVE
+				SAN JOSE  CA  95131
+				US
+
+00-40-24   (hex)		COMPAC INC.
+004024     (base 16)		COMPAC INC.
+				16-7 NIHONBASI HAMACHO 3-CHO
+				    
+				JP
+
+00-40-E9   (hex)		ACCORD SYSTEMS, INC.
+0040E9     (base 16)		ACCORD SYSTEMS, INC.
+				572 VALLEY WAY
+				MILPITAS  CA  95035
+				US
+
+00-40-03   (hex)		Emerson Process Management Power & Water Solutions, Inc.
+004003     (base 16)		Emerson Process Management Power & Water Solutions, Inc.
+				200 Beta Drive
+				PITTSBURGH  PA  15238
+				US
+
+00-40-90   (hex)		ANSEL COMMUNICATIONS
+004090     (base 16)		ANSEL COMMUNICATIONS
+				1701 JUNCTION COURT
+				SAN JOSE  CA  95112
+				US
+
+00-40-C5   (hex)		MICOM COMMUNICATIONS INC.
+0040C5     (base 16)		MICOM COMMUNICATIONS INC.
+				4100 LOS ANGELES AVENUE
+				SIMI VALLEY  CA  93063
+				US
+
+00-40-20   (hex)		CommScope Inc
+004020     (base 16)		CommScope Inc
+				Unit 1, Kinmel Park
+				Bodelwyddan  RHYL  LL18 5TZ
+				GB
+
+00-40-48   (hex)		SMD INFORMATICA S.A.
+004048     (base 16)		SMD INFORMATICA S.A.
+				LARGO MOVIMENTO DAS FORCAS
+				    
+				PT
+
+00-40-7C   (hex)		QUME CORPORATION
+00407C     (base 16)		QUME CORPORATION
+				500 YOSEMITE DRIVE, M/S-29
+				MILPITAS  CA  95035-5426
+				US
+
+00-40-7F   (hex)		FLIR Systems
+00407F     (base 16)		FLIR Systems
+				BOX 3
+				    
+				SE
+
+00-40-2D   (hex)		HARRIS ADACOM CORPORATION
+00402D     (base 16)		HARRIS ADACOM CORPORATION
+				1100 VENTURE COURT
+				CARROLLTON  TX  75006-5412
+				US
+
+00-80-A6   (hex)		REPUBLIC TECHNOLOGY, INC.
+0080A6     (base 16)		REPUBLIC TECHNOLOGY, INC.
+				P.O. BOX 141006
+				AUSTIN  TX  78714
+				US
+
+00-40-DE   (hex)		Elsag Datamat spa
+0040DE     (base 16)		Elsag Datamat spa
+				ELSAG S.P.A.
+				GENOVA    16154
+				IT
+
+00-40-C9   (hex)		NCUBE
+0040C9     (base 16)		NCUBE
+				919 EAST HILLSDALE BLVD.
+				FOSTER CITY  CA  94404
+				US
+
+00-80-32   (hex)		ACCESS CO., LTD.
+008032     (base 16)		ACCESS CO., LTD.
+				HIEI-KUDAN BLDG. B1
+				    
+				JP
+
+00-80-CF   (hex)		EMBEDDED PERFORMANCE INC.
+0080CF     (base 16)		EMBEDDED PERFORMANCE INC.
+				3385 SCOTT BLVD.
+				SANTA CLARA  CA  95054-3115
+				US
+
+00-80-90   (hex)		MICROTEK INTERNATIONAL, INC.
+008090     (base 16)		MICROTEK INTERNATIONAL, INC.
+				3300 NW 211TH TERRACE
+				HILLSBOR  OR  97124-7136
+				US
+
+00-40-44   (hex)		QNIX COMPUTER CO., LTD.
+004044     (base 16)		QNIX COMPUTER CO., LTD.
+				8,9F KOREAN TEACHER'S MUT.BLDG
+				SEOUL  KOREA  150-010
+				KR
+
+00-80-C4   (hex)		DOCUMENT TECHNOLOGIES, INC.
+0080C4     (base 16)		DOCUMENT TECHNOLOGIES, INC.
+				1300 CHARLESTON ROAD
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-80-5B   (hex)		CONDOR SYSTEMS, INC.
+00805B     (base 16)		CONDOR SYSTEMS, INC.
+				2133 SAMARILTAN DRIVE
+				SAN JOSE  CA  95124
+				US
+
+00-80-43   (hex)		NETWORLD, INC.
+008043     (base 16)		NETWORLD, INC.
+				KANDA 3 AMEREX BLDG.
+				    
+				JP
+
+00-40-DF   (hex)		DIGALOG SYSTEMS, INC.
+0040DF     (base 16)		DIGALOG SYSTEMS, INC.
+				3180 SOUTH 166TH STREET
+				NEW BERLIN  WI  53151
+				US
+
+00-40-09   (hex)		TACHIBANA TECTRON CO., LTD.
+004009     (base 16)		TACHIBANA TECTRON CO., LTD.
+				SYSTEMATIC EQUIPMENT DIVISION
+				    
+				JP
+
+00-40-A0   (hex)		GOLDSTAR CO., LTD.
+0040A0     (base 16)		GOLDSTAR CO., LTD.
+				6 GA 3B MUNLAE YEONGDEUNGPO
+				    KOREA
+				KR
+
+00-40-FC   (hex)		IBR COMPUTER TECHNIK GMBH
+0040FC     (base 16)		IBR COMPUTER TECHNIK GMBH
+				FRANKFURTER STR. 114
+				  WEST  
+				DE
+
+00-80-AF   (hex)		ALLUMER CO., LTD.
+0080AF     (base 16)		ALLUMER CO., LTD.
+				2-8-8 CHUO-CHO, MEGURO-KU
+				    
+				JP
+
+00-80-84   (hex)		THE CLOUD INC.
+008084     (base 16)		THE CLOUD INC.
+				CLOUD BLDG.
+				    KOREA
+				KR
+
+00-80-F3   (hex)		SUN ELECTRONICS CORP.
+0080F3     (base 16)		SUN ELECTRONICS CORP.
+				250 ASAHI KOCHINO-CHO
+				  483  
+				JP
+
+00-80-99   (hex)		Eaton Industries GmbH
+008099     (base 16)		Eaton Industries GmbH
+				Hein-Moeller - Straße 7-11
+				    
+				DE
+
+00-80-8D   (hex)		WESTCOAST TECHNOLOGY B.V.
+00808D     (base 16)		WESTCOAST TECHNOLOGY B.V.
+				P.O. BOX 3317
+				    
+				NL
+
+00-80-BE   (hex)		ARIES RESEARCH
+0080BE     (base 16)		ARIES RESEARCH
+				46791 FREMOND BLVD.
+				FREMONT  CA  94538
+				US
+
+00-80-15   (hex)		SEIKO SYSTEMS, INC.
+008015     (base 16)		SEIKO SYSTEMS, INC.
+				8,Nakase 1-chome,Mihama-ku
+				    
+				JP
+
+00-80-D2   (hex)		SHINNIHONDENKO CO., LTD.
+0080D2     (base 16)		SHINNIHONDENKO CO., LTD.
+				6-8 NISHITENMA 2 CHOME
+				    
+				JP
+
+00-80-89   (hex)		TECNETICS (PTY) LTD.
+008089     (base 16)		TECNETICS (PTY) LTD.
+				P.O. BOX/POSBUS 56412
+				  SOUTH  AFRICA
+				ZA
+
+00-80-6F   (hex)		ONELAN LTD.
+00806F     (base 16)		ONELAN LTD.
+				P.O. BOX 107
+				  UNITED  KINGDOM
+				GB
+
+00-80-81   (hex)		KENDALL SQUARE RESEARCH CORP.
+008081     (base 16)		KENDALL SQUARE RESEARCH CORP.
+				170 TRACER LANE
+				WALTHAM  MA  02154-1379
+				US
+
+00-80-9C   (hex)		LUXCOM, INC.
+00809C     (base 16)		LUXCOM, INC.
+				3249 LAURELVIEW COURT
+				FREMONT  CA  94538
+				US
+
+00-80-65   (hex)		CYBERGRAPHIC SYSTEMS PTY LTD.
+008065     (base 16)		CYBERGRAPHIC SYSTEMS PTY LTD.
+				290 BURWOOD ROAD
+				    
+				AU
+
+00-80-19   (hex)		DAYNA COMMUNICATIONS, INC.
+008019     (base 16)		DAYNA COMMUNICATIONS, INC.
+				50 SOUTH MAIN STREET-#530
+				SALT LAKE CITY  UTAH  84144
+				US
+
+00-80-50   (hex)		ZIATECH CORPORATION
+008050     (base 16)		ZIATECH CORPORATION
+				3433 ROBERTO COURT
+				SAN LUIS OBISPO  CA  93401
+				US
+
+00-80-A4   (hex)		LIBERTY ELECTRONICS
+0080A4     (base 16)		LIBERTY ELECTRONICS
+				332 HARBOR WAY
+				SOUTH SAN FRANCISCO  CA  94080
+				US
+
+00-80-CD   (hex)		MICRONICS COMPUTER, INC.
+0080CD     (base 16)		MICRONICS COMPUTER, INC.
+				45365 NORTHPORT LOOP WEST
+				FREMONT  CA  94538
+				US
+
+00-80-03   (hex)		HYTEC ELECTRONICS LTD.
+008003     (base 16)		HYTEC ELECTRONICS LTD.
+				5 CRADOCK ROAD
+				    ENGLAND
+				GB
+
+00-80-52   (hex)		TECHNICALLY ELITE CONCEPTS
+008052     (base 16)		TECHNICALLY ELITE CONCEPTS
+				2615 PACIFIC COAST HIGHWAY
+				HERMOSA BEACH  CA  90250
+				US
+
+00-80-5D   (hex)		CANSTAR
+00805D     (base 16)		CANSTAR
+				3900 VICTORIA PARK AVENUE
+				  M2H  3H7
+				CA
+
+00-80-4F   (hex)		DAIKIN INDUSTRIES, LTD.
+00804F     (base 16)		DAIKIN INDUSTRIES, LTD.
+				ELECTRONICS DIVISION
+				  JAPAN  525
+				JP
+
+00-80-05   (hex)		CACTUS COMPUTER INC.
+008005     (base 16)		CACTUS COMPUTER INC.
+				1120 METROCREST DRIVE
+				CARROLLTON  TX  75006
+				US
+
+00-80-6D   (hex)		CENTURY SYSTEMS CORP.
+00806D     (base 16)		CENTURY SYSTEMS CORP.
+				2-8-12 MINAMI-CHO
+				  185  
+				JP
+
+00-80-94   (hex)		ALFA LAVAL AUTOMATION AB
+008094     (base 16)		ALFA LAVAL AUTOMATION AB
+				ADN
+				    
+				SE
+
+00-00-41   (hex)		ICE CORPORATION
+000041     (base 16)		ICE CORPORATION
+				17945 SKYPARK CIRCLE
+				IRVINE  CA  92714
+				US
+
+00-00-86   (hex)		MEGAHERTZ CORPORATION
+000086     (base 16)		MEGAHERTZ CORPORATION
+				605 NORTH--5600 WEST
+				SALT LAKE CITY  UT  84116-3738
+				US
+
+00-00-92   (hex)		COGENT DATA TECHNOLOGIES
+000092     (base 16)		COGENT DATA TECHNOLOGIES
+				640 MULLIS STREET
+				FRIDAY HARBOR  WA  98250
+				US
+
+00-00-58   (hex)		RACORE COMPUTER PRODUCTS INC.
+000058     (base 16)		RACORE COMPUTER PRODUCTS INC.
+				2355 SOUTH 1070 WEST
+				SALT LAKE CITY  UT  84119
+				US
+
+00-80-74   (hex)		FISHER CONTROLS
+008074     (base 16)		FISHER CONTROLS
+				1712 CENTRE CREEK DRIVE
+				AUSTIN  TX  78754
+				US
+
+00-80-30   (hex)		NEXUS ELECTRONICS
+008030     (base 16)		NEXUS ELECTRONICS
+				39 SPRINGFIELD ROAD
+				  UNITED  KINGDOM
+				GB
+
+00-00-55   (hex)		COMMISSARIAT A L`ENERGIE ATOM.
+000055     (base 16)		COMMISSARIAT A L`ENERGIE ATOM.
+				31, RUE DE LA FEDERATION
+				    
+				FR
+
+00-80-C9   (hex)		ALBERTA MICROELECTRONIC CENTRE
+0080C9     (base 16)		ALBERTA MICROELECTRONIC CENTRE
+				318, 11315 - 87 AVENUE
+				    
+				CA
+
+00-80-0C   (hex)		VIDECOM LIMITED
+00800C     (base 16)		VIDECOM LIMITED
+				NEWTOWN ESTATE
+				    ENGLAND
+				GB
+
+00-80-7D   (hex)		EQUINOX SYSTEMS INC.
+00807D     (base 16)		EQUINOX SYSTEMS INC.
+				14260 SW 119TH AVENUE
+				MIAMI  FL  33186
+				US
+
+00-80-63   (hex)		Hirschmann Automation and Control GmbH
+008063     (base 16)		Hirschmann Automation and Control GmbH
+				Stuttgarter Straße 45-51
+				Neckartenzlingen    D-72654
+				DE
+
+00-80-EE   (hex)		THOMSON CSF
+0080EE     (base 16)		THOMSON CSF
+				51 ESPLANADE DU GENERAL
+				    
+				FR
+
+00-80-8E   (hex)		RADSTONE TECHNOLOGY
+00808E     (base 16)		RADSTONE TECHNOLOGY
+				WATER LANE, TOWCESTER
+				    ENGLAND
+				GB
+
+00-80-96   (hex)		HUMAN DESIGNED SYSTEMS, INC.
+008096     (base 16)		HUMAN DESIGNED SYSTEMS, INC.
+				421 FEHELEY DRIVE
+				KING OF PRUSSIA  PA  19406
+				US
+
+00-80-3E   (hex)		SYNERNETICS
+00803E     (base 16)		SYNERNETICS
+				85 RANGEWAY ROAD
+				NORTH BILLERICA  MA  01862
+				US
+
+00-80-CE   (hex)		BROADCAST TELEVISION SYSTEMS
+0080CE     (base 16)		BROADCAST TELEVISION SYSTEMS
+				P.O. BOX 30816
+				  Utah  84130-0816
+				US
+
+00-80-1A   (hex)		BELL ATLANTIC
+00801A     (base 16)		BELL ATLANTIC
+				N92 W14612  ANTHONY AVENUE
+				MENOMONEE FALLS  WI  53051
+				US
+
+00-80-DE   (hex)		GIPSI S.A.
+0080DE     (base 16)		GIPSI S.A.
+				2,BD VAUBAN - B.P. 268
+				    
+				FR
+
+00-80-02   (hex)		SATELCOM (UK) LTD
+008002     (base 16)		SATELCOM (UK) LTD
+				TECHNOLOGY TRANSFER CENTRE
+				    ENGLAND
+				GB
+
+00-80-64   (hex)		WYSE TECHNOLOGY LLC
+008064     (base 16)		WYSE TECHNOLOGY LLC
+				3471 NORTH FIRST STREET M/S
+				SAN JOSE  CA  95134
+				US
+
+00-80-48   (hex)		COMPEX INCORPORATED
+008048     (base 16)		COMPEX INCORPORATED
+				4055 EAST LA PALMA
+				ANAHEIM  CA  92807
+				US
+
+00-80-85   (hex)		H-THREE SYSTEMS CORPORATION
+008085     (base 16)		H-THREE SYSTEMS CORPORATION
+				100 PARK DRIVE, SUITE 204
+				  NC  27709
+				US
+
+00-80-4C   (hex)		CONTEC CO., LTD.
+00804C     (base 16)		CONTEC CO., LTD.
+				3-9-31, HIMESATO
+				    
+				JP
+
+00-80-8F   (hex)		C. ITOH ELECTRONICS, INC.
+00808F     (base 16)		C. ITOH ELECTRONICS, INC.
+				2505 MCCABE WAY
+				IRVINE  CA  92714
+				US
+
+00-00-52   (hex)		Intrusion.com, Inc.
+000052     (base 16)		Intrusion.com, Inc.
+				1101 E. ARAPAHO ROAD
+				RICHARDSON  TX  75081
+				
+
+00-80-FF   (hex)		SOC. DE TELEINFORMATIQUE RTC
+0080FF     (base 16)		SOC. DE TELEINFORMATIQUE RTC
+				P.O. BOX 955 PLACE DU PARC
+				CANADA  H2W  2N1
+				
+
+00-00-F7   (hex)		YOUTH KEEP ENTERPRISE CO LTD
+0000F7     (base 16)		YOUTH KEEP ENTERPRISE CO LTD
+				3/F NO. 712 MINTSU E. ROAD
+				    ROC
+				TW
+
+00-00-C7   (hex)		ARIX CORPORATION
+0000C7     (base 16)		ARIX CORPORATION
+				ENGINEERING MAIL STOP
+				SUNNYVALE  CA  94089
+				US
+
+00-00-D1   (hex)		ADAPTEC INCORPORATED
+0000D1     (base 16)		ADAPTEC INCORPORATED
+				M/S 180
+				MILPITAS  CA  95035
+				US
+
+00-00-16   (hex)		DU PONT PIXEL SYSTEMS     .
+000016     (base 16)		DU PONT PIXEL SYSTEMS     .
+				MEADLAKE PLACE
+				    ENGLAND
+				GB
+
+00-00-E1   (hex)		GRID SYSTEMS
+0000E1     (base 16)		GRID SYSTEMS
+				47211 LAKEVIEW BOULEVARD
+				FREMONT  CA  94537-5003
+				US
+
+00-00-81   (hex)		Bay Networks
+000081     (base 16)		Bay Networks
+				PO Box 58185
+				Santa Clara  CA  95052-8185
+				US
+
+00-00-29   (hex)		IMC NETWORKS CORP.
+000029     (base 16)		IMC NETWORKS CORP.
+				16931 MILLIKEN AVE.
+				IRVINE  CA  92714-5013
+				US
+
+00-00-0A   (hex)		OMRON TATEISI ELECTRONICS CO.
+00000A     (base 16)		OMRON TATEISI ELECTRONICS CO.
+				SECTION NFF, SYSTEM R&D LABS.
+				KYOTO  617  
+				JP
+
+00-00-0D   (hex)		FIBRONICS LTD.
+00000D     (base 16)		FIBRONICS LTD.
+				MATAM TECHNOLOGY CENTER
+				    
+				IL
+
+00-00-24   (hex)		CONNECT AS
+000024     (base 16)		CONNECT AS
+				HOERKAER 7-9
+				    
+				DK
+
+00-00-67   (hex)		SOFT * RITE, INC.
+000067     (base 16)		SOFT * RITE, INC.
+				15392 ASSEMBLY LANE, UNIT A
+				HUNTINGTON BEACH  CA  92649
+				US
+
+00-00-D2   (hex)		SBE, INC.
+0000D2     (base 16)		SBE, INC.
+				4550 NORTH CANYON ROAD
+				SAN RAMON  CA  94583
+				US
+
+00-00-37   (hex)		OXFORD METRICS LIMITED
+000037     (base 16)		OXFORD METRICS LIMITED
+				UNIT 8, 7 WEST WAY,
+				  UNITED  KINGDOM
+				GB
+
+00-00-FB   (hex)		RECHNER ZUR KOMMUNIKATION
+0000FB     (base 16)		RECHNER ZUR KOMMUNIKATION
+				BITZENSTR. 11
+				    
+				DE
+
+00-00-E2   (hex)		ACER TECHNOLOGIES CORP.
+0000E2     (base 16)		ACER TECHNOLOGIES CORP.
+				401 CHARCOT AVE.
+				SAN JOSE  CA  95131
+				US
+
+00-00-BA   (hex)		SIIG, INC.
+0000BA     (base 16)		SIIG, INC.
+				6078 STEWART AVENUE
+				FREMONT  CA  94538
+				US
+
+00-00-2A   (hex)		TRW - SEDD/INP
+00002A     (base 16)		TRW - SEDD/INP
+				1800 GLENN CURTISS STREET
+				CARSON  CA  90746
+				US
+
+00-00-2C   (hex)		AUTOTOTE LIMITED
+00002C     (base 16)		AUTOTOTE LIMITED
+				100 BELLEVUE ROAD
+				NEWARK  DELAWARE  19714
+				US
+
+00-00-83   (hex)		TADPOLE TECHNOLOGY PLC
+000083     (base 16)		TADPOLE TECHNOLOGY PLC
+				137 DITTON WALK
+				    ENGLAND
+				GB
+
+00-00-F3   (hex)		GANDALF DATA LIMITED
+0000F3     (base 16)		GANDALF DATA LIMITED
+				130 COLONNADE ROAD SOUTH
+				    
+				CA
+
+00-00-B0   (hex)		RND-RAD NETWORK DEVICES
+0000B0     (base 16)		RND-RAD NETWORK DEVICES
+				ATIDIM TECHNOL'CL BLDG. 1
+				    
+				IL
+
+00-00-CF   (hex)		HAYES MICROCOMPUTER PRODUCTS
+0000CF     (base 16)		HAYES MICROCOMPUTER PRODUCTS
+				(CANADA) LTD.
+				    
+				CA
+
+00-00-56   (hex)		DR. B. STRUCK
+000056     (base 16)		DR. B. STRUCK
+				POB 1147 BAECKERBARG 6
+				    W-GERMANY
+				DE
+
+00-00-6C   (hex)		Private
+00006C     (base 16)		Private
+
+00-00-A9   (hex)		NETWORK SYSTEMS CORP.
+0000A9     (base 16)		NETWORK SYSTEMS CORP.
+				7600 BOONE AVENUE NORTH
+				MINNEAPOLIS  MN  55428-1099
+				US
+
+00-00-EF   (hex)		KTI
+0000EF     (base 16)		KTI
+				2157 O'TOOLE AVENUE
+				SAN JOSE  CA  95131
+				US
+
+00-00-25   (hex)		RAMTEK CORP.
+000025     (base 16)		RAMTEK CORP.
+				810 W. MAUDE AVENUE
+				SUNNYVALE  CA  94086
+				US
+
+00-00-AF   (hex)		Canberra Industries, Inc.
+0000AF     (base 16)		Canberra Industries, Inc.
+				800 Research Parkway
+				Meriden  CT  06450
+				US
+
+00-00-76   (hex)		ABEKAS VIDEO SYSTEM
+000076     (base 16)		ABEKAS VIDEO SYSTEM
+				101 GALVESTON DRIVE
+				REDWOOD CITY  CA  94063
+				US
+
+08-00-55   (hex)		STANFORD TELECOMM. INC.
+080055     (base 16)		STANFORD TELECOMM. INC.
+				1221 CROSSMAN
+				SUNNYVALE  CA  94089
+				US
+
+08-00-53   (hex)		MIDDLE EAST TECH. UNIVERSITY
+080053     (base 16)		MIDDLE EAST TECH. UNIVERSITY
+				DEPARTMENT OF
+				  ANKARA  
+				TR
+
+08-00-8E   (hex)		Tandem Computers
+08008E     (base 16)		Tandem Computers
+				14231 Tendem Blvd.
+				Austin  TX  78728 - 6610
+				US
+
+08-00-84   (hex)		TOMEN ELECTRONICS CORP.
+080084     (base 16)		TOMEN ELECTRONICS CORP.
+				1-1 UCHISAIWAI-CHO 2CHOME
+				    
+				JP
+
+08-00-85   (hex)		ELXSI
+080085     (base 16)		ELXSI
+				2334 LUNDY PLACE
+				SAN JOSE  CA  95131
+				US
+
+08-00-82   (hex)		VERITAS SOFTWARE
+080082     (base 16)		VERITAS SOFTWARE
+				4800 GREAT AMERICA PARKWAY
+				SANTA CLARA  CA  95054
+				US
+
+08-00-80   (hex)		AES DATA INC.
+080080     (base 16)		AES DATA INC.
+				1900 MINNESOTA COURT
+				CANADA  L5N  L5N 3C9
+				CA
+
+08-00-77   (hex)		TSL COMMUNICATIONS LTD.
+080077     (base 16)		TSL COMMUNICATIONS LTD.
+				THE LANDSBURY ESTATE
+				    ENGLAND
+				GB
+
+08-00-74   (hex)		CASIO COMPUTER CO. LTD.
+080074     (base 16)		CASIO COMPUTER CO. LTD.
+				3-2-1 SAKAE-CHO
+				  190-11  
+				JP
+
+08-00-6E   (hex)		MASSCOMP
+08006E     (base 16)		MASSCOMP
+				ONE TECHNOLOGY PARK
+				WESTFORD  MA  01886
+				US
+
+08-00-68   (hex)		RIDGE COMPUTERS
+080068     (base 16)		RIDGE COMPUTERS
+				2451 MISSION COLLEGE BLVD.
+				SANTA CLARA  CA  95054
+				US
+
+08-00-63   (hex)		PLESSEY
+080063     (base 16)		PLESSEY
+				PLESSEY - UK LIMITED
+				JAMAICA  NY  11434
+				US
+
+08-00-7B   (hex)		SANYO ELECTRIC CO. LTD.
+08007B     (base 16)		SANYO ELECTRIC CO. LTD.
+				1-18-13 HASHIRIDANI
+				OSAKA  573  
+				JP
+
+08-00-7C   (hex)		VITALINK COMMUNICATIONS CORP.
+08007C     (base 16)		VITALINK COMMUNICATIONS CORP.
+				48761 KATO ROAD
+				FREMONT  CA  94538
+				US
+
+00-00-DF   (hex)		BELL & HOWELL PUB SYS DIV
+0000DF     (base 16)		BELL & HOWELL PUB SYS DIV
+				OLD MANSFIELD ROAD
+				WOOSTER  OH  44691-9050
+				US
+
+00-00-F9   (hex)		QUOTRON SYSTEMS INC.
+0000F9     (base 16)		QUOTRON SYSTEMS INC.
+				5454 BEETHOVEN ST.
+				LOS ANGELES  CA  90066
+				US
+
+08-00-60   (hex)		INDUSTRIAL NETWORKING INC.
+080060     (base 16)		INDUSTRIAL NETWORKING INC.
+				3990 FREEDOM CIRCLE
+				SANTA CLARA  CA  95050
+				US
+
+08-00-4C   (hex)		HYDRA COMPUTER SYSTEMS INC.
+08004C     (base 16)		HYDRA COMPUTER SYSTEMS INC.
+				12 MERCER ROAD
+				NATICK  MA  01760
+				US
+
+08-00-47   (hex)		SEQUENT COMPUTER SYSTEMS INC.
+080047     (base 16)		SEQUENT COMPUTER SYSTEMS INC.
+				15450 S.W. KOLL PARKWAY   .
+				BEAVERTON  OR  97006
+				US
+
+08-00-4A   (hex)		BANYAN SYSTEMS INC.
+08004A     (base 16)		BANYAN SYSTEMS INC.
+				135 FLANDERS ROAD
+				WESTBORO  MA  01581
+				US
+
+08-00-44   (hex)		DAVID SYSTEMS INC.
+080044     (base 16)		DAVID SYSTEMS INC.
+				615 TASMAN DRIVE
+				SUNNYVALE  CA  94088
+				US
+
+08-00-41   (hex)		RACAL-MILGO INFORMATION SYS..
+080041     (base 16)		RACAL-MILGO INFORMATION SYS..
+				400 EMBASSY ROW
+				ATLANTA  GA  30328
+				US
+
+08-00-35   (hex)		MICROFIVE CORPORATION
+080035     (base 16)		MICROFIVE CORPORATION
+				3560 HYLAND AVENUE
+				COSTA MESA  CA  92626
+				US
+
+08-00-32   (hex)		TIGAN INCORPORATED
+080032     (base 16)		TIGAN INCORPORATED
+				4020 FABIAN WAY
+				PALO ALTO  CA  94303
+				US
+
+08-00-8D   (hex)		XYVISION INC.
+08008D     (base 16)		XYVISION INC.
+				101 EDGEWATER DRIVE
+				WAKEFIELD  MA  01880
+				US
+
+08-00-15   (hex)		STC BUSINESS SYSTEMS
+080015     (base 16)		STC BUSINESS SYSTEMS
+				HOLBROOK HOUSE
+				  UNITED  KINGDOM
+				GB
+
+08-00-66   (hex)		AGFA CORPORATION
+080066     (base 16)		AGFA CORPORATION
+				200 BALLARDVALE STREET
+				WILMINGTON  MA  01887
+				US
+
+08-00-04   (hex)		CROMEMCO INCORPORATED
+080004     (base 16)		CROMEMCO INCORPORATED
+				280 BERNARDO AVENUE
+				MOUNTAIN VIEW  CA  94043
+				US
+
+00-01-C8   (hex)		CONRAD CORP.
+0001C8     (base 16)		CONRAD CORP.
+				
+				    
+				
+
+08-00-3F   (hex)		FRED KOSCHARA ENTERPRISES
+08003F     (base 16)		FRED KOSCHARA ENTERPRISES
+				
+				    
+				
+
+08-00-0B   (hex)		UNISYS CORPORATION
+08000B     (base 16)		UNISYS CORPORATION
+				TOWNSHIP LINE ROAD
+				BLUE BELL  PA  19424
+				US
+
+00-DD-01   (hex)		UNGERMANN-BASS INC.
+00DD01     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-DD-06   (hex)		UNGERMANN-BASS INC.
+00DD06     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+AA-00-03   (hex)		DIGITAL EQUIPMENT CORPORATION
+AA0003     (base 16)		DIGITAL EQUIPMENT CORPORATION
+				LKG 1-2/A19
+				LITTLETON  MA  01460-1289
+				US
+
+00-00-00   (hex)		XEROX CORPORATION
+000000     (base 16)		XEROX CORPORATION
+				M/S 105-50C
+				WEBSTER  NY  14580
+				US
+
+08-00-21   (hex)		3M COMPANY
+080021     (base 16)		3M COMPANY
+				Telecom Division
+				Austin  TX  78726-9000
+				US
+
+02-BB-01   (hex)		OCTOTHORPE CORP.
+02BB01     (base 16)		OCTOTHORPE CORP.
+				285 WEST GREEN STREET
+				PASADENA  CA  91105
+				US
+
+08-00-8A   (hex)		PerfTech, Inc.
+08008A     (base 16)		PerfTech, Inc.
+				613 NW Loop 410
+				SAN ANTONIO  TX  78216
+				US
+
+00-00-3E   (hex)		SIMPACT
+00003E     (base 16)		SIMPACT
+				9210 SKY PARK COURT
+				SAN DIEGO  CA  92123
+				US
+
+00-DD-02   (hex)		UNGERMANN-BASS INC.
+00DD02     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+00-DD-04   (hex)		UNGERMANN-BASS INC.
+00DD04     (base 16)		UNGERMANN-BASS INC.
+				3900 FREEDOM CIRCLE
+				SANTA CLARA  CA  95054
+				US
+
+02-60-86   (hex)		LOGIC REPLACEMENT TECH. LTD.
+026086     (base 16)		LOGIC REPLACEMENT TECH. LTD.
+				14 ARKWRIGHT ROAD
+				  UNITED  KINGDOM
+				GB
+
+08-00-30   (hex)		CERN
+080030     (base 16)		CERN
+				CH-1211 
+				GENEVE  SUISSE/SWITZ  023
+				CH
+
+74-DA-88   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+74DA88     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+CC-32-E5   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+CC32E5     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+1C-3B-F3   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+1C3BF3     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+3C-86-D1   (hex)		vivo Mobile Communication Co., Ltd.
+3C86D1     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+30-1B-97   (hex)		Lierda Science & Technology Group Co.,Ltd
+301B97     (base 16)		Lierda Science & Technology Group Co.,Ltd
+				Lierda Science Park?No.1326 WenyiWestRoad
+				Hangzhou  ZheJiang  311121
+				CN
+
+2C-D2-E3   (hex)		Guangzhou Aoshi Electronic Co.,Ltd
+2CD2E3     (base 16)		Guangzhou Aoshi Electronic Co.,Ltd
+				B1,Huachuang industrial park,Jinshan Avenue,Panyu District
+				Guangzhou  Guangdong  511450
+				CN
+
+14-59-C3   (hex)		Creative Chips GmbH
+1459C3     (base 16)		Creative Chips GmbH
+				Im Bubenstück 1
+				Bingen  Rheinland-Pfalz  55411
+				DE
+
+A0-D8-6F   (hex)		ARGO AI, LLC
+A0D86F     (base 16)		ARGO AI, LLC
+				40, 24th Street, Second Floor
+				Pittsburgh  PA  15222
+				US
+
+E4-67-1E   (hex)		SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd.
+E4671E     (base 16)		SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd.
+				Building A2 and 1 F/L, Building A1, 9 Wugang Rd, Xikeng Village, Xikeng Community, Henggang Sub-district, Longgang District
+				Shenzhen    518100
+				CN
+
+68-27-19   (hex)		Microchip Technology Inc.
+682719     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+24-C1-7A   (hex)		BEIJING IACTIVE NETWORK CO.,LTD
+24C17A     (base 16)		BEIJING IACTIVE NETWORK CO.,LTD
+				Room 525, Yiquanhui Building, No. 35 Shangdi East Road, Haidian District
+				BEIJING    100085
+				CN
+
+1C-9C-8C   (hex)		Juniper Networks
+1C9C8C     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+A4-C9-39   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+A4C939     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+34-D7-72   (hex)		Xiamen Yudian Automation Technology Co., Ltd 
+34D772     (base 16)		Xiamen Yudian Automation Technology Co., Ltd 
+				No. 17 North Huoju Rd., Huoju Park, Huoju Hi-Tech District  
+				XIAMEN  FUJIAN   361000 
+				CN
+
+C0-DC-DA   (hex)		Samsung Electronics Co.,Ltd
+C0DCDA     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+04-B4-29   (hex)		Samsung Electronics Co.,Ltd
+04B429     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+48-79-4D   (hex)		Samsung Electronics Co.,Ltd
+48794D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+44-F9-71   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+44F971     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+18-F9-C4   (hex)		BAE Systems
+18F9C4     (base 16)		BAE Systems
+				21 continental boulevard
+				Merrimack  NH  03054
+				US
+
+60-AB-D2   (hex)		Bose Corporation
+60ABD2     (base 16)		Bose Corporation
+				The Mountain
+				Framingham  MA  01701-9168
+				US
+
+F0-EF-86   (hex)		Google, Inc.
+F0EF86     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+E4-C0-CC   (hex)		China Mobile Group Device Co.,Ltd.
+E4C0CC     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+5C-B1-3E   (hex)		Sagemcom Broadband SAS
+5CB13E     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+F4-E5-F2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4E5F2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-13-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+541310     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-E5-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8CE5EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-CD-23   (hex)		Shenzhenshi Xinzhongxin  Co., Ltd
+A4CD23     (base 16)		Shenzhenshi Xinzhongxin  Co., Ltd
+				Building A3, Donghuan Industrial Zone, Nanpu Road, Shajing Town, Baoan District
+				Shenzhen  Guangdong  518125
+				CN
+
+B8-3A-5A   (hex)		Aruba, a Hewlett Packard Enterprise Company
+B83A5A     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+E4-AA-EA   (hex)		Liteon Technology Corporation
+E4AAEA     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+A0-94-6A   (hex)		Shenzhen XGTEC Technology Co,.Ltd.
+A0946A     (base 16)		Shenzhen XGTEC Technology Co,.Ltd.
+				Room 312, Changhong Science and Technology Building, No.18, South 12 Rd., High-tech Community, Yuehai Street, Nanshan District, Shenzhen
+				Shenzhen  Guangdong  518057
+				CN
+
+1C-2A-A3   (hex)		Shenzhen HongRui Optical Technology Co., Ltd.
+1C2AA3     (base 16)		Shenzhen HongRui Optical Technology Co., Ltd.
+				B#2F Shuangjinhui Industrial Park, Yonghe Road, Heping Village, Fuyong Town, Bao'an Dis
+				Shenzhen  Guangdong  518000
+				CN
+
+38-8E-7A   (hex)		AUTOIT
+388E7A     (base 16)		AUTOIT
+				212, Gasan digital 1-ro
+				Seoul  Geumcheon-gu  08502
+				KR
+
+4C-71-0C   (hex)		Cisco Systems, Inc
+4C710C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+4C-71-0D   (hex)		Cisco Systems, Inc
+4C710D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-24-A6   (hex)		vivo Mobile Communication Co., Ltd.
+6C24A6     (base 16)		vivo Mobile Communication Co., Ltd.
+				#283,BBK Road
+				Wusha,Chang'An  DongGuan City,Guangdong,  523860
+				CN
+
+9C-5F-5A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+9C5F5A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+E4-47-B3   (hex)		zte corporation
+E447B3     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+FC-DB-21   (hex)		SAMSARA NETWORKS INC
+FCDB21     (base 16)		SAMSARA NETWORKS INC
+				525 York St
+				San Francisco  CA  94110
+				US
+
+60-77-71   (hex)		Texas Instruments
+607771     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+D8-CF-89   (hex)		Beijing DoSee Science and Technology Co., Ltd.
+D8CF89     (base 16)		Beijing DoSee Science and Technology Co., Ltd.
+				Room 819-158,Floor 8,XinCaiLiao Chuangye Building,No.7 FengHuiZhong Road, Haidian District
+				Beijing    100094
+				CN
+
+04-AA-E1   (hex)		BEIJING MICROVISION TECHNOLOGY CO.,LTD
+04AAE1     (base 16)		BEIJING MICROVISION TECHNOLOGY CO.,LTD
+				ROOM 207-208,2/F,TAIXIANG COMMERCIAL BUILDING,NO.1A,LONGXIANG ROAD,HAIDIAN DISTRICT,BEIJING,P.R.C
+				BEIJING  BEIJING  100191
+				CN
+
+44-DC-4E   (hex)		ITEL MOBILE LIMITED
+44DC4E     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+38-2A-19   (hex)		Technica Engineering GmbH
+382A19     (base 16)		Technica Engineering GmbH
+				Leopoldstraße 236
+				Munich    80807
+				DE
+
+74-D6-54   (hex)		GINT
+74D654     (base 16)		GINT
+				9F, 47, Daehak-ro, Youngtong-gu
+				Suwon-si  Gyeonggi-do  16225
+				KR
+
+B4-E8-C9   (hex)		XADA Technologies
+B4E8C9     (base 16)		XADA Technologies
+				No. 2-2, Xinyi Road Section 5, Lane 150, 1st Floor
+				Taipei City  Taipei City  110
+				TW
+
+7C-21-0E   (hex)		Cisco Systems, Inc
+7C210E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+94-2D-DC   (hex)		Samsung Electronics Co.,Ltd
+942DDC     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+54-F2-94   (hex)		Huawei Device Co., Ltd.
+54F294     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-5A-B5   (hex)		Samsung Electronics Co.,Ltd
+245AB5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+C0-D2-DD   (hex)		Samsung Electronics Co.,Ltd
+C0D2DD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+00-68-EB   (hex)		HP Inc.
+0068EB     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+7C-B3-7B   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+7CB37B     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+				No.218 Qianwangang Road
+				Qingdao  Shangdong  266510
+				CN
+
+48-4C-86   (hex)		Huawei Device Co., Ltd.
+484C86     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+88-12-3D   (hex)		Suzhou Aquila Solutions Inc.
+88123D     (base 16)		Suzhou Aquila Solutions Inc.
+				Room 201, Building 3, 18 Dongchang Road, Suzhou Industry Park, Suzhou, PRC. Zip Code: 215000
+				Suzhou    215000
+				CN
+
+48-21-0B   (hex)		PEGATRON CORPORATION
+48210B     (base 16)		PEGATRON CORPORATION
+				5F No. 76, Ligong St., Beitou District
+				Taipei City  Taiwan  112
+				TW
+
+A0-1C-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A01C8D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-31-0E   (hex)		Cisco Systems, Inc
+7C310E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Dr.
+				San Jose  CA  94568
+				US
+
+F4-DE-AF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F4DEAF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-12-3C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60123C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-A5-E7   (hex)		Nintendo Co.,Ltd
+48A5E7     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+08-2C-B6   (hex)		Apple, Inc.
+082CB6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-4E-73   (hex)		Apple, Inc.
+F84E73     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-26-5D   (hex)		Taicang T&W Electronics
+B4265D     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+F0-78-07   (hex)		Apple, Inc.
+F07807     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-CD-36   (hex)		Apple, Inc.
+3CCD36     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-B7-09   (hex)		zte corporation
+D4B709     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+38-14-4E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+38144E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+AC-BD-0B   (hex)		Leimac Ltd.
+ACBD0B     (base 16)		Leimac Ltd.
+				1551, Sazukawa-chou
+				Moriyama-shi  Shiga-ken  524-0215
+				JP
+
+E0-CC-F8   (hex)		Xiaomi Communications Co Ltd
+E0CCF8     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+98-52-4A   (hex)		Technicolor CH USA Inc.
+98524A     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+B4-A5-AC   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+B4A5AC     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+1C-78-4E   (hex)		China Mobile Iot Limited company
+1C784E     (base 16)		China Mobile Iot Limited company
+				No. 8 Yangliu North Road, Yubei District, Chongqing, China
+				Chong Qing  Chong Qing  401120
+				CN
+
+84-3E-79   (hex)		Shenzhen Belon Technology CO.,LTD
+843E79     (base 16)		Shenzhen Belon Technology CO.,LTD
+				Tsinghua Information
+				Shenzhen  Guangdong  518052
+				CN
+
+B8-19-04   (hex)		Nokia Shanghai Bell Co., Ltd.
+B81904     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+F4-A5-9D   (hex)		Huawei Device Co., Ltd.
+F4A59D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-F4-42   (hex)		Huawei Device Co., Ltd.
+E0F442     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F0-C4-2F   (hex)		Huawei Device Co., Ltd.
+F0C42F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C0-B4-7D   (hex)		Huawei Device Co., Ltd.
+C0B47D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+44-46-87   (hex)		Realme Chongqing MobileTelecommunications Corp Ltd
+444687     (base 16)		Realme Chongqing MobileTelecommunications Corp Ltd
+				No.24 Nichang Boulevard, Huixing Block, Yubei District, Chongqing.
+				Chongqing  China  401120
+				CN
+
+E8-26-89   (hex)		Aruba, a Hewlett Packard Enterprise Company
+E82689     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+20-F3-75   (hex)		ARRIS Group, Inc.
+20F375     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+84-BB-69   (hex)		ARRIS Group, Inc.
+84BB69     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+10-5F-D4   (hex)		Tendyron Corporation
+105FD4     (base 16)		Tendyron Corporation
+				Tendyron Building,Zhongguancun NO.1 Park,Beiqing Road,Haidian District,Beijing,China
+				Beijing    100000
+				CN
+
+8C-E3-8E   (hex)		Kioxia Corporation
+8CE38E     (base 16)		Kioxia Corporation
+				1-21, Shibaura 3-chome
+				Minato-ku  Tokyo  108-0023
+				JP
+
+A0-B4-39   (hex)		Cisco Systems, Inc
+A0B439     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-B4-39   (hex)		Cisco Systems, Inc
+A4B439     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-10-38   (hex)		Micro Research Ltd.
+001038     (base 16)		Micro Research Ltd.
+				2F Minami-Shinagawa N Bldg., 2-2-10 Minami-Shinagawa
+				Tokyo  Shinagawa-Ku  140-0004
+				JP
+
+E8-1B-4B   (hex)		amnimo Inc.
+E81B4B     (base 16)		amnimo Inc.
+				M21-4, 2-9-32 Nakacho
+				Musashino-shi  Tokyo  180-8750
+				JP
+
+CC-F4-11   (hex)		Google, Inc.
+CCF411     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+9C-2D-CF   (hex)		Shishi Tongyun Technology(Chengdu)Co.,Ltd.
+9C2DCF     (base 16)		Shishi Tongyun Technology(Chengdu)Co.,Ltd.
+				No. 1268 Middle Section of Tianfu Avenue, Chengdu High-tech Zone, China (Sichuan) Pilot Free Trade Zone
+				Chengdu  Sichuan  610017
+				CN
+
+94-24-B8   (hex)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
+9424B8     (base 16)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
+				Jinji West Road, Qianshan,
+				Zhuhai  Guangdong  519070
+				CN
+
+C8-03-F5   (hex)		Ruckus Wireless
+C803F5     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+00-0D-0A   (hex)		Barco Projection Systems NV
+000D0A     (base 16)		Barco Projection Systems NV
+				Beneluxpark 21
+				Kortrijk  West Flanders  8500
+				BE
+
+C4-67-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C467D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+9C-8A-CB   (hex)		Juniper Networks
+9C8ACB     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C8-C4-65   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C8C465     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+1C-43-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C4363     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-29-2F   (hex)		New H3C Technologies Co., Ltd
+94292F     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+D4-9A-A0   (hex)		VNPT TECHNOLOGY
+D49AA0     (base 16)		VNPT TECHNOLOGY
+				HoaLac Hi-Tech Park
+				HANOI  HANOI  10000
+				VN
+
+F8-0F-F9   (hex)		Google, Inc.
+F80FF9     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+8C-5A-C1   (hex)		Huawei Device Co., Ltd.
+8C5AC1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A8-5A-E0   (hex)		Huawei Device Co., Ltd.
+A85AE0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A4-B6-1E   (hex)		Huawei Device Co., Ltd.
+A4B61E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-FE-5B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C4FE5B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+C0-39-37   (hex)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
+C03937     (base 16)		GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
+				Jinji West Road, Qianshan,
+				Zhuhai  Guangdong  519070
+				CN
+
+B4-4C-3B   (hex)		Zhejiang Dahua Technology Co., Ltd.
+B44C3B     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+40-A2-DB   (hex)		Amazon Technologies Inc.
+40A2DB     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+4C-6C-13   (hex)		IoT Company Solucoes Tecnologicas Ltda
+4C6C13     (base 16)		IoT Company Solucoes Tecnologicas Ltda
+				Rua Jordao Schiavetto, 436 - Sala 6
+				Hortolandia  Sao Paulo  13184-080
+				BR
+
+A8-85-D7   (hex)		Sangfor Technologies Inc.
+A885D7     (base 16)		Sangfor Technologies Inc.
+				block A1 ?nanshan ipark, No 1001, xueyuan road
+				Shenzhen    518100
+				CN
+
+44-4A-DB   (hex)		Apple, Inc.
+444ADB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+84-F8-83   (hex)		Luminar Technologies
+84F883     (base 16)		Luminar Technologies
+				12601 Research Pkwy
+				Orlando  FL  32828-7335
+				US
+
+9C-A5-13   (hex)		Samsung Electronics Co.,Ltd
+9CA513     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+10-39-E9   (hex)		Juniper Networks
+1039E9     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+30-90-48   (hex)		Apple, Inc.
+309048     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+D4-1F-0C   (hex)		JAI Manufacturing
+D41F0C     (base 16)		JAI Manufacturing
+				2960-14 Uenojo Nishikata
+				Kushima  Miyazaki  888-0004
+				JP
+
+C8-FA-84   (hex)		Trusonus corp.
+C8FA84     (base 16)		Trusonus corp.
+				6F., No.42, Songjiang Rd., Zhongshan Dist
+				Taipei    10455
+				TW
+
+C4-02-E1   (hex)		Khwahish Technologies Private Limited
+C402E1     (base 16)		Khwahish Technologies Private Limited
+				Plot # 42, Thirugnana Sambandhar Street, Srinivasa Nagar, Madipakkam
+				Chennai  TamilNadu  600091
+				IN
+
+F8-5B-3B   (hex)		ASKEY COMPUTER CORP
+F85B3B     (base 16)		ASKEY COMPUTER CORP
+				10F,No.119,JIANKANG RD,ZHONGHE DIST
+				NEW TAIPEI  TAIWAN  23585
+				TW
+
+78-6D-EB   (hex)		GE Lighting
+786DEB     (base 16)		GE Lighting
+				1975 Noble Rd
+				East Cleveland  OH  44112
+				US
+
+88-E9-A4   (hex)		Hewlett Packard Enterprise
+88E9A4     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+28-63-BD   (hex)		APTIV SERVICES US, LLC
+2863BD     (base 16)		APTIV SERVICES US, LLC
+				5725 Innovation Drive
+				Troy  MI  48098
+				US
+
+1C-72-1D   (hex)		Dell Inc.
+1C721D     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+F4-1C-95   (hex)		BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
+F41C95     (base 16)		BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
+				Room 2005, 2f, building B, No.1 Kaituo Road, Shangdi Information Industry base, Haidian District
+				BEIJING    100085
+				CN
+
+A0-68-7E   (hex)		ARRIS Group, Inc.
+A0687E     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+A8-70-5D   (hex)		ARRIS Group, Inc.
+A8705D     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+9C-97-89   (hex)		1MORE
+9C9789     (base 16)		1MORE
+				TianliaoBuilding F14, New Materials Industrial Park, Xueyuan Blvd?Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+1C-05-B7   (hex)		Chongqing Trantor Technology Co., Ltd.
+1C05B7     (base 16)		Chongqing Trantor Technology Co., Ltd.
+				No.69,Huoju Avenue,Jiulongpo District.
+				Chongqing  Chongqing  400050
+				CN
+
+00-0E-F3   (hex)		Smartlabs, Inc. 
+000EF3     (base 16)		Smartlabs, Inc. 
+				1621 Alton Parkway, Suite 100
+				Irvine  CA  92606
+				US
+
+A0-43-B0   (hex)		Hangzhou BroadLink Technology Co.,Ltd
+A043B0     (base 16)		Hangzhou BroadLink Technology Co.,Ltd
+				Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China
+				Hangzhou  Zhejiang  310052
+				CN
+
+D8-C5-61   (hex)		CommFront Communications Pte Ltd
+D8C561     (base 16)		CommFront Communications Pte Ltd
+				No. 1 Yishun Industrial ST 1, #05-31 A'Posh BizHub
+				SG  SG  768160
+				SG
+
+0C-29-EF   (hex)		Dell Inc.
+0C29EF     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+60-D8-9C   (hex)		HMD Global Oy
+60D89C     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+F8-2E-8E   (hex)		Nanjing Kechen Electric Co., Ltd.
+F82E8E     (base 16)		Nanjing Kechen Electric Co., Ltd.
+				Room 202, Building 12, No. 50 Daguang road
+				Nanjing    210001
+				CN
+
+B4-C9-B9   (hex)		Sichuan AI-Link Technology Co., Ltd.
+B4C9B9     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+F0-46-3B   (hex)		Comcast Cable Corporation
+F0463B     (base 16)		Comcast Cable Corporation
+				1800 Arch Street
+				Philadelphia  PA  19103
+				US
+
+1C-63-BF   (hex)		SHENZHEN BROADTEL  TELECOM CO.,LTD
+1C63BF     (base 16)		SHENZHEN BROADTEL  TELECOM CO.,LTD
+				No.14-1, Tongqing Road, Baolong street, Longgang District
+				ShenZhen  GuangDong  518116
+				CN
+
+AC-36-51   (hex)		Jiangsu Hengtong Terahertz Technology Co., Ltd.
+AC3651     (base 16)		Jiangsu Hengtong Terahertz Technology Co., Ltd.
+				Room 1312, Beiyou Technology Building, Haidian District
+				Beijing  Beijing  100876
+				CN
+
+68-4A-76   (hex)		eero inc.
+684A76     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+68-8F-C9   (hex)		Zhuolian (Shenzhen) Communication Co., Ltd
+688FC9     (base 16)		Zhuolian (Shenzhen) Communication Co., Ltd
+				Shengli electromechanical Co., Ltd. 201, No.19, Xixiang section, Guangshen Road, Jingbei community, Xixiang street, Bao'an District
+				Shenzhen  Shenzhen  518101
+				CN
+
+F0-81-75   (hex)		Sagemcom Broadband SAS
+F08175     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+D8-47-32   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+D84732     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+28-64-B0   (hex)		Huawei Device Co., Ltd.
+2864B0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+04-F1-69   (hex)		Huawei Device Co., Ltd.
+04F169     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-21-EC   (hex)		Huawei Device Co., Ltd.
+5021EC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+8C-68-3A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+8C683A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B4-6E-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B46E08     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-5E-0C   (hex)		HMD Global Oy
+005E0C     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+B4-81-07   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+B48107     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+70-66-55   (hex)		AzureWave Technology Inc.
+706655     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+64-7C-34   (hex)		Ubee Interactive Co., Limited
+647C34     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower 
+				North Point  Hong Kong  180
+				HK
+
+6C-38-A1   (hex)		Ubee Interactive Co., Limited
+6C38A1     (base 16)		Ubee Interactive Co., Limited
+				Flat/RM 1202, 12/F, AT Tower 
+				North Point  Hong Kong  180
+				HK
+
+0C-48-C6   (hex)		CELESTICA INC.
+0C48C6     (base 16)		CELESTICA INC.
+				1900-5140 Yonge Street PO Box 42   
+				Toronto  Ontario  M2N 6L7
+				CA
+
+A4-29-85   (hex)		Sichuan AI-Link Technology Co., Ltd.
+A42985     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+78-AC-44   (hex)		Dell Inc.
+78AC44     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+B8-D4-E7   (hex)		Aruba, a Hewlett Packard Enterprise Company
+B8D4E7     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+D8-4C-90   (hex)		Apple, Inc.
+D84C90     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+24-D0-DF   (hex)		Apple, Inc.
+24D0DF     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+6C-4A-85   (hex)		Apple, Inc.
+6C4A85     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-F0-33   (hex)		Apple, Inc.
+28F033     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-9E-F7   (hex)		Extreme Networks, Inc.
+209EF7     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+BC-09-63   (hex)		Apple, Inc.
+BC0963     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-58-69   (hex)		Sailer Electronic Co., Ltd
+185869     (base 16)		Sailer Electronic Co., Ltd
+				No. 6, Sanxi Road, Ximagou Industrial Park, Jianxi District
+				Luoyang  Henan  471000
+				CN
+
+BC-2D-EF   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+BC2DEF     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+78-81-CE   (hex)		China Mobile Iot Limited company
+7881CE     (base 16)		China Mobile Iot Limited company
+				No. 8 Yangliu North Road, Yubei District, Chongqing, China
+				Chong Qing  Chong Qing  401120
+				CN
+
+BC-FF-21   (hex)		Smart Code(shenzhen)Technology Co.,Ltd
+BCFF21     (base 16)		Smart Code(shenzhen)Technology Co.,Ltd
+				Room 1206, Satellite Building,2002 Keyuan Road, Nanshan 
+				Shenzhen   Guangdong (Province)   518000
+				CN
+
+44-5C-E9   (hex)		Samsung Electronics Co.,Ltd
+445CE9     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+C0-16-92   (hex)		China Mobile Group Device Co.,Ltd.
+C01692     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+38-17-30   (hex)		Ulrich Lippert GmbH & Co KG
+381730     (base 16)		Ulrich Lippert GmbH & Co KG
+				Christian-Henkel-Str. 12
+				Berlin    12349
+				DE
+
+40-2E-71   (hex)		Texas Instruments
+402E71     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+70-76-DD   (hex)		OxyGuard Internation A/S
+7076DD     (base 16)		OxyGuard Internation A/S
+				Farum Gydevej 64
+				Farum    DK-3520
+				DK
+
+94-E9-EE   (hex)		Huawei Device Co., Ltd.
+94E9EE     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+28-E3-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+28E34E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E0-23-FF   (hex)		Fortinet, Inc.
+E023FF     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale    94086
+				US
+
+8C-59-DC   (hex)		ASR Microelectronics (Shanghai) Co., Ltd.
+8C59DC     (base 16)		ASR Microelectronics (Shanghai) Co., Ltd.
+				Building 2, NO.399 Keyuan Road,Pudong District
+				Shanghai  Shanghai  201210
+				CN
+
+18-82-8C   (hex)		Arcadyan Corporation
+18828C     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+9C-F0-29   (hex)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+9CF029     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+28-56-C1   (hex)		Harman/Becker Automotive Systems GmbH
+2856C1     (base 16)		Harman/Becker Automotive Systems GmbH
+				15th Fl, 400 Atlantic Street
+				Stamford  CT  06901
+				US
+
+78-B8-D6   (hex)		Zebra Technologies Inc.
+78B8D6     (base 16)		Zebra Technologies Inc.
+				ONE ZEBRA PLAZA
+				HOLTSVILLE  NY  11742
+				US
+
+BC-4A-56   (hex)		Cisco Systems, Inc
+BC4A56     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-61-F4   (hex)		SFR
+6C61F4     (base 16)		SFR
+				12 rue jean-philippe Rameau CS 80001
+				La plaine saint denis   FRANCE  93634
+				FR
+
+F4-90-CB   (hex)		IEEE Registration Authority
+F490CB     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-10-7F   (hex)		CRESTRON ELECTRONICS, INC.
+00107F     (base 16)		CRESTRON ELECTRONICS, INC.
+				15 Volvo Drive
+				Rockleigh  NJ  07647
+				US
+
+00-1B-85   (hex)		MAN Energy Solutions
+001B85     (base 16)		MAN Energy Solutions
+				Teglholmsgade 41
+				Copenhagen    2450
+				DK
+
+58-49-3B   (hex)		Palo Alto Networks
+58493B     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+00-1B-17   (hex)		Palo Alto Networks
+001B17     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+58-59-C2   (hex)		Extreme Networks, Inc.
+5859C2     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+B8-2F-CB   (hex)		CMS Electracom
+B82FCB     (base 16)		CMS Electracom
+				24 Binney Road
+				Kings Park  NSW  2148
+				AU
+
+10-CE-45   (hex)		Miromico AG
+10CE45     (base 16)		Miromico AG
+				Gallusstrasse 4
+				Zurich  Zurich  CH-8006
+				CH
+
+78-7D-53   (hex)		Extreme Networks, Inc.
+787D53     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+7C-95-B1   (hex)		Extreme Networks, Inc.
+7C95B1     (base 16)		Extreme Networks, Inc.
+				1011 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+EC-68-81   (hex)		Palo Alto Networks
+EC6881     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+78-6D-94   (hex)		Palo Alto Networks
+786D94     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+F8-AF-05   (hex)		Huawei Device Co., Ltd.
+F8AF05     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+4C-FC-AA   (hex)		Tesla,Inc.
+4CFCAA     (base 16)		Tesla,Inc.
+				3500 Deer Creek Rd.
+				PALO ALTO  CA  94304
+				US
+
+CC-AB-2C   (hex)		HUMAX Co., Ltd.
+CCAB2C     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+6C-6D-09   (hex)		Kyowa Electronics Co.,Ltd.
+6C6D09     (base 16)		Kyowa Electronics Co.,Ltd.
+				4-3-31 Takatsukasa
+				Takarazuka  Hyogo  665-0051
+				JP
+
+24-43-E2   (hex)		DASAN Network Solutions
+2443E2     (base 16)		DASAN Network Solutions
+				DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu
+				Seongnam-si  Gyeonggi-do  13493
+				KR
+
+A8-6A-BB   (hex)		Sagemcom Broadband SAS
+A86ABB     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+90-17-3F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+90173F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-FF-70   (hex)		Technicolor CH USA Inc.
+A0FF70     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville  GA  30044
+				US
+
+60-7E-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+607ECD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+54-8A-BA   (hex)		Cisco Systems, Inc
+548ABA     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-07-39   (hex)		NAKAYO Inc
+C80739     (base 16)		NAKAYO Inc
+				1-3-2, Soja-machi
+				Maebashi-shi  Gunma  371-0853
+				JP
+
+8C-7C-FF   (hex)		Brocade Communications Systems LLC
+8C7CFF     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+AC-3C-8E   (hex)		Flextronics Computing(Suzhou)Co.,Ltd.
+AC3C8E     (base 16)		Flextronics Computing(Suzhou)Co.,Ltd.
+				No.1 GuanPu Road. Guoxiang street , WuZhong District,Suzhou City, Jiangsu Province. 
+				Suzhou        215124   
+				CN
+
+40-62-34   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
+406234     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
+				No. 1500 Zuchongzhi Rd, Building #3
+				Shanghai    201203
+				CN
+
+88-94-71   (hex)		Brocade Communications Systems LLC
+889471     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+78-A6-E1   (hex)		Brocade Communications Systems LLC
+78A6E1     (base 16)		Brocade Communications Systems LLC
+				1320 Ridder Park Dr
+				San Jose  CA  95131
+				US
+
+00-94-EC   (hex)		Huawei Device Co., Ltd.
+0094EC     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+74-45-2D   (hex)		Huawei Device Co., Ltd.
+74452D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A4-50-06   (hex)		SHENZHEN HUACHUANG SHIDAI TECHNOLOGYCO.,LTD
+A45006     (base 16)		SHENZHEN HUACHUANG SHIDAI TECHNOLOGYCO.,LTD
+				longhua dalang huaronglu lianjiangongyeyuan 4-5
+				shenzhen  guangdong  518000
+				CN
+
+C8-71-25   (hex)		Johnson Outdoors Marine Electronics d/b/a Minnkota
+C87125     (base 16)		Johnson Outdoors Marine Electronics d/b/a Minnkota
+				1531 E Madison Ave
+				Mankato  MN  56001
+				US
+
+68-6D-BC   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+686DBC     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+80-CF-A2   (hex)		Huawei Device Co., Ltd.
+80CFA2     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+08-03-42   (hex)		Palo Alto Networks
+080342     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+FC-3D-A5   (hex)		Arcadyan Corporation
+FC3DA5     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+EC-4F-82   (hex)		Calix Inc.
+EC4F82     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+44-65-7F   (hex)		Calix Inc.
+44657F     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+48-77-46   (hex)		Calix Inc.
+487746     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+EC-6C-B5   (hex)		zte corporation
+EC6CB5     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+C0-B1-01   (hex)		zte corporation
+C0B101     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+14-01-52   (hex)		Samsung Electronics Co.,Ltd
+140152     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-33-AC   (hex)		Silicon Laboratories
+BC33AC     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+94-FB-A7   (hex)		IEEE Registration Authority
+94FBA7     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+98-8E-79   (hex)		Qudelix, Inc.
+988E79     (base 16)		Qudelix, Inc.
+				605-ho, 21, Baekbeom-ro 31-gil, Mapo-gu
+				Seoul    12110
+				KR
+
+98-F6-21   (hex)		Xiaomi Communications Co Ltd
+98F621     (base 16)		Xiaomi Communications Co Ltd
+				The Rainbow City of China Resources
+				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+				CN
+
+C0-3E-BA   (hex)		Dell Inc.
+C03EBA     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+C0-39-5A   (hex)		Zhejiang Dahua Technology Co., Ltd.
+C0395A     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+20-64-CB   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+2064CB     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+F0-55-01   (hex)		Huawei Device Co., Ltd.
+F05501     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+7C-F2-DD   (hex)		Vence Corp
+7CF2DD     (base 16)		Vence Corp
+				16885 W Bernardo Dr., STE 209
+				San Diego  CA  92127
+				US
+
+D0-76-8F   (hex)		Calix Inc.
+D0768F     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+14-13-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1413FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-E0-B7   (hex)		Cosworth Electronics Ltd
+00E0B7     (base 16)		Cosworth Electronics Ltd
+				The Octagon, St. James Mill Road
+				Northampton  Northamptonshire  NN5 5RA, GB
+				GB
+
+A4-93-40   (hex)		Beijing Supvan Information Technology Co.,Ltd.
+A49340     (base 16)		Beijing Supvan Information Technology Co.,Ltd.
+				206.2/F,Building No.1.No.1 Gaoxin Three Street. Huilongguan Town,Changping District
+				Beijing  Beijing  102206
+				CN
+
+F8-E8-77   (hex)		Harman/Becker Automotive Systems GmbH
+F8E877     (base 16)		Harman/Becker Automotive Systems GmbH
+				Becker-Göring-Straße 16
+				Karlsbad  Baden-Württemberg  76307
+				DE
+
+A0-9B-12   (hex)		China Mobile IOT Company Limited
+A09B12     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+94-08-53   (hex)		Liteon Technology Corporation
+940853     (base 16)		Liteon Technology Corporation
+				4F, 90, Chien 1 Road
+				New Taipei City  Taiwan  23585
+				TW
+
+B4-9E-80   (hex)		Sichuan Changhong Electric Ltd.
+B49E80     (base 16)		Sichuan Changhong Electric Ltd.
+				No.35,East MianXin Road,MianYang,Sichaun,China.
+				MianYang  SiChuan  PRC 621000
+				CN
+
+00-E2-2C   (hex)		China Mobile Group Device Co.,Ltd.
+00E22C     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+78-11-00   (hex)		Quantumsolution
+781100     (base 16)		Quantumsolution
+				Rm 903, STX V-Tower, 128, Gasandigital 1-ro, Geumcheon-gu
+				Seoul    08507
+				KR
+
+E8-7F-95   (hex)		Apple, Inc.
+E87F95     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-C0-8B   (hex)		Apple, Inc.
+88C08B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+74-AB-93   (hex)		Blink by Amazon 
+74AB93     (base 16)		Blink by Amazon 
+				100 Riverpark Drive
+				North Reading   MA  01864
+				US
+
+7C-A9-6B   (hex)		Syrotech Networks. Ltd.
+7CA96B     (base 16)		Syrotech Networks. Ltd.
+				UNIT NO.-5 20F, KIN WING INDUSTERIAL BUILDING,33 KIN WING STREET
+				TUEN MUN    999077
+				HK
+
+98-06-3C   (hex)		Samsung Electronics Co.,Ltd
+98063C     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+38-DE-AD   (hex)		Intel Corporate
+38DEAD     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+D4-6D-6D   (hex)		Intel Corporate
+D46D6D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+B4-69-21   (hex)		Intel Corporate
+B46921     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+F8-F2-1E   (hex)		Intel Corporate
+F8F21E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+74-A7-EA   (hex)		Amazon Technologies Inc.
+74A7EA     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+4C-7C-D9   (hex)		Apple, Inc.
+4C7CD9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-D7-AF   (hex)		IEEE Registration Authority
+F0D7AF     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+7C-B2-7D   (hex)		Intel Corporate
+7CB27D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+04-ED-33   (hex)		Intel Corporate
+04ED33     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+5C-80-B6   (hex)		Intel Corporate
+5C80B6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+84-C5-A6   (hex)		Intel Corporate
+84C5A6     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+AC-67-5D   (hex)		Intel Corporate
+AC675D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+F8-E4-E3   (hex)		Intel Corporate
+F8E4E3     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+D8-4F-37   (hex)		Proxis, spol. s r.o.
+D84F37     (base 16)		Proxis, spol. s r.o.
+				Slovenska 1
+				Bardejov  PSK  08501
+				SK
+
+AC-12-03   (hex)		Intel Corporate
+AC1203     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+DC-1B-A1   (hex)		Intel Corporate
+DC1BA1     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+5C-A5-BC   (hex)		eero inc.
+5CA5BC     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco    94107
+				US
+
+04-33-C2   (hex)		Intel Corporate
+0433C2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+C8-58-C0   (hex)		Intel Corporate
+C858C0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+64-BC-58   (hex)		Intel Corporate
+64BC58     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+A4-C3-F0   (hex)		Intel Corporate
+A4C3F0     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+50-76-AF   (hex)		Intel Corporate
+5076AF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+DC-91-BF   (hex)		Amazon Technologies Inc.
+DC91BF     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+E0-92-A7   (hex)		Feitian Technologies Co., Ltd
+E092A7     (base 16)		Feitian Technologies Co., Ltd
+				Floor 17, Tower B, Huizhi Mansion, No.9 Xueqing Rd, Haidian District
+				Beijing    100085
+				CN
+
+08-B0-A7   (hex)		Truebeyond Co., Ltd
+08B0A7     (base 16)		Truebeyond Co., Ltd
+				D-906, 60, Haan-ro
+				Gwangmyeong  Gyeonggi  14322
+				KR
+
+C0-63-69   (hex)		BINXIN TECHNOLOGY(ZHEJIANG) LTD.
+C06369     (base 16)		BINXIN TECHNOLOGY(ZHEJIANG) LTD.
+				B4066 Haichuang Park,368 Liuhe Road, Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+18-41-FE   (hex)		Digital 14
+1841FE     (base 16)		Digital 14
+				Elektroniikkatie 8
+				Oulu    90590
+				FI
+
+6C-CE-44   (hex)		1MORE
+6CCE44     (base 16)		1MORE
+				TianliaoBuilding F14?New Materials Industrial Park,Xueyuan Blvd,Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+B0-76-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B0761B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-11-62   (hex)		Arlo Technology
+A41162     (base 16)		Arlo Technology
+				3030 Orchard Parkway
+				San Jose  CA  95134
+				US
+
+00-1D-05   (hex)		Cooper Lighting Solutions
+001D05     (base 16)		Cooper Lighting Solutions
+				1121 Highway 74 S
+				Peachtree City  GA  30269
+				US
+
+8C-0E-60   (hex)		Nanjing Juplink Intelligent Technologies Co., Ltd.
+8C0E60     (base 16)		Nanjing Juplink Intelligent Technologies Co., Ltd.
+				 No. 757 Dixiu Road, Binjiang Economic Development Zone, Jiangning District
+				Nanjing  Jiangsu  211100
+				CN
+
+18-AB-1D   (hex)		Samsung Electronics Co.,Ltd
+18AB1D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-E9-2F   (hex)		HP Inc.
+BCE92F     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+84-37-D5   (hex)		Samsung Electronics Co.,Ltd
+8437D5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-82-C5   (hex)		Samsung Electronics Co.,Ltd
+3482C5     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+84-D8-1B   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+84D81B     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+E8-A2-45   (hex)		Juniper Networks
+E8A245     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+88-29-49   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+882949     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+F8-64-B8   (hex)		zte corporation
+F864B8     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+14-51-20   (hex)		Huawei Device Co., Ltd.
+145120     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C0-D1-93   (hex)		Huawei Device Co., Ltd.
+C0D193     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+3C-84-6A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+3C846A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+78-04-E3   (hex)		Huawei Device Co., Ltd.
+7804E3     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A4-3B-0E   (hex)		Huawei Device Co., Ltd.
+A43B0E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-A1-60   (hex)		Espressif Inc.
+24A160     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+DC-AE-EB   (hex)		Ruckus Wireless
+DCAEEB     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+24-81-C7   (hex)		Huawei Device Co., Ltd.
+2481C7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+FC-86-2A   (hex)		Huawei Device Co., Ltd.
+FC862A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-3D-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1C3D2F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-75-3E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+EC753E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-91-64   (hex)		ChongQing Lavid Technology Co., Ltd.
+909164     (base 16)		ChongQing Lavid Technology Co., Ltd.
+				Plant No. 3, Block M2, Photoelectric Park, Wuqiao Lianhe Economic Development Zone, Wanzhou District
+				Chongqing    404100
+				CN
+
+EC-DB-86   (hex)		API-K
+ECDB86     (base 16)		API-K
+				ZA Tire Poix
+				Saint Vincent de Mercuze  Isère  38660
+				FR
+
+48-43-DD   (hex)		Amazon Technologies Inc.
+4843DD     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+08-38-69   (hex)		Hong Kong AMobile Intelligent Corp. Limited Taiwan Branch
+083869     (base 16)		Hong Kong AMobile Intelligent Corp. Limited Taiwan Branch
+				8F.-1, No.700, Zhongzheng Rd., Zhonghe Dist.
+				New Taipei City 235    23552
+				TW
+
+D8-9E-D4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+D89ED4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+84-03-28   (hex)		Juniper Networks
+840328     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+00-1C-FC   (hex)		Sumitomo Electric Industries, Ltd
+001CFC     (base 16)		Sumitomo Electric Industries, Ltd
+				1-1-3, Shimaya, Konohana-ku
+				Osaka    554-0024
+				JP
+
+00-16-36   (hex)		Quanta Computer Inc.
+001636     (base 16)		Quanta Computer Inc.
+				No. 211, Wen Hwa 2Rd., Kuei Shan Hsiang
+				Tao Yuan Shien    0000
+				TW
+
+54-F1-5F   (hex)		Sichuan AI-Link Technology Co., Ltd.
+54F15F     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+E0-79-C4   (hex)		iRay Technology Company Limited
+E079C4     (base 16)		iRay Technology Company Limited
+				Building 45, No. 1000, Jinhai RD., Pudong New Area
+				Shanghai    201206
+				CN
+
+88-40-67   (hex)		infomark
+884067     (base 16)		infomark
+				3F. Humaxvillage, 216 Hwangsaeul-ro
+				Seongnam-si    13595
+				KR
+
+AC-95-72   (hex)		Jovision Technology Co., Ltd.
+AC9572     (base 16)		Jovision Technology Co., Ltd.
+				Floor 12, Building 3, Aosheng Square, No.1166 Xinluo Street
+				Jinan  Shandong  250101
+				CN
+
+40-D2-5F   (hex)		ITEL MOBILE LIMITED
+40D25F     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+A8-03-2A   (hex)		Espressif Inc.
+A8032A     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+00-19-F5   (hex)		Imagination Technologies Ltd
+0019F5     (base 16)		Imagination Technologies Ltd
+				Home Park Estate
+				Kings Langley  Hertfordshire  WD4 8LZ
+				GB
+
+00-CB-BD   (hex)		Cambridge Broadband Networks Group
+00CBBD     (base 16)		Cambridge Broadband Networks Group
+				1 Hammersmith Broadway
+				London    W6 9DL
+				GB
+
+58-94-A2   (hex)		KETEK GmbH
+5894A2     (base 16)		KETEK GmbH
+				Hofer Str. 3
+				München    81737
+				DE
+
+4C-22-19   (hex)		YUANFUDAO HK LIMTED
+4C2219     (base 16)		YUANFUDAO HK LIMTED
+				Building C, global creative center, No. 10, Furong street
+				Beijing    100102
+				CN
+
+54-D9-C6   (hex)		Huawei Device Co., Ltd.
+54D9C6     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+30-8A-F7   (hex)		Huawei Device Co., Ltd.
+308AF7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-E7-D8   (hex)		Samsung Electronics Co.,Ltd
+64E7D8     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+D8-EF-42   (hex)		Huawei Device Co., Ltd.
+D8EF42     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+80-CC-12   (hex)		Huawei Device Co., Ltd.
+80CC12     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+18-AA-0F   (hex)		Huawei Device Co., Ltd.
+18AA0F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B0-A4-60   (hex)		Intel Corporate
+B0A460     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3 
+				Kulim  Kedah  09000
+				MY
+
+AC-9A-96   (hex)		Maxlinear, Inc
+AC9A96     (base 16)		Maxlinear, Inc
+				Am Campeon 3
+				Neubiberg  Bavaria  85579
+				DE
+
+8C-70-86   (hex)		Gesellschaft für Sonder-EDV-Anlagen mbH
+8C7086     (base 16)		Gesellschaft für Sonder-EDV-Anlagen mbH
+				Lorsbacher Straße 31
+				Hofheim    65719
+				DE
+
+1C-28-AF   (hex)		Aruba, a Hewlett Packard Enterprise Company
+1C28AF     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+E4-24-6C   (hex)		Zhejiang Dahua Technology Co., Ltd.
+E4246C     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+E8-EB-1B   (hex)		Microchip Technology Inc.
+E8EB1B     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+84-02-83   (hex)		HUMAX Co., Ltd.
+840283     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+68-D6-ED   (hex)		GooWi Wireless Technology Co., Limited
+68D6ED     (base 16)		GooWi Wireless Technology Co., Limited
+				RM402 Building212, Tairan Technology Park, Futian District
+				Shenzhen  Guangdong  518000
+				CN
+
+00-E4-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+00E406     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+44-22-7C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+44227C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-B1-82   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CCB182     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-90-2F   (hex)		LG Electronics (Mobile Communications)
+48902F     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+28-B7-7C   (hex)		IEEE Registration Authority
+28B77C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+28-C2-1F   (hex)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+28C21F     (base 16)		SAMSUNG ELECTRO-MECHANICS(THAILAND)
+				93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+				Bangpakong  Chachoengsao  24180
+				TH
+
+F4-BF-A8   (hex)		Juniper Networks
+F4BFA8     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C0-61-9A   (hex)		IEEE Registration Authority
+C0619A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+C4-2B-44   (hex)		Huawei Device Co., Ltd.
+C42B44     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F8-A2-6D   (hex)		CANON INC.
+F8A26D     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+74-42-7F   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+74427F     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+40-06-34   (hex)		Huawei Device Co., Ltd.
+400634     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+70-61-EE   (hex)		Sunwoda Electronic Co.,Ltd
+7061EE     (base 16)		Sunwoda Electronic Co.,Ltd
+				No 2,Yihe Road, shiyan Street?shilong Community ,Baoan District
+				Shenzhen    518105
+				CN
+
+14-3F-C3   (hex)		SnapAV
+143FC3     (base 16)		SnapAV
+				1800 Continental Blvd
+				Charlotte  NC  28273
+				US
+
+20-9A-7D   (hex)		Sagemcom Broadband SAS
+209A7D     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+74-F9-CA   (hex)		Nintendo Co.,Ltd
+74F9CA     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+50-C6-8E   (hex)		Biwin Semiconductor (HK) Company Limted
+50C68E     (base 16)		Biwin Semiconductor (HK) Company Limted
+				5th/F., Block 4, Tongfuyu Industrial Park, Tanglang, Xili, Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+04-E7-95   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04E795     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-D0-DC   (hex)		Amazon Technologies Inc.
+A0D0DC     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+68-9E-0B   (hex)		Cisco Systems, Inc
+689E0B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+C8-FE-6A   (hex)		Juniper Networks
+C8FE6A     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+80-CA-4B   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LTD
+80CA4B     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LTD
+				No.2, Danzi North Road, Kengzi Street,Pingshan District,
+				SHENZHEN  GUANGDONG  518122
+				CN
+
+64-F5-4E   (hex)		EM Microelectronic
+64F54E     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+10-27-79   (hex)		Sadel S.p.A.
+102779     (base 16)		Sadel S.p.A.
+				via Marino Serenari, 1
+				Castel Maggiore  Bologna  40013
+				IT
+
+C4-DD-57   (hex)		Espressif Inc.
+C4DD57     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+70-2F-4B   (hex)		Steelcase Inc.
+702F4B     (base 16)		Steelcase Inc.
+				901 44th Street SE
+				Grand Rapids  MI  49508-7594
+				US
+
+E4-75-DC   (hex)		Arcadyan Corporation
+E475DC     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+C4-16-88   (hex)		Huawei Device Co., Ltd.
+C41688     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-B0-E8   (hex)		Huawei Device Co., Ltd.
+64B0E8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+BC-A5-A9   (hex)		Apple, Inc.
+BCA5A9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+20-E2-A8   (hex)		Apple, Inc.
+20E2A8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A0-FB-C5   (hex)		Apple, Inc.
+A0FBC5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-A9-98   (hex)		Huawei Device Co., Ltd.
+30A998     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-7D-60   (hex)		Apple, Inc.
+007D60     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+EC-C3-02   (hex)		HUMAX Co., Ltd.
+ECC302     (base 16)		HUMAX Co., Ltd.
+				HUMAX Village, 216, Hwangsaeul-ro, Bu
+				Seongnam-si  Gyeonggi-do  463-875
+				KR
+
+00-C3-43   (hex)		E-T-A Circuit Breakers Ltd
+00C343     (base 16)		E-T-A Circuit Breakers Ltd
+				6 Telford Close
+				Aylesbury  Buckinghamshire  HP198DG
+				GB
+
+58-20-8A   (hex)		IEEE Registration Authority
+58208A     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-90-D2   (hex)		Artel Video Systems
+0090D2     (base 16)		Artel Video Systems
+				5B Lyberty Way
+				Westford  MA  01886
+				US
+
+F0-AA-0B   (hex)		Arra Networks/ Spectramesh
+F0AA0B     (base 16)		Arra Networks/ Spectramesh
+				9201 Ward Pkwy #101
+				Kansas City  MO  64114
+				US
+
+94-56-41   (hex)		Palo Alto Networks
+945641     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+80-F5-B5   (hex)		Texas Instruments
+80F5B5     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+1C-30-08   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+1C3008     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+98-06-3A   (hex)		Home Control Singapore Pte Ltd
+98063A     (base 16)		Home Control Singapore Pte Ltd
+				151 Lorong Chuan
+				Singapore    556741
+				SG
+
+B4-BA-12   (hex)		China Mobile (Hangzhou) Information Technology Co.,Ltd.
+B4BA12     (base 16)		China Mobile (Hangzhou) Information Technology Co.,Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  311100
+				CN
+
+5C-F9-FD   (hex)		Taicang T&W Electronics
+5CF9FD     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+38-98-E9   (hex)		Huawei Device Co., Ltd.
+3898E9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+48-A5-16   (hex)		Huawei Device Co., Ltd.
+48A516     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+18-36-72   (hex)		Shaoxing ShunChuang Technology CO.,LTD
+183672     (base 16)		Shaoxing ShunChuang Technology CO.,LTD
+				N.O.398 west tongjiang load shangyu
+				Shaoxing  Zhejiang  312300
+				CN
+
+28-DE-65   (hex)		Aruba, a Hewlett Packard Enterprise Company
+28DE65     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+B0-A6-51   (hex)		Cisco Systems, Inc
+B0A651     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D4-91-0F   (hex)		Amazon Technologies Inc.
+D4910F     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+B8-5F-B0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B85FB0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-FB-AA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4FBAA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-DC-CA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ACDCCA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-78-31   (hex)		Huawei Device Co., Ltd.
+C07831     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+84-CC-63   (hex)		Huawei Device Co., Ltd.
+84CC63     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-E0-C2   (hex)		China Mobile Group Device Co.,Ltd.
+E0E0C2     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+F0-64-26   (hex)		Extreme Networks, Inc.
+F06426     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+70-3A-2D   (hex)		Shenzhen V-Link Technology CO., LTD.
+703A2D     (base 16)		Shenzhen V-Link Technology CO., LTD.
+				Room 1803, BaiRuiDa Building, Bantian Sub-district, LongGang District
+				Shenzhen  GuangDong  518000
+				CN
+
+1C-45-C2   (hex)		Huizhou City Sunsin lntelligent Technology Co.,Ltd
+1C45C2     (base 16)		Huizhou City Sunsin lntelligent Technology Co.,Ltd
+				Outside No.6 community, Zhongkai high tech Zone, Huizhou
+				Huizhou    516000
+				CN
+
+7C-4E-09   (hex)		Shenzhen Skyworth Wireless Technology Co.,Ltd
+7C4E09     (base 16)		Shenzhen Skyworth Wireless Technology Co.,Ltd
+				Unit 3A01,Block A Skyworth Building,Gaoxin Ave.I.S.,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+EC-7E-91   (hex)		ITEL MOBILE LIMITED
+EC7E91     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+FC-96-43   (hex)		Juniper Networks
+FC9643     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+A8-B0-88   (hex)		eero inc.
+A8B088     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+00-1A-65   (hex)		Seluxit
+001A65     (base 16)		Seluxit
+				Sofiendalsvej 74
+				Aalborg  SV  9200
+				DK
+
+28-0F-C5   (hex)		Beijing Leadsec Technology Co., Ltd.
+280FC5     (base 16)		Beijing Leadsec Technology Co., Ltd.
+				Venus Plaza No.21Zhongguancun Software Park,No.8 Dongbeiwang Xilu, Haidian District
+				Beijing  Beijing  100193
+				CN
+
+1C-EC-72   (hex)		Allradio Co., Ltd
+1CEC72     (base 16)		Allradio Co., Ltd
+				76, Deokcheon-ro 34beon-gil, Manan-gu
+				Anyang-si,Gyeonggi-do  Republic of Korea  430-803
+				KR
+
+E0-E1-A9   (hex)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+E0E1A9     (base 16)		Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+				Room 607-610, Block B, TAOJINDI Electronic Business Incubation Base
+				Tenglong Road, Longhua District,   Shenzhen Guangdong  518000
+				CN
+
+6C-14-14   (hex)		BUJEON ELECTRONICS Co,.Ltd
+6C1414     (base 16)		BUJEON ELECTRONICS Co,.Ltd
+				59, Seonjinan-gil, Sangnok-gu
+				Ansan-si  Gyeonggi-do  15633
+				KR
+
+C4-3C-EA   (hex)		BUFFALO.INC
+C43CEA     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+B0-EC-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B0ECDD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-67-84   (hex)		Google, Inc.
+AC6784     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+90-DE-80   (hex)		Shenzhen Century Xinyang Technology Co., Ltd
+90DE80     (base 16)		Shenzhen Century Xinyang Technology Co., Ltd
+				3F, North Building, Bantian High-tech industrial Zone, No. 2 of Bell Road
+				Shenzhen  Guangdong  518129
+				CN
+
+E4-DC-43   (hex)		Huawei Device Co., Ltd.
+E4DC43     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-30-F8   (hex)		Huawei Device Co., Ltd.
+2430F8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+9C-5F-B0   (hex)		Samsung Electronics Co.,Ltd
+9C5FB0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+E8-7F-6B   (hex)		Samsung Electronics Co.,Ltd
+E87F6B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+FC-B6-9D   (hex)		Zhejiang Dahua Technology Co., Ltd.
+FCB69D     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+18-5B-B3   (hex)		Samsung Electronics Co.,Ltd
+185BB3     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+94-F2-BB   (hex)		Valeo Vision Systems
+94F2BB     (base 16)		Valeo Vision Systems
+				Dunmore Road
+				Tuam  Co. Galway  H54 Y276
+				IE
+
+64-20-E0   (hex)		T3 Technology Co., Ltd.
+6420E0     (base 16)		T3 Technology Co., Ltd.
+				No.65/113, Chamnan Phenjati, 12A Floor, Rama9 road
+				Bangkok  Bangkok  10310
+				TH
+
+5C-C0-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5CC0A0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-F3-52   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04F352     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+EC-A1-D1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ECA1D1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-6D-A4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A46DA4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-8B-0A   (hex)		Cisco Systems, Inc
+488B0A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+24-94-CB   (hex)		ARRIS Group, Inc.
+2494CB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+78-6A-1F   (hex)		ARRIS Group, Inc.
+786A1F     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+8C-7A-15   (hex)		Ruckus Wireless
+8C7A15     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+84-11-C2   (hex)		IEEE Registration Authority
+8411C2     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+28-AD-18   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+28AD18     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.75,Zhongkai High-Tech Development District,Huizhou
+				Hui Zhou  Guangdong  516006
+				CN
+
+24-A4-87   (hex)		Huawei Device Co., Ltd.
+24A487     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-5A-86   (hex)		Huawei Device Co., Ltd.
+C45A86     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+20-AC-9C   (hex)		China Telecom Corporation Limited
+20AC9C     (base 16)		China Telecom Corporation Limited
+				31 Jinrong Street, Xicheng District, Beijing, China
+				Beijing, China    100033
+				CN
+
+74-78-27   (hex)		Dell Inc.
+747827     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+94-09-D3   (hex)		shenzhen maxtopic technology co.,ltd
+9409D3     (base 16)		shenzhen maxtopic technology co.,ltd
+				F3,Building 4, Ji'an Industrial Park, Songbai Blvd
+				shenzhen  guangdong  518108
+				CN
+
+58-D5-6E   (hex)		D-Link International
+58D56E     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+F4-8C-EB   (hex)		D-Link International
+F48CEB     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+EC-AD-E0   (hex)		D-Link International
+ECADE0     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+34-0A-33   (hex)		D-Link International
+340A33     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+BC-62-CE   (hex)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
+BC62CE     (base 16)		SHENZHEN NETIS TECHNOLOGY CO.,LTD
+				8 Floor, Bd B, information port, Langshan RD, Nanshan district, 
+				Shenzhen  Guangdong  518057
+				CN
+
+78-2E-56   (hex)		China Mobile Group Device Co.,Ltd.
+782E56     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+C4-0B-31   (hex)		Apple, Inc.
+C40B31     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+30-24-A9   (hex)		HP Inc.
+3024A9     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+A8-6E-4E   (hex)		Huawei Device Co., Ltd.
+A86E4E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+94-5F-34   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+945F34     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+60-3C-EE   (hex)		LG Electronics (Mobile Communications)
+603CEE     (base 16)		LG Electronics (Mobile Communications)
+				60-39, Gasan-dong, Geumcheon-gu
+				Seoul    153-801
+				KR
+
+2C-4A-11   (hex)		Ciena Corporation
+2C4A11     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+1C-4C-48   (hex)		ITEL MOBILE LIMITED
+1C4C48     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+C4-CB-54   (hex)		Fibocom Auto Inc.
+C4CB54     (base 16)		Fibocom Auto Inc.
+				5/F,Tower A,Technology Building II,1057# Nanhai Blvd
+				Shenzhen  Guangdong  518054
+				CN
+
+10-2D-31   (hex)		Shenzhen Americas Trading Company LLC
+102D31     (base 16)		Shenzhen Americas Trading Company LLC
+				1308 Capital Ave.Suite #7
+				Plano  TX  75074
+				US
+
+2C-07-86   (hex)		Huawei Device Co., Ltd.
+2C0786     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+0C-35-4F   (hex)		Nokia
+0C354F     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+60-81-2B   (hex)		Astronics Custom Control Concepts
+60812B     (base 16)		Astronics Custom Control Concepts
+				6020 S 190th ST
+				Kent  Washington  98032
+				US
+
+F8-A7-3A   (hex)		Cisco Systems, Inc
+F8A73A     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+B8-11-4B   (hex)		Cisco Systems, Inc
+B8114B     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+30-E2-83   (hex)		Texas Instruments
+30E283     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+00-02-C7   (hex)		ALPSALPINE CO,.LTD
+0002C7     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi, Sama-City,
+				Sama    00000
+				JP
+
+FC-62-B9   (hex)		ALPSALPINE CO,.LTD
+FC62B9     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				kakuda-city  Miyagi-Pref  981-1595
+				JP
+
+60-38-0E   (hex)		ALPSALPINE CO,.LTD
+60380E     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi
+				Soma-city  Fukushima  976-8501
+				JP
+
+28-A1-83   (hex)		ALPSALPINE CO,.LTD
+28A183     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				Kakuda  Miyagi-Pref  981-1595
+				JP
+
+00-1E-3D   (hex)		ALPSALPINE CO,.LTD
+001E3D     (base 16)		ALPSALPINE CO,.LTD
+				1-2-1, Okinouchi,
+				Soma-city,  Fukushima-pref.,  976-8501
+				JP
+
+48-F0-7B   (hex)		ALPSALPINE CO,.LTD
+48F07B     (base 16)		ALPSALPINE CO,.LTD
+				6-1
+				Kakuda  Miyagi-Pref  981-1595
+				JP
+
+00-14-5A   (hex)		Westermo Neratec AG
+00145A     (base 16)		Westermo Neratec AG
+				Rosswiesstrasse 29
+				CH-8608  Bubikon  ZH
+				CH
+
+1C-D1-BA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+1CD1BA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+A8-99-DC   (hex)		i-TOP DESING TECHNOLOGY CO.,LTD
+A899DC     (base 16)		i-TOP DESING TECHNOLOGY CO.,LTD
+				301-302,Rongchengda Building,Dabao Road, Bao an District
+				Shenzhen    518101
+				CN
+
+B0-7B-25   (hex)		Dell Inc.
+B07B25     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock  TX  78682
+				US
+
+84-EA-ED   (hex)		Roku, Inc
+84EAED     (base 16)		Roku, Inc
+				1155 Coleman Ave
+				San Jose  CA  95110
+				US
+
+00-12-AD   (hex)		VIVAVIS AG
+0012AD     (base 16)		VIVAVIS AG
+				Nobelstraße, 18
+				Ettlingen  Baden-Württemberg  76275
+				DE
+
+E0-29-67   (hex)		HMD Global Oy
+E02967     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+98-8B-69   (hex)		Shenzhen hylitech Co.,LTD
+988B69     (base 16)		Shenzhen hylitech Co.,LTD
+				Room 1001, Tower B, Daulshine Global Science And Technology Center, Hong Lang 2 Road North, Baoan District, Shenzhen 518101, China
+				shenzhen  GuangDong  518109
+				CN
+
+18-14-6C   (hex)		Zhejiang Tmall Technology Co., Ltd.
+18146C     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+				Shenzhen  GuangDong  518000
+				CN
+
+3C-20-93   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+3C2093     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+9C-05-67   (hex)		Honor Device Co., Ltd.
+9C0567     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+B0-7D-64   (hex)		Intel Corporate
+B07D64     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+00-42-38   (hex)		Intel Corporate
+004238     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C0-E3-FB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C0E3FB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-4B-50   (hex)		Silicon Laboratories
+804B50     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+40-89-A8   (hex)		WiredIQ, LLC
+4089A8     (base 16)		WiredIQ, LLC
+				1 South School Avenue
+				sarasota  FL  34237
+				US
+
+68-3F-7D   (hex)		INGRAM MICRO SERVICES
+683F7D     (base 16)		INGRAM MICRO SERVICES
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN    82000
+				FR
+
+08-79-8C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+08798C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-C3-A2   (hex)		nFore Technology Co.,Ltd.
+50C3A2     (base 16)		nFore Technology Co.,Ltd.
+				5F., No.31, Ln. 258, Ruiguang Rd. Neihu Dist., Taipei City 114, Taiwan
+				Taipei    114
+				TW
+
+54-DB-A2   (hex)		Fibrain
+54DBA2     (base 16)		Fibrain
+				Zaczernie 190F
+				Zaczernie  Subcarpathia  36-062
+				PL
+
+08-9B-B9   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+089BB9     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+44-AE-25   (hex)		Cisco Systems, Inc
+44AE25     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-E7-12   (hex)		Cisco Systems, Inc
+BCE712     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+64-A1-98   (hex)		Huawei Device Co., Ltd.
+64A198     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+5C-9A-A1   (hex)		Huawei Device Co., Ltd.
+5C9AA1     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+60-55-F9   (hex)		Espressif Inc.
+6055F9     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+8C-EA-48   (hex)		Samsung Electronics Co.,Ltd
+8CEA48     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+00-5F-67   (hex)		TP-Link Corporation Limited
+005F67     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+BC-F4-5F   (hex)		zte corporation
+BCF45F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+B0-BD-1B   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+B0BD1B     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+				dongguan   guangdong  523000
+				CN
+
+10-96-93   (hex)		Amazon Technologies Inc.
+109693     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+34-AF-B3   (hex)		Amazon Technologies Inc.
+34AFB3     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+14-18-C3   (hex)		Intel Corporate
+1418C3     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+24-ED-FD   (hex)		Siemens Canada Limited
+24EDFD     (base 16)		Siemens Canada Limited
+				1954 Technology Drive
+				Peterborough  Ontario  K9J 6X7
+				CA
+
+6C-CD-D6   (hex)		NETGEAR
+6CCDD6     (base 16)		NETGEAR
+				350 East Plumeria Drive
+				San Jose  CA  95134
+				US
+
+54-07-64   (hex)		Huawei Device Co., Ltd.
+540764     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-D7-A0   (hex)		Huawei Device Co., Ltd.
+DCD7A0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+9C-68-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+9C6865     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+38-3D-5B   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+383D5B     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+A0-62-FB   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+A062FB     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+				Qianwangang Road 218
+				Qingdao  Shandong  266510
+				CN
+
+98-77-E7   (hex)		Kaonmedia CO., LTD.
+9877E7     (base 16)		Kaonmedia CO., LTD.
+				884-3, Seongnam-daero, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13517
+				KR
+
+78-D4-F1   (hex)		IEEE Registration Authority
+78D4F1     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+B0-16-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B01656     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-79-75   (hex)		Honor Device Co., Ltd.
+047975     (base 16)		Honor Device Co., Ltd.
+				A1701, Block AB, Building 1, Tianan Yungu Phase I, Gangtou Community, Bantian Street
+				Shenzhen  Guangdong  518129
+				CN
+
+DC-90-20   (hex)		RURU TEK PRIVATE LIMITED 
+DC9020     (base 16)		RURU TEK PRIVATE LIMITED 
+				The Canopy , BLOCK A  , SECOND FLOOR , UNIT 1B , PARANUR RAILWAY STATION ROAD ,MAHINDRA WORLD CITY,
+				CHENGALPATTU  TAMILNADU  603004
+				IN
+
+38-10-F0   (hex)		Aruba, a Hewlett Packard Enterprise Company
+3810F0     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+F8-8F-07   (hex)		Samsung Electronics Co.,Ltd
+F88F07     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-EB-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14EB08     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-42-A7   (hex)		Jiangsu Huitong Group Co.,Ltd.
+A842A7     (base 16)		Jiangsu Huitong Group Co.,Ltd.
+				No. 24, Block 2, Taohuawu New District
+				Zhenjiang  Jiangsu  212003
+				CN
+
+2C-D2-6B   (hex)		FN-LINK TECHNOLOGY LIMITED
+2CD26B     (base 16)		FN-LINK TECHNOLOGY LIMITED
+				A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+B8-8D-F1   (hex)		Nanjing BigFish Semiconductor Co., Ltd.
+B88DF1     (base 16)		Nanjing BigFish Semiconductor Co., Ltd.
+				7th Floor,Block A, Chuangzhi Building, No.17, Xinghuo Road
+				Nanjing  Jiangsu  210032
+				CN
+
+6C-4A-74   (hex)		AERODISK LLC
+6C4A74     (base 16)		AERODISK LLC
+				Obrucheva, 30/1 b1
+				Moscow  Moskva  117485
+				RU
+
+40-DE-17   (hex)		Shenzhen Lanfeng Times Industrial Co.,Ltd.
+40DE17     (base 16)		Shenzhen Lanfeng Times Industrial Co.,Ltd.
+				Introduction Building 6F,71 Xin’an Street, Baoan District
+				Shenzhen  Guangdong  518101
+				CN
+
+F0-16-28   (hex)		Technicolor (China) Technology Co., Ltd.
+F01628     (base 16)		Technicolor (China) Technology Co., Ltd.
+				No.A2181,2F,Zhongguancun Dongsheng Science and Technology Park, Jia No.18, Xueqing Rd., Haidian District
+				Beijing    100083
+				CN
+
+68-57-2D   (hex)		Tuya Smart Inc.
+68572D     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+28-5B-0C   (hex)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
+285B0C     (base 16)		Sichuan Jiuzhou Electronic Technology Co., Ltd.
+				No. 259, Jiuzhou Road
+				Mianyang City  Sichuan Province  621000
+				CN
+
+14-89-CB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+1489CB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-26-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C2636     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+48-68-4A   (hex)		Intel Corporate
+48684A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+BC-F1-71   (hex)		Intel Corporate
+BCF171     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+84-71-6A   (hex)		Huawei Device Co., Ltd.
+84716A     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+48-8C-63   (hex)		Huawei Device Co., Ltd.
+488C63     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+70-DD-EF   (hex)		Huawei Device Co., Ltd.
+70DDEF     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-A6-DB   (hex)		Huawei Device Co., Ltd.
+54A6DB     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+58-56-C2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5856C2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-36-79   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A03679     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+B8-D6-F6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+B8D6F6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-52-AF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2C52AF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-98-77   (hex)		Apple, Inc.
+149877     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-66-5A   (hex)		Apple, Inc.
+88665A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B0-E5-F9   (hex)		Apple, Inc.
+B0E5F9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-17-C8   (hex)		Cisco Meraki
+AC17C8     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+98-18-88   (hex)		Cisco Meraki
+981888     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+4C-C8-A1   (hex)		Cisco Meraki
+4CC8A1     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+58-FB-96   (hex)		Ruckus Wireless
+58FB96     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+F0-62-5A   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+F0625A     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+AC-23-16   (hex)		Mist Systems, Inc.
+AC2316     (base 16)		Mist Systems, Inc.
+				1601 South De Anza Blvd, Suite 248
+				Cupertino  CA  95014
+				US
+
+2C-00-AB   (hex)		ARRIS Group, Inc.
+2C00AB     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+3C-E3-6B   (hex)		Zhejiang Dahua Technology Co., Ltd.
+3CE36B     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+5C-17-20   (hex)		Huawei Device Co., Ltd.
+5C1720     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-3F-66   (hex)		Wuhan Funshion Online Technologies Co.,Ltd
+983F66     (base 16)		Wuhan Funshion Online Technologies Co.,Ltd
+				5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan
+				Wuhan  CN/Hubei  430000
+				CN
+
+60-5E-4F   (hex)		Huawei Device Co., Ltd.
+605E4F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+1C-E6-AD   (hex)		Huawei Device Co., Ltd.
+1CE6AD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+50-97-07   (hex)		Xiamen Paperang Technology Co.,Ltd.
+509707     (base 16)		Xiamen Paperang Technology Co.,Ltd.
+				Unit 1702-1703, 17/F, No.55, North Chengyi Road,Xiamen Software Park Phase 3
+				Xiamen  Fujian  361021
+				CN
+
+EC-63-D7   (hex)		Intel Corporate
+EC63D7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+14-85-7F   (hex)		Intel Corporate
+14857F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+1C-87-E3   (hex)		TECNO MOBILE LIMITED
+1C87E3     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+94-E2-3C   (hex)		Intel Corporate
+94E23C     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+20-B7-30   (hex)		TeconGroup, Inc
+20B730     (base 16)		TeconGroup, Inc
+				3rd Khoroshevskaya str., 20, floor 1, room 112
+				Moscow    123423
+				RU
+
+48-88-99   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+488899     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+DC-B1-31   (hex)		SHENZHEN HUARUIAN TECHNOLOGY CO.,LTD
+DCB131     (base 16)		SHENZHEN HUARUIAN TECHNOLOGY CO.,LTD
+				Floo2nd and 3rd floor, building A, Huixin Industrial Park, No.31 Yonghe Road, Heping community, Fuhai street, Bao'an District, Shenzhen, China
+				Shenzhen  Guangdong  518101
+				CN
+
+94-A4-F9   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+94A4F9     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-34-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C3491     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-4D-74   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E84D74     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-89-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CC895E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-44-FD   (hex)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+8044FD     (base 16)		China Mobile (Hangzhou) Information Technology Co., Ltd.
+				No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District, Hangzhou, Zhejiang
+				Hangzhou  Zhejiang  310000
+				CN
+
+F4-6A-D7   (hex)		Microsoft Corporation
+F46AD7     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+48-1F-2D   (hex)		Shenzhen Jie Shi Lian Industrial Co.,LTD
+481F2D     (base 16)		Shenzhen Jie Shi Lian Industrial Co.,LTD
+				6F,C Building,Jinao Industrial Park,Juling Rd,Guanlan Town,Longhua
+				Shenzhen  Guangdong  518000
+				CN
+
+8C-73-A0   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+8C73A0     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+14-09-B4   (hex)		zte corporation
+1409B4     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+10-10-81   (hex)		zte corporation
+101081     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+78-CF-F9   (hex)		Huawei Device Co., Ltd.
+78CFF9     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+A8-E8-1E   (hex)		ATW TECHNOLOGY, INC.
+A8E81E     (base 16)		ATW TECHNOLOGY, INC.
+				1F, No.236 Ba’ai Street, Shulin District
+				New Taipei City    23845
+				TW
+
+F8-85-F9   (hex)		Calix Inc.
+F885F9     (base 16)		Calix Inc.
+				2777 Orchard Pkwy
+				San Jose  CA  95131
+				US
+
+CC-88-C7   (hex)		Aruba, a Hewlett Packard Enterprise Company
+CC88C7     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+F8-1A-2B   (hex)		Google, Inc.
+F81A2B     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+F4-A8-0D   (hex)		Wistron InfoComm(Kunshan)Co.,Ltd.
+F4A80D     (base 16)		Wistron InfoComm(Kunshan)Co.,Ltd.
+				168# First Avenue,Kunshan Integrated Free Trade Zone,Kunshan,Jiangsu,China
+				Kunshan  Jiangsu  215300
+				CN
+
+08-A1-89   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+08A189     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+3C-A8-ED   (hex)		smart light technology
+3CA8ED     (base 16)		smart light technology
+				172 LSro
+				Gunpo  Gyeonggido  15807
+				KR
+
+04-C2-9B   (hex)		Aura Home, Inc.
+04C29B     (base 16)		Aura Home, Inc.
+				50 Eldridge Street, Suite 5D
+				New York  NY  10002
+				US
+
+14-3B-42   (hex)		Realfit(Shenzhen) Intelligent Technology Co., Ltd
+143B42     (base 16)		Realfit(Shenzhen) Intelligent Technology Co., Ltd
+				Room 201, building a, No.1 Qianwan 1st Road, Shenzhen Hong Kong cooperation zone, Qianhai
+				Shenzhen  Guangdong  518000
+				CN
+
+EC-2E-98   (hex)		AzureWave Technology Inc.
+EC2E98     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+38-F3-AB   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+38F3AB     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				YunGu Road 3188-1
+				Hefei  Anhui  230000
+				CN
+
+50-AE-86   (hex)		Linkintec Co., Ltd
+50AE86     (base 16)		Linkintec Co., Ltd
+				3rd floor, building A3, phase I, Zhihui Industrial Park, intersection of Chongqing Road and Yan'an Road, Baohe Economic Development Zone
+				Hefei City  Anhui  230041
+				CN
+
+38-B3-F7   (hex)		Huawei Device Co., Ltd.
+38B3F7     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+84-E9-86   (hex)		Huawei Device Co., Ltd.
+84E986     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+AC-1F-0F   (hex)		Texas Instruments
+AC1F0F     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+74-D2-85   (hex)		Texas Instruments
+74D285     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+60-15-92   (hex)		IEEE Registration Authority
+601592     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+10-C9-CA   (hex)		Ace Technology Corp.
+10C9CA     (base 16)		Ace Technology Corp.
+				237, Namdongseo-ro, Namdong-gu
+				Incheon    21634
+				KR
+
+BC-FA-B8   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+BCFAB8     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+D4-77-98   (hex)		Cisco Systems, Inc
+D47798     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-4A-5E   (hex)		Microsoft Corporation
+A04A5E     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+EC-02-73   (hex)		Aruba, a Hewlett Packard Enterprise Company
+EC0273     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+F4-B1-C2   (hex)		Zhejiang Dahua Technology Co., Ltd.
+F4B1C2     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+A4-DA-D4   (hex)		Yamato Denki Co.,Ltd.
+A4DAD4     (base 16)		Yamato Denki Co.,Ltd.
+				3-2-14,Koyama
+				Shinagawa-ku,Tokyo    142-0062
+				JP
+
+10-94-97   (hex)		Logitech Hong Kong
+109497     (base 16)		Logitech Hong Kong
+				Room 1002-1003, 10/F, Tower 1, Cheung Sha Wan Plaza, 833 Cheung Sha Wan Road, Kowloon, Hong Kong
+				Hong Kong    NA
+				HK
+
+00-14-1D   (hex)		KEBA Industrial Automation Germany GmbH
+00141D     (base 16)		KEBA Industrial Automation Germany GmbH
+				Gewerbestrasse 5-9
+				Lahnau  Hessen  35633
+				DE
+
+E0-DA-90   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E0DA90     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-A4-6B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A4A46B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-D7-A0   (hex)		Huawei Device Co., Ltd.
+A0D7A0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+40-E6-4B   (hex)		Apple, Inc.
+40E64B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-FA-48   (hex)		Apple, Inc.
+B4FA48     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-3C-C6   (hex)		Espressif Inc.
+943CC6     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+8C-83-FC   (hex)		Axioma Metering UAB
+8C83FC     (base 16)		Axioma Metering UAB
+				Veterinaru str. 52
+				Biruliskes  Kaunas district  LT-54469
+				LT
+
+F0-2F-4B   (hex)		Apple, Inc.
+F02F4B     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-A4-B7   (hex)		TP-Link Corporation Limited
+60A4B7     (base 16)		TP-Link Corporation Limited
+				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+				 Tsim Sha Tsui  Kowloon  999077
+				HK
+
+60-C5-E6   (hex)		Skullcandy
+60C5E6     (base 16)		Skullcandy
+				6301 N. Landmark Dr.
+				Park City    84098
+				US
+
+38-F3-FB   (hex)		Asperiq
+38F3FB     (base 16)		Asperiq
+				Finngatan 8
+				Lund    SE-22362
+				SE
+
+A4-58-02   (hex)		SHIN-IL TECH
+A45802     (base 16)		SHIN-IL TECH
+				711 HO,DAEMYEONG BELLI ON,10, Gyeongin-ro 53ga-gil, Guro-gu
+				Seoul    KS013
+				KR
+
+38-AF-D0   (hex)		Nevro
+38AFD0     (base 16)		Nevro
+				1800 Bridge Pkwy
+				Redwood City  CA  94065
+				US
+
+00-A0-0E   (hex)		NETSCOUT SYSTEMS INC
+00A00E     (base 16)		NETSCOUT SYSTEMS INC
+				310 Littleton Road
+				Westford  MA  01886 
+				US
+
+30-A6-12   (hex)		ShenZhen Hugsun Technology Co.,Ltd.
+30A612     (base 16)		ShenZhen Hugsun Technology Co.,Ltd.
+				413~415 Room, 4/F, No.6 Bldg., TongFuYu Industrial Park, Dalang Street, 518109, Longhua New District,
+				ShengZhen  GuangDong  518109
+				CN
+
+EC-B4-E8   (hex)		Wistron Mexico SA de CV
+ECB4E8     (base 16)		Wistron Mexico SA de CV
+				Baudelio Perez Mucharras #420 Col Paseos de Zaragoza 
+				ciudad Juarez  Chihuahua  32550
+				MX
+
+10-38-1F   (hex)		Sichuan AI-Link Technology Co., Ltd.
+10381F     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+3C-7A-C4   (hex)		Chemtronics
+3C7AC4     (base 16)		Chemtronics
+				junho.hong@chemtronics.co.kr
+				Bundang-gu  Gyeonggi-do  13493
+				KR
+
+54-14-F3   (hex)		Intel Corporate
+5414F3     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+5C-C8-E3   (hex)		Shintec Hozumi co.ltd.
+5CC8E3     (base 16)		Shintec Hozumi co.ltd.
+				neura-machi 3-5-1
+				Miyoshi  Aichi  470-0217
+				JP
+
+18-BB-41   (hex)		Huawei Device Co., Ltd.
+18BB41     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+78-18-A8   (hex)		Huawei Device Co., Ltd.
+7818A8     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+80-72-64   (hex)		Huawei Device Co., Ltd.
+807264     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+54-F6-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+54F6E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A8-50-81   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A85081     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-F6-54   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8F654     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-87-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+2087EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-FE-54   (hex)		Intel Corporate
+6CFE54     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+08-6A-C5   (hex)		Intel Corporate
+086AC5     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+8C-36-7A   (hex)		Palo Alto Networks
+8C367A     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+1C-FF-59   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+1CFF59     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+C0-1B-23   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+C01B23     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				NO.198 FIRST SECTION,SNOW MOUNTAIN AVENUE, JINYUAN TOWN, DAYI COUNTY,
+				CHENGDU  SICHUAN  611330
+				CN
+
+10-1E-DA   (hex)		 INGENICO TERMINALS SAS
+101EDA     (base 16)		 INGENICO TERMINALS SAS
+				28-32 Boulevard de Grenelle
+				PARIS    75015
+				FR
+
+68-DD-D9   (hex)		HMD Global Oy
+68DDD9     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+3C-19-5E   (hex)		Samsung Electronics Co.,Ltd
+3C195E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+6C-94-66   (hex)		Intel Corporate
+6C9466     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+4C-3B-6C   (hex)		GARO AB
+4C3B6C     (base 16)		GARO AB
+				Södergatan 26
+				Gnosjö  Jönköping  33525
+				SE
+
+FC-37-2B   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+FC372B     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+7C-CC-1F   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+7CCC1F     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+5C-4A-1F   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+5C4A1F     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+24-8B-E0   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+248BE0     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+9C-9C-40   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+9C9C40     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+54-E0-61   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+54E061     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+18-75-32   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+187532     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12, TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+78-B8-4B   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+78B84B     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,
+				Chengdu  Sichuan  610000
+				CN
+
+D4-41-65   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+D44165     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road, 
+				Chengdu  Sichuan  610000
+				CN
+
+EC-8A-C4   (hex)		Amazon Technologies Inc.
+EC8AC4     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+44-35-6F   (hex)		Neterix Ltd
+44356F     (base 16)		Neterix Ltd
+				Viscount House, River Lane
+				Chester  Cheshire  CH4 8RH
+				GB
+
+00-22-89   (hex)		 Vanderlande APC inc.
+002289     (base 16)		 Vanderlande APC inc.
+				1280 Lebourgneuf Blvd.
+				Quebec    G2K 0H1
+				CA
+
+50-8A-06   (hex)		Tuya Smart Inc.
+508A06     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+D4-08-68   (hex)		Beijing Lanxum Computer Technology CO.,LTD.
+D40868     (base 16)		Beijing Lanxum Computer Technology CO.,LTD.
+				3A Floor,BlockB,Technology Fortune Center,No 8 Xueqing Road,Haidian District,
+				Beijing  Beijing  100192
+				CN
+
+B8-14-5C   (hex)		Huawei Device Co., Ltd.
+B8145C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-9D-18   (hex)		Huawei Device Co., Ltd.
+C89D18     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-80-25   (hex)		Huawei Device Co., Ltd.
+C48025     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-03-98   (hex)		LG Innotek
+DC0398     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+E8-DA-00   (hex)		Kivo Technology, Inc.
+E8DA00     (base 16)		Kivo Technology, Inc.
+				218 Main Street, Suite #724
+				Kirkland    98033
+				US
+
+CC-B5-D1   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+CCB5D1     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+78-D6-DC   (hex)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+78D6DC     (base 16)		Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+				No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+				Wuhan  Hubei  430000
+				CN
+
+0C-43-14   (hex)		Silicon Laboratories
+0C4314     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+78-86-B6   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+7886B6     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+F4-C0-2F   (hex)		BlueBite
+F4C02F     (base 16)		BlueBite
+				230, Simin-daero
+				Anyang-si  Gyeonggi-do  14067
+				KR
+
+98-F0-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+98F083     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+8C-64-A2   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+8C64A2     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+				Shenzhen  Guangdong  518000
+				CN
+
+D0-54-75   (hex)		SAVI Controls
+D05475     (base 16)		SAVI Controls
+				2420 Tarpley Rd, Suite 205
+				Carrollton  TX  75006
+				US
+
+88-A0-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+88A0BE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-90-10   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+949010     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+28-FB-AE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+28FBAE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-78-06   (hex)		Cisco Systems, Inc
+A47806     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+08-05-E2   (hex)		Juniper Networks
+0805E2     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+B8-D5-6B   (hex)		Mirka Ltd.
+B8D56B     (base 16)		Mirka Ltd.
+				Pensalavägen 210
+				Jeppo    66850
+				FI
+
+BC-A3-7F   (hex)		Rail-Mil Sp. z o.o. Sp. K.
+BCA37F     (base 16)		Rail-Mil Sp. z o.o. Sp. K.
+				Kosmatki 82
+				Warsaw    03-982
+				PL
+
+00-08-18   (hex)		Pixelworks, Inc.
+000818     (base 16)		Pixelworks, Inc.
+				226 Airport Parkway, Suite 595
+				San Jose  CA  95110
+				US
+
+28-FA-19   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+28FA19     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+64-B3-79   (hex)		Private
+64B379     (base 16)		Private
+
+50-09-E5   (hex)		Drimsys,Inc
+5009E5     (base 16)		Drimsys,Inc
+				147, Baumoe-ro
+				Seocho-gu  Seoul  06752
+				KR
+
+20-3C-C0   (hex)		Beijing Tosee Technology Co., Ltd.
+203CC0     (base 16)		Beijing Tosee Technology Co., Ltd.
+				Room S125, 1st Floor, Building 1, No. 9, Keyuan Road, Economic Development Zone, Daxing District
+				beijing    102600 
+				CN
+
+D8-A0-11   (hex)		WiZ
+D8A011     (base 16)		WiZ
+				Unit 1203-5, 12/F, Tower 1, Enterprise Square, 9 Sheung Yuet Road
+				Kowloon Bay  Hong Kong  0000
+				HK
+
+B8-A1-4A   (hex)		Raisecom Technology CO.,LTD
+B8A14A     (base 16)		Raisecom Technology CO.,LTD
+				No. 11, East Area, No. 10 Block, East Xibeiwang Road
+				Beijing    100094
+				CN
+
+AC-7A-42   (hex)		iConnectivity
+AC7A42     (base 16)		iConnectivity
+				4620 Manilla Road SE, Unit 58
+				Calgary  Alberta  T2G 4B7
+				CA
+
+28-DF-EB   (hex)		Intel Corporate
+28DFEB     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+88-FC-A6   (hex)		devolo AG
+88FCA6     (base 16)		devolo AG
+				Charlottenburger Allee 67
+				Aachen  NRW  52068
+				DE
+
+48-9E-BD   (hex)		HP Inc.
+489EBD     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+08-00-37   (hex)		FUJIFILM Business Innovation Corp.
+080037     (base 16)		FUJIFILM Business Innovation Corp.
+				ADVANCED TECH & ENG'G CENTER
+				Yokohama    220-8668
+				JP
+
+88-8E-7F   (hex)		ATOP CORPORATION
+888E7F     (base 16)		ATOP CORPORATION
+				ATOP Information Harbor, Jinjialin Experimental Economic Zone, Mianyang City, Sichuan Province, China
+				Mianyang    621000
+				CN
+
+E8-ED-D6   (hex)		Fortinet, Inc.
+E8EDD6     (base 16)		Fortinet, Inc.
+				899 Kifer Road
+				Sunnyvale    94086
+				US
+
+00-30-59   (hex)		Kontron Europe GmbH
+003059     (base 16)		Kontron Europe GmbH
+				Nordstrasse 11/F
+				 LUTERBACH    4542
+				CH
+
+54-77-87   (hex)		Earda Technologies co Ltd
+547787     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+5C-0C-E6   (hex)		Nintendo Co.,Ltd
+5C0CE6     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+D0-C2-4E   (hex)		Samsung Electronics Co.,Ltd
+D0C24E     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+34-5B-98   (hex)		EM Microelectronic
+345B98     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+70-CD-0D   (hex)		Intel Corporate
+70CD0D     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+04-39-26   (hex)		China Dragon Technology Limited
+043926     (base 16)		China Dragon Technology Limited
+				B4 Bldg.Haoshan 1st Industry Park,
+				Shenzhen  Guangdong  518104
+				CN
+
+BC-6E-64   (hex)		Sony Corporation
+BC6E64     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+40-40-A7   (hex)		Sony Corporation
+4040A7     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+B4-52-7D   (hex)		Sony Corporation
+B4527D     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-EB-2D   (hex)		Sony Corporation
+00EB2D     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+30-39-26   (hex)		Sony Corporation
+303926     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+84-00-D2   (hex)		Sony Corporation
+8400D2     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+40-2B-A1   (hex)		Sony Corporation
+402BA1     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-18-13   (hex)		Sony Corporation
+001813     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-1D-28   (hex)		Sony Corporation
+001D28     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+00-1E-DC   (hex)		Sony Corporation
+001EDC     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+84-01-12   (hex)		Kaonmedia CO., LTD.
+840112     (base 16)		Kaonmedia CO., LTD.
+				884-3, Seongnam-daero, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13517
+				KR
+
+44-D4-E0   (hex)		Sony Corporation
+44D4E0     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+44-74-6C   (hex)		Sony Corporation
+44746C     (base 16)		Sony Corporation
+				4-12-3 Higashi – Shinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+28-3F-69   (hex)		Sony Corporation
+283F69     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+00-21-9E   (hex)		Sony Corporation
+00219E     (base 16)		Sony Corporation
+				1-7-1 Konan Minato-ku
+				Tokyo    108-0075
+				JP
+
+A0-C4-A5   (hex)		SYGN HOUSE INC.
+A0C4A5     (base 16)		SYGN HOUSE INC.
+				2-9-14 Tamagawa-denenchofu
+				Setagaya-ku  Tokyo  1580085
+				JP
+
+68-81-E0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6881E0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-D6-29   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4CD629     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F0-C4-78   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F0C478     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-6D-17   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D86D17     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-1A-C0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+7C1AC0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D0-4D-C6   (hex)		Aruba, a Hewlett Packard Enterprise Company
+D04DC6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+44-F0-9E   (hex)		Apple, Inc.
+44F09E     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-FF-44   (hex)		Apple, Inc.
+08FF44     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-93-C4   (hex)		Amazon Technologies Inc.
+1C93C4     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+AC-49-DB   (hex)		Apple, Inc.
+AC49DB     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+18-56-C3   (hex)		Apple, Inc.
+1856C3     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-18-8D   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+48188D     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+				Weifang  Shandong  261205
+				CN
+
+80-FB-F1   (hex)		Freescale Semiconductor (China) Ltd.
+80FBF1     (base 16)		Freescale Semiconductor (China) Ltd.
+				15#,Xing Hua Road, Xi Qing Economic Technology Development Area
+				Tianjin    300385
+				CN
+
+38-D5-7A   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+38D57A     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+7C-87-CE   (hex)		Espressif Inc.
+7C87CE     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+8C-81-72   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+8C8172     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+44-E5-17   (hex)		Intel Corporate
+44E517     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+68-F3-8E   (hex)		Juniper Networks
+68F38E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+74-5D-43   (hex)		BSH Hausgeraete GmbH
+745D43     (base 16)		BSH Hausgeraete GmbH
+				Im Gewerbepark B10
+				Regensburg    93059
+				DE
+
+70-A5-6A   (hex)		Shenzhen C-Data Technology Co., Ltd.
+70A56A     (base 16)		Shenzhen C-Data Technology Co., Ltd.
+				#601, Fl6, Bldg F, No.1008  Yangguang Community, Xili, Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+A0-18-42   (hex)		Comtrend Corporation
+A01842     (base 16)		Comtrend Corporation
+				3F-1, 10 Lane 609, Chongxin Road, Section 5, 
+				New Taipei City,  Taiwan  24159
+				TW
+
+30-3F-BB   (hex)		Hewlett Packard Enterprise
+303FBB     (base 16)		Hewlett Packard Enterprise
+				8000 Foothills Blvd.
+				Roseville  CA  95747
+				US
+
+EC-94-D5   (hex)		Juniper Networks
+EC94D5     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+70-1F-0B   (hex)		WILOGY SRL
+701F0B     (base 16)		WILOGY SRL
+				VIA BOSCO SNC
+				VEGLIE  Lecce  73010
+				IT
+
+40-40-6C   (hex)		Icomera
+40406C     (base 16)		Icomera
+				Odinsgatan 28
+				Gothenburg    411 03
+				SE
+
+64-6D-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+646D4E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+08-5C-1B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+085C1B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-9A-88   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+509A88     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-6F-0C   (hex)		Sagemcom Broadband SAS
+506F0C     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+48-73-97   (hex)		New H3C Technologies Co., Ltd
+487397     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+A0-44-5C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A0445C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+7C-2A-DB   (hex)		Xiaomi Communications Co Ltd
+7C2ADB     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+94-17-00   (hex)		Xiaomi Communications Co Ltd
+941700     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+64-A2-00   (hex)		Xiaomi Communications Co Ltd
+64A200     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+50-3D-C6   (hex)		Xiaomi Communications Co Ltd
+503DC6     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+8C-D9-D6   (hex)		Xiaomi Communications Co Ltd
+8CD9D6     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+44-A6-42   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+44A642     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+08-E7-E5   (hex)		Huawei Device Co., Ltd.
+08E7E5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D4-86-60   (hex)		Arcadyan Corporation
+D48660     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+B8-3B-CC   (hex)		Xiaomi Communications Co Ltd
+B83BCC     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+88-D1-99   (hex)		Vencer Co., Ltd.
+88D199     (base 16)		Vencer Co., Ltd.
+				14F-12, No. 79, Section 1, Hsin Tai Wu Road, Hsi-Chih District,
+				New Taipei City  Taiwan  22101
+				TW
+
+CC-E2-36   (hex)		Hangzhou Yaguan Technology Co. LTD
+CCE236     (base 16)		Hangzhou Yaguan Technology Co. LTD
+				33rd Floor, T4 US Center, European and American Financial City, Yuhang District, Hangzhou, Zhejiang
+				Hangzhou  Zhejiang  311100
+				CN
+
+20-41-81   (hex)		ESYSE GmbH Embedded Systems Engineering
+204181     (base 16)		ESYSE GmbH Embedded Systems Engineering
+				Ruth-Niehaus Str. 8
+				Meerbusch  Nordrhein-Westfalen  40667
+				DE
+
+DC-BB-96   (hex)		Full Solution Telecom
+DCBB96     (base 16)		Full Solution Telecom
+				Calle 130A #59C-42, Barrio Ciudad Jardin Norte
+				Bogota  Distrito Capital de Bogota  111111
+				CO
+
+74-76-5B   (hex)		Quectel Wireless Solutions Co.,Ltd.
+74765B     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+B4-37-D8   (hex)		D-Link (Shanghai) Limited Corp.
+B437D8     (base 16)		D-Link (Shanghai) Limited Corp.
+				Room 612, Floor 6, No.88, Taigu Road,
+				Shanghai    200131
+				CN
+
+9C-D5-7D   (hex)		Cisco Systems, Inc
+9CD57D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+94-1F-3A   (hex)		Ambiq
+941F3A     (base 16)		Ambiq
+				6500 River Place Blvd., Building 7, Suite 200 
+				Austin  TX  78730
+				US
+
+80-D2-E5   (hex)		Nintendo Co.,Ltd
+80D2E5     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+F8-CE-72   (hex)		Wistron Corporation
+F8CE72     (base 16)		Wistron Corporation
+				 NO.5, HSIN AN ROAD, SCIENCE-BASED INDUSTRIAL PARK, HSINCHU, TAIWAN, R.O.C.
+				Hsinchu County  Taiwan  303036
+				TW
+
+CC-9D-A2   (hex)		Eltex Enterprise Ltd.
+CC9DA2     (base 16)		Eltex Enterprise Ltd.
+				Okruzhnaya st. 29v
+				Novosibirsk    630020
+				RU
+
+60-53-75   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+605375     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-DD-33   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+78DD33     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A0-31-DB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+A031DB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-BF-25   (hex)		Espressif Inc.
+58BF25     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+10-13-31   (hex)		Technicolor Delivery Technologies Belgium NV
+101331     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+00-40-66   (hex)		APRESIA Systems Ltd
+004066     (base 16)		APRESIA Systems Ltd
+				Tsukuba Network Technical Center, Kidamari 3550
+				Tsuchiura-shi  Ibaraki-ken  300-0026
+				JP
+
+70-66-E1   (hex)		dnt Innovation GmbH
+7066E1     (base 16)		dnt Innovation GmbH
+				Maiburger Straße 29
+				Leer    26789
+				DE
+
+2C-35-57   (hex)		ELIIY Power CO., Ltd.
+2C3557     (base 16)		ELIIY Power CO., Ltd.
+				1-6-4, Osaki
+				Shinagawa-ku    141-0032
+				JP
+
+08-00-42   (hex)		MACNICA, Inc.
+080042     (base 16)		MACNICA, Inc.
+				1-6-3 Shin-Yokohama
+				Kohoku-ku  Yokohama  222-8561
+				JP
+
+54-6F-71   (hex)		uAvionix Corporation
+546F71     (base 16)		uAvionix Corporation
+				300 Pine Needle Lane
+				Bigfork  MT  59911
+				US
+
+54-EF-33   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+54EF33     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+14-19-73   (hex)		Beijing Yunyi Times Technology Co.,Ltd
+141973     (base 16)		Beijing Yunyi Times Technology Co.,Ltd
+				Room 4046, Building 1, Yard 10, Beiqijia Hongfu, Changping District
+				Beijing    102209
+				CN
+
+5C-75-C6   (hex)		China Mobile Group Device Co.,Ltd.
+5C75C6     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+44-48-B9   (hex)		MitraStar Technology Corp.
+4448B9     (base 16)		MitraStar Technology Corp.
+				No. 6, Innovation Road II,
+				Hsinchu    300
+				TW
+
+A0-D0-5B   (hex)		Samsung Electronics Co.,Ltd
+A0D05B     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+04-D4-42   (hex)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+04D442     (base 16)		GUANGDONG GENIUS TECHNOLOGY CO., LTD.
+				No.168, Middle Road Of East Gate
+				Xiaobian Community  Chang'an Town  523851
+				CN
+
+24-D7-EB   (hex)		Espressif Inc.
+24D7EB     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+A4-E1-1A   (hex)		Juniper Networks
+A4E11A     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+9C-54-C2   (hex)		New H3C Technologies Co., Ltd
+9C54C2     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+78-E9-CF   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+78E9CF     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+				Av. Buriti, 1900 – Setor B – Distrito Industrial
+				Manaus  Amazonas  69075-000
+				BR
+
+A0-9F-7A   (hex)		D-Link Middle East FZCO
+A09F7A     (base 16)		D-Link Middle East FZCO
+				PIot No.S31102, PO Box:18224, Jebel Ali Free Zone,Dubai,UAE
+				Dubai    18224
+				AE
+
+00-11-32   (hex)		Synology Incorporated
+001132     (base 16)		Synology Incorporated
+				9F., No.1, Yuandong Rd., Banqiao Dist.,
+				New Taipei City    220632
+				TW
+
+90-09-D0   (hex)		Synology Incorporated
+9009D0     (base 16)		Synology Incorporated
+				9F., No.1, Yuandong Rd., Banqiao Dist.,
+				New Taipei City    220632
+				TW
+
+5C-52-30   (hex)		Apple, Inc.
+5C5230     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-5A-36   (hex)		Apple, Inc.
+645A36     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+28-D2-44   (hex)		LCFC(HeFei) Electronics Technology co., ltd
+28D244     (base 16)		LCFC(HeFei) Electronics Technology co., ltd
+				6 Cui Wei Road
+				Hefei  Anhui  230000
+				CN
+
+B4-20-46   (hex)		eero inc.
+B42046     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+20-32-C6   (hex)		Apple, Inc.
+2032C6     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C8-1C-FE   (hex)		Zebra Technologies Inc.
+C81CFE     (base 16)		Zebra Technologies Inc.
+				ONE ZEBRA PLAZA
+				HOLTSVILLE  NY  11742
+				US
+
+1C-ED-6F   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+1CED6F     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+6C-71-D2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C71D2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+F8-00-A1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+F800A1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D8-76-AE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D876AE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+0C-84-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+0C8408     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+20-4B-22   (hex)		Sunnovo International Limited
+204B22     (base 16)		Sunnovo International Limited
+				1717 Haitai Building
+				Beijing  Beijing  100083
+				CN
+
+D8-1F-12   (hex)		Tuya Smart Inc.
+D81F12     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+B0-6A-41   (hex)		Google, Inc.
+B06A41     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+BC-CE-25   (hex)		Nintendo Co.,Ltd
+BCCE25     (base 16)		Nintendo Co.,Ltd
+				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+				KYOTO  KYOTO  601-8501
+				JP
+
+B0-10-A0   (hex)		Texas Instruments
+B010A0     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+24-FC-4E   (hex)		Juniper Networks
+24FC4E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+C4-D7-FD   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
+C4D7FD     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
+				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
+				Nanjing  Jiangsu  211800
+				CN
+
+2C-D1-DA   (hex)		Keysight Technologies, Inc.
+2CD1DA     (base 16)		Keysight Technologies, Inc.
+				2800 Woodlawn Drive, #271
+				Honolulu  Hawaii  96822
+				US
+
+C4-FC-EF   (hex)		SambaNova Systems, Inc.
+C4FCEF     (base 16)		SambaNova Systems, Inc.
+				2100 Geng Rd #103
+				Palo Alto    94303
+				US
+
+F0-70-4F   (hex)		Samsung Electronics Co.,Ltd
+F0704F     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+AC-6C-90   (hex)		Samsung Electronics Co.,Ltd
+AC6C90     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+A4-1A-3A   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+A41A3A     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+90-B6-22   (hex)		Samsung Electronics Co.,Ltd
+90B622     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+0C-02-BD   (hex)		Samsung Electronics Co.,Ltd
+0C02BD     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+34-84-E4   (hex)		Texas Instruments
+3484E4     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+AC-4D-16   (hex)		Texas Instruments
+AC4D16     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+FC-A8-4A   (hex)		Sentinum GmbH
+FCA84A     (base 16)		Sentinum GmbH
+				Fuerther Str. 246b
+				Nuremberg    90429
+				DE
+
+1C-5E-E6   (hex)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
+1C5EE6     (base 16)		SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
+				Nangang Industrial Building, Tangtou Industrial Park, Shiyan, Baoan
+				Shenzhen  Guangdong  518108
+				CN
+
+34-6F-24   (hex)		AzureWave Technology Inc.
+346F24     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+DC-E5-5B   (hex)		Google, Inc.
+DCE55B     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+4C-B9-EA   (hex)		iRobot Corporation
+4CB9EA     (base 16)		iRobot Corporation
+				8 Crosby Drive
+				Bedford  MA  01730
+				US
+
+DC-91-66   (hex)		Huawei Device Co., Ltd.
+DC9166     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+90-35-EA   (hex)		Silicon Laboratories
+9035EA     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+6C-3C-7C   (hex)		CANON INC.
+6C3C7C     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+F8-2F-5B   (hex)		eGauge Systems LLC
+F82F5B     (base 16)		eGauge Systems LLC
+				1644 Conestoga St, Suite 2
+				Boulder  CO  80301
+				US
+
+6C-1E-D7   (hex)		vivo Mobile Communication Co., Ltd.
+6C1ED7     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+E4-F1-D4   (hex)		vivo Mobile Communication Co., Ltd.
+E4F1D4     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+D4-EC-AB   (hex)		vivo Mobile Communication Co., Ltd.
+D4ECAB     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+BC-3E-CB   (hex)		vivo Mobile Communication Co., Ltd.
+BC3ECB     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+20-3B-69   (hex)		vivo Mobile Communication Co., Ltd.
+203B69     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+C0-47-54   (hex)		vivo Mobile Communication Co., Ltd.
+C04754     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+D0-9C-AE   (hex)		vivo Mobile Communication Co., Ltd.
+D09CAE     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+B4-AC-8C   (hex)		Bern University of Applied Sciences
+B4AC8C     (base 16)		Bern University of Applied Sciences
+				Dammweg 3
+				Bern  Bern  3013
+				CH
+
+B8-94-E7   (hex)		Xiaomi Communications Co Ltd
+B894E7     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+34-B9-8D   (hex)		Xiaomi Communications Co Ltd
+34B98D     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+30-4F-00   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+304F00     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+98-C8-B8   (hex)		vivo Mobile Communication Co., Ltd.
+98C8B8     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+54-0E-2D   (hex)		vivo Mobile Communication Co., Ltd.
+540E2D     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+70-8F-47   (hex)		vivo Mobile Communication Co., Ltd.
+708F47     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+DC-84-E9   (hex)		Shenzhen Qihoo Intelligent Technology Co.,Ltd
+DC84E9     (base 16)		Shenzhen Qihoo Intelligent Technology Co.,Ltd
+				Building A2, Chi Yuen Technology Park, 1001 College Avenue, Nanshan District, Shenzhen, P.R.C.
+				Shenzhen  Guangdong  518000
+				CN
+
+70-11-35   (hex)		Livesecu co., Ltd
+701135     (base 16)		Livesecu co., Ltd
+				9F/925, Anyang SK V1 Center, 25-32, LS-ro 116beon-gil, Dongan-gu, Anyang-si, Gyeonggi-do
+				anyang city  Gyeonggi-do  14118
+				KR
+
+C0-6B-55   (hex)		Motorola Mobility LLC, a Lenovo Company
+C06B55     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+FC-1D-2A   (hex)		vivo Mobile Communication Co., Ltd.
+FC1D2A     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+78-67-0E   (hex)		Wistron Neweb Corporation
+78670E     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+64-32-16   (hex)		Weidu Technology (Beijing) Co., Ltd.
+643216     (base 16)		Weidu Technology (Beijing) Co., Ltd.
+				1129-106, 11F, No.18 Zhongguancun Street, Haidian District,
+				Beijing    100080
+				CN
+
+B0-1C-0C   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+B01C0C     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+68-40-3C   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+68403C     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+90-3E-7F   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+903E7F     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+94-02-30   (hex)		Logitech
+940230     (base 16)		Logitech
+				7700 Gateway Blvd
+				Newark  CA  94560
+				US
+
+14-C0-A1   (hex)		UCloud Technology Co., Ltd.
+14C0A1     (base 16)		UCloud Technology Co., Ltd.
+				Building 10#B, LongChangRoad 619
+				ShangHai    200093
+				CN
+
+C0-36-53   (hex)		eero inc.
+C03653     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco    94107
+				US
+
+94-60-D5   (hex)		Aruba, a Hewlett Packard Enterprise Company
+9460D5     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+08-02-05   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+080205     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-E4-78   (hex)		Qingdao Haier Technology Co.,Ltd
+68E478     (base 16)		Qingdao Haier Technology Co.,Ltd
+				Building A01,Haier Information Park, No.1 Haier Road,
+				Qingdao  Shandong  266101
+				CN
+
+4C-44-5B   (hex)		Intel Corporate
+4C445B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+C8-CA-79   (hex)		Ciena Corporation
+C8CA79     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+84-3B-10   (hex)		 LVSWITCHES INC.
+843B10     (base 16)		 LVSWITCHES INC.
+				F1 building,New light source base Luocun town,Nanhai district
+				Foshan  Guangdong  528000
+				CN
+
+E0-9D-13   (hex)		Samsung Electronics Co.,Ltd
+E09D13     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+30-C6-F7   (hex)		Espressif Inc.
+30C6F7     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+DC-0E-96   (hex)		Palo Alto Networks
+DC0E96     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+9C-C2-C4   (hex)		Inspur Electronic Information Industry Co.,Ltd.
+9CC2C4     (base 16)		Inspur Electronic Information Industry Co.,Ltd.
+				No 224 Shanda Road
+				Jinan  Shandong  250013
+				CN
+
+00-DF-1D   (hex)		Cisco Systems, Inc
+00DF1D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A0-0F-37   (hex)		Cisco Systems, Inc
+A00F37     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+10-97-BD   (hex)		Espressif Inc.
+1097BD     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+BC-6E-E2   (hex)		Intel Corporate
+BC6EE2     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+38-7A-0E   (hex)		Intel Corporate
+387A0E     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+78-72-64   (hex)		IEEE Registration Authority
+787264     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+88-23-1F   (hex)		Fibocom Wireless Inc.
+88231F     (base 16)		Fibocom Wireless Inc.
+				1101,Tower A, Building 6, Shenzhen International Innovation Valley, Dashi 1st Rd, Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+A4-DE-26   (hex)		Sumitomo Electric Industries, Ltd
+A4DE26     (base 16)		Sumitomo Electric Industries, Ltd
+				1-1-3, Shimaya, Konohana-ku
+				Osaka    554-0024
+				JP
+
+30-1A-30   (hex)		Mako Networks Ltd
+301A30     (base 16)		Mako Networks Ltd
+				1355 North Maclean Blvd
+				Elgin  IL  60123
+				US
+
+C4-8B-A3   (hex)		Cisco Meraki
+C48BA3     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+14-0A-29   (hex)		Tiinlab Corporation
+140A29     (base 16)		Tiinlab Corporation
+				No. 3333, Liuxian Avenue, Tower A, 32th Floor, Tanglang City, Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+C0-F9-D2   (hex)		arkona technologies GmbH
+C0F9D2     (base 16)		arkona technologies GmbH
+				Im Leuschnerpark 4
+				Griesheim  Hessen  64347
+				DE
+
+14-61-02   (hex)		Alps Alpine
+146102     (base 16)		Alps Alpine
+				20-1, Yoshima Industrial Park
+				Iwaki  Fukushima  970-1192
+				JP
+
+24-12-81   (hex)		China Mobile Group Device Co.,Ltd.
+241281     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+D4-EE-DE   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+D4EEDE     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+C0-8B-05   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C08B05     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+30-7B-C9   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+307BC9     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+50-C0-F0   (hex)		Artek Microelectronics Co.,Ltd.
+50C0F0     (base 16)		Artek Microelectronics Co.,Ltd.
+				202,NO.1 Building,Software Park,KeJiZhongEr Road,GaoXinQu,NanShan,
+				Shenzhen  Guangdong  518057
+				CN
+
+04-68-65   (hex)		Apple, Inc.
+046865     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-53-92   (hex)		Apple, Inc.
+DC5392     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-B3-C9   (hex)		Apple, Inc.
+1CB3C9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+FC-AA-81   (hex)		Apple, Inc.
+FCAA81     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-93-16   (hex)		Apple, Inc.
+609316     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+64-6D-2F   (hex)		Apple, Inc.
+646D2F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+5C-96-66   (hex)		Sony Interactive Entertainment Inc.
+5C9666     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+24-CE-33   (hex)		Amazon Technologies Inc.
+24CE33     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+7C-72-6E   (hex)		Ericsson AB
+7C726E     (base 16)		Ericsson AB
+				Torshamnsgatan 36
+				Stockholm    SE-164 80
+				SE
+
+54-9F-06   (hex)		Nokia Shanghai Bell Co., Ltd.
+549F06     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+68-A8-78   (hex)		GeoWAN Pty Ltd
+68A878     (base 16)		GeoWAN Pty Ltd
+				Level 17, 31 Queen Street
+				Melbourne  Victoria  3000
+				AU
+
+38-A9-1C   (hex)		New H3C Technologies Co., Ltd
+38A91C     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+94-B3-4F   (hex)		Ruckus Wireless
+94B34F     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+F4-70-0C   (hex)		IEEE Registration Authority
+F4700C     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+40-9B-21   (hex)		Nokia
+409B21     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+FC-77-7B   (hex)		Hitron Technologies. Inc
+FC777B     (base 16)		Hitron Technologies. Inc
+				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+				Hsin-chu  Taiwan  300
+				TW
+
+14-17-2A   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+14172A     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+00-5F-BF   (hex)		Toshiba Corp.
+005FBF     (base 16)		Toshiba Corp.
+				1-1 Shibaura 1-Chome, Minato-Ku
+				Tokyo    105-8001
+				JP
+
+E8-A7-2F   (hex)		Microsoft Corporation
+E8A72F     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+D4-05-DE   (hex)		eero inc.
+D405DE     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+FC-0F-E7   (hex)		Microchip Technology Inc.
+FC0FE7     (base 16)		Microchip Technology Inc.
+				2355 W. Chandler Blvd.
+				Chandler  AZ  85224
+				US
+
+C8-5C-CC   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+C85CCC     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+70-FD-88   (hex)		Nanjing Jiahao Technology Co., Ltd.
+70FD88     (base 16)		Nanjing Jiahao Technology Co., Ltd.
+				Moling Industrial Park, Development Zone, Jiangning, Nanjing
+				Nanjing  Jiangsu  211111
+				CN
+
+48-73-CB   (hex)		Tiinlab Corporation
+4873CB     (base 16)		Tiinlab Corporation
+				No. 3333, Liuxian Avenue, Tower A, 32th Floor, Tanglang City, Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+38-38-4B   (hex)		vivo Mobile Communication Co., Ltd.
+38384B     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+78-9F-AA   (hex)		Huawei Device Co., Ltd.
+789FAA     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-19-2C   (hex)		Edgecore Networks Corporation
+98192C     (base 16)		Edgecore Networks Corporation
+				1 Creation RD 3.
+				Hsinchu    30077
+				TW
+
+88-A4-C2   (hex)		LCFC(Hefei) Electronics Technology Co., Ltd
+88A4C2     (base 16)		LCFC(Hefei) Electronics Technology Co., Ltd
+				No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area
+				HEFEI  ANHUI  230601
+				CN
+
+AC-8B-6A   (hex)		China Mobile IOT Company Limited
+AC8B6A     (base 16)		China Mobile IOT Company Limited
+				NO.8 Yu Ma Road, NanAn Area
+				Chongqing  Chongqing  401336
+				CN
+
+E0-7E-5F   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+E07E5F     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+38-BE-AB   (hex)		AltoBeam (China) Inc.
+38BEAB     (base 16)		AltoBeam (China) Inc.
+				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+				Beijing  Beijing  100083
+				CN
+
+34-13-43   (hex)		GE Lighting
+341343     (base 16)		GE Lighting
+				1975 Noble Rd
+				East Cleveland  OH  44112
+				US
+
+B8-9E-A6   (hex)		SPBEC-MINING CO.LTD
+B89EA6     (base 16)		SPBEC-MINING CO.LTD
+				st. Kokkolevskaya, building 1/1
+				St. Petersburg    196140
+				RU
+
+AC-50-DE   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+AC50DE     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+08-C8-C2   (hex)		GN Audio A/S
+08C8C2     (base 16)		GN Audio A/S
+				Lautrupbjerg 7
+				Ballerup    DK-2750
+				DK
+
+18-58-80   (hex)		Arcadyan Corporation
+185880     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+30-83-D2   (hex)		Motorola Mobility LLC, a Lenovo Company
+3083D2     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+00-DD-B6   (hex)		New H3C Technologies Co., Ltd
+00DDB6     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+78-21-84   (hex)		Espressif Inc.
+782184     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+94-94-4A   (hex)		Particle Industries Inc.
+94944A     (base 16)		Particle Industries Inc.
+				548 Market St PMB 34833
+				San Francisco  CA  94104
+				US
+
+2C-A3-27   (hex)		Oraimo Technology Limited
+2CA327     (base 16)		Oraimo Technology Limited
+				RMS 05-15?13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HONG KONG  HONG KONG  999077
+				HK
+
+14-66-B7   (hex)		Advanced Design Technology Pty Ltd
+1466B7     (base 16)		Advanced Design Technology Pty Ltd
+				GPO Box 2808
+				Canberra City  ACT  2601
+				AU
+
+B8-F2-55   (hex)		Universal Electronics, Inc.
+B8F255     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+CC-3F-1D   (hex)		HMS Industrial Networks SLU
+CC3F1D     (base 16)		HMS Industrial Networks SLU
+				Milà i Fontanals 7
+				Igualada  Barcelona  08700
+				ES
+
+5C-49-FA   (hex)		Shenzhen Guowei Shidai Communication Equipement Co., Ltd
+5C49FA     (base 16)		Shenzhen Guowei Shidai Communication Equipement Co., Ltd
+				2202, Yili science & Technology Park Workshop, No.596-2, Dahe Village, Guancheng Community, Guanhu Street, Longhua District, S
+				SHENZHEN    518000
+				CN
+
+EC-65-6E   (hex)		The Things Industries B.V.
+EC656E     (base 16)		The Things Industries B.V.
+				Singel 542
+				Amsterdam  Noord-Holland  1017 AZ
+				NL
+
+10-AE-A5   (hex)		Duskrise inc.
+10AEA5     (base 16)		Duskrise inc.
+				Empire State Building 350 Fifth Avenue 41st Floor 
+				new york  NY  10118
+				US
+
+58-7D-B6   (hex)		Northern Data AG
+587DB6     (base 16)		Northern Data AG
+				An der Welle 3
+				Frankfurt am Main  Hessen  60322
+				DE
+
+5C-8E-8B   (hex)		Shenzhen Linghai Electronics Co.,Ltd
+5C8E8B     (base 16)		Shenzhen Linghai Electronics Co.,Ltd
+				310, Building D, Shenzhen Zhihui Innovation Center, Hangcheng Industrial Zone, Taoyuan Community, Xixiang Street, Bao'an District
+				Shenzhen  Guangdong Province  518000
+				CN
+
+78-EB-46   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+78EB46     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-16-C8   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C416C8     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E4-DC-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E4DCCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+3C-A1-61   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+3CA161     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-75-BC   (hex)		Nokia Shanghai Bell Co., Ltd.
+9075BC     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+C0-F8-7F   (hex)		Cisco Systems, Inc
+C0F87F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+4C-53-FD   (hex)		Amazon Technologies Inc.
+4C53FD     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+3C-8B-7F   (hex)		Cisco Systems, Inc
+3C8B7F     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-11-E5   (hex)		KCodes Corporation
+0011E5     (base 16)		KCodes Corporation
+				7F., No. 252, Sec. 1, Neihu Rd.,
+				Neihu Dist.  Taipei City  114
+				TW
+
+A0-83-B4   (hex)		HeNet B.V.
+A083B4     (base 16)		HeNet B.V.
+				Kalkhofseweg 20
+				Haps    5443NA
+				NL
+
+04-FF-08   (hex)		Huawei Device Co., Ltd.
+04FF08     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+00-A4-5F   (hex)		Huawei Device Co., Ltd.
+00A45F     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+FC-E2-6C   (hex)		Apple, Inc.
+FCE26C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+48-5A-EA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+485AEA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+84-81-02   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+848102     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+54-E0-05   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+54E005     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+4C-79-75   (hex)		Apple, Inc.
+4C7975     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-71-25   (hex)		Apple, Inc.
+1C7125     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+34-FE-77   (hex)		Apple, Inc.
+34FE77     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+98-B7-85   (hex)		Shenzhen 10Gtek Transceivers Co., Limited
+98B785     (base 16)		Shenzhen 10Gtek Transceivers Co., Limited
+				Blg 3, COFCO, Liuxian 2nd Road,
+				Shenzhen  Guangdong  518000
+				CN
+
+EC-DA-59   (hex)		New H3C Technologies Co., Ltd
+ECDA59     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+74-B7-E6   (hex)		Zegna-Daidong Limited
+74B7E6     (base 16)		Zegna-Daidong Limited
+				 Rooms 14-17, 18/F, Nan Fung Commercial, Centre 19 Lam Lok Street, Kowloon Bay
+				Hong Kong    999077
+				HK
+
+6C-E5-C9   (hex)		Apple, Inc.
+6CE5C9     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-B1-DF   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+10B1DF     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+F4-F6-47   (hex)		zte corporation
+F4F647     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+E8-81-75   (hex)		zte corporation
+E88175     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+9C-0B-05   (hex)		eero inc.
+9C0B05     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+78-F2-38   (hex)		Samsung Electronics Co.,Ltd
+78F238     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-D0-D6   (hex)		Samsung Electronics Co.,Ltd
+64D0D6     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+DC-97-58   (hex)		Sichuan AI-Link Technology Co., Ltd.
+DC9758     (base 16)		Sichuan AI-Link Technology Co., Ltd.
+				Anzhou, Industrial Park
+				Mianyang  Sichuan  622650
+				CN
+
+40-F6-BC   (hex)		Amazon Technologies Inc.
+40F6BC     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+20-AF-1B   (hex)		SteelSeries ApS
+20AF1B     (base 16)		SteelSeries ApS
+				656 West Randolph, Suite 2E
+				Chicago  IL  60661
+				US
+
+7C-77-16   (hex)		Zyxel Communications Corporation
+7C7716     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+94-3F-BB   (hex)		JSC RPC Istok named after Shokin
+943FBB     (base 16)		JSC RPC Istok named after Shokin
+				Room 65, Floor 2,  Building 1,  2A, Vokzalnaya Street
+				Fryazino  Moscow Region  141190
+				RU
+
+50-E7-B7   (hex)		vivo Mobile Communication Co., Ltd.
+50E7B7     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+F4-F7-0C   (hex)		Avang - neterbit
+F4F70C     (base 16)		Avang - neterbit
+				No 56, 16th St., Ghanbarzadeh St., Beheshti Ave
+				Tehran  Tehran  1533963361
+				IR
+
+E0-FF-F1   (hex)		Texas Instruments
+E0FFF1     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F4-44-2C   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+F4442C     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+F0-BE-25   (hex)		Dongguan Cannice Precision Manufacturing Co., Ltd.
+F0BE25     (base 16)		Dongguan Cannice Precision Manufacturing Co., Ltd.
+				No. 21, Nange West Road, Daojiao Town
+				Dongguan  Guangdong  523170
+				CN
+
+00-80-DA   (hex)		Hottinger Brüel & Kjær A/S
+0080DA     (base 16)		Hottinger Brüel & Kjær A/S
+				Teknikerbyen 28
+				Virum    DK-2830
+				DK
+
+70-4C-B6   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+704CB6     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+54-9B-49   (hex)		NEC Platforms, Ltd.
+549B49     (base 16)		NEC Platforms, Ltd.
+				2-3 Kandatsukasamachi
+				Chiyodaku  Tokyo  101-8532
+				JP
+
+88-25-10   (hex)		Aruba, a Hewlett Packard Enterprise Company
+882510     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+44-8C-00   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+448C00     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+D0-E8-28   (hex)		Radiant Industries Incorporated
+D0E828     (base 16)		Radiant Industries Incorporated
+				113 Sierra Street
+				El Segundo  CA  90245
+				US
+
+74-EF-4B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+74EF4B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+10-76-36   (hex)		Earda Technologies co Ltd
+107636     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+18-C2-93   (hex)		Laird Connectivity
+18C293     (base 16)		Laird Connectivity
+				3F.-1, No.145, Xianzheng 9th Rd.,
+				Zhubei    30251
+				TW
+
+00-0D-9C   (hex)		K.A. Schmersal GmbH & Co. KG
+000D9C     (base 16)		K.A. Schmersal GmbH & Co. KG
+				Im Ostpark 2 
+				Wettenberg  Hessen  35435
+				DE
+
+24-4C-AB   (hex)		Espressif Inc.
+244CAB     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+E0-41-02   (hex)		zte corporation
+E04102     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+D8-40-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D84008     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-04-7A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C047A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+6C-55-8D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6C558D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+78-48-2C   (hex)		START USA, INC.
+78482C     (base 16)		START USA, INC.
+				6860 Dallas Pkwy, Ste 200
+				Plano  TX  75024
+				US
+
+7C-45-D0   (hex)		Shenzhen Wewins Wireless Co., ltd
+7C45D0     (base 16)		Shenzhen Wewins Wireless Co., ltd
+				17F., Mid Wing, Yuehai Building, Nanhai Road, Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+A4-2A-95   (hex)		D-Link International
+A42A95     (base 16)		D-Link International
+				1 Internal Business Park, #03-12,The Synergy
+				Singapore   Singapore  609917
+				SG
+
+30-CB-C7   (hex)		Cambium Networks Limited
+30CBC7     (base 16)		Cambium Networks Limited
+				Unit B2, Linhay Business Park,
+				Ashburton  Devon  TQ13 7UP
+				GB
+
+48-2E-72   (hex)		Cisco Systems, Inc
+482E72     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+88-50-46   (hex)		LEAR
+885046     (base 16)		LEAR
+				Industriestraße 48
+				Kronach  Bayern  96317
+				DE
+
+70-04-1D   (hex)		Espressif Inc.
+70041D     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+88-6F-29   (hex)		Pocketbook International SA
+886F29     (base 16)		Pocketbook International SA
+				Crocicchio Cortogna 6
+				Lugano  Ticino  6900
+				CH
+
+74-46-87   (hex)		Kingsignal Technology Co., Ltd.
+744687     (base 16)		Kingsignal Technology Co., Ltd.
+				Floor 26,Unit B,Block 10,No.1819 Shahexi Road,Shenzhen Bay Eco-Technology Park,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+BC-22-47   (hex)		New H3C Technologies Co., Ltd
+BC2247     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+08-26-AE   (hex)		IEEE Registration Authority
+0826AE     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+8C-47-7F   (hex)		NambooSolution
+8C477F     (base 16)		NambooSolution
+				613 Room, 171, Magokjungang-ro, Gangseo-gu, Seoul, Republic of Korea
+				Seoul    07788
+				KR
+
+7C-DA-C3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+7CDAC3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+8C-17-B6   (hex)		Huawei Device Co., Ltd.
+8C17B6     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B8-2B-68   (hex)		Huawei Device Co., Ltd.
+B82B68     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+2C-F2-95   (hex)		Huawei Device Co., Ltd.
+2CF295     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E0-BB-0C   (hex)		Synertau LLC
+E0BB0C     (base 16)		Synertau LLC
+				st. 40 let Komsomola, 32G
+				Yekaterinburg    620092
+				RU
+
+14-9B-D7   (hex)		MULI MUWAI FURNITURE QIDONG CO., LTD
+149BD7     (base 16)		MULI MUWAI FURNITURE QIDONG CO., LTD
+				No. 55, Huanghai Road, Qidong High-tech Industrial Development Zone
+				Qidong  Jiangsu  226255
+				CN
+
+AC-77-B9   (hex)		Nanjing Yufei Intelligent Control Technology Co.,LTD
+AC77B9     (base 16)		Nanjing Yufei Intelligent Control Technology Co.,LTD
+				 Floor 3, Building 3, No.6 xuzhuang Road, Xuanwu District, Nanjing
+				nanjing    210000
+				CN
+
+A8-5B-B7   (hex)		Apple, Inc.
+A85BB7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+3C-5D-29   (hex)		Zhejiang Tmall Technology Co., Ltd.
+3C5D29     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+				Hangzhou  Zhejiang  310024
+				CN
+
+68-FC-CA   (hex)		Samsung Electronics Co.,Ltd
+68FCCA     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+6C-D7-19   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+6CD719     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+80-01-5C   (hex)		Synaptics, Inc
+80015C     (base 16)		Synaptics, Inc
+				1251 McKay Dr.
+				San Jose  CA  CA 95131
+				US
+
+BC-61-93   (hex)		Xiaomi Communications Co Ltd
+BC6193     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+C8-54-A4   (hex)		Infinix mobility limited
+C854A4     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+EC-71-DB   (hex)		Reolink Innovation Limited
+EC71DB     (base 16)		Reolink Innovation Limited
+				705,7/F,FA YUEN COMMERCIAL BUILDING,75-77 FA YUEN STREET
+				MONG KOK  KL  999077
+				CN
+
+F8-E5-7E   (hex)		Cisco Systems, Inc
+F8E57E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+30-53-C1   (hex)		CRESYN
+3053C1     (base 16)		CRESYN
+				8-22,Jamwon-dong
+				Seoul  Seocho-Gu  #137-902
+				KR
+
+38-5B-44   (hex)		Silicon Laboratories
+385B44     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+94-34-69   (hex)		Silicon Laboratories
+943469     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez Street
+				Austin  TX  78701
+				US
+
+AC-33-0B   (hex)		Japan Computer Vision Corp.
+AC330B     (base 16)		Japan Computer Vision Corp.
+				6F.Hanzoumon PREX South 2-5-1 Kojimachi.
+				Chiyoda-ku TOKYO  Tokyo  1020083
+				JP
+
+34-62-B4   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+3462B4     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+				Phase 3, Bayan Lepas FIZ
+				Bayan Lepas  Penang  11900
+				MY
+
+CC-EB-18   (hex)		OOO TSS
+CCEB18     (base 16)		OOO TSS
+				ul. Borisovskaya, 1
+				Moscow  Moscow  105187
+				RU
+
+6C-24-08   (hex)		LCFC(Hefei) Electronics Technology Co., Ltd
+6C2408     (base 16)		LCFC(Hefei) Electronics Technology Co., Ltd
+				No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area
+				HEFEI  ANHUI  230601
+				CN
+
+EC-60-73   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+EC6073     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+				Shenzhen  Guangdong  518057
+				CN
+
+74-DD-CB   (hex)		China Leadshine Technology Co.,Ltd
+74DDCB     (base 16)		China Leadshine Technology Co.,Ltd
+				9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan?
+				SHENZHEN    518000
+				CN
+
+10-4D-15   (hex)		Viaanix Inc
+104D15     (base 16)		Viaanix Inc
+				434 N Main St.
+				Wichita   KS  67202
+				US
+
+50-A0-15   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
+50A015     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
+				Shenzhen  Nanshan District  518000
+				CN
+
+B0-AF-F7   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
+B0AFF7     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
+				Shenzhen  Nanshan District  518000
+				CN
+
+70-85-C4   (hex)		Ruijie Networks Co.,LTD
+7085C4     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+5C-C5-63   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+5CC563     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+				No.8, Litong Road, Liuyan Economic & Tec
+				Changsha  HUNAN  410329
+				CN
+
+A0-09-2E   (hex)		zte corporation
+A0092E     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+14-75-5B   (hex)		Intel Corporate
+14755B     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+A8-B1-3B   (hex)		HP Inc.
+A8B13B     (base 16)		HP Inc.
+				10300 Energy Dr
+				Spring  TX  77389
+				US
+
+C4-38-75   (hex)		Sonos, Inc.
+C43875     (base 16)		Sonos, Inc.
+				614 Chapala St
+				Santa Barbara    93101
+				US
+
+68-B6-91   (hex)		Amazon Technologies Inc.
+68B691     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+DC-A9-56   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+DCA956     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+48-27-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+4827C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+BC-D2-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BCD206     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-82-7F   (hex)		Advantech Technology (CHINA) Co., Ltd.
+CC827F     (base 16)		Advantech Technology (CHINA) Co., Ltd.
+				No.666, Han-Pu Rd. Yu-Shan
+				Kun-Shan  Jiang Su  215316
+				CN
+
+F8-4E-58   (hex)		Samsung Electronics Co.,Ltd
+F84E58     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+B4-70-64   (hex)		Samsung Electronics Co.,Ltd
+B47064     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+4C-2E-5E   (hex)		Samsung Electronics Co.,Ltd
+4C2E5E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+64-5D-F4   (hex)		Samsung Electronics Co.,Ltd
+645DF4     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D8-10-68   (hex)		Murata Manufacturing Co., Ltd.
+D81068     (base 16)		Murata Manufacturing Co., Ltd.
+				1-10-1, Higashikotari
+				Nagaokakyo-shi  Kyoto  617-8555
+				JP
+
+5C-04-5A   (hex)		Company NA Stage & Light
+5C045A     (base 16)		Company NA Stage & Light
+				Lambertu 9
+				M?rupe    LV-2167
+				LV
+
+88-3F-0C   (hex)		system a.v. co., ltd.
+883F0C     (base 16)		system a.v. co., ltd.
+				5-16-1,Aoe,KIta-Ku
+				Okayama  Okayama  700-0941
+				JP
+
+C8-BE-35   (hex)		Extreme Networks, Inc.
+C8BE35     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+78-AF-08   (hex)		Intel Corporate
+78AF08     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+F4-E2-04   (hex)		COYOTE SYSTEM
+F4E204     (base 16)		COYOTE SYSTEM
+				1, rue Royale
+				Saint-Cloud    92210
+				FR
+
+58-C3-56   (hex)		EM Microelectronic
+58C356     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+A0-ED-FB   (hex)		Quectel Wireless Solutions Co.,Ltd.
+A0EDFB     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+B0-23-47   (hex)		Shenzhen Giant Microelectronics Company Limited
+B02347     (base 16)		Shenzhen Giant Microelectronics Company Limited
+				Room 2108,  21 Floor, Building No.1 of Chang Fu Jin Mao Tower, No.5 Shi Hua Road, Futian District
+				Shenzhen  Guangdong  518000
+				CN
+
+CC-DD-58   (hex)		Robert Bosch GmbH
+CCDD58     (base 16)		Robert Bosch GmbH
+				Mittlerer Pfad 9
+				Stuttgart    70499
+				DE
+
+D4-E0-53   (hex)		Aruba, a Hewlett Packard Enterprise Company
+D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+88-FC-5D   (hex)		Cisco Systems, Inc
+88FC5D     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+F4-C8-8A   (hex)		Intel Corporate
+F4C88A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+18-3C-98   (hex)		Shenzhen Hengyi Technology Co., LTD
+183C98     (base 16)		Shenzhen Hengyi Technology Co., LTD
+				Floor 5, Zone 1, Block B, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
+				Shenzhen  Guangdong  518102
+				CN
+
+78-71-04   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+787104     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+64-C5-82   (hex)		China Mobile Group Device Co.,Ltd.
+64C582     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+50-28-4A   (hex)		Intel Corporate
+50284A     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+5C-A4-F4   (hex)		zte corporation
+5CA4F4     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+24-6C-60   (hex)		Huawei Device Co., Ltd.
+246C60     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+98-C9-7C   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+98C97C     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+				Room 601,Block B ,Digital Building,Garden City
+				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+				CN
+
+30-3E-A7   (hex)		Intel Corporate
+303EA7     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+28-A3-31   (hex)		Sierra Wireless
+28A331     (base 16)		Sierra Wireless
+				13811 Wireless Way
+				Richmond  BC  V6V 3A4
+				CA
+
+EC-62-60   (hex)		Espressif Inc.
+EC6260     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+B0-6E-72   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+B06E72     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+60-7D-09   (hex)		Luxshare Precision Industry Co., Ltd
+607D09     (base 16)		Luxshare Precision Industry Co., Ltd
+				2nd floor,A building,Sanyo New Industrial Area,West Area of Maoyi, Shajing Street,Bao'an District
+				Shenzhen City  Guangdong Province  518100
+				CN
+
+18-34-AF   (hex)		Kaonmedia CO., LTD.
+1834AF     (base 16)		Kaonmedia CO., LTD.
+				884-3, Seongnam-daero, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13517
+				KR
+
+28-82-7C   (hex)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
+28827C     (base 16)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
+				No.17 Longmen Road
+				Changzhou  JiangSu  213164
+				CN
+
+28-F5-D1   (hex)		ARRIS Group, Inc.
+28F5D1     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+10-E1-77   (hex)		ARRIS Group, Inc.
+10E177     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+90-D4-73   (hex)		vivo Mobile Communication Co., Ltd.
+90D473     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+08-EB-F6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+08EBF6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+CC-3E-79   (hex)		ARRIS Group, Inc.
+CC3E79     (base 16)		ARRIS Group, Inc.
+				6450 Sequence Drive
+				San Diego  CA  92121
+				US
+
+00-16-A3   (hex)		INGETEAM
+0016A3     (base 16)		INGETEAM
+				Parque Tecnologico de Bizkaia, Edificio 110
+				Zamudio  Bizkaia  48170
+				ES
+
+F0-6C-5D   (hex)		Xiaomi Communications Co Ltd
+F06C5D     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+24-CF-24   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+24CF24     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+C8-F0-9E   (hex)		Espressif Inc.
+C8F09E     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+DC-54-75   (hex)		Espressif Inc.
+DC5475     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+0C-7B-C8   (hex)		Cisco Meraki
+0C7BC8     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+28-6F-40   (hex)		Tonly Technology Co. Ltd 
+286F40     (base 16)		Tonly Technology Co. Ltd 
+				Section 37, Zhongkai Hi-Tech Development Zone
+				Huizhou  Guangdong  516006
+				CN
+
+0C-86-C7   (hex)		Jabil Circuit (Guangzhou) Limited
+0C86C7     (base 16)		Jabil Circuit (Guangzhou) Limited
+				Huangpu 128, JunCheng Road
+				GuangZhou  Guangdong  510530
+				CN
+
+1C-0D-7D   (hex)		Apple, Inc.
+1C0D7D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-F2-87   (hex)		Apple, Inc.
+14F287     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+58-55-95   (hex)		Apple, Inc.
+585595     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-94-6C   (hex)		Apple, Inc.
+14946C     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+1C-59-74   (hex)		IEEE Registration Authority
+1C5974     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+74-60-4C   (hex)		RØDE
+74604C     (base 16)		RØDE
+				107 Carnarvon St
+				Silverwater  NSW  2128
+				AU
+
+40-B0-2F   (hex)		Miele & Cie. KG
+40B02F     (base 16)		Miele & Cie. KG
+				Carl-Miele-Straße 29
+				Gütersloh    33332
+				DE
+
+B4-7D-76   (hex)		KNS Group LLC
+B47D76     (base 16)		KNS Group LLC
+				Room 4, Office IV, Floor 4 Rochdelskaya street, 15, b.15 Moscow, 123376 Russia
+				Moscow    123376
+				RU
+
+C0-AD-97   (hex)		TECNO MOBILE LIMITED
+C0AD97     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+70-A9-83   (hex)		Cisco Systems, Inc
+70A983     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+BC-FA-EB   (hex)		Cisco Systems, Inc
+BCFAEB     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+18-66-F0   (hex)		Jupiter Systems
+1866F0     (base 16)		Jupiter Systems
+				31015 Huntwood Ave
+				Hayward  CA  94544-7007
+				US
+
+BC-C7-DA   (hex)		Earda Technologies co Ltd
+BCC7DA     (base 16)		Earda Technologies co Ltd
+				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+				Guangzhou  Guangdong  511455
+				CN
+
+84-85-53   (hex)		Biznes Systema Telecom, LLC
+848553     (base 16)		Biznes Systema Telecom, LLC
+				room XXII/1, fl 3, block 3, 6 Barklaya street, Moscow, 121087, Russia
+				Moscow    121087
+				RU
+
+58-00-32   (hex)		Genexis B.V.
+580032     (base 16)		Genexis B.V.
+				Lodewijkstraat 1A
+				Eindhoven    5652AC
+				NL
+
+D8-88-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+D88863     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C0-3E-50   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C03E50     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-60-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+806036     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+4C-53-69   (hex)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
+4C5369     (base 16)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
+				No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China
+				ChongQing  ChongQing  400025
+				CN
+
+74-76-7D   (hex)		shenzhen kexint technology co.,ltd
+74767D     (base 16)		shenzhen kexint technology co.,ltd
+				5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City
+				shenzhen  guangdong  518000
+				CN
+
+B0-38-E2   (hex)		Wanan Hongsheng Electronic Co.Ltd
+B038E2     (base 16)		Wanan Hongsheng Electronic Co.Ltd
+				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
+				Wanan  China/jiangxi  343800
+				CN
+
+E0-48-D8   (hex)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
+E048D8     (base 16)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
+				Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, 
+				Guangzhou    510623
+				CN
+
+F8-E4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+F8E4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+A0-C9-8B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+A0C98B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+				Werinherstrasse 91
+				München  Bavaria  D-81541
+				DE
+
+18-BB-1C   (hex)		Huawei Device Co., Ltd.
+18BB1C     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+80-5B-65   (hex)		LG Innotek
+805B65     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+4C-9D-22   (hex)		ACES Co.,Ltd
+4C9D22     (base 16)		ACES Co.,Ltd
+				TianGong Avenue #916, Tianfu New Area
+				ChengDu  Sichuan Province  610000
+				CN
+
+88-C9-E8   (hex)		Sony Corporation
+88C9E8     (base 16)		Sony Corporation
+				Sony City Osaki 2-10-1
+				Shinagawa-ku   Tokyo  141-8610
+				JP
+
+00-73-8D   (hex)		Shenzhen TINNO Mobile Technology Corp.
+00738D     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+D4-43-0E   (hex)		Zhejiang Dahua Technology Co., Ltd.
+D4430E     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+F8-5E-0B   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+44-D3-AD   (hex)		Shenzhen TINNO Mobile Technology Corp.
+44D3AD     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+94-D3-31   (hex)		Xiaomi Communications Co Ltd
+94D331     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+34-DD-04   (hex)		Minut AB
+34DD04     (base 16)		Minut AB
+				Baltzarsgatan 23
+				Malmö    21136
+				SE
+
+60-1E-98   (hex)		Axevast Technology
+601E98     (base 16)		Axevast Technology
+				5F., No. 20, Guanqian Road, Zhongzheng District
+				Taipei City    100007
+				TW
+
+A8-F7-D9   (hex)		Mist Systems, Inc.
+A8F7D9     (base 16)		Mist Systems, Inc.
+				1601 South De Anza Blvd, Suite 248
+				Cupertino  CA  95014
+				US
+
+5C-8C-30   (hex)		Taicang T&W Electronics
+5C8C30     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+2C-9D-65   (hex)		vivo Mobile Communication Co., Ltd.
+2C9D65     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+44-88-16   (hex)		Cisco Systems, Inc
+448816     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+68-D9-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68D927     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-F9-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+90F970     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-CA-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+04CAED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+68-EE-88   (hex)		Shenzhen TINNO Mobile Technology Corp.
+68EE88     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+				Building, No.33, Xiandong Rd, Xili
+				Nanshan District, Shenzhen  PRC  518053
+				CN
+
+54-3D-92   (hex)		WIRELESS-TEK TECHNOLOGY LIMITED
+543D92     (base 16)		WIRELESS-TEK TECHNOLOGY LIMITED
+				Room 402 4F, BiaoFan Technology Building, Bao'An Avenue, FuYong Town, Bao'An district, ShenZhen,China
+				SHENZHEN    518000
+				CN
+
+98-26-AD   (hex)		Quectel Wireless Solutions Co.,Ltd.
+9826AD     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+E8-AC-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8AC23     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+2C-3B-70   (hex)		AzureWave Technology Inc.
+2C3B70     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+38-86-F7   (hex)		Google, Inc.
+3886F7     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+F4-22-7A   (hex)		Guangdong Seneasy Intelligent Technology Co., Ltd.
+F4227A     (base 16)		Guangdong Seneasy Intelligent Technology Co., Ltd.
+				No. 63, Huitai Industrial Park,
+				Huizhou City,  Guangdong Province  516000
+				CN
+
+8C-51-09   (hex)		IEEE Registration Authority
+8C5109     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+DC-8D-B7   (hex)		ATW TECHNOLOGY, INC.
+DC8DB7     (base 16)		ATW TECHNOLOGY, INC.
+				1F, No.236 Ba’ai Street, Shulin District
+				New Taipei City    23845
+				TW
+
+A4-75-B9   (hex)		Samsung Electronics Co.,Ltd
+A475B9     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+80-54-9C   (hex)		Samsung Electronics Co.,Ltd
+80549C     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+1C-F8-D0   (hex)		Samsung Electronics Co.,Ltd
+1CF8D0     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+6C-60-D0   (hex)		Huawei Device Co., Ltd.
+6C60D0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+64-0E-6A   (hex)		SECO-LARM USA Inc
+640E6A     (base 16)		SECO-LARM USA Inc
+				16842 Millikan
+				Irvine  CA  92606
+				US
+
+68-E1-54   (hex)		SiMa.ai
+68E154     (base 16)		SiMa.ai
+				226 Airport Parkway, Suite 550
+				San Jose  CA  95110
+				US
+
+70-20-84   (hex)		Hon Hai Precision Industry Co., Ltd.
+702084     (base 16)		Hon Hai Precision Industry Co., Ltd.
+				GuangDongShenZhen
+				ShenZhen  GuangDong  518109
+				CN
+
+28-C1-3C   (hex)		Hon Hai Precision Industry Co., Ltd.
+28C13C     (base 16)		Hon Hai Precision Industry Co., Ltd.
+				GuangDongShenZhen
+				ShenZhen  GuangDong  518109
+				CN
+
+9C-31-C3   (hex)		SKY UK LIMITED
+9C31C3     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+D4-52-EE   (hex)		SKY UK LIMITED
+D452EE     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+1C-A0-B8   (hex)		Hon Hai Precision Industry Co., Ltd.
+1CA0B8     (base 16)		Hon Hai Precision Industry Co., Ltd.
+				GuangDongShenZhen
+				ShenZhen  GuangDong  518109
+				CN
+
+E8-EF-05   (hex)		MIND TECH INTERNATIONAL LIMITED
+E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
+				FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK
+				Hong Kong    999077
+				HK
+
+90-21-06   (hex)		SKY UK LIMITED
+902106     (base 16)		SKY UK LIMITED
+				130 Kings Road
+				Brentwood  Essex  08854
+				GB
+
+D8-FF-C3   (hex)		Shenzhen 3SNIC information technology company Limited
+D8FFC3     (base 16)		Shenzhen 3SNIC information technology company Limited
+				Room 3101, Building 3, Nanshan Zhiyuan Chongwen Park, No.3370, Liuxian Avenue, Fuguang Community, Taoyuan Street, Nanshan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+F0-87-56   (hex)		Zyxel Communications Corporation
+F08756     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+18-C3-00   (hex)		Nokia
+18C300     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+D4-4D-77   (hex)		Nokia
+D44D77     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+48-27-E2   (hex)		Espressif Inc.
+4827E2     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+F4-6D-3F   (hex)		Intel Corporate
+F46D3F     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+58-B3-8F   (hex)		New H3C Technologies Co., Ltd
+58B38F     (base 16)		New H3C Technologies Co., Ltd
+				466 Changhe Road, Binjiang District
+				Hangzhou  Zhejiang  310052
+				CN
+
+40-E1-71   (hex)		Jiangsu Huitong Group Co.,Ltd.
+40E171     (base 16)		Jiangsu Huitong Group Co.,Ltd.
+				No. 24, Block 2, Taohuawu New District
+				Zhenjiang  Jiangsu  212003
+				CN
+
+6C-72-4A   (hex)		Onkyo Technology K.K.
+6C724A     (base 16)		Onkyo Technology K.K.
+				Lux Building (5th floor),1-1-41 Kawamata
+				Higashiosaka City  Osaka  577-0063
+				JP
+
+DC-05-39   (hex)		Cisco Systems, Inc
+DC0539     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+8C-25-5E   (hex)		VoltServer
+8C255E     (base 16)		VoltServer
+				42 Ladd St STE 227
+				East Greenwich  RI  02818
+				US
+
+E0-F3-18   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+E0F318     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+				Chengdu  Sichuan  611330
+				CN
+
+C4-64-F2   (hex)		Infinix mobility limited
+C464F2     (base 16)		Infinix mobility limited
+				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+				HongKong  HongKong  999077
+				HK
+
+B0-1F-47   (hex)		Heights Telecom T ltd
+B01F47     (base 16)		Heights Telecom T ltd
+				Moshe Lerer 15
+				Nes Ziona     7404996
+				IL
+
+28-29-47   (hex)		Chipsea Technologies (Shenzhen) Corp.
+282947     (base 16)		Chipsea Technologies (Shenzhen) Corp.
+				3 / F, Block A, Building 2, Shenzhen Bay Innovation Technology Center, No.3156 keyuan South Road, Yuehai Street, Nanshan District, Shenzhen
+				Shenzhen  Guangdong  518000
+				CN
+
+AC-BC-B5   (hex)		Apple, Inc.
+ACBCB5     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+08-25-73   (hex)		Apple, Inc.
+082573     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+AC-00-7A   (hex)		Apple, Inc.
+AC007A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-1F-C7   (hex)		Apple, Inc.
+F01FC7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-8F-27   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+B88F27     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+88-20-0D   (hex)		Apple, Inc.
+88200D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+BC-15-41   (hex)		Nokia
+BC1541     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+94-6D-AE   (hex)		Mellanox Technologies, Inc.
+946DAE     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+E4-A6-34   (hex)		Universal Electronics, Inc.
+E4A634     (base 16)		Universal Electronics, Inc.
+				201 E. Sandpointe Ave
+				Santa Ana  CA  92707
+				US
+
+2C-8D-37   (hex)		Virtium
+2C8D37     (base 16)		Virtium
+				30052 Tomas
+				Racho Santa MArgarita  CA  92688
+				US
+
+50-63-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+506391     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+E8-A3-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+E8A34E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+04-18-92   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+041892     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+14-65-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+14656A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-B6-87   (hex)		Arcadyan Corporation
+ACB687     (base 16)		Arcadyan Corporation
+				No.8, Sec.2, Guangfu Rd.
+				Hsinchu City  Hsinchu  30071
+				TW
+
+6C-B7-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+6CB7E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+C4-75-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C475EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+90-25-F2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+9025F2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+38-7C-76   (hex)		Universal Global Scientific Industrial Co., Ltd.
+387C76     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
+				Nan-Tou  Taiwan  54261
+				TW
+
+40-FD-F3   (hex)		AMPAK Technology,Inc.
+40FDF3     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+EC-E6-1D   (hex)		Huawei Device Co., Ltd.
+ECE61D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+48-6D-BB   (hex)		Vestel Elektronik San ve Tic. A.S.
+486DBB     (base 16)		Vestel Elektronik San ve Tic. A.S.
+				Organize san
+				Manisa  Turket  45030
+				TR
+
+00-84-ED   (hex)		LEXMARK INTERNATIONAL, INC.
+0084ED     (base 16)		LEXMARK INTERNATIONAL, INC.
+				740 W. New Circle Rd.
+				Lexington  KY  40550
+				US
+
+4C-63-AD   (hex)		Huawei Device Co., Ltd.
+4C63AD     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+DC-DB-27   (hex)		Huawei Device Co., Ltd.
+DCDB27     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+70-42-D3   (hex)		Ruijie Networks Co.,LTD
+7042D3     (base 16)		Ruijie Networks Co.,LTD
+				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
+				Fuzhou  Fujian  350002
+				CN
+
+44-12-44   (hex)		Aruba, a Hewlett Packard Enterprise Company
+441244     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+B4-3A-31   (hex)		Silicon Laboratories
+B43A31     (base 16)		Silicon Laboratories
+				400 West Cesar Chavez
+				Austin  TX  78701
+				US
+
+74-24-9F   (hex)		TIBRO Corp.
+74249F     (base 16)		TIBRO Corp.
+				251 Little Falls Drive
+				Wilmington  DE  19808
+				US
+
+34-DF-20   (hex)		Shenzhen Comstar .Technology Co.,Ltd
+34DF20     (base 16)		Shenzhen Comstar .Technology Co.,Ltd
+				4th Floor,Block B,Building 6,Evergrande Fashion Valley, Dalang Street, Longhua District,Shenzhen
+				Shenzhen  Guangdong  518109
+				CN
+
+F4-1A-B0   (hex)		Shenzhen Xingguodu Technology Co., Ltd.
+F41AB0     (base 16)		Shenzhen Xingguodu Technology Co., Ltd.
+				18th Floor, Block B, Building 10, Shenzhen Bay Science and Technology Ecological Park, Nanshan District, Shenzhen
+				Shenzhen  Guangdong  518000
+				CN
+
+D8-83-32   (hex)		TaiXin Semiconductor Co., Ltd
+D88332     (base 16)		TaiXin Semiconductor Co., Ltd
+				3 Floor Building No 2, Guangwan Bay No.1 Tangjia Town, Zhuhai City
+				Zhuhai  Guangdong  519000
+				CN
+
+88-9C-AD   (hex)		Cisco Systems, Inc
+889CAD     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+A4-51-5E   (hex)		Juniper Networks
+A4515E     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+18-C3-F4   (hex)		IEEE Registration Authority
+18C3F4     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+44-8E-EC   (hex)		China Mobile Group Device Co.,Ltd.
+448EEC     (base 16)		China Mobile Group Device Co.,Ltd.
+				32 Xuanwumen West Street,Xicheng District
+				Beijing    100053
+				CN
+
+F0-26-F8   (hex)		Worldcns Co.,Ltd.
+F026F8     (base 16)		Worldcns Co.,Ltd.
+				B-1813 67, Saebitgongwon-ro, Gwangmyeong-si, Gyeonggi-do, Republic of Korea
+				Gwangmyeong    14348
+				KR
+
+14-07-08   (hex)		CP PLUS GMBH & CO. KG
+140708     (base 16)		CP PLUS GMBH & CO. KG
+				Hans Henny Jahnn Weg 9
+				Hamburg    D22085
+				DE
+
+68-27-5F   (hex)		zte corporation
+68275F     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+44-41-F0   (hex)		zte corporation
+4441F0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen  guangdong  518057
+				CN
+
+8C-6A-3B   (hex)		Samsung Electronics Co.,Ltd
+8C6A3B     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+24-11-53   (hex)		Samsung Electronics Co.,Ltd
+241153     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+14-D4-24   (hex)		AzureWave Technology Inc.
+14D424     (base 16)		AzureWave Technology Inc.
+				8F., No. 94, Baozhong Rd.
+				New Taipei City  Taiwan  231
+				TW
+
+F8-5B-6E   (hex)		Samsung Electronics Co.,Ltd
+F85B6E     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+28-2B-B9   (hex)		Shenzhen Xiongxin Technology Co.,Ltd
+282BB9     (base 16)		Shenzhen Xiongxin Technology Co.,Ltd
+				Room 05, 15th Floor, Yihua Financial Technology Building, 3939 Baishi Road, Binhai Community, Yuehai Street, Nanshan District, Shenzhen China
+				Shenzhen  Guangdong  518000
+				CN
+
+F8-A4-75   (hex)		PT Indoreka Jaya Wutama
+F8A475     (base 16)		PT Indoreka Jaya Wutama
+				Tokopedia Tower Ciputra World 2, Jl. Prof. Dr. Satrio No 3, Desa/Kelurahan Karet Semanggi, Kec. Setiabudi, Kota Adm. Jakarta Selatan, Provinsi DKI Jakarta
+				Jakarta Selatan  DKI Jakarta  12950
+				ID
+
+30-1A-BA   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+301ABA     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+14-49-D4   (hex)		Xiaomi Communications Co Ltd
+1449D4     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+64-7C-E8   (hex)		Palo Alto Networks
+647CE8     (base 16)		Palo Alto Networks
+				3000 Tannery Way
+				Santa Clara  CA  95054
+				US
+
+A0-FF-0C   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+A0FF0C     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+68-F5-43   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+68F543     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+A4-79-52   (hex)		Huawei Device Co., Ltd.
+A47952     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B8-7C-D0   (hex)		Huawei Device Co., Ltd.
+B87CD0     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+D0-7E-01   (hex)		Huawei Device Co., Ltd.
+D07E01     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+F8-79-07   (hex)		Huawei Device Co., Ltd.
+F87907     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C8-70-D4   (hex)		IBO Technology Co,Ltd
+C870D4     (base 16)		IBO Technology Co,Ltd
+				4F,Block.C,Unis Inforport,Langshan Rd 13,Hi-Tech Industrial Park(North)Nanshan
+				ShenZhen  GuangDong  518000
+				CN
+
+68-87-1C   (hex)		Motorola Mobility LLC, a Lenovo Company
+68871C     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+7C-E8-7F   (hex)		Sagemcom Broadband SAS
+7CE87F     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+F8-7D-76   (hex)		Apple, Inc.
+F87D76     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+2C-76-00   (hex)		Apple, Inc.
+2C7600     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+80-82-F5   (hex)		STMicrolectronics International NV
+8082F5     (base 16)		STMicrolectronics International NV
+				39, Chemin du Champ-des-Filles
+				 Geneva, Plan-les-Quates    1228
+				CH
+
+84-FB-43   (hex)		Central Denshi Seigyo
+84FB43     (base 16)		Central Denshi Seigyo
+				#913 9th Kanagawa Science Park R&D Business Park building B,  3-2-1 Sakado, Takatsu-ku,
+				Kawasaki City  Kanagawa Prefecture  213-0012
+				JP
+
+9C-2D-CD   (hex)		LCFC(Hefei) Electronics Technology Co., Ltd
+9C2DCD     (base 16)		LCFC(Hefei) Electronics Technology Co., Ltd
+				No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area
+				HEFEI  ANHUI  230601
+				CN
+
+00-31-26   (hex)		Nokia
+003126     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+10-98-26   (hex)		Nokia
+109826     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+68-6C-E6   (hex)		Microsoft Corporation
+686CE6     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+58-47-CA   (hex)		IEEE Registration Authority
+5847CA     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+68-D4-0C   (hex)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+68D40C     (base 16)		TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO 
+				Av. Buriti, 1900 – Setor B – Distrito Industrial
+				Manaus  Amazonas  69075-000
+				BR
+
+08-54-11   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+085411     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+80-A7-96   (hex)		Neuralink Corp.
+80A796     (base 16)		Neuralink Corp.
+				3180 18th St, Ste 200
+				San Francisco  CA  94110
+				US
+
+DC-DC-C3   (hex)		Extreme Networks, Inc.
+DCDCC3     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+F4-F1-9E   (hex)		Wistron InforComm (Zhongshan) Corporation
+F4F19E     (base 16)		Wistron InforComm (Zhongshan) Corporation
+				No.38, East Keji Road, Zhongshan Torch Development Zone
+				Zhongshan  Guangdong  528437
+				CN
+
+24-E3-DE   (hex)		China Telecom Fufu Information Technology Co., Ltd.
+24E3DE     (base 16)		China Telecom Fufu Information Technology Co., Ltd.
+				22 Shuitou Road, Doumen
+				Fuzhou  Fujian  350013
+				CN
+
+10-4C-43   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+104C43     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+98-34-8C   (hex)		Teleepoch Ltd
+98348C     (base 16)		Teleepoch Ltd
+				No.13 Langshan Rd,HiTech Park,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+18-16-E8   (hex)		Siliconware Precision Industries Co., Ltd.
+1816E8     (base 16)		Siliconware Precision Industries Co., Ltd.
+				No. 123, Sec.3, Da Fong Rd, Tantzu, 
+				Taichung    427
+				TW
+
+CC-79-D7   (hex)		Cisco Systems, Inc
+CC79D7     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+E4-38-7E   (hex)		Cisco Systems, Inc
+E4387E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+5C-AC-3D   (hex)		Samsung Electronics Co.,Ltd
+5CAC3D     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+08-A7-C0   (hex)		Technicolor CH USA Inc.
+08A7C0     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+8C-6A-8D   (hex)		Technicolor CH USA Inc.
+8C6A8D     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+1C-9E-CC   (hex)		Technicolor CH USA Inc.
+1C9ECC     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+CC-E6-86   (hex)		Samsung Electronics Co.,Ltd
+CCE686     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+74-19-0A   (hex)		Samsung Electronics Co.,Ltd
+74190A     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+5C-7D-7D   (hex)		Technicolor CH USA Inc.
+5C7D7D     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+40-75-C3   (hex)		Technicolor CH USA Inc.
+4075C3     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+F0-ED-B8   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
+F0EDB8     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
+				NEW DELHI    NA
+				IN
+
+F8-79-99   (hex)		Guangdong Jiuzhi Technology Co.,Ltd
+F87999     (base 16)		Guangdong Jiuzhi Technology Co.,Ltd
+				Room 3A02, Yihe center, Shiqi District, Zhongshan City, Guangdong Province, China
+				Zhongshan City  Guangdong Province  523000
+				CN
+
+CC-2A-AC   (hex)		Yunjing lntelligent Technology(Dongguan).,Ltd
+CC2AAC     (base 16)		Yunjing lntelligent Technology(Dongguan).,Ltd
+				Building 7, 4 Xingye Road, Songshan Lake Park, Dongguan city, Guangdong Province
+				Dongguan    523000
+				CN
+
+20-40-6A   (hex)		AMPAK Technology,Inc.
+20406A     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+84-DB-A4   (hex)		Huawei Device Co., Ltd.
+84DBA4     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+24-5C-C5   (hex)		Huawei Device Co., Ltd.
+245CC5     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+E4-60-17   (hex)		Intel Corporate
+E46017     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+30-F6-EF   (hex)		Intel Corporate
+30F6EF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+68-E1-DC   (hex)		BUFFALO.INC
+68E1DC     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+58-6D-67   (hex)		Intel Corporate
+586D67     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+EC-74-27   (hex)		eero inc.
+EC7427     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+4C-5B-B3   (hex)		Silicon Laboratories
+4C5BB3     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+78-D8-40   (hex)		Xiaomi Communications Co Ltd
+78D840     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+F4-63-FC   (hex)		vivo Mobile Communication Co., Ltd.
+F463FC     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+38-BC-61   (hex)		Starkoff Co., Ltd.
+38BC61     (base 16)		Starkoff Co., Ltd.
+				SeoulForest L-Tower #1405, Achasanro 17, Seongdonggu
+				Seoul  Seoul  04789
+				KR
+
+B8-3D-FB   (hex)		Bouffalo Lab (Nanjing) Co., Ltd.
+B83DFB     (base 16)		Bouffalo Lab (Nanjing) Co., Ltd.
+				5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China
+				Nanjing  Jiangsu  211800
+				CN
+
+54-64-DE   (hex)		u-blox AG
+5464DE     (base 16)		u-blox AG
+				Zuercherstrasse 68
+				Thalwil    8800
+				CH
+
+10-A8-29   (hex)		Cisco Systems, Inc
+10A829     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+60-56-7D   (hex)		AM Telecom co., Ltd.
+60567D     (base 16)		AM Telecom co., Ltd.
+				#608,YatapLeaders B/D, Jangmi-ro 42, Bundang-gu
+				Seongnam-si  Gyeonggi-do  463-828
+				KR
+
+04-86-80   (hex)		Quectel Wireless Solutions Co.,Ltd.
+048680     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+B8-AB-62   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+B8AB62     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+				No.2,Jin-da Road,Huinan Industrial Park
+				Hui Zhou  Guangdong  516025
+				CN
+
+C8-96-5A   (hex)		SKY UK LIMITED
+C8965A     (base 16)		SKY UK LIMITED
+				Grant Way
+				Isleworth  Middlesex  TW7 5QD
+				GB
+
+C8-DE-41   (hex)		SKY UK LIMITED
+C8DE41     (base 16)		SKY UK LIMITED
+				Grant Way
+				Isleworth  Middlesex  TW7 5QD
+				GB
+
+20-5E-97   (hex)		Nokia
+205E97     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+38-CA-84   (hex)		HP Inc.
+38CA84     (base 16)		HP Inc.
+				10300 Energy Drive
+				Spring  TX  77389
+				US
+
+D4-F0-C9   (hex)		KYOCERA Document Solutions Inc.
+D4F0C9     (base 16)		KYOCERA Document Solutions Inc.
+				2-28 1-Chome, Tamatsukuri, Chuo-ku  
+				osaka  Japan  540-8585
+				JP
+
+84-E6-57   (hex)		Sony Interactive Entertainment Inc.
+84E657     (base 16)		Sony Interactive Entertainment Inc.
+				1-7-1 Konan
+				Minato-ku  Tokyo  108-0075
+				JP
+
+24-B7-DA   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+24B7DA     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+08-46-C7   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+0846C7     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+				No.5 DongXin Road
+				Wuhan  Hubei  430074
+				CN
+
+FC-22-F4   (hex)		Zyxel Communications Corporation
+FC22F4     (base 16)		Zyxel Communications Corporation
+				No. 6 Innovation Road II, Science Park
+				Hsichu  Taiwan  300
+				TW
+
+64-E8-33   (hex)		Espressif Inc.
+64E833     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+7C-9F-07   (hex)		CIG SHANGHAI CO LTD
+7C9F07     (base 16)		CIG SHANGHAI CO LTD
+				5th Floor, Building 8 No 2388 Chenhang Road 
+				SHANGHAI    201114
+				CN
+
+AC-CF-7B   (hex)		INGRAM MICRO SERVICES
+ACCF7B     (base 16)		INGRAM MICRO SERVICES
+				100 CHEMIN DE BAILLOT
+				MONTAUBAN    82000
+				FR
+
+E8-6E-44   (hex)		zte corporation
+E86E44     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+00-E7-E3   (hex)		zte corporation
+00E7E3     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+04-20-84   (hex)		zte corporation
+042084     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+B4-5F-84   (hex)		zte corporation
+B45F84     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+B0-8B-92   (hex)		zte corporation
+B08B92     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+B8-16-5F   (hex)		LG Innotek
+B8165F     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+1C-63-49   (hex)		Texas Instruments
+1C6349     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+E4-52-1E   (hex)		Texas Instruments
+E4521E     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B8-F0-B9   (hex)		zte corporation
+B8F0B9     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+18-2C-65   (hex)		Texas Instruments
+182C65     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+C8-E3-06   (hex)		eero inc.
+C8E306     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+A4-E8-A3   (hex)		Fujian Newland Auto-ID Tech Co.,Ltd.
+A4E8A3     (base 16)		Fujian Newland Auto-ID Tech Co.,Ltd.
+				Newland Science&Technology Park,No.1,Rujiang West Rd,Mawei,Fuzhou,P.R.China
+				Fuzhou  Fujian  350015
+				CN
+
+CC-B7-C4   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+CCB7C4     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-14-C1   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+5014C1     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+60-A2-C6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+60A2C6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+AC-3E-B1   (hex)		Google, Inc.
+AC3EB1     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+F0-C7-45   (hex)		TECNO MOBILE LIMITED
+F0C745     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+B4-6D-C2   (hex)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+B46DC2     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.，LTD
+				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
+				shenzhen  guangdong  518000
+				CN
+
+18-FA-B7   (hex)		Apple, Inc.
+18FAB7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+70-22-FE   (hex)		Apple, Inc.
+7022FE     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+88-1E-5A   (hex)		Apple, Inc.
+881E5A     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-C5-85   (hex)		Apple, Inc.
+00C585     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+A8-7C-F8   (hex)		Apple, Inc.
+A87CF8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B8-D0-F0   (hex)		FCNT LMITED
+B8D0F0     (base 16)		FCNT LMITED
+				Sanki Yamato Building, 7-10-1 Chuorinkan
+				Yamato  Kanagawa  242-8588
+				JP
+
+0C-AF-31   (hex)		Cisco Systems, Inc
+0CAF31     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+88-28-FB   (hex)		Juniper Networks
+8828FB     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+3C-58-5D   (hex)		Sagemcom Broadband SAS
+3C585D     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+38-95-92   (hex)		Tendyron Corporation
+389592     (base 16)		Tendyron Corporation
+				1810,Tower B,Jin-ma,Building,17 East Qing Hua Road 
+				Beijing    100083
+				CN
+
+4C-82-A9   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+4C82A9     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+				Nanning  Guangxi  530007
+				CN
+
+44-32-62   (hex)		zte corporation
+443262     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+F0-F6-9C   (hex)		NIO Co., Ltd.
+F0F69C     (base 16)		NIO Co., Ltd.
+				Building 9, 889 Tianlin Road, Minhang District
+				Shanghai  Shanghai  201804
+				CN
+
+B0-6B-B3   (hex)		GRT
+B06BB3     (base 16)		GRT
+				Unit 01, 10/F Carnival Comm BLDG 18 Java RD,North Point, Hong Kong
+				Hong Kong    100036
+				HK
+
+3C-FA-06   (hex)		Microsoft Corporation
+3CFA06     (base 16)		Microsoft Corporation
+				One Microsoft Way
+				REDMOND  WA  98052
+				US
+
+58-E4-03   (hex)		Wistron Neweb Corporation
+58E403     (base 16)		Wistron Neweb Corporation
+				No.20,Park Avenue II,Hsinchu Science Park
+				Hsin-Chu  R.O.C.  308
+				TW
+
+98-CC-D9   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+98CCD9     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+				Shenzhen  Guangdong  518000
+				CN
+
+64-D3-15   (hex)		HMD Global Oy
+64D315     (base 16)		HMD Global Oy
+				Bertel Jungin aukio 9
+				Espoo    02600
+				FI
+
+E8-47-3A   (hex)		Hon Hai Precision Industry Co.,LTD
+E8473A     (base 16)		Hon Hai Precision Industry Co.,LTD
+				66.Chung Shan RD, TU-CHENG Industrial , district new TAIPEI CITY,23678 , TAIWAN CHINA 
+				TAIPEI  66.Chung Shan RD, TU-CHENG Industrial , district new TAIPEI   33859
+				CN
+
+D8-0E-29   (hex)		vivo Mobile Communication Co., Ltd.
+D80E29     (base 16)		vivo Mobile Communication Co., Ltd.
+				No.1, vivo Road, Chang'an
+				Dongguan  Guangdong  523860
+				CN
+
+60-6D-9D   (hex)		Otto Bock Healthcare Products GmbH
+606D9D     (base 16)		Otto Bock Healthcare Products GmbH
+				Brehmstraße 16
+				Wien  Wien  1110
+				AT
+
+FC-D5-D9   (hex)		Shenzhen SDMC Technology CO.,Ltd.
+FCD5D9     (base 16)		Shenzhen SDMC Technology CO.,Ltd.
+				7/F,Block A,Huahan Bldg.,
+				Shenzhen  GuangDong  518000
+				CN
+
+F8-5B-9B   (hex)		iMercury
+F85B9B     (base 16)		iMercury
+				2-14
+				Kanda Tsukasamachi, Chiyoda-ku  Tokyo  101-0048
+				JP
+
+28-76-81   (hex)		Silicon Laboratories
+287681     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+30-FB-10   (hex)		Silicon Laboratories
+30FB10     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+50-0B-26   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+500B26     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+50-41-72   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+504172     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+D4-92-5E   (hex)		Technicolor Delivery Technologies Belgium NV
+D4925E     (base 16)		Technicolor Delivery Technologies Belgium NV
+				Prins Boudewijnlaan 47
+				Edegem - Belgium    B-2650
+				BE
+
+58-58-CD   (hex)		Extreme Networks, Inc.
+5858CD     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+10-BF-67   (hex)		Amazon Technologies Inc.
+10BF67     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+9C-B2-06   (hex)		HMS Industrial Networks
+9CB206     (base 16)		HMS Industrial Networks
+				P O Box 4126 Halmstad Halland 300 04 SE
+				Halland   Halmstad  300 04
+				SE
+
+00-09-41   (hex)		Allied Telesis K.K.
+000941     (base 16)		Allied Telesis K.K.
+				Technical Center/No.2 TOC Bldg.
+				Shinagawa-ku    141-0031
+				US
+
+80-FB-F0   (hex)		Quectel Wireless Solutions Co.,Ltd.
+80FBF0     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+90-BD-E6   (hex)		Quectel Wireless Solutions Co.,Ltd.
+90BDE6     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+54-65-03   (hex)		Quectel Wireless Solutions Co.,Ltd.
+546503     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+98-AC-EF   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+98ACEF     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+				Chongqing   China  401120
+				CN
+
+90-A6-BF   (hex)		Quectel Wireless Solutions Co.,Ltd.
+90A6BF     (base 16)		Quectel Wireless Solutions Co.,Ltd.
+				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
+				Shanghai    200233
+				CN
+
+24-D7-9C   (hex)		Cisco Systems, Inc
+24D79C     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+00-84-1E   (hex)		Cisco Meraki
+00841E     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+48-5D-35   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+485D35     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+				Alt-Moabit 95
+				Berlin  Berlin  10559
+				DE
+
+8C-CD-FE   (hex)		AMPAK Technology,Inc.
+8CCDFE     (base 16)		AMPAK Technology,Inc.
+				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+				TW
+
+A4-3F-51   (hex)		Shenzhen Benew Technology  Co.,Ltd.
+A43F51     (base 16)		Shenzhen Benew Technology  Co.,Ltd.
+				No.2001, Building 2, Sunmax Technology Park, Kehua Road No.8, Nanshan District
+				Shenzhen    518057
+				CN
+
+24-E1-24   (hex)		Xiamen Milesight IoT Co., Ltd.
+24E124     (base 16)		Xiamen Milesight IoT Co., Ltd.
+				Building C09, Software Park Phase III 
+				Xiamen  Fujian  361024
+				CN
+
+A4-18-94   (hex)		Bosch Security Systems B.V.
+A41894     (base 16)		Bosch Security Systems B.V.
+				Torenalle 49
+				Eindhoven    5617 BA
+				NL
+
+74-3F-C2   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+743FC2     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+24-72-4A   (hex)		Nile Global Inc
+24724A     (base 16)		Nile Global Inc
+				10915 Miramonte Rd
+				Cupertino    95014
+				US
+
+D0-4F-58   (hex)		Ruckus Wireless
+D04F58     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+C8-ED-FC   (hex)		Shenzhen Ideaform Industrial Product Design Co., Ltd
+C8EDFC     (base 16)		Shenzhen Ideaform Industrial Product Design Co., Ltd
+				Room 206, Building A2, Hangcheng Park, Xixiang Street, Bao'an District
+				Shenzhen  Guangdong  518100
+				CN
+
+F8-22-29   (hex)		Nokia Shanghai Bell Co., Ltd.
+F82229     (base 16)		Nokia Shanghai Bell Co., Ltd.
+				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+				Shanghai     201206
+				CN
+
+78-D6-D6   (hex)		eero inc.
+78D6D6     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+6C-23-16   (hex)		TATUNG Technology Inc.,
+6C2316     (base 16)		TATUNG Technology Inc.,
+				Room 1000,10F., No.288, Sec. 6, Civic Blvd.,Xinyi Dist.,
+				Taipei City  TAIWAN  11087
+				TW
+
+9C-0C-35   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+9C0C35     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
+				ShenZHEN  GuangDong  518104
+				CN
+
+44-3D-54   (hex)		Amazon Technologies Inc.
+443D54     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+50-3C-CA   (hex)		TECNO MOBILE LIMITED
+503CCA     (base 16)		TECNO MOBILE LIMITED
+				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+				Hong Kong  Hong Kong  999077
+				HK
+
+54-47-CC   (hex)		Sagemcom Broadband SAS
+5447CC     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+DC-FB-B8   (hex)		Meizhou Guo Wei Electronics Co., Ltd
+DCFBB8     (base 16)		Meizhou Guo Wei Electronics Co., Ltd
+				AD1 Section, The Economy Development Area, Dongsheng Industrial District, 
+				Meizhou  Guangdong Province  514000
+				CN
+
+C4-DB-04   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+C4DB04     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+94-7D-77   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+947D77     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+58-73-D8   (hex)		Apple, Inc.
+5873D8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F4-E8-C7   (hex)		Apple, Inc.
+F4E8C7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+14-85-09   (hex)		Apple, Inc.
+148509     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+60-D0-39   (hex)		Apple, Inc.
+60D039     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+C4-C1-7D   (hex)		Apple, Inc.
+C4C17D     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+94-09-C9   (hex)		ALPSALPINE CO,.LTD
+9409C9     (base 16)		ALPSALPINE CO,.LTD
+				nishida 6-1
+				kakuda-City  Miyagi-Pref  981-1595
+				JP
+
+E0-BD-A0   (hex)		Apple, Inc.
+E0BDA0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F8-34-51   (hex)		Comcast-SRL
+F83451     (base 16)		Comcast-SRL
+				Alejo Martinez 17
+				Sosua  Puerto Plata  34443
+				DO
+
+20-DE-1E   (hex)		Nokia
+20DE1E     (base 16)		Nokia
+				600 March Road
+				Kanata  Ontario  K2K 2E6
+				CA
+
+AC-B1-81   (hex)		Belden Mooresville
+ACB181     (base 16)		Belden Mooresville
+				1113 N Main St.
+				Mooresville    28115
+				US
+
+AC-E4-03   (hex)		Shenzhen Visteng Technology CO.,LTD
+ACE403     (base 16)		Shenzhen Visteng Technology CO.,LTD
+				6F, M7, MaQueLing, Hi-tech Park, Nanshan District
+				Shenzhen    518000
+				CN
+
+E4-62-C4   (hex)		Cisco Systems, Inc
+E462C4     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+3C-31-74   (hex)		Google, Inc.
+3C3174     (base 16)		Google, Inc.
+				1600 Amphitheatre Parkway
+				Mountain View  CA  94043
+				US
+
+A0-C2-0D   (hex)		Huawei Device Co., Ltd.
+A0C20D     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+4C-88-9E   (hex)		Huawei Device Co., Ltd.
+4C889E     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+6C-AC-C2   (hex)		Samsung Electronics Co.,Ltd
+6CACC2     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+BC-F7-30   (hex)		Samsung Electronics Co.,Ltd
+BCF730     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+44-EE-14   (hex)		Texas Instruments
+44EE14     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+B4-AC-9D   (hex)		Texas Instruments
+B4AC9D     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+68-63-72   (hex)		Huawei Device Co., Ltd.
+686372     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+BC-93-07   (hex)		Samsung Electronics Co.,Ltd
+BC9307     (base 16)		Samsung Electronics Co.,Ltd
+				#94-1, Imsoo-Dong
+				Gumi  Gyeongbuk  730-350
+				KR
+
+D4-3F-32   (hex)		eero inc.
+D43F32     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+00-1B-1F   (hex)		FORCE Technology
+001B1F     (base 16)		FORCE Technology
+				Venlighedsvej 4
+				Horsholm    2970
+				DK
+
+C4-FC-22   (hex)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+C4FC22     (base 16)		YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+				309, 3th Floor, No.16, Yun Ding North Road, Huli District
+				xiamen  Fujian  361015
+				CN
+
+AC-51-EE   (hex)		Adtran Inc
+AC51EE     (base 16)		Adtran Inc
+				Sheraton House
+				Cambridge  Cambridgeshire  CB3 0AX
+				GB
+
+28-D0-CB   (hex)		Adtran Inc
+28D0CB     (base 16)		Adtran Inc
+				Victory House, Vision Park, Chivers Way, Histon
+				Cambridge    CB24 9ZR
+				GB
+
+FC-6A-1C   (hex)		Mellanox Technologies, Inc.
+FC6A1C     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+A0-88-C2   (hex)		Mellanox Technologies, Inc.
+A088C2     (base 16)		Mellanox Technologies, Inc.
+				350 Oakmead Parkway, Suite 100 
+				Sunnyvale  CA  94085
+				US
+
+48-29-D6   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4829D6     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+A4-D5-C2   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+A4D5C2     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road
+				Hangzhou  Zhejiang  310052
+				CN
+
+A8-80-55   (hex)		Tuya Smart Inc.
+A88055     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+50-8B-B9   (hex)		Tuya Smart Inc.
+508BB9     (base 16)		Tuya Smart Inc.
+				160 Greentree Drive, Suite 101
+				Dover  DE  19904
+				US
+
+00-23-C7   (hex)		AVSystem sp. z o. o.
+0023C7     (base 16)		AVSystem sp. z o. o.
+				Radzikowskiego 47D
+				Kraków, ul.    31-315
+				PL
+
+08-28-02   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+082802     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+				SHENZHEN  GUANGDONG  518057
+				CN
+
+CC-42-10   (hex)		Xiaomi Communications Co Ltd
+CC4210     (base 16)		Xiaomi Communications Co Ltd
+				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+				Beijing  Haidian District  100085
+				CN
+
+3C-99-8C   (hex)		Houwa System Design Corp.
+3C998C     (base 16)		Houwa System Design Corp.
+				4F Matubara Building  3-22-14 Shibuyaku Higashi
+				Tokyo    150-0011
+				JP
+
+98-F9-CC   (hex)		Zhejiang Dahua Technology Co., Ltd.
+98F9CC     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+				No.1199,Waterfront Road 
+				Hangzhou  Zhejiang  310053
+				CN
+
+38-68-A4   (hex)		Samsung Electronics Co.,Ltd
+3868A4     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon  Gyeonggi-Do  16677
+				KR
+
+AC-1E-92   (hex)		Samsung Electronics Co.,Ltd
+AC1E92     (base 16)		Samsung Electronics Co.,Ltd
+				129, Samsung-ro, Youngtongl-Gu
+				Suwon    16677
+				KR
+
+B8-37-B2   (hex)		Aruba, a Hewlett Packard Enterprise Company
+B837B2     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+				3333 Scott Blvd
+				Santa Clara  CA  95054
+				US
+
+BC-AD-90   (hex)		Kymeta Purchasing
+BCAD90     (base 16)		Kymeta Purchasing
+				12034 134th Ct NE #105
+				Redmond  WA  98052
+				US
+
+A0-60-32   (hex)		Amcrest Technologies
+A06032     (base 16)		Amcrest Technologies
+				16727 Park Row
+				Houston  TX  77084
+				US
+
+DC-C2-C9   (hex)		CANON INC.
+DCC2C9     (base 16)		CANON INC.
+				30-2 Shimomaruko 3-chome,
+				Ohta-ku  Tokyo  146-8501
+				JP
+
+D8-53-BC   (hex)		Lenovo Information Products (Shenzhen)Co.,Ltd
+D853BC     (base 16)		Lenovo Information Products (Shenzhen)Co.,Ltd
+				2F, NO.1 Plant , Lenovo Innovation Park, Lidu Road, Loucun Community, Xinhu Street, Guangming District , Shenzhen, Guangdong, China
+				Shenzhen  Guangdong  518000
+				CN
+
+B4-E5-4C   (hex)		LLC Elektra
+B4E54C     (base 16)		LLC Elektra
+				Russian Federation, Moscow, Goncharnaya st, house ? 30, building 1, office ?511
+				Moscow    115172
+				RU
+
+A4-16-C0   (hex)		Apple, Inc.
+A416C0     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+DC-45-B8   (hex)		Apple, Inc.
+DC45B8     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+90-EC-EA   (hex)		Apple, Inc.
+90ECEA     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+B4-AE-C1   (hex)		Apple, Inc.
+B4AEC1     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+54-32-C7   (hex)		Apple, Inc.
+5432C7     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+10-B5-88   (hex)		Apple, Inc.
+10B588     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+F0-D3-1F   (hex)		Apple, Inc.
+F0D31F     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+38-0F-AD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+380FAD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+80-AC-C8   (hex)		Phyplus Microelectronics Limited
+80ACC8     (base 16)		Phyplus Microelectronics Limited
+				304 Building 1 No.608 Sheng Xia Road
+				Shanghai    200000
+				CN
+
+58-E4-88   (hex)		Amazon Technologies Inc.
+58E488     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+84-46-93   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+844693     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+5C-75-45   (hex)		Wayties, Inc.
+5C7545     (base 16)		Wayties, Inc.
+				#206, 42 Changyeop-ro Sujeong-gu
+				Seongnam-si  Gyenggi-do  13449
+				KR
+
+10-A7-93   (hex)		Technicolor CH USA Inc.
+10A793     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+24-78-23   (hex)		Panasonic Entertainment & Communication Co., Ltd.
+247823     (base 16)		Panasonic Entertainment & Communication Co., Ltd.
+				3-1-1 Yagumo-naka-machi
+				Moriguchi  Osaka  570-8501
+				JP
+
+E4-BC-96   (hex)		DAP B.V.
+E4BC96     (base 16)		DAP B.V.
+				Tussendiepen 4a
+				Drachten    9206 AD
+				NL
+
+20-21-41   (hex)		Universal Electronics BV
+202141     (base 16)		Universal Electronics BV
+				Colosseum 2 
+				Enschede  Ov  7521 PT 
+				NL
+
+44-DF-65   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+44DF65     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+				Beijing  Beijing  100085
+				CN
+
+D8-03-1A   (hex)		Laird Connectivity
+D8031A     (base 16)		Laird Connectivity
+				3F.-1, No.145, Xianzheng 9th Rd.,
+				Zhubei    30251
+				TW
+
+0C-95-05   (hex)		The Chamberlain Group, Inc
+0C9505     (base 16)		The Chamberlain Group, Inc
+				300 Windsor Drive
+				Oak Brook  IL  60523
+				US
+
+08-E6-C9   (hex)		Business-intelligence of Oriental Nations Corporation Ltd.
+08E6C9     (base 16)		Business-intelligence of Oriental Nations Corporation Ltd.
+				101, Floor 7, Building 1, Yard 1, Chuangda Third Road, Chaoyang District, Beijing
+				Beijing    100102
+				CN
+
+7C-27-3C   (hex)		Shenzhen Yunlink Technology Co., Ltd
+7C273C     (base 16)		Shenzhen Yunlink Technology Co., Ltd
+				Gushu, Xixiang Town, Bao'an District, 
+				Shenzhen City  Guangdong Province  518100
+				CN
+
+1C-2A-B0   (hex)		Beijing Xiaomi Electronics Co.,Ltd
+1C2AB0     (base 16)		Beijing Xiaomi Electronics Co.,Ltd
+				Xiaomi Campus
+				Beijing  Beijing  100085
+				CN
+
+98-17-F1   (hex)		zte corporation
+9817F1     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+B8-A5-35   (hex)		Technicolor CH USA Inc.
+B8A535     (base 16)		Technicolor CH USA Inc.
+				5030 Sugarloaf Parkway Bldg 6 
+				Lawrenceville   GA  30044
+				US
+
+5C-16-48   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+5C1648     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+4C-C8-44   (hex)		Maipu Communication Technology Co.,Ltd.
+4CC844     (base 16)		Maipu Communication Technology Co.,Ltd.
+				No.16 Jiuxing Avenue, Hi-tech zone
+				Chengdu  Sichuan  610094
+				CN
+
+00-2B-F5   (hex)		BUFFALO.INC
+002BF5     (base 16)		BUFFALO.INC
+				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+				Nagoya  Aichi Pref.  460-8315
+				JP
+
+98-C8-54   (hex)		Chiun Mai Communication System, Inc
+98C854     (base 16)		Chiun Mai Communication System, Inc
+				No.4, MingSheng St. TuCheng District
+				New Taipei City    23679
+				TW
+
+70-17-D7   (hex)		Shanghai Enflame Technology Co., Ltd.
+7017D7     (base 16)		Shanghai Enflame Technology Co., Ltd.
+				A-522, No. 188, Yesheng Road, LIN-GANG Special Area, China (Shanghai) Pilot Free Trade Zone
+				Shanghai  Shanghai  201306
+				CN
+
+64-B7-08   (hex)		Espressif Inc.
+64B708     (base 16)		Espressif Inc.
+				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+70-54-64   (hex)		Silicon Laboratories
+705464     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+8C-6F-B9   (hex)		Silicon Laboratories
+8C6FB9     (base 16)		Silicon Laboratories
+				7000 W. William Cannon Dr.
+				Austin  TX  78735
+				US
+
+B8-6A-F1   (hex)		Sagemcom Broadband SAS
+B86AF1     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+CC-58-30   (hex)		Sagemcom Broadband SAS
+CC5830     (base 16)		Sagemcom Broadband SAS
+				250, route de l'Empereur
+				Rueil Malmaison Cedex  hauts de seine  92848
+				FR
+
+E8-24-A6   (hex)		Juniper Networks
+E824A6     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+A0-8E-24   (hex)		eero inc.
+A08E24     (base 16)		eero inc.
+				660 3rd Street
+				San Francisco  CA  94107
+				US
+
+AC-89-D2   (hex)		Ciena Corporation
+AC89D2     (base 16)		Ciena Corporation
+				7035 Ridge Road
+				Hanover  MD  21076
+				US
+
+E0-56-94   (hex)		Yunhight Microelectronics
+E05694     (base 16)		Yunhight Microelectronics
+				No. 801-31, Data Center, No. 9, Shaping Road, Guoxing Avenue, Lingang Economic Development District
+				Yibin  Sichuan  644000
+				CN
+
+24-27-30   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+242730     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+				Midea Global Innovation Center,Beijiao Town,Shunde
+				Foshan  Guangdong  528311
+				CN
+
+54-11-59   (hex)		Nettrix Information Industry co.LTD
+541159     (base 16)		Nettrix Information Industry co.LTD
+				Building 27, yard 8, Dongbei Wangxi Road, Haidian District, Beijing
+				Beijing  Beijing  100193
+				CN
+
+B4-98-82   (hex)		Brusa HyPower AG
+B49882     (base 16)		Brusa HyPower AG
+				Langäulistrasse 60 
+				Buchs    9470
+				CH
+
+18-E8-29   (hex)		Ubiquiti Inc
+18E829     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+74-AC-B9   (hex)		Ubiquiti Inc
+74ACB9     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+F4-92-BF   (hex)		Ubiquiti Inc
+F492BF     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+68-D7-9A   (hex)		Ubiquiti Inc
+68D79A     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+48-38-B6   (hex)		Auhui Taoyun Technology Co., Ltd
+4838B6     (base 16)		Auhui Taoyun Technology Co., Ltd
+				6/F and 23/F, Scientific Research Building, Building 2, Zone A, China Sound Valley, No. 3333, Xiyou Road, High tech Zone
+				Hefei  Anhui  230094
+				CN
+
+00-03-56   (hex)		Diebold Nixdorf
+000356     (base 16)		Diebold Nixdorf
+				Wohlrabedamm 31
+				Berlin    13629
+				DE
+
+00-15-6D   (hex)		Ubiquiti Inc
+00156D     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+BC-C4-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+BCC427     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+				Dongguan    523808
+				CN
+
+00-27-22   (hex)		Ubiquiti Inc
+002722     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+DC-9F-DB   (hex)		Ubiquiti Inc
+DC9FDB     (base 16)		Ubiquiti Inc
+				685 Third Avenue, 27th Floor
+				New York  NY  New York NY 10017
+				US
+
+B0-CF-CB   (hex)		Amazon Technologies Inc.
+B0CFCB     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+88-6E-DD   (hex)		Micronet union Technology(Chengdu)Co., Ltd.
+886EDD     (base 16)		Micronet union Technology(Chengdu)Co., Ltd.
+				 No.502, Building 5, No. 528, Yuefei Road, Shibantan Street, Xindu District
+				Chengdu  Sichuan  610000
+				CN
+
+98-47-44   (hex)		Shenzhen Boomtech Industrial Corporation
+984744     (base 16)		Shenzhen Boomtech Industrial Corporation
+				2F, Block E, Bao'an Intelligent Valley, Yingtian Road No.4, Xixiang Sub-District Office, Bao'an District
+				Shenzhen    518100
+				CN
+
+5C-4D-BF   (hex)		zte corporation
+5C4DBF     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+80-F3-EF   (hex)		Meta Platforms Technologies, LLC
+80F3EF     (base 16)		Meta Platforms Technologies, LLC
+				1601 Willow Rd
+				Menlo Park  CA  94025
+				US
+
+80-43-3F   (hex)		Juniper Networks
+80433F     (base 16)		Juniper Networks
+				1133 Innovation Way
+				Sunnyvale  CA  94089
+				US
+
+50-45-94   (hex)		Radisys
+504594     (base 16)		Radisys
+				8900 NE Walker Road, Suite 130
+				Hillsboro  OR  97006
+				US
+
+00-30-52   (hex)		DZS Inc.
+003052     (base 16)		DZS Inc.
+				6120 WINDWARD PARKWAY -STE#100
+				ALPHARETTA  GA  30005
+				US
+
+D0-19-D3   (hex)		ITEL MOBILE LIMITED
+D019D3     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+CC-AC-FE   (hex)		Telink Semiconductor (Shanghai) Co., Ltd.
+CCACFE     (base 16)		Telink Semiconductor (Shanghai) Co., Ltd.
+				No. 1500 Zuchongzhi Rd, Building #3
+				Shanghai    201203
+				CN
+
+08-BF-B8   (hex)		ASUSTek COMPUTER INC.
+08BFB8     (base 16)		ASUSTek COMPUTER INC.
+				No.15,Lide Rd., Beitou, Dist.,Taipei 112,Taiwan
+				Taipei  Taiwan  112
+				TW
+
+4C-23-1A   (hex)		Extreme Networks, Inc.
+4C231A     (base 16)		Extreme Networks, Inc.
+				6480 Via Del Oro
+				San Jose  CA  95119
+				US
+
+F4-00-46   (hex)		ON Semiconductor
+F40046     (base 16)		ON Semiconductor
+				5005 East McDowell Road
+				Phoenix    85008
+				US
+
+4C-5E-D3   (hex)		Unisyue Technologies Co; LTD.
+4C5ED3     (base 16)		Unisyue Technologies Co; LTD.
+				Room 402, No. 2 Building, NO.1 ZhongGuancun East Rd, HaiDian District, Beijing, People’s Republic of China
+				Beijing    100190
+				CN
+
+D8-B2-49   (hex)		Huawei Device Co., Ltd.
+D8B249     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+C4-9D-08   (hex)		Huawei Device Co., Ltd.
+C49D08     (base 16)		Huawei Device Co., Ltd.
+				No.2 of Xincheng Road, Songshan Lake Zone
+				Dongguan  Guangdong  523808
+				CN
+
+10-12-D0   (hex)		zte corporation
+1012D0     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+B0-44-9C   (hex)		Assa Abloy AB - Yale
+B0449C     (base 16)		Assa Abloy AB - Yale
+				Nordenskiöldsgatan 8B (5tr)
+				Malmö    211 19
+				SE
+
+60-2A-1B   (hex)		JANCUS
+602A1B     (base 16)		JANCUS
+				Room 101-3. Technology Start-up Center, 10 Electric-gil, Seongsan-gu, Changwon-si, Gyeongsangnam-do
+				Changwon-si    51542
+				KR
+
+18-84-C1   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+1884C1     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+				No.6, 4th Yunpu Road, Yunpu industry District
+				Guangzhou  Guangdong  510530
+				CN
+
+68-85-6A   (hex)		OuterLink Corporation
+68856A     (base 16)		OuterLink Corporation
+				150 Baker Avenue Extension, Suite 302
+				Concord  MA  01742
+				US
+
+E4-12-89   (hex)		topsystem GmbH
+E41289     (base 16)		topsystem GmbH
+				Krefelder Straße 201
+				Aachen    52070
+				DE
+
+EC-C0-18   (hex)		Cisco Systems, Inc
+ECC018     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+74-8F-C2   (hex)		Cisco Systems, Inc
+748FC2     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+D8-24-EC   (hex)		Plenom A/S
+D824EC     (base 16)		Plenom A/S
+				Pi 2, Soften
+				Hinnerup  Favrskov  8382
+				DK
+
+D0-16-F0   (hex)		IEEE Registration Authority
+D016F0     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+00-19-F0   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+0019F0     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				18F, HUAYANG TOWER,YANDAYI ROAD
+				HUIZHOU  GUANGDONG  516007
+				CN
+
+A0-1C-87   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+A01C87     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+40-F4-FD   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+40F4FD     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+AC-12-8E   (hex)		Shanghai Baud Data Communication Co.,Ltd.
+AC128E     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
+				NO.123 JULI RD
+				PUDONG ZHANGJIANG HIGH-TECH PARK  SHANGHAI  201203
+				CN
+
+64-E0-AB   (hex)		UNION MAN TECHNOLOGY CO.,LTD
+64E0AB     (base 16)		UNION MAN TECHNOLOGY CO.,LTD
+				No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway
+				Huizhou  Guangdong  516025
+				CN
+
+44-A3-C7   (hex)		zte corporation
+44A3C7     (base 16)		zte corporation
+				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+				shenzhen   guangdong  518057
+				CN
+
+AC-3D-94   (hex)		Arista Networks
+AC3D94     (base 16)		Arista Networks
+				5453 Great America Parkway
+				Santa Clara  CA  95054
+				US
+
+30-E1-F1   (hex)		Intelbras
+30E1F1     (base 16)		Intelbras
+				BR 101, km 210, S/N°
+				São José  Santa Catarina  88104800
+				BR
+
+3C-46-A1   (hex)		Ruckus Wireless
+3C46A1     (base 16)		Ruckus Wireless
+				350 West Java Drive
+				Sunnyvale  CA  94089
+				US
+
+64-8F-3E   (hex)		Cisco Systems, Inc
+648F3E     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+CC-B6-C8   (hex)		Cisco Systems, Inc
+CCB6C8     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+6C-D6-E3   (hex)		Cisco Systems, Inc
+6CD6E3     (base 16)		Cisco Systems, Inc
+				80 West Tasman Drive
+				San Jose  CA  94568
+				US
+
+EC-ED-73   (hex)		Motorola Mobility LLC, a Lenovo Company
+ECED73     (base 16)		Motorola Mobility LLC, a Lenovo Company
+				222 West Merchandise Mart Plaza
+				Chicago  IL  60654
+				US
+
+EC-2C-49   (hex)		NakaoLab, The University of Tokyo
+EC2C49     (base 16)		NakaoLab, The University of Tokyo
+				Engineering Building 3, Room 445, 7-3-1 Hongo
+				Tokyo  Bunkyoku  113-0033
+				JP
+
+A0-29-19   (hex)		Dell Inc.
+A02919     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+CC-96-E5   (hex)		Dell Inc.
+CC96E5     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+2C-64-F6   (hex)		Wu Qi Technologies,Inc.
+2C64F6     (base 16)		Wu Qi Technologies,Inc.
+				14/F, 107 Middle Road, Xiantao Big Data Valley, Yubei District
+				Chongqing  Chongqing  401120
+				CN
+
+88-68-4B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+88684B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+				NO.18 HAIBIN ROAD,
+				DONG GUAN  GUANG DONG  523860
+				CN
+
+E8-8F-C4   (hex)		MOBIWIRE MOBILES(NINGBO) CO.,LTD
+E88FC4     (base 16)		MOBIWIRE MOBILES(NINGBO) CO.,LTD
+				Buliding B,Bird Indusrtial Park No.999 Dacheng Road,Fenghua Zhejiang,China
+				NingBo  ZheJiang  315500
+				CN
+
+AC-1A-3D   (hex)		Dell Inc.
+AC1A3D     (base 16)		Dell Inc.
+				One Dell Way
+				Round Rock   TX  78682
+				US
+
+F4-9D-A7   (hex)		Private
+F49DA7     (base 16)		Private
+
+74-8F-4D   (hex)		duagon Germany GmbH
+748F4D     (base 16)		duagon Germany GmbH
+				Neuwieder Str. 1 - 7
+				Nuremberg  Bavaria   90411
+				DE
+
+00-C0-3A   (hex)		duagon Germany GmbH
+00C03A     (base 16)		duagon Germany GmbH
+				Neuwieder Str. 1 - 7
+				Nuremberg  Bavaria   90411
+				DE
+
+E8-4C-4A   (hex)		Amazon Technologies Inc.
+E84C4A     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102 
+				Reno  NV  89507
+				US
+
+C8-F2-25   (hex)		EM Microelectronic
+C8F225     (base 16)		EM Microelectronic
+				Rue des Sors 3
+				Marin-Epagnier  Neuchatel  2074
+				CH
+
+78-53-0D   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+78530D     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+78-5F-36   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+785F36     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+FC-2C-FD   (hex)		dormakaba Canada Inc. - Keyscan
+FC2CFD     (base 16)		dormakaba Canada Inc. - Keyscan
+				901 Burns Street East
+				Whitby  Ontario  L1N 0E6
+				CA
+
+4C-9B-63   (hex)		LG Innotek
+4C9B63     (base 16)		LG Innotek
+				26, Hanamsandan 5beon-ro
+				Gwangju  Gwangsan-gu  506-731
+				KR
+
+C0-17-54   (hex)		Apple, Inc.
+C01754     (base 16)		Apple, Inc.
+				1 Infinite Loop
+				Cupertino  CA  95014
+				US
+
+00-12-27   (hex)		Franklin Electric Co., Inc.
+001227     (base 16)		Franklin Electric Co., Inc.
+				9255 Coverdale Road
+				Fort Wayne  IN  46809
+				US
+
+BC-33-40   (hex)		Cisco Meraki
+BC3340     (base 16)		Cisco Meraki
+				500 Terry A. Francois Blvd
+				San Francisco    94158
+				US
+
+8C-02-CD   (hex)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+8C02CD     (base 16)		FUJIAN STAR-NET COMMUNICATION CO.,LTD
+				19-22# Building, Star-net Science Plaza, Juyuanzhou,
+				FUZHOU  FUJIAN  350002
+				CN
+
+94-7F-D8   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+947FD8     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+20-89-8A   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+20898A     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+48-45-CF   (hex)		LLC Proizvodstvennaya Kompania TransService
+4845CF     (base 16)		LLC Proizvodstvennaya Kompania TransService
+				Ulitsa Podolskih Kursantov,  build. 3, of. 133
+				Moscow  Moscow  117545
+				RU
+
+FC-7A-58   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+FC7A58     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+18-AA-1E   (hex)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+18AA1E     (base 16)		Shenzhen Skyworth Digital  Technology  CO., Ltd
+				4F,Block A, Skyworth?Building,
+				Shenzhen  Guangdong  518057
+				CN
+
+50-E5-38   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+50E538     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+				No.555 Qianmo Road 
+				Hangzhou  Zhejiang  310052
+				CN
+
+E4-8E-BB   (hex)		Rockwell Automation
+E48EBB     (base 16)		Rockwell Automation
+				1 Allen-Bradley Dr.
+				Mayfield Heights  OH  44124-6118
+				US
+
+54-F8-F0   (hex)		Tesla Inc
+54F8F0     (base 16)		Tesla Inc
+				1 Tesla Road
+				Austin  TX  78725
+				US
+
+24-BF-74   (hex)		Hamamatsu Photonics K.K.
+24BF74     (base 16)		Hamamatsu Photonics K.K.
+				1126-1, Ichino-cho, Higashi-ku
+				Hamamatsu-City  Shizuoka-ken  435-8558
+				JP
+
+FC-48-C9   (hex)		Yobiiq Intelligence B.V.
+FC48C9     (base 16)		Yobiiq Intelligence B.V.
+				Bedrijfsweg 31
+				Geleen  Limburg  6163CZ
+				NL
+
+A0-66-36   (hex)		Intracom SA Telecom Solutions
+A06636     (base 16)		Intracom SA Telecom Solutions
+				19.7 klm Marcopoulo Ave
+				PEANIA  ATTIKI  19001
+				GR
+
+64-1C-10   (hex)		Texas Instruments
+641C10     (base 16)		Texas Instruments
+				12500 TI Blvd
+				Dallas  TX  75243
+				US
+
+F4-AA-D0   (hex)		OHSUNG
+F4AAD0     (base 16)		OHSUNG
+				335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA
+				GUMI  GYEONG BUK  730-030
+				KR
diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt
index 08cdcba..2878000 100644
--- a/hwdb.d/ma-medium.txt
+++ b/hwdb.d/ma-medium.txt
@@ -1,25113 +1,27567 @@
-OUI                                                         Organization                                 
-OUI-28/MA-M Range                                           Organization                                 
-                                                            Address                                      
-
-74-1A-E0   (hex)		Private
-900000-9FFFFF     (base 16)		Private
-
-20-85-93   (hex)		IOG Products LLC
-B00000-BFFFFF     (base 16)		IOG Products LLC
-				9737 LURLINE AVENUE
-				CHATSWORTH  CA  91311
-				US
-
-B0-C5-CA   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-B0-1F-81   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-20-85-93   (hex)		Shanghai Kenmyond Industrial Network Equipment Co.,Ltd
-D00000-DFFFFF     (base 16)		Shanghai Kenmyond Industrial Network Equipment Co.,Ltd
-				15/F,NO3003,Baoyang Road,Baoshan District
-				Shanghai  Shanghai  201201
-				CN
-
-20-85-93   (hex)		H3 Industries, Inc.
-A00000-AFFFFF     (base 16)		H3 Industries, Inc.
-				12758 W Deep Canyon Dr.
-				Star  ID  83669
-				US
-
-24-15-10   (hex)		Teknic, Inc.
-B00000-BFFFFF     (base 16)		Teknic, Inc.
-				115 Victor Heights Pkwy
-				14564,Victor  NY  14564
-				US
-
-98-06-37   (hex)		GS GLOBAL SECURITY INC
-500000-5FFFFF     (base 16)		GS GLOBAL SECURITY INC
-				30 Pennsylvania Ave, Unit 16,
-				CONCORD  ONTARIO  L4K 4A5
-				CA
-
-B4-A2-EB   (hex)		Shanghai Shenou Communication Equipment Co., Ltd.
-C00000-CFFFFF     (base 16)		Shanghai Shenou Communication Equipment Co., Ltd.
-				No. 1188, Kungang Road, Songjiang District
-				Shanghai  Shanghai  200000
-				CN
-
-24-15-10   (hex)		GANZHOU DEHUIDA TECHNOLOGY CO., LTD
-500000-5FFFFF     (base 16)		GANZHOU DEHUIDA TECHNOLOGY CO., LTD
-				Dehuida Science and Technology Park, Huoyanshan Road, Anyuan District
-				Ganzhou  Jiangxi  342100
-				CN
-
-24-15-10   (hex)		Nile Global Inc
-200000-2FFFFF     (base 16)		Nile Global Inc
-				10915 Miramonte Rd
-				Cupertino  CA  95014
-				US
-
-24-15-10   (hex)		Helen of Troy
-D00000-DFFFFF     (base 16)		Helen of Troy
-				1 Helen of Troy Plaza
-				El Paso  TX  79912
-				US
-
-98-06-37   (hex)		Zoleo Inc.
-000000-0FFFFF     (base 16)		Zoleo Inc.
-				7a Taymall Avenue
-				Toronto  ON  M8Z 3Y8
-				CA
-
-98-06-37   (hex)		E. P. Schlumberger
-100000-1FFFFF     (base 16)		E. P. Schlumberger
-				1 rue Henri Becquerel
-				Clamart    92140
-				FR
-
-B4-37-D1   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-44-D5-F2   (hex)		SYS TEC electronic GmbH
-A00000-AFFFFF     (base 16)		SYS TEC electronic GmbH
-				Am Windrad 2
-				Heinsdorfergrund   Sachsen  D-08468
-				DE
-
-44-D5-F2   (hex)		Shenzhen Nation RFID Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Shenzhen Nation RFID Technology Co.,Ltd.
-				Room 816, Building A, Yuanzheng Venture Building, No. 19 Langshan Road, Xili Street, Nanshan District
-				ShenZhen  Guangdong  518000
-				CN
-
-D0-5F-64   (hex)		TytoCare LTD.
-800000-8FFFFF     (base 16)		TytoCare LTD.
-				12 Haomanut st., 2nd floor
-				Netanya  Merkaz  4250445
-				IL
-
-D0-5F-64   (hex)		Cyrus Technology GmbH
-600000-6FFFFF     (base 16)		Cyrus Technology GmbH
-				Hergelsbendenstraße 49
-				Aachen    52080
-				DE
-
-D0-5F-64   (hex)		Montblanc-Simplo GmbH
-E00000-EFFFFF     (base 16)		Montblanc-Simplo GmbH
-				Hellgrundweg 100
-				Hamburg  Hamburg  22525
-				DE
-
-44-D5-F2   (hex)		Beam Communications Pty Ltd
-600000-6FFFFF     (base 16)		Beam Communications Pty Ltd
-				U5/8 Anzed Court
-				Mulgrave  Victoria  3170
-				AU
-
-FC-A4-7A   (hex)		Innovative Advantage
-700000-7FFFFF     (base 16)		Innovative Advantage
-				15353 NE 90th Street
-				Redmond   WA  98052
-				US
-
-FC-A4-7A   (hex)		 Shenzhen Elebao Technology Co., Ltd
-A00000-AFFFFF     (base 16)		 Shenzhen Elebao Technology Co., Ltd
-				F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District
-				shenzhen  GUANGDONG  518126
-				CN
-
-FC-A4-7A   (hex)		Shenzhen ALFEYE Technology CO.,Ltd
-C00000-CFFFFF     (base 16)		Shenzhen ALFEYE Technology CO.,Ltd
-				Dingye Business Center321, Building A, Jingbei Industrial Park, No. 82, Intersection of Baoan Avenue and Xin'an 6th Road, Haiyu Community, Xin'an Street, Bao'an District
-				Shenzhen  Guangdong  518000
-				CN
-
-2C-16-BD   (hex)		LINGDONG TECHNOLOGY (BEIJING) CO. LTD
-B00000-BFFFFF     (base 16)		LINGDONG TECHNOLOGY (BEIJING) CO. LTD
-				2603-01, Floor 22, building 2, No.66 Zhongguancun East Road, Haidian District, Beijing
-				Beijing    100080
-				CN
-
-2C-16-BD   (hex)		Beijing CHJ Automotive Co., Ltd.
-C00000-CFFFFF     (base 16)		Beijing CHJ Automotive Co., Ltd.
-				Room 101, Building 1, No. 4 Hengxing Road, Gaoliying, Shunyi District
-				Beijing  Beijing  101303
-				CN
-
-B4-A2-EB   (hex)		Quantitec GmbH
-B00000-BFFFFF     (base 16)		Quantitec GmbH
-				Elisabethenstr. 3a
-				Hofheim am Taunus  Hessen  65719
-				DE
-
-B4-A2-EB   (hex)		CURRENT WAYS, INC.
-900000-9FFFFF     (base 16)		CURRENT WAYS, INC.
-				10221 BUENA VISTA AVE
-				SANTEE  CA  92071
-				US
-
-B4-A2-EB   (hex)		Annapurna labs
-500000-5FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-B4-A2-EB   (hex)		Hengkang（Hangzhou）Co.,Ltd
-A00000-AFFFFF     (base 16)		Hengkang（Hangzhou）Co.,Ltd
-				Industrial Area,Huanghu Town,Yuhang District
-				Hangzhou  Zhejiang  311118
-				CN
-
-8C-59-3C   (hex)		Guralp Systems Limited
-400000-4FFFFF     (base 16)		Guralp Systems Limited
-				3 Midas House
-				Reading  Berkshire  RG7 8EA
-				GB
-
-8C-59-3C   (hex)		Beida Jade Bird Universal Fire Alarm Device CO.,LTD.
-200000-2FFFFF     (base 16)		Beida Jade Bird Universal Fire Alarm Device CO.,LTD.
-				Jade Bird Building C, 207 Chengfu RD, Haidian District
-				Beijing  Beijing  100871
-				CN
-
-8C-59-3C   (hex)		OBO Pro.2 Inc.
-700000-7FFFFF     (base 16)		OBO Pro.2 Inc.
-				2148 Bering Dr.
-				San Jose  CA  95131
-				US
-
-8C-59-3C   (hex)		GENIS
-900000-9FFFFF     (base 16)		GENIS
-				1111, 11F RACREUM, 26 Wiryeseoil-ro
-				Seongnam-si  Gyeonggi-do  13647
-				KR
-
-D0-C8-57   (hex)		Beijing Inspiry Technology Co., Ltd. 
-500000-5FFFFF     (base 16)		Beijing Inspiry Technology Co., Ltd. 
-				Building No. 5, East Zone, No. 10, Xibeiwang East Road, Haidian District
-				Beijing   Beijing   100092
-				CN
-
-BC-97-40   (hex)		Shanghai Laisi Information Technology Co.,Ltd
-500000-5FFFFF     (base 16)		Shanghai Laisi Information Technology Co.,Ltd
-				1001,21#,No.1158 Zhongxin RD,Songjiang district Shanghai
-				shanghai    201614
-				CN
-
-F4-0E-11   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-D0-C8-57   (hex)		E-T-A Elektrotechnische Apparate GmbH
-E00000-EFFFFF     (base 16)		E-T-A Elektrotechnische Apparate GmbH
-				Industriestr. 2-8
-				Altdorf    90518
-				DE
-
-BC-97-40   (hex)		Airfi Oy AB
-700000-7FFFFF     (base 16)		Airfi Oy AB
-				Piilipuunkatu 11
-				RAISIO    21200
-				FI
-
-BC-97-40   (hex)		comtac AG
-100000-1FFFFF     (base 16)		comtac AG
-				Allenwindenstrasse 1
-				Flurlingen    8247
-				CH
-
-BC-97-40   (hex)		Precision Galaxy Pvt. Ltd
-300000-3FFFFF     (base 16)		Precision Galaxy Pvt. Ltd
-				3rd Floor, No.22 Habibullah Road, T Nagar
-				CHENNAI,Tamil Nadu  Tamilnadu  600017
-				IN
-
-60-95-CE   (hex)		Xiamen Sigmastar Technology Ltd.
-600000-6FFFFF     (base 16)		Xiamen Sigmastar Technology Ltd.
-				15th Floor ,Unit A,Chuangxin Building, Software Park, Xiamen Torch Hi-Tech Industrial Development Zone, Xiamen,China
-				Xiamen  Fujian  361005
-				CN
-
-1C-82-59   (hex)		KeyWest Networks, Inc
-B00000-BFFFFF     (base 16)		KeyWest Networks, Inc
-				2200 N Glassell St
-				Orange  CA  92865
-				US
-
-88-5D-90   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-60-95-CE   (hex)		Beijing Sinomedisite Bio-tech Co.,Ltd
-B00000-BFFFFF     (base 16)		Beijing Sinomedisite Bio-tech Co.,Ltd
-				No.9 Kangding Street,Economic-Technological Development Area
-				Beijing  Beijing  100176
-				CN
-
-60-95-CE   (hex)		Siema Applications
-000000-0FFFFF     (base 16)		Siema Applications
-				35 rue Alfred Brinon
-				Villeurbanne    69100
-				FR
-
-60-95-CE   (hex)		Trophy SAS
-800000-8FFFFF     (base 16)		Trophy SAS
-				4 rue F. Pelloutier
-				Croissy-Beaubourg    77435
-				FR
-
-60-95-CE   (hex)		VNS Inc.
-E00000-EFFFFF     (base 16)		VNS Inc.
-				3F, No. 27, Lane 66, Ruiguang Rd.
-				Taipei  Taiwan  11466
-				TW
-
-84-8B-CD   (hex)		exodraft a/s
-500000-5FFFFF     (base 16)		exodraft a/s
-				C. F. Teiegens Boulevard 41
-				Odense SØ    5220
-				DK
-
-1C-82-59   (hex)		3xLOGIC Inc.
-100000-1FFFFF     (base 16)		3xLOGIC Inc.
-				9882 E. 121st Street
-				Fishers  IN  46037
-				US
-
-84-8B-CD   (hex)		CCX Technologies Inc.
-200000-2FFFFF     (base 16)		CCX Technologies Inc.
-				408 - 11 Rosemount Ave.
-				Ottawa  Ontario  K1Y 4R8
-				CA
-
-84-8B-CD   (hex)		TWTG R&D B.V. 
-600000-6FFFFF     (base 16)		TWTG R&D B.V. 
-				Schaardijk 386
-				Capelle aan den IJssel    2909LA
-				NL
-
-B0-FD-0B   (hex)		DMAC Security LLC
-300000-3FFFFF     (base 16)		DMAC Security LLC
-				833 Shotgun Road
-				Sunrise  FL  33326
-				US
-
-B0-FD-0B   (hex)		eSenseLab Ltd.
-800000-8FFFFF     (base 16)		eSenseLab Ltd.
-				1 Chervena stena Str., Office 1
-				Sofia  Sofia-grad  1421
-				BG
-
-B0-FD-0B   (hex)		TEMCO JAPAN CO., LTD.
-A00000-AFFFFF     (base 16)		TEMCO JAPAN CO., LTD.
-				2-21-4 HONAN
-				SUGINAMI KU  Tokyo-to  168-0062
-				JP
-
-C8-2C-2B   (hex)		Grav I.T.
-600000-6FFFFF     (base 16)		Grav I.T.
-				601 1st Ave NW
-				Gravette  AR  72736
-				US
-
-C8-2C-2B   (hex)		Galgus
-100000-1FFFFF     (base 16)		Galgus
-				Italica 1, 1st floor
-				Camas  Seville  41900
-				ES
-
-C8-2C-2B   (hex)		Kunshan SVL Electric  Co.,Ltd
-B00000-BFFFFF     (base 16)		Kunshan SVL Electric  Co.,Ltd
-				No. 568, JuJin Road, Zhangpu Town
-				SuZhou    215300
-				CN
-
-C8-2C-2B   (hex)		Merpa Bilgi Islem Ltd.Sti
-700000-7FFFFF     (base 16)		Merpa Bilgi Islem Ltd.Sti
-				Oztekin CD NO:26
-				Istanbul  Bayrampasa  34040
-				TR
-
-E4-1E-0A   (hex)		SAGE Glass
-800000-8FFFFF     (base 16)		SAGE Glass
-				Two Sage Way
-				Faribault  MN  55021
-				US
-
-C8-2C-2B   (hex)		UBITRON Co.,LTD
-D00000-DFFFFF     (base 16)		UBITRON Co.,LTD
-				Sinbuk-Ro
-				Chuncheon City  Gangwon  24206
-				KR
-
-C8-63-14   (hex)		Autonics Co., Ltd.
-100000-1FFFFF     (base 16)		Autonics Co., Ltd.
-				4-14-26, Shimo-Muneoka
-				Shiki  Saitama  3530003
-				JP
-
-C8-63-14   (hex)		Thinci, Inc.
-800000-8FFFFF     (base 16)		Thinci, Inc.
-				2105 S. Bascom Avenue, Suite 318
-				Campbell  CA  95008
-				US
-
-C8-63-14   (hex)		Maxcom S.A.
-900000-9FFFFF     (base 16)		Maxcom S.A.
-				Towarowa 23A
-				Tychy    43-100
-				PL
-
-FC-D2-B6   (hex)		Bee Smart(Changzhou) Information Technology Co., Ltd
-D00000-DFFFFF     (base 16)		Bee Smart(Changzhou) Information Technology Co., Ltd
-				Changwu Middle Road
-				Changzhou  Jiangsu  213100
-				CN
-
-74-5B-C5   (hex)		CELYSS SAS
-D00000-DFFFFF     (base 16)		CELYSS SAS
-				7 allee des ginkgos
-				Bron    69500
-				FR
-
-FC-D2-B6   (hex)		Coet Costruzioni Elettrotecniche
-300000-3FFFFF     (base 16)		Coet Costruzioni Elettrotecniche
-				Via Civesio 12
-				San Donato Milanese  Mi  20097
-				IT
-
-A8-3F-A1   (hex)		MEDCAPTAIN MEDICAL TECHNOLOGY CO., LTD.
-200000-2FFFFF     (base 16)		MEDCAPTAIN MEDICAL TECHNOLOGY CO., LTD.
-				12th Floor, Baiwang Research Building, No.5158 Shahe West Road, Xili, Nanshan
-				Shenzhen    518055
-				CN
-
-74-5B-C5   (hex)		Fournie Grospaud Energie SASU
-A00000-AFFFFF     (base 16)		Fournie Grospaud Energie SASU
-				220 rue du chene vert
-				LABEGE    31670
-				FR
-
-74-5B-C5   (hex)		ComNot
-C00000-CFFFFF     (base 16)		ComNot
-				15 chemin des Hirondelles
-				DARDILLY    69570
-				FR
-
-4C-BC-98   (hex)		Wonder Workshop
-E00000-EFFFFF     (base 16)		Wonder Workshop
-				1500 Fashion Island, Suite #200
-				San Mateo  CA  94404
-				US
-
-4C-BC-98   (hex)		JSC NIC
-100000-1FFFFF     (base 16)		JSC NIC
-				Nauchny proezd, 6
-				Moscow    117246
-				RU
-
-E4-4C-C7   (hex)		EPS Bio
-C00000-CFFFFF     (base 16)		EPS Bio
-				No. 8, R&D 3rd Rd, Science-Based Industrial Park
-				Hsinchu  Taiwan  30077
-				TW
-
-E4-4C-C7   (hex)		Doowon Electronics & Telecom Co.,Ltd
-200000-2FFFFF     (base 16)		Doowon Electronics & Telecom Co.,Ltd
-				IT 301-408, Ssangyong 3Cha, Bucheon Technopark, 397, Seokcheon-ro, Ojeong-gu
-				Bucheon-si  Gyeonggi-do  14449
-				KR
-
-E0-5A-9F   (hex)		Fibrain
-600000-6FFFFF     (base 16)		Fibrain
-				Zaczernie 190F
-				Zaczernie  Subcarpathia  36-062
-				PL
-
-F8-02-78   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-4C-BC-98   (hex)		Shenzhen Cogitation Technology Co.,Ltd.
-A00000-AFFFFF     (base 16)		Shenzhen Cogitation Technology Co.,Ltd.
-				NO.509 LangShan Building,Nanshan Yungu Innovation Industrial Park,No.1183 Taoyuan Street,Nanshen District
-				Shenzhen  Guangdong  518000
-				CN
-
-E0-5A-9F   (hex)		Gemalto Document Readers
-900000-9FFFFF     (base 16)		Gemalto Document Readers
-				3300 Acorn Street
-				Williamsburg  VA  23188
-				US
-
-D8-86-0B   (hex)		Grünbeck Wasseraufbereitung GmbH
-700000-7FFFFF     (base 16)		Grünbeck Wasseraufbereitung GmbH
-				Josef-Grünbeck-Str. 1
-				Hoechstaedt a.d. Donau    89420
-				DE
-
-D8-86-0B   (hex)		Inspur Group Co., Ltd.
-000000-0FFFFF     (base 16)		Inspur Group Co., Ltd.
-				No.1036 Langchao Rd.
-				Jinan  Shandong  250101
-				CN
-
-D8-86-0B   (hex)		CAMTRACE
-500000-5FFFFF     (base 16)		CAMTRACE
-				26 BIS BOULEVARD HENRI SELLIER
-				SURESNES    92150
-				FR
-
-38-B1-9E   (hex)		System Q Ltd
-B00000-BFFFFF     (base 16)		System Q Ltd
-				Turnoaks Business Park, Hasland
-				Chesterfield  Derbyshire  S40 2WB
-				GB
-
-CC-D3-9D   (hex)		Ethernity Networks
-D00000-DFFFFF     (base 16)		Ethernity Networks
-				Ha-Melacha 13
-				Lod  Israel  7152025
-				IL
-
-CC-D3-9D   (hex)		SHENZHEN ROYOLE TECHNOLOGIES CO., LTD.
-500000-5FFFFF     (base 16)		SHENZHEN ROYOLE TECHNOLOGIES CO., LTD.
-				Building #43, Dayun Software Town, No.8288 Longgang Road, Henggang Street, Longgang District,
-				Shenzhen  Guangdong  518000
-				CN
-
-D4-25-CC   (hex)		Barobo, Inc.
-400000-4FFFFF     (base 16)		Barobo, Inc.
-				221 G Street, #204
-				Davis  CA  95616
-				US
-
-9C-69-B4   (hex)		BEIJING PICOHOOD TECHNOLOGY CO.,LTD
-A00000-AFFFFF     (base 16)		BEIJING PICOHOOD TECHNOLOGY CO.,LTD
-				Room 504A, Building E, Lize Middle Yard, Wangjing Science and Technology Venture Park, Chaoyang District
-				BEIJING  BEIJING  100102
-				CN
-
-9C-69-B4   (hex)		Elesta GmbH
-500000-5FFFFF     (base 16)		Elesta GmbH
-				Heuteilstrasse 18
-				Bad Ragaz  St. Gallen  7310
-				CH
-
-9C-69-B4   (hex)		Toughdog Security Systems
-B00000-BFFFFF     (base 16)		Toughdog Security Systems
-				1317 E Hackberry Ave
-				McAllen  TX  78501
-				US
-
-6C-DF-FB   (hex)		Chongqing Baoli Yota Technologies Limited
-100000-1FFFFF     (base 16)		Chongqing Baoli Yota Technologies Limited
-				No.2,1 Floor,Kelly Building,No.115 Xingtong Avenue,Guilin Street office, Tongnan District
-				Chongqing  Chongqing  402660
-				CN
-
-A4-4F-29   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-4C-91-7A   (hex)		Chongqing Unisinsight Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Chongqing Unisinsight Technology Co.,Ltd.
-				No.117-386, Yunhan Road
-				Beibei District  Chongqing  400714
-				CN
-
-4C-91-7A   (hex)		Shenzhen bankledger Technology Co, Ltd
-D00000-DFFFFF     (base 16)		Shenzhen bankledger Technology Co, Ltd
-				Room 802, Tower A, Yuanzheng Venture Building, No. 19 Langshan Road, Nanshan District
-				Shenzhen     518000
-				CN
-
-6C-DF-FB   (hex)		Beijing Fimi Technology Co., Ltd.
-E00000-EFFFFF     (base 16)		Beijing Fimi Technology Co., Ltd.
-				Room 348, 3F, Complex building A1, Yongtai Park, Qinghe Street, Haidian District, Beijing
-				Beijing    100000
-				CN
-
-6C-DF-FB   (hex)		Beijing Ainemo Co Ltd
-300000-3FFFFF     (base 16)		Beijing Ainemo Co Ltd
-				Building K1,  NO. 86 Beiyuan North road, Chaoyang district, Beijing China
-				Beijing   Beijing  100012
-				CN
-
-4C-91-7A   (hex)		Shenzhen Dangs Science & Technology CO.,LTD
-000000-0FFFFF     (base 16)		Shenzhen Dangs Science & Technology CO.,LTD
-				7D, 7th Floor, HSAE Building, Nanshan District,
-				Shenzhen  GuangDong  518000
-				CN
-
-7C-BC-84   (hex)		Nanning auto digital technology co.,LTD
-500000-5FFFFF     (base 16)		Nanning auto digital technology co.,LTD
-				3/f, no.6 guichun road, qingxiu district
-				Nanning  Guangxi  530021
-				CN
-
-98-F9-C7   (hex)		Koala Technology CO., LTD.
-900000-9FFFFF     (base 16)		Koala Technology CO., LTD.
-				Room 2004, Building A3, Dayuan International Center, High Tech Zone
-				Chengdu  Sichuan  610000
-				CN
-
-6C-DF-FB   (hex)		Hashtrend AG
-700000-7FFFFF     (base 16)		Hashtrend AG
-				Bahnhofstrasse
-				Zug    6300
-				CH
-
-98-F9-C7   (hex)		GoodBox
-600000-6FFFFF     (base 16)		GoodBox
-				Ground Floor, Optimum House
-				Clippers Quay  Salford Quays  M50 3XP
-				GB
-
-98-F9-C7   (hex)		Tonycore Technology Co.,Ltd.
-500000-5FFFFF     (base 16)		Tonycore Technology Co.,Ltd.
-				2/F,Building A,Dingxin Technology Park,Honglang North 2nd Road,Xin’an Street,Bao’an District,
-				Shenzhen  Guangdong  518000
-				CN
-
-98-F9-C7   (hex)		hangzhou soar security technologies limited liability company
-D00000-DFFFFF     (base 16)		hangzhou soar security technologies limited liability company
-				Zhebao Ideal Xiangyuan Creative industrial Park
-				Hangzhou  Zhejiang  Zhejiang
-				CN
-
-2C-48-35   (hex)		IROOTECH TECHNOLOGY CO.,LTD
-E00000-EFFFFF     (base 16)		IROOTECH TECHNOLOGY CO.,LTD
-				Room 606, Floor 6, Building 5, Eastern Yard 10, Xibeiwang East Road
-				Beijing    100092
-				CN
-
-0C-FE-5D   (hex)		NEWGREEN TECH CO., LTD.
-E00000-EFFFFF     (base 16)		NEWGREEN TECH CO., LTD.
-				2F., No.200, Sec. 2, Gaotie N. Rd., Dayuan Dist., Taoyuan City 337, Taiwan (R.O.C.)
-				Taoyuan City    33743
-				TW
-
-0C-FE-5D   (hex)		Bepal Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Bepal Technology Co.,Ltd.
-				Xihu Qu, Tianmushan Road, Qianjiang Xixi Xinzuo
-				HangZhou  ZheJiang  310000
-				CN
-
-3C-39-E7   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-0C-FE-5D   (hex)		Chengdu Ledong Information & Technology Co., Ltd. 
-000000-0FFFFF     (base 16)		Chengdu Ledong Information & Technology Co., Ltd. 
-				D7-13F, Chengdu Tianfu Software Park, No. 599 Shijicheng South street, Gaoxin District, Chengdu, China
-				Chengdu  sichaun  610041
-				CN
-
-6C-5C-3D   (hex)		GUANGZHOU GUANGRI ELEVATOR INDUSTRY CO.,LTD
-800000-8FFFFF     (base 16)		GUANGZHOU GUANGRI ELEVATOR INDUSTRY CO.,LTD
-				636 South of Guomao Road,Shilou County,Panyu District
-				Guangzhou  Guangdong  511047
-				CN
-
-6C-5C-3D   (hex)		ShenZhen Hugsun Technology Co.,Ltd.
-000000-0FFFFF     (base 16)		ShenZhen Hugsun Technology Co.,Ltd.
-				413~415 Room, 4/F, No.6 Bldg., TongFuYu Industrial Park, Dalang Street, 518109, Longhua New District,
-				ShengZhen  GuangDong  518109
-				CN
-
-6C-5C-3D   (hex)		Unitel Engineering
-500000-5FFFFF     (base 16)		Unitel Engineering
-				2-я Кабельная д.2 стр.1
-				Москва  Россия  111024
-				RU
-
-A8-3F-A1   (hex)		BEGLEC
-600000-6FFFFF     (base 16)		BEGLEC
-				hofveld 2c
-				Groot-Bijgaarden    1702
-				BE
-
-1C-FD-08   (hex)		ShenZhen DeLippo Technology Co., LTD
-800000-8FFFFF     (base 16)		ShenZhen DeLippo Technology Co., LTD
-				District A of Fifth Floor,Building E,Guancheng Low Carbon Industrial Park, Shangcun Community,Gongming Street,Guangming District
-				Shenzhen    518106
-				CN
-
-A8-3F-A1   (hex)		Neos Ventures Limited
-800000-8FFFFF     (base 16)		Neos Ventures Limited
-				47 Bermondsey Street
-				London    SE1 3XT
-				GB
-
-A8-3F-A1   (hex)		GTDevice LLC
-100000-1FFFFF     (base 16)		GTDevice LLC
-				PO BOX 86339
-				Portland  OR  97286
-				US
-
-E8-18-63   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-3C-6A-2C   (hex)		TP Radio
-800000-8FFFFF     (base 16)		TP Radio
-				Agenavej 37
-				Greve  .  2670
-				DK
-
-3C-6A-2C   (hex)		Xiamen Smarttek CO., Ltd.
-D00000-DFFFFF     (base 16)		Xiamen Smarttek CO., Ltd.
-				5F, B Area, Chuangxin Plaza, SoftPark I, Siming District
-				Xiamen  Fujian  361005
-				CN
-
-3C-6A-2C   (hex)		Eltov System
-C00000-CFFFFF     (base 16)		Eltov System
-				#1309 Gyeonggi Venture Yeonsung Univ Center. 111, Anyang-ro, Manan-gu,
-				Anyang-si    14093
-				KR
-
-3C-6A-2C   (hex)		Metro
-A00000-AFFFFF     (base 16)		Metro
-				189 rue de la Jonchere
-				Boege    74420
-				FR
-
-3C-6A-2C   (hex)		Olibra LLC
-100000-1FFFFF     (base 16)		Olibra LLC
-				45 legin dr
-				creskill  NJ  07626
-				US
-
-3C-6A-2C   (hex)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
-400000-4FFFFF     (base 16)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
-				5F,Building C,CLP Park,No.211, Tiangu 8 Road, High-tech Zone, Xi' an, Shanxi Province, China
-				Xi’an  Shanxi   710001
-				CN
-
-A4-ED-43   (hex)		Wuxi Junction Infomation Technology Incorporated Company
-700000-7FFFFF     (base 16)		Wuxi Junction Infomation Technology Incorporated Company
-				ROOM919,NO.401 XINGYUANBEILU ROAD, LIANGXI DISTRIC,WUXI CITY,JIANGSU PROVINCE
-				WuXi  Jiangsu  214000
-				CN
-
-30-0A-60   (hex)		Ampetronic Ltd
-A00000-AFFFFF     (base 16)		Ampetronic Ltd
-				Unit 2 Trentside Business Village, Farndon Road
-				Newark  Nottinghamshire  NG24 4XB
-				GB
-
-30-0A-60   (hex)		WINTEK System Co., Ltd
-900000-9FFFFF     (base 16)		WINTEK System Co., Ltd
-				Wintek Venture Bldg., 511, Poil-Dong
-				Uiwang-City  Gyunggi-Do  16013
-				KR
-
-30-0A-60   (hex)		Giax GmbH
-B00000-BFFFFF     (base 16)		Giax GmbH
-				Am Weichselgarten 7
-				Erlangen    91058
-				DE
-
-30-0A-60   (hex)		Thermo Process Instruments, LP
-C00000-CFFFFF     (base 16)		Thermo Process Instruments, LP
-				27 Forge Parkway
-				Frankllin  MA  02038
-				US
-
-A0-28-33   (hex)		Xiamen Caimore Communication Technology Co.,Ltd.
-600000-6FFFFF     (base 16)		Xiamen Caimore Communication Technology Co.,Ltd.
-				 #2 of 302 Unit, 23# Wanghai Road, Xiamen Software Park II
-				Xiamen  Fujian  361009
-				CN
-
-A0-28-33   (hex)		GERSYS GmbH
-000000-0FFFFF     (base 16)		GERSYS GmbH
-				Hans-Urmiller-Ring 12A
-				Wolfratshausen    82515
-				DE
-
-A4-ED-43   (hex)		Brand New Brand Nordic AB
-D00000-DFFFFF     (base 16)		Brand New Brand Nordic AB
-				Nohrstedts väg 5
-				Söderbärke    77794
-				SE
-
-A4-ED-43   (hex)		Linseis Messgeraete GmbH
-800000-8FFFFF     (base 16)		Linseis Messgeraete GmbH
-				Vielitzer Str. 43                      
-				Selb    95100
-				DE
-
-A0-28-33   (hex)		Audix
-D00000-DFFFFF     (base 16)		Audix
-				9400 SW Barber St. 
-				Wilsonville  OR  97070
-				US
-
-A0-28-33   (hex)		Shanghai Nohmi Secom Fire Protection  Equipment Co.,Ltd.
-200000-2FFFFF     (base 16)		Shanghai Nohmi Secom Fire Protection  Equipment Co.,Ltd.
-				No.98,Lane 1971,(s)Lianhua Road,Minhang Area
-				Shanghai  Shanghai  201108
-				CN
-
-84-89-EC   (hex)		Shenzhen Intellifusion Technologies Co., Ltd.
-E00000-EFFFFF     (base 16)		Shenzhen Intellifusion Technologies Co., Ltd.
-				Suite701, Science Museum, Shenzhen City
-				Shenzhen  Guangdong  518000
-				CN
-
-00-55-DA   (hex)		Victorsure Limited
-E00000-EFFFFF     (base 16)		Victorsure Limited
-				15/F Cambridge house, 26-28 Cameron Road
-				Hong Kong  Hong Kong  Hong Kong
-				HK
-
-84-89-EC   (hex)		Research Electronics International, LLC.
-100000-1FFFFF     (base 16)		Research Electronics International, LLC.
-				455 Secuity Drive
-				Cookeville  TN  38506
-				US
-
-30-09-F9   (hex)		OOO Microlink-Svyaz
-300000-3FFFFF     (base 16)		OOO Microlink-Svyaz
-				1st veshnjakovsky proezd 7
-				moscow   moscow   109456
-				RU
-
-84-89-EC   (hex)		Arts Digital Technology (HK) Ltd.
-800000-8FFFFF     (base 16)		Arts Digital Technology (HK) Ltd.
-				1704, 17/F, Fo Tan Industrial Centre, 26-28 Au Pui Wan Street, Fo Tan, Hong Kong
-				Hong Kong    Nil
-				HK
-
-84-89-EC   (hex)		Vayyar Imaging Ltd.
-400000-4FFFFF     (base 16)		Vayyar Imaging Ltd.
-				3 Avraham Giron St
-				Yehud    5621717
-				IL
-
-84-89-EC   (hex)		POCT biotechnology
-600000-6FFFFF     (base 16)		POCT biotechnology
-				6F, No. 185, GangQian Rd., Neihu dist.,
-				Taipei    11494
-				TW
-
-30-09-F9   (hex)		Technology for Humankind
-D00000-DFFFFF     (base 16)		Technology for Humankind
-				3913 N. Rushwood St.
-				Wichita  KS  67226
-				US
-
-C0-83-59   (hex)		SHANGHAI CHARMHOPE INFORMATION TECHNOLOGY CO.,LTD.
-A00000-AFFFFF     (base 16)		SHANGHAI CHARMHOPE INFORMATION TECHNOLOGY CO.,LTD.
-				Building 11,No.230,Chuanhong Rd,Pudong Distrist
-				Shanghai  Shanghai  201202
-				CN
-
-9C-F6-DD   (hex)		Ithor IT Co.,Ltd.
-100000-1FFFFF     (base 16)		Ithor IT Co.,Ltd.
-				No. 501, Building I, ZTE Park, Hi-Tech Industrial Zone
-				XI'AN  ShanXi  710065
-				CN
-
-9C-F6-DD   (hex)		Guangzhou LANGO Electronics Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Guangzhou LANGO Electronics Technology Co., Ltd.
-				136#, Gaopu Road, Tianhe District
-				Guangzhou  Guangdong  510663
-				CN
-
-9C-F6-DD   (hex)		CAMA（Luoyang）Electronics Co.，Ltd
-900000-9FFFFF     (base 16)		CAMA（Luoyang）Electronics Co.，Ltd
-				Luoyang High-tech District, Chuncheng Road 16th.
-				Luoyang  Henan  471003
-				CN
-
-C0-83-59   (hex)		Suzhou Siheng Science and Technology Ltd.
-B00000-BFFFFF     (base 16)		Suzhou Siheng Science and Technology Ltd.
-				8 floor of Jincheng star, Yunhe road NO.150, gaoxin Zone, Suzhou
-				Suzhou    215000
-				CN
-
-C0-83-59   (hex)		ista International GmbH
-800000-8FFFFF     (base 16)		ista International GmbH
-				Luxemburger Strasse 1
-				Essen  NRW  45131
-				DE
-
-C0-83-59   (hex)		Fuzhou Fdlinker Technology Co.,LTD
-700000-7FFFFF     (base 16)		Fuzhou Fdlinker Technology Co.,LTD
-				28th floor, Building 1, area F, Fuzhou software park, 89 Ruanjian Avenue
-				Fuzhou  Fujian  350001
-				CN
-
-04-C3-E6   (hex)		Teleepoch Ltd
-E00000-EFFFFF     (base 16)		Teleepoch Ltd
-				No.13 Langshan Rd,HiTech Park,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-04-C3-E6   (hex)		Sealed Unit Parts Co., Inc.
-A00000-AFFFFF     (base 16)		Sealed Unit Parts Co., Inc.
-				2230 Landmark Place
-				ALLENWOOD  NJ  08720
-				US
-
-C0-83-59   (hex)		PCH Engineering A/S
-300000-3FFFFF     (base 16)		PCH Engineering A/S
-				Ved Klaedebo 4
-				Horsholm    2970
-				DK
-
-B4-4B-D6   (hex)		DongYoung media
-B00000-BFFFFF     (base 16)		DongYoung media
-				#18, Dangjeong-Ro, Gunpo-Si,
-				Gyeonggi-Do,    15849
-				KR
-
-B4-4B-D6   (hex)		Perspicace Intellegince Technology
-600000-6FFFFF     (base 16)		Perspicace Intellegince Technology
-				4F, 1326#, West YanAn road, Shanghai, P.R.China
-				ShangHai  ShangHai  200052
-				CN
-
-3C-42-7E   (hex)		Shenzhen VETAS Communication Technology Co , Ltd.
-300000-3FFFFF     (base 16)		Shenzhen VETAS Communication Technology Co , Ltd.
-				Room 1301-1303,West Wing,Skyworth Semiconductor Design Building,No.18,Gaoxin South 4th road, Nanshan District
-				ShenZhen  Guangdong  518063
-				CN
-
-3C-42-7E   (hex)		Privacy Labs
-C00000-CFFFFF     (base 16)		Privacy Labs
-				10400 NE 4th Street, 7th Floor
-				Bellevue  WA  98004
-				US
-
-3C-42-7E   (hex)		Starloop Tech Co., Ltd.
-200000-2FFFFF     (base 16)		Starloop Tech Co., Ltd.
-				#643, Meinian Plaza A
-				Chengdu    610000
-				CN
-
-3C-42-7E   (hex)		Geoplan Korea
-500000-5FFFFF     (base 16)		Geoplan Korea
-				Simin-ro 327-7 DaeMyung Bldg #614
-				AnYang    15044
-				KR
-
-B4-4B-D6   (hex)		Huizhou Sunoda Technology Co. Ltd
-300000-3FFFFF     (base 16)		Huizhou Sunoda Technology Co. Ltd
-				NO.4 XING JU WEST ROAD,DONG XING DISTRICT,ZHONG KAI DONG JIANG HIGH TECHNOLOGY INDUSTRIAL PARK,
-				HUI ZHOU  guangdong  516000
-				CN
-
-B4-4B-D6   (hex)		Shenzhen Hi-Net Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Shenzhen Hi-Net Technology Co., Ltd.
-				3F, 4Building, Anda Industrial Zone, Chongqing Road, Fuyong Town, Baoan District
-				ShenZhen  GuangDong  518103
-				CN
-
-B4-4B-D6   (hex)		Taizhou convergence Information technology Co.,LTD
-700000-7FFFFF     (base 16)		Taizhou convergence Information technology Co.,LTD
-				Room 1006,general chamber of commerce,159 henghu road
-				wenling  zhejiang  317515
-				CN
-
-B4-4B-D6   (hex)		G4S Monitoring Technologies Ltd
-000000-0FFFFF     (base 16)		G4S Monitoring Technologies Ltd
-				3 Centurion Court, Meridian East
-				Leicester  Leicestershire  LE19 1TP
-				GB
-
-D4-7C-44   (hex)		SHENZHEN ANYSEC TECHNOLOGY CO. LTD
-E00000-EFFFFF     (base 16)		SHENZHEN ANYSEC TECHNOLOGY CO. LTD
-				601, 1 BUILDING,MeiLin Dolly Industrial Zone,Futian District
-				SHENZHEN  GuangDong  518000
-				CN
-
-D4-7C-44   (hex)		Pongee Industries Co., Ltd.
-700000-7FFFFF     (base 16)		Pongee Industries Co., Ltd.
-				5F., No.738, Chung-Cheng Road,
-				Chung-Ho District,  New Taipei City,   23511
-				TW
-
-A0-19-B2   (hex)		ARIMA Communications Corp.
-700000-7FFFFF     (base 16)		ARIMA Communications Corp.
-				6F.,No.866,Zhongzheng Rd.,Zhonghe Dist.,
-				New Taipei City  Taiwan  23586
-				TW
-
-A0-19-B2   (hex)		GfG mbH
-600000-6FFFFF     (base 16)		GfG mbH
-				Kloennestrasse 99
-				Dortmund    44143
-				DE
-
-1C-A0-D3   (hex)		Exicom Tele-Systems Ltd.
-E00000-EFFFFF     (base 16)		Exicom Tele-Systems Ltd.
-				Plot Number 77A, IFFCO Road, Sector 18
-				Gurgaon  Haryana  122015
-				IN
-
-A0-19-B2   (hex)		HangZhou iMagic Technology Co., Ltd 
-B00000-BFFFFF     (base 16)		HangZhou iMagic Technology Co., Ltd 
-				Block F, 11th Floor, Building A, Tiantang Software Park, 3# Xidoumen Road, 
-				Hangzhou  Zhejiang  310012
-				CN
-
-A0-19-B2   (hex)		RYD Electronic Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		RYD Electronic Technology Co.,Ltd.
-				Room1602,No68 Taidong Road,Siming District,Xiamen City
-				Xiamen  FuJian  361000
-				CN
-
-D4-7C-44   (hex)		STRIVE ORTHOPEDICS INC
-C00000-CFFFFF     (base 16)		STRIVE ORTHOPEDICS INC
-				505 PARK AVE FL 17
-				NEW YORK  NY  10022
-				US
-
-D4-7C-44   (hex)		OPTiM Corporation
-B00000-BFFFFF     (base 16)		OPTiM Corporation
-				1 Honjo-machi
-				Saga    840-8502
-				JP
-
-2C-48-35   (hex)		Phasor Solutions Ltd
-D00000-DFFFFF     (base 16)		Phasor Solutions Ltd
-				The Record Hall, 16 Baldwin Gardens
-				London    EC1N 7RJ
-				GB
-
-2C-48-35   (hex)		FAST
-700000-7FFFFF     (base 16)		FAST
-				4740 44th Ave SW Suite #201
-				Seattle  WA  98116
-				US
-
-3C-24-F0   (hex)		Swissdotnet SA
-700000-7FFFFF     (base 16)		Swissdotnet SA
-				Route Saint-Nicolas-de-Flüe 2
-				Fribourg    1700
-				CH
-
-0C-73-EB   (hex)		U-PASS.CO.,LTD
-400000-4FFFFF     (base 16)		U-PASS.CO.,LTD
-				HANEULMAEUL-RO 
-				GYEONGGI-DO  GOYANG-SI,ILSANDONG-GU  410315
-				KR
-
-48-0B-B2   (hex)		Microprogram Information Co., Ltd
-900000-9FFFFF     (base 16)		Microprogram Information Co., Ltd
-				14F., No.262, Sec. 2, Henan Rd., Xitun Dist.
-				Taichung    407
-				TW
-
-48-0B-B2   (hex)		Hangzhou Freely Communication Co., Ltd.
-400000-4FFFFF     (base 16)		Hangzhou Freely Communication Co., Ltd.
-				No. 90 Wensan, Hangzhou, Zhejiang
-				Hangzhou   Zhejiang  310012
-				CN
-
-48-0B-B2   (hex)		BravoCom（xiamen）TechCo.Ltd
-800000-8FFFFF     (base 16)		BravoCom（xiamen）TechCo.Ltd
-				Room 506, Chengye Building lnnovation park Xiamen Torch Hi-Tech Zone Xiamen fujian P.R.China
-				Xiamen  fujian  361000
-				CN
-
-48-0B-B2   (hex)		SHENZHEN TOPWELL TECHNOLOGY CO..LTD
-C00000-CFFFFF     (base 16)		SHENZHEN TOPWELL TECHNOLOGY CO..LTD
-				5th Floor, Building 10 Changyuan New Material 
-				Port,No.2,Middle Road 1, High Tech Park,  Nanshan District,Shenzhen  518001
-				CN
-
-88-5F-E8   (hex)		Changsha Xiangji-Haidun Technology Co., Ltd
-800000-8FFFFF     (base 16)		Changsha Xiangji-Haidun Technology Co., Ltd
-				NO.5 Dongsan Rd, Changsha Economic & Technical Zone
-				Changsha  HuNan  410100
-				CN
-
-30-1F-9A   (hex)		Smart Component Technologies LTD
-B00000-BFFFFF     (base 16)		Smart Component Technologies LTD
-				Cooper Buildings, Arundel Street
-				Sheffield  South Yorkshire  S1 2NS
-				GB
-
-30-1F-9A   (hex)		CHISON Medical Technologies Co., Ltd.
-200000-2FFFFF     (base 16)		CHISON Medical Technologies Co., Ltd.
-				No.9, Xinhuihuan Road, Xinwu District, Wuxi, Jiangsu, China 214028
-				WUXI  JIANGSU  214028
-				CN
-
-88-5F-E8   (hex)		Shenzhen ORVIBO Technology Co., Ltd
-B00000-BFFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd
-				7F, A7 Zhiyuan, No.1001, Xueyuan AV., Nanshan district, Shenzhen,518055,PRC
-				 Shenzhen  guangdong  518000
-				CN
-
-88-5F-E8   (hex)		Apoidea Technology Co., Ltd.
-100000-1FFFFF     (base 16)		Apoidea Technology Co., Ltd.
-				No. 111, Boyun Road
-				Shanghai    201203
-				CN
-
-F0-41-C8   (hex)		ATN Media Group FZ LLC
-D00000-DFFFFF     (base 16)		ATN Media Group FZ LLC
-				Business Bay-alabrj st Business Towar By Damac.office-807
-				Dubai    25051
-				AE
-
-F0-41-C8   (hex)		Telstra
-A00000-AFFFFF     (base 16)		Telstra
-				231 Elisabeth St
-				SYDNEY  NSW  2000
-				AU
-
-88-A9-A7   (hex)		Shenzhenshi kechuangzhixian technology Co.LTD
-000000-0FFFFF     (base 16)		Shenzhenshi kechuangzhixian technology Co.LTD
-				Room 14G,14th Floor, Langshi Building , keji South Road 12 , High-tech Industrial Park , Nanshan District
-				Shenzhen    518000
-				CN
-
-88-A9-A7   (hex)		Volterman Inc.
-500000-5FFFFF     (base 16)		Volterman Inc.
-				Suite B2, Sunset Lake Road
-				Newark  DE  19702
-				US
-
-88-A9-A7   (hex)		AVLINK INDUSTRIAL CO., LTD
-D00000-DFFFFF     (base 16)		AVLINK INDUSTRIAL CO., LTD
-				7/F, A1 Bldg, 1st Shuichanjingwan Industrial Park, Nanchang Village, Gushu, Bao'an Dist 
-				Shenzhen  Guangdong  518126
-				CN
-
-F0-41-C8   (hex)		DongGuan Siyoto Electronics Co., Ltd       
-100000-1FFFFF     (base 16)		DongGuan Siyoto Electronics Co., Ltd       
-				Hecheng Industrial District, QiaoTou Town
-				DongGuan City  Guangdong  523520
-				CN
-
-F0-41-C8   (hex)		Candelic Limited
-400000-4FFFFF     (base 16)		Candelic Limited
-				Unit 312, 3/F Solo Workshop, 131-132 Cannaught Road West
-				Hong Kong    111111
-				HK
-
-A4-DA-22   (hex)		Shen Zhen City YaKun Electronics Co., Ltd
-D00000-DFFFFF     (base 16)		Shen Zhen City YaKun Electronics Co., Ltd
-				SOUTHERN BUILDING 5388 Shang Bu  Industrial Zone Huaqiang North Road Futian District
-				shen zhen city  Guang Dong Province  518000
-				CN
-
-A4-DA-22   (hex)		Klashwerks Inc.
-B00000-BFFFFF     (base 16)		Klashwerks Inc.
-				441 Maclaren Street, Suite 408
-				Ottawa  ON  K2P2H3
-				CA
-
-A4-DA-22   (hex)		Hydro Electronic Devices, Inc.
-700000-7FFFFF     (base 16)		Hydro Electronic Devices, Inc.
-				2120 Constitution Ave
-				Hartford  WI  53027
-				US
-
-A4-DA-22   (hex)		DURATECH Enterprise,LLC
-300000-3FFFFF     (base 16)		DURATECH Enterprise,LLC
-				NO.1013,184,Gasan digital 2-ro,Geumcheon-gu,Seoul
-				Seoul    08501
-				KR
-
-A4-DA-22   (hex)		LORIOT AG
-400000-4FFFFF     (base 16)		LORIOT AG
-				Zuercherstrasse 68
-				Thalwil  Zürich  8800
-				CH
-
-A4-DA-22   (hex)		T2T System
-100000-1FFFFF     (base 16)		T2T System
-				#316, HYUNDAI Knowledge Industry Center, 70, Dusan-ro
-				Geumcheon-gu  Seoul  08584
-				KR
-
-A4-DA-22   (hex)		Original Products Pvt. Ltd.
-500000-5FFFFF     (base 16)		Original Products Pvt. Ltd.
-				B-19, Shiv Park, School Road, Khanpur 
-				New Delhi  New Delhi  110062
-				IN
-
-DC-E5-33   (hex)		Tintel Hongkong Co.Ltd
-B00000-BFFFFF     (base 16)		Tintel Hongkong Co.Ltd
-				FLAT C,23/F,LUCKY PLAZA,315-321 LOCKHART ROAD,WANCHAI,HONGKONG
-				HONGKONG  GUANG DONG PROVINCE  999077
-				HK
-
-DC-E5-33   (hex)		JB-Lighting Lichtanlagen GmbH
-800000-8FFFFF     (base 16)		JB-Lighting Lichtanlagen GmbH
-				Sallersteig 15
-				89134    89134
-				DE
-
-C4-FF-BC   (hex)		GSM Innovations Pty Ltd
-900000-9FFFFF     (base 16)		GSM Innovations Pty Ltd
-				142-144 Fullarton Road
-				Rose Park  SA  5067
-				AU
-
-DC-E5-33   (hex)		Remko GmbH & Co. KG
-200000-2FFFFF     (base 16)		Remko GmbH & Co. KG
-				Im Seelenkamp 12
-				Lage    32791
-				DE
-
-DC-E5-33   (hex)		Ambi Labs Limited
-100000-1FFFFF     (base 16)		Ambi Labs Limited
-				1903, 19/F, Loon Lee Building, 267-275 Des Voeux Road Central., Sheung Wan, Hong Kong
-				Hong Kong  Hong Kong  00000
-				HK
-
-C4-FF-BC   (hex)		comtime GmbH
-500000-5FFFFF     (base 16)		comtime GmbH
-				Gutenbergring 22
-				Norderstedt    22848
-				US
-
-C4-FF-BC   (hex)		VISATECH C0., LTD.
-100000-1FFFFF     (base 16)		VISATECH C0., LTD.
-				C-312 168, Gasan digital 1-ro
-				 Geumcheon-gu   Seoul  08507
-				KR
-
-1C-21-D1   (hex)		p2-plus inc.
-E00000-EFFFFF     (base 16)		p2-plus inc.
-				12F.-6,No.5,Sec.3,new taipei Blvd., Sinjhuang Dist.,
-				new taipei  taiwan  24250
-				TW
-
-34-29-8F   (hex)		Albert Handtmann Maschinenfabrik GmbH&Co.KG
-C00000-CFFFFF     (base 16)		Albert Handtmann Maschinenfabrik GmbH&Co.KG
-				Hubertus-Liebrecht-Str. 10-12
-				Biberach    88400
-				DE
-
-9C-43-1E   (hex)		HK ELEPHONE Communication Tech Co.,Limited
-D00000-DFFFFF     (base 16)		HK ELEPHONE Communication Tech Co.,Limited
-				Unit 04, 7/F Bright Way Tower No.33 Mong Kok Rd KL
-				Hong Kong     999077
-				HK
-
-28-2C-02   (hex)		Tokin Limited
-A00000-AFFFFF     (base 16)		Tokin Limited
-				Unit 513-4, Block A, Focal Industrial Centre, 21 Man Lok Street, Hung Hom
-				Kowloon    0000
-				HK
-
-28-2C-02   (hex)		LLC MICROTEH
-500000-5FFFFF     (base 16)		LLC MICROTEH
-				pl.5 bldg.2/3 Akademika Anokhina str. 
-				Moscow    119602
-				RU
-
-28-2C-02   (hex)		ThirdReality, Inc
-B00000-BFFFFF     (base 16)		ThirdReality, Inc
-				647 East Longhua Road, Huangpu District
-				Shanghai  Shanghai  200023
-				CN
-
-9C-43-1E   (hex)		Antailiye Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Antailiye Technology Co.,Ltd
-				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen
-				SHEN ZHEN  GUANGDONG  518000
-				CN
-
-F8-B5-68   (hex)		Dongwoo Engineering Co.,Ltd
-300000-3FFFFF     (base 16)		Dongwoo Engineering Co.,Ltd
-				#311, dREC Techno 9-ro, Yuseong-gu
-				Daegeon    34027
-				KR
-
-F8-B5-68   (hex)		LifePrint Products, Inc.
-000000-0FFFFF     (base 16)		LifePrint Products, Inc.
-				4667 Golden Foothill Parkway, Suite 102
-				El Dorado Hills  CA  95762
-				US
-
-F8-B5-68   (hex)		etectRx
-500000-5FFFFF     (base 16)		etectRx
-				107 SW 140th Terr., Ste. 1
-				Newberry  FL  32669
-				US
-
-F8-B5-68   (hex)		Combiwins Technology Co.,Limited
-400000-4FFFFF     (base 16)		Combiwins Technology Co.,Limited
-				2F Sever Star Mansion, West Qixing Road 
-				Xiamen  Fujian  361012
-				CN
-
-28-2C-02   (hex)		SAKATA DENKI Co., Ltd.
-000000-0FFFFF     (base 16)		SAKATA DENKI Co., Ltd.
-				Yagisawa2-17-20
-				NishiTokyo-city  Tokyo  202-0022
-				JP
-
-38-73-EA   (hex)		Annapurna labs
-D00000-DFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-38-73-EA   (hex)		Shenzhen Jixian Technology Co., Ltd.
-E00000-EFFFFF     (base 16)		Shenzhen Jixian Technology Co., Ltd.
-				4F, Building A, Tongfang Information Harbor, No.11, Langshan Road, North Area of High-tech Park, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-40-48-FD   (hex)		Plus One Global Ltd.
-900000-9FFFFF     (base 16)		Plus One Global Ltd.
-				2-8-6,Nishishinbashi
-				Minato-ku  Tokyo  105-0003
-				JP
-
-38-73-EA   (hex)		PingGPS Inc
-700000-7FFFFF     (base 16)		PingGPS Inc
-				19825 North Cove Road, #173
-				CORNELIUS  NC  28031
-				US
-
-38-73-EA   (hex)		SHENZHEN CSE TECHNOLOGY CO., LTD
-A00000-AFFFFF     (base 16)		SHENZHEN CSE TECHNOLOGY CO., LTD
-				2F,3Building,Xinlianhe Industrial Park,Jinxiu Road,Western Industrial Zone, Shajing Town,Baoan,
-				Shenzhen  Guangdong  518000
-				CN
-
-38-73-EA   (hex)		Proch plastic Co., Ltd.
-300000-3FFFFF     (base 16)		Proch plastic Co., Ltd.
-				7F No.189 Xinhu 3rd Rd. Neihu Dist.
-				Taipei city  ---  114
-				TW
-
-38-73-EA   (hex)		LG Electronics
-C00000-CFFFFF     (base 16)		LG Electronics
-				51, Gasan Digital1-ro, Geumcheon-gu
-				Seoul    08592
-				KR
-
-34-D0-B8   (hex)		Captec Ltd
-000000-0FFFFF     (base 16)		Captec Ltd
-				7 Whittle Avenue
-				Fareham  Hampshire  PO15 5SH
-				GB
-
-8C-14-7D   (hex)		Anyware Solutions ApS
-900000-9FFFFF     (base 16)		Anyware Solutions ApS
-				Monrads Alle 9
-				Valby  Sjaelland  2500
-				DK
-
-34-D0-B8   (hex)		Meatest sro
-A00000-AFFFFF     (base 16)		Meatest sro
-				Zelezna 509/3
-				Brno    61900
-				CZ
-
-EC-9F-0D   (hex)		WisIOE
-400000-4FFFFF     (base 16)		WisIOE
-				Room 601, Hongyuan Building, Baoyuan Road, Xixiang Street, Baoan District 
-				Shenzhen  Guangdong  518000
-				CN
-
-AC-1D-DF   (hex)		Elekon AG
-D00000-DFFFFF     (base 16)		Elekon AG
-				Cheerstrasse 16
-				Luzern    6014
-				CH
-
-AC-1D-DF   (hex)		HellaStorm, Inc.
-100000-1FFFFF     (base 16)		HellaStorm, Inc.
-				12655 Edison Drive, Suite 250
-				Alpharetta  GA  30005
-				US
-
-AC-1D-DF   (hex)		WESCO INTEGRATED SUPPLY
-A00000-AFFFFF     (base 16)		WESCO INTEGRATED SUPPLY
-				36 HARBOR PARK DRIVE
-				PORT WASHINGTON  NY  11050
-				US
-
-74-1A-E0   (hex)		FUJIAN TAILI COMMUNICATION TECHNOLOGY CO.,LTD
-500000-5FFFFF     (base 16)		FUJIAN TAILI COMMUNICATION TECHNOLOGY CO.,LTD
-				Cangshan science and technology park, Baihuting,Cangshan District, Fuzhou
-				FUZHOU    350026
-				CN
-
-74-1A-E0   (hex)		NURA HOLDINGS PTY LTD
-200000-2FFFFF     (base 16)		NURA HOLDINGS PTY LTD
-				349 Brunswick Rd
-				Brunswick  VIC  3056
-				AU
-
-74-1A-E0   (hex)		bistos.co.ltd
-C00000-CFFFFF     (base 16)		bistos.co.ltd
-				7floor, worim lions vally 5cha
-				sungnam  kyeunggi-do  13201
-				KR
-
-74-1A-E0   (hex)		Huano International Technology Limited
-000000-0FFFFF     (base 16)		Huano International Technology Limited
-				Room 402, Building A, ChuangXin Technology Plaza(Phase 1),Chegongmiao, Futian District, 
-				Shenzhen    518000
-				CN
-
-74-1A-E0   (hex)		Revl Inc.
-400000-4FFFFF     (base 16)		Revl Inc.
-				325 9th St.
-				San Francisco  CA  94103
-				US
-
-CC-22-37   (hex)		Terma Sp. z o.o.
-100000-1FFFFF     (base 16)		Terma Sp. z o.o.
-				Czaple 100
-				Gdańsk  Pomorskie  80-298
-				PL
-
-2C-27-9E   (hex)		Rutledge Omni Services Pte Ltd
-600000-6FFFFF     (base 16)		Rutledge Omni Services Pte Ltd
-				34 Toh Guan Road East, #01-12/13 Enterprise Hub
-				Singapore  Singapore  608579
-				SG
-
-2C-27-9E   (hex)		Forties Inc.
-B00000-BFFFFF     (base 16)		Forties Inc.
-				5-3-10-1F, Shiba
-				Minato  Tokyo  1080014
-				JP
-
-2C-27-9E   (hex)		Kunyi electronic technology (Shanghai) Co., Ltd.
-200000-2FFFFF     (base 16)		Kunyi electronic technology (Shanghai) Co., Ltd.
-				2F, 42th Building, No.1000 Jinhai Road,Pudong
-				Shanghai   Shanghai   201206
-				CN
-
-2C-27-9E   (hex)		Changzhou WEBO Weighing Device & System CO.,LTD
-000000-0FFFFF     (base 16)		Changzhou WEBO Weighing Device & System CO.,LTD
-				Gaoyang Road No.1
-				Changzhou  Jiangsu  213000
-				CN
-
-18-9B-A5   (hex)		Christ Electronic System GmbH
-C00000-CFFFFF     (base 16)		Christ Electronic System GmbH
-				Alpenstrasse 34
-				Memmingen  Bavaria  87700
-				DE
-
-2C-27-9E   (hex)		Jiangsu JianHu Science & Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		Jiangsu JianHu Science & Technology Co., Ltd.
-				No.95 East Guangdian Road of Yaoguan County, Wujin District 
-				Changzhou  Jiangsu  213011
-				CN
-
-90-4E-91   (hex)		Apollo Video Technology
-100000-1FFFFF     (base 16)		Apollo Video Technology
-				24000 35th Ave SE
-				Bothell  WA  98021
-				US
-
-34-29-8F   (hex)		ISRA Vision AG
-400000-4FFFFF     (base 16)		ISRA Vision AG
-				Industriestraße 14
-				Darmstadt    64297
-				DE
-
-34-00-8A   (hex)		Hibertek International Limited
-A00000-AFFFFF     (base 16)		Hibertek International Limited
-				Rm. 6, 21F., NO.5, Sec.3, New Taipei Blvd., Xinzhuang Dist.
-				New Taipei City    24250
-				TW
-
-34-29-8F   (hex)		Wiesheu GmbH
-900000-9FFFFF     (base 16)		Wiesheu GmbH
-				Daimlerstr. 10
-				Affalterbach    71563
-				DE
-
-34-29-8F   (hex)		Highlite International B.V.
-500000-5FFFFF     (base 16)		Highlite International B.V.
-				Vestastraat 2
-				Kerkrade    6468 EX
-				NL
-
-28-F5-37   (hex)		Honeywell Safety Products USA, Inc
-A00000-AFFFFF     (base 16)		Honeywell Safety Products USA, Inc
-				7828 Waterville Road
-				San Diego  CA  92154
-				US
-
-E8-18-63   (hex)		AVCON Information Technology Co.,Ltd
-200000-2FFFFF     (base 16)		AVCON Information Technology Co.,Ltd
-				Room 2408, No 2 Building, 335# Guoding Road
-				Shanghai  Shanghai  200433
-				CN
-
-34-00-8A   (hex)		Shenzhen Andakai Technologies Co., Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Andakai Technologies Co., Ltd.
-				Unit B, 10/F, Building 2, NO.10 Industial Park, Tianliao Community, Gongming Street, GuangMing District, Shenzhen,China
-				Shenzhen  Guangdong  518107
-				CN
-
-34-00-8A   (hex)		uberGARD Pte. Ltd.
-700000-7FFFFF     (base 16)		uberGARD Pte. Ltd.
-				39 Sungei Kadut Avenue
-				Singapore    729663
-				SG
-
-78-D8-00   (hex)		CL International 
-E00000-EFFFFF     (base 16)		CL International 
-				12th Floor, Woolim Lions Valley 1 Bldg 27, Dunchon-daero 457beongil, Jungwon-gu
-				Seongnam   Kyeonggi-do   462-806
-				KR
-
-78-D8-00   (hex)		Korea Micro Wireless Co.,Ltd.
-D00000-DFFFFF     (base 16)		Korea Micro Wireless Co.,Ltd.
-				#323, 3F, Kyoungin Center, 20, Baekbeom-ro 577beon-gil, Bupyeong-gu
-				Incheon    21449
-				KR
-
-7C-BA-CC   (hex)		Fossil Power Systems Inc
-600000-6FFFFF     (base 16)		Fossil Power Systems Inc
-				10 Mosher Drive
-				Dartmouth  Nova Scotia  B3B1N5
-				CA
-
-7C-BA-CC   (hex)		Izkare
-300000-3FFFFF     (base 16)		Izkare
-				Suite 2812, 800 MinHe Rd
-				Hangzhou  Zhejiang  311200
-				CN
-
-7C-BA-CC   (hex)		Annapurna labs
-A00000-AFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-7C-BA-CC   (hex)		Yongguan Electronic Technology (D.G)LTD
-900000-9FFFFF     (base 16)		Yongguan Electronic Technology (D.G)LTD
-				xinfeng west 3RD
-				Dongguan    523041
-				CN
-
-F8-8A-3C   (hex)		Josh.ai
-700000-7FFFFF     (base 16)		Josh.ai
-				191 University Blvd #188
-				Denver  CO  80206
-				US
-
-4C-65-A8   (hex)		Fuse
-C00000-CFFFFF     (base 16)		Fuse
-				1425 E St.
-				San Diego    92110
-				US
-
-4C-65-A8   (hex)		Beijing Bluehalo Internet Inc.
-100000-1FFFFF     (base 16)		Beijing Bluehalo Internet Inc.
-				901B,Building A of Power Creative,NO.1 Shangdi East Road,Haidian District,
-				Beijing     100085
-				CN
-
-4C-65-A8   (hex)		WELT Corporation
-000000-0FFFFF     (base 16)		WELT Corporation
-				Seocho, Bangbae, 481-5
-				Seoul    06699
-				KR
-
-A0-C5-F2   (hex)		Serious Integrated, Inc.
-A00000-AFFFFF     (base 16)		Serious Integrated, Inc.
-				576 East Germann Road
-				Gilbert  AZ  85296
-				US
-
-A0-C5-F2   (hex)		Oray.com co., LTD.
-B00000-BFFFFF     (base 16)		Oray.com co., LTD.
-				8008Rm, building No.1 GuoDing d. Yangpu District
-				Shanghai  Shanghai  200433
-				CN
-
-4C-65-A8   (hex)		Wuhan MoreQuick Network Technology Co., Ltd.
-700000-7FFFFF     (base 16)		Wuhan MoreQuick Network Technology Co., Ltd.
-				GuangGuDaDao 70#ShiMaoZhongXin C-2205
-				WuHan  HuBei  430019
-				CN
-
-4C-65-A8   (hex)		SHENZHEN LISAIER TRONICS CO.,LTD
-900000-9FFFFF     (base 16)		SHENZHEN LISAIER TRONICS CO.,LTD
-				No.22 xihu industrial park ,xikeng henggang Town Longgang District      
-				 shenzhen   Guang Dong      518115
-				CN
-
-8C-14-7D   (hex)		Shenzhen Meidou Technology Co, Ltd.
-600000-6FFFFF     (base 16)		Shenzhen Meidou Technology Co, Ltd.
-				Room 321,Building 4,Zhongxinggongyeyuan,  Chuangye Road, Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-8C-14-7D   (hex)		Unwired Networks
-500000-5FFFFF     (base 16)		Unwired Networks
-				Gonzagagasse 11/25
-				Vienna    1010
-				AT
-
-F0-23-B9   (hex)		Domotz Ltd
-E00000-EFFFFF     (base 16)		Domotz Ltd
-				334 Ladbroke Grove
-				London    W10 5AD
-				GB
-
-04-71-4B   (hex)		Apparatebau Gauting GmbH
-400000-4FFFFF     (base 16)		Apparatebau Gauting GmbH
-				Friedrichshafener Strasse 5
-				Gilching    82205
-				DE
-
-04-71-4B   (hex)		Energport Inc
-800000-8FFFFF     (base 16)		Energport Inc
-				48660 Kato Road
-				Fremont  CA  94538
-				US
-
-60-D7-E3   (hex)		HuBDIC CO.,LTD
-E00000-EFFFFF     (base 16)		HuBDIC CO.,LTD
-				#301, 53, Jeonpa-ro, Manan-gu, Anyang-si
-				Gyeonggi-do    14084
-				KR
-
-04-71-4B   (hex)		Observables, Inc.
-A00000-AFFFFF     (base 16)		Observables, Inc.
-				117 N. MILPAS ST
-				SANTA BARBARA  CA  93103
-				US
-
-F0-23-B9   (hex)		Shenzhen Lachesis Mhealth Co., Ltd.
-C00000-CFFFFF     (base 16)		Shenzhen Lachesis Mhealth Co., Ltd.
-				Bldg. C, No.43 Yanshan Rd, Nanshan District
-				Shenzhen  GuangDong  518067
-				CN
-
-60-D7-E3   (hex)		Nextivity
-B00000-BFFFFF     (base 16)		Nextivity
-				16550 West Bernardo Road, Bldg 5, Suite 550
-				San Diego  CA  92127
-				US
-
-60-D7-E3   (hex)		Zhejiang Send Intelligent Technology,Ltd
-C00000-CFFFFF     (base 16)		Zhejiang Send Intelligent Technology,Ltd
-				6-7F,E Building,Tiantang Software Park,Xidoumen Road,Xihu District
-				Hangzhou  Zhejiang  310012
-				CN
-
-60-D7-E3   (hex)		HindlePower, Inc
-800000-8FFFFF     (base 16)		HindlePower, Inc
-				1075 Saint John St
-				Easton  PA  18042
-				US
-
-60-D7-E3   (hex)		Quantronix, Inc.
-D00000-DFFFFF     (base 16)		Quantronix, Inc.
-				380 S. 200 W.
-				Farmington  UT  84025
-				US
-
-60-D7-E3   (hex)		Hemisphere GNSS
-400000-4FFFFF     (base 16)		Hemisphere GNSS
-				8515 E. Anderson Dr.
-				Scottsdale  AZ  85255
-				US
-
-08-ED-02   (hex)		Savox Communications 
-900000-9FFFFF     (base 16)		Savox Communications 
-				Laitaatsillantie 3
-				Savonlinna    57170
-				FI
-
-08-ED-02   (hex)		Szok Energy and Communication Co., Ltd.
-B00000-BFFFFF     (base 16)		Szok Energy and Communication Co., Ltd.
-				Rm. 1, 17F., No.104, Sec. 1, Xintai 5th Rd., Xizhi Dist.
-				New Taipei City    22102
-				TW
-
-08-ED-02   (hex)		Guard RFID Solutions
-C00000-CFFFFF     (base 16)		Guard RFID Solutions
-				#140-766 Cliveden Place
-				Delta  BC  V3M6C7
-				CA
-
-98-AA-FC   (hex)		RPE RADICO
-400000-4FFFFF     (base 16)		RPE RADICO
-				Marksa, 14
-				Obninsk  Kaluga reg.  249035
-				RU
-
-98-AA-FC   (hex)		Nexus Electrical(Jiaxing) Limited
-300000-3FFFFF     (base 16)		Nexus Electrical(Jiaxing) Limited
-				No 1438,Jiachuang Road,Xiuzhou Industrial Park,
-				Jiaxing  Zhejiang  314031
-				CN
-
-98-AA-FC   (hex)		Beijing Tiandi-Marco Electro-Hydraulic Control System Company Ltd.
-800000-8FFFFF     (base 16)		Beijing Tiandi-Marco Electro-Hydraulic Control System Company Ltd.
-				No.5 Qing Nian Gou Road, Hepingli
-				Beijing    100013
-				CN
-
-98-AA-FC   (hex)		Mekotronics Co., Ltd
-600000-6FFFFF     (base 16)		Mekotronics Co., Ltd
-				Rm 19C Lockhart Ctr 301-307, Lockhart Rd Wan Chai
-				Hong Kong    999077
-				HK
-
-98-AA-FC   (hex)		MCS Micronic Computer Systeme GmbH
-D00000-DFFFFF     (base 16)		MCS Micronic Computer Systeme GmbH
-				Geneststr. 5
-				Berlin    10829
-				DE
-
-14-4F-D7   (hex)		Arkus-ST Ltd
-B00000-BFFFFF     (base 16)		Arkus-ST Ltd
-				Generala Antonova 3a
-				Moscow    117342
-				RU
-
-14-4F-D7   (hex)		i-SENS, Inc.
-600000-6FFFFF     (base 16)		i-SENS, Inc.
-				43, Banpo-daero 28-gil, Seocho-gu
-				Seoul    06646
-				KR
-
-1C-A0-D3   (hex)		Cirque Audio Technology Co., Ltd
-900000-9FFFFF     (base 16)		Cirque Audio Technology Co., Ltd
-				No. 2, Road BeiYiHeng, HuangJiaBao Industrial Park, ShiPai Town,
-				DongGuan  GuangDong  523347
-				CN
-
-40-F3-85   (hex)		PALAZZETTI LELIO SPA
-700000-7FFFFF     (base 16)		PALAZZETTI LELIO SPA
-				VIA ROVEREDO 103
-				PORCIA  PORDENONE  33080
-				IT
-
-A4-11-63   (hex)		accesso Technology Group
-900000-9FFFFF     (base 16)		accesso Technology Group
-				Unit 5, The Pavillions, Ruscombe Business Park
-				Twyford  Wilts  RG10 9NN
-				GB
-
-1C-A0-D3   (hex)		Guang Dong He Zheng Network Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		Guang Dong He Zheng Network Technology Co.,Ltd
-				N0.3,Sanjiang industrial zone,Hengli Town
-				Dongguan  Guangdong  523460
-				CN
-
-8C-C8-F4   (hex)		SHENZHEN D-light Technolgy Limited
-600000-6FFFFF     (base 16)		SHENZHEN D-light Technolgy Limited
-				2302F, Block B, Wisdom Building ,Qiao xiang Road,Shahe Street, Nanshan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-8C-C8-F4   (hex)		Trilux Group Management GmbH
-A00000-AFFFFF     (base 16)		Trilux Group Management GmbH
-				Heidestrasse
-				Arnsberg    59759
-				DE
-
-40-F3-85   (hex)		IntelliDesign Pty Ltd
-300000-3FFFFF     (base 16)		IntelliDesign Pty Ltd
-				99 Bluestone Circuit
-				Seventeen Mile Rocks  Qld  4073
-				AU
-
-40-F3-85   (hex)		Embedded IQ
-400000-4FFFFF     (base 16)		Embedded IQ
-				Block C, HHK House; 22 Ethel Avenue
-				Johannesburg  Gauteng  2195
-				ZA
-
-8C-C8-F4   (hex)		TOHO DENKI IND.CO.,LTD
-300000-3FFFFF     (base 16)		TOHO DENKI IND.CO.,LTD
-				1-6-30 Meguro
-				Meguro-ku  Tokyo  153-0063
-				JP
-
-50-A4-D0   (hex)		XinLian'AnBao（Beijing）Technology Co.，LTD.
-800000-8FFFFF     (base 16)		XinLian'AnBao（Beijing）Technology Co.，LTD.
-				（Room 501,Building 10, Area 2, Headquarters Base）NO.188,South 4th Ring West Road, Fengtai District
-				Beijing  Beijing  100070
-				CN
-
-8C-C8-F4   (hex)		Lanhomex Technology(Shen Zhen)Co.,Ltd. 
-100000-1FFFFF     (base 16)		Lanhomex Technology(Shen Zhen)Co.,Ltd. 
-				Room 409, Building 29,Zhi Heng Industrial Part, Guankou 2nd  Road, Nanshan District
-				SHENZHEN    518000
-				CN
-
-8C-C8-F4   (hex)		Swift Navigation Inc
-900000-9FFFFF     (base 16)		Swift Navigation Inc
-				1543 Mission Street
-				San Francisco  CA  94103
-				US
-
-50-A4-D0   (hex)		Shanghai Pujiang Smart Card Systems Co., Ltd.
-700000-7FFFFF     (base 16)		Shanghai Pujiang Smart Card Systems Co., Ltd.
-				No.100, Lane 7488, Hutai Road
-				Shanghai    86-201809
-				CN
-
-8C-C8-F4   (hex)		Guardtec,Inc
-000000-0FFFFF     (base 16)		Guardtec,Inc
-				Hanshin IT tower #1203 Digital-ro 272 GUROGU
-				SEOUL    08389
-				KR
-
-50-A4-D0   (hex)		OEM PRODUCTION INC.
-900000-9FFFFF     (base 16)		OEM PRODUCTION INC.
-				1461-3 San Mateo Ave.
-				South San Francisco  CA  94080
-				US
-
-34-04-9E   (hex)		Eginity, Inc.
-B00000-BFFFFF     (base 16)		Eginity, Inc.
-				37 N Orange Ave STE 770
-				Orlando    32801
-				US
-
-34-04-9E   (hex)		Eclipse Information Technologies
-800000-8FFFFF     (base 16)		Eclipse Information Technologies
-				Gulsuyu Mah. Fevzi Cakmak Cad Lefke Sk 16/6
-				Istanbul  Turkey  34848
-				TR
-
-50-A4-D0   (hex)		TREXOM S.r.l.
-500000-5FFFFF     (base 16)		TREXOM S.r.l.
-				viale dell'Unione Europea, 19
-				TARCENTO  Udine  33017
-				IT
-
-40-ED-98   (hex)		Siebert Industrieelektronik GmbH
-B00000-BFFFFF     (base 16)		Siebert Industrieelektronik GmbH
-				Siebertstrasse 2
-				Eppelborn    66571
-				DE
-
-40-ED-98   (hex)		Vaisala Oyj
-700000-7FFFFF     (base 16)		Vaisala Oyj
-				Vanha Nurmijarventie 21
-				VANTAA    Fin-01670
-				FI
-
-34-04-9E   (hex)		uikismart
-D00000-DFFFFF     (base 16)		uikismart
-				Nanshan
-				Shenzhen  Guangdong  518061
-				CN
-
-40-ED-98   (hex)		Shanghai Broadwan Communications Co.,Ltd
-600000-6FFFFF     (base 16)		Shanghai Broadwan Communications Co.,Ltd
-				Building G, No.1015, Caobao Rd
-				Shanghai  Shanghai  200233
-				CN
-
-40-ED-98   (hex)		Cape
-500000-5FFFFF     (base 16)		Cape
-				1040 Mariposa St
-				San Francisco  CA  94107
-				US
-
-40-ED-98   (hex)		Tsinghua Tongfang Co., LTD
-000000-0FFFFF     (base 16)		Tsinghua Tongfang Co., LTD
-				Wangzhuang Road No.1, Haidian District, Beijing, Tsinghua Tongfang Technology Plaza. D 21st Floor
-				Beijing  Beijing  100083
-				CN
-
-A4-58-0F   (hex)		EYE IO, LLC
-D00000-DFFFFF     (base 16)		EYE IO, LLC
-				2000 University Ave. Suite 610
-				Palo Alto  CA  94303
-				US
-
-A4-58-0F   (hex)		Astro, Inc
-600000-6FFFFF     (base 16)		Astro, Inc
-				450 W. 33rd St
-				New York  NY  10001
-				US
-
-A4-58-0F   (hex)		GUANGZHOU OPTICAL BRIDGE COMMUNICATION EQUIPMENT CO.,LTD.
-A00000-AFFFFF     (base 16)		GUANGZHOU OPTICAL BRIDGE COMMUNICATION EQUIPMENT CO.,LTD.
-				room b201,NO.263,middle of zhougshan avenue,tianhe
-				guangzhou    510660
-				CN
-
-50-0B-91   (hex)		Panasonic Enterprise Solutions Company
-800000-8FFFFF     (base 16)		Panasonic Enterprise Solutions Company
-				6144 N Panasonic Way
-				Denver  CO  80249
-				US
-
-24-4E-7B   (hex)		Leshi Internet Information & Technology (Beijing) Corp.
-400000-4FFFFF     (base 16)		Leshi Internet Information & Technology (Beijing) Corp.
-				Fl 16, Letv Building, 105 Yaojiayuan Road, Chaoyang District, Beijing,China
-				Beijing    100025
-				CN
-
-24-4E-7B   (hex)		WithWin Technology ShenZhen CO.,LTD
-E00000-EFFFFF     (base 16)		WithWin Technology ShenZhen CO.,LTD
-				29F, East Tower, NanShan Digital Technology & Cultural Industry Park, ShenNan Throughfare10128#
-				ShenZhen  China  518000
-				CN
-
-24-4E-7B   (hex)		Jiangsu Xuanbo Electronic Technologies Co.,Ltd
-500000-5FFFFF     (base 16)		Jiangsu Xuanbo Electronic Technologies Co.,Ltd
-				Nearby the Bus stop of Hanzi Industrial Park,Danjin Road,Hengtang Town
-				Danyang  Jiangsu  212300
-				CN
-
-50-0B-91   (hex)		Shenzhen Xinfa Electronic Co.,ltd
-700000-7FFFFF     (base 16)		Shenzhen Xinfa Electronic Co.,ltd
-				No 57, Baoli Road, Buji Town
-				Longgang District  Shenzhen, Guangdong   518112
-				CN
-
-7C-CB-E2   (hex)		mirakonta s.l.
-C00000-CFFFFF     (base 16)		mirakonta s.l.
-				calle zuatzu nº1 (edif ulia) pabellon 7 (parque emp. zuatzu)
-				san sebastian  guipuzcoa  20018
-				ES
-
-7C-CB-E2   (hex)		Polarteknik Oy
-800000-8FFFFF     (base 16)		Polarteknik Oy
-				Klaavolantie 1
-				Huittinen    32700
-				FI
-
-24-4E-7B   (hex)		RCC TIME CO .,LIMITED
-200000-2FFFFF     (base 16)		RCC TIME CO .,LIMITED
-				6/F,C2Block,Guang Hao Feng Industrial Park,Hang Cheng Road,Gushu
-				Hong Kong    518000
-				HK
-
-48-65-EE   (hex)		Mission Microwave Technologies, Inc
-400000-4FFFFF     (base 16)		Mission Microwave Technologies, Inc
-				10012 Norwalk Blvd, Suite 150
-				Santa Fe Springs  CA  90670
-				US
-
-48-65-EE   (hex)		Venture Research Inc.
-700000-7FFFFF     (base 16)		Venture Research Inc.
-				3001 Summit Ave
-				Plano  TX  75074
-				US
-
-1C-C0-E1   (hex)		LX Corporation Pty Ltd
-800000-8FFFFF     (base 16)		LX Corporation Pty Ltd
-				Suite 101, Level 1, National Innovation Centre Building, 4 Cornwallis Street
-				Eveleigh  New South Wales  2015
-				AU
-
-4C-E1-73   (hex)		outpaceIO
-300000-3FFFFF     (base 16)		outpaceIO
-				44 rue Armand Carrel
-				Montreuil    93100
-				FR
-
-4C-E1-73   (hex)		Plus One Japan Limited
-E00000-EFFFFF     (base 16)		Plus One Japan Limited
-				2-8-6,Nishishinbashi
-				Minato-ku  Tokyo  105-0003
-				JP
-
-1C-C0-E1   (hex)		Shenzhen Highsharp Electronics Ltd.
-000000-0FFFFF     (base 16)		Shenzhen Highsharp Electronics Ltd.
-				A8 Music Tower 2007-08, High-tech Park
-				Shenzhen  Guangdong  518000
-				CN
-
-4C-E1-73   (hex)		REMONDE NETWORK 
-C00000-CFFFFF     (base 16)		REMONDE NETWORK 
-				Room 504 Building A, 3 Juquan Road, Science Town
-				Guangzhou  Guangdong  510170
-				CN
-
-0C-EF-AF   (hex)		Kenmore
-000000-0FFFFF     (base 16)		Kenmore
-				3333 Beverly Rd.
-				Hoffman Estates  IL  60179
-				US
-
-38-3A-21   (hex)		Shenzhen HS Fiber Communication Equipment CO., LTD
-200000-2FFFFF     (base 16)		Shenzhen HS Fiber Communication Equipment CO., LTD
-				6F, Bld#A, Dezhong Industrial Park, Yangmei Village, Bantian Town, Longgang District
-				Shenzhen  Guangdong  518129
-				CN
-
-AC-64-DD   (hex)		8Cups
-400000-4FFFFF     (base 16)		8Cups
-				29, Gonghang-daero 61-gil, Gangseo-gu
-				Seoul    07563
-				KR
-
-AC-64-DD   (hex)		JSC InfoTeCS
-100000-1FFFFF     (base 16)		JSC InfoTeCS
-				Staryy Petrovsko-Razumovsky proyezd, 1/23, bld.1
-				Moscow    127287
-				RU
-
-AC-64-DD   (hex)		Groupe Citypassenger Inc
-B00000-BFFFFF     (base 16)		Groupe Citypassenger Inc
-				1117 sainte catherine ouest
-				Montreal  Quebec  H3B1H9
-				CA
-
-38-3A-21   (hex)		Colooc AB
-D00000-DFFFFF     (base 16)		Colooc AB
-				Nåsvägen 9
-				Bromma  Sverige  16775
-				SE
-
-38-3A-21   (hex)		Shenzhen Smart-core Technology co., Ltd.
-600000-6FFFFF     (base 16)		Shenzhen Smart-core Technology co., Ltd.
-				16/F., Finance & Technology Building, No. 11 Keyuan Road, Nanshan Dist.
-				Shenzhen  Guangdong  518057
-				CN
-
-F8-1D-78   (hex)		Digital Imaging Technology
-400000-4FFFFF     (base 16)		Digital Imaging Technology
-				2275 Research Blvd Suite 500
-				Rockville  MD  20850
-				US
-
-F8-1D-78   (hex)		SHANGHAI SUN TELECOMMUNICATION CO., LTD.
-300000-3FFFFF     (base 16)		SHANGHAI SUN TELECOMMUNICATION CO., LTD.
-				Building No.145, Lane 666 Xianing Road, Jinshan Industrial Zone
-				Shanghai  Shanghai  201506
-				CN
-
-F8-1D-78   (hex)		Tofino
-D00000-DFFFFF     (base 16)		Tofino
-				255 Fourier Avenue
-				Fremont    94539
-				US
-
-F8-1D-78   (hex)		AVPro Global Holdings LLC
-A00000-AFFFFF     (base 16)		AVPro Global Holdings LLC
-				3518 N Casco Ave
-				Sioux Falls  SD  57104
-				US
-
-38-3A-21   (hex)		Dongguan Innovation Technology Co Ltd
-400000-4FFFFF     (base 16)		Dongguan Innovation Technology Co Ltd
-				Building B, No.3 Desheng Road, Longbeiling, Tangxia 
-				Dongguan City  Guangdong Province  523715
-				CN
-
-70-F8-E7   (hex)		Fixstars Corporation
-C00000-CFFFFF     (base 16)		Fixstars Corporation
-				1-11-1 Ohsaki
-				Shinagawa-ku  TOKYO  141-0032
-				JP
-
-70-F8-E7   (hex)		VOXX International
-200000-2FFFFF     (base 16)		VOXX International
-				180 Marcus Blvd.
-				Hauppauge  NY  11788
-				US
-
-84-E0-F4   (hex)		Scale-Tec Ltd.
-E00000-EFFFFF     (base 16)		Scale-Tec Ltd.
-				16027 Hwy 64
-				Anamosa  IA  52205
-				US
-
-84-E0-F4   (hex)		Hangzhou Uni-Ubi Co.,Ltd.
-200000-2FFFFF     (base 16)		Hangzhou Uni-Ubi Co.,Ltd.
-				Room 605, Building No.5, HaiChuang Park, No.998, Wenyi Road(West), YuHang District
-				HangZhou  ZheJiang  311121
-				CN
-
-C0-D3-91   (hex)		xxter bv
-900000-9FFFFF     (base 16)		xxter bv
-				Elandsgracht 73
-				Amsterdam    1016 TR
-				NL
-
-58-E8-76   (hex)		Xiamen Cacamle Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Xiamen Cacamle Technology Co.,Ltd.
-				Room 1501,15th floor,Building C,DaTang YOHO Park,Huli district
-				Xiamen  Fujian  361000
-				CN
-
-58-E8-76   (hex)		Broad Air Technology Co., LTD.
-500000-5FFFFF     (base 16)		Broad Air Technology Co., LTD.
-				Broadtown
-				Changsha  Hunan  410126
-				CN
-
-C0-D3-91   (hex)		ALNETz Co.,LTD
-700000-7FFFFF     (base 16)		ALNETz Co.,LTD
-				1-3 Honcho,Naka-ku
-				Yokohama  Kanagawa  231-0005
-				JP
-
-58-E8-76   (hex)		Annapurna labs
-B00000-BFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-58-E8-76   (hex)		McWong International Inc
-300000-3FFFFF     (base 16)		McWong International Inc
-				1921 Arena Blvd
-				Sacramento  CA  95834
-				US
-
-F0-AC-D7   (hex)		Intenta GmbH
-100000-1FFFFF     (base 16)		Intenta GmbH
-				Annabergerstraße 240
-				Chemnitz  Sachsen  09125
-				DE
-
-F0-AC-D7   (hex)		QUANTUM POWER SYSTEMS
-200000-2FFFFF     (base 16)		QUANTUM POWER SYSTEMS
-				B11. 3RD CROSS. ITI IND. ESTATE. MAHADEVAPURA
-				BANGALORE  KARNATAKA  560048
-				IN
-
-F0-AC-D7   (hex)		Med-Pat/Inn-Phone
-300000-3FFFFF     (base 16)		Med-Pat/Inn-Phone
-				31 Riordan Place
-				Shrewsbury  NJ  07702
-				US
-
-F0-AC-D7   (hex)		 Guilin glsun Science and Tech Co.,LTD
-000000-0FFFFF     (base 16)		 Guilin glsun Science and Tech Co.,LTD
-				Block D-08, National IT Industry Park, Chaoyang Rd
-				Guilin  Guangxi  541000
-				CN
-
-28-36-38   (hex)		SCA Hygiene Products AB
-E00000-EFFFFF     (base 16)		SCA Hygiene Products AB
-				Mölndals bro 2
-				405 03 Göteborg    -
-				SE
-
-28-36-38   (hex)		ShangHai Canall Information Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		ShangHai Canall Information Technology Co.,Ltd
-				11F,TongLian Building,1565 Jiaotong Rd.,ShangHai 200065,P.R.C.
-				ShangHai  ShangHai  200065
-				CN
-
-28-36-38   (hex)		Havells India Limited
-800000-8FFFFF     (base 16)		Havells India Limited
-				Head Office, Havells India Ltd QRG Towers, 2D, Sector 126
-				Noida  UP  201304
-				IN
-
-28-36-38   (hex)		Innovative Technology Ltd
-700000-7FFFFF     (base 16)		Innovative Technology Ltd
-				Innovative Business Park, Derker Street
-				Oldham    OL1 4EQ
-				GB
-
-8C-19-2D   (hex)		TeleAlarm SA
-A00000-AFFFFF     (base 16)		TeleAlarm SA
-				Rue du Pont 23
-				 La Chaux-de-Fonds    2300
-				CH
-
-38-B8-EB   (hex)		ExaScaler Inc.
-B00000-BFFFFF     (base 16)		ExaScaler Inc.
-				Kimura Bldg. 5F, Kanda Ogawamachi 2-1
-				Chiyoda-ku  Tokyo  101-0052
-				JP
-
-8C-19-2D   (hex)		Shenzhen Huanuo Internet Technology Co.,Ltd
-100000-1FFFFF     (base 16)		Shenzhen Huanuo Internet Technology Co.,Ltd
-				Room 10G, Tower 4C, Software Industry Base, Nanshan District, ShenZhen, China, 518000.
-				Shenzhen    518000
-				CN
-
-D0-D9-4F   (hex)		Perfant Technology Co., Ltd
-000000-0FFFFF     (base 16)		Perfant Technology Co., Ltd
-				Guo Ren Tong Xin B317,Ke Ji Zhong San Lu,Nanshan,Shenzhen,Guangdong,China
-				Shenzhen    518000
-				CN
-
-D0-D9-4F   (hex)		Apption Labs Limited
-800000-8FFFFF     (base 16)		Apption Labs Limited
-				7-8 Westbridge Close
-				Leicester    LE3 5LW
-				GB
-
-D0-D9-4F   (hex)		Optigo Networks
-500000-5FFFFF     (base 16)		Optigo Networks
-				#320 – 887 Great Northern Way
-				Vancouver  BC  V5T 4T5
-				CA
-
-D0-D9-4F   (hex)		Beijing Yiwangxuntong Technology
-300000-3FFFFF     (base 16)		Beijing Yiwangxuntong Technology
-				Room 1605, Unit 2, Building No.1, ShangAoShiJi Center, XiSanQi
-				Beijing  Select State  100096
-				CN
-
-D0-D9-4F   (hex)		peiker CEE
-400000-4FFFFF     (base 16)		peiker CEE
-				Gartenstrasse 25
-				Bad Homburg    61352
-				DE
-
-CC-D3-1E   (hex)		Haishu Technology LIMITED
-A00000-AFFFFF     (base 16)		Haishu Technology LIMITED
-				Jiulong Midun street No.89
-				Hongkong    999077
-				HK
-
-C4-7C-8D   (hex)		HHCC Plant Technology Co.,Ltd.
-600000-6FFFFF     (base 16)		HHCC Plant Technology Co.,Ltd.
-				Floor 12,A build ,Shuguang Plaza, Jingshun road, Chaoyang district
-				Beijing  Beijing  100028
-				CN
-
-CC-D3-1E   (hex)		Elk Products
-B00000-BFFFFF     (base 16)		Elk Products
-				3266 Highway 70 West
-				Hildebran  NC  28637
-				US
-
-CC-D3-1E   (hex)		BBPOS International Limited
-600000-6FFFFF     (base 16)		BBPOS International Limited
-				Suite 1602, Tower 2, Nina Tower, 8 Yeung Uk Road, Tsuen Wan, NT
-				Hong Kong  China  00000
-				HK
-
-68-91-D0   (hex)		Altis Technology 
-B00000-BFFFFF     (base 16)		Altis Technology 
-				711 Lu Plaza, 2 Wing Yip Street, Kwun Tong
-				Hong Kong    0000
-				HK
-
-C4-7C-8D   (hex)		Awiselink Co., Ltd.
-700000-7FFFFF     (base 16)		Awiselink Co., Ltd.
-				7F., No.98, Minquan Rd., Xindian Dist.
-				New Taipei City     23141
-				TW
-
-C4-7C-8D   (hex)		INOTEC Sicherheitstechnik GmbH
-C00000-CFFFFF     (base 16)		INOTEC Sicherheitstechnik GmbH
-				Am Buschgarten 17
-				Ense  NRW  59469
-				DE
-
-68-91-D0   (hex)		WiseCube
-A00000-AFFFFF     (base 16)		WiseCube
-				14F IT Castle-2, 137 Gasan Digital 1-ro, Geumcheon-gu
-				Seoul    08506
-				KR
-
-C4-7C-8D   (hex)		Airbus DS - SLC
-900000-9FFFFF     (base 16)		Airbus DS - SLC
-				1, Bd Jean Moulin - Metapole
-				ELANCOURT   Cedex    78996
-				FR
-
-C4-7C-8D   (hex)		PASCAL Co., Ltd.
-500000-5FFFFF     (base 16)		PASCAL Co., Ltd.
-				1-8-31, Honjo-Nishi
-				Higashiosaka  Osaka-hu  5780965
-				JP
-
-68-91-D0   (hex)		Omniimpex GmbH
-700000-7FFFFF     (base 16)		Omniimpex GmbH
-				Waldhof 5
-				Zug  Zug  6300
-				CH
-
-E0-B6-F5   (hex)		Agora
-400000-4FFFFF     (base 16)		Agora
-				16, rue Alfred Nobel
-				POITIERS  Poitou-Charentes  86000
-				FR
-
-E0-B6-F5   (hex)		Folksam AB
-A00000-AFFFFF     (base 16)		Folksam AB
-				Bohusgatan 14
-				Stockholm    10660
-				SE
-
-E0-B6-F5   (hex)		ITEL MOBILE LIMITED
-D00000-DFFFFF     (base 16)		ITEL MOBILE LIMITED
-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
-				Hong Kong  KOWLOON  999077
-				HK
-
-50-FF-99   (hex)		Goetting KG
-C00000-CFFFFF     (base 16)		Goetting KG
-				Celler Str. 5
-				Lehrte  Select Your State or Province  31275
-				DE
-
-50-FF-99   (hex)		Shenzhen Haipengxin Electronic Co., Ltd.
-D00000-DFFFFF     (base 16)		Shenzhen Haipengxin Electronic Co., Ltd.
-				Block C3,Mingzhuo Xingye Technology Park,Guangming Avenue
-				Shenzhen  Guangdong  518107
-				CN
-
-50-FF-99   (hex)		Sichuan Dowlab Electronics Technology Co. Ltd
-B00000-BFFFFF     (base 16)		Sichuan Dowlab Electronics Technology Co. Ltd
-				NO.198, Wenjia Street, Qingyang District
-				Chengdu  Sichuan  610091
-				CN
-
-98-6D-35   (hex)		Shenzhen cositea electronics technology co.,LTD
-100000-1FFFFF     (base 16)		Shenzhen cositea electronics technology co.,LTD
-				 Nanshan District  Xili academy Avenue Tong Long Industrial A District 7 Building 3 floor
-				shenzhen  guandong  518000
-				CN
-
-7C-47-7C   (hex)		EyeLock LLC
-300000-3FFFFF     (base 16)		EyeLock LLC
-				355 Lexington Ave., 12th Floor
-				New York  NY  10017
-				US
-
-98-6D-35   (hex)		Beijing 3CAVI Tech Co.,Ltd
-800000-8FFFFF     (base 16)		Beijing 3CAVI Tech Co.,Ltd
-				Unit 203,Block D Keshi Building, Shangdi Xinxi Road, Haidian District
-				Beijing    100085
-				CN
-
-7C-47-7C   (hex)		Annapurna labs
-C00000-CFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-5C-F2-86   (hex)		VPInstruments
-600000-6FFFFF     (base 16)		VPInstruments
-				Buitenwatersloot 335
-				Delft    2614GS
-				NL
-
-5C-F2-86   (hex)		Shanghai Notion Information Technology CO.,LTD.
-200000-2FFFFF     (base 16)		Shanghai Notion Information Technology CO.,LTD.
-				Room 201,Building 3,NO 289,Bisheng Rd,Pudong district,Shanghai,China
-				Shanghai  Shanghai  201203
-				CN
-
-5C-F2-86   (hex)		Sunpet Industries Limited
-C00000-CFFFFF     (base 16)		Sunpet Industries Limited
-				Unit 618, Lakeside 2, Hong Kong Science Park
-				Shatin  N.T.  -
-				HK
-
-5C-F2-86   (hex)		beijing your wonderful control system technology co.,ltd
-300000-3FFFFF     (base 16)		beijing your wonderful control system technology co.,ltd
-				NO.11 Fengxian Medium Road,Yongfeng Industry Base,Haidian District,Beijing
-				beijing  beijing  100094
-				CN
-
-5C-F2-86   (hex)		EUROIMMUN Medizinische Labordiagnostika AG
-500000-5FFFFF     (base 16)		EUROIMMUN Medizinische Labordiagnostika AG
-				Seekamp 31
-				Lübeck  Schleswig-Holstein  23560
-				DE
-
-5C-F2-86   (hex)		BrightSky, LLC
-D00000-DFFFFF     (base 16)		BrightSky, LLC
-				5121 Castello Drive
-				Naples  null  34103-1927
-				US
-
-38-FD-FE   (hex)		iSmart electronic technology co.,LTD
-E00000-EFFFFF     (base 16)		iSmart electronic technology co.,LTD
-				Room2101,DeWei Building,4 YunShan West Road,JiangBei,
-				HuiZhou  GuangDong  516000
-				CN
-
-5C-F2-86   (hex)		SHENZHEN HIVT TECHNOLOGY CO.,LTD
-800000-8FFFFF     (base 16)		SHENZHEN HIVT TECHNOLOGY CO.,LTD
-				7 F,3rd Zone,B Block,Mingyou purchasing Center,Baoyuan RD,Xixiang,Bao'an District,Shenzhen,China
-				Shenzhen  Guangdong  518100
-				CN
-
-38-FD-FE   (hex)		Rademacher Geraete-Elektronik GmbH
-700000-7FFFFF     (base 16)		Rademacher Geraete-Elektronik GmbH
-				Buschkamp 7
-				Rhede  NRW  46414
-				DE
-
-38-FD-FE   (hex)		Smart Solution Technology, Inc
-200000-2FFFFF     (base 16)		Smart Solution Technology, Inc
-				1-15 Kagurazaka,Shinjyukuku,
-				Tokyo    162-0825
-				JP
-
-38-B8-EB   (hex)		Wyres SAS
-E00000-EFFFFF     (base 16)		Wyres SAS
-				24 rue henri barbusse
-				Echirolles  Isere  38130
-				FR
-
-78-CA-83   (hex)		Excelocity Inc.
-100000-1FFFFF     (base 16)		Excelocity Inc.
-				200 Colonnade Road Suite #8
-				Ottawa  Ontario  K2E 7M1
-				CA
-
-78-CA-83   (hex)		Louroe Electronics
-900000-9FFFFF     (base 16)		Louroe Electronics
-				6955 Valjean Avenue
-				Van Nuys  CA  91406
-				US
-
-38-B8-EB   (hex)		Dojo-Labs Ltd
-500000-5FFFFF     (base 16)		Dojo-Labs Ltd
-				Hatidhar 17
-				Raanana    346651
-				IL
-
-78-CA-83   (hex)		DAINCUBE
-000000-0FFFFF     (base 16)		DAINCUBE
-				#401-701, 655, Pyeongcheon-ro
-				Bucheon-si    14502
-				KR
-
-1C-88-79   (hex)		Airsmart System Co.,Ltd
-200000-2FFFFF     (base 16)		Airsmart System Co.,Ltd
-				 Unit416 , Tudao Intelligent Technology Building, No.9 KeJi Road ,Science and Technology Park, Nanshan District , 
-				Shenzhen  Guangdong  518000
-				CN
-
-1C-88-79   (hex)		Eolos IT Corp
-600000-6FFFFF     (base 16)		Eolos IT Corp
-				 3663 SW 8 th Street, STE 210 
-				Miami  FL  33135
-				US
-
-1C-88-79   (hex)		Accriva
-C00000-CFFFFF     (base 16)		Accriva
-				6260 Sequence Dr
-				San Diego  CA  92121
-				US
-
-1C-87-79   (hex)		BEIDIAN  GROUP
-500000-5FFFFF     (base 16)		BEIDIAN  GROUP
-				A2 501 Jingang Road Pudong Jinqiao Shanghai
-				Shanghai  Shanghai  200126
-				CN
-
-1C-87-79   (hex)		Shenzhen Innovaconn Systems Co.,Ltd
-D00000-DFFFFF     (base 16)		Shenzhen Innovaconn Systems Co.,Ltd
-				1F East of Building D,Science and Technology Park,NO.2 Kefeng Road,
-				Shenzhen  Guangdong  518000
-				CN
-
-1C-87-79   (hex)		AllThingsTalk
-C00000-CFFFFF     (base 16)		AllThingsTalk
-				Ajuinlei 1
-				Gent    9000
-				BE
-
-1C-87-76   (hex)		EBS Sp. z o.o.
-100000-1FFFFF     (base 16)		EBS Sp. z o.o.
-				ul. Bronisława Czecha 59
-				Warszawa  Mazowieckie  04-555
-				PL
-
-1C-87-79   (hex)		Shenzhen Shouxin Tongda Technology Co.,Ltd
-600000-6FFFFF     (base 16)		Shenzhen Shouxin Tongda Technology Co.,Ltd
-				Rm.1301-1305A,Fujian Building, Caitian road, Futian District,
-				Shenzhen  Guangdong  China
-				CN
-
-84-39-BE   (hex)		Shenzhen Lidaxun Digital Technology Co.,Ltd
-D00000-DFFFFF     (base 16)		Shenzhen Lidaxun Digital Technology Co.,Ltd
-				4th Floor 3B03-3B05, Building 2,Internet Industries Park Area A, Baoan district
-				Shenzhen  Guangdong  51800
-				CN
-
-84-39-BE   (hex)		EDC Electronic Design Chemnitz GmbH
-C00000-CFFFFF     (base 16)		EDC Electronic Design Chemnitz GmbH
-				Technologie-Campus 4
-				Chemnitz  Sachsen  09126
-				DE
-
-84-39-BE   (hex)		Emotiq s.r.l.
-A00000-AFFFFF     (base 16)		Emotiq s.r.l.
-				Via Cristoforo Baioni 9
-				Bergamo  BG  24123
-				IT
-
-40-A3-6B   (hex)		PH Technical Labs
-900000-9FFFFF     (base 16)		PH Technical Labs
-				1200, commerce dr, ste 112
-				plano  tx  75093
-				US
-
-80-0A-80   (hex)		Beijing VControl Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Beijing VControl Technology Co., Ltd.
-				Qinghe Anning Road, Wuyougang building #22
-				Beijing  Haidian  100085
-				CN
-
-80-0A-80   (hex)		Sumitomo Wiring Systems, Ltd.
-200000-2FFFFF     (base 16)		Sumitomo Wiring Systems, Ltd.
-				Nagoya Lucent Tower 25F
-				Nagoya  Aichi  451-6025
-				JP
-
-80-0A-80   (hex)		LLVISION TECHNOLOGY CO.,LTD
-400000-4FFFFF     (base 16)		LLVISION TECHNOLOGY CO.,LTD
-				Room302,Building A Fuxing,No.30 He Tao Yuan,Guan Dong Dian Bei Jie
-				Beijing  Beijing  100026
-				CN
-
-CC-1B-E0   (hex)		IC RealTech
-600000-6FFFFF     (base 16)		IC RealTech
-				3050 North Andrews Avenue Extension
-				Pompano Beach  Florida  33064
-				US
-
-00-55-DA   (hex)		Beijing Connected Information Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Beijing Connected Information Technology Co.,Ltd.
-				F15 Block 7(Jing Xi Financial Science and Technology Building)No.30 Shi Xing St,Shijingshan District Beijing, China,100041
-				Beijing  Beijing  100041
-				CN
-
-CC-1B-E0   (hex)		MobiStor Technology Inc.
-900000-9FFFFF     (base 16)		MobiStor Technology Inc.
-				Rm. 209, 2F., No. 99-1, Anzhong Rd., Xindian Dist.
-				New Taipei City  Taiwn  23154
-				TW
-
-CC-1B-E0   (hex)		MDT technologies GmbH
-800000-8FFFFF     (base 16)		MDT technologies GmbH
-				Papiermühle 1
-				Engelskirchen  Engelskirchen  51766
-				DE
-
-CC-1B-E0   (hex)		NEWSTAR (HK) ELECTRONIC DEVELOPMENT LIMITED
-D00000-DFFFFF     (base 16)		NEWSTAR (HK) ELECTRONIC DEVELOPMENT LIMITED
-				UNIT 1005,10/F PROSPEROUS BLDG 48-52 DES VOEUX ROAD GENTRAL HONG KONG
-				HONGKONG  HONGKONG  999077
-				CN
-
-00-55-DA   (hex)		Interaxon Inc
-B00000-BFFFFF     (base 16)		Interaxon Inc
-				Suite 303 - 511 King St W
-				Toronto  ON  M5V 1K4
-				CA
-
-00-55-DA   (hex)		Arrow Electronics,Inc.
-D00000-DFFFFF     (base 16)		Arrow Electronics,Inc.
-				665 Maestro Drive
-				Reno  NV  89511
-				US
-
-CC-1B-E0   (hex)		Shenzhen Vanstor Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Shenzhen Vanstor Technology Co.,Ltd
-				nanshan District
-				shenzhen  GuangDong  518057
-				CN
-
-A0-3E-6B   (hex)		Qunar.com
-C00000-CFFFFF     (base 16)		Qunar.com
-				xihaiguoji,1#8
-				Beijing  Beijing  100086
-				CN
-
-A0-3E-6B   (hex)		718th  Research  Institute  of  CSIC
-800000-8FFFFF     (base 16)		718th  Research  Institute  of  CSIC
-				No.17 Zhanlan Road
-				Handan City  Hebei  056027
-				CN
-
-A0-3E-6B   (hex)		Incogniteam Ltd.
-900000-9FFFFF     (base 16)		Incogniteam Ltd.
-				ROTERMANI 8
-				Tallin  Estonia  10111
-				EE
-
-A0-3E-6B   (hex)		Friday Lab, UAB
-500000-5FFFFF     (base 16)		Friday Lab, UAB
-				Sauletekio ave 15
-				Vilnius  Vilnius  10224
-				LT
-
-C8-8E-D1   (hex)		AP Sensing GmbH
-A00000-AFFFFF     (base 16)		AP Sensing GmbH
-				Herrenberger Str. 130
-				Böblingen  Baden-Würrtemberg  71034
-				DE
-
-C8-8E-D1   (hex)		Shenyang Machine Tool(Group) Research & Design Institute Co., Ltd, Shanghai Branch
-600000-6FFFFF     (base 16)		Shenyang Machine Tool(Group) Research & Design Institute Co., Ltd, Shanghai Branch
-				2nd Floor,1st Building, No. 128 Xiangyin Rd, Shanghai
-				Shanghai  Shanghai  200433
-				CN
-
-C8-8E-D1   (hex)		ROTRONIC AG
-200000-2FFFFF     (base 16)		ROTRONIC AG
-				Grindelstrasse 6
-				Bassersdorf  Zurich  8303
-				CH
-
-A0-3E-6B   (hex)		Videx Electronics S.p.A.
-200000-2FFFFF     (base 16)		Videx Electronics S.p.A.
-				Via del Lavoro, 1
-				Monte Giberto  FM  63846
-				IT
-
-DC-44-27   (hex)		Wharton Electronics Ltd
-800000-8FFFFF     (base 16)		Wharton Electronics Ltd
-				Unit 15, Thame Park Business Centre
-				Thame  Oxfordshire  OX9 3XA
-				GB
-
-1C-21-D1   (hex)		Dynojet Research
-900000-9FFFFF     (base 16)		Dynojet Research
-				2191 Mendenhall #105
-				North Las Vegas  NV  89081
-				US
-
-1C-21-D1   (hex)		Reliatronics Inc.
-800000-8FFFFF     (base 16)		Reliatronics Inc.
-				1858 Ranch Road 3232
-				Johnson City  TX  78636
-				US
-
-B0-C5-CA   (hex)		Astyx GmbH
-800000-8FFFFF     (base 16)		Astyx GmbH
-				Lise-Meitner-Str. 2a
-				Ottobrunn  Bavaria  85521
-				DE
-
-DC-44-27   (hex)		General Microsystems Sdn Bhd
-300000-3FFFFF     (base 16)		General Microsystems Sdn Bhd
-				3-17, Jalan USJ 7/3B
-				UEP Subang Jaya  Selangor D. E.  47610
-				MY
-
-DC-44-27   (hex)		Suritel
-000000-0FFFFF     (base 16)		Suritel
-				5, ul. Usievicha
-				Moscow  Moscow  125319
-				RU
-
-1C-21-D1   (hex)		B-Scada Inc.
-500000-5FFFFF     (base 16)		B-Scada Inc.
-				9030 W Fort Island Trail
-				Crystal River  FL  34429
-				US
-
-B0-C5-CA   (hex)		IVK-SAYANY
-100000-1FFFFF     (base 16)		IVK-SAYANY
-				Aviamotornaya str. 50
-				Moscow  Moscow  111024
-				RU
-
-B0-C5-CA   (hex)		SYSTOVI
-500000-5FFFFF     (base 16)		SYSTOVI
-				5, rue du Chêne Lassé
-				SAINT-HERBLAIN  Loire-Atlantique  44800
-				FR
-
-78-C2-C0   (hex)		Wan Chao An (Beijing) Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Wan Chao An (Beijing) Technology Co., Ltd.
-				Room 1-1-1403, Shang Di Jia Yuan
-				Beijing  Beijing  100085
-				CN
-
-B4-37-D1   (hex)		DIMTON CO.,LTD.
-300000-3FFFFF     (base 16)		DIMTON CO.,LTD.
-				1F.,No.137,Xingfu E.Rd., Xinzhuang Dist., New Taipei City 242, Taiwan (R.O.C)
-				New Taipei  Taiwan  24252
-				TW
-
-B4-37-D1   (hex)		Alturna Networks
-100000-1FFFFF     (base 16)		Alturna Networks
-				De Huchtstraat 35
-				Almere  Flevoland  1327 EC
-				NL
-
-B4-37-D1   (hex)		Fibersystem AB
-200000-2FFFFF     (base 16)		Fibersystem AB
-				Gårdsfogdevägen 18B
-				Bormma  Stockholm  16866
-				SE
-
-78-C2-C0   (hex)		Shenzhen ELI Technology co.,ltd
-000000-0FFFFF     (base 16)		Shenzhen ELI Technology co.,ltd
-				Room 201, Dawning Building, No.12 Keji South 12th Road, Hi-Tech Park , Shenzhen
-				Shenzhen  Guangdong  518057
-				CN
-
-88-5D-90   (hex)		Wuhan Strong Electronics Co., Ltd
-400000-4FFFFF     (base 16)		Wuhan Strong Electronics Co., Ltd
-				2nd Floor, 6 Bldg, Guannan Fuxing Medical Park,
-				Wuhan  Hubei  430074
-				CN
-
-88-5D-90   (hex)		Schmidt & Co.,(H.K.)Ltd.
-700000-7FFFFF     (base 16)		Schmidt & Co.,(H.K.)Ltd.
-				5F., No.139, Songjiang Rd., Zhongshan Dist., Taipei City 10485, Taiwan (R.O.C.)
-				Taipei  Taiwan  10485
-				TW
-
-88-5D-90   (hex)		iRoom GmbH
-C00000-CFFFFF     (base 16)		iRoom GmbH
-				Paracelsus Str. 4
-				Oberndorf  Salzburg  5110
-				AT
-
-88-5D-90   (hex)		Premier Merchandises Limited
-B00000-BFFFFF     (base 16)		Premier Merchandises Limited
-				23/F Metro Loft, 38 Kwai Hei Street,
-				Hong Kong    
-				HK
-
-74-F8-DB   (hex)		Provision-ISR
-500000-5FFFFF     (base 16)		Provision-ISR
-				11 Atir Yeda St.
-				Kfar Saba  Israel  4464310
-				IL
-
-64-FB-81   (hex)		Kay Schulze & Karsten Pohle GbR
-500000-5FFFFF     (base 16)		Kay Schulze & Karsten Pohle GbR
-				Heinrich-Hertz-Strasse 121
-				Hamburg  Hamburg  22083
-				DE
-
-64-FB-81   (hex)		NPG Technology S.A.
-800000-8FFFFF     (base 16)		NPG Technology S.A.
-				C/ Ecuador 14 (P.I. Las Monjas)
-				Torrejón de Ardoz  Madrid  28850
-				ES
-
-80-7B-85   (hex)		Oliotalo Oy
-B00000-BFFFFF     (base 16)		Oliotalo Oy
-				Sinikalliontie 18 B
-				Espoo  Uusimaa  02630
-				FI
-
-80-7B-85   (hex)		SMART ELECTRONICS NZ LIMITED
-900000-9FFFFF     (base 16)		SMART ELECTRONICS NZ LIMITED
-				4d Palm Grove, Berhampore
-				Wellington    6023
-				NZ
-
-54-9A-11   (hex)		SpearX Inc.
-100000-1FFFFF     (base 16)		SpearX Inc.
-				No.332., Sec. 1, Jianguo S. Rd.,
-				Taipei City    10656
-				TW
-
-64-FB-81   (hex)		Bronkhorst High-Tech BV
-A00000-AFFFFF     (base 16)		Bronkhorst High-Tech BV
-				Nijverheidsstraat 1a
-				Ruurlo  Gelderland  NL-7261AK
-				NL
-
-80-E4-DA   (hex)		Elcus
-900000-9FFFFF     (base 16)		Elcus
-				Varshavskaya st. 5A lit L
-				St.-Petersburg  St.-Petersburg  196128
-				RU
-
-64-FB-81   (hex)		Pricer AB
-400000-4FFFFF     (base 16)		Pricer AB
-				Västra Järnvägsgatan 7
-				Stockholm    11164
-				SE
-
-1C-CA-E3   (hex)		PGA ELECTRONIC
-100000-1FFFFF     (base 16)		PGA ELECTRONIC
-				ZI LA MALTERIE
-				MONTIERCHAUME    36130
-				FR
-
-64-FB-81   (hex)		MOBILUS Inc.
-300000-3FFFFF     (base 16)		MOBILUS Inc.
-				2nd Fl. 18,
-				Seocho-gu  Seoul  138-898
-				KR
-
-1C-CA-E3   (hex)		Private
-000000-0FFFFF     (base 16)		Private
-
-90-C6-82   (hex)		Shenzhen Lencotion Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Shenzhen Lencotion Technology Co.,Ltd
-				 LongGang,Buji Xia Shuijing,Hubei
-				Shenzhen  Guangdong  518112
-				CN
-
-2C-D1-41   (hex)		CITA SMART SOLUTIONS LTD
-E00000-EFFFFF     (base 16)		CITA SMART SOLUTIONS LTD
-				5th Floor, 52-54 Gracechurch Street, London EC3V 0EH, United Kingdom
-				London  N/L  EC3V 0EH
-				GB
-
-80-E4-DA   (hex)		Shortcut Labs
-700000-7FFFFF     (base 16)		Shortcut Labs
-				Teknikringen 26
-				Stockholm  Stockholm  11428
-				SE
-
-80-E4-DA   (hex)		Wheatstone Corporation
-000000-0FFFFF     (base 16)		Wheatstone Corporation
-				600 Industrial Drive
-				New Bern  NC  28562
-				US
-
-2C-D1-41   (hex)		Fiberroad Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		Fiberroad Technology Co., Ltd.
-				2F,5# Building,Minxing Industrial Park,MinKang Rd.Minzhi,Longhua District,ShenZhen China.
-				shenzhen  GuangDong  518131
-				CN
-
-2C-D1-41   (hex)		ZENIC INC.
-500000-5FFFFF     (base 16)		ZENIC INC.
-				4-7-5
-				Nionohama  Otsu Shiga  520-0801
-				JP
-
-2C-6A-6F   (hex)		Logic IO Aps
-900000-9FFFFF     (base 16)		Logic IO Aps
-				Holmboes Alle 14
-				Horsens  DK  8700
-				DK
-
-2C-6A-6F   (hex)		SM DSP CO.,LTD.
-700000-7FFFFF     (base 16)		SM DSP CO.,LTD.
-				6-Gil 13-14
-				Gumi-si  Gyeongsangbuk-Do  730-906
-				KR
-
-A0-BB-3E   (hex)		ManTech International Corporation
-500000-5FFFFF     (base 16)		ManTech International Corporation
-				2250 Corporate Park Drive
-				Herndon  Virginia  20171
-				US
-
-A0-BB-3E   (hex)		Filo SRL
-A00000-AFFFFF     (base 16)		Filo SRL
-				Via Giovanni Giolitti 34
-				Roma  rm  00185
-				IT
-
-98-02-D8   (hex)		Private
-E00000-EFFFFF     (base 16)		Private
-
-2C-6A-6F   (hex)		ELKO EP, s.r.o.
-100000-1FFFFF     (base 16)		ELKO EP, s.r.o.
-				Palackeho 493
-				Holesov, Vsetuly  Zlinsky kraj  76901
-				CZ
-
-98-02-D8   (hex)		Zedi, Inc.
-400000-4FFFFF     (base 16)		Zedi, Inc.
-				1855 - 94 ST NW
-				Edmonton  AB  T6N 1E6
-				CA
-
-98-02-D8   (hex)		Simplo Technology Co.,LTD
-800000-8FFFFF     (base 16)		Simplo Technology Co.,LTD
-				No471., Sec.2, Pa The Rd.,
-				Hu Kou  30348  Hsin Chu Hsien
-				TW
-
-28-FD-80   (hex)		Airbus Defence and Space Oy
-C00000-CFFFFF     (base 16)		Airbus Defence and Space Oy
-				Hiomotie 32
-				  Helsinki  00380
-				FI
-
-A0-BB-3E   (hex)		IVision Electronics Co.,Ltd
-100000-1FFFFF     (base 16)		IVision Electronics Co.,Ltd
-				Bldg.B,Yingkeli Industrial Park
-				Shenzhen  GuangDong  518116
-				CN
-
-A0-BB-3E   (hex)		WiteRiver Technology LLC
-300000-3FFFFF     (base 16)		WiteRiver Technology LLC
-				31 Mira str.
-				Ufa  Republic of Bashkortostan  450112
-				RU
-
-28-FD-80   (hex)		Zhixiang Technology Co., Ltd.
-200000-2FFFFF     (base 16)		Zhixiang Technology Co., Ltd.
-				7-2604 Media Village,
-				Chaoyang District,  Beijing  100107
-				CN
-
-2C-26-5F   (hex)		Jiangsu JARI Technology Group Co., LTD
-200000-2FFFFF     (base 16)		Jiangsu JARI Technology Group Co., LTD
-				NO.18, Shenghu Rd,
-				Lianyungang City  Jiangsu  222061
-				CN
-
-2C-26-5F   (hex)		Polara Engineering
-A00000-AFFFFF     (base 16)		Polara Engineering
-				9153 STELLAR COURT
-				CORONA  California  92883
-				US
-
-0C-EF-AF   (hex)		GainStrong Industry Co.,Ltd
-C00000-CFFFFF     (base 16)		GainStrong Industry Co.,Ltd
-				3rd Floor, 1st Building, Block E, Minzhu West Industrial Zone, Bao’an Dist.
-				Shenzhen  Guangdong  518100
-				CN
-
-0C-EF-AF   (hex)		chengdu joyotime Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		chengdu joyotime Technology Co., Ltd.
-				room 503, B7 , tianfu software park
-				chengdu  sichuan  610000
-				CN
-
-F8-02-78   (hex)		CLARUS Korea Co., Ltd
-400000-4FFFFF     (base 16)		CLARUS Korea Co., Ltd
-				 2F, Illutech Bldg, Myoenmok7-dong,
-				   Seoul   131827
-				KR
-
-F8-02-78   (hex)		Rosemount Analytical
-B00000-BFFFFF     (base 16)		Rosemount Analytical
-				10241 West Little York, Suite 200
-				Houston, TX 77040  Texas  77040
-				US
-
-A4-4F-29   (hex)		HTD
-A00000-AFFFFF     (base 16)		HTD
-				1000 Shiloh Rd, Suite 100
-				Plano  TX  75074
-				US
-
-A4-4F-29   (hex)		GUANGDONG REAL-DESIGN INTELLIGENT TECHNOLOGY CO.,LTD
-B00000-BFFFFF     (base 16)		GUANGDONG REAL-DESIGN INTELLIGENT TECHNOLOGY CO.,LTD
-				No.1 Ruixiang Road,Fengxiang industrial Park,DaliangSub-district,Shunde district,Foshan City,Guangdong
-				Foshan  Guangdong  528300
-				CN
-
-3C-39-E7   (hex)		VANSTONE ELECTRONIC (BEIJING)CO,. LTD.
-C00000-CFFFFF     (base 16)		VANSTONE ELECTRONIC (BEIJING)CO,. LTD.
-				Room 805,8/F,Qinghua Information Port Development Building,North High-tech Industrial Park,Nanshan District,Shenzhen
-				shenzhen  guangdong  518000
-				CN
-
-A4-4F-29   (hex)		Dermalog Identification Systems GmbH
-000000-0FFFFF     (base 16)		Dermalog Identification Systems GmbH
-				Mittelweg 120
-				Hamburg  Hamburg  20148
-				DE
-
-3C-39-E7   (hex)		Attrackting AG
-500000-5FFFFF     (base 16)		Attrackting AG
-				Falkenstrasse 44
-				Biel/Bienne  Berne  2502
-				CH
-
-0C-EF-AF   (hex)		Goerlitz AG
-100000-1FFFFF     (base 16)		Goerlitz AG
-				August-Thyssen-Strasse 32
-				Koblenz  Rheinland-Pfalz  56070
-				DE
-
-3C-39-E7   (hex)		Martem AS
-800000-8FFFFF     (base 16)		Martem AS
-				Akadeemia tee 21/6
-				Tallinn  Harjumaa  12618
-				EE
-
-10-07-23   (hex)		BEIJING SOOALL INFORMATION TECHNOLOGY CO.,LTD
-500000-5FFFFF     (base 16)		BEIJING SOOALL INFORMATION TECHNOLOGY CO.,LTD
-				Room 1028,Block B,No.11 XinghuoRoad,Science City,Fengtai District
-				Beijing  Beijing  100070
-				CN
-
-E8-18-63   (hex)		Protek Electronics Group Co.,LTD
-B00000-BFFFFF     (base 16)		Protek Electronics Group Co.,LTD
-				Homecare Technology Park,5/F,No.30,Langdong
-				Shenzhen  Guangdong  518105
-				CN
-
-D0-22-12   (hex)		Spirit IT B.V.
-000000-0FFFFF     (base 16)		Spirit IT B.V.
-				prof. dr. Dorgelolaan 20
-				Eindhoven  Noord-Brabant  5613 AM
-				NL
-
-D0-22-12   (hex)		Viatron GmbH
-400000-4FFFFF     (base 16)		Viatron GmbH
-				Carl-Metz-Str. 3
-				Ettlingen  Baden Würtemberg  76275
-				DE
-
-B8-D8-12   (hex)		V5 Technology Corporation
-400000-4FFFFF     (base 16)		V5 Technology Corporation
-				5F., No.7, Lixing 3rd Rd., East Dist., Hsinchu City 30078, Taiwan (R.O.C.)
-				HsinChu  Taiwan  30078
-				TW
-
-74-E1-4A   (hex)		Kanto Aircraft Instrument Co., Ltd.
-900000-9FFFFF     (base 16)		Kanto Aircraft Instrument Co., Ltd.
-				2-3-18 Honfujisawa
-				Fujisawa  Kanagawa  251-0875
-				JP
-
-74-E1-4A   (hex)		APM Technologies (DongGuan) Ltd
-700000-7FFFFF     (base 16)		APM Technologies (DongGuan) Ltd
-				109Gosun Science Building, NanCheng , DongGuan, GuangDong, China
-				DongGuan  GuangDong  523000
-				CN
-
-B8-D8-12   (hex)		Kiwigrid GmbH
-A00000-AFFFFF     (base 16)		Kiwigrid GmbH
-				Kleiststraße 10b
-				Dresden  Saxony  01129
-				DE
-
-E4-95-6E   (hex)		Shanghai Tieda Telecommunications Equipment Co.,LTD.
-D00000-DFFFFF     (base 16)		Shanghai Tieda Telecommunications Equipment Co.,LTD.
-				18F The Sapphire Tower 267 TianmuRd(M)
-				Shanghai  Zhabei District  200070
-				
-
-BC-66-41   (hex)		UtilLighting Co.,Ltd.
-D00000-DFFFFF     (base 16)		UtilLighting Co.,Ltd.
-				#102, 1F, 22, Samyang-ro, Seongbuk-gu, Seoul
-				Seongbuk-gu  Seoul  136-717
-				KR
-
-E4-95-6E   (hex)		PT.MLWTelecom
-800000-8FFFFF     (base 16)		PT.MLWTelecom
-				Jalan Jembatan Dua Raya no.16/2
-				  Jakarta  14450
-				ID
-
-E4-95-6E   (hex)		SMC Networks, Inc
-000000-0FFFFF     (base 16)		SMC Networks, Inc
-				20 Mason
-				Irvine  CA  92618
-				US
-
-BC-66-41   (hex)		Global China Technology Limited
-100000-1FFFFF     (base 16)		Global China Technology Limited
-				Ruyi Road 1-3,Ailian, Longcheng Street, longgang Town,
-				Shenzhen  GuangDong  518172
-				CN
-
-58-FC-DB   (hex)		Spang Power Electronics
-000000-0FFFFF     (base 16)		Spang Power Electronics
-				9305 Progress Parkway
-				Mentor  Ohio  44060
-				US
-
-B0-1F-81   (hex)		Access Device Integrated Communications Corp.
-C00000-CFFFFF     (base 16)		Access Device Integrated Communications Corp.
-				No. 839, Sec.3, ChungChing Road,
-				Taichung City  Taichung  42862
-				TW
-
-58-FC-DB   (hex)		Hi-Target Surveying Instrument Co., Ltd.
-900000-9FFFFF     (base 16)		Hi-Target Surveying Instrument Co., Ltd.
-				Plant 202, BLDG 13, Tian'An HQ Center, No.555 North Panyu RD. Donghuan Block,
-				Guangzhou  Guangdong  511400
-				CN
-
-58-FC-DB   (hex)		Inforce Computing Inc.
-400000-4FFFFF     (base 16)		Inforce Computing Inc.
-				48820 Kato Road
-				Fremont  CA  94538
-				US
-
-BC-66-41   (hex)		Intuitive Surgical, Inc
-600000-6FFFFF     (base 16)		Intuitive Surgical, Inc
-				1250 Kifer Rd
-				Sunnyvale  California  94086
-				US
-
-14-1F-BA   (hex)		POS Systema LLC
-E00000-EFFFFF     (base 16)		POS Systema LLC
-				Varshavskoe shosse, 35, room №13
-				Moscow  Moscow  117105
-				RU
-
-F4-0E-11   (hex)		BEIJING DONGJIN AERO-TECH CO., LTD
-100000-1FFFFF     (base 16)		BEIJING DONGJIN AERO-TECH CO., LTD
-				Building 7, 3th floor, Compound No. 33, Beiwaxili, Haidian District
-				Beijing  Beijing  100089
-				CN
-
-B0-1F-81   (hex)		Aether Services, Inc.
-700000-7FFFFF     (base 16)		Aether Services, Inc.
-				1A2-A08, No.1, Lising 1st RD.
-				Hsinchu City  Hsinchu  30078
-				TW
-
-F4-0E-11   (hex)		Kodpro Ltd.
-A00000-AFFFFF     (base 16)		Kodpro Ltd.
-				Room 801, 8/F, Opulent Bldg.,
-				Hong Kong  Wan Chai  999077
-				HK
-
-14-1F-BA   (hex)		Wisnetworks Technologies Co., Ltd.
-700000-7FFFFF     (base 16)		Wisnetworks Technologies Co., Ltd.
-				No.77, FuTe West 3 Road, China
-				  Shanghai  200000
-				
-
-7C-70-BC   (hex)		K-Vision Technology (Shanghai), Ltd
-400000-4FFFFF     (base 16)		K-Vision Technology (Shanghai), Ltd
-				Floor 4, No.9 Building, 879 Lane
-				Shanghai  Shanghai  200333
-				CN
-
-7C-70-BC   (hex)		Nomad Digital Ltd.
-700000-7FFFFF     (base 16)		Nomad Digital Ltd.
-				2nd Floor, Baltic Chambers,
-				Newcastle upon Tyne    NE1 3DQ
-				GB
-
-7C-70-BC   (hex)		Shanghai magcomm communication technology co ltd
-000000-0FFFFF     (base 16)		Shanghai magcomm communication technology co ltd
-				B Block,11F,Software Building, No 461 Hongcaolu
-				Shanghai  Shanghai  200233
-				CN
-
-14-1F-BA   (hex)		BYZERO
-400000-4FFFFF     (base 16)		BYZERO
-				1222 Doosan Venture Digm
-				Anyang-si  Gyeonggi-do  431-755
-				KR
-
-BC-34-00   (hex)		Q-PRODUCTS a. s.
-700000-7FFFFF     (base 16)		Q-PRODUCTS a. s.
-				Rybnicna 38/K
-				Bratislava  SK  83106
-				SK
-
-BC-34-00   (hex)		Altronix Corporation
-300000-3FFFFF     (base 16)		Altronix Corporation
-				140 58th street 
-				Brooklyn  NY  11220
-				US
-
-BC-34-00   (hex)		Redvision CCTV
-000000-0FFFFF     (base 16)		Redvision CCTV
-				17 Highview
-				Bordon  Hampshire  GU35 0AX
-				GB
-
-A4-3B-FA   (hex)		Recognition Systems LLC
-600000-6FFFFF     (base 16)		Recognition Systems LLC
-				2380 Owen Street
-				Santa Clara  CA  95054
-				US
-
-A4-3B-FA   (hex)		Deatronic srl
-700000-7FFFFF     (base 16)		Deatronic srl
-				Via Giulianello 1/7
-				ROMA    00178
-				IT
-
-D0-76-50   (hex)		Private
-400000-4FFFFF     (base 16)		Private
-
-D0-76-50   (hex)		Accumulate AB
-800000-8FFFFF     (base 16)		Accumulate AB
-				Lästmakargatan 20
-				  Stockholm  111 44
-				SE
-
-74-19-F8   (hex)		Starcor Beijing Co.,Limited
-500000-5FFFFF     (base 16)		Starcor Beijing Co.,Limited
-				NO.210 Block B, Building 2
-				Beijing  Berijing  100089
-				CN
-
-74-19-F8   (hex)		Princip a.s.
-900000-9FFFFF     (base 16)		Princip a.s.
-				Radlicka 204/503
-				Praha 5  Praha  158 00
-				CZ
-
-74-19-F8   (hex)		Tanjarine
-A00000-AFFFFF     (base 16)		Tanjarine
-				188 S Whisman Rd, Bldg A
-				Mountain View  CA  94041
-				US
-
-74-19-F8   (hex)		Quest Payment Systems
-800000-8FFFFF     (base 16)		Quest Payment Systems
-				227 Burwood Road
-				Hawthorn  Victoria  3122
-				AU
-
-74-19-F8   (hex)		Symtop Instrument Co.
-200000-2FFFFF     (base 16)		Symtop Instrument Co.
-				Haidianqu Xueqinglu Xuezhixuan 613
-				Haidianqu  Beijing  100083
-				CN
-
-4C-4B-F9   (hex)		Electrolux Professional AB
-A00000-AFFFFF     (base 16)		Electrolux Professional AB
-				Ringvägen 14
-				Ljungby    34180
-				SE
-
-40-11-75   (hex)		MIRC ELECTRONICS LTD
-500000-5FFFFF     (base 16)		MIRC ELECTRONICS LTD
-				Onida House, G-1, MIDC, Mahakali Caves Road, Andheri East
-				Mumbai  Maharashtra  400093
-				IN
-
-40-11-75   (hex)		Table Trac Inc
-400000-4FFFFF     (base 16)		Table Trac Inc
-				6101 Baker Rd STE 206
-				Minnetonka  MN  55345
-				US
-
-40-11-75   (hex)		Lexi Devices, Inc.
-000000-0FFFFF     (base 16)		Lexi Devices, Inc.
-				2342 Shattuck Ave, #260
-				Berkeley    94704
-				US
-
-40-11-75   (hex)		NIBBLE
-E00000-EFFFFF     (base 16)		NIBBLE
-				Rua Julio Dinis 265 1D
-				Trofa    4785-330
-				PT
-
-40-11-75   (hex)		Fujian Kuke3D Technology Co.,LTD
-100000-1FFFFF     (base 16)		Fujian Kuke3D Technology Co.,LTD
-				No.33, R&D Building, No. 1, Donghu Road, Digital Fujian Industrial Park, Changle District
-				Fuzhou   Fujian  350200
-				CN
-
-10-DC-B6   (hex)		Pickering Interfaces Ltd
-A00000-AFFFFF     (base 16)		Pickering Interfaces Ltd
-				Stephenson Road
-				Clacton On Sea  Essex  CO154NL
-				GB
-
-10-DC-B6   (hex)		Moya Commumication Technology (Shenzhen) Co.,Ltd.
-700000-7FFFFF     (base 16)		Moya Commumication Technology (Shenzhen) Co.,Ltd.
-				Guang Hui Science Park, No.17 of Min Qing Road, Longhua District
-				Shenzhen    518000
-				CN
-
-54-A4-93   (hex)		Intelligent Surveillance Corp
-000000-0FFFFF     (base 16)		Intelligent Surveillance Corp
-				PO Box 12168
-				College Station  TX  77842
-				US
-
-54-A4-93   (hex)		I-MOON TECHNOLOGY CO., LIMITED
-300000-3FFFFF     (base 16)		I-MOON TECHNOLOGY CO., LIMITED
-				FLAT/RM 2253, BLK 1, 22/F, HOI TAI FACTORY, EST TSING YEUNG CIRCUIT, TUEN MUN
-				NT    999077
-				HK
-
-04-D1-6E   (hex)		Dspread Technology (Beijing) Inc.
-500000-5FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
-				Jingxin Building, 2045 Suite , Chaoyang District
-				Beijing    100027
-				CN
-
-04-D1-6E   (hex)		Evolute Systems Private Limited
-E00000-EFFFFF     (base 16)		Evolute Systems Private Limited
-				#3794 ,Ground and First Floor, 7th Main, Indira Nagar
-				Bangalore  Karnataka  560038
-				IN
-
-44-03-77   (hex)		Exsom Computers LLC
-200000-2FFFFF     (base 16)		Exsom Computers LLC
-				Office 3206, The Citadel Tower, Business Bay
-				Dubai  Dubai  72891
-				AE
-
-44-03-77   (hex)		SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
-600000-6FFFFF     (base 16)		SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
-				Longhua New District Qing Xiang Road, Bao Neng Technology Park
-				SHEN ZHEN  GUANG DONG  518109
-				CN
-
-44-03-77   (hex)		Atari, Inc.
-100000-1FFFFF     (base 16)		Atari, Inc.
-				286 Madison Ave, 8th floor
-				New York  NY  10017
-				US
-
-44-03-77   (hex)		Lenovo Image(Tianjin) Technology Ltd.
-400000-4FFFFF     (base 16)		Lenovo Image(Tianjin) Technology Ltd.
-				Tianjin Free Trade Test Zone (Airport Economic Zone) Room 310, No. 1, Second Avenue, Airport International Logistics Zone
-				Tianjin  Tianjin  300000
-				CN
-
-44-03-77   (hex)		Bolin Technology Co., Ltd
-E00000-EFFFFF     (base 16)		Bolin Technology Co., Ltd
-				5/F, No 4 Block, Jinruizhonghe Industry Park,Huarong Road, Da Lang, Long Hua, Shenzhen, China.
-				shenzhen  Guang Dong  518109
-				CN
-
-50-62-55   (hex)		COTT Electronics
-D00000-DFFFFF     (base 16)		COTT Electronics
-				71-75 Shelton Street
-				London    WC2H 9JQ
-				GB
-
-50-62-55   (hex)		SHINSOFT CO., LTD.
-E00000-EFFFFF     (base 16)		SHINSOFT CO., LTD.
-				3F., No. 128, Xinhu 2nd Rd., Neihu Dist.
-				Taipei City    114
-				TW
-
-1C-FD-08   (hex)		Cobham Slip Rings
-900000-9FFFFF     (base 16)		Cobham Slip Rings
-				18 Rue de Montréal
-				ANNEMASSE  Ville-la-Grand  74108
-				FR
-
-C4-95-4D   (hex)		BA International Electronics Co. Ltd.
-000000-0FFFFF     (base 16)		BA International Electronics Co. Ltd.
-				8F., No. 140, Nanhua 1st St., Luzhu Dist.,
-				Taoyuan City    338
-				TW
-
-C4-95-4D   (hex)		LLC TechnoEnergo
-700000-7FFFFF     (base 16)		LLC TechnoEnergo
-				Kemerovskaya str., 3
-				Nizhny Novgorod  Nizhny Novgorod region  603152
-				RU
-
-C4-95-4D   (hex)		Xinjiang Golden Calf Energy IOT Technology Co., Ltd 
-800000-8FFFFF     (base 16)		Xinjiang Golden Calf Energy IOT Technology Co., Ltd 
-				A02 office building of Cloud Computing Industrial Park, Karamay District
-				Karamay  Xinjiang  834000
-				CN
-
-C4-95-4D   (hex)		Teletronik AG
-100000-1FFFFF     (base 16)		Teletronik AG
-				Bahnhofstrasse 10.
-				Zug    6302
-				CH
-
-C4-95-4D   (hex)		AKKA Germany GmbH
-600000-6FFFFF     (base 16)		AKKA Germany GmbH
-				Riesstrasse 14
-				München  Bayern  80992
-				DE
-
-64-31-39   (hex)		Livongo Health
-100000-1FFFFF     (base 16)		Livongo Health
-				150 W. Evelyn Ave, Suite 150
-				Mountain View  CA  94041
-				US
-
-C4-95-4D   (hex)		KAT Mekatronik Urunleri AS
-A00000-AFFFFF     (base 16)		KAT Mekatronik Urunleri AS
-				Istanbul Trakya Serbest Bolgesi Ataturk Bulvari No:20
-				Istanbul  Catalca  34500
-				TR
-
-C4-95-4D   (hex)		GL Solutions Inc.
-400000-4FFFFF     (base 16)		GL Solutions Inc.
-				16-3 Kuramae 4-chome
-				Taito-ku  Tokyo  111-0051
-				JP
-
-00-69-67   (hex)		miliwave
-100000-1FFFFF     (base 16)		miliwave
-				room 423,105 gwanggyo-ro, yengtong-gu
-				suwon-si  Kyunggi-do  16229
-				KR
-
-00-69-67   (hex)		Comcast-SRL
-600000-6FFFFF     (base 16)		Comcast-SRL
-				Alejo Martinez 17
-				Sosua  Puerto Plata  34443
-				DO
-
-00-69-67   (hex)		aversix
-D00000-DFFFFF     (base 16)		aversix
-				???????????351?4??7 (????)
-				???  ???  235
-				TW
-
-00-69-67   (hex)		Ningbo Shen Link Communication Technology Co.,Ltd
-200000-2FFFFF     (base 16)		Ningbo Shen Link Communication Technology Co.,Ltd
-				No.87,Fengming Road,Lizhou Street
-				Yuyao City  Zhejiang Province  315403
-				CN
-
-00-69-67   (hex)		Zhejiang Holip Electronic Technology Co.,Ltd
-A00000-AFFFFF     (base 16)		Zhejiang Holip Electronic Technology Co.,Ltd
-				NO.339 XINQIAO NORTH ROAD
-				Haiyan  Zhejiang  314300
-				CN
-
-A0-22-4E   (hex)		Hunan Youmei Science&Technology Development Co.,Ltd.
-E00000-EFFFFF     (base 16)		Hunan Youmei Science&Technology Development Co.,Ltd.
-				3F, Building No.B8, Cultural Advertising Creative Industry Park, Economic Development Zone
-				Huaihua City  Hunan Province  418000
-				CN
-
-A0-22-4E   (hex)		MESIT asd, s.r.o.
-600000-6FFFFF     (base 16)		MESIT asd, s.r.o.
-				Sokolovska 573
-				Uherske Hradiste    686 01
-				CZ
-
-A0-22-4E   (hex)		Standartoptic, Limited Liability Company
-C00000-CFFFFF     (base 16)		Standartoptic, Limited Liability Company
-				Moskovsky p, 22nd kilometer Kievskoe highway, house 4, building 1 floor 9 Block B office 903?
-				Moscow    108811
-				RU
-
-20-0A-0D   (hex)		Amazon Technologies Inc.
-B00000-BFFFFF     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-20-0A-0D   (hex)		Clearly IP Inc
-300000-3FFFFF     (base 16)		Clearly IP Inc
-				2416 Industrial Dr Unit F
-				Neenah  WI  54956
-				US
-
-20-0A-0D   (hex)		Bently & EL  Co. Ltd.
-D00000-DFFFFF     (base 16)		Bently & EL  Co. Ltd.
-				7F-3, Fuxing North Road, Zhong Shan District
-				Taipei    104
-				TW
-
-20-0A-0D   (hex)		Austin Hughes Electronics Ltd.
-600000-6FFFFF     (base 16)		Austin Hughes Electronics Ltd.
-				Unit 3608-12, Cable TV Tower, 9 Hoi Shing Road, Tsuen Wan,  Hong Kong
-				Hong Kong  Kwai Tsing New Territories  00000
-				HK
-
-20-0A-0D   (hex)		HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
-E00000-EFFFFF     (base 16)		HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
-				Build C,Wanfu Center,Binkang Road No.228,Binjiang Area
-				China    210051
-				CN
-
-40-2C-76   (hex)		Beijing Smarot Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Beijing Smarot Technology Co., Ltd.
-				Room 505, unit 2, 5th floor, 12th building, 3rd yard , Kangze road, Fangshan district
-				Beijing  Beijing  102488
-				CN
-
-40-2C-76   (hex)		Shanghai Dahua Scale Factory
-100000-1FFFFF     (base 16)		Shanghai Dahua Scale Factory
-				No.1013 Wangqiao Road,Pudong New District
-				Shanghai  Shanghai  201201
-				CN
-
-50-DE-19   (hex)		Tianjin Natianal Health Technology Co.,Ltd
-700000-7FFFFF     (base 16)		Tianjin Natianal Health Technology Co.,Ltd
-				Room 2-6, No.8, Haitai development fifth Road, Huayuan industrial Zone , Binhai high-tech District
-				Tianjin  Tianjin  300450
-				CN
-
-50-DE-19   (hex)		AEG Identifikationssysteme GmbH
-900000-9FFFFF     (base 16)		AEG Identifikationssysteme GmbH
-				Hörvelsinger Weg 47
-				Ulm    89081
-				DE
-
-50-DE-19   (hex)		SPII SPA
-200000-2FFFFF     (base 16)		SPII SPA
-				VIA D. VOLPI 37 - ANGOLO VIA MONTOLI
-				SARONNO  VARESE  21047
-				IT
-
-50-A4-D0   (hex)		TRAXENS
-000000-0FFFFF     (base 16)		TRAXENS
-				HELIOPOLIS III – 16 rue Louis Leprince Ringuet
-				Marseille  Provence-Alpes-Côte d'Azur  13013
-				FR
-
-50-DE-19   (hex)		TRAXENS
-300000-3FFFFF     (base 16)		TRAXENS
-				HELIOPOLIS III – 16 rue Louis Leprince Ringuet
-				Marseille  Provence-Alpes-Côte d'Azur  13013
-				FR
-
-3C-FA-D3   (hex)		LIPS Corporation
-700000-7FFFFF     (base 16)		LIPS Corporation
-				2F., No. 100, Ruiguang Rd., Neihu Dist.
-				Taipei  Taiwan  114
-				TW
-
-50-DE-19   (hex)		Tannak International AB
-A00000-AFFFFF     (base 16)		Tannak International AB
-				 Midgårdsvägen 13
-				Luleå     973 34
-				SE
-
-3C-FA-D3   (hex)		Annapurna labs
-100000-1FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-3C-FA-D3   (hex)		 Corelink Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		 Corelink Technology Co.,Ltd
-				2701, building D2, No.1, Keyuan Weiyi Road, Laoshan District
-				Qingdao  Shandong  China
-				CN
-
-3C-FA-D3   (hex)		Shenzhen Vplus Communication Intelligent Co., Ltd.
-900000-9FFFFF     (base 16)		Shenzhen Vplus Communication Intelligent Co., Ltd.
-				Bao'an
-				Shenzhen  Guangdong  518000
-				CN
-
-B0-B3-53   (hex)		WUUK LABS CORP.
-700000-7FFFFF     (base 16)		WUUK LABS CORP.
-				16192 COASTAL HWY
-				LEWES  DE  19958
-				US
-
-B0-B3-53   (hex)		Nanjing Yining Intelligent Technology Co., Ltd.
-E00000-EFFFFF     (base 16)		Nanjing Yining Intelligent Technology Co., Ltd.
-				Room 209-114, 2 / F, Building 04, No. 18 Jialingjiang East Street, Jianye District, Nanjing
-				Nanjing  Jiangsu  210019
-				CN
-
-B0-B3-53   (hex)		Blake UK
-000000-0FFFFF     (base 16)		Blake UK
-				177-187, Rutland Road
-				Sheffield  --select--  S3 9PT
-				GB
-
-B0-B3-53   (hex)		Beijing Geekplus Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Beijing Geekplus Technology Co.,Ltd.
-				1st Floor, Building 1, Chaolai High-Tech industrial Part, Chaoyang District
-				Beijing   Beijing   100012
-				CN
-
-B0-B3-53   (hex)		IPvideo Corporation
-D00000-DFFFFF     (base 16)		IPvideo Corporation
-				1490 North Clinton Ave
-				Bay Shore  NY  11706
-				US
-
-B0-B3-53   (hex)		Zoox
-B00000-BFFFFF     (base 16)		Zoox
-				1149 Chess Drive
-				Foster City  CA  94404
-				US
-
-14-AE-85   (hex)		Qingdao iTechene Technologies Co., Ltd.
-200000-2FFFFF     (base 16)		Qingdao iTechene Technologies Co., Ltd.
-				UnitA3-A4,Level8,Block A ,International Innovation Park,No.1Keyuanwei Rd.,Laoshan District
-				Qingdao    266100
-				CN
-
-14-AE-85   (hex)		Henfred Technology Co., Ltd.
-100000-1FFFFF     (base 16)		Henfred Technology Co., Ltd.
-				3F.-7, No.77, Sec. 1, Xintai 5th Rd
-				New Taipei City  Xizhi Dist  221
-				TW
-
-64-62-66   (hex)		Annapurna labs
-100000-1FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-14-AE-85   (hex)		MTA Systems
-A00000-AFFFFF     (base 16)		MTA Systems
-				Pemstraße 2
-				Mauthausen    4310
-				AT
-
-64-62-66   (hex)		Bühler AG
-500000-5FFFFF     (base 16)		Bühler AG
-				Gupfenstrasse 5
-				Uzwil    9240
-				CH
-
-64-62-66   (hex)		MiiVii Dynamics Technology CO.,LTD
-000000-0FFFFF     (base 16)		MiiVii Dynamics Technology CO.,LTD
-				1408-1415 Tower A BUGG Building,No.18 N. Taipingzhuang Rd,haidian District
-				Beijing  Beijing  100000
-				CN
-
-64-62-66   (hex)		Shenzhen Jie Shi Lian Industrial Co., LTD
-E00000-EFFFFF     (base 16)		Shenzhen Jie Shi Lian Industrial Co., LTD
-				6F,C Building,Jinao Industrial Park,Juling Rd,Guanlan Town,Longhua
-				Shenzhen  Guangdong  518000
-				CN
-
-64-62-66   (hex)		Leontech Limited
-800000-8FFFFF     (base 16)		Leontech Limited
-				1208 WorkingBerg Commercial Buildung, 41-47 Marble Road
-				Hong Kong  Hong Kong  00000
-				HK
-
-94-CC-04   (hex)		Hanzhuo Information Technology(Shanghai) Ltd.
-D00000-DFFFFF     (base 16)		Hanzhuo Information Technology(Shanghai) Ltd.
-				Room 2085, building 2, 622 Yingyuan middle Road, Jiading Strict
-				Shanghai    201200
-				CN
-
-94-CC-04   (hex)		Sam Nazarko Trading Ltd
-600000-6FFFFF     (base 16)		Sam Nazarko Trading Ltd
-				18 Watermill Way
-				London  Surrey  SW19 2RD
-				GB
-
-94-CC-04   (hex)		hyBee Inc.
-A00000-AFFFFF     (base 16)		hyBee Inc.
-				#1003, Innovalley B, 253, Pangyo-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13486
-				KR
-
-94-CC-04   (hex)		Nanjing Yacer Communication Technology Co. Ltd.
-200000-2FFFFF     (base 16)		Nanjing Yacer Communication Technology Co. Ltd.
-				333 Taiping South Road Jinling Yujingyuan 19nd  floor Unit K Qin Huai District
-				nanjing  jiangsu  210000
-				CN
-
-90-E2-FC   (hex)		Pars Ertebat Afzar Co.
-000000-0FFFFF     (base 16)		Pars Ertebat Afzar Co.
-				1116 – Burlington Tower Business Bay
-				Dubai    90072
-				AE
-
-94-05-BB   (hex)		iungo
-800000-8FFFFF     (base 16)		iungo
-				Vrouwenlaan 62
-				Zwolle  Overijssel  8017 HS
-				NL
-
-94-05-BB   (hex)		Qingdao Maotran Electronics co., ltd
-000000-0FFFFF     (base 16)		Qingdao Maotran Electronics co., ltd
-				Room2907, Building 2 of Minghui International, No.39 of Shiling Road, Laoshan District
-				Qingdao  Shandong  266000
-				CN
-
-94-05-BB   (hex)		Dongguan CXWE Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Dongguan CXWE Technology Co.,Ltd.
-				Room 805, building 1, No. 16, Keji 4th Road, Songshanhu
-				Dongguan  Guangdong  523000
-				CN
-
-F4-90-CB   (hex)		Cheetah Medical
-C00000-CFFFFF     (base 16)		Cheetah Medical
-				2A Hashlosha st.
-				Tel Aviv    6706055
-				IL
-
-94-05-BB   (hex)		Zimmer GmbH
-900000-9FFFFF     (base 16)		Zimmer GmbH
-				Im Salmenkopf 5
-				Rheinau  Baden-Württemberg  77866
-				DE
-
-94-05-BB   (hex)		BAE Systems
-E00000-EFFFFF     (base 16)		BAE Systems
-				21 continental boulevard
-				Merrimack  NH  03054
-				US
-
-F4-90-CB   (hex)		A-dec Inc.
-B00000-BFFFFF     (base 16)		A-dec Inc.
-				2601 Crestview Drive
-				Newberg  OR  97132
-				US
-
-C0-9B-F4   (hex)		LTD Delovoy Office
-600000-6FFFFF     (base 16)		LTD Delovoy Office
-				Block “B”, floor 6, build 4/1, Stroiteley blvd
-				Krasnogorsk    143401
-				RU
-
-F4-90-CB   (hex)		TEQ SA
-700000-7FFFFF     (base 16)		TEQ SA
-				Via al Municipio 16
-				Barbengo  Ticino  6917
-				CH
-
-A4-DA-22   (hex)		Grundig
-A00000-AFFFFF     (base 16)		Grundig
-				Steinhof 39
-				Erkrath   North Rhine-Westphalia  40699
-				DE
-
-E8-B4-70   (hex)		YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
-400000-4FFFFF     (base 16)		YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
-				1-17-1 Ohmorihigashi
-				Ohta-ku  Tokyo  143-0012
-				JP
-
-E8-B4-70   (hex)		Tibit Communications
-700000-7FFFFF     (base 16)		Tibit Communications
-				1 Willowbrook Court, Suite 150
-				Petaluma  CA  94954
-				US
-
-94-FB-A7   (hex)		Shanghai Hyco Genyong Technology Co., Ltd.
-900000-9FFFFF     (base 16)		Shanghai Hyco Genyong Technology Co., Ltd.
-				Room 105, 1/F, Building B, No.999 of Huaxu Road, Qingpu District, Shanghai, China
-				Shanghai    201702
-				CN
-
-94-FB-A7   (hex)		UOI TECHNOLOGY CORPORATION
-400000-4FFFFF     (base 16)		UOI TECHNOLOGY CORPORATION
-				1F., No. 50, Ln. 148, Lide St.
-				Zhonghe Dist.  New Taipei City  23512
-				TW
-
-38-F7-CD   (hex)		VANGUARD
-300000-3FFFFF     (base 16)		VANGUARD
-				1st Floor 3 Moore 
-				London    SE1 2RE
-				GB
-
-38-F7-CD   (hex)		RIPower Co.,Ltd
-200000-2FFFFF     (base 16)		RIPower Co.,Ltd
-				3F,1,Bongeunsa-ro 44-gil, Gangnam-gu
-				Seoul    06143
-				KR
-
-38-F7-CD   (hex)		Fibergate Inc.
-B00000-BFFFFF     (base 16)		Fibergate Inc.
-				KDX Shibadaimon.Bld 2F 2-10-12 Shibadaimon
-				Tokyo  Minato-ku  1050012
-				JP
-
-94-FB-A7   (hex)		Reichert Inc.
-000000-0FFFFF     (base 16)		Reichert Inc.
-				3362 Walden Ave
-				Depew  NY  14043
-				US
-
-38-F7-CD   (hex)		Fast Cotton(Beijing) Limited
-600000-6FFFFF     (base 16)		Fast Cotton(Beijing) Limited
-				Fast Cotton(Beijing)Limited
-				Beijing  Beijing  100037
-				CN
-
-70-69-79   (hex)		Rivian Automotive LLC
-C00000-CFFFFF     (base 16)		Rivian Automotive LLC
-				13250 N. Haggerty Road
-				Plymouth  MI  48170
-				US
-
-70-69-79   (hex)		Foxconn Brasil Industria e Comercio Ltda
-A00000-AFFFFF     (base 16)		Foxconn Brasil Industria e Comercio Ltda
-				Av. Marginal da Rodovia dos Bandeirantes, 800 - Distrito Industrial
-				Jundiaí  Sao Paulo  13213-008
-				BR
-
-70-69-79   (hex)		SelectTech GeoSpatial, LLC
-400000-4FFFFF     (base 16)		SelectTech GeoSpatial, LLC
-				8045 Washington Village Dr.
-				Centerville  OH  45458
-				US
-
-F0-D7-AF   (hex)		720?bei jing?Health iTech Co.,Ltd
-300000-3FFFFF     (base 16)		720?bei jing?Health iTech Co.,Ltd
-				Room 9001, D Building, Kangjianbaosheng Plaza, No.8 Heiquan Road, Haidian District, Beijing
-				bei jing    100085
-				CN
-
-F0-D7-AF   (hex)		EVCO SPA
-B00000-BFFFFF     (base 16)		EVCO SPA
-				VIA FELTRE N. 81
-				SEDICO  BELLUNO  32036
-				IT
-
-F0-D7-AF   (hex)		Rievtech Electronic Co.,Ltd 
-700000-7FFFFF     (base 16)		Rievtech Electronic Co.,Ltd 
-				Room 505, Building A, No.88,Dazhou Road,Tiexinqiao,Yu huatai District, Nanjing City, Jiangsu Province,P.R.China +0086 25 52895099                 52890138 info@rievtech.com sales@rievtech.com
-				Nanjing City  Jiangsu Province  210000
-				CN
-
-F0-D7-AF   (hex)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
-				Room 201,Building A,No.1,Qianhai 1st Road,Shengang cooperation zone,Qianhai
-				Shenzhen    518054
-				CN
-
-AC-1D-DF   (hex)		FINEpowerX INC
-B00000-BFFFFF     (base 16)		FINEpowerX INC
-				Rm 2208, U-Tower, 120 HeungDeok JungAng-ro, GiHeung-Gu
-				YongIn-si  Gyeonggi-do  16950
-				KR
-
-30-49-50   (hex)		ATLI WORLD LIMITED
-100000-1FFFFF     (base 16)		ATLI WORLD LIMITED
-				306 Beverley Commercial Center, 87-105 Chatham Road, TST,
-				Kowloon  Hong Kong  852
-				HK
-
-30-49-50   (hex)		Anacove LLC
-C00000-CFFFFF     (base 16)		Anacove LLC
-				7856 Revelle drive
-				LA JOLLA  CA  92037
-				US
-
-30-49-50   (hex)		Ledworks SRL
-A00000-AFFFFF     (base 16)		Ledworks SRL
-				Via Tortona 37
-				Milano  Milano  20144
-				IT
-
-D0-D9-4F   (hex)		Mitsubishi Electric US, Inc.
-700000-7FFFFF     (base 16)		Mitsubishi Electric US, Inc.
-				1340 Satellite Boulevard
-				Suwanee  GA  30345
-				US
-
-30-49-50   (hex)		Sercomm Corporation.
-200000-2FFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-D0-14-11   (hex)		powerall
-400000-4FFFFF     (base 16)		powerall
-				75,Ojeong-ro,Bucheon-si,Gyeonggi-do,Republic of korea
-				Gyeonggi-do province    14445
-				KR
-
-D0-14-11   (hex)		ABB EVI SPA
-A00000-AFFFFF     (base 16)		ABB EVI SPA
-				VIA DI SAN GIORGIO, 642
-				TERRANUOVA BRACCIOLINI  AREZZO  52028
-				IT
-
-D0-14-11   (hex)		Airthings
-900000-9FFFFF     (base 16)		Airthings
-				Wergelandsveien 7
-				Oslo    0167
-				NO
-
-F4-69-D5   (hex)		ShenZhenShi EVADA technology Co.,Ltd
-A00000-AFFFFF     (base 16)		ShenZhenShi EVADA technology Co.,Ltd
-				Qianhai,No.1 qianwan Road
-				ShenZhen  Guangdong  518000
-				CN
-
-F4-69-D5   (hex)		Mossman Limited
-000000-0FFFFF     (base 16)		Mossman Limited
-				1014, 10/F, Leader Industrial Building,
-				57-59 Au Pui Wan Street, Fotan, Shatin  Hong Kong  NT
-				HK
-
-5C-85-7E   (hex)		Shenzhen IP3 Century Intelligent Technology CO.,Ltd
-400000-4FFFFF     (base 16)		Shenzhen IP3 Century Intelligent Technology CO.,Ltd
-				aiying.li@ip3-tech.com
-				Shenzhen    518057
-				CN
-
-5C-85-7E   (hex)		Shanghai Yanhe automation technology co.,LTD
-500000-5FFFFF     (base 16)		Shanghai Yanhe automation technology co.,LTD
-				Room E2204, Building 1, 5500 Yuan Jiang Road, MinHang District
-				ShangHai    201100
-				CN
-
-5C-85-7E   (hex)		ProdataKey
-600000-6FFFFF     (base 16)		ProdataKey
-				67 W 13490 S
-				Draper  UT  84020
-				US
-
-F4-69-D5   (hex)		Huaqin Telecom Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Huaqin Telecom Technology Co.,Ltd.
-				Building 1,No.399, Keyuan Road, Pudong, Shanghai China
-				Shanghai    200120
-				CN
-
-F4-69-D5   (hex)		Pulsar Engineering srl
-200000-2FFFFF     (base 16)		Pulsar Engineering srl
-				Via Giuseppe Caimi
-				Milano  MI  20136
-				IT
-
-F4-69-D5   (hex)		Rosco, Inc
-700000-7FFFFF     (base 16)		Rosco, Inc
-				90-21 144th Place
-				Jamaica  NY  11435
-				US
-
-4C-93-A6   (hex)		Private
-500000-5FFFFF     (base 16)		Private
-
-4C-93-A6   (hex)		Diehl Controls Nanjing Co., Ltd.
-200000-2FFFFF     (base 16)		Diehl Controls Nanjing Co., Ltd.
-				Jiangjun Avenue 139
-				Nanjing  Jiangsu  211100
-				CN
-
-4C-93-A6   (hex)		Commsignia, Ltd.
-300000-3FFFFF     (base 16)		Commsignia, Ltd.
-				Irinyi Jozsef u 4-20
-				Budapest    1117
-				HU
-
-28-B7-7C   (hex)		Shenzhen PUAS Industrial Co.,LTD
-800000-8FFFFF     (base 16)		Shenzhen PUAS Industrial Co.,LTD
-				2/F, C/Building, Huawang Industrial Park, LongHua New Area In Shenzhen 518106 P.R.C
-				Shenzhen  Guangdong  518106
-				CN
-
-28-B7-7C   (hex)		SolarEdge Technologies
-100000-1FFFFF     (base 16)		SolarEdge Technologies
-				1 Abba Eban St.
-				Herzelia    46725
-				IL
-
-C0-61-9A   (hex)		MAD PIECE LLC.
-700000-7FFFFF     (base 16)		MAD PIECE LLC.
-				2196 flatbush ave.
-				BROOKLYN  NY  11234
-				US
-
-C0-61-9A   (hex)		Nanjing Balance Network Technology Co., Ltd
-500000-5FFFFF     (base 16)		Nanjing Balance Network Technology Co., Ltd
-				9-10/F,building 01, No.8,Bailongjiang East Street,Jianye District
-				Nanjing  Jiangsu  210017
-				CN
-
-C0-61-9A   (hex)		Uhnder
-D00000-DFFFFF     (base 16)		Uhnder
-				3409 Executive Center Drive Ste205
-				Austin  TX  78731
-				US
-
-98-FC-84   (hex)		Jazwares LLC
-D00000-DFFFFF     (base 16)		Jazwares LLC
-				1067 Shotgun Rd
-				Sunrise  FL  33326
-				US
-
-98-FC-84   (hex)		Sferrum GmbH
-400000-4FFFFF     (base 16)		Sferrum GmbH
-				Kytyzovsky avenue, build 36/3, office 216
-				Moscow    121170
-				RU
-
-98-FC-84   (hex)		Shenzhen Incar Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Shenzhen Incar Technology Co., Ltd.
-				Zhongxi ECO International Building, Shuiku Rd., Baoan District
-				Shenzhen     518000
-				CN
-
-98-FC-84   (hex)		Leia, Inc
-000000-0FFFFF     (base 16)		Leia, Inc
-				2440 Sand Hill Road, STE 100, Menlo Park
-				Menlo Park  CA  94025
-				US
-
-18-FD-CB   (hex)		Staclar, Inc.
-300000-3FFFFF     (base 16)		Staclar, Inc.
-				2093 Philadelphia Pike
-				Claymont  DE  19703
-				US
-
-18-FD-CB   (hex)		Ark Vision Systems GmbH & Co. KG
-C00000-CFFFFF     (base 16)		Ark Vision Systems GmbH & Co. KG
-				Limburger Str., 51
-				Merenberg  Hessen  35799
-				DE
-
-18-FD-CB   (hex)		KWANG YANG MOTOR CO.,LTD
-E00000-EFFFFF     (base 16)		KWANG YANG MOTOR CO.,LTD
-				NO. 35, WAN HSING ST., SAN MIN DIST., KAOHSIUNG, TAIWAN, R.O.C
-				Kaohsiung    807
-				TW
-
-D0-14-11   (hex)		CYLTek Limited
-B00000-BFFFFF     (base 16)		CYLTek Limited
-				R603,6F.,NO.168,Sec.2,Fuxing 3rd.Rd.
-				Zhubei City,Hsinchu County    30273
-				TW
-
-18-FD-CB   (hex)		SKA Organisation
-600000-6FFFFF     (base 16)		SKA Organisation
-				Jodrell Bank, Lower Withington
-				Macclesfield  Cheshire  SK11 9FT
-				GB
-
-CC-4F-5C   (hex)		Smiths US Innovation LLC
-700000-7FFFFF     (base 16)		Smiths US Innovation LLC
-				3125 SKYWAY CT
-				Fremont  CA  94539
-				US
-
-CC-4F-5C   (hex)		Ontex BV
-B00000-BFFFFF     (base 16)		Ontex BV
-				Genthof 5
-				Buggenhout  NA  9255
-				BE
-
-CC-4F-5C   (hex)		Spark Biomedical
-400000-4FFFFF     (base 16)		Spark Biomedical
-				4428 Irvin Simmons Drive
-				Dallas  TX  75229
-				US
-
-CC-4F-5C   (hex)		lesswire GmbH
-100000-1FFFFF     (base 16)		lesswire GmbH
-				Rudower Chaussee 30
-				Berlin  Germany  12489
-				DE
-
-CC-4F-5C   (hex)		Beijing Cotytech Technology Co.,LTD.
-C00000-CFFFFF     (base 16)		Beijing Cotytech Technology Co.,LTD.
-				Rm2302,Block B,Haojing Building,Zhichunlu,Haidian District,Beijing
-				Beijing    100192
-				CN
-
-CC-4F-5C   (hex)		Watertech S.p.A.
-600000-6FFFFF     (base 16)		Watertech S.p.A.
-				STRADA ANTICA FORNACE 2/4
-				CANELLI  ITALY  14053
-				IT
-
-FC-CD-2F   (hex)		Ningbo Bull Digital Technology Co., LTD
-000000-0FFFFF     (base 16)		Ningbo Bull Digital Technology Co., LTD
-				No.32 Sanhai Road, East Guanhaiwei Industrial zone
-				Cixi City  Zhejiang   315314
-				CN
-
-58-95-D8   (hex)		Loftie
-900000-9FFFFF     (base 16)		Loftie
-				26 Grove St, Apt. 5C
-				New York  NY  10014
-				US
-
-58-95-D8   (hex)		Peak Communications Limited
-A00000-AFFFFF     (base 16)		Peak Communications Limited
-				Suite 1, Commercial House One, Eden Island, Republic of Seychelles
-				Eden Island    123
-				SC
-
-58-95-D8   (hex)		Shenzhen DOOGEE Hengtong Technology CO.,LTD
-000000-0FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO.,LTD
-				Shenzhen DOOGEE Hengtong Technology CO.,LTD
-				Shenzhen  Guangdong  518000
-				CN
-
-58-95-D8   (hex)		Norgren Manufacturing Co., Ltd.
-600000-6FFFFF     (base 16)		Norgren Manufacturing Co., Ltd.
-				Block 3, No 1885 Duhui Road, Minhang District
-				Shanghai  Shanghai  201108
-				CN
-
-DC-4A-9E   (hex)		Methodex Systems Pvt. Ltd.
-800000-8FFFFF     (base 16)		Methodex Systems Pvt. Ltd.
-				607-8 Meghdoot, 94 Nehru Place
-				New Delhi  Delhi  110019
-				IN
-
-DC-4A-9E   (hex)		Astrogate Inc.
-700000-7FFFFF     (base 16)		Astrogate Inc.
-				11F-6, No. 120, Qiaohe Rd., Zhonghe Dist.
-				New Taipei City    235
-				TW
-
-58-95-D8   (hex)		LOCTEK ERGONOMIC TECHNOLOGY CORP.
-C00000-CFFFFF     (base 16)		LOCTEK ERGONOMIC TECHNOLOGY CORP.
-				No. 588, Qihang South Road, Yinzhou Economic Development Zone
-				Ningbo City  Zhejiang  315100
-				CN
-
-DC-4A-9E   (hex)		TATTILE SRL
-600000-6FFFFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-DC-4A-9E   (hex)		HAPPIEST BABY INC.
-D00000-DFFFFF     (base 16)		HAPPIEST BABY INC.
-				3115 S La Cienega Blvd.
-				Los Angeles  CA  90016
-				US
-
-84-11-C2   (hex)		Kazdream Technologies LLP
-000000-0FFFFF     (base 16)		Kazdream Technologies LLP
-				10, Turkestan Str.
-				Nur-Sultan    010000
-				KZ
-
-84-11-C2   (hex)		LLC STC MZTA
-400000-4FFFFF     (base 16)		LLC STC MZTA
-				33/26 Mironovskaya str.
-				Moscow  Moscow  115280
-				RU
-
-84-11-C2   (hex)		Futurecom Systems Group
-200000-2FFFFF     (base 16)		Futurecom Systems Group
-				3277 Langstaff Rd
-				Concord  Ontario  L4K 5P8
-				CA
-
-68-79-12   (hex)		Copper Labs, Inc.
-500000-5FFFFF     (base 16)		Copper Labs, Inc.
-				3015 Sterling Circle #200
-				Boulder  CO  80301
-				US
-
-68-79-12   (hex)		Wingtech Mobile Communications Co., Ltd.
-A00000-AFFFFF     (base 16)		Wingtech Mobile Communications Co., Ltd.
-				No.777,Yazhong Road,Nanhu District,
-				Jiaxing  Zhejiang  314006
-				CN
-
-68-79-12   (hex)		CNDI CO.,LTD
-200000-2FFFFF     (base 16)		CNDI CO.,LTD
-				33-13, EUNHAENG-RO, 218 BEON-GIL
-				SIHEUNG-SI  GYEONGGI-DO  14908
-				KR
-
-68-79-12   (hex)		Swisscom Broadcast Ltd
-B00000-BFFFFF     (base 16)		Swisscom Broadcast Ltd
-				Ostermundigenstrasse 99
-				Bern    3050
-				CH
-
-8C-47-6E   (hex)		Chipsafer Pte. Ltd.
-000000-0FFFFF     (base 16)		Chipsafer Pte. Ltd.
-				2 Changi South Lane
-				Singapore    486123
-				SG
-
-8C-47-6E   (hex)		HuiZhou MIKI Communication Equipment Co.,LTD
-200000-2FFFFF     (base 16)		HuiZhou MIKI Communication Equipment Co.,LTD
-				NO.39,GuangTai Road HuiNan HI-techindustrial Park.Zhongkai Hi-tech Zone
-				Huizhou    516000
-				CN
-
-8C-47-6E   (hex)		Xertified AB
-900000-9FFFFF     (base 16)		Xertified AB
-				Horisontvagen 60
-				Stockholm  Stockholm  12830
-				SE
-
-34-04-9E   (hex)		ClearCaptions LLC
-C00000-CFFFFF     (base 16)		ClearCaptions LLC
-				595 Menlo Drive
-				Rocklin   CA  95765
-				US
-
-8C-AE-49   (hex)		Gigawave
-A00000-AFFFFF     (base 16)		Gigawave
-				Unit 4 Metro Business Park, ballycurreen
-				cork    T12 HP60
-				IE
-
-8C-AE-49   (hex)		TTR Corporation
-900000-9FFFFF     (base 16)		TTR Corporation
-				20-1 Iwaoshi-machi
-				Takasaki-shi  Gunma  370-0044
-				JP
-
-8C-AE-49   (hex)		Chengdu BillDTE Technology Co., Ltd
-600000-6FFFFF     (base 16)		Chengdu BillDTE Technology Co., Ltd
-				Chengdu BiiDTE Technology Co.,Ltd
-				Chengdu  Sichuan  610041
-				CN
-
-8C-AE-49   (hex)		Precitec Optronik GmbH
-700000-7FFFFF     (base 16)		Precitec Optronik GmbH
-				Schleussnerstraße 54
-				Neu-Isenburg  Hessen  63263
-				DE
-
-8C-AE-49   (hex)		Parametric GmbH
-C00000-CFFFFF     (base 16)		Parametric GmbH
-				Waldeggstrasse 82
-				Interlaken  BE  3800
-				CH
-
-8C-AE-49   (hex)		LLC Taipit - Measuring Equipment
-800000-8FFFFF     (base 16)		LLC Taipit - Measuring Equipment
-				Voroshilova, 2
-				Saint-Petersburg    193318
-				RU
-
-A4-53-EE   (hex)		Stellamore
-100000-1FFFFF     (base 16)		Stellamore
-				Room 1519, 15th Floor, Block A, Economic Building, Baoyuan Huafeng Headquarters, No. 288, Xixiang Avenue, Bao'an District
-				Shenzhen  Guangdong  518100
-				CN
-
-8C-AE-49   (hex)		Shenzhen C & D Electronics Co., Ltd.
-E00000-EFFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-A4-53-EE   (hex)		Dongguan HuaFuu industrial co., LTD
-900000-9FFFFF     (base 16)		Dongguan HuaFuu industrial co., LTD
-				Huafuu technology park,jinggangzhong Road,shatian
-				Dongguan  Guangdong  523841
-				CN
-
-A4-53-EE   (hex)		Ubisafe Smart Devices
-200000-2FFFFF     (base 16)		Ubisafe Smart Devices
-				Getulio Vargas 2729
-				Sao Jose  SC  88103-400
-				BR
-
-4C-93-A6   (hex)		4TheWall - 4D Sistem A.S
-400000-4FFFFF     (base 16)		4TheWall - 4D Sistem A.S
-				Oran Mah. Turan Gunes Bul. Park Oran Ofis 180-Y No:6 Cankaya 
-				ANKARA    06550
-				TR
-
-A0-02-4A   (hex)		Xiaojie Technology (Shenzhen) Co., Ltd
-600000-6FFFFF     (base 16)		Xiaojie Technology (Shenzhen) Co., Ltd
-				801#, Block B1,Kexing Secience Park, Hi-Tech Industrial Park, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-78-D4-F1   (hex)		Huaqin Telecom Technology Co.,Ltd.
-500000-5FFFFF     (base 16)		Huaqin Telecom Technology Co.,Ltd.
-				Building 1,No.399, Keyuan Road, Pudong, Shanghai China
-				Shanghai    200120
-				CN
-
-78-D4-F1   (hex)		shanghai baudcom communication device co.,ltd
-900000-9FFFFF     (base 16)		shanghai baudcom communication device co.,ltd
-				519A, Building A, Lianming Road 389, Minhang District
-				shanghai  shanghai  201101
-				CN
-
-78-D4-F1   (hex)		BYD Auto lndustry Co.,Ltd
-400000-4FFFFF     (base 16)		BYD Auto lndustry Co.,Ltd
-				No.3009 BYD Road, Building D23, BYD EPRI, PingShan District, 
-				ShenZhen  GuangDong  518118  
-				CN
-
-78-D4-F1   (hex)		Famar Fueguina S.A.
-700000-7FFFFF     (base 16)		Famar Fueguina S.A.
-				Rodney 70
-				Buenos Aires    1427
-				AR
-
-44-6F-D8   (hex)		Sichuan subao network technology ltd.co.
-000000-0FFFFF     (base 16)		Sichuan subao network technology ltd.co.
-				No. 704 Room ,  No. 599 South Century Town Road, High technology district, Chengdu 
-				chengdu  sichuan Province  610094
-				CN
-
-44-6F-D8   (hex)		ZHEJIANG SHIP ELECTRONICS & TECHNOLOGY CO., LTD.
-500000-5FFFFF     (base 16)		ZHEJIANG SHIP ELECTRONICS & TECHNOLOGY CO., LTD.
-				#6 GAOYA RD
-				NINGBO  ZHEJIANG PROVINCE  315191
-				CN
-
-44-6F-D8   (hex)		Changzhou Haitu Electronic Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Changzhou Haitu Electronic Technology Co.,Ltd
-				Building 47, Hang Seng Science park, Tianning District
-				Changzhou  Jiangsu  213000
-				CN
-
-98-27-82   (hex)		KORTEK CORPORATION
-700000-7FFFFF     (base 16)		KORTEK CORPORATION
-				26, Venture-ro24beon-gil, Yeonsu-gu
-				Incheon    22011
-				KR
-
-98-27-82   (hex)		Dspread Technology (Beijing) Inc.
-400000-4FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
-				Jingxin Building, 2045 Suite , Chaoyang District
-				Beijing    100027
-				CN
-
-8C-19-2D   (hex)		DataRemote Inc.
-200000-2FFFFF     (base 16)		DataRemote Inc.
-				18001 Old Cutler Rd. Suite 600
-				Palmetto Bay  FL  33157
-				US
-
-E8-6C-C7   (hex)		Limited Liability Company M.S.Korp
-C00000-CFFFFF     (base 16)		Limited Liability Company M.S.Korp
-				Mironovskaya st., 33, bldg.26, floor 4, office 5
-				Moscow  Russian Federation  105318
-				RU
-
-E8-6C-C7   (hex)		Trapeze Switzerland GmbH
-000000-0FFFFF     (base 16)		Trapeze Switzerland GmbH
-				Industrieplatz 3.
-				Neuhausen am Rheinfall  Schaffhausen  8212
-				CH
-
-04-11-19   (hex)		Herrick Tech Labs
-700000-7FFFFF     (base 16)		Herrick Tech Labs
-				20201 Century Blvd.
-				Germantown  MD  20874
-				US
-
-E8-6C-C7   (hex)		Lighthouse EIP
-800000-8FFFFF     (base 16)		Lighthouse EIP
-				21370 Heywood Avenue
-				Lakeville  MN  55044
-				US
-
-E8-6C-C7   (hex)		Xirgo Technologies LLC
-200000-2FFFFF     (base 16)		Xirgo Technologies LLC
-				188 Camino Ruiz
-				Camarillo  CA  93012
-				US
-
-E8-6C-C7   (hex)		Koal Software Co., Ltd
-400000-4FFFFF     (base 16)		Koal Software Co., Ltd
-				Floor 6, Building 4, Lane 299, Jiangchang West Road, Jing 'an District
-				Shanghai  Shanghai  200436
-				CN
-
-24-5D-FC   (hex)		Cosmicnode
-800000-8FFFFF     (base 16)		Cosmicnode
-				Zandstrand
-				Eindhoven  North Brabant  5658BJ
-				NL
-
-24-5D-FC   (hex)		Suzhou Jiangzhi electronic technology co., Ltd
-400000-4FFFFF     (base 16)		Suzhou Jiangzhi electronic technology co., Ltd
-				Room 303, Building 2, No.88 Baifu Road, Kunshan Development Zone
-				Kunshan  Jiangsu  215300
-				CN
-
-60-15-92   (hex)		S Labs sp. z o.o.
-000000-0FFFFF     (base 16)		S Labs sp. z o.o.
-				Dworska 1a/1u
-				Kraków  Lesser Poland  30-314
-				PL
-
-60-15-92   (hex)		Annapurna labs
-B00000-BFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-60-15-92   (hex)		Zaptec
-400000-4FFFFF     (base 16)		Zaptec
-				Richard Johnsensgate 4
-				Stavanger   Rogaland  N-4021
-				NO
-
-0C-5C-B5   (hex)		The Raymond Corporation
-500000-5FFFFF     (base 16)		The Raymond Corporation
-				22 South Canal St
-				Greene  NY  13778
-				US
-
-0C-5C-B5   (hex)		ADI
-B00000-BFFFFF     (base 16)		ADI
-				2 Crest Hollow Lane
-				Manorville  NY  11949
-				US
-
-1C-A0-EF   (hex)		Shenzhen Liandian Communication Technology Co.LTD
-D00000-DFFFFF     (base 16)		Shenzhen Liandian Communication Technology Co.LTD
-				1307, building A4, workshop 2, LiLang International Jewelry Industrial Park, 31 Bulan Road, xialilang community, Nanwan street, Longgang District
-				Shenzhen  Guangdong  518112
-				CN
-
-1C-A0-EF   (hex)		Wisnu and Supak Co.,Ltd.
-100000-1FFFFF     (base 16)		Wisnu and Supak Co.,Ltd.
-				102/111-112  Mooban  Sinpattanatanee,, Tessabansongkroh  Road.,     Ladyao,  Jatujak,
-				Jatujak  Bangkok Metropolis  10900
-				TH
-
-88-C9-B3   (hex)		Shenzhen MMUI Co.,Ltd
-B00000-BFFFFF     (base 16)		Shenzhen MMUI Co.,Ltd
-				Shenzhen MMUI Co.,Ltd
-				Shenzhen  Guangdong  518000
-				CN
-
-88-C9-B3   (hex)		Robert Bosch JuP1
-700000-7FFFFF     (base 16)		Robert Bosch JuP1
-				Robert Bosch 1150
-				Juarez  Chihuahua  32557
-				MX
-
-C8-F5-D6   (hex)		Yarward Electronics  Co., Ltd.
-800000-8FFFFF     (base 16)		Yarward Electronics  Co., Ltd.
-				9509 Qinglongshan Street
-				Zibo  Shandong  255089
-				CN
-
-C8-F5-D6   (hex)		Valeo Interior Controls (Shenzhen) Co.,Ltd
-100000-1FFFFF     (base 16)		Valeo Interior Controls (Shenzhen) Co.,Ltd
-				North Junyi Ind. Park, Huaide Vil., Fuyong Town, Baoan Dist.
-				Shenzhen  Guangzhong  518103
-				CN
-
-C0-FB-F9   (hex)		Dongmengling
-800000-8FFFFF     (base 16)		Dongmengling
-				Floor 1, pool-side building, Villa district, Jiuwei Xiange Musical Instrument Co. , Ltd. , Jiuwei community, Hangcheng Street, Bao 'an district
-				Shenzhen  Guangdong  518000
-				CN
-
-C8-F5-D6   (hex)		Qbic Technology Co., Ltd
-200000-2FFFFF     (base 16)		Qbic Technology Co., Ltd
-				26F.-12, No.99, Sec. 1, Xintai 5th Rd., Xizhi Dist.,
-				New Taipei     22175
-				TW
-
-C8-F5-D6   (hex)		EVOTOR LLC
-400000-4FFFFF     (base 16)		EVOTOR LLC
-				Timura Frunze Str., 24
-				Moscow    119021
-				RU
-
-C0-FB-F9   (hex)		Dongguan Chuan OptoElectronics Limited
-200000-2FFFFF     (base 16)		Dongguan Chuan OptoElectronics Limited
-				No.43 Songshui Road,Songmushan Village, Dalang Town
-				Dongguan  Guangdong  523795
-				CN
-
-C0-FB-F9   (hex)		IVT corporation
-600000-6FFFFF     (base 16)		IVT corporation
-				5/F, Zhongguancun Fazhan Building, No 12, Shangdi Xinxi Road, Haidian District, Beijing, 100085, P.R. CHINA
-				Beijing    100085
-				CN
-
-18-74-E2   (hex)		HANGZHOU ZHOUJU ELECTRONIC TECHNOLOGICAL CO.,LTD 
-500000-5FFFFF     (base 16)		HANGZHOU ZHOUJU ELECTRONIC TECHNOLOGICAL CO.,LTD 
-				Floor 6,A Building, Xianxing Road NO.32,Xianlin Town,Yuhang District
-				Hangzhou  Zhejiang  311122
-				CN
-
-18-74-E2   (hex)		Shenzhen Jooan Technology  Co., Ltd
-B00000-BFFFFF     (base 16)		Shenzhen Jooan Technology  Co., Ltd
-				Area B, Floor 101-2, Floor 3, Floor 5 and Floor 6 of area B, Building No. 8, Guixiang Community Plaza Road, Guanlan Street, Longhua District, Shenzhen. 
-				Shenzhen  Guangdong  518000
-				CN
-
-18-74-E2   (hex)		SHENZHEN AORO COMMUNICATION EQUIPMENT CO., LTD
-900000-9FFFFF     (base 16)		SHENZHEN AORO COMMUNICATION EQUIPMENT CO., LTD
-				ROOM 302, 3RD FLOOR BUILDING A9, NO.6 YUANCHUANGYUAN,FUHUA ROAD, JUTANG COMMUNITY, FUCHENG STREET, LONGHUA DISTRICT
-				SHENZHEN  GUANGDONG  518110
-				CN
-
-18-74-E2   (hex)		Shenzhen WITSTECH Co.,Ltd.
-200000-2FFFFF     (base 16)		Shenzhen WITSTECH Co.,Ltd.
-				5D4, Block CD, Tianji Building, Tian'an Digital City, Futian District, Shenzhen
-				Shenzhen  Guangdong?China  518040
-				CN
-
-18-74-E2   (hex)		Beijing Jrunion Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Beijing Jrunion Technology Co., Ltd.
-				Room 01, 2nd Floor, Building 8, Yuquanhuigu, No. 3, Minzhuang Road, Haidian District
-				Beijing  Beijing  100195
-				CN
-
-FC-CD-2F   (hex)		QCTEK CO.,LTD.
-500000-5FFFFF     (base 16)		QCTEK CO.,LTD.
-				6F-1., No.496, Bannan Rd., Zhonghe Dist.,
-				New Taipei City  New Taipei City  235
-				TW
-
-E8-78-29   (hex)		FAIOT Co., LTD
-700000-7FFFFF     (base 16)		FAIOT Co., LTD
-				Room 1101, Building 23, No.1999 Yishan Road, Minhang District
-				Shanghai    200233
-				CN
-
-E8-78-29   (hex)		JVISMall CO.,LTD
-800000-8FFFFF     (base 16)		JVISMall CO.,LTD
-				Rm903, BY B/D, Seogang-ro133, Mapo Gu
-				Seoul    04058
-				KR
-
-78-13-05   (hex)		Shanghai Siminics Optoelectronic Technology Co., Ltd
-D00000-DFFFFF     (base 16)		Shanghai Siminics Optoelectronic Technology Co., Ltd
-				Room 9, Building 15, Huatai Center Jinyun Rd
-				Shanghai    201803
-				CN
-
-E8-78-29   (hex)		Annapurna labs
-400000-4FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-78-13-05   (hex)		LEAFF ENGINEERING SRL
-200000-2FFFFF     (base 16)		LEAFF ENGINEERING SRL
-				Via Pastore 10
-				Osimo  AN  60027
-				IT
-
-78-13-05   (hex)		Brigates Microelectronics Co., Ltd.
-C00000-CFFFFF     (base 16)		Brigates Microelectronics Co., Ltd.
-				2007,Building 7, No. 1588 Chuangye Road
-				Kunshan  Jiangsu  215300
-				CN
-
-98-6D-35   (hex)		Advanced Diagnostics LTD
-900000-9FFFFF     (base 16)		Advanced Diagnostics LTD
-				Diagnostics House, Eastboro Fields, Hemdale
-				Nuneaton  Warwickshire  CV116GL
-				GB
-
-A8-5B-36   (hex)		Shenzhen Dandelion Intelligent Cloud Technology Development Co., LTD
-300000-3FFFFF     (base 16)		Shenzhen Dandelion Intelligent Cloud Technology Development Co., LTD
-				1101, 1102, 1103, 1108A, Building E, Phase II, Galaxy WORLD, Minle Community, Minzhi Street, Longhua District
-				Shenzhen  Guangdong  518100
-				CN
-
-A8-5B-36   (hex)		ATER Technologies Co Ltd
-C00000-CFFFFF     (base 16)		ATER Technologies Co Ltd
-				Floor 5,Building 1,HongYe Industry Park,Baoan district
-				Shenzhen  Guangdong  518100
-				CN
-
-78-13-05   (hex)		microtec Sicherheitstechnik GmbH
-300000-3FFFFF     (base 16)		microtec Sicherheitstechnik GmbH
-				Auf der Langwies 20
-				Hünstetten    65510
-				DE
-
-A8-5B-36   (hex)		JUGANU LTD
-500000-5FFFFF     (base 16)		JUGANU LTD
-				Yehadut Canada St. 1
-				Or Yehuda  Israel  6037501
-				IL
-
-F0-2A-2B   (hex)		Frigotel SRL
-300000-3FFFFF     (base 16)		Frigotel SRL
-				Via Trezza, 49
-				San Donà di Piave    30027
-				IT
-
-A8-5B-36   (hex)		Loomanet Inc.
-200000-2FFFFF     (base 16)		Loomanet Inc.
-				900 Lafayette St. Suite 704
-				Santa Clara  CA  95050
-				US
-
-F0-2A-2B   (hex)		Comexio GmbH
-C00000-CFFFFF     (base 16)		Comexio GmbH
-				Eisenberger Straße 56a
-				Kerzenheim    67304
-				DE
-
-44-A9-2C   (hex)		Amethystum Storage Technology Co., Ltd
-B00000-BFFFFF     (base 16)		Amethystum Storage Technology Co., Ltd
-				Guangzhou(Meizhou) Industry Transfer Zone,
-				Meizhou  Guangdong  514079
-				CN
-
-44-A9-2C   (hex)		RT-Systemtechnik GmbH
-800000-8FFFFF     (base 16)		RT-Systemtechnik GmbH
-				Jacksonring 4
-				Rheine    48429
-				DE
-
-44-A9-2C   (hex)		Anhui Zhongxin Electronic Technology Co., Ltd.
-200000-2FFFFF     (base 16)		Anhui Zhongxin Electronic Technology Co., Ltd.
-				South Head, No.11, Building 2, Huayuan Commercial Building,6km, Changqing Township, Yuhui District, Bengbu City,Anhui Province
-				Bengbu  Anhui  233010
-				CN
-
-44-A9-2C   (hex)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
-000000-0FFFFF     (base 16)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
-				Room 201 and 202,Building 5,328 Pingjiang Road,Yuecheng District,Shaoxing
-				Shaoxing  Zhejiang  312000
-				CN
-
-44-A9-2C   (hex)		Ningbo joyson new energy automotive technology Co.,Ltd
-600000-6FFFFF     (base 16)		Ningbo joyson new energy automotive technology Co.,Ltd
-				No.1266 Juxian Road, Hi-Tech Park
-				Ningbo  Zhejiang  315000
-				CN
-
-58-48-49   (hex)		X-speed lnformation Technology Co.,Ltd
-200000-2FFFFF     (base 16)		X-speed lnformation Technology Co.,Ltd
-				th Floor,Building 2,Xinyu Electronic Industrial Park,No.69, Zhaishan,Houshan Village, High-tech Zone,Fuzhou,Fujian ,China
-				Fuzhou    350000
-				CN
-
-64-33-B5   (hex)		Adesso, Inc
-200000-2FFFFF     (base 16)		Adesso, Inc
-				20659 Valley Boulevard
-				Walnut  CA  91789
-				US
-
-28-36-13   (hex)		shenzhen technology limited
-700000-7FFFFF     (base 16)		shenzhen technology limited
-				903,No. 1 Shifeng Building, Xinzhuang Community Villa Road, Matian Street, Guangming District, Shenzhen City
-				Shenzhen  Guangdong  518000
-				CN
-
-04-71-4B   (hex)		uAvionix Corporation
-100000-1FFFFF     (base 16)		uAvionix Corporation
-				300 Pine Needle Lane
-				Bigfork  MT  59911
-				US
-
-64-33-B5   (hex)		Geksacon
-C00000-CFFFFF     (base 16)		Geksacon
-				Revolutionary Street 78
-				Ufa  Republic of Bashkortostan  450005
-				RU
-
-78-5E-E8   (hex)		Guangdong COROS Sports Technology Co., Ltd
-600000-6FFFFF     (base 16)		Guangdong COROS Sports Technology Co., Ltd
-				ROOM 601 ROOM 701,BLD.2,NO.2,SCIENCE AND TECHNOLOGY 9 RD,SONGSHAN LAKE HI-TECH ZONE
-				Dongguan  Guangdong  523808
-				CN
-
-38-A8-CD   (hex)		OUTFORM
-E00000-EFFFFF     (base 16)		OUTFORM
-				82 NE 26th Street Suite #103
-				Miami  FL  33137
-				US
-
-7C-83-34   (hex)		PRO BRAND TECHNOLOGY (TW)
-500000-5FFFFF     (base 16)		PRO BRAND TECHNOLOGY (TW)
-				14F-6,1071 Chung Cheng Road
-				Taoyuan     330
-				TW
-
-1C-AE-3E   (hex)		Annapurna labs
-600000-6FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-1C-AE-3E   (hex)		FORME
-D00000-DFFFFF     (base 16)		FORME
-				204 west spear street suite 3697
-				carson city  NV  89703
-				US
-
-1C-AE-3E   (hex)		Beijing SuperCloud Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		Beijing SuperCloud Technology Co., Ltd.
-				yizhuang 
-				beijing  beijing  100176
-				CN
-
-98-6E-E8   (hex)		Fujitsu component limited
-400000-4FFFFF     (base 16)		Fujitsu component limited
-				SHINAGAWA SEASIDE PARK TOWER, 12-4, Higashi-shinagawa
-				4-chome, Shinagawa-ku,  Tokyo  140-8586
-				JP
-
-78-13-05   (hex)		E-Stone Electronics Co., Ltd
-700000-7FFFFF     (base 16)		E-Stone Electronics Co., Ltd
-				Room 0355, Unit 109, No. 62, Chengyi North Street, Software Park Phase III, Xiamen City
-				Fujian  Fujian  361000
-				CN
-
-98-6E-E8   (hex)		Sercomm Corporation.
-C00000-CFFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-98-80-BB   (hex)		Shenzhen Ginto E-commerce CO.,LTD
-400000-4FFFFF     (base 16)		Shenzhen Ginto E-commerce CO.,LTD
-				Room 1308-1309, Building B, Huihai Square, Chuangye Road, Longhua District, Shenzhen
-				Shenzhen  Guangdong  570100
-				CN
-
-78-72-64   (hex)		QT systems ab
-D00000-DFFFFF     (base 16)		QT systems ab
-				Finnbacksgatan 11
-				Lycksele  Västerbotten  921 32
-				SE
-
-78-72-64   (hex)		SHENZHEN FANGZHICHENG TECHNOLOGY CO., LTD.
-900000-9FFFFF     (base 16)		SHENZHEN FANGZHICHENG TECHNOLOGY CO., LTD.
-				SHENZHEN FANGZHICHENG TECHNOLOGY CO., LTD.
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-78-72-64   (hex)		Gsou Technology(Shenzhen)Co.,Ltd
-800000-8FFFFF     (base 16)		Gsou Technology(Shenzhen)Co.,Ltd
-				18B.Block B,First World Plaza,No.7002 West HongLi road,Futian,
-				ShenZhen    518000
-				CN
-
-98-FC-84   (hex)		ZeXin (Shanghai) Information Technologies Co.,Ltd
-300000-3FFFFF     (base 16)		ZeXin (Shanghai) Information Technologies Co.,Ltd
-				Room 205E Building 5#,545 Hulan Road,Baoshan District,Shanghai City
-				Shanghai    200000
-				CN
-
-3C-39-E7   (hex)		HomeWizard B.V.
-200000-2FFFFF     (base 16)		HomeWizard B.V.
-				Keyserswey 79
-				Noordwijk  Zuid-Holland  2201CX
-				NL
-
-F4-70-0C   (hex)		Annapurna labs
-900000-9FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-F4-70-0C   (hex)		Jinan USR IOT Technology Limited
-600000-6FFFFF     (base 16)		Jinan USR IOT Technology Limited
-				Floor F1 & Part of Floor F2, Building No. 9,Diya shuang chuang Industrial Zone, No.2566,Century Main Road,Gaoxin District Jinan,Shandong China
-				Shandong  Jinan  250014
-				CN
-
-F4-70-0C   (hex)		Beijing ASU Tech Co., Ltd.
-200000-2FFFFF     (base 16)		Beijing ASU Tech Co., Ltd.
-				11th Floor Block A, Beijing Normal University Science & Technology Mansion, No.12 Xueyuan South Road,Haidian District,Beijing, China
-				Beijing    100088
-				CN
-
-F4-70-0C   (hex)		Freeus LLC
-D00000-DFFFFF     (base 16)		Freeus LLC
-				1069 Stewart Drive, Suites 3-6
-				Ogden  UT  84404
-				US
-
-F4-A4-54   (hex)		Denshijiki Industry Co.,Ltd
-500000-5FFFFF     (base 16)		Denshijiki Industry Co.,Ltd
-				5-6-20 Ukima
-				Kita-ku  Tokyo-to  115-0051
-				JP
-
-F4-A4-54   (hex)		Earshots
-400000-4FFFFF     (base 16)		Earshots
-				Aviation Way
-				Palmerston North  Manawatu  4410
-				NZ
-
-18-45-B3   (hex)		Pfannenberg GmbH
-100000-1FFFFF     (base 16)		Pfannenberg GmbH
-				Werner-Witt-Straße 1
-				Hamburg  Hamburg  21035
-				DE
-
-18-45-B3   (hex)		leetop tech co.,ltd
-000000-0FFFFF     (base 16)		leetop tech co.,ltd
-				2203 Changhong Technology Building, Science and Technology Park
-				shenzhen city  GD province  518053
-				CN
-
-F4-A4-54   (hex)		Annapurna labs
-A00000-AFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-18-45-B3   (hex)		Haier cloud Health Technology (Qingdao) Co., Ltd
-200000-2FFFFF     (base 16)		Haier cloud Health Technology (Qingdao) Co., Ltd
-				Room c1-201, No. 127, huizhiqiao Road, high tech Zone
-				Qingdao  Shandong  266114
-				CN
-
-18-45-B3   (hex)		ShenZhen Topband Co.,Ltd
-800000-8FFFFF     (base 16)		ShenZhen Topband Co.,Ltd
-				Topband Industrial Park, Shiyan Town, Bao'anDistrict,Shenzhen
-				Shenzhen    518000
-				CN
-
-94-C9-B7   (hex)		Annapurna labs
-200000-2FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-50-A0-30   (hex)		Jiangsu Jinshi Legend Technology Co.,Ltd
-500000-5FFFFF     (base 16)		Jiangsu Jinshi Legend Technology Co.,Ltd
-				North-2, floor 13, building A3, No. 8, Bailongjiang East Street, Xincheng Science Park, Jianye District, Nanjing
-				Nanjing    210005
-				CN
-
-94-C9-B7   (hex)		C-Mer Rainsoptics Limited
-100000-1FFFFF     (base 16)		C-Mer Rainsoptics Limited
-				Room 607, 6/F, 17W of Hong Kong Science Park, No.17 Science Park West Avenue 
-				Shatin  Hong Kong  000000
-				HK
-
-50-A0-30   (hex)		SHANGHAI ZXELINK Co.,Ltd
-B00000-BFFFFF     (base 16)		SHANGHAI ZXELINK Co.,Ltd
-				No.889 Bibo Road, Zhangjiang Hi-Tech Park
-				Shanghai  Shanghai Province  200000
-				CN
-
-7C-BA-CC   (hex)		Fortem Technologies, Inc.
-500000-5FFFFF     (base 16)		Fortem Technologies, Inc.
-				1064 S NORTH COUNTY BLVD STE 600
-				PLEASANT GROVE  UT  84062-3446
-				US
-
-50-DE-19   (hex)		Clear Flow by Antiference
-100000-1FFFFF     (base 16)		Clear Flow by Antiference
-				Unit 2 Common Lane Fradley Park
-				Lichfield  Staffordshire  WS13 8NQ
-				GB
-
-50-A0-30   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-D00000-DFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-50-A0-30   (hex)		HANKOOK CTEC CO,. LTD.
-E00000-EFFFFF     (base 16)		HANKOOK CTEC CO,. LTD.
-				404 Hallasigmavalley, 53, Gasandigital 2-ro Geumcheongu
-				Seoul    08588
-				KR
-
-18-D7-93   (hex)		zhejiang Anhong technology co.,ltd
-A00000-AFFFFF     (base 16)		zhejiang Anhong technology co.,ltd
-				Floor 3, Building 2, No.6, Changtai Street, Changkou Town, Fuyang District
-				hangzhou  zhejiang  311400
-				CN
-
-18-D7-93   (hex)		Kraken Technologies Ltd
-D00000-DFFFFF     (base 16)		Kraken Technologies Ltd
-				33 Holborn
-				London    EC1N 2HT
-				GB
-
-18-D7-93   (hex)		Clarity Medical Pvt Ltd
-900000-9FFFFF     (base 16)		Clarity Medical Pvt Ltd
-				PLOT No. 1687A, JLPL  INDUSTRIAL AREA, SECTOR 82, MOHALI
-				MOHALI  Punjab  140306
-				IN
-
-04-EE-E8   (hex)		SHENZHEN TOPWELL TECHNOLOGY CO., LTD.
-D00000-DFFFFF     (base 16)		SHENZHEN TOPWELL TECHNOLOGY CO., LTD.
-				15/F, Building A1, Qiaode Science & Technology Park, No.7 Road, Hi-Tech Industry Park ,Guangming new district
-				Shenzhen  Guang Dong   518000
-				CN
-
-04-EE-E8   (hex)		daishin
-C00000-CFFFFF     (base 16)		daishin
-				9828-15 Kataokaimaizumi
-				Shiojiri-shi  Nagano-ken  3990711
-				JP
-
-18-D7-93   (hex)		Annapurna labs
-100000-1FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-DC-36-43   (hex)		Fresenius Medical Care R&D (Shanghai) Co.,Ltd.
-400000-4FFFFF     (base 16)		Fresenius Medical Care R&D (Shanghai) Co.,Ltd.
-				Building 15, No. 1036 Tianlin road, Shanghai
-				shanghai    200233
-				CN
-
-08-26-AE   (hex)		ZaiNar
-200000-2FFFFF     (base 16)		ZaiNar
-				2 Davis Drive, Unit 1
-				Belmont  CA  94002
-				US
-
-98-8F-E0   (hex)		Dongguan Synst Electronics Co., LTD.
-B00000-BFFFFF     (base 16)		Dongguan Synst Electronics Co., LTD.
-				No. 20, Fudong Road, Houjie Town
-				Dongguan  Guangdong  523966
-				CN
-
-98-8F-E0   (hex)		vhf elektronik GmbH
-200000-2FFFFF     (base 16)		vhf elektronik GmbH
-				Melli-Beese-Str. 24
-				Fuerth  Bavaria  90768
-				DE
-
-98-8F-E0   (hex)		Shenzhen Micro&Nano Perception Computing Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Shenzhen Micro&Nano Perception Computing Technology Co.,Ltd
-				shenzhenshifutianquzhongkanglu136haoxinyidaichanyeyuan4dong6lou
-				shenzhen  guangdong  518000
-				CN
-
-08-26-AE   (hex)		Shenzhen Hai yingZhilian Industrial Co., Ltd.
-300000-3FFFFF     (base 16)		Shenzhen Hai yingZhilian Industrial Co., Ltd.
-				2-5/F? #8FactoryBld?Yu'an Factory Area ?LongchengIndustryPark?Gao feng Community ?Dalang Street ?
-				Shenzhen  Guangdong   518110
-				CN
-
-98-8F-E0   (hex)		Empowerment Technologies Inc.
-300000-3FFFFF     (base 16)		Empowerment Technologies Inc.
-				590 York Rd., Unit 2
-				Niagara-on-the-Lake  Ontario  L0S 1J0
-				CA
-
-94-05-BB   (hex)		closip Inc.
-700000-7FFFFF     (base 16)		closip Inc.
-				3F, Canal Square Shibaura, 3-14-18 Shibaura
-				Tokyo  Minato  108-0023
-				JP
-
-0C-86-29   (hex)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
-900000-9FFFFF     (base 16)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
-				RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK
-				HONGKONG    999077
-				CN
-
-0C-86-29   (hex)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
-D00000-DFFFFF     (base 16)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
-				27 Shucun West Road, Haidian District,
-				Beijing    100089
-				CN
-
-0C-86-29   (hex)		Shenzhen protostellar technology Co., Ltd
-500000-5FFFFF     (base 16)		Shenzhen protostellar technology Co., Ltd
-				 4/F, #16, DaKan Yangmen industrial park, XiLi town,  Nanshan district
-				ShenZhen  GuangDong  518055
-				CN
-
-0C-86-29   (hex)		Akribis Systems
-B00000-BFFFFF     (base 16)		Akribis Systems
-				Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5
-				Singapore  Singapore  569876
-				SG
-
-6C-93-08   (hex)		Shenzhen C & D Electronics Co., Ltd.
-500000-5FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-6C-93-08   (hex)		Braums
-000000-0FFFFF     (base 16)		Braums
-				Unit M 10-16 South st
-				Rydalmere   NSW  2116
-				AU
-
-6C-93-08   (hex)		WATERFORD CONSULTANTS LLC
-100000-1FFFFF     (base 16)		WATERFORD CONSULTANTS LLC
-				7430 NEW TECHNOLOGY WAY, Suite 150
-				FREDERICK    21703
-				US
-
-50-FF-99   (hex)		COYOTE SYSTEM
-100000-1FFFFF     (base 16)		COYOTE SYSTEM
-				24 quai Gallieni
-				Suresnes    92150
-				FR
-
-30-43-D7   (hex)		Apollo Infoways Private Limited
-200000-2FFFFF     (base 16)		Apollo Infoways Private Limited
-				G-149, Sector-63
-				Noida  Uttar Pradesh  201301
-				IN
-
-30-43-D7   (hex)		Luxshare Electronic Technology (Kunshan) LTD
-300000-3FFFFF     (base 16)		Luxshare Electronic Technology (Kunshan) LTD
-				No.158,Jinchang Road,Jinxi Town,Kunshan City,Jiangsu Province,215324, China
-				Kunshan  Jiangsu  215324
-				CN
-
-38-1F-26   (hex)		Avon Protection
-800000-8FFFFF     (base 16)		Avon Protection
-				503 8th Street
-				Cadillac  MI  49601
-				US
-
-30-43-D7   (hex)		DIGICITI Technology Co.,Ltd
-700000-7FFFFF     (base 16)		DIGICITI Technology Co.,Ltd
-				Room 3502,Building 1,Huide Building,North Station Community,Minzhi Street,Longhua District
-				Shenzhen  Guangdong  518000
-				CN
-
-38-1F-26   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-100000-1FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-38-1F-26   (hex)		SMS Evoko Group AB
-900000-9FFFFF     (base 16)		SMS Evoko Group AB
-				Hastholmsvagen 32
-				Nacka    13130
-				SE
-
-18-A5-9C   (hex)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
-B00000-BFFFFF     (base 16)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
-				AVENIDA TORQUATO TAPAJOS, 7503 TARUMA GALPAO 2 - CNPJ: 07.200.194/0003-80
-				MANAUS  AMAZONAS  69041-025
-				BR
-
-18-A5-9C   (hex)		Thermia AB
-500000-5FFFFF     (base 16)		Thermia AB
-				Snickaregatan 1
-				Arvika    67134
-				SE
-
-18-A5-9C   (hex)		BlueEyes Technology
-C00000-CFFFFF     (base 16)		BlueEyes Technology
-				7F-3, No.200, Sec. 4, Wenxin Rd.,
-				Taichung City  Taiwan  40462
-				TW
-
-9C-43-1E   (hex)		SHURE INCORPORATED
-E00000-EFFFFF     (base 16)		SHURE INCORPORATED
-				2552 White Road, Suite A
-				Irvine  CA  92614
-				US
-
-1C-59-74   (hex)		Globe Tracker ApS
-E00000-EFFFFF     (base 16)		Globe Tracker ApS
-				Strandgade 91
-				kobenhavn  State / Province*  1401
-				DK
-
-C4-A1-0E   (hex)		HYOSUNG HEAVY INDUSTRIES
-000000-0FFFFF     (base 16)		HYOSUNG HEAVY INDUSTRIES
-				119, Mapo-daero (Gongdeok-dong), Mapo-gu
-				Seoul    04144
-				KR
-
-C4-A1-0E   (hex)		Consolinno Energy GmbH
-300000-3FFFFF     (base 16)		Consolinno Energy GmbH
-				Franz-Mayer-Straße 1
-				Regensburg  Bayern  93053
-				DE
-
-C4-A1-0E   (hex)		Connectlab SRL
-D00000-DFFFFF     (base 16)		Connectlab SRL
-				via donatello 30
-				Milano  Milano  20131 - Milano
-				IT
-
-C4-A1-0E   (hex)		BARTEC PIXAVI AS
-100000-1FFFFF     (base 16)		BARTEC PIXAVI AS
-				Vestre Svanholmen 24
-				SANDNES  Rogaland  4313
-				NO
-
-C4-A1-0E   (hex)		Ayla Networks (Shenzhen) Co., Ltd.
-800000-8FFFFF     (base 16)		Ayla Networks (Shenzhen) Co., Ltd.
-				Room 1501, Building B, Innovation Building, No.198 Daxin Road, Majialong Community ,Nantou Street,Nanshan District, 
-				Shenzhen    518000
-				CN
-
-70-50-E7   (hex)		Shenzhen Dangs Science and Technology CO.,Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Dangs Science and Technology CO.,Ltd.
-				9th Floor of GDC Building, Gaoxin Middle 3rd St.,Nanshan District
-				Shenzhen  GuangDong  518063
-				CN
-
-70-50-E7   (hex)		KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
-E00000-EFFFFF     (base 16)		KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
-				3F,No.4Building,Yuyao Technology Innovation Center
-				Ningbo  ZheJiang Province, P.R.C.  315400
-				CN
-
-80-7B-85   (hex)		SCALA Digital Technology(Ningbo) CO, LTD
-C00000-CFFFFF     (base 16)		SCALA Digital Technology(Ningbo) CO, LTD
-				7 Hong Da Road, Hong Tang Industrial Park Zone A
-				Ningbo  Zhejiang  315040
-				CN
-
-80-02-F4   (hex)		Baicells Technologies Co., Ltd
-B00000-BFFFFF     (base 16)		Baicells Technologies Co., Ltd
-				10-11F,AL, No.1 Zhongguancun, Haidian
-				Beijing  Beijing  100094
-				CN
-
-80-02-F4   (hex)		BK Networks Co,. Ltd.
-000000-0FFFFF     (base 16)		BK Networks Co,. Ltd.
-				330 Suin-ro, Gwonseon-gu
-				Suwon-si  Gyeonggi-do  16371
-				KR
-
-8C-51-09   (hex)		Heliox Automotive B.V.
-500000-5FFFFF     (base 16)		Heliox Automotive B.V.
-				De Waal 24
-				Best    5684 PH
-				NL
-
-8C-51-09   (hex)		Amzetta Technologies, LLC
-100000-1FFFFF     (base 16)		Amzetta Technologies, LLC
-				5555 Oakbrook Pkwy, Suite 280
-				Norcross  GA  30093
-				US
-
-FC-61-79   (hex)		Qisda Corporation
-500000-5FFFFF     (base 16)		Qisda Corporation
-				No. 157, Shanying Rd., Gueishan Dist., Taoyuan City 33341, Taiwan
-				Taoyuan    33341
-				TW
-
-0C-7F-ED   (hex)		Guangdong Tianshu New Energy Technology Co., Ltd
-000000-0FFFFF     (base 16)		Guangdong Tianshu New Energy Technology Co., Ltd
-				No.8 Huishang Road, Infore Enviro Industrial Park, Jiangcun Village, Leliu Street, Shunde District, 
-				Foshan    528000
-				CN
-
-0C-7F-ED   (hex)		Annapurna labs
-A00000-AFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-4C-4B-F9   (hex)		Shenzhen dingsheng technology co., LTD
-400000-4FFFFF     (base 16)		Shenzhen dingsheng technology co., LTD
-				Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district
-				Shenzhen  Guangdong  518000
-				CN
-
-4C-4B-F9   (hex)		Connected IO
-C00000-CFFFFF     (base 16)		Connected IO
-				8304 Esters Boulevard, Suite 850
-				Irving  TX  75063
-				US
-
-4C-4B-F9   (hex)		Zivid AS
-800000-8FFFFF     (base 16)		Zivid AS
-				Gjerdrums vei 10A
-				Oslo    0484
-				NO
-
-20-85-93   (hex)		Hemina Spa
-000000-0FFFFF     (base 16)		Hemina Spa
-				Hemina SPA, via Piemonte 2
-				Montangnana  Padova  35044
-				IT
-
-20-85-93   (hex)		Regloplas AG
-C00000-CFFFFF     (base 16)		Regloplas AG
-				Flurhofstrasse 158c
-				St. Gallen    9006
-				CH
-
-4C-4B-F9   (hex)		Jiangsu acrel Co., Ltd.
-100000-1FFFFF     (base 16)		Jiangsu acrel Co., Ltd.
-				No. 5, Dongmeng Road, Nanzha Street
-				Jiangyin City   Jiangsu Province  214400
-				CN
-
-4C-4B-F9   (hex)		GLONEXS
-700000-7FFFFF     (base 16)		GLONEXS
-				3F, 19-14, Doyak-ro 252beon-gil
-				Bucheon  Gyeonggi-do  14531
-				KR
-
-4C-4B-F9   (hex)		Remedee Labs
-500000-5FFFFF     (base 16)		Remedee Labs
-				35 chemin du vieux chene
-				Meylan  France  38240
-				FR
-
-20-85-93   (hex)		Dynaudio
-E00000-EFFFFF     (base 16)		Dynaudio
-				Sverigesvej 15
-				Skanderborg    DK-8660
-				DK
-
-84-39-BE   (hex)		Cheng Du virtual world Technology Limited.
-200000-2FFFFF     (base 16)		Cheng Du virtual world Technology Limited.
-				7F, Fang Da building, Ave 12 High-tech Industrial Park, Nanshan Dist
-				Shenzhen  Guangdong  518057
-				CN
-
-24-15-10   (hex)		Satellite Link Technology CO.,LTD
-E00000-EFFFFF     (base 16)		Satellite Link Technology CO.,LTD
-				1305 ,SED science and technology Building,No.1 science and technology road,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-20-85-93   (hex)		Kloudspot Inc
-400000-4FFFFF     (base 16)		Kloudspot Inc
-				1285 Oakmead Parkway
-				Sunnyvale    94085
-				US
-
-24-15-10   (hex)		Shenzhen Xtooltech Co., Ltd
-C00000-CFFFFF     (base 16)		Shenzhen Xtooltech Co., Ltd
-				10574 Acacia St, Suite D4
-				Rancho Cucamonga  CA  91730
-				US
-
-24-15-10   (hex)		Safetrust Inc
-000000-0FFFFF     (base 16)		Safetrust Inc
-				8112 Mill Creek Rd
-				Fremont  CA  94539
-				US
-
-20-85-93   (hex)		Networking Services Corp
-100000-1FFFFF     (base 16)		Networking Services Corp
-				Bella Vista, Obarrio, Edificio Magna Corp, Mezanine
-				Panama  Panama  33131
-				PA
-
-24-15-10   (hex)		SMaBiT GmbH
-100000-1FFFFF     (base 16)		SMaBiT GmbH
-				Friedrichstrasse 95
-				Berlin    10117
-				DE
-
-98-06-37   (hex)		HwaCom Systems Inc.
-C00000-CFFFFF     (base 16)		HwaCom Systems Inc.
-				11Fl., No.108, Sec. 1, Hsin-Tai-Wu Rd., Hsi-Chih District
-				New Taipei  New Taipei  221
-				TW
-
-54-9A-11   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-24-15-10   (hex)		Unitronux(Shenzhen) Intelligence Technology Co.,Ltd
-A00000-AFFFFF     (base 16)		Unitronux(Shenzhen) Intelligence Technology Co.,Ltd
-				7th floor,Building 7,ZhongYunTai industy Park, Tangtou 1st Road,Bao'an District.
-				Shenzhen  Guangdong  518108
-				CN
-
-98-06-37   (hex)		Petersime
-B00000-BFFFFF     (base 16)		Petersime
-				Centrumstraat 125
-				Zulte    9870
-				BE
-
-98-06-37   (hex)		VR Technology(Shenzhen) Limited
-D00000-DFFFFF     (base 16)		VR Technology(Shenzhen) Limited
-				Room 201,Huiheng Building,No.12,Gaoxin South 7th Road,Yuehai Steet,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-98-06-37   (hex)		SAMWONTECH
-700000-7FFFFF     (base 16)		SAMWONTECH
-				YAKDAE-DONG, BUCHEON TECHNO-PARK
-				BUCHEON-CITY  KYUNGGI-DO  14502
-				KR
-
-98-06-37   (hex)		Hangzhou Sanxin Network Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Hangzhou Sanxin Network Technology Co.,Ltd
-				No. 195, Wen Er Road, Xihu District, Xinyuan 11-18F
-				Hangzhou  Zhejiang  310012
-				CN
-
-98-06-37   (hex)		NAB co,.LTD
-900000-9FFFFF     (base 16)		NAB co,.LTD
-				3-62-30 utukushigaoka aoba-ku
-				Yokohama-city  KANAGAWA-KEN  2250002
-				JP
-
-74-19-F8   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-E4-95-6E   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-D0-5F-64   (hex)		Shanghai Luying International Trade Co.,Ltd
-900000-9FFFFF     (base 16)		Shanghai Luying International Trade Co.,Ltd
-				Room 1009 Block 12 No.858 South Huanzhen Road Baoshan District Shanghai City
-				Shanghai     200442
-				CN
-
-D0-5F-64   (hex)		Atoll Solutions Private Limited
-500000-5FFFFF     (base 16)		Atoll Solutions Private Limited
-				#229, 2nd Floor, 2A Main, 5th Cross, New Thippasandra
-				Bangalore  Karnataka  560075
-				IN
-
-D0-5F-64   (hex)		SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
-200000-2FFFFF     (base 16)		SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
-				RM510,418GuipingRoad.Caohejing Hi-TECH-PARK
-				SHANGHAI    200233
-				CN
-
-D0-5F-64   (hex)		HUAQIN TELECOM HONG KONG LTD
-300000-3FFFFF     (base 16)		HUAQIN TELECOM HONG KONG LTD
-				Unit 510,5/F, Lincoln Center,20 Yip Fung Street,Fanling
-				N.T.    999077
-				HK
-
-2C-27-9E   (hex)		Private
-300000-3FFFFF     (base 16)		Private
-
-44-D5-F2   (hex)		CETC Avionics.L td
-800000-8FFFFF     (base 16)		CETC Avionics.L td
-				No. 9, baichuan road, high-tech district
-				Chengdu  Sichuan  611731
-				CN
-
-44-D5-F2   (hex)		VURO LLC
-300000-3FFFFF     (base 16)		VURO LLC
-				1441 Broadway, Suite 5011
-				New York  NY  10018
-				US
-
-D0-5F-64   (hex)		North American Blue Tiger Company, LLC
-B00000-BFFFFF     (base 16)		North American Blue Tiger Company, LLC
-				3727 Greenbriar Dr.  Suite 119
-				Stafford  TX  77477
-				US
-
-44-D5-F2   (hex)		SIMPLERED TECHNOLOGY LTD.
-100000-1FFFFF     (base 16)		SIMPLERED TECHNOLOGY LTD.
-				8F., No.23, Ln. 155, Sec. 3, Beishen Rd., Shenkeng Dist.
-				New Taipei City    222
-				TW
-
-44-D5-F2   (hex)		APPOTRONICS CO., LTD
-400000-4FFFFF     (base 16)		APPOTRONICS CO., LTD
-				4th Floor,SZICC,NO.1089,Chaguang Road,Nanshan District, Shenzhen, China
-				Shenzhen  Guangdong  518000
-				CN
-
-44-D5-F2   (hex)		TIBA Research & Development (1986) LTD
-000000-0FFFFF     (base 16)		TIBA Research & Development (1986) LTD
-				17 Ha'Mefalsim St. Kiryat Arye
-				Petach Tikva  Israel  4951251
-				IL
-
-FC-A4-7A   (hex)		Broadcom Inc.
-000000-0FFFFF     (base 16)		Broadcom Inc.
-				Wernerwerkstr. 2
-				Regensburg  Bavaria  93055
-				DE
-
-FC-A4-7A   (hex)		Shenzhen Nokelock Technology Co, Ltd.
-B00000-BFFFFF     (base 16)		Shenzhen Nokelock Technology Co, Ltd.
-				9th Floor, B Block, Fuhua Technology Building, No 9116 Beihuan  Road, Xili Street, Nanshan District,
-				Shenzhen    518057
-				CN
-
-FC-A4-7A   (hex)		Token
-600000-6FFFFF     (base 16)		Token
-				4545 East River Road, Suite 310
-				Henrietta  NY  14586
-				US
-
-2C-16-BD   (hex)		Sunit Oy
-400000-4FFFFF     (base 16)		Sunit Oy
-				Taitoraitti 1
-				Kajaani    87400
-				FI
-
-8C-59-3C   (hex)		Scharfe-Sicht GmbH
-B00000-BFFFFF     (base 16)		Scharfe-Sicht GmbH
-				Huttropstraße 60
-				Essen   Nordrhein-Westfalen  45138 
-				DE
-
-8C-59-3C   (hex)		ecom instruments GmbH
-A00000-AFFFFF     (base 16)		ecom instruments GmbH
-				Industriestr.2
-				Assamstadt  Baden-Württemberg  97959
-				DE
-
-8C-59-3C   (hex)		Shenzhen Tian-Power Technology Co.,Ltd.
-E00000-EFFFFF     (base 16)		Shenzhen Tian-Power Technology Co.,Ltd.
-				Guangming New District Gongming Office Yulu Community No. 6 Industrial Zone Building 26
-				Shenzhen  Guangdong  518000
-				CN
-
-B4-A2-EB   (hex)		QKM Technology(Dongguan)Co.,Ltd
-000000-0FFFFF     (base 16)		QKM Technology(Dongguan)Co.,Ltd
-				2F,Block A Building 17,NO. 1,Headquarter,No.4,Xinzhu Road,SSL National Hi-tech Industrial Development Zone
-				Dongguan  Guangdong  523808
-				CN
-
-B4-A2-EB   (hex)		Kona I
-700000-7FFFFF     (base 16)		Kona I
-				4F EXCON Venture-Tower, 3, Eunhaeng-ro, Youngdeungpo-gu,
-				Seoul    07237
-				KR
-
-2C-D1-41   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-D0-C8-57   (hex)		Eco Mobile 
-700000-7FFFFF     (base 16)		Eco Mobile 
-				Samoborska cesta 330
-				Zagreb  Zagreb  10090
-				HR
-
-D0-C8-57   (hex)		Mobicon
-300000-3FFFFF     (base 16)		Mobicon
-				#406, 97, Jungbu-daero 448beon-gil, Yeongtong-gu
-				Suwon-si  Gyeonggi-do  16521
-				KR
-
-60-95-CE   (hex)		Synamedia
-C00000-CFFFFF     (base 16)		Synamedia
-				Luipaardstraat 12
-				Kortrijk  West-Vlaanderen  8500
-				BE
-
-1C-82-59   (hex)		ESTec Corporation
-A00000-AFFFFF     (base 16)		ESTec Corporation
-				22, Yusangongdan 9-gil
-				Yangsan  Gyeongsangnam-do  50592
-				KR
-
-1C-82-59   (hex)		CGI IT UK LIMITED
-600000-6FFFFF     (base 16)		CGI IT UK LIMITED
-				20 Fenchurch Street, 14th Floor
-				London    EC3M 3BY
-				GB
-
-60-95-CE   (hex)		Untangle, Inc.
-400000-4FFFFF     (base 16)		Untangle, Inc.
-				100 W. San Fernando St., Ste. 565
-				San Jose  CA  95113
-				US
-
-B0-FD-0B   (hex)		IDspire Corporation Ltd.
-100000-1FFFFF     (base 16)		IDspire Corporation Ltd.
-				9F, No. 266, Sec. 1, Wenhua Rd., Banqiao Dist.
-				New Taipei City    22041
-				TW
-
-84-8B-CD   (hex)		SouXin Corporate
-000000-0FFFFF     (base 16)		SouXin Corporate
-				33 Jingyou Road
-				Nanjing  Jiangsu  211100
-				CN
-
-B0-FD-0B   (hex)		Shenzhen FEIBIT Electronic Technology Co.,LTD
-E00000-EFFFFF     (base 16)		Shenzhen FEIBIT Electronic Technology Co.,LTD
-				5th floor,Bld. A1, Lilang Software Park
-				Shenzhen    518112
-				CN
-
-C8-2C-2B   (hex)		Smart Wires Inc
-C00000-CFFFFF     (base 16)		Smart Wires Inc
-				3292 Whipple Road
-				Union City   CA  94587
-				US
-
-C8-2C-2B   (hex)		Verifone Systems (China),lnc.
-800000-8FFFFF     (base 16)		Verifone Systems (China),lnc.
-				2nd Floor,No.39,Region C, Tongpan Road,Gulou District
-				fuzhou  fujian  350004
-				CN
-
-C8-2C-2B   (hex)		Fränkische Rohrwerke Gebr. Kirchner GmbH & Co. KG
-E00000-EFFFFF     (base 16)		Fränkische Rohrwerke Gebr. Kirchner GmbH & Co. KG
-				Hellinger Str. 1
-				Königsberg/Bayern    97486
-				DE
-
-C8-2C-2B   (hex)		Repp Health
-200000-2FFFFF     (base 16)		Repp Health
-				1919 14th Street , Suite 700
-				Boulder  CO  80302
-				US
-
-E4-1E-0A   (hex)		FireAngel Safety Technology Ltd
-A00000-AFFFFF     (base 16)		FireAngel Safety Technology Ltd
-				Sir William Lyons Road, Vanguard Centre
-				Coventry  Warwickshire  CV4 7EZ
-				GB
-
-E4-1E-0A   (hex)		Avast Software s.r.o.
-300000-3FFFFF     (base 16)		Avast Software s.r.o.
-				Pikrtova 1737/1a
-				Prague 4    14000
-				CZ
-
-C8-63-14   (hex)		Taylor Dynamometer
-E00000-EFFFFF     (base 16)		Taylor Dynamometer
-				3602 W Wheelhouse Rd.
-				Milwaukee  WI  53208
-				US
-
-C8-63-14   (hex)		Western Reserve Controls, Inc.
-000000-0FFFFF     (base 16)		Western Reserve Controls, Inc.
-				1485 Exeter Dr.
-				Akron  OH  44306
-				US
-
-34-E1-D1   (hex)		Genius Pros
-700000-7FFFFF     (base 16)		Genius Pros
-				Floor 13,  Building B, NO. 859 West Shixiang Road, Xihu District, Hangzhou City
-				Hangzhou    310012
-				CN
-
-34-E1-D1   (hex)		ASA Innovation & Technology Ltd.
-400000-4FFFFF     (base 16)		ASA Innovation & Technology Ltd.
-				Room 506, 5/F, Enterprise Place, No. 5 Science Park West Ave., Hong Kong Science Park
-				Shatin  NT  00000
-				HK
-
-34-E1-D1   (hex)		Ningbo Hua Gao Mdt Info Tech Ltd
-600000-6FFFFF     (base 16)		Ningbo Hua Gao Mdt Info Tech Ltd
-				NO.655,Xueshi Road, Yinzhou District, Ningbo, Zhejiang,China
-				Ningbo  Zhejiang  315100
-				CN
-
-34-E1-D1   (hex)		Rinco Ultrasonics AG
-300000-3FFFFF     (base 16)		Rinco Ultrasonics AG
-				Industriestrasse 4
-				Romanshorn  Thurgau  8590
-				CH
-
-C8-63-14   (hex)		Meyer Electronics Limited
-500000-5FFFFF     (base 16)		Meyer Electronics Limited
-				382 Kwun Tong Road
-				Hong Kong    0000
-				HK
-
-FC-D2-B6   (hex)		Silicon (Shenzhen) Electronic Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Silicon (Shenzhen) Electronic Technology Co.,Ltd.
-				5F, Block A，No. 9 Yuexing 3rd Road, Yuehai Subdistrict Office, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-FC-D2-B6   (hex)		Univer S.p.A.
-E00000-EFFFFF     (base 16)		Univer S.p.A.
-				Via Eraclito 31
-				Milan    20128
-				IT
-
-FC-D2-B6   (hex)		NREAL TECHNOLOGY LIMITED
-A00000-AFFFFF     (base 16)		NREAL TECHNOLOGY LIMITED
-				RM 1901，19/F LEE GARDEN ONE 33 HYSAN AVENUE CAUSEWAY BAY
-				HONG KONG    999077
-				HK
-
-74-5B-C5   (hex)		Haikou Frun Flash&Mcu Microcontrol Technology Development Co.,Ltd
-900000-9FFFFF     (base 16)		Haikou Frun Flash&Mcu Microcontrol Technology Development Co.,Ltd
-				5 floor A1-9, A building, incubation center, Haikou national hi tech Development Zone
-				Haikou  Hainan  570206
-				CN
-
-74-5B-C5   (hex)		Smartiply Inc.
-B00000-BFFFFF     (base 16)		Smartiply Inc.
-				233 Mt. Airy Road
-				Basking Ridge  NJ  07920
-				US
-
-74-5B-C5   (hex)		OXON AG
-300000-3FFFFF     (base 16)		OXON AG
-				Waldeggstrasse 47
-				Liebefeld    3097
-				CH
-
-E4-4C-C7   (hex)		HANGZHOU OLE-SYSTEMS CO., LTD
-600000-6FFFFF     (base 16)		HANGZHOU OLE-SYSTEMS CO., LTD
-				 No.35 Jiuhuan Road, Jianggan District , Hangzhou , Zhejiang , China
-				Hangzhou  Zhejiang  310019
-				CN
-
-E4-4C-C7   (hex)		Channel Enterprises (HK) Ltd.
-700000-7FFFFF     (base 16)		Channel Enterprises (HK) Ltd.
-				Room 2006, 20/F., 43-47 Wang Lung Street,
-				Tsuen Wan    NA
-				HK
-
-E4-4C-C7   (hex)		CE LABS, LLC
-500000-5FFFFF     (base 16)		CE LABS, LLC
-				3209 WOOD DRIVE
-				GARLAND  TX  75041
-				US
-
-E0-5A-9F   (hex)		Shenzhen Rongan Networks Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		Shenzhen Rongan Networks Technology Co.,Ltd
-				Room 1903, Industrial and Research building of Sun Yat-Sen university,no.1, Yuexing 4th road, Yuehai street,Nanshan district
-				Shenzhen  Guangdong  518057
-				CN
-
-E0-5A-9F   (hex)		Link of Things Co., Ltd.
-300000-3FFFFF     (base 16)		Link of Things Co., Ltd.
-				9F, Park St. 3-2, NanKang Software Park, Taipei, Taiwan
-				Taipei    115
-				TW
-
-4C-BC-98   (hex)		Quake Global Inc
-200000-2FFFFF     (base 16)		Quake Global Inc
-				4711 VIEWRIDGE AVE., STE 150
-				SAN DIEGO  CA  92123
-				US
-
-4C-BC-98   (hex)		Dongguan SmartAction Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		Dongguan SmartAction Technology Co.,Ltd
-				Room1109,Building D,First Place,Nancheng District, Dongguan
-				Dongguan  Guangdong  523000
-				CN
-
-4C-BC-98   (hex)		Gronic Systems GmbH
-500000-5FFFFF     (base 16)		Gronic Systems GmbH
-				Hilpertswiese 7
-				Birstein    63633
-				DE
-
-4C-BC-98   (hex)		Machine Max
-300000-3FFFFF     (base 16)		Machine Max
-				Shell Centre
-				London    SE1 7NA
-				GB
-
-38-B1-9E   (hex)		Thrust Networks
-600000-6FFFFF     (base 16)		Thrust Networks
-				Pangeran Jayakarta 129 No B 7
-				Jakarta  Jakarta  10730
-				ID
-
-D8-86-0B   (hex)		Teplovodokhran Ltd.
-400000-4FFFFF     (base 16)		Teplovodokhran Ltd.
-				Novaya , 51v
-				Ryazan    390027
-				RU
-
-D8-86-0B   (hex)		DIGITAL CONCEPTS
-900000-9FFFFF     (base 16)		DIGITAL CONCEPTS
-				3108 RIVERPORT TECH CENTER DR
-				MARYLAND HEIGHTS  MO  630434825
-				US
-
-E0-5A-9F   (hex)		Hale Products
-400000-4FFFFF     (base 16)		Hale Products
-				607 NW 27th Ave
-				Ocala  FL  34475
-				US
-
-D8-86-0B   (hex)		GLO Science
-A00000-AFFFFF     (base 16)		GLO Science
-				10 West 37th Street, 1001
-				New York  NY  10018
-				US
-
-D8-86-0B   (hex)		SCANMATIK
-600000-6FFFFF     (base 16)		SCANMATIK
-				Letnaya 18-2
-				Mytischi  Moscow  141008
-				RU
-
-38-B1-9E   (hex)		Dallas Delta Corporation
-D00000-DFFFFF     (base 16)		Dallas Delta Corporation
-				102 Albert Street
-				Brunswick East  Victoria  3057
-				AU
-
-38-B1-9E   (hex)		AVO DEVELOPMENT LTD
-300000-3FFFFF     (base 16)		AVO DEVELOPMENT LTD
-				179 Shepherds Hill
-				Romford  Essex  RM3 0NR
-				GB
-
-84-39-BE   (hex)		HINO ENGINEERING, INC
-000000-0FFFFF     (base 16)		HINO ENGINEERING, INC
-				60-7 Takakuramachi
-				Hachiouji  Tokyo  192-0033
-				JP
-
-CC-D3-9D   (hex)		Glenair
-700000-7FFFFF     (base 16)		Glenair
-				1211 Air Way
-				Glendale  CA  91201
-				US
-
-D4-25-CC   (hex)		EISST Ltd
-300000-3FFFFF     (base 16)		EISST Ltd
-				10 Queen Street Place
-				London    EC4R 1AG
-				GB
-
-D4-25-CC   (hex)		E-MetroTel
-A00000-AFFFFF     (base 16)		E-MetroTel
-				2828 West Parker Unit B201
-				Plano  TX  75075
-				US
-
-D4-25-CC   (hex)		Coperion
-E00000-EFFFFF     (base 16)		Coperion
-				590 WOODBURY GLASSBORO RD.
-				SEWELL  NJ  08080
-				US
-
-D4-25-CC   (hex)		NORDI TELEKOMMUNIKATSIOONI OÜ
-000000-0FFFFF     (base 16)		NORDI TELEKOMMUNIKATSIOONI OÜ
-				Valukoja 8
-				Tallinn city  Estonian Republic  11415
-				EE
-
-CC-D3-9D   (hex)		MagTarget LLC
-300000-3FFFFF     (base 16)		MagTarget LLC
-				1300 Reamwood Ave Sunnyvale CA
-				SUNNYVALE  CA  94089
-				US
-
-D4-25-CC   (hex)		Eware Information Technology com.,Ltd
-100000-1FFFFF     (base 16)		Eware Information Technology com.,Ltd
-				No.402,Building 5,Software Park,Keji Mid 3nd Road,Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-9C-69-B4   (hex)		Teptron AB
-900000-9FFFFF     (base 16)		Teptron AB
-				Box 1009
-				Varberg  Halland  43213
-				SE
-
-4C-91-7A   (hex)		LumiGrow Inc.
-400000-4FFFFF     (base 16)		LumiGrow Inc.
-				1480 64th Street, Suite #150
-				Emeryville  CA  94608
-				US
-
-9C-69-B4   (hex)		Skydock do Brasil Ltda
-800000-8FFFFF     (base 16)		Skydock do Brasil Ltda
-				Rua Gralha Azul, 147
-				Quatro Barras  PR  83420-000
-				BR
-
-9C-69-B4   (hex)		PCI Limited
-700000-7FFFFF     (base 16)		PCI Limited
-				35, Pioneer Road North
-				Singapore    628475
-				SG
-
-6C-DF-FB   (hex)		AAON
-600000-6FFFFF     (base 16)		AAON
-				2425 Yukon Ave
-				Tulsa  OK  74107
-				US
-
-6C-DF-FB   (hex)		CELL System Co.,Ltd.
-B00000-BFFFFF     (base 16)		CELL System Co.,Ltd.
-				1-2-8 Azamino-minami, Aobaku
-				Yokohama  Kanagawa  225-0012
-				JP
-
-4C-91-7A   (hex)		Camsat Przemysław Gralak
-800000-8FFFFF     (base 16)		Camsat Przemysław Gralak
-				Ogrodowa 2A
-				Solec Kujawski  Bydgoszcz  86-050
-				PL
-
-4C-91-7A   (hex)		Hangzhou Hangtu Technology Co.,Ltd.
-900000-9FFFFF     (base 16)		Hangzhou Hangtu Technology Co.,Ltd.
-				Room A301, no.11, xiyuan eighth road, xihu district
-				Hangzhou  Zhejiang  310000
-				CN
-
-6C-DF-FB   (hex)		YongTechs Electric Co. Ltd
-900000-9FFFFF     (base 16)		YongTechs Electric Co. Ltd
-				18F-8, No.118, Ci-Yun Rd., Hsin Chu 30072, Taiwan(R.O.C.)
-				Hsin Chu    30072
-				TW
-
-6C-DF-FB   (hex)		Hardmeier
-800000-8FFFFF     (base 16)		Hardmeier
-				Pärnu mnt 102
-				Tallinn    11312
-				EE
-
-7C-BC-84   (hex)		Xuji Changnan Communication Equipment Co., Ltd.
-700000-7FFFFF     (base 16)		Xuji Changnan Communication Equipment Co., Ltd.
-				No. 2725, Xu You Xi Road
-				Xuchang  Henan  461001
-				CN
-
-7C-BC-84   (hex)		OPNT BV
-A00000-AFFFFF     (base 16)		OPNT BV
-				De Boelelaan 1081
-				Amsterdam    1081 HV
-				NL
-
-7C-BC-84   (hex)		Xiamen Mage Information Technology Co.,Ltd.
-100000-1FFFFF     (base 16)		Xiamen Mage Information Technology Co.,Ltd.
-				Room 302B, No.40 Guanri Road, Software Park II
-				Xiamen  Fujian  361008
-				CN
-
-7C-BC-84   (hex)		Société de Transport de Montréal
-600000-6FFFFF     (base 16)		Société de Transport de Montréal
-				800, de La Gauchetière, bureau 8440
-				Montréal  Québec  H5A 1J6
-				CA
-
-98-F9-C7   (hex)		ARIMA Communications Corp.
-700000-7FFFFF     (base 16)		ARIMA Communications Corp.
-				6F.,No.866,Zhongzheng Rd.,Zhonghe Dist.,
-				New Taipei City  Taiwan  23586
-				TW
-
-0C-FE-5D   (hex)		Beijing WayClouds Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Beijing WayClouds Technology Co., Ltd.
-				RM501, 5F, DASCOM BD,NO.9 SHANGDI EAST RD, HAIDIAN DISTRICT,BEIJING,CHINA
-				Beijing    100085
-				CN
-
-98-F9-C7   (hex)		MSB Elektronik und Gerätebau GmbH
-A00000-AFFFFF     (base 16)		MSB Elektronik und Gerätebau GmbH
-				Hofwiesenstr. 23
-				Crailsheim    74564
-				DE
-
-6C-5C-3D   (hex)		Reconova Technologies
-B00000-BFFFFF     (base 16)		Reconova Technologies
-				B103,Shenzhen Institute of Nanjing University,Keyuan Road,Hi-Tech Park,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-6C-5C-3D   (hex)		Syowatsusinkougyo Co.,Ltd.
-D00000-DFFFFF     (base 16)		Syowatsusinkougyo Co.,Ltd.
-				35 Ozekiazakitada,Azai-cho
-				Ichinomiya-City  Aichi  491-0101
-				JP
-
-6C-5C-3D   (hex)		krtkl inc.
-A00000-AFFFFF     (base 16)		krtkl inc.
-				350 Townsend Street, Suite 301A
-				San Francisco  CA  94107
-				US
-
-1C-FD-08   (hex)		A&B Technology
-600000-6FFFFF     (base 16)		A&B Technology
-				81, Geumnam-ro, Buk-gu
-				Gwangju    61247
-				KR
-
-6C-5C-3D   (hex)		choyang powertech
-C00000-CFFFFF     (base 16)		choyang powertech
-				11. Deoksan-ro 189beon-gil.
-				ilsan seo-gu. Goyang-si  Gyeonggi-do  10205
-				KR
-
-6C-5C-3D   (hex)		SOUNDKING ELECTRONICS&SOUND CO., LTD.
-700000-7FFFFF     (base 16)		SOUNDKING ELECTRONICS&SOUND CO., LTD.
-				No.818 Chengxin RoadYinzhou Investment Business Park
-				Ningbo  Zhejiang  315105
-				CN
-
-1C-FD-08   (hex)		Beijing Hengxin Rainbow Information Technology Co.,Ltd
-500000-5FFFFF     (base 16)		Beijing Hengxin Rainbow Information Technology Co.,Ltd
-				11Floor,north district,newton business building,No.25 Landian factory south road，Haidian District
-				Beijing  Beijing  100097
-				CN
-
-A8-3F-A1   (hex)		Exel s.r.l. unipersonale
-B00000-BFFFFF     (base 16)		Exel s.r.l. unipersonale
-				via di corticella 201
-				bologna  BO  40128
-				IT
-
-A8-3F-A1   (hex)		Guangzhou Tupu Internet Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Guangzhou Tupu Internet Technology Co., Ltd.
-				602, No.11, Jiangong Road, Tianhe Software Park, Tianhe District
-				Guangzhou  Guangdong  510665
-				CN
-
-3C-6A-2C   (hex)		Bosch Automotive Products (Suzhou) Co., Ltd.
-200000-2FFFFF     (base 16)		Bosch Automotive Products (Suzhou) Co., Ltd.
-				No. 455 Xing Long Street
-				Suzhou    215000
-				CN
-
-3C-6A-2C   (hex)		Phytium Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Phytium Technology Co., Ltd.
-				Building 5, XinAn Business Square, Haiyuan Middle Road
-				Binhai New District, Tianjin    300450
-				CN
-
-3C-6A-2C   (hex)		Qingdao iGuan Technology Co., Ltd.
-500000-5FFFFF     (base 16)		Qingdao iGuan Technology Co., Ltd.
-				Room416, Science and Technology Park, Ocean University of China, No.23 HongKongEast Road
-				Qingdao  Shandong  266100
-				CN
-
-A8-3F-A1   (hex)		Zhejiang Wellsun Intelligent Technology Co.,Ltd.
-400000-4FFFFF     (base 16)		Zhejiang Wellsun Intelligent Technology Co.,Ltd.
-				No.15,Xingye East 3rd St.,Fuxi District,Tiantai County
-				Taizhou  Zhejiang  317200
-				CN
-
-A8-3F-A1   (hex)		Shenzhen BIO I/E Co.,Ltd
-D00000-DFFFFF     (base 16)		Shenzhen BIO I/E Co.,Ltd
-				Huafan Industrial Park,Building #12, Henggang JianLong Village Industrial Zone, Longgang District
-				Shenzhen  GuangDong province  518115
-				CN
-
-00-55-DA   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-30-0A-60   (hex)		Newtons4th Ltd
-700000-7FFFFF     (base 16)		Newtons4th Ltd
-				1 Bede Island Road
-				Leicester    LE2 7EA
-				GB
-
-A4-ED-43   (hex)		TOEC TECHNOLOGY CO.，LTD.
-E00000-EFFFFF     (base 16)		TOEC TECHNOLOGY CO.，LTD.
-				6 Taishan Road Hexi District Tianjin China
-				Tian Jin  Tian Jin  300211
-				CN
-
-A4-ED-43   (hex)		Dongguan Mingji Electronics technology Group Co., Ltd.
-300000-3FFFFF     (base 16)		Dongguan Mingji Electronics technology Group Co., Ltd.
-				NO.93,188 Industrial Road, Pingshan Village,Tangxia Town, Dongguan city, Guangdong Province , China.
-				DONGGUAN  GUANGDONG  523710
-				CN
-
-A4-ED-43   (hex)		leakSMART
-C00000-CFFFFF     (base 16)		leakSMART
-				5920 GREENE POINTE DRIVE S  GROVEPORT
-				Groveport  OH  43125
-				US
-
-A4-ED-43   (hex)		INGELABS S.L.
-100000-1FFFFF     (base 16)		INGELABS S.L.
-				Av. Juan Lopez Peñalver, 21
-				Malaga  Malaga  29590
-				ES
-
-A0-28-33   (hex)		Kalray S.A.
-C00000-CFFFFF     (base 16)		Kalray S.A.
-				180 avenue de l’Europe
-				Montbonnot Saint Martin    38330
-				FR
-
-84-89-EC   (hex)		BYDA Co. Ltd., 
-700000-7FFFFF     (base 16)		BYDA Co. Ltd., 
-				4F, KNS Bldg., 8, Gaepo-ro 25 gil, Gangnam-gu
-				Seoul    06306
-				KR
-
-84-89-EC   (hex)		SHINKAWA LTD.
-C00000-CFFFFF     (base 16)		SHINKAWA LTD.
-				Shinjuku Front Tower 32F, 2-21-1 Kitashinjyuku
-				Shinjuku-ku  Tokyo  169-0074
-				JP
-
-9C-F6-DD   (hex)		AVI Pty Ltd
-A00000-AFFFFF     (base 16)		AVI Pty Ltd
-				9 Pitt Way
-				Booragoon  Western Australia  6154
-				AU
-
-30-09-F9   (hex)		Punkt Tronics AG
-400000-4FFFFF     (base 16)		Punkt Tronics AG
-				Via Losanna 4
-				Lugano    6900
-				CH
-
-C0-83-59   (hex)		Beijing Cloud Fly Technology Development Co.Ltd
-600000-6FFFFF     (base 16)		Beijing Cloud Fly Technology Development Co.Ltd
-				No. 1703, Zhong An Sheng Ye Building, No. 168  Bei Yuan Road, Chaoyang District, Beijing
-				Beijing  Beijing  100101
-				CN
-
-9C-F6-DD   (hex)		Capital Engineering & Research Incorporation Ltd.
-400000-4FFFFF     (base 16)		Capital Engineering & Research Incorporation Ltd.
-				NO.7 JianAnJie, Beijing Economic-Technological Development Area
-				Beijing    100176
-				CN
-
-9C-F6-DD   (hex)		KXT Technology Co., Ltd.
-700000-7FFFFF     (base 16)		KXT Technology Co., Ltd.
-				3F. No.42, Sec. 2, Chongsin Rd., Sanchong Dist.
-				New Taipei City    241
-				TW
-
-C0-83-59   (hex)		Gardner Denver Thomas GmbH
-D00000-DFFFFF     (base 16)		Gardner Denver Thomas GmbH
-				Livry-Gargan-Straße 10
-				Fürstenfeldbruck  Bavaria  82256
-				DE
-
-04-C3-E6   (hex)		Amiosec Ltd
-D00000-DFFFFF     (base 16)		Amiosec Ltd
-				Unit 5 Miller Court
-				Tewkesbury  Gloucestershire  GL20 8DN
-				GB
-
-04-C3-E6   (hex)		Innovusion Inc.
-400000-4FFFFF     (base 16)		Innovusion Inc.
-				4920 El Camino Real
-				Los Altos  CA  94022
-				US
-
-04-C3-E6   (hex)		SLOC GmbH
-800000-8FFFFF     (base 16)		SLOC GmbH
-				Nikolaiplatz 4
-				Graz  Styria  8020
-				AT
-
-B4-4B-D6   (hex)		SHENZHEN TITA INTERACTIVE TECHNOLOGY CO.,LTD
-100000-1FFFFF     (base 16)		SHENZHEN TITA INTERACTIVE TECHNOLOGY CO.,LTD
-				Floor 23, Haowei Technology Mansion,Keji south eighth Road, Gaoxin Sci-Tech. Park(South Zone), 
-				Shenzhen  Guangdong  518000
-				CN
-
-D4-7C-44   (hex)		LS Communication Co.,Ltd.
-500000-5FFFFF     (base 16)		LS Communication Co.,Ltd.
-				LS Bldg., Hwachang-ro, 95(Seoksoo-dong), Manan-gu
-				Anyang-city  Gyeonggi-do  13905
-				KR
-
-3C-42-7E   (hex)		ROBOX SMART MOTION (WUHU) CO.,LTD
-D00000-DFFFFF     (base 16)		ROBOX SMART MOTION (WUHU) CO.,LTD
-				No.96,Wanchun East Road,Jiujiang Economic Development District,Wuhu,Anhui,China
-				Wuhu  Anhui  241000
-				CN
-
-3C-42-7E   (hex)		snap40 Ltd
-A00000-AFFFFF     (base 16)		snap40 Ltd
-				24 Forth Street
-				Edinburgh    EH1 3LH
-				GB
-
-D4-7C-44   (hex)		Beijing Maystar Information Technology Co., Ltd.
-800000-8FFFFF     (base 16)		Beijing Maystar Information Technology Co., Ltd.
-				Building B 5/F,Shangdi Keji Zonghe Building,No.22 Shangdi Information Road, Haidian District
-				Beijing    100084
-				CN
-
-A0-19-B2   (hex)		Ahgora Sistemas SA
-E00000-EFFFFF     (base 16)		Ahgora Sistemas SA
-				Rodovia José Carlos Daux (SC-401), 600 (Km 01) - ParqTec Alfa - Módulo 08
-				Florianópolis  Santa Catarina  88030000
-				BR
-
-D4-7C-44   (hex)		ASDA ICT Co., Ltd.
-600000-6FFFFF     (base 16)		ASDA ICT Co., Ltd.
-				4F-2,No.2,Sec.4,Zhongyang Rd,Tucheng Dist,
-				New Taipei City    999079
-				TW
-
-2C-48-35   (hex)		Scout Security, Inc.
-500000-5FFFFF     (base 16)		Scout Security, Inc.
-				210 N Racine Ave, STE 2M
-				Chicago  IL  60607
-				US
-
-A0-19-B2   (hex)		MIS Industrie Systeme GmbH & Co. KG
-800000-8FFFFF     (base 16)		MIS Industrie Systeme GmbH & Co. KG
-				Lohwiese 7
-				Scheuring  Bavaria  86937
-				DE
-
-A0-19-B2   (hex)		Beijing Deephi Intelligent Technology Co., Ltd
-200000-2FFFFF     (base 16)		Beijing Deephi Intelligent Technology Co., Ltd
-				7F Building D, Tsinghua Tongfang High-Tech PlazaRoom 1706, Building D-East, Tsinghua Tongfang High-Tech Plaza Haidian District, Beijing, 100083, China
-				BEIJING  HAIDIAN  100083
-				CN
-
-2C-48-35   (hex)		Progress Rail Services, Inspection and Information Systems
-000000-0FFFFF     (base 16)		Progress Rail Services, Inspection and Information Systems
-				3801-1 South Selsa Road
-				Independence  null  64057
-				US
-
-2C-48-35   (hex)		Newtrax Technologies Inc
-300000-3FFFFF     (base 16)		Newtrax Technologies Inc
-				360 St-Jacques, Floor 8 
-				Montreal  Quebec  H2Y 1P5
-				CA
-
-2C-48-35   (hex)		Advanced Electronics Company Ltd
-100000-1FFFFF     (base 16)		Advanced Electronics Company Ltd
-				POBOX 90916, KKIA INDUSTRIAL ESTATE
-				RIYADH  CENTRAL  11623
-				SA
-
-8C-1C-DA   (hex)		Septentrio NV
-500000-5FFFFF     (base 16)		Septentrio NV
-				Interleuvenlaan 15i
-				Leuven    3001
-				BE
-
-8C-1C-DA   (hex)		CEOS Pty Ltd
-000000-0FFFFF     (base 16)		CEOS Pty Ltd
-				3/17 Burgundy Street,
-				Heidelberg  VIC  3084
-				AU
-
-3C-24-F0   (hex)		Sivat Technology Co.,Ltd.
-800000-8FFFFF     (base 16)		Sivat Technology Co.,Ltd.
-				Room 1602, Starbuilding 2, west Complex of ChangYing TianJie ChaoYang District
-				BeiJing  Beijing  100024
-				CN
-
-8C-1C-DA   (hex)		Riegl Laser Measurement Systems GmbH
-D00000-DFFFFF     (base 16)		Riegl Laser Measurement Systems GmbH
-				Riedenburgstraße 48
-				Horn  Niederösterreich  A-3580
-				AT
-
-8C-1C-DA   (hex)		K Technology Corporation
-700000-7FFFFF     (base 16)		K Technology Corporation
-				LIVMO Rising Bldg. 5F, 3-19-1
-				Shin-Yokohama, Kohoku-ku, Yokohama, Kanagawa    222-0033
-				JP
-
-0C-73-EB   (hex)		Tiinlab Acoustic Technology (Shenzhen) Co., Ltd.
-300000-3FFFFF     (base 16)		Tiinlab Acoustic Technology (Shenzhen) Co., Ltd.
-				Tianliao Building F14 East Block (New Materials Industrial Park), Xueyuan Road, Nanshan District, 
-				Shenzhen  Guangdong  518055
-				CN
-
-0C-73-EB   (hex)		D-Link （Shanghai）Limited Corp.
-D00000-DFFFFF     (base 16)		D-Link （Shanghai）Limited Corp.
-				Registered Address: Part J1, Floor 1, Building 2, No.115, Fute West First Road, China(Shanghai) Pilot Free Trade Zone
-				Shanghai    200000
-				CN
-
-0C-73-EB   (hex)		Dinkle Enterprise Co., Ltd.
-700000-7FFFFF     (base 16)		Dinkle Enterprise Co., Ltd.
-				No.19, Wuquan 2nd Rd., Wugu Dist.
-				New Taipei City    24890
-				TW
-
-0C-73-EB   (hex)		Synaccess Networks
-B00000-BFFFFF     (base 16)		Synaccess Networks
-				14425 N 79th St., Suite C
-				Scottsdale  AZ  85260
-				US
-
-0C-73-EB   (hex)		Deltapath, Inc.
-200000-2FFFFF     (base 16)		Deltapath, Inc.
-				2107 N 1ST ST, STE 660
-				San Jose  CA  95131
-				US
-
-0C-73-EB   (hex)		Pi Innovo LLC
-A00000-AFFFFF     (base 16)		Pi Innovo LLC
-				47023 Five Mile Rd
-				Plymouth  MI  48170
-				US
-
-3C-24-F0   (hex)		Inter Action Corporation
-600000-6FFFFF     (base 16)		Inter Action Corporation
-				14F,Yokohama-Kanazawa High-Tech Center,1-1,
-				Yokohama  Kanagawa  236-0004
-				JP
-
-3C-24-F0   (hex)		Siemens AG - Siemens Deutschland Mobility
-900000-9FFFFF     (base 16)		Siemens AG - Siemens Deutschland Mobility
-				Otto-Hahn-Ring 6
-				Munich    81379
-				DE
-
-0C-73-EB   (hex)		Taiwan Pulse Motion Co., Ltd.
-E00000-EFFFFF     (base 16)		Taiwan Pulse Motion Co., Ltd.
-				5F.-11, No. 210, Gongyequ 38th Rd.
-				Taichung City    40768
-				TW
-
-3C-24-F0   (hex)		COMATIS
-B00000-BFFFFF     (base 16)		COMATIS
-				8 rue Carnot
-				SAINT-CYR-L'ECOLE    78210
-				FR
-
-48-65-EE   (hex)		SmartDisplayer Technology Co., Ltd.
-800000-8FFFFF     (base 16)		SmartDisplayer Technology Co., Ltd.
-				No. 2-1, Gongjian Rd., Qidu Dist, Keelung City, 20647, Taiwan (R.O.C.)
-				Keelung    20647
-				TW
-
-48-0B-B2   (hex)		Annapurna labs
-600000-6FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-48-0B-B2   (hex)		Popit Oy
-B00000-BFFFFF     (base 16)		Popit Oy
-				Metsänneidonkuja 6
-				Espoo    02130
-				FI
-
-88-5F-E8   (hex)		Sonnet Labs Inc.
-300000-3FFFFF     (base 16)		Sonnet Labs Inc.
-				8 The Green Suite #6290
-				Dover  DE  19901
-				US
-
-88-5F-E8   (hex)		Hauch & Bach ApS
-500000-5FFFFF     (base 16)		Hauch & Bach ApS
-				Femstykket 6
-				Lynge    3540
-				DK
-
-88-5F-E8   (hex)		Sowee
-900000-9FFFFF     (base 16)		Sowee
-				4 place des Vosges
-				Courbevoie    92400
-				FR
-
-88-5F-E8   (hex)		Red Technologies, LLC.
-700000-7FFFFF     (base 16)		Red Technologies, LLC.
-				34 Parker
-				Irvine  CA  92618
-				US
-
-F0-41-C8   (hex)		Shenzhen Medica Technology Development Co., Ltd.
-200000-2FFFFF     (base 16)		Shenzhen Medica Technology Development Co., Ltd.
-				2F Building A, Tongfang Information Harbor, No.11, East Langshan Road, Nanshan District
-				Shenzhen    518000
-				CN
-
-F0-41-C8   (hex)		 Shanghai Think-Force Electronic Technology Co. Ltd
-C00000-CFFFFF     (base 16)		 Shanghai Think-Force Electronic Technology Co. Ltd
-				North ZhongShan Road, No. 3000, Room 2608
-				Shanghai    200000
-				CN
-
-F0-41-C8   (hex)		Shenzhen Umind Technology Co., Ltd.
-E00000-EFFFFF     (base 16)		Shenzhen Umind Technology Co., Ltd.
-				Add: D2-6A, TCL Science Park, 1001 ZhongshanYuan Road, Nanshan District
-				Shenzhen  Guangdong  581055
-				CN
-
-40-A3-6B   (hex)		SKS-Kinkel Elektronik GmbH
-400000-4FFFFF     (base 16)		SKS-Kinkel Elektronik GmbH
-				Im Industriegebiet 9
-				Hof    56472
-				DE
-
-30-1F-9A   (hex)		MICOMSOFT CO.,LTD.
-300000-3FFFFF     (base 16)		MICOMSOFT CO.,LTD.
-				6F,KEIHAN-YODOYABASHI BLDG., 3-2-25,KITAHAMA,CHUO-KU
-				osaka    541-0041
-				JP
-
-30-1F-9A   (hex)		HUNAN CHANGSHA HENGJIAN TECHNOLDGY DEVELPMENT CO.,LTD.
-A00000-AFFFFF     (base 16)		HUNAN CHANGSHA HENGJIAN TECHNOLDGY DEVELPMENT CO.,LTD.
-				Jiayun Road 209
-				Changsha  Hunan  410205
-				CN
-
-88-A9-A7   (hex)		Sieper Lüdenscheid GmbH & Co. KG
-600000-6FFFFF     (base 16)		Sieper Lüdenscheid GmbH & Co. KG
-				Schlittenbacher Straße 60
-				Lüdenscheid    58511
-				DE
-
-A4-DA-22   (hex)		SolidPro Technology Corporation
-800000-8FFFFF     (base 16)		SolidPro Technology Corporation
-				10F.-1, No.150, Jian 1st Rd.
-				Zhonghe Dist.  New Taipei City  23511
-				TW
-
-DC-E5-33   (hex)		SAN Engineering
-700000-7FFFFF     (base 16)		SAN Engineering
-				434-31 UTO Korea BD. 4F
-				Seongnam-si Jungwon-gu  Gyunggi-do  13230
-				KR
-
-DC-E5-33   (hex)		ShenZhen C&D Electronics CO.Ltd.
-300000-3FFFFF     (base 16)		ShenZhen C&D Electronics CO.Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park,  Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-C4-FF-BC   (hex)		KAGA ELECTRONICS CO.,LTD.
-B00000-BFFFFF     (base 16)		KAGA ELECTRONICS CO.,LTD.
-				20 Kandamatsunaga-cho
-				Chiyoda-ku  TOKYO  101-8627
-				JP
-
-9C-43-1E   (hex)		Wireless Environment, LLC
-400000-4FFFFF     (base 16)		Wireless Environment, LLC
-				600 Beta Drive Unit 100 Mayfield Village, OH 44143,US
-				Mayfield Village  OH  44143
-				US
-
-9C-43-1E   (hex)		Symfun Telecom Ltd
-100000-1FFFFF     (base 16)		Symfun Telecom Ltd
-				Floor 4 Building 11 Xi Qi Dian Jia Yuan
-				Beijing    100083
-				CN
-
-9C-43-1E   (hex)		Optris GmbH
-700000-7FFFFF     (base 16)		Optris GmbH
-				Ferdinand-Buisson-Str. 14
-				Berlin    13127
-				DE
-
-28-2C-02   (hex)		Shenzhen emb-star technology co. LTD
-200000-2FFFFF     (base 16)		Shenzhen emb-star technology co. LTD
-				2/f,building C,qinghu science park,qingxiang road,qinghu,longhua new district
-				shenzhen  Guangdong  518131
-				CN
-
-F8-B5-68   (hex)		Whizpace Pte. Ltd.
-B00000-BFFFFF     (base 16)		Whizpace Pte. Ltd.
-				77 Ayer Rajah Crescent, #02-30
-				Singapore    139954
-				SG
-
-F8-B5-68   (hex)		Maven Wireless AB
-800000-8FFFFF     (base 16)		Maven Wireless AB
-				Torshamnsgatan 35
-				KISTA    164 40
-				SE
-
-40-48-FD   (hex)		Cloud4Wi
-700000-7FFFFF     (base 16)		Cloud4Wi
-				22 Cleveland St
-				San Francisco  null  94103
-				US
-
-40-48-FD   (hex)		Ecotap B.V.
-C00000-CFFFFF     (base 16)		Ecotap B.V.
-				Industrieweg 4
-				Boxtel    5281RW
-				NL
-
-40-48-FD   (hex)		Swarco Technology ApS
-600000-6FFFFF     (base 16)		Swarco Technology ApS
-				C. F. Tietgens Boulevard 25
-				Odense SØ  Danmark  5220
-				DK
-
-40-48-FD   (hex)		MITHRAS Technology Co., LTD
-200000-2FFFFF     (base 16)		MITHRAS Technology Co., LTD
-				4F.-3, No. 880, Zhongzheng Rd., Zhonghe Dist., 
-				New Taipei    23586
-				TW
-
-38-73-EA   (hex)		Light Blue Optics Ltd.
-400000-4FFFFF     (base 16)		Light Blue Optics Ltd.
-				St John's Innovation Centre, Cowley Road
-				Cambridge  Cambridgeshire  CB40WS
-				GB
-
-EC-9F-0D   (hex)		CRRC QINGDAO SIFANG ROLLING STOCK RESEARCH INSTITUTE CO.,LTD
-B00000-BFFFFF     (base 16)		CRRC QINGDAO SIFANG ROLLING STOCK RESEARCH INSTITUTE CO.,LTD
-				No.231 Ruichang Road Qingdao City
-				Qingdao  Shandong  266000
-				CN
-
-38-73-EA   (hex)		ISTCONTROL
-500000-5FFFFF     (base 16)		ISTCONTROL
-				#1203, 37 Maebongsan-ro, Mapo-gu
-				Seoul    03909
-				KR
-
-EC-9F-0D   (hex)		flexlog GmbH
-A00000-AFFFFF     (base 16)		flexlog GmbH
-				Zur Gießerei 4
-				Karlsruhe    76227
-				DE
-
-34-D0-B8   (hex)		Skytech Creations Limited
-900000-9FFFFF     (base 16)		Skytech Creations Limited
-				Flat F, 23/F., Block 2, Kingswin Industrial Building, 32-50 Lei Muk Road
-				Kwai Chung    000000
-				HK
-
-34-D0-B8   (hex)		Glory Mark Electronic Ltd. Taiwan Branch (B.V.I.)
-C00000-CFFFFF     (base 16)		Glory Mark Electronic Ltd. Taiwan Branch (B.V.I.)
-				3F, No. 6, Lane 148, Li De St., Chungho Dist.
-				New Taipei City  Taiwan  235
-				TW
-
-34-D0-B8   (hex)		EQPlay Intelligent Technology(Kunshan) Co,Ltd.
-400000-4FFFFF     (base 16)		EQPlay Intelligent Technology(Kunshan) Co,Ltd.
-				No. 58 Xinnengyuan Road, Yushan Town, Kunshan
-				Kunshan  Jiangsu  215300
-				CN
-
-AC-1D-DF   (hex)		Sichuan Odot Automation System Co.,Ltd.
-800000-8FFFFF     (base 16)		Sichuan Odot Automation System Co.,Ltd.
-				No.6,Hongsheng Street
-				MianYang  SiChuan  621102
-				CN
-
-AC-1D-DF   (hex)		ConectaIP Tecnologia S.L.
-200000-2FFFFF     (base 16)		ConectaIP Tecnologia S.L.
-				Novell 58, 4.2
-				Barcelona    08014
-				ES
-
-34-D0-B8   (hex)		NTX Embedded
-D00000-DFFFFF     (base 16)		NTX Embedded
-				4275 Kellway Circle, Suite #106
-				Addison  TX  75001
-				US
-
-AC-1D-DF   (hex)		Solare Datensysteme GmbH
-900000-9FFFFF     (base 16)		Solare Datensysteme GmbH
-				Fuhrmannstraße 9
-				Geislingen-Binsdorf  Baden-Wuerttemberg  72351
-				DE
-
-CC-22-37   (hex)		Tolomatic, Inc.
-B00000-BFFFFF     (base 16)		Tolomatic, Inc.
-				3800 County Road 116
-				Hamel  MN  55340
-				US
-
-74-1A-E0   (hex)		ITS Partner (O.B.S) S.L.
-E00000-EFFFFF     (base 16)		ITS Partner (O.B.S) S.L.
-				Av. Corts Catalanes 9-11 
-				Sant Cugat del Valles  Barcelona  08173
-				ES
-
-CC-22-37   (hex)		MANUFACTURAS Y TRANSFORMADOS AB, S.L.
-E00000-EFFFFF     (base 16)		MANUFACTURAS Y TRANSFORMADOS AB, S.L.
-				SANT ANTONI DE BAIX, 110-112
-				IGUALADA  BARCELONA  08700
-				ES
-
-74-1A-E0   (hex)		BÄR Bahnsicherung AG
-700000-7FFFFF     (base 16)		BÄR Bahnsicherung AG
-				Luppmenstrasse 3
-				Fehraltorf     8320
-				CH
-
-74-1A-E0   (hex)		Broadcast Wireless Systems Ltd
-800000-8FFFFF     (base 16)		Broadcast Wireless Systems Ltd
-				Unit 9, Swanwick Business Centre, Bridge Road
-				Southampton  Hampshire  SO31 7GB
-				GB
-
-04-71-4B   (hex)		Shenzhen WayOS Technology Crop., Ltd.
-200000-2FFFFF     (base 16)		Shenzhen WayOS Technology Crop., Ltd.
-				F18, Yousong Business Building, Longhua New Districe, Shenzhen, China
-				Shenzhen  Guangdong  518109
-				CN
-
-CC-22-37   (hex)		Apeiron Data Systems
-200000-2FFFFF     (base 16)		Apeiron Data Systems
-				81 Blue Ravine Road
-				Folsom  CA  95630
-				US
-
-2C-27-9E   (hex)		Amaryllo International Inc.
-E00000-EFFFFF     (base 16)		Amaryllo International Inc.
-				4F, No. 159, Xianzheng 9th Rd.,
-				ZUHUBEI CITY  HSINCHU COUNTY  302
-				TW
-
-2C-27-9E   (hex)		octoScope, Inc.
-900000-9FFFFF     (base 16)		octoScope, Inc.
-				305 Foster Street, #104
-				Littleton  MA  01460
-				US
-
-2C-27-9E   (hex)		Institut Dr. Foerster GmbH & Co. KG
-800000-8FFFFF     (base 16)		Institut Dr. Foerster GmbH & Co. KG
-				In Laisen 70
-				Reutlingen    72766
-				DE
-
-CC-22-37   (hex)		SHENZHEN HOOENERGY TECHNOLOGY CO.,LTD
-D00000-DFFFFF     (base 16)		SHENZHEN HOOENERGY TECHNOLOGY CO.,LTD
-				NO.5C3-5,BLOCK CD,TIANZHANDASHA,FUTIAN DISTRICT
-				SHENZHEN    518000
-				CN
-
-2C-27-9E   (hex)		Shijiazhuang King Transportation Equipment Co.,Ltd
-400000-4FFFFF     (base 16)		Shijiazhuang King Transportation Equipment Co.,Ltd
-				No.255 Changjiang Road
-				Shijiazhuang  Hebei  050000
-				CN
-
-18-9B-A5   (hex)		Shenzhen Tong Tai Yi information Technology Co.,Ltd
-800000-8FFFFF     (base 16)		Shenzhen Tong Tai Yi information Technology Co.,Ltd
-				District C，3rd Floor，Bldg B1,Digital Tech Park,7th GaoXin South Blvd,Tech Park,NanShan，ShenZhen，China
-				shenzhen  guangdong  518102
-				CN
-
-84-39-BE   (hex)		ShenZhen Fudeyu Technology co.,Ltd
-300000-3FFFFF     (base 16)		ShenZhen Fudeyu Technology co.,Ltd
-				1st Floor, Building C, No.3 Jinyuan Road, Heao Strict, Henggang Street, Longgang Area, Shenzhen.
-				Shenzhen  Guangdong province  518115
-				CN
-
-18-9B-A5   (hex)		PHINETWORKS
-300000-3FFFFF     (base 16)		PHINETWORKS
-				412, Woorim E-Biz Center 2, Digital ro 33 gil
-				Seoul  Guro gu  08377
-				KR
-
-34-29-8F   (hex)		Nanjing Sandemarine Electric Co.,Ltd
-800000-8FFFFF     (base 16)		Nanjing Sandemarine Electric Co.,Ltd
-				Room 202, D Building, No.2 Dongda Road, Pukou District, Nanjing, Jiangsu Province, P.R.China
-				Nanjing  Jiangsu  210032
-				CN
-
-90-4E-91   (hex)		SKODA ELECTRIC a.s.
-D00000-DFFFFF     (base 16)		SKODA ELECTRIC a.s.
-				Tylova 1/57
-				Plzen    301 28
-				CZ
-
-18-9B-A5   (hex)		APANA Inc.
-900000-9FFFFF     (base 16)		APANA Inc.
-				4290 Pacific Hwy A
-				Bellingham  WA  98226
-				US
-
-90-4E-91   (hex)		Wrtnode technology Inc.
-400000-4FFFFF     (base 16)		Wrtnode technology Inc.
-				Dingsi Lu #18, Shahe, Changping Dist.
-				Beijing    102209
-				CN
-
-34-29-8F   (hex)		Schnick-Schnack-Systems GmbH
-B00000-BFFFFF     (base 16)		Schnick-Schnack-Systems GmbH
-				Mathias-Brüggen Str. 79
-				Koeln    50829 
-				DE
-
-34-29-8F   (hex)		Chengdu Meross Technology Co., Ltd.
-100000-1FFFFF     (base 16)		Chengdu Meross Technology Co., Ltd.
-				No. 25, Yizhou Avenue, Gaoxin
-				Chengdu  Sichuan  610000
-				CN
-
-34-29-8F   (hex)		Bellman & Symfon
-600000-6FFFFF     (base 16)		Bellman & Symfon
-				Södra Långebergsgatan 30
-				Västra Frölunda    42132
-				SE
-
-34-00-8A   (hex)		SHENZHEN WXL ELECTRONICS CO., LTD.
-E00000-EFFFFF     (base 16)		SHENZHEN WXL ELECTRONICS CO., LTD.
-				Internet Industry Base,Baoyuan Road,Bao'an District
-				Shenzhen    518100
-				CN
-
-34-00-8A   (hex)		Project Engineering srl
-B00000-BFFFFF     (base 16)		Project Engineering srl
-				Via Colle Ramole 11
-				Impruneta  FI  50023
-				IT
-
-34-29-8F   (hex)		Virtual Trunk Pte Ltd
-A00000-AFFFFF     (base 16)		Virtual Trunk Pte Ltd
-				12 Kallang Avenue 
-				Aperia #04-30    339511
-				SG
-
-34-29-8F   (hex)		Beijing Vorx Telecommunications Co., Ltd.
-300000-3FFFFF     (base 16)		Beijing Vorx Telecommunications Co., Ltd.
-				No.3 Minzhuang Rd, Haidian District
-				Beijing    100195
-				CN
-
-34-00-8A   (hex)		Angee Technologies Ltd.
-000000-0FFFFF     (base 16)		Angee Technologies Ltd.
-				City House, 3 Cranwood Street
-				London     EC1V 9PE
-				GB
-
-78-D8-00   (hex)		Shenzhen Envicool Information Technology Co., Ltd
-100000-1FFFFF     (base 16)		Shenzhen Envicool Information Technology Co., Ltd
-				Building 9, Hongxin Industrial Park, Guanlan, Longhua District, 
-				Shenzhen  Guangdong  518110
-				CN
-
-78-D8-00   (hex)		Shenzhen Scodeno Technology Co,. Ltd.
-300000-3FFFFF     (base 16)		Shenzhen Scodeno Technology Co,. Ltd.
-				New Longhua District，Guanlan rich Industrial Zone No. 22，Silicon Valley Power Digital Industrial Park A6 Building 2 floor
-				Shenzhen  Guangdong  518110
-				CN
-
-78-D8-00   (hex)		Shenzhen Chenzhuo Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Shenzhen Chenzhuo Technology Co., Ltd.
-				301,3/F,Longtangge,1183 Liuxian Avenue,Nanshan
-				Shenzhen  Guangdong  518055
-				CN
-
-78-D8-00   (hex)		Salunda Ltd
-800000-8FFFFF     (base 16)		Salunda Ltd
-				6 Avonbury Business Park, Howes Lane
-				Bicester  Oxon  Ox26 2UA
-				GB
-
-7C-BA-CC   (hex)		ALPHA TECHNOLOGIES, LLC
-E00000-EFFFFF     (base 16)		ALPHA TECHNOLOGIES, LLC
-				3030 GILCHRIST ROAD
-				AKRON  OH  44305
-				US
-
-7C-BA-CC   (hex)		Flying Loft Inc.
-C00000-CFFFFF     (base 16)		Flying Loft Inc.
-				Rm. 1602, 16th floor, JNK Digital Tower 111
-				Seoul    08390
-				KR
-
-F8-8A-3C   (hex)		Avateq Corp.
-E00000-EFFFFF     (base 16)		Avateq Corp.
-				3555 - 14th Ave., Unit 18
-				Markham  ON  L3R 0H5
-				CA
-
-40-A3-6B   (hex)		SFT Co., Ltd.
-800000-8FFFFF     (base 16)		SFT Co., Ltd.
-				2-7-11
-				Yamato-shi  Fukaminishi  242-0018
-				JP
-
-4C-65-A8   (hex)		High Infinity Germany
-E00000-EFFFFF     (base 16)		High Infinity Germany
-				Freiburgerstr. 9
-				Emmendingen  Deutschland  79312
-				DE
-
-4C-65-A8   (hex)		Nuviz Oy
-600000-6FFFFF     (base 16)		Nuviz Oy
-				Joensuunkatu 7
-				Salo    24100
-				FI
-
-F8-8A-3C   (hex)		FARA AS
-B00000-BFFFFF     (base 16)		FARA AS
-				Sjøgangen 4
-				Trondheim    NO-7010
-				NO
-
-F8-8A-3C   (hex)		ART SPA
-000000-0FFFFF     (base 16)		ART SPA
-				VOC.PISCHIELLO, 20
-				PASSIGNANO SUL TRASIMENO  PG  06065
-				IT
-
-8C-14-7D   (hex)		Nanjing bilian information Technology Co.,Ltd.
-400000-4FFFFF     (base 16)		Nanjing bilian information Technology Co.,Ltd.
-				Room 407,Building 1,No.8.Huayuan Road,Xuanwu District,Nanjing
-				Nanjing  Jiangsu   210000
-				CN
-
-8C-14-7D   (hex)		Bluemega Document & Print Services
-A00000-AFFFFF     (base 16)		Bluemega Document & Print Services
-				1 Allée de Londres - Batiment Les Bénares
-				Villejust  Essonne  91140
-				FR
-
-4C-65-A8   (hex)		Instant Byte, S.L.
-800000-8FFFFF     (base 16)		Instant Byte, S.L.
-				Calle Julio Palacios, 10 Naves 1-5, Pol. Ind. Ntra. Sra. de Butarque
-				Leganés  Madrid  28914
-				ES
-
-4C-65-A8   (hex)		Orica Europe Pty Ltd & Co KG
-200000-2FFFFF     (base 16)		Orica Europe Pty Ltd & Co KG
-				Muelheimer Strasse 5
-				Troisdorf  NRW  53840
-				DE
-
-A0-C5-F2   (hex)		UnaliWear, Inc.
-D00000-DFFFFF     (base 16)		UnaliWear, Inc.
-				3410 Cherry Lane
-				Austin  TX  78703
-				US
-
-A0-C5-F2   (hex)		Impulse Networks Pte Ltd
-900000-9FFFFF     (base 16)		Impulse Networks Pte Ltd
-				1 Raffles Place, #44-08 Raffles Place
-				Singapore    048616
-				SG
-
-50-FF-99   (hex)		IPC Global
-400000-4FFFFF     (base 16)		IPC Global
-				4 Wadhurst Drive
-				Boronia  Victoria  3155
-				AU
-
-A0-C5-F2   (hex)		CoolR Group Inc
-800000-8FFFFF     (base 16)		CoolR Group Inc
-				14100 Parke Long Ct Suite I
-				Chantilly  VA  20151
-				US
-
-A0-C5-F2   (hex)		Glooko inc
-C00000-CFFFFF     (base 16)		Glooko inc
-				899 W. Evelyn Avenue
-				Mountain View  CA  94041
-				US
-
-F0-23-B9   (hex)		Xiamen Jinhaode Electronic Co.,Ltd
-600000-6FFFFF     (base 16)		Xiamen Jinhaode Electronic Co.,Ltd
-				2003# Fuyu Build, Changqing Road 536, Siming
-				Xiamen  Fujian  361009
-				CN
-
-F0-23-B9   (hex)		Aquametro AG
-000000-0FFFFF     (base 16)		Aquametro AG
-				Ringstr. 75
-				Therwil    4106
-				CH
-
-F0-23-B9   (hex)		G3 TECHNOLOGIES< INC
-800000-8FFFFF     (base 16)		G3 TECHNOLOGIES< INC
-				2904 BACK ACRE CIRCLE, STE 107
-				MOUNT AIRY  MD  21771
-				US
-
-04-71-4B   (hex)		Gimso Mobile Ltd
-E00000-EFFFFF     (base 16)		Gimso Mobile Ltd
-				16 Hatidhar St
-				Raanana    4366518
-				IL
-
-F0-23-B9   (hex)		EZVIS LIMITED
-400000-4FFFFF     (base 16)		EZVIS LIMITED
-				FLAT/RM 1605A Ho KING COMMERCIAL CENTRE 2-16 FA YUEN STREET
-				HONGKONG    999077
-				HK
-
-60-D7-E3   (hex)		Avalun
-000000-0FFFFF     (base 16)		Avalun
-				7 parvis louis neel
-				grenoble    38000
-				FR
-
-60-D7-E3   (hex)		Wilderness Labs Inc.
-A00000-AFFFFF     (base 16)		Wilderness Labs Inc.
-				700 Edgewater Blvd., #108
-				Foster City  CA  94404
-				US
-
-60-D7-E3   (hex)		Revol Technologies inc
-500000-5FFFFF     (base 16)		Revol Technologies inc
-				5336 Queen Mary   Cote-St-Lu, APT#5
-				montreal  QC  H3X1T8
-				CA
-
-60-D7-E3   (hex)		SKS Automaatio oy
-300000-3FFFFF     (base 16)		SKS Automaatio oy
-				Martinkylantie 50
-				Vantaa    01720
-				FI
-
-08-ED-02   (hex)		D2SLink Systems
-000000-0FFFFF     (base 16)		D2SLink Systems
-				47 Rue Marcel Dassault
-				Boulogne Billancourt    92514
-				FR
-
-08-ED-02   (hex)		Imperx, Inc
-100000-1FFFFF     (base 16)		Imperx, Inc
-				6421 Congress Avenue
-				Boca Raton  FL  33487
-				US
-
-98-AA-FC   (hex)		Comarch S.A. 
-E00000-EFFFFF     (base 16)		Comarch S.A. 
-				Al. Jana Pawla II 39A
-				Krakow  Poland  31-864
-				PL
-
-98-AA-FC   (hex)		BEAM Authentic
-900000-9FFFFF     (base 16)		BEAM Authentic
-				25 Tamalpais Avenue, Suite C
-				San Anselmo  CA  94960
-				US
-
-98-AA-FC   (hex)		dots Inc.
-C00000-CFFFFF     (base 16)		dots Inc.
-				10F WiL Office, Izumi Garden Tower, 1-6-1 Roppongi, Minatoku
-				Tokyo  Tokyo  1066010
-				JP
-
-14-4F-D7   (hex)		D&S Cable Industries (HK) Limited
-C00000-CFFFFF     (base 16)		D&S Cable Industries (HK) Limited
-				11th Floor,AXA Centre, 151 Gloucester Road Hong Kong
-				HONGKONG    999077
-				CN
-
-14-4F-D7   (hex)		FedEx Services OTI
-200000-2FFFFF     (base 16)		FedEx Services OTI
-				920 W Poplar Ave, Suite 101
-				Collierville  TN  38017
-				US
-
-14-4F-D7   (hex)		Annapurna labs
-000000-0FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-F8-02-78   (hex)		BETTINI SRL
-700000-7FFFFF     (base 16)		BETTINI SRL
-				VIA CESARE BATTISTI 22
-				CESANO MADERNO  MILAN  20031
-				IT
-
-14-4F-D7   (hex)		NPort Networks Inc.,
-800000-8FFFFF     (base 16)		NPort Networks Inc.,
-				9F No. 242 BaoAi street, ShuLin District,
-				New Taipei  Taiwan  23845
-				TW
-
-14-4F-D7   (hex)		Zehnder Group AG
-100000-1FFFFF     (base 16)		Zehnder Group AG
-				Moortalstrasse 1
-				Gränichen    CH-5722 
-				CH
-
-A4-11-63   (hex)		Dspread Technology (Beijing) Inc.
-800000-8FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
-				Jingxin Building, 2045 Suite , Chaoyang District
-				Beijing    100027
-				CN
-
-A4-11-63   (hex)		Pax
-300000-3FFFFF     (base 16)		Pax
-				4 cresswell gardens
-				london  England  sw5 0bj
-				GB
-
-1C-A0-D3   (hex)		Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
-500000-5FFFFF     (base 16)		Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
-				Unit C&D, No.201 WuXiang, Export Processing Zone A No.200Suhong Road SIP
-				Suzhou  JiangSu  215021
-				CN
-
-1C-A0-D3   (hex)		NPO TELECOM JSC
-400000-4FFFFF     (base 16)		NPO TELECOM JSC
-				31, Votkinskoe shosse str.
-				Izhevsk  Udmurtia  426039
-				RU
-
-1C-A0-D3   (hex)		Intertecno SRL NISUTA
-600000-6FFFFF     (base 16)		Intertecno SRL NISUTA
-				Av. Belgrano 1209
-				Capital Federal  Buenos Aires  1093
-				AR
-
-1C-A0-D3   (hex)		SAVELEC
-300000-3FFFFF     (base 16)		SAVELEC
-				rue de la houille blanche
-				HERMILLON  SAVOIE  73300
-				FR
-
-40-F3-85   (hex)		KATO ENGINEERING INC.
-500000-5FFFFF     (base 16)		KATO ENGINEERING INC.
-				2075 HOWARD DRIVE WEST
-				NORTH MANKATO   MN  56003
-				US
-
-40-F3-85   (hex)		BBB Inc.
-E00000-EFFFFF     (base 16)		BBB Inc.
-				28, Yatap-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13522
-				KR
-
-8C-C8-F4   (hex)		ITECH Electronic Co.,ltd.
-400000-4FFFFF     (base 16)		ITECH Electronic Co.,ltd.
-				No.108, XiShanqiao Nanlu
-				Nanjing  Jiangsu  210039
-				CN
-
-34-04-9E   (hex)		ND SatCom GmbH
-E00000-EFFFFF     (base 16)		ND SatCom GmbH
-				Graf-von-Soden-Straße
-				Immenstaad  Baden-Württemberg  88090
-				DE
-
-34-04-9E   (hex)		Seeiner Technology Co.,LTD
-500000-5FFFFF     (base 16)		Seeiner Technology Co.,LTD
-				floor 6,Building 14,No.1008 Xiangwang street,Hangzhou City,Zhejiang province
-				hangzhou    311121
-				CN
-
-34-04-9E   (hex)		Nanjing Mythware Information Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Nanjing Mythware Information Technology Co., Ltd.
-				Level 13, Unit 3, Zijin Entrepreneur R&D Centre, No.89 Shengli Road, Jiangning District
-				Nanjing  Jiangsu  211106
-				CN
-
-A4-58-0F   (hex)		Finetree Communications Inc
-E00000-EFFFFF     (base 16)		Finetree Communications Inc
-				#406, Shinyatap Prugiocity2, Yanghyunro 405
-				Seungnamsi    13439
-				KR
-
-7C-CB-E2   (hex)		Easy Broadband Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Easy Broadband Technology Co., Ltd.
-				3rd Floor, Jinyanlong Building, Xisanqi Bridge, Haidian District, Beijing 100096, China
-				Beijing  Beijing  100096
-				CN
-
-7C-CB-E2   (hex)		Hangzhou Kaicom Communication Co.,Ltd
-700000-7FFFFF     (base 16)		Hangzhou Kaicom Communication Co.,Ltd
-				12th Floor,Block B CONBA Building,No.288 jiangnan Avenue , Binjiang District, Hangzhou, China
-				Hangzhou  Zhejiang  310051
-				CN
-
-50-0B-91   (hex)		Shenzhen Lucky Sonics Co .,Ltd
-D00000-DFFFFF     (base 16)		Shenzhen Lucky Sonics Co .,Ltd
-				201A, BLOCK 10 ROW 1, SHANGTUN VILLAGE HESHUIKOU COMMUNITY,GO NGMING STREET, GUANGMING DISTRICT
-				SHENZHEN  GUANGDONG  518107
-				CN
-
-A4-58-0F   (hex)		CoAsia Microelectronics Corp.
-500000-5FFFFF     (base 16)		CoAsia Microelectronics Corp.
-				13F, No. 3-2, Park St. Nangang District
-				Taipei    11503
-				TW
-
-50-0B-91   (hex)		Shenzhen zhong ju  Fiber optical Co.Ltd
-E00000-EFFFFF     (base 16)		Shenzhen zhong ju  Fiber optical Co.Ltd
-				3t Floor Build A .jin he Rui park .guan lan.
-				Shen zhen  Guang dong  518000
-				CN
-
-A4-58-0F   (hex)		Shenzhen City billion Leiden science and Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Shenzhen City billion Leiden science and Technology Co., Ltd.
-				Shenzhen City, Baoan District Songgang Street Community Goodrich Tantou Industrial Park plant building 2
-				Shenzhen City  Guangdong Province  518000
-				CN
-
-1C-C0-E1   (hex)		Videri Inc.
-400000-4FFFFF     (base 16)		Videri Inc.
-				541 West 23rd Street
-				New York  NY  10011
-				US
-
-50-0B-91   (hex)		Diamond Traffic Products, Inc
-C00000-CFFFFF     (base 16)		Diamond Traffic Products, Inc
-				76433 Alder Street
-				Oakridge  OR  97463
-				US
-
-7C-CB-E2   (hex)		Heyuan Yongyida Technology Holdings Co.,Ltd.
-000000-0FFFFF     (base 16)		Heyuan Yongyida Technology Holdings Co.,Ltd.
-				Xin Yong Yi Science Park, GaoXin 3rd Road, High-tech Zone
-				Heyuan  Guangdong  517000
-				CN
-
-7C-CB-E2   (hex)		Astrum Technologies CC
-300000-3FFFFF     (base 16)		Astrum Technologies CC
-				Unit 49, Sandton View Office Park, 1 Conduit Str, Lyme Park
-				Johannesburg  Gauteng  2060
-				ZA
-
-24-4E-7B   (hex)		Tekelek Europe Ltd
-000000-0FFFFF     (base 16)		Tekelek Europe Ltd
-				Unit 118 Shannon Free zone
-				Shannon  Co. Clare  
-				IE
-
-7C-CB-E2   (hex)		CeoTronics AG
-100000-1FFFFF     (base 16)		CeoTronics AG
-				Adam-Opel-Str. 6
-				Roedermark  Hessen  63322
-				DE
-
-24-4E-7B   (hex)		Shenzhen AWT science &  technology limited
-A00000-AFFFFF     (base 16)		Shenzhen AWT science &  technology limited
-				22E of Huari Building,Nanhua Garden,South Of Huaqiang Road,Futian Area
-				Shenzhen    518057
-				CN
-
-4C-E1-73   (hex)		DAIKOKU DENKI CO.,LTD.
-600000-6FFFFF     (base 16)		DAIKOKU DENKI CO.,LTD.
-				1-43-5 Nagono Nakamura-ku
-				Nagoya  Aichi  450-8640
-				JP
-
-48-65-EE   (hex)		EnBW Energie Baden-Württemberg AG
-B00000-BFFFFF     (base 16)		EnBW Energie Baden-Württemberg AG
-				Durlacher Allee 93
-				Karlsruhe    76131
-				DE
-
-48-65-EE   (hex)		Gopod Group Limited
-100000-1FFFFF     (base 16)		Gopod Group Limited
-				5-6/f,building 8,Lianjian Industrial Park,Longhua
-				Shenzhen    518109
-				CN
-
-24-4E-7B   (hex)		UniMAT Automation Technology Co., Ltd.
-900000-9FFFFF     (base 16)		UniMAT Automation Technology Co., Ltd.
-				 5/F, Building 15&16, Wisdomland Business Park, Road 2 Nantou port, Nanshan District
-				Shenzhen   Guangdong   518052
-				CN
-
-48-65-EE   (hex)		Winn Technology Co.,Ltd
-D00000-DFFFFF     (base 16)		Winn Technology Co.,Ltd
-				Winn Tech Industrial Park Xianghe Rd.Xinmin Area，Chang an，Dongguan City Guangdong Province，China.
-				Dongguan  Guangdong  523879
-				CN
-
-48-65-EE   (hex)		Data Technology Inc.
-300000-3FFFFF     (base 16)		Data Technology Inc.
-				Tachikawa Nishiki-cho Bldg 8F, 1-8-7 Nishiki-cho
-				Tachikawa-shi  Tokyo  190-0022
-				JP
-
-4C-E1-73   (hex)		Nanjing Tongke Technology Development Co., LTD
-800000-8FFFFF     (base 16)		Nanjing Tongke Technology Development Co., LTD
-				8 Taishan Road jianye
-				Nanjing    210000
-				CN
-
-1C-C0-E1   (hex)		HANGZHOU SOFTEL OPTIC CO., LTD
-300000-3FFFFF     (base 16)		HANGZHOU SOFTEL OPTIC CO., LTD
-				101 BINKANG ROAD, BINJIANG DISTRICT
-				HANGZHOU  ZHEJIANG  310052
-				CN
-
-4C-E1-73   (hex)		Huizhou Dehong Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Huizhou Dehong Technology Co., Ltd.
-				Dongxing
-				Huizhou  Guangdong  516210
-				CN
-
-4C-E1-73   (hex)		Shanghai Ehong Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		Shanghai Ehong Technology Co.,Ltd
-				RM1505,blk 1st,No.833 South Hongmei Road Minhang Dis
-				Shanghai   shanghai  200237
-				CN
-
-AC-64-DD   (hex)		DIGIBIRD TECHNOLOGY CO., LTD.
-E00000-EFFFFF     (base 16)		DIGIBIRD TECHNOLOGY CO., LTD.
-				LONGGUAN BUSINESS CENTER, SUITE 501. HUILONGGUAN W., ST., CHANGPING
-				BEIJING  BEIJING  102208
-				CN
-
-1C-C0-E1   (hex)		SECHERON SA
-A00000-AFFFFF     (base 16)		SECHERON SA
-				Rue du Pre Bouvier 25
-				SATIGNY  GENEVA  1242
-				CH
-
-4C-E1-73   (hex)		NewVastek
-500000-5FFFFF     (base 16)		NewVastek
-				5F., No.65, Shitan Rd.
-				Taipei City  Neihu Dist.  11469
-				TW
-
-38-3A-21   (hex)		Chengdu Krosslan Technology Inc.
-700000-7FFFFF     (base 16)		Chengdu Krosslan Technology Inc.
-				4F,Tower B, Rennan Mansion, No.5 Section 3, 2nd Ring Road South
-				Chengdu  Sichuan  610041
-				CN
-
-38-3A-21   (hex)		Skylark Wireless LLC
-900000-9FFFFF     (base 16)		Skylark Wireless LLC
-				1953 Richmond Ave.
-				Houston  TX  77098
-				US
-
-38-3A-21   (hex)		SDNware technology co.,LTD
-E00000-EFFFFF     (base 16)		SDNware technology co.,LTD
-				166 Renai Road
-				Suzhou    215000
-				CN
-
-AC-64-DD   (hex)		infypower Co., Ltd
-300000-3FFFFF     (base 16)		infypower Co., Ltd
-				-101, No. 3009, Shahexi Road, Nanshan District,
-				shenzhen  guangdong  518055
-				CN
-
-38-3A-21   (hex)		Pactron
-B00000-BFFFFF     (base 16)		Pactron
-				3000 Patrick Henry 
-				Santa Clara   CA  95054
-				US
-
-F8-1D-78   (hex)		ADTECHNO Inc.
-100000-1FFFFF     (base 16)		ADTECHNO Inc.
-				2-3-10 Kudanminami, Chiyoda-Ku
-				Tokyo    102-0074
-				JP
-
-70-F8-E7   (hex)		Flexim Security Oy
-600000-6FFFFF     (base 16)		Flexim Security Oy
-				P.O.Box 700
-				ESPOO  Southern Finland  02131
-				FI
-
-70-F8-E7   (hex)		Kontech Electronics Co., Ltd
-900000-9FFFFF     (base 16)		Kontech Electronics Co., Ltd
-				Longhua,Dalang,Langkou Industry Park
-				shenzhen  Guangdong  518109
-				CN
-
-70-F8-E7   (hex)		SHENZHEN Xin JiuNing Electronics Co Ltd
-000000-0FFFFF     (base 16)		SHENZHEN Xin JiuNing Electronics Co Ltd
-				Floor 2, Building 11, WaiMao Industrial Park, Shiyan Subdistrict , Baoan District, Shenzhen
-				SHENZHEN  GUANGDONG  518108
-				CN
-
-70-F8-E7   (hex)		Eclipse Security
-800000-8FFFFF     (base 16)		Eclipse Security
-				3900 N. 29th Ave
-				Hollywood  FL  33020
-				US
-
-F8-1D-78   (hex)		SHENZHUOYUE TECHNOLOGY.,LTD
-C00000-CFFFFF     (base 16)		SHENZHUOYUE TECHNOLOGY.,LTD
-				Room 815/816 , ShangMei Times Building, No. 57  LongGuan East Road,Long Hua New District,
-				Shenzhen  Guangdong  518000
-				CN
-
-70-F8-E7   (hex)		System Level Solutions (India) Pvt.
-100000-1FFFFF     (base 16)		System Level Solutions (India) Pvt.
-				32, D4, Phase-1, GIDC, V U Nagar
-				Anand  Gujarat  388121
-				IN
-
-84-E0-F4   (hex)		iSolution Technologies Co.,Ltd.
-A00000-AFFFFF     (base 16)		iSolution Technologies Co.,Ltd.
-				5F,Bldg #6, Zhongguan Honghualing Industrial South Park
-				Shenzhen  Guangdong  518055
-				CN
-
-84-E0-F4   (hex)		Dantherm
-700000-7FFFFF     (base 16)		Dantherm
-				Marienlystvej 65 
-				Skive    7800
-				DK
-
-84-E0-F4   (hex)		Liaoning IK'SONYA Science and Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Liaoning IK'SONYA Science and Technology Co., Ltd.
-				Floor9, Building E01, No.861-1 Shangshengoucun Dongling District Shenyang City Liaoning Province
-				Shenyang    110000
-				CN
-
-84-E0-F4   (hex)		MedicusTek Inc.
-100000-1FFFFF     (base 16)		MedicusTek Inc.
-				9F No.3-2 Yuanqu St. Nangang Dist.
-				Taipei    11503
-				TW
-
-84-E0-F4   (hex)		RAY Co.,LTD
-800000-8FFFFF     (base 16)		RAY Co.,LTD
-				3~4F, 332-7, Samsung1-ro
-				Hwaseong-si  Gyeonggi-do  445-330
-				KR
-
-C0-D3-91   (hex)		XENA SECURITY LIMITED
-800000-8FFFFF     (base 16)		XENA SECURITY LIMITED
-				ROOM 1210, WANG CHEONG ENTERPRISE CENTRE, 65 CHAI WAN KOK STREET, TSUEN WAN, N.T.
-				HONG KONG  Select State  000000
-				HK
-
-C0-D3-91   (hex)		Hofon Automation Co.,Ltd
-200000-2FFFFF     (base 16)		Hofon Automation Co.,Ltd
-				8th floor,3rd building of Lierda,No1328 Wenyi Road
-				Hangzhou  Zhejiang  310000
-				CN
-
-98-6D-35   (hex)		blossom communications corp.
-400000-4FFFFF     (base 16)		blossom communications corp.
-				Floor 19, No. 104, Sec. 1, Sin Tai Wu Road, Xi Zhi District
-				New Taipei City    221
-				TW
-
-C0-D3-91   (hex)		IXON B.V.
-300000-3FFFFF     (base 16)		IXON B.V.
-				Vierlingsbeekseweg 52A
-				Overloon  Noord-Brabant  5825 AX
-				NL
-
-58-E8-76   (hex)		Chengdu Vision-Zenith Technology Co.,Ltd
-800000-8FFFFF     (base 16)		Chengdu Vision-Zenith Technology Co.,Ltd
-				3rd Floor,Unit 1 Building 6,No.88 of Tianchen Road West Science Park, Hi-tech zone west
-				Chengdu  Sichuan  610000
-				CN
-
-58-E8-76   (hex)		SHENZHEN DIGISSIN TECHNOLOGY
-A00000-AFFFFF     (base 16)		SHENZHEN DIGISSIN TECHNOLOGY
-				Room 315, Zixinda Building, No. 1053, BAOYUAN Road, Xixiang, Baoan District,
-				SHENZHEN  GUANGDONG  518102
-				CN
-
-58-E8-76   (hex)		KUSTOM SIGNALS INC
-C00000-CFFFFF     (base 16)		KUSTOM SIGNALS INC
-				1010 W CHESTNUT
-				CHANUTE  KS  66720
-				US
-
-C0-D3-91   (hex)		REGULUS CO.,LTD.
-D00000-DFFFFF     (base 16)		REGULUS CO.,LTD.
-				Yotsuya  Orchid Bldg.  23-3 Daikyo-cho
-				 Shinjuku-ku  Tokyo  160-0015
-				JP
-
-F0-AC-D7   (hex)		Sercomm Corporation.
-400000-4FFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-F0-AC-D7   (hex)		Hanju Network Technologies Co.
-700000-7FFFFF     (base 16)		Hanju Network Technologies Co.
-				lvdilanhai building 2303, zhangba street
-				Xi'an  ShaanXi  710065
-				CN
-
-F0-AC-D7   (hex)		Telefonix Incorporated
-800000-8FFFFF     (base 16)		Telefonix Incorporated
-				2340 Ernie Krueger Circle
-				Waukegan  null  60087
-				US
-
-F0-AC-D7   (hex)		PAVO TASARIM URETIM TICARET A.S.
-500000-5FFFFF     (base 16)		PAVO TASARIM URETIM TICARET A.S.
-				Teknopark Istanbul Ar-Ge Binalari 1.Blok Pendik
-				Istanbul  Select State  34349
-				TR
-
-F0-AC-D7   (hex)		Suzhou Pairlink Network Technology
-600000-6FFFFF     (base 16)		Suzhou Pairlink Network Technology
-				Room304, Building 4, No.209, Zhu Yuan Road, Suzhou new district
-				Suzhou  Jiangsu  215011
-				CN
-
-28-36-38   (hex)		Knowles Electronics LLC
-000000-0FFFFF     (base 16)		Knowles Electronics LLC
-				1151 Maplewood Drive
-				Itasca  IL  60143
-				US
-
-28-36-38   (hex)		APPEAK Technology System Co.Ltd.
-D00000-DFFFFF     (base 16)		APPEAK Technology System Co.Ltd.
-				12F.,No176,Sec.2 Beixin Rd. 
-				Xindian Dist  New Taipei City  231
-				TW
-
-28-36-38   (hex)		Dspread Technology (Beijing) Inc.
-400000-4FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
-				Jingxin Building, 2045 Suite , Chaoyang District
-				Beijing    100027
-				CN
-
-28-36-38   (hex)		Bluekey Pty Ltd
-A00000-AFFFFF     (base 16)		Bluekey Pty Ltd
-				6/28 Newheath Dr 
-				Arundel  Queensland  4214
-				AU
-
-8C-19-2D   (hex)		You Zhengcheng co.,ltd
-C00000-CFFFFF     (base 16)		You Zhengcheng co.,ltd
-				Baoan District 45 District
-				shenzhen  guangdong  518133
-				CN
-
-8C-19-2D   (hex)		Charmlink Tech(HK) Co.,Limited 
-400000-4FFFFF     (base 16)		Charmlink Tech(HK) Co.,Limited 
-				UNIT 04,7/F BRIGHT WAY TOWER NO.33 MONG KOK RD KL
-				HONGKONG    999077
-				HK
-
-8C-19-2D   (hex)		SRETT
-700000-7FFFFF     (base 16)		SRETT
-				305 Avenue Le jour se lève
-				Boulogne-Billancourt    92100
-				FR
-
-8C-19-2D   (hex)		Abside Networks, Inc.
-B00000-BFFFFF     (base 16)		Abside Networks, Inc.
-				16 heritage road
-				Acton  MA  01720
-				US
-
-8C-19-2D   (hex)		ViaWear, Inc.
-900000-9FFFFF     (base 16)		ViaWear, Inc.
-				801 Key Route Blvd
-				Albany  CA  94706
-				US
-
-8C-19-2D   (hex)		Shenzhen Cylan Technology Co.,Ltd
-800000-8FFFFF     (base 16)		Shenzhen Cylan Technology Co.,Ltd
-				Room 605.607.608,Minning Business Building,Caitian North Road,Futian District,Shenzhen
-				Shenzhen  Guangdong  518036
-				CN
-
-CC-D3-1E   (hex)		Siemens AG, MO MLT BG
-900000-9FFFFF     (base 16)		Siemens AG, MO MLT BG
-				Eggenbergerstr. 31
-				Graz  Styria  8020
-				AT
-
-D0-D9-4F   (hex)		DUKSANMECASYS CO., LTD.
-D00000-DFFFFF     (base 16)		DUKSANMECASYS CO., LTD.
-				7F The 6th Byucksan Digital Valley 481-4 Gasan-Dong Geumcheon-Gu 
-				SEOUL    08501
-				KR
-
-C4-7C-8D   (hex)		GETEMED Medizin- und Informationstechnik AG
-800000-8FFFFF     (base 16)		GETEMED Medizin- und Informationstechnik AG
-				Oderstrasse 77
-				Teltow  Brandenburg  14513
-				DE
-
-C4-7C-8D   (hex)		GC AUTOMATION CO,LTD
-B00000-BFFFFF     (base 16)		GC AUTOMATION CO,LTD
-				SECOND FLOOR,BLD 10,GRAIN INDUSTRIAL PARK,NO.299  GUANPING ROAD,GUANLAN NEW DISTRICT,SHENZHEN CITY,CHINA
-				Shenzhen    518000
-				CN
-
-C4-7C-8D   (hex)		Silvus technologies inc
-A00000-AFFFFF     (base 16)		Silvus technologies inc
-				10990 Wilshire blvd. suite 1500
-				Los Angeles   CA  90024
-				US
-
-C4-7C-8D   (hex)		ROBOSTAR
-400000-4FFFFF     (base 16)		ROBOSTAR
-				700, Suin-ro, Sangnok-gu
-				Ansan-si  Kyŏnggi-do  426-220
-				KR
-
-68-91-D0   (hex)		Outstanding Technology Co., Ltd.
-E00000-EFFFFF     (base 16)		Outstanding Technology Co., Ltd.
-				9th floor, New Yaesu bldg., 3-5-12 nihon-bashi
-				Chuo-ku  Tokyo  103-0027
-				JP
-
-C4-7C-8D   (hex)		Watec Co., Ltd.
-300000-3FFFFF     (base 16)		Watec Co., Ltd.
-				254-2 Nihonkoku, Daihoji
-				Tsuruoka-shi  Yamagata  997-0017
-				JP
-
-68-91-D0   (hex)		Multi Alarm Zrt.
-100000-1FFFFF     (base 16)		Multi Alarm Zrt.
-				Basamalom u. 33.
-				Pécs  Baranya  7630
-				HU
-
-68-91-D0   (hex)		QUANTEX
-900000-9FFFFF     (base 16)		QUANTEX
-				010000, Republic of Kazakhstan, Astana, Dostyk st., 5/2, VP 3
-				Astana    010000
-				KZ
-
-E0-B6-F5   (hex)		POMCube Inc. 
-600000-6FFFFF     (base 16)		POMCube Inc. 
-				19363 Brockton Ln
-				Saratoga  CA  95070
-				US
-
-E0-B6-F5   (hex)		Huizhou GISUN Industrial CO. LTD
-300000-3FFFFF     (base 16)		Huizhou GISUN Industrial CO. LTD
-				Gisun Industry Park,Dong Ao Village, Sha Tian Town,HuiYang District ,Huizhou China
-				Huizhou  Guangdong  518114
-				CN
-
-68-91-D0   (hex)		NIPK Electron Co.
-500000-5FFFFF     (base 16)		NIPK Electron Co.
-				Leningradskaya str. 52a. lit.A, pos. Pesochny
-				Saint-Petersburg    197758
-				RU
-
-E0-B6-F5   (hex)		funktel GmbH
-C00000-CFFFFF     (base 16)		funktel GmbH
-				Windmühlenbergstr. 20-22
-				Salzgitter    38259
-				DE
-
-50-FF-99   (hex)		 SHENZHEN KINGVT ELECTRONICS CO.,LTD
-200000-2FFFFF     (base 16)		 SHENZHEN KINGVT ELECTRONICS CO.,LTD
-				 8/F,NO.100,LANGKOU INDUSTRLAL PARK,DALANG STREET,NEW LONGHUA DISTRCT,SHENZHEN,R.R.C
-				Shenzhen    518000
-				CN
-
-E0-B6-F5   (hex)		Yuneec International（China）Co.，Ltd
-800000-8FFFFF     (base 16)		Yuneec International（China）Co.，Ltd
-				388 Zhengwei Road,JinXi Town,Kunshan,Jiangsu,China
-				Kunshan  Jiangsu  215300
-				CN
-
-98-6D-35   (hex)		Zhejiang Hanshow Technology Co., Ltd.
-700000-7FFFFF     (base 16)		Zhejiang Hanshow Technology Co., Ltd.
-				Floor 18, Building C, Ruipu Plaza, No.15,Hongjunying South Rd, Beijing, China
-				beijing  beijing  100012
-				CN
-
-50-FF-99   (hex)		Honeywell International
-700000-7FFFFF     (base 16)		Honeywell International
-				13475 Danielson St # 100
-				Poway  CA  92064
-				US
-
-7C-47-7C   (hex)		Shenzhen Eunicum Electric Co.,Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Eunicum Electric Co.,Ltd.
-				3/F Building 11, Lishan Industrial Park, Yueliangwan,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-7C-47-7C   (hex)		Photosynth Inc.
-100000-1FFFFF     (base 16)		Photosynth Inc.
-				5-11-1 Sumitomo Seimei Gotanda Bldg. 3F
-				Osaki, Shinagawa-ku  Tokyo  141-0032
-				JP
-
-7C-47-7C   (hex)		Zerosystem LTD.Co
-600000-6FFFFF     (base 16)		Zerosystem LTD.Co
-				#905 Hansol Technotown 455 Gyeongsu-Daero
-				Gunpo  Gyeonggido  435-831 
-				KR
-
-98-6D-35   (hex)		Vitronic Dr.-Ing. Stein Bildverarbeitungssysteme GmbH
-600000-6FFFFF     (base 16)		Vitronic Dr.-Ing. Stein Bildverarbeitungssysteme GmbH
-				Hasengartenstraße 14
-				Wiesbaden  Hessen  65189
-				DE
-
-98-6D-35   (hex)		Praesideo B.V.
-D00000-DFFFFF     (base 16)		Praesideo B.V.
-				P.O. Box 24008
-				Utrecht    3502 MA
-				NL
-
-7C-47-7C   (hex)		BungBungame Inc
-000000-0FFFFF     (base 16)		BungBungame Inc
-				15F., No.19-11, Sanchong Rd., Nangang Dist., Taipei City 115, Taiwan (R.O.C.)
-				Taipei    100
-				TW
-
-7C-47-7C   (hex)		Midwest Microwave Solutions
-500000-5FFFFF     (base 16)		Midwest Microwave Solutions
-				2000 Progress Drive
-				Hiawatha  IA  52233
-				US
-
-5C-F2-86   (hex)		Daisen Electronic Industrial Co., Ltd.
-E00000-EFFFFF     (base 16)		Daisen Electronic Industrial Co., Ltd.
-				4-9-24 Nipponbashi, Naniwa-ku
-				Osaka    556-0005
-				JP
-
-5C-F2-86   (hex)		Unfors Raysafe AB
-A00000-AFFFFF     (base 16)		Unfors Raysafe AB
-				Uggledalsvagen 29
-				Billdal    42740
-				SE
-
-38-FD-FE   (hex)		New Telecom Solutions LLC
-400000-4FFFFF     (base 16)		New Telecom Solutions LLC
-				Kedrova 15
-				Moscow  Moscow  117036
-				RU
-
-38-FD-FE   (hex)		CaptiveAire Systems Inc.
-500000-5FFFFF     (base 16)		CaptiveAire Systems Inc.
-				4641 Paragon Park
-				Raleigh  NC  27616
-				US
-
-78-CA-83   (hex)		Elanview Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Elanview Technology Co.,Ltd
-				NO.7001,Zhongchun Road,Minghang District, Shanghai
-				shanghai  shanghai  201101
-				CN
-
-78-CA-83   (hex)		Beijing CarePulse Electronic Technology 
-700000-7FFFFF     (base 16)		Beijing CarePulse Electronic Technology 
-				#6302 Hua Yuan Shang Wo Hui Guan, Hua Yuan Dong Road 30, Hai Dian District
-				BEIJING    100191
-				CN
-
-38-B8-EB   (hex)		CeeNex Inc
-800000-8FFFFF     (base 16)		CeeNex Inc
-				1200 Aerowood Drive  Unit 30
-				Mississauga, ON  Canada L4W 2S7    L4W 2S7
-				CA
-
-78-CA-83   (hex)		IHM
-800000-8FFFFF     (base 16)		IHM
-				Vandtaarnsvej 87
-				Soborg  Copenhagen  2860
-				DK
-
-78-CA-83   (hex)		Zhejiang Science Electronic Tech Co., Ltd
-B00000-BFFFFF     (base 16)		Zhejiang Science Electronic Tech Co., Ltd
-				F5, Huichuang Building ,No.88, Headquarters Business Garden
-				Nanhu District, Jiaxing  Zhejiang  314000
-				CN
-
-1C-87-74   (hex)		Xiaoxinge (Tangshan) Electronic Technology Co., Ltd.
-500000-5FFFFF     (base 16)		Xiaoxinge (Tangshan) Electronic Technology Co., Ltd.
-				D9G Fuhua Plaza, 8# North Street, Chaoyangmen, Dongcheng District
-				Beijing  Beijing  100027
-				CN
-
-1C-87-74   (hex)		New Nordic Engineering
-C00000-CFFFFF     (base 16)		New Nordic Engineering
-				Inge Lehmanns Gade 10
-				Aarhus    8000
-				DK
-
-1C-88-79   (hex)		Toshiba Toko Meter Systems Co., LTD.
-800000-8FFFFF     (base 16)		Toshiba Toko Meter Systems Co., LTD.
-				3484, Sakuragaoka, Kurohama
-				Hasuda-shi  Saitama  349-0192
-				JP
-
-1C-87-74   (hex)		Weber Marking Systems GmbH
-400000-4FFFFF     (base 16)		Weber Marking Systems GmbH
-				Maarweg 33
-				Rheinbreitbach  Rheinland-Pfalz  53619
-				DE
-
-1C-87-74   (hex)		Ing Buero Ziegler
-700000-7FFFFF     (base 16)		Ing Buero Ziegler
-				Schönau
-				Huetten    8825
-				CH
-
-1C-87-74   (hex)		CLABER SPA
-D00000-DFFFFF     (base 16)		CLABER SPA
-				VIA PONTEBBANA 22
-				FIUME VENETO  PORDENONE  33080
-				IT
-
-1C-87-79   (hex)		Istria soluciones de criptografia, S. A.
-900000-9FFFFF     (base 16)		Istria soluciones de criptografia, S. A.
-				Calle la Fragua, 6
-				Tres Cantos  Madrid  28760
-				ES
-
-1C-87-79   (hex)		Hangzhou Xiaowen Intelligent Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		Hangzhou Xiaowen Intelligent Technology Co., Ltd.
-				Room 610、611, F/6, Huaye Building,No.511, Jianye Road, Binjiang District
-				Hang Zhou  Zhe Jiang  310053
-				CN
-
-1C-87-79   (hex)		ZHEJIANG ITENAL TECHNOLOGY CO.,LTD
-800000-8FFFFF     (base 16)		ZHEJIANG ITENAL TECHNOLOGY CO.,LTD
-				SHOES INDUSTRIAL PARK
-				WENZHOU  ZHEJIANG  325401
-				CN
-
-1C-87-79   (hex)		A-GEAR COMPANY LIMITED 
-100000-1FFFFF     (base 16)		A-GEAR COMPANY LIMITED 
-				3F, Building 3, Unit 1, YingJunNianHa Park, LongGang Avenue, LongGang
-				Shenzhen  Guangdong  518114
-				CN
-
-84-39-BE   (hex)		Shenzhen Horn Audio Co.,Ltd.
-B00000-BFFFFF     (base 16)		Shenzhen Horn Audio Co.,Ltd.
-				NO.6 4th GuiHua road,PingShan,
-				Shenzhen  Guangdong  518118
-				CN
-
-84-39-BE   (hex)		Diamond Products LLC
-800000-8FFFFF     (base 16)		Diamond Products LLC
-				21350 Lassen St, Chatsworth, CA  91311, United States
-				Chatsworth  CA  91311
-				US
-
-40-A3-6B   (hex)		Amobile Intelligent Corp.
-B00000-BFFFFF     (base 16)		Amobile Intelligent Corp.
-				18F-1 150 Jianyi Road
-				New Taipei City    23511
-				TW
-
-40-A3-6B   (hex)		Pella Corporation
-700000-7FFFFF     (base 16)		Pella Corporation
-				102 Main St
-				Pella  IA  50219
-				US
-
-40-A3-6B   (hex)		Omnitracs, LLC
-300000-3FFFFF     (base 16)		Omnitracs, LLC
-				717 North Harwood St.
-				Dallas  TX  75201
-				US
-
-40-A3-6B   (hex)		Fin Robotics Inc
-000000-0FFFFF     (base 16)		Fin Robotics Inc
-				11871 Hilltop Dr, Losaltos Hills
-				Los Altos  CA  94024
-				US
-
-80-0A-80   (hex)		Beijing Gooagoo Technical Service Co.,Ltd.
-600000-6FFFFF     (base 16)		Beijing Gooagoo Technical Service Co.,Ltd.
-				Room 402A,Block E,Wangjing Technology Park,Lize Road
-				Beijing  Beijing  100102
-				CN
-
-80-0A-80   (hex)		Shenzhen Zidoo Technology Co., Ltd.
-500000-5FFFFF     (base 16)		Shenzhen Zidoo Technology Co., Ltd.
-				Room 12D,Block A CENTRAL GREAT SEARCHINGS,
-				Shenzhen  Guangdong  518100
-				CN
-
-00-55-DA   (hex)		Donguan WideLink Communication Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Donguan WideLink Communication Technology Co.,Ltd.
-				Guangdong dongguan songshan lake high new technology industry development zone industrial south road no. 6 3 building the second floor
-				Dongguan city  Guangdong province  523808
-				CN
-
-00-55-DA   (hex)		LUCISTECHNOLOGIES（SHANGHAI）CO.,LTD
-700000-7FFFFF     (base 16)		LUCISTECHNOLOGIES（SHANGHAI）CO.,LTD
-				No.57.East Caohejing.Building Lucis XuHui District, Shanghai.200235.China
-				SHANGHAI  SHANGHAI  200235
-				CN
-
-CC-1B-E0   (hex)		Earphone Connection, Ubc.
-500000-5FFFFF     (base 16)		Earphone Connection, Ubc.
-				25139 Ave Stanford
-				Valnecia  CA  91355
-				US
-
-A0-3E-6B   (hex)		Nanjing zhanyi software technology co., LTD
-E00000-EFFFFF     (base 16)		Nanjing zhanyi software technology co., LTD
-				Room 1101-1,Building No.2,No.106 Software Avenue,Yuhuatai District,Nanjing Jiangsu
-				Nanjing  Jiangsu  210000
-				CN
-
-A0-3E-6B   (hex)		Business Support Consultant Co.,Ltd
-100000-1FFFFF     (base 16)		Business Support Consultant Co.,Ltd
-				Room 703-705, 5 Guihua Road, Futian Free Trade Zone,  Shenzhen, China
-				Shenzhen  Guangdong  518038
-				CN
-
-00-55-DA   (hex)		Novexx Solutions GmbH
-300000-3FFFFF     (base 16)		Novexx Solutions GmbH
-				Ohmstrasse 3
-				Eching  Bayern  85386
-				DE
-
-DC-44-27   (hex)		Nautilus Infotech CO., Ltd.
-B00000-BFFFFF     (base 16)		Nautilus Infotech CO., Ltd.
-				No.55, Fengcheng St., Bade District, Taoyuan City 334, Taiwan(R.O.C)
-				Taoyuan City  NA  334
-				TW
-
-DC-44-27   (hex)		Pyrexx Technologies GmbH
-C00000-CFFFFF     (base 16)		Pyrexx Technologies GmbH
-				Spichernstr. 2
-				Berlin  Berlin  10777
-				DE
-
-DC-44-27   (hex)		Shanghai Huahong Integrated Circuit Co.,Ltd
-A00000-AFFFFF     (base 16)		Shanghai Huahong Integrated Circuit Co.,Ltd
-				No.39,Lane572,Bi Bo Road,Zhangjiang High-Tech Park,Shanghai
-				Shanghai  Shanghai  201203
-				CN
-
-1C-21-D1   (hex)		Private
-C00000-CFFFFF     (base 16)		Private
-
-C8-8E-D1   (hex)		German Pipe GmbH
-100000-1FFFFF     (base 16)		German Pipe GmbH
-				Darrweg 43
-				Nordhausen  Thuringia  D-99734
-				DE
-
-1C-21-D1   (hex)		Ognios GmbH
-100000-1FFFFF     (base 16)		Ognios GmbH
-				Dr.-Hans-Lechner-Straße 6
-				Wals-Siezenheim  Salzburg  5071
-				AT
-
-B0-C5-CA   (hex)		D&T Inc.
-900000-9FFFFF     (base 16)		D&T Inc.
-				Gajungbukro 26-121
-				YouSung Gu  Daejeon  305-343
-				KR
-
-DC-44-27   (hex)		Nex Technologies PTY LTD
-400000-4FFFFF     (base 16)		Nex Technologies PTY LTD
-				7 Pimpala Street
-				Lithgow  New South Wales  2790
-				AU
-
-78-C2-C0   (hex)		Beijing Coilabs technology co.,ltd
-800000-8FFFFF     (base 16)		Beijing Coilabs technology co.,ltd
-				The 8th floor, Zhongguancun Dream Lab Building, No.1 Haidian Street, Haidian District, Beijing City, China
-				Beijing  Beijing  100086
-				CN
-
-78-C2-C0   (hex)		Ombitron, Inc.
-A00000-AFFFFF     (base 16)		Ombitron, Inc.
-				1425 Broadway
-				Seattle  Washington  98122
-				US
-
-78-C2-C0   (hex)		KORF Inc.
-D00000-DFFFFF     (base 16)		KORF Inc.
-				201, Radio Engineering Center
-				Yuseong-gu  Daejeon  305-510
-				KR
-
-B4-37-D1   (hex)		Yireh Auto Tech Co.,Ltd.
-600000-6FFFFF     (base 16)		Yireh Auto Tech Co.,Ltd.
-				#703, 311 Nowon-ro, Nowon-gu
-				Seoul  Seoul  139865
-				KR
-
-B4-37-D1   (hex)		Lezyne INC USA
-000000-0FFFFF     (base 16)		Lezyne INC USA
-				645 Tank Farm
-				San Luis Obispo  California  93401
-				US
-
-78-C2-C0   (hex)		Guangzhou Hongcai Stage Equipment co.,ltd
-700000-7FFFFF     (base 16)		Guangzhou Hongcai Stage Equipment co.,ltd
-				no.32 Changsha Rd Shayong village
-				Guangzhou  Guangdong  511450
-				CN
-
-B4-37-D1   (hex)		GE Power Management
-700000-7FFFFF     (base 16)		GE Power Management
-				Avenida Pinoa 10
-				Zamudio  Vizcaya  48170
-				ES
-
-74-F8-DB   (hex)		WiFi Hotspots, SL
-400000-4FFFFF     (base 16)		WiFi Hotspots, SL
-				C/ Montaña Clara, No.18
-				Fañabe  Tenerife  38760
-				ES
-
-74-F8-DB   (hex)		Shenzhen Ruishi Information Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Shenzhen Ruishi Information Technology Co.,Ltd.
-				9G,Building A,Nanyuemingzhu Buliding,No.2322, Houhai Avenue,Nanshan District
-				Shenzhen  Guangdong  518062
-				CN
-
-74-F8-DB   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
-700000-7FFFFF     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
-				HUST Industry Park, East-Lake Development Zone
-				Wuhan  Hubei  430223
-				CN
-
-54-9A-11   (hex)		Niveo International BV
-700000-7FFFFF     (base 16)		Niveo International BV
-				Communicatieweg 9-L
-				Mijdrecht    3641 SG
-				NL
-
-54-9A-11   (hex)		Beijing HTSmartech Co.,Ltd
-E00000-EFFFFF     (base 16)		Beijing HTSmartech Co.,Ltd
-				Suite 301,Unit 2,Building 6,No.29,Jing Hai
-				Beijing  Beijing  100176
-				CN
-
-54-9A-11   (hex)		eTauro LLC
-400000-4FFFFF     (base 16)		eTauro LLC
-				PMB 128
-				Houston  TX  77044
-				US
-
-54-9A-11   (hex)		Royal Boon Edam International BV
-300000-3FFFFF     (base 16)		Royal Boon Edam International BV
-				PO box 40
-				Edam  Noord Holland  1135 ZG
-				NL
-
-54-9A-11   (hex)		Shenzhen Excera Technology Co.,Ltd.
-000000-0FFFFF     (base 16)		Shenzhen Excera Technology Co.,Ltd.
-				4Th floor,Block A,,JunXiangDA Building,No.9 ZhongShan Park Road
-				ShenZhen  Guangdong  518052
-				CN
-
-80-7B-85   (hex)		Interplan Co., Ltd.
-A00000-AFFFFF     (base 16)		Interplan Co., Ltd.
-				5F Ishihara Bld. 3-3-12 Iidabashi
-				Chiyoda-ku  Tokyo  102-0072
-				JP
-
-64-FB-81   (hex)		Dongyang unitech.co.ltd
-D00000-DFFFFF     (base 16)		Dongyang unitech.co.ltd
-				8F dearung technotown 13
-				seoul    153-803
-				KR
-
-64-FB-81   (hex)		Bridgeport Instruments, LLC
-C00000-CFFFFF     (base 16)		Bridgeport Instruments, LLC
-				11740 Jollyville Rd.
-				Austin  TX  78759
-				US
-
-64-FB-81   (hex)		Seven Solutions S.L
-200000-2FFFFF     (base 16)		Seven Solutions S.L
-				C/Periodista Rafael Gómez Montero, 2.
-				Granada  Granada  18014
-				ES
-
-64-FB-81   (hex)		ChengDu KeChuang LongXin Sci-tech Co.,Ltd
-E00000-EFFFFF     (base 16)		ChengDu KeChuang LongXin Sci-tech Co.,Ltd
-				12 South 1Section,First Ring Road
-				ChengDu  Sichuan  610041
-				CN
-
-64-FB-81   (hex)		hiQview Corporation
-900000-9FFFFF     (base 16)		hiQview Corporation
-				2 Fl., No. 282, Sec. 6, Zhongxiao E. Rd.,
-				Taipei    11558
-				TW
-
-80-7B-85   (hex)		Quickte Technology Co.,Ltd
-600000-6FFFFF     (base 16)		Quickte Technology Co.,Ltd
-				4thF/Bldg44, XiLiTong Long industrial Zone,
-				Shenzhen  Guangdong province  518052
-				CN
-
-80-E4-DA   (hex)		Beijing Yuantel Technolgy Co.,Ltd-Shenzhen Branch
-400000-4FFFFF     (base 16)		Beijing Yuantel Technolgy Co.,Ltd-Shenzhen Branch
-				Room502,B  BLdg, Fuan mansion
-				Shenzhen  Gangdong  518000
-				CN
-
-80-E4-DA   (hex)		Krizer international Co,. Ltd.
-800000-8FFFFF     (base 16)		Krizer international Co,. Ltd.
-				RM 9F, Block B, Central Building
-				shenzhen  guangdong  518101
-				CN
-
-80-E4-DA   (hex)		Nanjing LILO Technology Co. Ltd.
-B00000-BFFFFF     (base 16)		Nanjing LILO Technology Co. Ltd.
-				YouLeHui Building E, 3011
-				Beijing  Beijing  100000
-				CN
-
-80-E4-DA   (hex)		EVER Sp. z o.o.
-C00000-CFFFFF     (base 16)		EVER Sp. z o.o.
-				ul. Grudzinskiego 30
-				Swarzedz  wielkopolskie  62-020
-				PL
-
-1C-CA-E3   (hex)		eSight Corporation
-D00000-DFFFFF     (base 16)		eSight Corporation
-				535 Legget Drive
-				Ottawa  Ontario  K2K3B8
-				CA
-
-80-E4-DA   (hex)		Beijing Gaokezhongtian Technology Co Ltd
-300000-3FFFFF     (base 16)		Beijing Gaokezhongtian Technology Co Ltd
-				Beijing City Haidian District 23 Liangziyinzuo 806 room
-				beijing  beijing  100191
-				CN
-
-1C-CA-E3   (hex)		Bird Home Automation GmbH
-700000-7FFFFF     (base 16)		Bird Home Automation GmbH
-				Joachimsthaler Str. 12
-				Berlin  Berlin  10719
-				DE
-
-2C-D1-41   (hex)		XiaMen 35.com Technology Co,.Ltd.
-700000-7FFFFF     (base 16)		XiaMen 35.com Technology Co,.Ltd.
-				8th.building,Guanri Road,Software Park
-				Xiamen  Fujian  361008
-				CN
-
-90-C6-82   (hex)		Cinet Inc
-700000-7FFFFF     (base 16)		Cinet Inc
-				8616 Phoenix Drive
-				Manassas  VA  20110
-				US
-
-90-C6-82   (hex)		Innovative Electronic Technology
-300000-3FFFFF     (base 16)		Innovative Electronic Technology
-				IET House
-				Potten End  Herts  HP42RN
-				GB
-
-90-C6-82   (hex)		Teletek Electronics
-800000-8FFFFF     (base 16)		Teletek Electronics
-				14A Srebarna Str.
-				  Sofia  1407
-				BG
-
-90-C6-82   (hex)		Nanjing Jiexi Technologies Co., Ltd.
-600000-6FFFFF     (base 16)		Nanjing Jiexi Technologies Co., Ltd.
-				2ND FLOOR,BUILDING 9,JIANGSU SOFTWARE
-				Nanjing  Jiangsu  210023
-				CN
-
-2C-6A-6F   (hex)		Shanghai Shuncom Electronic Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Shanghai Shuncom Electronic Technology Co.,Ltd
-				8/F,No.4 building,No.3000 Longdong Ave,,
-				shanghai  shanghai  201203
-				CN
-
-90-C6-82   (hex)		Shanghai HuRong Communication Technology Development Co., Ltd.
-E00000-EFFFFF     (base 16)		Shanghai HuRong Communication Technology Development Co., Ltd.
-				Room 342，Building A，No.68. Donghe Road, Chengqiao town, Chongming county（Chengqiao Economic Development Zone）
-				shanghai  shanghai  202150
-				CN
-
-2C-6A-6F   (hex)		Wellntel, Inc.
-A00000-AFFFFF     (base 16)		Wellntel, Inc.
-				4230 N Oakland Ave, Suite 202
-				Milwaukee  WI  53211
-				US
-
-2C-D1-41   (hex)		Bowei Technology Company Limited
-600000-6FFFFF     (base 16)		Bowei Technology Company Limited
-				Room 1716, Building Xinmao,
-				  Shanghai  200233
-				CN
-
-28-FD-80   (hex)		Digital Signal Corp
-400000-4FFFFF     (base 16)		Digital Signal Corp
-				14000 Thunderbolt Place
-				Chantilly  VA  20151
-				US
-
-A0-BB-3E   (hex)		Xiamen Kehua Hengsheng Co.,Ltd
-600000-6FFFFF     (base 16)		Xiamen Kehua Hengsheng Co.,Ltd
-				No.457,Malong Road,Torch High-tech Industrial Zone
-				Xiamen  Fujian  361000
-				CN
-
-A0-BB-3E   (hex)		AutarcTech GmbH
-800000-8FFFFF     (base 16)		AutarcTech GmbH
-				Technologiepark 1
-				Ansbach  Bavaria  91522
-				DE
-
-A0-BB-3E   (hex)		Sandal Plc
-900000-9FFFFF     (base 16)		Sandal Plc
-				Unit 5 Harold Close
-				Harlow  Essex  
-				GB
-
-F8-02-78   (hex)		Innodisk
-200000-2FFFFF     (base 16)		Innodisk
-				5F., No.237, Sec. 1, Datong Rd., Xizhi Dist.,
-				New Taipei City  Taiwan  221
-				TW
-
-F8-02-78   (hex)		Beijing Redcdn Technology, Co., Ltd
-900000-9FFFFF     (base 16)		Beijing Redcdn Technology, Co., Ltd
-				7F, B block, Yu Hui building
-				Haidian District  Beijing  100142
-				CN
-
-2C-26-5F   (hex)		Motec GmbH
-500000-5FFFFF     (base 16)		Motec GmbH
-				Oberweyerer Strasse 21
-				Hadamar-Steinbach  Hessen  65589
-				DE
-
-2C-26-5F   (hex)		Hysentel Technology Co., Ltd
-E00000-EFFFFF     (base 16)		Hysentel Technology Co., Ltd
-				Floor 2 Building L  No.26#  2 xiang
-				Shenzhen  Guangdong  518101
-				CN
-
-A4-4F-29   (hex)		Comsel System Ltd
-300000-3FFFFF     (base 16)		Comsel System Ltd
-				Universitetsstranden 5
-				Vasa    65200
-				FI
-
-0C-EF-AF   (hex)		Sentry360
-400000-4FFFFF     (base 16)		Sentry360
-				23807 W Andrew Road
-				Plainfield  IL  60585
-				US
-
-3C-39-E7   (hex)		University of British Columbia
-400000-4FFFFF     (base 16)		University of British Columbia
-				Department of Civil Engineering
-				Vancouver  BC  V6T 1Z4
-				CA
-
-3C-39-E7   (hex)		BEWATEC Kommunikationstechnik GmbH
-100000-1FFFFF     (base 16)		BEWATEC Kommunikationstechnik GmbH
-				Orkotten 65
-				Telgte  NRW  48291
-				DE
-
-10-07-23   (hex)		RippleTek Tech Ltd
-000000-0FFFFF     (base 16)		RippleTek Tech Ltd
-				Tianyi Street #38 Idealisim Center Building #1 Room #705
-				Chengdu  Sichuan  610041
-				CN
-
-B8-D8-12   (hex)		Lam Research
-D00000-DFFFFF     (base 16)		Lam Research
-				4305 cushing parkway
-				Fremont  California  94538
-				US
-
-D0-22-12   (hex)		AIM
-100000-1FFFFF     (base 16)		AIM
-				21, avenue de la Plaine Fleurie
-				MEYLAN  ISERE  38240
-				FR
-
-B8-D8-12   (hex)		Yuwei Info&Tech Development Co.,Ltd
-C00000-CFFFFF     (base 16)		Yuwei Info&Tech Development Co.,Ltd
-				Floor 6, Taike Building, No 2 Taike Road, Futian
-				Shenzhen  Guangdong  518049
-				CN
-
-E8-18-63   (hex)		clabsys
-100000-1FFFFF     (base 16)		clabsys
-				9F Elentec-dong, Pangyo 7 Venture Valley II, 633
-				Seongnam-si  Kyeonggi-do  463-010
-				KR
-
-E8-18-63   (hex)		Siliconcube
-700000-7FFFFF     (base 16)		Siliconcube
-				Room 702, KSIA Building, 182,
-				Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-D0-22-12   (hex)		Shenzhen SIC Technology. Co., Ltd.
-800000-8FFFFF     (base 16)		Shenzhen SIC Technology. Co., Ltd.
-				Room 601-31,Floor 6,Meinian International Square
-				Shenzhen  Guangdong  518042
-				CN
-
-D0-22-12   (hex)		URANO INDUSTRIA DE BALANCAS E EQUIPAMENTOS LTDA
-600000-6FFFFF     (base 16)		URANO INDUSTRIA DE BALANCAS E EQUIPAMENTOS LTDA
-				RUA IRMAO PEDRO, 709
-				CANOAS  RS  92020550
-				BR
-
-E8-18-63   (hex)		BSM Wireless Inc.
-900000-9FFFFF     (base 16)		BSM Wireless Inc.
-				75 International Blvd.
-				Toronto  Ontario  M9W 6L9
-				CA
-
-D0-22-12   (hex)		RHENAC Systems GmbH
-200000-2FFFFF     (base 16)		RHENAC Systems GmbH
-				Christian-Lassen-Str. 16
-				Bonn  NRW  53117
-				DE
-
-74-E1-4A   (hex)		emz-Hanauer GmbH & Co. KGaA
-300000-3FFFFF     (base 16)		emz-Hanauer GmbH & Co. KGaA
-				Siemensstrasse 1
-				Nabburg  Bavaria  92507
-				DE
-
-74-E1-4A   (hex)		open joint stock company YUG-SISTEMA plus
-400000-4FFFFF     (base 16)		open joint stock company YUG-SISTEMA plus
-				
-				Krasnodar   Krasnodar Region  350072
-				RU
-
-B8-D8-12   (hex)		VOTEM
-100000-1FFFFF     (base 16)		VOTEM
-				27, Geodudanji 1-gil,
-				Chuncheon-Si  Gangwon-Do  200-883
-				KR
-
-B8-D8-12   (hex)		Vonger Electronic Technology Co.,Ltd.
-600000-6FFFFF     (base 16)		Vonger Electronic Technology Co.,Ltd.
-				Qiaodong Street #24
-				Taiyuan  Shanxi  030001
-				CN
-
-E4-95-6E   (hex)		NationalchipKorea
-700000-7FFFFF     (base 16)		NationalchipKorea
-				#1109, Ace PyeongchonTower
-				Anyang-si  Gyeonggi-do  431-804
-				KR
-
-E4-95-6E   (hex)		Tacom Projetos Bilhetagem Inteligente ltda
-E00000-EFFFFF     (base 16)		Tacom Projetos Bilhetagem Inteligente ltda
-				3800 Raja Gabaglia avenue
-				Belo Horizonte  Minas Gerais  30494310
-				BR
-
-E4-95-6E   (hex)		Shanghai DGE Co., Ltd
-300000-3FFFFF     (base 16)		Shanghai DGE Co., Ltd
-				No.6608, Beisong Road,
-				  Shanghai  201611
-				CN
-
-E4-95-6E   (hex)		Guang Lian Zhi Tong Technology Limited
-400000-4FFFFF     (base 16)		Guang Lian Zhi Tong Technology Limited
-				Room 1102 Baoyuanhuafeng Economy Bldg
-				Shenzhen  Guang Dong  518000
-				
-
-BC-66-41   (hex)		Shenzhen Yaguang communication CO.,LTD
-800000-8FFFFF     (base 16)		Shenzhen Yaguang communication CO.,LTD
-				7 Floor,3 building,Guangqian community ,Bagua Load
-				Shenzhen  Guangdong  518029
-				CN
-
-BC-66-41   (hex)		EBlink
-A00000-AFFFFF     (base 16)		EBlink
-				3-5 Rue Marcel Pagnol
-				Boussy Saint Antoine  France  91800
-				FR
-
-58-FC-DB   (hex)		Applied Device Technologies
-E00000-EFFFFF     (base 16)		Applied Device Technologies
-				400 West Front Street
-				Traverse City  Michigan  49684
-				US
-
-58-FC-DB   (hex)		XIAMEN LEELEN TECHNOLOGY CO.,LTD
-D00000-DFFFFF     (base 16)		XIAMEN LEELEN TECHNOLOGY CO.,LTD
-				65 Sunban South Rd.
-				Xiamen  Fujian  361021
-				CN
-
-BC-66-41   (hex)		Process-Electronic Sp. z o.o.
-200000-2FFFFF     (base 16)		Process-Electronic Sp. z o.o.
-				ul. Jednosci 48
-				Sosnowiec  slaskie  41-218
-				PL
-
-58-FC-DB   (hex)		Beseye Cloud Security Co. Ltd.
-200000-2FFFFF     (base 16)		Beseye Cloud Security Co. Ltd.
-				3F.-1, No.45-1, Dexing W. Rd., Shilin Dist.
-				Taipei City  Taiwan  11158
-				TW
-
-B0-1F-81   (hex)		SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.
-400000-4FFFFF     (base 16)		SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.
-				Building NO.22,23, Fifth Region, Baiwangxin Industrial Park, Songbai Rd., Nanshan
-				Shenzhen  Guangdong  518108
-				CN
-
-F4-0E-11   (hex)		Sterna Security
-900000-9FFFFF     (base 16)		Sterna Security
-				100 West Sambandam road
-				Coimbatore  Tamilnadu  641002
-				IN
-
-B0-1F-81   (hex)		Rademacher Geraete-Elektronik GmbH
-B00000-BFFFFF     (base 16)		Rademacher Geraete-Elektronik GmbH
-				Buschkamp 7
-				Rhede  NRW  46414
-				DE
-
-14-1F-BA   (hex)		Newings Communication CO., LTD.
-B00000-BFFFFF     (base 16)		Newings Communication CO., LTD.
-				12F, Block 1, NO 7866, Humin Rd, Minhang District, Shanghai, China
-				Shanghai  Shanghai  200000
-				CN
-
-F4-0E-11   (hex)		realphone technology co.,ltd
-000000-0FFFFF     (base 16)		realphone technology co.,ltd
-				room 1207,block b, haisong building,tairan9th road park,futian district,shenzhen,china
-				shenzhen  guangdong  518400
-				CN
-
-F4-0E-11   (hex)		Axel srl
-200000-2FFFFF     (base 16)		Axel srl
-				Via del Santo, 143
-				Limena  PD  35010
-				IT
-
-7C-70-BC   (hex)		Tohan　Engineering　Corporation
-B00000-BFFFFF     (base 16)		Tohan　Engineering　Corporation
-				1-701-1 Baba
-				Sennan-shi  Osaka  590-0525
-				JP
-
-14-1F-BA   (hex)		Private
-300000-3FFFFF     (base 16)		Private
-
-BC-34-00   (hex)		AURALIC LIMITED
-A00000-AFFFFF     (base 16)		AURALIC LIMITED
-				Room 102, Building No.7
-				Beijing    102200
-				CN
-
-A4-3B-FA   (hex)		SHEN ZHEN PASUN TECH CO.LTD.
-900000-9FFFFF     (base 16)		SHEN ZHEN PASUN TECH CO.LTD.
-				Room B406, Taojindi E-Business Incubator Base
-				SHENZHEN  GUANGDONG  518131
-				CN
-
-BC-34-00   (hex)		Cameron
-600000-6FFFFF     (base 16)		Cameron
-				14450 John F. Kennedy Blvd
-				Houston  TX  77032
-				
-
-7C-70-BC   (hex)		FLEXIM GmbH
-300000-3FFFFF     (base 16)		FLEXIM GmbH
-				Wolfener Strasse 36
-				  BERLIN  12681
-				DE
-
-D0-76-50   (hex)		CentrAlert, Inc.
-000000-0FFFFF     (base 16)		CentrAlert, Inc.
-				275 Meijer Way
-				Lexington  KY  40503
-				US
-
-A4-3B-FA   (hex)		Circus World Displays Ltd
-300000-3FFFFF     (base 16)		Circus World Displays Ltd
-				4080 Montrose Rd
-				Niagara Falls  Ontario  L2H 1J9
-				CA
-
-A4-3B-FA   (hex)		Beijing Uniwill Science and Technology Co,Ltd
-100000-1FFFFF     (base 16)		Beijing Uniwill Science and Technology Co,Ltd
-				NO.30 Jinyuan Road Daxing Zone
-				  Beijing  102600
-				CN
-
-A4-3B-FA   (hex)		Chengdu Territory Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Chengdu Territory Technology Co.,Ltd
-				Flat 23, #4, Senhua Gargden Shaoling Road
-				Chengdu  Sichuan  610000
-				CN
-
-D0-76-50   (hex)		tecnotron elekronik gmbh
-D00000-DFFFFF     (base 16)		tecnotron elekronik gmbh
-				Wildberg 64
-				Weissensberg  Bavaria  88138
-				DE
-
-D0-76-50   (hex)		Greenwave Scientific
-900000-9FFFFF     (base 16)		Greenwave Scientific
-				2720 Discovery Dr.
-				Raleigh  North Carolina  27612
-				US
-
-74-19-F8   (hex)		IDEXX Laboratories, Inc
-B00000-BFFFFF     (base 16)		IDEXX Laboratories, Inc
-				1 IDEXX Drive
-				Westbrook  ME  04092
-				US
-
-74-19-F8   (hex)		Heptagon Systems PTY. LTD.
-700000-7FFFFF     (base 16)		Heptagon Systems PTY. LTD.
-				625-627 Ringwood Warrandyte Road
-				Ringwood North  VIC  3124
-				AU
-
-74-19-F8   (hex)		Bach Icon ApS
-C00000-CFFFFF     (base 16)		Bach Icon ApS
-				Ambolten 8
-				Hoersholm  DK  2970
-				DK
-
-4C-4B-F9   (hex)		Beijing AutoAi Technology co. LTD
-E00000-EFFFFF     (base 16)		Beijing AutoAi Technology co. LTD
-				The building of Navinfo ,at the intersection Yongfeng road and Beiqing road,Haidian District
-				Beijing  Beijing  100094
-				CN
-
-40-11-75   (hex)		Kanda Kogyo
-200000-2FFFFF     (base 16)		Kanda Kogyo
-				3-6 Kandacho
-				HImeji  Hyogo  6700991
-				JP
-
-40-11-75   (hex)		Beijing Gemotech Intelligent Technology Co., Ltd.
-800000-8FFFFF     (base 16)		Beijing Gemotech Intelligent Technology Co., Ltd.
-				NO.1 Development Road,Beijing International Information Industrial Base,Huilongguan Town,Changping District
-				Beijing  Beijing  102206
-				CN
-
-40-11-75   (hex)		ADH Guardian USA
-900000-9FFFFF     (base 16)		ADH Guardian USA
-				122 Penn St
-				El Segundo  CA  90245
-				US
-
-04-D1-6E   (hex)		ShenZhen Huafu Information technology Co.?Ltd
-400000-4FFFFF     (base 16)		ShenZhen Huafu Information technology Co.?Ltd
-				T2-B5 FLOOR, shenzhen software park, gaoxin south 7th road, yuehai                street, nanshan district
-				ShenZhen  GuangDong  518000
-				CN
-
-24-4E-7B   (hex)		Church & Dwight Co., Inc.
-D00000-DFFFFF     (base 16)		Church & Dwight Co., Inc.
-				500 Charles Ewing Blvd
-				Ewing  NJ  08628
-				US
-
-04-D1-6E   (hex)		CHENGDU INTERLINK SCIENCE AND TECHNOLOGY CO.,LTD
-800000-8FFFFF     (base 16)		CHENGDU INTERLINK SCIENCE AND TECHNOLOGY CO.,LTD
-				Room 1305, 12A Level, Wanke Huamao Building
-				Sichuan  Chengdu  610051
-				CN
-
-04-D1-6E   (hex)		PacPort Corporation
-C00000-CFFFFF     (base 16)		PacPort Corporation
-				Ginza 6-10-1, GINZA SIX 13F, Chuo-ku
-				Tokyo  Tokyo  1040061
-				JP
-
-04-D1-6E   (hex)		Launch Tech Co., Ltd.
-100000-1FFFFF     (base 16)		Launch Tech Co., Ltd.
-				Launch Industrial Park, No.4012, North of Wuhe Road, Bantian Street, Longgang District,
-				Shenzhen  Guangdong  518100
-				CN
-
-04-D1-6E   (hex)		Envision Energy
-700000-7FFFFF     (base 16)		Envision Energy
-				8/F, Building B, SOHO Zhongshan Plaza, 1065 West Zhongshan Road
-				Shanghai     200051
-				CN
-
-44-03-77   (hex)		Hangzhou Asia Infrastructure Tech. Co., Ltd.
-B00000-BFFFFF     (base 16)		Hangzhou Asia Infrastructure Tech. Co., Ltd.
-				No.7 Xiyuan Rd, Sandun Town, Westlake District
-				Hangzhou  Zhejiang  310000
-				CN
-
-44-03-77   (hex)		Stara S/A Indústria de Implementos Agrícolas
-700000-7FFFFF     (base 16)		Stara S/A Indústria de Implementos Agrícolas
-				Avenida Stara 519
-				Não-Me-Toque  Rio Grande do Sul  99470000
-				BR
-
-50-62-55   (hex)		AVTECH Software, Inc.
-700000-7FFFFF     (base 16)		AVTECH Software, Inc.
-				16 Cutler Str, Cutler Mill
-				Warren  RI  02885
-				US
-
-50-62-55   (hex)		Hypertech Advance Co., LTD
-300000-3FFFFF     (base 16)		Hypertech Advance Co., LTD
-				1F., No. 9, Changchun 6th Rd., Zhongli Dist.,
-				 Taoyuan City    320
-				TW
-
-50-62-55   (hex)		Suzhou Ruixinjie Information Technology Co.,Ltd
-500000-5FFFFF     (base 16)		Suzhou Ruixinjie Information Technology Co.,Ltd
-				Room 907,No. 99 Changli Road
-				Suzhou  Jiangsu  215000
-				CN
-
-64-31-39   (hex)		Hunan Voc Acoustics Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Hunan Voc Acoustics Technology Co., Ltd.
-				State Industrialpark, Jiulong Development Zone, Yanling County
-				Zhuzhou  Hunan  412500
-				CN
-
-50-62-55   (hex)		AED Distribution
-C00000-CFFFFF     (base 16)		AED Distribution
-				Bedrijvenpark De Veert 13/004
-				Willebroek    2830
-				BE
-
-64-31-39   (hex)		KOANGYOW INTEGRATION MACHINE CO., LTD.
-300000-3FFFFF     (base 16)		KOANGYOW INTEGRATION MACHINE CO., LTD.
-				7F., No. 566, Zhongzheng Rd., Xindian Dist.
-				New Taipei City    23148
-				TW
-
-64-31-39   (hex)		SHEN ZHEN FUCHANG TECHNOLOGY Co.,Ltd.
-C00000-CFFFFF     (base 16)		SHEN ZHEN FUCHANG TECHNOLOGY Co.,Ltd.
-				Floor 4 11 Building Qixing Factory,Niu Cheng 2rd Industrial Area,Xili Nanshan District
-				Shenzhen  GUANGDONG  518055
-				CN
-
-C4-95-4D   (hex)		SolidGear Corporation
-C00000-CFFFFF     (base 16)		SolidGear Corporation
-				Shinyokohama Kaneko Bldg 8F, 2-3-9 ShinYokohama Kohoku-ku
-				Yokohama  Knanagawa  222-0033
-				JP
-
-C4-95-4D   (hex)		Sercomm Corporation.
-300000-3FFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-00-69-67   (hex)		Hangzhou Wise IOT Technology Co.,Ltd
-900000-9FFFFF     (base 16)		Hangzhou Wise IOT Technology Co.,Ltd
-				Room 405, Building 2, No. 31, Science and Technology Avenue, Yuhang Street, Yuhang District
-				Hangzhou  Zhejiang  310012
-				CN
-
-64-31-39   (hex)		Active Brains
-400000-4FFFFF     (base 16)		Active Brains
-				Yokohama Dia BLDG 8F 1-7 Kinkocho Kanagawa-ku
-				Yokohama  Kanagawa  221-0056
-				JP
-
-00-69-67   (hex)		Ambient-System sp. z o.o.
-800000-8FFFFF     (base 16)		Ambient-System sp. z o.o.
-				ul. Galaktyczna 37
-				Gdansk    80-299
-				PL
-
-00-69-67   (hex)		Datapan d.o.o.
-B00000-BFFFFF     (base 16)		Datapan d.o.o.
-				Velika Pot 19
-				Solkan    5250
-				SI
-
-00-69-67   (hex)		Tianjin Lianwu Technology Co., Ltd. 
-E00000-EFFFFF     (base 16)		Tianjin Lianwu Technology Co., Ltd. 
-				Room 201, 2nd floor, Building 8, No.35, Caizhi Street, Xuefu Industrial Zone, Xiqing District
-				Tianjin  Tianjin  300380
-				CN
-
-A0-22-4E   (hex)		IST ElektronikgesmbH
-A00000-AFFFFF     (base 16)		IST ElektronikgesmbH
-				Marktplatz 40
-				Neukirchen am Walde  Upper Austria  4724
-				AT
-
-A0-22-4E   (hex)		rNET Controls 
-100000-1FFFFF     (base 16)		rNET Controls 
-				8231 SW Cirrus Dr
-				Beaverton  OR  97008
-				US
-
-20-0A-0D   (hex)		Tecnint HTE SRL
-700000-7FFFFF     (base 16)		Tecnint HTE SRL
-				Via della Tecnica 16/18
-				Osnago  Lecco  23875
-				IT
-
-20-0A-0D   (hex)		IRSAP
-A00000-AFFFFF     (base 16)		IRSAP
-				Via delle Industrie, 211
-				Arqua' Polesine  Veneto  45031
-				IT
-
-40-2C-76   (hex)		Annapurna labs
-200000-2FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-40-2C-76   (hex)		Baumer Bourdon-Haenni
-500000-5FFFFF     (base 16)		Baumer Bourdon-Haenni
-				125 Rue de la marre
-				Vendôme    41100
-				FR
-
-40-2C-76   (hex)		NowTechnologies Zrt
-A00000-AFFFFF     (base 16)		NowTechnologies Zrt
-				18 Realtanoda
-				Budapest    1053
-				HU
-
-50-DE-19   (hex)		Shenzhen Vipstech Co., Ltd
-C00000-CFFFFF     (base 16)		Shenzhen Vipstech Co., Ltd
-				Building 10th, Baiwangxin Industrial Park, No. 1002 Songbai Road, Xili Street, 
-				Shenzhen  Guangdong  518100
-				CN
-
-50-DE-19   (hex)		Telic AG
-000000-0FFFFF     (base 16)		Telic AG
-				Raiffeisenallee 12b
-				Oberhaching    82041
-				DE
-
-3C-FA-D3   (hex)		Shenzhen zhong ju  Fiber optical Co.Ltd
-C00000-CFFFFF     (base 16)		Shenzhen zhong ju  Fiber optical Co.Ltd
-				3t Floor Build A .jin he Rui park .guan lan.
-				Shen zhen  Guang dong  518000
-				CN
-
-3C-FA-D3   (hex)		Naruida Technology Ltd.
-200000-2FFFFF     (base 16)		Naruida Technology Ltd.
-				2 Gangle Road,Tangjia Bay Town, High Tech Zone
-				Zhuhai  Guangdong  519080
-				CN
-
-90-E2-FC   (hex)		Huddly AS
-900000-9FFFFF     (base 16)		Huddly AS
-				Karenslyst Allé 51
-				Oslo    0279
-				NO
-
-90-E2-FC   (hex)		Shenzhen Dingsheng Intelligent Technology Co., Ltd
-B00000-BFFFFF     (base 16)		Shenzhen Dingsheng Intelligent Technology Co., Ltd
-				10/F Block C, Skyworth Building, Gaoxin South 1st Rd., Hi-Tech Park, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-14-AE-85   (hex)		Veo Technologies
-900000-9FFFFF     (base 16)		Veo Technologies
-				Aldersrogade 6c, 4. sal
-				København  Denmark  2100
-				DK
-
-14-AE-85   (hex)		SHENZHEN HONOR ELECTRONIC CO.,LTD
-700000-7FFFFF     (base 16)		SHENZHEN HONOR ELECTRONIC CO.,LTD
-				No. A Building, Xinghui Industrial Park, Gushu No. 2Rd,
-				SHEN ZHEN  GUANG  DONG  518000
-				CN
-
-94-CC-04   (hex)		Shenzhen Link technology Co.,Ltd
-300000-3FFFFF     (base 16)		Shenzhen Link technology Co.,Ltd
-				901,9/F,Dahong High TechIndusryPark?NO.6-18,Xinhe Road,Xinqiao Community,Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-94-CC-04   (hex)		SHENZHEN SANRAY TECHNOLOGY CO.,LTD
-500000-5FFFFF     (base 16)		SHENZHEN SANRAY TECHNOLOGY CO.,LTD
-				1B08 2/F Folk Culture Industrial Park,Qunli Second Road, Baoan District
-				Shenzhen  GuangDong  518101
-				CN
-
-94-CC-04   (hex)		GOCOAX, INC
-100000-1FFFFF     (base 16)		GOCOAX, INC
-				15902A Halliburton Rd #662 
-				Hacienda Heights  CA  91745
-				US
-
-94-05-BB   (hex)		Chengdu Zhongheng Network Co.,Ltd.
-500000-5FFFFF     (base 16)		Chengdu Zhongheng Network Co.,Ltd.
-				No.898 Baicao Road, Chengdu High-tech Zone (Western District)
-				Chengdu  Sichuan  611731
-				CN
-
-94-CC-04   (hex)		Shanxi Baixin Information Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Shanxi Baixin Information Technology Co., Ltd.
-				Room 210-213, Room 215-217, Room 219-220, No.2, Yari Street, Taiyuan University Park, Shanxi Comprehensive Reform Demonstration Zone
-				Taiyuan  Shanxi  030032
-				CN
-
-D0-C8-57   (hex)		IFLYTEK CO.,LTD.
-D00000-DFFFFF     (base 16)		IFLYTEK CO.,LTD.
-				National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
-				Hefei  An hui  230088
-				CN
-
-94-05-BB   (hex)		ZIGPOS GmbH
-600000-6FFFFF     (base 16)		ZIGPOS GmbH
-				Räcknitzhöhe 35a
-				Dresden  Saxony  01217
-				DE
-
-94-05-BB   (hex)		SolarEdge Technologies
-A00000-AFFFFF     (base 16)		SolarEdge Technologies
-				1 Abba Eban St.
-				Herzelia    46725
-				IL
-
-F4-90-CB   (hex)		Airbeam Wireless Technologies Inc.
-600000-6FFFFF     (base 16)		Airbeam Wireless Technologies Inc.
-				#125, 21320 Gordon Way
-				Richmond  British Columbia  V6W 1J8
-				CA
-
-C0-9B-F4   (hex)		Annapurna labs
-000000-0FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-C0-9B-F4   (hex)		Alcatraz AI Inc.
-900000-9FFFFF     (base 16)		Alcatraz AI Inc.
-				1808 El Camino Real
-				Redwood City  CA  94063
-				US
-
-F4-90-CB   (hex)		RSAE Labs Inc
-E00000-EFFFFF     (base 16)		RSAE Labs Inc
-				400 E 16th St
-				Panama City  FL  32405
-				US
-
-C0-9B-F4   (hex)		Big Dutchman International GmbH
-700000-7FFFFF     (base 16)		Big Dutchman International GmbH
-				Auf der Lage, 2
-				Vechta  Niedersachsen  49377
-				DE
-
-C0-9B-F4   (hex)		Continental Automotive Component Malaysia Sdn.Bhd.
-E00000-EFFFFF     (base 16)		Continental Automotive Component Malaysia Sdn.Bhd.
-				2455, MK.1, Tingkat Perusahaan 2A,
-				Prai Industrial Estate, Prai,  Penang  13600
-				MY
-
-E8-B4-70   (hex)		Anduril Industries
-C00000-CFFFFF     (base 16)		Anduril Industries
-				2272 Michelson Dr
-				Irvine  CA  92612
-				US
-
-E8-B4-70   (hex)		Webfleet Solutions B.V.
-300000-3FFFFF     (base 16)		Webfleet Solutions B.V.
-				De Ruijterkade 154
-				Amsterdam    1011 AC
-				NL
-
-E8-B4-70   (hex)		Medica Corporation
-D00000-DFFFFF     (base 16)		Medica Corporation
-				 5 Oak Park Drive
-				Bedford  MA  01730
-				US
-
-94-FB-A7   (hex)		Shenzhen Golden Star Technology Ltd
-B00000-BFFFFF     (base 16)		Shenzhen Golden Star Technology Ltd
-				Rm.622,building B,MingYou Industrial products Exhibition&Procurement center, Baoyuan Road,Xixiang,Bao’an District,
-				Shenzhen  Guangdong  518000
-				CN
-
-94-FB-A7   (hex)		GUANG DONG TAKSTAR ELECTRONIC CO.,LTD.
-300000-3FFFFF     (base 16)		GUANG DONG TAKSTAR ELECTRONIC CO.,LTD.
-				Dinggang,Group 5, Xialiao Village,Longxi Town, Boluo County
-				Huizhou City  Guangdong  516121
-				CN
-
-94-FB-A7   (hex)		Solaborate Inc.
-C00000-CFFFFF     (base 16)		Solaborate Inc.
-				#283 - 8300 Utica Ave
-				Rancho Cucamonga  CA  91730
-				US
-
-94-FB-A7   (hex)		Sercomm Corporation.
-600000-6FFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-94-FB-A7   (hex)		CAVITY EYE
-500000-5FFFFF     (base 16)		CAVITY EYE
-				Ébner György köz 4.
-				Budaörs    2040
-				HU
-
-94-FB-A7   (hex)		Anvil Systems Group, Inc.
-700000-7FFFFF     (base 16)		Anvil Systems Group, Inc.
-				8211 Terminal Road, Suite 1900
-				Lorton   VA  22079
-				US
-
-38-F7-CD   (hex)		NZIA Connect Inc
-100000-1FFFFF     (base 16)		NZIA Connect Inc
-				1109 ho, Bupyeong tech city Bld, 293 Bupyeong-daero, Bupyeong-gu
-				Incheon    21315
-				KR
-
-38-F7-CD   (hex)		Distech Controls
-A00000-AFFFFF     (base 16)		Distech Controls
-				4205 place de Java
-				Brossard  QC  J4Y 0C4
-				CA
-
-70-69-79   (hex)		Graphcore Ltd
-200000-2FFFFF     (base 16)		Graphcore Ltd
-				11-19 Wine Street
-				Bristol    BS1 2PH
-				GB
-
-CC-C2-61   (hex)		Ability Enterprise Co., Ltd
-700000-7FFFFF     (base 16)		Ability Enterprise Co., Ltd
-				No. 200, Sec. 3, Zhonghuan Rd., Xinzhuang Dist., New Taipei City 24242, Taiwan (R.O.C.)
-				Taipei    24242
-				TW
-
-CC-C2-61   (hex)		EDAG Engineering GmbH
-400000-4FFFFF     (base 16)		EDAG Engineering GmbH
-				Dr.- Ludwig-Kraus-Str. 2
-				Gaimersheim  Bavaria  85080
-				DE
-
-70-69-79   (hex)		Hebei Baina Xinda Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Hebei Baina Xinda Technology Co., Ltd.
-				Building C, e-commerce Industrial Park, Xianghe robot Town
-				Langfang City  Hebei Province  065400
-				CN
-
-F0-D7-AF   (hex)		Dongguan Gedi Electrons Techeology Co.,LTD
-D00000-DFFFFF     (base 16)		Dongguan Gedi Electrons Techeology Co.,LTD
-				Dongguan Gedi Electrons Techeology Co.,LTD
-				Dongguan  Guangdong  523000
-				CN
-
-F0-D7-AF   (hex)		ID Tech Japan Co.,Ltd.
-000000-0FFFFF     (base 16)		ID Tech Japan Co.,Ltd.
-				Matsumura BLDG, 2-2-23,Shibazaki-cho, Tachikawa-shi
-				Tokyo  Japan  1900023
-				JP
-
-F0-D7-AF   (hex)		Beijing Serviatech lnformation Tech Co.,Ltd
-100000-1FFFFF     (base 16)		Beijing Serviatech lnformation Tech Co.,Ltd
-				Floor?Building17 NO.1A?Chaoqian Rd?Changping?Beijing
-				Beijing    102200
-				CN
-
-F0-D7-AF   (hex)		Wren Associates, LTD
-E00000-EFFFFF     (base 16)		Wren Associates, LTD
-				124 Wren Parkway
-				Jefferson City  MO  65109-6332
-				US
-
-30-49-50   (hex)		HANGZHOU EV-TECH CO.,LTD
-B00000-BFFFFF     (base 16)		HANGZHOU EV-TECH CO.,LTD
-				No. 205, Zhenzhong Road, Xihu District
-				HANGZHOU  ZHEJIANG  310012
-				CN
-
-30-49-50   (hex)		Curb, Inc.
-600000-6FFFFF     (base 16)		Curb, Inc.
-				1524 S IH35, Suite 345, Apt 134
-				Austin  TX  78704
-				US
-
-30-49-50   (hex)		Shanghai gatang technology CO.,LTD
-900000-9FFFFF     (base 16)		Shanghai gatang technology CO.,LTD
-				Room 507, building 1, No. 2071, Hongmei Road, Xuhui District, 
-				Shanghai    200030
-				CN
-
-5C-85-7E   (hex)		Annapurna labs
-C00000-CFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-5C-85-7E   (hex)		mobilogix HongKong
-200000-2FFFFF     (base 16)		mobilogix HongKong
-				Limited Flat/RM 705A, 7/F, New East Ocean Centre No. 9 Science Museum Road Kowloon
-				Hong Kong    000000
-				CN
-
-F4-69-D5   (hex)		Terminus (Shanghai) Technology Co.,Ltd.
-900000-9FFFFF     (base 16)		Terminus (Shanghai) Technology Co.,Ltd.
-				17F,building 2,CES west bund center,No.277 longlan road,xuhui,district
-				Shanghai    200232
-				CN
-
-4C-93-A6   (hex)		Vestaboard, Inc.
-000000-0FFFFF     (base 16)		Vestaboard, Inc.
-				1777 Yosemite Avenue STE 220
-				San Francisco  CA  94124
-				US
-
-4C-93-A6   (hex)		Sercomm Corporation.
-800000-8FFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-4C-93-A6   (hex)		Shandong Senter Electronic Co., Ltd
-600000-6FFFFF     (base 16)		Shandong Senter Electronic Co., Ltd
-				No. 18 Liuyishan Road, New&High-tech area
-				Zibo  Shandong  255086
-				CN
-
-4C-93-A6   (hex)		5Voxel Co., Ltd.
-700000-7FFFFF     (base 16)		5Voxel Co., Ltd.
-				6F-2, No.273, Nong-an St.
-				Taipei City    10482
-				TW
-
-4C-93-A6   (hex)		CELLTRON
-E00000-EFFFFF     (base 16)		CELLTRON
-				#601 L&C TOWER, 153-18 LS-ro,Sanbon
-				Gunpo  Gyeonggi  15808
-				KR
-
-28-B7-7C   (hex)		Zhuhai RongBang Electronic Technology Co., Ltd.
-200000-2FFFFF     (base 16)		Zhuhai RongBang Electronic Technology Co., Ltd.
-				Room 110-400(central office) , building 18, Creative Valley, 1889 Huandao East road, Hengqin New District,
-				Zhuhai  GuangDong  519000
-				CN
-
-28-B7-7C   (hex)		Annapurna labs
-400000-4FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-28-B7-7C   (hex)		Convertertec Deutschland GmbH
-700000-7FFFFF     (base 16)		Convertertec Deutschland GmbH
-				Krefelder Weg 47
-				Kempen    47906
-				DE
-
-C0-61-9A   (hex)		Nanjing SinoVatio Technology Co., Ltd
-800000-8FFFFF     (base 16)		Nanjing SinoVatio Technology Co., Ltd
-				No. 888 Zhengfang Middle Rd, Jiangning District
-				Nanjing  JiangSu  211153
-				CN
-
-C0-61-9A   (hex)		Wingtech Mobile Communications  Co.,Ltd.
-900000-9FFFFF     (base 16)		Wingtech Mobile Communications  Co.,Ltd.
-				No.777,Yazhong Road,Nanhu District
-				Jiaxing  Zhejiang  314001
-				CN
-
-C0-61-9A   (hex)		Gronn Kontakt AS
-A00000-AFFFFF     (base 16)		Gronn Kontakt AS
-				Kjøita 18
-				Kristiansand    4630
-				NO
-
-98-FC-84   (hex)		Juketek Co., Ltd.
-200000-2FFFFF     (base 16)		Juketek Co., Ltd.
-				18F-6, No. 75, Sec. 1, Xintai 5th Rd., Xizhi Dist., 
-				New Taipei City    221
-				TW
-
-18-FD-CB   (hex)		CISTECH Solutions
-800000-8FFFFF     (base 16)		CISTECH Solutions
-				170 JAMES ST
-				TOOWOOMBA  QLD  4350
-				AU
-
-18-FD-CB   (hex)		SOTHIS CIC TEC (Shanghai) Co., Ltd
-100000-1FFFFF     (base 16)		SOTHIS CIC TEC (Shanghai) Co., Ltd
-				Shanghai Jiading sichenglu1250-7
-				SHANGHAI  SHANGHAI  200000
-				CN
-
-18-FD-CB   (hex)		Sercomm Corporation.
-A00000-AFFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-98-FC-84   (hex)		Shield Inc.
-A00000-AFFFFF     (base 16)		Shield Inc.
-				8F-5, No.57, Sec.1, Dunhua S. Rd., Songshan Dist.,
-				Taipei City    10557
-				TW
-
-58-20-8A   (hex)		Shangyin Intelligence Technology Shandong Co.,Ltd
-600000-6FFFFF     (base 16)		Shangyin Intelligence Technology Shandong Co.,Ltd
-				2205,Building 2,Sanqingqisheng Square,No.1666,Xinluo Street
-				Jinan  Shandong  250014
-				CN
-
-58-20-8A   (hex)		Annapurna labs
-000000-0FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-58-20-8A   (hex)		TRING
-400000-4FFFFF     (base 16)		TRING
-				Lejlekusa bb
-				Gracanica  TK  75320
-				BA
-
-58-20-8A   (hex)		Suzhou Ruilisi Technology Ltd.
-900000-9FFFFF     (base 16)		Suzhou Ruilisi Technology Ltd.
-				Gaoqingchuanmei Building, Nantiancheng Road, Xiangcheng District
-				Suzhou  Jiangsu  215000
-				CN
-
-58-20-8A   (hex)		UPM Technology, Inc
-E00000-EFFFFF     (base 16)		UPM Technology, Inc
-				3000 NE Stucki ave ste #100
-				Hillsboro    97124
-				US
-
-CC-4F-5C   (hex)		Kymati GmbH
-500000-5FFFFF     (base 16)		Kymati GmbH
-				Am Hochacker 5
-				Grasbrunn    85630
-				DE
-
-FC-CD-2F   (hex)		Loupedeck Oy
-200000-2FFFFF     (base 16)		Loupedeck Oy
-				Museokatu 8 A 6
-				Helsinki     00100
-				FI
-
-FC-CD-2F   (hex)		Aroma Retail
-900000-9FFFFF     (base 16)		Aroma Retail
-				5525 S. Valley View Blvd, ste 2
-				Las Vegas  NV  89118
-				US
-
-58-95-D8   (hex)		Sercomm Corporation.
-200000-2FFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-DC-4A-9E   (hex)		LEACH INTERNATIONAL EUROPE
-300000-3FFFFF     (base 16)		LEACH INTERNATIONAL EUROPE
-				2 RUE GOETHE
-				SARRALBE  MOSELLE  57430
-				FR
-
-DC-4A-9E   (hex)		 LongSung Technology (Shanghai) Co.,Ltd.   
-A00000-AFFFFF     (base 16)		 LongSung Technology (Shanghai) Co.,Ltd.   
-				 Room 606, Block B, Bldg. 1, No. 3000 Longdong Avenue., Zhangjiang Hi-Tech Park, Pudong District
-				ShangHai    201203
-				CN
-
-DC-4A-9E   (hex)		Nuove Tecnologie srl
-500000-5FFFFF     (base 16)		Nuove Tecnologie srl
-				VIALE RIMEMBRANZE 47/B, VAT N° IT10907840150
-				Lainate  Milan  20045
-				IT
-
-DC-4A-9E   (hex)		AiSight GmbH
-900000-9FFFFF     (base 16)		AiSight GmbH
-				Gertraudenstr 10-12
-				Berlin    10178
-				DE
-
-84-11-C2   (hex)		Leybold GmbH
-800000-8FFFFF     (base 16)		Leybold GmbH
-				Bonnerstr. 498
-				Cologne     50968
-				DE
-
-68-79-12   (hex)		LEAPS s.r.o.
-900000-9FFFFF     (base 16)		LEAPS s.r.o.
-				Na rolich 655/8
-				Praha 4  Czech  141 00
-				CZ
-
-68-79-12   (hex)		Globus Infocom Limited
-C00000-CFFFFF     (base 16)		Globus Infocom Limited
-				A 65, Sector 4, Noida
-				Noida  U P  201301
-				IN
-
-68-79-12   (hex)		Babbit and Friends, SIA
-700000-7FFFFF     (base 16)		Babbit and Friends, SIA
-				Maiznicas iela 8 - 5
-				Riga  Riga  LV1001
-				LV
-
-68-79-12   (hex)		Ametek Solidstate Controls
-E00000-EFFFFF     (base 16)		Ametek Solidstate Controls
-				875 DEARBORN DR
-				COLUMBUS  OH  43085-1586
-				US
-
-24-15-10   (hex)		Private
-800000-8FFFFF     (base 16)		Private
-				
-				    
-				
-
-34-04-9E   (hex)		Church & Dwight Co., Inc.
-900000-9FFFFF     (base 16)		Church & Dwight Co., Inc.
-				500 Charles Ewing Blvd
-				Ewing  NJ  08628
-				US
-
-8C-47-6E   (hex)		AU Optronics Corporation
-A00000-AFFFFF     (base 16)		AU Optronics Corporation
-				No. 1 Li-Hsin Rd. 2, Hsinchu Science Park
-				Hsinchu 30078, Taiwan, R.O.C.    802
-				TW
-
-8C-47-6E   (hex)		IntelliVIX Co. Ltd.
-800000-8FFFFF     (base 16)		IntelliVIX Co. Ltd.
-				4, Hyoryeong-ro 34-gil, Seocho-gu
-				Seoul    06704
-				KR
-
-8C-AE-49   (hex)		H3 Platform
-100000-1FFFFF     (base 16)		H3 Platform
-				11F-1, No. 79, Sec. 1, Xingtai 5th rd., Xizhi
-				New Taipei    221
-				TW
-
-A4-53-EE   (hex)		MAHLE ELECTRONICS, SLU
-000000-0FFFFF     (base 16)		MAHLE ELECTRONICS, SLU
-				Ctra. Madrid-Valencia Km. 196
-				Motilla del Palancar  Cuenca  16200
-				ES
-
-A4-53-EE   (hex)		SSK CORPORATION
-D00000-DFFFFF     (base 16)		SSK CORPORATION
-				3F, M-10, Centre of Hi-Tech Industrial Park, Nanshan
-				Shenzhen    518054
-				CN
-
-A0-02-4A   (hex)		Argos Solutions AS
-400000-4FFFFF     (base 16)		Argos Solutions AS
-				Dyrmyrgata 35
-				Kongsberg    3611
-				NO
-
-A0-02-4A   (hex)		Danriver Technologies Corp.
-200000-2FFFFF     (base 16)		Danriver Technologies Corp.
-				Building 3#,  2F, Yunxin Rd. 
-				Shanghai    200436
-				CN
-
-A0-02-4A   (hex)		Kontakt Micro-Location Sp z o.o.
-900000-9FFFFF     (base 16)		Kontakt Micro-Location Sp z o.o.
-				Stoczniowcow 3
-				Krakow    30-709
-				PL
-
-A0-02-4A   (hex)		Xi'an Yingsheng Electric Technology Co.,Ltd.
-B00000-BFFFFF     (base 16)		Xi'an Yingsheng Electric Technology Co.,Ltd.
-				Room 303, building B, Xi'an University of Technology science and Technology Park, 26 Gazelle road, Zhang Ba Street office,
-				Xi'an    710065
-				CN
-
-78-D4-F1   (hex)		Quidel Corporation
-D00000-DFFFFF     (base 16)		Quidel Corporation
-				9975 Summers Ridge Road
-				San Diego  CA  92121
-				US
-
-78-D4-F1   (hex)		Xiamen Cheerzing IOT Technology Co.,Ltd.
-800000-8FFFFF     (base 16)		Xiamen Cheerzing IOT Technology Co.,Ltd.
-				Xiamen Cheerzing IOT Technology Co.,Ltd.
-				Xiamen  FuJian  361002
-				CN
-
-34-E1-D1   (hex)		Biamp
-900000-9FFFFF     (base 16)		Biamp
-				9300 SW Gemini Drive
-				Beaverton  OR  97008
-				US
-
-44-6F-D8   (hex)		ZHEJIANG HIKAILINK TECHNOLOGY Co., Ltd
-A00000-AFFFFF     (base 16)		ZHEJIANG HIKAILINK TECHNOLOGY Co., Ltd
-				Room 116, 1 / F, building 2, No. 87, Hexi, Changfeng street, Wuzhen Town, Tongxiang City
-				Jiaxing City  Zhejiang  China
-				CN
-
-44-6F-D8   (hex)		Shenzhen Mestechs Technology CO., LTD
-300000-3FFFFF     (base 16)		Shenzhen Mestechs Technology CO., LTD
-				The 3rd Floor, E4A Bldg?TCL International E city, NO.1001 zhongshanyuan Rd, Nanshan District
-				shenzhen  GuangDong  518052
-				CN
-
-98-27-82   (hex)		Guangzhou Wuzhou Technology Co, Ltd.
-500000-5FFFFF     (base 16)		Guangzhou Wuzhou Technology Co, Ltd.
-				4th Floor, Building C2, Hi-Tech Enterprise Accelerator, Kaiyuan Avenue #11, Huangpu District
-				Guangzhou  Guangdong  510530
-				CN
-
-98-27-82   (hex)		Wuxi GuoYiHaiJu Technology Co.,Ltd.
-900000-9FFFFF     (base 16)		Wuxi GuoYiHaiJu Technology Co.,Ltd.
-				Innovation Industrial Park E2-2F
-				hefei    230000
-				CN
-
-98-27-82   (hex)		Nanjing BianYu Future Home Technology Co.Ltd
-A00000-AFFFFF     (base 16)		Nanjing BianYu Future Home Technology Co.Ltd
-				 Longyu Middle Street
-				Beijing  Beijing  100085
-				CN
-
-98-27-82   (hex)		CATS Power design
-800000-8FFFFF     (base 16)		CATS Power design
-				144 route des Vernes
-				PRINGY    74370
-				FR
-
-04-11-19   (hex)		Alethea Communications Technologies Pvt. Ltd.
-200000-2FFFFF     (base 16)		Alethea Communications Technologies Pvt. Ltd.
-				2346, 17th Cross, HSR Layout
-				Bangalore  Karnataka  560102
-				IN
-
-E8-6C-C7   (hex)		Huaqin Technology Co.,Ltd
-700000-7FFFFF     (base 16)		Huaqin Technology Co.,Ltd
-				No. 10 Keyuan Road, Songshan Lake
-				Dongguan  Guangdong  523808
-				CN
-
-04-11-19   (hex)		Acentury
-100000-1FFFFF     (base 16)		Acentury
-				120 West Beaver Creek Road, Unit 13
-				Richmond Hill  ON  L4B 1L2
-				CA
-
-E8-6C-C7   (hex)		CoxSpace
-A00000-AFFFFF     (base 16)		CoxSpace
-				858ho, Business Support Hub, 815, Daewangpangyo-ro Sujeong-gu
-				Seongnam  Kyeonggi-do  13449
-				KR
-
-38-B8-EB   (hex)		Sirin Mobile Technologies
-700000-7FFFFF     (base 16)		Sirin Mobile Technologies
-				Muhlentalstrasse 2
-				Schaffhausen    8200
-				CH
-
-24-5D-FC   (hex)		TORGOVYY DOM  TEHNOLOGIY LLC
-900000-9FFFFF     (base 16)		TORGOVYY DOM  TEHNOLOGIY LLC
-				Gospytalnaya 10, ap. 109, village Selyatino, city Naro-Fominsk,
-				Moscow  Moscow Region  143345
-				RU
-
-24-5D-FC   (hex)		ContactProximity Inc
-500000-5FFFFF     (base 16)		ContactProximity Inc
-				241 Arlington Street #966
-				Acton  MA  01720
-				US
-
-24-5D-FC   (hex)		CompanyDeep
-000000-0FFFFF     (base 16)		CompanyDeep
-				122, Ross Street
-				Cambridge  Cambridgeshire  CB13BU
-				GB
-
-24-5D-FC   (hex)		Guangzhou Lango Electronics Technology Co.,Ltd.
-600000-6FFFFF     (base 16)		Guangzhou Lango Electronics Technology Co.,Ltd.
-				Room 238, Room 406, No. 1, Yichuang Street, Huangpu District
-				Guangzhou  Guangdong  510336
-				CN
-
-F0-23-B9   (hex)		Shenyang Ali Technology Company Limited
-D00000-DFFFFF     (base 16)		Shenyang Ali Technology Company Limited
-				No.17-5, Wensu Street
-				Dongling District  Shenyang Liaoning Province  110168
-				CN
-
-0C-5C-B5   (hex)		Hunan Newman Car NetworKing Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Hunan Newman Car NetworKing Technology Co.,Ltd
-				128 Lixiang East Road,ChangshaEconomic and Technological Development Zone
-				Changsha  Hunan  410100
-				CN
-
-0C-5C-B5   (hex)		S2C limited
-600000-6FFFFF     (base 16)		S2C limited
-				E1 No.2555 Xiupu Rd. Pudong New Area
-				Shanghai	  Shanghai	  201135
-				CN
-
-1C-A0-EF   (hex)		Tangshan Liulin Automation Equipment Co., Ltd.
-000000-0FFFFF     (base 16)		Tangshan Liulin Automation Equipment Co., Ltd.
-				Building 110-3, No.410 Huoju Road, High-tech Zone
-				Tangshan City  Hebei Province  063000
-				CN
-
-1C-A0-EF   (hex)		LLC Gagar.In
-C00000-CFFFFF     (base 16)		LLC Gagar.In
-				Rybnikov Pereulok 1
-				Moscow    107045
-				RU
-
-1C-A0-EF   (hex)		Zillnk
-800000-8FFFFF     (base 16)		Zillnk
-				No. 505, 5 / F, Unit 2, building 1, No. 777, North Section of Yizhou Avenue, Chengdu High Tech Zone, China (Sichuan) Pilot Free Trade Zone
-				Chengdu    610000
-				CN
-
-1C-A0-EF   (hex)		Leviathan Solutions Ltd.
-400000-4FFFFF     (base 16)		Leviathan Solutions Ltd.
-				Abel Jeno utca 23
-				Budapest    1113
-				HU
-
-20-CE-2A   (hex)		Shanghai Digicube Info&Tech Co.,Ltd.
-100000-1FFFFF     (base 16)		Shanghai Digicube Info&Tech Co.,Ltd.
-				Room B, 9th floor, building 1, Hongqiao headquarters, 100 Zixiu Road, 
-				Shanghai  Minhang District  201103
-				CN
-
-20-CE-2A   (hex)		Intelligraphics
-800000-8FFFFF     (base 16)		Intelligraphics
-				11615 Angus Road, Suite #104L
-				Austin  TX  78759
-				US
-
-2C-D1-41   (hex)		Square Inc.
-D00000-DFFFFF     (base 16)		Square Inc.
-				1455 Market St.
-				San Francisco  CA  94103
-				US
-
-88-C9-B3   (hex)		shenzhen franklin ESS technology CO.,Ltd
-200000-2FFFFF     (base 16)		shenzhen franklin ESS technology CO.,Ltd
-				102, 61 Liuxian Rd 2, Baoan Dst., Shenzhen
-				shenzhen    518000
-				CN
-
-88-C9-B3   (hex)		Cervoz Technology Co; Ltd.
-100000-1FFFFF     (base 16)		Cervoz Technology Co; Ltd.
-				8F; No.10, Aly6, Ln.235, Baociao Rd; 
-				Sindian Dist.  New Taipei City  23145
-				TW
-
-C8-F5-D6   (hex)		Oscars Pro
-700000-7FFFFF     (base 16)		Oscars Pro
-				A 45, 1st Floor, Sector 4
-				Noida  Uttar Pradesh  201301
-				IN
-
-C8-F5-D6   (hex)		Pinmicro K K
-500000-5FFFFF     (base 16)		Pinmicro K K
-				Kanda Jimbocho, 2-20-13
-				Chiyoda Ku  Tokyo  1010051
-				JP
-
-D0-9F-D9   (hex)		Shenzhen eloT Technology Co.,Ltd
-D00000-DFFFFF     (base 16)		Shenzhen eloT Technology Co.,Ltd
-				North Wing of 2/F, Block 2, Viseen Technology & Business Park, No.43 Gaoxin South Ring Road
-				Shenzhen  Guangdong  518000
-				CN
-
-C0-FB-F9   (hex)		Tiandi(Changzhou) Automation Co., Ltd.
-A00000-AFFFFF     (base 16)		Tiandi(Changzhou) Automation Co., Ltd.
-				Tiandi(Changzhou) Automation Co., Ltd.
-				Changzhou  Jiangsu  213015
-				CN
-
-C0-FB-F9   (hex)		Navitas Digital Safety Ltd
-E00000-EFFFFF     (base 16)		Navitas Digital Safety Ltd
-				1ST FLOOR, 13  PHOENIX PARK 
-				COALVILLE  Leicestershire  LE673HB
-				GB
-
-D0-9F-D9   (hex)		Poten (Shanghai) Technology Co.,Ltd.
-400000-4FFFFF     (base 16)		Poten (Shanghai) Technology Co.,Ltd.
-				Rm.B,6th Fl., No.5, Caoxi Rd.251
-				Shanghai  Shanghai  200235
-				CN
-
-D0-9F-D9   (hex)		Raymax Technology Ltd.
-700000-7FFFFF     (base 16)		Raymax Technology Ltd.
-				604, Building D, No.1001 Wen Yi Xi Road
-				Hangzhou  China  310012
-				CN
-
-D0-9F-D9   (hex)		Queclink Wireless Solutions Co., Ltd.
-800000-8FFFFF     (base 16)		Queclink Wireless Solutions Co., Ltd.
-				No.30, Lane 500, Xinlong Road, Minhang District
-				Shanghai    201101
-				CN
-
-D0-9F-D9   (hex)		Fujian Newland Auto-ID Tech. Co,.Ltd.
-C00000-CFFFFF     (base 16)		Fujian Newland Auto-ID Tech. Co,.Ltd.
-				Newland Science & Technology Park, No.1 Rujiang West Rd,Mawei,Fuzhou, P.R.China
-				Fuzhou    350015
-				CN
-
-D0-9F-D9   (hex)		Lemei Intelligent IOT (Shenzhen) Co., Ltd
-000000-0FFFFF     (base 16)		Lemei Intelligent IOT (Shenzhen) Co., Ltd
-				#1101, Building #1, Yishang Sanwei Inductry Park, Zhongwu, Hangcheng Street, Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-18-74-E2   (hex)		Kano Computing Limited
-800000-8FFFFF     (base 16)		Kano Computing Limited
-				Unit 12.1 - 12.2, 11-29 Fashion Street
-				London    E1 6PX
-				GB
-
-A8-5B-36   (hex)		Luoxian (Guandong) Technology Co., Ltd
-400000-4FFFFF     (base 16)		Luoxian (Guandong) Technology Co., Ltd
-				4th floor,building 4,European Industrial Park,60 Longbao West Road,Zhangcha Town
-				FoShan  Guandong  528051
-				CN
-
-A8-5B-36   (hex)		TAIDEN INDUSTRIAL CO.,LTD
-A00000-AFFFFF     (base 16)		TAIDEN INDUSTRIAL CO.,LTD
-				6/F, Block B, Future Plaza, 6060 Qiaoxiang Rd, Nanshan District
-				Shenzhen  Guangdong   518053
-				CN
-
-F0-2A-2B   (hex)		ZiGong Pengcheng Technology Co.,Ltd
-900000-9FFFFF     (base 16)		ZiGong Pengcheng Technology Co.,Ltd
-				80?Longxiang Road?Yantan District
-				ZiGong  SiChuan   643221
-				CN
-
-A8-5B-36   (hex)		Avista Edge
-900000-9FFFFF     (base 16)		Avista Edge
-				12 N Sheridan St
-				Spokane  WA  99202
-				US
-
-F0-2A-2B   (hex)		Protronix s.r.o.
-700000-7FFFFF     (base 16)		Protronix s.r.o.
-				Pardubická 177
-				Chrudim    537 01
-				CZ
-
-F0-2A-2B   (hex)		Tobi Tribe Inc.
-100000-1FFFFF     (base 16)		Tobi Tribe Inc.
-				45945 Trefoil Ln #157
-				 Sterling  VA  20166
-				US
-
-58-48-49   (hex)		Shenzhen hongqifu Technology Co., Ltd
-600000-6FFFFF     (base 16)		Shenzhen hongqifu Technology Co., Ltd
-				1003-1004, building B, Shenye century industrial center, NO743,  Zhoushi Road, Hezhou community, Hangcheng street, Bao'an District
-				Shenzhen    518126
-				CN
-
-58-48-49   (hex)		Daatrics LTD
-B00000-BFFFFF     (base 16)		Daatrics LTD
-				4th Floor, 86-90 Paul Street
-				LONDON    EC2A 4NE
-				GB
-
-58-48-49   (hex)		Shandong Aotai Electric Co., LTD.
-700000-7FFFFF     (base 16)		Shandong Aotai Electric Co., LTD.
-				282 Bole Avenue, High-tech Development Zone Shandong P.R. China
-				Jinan  Shandong  250101
-				CN
-
-64-33-B5   (hex)		Duomondi International Development Co., Ltd.
-000000-0FFFFF     (base 16)		Duomondi International Development Co., Ltd.
-				Unit D 19/F Roxy Industry Center 59-66 Tai Lin Pai
-				Kwai Chung  NT  999077
-				HK
-
-64-33-B5   (hex)		University of Texas at Austin
-E00000-EFFFFF     (base 16)		University of Texas at Austin
-				1 University Station C3800
-				Austin  TX  78713-7407
-				US
-
-28-36-13   (hex)		Elytone Electronic Co., Ltd.
-400000-4FFFFF     (base 16)		Elytone Electronic Co., Ltd.
-				#218, Sec.2, Chung Cheng Road
-				San-Hsia District, New Taipei City    23742
-				TW
-
-28-36-13   (hex)		Qingdao Airpoint Electronics Co.,Ltd.
-900000-9FFFFF     (base 16)		Qingdao Airpoint Electronics Co.,Ltd.
-				Yuhuangling industrial Park, Xiazhuang-Rd, Chengyang-Qu
-				QingDao City  ShanDong Province  266109
-				CN
-
-78-5E-E8   (hex)		TOPDON TECHNOLOGY Co.,Ltd.
-900000-9FFFFF     (base 16)		TOPDON TECHNOLOGY Co.,Ltd.
-				Nanshan
-				Shenzhen  Guangdong  518000
-				CN
-
-78-5E-E8   (hex)		RIKEN KEIKI NARA MFG. Co., Ltd.
-100000-1FFFFF     (base 16)		RIKEN KEIKI NARA MFG. Co., Ltd.
-				49-1 Abe
-				Sakurai city    633-0054
-				JP
-
-38-A8-CD   (hex)		Shenzhen C & D Electronics Co., Ltd.
-700000-7FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-38-A8-CD   (hex)		Qingdao Hisense Hitachi Air-conditioning Systems Co.,Ltd.
-B00000-BFFFFF     (base 16)		Qingdao Hisense Hitachi Air-conditioning Systems Co.,Ltd.
-				No.218, Qianwangang Road, Qingdao Economic Development Zone, China
-				Qingdao    266510
-				CN
-
-38-A8-CD   (hex)		Beijing Porient Technology Co., Ltd
-200000-2FFFFF     (base 16)		Beijing Porient Technology Co., Ltd
-				Room 901,Power Creative A,No.1, Shangdi East Road,Haidian ,
-				BEIJING    100085
-				CN
-
-38-A8-CD   (hex)		Beijing Aumiwalker technology CO.,LTD
-C00000-CFFFFF     (base 16)		Beijing Aumiwalker technology CO.,LTD
-				Floor 6, Tower 1, No.1 Zhonghe Road Fengtai Science Park Beijing P.R.C.
-				Beijing  Beijing  100071
-				CN
-
-38-A8-CD   (hex)		Max Way Electronics Co., Ltd.
-800000-8FFFFF     (base 16)		Max Way Electronics Co., Ltd.
-				8F-12, No.121, Sec. 1, Chongqing S. Rd., Zhongzheng Dist.,
-				Taipei City    100
-				TW
-
-38-A8-CD   (hex)		ACiiST Smart Networks Ltd.
-000000-0FFFFF     (base 16)		ACiiST Smart Networks Ltd.
-				119 Ha'Mamshichim
-				Kfar Varburg    7099800
-				IL
-
-38-A8-CD   (hex)		cal4care Pte Ltd
-600000-6FFFFF     (base 16)		cal4care Pte Ltd
-				118 Aljunied AVE 2
-				SINGAPORE  SINGAPORE  380118
-				SG
-
-7C-83-34   (hex)		PEMtronics LLC
-200000-2FFFFF     (base 16)		PEMtronics LLC
-				70 SW Century Dr Ste 100 Box 427
-				Bend    97702
-				US
-
-7C-83-34   (hex)		Wojinxin Beijing Technology Co., LTD
-600000-6FFFFF     (base 16)		Wojinxin Beijing Technology Co., LTD
-				315-1, 3rd floor, No. 15, information road, Haidian District
-				Beijing    100089
-				CN
-
-7C-83-34   (hex)		Linear Logic LLC
-100000-1FFFFF     (base 16)		Linear Logic LLC
-				2222 S. Dobson Rd. Suite 800
-				Mesa  AZ  85202
-				US
-
-7C-83-34   (hex)		Fusus
-400000-4FFFFF     (base 16)		Fusus
-				5550 TRIANGLE PKWY, STE 385
-				PEACHTREE CORNERS  GA  30092
-				US
-
-1C-AE-3E   (hex)		QuEST Rail LLC
-C00000-CFFFFF     (base 16)		QuEST Rail LLC
-				106 E Highway 224
-				Wellington  MO  64097
-				US
-
-7C-83-34   (hex)		Balter GmbH
-E00000-EFFFFF     (base 16)		Balter GmbH
-				Elisabeth-Selbert-Strasse 19
-				Langenfeld    40764
-				DE
-
-1C-AE-3E   (hex)		HagerEnergy GmbH
-300000-3FFFFF     (base 16)		HagerEnergy GmbH
-				Karlstrasse 5
-				Osnabrueck    49074
-				DE
-
-98-6E-E8   (hex)		Sisgeo Srl
-800000-8FFFFF     (base 16)		Sisgeo Srl
-				Via F. Serpero 4/F1
-				Masate  Milano  20060
-				IT
-
-98-80-BB   (hex)		Hilo
-B00000-BFFFFF     (base 16)		Hilo
-				4-6 Kiprou str
-				Tavros  Athens  17778
-				GR
-
-98-80-BB   (hex)		Guangdong-Hong Kong-Macao Greater Bay Area Research Innovation Institute for Nanotechnology 
-700000-7FFFFF     (base 16)		Guangdong-Hong Kong-Macao Greater Bay Area Research Innovation Institute for Nanotechnology 
-				Building D, 136 Kaiyuan Avenue, Guangzhou High- tech Industrial Development Zone 
-				GuangZhou  Guangdong  510700
-				CN
-
-78-72-64   (hex)		Guangdong Hongqin Telecom Technology Co.,Ltd.
-300000-3FFFFF     (base 16)		Guangdong Hongqin Telecom Technology Co.,Ltd.
-				10 Keyuan Road, Songshan Lake
-				Dongguan   Guangdong   523429
-				CN
-
-98-80-BB   (hex)		Shenzhen Hebang Electronic Co., Ltd
-900000-9FFFFF     (base 16)		Shenzhen Hebang Electronic Co., Ltd
-				2nd Floor West, Bldg B, Kelunte Low Carbon Industry Park, Huarong Road, Dalang, Longhua District
-				Shenzhen    518000
-				CN
-
-78-72-64   (hex)		SmartMore Co.,ltd.
-000000-0FFFFF     (base 16)		SmartMore Co.,ltd.
-				22nd Floor,Sanhang Technology Building,Nanshan ShenZhen,China
-				 ShenZhen  GuangDong  518000
-				CN
-
-F4-70-0C   (hex)		G.S.D GROUP INC.
-C00000-CFFFFF     (base 16)		G.S.D GROUP INC.
-				2010 RUE MICHELIN, SUITE 100
-				LAVAL  Quebec  H7L 5C2
-				CA
-
-F4-70-0C   (hex)		Shenzhen Focuscom Communication Technology Co.,Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Focuscom Communication Technology Co.,Ltd.
-				209, Integrated Circuit Industrial Park, Chaguang Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-F4-70-0C   (hex)		Union Source Technology(HK)LTD
-300000-3FFFFF     (base 16)		Union Source Technology(HK)LTD
-				FLAT/RM 1405B 14/F THE BELGIAN BANK BUILDING NOS.721-725 NATHAN ROAD MONGKOK
-				Hong Kong    999077
-				HK
-
-78-72-64   (hex)		BZBGEAR
-200000-2FFFFF     (base 16)		BZBGEAR
-				830 National dr ste 140
-				Sacramento  CA  95834
-				US
-
-F4-70-0C   (hex)		Jinan Huake Electrical Device Co., Ltd.
-A00000-AFFFFF     (base 16)		Jinan Huake Electrical Device Co., Ltd.
-				Room 415-7, Hongxing Building, No.1 Hongxing Road, Licheng District, 
-				Jinan  Shandong  250000
-				CN
-
-C8-63-14   (hex)		Freeus LLC
-C00000-CFFFFF     (base 16)		Freeus LLC
-				1069 Stewart Drive, Suites 3-6
-				Ogden  UT  84404
-				US
-
-F4-A4-54   (hex)		Graco Inc.
-B00000-BFFFFF     (base 16)		Graco Inc.
-				PO Box 1441 
-				Minneapolis    55440
-				US
-
-74-F8-DB   (hex)		ATX
-300000-3FFFFF     (base 16)		ATX
-				5850 Hellyer Ave
-				San Jose  CA  95138
-				US
-
-F4-A4-54   (hex)		PT Telkom Indonesia
-100000-1FFFFF     (base 16)		PT Telkom Indonesia
-				Jl. Gegerkalong Hilir no. 47, Sukasari
-				Bandung  West Java  40152
-				ID
-
-F4-A4-54   (hex)		Care Bloom, LLC
-E00000-EFFFFF     (base 16)		Care Bloom, LLC
-				3401 Enterprise Parkway, Suite 205
-				Cleveland  OH  44122
-				US
-
-F4-A4-54   (hex)		SAEL SRL
-D00000-DFFFFF     (base 16)		SAEL SRL
-				Via Tavani, 2/F
-				Delebio  Sondrio  23014
-				IT
-
-18-45-B3   (hex)		Hangzhou CCRFID Microelectronic Co., Ltd.
-B00000-BFFFFF     (base 16)		Hangzhou CCRFID Microelectronic Co., Ltd.
-				East Zone,building four,Hangzhou Hi-tech Software park, NO.1 Weiye Road, Bin jiang District
-				Hangzhou  Zhejiang  330046
-				CN
-
-18-45-B3   (hex)		Taicang T&W Electronics
-D00000-DFFFFF     (base 16)		Taicang T&W Electronics
-				89# Jiang Nan RD
-				Suzhou  Jiangsu  215412
-				CN
-
-18-45-B3   (hex)		Ancsonic (chongqing) Electronic Science& Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Ancsonic (chongqing) Electronic Science& Technology Co.,Ltd
-				No.644, No.117 yunhan Avenue, Beibei District, Chongqing, China
-				chongqing    4000000
-				CN
-
-18-45-B3   (hex)		Teko Telecom Srl
-900000-9FFFFF     (base 16)		Teko Telecom Srl
-				via Meucci 24/a
-				Castel San Pietro Terme  Bologna  40024
-				IT
-
-94-C9-B7   (hex)		Zhejiang Hengjie Communication Technology Co,. Ltd.
-400000-4FFFFF     (base 16)		Zhejiang Hengjie Communication Technology Co,. Ltd.
-				East 3F 23Building, Wenzhou National University Science Park, NO. 89 FengFang road, Ouhai econmic development Zone,
-				Wenzhou  Zhejiang  325000
-				CN
-
-08-F8-0D   (hex)		SEDA CHEMICAL PRODUCTS CO., LTD.
-600000-6FFFFF     (base 16)		SEDA CHEMICAL PRODUCTS CO., LTD.
-				No 56, Bade Rd., Yingge Dist.,
-				New Taipei City    23942
-				TW
-
-08-F8-0D   (hex)		Benelink Technology Inc.
-900000-9FFFFF     (base 16)		Benelink Technology Inc.
-				6F, No.95, Xinhu 1st Rd., Neihu Dist.
-				Taipei    114
-				TW
-
-50-A0-30   (hex)		GUANGZHOU UNIPOWER COMPUTER CO.,LTD
-C00000-CFFFFF     (base 16)		GUANGZHOU UNIPOWER COMPUTER CO.,LTD
-				Room 3203, No. 233 Tianhe North Road, Tianhe District,
-				Guangzhou    510000
-				CN
-
-50-A0-30   (hex)		GE Medical System China Co. Ltd.
-800000-8FFFFF     (base 16)		GE Medical System China Co. Ltd.
-				No. 19 ChangJiang Road National Hi-Tech DEV. Zone
-				Wuxi  Jiangsu  214028
-				CN
-
-50-A0-30   (hex)		Gopod Group Limited
-000000-0FFFFF     (base 16)		Gopod Group Limited
-				5-6/f,building 8,Lianjian Industrial Park,Longhua
-				Shenzhen    518109
-				CN
-
-50-A0-30   (hex)		RealWear (Shanghai) Intelligent Technology Co. Ltd
-300000-3FFFFF     (base 16)		RealWear (Shanghai) Intelligent Technology Co. Ltd
-				2F,Block21, No.55 Chuanhe Road, Pudong New District
-				Shanghai  Shanghai  201210
-				CN
-
-04-EE-E8   (hex)		Privacy Hero
-900000-9FFFFF     (base 16)		Privacy Hero
-				3-1136 Centre Street, suite 152
-				Thornhill  Ontario  L4J 3M8
-				CA
-
-04-EE-E8   (hex)		Hunan Yaguan Communication Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		Hunan Yaguan Communication Technology Co.,Ltd
-				13th Floor, China Power Software Park, High-tech Development Zone, Changsha City
-				Changsha    410000
-				CN
-
-04-EE-E8   (hex)		NALSSEN INC.
-600000-6FFFFF     (base 16)		NALSSEN INC.
-				17, Yeokgok-ro 13beon-gil, Bucheon-si, Gyeonggi-do, Republic of Korea
-				Gyeonggi-do  Gyeonggi-do  14671
-				KR
-
-04-EE-E8   (hex)		Best Integration Technology Co., Ltd.
-E00000-EFFFFF     (base 16)		Best Integration Technology Co., Ltd.
-				5F., No.1, Ln.63, Guanxin Rd., East Dist
-				Hsinchu City  Taiwan  30072
-				TW
-
-04-EE-E8   (hex)		Zoomlion Huanuo(Beijing)Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Zoomlion Huanuo(Beijing)Technology Co.,Ltd
-				Room 401, floor 4, unit 2, building 26, yard 1, Disheng North Street, Beijing Economic and Technological Development Zone, Beijing
-				Beijing    100000
-				CN
-
-18-D7-93   (hex)		Shenzhen JieXingTong Technology Co.,LTD
-000000-0FFFFF     (base 16)		Shenzhen JieXingTong Technology Co.,LTD
-				3rd floor,block C,B6 building,China Merchants guangming science and technology park,No.3009 guanguang road,Guangming New District,
-				Shenzhen    518000
-				CN
-
-18-D7-93   (hex)		Verification & Validation Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Verification & Validation Technology Co.,Ltd
-				Room 1802, Building 3, Xunmei Technology Plaza, No.8 Keyuan Road, Science Park Community, Yuehai Street, Nanshan District  
-				shenzhen  guangdong  518057
-				CN
-
-18-D7-93   (hex)		Torsa Global
-800000-8FFFFF     (base 16)		Torsa Global
-				C/ Severo Ochoa, 19
-				Malaga  Malaga  29590
-				ES
-
-DC-36-43   (hex)		Wuhan Linptech Co. ,Ltd.
-200000-2FFFFF     (base 16)		Wuhan Linptech Co. ,Ltd.
-				3F,Bldg 1A,Lianxiang Enterprise Center
-				Wuhan  Hubei  430074
-				CN
-
-08-26-AE   (hex)		F-Plus Mobile LLC
-B00000-BFFFFF     (base 16)		F-Plus Mobile LLC
-				Preobrazhenskaya square, 8, floor 27, pom. LXXXVI, room 1.
-				Moscow  Moscow  107061
-				RU
-
-08-26-AE   (hex)		Beijing Silion Technology Corp.,Ltd.
-100000-1FFFFF     (base 16)		Beijing Silion Technology Corp.,Ltd.
-				#508, Building A, No.3 Longyu North St.
-				Changping  Beijing  102200
-				CN
-
-DC-36-43   (hex)		Shenzhen smart-core technology co.,ltd.
-600000-6FFFFF     (base 16)		Shenzhen smart-core technology co.,ltd.
-				19/F., Finance & Technology Building, No.11 Keyuan Road, Nanshan Dist., Shenzhen, China
-				Shenzhen  Guangdong  518057
-				CN
-
-08-26-AE   (hex)		ShineTech Electronics Co., Ltd
-800000-8FFFFF     (base 16)		ShineTech Electronics Co., Ltd
-				No.169, Anji St., Zuoying Dist.
-				Kaohsiung    813018
-				TW
-
-08-26-AE   (hex)		SHENNAN CIRCUITS CO.,LTD
-500000-5FFFFF     (base 16)		SHENNAN CIRCUITS CO.,LTD
-				Gao Qiao Industrial Park East,Long Gang District,
-				Shenzhen  Guangdong  518117
-				CN
-
-DC-36-43   (hex)		UKG
-700000-7FFFFF     (base 16)		UKG
-				900 Chelmsford St
-				Lowell  MA  01851
-				US
-
-DC-36-43   (hex)		Beijing L&S Lancom Platform Tech. Co., Ltd.
-E00000-EFFFFF     (base 16)		Beijing L&S Lancom Platform Tech. Co., Ltd.
-				901,floor 9, jelly loft, building 28, yard 9, Huinan Road, Changping District.
-				Beijing    102208
-				CN
-
-08-26-AE   (hex)		Annapurna labs
-900000-9FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-98-8F-E0   (hex)		Shenzhen Vitalitim Technology Co., Ltd
-D00000-DFFFFF     (base 16)		Shenzhen Vitalitim Technology Co., Ltd
-				83C21J, 3rd Floor, Tianjing Building, Tian'an Digital City, No. 6, Tairan 5th Road, Tian'an Community, Shatou Street, Futian District,
-				Shenzhen  Guangdong  518000
-				CN
-
-98-8F-E0   (hex)		GUANGZHOU HERYSTORM TECHNOLOGY CO.,LTD.
-100000-1FFFFF     (base 16)		GUANGZHOU HERYSTORM TECHNOLOGY CO.,LTD.
-				No.2-8,Nancun North Street,Panyun District,
-				Guangzhou    511400
-				CN
-
-10-54-D2   (hex)		Bamboo Dynamics Corporation., Ltd.
-900000-9FFFFF     (base 16)		Bamboo Dynamics Corporation., Ltd.
-				No.146, Sec. 1,Donxing Rd.
-				Zhubei City, Hsinchu County   Taiwan  302058
-				TW
-
-10-54-D2   (hex)		Raylogic Control Systems Private Limited
-400000-4FFFFF     (base 16)		Raylogic Control Systems Private Limited
-				Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West
-				Mumbai  Maharashtra  400054
-				IN
-
-10-54-D2   (hex)		Sybersense
-500000-5FFFFF     (base 16)		Sybersense
-				Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK
-				Hong Kong    999077
-				CN
-
-10-54-D2   (hex)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
-700000-7FFFFF     (base 16)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
-				Bldg.7, N.Industrial Park,No.18 Makan Rd,Xili,Nanshan,
-				SHENZHEN    518000
-				CN
-
-0C-86-29   (hex)		Shanghai Prophet Electronic Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Shanghai Prophet Electronic Technology Co.,Ltd
-				9th Floor, Building 3, 1535 Hongmei Road, Xuhui District,
-				Shanghai    200030
-				CN
-
-0C-86-29   (hex)		Beijing Qinmu Data Technology Co., Ltd.
-100000-1FFFFF     (base 16)		Beijing Qinmu Data Technology Co., Ltd.
-				Room101,Office 701,Floor7,Building4,Courtyard1,Nongda South Road,Haidian District.
-				Beijing    100085
-				CN
-
-0C-86-29   (hex)		C&A Marketing, INC.
-600000-6FFFFF     (base 16)		C&A Marketing, INC.
-				114 Tived Lane East
-				Edison   NJ  08837
-				US
-
-0C-86-29   (hex)		MyGregor Ltd
-800000-8FFFFF     (base 16)		MyGregor Ltd
-				11A, Carnegie str.
-				Sofia    1000
-				BG
-
-6C-93-08   (hex)		Annapurna labs
-D00000-DFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-6C-93-08   (hex)		Shenzhen DOOGEE Hengtong Technology CO., LTD
-900000-9FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO., LTD
-				B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District
-				Shenzhen  Guangdong  518000
-				CN
-
-6C-93-08   (hex)		Shenzhen TOPWAY Technology Co.,LTD
-A00000-AFFFFF     (base 16)		Shenzhen TOPWAY Technology Co.,LTD
-				Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist
-				ShenZhen  Guangdong  518055
-				CN
-
-30-43-D7   (hex)		SYMES SA
-000000-0FFFFF     (base 16)		SYMES SA
-				4 allée technopolis, chemin des presses
-				Cagnes sur mer  PACA  06800
-				FR
-
-30-43-D7   (hex)		Shenzhen Mees Hi-Tech Co., Ltd
-500000-5FFFFF     (base 16)		Shenzhen Mees Hi-Tech Co., Ltd
-				2F & 4F,Building 3 North District,2nd Qianjin Road,Liutang Village, Xixiang,Bao'an District
-				Shenzhen  Guangdong  518102
-				CN
-
-30-43-D7   (hex)		Annapurna labs
-D00000-DFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-6C-93-08   (hex)		ANDDORO LLC
-E00000-EFFFFF     (base 16)		ANDDORO LLC
-				1430 Broadway NY 
-				New York  NY  10018
-				US
-
-38-1F-26   (hex)		Synamedia
-200000-2FFFFF     (base 16)		Synamedia
-				Luipaardstraat 12
-				Kortrijk  West-Vlaanderen  8500
-				BE
-
-38-1F-26   (hex)		Jade Bird Fire Co., Ltd.
-C00000-CFFFFF     (base 16)		Jade Bird Fire Co., Ltd.
-				Jade Bird Building, 207 Chengfu Road, Haidian District, Beijing, P.R.China
-				Beijing    100871
-				CN
-
-38-1F-26   (hex)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
-500000-5FFFFF     (base 16)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
-				Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, 
-				Jiaxing    314000
-				CN
-
-18-A5-9C   (hex)		Omwave
-000000-0FFFFF     (base 16)		Omwave
-				5 rue Barbes
-				Montrouge    92120
-				FR
-
-18-A5-9C   (hex)		INTEGRAL PLUS
-600000-6FFFFF     (base 16)		INTEGRAL PLUS
-				ul. Khalitova, 2
-				Kazan    420029
-				RU
-
-18-A5-9C   (hex)		estun automation co.,ltd
-900000-9FFFFF     (base 16)		estun automation co.,ltd
-				1888 Jiyin Avenue,Jiangning District
-				nanjing    211100
-				CN
-
-1C-59-74   (hex)		Topway Global Technology Limited
-800000-8FFFFF     (base 16)		Topway Global Technology Limited
-				Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong  
-				Hong Kong  Hong Kong  999077
-				HK
-
-1C-59-74   (hex)		King-On Technology Ltd.
-C00000-CFFFFF     (base 16)		King-On Technology Ltd.
-				13F, No.207-2, Sec#3, Beixin Rd., Xindian District.
-				New Taipei  Taiwan  23146
-				TW
-
-1C-59-74   (hex)		Shenzhen Geshem Technology Co Ltd
-D00000-DFFFFF     (base 16)		Shenzhen Geshem Technology Co Ltd
-				12th Floor, Block B, Building 7, International Innovation Valley
-				Shenzhen  Gunagdong  518000
-				CN
-
-18-A5-9C   (hex)		Annapurna labs
-D00000-DFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-18-A5-9C   (hex)		BMC Messsysteme GmbH
-E00000-EFFFFF     (base 16)		BMC Messsysteme GmbH
-				Haupstr. 21
-				Maisach    82216
-				DE
-
-1C-59-74   (hex)		Jiangsu Welm Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Jiangsu Welm Technology Co.,Ltd
-				No.158 Jianghai WestRoad,Haian
-				Haian  Jiangsu  226100
-				CN
-
-1C-59-74   (hex)		Logical Infrastructure PTY LTD
-100000-1FFFFF     (base 16)		Logical Infrastructure PTY LTD
-				unit 2, 8 Carbine way
-				Mornington  Victoria  3931
-				AU
-
-1C-59-74   (hex)		Shenzhen Shi Fang Communication Technology Co., Ltd
-500000-5FFFFF     (base 16)		Shenzhen Shi Fang Communication Technology Co., Ltd
-				601-6 Mitehuapujing No.9 Jinxiu Mid Road Longtian Street Pingshan Distinct
-				Shenzhen   Guangdong  518118
-				CN
-
-1C-59-74   (hex)		Lynxi Technologies Co.,Ltd.
-700000-7FFFFF     (base 16)		Lynxi Technologies Co.,Ltd.
-				RM 801, 8/F, No. 67 North 4th Ring West Road
-				Beijing  Beijing  100084
-				CN
-
-6C-15-24   (hex)		D-HOME SMAART
-900000-9FFFFF     (base 16)		D-HOME SMAART
-				8, rue Edouard Herriot
-				Marigny le Châtel    10350
-				FR
-
-6C-15-24   (hex)		Forcite Helmet Systems Pty Ltd
-300000-3FFFFF     (base 16)		Forcite Helmet Systems Pty Ltd
-				35-39 Bourke Road, Alexandria
-				Sydney  NSW  2015
-				AU
-
-6C-15-24   (hex)		Kunshan Abram Software Technology Co.,Ltd.
-600000-6FFFFF     (base 16)		Kunshan Abram Software Technology Co.,Ltd.
-				Room 704, No. 666, Changjiang South Road
-				Kunshan  Jiangsu  215300
-				CN
-
-6C-15-24   (hex)		Magicyo Technology CO., LTD.
-400000-4FFFFF     (base 16)		Magicyo Technology CO., LTD.
-				7F, Tower A, YuZhou Building, No.78 North Keyuan
-				Shenzhen  Nanshan District  518057
-				CN
-
-70-50-E7   (hex)		shenzhen newbridge communication equipment CO.,LTD
-C00000-CFFFFF     (base 16)		shenzhen newbridge communication equipment CO.,LTD
-				5 / F, No. 1 building, Jinli Industrial Park, No. 1, LanJin Sixth Road, Nanbu community, Longtian street, Pingshan District, Shenzhen
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-70-50-E7   (hex)		Quantumdoor Technologies, Inc.
-400000-4FFFFF     (base 16)		Quantumdoor Technologies, Inc.
-				1st Floor 108-1,Buiding5,East Districe,No.10 Xibeiwang East Road,haidian Districe,
-				beijing    102629
-				CN
-
-80-02-F4   (hex)		Shenzhen Suanzi Technology Co., Ltd
-300000-3FFFFF     (base 16)		Shenzhen Suanzi Technology Co., Ltd
-				Room 207, Research Building, Tsinghua Information Port, No.1, Songpingshan New East Road, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-8C-51-09   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-A00000-AFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-8C-51-09   (hex)		TianJin JointOptic Technology Co., LTD.
-000000-0FFFFF     (base 16)		TianJin JointOptic Technology Co., LTD.
-				Floor 3, Building 6, Teda Service Outsourcing Industrial Park, 19 Xinhuan West Road, Binhai New Area, 
-				Tianjin    300000
-				CN
-
-8C-51-09   (hex)		Shenzhen WOWOTO Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Shenzhen WOWOTO Technology Co., Ltd.
-				Room B508,Building B,Gaoxingqi Industrial Park,Liuxian 1st Road,District 67,Bao'an
-				Shenzhen  Guangdong  518100
-				CN
-
-8C-51-09   (hex)		Beijing Superhexa Century Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Beijing Superhexa Century Technology Co., Ltd.
-				Room 1022, 1F, Zone A, No.1, South Back Street, Anningzhuang, Haidian District, Beijing
-				Beijing    100010
-				CN
-
-E4-95-6E   (hex)		Tband srl
-100000-1FFFFF     (base 16)		Tband srl
-				Via Camucina 27/A
-				PORTOGRUARO  Venezia  30026
-				IT
-
-0C-7F-ED   (hex)		ALT Co., Ltd.
-D00000-DFFFFF     (base 16)		ALT Co., Ltd.
-				#1201, 8, Seongnam-dearo 331beon-gil
-				Bundang-gu, Seongnam-si  Gyeonggi-do  13558
-				KR
-
-0C-7F-ED   (hex)		Shenzhen ORVIBO Technology Co., Ltd.
-900000-9FFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd.
-				F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC.
-				shenzhen    518000
-				CN
-
-0C-7F-ED   (hex)		Netweb Technologies India Pvt Ltd
-600000-6FFFFF     (base 16)		Netweb Technologies India Pvt Ltd
-				Plot H1, Pocket-9, FIT,Sector-57, Ballabhgarh
-				Faridabad  Haryana  121004
-				IN
-
-FC-61-79   (hex)		Kvaliteta Systems and Solutions Private Limited 
-700000-7FFFFF     (base 16)		Kvaliteta Systems and Solutions Private Limited 
-				2207 Yamuna Building Techno Park Phase 3
-				Trivandrum  Kerala   695583
-				IN
-
-20-85-93   (hex)		UNILUMIN GROUP CO.,LTD
-300000-3FFFFF     (base 16)		UNILUMIN GROUP CO.,LTD
-				No.112 Yongfu Rd.,BaoanDistrict,
-				shenzhen  guangdong  518103
-				CN
-
-20-85-93   (hex)		Eilersen Electric A/S
-600000-6FFFFF     (base 16)		Eilersen Electric A/S
-				Kokkedal Industripark 4
-				Kokkedal    2980
-				DK
-
-4C-4B-F9   (hex)		Stored Energy Systems
-B00000-BFFFFF     (base 16)		Stored Energy Systems
-				1840 Industrial Circle
-				Longmont  CO  80501
-				US
-
-24-15-10   (hex)		SHANDONG KEHUI POWER AUTOMATION CO. LTD.
-600000-6FFFFF     (base 16)		SHANDONG KEHUI POWER AUTOMATION CO. LTD.
-				 No. 16,Sanying Road
-				Zibo  Shandong  255087
-				CN
-
-24-15-10   (hex)		Kaiyun
-300000-3FFFFF     (base 16)		Kaiyun
-				Fuhao
-				Dongguang    523617
-				CN
-
-DC-44-27   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-2C-D1-41   (hex)		IntelliLUM
-200000-2FFFFF     (base 16)		IntelliLUM
-				8850 Terabyte Court
-				Reno  Nevada  89521
-				US
-
-98-06-37   (hex)		Shenzhen Y&D Electronics Information Co., Ltd
-800000-8FFFFF     (base 16)		Shenzhen Y&D Electronics Information Co., Ltd
-				601-602, 6/F, Antenna Building, No 17, Keji North 1st Road, Nanshan District
-				Shenzhen    518055
-				CN
-
-98-06-37   (hex)		BOEING SSG
-600000-6FFFFF     (base 16)		BOEING SSG
-				5905 LEGACY DR, SUITE 325
-				PLANO  TX  75024
-				US
-
-1C-21-D1   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-FC-A4-7A   (hex)		SHENZHEN KUKU TECHNOLOGY CO.,LTD
-D00000-DFFFFF     (base 16)		SHENZHEN KUKU TECHNOLOGY CO.,LTD
-				No.205,2F,17th Block,PingShan Industrial District,TaoYuan Street, NanShan
-				ShenZhen  GuangDong  518055
-				CN
-
-D0-5F-64   (hex)		Shenzhen Canzone Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Shenzhen Canzone Technology Co.,Ltd.
-				Minzhi Street Longhua District
-				ShenZhen    518000
-				CN
-
-2C-16-BD   (hex)		Curtiss-Wright Drive Technology
-100000-1FFFFF     (base 16)		Curtiss-Wright Drive Technology
-				Badstrasse 5
-				Neuhausen am Rheinfall  Schaffhausen  8212
-				CH
-
-2C-16-BD   (hex)		Saft AB
-300000-3FFFFF     (base 16)		Saft AB
-				Jungnergatan
-				Oskarshamn    57228
-				SE
-
-2C-16-BD   (hex)		Beijing Jishi Huitong Technology Co., Ltd.
-000000-0FFFFF     (base 16)		Beijing Jishi Huitong Technology Co., Ltd.
-				4/F,No.3 building,No.8,Haiying Road,Fengtai District
-				Beijing  Beijing  100070
-				CN
-
-2C-16-BD   (hex)		AIMCO
-200000-2FFFFF     (base 16)		AIMCO
-				10000 SE Pine St
-				Portland  OR  97216
-				US
-
-2C-16-BD   (hex)		SCT OPTRONICS CO., LTD
-700000-7FFFFF     (base 16)		SCT OPTRONICS CO., LTD
-				Floor 9, Block B, Building 7, Shenzhen Bay Technology Ecological Park, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-2C-16-BD   (hex)		Shanghai Walktech Information Technology Co.,Ltd.
-900000-9FFFFF     (base 16)		Shanghai Walktech Information Technology Co.,Ltd.
-				4F , No 85, Lane 1198, North Qin Zhou Road, Xu Hui District
-				Shanghai  Shanghai  200233
-				CN
-
-FC-A4-7A   (hex)		Oberix Group Pty Ltd
-900000-9FFFFF     (base 16)		Oberix Group Pty Ltd
-				22 McIntyre Street
-				Burwood  VIC  3125
-				AU
-
-FC-A4-7A   (hex)		KARRY COMMUNICATION LIMITED
-800000-8FFFFF     (base 16)		KARRY COMMUNICATION LIMITED
-				FLAT/RM 705 7/F SUNBEAM PLAZA 1155 CANTON ROAD MONGKOK KL
-				Hong Kong    999077
-				HK
-
-8C-59-3C   (hex)		Nanonord A/S
-800000-8FFFFF     (base 16)		Nanonord A/S
-				Skjernvej 4A
-				Aalborg    9220
-				DK
-
-8C-59-3C   (hex)		Future Robot Technology Co., Limited
-100000-1FFFFF     (base 16)		Future Robot Technology Co., Limited
-				Room 406 Block A South Wind Tower, Nanshan Cloud Valley Innovation Industry Park, No 4093 Lau Sin Avenue Taoyuan Street Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-8C-59-3C   (hex)		Spectranetix
-500000-5FFFFF     (base 16)		Spectranetix
-				845 Stewart Drive, Suite B
-				Sunnyvale  CA  94085
-				US
-
-B4-A2-EB   (hex)		SHENZHEN ZHUIFENGMA TECHNOLOGY CO., LTD
-800000-8FFFFF     (base 16)		SHENZHEN ZHUIFENGMA TECHNOLOGY CO., LTD
-				2 FLOOR WEST WING BLOCK 3  NO.28 LANGSHAN ROAD, NANSHAN DISTRICT 
-				SHENZHEN  Guangdong  518040
-				CN
-
-B4-A2-EB   (hex)		SALZBRENNER media GmbH
-D00000-DFFFFF     (base 16)		SALZBRENNER media GmbH
-				Industriegebiet See 1
-				Buttenheim    96155
-				DE
-
-BC-97-40   (hex)		Shenzhen Colorwin Optical Technology Co.,Ltd
-600000-6FFFFF     (base 16)		Shenzhen Colorwin Optical Technology Co.,Ltd
-				201-2，2nd Floor,G3 Building, TCL International E City,1001 Zhongshanyuan Road,Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-BC-97-40   (hex)		Direct Communication Solutions
-900000-9FFFFF     (base 16)		Direct Communication Solutions
-				17150 Via del Campo, Ste 200
-				San Diego  CA  92127
-				US
-
-D0-C8-57   (hex)		Nanjing Magewell Electronics Co.,Ltd
-800000-8FFFFF     (base 16)		Nanjing Magewell Electronics Co.,Ltd
-				14th Floor, Building 3, No. 89 Shengli Road, Jiangning Economic and Technological Development Zone
-				Nanjing  Jiangsu  211100
-				CN
-
-D0-C8-57   (hex)		Dante Security Inc.
-C00000-CFFFFF     (base 16)		Dante Security Inc.
-				303 MERRICK RD., Unit 208
-				LYNBROOK  NY  11563
-				US
-
-BC-97-40   (hex)		B4ComTechnologies LLC
-E00000-EFFFFF     (base 16)		B4ComTechnologies LLC
-				Office 2/6, 16a, Ivana Babushkina street
-				Moscow    117292
-				RU
-
-BC-97-40   (hex)		Amap Information Technology Co., Ltd
-A00000-AFFFFF     (base 16)		Amap Information Technology Co., Ltd
-				A051, No.01, 3/F, No.55 Suzhou Street, Haidian District
-				Beijing  Beijing  100080
-				CN
-
-BC-97-40   (hex)		LISTEC GmbH
-C00000-CFFFFF     (base 16)		LISTEC GmbH
-				Am Sandberg 34
-				Isen  Bavaria  84424
-				DE
-
-D0-C8-57   (hex)		YUAN High-Tech Development Co., Ltd.
-000000-0FFFFF     (base 16)		YUAN High-Tech Development Co., Ltd.
-				18F, No.88, Sec. 2, Chung Hsiao E.Rd., 
-				Taipei,   Taiwan   10050 
-				TW
-
-BC-97-40   (hex)		Wind Mobility Technology (Beijing) Co., Ltd
-400000-4FFFFF     (base 16)		Wind Mobility Technology (Beijing) Co., Ltd
-				13603, Building 13, No. 2, Nanzhuzhang Hutong, Dongcheng District
-				Beijing  Beijing  100010
-				CN
-
-60-95-CE   (hex)		Q-SENTECH Co.,Ltd.
-200000-2FFFFF     (base 16)		Q-SENTECH Co.,Ltd.
-				#201,170 Seonyu-ro, Yeongdeungpo-gu
-				Seoul  Korea  07255
-				KR
-
-1C-82-59   (hex)		Microtronics Engineering GmbH
-E00000-EFFFFF     (base 16)		Microtronics Engineering GmbH
-				Hauptstrasse 7
-				Ruprechtshofen    3244
-				AT
-
-1C-82-59   (hex)		Diatrend Corporation
-200000-2FFFFF     (base 16)		Diatrend Corporation
-				Grand Front Osaka Tower-B 28F, 3-1 ofuka-cho, kita-ku
-				Osaka  Osaka  530-0011
-				JP
-
-1C-82-59   (hex)		SHENZHEN AOA TECHNOLOGY CO.,LTD
-800000-8FFFFF     (base 16)		SHENZHEN AOA TECHNOLOGY CO.,LTD
-				B624,C1 Building,Hengchao Industrial Park,Tangtou Road,Shiyan,Bao'an District
-				SHENZHEN  Guangdong  518108
-				CN
-
-84-8B-CD   (hex)		WORMIT
-C00000-CFFFFF     (base 16)		WORMIT
-				Sec.1,Xintai 5th Rd.,Xizhi Dist.
-				New Taipei City    22101
-				TW
-
-B0-FD-0B   (hex)		Taian Yuqi Communication Technology Co., Ltd
-500000-5FFFFF     (base 16)		Taian Yuqi Communication Technology Co., Ltd
-				Building 4, Fengxiang Road, Tai'an Development Zone
-				Tai’an  Shandong  271000
-				CN
-
-B0-FD-0B   (hex)		Eagle Acoustics Manufacturing, LLC 
-900000-9FFFFF     (base 16)		Eagle Acoustics Manufacturing, LLC 
-				333 E IL ROUTE 83, Ste. 100
-				MUNDELEIN  IL  60060-4214
-				US
-
-1C-82-59   (hex)		Shanghai Xiaoyan Technology Co., Ltd.
-900000-9FFFFF     (base 16)		Shanghai Xiaoyan Technology Co., Ltd.
-				Room 503, Building B, NO. 2305, Zuchongzhi Road
-				Shanghai  Shanghai  201203
-				CN
-
-84-8B-CD   (hex)		Logic Supply
-400000-4FFFFF     (base 16)		Logic Supply
-				35 Thompson St
-				South Burlington  VT  05403
-				US
-
-B0-FD-0B   (hex)		Everynet Oy
-700000-7FFFFF     (base 16)		Everynet Oy
-				At Azets Insight Oy, Hatanpään valtatie 26 (5.krs)
-				Tampere    33100
-				FI
-
-B0-FD-0B   (hex)		Vista Manufacturing
-200000-2FFFFF     (base 16)		Vista Manufacturing
-				53345 Columbia Drive
-				Elkhart  IN  46514
-				US
-
-8C-14-7D   (hex)		Private
-100000-1FFFFF     (base 16)		Private
-
-C8-2C-2B   (hex)		RF Engineering and Energy Resource
-300000-3FFFFF     (base 16)		RF Engineering and Energy Resource
-				4460 Commercial Ave.
-				Portage  MI  49002
-				US
-
-C8-2C-2B   (hex)		iWave Systems Tech Pvt Ltd
-400000-4FFFFF     (base 16)		iWave Systems Tech Pvt Ltd
-				7/B 29th Main, BTM Layout 2nd Stage
-				Bengalore  Kamataka  560076
-				IN
-
-C8-2C-2B   (hex)		DALCO AG
-500000-5FFFFF     (base 16)		DALCO AG
-				Industriestr. 28
-				Volketswil  ZH  8604
-				CH
-
-1C-CA-E3   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-C8-63-14   (hex)		Optictimes Co.,Ltd
-A00000-AFFFFF     (base 16)		Optictimes Co.,Ltd
-				Hangzhou City,  Zhejiang Province
-				Hangzhou  Zhejiang  310023
-				CN
-
-E4-1E-0A   (hex)		Tritium Pty Ltd
-700000-7FFFFF     (base 16)		Tritium Pty Ltd
-				1/31 Archimedes PL.
-				Murarrie  QLD   4172
-				AU
-
-E4-1E-0A   (hex)		Zavod № 423
-000000-0FFFFF     (base 16)		Zavod № 423
-				2B, Zavodskoy proezd
-				Bogoroditsk  Tula  301830
-				RU
-
-CC-D3-9D   (hex)		Shanghai tongli information technology co. LTD
-E00000-EFFFFF     (base 16)		Shanghai tongli information technology co. LTD
-				Floor 2, building 1, liqin building, No.1885, metropolis road, minhang district
-				Shanghai  Shanghai  201108
-				CN
-
-E4-1E-0A   (hex)		Aeroel srl
-500000-5FFFFF     (base 16)		Aeroel srl
-				Vai Pier Paolo Pasolini 35/3
-				Pradamano  Udine  33040
-				IT
-
-FC-D2-B6   (hex)		Winglet Systems Inc.
-900000-9FFFFF     (base 16)		Winglet Systems Inc.
-				4-6, Shinyokohama 2-chome, Kohoku-ku
-				 Yokohama  Kanagawa  222-0033
-				JP
-
-34-E1-D1   (hex)		CREW by True Rowing, Inc.
-C00000-CFFFFF     (base 16)		CREW by True Rowing, Inc.
-				14 Arrow St, Floor 4
-				Cambridge  MA  02138
-				US
-
-34-E1-D1   (hex)		SAMA NextGen PTE Limited
-100000-1FFFFF     (base 16)		SAMA NextGen PTE Limited
-				  16 Collyer Quay, #21-00 Income AT Raffels,  Singapore 049318
-				Singapore    049318
-				SG
-
-34-E1-D1   (hex)		HI-TECH.ORG
-D00000-DFFFFF     (base 16)		HI-TECH.ORG
-				Volgogradskiy prospekt, 43, k.3, room XXVI
-				Moscow     109316
-				RU
-
-D4-7C-44   (hex)		Huaqin Telecom Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Huaqin Telecom Technology Co.,Ltd.
-				Building 1,No.399, Keyuan Road, Pudong, Shanghai China
-				Shanghai    200120
-				CN
-
-FC-D2-B6   (hex)		Soma GmbH
-200000-2FFFFF     (base 16)		Soma GmbH
-				Gewerbering 9
-				Schalksmühle  NRW  58579
-				DE
-
-E4-4C-C7   (hex)		Beijing Zhongchuangwei Nanjing Quantum Communication Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Beijing Zhongchuangwei Nanjing Quantum Communication Technology Co., Ltd.
-				No. 88, pubin avenue, jiangpu street, pukou district, nanjing city
-				nanjing  Jiangsu  210000
-				CN
-
-E4-4C-C7   (hex)		Alert Alarm AB
-000000-0FFFFF     (base 16)		Alert Alarm AB
-				Råsundavägen 4
-				Solna  Stockholm  16967
-				SE
-
-4C-BC-98   (hex)		Shenzhen Shanling Digital Technology Development Co.,Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Shanling Digital Technology Development Co.,Ltd.
-				No.10, Chiwan 1 Road, Shekou, Nanshan
-				Shenzhen  GuangDong  518068
-				CN
-
-E4-4C-C7   (hex)		JSC Svyaz Inginiring M
-300000-3FFFFF     (base 16)		JSC Svyaz Inginiring M
-				Varshavskoe Shosse, 42
-				Moscow    115230
-				RU
-
-4C-BC-98   (hex)		Nemon Co., Ltd.
-400000-4FFFFF     (base 16)		Nemon Co., Ltd.
-				B-834, 164 Tancheonsangro, Bundang
-				Seongnam  Gyeonggi  13631
-				KR
-
-E0-5A-9F   (hex)		ShenZhen Arts Changhua Intelligent Technology Co., Ltd
-E00000-EFFFFF     (base 16)		ShenZhen Arts Changhua Intelligent Technology Co., Ltd
-				15i, Taibang Science & Technology Building, Science and Technology South 8th Road, Hi-Tech Park South Area
-				Shenzhen  Guangdong  518057
-				CN
-
-8C-C8-F4   (hex)		Private
-700000-7FFFFF     (base 16)		Private
-
-98-02-D8   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-D8-86-0B   (hex)		Get SAT
-200000-2FFFFF     (base 16)		Get SAT
-				Hamada 12
-				Rehovot  Select From Dropdown  7670316
-				IL
-
-E0-5A-9F   (hex)		OMB Guitars LLC
-700000-7FFFFF     (base 16)		OMB Guitars LLC
-				24 Hazorim St
-				Efrat  Jerusalem  90435
-				IL
-
-E0-5A-9F   (hex)		AITEC SYSTEM CO., LTD.
-100000-1FFFFF     (base 16)		AITEC SYSTEM CO., LTD.
-				466-1 Aoto-cho, Midori-ku
-				Yokohama-shi  Kanagawa  226-0022
-				JP
-
-C4-FF-BC   (hex)		viRaTec GmbH
-E00000-EFFFFF     (base 16)		viRaTec GmbH
-				Phorusgasse 8/1
-				Wien    1040
-				AT
-
-38-B1-9E   (hex)		Basalte BVBA
-400000-4FFFFF     (base 16)		Basalte BVBA
-				Hundelgemsesteenweg 1a
-				Merelbeke    9820
-				BE
-
-CC-D3-9D   (hex)		Continental Control Systems
-200000-2FFFFF     (base 16)		Continental Control Systems
-				2150 Miller Drive  Suite A
-				Longmont  CO  80501
-				US
-
-CC-D3-9D   (hex)		Hangzhou Scooper Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Hangzhou Scooper Technology Co.,Ltd.
-				Room706,707,5th,No.998,Wenyi West Raod,Wuchang Street,Yuhang District,Hangzhou
-				HangZhou  ZheJiang  311121
-				CN
-
-CC-D3-9D   (hex)		INX CO.,LTD.
-000000-0FFFFF     (base 16)		INX CO.,LTD.
-				6F Nippatsu Nishiguchi Bldg 3-32-1 Tsuruya-cho Kanagawa-ku
-				Yokohama-shi  Kanagawa  221-0835
-				JP
-
-D4-25-CC   (hex)		Nanjing LES Information Technology Co., Ltd
-600000-6FFFFF     (base 16)		Nanjing LES Information Technology Co., Ltd
-				No.8,YongZhi Road
-				Nanjing  Jiangsu  210014
-				CN
-
-D4-25-CC   (hex)		Veea
-B00000-BFFFFF     (base 16)		Veea
-				164 E183rd street
-				New York  NY  10028
-				US
-
-D4-25-CC   (hex)		Combined Energy Technologies Pty Ltd
-D00000-DFFFFF     (base 16)		Combined Energy Technologies Pty Ltd
-				19 The Avenue
-				Newport  NSW  2106
-				AU
-
-9C-69-B4   (hex)		Globalcom Engineering SPA
-400000-4FFFFF     (base 16)		Globalcom Engineering SPA
-				Via Volta 9
-				MORNAGO  VA  21020
-				IT
-
-4C-91-7A   (hex)		Inster Tecnología y Comunicaciones SAU
-100000-1FFFFF     (base 16)		Inster Tecnología y Comunicaciones SAU
-				Avda. Rita Levi Montalcini, 2 Parcela 5, Tecnogetafe - Getafe
-				Madrid    28906
-				ES
-
-4C-91-7A   (hex)		S.I.C.E.S. srl
-700000-7FFFFF     (base 16)		S.I.C.E.S. srl
-				Via Molinello, 8B
-				Jerago con Orago  VARESE  21040
-				IT
-
-9C-69-B4   (hex)		MOZI (Shenzhen) Artificial Intelligence Technology Co., Ltd. 
-200000-2FFFFF     (base 16)		MOZI (Shenzhen) Artificial Intelligence Technology Co., Ltd. 
-				Room 1305, Building A Phase I Innovation and Technology Square, 4 Tairan Road, Futian
-				 Shenzhen   Guangdong  518000
-				CN
-
-9C-69-B4   (hex)		Appareo Systems, LLC
-300000-3FFFFF     (base 16)		Appareo Systems, LLC
-				1830 NDSU Research Circle N
-				Fargo  ND  58102
-				US
-
-6C-DF-FB   (hex)		Guilin Zhishen Information TechonlogyCO.,Ltd
-A00000-AFFFFF     (base 16)		Guilin Zhishen Information TechonlogyCO.,Ltd
-				Creative Industrial Park,GuiMo Rd.,Qi Xing
-				Guilin  Guangxi  541004
-				CN
-
-6C-DF-FB   (hex)		Greenbird Vertriebs GmbH
-500000-5FFFFF     (base 16)		Greenbird Vertriebs GmbH
-				Georg Sigl-Straße 40-42
-				Breitenfurt bei Wien  Niederösterreich  2384
-				AT
-
-0C-EF-AF   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-6C-DF-FB   (hex)		Toucan Systems Ltd
-C00000-CFFFFF     (base 16)		Toucan Systems Ltd
-				3 Roseheyworth Business Park
-				Abertillery  Bleanau Gwent  NP13 1SP
-				GB
-
-98-F9-C7   (hex)		Promess GmbH
-400000-4FFFFF     (base 16)		Promess GmbH
-				Schaffhausener Str. 44
-				Berlin    12099
-				DE
-
-98-F9-C7   (hex)		Renalsense
-800000-8FFFFF     (base 16)		Renalsense
-				Hamarpe 3
-				Jerusalem    9777403
-				IL
-
-98-F9-C7   (hex)		SHENZHEN HUNTKEY ELECTRIC CO., LTD.
-000000-0FFFFF     (base 16)		SHENZHEN HUNTKEY ELECTRIC CO., LTD.
-				Huntkey Industrial Park, Xue-Xiang Village, Bantian, Longgang District,
-				Shenzhen  Guangdong  518129
-				CN
-
-98-F9-C7   (hex)		HighSecLabs
-100000-1FFFFF     (base 16)		HighSecLabs
-				29 Haeshel St
-				Caesarea    3088900
-				IL
-
-0C-FE-5D   (hex)		CTK Contact Electronics co., Ltd.
-800000-8FFFFF     (base 16)		CTK Contact Electronics co., Ltd.
-				6F-5, No79, Sec 1, Xintai 5th RD, Xizhi Dist
-				New Taipei City    22101
-				TW
-
-0C-FE-5D   (hex)		Fujian Jieyu Computer Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		Fujian Jieyu Computer Technology Co., Ltd.
-				3rd Floor, Building 21, Cangshan Park, Jinshan Orange Garden Industrial Park, Cangshan District
-				Fuzhou  Fujian  350000 
-				CN
-
-A4-58-0F   (hex)		Homebeaver
-C00000-CFFFFF     (base 16)		Homebeaver
-				3 place ville marie, 4th floor
-				Montreal  Quebec  H3B 2E3
-				CA
-
-6C-5C-3D   (hex)		Clinton Electronics Corporation
-E00000-EFFFFF     (base 16)		Clinton Electronics Corporation
-				6701 Clinton Road
-				Loves Park  IL  61111
-				US
-
-0C-FE-5D   (hex)		Dspread International Co.,Limited
-200000-2FFFFF     (base 16)		Dspread International Co.,Limited
-				 UNIT 402. 4/F FAIRMONT HSE NO.8 COTTON TREE DRIVE ADMIRALTY
-				HONG KONG  HONG KONG  999077
-				HK
-
-1C-FD-08   (hex)		sunweit industrial limited
-700000-7FFFFF     (base 16)		sunweit industrial limited
-				Block A ,503B Room,Zhihui Innovation Centre
-				Shenzhen  GUANGDONG  518000
-				CN
-
-1C-FD-08   (hex)		InSeat Solutions, LLC
-000000-0FFFFF     (base 16)		InSeat Solutions, LLC
-				1871 Wright Avenue
-				La Verne  CA  91750
-				US
-
-1C-FD-08   (hex)		guangzhou huiqun intelligent technology co. LTD
-B00000-BFFFFF     (base 16)		guangzhou huiqun intelligent technology co. LTD
-				room 502, building 2, no. 6, haijing road, xinzao town, panyu district
-				guangzhou  guangdong  511436
-				CN
-
-1C-FD-08   (hex)		SABIK Offshore GmbH
-400000-4FFFFF     (base 16)		SABIK Offshore GmbH
-				Wilhelm-Maybach-Straße 3
-				Schwerin  Mecklenburg-Vorpommern  D-19061
-				DE
-
-1C-FD-08   (hex)		HiHi Ltd
-200000-2FFFFF     (base 16)		HiHi Ltd
-				Loewy House 11 Enterprise Way
-				Christchurch    BH236EW
-				GB
-
-1C-FD-08   (hex)		Umeox Innovations Co.,Ltd
-300000-3FFFFF     (base 16)		Umeox Innovations Co.,Ltd
-				Room 1208-09, Research Building, Tsinghua Information Port, No. 1, Xindong Road, Nanshan District, Shenzhen
-				Shenzhen  Guangdong  518000
-				CN
-
-6C-5C-3D   (hex)		Hangzhou Netease Yanxuan Trading Co.,Ltd
-600000-6FFFFF     (base 16)		Hangzhou Netease Yanxuan Trading Co.,Ltd
-				Room 410,No.4 Building,No.599 Road Wangshang, 
-				Hangzhou, Binjiang District,  Zhejiang Province  310052
-				CN
-
-6C-5C-3D   (hex)		Shenzhen Justek Technology Co., Ltd
-100000-1FFFFF     (base 16)		Shenzhen Justek Technology Co., Ltd
-				5/F, Building No.818, Qingtiexi Mabu Community, Bao 'an DistrictXixiang Street,
-				Shenzhen  Guangdong  518102
-				CN
-
-3C-6A-2C   (hex)		Beijing Donghua Hongtai Polytron Technologies Inc
-E00000-EFFFFF     (base 16)		Beijing Donghua Hongtai Polytron Technologies Inc
-				Room 126,Layer 1, Mudan building, , Huayuan Road No. 2, Haidian District
-				Beijing  Beijing  100089
-				CN
-
-D0-22-12   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-CC-1B-E0   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-3C-6A-2C   (hex)		Homegear GmbH
-700000-7FFFFF     (base 16)		Homegear GmbH
-				Am Schützenplatz 3
-				Preetz  Schleswig-Holstein  24211
-				DE
-
-30-0A-60   (hex)		Sixth Energy Technologies Private Limited
-D00000-DFFFFF     (base 16)		Sixth Energy Technologies Private Limited
-				#62, Sri Varda, 10th main, HMT Layout, R.T.Nagar
-				Bangalore  Karnataka  560032
-				IN
-
-3C-6A-2C   (hex)		Rio Lago Technologies  LLC
-000000-0FFFFF     (base 16)		Rio Lago Technologies  LLC
-				17741 Ludlow St.
-				Granada Hills  CA  91344-4502
-				US
-
-30-0A-60   (hex)		Private
-300000-3FFFFF     (base 16)		Private
-
-30-0A-60   (hex)		KAZUtechnica Co.,Ltd.
-000000-0FFFFF     (base 16)		KAZUtechnica Co.,Ltd.
-				1-9-18,Chuo,Chuo-ku
-				Sagamihara-shi  Kanagawa  2520239
-				JP
-
-30-0A-60   (hex)		A9
-500000-5FFFFF     (base 16)		A9
-				27,BUCHEON-RO 198BEON-GIL
-				BUCHEON-SI  GYEONGGI-DO  14555
-				KR
-
-30-0A-60   (hex)		Imageo s.r.o.
-E00000-EFFFFF     (base 16)		Imageo s.r.o.
-				Golcova 485
-				Praha    14800
-				CZ
-
-3C-6A-2C   (hex)		La Barrière Automatique
-600000-6FFFFF     (base 16)		La Barrière Automatique
-				451 chemin de Champivost
-				Limonest    69760
-				FR
-
-74-E1-4A   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-C8-8E-D1   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-A4-ED-43   (hex)		Heyuan intelligence technology CO.,Ltd
-900000-9FFFFF     (base 16)		Heyuan intelligence technology CO.,Ltd
-				No.1166 Xinluo Street
-				Jinan City  Shandong Province  250101
-				CN
-
-A0-28-33   (hex)		JGR Optics Inc
-500000-5FFFFF     (base 16)		JGR Optics Inc
-				160 Michael Cowpland Drive
-				Ottawa  Ontario  K2M 1P6
-				CA
-
-A0-28-33   (hex)		Firm INFORMTEST Ltd.
-400000-4FFFFF     (base 16)		Firm INFORMTEST Ltd.
-				APT. 8, LODG. XIV ,FL.6, bld.4, Passage Savelkinsky
-				Zelenograd  Moscow  124482
-				RU
-
-A0-28-33   (hex)		Kryptus Information Security S/A
-700000-7FFFFF     (base 16)		Kryptus Information Security S/A
-				Rua Maria Tereza Dias da Silva 270
-				Cidade Universitaria  Campinas-SP  CEP 13083-820
-				BR
-
-A0-28-33   (hex)		IMESHX CORPORATION LIMITED
-900000-9FFFFF     (base 16)		IMESHX CORPORATION LIMITED
-				10A7F, ShenZhen Bay Technology Ecological Park, NanShan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-9C-F6-DD   (hex)		Savari Inc
-800000-8FFFFF     (base 16)		Savari Inc
-				2005 De la cruz blvd, st 111,
-				santa clara  CA  95050
-				US
-
-30-09-F9   (hex)		Beijing Mydreamplus Information Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Beijing Mydreamplus Information Technology Co., Ltd.
-				Room 301-2, North Building, No. 11, CangJingGuan Lane, DongCheng District,
-				Beijing  Beijing  100005
-				CN
-
-84-89-EC   (hex)		Newell Brands
-A00000-AFFFFF     (base 16)		Newell Brands
-				221 River Street
-				Hoboken  NJ  07030
-				US
-
-84-89-EC   (hex)		EPSa Elektronik & Präzisionsbau Saalfeld GmbH
-B00000-BFFFFF     (base 16)		EPSa Elektronik & Präzisionsbau Saalfeld GmbH
-				Remschuetzer Str. 1
-				Saalfeld/Saale    07318
-				DE
-
-30-09-F9   (hex)		Shenzhen Sunvell Electronics Co., Ltd.
-100000-1FFFFF     (base 16)		Shenzhen Sunvell Electronics Co., Ltd.
-				5th Floor, Building F, Hongzhu Yongqi Technology Park, Lezhujiao Village, Xixiang Town, Bao’ an District,
-				Shenzhen  GuangDong  518000
-				CN
-
-30-09-F9   (hex)		Shenzhen Tencent Computer System Co., Ltd.
-A00000-AFFFFF     (base 16)		Shenzhen Tencent Computer System Co., Ltd.
-				5-10 Building High-tech Zone, Nanshan District, 
-				Shenzhen  Guangdong Province  518057
-				CN
-
-30-09-F9   (hex)		essence security
-800000-8FFFFF     (base 16)		essence security
-				Aba Even 12 st 
-				Herzelia    4672530
-				IL
-
-30-09-F9   (hex)		Maytronics Ltd.
-700000-7FFFFF     (base 16)		Maytronics Ltd.
-				Kibbutz Yizrael
-				Kibbutz Yizrael    1935000
-				IL
-
-30-09-F9   (hex)		VELSITEC-CLIBASE
-500000-5FFFFF     (base 16)		VELSITEC-CLIBASE
-				LA RATELIERE
-				SAINT-JUST-MALMONT  Haute-Loire  43240
-				FR
-
-C0-83-59   (hex)		Shenzhen Pay Device Technology Co., Ltd.
-900000-9FFFFF     (base 16)		Shenzhen Pay Device Technology Co., Ltd.
-				Room 502,Peng’s Building,Fanshen Road,43# Baoan District
-				Shenzhen  Guangdong  518101
-				CN
-
-9C-F6-DD   (hex)		RYEEX Technology Co.,Ltd.
-300000-3FFFFF     (base 16)		RYEEX Technology Co.,Ltd.
-				RM106,Joinin Hub,Builing J District 71,Construction Industrial Park,Xin'an Street,Bao'an, Shenzhen,China
-				SHENZHEN  GUANGDONG  518101
-				CN
-
-9C-F6-DD   (hex)		Lighting New Energy Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Lighting New Energy Technology Co., Ltd.
-				Room 402, Building 22, Chentian Industrial Zone, Xixiang Street, Bao'an District,
-				Shenzhen  Guangdong  518100
-				CN
-
-C0-83-59   (hex)		Cyber Sciences, Inc.
-E00000-EFFFFF     (base 16)		Cyber Sciences, Inc.
-				229 Castlewood Dr, Suite E
-				Murfreesboro  TN  37129
-				US
-
-C0-83-59   (hex)		Private
-C00000-CFFFFF     (base 16)		Private
-
-C0-83-59   (hex)		Huaxin SM Optics Co. LTD.
-200000-2FFFFF     (base 16)		Huaxin SM Optics Co. LTD.
-				5F,B8,Tianfu software Park,Tianfu Road
-				Chengdu  Sichuan  610041
-				CN
-
-04-C3-E6   (hex)		Flintec UK Ltd.
-B00000-BFFFFF     (base 16)		Flintec UK Ltd.
-				W4/5 Capital Point, Wentloog Avenue
-				Cardiff  Cardiff  CF3 2PW
-				GB
-
-3C-42-7E   (hex)		Grandway Technology (Shenzhen) Limited
-000000-0FFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
-				Block 7, Zhu Keng Industrial Zone
-				Ping Shan District  Shenzhen  518118
-				CN
-
-04-C3-E6   (hex)		Ekin Teknoloji San ve Tic A.S.
-900000-9FFFFF     (base 16)		Ekin Teknoloji San ve Tic A.S.
-				maden mah. gediz. sok. no:7, sariyer
-				istanbul    34450
-				TR
-
-04-C3-E6   (hex)		Invasys
-500000-5FFFFF     (base 16)		Invasys
-				Sochorova 36
-				Brno    616 00
-				CZ
-
-04-C3-E6   (hex)		Extech Electronics Co., LTD.
-300000-3FFFFF     (base 16)		Extech Electronics Co., LTD.
-				17F., No.237, Sec. 1, Datong Rd., Xizhi Dist.
-				New Taipei City    22161
-				TW
-
-C0-83-59   (hex)		Viper Design, LLC
-500000-5FFFFF     (base 16)		Viper Design, LLC
-				125 Glancy St.
-				Goodlettsville  TN  37072
-				US
-
-B4-4B-D6   (hex)		Qstar Technology Co,Ltd 
-900000-9FFFFF     (base 16)		Qstar Technology Co,Ltd 
-				311# Xindongxing Business Centre ,2rd Road liuxian ,Bao'an Shenzhen China
-				Shenzhen   Guangdong   518100
-				CN
-
-B4-4B-D6   (hex)		CHUNGHSIN INTERNATIONAL ELECTRONICS CO.,LTD.
-E00000-EFFFFF     (base 16)		CHUNGHSIN INTERNATIONAL ELECTRONICS CO.,LTD.
-				618-2# Gongren West Road,Jiaojiang,
-				Taizhou  Zhejiang  317700
-				CN
-
-B4-4B-D6   (hex)		Arnouse Digital Devices Corp
-800000-8FFFFF     (base 16)		Arnouse Digital Devices Corp
-				1983 Marcus Ave, Suite 104
-				Lake Success  NY  11042
-				US
-
-3C-42-7E   (hex)		Teknoware Oy
-400000-4FFFFF     (base 16)		Teknoware Oy
-				Ilmarisentie 8
-				Lahti    15200
-				FI
-
-D4-7C-44   (hex)		Tendzone International Pte Ltd
-A00000-AFFFFF     (base 16)		Tendzone International Pte Ltd
-				Rm 202, Blk C, Huahan Innovation Park, No.16 Langshan Rd,Nanshan District
-				Shenzhen  GuangDong  518057
-				CN
-
-D4-7C-44   (hex)		Innoviz Technologies LTD
-100000-1FFFFF     (base 16)		Innoviz Technologies LTD
-				Atir Yeda 15
-				Kfar Saba  Ha Sharon  4464312
-				IL
-
-D4-7C-44   (hex)		Exafore Oy
-000000-0FFFFF     (base 16)		Exafore Oy
-				Hermiankatu 6-8D
-				Tampere    33720
-				FI
-
-D4-7C-44   (hex)		OMRON SENTECH CO., LTD.
-300000-3FFFFF     (base 16)		OMRON SENTECH CO., LTD.
-				9F, Ebina Prime Tower, 9-50, Chuo 2 Chome
-				Ebina-City  Kanagawa  243-0432
-				JP
-
-2C-48-35   (hex)		Rheonik Messtechnik GmbH
-200000-2FFFFF     (base 16)		Rheonik Messtechnik GmbH
-				Rudolf-Diesel-Str., 5
-				Odelzhausen  Deutschland  85235
-				DE
-
-A0-19-B2   (hex)		Adomi
-A00000-AFFFFF     (base 16)		Adomi
-				777 Mariners Island Blvd. Suite 150
-				San Mateo  CA  94404
-				US
-
-A0-19-B2   (hex)		Osatec
-400000-4FFFFF     (base 16)		Osatec
-				15 Parkovaya
-				Moscow    105203
-				WS
-
-A0-19-B2   (hex)		Lon Microsystems Inc.
-900000-9FFFFF     (base 16)		Lon Microsystems Inc.
-				11F Ali center Tianfu four street 
-				chengdu  sichuan  610041
-				CN
-
-2C-48-35   (hex)		SureFlap Ltd
-900000-9FFFFF     (base 16)		SureFlap Ltd
-				7 The Irwin Centre, Scotland Road, Dry Drayton
-				Cambridge  Cambridgeshire  CB23 8AR
-				GB
-
-CC-D3-1E   (hex)		ShenZhenBoryNet Co.,LTD.
-E00000-EFFFFF     (base 16)		ShenZhenBoryNet Co.,LTD.
-				building 9.C-18-n,baoneng tech.park qingxiang road longhua district,shenzhen
-				shenzhen  guangzhou  518109
-				CN
-
-2C-48-35   (hex)		Santec Corporation
-C00000-CFFFFF     (base 16)		Santec Corporation
-				5823 Ohkusa-Nenjozaka
-				Komaki  Aichi  485-0802
-				JP
-
-2C-48-35   (hex)		Exertus Oy
-600000-6FFFFF     (base 16)		Exertus Oy
-				Kampusranta 9 C
-				Seinäjoki    60320
-				FI
-
-8C-1C-DA   (hex)		Alcidae Inc
-C00000-CFFFFF     (base 16)		Alcidae Inc
-				535 Mission St, 14th Fl,
-				San Francisco  CA  94105
-				US
-
-8C-1C-DA   (hex)		Electronic Controlled Systems, Inc.
-E00000-EFFFFF     (base 16)		Electronic Controlled Systems, Inc.
-				11200 Hampshire Ave South
-				Bloomington  MN  55438
-				US
-
-8C-1C-DA   (hex)		LocoLabs LLC
-600000-6FFFFF     (base 16)		LocoLabs LLC
-				3350 Scott Blvd, Bldg 56
-				Santa Clara  CA  95054
-				US
-
-3C-24-F0   (hex)		Wisycom
-300000-3FFFFF     (base 16)		Wisycom
-				Via Spin 156
-				Romano D'Ezzelino  Vicenza  36060
-				IT
-
-3C-24-F0   (hex)		SHENZHEN PINSIDA TECHNOLOGY CO.,LTD.
-000000-0FFFFF     (base 16)		SHENZHEN PINSIDA TECHNOLOGY CO.,LTD.
-				411,4/F,Building A,Pengnian Science Park,Honghua IV Road,Xili,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-0C-73-EB   (hex)		Shenzhen Samchung Video Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Shenzhen Samchung Video Technology Co., Ltd.
-				Xixiang Street 4016 Bao'an Avenue 
-				Yong Kai Business Building A,  Bao'an District of Shenzhen City Guangdong  528470
-				CN
-
-8C-1C-DA   (hex)		GEOMC
-200000-2FFFFF     (base 16)		GEOMC
-				Suite514, 130, Digital-ro
-				Seoul    08589
-				KP
-
-3C-24-F0   (hex)		Laipac Technology Inc.
-200000-2FFFFF     (base 16)		Laipac Technology Inc.
-				20 Mural St. Unit 5
-				Richmond Hill  ON - Ontario  L4B 1K3
-				CA
-
-3C-24-F0   (hex)		Inter-Coastal Electronics
-400000-4FFFFF     (base 16)		Inter-Coastal Electronics
-				5750 E McKellips Rd
-				Mesa  AZ  85215
-				US
-
-0C-73-EB   (hex)		Beijing L&S Lancom Platform Tech. Co., Ltd. 
-900000-9FFFFF     (base 16)		Beijing L&S Lancom Platform Tech. Co., Ltd. 
-				1st Floor, Xingtianhaiyuan Building, Xianghuangqi Eaast Rd, Nondda South Rd,Haidian District
-				Beijing    100193
-				CN
-
-0C-73-EB   (hex)		EVERSEC TECHNOLOGY CORPORATION
-100000-1FFFFF     (base 16)		EVERSEC TECHNOLOGY CORPORATION
-				F5,Tower D,JingYi Technology Building NO.9 Dazhongsi East Road.,Beijing,P.R.China
-				BEIJING  BEIJING  100086
-				CN
-
-0C-73-EB   (hex)		Beijing Miiiw Technology Co., Ltd
-800000-8FFFFF     (base 16)		Beijing Miiiw Technology Co., Ltd
-				Room 3008, 3rd Floor, Qunfang Building, Bowangyuan, Yangfangdian Rd, Haidian District
-				Beijing    100010
-				CN
-
-48-0B-B2   (hex)		XIAMEN RONGTA TECHNOLOGY CO.,LTD.
-A00000-AFFFFF     (base 16)		XIAMEN RONGTA TECHNOLOGY CO.,LTD.
-				3F, E Plant, Gaoqi Industrial Zones, No.195, Gaoqi Community, Gaodian Village, Huli
-				Xiamen    361000
-				CN
-
-48-0B-B2   (hex)		Beijing Dragon Resources Limited.
-700000-7FFFFF     (base 16)		Beijing Dragon Resources Limited.
-				Tongjunzhuangxinlukou (500meters east) Shilipu Town, MiyunCountry, Beijing101500, China
-				BeiJing    101500
-				CN
-
-48-0B-B2   (hex)		Thales CETCA Avionics CO., Ltd
-200000-2FFFFF     (base 16)		Thales CETCA Avionics CO., Ltd
-				NO.9 Baichuan road,Hi-tech industry west zone park, Chengdu, Sichuan
-				Chengdu  Sichuan  611731
-				CN
-
-88-5F-E8   (hex)		Inor Process AB
-C00000-CFFFFF     (base 16)		Inor Process AB
-				Travbanegatan 10
-				Malmo  Skane  SE-213 77
-				SE
-
-88-5F-E8   (hex)		Beijing laiwei Technology  Co.,Ltd
-400000-4FFFFF     (base 16)		Beijing laiwei Technology  Co.,Ltd
-				Room 205,2/F,No.1 Fazhan Road Beijing information international base Huilongguan town Changping district Beijing
-				Beijing  Beijing  102206
-				CN
-
-88-5F-E8   (hex)		zhejiang yuanwang communication technolgy co.,ltd
-D00000-DFFFFF     (base 16)		zhejiang yuanwang communication technolgy co.,ltd
-				No. 6 of shen shi lei lu Road
-				ZhuJi  Zhejiang  311800
-				CN
-
-B8-D8-12   (hex)		Visual Productions BV
-800000-8FFFFF     (base 16)		Visual Productions BV
-				Rollandstraat 55ZW
-				Haarlem    2013SM
-				NL
-
-30-1F-9A   (hex)		NCM Supplies, Inc.
-400000-4FFFFF     (base 16)		NCM Supplies, Inc.
-				8125 NW 64th Street
-				Miami  FL  33166
-				US
-
-30-1F-9A   (hex)		Triax A/S
-700000-7FFFFF     (base 16)		Triax A/S
-				Bjornkaervej 3
-				Hornsyld  Denmark  8783
-				DK
-
-F0-41-C8   (hex)		POSTIUM KOREA CO., LTD.
-800000-8FFFFF     (base 16)		POSTIUM KOREA CO., LTD.
-				A208 Samsong Techno Valley, 140 Tongil-ro, Deogyang-gu
-				Koyang-si  Kyeonggi-do  10594
-				KR
-
-30-1F-9A   (hex)		Origami Group Limited
-C00000-CFFFFF     (base 16)		Origami Group Limited
-				Unit 913, 9/F.,Tower 2 Cheung Sha Wan Plaza, 833 Cheung Sha Wan Road, Kowloon
-				Hong Kong    000000
-				HK
-
-30-1F-9A   (hex)		Shenzhen Fengliyuan Energy Conservating Technology Co. Ltd
-E00000-EFFFFF     (base 16)		Shenzhen Fengliyuan Energy Conservating Technology Co. Ltd
-				8th floor of building A, Baoshan Industrial Estate, Longhua District, Shenzhen
-				Shenzhen  Guangdong  518131
-				CN
-
-F0-41-C8   (hex)		LINPA ACOUSTIC TECHNOLOGY CO.,LTD 
-000000-0FFFFF     (base 16)		LINPA ACOUSTIC TECHNOLOGY CO.,LTD 
-				2A,No60 , Lizhong Road,DaliQingxi Town
-				Dongguan  Guandong  523648
-				CN
-
-88-A9-A7   (hex)		Honeywell spol. s.r.o. HTS CZ o.z. 
-200000-2FFFFF     (base 16)		Honeywell spol. s.r.o. HTS CZ o.z. 
-				Turanka 100/1387 
-				Brno    62700
-				CZ
-
-88-A9-A7   (hex)		TWK-ELEKTRONIK
-B00000-BFFFFF     (base 16)		TWK-ELEKTRONIK
-				Heinrichstr. 85
-				Duesseldorf    40239
-				DE
-
-88-A9-A7   (hex)		AndroVideo Inc.
-C00000-CFFFFF     (base 16)		AndroVideo Inc.
-				2f-4, 17, Lane 91, Nei Hu Rd., Sec. 1
-				Taipei    11441
-				TW
-
-F0-41-C8   (hex)		XI'AN MEI SHANG MEI WIRELESS TECHNOLOGY.Co., Ltd.
-500000-5FFFFF     (base 16)		XI'AN MEI SHANG MEI WIRELESS TECHNOLOGY.Co., Ltd.
-				Xi'an Beilin District Yanta Middle Road No. 17A XIN QING YA YUAN 2-5C
-				XI'AN  shanxi  710000
-				CN
-
-88-A9-A7   (hex)		FlashForge Corporation
-900000-9FFFFF     (base 16)		FlashForge Corporation
-				 No.518, Xianyuan Road
-				Jinhua  Zhejiang  321000
-				CN
-
-A4-DA-22   (hex)		AURANEXT
-600000-6FFFFF     (base 16)		AURANEXT
-				202 quai de clichy
-				CLICHY    92110
-				FR
-
-DC-E5-33   (hex)		WECAN Solution Inc.
-600000-6FFFFF     (base 16)		WECAN Solution Inc.
-				71, Yulhadong-ro 8-gil, Dong-gu, Daegu, Republic of Korea
-				Daegu    41102
-				KR
-
-A4-DA-22   (hex)		Malldon Technology Limited
-900000-9FFFFF     (base 16)		Malldon Technology Limited
-				607 Longsheng Technology Building, Longhua Dist
-				Shenzhen  Guangdong  518000
-				CN
-
-88-A9-A7   (hex)		Mikroelektronika
-300000-3FFFFF     (base 16)		Mikroelektronika
-				Batajnicki drum 23
-				Belgrade    11186
-				RS
-
-C4-FF-BC   (hex)		Shenzhen C & D Electronics Co., Ltd.
-600000-6FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-C4-FF-BC   (hex)		ShenZhen ZYT Technology co., Ltd
-800000-8FFFFF     (base 16)		ShenZhen ZYT Technology co., Ltd
-				Floor four,Build C,FuSen Industrial park, HangCheng Avenue,Baoan District
-				Shenzhen  GuangDong  518000
-				CN
-
-C4-FF-BC   (hex)		Beijing  KDF information technology co. LTD.
-D00000-DFFFFF     (base 16)		Beijing  KDF information technology co. LTD.
-				Room14C,TowerA,,LindaBuilding,No.8,Dongtucheng Road,Chaoyang District, Beijing.
-				Beijing    100013
-				CN
-
-C4-FF-BC   (hex)		Advanced Navigation
-A00000-AFFFFF     (base 16)		Advanced Navigation
-				Level 8, 37 Pitt Street
-				Sydney  NSW  2000
-				AU
-
-C4-FF-BC   (hex)		Mobiletron Electronics Co., Ltd
-200000-2FFFFF     (base 16)		Mobiletron Electronics Co., Ltd
-				85, Sec.4, Chung-Ching Rd., Ta-Ya District
-				Taichung    428
-				TW
-
-C4-FF-BC   (hex)		KyongBo Electric Co., Ltd.
-C00000-CFFFFF     (base 16)		KyongBo Electric Co., Ltd.
-				5, Seongsuil-ro 12-gagil Seongdong-gu
-				Seoul    04792
-				KR
-
-9C-43-1E   (hex)		ProMOS Technologies Inc.
-500000-5FFFFF     (base 16)		ProMOS Technologies Inc.
-				3A3, No.1, Lixing 1st Rd., East Dist.,
-				Hsinchu City  Taiwan  300
-				TW
-
-9C-43-1E   (hex)		Wunda Group plc
-800000-8FFFFF     (base 16)		Wunda Group plc
-				Unit 1-5, Hawthorn, Crick
-				Caldicot  Monmouthshire  NP26 5UT
-				GB
-
-9C-43-1E   (hex)		R-S-I Elektrotechnik GmbH  CO KG
-600000-6FFFFF     (base 16)		R-S-I Elektrotechnik GmbH  CO KG
-				Woelkestrasse 11
-				Schweitenkirchen    85276
-				DE
-
-9C-43-1E   (hex)		CONTINENT Co. Ltd
-900000-9FFFFF     (base 16)		CONTINENT Co. Ltd
-				Bumazhnaya st., 16/3 lit B, of. 414
-				Saint-Petersburg    190020
-				RU
-
-28-2C-02   (hex)		Dexin Digital Technology Corp. Ltd.
-300000-3FFFFF     (base 16)		Dexin Digital Technology Corp. Ltd.
-				No.10 and 12, Wuxing Fourth Road,Wuhou District Chengdu 610045 Sichuan, PR China
-				chengdu  Sichuan  610045
-				CN
-
-9C-43-1E   (hex)		Advanced Logic Technology (ALT) sa
-300000-3FFFFF     (base 16)		Advanced Logic Technology (ALT) sa
-				Route de Niederpallen, 30H
-				Redange-sur-Attert  Luxembourg  8506
-				LU
-
-F8-B5-68   (hex)		Beijing Wanji Techonology Co., Ltd.
-900000-9FFFFF     (base 16)		Beijing Wanji Techonology Co., Ltd.
-				NO.12 Building,Zhongguancun Software Park,Haidian District 
-				beijing  beijing  100193
-				CN
-
-28-2C-02   (hex)		Telecom and Microelectonic Industries
-700000-7FFFFF     (base 16)		Telecom and Microelectonic Industries
-				1-ja ulica Buhvostova, d.12/11, korp.53, floor 13
-				Moscow    107258
-				RU
-
-28-2C-02   (hex)		Systec Intelligent Building Technology (Tianjin) Co.,Ltd.
-900000-9FFFFF     (base 16)		Systec Intelligent Building Technology (Tianjin) Co.,Ltd.
-				Room 1312, Building D, HI-Tech. Information Square, No.8 Huatian Rd., Huayuan HI-Tech. Park
-				Tianjin    300384
-				CN
-
-F8-B5-68   (hex)		ZAO &quot;RADIUS Avtomatika&quot;
-E00000-EFFFFF     (base 16)		ZAO &quot;RADIUS Avtomatika&quot;
-				Panfilovskiy prospekt, 10/3
-				Zelenograd  Moscow  124489
-				RU
-
-28-2C-02   (hex)		Lookman Electroplast Industries Ltd
-600000-6FFFFF     (base 16)		Lookman Electroplast Industries Ltd
-				Old No : 9, New No : 15, II Street Etn., III Main Road , CIT Nagar, Nandanam
-				Chennai  Tamilnadu  600035
-				IN
-
-F8-B5-68   (hex)		SinePulse GmbH
-A00000-AFFFFF     (base 16)		SinePulse GmbH
-				Kistlerhofstr. 170
-				Munich    D-81379
-				DE
-
-F8-B5-68   (hex)		Shenzhen New-Bund Technology Co., Ltd.
-200000-2FFFFF     (base 16)		Shenzhen New-Bund Technology Co., Ltd.
-				Room20A, 20th Floor, HSAE Technology Building, Nanshan District,
-				 Shenzhen    518000
-				CN
-
-F8-B5-68   (hex)		CloudMinds (Shenzhen) Holdings Co., Ltd
-700000-7FFFFF     (base 16)		CloudMinds (Shenzhen) Holdings Co., Ltd
-				Tower 3, 33F, Unit B, Wangjing SOHO,Wangjing Street No.10
-				beijing    100102
-				CN
-
-40-48-FD   (hex)		Dorel Juvenile
-800000-8FFFFF     (base 16)		Dorel Juvenile
-				25 Forbes Blvd
-				Foxborough  MA  02035
-				US
-
-40-48-FD   (hex)		The 52nd Research Institute of China Electronic Technology Group Corporation
-500000-5FFFFF     (base 16)		The 52nd Research Institute of China Electronic Technology Group Corporation
-				No.36 Ma Cheng Road,
-				Hangzhou  Zhejiang  310012
-				CN
-
-40-48-FD   (hex)		BEIJING C&W ELECTRONICS(GROUP)CO.,LTD
-000000-0FFFFF     (base 16)		BEIJING C&W ELECTRONICS(GROUP)CO.,LTD
-				No.14 Jiuxianqiao,chaoyang,Beijing,China
-				Beijing  Beijing  100015
-				CN
-
-F8-B5-68   (hex)		3SI Security Systems, Inc
-C00000-CFFFFF     (base 16)		3SI Security Systems, Inc
-				101 Lindenwood Drive, Suite 200
-				Malvern  PA  19355
-				US
-
-40-48-FD   (hex)		NOX Systems AG
-D00000-DFFFFF     (base 16)		NOX Systems AG
-				Alvierweg 17
-				Vaduz  FL  9490
-				LI
-
-38-73-EA   (hex)		Lightform, Inc.
-900000-9FFFFF     (base 16)		Lightform, Inc.
-				123 Langton St.
-				San Francisco  CA  94103
-				US
-
-38-73-EA   (hex)		Live Sentinel
-600000-6FFFFF     (base 16)		Live Sentinel
-				27 Armthorpe Rd.
-				Brampton  Ontario  L6T 5M4
-				CA
-
-EC-9F-0D   (hex)		Simula Technology Inc.
-100000-1FFFFF     (base 16)		Simula Technology Inc.
-				14 F, 1351, Zhong-Zheng Rd.
-				Taoyuan     330
-				TW
-
-EC-9F-0D   (hex)		Shenzhen Compare Electronics Co., Ltd
-600000-6FFFFF     (base 16)		Shenzhen Compare Electronics Co., Ltd
-				18F 5D First Area, Shenzhen Bay Eco-tech Park, Nanshan District, Shenzhen 518057, China
-				Shenzhen City (深圳市)  Guangdong  518057
-				CN
-
-EC-9F-0D   (hex)		Zhejiang HEJU Communication Technology Co., Ltd
-800000-8FFFFF     (base 16)		Zhejiang HEJU Communication Technology Co., Ltd
-				F4,Block B, Lotus Commercial Building,Lianhua Street 333#,XiHu District
-				HANGZHOU  ZHEJIANG  310012
-				CN
-
-34-D0-B8   (hex)		OROSOUND SAS
-B00000-BFFFFF     (base 16)		OROSOUND SAS
-				48 RUE AMELOT
-				PARIS    75011
-				FR
-
-AC-1D-DF   (hex)		Motec Pty Ltd
-400000-4FFFFF     (base 16)		Motec Pty Ltd
-				121 Merrindale Drive
-				Croydon South  Victoria  3136
-				AU
-
-AC-1D-DF   (hex)		Green IT Korea Co., Ltd.
-700000-7FFFFF     (base 16)		Green IT Korea Co., Ltd.
-				1, Gaun-ro 1-gil, Namyangju-si
-				Seoul    12263
-				KR
-
-AC-1D-DF   (hex)		Shenzhen Ouzheng Electronic Tech Co,.Ltd
-500000-5FFFFF     (base 16)		Shenzhen Ouzheng Electronic Tech Co,.Ltd
-				Longgang District Pinghu Street Fangkeng Road No 7 B Building 2nd Floor
-				Shenzhen  Guangdong  518111
-				CN
-
-CC-22-37   (hex)		shenzhen zonglian network technology limited
-A00000-AFFFFF     (base 16)		shenzhen zonglian network technology limited
-				floor 3, building 3, yuepeng industry area, guanlan avenue,longhua new district
-				shenzhen  guangdong  518000
-				CN
-
-CC-22-37   (hex)		E Ink Corp
-900000-9FFFFF     (base 16)		E Ink Corp
-				1000 Technology Park Drive
-				Billerica  MA  01821
-				US
-
-74-1A-E0   (hex)		Socionext Inc.
-100000-1FFFFF     (base 16)		Socionext Inc.
-				Nomura Shin-Yokohama Bldg., 2-10-23 Shin-Yokohama, Kohoku-ku
-				Yokohama  Kanagawa  222-0033
-				JP
-
-CC-22-37   (hex)		Safilo S.p.A.
-800000-8FFFFF     (base 16)		Safilo S.p.A.
-				Settima Strada
-				Padova    35129
-				IT
-
-2C-27-9E   (hex)		Electronique Bluewave Inc.
-100000-1FFFFF     (base 16)		Electronique Bluewave Inc.
-				5292 Marquette
-				Montreal  Qc  H2J 3Z3
-				CA
-
-2C-27-9E   (hex)		Exegy Inc
-A00000-AFFFFF     (base 16)		Exegy Inc
-				349 Marshall Avenue, Suite 100
-				Saint Louis    63119
-				US
-
-90-4E-91   (hex)		Shanghai JaWay Information Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Shanghai JaWay Information Technology Co., Ltd.
-				Rm. 1102, Science and Technology Building A, No. 900 of Yishan Road, Xuhui District,
-				Shanghai    200030
-				CN
-
-B8-D8-12   (hex)		Glamo Inc.
-000000-0FFFFF     (base 16)		Glamo Inc.
-				6F Sunshinecity Bunkakaikan,
-				Tokyo  Toshima-ku  1708630
-				JP
-
-2C-27-9E   (hex)		FOCAL-JMLab
-700000-7FFFFF     (base 16)		FOCAL-JMLab
-				108 rue de l'Avenir
-				La Talaudière    42353
-				FR
-
-90-4E-91   (hex)		Teleepoch Ltd
-300000-3FFFFF     (base 16)		Teleepoch Ltd
-				No.13 Langshan Rd,HiTech Park,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-18-9B-A5   (hex)		legendsky tech 
-D00000-DFFFFF     (base 16)		legendsky tech 
-				RM2210 PENG YUN GE JINGLI MANSION NO.48 BEILI ROAD SOUTH
-				ShenZhen    518109
-				CN
-
-18-9B-A5   (hex)		SHENZHEN FIONEXX TECHNOLOGIES LTD.
-A00000-AFFFFF     (base 16)		SHENZHEN FIONEXX TECHNOLOGIES LTD.
-				RM503, The 1st office Bldg, Vanke Red Cube Mansion, Buji Street, Longgang District, 
-				shenzhen  Guangdong  518000
-				CN
-
-18-9B-A5   (hex)		Beijing Xinertel Technology Co., Ltd.
-700000-7FFFFF     (base 16)		Beijing Xinertel Technology Co., Ltd.
-				101, Building No.5, No.8 Chuangye Road., Haidian District
-				Beijing   Beijing  100085
-				CN
-
-90-4E-91   (hex)		Showtacle s.r.o.
-C00000-CFFFFF     (base 16)		Showtacle s.r.o.
-				Pecnianska 21
-				Bratislava  Choose State / Province  85101
-				SK
-
-18-9B-A5   (hex)		Taiwan Name Plate Co.,LTD
-E00000-EFFFFF     (base 16)		Taiwan Name Plate Co.,LTD
-				No.36, Huaya 1st Rd., Guishan Dist., Taoyuan City 33383, Taiwan
-				Taoyuan City  Taiwan  33383
-				CN
-
-18-9B-A5   (hex)		Starfire Industries LLC
-500000-5FFFFF     (base 16)		Starfire Industries LLC
-				2109 South Oak St., Suite 100
-				Champaign  IL  61820
-				US
-
-CC-1B-E0   (hex)		Microtech System,Inc  
-000000-0FFFFF     (base 16)		Microtech System,Inc  
-				A-1102, Digital Empire Building
-				Suwon  Gyeonggi-do  16690
-				KR
-
-18-9B-A5   (hex)		Dectris Ltd.
-000000-0FFFFF     (base 16)		Dectris Ltd.
-				Taefernweg 1
-				Baden-Daettwil    5405
-				CH
-
-34-29-8F   (hex)		Keystone Electronic Solutions
-D00000-DFFFFF     (base 16)		Keystone Electronic Solutions
-				469 Julius Jeppe St, Waterkloof
-				Pretoria  Gauteng  0181
-				ZA
-
-28-F5-37   (hex)		Herbert Waldmann GmbH & Co. KG
-900000-9FFFFF     (base 16)		Herbert Waldmann GmbH & Co. KG
-				Peter-Henlein-Straße 5
-				Villingen-Schwenningen  Baden-Württemberg  78056
-				DE
-
-28-F5-37   (hex)		Performance Motion Devices
-E00000-EFFFFF     (base 16)		Performance Motion Devices
-				1 Technology Park Drive 
-				Westford  MA  01886
-				US
-
-28-F5-37   (hex)		MyOmega Systems GmbH
-600000-6FFFFF     (base 16)		MyOmega Systems GmbH
-				Neumeyerstr. 28-34
-				Nürnberg  Bavaria  90411
-				DE
-
-78-D8-00   (hex)		Björkviks Consulting AB
-500000-5FFFFF     (base 16)		Björkviks Consulting AB
-				Hällkanavägen 7
-				Bro    19791
-				SE
-
-78-D8-00   (hex)		Maddalena S.p.A.
-B00000-BFFFFF     (base 16)		Maddalena S.p.A.
-				via G.B. Maddalena 2/4
-				Povoletto  UD  33040
-				IT
-
-78-D8-00   (hex)		SightLine Applications
-900000-9FFFFF     (base 16)		SightLine Applications
-				2828 SW CORBETT AVE
-				PORTLAND  OR  97201
-				US
-
-7C-BA-CC   (hex)		Briowireless Inc.
-B00000-BFFFFF     (base 16)		Briowireless Inc.
-				4593 Louis-B Mayer
-				Laval  QC - Quebec  H7P 6G5
-				CA
-
-7C-BA-CC   (hex)		Virgin Orbit
-700000-7FFFFF     (base 16)		Virgin Orbit
-				4022 E. Conant Street
-				Long Beach  CA  90808
-				US
-
-7C-BA-CC   (hex)		SIGMA-ELEKTRO GmbH
-D00000-DFFFFF     (base 16)		SIGMA-ELEKTRO GmbH
-				Dr.-Julius-Leber-Str. 15
-				Neustadt an der Weinstraße  Germany  67433
-				DE
-
-F8-8A-3C   (hex)		Protos GmbH
-A00000-AFFFFF     (base 16)		Protos GmbH
-				Herrschaftswiesen 11
-				Koblach    6842
-				AT
-
-4C-65-A8   (hex)		TEL-Electronics Ltd
-500000-5FFFFF     (base 16)		TEL-Electronics Ltd
-				Sovetskaya, 85
-				Molzino  Moscow region  142411
-				RU
-
-F8-8A-3C   (hex)		Cadmus Electronic Co.,Ltd.
-800000-8FFFFF     (base 16)		Cadmus Electronic Co.,Ltd.
-				4F.-3, No.872, Jhongjheng Rd., Jhonghe Dist., 
-				New Taipei City  Taiwan (R.O.C.)   23586
-				TW
-
-F8-8A-3C   (hex)		Carefree of Colorado
-100000-1FFFFF     (base 16)		Carefree of Colorado
-				2145 W 6th Ave
-				Broomfield  CO  80020
-				US
-
-F8-8A-3C   (hex)		KOKKIA INC
-500000-5FFFFF     (base 16)		KOKKIA INC
-				43575 Mission Blvd, #302
-				Fremont  CA  94539
-				US
-
-F8-8A-3C   (hex)		Beijing Zhong Chuang Communication Technology Ltd.
-600000-6FFFFF     (base 16)		Beijing Zhong Chuang Communication Technology Ltd.
-				RM# 712-35, 7th Floor,  #2 Xin Xi Road, Shangdi, Haidian District
-				Beijing    100085
-				CN
-
-F8-8A-3C   (hex)		GO-LINK TECHNOLOGY CO., LTD.
-400000-4FFFFF     (base 16)		GO-LINK TECHNOLOGY CO., LTD.
-				Rm. 4, 14F., No.9, Sec.3, Zhonghua Rd.,
-				Hsinchu City    30060
-				TW
-
-4C-65-A8   (hex)		Plus One Japan Limited
-400000-4FFFFF     (base 16)		Plus One Japan Limited
-				2-8-6,Nishishinbashi
-				Minato-ku  Tokyo  105-0003
-				JP
-
-8C-14-7D   (hex)		Electrical & Automation Larsen & Toubro Limited
-E00000-EFFFFF     (base 16)		Electrical & Automation Larsen & Toubro Limited
-				Mysore Campus, KIADB Industrial Area, Hebbal, Hootagalli
-				Mysore  Karnataka  570020
-				IN
-
-8C-14-7D   (hex)		Bausch Datacom NV/SA
-B00000-BFFFFF     (base 16)		Bausch Datacom NV/SA
-				Tiensesteenweg 54-56
-				Korbeek-Lo  Vlaams-Brabant - Belgium  3360
-				BE
-
-8C-14-7D   (hex)		Nio
-000000-0FFFFF     (base 16)		Nio
-				3200 North 1st Street
-				San Jose  NY  95134
-				US
-
-A0-C5-F2   (hex)		AiCare Corp.
-400000-4FFFFF     (base 16)		AiCare Corp.
-				1917 Scepter Ct
-				San Jose  CA  95132
-				US
-
-8C-14-7D   (hex)		Shenzhen  Lanxus  technology Co. Ltd.
-D00000-DFFFFF     (base 16)		Shenzhen  Lanxus  technology Co. Ltd.
-				3rd Floor, Block A, Aerospace micromotor building, Science Park North, Nanshan District
-				Shenzhen  China  518000
-				CN
-
-F0-23-B9   (hex)		Ubiant
-100000-1FFFFF     (base 16)		Ubiant
-				2 Place de Francfort
-				Lyon    69003
-				FR
-
-F0-23-B9   (hex)		Q Core Medical Ltd
-B00000-BFFFFF     (base 16)		Q Core Medical Ltd
-				Yad Haruzim 29, PO Box 8639
-				Netanya    4250529
-				IL
-
-40-ED-98   (hex)		Integrated Design Ltd
-A00000-AFFFFF     (base 16)		Integrated Design Ltd
-				Feltham Point, Air Park Way
-				Feltham  Middlesex  TW137EQ
-				GB
-
-04-71-4B   (hex)		Shenzhen BoClouds Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Shenzhen BoClouds Technology Co.,Ltd.
-				Room 909, Unit A, Cadre Group Centre Building, No.168 TongSha Road, XiLi Town, Nanshan
-				Shenzhen  GuangDong  518000
-				CN
-
-F0-23-B9   (hex)		Annapurna labs
-A00000-AFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-F0-23-B9   (hex)		BSP RUS Ltd.
-300000-3FFFFF     (base 16)		BSP RUS Ltd.
-				174/1 Stavropolskaya street
-				Krasnodar  Krasnodar  350001
-				RU
-
-04-71-4B   (hex)		Griesser Electronic AG
-300000-3FFFFF     (base 16)		Griesser Electronic AG
-				Tänikonerstrasse 3
-				Aadorf  Thurgau  8355
-				CH
-
-04-71-4B   (hex)		Bureau Electronique Appliquee
-500000-5FFFFF     (base 16)		Bureau Electronique Appliquee
-				Allee des Noisetiers, 5
-				ANGLEUR  LIEGE  4031
-				BE
-
-60-D7-E3   (hex)		Ameli s.r.l.
-600000-6FFFFF     (base 16)		Ameli s.r.l.
-				via Guido Rossa,10
-				Impruneta  Firenze  50023
-				IT
-
-08-ED-02   (hex)		Telstra Corporation Limited
-E00000-EFFFFF     (base 16)		Telstra Corporation Limited
-				Level 2 / 150 Lonsdale St
-				Melbourne  Victoria  3000
-				AU
-
-98-AA-FC   (hex)		Dalian Eastern Display Co., Ltd.
-000000-0FFFFF     (base 16)		Dalian Eastern Display Co., Ltd.
-				No.99-5 Huaihe Middle Road E.& T Development Zone Dalian, China
-				Dalian  Liaoning  116600
-				CN
-
-14-4F-D7   (hex)		Edan Instruments, Inc.
-E00000-EFFFFF     (base 16)		Edan Instruments, Inc.
-				No.15, Jinhui Rd., Jinsha Community, Kengzi Subdistrict, Pingshan District,
-				Shenzhen  Guangdong  518122
-				CN
-
-98-AA-FC   (hex)		SURTEC
-100000-1FFFFF     (base 16)		SURTEC
-				616 avenue de l'Europe
-				Le Creusot  burgundy  71206
-				FR
-
-08-ED-02   (hex)		Origami Energy Ltd
-D00000-DFFFFF     (base 16)		Origami Energy Ltd
-				Ashcombe Court, Woolsack Way
-				Godalming    GU7 1LQ
-				GB
-
-14-4F-D7   (hex)		Shanghai B&A Technology Co., Ltd
-D00000-DFFFFF     (base 16)		Shanghai B&A Technology Co., Ltd
-				4F, No. 150 Cailun Rd, Zhangjiang
-				Shanghai    201210
-				CN
-
-14-4F-D7   (hex)		Emerson Network Power (India) Pvt. Ltd.
-900000-9FFFFF     (base 16)		Emerson Network Power (India) Pvt. Ltd.
-				Plot No. G-1, Additional Ambernath Industrial Area,   MIDC Phase-2, Bohonoli 
-				Ambernath,  Maharashtra  421 506
-				IN
-
-A4-11-63   (hex)		SHENZHEN YIWANJIA INFORMATION TECHNOLOGY CO.,LTD
-700000-7FFFFF     (base 16)		SHENZHEN YIWANJIA INFORMATION TECHNOLOGY CO.,LTD
-				Zone B,Floor 15,NO.2 Building,Yihe Road,Shilong Community,Shiyan Street,Baoan District
-				Shenzhen    518000
-				CN
-
-14-4F-D7   (hex)		FLS FINLAND OY
-500000-5FFFFF     (base 16)		FLS FINLAND OY
-				Voudinkatu 35 A
-				Raisio    FI21200
-				FI
-
-A4-11-63   (hex)		Carbon, Inc.
-500000-5FFFFF     (base 16)		Carbon, Inc.
-				312 Chestnut St
-				Redwood City  CA  94063
-				US
-
-A4-11-63   (hex)		SHENZHEN ZHISHI TECHNOLOGY CO., LTD.
-D00000-DFFFFF     (base 16)		SHENZHEN ZHISHI TECHNOLOGY CO., LTD.
-				Room 712 in 3A of Hecheng Century Garden，Wuhe Street South No.118，Longgang District，Shenzhen
-				SHENZHEN  GUANG DONG  518000
-				CN
-
-1C-A0-D3   (hex)		OOO Tekhnotronika
-000000-0FFFFF     (base 16)		OOO Tekhnotronika
-				Studeniy 4/1
-				Moscow    127282
-				RU
-
-40-A3-6B   (hex)		Securiton AG
-600000-6FFFFF     (base 16)		Securiton AG
-				Alpenstrasse 20, P.O. Box 127
-				Zollikofen    CH-3052 
-				CH
-
-A4-11-63   (hex)		Moog Music Inc.
-B00000-BFFFFF     (base 16)		Moog Music Inc.
-				160 Broadway St
-				Asheville  NC  28801
-				US
-
-40-F3-85   (hex)		Teleepoch Ltd
-800000-8FFFFF     (base 16)		Teleepoch Ltd
-				No.13 Langshan Rd,HiTech Park,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-40-F3-85   (hex)		SubPac
-000000-0FFFFF     (base 16)		SubPac
-				380 Portage Ave.
-				Palo Alto  CA  94306
-				US
-
-8C-C8-F4   (hex)		Strongbyte Solutions Limited
-800000-8FFFFF     (base 16)		Strongbyte Solutions Limited
-				Unit 7, Wychwood Business Centre
-				Chipping Norton  Oxfordshire  OX7 6XU
-				GB
-
-40-F3-85   (hex)		Beijing Zongheng Electro-Mechanical Technology Development Co.
-200000-2FFFFF     (base 16)		Beijing Zongheng Electro-Mechanical Technology Development Co.
-				No.1 Fenghui East Road, Yongfeng Industry Base, Haidian District, Beijing China
-				Beijing    100094
-				CN
-
-8C-C8-F4   (hex)		Evaporcool Solutions
-E00000-EFFFFF     (base 16)		Evaporcool Solutions
-				5100 Wilfong Road
-				Memphis  TN  38134
-				US
-
-40-F3-85   (hex)		Creanord
-A00000-AFFFFF     (base 16)		Creanord
-				Pasilanraitio 9B
-				Helsinki  Uusimaa  00240
-				FI
-
-40-F3-85   (hex)		Digital Bros S.p.A.
-D00000-DFFFFF     (base 16)		Digital Bros S.p.A.
-				via Tortona, 37
-				Milan  MI  20144
-				IT
-
-8C-C8-F4   (hex)		Dark Horse Connect LLC
-200000-2FFFFF     (base 16)		Dark Horse Connect LLC
-				13492 Research Blvd, Ste 336
-				Austin  TX  78750
-				US
-
-8C-C8-F4   (hex)		Shenzhen KSTAR Science and Technology Co., Ltd
-C00000-CFFFFF     (base 16)		Shenzhen KSTAR Science and Technology Co., Ltd
-				Kstar Industrial Park, 7th Road, Guangming Hi- Tech Industrial Zone
-				Shenzhen    518070
-				CN
-
-50-A4-D0   (hex)		Changsha SinoCare, Inc
-A00000-AFFFFF     (base 16)		Changsha SinoCare, Inc
-				No.265 Gu yuan road  Hi-Tech Zone, Yuelu district 
-				Changsha  Hunan  410205
-				CN
-
-50-A4-D0   (hex)		Axel Technology
-D00000-DFFFFF     (base 16)		Axel Technology
-				Via Caduti di Sabbiuno 6/F
-				Anzola dell'Emilia    40011
-				IT
-
-50-A4-D0   (hex)		Sagetech Corporation
-E00000-EFFFFF     (base 16)		Sagetech Corporation
-				PO Box 1146
-				White Salmon  WA  98672
-				US
-
-50-A4-D0   (hex)		Raven Industries Inc.
-400000-4FFFFF     (base 16)		Raven Industries Inc.
-				205 E 6TH Street
-				Sioux Falls  SD  57104
-				US
-
-34-04-9E   (hex)		GoChip Inc.
-000000-0FFFFF     (base 16)		GoChip Inc.
-				275 Airpark Blvd, Suite 100
-				Chico  CA  95973
-				US
-
-40-ED-98   (hex)		A-IOX INC.
-200000-2FFFFF     (base 16)		A-IOX INC.
-				10Fl., No. 497, Sec. 2, Tiding Blvd., Neihu Dist.
-				Taipei City    11493
-				TW
-
-34-04-9E   (hex)		Life Interface Co., Ltd.
-600000-6FFFFF     (base 16)		Life Interface Co., Ltd.
-				2-1-16
-				Minato  Tokyo  1050013
-				JP
-
-40-ED-98   (hex)		GuangZhou FiiO Electronics Technology Co.,Ltd
-100000-1FFFFF     (base 16)		GuangZhou FiiO Electronics Technology Co.,Ltd
-				201,2/F, F Building, Hougang Industrial Zone, Shigang Village, huangshi West Road,Baiyun District
-				GuangZhou    510430
-				CN
-
-40-ED-98   (hex)		BloomSky,Inc.
-C00000-CFFFFF     (base 16)		BloomSky,Inc.
-				723 N Shoreline Blvd.
-				Mountain view  CA  94043
-				US
-
-50-0B-91   (hex)		Igor, Inc.
-000000-0FFFFF     (base 16)		Igor, Inc.
-				5619 NW 86th St.
-				Johnston  IA  50131
-				US
-
-A4-58-0F   (hex)		Stone Lock Global, Inc.
-100000-1FFFFF     (base 16)		Stone Lock Global, Inc.
-				101 N Church St
-				Olathe  KS  66061
-				US
-
-A4-58-0F   (hex)		AIR LIQUIDE MEDICAL SYSTEMS
-800000-8FFFFF     (base 16)		AIR LIQUIDE MEDICAL SYSTEMS
-				
-				    
-				
-
-50-0B-91   (hex)		Annapurna labs
-200000-2FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-A4-58-0F   (hex)		Ksenia Security srl
-900000-9FFFFF     (base 16)		Ksenia Security srl
-				SP Valtesino 44
-				Ripatransone  AP  63065
-				IT
-
-50-0B-91   (hex)		Sinope technologies Inc
-400000-4FFFFF     (base 16)		Sinope technologies Inc
-				705 Montrichard
-				St-Jean-Sur-Richelieu  Quebec  J2X5K8
-				CA
-
-7C-CB-E2   (hex)		1000eyes GmbH
-200000-2FFFFF     (base 16)		1000eyes GmbH
-				Joachimsthaler Str. 12
-				Berlin    10719
-				DE
-
-7C-CB-E2   (hex)		SY Electronics Limited
-600000-6FFFFF     (base 16)		SY Electronics Limited
-				7 Worrall Street
-				Salford    M5 4TH
-				GB
-
-24-4E-7B   (hex)		Nanjing Wanlida Technology Co., Ltd.
-700000-7FFFFF     (base 16)		Nanjing Wanlida Technology Co., Ltd.
-				Wanlida Industry Zone, Nanjing County
-				Zhangzhou  Fujian  363601
-				CN
-
-7C-CB-E2   (hex)		Hangzhou Haohaokaiche Technology Co.,Ltd.
-900000-9FFFFF     (base 16)		Hangzhou Haohaokaiche Technology Co.,Ltd.
-				Building 7, Haichuang Park, No.998 Wenyi West Road, Yuhang District
-				Hangzhou  Zhejiang  331000
-				CN
-
-7C-CB-E2   (hex)		DTECH Labs, Inc.
-500000-5FFFFF     (base 16)		DTECH Labs, Inc.
-				21580 Beaumeade Circle, Suite 230
-				Ashburn  VA  20147
-				US
-
-48-65-EE   (hex)		shenzhen sunflower technologies CO., LIMITED
-600000-6FFFFF     (base 16)		shenzhen sunflower technologies CO., LIMITED
-				207, 4th Tower , ZhongXing industrial City, Nanshan zone
-				ShenZhen  GangDong  518000
-				CN
-
-48-65-EE   (hex)		DefPower Ltd
-000000-0FFFFF     (base 16)		DefPower Ltd
-				6 Repton Close
-				Basildon    SS13 1LE
-				GB
-
-4C-E1-73   (hex)		Shenzhen Evolution Dynamics Co., Ltd.
-900000-9FFFFF     (base 16)		Shenzhen Evolution Dynamics Co., Ltd.
-				Room 1212, Wanjun trade building, Baoxing Rd No.21, Baoan District, Shenzhen City, China
-				shenzhen  GuangDong  518100
-				CN
-
-1C-C0-E1   (hex)		Exigent Sensors
-B00000-BFFFFF     (base 16)		Exigent Sensors
-				11331 Markon Dr
-				Garden Grove  CA  92841
-				US
-
-1C-C0-E1   (hex)		Ospicon Company Limited
-900000-9FFFFF     (base 16)		Ospicon Company Limited
-				Room 1025, 10/F., Metro Centre II, 21 Lam Hing St., 
-				Kowloon Bay  Kowloon  00000
-				HK
-
-4C-E1-73   (hex)		Nexoforge Inc.
-100000-1FFFFF     (base 16)		Nexoforge Inc.
-				4514 47 Ave 
-				Leduc  Alberta  T9E 5S9
-				CA
-
-1C-C0-E1   (hex)		NewLand (NZ) Communication Tech Limited
-D00000-DFFFFF     (base 16)		NewLand (NZ) Communication Tech Limited
-				39A WAIPA ST BIRKENHEAD
-				AUCKLAND  Auckland  0626
-				NZ
-
-AC-64-DD   (hex)		PFDC ELANCYL
-800000-8FFFFF     (base 16)		PFDC ELANCYL
-				LES CAUQUILLOUS 
-				81506 LAVAUR CEDEX    81506
-				FR
-
-AC-64-DD   (hex)		Shenzhen PuHua Technology Co., Ltd
-200000-2FFFFF     (base 16)		Shenzhen PuHua Technology Co., Ltd
-				4/F BLDG-B, Forzen Technology Park,Fuyuan 2nd Road, Fuyong Town, Baoan District
-				shenzhen    518103
-				CN
-
-AC-64-DD   (hex)		Bluewave Global Manufacturing Limited
-A00000-AFFFFF     (base 16)		Bluewave Global Manufacturing Limited
-				82/F, International Commerce Centre, 1 Austin Road
-				West Kowloon    0
-				HK
-
-AC-64-DD   (hex)		Wittmann Kunststoffgeräte GmbH
-700000-7FFFFF     (base 16)		Wittmann Kunststoffgeräte GmbH
-				Lichtblaustraße 10
-				Vienna  Vienna  1220
-				AT
-
-38-3A-21   (hex)		R3C Information(Shenzhen) Co.，Ltd.
-000000-0FFFFF     (base 16)		R3C Information(Shenzhen) Co.，Ltd.
-				2F,JinHuiQiou Building,Langshan2 Road,Hi-Tech Ind.Park, Nanshan District
-				Shenzhen  GuangDong  86
-				CN
-
-38-3A-21   (hex)		HOBART GmbH
-100000-1FFFFF     (base 16)		HOBART GmbH
-				Robert-Bosch-Straße 17
-				Offenburg  Baden-Württemberg  77656
-				DE
-
-F8-1D-78   (hex)		GUANGDONG ENOK COMMUNICATION CO., LTD.
-E00000-EFFFFF     (base 16)		GUANGDONG ENOK COMMUNICATION CO., LTD.
-				No.139 Lixiang road, Songmushan Dalang town, Dongguan,Guangdong ,China
-				DongGuan  GuanDong  523795
-				CN
-
-38-3A-21   (hex)		OOO NPP Uraltechnologiya
-500000-5FFFFF     (base 16)		OOO NPP Uraltechnologiya
-				Studencheskaya str. 16-130
-				Ekaterinburg    620137
-				RU
-
-F8-1D-78   (hex)		WUHAN GUIDE INFRARED CO.,LTD
-700000-7FFFFF     (base 16)		WUHAN GUIDE INFRARED CO.,LTD
-				No.6 Huanglongshan South Rd
-				Wuhan  Hubei  430070
-				CN
-
-F8-1D-78   (hex)		SigmaConnectivityAB
-B00000-BFFFFF     (base 16)		SigmaConnectivityAB
-				Mobilv 10
-				Lund    223 62
-				SE
-
-C0-D3-91   (hex)		B9Creations
-100000-1FFFFF     (base 16)		B9Creations
-				525 University Loop Ste 115
-				Rapid City  SD  57701
-				US
-
-F0-AC-D7   (hex)		Fiziico Co., Ltd.
-E00000-EFFFFF     (base 16)		Fiziico Co., Ltd.
-				8F-3, No. 15, Ln 360, Sec. 1, Neihu Rd., Neihu District
-				Taipei    11493
-				TW
-
-98-6D-35   (hex)		my-PV GmbH
-C00000-CFFFFF     (base 16)		my-PV GmbH
-				Teichstrasse 43
-				Neuzeug    4523
-				AT
-
-F0-AC-D7   (hex)		Zhejiang Makepower Electronics,Inc.
-B00000-BFFFFF     (base 16)		Zhejiang Makepower Electronics,Inc.
-				Building 2, Estate 10, Wenzhou Hi-Tech Industrial Development Area, zhejiang, China
-				shenzhen    518000
-				CN
-
-28-36-38   (hex)		CHARGELIB
-500000-5FFFFF     (base 16)		CHARGELIB
-				11 CITE VANEAU
-				PARIS    75007
-				FR
-
-28-36-38   (hex)		Georg Neumann GmbH
-600000-6FFFFF     (base 16)		Georg Neumann GmbH
-				Leipziger Str. 112
-				Berlin    10117
-				DE
-
-B0-C5-CA   (hex)		EM-Tech
-000000-0FFFFF     (base 16)		EM-Tech
-				40, Changwon-daero 1144beon-gil, Seongsan-gu
-				Changwon  Gyeongsangnam-do  642-120
-				KR
-
-8C-19-2D   (hex)		Pyras Technology Inc.
-D00000-DFFFFF     (base 16)		Pyras Technology Inc.
-				6F, No. 1353, Chung Cheng Rd., Taoyuan Dist.,
-				Taoyuan City  Select State  33071
-				TW
-
-8C-19-2D   (hex)		Noritsu Precision Co., Ltd.
-000000-0FFFFF     (base 16)		Noritsu Precision Co., Ltd.
-				579-1 Umehara
-				Wakayama  Wakayama  640-8550
-				JP
-
-78-CA-83   (hex)		Eksagate Elektronik Mühendislik ve Bilgisayar San. Tic. A.Ş.
-A00000-AFFFFF     (base 16)		Eksagate Elektronik Mühendislik ve Bilgisayar San. Tic. A.Ş.
-				ŞEHİT AHMET SOK. 12/1 MECİDİYEKÖY
-				istanbul    34381
-				TR
-
-8C-19-2D   (hex)		smartHome Partner GmbH
-600000-6FFFFF     (base 16)		smartHome Partner GmbH
-				Dalbker Strasse 138
-				Oerlinghausen  NRW  33813
-				DE
-
-1C-87-76   (hex)		Dspread Technology (Beijing) Inc.
-000000-0FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
-				Jingxin Building, 2045 Suite , Chaoyang District
-				Beijing    100027
-				CN
-
-D0-D9-4F   (hex)		ARROWAVE TECHNOLOGIES LIMITED
-C00000-CFFFFF     (base 16)		ARROWAVE TECHNOLOGIES LIMITED
-				L1, 1st Floor, LIC Colony, Sector-14, 10th Main, Jeevanbhima Nagar
-				Bangalore  Karnataka  560075
-				IN
-
-D0-D9-4F   (hex)		Shenzhen FDC Electuonic Co.,Ltd.
-A00000-AFFFFF     (base 16)		Shenzhen FDC Electuonic Co.,Ltd.
-				Gushu Community, Xixiang Street, Baoan Dist. ShenZhen, GuangDong, China
-				Shenzhen  Guangdong  518126
-				CN
-
-CC-D3-1E   (hex)		PJG Systementwicklung GmbH
-400000-4FFFFF     (base 16)		PJG Systementwicklung GmbH
-				Billrothstrasse 2A
-				Vienna  Vienna  1190
-				AT
-
-CC-D3-1E   (hex)		NantEnergy
-C00000-CFFFFF     (base 16)		NantEnergy
-				8455 North 90th Street Suite 4
-				Scottsdale  AZ  85258
-				US
-
-E0-B6-F5   (hex)		Advatek Lighting Pty Ltd
-E00000-EFFFFF     (base 16)		Advatek Lighting Pty Ltd
-				16 / 62 Ramset Drive
-				Chirnside Park  VIC  3116
-				AU
-
-E0-B6-F5   (hex)		 Shanghai- British Information Technology Co., Ltd
-200000-2FFFFF     (base 16)		 Shanghai- British Information Technology Co., Ltd
-				No.1 Building, No.433 Guoshoujing Road, Pudong District, Shanghai
-				shanghai    201203
-				CN
-
-2C-26-5F   (hex)		AATON DIGITAL
-C00000-CFFFFF     (base 16)		AATON DIGITAL
-				2 RUE DE LA PAIX
-				GRENOBLE  RHONE-ALPES  38000
-				FR
-
-50-FF-99   (hex)		Yongjing Shanghai Electronic Science and Technology 
-300000-3FFFFF     (base 16)		Yongjing Shanghai Electronic Science and Technology 
-				Room 202,Building 2,No.65,Lane1398,Xin Zhu Road,  Minhang District Shanghai.
-				shanghai  shanghai  201100 
-				CN
-
-E0-B6-F5   (hex)		Motiveprime Consumer Electronics Pvt Ltd
-900000-9FFFFF     (base 16)		Motiveprime Consumer Electronics Pvt Ltd
-				#244,17th cross Sector 6 HSR Layout
-				Bangalore  Karnataka  560102
-				IN
-
-E0-B6-F5   (hex)		Shenzhen Civicom Technology Co.,Limited
-500000-5FFFFF     (base 16)		Shenzhen Civicom Technology Co.,Limited
-				Room 1302,Microprofit Building,Gaoxin 6th Avenue,Hi-tech Park,Nanshan District 
-				Shenzhen  Guangdong  518057
-				CN
-
-50-FF-99   (hex)		Garrison Technology
-500000-5FFFFF     (base 16)		Garrison Technology
-				20-22 Wenlock Road
-				London  London  N1 7GU
-				GB
-
-98-6D-35   (hex)		PDAHL 
-500000-5FFFFF     (base 16)		PDAHL 
-				Gammagatan  1
-				Moelndal  Sweden  43949
-				SE
-
-7C-47-7C   (hex)		I-Convergence.com
-E00000-EFFFFF     (base 16)		I-Convergence.com
-				2A2212, No.32 Baiziwan Road, Chaoyang District
-				Beijing    100021
-				CN
-
-7C-47-7C   (hex)		RLC Electronics Systems
-400000-4FFFFF     (base 16)		RLC Electronics Systems
-				10 Corporate Blvd.
-				Sinking Spring  PA  19608
-				US
-
-7C-47-7C   (hex)		DaLian Cheering Tech Co.,Ltd
-900000-9FFFFF     (base 16)		DaLian Cheering Tech Co.,Ltd
-				321-1 Tuqiang Street RM308,DDA
-				DaLian  Liaoning  116023
-				CN
-
-38-FD-FE   (hex)		Swedish Adrenaline AB
-B00000-BFFFFF     (base 16)		Swedish Adrenaline AB
-				Pilefeltsgatan 73
-				Halmstad    302 50
-				SE
-
-38-FD-FE   (hex)		Indra Navia AS
-800000-8FFFFF     (base 16)		Indra Navia AS
-				Olaf Helsets vei 6, P.O. Box 150 Oppsal
-				Oslo    0619
-				NO
-
-38-FD-FE   (hex)		OOO Group of Industrial Technologies
-900000-9FFFFF     (base 16)		OOO Group of Industrial Technologies
-				Profsoyuznaya st. 124A
-				Moscow  Moscow  117321
-				RU
-
-38-FD-FE   (hex)		Edge I&D Co., Ltd.
-000000-0FFFFF     (base 16)		Edge I&D Co., Ltd.
-				1342-12, Gyeongchung-daero, Chowol-eup
-				Gwangju-si  Gyeonggi-do  12735
-				KR
-
-5C-F2-86   (hex)		Access IS
-700000-7FFFFF     (base 16)		Access IS
-				18 Suttons Business Park
-				READING  Berks  RG6 1AZ
-				GB
-
-38-B8-EB   (hex)		Ajax Systems Inc
-C00000-CFFFFF     (base 16)		Ajax Systems Inc
-				910 Foulk Road, Suite 201
-				Wilmington,    19803
-				UA
-
-38-B8-EB   (hex)		NHS Sistemas de Energia
-900000-9FFFFF     (base 16)		NHS Sistemas de Energia
-				Juscelino Kubitscheck de Oliveira 5270
-				Curitiba  Parana  81260000
-				BR
-
-38-B8-EB   (hex)		UMLOGICS
-400000-4FFFFF     (base 16)		UMLOGICS
-				17, Techno2ro, Yuseong-gu
-				Daejeon    34012
-				KR
-
-38-B8-EB   (hex)		SECAD SA
-A00000-AFFFFF     (base 16)		SECAD SA
-				Zac des Pellants
-				St Martin du Fresne    01430
-				FR
-
-38-FD-FE   (hex)		Management Service Corporation
-A00000-AFFFFF     (base 16)		Management Service Corporation
-				1-7-12 Marunouchi, Chiyoda-ku
-				Tokyo    100-0005
-				JP
-
-38-B8-EB   (hex)		Bumjin C&L Co., Ltd.
-000000-0FFFFF     (base 16)		Bumjin C&L Co., Ltd.
-				9B 10L, 833-14 Wonsi-dong Danwon-gu
-				Ansan  Gyeonggi  15612
-				KR
-
-78-CA-83   (hex)		Pinhole (Beijing) Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Pinhole (Beijing) Technology Co., Ltd.
-				Room 1001-008, No.1 Building, No. 3 Haidian Street, Haidian District
-				Beijing    100190
-				CN
-
-78-CA-83   (hex)		Neofon GmbH
-300000-3FFFFF     (base 16)		Neofon GmbH
-				Sonnengrund 13a
-				Starnberg    82319
-				DE
-
-78-CA-83   (hex)		APC
-200000-2FFFFF     (base 16)		APC
-				PO Box 30204
-				Al-Khobar    31952
-				SA
-
-78-CA-83   (hex)		Nomiku
-600000-6FFFFF     (base 16)		Nomiku
-				475 Alvarado St Apt 2
-				San Francisco  CA  94114
-				US
-
-1C-88-79   (hex)		Orion Labs inc
-E00000-EFFFFF     (base 16)		Orion Labs inc
-				2125 Mission St
-				San Francisco  CA  94110
-				US
-
-1C-88-79   (hex)		Beijing Raycores Technology Co.,Ltd
-D00000-DFFFFF     (base 16)		Beijing Raycores Technology Co.,Ltd
-				1113# 11/F #A Building No.118 Huilongguan West Street,Changping District
-				Beijing    102208
-				CN
-
-1C-87-74   (hex)		Surtec Industries, Inc
-800000-8FFFFF     (base 16)		Surtec Industries, Inc
-				9 Kon Jan North Road, Liutu Industrial Zone
-				Keelung    20647
-				TW
-
-1C-88-79   (hex)		Ultraflux
-400000-4FFFFF     (base 16)		Ultraflux
-				9 Allee Rosa Luxembourg
-				Eragny    95610
-				FR
-
-1C-87-74   (hex)		Nebbiolo Technologies
-A00000-AFFFFF     (base 16)		Nebbiolo Technologies
-				860 Hillview Court, #310
-				Milpitas  CA  94035
-				US
-
-1C-87-74   (hex)		Wide World Trade HK ltd.
-900000-9FFFFF     (base 16)		Wide World Trade HK ltd.
-				Office Tower, Convention Plaza, 1 Harbour Road, Wanchai
-				Hong Kong    4210
-				HK
-
-1C-87-74   (hex)		Silora R&D
-300000-3FFFFF     (base 16)		Silora R&D
-				Kibbutz Kfar-Masaryk
-				Haifa    25208
-				IL
-
-1C-87-74   (hex)		SIGFOX
-100000-1FFFFF     (base 16)		SIGFOX
-				Bâtiment E-volution - 425, rue Jean Rostand 
-				Labege    31670
-				FR
-
-1C-87-76   (hex)		Qivivo
-D00000-DFFFFF     (base 16)		Qivivo
-				11 impasse Juton
-				NANTES    44000
-				FR
-
-1C-87-76   (hex)		Guangzhou Video-Star Electronics Co.,Ltd.
-800000-8FFFFF     (base 16)		Guangzhou Video-Star Electronics Co.,Ltd.
-				6F/No.6 Building, No.9/4th Lanyu St., GZ Economy&Technology Development Area
-				Guangzhou  Guangdong  510730
-				CN
-
-1C-87-76   (hex)		philandro Software GmbH
-600000-6FFFFF     (base 16)		philandro Software GmbH
-				Rosenbergstr. 46
-				Stuttgart    70176
-				DE
-
-1C-87-76   (hex)		Corporate Systems Engineering 
-700000-7FFFFF     (base 16)		Corporate Systems Engineering 
-				1215 Brookville Way
-				Indianapolis   IN  46239
-				US
-
-1C-87-76   (hex)		Tokyo Drawing Ltd.
-900000-9FFFFF     (base 16)		Tokyo Drawing Ltd.
-				103 Ni Terai-machi
-				Nomi-shi  Ishikawa  923-1121
-				JP
-
-1C-87-76   (hex)		Unjo AB
-300000-3FFFFF     (base 16)		Unjo AB
-				Bergfotsgatan 3B
-				Mölndal    SE-43135
-				SE
-
-1C-87-79   (hex)		Visual Land Inc.
-300000-3FFFFF     (base 16)		Visual Land Inc.
-				17785 Center Court Dr. #670
-				Cerritos  CA  90703
-				US
-
-1C-87-79   (hex)		Wurm GmbH & Co. KG Elektronische Systeme
-000000-0FFFFF     (base 16)		Wurm GmbH & Co. KG Elektronische Systeme
-				Morsbachtalstr. 30
-				Remscheid    42857
-				DE
-
-1C-87-76   (hex)		Ibeo Automotive Systems GmbH
-200000-2FFFFF     (base 16)		Ibeo Automotive Systems GmbH
-				Merkurring 60-62
-				Hamburg    22143
-				DE
-
-40-A3-6B   (hex)		FAOD Co.,Ltd.
-D00000-DFFFFF     (base 16)		FAOD Co.,Ltd.
-				#301, U-Tower, 1029, Yeongdeok-dong, Giheung-gu
-				Yongin-si  Gyeonggi-do  446-908
-				KR
-
-84-39-BE   (hex)		Guangdong SunMeng Information Technology Co. Ltd.
-900000-9FFFFF     (base 16)		Guangdong SunMeng Information Technology Co. Ltd.
-				Yuexiu District of Shuiyin Road No.56th courtyard No.1 building six-floor
-				Guangzhou  Guangdong  510627
-				CN
-
-84-39-BE   (hex)		Shenzhen IP3 Century Intelligent Technology Co., Ltd
-600000-6FFFFF     (base 16)		Shenzhen IP3 Century Intelligent Technology Co., Ltd
-				Unit A1, 11F, Block A, Tongfang Information Harbor, No.11, Langshan Road, Hi-Tech Park(North), Nanshan District, Shenzhen
-				Shenzhen  Guangdong  518010
-				CN
-
-40-A3-6B   (hex)		TOPROOTTechnology Corp. Ltd.
-200000-2FFFFF     (base 16)		TOPROOTTechnology Corp. Ltd.
-				5F-8, No. 14, Lane 609, Sec.5, Chongsin Rd., 
-				Sanchong Dist.   NewTaipei City   241
-				TW
-
-70-88-6B   (hex)		Beijing Strongleader Science & Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Beijing Strongleader Science & Technology Co., Ltd.
-				No. 12 Yard, Zhong Guan Cun South St. 
-				Beijing  Beijing  100081
-				CN
-
-70-88-6B   (hex)		RHXTune Technology Co.,Ltd
-A00000-AFFFFF     (base 16)		RHXTune Technology Co.,Ltd
-				Room 409, TianGong building A, Xueyuan Road 30, Haidian District
-				Beijing  Beijing  100083
-				CN
-
-70-88-6B   (hex)		HORI CO., LTD.
-400000-4FFFFF     (base 16)		HORI CO., LTD.
-				640, Saedo-cho
-				Yokohama-city  Kanagawa  224-0054
-				JP
-
-70-88-6B   (hex)		MAX4G, Inc.
-C00000-CFFFFF     (base 16)		MAX4G, Inc.
-				6400 Flying Cloud Drive, Suite 225
-				Eden Prairie  MN  55344
-				US
-
-70-88-6B   (hex)		Veracity UK Ltd
-000000-0FFFFF     (base 16)		Veracity UK Ltd
-				4 Dow Road
-				Monkton, Prestwick    KA9 2TU
-				GB
-
-80-0A-80   (hex)		Dongguan I-Chime electrinics Co.,Ltd
-100000-1FFFFF     (base 16)		Dongguan I-Chime electrinics Co.,Ltd
-				3/F,A/B,west of Xiangmang road,Fugang village
-				Dongguan  Guangdong  523660
-				CN
-
-CC-1B-E0   (hex)		Sichuan Dianjia network technology Co.Ltd.
-700000-7FFFFF     (base 16)		Sichuan Dianjia network technology Co.Ltd.
-				East 6F,No.51 East Wenshui Road,Hongkou District
-				Shanghai  Shanghai  200437
-				CN
-
-CC-1B-E0   (hex)		i-Trinetech Co.,Ltd.
-200000-2FFFFF     (base 16)		i-Trinetech Co.,Ltd.
-				4th FL.,East Wing of M-8 Building,Sparrow Ridge Industrial Zone,Science&Technology Park,Nanshan District.,Shenzhen City
-				Shenzhen  Guangdong  518057
-				CN
-
-CC-1B-E0   (hex)		ART&CORE Inc
-B00000-BFFFFF     (base 16)		ART&CORE Inc
-				6F, 44, Burim-ro 170beon-gil, Dongan-gu,
-				Anyang-si  Gyeonggi-do  431-060
-				KR
-
-00-55-DA   (hex)		Shinko Technos co.,ltd.
-000000-0FFFFF     (base 16)		Shinko Technos co.,ltd.
-				2-5-1, Senba Higashi
-				Mino  Osaka  562-0035
-				JP
-
-C8-8E-D1   (hex)		Aventics GmbH
-E00000-EFFFFF     (base 16)		Aventics GmbH
-				Ulmer Str. 4
-				Laatzen  Lower Saxony  30880
-				DE
-
-A0-3E-6B   (hex)		iLoda Solutions Limited
-300000-3FFFFF     (base 16)		iLoda Solutions Limited
-				217A, 2/F, Enterprise Place
-				Hong Kong  Hong Kong  000000
-				HK
-
-A0-3E-6B   (hex)		Wuhan Rui Ying Tong Network Technology Co., Ltd(China)
-600000-6FFFFF     (base 16)		Wuhan Rui Ying Tong Network Technology Co., Ltd(China)
-				No.303, Optics Valley Avenue, Wuhan, Hubei, China
-				Wuhan  Hubei  430074
-				CN
-
-A0-3E-6B   (hex)		SinoGrid Software Systems Inc.
-700000-7FFFFF     (base 16)		SinoGrid Software Systems Inc.
-				3rd Floor , No.4 Aviation Industry Technology Park
-				Beijing  Beijing  101111
-				CN
-
-1C-21-D1   (hex)		Microview Science and Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Microview Science and Technology Co.,Ltd
-				NO.29 Zhufang Road,Shangdi,Haidian District,Beijing,P.R.China
-				Beijing  Beijing  100085
-				CN
-
-1C-21-D1   (hex)		Scientific-Production Enterprise Dynamics
-400000-4FFFFF     (base 16)		Scientific-Production Enterprise Dynamics
-				Anisimova street, 6
-				Cheboksary  Chuvash Republic  428015
-				RU
-
-DC-44-27   (hex)		Neusoft Corporation
-900000-9FFFFF     (base 16)		Neusoft Corporation
-				No.2 Xinxiu Street,Hunnan New District,Shenyang,Liaoning,China
-				Shenyang  Liaoning  110179
-				CN
-
-C8-8E-D1   (hex)		AISWORLD PRIVATE LIMITED
-000000-0FFFFF     (base 16)		AISWORLD PRIVATE LIMITED
-				ROOM 1406, 14/F., WING TUCK COMMERCIAL CENTRE 177-183 WING LOK STREET, SHEUNG WAN. HONG KONG
-				HONG KONG  SHEUNG WAN  999077
-				HK
-
-B0-C5-CA   (hex)		Audio Elektronik İthalat İhracat San ve Tic A.Ş.
-E00000-EFFFFF     (base 16)		Audio Elektronik İthalat İhracat San ve Tic A.Ş.
-				Esenkent Mah. Barajyolu cad. No:26
-				İstanbul  Ümraniye  34776
-				TR
-
-B0-C5-CA   (hex)		Private
-D00000-DFFFFF     (base 16)		Private
-
-B0-C5-CA   (hex)		XMetrics
-C00000-CFFFFF     (base 16)		XMetrics
-				Via Caravaggio, 3
-				Bussero  MI  20060
-				IT
-
-DC-44-27   (hex)		Century Audio, Inc.
-500000-5FFFFF     (base 16)		Century Audio, Inc.
-				6220 Overlook Rd.
-				Peachtree Corners  Georgia  30092
-				US
-
-B0-C5-CA   (hex)		abode systems, inc.
-300000-3FFFFF     (base 16)		abode systems, inc.
-				2625 Middlefield Road
-				Palo Alto  CA  94306
-				US
-
-78-C2-C0   (hex)		Huwomobility
-E00000-EFFFFF     (base 16)		Huwomobility
-				1196 Borregas Ave, Suite 100
-				Sunnyvale  California  94089
-				US
-
-78-C2-C0   (hex)		SES
-900000-9FFFFF     (base 16)		SES
-				35-39 avenue du Danemark
-				TOURS  Indre et Loire  37072
-				FR
-
-74-F8-DB   (hex)		Simon Electric (China) Co.,ltd
-D00000-DFFFFF     (base 16)		Simon Electric (China) Co.,ltd
-				No.1 Simon Rd, Jiangsu Haian, China
-				Nantong  Jiangsu  226601
-				CN
-
-74-F8-DB   (hex)		Songam Syscom Co. LTD.
-800000-8FFFFF     (base 16)		Songam Syscom Co. LTD.
-				1672-1, Donghwa-Ri, Munmak-Eup
-				Wonju  Gangwon-Do  220-801
-				KR
-
-74-F8-DB   (hex)		Shenzhen Melon Electronics Co.,Ltd
-600000-6FFFFF     (base 16)		Shenzhen Melon Electronics Co.,Ltd
-				3 Floor ,A5 building ,YinLong Technology Industrial Park ,Shenshan Road 292 ,Longgang District
-				Shenzhen  Guangdong  518116
-				CN
-
-78-C2-C0   (hex)		XRONOS-INC
-100000-1FFFFF     (base 16)		XRONOS-INC
-				SHINANOMACHI35
-				SHINJUKUKU  TOKYO  160-0016
-				JP
-
-B4-37-D1   (hex)		Union Tecnologica Noxium S.L.
-E00000-EFFFFF     (base 16)		Union Tecnologica Noxium S.L.
-				Calle Averroes nº8, Edificio Acropolis
-				Sevilla  Sevilla  41020
-				ES
-
-B4-37-D1   (hex)		ZXY Sport Tracking
-D00000-DFFFFF     (base 16)		ZXY Sport Tracking
-				Ingvald Ystgaards vei 1
-				Trondheim  Norway  7047
-				NO
-
-B4-37-D1   (hex)		NSI Co., Ltd.
-B00000-BFFFFF     (base 16)		NSI Co., Ltd.
-				3F, No.33-1, Lane235, Sung-Chiang Road
-				Taipei    10483
-				TW
-
-88-5D-90   (hex)		CPAC Systems
-300000-3FFFFF     (base 16)		CPAC Systems
-				Bergskroken 3
-				Gothenburg  Västra Götaland  40123
-				SE
-
-88-5D-90   (hex)		Shenzhen JingHanDa Electronics Co.Ltd
-500000-5FFFFF     (base 16)		Shenzhen JingHanDa Electronics Co.Ltd
-				5th Floor,No 4 ,Road 1,ShangXue Technology industrial Park,LongGang district,ShenZhen,GuangDong,China
-				ShenZhen  GuangDong  518129
-				CN
-
-88-5D-90   (hex)		FOSHAN HUAGUO OPTICAL CO.,LTD
-000000-0FFFFF     (base 16)		FOSHAN HUAGUO OPTICAL CO.,LTD
-				NO.3 Changhong East Road,Zhanghca Town Foshan City Guang Dong,China
-				Foshan  Guang Dong  528000
-				CN
-
-80-7B-85   (hex)		Mersen
-E00000-EFFFFF     (base 16)		Mersen
-				374 Merrimac St
-				Newburyport  MA  01950
-				US
-
-54-9A-11   (hex)		Orient Direct, Inc.
-600000-6FFFFF     (base 16)		Orient Direct, Inc.
-				974 Commercial St.
-				Palo Alto  California  94303
-				US
-
-54-9A-11   (hex)		Xi'an Hua Fan Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Xi'an Hua Fan Technology Co.,Ltd.
-				Room No.1,3rd Floor,Xi Tie Gong Cheng Da Sha,No.205 Jinhua Road,Xincheng District
-				Xi'an  Shaanxi  710032
-				CN
-
-88-5D-90   (hex)		Hexaglobe
-D00000-DFFFFF     (base 16)		Hexaglobe
-				1 rue Méhul
-				  Paris  75002
-				FR
-
-80-7B-85   (hex)		Kaynes Technology India Pvt Ltd
-D00000-DFFFFF     (base 16)		Kaynes Technology India Pvt Ltd
-				23-25, Belagola Food Industrial Area
-				MYSORE  Karnataka  570016
-				IN
-
-64-FB-81   (hex)		SHANGHAI   SIMCOM   LIMITED
-000000-0FFFFF     (base 16)		SHANGHAI   SIMCOM   LIMITED
-				Building A, SIM technology Building, N0.633 JinZhong Road,
-				Shanghai  /  200335
-				CN
-
-64-FB-81   (hex)		XIMO Communication Technology Co., Ltd
-600000-6FFFFF     (base 16)		XIMO Communication Technology Co., Ltd
-				3rd Floor,F region,418#,Tian Lin Road, Xuhui District, Shanghai
-				shanghai  shanghai  200233
-				CN
-
-1C-CA-E3   (hex)		Dabi Atlante S/A Industrias Medico Odontológicas
-E00000-EFFFFF     (base 16)		Dabi Atlante S/A Industrias Medico Odontológicas
-				Av. Presidente Castelo Branco, 2525
-				Ribeirão Preto  São Paulo  14095-903
-				BR
-
-80-E4-DA   (hex)		Dalian Roiland Technology Co.,Ltd
-D00000-DFFFFF     (base 16)		Dalian Roiland Technology Co.,Ltd
-				11th floor,7Huixian Yuan,
-				Dalian,  Liaoning  116023
-				CN
-
-80-E4-DA   (hex)		CAVALRY STORAGE INC
-500000-5FFFFF     (base 16)		CAVALRY STORAGE INC
-				4251 E BRICKELL ST
-				ONTARIO  CA  91761
-				US
-
-80-E4-DA   (hex)		BroadMedia Co., Ltd.
-600000-6FFFFF     (base 16)		BroadMedia Co., Ltd.
-				102-124, 106 Youngdeungpo Ro
-				Seoul  N/A  150-935
-				KR
-
-1C-CA-E3   (hex)		Shenzhen Smart Device Technology Co.,LTD
-300000-3FFFFF     (base 16)		Shenzhen Smart Device Technology Co.,LTD
-				SSMEC Building, Gao Xin Nan First Avenue Hi-Tech Park South
-				Shenzhen  GuangDong  518057
-				CN
-
-1C-CA-E3   (hex)		Sunray Medical Apparatus Co.,Ltd.
-400000-4FFFFF     (base 16)		Sunray Medical Apparatus Co.,Ltd.
-				 4/F No.242 Tianhe Dong Road ,510620 Guangzhou,  PEOPLE’S REPUBLICA OF CHINA
-				Guangzhou  Guangdong  510620
-				CN
-
-1C-CA-E3   (hex)		SHIN-YOSHA CORPORATION
-900000-9FFFFF     (base 16)		SHIN-YOSHA CORPORATION
-				Oyamagaoka3-9-1
-				Machida  Tokyo  1940215
-				JP
-
-1C-CA-E3   (hex)		OxySec S.r.l.
-800000-8FFFFF     (base 16)		OxySec S.r.l.
-				via delle Querce, 7
-				Treviolo  Bergamo  24048
-				IT
-
-2C-6A-6F   (hex)		Milbank Manufacturing Co.
-800000-8FFFFF     (base 16)		Milbank Manufacturing Co.
-				4801 Deramus Ave.
-				Kansas City  MO  64120
-				US
-
-2C-D1-41   (hex)		Ezee Systems Limited
-100000-1FFFFF     (base 16)		Ezee Systems Limited
-				Room 2103, Singga Commercial Centre
-				Hong Kong  HKSAR  HK
-				HK
-
-2C-6A-6F   (hex)		EATON FHF Funke + Huster Fernsig GmbH
-E00000-EFFFFF     (base 16)		EATON FHF Funke + Huster Fernsig GmbH
-				Gewerbeallee 15 - 19
-				Muelheim an der Ruhr  NRW  45478
-				DE
-
-90-C6-82   (hex)		Lachmann & Rink GmbH
-B00000-BFFFFF     (base 16)		Lachmann & Rink GmbH
-				Hommeswiese 129
-				Freudenberg  NRW  57258
-				DE
-
-90-C6-82   (hex)		Li Seng Technology Ltd.
-C00000-CFFFFF     (base 16)		Li Seng Technology Ltd.
-				Room 901, 9/F Shiu Fung Hong Building
-				  Hong Kong  852
-				HK
-
-90-C6-82   (hex)		S.A.E.T. S.R.L.
-500000-5FFFFF     (base 16)		S.A.E.T. S.R.L.
-				VIA PO 13
-				BUSCA  CUNEO  12022
-				IT
-
-2C-D1-41   (hex)		Resus Industries
-B00000-BFFFFF     (base 16)		Resus Industries
-				Kleine monnikenwerve 9
-				Brugge  West-Vlaanderen  8000
-				BE
-
-2C-6A-6F   (hex)		SHEN ZHEN SIS SCIENCE & TECHNOLOGY LTD.
-500000-5FFFFF     (base 16)		SHEN ZHEN SIS SCIENCE & TECHNOLOGY LTD.
-				Room 201, Block A, No.1, Qianwan Road 1,
-				Shenzhen  Guangdong  518000
-				CN
-
-A0-BB-3E   (hex)		Shenzhen Talent Technology company limited
-D00000-DFFFFF     (base 16)		Shenzhen Talent Technology company limited
-				105~107,1/F,Bldg T3,Shenzhen SW Park,No 011,High-teh South 7th Road, Nanshan District,Shenzhen
-				Shenzhen  Guangdong  518040
-				CN
-
-A0-BB-3E   (hex)		Ewig Industries Macao Commercial Offshore Ltd
-C00000-CFFFFF     (base 16)		Ewig Industries Macao Commercial Offshore Ltd
-				Avenida da Praia Grande No. 619
-				Macau  Macau  000000
-				CN
-
-2C-6A-6F   (hex)		NanChang LangJie Technology Co.,Ltd
-200000-2FFFFF     (base 16)		NanChang LangJie Technology Co.,Ltd
-				Room 819,No.3 Building,XianFeng Property,No.948 HuoJu Street,GaoXin District
-				NanChang  JiangXi  330096
-				CN
-
-A0-BB-3E   (hex)		DirectOut GmbH
-200000-2FFFFF     (base 16)		DirectOut GmbH
-				Leipziger Str. 32
-				Mittweida  Saxony  09648
-				DE
-
-98-02-D8   (hex)		EBI  Ltd.
-500000-5FFFFF     (base 16)		EBI  Ltd.
-				1305 Metro Loft
-				Kwai Chung  NT  HKG
-				HK
-
-98-02-D8   (hex)		AGV spa
-C00000-CFFFFF     (base 16)		AGV spa
-				Strada Savonesa 12
-				rivalta scrivia (AL)  italy  15057
-				IT
-
-98-02-D8   (hex)		United Power Research Technology Corp.
-200000-2FFFFF     (base 16)		United Power Research Technology Corp.
-				8F.-5,No.83,Sec.2,Dongda Rd.,North Dist.,
-				Hsinchu City  Taiwan  300
-				TW
-
-28-FD-80   (hex)		Poket Hardware GmbH
-B00000-BFFFFF     (base 16)		Poket Hardware GmbH
-				Borsigstr. 9.
-				Berlin  Berlin  10115
-				DE
-
-28-FD-80   (hex)		Apollo Digital (Taiwan) Ltd.
-A00000-AFFFFF     (base 16)		Apollo Digital (Taiwan) Ltd.
-				Rm. A, 9F, No.68, Sec. 2,
-				New Taipei City  Taiwan  22065
-				TW
-
-2C-26-5F   (hex)		Rexgen Inc.
-B00000-BFFFFF     (base 16)		Rexgen Inc.
-				127, Wonmanseong-ro, Deokjin -gu
-				Jeonju-si  Jeonbuk  561-202
-				KR
-
-28-FD-80   (hex)		Xiaocong Network Limited
-500000-5FFFFF     (base 16)		Xiaocong Network Limited
-				2F,Building 3, No.200, Guoding East Road (Innovation Works)
-				  Shanghai  200093
-				CN
-
-28-FD-80   (hex)		JINLITONG INTERNATIONAL CO.,LTD
-900000-9FFFFF     (base 16)		JINLITONG INTERNATIONAL CO.,LTD
-				KangMai Industrial Zone ,B building, F/3,
-				Shenzhen  guangdong  518110
-				CN
-
-28-FD-80   (hex)		Jasco Products Company
-800000-8FFFFF     (base 16)		Jasco Products Company
-				10 East Memorial Road
-				Oklahoma City  Oklahoma  73114
-				US
-
-28-FD-80   (hex)		Vigil Monitoring
-600000-6FFFFF     (base 16)		Vigil Monitoring
-				Suite 201, Ironbank
-				Auckland  Auckland  1010
-				NZ
-
-2C-26-5F   (hex)		Brüel & Kjaer Vibro GmbH
-900000-9FFFFF     (base 16)		Brüel & Kjaer Vibro GmbH
-				Leydheckerstrasse 10
-				Darmstadt  Hessen  64293
-				DE
-
-2C-26-5F   (hex)		E Core Corporation
-D00000-DFFFFF     (base 16)		E Core Corporation
-				2F., No.15, Yijiang St., Zhongshan Dist.,
-				Taipie  Taiwan  10456
-				TW
-
-0C-EF-AF   (hex)		Syntrans AB
-700000-7FFFFF     (base 16)		Syntrans AB
-				Teknikringen 4C
-				Linkoping    SE-58330
-				SE
-
-0C-EF-AF   (hex)		Infinisource Inc.
-E00000-EFFFFF     (base 16)		Infinisource Inc.
-				9350 South 150 East
-				Sandy  UT  84070
-				US
-
-0C-EF-AF   (hex)		CJSC «Svyaz Engineering»
-D00000-DFFFFF     (base 16)		CJSC «Svyaz Engineering»
-				6th Radialnaya, 9
-				  Moscow  115404
-				
-
-A4-4F-29   (hex)		Shenzhen Huadoo Bright Group Limitied
-C00000-CFFFFF     (base 16)		Shenzhen Huadoo Bright Group Limitied
-				Room 13E, Jinsong Buiding, Tai ran 4th Rood, Chegong Miao,Futian Distrct
-				Shenzhen  Guangdong  51800
-				CN
-
-F8-02-78   (hex)		EMBUX Technology Co., Ltd.
-800000-8FFFFF     (base 16)		EMBUX Technology Co., Ltd.
-				11F, 657, Bannan Road
-				New Taipei City  New Taipei City  235
-				TW
-
-F8-02-78   (hex)		Witium Co., Ltd
-600000-6FFFFF     (base 16)		Witium Co., Ltd
-				Room 605A, E Building, NO.7001 Zhongchun Road
-				Shanghai  Shanghai  201101
-				CN
-
-3C-39-E7   (hex)		Hannstar Display Corp
-000000-0FFFFF     (base 16)		Hannstar Display Corp
-				4F., No.15, Ln. 168, Xingshan Rd.,
-				 Taipei  Taiwan (R.O.C.)  11469
-				TW
-
-10-07-23   (hex)		TESSERA TECHNOLOGY INC.
-A00000-AFFFFF     (base 16)		TESSERA TECHNOLOGY INC.
-				2710-1 4F, Noborito, Tama-ku
-				Kawasaki-shi  Kanagawa  214-0014
-				JP
-
-A4-4F-29   (hex)		Certi Networks Sdn Bhd
-900000-9FFFFF     (base 16)		Certi Networks Sdn Bhd
-				2-8 Level 8 Wisma Manjalara
-				Kuala Lumpur  Wilayah Persekutuan Kuala Lumpur  52200
-				MY
-
-3C-39-E7   (hex)		MARPOSS SPA
-E00000-EFFFFF     (base 16)		MARPOSS SPA
-				VIA SALICETO 13
-				BENTIVOGLIO  BOLOGNA  40010
-				IT
-
-A4-4F-29   (hex)		Protean Payment
-700000-7FFFFF     (base 16)		Protean Payment
-				617 Detroit St
-				Ann Arbor  Michigan  48104
-				US
-
-A4-4F-29   (hex)		Innovations in Optics, Inc.
-800000-8FFFFF     (base 16)		Innovations in Optics, Inc.
-				82 Cummings Park
-				Woburn  MA  01801
-				US
-
-10-07-23   (hex)		Wireless input technology Inc.
-900000-9FFFFF     (base 16)		Wireless input technology Inc.
-				34339 N. Bobolink Trail
-				Grayslake  IL  60030
-				US
-
-3C-39-E7   (hex)		RO.VE.R. Laboratories S.p.A
-600000-6FFFFF     (base 16)		RO.VE.R. Laboratories S.p.A
-				Via Parini 2/4
-				Colombare di SIrmione  BS  25019
-				IT
-
-10-07-23   (hex)		Tongfang computer co.Ltd.
-300000-3FFFFF     (base 16)		Tongfang computer co.Ltd.
-				F8 building 2, 2nd section, Gaoxinqi strategic emerging industry part, liuxian 1st Rd. the 67 district, Bao an district, shenzhen, china
-				shenzhen  guangdong  518100
-				CN
-
-D0-22-12   (hex)		SHENZHEN ZHONGXI SECURITY CO.,LTD
-D00000-DFFFFF     (base 16)		SHENZHEN ZHONGXI SECURITY CO.,LTD
-				2F,East 420Building,Bagua 3rd, Futian, Shenzhen
-				shenzhen  guangdong  ZIP
-				CN
-
-E8-18-63   (hex)		Shenzhen Hipad Telecommunication Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Shenzhen Hipad Telecommunication Technology Co.,Ltd
-				Room 502-503,Building C3 ,Kexing Science Park,Sci-Tech.Park(M.Zone),Nanshan District,Shenzhen
-				Shenzhen  Guangdong  518000
-				CN
-
-10-07-23   (hex)		Audio Engineering Ltd.
-400000-4FFFFF     (base 16)		Audio Engineering Ltd.
-				75 Parnell Rise
-				Auckland    1052
-				NZ
-
-E8-18-63   (hex)		WETEK ELECTRONICS LIMITED
-500000-5FFFFF     (base 16)		WETEK ELECTRONICS LIMITED
-				#604, TOWER A NEW TRADE PLAZA
-				HONG KONG  HONG KONG  999077
-				HK
-
-E8-18-63   (hex)		DIGITAL DYNAMICS, INC.
-D00000-DFFFFF     (base 16)		DIGITAL DYNAMICS, INC.
-				5 VICTOR SQUARE
-				SCOTTS VALLEY  CA.  95066
-				US
-
-74-E1-4A   (hex)		Wuhan Shenghong Laser Projection Technology Co.,LTD
-C00000-CFFFFF     (base 16)		Wuhan Shenghong Laser Projection Technology Co.,LTD
-				Room 403,Tower A11,Optical valley software Park,No.1 GuanShan first Road,East lake development Zone
-				Wuhan  Hubei  430000
-				CN
-
-74-E1-4A   (hex)		Diamond Kinetics
-E00000-EFFFFF     (base 16)		Diamond Kinetics
-				700 River Ave., Suite 318
-				Pittsburgh  PA  15212
-				US
-
-74-E1-4A   (hex)		KLIMAT SOLEC Sp. z o.o.
-200000-2FFFFF     (base 16)		KLIMAT SOLEC Sp. z o.o.
-				Nadborna 2a
-				Solec Kujawski  Kujawsko-Pomorskie  86-050
-				PL
-
-74-E1-4A   (hex)		Altenburger Electronic GmbH
-000000-0FFFFF     (base 16)		Altenburger Electronic GmbH
-				Schlossweg 5
-				Seelbach  BW  77960
-				DE
-
-74-E1-4A   (hex)		Cerevo Inc.
-100000-1FFFFF     (base 16)		Cerevo Inc.
-				River-side-seven bldg. 3F, 2-7-9, Sotokanda
-				Tiyoda  Tokyo  101-0021
-				JP
-
-74-E1-4A   (hex)		Emerging Technology (Holdings) Ltd.
-600000-6FFFFF     (base 16)		Emerging Technology (Holdings) Ltd.
-				17/F, C-Bons International Center, 108 Wai Yip Street,
-				Hong Kong  Hong Kong  Hong Kong
-				CN
-
-B8-D8-12   (hex)		Neuropace Inc.
-700000-7FFFFF     (base 16)		Neuropace Inc.
-				455 N Bernardo Ave
-				Mountain View  California  94043
-				US
-
-BC-66-41   (hex)		Shenzhen General Measure Technology Co., Ltd
-900000-9FFFFF     (base 16)		Shenzhen General Measure Technology Co., Ltd
-				4th Floor, No.6 Block Science&Technologt Industrial Park of Privately Owned Enterprises
-				Shenzhen  Guangdong  518000
-				CN
-
-BC-66-41   (hex)		Scientific Games
-500000-5FFFFF     (base 16)		Scientific Games
-				1500 Bluegrass Lakes Parkway
-				Alpharetta  GA  30004
-				US
-
-E4-95-6E   (hex)		Shanghai Hoping Technology Co., Ltd.
-200000-2FFFFF     (base 16)		Shanghai Hoping Technology Co., Ltd.
-				Room 224, Building 3, No.99
-				  Shanghai  201210
-				CN
-
-BC-66-41   (hex)		Solectria Renewables, LLC
-300000-3FFFFF     (base 16)		Solectria Renewables, LLC
-				360 Merrimack St.
-				Lawrence  MA  01843
-				US
-
-E4-95-6E   (hex)		SHENZHEN JOYETECH ELECTRONICS CO., LTD.
-600000-6FFFFF     (base 16)		SHENZHEN JOYETECH ELECTRONICS CO., LTD.
-				9th Blvd.Changxing New Tech.Industry Zone,Shajing Town,Baoan District
-				shenzhen  Guangdong  518104
-				CN
-
-58-FC-DB   (hex)		Shanghai Qianjin Electronic Equipment Co. Ltd
-800000-8FFFFF     (base 16)		Shanghai Qianjin Electronic Equipment Co. Ltd
-				 4/F,Building No.2,401 Caobao Road
-				  Shanghai  200233
-				
-
-58-FC-DB   (hex)		Shenzhen Siecom Communication Technology Development Co.,Ltd.
-500000-5FFFFF     (base 16)		Shenzhen Siecom Communication Technology Development Co.,Ltd.
-				Wanwei building401 ,Industry 5th Road
-				Shenzhen  Guangdong  518067
-				CN
-
-58-FC-DB   (hex)		Excenon Mobile Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Excenon Mobile Technology Co., Ltd.
-				5th Floor, Building 1, Software Park, Kejizhong 2nd Rd, High-Tech Zone, Nanshan
-				Shenzhen  Guangdong  518000
-				CN
-
-B0-1F-81   (hex)		Advanced & Wise Technology Corp.
-E00000-EFFFFF     (base 16)		Advanced & Wise Technology Corp.
-				5F, No. 3-2, Industry East 9th Road, Hsinchu Science Park,
-				Hsinchu City  Hsinchu  30075
-				TW
-
-58-FC-DB   (hex)		Custom Biogenic Systems
-300000-3FFFFF     (base 16)		Custom Biogenic Systems
-				74100 Van Dyke Road
-				MI  Michigan  48065
-				US
-
-B0-1F-81   (hex)		Technion Oy
-800000-8FFFFF     (base 16)		Technion Oy
-				Linkkikatu 15
-				Naantali  Länsi-Suomi  21100
-				FI
-
-B0-1F-81   (hex)		COMOTA Co., Ltd.
-600000-6FFFFF     (base 16)		COMOTA Co., Ltd.
-				Queens Tower C 10F
-				Yokohama  Kanagawa  220-6210
-				JP
-
-BC-66-41   (hex)		InSync Technology Ltd
-000000-0FFFFF     (base 16)		InSync Technology Ltd
-				Tilbrook House
-				Petersfield  Hampshire  GU31 4AZ
-				GB
-
-58-FC-DB   (hex)		Certis Technology International
-100000-1FFFFF     (base 16)		Certis Technology International
-				Certis CISCO
-				  Singapore  409179
-				
-
-B0-1F-81   (hex)		Uvax Concepts
-100000-1FFFFF     (base 16)		Uvax Concepts
-				Calle Corretger 71-2
-				Paterna  Other  46980
-				ES
-
-B0-1F-81   (hex)		Dalian GigaTec Electronics Co.,Ltd
-000000-0FFFFF     (base 16)		Dalian GigaTec Electronics Co.,Ltd
-				No.3 Kehai Street, Hi-Tech Zone
-				Dalian  Liao Ning  116023
-				CN
-
-F4-0E-11   (hex)		DXG Technology Corp.
-D00000-DFFFFF     (base 16)		DXG Technology Corp.
-				15FL.,NO.4,SEC.3,
-				Taipei    10477
-				TW
-
-F4-0E-11   (hex)		Dayang Technology Development Inc.
-400000-4FFFFF     (base 16)		Dayang Technology Development Inc.
-				Dayang Building
-				Haidian District  Beijing  100193
-				CN
-
-14-1F-BA   (hex)		Black Moth Technologies
-900000-9FFFFF     (base 16)		Black Moth Technologies
-				17 Waverley St
-				Annerley  Queensland  4103
-				AU
-
-7C-70-BC   (hex)		Lukup Media
-C00000-CFFFFF     (base 16)		Lukup Media
-				25/2 Norris Road
-				Bangalore  Karnataka  560025
-				IN
-
-7C-70-BC   (hex)		dogtra
-900000-9FFFFF     (base 16)		dogtra
-				35, Namdongdong-ro 33beon-gil, Namdong-gu, Incheon,
-				Seoul    KS006
-				KR
-
-14-1F-BA   (hex)		Deutsche Energieversorgung GmbH
-200000-2FFFFF     (base 16)		Deutsche Energieversorgung GmbH
-				Am Schenkberg 12
-				Leipzig  Bundesland / Region wählen  04349
-				DE
-
-7C-70-BC   (hex)		HOPERUN MMAX DIGITAL PTE. LTD.
-E00000-EFFFFF     (base 16)		HOPERUN MMAX DIGITAL PTE. LTD.
-				152 BEACH ROAD
-				  SINGAPORE  189721
-				SG
-
-7C-70-BC   (hex)		Mennekes Elektrotechnik GmbH & Co. KG
-800000-8FFFFF     (base 16)		Mennekes Elektrotechnik GmbH & Co. KG
-				Aloys-Mennekes-Str. 1
-				Kirchhundem  NRW  57399
-				DE
-
-7C-70-BC   (hex)		Canary Connect, Inc.
-500000-5FFFFF     (base 16)		Canary Connect, Inc.
-				132 East 43rd Street
-				New York  NY  10017
-				US
-
-BC-34-00   (hex)		Dexcel Design Pvt Ltd
-400000-4FFFFF     (base 16)		Dexcel Design Pvt Ltd
-				#138, Level 3,4 - Maruthi Tower
-				Bangalore  Karnataka  560008
-				IN
-
-7C-70-BC   (hex)		Digital Lumens
-200000-2FFFFF     (base 16)		Digital Lumens
-				374 Congress Street, 6th Floor
-				Boston  MA  02210
-				US
-
-A4-3B-FA   (hex)		JSC “Component-ASU”
-D00000-DFFFFF     (base 16)		JSC “Component-ASU”
-				Severnyi proezd 1, k. 5/6
-				Chernogolovka  Moscow Region  142432
-				
-
-A4-3B-FA   (hex)		Maxon Australia
-400000-4FFFFF     (base 16)		Maxon Australia
-				36a Gibson Ave
-				Padstow  New South Wales  2211
-				AU
-
-D0-76-50   (hex)		Revox Inc.
-E00000-EFFFFF     (base 16)		Revox Inc.
-				1880-2 Kamimizo, Chuo-ku,
-				Sagamihara  Kanagawa  252-0243
-				JP
-
-A4-3B-FA   (hex)		Alpwise
-800000-8FFFFF     (base 16)		Alpwise
-				4 avenue Louis Doyen Weil
-				Grenoble  Rhône-Alpes  38000
-				FR
-
-D0-76-50   (hex)		Picobrew LLC
-600000-6FFFFF     (base 16)		Picobrew LLC
-				2121 N 35th Street
-				Seattle  WA  98103
-				US
-
-74-19-F8   (hex)		Ansjer Electronics Co., Ltd.
-D00000-DFFFFF     (base 16)		Ansjer Electronics Co., Ltd.
-				4 Bldg., Pinglan Indl. Park, Nanping,
-				Zhuhai  Guangdong  519060
-				CN
-
-D0-76-50   (hex)		Annapurna Labs
-500000-5FFFFF     (base 16)		Annapurna Labs
-				1830 The Alameda
-				San Jose  California  95126
-				US
-
-40-11-75   (hex)		BWT Tianjin Ltd.
-A00000-AFFFFF     (base 16)		BWT Tianjin Ltd.
-				1st Floor ,C Block,NO.225,Jinger Road ,Konggang Economic District,Tianjin 300308 ,China
-				Tianjin    300000
-				CN
-
-4C-4B-F9   (hex)		Shenzhen Haichuan Intelligent Information Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		Shenzhen Haichuan Intelligent Information Technology Co., Ltd.
-				1208 District B,Jinhui Building, 2079 Nanhai Avenue,Dengliang Community,Nanshan Street,Nanshan District
-				Shenzhen  Guangdong  518101
-				CN
-
-54-A4-93   (hex)		Advice
-B00000-BFFFFF     (base 16)		Advice
-				16 Atir Yeda St
-				Kfar Saba  Not applicable  4464321
-				IL
-
-10-DC-B6   (hex)		Private
-000000-0FFFFF     (base 16)		Private
-
-54-A4-93   (hex)		Wonders Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		Wonders Technology Co., Ltd.
-				4/F,Tower A,3rd Building,Tian'an Cloud Park,Bantian Avenue,Longgang District
-				Shenzhen    518129
-				CN
-
-04-D1-6E   (hex)		s.d.i. s.p.a.
-200000-2FFFFF     (base 16)		s.d.i. s.p.a.
-				Edison, 10
-				Trezzano sul Naviglio  Milano  20090
-				IT
-
-04-D1-6E   (hex)		FUZHOU ZHUOYI ELECTRONIC CO.,LTD
-900000-9FFFFF     (base 16)		FUZHOU ZHUOYI ELECTRONIC CO.,LTD
-				NO.22 BAIHUAZHOU ROAD,FUZHOU,FUJIAN,CHINA
-				FUZHOU  FUJIAN  350008
-				CN
-
-54-A4-93   (hex)		Do Easy International Limited
-900000-9FFFFF     (base 16)		Do Easy International Limited
-				No. 107, Wenjian St., Fengshan Dist.
-				Kaohsiung    83067
-				TW
-
-54-A4-93   (hex)		RED Hydrogen LLC
-700000-7FFFFF     (base 16)		RED Hydrogen LLC
-				15 Cushing
-				IRVINE  CA  92618
-				US
-
-44-03-77   (hex)		Norden Communication UK Ltd.
-500000-5FFFFF     (base 16)		Norden Communication UK Ltd.
-				Unit-13, Baker Close, Oakwood Business Park
-				Clacton-On-Sea  Essex  CO15 4BD
-				GB
-
-44-03-77   (hex)		symplr
-A00000-AFFFFF     (base 16)		symplr
-				1550 Innovation Way
-				Hartford  WI  53027
-				US
-
-44-03-77   (hex)		Musashi Seimitsu Industry Co.,Ltd
-000000-0FFFFF     (base 16)		Musashi Seimitsu Industry Co.,Ltd
-				39-5 Daizen,Ueta-cho
-				Toyohashi  Aichi  441-8560
-				JP
-
-44-03-77   (hex)		Annapurna labs
-300000-3FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-50-62-55   (hex)		CCTV Manufacturer
-A00000-AFFFFF     (base 16)		CCTV Manufacturer
-				Room 1807,Bagua 4 Rd,Futian District
-				Shenzhen  Guangdong  518029
-				CN
-
-50-62-55   (hex)		Roda industrial development Co.,Ltd.
-800000-8FFFFF     (base 16)		Roda industrial development Co.,Ltd.
-				2-3F,Building C,Unistar Park,GenYu Road,GuangMing New District
-				Shenzhen    518000
-				CN
-
-50-62-55   (hex)		Hagiwara Solutions Co., Ltd 
-100000-1FFFFF     (base 16)		Hagiwara Solutions Co., Ltd 
-				7F, Sakae TV BLD, 3-10-32, Nishiki, Naka-ku,
-				Nagoya City  Aichi Prefecture  460-0003
-				JP
-
-64-31-39   (hex)		Shenzhen He&e Technology Co.,Ltd.
-500000-5FFFFF     (base 16)		Shenzhen He&e Technology Co.,Ltd.
-				2nd Floor, Building A7, Shenzhen Low Carbon Technology Demonstration Park, Silicon Valley Power, Guiyue Road, Guanlan Street, Longhua District, Shenzhen, China
-				ShenZhen    518100
-				CN
-
-64-31-39   (hex)		Shenzhen Huanyin Electronics Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Huanyin Electronics Ltd.
-				Room 1707, 17/F, West Block, Nanshan Digital Culture Industrial Base, Nanshan District
-				Shenzhen  Guangdong  519052
-				CN
-
-64-31-39   (hex)		Product Development Associates, Inc.
-A00000-AFFFFF     (base 16)		Product Development Associates, Inc.
-				1145 E. Cliff Rd
-				Burnsville  MN  55337
-				US
-
-C4-95-4D   (hex)		Newland Era Edu Hi-Tech(BeiJing)Co.,Ltd
-D00000-DFFFFF     (base 16)		Newland Era Edu Hi-Tech(BeiJing)Co.,Ltd
-				No. 1, Linkong 2 Road,North Wenhuaying Village, Gaoliying Town, Shunyi District, Beijing
-				Beijing    101303
-				CN
-
-64-31-39   (hex)		Smartplus Inc.
-200000-2FFFFF     (base 16)		Smartplus Inc.
-				415 steelcase road east
-				markham  Ontario  L3R1G3
-				CA
-
-C4-95-4D   (hex)		Multicom, Inc
-B00000-BFFFFF     (base 16)		Multicom, Inc
-				1076 Florida Central Parkway
-				Longwood  FL  32750
-				US
-
-00-69-67   (hex)		PANGAEA SOLUTION INC
-700000-7FFFFF     (base 16)		PANGAEA SOLUTION INC
-				774, Yuseong-daero, Yuseong-gu, 
-				Daejeon  Daejeon  34171
-				KR
-
-00-69-67   (hex)		Command Alkon, Inc
-400000-4FFFFF     (base 16)		Command Alkon, Inc
-				1800 International Park Dr., Ste 400
-				Birmingham  AL  35243
-				US
-
-C4-95-4D   (hex)		Canare Electric Co., Ltd.
-E00000-EFFFFF     (base 16)		Canare Electric Co., Ltd.
-				B-13F,Shiba Park Bldg.,2-4-1,Shiba-Koen
-				Minato  Tokyo  105-0011
-				JP
-
-00-69-67   (hex)		Desird Design R&D
-C00000-CFFFFF     (base 16)		Desird Design R&D
-				Mehmetçik Mahallesi Aspendos Bulvar? No:99A Muratpa?a/ANTALYA
-				Antalya    07300
-				TR
-
-A0-22-4E   (hex)		Kyung In Electronics
-000000-0FFFFF     (base 16)		Kyung In Electronics
-				#1411, Byucksan Digital Valley 2, 184, Gasan Digital2-ro, Geumcheon-gu
-				 Seoul    08501
-				KR
-
-A0-22-4E   (hex)		EISST  International Ltd
-800000-8FFFFF     (base 16)		EISST  International Ltd
-				10 Queen Street Place
-				London  London  EC4R 1AG
-				GB
-
-20-0A-0D   (hex)		Wideband Systems, Inc.
-100000-1FFFFF     (base 16)		Wideband Systems, Inc.
-				11900 Bournefield Way STE 120
-				Silver Spring  MD  20904
-				US
-
-20-0A-0D   (hex)		sehwa
-C00000-CFFFFF     (base 16)		sehwa
-				231, Techno 2-ro, Yuseong-gu, Daejeon, Republic of Korea
-				Daejeon  Daejeon  34026
-				KR
-
-20-0A-0D   (hex)		Shenzhen Zhangyue Technology Co.,Ltd 
-500000-5FFFFF     (base 16)		Shenzhen Zhangyue Technology Co.,Ltd 
-				Nanshan District Yuehai Street Weixin Software Science Park Building 8 9th Floor Room 903
-				Shenzhen  Guangdong  518500
-				CN
-
-40-2C-76   (hex)		Guangzhou Qi'an Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		Guangzhou Qi'an Technology Co., Ltd.
-				No. 3, Dasonggang, Jiangnan Avenue Middle Road, Haizhu District, Guangzhou (office only)
-				Guangzhou  Guangdong  510220
-				CN
-
-40-2C-76   (hex)		Beijing Kuaiyu Electronic Co., Ltd.
-B00000-BFFFFF     (base 16)		Beijing Kuaiyu Electronic Co., Ltd.
-				Kuaiyu Technologies, Building 11, Yuquan Huigu, Tsinghua Science Park, No. 3 Minzhuang Road, Haidian District, Beijing
-				Beijing    100195
-				CN
-
-50-DE-19   (hex)		Langogo Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Langogo Technology Co., Ltd.
-				 2/F, Boxun Building, Keyuan North Road, Nanshan District
-				Shenzhen  Guangdong  518103
-				CN
-
-3C-FA-D3   (hex)		GRG Banking Technology Co.,Ltd
-400000-4FFFFF     (base 16)		GRG Banking Technology Co.,Ltd
-				232 Gaotang Road,Tianhe District
-				Guangzhou  Guangdong  510000
-				CN
-
-3C-FA-D3   (hex)		UltiMachine
-A00000-AFFFFF     (base 16)		UltiMachine
-				200 12th St. N.
-				South Pittsburg  TN  37380
-				US
-
-3C-FA-D3   (hex)		Harman Connected Services, Inc.
-300000-3FFFFF     (base 16)		Harman Connected Services, Inc.
-				636 Ellis Street Mountain View
-				New York  CA  10003
-				US
-
-B0-B3-53   (hex)		Rizhao SUNWAM International Co., Ltd.
-200000-2FFFFF     (base 16)		Rizhao SUNWAM International Co., Ltd.
-				No.001-00-114, Ruiyuan Mingcheng, Haiqu Zhong Road
-				Rizhao  Shandong  276800
-				CN
-
-B0-B3-53   (hex)		Ledger
-A00000-AFFFFF     (base 16)		Ledger
-				1 rue du mail
-				Paris    75002
-				FR
-
-14-AE-85   (hex)		Trimble LEM
-800000-8FFFFF     (base 16)		Trimble LEM
-				10368 Westmoor Dr
-				Westminster  CO  80021
-				US
-
-14-AE-85   (hex)		Kayamatics Limited
-000000-0FFFFF     (base 16)		Kayamatics Limited
-				Room 1209, Trend Centre, 29 Cheung Lee Street
-				Chaiwan  NA  NA
-				HK
-
-64-62-66   (hex)		Shenzhen C & D Electronics Co., Ltd.
-700000-7FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-64-62-66   (hex)		Signal Hound
-B00000-BFFFFF     (base 16)		Signal Hound
-				1502 SE Commerce Ave Suite 101
-				Battle Ground  WA  98604
-				US
-
-64-62-66   (hex)		Chunghwa System Integration Co., Ltd.
-900000-9FFFFF     (base 16)		Chunghwa System Integration Co., Ltd.
-				2F., No. 35, Aiguo E. Rd.,
-				Taipei    106
-				TW
-
-64-62-66   (hex)		Protectli
-200000-2FFFFF     (base 16)		Protectli
-				1315 Hot Springs Way
-				Vista  CA  92081
-				US
-
-64-62-66   (hex)		Redstone Systems, Inc.
-400000-4FFFFF     (base 16)		Redstone Systems, Inc.
-				24 School Street, 2nd floor
-				Boston    02108
-				US
-
-64-62-66   (hex)		Kobol Innovations Pte. Ltd.
-D00000-DFFFFF     (base 16)		Kobol Innovations Pte. Ltd.
-				101 Cecil Street, #26-01/07 Tong Eng Building
-				Singapore    069533
-				SG
-
-94-05-BB   (hex)		AUSTAR HEARING SCIENCE AND TECHNILIGY(XIAMEN)CO.,LTD
-B00000-BFFFFF     (base 16)		AUSTAR HEARING SCIENCE AND TECHNILIGY(XIAMEN)CO.,LTD
-				RM201,No.2Gaoqi South 12th Road,HuliDist
-				XIamen  Fujian  361006
-				CN
-
-94-05-BB   (hex)		LAO INDUSTRIA LTDA
-C00000-CFFFFF     (base 16)		LAO INDUSTRIA LTDA
-				AV DR MAURO LINDENBERG MONTEIRO, 1003
-				OSASCO  SÃO PAULO  06278010
-				BR
-
-F4-90-CB   (hex)		Avilution
-500000-5FFFFF     (base 16)		Avilution
-				103 Shoreline Dr
-				Madison  AL  35758
-				US
-
-F4-90-CB   (hex)		OmniNet
-400000-4FFFFF     (base 16)		OmniNet
-				6410 Del Rio Rd
-				Charlotte  NC  28277
-				US
-
-F4-90-CB   (hex)		Epitel, Inc.
-000000-0FFFFF     (base 16)		Epitel, Inc.
-				630 S. Stringfellow Ct., Unit #B
-				Salt Lake City  UT  84111
-				US
-
-F4-90-CB   (hex)		Fractyl Labs
-900000-9FFFFF     (base 16)		Fractyl Labs
-				17 HARTWELL AVE
-				LEXINGTON  MA  02421
-				US
-
-C0-9B-F4   (hex)		JSC NPK ATRONIK
-400000-4FFFFF     (base 16)		JSC NPK ATRONIK
-				VARSHAVSKOE SH, 118-1-P XLII K4 10
-				Moscow  Moscow  117587
-				RU
-
-C0-9B-F4   (hex)		Pinpark Inc.
-C00000-CFFFFF     (base 16)		Pinpark Inc.
-				9F., No. 101, Sec. 2, Nanjing E. Rd.,, Zhongshan Dist.,
-				Taipei  Taiwan  104
-				TW
-
-C0-9B-F4   (hex)		NUCTECH COMPANY LIMITED
-B00000-BFFFFF     (base 16)		NUCTECH COMPANY LIMITED
-				 2/F Block A,Tongfang Building,Shuangqinglu,Haidian District
-				Beijing  Beijing  100084
-				CN
-
-C0-9B-F4   (hex)		Osprey Video, Inc
-300000-3FFFFF     (base 16)		Osprey Video, Inc
-				1628 Valwood Parkway Suite 200
-				Carrollton  TX  75006
-				US
-
-E8-B4-70   (hex)		internet domain name system beijing engineering research center ltd
-200000-2FFFFF     (base 16)		internet domain name system beijing engineering research center ltd
-				4,4TH SOUTH STREET ZHONG GUAN CUN
-				hai dian qu ,beijing  BEIJING  100190
-				CN
-
-E8-B4-70   (hex)		DongGuan Ramaxel Memory Technology
-000000-0FFFFF     (base 16)		DongGuan Ramaxel Memory Technology
-				No.32, Industrial East Road,Innovation Park, High-tech Industrial Development Zone, Songshan Lake, Dongguan City, Guangdong Province,China
-				DongGuan  Guangdong  523808
-				CN
-
-C0-9B-F4   (hex)		Infiot Inc.
-500000-5FFFFF     (base 16)		Infiot Inc.
-				75 E. Santa Clara St., Suite 600
-				San Jose  CA  95113
-				US
-
-E8-B4-70   (hex)		plc2 Design GmbH
-A00000-AFFFFF     (base 16)		plc2 Design GmbH
-				Hugstmattweg 30
-				Freiburg i. Br.    79112
-				DE
-
-E8-B4-70   (hex)		Miltek Industries Pte Ltd
-900000-9FFFFF     (base 16)		Miltek Industries Pte Ltd
-				62 Ubi Road 1 #10-03, Oxley Bizhub 2. Singapore 408734
-				Singapore    408734
-				SG
-
-E8-B4-70   (hex)		DEHN SE + Co KG
-800000-8FFFFF     (base 16)		DEHN SE + Co KG
-				Hans-Dehn-Straße 1
-				Neumarkt  Bavaria  92318
-				DE
-
-E8-B4-70   (hex)		Alperia Fiber srl 
-500000-5FFFFF     (base 16)		Alperia Fiber srl 
-				Via Dodiciville 8
-				Bolzano   bz  39100
-				IT
-
-E8-B4-70   (hex)		Elcoma
-600000-6FFFFF     (base 16)		Elcoma
-				Rua Barbosa Lima, 149
-				Recife  Pernambuco  50030-330
-				BR
-
-38-F7-CD   (hex)		APT MOBILE SATCOM LIMITED
-E00000-EFFFFF     (base 16)		APT MOBILE SATCOM LIMITED
-				18th Floor, Building C, Shenye U Center, Zhoushi Road, Baoan District
-				Shenzhen  Guangdong  518000
-				CN
-
-70-69-79   (hex)		Linksys Telecom Shenzhen CO., LTD
-100000-1FFFFF     (base 16)		Linksys Telecom Shenzhen CO., LTD
-				RoomC303-A, Number 2223 road Banxuegang Xinweizai Gangtou Community Bantian street
-				Longgang Township  Guangdong  514349
-				CN
-
-70-69-79   (hex)		FREUND ELEKTRONIKA D.O.O., IP-INTEGRA TECHNOLOGIES
-D00000-DFFFFF     (base 16)		FREUND ELEKTRONIKA D.O.O., IP-INTEGRA TECHNOLOGIES
-				HAMDIJE KRESEVLJAKOVICA 18
-				SARAJEVO    71000
-				BA
-
-CC-C2-61   (hex)		Nortek Security & Control
-C00000-CFFFFF     (base 16)		Nortek Security & Control
-				5919 Sea Otter Place
-				Carlsbad  CA  92010
-				US
-
-CC-C2-61   (hex)		Guardiar USA
-600000-6FFFFF     (base 16)		Guardiar USA
-				3309 S Kaufman St
-				Ennis  TX  75119
-				US
-
-CC-C2-61   (hex)		Winterthur Gas & Diesel Ltd.
-B00000-BFFFFF     (base 16)		Winterthur Gas & Diesel Ltd.
-				Schützenstrasse 3
-				Winterthur    8401
-				CH
-
-CC-C2-61   (hex)		NETRADYNE, INC.
-300000-3FFFFF     (base 16)		NETRADYNE, INC.
-				9191 TOWNE CENTRE DR STE 200
-				SAN DIEGO  CA  92122
-				US
-
-CC-C2-61   (hex)		NWL Inc.
-100000-1FFFFF     (base 16)		NWL Inc.
-				312 Rising Sun Road
-				Bordentown  NJ  08505
-				US
-
-F0-D7-AF   (hex)		New IT Project LLC
-900000-9FFFFF     (base 16)		New IT Project LLC
-				Nagatinskaya St. 16, bld. 9, space VII, room 15, office 5
-				Moscow    115487
-				RU
-
-F0-D7-AF   (hex)		Dongguan Huili electroacoustic Industrial Co.,ltd
-500000-5FFFFF     (base 16)		Dongguan Huili electroacoustic Industrial Co.,ltd
-				Dalang Town, Biyun Cai Bai Cun East Second Street 66,A4 Building 501
-				Dongguan  Guangdong  523770
-				CN
-
-F0-D7-AF   (hex)		Blacknight Internet Solutions Limited
-200000-2FFFFF     (base 16)		Blacknight Internet Solutions Limited
-				Unit 12a, Barrowside Business Park, Sleaty Rd.
-				Carlow  Carlow  R93 X265
-				IE
-
-F0-D7-AF   (hex)		MSTAR TECHNOLOGIES,INC
-A00000-AFFFFF     (base 16)		MSTAR TECHNOLOGIES,INC
-				#998 West Wenyi Road
-				Hangzhou  Zhejiang  310012
-				CN
-
-30-49-50   (hex)		SHENZHEN LDROBOT CO., LTD.
-800000-8FFFFF     (base 16)		SHENZHEN LDROBOT CO., LTD.
-				Nanshan
-				Shenzhen    518000
-				CN
-
-D0-14-11   (hex)		Video Security, Inc.
-800000-8FFFFF     (base 16)		Video Security, Inc.
-				No. 59, Cinghua St. San Min Dist.
-				Kaohsiung, Taiwan, R.O.C.  Kaohsiung City  807
-				TW
-
-D0-14-11   (hex)		Realwave Inc.
-700000-7FFFFF     (base 16)		Realwave Inc.
-				5857 Owens Avenue, Suite 300
-				Carlsbad  CA  92008-5507
-				US
-
-D0-14-11   (hex)		Tecnosoft srl
-E00000-EFFFFF     (base 16)		Tecnosoft srl
-				via Galvani, 4
-				Peschiera Borromeo  Milan  20068
-				IT
-
-5C-85-7E   (hex)		BeiJing Xinsheng Technology Co.,Ltd
-800000-8FFFFF     (base 16)		BeiJing Xinsheng Technology Co.,Ltd
-				1-1827, East (LIANHANG building), chaichangtun village, Yongledian Town, Tongzhou District
-				BeiJing  BeiJing  250100
-				CN
-
-5C-85-7E   (hex)		HHCC Plant Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		HHCC Plant Technology Co., Ltd.
-				RM626, 6th Floor, Zhongguoleshili,’,#35 Xiaoyun Road, Chaoyang District,Beijing, China
-				Beijing  Beijing  100028
-				CN
-
-D0-14-11   (hex)		iLOQ Oy
-300000-3FFFFF     (base 16)		iLOQ Oy
-				Yrttipellontie 10
-				Oulu  EMEA  90230
-				FI
-
-5C-85-7E   (hex)		28 Gorilla
-000000-0FFFFF     (base 16)		28 Gorilla
-				12 S San Marcos Pl
-				Chandler  AZ  85225
-				US
-
-F4-69-D5   (hex)		Konntek Inc
-B00000-BFFFFF     (base 16)		Konntek Inc
-				3600 F-X Tessier, Unit #H
-				Vaudreuil  Quebec  J7V 5V5
-				CA
-
-F4-69-D5   (hex)		Hefei STAROT Technology Co.,Ltd
-500000-5FFFFF     (base 16)		Hefei STAROT Technology Co.,Ltd
-				406, 4th Floor, Quality Control Building, Saipu Science Park, No. 6 Yunfei Road, High-tech Zone
-				hefei  anhui  230000
-				CN
-
-F4-69-D5   (hex)		ORtek Technology, Inc.
-E00000-EFFFFF     (base 16)		ORtek Technology, Inc.
-				13F, no.150, Jian-Yi Rd., ZhongHe Dist.
-				New Taipei City  Taiwan  23511
-				TW
-
-F4-69-D5   (hex)		TianJin KCHT Information Technology Co., Ltd.
-600000-6FFFFF     (base 16)		TianJin KCHT Information Technology Co., Ltd.
-				1704 Huicheng Technology Building, No. 65 Pioneer Road, Dongli District
-				Tianjin    300000
-				CN
-
-4C-93-A6   (hex)		Felten Electronics
-B00000-BFFFFF     (base 16)		Felten Electronics
-				Wilhelmstrasse 43
-				Aachen  NRW  52070
-				DE
-
-4C-93-A6   (hex)		Advantics
-900000-9FFFFF     (base 16)		Advantics
-				55C Rue Auguste Piccard
-				Saint-Genis-Pouilly    01630
-				FR
-
-28-B7-7C   (hex)		GROTHE GmbH
-500000-5FFFFF     (base 16)		GROTHE GmbH
-				Loehestrasse 22
-				Hennef    53773
-				DE
-
-28-B7-7C   (hex)		SHENZHEN EVIEW GPS TECHNOLOGY
-000000-0FFFFF     (base 16)		SHENZHEN EVIEW GPS TECHNOLOGY
-				Rm 201, building 1-A, Nankechuang Industrial Park, Gaofeng Road, Longhua district
-				Shenzhen  Guangdong  518109
-				CN
-
-28-B7-7C   (hex)		Beijing Kitten&Puppy Technology Co.,Ltd.
-300000-3FFFFF     (base 16)		Beijing Kitten&Puppy Technology Co.,Ltd.
-				Room Q-101? Floor 2?Q Area, Anningzhuang Back Street?Haidian District
-				Beijing    100096
-				CN
-
-28-B7-7C   (hex)		Simaudio Ltd
-A00000-AFFFFF     (base 16)		Simaudio Ltd
-				1345 rue Newton
-				Boucherville  Quebec  J4B 5H2
-				CA
-
-28-B7-7C   (hex)		Vehant Technologies Pvt Ltd.
-B00000-BFFFFF     (base 16)		Vehant Technologies Pvt Ltd.
-				Plot no. 97, Ecotech-12, block-Ecotech -12, Sector-Noida Extension
-				Greater Noida  Uttar Pradesh  201310
-				IN
-
-C0-61-9A   (hex)		Victron Energy B.V.
-B00000-BFFFFF     (base 16)		Victron Energy B.V.
-				De Paal 35
-				Almere    1351JG
-				NL
-
-C0-61-9A   (hex)		Grup Arge Enerji ve Kontrol Sistemleri
-200000-2FFFFF     (base 16)		Grup Arge Enerji ve Kontrol Sistemleri
-				?kitelli OSB Mah. YTÜ ?kitelli Teknopark Sok. No:1 / 2B01-2B07-2B08-2B09
-				?stanbul  ?STANBUL  34490
-				TR
-
-C0-61-9A   (hex)		IPG Automotive GmbH
-600000-6FFFFF     (base 16)		IPG Automotive GmbH
-				Bannwaldallee 60
-				Karlsruhe    76185
-				DE
-
-98-FC-84   (hex)		Fath Mechatronics
-900000-9FFFFF     (base 16)		Fath Mechatronics
-				Hügelmühle 31
-				Spalt  bavaria  91174
-				DE
-
-98-FC-84   (hex)		Broadtech Technologies Co., Ltd.
-700000-7FFFFF     (base 16)		Broadtech Technologies Co., Ltd.
-				No. 1, Area A, 3rd Floor, Building B1, Shenzhen Digital Technology Park, No. 002, Gaoxin South Seventh Road, Nanshan District,
-				Shenzhen  GuangDong  518057
-				CN
-
-98-FC-84   (hex)		Dongguan Kingtron Electronics Tech Co., Ltd
-E00000-EFFFFF     (base 16)		Dongguan Kingtron Electronics Tech Co., Ltd
-				No.3 Fumin North Rd,Shu'an Industrial Park, Humen Town
-				Dongguan  Guangdong China  523929
-				CN
-
-18-FD-CB   (hex)		StreamLocator
-D00000-DFFFFF     (base 16)		StreamLocator
-				200-155 East Beaver Creek Rd
-				Richmond Hill  ON  L4B 2N1
-				CA
-
-18-FD-CB   (hex)		Gosuncn Technology Group Co.,LTD.
-400000-4FFFFF     (base 16)		Gosuncn Technology Group Co.,LTD.
-				6F,2819 KaiChuang Blvd.,Science Town,Huangpu District
-				Guangzhou City  Guangdong  510530
-				CN
-
-58-20-8A   (hex)		Aggregate Co.,Ltd.
-300000-3FFFFF     (base 16)		Aggregate Co.,Ltd.
-				Toso Building 4F, 1-9-8 Yayoi-cho
-				nakano-ku  tokyo  164-0013
-				JP
-
-58-20-8A   (hex)		MARS DIGI TECH CO .,LTD
-200000-2FFFFF     (base 16)		MARS DIGI TECH CO .,LTD
-				RM 2314,Build No.B2,GuiMiao Road,NanShan District
-				ShenZhen  Guangdong  518054
-				CN
-
-58-20-8A   (hex)		pureLiFi Ltd
-700000-7FFFFF     (base 16)		pureLiFi Ltd
-				Rosebery House, 9 Haymarket Terrace
-				Edinburgh    EH12 5EZ
-				GB
-
-CC-4F-5C   (hex)		Feelmore Labs
-800000-8FFFFF     (base 16)		Feelmore Labs
-				370 Jay Street, Floor 7
-				Brooklyn  NY  11201
-				US
-
-FC-CD-2F   (hex)		HEAD-DIRECT (KUNSHAN) Co. Ltd
-B00000-BFFFFF     (base 16)		HEAD-DIRECT (KUNSHAN) Co. Ltd
-				Kunshan Bacheng West Yingbing Rd. shangkunzhichuang chanyeyuan C2#
-				Suzhou  Jiangsu  215311
-				CN
-
-58-E8-76   (hex)		Zhuhai Raysharp Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Zhuhai Raysharp Technology Co.,Ltd
-				No.100 of Keji Liu Rd.6, Hi-Tech Zone
-				Zhuhai  Guangdong   519080
-				CN
-
-FC-CD-2F   (hex)		Annapurna labs
-600000-6FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-FC-CD-2F   (hex)		Asesorias y Servicios Innovaxxion SPA
-800000-8FFFFF     (base 16)		Asesorias y Servicios Innovaxxion SPA
-				Alonso de Cordova 5320, of 1403, Las condes
-				Santiago  RM  7550000
-				CL
-
-FC-CD-2F   (hex)		Suzhou lehui display co.,ltd
-700000-7FFFFF     (base 16)		Suzhou lehui display co.,ltd
-				?225 Jinfeng Road?Suzhou New District?Jiangsu Province
-				suzhou    215129
-				CN
-
-58-95-D8   (hex)		Shenzhen C & D Electronics Co., Ltd.
-800000-8FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-FC-CD-2F   (hex)		Eltek brojila d.o.o.
-E00000-EFFFFF     (base 16)		Eltek brojila d.o.o.
-				Svetice 24
-				Zagreb    10000
-				HR
-
-58-95-D8   (hex)		Tonnet Telecommunication International Co., Ltd.
-300000-3FFFFF     (base 16)		Tonnet Telecommunication International Co., Ltd.
-				10F,No.6,Ln.609,Sec.5 Chongxin Rd., Sanchong Dist.
-				New Taipei    241
-				TW
-
-58-95-D8   (hex)		Gmv sistemas SAU
-E00000-EFFFFF     (base 16)		Gmv sistemas SAU
-				C/ Juan Herrera 17 P.T.B. ,Parcela 101
-				Boecillo  Valladolid  47151 
-				ES
-
-58-95-D8   (hex)		Unity Surveillance, Inc.
-400000-4FFFFF     (base 16)		Unity Surveillance, Inc.
-				629 East Grand Ave
-				Hot Springs National Park  AR  71901
-				US
-
-DC-4A-9E   (hex)		ADIAL
-400000-4FFFFF     (base 16)		ADIAL
-				87 Rue Alexandre Fleming
-				LISIEUX    14100
-				FR
-
-DC-4A-9E   (hex)		Advanced Electronics Ltd
-100000-1FFFFF     (base 16)		Advanced Electronics Ltd
-				Balliol Business Park
-				Newcastle    NE12 8EW
-				GB
-
-DC-4A-9E   (hex)		SES-imagotag Deutschland GmbH
-E00000-EFFFFF     (base 16)		SES-imagotag Deutschland GmbH
-				Bundesstrasse 16
-				Ettenheim  BW  77955
-				DE
-
-DC-4A-9E   (hex)		HEFEI DATANG STORAGE TECHNOLOGY CO.,LTD
-C00000-CFFFFF     (base 16)		HEFEI DATANG STORAGE TECHNOLOGY CO.,LTD
-				7F BLOCK C J2 BUILDING INNOVATION PARK HIGH TECH DISTRICT
-				HEFEI  AN HUI PROVINCE PR CHINA  220038
-				CN
-
-84-11-C2   (hex)		igus GmbH
-A00000-AFFFFF     (base 16)		igus GmbH
-				Spicher Str. 1a
-				Köln    51147
-				DE
-
-68-79-12   (hex)		Neurolab
-D00000-DFFFFF     (base 16)		Neurolab
-				Naberezhnaya Shlyuzovaya, d. 6, str. 3, et. 3, pom. 1
-				Moscow  -  115114
-				RU
-
-84-11-C2   (hex)		KESSEL AG
-600000-6FFFFF     (base 16)		KESSEL AG
-				Bahnhofstraße 31
-				Lenting    85101
-				DE
-
-68-79-12   (hex)		Annapurna labs
-100000-1FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-68-79-12   (hex)		McDonald's Corporation
-400000-4FFFFF     (base 16)		McDonald's Corporation
-				110 N. Carpenter Street
-				Chicago    60607
-				US
-
-8C-47-6E   (hex)		Oxford Nanopore Technologies Ltd.
-600000-6FFFFF     (base 16)		Oxford Nanopore Technologies Ltd.
-				Gosling Building, Edmund Halley Road, Oxford Science Park
-				Oxford  Oxfordshire  OX4 4DQ
-				GB
-
-8C-47-6E   (hex)		innolectric AG
-D00000-DFFFFF     (base 16)		innolectric AG
-				Universitaetsstr. 136
-				Bochum    44799 
-				DE
-
-C0-61-9A   (hex)		Stello
-400000-4FFFFF     (base 16)		Stello
-				9995 Rue de Châteauneuf (Local V)
-				Brossard  Quebec  J4Z 3V7
-				CA
-
-8C-AE-49   (hex)		Larch Networks
-D00000-DFFFFF     (base 16)		Larch Networks
-				11 Amal Str.
-				Rosh Ain    4809239
-				IL
-
-A4-53-EE   (hex)		T-Touching Co., Ltd.
-800000-8FFFFF     (base 16)		T-Touching Co., Ltd.
-				28B, No. 4, Science and Technology 10th Road
-				Dongguan  GuangDong  52300
-				CN
-
-A0-02-4A   (hex)		Zhejiang Hechuan Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Zhejiang Hechuan Technology Co.,Ltd
-				No. 9, Fucai Road, Longyou Industrial Zone, Quzhou City, Zhejiang Province, PRC
-				Quzhou    324000
-				CN
-
-A4-53-EE   (hex)		Beijing Lanke Science and Technology Co.,LTd.
-700000-7FFFFF     (base 16)		Beijing Lanke Science and Technology Co.,LTd.
-				Room 607, building 6, No.1, Chaoqian Road, science and Technology Park, Changping District
-				Beijing     102209
-				CN
-
-A0-02-4A   (hex)		bitbee Inc
-D00000-DFFFFF     (base 16)		bitbee Inc
-				#703, 361 Simindae-ro, Dongan-gu,
-				anyang-si  gyeonggi-do  14057
-				KR
-
-A0-02-4A   (hex)		SomaDetect Inc
-300000-3FFFFF     (base 16)		SomaDetect Inc
-				241 Canada Street, Suite 10 
-				Fredericton  New Brunswick  E3A 4A1
-				CA
-
-78-D4-F1   (hex)		BONENG TRANSMISSION(SUZHOU)CO.,LTD
-A00000-AFFFFF     (base 16)		BONENG TRANSMISSION(SUZHOU)CO.,LTD
-				100#Ruyuan Rd.,Xiangcheng District,
-				Suzhou  Jiangsu  215131
-				CN
-
-78-D4-F1   (hex)		Lyngsoe Systems
-200000-2FFFFF     (base 16)		Lyngsoe Systems
-				101 Simona Dr Unit 2
-				Bolton  Ontario  L7E 4E8
-				CA
-
-78-D4-F1   (hex)		Blue Sparq, Inc.
-E00000-EFFFFF     (base 16)		Blue Sparq, Inc.
-				928 NE 24th Lane, Unit 4
-				Cape Coral  FL  33909
-				US
-
-44-6F-D8   (hex)		SCAIME
-D00000-DFFFFF     (base 16)		SCAIME
-				294 Rue Georges Charpak
-				JUVIGNY  Select State  74100
-				FR
-
-44-6F-D8   (hex)		Anhui GuDao Tech
-600000-6FFFFF     (base 16)		Anhui GuDao Tech
-				Dangtu Qingshanhe
-				MaAnShan  AnHui  243000
-				CN
-
-44-6F-D8   (hex)		Annapurna labs
-900000-9FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-98-27-82   (hex)		SHENZHEN HEROFUN BIO-TECH CO., LTD
-000000-0FFFFF     (base 16)		SHENZHEN HEROFUN BIO-TECH CO., LTD
-				7001B, 7th Floor, LaoBing Building, East Block 2, No. 3012 XingYe Road, BaoAn District
-				Shenzhen    518100
-				CN
-
-98-27-82   (hex)		RayTron, INC.
-B00000-BFFFFF     (base 16)		RayTron, INC.
-				11F.ESLEAD Bldg.HONMACHI 1-4-8 HONMACHI CHUO-KU
-				Osaka  Osaka  541-0053
-				JP
-
-98-27-82   (hex)		Thorlabs GmbH
-D00000-DFFFFF     (base 16)		Thorlabs GmbH
-				Münchner Weg 1
-				Bergkirchen    85232
-				DE
-
-98-27-82   (hex)		WESTERN SECURITY SOLUTIONS
-600000-6FFFFF     (base 16)		WESTERN SECURITY SOLUTIONS
-				WSS TOWER HARINAGAR
-				GURUGRAM  HARYANA  122001
-				IN
-
-98-27-82   (hex)		Danfoss Power Solutions
-300000-3FFFFF     (base 16)		Danfoss Power Solutions
-				3500 Annapolis Lane N
-				Minneapolis  MN  55447
-				US
-
-04-11-19   (hex)		AC Power Distribution / ACT Entmt.
-900000-9FFFFF     (base 16)		AC Power Distribution / ACT Entmt.
-				2313 N. Valley St.
-				Burbank  CA  91505
-				US
-
-04-11-19   (hex)		CyOne Security AG
-A00000-AFFFFF     (base 16)		CyOne Security AG
-				Hinterbergstrasse 18
-				Steinhausen  Zug  6312
-				CH
-
-04-11-19   (hex)		SUZHOU RIBAO TECHNOLOGY CO.,LTD.
-300000-3FFFFF     (base 16)		SUZHOU RIBAO TECHNOLOGY CO.,LTD.
-				SUZHOU RIBAO TECHNOLOGY CO.,LTD.
-				SUZHOU  JIANGSU  215133
-				CN
-
-04-11-19   (hex)		Nuance Hearing Ltd.
-D00000-DFFFFF     (base 16)		Nuance Hearing Ltd.
-				Raoul Wallenberg 24, Building A1, Floor 3
-				Tel Aviv    6971920
-				IL
-
-E8-6C-C7   (hex)		Annapurna labs
-E00000-EFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-E8-6C-C7   (hex)		Shenzhen Yibaifen Industrial Co.,Ltd.
-300000-3FFFFF     (base 16)		Shenzhen Yibaifen Industrial Co.,Ltd.
-				501/501, Building 2, Hongxiang Industrial Park, 21 Huancheng South Road, Ma'antang Community, Bantian Street, Longgang District, Shenzhen
-				Shenzhen    518000
-				CN
-
-E8-6C-C7   (hex)		z-max mediasolution
-D00000-DFFFFF     (base 16)		z-max mediasolution
-				Surugadai Bldg.8F kanda surugadai 1-7-10
-				Chiyodaku  Tokyo  101-0062
-				JP
-
-DC-E5-33   (hex)		Amazinglayer Network Co., Ltd.
-A00000-AFFFFF     (base 16)		Amazinglayer Network Co., Ltd.
-				Room118, Building B, JinTaiHuaYun Building, WuGenLin HuTong 11
-				Beijing  Beijing  100035
-				CN
-
-24-5D-FC   (hex)		ARTICONA - Bechtle Logistik & Service GmbH
-100000-1FFFFF     (base 16)		ARTICONA - Bechtle Logistik & Service GmbH
-				Bechtle Platz 1
-				Neckarsulm  Baden-Württemberg  74172
-				DE
-
-24-5D-FC   (hex)		Blue Iris Labs
-200000-2FFFFF     (base 16)		Blue Iris Labs
-				18 Acacia Rd
-				Fairfax  CA  94930
-				US
-
-24-5D-FC   (hex)		LTY LLC
-700000-7FFFFF     (base 16)		LTY LLC
-				1321 UPLAND DR
-				HOUSTON  TX  77043
-				US
-
-60-15-92   (hex)		PSS Co., Ltd
-C00000-CFFFFF     (base 16)		PSS Co., Ltd
-				4F., No. 10, Ln. 327, Sec. 2, Zhongshan Rd., Zhonghe Dist.
-				New Taipei City  ???  235
-				TW
-
-60-15-92   (hex)		RTDS Technologies Inc.
-100000-1FFFFF     (base 16)		RTDS Technologies Inc.
-				100-150 Innovation Drive
-				Winnipeg  Manitoba  R3T 2E1
-				CA
-
-60-15-92   (hex)		JIANGSU SUNFY TECHNOLOGIES HOLDING CO.,LTD.
-900000-9FFFFF     (base 16)		JIANGSU SUNFY TECHNOLOGIES HOLDING CO.,LTD.
-				Building 6, No. 1088, Jiangcheng Road, Sutong Technology Industrial Park
-				Nantong  Jiangsu  226017
-				CN
-
-60-15-92   (hex)		OSI TECHNOLOGY CO.,LTD.
-300000-3FFFFF     (base 16)		OSI TECHNOLOGY CO.,LTD.
-				No.74, Fenyang Rd., Sanmin Dist.
-				Kaohsiung City  Taiwan  807
-				TW
-
-60-15-92   (hex)		Annapurna labs
-E00000-EFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-0C-5C-B5   (hex)		Annapurna labs
-400000-4FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-0C-5C-B5   (hex)		Shenzhen C & D Electronics Co., Ltd.
-800000-8FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-0C-5C-B5   (hex)		iH&S Technology Limited
-300000-3FFFFF     (base 16)		iH&S Technology Limited
-				iH&S Technology Limited
-				7/F, Unify Commercial & Ind. Bldg., 31 Tai Yip Street, Kwun Tong  Hong Kong  999077
-				HK
-
-0C-5C-B5   (hex)		Energybox Limited
-700000-7FFFFF     (base 16)		Energybox Limited
-				8/F., Green 18, HK Science Park
-				Sha Tin  Hong Kong   0000
-				HK
-
-1C-A0-EF   (hex)		HANJEN.CHIN  CO., LTD.
-600000-6FFFFF     (base 16)		HANJEN.CHIN  CO., LTD.
-				Fl.2 No. 101  Jian 1st Rd., Zhonghe Dist., 
-				NEW TAIPEI CITY  TAIWAN  235
-				TW
-
-0C-5C-B5   (hex)		Colordeve International
-900000-9FFFFF     (base 16)		Colordeve International
-				601, block B, Logistics Park, Yihong Road, Yantian village, Fenggang Town, DG, GD, China
-				Dongguan City    523702
-				CN
-
-20-CE-2A   (hex)		Beijing Huadianzhongxin Tech.Co.,Ltd
-700000-7FFFFF     (base 16)		Beijing Huadianzhongxin Tech.Co.,Ltd
-				Room 318,the 3rd Floorl,Xingtianhaiyuan Building,Xianghuangqi East Rd,Nongda South Rd, Haidian District,Beijing,P.R.C
-				Bei Jing    100193
-				CN
-
-20-CE-2A   (hex)		Ariston Thermo s.p.a.
-C00000-CFFFFF     (base 16)		Ariston Thermo s.p.a.
-				Via Aristide Merloni 45
-				Fabriano  Ancona  60044
-				IT
-
-20-CE-2A   (hex)		Jabil
-200000-2FFFFF     (base 16)		Jabil
-				10560 Dr M.L.K. Jr St N, St.
-				St. Petersburg    33716
-				US
-
-88-C9-B3   (hex)		ADOPT NETTECH PVT LTD
-000000-0FFFFF     (base 16)		ADOPT NETTECH PVT LTD
-				A - 11, OKHLA INDUSTRIAL AREA, PHASE - I, 
-				NEW DELHI  DELHI  110020
-				IN
-
-7C-CB-E2   (hex)		Aplex Technology Inc.
-E00000-EFFFFF     (base 16)		Aplex Technology Inc.
-				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
-				Shenzhen City  Guangdong  518129
-				CN
-
-88-C9-B3   (hex)		Gefran Drive & Motion srl
-A00000-AFFFFF     (base 16)		Gefran Drive & Motion srl
-				Via Carducci 24
-				Gerenzano (VA)  Varese  21040
-				IT
-
-C8-F5-D6   (hex)		Jabil
-600000-6FFFFF     (base 16)		Jabil
-				10560 Dr M.L.K. Jr St N, St.
-				St. Petersburg    33716
-				US
-
-C8-F5-D6   (hex)		Volansys technologies pvt ltd
-D00000-DFFFFF     (base 16)		Volansys technologies pvt ltd
-				Block A-7th Floor, Safal Profitaire, Corporate Road, Prahaladnagar
-				Ahmedabad  Gujarat  380015
-				IN
-
-C0-FB-F9   (hex)		HAGUENET
-500000-5FFFFF     (base 16)		HAGUENET
-				 Nieuwe Parklaan 17
-				The Hague    2597 LA
-				NL
-
-C0-FB-F9   (hex)		LIXIL Corporation
-100000-1FFFFF     (base 16)		LIXIL Corporation
-				2-1-1 Ojima, Koto-ku
-				Tokyo  Select Stat  136-8535
-				JP
-
-C0-FB-F9   (hex)		SHENZHEN COMIX HST CLOUD COMPUTING CO., LTD.
-B00000-BFFFFF     (base 16)		SHENZHEN COMIX HST CLOUD COMPUTING CO., LTD.
-				1408? Qiancheng Commercial Center, No. 5 Haicheng Road, Mabu Community, Xixiang Sub-district, Bao'an District
-				Shenzhen  Guangdong  518000
-				CN
-
-C0-FB-F9   (hex)		SHENZHEN HEQIANG ELECTRONICS LIMITED
-300000-3FFFFF     (base 16)		SHENZHEN HEQIANG ELECTRONICS LIMITED
-				ROOM F7, 6TH FLOOR, A1 BUILDING, RED BOX LOFT, NO. 3 SOUTH HUANCHENG ROAD, LONGGANG DISTRICT,
-				SHENZHEN  GUANGDONG  518129
-				CN
-
-D0-9F-D9   (hex)		Carbon Mobile GmbH
-500000-5FFFFF     (base 16)		Carbon Mobile GmbH
-				Winterfeldtstr. 21
-				Berlin    10781
-				DE
-
-D0-9F-D9   (hex)		ENTTEC Pty Ltd.
-900000-9FFFFF     (base 16)		ENTTEC Pty Ltd.
-				po box 4051
-				ringwood  vic  3134
-				AU
-
-D0-9F-D9   (hex)		elecgator bvba
-100000-1FFFFF     (base 16)		elecgator bvba
-				Heerbaan, 308
-				Beringen  Limburg  3582
-				BE
-
-D0-9F-D9   (hex)		Minibems Ltd
-E00000-EFFFFF     (base 16)		Minibems Ltd
-				Oxford Point, 19 Oxford Road
-				Bournemouth    BH88GS
-				GB
-
-30-49-50   (hex)		Merlyn Mind, Inc.
-D00000-DFFFFF     (base 16)		Merlyn Mind, Inc.
-				405 Lexington Avenue, Suite 3504
-				New York  NY  10174
-				US
-
-18-74-E2   (hex)		G&O Audio Co.,LTD
-E00000-EFFFFF     (base 16)		G&O Audio Co.,LTD
-				3005, No.15-3, Haitian Road, Building C, N23 Excellence Times Square, Haiwang Community, Xin 'an Street, Bao 'an District
-				Shenzhen    518000
-				CN
-
-E8-78-29   (hex)		Tanz Security Technology Ltd.
-000000-0FFFFF     (base 16)		Tanz Security Technology Ltd.
-				11F., No. 203 Zhonghua 1st. road, Gushan District
-				Kaohsiung    80455
-				TW
-
-E8-78-29   (hex)		Electronic Controlled Systems, Inc.
-300000-3FFFFF     (base 16)		Electronic Controlled Systems, Inc.
-				11200 Hampshire Ave South
-				Bloomington  MN  55438
-				US
-
-E8-78-29   (hex)		AXING AG
-600000-6FFFFF     (base 16)		AXING AG
-				Gewerbehaus Moskau
-				Ramsen    8262
-				CH
-
-78-13-05   (hex)		Jiangxi Winsky Intelligence Technology Co., Ltd
-400000-4FFFFF     (base 16)		Jiangxi Winsky Intelligence Technology Co., Ltd
-				Zhihang road Wutong Ave. Hight tech area Jingdezhen City Jiangxi province PRC.
-				Jingdezhen   Jiangxi  333000
-				CN
-
-78-13-05   (hex)		Global Media Streaming LLC
-100000-1FFFFF     (base 16)		Global Media Streaming LLC
-				251 Little Falls Drive
-				Wilmington  DE  19808
-				US
-
-78-13-05   (hex)		ATS-CONVERS,LLC
-500000-5FFFFF     (base 16)		ATS-CONVERS,LLC
-				Yana Fabrittsyusa str. 10
-				Pskov    180017
-				RU
-
-78-13-05   (hex)		Leonardo SpA - Montevarchi 
-A00000-AFFFFF     (base 16)		Leonardo SpA - Montevarchi 
-				via DELLA LAMA, 13
-				Montevarchi  AREZZO  52025
-				IT
-
-78-13-05   (hex)		InnoSenT
-000000-0FFFFF     (base 16)		InnoSenT
-				Am Roedertor 30  
-				Donnersdorf  Bavaria  97499
-				DE
-
-A8-5B-36   (hex)		ShangHai SnowLake Technology Co.,LTD.
-800000-8FFFFF     (base 16)		ShangHai SnowLake Technology Co.,LTD.
-				30/F?Building#4,Si Chuang B?dg,No. 600Tianshan Rd, Changning District ,Shanghai
-				SHANGHAI  SHANGHAI  200050
-				CN
-
-A8-5B-36   (hex)		Lampyris Plant LLC
-B00000-BFFFFF     (base 16)		Lampyris Plant LLC
-				st.Arbuzova, 12, office. 201
-				Novosibirsk    630117
-				RU
-
-F0-2A-2B   (hex)		Shanghai Armour Technology Co., Ltd.
-200000-2FFFFF     (base 16)		Shanghai Armour Technology Co., Ltd.
-				Room 411, building 10, 471 Guiping Road, Xuhui District
-				Shanghai  Shanghai  200233
-				CN
-
-F0-2A-2B   (hex)		EL.MO. spa
-B00000-BFFFFF     (base 16)		EL.MO. spa
-				Via Pontarola, 70
-				Campodarsego  Padua  I35011
-				IT
-
-F0-2A-2B   (hex)		Agile Sports Technologies, dba Hudl
-500000-5FFFFF     (base 16)		Agile Sports Technologies, dba Hudl
-				600 P St, Suite 400
-				Lincoln  NE  68508
-				US
-
-F0-2A-2B   (hex)		Onclave Networks
-400000-4FFFFF     (base 16)		Onclave Networks
-				7950  Jones Branch Drive  #805
-				McLean  VA  22102
-				US
-
-F0-2A-2B   (hex)		Navigil Ltd
-A00000-AFFFFF     (base 16)		Navigil Ltd
-				Karaportti 5
-				Espoo  Uusimaa  02610
-				FI
-
-F0-2A-2B   (hex)		Definitely Win Corp.,Ltd.
-D00000-DFFFFF     (base 16)		Definitely Win Corp.,Ltd.
-				2F., No. 48, Da'an St., Xizhi Dist.,
-				New Taipei City  Taiwan (R.O.C.)  221041
-				TW
-
-F0-2A-2B   (hex)		Merlin Security Inc.
-000000-0FFFFF     (base 16)		Merlin Security Inc.
-				 11836 Clark St
-				Arcadia  CA  91006
-				US
-
-44-A9-2C   (hex)		Shenzhen Lianfaxun Electronic Technology Co.,Ltd
-500000-5FFFFF     (base 16)		Shenzhen Lianfaxun Electronic Technology Co.,Ltd
-				No. 25, Tianrong road, Tianliao second industrial park, Yutang street, Guangming new district
-				Shenzhen  Guangdong   518132
-				CN
-
-44-A9-2C   (hex)		Digiport OU
-A00000-AFFFFF     (base 16)		Digiport OU
-				Sepapaja 6
-				Tallinn  Tallinn  15551
-				EE
-
-44-A9-2C   (hex)		Cubitech
-C00000-CFFFFF     (base 16)		Cubitech
-				4-6 Kiprou str
-				Tavros  Athens  17778
-				GR
-
-58-48-49   (hex)		Shenzhen Tongye Technology Co.,Ltd
-900000-9FFFFF     (base 16)		Shenzhen Tongye Technology Co.,Ltd
-				Meitai Industry Zone, Guanguang Road, Guihua zone, Guanlan street, Longhua District, Shenzhen
-				Shenzhen    518000
-				CN
-
-44-A9-2C   (hex)		Annapurna labs
-E00000-EFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-44-A9-2C   (hex)		Luxonis Holding Corporation
-300000-3FFFFF     (base 16)		Luxonis Holding Corporation
-				7901 Shaffer Parkway
-				Littleton  CO  80127
-				US
-
-58-48-49   (hex)		Hubei Shudi Communication Technology Co., Ltd
-500000-5FFFFF     (base 16)		Hubei Shudi Communication Technology Co., Ltd
-				11 Lane 2, shuichan street, Huangmei County
-				Huanggang  Hubei  435500
-				CN
-
-58-48-49   (hex)		Viper Design LLC
-300000-3FFFFF     (base 16)		Viper Design LLC
-				154 Cude Ln
-				Madison  TN  37115
-				US
-
-64-33-B5   (hex)		Hometek Eletronics Co., Ltd
-A00000-AFFFFF     (base 16)		Hometek Eletronics Co., Ltd
-				7F-2 No. 16,Lane 609, Section 5 Chung Hsin Rd. Sanchong District. New Taipei City Taiwan R.O.C.
-				New Taipei City  Taiwan  241
-				TW
-
-58-48-49   (hex)		Avadesign Technology Co. Ltd.
-E00000-EFFFFF     (base 16)		Avadesign Technology Co. Ltd.
-				4F.-10, No.351, Sec. 2, Zhongshan Rd., Zhonghe Dist.
-				New Taipei City    23504
-				TW
-
-58-48-49   (hex)		Beijing Zhongyuanyishang Technology Co Ltd
-000000-0FFFFF     (base 16)		Beijing Zhongyuanyishang Technology Co Ltd
-				Unit 404, 4th Floor, Building 12, Yard 69, Fushi Road, Haidian District, Beijing
-				Beijing    100000
-				CN
-
-58-48-49   (hex)		SKAARHOJ ApS
-100000-1FFFFF     (base 16)		SKAARHOJ ApS
-				Rosenkaeret 11C
-				Soeborg    2860
-				DK
-
-64-33-B5   (hex)		Wingtech Mobile Communications Co.,Ltd
-300000-3FFFFF     (base 16)		Wingtech Mobile Communications Co.,Ltd
-				No.777,Yazhong Road,Nanhu District
-				Jiaxing  Zhejiang  314001
-				CN
-
-64-33-B5   (hex)		Huaqin Telecom Technology Co.,Ltd.
-100000-1FFFFF     (base 16)		Huaqin Telecom Technology Co.,Ltd.
-				Building 1,No.399, Keyuan Road, Pudong, Shanghai China
-				Shanghai    200120
-				CN
-
-28-36-13   (hex)		Linear Computing Inc.
-300000-3FFFFF     (base 16)		Linear Computing Inc.
-				110 Galaxy Blvd
-				Etobicoke  Ontario  M9W 4Y6
-				CA
-
-64-33-B5   (hex)		IIYAMA CORPORATION
-D00000-DFFFFF     (base 16)		IIYAMA CORPORATION
-				Wijkermeerstraat 8
-				Hoofddorp    2131HA
-				NL
-
-28-36-13   (hex)		Hi-p (Suzhou) Electronics Co,Ltd
-100000-1FFFFF     (base 16)		Hi-p (Suzhou) Electronics Co,Ltd
-				5th floor, building G, no. 2337 gudai road (weijing center)
-				Shanghai  minhang district  215128
-				CN
-
-78-5E-E8   (hex)		Yake (Tianjin) Technology Co.,Ltd.
-A00000-AFFFFF     (base 16)		Yake (Tianjin) Technology Co.,Ltd.
-				No.2, Zhengtong Road, Caozili Town, Wuqing District, Tianjin
-				Tianjin  Tianjin  301727
-				CN
-
-78-5E-E8   (hex)		Lantern Engineering (Pty) Ltd
-B00000-BFFFFF     (base 16)		Lantern Engineering (Pty) Ltd
-				Unit 101 & 101A, Execujet Business Centre, Tower Road
-				Cape Town  Western Cape  7490
-				ZA
-
-78-5E-E8   (hex)		MT B?LG? TEKNOLOJ?LER? VE DI? T?C. A.?.
-700000-7FFFFF     (base 16)		MT B?LG? TEKNOLOJ?LER? VE DI? T?C. A.?.
-				Tekstilkent Ticaret Merkezi Koza Plaza B Blok K:26 At??alan? 
-				?STANBUL  ESENLER  34235
-				TR
-
-78-5E-E8   (hex)		INFOMOBILITY S.R.L.
-500000-5FFFFF     (base 16)		INFOMOBILITY S.R.L.
-				Via per Vallalta, S.P.7
-				Concordia sulla Secchia  Modena  41033
-				IT
-
-78-5E-E8   (hex)		Youtransactor
-000000-0FFFFF     (base 16)		Youtransactor
-				32 Rue Brancion
-				Paris    75015
-				FR
-
-A0-22-4E   (hex)		TMGcore, Inc.
-400000-4FFFFF     (base 16)		TMGcore, Inc.
-				6815 Communications Parkway
-				Plano  TX  75024
-				US
-
-38-A8-CD   (hex)		Dongguan Fyrnetics Co., Ltd
-300000-3FFFFF     (base 16)		Dongguan Fyrnetics Co., Ltd
-				No.1 Rongwen Road, Dongguan Changan, Guangdong, China 523842
-				Dongguan  Guangdong  523842
-				CN
-
-38-A8-CD   (hex)		WHITEvoid GmbH
-400000-4FFFFF     (base 16)		WHITEvoid GmbH
-				Köpenicker Chaussee 4
-				Berlin  Berlin  10317
-				DE
-
-7C-83-34   (hex)		Thermalimage
-000000-0FFFFF     (base 16)		Thermalimage
-				Unit 4 Airside, Boeing Avenue, Waterford Airport Business Park
-				Waterford  Munster  X91RTA4
-				IE
-
-1C-AE-3E   (hex)		Netvio Ltd
-500000-5FFFFF     (base 16)		Netvio Ltd
-				InfoLab21, Lancaster University, Bailrigg Road
-				Lancaster  Lancastershire  LA14WA
-				GB
-
-1C-AE-3E   (hex)		LINKWISE TECHNOLOGIES CO., LIMITED
-200000-2FFFFF     (base 16)		LINKWISE TECHNOLOGIES CO., LIMITED
-				LINKWISE TECHNOLOGIES CO., LIMITED
-				Shanghai  Shanghai  200072
-				CN
-
-1C-AE-3E   (hex)		JingQi(tianjin) technology Co., Ltd
-800000-8FFFFF     (base 16)		JingQi(tianjin) technology Co., Ltd
-				Building E88, No.1 Sizhidao Rd., Xiqing University Industrial Zone
-				Tianjin    300382
-				CN
-
-1C-AE-3E   (hex)		IPROAD,Inc
-100000-1FFFFF     (base 16)		IPROAD,Inc
-				407 ENC Dreamtower VI, 41 digital-ro 31gil, gurogu
-				Seoul    08375
-				KR
-
-1C-AE-3E   (hex)		Beijing Boyan-rd Technology Development CO.,LTD
-B00000-BFFFFF     (base 16)		Beijing Boyan-rd Technology Development CO.,LTD
-				Room 1514, 15 / F, building a 1, Qinghe Jiayuan East District
-				Beijing  Haidian District  100085
-				CN
-
-98-6E-E8   (hex)		Shanghai Pixsur Smart Technology Co.,Ltd
-100000-1FFFFF     (base 16)		Shanghai Pixsur Smart Technology Co.,Ltd
-				Room 1204, No.1223, Xietu Road,Xuhui District
-				Shanghai  Shanghai  201100
-				CN
-
-1C-AE-3E   (hex)		Broachlink Technology Co.,Limited
-E00000-EFFFFF     (base 16)		Broachlink Technology Co.,Limited
-				1212, Yongtong BLDG,RenMin North Rd.,
-				Shenzhen  GuangDong  518100
-				CN
-
-98-6E-E8   (hex)		Private
-B00000-BFFFFF     (base 16)		Private
-
-98-6E-E8   (hex)		Ugreen Group Limited
-200000-2FFFFF     (base 16)		Ugreen Group Limited
-				4F, Plant 6, 1F-6/F, Block 7, YuAn Zone, Gaofeng Community, Dalang Street, Longhua District
-				Shenzhen  Guangdong  518109
-				CN
-
-98-80-BB   (hex)		Guangzhou Shortcut Technology Co.,Ltd.
-A00000-AFFFFF     (base 16)		Guangzhou Shortcut Technology Co.,Ltd.
-				Building No.7 Guangbao Road, Huangpu District
-				Guangzhou  Guangdong  510700
-				CN
-
-98-80-BB   (hex)		Jyh Eng Technology Co., Ltd
-800000-8FFFFF     (base 16)		Jyh Eng Technology Co., Ltd
-				5F, No. 50, Lane 1 , Sec.2, Guodao Rd., 
-				Lujhou Dist.,   New Taipei City,   247020
-				TW
-
-98-80-BB   (hex)		Shanghai ECone Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Shanghai ECone Technology Co.,Ltd.
-				Room1418,Floor5Building9,YangmingRoad,Xinghu,Development Zone, Fengxian,District,Shanghai
-				Shanghai    200000
-				CN
-
-98-80-BB   (hex)		Melexis Technologies NV
-500000-5FFFFF     (base 16)		Melexis Technologies NV
-				Transportstraat 1
-				Tessenderlo  Select State  3980
-				BE
-
-78-72-64   (hex)		Shenzhen C-DIGI Technology Co.,Ltd.
-600000-6FFFFF     (base 16)		Shenzhen C-DIGI Technology Co.,Ltd.
-				MeishengChuanggu(Xiagu), No. 10 Longchang Rd., Xin'an, Bao'an,
-				Shenzhen    518000
-				CN
-
-58-FC-DB   (hex)		Prometheus Security Group Global, Inc.
-700000-7FFFFF     (base 16)		Prometheus Security Group Global, Inc.
-				3019 Alvin Devane Boulevard  Building 4, Suite 400
-				Austin  TX  78741
-				US
-
-F4-70-0C   (hex)		Shenzhen Lidaxun Digital Technology Co., LTD
-500000-5FFFFF     (base 16)		Shenzhen Lidaxun Digital Technology Co., LTD
-				Room 7A, Building A3, HuaFengShiJiKeJiYuan, GuShu Street, BaoAn District
-				Shenzhen  Guangdong  518100
-				CN
-
-F4-A4-54   (hex)		Advanced Mechanical Technology, Inc. d/b/a AMTI
-700000-7FFFFF     (base 16)		Advanced Mechanical Technology, Inc. d/b/a AMTI
-				176 Waltham Street
-				Watertown  MA  02472
-				US
-
-F4-A4-54   (hex)		Integrated Dynamics Engineering GmbH
-C00000-CFFFFF     (base 16)		Integrated Dynamics Engineering GmbH
-				Hermannstrasse 9 - 13
-				Raunheim  Hessen  65479
-				DE
-
-F4-A4-54   (hex)		Lonton infomation tech Ltd., Co
-900000-9FFFFF     (base 16)		Lonton infomation tech Ltd., Co
-				L15 Block 5C, Huaqiang idea Park, Guangming District
-				Shenzhen  Guangdong  518000
-				CN
-
-18-45-B3   (hex)		Bdf Digital
-C00000-CFFFFF     (base 16)		Bdf Digital
-				Via dell'Oreficeria 41
-				Vicenza  Italy  36100
-				IT
-
-18-45-B3   (hex)		Guangzhou Aoshi Internet Information & Technology Co.,Ltd.
-A00000-AFFFFF     (base 16)		Guangzhou Aoshi Internet Information & Technology Co.,Ltd.
-				Room 401-410,A Building ,23# Nanxiang Road, Huangpu District
-				Guangzhou  Guangdong  510663
-				CN
-
-18-45-B3   (hex)		Harmonic Technology Limited
-600000-6FFFFF     (base 16)		Harmonic Technology Limited
-				Building B, No. 8 Tianxin Street, Yongkou Management District, Management District, Shijie Town
-				Dongguan  Guangdong  523290
-				CN
-
-18-45-B3   (hex)		Mission Secure Inc
-400000-4FFFFF     (base 16)		Mission Secure Inc
-				100 10th St NE STE 301
-				Charlottesville  VA  22902
-				US
-
-08-F8-0D   (hex)		FG-Lab Inc.
-400000-4FFFFF     (base 16)		FG-Lab Inc.
-				KDX shibadaimon.Bld 2F 2-10-12 Shibadaimon
-				Minato-ku  Tokyo  1050012
-				JP
-
-94-C9-B7   (hex)		Fairy Devices Inc.
-000000-0FFFFF     (base 16)		Fairy Devices Inc.
-				Yushima Urban Bldg 7F, 2-31-22 Yushima Bunkyo-ku
-				Tokyo    113-0034
-				JP
-
-94-C9-B7   (hex)		ShenZhen Beide Technology Co.,LTD
-A00000-AFFFFF     (base 16)		ShenZhen Beide Technology Co.,LTD
-				SHENZHEN BEIDE Technology Co,.LTD ???3 / F, Building A, Tengfei Industrial Building, No.6 taohua Road, Fubao Community, Fubao Street, Futian District, Shenzhen   
-				ShenZhen  GuangDong  518000
-				CN
-
-94-C9-B7   (hex)		Private
-900000-9FFFFF     (base 16)		Private
-
-94-C9-B7   (hex)		shenzhen UDD Technologies,co.,Ltd
-E00000-EFFFFF     (base 16)		shenzhen UDD Technologies,co.,Ltd
-				Unit D, 6th Floor, Jialitai Bldg., No.45 Yanshan Road, Shekou, Nanshan District, Shenzhen, China
-				shenzhen  guangdong  51800
-				CN
-
-94-C9-B7   (hex)		Beijing Anyunshiji Technology Co., Ltd.
-500000-5FFFFF     (base 16)		Beijing Anyunshiji Technology Co., Ltd.
-				1002, 10F, Room 102, Floor 1-17, Building 2, Yard 6, Jiuxianqiao Road, Chaoyang District
-				Beijing    100015
-				CN
-
-94-C9-B7   (hex)		3D Biomedicine Science & Technology Co., Limited
-B00000-BFFFFF     (base 16)		3D Biomedicine Science & Technology Co., Limited
-				Building 2, Block A, 158 XinJunhuan Street, Pujiang Hi-tech Park
-				Shanghai  Shanghai  201114
-				CN
-
-50-A0-30   (hex)		Abacus Research AG
-600000-6FFFFF     (base 16)		Abacus Research AG
-				Abacus-Platz 1
-				Wittenbach  St. Gallen  9300
-				CH
-
-50-A0-30   (hex)		Alert Innovation
-400000-4FFFFF     (base 16)		Alert Innovation
-				101 Billerica Ave Bldg 3
-				North Billerica  MA  01862
-				US
-
-50-A0-30   (hex)		DPA Microphones A/S
-900000-9FFFFF     (base 16)		DPA Microphones A/S
-				Gydevang 42-44
-				Alleroed    3450
-				DK
-
-04-EE-E8   (hex)		Hengke Technology Industry Co., Ltd.
-200000-2FFFFF     (base 16)		Hengke Technology Industry Co., Ltd.
-				No.305-1 Torch Road, High District, WeiHai
-				WeiHai  ShanDong  264200
-				CN
-
-50-A0-30   (hex)		Annapurna labs
-200000-2FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-04-EE-E8   (hex)		Shenzhen Daotong Technology Co.,Ltd
-400000-4FFFFF     (base 16)		Shenzhen Daotong Technology Co.,Ltd
-				7th, 8th, 10th Floor, Building B1, Zhiyuan Road, No. 1001 Xueyuan Avenue, Xili Street, Nanshan District, Shenzhen
-				SHENZHEN    518000
-				CN
-
-04-EE-E8   (hex)		RealWear
-500000-5FFFFF     (base 16)		RealWear
-				600 Hathaway Rd, Ste 105
-				Vancouver  WA  98661
-				US
-
-04-EE-E8   (hex)		Fluid Management Technology
-300000-3FFFFF     (base 16)		Fluid Management Technology
-				169 Grange Rd, Beverley
-				169 Grange Rd, Beverley, South Australia 5009 AU.  South Australia  5009
-				AU
-
-18-D7-93   (hex)		EcoG
-B00000-BFFFFF     (base 16)		EcoG
-				Gaenslerweg 24
-				Furth  Bavaria  82041
-				DE
-
-18-D7-93   (hex)		Teegarden Applied Science Inc
-E00000-EFFFFF     (base 16)		Teegarden Applied Science Inc
-				2510 rue de l'Aeroport
-				St-Mathieu-de-Beloeil  Quebec  J3G0C9
-				CA
-
-DC-36-43   (hex)		Meier Tobler AG
-000000-0FFFFF     (base 16)		Meier Tobler AG
-				Bahnstrasse 24
-				Schwerzenbach  ZH  8603
-				CH
-
-DC-36-43   (hex)		nami.ai
-B00000-BFFFFF     (base 16)		nami.ai
-				3 Temasek Avenue, #17-19
-				Singapore    039190
-				SG
-
-DC-36-43   (hex)		WIS Networks
-300000-3FFFFF     (base 16)		WIS Networks
-				702, No. 60,  langbaoxi  Road, Chancheng District
-				foshan  guangdong  528000
-				CN
-
-DC-36-43   (hex)		Dongguan Pengchen Earth Instrument CO. LT
-100000-1FFFFF     (base 16)		Dongguan Pengchen Earth Instrument CO. LT
-				Room 301, Building 1, No.6, North Huwu Road, Liuwu Village, Shijie Town, Dongguan city, Guangdong Province
-				Dongguan    523290
-				CN
-
-DC-36-43   (hex)		Hangzhou Huanyu Vision Technology Co., Ltd
-D00000-DFFFFF     (base 16)		Hangzhou Huanyu Vision Technology Co., Ltd
-				 Room 701, block n, No. 88, China (Hangzhou) smart information industrial park, Gongshu District,
-				Hangzhou  Zhejiang  310011
-				CN
-
-08-26-AE   (hex)		BANGJOO Co., Ltd.
-400000-4FFFFF     (base 16)		BANGJOO Co., Ltd.
-				745-34, Samnam-ro,Jinwi-myeon
-				Pyeongtaek  Gyeonggi-do  17718
-				KR
-
-08-26-AE   (hex)		Brannstrom Sweden AB
-C00000-CFFFFF     (base 16)		Brannstrom Sweden AB
-				Uddevallagatan 14
-				Göteborg    41670
-				SE
-
-08-26-AE   (hex)		Newcapec co.,Ltd
-600000-6FFFFF     (base 16)		Newcapec co.,Ltd
-				18 Yingchun Street, High-tech Development Zone
-				Zhengzhou  Henan  450000
-				CN
-
-98-8F-E0   (hex)		Changzhou Perceptime Technology Co.,Ltd.
-800000-8FFFFF     (base 16)		Changzhou Perceptime Technology Co.,Ltd.
-				5/f, biological building, 1326 Yanan West road, Changning District
-				Shanghai  Shanghai  200052
-				CN
-
-98-8F-E0   (hex)		Huaqin Technology Co.,Ltd.
-600000-6FFFFF     (base 16)		Huaqin Technology Co.,Ltd.
-				10 Keyuan Road, Songshan Lake
-				Dongguan    Guangdong  523419
-				CN
-
-98-8F-E0   (hex)		Schmid AG, energy solutions
-400000-4FFFFF     (base 16)		Schmid AG, energy solutions
-				Hörnlistrasse 12
-				Eschlikon    8360
-				CH
-
-98-8F-E0   (hex)		Pavana Technologies JSC.
-A00000-AFFFFF     (base 16)		Pavana Technologies JSC.
-				Lot F1-2-3, Thang Long Vinh Phuc IP., Tam Hop Commune, Binh Xuyen District
-				Vinh Phuc    35000
-				VN
-
-10-54-D2   (hex)		GIPS Technology Co., Ltd.
-000000-0FFFFF     (base 16)		GIPS Technology Co., Ltd.
-				Rm. 2, 6F., No. 395, Sec. 1, Linsen Rd., East Dist.
-				 Tainan City  TAIWAN  701024
-				TW
-
-10-54-D2   (hex)		Embion B.V.
-A00000-AFFFFF     (base 16)		Embion B.V.
-				Biestraat 1b
-				Gilze  Noord-Brabant  5126NH
-				NL
-
-10-54-D2   (hex)		Little Array Technology (Shenzhen) Co., Ltd.
-300000-3FFFFF     (base 16)		Little Array Technology (Shenzhen) Co., Ltd.
-				Unit 215, 2F, A1, Zhimei Industry Park, Fuhai Industrial Zone B2, Fuyong Street, Baoan District
-				Shenzhen  Guangdong  518103
-				CN
-
-10-54-D2   (hex)		LUXSHARE-ICT Co., Ltd.
-C00000-CFFFFF     (base 16)		LUXSHARE-ICT Co., Ltd.
-				1F, No. 22, Lane 35, Jihu Road, Neihu district
-				Taipei City  Taiwan  114754
-				TW
-
-10-54-D2   (hex)		COSMO AIOT TECHNOLOGY CO LTD
-E00000-EFFFFF     (base 16)		COSMO AIOT TECHNOLOGY CO LTD
-				Haier Information Industrial Complex, No.1 HaierRoad
-				Qingdao  Shandong  266101
-				CN
-
-0C-86-29   (hex)		SHENZHEN YINGMU TECHNOLOGY.,LTD
-C00000-CFFFFF     (base 16)		SHENZHEN YINGMU TECHNOLOGY.,LTD
-				8 / F, Zone D, building F1, TCL International E city, Shuguang community, Xili street, Nanshan District,
-				Shenzhen    518000
-				CN
-
-0C-86-29   (hex)		Nipron Co.,Ltd
-A00000-AFFFFF     (base 16)		Nipron Co.,Ltd
-				1-3-30 Nishinagasucho
-				Amagasaki-shi  Hyogo-ken  660-0805
-				JP
-
-0C-86-29   (hex)		FX TECHNOLOGY LIMITED
-E00000-EFFFFF     (base 16)		FX TECHNOLOGY LIMITED
-				38a High Street, Northwood
-				Middlesex  -  HA6 1BN
-				GB
-
-6C-93-08   (hex)		LightnTec GmbH
-300000-3FFFFF     (base 16)		LightnTec GmbH
-				Haid-und-Neu-Strasse 7
-				Karlsruhe    76131
-				DE
-
-30-43-D7   (hex)		Shenzhen juduoping Technology Co.,Ltd
-100000-1FFFFF     (base 16)		Shenzhen juduoping Technology Co.,Ltd
-				Baoan Xin'an Streat
-				Shenzhen    002052
-				CN
-
-30-43-D7   (hex)		Sprocomm Technologies Co., Ltd.Guangming Branch
-600000-6FFFFF     (base 16)		Sprocomm Technologies Co., Ltd.Guangming Branch
-				Area A 3rd Floor, Area A 5rd Floor and 6th Floor, 301, building 2, 7th Industrial Park, Yulv Community,Yutang Street, Guangming District, 
-				Shenzhen    518000
-				CN
-
-6C-93-08   (hex)		Shenzhen haichangxing Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Shenzhen haichangxing Technology Co., Ltd.
-				Room 3102, 31 / F, Wen an Center, Wenjin Square, Luohu
-				SHENZHEN  GUANGZHOU  518000
-				CN
-
-30-43-D7   (hex)		Guangdong Hongqin Telecom  Technology Co. Ltd.
-E00000-EFFFFF     (base 16)		Guangdong Hongqin Telecom  Technology Co. Ltd.
-				10 Keyuan Road, Songshan Lake
-				Dongguan  Guangdong   523808
-				CN
-
-38-1F-26   (hex)		Bosch Automotive Electronics India Pvt. Ltd.
-300000-3FFFFF     (base 16)		Bosch Automotive Electronics India Pvt. Ltd.
-				Naganathapura
-				Bengaluru  Karnataka  560100
-				IN
-
-18-A5-9C   (hex)		Erba Lachema s.r.o.
-A00000-AFFFFF     (base 16)		Erba Lachema s.r.o.
-				Karasek1d
-				Brno    62100
-				CZ
-
-18-A5-9C   (hex)		ePower Network Solution Co., Ltd.
-700000-7FFFFF     (base 16)		ePower Network Solution Co., Ltd.
-				No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., 
-				New Taipei City ,    242063
-				TW
-
-1C-59-74   (hex)		Shenzhen Hanshine Technology Co.Ltd.
-000000-0FFFFF     (base 16)		Shenzhen Hanshine Technology Co.Ltd.
-				Buiding 2 ,row 3,number 2 industrail  zone,yulv community,Yutang street 
-				Shenzhen  Guangdong  518000
-				CN
-
-1C-59-74   (hex)		Chongqing Taishan Cable Co., Ltd
-200000-2FFFFF     (base 16)		Chongqing Taishan Cable Co., Ltd
-				17 Shiyan Avenue, Yufengshan Town, Yubei District,
-				Chongqing    400000
-				CN
-
-18-A5-9C   (hex)		Beijing QS Medical Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Beijing QS Medical Technology Co., Ltd.
-				Building 5, No.11, Kechuang 14th Street, Economic-Technological Development Area
-				Beijing    100176
-				CN
-
-C4-A1-0E   (hex)		Clinton Electronics Corporation
-B00000-BFFFFF     (base 16)		Clinton Electronics Corporation
-				6701 Clinton Road
-				Loves Park  IL  61111
-				US
-
-C4-A1-0E   (hex)		Wistron InfoComn (Kunshan) Co., Ltd.
-200000-2FFFFF     (base 16)		Wistron InfoComn (Kunshan) Co., Ltd.
-				No.88 Hongyan Road, Kunshan Economic & Technological Development Zone
-				Kunshan  Jiangsu  215300
-				CN
-
-6C-15-24   (hex)		Telsonic AG
-100000-1FFFFF     (base 16)		Telsonic AG
-				Industriestrasse 6b
-				Bronschhofen  St.Gallen  9552
-				CH
-
-C4-A1-0E   (hex)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
-700000-7FFFFF     (base 16)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
-				Area A Layer 6, Area A Layer 5, Area A Layer 4, No.39, Sicheng Road, Tianhe District,
-				Guangzhou  GuangDong  510663
-				CN
-
-6C-15-24   (hex)		Motium Pty Ltd
-700000-7FFFFF     (base 16)		Motium Pty Ltd
-				11/4 Brodie Hall Drive,
-				Bentley  Western Australia  6102
-				AU
-
-6C-15-24   (hex)		SYMLINK CORPORATION
-D00000-DFFFFF     (base 16)		SYMLINK CORPORATION
-				6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park
-				Taipei    11492
-				TW
-
-6C-15-24   (hex)		AEC s.r.l.
-E00000-EFFFFF     (base 16)		AEC s.r.l.
-				Via Zambon, 33/A
-				Creazzo  Vicenza  36051
-				IT
-
-C4-A1-0E   (hex)		Harbour Cross Technology Ltd
-400000-4FFFFF     (base 16)		Harbour Cross Technology Ltd
-				Unit 622 One Island South, 2 Heung Yip Road, Wong Chuk Hang,
-				Hong Kong  China  000000
-				HK
-
-70-50-E7   (hex)		Annapurna labs
-100000-1FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-70-50-E7   (hex)		Shenzhen C & D Electronics Co., Ltd.
-000000-0FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-70-50-E7   (hex)		Beijing Shannoncyber Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		Beijing Shannoncyber Technology Co.,Ltd
-				913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District
-				beijing  beijing  100029
-				CN
-
-80-02-F4   (hex)		PassiveLogic
-A00000-AFFFFF     (base 16)		PassiveLogic
-				6405 S 3000 E, Suite 300
-				Holladay  UT  84121
-				US
-
-80-02-F4   (hex)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
-900000-9FFFFF     (base 16)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
-				SECOND  FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA
-				XIAMEN    361106
-				CN
-
-80-02-F4   (hex)		Sichuan Fanyi Technology Co. Ltd.
-500000-5FFFFF     (base 16)		Sichuan Fanyi Technology Co. Ltd.
-				No. 1707, Unit 1, Building 1, 888, Middle Section of Yizhou Avenue, Gaoxin District
-				Chengdu  Sichuan  650000
-				CN
-
-80-02-F4   (hex)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
-D00000-DFFFFF     (base 16)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
-				No. 52, Guoxiang Road, Wujin economic development zone
-				ChangZhou  JiangSu  213100
-				CN
-
-80-02-F4   (hex)		Infors AG
-400000-4FFFFF     (base 16)		Infors AG
-				Wuhrmattstr. 7
-				Bottmingen    4103
-				CH
-
-80-02-F4   (hex)		Mech-Mind Robotics Technologies Ltd.
-600000-6FFFFF     (base 16)		Mech-Mind Robotics Technologies Ltd.
-				 Room 1001,1F,Building 3, No.8,Chuangye Road,Haidian District
-				Beijing    100085
-				CN
-
-8C-51-09   (hex)		ENPLUG Co., Ltd.
-700000-7FFFFF     (base 16)		ENPLUG Co., Ltd.
-				#A-705, 46 Dallaenae-ro, Sujeong-gu, 
-				Seongnam-si  Gyeonggi-do  13449
-				KR
-
-8C-51-09   (hex)		Frontmatec
-900000-9FFFFF     (base 16)		Frontmatec
-				Hassellunden 9
-				Smørum    2765
-				DK
-
-0C-7F-ED   (hex)		ShenZhen TianGang Micro Technology CO.LTD
-500000-5FFFFF     (base 16)		ShenZhen TianGang Micro Technology CO.LTD
-				3rd floor ,Building20,QingHu Industrial,QingHu community,LongHua DistrictShenZhen,China
-				ShenZhen  GangDong  518100
-				CN
-
-0C-7F-ED   (hex)		U-tec Group Inc.
-800000-8FFFFF     (base 16)		U-tec Group Inc.
-				32920 Alvarado-Niles Rd Ste 220
-				Union City  CA  94587
-				US
-
-0C-7F-ED   (hex)		Soft dB
-300000-3FFFFF     (base 16)		Soft dB
-				1040, avenue Belvédère #215
-				Québec  Quebec  G1S 3G3
-				CA
-
-FC-61-79   (hex)		MACH SYSTEMS s.r.o.
-900000-9FFFFF     (base 16)		MACH SYSTEMS s.r.o.
-				Pocernicka 272/96
-				Prague    10800
-				CZ
-
-FC-61-79   (hex)		Annapurna labs
-800000-8FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-FC-61-79   (hex)		Zhuhai Anjubao Electronics Technology Co., Ltd.
-000000-0FFFFF     (base 16)		Zhuhai Anjubao Electronics Technology Co., Ltd.
-				Room 603, Building 4, No. 101, Daxue Road, Tangjiawan Town, High-tech Zone,
-				Zhuhai  Guangdong  519000
-				CN
-
-FC-61-79   (hex)		Shenzhen Shenshui Electronic Commerce Co.,Ltd
-200000-2FFFFF     (base 16)		Shenzhen Shenshui Electronic Commerce Co.,Ltd
-				Room 517, Biaofan Building, No. 6, Tangwei Industrial Avenue, Fuhai Street, Baoan District
-				Shenzhen    518132
-				CN
-
-4C-4B-F9   (hex)		Shandong Linkotech Electronic Co., Ltd.
-600000-6FFFFF     (base 16)		Shandong Linkotech Electronic Co., Ltd.
-				22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone
-				Jinan  Shandong  250101
-				CN
-
-4C-4B-F9   (hex)		Power Active Co., Ltd
-300000-3FFFFF     (base 16)		Power Active Co., Ltd
-				4F, No.23, Wugong 6th Rd., Wugu Dist.
-				New Taipei City    248
-				TW
-
-4C-4B-F9   (hex)		Multitek Elektronik Sanayi ve Ticaret A.S.
-000000-0FFFFF     (base 16)		Multitek Elektronik Sanayi ve Ticaret A.S.
-				Meclis Mah. Ataturk Cad. No:47, sancaktepe
-				istanbul    34785
-				TR
-
-20-85-93   (hex)		Mid Continent Controls, Inc.
-200000-2FFFFF     (base 16)		Mid Continent Controls, Inc.
-				901 North River Street
-				Derby  KS  67037
-				US
-
-34-04-9E   (hex)		Connected IO
-100000-1FFFFF     (base 16)		Connected IO
-				573 University Ave
-				Los Gatos  CA  95032
-				US
-
-24-15-10   (hex)		Topgolf Sweden AB
-900000-9FFFFF     (base 16)		Topgolf Sweden AB
-				Svärdvägen 11
-				Danderyd  Stockholm  182 33
-				SE
-
-24-15-10   (hex)		SuZhou A-rack Information Technology Co.,Ltd
-700000-7FFFFF     (base 16)		SuZhou A-rack Information Technology Co.,Ltd
-				No.10 Xinting Road,Suzhou New District
-				Suzhou  Jiangsu  215000
-				CN
-
-20-85-93   (hex)		AASSET SECURITY
-800000-8FFFFF     (base 16)		AASSET SECURITY
-				153 RUE MICHEL CARRE
-				ARGENTEUIL    95100
-				FR
-
-20-85-93   (hex)		Wave-In Communication
-500000-5FFFFF     (base 16)		Wave-In Communication
-				8F, No.322, Sec. 1, Neihu Rd., Neihu Dist.
-				Taipei City    114
-				TW
-
-BC-66-41   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-98-06-37   (hex)		Angora Networks
-A00000-AFFFFF     (base 16)		Angora Networks
-				Alacaatli Mah. Park Cad 47/31, Cayyolu
-				Ankara    06810
-				TR
-
-64-FB-81   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-78-C2-C0   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-14-1F-BA   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-58-FC-DB   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-74-F8-DB   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-7C-70-BC   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-D0-76-50   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-44-D5-F2   (hex)		Shenzhen Hebang Electronic Co., Ltd
-200000-2FFFFF     (base 16)		Shenzhen Hebang Electronic Co., Ltd
-				2nd Floor West, Bldg B, Kelunte Low Carbon Industry Park, Huarong Road, Dalang, Longhua District
-				Shenzhen    518000
-				CN
-
-98-06-37   (hex)		Chengdu Shuwei Communication Technology Co.,Ltd
-400000-4FFFFF     (base 16)		Chengdu Shuwei Communication Technology Co.,Ltd
-				The Second floor, G4 Building, G zone, Tianfu Software Park, 1800 Yizhou Avenue, High Tech Dsitrict
-				Chengdu  Sichuan  610041
-				CN
-
-D0-5F-64   (hex)		Nanjing Huamai Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Nanjing Huamai Technology Co.,Ltd
-				No.11 Runfa Road, Dongshan Industry Gathering Zone, Jiangning District
-				Nanjing  Jiangsu  210000
-				CN
-
-44-D5-F2   (hex)		Valeo Interior Controls (Shenzhen) Co.,Ltd
-B00000-BFFFFF     (base 16)		Valeo Interior Controls (Shenzhen) Co.,Ltd
-				North Junyi Ind. Park, Huaide Vil., Fuyong Town, Baoan Dist.
-				Shenzhen  Guangzhong  518103
-				CN
-
-44-D5-F2   (hex)		tiga.eleven GmbH
-500000-5FFFFF     (base 16)		tiga.eleven GmbH
-				Stallburggasse 2/37
-				Viennna    1010
-				AT
-
-D0-5F-64   (hex)		PartnerNET LTD
-A00000-AFFFFF     (base 16)		PartnerNET LTD
-				Salaminos 5
-				Nicossia  Strovolos  2044
-				CY
-
-FC-A4-7A   (hex)		Hefei Feier Smart Science&Technology Co. Ltd
-E00000-EFFFFF     (base 16)		Hefei Feier Smart Science&Technology Co. Ltd
-				6 / F 1#ZhongShi Building,CSV, High-tech Zone
-				HEFEI    230000
-				CN
-
-FC-A4-7A   (hex)		HOOC AG
-400000-4FFFFF     (base 16)		HOOC AG
-				Torweg 8
-				Visp  VS  3930
-				CH
-
-2C-16-BD   (hex)		Beijing Zhijian Link Technology Co., Ltd.
-500000-5FFFFF     (base 16)		Beijing Zhijian Link Technology Co., Ltd.
-				C3-1358, 3rd floor, No. 18 North Taipingzhuang Road, Haidian District
-				Beijing  Beijing  100088
-				CN
-
-FC-A4-7A   (hex)		Syfer
-500000-5FFFFF     (base 16)		Syfer
-				227 SANDY SPRINGS PL SUITE D-454
-				Atlanta  GA  30328-5918
-				US
-
-FC-A4-7A   (hex)		Ant Financial（Hang Zhou）Network Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Ant Financial（Hang Zhou）Network Technology Co.,Ltd.
-				801-10,8th Floor B Section,556Xixi Road,XihuDistrict,
-				HangzhouCity  ZhejiangProvince  310007
-				CN
-
-2C-16-BD   (hex)		Molex Incorporated 
-E00000-EFFFFF     (base 16)		Molex Incorporated 
-				46360 Fremont Blvd
-				Fremont  CA  94538
-				US
-
-D0-5F-64   (hex)		wallbe GmbH
-400000-4FFFFF     (base 16)		wallbe GmbH
-				Paderborner Straße 76
-				Schlangen   NRW  33189
-				DE
-
-D0-5F-64   (hex)		Decathlon SA
-000000-0FFFFF     (base 16)		Decathlon SA
-				4 Boulevard de Mons
-				Villeneuve d'Ascq  Haut de France  59650
-				FR
-
-B4-A2-EB   (hex)		 DCI International, LLC.
-100000-1FFFFF     (base 16)		 DCI International, LLC.
-				305 N Springbrook Road
-				Newberg  OR  97132
-				US
-
-B4-A2-EB   (hex)		ShenZhen Lark Acoustics Co., Ltd. 
-600000-6FFFFF     (base 16)		ShenZhen Lark Acoustics Co., Ltd. 
-				Room 2406, Northwestern Polytechnical University, Gaoxin South Nine Road,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-2C-16-BD   (hex)		Hangzhou Yanzhi Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Hangzhou Yanzhi Technology Co.,Ltd.
-				Room 406, 4th floor, building 6,316 jianghong south road,Binjiang Dist
-				Hangzhou  Zhejiang  310030
-				CN
-
-B4-A2-EB   (hex)		Dongguan Finslink Communication Technology Co.,Ltd.
-E00000-EFFFFF     (base 16)		Dongguan Finslink Communication Technology Co.,Ltd.
-				Room 202,2nd floor,G3 Building, University Innovation City,Songshan Lake High-tech Industrial Development Zone
-				Dongguan  Guangdong  523808
-				CN
-
-8C-59-3C   (hex)		Dantherm Cooling Inc.
-C00000-CFFFFF     (base 16)		Dantherm Cooling Inc.
-				110 Corporate Dr., Suite K
-				Spartanburg  SC  29303
-				US
-
-B4-A2-EB   (hex)		Canaan Creative Co.,Ltd.
-300000-3FFFFF     (base 16)		Canaan Creative Co.,Ltd.
-				ZPark 27# QianFang Science Building C,  Haidian District, Beijing, China.
-				Beijing  Beijing  100094
-				CN
-
-2C-16-BD   (hex)		CLOUDWALK TECHNOLOGY CO.,LTD
-600000-6FFFFF     (base 16)		CLOUDWALK TECHNOLOGY CO.,LTD
-				Five Floors of Block 106, West Jinkai Avenue, Yubei District
-				Chongqing  Chongqing  401120
-				CN
-
-D0-C8-57   (hex)		Imin Technology Pte Ltd
-400000-4FFFFF     (base 16)		Imin Technology Pte Ltd
-				77 Sciene park Drive #03-10 Cintech III 
-				Singapore  Singapore  118256
-				SG
-
-74-5B-C5   (hex)		Beijing Inspiry Technology Co., Ltd. 
-100000-1FFFFF     (base 16)		Beijing Inspiry Technology Co., Ltd. 
-				Building No. 5, East Zone, No. 10, Xibeiwang East Road, Haidian District
-				Beijing  Beijing  100092
-				CN
-
-D0-C8-57   (hex)		shenzhen cnsun
-A00000-AFFFFF     (base 16)		shenzhen cnsun
-				5 Floor, 2 Building,Tongfuyu Industrial City
-				shenzhen  guangdong  518000
-				CN
-
-D0-C8-57   (hex)		Shenzhen xiaosha  Intelligence  Technology Co. Ltd
-900000-9FFFFF     (base 16)		Shenzhen xiaosha  Intelligence  Technology Co. Ltd
-				 Poly Building, 2702 Nanhai Avenue, Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-D0-C8-57   (hex)		Innovative Industrial(HK)Co., Limited
-600000-6FFFFF     (base 16)		Innovative Industrial(HK)Co., Limited
-				OFFICE 3A,12/F,KAISER CENTRE,NO.18CENTRE STREET
-				SAI YING PUN    999077
-				HK
-
-30-0A-60   (hex)		Beijing Ruiteng Zhongtian TECH Ltd.,Co
-100000-1FFFFF     (base 16)		Beijing Ruiteng Zhongtian TECH Ltd.,Co
-				Blk 6,Rm 602,Noble CenterⅡ，No.1 Automotive Museum East Lane,South Fourth Ring Road, Fengtai District
-				Beijing  Beijing  100070
-				CN
-
-BC-97-40   (hex)		Lattec I/S
-200000-2FFFFF     (base 16)		Lattec I/S
-				Blytækkervej 10
-				Hillerød    3400
-				DK
-
-A4-3B-FA   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-D0-C8-57   (hex)		FORGAMERS INC.
-200000-2FFFFF     (base 16)		FORGAMERS INC.
-				6F., NO.51, DONGXING RD., XINYI DIST., TAIPEI CITY 110-70, TAIWAN
-				Taipei    110
-				TW
-
-60-95-CE   (hex)		Cadmo Soluciones SAC
-700000-7FFFFF     (base 16)		Cadmo Soluciones SAC
-				Av. Angamos Este 2495 Dpt. 301, San Borja
-				Lima  Lima  15036
-				PE
-
-60-95-CE   (hex)		GovComm
-D00000-DFFFFF     (base 16)		GovComm
-				3830 SW 30 Ave
-				Fort Lauderdale  FL  33312
-				US
-
-60-95-CE   (hex)		Ponoor Experiments Inc.
-100000-1FFFFF     (base 16)		Ponoor Experiments Inc.
-				Higashi-shinagawa 1-33-10, Terrada Art Complex 216
-				Shinagawa-ku  Tokyo  1400002
-				JP
-
-BC-97-40   (hex)		Alpha ESS Co., Ltd.
-000000-0FFFFF     (base 16)		Alpha ESS Co., Ltd.
-				JiuHua Road 888, Nantong High-Tech Industrial Development Zone,
-				Nantong  Jiangsu  226300
-				CN
-
-60-95-CE   (hex)		(UN)MANNED
-A00000-AFFFFF     (base 16)		(UN)MANNED
-				Baron Ruzettelaan 3
-				Brugge    8310
-				BE
-
-60-95-CE   (hex)		Jlztlink Industry(ShenZhen)Co.,Ltd.
-900000-9FFFFF     (base 16)		Jlztlink Industry(ShenZhen)Co.,Ltd.
-				D-502#,Tongan logistics center,Sanwei hangkong 30#,Xiang street,Baoan,
-				Shenzhen  Guangdong  518000
-				CN
-
-60-95-CE   (hex)		Robot S.A.
-300000-3FFFFF     (base 16)		Robot S.A.
-				Gremi de Cirurgians i Barbers 22
-				Palma de Mallorca  SPAIN / Balearic Islands  07009
-				ES
-
-BC-97-40   (hex)		Rollock Oy
-D00000-DFFFFF     (base 16)		Rollock Oy
-				Viestitie 2 B
-				Kajaani    87700
-				FI
-
-BC-34-00   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-1C-82-59   (hex)		Shandong Luneng Intelligence Technology CO., Ltd
-000000-0FFFFF     (base 16)		Shandong Luneng Intelligence Technology CO., Ltd
-				Shandong Jinan Hightech zone Yinhe building block B, 2008 Xinluo Street
-				Jinan  Shandong  250100
-				CN
-
-1C-82-59   (hex)		Jump Trading
-700000-7FFFFF     (base 16)		Jump Trading
-				1 London Wall
-				London     EC2Y 5EA
-				GB
-
-1C-82-59   (hex)		winsun AG
-400000-4FFFFF     (base 16)		winsun AG
-				Beeschi Mattenstrasse 2
-				Steg  Wallis  3940
-				CH
-
-F8-1D-78   (hex)		TELEOFIS
-800000-8FFFFF     (base 16)		TELEOFIS
-				1K3, Electrolitny proezd
-				Moscow    115230
-				RU
-
-1C-82-59   (hex)		Applied Concepts, Inc.
-D00000-DFFFFF     (base 16)		Applied Concepts, Inc.
-				855 E Collins Blvd
-				Richardson  TX  75081
-				US
-
-84-8B-CD   (hex)		CHONGQING HUAYI KANGDAO TECHNOLOGY CO.,LTD.
-B00000-BFFFFF     (base 16)		CHONGQING HUAYI KANGDAO TECHNOLOGY CO.,LTD.
-				14th Floor, Unicom Building, 192 Yuzhou Road, Yuzhong District
-				CHONGQING    410010
-				CN
-
-84-8B-CD   (hex)		NORALSY
-900000-9FFFFF     (base 16)		NORALSY
-				16 rue Lavoisier
-				Chennevieres sur Marne  Ile de France  94430
-				FR
-
-1C-82-59   (hex)		Evondos Oy
-C00000-CFFFFF     (base 16)		Evondos Oy
-				Salorankatu 5-7
-				Salo    24240
-				FI
-
-1C-82-59   (hex)		Fagus-GreCon Greten GmbH & Co. KG
-500000-5FFFFF     (base 16)		Fagus-GreCon Greten GmbH & Co. KG
-				Hannoversche Straße 58
-				Alfeld    31061
-				DE
-
-1C-82-59   (hex)		C&A Marketing, INC.
-300000-3FFFFF     (base 16)		C&A Marketing, INC.
-				114 Tived Lane East
-				Edison   NJ  08837
-				US
-
-B0-FD-0B   (hex)		MartinLogan, Ltd.
-B00000-BFFFFF     (base 16)		MartinLogan, Ltd.
-				2101 Delware St
-				Lawrence  KS  66046
-				US
-
-B0-FD-0B   (hex)		DNESO TEN Ltd.
-600000-6FFFFF     (base 16)		DNESO TEN Ltd.
-				1-2-28,gosho-doori,hyougo-ku
-				kobe  hyougo  652-8510
-				JP
-
-84-8B-CD   (hex)		Shenzhen LTIME In-Vehicle Entertainment System Company Limited
-100000-1FFFFF     (base 16)		Shenzhen LTIME In-Vehicle Entertainment System Company Limited
-				4/F, Building 1, Nangang 1st Industrial Park No. 1029, Songbai Road, Xili, Nanshan District
-				SHENZHEN  GUANGDONG  518055
-				CN
-
-B0-FD-0B   (hex)		Haltian Products Oy
-C00000-CFFFFF     (base 16)		Haltian Products Oy
-				Yrttipellontie 1D
-				Oulu    90230
-				FI
-
-80-7B-85   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-E4-1E-0A   (hex)		IDvaco Private Limited
-200000-2FFFFF     (base 16)		IDvaco Private Limited
-				Aljunied road, 627A,06-02
-				singapore  singapore  389842
-				SG
-
-E4-1E-0A   (hex)		Connected Cars A/S
-100000-1FFFFF     (base 16)		Connected Cars A/S
-				Park Allé 355
-				Brøndby    2605
-				DK
-
-E4-1E-0A   (hex)		B METERS S.R.L.
-900000-9FFFFF     (base 16)		B METERS S.R.L.
-				VIA FRIULI 3
-				GONARS  UDINE  33050
-				IT
-
-E4-1E-0A   (hex)		Safety Vision, LLC
-B00000-BFFFFF     (base 16)		Safety Vision, LLC
-				6100 West Sam Houston Parkway North
-				Houston  TX  77041-5113
-				US
-
-E4-1E-0A   (hex)		XPR Group
-400000-4FFFFF     (base 16)		XPR Group
-				Drève Richelle 161 - WOP G
-				Waterloo    1410
-				BE
-
-E4-1E-0A   (hex)		SFC Energy AG
-600000-6FFFFF     (base 16)		SFC Energy AG
-				Eugen-Saenger-Ring 7
-				Brunnthal    85649
-				DE
-
-C8-63-14   (hex)		Shenzhen Lihewei Electronics Co.,Ltd.Hunan Branch
-B00000-BFFFFF     (base 16)		Shenzhen Lihewei Electronics Co.,Ltd.Hunan Branch
-				Room 501,Room 502,Building 2,Xinggong Technology Park,No.100 Luyun Road, High-tech Development Zone
-				Changsha  Hunan  410000
-				CN
-
-34-E1-D1   (hex)		Hubitat Inc.
-800000-8FFFFF     (base 16)		Hubitat Inc.
-				20343 N Hayden Rd, Suite 105-280
-				Scottsdale  AZ  85255
-				US
-
-34-E1-D1   (hex)		APG Cash Drawer, LLC
-B00000-BFFFFF     (base 16)		APG Cash Drawer, LLC
-				5250 Industrial Blvd NE
-				Minneapolis  MN  55421
-				US
-
-34-E1-D1   (hex)		OrCam Technologies
-A00000-AFFFFF     (base 16)		OrCam Technologies
-				Kiryat Hamada 3
-				JERUSALEM    97775603
-				IL
-
-FC-D2-B6   (hex)		Cirque Audio Technology Co.,Ltd
-600000-6FFFFF     (base 16)		Cirque Audio Technology Co.,Ltd
-				No.2 Road BeiYiHeng,HuangJiaBao Industrial Park,ShiPai Town,DongGuan City,GuangDong,China
-				DongGuan  GuangDong  523000
-				CN
-
-FC-D2-B6   (hex)		LINK (FAR-EAST) CORPORATION
-100000-1FFFFF     (base 16)		LINK (FAR-EAST) CORPORATION
-				No.192, Lian-Cheng Rd., Chung-Ho, Taipei,Taiwan 23553
-				Taipei  Taiwan  23553
-				TW
-
-FC-D2-B6   (hex)		SHEN ZHEN XIN HAO YUAN PRECISION TECHNOLOGY CO.,L TD
-400000-4FFFFF     (base 16)		SHEN ZHEN XIN HAO YUAN PRECISION TECHNOLOGY CO.,L TD
-				1,2,3 Building,XinHaoYuan Industrial Area,HeYi Community,Shajing Street,BaoAn District.Shenzhen
-				shenzhen  guangdongsheng  518000
-				CN
-
-FC-D2-B6   (hex)		Teamly Digital
-700000-7FFFFF     (base 16)		Teamly Digital
-				11-13 Avenue de Friedland
-				Paris  Ile de France  75008
-				FR
-
-74-5B-C5   (hex)		Qingdao Wintec System Co., Ltd
-E00000-EFFFFF     (base 16)		Qingdao Wintec System Co., Ltd
-				Wintec Park, Xinye Road, High-tech Zone, Qingdao, China 266114
-				QING DAO  shan dong  of  China  6805
-				CN
-
-74-5B-C5   (hex)		SIGLENT TECHNOLOGIES CO., LTD.
-200000-2FFFFF     (base 16)		SIGLENT TECHNOLOGIES CO., LTD.
-				Blog No.4 & No.5, Antongda Industrial Zone, 3rd Liuxian Road, Bao’an District, Shenzhen, 518101, China.
-				Shenzhen  Guangdong  518101
-				CN
-
-74-5B-C5   (hex)		Yekani Manufacturing PTY Ltd
-600000-6FFFFF     (base 16)		Yekani Manufacturing PTY Ltd
-				Fourways Golf Park,Selbourne Building,Roos St
-				Witkoppen  Gauteng  5214
-				ZA
-
-74-5B-C5   (hex)		SHENZHEN ATX TECHNOLOGY CO.,LTD 
-700000-7FFFFF     (base 16)		SHENZHEN ATX TECHNOLOGY CO.,LTD 
-				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District
-				Shenzhen  GUANGDONG  518000
-				CN
-
-E4-4C-C7   (hex)		Ottomate International Pvt. Ltd.
-900000-9FFFFF     (base 16)		Ottomate International Pvt. Ltd.
-				Awfis Building, 5th Floor, Plot # 7, Sector-44
-				Gurgaon  Haryana  122003
-				IN
-
-E4-4C-C7   (hex)		ACS-Solutions GmbH
-100000-1FFFFF     (base 16)		ACS-Solutions GmbH
-				Science Park 2
-				Saarbrücken    66123
-				DE
-
-E4-4C-C7   (hex)		Telo Systems Limitd
-D00000-DFFFFF     (base 16)		Telo Systems Limitd
-				4/F, Chuangye Building, Seven-Star Park, Yu'an 2nd Road
-				ShenZhen  GuangDong  518000
-				CN
-
-E4-4C-C7   (hex)		SmallHD
-B00000-BFFFFF     (base 16)		SmallHD
-				301 Gregson Dr
-				Cary  NC  27511
-				US
-
-74-5B-C5   (hex)		SpringCard
-500000-5FFFFF     (base 16)		SpringCard
-				2 voie La Cardon, Parc Gutenberg
-				PALAISEAU  IDF  91120
-				FR
-
-74-5B-C5   (hex)		IRS Systementwicklung GmbH
-000000-0FFFFF     (base 16)		IRS Systementwicklung GmbH
-				Pfaffenthanner Weg, 5
-				Brennberg    93179
-				DE
-
-28-FD-80   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-E0-5A-9F   (hex)		ShenZhen Mornsun Smartlinker Limited Co., LTD
-C00000-CFFFFF     (base 16)		ShenZhen Mornsun Smartlinker Limited Co., LTD
-				South 2nd Flr, 23 Bldg, Yuanxi Industrial Zone, Kefa Rd, Nanshan Keji Yuan
-				ShenZhen  GuangDong  518058
-				CN
-
-4C-BC-98   (hex)		Elink Technology (Shenzhen) Co., Limited
-D00000-DFFFFF     (base 16)		Elink Technology (Shenzhen) Co., Limited
-				C-323,Baoan,Xinyidai Info.Tech.Industrial Park, No.139 Chuangye Er Rd.,Baoan District
-				Shenzhen  Guangdong  518101
-				CN
-
-4C-BC-98   (hex)		Charge-Amps AB
-000000-0FFFFF     (base 16)		Charge-Amps AB
-				GUSTAV III:S BOULEVARD 42, 8TR
-				SOLNA    16973
-				SE
-
-38-B1-9E   (hex)		ShenZhen ShuaiXian Electronic Equipment Co.Ltd
-E00000-EFFFFF     (base 16)		ShenZhen ShuaiXian Electronic Equipment Co.Ltd
-				No. 10, Lane 3, Longxing Rd, Dakang Village,HengGang Town
-				ShenZhen  Guangdong  518115
-				CN
-
-D8-86-0B   (hex)		Auvidea GmbH
-300000-3FFFFF     (base 16)		Auvidea GmbH
-				Kellerberg 3
-				Denklingen    86920
-				DE
-
-28-F5-37   (hex)		1MORE
-800000-8FFFFF     (base 16)		1MORE
-				TianliaoBuilding F14
-				New Materials Industrial Park,Xueyuan Blvd  Shenzhen, Nanshan District  518005
-				CN
-
-D8-86-0B   (hex)		 YUSAN INDUSTRIES LIMITED  
-C00000-CFFFFF     (base 16)		 YUSAN INDUSTRIES LIMITED  
-				UNIT 8-9, 8/F., HONOUR INDUSTRIAL CENTRE, 6 SUN YIP STREET, CHAI WAN
-				HongKong    999077
-				HK
-
-D8-86-0B   (hex)		Library Ideas
-B00000-BFFFFF     (base 16)		Library Ideas
-				PO Box 9
-				Vienna  VA  22183
-				US
-
-D8-86-0B   (hex)		ComNav Technology Ltd.
-D00000-DFFFFF     (base 16)		ComNav Technology Ltd.
-				Buliding 2,No. 618  Chengliu Middle  Road
-				JiaDing District  Shanghai  201801
-				CN
-
-38-B1-9E   (hex)		Star Electronics GmbH & CoKG
-500000-5FFFFF     (base 16)		Star Electronics GmbH & CoKG
-				Jahnstraße, 86
-				Göppingen    73037
-				DE
-
-38-B1-9E   (hex)		HDANYWHERE
-200000-2FFFFF     (base 16)		HDANYWHERE
-				Unit 23 Link Business Centre
-				Malvern  Worcs  WR14 1UQ
-				GB
-
-38-B1-9E   (hex)		Aeroespacial Guosheng Technology Co., Ltd
-A00000-AFFFFF     (base 16)		Aeroespacial Guosheng Technology Co., Ltd
-				501 Edificio Gaode, No. 10 Huayuan East Road,
-				Haiden DIstrict  Beijing  100191
-				CN
-
-D8-86-0B   (hex)		Shenzhen Yidong Technology Co.,Ltd
-E00000-EFFFFF     (base 16)		Shenzhen Yidong Technology Co.,Ltd
-				13th Floor,Jia'anda Building, No.110 Huafan Road,Tongsheng Community, Dalang Street,Longhua District
-				Shenzhen  Guangdong  518000
-				CN
-
-D8-86-0B   (hex)		VRINDA NANO TECHNOLOGIES PVT LTD
-800000-8FFFFF     (base 16)		VRINDA NANO TECHNOLOGIES PVT LTD
-				PLOT NO.283, SECTOR 7, IMT MANESAR, GURGAON 
-				INDIA  HARYANA  122050
-				IN
-
-38-B1-9E   (hex)		Triple Jump Medical
-000000-0FFFFF     (base 16)		Triple Jump Medical
-				5 HaCarmel St.
-				Yokneam    2069203
-				IL
-
-38-B1-9E   (hex)		BoCo Inc.
-800000-8FFFFF     (base 16)		BoCo Inc.
-				Isshin Bldg 6F,Yaesu 2-11-7
-				Chuo-ku, Tokyo    104-0028
-				JP
-
-38-B1-9E   (hex)		Gesellschaft industrieller Technologien 
-C00000-CFFFFF     (base 16)		Gesellschaft industrieller Technologien 
-				Hauptstraße 10
-				Großbeeren    14979 
-				DE
-
-CC-D3-9D   (hex)		Q-Branch Labs, Inc.
-B00000-BFFFFF     (base 16)		Q-Branch Labs, Inc.
-				427 N. Tatnall St., Suite #82712
-				Wilmington  DE  19801
-				US
-
-CC-D3-9D   (hex)		Shenzhen Chenggu Technology Co., Ltd
-400000-4FFFFF     (base 16)		Shenzhen Chenggu Technology Co., Ltd
-				Longgang District Jihua street Zhonghaixin Industrial Innovation City 19A 3F
-				Shenzhen  Guagndong  518112
-				CN
-
-CC-D3-9D   (hex)		Krontech
-600000-6FFFFF     (base 16)		Krontech
-				I.T.U ARI 3 Teknokent Kron Telekomunikasyon, Maslak
-				Istanbul    34467
-				TR
-
-CC-D3-9D   (hex)		Bejing Nexsec Inc.
-900000-9FFFFF     (base 16)		Bejing Nexsec Inc.
-				Floor 5, Room 5001,Buliding No.4,Fengxian Middle Road No.7
-				(Beike Industrial Park),Haidian District,  Beijing  100094
-				CN
-
-CC-D3-9D   (hex)		Obelisk Inc.
-800000-8FFFFF     (base 16)		Obelisk Inc.
-				67 Batterymarch Street, Floor 4
-				Boston    02110
-				US
-
-D4-25-CC   (hex)		TAKUMI JAPAN LTD
-900000-9FFFFF     (base 16)		TAKUMI JAPAN LTD
-				3-9-3 Uchiyama building 7F Nishishinbashi
-				Minato-ku Tokyo  Tokyo  1050003
-				JP
-
-9C-69-B4   (hex)		NINGBO SHEN LINK COMMUNICATION TECHNOLOGY CO., LTD
-E00000-EFFFFF     (base 16)		NINGBO SHEN LINK COMMUNICATION TECHNOLOGY CO., LTD
-				NO.87,FENGMINGROAD,LIZHOUSTREET, YUYAO, ZHEJIANG
-				NINGBO  ZHEJIANG  315400
-				CN
-
-4C-91-7A   (hex)		Openeye
-600000-6FFFFF     (base 16)		Openeye
-				23221 East Knox Avenue
-				Liberty Lake  WA  99019
-				US
-
-4C-91-7A   (hex)		Smart Access
-300000-3FFFFF     (base 16)		Smart Access
-				Nauchnuy Proezd 10
-				Moscow    117246
-				RU
-
-9C-69-B4   (hex)		Suzhou Fitcan Technology Co.,LTD
-000000-0FFFFF     (base 16)		Suzhou Fitcan Technology Co.,LTD
-				Kechuang Road
-				Suzhou City  Jiangsu Province  215163
-				CN
-
-9C-69-B4   (hex)		Guangdong Hanwei intergration Co.,Ltd
-C00000-CFFFFF     (base 16)		Guangdong Hanwei intergration Co.,Ltd
-				Room 404,7# Hongtai Zhihui Gu, No.23 Sicheng Road
-				Guangzhou  Guangdong  510663
-				CN
-
-9C-69-B4   (hex)		Shenzhen jiahua zhongli technology co.LTD
-600000-6FFFFF     (base 16)		Shenzhen jiahua zhongli technology co.LTD
-				3/F,building B,JINHU building,industrial road,longhua new district
-				Shenzhen  Guangdong  518109
-				CN
-
-6C-DF-FB   (hex)		Nanjing Buruike Electronics Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		Nanjing Buruike Electronics Technology Co., Ltd.
-				Jiangning District Moling Street, SuYuan Avenue No.117 Building 2, Floor 5 Room 541
-				Nanjing  Jiangsu  210000
-				CN
-
-4C-91-7A   (hex)		Alibaba (Beijing) Software Service Inc.
-C00000-CFFFFF     (base 16)		Alibaba (Beijing) Software Service Inc.
-				No. 301, 3 floor, 9 building, four district, Wangjing East Garden, Chaoyang District,
-				Beijing  Beijing  100102
-				CN
-
-4C-91-7A   (hex)		mtekvision
-500000-5FFFFF     (base 16)		mtekvision
-				6F, C's Tower, 58, Pangyo-ro 255veon-gil, Bundang-gu
-				seongnam-si  Gyeonggi-do  13486
-				KR
-
-7C-BC-84   (hex)		Beijing Topnew Group Co., Ltd
-E00000-EFFFFF     (base 16)		Beijing Topnew Group Co., Ltd
-				No.9, A, Jin Tai Li, ChaoYang District 
-				Beijing    100026
-				CN
-
-7C-BC-84   (hex)		Shenzhen Kuang-chi  Space Technology Co., Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Kuang-chi  Space Technology Co., Ltd.
-				No. 1 building, No. 2 Reservoir Road, Nan Keng community , Bantian street, Longgang District, Shenzhen
-				shenzhen  Guangdong  518000
-				CN
-
-6C-DF-FB   (hex)		Lineable Inc
-400000-4FFFFF     (base 16)		Lineable Inc
-				5, Ttukseom-ro 1na-gil, Seongdong-gu, Seoul, Republic of Korea, Heyground, G505
-				Seoul  Seoul  04779
-				KR
-
-98-F9-C7   (hex)		NC-LINK Technology Co., Ltd.
-E00000-EFFFFF     (base 16)		NC-LINK Technology Co., Ltd.
-				Block A2 Jinhai Business Mansion, Jinhai Road, Xixiang town
-				Shenzhen  Guangdong  518101
-				CN
-
-7C-BC-84   (hex)		Shanghai Yitu Technology Co. Ltd
-300000-3FFFFF     (base 16)		Shanghai Yitu Technology Co. Ltd
-				23/F, Tower 1, No.523 Loushanguan Road, Changning District
-				Shanghai    200051
-				CN
-
-0C-FE-5D   (hex)		Antailiye Technology Co.,Ltd
-600000-6FFFFF     (base 16)		Antailiye Technology Co.,Ltd
-				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen
-				SHEN ZHEN  GUANGDONG  518000
-				CN
-
-0C-FE-5D   (hex)		Yantai Dongfang Wisdom Electic Co.,Ltd.
-400000-4FFFFF     (base 16)		Yantai Dongfang Wisdom Electic Co.,Ltd.
-				6 Jindu Road
-				Yantai  Shandong  264003
-				CN
-
-98-F9-C7   (hex)		Pozyx NV
-200000-2FFFFF     (base 16)		Pozyx NV
-				Vrijdagmarkt 10/201
-				Gent  Oost-Vlaanderen  9000
-				BE
-
-0C-FE-5D   (hex)		SELECTRIC Nachrichten-Systeme GmbH
-500000-5FFFFF     (base 16)		SELECTRIC Nachrichten-Systeme GmbH
-				Haferlandweg 18
-				Münster    48155
-				DE
-
-0C-FE-5D   (hex)		Vermes Microdispensing GmbH
-700000-7FFFFF     (base 16)		Vermes Microdispensing GmbH
-				Palnkamer Strasse 18
-				Otterfing  Bayern  83624
-				DE
-
-10-07-23   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-6C-5C-3D   (hex)		IskraUralTEL
-900000-9FFFFF     (base 16)		IskraUralTEL
-				Komvuzovkaya
-				Ekaterinburg    620137
-				RU
-
-6C-5C-3D   (hex)		HTI Co., LTD.
-400000-4FFFFF     (base 16)		HTI Co., LTD.
-				Rm741, Kyungin Ctr., 20, Baekbeom-ro 577, Bupyung-Gu
-				Incheon    21449
-				KR
-
-A8-3F-A1   (hex)		Plejd AB
-700000-7FFFFF     (base 16)		Plejd AB
-				Göteborgsvägen 52
-				Mölndal    431 37
-				SE
-
-A8-3F-A1   (hex)		Guangzhou Navigateworx Technologies Co., Limited
-E00000-EFFFFF     (base 16)		Guangzhou Navigateworx Technologies Co., Limited
-				Room 2320, Qianjin Commercial Building, Dongpu Town
-				Guangzhou  Guangdong  510660
-				CN
-
-A8-3F-A1   (hex)		Shanghai East China Computer Co., Ltd
-A00000-AFFFFF     (base 16)		Shanghai East China Computer Co., Ltd
-				27/F Tower B, No.391 Guiping Rd
-				Shanghai  Shanghai  200233
-				CN
-
-A0-3E-6B   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-A8-3F-A1   (hex)		Laonz Co.,Ltd
-C00000-CFFFFF     (base 16)		Laonz Co.,Ltd
-				15-3,Eonnam-Gil,Seocho-gu
-				Seoul    06779
-				KR
-
-3C-6A-2C   (hex)		figur8, Inc.
-300000-3FFFFF     (base 16)		figur8, Inc.
-				2 Park Plaza, Suite 605
-				BOSTON  MA  02116
-				US
-
-30-0A-60   (hex)		Realtime biometrics India pvt ltd
-600000-6FFFFF     (base 16)		Realtime biometrics India pvt ltd
-				C-68,1st Floor ganesh nagar pandav nagar complex
-				delhi  Delhi  110092
-				IN
-
-A4-ED-43   (hex)		Shanghai  Facom  Electronics Technology  Co, ltd.
-600000-6FFFFF     (base 16)		Shanghai  Facom  Electronics Technology  Co, ltd.
-				The third floor, A area,         Huaxu road No. 685
-				Shanghai  Xujing town，Qingpu  200217
-				CN
-
-30-0A-60   (hex)		Advanced Electronic Designs, Inc.
-200000-2FFFFF     (base 16)		Advanced Electronic Designs, Inc.
-				233 Enterprise Blvd
-				Bozeman  MT  59718
-				US
-
-A0-28-33   (hex)		SHANGHAI XUNTAI INFORMATION TECHNOLOGY CO.,LTD.
-300000-3FFFFF     (base 16)		SHANGHAI XUNTAI INFORMATION TECHNOLOGY CO.,LTD.
-				ET SPACE, ZIZHU PARK, NO.555, DONGCHUAN RD.
-				SHANGHAI  SHANGHAI  200241
-				CN
-
-A0-28-33   (hex)		Ordercube GmbH
-100000-1FFFFF     (base 16)		Ordercube GmbH
-				Aßlinger Str. 6
-				Grafing b. München  Bayern  85567
-				DE
-
-A0-28-33   (hex)		Medical Evolution Kft
-A00000-AFFFFF     (base 16)		Medical Evolution Kft
-				Liszenko telep 1
-				Pomaz    2013
-				HU
-
-A0-28-33   (hex)		HZHY TECHNOLOGY
-800000-8FFFFF     (base 16)		HZHY TECHNOLOGY
-				The 2th floor,Longzeyuan Multi-use
-				beijing    102208
-				CN
-
-A4-ED-43   (hex)		Beijing ICPC CO.,Ltd.
-500000-5FFFFF     (base 16)		Beijing ICPC CO.,Ltd.
-				Fengtai District HuaXiang LiuQuan  West Road NO.8 Xinhua ShuangChuangYuan Building B Floor 2 NO.203
-				Beijing  Beijing  100070
-				CN
-
-A4-ED-43   (hex)		NETAS TELEKOMUNIKASYON A.S.
-400000-4FFFFF     (base 16)		NETAS TELEKOMUNIKASYON A.S.
-				Kurtköy Mahallesi, Osmanlı Blv. No:11
-				Pendik  Istanbul  34912
-				TR
-
-A4-ED-43   (hex)		Guangzhou Maxfaith Communication Technology Co.,LTD.
-A00000-AFFFFF     (base 16)		Guangzhou Maxfaith Communication Technology Co.,LTD.
-				3rd Floor,Office of Youtong Zone,No.139,Zhongshan Avenue
-				Guangzhou    510665
-				CN
-
-84-89-EC   (hex)		Price Industries Limited
-D00000-DFFFFF     (base 16)		Price Industries Limited
-				638 Raleigh Street
-				Winnipeg  Manitoba  R2K3Z9
-				CA
-
-30-09-F9   (hex)		ZhongLi HengFeng (Shenzhen) Technology co.,Ltd.
-E00000-EFFFFF     (base 16)		ZhongLi HengFeng (Shenzhen) Technology co.,Ltd.
-				Room 402C Donglian Buiding,Chuangye NO 2 road,Baoan
-				Shenzhen  Guangdong  430000
-				CN
-
-30-09-F9   (hex)		Sichuan Nebula Networks Co.,LTD.
-B00000-BFFFFF     (base 16)		Sichuan Nebula Networks Co.,LTD.
-				Floor 21 Building 2,No.200 Tianquan Road,West Hi-Tech Zone,
-				Chengdu  Sichuan  611731
-				CN
-
-84-89-EC   (hex)		thousand star tech LTD.
-200000-2FFFFF     (base 16)		thousand star tech LTD.
-				guan nan yuan 1 road dangdai optical valley dream workshop
-				wuhan  hubei  430070
-				CN
-
-9C-F6-DD   (hex)		Shanxi ZhuoZhi fei High Electronic Technology Co. Ltd.
-E00000-EFFFFF     (base 16)		Shanxi ZhuoZhi fei High Electronic Technology Co. Ltd.
-				Red flag East Street
-				yuncheng  shanxi  044000
-				CN
-
-B8-D8-12   (hex)		IPM Sales and service Co.,Ltd.
-200000-2FFFFF     (base 16)		IPM Sales and service Co.,Ltd.
-				250-252 Soi 29 Somdet Prachaotaksin Road
-				Bangkok  Bangkok  10600
-				TH
-
-9C-F6-DD   (hex)		Beijing Sifang Automation Co., Ltd.
-200000-2FFFFF     (base 16)		Beijing Sifang Automation Co., Ltd.
-				No.9,Shangdi 4th Street,Haidian District
-				Beijing    100085
-				CN
-
-9C-F6-DD   (hex)		b8ta Inc.
-500000-5FFFFF     (base 16)		b8ta Inc.
-				164 Townsend St
-				San Francisco  CA  94107
-				US
-
-9C-F6-DD   (hex)		Annapurna labs
-000000-0FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-30-09-F9   (hex)		Honeywell
-C00000-CFFFFF     (base 16)		Honeywell
-				13350 US Hwy 19 N 
-				Clearwater  null  33764
-				US
-
-C0-83-59   (hex)		CHONGQING JIUYU SMART TECHNOLOGY CO.LTD.
-000000-0FFFFF     (base 16)		CHONGQING JIUYU SMART TECHNOLOGY CO.LTD.
-				T2-11-3, No. 2 Jiangbeizui Financial City, Jiangbei District,
-				Chongqing  Chongqing  400000
-				CN
-
-04-C3-E6   (hex)		Shenzhen Shuotian Information Technology Co., LTD
-600000-6FFFFF     (base 16)		Shenzhen Shuotian Information Technology Co., LTD
-				Xixiang Street , Bao'an District
-				Shenzhen  Guangdong  518000
-				CN
-
-04-C3-E6   (hex)		Advanced Digital Technologies, s.r.o.
-700000-7FFFFF     (base 16)		Advanced Digital Technologies, s.r.o.
-				Purkynova 649/127
-				Medlanky  Brno  612 00
-				CZ
-
-04-C3-E6   (hex)		 Guangdong New Pulse Electric Co., Ltd.
-100000-1FFFFF     (base 16)		 Guangdong New Pulse Electric Co., Ltd.
-				No. 38 South Kemu Road
-				 Guangzhou City  Tianhe District, Guangdong Province  510520
-				CN
-
-3C-42-7E   (hex)		Xiaoniu network technology (Shanghai) Co., Ltd.
-E00000-EFFFFF     (base 16)		Xiaoniu network technology (Shanghai) Co., Ltd.
-				Room 706, building 3, no.20 east road, jingan district.
-				Shang hai    200040
-				CN
-
-04-C3-E6   (hex)		SiS Technology
-200000-2FFFFF     (base 16)		SiS Technology
-				Business Park Varna, building B1, floor 4
-				Varna    9000
-				BG
-
-3C-42-7E   (hex)		Dongguan Taide Industrial Co.,Ltd.
-100000-1FFFFF     (base 16)		Dongguan Taide Industrial Co.,Ltd.
-				Taide Industrial Park,Phase 2 Jinfenghuang Industrial District Huangdong,Fenggang Town
-				Dongguan City  GuangDong  523696
-				CN
-
-D4-7C-44   (hex)		YunDing Network Technology (Beijing) Co., Ltd
-200000-2FFFFF     (base 16)		YunDing Network Technology (Beijing) Co., Ltd
-				A521,Floor 5, Tencent Space Building No.388, Hui long guan East St. 
-				Beijing    100000
-				CN
-
-D4-7C-44   (hex)		Suzhou Wan Dian Zhang Network Technology Co., Ltd
-900000-9FFFFF     (base 16)		Suzhou Wan Dian Zhang Network Technology Co., Ltd
-				No. 209 Zhuyuan Road, High-tech Zone
-				Suzhou City  Jiangsu  215010
-				CN
-
-B4-4B-D6   (hex)		 Shenzhen Huabai Intelligent Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		 Shenzhen Huabai Intelligent Technology Co., Ltd.
-				Science Park South District Shenzhen Digital
-				Technology Park Building B2 4th Floor Area A  Shenzhen, Guangdong  518000
-				CN
-
-3C-42-7E   (hex)		GJS Co., Ltd.
-700000-7FFFFF     (base 16)		GJS Co., Ltd.
-				305, Qianhai Innovation and Entrepreneur Hub, Bldg. C Qianwan 1st Rd., Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-3C-42-7E   (hex)		TAITEX CORPORATION
-900000-9FFFFF     (base 16)		TAITEX CORPORATION
-				1-7-12,WAKATAKE
-				ICHINOMIYA-SHI  AICHI-KEN  491-0832
-				JP
-
-B4-4B-D6   (hex)		Impakt S.A.
-C00000-CFFFFF     (base 16)		Impakt S.A.
-				Stanislawa Lema 16
-				Mosina  Wielkopolska  62-050
-				PL
-
-A0-19-B2   (hex)		Power Diagnostic Service Co., LTD.
-300000-3FFFFF     (base 16)		Power Diagnostic Service Co., LTD.
-				No.10, Ln.482, Sec.4 Zhonghua Rd.
-				Hsinchu City    30094
-				TW
-
-CC-D3-1E   (hex)		CUJO LLC
-D00000-DFFFFF     (base 16)		CUJO LLC
-				2512 Artesia Blvd
-				Redondo Beach  CA  90278
-				US
-
-A0-19-B2   (hex)		LDA Technologies
-C00000-CFFFFF     (base 16)		LDA Technologies
-				2680 Matheson Blvd E., Suite 102
-				Mississauga  Ontario  L4W2C6
-				CA
-
-A0-19-B2   (hex)		Vast Production Services
-000000-0FFFFF     (base 16)		Vast Production Services
-				307 Robbins Drive
-				Troy  MI  48083
-				US
-
-74-F8-DB   (hex)		Ballard Technology, Inc,
-A00000-AFFFFF     (base 16)		Ballard Technology, Inc,
-				11400 Airport Rd
-				Everett    98204
-				US
-
-2C-48-35   (hex)		DPS Electronics
-800000-8FFFFF     (base 16)		DPS Electronics
-				317 Gallatin Park Dr #2
-				Bozeman  MT  59715
-				US
-
-2C-48-35   (hex)		Shanghai Visteon Automotive Electronics System CO. Ltd.
-B00000-BFFFFF     (base 16)		Shanghai Visteon Automotive Electronics System CO. Ltd.
-				No.1268, East Kangqiao Road, Pudong District,
-				ShangHai    201315
-				CN
-
-8C-1C-DA   (hex)		Anntec （Beijing） Technology Co.,Ltd.
-400000-4FFFFF     (base 16)		Anntec （Beijing） Technology Co.,Ltd.
-				F803, Shangdi Third Street, No.9,HaiDian District
-				Beijing    100080
-				CN
-
-3C-24-F0   (hex)		CASKY eTech Co., Ltd.
-500000-5FFFFF     (base 16)		CASKY eTech Co., Ltd.
-				10th Floor, Viva Plaza, Yard 29 Suzhou Street, Haidian District,
-				Beijing  Beijing  100080
-				CN
-
-0C-73-EB   (hex)		Green Fox Electro AS
-600000-6FFFFF     (base 16)		Green Fox Electro AS
-				Wessels veg 63
-				STJORDAL    NO-7502
-				NO
-
-8C-1C-DA   (hex)		China Potevio Co., Ltd
-A00000-AFFFFF     (base 16)		China Potevio Co., Ltd
-				No.6, haidian north second street, haidian district, Beijing
-				Beijing  Beijing  100080
-				CN
-
-3C-24-F0   (hex)		Travis Holding B.V.
-D00000-DFFFFF     (base 16)		Travis Holding B.V.
-				Stationsplein 45, A4.002 3013 AK
-				Rotterdam    3013AK
-				NL
-
-3C-24-F0   (hex)		Abrites Ltd.
-100000-1FFFFF     (base 16)		Abrites Ltd.
-				147 Cherni Vrah Blvd.
-				Sofia  Sofia  1407
-				BG
-
-48-0B-B2   (hex)		Solaredge LTD.
-500000-5FFFFF     (base 16)		Solaredge LTD.
-				Hamada 1
-				Herzelia    4673335
-				IL
-
-48-0B-B2   (hex)		shanghai Rinlink  Intelligent Technology Co., Ltd.
-300000-3FFFFF     (base 16)		shanghai Rinlink  Intelligent Technology Co., Ltd.
-				Room1510,ROAD Xiuwen,Minhang District
-				shanghai    201100
-				CN
-
-88-5F-E8   (hex)		Unicom Global, Inc.
-E00000-EFFFFF     (base 16)		Unicom Global, Inc.
-				581, Ruiguang Road, Neihu Dist.
-				Taipei    11492
-				TW
-
-30-1F-9A   (hex)		 FINE TRIUMPH TECHNOLOGY CORP.,LTD.
-800000-8FFFFF     (base 16)		 FINE TRIUMPH TECHNOLOGY CORP.,LTD.
-				Xixiang
-				Shenzhen  Guangdong  518126
-				CN
-
-30-1F-9A   (hex)		Beijing Surestar Technology Co. Ltd,
-500000-5FFFFF     (base 16)		Beijing Surestar Technology Co. Ltd,
-				Room 502, building 1, No. 5 Yongfeng Road, Haidian District
-				Beijing    100089
-				CN
-
-30-1F-9A   (hex)		ILSAN ELECTRONICS
-000000-0FFFFF     (base 16)		ILSAN ELECTRONICS
-				433Beon-gil 52,Sasang-ro,Sasang-gu
-				Busan    46923
-				KR
-
-30-1F-9A   (hex)		Dewesoft d.o.o.
-100000-1FFFFF     (base 16)		Dewesoft d.o.o.
-				Gabrsko 11a
-				Trbovlje    1420
-				SI
-
-F0-41-C8   (hex)		SHENZHEN WISEWING INTERNET TECHNOLOGY CO.,LTD
-300000-3FFFFF     (base 16)		SHENZHEN WISEWING INTERNET TECHNOLOGY CO.,LTD
-				No.826,Zone 1,Block B,Famous industrial product display purchasing center,Baoyuan Road,Xixiang,Bao'an Dis., Shenzhen,P.R.China
-				shenzhen  China  518102
-				CN
-
-88-A9-A7   (hex)		Thomas & Darden, Inc
-400000-4FFFFF     (base 16)		Thomas & Darden, Inc
-				916 Springdale Rd Bldg 4 #104
-				Austin    78702
-				US
-
-F0-41-C8   (hex)		Powervault Ltd
-B00000-BFFFFF     (base 16)		Powervault Ltd
-				29 Shand Street, London Bridge
-				London    SE1 2ES
-				GB
-
-A4-DA-22   (hex)		EHO.LINK
-C00000-CFFFFF     (base 16)		EHO.LINK
-				5 Avenue de Saint Menet, Imm. Axiome, Bat. B
-				Marseille    13011
-				FR
-
-88-A9-A7   (hex)		Zhejiang Haoteng Electronic Technology Co.,Ltd.
-A00000-AFFFFF     (base 16)		Zhejiang Haoteng Electronic Technology Co.,Ltd.
-				Zhejiang Lishui city streets Nanming mountain Shek road Liandu District No. 268 Building 2 block B
-				Lishui  Zhejiang  323000
-				CN
-
-DC-E5-33   (hex)		Giant Power Technology Biomedical Corporation
-E00000-EFFFFF     (base 16)		Giant Power Technology Biomedical Corporation
-				Rm201, 2nd Educational Building, No. 84, Gongzhuan Rd, Taishan Dist
-				New Taipei City    24301
-				TW
-
-DC-E5-33   (hex)		Suzhou ATES electronic technology co.LTD
-D00000-DFFFFF     (base 16)		Suzhou ATES electronic technology co.LTD
-				NO.2 aimin road,Xiangcheng district
-				 Suzhou city  Jiangsu Province  215002
-				CN
-
-DC-E5-33   (hex)		BRCK
-C00000-CFFFFF     (base 16)		BRCK
-				PO Box 58275-00200, 2nd Floor Bishop Magua Center, George Padmore Lane, 2nd Floor Bishop Magua Center, George Padmore Lane
-				Nairobi  Nairobi  00200
-				KE
-
-DC-E5-33   (hex)		shenzhen bangying electronics co,.ltd
-400000-4FFFFF     (base 16)		shenzhen bangying electronics co,.ltd
-				3/F Building 16,Hongfa industrialPark,Tangtou Shiyan Town
-				shenzhen  guangdong  518000
-				CN
-
-DC-E5-33   (hex)		Tiertime Corporation
-900000-9FFFFF     (base 16)		Tiertime Corporation
-				2398 Walsh Avenue
-				Santa Clara  CA  95051
-				US
-
-DC-E5-33   (hex)		FLYHT Aerospace
-000000-0FFFFF     (base 16)		FLYHT Aerospace
-				300E 1144 - 29th St. N.E.
-				Calgary  AB  T2E7P1
-				CA
-
-9C-43-1E   (hex)		SuZhou Jinruiyang Information Technology CO.,LTD
-C00000-CFFFFF     (base 16)		SuZhou Jinruiyang Information Technology CO.,LTD
-				NO.1003 Room A1 Buliding Tengfei Business Park in Suzhou Industrial Park.
-				Suzhou  Jiangsu  215123
-				CN
-
-9C-43-1E   (hex)		JNL Technologies Inc
-B00000-BFFFFF     (base 16)		JNL Technologies Inc
-				W1205 Industrial Dr
-				Ixonia  WI  53036
-				US
-
-C4-FF-BC   (hex)		iMageTech CO.,LTD.
-400000-4FFFFF     (base 16)		iMageTech CO.,LTD.
-				5F., No.16, Lane 15, Sec. 6, Mincyuan E. Rd., Neihu District,
-				TAIPEI    114
-				TW
-
-C4-FF-BC   (hex)		SHENZHEN KALIF ELECTRONICS CO.,LTD
-300000-3FFFFF     (base 16)		SHENZHEN KALIF ELECTRONICS CO.,LTD
-				1、2 and 3 Floor, No.114, Haochong No.2 Industry Area, Hongxing Community, Songgang, Baoan, Shenzhen 
-				SHENZHEN  GuangDong  518105
-				CN
-
-28-2C-02   (hex)		Epoch International Enterprises, Inc.
-C00000-CFFFFF     (base 16)		Epoch International Enterprises, Inc.
-				10542 Calle Lee, #114
-				Los Alamitos  CA  90720
-				US
-
-28-2C-02   (hex)		EFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA
-400000-4FFFFF     (base 16)		EFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA
-				Dietla 93/6
-				Kraków    31-031
-				PL
-
-F8-B5-68   (hex)		PT. Eyro Digital Teknologi
-100000-1FFFFF     (base 16)		PT. Eyro Digital Teknologi
-				Jalan Amir Mahmud IX/23
-				Surabaya  Jawa Timur  60294
-				ID
-
-40-48-FD   (hex)		RL Controls LLC.
-300000-3FFFFF     (base 16)		RL Controls LLC.
-				2 G Gill St
-				Woburn  MA  01801
-				US
-
-40-48-FD   (hex)		Dynamic Engineering
-400000-4FFFFF     (base 16)		Dynamic Engineering
-				Dynamic Engineering, 150 DuBois St. Suite C
-				Santa Cruz  CA  95060
-				US
-
-40-48-FD   (hex)		Magenta Labs, Inc.
-B00000-BFFFFF     (base 16)		Magenta Labs, Inc.
-				P.O. BOX 77234
-				San Francisco  CA  94107
-				US
-
-40-48-FD   (hex)		Fast Programming
-100000-1FFFFF     (base 16)		Fast Programming
-				Alyarmouk
-				Riyadh  Ar Riyadh  13251
-				SA
-
-40-48-FD   (hex)		SMART SENSOR DEVICES AB
-E00000-EFFFFF     (base 16)		SMART SENSOR DEVICES AB
-				Sollentunavägen 67A
-				Sollentuna  Stockholm  19140
-				SE
-
-38-73-EA   (hex)		Eyesight(Shanghai)Communication Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Eyesight(Shanghai)Communication Technology Co.,Ltd.
-				Room 820, C/F, Building 1, NO. 3000 Longdong Avenue, China(Shanghai) Pilot Free Trade
-				ShangHai  ShangHai  201203
-				CN
-
-38-73-EA   (hex)		L-3 Communications Mobile-Vision, Inc.
-000000-0FFFFF     (base 16)		L-3 Communications Mobile-Vision, Inc.
-				400 Commons Way STE F
-				Rockaway    07866
-				US
-
-38-73-EA   (hex)		Rock Electronic Co., Ltd.
-800000-8FFFFF     (base 16)		Rock Electronic Co., Ltd.
-				No. 1 Chuangsheng Rd. 
-				shenzhen  Guangdong  518055
-				CN
-
-EC-9F-0D   (hex)		Paw-Taw-John Services, Inc.
-500000-5FFFFF     (base 16)		Paw-Taw-John Services, Inc.
-				18125 N Ramsey Rd
-				Rathdrum  ID  83858-8288
-				US
-
-EC-9F-0D   (hex)		Hesai Photonics Technology Co., Ltd
-000000-0FFFFF     (base 16)		Hesai Photonics Technology Co., Ltd
-				10th Floor, Building L2-B, Hongqiao World Center
-				Shanghai  Shanghai  200010
-				CN
-
-EC-9F-0D   (hex)		Sarcos Corp
-C00000-CFFFFF     (base 16)		Sarcos Corp
-				360 S Wakara Way
-				Salt Lake City  UT  84108
-				US
-
-EC-9F-0D   (hex)		FCI
-900000-9FFFFF     (base 16)		FCI
-				B-7F,Silicon Park, 35, Pangyo-ro 255 beon-gil,Bundang-gu
-				Seongnam si  Gyeonggi-do. KOREA  13486
-				KR
-
-EC-9F-0D   (hex)		Bei jing Lian Shan times Techonology Co.Ltd
-700000-7FFFFF     (base 16)		Bei jing Lian Shan times Techonology Co.Ltd
-				Beijing Haidian.No.2 of Yong Cheng North Road Building 1.402
-				Beijing    100094
-				CN
-
-34-D0-B8   (hex)		eesy-innovation GmbH
-500000-5FFFFF     (base 16)		eesy-innovation GmbH
-				Otto-Hahn-Str. 13b
-				Munich  Bavaria  85521
-				DE
-
-34-D0-B8   (hex)		Vtrek Group International Ltd.
-800000-8FFFFF     (base 16)		Vtrek Group International Ltd.
-				Room 1204,12/F.,Tower1,Silvercord,30 Canton Road,Tsim Sha Tsui
-				Hong Kong    999077
-				HK
-
-34-D0-B8   (hex)		Blustream Pty Ltd
-200000-2FFFFF     (base 16)		Blustream Pty Ltd
-				24 Lionel Road
-				Mt. Waverley  Victoria  3149
-				AU
-
-AC-1D-DF   (hex)		CRDE
-300000-3FFFFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-34-D0-B8   (hex)		Tascent, Inc.
-300000-3FFFFF     (base 16)		Tascent, Inc.
-				475 Alberto Way, Suite #200
-				Los Gatos  CA  95032
-				US
-
-74-1A-E0   (hex)		SAIERCOM CORPORATION
-A00000-AFFFFF     (base 16)		SAIERCOM CORPORATION
-				ROOM 11501,FLOOR 15,UNIT 1,BLOCK 1,RENOVATION CENTER,TUANJIE SOUTH RD.,HI-TECH ZONE,XIAN,SHAANXI
-				XIAN  SHAANXI  710065
-				CN
-
-74-1A-E0   (hex)		Blocks Wearables Inc.
-600000-6FFFFF     (base 16)		Blocks Wearables Inc.
-				1800 Century Park East, 10th Floor
-				Los Angeles  CA  90067
-				US
-
-74-1A-E0   (hex)		Voltaware Services Limited
-D00000-DFFFFF     (base 16)		Voltaware Services Limited
-				230 High Street
-				Swanage    BH19 2PQ
-				GB
-
-54-9A-11   (hex)		Elotech Industrieelektronik GmbH
-500000-5FFFFF     (base 16)		Elotech Industrieelektronik GmbH
-				Verbindungsstr. 27
-				Hilden  NRW  40723
-				DE
-
-CC-22-37   (hex)		SHANGHAI CARGOA M.&E.EQUIPMENT CO.LTD
-400000-4FFFFF     (base 16)		SHANGHAI CARGOA M.&E.EQUIPMENT CO.LTD
-				98 shunda road 9#,nanxiang town, Jianding district
-				Shanghai, 200182P.R.    200182
-				CN
-
-CC-22-37   (hex)		Hebei ZHSF Technology Co.,Ltd.
-C00000-CFFFFF     (base 16)		Hebei ZHSF Technology Co.,Ltd.
-				88 Xinshi South Road
-				Shijiazhuang, Hebei    050000
-				CN
-
-CC-22-37   (hex)		XConnect Professional Services
-300000-3FFFFF     (base 16)		XConnect Professional Services
-				459 Westlake Dr
-				Brisbane  QLD  4074
-				AU
-
-2C-27-9E   (hex)		AudioNord Distribution A/S
-500000-5FFFFF     (base 16)		AudioNord Distribution A/S
-				Moelbakvej 4
-				Lystrup    8520
-				DK
-
-18-9B-A5   (hex)		ChengDu Vantron Technology, Ltd.
-100000-1FFFFF     (base 16)		ChengDu Vantron Technology, Ltd.
-				6th Floor, 1st  Building,No.9, 3rd WuKe East Street, WuHou District,
-				ChengDu  SiChuan  610045
-				CN
-
-90-4E-91   (hex)		CUTTER Systems spol. s r.o.
-900000-9FFFFF     (base 16)		CUTTER Systems spol. s r.o.
-				Milicova 2530/26
-				Prostejov    79601
-				CZ
-
-90-4E-91   (hex)		mcf88 SRL
-500000-5FFFFF     (base 16)		mcf88 SRL
-				Via Roma, 3
-				Sozzago  Novara  28060
-				IT
-
-90-4E-91   (hex)		IBM
-700000-7FFFFF     (base 16)		IBM
-				9000 south rita rd
-				Tucson  AZ  85744
-				US
-
-90-4E-91   (hex)		North Pole Engineering, Inc.
-200000-2FFFFF     (base 16)		North Pole Engineering, Inc.
-				221 N. 1st. St., Suite 310
-				Minneapolis  MN  55401
-				US
-
-50-FF-99   (hex)		Informa LLC
-E00000-EFFFFF     (base 16)		Informa LLC
-				215 N. College Ave
-				Indianapolis  IN  46202
-				US
-
-90-4E-91   (hex)		Nuwa Robotics (HK) Limited Taiwan Branch
-600000-6FFFFF     (base 16)		Nuwa Robotics (HK) Limited Taiwan Branch
-				9F., No.101, Sec. 3, Nanjing E. Rd., Zhongshan Dist.
-				Taipei    10487
-				TW
-
-90-4E-91   (hex)		Spirtech
-000000-0FFFFF     (base 16)		Spirtech
-				29 rue du Louvre
-				Paris    75002
-				FR
-
-34-29-8F   (hex)		Shenzhen Advance River System Technology Co., Ltd
-200000-2FFFFF     (base 16)		Shenzhen Advance River System Technology Co., Ltd
-				6/F South Factory,2nd Jinxiang Building,Xinzhou South Road,Futian District,
-				Shenzhen  Guangdong  518048
-				CN
-
-34-00-8A   (hex)		ChengDu HuiZhong Cloud Information Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		ChengDu HuiZhong Cloud Information Technology Co., Ltd.
-				NO.1 CHENGJI ROAD ,CHENGHUA DISTRICT
-				CHENGDU CITY  SICHUAN  610000
-				CN
-
-28-F5-37   (hex)		Shenzhen Modern Cowboy Technology Co.,Ltd.     
-700000-7FFFFF     (base 16)		Shenzhen Modern Cowboy Technology Co.,Ltd.     
-				Room 1006,Beike building，Keyuan road,Yuehai streets,Nanshan District
-				Shenzhen  Guangdong Province  518200
-				CN
-
-28-F5-37   (hex)		PRIMETECH ENGINEERING CORP.
-300000-3FFFFF     (base 16)		PRIMETECH ENGINEERING CORP.
-				 Koishikawadaikoku Bldg. 3F, 1-3-25
-				 Koishikawa, Bunkyo-ku  Tokyo  112-0002
-				JP
-
-34-00-8A   (hex)		Keruyun Technoligies(Beijing) Corporation Limited
-900000-9FFFFF     (base 16)		Keruyun Technoligies(Beijing) Corporation Limited
-				Room 405, Taibang Technical Building, High-tech south 4 road, Nanshan
-				Shenzhen  Guangdong  518000
-				CN
-
-34-00-8A   (hex)		RPE Monitor
-200000-2FFFFF     (base 16)		RPE Monitor
-				Krasnokursantskaya 104a
-				Rostov-on-Don  Select  344068
-				RU
-
-34-00-8A   (hex)		Shenzhen Eternal Idea Tech Co.,Ltd
-C00000-CFFFFF     (base 16)		Shenzhen Eternal Idea Tech Co.,Ltd
-				5/F, Building C, Chuangwei Technology Park,1st Rd,Shiyan tangtou,Baoan District, Shenzhen, Guang Dong Province,PRC 
-				Shenzhen  Guang Dong  518000
-				CN
-
-34-00-8A   (hex)		Fotonic i Norden AB
-400000-4FFFFF     (base 16)		Fotonic i Norden AB
-				Box 733
-				Skelleftea  SE  93127
-				SE
-
-28-F5-37   (hex)		Umojo
-100000-1FFFFF     (base 16)		Umojo
-				1 E. Superior St., Suite 402
-				Chicago  IL  60611
-				US
-
-28-F5-37   (hex)		Atomrock LLC
-500000-5FFFFF     (base 16)		Atomrock LLC
-				22525 SE 64th Place, Suite 2288
-				Issaquah    98027
-				US
-
-28-F5-37   (hex)		Skyrockettoys LLC
-D00000-DFFFFF     (base 16)		Skyrockettoys LLC
-				12910 culver blvd Ste F
-				los angeles  CA  90066
-				US
-
-28-F5-37   (hex)		Valeo Siemens eAutomotive Norway
-000000-0FFFFF     (base 16)		Valeo Siemens eAutomotive Norway
-				Graaterudveien 41
-				Drammen  Buskerud  3036
-				NO
-
-28-F5-37   (hex)		LogiM GmbH Software und Entwicklung
-B00000-BFFFFF     (base 16)		LogiM GmbH Software und Entwicklung
-				Mahonienweg 22b
-				Berlin    12437
-				DE
-
-78-D8-00   (hex)		Insignal Co., Ltd.
-A00000-AFFFFF     (base 16)		Insignal Co., Ltd.
-				#301, Ace High-end Tower 1st, 5 Digital-ro 26-gil
-				Seoul    ASI KR KS013 SEOUL
-				KR
-
-7C-BA-CC   (hex)		Sun Asia Trade Co.
-400000-4FFFFF     (base 16)		Sun Asia Trade Co.
-				RM 1005 10/F, HOKING COMMERCIAL CENTRE,2-16 FA YUEN STREET MONGKOk
-				Hong Kong  Hong Kong  9998800
-				HK
-
-7C-BA-CC   (hex)		Changsha SUNYE Electric Co., Ltd.
-100000-1FFFFF     (base 16)		Changsha SUNYE Electric Co., Ltd.
-				hi tech Zone, Sheng Xin Road, No. 669
-				Changsha   Hunan  410000
-				CN
-
-78-D8-00   (hex)		CS Instruments GmbH
-400000-4FFFFF     (base 16)		CS Instruments GmbH
-				Zindelsteiner Straße 15
-				 VS-Tannheim    78052
-				DE
-
-AC-64-DD   (hex)		HMicro Inc
-D00000-DFFFFF     (base 16)		HMicro Inc
-				39355 California St., Suite 303
-				Fremont  null  94538
-				US
-
-4C-65-A8   (hex)		Suzhou Embedded Electronic Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		Suzhou Embedded Electronic Technology Co., Ltd.
-				Room 15A05, KeJi GuangChang,QianJinDong Road
-				Kunshan  Jiangsu  215300
-				CN
-
-F8-8A-3C   (hex)		Shenzhen Shengyuan Tech Ltd.
-300000-3FFFFF     (base 16)		Shenzhen Shengyuan Tech Ltd.
-				Science and Technology Park North District, high tech North six Road, LAN LAN Technology Park, building C-309,Shenzhen Nanshan District, Guangdong Province, China
-				shenzhen  guangdong  518000
-				CN
-
-4C-65-A8   (hex)		Roost
-300000-3FFFFF     (base 16)		Roost
-				955, Benecia Ave
-				Sunnyvale  CA  94085
-				US
-
-F8-8A-3C   (hex)		KLATU Networks Inc
-200000-2FFFFF     (base 16)		KLATU Networks Inc
-				4174 NE Lookout Lane
-				Poulsbo  WA  98370
-				US
-
-A0-C5-F2   (hex)		Synapsys Solutions Ltd.
-E00000-EFFFFF     (base 16)		Synapsys Solutions Ltd.
-				1 Woodlands Court, Albert Drive
-				Burgess Hill  West Sussex  RH15 9TN
-				GB
-
-A0-C5-F2   (hex)		KNS Group LLC (YADRO Company)
-100000-1FFFFF     (base 16)		KNS Group LLC (YADRO Company)
-				Spartakovskaya sq., 14, bl. 1
-				Moscow    105082
-				RU
-
-A0-C5-F2   (hex)		Speedgoat GmbH
-200000-2FFFFF     (base 16)		Speedgoat GmbH
-				Waldeggstrasse 30
-				Liebefeld  BE  3097
-				CH
-
-A0-C5-F2   (hex)		Viettronimex JSC
-700000-7FFFFF     (base 16)		Viettronimex JSC
-				74-76 Nguyen Hue street, Ben nghe ward, distric 1
-				Ho Chi Minh    70000
-				VN
-
-04-71-4B   (hex)		Neurio Technology Inc.
-000000-0FFFFF     (base 16)		Neurio Technology Inc.
-				43 West Hastings Street
-				Vancouver  BC  V6B 1G4
-				CA
-
-04-71-4B   (hex)		Lighthouse AI, Inc
-900000-9FFFFF     (base 16)		Lighthouse AI, Inc
-				380 Portage Ave
-				Palo Alto  CA  94306
-				US
-
-F0-23-B9   (hex)		Emu Technology
-900000-9FFFFF     (base 16)		Emu Technology
-				1400 E. Angela Blvd. #101
-				South Bend  IN  46617
-				US
-
-F0-23-B9   (hex)		Audeara Pty. Ltd.
-500000-5FFFFF     (base 16)		Audeara Pty. Ltd.
-				375 Wickham Terrace
-				Brisbane  Queensland  4000
-				AU
-
-60-D7-E3   (hex)		Elap s.r.l.
-100000-1FFFFF     (base 16)		Elap s.r.l.
-				Via V. Veneto 4
-				Corsico  Milano  20094
-				IT
-
-04-71-4B   (hex)		DIGIBEST TECHNOLOGY CO., LTD.
-B00000-BFFFFF     (base 16)		DIGIBEST TECHNOLOGY CO., LTD.
-				4F ,No.65 , SHITAN ROAD , NEIHU DIST.
-				TAIPEI    114
-				TW
-
-04-71-4B   (hex)		KittyHawk Corporation
-C00000-CFFFFF     (base 16)		KittyHawk Corporation
-				2700 Broderick Way
-				Mountain View  CA  94043
-				US
-
-1C-C0-E1   (hex)		SHENZHEN KINSTONE D&T DEVELOP CO.,LTD
-700000-7FFFFF     (base 16)		SHENZHEN KINSTONE D&T DEVELOP CO.,LTD
-				5F, A2 Building ,XinJianXing Tech Industrial Park,Fengxin Road ,Lou Cun , Gongming Street,Guangming New Dist.,
-				 Shenzhen  Guangdong  518000
-				CN
-
-08-ED-02   (hex)		Eleven Engineering Incorporated
-700000-7FFFFF     (base 16)		Eleven Engineering Incorporated
-				10150 - 100 Street, Suite 800
-				Edmonton  Canada, Alberta  T5J 0P6
-				CA
-
-08-ED-02   (hex)		TES Touch Embedded Solutions Inc.
-200000-2FFFFF     (base 16)		TES Touch Embedded Solutions Inc.
-				3F, No. 141, Sec. 3, Ren'ai Rd.,
-				Taipei    106
-				TW
-
-98-AA-FC   (hex)		Resonant Systems Inc.
-B00000-BFFFFF     (base 16)		Resonant Systems Inc.
-				Tsurumi chiyoda building,4-34-26,Tsurumi-tyuou,Tsurumi
-				Yokohama-shi  kanagawa-ken  230-0051
-				JP
-
-98-AA-FC   (hex)		Shenzhen UniStrong Science & Technology Co., Ltd
-200000-2FFFFF     (base 16)		Shenzhen UniStrong Science & Technology Co., Ltd
-				B，4-4Factory,Zhengcheng Road, Fuyong Baoan District,
-				Shenzhen    518103
-				CN
-
-98-AA-FC   (hex)		SENKO Co.,Ltd.
-A00000-AFFFFF     (base 16)		SENKO Co.,Ltd.
-				73 Oesammiro15beon-gil 
-				Osan-si  Gyeonggi-do  18111
-				KR
-
-08-ED-02   (hex)		HANTAS CO., LTD.
-800000-8FFFFF     (base 16)		HANTAS CO., LTD.
-				474 Dunchondaero, Jungwon-gu
-				Seongnam-si  Kyonggi-do  13229
-				KR
-
-14-4F-D7   (hex)		Red Technology Limited
-400000-4FFFFF     (base 16)		Red Technology Limited
-				Room 702, 7/F., Fu Fai Commercial Centre, 27 Hillier Street, Sheung Wan
-				Hong Kong    999077
-				HK
-
-14-4F-D7   (hex)		Qingdao Wodatong Electronics Co., Ltd.
-300000-3FFFFF     (base 16)		Qingdao Wodatong Electronics Co., Ltd.
-				West of Committees, HouHaiXi Community, JiHongTan Street, Chengyang District,
-				Qingdao  Shandong  266111
-				CN
-
-14-4F-D7   (hex)		Unirobot Corporation
-A00000-AFFFFF     (base 16)		Unirobot Corporation
-				MK Hatagaya Sasazuka building 6F, Hatagaya, Shibuya-ku
-				Tokyo  Japan  1510072
-				JP
-
-A4-11-63   (hex)		Beijing XiaoRui Technology Co., Ltd
-600000-6FFFFF     (base 16)		Beijing XiaoRui Technology Co., Ltd
-				Room 1201, Zhongqing Building, East Third Ring Road, Chaoyang District, Beijing
-				Beijing  Beijing  100029
-				CN
-
-1C-A0-D3   (hex)		NovTech, Inc.
-200000-2FFFFF     (base 16)		NovTech, Inc.
-				7401 Wiles Road, Suite 229
-				Coral Springs  FL  33067
-				US
-
-40-F3-85   (hex)		URMET Home & Building Solutions Pty Ltd
-B00000-BFFFFF     (base 16)		URMET Home & Building Solutions Pty Ltd
-				36 Ricketty Street
-				Mascot  NSW  2020
-				AU
-
-40-F3-85   (hex)		Johnson Matthey
-100000-1FFFFF     (base 16)		Johnson Matthey
-				MTC, The Moat
-				Billingham  Cleveland  TS23 4ED
-				GB
-
-8C-C8-F4   (hex)		Beijing KXWELL Technology CO., LTD 
-500000-5FFFFF     (base 16)		Beijing KXWELL Technology CO., LTD 
-				 Room 12A05, North Real Estate Building, Block 3
-				81 Zizhuyuan Road, Haidian District  Beijing   100089
-				CN
-
-40-F3-85   (hex)		Clixxo Broadband Private Limited
-C00000-CFFFFF     (base 16)		Clixxo Broadband Private Limited
-				Suite # 10, 3rd Floor, Tower 2, Stellar IT Park, C-25, Sector 62
-				Noida  Uttar Pradesh  201301
-				IN
-
-50-A4-D0   (hex)		Beijing YangLian Networks Technology co., LTD
-C00000-CFFFFF     (base 16)		Beijing YangLian Networks Technology co., LTD
-				Building 17, East Zone, No.10 Xibeiwang Dong Rd, Haidian District, Beijing, PRC
-				BeiJing    100193
-				CN
-
-8C-C8-F4   (hex)		Beijing Xinxunxintong Eletronics Co.,Ltd
-D00000-DFFFFF     (base 16)		Beijing Xinxunxintong Eletronics Co.,Ltd
-				No.9 Yingfu Road,Haidian District
-				Beijing    100192
-				CN
-
-8C-C8-F4   (hex)		PTYPE Co., LTD.
-B00000-BFFFFF     (base 16)		PTYPE Co., LTD.
-				B121, B-dong, Keumkang Penterium IT Tower, 810, Gwanyand 2-dong, Dongan-gu
-				Anyang-si  Gyeonggi-do  14056
-				KR
-
-50-A4-D0   (hex)		Guangzhou Hysoon Electronic Co., Ltd.
-300000-3FFFFF     (base 16)		Guangzhou Hysoon Electronic Co., Ltd.
-				No.1, Fenghuang South Road, Xinhua, Huadu District
-				Guangzhou  Guangdong  510800
-				CN
-
-34-04-9E   (hex)		Harbin Yantuo Science and Technology Development Co., Ltd
-400000-4FFFFF     (base 16)		Harbin Yantuo Science and Technology Development Co., Ltd
-				No. 15 Xingnan Road, Nangang District
-				Harbin  Heilongjiang Province  150000
-				CN
-
-40-ED-98   (hex)		Hangzhou GANX Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Hangzhou GANX Technology Co.,Ltd.
-				Room 502, Building 2, No 1180, BinAn Rd, Binjiang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-40-ED-98   (hex)		TeraTron GmbH
-900000-9FFFFF     (base 16)		TeraTron GmbH
-				Bunsenstr. 10
-				Gummersbach  DE  51647
-				DE
-
-40-ED-98   (hex)		BORDA TECHNOLOGY
-E00000-EFFFFF     (base 16)		BORDA TECHNOLOGY
-				ITU ARI TEKNOKENT ARI 3 NO 504
-				ISTANBUL    34369
-				TR
-
-50-0B-91   (hex)		EWIN TECHNOLOGY LIMITED
-300000-3FFFFF     (base 16)		EWIN TECHNOLOGY LIMITED
-				3rd floor, No. 12, LIYE Road, 2nd industrial District, South Zone,
-				Zhongshan  Guangdong  528400
-				CN
-
-50-0B-91   (hex)		Security Alarms & Co. S.A.
-600000-6FFFFF     (base 16)		Security Alarms & Co. S.A.
-				Z.I. Tresi 6D
-				Preverenges    1028
-				CH
-
-A4-58-0F   (hex)		Changsha Tai Hui Network Technology Co.,Ltd
-700000-7FFFFF     (base 16)		Changsha Tai Hui Network Technology Co.,Ltd
-				102-202 Building A2,Luguyu Garden,No.27 Wenxuan Rd,Gaoxin District,Changsha
-				changsha  hunan  410205
-				CN
-
-A4-58-0F   (hex)		ABB AB PGHV
-B00000-BFFFFF     (base 16)		ABB AB PGHV
-				Lyviksvägen 4
-				Ludvika    77180
-				SE
-
-A4-58-0F   (hex)		Engineered SA
-300000-3FFFFF     (base 16)		Engineered SA
-				Avenue des Sports 28
-				Yverdon-les-Bains  VD  1400
-				CH
-
-7C-CB-E2   (hex)		optilink networks pvt ltd
-D00000-DFFFFF     (base 16)		optilink networks pvt ltd
-				501/502, sanjona complex, hemu kalani marg, chembur
-				mumbai  maharashtra  400071
-				IN
-
-7C-CB-E2   (hex)		Ningbo bird sales co.,LTD
-400000-4FFFFF     (base 16)		Ningbo bird sales co.,LTD
-				NO.999 Dacheng East Road
-				Fenghua City  Zhejiang Province  315559
-				CN
-
-48-65-EE   (hex)		CNU
-E00000-EFFFFF     (base 16)		CNU
-				No.8 Everygreen Road,  Haidian District 3 layer 313
-				Beijing    100195
-				CN
-
-48-65-EE   (hex)		Swistec Systems AG
-500000-5FFFFF     (base 16)		Swistec Systems AG
-				Allmendstrasse 30
-				Fehraltorf  ZH  8320
-				CH
-
-10-07-23   (hex)		Shenzhen Xinfa Electronic Co.,ltd
-C00000-CFFFFF     (base 16)		Shenzhen Xinfa Electronic Co.,ltd
-				 NO.57., Baoli Rd.,Buji Town.,Longgang District.,Shenzhen city.,guangdong province.,China
-				shenzhen  guangdong  518112
-				CN
-
-24-4E-7B   (hex)		sonoscape
-100000-1FFFFF     (base 16)		sonoscape
-				yuquan road
-				shenzhen  guangdong  518052
-				CN
-
-24-4E-7B   (hex)		Mighty Audio, Inc.
-B00000-BFFFFF     (base 16)		Mighty Audio, Inc.
-				707 Coeur d'Alene Ave
-				Venice  CA  90291
-				US
-
-24-4E-7B   (hex)		Shenzhen Ruixunyun Technology Co.,Ltd.
-300000-3FFFFF     (base 16)		Shenzhen Ruixunyun Technology Co.,Ltd.
-				Rm 311, 2Bldg.,Xunmei Technology Plaza, Keyuan Avenue, Nanshan District
-				Shenzhen  Guangdong   518057
-				CN
-
-24-4E-7B   (hex)		CHUNGHSIN TECHNOLOGY GROUP CO.,LTD
-C00000-CFFFFF     (base 16)		CHUNGHSIN TECHNOLOGY GROUP CO.,LTD
-				618-2#GONGREN WEST ROAD,JIAOJIANG AREA
-				TAIZHOU  ZHEJIANG  318000
-				CN
-
-1C-C0-E1   (hex)		Abbott Medical Optics Inc.
-200000-2FFFFF     (base 16)		Abbott Medical Optics Inc.
-				510 Cottonwood Drive
-				Milpitas  CA  95035
-				US
-
-1C-C0-E1   (hex)		Monument Labs, Inc.
-600000-6FFFFF     (base 16)		Monument Labs, Inc.
-				222 W. Merchandise Mart Plaza Ste 1212
-				Chicago  IL  60654
-				US
-
-4C-E1-73   (hex)		KTC(K-TEL)
-D00000-DFFFFF     (base 16)		KTC(K-TEL)
-				98, Sandan-ro 132beon-gil
-				Uijeongbu-si  Gyeonggi-do  11781
-				KR
-
-AC-64-DD   (hex)		Beijing Hamigua Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Beijing Hamigua Technology Co., Ltd.
-				Building C 02B-322, No.28A, Information Road, Haidian District
-				BEIJING  BEIJING  100000
-				CN
-
-4C-E1-73   (hex)		 Beijing Sutongwang E-Business Co., Ltd
-000000-0FFFFF     (base 16)		 Beijing Sutongwang E-Business Co., Ltd
-				 Room 1108, Qingyun modern building. NO.43 Bei San Huan Xi Road
-				Beijing  Beijing  100086
-				CN
-
-38-3A-21   (hex)		Mission Embedded GmbH
-C00000-CFFFFF     (base 16)		Mission Embedded GmbH
-				Gutheil-Schoder-Gasse 8-12
-				Wien  Wien  1100
-				AT
-
-F8-1D-78   (hex)		DACONS
-500000-5FFFFF     (base 16)		DACONS
-				90, Centum jungang-ro, Haeundae-gu
-				Busan    48059
-				KR
-
-38-3A-21   (hex)		Shanghai Greatwall Safety System Co.,Ltd
-300000-3FFFFF     (base 16)		Shanghai Greatwall Safety System Co.,Ltd
-				502B - Bloc ,No.168 Luoyang Str
-				ShangHai    201100
-				CN
-
-F8-1D-78   (hex)		Ophrys Systèmes
-900000-9FFFFF     (base 16)		Ophrys Systèmes
-				6 rue Valérien Perrin
-				Seyssinet    38170
-				FR
-
-70-F8-E7   (hex)		Dr. Simon Consulting GmbH
-300000-3FFFFF     (base 16)		Dr. Simon Consulting GmbH
-				Friedrichstr. 35
-				Göppingen    73033
-				DE
-
-F8-1D-78   (hex)		Xperio Labs Limited
-200000-2FFFFF     (base 16)		Xperio Labs Limited
-				Unit 3709, 37th Floor, Tower II, Lippo Centre, 89 Queensway, Admiralty,
-				Hong Kong  Hong Kong  Hong Kong
-				HK
-
-70-F8-E7   (hex)		TiVACI CORPORATION PTE LTD
-A00000-AFFFFF     (base 16)		TiVACI CORPORATION PTE LTD
-				264A Tanjong Katong Road
-				Singapore    437051
-				SG
-
-84-E0-F4   (hex)		AIMTRON CORPORATION
-C00000-CFFFFF     (base 16)		AIMTRON CORPORATION
-				555 S VERMONT ST
-				PALATINE  IL  60067
-				US
-
-84-E0-F4   (hex)		ASL Intercom B.V.
-300000-3FFFFF     (base 16)		ASL Intercom B.V.
-				Zonnebaan 42
-				Utrecht    3542EG
-				NL
-
-84-E0-F4   (hex)		Orchard Electronics Co., Ltd.
-B00000-BFFFFF     (base 16)		Orchard Electronics Co., Ltd.
-				8F,No.2,Lane 235,Bao-Chiao Rd., Hsin-Tien District,
-				New Taipei City    23145
-				TW
-
-C0-D3-91   (hex)		SAMSARA NETWORKS INC
-E00000-EFFFFF     (base 16)		SAMSARA NETWORKS INC
-				525 York St
-				San Francisco  CA  94110
-				US
-
-C0-D3-91   (hex)		Alpha Audiotronics, Inc.
-A00000-AFFFFF     (base 16)		Alpha Audiotronics, Inc.
-				401 Park Avenue South, Fl. 10
-				New York  NY  10016
-				US
-
-C0-D3-91   (hex)		Zhinengguo technology company limited
-C00000-CFFFFF     (base 16)		Zhinengguo technology company limited
-				Taiyueshangwu building, Luozhuang East road, Haidian District
-				beijing  beijing  100088
-				CN
-
-84-E0-F4   (hex)		ShenZhen Panrich Technology Limited
-000000-0FFFFF     (base 16)		ShenZhen Panrich Technology Limited
-				room 1321 qinghai building,beihuan rd,futian district
-				shenzhen    518034
-				CN
-
-58-E8-76   (hex)		TEM Mobile Limited
-900000-9FFFFF     (base 16)		TEM Mobile Limited
-				RM1703, North Block, Cangsong Building, Tairan 6 road, Futian District, Shenzhen.
-				Shenzhen  Guangdong  518000
-				CN
-
-C0-D3-91   (hex)		WiTagg, Inc
-500000-5FFFFF     (base 16)		WiTagg, Inc
-				1045 Linda Vista Avenue
-				Mountain View    94043
-				US
-
-F0-AC-D7   (hex)		Smart Power Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		Smart Power Technology Co., Ltd.
-				Room 102,Unit A,Building 32,No.999,Gaoxinqi Road, High Tech Industrial Development Zone,Nanchang,Jiangxi
-				 Nanchang City  Jiangxi Province  330096
-				CN
-
-58-E8-76   (hex)		PROBIT SRL
-400000-4FFFFF     (base 16)		PROBIT SRL
-				Pantelimon, 1
-				Bucharest    021591
-				RO
-
-F0-AC-D7   (hex)		Groupeer Technologies
-A00000-AFFFFF     (base 16)		Groupeer Technologies
-				17 avenue Georges 5
-				Paris  Ile-de-France  75008
-				FR
-
-28-36-38   (hex)		Shenzhen  Zhi Hua  Creative Technology  Co., Ltd.
-900000-9FFFFF     (base 16)		Shenzhen  Zhi Hua  Creative Technology  Co., Ltd.
-				Bao`an District,  Shenzhen Baoan  District  Xixiang  Bao yuan road beach village in the 8-905 room
-				Shenzhen    518000
-				CN
-
-5C-F2-86   (hex)		Hangzhou Signwei Electronics Technology Co., Ltd
-000000-0FFFFF     (base 16)		Hangzhou Signwei Electronics Technology Co., Ltd
-				408 Room, 7 Cuibai Road,xihu District
-				 Hangzhou  Zhejiang  310012
-				CN
-
-28-36-38   (hex)		Panasonic System Solutions Europe
-100000-1FFFFF     (base 16)		Panasonic System Solutions Europe
-				Panasonic Marketing Europe GmbH, Hagenauer Str. 43
-				Wiesbaden    65203
-				DE
-
-8C-19-2D   (hex)		ELCO(TIANJIN)ELECTRONICS CO.,LTD.
-500000-5FFFFF     (base 16)		ELCO(TIANJIN)ELECTRONICS CO.,LTD.
-				NO. 12 4th XEDA Branch Road,XiQing Economic Development Area
-				Tianjin    300385
-				CN
-
-D0-D9-4F   (hex)		Teco Image Systems Co., Ltd.
-200000-2FFFFF     (base 16)		Teco Image Systems Co., Ltd.
-				2F., No. 1568-1, Chung Shan Road, Sec. 1, Kuang-In
-				Taoyuan    328
-				TW
-
-D0-D9-4F   (hex)		Hyundai Autohow
-600000-6FFFFF     (base 16)		Hyundai Autohow
-				Starwith 0914, Heungandaero427-38
-				Anyang  Gyunggi  14059
-				KR
-
-D0-D9-4F   (hex)		Hangzhou xiaoben technology co.,Ltd
-900000-9FFFFF     (base 16)		Hangzhou xiaoben technology co.,Ltd
-				Room 401,Building 5,No.503,Xingguo Road,Qianjiang Economic Development Area
-				Hangzhou  Zhejiang  311106
-				CN
-
-D0-D9-4F   (hex)		mycable GmbH
-100000-1FFFFF     (base 16)		mycable GmbH
-				Gartenstrasse 10
-				Neumuenster  Schleswig Holstein  24534
-				DE
-
-D0-D9-4F   (hex)		MAX Smart Home, LLC
-B00000-BFFFFF     (base 16)		MAX Smart Home, LLC
-				3830 Valley Centre Dr, STE 705-852
-				San Diego  CA  92130
-				US
-
-CC-D3-1E   (hex)		KEN A/S
-300000-3FFFFF     (base 16)		KEN A/S
-				Bøgebjergvej 60
-				Brobyværk  Denmark  5672
-				DK
-
-CC-D3-1E   (hex)		Neptune Systems
-200000-2FFFFF     (base 16)		Neptune Systems
-				15750 Vineyard Blvd Suite 150
-				MORGAN HILL  CA  95037
-				US
-
-CC-D3-1E   (hex)		SAMIM Co
-000000-0FFFFF     (base 16)		SAMIM Co
-				No. 47/19, Iranshahr St., Tehran, Iran
-				Tehran  Tehran  1581633939
-				IR
-
-CC-D3-1E   (hex)		Rondo Burgdorf AG
-100000-1FFFFF     (base 16)		Rondo Burgdorf AG
-				Heimiswilstrasse 42
-				Burgdorf    3400
-				CH
-
-C4-7C-8D   (hex)		ATI
-000000-0FFFFF     (base 16)		ATI
-				30 Jeffries Street
-				Boston  MA  02128
-				US
-
-68-91-D0   (hex)		femrice
-600000-6FFFFF     (base 16)		femrice
-				Rm408,Tower B,Jiahu Building,Shangdi 3rd Street,Haidian,Beijing,China
-				Beijing    100085
-				CN
-
-C4-7C-8D   (hex)		Labor Strauss Sicherungsanlagenbau GmbH
-E00000-EFFFFF     (base 16)		Labor Strauss Sicherungsanlagenbau GmbH
-				Wiegelestraße 36
-				Vienna    1230
-				AT
-
-C4-7C-8D   (hex)		LYNX INNOVATION LITIMED
-100000-1FFFFF     (base 16)		LYNX INNOVATION LITIMED
-				Unit 8A,331 Rosedale Road Albany,North Shore City 0632 Auckland,New Zealand
-				Auckland    0632
-				NZ
-
-68-91-D0   (hex)		Central Railway Manufacturing
-000000-0FFFFF     (base 16)		Central Railway Manufacturing
-				8933 Western Way Suite 8
-				Jacksonville  FL  32256
-				US
-
-68-91-D0   (hex)		Shenzhen NeaTech Intelligence Technology Co., Ltd.
-200000-2FFFFF     (base 16)		Shenzhen NeaTech Intelligence Technology Co., Ltd.
-				C.8F, Bofook Lilang Industry Park, Bulan Road, Nanwan Street, Longgang
-				Shenzhen  Guangdong  518112
-				CN
-
-E0-B6-F5   (hex)		Shenzhen Xrinda Technology Ltd
-700000-7FFFFF     (base 16)		Shenzhen Xrinda Technology Ltd
-				Fl#15, Tianming Technology Building, Wushitou Road No.8, North high-tech park, Nanshan District, Shenzhen,P.R.China
-				Shenzhen  Guangdong  518052
-				CN
-
-E0-B6-F5   (hex)		BeSTAR Corporation
-000000-0FFFFF     (base 16)		BeSTAR Corporation
-				8th F/L, UNIQUEST B/D, 314, Hwangsaeul-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13591
-				KR
-
-50-FF-99   (hex)		Sea Eagle Optoelectronic Information Technology(Tianjin)co,Ltd
-900000-9FFFFF     (base 16)		Sea Eagle Optoelectronic Information Technology(Tianjin)co,Ltd
-				Nankai District
-				Tianjin  Tianjin  300000
-				CN
-
-98-6D-35   (hex)		DH Mechatronic AG
-300000-3FFFFF     (base 16)		DH Mechatronic AG
-				Georg-Sasse-Straße 28-32
-				Ammersbek  Schleswig-Holstein  22949
-				DE
-
-50-FF-99   (hex)		Simicon
-000000-0FFFFF     (base 16)		Simicon
-				Mendeleevskay str. 8
-				Saint-Petersburg    194044
-				RU
-
-50-FF-99   (hex)		LEGEND WINNER LIMITED
-600000-6FFFFF     (base 16)		LEGEND WINNER LIMITED
-				FLAT/RM 18-19 13/F HOLLYWOOD PLAZA 610 NATHAN ROAD MONGKOK
-				HONG kONG    00852
-				HK
-
-98-6D-35   (hex)		Shenzhen MALATA Mobile Communication Co.,LTD
-000000-0FFFFF     (base 16)		Shenzhen MALATA Mobile Communication Co.,LTD
-				25F, Malata Technology Building, No. 9998 Shennan Avenue, Hi-techPark, Nanshan District
-				Shenzhen  GUANGDONG  518057
-				CN
-
-7C-47-7C   (hex)		Dspread Technology (Beijing) Inc.
-A00000-AFFFFF     (base 16)		Dspread Technology (Beijing) Inc.
-				Jingxin Building, 2045 Suite , Chaoyang District
-				Beijing    100027
-				CN
-
-7C-47-7C   (hex)		BlueSmart Technology Corporation
-700000-7FFFFF     (base 16)		BlueSmart Technology Corporation
-				1451 Grant Road, Suite 200
-				Mountain View  CA  94042
-				US
-
-7C-47-7C   (hex)		Speedifi Inc
-D00000-DFFFFF     (base 16)		Speedifi Inc
-				1163 Kassel Terrace
-				Sunnyvale  CA  94089
-				
-
-5C-F2-86   (hex)		CHIPSEN Co.,Ltd.
-400000-4FFFFF     (base 16)		CHIPSEN Co.,Ltd.
-				Haan-ro 60
-				Gwang-myeong  Gyeonggi-do  14322
-				KR
-
-5C-F2-86   (hex)		iSon Tech
-100000-1FFFFF     (base 16)		iSon Tech
-				Rm. 3, 2F., No.417, Guangfu S. Rd., Sinyi Dist.
-				Taipei  Taiwan  110
-				TW
-
-38-FD-FE   (hex)		Inspero Inc
-600000-6FFFFF     (base 16)		Inspero Inc
-				C101, Ju'Er Hu Tong, Dong Cheng Qu
-				Beijing  Beijing  100001
-				CN
-
-38-FD-FE   (hex)		FUBA Automotive Electronics GmbH
-D00000-DFFFFF     (base 16)		FUBA Automotive Electronics GmbH
-				Tec Center 1
-				Bad Salzdetfurth    31162
-				DE
-
-38-B8-EB   (hex)		1.A Connect GmbH
-100000-1FFFFF     (base 16)		1.A Connect GmbH
-				Obere Seestrasse 13
-				Nohfelden  Saarland  66625
-				DE
-
-78-CA-83   (hex)		Konecranes
-E00000-EFFFFF     (base 16)		Konecranes
-				Koneenkatu 8
-				Hyvinkää    05801
-				FI
-
-38-B8-EB   (hex)		Aina Wireless Inc
-300000-3FFFFF     (base 16)		Aina Wireless Inc
-				Hub Salo, Tehdaskatu 6
-				Salo    24100
-				FI
-
-78-CA-83   (hex)		Huatune Technology (Shanghai) Co., Ltd.
-500000-5FFFFF     (base 16)		Huatune Technology (Shanghai) Co., Ltd.
-				No.8 Longxi RD
-				Shanghai  Changning District  200336
-				CN
-
-1C-88-79   (hex)		Sensys Networks, Inc.
-700000-7FFFFF     (base 16)		Sensys Networks, Inc.
-				1608 4th St. Suite 200
-				Berkeley  CA  94710
-				US
-
-1C-87-74   (hex)		Schawbel Technologies LLC
-600000-6FFFFF     (base 16)		Schawbel Technologies LLC
-				24 New England Executive Park, Suite 150
-				Burlington  MA  01803
-				US
-
-1C-87-74   (hex)		HABEY USA Inc.
-B00000-BFFFFF     (base 16)		HABEY USA Inc.
-				Room 205,Block A, Hua Feng Business Building ,Qian Jin 1st  Road, Baoan 25 Area, Shenzhen 518101, China.
-				Shenzhen  Guang Dong  518101
-				CN
-
-1C-88-79   (hex)		Shenzhen Xiaoxi Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Shenzhen Xiaoxi Technology Co., Ltd.
-				2F, Wing D, Building 5, Software Industry Base, No.14, Haitian 2nd Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-1C-88-79   (hex)		SHENZHENFREELINK ELECTRONIC CO.,LTD
-500000-5FFFFF     (base 16)		SHENZHENFREELINK ELECTRONIC CO.,LTD
-				3/F,Building A,Quanyongyuan industrial park,Langkou industrial area,Dalang,Bao'an District,Shenzhen,China 
-				Shenzhen    518000
-				CN
-
-1C-87-76   (hex)		Strone Technology
-C00000-CFFFFF     (base 16)		Strone Technology
-				13 Ellis Street
-				South Yarra  Victoria  3141
-				AU
-
-1C-87-76   (hex)		Jiangsu ETERN COMMUNICATION Co.,ltd
-A00000-AFFFFF     (base 16)		Jiangsu ETERN COMMUNICATION Co.,ltd
-				888 YUEXIU ROAD, LILI TOWN, WUJIANG DISTRICT, 
-				Suzhou  Jiangsu  215211
-				CN
-
-1C-87-76   (hex)		Zhuhai MYZR Technology Co.,Ltd
-500000-5FFFFF     (base 16)		Zhuhai MYZR Technology Co.,Ltd
-				Room 302,Area D2,National Hi-tech Zone,NO.1,Software Park Road
-				Zhuhai    519085
-				CN
-
-1C-88-79   (hex)		Xingtera China Ltd
-900000-9FFFFF     (base 16)		Xingtera China Ltd
-				88 Chenhui Rd Bldg 1 Ste 303
-				Shanghai    201203
-				CN
-
-1C-87-79   (hex)		Novetta
-400000-4FFFFF     (base 16)		Novetta
-				7921 Jones Branch Drive
-				McLean  VA  22102
-				US
-
-84-39-BE   (hex)		Neat S.r.l.
-500000-5FFFFF     (base 16)		Neat S.r.l.
-				via Edoardo D'Onofrio 304
-				Rome  ITALY  00155
-				IT
-
-84-39-BE   (hex)		Shenzhen Ramos Digital Technology Co,.Ltd.
-400000-4FFFFF     (base 16)		Shenzhen Ramos Digital Technology Co,.Ltd.
-				3F,Noth Block B, No.2 Kingdee Software Park, Keji South 12th Road, High-Tech Industrial Park, Nanshan District,Shenzhen 518057
-				Shenzhen  Guangdong  518000
-				CN
-
-40-A3-6B   (hex)		National Research Council of Canada
-500000-5FFFFF     (base 16)		National Research Council of Canada
-				717 White Lake Road
-				Kaleden  British Columbia  V0H1K0
-				CA
-
-40-A3-6B   (hex)		Embrionix Design Inc.
-A00000-AFFFFF     (base 16)		Embrionix Design Inc.
-				2120 Monterey, suite 200
-				Laval  Québec  H7L3S3
-				CA
-
-70-88-6B   (hex)		Chengdu Ophylink Communication Technology Ltd.
-500000-5FFFFF     (base 16)		Chengdu Ophylink Communication Technology Ltd.
-				3F,Bldg3,No.333,Yunhua Road,Hig-tech Zone
-				Chengdu  Sichuan  610041
-				CN
-
-70-88-6B   (hex)		CVnet
-200000-2FFFFF     (base 16)		CVnet
-				111, Maeyeong-ro 345beon-gil, Yeongtong-gu
-				Suwon-si  Gyeonggi-do  16703
-				KR
-
-CC-1B-E0   (hex)		Guangzhou Southelectric Power Science Technology Development Co.,Ltd.
-C00000-CFFFFF     (base 16)		Guangzhou Southelectric Power Science Technology Development Co.,Ltd.
-				No.1, zhongsuihua south street, Jiangnan BLVD,
-				Guangzhou  Guangdong  510310
-				CN
-
-A0-3E-6B   (hex)		Jining SmartCity Infotech Co.Ltd.
-D00000-DFFFFF     (base 16)		Jining SmartCity Infotech Co.Ltd.
-				Technology Center,Renchen District,
-				Jining  Shandong  272000
-				CN
-
-00-55-DA   (hex)		KoolPOS Inc.
-100000-1FFFFF     (base 16)		KoolPOS Inc.
-				5th Floor, B Section, Virgo Building,
-				Wuxi  Jiangsu  214135
-				CN
-
-CC-1B-E0   (hex)		Laserworld (Switzerland) AG
-400000-4FFFFF     (base 16)		Laserworld (Switzerland) AG
-				Kreuzlingerstrasse 5
-				Lengwil  TG  8574
-				CH
-
-00-55-DA   (hex)		Datapath Limited
-400000-4FFFFF     (base 16)		Datapath Limited
-				Bemrose House,
-				Derby  Derbyshire  DE21 6XQ
-				GB
-
-00-55-DA   (hex)		BroadSoft, Inc.
-800000-8FFFFF     (base 16)		BroadSoft, Inc.
-				550 S. Winchester Blvd. Suite 250
-				San Jose  California  95128
-				US
-
-00-55-DA   (hex)		Speechlab
-A00000-AFFFFF     (base 16)		Speechlab
-				Gaasterlandstraat 3
-				Amsterdam  NH  1079RH
-				NL
-
-C8-8E-D1   (hex)		Advanced Micro Controls Inc.
-B00000-BFFFFF     (base 16)		Advanced Micro Controls Inc.
-				20 Gear Dr.
-				Terryville  CT  06786
-				US
-
-C8-8E-D1   (hex)		Electronic Controls Design, Inc.
-800000-8FFFFF     (base 16)		Electronic Controls Design, Inc.
-				4287-B SE International Way
-				Milwaukie  OR  97222
-				US
-
-C8-8E-D1   (hex)		Focalcrest, Ltd.
-900000-9FFFFF     (base 16)		Focalcrest, Ltd.
-				Shenzhen City, Futian District Tairan nine road Haisong building B, room 1101
-				shenzhen  广东  518040
-				CN
-
-A0-3E-6B   (hex)		Shenzhen Neostra Technology Co.Ltd
-A00000-AFFFFF     (base 16)		Shenzhen Neostra Technology Co.Ltd
-				7th Building,Huaide Cuihai Industrial Park,Fuyong,
-				Shenzhen  Guangdong  518000
-				CN
-
-B0-C5-CA   (hex)		SunTech Medical, Inc.
-600000-6FFFFF     (base 16)		SunTech Medical, Inc.
-				507 Airport Blvd.
-				Morrisville  NC  27560
-				US
-
-DC-44-27   (hex)		Skywave Technology Co,.Ltd.
-200000-2FFFFF     (base 16)		Skywave Technology Co,.Ltd.
-				Beijing Chaoyang District, River Park 22-4-902
-				Beijing  Chaoyang  100107
-				CN
-
-DC-44-27   (hex)		EK-TEAM Elektronik- u. Kunststoff-Technik GmbH
-600000-6FFFFF     (base 16)		EK-TEAM Elektronik- u. Kunststoff-Technik GmbH
-				Schnackenburgallee 43
-				Hamburg  Hamburg  22525
-				DE
-
-DC-44-27   (hex)		EcoGuard AB
-700000-7FFFFF     (base 16)		EcoGuard AB
-				Radiatorvägen 11
-				ÖREBRO  -  70227
-				SE
-
-B0-C5-CA   (hex)		shanghai University Ding-Tech software Corp.,ltd
-400000-4FFFFF     (base 16)		shanghai University Ding-Tech software Corp.,ltd
-				No.9 Lane3,CaoDong Feeder Rd, Xuhui Area,shanghai,China
-				shanghai  shanghai  200235
-				CN
-
-78-C2-C0   (hex)		Shanghai Hanyi Technologies Co,.Ltd.
-C00000-CFFFFF     (base 16)		Shanghai Hanyi Technologies Co,.Ltd.
-				Room 2008, Feidiao International Building
-				Shanghai  Shanghai  200030
-				CN
-
-B4-37-D1   (hex)		NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.
-C00000-CFFFFF     (base 16)		NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.
-				No.1 Putian Road,Yuhuamenwai,Nanjing
-				Nan Jing  Jiang Su  210022
-				CN
-
-B4-37-D1   (hex)		Nanjing yuekong Intelligent Technology
-900000-9FFFFF     (base 16)		Nanjing yuekong Intelligent Technology
-				Room 923, No.2 Building, Deying International Square, No.222, Changhon
-				Nanjing  Jiangsu  210012
-				CN
-
-78-C2-C0   (hex)		Ningbo Sanxing Electric Co., Ltd.
-300000-3FFFFF     (base 16)		Ningbo Sanxing Electric Co., Ltd.
-				Fengwan No. 17, Cicheng Town,
-				Ningbo  Zhejiang  315033
-				CN
-
-78-C2-C0   (hex)		RONIX incorporated
-200000-2FFFFF     (base 16)		RONIX incorporated
-				904, 648, Seobusaet-gil,
-				SEOUL  GEUMCHEON-GU  153-803
-				KR
-
-74-F8-DB   (hex)		TBM CO., LTD.
-C00000-CFFFFF     (base 16)		TBM CO., LTD.
-				A-806, 282 Hakeui-Ro
-				Anyang-City  Gyeonggi-Do  431-810
-				KR
-
-74-F8-DB   (hex)		Bernard Krone Holding GmbH & Co. KG
-E00000-EFFFFF     (base 16)		Bernard Krone Holding GmbH & Co. KG
-				Heinrich-Krone-Str. 10
-				Spelle  Niedersachsen  48480
-				DE
-
-B4-37-D1   (hex)		Stratom, Inc.
-500000-5FFFFF     (base 16)		Stratom, Inc.
-				5375 Western Avenue Suite A
-				Boulder  Colorado  80301
-				US
-
-B4-37-D1   (hex)		KOMSIS ELEKTRONIK SISTEMLERI SAN. TIC. LTD.STI
-400000-4FFFFF     (base 16)		KOMSIS ELEKTRONIK SISTEMLERI SAN. TIC. LTD.STI
-				SERIF ALI MAH. TURKER CAD. MIRAS SOK.
-				ISTANBUL  UMRANIYE  34775
-				TR
-
-B4-37-D1   (hex)		eInfochips Limited
-800000-8FFFFF     (base 16)		eInfochips Limited
-				303 Parishram Building, 5/B Rashmi Society
-				Ahmedabad  Gujarat  380009
-				IN
-
-54-9A-11   (hex)		Elite Silicon Technology, Inc.
-B00000-BFFFFF     (base 16)		Elite Silicon Technology, Inc.
-				5F-B, No.24-2, Idustry E. Road IV.
-				Hsinchu  Taiwan  300
-				TW
-
-54-9A-11   (hex)		Tite, Inc.
-800000-8FFFFF     (base 16)		Tite, Inc.
-				11040 Bollinger Canyon Road, Suite E-107
-				San Ramon  CA  94582
-				US
-
-74-F8-DB   (hex)		Enercon Technologies
-000000-0FFFFF     (base 16)		Enercon Technologies
-				25 Northbrook Drive
-				Gray  ME  04039
-				US
-
-88-5D-90   (hex)		Unitac Technology Limited
-E00000-EFFFFF     (base 16)		Unitac Technology Limited
-				Unit 01, 10/F Carnival Comm. Bldg,
-				North Point  -  -
-				HK
-
-88-5D-90   (hex)		Shenzhen Speedrun Technologies Co.,Ltd.
-A00000-AFFFFF     (base 16)		Shenzhen Speedrun Technologies Co.,Ltd.
-				Room 303,Builing 5, GuiYuan Garden, NO.62 Airong Road, SheKou, NanShan District
-				ShenZhen  GuangDong  518067
-				CN
-
-74-F8-DB   (hex)		Capwave Technologies Inc
-B00000-BFFFFF     (base 16)		Capwave Technologies Inc
-				1501 Ocean Ave
-				Asbury Park  NJ  07712
-				US
-
-88-5D-90   (hex)		Creative Sensor Inc.
-800000-8FFFFF     (base 16)		Creative Sensor Inc.
-				9F., No.501, Sec. 6, Nanjing E. Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C.)
-				Taipei City  Taiwan  114
-				TW
-
-88-5D-90   (hex)		DAIDONG Industrial System Co., Ltd.
-200000-2FFFFF     (base 16)		DAIDONG Industrial System Co., Ltd.
-				153B 3L, Namdong Industrial Complex, 729-2, Gojan-dong
-				Incheon  Kyeong-gi  405-822
-				KR
-
-80-7B-85   (hex)		EFCO
-500000-5FFFFF     (base 16)		EFCO
-				10F-3, No.270, SEc 4  Chung Hsiao E Rd
-				Taipei    10674
-				TW
-
-80-7B-85   (hex)		Zhuhai TOP Intelligence Electric Co., Ltd.
-300000-3FFFFF     (base 16)		Zhuhai TOP Intelligence Electric Co., Ltd.
-				No.619,Huawei Road
-				Zhuhai City  Guangdong Province  519070
-				CN
-
-80-7B-85   (hex)		Hangzhou Synway Information Engineering Co., Ltd
-100000-1FFFFF     (base 16)		Hangzhou Synway Information Engineering Co., Ltd
-				  No.3756 Nanhuan Road,Hangzhou,Zhejiang,P.R.China
-				Hangzhou  Zhejiang  310053
-				CN
-
-80-7B-85   (hex)		Quantel USA, Inc.
-400000-4FFFFF     (base 16)		Quantel USA, Inc.
-				601 Haggerty Ln.
-				Bozeman  Montana  59715
-				US
-
-54-9A-11   (hex)		Alfen BV
-900000-9FFFFF     (base 16)		Alfen BV
-				Hefbrugweg
-				Almere  Netherlands  1332AP
-				NL
-
-54-9A-11   (hex)		Torrap Design Limited
-200000-2FFFFF     (base 16)		Torrap Design Limited
-				Unit 6, 19 Gloucester Road
-				Hurstville  New South Wales  2220
-				AU
-
-64-FB-81   (hex)		Securosys SA
-700000-7FFFFF     (base 16)		Securosys SA
-				Technopark 1
-				Zürich  ZH  8005
-				CH
-
-1C-CA-E3   (hex)		TengFeng
-500000-5FFFFF     (base 16)		TengFeng
-				3F, 1st Bldg, Yuejun Zhenxing lnd. Park,
-				Shenzhen  Guangdong  518000
-				CN
-
-80-E4-DA   (hex)		Guangzhou Pinzhong Electronic Technology CO., LTD
-100000-1FFFFF     (base 16)		Guangzhou Pinzhong Electronic Technology CO., LTD
-				Room 810, Yinglong Plaza
-				Guangzhou  Guangdong  510000
-				CN
-
-80-E4-DA   (hex)		Thurlby Thandar Instruments LTD
-200000-2FFFFF     (base 16)		Thurlby Thandar Instruments LTD
-				Glebe Road
-				Huntingdon  Cambridgeshire  PE29 7DR
-				GB
-
-1C-CA-E3   (hex)		SIREA
-A00000-AFFFFF     (base 16)		SIREA
-				69 Rue de L'industrie
-				CASTRES  Midi-Pyrénée  81100
-				FR
-
-2C-D1-41   (hex)		PIN SHANG LED Co., LTD.
-C00000-CFFFFF     (base 16)		PIN SHANG LED Co., LTD.
-				5-6Floor, Huilongda Industrial Park,shuitian community, ShiYan Town,bao’an district,
-				ShenZhen  Guangdong  518108
-				CN
-
-2C-D1-41   (hex)		Shanghai RW ELE&TEC CO.,LTD
-400000-4FFFFF     (base 16)		Shanghai RW ELE&TEC CO.,LTD
-				10th Floor, No 6, Lane 2500 Xiupu Road, Pudong New District, Shanghai
-				Shanghai  Shanghai  201315
-				CN
-
-90-C6-82   (hex)		PowerShield Limited
-D00000-DFFFFF     (base 16)		PowerShield Limited
-				12 Target Court
-				Glenfield  Auckland  0627
-				NZ
-
-2C-6A-6F   (hex)		Holjeron
-D00000-DFFFFF     (base 16)		Holjeron
-				9524 SW Tualatin Sherwood Rd.
-				Tualatin  OR  97062
-				US
-
-2C-6A-6F   (hex)		Sensity Systems
-C00000-CFFFFF     (base 16)		Sensity Systems
-				480 Oakmead Parkway
-				Sunnyvale  California  94085
-				US
-
-90-C6-82   (hex)		Neone, Inc.
-400000-4FFFFF     (base 16)		Neone, Inc.
-				2001 Travis Heights Blvd
-				Austin  Texas  78704
-				
-
-98-02-D8   (hex)		Navroom Beijing, China
-900000-9FFFFF     (base 16)		Navroom Beijing, China
-				Floor 22, Suite B, Xi'Ao Center, Datun Road
-				Beijing    100101
-				CN
-
-98-02-D8   (hex)		HySecurity
-A00000-AFFFFF     (base 16)		HySecurity
-				6623 South 228th Street
-				Kent  WA  98032
-				US
-
-98-02-D8   (hex)		Ormazabal Protection&Automation
-700000-7FFFFF     (base 16)		Ormazabal Protection&Automation
-				B/Basauntz, 2
-				Igorre  Bizkaia  48140
-				ES
-
-A0-BB-3E   (hex)		Beijing Techshino Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Beijing Techshino Technology Co., Ltd.
-				8/F, Building No. 1, Huihuang International Plaza, Shangdi 10th Street, Haidian District,
-				Beijing  Beijing  100085
-				CN
-
-98-02-D8   (hex)		Promicon Elektronik GmbH + Co.KG
-D00000-DFFFFF     (base 16)		Promicon Elektronik GmbH + Co.KG
-				Im Michelreis 6
-				Pliezhausen  Baden-Württemberg  72124
-				DE
-
-98-02-D8   (hex)		HANSHIN MEDICAL CO., LTD.
-B00000-BFFFFF     (base 16)		HANSHIN MEDICAL CO., LTD.
-				166, Pyeongcheonro, Bupyeong-gu
-				Incheon  Incheon  403-853
-				KR
-
-98-02-D8   (hex)		Stoerk-Tronic, Stoerk GmbH & Co.KG
-000000-0FFFFF     (base 16)		Stoerk-Tronic, Stoerk GmbH & Co.KG
-				Untere Waldplätze 6
-				Stuttgart  Baden-Wuerttemberg  70569
-				DE
-
-2C-6A-6F   (hex)		TINYCO
-400000-4FFFFF     (base 16)		TINYCO
-				3rd Fl., Dukwon Bldg., 1225-4 Gaepo-Dong
-				Seoul  Gangnam-Ku  135-963
-				KR
-
-2C-6A-6F   (hex)		Beep, Inc.
-600000-6FFFFF     (base 16)		Beep, Inc.
-				2519 Mission St
-				SAN FRANCISCO  CA  94110
-				US
-
-2C-6A-6F   (hex)		Cloudproject Generation Srl
-300000-3FFFFF     (base 16)		Cloudproject Generation Srl
-				Via Melchiorre Gioia 82
-				MILANO  MI  20125
-				IT
-
-A0-BB-3E   (hex)		SIMTEC Elektronik GmbH
-700000-7FFFFF     (base 16)		SIMTEC Elektronik GmbH
-				Glonner Strasse 5
-				Feldkirchen-Westerham  Bayern  83620
-				DE
-
-28-FD-80   (hex)		Millcode
-000000-0FFFFF     (base 16)		Millcode
-				Bergsgårdsliden 5
-				Halmstad  Halland  30272
-				SE
-
-2C-26-5F   (hex)		Itus Networks, LLC
-800000-8FFFFF     (base 16)		Itus Networks, LLC
-				6319 Nepo Drive
-				San Jose  CALIFORNIA  95119
-				US
-
-2C-26-5F   (hex)		Coremate Technical Co., Ltd
-700000-7FFFFF     (base 16)		Coremate Technical Co., Ltd
-				7F., No576, Sec.1, Minsheng N. Rd.,
-				Taoyuan    33393
-				TW
-
-2C-26-5F   (hex)		GTA Electronics Co., Ltd.
-400000-4FFFFF     (base 16)		GTA Electronics Co., Ltd.
-				9F., No.788, Zhongzheng Rd., Zhonghe Dist.
-				New Taipei City    23586
-				TW
-
-2C-26-5F   (hex)		Griessbach
-100000-1FFFFF     (base 16)		Griessbach
-				Im Biotechnologiepark
-				Luckenwalde    14943
-				DE
-
-28-FD-80   (hex)		Galileo, Inc.
-100000-1FFFFF     (base 16)		Galileo, Inc.
-				5-3-29 Tokiwagi
-				Ueda  Nagano  386-0027
-				JP
-
-A0-BB-3E   (hex)		Link Labs
-000000-0FFFFF     (base 16)		Link Labs
-				130 Holiday Court, Suite 100
-				Annapolis  Maryland  21401
-				US
-
-28-FD-80   (hex)		Grandway Technology (Shenzhen) Limited
-D00000-DFFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
-				Block 7, Zhu Keng Industrial Zone
-				Ping Shan District  Shenzhen  518118
-				CN
-
-28-FD-80   (hex)		University of York
-700000-7FFFFF     (base 16)		University of York
-				York Neuroimaging Centre, The Biocentre
-				York  Yorkshire  YO10 5NY
-				GB
-
-F8-02-78   (hex)		Luxul Technology Inc
-A00000-AFFFFF     (base 16)		Luxul Technology Inc
-				2F., No.3, Yuandong Rd
-				New Taipei City  Taiwan  220
-				TW
-
-0C-EF-AF   (hex)		Rotel
-900000-9FFFFF     (base 16)		Rotel
-				43-59 Queens Road East
-				Wanchai  Hong Kong  00000
-				HK
-
-0C-EF-AF   (hex)		Firmware Design AS
-600000-6FFFFF     (base 16)		Firmware Design AS
-				Grannes Terrasse 45
-				Hafrsfjord  Rogaland  N-4044
-				NO
-
-F8-02-78   (hex)		Reason Tecnologia SA
-100000-1FFFFF     (base 16)		Reason Tecnologia SA
-				 Rua Joaquim Carneiro, 192
-				Florianópolis  Santa Catarina  8811120
-				BR
-
-F8-02-78   (hex)		Dueton Systems s.r.o.
-D00000-DFFFFF     (base 16)		Dueton Systems s.r.o.
-				Varsavska 290/13
-				Prague 2  Vinohrady  120 00
-				CZ
-
-A4-4F-29   (hex)		LUCEOR
-200000-2FFFFF     (base 16)		LUCEOR
-				2 Place Jules Gevelot
-				ISSY LES MOULINEAUX  IDF  92138
-				FR
-
-A4-4F-29   (hex)		Olssen B.V.
-100000-1FFFFF     (base 16)		Olssen B.V.
-				Schrank 9
-				Hardinxveld-Giessendam  Zuid-Hollland  3371KJ
-				NL
-
-A4-4F-29   (hex)		DGC Access AB
-400000-4FFFFF     (base 16)		DGC Access AB
-				Sveavägen 145
-				Stockholm  Stockholms Län  113 46
-				SE
-
-A4-4F-29   (hex)		Selektro Power Inc
-600000-6FFFFF     (base 16)		Selektro Power Inc
-				3610 NW 115th Ave
-				Doral  Florida  33178
-				US
-
-A4-4F-29   (hex)		Shanghai KuanYu Industrial Network Equipment Co.,Ltd
-500000-5FFFFF     (base 16)		Shanghai KuanYu Industrial Network Equipment Co.,Ltd
-				15/F,No.3003,Baoyang Road, Baoshan District,
-				  Shanghai  201901
-				CN
-
-3C-39-E7   (hex)		chipsguide technology Co.,LTD
-B00000-BFFFFF     (base 16)		chipsguide technology Co.,LTD
-				NanGuang road, DongHua design house 758 room
-				Shenzhen  Guangdong  518000
-				CN
-
-3C-39-E7   (hex)		ELSA Japan Inc.
-300000-3FFFFF     (base 16)		ELSA Japan Inc.
-				Mita UT Bldg., 3-42-10 Shiba,
-				Minato-ku,  Tokyo  105-0014
-				JP
-
-0C-EF-AF   (hex)		Engineering Center ENERGOSERVICE
-300000-3FFFFF     (base 16)		Engineering Center ENERGOSERVICE
-				Kotlasskaya 26
-				Arkhangelsk  Arkhangelsk region  163046
-				RU
-
-10-07-23   (hex)		Beijing Assem Technology Co., ltd
-100000-1FFFFF     (base 16)		Beijing Assem Technology Co., ltd
-				Floor 6, Jinglong International Plaza,
-				Chaoyang District  Beijing  100107
-				CN
-
-D0-22-12   (hex)		GNS-GmbH
-A00000-AFFFFF     (base 16)		GNS-GmbH
-				Adenauerstr. 18
-				Wuerselen  NRW  52146
-				DE
-
-D0-22-12   (hex)		Xperio Labs Ltd.
-C00000-CFFFFF     (base 16)		Xperio Labs Ltd.
-				Unit 3709, 37th Floor, Tower II,
-				Hong Kong  Hong Kong  HONG KONG
-				HK
-
-10-07-23   (hex)		ESTONE TECHNOLOGY INC
-600000-6FFFFF     (base 16)		ESTONE TECHNOLOGY INC
-				21015 Commerce Point Drive Walnut, CA 91789
-				Los Angeles  California  91789
-				US
-
-E8-18-63   (hex)		DongGuan Pengxun Electronics Technology Co., Ltd.
-300000-3FFFFF     (base 16)		DongGuan Pengxun Electronics Technology Co., Ltd.
-				10th floor, Jinhui Bussiness Building,
-				DongGuan City  GuangDong Province  523850
-				CN
-
-E8-18-63   (hex)		Guangzhou Tianyi Electronics Co., Ltd
-400000-4FFFFF     (base 16)		Guangzhou Tianyi Electronics Co., Ltd
-				A3, Hongtu Industrial Plot, Dashi town,
-				 Guangzhou  Guangdong,  511430,
-				CN
-
-B8-D8-12   (hex)		ZheJiang FangTai Electirc Co., Ltd
-E00000-EFFFFF     (base 16)		ZheJiang FangTai Electirc Co., Ltd
-				B11 Block, Science and Technology Park
-				Hangzhou  ZheJiang  310024
-				CN
-
-E8-18-63   (hex)		DigiMagus Technology (Shenzhen) Co., Ltd
-000000-0FFFFF     (base 16)		DigiMagus Technology (Shenzhen) Co., Ltd
-				1206, Shenzhen University-town Business Park, Lishan Road
-				ShenZhen  GuangDong  518055
-				CN
-
-74-E1-4A   (hex)		aritec gmbh
-800000-8FFFFF     (base 16)		aritec gmbh
-				Vorstadtgasse 15
-				Maienfeld  Outside U.S./Canada  7304
-				CH
-
-B8-D8-12   (hex)		iModesty Technology Corp.
-300000-3FFFFF     (base 16)		iModesty Technology Corp.
-				3F-1, No.76, Sec.2 Jiafeng S.Rd.,
-				Zhubei County  Taiwan  302
-				TW
-
-E8-18-63   (hex)		JDM Mobile Internet Solution(Shanghai) Co., Ltd.
-A00000-AFFFFF     (base 16)		JDM Mobile Internet Solution(Shanghai) Co., Ltd.
-				2F, Building D, BenQ Plaza, No.207
-				Shanghai  Shanghai  200335
-				CN
-
-B8-D8-12   (hex)		Entotem LTD
-900000-9FFFFF     (base 16)		Entotem LTD
-				Unit 3, South Stanmore Stables,
-				Newbury  Berks  RG20 8SR
-				GB
-
-B8-D8-12   (hex)		XIAMEN XINDECO LTD.
-500000-5FFFFF     (base 16)		XIAMEN XINDECO LTD.
-				5F.,XINXI BLDG.,HULI
-				Xiamen  Fujian  361000
-				CN
-
-74-E1-4A   (hex)		AStar Design Service Technologies Co., Ltd.
-A00000-AFFFFF     (base 16)		AStar Design Service Technologies Co., Ltd.
-				3F, No219-1, Jianguo Rd. Sindian Dist.
-				New Taipei City  Taiwan  23142
-				TW
-
-E8-18-63   (hex)		ARTECH SOLUTION CO.,LTD
-600000-6FFFFF     (base 16)		ARTECH SOLUTION CO.,LTD
-				470/11 Pattanakarn Rd.,Suanluang，Bkk.10250 Thailand
-				Bangkok  Bangkok  10250
-				TH
-
-BC-66-41   (hex)		Shenzhen Crave Communication Co.,ltd
-C00000-CFFFFF     (base 16)		Shenzhen Crave Communication Co.,ltd
-				8th Block, Dongfangming Industry Park
-				Shenzhen  GuangDong  518000
-				CN
-
-BC-66-41   (hex)		Lucent Trans Electronics Co., Ltd
-E00000-EFFFFF     (base 16)		Lucent Trans Electronics Co., Ltd
-				9F-1, NO.16, CHIEN PAH RD.,
-				NEW TAIPEI CITY    23511
-				TW
-
-E4-95-6E   (hex)		eZeLink LLC
-900000-9FFFFF     (base 16)		eZeLink LLC
-				Office 1104, Aspect Tower, Executive Towers, Business Bay
-				Dubai  Dubai  111581
-				AE
-
-BC-66-41   (hex)		VSN Mobil
-700000-7FFFFF     (base 16)		VSN Mobil
-				1975 E. Sunrise Blbvd., #400
-				Fort Lauderdale  Florida  33304
-				US
-
-58-FC-DB   (hex)		SWARCO TRAFFIC SYSTEMS GMBH
-B00000-BFFFFF     (base 16)		SWARCO TRAFFIC SYSTEMS GMBH
-				Kelterstr. 67
-				Unterensingen  Baden-Württemberg  72669
-				DE
-
-B0-1F-81   (hex)		TAIWAN Anjie Electronics Co.,Ltd.
-D00000-DFFFFF     (base 16)		TAIWAN Anjie Electronics Co.,Ltd.
-				One 7th Floor,No.125,Lane 235, Pao Chiao Xindian District
-				New Taipei City  Xindian District  231
-				TW
-
-BC-66-41   (hex)		Sidus Novum Sp. z o. o.
-B00000-BFFFFF     (base 16)		Sidus Novum Sp. z o. o.
-				Ul. Ogrodowa 3B/203
-				Zielona Góra  Lubuskie  65462
-				PL
-
-58-FC-DB   (hex)		Xmodus Systems GmbH
-A00000-AFFFFF     (base 16)		Xmodus Systems GmbH
-				Reiherstrasse 2
-				Haiger  Hessen  35708
-				DE
-
-B0-1F-81   (hex)		SHENZHEN GRID TECHNOLOGY CO.,LTD
-500000-5FFFFF     (base 16)		SHENZHEN GRID TECHNOLOGY CO.,LTD
-				6thfloor,jinda Technology Center,No.8 of kefeng Road ,Science and Technology Park,NanshanDist,Shenzhen
-				shenzhen  guangdong  518054
-				CN
-
-B0-1F-81   (hex)		Private
-200000-2FFFFF     (base 16)		Private
-
-F4-0E-11   (hex)		Shenzhen Grandsun Electronic Co.,Ltd.
-700000-7FFFFF     (base 16)		Shenzhen Grandsun Electronic Co.,Ltd.
-				Gaoqiao Industrial Zone,Baishitang Village,
-				Shenzhen  Guangdong  518116
-				CN
-
-F4-0E-11   (hex)		Elektronika Naglic d.o.o.
-E00000-EFFFFF     (base 16)		Elektronika Naglic d.o.o.
-				Goricica pri Ihanu 44
-				Domzale    1230
-				SI
-
-F4-0E-11   (hex)		NIHON MEGA LOGIC CO.,LTD.
-C00000-CFFFFF     (base 16)		NIHON MEGA LOGIC CO.,LTD.
-				Mitsui-Seimei-Kameido BLDG. 1F
-				Koutou-ku  Tokyo  136-0071
-				JP
-
-B0-1F-81   (hex)		Sound United
-300000-3FFFFF     (base 16)		Sound United
-				11433 Cronridge Drive
-				Owings Mills  Maryland  21117
-				US
-
-F4-0E-11   (hex)		E-SONG
-500000-5FFFFF     (base 16)		E-SONG
-				BUSAN TECHNOPARK Head office & Factory: Unit 102
-				Busan  N/A  618-230
-				KR
-
-F4-0E-11   (hex)		Shenzhen headsun technology
-300000-3FFFFF     (base 16)		Shenzhen headsun technology
-				3 Floor, C Building, NanYuan Industrial
-				ShenZhen  GuangDong  518000
-				CN
-
-14-1F-BA   (hex)		Swiss Electronic (Shenzhen) Co., Ltd
-C00000-CFFFFF     (base 16)		Swiss Electronic (Shenzhen) Co., Ltd
-				2712 Great China International Exchange Square
-				Shenzhen  Guangdong  518026
-				CN
-
-14-1F-BA   (hex)		Shenzhen CATIC Information Technology Industry Co.,Ltd
-800000-8FFFFF     (base 16)		Shenzhen CATIC Information Technology Industry Co.,Ltd
-				3/FL, Block 1, Shenzhen Software Park, No.2, Gaoxin Middle Street,Nanshan
-				Shen Zhen  Guang Dong  518057
-				CN
-
-14-1F-BA   (hex)		Winsonic Electronics Co., Ltd.
-A00000-AFFFFF     (base 16)		Winsonic Electronics Co., Ltd.
-				No. 290-1, Wen Chung Rd.,
-				Taoyuan City    330
-				TW
-
-14-1F-BA   (hex)		GloQuad
-100000-1FFFFF     (base 16)		GloQuad
-				301 Biz Incubation Center, GSBC
-				Suwon-si  Gyeonggi-do  443-270
-				KR
-
-BC-34-00   (hex)		Parlay Labs dba Highfive
-C00000-CFFFFF     (base 16)		Parlay Labs dba Highfive
-				471 Emerson St.
-				Palo Alto  California  94301
-				US
-
-7C-70-BC   (hex)		XD-GE Automation CO.,LTD
-100000-1FFFFF     (base 16)		XD-GE Automation CO.,LTD
-				101# Fengcheng 6 Road
-				Xi'an  ShanXi  710016
-				CN
-
-A4-3B-FA   (hex)		ALSTOM Strongwish (Shenzhen) Co., Ltd
-B00000-BFFFFF     (base 16)		ALSTOM Strongwish (Shenzhen) Co., Ltd
-				5F, Building No.6, Keji Middle 2 Road, High-Tech Industrial Park
-				Shenzhen  Guangdong  518057
-				CN
-
-A4-3B-FA   (hex)		The Magstim Company Ltd.
-E00000-EFFFFF     (base 16)		The Magstim Company Ltd.
-				Spring Gardens
-				Whitland  Carmarthenshire  SA34 0HR
-				GB
-
-BC-34-00   (hex)		IPLINK Technology Corp
-100000-1FFFFF     (base 16)		IPLINK Technology Corp
-				8F-5, No. 347, Jingsin St.
-				New Taipei City    23582
-				TW
-
-A4-3B-FA   (hex)		Plus One Japan Ltd.
-A00000-AFFFFF     (base 16)		Plus One Japan Ltd.
-				Storia Akasaka 410,
-				Minato-ku  Tokyo  1080052
-				JP
-
-A4-3B-FA   (hex)		SHANGHAI XIETONG TECHNOLOGY INC.
-C00000-CFFFFF     (base 16)		SHANGHAI XIETONG TECHNOLOGY INC.
-				423 Wuning Road,Shanghai
-				  Shanghai  200063
-				CN
-
-D0-76-50   (hex)		DAIKEN AUTOMACAO LTDA
-100000-1FFFFF     (base 16)		DAIKEN AUTOMACAO LTDA
-				 AVENIDA SAO GABRIEL,481
-				COLOMBO  PARANA  83404000
-				BR
-
-D0-76-50   (hex)		PelKorea
-B00000-BFFFFF     (base 16)		PelKorea
-				60, Haan-ro
-				Gwangmyeong-si  Gyeonggi-do  KS009
-				KR
-
-D0-76-50   (hex)		InventDesign
-A00000-AFFFFF     (base 16)		InventDesign
-				Valschermkade 29
-				Amsterdam  Noord-Holland  1059CD
-				NL
-
-A4-3B-FA   (hex)		Powell Industries
-200000-2FFFFF     (base 16)		Powell Industries
-				201-55 Gostick Place
-				North Vancouver  British Columbia  V7M 3N2
-				
-
-D0-76-50   (hex)		ENCORED Technologies, Inc.
-700000-7FFFFF     (base 16)		ENCORED Technologies, Inc.
-				8F KTS, 215 Bongeunsa-ro
-				  Seoul  135-831
-				KR
-
-74-19-F8   (hex)		Trend-tech Technology Co., Limited
-100000-1FFFFF     (base 16)		Trend-tech Technology Co., Limited
-				NO. 609, Noble Plaza, Qianjin YiLu
-				Shenzhen  Guangdong  518101
-				CN
-
-74-19-F8   (hex)		Cloudvue Technologies Corporation
-400000-4FFFFF     (base 16)		Cloudvue Technologies Corporation
-				830 Stewart Drive, Suite 115
-				Sunnyvale  CA  94085
-				US
-
-74-19-F8   (hex)		Essential Trading Systems Corp
-300000-3FFFFF     (base 16)		Essential Trading Systems Corp
-				9 Austin Drive
-				Marlborough  CT  06447
-				US
-
-4C-4B-F9   (hex)		Shenzhen HommPro Technology Co.,Ltd
-200000-2FFFFF     (base 16)		Shenzhen HommPro Technology Co.,Ltd
-				5F,Building B,Zhengchangda Digital Technology Park,Jian'an Road,Tangwei community,Fuhai street,Bao'an District
-				Shenzhen  GuangDong  518000
-				CN
-
-40-11-75   (hex)		Beijing Hexinruitong Electric Power Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Beijing Hexinruitong Electric Power Technology Co., Ltd.
-				Room 306, 3F, No.16, Shangdi 5 Street, Haidian District
-				Beijing  Beijing  100085
-				CN
-
-40-11-75   (hex)		Guangzhou RALID Information System Co.Ltd
-700000-7FFFFF     (base 16)		Guangzhou RALID Information System Co.Ltd
-				ROOM 201 at 2nd floor in 2nd Building,No.602, Guangshan 2nd Road, Tianhe District
-				Guangzhou  Guangdong  510663
-				CN
-
-40-11-75   (hex)		NanJing HuaStart Network Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		NanJing HuaStart Network Technology Co.,Ltd.
-				Room 568,Longmian Road,Jiangning District
-				Nanjing   Jiang Su  210000
-				CN
-
-40-11-75   (hex)		Chongqing IQIYI Intelligence Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Chongqing IQIYI Intelligence Technology Co., Ltd.
-				Yongli International Center, Sanlitun, Chaoyang District
-				Beijing  Beijing  100027
-				CN
-
-10-DC-B6   (hex)		Annapurna labs
-400000-4FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-10-DC-B6   (hex)		Shenzhen Sunwoda intelligent hardware Co.,Ltd
-E00000-EFFFFF     (base 16)		Shenzhen Sunwoda intelligent hardware Co.,Ltd
-				No.6-6,Yan Shan Rd.,Baoan District,Shenzhen City,China
-				Shenzhen  Guangdong  518105
-				CN
-
-10-DC-B6   (hex)		Prolan Zrt.
-600000-6FFFFF     (base 16)		Prolan Zrt.
-				Szentendrei út 1-3.
-				Budakalasz    2011
-				HU
-
-54-A4-93   (hex)		Shenzhen C & D Electronics Co., Ltd.
-400000-4FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-10-DC-B6   (hex)		Sanofi (Beijing) Pharmaceutical Co., Ltd.
-800000-8FFFFF     (base 16)		Sanofi (Beijing) Pharmaceutical Co., Ltd.
-				No.7, Xingsheng Street, Beijing Economic and Technological Development Zone
-				Beijing  Beijing  100176
-				CN
-
-10-DC-B6   (hex)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
-200000-2FFFFF     (base 16)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
-				AVENIDA TORQUATO TAPAJOS, 7503 TARUMA GALPAO 2 - CNPJ: 07.200.194/0003-80
-				MANAUS  AMAZONAS  69041-025
-				BR
-
-54-A4-93   (hex)		ShenZhen Smart&Aspiration Co.,LTD
-100000-1FFFFF     (base 16)		ShenZhen Smart&Aspiration Co.,LTD
-				Guanlan
-				ShenZhen  GuangDong  518000
-				CN
-
-54-A4-93   (hex)		Chengdu EVECCA Technology Co.,Ltd.
-800000-8FFFFF     (base 16)		Chengdu EVECCA Technology Co.,Ltd.
-				Floor 20, Building B, Xingchen International, No.555, Middle Section of Yizhou Avenue
-				Chengdu  Sichuan  610015
-				CN
-
-54-A4-93   (hex)		AUSOUNDS INTELLIGENCE, LLC
-500000-5FFFFF     (base 16)		AUSOUNDS INTELLIGENCE, LLC
-				929 108TH AVE NE STE 1200, BELLEVUE, WA, 98004-4787, UNITED STATES
-				BELLEVUE  WA  98004
-				US
-
-54-A4-93   (hex)		ASSEM TECHNOLOGY CO.,LTD.
-D00000-DFFFFF     (base 16)		ASSEM TECHNOLOGY CO.,LTD.
-				No. 17, Minquan St., Tucheng Dist.,
-				New Taipei City  Taiwan (R.O.C.)  236
-				TW
-
-04-D1-6E   (hex)		Elotec Fischer Elektronik GmbH
-D00000-DFFFFF     (base 16)		Elotec Fischer Elektronik GmbH
-				Nordgaustraße 20
-				Furth im Wald  Bavaria  93437
-				DE
-
-54-A4-93   (hex)		Nederman Holding AB
-E00000-EFFFFF     (base 16)		Nederman Holding AB
-				Sydhamnsgatan 2
-				Helsingborg  Sweden  252 28
-				SE
-
-44-03-77   (hex)		OMNISENSE SYSTEMS PRIVATE LIMITED TAIWAN BRANCH
-D00000-DFFFFF     (base 16)		OMNISENSE SYSTEMS PRIVATE LIMITED TAIWAN BRANCH
-				7th Floor, No. 10, Lane 30, Lane 358, Ruiguang Road, Neihu District, Taipei, Taiwan
-				Taipei    114
-				TW
-
-50-62-55   (hex)		Ufanet SC
-000000-0FFFFF     (base 16)		Ufanet SC
-				bldg 4/3, Prospect Octyabrya
-				Ufa    450001
-				RU
-
-64-31-39   (hex)		Dongguan Huili electroacoustic Industrial Co.,ltd
-700000-7FFFFF     (base 16)		Dongguan Huili electroacoustic Industrial Co.,ltd
-				Dalang Town, Biyun Cai Bai Cun East Second Street 66,A4 Building 501
-				Dongguan  Guangdong  523770
-				CN
-
-50-62-55   (hex)		Southern Ground Audio LLC
-900000-9FFFFF     (base 16)		Southern Ground Audio LLC
-				101 Gardner Park
-				Peachtree City  GA  30269
-				US
-
-C4-95-4D   (hex)		Shenzhen Xtooltech Co., Ltd
-900000-9FFFFF     (base 16)		Shenzhen Xtooltech Co., Ltd
-				10574 Acacia St, Suite D4
-				Rancho Cucamonga  CA  91730
-				US
-
-C4-95-4D   (hex)		Shen Zhen Euse Technology Co.,Ltd
-200000-2FFFFF     (base 16)		Shen Zhen Euse Technology Co.,Ltd
-				4/F, Block A2, Xinhao First Industrial Zone,  Qiaotou Community, Fuhai Street
-				Shenzhen  Guangdong  518103
-				CN
-
-A0-22-4E   (hex)		ProPhotonix
-300000-3FFFFF     (base 16)		ProPhotonix
-				3020 Euro Business Park
-				Co Cork  Little Island  n/A
-				IE
-
-A0-22-4E   (hex)		Applied Information, Inc.
-700000-7FFFFF     (base 16)		Applied Information, Inc.
-				4411 Suwanee Dam Rd, Suite 510
-				Suwanee  GA  30024
-				US
-
-20-0A-0D   (hex)		Netinovo Technologies(Shenzhen) Ltd
-200000-2FFFFF     (base 16)		Netinovo Technologies(Shenzhen) Ltd
-				101,201,301,Bldg8,No.1 industry zone,Shanmen Community,Yanluo Street
-				Shenzhen  Guangdong  518105
-				CN
-
-20-0A-0D   (hex)		bcheck NV
-800000-8FFFFF     (base 16)		bcheck NV
-				Livornostraat 66/12
-				Brussels  Brussels  1000
-				BE
-
-40-2C-76   (hex)		Suteng Innovation Technology Co., Ltd.
-800000-8FFFFF     (base 16)		Suteng Innovation Technology Co., Ltd.
-				10-11/F, Block 3, Chongwen Garden, Nanshan IPark, 3370 Liuxian Avenue, Nanshan District
-				Shenzhen    518000
-				CN
-
-40-2C-76   (hex)		Lista AG
-000000-0FFFFF     (base 16)		Lista AG
-				Fabrikstrasse 1
-				Erlen  TG  8586
-				CH
-
-40-2C-76   (hex)		Zhejiang Guoli Security Technology Co., Ltd.
-700000-7FFFFF     (base 16)		Zhejiang Guoli Security Technology Co., Ltd.
-				Room (1-1-178), No. 150, Zhangpu Road, Jiushigang Town, Haishu District
-				Ningbo  Zhejiang  315000
-				CN
-
-40-2C-76   (hex)		Annapurna labs
-900000-9FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-50-DE-19   (hex)		BRAINWARE TERAHERTA INFORMATION TECHNOLOGY CO.,LTD.
-B00000-BFFFFF     (base 16)		BRAINWARE TERAHERTA INFORMATION TECHNOLOGY CO.,LTD.
-				F3 and F4 of Innovation Industrial Park Phase II in Hefei High-tech Zone
-				Hefei   Anhui   230000
-				CN
-
-40-2C-76   (hex)		Guangzhou LANGO Electronics Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Guangzhou LANGO Electronics Technology Co., Ltd.
-				136#, Gaopu Road, Tianhe District
-				Guangzhou  Guangdong  510663
-				CN
-
-50-DE-19   (hex)		Penny & Giles Aerospace Ltd
-D00000-DFFFFF     (base 16)		Penny & Giles Aerospace Ltd
-				15 Enterprise Way
-				Christchurch  Dorset  BH23 6HH
-				GB
-
-50-DE-19   (hex)		Bliq B.V.
-500000-5FFFFF     (base 16)		Bliq B.V.
-				Hogeweyselaan 145
-				Weesp    1382JK
-				NL
-
-3C-FA-D3   (hex)		AMobile Solutions (Xiamen) CO. , LTD.
-D00000-DFFFFF     (base 16)		AMobile Solutions (Xiamen) CO. , LTD.
-				Room 105A, building 5#, No. 20-24 East Huoju  Road,  Huoju Park, Xiamen Torch Hi-tech zone
-				Xiamen    361006
-				CN
-
-3C-FA-D3   (hex)		Energous Corporation
-800000-8FFFFF     (base 16)		Energous Corporation
-				3590 N. First Street
-				San Jose  CA  95134
-				US
-
-3C-FA-D3   (hex)		Gulf Security Technology Co., Ltd
-500000-5FFFFF     (base 16)		Gulf Security Technology Co., Ltd
-				80 Changjiang East Road, Economic & Technology Development Zone
-				Qinhuangdao  Hebei  066000
-				CN
-
-3C-FA-D3   (hex)		Home Control AS
-000000-0FFFFF     (base 16)		Home Control AS
-				Postboks 1618 Vika
-				Oslo    0119 
-				NO
-
-B0-B3-53   (hex)		HANMECIPS CO.
-900000-9FFFFF     (base 16)		HANMECIPS CO.
-				17, Alphacity 1-ro 31-gil, Suseong-gu, Daegu, Republic of Korea
-				TAEGU  TAEGU/053  ASIKRKS002TAEGU
-				KR
-
-B0-B3-53   (hex)		Zenlayer
-500000-5FFFFF     (base 16)		Zenlayer
-				21680 GATEWAY CENTER DR., Suite#350
-				DIAMOND BAR  CA  91765
-				US
-
-90-E2-FC   (hex)		ShenZhen Temwey Innovation Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		ShenZhen Temwey Innovation Technology Co.,Ltd.
-				Room 1008, 10/F, Bld.B, Bantian International Centre, No. 5 South Huancheng Road, Bantian Street of Shenzhen Longgang District
-				SHENZHEN  GUANGDONG  518129
-				CN
-
-90-E2-FC   (hex)		Beijing Lanxum Computer Technology CO.,LTD.
-D00000-DFFFFF     (base 16)		Beijing Lanxum Computer Technology CO.,LTD.
-				3A Floor,BlockB,Technology Fortune Center,No 8 Xueqing Road,Haidian District,
-				Beijing  Beijing  100192
-				CN
-
-90-E2-FC   (hex)		Dongguan Kangyong electronics technology Co. Ltd
-400000-4FFFFF     (base 16)		Dongguan Kangyong electronics technology Co. Ltd
-				No 9,Yincheng 1st Road, Xiabian Village, Chang’an Town
-				Dongguan  GuangDong  523877
-				CN
-
-90-E2-FC   (hex)		bitsensing Inc.
-800000-8FFFFF     (base 16)		bitsensing Inc.
-				165, Yeoksam-ro,
-				Gangnam-gu, Seoul,  Republic of Korea  06247
-				KR
-
-90-E2-FC   (hex)		Stanley Security
-C00000-CFFFFF     (base 16)		Stanley Security
-				8350 Sunlight Drive
-				Fishers  IN  46037
-				US
-
-14-AE-85   (hex)		iSolution Technologies Co.,Ltd.
-D00000-DFFFFF     (base 16)		iSolution Technologies Co.,Ltd.
-				5F,Bldg #6, Zhongguan Honghualing Industrial South Park
-				Shenzhen  Guangdong  518055
-				CN
-
-7C-BC-84   (hex)		VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
-D00000-DFFFFF     (base 16)		VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
-				B3, Bredon House, 321, Tettenhall Road, Tettenhall
-				Wolverhampton  West Midlands  WV6 0JZ
-				GB
-
-64-62-66   (hex)		Pass & Seymour, Inc d/b/a Legrand
-600000-6FFFFF     (base 16)		Pass & Seymour, Inc d/b/a Legrand
-				50 Boyd Ave
-				Syracuse  NY  13209
-				US
-
-64-62-66   (hex)		FaceHeart Inc.
-300000-3FFFFF     (base 16)		FaceHeart Inc.
-				Rm. 8, 19F., No.118, Ciyun Rd., East Dist.
-				Hsinchu  Taiwan  300
-				TW
-
-64-62-66   (hex)		Sensoro Co., Ltd.
-A00000-AFFFFF     (base 16)		Sensoro Co., Ltd.
-				7F D-Block, Lei Shing Hong Center, No. 8 Guangshun South Street, Chaoyang District,
-				Beijing  Beijing  100102
-				CN
-
-94-CC-04   (hex)		Shandong free optical technology co., ltd.
-B00000-BFFFFF     (base 16)		Shandong free optical technology co., ltd.
-				195 East First Street, Industrial First Street, Economic Development Zone, Weifang, Weicheng District,
-				Weifeng  Shandong  216000
-				CN
-
-94-CC-04   (hex)		ENTEC Electric & Electronic Co., LTD.
-900000-9FFFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
-				78-2 Buncheon-ri, Bongdam-eup
-				Hwaseong-city  Gyungki-do  445-894
-				KR
-
-94-CC-04   (hex)		SynchronicIT BV
-E00000-EFFFFF     (base 16)		SynchronicIT BV
-				Spoorstraat 155, room 413
-				Gennep  Nederland  6591 GT
-				NL
-
-F4-90-CB   (hex)		Simavita (Aust) Pty Ltd
-D00000-DFFFFF     (base 16)		Simavita (Aust) Pty Ltd
-				Suite 2.02, L2, 54 Miller Street
-				North Sydney  NSW  2060
-				AU
-
-F4-90-CB   (hex)		Ricker Lyman Robotic
-300000-3FFFFF     (base 16)		Ricker Lyman Robotic
-				319 Main Street
-				Beacon  NY  12508
-				US
-
-F4-90-CB   (hex)		Beijing Penslink Co., Ltd.
-800000-8FFFFF     (base 16)		Beijing Penslink Co., Ltd.
-				502,12rd floor,no.2,Fangheng International Center Beijing, Chaoyang district 100102
-				Beijing  Beijing  100102
-				CN
-
-F4-90-CB   (hex)		Private
-A00000-AFFFFF     (base 16)		Private
-
-C0-9B-F4   (hex)		The Professional Monitor Company Ltd
-D00000-DFFFFF     (base 16)		The Professional Monitor Company Ltd
-				Holme Court A1
-				Biggleswade  Bedfordshire  SG189ST
-				GB
-
-C0-9B-F4   (hex)		Connected Space Management
-100000-1FFFFF     (base 16)		Connected Space Management
-				62 boulevard Diderot
-				Paris    75012
-				FR
-
-C0-9B-F4   (hex)		Inveo
-A00000-AFFFFF     (base 16)		Inveo
-				Rzemieslnicza 21
-				Kozy    43-340
-				PL
-
-94-FB-A7   (hex)		Beijing Leja Tech co., Ltd.
-200000-2FFFFF     (base 16)		Beijing Leja Tech co., Ltd.
-				5F-Building1, Longyu center East Tower,Longyu Middle street, Changping District
-				Beijing  Beijing  100000
-				CN
-
-94-FB-A7   (hex)		Skyring Smart Technologies(Shenzhen) Co., Ltd.
-E00000-EFFFFF     (base 16)		Skyring Smart Technologies(Shenzhen) Co., Ltd.
-				6F GDC Building, 9Gaoxin Centeral Avenue 3rd, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-94-FB-A7   (hex)		Inaxsys Security Systems inc.
-100000-1FFFFF     (base 16)		Inaxsys Security Systems inc.
-				11685 Philippe-Panneton
-				Montreal  Quebec  H1E 4M1
-				CA
-
-94-FB-A7   (hex)		ELKRON 
-A00000-AFFFFF     (base 16)		ELKRON 
-				Via Bologna 188/C
-				TURIN  ITALY  10154
-				IT
-
-38-F7-CD   (hex)		ARUNAS PTY LTD
-700000-7FFFFF     (base 16)		ARUNAS PTY LTD
-				Freedom Taxation Building, 1 Ransley St
-				PENRITH  NSW  2750
-				AU
-
-38-F7-CD   (hex)		Macherey-Nagel GmbH & Co. KG
-D00000-DFFFFF     (base 16)		Macherey-Nagel GmbH & Co. KG
-				Neumann-Neander-Str. 6-8
-				Düren  Deutschland  52355
-				DE
-
-38-F7-CD   (hex)		Polska Fabryka Wodomierzy i Ciep?omierzy FILA 
-000000-0FFFFF     (base 16)		Polska Fabryka Wodomierzy i Ciep?omierzy FILA 
-				?eromskiego 30
-				Sztum  POMORSKIE  82-400
-				PL
-
-70-69-79   (hex)		Liquid Instruments Pty Ltd
-B00000-BFFFFF     (base 16)		Liquid Instruments Pty Ltd
-				243 Northbourne Avenue
-				Lynham  ACT  2602
-				AU
-
-70-69-79   (hex)		An Phat Information Technology Co., Ltd
-800000-8FFFFF     (base 16)		An Phat Information Technology Co., Ltd
-				3C Tran Phu, Ward 4, District 5
-				Ho Chi Minh City    70000
-				VN
-
-70-69-79   (hex)		Ibyte
-500000-5FFFFF     (base 16)		Ibyte
-				Rua Cleia, 460
-				Fortaleza  Ceara  60863280
-				BR
-
-70-69-79   (hex)		BAS-IP LP
-E00000-EFFFFF     (base 16)		BAS-IP LP
-				Suite 1, 4 Queen Street
-				Edinburgh    EH2 1JE
-				GB
-
-70-69-79   (hex)		Full Solution Telecom
-000000-0FFFFF     (base 16)		Full Solution Telecom
-				Calle 130A #59C-42, Barrio Ciudad Jardin Norte
-				Bogota  Distrito Capital de Bogota  111111
-				CO
-
-CC-C2-61   (hex)		Tecnoideal Srl
-200000-2FFFFF     (base 16)		Tecnoideal Srl
-				Via Lea Cazzuoli nr.43
-				Mirandola  Modena  41037
-				IT
-
-CC-C2-61   (hex)		Shenzhen Uyesee Technology Co.,Ltd
-A00000-AFFFFF     (base 16)		Shenzhen Uyesee Technology Co.,Ltd
-				201C, C6 Building, HengFeng Industry Park Hezhou, Baoan District
-				shenzhen  Guangdong  518102
-				CN
-
-CC-C2-61   (hex)		Toong In Electronic Corp.
-E00000-EFFFFF     (base 16)		Toong In Electronic Corp.
-				10F-8, No.738, Chung Cheng Road, Chung Ho Dist,.
-				New Taipei City  Taiwan  235
-				TW
-
-30-49-50   (hex)		Shenzhen iTG robot Co.,Ltd.
-700000-7FFFFF     (base 16)		Shenzhen iTG robot Co.,Ltd.
-				3rd Floor, 5th Floor, No. 5, Elephant Factory Building, Baiyunshan New Village, Tongsheng Community, Dalang Street, Longhua District
-				Shenzhen    518109
-				CN
-
-30-49-50   (hex)		ADVANCED MICROWAVE ENGINEERING SRL
-400000-4FFFFF     (base 16)		ADVANCED MICROWAVE ENGINEERING SRL
-				VIA LUCCA 50/54
-				FIRENZE    50142
-				IT
-
-30-49-50   (hex)		Morgan Schaffer Inc.
-300000-3FFFFF     (base 16)		Morgan Schaffer Inc.
-				8300 rue St-Patrick bureau 150
-				LaSalle  Quebec  H8N 2H1
-				CA
-
-D0-14-11   (hex)		Evoco Labs CO., LTD
-200000-2FFFFF     (base 16)		Evoco Labs CO., LTD
-				Room 315, Building 1, No.58 Xiangke Rd, Pudong New Area
-				Shanghai  Shanghai  201203
-				CN
-
-D0-14-11   (hex)		Shen Zhen HaiHe Hi-Tech Co., Ltd
-C00000-CFFFFF     (base 16)		Shen Zhen HaiHe Hi-Tech Co., Ltd
-				Bldg 10,Fumin Industrial Zone,Pinghu Subdistrict,Longgang District
-				Shen Zhen  Guang Dong  518111
-				CN
-
-D0-14-11   (hex)		EkkoSense Ltd
-000000-0FFFFF     (base 16)		EkkoSense Ltd
-				Sir Colin Campbell Building, UNIP
-				Triumph Road, Nottingham  UK Mainland  NG7 2TU
-				GB
-
-D0-14-11   (hex)		Private
-100000-1FFFFF     (base 16)		Private
-
-5C-85-7E   (hex)		Nautech Electronics Ltd
-D00000-DFFFFF     (base 16)		Nautech Electronics Ltd
-				120 Cryers Road
-				East Tamaki  Auckland  2013
-				NZ
-
-5C-85-7E   (hex)		Cable Matters Inc.
-300000-3FFFFF     (base 16)		Cable Matters Inc.
-				153 Northboro Road, Suite 5
-				Southborough  MA  01772
-				US
-
-30-49-50   (hex)		IK Elektronik GmbH
-500000-5FFFFF     (base 16)		IK Elektronik GmbH
-				Friedrichsgruener Str. 11-13
-				Muldenhammer    08262
-				DE
-
-5C-85-7E   (hex)		Beijing HZFD Technology Co., Ltd
-700000-7FFFFF     (base 16)		Beijing HZFD Technology Co., Ltd
-				Room 502, Tower A, Fangyuan Building, No. 56, South Zhongguancun Street, Haidian District
-				Beijing  Beiijng  100044
-				CN
-
-5C-85-7E   (hex)		Sichuan C.H Control Technology Co., Ltd.
-100000-1FFFFF     (base 16)		Sichuan C.H Control Technology Co., Ltd.
-				4F,B8,Tianfu Software Park, No. 99, Tianhua 1st Road
-				Chengdu  Si chuan  610000
-				CN
-
-F4-69-D5   (hex)		Junchuang (Xiamen) Automation Technology Co.,Ltd
-100000-1FFFFF     (base 16)		Junchuang (Xiamen) Automation Technology Co.,Ltd
-				Room 705, building a, No. 96, Xiangxing Road, industrial zone, Xiamen Torch High tech Zone
-				Xiamen   Fujian  361101
-				CN
-
-5C-85-7E   (hex)		Zhejiang Jetron Ark Digital Technology Co., Ltd
-A00000-AFFFFF     (base 16)		Zhejiang Jetron Ark Digital Technology Co., Ltd
-				Room 12-9, building B (Hongmao building), No. 338, Juxing West Road, Jiangbei District, Ningbo, ZheJiang, China
-				Ningbo    315000
-				CN
-
-F4-69-D5   (hex)		ITS Co., Ltd. 
-300000-3FFFFF     (base 16)		ITS Co., Ltd. 
-				Wooyang building 7F, 68, Wolpyeong-ro, Nam-gu, Ulsan, Republic of Korea
-				Ulsan    44690
-				KR
-
-4C-93-A6   (hex)		Wuhan Maiwe communication Co.,Ltd
-C00000-CFFFFF     (base 16)		Wuhan Maiwe communication Co.,Ltd
-				Building 2,Area E, Phase ii, Optical valley core center, No.52, Liufang road, East Lake Hi-tech Development Zone,Wuhan,China
-				Wuhan  Hubei  430000
-				CN
-
-4C-93-A6   (hex)		Cantronic Systems (Canada) Inc
-D00000-DFFFFF     (base 16)		Cantronic Systems (Canada) Inc
-				Unit 8, 62 Fawcett
-				Coquitlam  British Columbia  V3K 6V5
-				CA
-
-4C-93-A6   (hex)		Atrie Technology Fzc
-100000-1FFFFF     (base 16)		Atrie Technology Fzc
-				ELOB office no E-44F-41, Hamriya Free zone
-				Sharjah  Sharjah  10001
-				AE
-
-28-B7-7C   (hex)		Anser Coding Inc.
-900000-9FFFFF     (base 16)		Anser Coding Inc.
-				34F., No. 99, Sec. 1, XinTai 5th Rd., Xizhi Dist.,
-				New Taipei City    221
-				TW
-
-28-B7-7C   (hex)		Ray Pte Ltd
-E00000-EFFFFF     (base 16)		Ray Pte Ltd
-				Suite #09-01, 20 Collyer Quay, 
-				Singapore    049319
-				SG
-
-98-FC-84   (hex)		Guangdong DE at science and technology co., LTD
-800000-8FFFFF     (base 16)		Guangdong DE at science and technology co., LTD
-				Taide Technology Park,Jinfenghuang Industrial District, Fenggang Town,
-				Dongguan  GuangDong  523000
-				CN
-
-C8-63-14   (hex)		Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.
-200000-2FFFFF     (base 16)		Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.
-				Tymphany Industrial Area, Xin Lian Village, XinXu Town, HuiYang District
-				Huizhou  Guangdong  516223
-				CN
-
-98-FC-84   (hex)		chiconypower
-B00000-BFFFFF     (base 16)		chiconypower
-				23F, No.69, Sec. 2, Guangfu Rd., Sanchong Dist., New Taipei City 241, Taiwan (R.O.C.)
-				New Taipei  Taiwan  241
-				TW
-
-18-FD-CB   (hex)		Cabtronix AG
-200000-2FFFFF     (base 16)		Cabtronix AG
-				Hohstrass 1
-				Kloten  Zuerich  8302
-				CH
-
-58-20-8A   (hex)		SAMBO HITECH
-D00000-DFFFFF     (base 16)		SAMBO HITECH
-				469,Seokjung-ro,Namdong-Gu
-				Incheon    21501
-				KR
-
-18-FD-CB   (hex)		Accel Robotics
-500000-5FFFFF     (base 16)		Accel Robotics
-				9160 KEARNY VILLA CT
-				San Diego  CA  92123
-				US
-
-58-20-8A   (hex)		Conductix-Wampfler
-A00000-AFFFFF     (base 16)		Conductix-Wampfler
-				10102 Fst
-				omaha  NE  68127
-				US
-
-58-20-8A   (hex)		Infodev Electronic Designers Intl.
-B00000-BFFFFF     (base 16)		Infodev Electronic Designers Intl.
-				1995 rue Frank-Carrel Suite 202
-				Quebec  Quebec  G1N4H9
-				CA
-
-58-20-8A   (hex)		JIA HUANG JHAN YE CO.,LTD
-500000-5FFFFF     (base 16)		JIA HUANG JHAN YE CO.,LTD
-				1F., No. 19, Huanmei 2nd St., Donggang Township
-				Plngtung County    928
-				TW
-
-CC-4F-5C   (hex)		MatchX GmbH
-200000-2FFFFF     (base 16)		MatchX GmbH
-				Adalbert Str.8
-				Berlin    10999
-				DE
-
-FC-CD-2F   (hex)		SCOPUS INTERNATIONAL-BELGIUM
-A00000-AFFFFF     (base 16)		SCOPUS INTERNATIONAL-BELGIUM
-				Cable Centre, Raja International Building, 
-				Andamukkam, Kollam  Kerala  691 001
-				IN
-
-FC-CD-2F   (hex)		Spedos ADS a.s.
-C00000-CFFFFF     (base 16)		Spedos ADS a.s.
-				Hranická771
-				Valašské Mezi?í?í    75701
-				CZ
-
-58-95-D8   (hex)		Epiphan Systems Inc
-700000-7FFFFF     (base 16)		Epiphan Systems Inc
-				400 March Rd Suite 510
-				Ottawa  Ontario  K2K3H4
-				CA
-
-58-95-D8   (hex)		SuZhou Ruishengwei Intelligent Technology Co.,Ltd
-B00000-BFFFFF     (base 16)		SuZhou Ruishengwei Intelligent Technology Co.,Ltd
-				Room 507?Building 1?ZhongXuXin Science Park?NO.91?Weixin Road?Suzhou Industrial Park
-				SuZhou  JiangSu  215021
-				CN
-
-58-95-D8   (hex)		Alunos AG
-D00000-DFFFFF     (base 16)		Alunos AG
-				Zugerstrasse
-				Unteraegeri    6314
-				CH
-
-20-85-93   (hex)		Mastodon Design
-900000-9FFFFF     (base 16)		Mastodon Design
-				176 Anderson Ave, Suite F112
-				Rochester  NY  14607
-				US
-
-DC-4A-9E   (hex)		Dongguan Huili electroacoustic Industrial Co.,ltd
-000000-0FFFFF     (base 16)		Dongguan Huili electroacoustic Industrial Co.,ltd
-				Dalang Town, Biyun Cai Bai Cun East Second Street 66,A4 Building 501
-				Dongguan  Guangdong  523770
-				CN
-
-84-11-C2   (hex)		Beijing Dayu Technology Co., Ltd.
-100000-1FFFFF     (base 16)		Beijing Dayu Technology Co., Ltd.
-				11B-660, Building 13, Wangjing Xiyuan, Chaoyang
-				Beijing    100000
-				CN
-
-84-11-C2   (hex)		C TECH BILISIM TEKNOLOJILERI SAN. VE TIC. A.S.
-900000-9FFFFF     (base 16)		C TECH BILISIM TEKNOLOJILERI SAN. VE TIC. A.S.
-				Teknopark ?stanbul, TGB, Sanayi Mah. Teknopark Bulvar?, No:1, Blok:1 Kat:2, Kurtköy-Pendik 34912, ?STANBUL
-				Istanbul    34912
-				TR
-
-84-11-C2   (hex)		Guangdong Creator&Flyaudio Electronic Technology Co.,LTD
-B00000-BFFFFF     (base 16)		Guangdong Creator&Flyaudio Electronic Technology Co.,LTD
-				Block D1, No.3 Industrial Zone, Banxianshan, Hengli Town
-				Dongguan  Guangdong  523460
-				CN
-
-84-11-C2   (hex)		Dangerous Music Group, LLC
-E00000-EFFFFF     (base 16)		Dangerous Music Group, LLC
-				701 South Mountain Road
-				New City  NY  10956
-				US
-
-8C-47-6E   (hex)		Private
-700000-7FFFFF     (base 16)		Private
-
-8C-AE-49   (hex)		BERTIN TECHNOLOGIES
-300000-3FFFFF     (base 16)		BERTIN TECHNOLOGIES
-				10 Avenue Ampère
-				Montigny-le-Bretonneux  IDF  78180
-				FR
-
-8C-AE-49   (hex)		Gati Information Technolog(Kunshan)Co.,Ltd.
-500000-5FFFFF     (base 16)		Gati Information Technolog(Kunshan)Co.,Ltd.
-				2-5 / F, room 7, No. 88, Baifu Road, Economic and Technological Development Zone
-				Kunshan.  jiangsu  215300
-				CN
-
-8C-AE-49   (hex)		SEVERIN Elektrogeräte GmbH
-200000-2FFFFF     (base 16)		SEVERIN Elektrogeräte GmbH
-				Röhre 27
-				Sundern  NRW  59846
-				DE
-
-A4-53-EE   (hex)		SOS LAB Co., Ltd.
-C00000-CFFFFF     (base 16)		SOS LAB Co., Ltd.
-				B-101, BI Center, GIST 123 Cheomdangwagi-ro
-				Gwangju    61005
-				KR
-
-A4-53-EE   (hex)		Williamson Corporation
-400000-4FFFFF     (base 16)		Williamson Corporation
-				70 Domino Drive
-				Concord  MA  01742
-				US
-
-A4-53-EE   (hex)		Larva.io OÜ
-300000-3FFFFF     (base 16)		Larva.io OÜ
-				Sidur 3
-				Tallinn    11313
-				EE
-
-A4-53-EE   (hex)		Foshan Yisihang Electrical Technology Co., Ltd.
-500000-5FFFFF     (base 16)		Foshan Yisihang Electrical Technology Co., Ltd.
-				F4 Block A Lege Industrial Park, North Yucheng Road, Lunjiao Town, Shunde District
-				Foshan  Guangdong  528308
-				CN
-
-A0-02-4A   (hex)		IoTecha Corp
-E00000-EFFFFF     (base 16)		IoTecha Corp
-				2555 Route 130, Suite 2
-				Cranbury  NJ  08512
-				US
-
-78-D4-F1   (hex)		TNB
-C00000-CFFFFF     (base 16)		TNB
-				Ryazanskiy Prospekt, 24, k.2
-				Moscow    109428
-				RU
-
-78-D4-F1   (hex)		Burisch Elektronik Bauteile GmbH
-000000-0FFFFF     (base 16)		Burisch Elektronik Bauteile GmbH
-				Leopoldauerstrasse 29
-				Vienna    1210
-				AT
-
-78-D4-F1   (hex)		Guangzhou Kingray information technology Co.,Ltd.
-600000-6FFFFF     (base 16)		Guangzhou Kingray information technology Co.,Ltd.
-				No.8, Jinghu Road, Huadu Reg
-				Guangzhou    510800
-				CN
-
-78-D4-F1   (hex)		Ekoenergetyka - Polska S.A.
-300000-3FFFFF     (base 16)		Ekoenergetyka - Polska S.A.
-				ul. Nowy Kisielin - Wysockiego 8
-				Zielona Gora    66-002
-				PL
-
-44-6F-D8   (hex)		Shenzhen Furuilian Electronic Co.,Ltd.
-100000-1FFFFF     (base 16)		Shenzhen Furuilian Electronic Co.,Ltd.
-				3/F, No.5 Building Workshop, No.123, Shuitian Industrial Zone,Baoshi East Road, Shuitian Community, Shiyan Street, Bao'an District,
-				Shenzhen    518000
-				CN
-
-44-6F-D8   (hex)		lb Lautsprecher gmbH
-400000-4FFFFF     (base 16)		lb Lautsprecher gmbH
-				Steinerstrasse 15 K
-				Munich  Bavaria  81369
-				DE
-
-44-6F-D8   (hex)		Beijing gpthink technology co.,LTD.
-B00000-BFFFFF     (base 16)		Beijing gpthink technology co.,LTD.
-				Beijing fengtai guogongzhuang
-				Beijing    100070
-				CN
-
-44-6F-D8   (hex)		Global Telecom Engineering, Inc
-800000-8FFFFF     (base 16)		Global Telecom Engineering, Inc
-				17901 Von Karman Ave, Suite 600
-				Irvine  CA  92614
-				US
-
-40-11-75   (hex)		disguise Technologies Limited
-C00000-CFFFFF     (base 16)		disguise Technologies Limited
-				88-89 Blackfriars Rd
-				London  South Bank  SE1 8HA,
-				GB
-
-74-F8-DB   (hex)		Avantree Corporation
-900000-9FFFFF     (base 16)		Avantree Corporation
-				175 Bernal road Ste 106
-				SAN JOSE  CA  95119-1343
-				US
-
-04-11-19   (hex)		Shenzhen YIZHENG Technology Co.,Ltd
-800000-8FFFFF     (base 16)		Shenzhen YIZHENG Technology Co.,Ltd
-				2305, block A7, Chuangzhi Yuncheng, Liuxian Avenue, Xili Town, Nanshan District
-				ShenZhen  GuangDong  518000
-				CN
-
-04-11-19   (hex)		Hubei Baobao Intelligent Technology Co.,LTD
-B00000-BFFFFF     (base 16)		Hubei Baobao Intelligent Technology Co.,LTD
-				Hubei Baobao Intelligent Technology Co.,LTD
-				Wuhan  Hubei  430000
-				CN
-
-04-11-19   (hex)		JULIDA LIMITED
-E00000-EFFFFF     (base 16)		JULIDA LIMITED
-				1F., NO. 137, DATONG ST., BEITOU DIST.
-				TAIPEI CITY  Taiwan  112
-				TW
-
-04-11-19   (hex)		FORT Robotics Inc.
-000000-0FFFFF     (base 16)		FORT Robotics Inc.
-				170 S. Independence Mall, Suite 275W
-				Philadelphia  PA  19106
-				US
-
-E8-6C-C7   (hex)		Hangzhou Lanxum Security Technology Co., Ltd
-900000-9FFFFF     (base 16)		Hangzhou Lanxum Security Technology Co., Ltd
-				Room 402, Block A, 4th Floor, Building 3, No. 351 changhe Road, Changhe Street, Binjiang District
-				Hangzhou  Zhejiang  310000
-				CN
-
-E8-6C-C7   (hex)		KLAB
-600000-6FFFFF     (base 16)		KLAB
-				94-23,Techno 2-ro
-				Yuseong-gu  Daejeon  34014
-				KR
-
-24-5D-FC   (hex)		Senix Corporation
-C00000-CFFFFF     (base 16)		Senix Corporation
-				10516 Route 116, Suite 300
-				Hinesburg  VT  05461
-				US
-
-24-5D-FC   (hex)		Hunan Honestone lntelligence Technology Co.,Ltd
-D00000-DFFFFF     (base 16)		Hunan Honestone lntelligence Technology Co.,Ltd
-				705, Building 1, Fortune Plaza, Wankuntu, Xiangzhang Road, Yuhua District, Changsha City,
-				Changsha    410007
-				CN
-
-E8-6C-C7   (hex)		Shenzhen Rongda Computer Co.,Ltd
-500000-5FFFFF     (base 16)		Shenzhen Rongda Computer Co.,Ltd
-				905, Block B, DuoCaiKeChuan Park, No.5 Guanle Road
-				Longhua District  Shenzhen, Guangdong    518110
-				CN
-
-00-55-DA   (hex)		Nanoleaf
-500000-5FFFFF     (base 16)		Nanoleaf
-				100 Front Street East, 4th Floor
-				Toronto  Ontario  M5A 1E1
-				CA
-
-24-5D-FC   (hex)		Dodge
-E00000-EFFFFF     (base 16)		Dodge
-				6040 Ponders Court
-				Greenville  SC  29615
-				US
-
-60-15-92   (hex)		EDA Technology Co.,LTD
-200000-2FFFFF     (base 16)		EDA Technology Co.,LTD
-				Room 301, Building 24, Shengchuang Enterprise Park,No.1661 Jialuo Road, Jiading District
-				Shanghai  Shanghai  201822
-				CN
-
-60-15-92   (hex)		insensiv GmbH
-A00000-AFFFFF     (base 16)		insensiv GmbH
-				Auf dem Esch 28
-				Bielefeld  Nordrhein-Westfalen  33619
-				DE
-
-60-15-92   (hex)		REMOWIRELESS COMMUNICATION INTERNATIONAL CO.,LIMITED
-D00000-DFFFFF     (base 16)		REMOWIRELESS COMMUNICATION INTERNATIONAL CO.,LIMITED
-				 REMOWIRELESS RM1111,HONGYI BUILDING NO.2158 WANYUAN ROAD
-				SHANGHAI  SHANGHAI  201103
-				CN
-
-0C-5C-B5   (hex)		avxav Electronic Trading LLC
-100000-1FFFFF     (base 16)		avxav Electronic Trading LLC
-				Office 534 Building # 6WA Dubai Airport Free Zone
-				Dubai  United Arab Emirates  33964
-				AE
-
-0C-5C-B5   (hex)		Munters Europe AB
-E00000-EFFFFF     (base 16)		Munters Europe AB
-				Borgarfjordsgatan 16
-				Kista    16440
-				SE
-
-0C-5C-B5   (hex)		HongKong Blossom Limited
-200000-2FFFFF     (base 16)		HongKong Blossom Limited
-				B1715,Jiansheng Building,No. 1 Pingji Road, NanWan Street Longgang
-				Shenzhen    518112
-				CN
-
-1C-A0-EF   (hex)		Sequent AG
-300000-3FFFFF     (base 16)		Sequent AG
-				Eptingerstrasse 3
-				Basel    4052
-				CH
-
-0C-5C-B5   (hex)		Yamasei
-000000-0FFFFF     (base 16)		Yamasei
-				2F., No. 37, Ln. 11, Sec. 6, Minquan E. Rd., Neihu Dist.
-				Taipei  Taiwan (R.O.C.)  114
-				TW
-
-1C-A0-EF   (hex)		tec5AG
-700000-7FFFFF     (base 16)		tec5AG
-				Weisskirchener Strasse 2-6
-				Steinbach  Hessen  61449
-				DE
-
-20-CE-2A   (hex)		MeshPlusPlus, Inc.
-A00000-AFFFFF     (base 16)		MeshPlusPlus, Inc.
-				935 W. Chestnut St., Suite #505
-				Chicago  IL  60642
-				US
-
-20-CE-2A   (hex)		LAUDA DR R WOBSER GMBH & CO KG
-D00000-DFFFFF     (base 16)		LAUDA DR R WOBSER GMBH & CO KG
-				Pfarrstrasse 41/43
-				Lauda-Koenigshofen    97922
-				DE
-
-20-CE-2A   (hex)		Rugged Monitoring
-900000-9FFFFF     (base 16)		Rugged Monitoring
-				1415 Frank-Carrel, Suite 230
-				Quebec City  Quebec  G1N4N7
-				CA
-
-20-CE-2A   (hex)		Zaber Technologies Inc.
-500000-5FFFFF     (base 16)		Zaber Technologies Inc.
-				#2 - 605 West Kent Ave. N.
-				Vancouver  B.C.  V6P 6T7
-				CA
-
-20-CE-2A   (hex)		Swarovski Optik KG
-B00000-BFFFFF     (base 16)		Swarovski Optik KG
-				Daniel Swarovski Street 70
-				Absam    6067
-				AT
-
-88-C9-B3   (hex)		Brabender Technologie GmbH & Co, KG
-500000-5FFFFF     (base 16)		Brabender Technologie GmbH & Co, KG
-				Kulturstrasse 49
-				Duisburg    47055
-				DE
-
-20-CE-2A   (hex)		Funkwerk Systems GmbH
-E00000-EFFFFF     (base 16)		Funkwerk Systems GmbH
-				Im Funkwerk 5
-				Koelleda    99625
-				DE
-
-88-C9-B3   (hex)		Hasbro Inc
-400000-4FFFFF     (base 16)		Hasbro Inc
-				1027 Newport Ave
-				Pawtucket  RI  02861
-				US
-
-88-C9-B3   (hex)		Sercomm Corporation.
-E00000-EFFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-88-C9-B3   (hex)		Divelbiss Corporation
-800000-8FFFFF     (base 16)		Divelbiss Corporation
-				9778 Mount Gilead Road
-				Fredericktown  OH  43019
-				US
-
-88-C9-B3   (hex)		Origins Technology Limited
-D00000-DFFFFF     (base 16)		Origins Technology Limited
-				18 Xinzhong St Dushiyangguang4-1106, Dongcheng
-				Beijing    100027
-				CN
-
-C8-F5-D6   (hex)		Shanghai Mo xiang Network Technology CO.,Ltd
-900000-9FFFFF     (base 16)		Shanghai Mo xiang Network Technology CO.,Ltd
-				Room#418-421, ShaHeXiLi, 2-2 XiLi North Road, LiCheng Community, Xili Street, NanShan District
-				Shenzhen  Guangdong  518071
-				CN
-
-C8-F5-D6   (hex)		United Barcode Systems
-B00000-BFFFFF     (base 16)		United Barcode Systems
-				Av. Progres 56, Pol. Ind. els Garrofers
-				Vilassar de Mar  Barcelona  08340
-				ES
-
-C8-F5-D6   (hex)		Eltako GmbH
-C00000-CFFFFF     (base 16)		Eltako GmbH
-				Hofener Straße 54
-				Fellbach  BW  70736
-				DE
-
-C0-FB-F9   (hex)		SHENZHEN ELSKY TECHNOLOGY CO., LTD
-C00000-CFFFFF     (base 16)		SHENZHEN ELSKY TECHNOLOGY CO., LTD
-				1F BUILDING 2# ASIA INDUSTIAL PARK BANTIAN STREET LONGGANG DISTRICT 
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-C0-FB-F9   (hex)		Dropbeats Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		Dropbeats Technology Co., Ltd.
-				Room 304, Building 4?Juli Road ? Pudong New District
-				Shanghai  Shanghai  201203
-				CN
-
-D0-9F-D9   (hex)		Elevoc Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Elevoc Technology Co., Ltd.
-				5/F,Unit B,Block12,ShenZhenwan Science and Technology Ecological Garden,Nanshan Dist.
-				Shenzhen  Guangdong  518000
-				CN
-
-D0-9F-D9   (hex)		Eurolan Ltd
-A00000-AFFFFF     (base 16)		Eurolan Ltd
-				jk. Drujba 1, ul. 5028, do bl. 15
-				Sofia  Sofia (stolitsa)  1592
-				BG
-
-E0-5A-9F   (hex)		Fujian Newland Auto-ID Tech. Co,.Ltd.
-800000-8FFFFF     (base 16)		Fujian Newland Auto-ID Tech. Co,.Ltd.
-				Newland Science & Technology Park, No.1 Rujiang West Rd,Mawei,Fuzhou, P.R.China
-				Fuzhou  Fujian  350015
-				CN
-
-18-74-E2   (hex)		NextGen RF Design, Inc.
-C00000-CFFFFF     (base 16)		NextGen RF Design, Inc.
-				2130 Howard Dr W
-				North Mankato  MN  56003
-				US
-
-18-74-E2   (hex)		Sartorius Lab Instruments GmbH & Co. KG
-100000-1FFFFF     (base 16)		Sartorius Lab Instruments GmbH & Co. KG
-				Otto-Brenner-Straße 20
-				Goettingen    37079
-				DE
-
-18-74-E2   (hex)		Linux Automation GmbH
-A00000-AFFFFF     (base 16)		Linux Automation GmbH
-				Steuerwalder Str 21
-				Hildesheim    31137
-				DE
-
-E8-78-29   (hex)		Bernd Walter Computer Technology
-D00000-DFFFFF     (base 16)		Bernd Walter Computer Technology
-				Fontanestr. 18
-				Moers  NRW  47445
-				DE
-
-18-74-E2   (hex)		Samriddi Automations Pvt. Ltd.
-D00000-DFFFFF     (base 16)		Samriddi Automations Pvt. Ltd.
-				F-365
-				Noida  up  201307
-				IN
-
-E8-78-29   (hex)		METZ CONNECT GmbH
-A00000-AFFFFF     (base 16)		METZ CONNECT GmbH
-				Im Tal 2
-				Blumberg    78176
-				DE
-
-E8-78-29   (hex)		Shenzhen Jointelli Technologies Co.,Ltd 
-100000-1FFFFF     (base 16)		Shenzhen Jointelli Technologies Co.,Ltd 
-				Room A4-1203, Building A, Kexing Science Park, No. 15, Keyuan Road,Keyuan Community,Yuehai Street,Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-E8-78-29   (hex)		Solos Technology Limited
-E00000-EFFFFF     (base 16)		Solos Technology Limited
-				Unit 211, 2/F., Photonics Centre, No 2 Science Park East Avenue, Shatin
-				Hong Kong  Hong Kong  999077
-				HK
-
-78-13-05   (hex)		Shenzhen AV-Display Co.,Ltd
-800000-8FFFFF     (base 16)		Shenzhen AV-Display Co.,Ltd
-				No.39,He Ao Jin Yuan Road, Yuanshan Subdistrict, Longgang District ,Shenzhen, China
-				SHENZHEN    518000
-				CN
-
-78-13-05   (hex)		Bithouse Oy
-B00000-BFFFFF     (base 16)		Bithouse Oy
-				Hepolamminkatu 32
-				Tampere    FI-33720
-				FI
-
-78-13-05   (hex)		CRRC Nangjing Puzhen Haitai Brake Equipment Co., LTD 
-600000-6FFFFF     (base 16)		CRRC Nangjing Puzhen Haitai Brake Equipment Co., LTD 
-				No.10 Xinglong Road Pukou Economic Development District
-				Nanjing  Jiangsu  211800
-				CN
-
-A8-5B-36   (hex)		Bluesoo Tech (HongKong) Co.,Limited
-000000-0FFFFF     (base 16)		Bluesoo Tech (HongKong) Co.,Limited
-				Room 05, 28 / F, good view business centre, 2-16 Garden Street, Mong Kok, Kowloon, Hongkong.
-				HongKong    999077
-				HK
-
-A8-5B-36   (hex)		DAP B.V.
-600000-6FFFFF     (base 16)		DAP B.V.
-				Tussendiepen 4a
-				Drachten    9206 AD
-				NL
-
-A8-5B-36   (hex)		Louis Vuitton Malletier
-700000-7FFFFF     (base 16)		Louis Vuitton Malletier
-				2 rue du Pont Neuf
-				Paris    75001
-				FR
-
-A8-5B-36   (hex)		ORBITVU Sp. z o. o.
-E00000-EFFFFF     (base 16)		ORBITVU Sp. z o. o.
-				Sienkiewicza, 48
-				Tarnowskie Góry    42-600
-				PL
-
-F0-2A-2B   (hex)		Shenzhen ORVIBO Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd.
-				F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC.
-				shenzhen    518000
-				CN
-
-44-A9-2C   (hex)		China Electronics Corporation Greatwall Shengfeifan information system Co.,ltd. Hu'nan computer R.&D. Center
-900000-9FFFFF     (base 16)		China Electronics Corporation Greatwall Shengfeifan information system Co.,ltd. Hu'nan computer R.&D. Center
-				China Electronics Software Park,Yuelu District,Changsha City,Hunan Province
-				Changsha    410013
-				CN
-
-44-A9-2C   (hex)		NPP KOMETEH JSC
-D00000-DFFFFF     (base 16)		NPP KOMETEH JSC
-				Lomanaya 5
-				Sankt-Petersburg    196006
-				RU
-
-58-48-49   (hex)		Telegaertner Elektronik GmbH
-D00000-DFFFFF     (base 16)		Telegaertner Elektronik GmbH
-				Hofaeckerstr. 18
-				Crailsheim  Baden-Wuerttemberg  74564
-				DE
-
-58-48-49   (hex)		STACKFORCE GmbH
-800000-8FFFFF     (base 16)		STACKFORCE GmbH
-				Biengener Str. 3
-				Eschbach    79427
-				DE
-
-D0-9F-D9   (hex)		GS Yuasa Infrastructure Systems Co.,Ltd.
-300000-3FFFFF     (base 16)		GS Yuasa Infrastructure Systems Co.,Ltd.
-				677 Shimoakasaka-Ohnohara
-				Kawagoe-Shi  Saitama  350-1155
-				JP
-
-58-48-49   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-400000-4FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-58-48-49   (hex)		Haag-Streit AG
-C00000-CFFFFF     (base 16)		Haag-Streit AG
-				Gartenstadtstrasse 10
-				Koeniz    3098
-				CH
-
-64-33-B5   (hex)		Revo Smart Technologies co.,limited
-500000-5FFFFF     (base 16)		Revo Smart Technologies co.,limited
-				RM 1902 EASEY COMM BLDG 253-261 HENNESSY ROAD WANCHAI  HK
-				Hong Kong    999077
-				CN
-
-28-36-13   (hex)		Shenzhen HQVT TECHNOLOGY Co.,LTD
-200000-2FFFFF     (base 16)		Shenzhen HQVT TECHNOLOGY Co.,LTD
-				3/F,Building 8 ,Taihua Wutong Island,Xixiang,Bao'an District
-				China  Guang Dong  518000
-				CN
-
-28-36-13   (hex)		Shandong SIASUN Industrial Software Research Institute Co., Ltd
-000000-0FFFFF     (base 16)		Shandong SIASUN Industrial Software Research Institute Co., Ltd
-				Rm301,Artificial Intelligence Building,Jingshi Road,Jinan Area Of China(Shandong) Pilot Free Trade Zone
-				jinan    250000
-				CN
-
-28-36-13   (hex)		ESI Ventures, LLC
-600000-6FFFFF     (base 16)		ESI Ventures, LLC
-				2085 Humphrey Street
-				Fort Wayne  IN  46803
-				US
-
-28-36-13   (hex)		AVYCON
-D00000-DFFFFF     (base 16)		AVYCON
-				16682 Millikan Ave
-				Irvine  CA  92606
-				US
-
-78-5E-E8   (hex)		Jiangxi guoxuan radio and television technology Co.,Ltd
-800000-8FFFFF     (base 16)		Jiangxi guoxuan radio and television technology Co.,Ltd
-				No.3 Jincheng First Road, Guzhang Industrial Park, Shicheng County, Ganzhou City, Jiangxi
-				Ganzhou     341000
-				CN
-
-78-5E-E8   (hex)		Vega-Absolute
-200000-2FFFFF     (base 16)		Vega-Absolute
-				Kirova 113/1
-				Novosibirsk    630008
-				RU
-
-78-5E-E8   (hex)		Suzhou Tianping Advanced Digital Technologies Co.Ltd
-E00000-EFFFFF     (base 16)		Suzhou Tianping Advanced Digital Technologies Co.Ltd
-				Room304,Building 4,No.209.ZhuyuanRoad,Gaoxin District
-				Suzhou  Jiangsu  215000
-				CN
-
-84-11-C2   (hex)		 FUJIFILM Healthcare Corporation
-300000-3FFFFF     (base 16)		 FUJIFILM Healthcare Corporation
-				2-1,Shintoyofuta
-				Kashiwa-shi  Chiba  277-0804
-				JP
-
-78-5E-E8   (hex)		Incontrol LLC
-300000-3FFFFF     (base 16)		Incontrol LLC
-				23 building 2, office 5-7, Leninskaya Sloboda st
-				Moscow    115280
-				RU
-
-38-A8-CD   (hex)		NIC Technologii
-A00000-AFFFFF     (base 16)		NIC Technologii
-				2/5 Selezneva Street
-				Krasnodar  Krasnodarsky kray  350059
-				RU
-
-38-A8-CD   (hex)		PT Supertone
-900000-9FFFFF     (base 16)		PT Supertone
-				Jl Gajah Mada 218 F-G
-				Jakarta  DKI Jakarta   11120
-				ID
-
-50-DE-19   (hex)		DTEN Inc.
-E00000-EFFFFF     (base 16)		DTEN Inc.
-				97 E Brokaw Rd, Ste 180
-				San Jose  CA  95112-1032____
-				US
-
-7C-83-34   (hex)		Shenzhen AZW Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Shenzhen AZW Technology Co., Ltd.
-				LongJun Industrial Park
-				shenzhen    518000
-				CN
-
-38-A8-CD   (hex)		Revo Infratech USA Ltd
-500000-5FFFFF     (base 16)		Revo Infratech USA Ltd
-				7588 Central Parke Blvd Suite# 109
-				Mason  OH  45040
-				US
-
-7C-83-34   (hex)		Hunan Datang Xianyi Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Hunan Datang Xianyi Technology Co.,Ltd
-				No.568 QueYuan Road Chuanggu Park Flat 1001-1061
-				Changsha    410000
-				CN
-
-7C-83-34   (hex)		ENGINETECH (TIANJIN) COMPUTER CO.,LTD.
-A00000-AFFFFF     (base 16)		ENGINETECH (TIANJIN) COMPUTER CO.,LTD.
-				No.6 Hechang Road, Wuqing Development Zone
-				TIANJIN    301726
-				CN
-
-1C-AE-3E   (hex)		P.H.U. Metering Anna Moder
-400000-4FFFFF     (base 16)		P.H.U. Metering Anna Moder
-				Parkowa 1
-				Buczek    98-113
-				PL
-
-1C-AE-3E   (hex)		DAO QIN TECHNOLOGY CO.LTD.
-000000-0FFFFF     (base 16)		DAO QIN TECHNOLOGY CO.LTD.
-				NO.359, ZHONGXIAO RD.
-				CHISHANG TOWNSHIP  TAITUNG COUNTY   95861
-				TW
-
-7C-83-34   (hex)		Silicon Xpandas Electronics Co., Ltd.
-800000-8FFFFF     (base 16)		Silicon Xpandas Electronics Co., Ltd.
-				8F., No.437, Ruiguang Rd., Neihu Dist.
-				Taipei City 11492    11492
-				TW
-
-1C-AE-3E   (hex)		NextDrive Co.
-700000-7FFFFF     (base 16)		NextDrive Co.
-				8F., No. 8, Ln. 47, Sec. 3, Nangang Rd., Nangang Dist.,
-				Taipei City    115004
-				TW
-
-98-6E-E8   (hex)		Logos Payment Solutions A/S
-A00000-AFFFFF     (base 16)		Logos Payment Solutions A/S
-				Nærum Hovedgade 6
-				Nærum    2850
-				DK
-
-98-6E-E8   (hex)		Blair Companies
-600000-6FFFFF     (base 16)		Blair Companies
-				5107 Kissell Ave
-				Altoona  PA  16601
-				US
-
-98-6E-E8   (hex)		First Design System Inc.
-E00000-EFFFFF     (base 16)		First Design System Inc.
-				Tachibana Shinjuku Bldg. 3F, 3-2-26 Nishi-Shinjuku
-				Tokyo  Shinjuku-ku  160-0023
-				JP
-
-98-6E-E8   (hex)		Span.IO, Inc.
-900000-9FFFFF     (base 16)		Span.IO, Inc.
-				679 Bryant Street
-				San Francisco  CA  94107
-				US
-
-98-6E-E8   (hex)		ReeR SpA
-300000-3FFFFF     (base 16)		ReeR SpA
-				via carcano 32
-				torino    10153
-				IT
-
-98-6E-E8   (hex)		Sbarco Technology CO., Ltd.
-000000-0FFFFF     (base 16)		Sbarco Technology CO., Ltd.
-				4F, No.115, LIde St., JhongHe Dist.
-				New Taipei City     23556
-				TW
-
-98-80-BB   (hex)		RYEEX Technology Co.,Ltd.
-000000-0FFFFF     (base 16)		RYEEX Technology Co.,Ltd.
-				RM106,Joinin Hub,Builing J District 71,Construction Industrial Park,Xin'an Street,Bao'an, Shenzhen,China
-				SHENZHEN  GUANGDONG  518101
-				CN
-
-98-80-BB   (hex)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
-600000-6FFFFF     (base 16)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
-				No.2 Xinxiu Street, Hunnan District, Shenyang
-				Shenyang  Liaoning  110000
-				CN
-
-78-72-64   (hex)		digades GmbH
-B00000-BFFFFF     (base 16)		digades GmbH
-				Äußere Weberstraße 20
-				Zittau    02748
-				DE
-
-98-80-BB   (hex)		D.Med Technical Products GmbH
-E00000-EFFFFF     (base 16)		D.Med Technical Products GmbH
-				Klaus-Bungert-Str. 3
-				Düsseldorf    40468
-				DE
-
-98-80-BB   (hex)		GreatWall Information Co.,Ltd
-100000-1FFFFF     (base 16)		GreatWall Information Co.,Ltd
-				No.5,3rd EastRoad,ChangshaEconomic and TechnologicalDevelopment Zone,Hunan,Chian
-				Changsha  Hunan  410000
-				CN
-
-78-72-64   (hex)		Comcast-SRL
-C00000-CFFFFF     (base 16)		Comcast-SRL
-				Alejo Martinez 17
-				Sosua  Puerto Plata  34443
-				DO
-
-78-72-64   (hex)		Zhengzhou Reform Intelligent Device Co., Ltd
-100000-1FFFFF     (base 16)		Zhengzhou Reform Intelligent Device Co., Ltd
-				Kangqiao Business Plaza, Chengdong Road, Zhengbian Road, Guancheng District 2122
-				Zhengzhou City  Henan Province  450000
-				CN
-
-78-72-64   (hex)		CALTTA TECHNOLOGIES CO.,LTD.
-500000-5FFFFF     (base 16)		CALTTA TECHNOLOGIES CO.,LTD.
-				Building G2, International E-City, Nanshan District,
-				ShenZhen  Guangdong  518052
-				CN
-
-78-72-64   (hex)		Heltec Automation
-E00000-EFFFFF     (base 16)		Heltec Automation
-				64 Chenghong Rd., Longtan Industrial Park, Chenghua District
-				Chengdu  Sichuan  610000
-				CN
-
-F4-70-0C   (hex)		Shenzhen Excelland Technology Co., Ltd.
-100000-1FFFFF     (base 16)		Shenzhen Excelland Technology Co., Ltd.
-				5D, Building #1, Tingwei Industrial Park, Liufang Road #6, 67 Zone of Xingdong Community, Xin'an Street, Baoan District
-				Shenzhen  Guangdong  518100
-				CN
-
-F4-70-0C   (hex)		Changde xsound lnnovation technologies co;ltd.
-700000-7FFFFF     (base 16)		Changde xsound lnnovation technologies co;ltd.
-				2nd Floor, Building 6, Electroacoustic Industrial Park, Economic Development Zone, Deshan Town, Wuling District
-				changde  hunan  415000
-				CN
-
-F4-A4-54   (hex)		Shenzhen Cudy Technology Co., Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Cudy Technology Co., Ltd.
-				Room A606, Gaoxinqi Industrial Park, Baoan 67 Dist
-				Baoan 67 District, Shenzhen    518101
-				CN
-
-18-45-B3   (hex)		ELPITECH LLC
-500000-5FFFFF     (base 16)		ELPITECH LLC
-				26 km of Baltya road, business center Riga Lang, office 11.
-				Krasnogorsk  Moscow region, Krasnogorsk district  143421
-				RU
-
-08-F8-0D   (hex)		Zhejiang Luci Technology Co., Ltd
-500000-5FFFFF     (base 16)		Zhejiang Luci Technology Co., Ltd
-				14/ F, Building 36, Nantaihu Dongyuan Business Building, High-tech Zone, Wuxing District
-				Huzhou  Zhejiang  313000
-				CN
-
-08-F8-0D   (hex)		Huizhou changfei Optoelectruonics Technology Co.,Ltd
-000000-0FFFFF     (base 16)		Huizhou changfei Optoelectruonics Technology Co.,Ltd
-				Floor 3-4.No.26,Xinhua Avenue,Tongqiao town
-				Huicheng District,Huizhou City  Guangdong Province  516032
-				CN
-
-08-F8-0D   (hex)		HANGZHOU YILI Communication Equipment Ltd
-700000-7FFFFF     (base 16)		HANGZHOU YILI Communication Equipment Ltd
-				No.12,Kangyuan Road
-				Shanghai  Hangzhou  Zhejiang
-				CN
-
-1C-A0-D3   (hex)		U-TX Technologies Ltd
-700000-7FFFFF     (base 16)		U-TX Technologies Ltd
-				Omonoia Avenue
-				Limassol  Cyprus  3045
-				CY
-
-18-45-B3   (hex)		Sleep Number
-E00000-EFFFFF     (base 16)		Sleep Number
-				1001 Third Avenue South
-				Minneapolis  MN  55404
-				US
-
-94-C9-B7   (hex)		Dspread Technology (Beijing) Inc.
-D00000-DFFFFF     (base 16)		Dspread Technology (Beijing) Inc.
-				Jingxin Building, 2045 Suite , Chaoyang District
-				Beijing    100027
-				CN
-
-94-C9-B7   (hex)		Sitronics JSC
-300000-3FFFFF     (base 16)		Sitronics JSC
-				Volgogradskiy prospect 32, building 31
-				Moscow  Moscow region  109316
-				RU
-
-94-C9-B7   (hex)		Realtimes Beijing Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Realtimes Beijing Technology Co., Ltd.
-				RoomB 901 NO.20 Heping Xiyuan West Heping Street Chaoyang District 
-				Beijing    100013
-				CN
-
-94-C9-B7   (hex)		Private
-800000-8FFFFF     (base 16)		Private
-
-08-F8-0D   (hex)		Shanghai Mininglamp AI Group Co.,Ltd
-200000-2FFFFF     (base 16)		Shanghai Mininglamp AI Group Co.,Ltd
-				29th,30th,31st and 32nd floors,701 Yunjin Road, Xuhui District
-				Shanghai    200232
-				CN
-
-08-F8-0D   (hex)		Vont Innovations
-B00000-BFFFFF     (base 16)		Vont Innovations
-				30 N Gould St Ste R, Sheridan, WY
-				Sheridan  WY  82801
-				US
-
-08-F8-0D   (hex)		MICKEY INDUSTRY,LTD.
-A00000-AFFFFF     (base 16)		MICKEY INDUSTRY,LTD.
-				26-3 Higashi 3-Chome 
-				Shibuya-ku  Tokyo  150-0011
-				JP
-
-94-C9-B7   (hex)		Jinjin Technology (Shenzhen) Co., Ltd
-C00000-CFFFFF     (base 16)		Jinjin Technology (Shenzhen) Co., Ltd
-				5-4 Shankeng Inner Ring Road, Shanxia Community, Pinghu Street, Longgang District
-				Shenzhen  Guangdong  518111
-				CN
-
-94-C9-B7   (hex)		MAMMOTHTEK CLOUD(DONG GUAN)TECHNOLOGY CO., LTD
-700000-7FFFFF     (base 16)		MAMMOTHTEK CLOUD(DONG GUAN)TECHNOLOGY CO., LTD
-				INDUSTRY NORTH ROAD,SONGSHANHU
-				DONGGUAN  GUANGDONG  523808
-				CN
-
-50-A0-30   (hex)		Shenzhen Hewang Electric Co.,Ltd
-700000-7FFFFF     (base 16)		Shenzhen Hewang Electric Co.,Ltd
-				5th Floor, building 6, No. 2 Industrial Zone, Guanlong village, Xili town, Nanshan district, 
-				Shenzhen    518000
-				CN
-
-50-A0-30   (hex)		XEPIC Corporation Limited
-100000-1FFFFF     (base 16)		XEPIC Corporation Limited
-				Floor 18-19, Shared Spaces, Research and Innovation Park, Huachuang Road, Jiangbei New Area 
-				Nanjing  Jiangsu  210043
-				CN
-
-04-EE-E8   (hex)		Shanghai ZLAN Information Technology Co.,Ltd
-100000-1FFFFF     (base 16)		Shanghai ZLAN Information Technology Co.,Ltd
-				28# YuanWen Road, MinHang District
-				Shanghai  Shanghai  201199
-				CN
-
-50-A0-30   (hex)		Missing-Link Oy
-A00000-AFFFFF     (base 16)		Missing-Link Oy
-				Åkerlundinkatu 8
-				Tampere  Pirkanmaa  33100 
-				FI
-
-04-EE-E8   (hex)		Shenzhen C & D Electronics Co., Ltd.
-700000-7FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-18-D7-93   (hex)		Autel lntelligent Technology Corp.,Ltd
-600000-6FFFFF     (base 16)		Autel lntelligent Technology Corp.,Ltd
-				7th, 8th, 10th Floor, Building B1, Zhiyuan Road, No. 1001 Xueyuan Avenue, Xili Street, Nanshan District, Shenzhen
-				Shenzhen    518000
-				CN
-
-18-D7-93   (hex)		Remote Engineer B.V.
-400000-4FFFFF     (base 16)		Remote Engineer B.V.
-				It Vegelinskampke, 11
-				Akkrum  Select a state (US only)  8491PD
-				NL
-
-18-D7-93   (hex)		Private
-C00000-CFFFFF     (base 16)		Private
-
-DC-36-43   (hex)		Hangzhou Chingan Tech Co., Ltd.
-500000-5FFFFF     (base 16)		Hangzhou Chingan Tech Co., Ltd.
-				4F, BLDG. 4, 16# XIYUAN YI ROAD HANGZHOU, ZHEJIANG,CHINA 310030
-				hangzhou  zhejiang  310000
-				CN
-
-08-26-AE   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
-000000-0FFFFF     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
-				Tianyu Building, S.&T.Park, Huazhong University of S.&T.,East Lake Development Zone
-				Wuhan  Hubei  430000
-				CN
-
-DC-36-43   (hex)		Hefei EA Excelsior Information Security Co., Ltd.
-900000-9FFFFF     (base 16)		Hefei EA Excelsior Information Security Co., Ltd.
-				1F, Block A, Tsinghua Unis Infoport, Langshan Rd, Hi-Tech Industrial (North), Nanshan
-				Shenzhen  Guangdong  518000
-				CN
-
-08-26-AE   (hex)		EVTECH SOLUTIONS LTD. DBA 3D-P
-700000-7FFFFF     (base 16)		EVTECH SOLUTIONS LTD. DBA 3D-P
-				UNIT 101  2609 15TH STREET NE
-				CALGARY  Alberta  T2E 8Y4
-				CA
-
-98-8F-E0   (hex)		KuaiZhu SmartTechnology?Suzhou?CO.,Ltd
-500000-5FFFFF     (base 16)		KuaiZhu SmartTechnology?Suzhou?CO.,Ltd
-				NO.209 Zhu Yuan Road
-				suzhou  jiangsu  215100
-				CN
-
-98-8F-E0   (hex)		Nawon Machinery
-900000-9FFFFF     (base 16)		Nawon Machinery
-				268, Jaedurumi-gil
-				Paju-si  Gyeonggi-do  10863
-				KR
-
-98-8F-E0   (hex)		Valinso B.V.
-000000-0FFFFF     (base 16)		Valinso B.V.
-				Uithof 5
-				Wijk en Aalburg    4261 LN
-				NL
-
-10-54-D2   (hex)		Shenzhen Dinstech Technology Co.,Ltd.
-B00000-BFFFFF     (base 16)		Shenzhen Dinstech Technology Co.,Ltd.
-				Shenzhen Qianhai Shenzhen-Hong Kong Cooperation Zone Nanshan Street Linhai Avenue No. 59 Seaside Avenue 3rd Floor D378, Port Building, Shipping Center
-				Shenzhen    518000
-				CN
-
-10-54-D2   (hex)		Sun wealth technology corporation limited
-D00000-DFFFFF     (base 16)		Sun wealth technology corporation limited
-				Room605,The Dongfangmingzhu business building,qian jin 1 road,xin an street,bao an district ,shenzhen ,guang dong province,China.
-				shenzhen   Guang dong   518000
-				CN
-
-10-54-D2   (hex)		ComNav Technology Ltd.
-200000-2FFFFF     (base 16)		ComNav Technology Ltd.
-				3 floor Building 2,No.618 Chengliu Middle RD. Malu town,
-				Shanghai    200000
-				CN
-
-10-54-D2   (hex)		Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd.
-100000-1FFFFF     (base 16)		Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd.
-				Building 2 and 3,Intelligent Technology Industrial Park,high-tech industrial Development Zone, 
-				Yingtan     335000
-				CN
-
-0C-86-29   (hex)		BADA SYSTEM co., Ltd
-200000-2FFFFF     (base 16)		BADA SYSTEM co., Ltd
-				Saemalro 99 Kumsuk building 501
-				Seoul    05808
-				KR
-
-6C-93-08   (hex)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
-				E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District
-				shenz  guangdong  518055
-				CN
-
-0C-86-29   (hex)		HagerEnergy GmbH
-700000-7FFFFF     (base 16)		HagerEnergy GmbH
-				Karlstrasse 5
-				Osnabrueck    49074
-				DE
-
-30-43-D7   (hex)		Xiaoniu network technology (Shanghai) Co., Ltd.
-C00000-CFFFFF     (base 16)		Xiaoniu network technology (Shanghai) Co., Ltd.
-				Room 706, building 3, no.20 east road, jingan district.
-				Shang hai    200040
-				CN
-
-6C-93-08   (hex)		Estelar s.r.o
-400000-4FFFFF     (base 16)		Estelar s.r.o
-				Palackého 744/1
-				Holešov  ?eská republika  76901
-				CZ
-
-08-26-AE   (hex)		Flextronics International Kft
-A00000-AFFFFF     (base 16)		Flextronics International Kft
-				Zrínyi Miklós str. 38.
-				Zalaegerszeg    8900
-				HU
-
-38-1F-26   (hex)		Airmaster A/S
-400000-4FFFFF     (base 16)		Airmaster A/S
-				Industrivej 59
-				Aars    9600
-				DK
-
-38-1F-26   (hex)		HWACHANG CORPORATION 
-D00000-DFFFFF     (base 16)		HWACHANG CORPORATION 
-				90, NONGGONGANJI-GIL
-				SOCHO-SI    24899
-				KR
-
-18-A5-9C   (hex)		Residence Control Ltd
-800000-8FFFFF     (base 16)		Residence Control Ltd
-				Cvetan Vuchkov 7
-				Sofia  Sofia  1614
-				BG
-
-18-A5-9C   (hex)		Actiontec Electronics Inc.
-200000-2FFFFF     (base 16)		Actiontec Electronics Inc.
-				2445 Augustine Dr #501
-				Santa Clara   CA  95054
-				US
-
-18-A5-9C   (hex)		IT-1
-400000-4FFFFF     (base 16)		IT-1
-				260, Changnyong-daero
-				Yeongtong-gu, Suwon-si  Gyeonggi-do  16229
-				KR
-
-7C-70-BC   (hex)		Motec GmbH
-A00000-AFFFFF     (base 16)		Motec GmbH
-				287 27 Road
-				Grand Junction  CO  81503
-				US
-
-1C-59-74   (hex)		Syntax technology(tianjin)Co.,LTD
-400000-4FFFFF     (base 16)		Syntax technology(tianjin)Co.,LTD
-				Room 510-5,Comprehensive Office Building,Carpet Industrial Park,Wuqing District 
-				Tianjin  Tianjin  301700
-				CN
-
-1C-59-74   (hex)		Beijing Flintec Electronic Technology Co.,Ltd.
-B00000-BFFFFF     (base 16)		Beijing Flintec Electronic Technology Co.,Ltd.
-				Room 102,Building No.6,China Technology Venture Park,No.8,LaiGuangYing West Road,ChaoYang District 
-				Beijing  Beijing  100012
-				CN
-
-1C-59-74   (hex)		Shanghai Laisi Information Technology Co.,Ltd
-900000-9FFFFF     (base 16)		Shanghai Laisi Information Technology Co.,Ltd
-				1001,21#,No.1158 Zhongxin RD,Songjiang district Shanghai
-				shanghai    201614
-				CN
-
-1C-59-74   (hex)		Square Inc.
-600000-6FFFFF     (base 16)		Square Inc.
-				1455 Market St.
-				San Francisco  CA  94103
-				US
-
-6C-15-24   (hex)		Shenzhen Electron Technology Co., LTD.
-500000-5FFFFF     (base 16)		Shenzhen Electron Technology Co., LTD.
-				Building 2, Yingfeng Industrial Zone, Tantou Community, Songgang Street, Bao'an District
-				Shenzhen  Guangzhou  51800
-				CN
-
-6C-15-24   (hex)		ShenZhen Chainway Information Technology Co., Ltd.
-800000-8FFFFF     (base 16)		ShenZhen Chainway Information Technology Co., Ltd.
-				 9F Building2, Phase2, Gaoxinqi Industrial Park ,  Bao'an District
-				ShenZhen  GuangDong  518102
-				CN
-
-6C-15-24   (hex)		Annapurna labs
-B00000-BFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-6C-15-24   (hex)		Linkplay
-200000-2FFFFF     (base 16)		Linkplay
-				891 W. Washington Ave.
-				Sunnyvale  CA  94086
-				US
-
-6C-15-24   (hex)		CORAL-TAIYI
-C00000-CFFFFF     (base 16)		CORAL-TAIYI
-				8F-3, No. 200, Gangqian Rd, Neihu District
-				Taipei City    114
-				TW
-
-6C-15-24   (hex)		DEFA AS
-000000-0FFFFF     (base 16)		DEFA AS
-				Blingsmovegen 30
-				Nesbyen    3540
-				NO
-
-C4-A1-0E   (hex)		O-NET Industrial Technologies (Shenzhen) Limited
-500000-5FFFFF     (base 16)		O-NET Industrial Technologies (Shenzhen) Limited
-				501, Maile building, building 2, No. 28, Cuijing Road, Zhukeng community, Longtian street, Pingshan District
-				Shenzhen  Guangdong  518118
-				CN
-
-70-50-E7   (hex)		Nippon Pulse America, Inc.
-600000-6FFFFF     (base 16)		Nippon Pulse America, Inc.
-				4 Corporate Drive
-				Radford  VA  24141-5100
-				US
-
-C4-A1-0E   (hex)		Focus-on
-C00000-CFFFFF     (base 16)		Focus-on
-				Kerkeplaat 12
-				Dordrecht    3313LC
-				NL
-
-70-50-E7   (hex)		Eta Compute Inc.
-D00000-DFFFFF     (base 16)		Eta Compute Inc.
-				182 S. Murphy Ave
-				Sunnyvale  CA  94086
-				US
-
-80-02-F4   (hex)		Wuhan Glory Road Intelligent Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Wuhan Glory Road Intelligent Technology Co., Ltd.
-				18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone
-				Wuhan  Hubei  430073
-				CN
-
-80-02-F4   (hex)		Sichuan lookout environment protection technology co.,Ltd
-100000-1FFFFF     (base 16)		Sichuan lookout environment protection technology co.,Ltd
-				No. 1015, floor 10, unit 2, building 1, No. 1616, Nanhua Road, high tech Zone
-				Chengdu  Sichuan  610052
-				CN
-
-8C-51-09   (hex)		PROCET Technology Co., Ltd(HK)
-200000-2FFFFF     (base 16)		PROCET Technology Co., Ltd(HK)
-				Flat B,4/F, Kjngswell Commercial Tower, 171-173 Lockhard Road, Wanchai, Hongkong
-				Hong kong    999077
-				HK
-
-80-02-F4   (hex)		Alfred Systems Inc
-E00000-EFFFFF     (base 16)		Alfred Systems Inc
-				13F, No. 2, Sec. 5, Xinyi Rd.
-				Taipei city    110
-				TW
-
-8C-51-09   (hex)		SpotterRF LLC
-C00000-CFFFFF     (base 16)		SpotterRF LLC
-				720 Timpanogos Parkway
-				Orem  UT  84097
-				US
-
-0C-7F-ED   (hex)		Tango Networks Inc
-200000-2FFFFF     (base 16)		Tango Networks Inc
-				2801 Network Blvd, Suite 200
-				Frisco  TX  TX 75034
-				US
-
-0C-7F-ED   (hex)		Purple Mountain ,Inc
-400000-4FFFFF     (base 16)		Purple Mountain ,Inc
-				New District
-				SuZhou  JiangSu  215000
-				CN
-
-FC-61-79   (hex)		CHOEUNENG
-400000-4FFFFF     (base 16)		CHOEUNENG
-				22, Ildong-ro, Sangnok-gu
-				Ansan-si  Gyeonggi-do  15326
-				KR
-
-FC-61-79   (hex)		EchoStar Mobile
-300000-3FFFFF     (base 16)		EchoStar Mobile
-				25/28 NORTH WALL QUAY, DUBLIN 1, D01H104        Ireland
-				Dublin  Ireland  D01H104
-				IE
-
-0C-7F-ED   (hex)		environmental systems corporation
-E00000-EFFFFF     (base 16)		environmental systems corporation
-				122F Commerce Park Drive
-				Barrie    Ontario  L4N 8W8 
-				CA
-
-FC-61-79   (hex)		Hangzhou LiDe Communication Co.,Ltd
-600000-6FFFFF     (base 16)		Hangzhou LiDe Communication Co.,Ltd
-				No.188,DongJia Rd,Tonglu Econominc Development Zone,Hangzhou,Zhejiang,
-				Hangzhou    311500
-				CN
-
-20-85-93   (hex)		Great Lite International
-700000-7FFFFF     (base 16)		Great Lite International
-				11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist.,
-				New Taipei City  Taiwan  23143
-				TW
-
-4C-4B-F9   (hex)		Tecnoplus Srl
-900000-9FFFFF     (base 16)		Tecnoplus Srl
-				Via Cilavegna, 53
-				Gravellona Lomellina  Pavia  27020
-				IT
-
-98-06-37   (hex)		Summa nv
-200000-2FFFFF     (base 16)		Summa nv
-				Rochesterlaan 6
-				Gistel    8470
-				BE
-
-98-06-37   (hex)		Shanghai Jinnian information technology Co. Ltd
-E00000-EFFFFF     (base 16)		Shanghai Jinnian information technology Co. Ltd
-				Room 102-105 ,block 1 , No.33 leshan Road
-				Shanghai  Shanghai  200030
-				CN
-
-24-15-10   (hex)		Annapurna labs
-400000-4FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-44-D5-F2   (hex)		Auctus Technologies Co.,Ltd.
-900000-9FFFFF     (base 16)		Auctus Technologies Co.,Ltd.
-				17F, Building 3, China Science and Technology Development Park, No. 009, 1st South Gaoxin Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-44-D5-F2   (hex)		Shenzhen Qiutian Technology Co.,Ltd
-700000-7FFFFF     (base 16)		Shenzhen Qiutian Technology Co.,Ltd
-				5B01 5F Wangtang Building Xingao Road Xili Nanshan District
-				 Shenzhen  Guangdong  518000
-				CN
-
-44-D5-F2   (hex)		Joint-Stock Company Research and Development Center ELVEES
-E00000-EFFFFF     (base 16)		Joint-Stock Company Research and Development Center ELVEES
-				Proezd 4922, Dom 4, Stroenie 2
-				Zelenograd  Moscow  124498
-				RU
-
-44-D5-F2   (hex)		neocontrol soluções em automação
-C00000-CFFFFF     (base 16)		neocontrol soluções em automação
-				rua santa fe 100
-				belo horizonte  MG  30320-130
-				BR
-
-D0-5F-64   (hex)		Hangzhou ToupTek Photonics Co., Ltd.
-100000-1FFFFF     (base 16)		Hangzhou ToupTek Photonics Co., Ltd.
-				4F, Block A, B, Building 2, NO.321, Jinpeng Street, Xihu District
-				Hangzhou  Zhejiang  310030
-				CN
-
-FC-A4-7A   (hex)		Shenzhen VMAX New Energy Co., Ltd.
-100000-1FFFFF     (base 16)		Shenzhen VMAX New Energy Co., Ltd.
-				5F, Fengyun Building, No.5 Road, Hi-Tech Industrial Park (North), Nanshan District, 
-				Shenzhen  Guangdong  518057
-				CN
-
-D0-5F-64   (hex)		Beijing Core Shield Group Co., Ltd.
-700000-7FFFFF     (base 16)		Beijing Core Shield Group Co., Ltd.
-				2/F, Tower C, Building 4,  Zhongguancun Software Park, No.8 Dongbeiwang West Road, Haidian District, Beijing, China
-				Beijing    100085
-				CN
-
-2C-16-BD   (hex)		Shenzhen elink smart Co., ltd
-800000-8FFFFF     (base 16)		Shenzhen elink smart Co., ltd
-				Floor 2,Building A , Hongtian Xinfengze Industrial   Park Huang Pu Community , Xin Qiao District ,Baoan Area
-				shenzhen  Guangdong Province  518101
-				CN
-
-2C-16-BD   (hex)		Shenzhen Haiying Wire Tech Co., Ltd.
-A00000-AFFFFF     (base 16)		Shenzhen Haiying Wire Tech Co., Ltd.
-				5/F, No. 6 Bldg, Longcheng Industrial Park, Longhua District
-				Shenzhen  Guangdong  518110
-				CN
-
-FC-A4-7A   (hex)		Cliptech Industria e Comercio Ltda
-300000-3FFFFF     (base 16)		Cliptech Industria e Comercio Ltda
-				ROD VICE PREF HERMENEGILDO TONOLI, 2285
-				ITUPEVA  SAO PAULO  13295000
-				BR
-
-B4-A2-EB   (hex)		Softel SA de CV
-400000-4FFFFF     (base 16)		Softel SA de CV
-				Camino a Santa Teresa 
-				Tlalpan    14010
-				MX
-
-B4-A2-EB   (hex)		Katerra Inc
-200000-2FFFFF     (base 16)		Katerra Inc
-				2494 Sand Hill Rd, Bldg 7, Suite 100
-				Menlo Park  CA  94025-6981
-				US
-
-80-E4-DA   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-8C-59-3C   (hex)		Qbic Technology Co., Ltd
-600000-6FFFFF     (base 16)		Qbic Technology Co., Ltd
-				26F.-12, No.99, Sec. 1, Xintai 5th Rd., Xizhi Dist.,
-				New Taipei     22175
-				TW
-
-8C-59-3C   (hex)		IDRO-ELETTRICA S.P.A.
-D00000-DFFFFF     (base 16)		IDRO-ELETTRICA S.P.A.
-				VIA BELLINI 2
-				SAN CESARIO SUL PANARO  ITALY/MODENA  41018
-				IT
-
-8C-59-3C   (hex)		Chongqing beimoting technology co.ltd
-300000-3FFFFF     (base 16)		Chongqing beimoting technology co.ltd
-				97-2 keyuan 2nd street, jiulongpo district,
-				Chongqing  Chongqing  400039
-				CN
-
-8C-59-3C   (hex)		Fujian Chaozhi Group Co., Ltd.
-000000-0FFFFF     (base 16)		Fujian Chaozhi Group Co., Ltd.
-				Chaozhi Group, 13th Floor, Zhongqing Building, Haixi Science and Technology Park, Shangjie Town, Minhou County
-				Fuzhou  Fujian  350000
-				CN
-
-D0-C8-57   (hex)		CHUNGHSIN INTERNATIONAL ELECTRONICS CO.,LTD.
-B00000-BFFFFF     (base 16)		CHUNGHSIN INTERNATIONAL ELECTRONICS CO.,LTD.
-				618-2# Gongren West Road,Jiaojiang,
-				Taizhou  Zhejiang  317700
-				CN
-
-D0-C8-57   (hex)		DALI A/S
-100000-1FFFFF     (base 16)		DALI A/S
-				Dali Alle 1
-				Norager    9610
-				DK
-
-BC-97-40   (hex)		ForoTel
-B00000-BFFFFF     (base 16)		ForoTel
-				77, Shaumyana Str. 
-				Rostov-na-Donu  UFO  344079
-				RU
-
-BC-97-40   (hex)		Gaodi Rus
-800000-8FFFFF     (base 16)		Gaodi Rus
-				Korneeva, 14
-				Elektrostal  Moscow region  144009
-				RU
-
-60-95-CE   (hex)		AdvanWISE Corporation
-500000-5FFFFF     (base 16)		AdvanWISE Corporation
-				No.11, Aly. 18, Ln. 85, Fuqun St., Xiangshan Dist.
-				Hsinchu    30067
-				TW
-
-84-8B-CD   (hex)		Dunst tronic GmbH
-800000-8FFFFF     (base 16)		Dunst tronic GmbH
-				Seevetalstraße, 2
-				Seevetal  Niedersachsen  21217
-				DE
-
-84-8B-CD   (hex)		Annapurna labs
-300000-3FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-84-8B-CD   (hex)		Emotiv Inc
-E00000-EFFFFF     (base 16)		Emotiv Inc
-				490 Post Street
-				San Francisco  CA  94102
-				US
-
-84-8B-CD   (hex)		ENGISAT LDA
-D00000-DFFFFF     (base 16)		ENGISAT LDA
-				RUA CENTRAL SAO LOURENÇO Nº 312
-				VILAR DE ANDORINHO  PORTO  4430-358
-				PT
-
-84-8B-CD   (hex)		Smart Code (Shenzhen) Technology Co.,Ltd
-700000-7FFFFF     (base 16)		Smart Code (Shenzhen) Technology Co.,Ltd
-				Keji North 3rd Rd
-				Shenzhen  guangdong  518000
-				CN
-
-B0-FD-0B   (hex)		Fasii Information Technology (Shanghai) Ltd.
-400000-4FFFFF     (base 16)		Fasii Information Technology (Shanghai) Ltd.
-				Room 5011, Building 1, No.335 Guoding Road, Yangpu District
-				Shanghai  Shanghai  200433
-				CN
-
-B0-FD-0B   (hex)		TAE HYUNG Industrial Electronics Co., Ltd.
-000000-0FFFFF     (base 16)		TAE HYUNG Industrial Electronics Co., Ltd.
-				301-404, Bucheon Technopark, 345, Seokcheon-ro
-				Bucheon-si  Gyeonggi-do  14501
-				KR
-
-84-8B-CD   (hex)		Sphera Telecom
-A00000-AFFFFF     (base 16)		Sphera Telecom
-				Pos. Moscowskiy, 22-nd km of Kievskoye highway, household 4, building 2, body G, office 802G
-				Moscow    108811
-				RU
-
-C8-2C-2B   (hex)		Shiftall Inc.
-A00000-AFFFFF     (base 16)		Shiftall Inc.
-				4F TokyoDaiwa Bldg., 2-6-10 Nihonbashibakurocho, 
-				Chuo,   Tokyo  1030002
-				JP
-
-C8-2C-2B   (hex)		BIOT Sp. z o.o.
-900000-9FFFFF     (base 16)		BIOT Sp. z o.o.
-				Nowy Kisielin-Nowa 7
-				Zielona Góra  Lubuskie  66-002
-				PL
-
-E4-1E-0A   (hex)		Shanghai LeXiang Technology Co., Ltd
-E00000-EFFFFF     (base 16)		Shanghai LeXiang Technology Co., Ltd
-				Floor 6,Building 8,Yanjiaqiao Road,Pudong Area ,Shanghai ,China
-				shanghai    200125
-				CN
-
-C8-2C-2B   (hex)		Fungible, Inc.
-000000-0FFFFF     (base 16)		Fungible, Inc.
-				3201 Scott Blvd., 2nd floor
-				Santa Clara  CA  95054
-				US
-
-B0-FD-0B   (hex)		Habana Labs LTD
-D00000-DFFFFF     (base 16)		Habana Labs LTD
-				5 Tarshish St,
-				Caesarea    3079821
-				IL
-
-E4-1E-0A   (hex)		TELETASK BELGIUM
-C00000-CFFFFF     (base 16)		TELETASK BELGIUM
-				Ottergemsesteenweg-zuid 729
-				GENT  Oost-Vlaanderen  9000
-				BE
-
-C8-63-14   (hex)		GRINBI PARTNERS
-600000-6FFFFF     (base 16)		GRINBI PARTNERS
-				222, Dogok-ro, Gangnam-gu
-				Seoul    06272
-				KR
-
-E4-1E-0A   (hex)		ROMO Wind A/S
-D00000-DFFFFF     (base 16)		ROMO Wind A/S
-				Olof Palmes Allé 47
-				Aarhus N    8200
-				DK
-
-C8-63-14   (hex)		Shenzhen Wesion Technology Co., Ltd
-700000-7FFFFF     (base 16)		Shenzhen Wesion Technology Co., Ltd
-				A511, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
-				Shenzhen  Guangdong  518102
-				CN
-
-C8-63-14   (hex)		Shenzhen Zero Zero Infinity Technology Co.，Ltd.
-400000-4FFFFF     (base 16)		Shenzhen Zero Zero Infinity Technology Co.，Ltd.
-				309 Rainbow Technology Building, 36 Gaoxin North 6th Road, Xili Street
-				Shenzhen  Guangdong  518000
-				CN
-
-C8-63-14   (hex)		Telematix AG
-D00000-DFFFFF     (base 16)		Telematix AG
-				Freiburgstrasse 251
-				Bern  Bern  3018
-				CH
-
-C8-63-14   (hex)		TrackMan
-300000-3FFFFF     (base 16)		TrackMan
-				Stubbeled 2
-				Vedbaek    2950
-				DK
-
-34-E1-D1   (hex)		Annapurna labs
-E00000-EFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-FC-D2-B6   (hex)		Oviss Labs Inc.
-800000-8FFFFF     (base 16)		Oviss Labs Inc.
-				46259 Warm Springs Blvd
-				Fremont  CA  94539
-				US
-
-34-E1-D1   (hex)		Tianjin Sublue Ocean Science & Technology Co., Ltd
-000000-0FFFFF     (base 16)		Tianjin Sublue Ocean Science & Technology Co., Ltd
-				No.29 Factory No.156 Nanhai Road,TEDA
-				Tianjin    300050
-				CN
-
-34-E1-D1   (hex)		Doki Technologies Limited
-500000-5FFFFF     (base 16)		Doki Technologies Limited
-				Unit 601,Tower One, Silvercord, 30 Canton Road, Tsim Sha Tsui
-				Kowloon    00000
-				HK
-
-34-E1-D1   (hex)		Teton Camera LLC
-200000-2FFFFF     (base 16)		Teton Camera LLC
-				PO BOX 648
-				PINEDALE  WY  82941-0648
-				US
-
-74-5B-C5   (hex)		EDOMO Systems GmbH
-800000-8FFFFF     (base 16)		EDOMO Systems GmbH
-				Obertorplatz 2
-				Landau  Deutschland (DEU)  76829
-				DE
-
-90-C6-82   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-FC-D2-B6   (hex)		Grandway Technology (Shenzhen) Limited
-500000-5FFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
-				Block 7, Zhu Keng Industrial Zone
-				Ping Shan District  Shenzhen  518118
-				CN
-
-FC-D2-B6   (hex)		CG POWER AND INDUSTRIAL SOLUTIONS LTD
-000000-0FFFFF     (base 16)		CG POWER AND INDUSTRIAL SOLUTIONS LTD
-				A-3, MIDC , AMBAD 
-				NASHIK  MAHARASHTRA  422010
-				IN
-
-FC-D2-B6   (hex)		T CHIP DIGITAL TECHNOLOGY CO.LTD
-B00000-BFFFFF     (base 16)		T CHIP DIGITAL TECHNOLOGY CO.LTD
-				Room 320, C Tower, Jingji Building, HuaFeng Headquarter, Xixiang, Baoan
-				SHENZHEN  Guangdong  518000
-				CN
-
-E4-4C-C7   (hex)		FLK information security technology Co,. Ltd
-E00000-EFFFFF     (base 16)		FLK information security technology Co,. Ltd
-				Room 1801, Yinfeng Building, No. 1505, Binsheng Road, Binjiang District
-				Hangzhou  Zhejiang  310051
-				CN
-
-E4-4C-C7   (hex)		IAG GROUP LTD
-800000-8FFFFF     (base 16)		IAG GROUP LTD
-				IAG Industrial Park, Jiuwei, Xixiang Town, Baoan, Shenzhen, China.
-				shenzhen    518000
-				CN
-
-74-5B-C5   (hex)		uGrid Network Inc.
-400000-4FFFFF     (base 16)		uGrid Network Inc.
-				602 Gabriola Way
-				Ottawa  Ontario  K2T 0M2
-				CA
-
-E4-4C-C7   (hex)		Muzik Inc
-A00000-AFFFFF     (base 16)		Muzik Inc
-				9220 Sunset Blvd #112
-				West Hollywood    CA 90069
-				US
-
-4C-BC-98   (hex)		Airtex Manufacturing Partnership
-900000-9FFFFF     (base 16)		Airtex Manufacturing Partnership
-				1441 Hastings Cres. SE
-				Calgary  Alberta  T2G 4C8
-				CA
-
-4C-BC-98   (hex)		Voegtlin Instruments GmbH
-700000-7FFFFF     (base 16)		Voegtlin Instruments GmbH
-				Langenhagstrasse 1
-				Aesch    CH-4147
-				CH
-
-4C-BC-98   (hex)		Heliotis AG
-C00000-CFFFFF     (base 16)		Heliotis AG
-				Längenbold 5
-				Root    6037
-				CH
-
-4C-BC-98   (hex)		Humanplus Intelligent Robotics Technology Co.,Ltd.
-600000-6FFFFF     (base 16)		Humanplus Intelligent Robotics Technology Co.,Ltd.
-				Room507,5th Floor, Zhongguancun Frontier Technology Innovation Building, No. 67 North Fourth Ring Road,Haidian District,
-				Beijing  Beijing  100089
-				CN
-
-2C-26-5F   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-A0-BB-3E   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-2C-6A-6F   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-4C-65-A8   (hex)		ZMIN Technologies
-B00000-BFFFFF     (base 16)		ZMIN Technologies
-				Room 403-405, Building C, Baoan New Generation Information Technology Industrial Park, No.139, Chuangye 2 Rd., Baoan District
-				ShenZhen  GuangDong  518101
-				CN
-
-E0-5A-9F   (hex)		Chengdu Song Yuan Electronic Technology Co.,Ltd
-200000-2FFFFF     (base 16)		Chengdu Song Yuan Electronic Technology Co.,Ltd
-				Building 63 Cui Feng International, No.366 Bai Cao Road, High-tech West Zone
-				Chengdu  Sichuan  610000
-				CN
-
-E0-5A-9F   (hex)		Contemporary Amperex Technology Co., Limited
-A00000-AFFFFF     (base 16)		Contemporary Amperex Technology Co., Limited
-				No.2 Xingang Road,  Zhangwan Town, Jiaocheng District
-				Ningde  Fujian  352000
-				CN
-
-E0-5A-9F   (hex)		Annapurna labs
-000000-0FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-E0-5A-9F   (hex)		Mountz, Inc.
-D00000-DFFFFF     (base 16)		Mountz, Inc.
-				1080 N. 11th Street
-				San Jose  CA  95112
-				US
-
-E0-5A-9F   (hex)		TRYEN
-500000-5FFFFF     (base 16)		TRYEN
-				Manan-gu Anyang-ro 110
-				Anyang  Kyeong-gi  14035
-				KR
-
-38-B1-9E   (hex)		Freedompro Srl
-100000-1FFFFF     (base 16)		Freedompro Srl
-				Via Frova, 34
-				Cinisello Balsamo    20092
-				IT
-
-D8-86-0B   (hex)		Krspace
-100000-1FFFFF     (base 16)		Krspace
-				Building 1, Junhao Central Park Plaza
-				ChaoYang District  Beijing  100125
-				CN
-
-38-B1-9E   (hex)		Doepke Schaltgeräte GmbH
-900000-9FFFFF     (base 16)		Doepke Schaltgeräte GmbH
-				Stellmacherstr. 11
-				Norden  Niedersachsen  26506
-				DE
-
-28-36-38   (hex)		Swisson AG
-C00000-CFFFFF     (base 16)		Swisson AG
-				Fabrikstrasse 21
-				Lyss    3250
-				CH
-
-CC-D3-9D   (hex)		Evoko Unlimited AB
-100000-1FFFFF     (base 16)		Evoko Unlimited AB
-				Hästholmsvägen 32
-				Nacka    13130
-				SE
-
-D4-25-CC   (hex)		bvk technology
-500000-5FFFFF     (base 16)		bvk technology
-				Mithatpasa Mah. Serin Cikmazi No:4 C Blok Kemerburgaz, Eyupsultan
-				Istanbul  Istanbul  34075
-				TR
-
-D4-25-CC   (hex)		POSNET Polska S.A.
-C00000-CFFFFF     (base 16)		POSNET Polska S.A.
-				ul. Municypalna 33
-				Warszawa    02-281
-				PL
-
-D4-25-CC   (hex)		MusicLens Inc.
-200000-2FFFFF     (base 16)		MusicLens Inc.
-				311 E VALLEY BLVD#112 PMB27
-				SANGABRIEL  CA  91776
-				US
-
-CC-D3-9D   (hex)		Lubelskie Fabryki Wag FAWAG S.A.
-A00000-AFFFFF     (base 16)		Lubelskie Fabryki Wag FAWAG S.A.
-				Łęczyńska 58
-				Lublin    20-954
-				PL
-
-38-B1-9E   (hex)		Beijing Memblaze Technology Co Ltd
-700000-7FFFFF     (base 16)		Beijing Memblaze Technology Co Ltd
-				Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian
-				Beijing  Beijing  100192
-				CN
-
-9C-69-B4   (hex)		EA Technology Ltd
-100000-1FFFFF     (base 16)		EA Technology Ltd
-				Capenhurst Technology Park
-				Chester  Cheshire  CH16ES
-				GB
-
-D4-25-CC   (hex)		DOLBY LABORATORIES, INC.
-800000-8FFFFF     (base 16)		DOLBY LABORATORIES, INC.
-				100 Potrero Avenue
-				San Francisco  CA  94103-4938
-				US
-
-68-91-D0   (hex)		G-TECH Instruments Inc.
-400000-4FFFFF     (base 16)		G-TECH Instruments Inc.
-				2F.-2, No.83, Sec. 2, Gongdao 5th Rd., East Dist.
-				Hsinchu    30070
-				TW
-
-9C-69-B4   (hex)		Intellect module LLC
-D00000-DFFFFF     (base 16)		Intellect module LLC
-				Krasnogo kursanta str. 25 lit. J
-				Saint-Petersburg    197110
-				RU
-
-D4-25-CC   (hex)		BlueCats US, LLC
-700000-7FFFFF     (base 16)		BlueCats US, LLC
-				6767 OLD MADISON PIKE NW, SUITE 300
-				Huntsville  AL  35806
-				US
-
-4C-91-7A   (hex)		Annapurna labs
-E00000-EFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-4C-91-7A   (hex)		Erlab DFS SAS
-A00000-AFFFFF     (base 16)		Erlab DFS SAS
-				Parc d'Affaires des Portes - BP403
-				Val de Reuil    27104
-				FR
-
-6C-DF-FB   (hex)		Sercomm Corporation.
-200000-2FFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-4C-91-7A   (hex)		AvertX
-B00000-BFFFFF     (base 16)		AvertX
-				23221 E. Knox Ave
-				Liberty Lake  WA  99019
-				US
-
-6C-DF-FB   (hex)		Shenzhen HDCVT Technology
-000000-0FFFFF     (base 16)		Shenzhen HDCVT Technology
-				Floor 7, Building 5, Lihe Industrial Park, Songbai Road, Xili Street, Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-7C-BC-84   (hex)		Guangzhou Puppyrobot Technology Co.Ltd Beijing Branch
-B00000-BFFFFF     (base 16)		Guangzhou Puppyrobot Technology Co.Ltd Beijing Branch
-				R&F center,63 East middle 3rd ring road
-				beijing    10000
-				CN
-
-7C-BC-84   (hex)		HITIQ LIMITED
-900000-9FFFFF     (base 16)		HITIQ LIMITED
-				628 Newcastle St
-				Leederville  WA  6007
-				AU
-
-7C-BC-84   (hex)		Tibit Communications
-C00000-CFFFFF     (base 16)		Tibit Communications
-				1 Willowbrook Court, Suite 150
-				Petaluma  CA  94954
-				US
-
-7C-BC-84   (hex)		CONTINENTAL
-400000-4FFFFF     (base 16)		CONTINENTAL
-				1 AVENUE PAUL OURLIAC
-				TOULOUSE    31100
-				FR
-
-7C-BC-84   (hex)		3S Technology Co., Ltd.
-200000-2FFFFF     (base 16)		3S Technology Co., Ltd.
-				301-1103, 345, Seokcheon-ro
-				Bucheon-si  Gyeonggi-do  14501
-				KR
-
-7C-BC-84   (hex)		AG Neovo
-000000-0FFFFF     (base 16)		AG Neovo
-				5F-1, No. 3-1, Park Street, Nangang District, Taipei, 11503, Taiwan
-				Taipei    11503
-				TW
-
-98-F9-C7   (hex)		Beijing Horizon Information Technology Co., Ltd
-300000-3FFFFF     (base 16)		Beijing Horizon Information Technology Co., Ltd
-				3F,Unit H, West Gate, Hailong Mansion, No.1 Zhongguancun Street, Haidian District
-				Beijing    100080
-				CN
-
-9C-43-1E   (hex)		HAESUNG DS
-200000-2FFFFF     (base 16)		HAESUNG DS
-				8F, Haesung 2 Building, 508, Teheran-ro, Gangnam-gu
-				Seoul    06178
-				KR
-
-0C-FE-5D   (hex)		Maksat Technologies P Ltd
-D00000-DFFFFF     (base 16)		Maksat Technologies P Ltd
-				D-10/6, Okhla, Phase-I, Okhla
-				New Delhi  Delhi  110020
-				IN
-
-98-F9-C7   (hex)		ShenZhen Chuangwei Electronic Appliance Co.,Ltd
-C00000-CFFFFF     (base 16)		ShenZhen Chuangwei Electronic Appliance Co.,Ltd
-				4F & 6F, Overseas plant south, Skyworth Industrial Park, Shiyan Street, Bao'an  District,
-				Shenzhen  Guangdong  518101
-				CN
-
-98-F9-C7   (hex)		HIROIA Communications Pte. Ltd. Taiwan Branch
-B00000-BFFFFF     (base 16)		HIROIA Communications Pte. Ltd. Taiwan Branch
-				7F., No.189, Xinhu 3rd Rd., Neihu Dist.,
-				Taipei City    11494
-				TW
-
-0C-FE-5D   (hex)		Celerway Communication AS
-900000-9FFFFF     (base 16)		Celerway Communication AS
-				Martin Lingesvei 25
-				Fornebu    1364
-				NO
-
-0C-FE-5D   (hex)		Fender Musical Instrument
-100000-1FFFFF     (base 16)		Fender Musical Instrument
-				17600 N Perimeter DR #100
-				Scottsdale  AZ  85255
-				US
-
-0C-FE-5D   (hex)		YINUO-LINK LIMITED
-B00000-BFFFFF     (base 16)		YINUO-LINK LIMITED
-				5 Floor, Chuangyecheng,Xinghua Road,Xingwei,Fuyong
-				Shenzhen  Guangdong  518103
-				CN
-
-80-0A-80   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-C0-D3-91   (hex)		Private
-B00000-BFFFFF     (base 16)		Private
-
-1C-FD-08   (hex)		MESHBOX FOUNDATION PTE. LTD.
-E00000-EFFFFF     (base 16)		MESHBOX FOUNDATION PTE. LTD.
-				152 Beach Road #14-02 GATEWAY EAST TOWER
-				SINGAPORE    189721
-				SG
-
-1C-FD-08   (hex)		Tianjin Keyvia Electric Co.,Ltd
-D00000-DFFFFF     (base 16)		Tianjin Keyvia Electric Co.,Ltd
-				No.15 HaitaiFazhanErlu Road, Binhai Hi-tech Industrial Huayuan Development Area(Outer Ring)
-				Tianjin  Tianjin  300392
-				CN
-
-1C-FD-08   (hex)		Shanghai YottaTech Co Ltd (上海尧它科技有限公司）
-C00000-CFFFFF     (base 16)		Shanghai YottaTech Co Ltd (上海尧它科技有限公司）
-				399 keyuan Rd, Pudong New District
-				Shanghai    201203
-				CN
-
-1C-FD-08   (hex)		Banmak Technogies Co.,Ltd
-A00000-AFFFFF     (base 16)		Banmak Technogies Co.,Ltd
-				302, Building R3-B, High-Tech Park
-				Shenzhen  Guangdong  518057
-				CN
-
-1C-FD-08   (hex)		Shenzhen SEWO Technology Co.,Ltd.
-100000-1FFFFF     (base 16)		Shenzhen SEWO Technology Co.,Ltd.
-				Busha Road No 231. Buji Street. Longgang District.
-				Shenzhen  Guangdong  518112
-				CN
-
-6C-5C-3D   (hex)		Vertiv Industrial Systems
-200000-2FFFFF     (base 16)		Vertiv Industrial Systems
-				30 avenue Montgolfier
-				Chassieu    69684
-				FR
-
-6C-5C-3D   (hex)		KWONG MING ELECTRICAL MANUFACTORY LIMITED
-300000-3FFFFF     (base 16)		KWONG MING ELECTRICAL MANUFACTORY LIMITED
-				A3 bldg, Kwong Ming, Technology Industrial Zone, Shiwan Town, Boluo County 
-				Huizhou  Guangdong  516100
-				CN
-
-B8-D8-12   (hex)		Private
-F00000-FFFFFF     (base 16)		Private
-
-A8-3F-A1   (hex)		Imecon Engineering SrL
-000000-0FFFFF     (base 16)		Imecon Engineering SrL
-				via Gerola 13/15
-				Fiesco  CR  26010
-				IT
-
-A8-3F-A1   (hex)		Shenzhen ITLONG Intelligent Technology Co.,Ltd
-900000-9FFFFF     (base 16)		Shenzhen ITLONG Intelligent Technology Co.,Ltd
-				12th floor, Building C1, Nanshan Zhiyuan, 1001 Xueyuan Avenue , Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-3C-6A-2C   (hex)		WICKS Co., Ltd.
-900000-9FFFFF     (base 16)		WICKS Co., Ltd.
-				202,1-29 shingi takasu
-				kochi City  Kochi  781-8103
-				JP
-
-A8-3F-A1   (hex)		Sercomm Corporation.
-500000-5FFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-30-0A-60   (hex)		AVIC JONHON OPTRONIC TECHNOLOGY CO., LTD.
-400000-4FFFFF     (base 16)		AVIC JONHON OPTRONIC TECHNOLOGY CO., LTD.
-				Zhoushan Road10,Jianxi District,Luoyang City
-				Luoyang City  Henan Province  471003
-				CN
-
-30-0A-60   (hex)		Bronkhorst High-Tech BV
-800000-8FFFFF     (base 16)		Bronkhorst High-Tech BV
-				Nijverheidsstraat 1a
-				Ruurlo  Gelderland  NL-7261AK
-				NL
-
-A4-ED-43   (hex)		Paragon Business Solutions Ltd.
-B00000-BFFFFF     (base 16)		Paragon Business Solutions Ltd.
-				303-5th Avenue, Suite # 1007
-				New York    10016
-				US
-
-A4-ED-43   (hex)		Shanghai Mission Information Technologies (Group) Co.,Ltd
-200000-2FFFFF     (base 16)		Shanghai Mission Information Technologies (Group) Co.,Ltd
-				Room 803, modern traffic building (East District), 218 Hengfeng Road, Jingan District
-				Shanghai    200041
-				CN
-
-A4-ED-43   (hex)		Sweam AB
-000000-0FFFFF     (base 16)		Sweam AB
-				Kistagången 12
-				Kista  Stockholm  16440
-				SE
-
-A0-28-33   (hex)		Precision Planting, LLC.
-E00000-EFFFFF     (base 16)		Precision Planting, LLC.
-				23207 Townline Rd.
-				Tremont  IL  61568
-				US
-
-84-89-EC   (hex)		SmartGiant Technology
-000000-0FFFFF     (base 16)		SmartGiant Technology
-				1 North Zhong Jia Zhuang, Shi Gang Dong, Da Long Street
-				Guangzhou  Guangdong  510000
-				CN
-
-84-89-EC   (hex)		Zephyr Engineering, Inc.
-500000-5FFFFF     (base 16)		Zephyr Engineering, Inc.
-				2412 W. Huntington Dr.
-				Tempe  AZ  85282
-				US
-
-84-89-EC   (hex)		Aerionics Inc.
-300000-3FFFFF     (base 16)		Aerionics Inc.
-				3601 N St Paul Avenue
-				Sioux Falls  SD  57104
-				US
-
-A0-28-33   (hex)		FlexLink AB
-B00000-BFFFFF     (base 16)		FlexLink AB
-				BYFOGDEGATAN 11
-				GOTEBORG    41505
-				SE
-
-68-91-D0   (hex)		Ambitio LLC
-300000-3FFFFF     (base 16)		Ambitio LLC
-				10505 NW 27th ST
-				Doral  FL  33172
-				US
-
-D4-7C-44   (hex)		Sammi Onformation Systems
-400000-4FFFFF     (base 16)		Sammi Onformation Systems
-				Gasan Digital 1-ro 212
-				Geumcheon-gu  Seoul  08502
-				KR
-
-9C-F6-DD   (hex)		Shenzhen Xtooltech Co., Ltd
-600000-6FFFFF     (base 16)		Shenzhen Xtooltech Co., Ltd
-				10574 Acacia St, Suite D4
-				Rancho Cucamonga  CA  91730
-				US
-
-78-C2-C0   (hex)		Ory Laboratory Co., Ltd.
-400000-4FFFFF     (base 16)		Ory Laboratory Co., Ltd.
-				502 Bravi Mitaka, 1-3-11 Nishikubo
-				Musashino-shi  Tokyo  180-0013
-				JP
-
-30-09-F9   (hex)		Beijing Netswift Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Beijing Netswift Technology Co.,Ltd.
-				No. 7, 7th floor, No.49 Zhichun Road, Haidian District
-				Beijing  Beijing  100190 
-				CN
-
-30-09-F9   (hex)		Bonraybio
-900000-9FFFFF     (base 16)		Bonraybio
-				4F., No.118, Gongye 9th Rd., Dali Dist.,
-				Taichung City  Taiwan  412
-				TW
-
-30-09-F9   (hex)		Hurray Cloud Technology Co., Ltd.
-000000-0FFFFF     (base 16)		Hurray Cloud Technology Co., Ltd.
-				7F., No.407, Sec. 2, Zhongshan Rd., Zhonghe Dist.,
-				New Taipei City     235
-				TW
-
-84-89-EC   (hex)		Shenzhen Xtooltech Co., Ltd
-900000-9FFFFF     (base 16)		Shenzhen Xtooltech Co., Ltd
-				10574 Acacia St, Suite D4
-				Rancho Cucamonga  CA  91730
-				US
-
-C0-83-59   (hex)		ANTS
-400000-4FFFFF     (base 16)		ANTS
-				88, Simindae-ro, Dongan-Gu
-				Anyang    14079
-				KR
-
-C0-83-59   (hex)		Gemvax Technology ,. Co.Ltd
-100000-1FFFFF     (base 16)		Gemvax Technology ,. Co.Ltd
-				30, Techno1-ro, Yuseong-gu, Daejeon
-				Daejeon    34016
-				KR
-
-9C-F6-DD   (hex)		Foshan Synwit Technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Foshan Synwit Technology Co.,Ltd.
-				Room 501, Building 10, Leaguar Science Park, Shishan town, Nanhai
-				FoShan  Guangdong  528225
-				CN
-
-04-C3-E6   (hex)		DREAMKAS LLC
-000000-0FFFFF     (base 16)		DREAMKAS LLC
-				Bolshoy  Sampsoniyevskiy pr., 62A, office 2H
-				Saint-Petersburg    194044
-				RU
-
-04-C3-E6   (hex)		SHANTOU YINGSHENG IMPORT & EXPORT TRADING CO.,LTD.
-C00000-CFFFFF     (base 16)		SHANTOU YINGSHENG IMPORT & EXPORT TRADING CO.,LTD.
-				Chenghua Industrial Zone，Wenguan Road，Chenghai District
-				Shantou City  Guangdong  515800
-				CN
-
-3C-42-7E   (hex)		Edit Srl
-600000-6FFFFF     (base 16)		Edit Srl
-				Via Grotte di Nottola 10
-				Cisterna di Latina  Latina  04012
-				IT
-
-3C-42-7E   (hex)		UBTECH ROBOTICS CORP
-800000-8FFFFF     (base 16)		UBTECH ROBOTICS CORP
-				22 Floor, Block C1, Nanshan I Park, No. 1001 Xueyuan Road, Nanshan District,
-				Shenzhen  guangdong  518071
-				CN
-
-A0-C5-F2   (hex)		Quantlab Financial, LLC
-000000-0FFFFF     (base 16)		Quantlab Financial, LLC
-				3 Greenway Plaza, Suite 200
-				3 Greenway Plaza  TX  77046
-				US
-
-B4-4B-D6   (hex)		ShenZhen Comstar Technology Company
-500000-5FFFFF     (base 16)		ShenZhen Comstar Technology Company
-				Pengnian Science Park Building A 314
-				Shenzhen  Guangdong  518040
-				CN
-
-B4-4B-D6   (hex)		ELLETA SOLUTIONS LTD
-D00000-DFFFFF     (base 16)		ELLETA SOLUTIONS LTD
-				Yetsi'at Eropa Street 20
-				Hadera    3848427
-				IL
-
-3C-42-7E   (hex)		Compal Electronics INC.
-B00000-BFFFFF     (base 16)		Compal Electronics INC.
-				No.8 , Nandong Road , PingZhen Dist.
-				Taoyuan   Taiwan   32455
-				TW
-
-A0-19-B2   (hex)		SZBROAD   TECHNOLOGY (HK) CO.,LTMITED
-500000-5FFFFF     (base 16)		SZBROAD   TECHNOLOGY (HK) CO.,LTMITED
-				FLAT/RM 5 BLK B 14/F WAH HEN COMMERCIAL CENTRE
-				 383 HENNESSY ROAD WANCHAI  Hong Kong  00000
-				HK
-
-A0-19-B2   (hex)		El Sewedy Electrometer Egypt S.A.E.
-100000-1FFFFF     (base 16)		El Sewedy Electrometer Egypt S.A.E.
-				Plot No. 154/173 Industrial Zone 2
-				ET-6th October City    
-				EG
-
-2C-48-35   (hex)		Collatz+Trojan GmbH
-A00000-AFFFFF     (base 16)		Collatz+Trojan GmbH
-				Borsteler Chaussee85-99a
-				Hamburg  Hamburg  22453
-				DE
-
-8C-1C-DA   (hex)		Raychem RPG PVT. LTD.
-900000-9FFFFF     (base 16)		Raychem RPG PVT. LTD.
-				Safari Crossing, Near Halol GIDC, Village - Kanjari, Taluka - Halol
-				Halol  Gujarat  389350
-				IN
-
-8C-1C-DA   (hex)		ATOL LLC
-800000-8FFFFF     (base 16)		ATOL LLC
-				Bolshaya Novodmitrovskaya str., 14, build 4
-				Moscow    127015
-				RU
-
-2C-48-35   (hex)		GEARTECH LTD
-400000-4FFFFF     (base 16)		GEARTECH LTD
-				R310/312,3/F,Beike Venture Building,No.1077,Nanhai Avenue,Nanshan District
-				Shenzhen  Guangdong  518067
-				CN
-
-3C-24-F0   (hex)		Shenzhen Bestway Technology Co., Ltd
-A00000-AFFFFF     (base 16)		Shenzhen Bestway Technology Co., Ltd
-				2nd Floor, Building 9, Jingxuan Industrial Park, East Ring Road, Longhua District,
-				Shenzhen  GuangDong  518109
-				CN
-
-3C-24-F0   (hex)		GETMOBIT LLC
-E00000-EFFFFF     (base 16)		GETMOBIT LLC
-				d. 4 str. 2 pom. 137, ul. Programmistov
-				Dubna  Moscow  141983
-				RU
-
-8C-1C-DA   (hex)		Structura Technology & Innovation
-300000-3FFFFF     (base 16)		Structura Technology & Innovation
-				via Roveredo 20/B
-				Pordenone  PN  33170
-				IT
-
-8C-1C-DA   (hex)		GESAS GmbH
-100000-1FFFFF     (base 16)		GESAS GmbH
-				Pfaelzer Ring 18
-				Hockenheim  Baden-Wuerttemberg  68766
-				DE
-
-3C-24-F0   (hex)		Authentico Technologies
-C00000-CFFFFF     (base 16)		Authentico Technologies
-				Erikdahlbergsgatan 4
-				Göteborg    41126
-				SE
-
-8C-1C-DA   (hex)		T+A elektroakustik GmbH & Co.KG
-B00000-BFFFFF     (base 16)		T+A elektroakustik GmbH & Co.KG
-				Planckstr. 9-11
-				Herford    32052
-				DE
-
-48-0B-B2   (hex)		BAJA ELECTRONICS TECHNOLOGY LIMITED
-100000-1FFFFF     (base 16)		BAJA ELECTRONICS TECHNOLOGY LIMITED
-				403, Unit 3, Building 3, Zhongdian Hi-Tech Park, No.1 Kejiqi Rd.
-				Zhuhai  Guangdong  519080
-				CN
-
-48-0B-B2   (hex)		M2Lab Ltd.
-D00000-DFFFFF     (base 16)		M2Lab Ltd.
-				148 Des Voeux Rd Central
-				Hong Kong    HK
-				HK
-
-48-0B-B2   (hex)		Ridango AS
-000000-0FFFFF     (base 16)		Ridango AS
-				Pärnu maantee 139E/13
-				Tallinn  Harjumaa  11317
-				EE
-
-48-0B-B2   (hex)		Beijing MFOX technology Co., Ltd.
-E00000-EFFFFF     (base 16)		Beijing MFOX technology Co., Ltd.
-				B zone,floor 2,NO.A5 east Rongchang street .BDA (yizhuang) BeiJing
-				BeiJing  BeiJing  100176
-				CN
-
-0C-73-EB   (hex)		Husty M.Styczen J.Hupert Sp.J.
-500000-5FFFFF     (base 16)		Husty M.Styczen J.Hupert Sp.J.
-				Rzepakowa 5e
-				Krakow  malopolska  31-989
-				PL
-
-0C-73-EB   (hex)		Gemini Data Loggers (UK) Limited
-000000-0FFFFF     (base 16)		Gemini Data Loggers (UK) Limited
-				Scientific House, Terminus Road
-				Chichester  West Sussex  PO19 8UJ
-				GB
-
-88-5F-E8   (hex)		Lisle Design Ltd
-A00000-AFFFFF     (base 16)		Lisle Design Ltd
-				New Technology Centre, North Haugh
-				St. Andrews  Fife  KY16 9SR
-				GB
-
-30-1F-9A   (hex)		YiSheng technology  co.,LTD
-600000-6FFFFF     (base 16)		YiSheng technology  co.,LTD
-				Xintian road no:71,  F#202
-				shenzhen  baoan  518103
-				CN
-
-88-5F-E8   (hex)		Shenzhen Xin Kingbrand Enterprises Co.,Ltd     
-600000-6FFFFF     (base 16)		Shenzhen Xin Kingbrand Enterprises Co.,Ltd     
-				KingBrand Industrial Zone, Nanpu Road,Shang Liao Lin Pikeng,Shajing Town,Baoan District
-				Shenzhen     518000
-				CN
-
-2C-D1-41   (hex)		Beijing Hexing Chuangxiang Technology Co., Ltd.
-900000-9FFFFF     (base 16)		Beijing Hexing Chuangxiang Technology Co., Ltd.
-				1306,A block,No.6 Zhichun Road
-				Haidian District,  Beijing  100088
-				CN
-
-30-1F-9A   (hex)		OLIMEX Ltd
-D00000-DFFFFF     (base 16)		OLIMEX Ltd
-				2 Pravda
-				Plovidv    4000
-				BG
-
-88-5F-E8   (hex)		Jungheinrich Norderstedt AG & Co. KG
-000000-0FFFFF     (base 16)		Jungheinrich Norderstedt AG & Co. KG
-				Lawaetzstr. 9-13
-				Norderstedt    22844
-				DE
-
-88-5F-E8   (hex)		Opto Engineering
-200000-2FFFFF     (base 16)		Opto Engineering
-				Circonvallazione Sud, 15
-				Mantova    46100
-				IT
-
-30-1F-9A   (hex)		Private
-900000-9FFFFF     (base 16)		Private
-
-F0-41-C8   (hex)		Shenzhen  Nufilo Electronic Technology Co., Ltd.
-900000-9FFFFF     (base 16)		Shenzhen  Nufilo Electronic Technology Co., Ltd.
-				Tianliao Building West Unit F1315, (New Materials Industrial Park),  Xueyuan Road,  Nanshan District
-				Shenzhen   Guangdong  518055
-				CN
-
-F0-41-C8   (hex)		Nanchang BlackShark Co.,Ltd.
-700000-7FFFFF     (base 16)		Nanchang BlackShark Co.,Ltd.
-				Room 319, Jiaoqiao Town Office Building, Economic and Technical development zone, Nanchang City, Jiangxi Province.
-				Nanchang    330013
-				CN
-
-88-A9-A7   (hex)		Impact Distribution
-E00000-EFFFFF     (base 16)		Impact Distribution
-				Ter Heidelaan 50a
-				Aarschot    3200
-				BE
-
-88-A9-A7   (hex)		psb intralogistics GmbH
-800000-8FFFFF     (base 16)		psb intralogistics GmbH
-				Blocksbergstrasse 145
-				Pirmasens    66955
-				DE
-
-F0-41-C8   (hex)		AED Engineering GmbH
-600000-6FFFFF     (base 16)		AED Engineering GmbH
-				Taunusstr. 51
-				Munich  Bavaria  80807
-				DE
-
-88-A9-A7   (hex)		Solaredge LTD.
-100000-1FFFFF     (base 16)		Solaredge LTD.
-				Hamada 1
-				Herzelia    4673335
-				IL
-
-A4-DA-22   (hex)		General Electric Company
-000000-0FFFFF     (base 16)		General Electric Company
-				Valle del Cedro #1551
-				Ciudad Juarez  Chih  32575
-				MX
-
-88-A9-A7   (hex)		kimura giken corporation
-700000-7FFFFF     (base 16)		kimura giken corporation
-				4-9-19 kamiyoga
-				Setagaya-ku  Tokyo  158-0098
-				JP
-
-A4-DA-22   (hex)		Wyze Labs Inc
-200000-2FFFFF     (base 16)		Wyze Labs Inc
-				 22522 29TH DR SE L101
-				BOTHELL  WA  98021
-				US
-
-A4-DA-22   (hex)		Quuppa Oy
-E00000-EFFFFF     (base 16)		Quuppa Oy
-				Keilaranta 1
-				Espoo    02150
-				FI
-
-9C-43-1E   (hex)		ST Access Control System Corp.
-A00000-AFFFFF     (base 16)		ST Access Control System Corp.
-				3F., No. 111 Zhongzheng Rd., Banciao Dist., New Taipei City
-				New Taipei City    22054
-				TW
-
-DC-E5-33   (hex)		Controls Inc
-500000-5FFFFF     (base 16)		Controls Inc
-				5204 Portside Drive
-				Medina  OH  44256
-				US
-
-C4-FF-BC   (hex)		Danego BV
-000000-0FFFFF     (base 16)		Danego BV
-				Protonenlaan 24
-				Uden  NB  5405 NE
-				NL
-
-C4-FF-BC   (hex)		Critical Link
-700000-7FFFFF     (base 16)		Critical Link
-				6712 Brooklawn  Parkway
-				Syracuse  null  13211
-				US
-
-28-2C-02   (hex)		Shenzhen Neoway Technology Co.,Ltd.
-800000-8FFFFF     (base 16)		Shenzhen Neoway Technology Co.,Ltd.
-				4F-2#,Lian Jian Science & Industry Park,Huarong Road,Dalang Street,Longhua District
-				Shenzhen  Guangdong  518000
-				CN
-
-28-2C-02   (hex)		Capintec, Inc.
-E00000-EFFFFF     (base 16)		Capintec, Inc.
-				7 Vreeland Road
-				Florham Park  NJ  07932
-				US
-
-28-2C-02   (hex)		SHENZHEN DOMENOR TECHNOLOGY LLC
-D00000-DFFFFF     (base 16)		SHENZHEN DOMENOR TECHNOLOGY LLC
-				F4, BUILDING A3, SILICON VALLEY POWER TECHNOLOGY PARK, SILI ROAD, KUKENG COMMUNITY, GUANLAN TOWN,LONGHUA DISTRICT
-				SHENZHEN  GUANGDONG  518110
-				CN
-
-F8-B5-68   (hex)		Solarius
-D00000-DFFFFF     (base 16)		Solarius
-				Kaeshaldenstrasse 39
-				Zurich    8052
-				CH
-
-28-2C-02   (hex)		Astronics AES
-100000-1FFFFF     (base 16)		Astronics AES
-				12950 Willows Rd NE 
-				Kirkland  WA  98034
-				US
-
-F8-B5-68   (hex)		Package Guard, Inc
-600000-6FFFFF     (base 16)		Package Guard, Inc
-				2819 33rd ave so
-				seattle  WA  98144
-				US
-
-18-9B-A5   (hex)		Innominds Software Inc
-400000-4FFFFF     (base 16)		Innominds Software Inc
-				2055 Junction Ave Suite 122, San Jose CA 95131
-				San Jose  CA  95131
-				US
-
-40-48-FD   (hex)		Shenzhen Yifang Digital Technology Co., LTD. 
-A00000-AFFFFF     (base 16)		Shenzhen Yifang Digital Technology Co., LTD. 
-				Building NO. 23, Fifth Region, Baiwangxin  Industrial Park, Songbai Rd. Nanshan, Shenzhen 
-				Shenzhen     518108
-				CN
-
-38-73-EA   (hex)		Shanghai ZoomSmart Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Shanghai ZoomSmart Technology Co., Ltd.
-				ROOM 802, No. 189, Hengxi Road, Pujiang Town, Minhang District, Shanghai PRC
-				Shanghai    200000
-				CN
-
-EC-9F-0D   (hex)		MAX Technologies
-E00000-EFFFFF     (base 16)		MAX Technologies
-				2051 Victoria Av.
-				St-Lambert  Quebec  J4S1H1
-				CA
-
-38-73-EA   (hex)		KingWay Information Co.,Ltd.
-100000-1FFFFF     (base 16)		KingWay Information Co.,Ltd.
-				3/F Rongxin business organization #56 Jinyan Road
-				Fuzhou  Fujian  350000
-				CN
-
-EC-9F-0D   (hex)		Waverly Labs Inc.
-300000-3FFFFF     (base 16)		Waverly Labs Inc.
-				19 Morris Avenue
-				Brooklyn  NY  11205
-				US
-
-34-D0-B8   (hex)		Kongqiguanjia (Beijing)Technology co.，ltd
-E00000-EFFFFF     (base 16)		Kongqiguanjia (Beijing)Technology co.，ltd
-				Room 1201,Block A，Building of Fesco，Xidawang Road，Chaoyang district
-				Beijing  Beijing  100022
-				CN
-
-34-D0-B8   (hex)		NumberFour AG
-600000-6FFFFF     (base 16)		NumberFour AG
-				Schoenhauser Allee 8
-				Berlin    10119
-				DE
-
-EC-9F-0D   (hex)		DRB Systems
-200000-2FFFFF     (base 16)		DRB Systems
-				3245 Pickle Road
-				Akron  OH  44312
-				US
-
-EC-9F-0D   (hex)		SKS Control Oy
-D00000-DFFFFF     (base 16)		SKS Control Oy
-				Martinkyläntie 50
-				Vantaa    01720
-				FI
-
-AC-1D-DF   (hex)		PiOctave Solutions Pvt Ltd
-000000-0FFFFF     (base 16)		PiOctave Solutions Pvt Ltd
-				#1217, Ground Floor,4th Cross Road, 1st Block, HAL 3rd Stage
-				BENGALURU  KARNATAKA  560 075
-				IN
-
-AC-1D-DF   (hex)		Duravit AG
-E00000-EFFFFF     (base 16)		Duravit AG
-				Werderstr. 36
-				Hornberg  Baden Wuerttemberg  78132
-				DE
-
-34-D0-B8   (hex)		Shenzhen Rikomagic Tech Corp.,Ltd
-700000-7FFFFF     (base 16)		Shenzhen Rikomagic Tech Corp.,Ltd
-				7021,7F Beifang Junyi Business Center, Lixin South RD,Fuyong Street,Bao'an 
-				Shenzhen   Guangdong  518103
-				CN
-
-AC-1D-DF   (hex)		Beijing Chunhong Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Beijing Chunhong Technology Co., Ltd.
-				Room1502 Hailong Plaza, Zhongguancun, Haidian, Beijing
-				Beijing    100000
-				CN
-
-34-D0-B8   (hex)		Shenzhen Bao Lai Wei Intelligent Technology Co., L
-100000-1FFFFF     (base 16)		Shenzhen Bao Lai Wei Intelligent Technology Co., L
-				Longgang Street Baolong Wu Road on the 2nd
-				Shenzhen  Guangdong Province  518116
-				CN
-
-74-1A-E0   (hex)		SHEN ZHEN YINGJIACHUANG ELECTRONICS TECHNOLOGY CO.,LTD.
-B00000-BFFFFF     (base 16)		SHEN ZHEN YINGJIACHUANG ELECTRONICS TECHNOLOGY CO.,LTD.
-				Building A,Baishunjia Industrial Park,Guangming New District
-				Shenzhen    518107
-				CN
-
-74-1A-E0   (hex)		Philips Personal Health Solutions
-300000-3FFFFF     (base 16)		Philips Personal Health Solutions
-				High Tech Campus, HTC37 floor 0
-				Eindhoven    5656 AE
-				NL
-
-AC-1D-DF   (hex)		Shenzheng SenseTime Technology Co. Ltd
-600000-6FFFFF     (base 16)		Shenzheng SenseTime Technology Co. Ltd
-				7F,Haixiang plaza, No.1052 Nanhai Road, Nanshan district
-				Shenzhen  Guangdong  518000
-				CN
-
-CC-22-37   (hex)		Beijing Safesoft Greatmaker Co.,ltd
-500000-5FFFFF     (base 16)		Beijing Safesoft Greatmaker Co.,ltd
-				Room 501 ,Unit. D, Jinyujiahua Building ,No. 9 ,Shangdi Three Street , Haidian District 
-				Beijing    100144
-				CN
-
-CC-22-37   (hex)		Siemens AG Austria
-600000-6FFFFF     (base 16)		Siemens AG Austria
-				Siemensstrasse 90
-				Wien    A-1210
-				AT
-
-CC-22-37   (hex)		Shanghai Doit IOT Technology Co.,Ltd.
-700000-7FFFFF     (base 16)		Shanghai Doit IOT Technology Co.,Ltd.
-				410-412 rooms of 1B business building in NO.1588 ,lianhang road, minhang district
-				Shanghai    201100
-				CN
-
-CC-22-37   (hex)		MEDCOM sp. z o.o.
-000000-0FFFFF     (base 16)		MEDCOM sp. z o.o.
-				ul. Jutrzenki 78a
-				Warszawa  woj. mazowieckie  02-230
-				PL
-
-90-4E-91   (hex)		Shenzhen Cloudynamo Internet Technologies Co.,LTD.
-E00000-EFFFFF     (base 16)		Shenzhen Cloudynamo Internet Technologies Co.,LTD.
-				NO.502 lingyun Building honglang north second road
-				shenzhen    518000
-				CN
-
-90-4E-91   (hex)		CommandScape, Inc.
-800000-8FFFFF     (base 16)		CommandScape, Inc.
-				505 South Flagler Dr, Suite 900
-				West Palm Beach  FL  33401
-				US
-
-90-4E-91   (hex)		Kaertech Limited
-A00000-AFFFFF     (base 16)		Kaertech Limited
-				Unit 1601, 21-24 Connaught Road West
-				Hong Kong  Sheung Wan  00000
-				HK
-
-18-9B-A5   (hex)		Mantra Softech India Pvt Ltd
-600000-6FFFFF     (base 16)		Mantra Softech India Pvt Ltd
-				B203, Shapath Hexa, S.G. Highway, Sola,
-				Ahmedabad  Gujarat  380060
-				IN
-
-18-9B-A5   (hex)		Eutron SPA
-B00000-BFFFFF     (base 16)		Eutron SPA
-				Via Crespi 29/31
-				Pradalunga  Bergamo  24020
-				IT
-
-2C-27-9E   (hex)		WAYCOM Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		WAYCOM Technology Co.,Ltd
-				E-605,BLDG 201,A10 Jiuxianqiao North Road Chaoyang District,Beijing 100015,China
-				Beijing    100000
-				CN
-
-34-29-8F   (hex)		ARC Technology Co., Ltd
-E00000-EFFFFF     (base 16)		ARC Technology Co., Ltd
-				4F.-2, No.26, Wuquan 2nd Road, 
-				Xinzhuang District,  New Taipei City  24892
-				TW
-
-34-00-8A   (hex)		Federal Aviation Administration 
-500000-5FFFFF     (base 16)		Federal Aviation Administration 
-				Atlantic City Int'l Airport, Bldg. 270
-				Atlantic City  NJ  08405
-				US
-
-34-29-8F   (hex)		BlackEdge Capital
-000000-0FFFFF     (base 16)		BlackEdge Capital
-				801 West Adams Street, Suite 500
-				Chicago    60607
-				US
-
-34-00-8A   (hex)		Sithon Technologies SAS
-600000-6FFFFF     (base 16)		Sithon Technologies SAS
-				115 Rue Claude Chappe
-				Plouzane    29280
-				FR
-
-34-29-8F   (hex)		Dongguan Kingtron Electronics Tech Co., Ltd
-700000-7FFFFF     (base 16)		Dongguan Kingtron Electronics Tech Co., Ltd
-				No.3 Fumin North Rd,Shu'an Industrial Park, Humen Town
-				Dongguan  Guangdong China  523929
-				CN
-
-18-9B-A5   (hex)		Airprotec
-200000-2FFFFF     (base 16)		Airprotec
-				Avenue de l'Industrie 22
-				Braine-l'Alleud    1420
-				BE
-
-34-00-8A   (hex)		Globex 99 LTD
-300000-3FFFFF     (base 16)		Globex 99 LTD
-				Trakia bl. 240
-				Plovdiv    4000
-				BG
-
-0C-EF-AF   (hex)		Hubei Century Network Technology Co., Ltd
-B00000-BFFFFF     (base 16)		Hubei Century Network Technology Co., Ltd
-				9-11th floor, B7, FinancialHarbour, NO.77, Guanggu Avenue, East Lake New Technology Development Zone
-				Wuhan  Hubei  430074
-				CN
-
-34-00-8A   (hex)		ZQAM Communications
-100000-1FFFFF     (base 16)		ZQAM Communications
-				3F., No.6, Innovation Road II, Science Park, 
-				Hsinchu    30076
-				TW
-
-28-F5-37   (hex)		Matricx Singapore Pte Ltd
-C00000-CFFFFF     (base 16)		Matricx Singapore Pte Ltd
-				2nd Flr. 2 Bldg., Detai Technology Industrial Park, Huarong Road No. 460, Dalang, Longhua district,
-				Shenzhen  Guangdong  518000
-				CN
-
-28-F5-37   (hex)		Unicair Communication Tec Co., Ltd.
-200000-2FFFFF     (base 16)		Unicair Communication Tec Co., Ltd.
-				深圳市宝安区西乡航空路与顺昌路交汇处梧桐岛1号楼8楼
-				ShenZhen    418100
-				CN
-
-78-D8-00   (hex)		Kverneland Group Mechatronics
-000000-0FFFFF     (base 16)		Kverneland Group Mechatronics
-				Hoofdweg 1278
-				Nieuw-Vennep  Noord Holland  NL-2153 LR
-				NL
-
-78-D8-00   (hex)		Alango Technologies Ltd
-600000-6FFFFF     (base 16)		Alango Technologies Ltd
-				Etgar 2, Carmel Biulding 1rd floor
-				Tirat Carmel  Haifa  39100
-				IL
-
-28-F5-37   (hex)		Phyn LLC
-400000-4FFFFF     (base 16)		Phyn LLC
-				1855 Del Amo Blvd
-				Torrance  CA  90501
-				US
-
-78-D8-00   (hex)		Shanghai Espacetime Technology Co.,Ltd.
-200000-2FFFFF     (base 16)		Shanghai Espacetime Technology Co.,Ltd.
-				Room 1202-A ,NO.570 , Shengxia Road , Pudong
-				Shanghai    200120
-				CN
-
-7C-BA-CC   (hex)		Maco Lighting Pty. Ltd.
-200000-2FFFFF     (base 16)		Maco Lighting Pty. Ltd.
-				5/9 Stockwell Place
-				Archerfield  Queensland  4108
-				AU
-
-7C-BA-CC   (hex)		Collinear Networks Inc.
-800000-8FFFFF     (base 16)		Collinear Networks Inc.
-				2901 Tasman Drive
-				Santa Clara  CA  95054
-				US
-
-78-D8-00   (hex)		NimbeLink Corp
-700000-7FFFFF     (base 16)		NimbeLink Corp
-				3131 Fernbrook LN N, Ste 100
-				Plymouth  MN  55447
-				US
-
-F8-8A-3C   (hex)		withus
-900000-9FFFFF     (base 16)		withus
-				Rua Dr. Mario Sacramento Ed. Colombo II N22
-				Aveiro    3810-106
-				PT
-
-7C-BA-CC   (hex)		TGT Limited
-000000-0FFFFF     (base 16)		TGT Limited
-				Flat/Rm 1003 10/F, Witty Commercial Building, 1A-1L Tung Choi Street, Hong Kong 
-				HongKong    529060
-				HK
-
-F8-8A-3C   (hex)		THK Co.,LTD.
-D00000-DFFFFF     (base 16)		THK Co.,LTD.
-				4-9-16 Higashikoujiya
-				Ota  Tokyo  1440033
-				JP
-
-F8-8A-3C   (hex)		EXCETOP TECHNOLOGY (BEIJING) CO., LTD.
-C00000-CFFFFF     (base 16)		EXCETOP TECHNOLOGY (BEIJING) CO., LTD.
-				A03, 9th Floor, Horizon International Tower, No.6, Zhichun Road, Haidian District
-				Beijing    100191
-				CN
-
-4C-65-A8   (hex)		Qingping Technology (Beijing) Co., Ltd.
-D00000-DFFFFF     (base 16)		Qingping Technology (Beijing) Co., Ltd.
-				Room 401, Block B, Fangheng Times Square, No. 10 Wangjing Street, Chaoyang District
-				Beijing    100102
-				CN
-
-A0-C5-F2   (hex)		Shenzhen Feima Robotics Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Shenzhen Feima Robotics Technology Co.,Ltd
-				1/f,16 ,Zhiheng Industrial Park, Nantou Second Road, Nantou Street, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-F0-23-B9   (hex)		Raysgem Electronics and Technology Co.Ltd
-200000-2FFFFF     (base 16)		Raysgem Electronics and Technology Co.Ltd
-				4th Floor, Block2 HuafengIndustrial park for Oversea Students Baolong 1st Road Longgang 
-				Shenzhen  Guangdong  518118
-				CN
-
-8C-14-7D   (hex)		Reynaers Aluminium
-C00000-CFFFFF     (base 16)		Reynaers Aluminium
-				Oude Liersebaan 266
-				Duffel    2570
-				BE
-
-8C-14-7D   (hex)		Remotec Technology Limited
-300000-3FFFFF     (base 16)		Remotec Technology Limited
-				FLAT/RM 2 , BLK 2 , 2/F , TONIC INDUSTRIAL CENTRE , 19 LAM HING STREET , KOWLOON BAY 
-				HONG KONG    00000
-				HK
-
-8C-14-7D   (hex)		V2 S.p.A.
-800000-8FFFFF     (base 16)		V2 S.p.A.
-				Corso Principi di Piemonte 65/67
-				Racconigi  Cuneo  12035
-				IT
-
-A0-C5-F2   (hex)		ShenZhen JuWangShi Tech
-600000-6FFFFF     (base 16)		ShenZhen JuWangShi Tech
-				Room 1701 Unit B2,Kexing Science Park,Keyuan Road
-				ShenZhen  NanShan  518057
-				CN
-
-A0-C5-F2   (hex)		Spacepath Communications Ltd
-500000-5FFFFF     (base 16)		Spacepath Communications Ltd
-				Unit 4, Bartley Point, Osborn Way
-				Hook, Hampshire    RG27 9GX
-				GB
-
-8C-14-7D   (hex)		Agilent S.p.A
-200000-2FFFFF     (base 16)		Agilent S.p.A
-				Via.flli Varian 54
-				Leini  Torino  10040
-				IT
-
-8C-14-7D   (hex)		UrbanHello
-700000-7FFFFF     (base 16)		UrbanHello
-				13 rue Saint Antoine
-				Paris    75004
-				FR
-
-F0-23-B9   (hex)		Transcend Building Automation control network corporation
-700000-7FFFFF     (base 16)		Transcend Building Automation control network corporation
-				15F. No.145 Ren’ai Rd. Xizhi Dist.
-				New Taipei City  Taiwan  22164
-				TW
-
-04-71-4B   (hex)		Armstrong Fluid Technology
-600000-6FFFFF     (base 16)		Armstrong Fluid Technology
-				23 Bertrand Avenue
-				Toronto  Ontario  M1L2P3
-				CA
-
-60-D7-E3   (hex)		 LongSung Technology (Shanghai) Co.,Ltd.   
-900000-9FFFFF     (base 16)		 LongSung Technology (Shanghai) Co.,Ltd.   
-				 Room 606, Block B, Bldg. 1, No. 3000 Longdong Avenue., Zhangjiang Hi-Tech Park, Pudong District
-				ShangHai    201203
-				CN
-
-04-71-4B   (hex)		Omylis Pte Ltd
-700000-7FFFFF     (base 16)		Omylis Pte Ltd
-				150, South Bridge Road #06-04B, Fook Hai Building
-				Singapore    058727
-				SG
-
-60-D7-E3   (hex)		Novo innovations Ltd
-200000-2FFFFF     (base 16)		Novo innovations Ltd
-				Westwood way
-				Westwood business park  Coventry  Cv4 8lg
-				GB
-
-08-ED-02   (hex)		SANGO ELECTRONICS CO
-600000-6FFFFF     (base 16)		SANGO ELECTRONICS CO
-				RM 253,2/F,BLOCK A, CAMBRIDGE  PLAZA,188,SANWAN ROAD,  SHEUNG SHUI,HONG KONG 
-				HongKong     518131
-				CN
-
-08-ED-02   (hex)		Jiangsu Logread Network Technology Co., LTD.
-300000-3FFFFF     (base 16)		Jiangsu Logread Network Technology Co., LTD.
-				No. 100 # 9, Shu Gang West Road, HanJiang Area, 
-				Yangzhou   Jiangsu  225100
-				CN
-
-08-ED-02   (hex)		Vigitron Inc.
-500000-5FFFFF     (base 16)		Vigitron Inc.
-				7810 Trade Street, STE 100
-				San Diego  CA  92121
-				US
-
-08-ED-02   (hex)		Fio Corporation
-400000-4FFFFF     (base 16)		Fio Corporation
-				111 Queen Street East, Suite 500
-				Toronto  ON  M5C 1S2
-				CA
-
-08-ED-02   (hex)		Victiana SRL
-A00000-AFFFFF     (base 16)		Victiana SRL
-				Strada A. Hasdeu, nr. 66/3
-				Chisinau    MD-2001
-				MD
-
-60-D7-E3   (hex)		Phase One A/S
-700000-7FFFFF     (base 16)		Phase One A/S
-				Roskildevej 39
-				Frederiksberg    2000
-				DK
-
-98-AA-FC   (hex)		Shenzhen Hubsan Technology Co.，LTD.
-700000-7FFFFF     (base 16)		Shenzhen Hubsan Technology Co.，LTD.
-				 Xuefu Road, Nanshan District, 
-				13th Floor, Bldg 1C, Shenzhen Software Industry Base, Xuefu Road, Nanshan District,  Guangdong  518054
-				CN
-
-98-AA-FC   (hex)		SPM Instrument AB
-500000-5FFFFF     (base 16)		SPM Instrument AB
-				Box 504
-				Strängnäs    SE-64525
-				SE
-
-A4-11-63   (hex)		Viloc
-C00000-CFFFFF     (base 16)		Viloc
-				Langestraat, 221
-				Zandhoven  België  2240
-				BE
-
-1C-C0-E1   (hex)		Nitto Seiko
-C00000-CFFFFF     (base 16)		Nitto Seiko
-				shiroyama-cho 2banti
-				Ayabe-si  Kyoto-hu  623-0003
-				JP
-
-A4-11-63   (hex)		Adetel Equipment
-000000-0FFFFF     (base 16)		Adetel Equipment
-				3200 rue guénette
-				Montréal  Québec  H4S 2G5
-				CA
-
-A4-11-63   (hex)		tinylogics
-E00000-EFFFFF     (base 16)		tinylogics
-				St John's Innovation Centre, Cambridge
-				London    CB4 0WS
-				GB
-
-A4-11-63   (hex)		ISE GmbH
-A00000-AFFFFF     (base 16)		ISE GmbH
-				Osterstrasse 15
-				Oldenburg    26122
-				DE
-
-A4-11-63   (hex)		Allgo Tech. (Beijing) Co.,Ltd
-200000-2FFFFF     (base 16)		Allgo Tech. (Beijing) Co.,Ltd
-				Room 6012 Innovation Building ,NO.101 Southwest of 4th Ring Road, Fengtai District
-				Beijing  Beijing  100070
-				CN
-
-14-4F-D7   (hex)		Shenzhen V-Streaming Technology Co., Ltd.
-700000-7FFFFF     (base 16)		Shenzhen V-Streaming Technology Co., Ltd.
-				Room610, LangShanGe Building, Yugu Hi-Tech Park, Liuxin Road 1183, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-1C-A0-D3   (hex)		LYT inc.
-C00000-CFFFFF     (base 16)		LYT inc.
-				440, North Wolfe Road
-				Sunnyvale  CA  94085
-				US
-
-1C-A0-D3   (hex)		Desarrollos y Soluciones Guinea I+D S.L.
-800000-8FFFFF     (base 16)		Desarrollos y Soluciones Guinea I+D S.L.
-				Avda. de los Trabajadores nº2 1ªPlanta
-				Illescas  Toledo  45200
-				ES
-
-A4-11-63   (hex)		INTER CONTROL Hermann Köhler Elektrik GmbH & Co.KG
-100000-1FFFFF     (base 16)		INTER CONTROL Hermann Köhler Elektrik GmbH & Co.KG
-				Schafhofstrasse 30
-				Nuernberg    90411
-				DE
-
-38-FD-FE   (hex)		New Garden Co., Ltd.
-C00000-CFFFFF     (base 16)		New Garden Co., Ltd.
-				2F, NO.58, Xingshan Rd., Neihu.,
-				Taipei    114
-				TW
-
-A4-11-63   (hex)		AlterG, Inc.
-400000-4FFFFF     (base 16)		AlterG, Inc.
-				48438 Milmont Drive
-				Fremont  CA  94538
-				US
-
-1C-A0-D3   (hex)		Jabil circuit italia srl
-100000-1FFFFF     (base 16)		Jabil circuit italia srl
-				Via Giovanni Francesco Maggio'  Agglomerato Industriale
-				marcianise  caserta  81025
-				IT
-
-1C-A0-D3   (hex)		DSM Messtechnik GmbH
-A00000-AFFFFF     (base 16)		DSM Messtechnik GmbH
-				Dieselstrasse 16
-				Aalen  Baden-Wuerttemberg  73431
-				DE
-
-1C-A0-D3   (hex)		ERATO (HK) Corporation Limited
-D00000-DFFFFF     (base 16)		ERATO (HK) Corporation Limited
-				Unit P,8th floor, Kaiser Estate 3rd Phase, No,11 Hok Yuen Street, Hung Hom
-				Kowloon  Hong Kong  999077
-				HK
-
-58-E8-76   (hex)		DivioTec Inc.
-600000-6FFFFF     (base 16)		DivioTec Inc.
-				19F-1A, No.97, Sec. 4, ChongXin Rd., San Chong Dist., 
-				New Taipei     24161
-				TW
-
-50-A4-D0   (hex)		ZHENG DIAN ELECTRONICS LIMITED
-B00000-BFFFFF     (base 16)		ZHENG DIAN ELECTRONICS LIMITED
-				11 Xianghe Street, Xinmin, Changan
-				Dongguan  Guangdong  523879
-				CN
-
-50-A4-D0   (hex)		Beijing ANTVR Technology Co., LTD
-100000-1FFFFF     (base 16)		Beijing ANTVR Technology Co., LTD
-				4th floor of Building C, Lenovo Beijing Innovation Center, No. 6 Shangdi West Rd., Haidian Distr., Beijing 100085, China
-				Beijing  Beijing  100085
-				CN
-
-40-F3-85   (hex)		Lennox International Incorporated
-600000-6FFFFF     (base 16)		Lennox International Incorporated
-				1600 Metrocrest Drive
-				Carrollton  TX  75006
-				US
-
-80-7B-85   (hex)		Chendu Ningshui Technology Co.,Ltd
-700000-7FFFFF     (base 16)		Chendu Ningshui Technology Co.,Ltd
-				Baiyun Road ,xindu District ,ChengDu city, Sichuan Province ,China
-				Chengdu  Sichuan  610500
-				CN
-
-40-F3-85   (hex)		Fast Precision Technologies Co. Ltd.
-900000-9FFFFF     (base 16)		Fast Precision Technologies Co. Ltd.
-				4th Floor, Yang Tian Bldg., Chuang Ye Er Road & Yang Tian Road, Bao An District
-				Shenzhen  Guangdong  518101
-				CN
-
-50-A4-D0   (hex)		Seneco A/S
-200000-2FFFFF     (base 16)		Seneco A/S
-				Bøgekildevej 4
-				Hasselager  Danmark  8361
-				DK
-
-34-04-9E   (hex)		Pebble Technology
-700000-7FFFFF     (base 16)		Pebble Technology
-				900 Middlefield Road, Floor 5
-				Redwood City  CA  94063
-				US
-
-50-A4-D0   (hex)		PointGrab
-600000-6FFFFF     (base 16)		PointGrab
-				4 Haharash Str
-				Hod Hasharon    45240
-				IL
-
-34-04-9E   (hex)		EFD Induction
-200000-2FFFFF     (base 16)		EFD Induction
-				Boleveien 10
-				skien    3724
-				NO
-
-34-04-9E   (hex)		i3 International Inc.
-A00000-AFFFFF     (base 16)		i3 International Inc.
-				780 Birchmount Road
-				Scarborough  Ontario  M1K5H4
-				CA
-
-A4-58-0F   (hex)		BLOKS. GmbH
-200000-2FFFFF     (base 16)		BLOKS. GmbH
-				Agnes-Pockels-Bogen 1
-				Munich    80992
-				DE
-
-A4-58-0F   (hex)		INNOPRO
-000000-0FFFFF     (base 16)		INNOPRO
-				Building 33, Dahe Industrial Zone, Huanguan South Rd., Guanlan Street,
-				ShenZhen   GuangDong  518100
-				CN
-
-40-ED-98   (hex)		GUANGZHOU AURIC INTELLIGENT TECHNOLOGY CO.,LTD.
-800000-8FFFFF     (base 16)		GUANGZHOU AURIC INTELLIGENT TECHNOLOGY CO.,LTD.
-				Room 209, No. 115, JiuFoJianShe Road, Sino-Singapore Guangzhou Knowledge City, Huangpu District, Guangzhou
-				Guangzhou  Guangdong  510555
-				CN
-
-40-ED-98   (hex)		Knox Company
-300000-3FFFFF     (base 16)		Knox Company
-				1601 W DEER VALLEY RD
-				Phoenix  AZ  85027-2112
-				US
-
-40-ED-98   (hex)		Kendrion Kuhnke Automation GmbH
-400000-4FFFFF     (base 16)		Kendrion Kuhnke Automation GmbH
-				Luetjenburger Strasse 101
-				Malente  SH  23714
-				DE
-
-50-0B-91   (hex)		Machfu, Inc.
-900000-9FFFFF     (base 16)		Machfu, Inc.
-				20271 Goldenrod Ln
-				Germantown  MD  20876
-				US
-
-50-0B-91   (hex)		jiangsu zhongling high-tech CO.,LTD.
-500000-5FFFFF     (base 16)		jiangsu zhongling high-tech CO.,LTD.
-				NO.168 shugangdong road yangzhou city jiangsu china
-				yangzhou    225000
-				CN
-
-50-0B-91   (hex)		New Audio LLC
-A00000-AFFFFF     (base 16)		New Audio LLC
-				132 W 31st Street Suite 701
-				New York  NY  10001
-				US
-
-7C-CB-E2   (hex)		Shanghai Institute of Applied Physics, Chinese Academy of Sciences
-A00000-AFFFFF     (base 16)		Shanghai Institute of Applied Physics, Chinese Academy of Sciences
-				 239 Zhang Heng Road, Pudong New District
-				Shanghai  Shanghai  201203
-				CN
-
-50-0B-91   (hex)		SPD Development Company Ltd
-100000-1FFFFF     (base 16)		SPD Development Company Ltd
-				Stannard Way, Priory Business Park
-				Bedford    MK44 3UP
-				GB
-
-50-0B-91   (hex)		thumbzup UK Limited
-B00000-BFFFFF     (base 16)		thumbzup UK Limited
-				6th Floor, 94 Wigmore Street
-				London    W1U 3RF
-				GB
-
-48-65-EE   (hex)		VideoStitch, Inc
-900000-9FFFFF     (base 16)		VideoStitch, Inc
-				4677 Old Ironsides Dr, Suite 320
-				Santa Clara  CA  95054
-				US
-
-48-65-EE   (hex)		CaptionCall
-200000-2FFFFF     (base 16)		CaptionCall
-				4215 Riverboat Road
-				Salt Lake City  UT  84123
-				US
-
-24-4E-7B   (hex)		Cyber1st
-800000-8FFFFF     (base 16)		Cyber1st
-				Meteor Centre, Mansfield Road
-				Derby  Derbyshire  DE21 4SY
-				GB
-
-24-4E-7B   (hex)		Owasys Advanced Wireless Devices
-600000-6FFFFF     (base 16)		Owasys Advanced Wireless Devices
-				Parque Tecnologico, 207-B
-				Zamudio  Vizcaya  E-48170
-				ES
-
-48-65-EE   (hex)		Shenzhen Inpor cloud Computing Co., Ltd.
-A00000-AFFFFF     (base 16)		Shenzhen Inpor cloud Computing Co., Ltd.
-				15th Floor, Building B4, Kexing Science Park, Nanshan District zip
-				guangdong    518000
-				CN
-
-48-65-EE   (hex)		DNV GL
-C00000-CFFFFF     (base 16)		DNV GL
-				Utrechtseweg 310
-				Arnhem    6812 AR
-				NL
-
-1C-C0-E1   (hex)		Kids Wireless Inc
-500000-5FFFFF     (base 16)		Kids Wireless Inc
-				200 Bathurst Dr.
-				Waterloo  Ontario  N2V 2L7
-				CA
-
-1C-C0-E1   (hex)		Hangzhou Kaierda Electric Welding Machine Co.,Ltd
-100000-1FFFFF     (base 16)		Hangzhou Kaierda Electric Welding Machine Co.,Ltd
-				#6 Kenhui Five Road,Xiaoshan Economic & Technology Development Zone
-				Hangzhou    311232
-				CN
-
-1C-C0-E1   (hex)		Yun Yang Fire Safety Equipment Co.,Ltd.
-E00000-EFFFFF     (base 16)		Yun Yang Fire Safety Equipment Co.,Ltd.
-				No.11-4, Wanjin Rd., Dashe Dist., 
-				Kaohsiung City     815
-				TW
-
-AC-64-DD   (hex)		Kpnetworks Ltd.
-600000-6FFFFF     (base 16)		Kpnetworks Ltd.
-				4-5-11-10F Shiba
-				Minato-ku  Tokyo  108-0014
-				JP
-
-AC-64-DD   (hex)		SHANGHAI ZTE TECHNOLOGIES CO.,LTD
-500000-5FFFFF     (base 16)		SHANGHAI ZTE TECHNOLOGIES CO.,LTD
-				Bibo Road, Shanghai Pudong Zhangjiang Hi-Tech Park, Building No. 889, ZTE H Block 6F
-				SHANGHAI  SHANGHAI  201210
-				CN
-
-4C-E1-73   (hex)		jvi
-A00000-AFFFFF     (base 16)		jvi
-				Ettenbergstrasse 19
-				Deckenpfronn    75392
-				DE
-
-AC-64-DD   (hex)		Jia-Teng
-000000-0FFFFF     (base 16)		Jia-Teng
-				4F., No.417, Ruiguang Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C)
-				Taipei  Taipei  114
-				TW
-
-AC-64-DD   (hex)		Micro Connect Pty Ltd
-900000-9FFFFF     (base 16)		Micro Connect Pty Ltd
-				22 Gardenia Place
-				FOREST GLEN  QLD  4556
-				AU
-
-4C-E1-73   (hex)		Lenovo Data Center Group
-200000-2FFFFF     (base 16)		Lenovo Data Center Group
-				8001 Development Dr
-				Morrisville  NC   27560
-				US
-
-4C-E1-73   (hex)		Ersúles Limited
-700000-7FFFFF     (base 16)		Ersúles Limited
-				Unit 17 Sandyford Office Park
-				Dublin     D18 NP77
-				IE
-
-38-3A-21   (hex)		Foresight Sports
-A00000-AFFFFF     (base 16)		Foresight Sports
-				9965 Carroll Canyon Road
-				San Diego   CA  92131
-				US
-
-38-3A-21   (hex)		Alicat Scientific
-800000-8FFFFF     (base 16)		Alicat Scientific
-				7641 N Business Park Dr
-				Tucson  AZ  85743
-				US
-
-F8-1D-78   (hex)		Dongguan Shun Hing Plastics Limited
-000000-0FFFFF     (base 16)		Dongguan Shun Hing Plastics Limited
-				No.11,13,15,Zhongfang Industrial Road,Shatou,Changan Town
-				Dongguan City  Guangdong  523861
-				CN
-
-F8-1D-78   (hex)		Zengge Co., Limited
-600000-6FFFFF     (base 16)		Zengge Co., Limited
-				3/F, B Building, Second Laowei Industrial Zone, Longhua District
-				Shenzhen  Guangdong  518109
-				CN
-
-70-F8-E7   (hex)		CUAV
-E00000-EFFFFF     (base 16)		CUAV
-				zengcheng city xiapu
-				guangzhou  guangdong  511340
-				CN
-
-70-F8-E7   (hex)		Beijing Eehuu Technology Co.,Ltd.
-500000-5FFFFF     (base 16)		Beijing Eehuu Technology Co.,Ltd.
-				Room 2010, 3rd floor, Building #10, No.39 Sanlihe Road, Haidian District, Beijing, China
-				BEIJING  Beijing  10000
-				CN
-
-70-F8-E7   (hex)		NST Technology Limited Co.,Ltd.
-700000-7FFFFF     (base 16)		NST Technology Limited Co.,Ltd.
-				1F,ABuilding,Juxie Zuo,No.18 Zhenze Road, 
-				wuxi  Jiangsu  214073
-				CN
-
-70-F8-E7   (hex)		CLIP Inc.
-400000-4FFFFF     (base 16)		CLIP Inc.
-				4－5－18,Hommachi,Chuo-ku
-				Osaka-city  Osaka-fu  541-0053
-				JP
-
-84-E0-F4   (hex)		Hangzhou Nationalchip Science & Technology Co.,Ltd.
-500000-5FFFFF     (base 16)		Hangzhou Nationalchip Science & Technology Co.,Ltd.
-				5-6th Floor, Innovation Mansion East Software Park,90# Wensan Road
-				Hangzhou  Zhejiang  310012
-				CN
-
-70-F8-E7   (hex)		System-on-Chip engineering
-D00000-DFFFFF     (base 16)		System-on-Chip engineering
-				Jose María Escuza 23 Entreplanta Dcha D
-				Bilbao  Bizkaia  ES48013
-				ES
-
-70-F8-E7   (hex)		Photonfocus AG
-B00000-BFFFFF     (base 16)		Photonfocus AG
-				Bahnhofplatz 10
-				Lachen  SZ  8853
-				CH
-
-84-E0-F4   (hex)		SHENZHEN HCN.ELECTRONICS CO.,LTD.
-900000-9FFFFF     (base 16)		SHENZHEN HCN.ELECTRONICS CO.,LTD.
-				8F, Block C3, Nanshan I Park, No.1001 Xueyuan Road, Nanshan District
-				shenzhen  guangdong  518040
-				CN
-
-84-E0-F4   (hex)		Logos01 Srl
-D00000-DFFFFF     (base 16)		Logos01 Srl
-				Via Pertini 23
-				Marmirolo  MN  46045
-				IT
-
-84-E0-F4   (hex)		PetroInTrade
-400000-4FFFFF     (base 16)		PetroInTrade
-				Engelsa 71
-				Saint-Peterburg    194214
-				RU
-
-C0-D3-91   (hex)		Fuzhou Jinshi Technology Co.,Ltd.
-000000-0FFFFF     (base 16)		Fuzhou Jinshi Technology Co.,Ltd.
-				Block A, Building 39#，District D, Software Park
-				Fuzhou  Fujian Province  350003
-				CN
-
-C0-D3-91   (hex)		Vernier Software & Technology
-400000-4FFFFF     (base 16)		Vernier Software & Technology
-				13979 SW Millikan Way
-				Beaverton  OR  97005
-				US
-
-5C-F2-86   (hex)		Shenzhen VST Automotive Electronics Co., LTD
-900000-9FFFFF     (base 16)		Shenzhen VST Automotive Electronics Co., LTD
-				3 floor,1Building, No.3 West of ShangXue Science and technology park, Bantian town, LongGang District
-				ShenZhen  Guangdong  518100
-				CN
-
-C0-D3-91   (hex)		Ernitec
-600000-6FFFFF     (base 16)		Ernitec
-				Tempovej 41
-				Ballerup    2750
-				DK
-
-58-E8-76   (hex)		Beijing Perabytes IS Technology Co., Ltd
-100000-1FFFFF     (base 16)		Beijing Perabytes IS Technology Co., Ltd
-				2F, Office Building, No. 2 Yard, Longxiang Printing-plate Group, North of Huilongguan Village, Huilongguan Town, ChangPing District，Beijing 102208, P.R. China
-				Beijing  Beijing  102208
-				CN
-
-58-E8-76   (hex)		 Baoruh Electronic Co., Ltd.
-E00000-EFFFFF     (base 16)		 Baoruh Electronic Co., Ltd.
-				o.285, Dingciang Street, Kaohsiung, 80790 Taiwan.
-				 Kaohsiung    80790 
-				TW
-
-58-E8-76   (hex)		Coala Life AB
-200000-2FFFFF     (base 16)		Coala Life AB
-				Riddargatan 18
-				Stockholm    11451
-				SE
-
-58-E8-76   (hex)		Chronos Technology Ltd.
-700000-7FFFFF     (base 16)		Chronos Technology Ltd.
-				Stowfield House
-				Lydbrook  Gloucestershire  GL17 9PD
-				GB
-
-F0-AC-D7   (hex)		Simprints Technology Ltd
-C00000-CFFFFF     (base 16)		Simprints Technology Ltd
-				The Chesterton Tower
-				Cambridge    CB4 1DZ
-				GB
-
-B0-C5-CA   (hex)		SHENZHEN KTC TECHNOLOGY GROUP 
-700000-7FFFFF     (base 16)		SHENZHEN KTC TECHNOLOGY GROUP 
-				Northern Wuhe Road,Banxuegang Industry Area,Buji,Shenzhen,China
-				Shenzhen  Guangdong  518129
-				CN
-
-F0-AC-D7   (hex)		U3storage Technologies Co., Ltd
-900000-9FFFFF     (base 16)		U3storage Technologies Co., Ltd
-				information Road No. 26 , Haidian District 
-				BEIJING    100085
-				CN
-
-28-36-38   (hex)		SHENZHEN GOSPELL SMARTHOME ELECTRONIC CO., LTD.
-200000-2FFFFF     (base 16)		SHENZHEN GOSPELL SMARTHOME ELECTRONIC CO., LTD.
-				Block F10~13, F518 Idea Land, Bao Yuan Road, Baoan, Shenzhen
-				Shenzhen  Guangdong  518102
-				CN
-
-28-36-38   (hex)		Sabinetek
-300000-3FFFFF     (base 16)		Sabinetek
-				NO.1406  Hong Yuan Building  ,Jiu Xian Qiao Road A 4,Chao Yang Beijing China
-				Beijing  Beijing  100000
-				CN
-
-78-CA-83   (hex)		Hubei Boyuan Zhijia Network Media Co. Ltd.
-D00000-DFFFFF     (base 16)		Hubei Boyuan Zhijia Network Media Co. Ltd.
-				Wuhan City, Hubei City, Optics Valley Province, Optics Valley 77, city, financial port A3 12
-				Wuhan  Hubei  42000
-				CN
-
-8C-19-2D   (hex)		Elcon AB
-E00000-EFFFFF     (base 16)		Elcon AB
-				Hyttrisvagen 27
-				Nyhammar    77014
-				SE
-
-8C-19-2D   (hex)		Greenfield Technology
-300000-3FFFFF     (base 16)		Greenfield Technology
-				1 bis rue marcel paul
-				massy    91300
-				FR
-
-D0-D9-4F   (hex)		APPOTRONICS CO., LTD
-E00000-EFFFFF     (base 16)		APPOTRONICS CO., LTD
-				4th Floor,SZICC,NO.1089,Chaguang Road,Nanshan District, Shenzhen, China
-				Shenzhen  Guangdong  518000
-				CN
-
-CC-D3-1E   (hex)		Shenzhen Decnta Technology Co.,LTD.
-700000-7FFFFF     (base 16)		Shenzhen Decnta Technology Co.,LTD.
-				F13,No.02,Building Shangqi,Nanhaidadao 4050 Nanshan District,Shenzhen,P.R.China
-				shenzhen  Guangdong  518057
-				CN
-
-C4-7C-8D   (hex)		Star2Star Communications, LLC
-200000-2FFFFF     (base 16)		Star2Star Communications, LLC
-				600 Tallevast Road, Suite 202
-				Sarasota  FL  34243
-				US
-
-CC-D3-1E   (hex)		NTmore.Co.,Ltd
-500000-5FFFFF     (base 16)		NTmore.Co.,Ltd
-				38, Heungan-daero 427 beon-gil, Dongan-gu
-				Anyang  Gyeonggi  431-801
-				KR
-
-CC-D3-1E   (hex)		inoage GmbH
-800000-8FFFFF     (base 16)		inoage GmbH
-				Wiener Str. 56
-				Dresden    01219
-				DE
-
-C4-7C-8D   (hex)		Anhui GuangXing Linked-Video Communication Technology Co, Ltd.
-D00000-DFFFFF     (base 16)		Anhui GuangXing Linked-Video Communication Technology Co, Ltd.
-				Floor 6, Block B, Idiopathic Information Technology Port, Kefeng Road No. 2, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-68-91-D0   (hex)		solvimus GmbH
-800000-8FFFFF     (base 16)		solvimus GmbH
-				Ehrenbergstr. 11
-				Ilmenau    98693
-				DE
-
-68-91-D0   (hex)		Spraying Systems Co.
-C00000-CFFFFF     (base 16)		Spraying Systems Co.
-				North Ave. and Schmale Road P.O. Box 7900 
-				Wheaton  IL  60187-7901
-				US
-
-68-91-D0   (hex)		Fuzhou x-speed information technology Co.,Ltd.
-D00000-DFFFFF     (base 16)		Fuzhou x-speed information technology Co.,Ltd.
-				 tianewan 30#1601 Pushang Load,Cangshan District,
-				Fuzhou  Fujian  350008
-				CN
-
-E0-B6-F5   (hex)		Moog Crossbow
-B00000-BFFFFF     (base 16)		Moog Crossbow
-				1421 McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-E0-B6-F5   (hex)		START TODAY CO.,LTD.
-100000-1FFFFF     (base 16)		START TODAY CO.,LTD.
-				WBG Malibu West 16 Floor 2-6-1 Nakase Mihama-ku, Chiba
-				Chiba  Chiba  261-7116
-				JP
-
-50-FF-99   (hex)		metraTec GmbH
-A00000-AFFFFF     (base 16)		metraTec GmbH
-				Niels-Bohr-Str. 5
-				Magdeburg  Sachsen-Anh.  39106
-				DE
-
-50-FF-99   (hex)		Dolphin Concepts Limited
-800000-8FFFFF     (base 16)		Dolphin Concepts Limited
-				A 10, Unit B-E
-				11/F, Genesis, 33-35 Wong Chuk Hang Road,  Hong Kong  11111
-				HK
-
-98-6D-35   (hex)		SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.
-200000-2FFFFF     (base 16)		SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.
-				No.6 Building, Longfu Industrial Area, Huarong Road, Tongsheng Community, Dalang Street, Longhua New District, Shenzhen, Guangdong, China
-				shenzhen  guangdong  518000
-				CN
-
-98-6D-35   (hex)		INTECH
-B00000-BFFFFF     (base 16)		INTECH
-				1F No. 45, Wanghai Road / Software Park Phase Ⅱ, Xiamen, China
-				Xiamen  Fujian  361008
-				CN
-
-98-6D-35   (hex)		BAYCOM OPTO-ELECTRONICS TECHNOLGY CO., LTD.
-E00000-EFFFFF     (base 16)		BAYCOM OPTO-ELECTRONICS TECHNOLGY CO., LTD.
-				3F, NO.9, INDUSTRIAL EAST 9TH RD. HSINCHU SCIENCE PARK, HSIN-CHU CITY, TAIWAN, R.O.C.
-				HSIN-CHU    30075
-				TW
-
-98-6D-35   (hex)		iWave Japan, Inc.
-A00000-AFFFFF     (base 16)		iWave Japan, Inc.
-				8F-B,Kannai Sumiyoshi Building,3-29 Sumiyoshi-Cho,Naka-Ku,
-				Yokohama, Kanagawa    231-0013
-				JP
-
-10-07-23   (hex)		Diginet Control Systems Pty Ltd
-200000-2FFFFF     (base 16)		Diginet Control Systems Pty Ltd
-				96-112 Gow Street
-				Padstow  New South Wales  2211
-				AU
-
-7C-47-7C   (hex)		Hangzhou Yiyitaidi Information Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Hangzhou Yiyitaidi Information Technology Co., Ltd.
-				#9 Jiuhuan Road, Building 1B208, Jianggan District
-				Hangzhou  Zhejiang  310019
-				CN
-
-5C-F2-86   (hex)		Itron UK Limited
-B00000-BFFFFF     (base 16)		Itron UK Limited
-				Harfreys Road , Harfreys Ind. Estate
-				Great Yarmouth    NR31 0LS
-				GB
-
-38-FD-FE   (hex)		WAYTONE (BEIIJNG) COMMUNICATIONS CO.,LTD
-100000-1FFFFF     (base 16)		WAYTONE (BEIIJNG) COMMUNICATIONS CO.,LTD
-				ROOM 201B,KESHI BUILDING,NO.28 XINXI ROAD HAIDIAN BEIJING,P.R.CHINA 
-				Beijing  Beijing  100085 
-				CN
-
-7C-47-7C   (hex)		POWERLAND LIMITED
-200000-2FFFFF     (base 16)		POWERLAND LIMITED
-				7F, Buiding A2, ZhongTai Information Industry Park, DeZheng Road, ShiYan Street.
-				ShenZhen  GuangDong  518108
-				CN
-
-38-B8-EB   (hex)		Yellowbrick Data, Inc.
-D00000-DFFFFF     (base 16)		Yellowbrick Data, Inc.
-				250 Cambridge Av.,  Suite 201
-				Palo Alto  CA  94306
-				US
-
-38-FD-FE   (hex)		Siemens AG, PG IE R&D
-300000-3FFFFF     (base 16)		Siemens AG, PG IE R&D
-				Siemensalle 84
-				Karlsruhe    76187
-				DE
-
-38-B8-EB   (hex)		MATRIXSTREAM TECHNOLOGIES, INC.
-600000-6FFFFF     (base 16)		MATRIXSTREAM TECHNOLOGIES, INC.
-				303 Twin Dolphins Drive 6th Floor Redwood Shores, california,USA 94065 
-				california     94065 
-				AM
-
-38-B8-EB   (hex)		barox Kommunikation GmbH
-200000-2FFFFF     (base 16)		barox Kommunikation GmbH
-				Marie-Curie-Strasse 8
-				Lörrach    DE-79539
-				DE
-
-1C-88-79   (hex)		gekartel AG
-B00000-BFFFFF     (base 16)		gekartel AG
-				Julius-Otto-Straße 7
-				Dresden    01219
-				DE
-
-1C-88-79   (hex)		Newps co.,ltd
-000000-0FFFFF     (base 16)		Newps co.,ltd
-				33, Hoguk-ro
-				Daegu  Korea  41502
-				KR
-
-1C-87-74   (hex)		Quest Integrity
-E00000-EFFFFF     (base 16)		Quest Integrity
-				19823 58TH PL S, STE 100
-				Kent  WA  98032
-				US
-
-1C-88-79   (hex)		ITW-FEG
-A00000-AFFFFF     (base 16)		ITW-FEG
-				155 Harlem Avenue
-				Glenview  IL  60025
-				US
-
-1C-87-76   (hex)		Artis GmbH
-E00000-EFFFFF     (base 16)		Artis GmbH
-				Buchenring 40
-				Egestorf    21272
-				DE
-
-1C-87-79   (hex)		ASSYSTEM France
-E00000-EFFFFF     (base 16)		ASSYSTEM France
-				13 rue Marie Louise Dissard
-				TOULOUSE    31024
-				FR
-
-1C-87-74   (hex)		Nichigaku
-200000-2FFFFF     (base 16)		Nichigaku
-				Oimachi 1-49-15
-				Shinagawa  Tokyo  1400014
-				JP
-
-1C-87-74   (hex)		Philips Personal Health Solutions
-000000-0FFFFF     (base 16)		Philips Personal Health Solutions
-				High Tech Campus, HTC37 floor 0
-				Eindhoven    5656 AE
-				NL
-
-1C-87-76   (hex)		Hekatron Vertriebs GmbH
-B00000-BFFFFF     (base 16)		Hekatron Vertriebs GmbH
-				Brühlmatten 9
-				Sulzburg    79295
-				DE
-
-1C-87-76   (hex)		RDP.RU
-400000-4FFFFF     (base 16)		RDP.RU
-				3 Davydkovskaya street
-				Moscow    121352
-				RU
-
-1C-87-79   (hex)		TASC Systems Inc.
-700000-7FFFFF     (base 16)		TASC Systems Inc.
-				9415 - 202 Street
-				Langley  BRITISH COLUMBIA  V1M4B5
-				CA
-
-1C-87-79   (hex)		SMARTMOVT TECHNOLOGY Co.， LTD
-200000-2FFFFF     (base 16)		SMARTMOVT TECHNOLOGY Co.， LTD
-				Room204-210, F3 building, F518 Idea Land, Baoyuan road, Xixiang Ave, Bao’an District
-				Shenzhen  Guangdong  518100 
-				CN
-
-1C-87-79   (hex)		Beijing Geedeen Technology Co., Ltd
-B00000-BFFFFF     (base 16)		Beijing Geedeen Technology Co., Ltd
-				Room 1701, Building A, Boya International Center, Lizezhongerlu, Chaoyang District
-				Beijing  Beijing  100102
-				CN
-
-84-39-BE   (hex)		Guangzhou Heygears Technology Ltd
-100000-1FFFFF     (base 16)		Guangzhou Heygears Technology Ltd
-				Room 2301, #379 Zhongshan Road Central
-				Guangzhou  Guangdong  510000
-				CN
-
-70-88-6B   (hex)		Church & Dwight Co., Inc.
-600000-6FFFFF     (base 16)		Church & Dwight Co., Inc.
-				500 Charles Ewing Blvd
-				Ewing  NJ  08628
-				US
-
-40-A3-6B   (hex)		Onion Corporation
-C00000-CFFFFF     (base 16)		Onion Corporation
-				186 Denison Street
-				Markham  Ontario  L3R 1B5
-				CA
-
-70-88-6B   (hex)		Bitfinder Inc
-100000-1FFFFF     (base 16)		Bitfinder Inc
-				20660 Stevens Creeks #345
-				Cupertino  CA  95014
-				US
-
-40-A3-6B   (hex)		TW-TeamWare
-100000-1FFFFF     (base 16)		TW-TeamWare
-				Via Pindaro, 19
-				Milano    20128
-				IT
-
-70-88-6B   (hex)		Cable Matters Inc.
-800000-8FFFFF     (base 16)		Cable Matters Inc.
-				153 Northboro Road, Suite 5
-				Southborough  MA  01772
-				US
-
-70-88-6B   (hex)		Shenzhen Coolhear Information Technology Co., Ltd.
-900000-9FFFFF     (base 16)		Shenzhen Coolhear Information Technology Co., Ltd.
-				Room 502,Building A4, Kexing Science Park, Keyuan Road, Nanshan Distrct, Shenzhen, Guangdong,
-				Shenzhen  Guangdong  518000
-				CN
-
-00-55-DA   (hex)		OOO DEKATRON
-600000-6FFFFF     (base 16)		OOO DEKATRON
-				Oseny boulevard 15 apart. 394
-				Moscow  Moscow  121609
-				RU
-
-00-55-DA   (hex)		Quantum Communication Technology Co., Ltd.,Anhui
-900000-9FFFFF     (base 16)		Quantum Communication Technology Co., Ltd.,Anhui
-				D3 Innovation Industrial Park, No. 800 Wangjiang West Road, Hefei Hi-tech Industrial Development Zone, Hefei City, Anhui Province, China
-				Hefei  Anhui  230088
-				CN
-
-CC-1B-E0   (hex)		Cassia Networks
-E00000-EFFFFF     (base 16)		Cassia Networks
-				Room B206 , ZhongGuanCun FaZhanDaSha
-				Beijing  Beijing  100085
-				CN
-
-80-0A-80   (hex)		Golana Technology (Shenzhen) Co., Ltd.
-000000-0FFFFF     (base 16)		Golana Technology (Shenzhen) Co., Ltd.
-				4th Floor, Integration Building A1
-				Shenzhen  Guangdong  518129
-				CN
-
-CC-1B-E0   (hex)		Matter Labs Pty Ltd
-A00000-AFFFFF     (base 16)		Matter Labs Pty Ltd
-				Suite 105
-				South Yarra  Vic  3141
-				AU
-
-CC-1B-E0   (hex)		Beijing Daotongtianxia Co.Ltd.
-100000-1FFFFF     (base 16)		Beijing Daotongtianxia Co.Ltd.
-				Beijing, Haidian District, Taiyueyuan Building No.1, Taiyueshangwu Center Flo.5
-				Beijing  Beijing  100088
-				CN
-
-A0-3E-6B   (hex)		Shenzhen Nufilo Inc.
-400000-4FFFFF     (base 16)		Shenzhen Nufilo Inc.
-				Tianliao Building F3,(New Materials Industrial Park),Xueyuan Road,Nanshan District,Shenzhen City,P.R.China
-				Shenzhen  Guangdong  518055
-				CN
-
-C8-8E-D1   (hex)		Ube, Inc. (dba Plum)
-700000-7FFFFF     (base 16)		Ube, Inc. (dba Plum)
-				9800 N. Lamar Blvd., STE 310
-				Austin  TX  78753-4160
-				US
-
-C8-8E-D1   (hex)		Shanghai Bwave Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Shanghai Bwave Technology Co.,Ltd
-				6F,Building12,399 Keyuan Road, Zhangjiang Hi-Tech Park,shanghai,china
-				Shanghai  Shanghai  201203
-				CN
-
-A0-3E-6B   (hex)		KoCoS Messtechnik AG
-B00000-BFFFFF     (base 16)		KoCoS Messtechnik AG
-				Südring 42
-				Korbach  Hessen  34497
-				DE
-
-C8-8E-D1   (hex)		PHOENIX ENGINEERING CORP.
-D00000-DFFFFF     (base 16)		PHOENIX ENGINEERING CORP.
-				466-3 Fujikubo
-				Irumagun  Saitama  354-0041
-				JP
-
-A0-3E-6B   (hex)		s&t embedded GmbH
-000000-0FFFFF     (base 16)		s&t embedded GmbH
-				Breslauer Str. 3
-				Eching  Bayern  85386
-				DE
-
-1C-21-D1   (hex)		LG CNS
-A00000-AFFFFF     (base 16)		LG CNS
-				21F, FKI Tower, 24, Yeoui-daero, Yeongdeungpo-gu
-				Seoul    150-881
-				KR
-
-1C-21-D1   (hex)		Global Design Solutions Ltd
-B00000-BFFFFF     (base 16)		Global Design Solutions Ltd
-				Unit 13
-				Bristol  England  BS44ED
-				GB
-
-1C-21-D1   (hex)		Wuhan TieChi Detection Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Wuhan TieChi Detection Technology Co., Ltd.
-				Hongshan District Luo Yu RoadBainaohui room 1513
-				Wuhan  Hubei  430000
-				CN
-
-1C-21-D1   (hex)		Toyo System CO.,LTD.
-000000-0FFFFF     (base 16)		Toyo System CO.,LTD.
-				106-1,Zenita,Joban-Nishigo,
-				Iwaki,  Fukushima  972-8316
-				JP
-
-1C-21-D1   (hex)		Varaani Works Oy
-200000-2FFFFF     (base 16)		Varaani Works Oy
-				Takojankatu 1c B 16
-				Tampere  Pirkanmaa  33540
-				FI
-
-DC-44-27   (hex)		Rohde&Schwarz Topex SA
-D00000-DFFFFF     (base 16)		Rohde&Schwarz Topex SA
-				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
-				Bucuresti  Romania  014142
-				RO
-
-1C-21-D1   (hex)		Liscotech System Co., Ltd.
-D00000-DFFFFF     (base 16)		Liscotech System Co., Ltd.
-				4F. No. 342 Sec.4 Chenggong Rd. Neihu Dist.
-				Taipei  TW  11458
-				TW
-
-1C-21-D1   (hex)		Soundtrack Your Brand Sweden AB
-700000-7FFFFF     (base 16)		Soundtrack Your Brand Sweden AB
-				Birger Jarlsgatan 43
-				Stockholm    11145
-				SE
-
-C8-8E-D1   (hex)		Fibergate.Inc
-500000-5FFFFF     (base 16)		Fibergate.Inc
-				KDX Shibadaimon.Bld 2F Shibadaimon Minato-ku Tokyo 105-0012 Japan
-				Tokyo  Minato-ku  105-0012
-				JP
-
-DC-44-27   (hex)		VerifEye Technologies
-E00000-EFFFFF     (base 16)		VerifEye Technologies
-				2-151 Whitehall Dr.
-				Markham  ON  L3R9T1
-				CA
-
-C8-8E-D1   (hex)		Linx Technologies
-300000-3FFFFF     (base 16)		Linx Technologies
-				159 Ort Lane
-				Merlin  OR  97532
-				US
-
-C8-8E-D1   (hex)		Comlab AG
-400000-4FFFFF     (base 16)		Comlab AG
-				Ey 13
-				Ittigen  BE  3076
-				CH
-
-B0-C5-CA   (hex)		TEM Mobile Limited
-A00000-AFFFFF     (base 16)		TEM Mobile Limited
-				RM1703, North Block, Cangsong Building, Tairan 6 road, Futian District, Shenzhen.
-				Shenzhen  Guangdong  518000
-				CN
-
-B0-C5-CA   (hex)		RISECOMM  (HK) TECHNOLOGY CO. LIMITED
-B00000-BFFFFF     (base 16)		RISECOMM  (HK) TECHNOLOGY CO. LIMITED
-				Skyworth Building C501, Hi-tech Industrial Park, Shenzhen, China
-				shenzhan  guangdong  518057
-				CN
-
-B0-C5-CA   (hex)		LOWOTEC GmbH
-200000-2FFFFF     (base 16)		LOWOTEC GmbH
-				Marie-Curie-Str. 1
-				Oldenburg  Niedersachsen  26129
-				DE
-
-78-C2-C0   (hex)		ShenZhen TuLing Robot CO.,LTD
-500000-5FFFFF     (base 16)		ShenZhen TuLing Robot CO.,LTD
-				BLK 9, No 28, Langshan Road, Northern District of High Tech. Industry Park, Nanshan Dist., SZ., PRC.
-				ShenZhen  GuangDong  518000
-				CN
-
-B4-37-D1   (hex)		Axiomatic Technologies Corporation
-A00000-AFFFFF     (base 16)		Axiomatic Technologies Corporation
-				5915 Wallace St.
-				Mississauga  ON  L4Z1Z8
-				CA
-
-74-F8-DB   (hex)		GHL Advanced Technology GmbH & Co. KG
-100000-1FFFFF     (base 16)		GHL Advanced Technology GmbH & Co. KG
-				Marie-Curie-Str. 20
-				Kaiserslautern  RP  67661
-				DE
-
-54-9A-11   (hex)		Hangzhou duotin Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		Hangzhou duotin Technology Co., Ltd.
-				Haichuang Garden of Hangzhou city Yuhang District 4 Building 407B
-				hangzhou  Zhejiang  311100
-				CN
-
-88-5D-90   (hex)		Gigatech R&D Corp.
-900000-9FFFFF     (base 16)		Gigatech R&D Corp.
-				7F-5, 16 Jian 8th road, Zhonghe Dist.
-				New Taipei City  Taiwan  23511
-				TW
-
-88-5D-90   (hex)		ShenZhen Yuyangsheng technology company LTD
-100000-1FFFFF     (base 16)		ShenZhen Yuyangsheng technology company LTD
-				Yinfeng industrial park Jiu wei community
-				shenzhen  guangdong  518000
-				CN
-
-88-5D-90   (hex)		Hi-Profile Achievement (M) Sdn Bhd
-600000-6FFFFF     (base 16)		Hi-Profile Achievement (M) Sdn Bhd
-				42A, Lorong Teras Jaya 2, Kawasan Perniagaan Teras Jaya
-				Butterworth  Pulau Pinang  13400
-				MY
-
-54-9A-11   (hex)		VendNovation LLC
-A00000-AFFFFF     (base 16)		VendNovation LLC
-				13400 NE 20th Street
-				Bellevue  WA  98005
-				US
-
-80-7B-85   (hex)		Shiroshita Industrial Co., Ltd.
-000000-0FFFFF     (base 16)		Shiroshita Industrial Co., Ltd.
-				1-1-58, Tokiiri
-				Ueda-shi  Nagano  386-0015
-				JP
-
-80-7B-85   (hex)		Phoenix Co.,Ltd.
-200000-2FFFFF     (base 16)		Phoenix Co.,Ltd.
-				Perl Iidabashi Bldg.,
-				Chiyoda-ku  Tokyo  102-0072
-				JP
-
-64-FB-81   (hex)		Sichuan Haige Actec Communication Technology Co.,Ltd.
-B00000-BFFFFF     (base 16)		Sichuan Haige Actec Communication Technology Co.,Ltd.
-				8 Mintai Road, Youxian District, Mianyang City, Sichuan
-				Mianyang City  Sichuan  621022
-				CN
-
-80-7B-85   (hex)		IDair, LLC
-800000-8FFFFF     (base 16)		IDair, LLC
-				6767 Old Madison Pike
-				Huntsville  AL  35806
-				US
-
-80-E4-DA   (hex)		Neutronics
-A00000-AFFFFF     (base 16)		Neutronics
-				456 Creamery Way
-				Exton  Pennsylvania  19341
-				US
-
-64-FB-81   (hex)		Narrative AB
-100000-1FFFFF     (base 16)		Narrative AB
-				Agatan 55A
-				Linkoping  -  58222
-				SE
-
-1C-CA-E3   (hex)		Insigma Inc
-200000-2FFFFF     (base 16)		Insigma Inc
-				43490, Yukon Drive, Suite 102
-				Ashburn  VA  20147
-				US
-
-80-E4-DA   (hex)		Akenori PTE LTD
-E00000-EFFFFF     (base 16)		Akenori PTE LTD
-				176 JOO CHIAT ROAD #02-02
-				    427447
-				SG
-
-1C-CA-E3   (hex)		Dream Visions Co., LTD
-B00000-BFFFFF     (base 16)		Dream Visions Co., LTD
-				90 Chongpa_Ro YoungSan-Gu
-				Seoul  Seoul  140-742
-				KR
-
-1C-CA-E3   (hex)		Gahdeung Elecom
-C00000-CFFFFF     (base 16)		Gahdeung Elecom
-				203, Rojinmedical, 717, Lee-Dong, Sanrok-Gu
-				ANSAN  Kyeonggi-Do  ASI|KR|KS009|ANSAN
-				KR
-
-1C-CA-E3   (hex)		TOKAI RIKA CO., LTD.
-600000-6FFFFF     (base 16)		TOKAI RIKA CO., LTD.
-				3-260
-				Niwa-gun, Oguchi-cho  Aichi  480-0195
-				JP
-
-90-C6-82   (hex)		Shenzhen Photon Broadband Technology CO., LTD
-100000-1FFFFF     (base 16)		Shenzhen Photon Broadband Technology CO., LTD
-				8/F,C Bldg, Funing Hi-Tech Industrial Park, No.71 Fuyong Xintian Road,Baoan District Shenzhen,China
-				Shenzhen  Guangdong  518103
-				CN
-
-90-C6-82   (hex)		ekey biometric systems gmbh
-200000-2FFFFF     (base 16)		ekey biometric systems gmbh
-				Lunzerstrsasse 89
-				Linz  Upper Austria  4020
-				AT
-
-90-C6-82   (hex)		ACT
-900000-9FFFFF     (base 16)		ACT
-				Unit C1, South City Business Center
-				Dublin    
-				IE
-
-2C-D1-41   (hex)		AOptix Technologies, Inc
-300000-3FFFFF     (base 16)		AOptix Technologies, Inc
-				675 Campbell Technology Pkwy
-				Campbell  CA  95008
-				US
-
-2C-D1-41   (hex)		iCIRROUND Inc
-000000-0FFFFF     (base 16)		iCIRROUND Inc
-				7F,No.,79, Chou-Tze St.,
-				Taipei  Taiwan  114
-				TW
-
-90-C6-82   (hex)		Beijing Acorn Networks Corporation
-A00000-AFFFFF     (base 16)		Beijing Acorn Networks Corporation
-				1A-601，Wang Jing Street, Chao Yang Qu, Beijing, China
-				Beijing  Beijing  100102
-				CN
-
-2C-6A-6F   (hex)		Schneider Electric Korea
-B00000-BFFFFF     (base 16)		Schneider Electric Korea
-				14F Kbiz DMC tower,
-				  Seoul  121-904
-				KR
-
-2C-D1-41   (hex)		Minno LLC
-800000-8FFFFF     (base 16)		Minno LLC
-				421 North Milpas Street
-				Santa Barbara  CA  93103
-				US
-
-A0-BB-3E   (hex)		COMSYS Communications Systems Service GmbH
-400000-4FFFFF     (base 16)		COMSYS Communications Systems Service GmbH
-				TecCenter
-				Bad Salzdetfurth  Niedersachsen  31162
-				DE
-
-98-02-D8   (hex)		Fritz Kuebler GmbH
-600000-6FFFFF     (base 16)		Fritz Kuebler GmbH
-				Schubertstrasse 47
-				Villingen-Schwenningen  Baden-Wuerttemberg  78054
-				DE
-
-98-02-D8   (hex)		Grammer EiA Electronics nv
-300000-3FFFFF     (base 16)		Grammer EiA Electronics nv
-				Vluchtenburgstraat 3B
-				Aartselaar  Antwerp  2630
-				BE
-
-A0-BB-3E   (hex)		Messtechnik Sachs GmbH
-E00000-EFFFFF     (base 16)		Messtechnik Sachs GmbH
-				Siechenfeldstr. 30/1
-				Schorndorf  Germany  73614
-				DE
-
-98-02-D8   (hex)		SHENZHEN ATEKO PHOTOELECTRICITY CO LTD
-100000-1FFFFF     (base 16)		SHENZHEN ATEKO PHOTOELECTRICITY CO LTD
-				 4-5F, E1 Building, TCL International E City, No.1001 Zhongshanyuan Road, Nanshan District
-				Shenzhen,  Guangdong  518052
-				CN
-
-F8-02-78   (hex)		Lit Technologies
-E00000-EFFFFF     (base 16)		Lit Technologies
-				2011 Stampede Dr
-				Farmington  Utah  84025
-				US
-
-2C-26-5F   (hex)		XIAMEN VORLINK IOT TECHNOLOGY CO.,LTD.
-000000-0FFFFF     (base 16)		XIAMEN VORLINK IOT TECHNOLOGY CO.,LTD.
-				No.306 of Chengye Bldg., Xiamen Pioneering Park for Overseas Chinese Scholars
-				xiamen  fujian  361000
-				CN
-
-28-FD-80   (hex)		T-Radio AS
-E00000-EFFFFF     (base 16)		T-Radio AS
-				Stensarmen 3A
-				Tønsberg    3112
-				NO
-
-2C-26-5F   (hex)		Appostar Technology Co. Ltd
-600000-6FFFFF     (base 16)		Appostar Technology Co. Ltd
-				13F., No.213, Sec. 3, Beixin Rd., Xindian Dist., New Taipei City 231, Taiwan (R.O.C.)
-				Xindian Dist  New Taipei City  231
-				TW
-
-2C-26-5F   (hex)		shenzhen Clever Electronic Co., Ltd.
-300000-3FFFFF     (base 16)		shenzhen Clever Electronic Co., Ltd.
-				Building 8, Baiwang Creative Park(UTCP),Nanshan District,Shenzhen,China
-				Shenzhen  GuangDong  518055
-				CN
-
-28-FD-80   (hex)		NUUO, Inc.
-300000-3FFFFF     (base 16)		NUUO, Inc.
-				B1, No.207-1, Sec. 3, Beixin Rd.
-				New Taipei City  Xindian Dist.  231
-				TW
-
-0C-EF-AF   (hex)		PREMIUM SA
-500000-5FFFFF     (base 16)		PREMIUM SA
-				C/ Dolors Aleu 19  2º 2º
-				Hospitalet del Llobregat  Barcelona  08908
-				ES
-
-F8-02-78   (hex)		Technology Research, LLC
-C00000-CFFFFF     (base 16)		Technology Research, LLC
-				4525 140th Ave North
-				Clearwater  FL  33762
-				US
-
-0C-EF-AF   (hex)		BSX Athletics
-800000-8FFFFF     (base 16)		BSX Athletics
-				2500 E T C Jester Blvd.
-				Houston  TX  77008
-				US
-
-F8-02-78   (hex)		3Shape Holding A/S
-300000-3FFFFF     (base 16)		3Shape Holding A/S
-				Holmens Kanal 7,2
-				Copenhagen K.  Copenhagen  1060
-				DK
-
-F8-02-78   (hex)		Digatron Power Electronics GmbH
-000000-0FFFFF     (base 16)		Digatron Power Electronics GmbH
-				Tempelhofer Str. 12-14
-				Aachen  NRW  52068
-				DE
-
-F8-02-78   (hex)		Electric Objects
-500000-5FFFFF     (base 16)		Electric Objects
-				356 Bowery
-				New York  NY  10021
-				US
-
-A4-4F-29   (hex)		Neotech Systems Pvt. Ltd.
-E00000-EFFFFF     (base 16)		Neotech Systems Pvt. Ltd.
-				B-25, 2nd floor
-				New Delhi  Delhi  110049
-				IN
-
-A4-4F-29   (hex)		HALLIBURTON
-D00000-DFFFFF     (base 16)		HALLIBURTON
-				445 WOODLINE DR
-				SPRING  TX  77386
-				US
-
-3C-39-E7   (hex)		iiM AG
-A00000-AFFFFF     (base 16)		iiM AG
-				Neuer Friedberg 5
-				Suhl  Thuringia  98527
-				DE
-
-3C-39-E7   (hex)		Zone Controls AB
-900000-9FFFFF     (base 16)		Zone Controls AB
-				Verkstadsvägen 6
-				Västerhaninge  Stockholms län  137 37
-				SE
-
-3C-39-E7   (hex)		Sensor to Image GmbH
-700000-7FFFFF     (base 16)		Sensor to Image GmbH
-				Lechtorstrasse 20
-				Schongau  Bavaria  86956
-				DE
-
-0C-EF-AF   (hex)		LUMEL S.A.
-200000-2FFFFF     (base 16)		LUMEL S.A.
-				Ul.Slubicka 1
-				Zielona Gora    65-127
-				PL
-
-10-07-23   (hex)		Ion Professional Solutions
-800000-8FFFFF     (base 16)		Ion Professional Solutions
-				4514 Flower Bridge Ct
-				Humble  Texas  77396
-				US
-
-10-07-23   (hex)		First Chair Acoustics Co., Ltd.
-E00000-EFFFFF     (base 16)		First Chair Acoustics Co., Ltd.
-				No. 53, Lane 17, Yuhe Street
-				Taoyuan City, Taoyuan County    33057
-				TW
-
-10-07-23   (hex)		Fujian Quanzhou Dong Ang Electronics Co., Ltd.
-B00000-BFFFFF     (base 16)		Fujian Quanzhou Dong Ang Electronics Co., Ltd.
-				5th floor of Hengtaixing mansion, Yingbin Road
-				Quanzhou  Fujian  362000
-				CN
-
-10-07-23   (hex)		nanoTech Co., Ltd.
-700000-7FFFFF     (base 16)		nanoTech Co., Ltd.
-				4-2-17 Chuorinka
-				Yamato  Kanagawa  242-0007
-				JP
-
-D0-22-12   (hex)		UAB &quot;SALDA&quot;
-900000-9FFFFF     (base 16)		UAB &quot;SALDA&quot;
-				Ragaines 100
-				Šiauliai  Europe  LT-78109
-				LT
-
-D0-22-12   (hex)		Schleifenbauer Holding BV
-B00000-BFFFFF     (base 16)		Schleifenbauer Holding BV
-				Rietwaard 15
-				Hertogenbosch    5236WC 
-				NL
-
-D0-22-12   (hex)		Shanghai Routech Co., Ltd
-500000-5FFFFF     (base 16)		Shanghai Routech Co., Ltd
-				R.709-(2), B Zone, No.668 Eastern Beijing Rd. Shanghai P.R.C
-				Shanghai  Shanghai  200001
-				CN
-
-D0-22-12   (hex)		Cliptech Industria e Comercio Ltda
-700000-7FFFFF     (base 16)		Cliptech Industria e Comercio Ltda
-				ROD VICE PREF HERMENEGILDO TONOLI, 2285
-				ITUPEVA  SAO PAULO  13295000
-				BR
-
-D0-22-12   (hex)		u::Lux GmbH
-E00000-EFFFFF     (base 16)		u::Lux GmbH
-				Rechtes Salzachufer 42
-				Bergheim  Salzburg  5101
-				AT
-
-74-E1-4A   (hex)		Knog Pty Ltd
-D00000-DFFFFF     (base 16)		Knog Pty Ltd
-				453 Church St
-				Richmond  VIC  3128
-				AU
-
-74-E1-4A   (hex)		Loctek Visual Technology Corp.
-B00000-BFFFFF     (base 16)		Loctek Visual Technology Corp.
-				Floor 20 Aux Building No.757 Rili Middle Road Yinzhou District Ningbo China
-				Ningbo  zhejiang  315199
-				CN
-
-E8-18-63   (hex)		Acopian Technical Company
-E00000-EFFFFF     (base 16)		Acopian Technical Company
-				131 Loomis Street
-				Easton  PA  18045
-				US
-
-B8-D8-12   (hex)		Docobo Limited
-B00000-BFFFFF     (base 16)		Docobo Limited
-				The Old Granary, 21 High Street
-				Leatherhead  Surrey  KT23 4AA
-				GB
-
-E4-95-6E   (hex)		iConservo Inc
-B00000-BFFFFF     (base 16)		iConservo Inc
-				35 Tesla
-				Irvine  CA  92618
-				
-
-E4-95-6E   (hex)		Red Point Positioning, Corp.
-A00000-AFFFFF     (base 16)		Red Point Positioning, Corp.
-				20 Webster Street, Suite 411
-				Brookline  MASSACHUSETTS  02446
-				US
-
-74-E1-4A   (hex)		UTU Oy
-500000-5FFFFF     (base 16)		UTU Oy
-				Ahjontie 1
-				Ulvila  Finland  28400
-				FI
-
-E4-95-6E   (hex)		ELAN SYSTEMS
-500000-5FFFFF     (base 16)		ELAN SYSTEMS
-				10 IHASZ STR
-				BUDAPEST    1105
-				HU
-
-E4-95-6E   (hex)		Shenzhen Arronna Telecom Co.,Ltd
-C00000-CFFFFF     (base 16)		Shenzhen Arronna Telecom Co.,Ltd
-				4F, Block 1, No 17-2, Pingxi South Rd
-				Shenzhen  Guangdong  518117
-				CN
-
-B0-1F-81   (hex)		CIDE Interactive
-900000-9FFFFF     (base 16)		CIDE Interactive
-				Viladecans Business Pk, Edificio Brasil
-				Viladecans  Barcelona  08840
-				ES
-
-58-FC-DB   (hex)		Timex Group USA Inc
-600000-6FFFFF     (base 16)		Timex Group USA Inc
-				555 Christian Rd
-				Middlebury  CT  06762
-				US
-
-BC-66-41   (hex)		ARGUS-SPECTRUM
-400000-4FFFFF     (base 16)		ARGUS-SPECTRUM
-				Serdobolskaya str.,65
-				St-Petersburg    197342
-				RU
-
-B0-1F-81   (hex)		Steffens Systems GmbH
-A00000-AFFFFF     (base 16)		Steffens Systems GmbH
-				Mathias-Brüggenstr. 83
-				Cologne  NRW  50829
-				DE
-
-F4-0E-11   (hex)		Zeepro Inc.
-800000-8FFFFF     (base 16)		Zeepro Inc.
-				151 10th Street
-				San Francisco  California  94103
-				US
-
-F4-0E-11   (hex)		Alpha Design Technologies Pvt Ltd
-600000-6FFFFF     (base 16)		Alpha Design Technologies Pvt Ltd
-				#9, Service Road, HAL II Stage
-				Bangalore  Karnataka  560008
-				IN
-
-14-1F-BA   (hex)		AJIS(DALIAN)co.,LTD
-D00000-DFFFFF     (base 16)		AJIS(DALIAN)co.,LTD
-				Room 202B
-				Dalian  Liaoning  116023
-				CN
-
-F4-0E-11   (hex)		BRADAR INDUSTRIA SA
-B00000-BFFFFF     (base 16)		BRADAR INDUSTRIA SA
-				AVENIDA SHISHIMA HIFUMI,2911
-				SÃO JOSE DOS CAMPOS  SÃO PAULO  12244-000
-				BR
-
-BC-34-00   (hex)		MATICA TECHNOLOGIES AG
-800000-8FFFFF     (base 16)		MATICA TECHNOLOGIES AG
-				52 TECKSTRASSE
-				ESSLINGEN AM NECKAR  BADEN WUERTTENBERG  73734
-				DE
-
-BC-34-00   (hex)		Shenzhen PHilorise Technical Limited
-900000-9FFFFF     (base 16)		Shenzhen PHilorise Technical Limited
-				Floor 4, Building 2, TingWeiGongYeQu,
-				ShenZhen  GuangDong  518010
-				CN
-
-14-1F-BA   (hex)		Thales Communications & Security SAS
-600000-6FFFFF     (base 16)		Thales Communications & Security SAS
-				BP 57
-				Bretigny-sur-Orge CEDEX  France  F 91229
-				FR
-
-BC-34-00   (hex)		Hangzhou Linker Digital Technology Co., Ltd
-D00000-DFFFFF     (base 16)		Hangzhou Linker Digital Technology Co., Ltd
-				4-5F, C Building, Jinrun Tech-Garden, 399# Qiuyi Road, Binjiang District
-				Hangzhou  ZheJiang  310052
-				CN
-
-BC-34-00   (hex)		LLD Technology Ltd.
-E00000-EFFFFF     (base 16)		LLD Technology Ltd.
-				4F., No. 220, Sec. 1, Zhongshan Rd.,
-				New Taipei City,  Taiwan  234
-				TW
-
-BC-34-00   (hex)		FARO TECHNOLOGIES, INC.
-B00000-BFFFFF     (base 16)		FARO TECHNOLOGIES, INC.
-				125 Technology Park
-				Lake Mary  FL  32746
-				US
-
-7C-70-BC   (hex)		mk-messtechnik GmbH
-D00000-DFFFFF     (base 16)		mk-messtechnik GmbH
-				Zeppelinstr. 1
-				Notzingen  D  73274
-				DE
-
-7C-70-BC   (hex)		Bidgely
-600000-6FFFFF     (base 16)		Bidgely
-				298  S Sunnyvale Ave
-				Sunnyvale  CA  94086
-				US
-
-14-1F-BA   (hex)		Inttelix Brasil Tecnologia e Sistemas Ltda
-500000-5FFFFF     (base 16)		Inttelix Brasil Tecnologia e Sistemas Ltda
-				 Rua Desembargador Jorge Fontana, 112B, Belvedere
-				Belo Horizonte  Minas Gerais  30320-670
-				BR
-
-14-1F-BA   (hex)		Shenzhen Mining Technology Co.,Ltd.
-000000-0FFFFF     (base 16)		Shenzhen Mining Technology Co.,Ltd.
-				2017#Baoan Internet Industry Base,Langman Gangwan
-				Shenzhen  Guangdong  518000
-				CN
-
-BC-34-00   (hex)		LifeSmart
-200000-2FFFFF     (base 16)		LifeSmart
-				1911, Huarong Times Plaza
-				Hangzhou  Zhejiang  310052
-				CN
-
-D0-76-50   (hex)		Electro-Motive Diesel
-C00000-CFFFFF     (base 16)		Electro-Motive Diesel
-				9301 W. 55th Street
-				La Grange  IL  60525
-				US
-
-BC-34-00   (hex)		NDSL, Inc.
-500000-5FFFFF     (base 16)		NDSL, Inc.
-				4112 Blue Ridge Road
-				Raleigh  North Carolina  27612
-				US
-
-A4-3B-FA   (hex)		BOI Solutions
-500000-5FFFFF     (base 16)		BOI Solutions
-				955 Mound Rd
-				Miamisburg  Ohio  45342
-				US
-
-D0-76-50   (hex)		Happo Solutions Oy
-200000-2FFFFF     (base 16)		Happo Solutions Oy
-				Graanintie 5
-				MIKKELI    50190
-				FI
-
-74-19-F8   (hex)		Volacomm Co., Ltd
-E00000-EFFFFF     (base 16)		Volacomm Co., Ltd
-				15F-6., No.7, Sec.3, New Taipei Blvd., Xinzhuang Dist., New Taipei City 242., Taiwan (R.O.C)
-				Xinzhuang Dist.  New Taipei City  242
-				TW
-
-74-19-F8   (hex)		Baudisch Electronic GmbH
-600000-6FFFFF     (base 16)		Baudisch Electronic GmbH
-				Im Gewerbegebiet 7-9
-				Wäschenbeuren  Baden-Württemberg  73116
-				DE
-
-D0-76-50   (hex)		TAPKO Technologies GmbH
-300000-3FFFFF     (base 16)		TAPKO Technologies GmbH
-				Im Gewerbepark A15
-				Regensburg  Bayern  93059
-				DE
-
-74-19-F8   (hex)		Marmitek
-000000-0FFFFF     (base 16)		Marmitek
-				Postbus 4257
-				Eindhoven  NB  5604 EG
-				NL
-
-40-11-75   (hex)		ShenZhen LanShuo Communication Equipment CO.,LTD.
-600000-6FFFFF     (base 16)		ShenZhen LanShuo Communication Equipment CO.,LTD.
-				NO.12,YUMIN ROAD,SHAJING TOWN,BAO’AN DISTRICT
-				SHENZHEN    518104
-				CN
-
-10-DC-B6   (hex)		BBPOS International Limited
-C00000-CFFFFF     (base 16)		BBPOS International Limited
-				Suite 1602, Tower 2, Nina Tower, 8 Yeung Uk Road, Tsuen Wan, NT
-				Hong Kong  China  00000
-				HK
-
-10-DC-B6   (hex)		Eyeball Fintech Company
-B00000-BFFFFF     (base 16)		Eyeball Fintech Company
-				Rm. 545, 5F., No. 19-11, Sanchong Rd., Nangang Dist.
-				Taipei City  Taiwan  11501
-				TW
-
-10-DC-B6   (hex)		HANACNS 
-300000-3FFFFF     (base 16)		HANACNS 
-				42-11, Taejanggongdan-gil, Wonju-si
-				Gangwon-do    26311
-				KR
-
-10-DC-B6   (hex)		LeoLabs
-D00000-DFFFFF     (base 16)		LeoLabs
-				Jankowicka 51
-				Rybnik    44-218
-				PL
-
-10-DC-B6   (hex)		Fuzhou Rockchip Electronics Co.,Ltd
-900000-9FFFFF     (base 16)		Fuzhou Rockchip Electronics Co.,Ltd
-				No. 18 Building, A District, No.89,software Boulevard Fuzhou,Fujian,PRC
-				Fuzhou  FuJian  350003
-				CN
-
-10-DC-B6   (hex)		ABB Switzerland Ltd.
-100000-1FFFFF     (base 16)		ABB Switzerland Ltd.
-				Fabrikstrasse 3
-				Lenzburg    5600
-				CH
-
-10-DC-B6   (hex)		Milesight Taiwan
-500000-5FFFFF     (base 16)		Milesight Taiwan
-				10F., No. 87, Sec. 4, Chongxin Rd
-				Sanchong Dist  New Taipei City  24161
-				TW
-
-54-A4-93   (hex)		BJ COTYTECH TECHNOLOGY CO.,LTD
-C00000-CFFFFF     (base 16)		BJ COTYTECH TECHNOLOGY CO.,LTD
-				Rm2302,Block B,Haojing Building,Zhichun Road,Haidian District
-				BeiJing  BeiJing  100086
-				CN
-
-54-A4-93   (hex)		Hannto Technology Co., Ltd
-600000-6FFFFF     (base 16)		Hannto Technology Co., Ltd
-				Rm 704,No.1,Lane 88,Shengrong Road, Free Trade Pilot Area,
-				Shanghai  Shanghai  200120
-				CN
-
-54-A4-93   (hex)		genua GmbH
-200000-2FFFFF     (base 16)		genua GmbH
-				Domagkstr. 7
-				Kirchheim    85551
-				DE
-
-04-D1-6E   (hex)		Metra Electronics
-A00000-AFFFFF     (base 16)		Metra Electronics
-				460 Walker Street
-				Holly Hill  FL  32117
-				US
-
-04-D1-6E   (hex)		ETL Elektrotechnik Lauter GmbH
-600000-6FFFFF     (base 16)		ETL Elektrotechnik Lauter GmbH
-				Konrad-Zuse-Str. 2
-				Mauerstetten  Bavaria  87665
-				DE
-
-04-D1-6E   (hex)		 Beijing Huaxia Qixin Technology Co., Ltd.
-300000-3FFFFF     (base 16)		 Beijing Huaxia Qixin Technology Co., Ltd.
-				 7th Floor, Building 1, No. 18, Yangfangdian Road, Haidian District, Beijing 705 
-				Beijing  Beijing  100038
-				CN
-
-04-D1-6E   (hex)		National Radio & Telecommunication Corporation - NRTC
-B00000-BFFFFF     (base 16)		National Radio & Telecommunication Corporation - NRTC
-				House 420, Street 13, Chaklala Scheme 3
-				Rawalpindi  Islamabad  46000
-				PK
-
-04-D1-6E   (hex)		INTRIPLE, a.s.
-000000-0FFFFF     (base 16)		INTRIPLE, a.s.
-				K Zelenci 2957/5
-				Praha 9 - Horni Pocernice    193 00
-				CZ
-
-44-03-77   (hex)		SHENZHEN UT-KING TECHNOLOGY CO.,LTD
-900000-9FFFFF     (base 16)		SHENZHEN UT-KING TECHNOLOGY CO.,LTD
-				504, Building B ,Guangming Industrial Park, Zhonghua  Road, Minzhi, Longhua District
-				SHENZHEN  GUANGDONG  518131
-				CN
-
-44-03-77   (hex)		Gemmy Electronics (Shenzhen) Co, Ltd
-800000-8FFFFF     (base 16)		Gemmy Electronics (Shenzhen) Co, Ltd
-				Datianyang Ind. Estate, Dongfang Road, Dangfang Road, Songgang Town, Bao'an District
-				Shenzhen  Guangdong  518105
-				CN
-
-44-03-77   (hex)		BIG Climatic Manufacture, Co. LTD, Zhongshan Branch
-C00000-CFFFFF     (base 16)		BIG Climatic Manufacture, Co. LTD, Zhongshan Branch
-				Nantou Dadao, 20
-				Zhongshan  Guangdong  528427
-				CN
-
-50-62-55   (hex)		Shenzhen Sinway South Technology Co., Ltd
-600000-6FFFFF     (base 16)		Shenzhen Sinway South Technology Co., Ltd
-				No.7, Guantian Road, Guanlan Street, Longhua District
-				Shenzhen  Guangdong  518110
-				CN
-
-50-62-55   (hex)		CHENGDU COVE TECHNOLOGY CO.,LTD
-B00000-BFFFFF     (base 16)		CHENGDU COVE TECHNOLOGY CO.,LTD
-				No.1-3, Floor 4, Building 2,No.1366 Middle Section of Tianfu Ave
-				Chengdu   SICHUAN  610000
-				CN
-
-50-62-55   (hex)		XSLAB Inc.
-400000-4FFFFF     (base 16)		XSLAB Inc.
-				#1103, 11, DIGITAL-RO 33-GIL, GURO-GU
-				SEOUL    08380
-				KR
-
-50-62-55   (hex)		ShenZhen ChuangMo Electronics Technology Co., Ltd
-200000-2FFFFF     (base 16)		ShenZhen ChuangMo Electronics Technology Co., Ltd
-				West Floor 4,building A,Bafangyuan high and new industrial zone,No.108 Zhoushi Rd.,Shiyan sub-district,Baoan, 
-				Shenzhen  Guangdong  518108
-				CN
-
-64-31-39   (hex)		SHENZHEN EMEET INTELLIGENT TECHNOLOGY CO., LTD.
-000000-0FFFFF     (base 16)		SHENZHEN EMEET INTELLIGENT TECHNOLOGY CO., LTD.
-				Unit 2C,Building A6,Guangming Science Park,Guangming Road 3009
-				Shenzhen  Guangdong  518000
-				CN
-
-64-31-39   (hex)		ZHEJIANG MOORGEN INTELLIGENT TECHNOLOGY CO.,LTD
-D00000-DFFFFF     (base 16)		ZHEJIANG MOORGEN INTELLIGENT TECHNOLOGY CO.,LTD
-				5 / F, Building A, qinghua pioneer park?No. 318 Tianhu Road, Camel Street, Zhenhai District
-				Ningbo    315202
-				CN
-
-64-31-39   (hex)		ATG UV Technology
-E00000-EFFFFF     (base 16)		ATG UV Technology
-				Genesis House
-				Wigan    WN5 8AA
-				GB
-
-C4-95-4D   (hex)		Marble Automation
-500000-5FFFFF     (base 16)		Marble Automation
-				Keteldiep 6
-				Urk    8321 MH
-				NL
-
-00-69-67   (hex)		Shenzhen Xiao Bi En Culture Education Technology Co.,Ltd.
-500000-5FFFFF     (base 16)		Shenzhen Xiao Bi En Culture Education Technology Co.,Ltd.
-				4GH Unit,Block D,Central Avenue,Intersection of Xixiang Avenue and Baoyuan Road,Labor Community,Xixiang Street,Baoan District
-				Shenzhen  China  518102
-				CN
-
-00-69-67   (hex)		Annapurna labs
-000000-0FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-00-69-67   (hex)		Suzhou Radiant Lighting Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Suzhou Radiant Lighting Technology Co.,Ltd
-				Jiatai Road West, Shuanglong Industrial Park,Fenghuang Town
-				Zhangjiagang  Jiangsu  215600
-				CN
-
-A0-22-4E   (hex)		Zhuhai Cheer Technology Co., LTD.
-500000-5FFFFF     (base 16)		Zhuhai Cheer Technology Co., LTD.
-				No.8 Hongwan Road, Hongwan Industry Zone, Xiangzhou District
-				Zhuhai  Guangdong  519060
-				CN
-
-A0-22-4E   (hex)		Digifocus Technology Inc.
-D00000-DFFFFF     (base 16)		Digifocus Technology Inc.
-				6F, No.89, Xinhu 1st Rd., Neihu Dist.
-				Taipei City     11494
-				TW
-
-A0-22-4E   (hex)		Delta Tau Data Systems, Inc.
-900000-9FFFFF     (base 16)		Delta Tau Data Systems, Inc.
-				21314 Lassen St.
-				Chatsworth  CA  91311
-				US
-
-A0-22-4E   (hex)		Closed Joint-Stock Company NORSI-TRANS
-200000-2FFFFF     (base 16)		Closed Joint-Stock Company NORSI-TRANS
-				B.Novodmitrovskaya Street, house 12, building 15
-				Moscow    127015
-				RU
-
-A0-22-4E   (hex)		All Inspire Health Inc.
-B00000-BFFFFF     (base 16)		All Inspire Health Inc.
-				19 Morris Avenue, Building 128, Cumberland Gate
-				Brooklyn  NY  11205
-				US
-
-20-0A-0D   (hex)		Welzek (Beijing) Technologies  Co, Ltd
-900000-9FFFFF     (base 16)		Welzek (Beijing) Technologies  Co, Ltd
-				No 201,Building 12, Chaolai Science Park, No.36 Chuangyuan RoadLaiguangying, Chaoyang Disctrict
-				Beijing  Beijing  100012
-				CN
-
-20-0A-0D   (hex)		Virtium
-400000-4FFFFF     (base 16)		Virtium
-				30052 Tomas
-				Racho Santa MArgarita  CA  92688
-				US
-
-20-0A-0D   (hex)		halstrup-walcher GmbH
-000000-0FFFFF     (base 16)		halstrup-walcher GmbH
-				Stegener Straße 10
-				Kirchzarten    79199
-				DE
-
-40-2C-76   (hex)		gridX GmbH
-C00000-CFFFFF     (base 16)		gridX GmbH
-				Oppenhoffallee 143
-				Aachen    52066
-				DE
-
-50-DE-19   (hex)		OCEANCCTV LTD
-600000-6FFFFF     (base 16)		OCEANCCTV LTD
-				4F., No. 1, Ln. 297, Xinyi Rd.,Banqiao Dist.,
-				New Taipei City    220
-				TW
-
-40-2C-76   (hex)		LS Energy Solutions
-E00000-EFFFFF     (base 16)		LS Energy Solutions
-				9201 Forsyth Park Drive
-				Charlotte  NC  28273
-				US
-
-50-DE-19   (hex)		IVATIV, INC
-800000-8FFFFF     (base 16)		IVATIV, INC
-				6141 RUNNING SPRINGS RD
-				SAN JOSE  CA  95135
-				US
-
-3C-FA-D3   (hex)		Nox Medical
-600000-6FFFFF     (base 16)		Nox Medical
-				Katrinartun 2
-				Reykjavik    105
-				IS
-
-B0-B3-53   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
-600000-6FFFFF     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
-				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
-				Hangzhou    310052
-				CN
-
-B0-B3-53   (hex)		Sprocomm Technologies CO.,LTD.
-100000-1FFFFF     (base 16)		Sprocomm Technologies CO.,LTD.
-				5D F1.6 Block,Tianfa Building,Tianan Chegongmiao Industrial park,Futian Dist
-				shenzhen  guangdong  518000
-				CN
-
-3C-FA-D3   (hex)		Mirico
-E00000-EFFFFF     (base 16)		Mirico
-				30 DongSan Rd 9th floor Mirico
-				Ansan  Gyunggi  15434
-				KR
-
-B0-B3-53   (hex)		Innotas Elektronik GmbH
-400000-4FFFFF     (base 16)		Innotas Elektronik GmbH
-				Rathenaustr. 18a
-				Zittau    D-02763
-				DE
-
-B0-B3-53   (hex)		VOXISCOM
-800000-8FFFFF     (base 16)		VOXISCOM
-				Rue Jules Ferry
-				PORNIC    44210
-				FR
-
-90-E2-FC   (hex)		Power Engineering & Manufacturing, Inc.
-A00000-AFFFFF     (base 16)		Power Engineering & Manufacturing, Inc.
-				1463 94th Lane NE
-				Blaine  MN  55449
-				US
-
-90-E2-FC   (hex)		Sindoh Techno Co., Ltd.
-600000-6FFFFF     (base 16)		Sindoh Techno Co., Ltd.
-				Sindoh Bldg., 6, Hyoryeong-ro 61-gil, Seocho-gu
-				Seoul    06643
-				KR
-
-90-E2-FC   (hex)		Shenzhen Hisource Technology Development CO.,Ltd.
-300000-3FFFFF     (base 16)		Shenzhen Hisource Technology Development CO.,Ltd.
-				Dalang
-				Shenzhen  Guangdong  518109
-				CN
-
-90-E2-FC   (hex)		TOTALONE TECHNOLOGY CO., LTD.
-500000-5FFFFF     (base 16)		TOTALONE TECHNOLOGY CO., LTD.
-				3F.-1, NO.18, LN. 48, XingShan RD.,
-				Taipei  Neihu dist  11469
-				TW
-
-90-E2-FC   (hex)		Yite technology
-100000-1FFFFF     (base 16)		Yite technology
-				No. 56, Xiaobei Rd., North Dist
-				tainan    70448 
-				TW
-
-90-E2-FC   (hex)		DevCom spol. s r.o.
-E00000-EFFFFF     (base 16)		DevCom spol. s r.o.
-				Božanovská 884
-				Praha  Select a State  19300
-				CZ
-
-14-AE-85   (hex)		IO Industries Inc.
-C00000-CFFFFF     (base 16)		IO Industries Inc.
-				15940 Robin's Hill Rd
-				London  Ontario  N5V 0A4
-				CA
-
-90-E2-FC   (hex)		Fair Winds Digital srl
-700000-7FFFFF     (base 16)		Fair Winds Digital srl
-				Via Italo Svevo 85
-				Rome  Italy  00137
-				IT
-
-14-AE-85   (hex)		AZ-TECHNOLOGY SDN BHD
-500000-5FFFFF     (base 16)		AZ-TECHNOLOGY SDN BHD
-				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
-				PETALING JAYA  SELANGOR  47301
-				MY
-
-14-AE-85   (hex)		CENTERVUE SPA
-400000-4FFFFF     (base 16)		CENTERVUE SPA
-				VIA SAN MARCO 9/H
-				PADOVA  PADOVA  35129
-				IT
-
-14-AE-85   (hex)		TMG TE GmbH
-600000-6FFFFF     (base 16)		TMG TE GmbH
-				Zur Gießerei 10
-				Karlsruhe    776227
-				DE
-
-14-AE-85   (hex)		Sercomm Corporation.
-E00000-EFFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-14-AE-85   (hex)		NTC SOFT
-B00000-BFFFFF     (base 16)		NTC SOFT
-				B-805, Gwangmyeong SK Techno park, 60, Haan-ro,
-				Gwangmyeong-si  Gyeonggi-do  14322
-				KR
-
-94-CC-04   (hex)		Hangzhou Yongkong Technology Co., Ltd.
-000000-0FFFFF     (base 16)		Hangzhou Yongkong Technology Co., Ltd.
-				Room 503, Building 12, Lefu Zhihui Garden, 28 Xiangyuan Road, Gongshu Distric
-				Hangzhou  Zhejiang  310000
-				CN
-
-64-62-66   (hex)		Jiangsu Aisida Electronic Co.,Ltd
-C00000-CFFFFF     (base 16)		Jiangsu Aisida Electronic Co.,Ltd
-				Aisida Industrial Park,Lanling Road,Danyang Development Zone
-				DanYang  JiangSu  212300
-				CN
-
-94-CC-04   (hex)		Gowing Business And Contracting Wenzhou Co., LTD
-700000-7FFFFF     (base 16)		Gowing Business And Contracting Wenzhou Co., LTD
-				Room 101, No.4 Liming Industrial District, Lucheng, Wenzhou, China
-				Wenzhou    325000
-				CN
-
-94-CC-04   (hex)		CircuitWerkes, Inc.
-800000-8FFFFF     (base 16)		CircuitWerkes, Inc.
-				2805 NW 6th St
-				Gainesville  FL  32609
-				US
-
-14-AE-85   (hex)		IFLYTEK CO.,LTD.
-300000-3FFFFF     (base 16)		IFLYTEK CO.,LTD.
-				National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
-				Hefei  An hui  230088
-				CN
-
-94-05-BB   (hex)		Shenzhen Baolijie Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Shenzhen Baolijie Technology Co., Ltd.
-				D2,No.47,Shasan Road,Sha jing Street,Baoan District
-				Shenzhen  Kowloon  518104
-				CN
-
-94-CC-04   (hex)		ProConnections, Inc.
-400000-4FFFFF     (base 16)		ProConnections, Inc.
-				30 Massachusetts, Ave, Suite 301
-				North Andover  MA  01845
-				US
-
-94-05-BB   (hex)		Dongguan Kingtron Electronics Tech Co., Ltd
-100000-1FFFFF     (base 16)		Dongguan Kingtron Electronics Tech Co., Ltd
-				No.3 Fumin North Rd,Shu'an Industrial Park, Humen Town
-				Dongguan  Guangdong China  523929
-				CN
-
-94-05-BB   (hex)		Sunthink S&T Development Co.,Ltd
-D00000-DFFFFF     (base 16)		Sunthink S&T Development Co.,Ltd
-				A3-f1, xinghezhong Technology Green Valley, No.14, luolei Industrial Avenue, Shiyan street, Bao'an District
-				Shenzhen    518100
-				CN
-
-DC-44-27   (hex)		Tesla,Inc.
-100000-1FFFFF     (base 16)		Tesla,Inc.
-				3500 Deer Creek Road
-				Palo Alto  CA  94304
-				US
-
-F4-90-CB   (hex)		ICE Gateway GmbH
-200000-2FFFFF     (base 16)		ICE Gateway GmbH
-				Am Studio 2
-				Berlin  Berlin  12489
-				DE
-
-C0-9B-F4   (hex)		SHENZHEN WINS ELECTRONIC TECHNOLOGY CO., LTD
-800000-8FFFFF     (base 16)		SHENZHEN WINS ELECTRONIC TECHNOLOGY CO., LTD
-				Baoan Xixiang Xinbaoji Industry Park,Building A1-2
-				Shenzhen  Guangdong  518026
-				CN
-
-F4-90-CB   (hex)		DELEM BV
-100000-1FFFFF     (base 16)		DELEM BV
-				LUCHTHAVEN WEG 42
-				5657 EB EINDHOVEN    
-				NL
-
-C0-9B-F4   (hex)		Hitachi High-Tech Materials Corporation
-200000-2FFFFF     (base 16)		Hitachi High-Tech Materials Corporation
-				Toranomon Hills Business Tower, 1-17-1 Toranomon, Minato-ku
-				Tokyo    105-6413
-				JP
-
-E8-B4-70   (hex)		UNICACCES GROUPE
-E00000-EFFFFF     (base 16)		UNICACCES GROUPE
-				24 Chemin des Vieilles Vignes
-				La tour-d'aigues  Vaucluse  84240
-				FR
-
-E8-B4-70   (hex)		Digifocus Technology Inc.
-B00000-BFFFFF     (base 16)		Digifocus Technology Inc.
-				6F, No.89, Xinhu 1st Rd., Neihu Dist.
-				Taipei City     11494
-				TW
-
-E8-B4-70   (hex)		Autocom Diagnostic Partner AB
-100000-1FFFFF     (base 16)		Autocom Diagnostic Partner AB
-				Grafitvägen 23B
-				TROLLHÄTTAN    46138
-				SE
-
-94-FB-A7   (hex)		Silver-I Co.,LTD.
-800000-8FFFFF     (base 16)		Silver-I Co.,LTD.
-				2-14-4 Shinyokohama,kohoku-ku
-				Yokohama  Kanagawa  222-0033
-				JP
-
-38-F7-CD   (hex)		NORDI TELEKOMMUNIKATSIOONI OÜ
-400000-4FFFFF     (base 16)		NORDI TELEKOMMUNIKATSIOONI OÜ
-				Valukoja 8
-				Tallinn city  Estonian Republic  11415
-				EE
-
-38-F7-CD   (hex)		Shanghai qinzhuo Electronic Co., Ltd.
-500000-5FFFFF     (base 16)		Shanghai qinzhuo Electronic Co., Ltd.
-				No. W, floor 1, building 2, No. 258, Minfeng Road, Pudong New Area
-				Shanghai  Shanghai  201209
-				CN
-
-38-F7-CD   (hex)		RFbeam Microwave GmbH
-900000-9FFFFF     (base 16)		RFbeam Microwave GmbH
-				Schuppisstrasse 7
-				St. Gallen    9016
-				CH
-
-38-F7-CD   (hex)		Shenzhen MADIGI Electronic Technology Co., Ltd
-C00000-CFFFFF     (base 16)		Shenzhen MADIGI Electronic Technology Co., Ltd
-				Room 111,1A Floor,Kanghesheng Blgg,No.1.Chuangsheng Rd.Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-70-69-79   (hex)		Faurecia Clarion Electronics (Dongguan) Co., Ltd
-900000-9FFFFF     (base 16)		Faurecia Clarion Electronics (Dongguan) Co., Ltd
-				South of Dongkeng Avenue, Dongkeng Town, Dongguan City, Guangdong
-				DONGGUAN  GUANGDONG  523455
-				CN
-
-38-F7-CD   (hex)		BlastWave Inc.
-800000-8FFFFF     (base 16)		BlastWave Inc.
-				1987 Leghorn Street, Suite 100
-				Moutain View  CA  94043
-				US
-
-70-69-79   (hex)		Intelitech SIA
-700000-7FFFFF     (base 16)		Intelitech SIA
-				2-22 Kruzes str.
-				Riga  Other  LV-1046
-				LV
-
-70-69-79   (hex)		Beijing Security Union Information Technology Co.,Ltd
-600000-6FFFFF     (base 16)		Beijing Security Union Information Technology Co.,Ltd
-				Beijing Security Union Information Technology Co.,Ltd 
-				Beijing  Beijing  100085
-				CN
-
-CC-C2-61   (hex)		Dspread Technology (Beijing) Inc.
-D00000-DFFFFF     (base 16)		Dspread Technology (Beijing) Inc.
-				Jingxin Building, 2045 Suite , Chaoyang District
-				Beijing    100027
-				CN
-
-CC-C2-61   (hex)		Viper Design, LLC
-500000-5FFFFF     (base 16)		Viper Design, LLC
-				125 Glancy St.
-				Goodlettsville  TN  37072
-				US
-
-CC-C2-61   (hex)		Ebiologic Technology Co., Ltd.
-000000-0FFFFF     (base 16)		Ebiologic Technology Co., Ltd.
-				9F., No.33, Ln. 3, Sec. 1, Zhongzheng E. Rd., Tamsui Dist., New Taipei City 251, Taiwan (R.O.C.)
-				New Taipei City    251
-				TW
-
-CC-C2-61   (hex)		BYTERG LLC
-900000-9FFFFF     (base 16)		BYTERG LLC
-				1st Nagatinsky proezd 10 build.1
-				Moscow  Moscow  115230
-				RU
-
-F0-D7-AF   (hex)		ADAM Audio GmbH
-400000-4FFFFF     (base 16)		ADAM Audio GmbH
-				Rudower Chaussee 50
-				Berlin    12489
-				DE
-
-B0-B3-53   (hex)		AD HOC DEVELOPMENTS S.L
-300000-3FFFFF     (base 16)		AD HOC DEVELOPMENTS S.L
-				C/ Crisol 3, despacho 17
-				Rivas-Vaciamadrid  Madrid  28522
-				ES
-
-F0-D7-AF   (hex)		Anord Mardix (USA) Inc.
-600000-6FFFFF     (base 16)		Anord Mardix (USA) Inc.
-				3930 Technology Court
-				Sandston  VA  23150
-				US
-
-F0-D7-AF   (hex)		SHEN ZHEN MICHIP TECHNOLOGIES CO.,LTD.
-800000-8FFFFF     (base 16)		SHEN ZHEN MICHIP TECHNOLOGIES CO.,LTD.
-				Fuxingda Indestrial park.Floor4?Building4
-				SHEN ZHEN  GUANG DONG  518126
-				CN
-
-94-FB-A7   (hex)		Rosenberger Technologies Co.,Ltd.
-D00000-DFFFFF     (base 16)		Rosenberger Technologies Co.,Ltd.
-				NO.6, ShenAn Rd, Dianshanhu Town
-				Kunshan City  Jiangsu Province  215345
-				CN
-
-30-49-50   (hex)		Guangzhou Lian-med Technology Co.,Ltd.
-000000-0FFFFF     (base 16)		Guangzhou Lian-med Technology Co.,Ltd.
-				Room 501, Building G1,No. 31 Kefeng Road, Huangpu district
-				Guangzhou    510670
-				CN
-
-30-49-50   (hex)		IoTmaxx GmbH
-E00000-EFFFFF     (base 16)		IoTmaxx GmbH
-				Bultstrasse 5a
-				Hannover    30159
-				DE
-
-D0-14-11   (hex)		Ahnnet
-600000-6FFFFF     (base 16)		Ahnnet
-				B-313, Samhwan HIPEX, 230, Pangyoyeok-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13493
-				KR
-
-1C-88-79   (hex)		ANDRA Sp. z o. o.
-100000-1FFFFF     (base 16)		ANDRA Sp. z o. o.
-				Pryzmaty 6/8
-				Warszawa    02-226
-				PL
-
-D0-14-11   (hex)		Guangdong Shiqi Manufacture Co., Ltd.
-D00000-DFFFFF     (base 16)		Guangdong Shiqi Manufacture Co., Ltd.
-				No. D10~11, Lunjiao intensive industrial Zone,  Licun  Village committee, Lunjiao street office, Shunde District
-				Foshan  Guangdong  528300
-				CN
-
-5C-85-7E   (hex)		Express LUCK Industrial Ltd.
-900000-9FFFFF     (base 16)		Express LUCK Industrial Ltd.
-				No. 88, Baotongnan Road, Xikeng, Yuanshan Street, Longgang District
-				Shenzhen  Guangdong  518100
-				CN
-
-5C-85-7E   (hex)		Guoyi Liangzi (Hefei) Technology Co., Ltd(CIQTEK)
-E00000-EFFFFF     (base 16)		Guoyi Liangzi (Hefei) Technology Co., Ltd(CIQTEK)
-				1-4th Floor, Building No.E2, Chuangxin Industrial Park, No.2800, Chuangxin Road Gaoxin District
-				Hefei   Anhui  Hefei 
-				CN
-
-F4-69-D5   (hex)		Nantong ZYDZ Electronic.,Co.Ltd
-D00000-DFFFFF     (base 16)		Nantong ZYDZ Electronic.,Co.Ltd
-				# F, High-Tech business Incubator, No.86 East Waihuan Road,
-				Nantong  Jiangsu  226300
-				CN
-
-4C-93-A6   (hex)		Hanwang Technology Co.,Ltd
-A00000-AFFFFF     (base 16)		Hanwang Technology Co.,Ltd
-				HANVON TOWER, BUILDING NO.5, ZHONGGUANCUN SOFTWARE PARK, HAIDIAN DISTRICT, BEIJING, CHINA  100193 
-				BEIJING  BEIJING  100193 
-				CN
-
-F4-69-D5   (hex)		Stype CS d.o.o.
-400000-4FFFFF     (base 16)		Stype CS d.o.o.
-				Velikopoljska 32
-				Zagreb    10010
-				HR
-
-28-B7-7C   (hex)		AnyLink LLC
-C00000-CFFFFF     (base 16)		AnyLink LLC
-				100 N Washington St. Floor 6
-				Boston  MA  02114
-				US
-
-28-B7-7C   (hex)		Shanghai Taiji Software Co.,Limited
-600000-6FFFFF     (base 16)		Shanghai Taiji Software Co.,Limited
-				Room J1224, No. 6, Lane 129, Huajiang Road, Jiading District
-				Shanghai  Shanghai  201800
-				CN
-
-C0-61-9A   (hex)		LYAND ACOUSTIC TECHNOLOGY CO.,LTD.
-300000-3FFFFF     (base 16)		LYAND ACOUSTIC TECHNOLOGY CO.,LTD.
-				No. 73 JinFu Road XiaoJinKou
-				Huizhou city   GuangDong  516023
-				CN
-
-28-B7-7C   (hex)		Enedo Finland Oy
-D00000-DFFFFF     (base 16)		Enedo Finland Oy
-				Martinkyläntie 43
-				Vantaa    01720
-				FI
-
-C0-61-9A   (hex)		KidKraft
-100000-1FFFFF     (base 16)		KidKraft
-				4630 Olin Rd
-				Dallas  TX  75244
-				US
-
-C0-61-9A   (hex)		Zhejiang Haikang Science And Technology Co.,Ltd
-E00000-EFFFFF     (base 16)		Zhejiang Haikang Science And Technology Co.,Ltd
-				No.797 Binkang Rd, Binjiang District
-				Hangzhou    310053
-				CN
-
-C0-61-9A   (hex)		Paragon Robotics LLC
-000000-0FFFFF     (base 16)		Paragon Robotics LLC
-				5386 Majestic Pkwy Ste 2
-				Bedford Heights  OH  44146
-				US
-
-C0-61-9A   (hex)		JAM-Labs Corp
-C00000-CFFFFF     (base 16)		JAM-Labs Corp
-				4109 Clipper Ct
-				Fremont  CA  94538
-				US
-
-98-FC-84   (hex)		ZERONE CO., LTD.
-600000-6FFFFF     (base 16)		ZERONE CO., LTD.
-				Shinil IT UTO Bldg. #810, LS-ro 13, Gunpo-si, Gyeonggi-do, Korea
-				SEOUL    15843
-				KR
-
-98-FC-84   (hex)		go-e GmbH
-100000-1FFFFF     (base 16)		go-e GmbH
-				Satellitenstrasse 1
-				Feldkirchen  Kaernten  9560
-				AT
-
-18-FD-CB   (hex)		TRANSLITE GLOBAL LLC
-B00000-BFFFFF     (base 16)		TRANSLITE GLOBAL LLC
-				6644 ANTOINE DRIVE 
-				HOUSTON  TX  77091
-				US
-
-98-FC-84   (hex)		Zymbit
-500000-5FFFFF     (base 16)		Zymbit
-				53 Cass Place, Suite B
-				Goleta  CA  93117
-				US
-
-18-FD-CB   (hex)		CreyNox GmbH
-900000-9FFFFF     (base 16)		CreyNox GmbH
-				Autokaderstrasse 29, BT2
-				Vienna    1210
-				AT
-
-58-20-8A   (hex)		SAMIL CTS Co., Ltd.
-800000-8FFFFF     (base 16)		SAMIL CTS Co., Ltd.
-				8F, Woolim Lion's Valley 3cha, 24 Dunchon Daero 388beon-gil, Jungwon-gu
-				Seongnam-si  Gyeonggi-do, KOREA  13403
-				KR
-
-18-FD-CB   (hex)		Shenzhen Rui jiali Electronic Technology Co. Ltd.
-000000-0FFFFF     (base 16)		Shenzhen Rui jiali Electronic Technology Co. Ltd.
-				306 ROOM,Building B, ShenZhaoYe Science Park, BaoLong 5 Road No. 1,Baolong Industrial City ,Pingshan District
-				Shenzhen    518118
-				CN
-
-18-FD-CB   (hex)		ENERGIE IP
-700000-7FFFFF     (base 16)		ENERGIE IP
-				48 rue du Château d’eau 
-				Paris  Ile-de-France  75010
-				FR
-
-CC-4F-5C   (hex)		Shanghai Zenchant Electornics Co.,LTD
-300000-3FFFFF     (base 16)		Shanghai Zenchant Electornics Co.,LTD
-				Room 1202, building a, Noble international, 908 Xiuwen Road, Minhang District
-				ShangHai  ShangHai  201199
-				CN
-
-CC-4F-5C   (hex)		Dtrovision
-900000-9FFFFF     (base 16)		Dtrovision
-				22-10 STATE RT 208
-				Fair Lawn  NJ  07410
-				US
-
-CC-4F-5C   (hex)		AZ-TECHNOLOGY SDN BHD
-A00000-AFFFFF     (base 16)		AZ-TECHNOLOGY SDN BHD
-				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
-				PETALING JAYA  SELANGOR  47301
-				MY
-
-FC-CD-2F   (hex)		Shenzhen Smartbyte Technology Co., Ltd.
-D00000-DFFFFF     (base 16)		Shenzhen Smartbyte Technology Co., Ltd.
-				 6th Floor, Building D, Huiqing Science and Technology Park, No. 8 Dafu Industrial Zone, Guanlan Street, Longhua District, Shenzhen
-				shenzhen  guangdong  518110
-				CN
-
-FC-CD-2F   (hex)		Siren Care(Shanghai) information and technology company
-100000-1FFFFF     (base 16)		Siren Care(Shanghai) information and technology company
-				Room 205, Floor 2, B Zone, Building 2, No 1899, Jiahao Rd, Jiading
-				Shanghai    201802
-				CN
-
-FC-CD-2F   (hex)		Xmitech Technology Co., Limited
-300000-3FFFFF     (base 16)		Xmitech Technology Co., Limited
-				RM888, F8,Tower B,Xinnengyuan Building
-				shenzhen    518054
-				CN
-
-FC-CD-2F   (hex)		Genitek Engineering sprl
-400000-4FFFFF     (base 16)		Genitek Engineering sprl
-				Rue Edouard Belin, 5
-				Mont-Saint-Guibert    1435
-				BE
-
-58-95-D8   (hex)		shenzhen UDD Technologies,co.,Ltd
-100000-1FFFFF     (base 16)		shenzhen UDD Technologies,co.,Ltd
-				Unit D, 6th Floor, Jialitai Bldg., No.45 Yanshan Road, Shekou, Nanshan District, Shenzhen, China
-				shenzhen  guangdong  51800
-				CN
-
-CC-4F-5C   (hex)		Beijing Neutron Technology CO.,LTD.
-D00000-DFFFFF     (base 16)		Beijing Neutron Technology CO.,LTD.
-				Beijing Neutron Technology CO.,LTD. 
-				Beijing  Beijing  100193
-				CN
-
-DC-4A-9E   (hex)		Maxvision Technology Corp.
-B00000-BFFFFF     (base 16)		Maxvision Technology Corp.
-				16F,East Block,High-tech Plaza Phase II,Tianan Cyber Park,Futian District,Shenzhen.
-				Shenzhen.    518000
-				CN
-
-58-95-D8   (hex)		elgris UG
-500000-5FFFFF     (base 16)		elgris UG
-				Langerweher Str. 10
-				Inden  Deutschland  52459
-				DE
-
-DC-4A-9E   (hex)		Annapurna labs
-200000-2FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-68-79-12   (hex)		ShangHai Aigentoo Information Technology Co., Ltd
-800000-8FFFFF     (base 16)		ShangHai Aigentoo Information Technology Co., Ltd
-				Room 1126,Building 1,Xin Ye Building,388 Tianlin Road,Xuhui District
-				Shanghai    200080
-				CN
-
-68-79-12   (hex)		PCTEL, Inc.
-000000-0FFFFF     (base 16)		PCTEL, Inc.
-				471 Brighton Drive
-				Bloomingdale  IL  60108
-				US
-
-68-79-12   (hex)		APPOTRONICS CO., LTD
-600000-6FFFFF     (base 16)		APPOTRONICS CO., LTD
-				4th Floor,SZICC,NO.1089,Chaguang Road,Nanshan District, Shenzhen, China
-				Shenzhen  Guangdong  518000
-				CN
-
-84-11-C2   (hex)		Provision-ISR
-C00000-CFFFFF     (base 16)		Provision-ISR
-				11 Atir Yeda St.
-				Kfar Saba  Israel  4464310
-				IL
-
-84-11-C2   (hex)		Goldmund Switzerland
-D00000-DFFFFF     (base 16)		Goldmund Switzerland
-				Chemin Grenet 21, 1214
-				Vernier  Geneva  1214
-				CH
-
-84-11-C2   (hex)		Ei3 Corporation
-700000-7FFFFF     (base 16)		Ei3 Corporation
-				2 Blue Hill Plaza, Ste 1544
-				Pearl River  NY  10965
-				US
-
-84-11-C2   (hex)		AIBIoT GmbH
-500000-5FFFFF     (base 16)		AIBIoT GmbH
-				Hornemannstr. 12
-				Hildesheim  Lower Saxony  31137
-				DE
-
-8C-47-6E   (hex)		Shanghai Satellite Communication Technology Co.,Ltd
-300000-3FFFFF     (base 16)		Shanghai Satellite Communication Technology Co.,Ltd
-				Shanghai Satellite Communication Technology Co.,Ltd
-				Shanghai  Shanghai  201800
-				CN
-
-8C-47-6E   (hex)		Square Inc.
-500000-5FFFFF     (base 16)		Square Inc.
-				1455 Market St.
-				San Francisco  CA  94103
-				US
-
-68-79-12   (hex)		Stephan Electronics SARL
-300000-3FFFFF     (base 16)		Stephan Electronics SARL
-				Maupas 9
-				Lausanne    1004
-				CH
-
-8C-47-6E   (hex)		Faravid Communication&Data Analysis
-B00000-BFFFFF     (base 16)		Faravid Communication&Data Analysis
-				18th unit, No.2, Houman Alley Abbaspour Av., 
-				Vanak Sq.  Tehran  1435633413
-				IR
-
-8C-47-6E   (hex)		TelWare Corporation
-100000-1FFFFF     (base 16)		TelWare Corporation
-				1824 Industrial Center Circle
-				Charlotte  NC  28213
-				US
-
-8C-47-6E   (hex)		Shenzhen Juding Electronics Co., Ltd.
-400000-4FFFFF     (base 16)		Shenzhen Juding Electronics Co., Ltd.
-				5th Floor, Building B5, Fenghuanggang Third Industrial Zone, No.231, Baotian 1st Road, Baoan District
-				Shenzhen  Guangdong  518100
-				CN
-
-8C-47-6E   (hex)		Edge Networks Inc
-C00000-CFFFFF     (base 16)		Edge Networks Inc
-				943 W. Overland Road, Suite 152
-				Meridian  ID  83642
-				US
-
-8C-47-6E   (hex)		Annapurna labs
-E00000-EFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-8C-AE-49   (hex)		Ouman Oy
-000000-0FFFFF     (base 16)		Ouman Oy
-				Voimatie 6
-				Kempele    FIN-90440
-				FI
-
-8C-AE-49   (hex)		Jiangsu Sixingda Information Technology Co., Ltd.
-400000-4FFFFF     (base 16)		Jiangsu Sixingda Information Technology Co., Ltd.
-				Jiangsu Sixingda Information Technology Co., Ltd.
-				Nanjing  Jiangsu  210000
-				CN
-
-8C-AE-49   (hex)		Suzhou Guowang Electronics Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		Suzhou Guowang Electronics Technology Co., Ltd.
-				No. 99, Changli Road, 703, Wuzhong science and technology entrepreneurship Park
-				Suzhou    215168
-				CN
-
-A4-53-EE   (hex)		Viper Design, LLC
-B00000-BFFFFF     (base 16)		Viper Design, LLC
-				85 Cude Lane
-				Madison  TN  37115
-				US
-
-A0-02-4A   (hex)		Donguan Amsamotion Automation Technology Co., Ltd
-500000-5FFFFF     (base 16)		Donguan Amsamotion Automation Technology Co., Ltd
-				Block A, Zosun Intelligence Creation Zone, No.9 Yizhan Road, Yuanwubian Streeet Nancheng District,
-				Dongguan  Gunagdong  523000
-				CN
-
-A0-02-4A   (hex)		Guangdong Jinpeng Technology Co. LTD
-A00000-AFFFFF     (base 16)		Guangdong Jinpeng Technology Co. LTD
-				Room 504, 5 / F, Self-built A3 Building, No. 50 Science Avenue, Huangpu District
-				Guangzhou    510700
-				CN
-
-A0-02-4A   (hex)		Beijing Lyratone Technology Co., Ltd
-800000-8FFFFF     (base 16)		Beijing Lyratone Technology Co., Ltd
-				1st floor, Caigang building, No.40 Beiyuan Road
-				Beijing    100020
-				CN
-
-A0-02-4A   (hex)		Encroute AB
-C00000-CFFFFF     (base 16)		Encroute AB
-				Box 2062
-				Sundbyberg    17402
-				SE
-
-A0-02-4A   (hex)		Vitec Imaging Solutions Spa
-100000-1FFFFF     (base 16)		Vitec Imaging Solutions Spa
-				Via Valsugana 100
-				Cassola  Vicenza  36022
-				IT
-
-78-D4-F1   (hex)		Jiangsu byzoro intelligent technology Co.,Ltd
-B00000-BFFFFF     (base 16)		Jiangsu byzoro intelligent technology Co.,Ltd
-				Room 301, Building D, Yunmi City, No.19 Ningshuang Road, Yuhuatai District
-				Nanjing  Jiangsu  210012
-				CN
-
-44-6F-D8   (hex)		BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Ş.
-200000-2FFFFF     (base 16)		BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Ş.
-				Kimya Sanayicileri Org. San. Bolgesi Organik Cad. No:31
-				Istanbul  Tuzla   34956
-				TR
-
-44-6F-D8   (hex)		ITC
-700000-7FFFFF     (base 16)		ITC
-				3030 Corporate Grove Drive
-				Hudsonville  MI  49426
-				US
-
-44-6F-D8   (hex)		CTE
-E00000-EFFFFF     (base 16)		CTE
-				No. 1-7, Gongjian Rd., Cidu District, Keelung City 20647, Taiwan R.O.C
-				Keelung  Taiwan  106
-				TW
-
-98-27-82   (hex)		INFODAS GmbH
-100000-1FFFFF     (base 16)		INFODAS GmbH
-				Rhonestr. 2
-				Cologne    50765
-				DE
-
-98-27-82   (hex)		Anhui Shengren Electronic Technology Co., Ltd
-200000-2FFFFF     (base 16)		Anhui Shengren Electronic Technology Co., Ltd
-				520 Jiahe Road, Yuhui District
-				Bengbu  Anhui  233000
-				CN
-
-98-27-82   (hex)		SureFlap Ltd
-E00000-EFFFFF     (base 16)		SureFlap Ltd
-				7 The Irwin Centre, Scotland Road, Dry Drayton
-				Cambridge  Cambridgeshire  CB23 8AR
-				GB
-
-04-11-19   (hex)		CEITA COMMUNICATION TECHNOLOGY CO.,LTD
-500000-5FFFFF     (base 16)		CEITA COMMUNICATION TECHNOLOGY CO.,LTD
-				611, Renbao Building, 32 Baolong Road, Changlong Community, Buji Street, Longgang District
-				Shenzhen  Guangdong  518000
-				CN
-
-98-27-82   (hex)		KRISTECH Krzysztof Kajstura
-C00000-CFFFFF     (base 16)		KRISTECH Krzysztof Kajstura
-				Porzeczkowa 12
-				Ustro?  Please select region, state or province  43-450
-				PL
-
-04-11-19   (hex)		ZPD technology Co., Ltd
-600000-6FFFFF     (base 16)		ZPD technology Co., Ltd
-				2# Floor, 1# Gate?12# Building?5# Jiangtai Road, Chaoyang District,Beijing
-				Beijing  Beijing  100015
-				CN
-
-E8-6C-C7   (hex)		ASSA ABLOY(GuangZhou) Smart Technology Co., Ltd
-100000-1FFFFF     (base 16)		ASSA ABLOY(GuangZhou) Smart Technology Co., Ltd
-				Plant Building 5, 106 Xieshi Highway, Shibi 1st Village
-				Guangzhou  GuangDong  511495
-				CN
-
-04-11-19   (hex)		Haerbin Donglin Technology Co., Ltd.
-C00000-CFFFFF     (base 16)		Haerbin Donglin Technology Co., Ltd.
-				Room 2, Floor 1, Unit 6, Building 2,Yuanshi Street 35, Nangang District
-				Haerbin  Heilongjiang  150000
-				CN
-
-04-11-19   (hex)		Bolicom Innovation Technology (BeiJing) Co.,LTD.
-400000-4FFFFF     (base 16)		Bolicom Innovation Technology (BeiJing) Co.,LTD.
-				Rm2327, Building23, No.18 Anningzhuang East Road, Haidian District
-				Bei Jing    100000
-				CN
-
-24-5D-FC   (hex)		Shenzhen Hailuck Electronic Technology CO.,LTD
-300000-3FFFFF     (base 16)		Shenzhen Hailuck Electronic Technology CO.,LTD
-				2/F, building 19, Baotian industrial zone, the Third Baotian Road, Bao'an district
-				Shenzhen  GuangDong  518101
-				CN
-
-E8-6C-C7   (hex)		MORNSUN Guangzhou Science & Technology Co., Ltd.
-B00000-BFFFFF     (base 16)		MORNSUN Guangzhou Science & Technology Co., Ltd.
-				No.5,Kehui St. 1,kehui Development Center,Science Ave.,Guangzhou Science City,  Huangpu District
-				GuangZhou  GuangDong   510000
-				CN
-
-24-5D-FC   (hex)		ONLY
-B00000-BFFFFF     (base 16)		ONLY
-				1F., No. 16, Ln. 76, Zhongyang N. Rd., Sanchong Dist
-				New Taipei City  Taiwan (R.O.C.)   24146
-				TW
-
-24-5D-FC   (hex)		Tata Sky Limited
-A00000-AFFFFF     (base 16)		Tata Sky Limited
-				Unit 301 to 305, 3rd Floor, Windsor, Off C.S.T. Road, Kalina, Santacruz (East), Mumbai – 400 098 
-				Mumbai  Maharashtra  400098
-				IN
-
-94-05-BB   (hex)		Neutrik AG
-300000-3FFFFF     (base 16)		Neutrik AG
-				Im alten Riet 143
-				Schaan  SCHAAN  9494
-				LI
-
-60-15-92   (hex)		Yangzhou Wanfang Electronic Technology,CO .,Ltd.
-800000-8FFFFF     (base 16)		Yangzhou Wanfang Electronic Technology,CO .,Ltd.
-				No.96 Anlin Road,Guangling District
-				Yangzhou City  Jiangsu Province  225000
-				CN
-
-A4-53-EE   (hex)		Shenzhen Xunqi Interconnet Technology Co., Ltd
-600000-6FFFFF     (base 16)		Shenzhen Xunqi Interconnet Technology Co., Ltd
-				26G, block B, Haiwang building, Chuangye Road, Nanshan District,
-				Shenzhen  Guangdong  518000
-				CN
-
-60-15-92   (hex)		Faster CZ spol. s r.o.
-700000-7FFFFF     (base 16)		Faster CZ spol. s r.o.
-				Jarní 44g
-				Brno    61400
-				CZ
-
-60-15-92   (hex)		BEIJING KUANGSHI TECHNOLOGY CO., LTD
-600000-6FFFFF     (base 16)		BEIJING KUANGSHI TECHNOLOGY CO., LTD
-				Room 1018,10th Floor, No.1 Zhongguancun Street, Haidian District, 
-				Beijing  Beijing  100086
-				CN
-
-0C-5C-B5   (hex)		BSU Inc
-D00000-DFFFFF     (base 16)		BSU Inc
-				1611 Headway Circle, Building 1, Suite 200
-				Austin  TX  78754
-				US
-
-1C-A0-EF   (hex)		Atlas Aerospace
-900000-9FFFFF     (base 16)		Atlas Aerospace
-				Ulbrokas 19a
-				Riga  Riga  LV-1021
-				LV
-
-0C-5C-B5   (hex)		Zhengzhou coal machinery hydraulic electric control Co.,Ltd
-A00000-AFFFFF     (base 16)		Zhengzhou coal machinery hydraulic electric control Co.,Ltd
-				167 Jingkai 9th Street, Zhengzhou Economic Development Zone
-				Zhengzhou    45000
-				CN
-
-1C-A0-EF   (hex)		Henrich Electronics Corporation
-A00000-AFFFFF     (base 16)		Henrich Electronics Corporation
-				225 Deming Place
-				Westmont    60559
-				US
-
-1C-A0-EF   (hex)		 BMK professional electronics GmbH
-B00000-BFFFFF     (base 16)		 BMK professional electronics GmbH
-				Werner-von-Siemens-Straße 6
-				Augsburg     86159
-				DE
-
-1C-A0-EF   (hex)		Nanjing Bilin Intelligent Identification Technology Co.,Ltd
-500000-5FFFFF     (base 16)		Nanjing Bilin Intelligent Identification Technology Co.,Ltd
-				No.9 Bancang Street
-				Nanjing  Jiangsu  210000
-				CN
-
-1C-A0-EF   (hex)		Schneider-Electric(China)Co.Ltd,Shenzhen Branch
-200000-2FFFFF     (base 16)		Schneider-Electric(China)Co.Ltd,Shenzhen Branch
-				Unit A to C 7/F and 8/F,CES Building ,No.3099,Keyuan South road, Nanshan Dist, Shenzhen, GD, China
-				SHENZHEN    518000
-				CN
-
-1C-A0-EF   (hex)		RDA Microelectronics Technologies (Shanghai) Co. , Ltd
-E00000-EFFFFF     (base 16)		RDA Microelectronics Technologies (Shanghai) Co. , Ltd
-				Room 336, No.3, Lane 2288, Zuchongzhi Road, Pudong Area
-				Shanghai  Shanghai  200120
-				CN
-
-20-CE-2A   (hex)		Annapurna labs
-000000-0FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-20-CE-2A   (hex)		Cuculus GmbH
-300000-3FFFFF     (base 16)		Cuculus GmbH
-				Lindenstr. 9 -11
-				Ilmenau  Thuringia  98693
-				DE
-
-20-CE-2A   (hex)		Annapurna labs
-400000-4FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-20-CE-2A   (hex)		Radarxense BV
-600000-6FFFFF     (base 16)		Radarxense BV
-				Kwekerijweg, 2A
-				Zeist  Nederland  3709 JA
-				NL
-
-78-C2-C0   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
-600000-6FFFFF     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
-				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road, Chengdu, Sichuan
-				Chengdu  Sichuan  610000
-				CN
-
-88-C9-B3   (hex)		Shenzhen Viewsmart Technology Co.,Ltd
-C00000-CFFFFF     (base 16)		Shenzhen Viewsmart Technology Co.,Ltd
-				Room 10C?Floor 10,South China Navigation Building, No.7 North Langshan Road,Nanshan District, Shenzhen, China.
-				SHENZHEN    518000
-				CN
-
-88-C9-B3   (hex)		Hugo Techno
-600000-6FFFFF     (base 16)		Hugo Techno
-				F92 Green Park
-				New Delhi  Delhi  110016
-				IN
-
-88-C9-B3   (hex)		Richbeam (Beijing) Technology Co., Ltd.
-900000-9FFFFF     (base 16)		Richbeam (Beijing) Technology Co., Ltd.
-				2608, Tower A, Tianzuo International, No.12, Zhongguancun South Street, Haidian District
-				Beijing  Beijing  100081
-				CN
-
-C8-F5-D6   (hex)		HENAN FOXSTAR DIGITAL DISPLAY Co.,Ltd.
-A00000-AFFFFF     (base 16)		HENAN FOXSTAR DIGITAL DISPLAY Co.,Ltd.
-				No. 7 Bldg., Yulong Block, Longsheng Road, Optronic Industry Area, Nanyang,Henan,P.R.China
-				Nanyang    473000
-				CN
-
-C8-F5-D6   (hex)		MEIRYO TECHNICA CORPORATION
-000000-0FFFFF     (base 16)		MEIRYO TECHNICA CORPORATION
-				2039-1,Shimoi, Shimoi-cho
-				Owariasahi-city  Aichi  488-0052
-				JP
-
-C0-FB-F9   (hex)		Minato Advanced Technologies inc
-400000-4FFFFF     (base 16)		Minato Advanced Technologies inc
-				4105, Minami Yamata-cho, Tsuzuki-ku,
-				YOKOHAMA  Kanagawa  224-0026
-				JP
-
-C0-FB-F9   (hex)		 LongSung Technology (Shanghai) Co.,Ltd.   
-700000-7FFFFF     (base 16)		 LongSung Technology (Shanghai) Co.,Ltd.   
-				 Room 606, Block B, Bldg. 1, No. 3000 Longdong Avenue., Zhangjiang Hi-Tech Park, Pudong District
-				ShangHai    201203
-				CN
-
-C8-F5-D6   (hex)		HEITEC AG
-E00000-EFFFFF     (base 16)		HEITEC AG
-				Güterbahnhofstrasse 5
-				Erlangen  Please select state  91052
-				DE
-
-C8-F5-D6   (hex)		BBPOS International Limited
-300000-3FFFFF     (base 16)		BBPOS International Limited
-				Suite 1602, Tower 2, Nina Tower, 8 Yeung Uk Road, Tsuen Wan, NT
-				Hong Kong  China  00000
-				HK
-
-88-C9-B3   (hex)		Fortive Setra-ICG(Tianjin)Co.,Ltd
-300000-3FFFFF     (base 16)		Fortive Setra-ICG(Tianjin)Co.,Ltd
-				28 weiwu Road,Micro-electronics Industrial Park,Xiqing District Tianjin,P,R,China
-				Tianjin    300380
-				CN
-
-C0-FB-F9   (hex)		Xerox Corporation
-000000-0FFFFF     (base 16)		Xerox Corporation
-				800 Phillips Rd, Mailstop 0207-2Z
-				Webster  NY  14580
-				US
-
-C0-FB-F9   (hex)		zxsolution
-900000-9FFFFF     (base 16)		zxsolution
-				nanshan shenzhen
-				shenzhen    518000
-				CN
-
-D0-9F-D9   (hex)		Westar Display Technologies
-200000-2FFFFF     (base 16)		Westar Display Technologies
-				4 Research Park Dr
-				St Charles  MO  63304
-				US
-
-18-74-E2   (hex)		Sansec Technology Co.,Ltd
-700000-7FFFFF     (base 16)		Sansec Technology Co.,Ltd
-				Bejing Chaoyang District Guangshun North Street Hostpital No.16 No.2 building 14 room 1406
-				Bejing   Bejing   100102
-				CN
-
-D0-9F-D9   (hex)		Cablewireless Laboratory Co., Ltd
-B00000-BFFFFF     (base 16)		Cablewireless Laboratory Co., Ltd
-				Room 218,  Block E1, Yuanchenxin Building, 12 Yumin Road, Chaoyang District
-				Beijing    100029
-				CN
-
-18-74-E2   (hex)		CT Company
-300000-3FFFFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-18-74-E2   (hex)		Ensor AG
-000000-0FFFFF     (base 16)		Ensor AG
-				Riedstrasse 11
-				Cham  Zug  CH - 6330
-				CH
-
-E8-78-29   (hex)		Ryu Tech. LTD
-900000-9FFFFF     (base 16)		Ryu Tech. LTD
-				No.10 Lane 369,Yuan Taung Rd.JhoneHe City
-				Taipei  Taiwan,R.O.C  235
-				TW
-
-E8-78-29   (hex)		Private
-B00000-BFFFFF     (base 16)		Private
-
-E8-78-29   (hex)		Galcon
-200000-2FFFFF     (base 16)		Galcon
-				Kfar Blum  israel
-				Kfar Blum  Israel   121500
-				IL
-
-18-74-E2   (hex)		Private
-400000-4FFFFF     (base 16)		Private
-
-E8-78-29   (hex)		SHEN ZHEN SKYSI WISDOM TECHNOLOGY CO.,LTD.
-500000-5FFFFF     (base 16)		SHEN ZHEN SKYSI WISDOM TECHNOLOGY CO.,LTD.
-				Room 1106,11th floor, National Technology Building, no. 109, Baoshen Road, Songpingshan community, Xili Street, Nanshan district, Shenzhen City
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-E8-78-29   (hex)		FairPhone B.V.
-C00000-CFFFFF     (base 16)		FairPhone B.V.
-				VanDiemenstraat 200
-				Amsterdam    1013 CP
-				NL
-
-B4-4B-D6   (hex)		Shenzhen Cudy Technology Co., Ltd.
-200000-2FFFFF     (base 16)		Shenzhen Cudy Technology Co., Ltd.
-				Room A606, Gaoxinqi Industrial Park, Baoan 67 Dist
-				Baoan 67 District, Shenzhen    518101
-				CN
-
-A8-5B-36   (hex)		PARMA LLC
-100000-1FFFFF     (base 16)		PARMA LLC
-				Leninsky Prospekt, 140, lit A, room 15N
-				Saint Petersburg  Saint Petersburg  198216
-				RU
-
-78-13-05   (hex)		Shenzhen C & D Electronics Co., Ltd.
-900000-9FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
-				ShenZhen  GuangDong  518000
-				CN
-
-78-13-05   (hex)		Dongguan zhenxing electronic technology co.,limited
-E00000-EFFFFF     (base 16)		Dongguan zhenxing electronic technology co.,limited
-				GuangMingGang JinJun road 8#
-				DonggUAN    523768
-				CN
-
-A8-5B-36   (hex)		Adam Hall GmbH
-D00000-DFFFFF     (base 16)		Adam Hall GmbH
-				Adam-Hall-Str. 1
-				Neu-Anspach  Hessen  61267
-				DE
-
-F0-2A-2B   (hex)		Tenways Engineering Service Ltd
-800000-8FFFFF     (base 16)		Tenways Engineering Service Ltd
-				85 Kenilworth Road
-				Edgware  Middlesex  HA8 8XA
-				GB
-
-44-A9-2C   (hex)		NetX Networks a.s.
-400000-4FFFFF     (base 16)		NetX Networks a.s.
-				Palackeho trida 811/112
-				Brno  Czech Republic  62100
-				CZ
-
-F0-2A-2B   (hex)		Shenzhen CUCO Technology Co., Ltd
-E00000-EFFFFF     (base 16)		Shenzhen CUCO Technology Co., Ltd
-				Room 201, 301, Building A, No.12, Difu Road, Guxing Community, Xixiang Street, Baoan District
-				Shenzhen  Guangdong  418000
-				CN
-
-44-A9-2C   (hex)		uimcom
-100000-1FFFFF     (base 16)		uimcom
-				Yingying building, 99 Tuanjie Road, Pukou District, Nanjing
-				nanjing    211800
-				CN
-
-44-A9-2C   (hex)		Efficient Building Automation Corp.
-700000-7FFFFF     (base 16)		Efficient Building Automation Corp.
-				Unit 1004 - 7495 132nd Street
-				Surrey  British Columbia  V3W1J8
-				CA
-
-58-48-49   (hex)		Waoo
-A00000-AFFFFF     (base 16)		Waoo
-				True Møllevej 9
-				Tilst  Aarhus Municipallity  8381
-				DK
-
-64-33-B5   (hex)		ABB Electrification Smart Power (ELSP)
-700000-7FFFFF     (base 16)		ABB Electrification Smart Power (ELSP)
-				PVT. BAG 92609, SYMONDS STREET
-				Auckland    1150
-				NZ
-
-64-33-B5   (hex)		Eagle Eye Networks, Inc
-400000-4FFFFF     (base 16)		Eagle Eye Networks, Inc
-				4611 Bee Cave Rd Suite 200
-				austin  TX  78746
-				US
-
-64-33-B5   (hex)		LACO Technologies
-800000-8FFFFF     (base 16)		LACO Technologies
-				3085 W Directors Row
-				Salt Lake City  UT  84104
-				US
-
-64-33-B5   (hex)		electroCore Inc.
-B00000-BFFFFF     (base 16)		electroCore Inc.
-				205 Forge Way
-				Rockaway  NJ  07866
-				US
-
-64-33-B5   (hex)		MICROIT SRL
-600000-6FFFFF     (base 16)		MICROIT SRL
-				Via Galileo Galilei 1
-				Medolla  MODENA  41036
-				IT
-
-64-33-B5   (hex)		Annapurna labs
-900000-9FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-28-36-13   (hex)		Fuzhou Lesi Intelligent Technology Co., Ltd
-800000-8FFFFF     (base 16)		Fuzhou Lesi Intelligent Technology Co., Ltd
-				Room 1-3-5, north 9 / F, building 1, Fujian hi tech Pioneer Park, 611 Gongye Road, Gulou District
-				Fuzhou  Fujian  350000
-				CN
-
-28-36-13   (hex)		midBit Technologies, LLC
-C00000-CFFFFF     (base 16)		midBit Technologies, LLC
-				153 Homestead Ln
-				Romney  WV  26757
-				US
-
-28-36-13   (hex)		Turing Video
-500000-5FFFFF     (base 16)		Turing Video
-				1730 S El Camino Real, Suite 350
-				San Mateo  CA  94402
-				US
-
-28-36-13   (hex)		MAKEEN Energy
-A00000-AFFFFF     (base 16)		MAKEEN Energy
-				Alsvej 21
-				Randers    8940
-				DK
-
-28-36-13   (hex)		EGMedical, s.r.o.
-E00000-EFFFFF     (base 16)		EGMedical, s.r.o.
-				KRENOVA 19
-				Brno  JHMK  60200
-				CZ
-
-28-36-13   (hex)		Qorvo, Inc.
-B00000-BFFFFF     (base 16)		Qorvo, Inc.
-				500 W. Renner Road
-				Richardson  TX  75080
-				US
-
-78-5E-E8   (hex)		FINETOOLING TECHNOLOGY(HONG KONG)CO.,LIMITED
-C00000-CFFFFF     (base 16)		FINETOOLING TECHNOLOGY(HONG KONG)CO.,LIMITED
-				RM 1003 10/F TOWER 1 LIPPO CENTER 89 QUEENSWAY ADMIRALTY HK
-				HONG KONG  HONG KONG  999077
-				CN
-
-38-A8-CD   (hex)		Annapurna labs
-D00000-DFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-78-5E-E8   (hex)		Tachyon Networks
-D00000-DFFFFF     (base 16)		Tachyon Networks
-				11275 US HWY 98 W, STE. 6-259
-				Miramar Beach  FL  32550
-				US
-
-78-5E-E8   (hex)		beijing Areospace Hongda optoelectronics technology co.,ltd
-400000-4FFFFF     (base 16)		beijing Areospace Hongda optoelectronics technology co.,ltd
-				Room 422, No.4, North Row, No.28 South Yard
-				Beijing    Dongbei Wang Village, Dongbei Wang Township, Haidian District  065599
-				CN
-
-38-A8-CD   (hex)		Fujica System Co., ltd
-100000-1FFFFF     (base 16)		Fujica System Co., ltd
-				Building 6, JiuXiangLing Industrial Area, Xili street, Nanshan District,
-				Shenzhen  GuangDong  518055
-				CN
-
-7C-83-34   (hex)		Beijing Changkun Technology Co., Ltd.
-300000-3FFFFF     (base 16)		Beijing Changkun Technology Co., Ltd.
-				Room 821-1, unit 2, floor 10, building 1, No. 3, Rongjing East Street, Beijing Economic Development Zone
-				Beijing  Beijing  100176
-				CN
-
-7C-83-34   (hex)		ChengDU Yi Gong Intelligence Technology Co., Ltd.
-700000-7FFFFF     (base 16)		ChengDU Yi Gong Intelligence Technology Co., Ltd.
-				5th floor, building 4, No. 200, Tianfu 5th Street
-				ChengDu  SiChuan  610000
-				CN
-
-7C-83-34   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-900000-9FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
-				Suzhou    215021
-				CN
-
-7C-83-34   (hex)		MSV elektronika s.r.o.
-D00000-DFFFFF     (base 16)		MSV elektronika s.r.o.
-				Postovni 662
-				Studenka    742 13
-				CZ
-
-98-6E-E8   (hex)		Changzhou Jiahao Radio&TV device CO.,LTD
-D00000-DFFFFF     (base 16)		Changzhou Jiahao Radio&TV device CO.,LTD
-				NO.155,Jiaxing road
-				Changzhou  Jiangsu  213000
-				CN
-
-98-6E-E8   (hex)		SUZHOU AUDITORYWORKS CO., LTD.
-500000-5FFFFF     (base 16)		SUZHOU AUDITORYWORKS CO., LTD.
-				Creative Industry Park, No.328, Xinghu Street, Suzhou Industrial Park, Unit 2-B504
-				Suzhou  Jiangsu  215000
-				CN
-
-1C-AE-3E   (hex)		China Convert Technology Co., Ltd.
-900000-9FFFFF     (base 16)		China Convert Technology Co., Ltd.
-				Room 405,18 Building,No. 3333, Huaning Street, Minhang District
-				Shanghai    210036
-				CN
-
-98-6E-E8   (hex)		Centro de Pesquisas Av Wernher Von Braun
-700000-7FFFFF     (base 16)		Centro de Pesquisas Av Wernher Von Braun
-				Avenida Alice de Castro Pupo Nogueira, Mattosinho, 301 - Alphaville
-				campinas  Sao Paulo  13098392
-				BR
-
-98-80-BB   (hex)		Annapurna labs
-300000-3FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-98-80-BB   (hex)		Shenzhen Xin Kingbrand Enterprises Co., Ltd
-C00000-CFFFFF     (base 16)		Shenzhen Xin Kingbrand Enterprises Co., Ltd
-				First and Third Floor of Building B,Building A, NO. 90 Nanpu Road, Shajing Street, Baoan District
-				Shenzhen    518000
-				CN
-
-98-80-BB   (hex)		Wyebot, Inc.
-D00000-DFFFFF     (base 16)		Wyebot, Inc.
-				2 Mount Royal Ave.
-				Marlborough  MA  01752
-				US
-
-78-72-64   (hex)		Typhoon HIL, Inc.
-A00000-AFFFFF     (base 16)		Typhoon HIL, Inc.
-				15 Ward Street, 2nd Floor
-				Somerville    02143
-				US
-
-78-72-64   (hex)		Conjing Networks Inc.
-700000-7FFFFF     (base 16)		Conjing Networks Inc.
-				4F., No.108, Zhenxing Rd., East Dist.
-				Hsinchu City    300081
-				TW
-
-78-72-64   (hex)		Asustor Inc.
-400000-4FFFFF     (base 16)		Asustor Inc.
-				3F, No.136, Daye Road, Beitou Dist.,
-				Taipei City    112
-				TW
-
-F4-70-0C   (hex)		HYUNSUNG CONVERGENCE 
-000000-0FFFFF     (base 16)		HYUNSUNG CONVERGENCE 
-				802-Ho,Sanbon-ro,48beon-gil 32
-				Gunpo-si  Gyeonggi-do  15846
-				KR
-
-F4-70-0C   (hex)		Shenzhen WeProTalk Technology Co., Ltd.
-E00000-EFFFFF     (base 16)		Shenzhen WeProTalk Technology Co., Ltd.
-				Room 201, R3-B building, Virtual univessity park, Nanshan
-				Shenzhen   Guangdong  518000
-				CN
-
-F4-70-0C   (hex)		Shenzhen Anycon Electronics Technology Co.,Ltd
-400000-4FFFFF     (base 16)		Shenzhen Anycon Electronics Technology Co.,Ltd
-				1109,11th floor, Tower E, Galaxy world, Minle community, Minzhi, Longhua district
-				Shenzhen  Guangdong  518100
-				CN
-
-F4-70-0C   (hex)		Shanghai Risingpo Electronics CO.,LTD
-B00000-BFFFFF     (base 16)		Shanghai Risingpo Electronics CO.,LTD
-				Room 501, Building 5, Lingang Excellence Industrial Park, No. 877, Jiuxin Road, Jiuting Town, Songjiang District, Shanghai
-				shanghai    201615
-				CN
-
-F4-A4-54   (hex)		Introl Design
-600000-6FFFFF     (base 16)		Introl Design
-				4883 ida park drive
-				Lockport  NY  14094
-				US
-
-F4-A4-54   (hex)		Chongqing Hengxun Liansheng Industrial Co.,Ltd
-300000-3FFFFF     (base 16)		Chongqing Hengxun Liansheng Industrial Co.,Ltd
-				Shop 42, Area C, Chongqing Yixiang City, No. 12 Jiangnan Avenue, Nan'an District
-				Chongqing  Chongqing Province  404100
-				CN
-
-F4-A4-54   (hex)		NKT Photonics A/S
-000000-0FFFFF     (base 16)		NKT Photonics A/S
-				Blokken 84
-				Birkerod    3460
-				DK
-
-18-45-B3   (hex)		Shenzhen Incar Technology Co., Ltd.
-700000-7FFFFF     (base 16)		Shenzhen Incar Technology Co., Ltd.
-				Zhongxi ECO International Building, Shuiku Rd., Baoan District
-				Shenzhen     518000
-				CN
-
-F4-A4-54   (hex)		TRI WORKS
-200000-2FFFFF     (base 16)		TRI WORKS
-				#402 Goto building 4F 2-2-2 Daimyo Chuo-ku
-				Fukuoka-shi    810-0041
-				JP
-
-08-F8-0D   (hex)		Shenzhen DophiGo IoT Technology Co.,Ltd
-100000-1FFFFF     (base 16)		Shenzhen DophiGo IoT Technology Co.,Ltd
-				B02, first floor, building No.9, Nanshan Yungu start-up business industrial park second part, No.2, Pingshan first road, Pingshan Community, Taoyuan Street, Nanshan district
-				Shenzhen    518000
-				CN
-
-08-F8-0D   (hex)		OpenYard LLC
-800000-8FFFFF     (base 16)		OpenYard LLC
-				82, Sadovnicheskaya str., Building 2, Office 3F07
-				Moscow    115035
-				RU
-
-04-EE-E8   (hex)		Shenzhen JoiningFree Technology Co.,Ltd
-A00000-AFFFFF     (base 16)		Shenzhen JoiningFree Technology Co.,Ltd
-				16F, Block C, Qifengda Building, Taohuayuan Science and Technology Innovation Park, Furong Road, Songgang Street, Baoan District,
-				Shenzhen  Guangdong  518110
-				CN
-
-18-D7-93   (hex)		DongGuan Orient Electronics & Metal Co.,Ltd
-500000-5FFFFF     (base 16)		DongGuan Orient Electronics & Metal Co.,Ltd
-				A2 Building, ZhiGu Science and Technology Park, Gekeng industrial park, HengLi Town,  China
-				DongGuan  GuangDong,  523468
-				CN
-
-04-EE-E8   (hex)		MPEON Co.,Ltd
-800000-8FFFFF     (base 16)		MPEON Co.,Ltd
-				#927, Gyeonggi business Growh Center, Pangyo 2nd TechnoValley, 42, Changeop-ro, Sujeong-gu
-				Seongnam-si  Gyeonggi-do  13449
-				KP
-
-18-D7-93   (hex)		JFA Electronics Industry and Commerce EIRELI
-700000-7FFFFF     (base 16)		JFA Electronics Industry and Commerce EIRELI
-				Rua Flor das Pedras, 175
-				Belo Horizonte  Minas Gerais  30810-000
-				BR
-
-18-D7-93   (hex)		Hydrotechnik GmbH
-200000-2FFFFF     (base 16)		Hydrotechnik GmbH
-				Holzheimer Strasse  94-96
-				Limburg    65549
-				DE
-
-DC-36-43   (hex)		Orlaco Products B.V.
-C00000-CFFFFF     (base 16)		Orlaco Products B.V.
-				Albert Plesmanstraat 42
-				Barneveld    3772MN
-				NL
-
-DC-36-43   (hex)		OAK INFORMATION SYSTEM CO.
-800000-8FFFFF     (base 16)		OAK INFORMATION SYSTEM CO.
-				2-2-20 Higashishinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-DC-36-43   (hex)		KUANTECH (CAMBODIA) CORPORATION LIMITED
-A00000-AFFFFF     (base 16)		KUANTECH (CAMBODIA) CORPORATION LIMITED
-				PHUM CHORMPUL, KHUM P'PEL, SROK TRAMKORK
-				KINGDOM OF CAMBODIA  TAKEO PROVINCE  210209
-				KH
-
-08-26-AE   (hex)		Veth Propulsion bv
-D00000-DFFFFF     (base 16)		Veth Propulsion bv
-				Nanengat 17
-				Papendrecht    3356AA
-				NL
-
-08-26-AE   (hex)		Mass Electronics Pty Ltd
-E00000-EFFFFF     (base 16)		Mass Electronics Pty Ltd
-				12 McKechnie Drive
-				Eight Mile Plains  QLD  4113
-				AU
-
-98-8F-E0   (hex)		China Huaxin Post and Telecom Technologies Co., Ltd.
-700000-7FFFFF     (base 16)		China Huaxin Post and Telecom Technologies Co., Ltd.
-				5F, Building 1, Lane 60 Na Xian Road, Pudong District, Shanghai 201210 P.R.China
-				Shanghai    200127
-				CN
-
-98-8F-E0   (hex)		CEL Terminus (Shanghai) Information Technologies Co.,Ltd.
-E00000-EFFFFF     (base 16)		CEL Terminus (Shanghai) Information Technologies Co.,Ltd.
-				18F, Building 2, CES West Bund Center, No.277 Longlan Rd, Xuhui District,
-				Shanghai    200000
-				CN
-
-10-54-D2   (hex)		Annapurna labs
-800000-8FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-10-54-D2   (hex)		Lanao Communication Technology Limited
-600000-6FFFFF     (base 16)		Lanao Communication Technology Limited
-				#B2, Zhongbaotong Creative Park Changfa West Road No.34 Bantian
-				Shenzhen    518029
-				CN
-
-0C-86-29   (hex)		Ag Express Electronics
-400000-4FFFFF     (base 16)		Ag Express Electronics
-				6280 NE 14th St
-				Des Moines  IA  50313
-				US
-
-6C-93-08   (hex)		Liberty AV Solutions
-700000-7FFFFF     (base 16)		Liberty AV Solutions
-				1490 Garden of the Gods Road
-				Colorado Springs  CO  80907
-				US
-
-0C-86-29   (hex)		Annapurna labs
-300000-3FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-6C-93-08   (hex)		Hangzhou Risco System Co.,Ltd
-800000-8FFFFF     (base 16)		Hangzhou Risco System Co.,Ltd
-				No. 19, Naxian street, Liangzhu street, Yuhang District
-				Hangzhou City  Zhejiang Province  31000
-				CN
-
-6C-93-08   (hex)		Uconfree technology(shenzhen)limited
-600000-6FFFFF     (base 16)		Uconfree technology(shenzhen)limited
-				Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China
-				SHENZHEN    518111
-				CN
-
-6C-93-08   (hex)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
-200000-2FFFFF     (base 16)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
-				Room 103,1st F,unit A,Buliding 3,No. 8,Xiyuan 1st Road,Sandun Town,Xihu District
-				HANGZHOU  ZHEJIANG  310000
-				CN
-
-30-43-D7   (hex)		PK Solutions LLC
-900000-9FFFFF     (base 16)		PK Solutions LLC
-				10811 E Harry
-				Wichita  KS  67207
-				US
-
-30-43-D7   (hex)		Bodhi
-A00000-AFFFFF     (base 16)		Bodhi
-				3150 W. Prospect Road, Suite 330
-				Fort Lauderdale  FL  33309
-				US
-
-30-43-D7   (hex)		Kesu (Shanghai) Electronic Technology Co., Ltd
-800000-8FFFFF     (base 16)		Kesu (Shanghai) Electronic Technology Co., Ltd
-				3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District
-				Shanghai    202150
-				CN
-
-38-1F-26   (hex)		NOITAC sp. z o.o. sp.k.
-600000-6FFFFF     (base 16)		NOITAC sp. z o.o. sp.k.
-				Szlak 28/3
-				Kraków    31-153
-				PL
-
-38-1F-26   (hex)		JAESUNG INFORMATION & COMMUNICATION CO.LTD
-000000-0FFFFF     (base 16)		JAESUNG INFORMATION & COMMUNICATION CO.LTD
-				41-69, POWOL SAEMALGIL, YANG YANG-EUP
-				YANG YANG GUN    25017
-				KR
-
-30-43-D7   (hex)		FIBERME COMMUNICATIONS LLC
-400000-4FFFFF     (base 16)		FIBERME COMMUNICATIONS LLC
-				1749 Old Meadow Rd.
-				McLean  VA  22102
-				US
-
-38-1F-26   (hex)		Deutronic Elektronik GmbH
-B00000-BFFFFF     (base 16)		Deutronic Elektronik GmbH
-				Deutronicstraße 5
-				Adlkofen  Bayern  84166
-				DE
-
-38-1F-26   (hex)		Annapurna labs
-E00000-EFFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-38-1F-26   (hex)		RCE systems s.r.o.
-700000-7FFFFF     (base 16)		RCE systems s.r.o.
-				Svatopluka Cecha 2008/1d
-				Brno  CR  61200
-				CZ
-
-38-1F-26   (hex)		Sercomm Corporation.
-A00000-AFFFFF     (base 16)		Sercomm Corporation.
-				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
-				Miao-Lih Hsuan    115
-				TW
-
-30-43-D7   (hex)		Motec GmbH
-B00000-BFFFFF     (base 16)		Motec GmbH
-				287 27 Road
-				Grand Junction  CO  81503
-				US
-
-CC-4F-5C   (hex)		Beijing Techao Weijia Technology Limited
-E00000-EFFFFF     (base 16)		Beijing Techao Weijia Technology Limited
-				Room 202, Floor 2, Building No. 3, No. 9 Xiaoying Road, Chaoyang District
-				Beijing    100101
-				CN
-
-1C-59-74   (hex)		Council Rock
-A00000-AFFFFF     (base 16)		Council Rock
-				11 Centre Park
-				Rochester    14614
-				US
-
-C4-A1-0E   (hex)		Hainan World Electronic Science and Techology Co.,Ltd
-600000-6FFFFF     (base 16)		Hainan World Electronic Science and Techology Co.,Ltd
-				Room 1502,15th Floor,Building 20,NO.487 Tianlin Road,Shanghai,200233 China
-				Shanghai  Shanghai  200233
-				CN
-
-C4-A1-0E   (hex)		Jiangsu Perceive World Technology Co.,Ltd.
-A00000-AFFFFF     (base 16)		Jiangsu Perceive World Technology Co.,Ltd.
-				4-5F,Hengsheng Science Park 70#,Zhonghui Ave 1588#,HuiShan District,Wuxi,Jiangsu,China
-				Wu xi  Jiangsu  214181
-				CN
-
-78-D4-F1   (hex)		Silla Industries
-100000-1FFFFF     (base 16)		Silla Industries
-				Via della Meccanica 2a
-				Padova  PD  35127
-				IT
-
-18-A5-9C   (hex)		Cuman
-100000-1FFFFF     (base 16)		Cuman
-				Al-Farabi 97/1
-				Nur-Sultan    010000
-				KZ
-
-6C-15-24   (hex)		STERIS
-A00000-AFFFFF     (base 16)		STERIS
-				Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road
-				Bishops Stortford  herts  CM23 5GZ
-				GB
-
-C4-A1-0E   (hex)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
-900000-9FFFFF     (base 16)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
-				No.211 Tiangu 8th Road, High-tech Zone
-				Xi 'an   Shaanxi  710065
-				CN
-
-C4-A1-0E   (hex)		Alio, Inc
-E00000-EFFFFF     (base 16)		Alio, Inc
-				10901 W. 120th Ave, Suite 380
-				Bloomfield  CO  80021
-				US
-
-70-50-E7   (hex)		Wall Box Chargers, S.L.
-500000-5FFFFF     (base 16)		Wall Box Chargers, S.L.
-				Paseo Castellana 95, 28 floor
-				Madrid  Madrid  28046
-				ES
-
-70-50-E7   (hex)		Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company
-A00000-AFFFFF     (base 16)		Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company
-				D01, Zone D, No. 6 (Yishun), Huangcun North Road, Tianhe District
-				Guangzhou    510660
-				CN
-
-70-50-E7   (hex)		Electronic's Time SRL
-200000-2FFFFF     (base 16)		Electronic's Time SRL
-				Via Madonna Piccola 32R/Q
-				Martina Franca  Taranto  74015
-				IT
-
-70-50-E7   (hex)		Yoctopuce
-700000-7FFFFF     (base 16)		Yoctopuce
-				Route de Cartigny 33
-				Cartigny    1236
-				CH
-
-70-50-E7   (hex)		Skychers Creations ShenZhen Limited
-300000-3FFFFF     (base 16)		Skychers Creations ShenZhen Limited
-				Room 907A, 9/F, Block T2, FongDa City, Longjing Village, Longzhu Avenue, Nanshan District
-				Shenzhen  Guangdong  518073
-				CN
-
-70-50-E7   (hex)		Elastics.cloud
-900000-9FFFFF     (base 16)		Elastics.cloud
-				1730 North First Street, 5th Floor
-				San Jose  CA  95112
-				US
-
-80-02-F4   (hex)		Annapurna labs
-800000-8FFFFF     (base 16)		Annapurna labs
-				Matam Scientific Industries Center,   Building 8.2
-				Mail box 15123  Haifa  3508409
-				IL
-
-8C-51-09   (hex)		Avxav Electronic Trading LLC
-600000-6FFFFF     (base 16)		Avxav Electronic Trading LLC
-				Office 534 Building # 6WA Dubai Airport Free Zone
-				Dubai  Dubai  33964
-				AE
-
-80-02-F4   (hex)		Lazer Safe Pty Ltd
-700000-7FFFFF     (base 16)		Lazer Safe Pty Ltd
-				27 Action Road
-				Perth  WA  6090
-				AU
-
-80-02-F4   (hex)		Beijing Cybercore
-200000-2FFFFF     (base 16)		Beijing Cybercore
-				A206,F2,Yard#12,Building#1,JingAn DongLi,Chaoyang
-				Beijing  Beijing  100028
-				CN
-
-8C-51-09   (hex)		SHENZHEN LDROBOT CO., LTD.
-300000-3FFFFF     (base 16)		SHENZHEN LDROBOT CO., LTD.
-				Nanshan
-				Shenzhen    518000
-				CN
-
-8C-51-09   (hex)		nerospec
-800000-8FFFFF     (base 16)		nerospec
-				9 Freda Road, Bromhof,Skyview Retail Park
-				Randburg  Gauteng  2169
-				ZA
-
-8C-51-09   (hex)		Surpedia Technologies Co., Ltd.
-D00000-DFFFFF     (base 16)		Surpedia Technologies Co., Ltd.
-				5F-1, No.212, Sec 3, Datong Rd.
-				Xhzhi Dist.  New Taipei City  22103
-				TW
-
-8C-51-09   (hex)		IROOTELLUCKY Corp.
-E00000-EFFFFF     (base 16)		IROOTELLUCKY Corp.
-				609ho, 13, LS-ro
-				Gunpo-si  Gyeonggi-do  15843
-				KR
-
-0C-7F-ED   (hex)		Shenzhen MoreSense Technology Co., Ltd. 
-C00000-CFFFFF     (base 16)		Shenzhen MoreSense Technology Co., Ltd. 
-				#206 Building A1,#663 Bulong Road,Dafapu Community,Bantian Street,
-				Shenzhen  Guangdong  518129
-				CN
-
-0C-7F-ED   (hex)		Grandway Technology (Shenzhen) Limited
-700000-7FFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
-				Block 7, Zhu Keng Industrial Zone
-				Ping Shan District  Shenzhen  518118
-				CN
-
-0C-7F-ED   (hex)		TelX Systems
-B00000-BFFFFF     (base 16)		TelX Systems
-				UMM RAMOOL
-				DEIRA  DUBAI  48235
-				AE
-
-FC-61-79   (hex)		Int'Act Pty Ltd
-D00000-DFFFFF     (base 16)		Int'Act Pty Ltd
-				4 Pine Street
-				North Ipswich  Queensland  4305
-				AU
-
-0C-7F-ED   (hex)		Toast, Inc.
-100000-1FFFFF     (base 16)		Toast, Inc.
-				401 Park Drive, Suite 801
-				Boston  MA  02215
-				US
-
-FC-61-79   (hex)		Signalinks Communication Technology Co.,Ltd
-100000-1FFFFF     (base 16)		Signalinks Communication Technology Co.,Ltd
-				3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen
-				Shenzhen  Guangdong  518000
-				CN
-
-FC-61-79   (hex)		Shenzhen Dptek Technology Co., Ltd.
-A00000-AFFFFF     (base 16)		Shenzhen Dptek Technology Co., Ltd.
-				Room 706, Building Pincui, Zhongcui Garden,Dafen Community, Buji Street, Longgang District
-				Shenzhen  Guangdong  518000
-				CN
+OUI                                                         Organization                                 
+OUI-28/MA-M Range                                           Organization                                 
+                                                            Address                                      
+
+74-1A-E0   (hex)		Private
+900000-9FFFFF     (base 16)		Private
+
+20-85-93   (hex)		IOG Products LLC
+B00000-BFFFFF     (base 16)		IOG Products LLC
+				9737 LURLINE AVENUE
+				CHATSWORTH  CA  91311
+				US
+
+B0-C5-CA   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+B0-1F-81   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+20-85-93   (hex)		Shanghai Kenmyond Industrial Network Equipment Co.,Ltd
+D00000-DFFFFF     (base 16)		Shanghai Kenmyond Industrial Network Equipment Co.,Ltd
+				15/F,NO3003,Baoyang Road,Baoshan District
+				Shanghai  Shanghai  201201
+				CN
+
+20-85-93   (hex)		H3 Industries, Inc.
+A00000-AFFFFF     (base 16)		H3 Industries, Inc.
+				12758 W Deep Canyon Dr.
+				Star  ID  83669
+				US
+
+24-15-10   (hex)		Teknic, Inc.
+B00000-BFFFFF     (base 16)		Teknic, Inc.
+				115 Victor Heights Pkwy
+				14564,Victor  NY  14564
+				US
+
+98-06-37   (hex)		GS GLOBAL SECURITY INC
+500000-5FFFFF     (base 16)		GS GLOBAL SECURITY INC
+				30 Pennsylvania Ave, Unit 16,
+				CONCORD  ONTARIO  L4K 4A5
+				CA
+
+B4-A2-EB   (hex)		Shanghai Shenou Communication Equipment Co., Ltd.
+C00000-CFFFFF     (base 16)		Shanghai Shenou Communication Equipment Co., Ltd.
+				No. 1188, Kungang Road, Songjiang District
+				Shanghai  Shanghai  200000
+				CN
+
+24-15-10   (hex)		GANZHOU DEHUIDA TECHNOLOGY CO., LTD
+500000-5FFFFF     (base 16)		GANZHOU DEHUIDA TECHNOLOGY CO., LTD
+				Dehuida Science and Technology Park, Huoyanshan Road, Anyuan District
+				Ganzhou  Jiangxi  342100
+				CN
+
+24-15-10   (hex)		Nile Global Inc
+200000-2FFFFF     (base 16)		Nile Global Inc
+				10915 Miramonte Rd
+				Cupertino  CA  95014
+				US
+
+24-15-10   (hex)		Helen of Troy
+D00000-DFFFFF     (base 16)		Helen of Troy
+				1 Helen of Troy Plaza
+				El Paso  TX  79912
+				US
+
+98-06-37   (hex)		Zoleo Inc.
+000000-0FFFFF     (base 16)		Zoleo Inc.
+				7a Taymall Avenue
+				Toronto  ON  M8Z 3Y8
+				CA
+
+98-06-37   (hex)		E. P. Schlumberger
+100000-1FFFFF     (base 16)		E. P. Schlumberger
+				1 rue Henri Becquerel
+				Clamart    92140
+				FR
+
+B4-37-D1   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+44-D5-F2   (hex)		SYS TEC electronic GmbH
+A00000-AFFFFF     (base 16)		SYS TEC electronic GmbH
+				Am Windrad 2
+				Heinsdorfergrund   Sachsen  D-08468
+				DE
+
+44-D5-F2   (hex)		Shenzhen Nation RFID Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Shenzhen Nation RFID Technology Co.,Ltd.
+				Room 816, Building A, Yuanzheng Venture Building, No. 19 Langshan Road, Xili Street, Nanshan District
+				ShenZhen  Guangdong  518000
+				CN
+
+D0-5F-64   (hex)		TytoCare LTD.
+800000-8FFFFF     (base 16)		TytoCare LTD.
+				12 Haomanut st., 2nd floor
+				Netanya  Merkaz  4250445
+				IL
+
+D0-5F-64   (hex)		Cyrus Technology GmbH
+600000-6FFFFF     (base 16)		Cyrus Technology GmbH
+				Hergelsbendenstraße 49
+				Aachen    52080
+				DE
+
+D0-5F-64   (hex)		Montblanc-Simplo GmbH
+E00000-EFFFFF     (base 16)		Montblanc-Simplo GmbH
+				Hellgrundweg 100
+				Hamburg  Hamburg  22525
+				DE
+
+44-D5-F2   (hex)		Beam Communications Pty Ltd
+600000-6FFFFF     (base 16)		Beam Communications Pty Ltd
+				U5/8 Anzed Court
+				Mulgrave  Victoria  3170
+				AU
+
+FC-A4-7A   (hex)		Innovative Advantage
+700000-7FFFFF     (base 16)		Innovative Advantage
+				15353 NE 90th Street
+				Redmond   WA  98052
+				US
+
+FC-A4-7A   (hex)		 Shenzhen Elebao Technology Co., Ltd
+A00000-AFFFFF     (base 16)		 Shenzhen Elebao Technology Co., Ltd
+				F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District
+				shenzhen  GUANGDONG  518126
+				CN
+
+FC-A4-7A   (hex)		Shenzhen ALFEYE Technology CO.,Ltd
+C00000-CFFFFF     (base 16)		Shenzhen ALFEYE Technology CO.,Ltd
+				Dingye Business Center321, Building A, Jingbei Industrial Park, No. 82, Intersection of Baoan Avenue and Xin'an 6th Road, Haiyu Community, Xin'an Street, Bao'an District
+				Shenzhen  Guangdong  518000
+				CN
+
+2C-16-BD   (hex)		LINGDONG TECHNOLOGY (BEIJING) CO. LTD
+B00000-BFFFFF     (base 16)		LINGDONG TECHNOLOGY (BEIJING) CO. LTD
+				2603-01, Floor 22, building 2, No.66 Zhongguancun East Road, Haidian District, Beijing
+				Beijing    100080
+				CN
+
+2C-16-BD   (hex)		Beijing CHJ Automotive Co., Ltd.
+C00000-CFFFFF     (base 16)		Beijing CHJ Automotive Co., Ltd.
+				Room 101, Building 1, No. 4 Hengxing Road, Gaoliying, Shunyi District
+				Beijing  Beijing  101303
+				CN
+
+B4-A2-EB   (hex)		Quantitec GmbH
+B00000-BFFFFF     (base 16)		Quantitec GmbH
+				Elisabethenstr. 3a
+				Hofheim am Taunus  Hessen  65719
+				DE
+
+B4-A2-EB   (hex)		CURRENT WAYS, INC.
+900000-9FFFFF     (base 16)		CURRENT WAYS, INC.
+				10221 BUENA VISTA AVE
+				SANTEE  CA  92071
+				US
+
+B4-A2-EB   (hex)		Annapurna labs
+500000-5FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+B4-A2-EB   (hex)		Hengkang（Hangzhou）Co.,Ltd
+A00000-AFFFFF     (base 16)		Hengkang（Hangzhou）Co.,Ltd
+				Industrial Area,Huanghu Town,Yuhang District
+				Hangzhou  Zhejiang  311118
+				CN
+
+8C-59-3C   (hex)		Guralp Systems Limited
+400000-4FFFFF     (base 16)		Guralp Systems Limited
+				3 Midas House
+				Reading  Berkshire  RG7 8EA
+				GB
+
+8C-59-3C   (hex)		Beida Jade Bird Universal Fire Alarm Device CO.,LTD.
+200000-2FFFFF     (base 16)		Beida Jade Bird Universal Fire Alarm Device CO.,LTD.
+				Jade Bird Building C, 207 Chengfu RD, Haidian District
+				Beijing  Beijing  100871
+				CN
+
+8C-59-3C   (hex)		OBO Pro.2 Inc.
+700000-7FFFFF     (base 16)		OBO Pro.2 Inc.
+				2148 Bering Dr.
+				San Jose  CA  95131
+				US
+
+8C-59-3C   (hex)		GENIS
+900000-9FFFFF     (base 16)		GENIS
+				1111, 11F RACREUM, 26 Wiryeseoil-ro
+				Seongnam-si  Gyeonggi-do  13647
+				KR
+
+D0-C8-57   (hex)		Beijing Inspiry Technology Co., Ltd. 
+500000-5FFFFF     (base 16)		Beijing Inspiry Technology Co., Ltd. 
+				Building No. 5, East Zone, No. 10, Xibeiwang East Road, Haidian District
+				Beijing   Beijing   100092
+				CN
+
+BC-97-40   (hex)		Shanghai Laisi Information Technology Co.,Ltd
+500000-5FFFFF     (base 16)		Shanghai Laisi Information Technology Co.,Ltd
+				1001,21#,No.1158 Zhongxin RD,Songjiang district Shanghai
+				shanghai    201614
+				CN
+
+F4-0E-11   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+D0-C8-57   (hex)		E-T-A Elektrotechnische Apparate GmbH
+E00000-EFFFFF     (base 16)		E-T-A Elektrotechnische Apparate GmbH
+				Industriestr. 2-8
+				Altdorf    90518
+				DE
+
+BC-97-40   (hex)		Airfi Oy AB
+700000-7FFFFF     (base 16)		Airfi Oy AB
+				Piilipuunkatu 11
+				RAISIO    21200
+				FI
+
+BC-97-40   (hex)		comtac AG
+100000-1FFFFF     (base 16)		comtac AG
+				Allenwindenstrasse 1
+				Flurlingen    8247
+				CH
+
+BC-97-40   (hex)		Precision Galaxy Pvt. Ltd
+300000-3FFFFF     (base 16)		Precision Galaxy Pvt. Ltd
+				3rd Floor, No.22 Habibullah Road, T Nagar
+				CHENNAI,Tamil Nadu  Tamilnadu  600017
+				IN
+
+60-95-CE   (hex)		Xiamen Sigmastar Technology Ltd.
+600000-6FFFFF     (base 16)		Xiamen Sigmastar Technology Ltd.
+				15th Floor ,Unit A,Chuangxin Building, Software Park, Xiamen Torch Hi-Tech Industrial Development Zone, Xiamen,China
+				Xiamen  Fujian  361005
+				CN
+
+1C-82-59   (hex)		KeyWest Networks, Inc
+B00000-BFFFFF     (base 16)		KeyWest Networks, Inc
+				2200 N Glassell St
+				Orange  CA  92865
+				US
+
+60-95-CE   (hex)		Beijing Sinomedisite Bio-tech Co.,Ltd
+B00000-BFFFFF     (base 16)		Beijing Sinomedisite Bio-tech Co.,Ltd
+				No.9 Kangding Street,Economic-Technological Development Area
+				Beijing  Beijing  100176
+				CN
+
+60-95-CE   (hex)		Siema Applications
+000000-0FFFFF     (base 16)		Siema Applications
+				35 rue Alfred Brinon
+				Villeurbanne    69100
+				FR
+
+60-95-CE   (hex)		Trophy SAS
+800000-8FFFFF     (base 16)		Trophy SAS
+				4 rue F. Pelloutier
+				Croissy-Beaubourg    77435
+				FR
+
+60-95-CE   (hex)		VNS Inc.
+E00000-EFFFFF     (base 16)		VNS Inc.
+				3F, No. 27, Lane 66, Ruiguang Rd.
+				Taipei  Taiwan  11466
+				TW
+
+84-8B-CD   (hex)		exodraft a/s
+500000-5FFFFF     (base 16)		exodraft a/s
+				C. F. Teiegens Boulevard 41
+				Odense SØ    5220
+				DK
+
+1C-82-59   (hex)		3xLOGIC Inc.
+100000-1FFFFF     (base 16)		3xLOGIC Inc.
+				9882 E. 121st Street
+				Fishers  IN  46037
+				US
+
+84-8B-CD   (hex)		CCX Technologies Inc.
+200000-2FFFFF     (base 16)		CCX Technologies Inc.
+				408 - 11 Rosemount Ave.
+				Ottawa  Ontario  K1Y 4R8
+				CA
+
+84-8B-CD   (hex)		TWTG R&D B.V. 
+600000-6FFFFF     (base 16)		TWTG R&D B.V. 
+				Schaardijk 386
+				Capelle aan den IJssel    2909LA
+				NL
+
+B0-FD-0B   (hex)		DMAC Security LLC
+300000-3FFFFF     (base 16)		DMAC Security LLC
+				833 Shotgun Road
+				Sunrise  FL  33326
+				US
+
+B0-FD-0B   (hex)		eSenseLab Ltd.
+800000-8FFFFF     (base 16)		eSenseLab Ltd.
+				1 Chervena stena Str., Office 1
+				Sofia  Sofia-grad  1421
+				BG
+
+B0-FD-0B   (hex)		TEMCO JAPAN CO., LTD.
+A00000-AFFFFF     (base 16)		TEMCO JAPAN CO., LTD.
+				2-21-4 HONAN
+				SUGINAMI KU  Tokyo-to  168-0062
+				JP
+
+C8-2C-2B   (hex)		Grav I.T.
+600000-6FFFFF     (base 16)		Grav I.T.
+				601 1st Ave NW
+				Gravette  AR  72736
+				US
+
+C8-2C-2B   (hex)		Galgus
+100000-1FFFFF     (base 16)		Galgus
+				Italica 1, 1st floor
+				Camas  Seville  41900
+				ES
+
+C8-2C-2B   (hex)		Kunshan SVL Electric  Co.,Ltd
+B00000-BFFFFF     (base 16)		Kunshan SVL Electric  Co.,Ltd
+				No. 568, JuJin Road, Zhangpu Town
+				SuZhou    215300
+				CN
+
+C8-2C-2B   (hex)		Merpa Bilgi Islem Ltd.Sti
+700000-7FFFFF     (base 16)		Merpa Bilgi Islem Ltd.Sti
+				Oztekin CD NO:26
+				Istanbul  Bayrampasa  34040
+				TR
+
+E4-1E-0A   (hex)		SAGE Glass
+800000-8FFFFF     (base 16)		SAGE Glass
+				Two Sage Way
+				Faribault  MN  55021
+				US
+
+C8-2C-2B   (hex)		UBITRON Co.,LTD
+D00000-DFFFFF     (base 16)		UBITRON Co.,LTD
+				Sinbuk-Ro
+				Chuncheon City  Gangwon  24206
+				KR
+
+C8-63-14   (hex)		Autonics Co., Ltd.
+100000-1FFFFF     (base 16)		Autonics Co., Ltd.
+				4-14-26, Shimo-Muneoka
+				Shiki  Saitama  3530003
+				JP
+
+C8-63-14   (hex)		Thinci, Inc.
+800000-8FFFFF     (base 16)		Thinci, Inc.
+				2105 S. Bascom Avenue, Suite 318
+				Campbell  CA  95008
+				US
+
+C8-63-14   (hex)		Maxcom S.A.
+900000-9FFFFF     (base 16)		Maxcom S.A.
+				Towarowa 23A
+				Tychy    43-100
+				PL
+
+FC-D2-B6   (hex)		Bee Smart(Changzhou) Information Technology Co., Ltd
+D00000-DFFFFF     (base 16)		Bee Smart(Changzhou) Information Technology Co., Ltd
+				Changwu Middle Road
+				Changzhou  Jiangsu  213100
+				CN
+
+74-5B-C5   (hex)		CELYSS SAS
+D00000-DFFFFF     (base 16)		CELYSS SAS
+				7 allee des ginkgos
+				Bron    69500
+				FR
+
+FC-D2-B6   (hex)		Coet Costruzioni Elettrotecniche
+300000-3FFFFF     (base 16)		Coet Costruzioni Elettrotecniche
+				Via Civesio 12
+				San Donato Milanese  Mi  20097
+				IT
+
+A8-3F-A1   (hex)		MEDCAPTAIN MEDICAL TECHNOLOGY CO., LTD.
+200000-2FFFFF     (base 16)		MEDCAPTAIN MEDICAL TECHNOLOGY CO., LTD.
+				12th Floor, Baiwang Research Building, No.5158 Shahe West Road, Xili, Nanshan
+				Shenzhen    518055
+				CN
+
+74-5B-C5   (hex)		Fournie Grospaud Energie SASU
+A00000-AFFFFF     (base 16)		Fournie Grospaud Energie SASU
+				220 rue du chene vert
+				LABEGE    31670
+				FR
+
+74-5B-C5   (hex)		ComNot
+C00000-CFFFFF     (base 16)		ComNot
+				15 chemin des Hirondelles
+				DARDILLY    69570
+				FR
+
+4C-BC-98   (hex)		Wonder Workshop
+E00000-EFFFFF     (base 16)		Wonder Workshop
+				1500 Fashion Island, Suite #200
+				San Mateo  CA  94404
+				US
+
+4C-BC-98   (hex)		JSC NIC
+100000-1FFFFF     (base 16)		JSC NIC
+				Nauchny proezd, 6
+				Moscow    117246
+				RU
+
+E4-4C-C7   (hex)		EPS Bio
+C00000-CFFFFF     (base 16)		EPS Bio
+				No. 8, R&D 3rd Rd, Science-Based Industrial Park
+				Hsinchu  Taiwan  30077
+				TW
+
+E4-4C-C7   (hex)		Doowon Electronics & Telecom Co.,Ltd
+200000-2FFFFF     (base 16)		Doowon Electronics & Telecom Co.,Ltd
+				IT 301-408, Ssangyong 3Cha, Bucheon Technopark, 397, Seokcheon-ro, Ojeong-gu
+				Bucheon-si  Gyeonggi-do  14449
+				KR
+
+E0-5A-9F   (hex)		Fibrain
+600000-6FFFFF     (base 16)		Fibrain
+				Zaczernie 190F
+				Zaczernie  Subcarpathia  36-062
+				PL
+
+F8-02-78   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+4C-BC-98   (hex)		Shenzhen Cogitation Technology Co.,Ltd.
+A00000-AFFFFF     (base 16)		Shenzhen Cogitation Technology Co.,Ltd.
+				NO.509 LangShan Building,Nanshan Yungu Innovation Industrial Park,No.1183 Taoyuan Street,Nanshen District
+				Shenzhen  Guangdong  518000
+				CN
+
+E0-5A-9F   (hex)		Gemalto Document Readers
+900000-9FFFFF     (base 16)		Gemalto Document Readers
+				3300 Acorn Street
+				Williamsburg  VA  23188
+				US
+
+D8-86-0B   (hex)		Grünbeck Wasseraufbereitung GmbH
+700000-7FFFFF     (base 16)		Grünbeck Wasseraufbereitung GmbH
+				Josef-Grünbeck-Str. 1
+				Hoechstaedt a.d. Donau    89420
+				DE
+
+D8-86-0B   (hex)		Inspur Group Co., Ltd.
+000000-0FFFFF     (base 16)		Inspur Group Co., Ltd.
+				No.1036 Langchao Rd.
+				Jinan  Shandong  250101
+				CN
+
+D8-86-0B   (hex)		CAMTRACE
+500000-5FFFFF     (base 16)		CAMTRACE
+				26 BIS BOULEVARD HENRI SELLIER
+				SURESNES    92150
+				FR
+
+38-B1-9E   (hex)		System Q Ltd
+B00000-BFFFFF     (base 16)		System Q Ltd
+				Turnoaks Business Park, Hasland
+				Chesterfield  Derbyshire  S40 2WB
+				GB
+
+CC-D3-9D   (hex)		Ethernity Networks
+D00000-DFFFFF     (base 16)		Ethernity Networks
+				Ha-Melacha 13
+				Lod  Israel  7152025
+				IL
+
+CC-D3-9D   (hex)		SHENZHEN ROYOLE TECHNOLOGIES CO., LTD.
+500000-5FFFFF     (base 16)		SHENZHEN ROYOLE TECHNOLOGIES CO., LTD.
+				Building #43, Dayun Software Town, No.8288 Longgang Road, Henggang Street, Longgang District,
+				Shenzhen  Guangdong  518000
+				CN
+
+D4-25-CC   (hex)		Barobo, Inc.
+400000-4FFFFF     (base 16)		Barobo, Inc.
+				221 G Street, #204
+				Davis  CA  95616
+				US
+
+9C-69-B4   (hex)		BEIJING PICOHOOD TECHNOLOGY CO.,LTD
+A00000-AFFFFF     (base 16)		BEIJING PICOHOOD TECHNOLOGY CO.,LTD
+				Room 504A, Building E, Lize Middle Yard, Wangjing Science and Technology Venture Park, Chaoyang District
+				BEIJING  BEIJING  100102
+				CN
+
+9C-69-B4   (hex)		Elesta GmbH
+500000-5FFFFF     (base 16)		Elesta GmbH
+				Heuteilstrasse 18
+				Bad Ragaz  St. Gallen  7310
+				CH
+
+9C-69-B4   (hex)		Toughdog Security Systems
+B00000-BFFFFF     (base 16)		Toughdog Security Systems
+				1317 E Hackberry Ave
+				McAllen  TX  78501
+				US
+
+6C-DF-FB   (hex)		Chongqing Baoli Yota Technologies Limited
+100000-1FFFFF     (base 16)		Chongqing Baoli Yota Technologies Limited
+				No.2,1 Floor,Kelly Building,No.115 Xingtong Avenue,Guilin Street office, Tongnan District
+				Chongqing  Chongqing  402660
+				CN
+
+A4-4F-29   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+4C-91-7A   (hex)		Chongqing Unisinsight Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Chongqing Unisinsight Technology Co.,Ltd.
+				No.117-386, Yunhan Road
+				Beibei District  Chongqing  400714
+				CN
+
+4C-91-7A   (hex)		Shenzhen bankledger Technology Co, Ltd
+D00000-DFFFFF     (base 16)		Shenzhen bankledger Technology Co, Ltd
+				Room 802, Tower A, Yuanzheng Venture Building, No. 19 Langshan Road, Nanshan District
+				Shenzhen     518000
+				CN
+
+6C-DF-FB   (hex)		Beijing Fimi Technology Co., Ltd.
+E00000-EFFFFF     (base 16)		Beijing Fimi Technology Co., Ltd.
+				Room 348, 3F, Complex building A1, Yongtai Park, Qinghe Street, Haidian District, Beijing
+				Beijing    100000
+				CN
+
+6C-DF-FB   (hex)		Beijing Ainemo Co Ltd
+300000-3FFFFF     (base 16)		Beijing Ainemo Co Ltd
+				Building K1,  NO. 86 Beiyuan North road, Chaoyang district, Beijing China
+				Beijing   Beijing  100012
+				CN
+
+4C-91-7A   (hex)		Shenzhen Dangs Science & Technology CO.,LTD
+000000-0FFFFF     (base 16)		Shenzhen Dangs Science & Technology CO.,LTD
+				7D, 7th Floor, HSAE Building, Nanshan District,
+				Shenzhen  GuangDong  518000
+				CN
+
+7C-BC-84   (hex)		Nanning auto digital technology co.,LTD
+500000-5FFFFF     (base 16)		Nanning auto digital technology co.,LTD
+				3/f, no.6 guichun road, qingxiu district
+				Nanning  Guangxi  530021
+				CN
+
+98-F9-C7   (hex)		Koala Technology CO., LTD.
+900000-9FFFFF     (base 16)		Koala Technology CO., LTD.
+				Room 2004, Building A3, Dayuan International Center, High Tech Zone
+				Chengdu  Sichuan  610000
+				CN
+
+6C-DF-FB   (hex)		Hashtrend AG
+700000-7FFFFF     (base 16)		Hashtrend AG
+				Bahnhofstrasse
+				Zug    6300
+				CH
+
+98-F9-C7   (hex)		GoodBox
+600000-6FFFFF     (base 16)		GoodBox
+				Ground Floor, Optimum House
+				Clippers Quay  Salford Quays  M50 3XP
+				GB
+
+98-F9-C7   (hex)		Tonycore Technology Co.,Ltd.
+500000-5FFFFF     (base 16)		Tonycore Technology Co.,Ltd.
+				2/F,Building A,Dingxin Technology Park,Honglang North 2nd Road,Xin’an Street,Bao’an District,
+				Shenzhen  Guangdong  518000
+				CN
+
+98-F9-C7   (hex)		hangzhou soar security technologies limited liability company
+D00000-DFFFFF     (base 16)		hangzhou soar security technologies limited liability company
+				Zhebao Ideal Xiangyuan Creative industrial Park
+				Hangzhou  Zhejiang  Zhejiang
+				CN
+
+2C-48-35   (hex)		IROOTECH TECHNOLOGY CO.,LTD
+E00000-EFFFFF     (base 16)		IROOTECH TECHNOLOGY CO.,LTD
+				Room 606, Floor 6, Building 5, Eastern Yard 10, Xibeiwang East Road
+				Beijing    100092
+				CN
+
+0C-FE-5D   (hex)		NEWGREEN TECH CO., LTD.
+E00000-EFFFFF     (base 16)		NEWGREEN TECH CO., LTD.
+				2F., No.200, Sec. 2, Gaotie N. Rd., Dayuan Dist., Taoyuan City 337, Taiwan (R.O.C.)
+				Taoyuan City    33743
+				TW
+
+0C-FE-5D   (hex)		Bepal Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Bepal Technology Co.,Ltd.
+				Xihu Qu, Tianmushan Road, Qianjiang Xixi Xinzuo
+				HangZhou  ZheJiang  310000
+				CN
+
+3C-39-E7   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+0C-FE-5D   (hex)		Chengdu Ledong Information & Technology Co., Ltd. 
+000000-0FFFFF     (base 16)		Chengdu Ledong Information & Technology Co., Ltd. 
+				D7-13F, Chengdu Tianfu Software Park, No. 599 Shijicheng South street, Gaoxin District, Chengdu, China
+				Chengdu  sichaun  610041
+				CN
+
+6C-5C-3D   (hex)		GUANGZHOU GUANGRI ELEVATOR INDUSTRY CO.,LTD
+800000-8FFFFF     (base 16)		GUANGZHOU GUANGRI ELEVATOR INDUSTRY CO.,LTD
+				636 South of Guomao Road,Shilou County,Panyu District
+				Guangzhou  Guangdong  511047
+				CN
+
+6C-5C-3D   (hex)		ShenZhen Hugsun Technology Co.,Ltd.
+000000-0FFFFF     (base 16)		ShenZhen Hugsun Technology Co.,Ltd.
+				413~415 Room, 4/F, No.6 Bldg., TongFuYu Industrial Park, Dalang Street, 518109, Longhua New District,
+				ShengZhen  GuangDong  518109
+				CN
+
+6C-5C-3D   (hex)		Unitel Engineering
+500000-5FFFFF     (base 16)		Unitel Engineering
+				2-я Кабельная д.2 стр.1
+				Москва  Россия  111024
+				RU
+
+A8-3F-A1   (hex)		BEGLEC
+600000-6FFFFF     (base 16)		BEGLEC
+				hofveld 2c
+				Groot-Bijgaarden    1702
+				BE
+
+1C-FD-08   (hex)		ShenZhen DeLippo Technology Co., LTD
+800000-8FFFFF     (base 16)		ShenZhen DeLippo Technology Co., LTD
+				District A of Fifth Floor,Building E,Guancheng Low Carbon Industrial Park, Shangcun Community,Gongming Street,Guangming District
+				Shenzhen    518106
+				CN
+
+A8-3F-A1   (hex)		Neos Ventures Limited
+800000-8FFFFF     (base 16)		Neos Ventures Limited
+				47 Bermondsey Street
+				London    SE1 3XT
+				GB
+
+A8-3F-A1   (hex)		GTDevice LLC
+100000-1FFFFF     (base 16)		GTDevice LLC
+				PO BOX 86339
+				Portland  OR  97286
+				US
+
+E8-18-63   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+3C-6A-2C   (hex)		TP Radio
+800000-8FFFFF     (base 16)		TP Radio
+				Agenavej 37
+				Greve  .  2670
+				DK
+
+3C-6A-2C   (hex)		Xiamen Smarttek CO., Ltd.
+D00000-DFFFFF     (base 16)		Xiamen Smarttek CO., Ltd.
+				5F, B Area, Chuangxin Plaza, SoftPark I, Siming District
+				Xiamen  Fujian  361005
+				CN
+
+3C-6A-2C   (hex)		Eltov System
+C00000-CFFFFF     (base 16)		Eltov System
+				#1309 Gyeonggi Venture Yeonsung Univ Center. 111, Anyang-ro, Manan-gu,
+				Anyang-si    14093
+				KR
+
+3C-6A-2C   (hex)		Metro
+A00000-AFFFFF     (base 16)		Metro
+				189 rue de la Jonchere
+				Boege    74420
+				FR
+
+3C-6A-2C   (hex)		Olibra LLC
+100000-1FFFFF     (base 16)		Olibra LLC
+				45 legin dr
+				creskill  NJ  07626
+				US
+
+3C-6A-2C   (hex)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
+400000-4FFFFF     (base 16)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
+				5F,Building C,CLP Park,No.211, Tiangu 8 Road, High-tech Zone, Xi' an, Shanxi Province, China
+				Xi’an  Shanxi   710001
+				CN
+
+A4-ED-43   (hex)		Wuxi Junction Infomation Technology Incorporated Company
+700000-7FFFFF     (base 16)		Wuxi Junction Infomation Technology Incorporated Company
+				ROOM919,NO.401 XINGYUANBEILU ROAD, LIANGXI DISTRIC,WUXI CITY,JIANGSU PROVINCE
+				WuXi  Jiangsu  214000
+				CN
+
+30-0A-60   (hex)		Ampetronic Ltd
+A00000-AFFFFF     (base 16)		Ampetronic Ltd
+				Unit 2 Trentside Business Village, Farndon Road
+				Newark  Nottinghamshire  NG24 4XB
+				GB
+
+30-0A-60   (hex)		WINTEK System Co., Ltd
+900000-9FFFFF     (base 16)		WINTEK System Co., Ltd
+				Wintek Venture Bldg., 511, Poil-Dong
+				Uiwang-City  Gyunggi-Do  16013
+				KR
+
+30-0A-60   (hex)		Giax GmbH
+B00000-BFFFFF     (base 16)		Giax GmbH
+				Am Weichselgarten 7
+				Erlangen    91058
+				DE
+
+30-0A-60   (hex)		Thermo Process Instruments, LP
+C00000-CFFFFF     (base 16)		Thermo Process Instruments, LP
+				27 Forge Parkway
+				Frankllin  MA  02038
+				US
+
+A0-28-33   (hex)		Xiamen Caimore Communication Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Xiamen Caimore Communication Technology Co.,Ltd.
+				 #2 of 302 Unit, 23# Wanghai Road, Xiamen Software Park II
+				Xiamen  Fujian  361009
+				CN
+
+A0-28-33   (hex)		GERSYS GmbH
+000000-0FFFFF     (base 16)		GERSYS GmbH
+				Hans-Urmiller-Ring 12A
+				Wolfratshausen    82515
+				DE
+
+A4-ED-43   (hex)		Brand New Brand Nordic AB
+D00000-DFFFFF     (base 16)		Brand New Brand Nordic AB
+				Nohrstedts väg 5
+				Söderbärke    77794
+				SE
+
+A4-ED-43   (hex)		Linseis Messgeraete GmbH
+800000-8FFFFF     (base 16)		Linseis Messgeraete GmbH
+				Vielitzer Str. 43                      
+				Selb    95100
+				DE
+
+A0-28-33   (hex)		Audix
+D00000-DFFFFF     (base 16)		Audix
+				9400 SW Barber St. 
+				Wilsonville  OR  97070
+				US
+
+A0-28-33   (hex)		Shanghai Nohmi Secom Fire Protection  Equipment Co.,Ltd.
+200000-2FFFFF     (base 16)		Shanghai Nohmi Secom Fire Protection  Equipment Co.,Ltd.
+				No.98,Lane 1971,(s)Lianhua Road,Minhang Area
+				Shanghai  Shanghai  201108
+				CN
+
+84-89-EC   (hex)		Shenzhen Intellifusion Technologies Co., Ltd.
+E00000-EFFFFF     (base 16)		Shenzhen Intellifusion Technologies Co., Ltd.
+				Suite701, Science Museum, Shenzhen City
+				Shenzhen  Guangdong  518000
+				CN
+
+00-55-DA   (hex)		Victorsure Limited
+E00000-EFFFFF     (base 16)		Victorsure Limited
+				15/F Cambridge house, 26-28 Cameron Road
+				Hong Kong  Hong Kong  Hong Kong
+				HK
+
+84-89-EC   (hex)		Research Electronics International, LLC.
+100000-1FFFFF     (base 16)		Research Electronics International, LLC.
+				455 Secuity Drive
+				Cookeville  TN  38506
+				US
+
+30-09-F9   (hex)		OOO Microlink-Svyaz
+300000-3FFFFF     (base 16)		OOO Microlink-Svyaz
+				1st veshnjakovsky proezd 7
+				moscow   moscow   109456
+				RU
+
+84-89-EC   (hex)		Arts Digital Technology (HK) Ltd.
+800000-8FFFFF     (base 16)		Arts Digital Technology (HK) Ltd.
+				1704, 17/F, Fo Tan Industrial Centre, 26-28 Au Pui Wan Street, Fo Tan, Hong Kong
+				Hong Kong    Nil
+				HK
+
+84-89-EC   (hex)		Vayyar Imaging Ltd.
+400000-4FFFFF     (base 16)		Vayyar Imaging Ltd.
+				3 Avraham Giron St
+				Yehud    5621717
+				IL
+
+84-89-EC   (hex)		POCT biotechnology
+600000-6FFFFF     (base 16)		POCT biotechnology
+				6F, No. 185, GangQian Rd., Neihu dist.,
+				Taipei    11494
+				TW
+
+30-09-F9   (hex)		Technology for Humankind
+D00000-DFFFFF     (base 16)		Technology for Humankind
+				3913 N. Rushwood St.
+				Wichita  KS  67226
+				US
+
+C0-83-59   (hex)		SHANGHAI CHARMHOPE INFORMATION TECHNOLOGY CO.,LTD.
+A00000-AFFFFF     (base 16)		SHANGHAI CHARMHOPE INFORMATION TECHNOLOGY CO.,LTD.
+				Building 11,No.230,Chuanhong Rd,Pudong Distrist
+				Shanghai  Shanghai  201202
+				CN
+
+9C-F6-DD   (hex)		Ithor IT Co.,Ltd.
+100000-1FFFFF     (base 16)		Ithor IT Co.,Ltd.
+				No. 501, Building I, ZTE Park, Hi-Tech Industrial Zone
+				XI'AN  ShanXi  710065
+				CN
+
+9C-F6-DD   (hex)		Guangzhou LANGO Electronics Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Guangzhou LANGO Electronics Technology Co., Ltd.
+				136#, Gaopu Road, Tianhe District
+				Guangzhou  Guangdong  510663
+				CN
+
+9C-F6-DD   (hex)		CAMA（Luoyang）Electronics Co.，Ltd
+900000-9FFFFF     (base 16)		CAMA（Luoyang）Electronics Co.，Ltd
+				Luoyang High-tech District, Chuncheng Road 16th.
+				Luoyang  Henan  471003
+				CN
+
+C0-83-59   (hex)		Suzhou Siheng Science and Technology Ltd.
+B00000-BFFFFF     (base 16)		Suzhou Siheng Science and Technology Ltd.
+				8 floor of Jincheng star, Yunhe road NO.150, gaoxin Zone, Suzhou
+				Suzhou    215000
+				CN
+
+C0-83-59   (hex)		ista International GmbH
+800000-8FFFFF     (base 16)		ista International GmbH
+				Luxemburger Strasse 1
+				Essen  NRW  45131
+				DE
+
+C0-83-59   (hex)		Fuzhou Fdlinker Technology Co.,LTD
+700000-7FFFFF     (base 16)		Fuzhou Fdlinker Technology Co.,LTD
+				28th floor, Building 1, area F, Fuzhou software park, 89 Ruanjian Avenue
+				Fuzhou  Fujian  350001
+				CN
+
+04-C3-E6   (hex)		Teleepoch Ltd
+E00000-EFFFFF     (base 16)		Teleepoch Ltd
+				No.13 Langshan Rd,HiTech Park,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+04-C3-E6   (hex)		Sealed Unit Parts Co., Inc.
+A00000-AFFFFF     (base 16)		Sealed Unit Parts Co., Inc.
+				2230 Landmark Place
+				ALLENWOOD  NJ  08720
+				US
+
+C0-83-59   (hex)		PCH Engineering A/S
+300000-3FFFFF     (base 16)		PCH Engineering A/S
+				Ved Klaedebo 4
+				Horsholm    2970
+				DK
+
+B4-4B-D6   (hex)		DongYoung media
+B00000-BFFFFF     (base 16)		DongYoung media
+				#18, Dangjeong-Ro, Gunpo-Si,
+				Gyeonggi-Do,    15849
+				KR
+
+B4-4B-D6   (hex)		Perspicace Intellegince Technology
+600000-6FFFFF     (base 16)		Perspicace Intellegince Technology
+				4F, 1326#, West YanAn road, Shanghai, P.R.China
+				ShangHai  ShangHai  200052
+				CN
+
+3C-42-7E   (hex)		Shenzhen VETAS Communication Technology Co , Ltd.
+300000-3FFFFF     (base 16)		Shenzhen VETAS Communication Technology Co , Ltd.
+				Room 1301-1303,West Wing,Skyworth Semiconductor Design Building,No.18,Gaoxin South 4th road, Nanshan District
+				ShenZhen  Guangdong  518063
+				CN
+
+3C-42-7E   (hex)		Privacy Labs
+C00000-CFFFFF     (base 16)		Privacy Labs
+				10400 NE 4th Street, 7th Floor
+				Bellevue  WA  98004
+				US
+
+3C-42-7E   (hex)		Starloop Tech Co., Ltd.
+200000-2FFFFF     (base 16)		Starloop Tech Co., Ltd.
+				#643, Meinian Plaza A
+				Chengdu    610000
+				CN
+
+3C-42-7E   (hex)		Geoplan Korea
+500000-5FFFFF     (base 16)		Geoplan Korea
+				Simin-ro 327-7 DaeMyung Bldg #614
+				AnYang    15044
+				KR
+
+B4-4B-D6   (hex)		Huizhou Sunoda Technology Co. Ltd
+300000-3FFFFF     (base 16)		Huizhou Sunoda Technology Co. Ltd
+				NO.4 XING JU WEST ROAD,DONG XING DISTRICT,ZHONG KAI DONG JIANG HIGH TECHNOLOGY INDUSTRIAL PARK,
+				HUI ZHOU  guangdong  516000
+				CN
+
+B4-4B-D6   (hex)		Shenzhen Hi-Net Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Shenzhen Hi-Net Technology Co., Ltd.
+				3F, 4Building, Anda Industrial Zone, Chongqing Road, Fuyong Town, Baoan District
+				ShenZhen  GuangDong  518103
+				CN
+
+B4-4B-D6   (hex)		Taizhou convergence Information technology Co.,LTD
+700000-7FFFFF     (base 16)		Taizhou convergence Information technology Co.,LTD
+				Room 1006,general chamber of commerce,159 henghu road
+				wenling  zhejiang  317515
+				CN
+
+B4-4B-D6   (hex)		G4S Monitoring Technologies Ltd
+000000-0FFFFF     (base 16)		G4S Monitoring Technologies Ltd
+				3 Centurion Court, Meridian East
+				Leicester  Leicestershire  LE19 1TP
+				GB
+
+D4-7C-44   (hex)		SHENZHEN ANYSEC TECHNOLOGY CO. LTD
+E00000-EFFFFF     (base 16)		SHENZHEN ANYSEC TECHNOLOGY CO. LTD
+				601, 1 BUILDING,MeiLin Dolly Industrial Zone,Futian District
+				SHENZHEN  GuangDong  518000
+				CN
+
+D4-7C-44   (hex)		Pongee Industries Co., Ltd.
+700000-7FFFFF     (base 16)		Pongee Industries Co., Ltd.
+				5F., No.738, Chung-Cheng Road,
+				Chung-Ho District,  New Taipei City,   23511
+				TW
+
+A0-19-B2   (hex)		ARIMA Communications Corp.
+700000-7FFFFF     (base 16)		ARIMA Communications Corp.
+				6F.,No.866,Zhongzheng Rd.,Zhonghe Dist.,
+				New Taipei City  Taiwan  23586
+				TW
+
+A0-19-B2   (hex)		GfG mbH
+600000-6FFFFF     (base 16)		GfG mbH
+				Kloennestrasse 99
+				Dortmund    44143
+				DE
+
+1C-A0-D3   (hex)		Exicom Tele-Systems Ltd.
+E00000-EFFFFF     (base 16)		Exicom Tele-Systems Ltd.
+				Plot Number 77A, IFFCO Road, Sector 18
+				Gurgaon  Haryana  122015
+				IN
+
+A0-19-B2   (hex)		HangZhou iMagic Technology Co., Ltd 
+B00000-BFFFFF     (base 16)		HangZhou iMagic Technology Co., Ltd 
+				Block F, 11th Floor, Building A, Tiantang Software Park, 3# Xidoumen Road, 
+				Hangzhou  Zhejiang  310012
+				CN
+
+A0-19-B2   (hex)		RYD Electronic Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		RYD Electronic Technology Co.,Ltd.
+				Room1602,No68 Taidong Road,Siming District,Xiamen City
+				Xiamen  FuJian  361000
+				CN
+
+D4-7C-44   (hex)		STRIVE ORTHOPEDICS INC
+C00000-CFFFFF     (base 16)		STRIVE ORTHOPEDICS INC
+				505 PARK AVE FL 17
+				NEW YORK  NY  10022
+				US
+
+D4-7C-44   (hex)		OPTiM Corporation
+B00000-BFFFFF     (base 16)		OPTiM Corporation
+				1 Honjo-machi
+				Saga    840-8502
+				JP
+
+2C-48-35   (hex)		Phasor Solutions Ltd
+D00000-DFFFFF     (base 16)		Phasor Solutions Ltd
+				The Record Hall, 16 Baldwin Gardens
+				London    EC1N 7RJ
+				GB
+
+2C-48-35   (hex)		FAST
+700000-7FFFFF     (base 16)		FAST
+				4740 44th Ave SW Suite #201
+				Seattle  WA  98116
+				US
+
+3C-24-F0   (hex)		Swissdotnet SA
+700000-7FFFFF     (base 16)		Swissdotnet SA
+				Route Saint-Nicolas-de-Flüe 2
+				Fribourg    1700
+				CH
+
+0C-73-EB   (hex)		U-PASS.CO.,LTD
+400000-4FFFFF     (base 16)		U-PASS.CO.,LTD
+				HANEULMAEUL-RO 
+				GYEONGGI-DO  GOYANG-SI,ILSANDONG-GU  410315
+				KR
+
+48-0B-B2   (hex)		Microprogram Information Co., Ltd
+900000-9FFFFF     (base 16)		Microprogram Information Co., Ltd
+				14F., No.262, Sec. 2, Henan Rd., Xitun Dist.
+				Taichung    407
+				TW
+
+48-0B-B2   (hex)		Hangzhou Freely Communication Co., Ltd.
+400000-4FFFFF     (base 16)		Hangzhou Freely Communication Co., Ltd.
+				No. 90 Wensan, Hangzhou, Zhejiang
+				Hangzhou   Zhejiang  310012
+				CN
+
+48-0B-B2   (hex)		BravoCom（xiamen）TechCo.Ltd
+800000-8FFFFF     (base 16)		BravoCom（xiamen）TechCo.Ltd
+				Room 506, Chengye Building lnnovation park Xiamen Torch Hi-Tech Zone Xiamen fujian P.R.China
+				Xiamen  fujian  361000
+				CN
+
+48-0B-B2   (hex)		SHENZHEN TOPWELL TECHNOLOGY CO..LTD
+C00000-CFFFFF     (base 16)		SHENZHEN TOPWELL TECHNOLOGY CO..LTD
+				5th Floor, Building 10 Changyuan New Material 
+				Port,No.2,Middle Road 1, High Tech Park,  Nanshan District,Shenzhen  518001
+				CN
+
+88-5F-E8   (hex)		Changsha Xiangji-Haidun Technology Co., Ltd
+800000-8FFFFF     (base 16)		Changsha Xiangji-Haidun Technology Co., Ltd
+				NO.5 Dongsan Rd, Changsha Economic & Technical Zone
+				Changsha  HuNan  410100
+				CN
+
+30-1F-9A   (hex)		Smart Component Technologies LTD
+B00000-BFFFFF     (base 16)		Smart Component Technologies LTD
+				Cooper Buildings, Arundel Street
+				Sheffield  South Yorkshire  S1 2NS
+				GB
+
+30-1F-9A   (hex)		CHISON Medical Technologies Co., Ltd.
+200000-2FFFFF     (base 16)		CHISON Medical Technologies Co., Ltd.
+				No.9, Xinhuihuan Road, Xinwu District, Wuxi, Jiangsu, China 214028
+				WUXI  JIANGSU  214028
+				CN
+
+88-5F-E8   (hex)		Shenzhen ORVIBO Technology Co., Ltd
+B00000-BFFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd
+				7F, A7 Zhiyuan, No.1001, Xueyuan AV., Nanshan district, Shenzhen,518055,PRC
+				 Shenzhen  guangdong  518000
+				CN
+
+88-5F-E8   (hex)		Apoidea Technology Co., Ltd.
+100000-1FFFFF     (base 16)		Apoidea Technology Co., Ltd.
+				No. 111, Boyun Road
+				Shanghai    201203
+				CN
+
+F0-41-C8   (hex)		ATN Media Group FZ LLC
+D00000-DFFFFF     (base 16)		ATN Media Group FZ LLC
+				Business Bay-alabrj st Business Towar By Damac.office-807
+				Dubai    25051
+				AE
+
+F0-41-C8   (hex)		Telstra
+A00000-AFFFFF     (base 16)		Telstra
+				231 Elisabeth St
+				SYDNEY  NSW  2000
+				AU
+
+88-A9-A7   (hex)		Shenzhenshi kechuangzhixian technology Co.LTD
+000000-0FFFFF     (base 16)		Shenzhenshi kechuangzhixian technology Co.LTD
+				Room 14G,14th Floor, Langshi Building , keji South Road 12 , High-tech Industrial Park , Nanshan District
+				Shenzhen    518000
+				CN
+
+88-A9-A7   (hex)		Volterman Inc.
+500000-5FFFFF     (base 16)		Volterman Inc.
+				Suite B2, Sunset Lake Road
+				Newark  DE  19702
+				US
+
+88-A9-A7   (hex)		AVLINK INDUSTRIAL CO., LTD
+D00000-DFFFFF     (base 16)		AVLINK INDUSTRIAL CO., LTD
+				7/F, A1 Bldg, 1st Shuichanjingwan Industrial Park, Nanchang Village, Gushu, Bao'an Dist 
+				Shenzhen  Guangdong  518126
+				CN
+
+F0-41-C8   (hex)		DongGuan Siyoto Electronics Co., Ltd       
+100000-1FFFFF     (base 16)		DongGuan Siyoto Electronics Co., Ltd       
+				Hecheng Industrial District, QiaoTou Town
+				DongGuan City  Guangdong  523520
+				CN
+
+F0-41-C8   (hex)		Candelic Limited
+400000-4FFFFF     (base 16)		Candelic Limited
+				Unit 312, 3/F Solo Workshop, 131-132 Cannaught Road West
+				Hong Kong    111111
+				HK
+
+A4-DA-22   (hex)		Shen Zhen City YaKun Electronics Co., Ltd
+D00000-DFFFFF     (base 16)		Shen Zhen City YaKun Electronics Co., Ltd
+				SOUTHERN BUILDING 5388 Shang Bu  Industrial Zone Huaqiang North Road Futian District
+				shen zhen city  Guang Dong Province  518000
+				CN
+
+A4-DA-22   (hex)		Klashwerks Inc.
+B00000-BFFFFF     (base 16)		Klashwerks Inc.
+				441 Maclaren Street, Suite 408
+				Ottawa  ON  K2P2H3
+				CA
+
+A4-DA-22   (hex)		Hydro Electronic Devices, Inc.
+700000-7FFFFF     (base 16)		Hydro Electronic Devices, Inc.
+				2120 Constitution Ave
+				Hartford  WI  53027
+				US
+
+A4-DA-22   (hex)		DURATECH Enterprise,LLC
+300000-3FFFFF     (base 16)		DURATECH Enterprise,LLC
+				NO.1013,184,Gasan digital 2-ro,Geumcheon-gu,Seoul
+				Seoul    08501
+				KR
+
+A4-DA-22   (hex)		LORIOT AG
+400000-4FFFFF     (base 16)		LORIOT AG
+				Zuercherstrasse 68
+				Thalwil  Zürich  8800
+				CH
+
+A4-DA-22   (hex)		T2T System
+100000-1FFFFF     (base 16)		T2T System
+				#316, HYUNDAI Knowledge Industry Center, 70, Dusan-ro
+				Geumcheon-gu  Seoul  08584
+				KR
+
+A4-DA-22   (hex)		Original Products Pvt. Ltd.
+500000-5FFFFF     (base 16)		Original Products Pvt. Ltd.
+				B-19, Shiv Park, School Road, Khanpur 
+				New Delhi  New Delhi  110062
+				IN
+
+DC-E5-33   (hex)		Tintel Hongkong Co.Ltd
+B00000-BFFFFF     (base 16)		Tintel Hongkong Co.Ltd
+				FLAT C,23/F,LUCKY PLAZA,315-321 LOCKHART ROAD,WANCHAI,HONGKONG
+				HONGKONG  GUANG DONG PROVINCE  999077
+				HK
+
+DC-E5-33   (hex)		JB-Lighting Lichtanlagen GmbH
+800000-8FFFFF     (base 16)		JB-Lighting Lichtanlagen GmbH
+				Sallersteig 15
+				89134    89134
+				DE
+
+C4-FF-BC   (hex)		GSM Innovations Pty Ltd
+900000-9FFFFF     (base 16)		GSM Innovations Pty Ltd
+				142-144 Fullarton Road
+				Rose Park  SA  5067
+				AU
+
+DC-E5-33   (hex)		Remko GmbH & Co. KG
+200000-2FFFFF     (base 16)		Remko GmbH & Co. KG
+				Im Seelenkamp 12
+				Lage    32791
+				DE
+
+DC-E5-33   (hex)		Ambi Labs Limited
+100000-1FFFFF     (base 16)		Ambi Labs Limited
+				1903, 19/F, Loon Lee Building, 267-275 Des Voeux Road Central., Sheung Wan, Hong Kong
+				Hong Kong  Hong Kong  00000
+				HK
+
+C4-FF-BC   (hex)		comtime GmbH
+500000-5FFFFF     (base 16)		comtime GmbH
+				Gutenbergring 22
+				Norderstedt    22848
+				US
+
+C4-FF-BC   (hex)		VISATECH C0., LTD.
+100000-1FFFFF     (base 16)		VISATECH C0., LTD.
+				C-312 168, Gasan digital 1-ro
+				 Geumcheon-gu   Seoul  08507
+				KR
+
+1C-21-D1   (hex)		p2-plus inc.
+E00000-EFFFFF     (base 16)		p2-plus inc.
+				12F.-6,No.5,Sec.3,new taipei Blvd., Sinjhuang Dist.,
+				new taipei  taiwan  24250
+				TW
+
+34-29-8F   (hex)		Albert Handtmann Maschinenfabrik GmbH&Co.KG
+C00000-CFFFFF     (base 16)		Albert Handtmann Maschinenfabrik GmbH&Co.KG
+				Hubertus-Liebrecht-Str. 10-12
+				Biberach    88400
+				DE
+
+9C-43-1E   (hex)		HK ELEPHONE Communication Tech Co.,Limited
+D00000-DFFFFF     (base 16)		HK ELEPHONE Communication Tech Co.,Limited
+				Unit 04, 7/F Bright Way Tower No.33 Mong Kok Rd KL
+				Hong Kong     999077
+				HK
+
+28-2C-02   (hex)		Tokin Limited
+A00000-AFFFFF     (base 16)		Tokin Limited
+				Unit 513-4, Block A, Focal Industrial Centre, 21 Man Lok Street, Hung Hom
+				Kowloon    0000
+				HK
+
+28-2C-02   (hex)		LLC MICROTEH
+500000-5FFFFF     (base 16)		LLC MICROTEH
+				pl.5 bldg.2/3 Akademika Anokhina str. 
+				Moscow    119602
+				RU
+
+28-2C-02   (hex)		ThirdReality, Inc
+B00000-BFFFFF     (base 16)		ThirdReality, Inc
+				647 East Longhua Road, Huangpu District
+				Shanghai  Shanghai  200023
+				CN
+
+9C-43-1E   (hex)		Antailiye Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Antailiye Technology Co.,Ltd
+				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen
+				SHEN ZHEN  GUANGDONG  518000
+				CN
+
+F8-B5-68   (hex)		Dongwoo Engineering Co.,Ltd
+300000-3FFFFF     (base 16)		Dongwoo Engineering Co.,Ltd
+				#311, dREC Techno 9-ro, Yuseong-gu
+				Daegeon    34027
+				KR
+
+F8-B5-68   (hex)		LifePrint Products, Inc.
+000000-0FFFFF     (base 16)		LifePrint Products, Inc.
+				4667 Golden Foothill Parkway, Suite 102
+				El Dorado Hills  CA  95762
+				US
+
+F8-B5-68   (hex)		etectRx
+500000-5FFFFF     (base 16)		etectRx
+				107 SW 140th Terr., Ste. 1
+				Newberry  FL  32669
+				US
+
+F8-B5-68   (hex)		Combiwins Technology Co.,Limited
+400000-4FFFFF     (base 16)		Combiwins Technology Co.,Limited
+				2F Sever Star Mansion, West Qixing Road 
+				Xiamen  Fujian  361012
+				CN
+
+28-2C-02   (hex)		SAKATA DENKI Co., Ltd.
+000000-0FFFFF     (base 16)		SAKATA DENKI Co., Ltd.
+				Yagisawa2-17-20
+				NishiTokyo-city  Tokyo  202-0022
+				JP
+
+38-73-EA   (hex)		Annapurna labs
+D00000-DFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+38-73-EA   (hex)		Shenzhen Jixian Technology Co., Ltd.
+E00000-EFFFFF     (base 16)		Shenzhen Jixian Technology Co., Ltd.
+				4F, Building A, Tongfang Information Harbor, No.11, Langshan Road, North Area of High-tech Park, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+40-48-FD   (hex)		Plus One Global Ltd.
+900000-9FFFFF     (base 16)		Plus One Global Ltd.
+				2-8-6,Nishishinbashi
+				Minato-ku  Tokyo  105-0003
+				JP
+
+38-73-EA   (hex)		PingGPS Inc
+700000-7FFFFF     (base 16)		PingGPS Inc
+				19825 North Cove Road, #173
+				CORNELIUS  NC  28031
+				US
+
+38-73-EA   (hex)		SHENZHEN CSE TECHNOLOGY CO., LTD
+A00000-AFFFFF     (base 16)		SHENZHEN CSE TECHNOLOGY CO., LTD
+				2F,3Building,Xinlianhe Industrial Park,Jinxiu Road,Western Industrial Zone, Shajing Town,Baoan,
+				Shenzhen  Guangdong  518000
+				CN
+
+38-73-EA   (hex)		Proch plastic Co., Ltd.
+300000-3FFFFF     (base 16)		Proch plastic Co., Ltd.
+				7F No.189 Xinhu 3rd Rd. Neihu Dist.
+				Taipei city  ---  114
+				TW
+
+38-73-EA   (hex)		LG Electronics
+C00000-CFFFFF     (base 16)		LG Electronics
+				51, Gasan Digital1-ro, Geumcheon-gu
+				Seoul    08592
+				KR
+
+34-D0-B8   (hex)		Captec Ltd
+000000-0FFFFF     (base 16)		Captec Ltd
+				7 Whittle Avenue
+				Fareham  Hampshire  PO15 5SH
+				GB
+
+8C-14-7D   (hex)		Anyware Solutions ApS
+900000-9FFFFF     (base 16)		Anyware Solutions ApS
+				Monrads Alle 9
+				Valby  Sjaelland  2500
+				DK
+
+34-D0-B8   (hex)		Meatest sro
+A00000-AFFFFF     (base 16)		Meatest sro
+				Zelezna 509/3
+				Brno    61900
+				CZ
+
+EC-9F-0D   (hex)		WisIOE
+400000-4FFFFF     (base 16)		WisIOE
+				Room 601, Hongyuan Building, Baoyuan Road, Xixiang Street, Baoan District 
+				Shenzhen  Guangdong  518000
+				CN
+
+AC-1D-DF   (hex)		Elekon AG
+D00000-DFFFFF     (base 16)		Elekon AG
+				Cheerstrasse 16
+				Luzern    6014
+				CH
+
+AC-1D-DF   (hex)		HellaStorm, Inc.
+100000-1FFFFF     (base 16)		HellaStorm, Inc.
+				12655 Edison Drive, Suite 250
+				Alpharetta  GA  30005
+				US
+
+AC-1D-DF   (hex)		WESCO INTEGRATED SUPPLY
+A00000-AFFFFF     (base 16)		WESCO INTEGRATED SUPPLY
+				36 HARBOR PARK DRIVE
+				PORT WASHINGTON  NY  11050
+				US
+
+74-1A-E0   (hex)		FUJIAN TAILI COMMUNICATION TECHNOLOGY CO.,LTD
+500000-5FFFFF     (base 16)		FUJIAN TAILI COMMUNICATION TECHNOLOGY CO.,LTD
+				Cangshan science and technology park, Baihuting,Cangshan District, Fuzhou
+				FUZHOU    350026
+				CN
+
+74-1A-E0   (hex)		NURA HOLDINGS PTY LTD
+200000-2FFFFF     (base 16)		NURA HOLDINGS PTY LTD
+				349 Brunswick Rd
+				Brunswick  VIC  3056
+				AU
+
+74-1A-E0   (hex)		bistos.co.ltd
+C00000-CFFFFF     (base 16)		bistos.co.ltd
+				7floor, worim lions vally 5cha
+				sungnam  kyeunggi-do  13201
+				KR
+
+74-1A-E0   (hex)		Huano International Technology Limited
+000000-0FFFFF     (base 16)		Huano International Technology Limited
+				Room 402, Building A, ChuangXin Technology Plaza(Phase 1),Chegongmiao, Futian District, 
+				Shenzhen    518000
+				CN
+
+74-1A-E0   (hex)		Revl Inc.
+400000-4FFFFF     (base 16)		Revl Inc.
+				325 9th St.
+				San Francisco  CA  94103
+				US
+
+CC-22-37   (hex)		Terma Sp. z o.o.
+100000-1FFFFF     (base 16)		Terma Sp. z o.o.
+				Czaple 100
+				Gdańsk  Pomorskie  80-298
+				PL
+
+2C-27-9E   (hex)		Rutledge Omni Services Pte Ltd
+600000-6FFFFF     (base 16)		Rutledge Omni Services Pte Ltd
+				34 Toh Guan Road East, #01-12/13 Enterprise Hub
+				Singapore  Singapore  608579
+				SG
+
+2C-27-9E   (hex)		Forties Inc.
+B00000-BFFFFF     (base 16)		Forties Inc.
+				5-3-10-1F, Shiba
+				Minato  Tokyo  1080014
+				JP
+
+2C-27-9E   (hex)		Kunyi electronic technology (Shanghai) Co., Ltd.
+200000-2FFFFF     (base 16)		Kunyi electronic technology (Shanghai) Co., Ltd.
+				2F, 42th Building, No.1000 Jinhai Road,Pudong
+				Shanghai   Shanghai   201206
+				CN
+
+2C-27-9E   (hex)		Changzhou WEBO Weighing Device & System CO.,LTD
+000000-0FFFFF     (base 16)		Changzhou WEBO Weighing Device & System CO.,LTD
+				Gaoyang Road No.1
+				Changzhou  Jiangsu  213000
+				CN
+
+18-9B-A5   (hex)		Christ Electronic System GmbH
+C00000-CFFFFF     (base 16)		Christ Electronic System GmbH
+				Alpenstrasse 34
+				Memmingen  Bavaria  87700
+				DE
+
+2C-27-9E   (hex)		Jiangsu JianHu Science & Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		Jiangsu JianHu Science & Technology Co., Ltd.
+				No.95 East Guangdian Road of Yaoguan County, Wujin District 
+				Changzhou  Jiangsu  213011
+				CN
+
+90-4E-91   (hex)		Apollo Video Technology
+100000-1FFFFF     (base 16)		Apollo Video Technology
+				24000 35th Ave SE
+				Bothell  WA  98021
+				US
+
+34-29-8F   (hex)		ISRA Vision AG
+400000-4FFFFF     (base 16)		ISRA Vision AG
+				Industriestraße 14
+				Darmstadt    64297
+				DE
+
+34-00-8A   (hex)		Hibertek International Limited
+A00000-AFFFFF     (base 16)		Hibertek International Limited
+				Rm. 6, 21F., NO.5, Sec.3, New Taipei Blvd., Xinzhuang Dist.
+				New Taipei City    24250
+				TW
+
+34-29-8F   (hex)		Wiesheu GmbH
+900000-9FFFFF     (base 16)		Wiesheu GmbH
+				Daimlerstr. 10
+				Affalterbach    71563
+				DE
+
+34-29-8F   (hex)		Highlite International B.V.
+500000-5FFFFF     (base 16)		Highlite International B.V.
+				Vestastraat 2
+				Kerkrade    6468 EX
+				NL
+
+28-F5-37   (hex)		Honeywell Safety Products USA, Inc
+A00000-AFFFFF     (base 16)		Honeywell Safety Products USA, Inc
+				7828 Waterville Road
+				San Diego  CA  92154
+				US
+
+E8-18-63   (hex)		AVCON Information Technology Co.,Ltd
+200000-2FFFFF     (base 16)		AVCON Information Technology Co.,Ltd
+				Room 2408, No 2 Building, 335# Guoding Road
+				Shanghai  Shanghai  200433
+				CN
+
+34-00-8A   (hex)		Shenzhen Andakai Technologies Co., Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Andakai Technologies Co., Ltd.
+				Unit B, 10/F, Building 2, NO.10 Industial Park, Tianliao Community, Gongming Street, GuangMing District, Shenzhen,China
+				Shenzhen  Guangdong  518107
+				CN
+
+34-00-8A   (hex)		uberGARD Pte. Ltd.
+700000-7FFFFF     (base 16)		uberGARD Pte. Ltd.
+				39 Sungei Kadut Avenue
+				Singapore    729663
+				SG
+
+78-D8-00   (hex)		CL International 
+E00000-EFFFFF     (base 16)		CL International 
+				12th Floor, Woolim Lions Valley 1 Bldg 27, Dunchon-daero 457beongil, Jungwon-gu
+				Seongnam   Kyeonggi-do   462-806
+				KR
+
+78-D8-00   (hex)		Korea Micro Wireless Co.,Ltd.
+D00000-DFFFFF     (base 16)		Korea Micro Wireless Co.,Ltd.
+				#323, 3F, Kyoungin Center, 20, Baekbeom-ro 577beon-gil, Bupyeong-gu
+				Incheon    21449
+				KR
+
+7C-BA-CC   (hex)		Fossil Power Systems Inc
+600000-6FFFFF     (base 16)		Fossil Power Systems Inc
+				10 Mosher Drive
+				Dartmouth  Nova Scotia  B3B1N5
+				CA
+
+7C-BA-CC   (hex)		Izkare
+300000-3FFFFF     (base 16)		Izkare
+				Suite 2812, 800 MinHe Rd
+				Hangzhou  Zhejiang  311200
+				CN
+
+7C-BA-CC   (hex)		Annapurna labs
+A00000-AFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+7C-BA-CC   (hex)		Yongguan Electronic Technology (D.G)LTD
+900000-9FFFFF     (base 16)		Yongguan Electronic Technology (D.G)LTD
+				xinfeng west 3RD
+				Dongguan    523041
+				CN
+
+F8-8A-3C   (hex)		Josh.ai
+700000-7FFFFF     (base 16)		Josh.ai
+				191 University Blvd #188
+				Denver  CO  80206
+				US
+
+4C-65-A8   (hex)		Fuse
+C00000-CFFFFF     (base 16)		Fuse
+				1425 E St.
+				San Diego    92110
+				US
+
+4C-65-A8   (hex)		Beijing Bluehalo Internet Inc.
+100000-1FFFFF     (base 16)		Beijing Bluehalo Internet Inc.
+				901B,Building A of Power Creative,NO.1 Shangdi East Road,Haidian District,
+				Beijing     100085
+				CN
+
+4C-65-A8   (hex)		WELT Corporation
+000000-0FFFFF     (base 16)		WELT Corporation
+				Seocho, Bangbae, 481-5
+				Seoul    06699
+				KR
+
+A0-C5-F2   (hex)		Serious Integrated, Inc.
+A00000-AFFFFF     (base 16)		Serious Integrated, Inc.
+				576 East Germann Road
+				Gilbert  AZ  85296
+				US
+
+A0-C5-F2   (hex)		Oray.com co., LTD.
+B00000-BFFFFF     (base 16)		Oray.com co., LTD.
+				8008Rm, building No.1 GuoDing d. Yangpu District
+				Shanghai  Shanghai  200433
+				CN
+
+4C-65-A8   (hex)		Wuhan MoreQuick Network Technology Co., Ltd.
+700000-7FFFFF     (base 16)		Wuhan MoreQuick Network Technology Co., Ltd.
+				GuangGuDaDao 70#ShiMaoZhongXin C-2205
+				WuHan  HuBei  430019
+				CN
+
+4C-65-A8   (hex)		SHENZHEN LISAIER TRONICS CO.,LTD
+900000-9FFFFF     (base 16)		SHENZHEN LISAIER TRONICS CO.,LTD
+				No.22 xihu industrial park ,xikeng henggang Town Longgang District      
+				 shenzhen   Guang Dong      518115
+				CN
+
+8C-14-7D   (hex)		Shenzhen Meidou Technology Co, Ltd.
+600000-6FFFFF     (base 16)		Shenzhen Meidou Technology Co, Ltd.
+				Room 321,Building 4,Zhongxinggongyeyuan,  Chuangye Road, Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+8C-14-7D   (hex)		Unwired Networks
+500000-5FFFFF     (base 16)		Unwired Networks
+				Gonzagagasse 11/25
+				Vienna    1010
+				AT
+
+F0-23-B9   (hex)		Domotz Ltd
+E00000-EFFFFF     (base 16)		Domotz Ltd
+				334 Ladbroke Grove
+				London    W10 5AD
+				GB
+
+04-71-4B   (hex)		Apparatebau Gauting GmbH
+400000-4FFFFF     (base 16)		Apparatebau Gauting GmbH
+				Friedrichshafener Strasse 5
+				Gilching    82205
+				DE
+
+04-71-4B   (hex)		Energport Inc
+800000-8FFFFF     (base 16)		Energport Inc
+				48660 Kato Road
+				Fremont  CA  94538
+				US
+
+60-D7-E3   (hex)		HuBDIC CO.,LTD
+E00000-EFFFFF     (base 16)		HuBDIC CO.,LTD
+				#301, 53, Jeonpa-ro, Manan-gu, Anyang-si
+				Gyeonggi-do    14084
+				KR
+
+04-71-4B   (hex)		Observables, Inc.
+A00000-AFFFFF     (base 16)		Observables, Inc.
+				117 N. MILPAS ST
+				SANTA BARBARA  CA  93103
+				US
+
+F0-23-B9   (hex)		Shenzhen Lachesis Mhealth Co., Ltd.
+C00000-CFFFFF     (base 16)		Shenzhen Lachesis Mhealth Co., Ltd.
+				Bldg. C, No.43 Yanshan Rd, Nanshan District
+				Shenzhen  GuangDong  518067
+				CN
+
+60-D7-E3   (hex)		Nextivity
+B00000-BFFFFF     (base 16)		Nextivity
+				16550 West Bernardo Road, Bldg 5, Suite 550
+				San Diego  CA  92127
+				US
+
+60-D7-E3   (hex)		Zhejiang Send Intelligent Technology,Ltd
+C00000-CFFFFF     (base 16)		Zhejiang Send Intelligent Technology,Ltd
+				6-7F,E Building,Tiantang Software Park,Xidoumen Road,Xihu District
+				Hangzhou  Zhejiang  310012
+				CN
+
+60-D7-E3   (hex)		HindlePower, Inc
+800000-8FFFFF     (base 16)		HindlePower, Inc
+				1075 Saint John St
+				Easton  PA  18042
+				US
+
+60-D7-E3   (hex)		Quantronix, Inc.
+D00000-DFFFFF     (base 16)		Quantronix, Inc.
+				380 S. 200 W.
+				Farmington  UT  84025
+				US
+
+60-D7-E3   (hex)		Hemisphere GNSS
+400000-4FFFFF     (base 16)		Hemisphere GNSS
+				8515 E. Anderson Dr.
+				Scottsdale  AZ  85255
+				US
+
+08-ED-02   (hex)		Savox Communications 
+900000-9FFFFF     (base 16)		Savox Communications 
+				Laitaatsillantie 3
+				Savonlinna    57170
+				FI
+
+08-ED-02   (hex)		Szok Energy and Communication Co., Ltd.
+B00000-BFFFFF     (base 16)		Szok Energy and Communication Co., Ltd.
+				Rm. 1, 17F., No.104, Sec. 1, Xintai 5th Rd., Xizhi Dist.
+				New Taipei City    22102
+				TW
+
+08-ED-02   (hex)		Guard RFID Solutions
+C00000-CFFFFF     (base 16)		Guard RFID Solutions
+				#140-766 Cliveden Place
+				Delta  BC  V3M6C7
+				CA
+
+98-AA-FC   (hex)		RPE RADICO
+400000-4FFFFF     (base 16)		RPE RADICO
+				Marksa, 14
+				Obninsk  Kaluga reg.  249035
+				RU
+
+98-AA-FC   (hex)		Nexus Electrical(Jiaxing) Limited
+300000-3FFFFF     (base 16)		Nexus Electrical(Jiaxing) Limited
+				No 1438,Jiachuang Road,Xiuzhou Industrial Park,
+				Jiaxing  Zhejiang  314031
+				CN
+
+98-AA-FC   (hex)		Beijing Tiandi-Marco Electro-Hydraulic Control System Company Ltd.
+800000-8FFFFF     (base 16)		Beijing Tiandi-Marco Electro-Hydraulic Control System Company Ltd.
+				No.5 Qing Nian Gou Road, Hepingli
+				Beijing    100013
+				CN
+
+98-AA-FC   (hex)		Mekotronics Co., Ltd
+600000-6FFFFF     (base 16)		Mekotronics Co., Ltd
+				Rm 19C Lockhart Ctr 301-307, Lockhart Rd Wan Chai
+				Hong Kong    999077
+				HK
+
+98-AA-FC   (hex)		MCS Micronic Computer Systeme GmbH
+D00000-DFFFFF     (base 16)		MCS Micronic Computer Systeme GmbH
+				Geneststr. 5
+				Berlin    10829
+				DE
+
+14-4F-D7   (hex)		Arkus-ST Ltd
+B00000-BFFFFF     (base 16)		Arkus-ST Ltd
+				Generala Antonova 3a
+				Moscow    117342
+				RU
+
+14-4F-D7   (hex)		i-SENS, Inc.
+600000-6FFFFF     (base 16)		i-SENS, Inc.
+				43, Banpo-daero 28-gil, Seocho-gu
+				Seoul    06646
+				KR
+
+1C-A0-D3   (hex)		Cirque Audio Technology Co., Ltd
+900000-9FFFFF     (base 16)		Cirque Audio Technology Co., Ltd
+				No. 2, Road BeiYiHeng, HuangJiaBao Industrial Park, ShiPai Town,
+				DongGuan  GuangDong  523347
+				CN
+
+40-F3-85   (hex)		PALAZZETTI LELIO SPA
+700000-7FFFFF     (base 16)		PALAZZETTI LELIO SPA
+				VIA ROVEREDO 103
+				PORCIA  PORDENONE  33080
+				IT
+
+A4-11-63   (hex)		accesso Technology Group
+900000-9FFFFF     (base 16)		accesso Technology Group
+				Unit 5, The Pavillions, Ruscombe Business Park
+				Twyford  Wilts  RG10 9NN
+				GB
+
+1C-A0-D3   (hex)		Guang Dong He Zheng Network Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Guang Dong He Zheng Network Technology Co.,Ltd
+				N0.3,Sanjiang industrial zone,Hengli Town
+				Dongguan  Guangdong  523460
+				CN
+
+8C-C8-F4   (hex)		SHENZHEN D-light Technolgy Limited
+600000-6FFFFF     (base 16)		SHENZHEN D-light Technolgy Limited
+				2302F, Block B, Wisdom Building ,Qiao xiang Road,Shahe Street, Nanshan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+8C-C8-F4   (hex)		Trilux Group Management GmbH
+A00000-AFFFFF     (base 16)		Trilux Group Management GmbH
+				Heidestrasse
+				Arnsberg    59759
+				DE
+
+40-F3-85   (hex)		IntelliDesign Pty Ltd
+300000-3FFFFF     (base 16)		IntelliDesign Pty Ltd
+				99 Bluestone Circuit
+				Seventeen Mile Rocks  Qld  4073
+				AU
+
+40-F3-85   (hex)		Embedded IQ
+400000-4FFFFF     (base 16)		Embedded IQ
+				Block C, HHK House; 22 Ethel Avenue
+				Johannesburg  Gauteng  2195
+				ZA
+
+8C-C8-F4   (hex)		TOHO DENKI IND.CO.,LTD
+300000-3FFFFF     (base 16)		TOHO DENKI IND.CO.,LTD
+				1-6-30 Meguro
+				Meguro-ku  Tokyo  153-0063
+				JP
+
+50-A4-D0   (hex)		XinLian'AnBao（Beijing）Technology Co.，LTD.
+800000-8FFFFF     (base 16)		XinLian'AnBao（Beijing）Technology Co.，LTD.
+				（Room 501,Building 10, Area 2, Headquarters Base）NO.188,South 4th Ring West Road, Fengtai District
+				Beijing  Beijing  100070
+				CN
+
+8C-C8-F4   (hex)		Lanhomex Technology(Shen Zhen)Co.,Ltd. 
+100000-1FFFFF     (base 16)		Lanhomex Technology(Shen Zhen)Co.,Ltd. 
+				Room 409, Building 29,Zhi Heng Industrial Part, Guankou 2nd  Road, Nanshan District
+				SHENZHEN    518000
+				CN
+
+8C-C8-F4   (hex)		Swift Navigation Inc
+900000-9FFFFF     (base 16)		Swift Navigation Inc
+				1543 Mission Street
+				San Francisco  CA  94103
+				US
+
+50-A4-D0   (hex)		Shanghai Pujiang Smart Card Systems Co., Ltd.
+700000-7FFFFF     (base 16)		Shanghai Pujiang Smart Card Systems Co., Ltd.
+				No.100, Lane 7488, Hutai Road
+				Shanghai    86-201809
+				CN
+
+8C-C8-F4   (hex)		Guardtec,Inc
+000000-0FFFFF     (base 16)		Guardtec,Inc
+				Hanshin IT tower #1203 Digital-ro 272 GUROGU
+				SEOUL    08389
+				KR
+
+50-A4-D0   (hex)		OEM PRODUCTION INC.
+900000-9FFFFF     (base 16)		OEM PRODUCTION INC.
+				1461-3 San Mateo Ave.
+				South San Francisco  CA  94080
+				US
+
+34-04-9E   (hex)		Eginity, Inc.
+B00000-BFFFFF     (base 16)		Eginity, Inc.
+				37 N Orange Ave STE 770
+				Orlando    32801
+				US
+
+34-04-9E   (hex)		Eclipse Information Technologies
+800000-8FFFFF     (base 16)		Eclipse Information Technologies
+				Gulsuyu Mah. Fevzi Cakmak Cad Lefke Sk 16/6
+				Istanbul  Turkey  34848
+				TR
+
+50-A4-D0   (hex)		TREXOM S.r.l.
+500000-5FFFFF     (base 16)		TREXOM S.r.l.
+				viale dell'Unione Europea, 19
+				TARCENTO  Udine  33017
+				IT
+
+40-ED-98   (hex)		Siebert Industrieelektronik GmbH
+B00000-BFFFFF     (base 16)		Siebert Industrieelektronik GmbH
+				Siebertstrasse 2
+				Eppelborn    66571
+				DE
+
+40-ED-98   (hex)		Vaisala Oyj
+700000-7FFFFF     (base 16)		Vaisala Oyj
+				Vanha Nurmijarventie 21
+				VANTAA    Fin-01670
+				FI
+
+34-04-9E   (hex)		uikismart
+D00000-DFFFFF     (base 16)		uikismart
+				Nanshan
+				Shenzhen  Guangdong  518061
+				CN
+
+40-ED-98   (hex)		Shanghai Broadwan Communications Co.,Ltd
+600000-6FFFFF     (base 16)		Shanghai Broadwan Communications Co.,Ltd
+				Building G, No.1015, Caobao Rd
+				Shanghai  Shanghai  200233
+				CN
+
+40-ED-98   (hex)		Cape
+500000-5FFFFF     (base 16)		Cape
+				1040 Mariposa St
+				San Francisco  CA  94107
+				US
+
+40-ED-98   (hex)		Tsinghua Tongfang Co., LTD
+000000-0FFFFF     (base 16)		Tsinghua Tongfang Co., LTD
+				Wangzhuang Road No.1, Haidian District, Beijing, Tsinghua Tongfang Technology Plaza. D 21st Floor
+				Beijing  Beijing  100083
+				CN
+
+A4-58-0F   (hex)		EYE IO, LLC
+D00000-DFFFFF     (base 16)		EYE IO, LLC
+				2000 University Ave. Suite 610
+				Palo Alto  CA  94303
+				US
+
+A4-58-0F   (hex)		Astro, Inc
+600000-6FFFFF     (base 16)		Astro, Inc
+				450 W. 33rd St
+				New York  NY  10001
+				US
+
+A4-58-0F   (hex)		GUANGZHOU OPTICAL BRIDGE COMMUNICATION EQUIPMENT CO.,LTD.
+A00000-AFFFFF     (base 16)		GUANGZHOU OPTICAL BRIDGE COMMUNICATION EQUIPMENT CO.,LTD.
+				room b201,NO.263,middle of zhougshan avenue,tianhe
+				guangzhou    510660
+				CN
+
+50-0B-91   (hex)		Panasonic Enterprise Solutions Company
+800000-8FFFFF     (base 16)		Panasonic Enterprise Solutions Company
+				6144 N Panasonic Way
+				Denver  CO  80249
+				US
+
+24-4E-7B   (hex)		Leshi Internet Information & Technology (Beijing) Corp.
+400000-4FFFFF     (base 16)		Leshi Internet Information & Technology (Beijing) Corp.
+				Fl 16, Letv Building, 105 Yaojiayuan Road, Chaoyang District, Beijing,China
+				Beijing    100025
+				CN
+
+24-4E-7B   (hex)		WithWin Technology ShenZhen CO.,LTD
+E00000-EFFFFF     (base 16)		WithWin Technology ShenZhen CO.,LTD
+				29F, East Tower, NanShan Digital Technology & Cultural Industry Park, ShenNan Throughfare10128#
+				ShenZhen  China  518000
+				CN
+
+24-4E-7B   (hex)		Jiangsu Xuanbo Electronic Technologies Co.,Ltd
+500000-5FFFFF     (base 16)		Jiangsu Xuanbo Electronic Technologies Co.,Ltd
+				Nearby the Bus stop of Hanzi Industrial Park,Danjin Road,Hengtang Town
+				Danyang  Jiangsu  212300
+				CN
+
+50-0B-91   (hex)		Shenzhen Xinfa Electronic Co.,ltd
+700000-7FFFFF     (base 16)		Shenzhen Xinfa Electronic Co.,ltd
+				No 57, Baoli Road, Buji Town
+				Longgang District  Shenzhen, Guangdong   518112
+				CN
+
+7C-CB-E2   (hex)		mirakonta s.l.
+C00000-CFFFFF     (base 16)		mirakonta s.l.
+				calle zuatzu nº1 (edif ulia) pabellon 7 (parque emp. zuatzu)
+				san sebastian  guipuzcoa  20018
+				ES
+
+7C-CB-E2   (hex)		Polarteknik Oy
+800000-8FFFFF     (base 16)		Polarteknik Oy
+				Klaavolantie 1
+				Huittinen    32700
+				FI
+
+24-4E-7B   (hex)		RCC TIME CO .,LIMITED
+200000-2FFFFF     (base 16)		RCC TIME CO .,LIMITED
+				6/F,C2Block,Guang Hao Feng Industrial Park,Hang Cheng Road,Gushu
+				Hong Kong    518000
+				HK
+
+48-65-EE   (hex)		Mission Microwave Technologies, Inc
+400000-4FFFFF     (base 16)		Mission Microwave Technologies, Inc
+				10012 Norwalk Blvd, Suite 150
+				Santa Fe Springs  CA  90670
+				US
+
+48-65-EE   (hex)		Venture Research Inc.
+700000-7FFFFF     (base 16)		Venture Research Inc.
+				3001 Summit Ave
+				Plano  TX  75074
+				US
+
+1C-C0-E1   (hex)		LX Corporation Pty Ltd
+800000-8FFFFF     (base 16)		LX Corporation Pty Ltd
+				Suite 101, Level 1, National Innovation Centre Building, 4 Cornwallis Street
+				Eveleigh  New South Wales  2015
+				AU
+
+4C-E1-73   (hex)		outpaceIO
+300000-3FFFFF     (base 16)		outpaceIO
+				44 rue Armand Carrel
+				Montreuil    93100
+				FR
+
+4C-E1-73   (hex)		Plus One Japan Limited
+E00000-EFFFFF     (base 16)		Plus One Japan Limited
+				2-8-6,Nishishinbashi
+				Minato-ku  Tokyo  105-0003
+				JP
+
+1C-C0-E1   (hex)		Shenzhen Highsharp Electronics Ltd.
+000000-0FFFFF     (base 16)		Shenzhen Highsharp Electronics Ltd.
+				A8 Music Tower 2007-08, High-tech Park
+				Shenzhen  Guangdong  518000
+				CN
+
+4C-E1-73   (hex)		REMONDE NETWORK 
+C00000-CFFFFF     (base 16)		REMONDE NETWORK 
+				Room 504 Building A, 3 Juquan Road, Science Town
+				Guangzhou  Guangdong  510170
+				CN
+
+0C-EF-AF   (hex)		Kenmore
+000000-0FFFFF     (base 16)		Kenmore
+				3333 Beverly Rd.
+				Hoffman Estates  IL  60179
+				US
+
+38-3A-21   (hex)		Shenzhen HS Fiber Communication Equipment CO., LTD
+200000-2FFFFF     (base 16)		Shenzhen HS Fiber Communication Equipment CO., LTD
+				6F, Bld#A, Dezhong Industrial Park, Yangmei Village, Bantian Town, Longgang District
+				Shenzhen  Guangdong  518129
+				CN
+
+AC-64-DD   (hex)		8Cups
+400000-4FFFFF     (base 16)		8Cups
+				29, Gonghang-daero 61-gil, Gangseo-gu
+				Seoul    07563
+				KR
+
+AC-64-DD   (hex)		JSC InfoTeCS
+100000-1FFFFF     (base 16)		JSC InfoTeCS
+				Staryy Petrovsko-Razumovsky proyezd, 1/23, bld.1
+				Moscow    127287
+				RU
+
+AC-64-DD   (hex)		Groupe Citypassenger Inc
+B00000-BFFFFF     (base 16)		Groupe Citypassenger Inc
+				1117 sainte catherine ouest
+				Montreal  Quebec  H3B1H9
+				CA
+
+38-3A-21   (hex)		Colooc AB
+D00000-DFFFFF     (base 16)		Colooc AB
+				Nåsvägen 9
+				Bromma  Sverige  16775
+				SE
+
+38-3A-21   (hex)		Shenzhen Smart-core Technology co., Ltd.
+600000-6FFFFF     (base 16)		Shenzhen Smart-core Technology co., Ltd.
+				16/F., Finance & Technology Building, No. 11 Keyuan Road, Nanshan Dist.
+				Shenzhen  Guangdong  518057
+				CN
+
+F8-1D-78   (hex)		Digital Imaging Technology
+400000-4FFFFF     (base 16)		Digital Imaging Technology
+				2275 Research Blvd Suite 500
+				Rockville  MD  20850
+				US
+
+F8-1D-78   (hex)		SHANGHAI SUN TELECOMMUNICATION CO., LTD.
+300000-3FFFFF     (base 16)		SHANGHAI SUN TELECOMMUNICATION CO., LTD.
+				Building No.145, Lane 666 Xianing Road, Jinshan Industrial Zone
+				Shanghai  Shanghai  201506
+				CN
+
+F8-1D-78   (hex)		Tofino
+D00000-DFFFFF     (base 16)		Tofino
+				255 Fourier Avenue
+				Fremont    94539
+				US
+
+F8-1D-78   (hex)		AVPro Global Holdings LLC
+A00000-AFFFFF     (base 16)		AVPro Global Holdings LLC
+				3518 N Casco Ave
+				Sioux Falls  SD  57104
+				US
+
+38-3A-21   (hex)		Dongguan Innovation Technology Co Ltd
+400000-4FFFFF     (base 16)		Dongguan Innovation Technology Co Ltd
+				Building B, No.3 Desheng Road, Longbeiling, Tangxia 
+				Dongguan City  Guangdong Province  523715
+				CN
+
+70-F8-E7   (hex)		Fixstars Corporation
+C00000-CFFFFF     (base 16)		Fixstars Corporation
+				1-11-1 Ohsaki
+				Shinagawa-ku  TOKYO  141-0032
+				JP
+
+70-F8-E7   (hex)		VOXX International
+200000-2FFFFF     (base 16)		VOXX International
+				180 Marcus Blvd.
+				Hauppauge  NY  11788
+				US
+
+84-E0-F4   (hex)		Scale-Tec Ltd.
+E00000-EFFFFF     (base 16)		Scale-Tec Ltd.
+				16027 Hwy 64
+				Anamosa  IA  52205
+				US
+
+84-E0-F4   (hex)		Hangzhou Uni-Ubi Co.,Ltd.
+200000-2FFFFF     (base 16)		Hangzhou Uni-Ubi Co.,Ltd.
+				Room 605, Building No.5, HaiChuang Park, No.998, Wenyi Road(West), YuHang District
+				HangZhou  ZheJiang  311121
+				CN
+
+C0-D3-91   (hex)		xxter bv
+900000-9FFFFF     (base 16)		xxter bv
+				Elandsgracht 73
+				Amsterdam    1016 TR
+				NL
+
+58-E8-76   (hex)		Xiamen Cacamle Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Xiamen Cacamle Technology Co.,Ltd.
+				Room 1501,15th floor,Building C,DaTang YOHO Park,Huli district
+				Xiamen  Fujian  361000
+				CN
+
+58-E8-76   (hex)		Broad Air Technology Co., LTD.
+500000-5FFFFF     (base 16)		Broad Air Technology Co., LTD.
+				Broadtown
+				Changsha  Hunan  410126
+				CN
+
+C0-D3-91   (hex)		ALNETz Co.,LTD
+700000-7FFFFF     (base 16)		ALNETz Co.,LTD
+				1-3 Honcho,Naka-ku
+				Yokohama  Kanagawa  231-0005
+				JP
+
+58-E8-76   (hex)		Annapurna labs
+B00000-BFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+58-E8-76   (hex)		McWong International Inc
+300000-3FFFFF     (base 16)		McWong International Inc
+				1921 Arena Blvd
+				Sacramento  CA  95834
+				US
+
+F0-AC-D7   (hex)		Intenta GmbH
+100000-1FFFFF     (base 16)		Intenta GmbH
+				Annabergerstraße 240
+				Chemnitz  Sachsen  09125
+				DE
+
+F0-AC-D7   (hex)		QUANTUM POWER SYSTEMS
+200000-2FFFFF     (base 16)		QUANTUM POWER SYSTEMS
+				B11. 3RD CROSS. ITI IND. ESTATE. MAHADEVAPURA
+				BANGALORE  KARNATAKA  560048
+				IN
+
+F0-AC-D7   (hex)		Med-Pat/Inn-Phone
+300000-3FFFFF     (base 16)		Med-Pat/Inn-Phone
+				31 Riordan Place
+				Shrewsbury  NJ  07702
+				US
+
+F0-AC-D7   (hex)		 Guilin glsun Science and Tech Co.,LTD
+000000-0FFFFF     (base 16)		 Guilin glsun Science and Tech Co.,LTD
+				Block D-08, National IT Industry Park, Chaoyang Rd
+				Guilin  Guangxi  541000
+				CN
+
+28-36-38   (hex)		SCA Hygiene Products AB
+E00000-EFFFFF     (base 16)		SCA Hygiene Products AB
+				Mölndals bro 2
+				405 03 Göteborg    -
+				SE
+
+28-36-38   (hex)		ShangHai Canall Information Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		ShangHai Canall Information Technology Co.,Ltd
+				11F,TongLian Building,1565 Jiaotong Rd.,ShangHai 200065,P.R.C.
+				ShangHai  ShangHai  200065
+				CN
+
+28-36-38   (hex)		Havells India Limited
+800000-8FFFFF     (base 16)		Havells India Limited
+				Head Office, Havells India Ltd QRG Towers, 2D, Sector 126
+				Noida  UP  201304
+				IN
+
+28-36-38   (hex)		Innovative Technology Ltd
+700000-7FFFFF     (base 16)		Innovative Technology Ltd
+				Innovative Business Park, Derker Street
+				Oldham    OL1 4EQ
+				GB
+
+8C-19-2D   (hex)		TeleAlarm SA
+A00000-AFFFFF     (base 16)		TeleAlarm SA
+				Rue du Pont 23
+				 La Chaux-de-Fonds    2300
+				CH
+
+38-B8-EB   (hex)		ExaScaler Inc.
+B00000-BFFFFF     (base 16)		ExaScaler Inc.
+				Kimura Bldg. 5F, Kanda Ogawamachi 2-1
+				Chiyoda-ku  Tokyo  101-0052
+				JP
+
+8C-19-2D   (hex)		Shenzhen Huanuo Internet Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Shenzhen Huanuo Internet Technology Co.,Ltd
+				Room 10G, Tower 4C, Software Industry Base, Nanshan District, ShenZhen, China, 518000.
+				Shenzhen    518000
+				CN
+
+D0-D9-4F   (hex)		Perfant Technology Co., Ltd
+000000-0FFFFF     (base 16)		Perfant Technology Co., Ltd
+				Guo Ren Tong Xin B317,Ke Ji Zhong San Lu,Nanshan,Shenzhen,Guangdong,China
+				Shenzhen    518000
+				CN
+
+D0-D9-4F   (hex)		Apption Labs Limited
+800000-8FFFFF     (base 16)		Apption Labs Limited
+				7-8 Westbridge Close
+				Leicester    LE3 5LW
+				GB
+
+D0-D9-4F   (hex)		Optigo Networks
+500000-5FFFFF     (base 16)		Optigo Networks
+				#320 – 887 Great Northern Way
+				Vancouver  BC  V5T 4T5
+				CA
+
+D0-D9-4F   (hex)		Beijing Yiwangxuntong Technology
+300000-3FFFFF     (base 16)		Beijing Yiwangxuntong Technology
+				Room 1605, Unit 2, Building No.1, ShangAoShiJi Center, XiSanQi
+				Beijing  Select State  100096
+				CN
+
+D0-D9-4F   (hex)		peiker CEE
+400000-4FFFFF     (base 16)		peiker CEE
+				Gartenstrasse 25
+				Bad Homburg    61352
+				DE
+
+CC-D3-1E   (hex)		Haishu Technology LIMITED
+A00000-AFFFFF     (base 16)		Haishu Technology LIMITED
+				Jiulong Midun street No.89
+				Hongkong    999077
+				HK
+
+C4-7C-8D   (hex)		HHCC Plant Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		HHCC Plant Technology Co.,Ltd.
+				Floor 12,A build ,Shuguang Plaza, Jingshun road, Chaoyang district
+				Beijing  Beijing  100028
+				CN
+
+CC-D3-1E   (hex)		Elk Products
+B00000-BFFFFF     (base 16)		Elk Products
+				3266 Highway 70 West
+				Hildebran  NC  28637
+				US
+
+CC-D3-1E   (hex)		BBPOS International Limited
+600000-6FFFFF     (base 16)		BBPOS International Limited
+				Suite 1602, Tower 2, Nina Tower, 8 Yeung Uk Road, Tsuen Wan, NT
+				Hong Kong  China  00000
+				HK
+
+68-91-D0   (hex)		Altis Technology 
+B00000-BFFFFF     (base 16)		Altis Technology 
+				711 Lu Plaza, 2 Wing Yip Street, Kwun Tong
+				Hong Kong    0000
+				HK
+
+C4-7C-8D   (hex)		Awiselink Co., Ltd.
+700000-7FFFFF     (base 16)		Awiselink Co., Ltd.
+				7F., No.98, Minquan Rd., Xindian Dist.
+				New Taipei City     23141
+				TW
+
+C4-7C-8D   (hex)		INOTEC Sicherheitstechnik GmbH
+C00000-CFFFFF     (base 16)		INOTEC Sicherheitstechnik GmbH
+				Am Buschgarten 17
+				Ense  NRW  59469
+				DE
+
+68-91-D0   (hex)		WiseCube
+A00000-AFFFFF     (base 16)		WiseCube
+				14F IT Castle-2, 137 Gasan Digital 1-ro, Geumcheon-gu
+				Seoul    08506
+				KR
+
+C4-7C-8D   (hex)		Airbus DS - SLC
+900000-9FFFFF     (base 16)		Airbus DS - SLC
+				1, Bd Jean Moulin - Metapole
+				ELANCOURT   Cedex    78996
+				FR
+
+C4-7C-8D   (hex)		PASCAL Co., Ltd.
+500000-5FFFFF     (base 16)		PASCAL Co., Ltd.
+				1-8-31, Honjo-Nishi
+				Higashiosaka  Osaka-hu  5780965
+				JP
+
+68-91-D0   (hex)		Omniimpex GmbH
+700000-7FFFFF     (base 16)		Omniimpex GmbH
+				Waldhof 5
+				Zug  Zug  6300
+				CH
+
+E0-B6-F5   (hex)		Agora
+400000-4FFFFF     (base 16)		Agora
+				16, rue Alfred Nobel
+				POITIERS  Poitou-Charentes  86000
+				FR
+
+E0-B6-F5   (hex)		Folksam AB
+A00000-AFFFFF     (base 16)		Folksam AB
+				Bohusgatan 14
+				Stockholm    10660
+				SE
+
+E0-B6-F5   (hex)		ITEL MOBILE LIMITED
+D00000-DFFFFF     (base 16)		ITEL MOBILE LIMITED
+				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+				Hong Kong  KOWLOON  999077
+				HK
+
+50-FF-99   (hex)		Goetting KG
+C00000-CFFFFF     (base 16)		Goetting KG
+				Celler Str. 5
+				Lehrte  Select Your State or Province  31275
+				DE
+
+50-FF-99   (hex)		Shenzhen Haipengxin Electronic Co., Ltd.
+D00000-DFFFFF     (base 16)		Shenzhen Haipengxin Electronic Co., Ltd.
+				Block C3,Mingzhuo Xingye Technology Park,Guangming Avenue
+				Shenzhen  Guangdong  518107
+				CN
+
+50-FF-99   (hex)		Sichuan Dowlab Electronics Technology Co. Ltd
+B00000-BFFFFF     (base 16)		Sichuan Dowlab Electronics Technology Co. Ltd
+				NO.198, Wenjia Street, Qingyang District
+				Chengdu  Sichuan  610091
+				CN
+
+98-6D-35   (hex)		Shenzhen cositea electronics technology co.,LTD
+100000-1FFFFF     (base 16)		Shenzhen cositea electronics technology co.,LTD
+				 Nanshan District  Xili academy Avenue Tong Long Industrial A District 7 Building 3 floor
+				shenzhen  guandong  518000
+				CN
+
+7C-47-7C   (hex)		EyeLock LLC
+300000-3FFFFF     (base 16)		EyeLock LLC
+				355 Lexington Ave., 12th Floor
+				New York  NY  10017
+				US
+
+98-6D-35   (hex)		Beijing 3CAVI Tech Co.,Ltd
+800000-8FFFFF     (base 16)		Beijing 3CAVI Tech Co.,Ltd
+				Unit 203,Block D Keshi Building, Shangdi Xinxi Road, Haidian District
+				Beijing    100085
+				CN
+
+7C-47-7C   (hex)		Annapurna labs
+C00000-CFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+5C-F2-86   (hex)		VPInstruments
+600000-6FFFFF     (base 16)		VPInstruments
+				Buitenwatersloot 335
+				Delft    2614GS
+				NL
+
+5C-F2-86   (hex)		Shanghai Notion Information Technology CO.,LTD.
+200000-2FFFFF     (base 16)		Shanghai Notion Information Technology CO.,LTD.
+				Room 201,Building 3,NO 289,Bisheng Rd,Pudong district,Shanghai,China
+				Shanghai  Shanghai  201203
+				CN
+
+5C-F2-86   (hex)		Sunpet Industries Limited
+C00000-CFFFFF     (base 16)		Sunpet Industries Limited
+				Unit 618, Lakeside 2, Hong Kong Science Park
+				Shatin  N.T.  -
+				HK
+
+5C-F2-86   (hex)		beijing your wonderful control system technology co.,ltd
+300000-3FFFFF     (base 16)		beijing your wonderful control system technology co.,ltd
+				NO.11 Fengxian Medium Road,Yongfeng Industry Base,Haidian District,Beijing
+				beijing  beijing  100094
+				CN
+
+5C-F2-86   (hex)		EUROIMMUN Medizinische Labordiagnostika AG
+500000-5FFFFF     (base 16)		EUROIMMUN Medizinische Labordiagnostika AG
+				Seekamp 31
+				Lübeck  Schleswig-Holstein  23560
+				DE
+
+5C-F2-86   (hex)		BrightSky, LLC
+D00000-DFFFFF     (base 16)		BrightSky, LLC
+				5121 Castello Drive
+				Naples  null  34103-1927
+				US
+
+38-FD-FE   (hex)		iSmart electronic technology co.,LTD
+E00000-EFFFFF     (base 16)		iSmart electronic technology co.,LTD
+				Room2101,DeWei Building,4 YunShan West Road,JiangBei,
+				HuiZhou  GuangDong  516000
+				CN
+
+5C-F2-86   (hex)		SHENZHEN HIVT TECHNOLOGY CO.,LTD
+800000-8FFFFF     (base 16)		SHENZHEN HIVT TECHNOLOGY CO.,LTD
+				7 F,3rd Zone,B Block,Mingyou purchasing Center,Baoyuan RD,Xixiang,Bao'an District,Shenzhen,China
+				Shenzhen  Guangdong  518100
+				CN
+
+38-FD-FE   (hex)		Rademacher Geraete-Elektronik GmbH
+700000-7FFFFF     (base 16)		Rademacher Geraete-Elektronik GmbH
+				Buschkamp 7
+				Rhede  NRW  46414
+				DE
+
+38-FD-FE   (hex)		Smart Solution Technology, Inc
+200000-2FFFFF     (base 16)		Smart Solution Technology, Inc
+				1-15 Kagurazaka,Shinjyukuku,
+				Tokyo    162-0825
+				JP
+
+38-B8-EB   (hex)		Wyres SAS
+E00000-EFFFFF     (base 16)		Wyres SAS
+				24 rue henri barbusse
+				Echirolles  Isere  38130
+				FR
+
+78-CA-83   (hex)		Excelocity Inc.
+100000-1FFFFF     (base 16)		Excelocity Inc.
+				200 Colonnade Road Suite #8
+				Ottawa  Ontario  K2E 7M1
+				CA
+
+78-CA-83   (hex)		Louroe Electronics
+900000-9FFFFF     (base 16)		Louroe Electronics
+				6955 Valjean Avenue
+				Van Nuys  CA  91406
+				US
+
+38-B8-EB   (hex)		Dojo-Labs Ltd
+500000-5FFFFF     (base 16)		Dojo-Labs Ltd
+				Hatidhar 17
+				Raanana    346651
+				IL
+
+78-CA-83   (hex)		DAINCUBE
+000000-0FFFFF     (base 16)		DAINCUBE
+				#401-701, 655, Pyeongcheon-ro
+				Bucheon-si    14502
+				KR
+
+1C-88-79   (hex)		Airsmart System Co.,Ltd
+200000-2FFFFF     (base 16)		Airsmart System Co.,Ltd
+				 Unit416 , Tudao Intelligent Technology Building, No.9 KeJi Road ,Science and Technology Park, Nanshan District , 
+				Shenzhen  Guangdong  518000
+				CN
+
+1C-88-79   (hex)		Eolos IT Corp
+600000-6FFFFF     (base 16)		Eolos IT Corp
+				 3663 SW 8 th Street, STE 210 
+				Miami  FL  33135
+				US
+
+1C-88-79   (hex)		Accriva
+C00000-CFFFFF     (base 16)		Accriva
+				6260 Sequence Dr
+				San Diego  CA  92121
+				US
+
+1C-87-79   (hex)		BEIDIAN  GROUP
+500000-5FFFFF     (base 16)		BEIDIAN  GROUP
+				A2 501 Jingang Road Pudong Jinqiao Shanghai
+				Shanghai  Shanghai  200126
+				CN
+
+1C-87-79   (hex)		Shenzhen Innovaconn Systems Co.,Ltd
+D00000-DFFFFF     (base 16)		Shenzhen Innovaconn Systems Co.,Ltd
+				1F East of Building D,Science and Technology Park,NO.2 Kefeng Road,
+				Shenzhen  Guangdong  518000
+				CN
+
+1C-87-79   (hex)		AllThingsTalk
+C00000-CFFFFF     (base 16)		AllThingsTalk
+				Ajuinlei 1
+				Gent    9000
+				BE
+
+1C-87-76   (hex)		EBS Sp. z o.o.
+100000-1FFFFF     (base 16)		EBS Sp. z o.o.
+				ul. Bronisława Czecha 59
+				Warszawa  Mazowieckie  04-555
+				PL
+
+1C-87-79   (hex)		Shenzhen Shouxin Tongda Technology Co.,Ltd
+600000-6FFFFF     (base 16)		Shenzhen Shouxin Tongda Technology Co.,Ltd
+				Rm.1301-1305A,Fujian Building, Caitian road, Futian District,
+				Shenzhen  Guangdong  China
+				CN
+
+84-39-BE   (hex)		Shenzhen Lidaxun Digital Technology Co.,Ltd
+D00000-DFFFFF     (base 16)		Shenzhen Lidaxun Digital Technology Co.,Ltd
+				4th Floor 3B03-3B05, Building 2,Internet Industries Park Area A, Baoan district
+				Shenzhen  Guangdong  51800
+				CN
+
+84-39-BE   (hex)		EDC Electronic Design Chemnitz GmbH
+C00000-CFFFFF     (base 16)		EDC Electronic Design Chemnitz GmbH
+				Technologie-Campus 4
+				Chemnitz  Sachsen  09126
+				DE
+
+84-39-BE   (hex)		Emotiq s.r.l.
+A00000-AFFFFF     (base 16)		Emotiq s.r.l.
+				Via Cristoforo Baioni 9
+				Bergamo  BG  24123
+				IT
+
+40-A3-6B   (hex)		PH Technical Labs
+900000-9FFFFF     (base 16)		PH Technical Labs
+				1200, commerce dr, ste 112
+				plano  tx  75093
+				US
+
+80-0A-80   (hex)		Beijing VControl Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Beijing VControl Technology Co., Ltd.
+				Qinghe Anning Road, Wuyougang building #22
+				Beijing  Haidian  100085
+				CN
+
+80-0A-80   (hex)		Sumitomo Wiring Systems, Ltd.
+200000-2FFFFF     (base 16)		Sumitomo Wiring Systems, Ltd.
+				Nagoya Lucent Tower 25F
+				Nagoya  Aichi  451-6025
+				JP
+
+80-0A-80   (hex)		LLVISION TECHNOLOGY CO.,LTD
+400000-4FFFFF     (base 16)		LLVISION TECHNOLOGY CO.,LTD
+				Room302,Building A Fuxing,No.30 He Tao Yuan,Guan Dong Dian Bei Jie
+				Beijing  Beijing  100026
+				CN
+
+CC-1B-E0   (hex)		IC RealTech
+600000-6FFFFF     (base 16)		IC RealTech
+				3050 North Andrews Avenue Extension
+				Pompano Beach  Florida  33064
+				US
+
+00-55-DA   (hex)		Beijing Connected Information Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Beijing Connected Information Technology Co.,Ltd.
+				F15 Block 7(Jing Xi Financial Science and Technology Building)No.30 Shi Xing St,Shijingshan District Beijing, China,100041
+				Beijing  Beijing  100041
+				CN
+
+CC-1B-E0   (hex)		MobiStor Technology Inc.
+900000-9FFFFF     (base 16)		MobiStor Technology Inc.
+				Rm. 209, 2F., No. 99-1, Anzhong Rd., Xindian Dist.
+				New Taipei City  Taiwn  23154
+				TW
+
+CC-1B-E0   (hex)		MDT technologies GmbH
+800000-8FFFFF     (base 16)		MDT technologies GmbH
+				Papiermühle 1
+				Engelskirchen  Engelskirchen  51766
+				DE
+
+CC-1B-E0   (hex)		NEWSTAR (HK) ELECTRONIC DEVELOPMENT LIMITED
+D00000-DFFFFF     (base 16)		NEWSTAR (HK) ELECTRONIC DEVELOPMENT LIMITED
+				UNIT 1005,10/F PROSPEROUS BLDG 48-52 DES VOEUX ROAD GENTRAL HONG KONG
+				HONGKONG  HONGKONG  999077
+				CN
+
+00-55-DA   (hex)		Interaxon Inc
+B00000-BFFFFF     (base 16)		Interaxon Inc
+				Suite 303 - 511 King St W
+				Toronto  ON  M5V 1K4
+				CA
+
+00-55-DA   (hex)		Arrow Electronics,Inc.
+D00000-DFFFFF     (base 16)		Arrow Electronics,Inc.
+				665 Maestro Drive
+				Reno  NV  89511
+				US
+
+CC-1B-E0   (hex)		Shenzhen Vanstor Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Shenzhen Vanstor Technology Co.,Ltd
+				nanshan District
+				shenzhen  GuangDong  518057
+				CN
+
+A0-3E-6B   (hex)		Qunar.com
+C00000-CFFFFF     (base 16)		Qunar.com
+				xihaiguoji,1#8
+				Beijing  Beijing  100086
+				CN
+
+A0-3E-6B   (hex)		718th  Research  Institute  of  CSIC
+800000-8FFFFF     (base 16)		718th  Research  Institute  of  CSIC
+				No.17 Zhanlan Road
+				Handan City  Hebei  056027
+				CN
+
+A0-3E-6B   (hex)		Incogniteam Ltd.
+900000-9FFFFF     (base 16)		Incogniteam Ltd.
+				ROTERMANI 8
+				Tallin  Estonia  10111
+				EE
+
+A0-3E-6B   (hex)		Friday Lab, UAB
+500000-5FFFFF     (base 16)		Friday Lab, UAB
+				Sauletekio ave 15
+				Vilnius  Vilnius  10224
+				LT
+
+C8-8E-D1   (hex)		AP Sensing GmbH
+A00000-AFFFFF     (base 16)		AP Sensing GmbH
+				Herrenberger Str. 130
+				Böblingen  Baden-Würrtemberg  71034
+				DE
+
+C8-8E-D1   (hex)		Shenyang Machine Tool(Group) Research & Design Institute Co., Ltd, Shanghai Branch
+600000-6FFFFF     (base 16)		Shenyang Machine Tool(Group) Research & Design Institute Co., Ltd, Shanghai Branch
+				2nd Floor,1st Building, No. 128 Xiangyin Rd, Shanghai
+				Shanghai  Shanghai  200433
+				CN
+
+C8-8E-D1   (hex)		ROTRONIC AG
+200000-2FFFFF     (base 16)		ROTRONIC AG
+				Grindelstrasse 6
+				Bassersdorf  Zurich  8303
+				CH
+
+A0-3E-6B   (hex)		Videx Electronics S.p.A.
+200000-2FFFFF     (base 16)		Videx Electronics S.p.A.
+				Via del Lavoro, 1
+				Monte Giberto  FM  63846
+				IT
+
+DC-44-27   (hex)		Wharton Electronics Ltd
+800000-8FFFFF     (base 16)		Wharton Electronics Ltd
+				Unit 15, Thame Park Business Centre
+				Thame  Oxfordshire  OX9 3XA
+				GB
+
+1C-21-D1   (hex)		Dynojet Research
+900000-9FFFFF     (base 16)		Dynojet Research
+				2191 Mendenhall #105
+				North Las Vegas  NV  89081
+				US
+
+1C-21-D1   (hex)		Reliatronics Inc.
+800000-8FFFFF     (base 16)		Reliatronics Inc.
+				1858 Ranch Road 3232
+				Johnson City  TX  78636
+				US
+
+B0-C5-CA   (hex)		Astyx GmbH
+800000-8FFFFF     (base 16)		Astyx GmbH
+				Lise-Meitner-Str. 2a
+				Ottobrunn  Bavaria  85521
+				DE
+
+DC-44-27   (hex)		General Microsystems Sdn Bhd
+300000-3FFFFF     (base 16)		General Microsystems Sdn Bhd
+				3-17, Jalan USJ 7/3B
+				UEP Subang Jaya  Selangor D. E.  47610
+				MY
+
+DC-44-27   (hex)		Suritel
+000000-0FFFFF     (base 16)		Suritel
+				5, ul. Usievicha
+				Moscow  Moscow  125319
+				RU
+
+1C-21-D1   (hex)		B-Scada Inc.
+500000-5FFFFF     (base 16)		B-Scada Inc.
+				9030 W Fort Island Trail
+				Crystal River  FL  34429
+				US
+
+B0-C5-CA   (hex)		IVK-SAYANY
+100000-1FFFFF     (base 16)		IVK-SAYANY
+				Aviamotornaya str. 50
+				Moscow  Moscow  111024
+				RU
+
+B0-C5-CA   (hex)		SYSTOVI
+500000-5FFFFF     (base 16)		SYSTOVI
+				5, rue du Chêne Lassé
+				SAINT-HERBLAIN  Loire-Atlantique  44800
+				FR
+
+78-C2-C0   (hex)		Wan Chao An (Beijing) Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Wan Chao An (Beijing) Technology Co., Ltd.
+				Room 1-1-1403, Shang Di Jia Yuan
+				Beijing  Beijing  100085
+				CN
+
+B4-37-D1   (hex)		DIMTON CO.,LTD.
+300000-3FFFFF     (base 16)		DIMTON CO.,LTD.
+				1F.,No.137,Xingfu E.Rd., Xinzhuang Dist., New Taipei City 242, Taiwan (R.O.C)
+				New Taipei  Taiwan  24252
+				TW
+
+B4-37-D1   (hex)		Alturna Networks
+100000-1FFFFF     (base 16)		Alturna Networks
+				De Huchtstraat 35
+				Almere  Flevoland  1327 EC
+				NL
+
+B4-37-D1   (hex)		Fibersystem AB
+200000-2FFFFF     (base 16)		Fibersystem AB
+				Gårdsfogdevägen 18B
+				Bormma  Stockholm  16866
+				SE
+
+78-C2-C0   (hex)		Shenzhen ELI Technology co.,ltd
+000000-0FFFFF     (base 16)		Shenzhen ELI Technology co.,ltd
+				Room 201, Dawning Building, No.12 Keji South 12th Road, Hi-Tech Park , Shenzhen
+				Shenzhen  Guangdong  518057
+				CN
+
+88-5D-90   (hex)		Wuhan Strong Electronics Co., Ltd
+400000-4FFFFF     (base 16)		Wuhan Strong Electronics Co., Ltd
+				2nd Floor, 6 Bldg, Guannan Fuxing Medical Park,
+				Wuhan  Hubei  430074
+				CN
+
+88-5D-90   (hex)		Schmidt & Co.,(H.K.)Ltd.
+700000-7FFFFF     (base 16)		Schmidt & Co.,(H.K.)Ltd.
+				5F., No.139, Songjiang Rd., Zhongshan Dist., Taipei City 10485, Taiwan (R.O.C.)
+				Taipei  Taiwan  10485
+				TW
+
+88-5D-90   (hex)		iRoom GmbH
+C00000-CFFFFF     (base 16)		iRoom GmbH
+				Paracelsus Str. 4
+				Oberndorf  Salzburg  5110
+				AT
+
+88-5D-90   (hex)		Premier Merchandises Limited
+B00000-BFFFFF     (base 16)		Premier Merchandises Limited
+				23/F Metro Loft, 38 Kwai Hei Street,
+				Hong Kong    
+				HK
+
+74-F8-DB   (hex)		Provision-ISR
+500000-5FFFFF     (base 16)		Provision-ISR
+				11 Atir Yeda St.
+				Kfar Saba  Israel  4464310
+				IL
+
+64-FB-81   (hex)		Kay Schulze & Karsten Pohle GbR
+500000-5FFFFF     (base 16)		Kay Schulze & Karsten Pohle GbR
+				Heinrich-Hertz-Strasse 121
+				Hamburg  Hamburg  22083
+				DE
+
+64-FB-81   (hex)		NPG Technology S.A.
+800000-8FFFFF     (base 16)		NPG Technology S.A.
+				C/ Ecuador 14 (P.I. Las Monjas)
+				Torrejón de Ardoz  Madrid  28850
+				ES
+
+80-7B-85   (hex)		Oliotalo Oy
+B00000-BFFFFF     (base 16)		Oliotalo Oy
+				Sinikalliontie 18 B
+				Espoo  Uusimaa  02630
+				FI
+
+80-7B-85   (hex)		SMART ELECTRONICS NZ LIMITED
+900000-9FFFFF     (base 16)		SMART ELECTRONICS NZ LIMITED
+				4d Palm Grove, Berhampore
+				Wellington    6023
+				NZ
+
+54-9A-11   (hex)		SpearX Inc.
+100000-1FFFFF     (base 16)		SpearX Inc.
+				No.332., Sec. 1, Jianguo S. Rd.,
+				Taipei City    10656
+				TW
+
+64-FB-81   (hex)		Bronkhorst High-Tech BV
+A00000-AFFFFF     (base 16)		Bronkhorst High-Tech BV
+				Nijverheidsstraat 1a
+				Ruurlo  Gelderland  NL-7261AK
+				NL
+
+80-E4-DA   (hex)		Elcus
+900000-9FFFFF     (base 16)		Elcus
+				Varshavskaya st. 5A lit L
+				St.-Petersburg  St.-Petersburg  196128
+				RU
+
+64-FB-81   (hex)		Pricer AB
+400000-4FFFFF     (base 16)		Pricer AB
+				Västra Järnvägsgatan 7
+				Stockholm    11164
+				SE
+
+1C-CA-E3   (hex)		PGA ELECTRONIC
+100000-1FFFFF     (base 16)		PGA ELECTRONIC
+				ZI LA MALTERIE
+				MONTIERCHAUME    36130
+				FR
+
+64-FB-81   (hex)		MOBILUS Inc.
+300000-3FFFFF     (base 16)		MOBILUS Inc.
+				2nd Fl. 18,
+				Seocho-gu  Seoul  138-898
+				KR
+
+1C-CA-E3   (hex)		Private
+000000-0FFFFF     (base 16)		Private
+
+90-C6-82   (hex)		Shenzhen Lencotion Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Shenzhen Lencotion Technology Co.,Ltd
+				 LongGang,Buji Xia Shuijing,Hubei
+				Shenzhen  Guangdong  518112
+				CN
+
+2C-D1-41   (hex)		CITA SMART SOLUTIONS LTD
+E00000-EFFFFF     (base 16)		CITA SMART SOLUTIONS LTD
+				5th Floor, 52-54 Gracechurch Street, London EC3V 0EH, United Kingdom
+				London  N/L  EC3V 0EH
+				GB
+
+80-E4-DA   (hex)		Shortcut Labs
+700000-7FFFFF     (base 16)		Shortcut Labs
+				Teknikringen 26
+				Stockholm  Stockholm  11428
+				SE
+
+80-E4-DA   (hex)		Wheatstone Corporation
+000000-0FFFFF     (base 16)		Wheatstone Corporation
+				600 Industrial Drive
+				New Bern  NC  28562
+				US
+
+2C-D1-41   (hex)		Fiberroad Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		Fiberroad Technology Co., Ltd.
+				2F,5# Building,Minxing Industrial Park,MinKang Rd.Minzhi,Longhua District,ShenZhen China.
+				shenzhen  GuangDong  518131
+				CN
+
+2C-D1-41   (hex)		ZENIC INC.
+500000-5FFFFF     (base 16)		ZENIC INC.
+				4-7-5
+				Nionohama  Otsu Shiga  520-0801
+				JP
+
+2C-6A-6F   (hex)		Logic IO Aps
+900000-9FFFFF     (base 16)		Logic IO Aps
+				Holmboes Alle 14
+				Horsens  DK  8700
+				DK
+
+2C-6A-6F   (hex)		SM DSP CO.,LTD.
+700000-7FFFFF     (base 16)		SM DSP CO.,LTD.
+				6-Gil 13-14
+				Gumi-si  Gyeongsangbuk-Do  730-906
+				KR
+
+A0-BB-3E   (hex)		ManTech International Corporation
+500000-5FFFFF     (base 16)		ManTech International Corporation
+				2250 Corporate Park Drive
+				Herndon  Virginia  20171
+				US
+
+A0-BB-3E   (hex)		Filo SRL
+A00000-AFFFFF     (base 16)		Filo SRL
+				Via Giovanni Giolitti 34
+				Roma  rm  00185
+				IT
+
+98-02-D8   (hex)		Private
+E00000-EFFFFF     (base 16)		Private
+
+2C-6A-6F   (hex)		ELKO EP, s.r.o.
+100000-1FFFFF     (base 16)		ELKO EP, s.r.o.
+				Palackeho 493
+				Holesov, Vsetuly  Zlinsky kraj  76901
+				CZ
+
+98-02-D8   (hex)		Zedi, Inc.
+400000-4FFFFF     (base 16)		Zedi, Inc.
+				1855 - 94 ST NW
+				Edmonton  AB  T6N 1E6
+				CA
+
+98-02-D8   (hex)		Simplo Technology Co.,LTD
+800000-8FFFFF     (base 16)		Simplo Technology Co.,LTD
+				No471., Sec.2, Pa The Rd.,
+				Hu Kou  30348  Hsin Chu Hsien
+				TW
+
+28-FD-80   (hex)		Airbus Defence and Space Oy
+C00000-CFFFFF     (base 16)		Airbus Defence and Space Oy
+				Hiomotie 32
+				  Helsinki  00380
+				FI
+
+A0-BB-3E   (hex)		IVision Electronics Co.,Ltd
+100000-1FFFFF     (base 16)		IVision Electronics Co.,Ltd
+				Bldg.B,Yingkeli Industrial Park
+				Shenzhen  GuangDong  518116
+				CN
+
+A0-BB-3E   (hex)		WiteRiver Technology LLC
+300000-3FFFFF     (base 16)		WiteRiver Technology LLC
+				31 Mira str.
+				Ufa  Republic of Bashkortostan  450112
+				RU
+
+28-FD-80   (hex)		Zhixiang Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Zhixiang Technology Co., Ltd.
+				7-2604 Media Village,
+				Chaoyang District,  Beijing  100107
+				CN
+
+2C-26-5F   (hex)		Jiangsu JARI Technology Group Co., LTD
+200000-2FFFFF     (base 16)		Jiangsu JARI Technology Group Co., LTD
+				NO.18, Shenghu Rd,
+				Lianyungang City  Jiangsu  222061
+				CN
+
+2C-26-5F   (hex)		Polara Engineering
+A00000-AFFFFF     (base 16)		Polara Engineering
+				9153 STELLAR COURT
+				CORONA  California  92883
+				US
+
+0C-EF-AF   (hex)		GainStrong Industry Co.,Ltd
+C00000-CFFFFF     (base 16)		GainStrong Industry Co.,Ltd
+				3rd Floor, 1st Building, Block E, Minzhu West Industrial Zone, Bao’an Dist.
+				Shenzhen  Guangdong  518100
+				CN
+
+0C-EF-AF   (hex)		chengdu joyotime Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		chengdu joyotime Technology Co., Ltd.
+				room 503, B7 , tianfu software park
+				chengdu  sichuan  610000
+				CN
+
+F8-02-78   (hex)		CLARUS Korea Co., Ltd
+400000-4FFFFF     (base 16)		CLARUS Korea Co., Ltd
+				 2F, Illutech Bldg, Myoenmok7-dong,
+				   Seoul   131827
+				KR
+
+F8-02-78   (hex)		Rosemount Analytical
+B00000-BFFFFF     (base 16)		Rosemount Analytical
+				10241 West Little York, Suite 200
+				Houston, TX 77040  Texas  77040
+				US
+
+A4-4F-29   (hex)		HTD
+A00000-AFFFFF     (base 16)		HTD
+				1000 Shiloh Rd, Suite 100
+				Plano  TX  75074
+				US
+
+A4-4F-29   (hex)		GUANGDONG REAL-DESIGN INTELLIGENT TECHNOLOGY CO.,LTD
+B00000-BFFFFF     (base 16)		GUANGDONG REAL-DESIGN INTELLIGENT TECHNOLOGY CO.,LTD
+				No.1 Ruixiang Road,Fengxiang industrial Park,DaliangSub-district,Shunde district,Foshan City,Guangdong
+				Foshan  Guangdong  528300
+				CN
+
+3C-39-E7   (hex)		VANSTONE ELECTRONIC (BEIJING)CO,. LTD.
+C00000-CFFFFF     (base 16)		VANSTONE ELECTRONIC (BEIJING)CO,. LTD.
+				Room 805,8/F,Qinghua Information Port Development Building,North High-tech Industrial Park,Nanshan District,Shenzhen
+				shenzhen  guangdong  518000
+				CN
+
+A4-4F-29   (hex)		Dermalog Identification Systems GmbH
+000000-0FFFFF     (base 16)		Dermalog Identification Systems GmbH
+				Mittelweg 120
+				Hamburg  Hamburg  20148
+				DE
+
+3C-39-E7   (hex)		Attrackting AG
+500000-5FFFFF     (base 16)		Attrackting AG
+				Falkenstrasse 44
+				Biel/Bienne  Berne  2502
+				CH
+
+0C-EF-AF   (hex)		Goerlitz AG
+100000-1FFFFF     (base 16)		Goerlitz AG
+				August-Thyssen-Strasse 32
+				Koblenz  Rheinland-Pfalz  56070
+				DE
+
+3C-39-E7   (hex)		Martem AS
+800000-8FFFFF     (base 16)		Martem AS
+				Akadeemia tee 21/6
+				Tallinn  Harjumaa  12618
+				EE
+
+10-07-23   (hex)		BEIJING SOOALL INFORMATION TECHNOLOGY CO.,LTD
+500000-5FFFFF     (base 16)		BEIJING SOOALL INFORMATION TECHNOLOGY CO.,LTD
+				Room 1028,Block B,No.11 XinghuoRoad,Science City,Fengtai District
+				Beijing  Beijing  100070
+				CN
+
+E8-18-63   (hex)		Protek Electronics Group Co.,LTD
+B00000-BFFFFF     (base 16)		Protek Electronics Group Co.,LTD
+				Homecare Technology Park,5/F,No.30,Langdong
+				Shenzhen  Guangdong  518105
+				CN
+
+D0-22-12   (hex)		Spirit IT B.V.
+000000-0FFFFF     (base 16)		Spirit IT B.V.
+				prof. dr. Dorgelolaan 20
+				Eindhoven  Noord-Brabant  5613 AM
+				NL
+
+D0-22-12   (hex)		Viatron GmbH
+400000-4FFFFF     (base 16)		Viatron GmbH
+				Carl-Metz-Str. 3
+				Ettlingen  Baden Würtemberg  76275
+				DE
+
+B8-D8-12   (hex)		V5 Technology Corporation
+400000-4FFFFF     (base 16)		V5 Technology Corporation
+				5F., No.7, Lixing 3rd Rd., East Dist., Hsinchu City 30078, Taiwan (R.O.C.)
+				HsinChu  Taiwan  30078
+				TW
+
+74-E1-4A   (hex)		Kanto Aircraft Instrument Co., Ltd.
+900000-9FFFFF     (base 16)		Kanto Aircraft Instrument Co., Ltd.
+				2-3-18 Honfujisawa
+				Fujisawa  Kanagawa  251-0875
+				JP
+
+74-E1-4A   (hex)		APM Technologies (DongGuan) Ltd
+700000-7FFFFF     (base 16)		APM Technologies (DongGuan) Ltd
+				109Gosun Science Building, NanCheng , DongGuan, GuangDong, China
+				DongGuan  GuangDong  523000
+				CN
+
+B8-D8-12   (hex)		Kiwigrid GmbH
+A00000-AFFFFF     (base 16)		Kiwigrid GmbH
+				Kleiststraße 10b
+				Dresden  Saxony  01129
+				DE
+
+E4-95-6E   (hex)		Shanghai Tieda Telecommunications Equipment Co.,LTD.
+D00000-DFFFFF     (base 16)		Shanghai Tieda Telecommunications Equipment Co.,LTD.
+				18F The Sapphire Tower 267 TianmuRd(M)
+				Shanghai  Zhabei District  200070
+				
+
+BC-66-41   (hex)		UtilLighting Co.,Ltd.
+D00000-DFFFFF     (base 16)		UtilLighting Co.,Ltd.
+				#102, 1F, 22, Samyang-ro, Seongbuk-gu, Seoul
+				Seongbuk-gu  Seoul  136-717
+				KR
+
+E4-95-6E   (hex)		PT.MLWTelecom
+800000-8FFFFF     (base 16)		PT.MLWTelecom
+				Jalan Jembatan Dua Raya no.16/2
+				  Jakarta  14450
+				ID
+
+E4-95-6E   (hex)		SMC Networks, Inc
+000000-0FFFFF     (base 16)		SMC Networks, Inc
+				20 Mason
+				Irvine  CA  92618
+				US
+
+BC-66-41   (hex)		Global China Technology Limited
+100000-1FFFFF     (base 16)		Global China Technology Limited
+				Ruyi Road 1-3,Ailian, Longcheng Street, longgang Town,
+				Shenzhen  GuangDong  518172
+				CN
+
+58-FC-DB   (hex)		Spang Power Electronics
+000000-0FFFFF     (base 16)		Spang Power Electronics
+				9305 Progress Parkway
+				Mentor  Ohio  44060
+				US
+
+B0-1F-81   (hex)		Access Device Integrated Communications Corp.
+C00000-CFFFFF     (base 16)		Access Device Integrated Communications Corp.
+				No. 839, Sec.3, ChungChing Road,
+				Taichung City  Taichung  42862
+				TW
+
+58-FC-DB   (hex)		Hi-Target Surveying Instrument Co., Ltd.
+900000-9FFFFF     (base 16)		Hi-Target Surveying Instrument Co., Ltd.
+				Plant 202, BLDG 13, Tian'An HQ Center, No.555 North Panyu RD. Donghuan Block,
+				Guangzhou  Guangdong  511400
+				CN
+
+58-FC-DB   (hex)		Inforce Computing Inc.
+400000-4FFFFF     (base 16)		Inforce Computing Inc.
+				48820 Kato Road
+				Fremont  CA  94538
+				US
+
+BC-66-41   (hex)		Intuitive Surgical, Inc
+600000-6FFFFF     (base 16)		Intuitive Surgical, Inc
+				1250 Kifer Rd
+				Sunnyvale  California  94086
+				US
+
+14-1F-BA   (hex)		POS Systema LLC
+E00000-EFFFFF     (base 16)		POS Systema LLC
+				Varshavskoe shosse, 35, room №13
+				Moscow  Moscow  117105
+				RU
+
+F4-0E-11   (hex)		BEIJING DONGJIN AERO-TECH CO., LTD
+100000-1FFFFF     (base 16)		BEIJING DONGJIN AERO-TECH CO., LTD
+				Building 7, 3th floor, Compound No. 33, Beiwaxili, Haidian District
+				Beijing  Beijing  100089
+				CN
+
+B0-1F-81   (hex)		Aether Services, Inc.
+700000-7FFFFF     (base 16)		Aether Services, Inc.
+				1A2-A08, No.1, Lising 1st RD.
+				Hsinchu City  Hsinchu  30078
+				TW
+
+F4-0E-11   (hex)		Kodpro Ltd.
+A00000-AFFFFF     (base 16)		Kodpro Ltd.
+				Room 801, 8/F, Opulent Bldg.,
+				Hong Kong  Wan Chai  999077
+				HK
+
+14-1F-BA   (hex)		Wisnetworks Technologies Co., Ltd.
+700000-7FFFFF     (base 16)		Wisnetworks Technologies Co., Ltd.
+				No.77, FuTe West 3 Road, China
+				  Shanghai  200000
+				
+
+7C-70-BC   (hex)		K-Vision Technology (Shanghai), Ltd
+400000-4FFFFF     (base 16)		K-Vision Technology (Shanghai), Ltd
+				Floor 4, No.9 Building, 879 Lane
+				Shanghai  Shanghai  200333
+				CN
+
+7C-70-BC   (hex)		Nomad Digital Ltd.
+700000-7FFFFF     (base 16)		Nomad Digital Ltd.
+				2nd Floor, Baltic Chambers,
+				Newcastle upon Tyne    NE1 3DQ
+				GB
+
+7C-70-BC   (hex)		Shanghai magcomm communication technology co ltd
+000000-0FFFFF     (base 16)		Shanghai magcomm communication technology co ltd
+				B Block,11F,Software Building, No 461 Hongcaolu
+				Shanghai  Shanghai  200233
+				CN
+
+14-1F-BA   (hex)		BYZERO
+400000-4FFFFF     (base 16)		BYZERO
+				1222 Doosan Venture Digm
+				Anyang-si  Gyeonggi-do  431-755
+				KR
+
+BC-34-00   (hex)		Q-PRODUCTS a. s.
+700000-7FFFFF     (base 16)		Q-PRODUCTS a. s.
+				Rybnicna 38/K
+				Bratislava  SK  83106
+				SK
+
+BC-34-00   (hex)		Altronix Corporation
+300000-3FFFFF     (base 16)		Altronix Corporation
+				140 58th street 
+				Brooklyn  NY  11220
+				US
+
+BC-34-00   (hex)		Redvision CCTV
+000000-0FFFFF     (base 16)		Redvision CCTV
+				17 Highview
+				Bordon  Hampshire  GU35 0AX
+				GB
+
+A4-3B-FA   (hex)		Recognition Systems LLC
+600000-6FFFFF     (base 16)		Recognition Systems LLC
+				2380 Owen Street
+				Santa Clara  CA  95054
+				US
+
+A4-3B-FA   (hex)		Deatronic srl
+700000-7FFFFF     (base 16)		Deatronic srl
+				Via Giulianello 1/7
+				ROMA    00178
+				IT
+
+D0-76-50   (hex)		Private
+400000-4FFFFF     (base 16)		Private
+
+D0-76-50   (hex)		Accumulate AB
+800000-8FFFFF     (base 16)		Accumulate AB
+				Lästmakargatan 20
+				  Stockholm  111 44
+				SE
+
+74-19-F8   (hex)		Starcor Beijing Co.,Limited
+500000-5FFFFF     (base 16)		Starcor Beijing Co.,Limited
+				NO.210 Block B, Building 2
+				Beijing  Berijing  100089
+				CN
+
+74-19-F8   (hex)		Princip a.s.
+900000-9FFFFF     (base 16)		Princip a.s.
+				Radlicka 204/503
+				Praha 5  Praha  158 00
+				CZ
+
+74-19-F8   (hex)		Tanjarine
+A00000-AFFFFF     (base 16)		Tanjarine
+				188 S Whisman Rd, Bldg A
+				Mountain View  CA  94041
+				US
+
+74-19-F8   (hex)		Quest Payment Systems
+800000-8FFFFF     (base 16)		Quest Payment Systems
+				227 Burwood Road
+				Hawthorn  Victoria  3122
+				AU
+
+74-19-F8   (hex)		Symtop Instrument Co.
+200000-2FFFFF     (base 16)		Symtop Instrument Co.
+				Haidianqu Xueqinglu Xuezhixuan 613
+				Haidianqu  Beijing  100083
+				CN
+
+4C-4B-F9   (hex)		Electrolux Professional AB
+A00000-AFFFFF     (base 16)		Electrolux Professional AB
+				Ringvägen 14
+				Ljungby    34180
+				SE
+
+40-11-75   (hex)		MIRC ELECTRONICS LTD
+500000-5FFFFF     (base 16)		MIRC ELECTRONICS LTD
+				Onida House, G-1, MIDC, Mahakali Caves Road, Andheri East
+				Mumbai  Maharashtra  400093
+				IN
+
+40-11-75   (hex)		Table Trac Inc
+400000-4FFFFF     (base 16)		Table Trac Inc
+				6101 Baker Rd STE 206
+				Minnetonka  MN  55345
+				US
+
+40-11-75   (hex)		Lexi Devices, Inc.
+000000-0FFFFF     (base 16)		Lexi Devices, Inc.
+				2342 Shattuck Ave, #260
+				Berkeley    94704
+				US
+
+40-11-75   (hex)		NIBBLE
+E00000-EFFFFF     (base 16)		NIBBLE
+				Rua Julio Dinis 265 1D
+				Trofa    4785-330
+				PT
+
+40-11-75   (hex)		Fujian Kuke3D Technology Co.,LTD
+100000-1FFFFF     (base 16)		Fujian Kuke3D Technology Co.,LTD
+				No.33, R&D Building, No. 1, Donghu Road, Digital Fujian Industrial Park, Changle District
+				Fuzhou   Fujian  350200
+				CN
+
+10-DC-B6   (hex)		Pickering Interfaces Ltd
+A00000-AFFFFF     (base 16)		Pickering Interfaces Ltd
+				Stephenson Road
+				Clacton On Sea  Essex  CO154NL
+				GB
+
+10-DC-B6   (hex)		Moya Commumication Technology (Shenzhen) Co.,Ltd.
+700000-7FFFFF     (base 16)		Moya Commumication Technology (Shenzhen) Co.,Ltd.
+				Guang Hui Science Park, No.17 of Min Qing Road, Longhua District
+				Shenzhen    518000
+				CN
+
+54-A4-93   (hex)		Intelligent Surveillance Corp
+000000-0FFFFF     (base 16)		Intelligent Surveillance Corp
+				PO Box 12168
+				College Station  TX  77842
+				US
+
+54-A4-93   (hex)		I-MOON TECHNOLOGY CO., LIMITED
+300000-3FFFFF     (base 16)		I-MOON TECHNOLOGY CO., LIMITED
+				FLAT/RM 2253, BLK 1, 22/F, HOI TAI FACTORY, EST TSING YEUNG CIRCUIT, TUEN MUN
+				NT    999077
+				HK
+
+04-D1-6E   (hex)		Dspread Technology (Beijing) Inc.
+500000-5FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+04-D1-6E   (hex)		Evolute Systems Private Limited
+E00000-EFFFFF     (base 16)		Evolute Systems Private Limited
+				#3794 ,Ground and First Floor, 7th Main, Indira Nagar
+				Bangalore  Karnataka  560038
+				IN
+
+44-03-77   (hex)		Exsom Computers LLC
+200000-2FFFFF     (base 16)		Exsom Computers LLC
+				Office 3206, The Citadel Tower, Business Bay
+				Dubai  Dubai  72891
+				AE
+
+44-03-77   (hex)		SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
+600000-6FFFFF     (base 16)		SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
+				Longhua New District Qing Xiang Road, Bao Neng Technology Park
+				SHEN ZHEN  GUANG DONG  518109
+				CN
+
+44-03-77   (hex)		Atari, Inc.
+100000-1FFFFF     (base 16)		Atari, Inc.
+				286 Madison Ave, 8th floor
+				New York  NY  10017
+				US
+
+44-03-77   (hex)		Lenovo Image(Tianjin) Technology Ltd.
+400000-4FFFFF     (base 16)		Lenovo Image(Tianjin) Technology Ltd.
+				Tianjin Free Trade Test Zone (Airport Economic Zone) Room 310, No. 1, Second Avenue, Airport International Logistics Zone
+				Tianjin  Tianjin  300000
+				CN
+
+44-03-77   (hex)		Bolin Technology Co., Ltd
+E00000-EFFFFF     (base 16)		Bolin Technology Co., Ltd
+				5/F, No 4 Block, Jinruizhonghe Industry Park,Huarong Road, Da Lang, Long Hua, Shenzhen, China.
+				shenzhen  Guang Dong  518109
+				CN
+
+50-62-55   (hex)		COTT Electronics
+D00000-DFFFFF     (base 16)		COTT Electronics
+				71-75 Shelton Street
+				London    WC2H 9JQ
+				GB
+
+50-62-55   (hex)		SHINSOFT CO., LTD.
+E00000-EFFFFF     (base 16)		SHINSOFT CO., LTD.
+				3F., No. 128, Xinhu 2nd Rd., Neihu Dist.
+				Taipei City    114
+				TW
+
+1C-FD-08   (hex)		Cobham Slip Rings
+900000-9FFFFF     (base 16)		Cobham Slip Rings
+				18 Rue de Montréal
+				ANNEMASSE  Ville-la-Grand  74108
+				FR
+
+C4-95-4D   (hex)		BA International Electronics Co. Ltd.
+000000-0FFFFF     (base 16)		BA International Electronics Co. Ltd.
+				8F., No. 140, Nanhua 1st St., Luzhu Dist.,
+				Taoyuan City    338
+				TW
+
+C4-95-4D   (hex)		LLC TechnoEnergo
+700000-7FFFFF     (base 16)		LLC TechnoEnergo
+				Kemerovskaya str., 3
+				Nizhny Novgorod  Nizhny Novgorod region  603152
+				RU
+
+C4-95-4D   (hex)		Xinjiang Golden Calf Energy IOT Technology Co., Ltd 
+800000-8FFFFF     (base 16)		Xinjiang Golden Calf Energy IOT Technology Co., Ltd 
+				A02 office building of Cloud Computing Industrial Park, Karamay District
+				Karamay  Xinjiang  834000
+				CN
+
+C4-95-4D   (hex)		Teletronik AG
+100000-1FFFFF     (base 16)		Teletronik AG
+				Bahnhofstrasse 10.
+				Zug    6302
+				CH
+
+C4-95-4D   (hex)		AKKA Germany GmbH
+600000-6FFFFF     (base 16)		AKKA Germany GmbH
+				Riesstrasse 14
+				München  Bayern  80992
+				DE
+
+64-31-39   (hex)		Livongo Health
+100000-1FFFFF     (base 16)		Livongo Health
+				150 W. Evelyn Ave, Suite 150
+				Mountain View  CA  94041
+				US
+
+C4-95-4D   (hex)		KAT Mekatronik Urunleri AS
+A00000-AFFFFF     (base 16)		KAT Mekatronik Urunleri AS
+				Istanbul Trakya Serbest Bolgesi Ataturk Bulvari No:20
+				Istanbul  Catalca  34500
+				TR
+
+C4-95-4D   (hex)		GL Solutions Inc.
+400000-4FFFFF     (base 16)		GL Solutions Inc.
+				16-3 Kuramae 4-chome
+				Taito-ku  Tokyo  111-0051
+				JP
+
+00-69-67   (hex)		miliwave
+100000-1FFFFF     (base 16)		miliwave
+				room 423,105 gwanggyo-ro, yengtong-gu
+				suwon-si  Kyunggi-do  16229
+				KR
+
+00-69-67   (hex)		Comcast-SRL
+600000-6FFFFF     (base 16)		Comcast-SRL
+				Alejo Martinez 17
+				Sosua  Puerto Plata  34443
+				DO
+
+00-69-67   (hex)		aversix
+D00000-DFFFFF     (base 16)		aversix
+				???????????351?4??7 (????)
+				???  ???  235
+				TW
+
+00-69-67   (hex)		Ningbo Shen Link Communication Technology Co.,Ltd
+200000-2FFFFF     (base 16)		Ningbo Shen Link Communication Technology Co.,Ltd
+				No.87,Fengming Road,Lizhou Street
+				Yuyao City  Zhejiang Province  315403
+				CN
+
+00-69-67   (hex)		Zhejiang Holip Electronic Technology Co.,Ltd
+A00000-AFFFFF     (base 16)		Zhejiang Holip Electronic Technology Co.,Ltd
+				NO.339 XINQIAO NORTH ROAD
+				Haiyan  Zhejiang  314300
+				CN
+
+A0-22-4E   (hex)		Hunan Youmei Science&Technology Development Co.,Ltd.
+E00000-EFFFFF     (base 16)		Hunan Youmei Science&Technology Development Co.,Ltd.
+				3F, Building No.B8, Cultural Advertising Creative Industry Park, Economic Development Zone
+				Huaihua City  Hunan Province  418000
+				CN
+
+A0-22-4E   (hex)		MESIT asd, s.r.o.
+600000-6FFFFF     (base 16)		MESIT asd, s.r.o.
+				Sokolovska 573
+				Uherske Hradiste    686 01
+				CZ
+
+A0-22-4E   (hex)		Standartoptic, Limited Liability Company
+C00000-CFFFFF     (base 16)		Standartoptic, Limited Liability Company
+				Moskovsky p, 22nd kilometer Kievskoe highway, house 4, building 1 floor 9 Block B office 903?
+				Moscow    108811
+				RU
+
+20-0A-0D   (hex)		Amazon Technologies Inc.
+B00000-BFFFFF     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+20-0A-0D   (hex)		Clearly IP Inc
+300000-3FFFFF     (base 16)		Clearly IP Inc
+				2416 Industrial Dr Unit F
+				Neenah  WI  54956
+				US
+
+20-0A-0D   (hex)		Bently & EL  Co. Ltd.
+D00000-DFFFFF     (base 16)		Bently & EL  Co. Ltd.
+				7F-3, Fuxing North Road, Zhong Shan District
+				Taipei    104
+				TW
+
+20-0A-0D   (hex)		Austin Hughes Electronics Ltd.
+600000-6FFFFF     (base 16)		Austin Hughes Electronics Ltd.
+				Unit 3608-12, Cable TV Tower, 9 Hoi Shing Road, Tsuen Wan,  Hong Kong
+				Hong Kong  Kwai Tsing New Territories  00000
+				HK
+
+20-0A-0D   (hex)		HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
+E00000-EFFFFF     (base 16)		HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
+				Build C,Wanfu Center,Binkang Road No.228,Binjiang Area
+				China    210051
+				CN
+
+40-2C-76   (hex)		Beijing Smarot Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Beijing Smarot Technology Co., Ltd.
+				Room 505, unit 2, 5th floor, 12th building, 3rd yard , Kangze road, Fangshan district
+				Beijing  Beijing  102488
+				CN
+
+40-2C-76   (hex)		Shanghai Dahua Scale Factory
+100000-1FFFFF     (base 16)		Shanghai Dahua Scale Factory
+				No.1013 Wangqiao Road,Pudong New District
+				Shanghai  Shanghai  201201
+				CN
+
+50-DE-19   (hex)		Tianjin Natianal Health Technology Co.,Ltd
+700000-7FFFFF     (base 16)		Tianjin Natianal Health Technology Co.,Ltd
+				Room 2-6, No.8, Haitai development fifth Road, Huayuan industrial Zone , Binhai high-tech District
+				Tianjin  Tianjin  300450
+				CN
+
+50-DE-19   (hex)		AEG Identifikationssysteme GmbH
+900000-9FFFFF     (base 16)		AEG Identifikationssysteme GmbH
+				Hörvelsinger Weg 47
+				Ulm    89081
+				DE
+
+50-DE-19   (hex)		SPII SPA
+200000-2FFFFF     (base 16)		SPII SPA
+				VIA D. VOLPI 37 - ANGOLO VIA MONTOLI
+				SARONNO  VARESE  21047
+				IT
+
+50-A4-D0   (hex)		TRAXENS
+000000-0FFFFF     (base 16)		TRAXENS
+				HELIOPOLIS III – 16 rue Louis Leprince Ringuet
+				Marseille  Provence-Alpes-Côte d'Azur  13013
+				FR
+
+50-DE-19   (hex)		TRAXENS
+300000-3FFFFF     (base 16)		TRAXENS
+				HELIOPOLIS III – 16 rue Louis Leprince Ringuet
+				Marseille  Provence-Alpes-Côte d'Azur  13013
+				FR
+
+3C-FA-D3   (hex)		LIPS Corporation
+700000-7FFFFF     (base 16)		LIPS Corporation
+				2F., No. 100, Ruiguang Rd., Neihu Dist.
+				Taipei  Taiwan  114
+				TW
+
+50-DE-19   (hex)		Tannak International AB
+A00000-AFFFFF     (base 16)		Tannak International AB
+				 Midgårdsvägen 13
+				Luleå     973 34
+				SE
+
+3C-FA-D3   (hex)		Annapurna labs
+100000-1FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+3C-FA-D3   (hex)		 Corelink Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		 Corelink Technology Co.,Ltd
+				2701, building D2, No.1, Keyuan Weiyi Road, Laoshan District
+				Qingdao  Shandong  China
+				CN
+
+3C-FA-D3   (hex)		Shenzhen Vplus Communication Intelligent Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen Vplus Communication Intelligent Co., Ltd.
+				Bao'an
+				Shenzhen  Guangdong  518000
+				CN
+
+B0-B3-53   (hex)		WUUK LABS CORP.
+700000-7FFFFF     (base 16)		WUUK LABS CORP.
+				16192 COASTAL HWY
+				LEWES  DE  19958
+				US
+
+B0-B3-53   (hex)		Nanjing Yining Intelligent Technology Co., Ltd.
+E00000-EFFFFF     (base 16)		Nanjing Yining Intelligent Technology Co., Ltd.
+				Room 209-114, 2 / F, Building 04, No. 18 Jialingjiang East Street, Jianye District, Nanjing
+				Nanjing  Jiangsu  210019
+				CN
+
+B0-B3-53   (hex)		Blake UK
+000000-0FFFFF     (base 16)		Blake UK
+				177-187, Rutland Road
+				Sheffield  --select--  S3 9PT
+				GB
+
+B0-B3-53   (hex)		Beijing Geekplus Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Beijing Geekplus Technology Co.,Ltd.
+				1st Floor, Building 1, Chaolai High-Tech industrial Part, Chaoyang District
+				Beijing   Beijing   100012
+				CN
+
+B0-B3-53   (hex)		IPvideo Corporation
+D00000-DFFFFF     (base 16)		IPvideo Corporation
+				1490 North Clinton Ave
+				Bay Shore  NY  11706
+				US
+
+B0-B3-53   (hex)		Zoox
+B00000-BFFFFF     (base 16)		Zoox
+				1149 Chess Drive
+				Foster City  CA  94404
+				US
+
+14-AE-85   (hex)		Qingdao iTechene Technologies Co., Ltd.
+200000-2FFFFF     (base 16)		Qingdao iTechene Technologies Co., Ltd.
+				UnitA3-A4,Level8,Block A ,International Innovation Park,No.1Keyuanwei Rd.,Laoshan District
+				Qingdao    266100
+				CN
+
+14-AE-85   (hex)		Henfred Technology Co., Ltd.
+100000-1FFFFF     (base 16)		Henfred Technology Co., Ltd.
+				3F.-7, No.77, Sec. 1, Xintai 5th Rd
+				New Taipei City  Xizhi Dist  221
+				TW
+
+64-62-66   (hex)		Annapurna labs
+100000-1FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+14-AE-85   (hex)		MTA Systems
+A00000-AFFFFF     (base 16)		MTA Systems
+				Pemstraße 2
+				Mauthausen    4310
+				AT
+
+64-62-66   (hex)		Bühler AG
+500000-5FFFFF     (base 16)		Bühler AG
+				Gupfenstrasse 5
+				Uzwil    9240
+				CH
+
+64-62-66   (hex)		MiiVii Dynamics Technology CO.,LTD
+000000-0FFFFF     (base 16)		MiiVii Dynamics Technology CO.,LTD
+				1408-1415 Tower A BUGG Building,No.18 N. Taipingzhuang Rd,haidian District
+				Beijing  Beijing  100000
+				CN
+
+64-62-66   (hex)		Shenzhen Jie Shi Lian Industrial Co., LTD
+E00000-EFFFFF     (base 16)		Shenzhen Jie Shi Lian Industrial Co., LTD
+				6F,C Building,Jinao Industrial Park,Juling Rd,Guanlan Town,Longhua
+				Shenzhen  Guangdong  518000
+				CN
+
+64-62-66   (hex)		Leontech Limited
+800000-8FFFFF     (base 16)		Leontech Limited
+				1208 WorkingBerg Commercial Buildung, 41-47 Marble Road
+				Hong Kong  Hong Kong  00000
+				HK
+
+94-CC-04   (hex)		Hanzhuo Information Technology(Shanghai) Ltd.
+D00000-DFFFFF     (base 16)		Hanzhuo Information Technology(Shanghai) Ltd.
+				Room 2085, building 2, 622 Yingyuan middle Road, Jiading Strict
+				Shanghai    201200
+				CN
+
+94-CC-04   (hex)		Sam Nazarko Trading Ltd
+600000-6FFFFF     (base 16)		Sam Nazarko Trading Ltd
+				18 Watermill Way
+				London  Surrey  SW19 2RD
+				GB
+
+94-CC-04   (hex)		hyBee Inc.
+A00000-AFFFFF     (base 16)		hyBee Inc.
+				#1003, Innovalley B, 253, Pangyo-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13486
+				KR
+
+94-CC-04   (hex)		Nanjing Yacer Communication Technology Co. Ltd.
+200000-2FFFFF     (base 16)		Nanjing Yacer Communication Technology Co. Ltd.
+				333 Taiping South Road Jinling Yujingyuan 19nd  floor Unit K Qin Huai District
+				nanjing  jiangsu  210000
+				CN
+
+90-E2-FC   (hex)		Pars Ertebat Afzar Co.
+000000-0FFFFF     (base 16)		Pars Ertebat Afzar Co.
+				1116 – Burlington Tower Business Bay
+				Dubai    90072
+				AE
+
+94-05-BB   (hex)		iungo
+800000-8FFFFF     (base 16)		iungo
+				Vrouwenlaan 62
+				Zwolle  Overijssel  8017 HS
+				NL
+
+94-05-BB   (hex)		Qingdao Maotran Electronics co., ltd
+000000-0FFFFF     (base 16)		Qingdao Maotran Electronics co., ltd
+				Room2907, Building 2 of Minghui International, No.39 of Shiling Road, Laoshan District
+				Qingdao  Shandong  266000
+				CN
+
+94-05-BB   (hex)		Dongguan CXWE Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Dongguan CXWE Technology Co.,Ltd.
+				Room 805, building 1, No. 16, Keji 4th Road, Songshanhu
+				Dongguan  Guangdong  523000
+				CN
+
+F4-90-CB   (hex)		Cheetah Medical
+C00000-CFFFFF     (base 16)		Cheetah Medical
+				2A Hashlosha st.
+				Tel Aviv    6706055
+				IL
+
+94-05-BB   (hex)		Zimmer GmbH
+900000-9FFFFF     (base 16)		Zimmer GmbH
+				Im Salmenkopf 5
+				Rheinau  Baden-Württemberg  77866
+				DE
+
+94-05-BB   (hex)		BAE Systems
+E00000-EFFFFF     (base 16)		BAE Systems
+				21 continental boulevard
+				Merrimack  NH  03054
+				US
+
+F4-90-CB   (hex)		A-dec Inc.
+B00000-BFFFFF     (base 16)		A-dec Inc.
+				2601 Crestview Drive
+				Newberg  OR  97132
+				US
+
+C0-9B-F4   (hex)		LTD Delovoy Office
+600000-6FFFFF     (base 16)		LTD Delovoy Office
+				Block “B”, floor 6, build 4/1, Stroiteley blvd
+				Krasnogorsk    143401
+				RU
+
+F4-90-CB   (hex)		TEQ SA
+700000-7FFFFF     (base 16)		TEQ SA
+				Via al Municipio 16
+				Barbengo  Ticino  6917
+				CH
+
+A4-DA-22   (hex)		Grundig
+A00000-AFFFFF     (base 16)		Grundig
+				Steinhof 39
+				Erkrath   North Rhine-Westphalia  40699
+				DE
+
+E8-B4-70   (hex)		YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
+400000-4FFFFF     (base 16)		YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
+				1-17-1 Ohmorihigashi
+				Ohta-ku  Tokyo  143-0012
+				JP
+
+E8-B4-70   (hex)		Tibit Communications
+700000-7FFFFF     (base 16)		Tibit Communications
+				1 Willowbrook Court, Suite 150
+				Petaluma  CA  94954
+				US
+
+94-FB-A7   (hex)		Shanghai Hyco Genyong Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Shanghai Hyco Genyong Technology Co., Ltd.
+				Room 105, 1/F, Building B, No.999 of Huaxu Road, Qingpu District, Shanghai, China
+				Shanghai    201702
+				CN
+
+94-FB-A7   (hex)		UOI TECHNOLOGY CORPORATION
+400000-4FFFFF     (base 16)		UOI TECHNOLOGY CORPORATION
+				1F., No. 50, Ln. 148, Lide St.
+				Zhonghe Dist.  New Taipei City  23512
+				TW
+
+38-F7-CD   (hex)		VANGUARD
+300000-3FFFFF     (base 16)		VANGUARD
+				1st Floor 3 Moore 
+				London    SE1 2RE
+				GB
+
+38-F7-CD   (hex)		RIPower Co.,Ltd
+200000-2FFFFF     (base 16)		RIPower Co.,Ltd
+				3F,1,Bongeunsa-ro 44-gil, Gangnam-gu
+				Seoul    06143
+				KR
+
+38-F7-CD   (hex)		Fibergate Inc.
+B00000-BFFFFF     (base 16)		Fibergate Inc.
+				KDX Shibadaimon.Bld 2F 2-10-12 Shibadaimon
+				Tokyo  Minato-ku  1050012
+				JP
+
+94-FB-A7   (hex)		Reichert Inc.
+000000-0FFFFF     (base 16)		Reichert Inc.
+				3362 Walden Ave
+				Depew  NY  14043
+				US
+
+38-F7-CD   (hex)		Fast Cotton(Beijing) Limited
+600000-6FFFFF     (base 16)		Fast Cotton(Beijing) Limited
+				Fast Cotton(Beijing)Limited
+				Beijing  Beijing  100037
+				CN
+
+70-69-79   (hex)		Rivian Automotive LLC
+C00000-CFFFFF     (base 16)		Rivian Automotive LLC
+				13250 N. Haggerty Road
+				Plymouth  MI  48170
+				US
+
+70-69-79   (hex)		Foxconn Brasil Industria e Comercio Ltda
+A00000-AFFFFF     (base 16)		Foxconn Brasil Industria e Comercio Ltda
+				Av. Marginal da Rodovia dos Bandeirantes, 800 - Distrito Industrial
+				Jundiaí  Sao Paulo  13213-008
+				BR
+
+70-69-79   (hex)		SelectTech GeoSpatial, LLC
+400000-4FFFFF     (base 16)		SelectTech GeoSpatial, LLC
+				8045 Washington Village Dr.
+				Centerville  OH  45458
+				US
+
+F0-D7-AF   (hex)		720?bei jing?Health iTech Co.,Ltd
+300000-3FFFFF     (base 16)		720?bei jing?Health iTech Co.,Ltd
+				Room 9001, D Building, Kangjianbaosheng Plaza, No.8 Heiquan Road, Haidian District, Beijing
+				bei jing    100085
+				CN
+
+F0-D7-AF   (hex)		EVCO SPA
+B00000-BFFFFF     (base 16)		EVCO SPA
+				VIA FELTRE N. 81
+				SEDICO  BELLUNO  32036
+				IT
+
+F0-D7-AF   (hex)		Rievtech Electronic Co.,Ltd 
+700000-7FFFFF     (base 16)		Rievtech Electronic Co.,Ltd 
+				Room 505, Building A, No.88,Dazhou Road,Tiexinqiao,Yu huatai District, Nanjing City, Jiangsu Province,P.R.China +0086 25 52895099                 52890138 info@rievtech.com sales@rievtech.com
+				Nanjing City  Jiangsu Province  210000
+				CN
+
+F0-D7-AF   (hex)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
+				Room 201,Building A,No.1,Qianhai 1st Road,Shengang cooperation zone,Qianhai
+				Shenzhen    518054
+				CN
+
+AC-1D-DF   (hex)		FINEpowerX INC
+B00000-BFFFFF     (base 16)		FINEpowerX INC
+				Rm 2208, U-Tower, 120 HeungDeok JungAng-ro, GiHeung-Gu
+				YongIn-si  Gyeonggi-do  16950
+				KR
+
+30-49-50   (hex)		ATLI WORLD LIMITED
+100000-1FFFFF     (base 16)		ATLI WORLD LIMITED
+				306 Beverley Commercial Center, 87-105 Chatham Road, TST,
+				Kowloon  Hong Kong  852
+				HK
+
+30-49-50   (hex)		Anacove LLC
+C00000-CFFFFF     (base 16)		Anacove LLC
+				7856 Revelle drive
+				LA JOLLA  CA  92037
+				US
+
+30-49-50   (hex)		Ledworks SRL
+A00000-AFFFFF     (base 16)		Ledworks SRL
+				Via Tortona 37
+				Milano  Milano  20144
+				IT
+
+D0-D9-4F   (hex)		Mitsubishi Electric US, Inc.
+700000-7FFFFF     (base 16)		Mitsubishi Electric US, Inc.
+				1340 Satellite Boulevard
+				Suwanee  GA  30345
+				US
+
+30-49-50   (hex)		Sercomm Corporation.
+200000-2FFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+D0-14-11   (hex)		powerall
+400000-4FFFFF     (base 16)		powerall
+				75,Ojeong-ro,Bucheon-si,Gyeonggi-do,Republic of korea
+				Gyeonggi-do province    14445
+				KR
+
+D0-14-11   (hex)		ABB EVI SPA
+A00000-AFFFFF     (base 16)		ABB EVI SPA
+				VIA DI SAN GIORGIO, 642
+				TERRANUOVA BRACCIOLINI  AREZZO  52028
+				IT
+
+D0-14-11   (hex)		Airthings
+900000-9FFFFF     (base 16)		Airthings
+				Wergelandsveien 7
+				Oslo    0167
+				NO
+
+F4-69-D5   (hex)		ShenZhenShi EVADA technology Co.,Ltd
+A00000-AFFFFF     (base 16)		ShenZhenShi EVADA technology Co.,Ltd
+				Qianhai,No.1 qianwan Road
+				ShenZhen  Guangdong  518000
+				CN
+
+F4-69-D5   (hex)		Mossman Limited
+000000-0FFFFF     (base 16)		Mossman Limited
+				1014, 10/F, Leader Industrial Building,
+				57-59 Au Pui Wan Street, Fotan, Shatin  Hong Kong  NT
+				HK
+
+5C-85-7E   (hex)		Shenzhen IP3 Century Intelligent Technology CO.,Ltd
+400000-4FFFFF     (base 16)		Shenzhen IP3 Century Intelligent Technology CO.,Ltd
+				aiying.li@ip3-tech.com
+				Shenzhen    518057
+				CN
+
+5C-85-7E   (hex)		Shanghai Yanhe automation technology co.,LTD
+500000-5FFFFF     (base 16)		Shanghai Yanhe automation technology co.,LTD
+				Room E2204, Building 1, 5500 Yuan Jiang Road, MinHang District
+				ShangHai    201100
+				CN
+
+5C-85-7E   (hex)		ProdataKey
+600000-6FFFFF     (base 16)		ProdataKey
+				67 W 13490 S
+				Draper  UT  84020
+				US
+
+F4-69-D5   (hex)		Huaqin Telecom Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Huaqin Telecom Technology Co.,Ltd.
+				Building 1,No.399, Keyuan Road, Pudong, Shanghai China
+				Shanghai    200120
+				CN
+
+F4-69-D5   (hex)		Pulsar Engineering srl
+200000-2FFFFF     (base 16)		Pulsar Engineering srl
+				Via Giuseppe Caimi
+				Milano  MI  20136
+				IT
+
+F4-69-D5   (hex)		Rosco, Inc
+700000-7FFFFF     (base 16)		Rosco, Inc
+				90-21 144th Place
+				Jamaica  NY  11435
+				US
+
+4C-93-A6   (hex)		Diehl Controls Nanjing Co., Ltd.
+200000-2FFFFF     (base 16)		Diehl Controls Nanjing Co., Ltd.
+				Jiangjun Avenue 139
+				Nanjing  Jiangsu  211100
+				CN
+
+4C-93-A6   (hex)		Commsignia, Ltd.
+300000-3FFFFF     (base 16)		Commsignia, Ltd.
+				Irinyi Jozsef u 4-20
+				Budapest    1117
+				HU
+
+28-B7-7C   (hex)		Shenzhen PUAS Industrial Co.,LTD
+800000-8FFFFF     (base 16)		Shenzhen PUAS Industrial Co.,LTD
+				2/F, C/Building, Huawang Industrial Park, LongHua New Area In Shenzhen 518106 P.R.C
+				Shenzhen  Guangdong  518106
+				CN
+
+28-B7-7C   (hex)		SolarEdge Technologies
+100000-1FFFFF     (base 16)		SolarEdge Technologies
+				1 Abba Eban St.
+				Herzelia    46725
+				IL
+
+C0-61-9A   (hex)		MAD PIECE LLC.
+700000-7FFFFF     (base 16)		MAD PIECE LLC.
+				2196 flatbush ave.
+				BROOKLYN  NY  11234
+				US
+
+C0-61-9A   (hex)		Nanjing Balance Network Technology Co., Ltd
+500000-5FFFFF     (base 16)		Nanjing Balance Network Technology Co., Ltd
+				9-10/F,building 01, No.8,Bailongjiang East Street,Jianye District
+				Nanjing  Jiangsu  210017
+				CN
+
+C0-61-9A   (hex)		Uhnder
+D00000-DFFFFF     (base 16)		Uhnder
+				3409 Executive Center Drive Ste205
+				Austin  TX  78731
+				US
+
+98-FC-84   (hex)		Jazwares LLC
+D00000-DFFFFF     (base 16)		Jazwares LLC
+				1067 Shotgun Rd
+				Sunrise  FL  33326
+				US
+
+98-FC-84   (hex)		Sferrum GmbH
+400000-4FFFFF     (base 16)		Sferrum GmbH
+				Kytyzovsky avenue, build 36/3, office 216
+				Moscow    121170
+				RU
+
+98-FC-84   (hex)		Shenzhen Incar Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Shenzhen Incar Technology Co., Ltd.
+				Zhongxi ECO International Building, Shuiku Rd., Baoan District
+				Shenzhen     518000
+				CN
+
+98-FC-84   (hex)		Leia, Inc
+000000-0FFFFF     (base 16)		Leia, Inc
+				2440 Sand Hill Road, STE 100, Menlo Park
+				Menlo Park  CA  94025
+				US
+
+18-FD-CB   (hex)		Staclar, Inc.
+300000-3FFFFF     (base 16)		Staclar, Inc.
+				2093 Philadelphia Pike
+				Claymont  DE  19703
+				US
+
+18-FD-CB   (hex)		Ark Vision Systems GmbH & Co. KG
+C00000-CFFFFF     (base 16)		Ark Vision Systems GmbH & Co. KG
+				Limburger Str., 51
+				Merenberg  Hessen  35799
+				DE
+
+18-FD-CB   (hex)		KWANG YANG MOTOR CO.,LTD
+E00000-EFFFFF     (base 16)		KWANG YANG MOTOR CO.,LTD
+				NO. 35, WAN HSING ST., SAN MIN DIST., KAOHSIUNG, TAIWAN, R.O.C
+				Kaohsiung    807
+				TW
+
+D0-14-11   (hex)		CYLTek Limited
+B00000-BFFFFF     (base 16)		CYLTek Limited
+				R603,6F.,NO.168,Sec.2,Fuxing 3rd.Rd.
+				Zhubei City,Hsinchu County    30273
+				TW
+
+18-FD-CB   (hex)		SKA Organisation
+600000-6FFFFF     (base 16)		SKA Organisation
+				Jodrell Bank, Lower Withington
+				Macclesfield  Cheshire  SK11 9FT
+				GB
+
+CC-4F-5C   (hex)		Smiths US Innovation LLC
+700000-7FFFFF     (base 16)		Smiths US Innovation LLC
+				3125 SKYWAY CT
+				Fremont  CA  94539
+				US
+
+CC-4F-5C   (hex)		Ontex BV
+B00000-BFFFFF     (base 16)		Ontex BV
+				Genthof 5
+				Buggenhout  NA  9255
+				BE
+
+CC-4F-5C   (hex)		Spark Biomedical
+400000-4FFFFF     (base 16)		Spark Biomedical
+				4428 Irvin Simmons Drive
+				Dallas  TX  75229
+				US
+
+CC-4F-5C   (hex)		lesswire GmbH
+100000-1FFFFF     (base 16)		lesswire GmbH
+				Rudower Chaussee 30
+				Berlin  Germany  12489
+				DE
+
+CC-4F-5C   (hex)		Beijing Cotytech Technology Co.,LTD.
+C00000-CFFFFF     (base 16)		Beijing Cotytech Technology Co.,LTD.
+				Rm2302,Block B,Haojing Building,Zhichunlu,Haidian District,Beijing
+				Beijing    100192
+				CN
+
+CC-4F-5C   (hex)		Watertech S.p.A.
+600000-6FFFFF     (base 16)		Watertech S.p.A.
+				STRADA ANTICA FORNACE 2/4
+				CANELLI  ITALY  14053
+				IT
+
+FC-CD-2F   (hex)		Ningbo Bull Digital Technology Co., LTD
+000000-0FFFFF     (base 16)		Ningbo Bull Digital Technology Co., LTD
+				No.32 Sanhai Road, East Guanhaiwei Industrial zone
+				Cixi City  Zhejiang   315314
+				CN
+
+58-95-D8   (hex)		Loftie
+900000-9FFFFF     (base 16)		Loftie
+				26 Grove St, Apt. 5C
+				New York  NY  10014
+				US
+
+58-95-D8   (hex)		Peak Communications Limited
+A00000-AFFFFF     (base 16)		Peak Communications Limited
+				Suite 1, Commercial House One, Eden Island, Republic of Seychelles
+				Eden Island    123
+				SC
+
+58-95-D8   (hex)		Shenzhen DOOGEE Hengtong Technology CO.,LTD
+000000-0FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO.,LTD
+				Shenzhen DOOGEE Hengtong Technology CO.,LTD
+				Shenzhen  Guangdong  518000
+				CN
+
+58-95-D8   (hex)		Norgren Manufacturing Co., Ltd.
+600000-6FFFFF     (base 16)		Norgren Manufacturing Co., Ltd.
+				Block 3, No 1885 Duhui Road, Minhang District
+				Shanghai  Shanghai  201108
+				CN
+
+DC-4A-9E   (hex)		Methodex Systems Pvt. Ltd.
+800000-8FFFFF     (base 16)		Methodex Systems Pvt. Ltd.
+				607-8 Meghdoot, 94 Nehru Place
+				New Delhi  Delhi  110019
+				IN
+
+DC-4A-9E   (hex)		Astrogate Inc.
+700000-7FFFFF     (base 16)		Astrogate Inc.
+				11F-6, No. 120, Qiaohe Rd., Zhonghe Dist.
+				New Taipei City    235
+				TW
+
+58-95-D8   (hex)		LOCTEK ERGONOMIC TECHNOLOGY CORP.
+C00000-CFFFFF     (base 16)		LOCTEK ERGONOMIC TECHNOLOGY CORP.
+				No. 588, Qihang South Road, Yinzhou Economic Development Zone
+				Ningbo City  Zhejiang  315100
+				CN
+
+DC-4A-9E   (hex)		TATTILE SRL
+600000-6FFFFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+DC-4A-9E   (hex)		HAPPIEST BABY INC.
+D00000-DFFFFF     (base 16)		HAPPIEST BABY INC.
+				3115 S La Cienega Blvd.
+				Los Angeles  CA  90016
+				US
+
+84-11-C2   (hex)		Kazdream Technologies LLP
+000000-0FFFFF     (base 16)		Kazdream Technologies LLP
+				10, Turkestan Str.
+				Nur-Sultan    010000
+				KZ
+
+84-11-C2   (hex)		LLC STC MZTA
+400000-4FFFFF     (base 16)		LLC STC MZTA
+				33/26 Mironovskaya str.
+				Moscow  Moscow  115280
+				RU
+
+84-11-C2   (hex)		Futurecom Systems Group
+200000-2FFFFF     (base 16)		Futurecom Systems Group
+				3277 Langstaff Rd
+				Concord  Ontario  L4K 5P8
+				CA
+
+68-79-12   (hex)		Copper Labs, Inc.
+500000-5FFFFF     (base 16)		Copper Labs, Inc.
+				3015 Sterling Circle #200
+				Boulder  CO  80301
+				US
+
+68-79-12   (hex)		Wingtech Mobile Communications Co., Ltd.
+A00000-AFFFFF     (base 16)		Wingtech Mobile Communications Co., Ltd.
+				No.777,Yazhong Road,Nanhu District,
+				Jiaxing  Zhejiang  314006
+				CN
+
+68-79-12   (hex)		CNDI CO.,LTD
+200000-2FFFFF     (base 16)		CNDI CO.,LTD
+				33-13, EUNHAENG-RO, 218 BEON-GIL
+				SIHEUNG-SI  GYEONGGI-DO  14908
+				KR
+
+68-79-12   (hex)		Swisscom Broadcast Ltd
+B00000-BFFFFF     (base 16)		Swisscom Broadcast Ltd
+				Ostermundigenstrasse 99
+				Bern    3050
+				CH
+
+8C-47-6E   (hex)		Chipsafer Pte. Ltd.
+000000-0FFFFF     (base 16)		Chipsafer Pte. Ltd.
+				2 Changi South Lane
+				Singapore    486123
+				SG
+
+8C-47-6E   (hex)		HuiZhou MIKI Communication Equipment Co.,LTD
+200000-2FFFFF     (base 16)		HuiZhou MIKI Communication Equipment Co.,LTD
+				NO.39,GuangTai Road HuiNan HI-techindustrial Park.Zhongkai Hi-tech Zone
+				Huizhou    516000
+				CN
+
+8C-47-6E   (hex)		Xertified AB
+900000-9FFFFF     (base 16)		Xertified AB
+				Horisontvagen 60
+				Stockholm  Stockholm  12830
+				SE
+
+34-04-9E   (hex)		ClearCaptions LLC
+C00000-CFFFFF     (base 16)		ClearCaptions LLC
+				595 Menlo Drive
+				Rocklin   CA  95765
+				US
+
+8C-AE-49   (hex)		Gigawave
+A00000-AFFFFF     (base 16)		Gigawave
+				Unit 4 Metro Business Park, ballycurreen
+				cork    T12 HP60
+				IE
+
+8C-AE-49   (hex)		TTR Corporation
+900000-9FFFFF     (base 16)		TTR Corporation
+				20-1 Iwaoshi-machi
+				Takasaki-shi  Gunma  370-0044
+				JP
+
+8C-AE-49   (hex)		Chengdu BillDTE Technology Co., Ltd
+600000-6FFFFF     (base 16)		Chengdu BillDTE Technology Co., Ltd
+				Chengdu BiiDTE Technology Co.,Ltd
+				Chengdu  Sichuan  610041
+				CN
+
+8C-AE-49   (hex)		Precitec Optronik GmbH
+700000-7FFFFF     (base 16)		Precitec Optronik GmbH
+				Schleussnerstraße 54
+				Neu-Isenburg  Hessen  63263
+				DE
+
+8C-AE-49   (hex)		Parametric GmbH
+C00000-CFFFFF     (base 16)		Parametric GmbH
+				Waldeggstrasse 82
+				Interlaken  BE  3800
+				CH
+
+8C-AE-49   (hex)		LLC Taipit - Measuring Equipment
+800000-8FFFFF     (base 16)		LLC Taipit - Measuring Equipment
+				Voroshilova, 2
+				Saint-Petersburg    193318
+				RU
+
+A4-53-EE   (hex)		Stellamore
+100000-1FFFFF     (base 16)		Stellamore
+				Room 1519, 15th Floor, Block A, Economic Building, Baoyuan Huafeng Headquarters, No. 288, Xixiang Avenue, Bao'an District
+				Shenzhen  Guangdong  518100
+				CN
+
+8C-AE-49   (hex)		Shenzhen C & D Electronics Co., Ltd.
+E00000-EFFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+A4-53-EE   (hex)		Dongguan HuaFuu industrial co., LTD
+900000-9FFFFF     (base 16)		Dongguan HuaFuu industrial co., LTD
+				Huafuu technology park,jinggangzhong Road,shatian
+				Dongguan  Guangdong  523841
+				CN
+
+A4-53-EE   (hex)		Ubisafe Smart Devices
+200000-2FFFFF     (base 16)		Ubisafe Smart Devices
+				Getulio Vargas 2729
+				Sao Jose  SC  88103-400
+				BR
+
+4C-93-A6   (hex)		4TheWall - 4D Sistem A.S
+400000-4FFFFF     (base 16)		4TheWall - 4D Sistem A.S
+				Oran Mah. Turan Gunes Bul. Park Oran Ofis 180-Y No:6 Cankaya 
+				ANKARA    06550
+				TR
+
+A0-02-4A   (hex)		Xiaojie Technology (Shenzhen) Co., Ltd
+600000-6FFFFF     (base 16)		Xiaojie Technology (Shenzhen) Co., Ltd
+				801#, Block B1,Kexing Secience Park, Hi-Tech Industrial Park, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+78-D4-F1   (hex)		Huaqin Telecom Technology Co.,Ltd.
+500000-5FFFFF     (base 16)		Huaqin Telecom Technology Co.,Ltd.
+				Building 1,No.399, Keyuan Road, Pudong, Shanghai China
+				Shanghai    200120
+				CN
+
+78-D4-F1   (hex)		shanghai baudcom communication device co.,ltd
+900000-9FFFFF     (base 16)		shanghai baudcom communication device co.,ltd
+				519A, Building A, Lianming Road 389, Minhang District
+				shanghai  shanghai  201101
+				CN
+
+78-D4-F1   (hex)		BYD Auto lndustry Co.,Ltd
+400000-4FFFFF     (base 16)		BYD Auto lndustry Co.,Ltd
+				No.3009 BYD Road, Building D23, BYD EPRI, PingShan District, 
+				ShenZhen  GuangDong  518118  
+				CN
+
+78-D4-F1   (hex)		Famar Fueguina S.A.
+700000-7FFFFF     (base 16)		Famar Fueguina S.A.
+				Rodney 70
+				Buenos Aires    1427
+				AR
+
+44-6F-D8   (hex)		Sichuan subao network technology ltd.co.
+000000-0FFFFF     (base 16)		Sichuan subao network technology ltd.co.
+				No. 704 Room ,  No. 599 South Century Town Road, High technology district, Chengdu 
+				chengdu  sichuan Province  610094
+				CN
+
+44-6F-D8   (hex)		ZHEJIANG SHIP ELECTRONICS & TECHNOLOGY CO., LTD.
+500000-5FFFFF     (base 16)		ZHEJIANG SHIP ELECTRONICS & TECHNOLOGY CO., LTD.
+				#6 GAOYA RD
+				NINGBO  ZHEJIANG PROVINCE  315191
+				CN
+
+44-6F-D8   (hex)		Changzhou Haitu Electronic Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Changzhou Haitu Electronic Technology Co.,Ltd
+				Building 47, Hang Seng Science park, Tianning District
+				Changzhou  Jiangsu  213000
+				CN
+
+98-27-82   (hex)		KORTEK CORPORATION
+700000-7FFFFF     (base 16)		KORTEK CORPORATION
+				26, Venture-ro24beon-gil, Yeonsu-gu
+				Incheon    22011
+				KR
+
+98-27-82   (hex)		Dspread Technology (Beijing) Inc.
+400000-4FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+8C-19-2D   (hex)		DataRemote Inc.
+200000-2FFFFF     (base 16)		DataRemote Inc.
+				18001 Old Cutler Rd. Suite 600
+				Palmetto Bay  FL  33157
+				US
+
+E8-6C-C7   (hex)		Limited Liability Company M.S.Korp
+C00000-CFFFFF     (base 16)		Limited Liability Company M.S.Korp
+				Mironovskaya st., 33, bldg.26, floor 4, office 5
+				Moscow  Russian Federation  105318
+				RU
+
+E8-6C-C7   (hex)		Trapeze Switzerland GmbH
+000000-0FFFFF     (base 16)		Trapeze Switzerland GmbH
+				Industrieplatz 3.
+				Neuhausen am Rheinfall  Schaffhausen  8212
+				CH
+
+04-11-19   (hex)		Herrick Tech Labs
+700000-7FFFFF     (base 16)		Herrick Tech Labs
+				20201 Century Blvd.
+				Germantown  MD  20874
+				US
+
+E8-6C-C7   (hex)		Lighthouse EIP
+800000-8FFFFF     (base 16)		Lighthouse EIP
+				21370 Heywood Avenue
+				Lakeville  MN  55044
+				US
+
+E8-6C-C7   (hex)		Xirgo Technologies LLC
+200000-2FFFFF     (base 16)		Xirgo Technologies LLC
+				188 Camino Ruiz
+				Camarillo  CA  93012
+				US
+
+E8-6C-C7   (hex)		Koal Software Co., Ltd
+400000-4FFFFF     (base 16)		Koal Software Co., Ltd
+				Floor 6, Building 4, Lane 299, Jiangchang West Road, Jing 'an District
+				Shanghai  Shanghai  200436
+				CN
+
+24-5D-FC   (hex)		Cosmicnode
+800000-8FFFFF     (base 16)		Cosmicnode
+				Zandstrand
+				Eindhoven  North Brabant  5658BJ
+				NL
+
+24-5D-FC   (hex)		Suzhou Jiangzhi electronic technology co., Ltd
+400000-4FFFFF     (base 16)		Suzhou Jiangzhi electronic technology co., Ltd
+				Room 303, Building 2, No.88 Baifu Road, Kunshan Development Zone
+				Kunshan  Jiangsu  215300
+				CN
+
+60-15-92   (hex)		S Labs sp. z o.o.
+000000-0FFFFF     (base 16)		S Labs sp. z o.o.
+				Dworska 1a/1u
+				Kraków  Lesser Poland  30-314
+				PL
+
+60-15-92   (hex)		Annapurna labs
+B00000-BFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+60-15-92   (hex)		Zaptec
+400000-4FFFFF     (base 16)		Zaptec
+				Richard Johnsensgate 4
+				Stavanger   Rogaland  N-4021
+				NO
+
+0C-5C-B5   (hex)		The Raymond Corporation
+500000-5FFFFF     (base 16)		The Raymond Corporation
+				22 South Canal St
+				Greene  NY  13778
+				US
+
+0C-5C-B5   (hex)		ADI
+B00000-BFFFFF     (base 16)		ADI
+				2 Crest Hollow Lane
+				Manorville  NY  11949
+				US
+
+1C-A0-EF   (hex)		Shenzhen Liandian Communication Technology Co.LTD
+D00000-DFFFFF     (base 16)		Shenzhen Liandian Communication Technology Co.LTD
+				1307, building A4, workshop 2, LiLang International Jewelry Industrial Park, 31 Bulan Road, xialilang community, Nanwan street, Longgang District
+				Shenzhen  Guangdong  518112
+				CN
+
+1C-A0-EF   (hex)		Wisnu and Supak Co.,Ltd.
+100000-1FFFFF     (base 16)		Wisnu and Supak Co.,Ltd.
+				102/111-112  Mooban  Sinpattanatanee,, Tessabansongkroh  Road.,     Ladyao,  Jatujak,
+				Jatujak  Bangkok Metropolis  10900
+				TH
+
+88-C9-B3   (hex)		Shenzhen MMUI Co.,Ltd
+B00000-BFFFFF     (base 16)		Shenzhen MMUI Co.,Ltd
+				Shenzhen MMUI Co.,Ltd
+				Shenzhen  Guangdong  518000
+				CN
+
+88-C9-B3   (hex)		Robert Bosch JuP1
+700000-7FFFFF     (base 16)		Robert Bosch JuP1
+				Robert Bosch 1150
+				Juarez  Chihuahua  32557
+				MX
+
+C8-F5-D6   (hex)		Yarward Electronics  Co., Ltd.
+800000-8FFFFF     (base 16)		Yarward Electronics  Co., Ltd.
+				9509 Qinglongshan Street
+				Zibo  Shandong  255089
+				CN
+
+C8-F5-D6   (hex)		Valeo Interior Controls (Shenzhen) Co.,Ltd
+100000-1FFFFF     (base 16)		Valeo Interior Controls (Shenzhen) Co.,Ltd
+				North Junyi Ind. Park, Huaide Vil., Fuyong Town, Baoan Dist.
+				Shenzhen  Guangzhong  518103
+				CN
+
+C0-FB-F9   (hex)		Dongmengling
+800000-8FFFFF     (base 16)		Dongmengling
+				Floor 1, pool-side building, Villa district, Jiuwei Xiange Musical Instrument Co. , Ltd. , Jiuwei community, Hangcheng Street, Bao 'an district
+				Shenzhen  Guangdong  518000
+				CN
+
+C8-F5-D6   (hex)		Qbic Technology Co., Ltd
+200000-2FFFFF     (base 16)		Qbic Technology Co., Ltd
+				26F.-12, No.99, Sec. 1, Xintai 5th Rd., Xizhi Dist.,
+				New Taipei     22175
+				TW
+
+C8-F5-D6   (hex)		EVOTOR LLC
+400000-4FFFFF     (base 16)		EVOTOR LLC
+				Timura Frunze Str., 24
+				Moscow    119021
+				RU
+
+C0-FB-F9   (hex)		Dongguan Chuan OptoElectronics Limited
+200000-2FFFFF     (base 16)		Dongguan Chuan OptoElectronics Limited
+				No.43 Songshui Road,Songmushan Village, Dalang Town
+				Dongguan  Guangdong  523795
+				CN
+
+C0-FB-F9   (hex)		IVT corporation
+600000-6FFFFF     (base 16)		IVT corporation
+				5/F, Zhongguancun Fazhan Building, No 12, Shangdi Xinxi Road, Haidian District, Beijing, 100085, P.R. CHINA
+				Beijing    100085
+				CN
+
+18-74-E2   (hex)		HANGZHOU ZHOUJU ELECTRONIC TECHNOLOGICAL CO.,LTD 
+500000-5FFFFF     (base 16)		HANGZHOU ZHOUJU ELECTRONIC TECHNOLOGICAL CO.,LTD 
+				Floor 6,A Building, Xianxing Road NO.32,Xianlin Town,Yuhang District
+				Hangzhou  Zhejiang  311122
+				CN
+
+18-74-E2   (hex)		Shenzhen Jooan Technology  Co., Ltd
+B00000-BFFFFF     (base 16)		Shenzhen Jooan Technology  Co., Ltd
+				Area B, Floor 101-2, Floor 3, Floor 5 and Floor 6 of area B, Building No. 8, Guixiang Community Plaza Road, Guanlan Street, Longhua District, Shenzhen. 
+				Shenzhen  Guangdong  518000
+				CN
+
+18-74-E2   (hex)		SHENZHEN AORO COMMUNICATION EQUIPMENT CO., LTD
+900000-9FFFFF     (base 16)		SHENZHEN AORO COMMUNICATION EQUIPMENT CO., LTD
+				ROOM 302, 3RD FLOOR BUILDING A9, NO.6 YUANCHUANGYUAN,FUHUA ROAD, JUTANG COMMUNITY, FUCHENG STREET, LONGHUA DISTRICT
+				SHENZHEN  GUANGDONG  518110
+				CN
+
+18-74-E2   (hex)		Shenzhen WITSTECH Co.,Ltd.
+200000-2FFFFF     (base 16)		Shenzhen WITSTECH Co.,Ltd.
+				5D4, Block CD, Tianji Building, Tian'an Digital City, Futian District, Shenzhen
+				Shenzhen  Guangdong?China  518040
+				CN
+
+18-74-E2   (hex)		Beijing Jrunion Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Beijing Jrunion Technology Co., Ltd.
+				Room 01, 2nd Floor, Building 8, Yuquanhuigu, No. 3, Minzhuang Road, Haidian District
+				Beijing  Beijing  100195
+				CN
+
+FC-CD-2F   (hex)		QCTEK CO.,LTD.
+500000-5FFFFF     (base 16)		QCTEK CO.,LTD.
+				6F-1., No.496, Bannan Rd., Zhonghe Dist.,
+				New Taipei City  New Taipei City  235
+				TW
+
+E8-78-29   (hex)		FAIOT Co., LTD
+700000-7FFFFF     (base 16)		FAIOT Co., LTD
+				Room 1101, Building 23, No.1999 Yishan Road, Minhang District
+				Shanghai    200233
+				CN
+
+E8-78-29   (hex)		JVISMall CO.,LTD
+800000-8FFFFF     (base 16)		JVISMall CO.,LTD
+				Rm903, BY B/D, Seogang-ro133, Mapo Gu
+				Seoul    04058
+				KR
+
+78-13-05   (hex)		Shanghai Siminics Optoelectronic Technology Co., Ltd
+D00000-DFFFFF     (base 16)		Shanghai Siminics Optoelectronic Technology Co., Ltd
+				Room 9, Building 15, Huatai Center Jinyun Rd
+				Shanghai    201803
+				CN
+
+E8-78-29   (hex)		Annapurna labs
+400000-4FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+78-13-05   (hex)		LEAFF ENGINEERING SRL
+200000-2FFFFF     (base 16)		LEAFF ENGINEERING SRL
+				Via Pastore 10
+				Osimo  AN  60027
+				IT
+
+78-13-05   (hex)		Brigates Microelectronics Co., Ltd.
+C00000-CFFFFF     (base 16)		Brigates Microelectronics Co., Ltd.
+				2007,Building 7, No. 1588 Chuangye Road
+				Kunshan  Jiangsu  215300
+				CN
+
+98-6D-35   (hex)		Advanced Diagnostics LTD
+900000-9FFFFF     (base 16)		Advanced Diagnostics LTD
+				Diagnostics House, Eastboro Fields, Hemdale
+				Nuneaton  Warwickshire  CV116GL
+				GB
+
+A8-5B-36   (hex)		Shenzhen Dandelion Intelligent Cloud Technology Development Co., LTD
+300000-3FFFFF     (base 16)		Shenzhen Dandelion Intelligent Cloud Technology Development Co., LTD
+				1101, 1102, 1103, 1108A, Building E, Phase II, Galaxy WORLD, Minle Community, Minzhi Street, Longhua District
+				Shenzhen  Guangdong  518100
+				CN
+
+A8-5B-36   (hex)		ATER Technologies Co Ltd
+C00000-CFFFFF     (base 16)		ATER Technologies Co Ltd
+				Floor 5,Building 1,HongYe Industry Park,Baoan district
+				Shenzhen  Guangdong  518100
+				CN
+
+78-13-05   (hex)		microtec Sicherheitstechnik GmbH
+300000-3FFFFF     (base 16)		microtec Sicherheitstechnik GmbH
+				Auf der Langwies 20
+				Hünstetten    65510
+				DE
+
+A8-5B-36   (hex)		JUGANU LTD
+500000-5FFFFF     (base 16)		JUGANU LTD
+				Yehadut Canada St. 1
+				Or Yehuda  Israel  6037501
+				IL
+
+F0-2A-2B   (hex)		Frigotel SRL
+300000-3FFFFF     (base 16)		Frigotel SRL
+				Via Trezza, 49
+				San Donà di Piave    30027
+				IT
+
+A8-5B-36   (hex)		Loomanet Inc.
+200000-2FFFFF     (base 16)		Loomanet Inc.
+				900 Lafayette St. Suite 704
+				Santa Clara  CA  95050
+				US
+
+F0-2A-2B   (hex)		Comexio GmbH
+C00000-CFFFFF     (base 16)		Comexio GmbH
+				Eisenberger Straße 56a
+				Kerzenheim    67304
+				DE
+
+44-A9-2C   (hex)		Amethystum Storage Technology Co., Ltd
+B00000-BFFFFF     (base 16)		Amethystum Storage Technology Co., Ltd
+				Guangzhou(Meizhou) Industry Transfer Zone,
+				Meizhou  Guangdong  514079
+				CN
+
+44-A9-2C   (hex)		RT-Systemtechnik GmbH
+800000-8FFFFF     (base 16)		RT-Systemtechnik GmbH
+				Jacksonring 4
+				Rheine    48429
+				DE
+
+44-A9-2C   (hex)		Anhui Zhongxin Electronic Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Anhui Zhongxin Electronic Technology Co., Ltd.
+				South Head, No.11, Building 2, Huayuan Commercial Building,6km, Changqing Township, Yuhui District, Bengbu City,Anhui Province
+				Bengbu  Anhui  233010
+				CN
+
+44-A9-2C   (hex)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
+000000-0FFFFF     (base 16)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
+				Room 201 and 202,Building 5,328 Pingjiang Road,Yuecheng District,Shaoxing
+				Shaoxing  Zhejiang  312000
+				CN
+
+44-A9-2C   (hex)		Ningbo joyson new energy automotive technology Co.,Ltd
+600000-6FFFFF     (base 16)		Ningbo joyson new energy automotive technology Co.,Ltd
+				No.1266 Juxian Road, Hi-Tech Park
+				Ningbo  Zhejiang  315000
+				CN
+
+58-48-49   (hex)		X-speed lnformation Technology Co.,Ltd
+200000-2FFFFF     (base 16)		X-speed lnformation Technology Co.,Ltd
+				th Floor,Building 2,Xinyu Electronic Industrial Park,No.69, Zhaishan,Houshan Village, High-tech Zone,Fuzhou,Fujian ,China
+				Fuzhou    350000
+				CN
+
+64-33-B5   (hex)		Adesso, Inc
+200000-2FFFFF     (base 16)		Adesso, Inc
+				20659 Valley Boulevard
+				Walnut  CA  91789
+				US
+
+28-36-13   (hex)		shenzhen technology limited
+700000-7FFFFF     (base 16)		shenzhen technology limited
+				903,No. 1 Shifeng Building, Xinzhuang Community Villa Road, Matian Street, Guangming District, Shenzhen City
+				Shenzhen  Guangdong  518000
+				CN
+
+04-71-4B   (hex)		uAvionix Corporation
+100000-1FFFFF     (base 16)		uAvionix Corporation
+				300 Pine Needle Lane
+				Bigfork  MT  59911
+				US
+
+64-33-B5   (hex)		Geksacon
+C00000-CFFFFF     (base 16)		Geksacon
+				Revolutionary Street 78
+				Ufa  Republic of Bashkortostan  450005
+				RU
+
+78-5E-E8   (hex)		Guangdong COROS Sports Technology Co., Ltd
+600000-6FFFFF     (base 16)		Guangdong COROS Sports Technology Co., Ltd
+				ROOM 601 ROOM 701,BLD.2,NO.2,SCIENCE AND TECHNOLOGY 9 RD,SONGSHAN LAKE HI-TECH ZONE
+				Dongguan  Guangdong  523808
+				CN
+
+38-A8-CD   (hex)		OUTFORM
+E00000-EFFFFF     (base 16)		OUTFORM
+				82 NE 26th Street Suite #103
+				Miami  FL  33137
+				US
+
+7C-83-34   (hex)		PRO BRAND TECHNOLOGY (TW)
+500000-5FFFFF     (base 16)		PRO BRAND TECHNOLOGY (TW)
+				14F-6,1071 Chung Cheng Road
+				Taoyuan     330
+				TW
+
+1C-AE-3E   (hex)		Annapurna labs
+600000-6FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+1C-AE-3E   (hex)		FORME
+D00000-DFFFFF     (base 16)		FORME
+				204 west spear street suite 3697
+				carson city  NV  89703
+				US
+
+1C-AE-3E   (hex)		Beijing SuperCloud Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		Beijing SuperCloud Technology Co., Ltd.
+				yizhuang 
+				beijing  beijing  100176
+				CN
+
+98-6E-E8   (hex)		Fujitsu component limited
+400000-4FFFFF     (base 16)		Fujitsu component limited
+				SHINAGAWA SEASIDE PARK TOWER, 12-4, Higashi-shinagawa
+				4-chome, Shinagawa-ku,  Tokyo  140-8586
+				JP
+
+78-13-05   (hex)		E-Stone Electronics Co., Ltd
+700000-7FFFFF     (base 16)		E-Stone Electronics Co., Ltd
+				Room 0355, Unit 109, No. 62, Chengyi North Street, Software Park Phase III, Xiamen City
+				Fujian  Fujian  361000
+				CN
+
+98-6E-E8   (hex)		Sercomm Corporation.
+C00000-CFFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+98-80-BB   (hex)		Shenzhen Ginto E-commerce CO.,LTD
+400000-4FFFFF     (base 16)		Shenzhen Ginto E-commerce CO.,LTD
+				Room 1308-1309, Building B, Huihai Square, Chuangye Road, Longhua District, Shenzhen
+				Shenzhen  Guangdong  570100
+				CN
+
+78-72-64   (hex)		QT systems ab
+D00000-DFFFFF     (base 16)		QT systems ab
+				Finnbacksgatan 11
+				Lycksele  Västerbotten  921 32
+				SE
+
+78-72-64   (hex)		SHENZHEN FANGZHICHENG TECHNOLOGY CO., LTD.
+900000-9FFFFF     (base 16)		SHENZHEN FANGZHICHENG TECHNOLOGY CO., LTD.
+				SHENZHEN FANGZHICHENG TECHNOLOGY CO., LTD.
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+78-72-64   (hex)		Gsou Technology(Shenzhen)Co.,Ltd
+800000-8FFFFF     (base 16)		Gsou Technology(Shenzhen)Co.,Ltd
+				18B.Block B,First World Plaza,No.7002 West HongLi road,Futian,
+				ShenZhen    518000
+				CN
+
+98-FC-84   (hex)		ZeXin (Shanghai) Information Technologies Co.,Ltd
+300000-3FFFFF     (base 16)		ZeXin (Shanghai) Information Technologies Co.,Ltd
+				Room 205E Building 5#,545 Hulan Road,Baoshan District,Shanghai City
+				Shanghai    200000
+				CN
+
+3C-39-E7   (hex)		HomeWizard B.V.
+200000-2FFFFF     (base 16)		HomeWizard B.V.
+				Keyserswey 79
+				Noordwijk  Zuid-Holland  2201CX
+				NL
+
+F4-70-0C   (hex)		Annapurna labs
+900000-9FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+F4-70-0C   (hex)		Jinan USR IOT Technology Limited
+600000-6FFFFF     (base 16)		Jinan USR IOT Technology Limited
+				Floor F1 & Part of Floor F2, Building No. 9,Diya shuang chuang Industrial Zone, No.2566,Century Main Road,Gaoxin District Jinan,Shandong China
+				Shandong  Jinan  250014
+				CN
+
+F4-70-0C   (hex)		Beijing ASU Tech Co., Ltd.
+200000-2FFFFF     (base 16)		Beijing ASU Tech Co., Ltd.
+				11th Floor Block A, Beijing Normal University Science & Technology Mansion, No.12 Xueyuan South Road,Haidian District,Beijing, China
+				Beijing    100088
+				CN
+
+F4-70-0C   (hex)		Freeus LLC
+D00000-DFFFFF     (base 16)		Freeus LLC
+				1069 Stewart Drive, Suites 3-6
+				Ogden  UT  84404
+				US
+
+F4-A4-54   (hex)		Denshijiki Industry Co.,Ltd
+500000-5FFFFF     (base 16)		Denshijiki Industry Co.,Ltd
+				5-6-20 Ukima
+				Kita-ku  Tokyo-to  115-0051
+				JP
+
+F4-A4-54   (hex)		Earshots
+400000-4FFFFF     (base 16)		Earshots
+				Aviation Way
+				Palmerston North  Manawatu  4410
+				NZ
+
+18-45-B3   (hex)		Pfannenberg GmbH
+100000-1FFFFF     (base 16)		Pfannenberg GmbH
+				Werner-Witt-Straße 1
+				Hamburg  Hamburg  21035
+				DE
+
+18-45-B3   (hex)		leetop tech co.,ltd
+000000-0FFFFF     (base 16)		leetop tech co.,ltd
+				2203 Changhong Technology Building, Science and Technology Park
+				shenzhen city  GD province  518053
+				CN
+
+F4-A4-54   (hex)		Annapurna labs
+A00000-AFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+18-45-B3   (hex)		Haier cloud Health Technology (Qingdao) Co., Ltd
+200000-2FFFFF     (base 16)		Haier cloud Health Technology (Qingdao) Co., Ltd
+				Room c1-201, No. 127, huizhiqiao Road, high tech Zone
+				Qingdao  Shandong  266114
+				CN
+
+18-45-B3   (hex)		ShenZhen Topband Co.,Ltd
+800000-8FFFFF     (base 16)		ShenZhen Topband Co.,Ltd
+				Topband Industrial Park, Shiyan Town, Bao'anDistrict,Shenzhen
+				Shenzhen    518000
+				CN
+
+94-C9-B7   (hex)		Annapurna labs
+200000-2FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+50-A0-30   (hex)		Jiangsu Jinshi Legend Technology Co.,Ltd
+500000-5FFFFF     (base 16)		Jiangsu Jinshi Legend Technology Co.,Ltd
+				North-2, floor 13, building A3, No. 8, Bailongjiang East Street, Xincheng Science Park, Jianye District, Nanjing
+				Nanjing    210005
+				CN
+
+94-C9-B7   (hex)		C-Mer Rainsoptics Limited
+100000-1FFFFF     (base 16)		C-Mer Rainsoptics Limited
+				Room 607, 6/F, 17W of Hong Kong Science Park, No.17 Science Park West Avenue 
+				Shatin  Hong Kong  000000
+				HK
+
+50-A0-30   (hex)		SHANGHAI ZXELINK Co.,Ltd
+B00000-BFFFFF     (base 16)		SHANGHAI ZXELINK Co.,Ltd
+				No.889 Bibo Road, Zhangjiang Hi-Tech Park
+				Shanghai  Shanghai Province  200000
+				CN
+
+7C-BA-CC   (hex)		Fortem Technologies, Inc.
+500000-5FFFFF     (base 16)		Fortem Technologies, Inc.
+				1064 S NORTH COUNTY BLVD STE 600
+				PLEASANT GROVE  UT  84062-3446
+				US
+
+50-DE-19   (hex)		Clear Flow by Antiference
+100000-1FFFFF     (base 16)		Clear Flow by Antiference
+				Unit 2 Common Lane Fradley Park
+				Lichfield  Staffordshire  WS13 8NQ
+				GB
+
+50-A0-30   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+D00000-DFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+50-A0-30   (hex)		HANKOOK CTEC CO,. LTD.
+E00000-EFFFFF     (base 16)		HANKOOK CTEC CO,. LTD.
+				404 Hallasigmavalley, 53, Gasandigital 2-ro Geumcheongu
+				Seoul    08588
+				KR
+
+18-D7-93   (hex)		zhejiang Anhong technology co.,ltd
+A00000-AFFFFF     (base 16)		zhejiang Anhong technology co.,ltd
+				Floor 3, Building 2, No.6, Changtai Street, Changkou Town, Fuyang District
+				hangzhou  zhejiang  311400
+				CN
+
+18-D7-93   (hex)		Kraken Technologies Ltd
+D00000-DFFFFF     (base 16)		Kraken Technologies Ltd
+				33 Holborn
+				London    EC1N 2HT
+				GB
+
+18-D7-93   (hex)		Clarity Medical Pvt Ltd
+900000-9FFFFF     (base 16)		Clarity Medical Pvt Ltd
+				PLOT No. 1687A, JLPL  INDUSTRIAL AREA, SECTOR 82, MOHALI
+				MOHALI  Punjab  140306
+				IN
+
+04-EE-E8   (hex)		SHENZHEN TOPWELL TECHNOLOGY CO., LTD.
+D00000-DFFFFF     (base 16)		SHENZHEN TOPWELL TECHNOLOGY CO., LTD.
+				15/F, Building A1, Qiaode Science & Technology Park, No.7 Road, Hi-Tech Industry Park ,Guangming new district
+				Shenzhen  Guang Dong   518000
+				CN
+
+04-EE-E8   (hex)		daishin
+C00000-CFFFFF     (base 16)		daishin
+				9828-15 Kataokaimaizumi
+				Shiojiri-shi  Nagano-ken  3990711
+				JP
+
+18-D7-93   (hex)		Annapurna labs
+100000-1FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+DC-36-43   (hex)		Fresenius Medical Care R&D (Shanghai) Co.,Ltd.
+400000-4FFFFF     (base 16)		Fresenius Medical Care R&D (Shanghai) Co.,Ltd.
+				Building 15, No. 1036 Tianlin road, Shanghai
+				shanghai    200233
+				CN
+
+08-26-AE   (hex)		ZaiNar
+200000-2FFFFF     (base 16)		ZaiNar
+				2 Davis Drive, Unit 1
+				Belmont  CA  94002
+				US
+
+98-8F-E0   (hex)		Dongguan Synst Electronics Co., LTD.
+B00000-BFFFFF     (base 16)		Dongguan Synst Electronics Co., LTD.
+				No. 20, Fudong Road, Houjie Town
+				Dongguan  Guangdong  523966
+				CN
+
+98-8F-E0   (hex)		vhf elektronik GmbH
+200000-2FFFFF     (base 16)		vhf elektronik GmbH
+				Melli-Beese-Str. 24
+				Fuerth  Bavaria  90768
+				DE
+
+98-8F-E0   (hex)		Shenzhen Micro&Nano Perception Computing Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Micro&Nano Perception Computing Technology Co.,Ltd
+				shenzhenshifutianquzhongkanglu136haoxinyidaichanyeyuan4dong6lou
+				shenzhen  guangdong  518000
+				CN
+
+08-26-AE   (hex)		Shenzhen Hai yingZhilian Industrial Co., Ltd.
+300000-3FFFFF     (base 16)		Shenzhen Hai yingZhilian Industrial Co., Ltd.
+				2-5/F? #8FactoryBld?Yu'an Factory Area ?LongchengIndustryPark?Gao feng Community ?Dalang Street ?
+				Shenzhen  Guangdong   518110
+				CN
+
+98-8F-E0   (hex)		Empowerment Technologies Inc.
+300000-3FFFFF     (base 16)		Empowerment Technologies Inc.
+				590 York Rd., Unit 2
+				Niagara-on-the-Lake  Ontario  L0S 1J0
+				CA
+
+94-05-BB   (hex)		closip Inc.
+700000-7FFFFF     (base 16)		closip Inc.
+				3F, Canal Square Shibaura, 3-14-18 Shibaura
+				Tokyo  Minato  108-0023
+				JP
+
+0C-86-29   (hex)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
+D00000-DFFFFF     (base 16)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
+				27 Shucun West Road, Haidian District,
+				Beijing    100089
+				CN
+
+0C-86-29   (hex)		Shenzhen protostellar technology Co., Ltd
+500000-5FFFFF     (base 16)		Shenzhen protostellar technology Co., Ltd
+				 4/F, #16, DaKan Yangmen industrial park, XiLi town,  Nanshan district
+				ShenZhen  GuangDong  518055
+				CN
+
+0C-86-29   (hex)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
+900000-9FFFFF     (base 16)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
+				RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK
+				HONGKONG    999077
+				CN
+
+0C-86-29   (hex)		Akribis Systems
+B00000-BFFFFF     (base 16)		Akribis Systems
+				Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5
+				Singapore  Singapore  569876
+				SG
+
+6C-93-08   (hex)		Shenzhen C & D Electronics Co., Ltd.
+500000-5FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+6C-93-08   (hex)		Braums
+000000-0FFFFF     (base 16)		Braums
+				Unit M 10-16 South st
+				Rydalmere   NSW  2116
+				AU
+
+50-FF-99   (hex)		COYOTE SYSTEM
+100000-1FFFFF     (base 16)		COYOTE SYSTEM
+				24 quai Gallieni
+				Suresnes    92150
+				FR
+
+30-43-D7   (hex)		Apollo Infoways Private Limited
+200000-2FFFFF     (base 16)		Apollo Infoways Private Limited
+				G-149, Sector-63
+				Noida  Uttar Pradesh  201301
+				IN
+
+30-43-D7   (hex)		Luxshare Electronic Technology (Kunshan) LTD
+300000-3FFFFF     (base 16)		Luxshare Electronic Technology (Kunshan) LTD
+				No.158,Jinchang Road,Jinxi Town,Kunshan City,Jiangsu Province,215324, China
+				Kunshan  Jiangsu  215324
+				CN
+
+6C-93-08   (hex)		WATERFORD CONSULTANTS LLC
+100000-1FFFFF     (base 16)		WATERFORD CONSULTANTS LLC
+				7430 NEW TECHNOLOGY WAY, Suite 150
+				FREDERICK    21703
+				US
+
+30-43-D7   (hex)		DIGICITI Technology Co.,Ltd
+700000-7FFFFF     (base 16)		DIGICITI Technology Co.,Ltd
+				Room 3502,Building 1,Huide Building,North Station Community,Minzhi Street,Longhua District
+				Shenzhen  Guangdong  518000
+				CN
+
+38-1F-26   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+100000-1FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+38-1F-26   (hex)		Avon Protection
+800000-8FFFFF     (base 16)		Avon Protection
+				503 8th Street
+				Cadillac  MI  49601
+				US
+
+18-A5-9C   (hex)		Thermia AB
+500000-5FFFFF     (base 16)		Thermia AB
+				Snickaregatan 1
+				Arvika    67134
+				SE
+
+38-1F-26   (hex)		SMS Evoko Group AB
+900000-9FFFFF     (base 16)		SMS Evoko Group AB
+				Hastholmsvagen 32
+				Nacka    13130
+				SE
+
+18-A5-9C   (hex)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
+B00000-BFFFFF     (base 16)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
+				AVENIDA TORQUATO TAPAJOS, 7503 TARUMA GALPAO 2 - CNPJ: 07.200.194/0003-80
+				MANAUS  AMAZONAS  69041-025
+				BR
+
+18-A5-9C   (hex)		BlueEyes Technology
+C00000-CFFFFF     (base 16)		BlueEyes Technology
+				7F-3, No.200, Sec. 4, Wenxin Rd.,
+				Taichung City  Taiwan  40462
+				TW
+
+9C-43-1E   (hex)		SHURE INCORPORATED
+E00000-EFFFFF     (base 16)		SHURE INCORPORATED
+				2552 White Road, Suite A
+				Irvine  CA  92614
+				US
+
+1C-59-74   (hex)		Globe Tracker ApS
+E00000-EFFFFF     (base 16)		Globe Tracker ApS
+				Strandgade 91
+				kobenhavn  State / Province*  1401
+				DK
+
+C4-A1-0E   (hex)		Connectlab SRL
+D00000-DFFFFF     (base 16)		Connectlab SRL
+				via donatello 30
+				Milano  Milano  20131 - Milano
+				IT
+
+C4-A1-0E   (hex)		BARTEC PIXAVI AS
+100000-1FFFFF     (base 16)		BARTEC PIXAVI AS
+				Vestre Svanholmen 24
+				SANDNES  Rogaland  4313
+				NO
+
+C4-A1-0E   (hex)		Consolinno Energy GmbH
+300000-3FFFFF     (base 16)		Consolinno Energy GmbH
+				Franz-Mayer-Straße 1
+				Regensburg  Bayern  93053
+				DE
+
+C4-A1-0E   (hex)		Ayla Networks (Shenzhen) Co., Ltd.
+800000-8FFFFF     (base 16)		Ayla Networks (Shenzhen) Co., Ltd.
+				Room 1501, Building B, Innovation Building, No.198 Daxin Road, Majialong Community ,Nantou Street,Nanshan District, 
+				Shenzhen    518000
+				CN
+
+70-50-E7   (hex)		Shenzhen Dangs Science and Technology CO.,Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Dangs Science and Technology CO.,Ltd.
+				9th Floor of GDC Building, Gaoxin Middle 3rd St.,Nanshan District
+				Shenzhen  GuangDong  518063
+				CN
+
+70-50-E7   (hex)		KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
+E00000-EFFFFF     (base 16)		KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
+				3F,No.4Building,Yuyao Technology Innovation Center
+				Ningbo  ZheJiang Province, P.R.C.  315400
+				CN
+
+80-02-F4   (hex)		Baicells Technologies Co., Ltd
+B00000-BFFFFF     (base 16)		Baicells Technologies Co., Ltd
+				10-11F,AL, No.1 Zhongguancun, Haidian
+				Beijing  Beijing  100094
+				CN
+
+80-02-F4   (hex)		BK Networks Co,. Ltd.
+000000-0FFFFF     (base 16)		BK Networks Co,. Ltd.
+				330 Suin-ro, Gwonseon-gu
+				Suwon-si  Gyeonggi-do  16371
+				KR
+
+80-7B-85   (hex)		SCALA Digital Technology(Ningbo) CO, LTD
+C00000-CFFFFF     (base 16)		SCALA Digital Technology(Ningbo) CO, LTD
+				7 Hong Da Road, Hong Tang Industrial Park Zone A
+				Ningbo  Zhejiang  315040
+				CN
+
+8C-51-09   (hex)		Heliox Automotive B.V.
+500000-5FFFFF     (base 16)		Heliox Automotive B.V.
+				De Waal 24
+				Best    5684 PH
+				NL
+
+8C-51-09   (hex)		Amzetta Technologies, LLC
+100000-1FFFFF     (base 16)		Amzetta Technologies, LLC
+				5555 Oakbrook Pkwy, Suite 280
+				Norcross  GA  30093
+				US
+
+0C-7F-ED   (hex)		Annapurna labs
+A00000-AFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+FC-61-79   (hex)		Qisda Corporation
+500000-5FFFFF     (base 16)		Qisda Corporation
+				No. 157, Shanying Rd., Gueishan Dist., Taoyuan City 33341, Taiwan
+				Taoyuan    33341
+				TW
+
+0C-7F-ED   (hex)		Guangdong Tianshu New Energy Technology Co., Ltd
+000000-0FFFFF     (base 16)		Guangdong Tianshu New Energy Technology Co., Ltd
+				No.8 Huishang Road, Infore Enviro Industrial Park, Jiangcun Village, Leliu Street, Shunde District, 
+				Foshan    528000
+				CN
+
+FC-61-79   (hex)		Shenzhen Xmitech Electronic Co.,Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Xmitech Electronic Co.,Ltd
+				Room 8B1888, Block AB, New Energy Building, No.2239, Nanhai Avenue, Nanguang Community, Nanshan Street, Nanshan District, Shenzhen
+				Shenzhen    518054
+				CN
+
+30-3D-51   (hex)		SHENZHEN WLINK TECHNOLOGY CO., LTD.
+100000-1FFFFF     (base 16)		SHENZHEN WLINK TECHNOLOGY CO., LTD.
+				201, F5 Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan Dist.
+				Shenzhen  Guangdong  518052
+				CN
+
+30-3D-51   (hex)		Labman Automation
+B00000-BFFFFF     (base 16)		Labman Automation
+				Labman Automation LtdSeamer Hill
+				Stokesley  North Yorkshire  TS9 5NQ
+				GB
+
+30-3D-51   (hex)		Fink Telecom Services GmbH
+000000-0FFFFF     (base 16)		Fink Telecom Services GmbH
+				Paradieshofstrasse 101
+				Basel    4054
+				CH
+
+30-3D-51   (hex)		Amber-Link Network Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Amber-Link Network Technology Co.,Ltd.
+				Bld. #1, St. 356, Rd. Guo Shoujing
+				Shanghai    China
+				CN
+
+2C-69-1D   (hex)		SPEEDTECH CORP.
+400000-4FFFFF     (base 16)		SPEEDTECH CORP.
+				No. 568, Sec. 1, Minsheng N. Rd., Guishan Dist., Taoyuan City 338, Taiwan
+				Taoyuan    338
+				TW
+
+18-C3-F4   (hex)		Ningbo Yuda Communication Technology Co.,Ltd
+900000-9FFFFF     (base 16)		Ningbo Yuda Communication Technology Co.,Ltd
+				No.2 Yuda Road,Fengshan Street,Yuyao
+				Yuyao  Zhejiang  315400
+				CN
+
+2C-69-1D   (hex)		IBM
+800000-8FFFFF     (base 16)		IBM
+				9000 South Rita Rd
+				Tucson  AZ  85744
+				US
+
+88-5D-90   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+				445 Hoes Lane
+				PISCATAWAY  NJ  08854
+				US
+
+18-C3-F4   (hex)		HANGZHOU ZHONGKEJIGUANG TECHNOLOGY CO., LTD
+C00000-CFFFFF     (base 16)		HANGZHOU ZHONGKEJIGUANG TECHNOLOGY CO., LTD
+				Room107, Building 2, No.600, 21 Street, ETDA,
+				HANGZHOU  Zhejiang  310018
+				CN
+
+88-3C-C5   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+900000-9FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+88-3C-C5   (hex)		HDL da Amazônia Industria Eletrônica Ltda
+C00000-CFFFFF     (base 16)		HDL da Amazônia Industria Eletrônica Ltda
+				Avenida Abiurana, 1150 - Distrito
+				Manaus  MN  69075-010
+				BR
+
+18-C3-F4   (hex)		VECTOR TECHNOLOGIES, LLC
+B00000-BFFFFF     (base 16)		VECTOR TECHNOLOGIES, LLC
+				Razdolnaya str, 76bldg3
+				Orel  Orel region  302038
+				RU
+
+88-3C-C5   (hex)		Lenard Enterprises Inc
+D00000-DFFFFF     (base 16)		Lenard Enterprises Inc
+				1211 Gorham St., Unit 3 Newmarket ON L3Y8Y3
+				 Newmarket  ON  L3Y8Y3
+				CA
+
+58-47-CA   (hex)		Future Tech Development FZC LLC
+400000-4FFFFF     (base 16)		Future Tech Development FZC LLC
+				A-64-00-01-01/2 - Flamingo Villas
+				Ajman    00000
+				AE
+
+58-47-CA   (hex)		LITUM BILGI TEKNOLOJILERI SAN. VE TIC. A.S.
+000000-0FFFFF     (base 16)		LITUM BILGI TEKNOLOJILERI SAN. VE TIC. A.S.
+				?evket Özçelik Sk. No:29 Kültür Mah. Litum Plaza
+				IZMIR    35220
+				TR
+
+58-47-CA   (hex)		Birger Engineering, Inc.
+800000-8FFFFF     (base 16)		Birger Engineering, Inc.
+				42 Chauncy Street Suite 1A
+				BOSTON  MA  02111
+				US
+
+88-3C-C5   (hex)		myUpTech AB
+E00000-EFFFFF     (base 16)		myUpTech AB
+				Box 14
+				Markaryd    28532
+				SE
+
+D4-20-00   (hex)		Zelus(HuangZhou) Technology Ltd.
+100000-1FFFFF     (base 16)		Zelus(HuangZhou) Technology Ltd.
+				Room 601-602, Building 1, Liuhe Jinzuo, Xihu District, Hangzhou City, Zhejiang Province
+				HuangZhou    310012
+				CN
+
+D4-20-00   (hex)		Wattsense
+000000-0FFFFF     (base 16)		Wattsense
+				Espace Ouest, 39 Chemin du Moulin Carron
+				Dardilly    69570
+				FR
+
+C4-A1-0E   (hex)		HYOSUNG Heavy Industries Corporation
+000000-0FFFFF     (base 16)		HYOSUNG Heavy Industries Corporation
+				119, Mapo-daero (Gongdeok-dong), Mapo-gu
+				Seoul    04144
+				KR
+
+D4-20-00   (hex)		Annapurna labs
+700000-7FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+C4-83-72   (hex)		AI-RIDER CORPORATION
+200000-2FFFFF     (base 16)		AI-RIDER CORPORATION
+				4F., NO.6, WENHU ST., NEIHU DIST.
+				Taipei City    11445
+				TW
+
+C4-83-72   (hex)		Annapurna labs
+D00000-DFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+C4-83-72   (hex)		ACCELECOM LTD.
+800000-8FFFFF     (base 16)		ACCELECOM LTD.
+				10th Floor, Building 06, Tian 'an Digital City, 36 Yongfeng Avenue, Qinhuai District, Nanjing
+				Nanjing  Jiangsu  210014
+				CN
+
+C4-83-72   (hex)		care.ai
+B00000-BFFFFF     (base 16)		care.ai
+				7300 Sandlake Road Suite 327
+				Orlando  FL  32819
+				US
+
+C4-98-94   (hex)		Neron Informatics Pvt Ltd
+A00000-AFFFFF     (base 16)		Neron Informatics Pvt Ltd
+				PLOTE- 6, 2ND FLOOR, OPP. HDFC BANK ,SAGAR PLAZA KAUSHAMBI 
+				GHAZIABAD  Utter Pradesh  201010
+				IN
+
+D0-96-86   (hex)		Annapurna labs
+500000-5FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+D0-96-86   (hex)		Changsha keruijie lnformation Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Changsha keruijie lnformation Technology Co.,Ltd
+				Floor 3, building 5, North Yuemin lane, Xinmin Road, Juzizhou street, Yuelu District, Changsha
+				Changsha    410000
+				CN
+
+D0-96-86   (hex)		Energiekonzepte Deutschland GmbH
+800000-8FFFFF     (base 16)		Energiekonzepte Deutschland GmbH
+				Straße des 17. Juni, 4a
+				Taucha  Saxony  04425
+				DE
+
+D0-96-86   (hex)		Houston Radar LLC
+400000-4FFFFF     (base 16)		Houston Radar LLC
+				12818 Century Dr
+				Stafford    77477
+				US
+
+4C-74-A7   (hex)		ddcpersia
+D00000-DFFFFF     (base 16)		ddcpersia
+				No:36 14St Vozara Ave Argantin Sq Tehran/Iran
+				Tehran  Tehran  1511764311
+				IR
+
+D4-61-37   (hex)		MUSASHI ENGINEERING,INC.
+C00000-CFFFFF     (base 16)		MUSASHI ENGINEERING,INC.
+				8-7-4 SHIMORENJAKU
+				MITAKA-SHI  TOKYO  181-0013
+				JP
+
+F0-22-1D   (hex)		Schleissheimer Soft- und Hardwareentwicklung GmbH
+D00000-DFFFFF     (base 16)		Schleissheimer Soft- und Hardwareentwicklung GmbH
+				Am Kalkofen 10
+				Nieder-Woellstadt    61206
+				DE
+
+F0-22-1D   (hex)		Estone Technology LTD
+C00000-CFFFFF     (base 16)		Estone Technology LTD
+				2F,Building No.1, Jia'an Industrial Park,No.2 Long Chang Road, Bao'an
+				Shenzhen   Guangdong  518101
+				CN
+
+F0-22-1D   (hex)		THANHBINH COMPANY - E111 FACTORY
+000000-0FFFFF     (base 16)		THANHBINH COMPANY - E111 FACTORY
+				Industrial Security, Lai Yen Ward
+				Hanoi  Hoai Duc District  13200
+				VN
+
+4C-93-A6   (hex)		Fastenal IP Company
+500000-5FFFFF     (base 16)		Fastenal IP Company
+				2001 Theurer Blvd
+				Winona  MN  55987
+				US
+
+E0-38-2D   (hex)		Weishi Intelligent Information Technology (Guangzhou) Co., LTD
+500000-5FFFFF     (base 16)		Weishi Intelligent Information Technology (Guangzhou) Co., LTD
+				Room 1402, No. 85, Xiangxue Avenue middle, Huangpu District
+				Guangzhou  Guangdong  200233
+				CN
+
+E0-38-2D   (hex)		Qingdao Unovo Technologies Co., Ltd
+400000-4FFFFF     (base 16)		Qingdao Unovo Technologies Co., Ltd
+				8#-1 Household of Liandong U Valley Industrial Park
+				Qingdao  Shandong  266100
+				CN
+
+F0-22-1D   (hex)		oToBrite Electronics, Inc.
+E00000-EFFFFF     (base 16)		oToBrite Electronics, Inc.
+				6F, No.18, Prosperity Rd. II, Science-Based Industrial Park
+				Hsinchu    30078
+				TW
+
+E0-38-2D   (hex)		Annapurna labs
+100000-1FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+E0-38-2D   (hex)		Xi'an Xiangxun Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Xi'an Xiangxun Technology Co., Ltd.
+				Room 112, No. 1 Workshop, AVIC Xi'an Computing Technology Research Institute, No. 15, Jinye Second Road, Xi'an
+				Xi'an  Shaanxi  710076
+				CN
+
+E0-38-2D   (hex)		Shenzhen iTest Technology Co.,Ltd
+800000-8FFFFF     (base 16)		Shenzhen iTest Technology Co.,Ltd
+				5C building 1, Tingwei Industrial Park, No.6 Liufang Road, Area 67, Xingdong community, Xin’an street, Bao’an District, Shenzhen, China
+				SHENZHEN    518000
+				CN
+
+0C-CC-47   (hex)		Shimane Masuda Electronics CO.,LTD.
+300000-3FFFFF     (base 16)		Shimane Masuda Electronics CO.,LTD.
+				320-97 Muso
+				Masuda  Shimane  6982144
+				JP
+
+0C-CC-47   (hex)		NINGBO QIXIANG INFORMATION TECHNOLOGY CO., LTD
+800000-8FFFFF     (base 16)		NINGBO QIXIANG INFORMATION TECHNOLOGY CO., LTD
+				MEIXI 66-1,DANDONG STREET,XIANGSHAN COUNTY
+				Ningbo  Zhejiang  315048
+				CN
+
+0C-CC-47   (hex)		OptConnect
+900000-9FFFFF     (base 16)		OptConnect
+				865 W 450 N, #1
+				Kaysville  UT  84037
+				US
+
+C4-A5-59   (hex)		SMH Technologies SRL
+B00000-BFFFFF     (base 16)		SMH Technologies SRL
+				Via Giovanni Agnelli n.1
+				Villotta di Chions  Pordenone  33083
+				IT
+
+84-B3-86   (hex)		Weiss Robotics GmbH & Co. KG
+900000-9FFFFF     (base 16)		Weiss Robotics GmbH & Co. KG
+				Karl-Heinrich-Kaeferle-Str. 8
+				Ludwigsburg    71640
+				DE
+
+C4-A5-59   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+E00000-EFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+C4-A5-59   (hex)		X-speed lnformation Technology Co.,Ltd
+300000-3FFFFF     (base 16)		X-speed lnformation Technology Co.,Ltd
+				th Floor,Building 2,Xinyu Electronic Industrial Park,No.69, Zhaishan,Houshan Village, High-tech Zone,Fuzhou,Fujian ,China
+				Fuzhou    350000
+				CN
+
+70-5A-6F   (hex)		Thyracont Vacuum Instruments GmbH
+000000-0FFFFF     (base 16)		Thyracont Vacuum Instruments GmbH
+				Max-Emanuel-Str. 10
+				Passau  Bavaria  94036
+				DE
+
+70-5A-6F   (hex)		Tyromotion GmbH
+200000-2FFFFF     (base 16)		Tyromotion GmbH
+				Bahnhofgürtel 59
+				Graz  Styria  8020
+				AT
+
+70-5A-6F   (hex)		PICadvanced SA
+D00000-DFFFFF     (base 16)		PICadvanced SA
+				PCI Creative Science Park Via do Conhecimento Ed Central
+				Ilhavo  Aveiro  3830-352
+				PT
+
+70-5A-6F   (hex)		Vaiotik Co., Ltd
+400000-4FFFFF     (base 16)		Vaiotik Co., Ltd
+				GaoXinQi in
+				Hi-Tech Park  Shenzhen   518000
+				CN
+
+8C-5D-B2   (hex)		Guandong Yuhang Automation Technology Co.,Ltd
+D00000-DFFFFF     (base 16)		Guandong Yuhang Automation Technology Co.,Ltd
+				Daliang Baojian Road N0.99
+				Foshan  Guangdong  528300
+				CN
+
+8C-5D-B2   (hex)		DAYOUPLUS
+100000-1FFFFF     (base 16)		DAYOUPLUS
+				3F 509, Dunchon-daero, Jungwon-gu, Seongnam-si, Gyeonggi-do, Republic of Korea
+				Seongnam-si  Gyeonggi-do  13217
+				KR
+
+8C-5D-B2   (hex)		Guangzhou Phimax Electronic Technology Co.,Ltd
+800000-8FFFFF     (base 16)		Guangzhou Phimax Electronic Technology Co.,Ltd
+				 ROOM 2806 ZHONGLV BUILDING WEST, QIAOLIN STREET 43, TIANHE DISTRICT
+				Guangzhou  Guangdong  510000
+				CN
+
+70-5A-6F   (hex)		LUAN Industry and Commerce Co., Ltd
+800000-8FFFFF     (base 16)		LUAN Industry and Commerce Co., Ltd
+				Jinying Building, No 1, Jinying Road, Tianhe District
+				Guangzhou  Guangdong  510640
+				CN
+
+8C-5D-B2   (hex)		ISSENDORFF KG
+900000-9FFFFF     (base 16)		ISSENDORFF KG
+				Wellweg 93
+				Sarstedt  Lower Saxony  31157
+				DE
+
+8C-5D-B2   (hex)		SmartMore Corporation Limited
+600000-6FFFFF     (base 16)		SmartMore Corporation Limited
+				Bld 3E, No.3 Science Park East Avenue, N.T.
+				Hong Kong  Select State  HKG
+				HK
+
+7C-45-F9   (hex)		Mobilaris Industrial Solutions
+D00000-DFFFFF     (base 16)		Mobilaris Industrial Solutions
+				Mobilaris Innovation CenterSundsbacken 6
+				LULEÅ    97242
+				SE
+
+7C-45-F9   (hex)		MIJ CO LTD
+900000-9FFFFF     (base 16)		MIJ CO LTD
+				ROOM 204 882, Baksa-ro, Seo-myeon, chuncheon-si, Gangwon-do, Republic of korea
+				chuncheon-si  Gangwon-do  24461
+				KR
+
+C0-EA-C3   (hex)		Worldpass industrial Company Limited 
+600000-6FFFFF     (base 16)		Worldpass industrial Company Limited 
+				3, Xingfa South Road, Liwu Village, Wusha District, Chang'an Town, Dongguan City,  China
+				Guang dong province    523857
+				CN
+
+C0-EA-C3   (hex)		SeongHo Information and Communication Corp.
+B00000-BFFFFF     (base 16)		SeongHo Information and Communication Corp.
+				26 Hyangmokseo-gil, Jukwang-myeon, Goseong-gun, Gangwon-do, Republic of Korea
+				 Goseong-gun  Gangwon-do  24743
+				KR
+
+C0-EA-C3   (hex)		Hangzhou Qixun Technology Co., Ltd
+300000-3FFFFF     (base 16)		Hangzhou Qixun Technology Co., Ltd
+				Room A313, Building B, Shangzao Park, Puyan Sub-district, Binjiang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+C0-EA-C3   (hex)		Dongguan Wecxw CO.,Ltd.
+100000-1FFFFF     (base 16)		Dongguan Wecxw CO.,Ltd.
+				Room 2201, building 1, No. 16, Keji 4th Road, Songshanhu, Dongguan City, Guangdong Province
+				Dongguan  Guangdong  523429
+				CN
+
+5C-6A-EC   (hex)		DarkVision Technologies Inc.
+D00000-DFFFFF     (base 16)		DarkVision Technologies Inc.
+				40 Gostick Place
+				North Vancouver  British Columbia  V7M 3G3
+				CA
+
+5C-6A-EC   (hex)		Shenzhen Mingyue Technology lnnovation Co.,Ltd
+200000-2FFFFF     (base 16)		Shenzhen Mingyue Technology lnnovation Co.,Ltd
+				Longhua District, Shenzhen City, Tenglong Road, Dalang Street, gold Digi e-commerce Room 1401, Block A, Building
+				Shenzhen  - None -  518000
+				CN
+
+5C-6A-EC   (hex)		Shanghai Smilembb Technology Co.,LTD
+100000-1FFFFF     (base 16)		Shanghai Smilembb Technology Co.,LTD
+				Room 602, Building 8, No.1, Guangyue Branch Road, Hongkou District
+				Shanghai   Shanghai  200434
+				CN
+
+5C-6A-EC   (hex)		Shenzhen Anked vision Electronics Co.Ltd
+B00000-BFFFFF     (base 16)		Shenzhen Anked vision Electronics Co.Ltd
+				302, floor 3 of Yingfeituo Factory, Guanlan High tech Zone, Longhua District, Shenzhen City,
+				Shenzhen    518000
+				CN
+
+D0-93-95   (hex)		Annapurna labs
+600000-6FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+D0-93-95   (hex)		Invendis Technologies India Pvt Ltd
+B00000-BFFFFF     (base 16)		Invendis Technologies India Pvt Ltd
+				#230 BOOHBCS Layout BTM 2nd Stage 38th MAIN 1ST CROSS
+				Bengaluru  Karnataka  560068
+				IN
+
+E0-3C-1C   (hex)		Jiangsu Riying Electronics Co.,Ltd.
+800000-8FFFFF     (base 16)		Jiangsu Riying Electronics Co.,Ltd.
+				Hengshanqiao,Changzhou,Jiangsu,China
+				Changzhou    213119
+				CN
+
+D0-16-F0   (hex)		BBPOS International Limited
+E00000-EFFFFF     (base 16)		BBPOS International Limited
+				Suite 1602, Tower 2, Nina Tower, 8 Yeung Uk Road, Tsuen Wan, NT
+				Hong Kong  China  00000
+				HK
+
+D0-16-F0   (hex)		Shenzhen Lesingle Technology CO., LTD.
+000000-0FFFFF     (base 16)		Shenzhen Lesingle Technology CO., LTD.
+				First Floor,Te’an Building, No.15 Kejibei Second Road, Nanshan District
+				Shenzhen    Guangdong
+				CN
+
+D0-16-F0   (hex)		Peralex Electronics (Pty) Ltd
+C00000-CFFFFF     (base 16)		Peralex Electronics (Pty) Ltd
+				5 Dreyersdal Road, Unit C, Conberg House
+				Bergvliet  Western Cape  7945
+				ZA
+
+E0-3C-1C   (hex)		MELAG Medizintechnik GmbH & Co. KG
+A00000-AFFFFF     (base 16)		MELAG Medizintechnik GmbH & Co. KG
+				Geneststraße 6-10
+				Berlin  Berlin  10829
+				DE
+
+E0-3C-1C   (hex)		Sprintshield d.o.o.
+D00000-DFFFFF     (base 16)		Sprintshield d.o.o.
+				Ulica Marina Getaldica 3
+				Velika Gorica    10410
+				HR
+
+54-08-3B   (hex)		BHS Corrugated Maschinen- und Anlagenbau GmbH
+D00000-DFFFFF     (base 16)		BHS Corrugated Maschinen- und Anlagenbau GmbH
+				Paul-Engel-Strasse 1
+				Weiherhammer  Bavaria  92729
+				DE
+
+54-08-3B   (hex)		FairPhone B.V.
+C00000-CFFFFF     (base 16)		FairPhone B.V.
+				VanDiemenstraat 200
+				Amsterdam    1013 CP
+				NL
+
+54-08-3B   (hex)		Sinclair Technologies
+E00000-EFFFFF     (base 16)		Sinclair Technologies
+				85 MARY ST
+				AURORA  Ontario  L4G 6X5
+				CA
+
+E0-3C-1C   (hex)		Semic Inc.
+500000-5FFFFF     (base 16)		Semic Inc.
+				17F.-6, No. 79, Sec. 1, Xintai 5th Rd., Xizhi Dist.
+				New Taipei City    22101
+				TW
+
+54-08-3B   (hex)		Korea Bus Broadcasting
+B00000-BFFFFF     (base 16)		Korea Bus Broadcasting
+				7F, 24, Bangbaejungang-ro, Seocho-gu
+				Seoul    06684
+				KR
+
+70-06-92   (hex)		SWIT Electronics Co.,Ltd
+B00000-BFFFFF     (base 16)		SWIT Electronics Co.,Ltd
+				10 Hengtong Rd,Nanjing Economic Technological Development Zone
+				Nanjing  Jiangsu  210038
+				CN
+
+70-06-92   (hex)		Hangzhou Clounix Technology Limited
+600000-6FFFFF     (base 16)		Hangzhou Clounix Technology Limited
+				Floor 12, Building 2, Zichen International Center, NO.39, Jincheng Road, Xiaoshan District
+				Hangzhou  Zhejiang  311202
+				CN
+
+70-06-92   (hex)		Fusiostor Technologies Private Limited
+400000-4FFFFF     (base 16)		Fusiostor Technologies Private Limited
+				GALA NO.7, MUNERVA IND ESTATE, BISHAN UDYOG
+				MUMBAI  Maharashtra  400080
+				IN
+
+70-06-92   (hex)		Shenzhen Lingwei Technology Co., Ltd
+900000-9FFFFF     (base 16)		Shenzhen Lingwei Technology Co., Ltd
+				No. 50-1, Minqing Road, Longhua District
+				Shenzhen  Guangdong Province  518109
+				CN
+
+70-06-92   (hex)		Scud (Fujian) Electronics Co.,Ltd
+200000-2FFFFF     (base 16)		Scud (Fujian) Electronics Co.,Ltd
+				NO.98 ,EAST ROAD OF JIANGBIN ,MAWEI ZONE,FUZHOU
+				FUZHOU    350000
+				CN
+
+4C-4B-F9   (hex)		Shenzhen dingsheng technology co., LTD
+400000-4FFFFF     (base 16)		Shenzhen dingsheng technology co., LTD
+				Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district
+				Shenzhen  Guangdong  518000
+				CN
+
+4C-4B-F9   (hex)		Connected IO
+C00000-CFFFFF     (base 16)		Connected IO
+				8304 Esters Boulevard, Suite 850
+				Irving  TX  75063
+				US
+
+4C-4B-F9   (hex)		Zivid AS
+800000-8FFFFF     (base 16)		Zivid AS
+				Gjerdrums vei 10A
+				Oslo    0484
+				NO
+
+20-85-93   (hex)		Hemina Spa
+000000-0FFFFF     (base 16)		Hemina Spa
+				Hemina SPA, via Piemonte 2
+				Montangnana  Padova  35044
+				IT
+
+20-85-93   (hex)		Regloplas AG
+C00000-CFFFFF     (base 16)		Regloplas AG
+				Flurhofstrasse 158c
+				St. Gallen    9006
+				CH
+
+4C-4B-F9   (hex)		Jiangsu acrel Co., Ltd.
+100000-1FFFFF     (base 16)		Jiangsu acrel Co., Ltd.
+				No. 5, Dongmeng Road, Nanzha Street
+				Jiangyin City   Jiangsu Province  214400
+				CN
+
+4C-4B-F9   (hex)		GLONEXS
+700000-7FFFFF     (base 16)		GLONEXS
+				3F, 19-14, Doyak-ro 252beon-gil
+				Bucheon  Gyeonggi-do  14531
+				KR
+
+4C-4B-F9   (hex)		Remedee Labs
+500000-5FFFFF     (base 16)		Remedee Labs
+				35 chemin du vieux chene
+				Meylan  France  38240
+				FR
+
+20-85-93   (hex)		Dynaudio
+E00000-EFFFFF     (base 16)		Dynaudio
+				Sverigesvej 15
+				Skanderborg    DK-8660
+				DK
+
+84-39-BE   (hex)		Cheng Du virtual world Technology Limited.
+200000-2FFFFF     (base 16)		Cheng Du virtual world Technology Limited.
+				7F, Fang Da building, Ave 12 High-tech Industrial Park, Nanshan Dist
+				Shenzhen  Guangdong  518057
+				CN
+
+24-15-10   (hex)		Satellite Link Technology CO.,LTD
+E00000-EFFFFF     (base 16)		Satellite Link Technology CO.,LTD
+				1305 ,SED science and technology Building,No.1 science and technology road,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+20-85-93   (hex)		Kloudspot Inc
+400000-4FFFFF     (base 16)		Kloudspot Inc
+				1285 Oakmead Parkway
+				Sunnyvale    94085
+				US
+
+24-15-10   (hex)		Shenzhen Xtooltech Co., Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Xtooltech Co., Ltd
+				10574 Acacia St, Suite D4
+				Rancho Cucamonga  CA  91730
+				US
+
+24-15-10   (hex)		Safetrust Inc
+000000-0FFFFF     (base 16)		Safetrust Inc
+				8112 Mill Creek Rd
+				Fremont  CA  94539
+				US
+
+20-85-93   (hex)		Networking Services Corp
+100000-1FFFFF     (base 16)		Networking Services Corp
+				Bella Vista, Obarrio, Edificio Magna Corp, Mezanine
+				Panama  Panama  33131
+				PA
+
+24-15-10   (hex)		SMaBiT GmbH
+100000-1FFFFF     (base 16)		SMaBiT GmbH
+				Friedrichstrasse 95
+				Berlin    10117
+				DE
+
+98-06-37   (hex)		HwaCom Systems Inc.
+C00000-CFFFFF     (base 16)		HwaCom Systems Inc.
+				11Fl., No.108, Sec. 1, Hsin-Tai-Wu Rd., Hsi-Chih District
+				New Taipei  New Taipei  221
+				TW
+
+54-9A-11   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+24-15-10   (hex)		Unitronux(Shenzhen) Intelligence Technology Co.,Ltd
+A00000-AFFFFF     (base 16)		Unitronux(Shenzhen) Intelligence Technology Co.,Ltd
+				7th floor,Building 7,ZhongYunTai industy Park, Tangtou 1st Road,Bao'an District.
+				Shenzhen  Guangdong  518108
+				CN
+
+98-06-37   (hex)		Petersime
+B00000-BFFFFF     (base 16)		Petersime
+				Centrumstraat 125
+				Zulte    9870
+				BE
+
+98-06-37   (hex)		VR Technology(Shenzhen) Limited
+D00000-DFFFFF     (base 16)		VR Technology(Shenzhen) Limited
+				Room 201,Huiheng Building,No.12,Gaoxin South 7th Road,Yuehai Steet,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+98-06-37   (hex)		SAMWONTECH
+700000-7FFFFF     (base 16)		SAMWONTECH
+				YAKDAE-DONG, BUCHEON TECHNO-PARK
+				BUCHEON-CITY  KYUNGGI-DO  14502
+				KR
+
+98-06-37   (hex)		Hangzhou Sanxin Network Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Hangzhou Sanxin Network Technology Co.,Ltd
+				No. 195, Wen Er Road, Xihu District, Xinyuan 11-18F
+				Hangzhou  Zhejiang  310012
+				CN
+
+98-06-37   (hex)		NAB co,.LTD
+900000-9FFFFF     (base 16)		NAB co,.LTD
+				3-62-30 utukushigaoka aoba-ku
+				Yokohama-city  KANAGAWA-KEN  2250002
+				JP
+
+74-19-F8   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+E4-95-6E   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+D0-5F-64   (hex)		Shanghai Luying International Trade Co.,Ltd
+900000-9FFFFF     (base 16)		Shanghai Luying International Trade Co.,Ltd
+				Room 1009 Block 12 No.858 South Huanzhen Road Baoshan District Shanghai City
+				Shanghai     200442
+				CN
+
+D0-5F-64   (hex)		Atoll Solutions Private Limited
+500000-5FFFFF     (base 16)		Atoll Solutions Private Limited
+				#229, 2nd Floor, 2A Main, 5th Cross, New Thippasandra
+				Bangalore  Karnataka  560075
+				IN
+
+D0-5F-64   (hex)		SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
+200000-2FFFFF     (base 16)		SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
+				RM510,418GuipingRoad.Caohejing Hi-TECH-PARK
+				SHANGHAI    200233
+				CN
+
+D0-5F-64   (hex)		HUAQIN TELECOM HONG KONG LTD
+300000-3FFFFF     (base 16)		HUAQIN TELECOM HONG KONG LTD
+				Unit 510,5/F, Lincoln Center,20 Yip Fung Street,Fanling
+				N.T.    999077
+				HK
+
+2C-27-9E   (hex)		Private
+300000-3FFFFF     (base 16)		Private
+
+44-D5-F2   (hex)		CETC Avionics.L td
+800000-8FFFFF     (base 16)		CETC Avionics.L td
+				No. 9, baichuan road, high-tech district
+				Chengdu  Sichuan  611731
+				CN
+
+44-D5-F2   (hex)		VURO LLC
+300000-3FFFFF     (base 16)		VURO LLC
+				1441 Broadway, Suite 5011
+				New York  NY  10018
+				US
+
+D0-5F-64   (hex)		North American Blue Tiger Company, LLC
+B00000-BFFFFF     (base 16)		North American Blue Tiger Company, LLC
+				3727 Greenbriar Dr.  Suite 119
+				Stafford  TX  77477
+				US
+
+44-D5-F2   (hex)		SIMPLERED TECHNOLOGY LTD.
+100000-1FFFFF     (base 16)		SIMPLERED TECHNOLOGY LTD.
+				8F., No.23, Ln. 155, Sec. 3, Beishen Rd., Shenkeng Dist.
+				New Taipei City    222
+				TW
+
+44-D5-F2   (hex)		APPOTRONICS CO., LTD
+400000-4FFFFF     (base 16)		APPOTRONICS CO., LTD
+				4th Floor,SZICC,NO.1089,Chaguang Road,Nanshan District, Shenzhen, China
+				Shenzhen  Guangdong  518000
+				CN
+
+44-D5-F2   (hex)		TIBA Research & Development (1986) LTD
+000000-0FFFFF     (base 16)		TIBA Research & Development (1986) LTD
+				17 Ha'Mefalsim St. Kiryat Arye
+				Petach Tikva  Israel  4951251
+				IL
+
+FC-A4-7A   (hex)		Broadcom Inc.
+000000-0FFFFF     (base 16)		Broadcom Inc.
+				Wernerwerkstr. 2
+				Regensburg  Bavaria  93055
+				DE
+
+FC-A4-7A   (hex)		Shenzhen Nokelock Technology Co, Ltd.
+B00000-BFFFFF     (base 16)		Shenzhen Nokelock Technology Co, Ltd.
+				9th Floor, B Block, Fuhua Technology Building, No 9116 Beihuan  Road, Xili Street, Nanshan District,
+				Shenzhen    518057
+				CN
+
+FC-A4-7A   (hex)		Token
+600000-6FFFFF     (base 16)		Token
+				4545 East River Road, Suite 310
+				Henrietta  NY  14586
+				US
+
+2C-16-BD   (hex)		Sunit Oy
+400000-4FFFFF     (base 16)		Sunit Oy
+				Taitoraitti 1
+				Kajaani    87400
+				FI
+
+8C-59-3C   (hex)		Scharfe-Sicht GmbH
+B00000-BFFFFF     (base 16)		Scharfe-Sicht GmbH
+				Huttropstraße 60
+				Essen   Nordrhein-Westfalen  45138 
+				DE
+
+8C-59-3C   (hex)		ecom instruments GmbH
+A00000-AFFFFF     (base 16)		ecom instruments GmbH
+				Industriestr.2
+				Assamstadt  Baden-Württemberg  97959
+				DE
+
+8C-59-3C   (hex)		Shenzhen Tian-Power Technology Co.,Ltd.
+E00000-EFFFFF     (base 16)		Shenzhen Tian-Power Technology Co.,Ltd.
+				Guangming New District Gongming Office Yulu Community No. 6 Industrial Zone Building 26
+				Shenzhen  Guangdong  518000
+				CN
+
+B4-A2-EB   (hex)		QKM Technology(Dongguan)Co.,Ltd
+000000-0FFFFF     (base 16)		QKM Technology(Dongguan)Co.,Ltd
+				2F,Block A Building 17,NO. 1,Headquarter,No.4,Xinzhu Road,SSL National Hi-tech Industrial Development Zone
+				Dongguan  Guangdong  523808
+				CN
+
+B4-A2-EB   (hex)		Kona I
+700000-7FFFFF     (base 16)		Kona I
+				4F EXCON Venture-Tower, 3, Eunhaeng-ro, Youngdeungpo-gu,
+				Seoul    07237
+				KR
+
+2C-D1-41   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+D0-C8-57   (hex)		Eco Mobile 
+700000-7FFFFF     (base 16)		Eco Mobile 
+				Samoborska cesta 330
+				Zagreb  Zagreb  10090
+				HR
+
+D0-C8-57   (hex)		Mobicon
+300000-3FFFFF     (base 16)		Mobicon
+				#406, 97, Jungbu-daero 448beon-gil, Yeongtong-gu
+				Suwon-si  Gyeonggi-do  16521
+				KR
+
+60-95-CE   (hex)		Synamedia
+C00000-CFFFFF     (base 16)		Synamedia
+				Luipaardstraat 12
+				Kortrijk  West-Vlaanderen  8500
+				BE
+
+1C-82-59   (hex)		ESTec Corporation
+A00000-AFFFFF     (base 16)		ESTec Corporation
+				22, Yusangongdan 9-gil
+				Yangsan  Gyeongsangnam-do  50592
+				KR
+
+1C-82-59   (hex)		CGI IT UK LIMITED
+600000-6FFFFF     (base 16)		CGI IT UK LIMITED
+				20 Fenchurch Street, 14th Floor
+				London    EC3M 3BY
+				GB
+
+60-95-CE   (hex)		Untangle, Inc.
+400000-4FFFFF     (base 16)		Untangle, Inc.
+				100 W. San Fernando St., Ste. 565
+				San Jose  CA  95113
+				US
+
+B0-FD-0B   (hex)		IDspire Corporation Ltd.
+100000-1FFFFF     (base 16)		IDspire Corporation Ltd.
+				9F, No. 266, Sec. 1, Wenhua Rd., Banqiao Dist.
+				New Taipei City    22041
+				TW
+
+84-8B-CD   (hex)		SouXin Corporate
+000000-0FFFFF     (base 16)		SouXin Corporate
+				33 Jingyou Road
+				Nanjing  Jiangsu  211100
+				CN
+
+B0-FD-0B   (hex)		Shenzhen FEIBIT Electronic Technology Co.,LTD
+E00000-EFFFFF     (base 16)		Shenzhen FEIBIT Electronic Technology Co.,LTD
+				5th floor,Bld. A1, Lilang Software Park
+				Shenzhen    518112
+				CN
+
+C8-2C-2B   (hex)		Smart Wires Inc
+C00000-CFFFFF     (base 16)		Smart Wires Inc
+				3292 Whipple Road
+				Union City   CA  94587
+				US
+
+C8-2C-2B   (hex)		Verifone Systems (China),lnc.
+800000-8FFFFF     (base 16)		Verifone Systems (China),lnc.
+				2nd Floor,No.39,Region C, Tongpan Road,Gulou District
+				fuzhou  fujian  350004
+				CN
+
+C8-2C-2B   (hex)		Fränkische Rohrwerke Gebr. Kirchner GmbH & Co. KG
+E00000-EFFFFF     (base 16)		Fränkische Rohrwerke Gebr. Kirchner GmbH & Co. KG
+				Hellinger Str. 1
+				Königsberg/Bayern    97486
+				DE
+
+C8-2C-2B   (hex)		Repp Health
+200000-2FFFFF     (base 16)		Repp Health
+				1919 14th Street , Suite 700
+				Boulder  CO  80302
+				US
+
+E4-1E-0A   (hex)		FireAngel Safety Technology Ltd
+A00000-AFFFFF     (base 16)		FireAngel Safety Technology Ltd
+				Sir William Lyons Road, Vanguard Centre
+				Coventry  Warwickshire  CV4 7EZ
+				GB
+
+E4-1E-0A   (hex)		Avast Software s.r.o.
+300000-3FFFFF     (base 16)		Avast Software s.r.o.
+				Pikrtova 1737/1a
+				Prague 4    14000
+				CZ
+
+C8-63-14   (hex)		Taylor Dynamometer
+E00000-EFFFFF     (base 16)		Taylor Dynamometer
+				3602 W Wheelhouse Rd.
+				Milwaukee  WI  53208
+				US
+
+C8-63-14   (hex)		Western Reserve Controls, Inc.
+000000-0FFFFF     (base 16)		Western Reserve Controls, Inc.
+				1485 Exeter Dr.
+				Akron  OH  44306
+				US
+
+34-E1-D1   (hex)		Genius Pros
+700000-7FFFFF     (base 16)		Genius Pros
+				Floor 13,  Building B, NO. 859 West Shixiang Road, Xihu District, Hangzhou City
+				Hangzhou    310012
+				CN
+
+34-E1-D1   (hex)		ASA Innovation & Technology Ltd.
+400000-4FFFFF     (base 16)		ASA Innovation & Technology Ltd.
+				Room 506, 5/F, Enterprise Place, No. 5 Science Park West Ave., Hong Kong Science Park
+				Shatin  NT  00000
+				HK
+
+34-E1-D1   (hex)		Ningbo Hua Gao Mdt Info Tech Ltd
+600000-6FFFFF     (base 16)		Ningbo Hua Gao Mdt Info Tech Ltd
+				NO.655,Xueshi Road, Yinzhou District, Ningbo, Zhejiang,China
+				Ningbo  Zhejiang  315100
+				CN
+
+34-E1-D1   (hex)		Rinco Ultrasonics AG
+300000-3FFFFF     (base 16)		Rinco Ultrasonics AG
+				Industriestrasse 4
+				Romanshorn  Thurgau  8590
+				CH
+
+C8-63-14   (hex)		Meyer Electronics Limited
+500000-5FFFFF     (base 16)		Meyer Electronics Limited
+				382 Kwun Tong Road
+				Hong Kong    0000
+				HK
+
+FC-D2-B6   (hex)		Silicon (Shenzhen) Electronic Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Silicon (Shenzhen) Electronic Technology Co.,Ltd.
+				5F, Block A，No. 9 Yuexing 3rd Road, Yuehai Subdistrict Office, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+FC-D2-B6   (hex)		Univer S.p.A.
+E00000-EFFFFF     (base 16)		Univer S.p.A.
+				Via Eraclito 31
+				Milan    20128
+				IT
+
+FC-D2-B6   (hex)		NREAL TECHNOLOGY LIMITED
+A00000-AFFFFF     (base 16)		NREAL TECHNOLOGY LIMITED
+				RM 1901，19/F LEE GARDEN ONE 33 HYSAN AVENUE CAUSEWAY BAY
+				HONG KONG    999077
+				HK
+
+74-5B-C5   (hex)		Haikou Frun Flash&Mcu Microcontrol Technology Development Co.,Ltd
+900000-9FFFFF     (base 16)		Haikou Frun Flash&Mcu Microcontrol Technology Development Co.,Ltd
+				5 floor A1-9, A building, incubation center, Haikou national hi tech Development Zone
+				Haikou  Hainan  570206
+				CN
+
+74-5B-C5   (hex)		Smartiply Inc.
+B00000-BFFFFF     (base 16)		Smartiply Inc.
+				233 Mt. Airy Road
+				Basking Ridge  NJ  07920
+				US
+
+74-5B-C5   (hex)		OXON AG
+300000-3FFFFF     (base 16)		OXON AG
+				Waldeggstrasse 47
+				Liebefeld    3097
+				CH
+
+E4-4C-C7   (hex)		HANGZHOU OLE-SYSTEMS CO., LTD
+600000-6FFFFF     (base 16)		HANGZHOU OLE-SYSTEMS CO., LTD
+				 No.35 Jiuhuan Road, Jianggan District , Hangzhou , Zhejiang , China
+				Hangzhou  Zhejiang  310019
+				CN
+
+E4-4C-C7   (hex)		Channel Enterprises (HK) Ltd.
+700000-7FFFFF     (base 16)		Channel Enterprises (HK) Ltd.
+				Room 2006, 20/F., 43-47 Wang Lung Street,
+				Tsuen Wan    NA
+				HK
+
+E4-4C-C7   (hex)		CE LABS, LLC
+500000-5FFFFF     (base 16)		CE LABS, LLC
+				3209 WOOD DRIVE
+				GARLAND  TX  75041
+				US
+
+E0-5A-9F   (hex)		Shenzhen Rongan Networks Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Shenzhen Rongan Networks Technology Co.,Ltd
+				Room 1903, Industrial and Research building of Sun Yat-Sen university,no.1, Yuexing 4th road, Yuehai street,Nanshan district
+				Shenzhen  Guangdong  518057
+				CN
+
+E0-5A-9F   (hex)		Link of Things Co., Ltd.
+300000-3FFFFF     (base 16)		Link of Things Co., Ltd.
+				9F, Park St. 3-2, NanKang Software Park, Taipei, Taiwan
+				Taipei    115
+				TW
+
+4C-BC-98   (hex)		Quake Global Inc
+200000-2FFFFF     (base 16)		Quake Global Inc
+				4711 VIEWRIDGE AVE., STE 150
+				SAN DIEGO  CA  92123
+				US
+
+4C-BC-98   (hex)		Dongguan SmartAction Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Dongguan SmartAction Technology Co.,Ltd
+				Room1109,Building D,First Place,Nancheng District, Dongguan
+				Dongguan  Guangdong  523000
+				CN
+
+4C-BC-98   (hex)		Gronic Systems GmbH
+500000-5FFFFF     (base 16)		Gronic Systems GmbH
+				Hilpertswiese 7
+				Birstein    63633
+				DE
+
+4C-BC-98   (hex)		Machine Max
+300000-3FFFFF     (base 16)		Machine Max
+				Shell Centre
+				London    SE1 7NA
+				GB
+
+38-B1-9E   (hex)		Thrust Networks
+600000-6FFFFF     (base 16)		Thrust Networks
+				Pangeran Jayakarta 129 No B 7
+				Jakarta  Jakarta  10730
+				ID
+
+D8-86-0B   (hex)		Teplovodokhran Ltd.
+400000-4FFFFF     (base 16)		Teplovodokhran Ltd.
+				Novaya , 51v
+				Ryazan    390027
+				RU
+
+D8-86-0B   (hex)		DIGITAL CONCEPTS
+900000-9FFFFF     (base 16)		DIGITAL CONCEPTS
+				3108 RIVERPORT TECH CENTER DR
+				MARYLAND HEIGHTS  MO  630434825
+				US
+
+E0-5A-9F   (hex)		Hale Products
+400000-4FFFFF     (base 16)		Hale Products
+				607 NW 27th Ave
+				Ocala  FL  34475
+				US
+
+D8-86-0B   (hex)		GLO Science
+A00000-AFFFFF     (base 16)		GLO Science
+				10 West 37th Street, 1001
+				New York  NY  10018
+				US
+
+D8-86-0B   (hex)		SCANMATIK
+600000-6FFFFF     (base 16)		SCANMATIK
+				Letnaya 18-2
+				Mytischi  Moscow  141008
+				RU
+
+38-B1-9E   (hex)		Dallas Delta Corporation
+D00000-DFFFFF     (base 16)		Dallas Delta Corporation
+				102 Albert Street
+				Brunswick East  Victoria  3057
+				AU
+
+38-B1-9E   (hex)		AVO DEVELOPMENT LTD
+300000-3FFFFF     (base 16)		AVO DEVELOPMENT LTD
+				179 Shepherds Hill
+				Romford  Essex  RM3 0NR
+				GB
+
+84-39-BE   (hex)		HINO ENGINEERING, INC
+000000-0FFFFF     (base 16)		HINO ENGINEERING, INC
+				60-7 Takakuramachi
+				Hachiouji  Tokyo  192-0033
+				JP
+
+CC-D3-9D   (hex)		Glenair
+700000-7FFFFF     (base 16)		Glenair
+				1211 Air Way
+				Glendale  CA  91201
+				US
+
+D4-25-CC   (hex)		EISST Ltd
+300000-3FFFFF     (base 16)		EISST Ltd
+				10 Queen Street Place
+				London    EC4R 1AG
+				GB
+
+D4-25-CC   (hex)		E-MetroTel
+A00000-AFFFFF     (base 16)		E-MetroTel
+				2828 West Parker Unit B201
+				Plano  TX  75075
+				US
+
+D4-25-CC   (hex)		Coperion
+E00000-EFFFFF     (base 16)		Coperion
+				590 WOODBURY GLASSBORO RD.
+				SEWELL  NJ  08080
+				US
+
+D4-25-CC   (hex)		NORDI TELEKOMMUNIKATSIOONI OÜ
+000000-0FFFFF     (base 16)		NORDI TELEKOMMUNIKATSIOONI OÜ
+				Valukoja 8
+				Tallinn city  Estonian Republic  11415
+				EE
+
+CC-D3-9D   (hex)		MagTarget LLC
+300000-3FFFFF     (base 16)		MagTarget LLC
+				1300 Reamwood Ave Sunnyvale CA
+				SUNNYVALE  CA  94089
+				US
+
+D4-25-CC   (hex)		Eware Information Technology com.,Ltd
+100000-1FFFFF     (base 16)		Eware Information Technology com.,Ltd
+				No.402,Building 5,Software Park,Keji Mid 3nd Road,Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+9C-69-B4   (hex)		Teptron AB
+900000-9FFFFF     (base 16)		Teptron AB
+				Box 1009
+				Varberg  Halland  43213
+				SE
+
+4C-91-7A   (hex)		LumiGrow Inc.
+400000-4FFFFF     (base 16)		LumiGrow Inc.
+				1480 64th Street, Suite #150
+				Emeryville  CA  94608
+				US
+
+9C-69-B4   (hex)		Skydock do Brasil Ltda
+800000-8FFFFF     (base 16)		Skydock do Brasil Ltda
+				Rua Gralha Azul, 147
+				Quatro Barras  PR  83420-000
+				BR
+
+9C-69-B4   (hex)		PCI Limited
+700000-7FFFFF     (base 16)		PCI Limited
+				35, Pioneer Road North
+				Singapore    628475
+				SG
+
+6C-DF-FB   (hex)		AAON
+600000-6FFFFF     (base 16)		AAON
+				2425 Yukon Ave
+				Tulsa  OK  74107
+				US
+
+6C-DF-FB   (hex)		CELL System Co.,Ltd.
+B00000-BFFFFF     (base 16)		CELL System Co.,Ltd.
+				1-2-8 Azamino-minami, Aobaku
+				Yokohama  Kanagawa  225-0012
+				JP
+
+4C-91-7A   (hex)		Camsat Przemysław Gralak
+800000-8FFFFF     (base 16)		Camsat Przemysław Gralak
+				Ogrodowa 2A
+				Solec Kujawski  Bydgoszcz  86-050
+				PL
+
+4C-91-7A   (hex)		Hangzhou Hangtu Technology Co.,Ltd.
+900000-9FFFFF     (base 16)		Hangzhou Hangtu Technology Co.,Ltd.
+				Room A301, no.11, xiyuan eighth road, xihu district
+				Hangzhou  Zhejiang  310000
+				CN
+
+6C-DF-FB   (hex)		YongTechs Electric Co. Ltd
+900000-9FFFFF     (base 16)		YongTechs Electric Co. Ltd
+				18F-8, No.118, Ci-Yun Rd., Hsin Chu 30072, Taiwan(R.O.C.)
+				Hsin Chu    30072
+				TW
+
+6C-DF-FB   (hex)		Hardmeier
+800000-8FFFFF     (base 16)		Hardmeier
+				Pärnu mnt 102
+				Tallinn    11312
+				EE
+
+7C-BC-84   (hex)		Xuji Changnan Communication Equipment Co., Ltd.
+700000-7FFFFF     (base 16)		Xuji Changnan Communication Equipment Co., Ltd.
+				No. 2725, Xu You Xi Road
+				Xuchang  Henan  461001
+				CN
+
+7C-BC-84   (hex)		OPNT BV
+A00000-AFFFFF     (base 16)		OPNT BV
+				De Boelelaan 1081
+				Amsterdam    1081 HV
+				NL
+
+7C-BC-84   (hex)		Xiamen Mage Information Technology Co.,Ltd.
+100000-1FFFFF     (base 16)		Xiamen Mage Information Technology Co.,Ltd.
+				Room 302B, No.40 Guanri Road, Software Park II
+				Xiamen  Fujian  361008
+				CN
+
+7C-BC-84   (hex)		Société de Transport de Montréal
+600000-6FFFFF     (base 16)		Société de Transport de Montréal
+				800, de La Gauchetière, bureau 8440
+				Montréal  Québec  H5A 1J6
+				CA
+
+98-F9-C7   (hex)		ARIMA Communications Corp.
+700000-7FFFFF     (base 16)		ARIMA Communications Corp.
+				6F.,No.866,Zhongzheng Rd.,Zhonghe Dist.,
+				New Taipei City  Taiwan  23586
+				TW
+
+0C-FE-5D   (hex)		Beijing WayClouds Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Beijing WayClouds Technology Co., Ltd.
+				RM501, 5F, DASCOM BD,NO.9 SHANGDI EAST RD, HAIDIAN DISTRICT,BEIJING,CHINA
+				Beijing    100085
+				CN
+
+98-F9-C7   (hex)		MSB Elektronik und Gerätebau GmbH
+A00000-AFFFFF     (base 16)		MSB Elektronik und Gerätebau GmbH
+				Hofwiesenstr. 23
+				Crailsheim    74564
+				DE
+
+6C-5C-3D   (hex)		Reconova Technologies
+B00000-BFFFFF     (base 16)		Reconova Technologies
+				B103,Shenzhen Institute of Nanjing University,Keyuan Road,Hi-Tech Park,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+6C-5C-3D   (hex)		Syowatsusinkougyo Co.,Ltd.
+D00000-DFFFFF     (base 16)		Syowatsusinkougyo Co.,Ltd.
+				35 Ozekiazakitada,Azai-cho
+				Ichinomiya-City  Aichi  491-0101
+				JP
+
+6C-5C-3D   (hex)		krtkl inc.
+A00000-AFFFFF     (base 16)		krtkl inc.
+				350 Townsend Street, Suite 301A
+				San Francisco  CA  94107
+				US
+
+1C-FD-08   (hex)		A&B Technology
+600000-6FFFFF     (base 16)		A&B Technology
+				81, Geumnam-ro, Buk-gu
+				Gwangju    61247
+				KR
+
+6C-5C-3D   (hex)		choyang powertech
+C00000-CFFFFF     (base 16)		choyang powertech
+				11. Deoksan-ro 189beon-gil.
+				ilsan seo-gu. Goyang-si  Gyeonggi-do  10205
+				KR
+
+6C-5C-3D   (hex)		SOUNDKING ELECTRONICS&SOUND CO., LTD.
+700000-7FFFFF     (base 16)		SOUNDKING ELECTRONICS&SOUND CO., LTD.
+				No.818 Chengxin RoadYinzhou Investment Business Park
+				Ningbo  Zhejiang  315105
+				CN
+
+1C-FD-08   (hex)		Beijing Hengxin Rainbow Information Technology Co.,Ltd
+500000-5FFFFF     (base 16)		Beijing Hengxin Rainbow Information Technology Co.,Ltd
+				11Floor,north district,newton business building,No.25 Landian factory south road，Haidian District
+				Beijing  Beijing  100097
+				CN
+
+A8-3F-A1   (hex)		Exel s.r.l. unipersonale
+B00000-BFFFFF     (base 16)		Exel s.r.l. unipersonale
+				via di corticella 201
+				bologna  BO  40128
+				IT
+
+A8-3F-A1   (hex)		Guangzhou Tupu Internet Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Guangzhou Tupu Internet Technology Co., Ltd.
+				602, No.11, Jiangong Road, Tianhe Software Park, Tianhe District
+				Guangzhou  Guangdong  510665
+				CN
+
+3C-6A-2C   (hex)		Bosch Automotive Products (Suzhou) Co., Ltd.
+200000-2FFFFF     (base 16)		Bosch Automotive Products (Suzhou) Co., Ltd.
+				No. 455 Xing Long Street
+				Suzhou    215000
+				CN
+
+3C-6A-2C   (hex)		Phytium Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Phytium Technology Co., Ltd.
+				Building 5, XinAn Business Square, Haiyuan Middle Road
+				Binhai New District, Tianjin    300450
+				CN
+
+3C-6A-2C   (hex)		Qingdao iGuan Technology Co., Ltd.
+500000-5FFFFF     (base 16)		Qingdao iGuan Technology Co., Ltd.
+				Room416, Science and Technology Park, Ocean University of China, No.23 HongKongEast Road
+				Qingdao  Shandong  266100
+				CN
+
+A8-3F-A1   (hex)		Zhejiang Wellsun Intelligent Technology Co.,Ltd.
+400000-4FFFFF     (base 16)		Zhejiang Wellsun Intelligent Technology Co.,Ltd.
+				No.15,Xingye East 3rd St.,Fuxi District,Tiantai County
+				Taizhou  Zhejiang  317200
+				CN
+
+A8-3F-A1   (hex)		Shenzhen BIO I/E Co.,Ltd
+D00000-DFFFFF     (base 16)		Shenzhen BIO I/E Co.,Ltd
+				Huafan Industrial Park,Building #12, Henggang JianLong Village Industrial Zone, Longgang District
+				Shenzhen  GuangDong province  518115
+				CN
+
+00-55-DA   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+30-0A-60   (hex)		Newtons4th Ltd
+700000-7FFFFF     (base 16)		Newtons4th Ltd
+				1 Bede Island Road
+				Leicester    LE2 7EA
+				GB
+
+A4-ED-43   (hex)		TOEC TECHNOLOGY CO.，LTD.
+E00000-EFFFFF     (base 16)		TOEC TECHNOLOGY CO.，LTD.
+				6 Taishan Road Hexi District Tianjin China
+				Tian Jin  Tian Jin  300211
+				CN
+
+A4-ED-43   (hex)		Dongguan Mingji Electronics technology Group Co., Ltd.
+300000-3FFFFF     (base 16)		Dongguan Mingji Electronics technology Group Co., Ltd.
+				NO.93,188 Industrial Road, Pingshan Village,Tangxia Town, Dongguan city, Guangdong Province , China.
+				DONGGUAN  GUANGDONG  523710
+				CN
+
+A4-ED-43   (hex)		leakSMART
+C00000-CFFFFF     (base 16)		leakSMART
+				5920 GREENE POINTE DRIVE S  GROVEPORT
+				Groveport  OH  43125
+				US
+
+A4-ED-43   (hex)		INGELABS S.L.
+100000-1FFFFF     (base 16)		INGELABS S.L.
+				Av. Juan Lopez Peñalver, 21
+				Malaga  Malaga  29590
+				ES
+
+A0-28-33   (hex)		Kalray S.A.
+C00000-CFFFFF     (base 16)		Kalray S.A.
+				180 avenue de l’Europe
+				Montbonnot Saint Martin    38330
+				FR
+
+84-89-EC   (hex)		BYDA Co. Ltd., 
+700000-7FFFFF     (base 16)		BYDA Co. Ltd., 
+				4F, KNS Bldg., 8, Gaepo-ro 25 gil, Gangnam-gu
+				Seoul    06306
+				KR
+
+84-89-EC   (hex)		SHINKAWA LTD.
+C00000-CFFFFF     (base 16)		SHINKAWA LTD.
+				Shinjuku Front Tower 32F, 2-21-1 Kitashinjyuku
+				Shinjuku-ku  Tokyo  169-0074
+				JP
+
+9C-F6-DD   (hex)		AVI Pty Ltd
+A00000-AFFFFF     (base 16)		AVI Pty Ltd
+				9 Pitt Way
+				Booragoon  Western Australia  6154
+				AU
+
+30-09-F9   (hex)		Punkt Tronics AG
+400000-4FFFFF     (base 16)		Punkt Tronics AG
+				Via Losanna 4
+				Lugano    6900
+				CH
+
+C0-83-59   (hex)		Beijing Cloud Fly Technology Development Co.Ltd
+600000-6FFFFF     (base 16)		Beijing Cloud Fly Technology Development Co.Ltd
+				No. 1703, Zhong An Sheng Ye Building, No. 168  Bei Yuan Road, Chaoyang District, Beijing
+				Beijing  Beijing  100101
+				CN
+
+9C-F6-DD   (hex)		Capital Engineering & Research Incorporation Ltd.
+400000-4FFFFF     (base 16)		Capital Engineering & Research Incorporation Ltd.
+				NO.7 JianAnJie, Beijing Economic-Technological Development Area
+				Beijing    100176
+				CN
+
+9C-F6-DD   (hex)		KXT Technology Co., Ltd.
+700000-7FFFFF     (base 16)		KXT Technology Co., Ltd.
+				3F. No.42, Sec. 2, Chongsin Rd., Sanchong Dist.
+				New Taipei City    241
+				TW
+
+C0-83-59   (hex)		Gardner Denver Thomas GmbH
+D00000-DFFFFF     (base 16)		Gardner Denver Thomas GmbH
+				Livry-Gargan-Straße 10
+				Fürstenfeldbruck  Bavaria  82256
+				DE
+
+04-C3-E6   (hex)		Amiosec Ltd
+D00000-DFFFFF     (base 16)		Amiosec Ltd
+				Unit 5 Miller Court
+				Tewkesbury  Gloucestershire  GL20 8DN
+				GB
+
+04-C3-E6   (hex)		Innovusion Inc.
+400000-4FFFFF     (base 16)		Innovusion Inc.
+				4920 El Camino Real
+				Los Altos  CA  94022
+				US
+
+04-C3-E6   (hex)		SLOC GmbH
+800000-8FFFFF     (base 16)		SLOC GmbH
+				Nikolaiplatz 4
+				Graz  Styria  8020
+				AT
+
+B4-4B-D6   (hex)		SHENZHEN TITA INTERACTIVE TECHNOLOGY CO.,LTD
+100000-1FFFFF     (base 16)		SHENZHEN TITA INTERACTIVE TECHNOLOGY CO.,LTD
+				Floor 23, Haowei Technology Mansion,Keji south eighth Road, Gaoxin Sci-Tech. Park(South Zone), 
+				Shenzhen  Guangdong  518000
+				CN
+
+D4-7C-44   (hex)		LS Communication Co.,Ltd.
+500000-5FFFFF     (base 16)		LS Communication Co.,Ltd.
+				LS Bldg., Hwachang-ro, 95(Seoksoo-dong), Manan-gu
+				Anyang-city  Gyeonggi-do  13905
+				KR
+
+3C-42-7E   (hex)		ROBOX SMART MOTION (WUHU) CO.,LTD
+D00000-DFFFFF     (base 16)		ROBOX SMART MOTION (WUHU) CO.,LTD
+				No.96,Wanchun East Road,Jiujiang Economic Development District,Wuhu,Anhui,China
+				Wuhu  Anhui  241000
+				CN
+
+3C-42-7E   (hex)		snap40 Ltd
+A00000-AFFFFF     (base 16)		snap40 Ltd
+				24 Forth Street
+				Edinburgh    EH1 3LH
+				GB
+
+D4-7C-44   (hex)		Beijing Maystar Information Technology Co., Ltd.
+800000-8FFFFF     (base 16)		Beijing Maystar Information Technology Co., Ltd.
+				Building B 5/F,Shangdi Keji Zonghe Building,No.22 Shangdi Information Road, Haidian District
+				Beijing    100084
+				CN
+
+A0-19-B2   (hex)		Ahgora Sistemas SA
+E00000-EFFFFF     (base 16)		Ahgora Sistemas SA
+				Rodovia José Carlos Daux (SC-401), 600 (Km 01) - ParqTec Alfa - Módulo 08
+				Florianópolis  Santa Catarina  88030000
+				BR
+
+D4-7C-44   (hex)		ASDA ICT Co., Ltd.
+600000-6FFFFF     (base 16)		ASDA ICT Co., Ltd.
+				4F-2,No.2,Sec.4,Zhongyang Rd,Tucheng Dist,
+				New Taipei City    999079
+				TW
+
+2C-48-35   (hex)		Scout Security, Inc.
+500000-5FFFFF     (base 16)		Scout Security, Inc.
+				210 N Racine Ave, STE 2M
+				Chicago  IL  60607
+				US
+
+A0-19-B2   (hex)		MIS Industrie Systeme GmbH & Co. KG
+800000-8FFFFF     (base 16)		MIS Industrie Systeme GmbH & Co. KG
+				Lohwiese 7
+				Scheuring  Bavaria  86937
+				DE
+
+A0-19-B2   (hex)		Beijing Deephi Intelligent Technology Co., Ltd
+200000-2FFFFF     (base 16)		Beijing Deephi Intelligent Technology Co., Ltd
+				7F Building D, Tsinghua Tongfang High-Tech PlazaRoom 1706, Building D-East, Tsinghua Tongfang High-Tech Plaza Haidian District, Beijing, 100083, China
+				BEIJING  HAIDIAN  100083
+				CN
+
+2C-48-35   (hex)		Progress Rail Services, Inspection and Information Systems
+000000-0FFFFF     (base 16)		Progress Rail Services, Inspection and Information Systems
+				3801-1 South Selsa Road
+				Independence  null  64057
+				US
+
+2C-48-35   (hex)		Newtrax Technologies Inc
+300000-3FFFFF     (base 16)		Newtrax Technologies Inc
+				360 St-Jacques, Floor 8 
+				Montreal  Quebec  H2Y 1P5
+				CA
+
+2C-48-35   (hex)		Advanced Electronics Company Ltd
+100000-1FFFFF     (base 16)		Advanced Electronics Company Ltd
+				POBOX 90916, KKIA INDUSTRIAL ESTATE
+				RIYADH  CENTRAL  11623
+				SA
+
+8C-1C-DA   (hex)		Septentrio NV
+500000-5FFFFF     (base 16)		Septentrio NV
+				Interleuvenlaan 15i
+				Leuven    3001
+				BE
+
+8C-1C-DA   (hex)		CEOS Pty Ltd
+000000-0FFFFF     (base 16)		CEOS Pty Ltd
+				3/17 Burgundy Street,
+				Heidelberg  VIC  3084
+				AU
+
+3C-24-F0   (hex)		Sivat Technology Co.,Ltd.
+800000-8FFFFF     (base 16)		Sivat Technology Co.,Ltd.
+				Room 1602, Starbuilding 2, west Complex of ChangYing TianJie ChaoYang District
+				BeiJing  Beijing  100024
+				CN
+
+8C-1C-DA   (hex)		Riegl Laser Measurement Systems GmbH
+D00000-DFFFFF     (base 16)		Riegl Laser Measurement Systems GmbH
+				Riedenburgstraße 48
+				Horn  Niederösterreich  A-3580
+				AT
+
+8C-1C-DA   (hex)		K Technology Corporation
+700000-7FFFFF     (base 16)		K Technology Corporation
+				LIVMO Rising Bldg. 5F, 3-19-1
+				Shin-Yokohama, Kohoku-ku, Yokohama, Kanagawa    222-0033
+				JP
+
+0C-73-EB   (hex)		Tiinlab Acoustic Technology (Shenzhen) Co., Ltd.
+300000-3FFFFF     (base 16)		Tiinlab Acoustic Technology (Shenzhen) Co., Ltd.
+				Tianliao Building F14 East Block (New Materials Industrial Park), Xueyuan Road, Nanshan District, 
+				Shenzhen  Guangdong  518055
+				CN
+
+0C-73-EB   (hex)		D-Link （Shanghai）Limited Corp.
+D00000-DFFFFF     (base 16)		D-Link （Shanghai）Limited Corp.
+				Registered Address: Part J1, Floor 1, Building 2, No.115, Fute West First Road, China(Shanghai) Pilot Free Trade Zone
+				Shanghai    200000
+				CN
+
+0C-73-EB   (hex)		Dinkle Enterprise Co., Ltd.
+700000-7FFFFF     (base 16)		Dinkle Enterprise Co., Ltd.
+				No.19, Wuquan 2nd Rd., Wugu Dist.
+				New Taipei City    24890
+				TW
+
+0C-73-EB   (hex)		Synaccess Networks
+B00000-BFFFFF     (base 16)		Synaccess Networks
+				14425 N 79th St., Suite C
+				Scottsdale  AZ  85260
+				US
+
+0C-73-EB   (hex)		Deltapath, Inc.
+200000-2FFFFF     (base 16)		Deltapath, Inc.
+				2107 N 1ST ST, STE 660
+				San Jose  CA  95131
+				US
+
+3C-24-F0   (hex)		Inter Action Corporation
+600000-6FFFFF     (base 16)		Inter Action Corporation
+				14F,Yokohama-Kanazawa High-Tech Center,1-1,
+				Yokohama  Kanagawa  236-0004
+				JP
+
+3C-24-F0   (hex)		Siemens AG - Siemens Deutschland Mobility
+900000-9FFFFF     (base 16)		Siemens AG - Siemens Deutschland Mobility
+				Otto-Hahn-Ring 6
+				Munich    81379
+				DE
+
+0C-73-EB   (hex)		Taiwan Pulse Motion Co., Ltd.
+E00000-EFFFFF     (base 16)		Taiwan Pulse Motion Co., Ltd.
+				5F.-11, No. 210, Gongyequ 38th Rd.
+				Taichung City    40768
+				TW
+
+3C-24-F0   (hex)		COMATIS
+B00000-BFFFFF     (base 16)		COMATIS
+				8 rue Carnot
+				SAINT-CYR-L'ECOLE    78210
+				FR
+
+48-65-EE   (hex)		SmartDisplayer Technology Co., Ltd.
+800000-8FFFFF     (base 16)		SmartDisplayer Technology Co., Ltd.
+				No. 2-1, Gongjian Rd., Qidu Dist, Keelung City, 20647, Taiwan (R.O.C.)
+				Keelung    20647
+				TW
+
+48-0B-B2   (hex)		Annapurna labs
+600000-6FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+48-0B-B2   (hex)		Popit Oy
+B00000-BFFFFF     (base 16)		Popit Oy
+				Metsänneidonkuja 6
+				Espoo    02130
+				FI
+
+88-5F-E8   (hex)		Sonnet Labs Inc.
+300000-3FFFFF     (base 16)		Sonnet Labs Inc.
+				8 The Green Suite #6290
+				Dover  DE  19901
+				US
+
+88-5F-E8   (hex)		Hauch & Bach ApS
+500000-5FFFFF     (base 16)		Hauch & Bach ApS
+				Femstykket 6
+				Lynge    3540
+				DK
+
+88-5F-E8   (hex)		Sowee
+900000-9FFFFF     (base 16)		Sowee
+				4 place des Vosges
+				Courbevoie    92400
+				FR
+
+88-5F-E8   (hex)		Red Technologies, LLC.
+700000-7FFFFF     (base 16)		Red Technologies, LLC.
+				34 Parker
+				Irvine  CA  92618
+				US
+
+F0-41-C8   (hex)		Shenzhen Medica Technology Development Co., Ltd.
+200000-2FFFFF     (base 16)		Shenzhen Medica Technology Development Co., Ltd.
+				2F Building A, Tongfang Information Harbor, No.11, East Langshan Road, Nanshan District
+				Shenzhen    518000
+				CN
+
+F0-41-C8   (hex)		 Shanghai Think-Force Electronic Technology Co. Ltd
+C00000-CFFFFF     (base 16)		 Shanghai Think-Force Electronic Technology Co. Ltd
+				North ZhongShan Road, No. 3000, Room 2608
+				Shanghai    200000
+				CN
+
+F0-41-C8   (hex)		Shenzhen Umind Technology Co., Ltd.
+E00000-EFFFFF     (base 16)		Shenzhen Umind Technology Co., Ltd.
+				Add: D2-6A, TCL Science Park, 1001 ZhongshanYuan Road, Nanshan District
+				Shenzhen  Guangdong  581055
+				CN
+
+40-A3-6B   (hex)		SKS-Kinkel Elektronik GmbH
+400000-4FFFFF     (base 16)		SKS-Kinkel Elektronik GmbH
+				Im Industriegebiet 9
+				Hof    56472
+				DE
+
+30-1F-9A   (hex)		MICOMSOFT CO.,LTD.
+300000-3FFFFF     (base 16)		MICOMSOFT CO.,LTD.
+				6F,KEIHAN-YODOYABASHI BLDG., 3-2-25,KITAHAMA,CHUO-KU
+				osaka    541-0041
+				JP
+
+30-1F-9A   (hex)		HUNAN CHANGSHA HENGJIAN TECHNOLDGY DEVELPMENT CO.,LTD.
+A00000-AFFFFF     (base 16)		HUNAN CHANGSHA HENGJIAN TECHNOLDGY DEVELPMENT CO.,LTD.
+				Jiayun Road 209
+				Changsha  Hunan  410205
+				CN
+
+88-A9-A7   (hex)		Sieper Lüdenscheid GmbH & Co. KG
+600000-6FFFFF     (base 16)		Sieper Lüdenscheid GmbH & Co. KG
+				Schlittenbacher Straße 60
+				Lüdenscheid    58511
+				DE
+
+A4-DA-22   (hex)		SolidPro Technology Corporation
+800000-8FFFFF     (base 16)		SolidPro Technology Corporation
+				10F.-1, No.150, Jian 1st Rd.
+				Zhonghe Dist.  New Taipei City  23511
+				TW
+
+DC-E5-33   (hex)		SAN Engineering
+700000-7FFFFF     (base 16)		SAN Engineering
+				434-31 UTO Korea BD. 4F
+				Seongnam-si Jungwon-gu  Gyunggi-do  13230
+				KR
+
+DC-E5-33   (hex)		ShenZhen C&D Electronics CO.Ltd.
+300000-3FFFFF     (base 16)		ShenZhen C&D Electronics CO.Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park,  Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+C4-FF-BC   (hex)		KAGA ELECTRONICS CO.,LTD.
+B00000-BFFFFF     (base 16)		KAGA ELECTRONICS CO.,LTD.
+				20 Kandamatsunaga-cho
+				Chiyoda-ku  TOKYO  101-8627
+				JP
+
+9C-43-1E   (hex)		Wireless Environment, LLC
+400000-4FFFFF     (base 16)		Wireless Environment, LLC
+				600 Beta Drive Unit 100 Mayfield Village, OH 44143,US
+				Mayfield Village  OH  44143
+				US
+
+9C-43-1E   (hex)		Symfun Telecom Ltd
+100000-1FFFFF     (base 16)		Symfun Telecom Ltd
+				Floor 4 Building 11 Xi Qi Dian Jia Yuan
+				Beijing    100083
+				CN
+
+9C-43-1E   (hex)		Optris GmbH
+700000-7FFFFF     (base 16)		Optris GmbH
+				Ferdinand-Buisson-Str. 14
+				Berlin    13127
+				DE
+
+28-2C-02   (hex)		Shenzhen emb-star technology co. LTD
+200000-2FFFFF     (base 16)		Shenzhen emb-star technology co. LTD
+				2/f,building C,qinghu science park,qingxiang road,qinghu,longhua new district
+				shenzhen  Guangdong  518131
+				CN
+
+F8-B5-68   (hex)		Whizpace Pte. Ltd.
+B00000-BFFFFF     (base 16)		Whizpace Pte. Ltd.
+				77 Ayer Rajah Crescent, #02-30
+				Singapore    139954
+				SG
+
+F8-B5-68   (hex)		Maven Wireless AB
+800000-8FFFFF     (base 16)		Maven Wireless AB
+				Torshamnsgatan 35
+				KISTA    164 40
+				SE
+
+40-48-FD   (hex)		Cloud4Wi
+700000-7FFFFF     (base 16)		Cloud4Wi
+				22 Cleveland St
+				San Francisco  null  94103
+				US
+
+40-48-FD   (hex)		Ecotap B.V.
+C00000-CFFFFF     (base 16)		Ecotap B.V.
+				Industrieweg 4
+				Boxtel    5281RW
+				NL
+
+40-48-FD   (hex)		Swarco Technology ApS
+600000-6FFFFF     (base 16)		Swarco Technology ApS
+				C. F. Tietgens Boulevard 25
+				Odense SØ  Danmark  5220
+				DK
+
+40-48-FD   (hex)		MITHRAS Technology Co., LTD
+200000-2FFFFF     (base 16)		MITHRAS Technology Co., LTD
+				4F.-3, No. 880, Zhongzheng Rd., Zhonghe Dist., 
+				New Taipei    23586
+				TW
+
+38-73-EA   (hex)		Light Blue Optics Ltd.
+400000-4FFFFF     (base 16)		Light Blue Optics Ltd.
+				St John's Innovation Centre, Cowley Road
+				Cambridge  Cambridgeshire  CB40WS
+				GB
+
+EC-9F-0D   (hex)		CRRC QINGDAO SIFANG ROLLING STOCK RESEARCH INSTITUTE CO.,LTD
+B00000-BFFFFF     (base 16)		CRRC QINGDAO SIFANG ROLLING STOCK RESEARCH INSTITUTE CO.,LTD
+				No.231 Ruichang Road Qingdao City
+				Qingdao  Shandong  266000
+				CN
+
+38-73-EA   (hex)		ISTCONTROL
+500000-5FFFFF     (base 16)		ISTCONTROL
+				#1203, 37 Maebongsan-ro, Mapo-gu
+				Seoul    03909
+				KR
+
+EC-9F-0D   (hex)		flexlog GmbH
+A00000-AFFFFF     (base 16)		flexlog GmbH
+				Zur Gießerei 4
+				Karlsruhe    76227
+				DE
+
+34-D0-B8   (hex)		Skytech Creations Limited
+900000-9FFFFF     (base 16)		Skytech Creations Limited
+				Flat F, 23/F., Block 2, Kingswin Industrial Building, 32-50 Lei Muk Road
+				Kwai Chung    000000
+				HK
+
+34-D0-B8   (hex)		Glory Mark Electronic Ltd. Taiwan Branch (B.V.I.)
+C00000-CFFFFF     (base 16)		Glory Mark Electronic Ltd. Taiwan Branch (B.V.I.)
+				3F, No. 6, Lane 148, Li De St., Chungho Dist.
+				New Taipei City  Taiwan  235
+				TW
+
+34-D0-B8   (hex)		EQPlay Intelligent Technology(Kunshan) Co,Ltd.
+400000-4FFFFF     (base 16)		EQPlay Intelligent Technology(Kunshan) Co,Ltd.
+				No. 58 Xinnengyuan Road, Yushan Town, Kunshan
+				Kunshan  Jiangsu  215300
+				CN
+
+AC-1D-DF   (hex)		Sichuan Odot Automation System Co.,Ltd.
+800000-8FFFFF     (base 16)		Sichuan Odot Automation System Co.,Ltd.
+				No.6,Hongsheng Street
+				MianYang  SiChuan  621102
+				CN
+
+AC-1D-DF   (hex)		ConectaIP Tecnologia S.L.
+200000-2FFFFF     (base 16)		ConectaIP Tecnologia S.L.
+				Novell 58, 4.2
+				Barcelona    08014
+				ES
+
+34-D0-B8   (hex)		NTX Embedded
+D00000-DFFFFF     (base 16)		NTX Embedded
+				4275 Kellway Circle, Suite #106
+				Addison  TX  75001
+				US
+
+AC-1D-DF   (hex)		Solare Datensysteme GmbH
+900000-9FFFFF     (base 16)		Solare Datensysteme GmbH
+				Fuhrmannstraße 9
+				Geislingen-Binsdorf  Baden-Wuerttemberg  72351
+				DE
+
+CC-22-37   (hex)		Tolomatic, Inc.
+B00000-BFFFFF     (base 16)		Tolomatic, Inc.
+				3800 County Road 116
+				Hamel  MN  55340
+				US
+
+74-1A-E0   (hex)		ITS Partner (O.B.S) S.L.
+E00000-EFFFFF     (base 16)		ITS Partner (O.B.S) S.L.
+				Av. Corts Catalanes 9-11 
+				Sant Cugat del Valles  Barcelona  08173
+				ES
+
+CC-22-37   (hex)		MANUFACTURAS Y TRANSFORMADOS AB, S.L.
+E00000-EFFFFF     (base 16)		MANUFACTURAS Y TRANSFORMADOS AB, S.L.
+				SANT ANTONI DE BAIX, 110-112
+				IGUALADA  BARCELONA  08700
+				ES
+
+74-1A-E0   (hex)		BÄR Bahnsicherung AG
+700000-7FFFFF     (base 16)		BÄR Bahnsicherung AG
+				Luppmenstrasse 3
+				Fehraltorf     8320
+				CH
+
+74-1A-E0   (hex)		Broadcast Wireless Systems Ltd
+800000-8FFFFF     (base 16)		Broadcast Wireless Systems Ltd
+				Unit 9, Swanwick Business Centre, Bridge Road
+				Southampton  Hampshire  SO31 7GB
+				GB
+
+04-71-4B   (hex)		Shenzhen WayOS Technology Crop., Ltd.
+200000-2FFFFF     (base 16)		Shenzhen WayOS Technology Crop., Ltd.
+				F18, Yousong Business Building, Longhua New Districe, Shenzhen, China
+				Shenzhen  Guangdong  518109
+				CN
+
+CC-22-37   (hex)		Apeiron Data Systems
+200000-2FFFFF     (base 16)		Apeiron Data Systems
+				81 Blue Ravine Road
+				Folsom  CA  95630
+				US
+
+2C-27-9E   (hex)		Amaryllo International Inc.
+E00000-EFFFFF     (base 16)		Amaryllo International Inc.
+				4F, No. 159, Xianzheng 9th Rd.,
+				ZUHUBEI CITY  HSINCHU COUNTY  302
+				TW
+
+2C-27-9E   (hex)		octoScope, Inc.
+900000-9FFFFF     (base 16)		octoScope, Inc.
+				305 Foster Street, #104
+				Littleton  MA  01460
+				US
+
+2C-27-9E   (hex)		Institut Dr. Foerster GmbH & Co. KG
+800000-8FFFFF     (base 16)		Institut Dr. Foerster GmbH & Co. KG
+				In Laisen 70
+				Reutlingen    72766
+				DE
+
+CC-22-37   (hex)		SHENZHEN HOOENERGY TECHNOLOGY CO.,LTD
+D00000-DFFFFF     (base 16)		SHENZHEN HOOENERGY TECHNOLOGY CO.,LTD
+				NO.5C3-5,BLOCK CD,TIANZHANDASHA,FUTIAN DISTRICT
+				SHENZHEN    518000
+				CN
+
+2C-27-9E   (hex)		Shijiazhuang King Transportation Equipment Co.,Ltd
+400000-4FFFFF     (base 16)		Shijiazhuang King Transportation Equipment Co.,Ltd
+				No.255 Changjiang Road
+				Shijiazhuang  Hebei  050000
+				CN
+
+18-9B-A5   (hex)		Shenzhen Tong Tai Yi information Technology Co.,Ltd
+800000-8FFFFF     (base 16)		Shenzhen Tong Tai Yi information Technology Co.,Ltd
+				District C，3rd Floor，Bldg B1,Digital Tech Park,7th GaoXin South Blvd,Tech Park,NanShan，ShenZhen，China
+				shenzhen  guangdong  518102
+				CN
+
+84-39-BE   (hex)		ShenZhen Fudeyu Technology co.,Ltd
+300000-3FFFFF     (base 16)		ShenZhen Fudeyu Technology co.,Ltd
+				1st Floor, Building C, No.3 Jinyuan Road, Heao Strict, Henggang Street, Longgang Area, Shenzhen.
+				Shenzhen  Guangdong province  518115
+				CN
+
+18-9B-A5   (hex)		PHINETWORKS
+300000-3FFFFF     (base 16)		PHINETWORKS
+				412, Woorim E-Biz Center 2, Digital ro 33 gil
+				Seoul  Guro gu  08377
+				KR
+
+34-29-8F   (hex)		Nanjing Sandemarine Electric Co.,Ltd
+800000-8FFFFF     (base 16)		Nanjing Sandemarine Electric Co.,Ltd
+				Room 202, D Building, No.2 Dongda Road, Pukou District, Nanjing, Jiangsu Province, P.R.China
+				Nanjing  Jiangsu  210032
+				CN
+
+90-4E-91   (hex)		SKODA ELECTRIC a.s.
+D00000-DFFFFF     (base 16)		SKODA ELECTRIC a.s.
+				Tylova 1/57
+				Plzen    301 28
+				CZ
+
+18-9B-A5   (hex)		APANA Inc.
+900000-9FFFFF     (base 16)		APANA Inc.
+				4290 Pacific Hwy A
+				Bellingham  WA  98226
+				US
+
+90-4E-91   (hex)		Wrtnode technology Inc.
+400000-4FFFFF     (base 16)		Wrtnode technology Inc.
+				Dingsi Lu #18, Shahe, Changping Dist.
+				Beijing    102209
+				CN
+
+34-29-8F   (hex)		Schnick-Schnack-Systems GmbH
+B00000-BFFFFF     (base 16)		Schnick-Schnack-Systems GmbH
+				Mathias-Brüggen Str. 79
+				Koeln    50829 
+				DE
+
+34-29-8F   (hex)		Chengdu Meross Technology Co., Ltd.
+100000-1FFFFF     (base 16)		Chengdu Meross Technology Co., Ltd.
+				No. 25, Yizhou Avenue, Gaoxin
+				Chengdu  Sichuan  610000
+				CN
+
+34-29-8F   (hex)		Bellman & Symfon
+600000-6FFFFF     (base 16)		Bellman & Symfon
+				Södra Långebergsgatan 30
+				Västra Frölunda    42132
+				SE
+
+34-00-8A   (hex)		SHENZHEN WXL ELECTRONICS CO., LTD.
+E00000-EFFFFF     (base 16)		SHENZHEN WXL ELECTRONICS CO., LTD.
+				Internet Industry Base,Baoyuan Road,Bao'an District
+				Shenzhen    518100
+				CN
+
+34-00-8A   (hex)		Project Engineering srl
+B00000-BFFFFF     (base 16)		Project Engineering srl
+				Via Colle Ramole 11
+				Impruneta  FI  50023
+				IT
+
+34-29-8F   (hex)		Virtual Trunk Pte Ltd
+A00000-AFFFFF     (base 16)		Virtual Trunk Pte Ltd
+				12 Kallang Avenue 
+				Aperia #04-30    339511
+				SG
+
+34-29-8F   (hex)		Beijing Vorx Telecommunications Co., Ltd.
+300000-3FFFFF     (base 16)		Beijing Vorx Telecommunications Co., Ltd.
+				No.3 Minzhuang Rd, Haidian District
+				Beijing    100195
+				CN
+
+34-00-8A   (hex)		Angee Technologies Ltd.
+000000-0FFFFF     (base 16)		Angee Technologies Ltd.
+				City House, 3 Cranwood Street
+				London     EC1V 9PE
+				GB
+
+78-D8-00   (hex)		Shenzhen Envicool Information Technology Co., Ltd
+100000-1FFFFF     (base 16)		Shenzhen Envicool Information Technology Co., Ltd
+				Building 9, Hongxin Industrial Park, Guanlan, Longhua District, 
+				Shenzhen  Guangdong  518110
+				CN
+
+78-D8-00   (hex)		Shenzhen Scodeno Technology Co,. Ltd.
+300000-3FFFFF     (base 16)		Shenzhen Scodeno Technology Co,. Ltd.
+				New Longhua District，Guanlan rich Industrial Zone No. 22，Silicon Valley Power Digital Industrial Park A6 Building 2 floor
+				Shenzhen  Guangdong  518110
+				CN
+
+78-D8-00   (hex)		Shenzhen Chenzhuo Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Shenzhen Chenzhuo Technology Co., Ltd.
+				301,3/F,Longtangge,1183 Liuxian Avenue,Nanshan
+				Shenzhen  Guangdong  518055
+				CN
+
+78-D8-00   (hex)		Salunda Ltd
+800000-8FFFFF     (base 16)		Salunda Ltd
+				6 Avonbury Business Park, Howes Lane
+				Bicester  Oxon  Ox26 2UA
+				GB
+
+7C-BA-CC   (hex)		ALPHA TECHNOLOGIES, LLC
+E00000-EFFFFF     (base 16)		ALPHA TECHNOLOGIES, LLC
+				3030 GILCHRIST ROAD
+				AKRON  OH  44305
+				US
+
+7C-BA-CC   (hex)		Flying Loft Inc.
+C00000-CFFFFF     (base 16)		Flying Loft Inc.
+				Rm. 1602, 16th floor, JNK Digital Tower 111
+				Seoul    08390
+				KR
+
+F8-8A-3C   (hex)		Avateq Corp.
+E00000-EFFFFF     (base 16)		Avateq Corp.
+				3555 - 14th Ave., Unit 18
+				Markham  ON  L3R 0H5
+				CA
+
+40-A3-6B   (hex)		SFT Co., Ltd.
+800000-8FFFFF     (base 16)		SFT Co., Ltd.
+				2-7-11
+				Yamato-shi  Fukaminishi  242-0018
+				JP
+
+4C-65-A8   (hex)		High Infinity Germany
+E00000-EFFFFF     (base 16)		High Infinity Germany
+				Freiburgerstr. 9
+				Emmendingen  Deutschland  79312
+				DE
+
+4C-65-A8   (hex)		Nuviz Oy
+600000-6FFFFF     (base 16)		Nuviz Oy
+				Joensuunkatu 7
+				Salo    24100
+				FI
+
+F8-8A-3C   (hex)		FARA AS
+B00000-BFFFFF     (base 16)		FARA AS
+				Sjøgangen 4
+				Trondheim    NO-7010
+				NO
+
+F8-8A-3C   (hex)		ART SPA
+000000-0FFFFF     (base 16)		ART SPA
+				VOC.PISCHIELLO, 20
+				PASSIGNANO SUL TRASIMENO  PG  06065
+				IT
+
+8C-14-7D   (hex)		Nanjing bilian information Technology Co.,Ltd.
+400000-4FFFFF     (base 16)		Nanjing bilian information Technology Co.,Ltd.
+				Room 407,Building 1,No.8.Huayuan Road,Xuanwu District,Nanjing
+				Nanjing  Jiangsu   210000
+				CN
+
+8C-14-7D   (hex)		Bluemega Document & Print Services
+A00000-AFFFFF     (base 16)		Bluemega Document & Print Services
+				1 Allée de Londres - Batiment Les Bénares
+				Villejust  Essonne  91140
+				FR
+
+4C-65-A8   (hex)		Instant Byte, S.L.
+800000-8FFFFF     (base 16)		Instant Byte, S.L.
+				Calle Julio Palacios, 10 Naves 1-5, Pol. Ind. Ntra. Sra. de Butarque
+				Leganés  Madrid  28914
+				ES
+
+4C-65-A8   (hex)		Orica Europe Pty Ltd & Co KG
+200000-2FFFFF     (base 16)		Orica Europe Pty Ltd & Co KG
+				Muelheimer Strasse 5
+				Troisdorf  NRW  53840
+				DE
+
+A0-C5-F2   (hex)		UnaliWear, Inc.
+D00000-DFFFFF     (base 16)		UnaliWear, Inc.
+				3410 Cherry Lane
+				Austin  TX  78703
+				US
+
+A0-C5-F2   (hex)		Impulse Networks Pte Ltd
+900000-9FFFFF     (base 16)		Impulse Networks Pte Ltd
+				1 Raffles Place, #44-08 Raffles Place
+				Singapore    048616
+				SG
+
+50-FF-99   (hex)		IPC Global
+400000-4FFFFF     (base 16)		IPC Global
+				4 Wadhurst Drive
+				Boronia  Victoria  3155
+				AU
+
+A0-C5-F2   (hex)		Glooko inc
+C00000-CFFFFF     (base 16)		Glooko inc
+				899 W. Evelyn Avenue
+				Mountain View  CA  94041
+				US
+
+F0-23-B9   (hex)		Xiamen Jinhaode Electronic Co.,Ltd
+600000-6FFFFF     (base 16)		Xiamen Jinhaode Electronic Co.,Ltd
+				2003# Fuyu Build, Changqing Road 536, Siming
+				Xiamen  Fujian  361009
+				CN
+
+F0-23-B9   (hex)		Aquametro AG
+000000-0FFFFF     (base 16)		Aquametro AG
+				Ringstr. 75
+				Therwil    4106
+				CH
+
+F0-23-B9   (hex)		G3 TECHNOLOGIES< INC
+800000-8FFFFF     (base 16)		G3 TECHNOLOGIES< INC
+				2904 BACK ACRE CIRCLE, STE 107
+				MOUNT AIRY  MD  21771
+				US
+
+04-71-4B   (hex)		Gimso Mobile Ltd
+E00000-EFFFFF     (base 16)		Gimso Mobile Ltd
+				16 Hatidhar St
+				Raanana    4366518
+				IL
+
+F0-23-B9   (hex)		EZVIS LIMITED
+400000-4FFFFF     (base 16)		EZVIS LIMITED
+				FLAT/RM 1605A Ho KING COMMERCIAL CENTRE 2-16 FA YUEN STREET
+				HONGKONG    999077
+				HK
+
+60-D7-E3   (hex)		Avalun
+000000-0FFFFF     (base 16)		Avalun
+				7 parvis louis neel
+				grenoble    38000
+				FR
+
+60-D7-E3   (hex)		Wilderness Labs Inc.
+A00000-AFFFFF     (base 16)		Wilderness Labs Inc.
+				700 Edgewater Blvd., #108
+				Foster City  CA  94404
+				US
+
+60-D7-E3   (hex)		Revol Technologies inc
+500000-5FFFFF     (base 16)		Revol Technologies inc
+				5336 Queen Mary   Cote-St-Lu, APT#5
+				montreal  QC  H3X1T8
+				CA
+
+60-D7-E3   (hex)		SKS Automaatio oy
+300000-3FFFFF     (base 16)		SKS Automaatio oy
+				Martinkylantie 50
+				Vantaa    01720
+				FI
+
+08-ED-02   (hex)		D2SLink Systems
+000000-0FFFFF     (base 16)		D2SLink Systems
+				47 Rue Marcel Dassault
+				Boulogne Billancourt    92514
+				FR
+
+08-ED-02   (hex)		Imperx, Inc
+100000-1FFFFF     (base 16)		Imperx, Inc
+				6421 Congress Avenue
+				Boca Raton  FL  33487
+				US
+
+98-AA-FC   (hex)		Comarch S.A. 
+E00000-EFFFFF     (base 16)		Comarch S.A. 
+				Al. Jana Pawla II 39A
+				Krakow  Poland  31-864
+				PL
+
+98-AA-FC   (hex)		BEAM Authentic
+900000-9FFFFF     (base 16)		BEAM Authentic
+				25 Tamalpais Avenue, Suite C
+				San Anselmo  CA  94960
+				US
+
+98-AA-FC   (hex)		dots Inc.
+C00000-CFFFFF     (base 16)		dots Inc.
+				10F WiL Office, Izumi Garden Tower, 1-6-1 Roppongi, Minatoku
+				Tokyo  Tokyo  1066010
+				JP
+
+14-4F-D7   (hex)		D&S Cable Industries (HK) Limited
+C00000-CFFFFF     (base 16)		D&S Cable Industries (HK) Limited
+				11th Floor,AXA Centre, 151 Gloucester Road Hong Kong
+				HONGKONG    999077
+				CN
+
+14-4F-D7   (hex)		FedEx Services OTI
+200000-2FFFFF     (base 16)		FedEx Services OTI
+				920 W Poplar Ave, Suite 101
+				Collierville  TN  38017
+				US
+
+14-4F-D7   (hex)		Annapurna labs
+000000-0FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+F8-02-78   (hex)		BETTINI SRL
+700000-7FFFFF     (base 16)		BETTINI SRL
+				VIA CESARE BATTISTI 22
+				CESANO MADERNO  MILAN  20031
+				IT
+
+14-4F-D7   (hex)		NPort Networks Inc.,
+800000-8FFFFF     (base 16)		NPort Networks Inc.,
+				9F No. 242 BaoAi street, ShuLin District,
+				New Taipei  Taiwan  23845
+				TW
+
+14-4F-D7   (hex)		Zehnder Group AG
+100000-1FFFFF     (base 16)		Zehnder Group AG
+				Moortalstrasse 1
+				Gränichen    CH-5722 
+				CH
+
+A4-11-63   (hex)		Dspread Technology (Beijing) Inc.
+800000-8FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+A4-11-63   (hex)		Pax
+300000-3FFFFF     (base 16)		Pax
+				4 cresswell gardens
+				london  England  sw5 0bj
+				GB
+
+1C-A0-D3   (hex)		Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
+500000-5FFFFF     (base 16)		Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
+				Unit C&D, No.201 WuXiang, Export Processing Zone A No.200Suhong Road SIP
+				Suzhou  JiangSu  215021
+				CN
+
+1C-A0-D3   (hex)		NPO TELECOM JSC
+400000-4FFFFF     (base 16)		NPO TELECOM JSC
+				31, Votkinskoe shosse str.
+				Izhevsk  Udmurtia  426039
+				RU
+
+1C-A0-D3   (hex)		Intertecno SRL NISUTA
+600000-6FFFFF     (base 16)		Intertecno SRL NISUTA
+				Av. Belgrano 1209
+				Capital Federal  Buenos Aires  1093
+				AR
+
+1C-A0-D3   (hex)		SAVELEC
+300000-3FFFFF     (base 16)		SAVELEC
+				rue de la houille blanche
+				HERMILLON  SAVOIE  73300
+				FR
+
+40-F3-85   (hex)		KATO ENGINEERING INC.
+500000-5FFFFF     (base 16)		KATO ENGINEERING INC.
+				2075 HOWARD DRIVE WEST
+				NORTH MANKATO   MN  56003
+				US
+
+40-F3-85   (hex)		BBB Inc.
+E00000-EFFFFF     (base 16)		BBB Inc.
+				28, Yatap-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13522
+				KR
+
+8C-C8-F4   (hex)		ITECH Electronic Co.,ltd.
+400000-4FFFFF     (base 16)		ITECH Electronic Co.,ltd.
+				No.108, XiShanqiao Nanlu
+				Nanjing  Jiangsu  210039
+				CN
+
+34-04-9E   (hex)		ND SatCom GmbH
+E00000-EFFFFF     (base 16)		ND SatCom GmbH
+				Graf-von-Soden-Straße
+				Immenstaad  Baden-Württemberg  88090
+				DE
+
+34-04-9E   (hex)		Seeiner Technology Co.,LTD
+500000-5FFFFF     (base 16)		Seeiner Technology Co.,LTD
+				floor 6,Building 14,No.1008 Xiangwang street,Hangzhou City,Zhejiang province
+				hangzhou    311121
+				CN
+
+34-04-9E   (hex)		Nanjing Mythware Information Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Nanjing Mythware Information Technology Co., Ltd.
+				Level 13, Unit 3, Zijin Entrepreneur R&D Centre, No.89 Shengli Road, Jiangning District
+				Nanjing  Jiangsu  211106
+				CN
+
+A4-58-0F   (hex)		Finetree Communications Inc
+E00000-EFFFFF     (base 16)		Finetree Communications Inc
+				#406, Shinyatap Prugiocity2, Yanghyunro 405
+				Seungnamsi    13439
+				KR
+
+7C-CB-E2   (hex)		Easy Broadband Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Easy Broadband Technology Co., Ltd.
+				3rd Floor, Jinyanlong Building, Xisanqi Bridge, Haidian District, Beijing 100096, China
+				Beijing  Beijing  100096
+				CN
+
+7C-CB-E2   (hex)		Hangzhou Kaicom Communication Co.,Ltd
+700000-7FFFFF     (base 16)		Hangzhou Kaicom Communication Co.,Ltd
+				12th Floor,Block B CONBA Building,No.288 jiangnan Avenue , Binjiang District, Hangzhou, China
+				Hangzhou  Zhejiang  310051
+				CN
+
+50-0B-91   (hex)		Shenzhen Lucky Sonics Co .,Ltd
+D00000-DFFFFF     (base 16)		Shenzhen Lucky Sonics Co .,Ltd
+				201A, BLOCK 10 ROW 1, SHANGTUN VILLAGE HESHUIKOU COMMUNITY,GO NGMING STREET, GUANGMING DISTRICT
+				SHENZHEN  GUANGDONG  518107
+				CN
+
+A4-58-0F   (hex)		CoAsia Microelectronics Corp.
+500000-5FFFFF     (base 16)		CoAsia Microelectronics Corp.
+				13F, No. 3-2, Park St. Nangang District
+				Taipei    11503
+				TW
+
+50-0B-91   (hex)		Shenzhen zhong ju  Fiber optical Co.Ltd
+E00000-EFFFFF     (base 16)		Shenzhen zhong ju  Fiber optical Co.Ltd
+				3t Floor Build A .jin he Rui park .guan lan.
+				Shen zhen  Guang dong  518000
+				CN
+
+A4-58-0F   (hex)		Shenzhen City billion Leiden science and Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Shenzhen City billion Leiden science and Technology Co., Ltd.
+				Shenzhen City, Baoan District Songgang Street Community Goodrich Tantou Industrial Park plant building 2
+				Shenzhen City  Guangdong Province  518000
+				CN
+
+1C-C0-E1   (hex)		Videri Inc.
+400000-4FFFFF     (base 16)		Videri Inc.
+				541 West 23rd Street
+				New York  NY  10011
+				US
+
+50-0B-91   (hex)		Diamond Traffic Products, Inc
+C00000-CFFFFF     (base 16)		Diamond Traffic Products, Inc
+				76433 Alder Street
+				Oakridge  OR  97463
+				US
+
+7C-CB-E2   (hex)		Heyuan Yongyida Technology Holdings Co.,Ltd.
+000000-0FFFFF     (base 16)		Heyuan Yongyida Technology Holdings Co.,Ltd.
+				Xin Yong Yi Science Park, GaoXin 3rd Road, High-tech Zone
+				Heyuan  Guangdong  517000
+				CN
+
+7C-CB-E2   (hex)		Astrum Technologies CC
+300000-3FFFFF     (base 16)		Astrum Technologies CC
+				Unit 49, Sandton View Office Park, 1 Conduit Str, Lyme Park
+				Johannesburg  Gauteng  2060
+				ZA
+
+24-4E-7B   (hex)		Tekelek Europe Ltd
+000000-0FFFFF     (base 16)		Tekelek Europe Ltd
+				Unit 118 Shannon Free zone
+				Shannon  Co. Clare  
+				IE
+
+7C-CB-E2   (hex)		CeoTronics AG
+100000-1FFFFF     (base 16)		CeoTronics AG
+				Adam-Opel-Str. 6
+				Roedermark  Hessen  63322
+				DE
+
+24-4E-7B   (hex)		Shenzhen AWT science &  technology limited
+A00000-AFFFFF     (base 16)		Shenzhen AWT science &  technology limited
+				22E of Huari Building,Nanhua Garden,South Of Huaqiang Road,Futian Area
+				Shenzhen    518057
+				CN
+
+4C-E1-73   (hex)		DAIKOKU DENKI CO.,LTD.
+600000-6FFFFF     (base 16)		DAIKOKU DENKI CO.,LTD.
+				1-43-5 Nagono Nakamura-ku
+				Nagoya  Aichi  450-8640
+				JP
+
+48-65-EE   (hex)		EnBW Energie Baden-Württemberg AG
+B00000-BFFFFF     (base 16)		EnBW Energie Baden-Württemberg AG
+				Durlacher Allee 93
+				Karlsruhe    76131
+				DE
+
+48-65-EE   (hex)		Gopod Group Limited
+100000-1FFFFF     (base 16)		Gopod Group Limited
+				5-6/f,building 8,Lianjian Industrial Park,Longhua
+				Shenzhen    518109
+				CN
+
+24-4E-7B   (hex)		UniMAT Automation Technology Co., Ltd.
+900000-9FFFFF     (base 16)		UniMAT Automation Technology Co., Ltd.
+				 5/F, Building 15&16, Wisdomland Business Park, Road 2 Nantou port, Nanshan District
+				Shenzhen   Guangdong   518052
+				CN
+
+48-65-EE   (hex)		Winn Technology Co.,Ltd
+D00000-DFFFFF     (base 16)		Winn Technology Co.,Ltd
+				Winn Tech Industrial Park Xianghe Rd.Xinmin Area，Chang an，Dongguan City Guangdong Province，China.
+				Dongguan  Guangdong  523879
+				CN
+
+48-65-EE   (hex)		Data Technology Inc.
+300000-3FFFFF     (base 16)		Data Technology Inc.
+				Tachikawa Nishiki-cho Bldg 8F, 1-8-7 Nishiki-cho
+				Tachikawa-shi  Tokyo  190-0022
+				JP
+
+4C-E1-73   (hex)		Nanjing Tongke Technology Development Co., LTD
+800000-8FFFFF     (base 16)		Nanjing Tongke Technology Development Co., LTD
+				8 Taishan Road jianye
+				Nanjing    210000
+				CN
+
+1C-C0-E1   (hex)		HANGZHOU SOFTEL OPTIC CO., LTD
+300000-3FFFFF     (base 16)		HANGZHOU SOFTEL OPTIC CO., LTD
+				101 BINKANG ROAD, BINJIANG DISTRICT
+				HANGZHOU  ZHEJIANG  310052
+				CN
+
+4C-E1-73   (hex)		Huizhou Dehong Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Huizhou Dehong Technology Co., Ltd.
+				Dongxing
+				Huizhou  Guangdong  516210
+				CN
+
+4C-E1-73   (hex)		Shanghai Ehong Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Shanghai Ehong Technology Co.,Ltd
+				RM1505,blk 1st,No.833 South Hongmei Road Minhang Dis
+				Shanghai   shanghai  200237
+				CN
+
+AC-64-DD   (hex)		DIGIBIRD TECHNOLOGY CO., LTD.
+E00000-EFFFFF     (base 16)		DIGIBIRD TECHNOLOGY CO., LTD.
+				LONGGUAN BUSINESS CENTER, SUITE 501. HUILONGGUAN W., ST., CHANGPING
+				BEIJING  BEIJING  102208
+				CN
+
+1C-C0-E1   (hex)		SECHERON SA
+A00000-AFFFFF     (base 16)		SECHERON SA
+				Rue du Pre Bouvier 25
+				SATIGNY  GENEVA  1242
+				CH
+
+4C-E1-73   (hex)		NewVastek
+500000-5FFFFF     (base 16)		NewVastek
+				5F., No.65, Shitan Rd.
+				Taipei City  Neihu Dist.  11469
+				TW
+
+38-3A-21   (hex)		Chengdu Krosslan Technology Inc.
+700000-7FFFFF     (base 16)		Chengdu Krosslan Technology Inc.
+				4F,Tower B, Rennan Mansion, No.5 Section 3, 2nd Ring Road South
+				Chengdu  Sichuan  610041
+				CN
+
+38-3A-21   (hex)		Skylark Wireless LLC
+900000-9FFFFF     (base 16)		Skylark Wireless LLC
+				1953 Richmond Ave.
+				Houston  TX  77098
+				US
+
+38-3A-21   (hex)		SDNware technology co.,LTD
+E00000-EFFFFF     (base 16)		SDNware technology co.,LTD
+				166 Renai Road
+				Suzhou    215000
+				CN
+
+AC-64-DD   (hex)		infypower Co., Ltd
+300000-3FFFFF     (base 16)		infypower Co., Ltd
+				-101, No. 3009, Shahexi Road, Nanshan District,
+				shenzhen  guangdong  518055
+				CN
+
+38-3A-21   (hex)		Pactron
+B00000-BFFFFF     (base 16)		Pactron
+				3000 Patrick Henry 
+				Santa Clara   CA  95054
+				US
+
+F8-1D-78   (hex)		ADTECHNO Inc.
+100000-1FFFFF     (base 16)		ADTECHNO Inc.
+				2-3-10 Kudanminami, Chiyoda-Ku
+				Tokyo    102-0074
+				JP
+
+70-F8-E7   (hex)		Flexim Security Oy
+600000-6FFFFF     (base 16)		Flexim Security Oy
+				P.O.Box 700
+				ESPOO  Southern Finland  02131
+				FI
+
+70-F8-E7   (hex)		Kontech Electronics Co., Ltd
+900000-9FFFFF     (base 16)		Kontech Electronics Co., Ltd
+				Longhua,Dalang,Langkou Industry Park
+				shenzhen  Guangdong  518109
+				CN
+
+70-F8-E7   (hex)		SHENZHEN Xin JiuNing Electronics Co Ltd
+000000-0FFFFF     (base 16)		SHENZHEN Xin JiuNing Electronics Co Ltd
+				Floor 2, Building 11, WaiMao Industrial Park, Shiyan Subdistrict , Baoan District, Shenzhen
+				SHENZHEN  GUANGDONG  518108
+				CN
+
+70-F8-E7   (hex)		Eclipse Security
+800000-8FFFFF     (base 16)		Eclipse Security
+				3900 N. 29th Ave
+				Hollywood  FL  33020
+				US
+
+F8-1D-78   (hex)		SHENZHUOYUE TECHNOLOGY.,LTD
+C00000-CFFFFF     (base 16)		SHENZHUOYUE TECHNOLOGY.,LTD
+				Room 815/816 , ShangMei Times Building, No. 57  LongGuan East Road,Long Hua New District,
+				Shenzhen  Guangdong  518000
+				CN
+
+70-F8-E7   (hex)		System Level Solutions (India) Pvt.
+100000-1FFFFF     (base 16)		System Level Solutions (India) Pvt.
+				32, D4, Phase-1, GIDC, V U Nagar
+				Anand  Gujarat  388121
+				IN
+
+84-E0-F4   (hex)		iSolution Technologies Co.,Ltd.
+A00000-AFFFFF     (base 16)		iSolution Technologies Co.,Ltd.
+				5F,Bldg #6, Zhongguan Honghualing Industrial South Park
+				Shenzhen  Guangdong  518055
+				CN
+
+84-E0-F4   (hex)		Dantherm
+700000-7FFFFF     (base 16)		Dantherm
+				Marienlystvej 65 
+				Skive    7800
+				DK
+
+84-E0-F4   (hex)		Liaoning IK'SONYA Science and Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Liaoning IK'SONYA Science and Technology Co., Ltd.
+				Floor9, Building E01, No.861-1 Shangshengoucun Dongling District Shenyang City Liaoning Province
+				Shenyang    110000
+				CN
+
+84-E0-F4   (hex)		MedicusTek Inc.
+100000-1FFFFF     (base 16)		MedicusTek Inc.
+				9F No.3-2 Yuanqu St. Nangang Dist.
+				Taipei    11503
+				TW
+
+84-E0-F4   (hex)		RAY Co.,LTD
+800000-8FFFFF     (base 16)		RAY Co.,LTD
+				3~4F, 332-7, Samsung1-ro
+				Hwaseong-si  Gyeonggi-do  445-330
+				KR
+
+C0-D3-91   (hex)		XENA SECURITY LIMITED
+800000-8FFFFF     (base 16)		XENA SECURITY LIMITED
+				ROOM 1210, WANG CHEONG ENTERPRISE CENTRE, 65 CHAI WAN KOK STREET, TSUEN WAN, N.T.
+				HONG KONG  Select State  000000
+				HK
+
+C0-D3-91   (hex)		Hofon Automation Co.,Ltd
+200000-2FFFFF     (base 16)		Hofon Automation Co.,Ltd
+				8th floor,3rd building of Lierda,No1328 Wenyi Road
+				Hangzhou  Zhejiang  310000
+				CN
+
+98-6D-35   (hex)		blossom communications corp.
+400000-4FFFFF     (base 16)		blossom communications corp.
+				Floor 19, No. 104, Sec. 1, Sin Tai Wu Road, Xi Zhi District
+				New Taipei City    221
+				TW
+
+C0-D3-91   (hex)		IXON B.V.
+300000-3FFFFF     (base 16)		IXON B.V.
+				Vierlingsbeekseweg 52A
+				Overloon  Noord-Brabant  5825 AX
+				NL
+
+58-E8-76   (hex)		Chengdu Vision-Zenith Technology Co.,Ltd
+800000-8FFFFF     (base 16)		Chengdu Vision-Zenith Technology Co.,Ltd
+				3rd Floor,Unit 1 Building 6,No.88 of Tianchen Road West Science Park, Hi-tech zone west
+				Chengdu  Sichuan  610000
+				CN
+
+58-E8-76   (hex)		SHENZHEN DIGISSIN TECHNOLOGY
+A00000-AFFFFF     (base 16)		SHENZHEN DIGISSIN TECHNOLOGY
+				Room 315, Zixinda Building, No. 1053, BAOYUAN Road, Xixiang, Baoan District,
+				SHENZHEN  GUANGDONG  518102
+				CN
+
+58-E8-76   (hex)		KUSTOM SIGNALS INC
+C00000-CFFFFF     (base 16)		KUSTOM SIGNALS INC
+				1010 W CHESTNUT
+				CHANUTE  KS  66720
+				US
+
+C0-D3-91   (hex)		REGULUS CO.,LTD.
+D00000-DFFFFF     (base 16)		REGULUS CO.,LTD.
+				Yotsuya  Orchid Bldg.  23-3 Daikyo-cho
+				 Shinjuku-ku  Tokyo  160-0015
+				JP
+
+F0-AC-D7   (hex)		Sercomm Corporation.
+400000-4FFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+F0-AC-D7   (hex)		Hanju Network Technologies Co.
+700000-7FFFFF     (base 16)		Hanju Network Technologies Co.
+				lvdilanhai building 2303, zhangba street
+				Xi'an  ShaanXi  710065
+				CN
+
+F0-AC-D7   (hex)		Telefonix Incorporated
+800000-8FFFFF     (base 16)		Telefonix Incorporated
+				2340 Ernie Krueger Circle
+				Waukegan  null  60087
+				US
+
+F0-AC-D7   (hex)		PAVO TASARIM URETIM TICARET A.S.
+500000-5FFFFF     (base 16)		PAVO TASARIM URETIM TICARET A.S.
+				Teknopark Istanbul Ar-Ge Binalari 1.Blok Pendik
+				Istanbul  Select State  34349
+				TR
+
+F0-AC-D7   (hex)		Suzhou Pairlink Network Technology
+600000-6FFFFF     (base 16)		Suzhou Pairlink Network Technology
+				Room304, Building 4, No.209, Zhu Yuan Road, Suzhou new district
+				Suzhou  Jiangsu  215011
+				CN
+
+28-36-38   (hex)		Knowles Electronics LLC
+000000-0FFFFF     (base 16)		Knowles Electronics LLC
+				1151 Maplewood Drive
+				Itasca  IL  60143
+				US
+
+28-36-38   (hex)		APPEAK Technology System Co.Ltd.
+D00000-DFFFFF     (base 16)		APPEAK Technology System Co.Ltd.
+				12F.,No176,Sec.2 Beixin Rd. 
+				Xindian Dist  New Taipei City  231
+				TW
+
+28-36-38   (hex)		Dspread Technology (Beijing) Inc.
+400000-4FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+28-36-38   (hex)		Bluekey Pty Ltd
+A00000-AFFFFF     (base 16)		Bluekey Pty Ltd
+				6/28 Newheath Dr 
+				Arundel  Queensland  4214
+				AU
+
+8C-19-2D   (hex)		You Zhengcheng co.,ltd
+C00000-CFFFFF     (base 16)		You Zhengcheng co.,ltd
+				Baoan District 45 District
+				shenzhen  guangdong  518133
+				CN
+
+8C-19-2D   (hex)		Charmlink Tech(HK) Co.,Limited 
+400000-4FFFFF     (base 16)		Charmlink Tech(HK) Co.,Limited 
+				UNIT 04,7/F BRIGHT WAY TOWER NO.33 MONG KOK RD KL
+				HONGKONG    999077
+				HK
+
+8C-19-2D   (hex)		SRETT
+700000-7FFFFF     (base 16)		SRETT
+				305 Avenue Le jour se lève
+				Boulogne-Billancourt    92100
+				FR
+
+8C-19-2D   (hex)		Abside Networks, Inc.
+B00000-BFFFFF     (base 16)		Abside Networks, Inc.
+				16 heritage road
+				Acton  MA  01720
+				US
+
+8C-19-2D   (hex)		ViaWear, Inc.
+900000-9FFFFF     (base 16)		ViaWear, Inc.
+				801 Key Route Blvd
+				Albany  CA  94706
+				US
+
+8C-19-2D   (hex)		Shenzhen Cylan Technology Co.,Ltd
+800000-8FFFFF     (base 16)		Shenzhen Cylan Technology Co.,Ltd
+				Room 605.607.608,Minning Business Building,Caitian North Road,Futian District,Shenzhen
+				Shenzhen  Guangdong  518036
+				CN
+
+CC-D3-1E   (hex)		Siemens AG, MO MLT BG
+900000-9FFFFF     (base 16)		Siemens AG, MO MLT BG
+				Eggenbergerstr. 31
+				Graz  Styria  8020
+				AT
+
+D0-D9-4F   (hex)		DUKSANMECASYS CO., LTD.
+D00000-DFFFFF     (base 16)		DUKSANMECASYS CO., LTD.
+				7F The 6th Byucksan Digital Valley 481-4 Gasan-Dong Geumcheon-Gu 
+				SEOUL    08501
+				KR
+
+C4-7C-8D   (hex)		GETEMED Medizin- und Informationstechnik AG
+800000-8FFFFF     (base 16)		GETEMED Medizin- und Informationstechnik AG
+				Oderstrasse 77
+				Teltow  Brandenburg  14513
+				DE
+
+C4-7C-8D   (hex)		GC AUTOMATION CO,LTD
+B00000-BFFFFF     (base 16)		GC AUTOMATION CO,LTD
+				SECOND FLOOR,BLD 10,GRAIN INDUSTRIAL PARK,NO.299  GUANPING ROAD,GUANLAN NEW DISTRICT,SHENZHEN CITY,CHINA
+				Shenzhen    518000
+				CN
+
+C4-7C-8D   (hex)		Silvus technologies inc
+A00000-AFFFFF     (base 16)		Silvus technologies inc
+				10990 Wilshire blvd. suite 1500
+				Los Angeles   CA  90024
+				US
+
+C4-7C-8D   (hex)		ROBOSTAR
+400000-4FFFFF     (base 16)		ROBOSTAR
+				700, Suin-ro, Sangnok-gu
+				Ansan-si  Kyŏnggi-do  426-220
+				KR
+
+68-91-D0   (hex)		Outstanding Technology Co., Ltd.
+E00000-EFFFFF     (base 16)		Outstanding Technology Co., Ltd.
+				9th floor, New Yaesu bldg., 3-5-12 nihon-bashi
+				Chuo-ku  Tokyo  103-0027
+				JP
+
+C4-7C-8D   (hex)		Watec Co., Ltd.
+300000-3FFFFF     (base 16)		Watec Co., Ltd.
+				254-2 Nihonkoku, Daihoji
+				Tsuruoka-shi  Yamagata  997-0017
+				JP
+
+68-91-D0   (hex)		Multi Alarm Zrt.
+100000-1FFFFF     (base 16)		Multi Alarm Zrt.
+				Basamalom u. 33.
+				Pécs  Baranya  7630
+				HU
+
+68-91-D0   (hex)		QUANTEX
+900000-9FFFFF     (base 16)		QUANTEX
+				010000, Republic of Kazakhstan, Astana, Dostyk st., 5/2, VP 3
+				Astana    010000
+				KZ
+
+E0-B6-F5   (hex)		POMCube Inc. 
+600000-6FFFFF     (base 16)		POMCube Inc. 
+				19363 Brockton Ln
+				Saratoga  CA  95070
+				US
+
+E0-B6-F5   (hex)		Huizhou GISUN Industrial CO. LTD
+300000-3FFFFF     (base 16)		Huizhou GISUN Industrial CO. LTD
+				Gisun Industry Park,Dong Ao Village, Sha Tian Town,HuiYang District ,Huizhou China
+				Huizhou  Guangdong  518114
+				CN
+
+68-91-D0   (hex)		NIPK Electron Co.
+500000-5FFFFF     (base 16)		NIPK Electron Co.
+				Leningradskaya str. 52a. lit.A, pos. Pesochny
+				Saint-Petersburg    197758
+				RU
+
+E0-B6-F5   (hex)		funktel GmbH
+C00000-CFFFFF     (base 16)		funktel GmbH
+				Windmühlenbergstr. 20-22
+				Salzgitter    38259
+				DE
+
+50-FF-99   (hex)		 SHENZHEN KINGVT ELECTRONICS CO.,LTD
+200000-2FFFFF     (base 16)		 SHENZHEN KINGVT ELECTRONICS CO.,LTD
+				 8/F,NO.100,LANGKOU INDUSTRLAL PARK,DALANG STREET,NEW LONGHUA DISTRCT,SHENZHEN,R.R.C
+				Shenzhen    518000
+				CN
+
+E0-B6-F5   (hex)		Yuneec International（China）Co.，Ltd
+800000-8FFFFF     (base 16)		Yuneec International（China）Co.，Ltd
+				388 Zhengwei Road,JinXi Town,Kunshan,Jiangsu,China
+				Kunshan  Jiangsu  215300
+				CN
+
+98-6D-35   (hex)		Zhejiang Hanshow Technology Co., Ltd.
+700000-7FFFFF     (base 16)		Zhejiang Hanshow Technology Co., Ltd.
+				Floor 18, Building C, Ruipu Plaza, No.15,Hongjunying South Rd, Beijing, China
+				beijing  beijing  100012
+				CN
+
+50-FF-99   (hex)		Honeywell International
+700000-7FFFFF     (base 16)		Honeywell International
+				13475 Danielson St # 100
+				Poway  CA  92064
+				US
+
+7C-47-7C   (hex)		Shenzhen Eunicum Electric Co.,Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Eunicum Electric Co.,Ltd.
+				3/F Building 11, Lishan Industrial Park, Yueliangwan,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+7C-47-7C   (hex)		Photosynth Inc.
+100000-1FFFFF     (base 16)		Photosynth Inc.
+				5-11-1 Sumitomo Seimei Gotanda Bldg. 3F
+				Osaki, Shinagawa-ku  Tokyo  141-0032
+				JP
+
+7C-47-7C   (hex)		Zerosystem LTD.Co
+600000-6FFFFF     (base 16)		Zerosystem LTD.Co
+				#905 Hansol Technotown 455 Gyeongsu-Daero
+				Gunpo  Gyeonggido  435-831 
+				KR
+
+98-6D-35   (hex)		Vitronic Dr.-Ing. Stein Bildverarbeitungssysteme GmbH
+600000-6FFFFF     (base 16)		Vitronic Dr.-Ing. Stein Bildverarbeitungssysteme GmbH
+				Hasengartenstraße 14
+				Wiesbaden  Hessen  65189
+				DE
+
+98-6D-35   (hex)		Praesideo B.V.
+D00000-DFFFFF     (base 16)		Praesideo B.V.
+				P.O. Box 24008
+				Utrecht    3502 MA
+				NL
+
+7C-47-7C   (hex)		BungBungame Inc
+000000-0FFFFF     (base 16)		BungBungame Inc
+				15F., No.19-11, Sanchong Rd., Nangang Dist., Taipei City 115, Taiwan (R.O.C.)
+				Taipei    100
+				TW
+
+7C-47-7C   (hex)		Midwest Microwave Solutions
+500000-5FFFFF     (base 16)		Midwest Microwave Solutions
+				2000 Progress Drive
+				Hiawatha  IA  52233
+				US
+
+5C-F2-86   (hex)		Daisen Electronic Industrial Co., Ltd.
+E00000-EFFFFF     (base 16)		Daisen Electronic Industrial Co., Ltd.
+				4-9-24 Nipponbashi, Naniwa-ku
+				Osaka    556-0005
+				JP
+
+5C-F2-86   (hex)		Unfors Raysafe AB
+A00000-AFFFFF     (base 16)		Unfors Raysafe AB
+				Uggledalsvagen 29
+				Billdal    42740
+				SE
+
+38-FD-FE   (hex)		New Telecom Solutions LLC
+400000-4FFFFF     (base 16)		New Telecom Solutions LLC
+				Kedrova 15
+				Moscow  Moscow  117036
+				RU
+
+38-FD-FE   (hex)		CaptiveAire Systems Inc.
+500000-5FFFFF     (base 16)		CaptiveAire Systems Inc.
+				4641 Paragon Park
+				Raleigh  NC  27616
+				US
+
+78-CA-83   (hex)		Elanview Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Elanview Technology Co.,Ltd
+				NO.7001,Zhongchun Road,Minghang District, Shanghai
+				shanghai  shanghai  201101
+				CN
+
+78-CA-83   (hex)		Beijing CarePulse Electronic Technology 
+700000-7FFFFF     (base 16)		Beijing CarePulse Electronic Technology 
+				#6302 Hua Yuan Shang Wo Hui Guan, Hua Yuan Dong Road 30, Hai Dian District
+				BEIJING    100191
+				CN
+
+38-B8-EB   (hex)		CeeNex Inc
+800000-8FFFFF     (base 16)		CeeNex Inc
+				1200 Aerowood Drive  Unit 30
+				Mississauga, ON  Canada L4W 2S7    L4W 2S7
+				CA
+
+78-CA-83   (hex)		IHM
+800000-8FFFFF     (base 16)		IHM
+				Vandtaarnsvej 87
+				Soborg  Copenhagen  2860
+				DK
+
+78-CA-83   (hex)		Zhejiang Science Electronic Tech Co., Ltd
+B00000-BFFFFF     (base 16)		Zhejiang Science Electronic Tech Co., Ltd
+				F5, Huichuang Building ,No.88, Headquarters Business Garden
+				Nanhu District, Jiaxing  Zhejiang  314000
+				CN
+
+1C-87-74   (hex)		Xiaoxinge (Tangshan) Electronic Technology Co., Ltd.
+500000-5FFFFF     (base 16)		Xiaoxinge (Tangshan) Electronic Technology Co., Ltd.
+				D9G Fuhua Plaza, 8# North Street, Chaoyangmen, Dongcheng District
+				Beijing  Beijing  100027
+				CN
+
+1C-87-74   (hex)		New Nordic Engineering
+C00000-CFFFFF     (base 16)		New Nordic Engineering
+				Inge Lehmanns Gade 10
+				Aarhus    8000
+				DK
+
+1C-88-79   (hex)		Toshiba Toko Meter Systems Co., LTD.
+800000-8FFFFF     (base 16)		Toshiba Toko Meter Systems Co., LTD.
+				3484, Sakuragaoka, Kurohama
+				Hasuda-shi  Saitama  349-0192
+				JP
+
+1C-87-74   (hex)		Weber Marking Systems GmbH
+400000-4FFFFF     (base 16)		Weber Marking Systems GmbH
+				Maarweg 33
+				Rheinbreitbach  Rheinland-Pfalz  53619
+				DE
+
+1C-87-74   (hex)		Ing Buero Ziegler
+700000-7FFFFF     (base 16)		Ing Buero Ziegler
+				Schönau
+				Huetten    8825
+				CH
+
+1C-87-74   (hex)		CLABER SPA
+D00000-DFFFFF     (base 16)		CLABER SPA
+				VIA PONTEBBANA 22
+				FIUME VENETO  PORDENONE  33080
+				IT
+
+1C-87-79   (hex)		Istria soluciones de criptografia, S. A.
+900000-9FFFFF     (base 16)		Istria soluciones de criptografia, S. A.
+				Calle la Fragua, 6
+				Tres Cantos  Madrid  28760
+				ES
+
+1C-87-79   (hex)		Hangzhou Xiaowen Intelligent Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		Hangzhou Xiaowen Intelligent Technology Co., Ltd.
+				Room 610、611, F/6, Huaye Building,No.511, Jianye Road, Binjiang District
+				Hang Zhou  Zhe Jiang  310053
+				CN
+
+1C-87-79   (hex)		ZHEJIANG ITENAL TECHNOLOGY CO.,LTD
+800000-8FFFFF     (base 16)		ZHEJIANG ITENAL TECHNOLOGY CO.,LTD
+				SHOES INDUSTRIAL PARK
+				WENZHOU  ZHEJIANG  325401
+				CN
+
+1C-87-79   (hex)		A-GEAR COMPANY LIMITED 
+100000-1FFFFF     (base 16)		A-GEAR COMPANY LIMITED 
+				3F, Building 3, Unit 1, YingJunNianHa Park, LongGang Avenue, LongGang
+				Shenzhen  Guangdong  518114
+				CN
+
+84-39-BE   (hex)		Shenzhen Horn Audio Co.,Ltd.
+B00000-BFFFFF     (base 16)		Shenzhen Horn Audio Co.,Ltd.
+				NO.6 4th GuiHua road,PingShan,
+				Shenzhen  Guangdong  518118
+				CN
+
+84-39-BE   (hex)		Diamond Products LLC
+800000-8FFFFF     (base 16)		Diamond Products LLC
+				21350 Lassen St, Chatsworth, CA  91311, United States
+				Chatsworth  CA  91311
+				US
+
+40-A3-6B   (hex)		Amobile Intelligent Corp.
+B00000-BFFFFF     (base 16)		Amobile Intelligent Corp.
+				18F-1 150 Jianyi Road
+				New Taipei City    23511
+				TW
+
+40-A3-6B   (hex)		Pella Corporation
+700000-7FFFFF     (base 16)		Pella Corporation
+				102 Main St
+				Pella  IA  50219
+				US
+
+40-A3-6B   (hex)		Omnitracs, LLC
+300000-3FFFFF     (base 16)		Omnitracs, LLC
+				717 North Harwood St.
+				Dallas  TX  75201
+				US
+
+40-A3-6B   (hex)		Fin Robotics Inc
+000000-0FFFFF     (base 16)		Fin Robotics Inc
+				11871 Hilltop Dr, Losaltos Hills
+				Los Altos  CA  94024
+				US
+
+80-0A-80   (hex)		Beijing Gooagoo Technical Service Co.,Ltd.
+600000-6FFFFF     (base 16)		Beijing Gooagoo Technical Service Co.,Ltd.
+				Room 402A,Block E,Wangjing Technology Park,Lize Road
+				Beijing  Beijing  100102
+				CN
+
+80-0A-80   (hex)		Shenzhen Zidoo Technology Co., Ltd.
+500000-5FFFFF     (base 16)		Shenzhen Zidoo Technology Co., Ltd.
+				Room 12D,Block A CENTRAL GREAT SEARCHINGS,
+				Shenzhen  Guangdong  518100
+				CN
+
+00-55-DA   (hex)		Donguan WideLink Communication Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Donguan WideLink Communication Technology Co.,Ltd.
+				Guangdong dongguan songshan lake high new technology industry development zone industrial south road no. 6 3 building the second floor
+				Dongguan city  Guangdong province  523808
+				CN
+
+00-55-DA   (hex)		LUCISTECHNOLOGIES（SHANGHAI）CO.,LTD
+700000-7FFFFF     (base 16)		LUCISTECHNOLOGIES（SHANGHAI）CO.,LTD
+				No.57.East Caohejing.Building Lucis XuHui District, Shanghai.200235.China
+				SHANGHAI  SHANGHAI  200235
+				CN
+
+CC-1B-E0   (hex)		Earphone Connection, Ubc.
+500000-5FFFFF     (base 16)		Earphone Connection, Ubc.
+				25139 Ave Stanford
+				Valnecia  CA  91355
+				US
+
+A0-3E-6B   (hex)		Nanjing zhanyi software technology co., LTD
+E00000-EFFFFF     (base 16)		Nanjing zhanyi software technology co., LTD
+				Room 1101-1,Building No.2,No.106 Software Avenue,Yuhuatai District,Nanjing Jiangsu
+				Nanjing  Jiangsu  210000
+				CN
+
+A0-3E-6B   (hex)		Business Support Consultant Co.,Ltd
+100000-1FFFFF     (base 16)		Business Support Consultant Co.,Ltd
+				Room 703-705, 5 Guihua Road, Futian Free Trade Zone,  Shenzhen, China
+				Shenzhen  Guangdong  518038
+				CN
+
+00-55-DA   (hex)		Novexx Solutions GmbH
+300000-3FFFFF     (base 16)		Novexx Solutions GmbH
+				Ohmstrasse 3
+				Eching  Bayern  85386
+				DE
+
+DC-44-27   (hex)		Nautilus Infotech CO., Ltd.
+B00000-BFFFFF     (base 16)		Nautilus Infotech CO., Ltd.
+				No.55, Fengcheng St., Bade District, Taoyuan City 334, Taiwan(R.O.C)
+				Taoyuan City  NA  334
+				TW
+
+DC-44-27   (hex)		Pyrexx Technologies GmbH
+C00000-CFFFFF     (base 16)		Pyrexx Technologies GmbH
+				Spichernstr. 2
+				Berlin  Berlin  10777
+				DE
+
+DC-44-27   (hex)		Shanghai Huahong Integrated Circuit Co.,Ltd
+A00000-AFFFFF     (base 16)		Shanghai Huahong Integrated Circuit Co.,Ltd
+				No.39,Lane572,Bi Bo Road,Zhangjiang High-Tech Park,Shanghai
+				Shanghai  Shanghai  201203
+				CN
+
+1C-21-D1   (hex)		Private
+C00000-CFFFFF     (base 16)		Private
+
+C8-8E-D1   (hex)		German Pipe GmbH
+100000-1FFFFF     (base 16)		German Pipe GmbH
+				Darrweg 43
+				Nordhausen  Thuringia  D-99734
+				DE
+
+1C-21-D1   (hex)		Ognios GmbH
+100000-1FFFFF     (base 16)		Ognios GmbH
+				Dr.-Hans-Lechner-Straße 6
+				Wals-Siezenheim  Salzburg  5071
+				AT
+
+B0-C5-CA   (hex)		D&T Inc.
+900000-9FFFFF     (base 16)		D&T Inc.
+				Gajungbukro 26-121
+				YouSung Gu  Daejeon  305-343
+				KR
+
+DC-44-27   (hex)		Nex Technologies PTY LTD
+400000-4FFFFF     (base 16)		Nex Technologies PTY LTD
+				7 Pimpala Street
+				Lithgow  New South Wales  2790
+				AU
+
+78-C2-C0   (hex)		Beijing Coilabs technology co.,ltd
+800000-8FFFFF     (base 16)		Beijing Coilabs technology co.,ltd
+				The 8th floor, Zhongguancun Dream Lab Building, No.1 Haidian Street, Haidian District, Beijing City, China
+				Beijing  Beijing  100086
+				CN
+
+78-C2-C0   (hex)		Ombitron, Inc.
+A00000-AFFFFF     (base 16)		Ombitron, Inc.
+				1425 Broadway
+				Seattle  Washington  98122
+				US
+
+78-C2-C0   (hex)		KORF Inc.
+D00000-DFFFFF     (base 16)		KORF Inc.
+				201, Radio Engineering Center
+				Yuseong-gu  Daejeon  305-510
+				KR
+
+B4-37-D1   (hex)		Yireh Auto Tech Co.,Ltd.
+600000-6FFFFF     (base 16)		Yireh Auto Tech Co.,Ltd.
+				#703, 311 Nowon-ro, Nowon-gu
+				Seoul  Seoul  139865
+				KR
+
+B4-37-D1   (hex)		Lezyne INC USA
+000000-0FFFFF     (base 16)		Lezyne INC USA
+				645 Tank Farm
+				San Luis Obispo  California  93401
+				US
+
+78-C2-C0   (hex)		Guangzhou Hongcai Stage Equipment co.,ltd
+700000-7FFFFF     (base 16)		Guangzhou Hongcai Stage Equipment co.,ltd
+				no.32 Changsha Rd Shayong village
+				Guangzhou  Guangdong  511450
+				CN
+
+B4-37-D1   (hex)		GE Power Management
+700000-7FFFFF     (base 16)		GE Power Management
+				Avenida Pinoa 10
+				Zamudio  Vizcaya  48170
+				ES
+
+74-F8-DB   (hex)		WiFi Hotspots, SL
+400000-4FFFFF     (base 16)		WiFi Hotspots, SL
+				C/ Montaña Clara, No.18
+				Fañabe  Tenerife  38760
+				ES
+
+74-F8-DB   (hex)		Shenzhen Ruishi Information Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Shenzhen Ruishi Information Technology Co.,Ltd.
+				9G,Building A,Nanyuemingzhu Buliding,No.2322, Houhai Avenue,Nanshan District
+				Shenzhen  Guangdong  518062
+				CN
+
+74-F8-DB   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
+700000-7FFFFF     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
+				HUST Industry Park, East-Lake Development Zone
+				Wuhan  Hubei  430223
+				CN
+
+54-9A-11   (hex)		Niveo International BV
+700000-7FFFFF     (base 16)		Niveo International BV
+				Communicatieweg 9-L
+				Mijdrecht    3641 SG
+				NL
+
+54-9A-11   (hex)		Beijing HTSmartech Co.,Ltd
+E00000-EFFFFF     (base 16)		Beijing HTSmartech Co.,Ltd
+				Suite 301,Unit 2,Building 6,No.29,Jing Hai
+				Beijing  Beijing  100176
+				CN
+
+54-9A-11   (hex)		eTauro LLC
+400000-4FFFFF     (base 16)		eTauro LLC
+				PMB 128
+				Houston  TX  77044
+				US
+
+54-9A-11   (hex)		Royal Boon Edam International BV
+300000-3FFFFF     (base 16)		Royal Boon Edam International BV
+				PO box 40
+				Edam  Noord Holland  1135 ZG
+				NL
+
+54-9A-11   (hex)		Shenzhen Excera Technology Co.,Ltd.
+000000-0FFFFF     (base 16)		Shenzhen Excera Technology Co.,Ltd.
+				4Th floor,Block A,,JunXiangDA Building,No.9 ZhongShan Park Road
+				ShenZhen  Guangdong  518052
+				CN
+
+80-7B-85   (hex)		Interplan Co., Ltd.
+A00000-AFFFFF     (base 16)		Interplan Co., Ltd.
+				5F Ishihara Bld. 3-3-12 Iidabashi
+				Chiyoda-ku  Tokyo  102-0072
+				JP
+
+64-FB-81   (hex)		Dongyang unitech.co.ltd
+D00000-DFFFFF     (base 16)		Dongyang unitech.co.ltd
+				8F dearung technotown 13
+				seoul    153-803
+				KR
+
+64-FB-81   (hex)		Bridgeport Instruments, LLC
+C00000-CFFFFF     (base 16)		Bridgeport Instruments, LLC
+				11740 Jollyville Rd.
+				Austin  TX  78759
+				US
+
+64-FB-81   (hex)		Seven Solutions S.L
+200000-2FFFFF     (base 16)		Seven Solutions S.L
+				C/Periodista Rafael Gómez Montero, 2.
+				Granada  Granada  18014
+				ES
+
+64-FB-81   (hex)		ChengDu KeChuang LongXin Sci-tech Co.,Ltd
+E00000-EFFFFF     (base 16)		ChengDu KeChuang LongXin Sci-tech Co.,Ltd
+				12 South 1Section,First Ring Road
+				ChengDu  Sichuan  610041
+				CN
+
+64-FB-81   (hex)		hiQview Corporation
+900000-9FFFFF     (base 16)		hiQview Corporation
+				2 Fl., No. 282, Sec. 6, Zhongxiao E. Rd.,
+				Taipei    11558
+				TW
+
+80-7B-85   (hex)		Quickte Technology Co.,Ltd
+600000-6FFFFF     (base 16)		Quickte Technology Co.,Ltd
+				4thF/Bldg44, XiLiTong Long industrial Zone,
+				Shenzhen  Guangdong province  518052
+				CN
+
+80-E4-DA   (hex)		Beijing Yuantel Technolgy Co.,Ltd-Shenzhen Branch
+400000-4FFFFF     (base 16)		Beijing Yuantel Technolgy Co.,Ltd-Shenzhen Branch
+				Room502,B  BLdg, Fuan mansion
+				Shenzhen  Gangdong  518000
+				CN
+
+80-E4-DA   (hex)		Krizer international Co,. Ltd.
+800000-8FFFFF     (base 16)		Krizer international Co,. Ltd.
+				RM 9F, Block B, Central Building
+				shenzhen  guangdong  518101
+				CN
+
+80-E4-DA   (hex)		Nanjing LILO Technology Co. Ltd.
+B00000-BFFFFF     (base 16)		Nanjing LILO Technology Co. Ltd.
+				YouLeHui Building E, 3011
+				Beijing  Beijing  100000
+				CN
+
+80-E4-DA   (hex)		EVER Sp. z o.o.
+C00000-CFFFFF     (base 16)		EVER Sp. z o.o.
+				ul. Grudzinskiego 30
+				Swarzedz  wielkopolskie  62-020
+				PL
+
+1C-CA-E3   (hex)		eSight Corporation
+D00000-DFFFFF     (base 16)		eSight Corporation
+				535 Legget Drive
+				Ottawa  Ontario  K2K3B8
+				CA
+
+80-E4-DA   (hex)		Beijing Gaokezhongtian Technology Co Ltd
+300000-3FFFFF     (base 16)		Beijing Gaokezhongtian Technology Co Ltd
+				Beijing City Haidian District 23 Liangziyinzuo 806 room
+				beijing  beijing  100191
+				CN
+
+1C-CA-E3   (hex)		Bird Home Automation GmbH
+700000-7FFFFF     (base 16)		Bird Home Automation GmbH
+				Joachimsthaler Str. 12
+				Berlin  Berlin  10719
+				DE
+
+2C-D1-41   (hex)		XiaMen 35.com Technology Co,.Ltd.
+700000-7FFFFF     (base 16)		XiaMen 35.com Technology Co,.Ltd.
+				8th.building,Guanri Road,Software Park
+				Xiamen  Fujian  361008
+				CN
+
+90-C6-82   (hex)		Cinet Inc
+700000-7FFFFF     (base 16)		Cinet Inc
+				8616 Phoenix Drive
+				Manassas  VA  20110
+				US
+
+90-C6-82   (hex)		Innovative Electronic Technology
+300000-3FFFFF     (base 16)		Innovative Electronic Technology
+				IET House
+				Potten End  Herts  HP42RN
+				GB
+
+90-C6-82   (hex)		Teletek Electronics
+800000-8FFFFF     (base 16)		Teletek Electronics
+				14A Srebarna Str.
+				  Sofia  1407
+				BG
+
+90-C6-82   (hex)		Nanjing Jiexi Technologies Co., Ltd.
+600000-6FFFFF     (base 16)		Nanjing Jiexi Technologies Co., Ltd.
+				2ND FLOOR,BUILDING 9,JIANGSU SOFTWARE
+				Nanjing  Jiangsu  210023
+				CN
+
+2C-6A-6F   (hex)		Shanghai Shuncom Electronic Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Shanghai Shuncom Electronic Technology Co.,Ltd
+				8/F,No.4 building,No.3000 Longdong Ave,,
+				shanghai  shanghai  201203
+				CN
+
+90-C6-82   (hex)		Shanghai HuRong Communication Technology Development Co., Ltd.
+E00000-EFFFFF     (base 16)		Shanghai HuRong Communication Technology Development Co., Ltd.
+				Room 342，Building A，No.68. Donghe Road, Chengqiao town, Chongming county（Chengqiao Economic Development Zone）
+				shanghai  shanghai  202150
+				CN
+
+2C-6A-6F   (hex)		Wellntel, Inc.
+A00000-AFFFFF     (base 16)		Wellntel, Inc.
+				4230 N Oakland Ave, Suite 202
+				Milwaukee  WI  53211
+				US
+
+2C-D1-41   (hex)		Bowei Technology Company Limited
+600000-6FFFFF     (base 16)		Bowei Technology Company Limited
+				Room 1716, Building Xinmao,
+				  Shanghai  200233
+				CN
+
+28-FD-80   (hex)		Digital Signal Corp
+400000-4FFFFF     (base 16)		Digital Signal Corp
+				14000 Thunderbolt Place
+				Chantilly  VA  20151
+				US
+
+A0-BB-3E   (hex)		Xiamen Kehua Hengsheng Co.,Ltd
+600000-6FFFFF     (base 16)		Xiamen Kehua Hengsheng Co.,Ltd
+				No.457,Malong Road,Torch High-tech Industrial Zone
+				Xiamen  Fujian  361000
+				CN
+
+A0-BB-3E   (hex)		AutarcTech GmbH
+800000-8FFFFF     (base 16)		AutarcTech GmbH
+				Technologiepark 1
+				Ansbach  Bavaria  91522
+				DE
+
+A0-BB-3E   (hex)		Sandal Plc
+900000-9FFFFF     (base 16)		Sandal Plc
+				Unit 5 Harold Close
+				Harlow  Essex  
+				GB
+
+F8-02-78   (hex)		Innodisk
+200000-2FFFFF     (base 16)		Innodisk
+				5F., No.237, Sec. 1, Datong Rd., Xizhi Dist.,
+				New Taipei City  Taiwan  221
+				TW
+
+F8-02-78   (hex)		Beijing Redcdn Technology, Co., Ltd
+900000-9FFFFF     (base 16)		Beijing Redcdn Technology, Co., Ltd
+				7F, B block, Yu Hui building
+				Haidian District  Beijing  100142
+				CN
+
+2C-26-5F   (hex)		Motec GmbH
+500000-5FFFFF     (base 16)		Motec GmbH
+				Oberweyerer Strasse 21
+				Hadamar-Steinbach  Hessen  65589
+				DE
+
+2C-26-5F   (hex)		Hysentel Technology Co., Ltd
+E00000-EFFFFF     (base 16)		Hysentel Technology Co., Ltd
+				Floor 2 Building L  No.26#  2 xiang
+				Shenzhen  Guangdong  518101
+				CN
+
+A4-4F-29   (hex)		Comsel System Ltd
+300000-3FFFFF     (base 16)		Comsel System Ltd
+				Universitetsstranden 5
+				Vasa    65200
+				FI
+
+0C-EF-AF   (hex)		Sentry360
+400000-4FFFFF     (base 16)		Sentry360
+				23807 W Andrew Road
+				Plainfield  IL  60585
+				US
+
+3C-39-E7   (hex)		University of British Columbia
+400000-4FFFFF     (base 16)		University of British Columbia
+				Department of Civil Engineering
+				Vancouver  BC  V6T 1Z4
+				CA
+
+3C-39-E7   (hex)		BEWATEC Kommunikationstechnik GmbH
+100000-1FFFFF     (base 16)		BEWATEC Kommunikationstechnik GmbH
+				Orkotten 65
+				Telgte  NRW  48291
+				DE
+
+10-07-23   (hex)		RippleTek Tech Ltd
+000000-0FFFFF     (base 16)		RippleTek Tech Ltd
+				Tianyi Street #38 Idealisim Center Building #1 Room #705
+				Chengdu  Sichuan  610041
+				CN
+
+B8-D8-12   (hex)		Lam Research
+D00000-DFFFFF     (base 16)		Lam Research
+				4305 cushing parkway
+				Fremont  California  94538
+				US
+
+D0-22-12   (hex)		AIM
+100000-1FFFFF     (base 16)		AIM
+				21, avenue de la Plaine Fleurie
+				MEYLAN  ISERE  38240
+				FR
+
+B8-D8-12   (hex)		Yuwei Info&Tech Development Co.,Ltd
+C00000-CFFFFF     (base 16)		Yuwei Info&Tech Development Co.,Ltd
+				Floor 6, Taike Building, No 2 Taike Road, Futian
+				Shenzhen  Guangdong  518049
+				CN
+
+E8-18-63   (hex)		clabsys
+100000-1FFFFF     (base 16)		clabsys
+				9F Elentec-dong, Pangyo 7 Venture Valley II, 633
+				Seongnam-si  Kyeonggi-do  463-010
+				KR
+
+E8-18-63   (hex)		Siliconcube
+700000-7FFFFF     (base 16)		Siliconcube
+				Room 702, KSIA Building, 182,
+				Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+D0-22-12   (hex)		Shenzhen SIC Technology. Co., Ltd.
+800000-8FFFFF     (base 16)		Shenzhen SIC Technology. Co., Ltd.
+				Room 601-31,Floor 6,Meinian International Square
+				Shenzhen  Guangdong  518042
+				CN
+
+D0-22-12   (hex)		URANO INDUSTRIA DE BALANCAS E EQUIPAMENTOS LTDA
+600000-6FFFFF     (base 16)		URANO INDUSTRIA DE BALANCAS E EQUIPAMENTOS LTDA
+				RUA IRMAO PEDRO, 709
+				CANOAS  RS  92020550
+				BR
+
+E8-18-63   (hex)		BSM Wireless Inc.
+900000-9FFFFF     (base 16)		BSM Wireless Inc.
+				75 International Blvd.
+				Toronto  Ontario  M9W 6L9
+				CA
+
+D0-22-12   (hex)		RHENAC Systems GmbH
+200000-2FFFFF     (base 16)		RHENAC Systems GmbH
+				Christian-Lassen-Str. 16
+				Bonn  NRW  53117
+				DE
+
+74-E1-4A   (hex)		emz-Hanauer GmbH & Co. KGaA
+300000-3FFFFF     (base 16)		emz-Hanauer GmbH & Co. KGaA
+				Siemensstrasse 1
+				Nabburg  Bavaria  92507
+				DE
+
+74-E1-4A   (hex)		open joint stock company YUG-SISTEMA plus
+400000-4FFFFF     (base 16)		open joint stock company YUG-SISTEMA plus
+				
+				Krasnodar   Krasnodar Region  350072
+				RU
+
+B8-D8-12   (hex)		VOTEM
+100000-1FFFFF     (base 16)		VOTEM
+				27, Geodudanji 1-gil,
+				Chuncheon-Si  Gangwon-Do  200-883
+				KR
+
+B8-D8-12   (hex)		Vonger Electronic Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Vonger Electronic Technology Co.,Ltd.
+				Qiaodong Street #24
+				Taiyuan  Shanxi  030001
+				CN
+
+E4-95-6E   (hex)		NationalchipKorea
+700000-7FFFFF     (base 16)		NationalchipKorea
+				#1109, Ace PyeongchonTower
+				Anyang-si  Gyeonggi-do  431-804
+				KR
+
+E4-95-6E   (hex)		Tacom Projetos Bilhetagem Inteligente ltda
+E00000-EFFFFF     (base 16)		Tacom Projetos Bilhetagem Inteligente ltda
+				3800 Raja Gabaglia avenue
+				Belo Horizonte  Minas Gerais  30494310
+				BR
+
+E4-95-6E   (hex)		Shanghai DGE Co., Ltd
+300000-3FFFFF     (base 16)		Shanghai DGE Co., Ltd
+				No.6608, Beisong Road,
+				  Shanghai  201611
+				CN
+
+E4-95-6E   (hex)		Guang Lian Zhi Tong Technology Limited
+400000-4FFFFF     (base 16)		Guang Lian Zhi Tong Technology Limited
+				Room 1102 Baoyuanhuafeng Economy Bldg
+				Shenzhen  Guang Dong  518000
+				
+
+BC-66-41   (hex)		Shenzhen Yaguang communication CO.,LTD
+800000-8FFFFF     (base 16)		Shenzhen Yaguang communication CO.,LTD
+				7 Floor,3 building,Guangqian community ,Bagua Load
+				Shenzhen  Guangdong  518029
+				CN
+
+BC-66-41   (hex)		EBlink
+A00000-AFFFFF     (base 16)		EBlink
+				3-5 Rue Marcel Pagnol
+				Boussy Saint Antoine  France  91800
+				FR
+
+58-FC-DB   (hex)		Applied Device Technologies
+E00000-EFFFFF     (base 16)		Applied Device Technologies
+				400 West Front Street
+				Traverse City  Michigan  49684
+				US
+
+58-FC-DB   (hex)		XIAMEN LEELEN TECHNOLOGY CO.,LTD
+D00000-DFFFFF     (base 16)		XIAMEN LEELEN TECHNOLOGY CO.,LTD
+				65 Sunban South Rd.
+				Xiamen  Fujian  361021
+				CN
+
+BC-66-41   (hex)		Process-Electronic Sp. z o.o.
+200000-2FFFFF     (base 16)		Process-Electronic Sp. z o.o.
+				ul. Jednosci 48
+				Sosnowiec  slaskie  41-218
+				PL
+
+58-FC-DB   (hex)		Beseye Cloud Security Co. Ltd.
+200000-2FFFFF     (base 16)		Beseye Cloud Security Co. Ltd.
+				3F.-1, No.45-1, Dexing W. Rd., Shilin Dist.
+				Taipei City  Taiwan  11158
+				TW
+
+B0-1F-81   (hex)		SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.
+400000-4FFFFF     (base 16)		SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.
+				Building NO.22,23, Fifth Region, Baiwangxin Industrial Park, Songbai Rd., Nanshan
+				Shenzhen  Guangdong  518108
+				CN
+
+F4-0E-11   (hex)		Sterna Security
+900000-9FFFFF     (base 16)		Sterna Security
+				100 West Sambandam road
+				Coimbatore  Tamilnadu  641002
+				IN
+
+B0-1F-81   (hex)		Rademacher Geraete-Elektronik GmbH
+B00000-BFFFFF     (base 16)		Rademacher Geraete-Elektronik GmbH
+				Buschkamp 7
+				Rhede  NRW  46414
+				DE
+
+14-1F-BA   (hex)		Newings Communication CO., LTD.
+B00000-BFFFFF     (base 16)		Newings Communication CO., LTD.
+				12F, Block 1, NO 7866, Humin Rd, Minhang District, Shanghai, China
+				Shanghai  Shanghai  200000
+				CN
+
+F4-0E-11   (hex)		realphone technology co.,ltd
+000000-0FFFFF     (base 16)		realphone technology co.,ltd
+				room 1207,block b, haisong building,tairan9th road park,futian district,shenzhen,china
+				shenzhen  guangdong  518400
+				CN
+
+F4-0E-11   (hex)		Axel srl
+200000-2FFFFF     (base 16)		Axel srl
+				Via del Santo, 143
+				Limena  PD  35010
+				IT
+
+7C-70-BC   (hex)		Tohan　Engineering　Corporation
+B00000-BFFFFF     (base 16)		Tohan　Engineering　Corporation
+				1-701-1 Baba
+				Sennan-shi  Osaka  590-0525
+				JP
+
+14-1F-BA   (hex)		Private
+300000-3FFFFF     (base 16)		Private
+
+BC-34-00   (hex)		AURALIC LIMITED
+A00000-AFFFFF     (base 16)		AURALIC LIMITED
+				Room 102, Building No.7
+				Beijing    102200
+				CN
+
+A4-3B-FA   (hex)		SHEN ZHEN PASUN TECH CO.LTD.
+900000-9FFFFF     (base 16)		SHEN ZHEN PASUN TECH CO.LTD.
+				Room B406, Taojindi E-Business Incubator Base
+				SHENZHEN  GUANGDONG  518131
+				CN
+
+BC-34-00   (hex)		Cameron
+600000-6FFFFF     (base 16)		Cameron
+				14450 John F. Kennedy Blvd
+				Houston  TX  77032
+				
+
+7C-70-BC   (hex)		FLEXIM GmbH
+300000-3FFFFF     (base 16)		FLEXIM GmbH
+				Wolfener Strasse 36
+				  BERLIN  12681
+				DE
+
+D0-76-50   (hex)		CentrAlert, Inc.
+000000-0FFFFF     (base 16)		CentrAlert, Inc.
+				275 Meijer Way
+				Lexington  KY  40503
+				US
+
+A4-3B-FA   (hex)		Circus World Displays Ltd
+300000-3FFFFF     (base 16)		Circus World Displays Ltd
+				4080 Montrose Rd
+				Niagara Falls  Ontario  L2H 1J9
+				CA
+
+A4-3B-FA   (hex)		Beijing Uniwill Science and Technology Co,Ltd
+100000-1FFFFF     (base 16)		Beijing Uniwill Science and Technology Co,Ltd
+				NO.30 Jinyuan Road Daxing Zone
+				  Beijing  102600
+				CN
+
+A4-3B-FA   (hex)		Chengdu Territory Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Chengdu Territory Technology Co.,Ltd
+				Flat 23, #4, Senhua Gargden Shaoling Road
+				Chengdu  Sichuan  610000
+				CN
+
+D0-76-50   (hex)		tecnotron elekronik gmbh
+D00000-DFFFFF     (base 16)		tecnotron elekronik gmbh
+				Wildberg 64
+				Weissensberg  Bavaria  88138
+				DE
+
+D0-76-50   (hex)		Greenwave Scientific
+900000-9FFFFF     (base 16)		Greenwave Scientific
+				2720 Discovery Dr.
+				Raleigh  North Carolina  27612
+				US
+
+74-19-F8   (hex)		IDEXX Laboratories, Inc
+B00000-BFFFFF     (base 16)		IDEXX Laboratories, Inc
+				1 IDEXX Drive
+				Westbrook  ME  04092
+				US
+
+74-19-F8   (hex)		Heptagon Systems PTY. LTD.
+700000-7FFFFF     (base 16)		Heptagon Systems PTY. LTD.
+				625-627 Ringwood Warrandyte Road
+				Ringwood North  VIC  3124
+				AU
+
+74-19-F8   (hex)		Bach Icon ApS
+C00000-CFFFFF     (base 16)		Bach Icon ApS
+				Ambolten 8
+				Hoersholm  DK  2970
+				DK
+
+4C-4B-F9   (hex)		Beijing AutoAi Technology co. LTD
+E00000-EFFFFF     (base 16)		Beijing AutoAi Technology co. LTD
+				The building of Navinfo ,at the intersection Yongfeng road and Beiqing road,Haidian District
+				Beijing  Beijing  100094
+				CN
+
+40-11-75   (hex)		Kanda Kogyo
+200000-2FFFFF     (base 16)		Kanda Kogyo
+				3-6 Kandacho
+				HImeji  Hyogo  6700991
+				JP
+
+40-11-75   (hex)		Beijing Gemotech Intelligent Technology Co., Ltd.
+800000-8FFFFF     (base 16)		Beijing Gemotech Intelligent Technology Co., Ltd.
+				NO.1 Development Road,Beijing International Information Industrial Base,Huilongguan Town,Changping District
+				Beijing  Beijing  102206
+				CN
+
+40-11-75   (hex)		ADH Guardian USA
+900000-9FFFFF     (base 16)		ADH Guardian USA
+				122 Penn St
+				El Segundo  CA  90245
+				US
+
+04-D1-6E   (hex)		ShenZhen Huafu Information technology Co.?Ltd
+400000-4FFFFF     (base 16)		ShenZhen Huafu Information technology Co.?Ltd
+				T2-B5 FLOOR, shenzhen software park, gaoxin south 7th road, yuehai                street, nanshan district
+				ShenZhen  GuangDong  518000
+				CN
+
+24-4E-7B   (hex)		Church & Dwight Co., Inc.
+D00000-DFFFFF     (base 16)		Church & Dwight Co., Inc.
+				500 Charles Ewing Blvd
+				Ewing  NJ  08628
+				US
+
+04-D1-6E   (hex)		CHENGDU INTERLINK SCIENCE AND TECHNOLOGY CO.,LTD
+800000-8FFFFF     (base 16)		CHENGDU INTERLINK SCIENCE AND TECHNOLOGY CO.,LTD
+				Room 1305, 12A Level, Wanke Huamao Building
+				Sichuan  Chengdu  610051
+				CN
+
+04-D1-6E   (hex)		PacPort Corporation
+C00000-CFFFFF     (base 16)		PacPort Corporation
+				Ginza 6-10-1, GINZA SIX 13F, Chuo-ku
+				Tokyo  Tokyo  1040061
+				JP
+
+04-D1-6E   (hex)		Launch Tech Co., Ltd.
+100000-1FFFFF     (base 16)		Launch Tech Co., Ltd.
+				Launch Industrial Park, No.4012, North of Wuhe Road, Bantian Street, Longgang District,
+				Shenzhen  Guangdong  518100
+				CN
+
+04-D1-6E   (hex)		Envision Energy
+700000-7FFFFF     (base 16)		Envision Energy
+				8/F, Building B, SOHO Zhongshan Plaza, 1065 West Zhongshan Road
+				Shanghai     200051
+				CN
+
+44-03-77   (hex)		Hangzhou Asia Infrastructure Tech. Co., Ltd.
+B00000-BFFFFF     (base 16)		Hangzhou Asia Infrastructure Tech. Co., Ltd.
+				No.7 Xiyuan Rd, Sandun Town, Westlake District
+				Hangzhou  Zhejiang  310000
+				CN
+
+44-03-77   (hex)		Stara S/A Indústria de Implementos Agrícolas
+700000-7FFFFF     (base 16)		Stara S/A Indústria de Implementos Agrícolas
+				Avenida Stara 519
+				Não-Me-Toque  Rio Grande do Sul  99470000
+				BR
+
+50-62-55   (hex)		AVTECH Software, Inc.
+700000-7FFFFF     (base 16)		AVTECH Software, Inc.
+				16 Cutler Str, Cutler Mill
+				Warren  RI  02885
+				US
+
+50-62-55   (hex)		Hypertech Advance Co., LTD
+300000-3FFFFF     (base 16)		Hypertech Advance Co., LTD
+				1F., No. 9, Changchun 6th Rd., Zhongli Dist.,
+				 Taoyuan City    320
+				TW
+
+50-62-55   (hex)		Suzhou Ruixinjie Information Technology Co.,Ltd
+500000-5FFFFF     (base 16)		Suzhou Ruixinjie Information Technology Co.,Ltd
+				Room 907,No. 99 Changli Road
+				Suzhou  Jiangsu  215000
+				CN
+
+64-31-39   (hex)		Hunan Voc Acoustics Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Hunan Voc Acoustics Technology Co., Ltd.
+				State Industrialpark, Jiulong Development Zone, Yanling County
+				Zhuzhou  Hunan  412500
+				CN
+
+50-62-55   (hex)		AED Distribution
+C00000-CFFFFF     (base 16)		AED Distribution
+				Bedrijvenpark De Veert 13/004
+				Willebroek    2830
+				BE
+
+64-31-39   (hex)		KOANGYOW INTEGRATION MACHINE CO., LTD.
+300000-3FFFFF     (base 16)		KOANGYOW INTEGRATION MACHINE CO., LTD.
+				7F., No. 566, Zhongzheng Rd., Xindian Dist.
+				New Taipei City    23148
+				TW
+
+64-31-39   (hex)		SHEN ZHEN FUCHANG TECHNOLOGY Co.,Ltd.
+C00000-CFFFFF     (base 16)		SHEN ZHEN FUCHANG TECHNOLOGY Co.,Ltd.
+				Floor 4 11 Building Qixing Factory,Niu Cheng 2rd Industrial Area,Xili Nanshan District
+				Shenzhen  GUANGDONG  518055
+				CN
+
+C4-95-4D   (hex)		SolidGear Corporation
+C00000-CFFFFF     (base 16)		SolidGear Corporation
+				Shinyokohama Kaneko Bldg 8F, 2-3-9 ShinYokohama Kohoku-ku
+				Yokohama  Knanagawa  222-0033
+				JP
+
+C4-95-4D   (hex)		Sercomm Corporation.
+300000-3FFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+00-69-67   (hex)		Hangzhou Wise IOT Technology Co.,Ltd
+900000-9FFFFF     (base 16)		Hangzhou Wise IOT Technology Co.,Ltd
+				Room 405, Building 2, No. 31, Science and Technology Avenue, Yuhang Street, Yuhang District
+				Hangzhou  Zhejiang  310012
+				CN
+
+64-31-39   (hex)		Active Brains
+400000-4FFFFF     (base 16)		Active Brains
+				Yokohama Dia BLDG 8F 1-7 Kinkocho Kanagawa-ku
+				Yokohama  Kanagawa  221-0056
+				JP
+
+00-69-67   (hex)		Ambient-System sp. z o.o.
+800000-8FFFFF     (base 16)		Ambient-System sp. z o.o.
+				ul. Galaktyczna 37
+				Gdansk    80-299
+				PL
+
+00-69-67   (hex)		Datapan d.o.o.
+B00000-BFFFFF     (base 16)		Datapan d.o.o.
+				Velika Pot 19
+				Solkan    5250
+				SI
+
+00-69-67   (hex)		Tianjin Lianwu Technology Co., Ltd. 
+E00000-EFFFFF     (base 16)		Tianjin Lianwu Technology Co., Ltd. 
+				Room 201, 2nd floor, Building 8, No.35, Caizhi Street, Xuefu Industrial Zone, Xiqing District
+				Tianjin  Tianjin  300380
+				CN
+
+A0-22-4E   (hex)		IST ElektronikgesmbH
+A00000-AFFFFF     (base 16)		IST ElektronikgesmbH
+				Marktplatz 40
+				Neukirchen am Walde  Upper Austria  4724
+				AT
+
+20-0A-0D   (hex)		Tecnint HTE SRL
+700000-7FFFFF     (base 16)		Tecnint HTE SRL
+				Via della Tecnica 16/18
+				Osnago  Lecco  23875
+				IT
+
+20-0A-0D   (hex)		IRSAP
+A00000-AFFFFF     (base 16)		IRSAP
+				Via delle Industrie, 211
+				Arqua' Polesine  Veneto  45031
+				IT
+
+40-2C-76   (hex)		Annapurna labs
+200000-2FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+40-2C-76   (hex)		Baumer Bourdon-Haenni
+500000-5FFFFF     (base 16)		Baumer Bourdon-Haenni
+				125 Rue de la marre
+				Vendôme    41100
+				FR
+
+40-2C-76   (hex)		NowTechnologies Zrt
+A00000-AFFFFF     (base 16)		NowTechnologies Zrt
+				18 Realtanoda
+				Budapest    1053
+				HU
+
+50-DE-19   (hex)		Shenzhen Vipstech Co., Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Vipstech Co., Ltd
+				Building 10th, Baiwangxin Industrial Park, No. 1002 Songbai Road, Xili Street, 
+				Shenzhen  Guangdong  518100
+				CN
+
+50-DE-19   (hex)		Telic AG
+000000-0FFFFF     (base 16)		Telic AG
+				Raiffeisenallee 12b
+				Oberhaching    82041
+				DE
+
+3C-FA-D3   (hex)		Shenzhen zhong ju  Fiber optical Co.Ltd
+C00000-CFFFFF     (base 16)		Shenzhen zhong ju  Fiber optical Co.Ltd
+				3t Floor Build A .jin he Rui park .guan lan.
+				Shen zhen  Guang dong  518000
+				CN
+
+3C-FA-D3   (hex)		Naruida Technology Ltd.
+200000-2FFFFF     (base 16)		Naruida Technology Ltd.
+				2 Gangle Road,Tangjia Bay Town, High Tech Zone
+				Zhuhai  Guangdong  519080
+				CN
+
+90-E2-FC   (hex)		Huddly AS
+900000-9FFFFF     (base 16)		Huddly AS
+				Karenslyst Allé 51
+				Oslo    0279
+				NO
+
+90-E2-FC   (hex)		Shenzhen Dingsheng Intelligent Technology Co., Ltd
+B00000-BFFFFF     (base 16)		Shenzhen Dingsheng Intelligent Technology Co., Ltd
+				10/F Block C, Skyworth Building, Gaoxin South 1st Rd., Hi-Tech Park, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+14-AE-85   (hex)		Veo Technologies
+900000-9FFFFF     (base 16)		Veo Technologies
+				Aldersrogade 6c, 4. sal
+				København  Denmark  2100
+				DK
+
+14-AE-85   (hex)		SHENZHEN HONOR ELECTRONIC CO.,LTD
+700000-7FFFFF     (base 16)		SHENZHEN HONOR ELECTRONIC CO.,LTD
+				No. A Building, Xinghui Industrial Park, Gushu No. 2Rd,
+				SHEN ZHEN  GUANG  DONG  518000
+				CN
+
+94-CC-04   (hex)		Shenzhen Link technology Co.,Ltd
+300000-3FFFFF     (base 16)		Shenzhen Link technology Co.,Ltd
+				901,9/F,Dahong High TechIndusryPark?NO.6-18,Xinhe Road,Xinqiao Community,Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+94-CC-04   (hex)		SHENZHEN SANRAY TECHNOLOGY CO.,LTD
+500000-5FFFFF     (base 16)		SHENZHEN SANRAY TECHNOLOGY CO.,LTD
+				1B08 2/F Folk Culture Industrial Park,Qunli Second Road, Baoan District
+				Shenzhen  GuangDong  518101
+				CN
+
+94-CC-04   (hex)		GOCOAX, INC
+100000-1FFFFF     (base 16)		GOCOAX, INC
+				15902A Halliburton Rd #662 
+				Hacienda Heights  CA  91745
+				US
+
+94-05-BB   (hex)		Chengdu Zhongheng Network Co.,Ltd.
+500000-5FFFFF     (base 16)		Chengdu Zhongheng Network Co.,Ltd.
+				No.898 Baicao Road, Chengdu High-tech Zone (Western District)
+				Chengdu  Sichuan  611731
+				CN
+
+94-CC-04   (hex)		Shanxi Baixin Information Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Shanxi Baixin Information Technology Co., Ltd.
+				Room 210-213, Room 215-217, Room 219-220, No.2, Yari Street, Taiyuan University Park, Shanxi Comprehensive Reform Demonstration Zone
+				Taiyuan  Shanxi  030032
+				CN
+
+D0-C8-57   (hex)		IFLYTEK CO.,LTD.
+D00000-DFFFFF     (base 16)		IFLYTEK CO.,LTD.
+				National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
+				Hefei  An hui  230088
+				CN
+
+94-05-BB   (hex)		ZIGPOS GmbH
+600000-6FFFFF     (base 16)		ZIGPOS GmbH
+				Räcknitzhöhe 35a
+				Dresden  Saxony  01217
+				DE
+
+94-05-BB   (hex)		SolarEdge Technologies
+A00000-AFFFFF     (base 16)		SolarEdge Technologies
+				1 Abba Eban St.
+				Herzelia    46725
+				IL
+
+F4-90-CB   (hex)		Airbeam Wireless Technologies Inc.
+600000-6FFFFF     (base 16)		Airbeam Wireless Technologies Inc.
+				#125, 21320 Gordon Way
+				Richmond  British Columbia  V6W 1J8
+				CA
+
+C0-9B-F4   (hex)		Annapurna labs
+000000-0FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+C0-9B-F4   (hex)		Alcatraz AI Inc.
+900000-9FFFFF     (base 16)		Alcatraz AI Inc.
+				1808 El Camino Real
+				Redwood City  CA  94063
+				US
+
+F4-90-CB   (hex)		RSAE Labs Inc
+E00000-EFFFFF     (base 16)		RSAE Labs Inc
+				400 E 16th St
+				Panama City  FL  32405
+				US
+
+C0-9B-F4   (hex)		Big Dutchman International GmbH
+700000-7FFFFF     (base 16)		Big Dutchman International GmbH
+				Auf der Lage, 2
+				Vechta  Niedersachsen  49377
+				DE
+
+C0-9B-F4   (hex)		Continental Automotive Component Malaysia Sdn.Bhd.
+E00000-EFFFFF     (base 16)		Continental Automotive Component Malaysia Sdn.Bhd.
+				2455, MK.1, Tingkat Perusahaan 2A,
+				Prai Industrial Estate, Prai,  Penang  13600
+				MY
+
+E8-B4-70   (hex)		Anduril Industries
+C00000-CFFFFF     (base 16)		Anduril Industries
+				2272 Michelson Dr
+				Irvine  CA  92612
+				US
+
+E8-B4-70   (hex)		Webfleet Solutions B.V.
+300000-3FFFFF     (base 16)		Webfleet Solutions B.V.
+				De Ruijterkade 154
+				Amsterdam    1011 AC
+				NL
+
+E8-B4-70   (hex)		Medica Corporation
+D00000-DFFFFF     (base 16)		Medica Corporation
+				 5 Oak Park Drive
+				Bedford  MA  01730
+				US
+
+94-FB-A7   (hex)		Shenzhen Golden Star Technology Ltd
+B00000-BFFFFF     (base 16)		Shenzhen Golden Star Technology Ltd
+				Rm.622,building B,MingYou Industrial products Exhibition&Procurement center, Baoyuan Road,Xixiang,Bao’an District,
+				Shenzhen  Guangdong  518000
+				CN
+
+94-FB-A7   (hex)		GUANG DONG TAKSTAR ELECTRONIC CO.,LTD.
+300000-3FFFFF     (base 16)		GUANG DONG TAKSTAR ELECTRONIC CO.,LTD.
+				Dinggang,Group 5, Xialiao Village,Longxi Town, Boluo County
+				Huizhou City  Guangdong  516121
+				CN
+
+94-FB-A7   (hex)		Solaborate Inc.
+C00000-CFFFFF     (base 16)		Solaborate Inc.
+				#283 - 8300 Utica Ave
+				Rancho Cucamonga  CA  91730
+				US
+
+94-FB-A7   (hex)		Sercomm Corporation.
+600000-6FFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+94-FB-A7   (hex)		CAVITY EYE
+500000-5FFFFF     (base 16)		CAVITY EYE
+				Ébner György köz 4.
+				Budaörs    2040
+				HU
+
+94-FB-A7   (hex)		Anvil Systems Group, Inc.
+700000-7FFFFF     (base 16)		Anvil Systems Group, Inc.
+				8211 Terminal Road, Suite 1900
+				Lorton   VA  22079
+				US
+
+38-F7-CD   (hex)		NZIA Connect Inc
+100000-1FFFFF     (base 16)		NZIA Connect Inc
+				1109 ho, Bupyeong tech city Bld, 293 Bupyeong-daero, Bupyeong-gu
+				Incheon    21315
+				KR
+
+38-F7-CD   (hex)		Distech Controls
+A00000-AFFFFF     (base 16)		Distech Controls
+				4205 place de Java
+				Brossard  QC  J4Y 0C4
+				CA
+
+70-69-79   (hex)		Graphcore Ltd
+200000-2FFFFF     (base 16)		Graphcore Ltd
+				11-19 Wine Street
+				Bristol    BS1 2PH
+				GB
+
+CC-C2-61   (hex)		Ability Enterprise Co., Ltd
+700000-7FFFFF     (base 16)		Ability Enterprise Co., Ltd
+				No. 200, Sec. 3, Zhonghuan Rd., Xinzhuang Dist., New Taipei City 24242, Taiwan (R.O.C.)
+				Taipei    24242
+				TW
+
+CC-C2-61   (hex)		EDAG Engineering GmbH
+400000-4FFFFF     (base 16)		EDAG Engineering GmbH
+				Dr.- Ludwig-Kraus-Str. 2
+				Gaimersheim  Bavaria  85080
+				DE
+
+70-69-79   (hex)		Hebei Baina Xinda Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Hebei Baina Xinda Technology Co., Ltd.
+				Building C, e-commerce Industrial Park, Xianghe robot Town
+				Langfang City  Hebei Province  065400
+				CN
+
+F0-D7-AF   (hex)		Dongguan Gedi Electrons Techeology Co.,LTD
+D00000-DFFFFF     (base 16)		Dongguan Gedi Electrons Techeology Co.,LTD
+				Dongguan Gedi Electrons Techeology Co.,LTD
+				Dongguan  Guangdong  523000
+				CN
+
+F0-D7-AF   (hex)		ID Tech Japan Co.,Ltd.
+000000-0FFFFF     (base 16)		ID Tech Japan Co.,Ltd.
+				Matsumura BLDG, 2-2-23,Shibazaki-cho, Tachikawa-shi
+				Tokyo  Japan  1900023
+				JP
+
+F0-D7-AF   (hex)		Beijing Serviatech lnformation Tech Co.,Ltd
+100000-1FFFFF     (base 16)		Beijing Serviatech lnformation Tech Co.,Ltd
+				Floor?Building17 NO.1A?Chaoqian Rd?Changping?Beijing
+				Beijing    102200
+				CN
+
+F0-D7-AF   (hex)		Wren Associates, LTD
+E00000-EFFFFF     (base 16)		Wren Associates, LTD
+				124 Wren Parkway
+				Jefferson City  MO  65109-6332
+				US
+
+30-49-50   (hex)		HANGZHOU EV-TECH CO.,LTD
+B00000-BFFFFF     (base 16)		HANGZHOU EV-TECH CO.,LTD
+				No. 205, Zhenzhong Road, Xihu District
+				HANGZHOU  ZHEJIANG  310012
+				CN
+
+30-49-50   (hex)		Curb, Inc.
+600000-6FFFFF     (base 16)		Curb, Inc.
+				1524 S IH35, Suite 345, Apt 134
+				Austin  TX  78704
+				US
+
+30-49-50   (hex)		Shanghai gatang technology CO.,LTD
+900000-9FFFFF     (base 16)		Shanghai gatang technology CO.,LTD
+				Room 507, building 1, No. 2071, Hongmei Road, Xuhui District, 
+				Shanghai    200030
+				CN
+
+5C-85-7E   (hex)		Annapurna labs
+C00000-CFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+5C-85-7E   (hex)		mobilogix HongKong
+200000-2FFFFF     (base 16)		mobilogix HongKong
+				Limited Flat/RM 705A, 7/F, New East Ocean Centre No. 9 Science Museum Road Kowloon
+				Hong Kong    000000
+				CN
+
+F4-69-D5   (hex)		Terminus (Shanghai) Technology Co.,Ltd.
+900000-9FFFFF     (base 16)		Terminus (Shanghai) Technology Co.,Ltd.
+				17F,building 2,CES west bund center,No.277 longlan road,xuhui,district
+				Shanghai    200232
+				CN
+
+4C-93-A6   (hex)		Vestaboard, Inc.
+000000-0FFFFF     (base 16)		Vestaboard, Inc.
+				1777 Yosemite Avenue STE 220
+				San Francisco  CA  94124
+				US
+
+4C-93-A6   (hex)		Sercomm Corporation.
+800000-8FFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+4C-93-A6   (hex)		Shandong Senter Electronic Co., Ltd
+600000-6FFFFF     (base 16)		Shandong Senter Electronic Co., Ltd
+				No. 18 Liuyishan Road, New&High-tech area
+				Zibo  Shandong  255086
+				CN
+
+4C-93-A6   (hex)		5Voxel Co., Ltd.
+700000-7FFFFF     (base 16)		5Voxel Co., Ltd.
+				6F-2, No.273, Nong-an St.
+				Taipei City    10482
+				TW
+
+4C-93-A6   (hex)		CELLTRON
+E00000-EFFFFF     (base 16)		CELLTRON
+				#601 L&C TOWER, 153-18 LS-ro,Sanbon
+				Gunpo  Gyeonggi  15808
+				KR
+
+28-B7-7C   (hex)		Zhuhai RongBang Electronic Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Zhuhai RongBang Electronic Technology Co., Ltd.
+				Room 110-400(central office) , building 18, Creative Valley, 1889 Huandao East road, Hengqin New District,
+				Zhuhai  GuangDong  519000
+				CN
+
+28-B7-7C   (hex)		Annapurna labs
+400000-4FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+28-B7-7C   (hex)		Convertertec Deutschland GmbH
+700000-7FFFFF     (base 16)		Convertertec Deutschland GmbH
+				Krefelder Weg 47
+				Kempen    47906
+				DE
+
+C0-61-9A   (hex)		Nanjing SinoVatio Technology Co., Ltd
+800000-8FFFFF     (base 16)		Nanjing SinoVatio Technology Co., Ltd
+				No. 888 Zhengfang Middle Rd, Jiangning District
+				Nanjing  JiangSu  211153
+				CN
+
+C0-61-9A   (hex)		Wingtech Mobile Communications  Co.,Ltd.
+900000-9FFFFF     (base 16)		Wingtech Mobile Communications  Co.,Ltd.
+				No.777,Yazhong Road,Nanhu District
+				Jiaxing  Zhejiang  314001
+				CN
+
+C0-61-9A   (hex)		Gronn Kontakt AS
+A00000-AFFFFF     (base 16)		Gronn Kontakt AS
+				Kjøita 18
+				Kristiansand    4630
+				NO
+
+98-FC-84   (hex)		Juketek Co., Ltd.
+200000-2FFFFF     (base 16)		Juketek Co., Ltd.
+				18F-6, No. 75, Sec. 1, Xintai 5th Rd., Xizhi Dist., 
+				New Taipei City    221
+				TW
+
+18-FD-CB   (hex)		CISTECH Solutions
+800000-8FFFFF     (base 16)		CISTECH Solutions
+				170 JAMES ST
+				TOOWOOMBA  QLD  4350
+				AU
+
+18-FD-CB   (hex)		SOTHIS CIC TEC (Shanghai) Co., Ltd
+100000-1FFFFF     (base 16)		SOTHIS CIC TEC (Shanghai) Co., Ltd
+				Shanghai Jiading sichenglu1250-7
+				SHANGHAI  SHANGHAI  200000
+				CN
+
+18-FD-CB   (hex)		Sercomm Corporation.
+A00000-AFFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+98-FC-84   (hex)		Shield Inc.
+A00000-AFFFFF     (base 16)		Shield Inc.
+				8F-5, No.57, Sec.1, Dunhua S. Rd., Songshan Dist.,
+				Taipei City    10557
+				TW
+
+58-20-8A   (hex)		Shangyin Intelligence Technology Shandong Co.,Ltd
+600000-6FFFFF     (base 16)		Shangyin Intelligence Technology Shandong Co.,Ltd
+				2205,Building 2,Sanqingqisheng Square,No.1666,Xinluo Street
+				Jinan  Shandong  250014
+				CN
+
+58-20-8A   (hex)		Annapurna labs
+000000-0FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+58-20-8A   (hex)		TRING
+400000-4FFFFF     (base 16)		TRING
+				Lejlekusa bb
+				Gracanica  TK  75320
+				BA
+
+58-20-8A   (hex)		Suzhou Ruilisi Technology Ltd.
+900000-9FFFFF     (base 16)		Suzhou Ruilisi Technology Ltd.
+				Gaoqingchuanmei Building, Nantiancheng Road, Xiangcheng District
+				Suzhou  Jiangsu  215000
+				CN
+
+58-20-8A   (hex)		UPM Technology, Inc
+E00000-EFFFFF     (base 16)		UPM Technology, Inc
+				3000 NE Stucki ave ste #100
+				Hillsboro    97124
+				US
+
+CC-4F-5C   (hex)		Kymati GmbH
+500000-5FFFFF     (base 16)		Kymati GmbH
+				Am Hochacker 5
+				Grasbrunn    85630
+				DE
+
+FC-CD-2F   (hex)		Loupedeck Oy
+200000-2FFFFF     (base 16)		Loupedeck Oy
+				Museokatu 8 A 6
+				Helsinki     00100
+				FI
+
+FC-CD-2F   (hex)		Aroma Retail
+900000-9FFFFF     (base 16)		Aroma Retail
+				5525 S. Valley View Blvd, ste 2
+				Las Vegas  NV  89118
+				US
+
+58-95-D8   (hex)		Sercomm Corporation.
+200000-2FFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+DC-4A-9E   (hex)		LEACH INTERNATIONAL EUROPE
+300000-3FFFFF     (base 16)		LEACH INTERNATIONAL EUROPE
+				2 RUE GOETHE
+				SARRALBE  MOSELLE  57430
+				FR
+
+DC-4A-9E   (hex)		 LongSung Technology (Shanghai) Co.,Ltd.   
+A00000-AFFFFF     (base 16)		 LongSung Technology (Shanghai) Co.,Ltd.   
+				 Room 606, Block B, Bldg. 1, No. 3000 Longdong Avenue., Zhangjiang Hi-Tech Park, Pudong District
+				ShangHai    201203
+				CN
+
+DC-4A-9E   (hex)		Nuove Tecnologie srl
+500000-5FFFFF     (base 16)		Nuove Tecnologie srl
+				VIALE RIMEMBRANZE 47/B, VAT N° IT10907840150
+				Lainate  Milan  20045
+				IT
+
+DC-4A-9E   (hex)		AiSight GmbH
+900000-9FFFFF     (base 16)		AiSight GmbH
+				Gertraudenstr 10-12
+				Berlin    10178
+				DE
+
+84-11-C2   (hex)		Leybold GmbH
+800000-8FFFFF     (base 16)		Leybold GmbH
+				Bonnerstr. 498
+				Cologne     50968
+				DE
+
+68-79-12   (hex)		LEAPS s.r.o.
+900000-9FFFFF     (base 16)		LEAPS s.r.o.
+				Na rolich 655/8
+				Praha 4  Czech  141 00
+				CZ
+
+68-79-12   (hex)		Globus Infocom Limited
+C00000-CFFFFF     (base 16)		Globus Infocom Limited
+				A 65, Sector 4, Noida
+				Noida  U P  201301
+				IN
+
+68-79-12   (hex)		Babbit and Friends, SIA
+700000-7FFFFF     (base 16)		Babbit and Friends, SIA
+				Maiznicas iela 8 - 5
+				Riga  Riga  LV1001
+				LV
+
+68-79-12   (hex)		Ametek Solidstate Controls
+E00000-EFFFFF     (base 16)		Ametek Solidstate Controls
+				875 DEARBORN DR
+				COLUMBUS  OH  43085-1586
+				US
+
+34-04-9E   (hex)		Church & Dwight Co., Inc.
+900000-9FFFFF     (base 16)		Church & Dwight Co., Inc.
+				500 Charles Ewing Blvd
+				Ewing  NJ  08628
+				US
+
+8C-47-6E   (hex)		AU Optronics Corporation
+A00000-AFFFFF     (base 16)		AU Optronics Corporation
+				No. 1 Li-Hsin Rd. 2, Hsinchu Science Park
+				Hsinchu 30078, Taiwan, R.O.C.    802
+				TW
+
+8C-47-6E   (hex)		IntelliVIX Co. Ltd.
+800000-8FFFFF     (base 16)		IntelliVIX Co. Ltd.
+				4, Hyoryeong-ro 34-gil, Seocho-gu
+				Seoul    06704
+				KR
+
+8C-AE-49   (hex)		H3 Platform
+100000-1FFFFF     (base 16)		H3 Platform
+				11F-1, No. 79, Sec. 1, Xingtai 5th rd., Xizhi
+				New Taipei    221
+				TW
+
+A4-53-EE   (hex)		MAHLE ELECTRONICS, SLU
+000000-0FFFFF     (base 16)		MAHLE ELECTRONICS, SLU
+				Ctra. Madrid-Valencia Km. 196
+				Motilla del Palancar  Cuenca  16200
+				ES
+
+A4-53-EE   (hex)		SSK CORPORATION
+D00000-DFFFFF     (base 16)		SSK CORPORATION
+				3F, M-10, Centre of Hi-Tech Industrial Park, Nanshan
+				Shenzhen    518054
+				CN
+
+A0-02-4A   (hex)		Argos Solutions AS
+400000-4FFFFF     (base 16)		Argos Solutions AS
+				Dyrmyrgata 35
+				Kongsberg    3611
+				NO
+
+A0-02-4A   (hex)		Danriver Technologies Corp.
+200000-2FFFFF     (base 16)		Danriver Technologies Corp.
+				Building 3#,  2F, Yunxin Rd. 
+				Shanghai    200436
+				CN
+
+A0-02-4A   (hex)		Kontakt Micro-Location Sp z o.o.
+900000-9FFFFF     (base 16)		Kontakt Micro-Location Sp z o.o.
+				Stoczniowcow 3
+				Krakow    30-709
+				PL
+
+A0-02-4A   (hex)		Xi'an Yingsheng Electric Technology Co.,Ltd.
+B00000-BFFFFF     (base 16)		Xi'an Yingsheng Electric Technology Co.,Ltd.
+				Room 303, building B, Xi'an University of Technology science and Technology Park, 26 Gazelle road, Zhang Ba Street office,
+				Xi'an    710065
+				CN
+
+78-D4-F1   (hex)		Quidel Corporation
+D00000-DFFFFF     (base 16)		Quidel Corporation
+				9975 Summers Ridge Road
+				San Diego  CA  92121
+				US
+
+78-D4-F1   (hex)		Xiamen Cheerzing IOT Technology Co.,Ltd.
+800000-8FFFFF     (base 16)		Xiamen Cheerzing IOT Technology Co.,Ltd.
+				Xiamen Cheerzing IOT Technology Co.,Ltd.
+				Xiamen  FuJian  361002
+				CN
+
+34-E1-D1   (hex)		Biamp
+900000-9FFFFF     (base 16)		Biamp
+				9300 SW Gemini Drive
+				Beaverton  OR  97008
+				US
+
+44-6F-D8   (hex)		ZHEJIANG HIKAILINK TECHNOLOGY Co., Ltd
+A00000-AFFFFF     (base 16)		ZHEJIANG HIKAILINK TECHNOLOGY Co., Ltd
+				Room 116, 1 / F, building 2, No. 87, Hexi, Changfeng street, Wuzhen Town, Tongxiang City
+				Jiaxing City  Zhejiang  China
+				CN
+
+44-6F-D8   (hex)		Shenzhen Mestechs Technology CO., LTD
+300000-3FFFFF     (base 16)		Shenzhen Mestechs Technology CO., LTD
+				The 3rd Floor, E4A Bldg?TCL International E city, NO.1001 zhongshanyuan Rd, Nanshan District
+				shenzhen  GuangDong  518052
+				CN
+
+98-27-82   (hex)		Guangzhou Wuzhou Technology Co, Ltd.
+500000-5FFFFF     (base 16)		Guangzhou Wuzhou Technology Co, Ltd.
+				4th Floor, Building C2, Hi-Tech Enterprise Accelerator, Kaiyuan Avenue #11, Huangpu District
+				Guangzhou  Guangdong  510530
+				CN
+
+98-27-82   (hex)		Wuxi GuoYiHaiJu Technology Co.,Ltd.
+900000-9FFFFF     (base 16)		Wuxi GuoYiHaiJu Technology Co.,Ltd.
+				Innovation Industrial Park E2-2F
+				hefei    230000
+				CN
+
+98-27-82   (hex)		Nanjing BianYu Future Home Technology Co.Ltd
+A00000-AFFFFF     (base 16)		Nanjing BianYu Future Home Technology Co.Ltd
+				 Longyu Middle Street
+				Beijing  Beijing  100085
+				CN
+
+98-27-82   (hex)		CATS Power design
+800000-8FFFFF     (base 16)		CATS Power design
+				144 route des Vernes
+				PRINGY    74370
+				FR
+
+04-11-19   (hex)		Alethea Communications Technologies Pvt. Ltd.
+200000-2FFFFF     (base 16)		Alethea Communications Technologies Pvt. Ltd.
+				2346, 17th Cross, HSR Layout
+				Bangalore  Karnataka  560102
+				IN
+
+04-11-19   (hex)		Acentury
+100000-1FFFFF     (base 16)		Acentury
+				120 West Beaver Creek Road, Unit 13
+				Richmond Hill  ON  L4B 1L2
+				CA
+
+E8-6C-C7   (hex)		CoxSpace
+A00000-AFFFFF     (base 16)		CoxSpace
+				858ho, Business Support Hub, 815, Daewangpangyo-ro Sujeong-gu
+				Seongnam  Kyeonggi-do  13449
+				KR
+
+38-B8-EB   (hex)		Sirin Mobile Technologies
+700000-7FFFFF     (base 16)		Sirin Mobile Technologies
+				Muhlentalstrasse 2
+				Schaffhausen    8200
+				CH
+
+24-5D-FC   (hex)		TORGOVYY DOM  TEHNOLOGIY LLC
+900000-9FFFFF     (base 16)		TORGOVYY DOM  TEHNOLOGIY LLC
+				Gospytalnaya 10, ap. 109, village Selyatino, city Naro-Fominsk,
+				Moscow  Moscow Region  143345
+				RU
+
+24-5D-FC   (hex)		ContactProximity Inc
+500000-5FFFFF     (base 16)		ContactProximity Inc
+				241 Arlington Street #966
+				Acton  MA  01720
+				US
+
+24-5D-FC   (hex)		CompanyDeep
+000000-0FFFFF     (base 16)		CompanyDeep
+				122, Ross Street
+				Cambridge  Cambridgeshire  CB13BU
+				GB
+
+24-5D-FC   (hex)		Guangzhou Lango Electronics Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Guangzhou Lango Electronics Technology Co.,Ltd.
+				Room 238, Room 406, No. 1, Yichuang Street, Huangpu District
+				Guangzhou  Guangdong  510336
+				CN
+
+F0-23-B9   (hex)		Shenyang Ali Technology Company Limited
+D00000-DFFFFF     (base 16)		Shenyang Ali Technology Company Limited
+				No.17-5, Wensu Street
+				Dongling District  Shenyang Liaoning Province  110168
+				CN
+
+0C-5C-B5   (hex)		Hunan Newman Car NetworKing Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Hunan Newman Car NetworKing Technology Co.,Ltd
+				128 Lixiang East Road,ChangshaEconomic and Technological Development Zone
+				Changsha  Hunan  410100
+				CN
+
+0C-5C-B5   (hex)		S2C limited
+600000-6FFFFF     (base 16)		S2C limited
+				E1 No.2555 Xiupu Rd. Pudong New Area
+				Shanghai	  Shanghai	  201135
+				CN
+
+1C-A0-EF   (hex)		Tangshan Liulin Automation Equipment Co., Ltd.
+000000-0FFFFF     (base 16)		Tangshan Liulin Automation Equipment Co., Ltd.
+				Building 110-3, No.410 Huoju Road, High-tech Zone
+				Tangshan City  Hebei Province  063000
+				CN
+
+1C-A0-EF   (hex)		LLC Gagar.In
+C00000-CFFFFF     (base 16)		LLC Gagar.In
+				Rybnikov Pereulok 1
+				Moscow    107045
+				RU
+
+1C-A0-EF   (hex)		Zillnk
+800000-8FFFFF     (base 16)		Zillnk
+				No. 505, 5 / F, Unit 2, building 1, No. 777, North Section of Yizhou Avenue, Chengdu High Tech Zone, China (Sichuan) Pilot Free Trade Zone
+				Chengdu    610000
+				CN
+
+1C-A0-EF   (hex)		Leviathan Solutions Ltd.
+400000-4FFFFF     (base 16)		Leviathan Solutions Ltd.
+				Abel Jeno utca 23
+				Budapest    1113
+				HU
+
+20-CE-2A   (hex)		Shanghai Digicube Info&Tech Co.,Ltd.
+100000-1FFFFF     (base 16)		Shanghai Digicube Info&Tech Co.,Ltd.
+				Room B, 9th floor, building 1, Hongqiao headquarters, 100 Zixiu Road, 
+				Shanghai  Minhang District  201103
+				CN
+
+20-CE-2A   (hex)		Intelligraphics
+800000-8FFFFF     (base 16)		Intelligraphics
+				11615 Angus Road, Suite #104L
+				Austin  TX  78759
+				US
+
+2C-D1-41   (hex)		Square Inc.
+D00000-DFFFFF     (base 16)		Square Inc.
+				1455 Market St.
+				San Francisco  CA  94103
+				US
+
+88-C9-B3   (hex)		shenzhen franklin ESS technology CO.,Ltd
+200000-2FFFFF     (base 16)		shenzhen franklin ESS technology CO.,Ltd
+				102, 61 Liuxian Rd 2, Baoan Dst., Shenzhen
+				shenzhen    518000
+				CN
+
+88-C9-B3   (hex)		Cervoz Technology Co; Ltd.
+100000-1FFFFF     (base 16)		Cervoz Technology Co; Ltd.
+				8F; No.10, Aly6, Ln.235, Baociao Rd; 
+				Sindian Dist.  New Taipei City  23145
+				TW
+
+C8-F5-D6   (hex)		Oscars Pro
+700000-7FFFFF     (base 16)		Oscars Pro
+				A 45, 1st Floor, Sector 4
+				Noida  Uttar Pradesh  201301
+				IN
+
+C8-F5-D6   (hex)		Pinmicro K K
+500000-5FFFFF     (base 16)		Pinmicro K K
+				Kanda Jimbocho, 2-20-13
+				Chiyoda Ku  Tokyo  1010051
+				JP
+
+D0-9F-D9   (hex)		Shenzhen eloT Technology Co.,Ltd
+D00000-DFFFFF     (base 16)		Shenzhen eloT Technology Co.,Ltd
+				North Wing of 2/F, Block 2, Viseen Technology & Business Park, No.43 Gaoxin South Ring Road
+				Shenzhen  Guangdong  518000
+				CN
+
+C0-FB-F9   (hex)		Tiandi(Changzhou) Automation Co., Ltd.
+A00000-AFFFFF     (base 16)		Tiandi(Changzhou) Automation Co., Ltd.
+				Tiandi(Changzhou) Automation Co., Ltd.
+				Changzhou  Jiangsu  213015
+				CN
+
+C0-FB-F9   (hex)		Navitas Digital Safety Ltd
+E00000-EFFFFF     (base 16)		Navitas Digital Safety Ltd
+				1ST FLOOR, 13  PHOENIX PARK 
+				COALVILLE  Leicestershire  LE673HB
+				GB
+
+D0-9F-D9   (hex)		Poten (Shanghai) Technology Co.,Ltd.
+400000-4FFFFF     (base 16)		Poten (Shanghai) Technology Co.,Ltd.
+				Rm.B,6th Fl., No.5, Caoxi Rd.251
+				Shanghai  Shanghai  200235
+				CN
+
+D0-9F-D9   (hex)		Raymax Technology Ltd.
+700000-7FFFFF     (base 16)		Raymax Technology Ltd.
+				604, Building D, No.1001 Wen Yi Xi Road
+				Hangzhou  China  310012
+				CN
+
+D0-9F-D9   (hex)		Queclink Wireless Solutions Co., Ltd.
+800000-8FFFFF     (base 16)		Queclink Wireless Solutions Co., Ltd.
+				No.30, Lane 500, Xinlong Road, Minhang District
+				Shanghai    201101
+				CN
+
+D0-9F-D9   (hex)		Fujian Newland Auto-ID Tech. Co,.Ltd.
+C00000-CFFFFF     (base 16)		Fujian Newland Auto-ID Tech. Co,.Ltd.
+				Newland Science & Technology Park, No.1 Rujiang West Rd,Mawei,Fuzhou, P.R.China
+				Fuzhou    350015
+				CN
+
+D0-9F-D9   (hex)		Lemei Intelligent IOT (Shenzhen) Co., Ltd
+000000-0FFFFF     (base 16)		Lemei Intelligent IOT (Shenzhen) Co., Ltd
+				#1101, Building #1, Yishang Sanwei Inductry Park, Zhongwu, Hangcheng Street, Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+18-74-E2   (hex)		Kano Computing Limited
+800000-8FFFFF     (base 16)		Kano Computing Limited
+				Unit 12.1 - 12.2, 11-29 Fashion Street
+				London    E1 6PX
+				GB
+
+A8-5B-36   (hex)		Luoxian (Guandong) Technology Co., Ltd
+400000-4FFFFF     (base 16)		Luoxian (Guandong) Technology Co., Ltd
+				4th floor,building 4,European Industrial Park,60 Longbao West Road,Zhangcha Town
+				FoShan  Guandong  528051
+				CN
+
+A8-5B-36   (hex)		TAIDEN INDUSTRIAL CO.,LTD
+A00000-AFFFFF     (base 16)		TAIDEN INDUSTRIAL CO.,LTD
+				6/F, Block B, Future Plaza, 6060 Qiaoxiang Rd, Nanshan District
+				Shenzhen  Guangdong   518053
+				CN
+
+F0-2A-2B   (hex)		ZiGong Pengcheng Technology Co.,Ltd
+900000-9FFFFF     (base 16)		ZiGong Pengcheng Technology Co.,Ltd
+				80?Longxiang Road?Yantan District
+				ZiGong  SiChuan   643221
+				CN
+
+A8-5B-36   (hex)		Avista Edge
+900000-9FFFFF     (base 16)		Avista Edge
+				12 N Sheridan St
+				Spokane  WA  99202
+				US
+
+F0-2A-2B   (hex)		Protronix s.r.o.
+700000-7FFFFF     (base 16)		Protronix s.r.o.
+				Pardubická 177
+				Chrudim    537 01
+				CZ
+
+F0-2A-2B   (hex)		Tobi Tribe Inc.
+100000-1FFFFF     (base 16)		Tobi Tribe Inc.
+				45945 Trefoil Ln #157
+				 Sterling  VA  20166
+				US
+
+58-48-49   (hex)		Shenzhen hongqifu Technology Co., Ltd
+600000-6FFFFF     (base 16)		Shenzhen hongqifu Technology Co., Ltd
+				1003-1004, building B, Shenye century industrial center, NO743,  Zhoushi Road, Hezhou community, Hangcheng street, Bao'an District
+				Shenzhen    518126
+				CN
+
+58-48-49   (hex)		Daatrics LTD
+B00000-BFFFFF     (base 16)		Daatrics LTD
+				4th Floor, 86-90 Paul Street
+				LONDON    EC2A 4NE
+				GB
+
+58-48-49   (hex)		Shandong Aotai Electric Co., LTD.
+700000-7FFFFF     (base 16)		Shandong Aotai Electric Co., LTD.
+				282 Bole Avenue, High-tech Development Zone Shandong P.R. China
+				Jinan  Shandong  250101
+				CN
+
+64-33-B5   (hex)		Duomondi International Development Co., Ltd.
+000000-0FFFFF     (base 16)		Duomondi International Development Co., Ltd.
+				Unit D 19/F Roxy Industry Center 59-66 Tai Lin Pai
+				Kwai Chung  NT  999077
+				HK
+
+64-33-B5   (hex)		University of Texas at Austin
+E00000-EFFFFF     (base 16)		University of Texas at Austin
+				1 University Station C3800
+				Austin  TX  78713-7407
+				US
+
+28-36-13   (hex)		Elytone Electronic Co., Ltd.
+400000-4FFFFF     (base 16)		Elytone Electronic Co., Ltd.
+				#218, Sec.2, Chung Cheng Road
+				San-Hsia District, New Taipei City    23742
+				TW
+
+28-36-13   (hex)		Qingdao Airpoint Electronics Co.,Ltd.
+900000-9FFFFF     (base 16)		Qingdao Airpoint Electronics Co.,Ltd.
+				Yuhuangling industrial Park, Xiazhuang-Rd, Chengyang-Qu
+				QingDao City  ShanDong Province  266109
+				CN
+
+78-5E-E8   (hex)		TOPDON TECHNOLOGY Co.,Ltd.
+900000-9FFFFF     (base 16)		TOPDON TECHNOLOGY Co.,Ltd.
+				Nanshan
+				Shenzhen  Guangdong  518000
+				CN
+
+78-5E-E8   (hex)		RIKEN KEIKI NARA MFG. Co., Ltd.
+100000-1FFFFF     (base 16)		RIKEN KEIKI NARA MFG. Co., Ltd.
+				49-1 Abe
+				Sakurai city    633-0054
+				JP
+
+38-A8-CD   (hex)		Shenzhen C & D Electronics Co., Ltd.
+700000-7FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+38-A8-CD   (hex)		Qingdao Hisense Hitachi Air-conditioning Systems Co.,Ltd.
+B00000-BFFFFF     (base 16)		Qingdao Hisense Hitachi Air-conditioning Systems Co.,Ltd.
+				No.218, Qianwangang Road, Qingdao Economic Development Zone, China
+				Qingdao    266510
+				CN
+
+38-A8-CD   (hex)		Beijing Porient Technology Co., Ltd
+200000-2FFFFF     (base 16)		Beijing Porient Technology Co., Ltd
+				Room 901,Power Creative A,No.1, Shangdi East Road,Haidian ,
+				BEIJING    100085
+				CN
+
+38-A8-CD   (hex)		Beijing Aumiwalker technology CO.,LTD
+C00000-CFFFFF     (base 16)		Beijing Aumiwalker technology CO.,LTD
+				Floor 6, Tower 1, No.1 Zhonghe Road Fengtai Science Park Beijing P.R.C.
+				Beijing  Beijing  100071
+				CN
+
+38-A8-CD   (hex)		Max Way Electronics Co., Ltd.
+800000-8FFFFF     (base 16)		Max Way Electronics Co., Ltd.
+				8F-12, No.121, Sec. 1, Chongqing S. Rd., Zhongzheng Dist.,
+				Taipei City    100
+				TW
+
+38-A8-CD   (hex)		ACiiST Smart Networks Ltd.
+000000-0FFFFF     (base 16)		ACiiST Smart Networks Ltd.
+				119 Ha'Mamshichim
+				Kfar Varburg    7099800
+				IL
+
+38-A8-CD   (hex)		cal4care Pte Ltd
+600000-6FFFFF     (base 16)		cal4care Pte Ltd
+				118 Aljunied AVE 2
+				SINGAPORE  SINGAPORE  380118
+				SG
+
+7C-83-34   (hex)		PEMtronics LLC
+200000-2FFFFF     (base 16)		PEMtronics LLC
+				70 SW Century Dr Ste 100 Box 427
+				Bend    97702
+				US
+
+7C-83-34   (hex)		Wojinxin Beijing Technology Co., LTD
+600000-6FFFFF     (base 16)		Wojinxin Beijing Technology Co., LTD
+				315-1, 3rd floor, No. 15, information road, Haidian District
+				Beijing    100089
+				CN
+
+7C-83-34   (hex)		Linear Logic LLC
+100000-1FFFFF     (base 16)		Linear Logic LLC
+				2222 S. Dobson Rd. Suite 800
+				Mesa  AZ  85202
+				US
+
+7C-83-34   (hex)		Fusus
+400000-4FFFFF     (base 16)		Fusus
+				5550 TRIANGLE PKWY, STE 385
+				PEACHTREE CORNERS  GA  30092
+				US
+
+1C-AE-3E   (hex)		QuEST Rail LLC
+C00000-CFFFFF     (base 16)		QuEST Rail LLC
+				106 E Highway 224
+				Wellington  MO  64097
+				US
+
+7C-83-34   (hex)		Balter GmbH
+E00000-EFFFFF     (base 16)		Balter GmbH
+				Elisabeth-Selbert-Strasse 19
+				Langenfeld    40764
+				DE
+
+1C-AE-3E   (hex)		HagerEnergy GmbH
+300000-3FFFFF     (base 16)		HagerEnergy GmbH
+				Karlstrasse 5
+				Osnabrueck    49074
+				DE
+
+98-6E-E8   (hex)		Sisgeo Srl
+800000-8FFFFF     (base 16)		Sisgeo Srl
+				Via F. Serpero 4/F1
+				Masate  Milano  20060
+				IT
+
+98-80-BB   (hex)		Hilo
+B00000-BFFFFF     (base 16)		Hilo
+				4-6 Kiprou str
+				Tavros  Athens  17778
+				GR
+
+98-80-BB   (hex)		Guangdong-Hong Kong-Macao Greater Bay Area Research Innovation Institute for Nanotechnology 
+700000-7FFFFF     (base 16)		Guangdong-Hong Kong-Macao Greater Bay Area Research Innovation Institute for Nanotechnology 
+				Building D, 136 Kaiyuan Avenue, Guangzhou High- tech Industrial Development Zone 
+				GuangZhou  Guangdong  510700
+				CN
+
+78-72-64   (hex)		Guangdong Hongqin Telecom Technology Co.,Ltd.
+300000-3FFFFF     (base 16)		Guangdong Hongqin Telecom Technology Co.,Ltd.
+				10 Keyuan Road, Songshan Lake
+				Dongguan   Guangdong   523429
+				CN
+
+98-80-BB   (hex)		Shenzhen Hebang Electronic Co., Ltd
+900000-9FFFFF     (base 16)		Shenzhen Hebang Electronic Co., Ltd
+				2nd Floor West, Bldg B, Kelunte Low Carbon Industry Park, Huarong Road, Dalang, Longhua District
+				Shenzhen    518000
+				CN
+
+78-72-64   (hex)		SmartMore Co.,ltd.
+000000-0FFFFF     (base 16)		SmartMore Co.,ltd.
+				22nd Floor,Sanhang Technology Building,Nanshan ShenZhen,China
+				 ShenZhen  GuangDong  518000
+				CN
+
+F4-70-0C   (hex)		G.S.D GROUP INC.
+C00000-CFFFFF     (base 16)		G.S.D GROUP INC.
+				2010 RUE MICHELIN, SUITE 100
+				LAVAL  Quebec  H7L 5C2
+				CA
+
+F4-70-0C   (hex)		Shenzhen Focuscom Communication Technology Co.,Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Focuscom Communication Technology Co.,Ltd.
+				209, Integrated Circuit Industrial Park, Chaguang Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+F4-70-0C   (hex)		Union Source Technology(HK)LTD
+300000-3FFFFF     (base 16)		Union Source Technology(HK)LTD
+				FLAT/RM 1405B 14/F THE BELGIAN BANK BUILDING NOS.721-725 NATHAN ROAD MONGKOK
+				Hong Kong    999077
+				HK
+
+78-72-64   (hex)		BZBGEAR
+200000-2FFFFF     (base 16)		BZBGEAR
+				830 National dr ste 140
+				Sacramento  CA  95834
+				US
+
+F4-70-0C   (hex)		Jinan Huake Electrical Device Co., Ltd.
+A00000-AFFFFF     (base 16)		Jinan Huake Electrical Device Co., Ltd.
+				Room 415-7, Hongxing Building, No.1 Hongxing Road, Licheng District, 
+				Jinan  Shandong  250000
+				CN
+
+C8-63-14   (hex)		Freeus LLC
+C00000-CFFFFF     (base 16)		Freeus LLC
+				1069 Stewart Drive, Suites 3-6
+				Ogden  UT  84404
+				US
+
+F4-A4-54   (hex)		Graco Inc.
+B00000-BFFFFF     (base 16)		Graco Inc.
+				PO Box 1441 
+				Minneapolis    55440
+				US
+
+74-F8-DB   (hex)		ATX
+300000-3FFFFF     (base 16)		ATX
+				5850 Hellyer Ave
+				San Jose  CA  95138
+				US
+
+F4-A4-54   (hex)		PT Telkom Indonesia
+100000-1FFFFF     (base 16)		PT Telkom Indonesia
+				Jl. Gegerkalong Hilir no. 47, Sukasari
+				Bandung  West Java  40152
+				ID
+
+F4-A4-54   (hex)		Care Bloom, LLC
+E00000-EFFFFF     (base 16)		Care Bloom, LLC
+				3401 Enterprise Parkway, Suite 205
+				Cleveland  OH  44122
+				US
+
+F4-A4-54   (hex)		SAEL SRL
+D00000-DFFFFF     (base 16)		SAEL SRL
+				Via Tavani, 2/F
+				Delebio  Sondrio  23014
+				IT
+
+18-45-B3   (hex)		Hangzhou CCRFID Microelectronic Co., Ltd.
+B00000-BFFFFF     (base 16)		Hangzhou CCRFID Microelectronic Co., Ltd.
+				East Zone,building four,Hangzhou Hi-tech Software park, NO.1 Weiye Road, Bin jiang District
+				Hangzhou  Zhejiang  330046
+				CN
+
+18-45-B3   (hex)		Taicang T&W Electronics
+D00000-DFFFFF     (base 16)		Taicang T&W Electronics
+				89# Jiang Nan RD
+				Suzhou  Jiangsu  215412
+				CN
+
+18-45-B3   (hex)		Ancsonic (chongqing) Electronic Science& Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Ancsonic (chongqing) Electronic Science& Technology Co.,Ltd
+				No.644, No.117 yunhan Avenue, Beibei District, Chongqing, China
+				chongqing    4000000
+				CN
+
+18-45-B3   (hex)		Teko Telecom Srl
+900000-9FFFFF     (base 16)		Teko Telecom Srl
+				via Meucci 24/a
+				Castel San Pietro Terme  Bologna  40024
+				IT
+
+94-C9-B7   (hex)		Zhejiang Hengjie Communication Technology Co,. Ltd.
+400000-4FFFFF     (base 16)		Zhejiang Hengjie Communication Technology Co,. Ltd.
+				East 3F 23Building, Wenzhou National University Science Park, NO. 89 FengFang road, Ouhai econmic development Zone,
+				Wenzhou  Zhejiang  325000
+				CN
+
+08-F8-0D   (hex)		SEDA CHEMICAL PRODUCTS CO., LTD.
+600000-6FFFFF     (base 16)		SEDA CHEMICAL PRODUCTS CO., LTD.
+				No 56, Bade Rd., Yingge Dist.,
+				New Taipei City    23942
+				TW
+
+08-F8-0D   (hex)		Benelink Technology Inc.
+900000-9FFFFF     (base 16)		Benelink Technology Inc.
+				6F, No.95, Xinhu 1st Rd., Neihu Dist.
+				Taipei    114
+				TW
+
+50-A0-30   (hex)		GUANGZHOU UNIPOWER COMPUTER CO.,LTD
+C00000-CFFFFF     (base 16)		GUANGZHOU UNIPOWER COMPUTER CO.,LTD
+				Room 3203, No. 233 Tianhe North Road, Tianhe District,
+				Guangzhou    510000
+				CN
+
+50-A0-30   (hex)		GE Medical System China Co. Ltd.
+800000-8FFFFF     (base 16)		GE Medical System China Co. Ltd.
+				No. 19 ChangJiang Road National Hi-Tech DEV. Zone
+				Wuxi  Jiangsu  214028
+				CN
+
+50-A0-30   (hex)		Gopod Group Limited
+000000-0FFFFF     (base 16)		Gopod Group Limited
+				5-6/f,building 8,Lianjian Industrial Park,Longhua
+				Shenzhen    518109
+				CN
+
+50-A0-30   (hex)		RealWear (Shanghai) Intelligent Technology Co. Ltd
+300000-3FFFFF     (base 16)		RealWear (Shanghai) Intelligent Technology Co. Ltd
+				2F,Block21, No.55 Chuanhe Road, Pudong New District
+				Shanghai  Shanghai  201210
+				CN
+
+04-EE-E8   (hex)		Privacy Hero
+900000-9FFFFF     (base 16)		Privacy Hero
+				3-1136 Centre Street, suite 152
+				Thornhill  Ontario  L4J 3M8
+				CA
+
+04-EE-E8   (hex)		Hunan Yaguan Communication Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Hunan Yaguan Communication Technology Co.,Ltd
+				13th Floor, China Power Software Park, High-tech Development Zone, Changsha City
+				Changsha    410000
+				CN
+
+04-EE-E8   (hex)		NALSSEN INC.
+600000-6FFFFF     (base 16)		NALSSEN INC.
+				17, Yeokgok-ro 13beon-gil, Bucheon-si, Gyeonggi-do, Republic of Korea
+				Gyeonggi-do  Gyeonggi-do  14671
+				KR
+
+04-EE-E8   (hex)		Best Integration Technology Co., Ltd.
+E00000-EFFFFF     (base 16)		Best Integration Technology Co., Ltd.
+				5F., No.1, Ln.63, Guanxin Rd., East Dist
+				Hsinchu City  Taiwan  30072
+				TW
+
+04-EE-E8   (hex)		Zoomlion Huanuo(Beijing)Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Zoomlion Huanuo(Beijing)Technology Co.,Ltd
+				Room 401, floor 4, unit 2, building 26, yard 1, Disheng North Street, Beijing Economic and Technological Development Zone, Beijing
+				Beijing    100000
+				CN
+
+18-D7-93   (hex)		Shenzhen JieXingTong Technology Co.,LTD
+000000-0FFFFF     (base 16)		Shenzhen JieXingTong Technology Co.,LTD
+				3rd floor,block C,B6 building,China Merchants guangming science and technology park,No.3009 guanguang road,Guangming New District,
+				Shenzhen    518000
+				CN
+
+18-D7-93   (hex)		Verification & Validation Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Verification & Validation Technology Co.,Ltd
+				Room 1802, Building 3, Xunmei Technology Plaza, No.8 Keyuan Road, Science Park Community, Yuehai Street, Nanshan District  
+				shenzhen  guangdong  518057
+				CN
+
+18-D7-93   (hex)		Torsa Global
+800000-8FFFFF     (base 16)		Torsa Global
+				C/ Severo Ochoa, 19
+				Malaga  Malaga  29590
+				ES
+
+DC-36-43   (hex)		Wuhan Linptech Co. ,Ltd.
+200000-2FFFFF     (base 16)		Wuhan Linptech Co. ,Ltd.
+				3F,Bldg 1A,Lianxiang Enterprise Center
+				Wuhan  Hubei  430074
+				CN
+
+08-26-AE   (hex)		F-Plus Mobile LLC
+B00000-BFFFFF     (base 16)		F-Plus Mobile LLC
+				Preobrazhenskaya square, 8, floor 27, pom. LXXXVI, room 1.
+				Moscow  Moscow  107061
+				RU
+
+08-26-AE   (hex)		Beijing Silion Technology Corp.,Ltd.
+100000-1FFFFF     (base 16)		Beijing Silion Technology Corp.,Ltd.
+				#508, Building A, No.3 Longyu North St.
+				Changping  Beijing  102200
+				CN
+
+DC-36-43   (hex)		Shenzhen smart-core technology co.,ltd.
+600000-6FFFFF     (base 16)		Shenzhen smart-core technology co.,ltd.
+				19/F., Finance & Technology Building, No.11 Keyuan Road, Nanshan Dist., Shenzhen, China
+				Shenzhen  Guangdong  518057
+				CN
+
+08-26-AE   (hex)		ShineTech Electronics Co., Ltd
+800000-8FFFFF     (base 16)		ShineTech Electronics Co., Ltd
+				No.169, Anji St., Zuoying Dist.
+				Kaohsiung    813018
+				TW
+
+08-26-AE   (hex)		SHENNAN CIRCUITS CO.,LTD
+500000-5FFFFF     (base 16)		SHENNAN CIRCUITS CO.,LTD
+				Gao Qiao Industrial Park East,Long Gang District,
+				Shenzhen  Guangdong  518117
+				CN
+
+DC-36-43   (hex)		UKG
+700000-7FFFFF     (base 16)		UKG
+				900 Chelmsford St
+				Lowell  MA  01851
+				US
+
+DC-36-43   (hex)		Beijing L&S Lancom Platform Tech. Co., Ltd.
+E00000-EFFFFF     (base 16)		Beijing L&S Lancom Platform Tech. Co., Ltd.
+				901,floor 9, jelly loft, building 28, yard 9, Huinan Road, Changping District.
+				Beijing    102208
+				CN
+
+08-26-AE   (hex)		Annapurna labs
+900000-9FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+98-8F-E0   (hex)		Shenzhen Vitalitim Technology Co., Ltd
+D00000-DFFFFF     (base 16)		Shenzhen Vitalitim Technology Co., Ltd
+				83C21J, 3rd Floor, Tianjing Building, Tian'an Digital City, No. 6, Tairan 5th Road, Tian'an Community, Shatou Street, Futian District,
+				Shenzhen  Guangdong  518000
+				CN
+
+98-8F-E0   (hex)		GUANGZHOU HERYSTORM TECHNOLOGY CO.,LTD.
+100000-1FFFFF     (base 16)		GUANGZHOU HERYSTORM TECHNOLOGY CO.,LTD.
+				No.2-8,Nancun North Street,Panyun District,
+				Guangzhou    511400
+				CN
+
+10-54-D2   (hex)		Raylogic Control Systems Private Limited
+400000-4FFFFF     (base 16)		Raylogic Control Systems Private Limited
+				Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West
+				Mumbai  Maharashtra  400054
+				IN
+
+10-54-D2   (hex)		Bamboo Dynamics Corporation., Ltd.
+900000-9FFFFF     (base 16)		Bamboo Dynamics Corporation., Ltd.
+				No.146, Sec. 1,Donxing Rd.
+				Zhubei City, Hsinchu County   Taiwan  302058
+				TW
+
+10-54-D2   (hex)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+700000-7FFFFF     (base 16)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+				Bldg.7, N.Industrial Park,No.18 Makan Rd,Xili,Nanshan,
+				SHENZHEN    518000
+				CN
+
+0C-86-29   (hex)		Shanghai Prophet Electronic Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Shanghai Prophet Electronic Technology Co.,Ltd
+				9th Floor, Building 3, 1535 Hongmei Road, Xuhui District,
+				Shanghai    200030
+				CN
+
+0C-86-29   (hex)		Beijing Qinmu Data Technology Co., Ltd.
+100000-1FFFFF     (base 16)		Beijing Qinmu Data Technology Co., Ltd.
+				Room101,Office 701,Floor7,Building4,Courtyard1,Nongda South Road,Haidian District.
+				Beijing    100085
+				CN
+
+0C-86-29   (hex)		C&A Marketing, INC.
+600000-6FFFFF     (base 16)		C&A Marketing, INC.
+				114 Tived Lane East
+				Edison   NJ  08837
+				US
+
+10-54-D2   (hex)		Sybersense
+500000-5FFFFF     (base 16)		Sybersense
+				Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK
+				Hong Kong    999077
+				CN
+
+0C-86-29   (hex)		MyGregor Ltd
+800000-8FFFFF     (base 16)		MyGregor Ltd
+				11A, Carnegie str.
+				Sofia    1000
+				BG
+
+6C-93-08   (hex)		Annapurna labs
+D00000-DFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+6C-93-08   (hex)		Shenzhen TOPWAY Technology Co.,LTD
+A00000-AFFFFF     (base 16)		Shenzhen TOPWAY Technology Co.,LTD
+				Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist
+				ShenZhen  Guangdong  518055
+				CN
+
+6C-93-08   (hex)		Shenzhen DOOGEE Hengtong Technology CO., LTD
+900000-9FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO., LTD
+				B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District
+				Shenzhen  Guangdong  518000
+				CN
+
+30-43-D7   (hex)		SYMES SA
+000000-0FFFFF     (base 16)		SYMES SA
+				4 allée technopolis, chemin des presses
+				Cagnes sur mer  PACA  06800
+				FR
+
+30-43-D7   (hex)		Shenzhen Mees Hi-Tech Co., Ltd
+500000-5FFFFF     (base 16)		Shenzhen Mees Hi-Tech Co., Ltd
+				2F & 4F,Building 3 North District,2nd Qianjin Road,Liutang Village, Xixiang,Bao'an District
+				Shenzhen  Guangdong  518102
+				CN
+
+30-43-D7   (hex)		Annapurna labs
+D00000-DFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+6C-93-08   (hex)		ANDDORO LLC
+E00000-EFFFFF     (base 16)		ANDDORO LLC
+				1430 Broadway NY 
+				New York  NY  10018
+				US
+
+38-1F-26   (hex)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
+500000-5FFFFF     (base 16)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
+				Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, 
+				Jiaxing    314000
+				CN
+
+38-1F-26   (hex)		Synamedia
+200000-2FFFFF     (base 16)		Synamedia
+				Luipaardstraat 12
+				Kortrijk  West-Vlaanderen  8500
+				BE
+
+38-1F-26   (hex)		Jade Bird Fire Co., Ltd.
+C00000-CFFFFF     (base 16)		Jade Bird Fire Co., Ltd.
+				Jade Bird Building, 207 Chengfu Road, Haidian District, Beijing, P.R.China
+				Beijing    100871
+				CN
+
+18-A5-9C   (hex)		Omwave
+000000-0FFFFF     (base 16)		Omwave
+				5 rue Barbes
+				Montrouge    92120
+				FR
+
+18-A5-9C   (hex)		INTEGRAL PLUS
+600000-6FFFFF     (base 16)		INTEGRAL PLUS
+				ul. Khalitova, 2
+				Kazan    420029
+				RU
+
+18-A5-9C   (hex)		estun automation co.,ltd
+900000-9FFFFF     (base 16)		estun automation co.,ltd
+				1888 Jiyin Avenue,Jiangning District
+				nanjing    211100
+				CN
+
+1C-59-74   (hex)		Shenzhen Geshem Technology Co Ltd
+D00000-DFFFFF     (base 16)		Shenzhen Geshem Technology Co Ltd
+				12th Floor, Block B, Building 7, International Innovation Valley
+				Shenzhen  Gunagdong  518000
+				CN
+
+1C-59-74   (hex)		King-On Technology Ltd.
+C00000-CFFFFF     (base 16)		King-On Technology Ltd.
+				13F, No.207-2, Sec#3, Beixin Rd., Xindian District.
+				New Taipei  Taiwan  23146
+				TW
+
+1C-59-74   (hex)		Topway Global Technology Limited
+800000-8FFFFF     (base 16)		Topway Global Technology Limited
+				Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong  
+				Hong Kong  Hong Kong  999077
+				HK
+
+18-A5-9C   (hex)		Annapurna labs
+D00000-DFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+18-A5-9C   (hex)		BMC Messsysteme GmbH
+E00000-EFFFFF     (base 16)		BMC Messsysteme GmbH
+				Haupstr. 21
+				Maisach    82216
+				DE
+
+1C-59-74   (hex)		Jiangsu Welm Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Jiangsu Welm Technology Co.,Ltd
+				No.158 Jianghai WestRoad,Haian
+				Haian  Jiangsu  226100
+				CN
+
+1C-59-74   (hex)		Logical Infrastructure PTY LTD
+100000-1FFFFF     (base 16)		Logical Infrastructure PTY LTD
+				unit 2, 8 Carbine way
+				Mornington  Victoria  3931
+				AU
+
+1C-59-74   (hex)		Shenzhen Shi Fang Communication Technology Co., Ltd
+500000-5FFFFF     (base 16)		Shenzhen Shi Fang Communication Technology Co., Ltd
+				601-6 Mitehuapujing No.9 Jinxiu Mid Road Longtian Street Pingshan Distinct
+				Shenzhen   Guangdong  518118
+				CN
+
+1C-59-74   (hex)		Lynxi Technologies Co.,Ltd.
+700000-7FFFFF     (base 16)		Lynxi Technologies Co.,Ltd.
+				RM 801, 8/F, No. 67 North 4th Ring West Road
+				Beijing  Beijing  100084
+				CN
+
+6C-15-24   (hex)		D-HOME SMAART
+900000-9FFFFF     (base 16)		D-HOME SMAART
+				8, rue Edouard Herriot
+				Marigny le Châtel    10350
+				FR
+
+6C-15-24   (hex)		Forcite Helmet Systems Pty Ltd
+300000-3FFFFF     (base 16)		Forcite Helmet Systems Pty Ltd
+				35-39 Bourke Road, Alexandria
+				Sydney  NSW  2015
+				AU
+
+6C-15-24   (hex)		Kunshan Abram Software Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Kunshan Abram Software Technology Co.,Ltd.
+				Room 704, No. 666, Changjiang South Road
+				Kunshan  Jiangsu  215300
+				CN
+
+6C-15-24   (hex)		Magicyo Technology CO., LTD.
+400000-4FFFFF     (base 16)		Magicyo Technology CO., LTD.
+				7F, Tower A, YuZhou Building, No.78 North Keyuan
+				Shenzhen  Nanshan District  518057
+				CN
+
+70-50-E7   (hex)		shenzhen newbridge communication equipment CO.,LTD
+C00000-CFFFFF     (base 16)		shenzhen newbridge communication equipment CO.,LTD
+				5 / F, No. 1 building, Jinli Industrial Park, No. 1, LanJin Sixth Road, Nanbu community, Longtian street, Pingshan District, Shenzhen
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+70-50-E7   (hex)		Quantumdoor Technologies, Inc.
+400000-4FFFFF     (base 16)		Quantumdoor Technologies, Inc.
+				1st Floor 108-1,Buiding5,East Districe,No.10 Xibeiwang East Road,haidian Districe,
+				beijing    102629
+				CN
+
+80-02-F4   (hex)		Shenzhen Suanzi Technology Co., Ltd
+300000-3FFFFF     (base 16)		Shenzhen Suanzi Technology Co., Ltd
+				Room 207, Research Building, Tsinghua Information Port, No.1, Songpingshan New East Road, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+8C-51-09   (hex)		TianJin JointOptic Technology Co., LTD.
+000000-0FFFFF     (base 16)		TianJin JointOptic Technology Co., LTD.
+				Floor 3, Building 6, Teda Service Outsourcing Industrial Park, 19 Xinhuan West Road, Binhai New Area, 
+				Tianjin    300000
+				CN
+
+8C-51-09   (hex)		Shenzhen WOWOTO Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Shenzhen WOWOTO Technology Co., Ltd.
+				Room B508,Building B,Gaoxingqi Industrial Park,Liuxian 1st Road,District 67,Bao'an
+				Shenzhen  Guangdong  518100
+				CN
+
+8C-51-09   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+A00000-AFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+E4-95-6E   (hex)		Tband srl
+100000-1FFFFF     (base 16)		Tband srl
+				Via Camucina 27/A
+				PORTOGRUARO  Venezia  30026
+				IT
+
+8C-51-09   (hex)		Beijing Superhexa Century Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Beijing Superhexa Century Technology Co., Ltd.
+				Room 1022, 1F, Zone A, No.1, South Back Street, Anningzhuang, Haidian District, Beijing
+				Beijing    100010
+				CN
+
+0C-7F-ED   (hex)		ALT Co., Ltd.
+D00000-DFFFFF     (base 16)		ALT Co., Ltd.
+				#1201, 8, Seongnam-dearo 331beon-gil
+				Bundang-gu, Seongnam-si  Gyeonggi-do  13558
+				KR
+
+0C-7F-ED   (hex)		Netweb Technologies India Pvt Ltd
+600000-6FFFFF     (base 16)		Netweb Technologies India Pvt Ltd
+				Plot H1, Pocket-9, FIT,Sector-57, Ballabhgarh
+				Faridabad  Haryana  121004
+				IN
+
+0C-7F-ED   (hex)		Shenzhen ORVIBO Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd.
+				F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC.
+				shenzhen    518000
+				CN
+
+FC-61-79   (hex)		Kvaliteta Systems and Solutions Private Limited 
+700000-7FFFFF     (base 16)		Kvaliteta Systems and Solutions Private Limited 
+				2207 Yamuna Building Techno Park Phase 3
+				Trivandrum  Kerala   695583
+				IN
+
+2C-69-1D   (hex)		Shenzhen Gigalight Technology Co., Ltd
+700000-7FFFFF     (base 16)		Shenzhen Gigalight Technology Co., Ltd
+				2/f, Block F3, Changfeng Ind. Park, Liuxian 3 Rd., Shenzhen, Guangdong, China 1/f, Block F4, Changfeng Ind. Park, 68 Zone,Baoan District,Shenzhen,China
+				Shenzhen  Guangdong  518100
+				CN
+
+30-3D-51   (hex)		TalkGo, Inc.
+C00000-CFFFFF     (base 16)		TalkGo, Inc.
+				3518 Fremont Ave N#473
+				Seattle  WA  98103
+				US
+
+2C-69-1D   (hex)		KATEK SE
+100000-1FFFFF     (base 16)		KATEK SE
+				Promenadeplatz 12
+				Munich    80333
+				DE
+
+2C-69-1D   (hex)		Panasonic Appliances Marketing Asia Pacific
+A00000-AFFFFF     (base 16)		Panasonic Appliances Marketing Asia Pacific
+				Lot 10, Jalan 13/2 
+				Petaling Jaya   Selangor  46200
+				MY
+
+88-3C-C5   (hex)		Wuhan Guangying Intelligence Technology Co., Ltd
+800000-8FFFFF     (base 16)		Wuhan Guangying Intelligence Technology Co., Ltd
+				Optics Valley High tech building, No. 2, Jiayuan Road, Hongshan District, Wuhan
+				Wuhan  HuBei  430074
+				CN
+
+18-C3-F4   (hex)		Changsha Kiloview Electronics Co., Ltd.
+200000-2FFFFF     (base 16)		Changsha Kiloview Electronics Co., Ltd.
+				B4-106/109, Jiahua Intelligence Valley Industrial Park, 877 Huijin Road, Yuhua District
+				Changsha  Hunan  410001
+				CN
+
+18-C3-F4   (hex)		VeriFone Systems (China), Inc.
+600000-6FFFFF     (base 16)		VeriFone Systems (China), Inc.
+				Ine.2nd  Floor,No 39,Region  C,Tongpan Road,Gulou District
+				Fuzhou  Fujian  350000
+				CN
+
+E8-6C-C7   (hex)		Huaqin Technology Co.,Ltd.
+700000-7FFFFF     (base 16)		Huaqin Technology Co.,Ltd.
+				No. 10 Keyuan Road, Songshan Lake
+				Dongguan  Guangdong  523808
+				CN
+
+88-3C-C5   (hex)		Hanwei Electronics Group Corporation
+100000-1FFFFF     (base 16)		Hanwei Electronics Group Corporation
+				No.169,Xue Song Road National Hi-Tech Zone
+				Zhengzhou  Henan  450001
+				CN
+
+88-3C-C5   (hex)		mfJebsen Electronics Ltd.
+600000-6FFFFF     (base 16)		mfJebsen Electronics Ltd.
+				RM2509, Island Place Tower510 King's Road, North Point
+				Hong Kong    999077
+				HK
+
+58-47-CA   (hex)		Hexagon Metrology Services Ltd.
+100000-1FFFFF     (base 16)		Hexagon Metrology Services Ltd.
+				Metrology House, Halesfield 13
+				Telford    TF7 4PL
+				GB
+
+D4-20-00   (hex)		Dalian Baishengyuan Technology Co.,Ltd
+800000-8FFFFF     (base 16)		Dalian Baishengyuan Technology Co.,Ltd
+				3 F, Block A, no.3 Kehai Street, Dalian High-tech Industrial Park, Liaoning Province
+				Dalian    116023
+				CN
+
+0C-73-EB   (hex)		Dana
+A00000-AFFFFF     (base 16)		Dana
+				3939 Technology Drive
+				Maumee  OH  43537
+				US
+
+D4-20-00   (hex)		Shenzhen Volt IoT technology co.,ltd.
+B00000-BFFFFF     (base 16)		Shenzhen Volt IoT technology co.,ltd.
+				Room 902, Building B, Industry-University-Research Building, Wuhan University, Yuehai Street, Nanshan District, Shenzhen
+				Shenzhen  guangdong  518054
+				CN
+
+C4-83-72   (hex)		NextSilicon
+300000-3FFFFF     (base 16)		NextSilicon
+				Derekh Begin 33
+				Gibatayim    5348303
+				IL
+
+C4-83-72   (hex)		Suzhou LZY technology Co.,Ltd
+E00000-EFFFFF     (base 16)		Suzhou LZY technology Co.,Ltd
+				No.88,Yandangshan Road,New district,Suzhou
+				Suzhou  Jiangsu  215153
+				CN
+
+C4-98-94   (hex)		BTL Industries JSC
+300000-3FFFFF     (base 16)		BTL Industries JSC
+				str. Tsar Kaloyan 8
+				Sofia  Sofia  1000
+				BG
+
+C4-98-94   (hex)		Shenzhen  Hexin Automation Technology Co.,Ltd.
+900000-9FFFFF     (base 16)		Shenzhen  Hexin Automation Technology Co.,Ltd.
+				Room 402, Building 7, Hanwei International Zone 2, No. 186, South Fourth Ring West Road, Fengtai District,
+				beijing    100160
+				CN
+
+C4-98-94   (hex)		Pliem (Shanghai) Intelligent Technology Co., Ltd
+800000-8FFFFF     (base 16)		Pliem (Shanghai) Intelligent Technology Co., Ltd
+				Room 508, No. 9, Lane 205, Gaoji Road, Songjiang District
+				Shanghai  Shanghai  201601
+				CN
+
+C4-98-94   (hex)		Metasphere Ltd
+200000-2FFFFF     (base 16)		Metasphere Ltd
+				Metasphere LtdMillfieldDorking Road
+				Tadworth  Surrey  KT20 7TD
+				GB
+
+C4-98-94   (hex)		Zhejiang Rexense loT Technology Co., Ltd
+C00000-CFFFFF     (base 16)		Zhejiang Rexense loT Technology Co., Ltd
+				6th floor, building 4, No. 6, Longzhou Road, Yuhang District
+				Hangzhou  Zhejiang  311121
+				CN
+
+C4-98-94   (hex)		Hans Sasserath GmbH & Co. KG
+E00000-EFFFFF     (base 16)		Hans Sasserath GmbH & Co. KG
+				Mühlenstraße 62
+				Korschenbroich    41352
+				DE
+
+D0-96-86   (hex)		Hero Health Inc.
+A00000-AFFFFF     (base 16)		Hero Health Inc.
+				85 Broad St. 17th Floor
+				New York  NY  10004
+				US
+
+D0-96-86   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+000000-0FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+4C-74-A7   (hex)		Annapurna labs
+800000-8FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+D4-61-37   (hex)		Wistron Corporation
+000000-0FFFFF     (base 16)		Wistron Corporation
+				 NO.5, HSIN AN ROAD, SCIENCE-BASED INDUSTRIAL PARK, HSINCHU, TAIWAN, R.O.C.
+				Hsinchu County  Taiwan  303036
+				TW
+
+D4-61-37   (hex)		Estelle AB
+500000-5FFFFF     (base 16)		Estelle AB
+				Sveavägen 124
+				Stockholm  -  113 50
+				SE
+
+F0-22-1D   (hex)		Vcognition Technologies Inc.
+600000-6FFFFF     (base 16)		Vcognition Technologies Inc.
+				12901 Nicholson RdSte 150
+				Farmers Branch  TX  75234
+				US
+
+F0-22-1D   (hex)		ShenZhen Shizao Electronic Technology
+300000-3FFFFF     (base 16)		ShenZhen Shizao Electronic Technology
+				NO.8 RuiYuan Road, Bo Gang SongShan Industrial Zone, ShaJing, Bao'an District, ShenZhen, P.R.China
+				ShenZhen  Guangdong  518100
+				CN
+
+F0-22-1D   (hex)		Synergies Intelligent Systems Inc.
+400000-4FFFFF     (base 16)		Synergies Intelligent Systems Inc.
+				11F, Number 277, Songren Rd, Xinyi District, Taipei City, Taiwan 110 
+				Taipei  Taiwan  101
+				TW
+
+E0-38-2D   (hex)		SERCOMM PHILIPPINES INC
+B00000-BFFFFF     (base 16)		SERCOMM PHILIPPINES INC
+				Lot 1 & 5, Phase 1, Filinvest Technology Park 1, Brgy. Punta, Calamba City
+				Calamba    Lot 1
+				PH
+
+E0-38-2D   (hex)		Famar Fueguina S.A.
+700000-7FFFFF     (base 16)		Famar Fueguina S.A.
+				Rodney 70
+				Buenos Aires    1427
+				AR
+
+E0-38-2D   (hex)		Anysafe
+E00000-EFFFFF     (base 16)		Anysafe
+				512, Block W1-B, High-tech Industrial Village, No. 034, Gaoxin South Fourth Road, Yuehai Street, Nanshan District
+				Shenzhen  Guangdong  518001
+				CN
+
+84-B3-86   (hex)		Sineng electric CO., Ltd
+B00000-BFFFFF     (base 16)		Sineng electric CO., Ltd
+				No.6 He hui Road, Hui shan District
+				Wu Xi City  Jiang su  214000
+				CN
+
+84-B3-86   (hex)		Nan Jing WZX Technology Limited
+000000-0FFFFF     (base 16)		Nan Jing WZX Technology Limited
+				1-4/F, Productivity building,NO5,High-tech Middle 2nd Road,Science and Technology Park, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+84-B3-86   (hex)		FOTILE GROUP NINGBO FOTILE KITCHENWARE Co.,Ltd
+700000-7FFFFF     (base 16)		FOTILE GROUP NINGBO FOTILE KITCHENWARE Co.,Ltd
+				218 Binhai Second Road, Hangzhou Bay New Area
+				Cixi  Zhejiang  315300
+				CN
+
+84-B3-86   (hex)		Palomar Products Inc
+C00000-CFFFFF     (base 16)		Palomar Products Inc
+				23042 Arroyo Vista
+				Rancho Santa Margarita  CA  92688
+				US
+
+C4-A5-59   (hex)		Motive Technologies, Inc.
+100000-1FFFFF     (base 16)		Motive Technologies, Inc.
+				55 Hawthorne St, Ste. 400
+				San Francisco  CA  94105
+				US
+
+C4-A5-59   (hex)		SHENZHEN ORFA TECH CO., LTD
+200000-2FFFFF     (base 16)		SHENZHEN ORFA TECH CO., LTD
+				Room 205, Building 4, Hongmumian Industrial Park, Longgang district,
+				Shenzhen  Guangdong  518000
+				CN
+
+70-5A-6F   (hex)		Earfun Technology (HK) Limited
+600000-6FFFFF     (base 16)		Earfun Technology (HK) Limited
+				FLAT/RM A 9F, SILVERCORP INTERNATIONAL TOWER 707-713 NATHAN ROAD MONGKOK KL
+				HONG KONG    999077
+				CN
+
+A0-C5-F2   (hex)		CoolR Group Inc
+800000-8FFFFF     (base 16)		CoolR Group Inc
+				4451 Brookfield Corporate Drive, Suite 111
+				Chantilly  VA  20151
+				US
+
+8C-5D-B2   (hex)		F+ Networks
+200000-2FFFFF     (base 16)		F+ Networks
+				Polyarnaya st.31 str.1
+				Moscow  Moscow  127282
+				RU
+
+A0-22-4E   (hex)		PoE Texas
+100000-1FFFFF     (base 16)		PoE Texas
+				11821 Buckner Rd
+				Austin  TX  78726
+				US
+
+C0-EA-C3   (hex)		Techem Energy Services GmbH
+500000-5FFFFF     (base 16)		Techem Energy Services GmbH
+				Haupstraße 89,
+				Eschborn  Hessen  65760
+				DE
+
+C0-EA-C3   (hex)		Kontron Asia Technology Inc.
+D00000-DFFFFF     (base 16)		Kontron Asia Technology Inc.
+				5F, No.415, Ti-Ding Blvd., Sec. 2, Neihu Dist.,
+				Taipei  Taiwan  11493
+				TW
+
+7C-45-F9   (hex)		Feller AG
+800000-8FFFFF     (base 16)		Feller AG
+				Bergstrasse 70
+				Horgen    8810
+				CH
+
+C0-EA-C3   (hex)		Anhui Shengjiaruiduo Electronic Technology Co., Ltd.
+000000-0FFFFF     (base 16)		Anhui Shengjiaruiduo Electronic Technology Co., Ltd.
+				1-2-A33, Building A, No. 111 Bantang Road, Chaohu Economic Development Zone
+				Chaohu    238000
+				CN
+
+7C-45-F9   (hex)		Dongguan Boyye Industrial Co., Ltd
+200000-2FFFFF     (base 16)		Dongguan Boyye Industrial Co., Ltd
+				Room 401&501, BuildingH,No.16, Ming Zhu 1st Road, She Bei Village, Huangjiang Town
+				Dongguan  Guangdong  523750
+				CN
+
+5C-6A-EC   (hex)		Shanghai Yunsilicon Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Shanghai Yunsilicon Technology Co., Ltd.
+				Unit 01, 02, 03, 06, 2F, No.3, Lane 5005, Shenjiang Road, Zhangjiang High-Tech Park, Shanghai, China
+				Shanghai    201206
+				CN
+
+7C-45-F9   (hex)		Georg Fischer Piping Systems Ltd.
+700000-7FFFFF     (base 16)		Georg Fischer Piping Systems Ltd.
+				Ebnatstrasse 111
+				Schaffhausen    8201
+				CH
+
+24-15-10   (hex)		Medicomp, Inc
+800000-8FFFFF     (base 16)		Medicomp, Inc
+				600 Atlantis Rd
+				Melbourne  FL  32904
+				US
+
+5C-6A-EC   (hex)		GeneTouch Corp.
+400000-4FFFFF     (base 16)		GeneTouch Corp.
+				No. 9, Neixi Rd., Luzhu Dist., Taoyuan City 338, Taiwan (R.O.C.)
+				Taoyuan City    338012
+				TW
+
+5C-6A-EC   (hex)		Exaterra Ltd.
+500000-5FFFFF     (base 16)		Exaterra Ltd.
+				11 Amal Str.
+				Rosh-Ha'ayin    4809239
+				IL
+
+D0-93-95   (hex)		Zhejiang Ruiyi lntelligent Technology Co. Ltd
+000000-0FFFFF     (base 16)		Zhejiang Ruiyi lntelligent Technology Co. Ltd
+				No.77, Jing 10th Road, Yueqing Economic Development Zone, Wenzhou
+				Yueqing City  Zhejiang  325608
+				CN
+
+D0-93-95   (hex)		Shenzhen Hotack Technology Co.,Ltd
+E00000-EFFFFF     (base 16)		Shenzhen Hotack Technology Co.,Ltd
+				Unit 1501/1502/1503/1508/1509, 15th Floor, Block C, Huanzhi Center, No. 3639 Longhua Avenue, Jinglong Area, Longhua Street, Longhua District
+				Shenzhen    518000
+				CN
+
+D0-93-95   (hex)		DAESUNG CELTIC ENERSYS
+400000-4FFFFF     (base 16)		DAESUNG CELTIC ENERSYS
+				55-72, Sanggok-ro, Samseong-myeon
+				Eumseong-gun  Chungcheongbuk-do  27658
+				KR
+
+D0-93-95   (hex)		Hefei Siqiang Electronic Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Hefei Siqiang Electronic Technology Co.,Ltd
+				No. 69, Xinqiao Road, High tech Industrial Development Zone, Lujiang County, Hefei City, Anhui Province
+				Hefei    230000
+				CN
+
+D0-16-F0   (hex)		OPTITERA GLOBAL NETWORKS PRIVATE LIMITED
+A00000-AFFFFF     (base 16)		OPTITERA GLOBAL NETWORKS PRIVATE LIMITED
+				B - 3D, Basement,Skipper House,62-63, Nehru Place,
+				New Delhi  Delhi  110019
+				IN
+
+D0-16-F0   (hex)		Crystal Alarm AB
+900000-9FFFFF     (base 16)		Crystal Alarm AB
+				Första Magasinsgatan 5
+				Gävle    803 10
+				SE
+
+D0-16-F0   (hex)		Hydac Electronic
+700000-7FFFFF     (base 16)		Hydac Electronic
+				Hauptstraße 27
+				Saarbrücken  Saarland  66128
+				DE
+
+E0-3C-1C   (hex)		Shikino High-Tech Co., Ltd.
+100000-1FFFFF     (base 16)		Shikino High-Tech Co., Ltd.
+				829 Kichijima
+				Uozu-shi  TOYAMA  937-0041
+				JP
+
+54-08-3B   (hex)		Unicompute Technology Co.,Ltd.
+900000-9FFFFF     (base 16)		Unicompute Technology Co.,Ltd.
+				Building 10, Tian Jian Lake AloT Industrial Park, No.173 Feng Xiang West Street? High-Tech Industrial Development Zone, 
+				ZhengZhou City    450066
+				CN
+
+54-08-3B   (hex)		NAVITUS LT
+200000-2FFFFF     (base 16)		NAVITUS LT
+				Visoriu g. 2
+				Vilnius    08300
+				LT
+
+70-06-92   (hex)		Munters
+A00000-AFFFFF     (base 16)		Munters
+				Hasivim 18
+				Pethch Tikva  Israel  4959376
+				IL
+
+70-06-92   (hex)		Skyware Protech Limited
+D00000-DFFFFF     (base 16)		Skyware Protech Limited
+				3806A, Cable TV Tower, 9 Hoi Sing Road, Tsuen Wan
+				Tsuen Wan    00000
+				HK
+
+20-85-93   (hex)		UNILUMIN GROUP CO.,LTD
+300000-3FFFFF     (base 16)		UNILUMIN GROUP CO.,LTD
+				No.112 Yongfu Rd.,BaoanDistrict,
+				shenzhen  guangdong  518103
+				CN
+
+20-85-93   (hex)		Eilersen Electric A/S
+600000-6FFFFF     (base 16)		Eilersen Electric A/S
+				Kokkedal Industripark 4
+				Kokkedal    2980
+				DK
+
+4C-4B-F9   (hex)		Stored Energy Systems
+B00000-BFFFFF     (base 16)		Stored Energy Systems
+				1840 Industrial Circle
+				Longmont  CO  80501
+				US
+
+24-15-10   (hex)		SHANDONG KEHUI POWER AUTOMATION CO. LTD.
+600000-6FFFFF     (base 16)		SHANDONG KEHUI POWER AUTOMATION CO. LTD.
+				 No. 16,Sanying Road
+				Zibo  Shandong  255087
+				CN
+
+24-15-10   (hex)		Kaiyun
+300000-3FFFFF     (base 16)		Kaiyun
+				Fuhao
+				Dongguang    523617
+				CN
+
+DC-44-27   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+2C-D1-41   (hex)		IntelliLUM
+200000-2FFFFF     (base 16)		IntelliLUM
+				8850 Terabyte Court
+				Reno  Nevada  89521
+				US
+
+98-06-37   (hex)		Shenzhen Y&D Electronics Information Co., Ltd
+800000-8FFFFF     (base 16)		Shenzhen Y&D Electronics Information Co., Ltd
+				601-602, 6/F, Antenna Building, No 17, Keji North 1st Road, Nanshan District
+				Shenzhen    518055
+				CN
+
+98-06-37   (hex)		BOEING SSG
+600000-6FFFFF     (base 16)		BOEING SSG
+				5905 LEGACY DR, SUITE 325
+				PLANO  TX  75024
+				US
+
+1C-21-D1   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+FC-A4-7A   (hex)		SHENZHEN KUKU TECHNOLOGY CO.,LTD
+D00000-DFFFFF     (base 16)		SHENZHEN KUKU TECHNOLOGY CO.,LTD
+				No.205,2F,17th Block,PingShan Industrial District,TaoYuan Street, NanShan
+				ShenZhen  GuangDong  518055
+				CN
+
+D0-5F-64   (hex)		Shenzhen Canzone Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Shenzhen Canzone Technology Co.,Ltd.
+				Minzhi Street Longhua District
+				ShenZhen    518000
+				CN
+
+2C-16-BD   (hex)		Curtiss-Wright Drive Technology
+100000-1FFFFF     (base 16)		Curtiss-Wright Drive Technology
+				Badstrasse 5
+				Neuhausen am Rheinfall  Schaffhausen  8212
+				CH
+
+2C-16-BD   (hex)		Saft AB
+300000-3FFFFF     (base 16)		Saft AB
+				Jungnergatan
+				Oskarshamn    57228
+				SE
+
+2C-16-BD   (hex)		Beijing Jishi Huitong Technology Co., Ltd.
+000000-0FFFFF     (base 16)		Beijing Jishi Huitong Technology Co., Ltd.
+				4/F,No.3 building,No.8,Haiying Road,Fengtai District
+				Beijing  Beijing  100070
+				CN
+
+2C-16-BD   (hex)		AIMCO
+200000-2FFFFF     (base 16)		AIMCO
+				10000 SE Pine St
+				Portland  OR  97216
+				US
+
+2C-16-BD   (hex)		SCT OPTRONICS CO., LTD
+700000-7FFFFF     (base 16)		SCT OPTRONICS CO., LTD
+				Floor 9, Block B, Building 7, Shenzhen Bay Technology Ecological Park, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+2C-16-BD   (hex)		Shanghai Walktech Information Technology Co.,Ltd.
+900000-9FFFFF     (base 16)		Shanghai Walktech Information Technology Co.,Ltd.
+				4F , No 85, Lane 1198, North Qin Zhou Road, Xu Hui District
+				Shanghai  Shanghai  200233
+				CN
+
+FC-A4-7A   (hex)		Oberix Group Pty Ltd
+900000-9FFFFF     (base 16)		Oberix Group Pty Ltd
+				22 McIntyre Street
+				Burwood  VIC  3125
+				AU
+
+FC-A4-7A   (hex)		KARRY COMMUNICATION LIMITED
+800000-8FFFFF     (base 16)		KARRY COMMUNICATION LIMITED
+				FLAT/RM 705 7/F SUNBEAM PLAZA 1155 CANTON ROAD MONGKOK KL
+				Hong Kong    999077
+				HK
+
+8C-59-3C   (hex)		Nanonord A/S
+800000-8FFFFF     (base 16)		Nanonord A/S
+				Skjernvej 4A
+				Aalborg    9220
+				DK
+
+8C-59-3C   (hex)		Future Robot Technology Co., Limited
+100000-1FFFFF     (base 16)		Future Robot Technology Co., Limited
+				Room 406 Block A South Wind Tower, Nanshan Cloud Valley Innovation Industry Park, No 4093 Lau Sin Avenue Taoyuan Street Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+8C-59-3C   (hex)		Spectranetix
+500000-5FFFFF     (base 16)		Spectranetix
+				845 Stewart Drive, Suite B
+				Sunnyvale  CA  94085
+				US
+
+B4-A2-EB   (hex)		SHENZHEN ZHUIFENGMA TECHNOLOGY CO., LTD
+800000-8FFFFF     (base 16)		SHENZHEN ZHUIFENGMA TECHNOLOGY CO., LTD
+				2 FLOOR WEST WING BLOCK 3  NO.28 LANGSHAN ROAD, NANSHAN DISTRICT 
+				SHENZHEN  Guangdong  518040
+				CN
+
+B4-A2-EB   (hex)		SALZBRENNER media GmbH
+D00000-DFFFFF     (base 16)		SALZBRENNER media GmbH
+				Industriegebiet See 1
+				Buttenheim    96155
+				DE
+
+BC-97-40   (hex)		Shenzhen Colorwin Optical Technology Co.,Ltd
+600000-6FFFFF     (base 16)		Shenzhen Colorwin Optical Technology Co.,Ltd
+				201-2，2nd Floor,G3 Building, TCL International E City,1001 Zhongshanyuan Road,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+BC-97-40   (hex)		Direct Communication Solutions
+900000-9FFFFF     (base 16)		Direct Communication Solutions
+				17150 Via del Campo, Ste 200
+				San Diego  CA  92127
+				US
+
+D0-C8-57   (hex)		Nanjing Magewell Electronics Co.,Ltd
+800000-8FFFFF     (base 16)		Nanjing Magewell Electronics Co.,Ltd
+				14th Floor, Building 3, No. 89 Shengli Road, Jiangning Economic and Technological Development Zone
+				Nanjing  Jiangsu  211100
+				CN
+
+D0-C8-57   (hex)		Dante Security Inc.
+C00000-CFFFFF     (base 16)		Dante Security Inc.
+				303 MERRICK RD., Unit 208
+				LYNBROOK  NY  11563
+				US
+
+BC-97-40   (hex)		B4ComTechnologies LLC
+E00000-EFFFFF     (base 16)		B4ComTechnologies LLC
+				Office 2/6, 16a, Ivana Babushkina street
+				Moscow    117292
+				RU
+
+BC-97-40   (hex)		Amap Information Technology Co., Ltd
+A00000-AFFFFF     (base 16)		Amap Information Technology Co., Ltd
+				A051, No.01, 3/F, No.55 Suzhou Street, Haidian District
+				Beijing  Beijing  100080
+				CN
+
+BC-97-40   (hex)		LISTEC GmbH
+C00000-CFFFFF     (base 16)		LISTEC GmbH
+				Am Sandberg 34
+				Isen  Bavaria  84424
+				DE
+
+D0-C8-57   (hex)		YUAN High-Tech Development Co., Ltd.
+000000-0FFFFF     (base 16)		YUAN High-Tech Development Co., Ltd.
+				18F, No.88, Sec. 2, Chung Hsiao E.Rd., 
+				Taipei,   Taiwan   10050 
+				TW
+
+BC-97-40   (hex)		Wind Mobility Technology (Beijing) Co., Ltd
+400000-4FFFFF     (base 16)		Wind Mobility Technology (Beijing) Co., Ltd
+				13603, Building 13, No. 2, Nanzhuzhang Hutong, Dongcheng District
+				Beijing  Beijing  100010
+				CN
+
+60-95-CE   (hex)		Q-SENTECH Co.,Ltd.
+200000-2FFFFF     (base 16)		Q-SENTECH Co.,Ltd.
+				#201,170 Seonyu-ro, Yeongdeungpo-gu
+				Seoul  Korea  07255
+				KR
+
+1C-82-59   (hex)		Microtronics Engineering GmbH
+E00000-EFFFFF     (base 16)		Microtronics Engineering GmbH
+				Hauptstrasse 7
+				Ruprechtshofen    3244
+				AT
+
+1C-82-59   (hex)		Diatrend Corporation
+200000-2FFFFF     (base 16)		Diatrend Corporation
+				Grand Front Osaka Tower-B 28F, 3-1 ofuka-cho, kita-ku
+				Osaka  Osaka  530-0011
+				JP
+
+1C-82-59   (hex)		SHENZHEN AOA TECHNOLOGY CO.,LTD
+800000-8FFFFF     (base 16)		SHENZHEN AOA TECHNOLOGY CO.,LTD
+				B624,C1 Building,Hengchao Industrial Park,Tangtou Road,Shiyan,Bao'an District
+				SHENZHEN  Guangdong  518108
+				CN
+
+84-8B-CD   (hex)		WORMIT
+C00000-CFFFFF     (base 16)		WORMIT
+				Sec.1,Xintai 5th Rd.,Xizhi Dist.
+				New Taipei City    22101
+				TW
+
+B0-FD-0B   (hex)		Taian Yuqi Communication Technology Co., Ltd
+500000-5FFFFF     (base 16)		Taian Yuqi Communication Technology Co., Ltd
+				Building 4, Fengxiang Road, Tai'an Development Zone
+				Tai’an  Shandong  271000
+				CN
+
+B0-FD-0B   (hex)		Eagle Acoustics Manufacturing, LLC 
+900000-9FFFFF     (base 16)		Eagle Acoustics Manufacturing, LLC 
+				333 E IL ROUTE 83, Ste. 100
+				MUNDELEIN  IL  60060-4214
+				US
+
+1C-82-59   (hex)		Shanghai Xiaoyan Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Shanghai Xiaoyan Technology Co., Ltd.
+				Room 503, Building B, NO. 2305, Zuchongzhi Road
+				Shanghai  Shanghai  201203
+				CN
+
+84-8B-CD   (hex)		Logic Supply
+400000-4FFFFF     (base 16)		Logic Supply
+				35 Thompson St
+				South Burlington  VT  05403
+				US
+
+B0-FD-0B   (hex)		Everynet Oy
+700000-7FFFFF     (base 16)		Everynet Oy
+				At Azets Insight Oy, Hatanpään valtatie 26 (5.krs)
+				Tampere    33100
+				FI
+
+B0-FD-0B   (hex)		Vista Manufacturing
+200000-2FFFFF     (base 16)		Vista Manufacturing
+				53345 Columbia Drive
+				Elkhart  IN  46514
+				US
+
+C8-2C-2B   (hex)		RF Engineering and Energy Resource
+300000-3FFFFF     (base 16)		RF Engineering and Energy Resource
+				4460 Commercial Ave.
+				Portage  MI  49002
+				US
+
+C8-2C-2B   (hex)		iWave Systems Tech Pvt Ltd
+400000-4FFFFF     (base 16)		iWave Systems Tech Pvt Ltd
+				7/B 29th Main, BTM Layout 2nd Stage
+				Bengalore  Kamataka  560076
+				IN
+
+C8-2C-2B   (hex)		DALCO AG
+500000-5FFFFF     (base 16)		DALCO AG
+				Industriestr. 28
+				Volketswil  ZH  8604
+				CH
+
+1C-CA-E3   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+C8-63-14   (hex)		Optictimes Co.,Ltd
+A00000-AFFFFF     (base 16)		Optictimes Co.,Ltd
+				Hangzhou City,  Zhejiang Province
+				Hangzhou  Zhejiang  310023
+				CN
+
+E4-1E-0A   (hex)		Tritium Pty Ltd
+700000-7FFFFF     (base 16)		Tritium Pty Ltd
+				1/31 Archimedes PL.
+				Murarrie  QLD   4172
+				AU
+
+E4-1E-0A   (hex)		Zavod № 423
+000000-0FFFFF     (base 16)		Zavod № 423
+				2B, Zavodskoy proezd
+				Bogoroditsk  Tula  301830
+				RU
+
+CC-D3-9D   (hex)		Shanghai tongli information technology co. LTD
+E00000-EFFFFF     (base 16)		Shanghai tongli information technology co. LTD
+				Floor 2, building 1, liqin building, No.1885, metropolis road, minhang district
+				Shanghai  Shanghai  201108
+				CN
+
+E4-1E-0A   (hex)		Aeroel srl
+500000-5FFFFF     (base 16)		Aeroel srl
+				Vai Pier Paolo Pasolini 35/3
+				Pradamano  Udine  33040
+				IT
+
+FC-D2-B6   (hex)		Winglet Systems Inc.
+900000-9FFFFF     (base 16)		Winglet Systems Inc.
+				4-6, Shinyokohama 2-chome, Kohoku-ku
+				 Yokohama  Kanagawa  222-0033
+				JP
+
+34-E1-D1   (hex)		CREW by True Rowing, Inc.
+C00000-CFFFFF     (base 16)		CREW by True Rowing, Inc.
+				14 Arrow St, Floor 4
+				Cambridge  MA  02138
+				US
+
+34-E1-D1   (hex)		SAMA NextGen PTE Limited
+100000-1FFFFF     (base 16)		SAMA NextGen PTE Limited
+				  16 Collyer Quay, #21-00 Income AT Raffels,  Singapore 049318
+				Singapore    049318
+				SG
+
+34-E1-D1   (hex)		HI-TECH.ORG
+D00000-DFFFFF     (base 16)		HI-TECH.ORG
+				Volgogradskiy prospekt, 43, k.3, room XXVI
+				Moscow     109316
+				RU
+
+D4-7C-44   (hex)		Huaqin Telecom Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Huaqin Telecom Technology Co.,Ltd.
+				Building 1,No.399, Keyuan Road, Pudong, Shanghai China
+				Shanghai    200120
+				CN
+
+FC-D2-B6   (hex)		Soma GmbH
+200000-2FFFFF     (base 16)		Soma GmbH
+				Gewerbering 9
+				Schalksmühle  NRW  58579
+				DE
+
+E4-4C-C7   (hex)		Beijing Zhongchuangwei Nanjing Quantum Communication Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Beijing Zhongchuangwei Nanjing Quantum Communication Technology Co., Ltd.
+				No. 88, pubin avenue, jiangpu street, pukou district, nanjing city
+				nanjing  Jiangsu  210000
+				CN
+
+E4-4C-C7   (hex)		Alert Alarm AB
+000000-0FFFFF     (base 16)		Alert Alarm AB
+				Råsundavägen 4
+				Solna  Stockholm  16967
+				SE
+
+4C-BC-98   (hex)		Shenzhen Shanling Digital Technology Development Co.,Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Shanling Digital Technology Development Co.,Ltd.
+				No.10, Chiwan 1 Road, Shekou, Nanshan
+				Shenzhen  GuangDong  518068
+				CN
+
+E4-4C-C7   (hex)		JSC Svyaz Inginiring M
+300000-3FFFFF     (base 16)		JSC Svyaz Inginiring M
+				Varshavskoe Shosse, 42
+				Moscow    115230
+				RU
+
+4C-BC-98   (hex)		Nemon Co., Ltd.
+400000-4FFFFF     (base 16)		Nemon Co., Ltd.
+				B-834, 164 Tancheonsangro, Bundang
+				Seongnam  Gyeonggi  13631
+				KR
+
+E0-5A-9F   (hex)		ShenZhen Arts Changhua Intelligent Technology Co., Ltd
+E00000-EFFFFF     (base 16)		ShenZhen Arts Changhua Intelligent Technology Co., Ltd
+				15i, Taibang Science & Technology Building, Science and Technology South 8th Road, Hi-Tech Park South Area
+				Shenzhen  Guangdong  518057
+				CN
+
+D8-86-0B   (hex)		Get SAT
+200000-2FFFFF     (base 16)		Get SAT
+				Hamada 12
+				Rehovot  Select From Dropdown  7670316
+				IL
+
+E0-5A-9F   (hex)		OMB Guitars LLC
+700000-7FFFFF     (base 16)		OMB Guitars LLC
+				24 Hazorim St
+				Efrat  Jerusalem  90435
+				IL
+
+E0-5A-9F   (hex)		AITEC SYSTEM CO., LTD.
+100000-1FFFFF     (base 16)		AITEC SYSTEM CO., LTD.
+				466-1 Aoto-cho, Midori-ku
+				Yokohama-shi  Kanagawa  226-0022
+				JP
+
+C4-FF-BC   (hex)		viRaTec GmbH
+E00000-EFFFFF     (base 16)		viRaTec GmbH
+				Phorusgasse 8/1
+				Wien    1040
+				AT
+
+38-B1-9E   (hex)		Basalte BVBA
+400000-4FFFFF     (base 16)		Basalte BVBA
+				Hundelgemsesteenweg 1a
+				Merelbeke    9820
+				BE
+
+CC-D3-9D   (hex)		Continental Control Systems
+200000-2FFFFF     (base 16)		Continental Control Systems
+				2150 Miller Drive  Suite A
+				Longmont  CO  80501
+				US
+
+CC-D3-9D   (hex)		Hangzhou Scooper Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Hangzhou Scooper Technology Co.,Ltd.
+				Room706,707,5th,No.998,Wenyi West Raod,Wuchang Street,Yuhang District,Hangzhou
+				HangZhou  ZheJiang  311121
+				CN
+
+CC-D3-9D   (hex)		INX CO.,LTD.
+000000-0FFFFF     (base 16)		INX CO.,LTD.
+				6F Nippatsu Nishiguchi Bldg 3-32-1 Tsuruya-cho Kanagawa-ku
+				Yokohama-shi  Kanagawa  221-0835
+				JP
+
+D4-25-CC   (hex)		Nanjing LES Information Technology Co., Ltd
+600000-6FFFFF     (base 16)		Nanjing LES Information Technology Co., Ltd
+				No.8,YongZhi Road
+				Nanjing  Jiangsu  210014
+				CN
+
+D4-25-CC   (hex)		Veea
+B00000-BFFFFF     (base 16)		Veea
+				164 E183rd street
+				New York  NY  10028
+				US
+
+D4-25-CC   (hex)		Combined Energy Technologies Pty Ltd
+D00000-DFFFFF     (base 16)		Combined Energy Technologies Pty Ltd
+				19 The Avenue
+				Newport  NSW  2106
+				AU
+
+9C-69-B4   (hex)		Globalcom Engineering SPA
+400000-4FFFFF     (base 16)		Globalcom Engineering SPA
+				Via Volta 9
+				MORNAGO  VA  21020
+				IT
+
+4C-91-7A   (hex)		Inster Tecnología y Comunicaciones SAU
+100000-1FFFFF     (base 16)		Inster Tecnología y Comunicaciones SAU
+				Avda. Rita Levi Montalcini, 2 Parcela 5, Tecnogetafe - Getafe
+				Madrid    28906
+				ES
+
+4C-91-7A   (hex)		S.I.C.E.S. srl
+700000-7FFFFF     (base 16)		S.I.C.E.S. srl
+				Via Molinello, 8B
+				Jerago con Orago  VARESE  21040
+				IT
+
+9C-69-B4   (hex)		MOZI (Shenzhen) Artificial Intelligence Technology Co., Ltd. 
+200000-2FFFFF     (base 16)		MOZI (Shenzhen) Artificial Intelligence Technology Co., Ltd. 
+				Room 1305, Building A Phase I Innovation and Technology Square, 4 Tairan Road, Futian
+				 Shenzhen   Guangdong  518000
+				CN
+
+9C-69-B4   (hex)		Appareo Systems, LLC
+300000-3FFFFF     (base 16)		Appareo Systems, LLC
+				1830 NDSU Research Circle N
+				Fargo  ND  58102
+				US
+
+6C-DF-FB   (hex)		Guilin Zhishen Information TechonlogyCO.,Ltd
+A00000-AFFFFF     (base 16)		Guilin Zhishen Information TechonlogyCO.,Ltd
+				Creative Industrial Park,GuiMo Rd.,Qi Xing
+				Guilin  Guangxi  541004
+				CN
+
+6C-DF-FB   (hex)		Greenbird Vertriebs GmbH
+500000-5FFFFF     (base 16)		Greenbird Vertriebs GmbH
+				Georg Sigl-Straße 40-42
+				Breitenfurt bei Wien  Niederösterreich  2384
+				AT
+
+0C-EF-AF   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+6C-DF-FB   (hex)		Toucan Systems Ltd
+C00000-CFFFFF     (base 16)		Toucan Systems Ltd
+				3 Roseheyworth Business Park
+				Abertillery  Bleanau Gwent  NP13 1SP
+				GB
+
+98-F9-C7   (hex)		Promess GmbH
+400000-4FFFFF     (base 16)		Promess GmbH
+				Schaffhausener Str. 44
+				Berlin    12099
+				DE
+
+98-F9-C7   (hex)		Renalsense
+800000-8FFFFF     (base 16)		Renalsense
+				Hamarpe 3
+				Jerusalem    9777403
+				IL
+
+98-F9-C7   (hex)		SHENZHEN HUNTKEY ELECTRIC CO., LTD.
+000000-0FFFFF     (base 16)		SHENZHEN HUNTKEY ELECTRIC CO., LTD.
+				Huntkey Industrial Park, Xue-Xiang Village, Bantian, Longgang District,
+				Shenzhen  Guangdong  518129
+				CN
+
+98-F9-C7   (hex)		HighSecLabs
+100000-1FFFFF     (base 16)		HighSecLabs
+				29 Haeshel St
+				Caesarea    3088900
+				IL
+
+0C-FE-5D   (hex)		CTK Contact Electronics co., Ltd.
+800000-8FFFFF     (base 16)		CTK Contact Electronics co., Ltd.
+				6F-5, No79, Sec 1, Xintai 5th RD, Xizhi Dist
+				New Taipei City    22101
+				TW
+
+0C-FE-5D   (hex)		Fujian Jieyu Computer Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		Fujian Jieyu Computer Technology Co., Ltd.
+				3rd Floor, Building 21, Cangshan Park, Jinshan Orange Garden Industrial Park, Cangshan District
+				Fuzhou  Fujian  350000 
+				CN
+
+A4-58-0F   (hex)		Homebeaver
+C00000-CFFFFF     (base 16)		Homebeaver
+				3 place ville marie, 4th floor
+				Montreal  Quebec  H3B 2E3
+				CA
+
+6C-5C-3D   (hex)		Clinton Electronics Corporation
+E00000-EFFFFF     (base 16)		Clinton Electronics Corporation
+				6701 Clinton Road
+				Loves Park  IL  61111
+				US
+
+0C-FE-5D   (hex)		Dspread International Co.,Limited
+200000-2FFFFF     (base 16)		Dspread International Co.,Limited
+				 UNIT 402. 4/F FAIRMONT HSE NO.8 COTTON TREE DRIVE ADMIRALTY
+				HONG KONG  HONG KONG  999077
+				HK
+
+1C-FD-08   (hex)		sunweit industrial limited
+700000-7FFFFF     (base 16)		sunweit industrial limited
+				Block A ,503B Room,Zhihui Innovation Centre
+				Shenzhen  GUANGDONG  518000
+				CN
+
+1C-FD-08   (hex)		InSeat Solutions, LLC
+000000-0FFFFF     (base 16)		InSeat Solutions, LLC
+				1871 Wright Avenue
+				La Verne  CA  91750
+				US
+
+1C-FD-08   (hex)		guangzhou huiqun intelligent technology co. LTD
+B00000-BFFFFF     (base 16)		guangzhou huiqun intelligent technology co. LTD
+				room 502, building 2, no. 6, haijing road, xinzao town, panyu district
+				guangzhou  guangdong  511436
+				CN
+
+1C-FD-08   (hex)		SABIK Offshore GmbH
+400000-4FFFFF     (base 16)		SABIK Offshore GmbH
+				Wilhelm-Maybach-Straße 3
+				Schwerin  Mecklenburg-Vorpommern  D-19061
+				DE
+
+1C-FD-08   (hex)		HiHi Ltd
+200000-2FFFFF     (base 16)		HiHi Ltd
+				Loewy House 11 Enterprise Way
+				Christchurch    BH236EW
+				GB
+
+1C-FD-08   (hex)		Umeox Innovations Co.,Ltd
+300000-3FFFFF     (base 16)		Umeox Innovations Co.,Ltd
+				Room 1208-09, Research Building, Tsinghua Information Port, No. 1, Xindong Road, Nanshan District, Shenzhen
+				Shenzhen  Guangdong  518000
+				CN
+
+6C-5C-3D   (hex)		Hangzhou Netease Yanxuan Trading Co.,Ltd
+600000-6FFFFF     (base 16)		Hangzhou Netease Yanxuan Trading Co.,Ltd
+				Room 410,No.4 Building,No.599 Road Wangshang, 
+				Hangzhou, Binjiang District,  Zhejiang Province  310052
+				CN
+
+6C-5C-3D   (hex)		Shenzhen Justek Technology Co., Ltd
+100000-1FFFFF     (base 16)		Shenzhen Justek Technology Co., Ltd
+				5/F, Building No.818, Qingtiexi Mabu Community, Bao 'an DistrictXixiang Street,
+				Shenzhen  Guangdong  518102
+				CN
+
+3C-6A-2C   (hex)		Beijing Donghua Hongtai Polytron Technologies Inc
+E00000-EFFFFF     (base 16)		Beijing Donghua Hongtai Polytron Technologies Inc
+				Room 126,Layer 1, Mudan building, , Huayuan Road No. 2, Haidian District
+				Beijing  Beijing  100089
+				CN
+
+D0-22-12   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+CC-1B-E0   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+3C-6A-2C   (hex)		Homegear GmbH
+700000-7FFFFF     (base 16)		Homegear GmbH
+				Am Schützenplatz 3
+				Preetz  Schleswig-Holstein  24211
+				DE
+
+30-0A-60   (hex)		Sixth Energy Technologies Private Limited
+D00000-DFFFFF     (base 16)		Sixth Energy Technologies Private Limited
+				#62, Sri Varda, 10th main, HMT Layout, R.T.Nagar
+				Bangalore  Karnataka  560032
+				IN
+
+3C-6A-2C   (hex)		Rio Lago Technologies  LLC
+000000-0FFFFF     (base 16)		Rio Lago Technologies  LLC
+				17741 Ludlow St.
+				Granada Hills  CA  91344-4502
+				US
+
+30-0A-60   (hex)		KAZUtechnica Co.,Ltd.
+000000-0FFFFF     (base 16)		KAZUtechnica Co.,Ltd.
+				1-9-18,Chuo,Chuo-ku
+				Sagamihara-shi  Kanagawa  2520239
+				JP
+
+30-0A-60   (hex)		A9
+500000-5FFFFF     (base 16)		A9
+				27,BUCHEON-RO 198BEON-GIL
+				BUCHEON-SI  GYEONGGI-DO  14555
+				KR
+
+30-0A-60   (hex)		Imageo s.r.o.
+E00000-EFFFFF     (base 16)		Imageo s.r.o.
+				Golcova 485
+				Praha    14800
+				CZ
+
+3C-6A-2C   (hex)		La Barrière Automatique
+600000-6FFFFF     (base 16)		La Barrière Automatique
+				451 chemin de Champivost
+				Limonest    69760
+				FR
+
+74-E1-4A   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+C8-8E-D1   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+A4-ED-43   (hex)		Heyuan intelligence technology CO.,Ltd
+900000-9FFFFF     (base 16)		Heyuan intelligence technology CO.,Ltd
+				No.1166 Xinluo Street
+				Jinan City  Shandong Province  250101
+				CN
+
+A0-28-33   (hex)		JGR Optics Inc
+500000-5FFFFF     (base 16)		JGR Optics Inc
+				160 Michael Cowpland Drive
+				Ottawa  Ontario  K2M 1P6
+				CA
+
+A0-28-33   (hex)		Firm INFORMTEST Ltd.
+400000-4FFFFF     (base 16)		Firm INFORMTEST Ltd.
+				APT. 8, LODG. XIV ,FL.6, bld.4, Passage Savelkinsky
+				Zelenograd  Moscow  124482
+				RU
+
+A0-28-33   (hex)		Kryptus Information Security S/A
+700000-7FFFFF     (base 16)		Kryptus Information Security S/A
+				Rua Maria Tereza Dias da Silva 270
+				Cidade Universitaria  Campinas-SP  CEP 13083-820
+				BR
+
+A0-28-33   (hex)		IMESHX CORPORATION LIMITED
+900000-9FFFFF     (base 16)		IMESHX CORPORATION LIMITED
+				10A7F, ShenZhen Bay Technology Ecological Park, NanShan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+9C-F6-DD   (hex)		Savari Inc
+800000-8FFFFF     (base 16)		Savari Inc
+				2005 De la cruz blvd, st 111,
+				santa clara  CA  95050
+				US
+
+30-09-F9   (hex)		Beijing Mydreamplus Information Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Beijing Mydreamplus Information Technology Co., Ltd.
+				Room 301-2, North Building, No. 11, CangJingGuan Lane, DongCheng District,
+				Beijing  Beijing  100005
+				CN
+
+84-89-EC   (hex)		Newell Brands
+A00000-AFFFFF     (base 16)		Newell Brands
+				221 River Street
+				Hoboken  NJ  07030
+				US
+
+84-89-EC   (hex)		EPSa Elektronik & Präzisionsbau Saalfeld GmbH
+B00000-BFFFFF     (base 16)		EPSa Elektronik & Präzisionsbau Saalfeld GmbH
+				Remschuetzer Str. 1
+				Saalfeld/Saale    07318
+				DE
+
+30-09-F9   (hex)		Shenzhen Sunvell Electronics Co., Ltd.
+100000-1FFFFF     (base 16)		Shenzhen Sunvell Electronics Co., Ltd.
+				5th Floor, Building F, Hongzhu Yongqi Technology Park, Lezhujiao Village, Xixiang Town, Bao’ an District,
+				Shenzhen  GuangDong  518000
+				CN
+
+30-09-F9   (hex)		Shenzhen Tencent Computer System Co., Ltd.
+A00000-AFFFFF     (base 16)		Shenzhen Tencent Computer System Co., Ltd.
+				5-10 Building High-tech Zone, Nanshan District, 
+				Shenzhen  Guangdong Province  518057
+				CN
+
+30-09-F9   (hex)		essence security
+800000-8FFFFF     (base 16)		essence security
+				Aba Even 12 st 
+				Herzelia    4672530
+				IL
+
+30-09-F9   (hex)		Maytronics Ltd.
+700000-7FFFFF     (base 16)		Maytronics Ltd.
+				Kibbutz Yizrael
+				Kibbutz Yizrael    1935000
+				IL
+
+30-09-F9   (hex)		VELSITEC-CLIBASE
+500000-5FFFFF     (base 16)		VELSITEC-CLIBASE
+				LA RATELIERE
+				SAINT-JUST-MALMONT  Haute-Loire  43240
+				FR
+
+C0-83-59   (hex)		Shenzhen Pay Device Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen Pay Device Technology Co., Ltd.
+				Room 502,Peng’s Building,Fanshen Road,43# Baoan District
+				Shenzhen  Guangdong  518101
+				CN
+
+9C-F6-DD   (hex)		RYEEX Technology Co.,Ltd.
+300000-3FFFFF     (base 16)		RYEEX Technology Co.,Ltd.
+				RM106,Joinin Hub,Builing J District 71,Construction Industrial Park,Xin'an Street,Bao'an, Shenzhen,China
+				SHENZHEN  GUANGDONG  518101
+				CN
+
+9C-F6-DD   (hex)		Lighting New Energy Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Lighting New Energy Technology Co., Ltd.
+				Room 402, Building 22, Chentian Industrial Zone, Xixiang Street, Bao'an District,
+				Shenzhen  Guangdong  518100
+				CN
+
+C0-83-59   (hex)		Cyber Sciences, Inc.
+E00000-EFFFFF     (base 16)		Cyber Sciences, Inc.
+				229 Castlewood Dr, Suite E
+				Murfreesboro  TN  37129
+				US
+
+C0-83-59   (hex)		Private
+C00000-CFFFFF     (base 16)		Private
+
+C0-83-59   (hex)		Huaxin SM Optics Co. LTD.
+200000-2FFFFF     (base 16)		Huaxin SM Optics Co. LTD.
+				5F,B8,Tianfu software Park,Tianfu Road
+				Chengdu  Sichuan  610041
+				CN
+
+04-C3-E6   (hex)		Flintec UK Ltd.
+B00000-BFFFFF     (base 16)		Flintec UK Ltd.
+				W4/5 Capital Point, Wentloog Avenue
+				Cardiff  Cardiff  CF3 2PW
+				GB
+
+3C-42-7E   (hex)		Grandway Technology (Shenzhen) Limited
+000000-0FFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
+				Block 7, Zhu Keng Industrial Zone
+				Ping Shan District  Shenzhen  518118
+				CN
+
+04-C3-E6   (hex)		Ekin Teknoloji San ve Tic A.S.
+900000-9FFFFF     (base 16)		Ekin Teknoloji San ve Tic A.S.
+				maden mah. gediz. sok. no:7, sariyer
+				istanbul    34450
+				TR
+
+04-C3-E6   (hex)		Invasys
+500000-5FFFFF     (base 16)		Invasys
+				Sochorova 36
+				Brno    616 00
+				CZ
+
+04-C3-E6   (hex)		Extech Electronics Co., LTD.
+300000-3FFFFF     (base 16)		Extech Electronics Co., LTD.
+				17F., No.237, Sec. 1, Datong Rd., Xizhi Dist.
+				New Taipei City    22161
+				TW
+
+C0-83-59   (hex)		Viper Design, LLC
+500000-5FFFFF     (base 16)		Viper Design, LLC
+				125 Glancy St.
+				Goodlettsville  TN  37072
+				US
+
+B4-4B-D6   (hex)		Qstar Technology Co,Ltd 
+900000-9FFFFF     (base 16)		Qstar Technology Co,Ltd 
+				311# Xindongxing Business Centre ,2rd Road liuxian ,Bao'an Shenzhen China
+				Shenzhen   Guangdong   518100
+				CN
+
+B4-4B-D6   (hex)		CHUNGHSIN INTERNATIONAL ELECTRONICS CO.,LTD.
+E00000-EFFFFF     (base 16)		CHUNGHSIN INTERNATIONAL ELECTRONICS CO.,LTD.
+				618-2# Gongren West Road,Jiaojiang,
+				Taizhou  Zhejiang  317700
+				CN
+
+B4-4B-D6   (hex)		Arnouse Digital Devices Corp
+800000-8FFFFF     (base 16)		Arnouse Digital Devices Corp
+				1983 Marcus Ave, Suite 104
+				Lake Success  NY  11042
+				US
+
+3C-42-7E   (hex)		Teknoware Oy
+400000-4FFFFF     (base 16)		Teknoware Oy
+				Ilmarisentie 8
+				Lahti    15200
+				FI
+
+D4-7C-44   (hex)		Tendzone International Pte Ltd
+A00000-AFFFFF     (base 16)		Tendzone International Pte Ltd
+				Rm 202, Blk C, Huahan Innovation Park, No.16 Langshan Rd,Nanshan District
+				Shenzhen  GuangDong  518057
+				CN
+
+D4-7C-44   (hex)		Innoviz Technologies LTD
+100000-1FFFFF     (base 16)		Innoviz Technologies LTD
+				Atir Yeda 15
+				Kfar Saba  Ha Sharon  4464312
+				IL
+
+D4-7C-44   (hex)		Exafore Oy
+000000-0FFFFF     (base 16)		Exafore Oy
+				Hermiankatu 6-8D
+				Tampere    33720
+				FI
+
+D4-7C-44   (hex)		OMRON SENTECH CO., LTD.
+300000-3FFFFF     (base 16)		OMRON SENTECH CO., LTD.
+				9F, Ebina Prime Tower, 9-50, Chuo 2 Chome
+				Ebina-City  Kanagawa  243-0432
+				JP
+
+2C-48-35   (hex)		Rheonik Messtechnik GmbH
+200000-2FFFFF     (base 16)		Rheonik Messtechnik GmbH
+				Rudolf-Diesel-Str., 5
+				Odelzhausen  Deutschland  85235
+				DE
+
+A0-19-B2   (hex)		Adomi
+A00000-AFFFFF     (base 16)		Adomi
+				777 Mariners Island Blvd. Suite 150
+				San Mateo  CA  94404
+				US
+
+A0-19-B2   (hex)		Osatec
+400000-4FFFFF     (base 16)		Osatec
+				15 Parkovaya
+				Moscow    105203
+				WS
+
+A0-19-B2   (hex)		Lon Microsystems Inc.
+900000-9FFFFF     (base 16)		Lon Microsystems Inc.
+				11F Ali center Tianfu four street 
+				chengdu  sichuan  610041
+				CN
+
+2C-48-35   (hex)		SureFlap Ltd
+900000-9FFFFF     (base 16)		SureFlap Ltd
+				7 The Irwin Centre, Scotland Road, Dry Drayton
+				Cambridge  Cambridgeshire  CB23 8AR
+				GB
+
+CC-D3-1E   (hex)		ShenZhenBoryNet Co.,LTD.
+E00000-EFFFFF     (base 16)		ShenZhenBoryNet Co.,LTD.
+				building 9.C-18-n,baoneng tech.park qingxiang road longhua district,shenzhen
+				shenzhen  guangzhou  518109
+				CN
+
+2C-48-35   (hex)		Santec Corporation
+C00000-CFFFFF     (base 16)		Santec Corporation
+				5823 Ohkusa-Nenjozaka
+				Komaki  Aichi  485-0802
+				JP
+
+2C-48-35   (hex)		Exertus Oy
+600000-6FFFFF     (base 16)		Exertus Oy
+				Kampusranta 9 C
+				Seinäjoki    60320
+				FI
+
+8C-1C-DA   (hex)		Alcidae Inc
+C00000-CFFFFF     (base 16)		Alcidae Inc
+				535 Mission St, 14th Fl,
+				San Francisco  CA  94105
+				US
+
+8C-1C-DA   (hex)		Electronic Controlled Systems, Inc.
+E00000-EFFFFF     (base 16)		Electronic Controlled Systems, Inc.
+				11200 Hampshire Ave South
+				Bloomington  MN  55438
+				US
+
+8C-1C-DA   (hex)		LocoLabs LLC
+600000-6FFFFF     (base 16)		LocoLabs LLC
+				3350 Scott Blvd, Bldg 56
+				Santa Clara  CA  95054
+				US
+
+3C-24-F0   (hex)		Wisycom
+300000-3FFFFF     (base 16)		Wisycom
+				Via Spin 156
+				Romano D'Ezzelino  Vicenza  36060
+				IT
+
+3C-24-F0   (hex)		SHENZHEN PINSIDA TECHNOLOGY CO.,LTD.
+000000-0FFFFF     (base 16)		SHENZHEN PINSIDA TECHNOLOGY CO.,LTD.
+				411,4/F,Building A,Pengnian Science Park,Honghua IV Road,Xili,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+0C-73-EB   (hex)		Shenzhen Samchung Video Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Shenzhen Samchung Video Technology Co., Ltd.
+				Xixiang Street 4016 Bao'an Avenue 
+				Yong Kai Business Building A,  Bao'an District of Shenzhen City Guangdong  528470
+				CN
+
+8C-1C-DA   (hex)		GEOMC
+200000-2FFFFF     (base 16)		GEOMC
+				Suite514, 130, Digital-ro
+				Seoul    08589
+				KP
+
+3C-24-F0   (hex)		Laipac Technology Inc.
+200000-2FFFFF     (base 16)		Laipac Technology Inc.
+				20 Mural St. Unit 5
+				Richmond Hill  ON - Ontario  L4B 1K3
+				CA
+
+3C-24-F0   (hex)		Inter-Coastal Electronics
+400000-4FFFFF     (base 16)		Inter-Coastal Electronics
+				5750 E McKellips Rd
+				Mesa  AZ  85215
+				US
+
+0C-73-EB   (hex)		Beijing L&S Lancom Platform Tech. Co., Ltd. 
+900000-9FFFFF     (base 16)		Beijing L&S Lancom Platform Tech. Co., Ltd. 
+				1st Floor, Xingtianhaiyuan Building, Xianghuangqi Eaast Rd, Nondda South Rd,Haidian District
+				Beijing    100193
+				CN
+
+0C-73-EB   (hex)		EVERSEC TECHNOLOGY CORPORATION
+100000-1FFFFF     (base 16)		EVERSEC TECHNOLOGY CORPORATION
+				F5,Tower D,JingYi Technology Building NO.9 Dazhongsi East Road.,Beijing,P.R.China
+				BEIJING  BEIJING  100086
+				CN
+
+0C-73-EB   (hex)		Beijing Miiiw Technology Co., Ltd
+800000-8FFFFF     (base 16)		Beijing Miiiw Technology Co., Ltd
+				Room 3008, 3rd Floor, Qunfang Building, Bowangyuan, Yangfangdian Rd, Haidian District
+				Beijing    100010
+				CN
+
+48-0B-B2   (hex)		XIAMEN RONGTA TECHNOLOGY CO.,LTD.
+A00000-AFFFFF     (base 16)		XIAMEN RONGTA TECHNOLOGY CO.,LTD.
+				3F, E Plant, Gaoqi Industrial Zones, No.195, Gaoqi Community, Gaodian Village, Huli
+				Xiamen    361000
+				CN
+
+48-0B-B2   (hex)		Beijing Dragon Resources Limited.
+700000-7FFFFF     (base 16)		Beijing Dragon Resources Limited.
+				Tongjunzhuangxinlukou (500meters east) Shilipu Town, MiyunCountry, Beijing101500, China
+				BeiJing    101500
+				CN
+
+48-0B-B2   (hex)		Thales CETCA Avionics CO., Ltd
+200000-2FFFFF     (base 16)		Thales CETCA Avionics CO., Ltd
+				NO.9 Baichuan road,Hi-tech industry west zone park, Chengdu, Sichuan
+				Chengdu  Sichuan  611731
+				CN
+
+88-5F-E8   (hex)		Inor Process AB
+C00000-CFFFFF     (base 16)		Inor Process AB
+				Travbanegatan 10
+				Malmo  Skane  SE-213 77
+				SE
+
+88-5F-E8   (hex)		Beijing laiwei Technology  Co.,Ltd
+400000-4FFFFF     (base 16)		Beijing laiwei Technology  Co.,Ltd
+				Room 205,2/F,No.1 Fazhan Road Beijing information international base Huilongguan town Changping district Beijing
+				Beijing  Beijing  102206
+				CN
+
+88-5F-E8   (hex)		zhejiang yuanwang communication technolgy co.,ltd
+D00000-DFFFFF     (base 16)		zhejiang yuanwang communication technolgy co.,ltd
+				No. 6 of shen shi lei lu Road
+				ZhuJi  Zhejiang  311800
+				CN
+
+B8-D8-12   (hex)		Visual Productions BV
+800000-8FFFFF     (base 16)		Visual Productions BV
+				Rollandstraat 55ZW
+				Haarlem    2013SM
+				NL
+
+30-1F-9A   (hex)		NCM Supplies, Inc.
+400000-4FFFFF     (base 16)		NCM Supplies, Inc.
+				8125 NW 64th Street
+				Miami  FL  33166
+				US
+
+30-1F-9A   (hex)		Triax A/S
+700000-7FFFFF     (base 16)		Triax A/S
+				Bjornkaervej 3
+				Hornsyld  Denmark  8783
+				DK
+
+F0-41-C8   (hex)		POSTIUM KOREA CO., LTD.
+800000-8FFFFF     (base 16)		POSTIUM KOREA CO., LTD.
+				A208 Samsong Techno Valley, 140 Tongil-ro, Deogyang-gu
+				Koyang-si  Kyeonggi-do  10594
+				KR
+
+30-1F-9A   (hex)		Origami Group Limited
+C00000-CFFFFF     (base 16)		Origami Group Limited
+				Unit 913, 9/F.,Tower 2 Cheung Sha Wan Plaza, 833 Cheung Sha Wan Road, Kowloon
+				Hong Kong    000000
+				HK
+
+30-1F-9A   (hex)		Shenzhen Fengliyuan Energy Conservating Technology Co. Ltd
+E00000-EFFFFF     (base 16)		Shenzhen Fengliyuan Energy Conservating Technology Co. Ltd
+				8th floor of building A, Baoshan Industrial Estate, Longhua District, Shenzhen
+				Shenzhen  Guangdong  518131
+				CN
+
+F0-41-C8   (hex)		LINPA ACOUSTIC TECHNOLOGY CO.,LTD 
+000000-0FFFFF     (base 16)		LINPA ACOUSTIC TECHNOLOGY CO.,LTD 
+				2A,No60 , Lizhong Road,DaliQingxi Town
+				Dongguan  Guandong  523648
+				CN
+
+88-A9-A7   (hex)		Honeywell spol. s.r.o. HTS CZ o.z. 
+200000-2FFFFF     (base 16)		Honeywell spol. s.r.o. HTS CZ o.z. 
+				Turanka 100/1387 
+				Brno    62700
+				CZ
+
+88-A9-A7   (hex)		TWK-ELEKTRONIK
+B00000-BFFFFF     (base 16)		TWK-ELEKTRONIK
+				Heinrichstr. 85
+				Duesseldorf    40239
+				DE
+
+88-A9-A7   (hex)		AndroVideo Inc.
+C00000-CFFFFF     (base 16)		AndroVideo Inc.
+				2f-4, 17, Lane 91, Nei Hu Rd., Sec. 1
+				Taipei    11441
+				TW
+
+F0-41-C8   (hex)		XI'AN MEI SHANG MEI WIRELESS TECHNOLOGY.Co., Ltd.
+500000-5FFFFF     (base 16)		XI'AN MEI SHANG MEI WIRELESS TECHNOLOGY.Co., Ltd.
+				Xi'an Beilin District Yanta Middle Road No. 17A XIN QING YA YUAN 2-5C
+				XI'AN  shanxi  710000
+				CN
+
+88-A9-A7   (hex)		FlashForge Corporation
+900000-9FFFFF     (base 16)		FlashForge Corporation
+				 No.518, Xianyuan Road
+				Jinhua  Zhejiang  321000
+				CN
+
+A4-DA-22   (hex)		AURANEXT
+600000-6FFFFF     (base 16)		AURANEXT
+				202 quai de clichy
+				CLICHY    92110
+				FR
+
+DC-E5-33   (hex)		WECAN Solution Inc.
+600000-6FFFFF     (base 16)		WECAN Solution Inc.
+				71, Yulhadong-ro 8-gil, Dong-gu, Daegu, Republic of Korea
+				Daegu    41102
+				KR
+
+A4-DA-22   (hex)		Malldon Technology Limited
+900000-9FFFFF     (base 16)		Malldon Technology Limited
+				607 Longsheng Technology Building, Longhua Dist
+				Shenzhen  Guangdong  518000
+				CN
+
+88-A9-A7   (hex)		Mikroelektronika
+300000-3FFFFF     (base 16)		Mikroelektronika
+				Batajnicki drum 23
+				Belgrade    11186
+				RS
+
+C4-FF-BC   (hex)		Shenzhen C & D Electronics Co., Ltd.
+600000-6FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+C4-FF-BC   (hex)		ShenZhen ZYT Technology co., Ltd
+800000-8FFFFF     (base 16)		ShenZhen ZYT Technology co., Ltd
+				Floor four,Build C,FuSen Industrial park, HangCheng Avenue,Baoan District
+				Shenzhen  GuangDong  518000
+				CN
+
+C4-FF-BC   (hex)		Beijing  KDF information technology co. LTD.
+D00000-DFFFFF     (base 16)		Beijing  KDF information technology co. LTD.
+				Room14C,TowerA,,LindaBuilding,No.8,Dongtucheng Road,Chaoyang District, Beijing.
+				Beijing    100013
+				CN
+
+C4-FF-BC   (hex)		Advanced Navigation
+A00000-AFFFFF     (base 16)		Advanced Navigation
+				Level 8, 37 Pitt Street
+				Sydney  NSW  2000
+				AU
+
+C4-FF-BC   (hex)		Mobiletron Electronics Co., Ltd
+200000-2FFFFF     (base 16)		Mobiletron Electronics Co., Ltd
+				85, Sec.4, Chung-Ching Rd., Ta-Ya District
+				Taichung    428
+				TW
+
+C4-FF-BC   (hex)		KyongBo Electric Co., Ltd.
+C00000-CFFFFF     (base 16)		KyongBo Electric Co., Ltd.
+				5, Seongsuil-ro 12-gagil Seongdong-gu
+				Seoul    04792
+				KR
+
+9C-43-1E   (hex)		ProMOS Technologies Inc.
+500000-5FFFFF     (base 16)		ProMOS Technologies Inc.
+				3A3, No.1, Lixing 1st Rd., East Dist.,
+				Hsinchu City  Taiwan  300
+				TW
+
+9C-43-1E   (hex)		Wunda Group plc
+800000-8FFFFF     (base 16)		Wunda Group plc
+				Unit 1-5, Hawthorn, Crick
+				Caldicot  Monmouthshire  NP26 5UT
+				GB
+
+9C-43-1E   (hex)		R-S-I Elektrotechnik GmbH  CO KG
+600000-6FFFFF     (base 16)		R-S-I Elektrotechnik GmbH  CO KG
+				Woelkestrasse 11
+				Schweitenkirchen    85276
+				DE
+
+9C-43-1E   (hex)		CONTINENT Co. Ltd
+900000-9FFFFF     (base 16)		CONTINENT Co. Ltd
+				Bumazhnaya st., 16/3 lit B, of. 414
+				Saint-Petersburg    190020
+				RU
+
+28-2C-02   (hex)		Dexin Digital Technology Corp. Ltd.
+300000-3FFFFF     (base 16)		Dexin Digital Technology Corp. Ltd.
+				No.10 and 12, Wuxing Fourth Road,Wuhou District Chengdu 610045 Sichuan, PR China
+				chengdu  Sichuan  610045
+				CN
+
+9C-43-1E   (hex)		Advanced Logic Technology (ALT) sa
+300000-3FFFFF     (base 16)		Advanced Logic Technology (ALT) sa
+				Route de Niederpallen, 30H
+				Redange-sur-Attert  Luxembourg  8506
+				LU
+
+F8-B5-68   (hex)		Beijing Wanji Techonology Co., Ltd.
+900000-9FFFFF     (base 16)		Beijing Wanji Techonology Co., Ltd.
+				NO.12 Building,Zhongguancun Software Park,Haidian District 
+				beijing  beijing  100193
+				CN
+
+28-2C-02   (hex)		Telecom and Microelectonic Industries
+700000-7FFFFF     (base 16)		Telecom and Microelectonic Industries
+				1-ja ulica Buhvostova, d.12/11, korp.53, floor 13
+				Moscow    107258
+				RU
+
+28-2C-02   (hex)		Systec Intelligent Building Technology (Tianjin) Co.,Ltd.
+900000-9FFFFF     (base 16)		Systec Intelligent Building Technology (Tianjin) Co.,Ltd.
+				Room 1312, Building D, HI-Tech. Information Square, No.8 Huatian Rd., Huayuan HI-Tech. Park
+				Tianjin    300384
+				CN
+
+F8-B5-68   (hex)		ZAO &quot;RADIUS Avtomatika&quot;
+E00000-EFFFFF     (base 16)		ZAO &quot;RADIUS Avtomatika&quot;
+				Panfilovskiy prospekt, 10/3
+				Zelenograd  Moscow  124489
+				RU
+
+28-2C-02   (hex)		Lookman Electroplast Industries Ltd
+600000-6FFFFF     (base 16)		Lookman Electroplast Industries Ltd
+				Old No : 9, New No : 15, II Street Etn., III Main Road , CIT Nagar, Nandanam
+				Chennai  Tamilnadu  600035
+				IN
+
+F8-B5-68   (hex)		SinePulse GmbH
+A00000-AFFFFF     (base 16)		SinePulse GmbH
+				Kistlerhofstr. 170
+				Munich    D-81379
+				DE
+
+F8-B5-68   (hex)		Shenzhen New-Bund Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Shenzhen New-Bund Technology Co., Ltd.
+				Room20A, 20th Floor, HSAE Technology Building, Nanshan District,
+				 Shenzhen    518000
+				CN
+
+F8-B5-68   (hex)		CloudMinds (Shenzhen) Holdings Co., Ltd
+700000-7FFFFF     (base 16)		CloudMinds (Shenzhen) Holdings Co., Ltd
+				Tower 3, 33F, Unit B, Wangjing SOHO,Wangjing Street No.10
+				beijing    100102
+				CN
+
+40-48-FD   (hex)		Dorel Juvenile
+800000-8FFFFF     (base 16)		Dorel Juvenile
+				25 Forbes Blvd
+				Foxborough  MA  02035
+				US
+
+40-48-FD   (hex)		The 52nd Research Institute of China Electronic Technology Group Corporation
+500000-5FFFFF     (base 16)		The 52nd Research Institute of China Electronic Technology Group Corporation
+				No.36 Ma Cheng Road,
+				Hangzhou  Zhejiang  310012
+				CN
+
+40-48-FD   (hex)		BEIJING C&W ELECTRONICS(GROUP)CO.,LTD
+000000-0FFFFF     (base 16)		BEIJING C&W ELECTRONICS(GROUP)CO.,LTD
+				No.14 Jiuxianqiao,chaoyang,Beijing,China
+				Beijing  Beijing  100015
+				CN
+
+F8-B5-68   (hex)		3SI Security Systems, Inc
+C00000-CFFFFF     (base 16)		3SI Security Systems, Inc
+				101 Lindenwood Drive, Suite 200
+				Malvern  PA  19355
+				US
+
+40-48-FD   (hex)		NOX Systems AG
+D00000-DFFFFF     (base 16)		NOX Systems AG
+				Alvierweg 17
+				Vaduz  FL  9490
+				LI
+
+38-73-EA   (hex)		Lightform, Inc.
+900000-9FFFFF     (base 16)		Lightform, Inc.
+				123 Langton St.
+				San Francisco  CA  94103
+				US
+
+38-73-EA   (hex)		Live Sentinel
+600000-6FFFFF     (base 16)		Live Sentinel
+				27 Armthorpe Rd.
+				Brampton  Ontario  L6T 5M4
+				CA
+
+EC-9F-0D   (hex)		Simula Technology Inc.
+100000-1FFFFF     (base 16)		Simula Technology Inc.
+				14 F, 1351, Zhong-Zheng Rd.
+				Taoyuan     330
+				TW
+
+EC-9F-0D   (hex)		Shenzhen Compare Electronics Co., Ltd
+600000-6FFFFF     (base 16)		Shenzhen Compare Electronics Co., Ltd
+				18F 5D First Area, Shenzhen Bay Eco-tech Park, Nanshan District, Shenzhen 518057, China
+				Shenzhen City (深圳市)  Guangdong  518057
+				CN
+
+EC-9F-0D   (hex)		Zhejiang HEJU Communication Technology Co., Ltd
+800000-8FFFFF     (base 16)		Zhejiang HEJU Communication Technology Co., Ltd
+				F4,Block B, Lotus Commercial Building,Lianhua Street 333#,XiHu District
+				HANGZHOU  ZHEJIANG  310012
+				CN
+
+34-D0-B8   (hex)		OROSOUND SAS
+B00000-BFFFFF     (base 16)		OROSOUND SAS
+				48 RUE AMELOT
+				PARIS    75011
+				FR
+
+AC-1D-DF   (hex)		Motec Pty Ltd
+400000-4FFFFF     (base 16)		Motec Pty Ltd
+				121 Merrindale Drive
+				Croydon South  Victoria  3136
+				AU
+
+AC-1D-DF   (hex)		Green IT Korea Co., Ltd.
+700000-7FFFFF     (base 16)		Green IT Korea Co., Ltd.
+				1, Gaun-ro 1-gil, Namyangju-si
+				Seoul    12263
+				KR
+
+AC-1D-DF   (hex)		Shenzhen Ouzheng Electronic Tech Co,.Ltd
+500000-5FFFFF     (base 16)		Shenzhen Ouzheng Electronic Tech Co,.Ltd
+				Longgang District Pinghu Street Fangkeng Road No 7 B Building 2nd Floor
+				Shenzhen  Guangdong  518111
+				CN
+
+CC-22-37   (hex)		shenzhen zonglian network technology limited
+A00000-AFFFFF     (base 16)		shenzhen zonglian network technology limited
+				floor 3, building 3, yuepeng industry area, guanlan avenue,longhua new district
+				shenzhen  guangdong  518000
+				CN
+
+CC-22-37   (hex)		E Ink Corp
+900000-9FFFFF     (base 16)		E Ink Corp
+				1000 Technology Park Drive
+				Billerica  MA  01821
+				US
+
+74-1A-E0   (hex)		Socionext Inc.
+100000-1FFFFF     (base 16)		Socionext Inc.
+				Nomura Shin-Yokohama Bldg., 2-10-23 Shin-Yokohama, Kohoku-ku
+				Yokohama  Kanagawa  222-0033
+				JP
+
+CC-22-37   (hex)		Safilo S.p.A.
+800000-8FFFFF     (base 16)		Safilo S.p.A.
+				Settima Strada
+				Padova    35129
+				IT
+
+2C-27-9E   (hex)		Electronique Bluewave Inc.
+100000-1FFFFF     (base 16)		Electronique Bluewave Inc.
+				5292 Marquette
+				Montreal  Qc  H2J 3Z3
+				CA
+
+2C-27-9E   (hex)		Exegy Inc
+A00000-AFFFFF     (base 16)		Exegy Inc
+				349 Marshall Avenue, Suite 100
+				Saint Louis    63119
+				US
+
+90-4E-91   (hex)		Shanghai JaWay Information Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Shanghai JaWay Information Technology Co., Ltd.
+				Rm. 1102, Science and Technology Building A, No. 900 of Yishan Road, Xuhui District,
+				Shanghai    200030
+				CN
+
+B8-D8-12   (hex)		Glamo Inc.
+000000-0FFFFF     (base 16)		Glamo Inc.
+				6F Sunshinecity Bunkakaikan,
+				Tokyo  Toshima-ku  1708630
+				JP
+
+2C-27-9E   (hex)		FOCAL-JMLab
+700000-7FFFFF     (base 16)		FOCAL-JMLab
+				108 rue de l'Avenir
+				La Talaudière    42353
+				FR
+
+90-4E-91   (hex)		Teleepoch Ltd
+300000-3FFFFF     (base 16)		Teleepoch Ltd
+				No.13 Langshan Rd,HiTech Park,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+18-9B-A5   (hex)		legendsky tech 
+D00000-DFFFFF     (base 16)		legendsky tech 
+				RM2210 PENG YUN GE JINGLI MANSION NO.48 BEILI ROAD SOUTH
+				ShenZhen    518109
+				CN
+
+18-9B-A5   (hex)		SHENZHEN FIONEXX TECHNOLOGIES LTD.
+A00000-AFFFFF     (base 16)		SHENZHEN FIONEXX TECHNOLOGIES LTD.
+				RM503, The 1st office Bldg, Vanke Red Cube Mansion, Buji Street, Longgang District, 
+				shenzhen  Guangdong  518000
+				CN
+
+18-9B-A5   (hex)		Beijing Xinertel Technology Co., Ltd.
+700000-7FFFFF     (base 16)		Beijing Xinertel Technology Co., Ltd.
+				101, Building No.5, No.8 Chuangye Road., Haidian District
+				Beijing   Beijing  100085
+				CN
+
+90-4E-91   (hex)		Showtacle s.r.o.
+C00000-CFFFFF     (base 16)		Showtacle s.r.o.
+				Pecnianska 21
+				Bratislava  Choose State / Province  85101
+				SK
+
+18-9B-A5   (hex)		Taiwan Name Plate Co.,LTD
+E00000-EFFFFF     (base 16)		Taiwan Name Plate Co.,LTD
+				No.36, Huaya 1st Rd., Guishan Dist., Taoyuan City 33383, Taiwan
+				Taoyuan City  Taiwan  33383
+				CN
+
+18-9B-A5   (hex)		Starfire Industries LLC
+500000-5FFFFF     (base 16)		Starfire Industries LLC
+				2109 South Oak St., Suite 100
+				Champaign  IL  61820
+				US
+
+CC-1B-E0   (hex)		Microtech System,Inc  
+000000-0FFFFF     (base 16)		Microtech System,Inc  
+				A-1102, Digital Empire Building
+				Suwon  Gyeonggi-do  16690
+				KR
+
+18-9B-A5   (hex)		Dectris Ltd.
+000000-0FFFFF     (base 16)		Dectris Ltd.
+				Taefernweg 1
+				Baden-Daettwil    5405
+				CH
+
+34-29-8F   (hex)		Keystone Electronic Solutions
+D00000-DFFFFF     (base 16)		Keystone Electronic Solutions
+				469 Julius Jeppe St, Waterkloof
+				Pretoria  Gauteng  0181
+				ZA
+
+28-F5-37   (hex)		Herbert Waldmann GmbH & Co. KG
+900000-9FFFFF     (base 16)		Herbert Waldmann GmbH & Co. KG
+				Peter-Henlein-Straße 5
+				Villingen-Schwenningen  Baden-Württemberg  78056
+				DE
+
+28-F5-37   (hex)		Performance Motion Devices
+E00000-EFFFFF     (base 16)		Performance Motion Devices
+				1 Technology Park Drive 
+				Westford  MA  01886
+				US
+
+28-F5-37   (hex)		MyOmega Systems GmbH
+600000-6FFFFF     (base 16)		MyOmega Systems GmbH
+				Neumeyerstr. 28-34
+				Nürnberg  Bavaria  90411
+				DE
+
+78-D8-00   (hex)		Björkviks Consulting AB
+500000-5FFFFF     (base 16)		Björkviks Consulting AB
+				Hällkanavägen 7
+				Bro    19791
+				SE
+
+78-D8-00   (hex)		Maddalena S.p.A.
+B00000-BFFFFF     (base 16)		Maddalena S.p.A.
+				via G.B. Maddalena 2/4
+				Povoletto  UD  33040
+				IT
+
+78-D8-00   (hex)		SightLine Applications
+900000-9FFFFF     (base 16)		SightLine Applications
+				2828 SW CORBETT AVE
+				PORTLAND  OR  97201
+				US
+
+7C-BA-CC   (hex)		Briowireless Inc.
+B00000-BFFFFF     (base 16)		Briowireless Inc.
+				4593 Louis-B Mayer
+				Laval  QC - Quebec  H7P 6G5
+				CA
+
+7C-BA-CC   (hex)		Virgin Orbit
+700000-7FFFFF     (base 16)		Virgin Orbit
+				4022 E. Conant Street
+				Long Beach  CA  90808
+				US
+
+7C-BA-CC   (hex)		SIGMA-ELEKTRO GmbH
+D00000-DFFFFF     (base 16)		SIGMA-ELEKTRO GmbH
+				Dr.-Julius-Leber-Str. 15
+				Neustadt an der Weinstraße  Germany  67433
+				DE
+
+F8-8A-3C   (hex)		Protos GmbH
+A00000-AFFFFF     (base 16)		Protos GmbH
+				Herrschaftswiesen 11
+				Koblach    6842
+				AT
+
+4C-65-A8   (hex)		TEL-Electronics Ltd
+500000-5FFFFF     (base 16)		TEL-Electronics Ltd
+				Sovetskaya, 85
+				Molzino  Moscow region  142411
+				RU
+
+F8-8A-3C   (hex)		Cadmus Electronic Co.,Ltd.
+800000-8FFFFF     (base 16)		Cadmus Electronic Co.,Ltd.
+				4F.-3, No.872, Jhongjheng Rd., Jhonghe Dist., 
+				New Taipei City  Taiwan (R.O.C.)   23586
+				TW
+
+F8-8A-3C   (hex)		Carefree of Colorado
+100000-1FFFFF     (base 16)		Carefree of Colorado
+				2145 W 6th Ave
+				Broomfield  CO  80020
+				US
+
+F8-8A-3C   (hex)		KOKKIA INC
+500000-5FFFFF     (base 16)		KOKKIA INC
+				43575 Mission Blvd, #302
+				Fremont  CA  94539
+				US
+
+F8-8A-3C   (hex)		Beijing Zhong Chuang Communication Technology Ltd.
+600000-6FFFFF     (base 16)		Beijing Zhong Chuang Communication Technology Ltd.
+				RM# 712-35, 7th Floor,  #2 Xin Xi Road, Shangdi, Haidian District
+				Beijing    100085
+				CN
+
+F8-8A-3C   (hex)		GO-LINK TECHNOLOGY CO., LTD.
+400000-4FFFFF     (base 16)		GO-LINK TECHNOLOGY CO., LTD.
+				Rm. 4, 14F., No.9, Sec.3, Zhonghua Rd.,
+				Hsinchu City    30060
+				TW
+
+4C-65-A8   (hex)		Plus One Japan Limited
+400000-4FFFFF     (base 16)		Plus One Japan Limited
+				2-8-6,Nishishinbashi
+				Minato-ku  Tokyo  105-0003
+				JP
+
+8C-14-7D   (hex)		Electrical & Automation Larsen & Toubro Limited
+E00000-EFFFFF     (base 16)		Electrical & Automation Larsen & Toubro Limited
+				Mysore Campus, KIADB Industrial Area, Hebbal, Hootagalli
+				Mysore  Karnataka  570020
+				IN
+
+8C-14-7D   (hex)		Bausch Datacom NV/SA
+B00000-BFFFFF     (base 16)		Bausch Datacom NV/SA
+				Tiensesteenweg 54-56
+				Korbeek-Lo  Vlaams-Brabant - Belgium  3360
+				BE
+
+8C-14-7D   (hex)		Nio
+000000-0FFFFF     (base 16)		Nio
+				3200 North 1st Street
+				San Jose  NY  95134
+				US
+
+A0-C5-F2   (hex)		AiCare Corp.
+400000-4FFFFF     (base 16)		AiCare Corp.
+				1917 Scepter Ct
+				San Jose  CA  95132
+				US
+
+8C-14-7D   (hex)		Shenzhen  Lanxus  technology Co. Ltd.
+D00000-DFFFFF     (base 16)		Shenzhen  Lanxus  technology Co. Ltd.
+				3rd Floor, Block A, Aerospace micromotor building, Science Park North, Nanshan District
+				Shenzhen  China  518000
+				CN
+
+F0-23-B9   (hex)		Ubiant
+100000-1FFFFF     (base 16)		Ubiant
+				2 Place de Francfort
+				Lyon    69003
+				FR
+
+F0-23-B9   (hex)		Q Core Medical Ltd
+B00000-BFFFFF     (base 16)		Q Core Medical Ltd
+				Yad Haruzim 29, PO Box 8639
+				Netanya    4250529
+				IL
+
+40-ED-98   (hex)		Integrated Design Ltd
+A00000-AFFFFF     (base 16)		Integrated Design Ltd
+				Feltham Point, Air Park Way
+				Feltham  Middlesex  TW137EQ
+				GB
+
+04-71-4B   (hex)		Shenzhen BoClouds Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Shenzhen BoClouds Technology Co.,Ltd.
+				Room 909, Unit A, Cadre Group Centre Building, No.168 TongSha Road, XiLi Town, Nanshan
+				Shenzhen  GuangDong  518000
+				CN
+
+F0-23-B9   (hex)		Annapurna labs
+A00000-AFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+F0-23-B9   (hex)		BSP RUS Ltd.
+300000-3FFFFF     (base 16)		BSP RUS Ltd.
+				174/1 Stavropolskaya street
+				Krasnodar  Krasnodar  350001
+				RU
+
+04-71-4B   (hex)		Griesser Electronic AG
+300000-3FFFFF     (base 16)		Griesser Electronic AG
+				Tänikonerstrasse 3
+				Aadorf  Thurgau  8355
+				CH
+
+04-71-4B   (hex)		Bureau Electronique Appliquee
+500000-5FFFFF     (base 16)		Bureau Electronique Appliquee
+				Allee des Noisetiers, 5
+				ANGLEUR  LIEGE  4031
+				BE
+
+60-D7-E3   (hex)		Ameli s.r.l.
+600000-6FFFFF     (base 16)		Ameli s.r.l.
+				via Guido Rossa,10
+				Impruneta  Firenze  50023
+				IT
+
+08-ED-02   (hex)		Telstra Corporation Limited
+E00000-EFFFFF     (base 16)		Telstra Corporation Limited
+				Level 2 / 150 Lonsdale St
+				Melbourne  Victoria  3000
+				AU
+
+98-AA-FC   (hex)		Dalian Eastern Display Co., Ltd.
+000000-0FFFFF     (base 16)		Dalian Eastern Display Co., Ltd.
+				No.99-5 Huaihe Middle Road E.& T Development Zone Dalian, China
+				Dalian  Liaoning  116600
+				CN
+
+14-4F-D7   (hex)		Edan Instruments, Inc.
+E00000-EFFFFF     (base 16)		Edan Instruments, Inc.
+				No.15, Jinhui Rd., Jinsha Community, Kengzi Subdistrict, Pingshan District,
+				Shenzhen  Guangdong  518122
+				CN
+
+98-AA-FC   (hex)		SURTEC
+100000-1FFFFF     (base 16)		SURTEC
+				616 avenue de l'Europe
+				Le Creusot  burgundy  71206
+				FR
+
+08-ED-02   (hex)		Origami Energy Ltd
+D00000-DFFFFF     (base 16)		Origami Energy Ltd
+				Ashcombe Court, Woolsack Way
+				Godalming    GU7 1LQ
+				GB
+
+14-4F-D7   (hex)		Shanghai B&A Technology Co., Ltd
+D00000-DFFFFF     (base 16)		Shanghai B&A Technology Co., Ltd
+				4F, No. 150 Cailun Rd, Zhangjiang
+				Shanghai    201210
+				CN
+
+14-4F-D7   (hex)		Emerson Network Power (India) Pvt. Ltd.
+900000-9FFFFF     (base 16)		Emerson Network Power (India) Pvt. Ltd.
+				Plot No. G-1, Additional Ambernath Industrial Area,   MIDC Phase-2, Bohonoli 
+				Ambernath,  Maharashtra  421 506
+				IN
+
+A4-11-63   (hex)		SHENZHEN YIWANJIA INFORMATION TECHNOLOGY CO.,LTD
+700000-7FFFFF     (base 16)		SHENZHEN YIWANJIA INFORMATION TECHNOLOGY CO.,LTD
+				Zone B,Floor 15,NO.2 Building,Yihe Road,Shilong Community,Shiyan Street,Baoan District
+				Shenzhen    518000
+				CN
+
+14-4F-D7   (hex)		FLS FINLAND OY
+500000-5FFFFF     (base 16)		FLS FINLAND OY
+				Voudinkatu 35 A
+				Raisio    FI21200
+				FI
+
+A4-11-63   (hex)		Carbon, Inc.
+500000-5FFFFF     (base 16)		Carbon, Inc.
+				312 Chestnut St
+				Redwood City  CA  94063
+				US
+
+A4-11-63   (hex)		SHENZHEN ZHISHI TECHNOLOGY CO., LTD.
+D00000-DFFFFF     (base 16)		SHENZHEN ZHISHI TECHNOLOGY CO., LTD.
+				Room 712 in 3A of Hecheng Century Garden，Wuhe Street South No.118，Longgang District，Shenzhen
+				SHENZHEN  GUANG DONG  518000
+				CN
+
+1C-A0-D3   (hex)		OOO Tekhnotronika
+000000-0FFFFF     (base 16)		OOO Tekhnotronika
+				Studeniy 4/1
+				Moscow    127282
+				RU
+
+40-A3-6B   (hex)		Securiton AG
+600000-6FFFFF     (base 16)		Securiton AG
+				Alpenstrasse 20, P.O. Box 127
+				Zollikofen    CH-3052 
+				CH
+
+A4-11-63   (hex)		Moog Music Inc.
+B00000-BFFFFF     (base 16)		Moog Music Inc.
+				160 Broadway St
+				Asheville  NC  28801
+				US
+
+40-F3-85   (hex)		Teleepoch Ltd
+800000-8FFFFF     (base 16)		Teleepoch Ltd
+				No.13 Langshan Rd,HiTech Park,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+40-F3-85   (hex)		SubPac
+000000-0FFFFF     (base 16)		SubPac
+				380 Portage Ave.
+				Palo Alto  CA  94306
+				US
+
+8C-C8-F4   (hex)		Strongbyte Solutions Limited
+800000-8FFFFF     (base 16)		Strongbyte Solutions Limited
+				Unit 7, Wychwood Business Centre
+				Chipping Norton  Oxfordshire  OX7 6XU
+				GB
+
+40-F3-85   (hex)		Beijing Zongheng Electro-Mechanical Technology Development Co.
+200000-2FFFFF     (base 16)		Beijing Zongheng Electro-Mechanical Technology Development Co.
+				No.1 Fenghui East Road, Yongfeng Industry Base, Haidian District, Beijing China
+				Beijing    100094
+				CN
+
+8C-C8-F4   (hex)		Evaporcool Solutions
+E00000-EFFFFF     (base 16)		Evaporcool Solutions
+				5100 Wilfong Road
+				Memphis  TN  38134
+				US
+
+40-F3-85   (hex)		Creanord
+A00000-AFFFFF     (base 16)		Creanord
+				Pasilanraitio 9B
+				Helsinki  Uusimaa  00240
+				FI
+
+40-F3-85   (hex)		Digital Bros S.p.A.
+D00000-DFFFFF     (base 16)		Digital Bros S.p.A.
+				via Tortona, 37
+				Milan  MI  20144
+				IT
+
+8C-C8-F4   (hex)		Dark Horse Connect LLC
+200000-2FFFFF     (base 16)		Dark Horse Connect LLC
+				13492 Research Blvd, Ste 336
+				Austin  TX  78750
+				US
+
+8C-C8-F4   (hex)		Shenzhen KSTAR Science and Technology Co., Ltd
+C00000-CFFFFF     (base 16)		Shenzhen KSTAR Science and Technology Co., Ltd
+				Kstar Industrial Park, 7th Road, Guangming Hi- Tech Industrial Zone
+				Shenzhen    518070
+				CN
+
+50-A4-D0   (hex)		Changsha SinoCare, Inc
+A00000-AFFFFF     (base 16)		Changsha SinoCare, Inc
+				No.265 Gu yuan road  Hi-Tech Zone, Yuelu district 
+				Changsha  Hunan  410205
+				CN
+
+50-A4-D0   (hex)		Axel Technology
+D00000-DFFFFF     (base 16)		Axel Technology
+				Via Caduti di Sabbiuno 6/F
+				Anzola dell'Emilia    40011
+				IT
+
+50-A4-D0   (hex)		Sagetech Corporation
+E00000-EFFFFF     (base 16)		Sagetech Corporation
+				PO Box 1146
+				White Salmon  WA  98672
+				US
+
+50-A4-D0   (hex)		Raven Industries Inc.
+400000-4FFFFF     (base 16)		Raven Industries Inc.
+				205 E 6TH Street
+				Sioux Falls  SD  57104
+				US
+
+34-04-9E   (hex)		GoChip Inc.
+000000-0FFFFF     (base 16)		GoChip Inc.
+				275 Airpark Blvd, Suite 100
+				Chico  CA  95973
+				US
+
+40-ED-98   (hex)		A-IOX INC.
+200000-2FFFFF     (base 16)		A-IOX INC.
+				10Fl., No. 497, Sec. 2, Tiding Blvd., Neihu Dist.
+				Taipei City    11493
+				TW
+
+34-04-9E   (hex)		Life Interface Co., Ltd.
+600000-6FFFFF     (base 16)		Life Interface Co., Ltd.
+				2-1-16
+				Minato  Tokyo  1050013
+				JP
+
+40-ED-98   (hex)		GuangZhou FiiO Electronics Technology Co.,Ltd
+100000-1FFFFF     (base 16)		GuangZhou FiiO Electronics Technology Co.,Ltd
+				201,2/F, F Building, Hougang Industrial Zone, Shigang Village, huangshi West Road,Baiyun District
+				GuangZhou    510430
+				CN
+
+40-ED-98   (hex)		BloomSky,Inc.
+C00000-CFFFFF     (base 16)		BloomSky,Inc.
+				723 N Shoreline Blvd.
+				Mountain view  CA  94043
+				US
+
+50-0B-91   (hex)		Igor, Inc.
+000000-0FFFFF     (base 16)		Igor, Inc.
+				5619 NW 86th St.
+				Johnston  IA  50131
+				US
+
+A4-58-0F   (hex)		Stone Lock Global, Inc.
+100000-1FFFFF     (base 16)		Stone Lock Global, Inc.
+				101 N Church St
+				Olathe  KS  66061
+				US
+
+A4-58-0F   (hex)		AIR LIQUIDE MEDICAL SYSTEMS
+800000-8FFFFF     (base 16)		AIR LIQUIDE MEDICAL SYSTEMS
+				
+				    
+				
+
+50-0B-91   (hex)		Annapurna labs
+200000-2FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+A4-58-0F   (hex)		Ksenia Security srl
+900000-9FFFFF     (base 16)		Ksenia Security srl
+				SP Valtesino 44
+				Ripatransone  AP  63065
+				IT
+
+50-0B-91   (hex)		Sinope technologies Inc
+400000-4FFFFF     (base 16)		Sinope technologies Inc
+				705 Montrichard
+				St-Jean-Sur-Richelieu  Quebec  J2X5K8
+				CA
+
+7C-CB-E2   (hex)		1000eyes GmbH
+200000-2FFFFF     (base 16)		1000eyes GmbH
+				Joachimsthaler Str. 12
+				Berlin    10719
+				DE
+
+7C-CB-E2   (hex)		SY Electronics Limited
+600000-6FFFFF     (base 16)		SY Electronics Limited
+				7 Worrall Street
+				Salford    M5 4TH
+				GB
+
+24-4E-7B   (hex)		Nanjing Wanlida Technology Co., Ltd.
+700000-7FFFFF     (base 16)		Nanjing Wanlida Technology Co., Ltd.
+				Wanlida Industry Zone, Nanjing County
+				Zhangzhou  Fujian  363601
+				CN
+
+7C-CB-E2   (hex)		Hangzhou Haohaokaiche Technology Co.,Ltd.
+900000-9FFFFF     (base 16)		Hangzhou Haohaokaiche Technology Co.,Ltd.
+				Building 7, Haichuang Park, No.998 Wenyi West Road, Yuhang District
+				Hangzhou  Zhejiang  331000
+				CN
+
+7C-CB-E2   (hex)		DTECH Labs, Inc.
+500000-5FFFFF     (base 16)		DTECH Labs, Inc.
+				21580 Beaumeade Circle, Suite 230
+				Ashburn  VA  20147
+				US
+
+48-65-EE   (hex)		shenzhen sunflower technologies CO., LIMITED
+600000-6FFFFF     (base 16)		shenzhen sunflower technologies CO., LIMITED
+				207, 4th Tower , ZhongXing industrial City, Nanshan zone
+				ShenZhen  GangDong  518000
+				CN
+
+48-65-EE   (hex)		DefPower Ltd
+000000-0FFFFF     (base 16)		DefPower Ltd
+				6 Repton Close
+				Basildon    SS13 1LE
+				GB
+
+4C-E1-73   (hex)		Shenzhen Evolution Dynamics Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen Evolution Dynamics Co., Ltd.
+				Room 1212, Wanjun trade building, Baoxing Rd No.21, Baoan District, Shenzhen City, China
+				shenzhen  GuangDong  518100
+				CN
+
+1C-C0-E1   (hex)		Exigent Sensors
+B00000-BFFFFF     (base 16)		Exigent Sensors
+				11331 Markon Dr
+				Garden Grove  CA  92841
+				US
+
+1C-C0-E1   (hex)		Ospicon Company Limited
+900000-9FFFFF     (base 16)		Ospicon Company Limited
+				Room 1025, 10/F., Metro Centre II, 21 Lam Hing St., 
+				Kowloon Bay  Kowloon  00000
+				HK
+
+4C-E1-73   (hex)		Nexoforge Inc.
+100000-1FFFFF     (base 16)		Nexoforge Inc.
+				4514 47 Ave 
+				Leduc  Alberta  T9E 5S9
+				CA
+
+1C-C0-E1   (hex)		NewLand (NZ) Communication Tech Limited
+D00000-DFFFFF     (base 16)		NewLand (NZ) Communication Tech Limited
+				39A WAIPA ST BIRKENHEAD
+				AUCKLAND  Auckland  0626
+				NZ
+
+AC-64-DD   (hex)		PFDC ELANCYL
+800000-8FFFFF     (base 16)		PFDC ELANCYL
+				LES CAUQUILLOUS 
+				81506 LAVAUR CEDEX    81506
+				FR
+
+AC-64-DD   (hex)		Shenzhen PuHua Technology Co., Ltd
+200000-2FFFFF     (base 16)		Shenzhen PuHua Technology Co., Ltd
+				4/F BLDG-B, Forzen Technology Park,Fuyuan 2nd Road, Fuyong Town, Baoan District
+				shenzhen    518103
+				CN
+
+AC-64-DD   (hex)		Bluewave Global Manufacturing Limited
+A00000-AFFFFF     (base 16)		Bluewave Global Manufacturing Limited
+				82/F, International Commerce Centre, 1 Austin Road
+				West Kowloon    0
+				HK
+
+AC-64-DD   (hex)		Wittmann Kunststoffgeräte GmbH
+700000-7FFFFF     (base 16)		Wittmann Kunststoffgeräte GmbH
+				Lichtblaustraße 10
+				Vienna  Vienna  1220
+				AT
+
+38-3A-21   (hex)		R3C Information(Shenzhen) Co.，Ltd.
+000000-0FFFFF     (base 16)		R3C Information(Shenzhen) Co.，Ltd.
+				2F,JinHuiQiou Building,Langshan2 Road,Hi-Tech Ind.Park, Nanshan District
+				Shenzhen  GuangDong  86
+				CN
+
+38-3A-21   (hex)		HOBART GmbH
+100000-1FFFFF     (base 16)		HOBART GmbH
+				Robert-Bosch-Straße 17
+				Offenburg  Baden-Württemberg  77656
+				DE
+
+F8-1D-78   (hex)		GUANGDONG ENOK COMMUNICATION CO., LTD.
+E00000-EFFFFF     (base 16)		GUANGDONG ENOK COMMUNICATION CO., LTD.
+				No.139 Lixiang road, Songmushan Dalang town, Dongguan,Guangdong ,China
+				DongGuan  GuanDong  523795
+				CN
+
+38-3A-21   (hex)		OOO NPP Uraltechnologiya
+500000-5FFFFF     (base 16)		OOO NPP Uraltechnologiya
+				Studencheskaya str. 16-130
+				Ekaterinburg    620137
+				RU
+
+F8-1D-78   (hex)		WUHAN GUIDE INFRARED CO.,LTD
+700000-7FFFFF     (base 16)		WUHAN GUIDE INFRARED CO.,LTD
+				No.6 Huanglongshan South Rd
+				Wuhan  Hubei  430070
+				CN
+
+F8-1D-78   (hex)		SigmaConnectivityAB
+B00000-BFFFFF     (base 16)		SigmaConnectivityAB
+				Mobilv 10
+				Lund    223 62
+				SE
+
+C0-D3-91   (hex)		B9Creations
+100000-1FFFFF     (base 16)		B9Creations
+				525 University Loop Ste 115
+				Rapid City  SD  57701
+				US
+
+F0-AC-D7   (hex)		Fiziico Co., Ltd.
+E00000-EFFFFF     (base 16)		Fiziico Co., Ltd.
+				8F-3, No. 15, Ln 360, Sec. 1, Neihu Rd., Neihu District
+				Taipei    11493
+				TW
+
+98-6D-35   (hex)		my-PV GmbH
+C00000-CFFFFF     (base 16)		my-PV GmbH
+				Teichstrasse 43
+				Neuzeug    4523
+				AT
+
+F0-AC-D7   (hex)		Zhejiang Makepower Electronics,Inc.
+B00000-BFFFFF     (base 16)		Zhejiang Makepower Electronics,Inc.
+				Building 2, Estate 10, Wenzhou Hi-Tech Industrial Development Area, zhejiang, China
+				shenzhen    518000
+				CN
+
+28-36-38   (hex)		CHARGELIB
+500000-5FFFFF     (base 16)		CHARGELIB
+				11 CITE VANEAU
+				PARIS    75007
+				FR
+
+28-36-38   (hex)		Georg Neumann GmbH
+600000-6FFFFF     (base 16)		Georg Neumann GmbH
+				Leipziger Str. 112
+				Berlin    10117
+				DE
+
+B0-C5-CA   (hex)		EM-Tech
+000000-0FFFFF     (base 16)		EM-Tech
+				40, Changwon-daero 1144beon-gil, Seongsan-gu
+				Changwon  Gyeongsangnam-do  642-120
+				KR
+
+8C-19-2D   (hex)		Pyras Technology Inc.
+D00000-DFFFFF     (base 16)		Pyras Technology Inc.
+				6F, No. 1353, Chung Cheng Rd., Taoyuan Dist.,
+				Taoyuan City  Select State  33071
+				TW
+
+8C-19-2D   (hex)		Noritsu Precision Co., Ltd.
+000000-0FFFFF     (base 16)		Noritsu Precision Co., Ltd.
+				579-1 Umehara
+				Wakayama  Wakayama  640-8550
+				JP
+
+78-CA-83   (hex)		Eksagate Elektronik Mühendislik ve Bilgisayar San. Tic. A.Ş.
+A00000-AFFFFF     (base 16)		Eksagate Elektronik Mühendislik ve Bilgisayar San. Tic. A.Ş.
+				ŞEHİT AHMET SOK. 12/1 MECİDİYEKÖY
+				istanbul    34381
+				TR
+
+8C-19-2D   (hex)		smartHome Partner GmbH
+600000-6FFFFF     (base 16)		smartHome Partner GmbH
+				Dalbker Strasse 138
+				Oerlinghausen  NRW  33813
+				DE
+
+1C-87-76   (hex)		Dspread Technology (Beijing) Inc.
+000000-0FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+D0-D9-4F   (hex)		ARROWAVE TECHNOLOGIES LIMITED
+C00000-CFFFFF     (base 16)		ARROWAVE TECHNOLOGIES LIMITED
+				L1, 1st Floor, LIC Colony, Sector-14, 10th Main, Jeevanbhima Nagar
+				Bangalore  Karnataka  560075
+				IN
+
+D0-D9-4F   (hex)		Shenzhen FDC Electuonic Co.,Ltd.
+A00000-AFFFFF     (base 16)		Shenzhen FDC Electuonic Co.,Ltd.
+				Gushu Community, Xixiang Street, Baoan Dist. ShenZhen, GuangDong, China
+				Shenzhen  Guangdong  518126
+				CN
+
+CC-D3-1E   (hex)		PJG Systementwicklung GmbH
+400000-4FFFFF     (base 16)		PJG Systementwicklung GmbH
+				Billrothstrasse 2A
+				Vienna  Vienna  1190
+				AT
+
+CC-D3-1E   (hex)		NantEnergy
+C00000-CFFFFF     (base 16)		NantEnergy
+				8455 North 90th Street Suite 4
+				Scottsdale  AZ  85258
+				US
+
+E0-B6-F5   (hex)		Advatek Lighting Pty Ltd
+E00000-EFFFFF     (base 16)		Advatek Lighting Pty Ltd
+				16 / 62 Ramset Drive
+				Chirnside Park  VIC  3116
+				AU
+
+E0-B6-F5   (hex)		 Shanghai- British Information Technology Co., Ltd
+200000-2FFFFF     (base 16)		 Shanghai- British Information Technology Co., Ltd
+				No.1 Building, No.433 Guoshoujing Road, Pudong District, Shanghai
+				shanghai    201203
+				CN
+
+2C-26-5F   (hex)		AATON DIGITAL
+C00000-CFFFFF     (base 16)		AATON DIGITAL
+				2 RUE DE LA PAIX
+				GRENOBLE  RHONE-ALPES  38000
+				FR
+
+50-FF-99   (hex)		Yongjing Shanghai Electronic Science and Technology 
+300000-3FFFFF     (base 16)		Yongjing Shanghai Electronic Science and Technology 
+				Room 202,Building 2,No.65,Lane1398,Xin Zhu Road,  Minhang District Shanghai.
+				shanghai  shanghai  201100 
+				CN
+
+E0-B6-F5   (hex)		Motiveprime Consumer Electronics Pvt Ltd
+900000-9FFFFF     (base 16)		Motiveprime Consumer Electronics Pvt Ltd
+				#244,17th cross Sector 6 HSR Layout
+				Bangalore  Karnataka  560102
+				IN
+
+E0-B6-F5   (hex)		Shenzhen Civicom Technology Co.,Limited
+500000-5FFFFF     (base 16)		Shenzhen Civicom Technology Co.,Limited
+				Room 1302,Microprofit Building,Gaoxin 6th Avenue,Hi-tech Park,Nanshan District 
+				Shenzhen  Guangdong  518057
+				CN
+
+50-FF-99   (hex)		Garrison Technology
+500000-5FFFFF     (base 16)		Garrison Technology
+				20-22 Wenlock Road
+				London  London  N1 7GU
+				GB
+
+98-6D-35   (hex)		PDAHL 
+500000-5FFFFF     (base 16)		PDAHL 
+				Gammagatan  1
+				Moelndal  Sweden  43949
+				SE
+
+7C-47-7C   (hex)		I-Convergence.com
+E00000-EFFFFF     (base 16)		I-Convergence.com
+				2A2212, No.32 Baiziwan Road, Chaoyang District
+				Beijing    100021
+				CN
+
+7C-47-7C   (hex)		RLC Electronics Systems
+400000-4FFFFF     (base 16)		RLC Electronics Systems
+				10 Corporate Blvd.
+				Sinking Spring  PA  19608
+				US
+
+7C-47-7C   (hex)		DaLian Cheering Tech Co.,Ltd
+900000-9FFFFF     (base 16)		DaLian Cheering Tech Co.,Ltd
+				321-1 Tuqiang Street RM308,DDA
+				DaLian  Liaoning  116023
+				CN
+
+38-FD-FE   (hex)		Swedish Adrenaline AB
+B00000-BFFFFF     (base 16)		Swedish Adrenaline AB
+				Pilefeltsgatan 73
+				Halmstad    302 50
+				SE
+
+38-FD-FE   (hex)		Indra Navia AS
+800000-8FFFFF     (base 16)		Indra Navia AS
+				Olaf Helsets vei 6, P.O. Box 150 Oppsal
+				Oslo    0619
+				NO
+
+38-FD-FE   (hex)		OOO Group of Industrial Technologies
+900000-9FFFFF     (base 16)		OOO Group of Industrial Technologies
+				Profsoyuznaya st. 124A
+				Moscow  Moscow  117321
+				RU
+
+38-FD-FE   (hex)		Edge I&D Co., Ltd.
+000000-0FFFFF     (base 16)		Edge I&D Co., Ltd.
+				1342-12, Gyeongchung-daero, Chowol-eup
+				Gwangju-si  Gyeonggi-do  12735
+				KR
+
+5C-F2-86   (hex)		Access IS
+700000-7FFFFF     (base 16)		Access IS
+				18 Suttons Business Park
+				READING  Berks  RG6 1AZ
+				GB
+
+38-B8-EB   (hex)		Ajax Systems Inc
+C00000-CFFFFF     (base 16)		Ajax Systems Inc
+				910 Foulk Road, Suite 201
+				Wilmington,    19803
+				UA
+
+38-B8-EB   (hex)		NHS Sistemas de Energia
+900000-9FFFFF     (base 16)		NHS Sistemas de Energia
+				Juscelino Kubitscheck de Oliveira 5270
+				Curitiba  Parana  81260000
+				BR
+
+38-B8-EB   (hex)		UMLOGICS
+400000-4FFFFF     (base 16)		UMLOGICS
+				17, Techno2ro, Yuseong-gu
+				Daejeon    34012
+				KR
+
+38-B8-EB   (hex)		SECAD SA
+A00000-AFFFFF     (base 16)		SECAD SA
+				Zac des Pellants
+				St Martin du Fresne    01430
+				FR
+
+38-FD-FE   (hex)		Management Service Corporation
+A00000-AFFFFF     (base 16)		Management Service Corporation
+				1-7-12 Marunouchi, Chiyoda-ku
+				Tokyo    100-0005
+				JP
+
+38-B8-EB   (hex)		Bumjin C&L Co., Ltd.
+000000-0FFFFF     (base 16)		Bumjin C&L Co., Ltd.
+				9B 10L, 833-14 Wonsi-dong Danwon-gu
+				Ansan  Gyeonggi  15612
+				KR
+
+78-CA-83   (hex)		Pinhole (Beijing) Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Pinhole (Beijing) Technology Co., Ltd.
+				Room 1001-008, No.1 Building, No. 3 Haidian Street, Haidian District
+				Beijing    100190
+				CN
+
+78-CA-83   (hex)		Neofon GmbH
+300000-3FFFFF     (base 16)		Neofon GmbH
+				Sonnengrund 13a
+				Starnberg    82319
+				DE
+
+78-CA-83   (hex)		APC
+200000-2FFFFF     (base 16)		APC
+				PO Box 30204
+				Al-Khobar    31952
+				SA
+
+78-CA-83   (hex)		Nomiku
+600000-6FFFFF     (base 16)		Nomiku
+				475 Alvarado St Apt 2
+				San Francisco  CA  94114
+				US
+
+1C-88-79   (hex)		Orion Labs inc
+E00000-EFFFFF     (base 16)		Orion Labs inc
+				2125 Mission St
+				San Francisco  CA  94110
+				US
+
+1C-88-79   (hex)		Beijing Raycores Technology Co.,Ltd
+D00000-DFFFFF     (base 16)		Beijing Raycores Technology Co.,Ltd
+				1113# 11/F #A Building No.118 Huilongguan West Street,Changping District
+				Beijing    102208
+				CN
+
+1C-87-74   (hex)		Surtec Industries, Inc
+800000-8FFFFF     (base 16)		Surtec Industries, Inc
+				9 Kon Jan North Road, Liutu Industrial Zone
+				Keelung    20647
+				TW
+
+1C-88-79   (hex)		Ultraflux
+400000-4FFFFF     (base 16)		Ultraflux
+				9 Allee Rosa Luxembourg
+				Eragny    95610
+				FR
+
+1C-87-74   (hex)		Nebbiolo Technologies
+A00000-AFFFFF     (base 16)		Nebbiolo Technologies
+				860 Hillview Court, #310
+				Milpitas  CA  94035
+				US
+
+1C-87-74   (hex)		Wide World Trade HK ltd.
+900000-9FFFFF     (base 16)		Wide World Trade HK ltd.
+				Office Tower, Convention Plaza, 1 Harbour Road, Wanchai
+				Hong Kong    4210
+				HK
+
+1C-87-74   (hex)		Silora R&D
+300000-3FFFFF     (base 16)		Silora R&D
+				Kibbutz Kfar-Masaryk
+				Haifa    25208
+				IL
+
+1C-87-74   (hex)		SIGFOX
+100000-1FFFFF     (base 16)		SIGFOX
+				Bâtiment E-volution - 425, rue Jean Rostand 
+				Labege    31670
+				FR
+
+1C-87-76   (hex)		Qivivo
+D00000-DFFFFF     (base 16)		Qivivo
+				11 impasse Juton
+				NANTES    44000
+				FR
+
+1C-87-76   (hex)		Guangzhou Video-Star Electronics Co.,Ltd.
+800000-8FFFFF     (base 16)		Guangzhou Video-Star Electronics Co.,Ltd.
+				6F/No.6 Building, No.9/4th Lanyu St., GZ Economy&Technology Development Area
+				Guangzhou  Guangdong  510730
+				CN
+
+1C-87-76   (hex)		philandro Software GmbH
+600000-6FFFFF     (base 16)		philandro Software GmbH
+				Rosenbergstr. 46
+				Stuttgart    70176
+				DE
+
+1C-87-76   (hex)		Corporate Systems Engineering 
+700000-7FFFFF     (base 16)		Corporate Systems Engineering 
+				1215 Brookville Way
+				Indianapolis   IN  46239
+				US
+
+1C-87-76   (hex)		Tokyo Drawing Ltd.
+900000-9FFFFF     (base 16)		Tokyo Drawing Ltd.
+				103 Ni Terai-machi
+				Nomi-shi  Ishikawa  923-1121
+				JP
+
+1C-87-76   (hex)		Unjo AB
+300000-3FFFFF     (base 16)		Unjo AB
+				Bergfotsgatan 3B
+				Mölndal    SE-43135
+				SE
+
+1C-87-79   (hex)		Visual Land Inc.
+300000-3FFFFF     (base 16)		Visual Land Inc.
+				17785 Center Court Dr. #670
+				Cerritos  CA  90703
+				US
+
+1C-87-79   (hex)		Wurm GmbH & Co. KG Elektronische Systeme
+000000-0FFFFF     (base 16)		Wurm GmbH & Co. KG Elektronische Systeme
+				Morsbachtalstr. 30
+				Remscheid    42857
+				DE
+
+1C-87-76   (hex)		Ibeo Automotive Systems GmbH
+200000-2FFFFF     (base 16)		Ibeo Automotive Systems GmbH
+				Merkurring 60-62
+				Hamburg    22143
+				DE
+
+40-A3-6B   (hex)		FAOD Co.,Ltd.
+D00000-DFFFFF     (base 16)		FAOD Co.,Ltd.
+				#301, U-Tower, 1029, Yeongdeok-dong, Giheung-gu
+				Yongin-si  Gyeonggi-do  446-908
+				KR
+
+84-39-BE   (hex)		Guangdong SunMeng Information Technology Co. Ltd.
+900000-9FFFFF     (base 16)		Guangdong SunMeng Information Technology Co. Ltd.
+				Yuexiu District of Shuiyin Road No.56th courtyard No.1 building six-floor
+				Guangzhou  Guangdong  510627
+				CN
+
+84-39-BE   (hex)		Shenzhen IP3 Century Intelligent Technology Co., Ltd
+600000-6FFFFF     (base 16)		Shenzhen IP3 Century Intelligent Technology Co., Ltd
+				Unit A1, 11F, Block A, Tongfang Information Harbor, No.11, Langshan Road, Hi-Tech Park(North), Nanshan District, Shenzhen
+				Shenzhen  Guangdong  518010
+				CN
+
+40-A3-6B   (hex)		TOPROOTTechnology Corp. Ltd.
+200000-2FFFFF     (base 16)		TOPROOTTechnology Corp. Ltd.
+				5F-8, No. 14, Lane 609, Sec.5, Chongsin Rd., 
+				Sanchong Dist.   NewTaipei City   241
+				TW
+
+70-88-6B   (hex)		Beijing Strongleader Science & Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Beijing Strongleader Science & Technology Co., Ltd.
+				No. 12 Yard, Zhong Guan Cun South St. 
+				Beijing  Beijing  100081
+				CN
+
+70-88-6B   (hex)		RHXTune Technology Co.,Ltd
+A00000-AFFFFF     (base 16)		RHXTune Technology Co.,Ltd
+				Room 409, TianGong building A, Xueyuan Road 30, Haidian District
+				Beijing  Beijing  100083
+				CN
+
+70-88-6B   (hex)		HORI CO., LTD.
+400000-4FFFFF     (base 16)		HORI CO., LTD.
+				640, Saedo-cho
+				Yokohama-city  Kanagawa  224-0054
+				JP
+
+70-88-6B   (hex)		MAX4G, Inc.
+C00000-CFFFFF     (base 16)		MAX4G, Inc.
+				6400 Flying Cloud Drive, Suite 225
+				Eden Prairie  MN  55344
+				US
+
+70-88-6B   (hex)		Veracity UK Ltd
+000000-0FFFFF     (base 16)		Veracity UK Ltd
+				4 Dow Road
+				Monkton, Prestwick    KA9 2TU
+				GB
+
+80-0A-80   (hex)		Dongguan I-Chime electrinics Co.,Ltd
+100000-1FFFFF     (base 16)		Dongguan I-Chime electrinics Co.,Ltd
+				3/F,A/B,west of Xiangmang road,Fugang village
+				Dongguan  Guangdong  523660
+				CN
+
+CC-1B-E0   (hex)		Sichuan Dianjia network technology Co.Ltd.
+700000-7FFFFF     (base 16)		Sichuan Dianjia network technology Co.Ltd.
+				East 6F,No.51 East Wenshui Road,Hongkou District
+				Shanghai  Shanghai  200437
+				CN
+
+CC-1B-E0   (hex)		i-Trinetech Co.,Ltd.
+200000-2FFFFF     (base 16)		i-Trinetech Co.,Ltd.
+				4th FL.,East Wing of M-8 Building,Sparrow Ridge Industrial Zone,Science&Technology Park,Nanshan District.,Shenzhen City
+				Shenzhen  Guangdong  518057
+				CN
+
+CC-1B-E0   (hex)		ART&CORE Inc
+B00000-BFFFFF     (base 16)		ART&CORE Inc
+				6F, 44, Burim-ro 170beon-gil, Dongan-gu,
+				Anyang-si  Gyeonggi-do  431-060
+				KR
+
+00-55-DA   (hex)		Shinko Technos co.,ltd.
+000000-0FFFFF     (base 16)		Shinko Technos co.,ltd.
+				2-5-1, Senba Higashi
+				Mino  Osaka  562-0035
+				JP
+
+C8-8E-D1   (hex)		Aventics GmbH
+E00000-EFFFFF     (base 16)		Aventics GmbH
+				Ulmer Str. 4
+				Laatzen  Lower Saxony  30880
+				DE
+
+A0-3E-6B   (hex)		iLoda Solutions Limited
+300000-3FFFFF     (base 16)		iLoda Solutions Limited
+				217A, 2/F, Enterprise Place
+				Hong Kong  Hong Kong  000000
+				HK
+
+A0-3E-6B   (hex)		Wuhan Rui Ying Tong Network Technology Co., Ltd(China)
+600000-6FFFFF     (base 16)		Wuhan Rui Ying Tong Network Technology Co., Ltd(China)
+				No.303, Optics Valley Avenue, Wuhan, Hubei, China
+				Wuhan  Hubei  430074
+				CN
+
+A0-3E-6B   (hex)		SinoGrid Software Systems Inc.
+700000-7FFFFF     (base 16)		SinoGrid Software Systems Inc.
+				3rd Floor , No.4 Aviation Industry Technology Park
+				Beijing  Beijing  101111
+				CN
+
+1C-21-D1   (hex)		Microview Science and Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Microview Science and Technology Co.,Ltd
+				NO.29 Zhufang Road,Shangdi,Haidian District,Beijing,P.R.China
+				Beijing  Beijing  100085
+				CN
+
+1C-21-D1   (hex)		Scientific-Production Enterprise Dynamics
+400000-4FFFFF     (base 16)		Scientific-Production Enterprise Dynamics
+				Anisimova street, 6
+				Cheboksary  Chuvash Republic  428015
+				RU
+
+DC-44-27   (hex)		Neusoft Corporation
+900000-9FFFFF     (base 16)		Neusoft Corporation
+				No.2 Xinxiu Street,Hunnan New District,Shenyang,Liaoning,China
+				Shenyang  Liaoning  110179
+				CN
+
+C8-8E-D1   (hex)		AISWORLD PRIVATE LIMITED
+000000-0FFFFF     (base 16)		AISWORLD PRIVATE LIMITED
+				ROOM 1406, 14/F., WING TUCK COMMERCIAL CENTRE 177-183 WING LOK STREET, SHEUNG WAN. HONG KONG
+				HONG KONG  SHEUNG WAN  999077
+				HK
+
+B0-C5-CA   (hex)		Audio Elektronik İthalat İhracat San ve Tic A.Ş.
+E00000-EFFFFF     (base 16)		Audio Elektronik İthalat İhracat San ve Tic A.Ş.
+				Esenkent Mah. Barajyolu cad. No:26
+				İstanbul  Ümraniye  34776
+				TR
+
+B0-C5-CA   (hex)		Private
+D00000-DFFFFF     (base 16)		Private
+
+B0-C5-CA   (hex)		XMetrics
+C00000-CFFFFF     (base 16)		XMetrics
+				Via Caravaggio, 3
+				Bussero  MI  20060
+				IT
+
+DC-44-27   (hex)		Century Audio, Inc.
+500000-5FFFFF     (base 16)		Century Audio, Inc.
+				6220 Overlook Rd.
+				Peachtree Corners  Georgia  30092
+				US
+
+B0-C5-CA   (hex)		abode systems, inc.
+300000-3FFFFF     (base 16)		abode systems, inc.
+				2625 Middlefield Road
+				Palo Alto  CA  94306
+				US
+
+78-C2-C0   (hex)		Huwomobility
+E00000-EFFFFF     (base 16)		Huwomobility
+				1196 Borregas Ave, Suite 100
+				Sunnyvale  California  94089
+				US
+
+78-C2-C0   (hex)		SES
+900000-9FFFFF     (base 16)		SES
+				35-39 avenue du Danemark
+				TOURS  Indre et Loire  37072
+				FR
+
+74-F8-DB   (hex)		Simon Electric (China) Co.,ltd
+D00000-DFFFFF     (base 16)		Simon Electric (China) Co.,ltd
+				No.1 Simon Rd, Jiangsu Haian, China
+				Nantong  Jiangsu  226601
+				CN
+
+74-F8-DB   (hex)		Songam Syscom Co. LTD.
+800000-8FFFFF     (base 16)		Songam Syscom Co. LTD.
+				1672-1, Donghwa-Ri, Munmak-Eup
+				Wonju  Gangwon-Do  220-801
+				KR
+
+74-F8-DB   (hex)		Shenzhen Melon Electronics Co.,Ltd
+600000-6FFFFF     (base 16)		Shenzhen Melon Electronics Co.,Ltd
+				3 Floor ,A5 building ,YinLong Technology Industrial Park ,Shenshan Road 292 ,Longgang District
+				Shenzhen  Guangdong  518116
+				CN
+
+78-C2-C0   (hex)		XRONOS-INC
+100000-1FFFFF     (base 16)		XRONOS-INC
+				SHINANOMACHI35
+				SHINJUKUKU  TOKYO  160-0016
+				JP
+
+B4-37-D1   (hex)		Union Tecnologica Noxium S.L.
+E00000-EFFFFF     (base 16)		Union Tecnologica Noxium S.L.
+				Calle Averroes nº8, Edificio Acropolis
+				Sevilla  Sevilla  41020
+				ES
+
+B4-37-D1   (hex)		ZXY Sport Tracking
+D00000-DFFFFF     (base 16)		ZXY Sport Tracking
+				Ingvald Ystgaards vei 1
+				Trondheim  Norway  7047
+				NO
+
+B4-37-D1   (hex)		NSI Co., Ltd.
+B00000-BFFFFF     (base 16)		NSI Co., Ltd.
+				3F, No.33-1, Lane235, Sung-Chiang Road
+				Taipei    10483
+				TW
+
+88-5D-90   (hex)		CPAC Systems
+300000-3FFFFF     (base 16)		CPAC Systems
+				Bergskroken 3
+				Gothenburg  Västra Götaland  40123
+				SE
+
+88-5D-90   (hex)		Shenzhen JingHanDa Electronics Co.Ltd
+500000-5FFFFF     (base 16)		Shenzhen JingHanDa Electronics Co.Ltd
+				5th Floor,No 4 ,Road 1,ShangXue Technology industrial Park,LongGang district,ShenZhen,GuangDong,China
+				ShenZhen  GuangDong  518129
+				CN
+
+88-5D-90   (hex)		FOSHAN HUAGUO OPTICAL CO.,LTD
+000000-0FFFFF     (base 16)		FOSHAN HUAGUO OPTICAL CO.,LTD
+				NO.3 Changhong East Road,Zhanghca Town Foshan City Guang Dong,China
+				Foshan  Guang Dong  528000
+				CN
+
+80-7B-85   (hex)		Mersen
+E00000-EFFFFF     (base 16)		Mersen
+				374 Merrimac St
+				Newburyport  MA  01950
+				US
+
+54-9A-11   (hex)		Orient Direct, Inc.
+600000-6FFFFF     (base 16)		Orient Direct, Inc.
+				974 Commercial St.
+				Palo Alto  California  94303
+				US
+
+54-9A-11   (hex)		Xi'an Hua Fan Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Xi'an Hua Fan Technology Co.,Ltd.
+				Room No.1,3rd Floor,Xi Tie Gong Cheng Da Sha,No.205 Jinhua Road,Xincheng District
+				Xi'an  Shaanxi  710032
+				CN
+
+88-5D-90   (hex)		Hexaglobe
+D00000-DFFFFF     (base 16)		Hexaglobe
+				1 rue Méhul
+				  Paris  75002
+				FR
+
+80-7B-85   (hex)		Kaynes Technology India Pvt Ltd
+D00000-DFFFFF     (base 16)		Kaynes Technology India Pvt Ltd
+				23-25, Belagola Food Industrial Area
+				MYSORE  Karnataka  570016
+				IN
+
+64-FB-81   (hex)		SHANGHAI   SIMCOM   LIMITED
+000000-0FFFFF     (base 16)		SHANGHAI   SIMCOM   LIMITED
+				Building A, SIM technology Building, N0.633 JinZhong Road,
+				Shanghai  /  200335
+				CN
+
+64-FB-81   (hex)		XIMO Communication Technology Co., Ltd
+600000-6FFFFF     (base 16)		XIMO Communication Technology Co., Ltd
+				3rd Floor,F region,418#,Tian Lin Road, Xuhui District, Shanghai
+				shanghai  shanghai  200233
+				CN
+
+1C-CA-E3   (hex)		Dabi Atlante S/A Industrias Medico Odontológicas
+E00000-EFFFFF     (base 16)		Dabi Atlante S/A Industrias Medico Odontológicas
+				Av. Presidente Castelo Branco, 2525
+				Ribeirão Preto  São Paulo  14095-903
+				BR
+
+80-E4-DA   (hex)		Dalian Roiland Technology Co.,Ltd
+D00000-DFFFFF     (base 16)		Dalian Roiland Technology Co.,Ltd
+				11th floor,7Huixian Yuan,
+				Dalian,  Liaoning  116023
+				CN
+
+80-E4-DA   (hex)		CAVALRY STORAGE INC
+500000-5FFFFF     (base 16)		CAVALRY STORAGE INC
+				4251 E BRICKELL ST
+				ONTARIO  CA  91761
+				US
+
+80-E4-DA   (hex)		BroadMedia Co., Ltd.
+600000-6FFFFF     (base 16)		BroadMedia Co., Ltd.
+				102-124, 106 Youngdeungpo Ro
+				Seoul  N/A  150-935
+				KR
+
+1C-CA-E3   (hex)		Shenzhen Smart Device Technology Co.,LTD
+300000-3FFFFF     (base 16)		Shenzhen Smart Device Technology Co.,LTD
+				SSMEC Building, Gao Xin Nan First Avenue Hi-Tech Park South
+				Shenzhen  GuangDong  518057
+				CN
+
+1C-CA-E3   (hex)		Sunray Medical Apparatus Co.,Ltd.
+400000-4FFFFF     (base 16)		Sunray Medical Apparatus Co.,Ltd.
+				 4/F No.242 Tianhe Dong Road ,510620 Guangzhou,  PEOPLE’S REPUBLICA OF CHINA
+				Guangzhou  Guangdong  510620
+				CN
+
+1C-CA-E3   (hex)		SHIN-YOSHA CORPORATION
+900000-9FFFFF     (base 16)		SHIN-YOSHA CORPORATION
+				Oyamagaoka3-9-1
+				Machida  Tokyo  1940215
+				JP
+
+1C-CA-E3   (hex)		OxySec S.r.l.
+800000-8FFFFF     (base 16)		OxySec S.r.l.
+				via delle Querce, 7
+				Treviolo  Bergamo  24048
+				IT
+
+2C-6A-6F   (hex)		Milbank Manufacturing Co.
+800000-8FFFFF     (base 16)		Milbank Manufacturing Co.
+				4801 Deramus Ave.
+				Kansas City  MO  64120
+				US
+
+2C-D1-41   (hex)		Ezee Systems Limited
+100000-1FFFFF     (base 16)		Ezee Systems Limited
+				Room 2103, Singga Commercial Centre
+				Hong Kong  HKSAR  HK
+				HK
+
+2C-6A-6F   (hex)		EATON FHF Funke + Huster Fernsig GmbH
+E00000-EFFFFF     (base 16)		EATON FHF Funke + Huster Fernsig GmbH
+				Gewerbeallee 15 - 19
+				Muelheim an der Ruhr  NRW  45478
+				DE
+
+90-C6-82   (hex)		Lachmann & Rink GmbH
+B00000-BFFFFF     (base 16)		Lachmann & Rink GmbH
+				Hommeswiese 129
+				Freudenberg  NRW  57258
+				DE
+
+90-C6-82   (hex)		Li Seng Technology Ltd.
+C00000-CFFFFF     (base 16)		Li Seng Technology Ltd.
+				Room 901, 9/F Shiu Fung Hong Building
+				  Hong Kong  852
+				HK
+
+90-C6-82   (hex)		S.A.E.T. S.R.L.
+500000-5FFFFF     (base 16)		S.A.E.T. S.R.L.
+				VIA PO 13
+				BUSCA  CUNEO  12022
+				IT
+
+2C-D1-41   (hex)		Resus Industries
+B00000-BFFFFF     (base 16)		Resus Industries
+				Kleine monnikenwerve 9
+				Brugge  West-Vlaanderen  8000
+				BE
+
+2C-6A-6F   (hex)		SHEN ZHEN SIS SCIENCE & TECHNOLOGY LTD.
+500000-5FFFFF     (base 16)		SHEN ZHEN SIS SCIENCE & TECHNOLOGY LTD.
+				Room 201, Block A, No.1, Qianwan Road 1,
+				Shenzhen  Guangdong  518000
+				CN
+
+A0-BB-3E   (hex)		Shenzhen Talent Technology company limited
+D00000-DFFFFF     (base 16)		Shenzhen Talent Technology company limited
+				105~107,1/F,Bldg T3,Shenzhen SW Park,No 011,High-teh South 7th Road, Nanshan District,Shenzhen
+				Shenzhen  Guangdong  518040
+				CN
+
+A0-BB-3E   (hex)		Ewig Industries Macao Commercial Offshore Ltd
+C00000-CFFFFF     (base 16)		Ewig Industries Macao Commercial Offshore Ltd
+				Avenida da Praia Grande No. 619
+				Macau  Macau  000000
+				CN
+
+2C-6A-6F   (hex)		NanChang LangJie Technology Co.,Ltd
+200000-2FFFFF     (base 16)		NanChang LangJie Technology Co.,Ltd
+				Room 819,No.3 Building,XianFeng Property,No.948 HuoJu Street,GaoXin District
+				NanChang  JiangXi  330096
+				CN
+
+A0-BB-3E   (hex)		DirectOut GmbH
+200000-2FFFFF     (base 16)		DirectOut GmbH
+				Leipziger Str. 32
+				Mittweida  Saxony  09648
+				DE
+
+98-02-D8   (hex)		EBI  Ltd.
+500000-5FFFFF     (base 16)		EBI  Ltd.
+				1305 Metro Loft
+				Kwai Chung  NT  HKG
+				HK
+
+98-02-D8   (hex)		AGV spa
+C00000-CFFFFF     (base 16)		AGV spa
+				Strada Savonesa 12
+				rivalta scrivia (AL)  italy  15057
+				IT
+
+98-02-D8   (hex)		United Power Research Technology Corp.
+200000-2FFFFF     (base 16)		United Power Research Technology Corp.
+				8F.-5,No.83,Sec.2,Dongda Rd.,North Dist.,
+				Hsinchu City  Taiwan  300
+				TW
+
+28-FD-80   (hex)		Poket Hardware GmbH
+B00000-BFFFFF     (base 16)		Poket Hardware GmbH
+				Borsigstr. 9.
+				Berlin  Berlin  10115
+				DE
+
+28-FD-80   (hex)		Apollo Digital (Taiwan) Ltd.
+A00000-AFFFFF     (base 16)		Apollo Digital (Taiwan) Ltd.
+				Rm. A, 9F, No.68, Sec. 2,
+				New Taipei City  Taiwan  22065
+				TW
+
+2C-26-5F   (hex)		Rexgen Inc.
+B00000-BFFFFF     (base 16)		Rexgen Inc.
+				127, Wonmanseong-ro, Deokjin -gu
+				Jeonju-si  Jeonbuk  561-202
+				KR
+
+28-FD-80   (hex)		Xiaocong Network Limited
+500000-5FFFFF     (base 16)		Xiaocong Network Limited
+				2F,Building 3, No.200, Guoding East Road (Innovation Works)
+				  Shanghai  200093
+				CN
+
+28-FD-80   (hex)		JINLITONG INTERNATIONAL CO.,LTD
+900000-9FFFFF     (base 16)		JINLITONG INTERNATIONAL CO.,LTD
+				KangMai Industrial Zone ,B building, F/3,
+				Shenzhen  guangdong  518110
+				CN
+
+28-FD-80   (hex)		Jasco Products Company
+800000-8FFFFF     (base 16)		Jasco Products Company
+				10 East Memorial Road
+				Oklahoma City  Oklahoma  73114
+				US
+
+28-FD-80   (hex)		Vigil Monitoring
+600000-6FFFFF     (base 16)		Vigil Monitoring
+				Suite 201, Ironbank
+				Auckland  Auckland  1010
+				NZ
+
+2C-26-5F   (hex)		Brüel & Kjaer Vibro GmbH
+900000-9FFFFF     (base 16)		Brüel & Kjaer Vibro GmbH
+				Leydheckerstrasse 10
+				Darmstadt  Hessen  64293
+				DE
+
+2C-26-5F   (hex)		E Core Corporation
+D00000-DFFFFF     (base 16)		E Core Corporation
+				2F., No.15, Yijiang St., Zhongshan Dist.,
+				Taipie  Taiwan  10456
+				TW
+
+0C-EF-AF   (hex)		Syntrans AB
+700000-7FFFFF     (base 16)		Syntrans AB
+				Teknikringen 4C
+				Linkoping    SE-58330
+				SE
+
+0C-EF-AF   (hex)		Infinisource Inc.
+E00000-EFFFFF     (base 16)		Infinisource Inc.
+				9350 South 150 East
+				Sandy  UT  84070
+				US
+
+0C-EF-AF   (hex)		CJSC «Svyaz Engineering»
+D00000-DFFFFF     (base 16)		CJSC «Svyaz Engineering»
+				6th Radialnaya, 9
+				  Moscow  115404
+				
+
+A4-4F-29   (hex)		Shenzhen Huadoo Bright Group Limitied
+C00000-CFFFFF     (base 16)		Shenzhen Huadoo Bright Group Limitied
+				Room 13E, Jinsong Buiding, Tai ran 4th Rood, Chegong Miao,Futian Distrct
+				Shenzhen  Guangdong  51800
+				CN
+
+F8-02-78   (hex)		EMBUX Technology Co., Ltd.
+800000-8FFFFF     (base 16)		EMBUX Technology Co., Ltd.
+				11F, 657, Bannan Road
+				New Taipei City  New Taipei City  235
+				TW
+
+F8-02-78   (hex)		Witium Co., Ltd
+600000-6FFFFF     (base 16)		Witium Co., Ltd
+				Room 605A, E Building, NO.7001 Zhongchun Road
+				Shanghai  Shanghai  201101
+				CN
+
+3C-39-E7   (hex)		Hannstar Display Corp
+000000-0FFFFF     (base 16)		Hannstar Display Corp
+				4F., No.15, Ln. 168, Xingshan Rd.,
+				 Taipei  Taiwan (R.O.C.)  11469
+				TW
+
+10-07-23   (hex)		TESSERA TECHNOLOGY INC.
+A00000-AFFFFF     (base 16)		TESSERA TECHNOLOGY INC.
+				2710-1 4F, Noborito, Tama-ku
+				Kawasaki-shi  Kanagawa  214-0014
+				JP
+
+A4-4F-29   (hex)		Certi Networks Sdn Bhd
+900000-9FFFFF     (base 16)		Certi Networks Sdn Bhd
+				2-8 Level 8 Wisma Manjalara
+				Kuala Lumpur  Wilayah Persekutuan Kuala Lumpur  52200
+				MY
+
+3C-39-E7   (hex)		MARPOSS SPA
+E00000-EFFFFF     (base 16)		MARPOSS SPA
+				VIA SALICETO 13
+				BENTIVOGLIO  BOLOGNA  40010
+				IT
+
+A4-4F-29   (hex)		Protean Payment
+700000-7FFFFF     (base 16)		Protean Payment
+				617 Detroit St
+				Ann Arbor  Michigan  48104
+				US
+
+A4-4F-29   (hex)		Innovations in Optics, Inc.
+800000-8FFFFF     (base 16)		Innovations in Optics, Inc.
+				82 Cummings Park
+				Woburn  MA  01801
+				US
+
+10-07-23   (hex)		Wireless input technology Inc.
+900000-9FFFFF     (base 16)		Wireless input technology Inc.
+				34339 N. Bobolink Trail
+				Grayslake  IL  60030
+				US
+
+3C-39-E7   (hex)		RO.VE.R. Laboratories S.p.A
+600000-6FFFFF     (base 16)		RO.VE.R. Laboratories S.p.A
+				Via Parini 2/4
+				Colombare di SIrmione  BS  25019
+				IT
+
+10-07-23   (hex)		Tongfang computer co.Ltd.
+300000-3FFFFF     (base 16)		Tongfang computer co.Ltd.
+				F8 building 2, 2nd section, Gaoxinqi strategic emerging industry part, liuxian 1st Rd. the 67 district, Bao an district, shenzhen, china
+				shenzhen  guangdong  518100
+				CN
+
+D0-22-12   (hex)		SHENZHEN ZHONGXI SECURITY CO.,LTD
+D00000-DFFFFF     (base 16)		SHENZHEN ZHONGXI SECURITY CO.,LTD
+				2F,East 420Building,Bagua 3rd, Futian, Shenzhen
+				shenzhen  guangdong  ZIP
+				CN
+
+E8-18-63   (hex)		Shenzhen Hipad Telecommunication Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Hipad Telecommunication Technology Co.,Ltd
+				Room 502-503,Building C3 ,Kexing Science Park,Sci-Tech.Park(M.Zone),Nanshan District,Shenzhen
+				Shenzhen  Guangdong  518000
+				CN
+
+10-07-23   (hex)		Audio Engineering Ltd.
+400000-4FFFFF     (base 16)		Audio Engineering Ltd.
+				75 Parnell Rise
+				Auckland    1052
+				NZ
+
+E8-18-63   (hex)		WETEK ELECTRONICS LIMITED
+500000-5FFFFF     (base 16)		WETEK ELECTRONICS LIMITED
+				#604, TOWER A NEW TRADE PLAZA
+				HONG KONG  HONG KONG  999077
+				HK
+
+E8-18-63   (hex)		DIGITAL DYNAMICS, INC.
+D00000-DFFFFF     (base 16)		DIGITAL DYNAMICS, INC.
+				5 VICTOR SQUARE
+				SCOTTS VALLEY  CA.  95066
+				US
+
+74-E1-4A   (hex)		Wuhan Shenghong Laser Projection Technology Co.,LTD
+C00000-CFFFFF     (base 16)		Wuhan Shenghong Laser Projection Technology Co.,LTD
+				Room 403,Tower A11,Optical valley software Park,No.1 GuanShan first Road,East lake development Zone
+				Wuhan  Hubei  430000
+				CN
+
+74-E1-4A   (hex)		Diamond Kinetics
+E00000-EFFFFF     (base 16)		Diamond Kinetics
+				700 River Ave., Suite 318
+				Pittsburgh  PA  15212
+				US
+
+74-E1-4A   (hex)		KLIMAT SOLEC Sp. z o.o.
+200000-2FFFFF     (base 16)		KLIMAT SOLEC Sp. z o.o.
+				Nadborna 2a
+				Solec Kujawski  Kujawsko-Pomorskie  86-050
+				PL
+
+74-E1-4A   (hex)		Altenburger Electronic GmbH
+000000-0FFFFF     (base 16)		Altenburger Electronic GmbH
+				Schlossweg 5
+				Seelbach  BW  77960
+				DE
+
+74-E1-4A   (hex)		Cerevo Inc.
+100000-1FFFFF     (base 16)		Cerevo Inc.
+				River-side-seven bldg. 3F, 2-7-9, Sotokanda
+				Tiyoda  Tokyo  101-0021
+				JP
+
+74-E1-4A   (hex)		Emerging Technology (Holdings) Ltd.
+600000-6FFFFF     (base 16)		Emerging Technology (Holdings) Ltd.
+				17/F, C-Bons International Center, 108 Wai Yip Street,
+				Hong Kong  Hong Kong  Hong Kong
+				CN
+
+B8-D8-12   (hex)		Neuropace Inc.
+700000-7FFFFF     (base 16)		Neuropace Inc.
+				455 N Bernardo Ave
+				Mountain View  California  94043
+				US
+
+BC-66-41   (hex)		Shenzhen General Measure Technology Co., Ltd
+900000-9FFFFF     (base 16)		Shenzhen General Measure Technology Co., Ltd
+				4th Floor, No.6 Block Science&Technologt Industrial Park of Privately Owned Enterprises
+				Shenzhen  Guangdong  518000
+				CN
+
+BC-66-41   (hex)		Scientific Games
+500000-5FFFFF     (base 16)		Scientific Games
+				1500 Bluegrass Lakes Parkway
+				Alpharetta  GA  30004
+				US
+
+E4-95-6E   (hex)		Shanghai Hoping Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Shanghai Hoping Technology Co., Ltd.
+				Room 224, Building 3, No.99
+				  Shanghai  201210
+				CN
+
+BC-66-41   (hex)		Solectria Renewables, LLC
+300000-3FFFFF     (base 16)		Solectria Renewables, LLC
+				360 Merrimack St.
+				Lawrence  MA  01843
+				US
+
+E4-95-6E   (hex)		SHENZHEN JOYETECH ELECTRONICS CO., LTD.
+600000-6FFFFF     (base 16)		SHENZHEN JOYETECH ELECTRONICS CO., LTD.
+				9th Blvd.Changxing New Tech.Industry Zone,Shajing Town,Baoan District
+				shenzhen  Guangdong  518104
+				CN
+
+58-FC-DB   (hex)		Shanghai Qianjin Electronic Equipment Co. Ltd
+800000-8FFFFF     (base 16)		Shanghai Qianjin Electronic Equipment Co. Ltd
+				 4/F,Building No.2,401 Caobao Road
+				  Shanghai  200233
+				
+
+58-FC-DB   (hex)		Shenzhen Siecom Communication Technology Development Co.,Ltd.
+500000-5FFFFF     (base 16)		Shenzhen Siecom Communication Technology Development Co.,Ltd.
+				Wanwei building401 ,Industry 5th Road
+				Shenzhen  Guangdong  518067
+				CN
+
+58-FC-DB   (hex)		Excenon Mobile Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Excenon Mobile Technology Co., Ltd.
+				5th Floor, Building 1, Software Park, Kejizhong 2nd Rd, High-Tech Zone, Nanshan
+				Shenzhen  Guangdong  518000
+				CN
+
+B0-1F-81   (hex)		Advanced & Wise Technology Corp.
+E00000-EFFFFF     (base 16)		Advanced & Wise Technology Corp.
+				5F, No. 3-2, Industry East 9th Road, Hsinchu Science Park,
+				Hsinchu City  Hsinchu  30075
+				TW
+
+58-FC-DB   (hex)		Custom Biogenic Systems
+300000-3FFFFF     (base 16)		Custom Biogenic Systems
+				74100 Van Dyke Road
+				MI  Michigan  48065
+				US
+
+B0-1F-81   (hex)		Technion Oy
+800000-8FFFFF     (base 16)		Technion Oy
+				Linkkikatu 15
+				Naantali  Länsi-Suomi  21100
+				FI
+
+B0-1F-81   (hex)		COMOTA Co., Ltd.
+600000-6FFFFF     (base 16)		COMOTA Co., Ltd.
+				Queens Tower C 10F
+				Yokohama  Kanagawa  220-6210
+				JP
+
+BC-66-41   (hex)		InSync Technology Ltd
+000000-0FFFFF     (base 16)		InSync Technology Ltd
+				Tilbrook House
+				Petersfield  Hampshire  GU31 4AZ
+				GB
+
+58-FC-DB   (hex)		Certis Technology International
+100000-1FFFFF     (base 16)		Certis Technology International
+				Certis CISCO
+				  Singapore  409179
+				
+
+B0-1F-81   (hex)		Uvax Concepts
+100000-1FFFFF     (base 16)		Uvax Concepts
+				Calle Corretger 71-2
+				Paterna  Other  46980
+				ES
+
+B0-1F-81   (hex)		Dalian GigaTec Electronics Co.,Ltd
+000000-0FFFFF     (base 16)		Dalian GigaTec Electronics Co.,Ltd
+				No.3 Kehai Street, Hi-Tech Zone
+				Dalian  Liao Ning  116023
+				CN
+
+F4-0E-11   (hex)		DXG Technology Corp.
+D00000-DFFFFF     (base 16)		DXG Technology Corp.
+				15FL.,NO.4,SEC.3,
+				Taipei    10477
+				TW
+
+F4-0E-11   (hex)		Dayang Technology Development Inc.
+400000-4FFFFF     (base 16)		Dayang Technology Development Inc.
+				Dayang Building
+				Haidian District  Beijing  100193
+				CN
+
+14-1F-BA   (hex)		Black Moth Technologies
+900000-9FFFFF     (base 16)		Black Moth Technologies
+				17 Waverley St
+				Annerley  Queensland  4103
+				AU
+
+7C-70-BC   (hex)		Lukup Media
+C00000-CFFFFF     (base 16)		Lukup Media
+				25/2 Norris Road
+				Bangalore  Karnataka  560025
+				IN
+
+7C-70-BC   (hex)		dogtra
+900000-9FFFFF     (base 16)		dogtra
+				35, Namdongdong-ro 33beon-gil, Namdong-gu, Incheon,
+				Seoul    KS006
+				KR
+
+14-1F-BA   (hex)		Deutsche Energieversorgung GmbH
+200000-2FFFFF     (base 16)		Deutsche Energieversorgung GmbH
+				Am Schenkberg 12
+				Leipzig  Bundesland / Region wählen  04349
+				DE
+
+7C-70-BC   (hex)		HOPERUN MMAX DIGITAL PTE. LTD.
+E00000-EFFFFF     (base 16)		HOPERUN MMAX DIGITAL PTE. LTD.
+				152 BEACH ROAD
+				  SINGAPORE  189721
+				SG
+
+7C-70-BC   (hex)		Mennekes Elektrotechnik GmbH & Co. KG
+800000-8FFFFF     (base 16)		Mennekes Elektrotechnik GmbH & Co. KG
+				Aloys-Mennekes-Str. 1
+				Kirchhundem  NRW  57399
+				DE
+
+7C-70-BC   (hex)		Canary Connect, Inc.
+500000-5FFFFF     (base 16)		Canary Connect, Inc.
+				132 East 43rd Street
+				New York  NY  10017
+				US
+
+BC-34-00   (hex)		Dexcel Design Pvt Ltd
+400000-4FFFFF     (base 16)		Dexcel Design Pvt Ltd
+				#138, Level 3,4 - Maruthi Tower
+				Bangalore  Karnataka  560008
+				IN
+
+7C-70-BC   (hex)		Digital Lumens
+200000-2FFFFF     (base 16)		Digital Lumens
+				374 Congress Street, 6th Floor
+				Boston  MA  02210
+				US
+
+A4-3B-FA   (hex)		JSC “Component-ASU”
+D00000-DFFFFF     (base 16)		JSC “Component-ASU”
+				Severnyi proezd 1, k. 5/6
+				Chernogolovka  Moscow Region  142432
+				
+
+A4-3B-FA   (hex)		Maxon Australia
+400000-4FFFFF     (base 16)		Maxon Australia
+				36a Gibson Ave
+				Padstow  New South Wales  2211
+				AU
+
+D0-76-50   (hex)		Revox Inc.
+E00000-EFFFFF     (base 16)		Revox Inc.
+				1880-2 Kamimizo, Chuo-ku,
+				Sagamihara  Kanagawa  252-0243
+				JP
+
+A4-3B-FA   (hex)		Alpwise
+800000-8FFFFF     (base 16)		Alpwise
+				4 avenue Louis Doyen Weil
+				Grenoble  Rhône-Alpes  38000
+				FR
+
+D0-76-50   (hex)		Picobrew LLC
+600000-6FFFFF     (base 16)		Picobrew LLC
+				2121 N 35th Street
+				Seattle  WA  98103
+				US
+
+74-19-F8   (hex)		Ansjer Electronics Co., Ltd.
+D00000-DFFFFF     (base 16)		Ansjer Electronics Co., Ltd.
+				4 Bldg., Pinglan Indl. Park, Nanping,
+				Zhuhai  Guangdong  519060
+				CN
+
+D0-76-50   (hex)		Annapurna Labs
+500000-5FFFFF     (base 16)		Annapurna Labs
+				1830 The Alameda
+				San Jose  California  95126
+				US
+
+40-11-75   (hex)		BWT Tianjin Ltd.
+A00000-AFFFFF     (base 16)		BWT Tianjin Ltd.
+				1st Floor ,C Block,NO.225,Jinger Road ,Konggang Economic District,Tianjin 300308 ,China
+				Tianjin    300000
+				CN
+
+4C-4B-F9   (hex)		Shenzhen Haichuan Intelligent Information Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		Shenzhen Haichuan Intelligent Information Technology Co., Ltd.
+				1208 District B,Jinhui Building, 2079 Nanhai Avenue,Dengliang Community,Nanshan Street,Nanshan District
+				Shenzhen  Guangdong  518101
+				CN
+
+54-A4-93   (hex)		Advice
+B00000-BFFFFF     (base 16)		Advice
+				16 Atir Yeda St
+				Kfar Saba  Not applicable  4464321
+				IL
+
+54-A4-93   (hex)		Wonders Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		Wonders Technology Co., Ltd.
+				4/F,Tower A,3rd Building,Tian'an Cloud Park,Bantian Avenue,Longgang District
+				Shenzhen    518129
+				CN
+
+04-D1-6E   (hex)		s.d.i. s.p.a.
+200000-2FFFFF     (base 16)		s.d.i. s.p.a.
+				Edison, 10
+				Trezzano sul Naviglio  Milano  20090
+				IT
+
+04-D1-6E   (hex)		FUZHOU ZHUOYI ELECTRONIC CO.,LTD
+900000-9FFFFF     (base 16)		FUZHOU ZHUOYI ELECTRONIC CO.,LTD
+				NO.22 BAIHUAZHOU ROAD,FUZHOU,FUJIAN,CHINA
+				FUZHOU  FUJIAN  350008
+				CN
+
+54-A4-93   (hex)		Do Easy International Limited
+900000-9FFFFF     (base 16)		Do Easy International Limited
+				No. 107, Wenjian St., Fengshan Dist.
+				Kaohsiung    83067
+				TW
+
+54-A4-93   (hex)		RED Hydrogen LLC
+700000-7FFFFF     (base 16)		RED Hydrogen LLC
+				15 Cushing
+				IRVINE  CA  92618
+				US
+
+44-03-77   (hex)		Norden Communication UK Ltd.
+500000-5FFFFF     (base 16)		Norden Communication UK Ltd.
+				Unit-13, Baker Close, Oakwood Business Park
+				Clacton-On-Sea  Essex  CO15 4BD
+				GB
+
+44-03-77   (hex)		symplr
+A00000-AFFFFF     (base 16)		symplr
+				1550 Innovation Way
+				Hartford  WI  53027
+				US
+
+44-03-77   (hex)		Musashi Seimitsu Industry Co.,Ltd
+000000-0FFFFF     (base 16)		Musashi Seimitsu Industry Co.,Ltd
+				39-5 Daizen,Ueta-cho
+				Toyohashi  Aichi  441-8560
+				JP
+
+44-03-77   (hex)		Annapurna labs
+300000-3FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+50-62-55   (hex)		CCTV Manufacturer
+A00000-AFFFFF     (base 16)		CCTV Manufacturer
+				Room 1807,Bagua 4 Rd,Futian District
+				Shenzhen  Guangdong  518029
+				CN
+
+50-62-55   (hex)		Roda industrial development Co.,Ltd.
+800000-8FFFFF     (base 16)		Roda industrial development Co.,Ltd.
+				2-3F,Building C,Unistar Park,GenYu Road,GuangMing New District
+				Shenzhen    518000
+				CN
+
+50-62-55   (hex)		Hagiwara Solutions Co., Ltd 
+100000-1FFFFF     (base 16)		Hagiwara Solutions Co., Ltd 
+				7F, Sakae TV BLD, 3-10-32, Nishiki, Naka-ku,
+				Nagoya City  Aichi Prefecture  460-0003
+				JP
+
+64-31-39   (hex)		Shenzhen He&e Technology Co.,Ltd.
+500000-5FFFFF     (base 16)		Shenzhen He&e Technology Co.,Ltd.
+				2nd Floor, Building A7, Shenzhen Low Carbon Technology Demonstration Park, Silicon Valley Power, Guiyue Road, Guanlan Street, Longhua District, Shenzhen, China
+				ShenZhen    518100
+				CN
+
+64-31-39   (hex)		Shenzhen Huanyin Electronics Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Huanyin Electronics Ltd.
+				Room 1707, 17/F, West Block, Nanshan Digital Culture Industrial Base, Nanshan District
+				Shenzhen  Guangdong  519052
+				CN
+
+64-31-39   (hex)		Product Development Associates, Inc.
+A00000-AFFFFF     (base 16)		Product Development Associates, Inc.
+				1145 E. Cliff Rd
+				Burnsville  MN  55337
+				US
+
+C4-95-4D   (hex)		Newland Era Edu Hi-Tech(BeiJing)Co.,Ltd
+D00000-DFFFFF     (base 16)		Newland Era Edu Hi-Tech(BeiJing)Co.,Ltd
+				No. 1, Linkong 2 Road,North Wenhuaying Village, Gaoliying Town, Shunyi District, Beijing
+				Beijing    101303
+				CN
+
+64-31-39   (hex)		Smartplus Inc.
+200000-2FFFFF     (base 16)		Smartplus Inc.
+				415 steelcase road east
+				markham  Ontario  L3R1G3
+				CA
+
+C4-95-4D   (hex)		Multicom, Inc
+B00000-BFFFFF     (base 16)		Multicom, Inc
+				1076 Florida Central Parkway
+				Longwood  FL  32750
+				US
+
+00-69-67   (hex)		PANGAEA SOLUTION INC
+700000-7FFFFF     (base 16)		PANGAEA SOLUTION INC
+				774, Yuseong-daero, Yuseong-gu, 
+				Daejeon  Daejeon  34171
+				KR
+
+00-69-67   (hex)		Command Alkon, Inc
+400000-4FFFFF     (base 16)		Command Alkon, Inc
+				1800 International Park Dr., Ste 400
+				Birmingham  AL  35243
+				US
+
+C4-95-4D   (hex)		Canare Electric Co., Ltd.
+E00000-EFFFFF     (base 16)		Canare Electric Co., Ltd.
+				B-13F,Shiba Park Bldg.,2-4-1,Shiba-Koen
+				Minato  Tokyo  105-0011
+				JP
+
+00-69-67   (hex)		Desird Design R&D
+C00000-CFFFFF     (base 16)		Desird Design R&D
+				Mehmetçik Mahallesi Aspendos Bulvar? No:99A Muratpa?a/ANTALYA
+				Antalya    07300
+				TR
+
+A0-22-4E   (hex)		Kyung In Electronics
+000000-0FFFFF     (base 16)		Kyung In Electronics
+				#1411, Byucksan Digital Valley 2, 184, Gasan Digital2-ro, Geumcheon-gu
+				 Seoul    08501
+				KR
+
+A0-22-4E   (hex)		EISST  International Ltd
+800000-8FFFFF     (base 16)		EISST  International Ltd
+				10 Queen Street Place
+				London  London  EC4R 1AG
+				GB
+
+20-0A-0D   (hex)		Wideband Systems, Inc.
+100000-1FFFFF     (base 16)		Wideband Systems, Inc.
+				11900 Bournefield Way STE 120
+				Silver Spring  MD  20904
+				US
+
+20-0A-0D   (hex)		sehwa
+C00000-CFFFFF     (base 16)		sehwa
+				231, Techno 2-ro, Yuseong-gu, Daejeon, Republic of Korea
+				Daejeon  Daejeon  34026
+				KR
+
+20-0A-0D   (hex)		Shenzhen Zhangyue Technology Co.,Ltd 
+500000-5FFFFF     (base 16)		Shenzhen Zhangyue Technology Co.,Ltd 
+				Nanshan District Yuehai Street Weixin Software Science Park Building 8 9th Floor Room 903
+				Shenzhen  Guangdong  518500
+				CN
+
+40-2C-76   (hex)		Guangzhou Qi'an Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		Guangzhou Qi'an Technology Co., Ltd.
+				No. 3, Dasonggang, Jiangnan Avenue Middle Road, Haizhu District, Guangzhou (office only)
+				Guangzhou  Guangdong  510220
+				CN
+
+40-2C-76   (hex)		Beijing Kuaiyu Electronic Co., Ltd.
+B00000-BFFFFF     (base 16)		Beijing Kuaiyu Electronic Co., Ltd.
+				Kuaiyu Technologies, Building 11, Yuquan Huigu, Tsinghua Science Park, No. 3 Minzhuang Road, Haidian District, Beijing
+				Beijing    100195
+				CN
+
+50-DE-19   (hex)		Langogo Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Langogo Technology Co., Ltd.
+				 2/F, Boxun Building, Keyuan North Road, Nanshan District
+				Shenzhen  Guangdong  518103
+				CN
+
+3C-FA-D3   (hex)		GRG Banking Technology Co.,Ltd
+400000-4FFFFF     (base 16)		GRG Banking Technology Co.,Ltd
+				232 Gaotang Road,Tianhe District
+				Guangzhou  Guangdong  510000
+				CN
+
+3C-FA-D3   (hex)		UltiMachine
+A00000-AFFFFF     (base 16)		UltiMachine
+				200 12th St. N.
+				South Pittsburg  TN  37380
+				US
+
+3C-FA-D3   (hex)		Harman Connected Services, Inc.
+300000-3FFFFF     (base 16)		Harman Connected Services, Inc.
+				636 Ellis Street Mountain View
+				New York  CA  10003
+				US
+
+B0-B3-53   (hex)		Rizhao SUNWAM International Co., Ltd.
+200000-2FFFFF     (base 16)		Rizhao SUNWAM International Co., Ltd.
+				No.001-00-114, Ruiyuan Mingcheng, Haiqu Zhong Road
+				Rizhao  Shandong  276800
+				CN
+
+B0-B3-53   (hex)		Ledger
+A00000-AFFFFF     (base 16)		Ledger
+				1 rue du mail
+				Paris    75002
+				FR
+
+14-AE-85   (hex)		Trimble LEM
+800000-8FFFFF     (base 16)		Trimble LEM
+				10368 Westmoor Dr
+				Westminster  CO  80021
+				US
+
+14-AE-85   (hex)		Kayamatics Limited
+000000-0FFFFF     (base 16)		Kayamatics Limited
+				Room 1209, Trend Centre, 29 Cheung Lee Street
+				Chaiwan  NA  NA
+				HK
+
+64-62-66   (hex)		Shenzhen C & D Electronics Co., Ltd.
+700000-7FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+64-62-66   (hex)		Signal Hound
+B00000-BFFFFF     (base 16)		Signal Hound
+				1502 SE Commerce Ave Suite 101
+				Battle Ground  WA  98604
+				US
+
+64-62-66   (hex)		Chunghwa System Integration Co., Ltd.
+900000-9FFFFF     (base 16)		Chunghwa System Integration Co., Ltd.
+				2F., No. 35, Aiguo E. Rd.,
+				Taipei    106
+				TW
+
+64-62-66   (hex)		Protectli
+200000-2FFFFF     (base 16)		Protectli
+				1315 Hot Springs Way
+				Vista  CA  92081
+				US
+
+64-62-66   (hex)		Redstone Systems, Inc.
+400000-4FFFFF     (base 16)		Redstone Systems, Inc.
+				24 School Street, 2nd floor
+				Boston    02108
+				US
+
+64-62-66   (hex)		Kobol Innovations Pte. Ltd.
+D00000-DFFFFF     (base 16)		Kobol Innovations Pte. Ltd.
+				101 Cecil Street, #26-01/07 Tong Eng Building
+				Singapore    069533
+				SG
+
+94-05-BB   (hex)		AUSTAR HEARING SCIENCE AND TECHNILIGY(XIAMEN)CO.,LTD
+B00000-BFFFFF     (base 16)		AUSTAR HEARING SCIENCE AND TECHNILIGY(XIAMEN)CO.,LTD
+				RM201,No.2Gaoqi South 12th Road,HuliDist
+				XIamen  Fujian  361006
+				CN
+
+94-05-BB   (hex)		LAO INDUSTRIA LTDA
+C00000-CFFFFF     (base 16)		LAO INDUSTRIA LTDA
+				AV DR MAURO LINDENBERG MONTEIRO, 1003
+				OSASCO  SÃO PAULO  06278010
+				BR
+
+F4-90-CB   (hex)		Avilution
+500000-5FFFFF     (base 16)		Avilution
+				103 Shoreline Dr
+				Madison  AL  35758
+				US
+
+F4-90-CB   (hex)		OmniNet
+400000-4FFFFF     (base 16)		OmniNet
+				6410 Del Rio Rd
+				Charlotte  NC  28277
+				US
+
+F4-90-CB   (hex)		Epitel, Inc.
+000000-0FFFFF     (base 16)		Epitel, Inc.
+				630 S. Stringfellow Ct., Unit #B
+				Salt Lake City  UT  84111
+				US
+
+F4-90-CB   (hex)		Fractyl Labs
+900000-9FFFFF     (base 16)		Fractyl Labs
+				17 HARTWELL AVE
+				LEXINGTON  MA  02421
+				US
+
+C0-9B-F4   (hex)		JSC NPK ATRONIK
+400000-4FFFFF     (base 16)		JSC NPK ATRONIK
+				VARSHAVSKOE SH, 118-1-P XLII K4 10
+				Moscow  Moscow  117587
+				RU
+
+C0-9B-F4   (hex)		Pinpark Inc.
+C00000-CFFFFF     (base 16)		Pinpark Inc.
+				9F., No. 101, Sec. 2, Nanjing E. Rd.,, Zhongshan Dist.,
+				Taipei  Taiwan  104
+				TW
+
+C0-9B-F4   (hex)		NUCTECH COMPANY LIMITED
+B00000-BFFFFF     (base 16)		NUCTECH COMPANY LIMITED
+				 2/F Block A,Tongfang Building,Shuangqinglu,Haidian District
+				Beijing  Beijing  100084
+				CN
+
+C0-9B-F4   (hex)		Osprey Video, Inc
+300000-3FFFFF     (base 16)		Osprey Video, Inc
+				1628 Valwood Parkway Suite 200
+				Carrollton  TX  75006
+				US
+
+E8-B4-70   (hex)		internet domain name system beijing engineering research center ltd
+200000-2FFFFF     (base 16)		internet domain name system beijing engineering research center ltd
+				4,4TH SOUTH STREET ZHONG GUAN CUN
+				hai dian qu ,beijing  BEIJING  100190
+				CN
+
+E8-B4-70   (hex)		DongGuan Ramaxel Memory Technology
+000000-0FFFFF     (base 16)		DongGuan Ramaxel Memory Technology
+				No.32, Industrial East Road,Innovation Park, High-tech Industrial Development Zone, Songshan Lake, Dongguan City, Guangdong Province,China
+				DongGuan  Guangdong  523808
+				CN
+
+C0-9B-F4   (hex)		Infiot Inc.
+500000-5FFFFF     (base 16)		Infiot Inc.
+				75 E. Santa Clara St., Suite 600
+				San Jose  CA  95113
+				US
+
+E8-B4-70   (hex)		plc2 Design GmbH
+A00000-AFFFFF     (base 16)		plc2 Design GmbH
+				Hugstmattweg 30
+				Freiburg i. Br.    79112
+				DE
+
+E8-B4-70   (hex)		Miltek Industries Pte Ltd
+900000-9FFFFF     (base 16)		Miltek Industries Pte Ltd
+				62 Ubi Road 1 #10-03, Oxley Bizhub 2. Singapore 408734
+				Singapore    408734
+				SG
+
+E8-B4-70   (hex)		DEHN SE + Co KG
+800000-8FFFFF     (base 16)		DEHN SE + Co KG
+				Hans-Dehn-Straße 1
+				Neumarkt  Bavaria  92318
+				DE
+
+E8-B4-70   (hex)		Alperia Fiber srl 
+500000-5FFFFF     (base 16)		Alperia Fiber srl 
+				Via Dodiciville 8
+				Bolzano   bz  39100
+				IT
+
+E8-B4-70   (hex)		Elcoma
+600000-6FFFFF     (base 16)		Elcoma
+				Rua Barbosa Lima, 149
+				Recife  Pernambuco  50030-330
+				BR
+
+38-F7-CD   (hex)		APT MOBILE SATCOM LIMITED
+E00000-EFFFFF     (base 16)		APT MOBILE SATCOM LIMITED
+				18th Floor, Building C, Shenye U Center, Zhoushi Road, Baoan District
+				Shenzhen  Guangdong  518000
+				CN
+
+70-69-79   (hex)		Linksys Telecom Shenzhen CO., LTD
+100000-1FFFFF     (base 16)		Linksys Telecom Shenzhen CO., LTD
+				RoomC303-A, Number 2223 road Banxuegang Xinweizai Gangtou Community Bantian street
+				Longgang Township  Guangdong  514349
+				CN
+
+70-69-79   (hex)		FREUND ELEKTRONIKA D.O.O., IP-INTEGRA TECHNOLOGIES
+D00000-DFFFFF     (base 16)		FREUND ELEKTRONIKA D.O.O., IP-INTEGRA TECHNOLOGIES
+				HAMDIJE KRESEVLJAKOVICA 18
+				SARAJEVO    71000
+				BA
+
+CC-C2-61   (hex)		Nortek Security & Control
+C00000-CFFFFF     (base 16)		Nortek Security & Control
+				5919 Sea Otter Place
+				Carlsbad  CA  92010
+				US
+
+CC-C2-61   (hex)		Guardiar USA
+600000-6FFFFF     (base 16)		Guardiar USA
+				3309 S Kaufman St
+				Ennis  TX  75119
+				US
+
+CC-C2-61   (hex)		Winterthur Gas & Diesel Ltd.
+B00000-BFFFFF     (base 16)		Winterthur Gas & Diesel Ltd.
+				Schützenstrasse 3
+				Winterthur    8401
+				CH
+
+CC-C2-61   (hex)		NETRADYNE, INC.
+300000-3FFFFF     (base 16)		NETRADYNE, INC.
+				9191 TOWNE CENTRE DR STE 200
+				SAN DIEGO  CA  92122
+				US
+
+CC-C2-61   (hex)		NWL Inc.
+100000-1FFFFF     (base 16)		NWL Inc.
+				312 Rising Sun Road
+				Bordentown  NJ  08505
+				US
+
+F0-D7-AF   (hex)		New IT Project LLC
+900000-9FFFFF     (base 16)		New IT Project LLC
+				Nagatinskaya St. 16, bld. 9, space VII, room 15, office 5
+				Moscow    115487
+				RU
+
+F0-D7-AF   (hex)		Dongguan Huili electroacoustic Industrial Co.,ltd
+500000-5FFFFF     (base 16)		Dongguan Huili electroacoustic Industrial Co.,ltd
+				Dalang Town, Biyun Cai Bai Cun East Second Street 66,A4 Building 501
+				Dongguan  Guangdong  523770
+				CN
+
+F0-D7-AF   (hex)		Blacknight Internet Solutions Limited
+200000-2FFFFF     (base 16)		Blacknight Internet Solutions Limited
+				Unit 12a, Barrowside Business Park, Sleaty Rd.
+				Carlow  Carlow  R93 X265
+				IE
+
+F0-D7-AF   (hex)		MSTAR TECHNOLOGIES,INC
+A00000-AFFFFF     (base 16)		MSTAR TECHNOLOGIES,INC
+				#998 West Wenyi Road
+				Hangzhou  Zhejiang  310012
+				CN
+
+30-49-50   (hex)		SHENZHEN LDROBOT CO., LTD.
+800000-8FFFFF     (base 16)		SHENZHEN LDROBOT CO., LTD.
+				Nanshan
+				Shenzhen    518000
+				CN
+
+D0-14-11   (hex)		Realwave Inc.
+700000-7FFFFF     (base 16)		Realwave Inc.
+				5857 Owens Avenue, Suite 300
+				Carlsbad  CA  92008-5507
+				US
+
+D0-14-11   (hex)		Tecnosoft srl
+E00000-EFFFFF     (base 16)		Tecnosoft srl
+				via Galvani, 4
+				Peschiera Borromeo  Milan  20068
+				IT
+
+5C-85-7E   (hex)		BeiJing Xinsheng Technology Co.,Ltd
+800000-8FFFFF     (base 16)		BeiJing Xinsheng Technology Co.,Ltd
+				1-1827, East (LIANHANG building), chaichangtun village, Yongledian Town, Tongzhou District
+				BeiJing  BeiJing  250100
+				CN
+
+5C-85-7E   (hex)		HHCC Plant Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		HHCC Plant Technology Co., Ltd.
+				RM626, 6th Floor, Zhongguoleshili,’,#35 Xiaoyun Road, Chaoyang District,Beijing, China
+				Beijing  Beijing  100028
+				CN
+
+D0-14-11   (hex)		iLOQ Oy
+300000-3FFFFF     (base 16)		iLOQ Oy
+				Yrttipellontie 10
+				Oulu  EMEA  90230
+				FI
+
+5C-85-7E   (hex)		28 Gorilla
+000000-0FFFFF     (base 16)		28 Gorilla
+				12 S San Marcos Pl
+				Chandler  AZ  85225
+				US
+
+F4-69-D5   (hex)		Konntek Inc
+B00000-BFFFFF     (base 16)		Konntek Inc
+				3600 F-X Tessier, Unit #H
+				Vaudreuil  Quebec  J7V 5V5
+				CA
+
+F4-69-D5   (hex)		Hefei STAROT Technology Co.,Ltd
+500000-5FFFFF     (base 16)		Hefei STAROT Technology Co.,Ltd
+				406, 4th Floor, Quality Control Building, Saipu Science Park, No. 6 Yunfei Road, High-tech Zone
+				hefei  anhui  230000
+				CN
+
+F4-69-D5   (hex)		ORtek Technology, Inc.
+E00000-EFFFFF     (base 16)		ORtek Technology, Inc.
+				13F, no.150, Jian-Yi Rd., ZhongHe Dist.
+				New Taipei City  Taiwan  23511
+				TW
+
+F4-69-D5   (hex)		TianJin KCHT Information Technology Co., Ltd.
+600000-6FFFFF     (base 16)		TianJin KCHT Information Technology Co., Ltd.
+				1704 Huicheng Technology Building, No. 65 Pioneer Road, Dongli District
+				Tianjin    300000
+				CN
+
+4C-93-A6   (hex)		Felten Electronics
+B00000-BFFFFF     (base 16)		Felten Electronics
+				Wilhelmstrasse 43
+				Aachen  NRW  52070
+				DE
+
+4C-93-A6   (hex)		Advantics
+900000-9FFFFF     (base 16)		Advantics
+				55C Rue Auguste Piccard
+				Saint-Genis-Pouilly    01630
+				FR
+
+28-B7-7C   (hex)		GROTHE GmbH
+500000-5FFFFF     (base 16)		GROTHE GmbH
+				Loehestrasse 22
+				Hennef    53773
+				DE
+
+28-B7-7C   (hex)		SHENZHEN EVIEW GPS TECHNOLOGY
+000000-0FFFFF     (base 16)		SHENZHEN EVIEW GPS TECHNOLOGY
+				Rm 201, building 1-A, Nankechuang Industrial Park, Gaofeng Road, Longhua district
+				Shenzhen  Guangdong  518109
+				CN
+
+28-B7-7C   (hex)		Beijing Kitten&Puppy Technology Co.,Ltd.
+300000-3FFFFF     (base 16)		Beijing Kitten&Puppy Technology Co.,Ltd.
+				Room Q-101? Floor 2?Q Area, Anningzhuang Back Street?Haidian District
+				Beijing    100096
+				CN
+
+28-B7-7C   (hex)		Simaudio Ltd
+A00000-AFFFFF     (base 16)		Simaudio Ltd
+				1345 rue Newton
+				Boucherville  Quebec  J4B 5H2
+				CA
+
+28-B7-7C   (hex)		Vehant Technologies Pvt Ltd.
+B00000-BFFFFF     (base 16)		Vehant Technologies Pvt Ltd.
+				Plot no. 97, Ecotech-12, block-Ecotech -12, Sector-Noida Extension
+				Greater Noida  Uttar Pradesh  201310
+				IN
+
+C0-61-9A   (hex)		Victron Energy B.V.
+B00000-BFFFFF     (base 16)		Victron Energy B.V.
+				De Paal 35
+				Almere    1351JG
+				NL
+
+C0-61-9A   (hex)		Grup Arge Enerji ve Kontrol Sistemleri
+200000-2FFFFF     (base 16)		Grup Arge Enerji ve Kontrol Sistemleri
+				?kitelli OSB Mah. YTÜ ?kitelli Teknopark Sok. No:1 / 2B01-2B07-2B08-2B09
+				?stanbul  ?STANBUL  34490
+				TR
+
+C0-61-9A   (hex)		IPG Automotive GmbH
+600000-6FFFFF     (base 16)		IPG Automotive GmbH
+				Bannwaldallee 60
+				Karlsruhe    76185
+				DE
+
+98-FC-84   (hex)		Fath Mechatronics
+900000-9FFFFF     (base 16)		Fath Mechatronics
+				Hügelmühle 31
+				Spalt  bavaria  91174
+				DE
+
+98-FC-84   (hex)		Broadtech Technologies Co., Ltd.
+700000-7FFFFF     (base 16)		Broadtech Technologies Co., Ltd.
+				No. 1, Area A, 3rd Floor, Building B1, Shenzhen Digital Technology Park, No. 002, Gaoxin South Seventh Road, Nanshan District,
+				Shenzhen  GuangDong  518057
+				CN
+
+98-FC-84   (hex)		Dongguan Kingtron Electronics Tech Co., Ltd
+E00000-EFFFFF     (base 16)		Dongguan Kingtron Electronics Tech Co., Ltd
+				No.3 Fumin North Rd,Shu'an Industrial Park, Humen Town
+				Dongguan  Guangdong China  523929
+				CN
+
+18-FD-CB   (hex)		StreamLocator
+D00000-DFFFFF     (base 16)		StreamLocator
+				200-155 East Beaver Creek Rd
+				Richmond Hill  ON  L4B 2N1
+				CA
+
+18-FD-CB   (hex)		Gosuncn Technology Group Co.,LTD.
+400000-4FFFFF     (base 16)		Gosuncn Technology Group Co.,LTD.
+				6F,2819 KaiChuang Blvd.,Science Town,Huangpu District
+				Guangzhou City  Guangdong  510530
+				CN
+
+58-20-8A   (hex)		Aggregate Co.,Ltd.
+300000-3FFFFF     (base 16)		Aggregate Co.,Ltd.
+				Toso Building 4F, 1-9-8 Yayoi-cho
+				nakano-ku  tokyo  164-0013
+				JP
+
+58-20-8A   (hex)		MARS DIGI TECH CO .,LTD
+200000-2FFFFF     (base 16)		MARS DIGI TECH CO .,LTD
+				RM 2314,Build No.B2,GuiMiao Road,NanShan District
+				ShenZhen  Guangdong  518054
+				CN
+
+58-20-8A   (hex)		pureLiFi Ltd
+700000-7FFFFF     (base 16)		pureLiFi Ltd
+				Rosebery House, 9 Haymarket Terrace
+				Edinburgh    EH12 5EZ
+				GB
+
+CC-4F-5C   (hex)		Feelmore Labs
+800000-8FFFFF     (base 16)		Feelmore Labs
+				370 Jay Street, Floor 7
+				Brooklyn  NY  11201
+				US
+
+FC-CD-2F   (hex)		HEAD-DIRECT (KUNSHAN) Co. Ltd
+B00000-BFFFFF     (base 16)		HEAD-DIRECT (KUNSHAN) Co. Ltd
+				Kunshan Bacheng West Yingbing Rd. shangkunzhichuang chanyeyuan C2#
+				Suzhou  Jiangsu  215311
+				CN
+
+58-E8-76   (hex)		Zhuhai Raysharp Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Zhuhai Raysharp Technology Co.,Ltd
+				No.100 of Keji Liu Rd.6, Hi-Tech Zone
+				Zhuhai  Guangdong   519080
+				CN
+
+FC-CD-2F   (hex)		Annapurna labs
+600000-6FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+FC-CD-2F   (hex)		Asesorias y Servicios Innovaxxion SPA
+800000-8FFFFF     (base 16)		Asesorias y Servicios Innovaxxion SPA
+				Alonso de Cordova 5320, of 1403, Las condes
+				Santiago  RM  7550000
+				CL
+
+FC-CD-2F   (hex)		Suzhou lehui display co.,ltd
+700000-7FFFFF     (base 16)		Suzhou lehui display co.,ltd
+				?225 Jinfeng Road?Suzhou New District?Jiangsu Province
+				suzhou    215129
+				CN
+
+58-95-D8   (hex)		Shenzhen C & D Electronics Co., Ltd.
+800000-8FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+FC-CD-2F   (hex)		Eltek brojila d.o.o.
+E00000-EFFFFF     (base 16)		Eltek brojila d.o.o.
+				Svetice 24
+				Zagreb    10000
+				HR
+
+58-95-D8   (hex)		Tonnet Telecommunication International Co., Ltd.
+300000-3FFFFF     (base 16)		Tonnet Telecommunication International Co., Ltd.
+				10F,No.6,Ln.609,Sec.5 Chongxin Rd., Sanchong Dist.
+				New Taipei    241
+				TW
+
+58-95-D8   (hex)		Gmv sistemas SAU
+E00000-EFFFFF     (base 16)		Gmv sistemas SAU
+				C/ Juan Herrera 17 P.T.B. ,Parcela 101
+				Boecillo  Valladolid  47151 
+				ES
+
+58-95-D8   (hex)		Unity Surveillance, Inc.
+400000-4FFFFF     (base 16)		Unity Surveillance, Inc.
+				629 East Grand Ave
+				Hot Springs National Park  AR  71901
+				US
+
+DC-4A-9E   (hex)		ADIAL
+400000-4FFFFF     (base 16)		ADIAL
+				87 Rue Alexandre Fleming
+				LISIEUX    14100
+				FR
+
+DC-4A-9E   (hex)		Advanced Electronics Ltd
+100000-1FFFFF     (base 16)		Advanced Electronics Ltd
+				Balliol Business Park
+				Newcastle    NE12 8EW
+				GB
+
+DC-4A-9E   (hex)		SES-imagotag Deutschland GmbH
+E00000-EFFFFF     (base 16)		SES-imagotag Deutschland GmbH
+				Bundesstrasse 16
+				Ettenheim  BW  77955
+				DE
+
+DC-4A-9E   (hex)		HEFEI DATANG STORAGE TECHNOLOGY CO.,LTD
+C00000-CFFFFF     (base 16)		HEFEI DATANG STORAGE TECHNOLOGY CO.,LTD
+				7F BLOCK C J2 BUILDING INNOVATION PARK HIGH TECH DISTRICT
+				HEFEI  AN HUI PROVINCE PR CHINA  220038
+				CN
+
+84-11-C2   (hex)		igus GmbH
+A00000-AFFFFF     (base 16)		igus GmbH
+				Spicher Str. 1a
+				Köln    51147
+				DE
+
+68-79-12   (hex)		Neurolab
+D00000-DFFFFF     (base 16)		Neurolab
+				Naberezhnaya Shlyuzovaya, d. 6, str. 3, et. 3, pom. 1
+				Moscow  -  115114
+				RU
+
+84-11-C2   (hex)		KESSEL AG
+600000-6FFFFF     (base 16)		KESSEL AG
+				Bahnhofstraße 31
+				Lenting    85101
+				DE
+
+68-79-12   (hex)		Annapurna labs
+100000-1FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+68-79-12   (hex)		McDonald's Corporation
+400000-4FFFFF     (base 16)		McDonald's Corporation
+				110 N. Carpenter Street
+				Chicago    60607
+				US
+
+8C-47-6E   (hex)		Oxford Nanopore Technologies Ltd.
+600000-6FFFFF     (base 16)		Oxford Nanopore Technologies Ltd.
+				Gosling Building, Edmund Halley Road, Oxford Science Park
+				Oxford  Oxfordshire  OX4 4DQ
+				GB
+
+8C-47-6E   (hex)		innolectric AG
+D00000-DFFFFF     (base 16)		innolectric AG
+				Universitaetsstr. 136
+				Bochum    44799 
+				DE
+
+C0-61-9A   (hex)		Stello
+400000-4FFFFF     (base 16)		Stello
+				9995 Rue de Châteauneuf (Local V)
+				Brossard  Quebec  J4Z 3V7
+				CA
+
+8C-AE-49   (hex)		Larch Networks
+D00000-DFFFFF     (base 16)		Larch Networks
+				11 Amal Str.
+				Rosh Ain    4809239
+				IL
+
+A4-53-EE   (hex)		T-Touching Co., Ltd.
+800000-8FFFFF     (base 16)		T-Touching Co., Ltd.
+				28B, No. 4, Science and Technology 10th Road
+				Dongguan  GuangDong  52300
+				CN
+
+A0-02-4A   (hex)		Zhejiang Hechuan Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Zhejiang Hechuan Technology Co.,Ltd
+				No. 9, Fucai Road, Longyou Industrial Zone, Quzhou City, Zhejiang Province, PRC
+				Quzhou    324000
+				CN
+
+A4-53-EE   (hex)		Beijing Lanke Science and Technology Co.,LTd.
+700000-7FFFFF     (base 16)		Beijing Lanke Science and Technology Co.,LTd.
+				Room 607, building 6, No.1, Chaoqian Road, science and Technology Park, Changping District
+				Beijing     102209
+				CN
+
+A0-02-4A   (hex)		bitbee Inc
+D00000-DFFFFF     (base 16)		bitbee Inc
+				#703, 361 Simindae-ro, Dongan-gu,
+				anyang-si  gyeonggi-do  14057
+				KR
+
+A0-02-4A   (hex)		SomaDetect Inc
+300000-3FFFFF     (base 16)		SomaDetect Inc
+				241 Canada Street, Suite 10 
+				Fredericton  New Brunswick  E3A 4A1
+				CA
+
+78-D4-F1   (hex)		BONENG TRANSMISSION(SUZHOU)CO.,LTD
+A00000-AFFFFF     (base 16)		BONENG TRANSMISSION(SUZHOU)CO.,LTD
+				100#Ruyuan Rd.,Xiangcheng District,
+				Suzhou  Jiangsu  215131
+				CN
+
+78-D4-F1   (hex)		Lyngsoe Systems
+200000-2FFFFF     (base 16)		Lyngsoe Systems
+				101 Simona Dr Unit 2
+				Bolton  Ontario  L7E 4E8
+				CA
+
+78-D4-F1   (hex)		Blue Sparq, Inc.
+E00000-EFFFFF     (base 16)		Blue Sparq, Inc.
+				928 NE 24th Lane, Unit 4
+				Cape Coral  FL  33909
+				US
+
+44-6F-D8   (hex)		SCAIME
+D00000-DFFFFF     (base 16)		SCAIME
+				294 Rue Georges Charpak
+				JUVIGNY  Select State  74100
+				FR
+
+44-6F-D8   (hex)		Anhui GuDao Tech
+600000-6FFFFF     (base 16)		Anhui GuDao Tech
+				Dangtu Qingshanhe
+				MaAnShan  AnHui  243000
+				CN
+
+44-6F-D8   (hex)		Annapurna labs
+900000-9FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+98-27-82   (hex)		SHENZHEN HEROFUN BIO-TECH CO., LTD
+000000-0FFFFF     (base 16)		SHENZHEN HEROFUN BIO-TECH CO., LTD
+				7001B, 7th Floor, LaoBing Building, East Block 2, No. 3012 XingYe Road, BaoAn District
+				Shenzhen    518100
+				CN
+
+98-27-82   (hex)		RayTron, INC.
+B00000-BFFFFF     (base 16)		RayTron, INC.
+				11F.ESLEAD Bldg.HONMACHI 1-4-8 HONMACHI CHUO-KU
+				Osaka  Osaka  541-0053
+				JP
+
+98-27-82   (hex)		Thorlabs GmbH
+D00000-DFFFFF     (base 16)		Thorlabs GmbH
+				Münchner Weg 1
+				Bergkirchen    85232
+				DE
+
+98-27-82   (hex)		WESTERN SECURITY SOLUTIONS
+600000-6FFFFF     (base 16)		WESTERN SECURITY SOLUTIONS
+				WSS TOWER HARINAGAR
+				GURUGRAM  HARYANA  122001
+				IN
+
+98-27-82   (hex)		Danfoss Power Solutions
+300000-3FFFFF     (base 16)		Danfoss Power Solutions
+				3500 Annapolis Lane N
+				Minneapolis  MN  55447
+				US
+
+04-11-19   (hex)		AC Power Distribution / ACT Entmt.
+900000-9FFFFF     (base 16)		AC Power Distribution / ACT Entmt.
+				2313 N. Valley St.
+				Burbank  CA  91505
+				US
+
+04-11-19   (hex)		CyOne Security AG
+A00000-AFFFFF     (base 16)		CyOne Security AG
+				Hinterbergstrasse 18
+				Steinhausen  Zug  6312
+				CH
+
+04-11-19   (hex)		SUZHOU RIBAO TECHNOLOGY CO.,LTD.
+300000-3FFFFF     (base 16)		SUZHOU RIBAO TECHNOLOGY CO.,LTD.
+				SUZHOU RIBAO TECHNOLOGY CO.,LTD.
+				SUZHOU  JIANGSU  215133
+				CN
+
+04-11-19   (hex)		Nuance Hearing Ltd.
+D00000-DFFFFF     (base 16)		Nuance Hearing Ltd.
+				Raoul Wallenberg 24, Building A1, Floor 3
+				Tel Aviv    6971920
+				IL
+
+E8-6C-C7   (hex)		Annapurna labs
+E00000-EFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+E8-6C-C7   (hex)		Shenzhen Yibaifen Industrial Co.,Ltd.
+300000-3FFFFF     (base 16)		Shenzhen Yibaifen Industrial Co.,Ltd.
+				501/501, Building 2, Hongxiang Industrial Park, 21 Huancheng South Road, Ma'antang Community, Bantian Street, Longgang District, Shenzhen
+				Shenzhen    518000
+				CN
+
+E8-6C-C7   (hex)		z-max mediasolution
+D00000-DFFFFF     (base 16)		z-max mediasolution
+				Surugadai Bldg.8F kanda surugadai 1-7-10
+				Chiyodaku  Tokyo  101-0062
+				JP
+
+DC-E5-33   (hex)		Amazinglayer Network Co., Ltd.
+A00000-AFFFFF     (base 16)		Amazinglayer Network Co., Ltd.
+				Room118, Building B, JinTaiHuaYun Building, WuGenLin HuTong 11
+				Beijing  Beijing  100035
+				CN
+
+24-5D-FC   (hex)		ARTICONA - Bechtle Logistik & Service GmbH
+100000-1FFFFF     (base 16)		ARTICONA - Bechtle Logistik & Service GmbH
+				Bechtle Platz 1
+				Neckarsulm  Baden-Württemberg  74172
+				DE
+
+24-5D-FC   (hex)		Blue Iris Labs
+200000-2FFFFF     (base 16)		Blue Iris Labs
+				18 Acacia Rd
+				Fairfax  CA  94930
+				US
+
+24-5D-FC   (hex)		LTY LLC
+700000-7FFFFF     (base 16)		LTY LLC
+				1321 UPLAND DR
+				HOUSTON  TX  77043
+				US
+
+60-15-92   (hex)		PSS Co., Ltd
+C00000-CFFFFF     (base 16)		PSS Co., Ltd
+				4F., No. 10, Ln. 327, Sec. 2, Zhongshan Rd., Zhonghe Dist.
+				New Taipei City  ???  235
+				TW
+
+60-15-92   (hex)		RTDS Technologies Inc.
+100000-1FFFFF     (base 16)		RTDS Technologies Inc.
+				100-150 Innovation Drive
+				Winnipeg  Manitoba  R3T 2E1
+				CA
+
+60-15-92   (hex)		JIANGSU SUNFY TECHNOLOGIES HOLDING CO.,LTD.
+900000-9FFFFF     (base 16)		JIANGSU SUNFY TECHNOLOGIES HOLDING CO.,LTD.
+				Building 6, No. 1088, Jiangcheng Road, Sutong Technology Industrial Park
+				Nantong  Jiangsu  226017
+				CN
+
+60-15-92   (hex)		OSI TECHNOLOGY CO.,LTD.
+300000-3FFFFF     (base 16)		OSI TECHNOLOGY CO.,LTD.
+				No.74, Fenyang Rd., Sanmin Dist.
+				Kaohsiung City  Taiwan  807
+				TW
+
+60-15-92   (hex)		Annapurna labs
+E00000-EFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+0C-5C-B5   (hex)		Annapurna labs
+400000-4FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+0C-5C-B5   (hex)		Shenzhen C & D Electronics Co., Ltd.
+800000-8FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+0C-5C-B5   (hex)		iH&S Technology Limited
+300000-3FFFFF     (base 16)		iH&S Technology Limited
+				iH&S Technology Limited
+				7/F, Unify Commercial & Ind. Bldg., 31 Tai Yip Street, Kwun Tong  Hong Kong  999077
+				HK
+
+0C-5C-B5   (hex)		Energybox Limited
+700000-7FFFFF     (base 16)		Energybox Limited
+				8/F., Green 18, HK Science Park
+				Sha Tin  Hong Kong   0000
+				HK
+
+1C-A0-EF   (hex)		HANJEN.CHIN  CO., LTD.
+600000-6FFFFF     (base 16)		HANJEN.CHIN  CO., LTD.
+				Fl.2 No. 101  Jian 1st Rd., Zhonghe Dist., 
+				NEW TAIPEI CITY  TAIWAN  235
+				TW
+
+0C-5C-B5   (hex)		Colordeve International
+900000-9FFFFF     (base 16)		Colordeve International
+				601, block B, Logistics Park, Yihong Road, Yantian village, Fenggang Town, DG, GD, China
+				Dongguan City    523702
+				CN
+
+20-CE-2A   (hex)		Beijing Huadianzhongxin Tech.Co.,Ltd
+700000-7FFFFF     (base 16)		Beijing Huadianzhongxin Tech.Co.,Ltd
+				Room 318,the 3rd Floorl,Xingtianhaiyuan Building,Xianghuangqi East Rd,Nongda South Rd, Haidian District,Beijing,P.R.C
+				Bei Jing    100193
+				CN
+
+20-CE-2A   (hex)		Ariston Thermo s.p.a.
+C00000-CFFFFF     (base 16)		Ariston Thermo s.p.a.
+				Via Aristide Merloni 45
+				Fabriano  Ancona  60044
+				IT
+
+20-CE-2A   (hex)		Jabil
+200000-2FFFFF     (base 16)		Jabil
+				10560 Dr M.L.K. Jr St N, St.
+				St. Petersburg    33716
+				US
+
+88-C9-B3   (hex)		ADOPT NETTECH PVT LTD
+000000-0FFFFF     (base 16)		ADOPT NETTECH PVT LTD
+				A - 11, OKHLA INDUSTRIAL AREA, PHASE - I, 
+				NEW DELHI  DELHI  110020
+				IN
+
+7C-CB-E2   (hex)		Aplex Technology Inc.
+E00000-EFFFFF     (base 16)		Aplex Technology Inc.
+				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
+				Shenzhen City  Guangdong  518129
+				CN
+
+C8-F5-D6   (hex)		Jabil
+600000-6FFFFF     (base 16)		Jabil
+				10560 Dr M.L.K. Jr St N, St.
+				St. Petersburg    33716
+				US
+
+C8-F5-D6   (hex)		Volansys technologies pvt ltd
+D00000-DFFFFF     (base 16)		Volansys technologies pvt ltd
+				Block A-7th Floor, Safal Profitaire, Corporate Road, Prahaladnagar
+				Ahmedabad  Gujarat  380015
+				IN
+
+C0-FB-F9   (hex)		HAGUENET
+500000-5FFFFF     (base 16)		HAGUENET
+				 Nieuwe Parklaan 17
+				The Hague    2597 LA
+				NL
+
+C0-FB-F9   (hex)		LIXIL Corporation
+100000-1FFFFF     (base 16)		LIXIL Corporation
+				2-1-1 Ojima, Koto-ku
+				Tokyo  Select Stat  136-8535
+				JP
+
+C0-FB-F9   (hex)		SHENZHEN COMIX HST CLOUD COMPUTING CO., LTD.
+B00000-BFFFFF     (base 16)		SHENZHEN COMIX HST CLOUD COMPUTING CO., LTD.
+				1408? Qiancheng Commercial Center, No. 5 Haicheng Road, Mabu Community, Xixiang Sub-district, Bao'an District
+				Shenzhen  Guangdong  518000
+				CN
+
+C0-FB-F9   (hex)		SHENZHEN HEQIANG ELECTRONICS LIMITED
+300000-3FFFFF     (base 16)		SHENZHEN HEQIANG ELECTRONICS LIMITED
+				ROOM F7, 6TH FLOOR, A1 BUILDING, RED BOX LOFT, NO. 3 SOUTH HUANCHENG ROAD, LONGGANG DISTRICT,
+				SHENZHEN  GUANGDONG  518129
+				CN
+
+D0-9F-D9   (hex)		Carbon Mobile GmbH
+500000-5FFFFF     (base 16)		Carbon Mobile GmbH
+				Winterfeldtstr. 21
+				Berlin    10781
+				DE
+
+D0-9F-D9   (hex)		ENTTEC Pty Ltd.
+900000-9FFFFF     (base 16)		ENTTEC Pty Ltd.
+				po box 4051
+				ringwood  vic  3134
+				AU
+
+D0-9F-D9   (hex)		elecgator bvba
+100000-1FFFFF     (base 16)		elecgator bvba
+				Heerbaan, 308
+				Beringen  Limburg  3582
+				BE
+
+D0-9F-D9   (hex)		Minibems Ltd
+E00000-EFFFFF     (base 16)		Minibems Ltd
+				Oxford Point, 19 Oxford Road
+				Bournemouth    BH88GS
+				GB
+
+30-49-50   (hex)		Merlyn Mind, Inc.
+D00000-DFFFFF     (base 16)		Merlyn Mind, Inc.
+				405 Lexington Avenue, Suite 3504
+				New York  NY  10174
+				US
+
+18-74-E2   (hex)		G&O Audio Co.,LTD
+E00000-EFFFFF     (base 16)		G&O Audio Co.,LTD
+				3005, No.15-3, Haitian Road, Building C, N23 Excellence Times Square, Haiwang Community, Xin 'an Street, Bao 'an District
+				Shenzhen    518000
+				CN
+
+E8-78-29   (hex)		Tanz Security Technology Ltd.
+000000-0FFFFF     (base 16)		Tanz Security Technology Ltd.
+				11F., No. 203 Zhonghua 1st. road, Gushan District
+				Kaohsiung    80455
+				TW
+
+E8-78-29   (hex)		Electronic Controlled Systems, Inc.
+300000-3FFFFF     (base 16)		Electronic Controlled Systems, Inc.
+				11200 Hampshire Ave South
+				Bloomington  MN  55438
+				US
+
+E8-78-29   (hex)		AXING AG
+600000-6FFFFF     (base 16)		AXING AG
+				Gewerbehaus Moskau
+				Ramsen    8262
+				CH
+
+78-13-05   (hex)		Jiangxi Winsky Intelligence Technology Co., Ltd
+400000-4FFFFF     (base 16)		Jiangxi Winsky Intelligence Technology Co., Ltd
+				Zhihang road Wutong Ave. Hight tech area Jingdezhen City Jiangxi province PRC.
+				Jingdezhen   Jiangxi  333000
+				CN
+
+78-13-05   (hex)		Global Media Streaming LLC
+100000-1FFFFF     (base 16)		Global Media Streaming LLC
+				251 Little Falls Drive
+				Wilmington  DE  19808
+				US
+
+78-13-05   (hex)		ATS-CONVERS,LLC
+500000-5FFFFF     (base 16)		ATS-CONVERS,LLC
+				Yana Fabrittsyusa str. 10
+				Pskov    180017
+				RU
+
+78-13-05   (hex)		Leonardo SpA - Montevarchi 
+A00000-AFFFFF     (base 16)		Leonardo SpA - Montevarchi 
+				via DELLA LAMA, 13
+				Montevarchi  AREZZO  52025
+				IT
+
+78-13-05   (hex)		InnoSenT
+000000-0FFFFF     (base 16)		InnoSenT
+				Am Roedertor 30  
+				Donnersdorf  Bavaria  97499
+				DE
+
+A8-5B-36   (hex)		ShangHai SnowLake Technology Co.,LTD.
+800000-8FFFFF     (base 16)		ShangHai SnowLake Technology Co.,LTD.
+				30/F?Building#4,Si Chuang B?dg,No. 600Tianshan Rd, Changning District ,Shanghai
+				SHANGHAI  SHANGHAI  200050
+				CN
+
+A8-5B-36   (hex)		Lampyris Plant LLC
+B00000-BFFFFF     (base 16)		Lampyris Plant LLC
+				st.Arbuzova, 12, office. 201
+				Novosibirsk    630117
+				RU
+
+F0-2A-2B   (hex)		Shanghai Armour Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Shanghai Armour Technology Co., Ltd.
+				Room 411, building 10, 471 Guiping Road, Xuhui District
+				Shanghai  Shanghai  200233
+				CN
+
+F0-2A-2B   (hex)		EL.MO. spa
+B00000-BFFFFF     (base 16)		EL.MO. spa
+				Via Pontarola, 70
+				Campodarsego  Padua  I35011
+				IT
+
+F0-2A-2B   (hex)		Agile Sports Technologies, dba Hudl
+500000-5FFFFF     (base 16)		Agile Sports Technologies, dba Hudl
+				600 P St, Suite 400
+				Lincoln  NE  68508
+				US
+
+F0-2A-2B   (hex)		Onclave Networks
+400000-4FFFFF     (base 16)		Onclave Networks
+				7950  Jones Branch Drive  #805
+				McLean  VA  22102
+				US
+
+F0-2A-2B   (hex)		Navigil Ltd
+A00000-AFFFFF     (base 16)		Navigil Ltd
+				Karaportti 5
+				Espoo  Uusimaa  02610
+				FI
+
+F0-2A-2B   (hex)		Definitely Win Corp.,Ltd.
+D00000-DFFFFF     (base 16)		Definitely Win Corp.,Ltd.
+				2F., No. 48, Da'an St., Xizhi Dist.,
+				New Taipei City  Taiwan (R.O.C.)  221041
+				TW
+
+F0-2A-2B   (hex)		Merlin Security Inc.
+000000-0FFFFF     (base 16)		Merlin Security Inc.
+				 11836 Clark St
+				Arcadia  CA  91006
+				US
+
+44-A9-2C   (hex)		Shenzhen Lianfaxun Electronic Technology Co.,Ltd
+500000-5FFFFF     (base 16)		Shenzhen Lianfaxun Electronic Technology Co.,Ltd
+				No. 25, Tianrong road, Tianliao second industrial park, Yutang street, Guangming new district
+				Shenzhen  Guangdong   518132
+				CN
+
+44-A9-2C   (hex)		Digiport OU
+A00000-AFFFFF     (base 16)		Digiport OU
+				Sepapaja 6
+				Tallinn  Tallinn  15551
+				EE
+
+44-A9-2C   (hex)		Cubitech
+C00000-CFFFFF     (base 16)		Cubitech
+				4-6 Kiprou str
+				Tavros  Athens  17778
+				GR
+
+58-48-49   (hex)		Shenzhen Tongye Technology Co.,Ltd
+900000-9FFFFF     (base 16)		Shenzhen Tongye Technology Co.,Ltd
+				Meitai Industry Zone, Guanguang Road, Guihua zone, Guanlan street, Longhua District, Shenzhen
+				Shenzhen    518000
+				CN
+
+44-A9-2C   (hex)		Annapurna labs
+E00000-EFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+44-A9-2C   (hex)		Luxonis Holding Corporation
+300000-3FFFFF     (base 16)		Luxonis Holding Corporation
+				7901 Shaffer Parkway
+				Littleton  CO  80127
+				US
+
+58-48-49   (hex)		Hubei Shudi Communication Technology Co., Ltd
+500000-5FFFFF     (base 16)		Hubei Shudi Communication Technology Co., Ltd
+				11 Lane 2, shuichan street, Huangmei County
+				Huanggang  Hubei  435500
+				CN
+
+58-48-49   (hex)		Viper Design LLC
+300000-3FFFFF     (base 16)		Viper Design LLC
+				154 Cude Ln
+				Madison  TN  37115
+				US
+
+64-33-B5   (hex)		Hometek Eletronics Co., Ltd
+A00000-AFFFFF     (base 16)		Hometek Eletronics Co., Ltd
+				7F-2 No. 16,Lane 609, Section 5 Chung Hsin Rd. Sanchong District. New Taipei City Taiwan R.O.C.
+				New Taipei City  Taiwan  241
+				TW
+
+58-48-49   (hex)		Avadesign Technology Co. Ltd.
+E00000-EFFFFF     (base 16)		Avadesign Technology Co. Ltd.
+				4F.-10, No.351, Sec. 2, Zhongshan Rd., Zhonghe Dist.
+				New Taipei City    23504
+				TW
+
+58-48-49   (hex)		Beijing Zhongyuanyishang Technology Co Ltd
+000000-0FFFFF     (base 16)		Beijing Zhongyuanyishang Technology Co Ltd
+				Unit 404, 4th Floor, Building 12, Yard 69, Fushi Road, Haidian District, Beijing
+				Beijing    100000
+				CN
+
+58-48-49   (hex)		SKAARHOJ ApS
+100000-1FFFFF     (base 16)		SKAARHOJ ApS
+				Rosenkaeret 11C
+				Soeborg    2860
+				DK
+
+64-33-B5   (hex)		Wingtech Mobile Communications Co.,Ltd
+300000-3FFFFF     (base 16)		Wingtech Mobile Communications Co.,Ltd
+				No.777,Yazhong Road,Nanhu District
+				Jiaxing  Zhejiang  314001
+				CN
+
+64-33-B5   (hex)		Huaqin Telecom Technology Co.,Ltd.
+100000-1FFFFF     (base 16)		Huaqin Telecom Technology Co.,Ltd.
+				Building 1,No.399, Keyuan Road, Pudong, Shanghai China
+				Shanghai    200120
+				CN
+
+28-36-13   (hex)		Linear Computing Inc.
+300000-3FFFFF     (base 16)		Linear Computing Inc.
+				110 Galaxy Blvd
+				Etobicoke  Ontario  M9W 4Y6
+				CA
+
+64-33-B5   (hex)		IIYAMA CORPORATION
+D00000-DFFFFF     (base 16)		IIYAMA CORPORATION
+				Wijkermeerstraat 8
+				Hoofddorp    2131HA
+				NL
+
+28-36-13   (hex)		Hi-p (Suzhou) Electronics Co,Ltd
+100000-1FFFFF     (base 16)		Hi-p (Suzhou) Electronics Co,Ltd
+				5th floor, building G, no. 2337 gudai road (weijing center)
+				Shanghai  minhang district  215128
+				CN
+
+78-5E-E8   (hex)		Yake (Tianjin) Technology Co.,Ltd.
+A00000-AFFFFF     (base 16)		Yake (Tianjin) Technology Co.,Ltd.
+				No.2, Zhengtong Road, Caozili Town, Wuqing District, Tianjin
+				Tianjin  Tianjin  301727
+				CN
+
+78-5E-E8   (hex)		Lantern Engineering (Pty) Ltd
+B00000-BFFFFF     (base 16)		Lantern Engineering (Pty) Ltd
+				Unit 101 & 101A, Execujet Business Centre, Tower Road
+				Cape Town  Western Cape  7490
+				ZA
+
+78-5E-E8   (hex)		MT B?LG? TEKNOLOJ?LER? VE DI? T?C. A.?.
+700000-7FFFFF     (base 16)		MT B?LG? TEKNOLOJ?LER? VE DI? T?C. A.?.
+				Tekstilkent Ticaret Merkezi Koza Plaza B Blok K:26 At??alan? 
+				?STANBUL  ESENLER  34235
+				TR
+
+78-5E-E8   (hex)		INFOMOBILITY S.R.L.
+500000-5FFFFF     (base 16)		INFOMOBILITY S.R.L.
+				Via per Vallalta, S.P.7
+				Concordia sulla Secchia  Modena  41033
+				IT
+
+78-5E-E8   (hex)		Youtransactor
+000000-0FFFFF     (base 16)		Youtransactor
+				32 Rue Brancion
+				Paris    75015
+				FR
+
+A0-22-4E   (hex)		TMGcore, Inc.
+400000-4FFFFF     (base 16)		TMGcore, Inc.
+				6815 Communications Parkway
+				Plano  TX  75024
+				US
+
+38-A8-CD   (hex)		Dongguan Fyrnetics Co., Ltd
+300000-3FFFFF     (base 16)		Dongguan Fyrnetics Co., Ltd
+				No.1 Rongwen Road, Dongguan Changan, Guangdong, China 523842
+				Dongguan  Guangdong  523842
+				CN
+
+38-A8-CD   (hex)		WHITEvoid GmbH
+400000-4FFFFF     (base 16)		WHITEvoid GmbH
+				Köpenicker Chaussee 4
+				Berlin  Berlin  10317
+				DE
+
+7C-83-34   (hex)		Thermalimage
+000000-0FFFFF     (base 16)		Thermalimage
+				Unit 4 Airside, Boeing Avenue, Waterford Airport Business Park
+				Waterford  Munster  X91RTA4
+				IE
+
+1C-AE-3E   (hex)		Netvio Ltd
+500000-5FFFFF     (base 16)		Netvio Ltd
+				InfoLab21, Lancaster University, Bailrigg Road
+				Lancaster  Lancastershire  LA14WA
+				GB
+
+1C-AE-3E   (hex)		LINKWISE TECHNOLOGIES CO., LIMITED
+200000-2FFFFF     (base 16)		LINKWISE TECHNOLOGIES CO., LIMITED
+				LINKWISE TECHNOLOGIES CO., LIMITED
+				Shanghai  Shanghai  200072
+				CN
+
+1C-AE-3E   (hex)		JingQi(tianjin) technology Co., Ltd
+800000-8FFFFF     (base 16)		JingQi(tianjin) technology Co., Ltd
+				Building E88, No.1 Sizhidao Rd., Xiqing University Industrial Zone
+				Tianjin    300382
+				CN
+
+1C-AE-3E   (hex)		IPROAD,Inc
+100000-1FFFFF     (base 16)		IPROAD,Inc
+				407 ENC Dreamtower VI, 41 digital-ro 31gil, gurogu
+				Seoul    08375
+				KR
+
+1C-AE-3E   (hex)		Beijing Boyan-rd Technology Development CO.,LTD
+B00000-BFFFFF     (base 16)		Beijing Boyan-rd Technology Development CO.,LTD
+				Room 1514, 15 / F, building a 1, Qinghe Jiayuan East District
+				Beijing  Haidian District  100085
+				CN
+
+98-6E-E8   (hex)		Shanghai Pixsur Smart Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Shanghai Pixsur Smart Technology Co.,Ltd
+				Room 1204, No.1223, Xietu Road,Xuhui District
+				Shanghai  Shanghai  201100
+				CN
+
+1C-AE-3E   (hex)		Broachlink Technology Co.,Limited
+E00000-EFFFFF     (base 16)		Broachlink Technology Co.,Limited
+				1212, Yongtong BLDG,RenMin North Rd.,
+				Shenzhen  GuangDong  518100
+				CN
+
+98-6E-E8   (hex)		Private
+B00000-BFFFFF     (base 16)		Private
+
+98-6E-E8   (hex)		Ugreen Group Limited
+200000-2FFFFF     (base 16)		Ugreen Group Limited
+				4F, Plant 6, 1F-6/F, Block 7, YuAn Zone, Gaofeng Community, Dalang Street, Longhua District
+				Shenzhen  Guangdong  518109
+				CN
+
+98-80-BB   (hex)		Guangzhou Shortcut Technology Co.,Ltd.
+A00000-AFFFFF     (base 16)		Guangzhou Shortcut Technology Co.,Ltd.
+				Building No.7 Guangbao Road, Huangpu District
+				Guangzhou  Guangdong  510700
+				CN
+
+98-80-BB   (hex)		Jyh Eng Technology Co., Ltd
+800000-8FFFFF     (base 16)		Jyh Eng Technology Co., Ltd
+				5F, No. 50, Lane 1 , Sec.2, Guodao Rd., 
+				Lujhou Dist.,   New Taipei City,   247020
+				TW
+
+98-80-BB   (hex)		Shanghai ECone Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Shanghai ECone Technology Co.,Ltd.
+				Room1418,Floor5Building9,YangmingRoad,Xinghu,Development Zone, Fengxian,District,Shanghai
+				Shanghai    200000
+				CN
+
+98-80-BB   (hex)		Melexis Technologies NV
+500000-5FFFFF     (base 16)		Melexis Technologies NV
+				Transportstraat 1
+				Tessenderlo  Select State  3980
+				BE
+
+78-72-64   (hex)		Shenzhen C-DIGI Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Shenzhen C-DIGI Technology Co.,Ltd.
+				MeishengChuanggu(Xiagu), No. 10 Longchang Rd., Xin'an, Bao'an,
+				Shenzhen    518000
+				CN
+
+58-FC-DB   (hex)		Prometheus Security Group Global, Inc.
+700000-7FFFFF     (base 16)		Prometheus Security Group Global, Inc.
+				3019 Alvin Devane Boulevard  Building 4, Suite 400
+				Austin  TX  78741
+				US
+
+F4-70-0C   (hex)		Shenzhen Lidaxun Digital Technology Co., LTD
+500000-5FFFFF     (base 16)		Shenzhen Lidaxun Digital Technology Co., LTD
+				Room 7A, Building A3, HuaFengShiJiKeJiYuan, GuShu Street, BaoAn District
+				Shenzhen  Guangdong  518100
+				CN
+
+F4-A4-54   (hex)		Advanced Mechanical Technology, Inc. d/b/a AMTI
+700000-7FFFFF     (base 16)		Advanced Mechanical Technology, Inc. d/b/a AMTI
+				176 Waltham Street
+				Watertown  MA  02472
+				US
+
+F4-A4-54   (hex)		Integrated Dynamics Engineering GmbH
+C00000-CFFFFF     (base 16)		Integrated Dynamics Engineering GmbH
+				Hermannstrasse 9 - 13
+				Raunheim  Hessen  65479
+				DE
+
+F4-A4-54   (hex)		Lonton infomation tech Ltd., Co
+900000-9FFFFF     (base 16)		Lonton infomation tech Ltd., Co
+				L15 Block 5C, Huaqiang idea Park, Guangming District
+				Shenzhen  Guangdong  518000
+				CN
+
+18-45-B3   (hex)		Bdf Digital
+C00000-CFFFFF     (base 16)		Bdf Digital
+				Via dell'Oreficeria 41
+				Vicenza  Italy  36100
+				IT
+
+18-45-B3   (hex)		Guangzhou Aoshi Internet Information & Technology Co.,Ltd.
+A00000-AFFFFF     (base 16)		Guangzhou Aoshi Internet Information & Technology Co.,Ltd.
+				Room 401-410,A Building ,23# Nanxiang Road, Huangpu District
+				Guangzhou  Guangdong  510663
+				CN
+
+18-45-B3   (hex)		Harmonic Technology Limited
+600000-6FFFFF     (base 16)		Harmonic Technology Limited
+				Building B, No. 8 Tianxin Street, Yongkou Management District, Management District, Shijie Town
+				Dongguan  Guangdong  523290
+				CN
+
+18-45-B3   (hex)		Mission Secure Inc
+400000-4FFFFF     (base 16)		Mission Secure Inc
+				100 10th St NE STE 301
+				Charlottesville  VA  22902
+				US
+
+08-F8-0D   (hex)		FG-Lab Inc.
+400000-4FFFFF     (base 16)		FG-Lab Inc.
+				KDX shibadaimon.Bld 2F 2-10-12 Shibadaimon
+				Minato-ku  Tokyo  1050012
+				JP
+
+94-C9-B7   (hex)		Fairy Devices Inc.
+000000-0FFFFF     (base 16)		Fairy Devices Inc.
+				Yushima Urban Bldg 7F, 2-31-22 Yushima Bunkyo-ku
+				Tokyo    113-0034
+				JP
+
+94-C9-B7   (hex)		ShenZhen Beide Technology Co.,LTD
+A00000-AFFFFF     (base 16)		ShenZhen Beide Technology Co.,LTD
+				SHENZHEN BEIDE Technology Co,.LTD ???3 / F, Building A, Tengfei Industrial Building, No.6 taohua Road, Fubao Community, Fubao Street, Futian District, Shenzhen   
+				ShenZhen  GuangDong  518000
+				CN
+
+94-C9-B7   (hex)		shenzhen UDD Technologies,co.,Ltd
+E00000-EFFFFF     (base 16)		shenzhen UDD Technologies,co.,Ltd
+				Unit D, 6th Floor, Jialitai Bldg., No.45 Yanshan Road, Shekou, Nanshan District, Shenzhen, China
+				shenzhen  guangdong  51800
+				CN
+
+94-C9-B7   (hex)		Beijing Anyunshiji Technology Co., Ltd.
+500000-5FFFFF     (base 16)		Beijing Anyunshiji Technology Co., Ltd.
+				1002, 10F, Room 102, Floor 1-17, Building 2, Yard 6, Jiuxianqiao Road, Chaoyang District
+				Beijing    100015
+				CN
+
+94-C9-B7   (hex)		3D Biomedicine Science & Technology Co., Limited
+B00000-BFFFFF     (base 16)		3D Biomedicine Science & Technology Co., Limited
+				Building 2, Block A, 158 XinJunhuan Street, Pujiang Hi-tech Park
+				Shanghai  Shanghai  201114
+				CN
+
+50-A0-30   (hex)		Abacus Research AG
+600000-6FFFFF     (base 16)		Abacus Research AG
+				Abacus-Platz 1
+				Wittenbach  St. Gallen  9300
+				CH
+
+50-A0-30   (hex)		Alert Innovation
+400000-4FFFFF     (base 16)		Alert Innovation
+				101 Billerica Ave Bldg 3
+				North Billerica  MA  01862
+				US
+
+50-A0-30   (hex)		DPA Microphones A/S
+900000-9FFFFF     (base 16)		DPA Microphones A/S
+				Gydevang 42-44
+				Alleroed    3450
+				DK
+
+04-EE-E8   (hex)		Hengke Technology Industry Co., Ltd.
+200000-2FFFFF     (base 16)		Hengke Technology Industry Co., Ltd.
+				No.305-1 Torch Road, High District, WeiHai
+				WeiHai  ShanDong  264200
+				CN
+
+50-A0-30   (hex)		Annapurna labs
+200000-2FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+04-EE-E8   (hex)		Shenzhen Daotong Technology Co.,Ltd
+400000-4FFFFF     (base 16)		Shenzhen Daotong Technology Co.,Ltd
+				7th, 8th, 10th Floor, Building B1, Zhiyuan Road, No. 1001 Xueyuan Avenue, Xili Street, Nanshan District, Shenzhen
+				SHENZHEN    518000
+				CN
+
+04-EE-E8   (hex)		RealWear
+500000-5FFFFF     (base 16)		RealWear
+				600 Hathaway Rd, Ste 105
+				Vancouver  WA  98661
+				US
+
+04-EE-E8   (hex)		Fluid Management Technology
+300000-3FFFFF     (base 16)		Fluid Management Technology
+				169 Grange Rd, Beverley
+				169 Grange Rd, Beverley, South Australia 5009 AU.  South Australia  5009
+				AU
+
+18-D7-93   (hex)		EcoG
+B00000-BFFFFF     (base 16)		EcoG
+				Gaenslerweg 24
+				Furth  Bavaria  82041
+				DE
+
+18-D7-93   (hex)		Teegarden Applied Science Inc
+E00000-EFFFFF     (base 16)		Teegarden Applied Science Inc
+				2510 rue de l'Aeroport
+				St-Mathieu-de-Beloeil  Quebec  J3G0C9
+				CA
+
+DC-36-43   (hex)		Meier Tobler AG
+000000-0FFFFF     (base 16)		Meier Tobler AG
+				Bahnstrasse 24
+				Schwerzenbach  ZH  8603
+				CH
+
+DC-36-43   (hex)		nami.ai
+B00000-BFFFFF     (base 16)		nami.ai
+				3 Temasek Avenue, #17-19
+				Singapore    039190
+				SG
+
+DC-36-43   (hex)		WIS Networks
+300000-3FFFFF     (base 16)		WIS Networks
+				702, No. 60,  langbaoxi  Road, Chancheng District
+				foshan  guangdong  528000
+				CN
+
+DC-36-43   (hex)		Dongguan Pengchen Earth Instrument CO. LT
+100000-1FFFFF     (base 16)		Dongguan Pengchen Earth Instrument CO. LT
+				Room 301, Building 1, No.6, North Huwu Road, Liuwu Village, Shijie Town, Dongguan city, Guangdong Province
+				Dongguan    523290
+				CN
+
+DC-36-43   (hex)		Hangzhou Huanyu Vision Technology Co., Ltd
+D00000-DFFFFF     (base 16)		Hangzhou Huanyu Vision Technology Co., Ltd
+				 Room 701, block n, No. 88, China (Hangzhou) smart information industrial park, Gongshu District,
+				Hangzhou  Zhejiang  310011
+				CN
+
+08-26-AE   (hex)		BANGJOO Co., Ltd.
+400000-4FFFFF     (base 16)		BANGJOO Co., Ltd.
+				745-34, Samnam-ro,Jinwi-myeon
+				Pyeongtaek  Gyeonggi-do  17718
+				KR
+
+08-26-AE   (hex)		Brannstrom Sweden AB
+C00000-CFFFFF     (base 16)		Brannstrom Sweden AB
+				Uddevallagatan 14
+				Göteborg    41670
+				SE
+
+08-26-AE   (hex)		Newcapec co.,Ltd
+600000-6FFFFF     (base 16)		Newcapec co.,Ltd
+				18 Yingchun Street, High-tech Development Zone
+				Zhengzhou  Henan  450000
+				CN
+
+98-8F-E0   (hex)		Changzhou Perceptime Technology Co.,Ltd.
+800000-8FFFFF     (base 16)		Changzhou Perceptime Technology Co.,Ltd.
+				5/f, biological building, 1326 Yanan West road, Changning District
+				Shanghai  Shanghai  200052
+				CN
+
+98-8F-E0   (hex)		Huaqin Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Huaqin Technology Co.,Ltd.
+				10 Keyuan Road, Songshan Lake
+				Dongguan    Guangdong  523419
+				CN
+
+98-8F-E0   (hex)		Schmid AG, energy solutions
+400000-4FFFFF     (base 16)		Schmid AG, energy solutions
+				Hörnlistrasse 12
+				Eschlikon    8360
+				CH
+
+98-8F-E0   (hex)		Pavana Technologies JSC.
+A00000-AFFFFF     (base 16)		Pavana Technologies JSC.
+				Lot F1-2-3, Thang Long Vinh Phuc IP., Tam Hop Commune, Binh Xuyen District
+				Vinh Phuc    35000
+				VN
+
+10-54-D2   (hex)		COSMO AIOT TECHNOLOGY CO LTD
+E00000-EFFFFF     (base 16)		COSMO AIOT TECHNOLOGY CO LTD
+				Haier Information Industrial Complex, No.1 HaierRoad
+				Qingdao  Shandong  266101
+				CN
+
+10-54-D2   (hex)		GIPS Technology Co., Ltd.
+000000-0FFFFF     (base 16)		GIPS Technology Co., Ltd.
+				Rm. 2, 6F., No. 395, Sec. 1, Linsen Rd., East Dist.
+				 Tainan City  TAIWAN  701024
+				TW
+
+10-54-D2   (hex)		Embion B.V.
+A00000-AFFFFF     (base 16)		Embion B.V.
+				Biestraat 1b
+				Gilze  Noord-Brabant  5126NH
+				NL
+
+10-54-D2   (hex)		Little Array Technology (Shenzhen) Co., Ltd.
+300000-3FFFFF     (base 16)		Little Array Technology (Shenzhen) Co., Ltd.
+				Unit 215, 2F, A1, Zhimei Industry Park, Fuhai Industrial Zone B2, Fuyong Street, Baoan District
+				Shenzhen  Guangdong  518103
+				CN
+
+10-54-D2   (hex)		LUXSHARE-ICT Co., Ltd.
+C00000-CFFFFF     (base 16)		LUXSHARE-ICT Co., Ltd.
+				1F, No. 22, Lane 35, Jihu Road, Neihu district
+				Taipei City  Taiwan  114754
+				TW
+
+0C-86-29   (hex)		SHENZHEN YINGMU TECHNOLOGY.,LTD
+C00000-CFFFFF     (base 16)		SHENZHEN YINGMU TECHNOLOGY.,LTD
+				8 / F, Zone D, building F1, TCL International E city, Shuguang community, Xili street, Nanshan District,
+				Shenzhen    518000
+				CN
+
+0C-86-29   (hex)		Nipron Co.,Ltd
+A00000-AFFFFF     (base 16)		Nipron Co.,Ltd
+				1-3-30 Nishinagasucho
+				Amagasaki-shi  Hyogo-ken  660-0805
+				JP
+
+0C-86-29   (hex)		FX TECHNOLOGY LIMITED
+E00000-EFFFFF     (base 16)		FX TECHNOLOGY LIMITED
+				38a High Street, Northwood
+				Middlesex  -  HA6 1BN
+				GB
+
+6C-93-08   (hex)		LightnTec GmbH
+300000-3FFFFF     (base 16)		LightnTec GmbH
+				Haid-und-Neu-Strasse 7
+				Karlsruhe    76131
+				DE
+
+30-43-D7   (hex)		Sprocomm Technologies Co., Ltd.Guangming Branch
+600000-6FFFFF     (base 16)		Sprocomm Technologies Co., Ltd.Guangming Branch
+				Area A 3rd Floor, Area A 5rd Floor and 6th Floor, 301, building 2, 7th Industrial Park, Yulv Community,Yutang Street, Guangming District, 
+				Shenzhen    518000
+				CN
+
+6C-93-08   (hex)		Shenzhen haichangxing Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Shenzhen haichangxing Technology Co., Ltd.
+				Room 3102, 31 / F, Wen an Center, Wenjin Square, Luohu
+				SHENZHEN  GUANGZHOU  518000
+				CN
+
+30-43-D7   (hex)		Shenzhen juduoping Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Shenzhen juduoping Technology Co.,Ltd
+				Baoan Xin'an Streat
+				Shenzhen    002052
+				CN
+
+30-43-D7   (hex)		Guangdong Hongqin Telecom  Technology Co. Ltd.
+E00000-EFFFFF     (base 16)		Guangdong Hongqin Telecom  Technology Co. Ltd.
+				10 Keyuan Road, Songshan Lake
+				Dongguan  Guangdong   523808
+				CN
+
+38-1F-26   (hex)		Bosch Automotive Electronics India Pvt. Ltd.
+300000-3FFFFF     (base 16)		Bosch Automotive Electronics India Pvt. Ltd.
+				Naganathapura
+				Bengaluru  Karnataka  560100
+				IN
+
+18-A5-9C   (hex)		ePower Network Solution Co., Ltd.
+700000-7FFFFF     (base 16)		ePower Network Solution Co., Ltd.
+				No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., 
+				New Taipei City ,    242063
+				TW
+
+18-A5-9C   (hex)		Erba Lachema s.r.o.
+A00000-AFFFFF     (base 16)		Erba Lachema s.r.o.
+				Karasek1d
+				Brno    62100
+				CZ
+
+1C-59-74   (hex)		Shenzhen Hanshine Technology Co.Ltd.
+000000-0FFFFF     (base 16)		Shenzhen Hanshine Technology Co.Ltd.
+				Buiding 2 ,row 3,number 2 industrail  zone,yulv community,Yutang street 
+				Shenzhen  Guangdong  518000
+				CN
+
+1C-59-74   (hex)		Chongqing Taishan Cable Co., Ltd
+200000-2FFFFF     (base 16)		Chongqing Taishan Cable Co., Ltd
+				17 Shiyan Avenue, Yufengshan Town, Yubei District,
+				Chongqing    400000
+				CN
+
+6C-15-24   (hex)		Telsonic AG
+100000-1FFFFF     (base 16)		Telsonic AG
+				Industriestrasse 6b
+				Bronschhofen  St.Gallen  9552
+				CH
+
+18-A5-9C   (hex)		Beijing QS Medical Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Beijing QS Medical Technology Co., Ltd.
+				Building 5, No.11, Kechuang 14th Street, Economic-Technological Development Area
+				Beijing    100176
+				CN
+
+6C-15-24   (hex)		SYMLINK CORPORATION
+D00000-DFFFFF     (base 16)		SYMLINK CORPORATION
+				6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park
+				Taipei    11492
+				TW
+
+C4-A1-0E   (hex)		Clinton Electronics Corporation
+B00000-BFFFFF     (base 16)		Clinton Electronics Corporation
+				6701 Clinton Road
+				Loves Park  IL  61111
+				US
+
+C4-A1-0E   (hex)		Wistron InfoComn (Kunshan) Co., Ltd.
+200000-2FFFFF     (base 16)		Wistron InfoComn (Kunshan) Co., Ltd.
+				No.88 Hongyan Road, Kunshan Economic & Technological Development Zone
+				Kunshan  Jiangsu  215300
+				CN
+
+C4-A1-0E   (hex)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
+700000-7FFFFF     (base 16)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
+				Area A Layer 6, Area A Layer 5, Area A Layer 4, No.39, Sicheng Road, Tianhe District,
+				Guangzhou  GuangDong  510663
+				CN
+
+6C-15-24   (hex)		Motium Pty Ltd
+700000-7FFFFF     (base 16)		Motium Pty Ltd
+				11/4 Brodie Hall Drive,
+				Bentley  Western Australia  6102
+				AU
+
+6C-15-24   (hex)		AEC s.r.l.
+E00000-EFFFFF     (base 16)		AEC s.r.l.
+				Via Zambon, 33/A
+				Creazzo  Vicenza  36051
+				IT
+
+70-50-E7   (hex)		Shenzhen C & D Electronics Co., Ltd.
+000000-0FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+70-50-E7   (hex)		Beijing Shannoncyber Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Beijing Shannoncyber Technology Co.,Ltd
+				913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District
+				beijing  beijing  100029
+				CN
+
+C4-A1-0E   (hex)		Harbour Cross Technology Ltd
+400000-4FFFFF     (base 16)		Harbour Cross Technology Ltd
+				Unit 622 One Island South, 2 Heung Yip Road, Wong Chuk Hang,
+				Hong Kong  China  000000
+				HK
+
+70-50-E7   (hex)		Annapurna labs
+100000-1FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+80-02-F4   (hex)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
+900000-9FFFFF     (base 16)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
+				SECOND  FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA
+				XIAMEN    361106
+				CN
+
+80-02-F4   (hex)		PassiveLogic
+A00000-AFFFFF     (base 16)		PassiveLogic
+				6405 S 3000 E, Suite 300
+				Holladay  UT  84121
+				US
+
+80-02-F4   (hex)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
+D00000-DFFFFF     (base 16)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
+				No. 52, Guoxiang Road, Wujin economic development zone
+				ChangZhou  JiangSu  213100
+				CN
+
+80-02-F4   (hex)		Sichuan Fanyi Technology Co. Ltd.
+500000-5FFFFF     (base 16)		Sichuan Fanyi Technology Co. Ltd.
+				No. 1707, Unit 1, Building 1, 888, Middle Section of Yizhou Avenue, Gaoxin District
+				Chengdu  Sichuan  650000
+				CN
+
+80-02-F4   (hex)		Infors AG
+400000-4FFFFF     (base 16)		Infors AG
+				Wuhrmattstr. 7
+				Bottmingen    4103
+				CH
+
+80-02-F4   (hex)		Mech-Mind Robotics Technologies Ltd.
+600000-6FFFFF     (base 16)		Mech-Mind Robotics Technologies Ltd.
+				 Room 1001,1F,Building 3, No.8,Chuangye Road,Haidian District
+				Beijing    100085
+				CN
+
+8C-51-09   (hex)		ENPLUG Co., Ltd.
+700000-7FFFFF     (base 16)		ENPLUG Co., Ltd.
+				#A-705, 46 Dallaenae-ro, Sujeong-gu, 
+				Seongnam-si  Gyeonggi-do  13449
+				KR
+
+8C-51-09   (hex)		Frontmatec
+900000-9FFFFF     (base 16)		Frontmatec
+				Hassellunden 9
+				Smørum    2765
+				DK
+
+0C-7F-ED   (hex)		ShenZhen TianGang Micro Technology CO.LTD
+500000-5FFFFF     (base 16)		ShenZhen TianGang Micro Technology CO.LTD
+				3rd floor ,Building20,QingHu Industrial,QingHu community,LongHua DistrictShenZhen,China
+				ShenZhen  GangDong  518100
+				CN
+
+0C-7F-ED   (hex)		U-tec Group Inc.
+800000-8FFFFF     (base 16)		U-tec Group Inc.
+				32920 Alvarado-Niles Rd Ste 220
+				Union City  CA  94587
+				US
+
+FC-61-79   (hex)		MACH SYSTEMS s.r.o.
+900000-9FFFFF     (base 16)		MACH SYSTEMS s.r.o.
+				Pocernicka 272/96
+				Prague    10800
+				CZ
+
+0C-7F-ED   (hex)		Soft dB
+300000-3FFFFF     (base 16)		Soft dB
+				1040, avenue Belvédère #215
+				Québec  Quebec  G1S 3G3
+				CA
+
+FC-61-79   (hex)		Annapurna labs
+800000-8FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+FC-61-79   (hex)		Zhuhai Anjubao Electronics Technology Co., Ltd.
+000000-0FFFFF     (base 16)		Zhuhai Anjubao Electronics Technology Co., Ltd.
+				Room 603, Building 4, No. 101, Daxue Road, Tangjiawan Town, High-tech Zone,
+				Zhuhai  Guangdong  519000
+				CN
+
+FC-61-79   (hex)		Shenzhen Shenshui Electronic Commerce Co.,Ltd
+200000-2FFFFF     (base 16)		Shenzhen Shenshui Electronic Commerce Co.,Ltd
+				Room 517, Biaofan Building, No. 6, Tangwei Industrial Avenue, Fuhai Street, Baoan District
+				Shenzhen    518132
+				CN
+
+30-3D-51   (hex)		Media Hub Digital Smart Home Pty Ltd.
+500000-5FFFFF     (base 16)		Media Hub Digital Smart Home Pty Ltd.
+				40 Koornang Road
+				Scoresby  VIC  3179
+				AU
+
+30-3D-51   (hex)		Dspread Technology (Beijing) Inc.
+400000-4FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+30-3D-51   (hex)		TeraNXT Global India Pvt Ltd.
+A00000-AFFFFF     (base 16)		TeraNXT Global India Pvt Ltd.
+				7A/61 W.E.A KAROL BAGH
+				DELHI  DELHI  110005
+				IN
+
+30-3D-51   (hex)		S & A Systems
+300000-3FFFFF     (base 16)		S & A Systems
+				992 Sids Rd.
+				Rockwall  TX  75032
+				US
+
+30-3D-51   (hex)		Percent.com
+E00000-EFFFFF     (base 16)		Percent.com
+				167/2, Fakirerpool D.I.T Extention Road, Motiheel
+				Dhaka  Dhaka  1000
+				BD
+
+2C-69-1D   (hex)		SHENZHEN EX-LINK TECHNOLOGY CO.,LTD
+900000-9FFFFF     (base 16)		SHENZHEN EX-LINK TECHNOLOGY CO.,LTD
+				818 Building 2,Nanyou Fourth Industrial Zone,No 1124 ,Nanshan Avenue,Nanguang Community,Nanshan Street,Nanshan District,Shenzhen
+				SHENZHEN  GUANGDONG  518052
+				CN
+
+10-DC-B6   (hex)		Apex Supply Chain Technologies
+000000-0FFFFF     (base 16)		Apex Supply Chain Technologies
+				4393 Digital Way
+				Mason  OH  45040
+				US
+
+2C-69-1D   (hex)		Chengdu Qianhong Communication Co., Ltd.
+E00000-EFFFFF     (base 16)		Chengdu Qianhong Communication Co., Ltd.
+				NO.666, XINGYE ROAD, EAST INDUSTRIAL AREA, XINDU DISTRICT, CHENGDU CITY, CHINA
+				Chengdu  SICHUAN  610599
+				CN
+
+30-0A-60   (hex)		Intergard do Brasil Ind e Com de Eletr e Mec Ltda
+300000-3FFFFF     (base 16)		Intergard do Brasil Ind e Com de Eletr e Mec Ltda
+				Avenida Capitao Casa 1485
+				São Bernardo do Campo  Sao Paulo  09812000
+				BR
+
+2C-69-1D   (hex)		Carnegie Robotics
+600000-6FFFFF     (base 16)		Carnegie Robotics
+				4501 Hatfield Street
+				Pittsburgh  PA  15201
+				US
+
+2C-69-1D   (hex)		Aparian, Inc.
+C00000-CFFFFF     (base 16)		Aparian, Inc.
+				2709 S Orange AveUnit D
+				Santa Ana  CA  92707
+				US
+
+2C-69-1D   (hex)		Sunsa, Inc
+300000-3FFFFF     (base 16)		Sunsa, Inc
+				3422 Fait Ave
+				Baltimore  MD  21224
+				US
+
+18-C3-F4   (hex)		Shenzhen Yunlianxin Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		Shenzhen Yunlianxin Technology Co., Ltd.
+				Room 601, Building 3, Xinzhongtai Industrial Park, Hengfeng Community, Yousong Community, Longhua Street, Longhua District, Shenzhen, Guangdong, China
+				Shenzhen  guangdong  518000
+				CN
+
+18-C3-F4   (hex)		Annapurna labs
+400000-4FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+8C-C8-F4   (hex)		TableSafe
+700000-7FFFFF     (base 16)		TableSafe
+				12220 113th Ave NE, Suite 220
+				Kirkland  WA  98034
+				US
+
+98-02-D8   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+				445 Hoes Lane
+				PISCATAWAY  NJ  08854
+				US
+
+18-C3-F4   (hex)		Shenzhen C & D Electronics Co., Ltd.
+D00000-DFFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+18-C3-F4   (hex)		Shenzhen Yecon-Tech Co.,Ltd.
+700000-7FFFFF     (base 16)		Shenzhen Yecon-Tech Co.,Ltd.
+				Building 2,Cuigang Industrial Zone 6,Huaide Community,Fuyong Town,Baoan District, Shenzhen City, Guangdong province, China
+				Shenzhen  Guangdong  518000
+				CN
+
+88-3C-C5   (hex)		Shenzhen shijia chuangxin Technology Co., Ltd
+B00000-BFFFFF     (base 16)		Shenzhen shijia chuangxin Technology Co., Ltd
+				Room 301, Building A, Comprehensive Building, Jinlaiwang Industrial Park, No. 7, Jiayi Industrial Park, Guixiang Community, Guanlan Street, Longhua District, Shenzhen
+				SHENZHEN    51800
+				CN
+
+88-3C-C5   (hex)		Swabian Instruments GmbH
+400000-4FFFFF     (base 16)		Swabian Instruments GmbH
+				Stammheimer Str. 41
+				Stuttgart  BW  70435
+				DE
+
+58-47-CA   (hex)		Suzhou Laisai Intelligence Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Suzhou Laisai Intelligence Technology Co.,Ltd
+				No.59 Jiangnan Avenue
+				Changshu  Jiangsu  215500
+				CN
+
+58-47-CA   (hex)		Powder Watts, LLC
+A00000-AFFFFF     (base 16)		Powder Watts, LLC
+				2750 Rasmussen RoadSuite 107
+				Park City  UT  84098
+				US
+
+88-3C-C5   (hex)		Corigine,Inc.
+A00000-AFFFFF     (base 16)		Corigine,Inc.
+				Room202 ,west side of 2nd floor,Building 1,1516 Hongfeng Road
+				Huzhou  Zhejiang  313000 
+				CN
+
+D4-20-00   (hex)		EVOC VIN Technology Co.,Ltd
+400000-4FFFFF     (base 16)		EVOC VIN Technology Co.,Ltd
+				Room 101?Evoc Technology Building?No.31 Gaoxin Central Avenue 4th Road?Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+58-47-CA   (hex)		SMS ELECTRIC CO., LTD ZHENGZHOU
+C00000-CFFFFF     (base 16)		SMS ELECTRIC CO., LTD ZHENGZHOU
+				SMS Industrial Park at NO. 85 Fifth Avenue, Economic and Technical Development
+				ZhengZhou  HeNan  450000
+				CN
+
+D4-20-00   (hex)		Gentec Systems  Co.
+C00000-CFFFFF     (base 16)		Gentec Systems  Co.
+				5F., No.51-3, Fuxing Rd., Xindian Dist., 
+				New Taipei City     23150
+				TW
+
+C4-83-72   (hex)		clk2.inc
+700000-7FFFFF     (base 16)		clk2.inc
+				#B1, dobong-ro 121gil, dobong-guseoul, korea
+				seoul  seoul  14440
+				KR
+
+C4-83-72   (hex)		Acenew technology(shenzhen) limited company
+C00000-CFFFFF     (base 16)		Acenew technology(shenzhen) limited company
+				Room 706,7th Floor,Building G2,TCL International City E,No.1001,Zhongshanyuan Road,Nanshan District,
+				Shenzhen    518055
+				CN
+
+D4-20-00   (hex)		RPUSI Communication Technology  Co.,Ltd.
+E00000-EFFFFF     (base 16)		RPUSI Communication Technology  Co.,Ltd.
+				Room 610,Building 1,No.423,Wuning Road,Putuo Dist
+				Shanghai    200036
+				CN
+
+D4-20-00   (hex)		ZUUM
+D00000-DFFFFF     (base 16)		ZUUM
+				4321 W Sam Houston Pkwy N Ste 120
+				Houston  TX  77043
+				US
+
+C4-83-72   (hex)		Netplus Co., Ltd.
+600000-6FFFFF     (base 16)		Netplus Co., Ltd.
+				#504 3-1-1 Oguradai
+				Inzai-shi  Chiba-ken  2701356
+				JP
+
+D4-BA-BA   (hex)		Rusatom Automated Control Systems, Joint-Stock Company
+C00000-CFFFFF     (base 16)		Rusatom Automated Control Systems, Joint-Stock Company
+				Kashirskoe shosse 3, korpus 2, stroenie 16
+				Moscow    115230
+				RU
+
+D4-BA-BA   (hex)		Annapurna labs
+100000-1FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+D4-BA-BA   (hex)		Shenzhen Chuangyou Acoustic Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen Chuangyou Acoustic Technology Co., Ltd.
+				Room 1205, Office Building, No. 4, Chongwen Garden, No. 1, Tangling Road, Fuguang Community, Taoyuan Street, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+D4-BA-BA   (hex)		Shenzhen Pu Ying Innovation Technology Corporation Limited
+300000-3FFFFF     (base 16)		Shenzhen Pu Ying Innovation Technology Corporation Limited
+				Hong Tu Industrial Park, Block 3, 3/F, Hezhou, Bao An,
+				Shenzhen  Guangdong  518102
+				CN
+
+D4-BA-BA   (hex)		Chengdu Ba SAN SI YI Information Technology Co., LTD
+800000-8FFFFF     (base 16)		Chengdu Ba SAN SI YI Information Technology Co., LTD
+				(Xihanggang Science and Technology Enterprise Incubation Center),No. 2, Section 4, Xihanggang Avenue, Industrial Concentration Area, Southwest Airport Economic Development Zone, Shuangliu District, Chengdu City, China (Sichuan) Pilot Free Trade Zone
+				Chengdu    250100
+				CN
+
+D4-BA-BA   (hex)		ReeR SpA
+500000-5FFFFF     (base 16)		ReeR SpA
+				via carcano 32
+				torino    10153
+				IT
+
+D4-BA-BA   (hex)		AADONA Communication Pvt Ltd
+D00000-DFFFFF     (base 16)		AADONA Communication Pvt Ltd
+				1st Floor, Phoenix Tech Tower, Plot No. 14/46, IDA - Uppal
+				Hyderabad   Telangana  500039
+				IN
+
+C4-98-94   (hex)		SEAVIEW TELECOM
+100000-1FFFFF     (base 16)		SEAVIEW TELECOM
+				21st Floor, Block B-1, Building 9, Shenzhen Bay Science and Technology Ecological Park, Nanshan District
+				shenzhen    518000
+				CN
+
+D0-96-86   (hex)		Shenzhen Ntmer Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Shenzhen Ntmer Technology Co., Ltd.
+				2109, Haowei Science and Technology Building, No. 2, Keji South 8th Road, High-tech Zone, Yuehai Street, Nanshan District, Shenzhen, CN, 518000
+				Shenzhen  Guangdong  518000
+				CN
+
+D0-96-86   (hex)		EPHI B.V.
+300000-3FFFFF     (base 16)		EPHI B.V.
+				Ondernemingenweg 26
+				Eindhoven    5627 BV
+				NL
+
+4C-74-A7   (hex)		Suzhou XiongLi Technology Inc.
+900000-9FFFFF     (base 16)		Suzhou XiongLi Technology Inc.
+				Unit E502-1, International Science and Technology Park, No. 1355 Jinjihu Avenue, Suzhou Industrial Park
+				Suzhou  Jiangsu  215000
+				CN
+
+4C-74-A7   (hex)		Shenzhen Timekettle Technologies Co.,Ltd
+000000-0FFFFF     (base 16)		Shenzhen Timekettle Technologies Co.,Ltd
+				Room 612, Building 4, Minqi Science Park, No. 65 Lishan Road, Pingshan Community, Taoyuan Street, Nanshan District, 
+				Shenzhen  Guangdong  518071
+				CN
+
+4C-74-A7   (hex)		Wuxi Micro Innovation Integrated Circuit Design Co., Ltd
+400000-4FFFFF     (base 16)		Wuxi Micro Innovation Integrated Circuit Design Co., Ltd
+				12th Floor A3 Building, No. 777, West Jianzhu Road, Binhu District, Wuxi City, Jiangsu Province
+				Jiangsu    214028
+				CN
+
+D4-61-37   (hex)		Beijing Digital China Yunke Technology Limited
+800000-8FFFFF     (base 16)		Beijing Digital China Yunke Technology Limited
+				R301, 3F, NO9, shangdi 9th street, haidian district, beijing
+				Beijing  Beijing  100085
+				CN
+
+4C-74-A7   (hex)		COREIP TECHNOLOGY PRIVATE LIMITED
+700000-7FFFFF     (base 16)		COREIP TECHNOLOGY PRIVATE LIMITED
+				C-421, The iTHUM, Sector 62
+				Noida    201309
+				IN
+
+4C-74-A7   (hex)		RAONARK
+A00000-AFFFFF     (base 16)		RAONARK
+				121, Digital-ro
+				Geumcheon-gu  Seoul  08505
+				KR
+
+D4-61-37   (hex)		Shenzhen Xunjie International Trade Co., LTD
+A00000-AFFFFF     (base 16)		Shenzhen Xunjie International Trade Co., LTD
+				29e, Room 29E, Block B, NEO Greenview Plaza
+				No. 6009 Shennan Avenue, Tianan Community, Shatou Street, Futian District  Shenzhen, Guangdong  518000
+				CN
+
+D4-61-37   (hex)		IPTECHVIEW
+D00000-DFFFFF     (base 16)		IPTECHVIEW
+				13988 Diplomat Dr.Suite 180
+				Dallas  TX  75234
+				US
+
+F0-22-1D   (hex)		Dr. Eberl MBE Komponenten GmbH
+100000-1FFFFF     (base 16)		Dr. Eberl MBE Komponenten GmbH
+				Josef-Beyerle-Strasse 18/1
+				Weil der Stadt  Baden-Württemberg  71263
+				DE
+
+F0-22-1D   (hex)		LK Systems AB
+B00000-BFFFFF     (base 16)		LK Systems AB
+				Lockarpsvägen 5
+				Malmo    21376
+				SE
+
+E0-38-2D   (hex)		4D Photonics GmbH
+A00000-AFFFFF     (base 16)		4D Photonics GmbH
+				Im Torfstich 5
+				Isernhagen    30916
+				DE
+
+E0-38-2D   (hex)		KEPLER COMMUNICATIONS INC.
+D00000-DFFFFF     (base 16)		KEPLER COMMUNICATIONS INC.
+				196 Spadina Avenue, Suite 400
+				Toronto  ON  M5T 2C2
+				CA
+
+E0-38-2D   (hex)		Velvac Incorporated
+900000-9FFFFF     (base 16)		Velvac Incorporated
+				2405 S. Calhoun Road
+				New Berlin  WI  53151-2709
+				US
+
+0C-CC-47   (hex)		Shenzhen Jooan Technology  Co., Ltd
+000000-0FFFFF     (base 16)		Shenzhen Jooan Technology  Co., Ltd
+				Area B, Floor 101-2, Floor 3, Floor 5 and Floor 6 of area B, Building No. 8, Guixiang Community Plaza Road, Guanlan Street, Longhua District, Shenzhen. 
+				Shenzhen  Guangdong  518000
+				CN
+
+0C-CC-47   (hex)		General Industrial Controls Pvt Ltd
+100000-1FFFFF     (base 16)		General Industrial Controls Pvt Ltd
+				T107, M.I.D.C. 
+				Pune  Maharashtra  411026
+				IN
+
+84-B3-86   (hex)		ALPHA Corporation
+600000-6FFFFF     (base 16)		ALPHA Corporation
+				Product Development Department, Housing Hardware Devision
+				Yokohama  Kanagawa  236-0004
+				JP
+
+0C-CC-47   (hex)		Qingdao Geesatcom Technology Co., Ltd
+400000-4FFFFF     (base 16)		Qingdao Geesatcom Technology Co., Ltd
+				Shanghe Service Center , No. 1, Changjiang First Road, Shanghe Demonstration Zone, Jiaozhou City,
+				Qingdao  Shandong  266300
+				CN
+
+0C-CC-47   (hex)		Cyrus Audio LTD
+700000-7FFFFF     (base 16)		Cyrus Audio LTD
+				Ermine Business Park
+				Huntingdon    PE29 6XY
+				GB
+
+84-B3-86   (hex)		Dongguan Amsamotion Automation Technology Co., Ltd
+D00000-DFFFFF     (base 16)		Dongguan Amsamotion Automation Technology Co., Ltd
+				Block A, Zosun Intelligence Creation Zone, No.9 Yizhan Road, Yuanwubian Street Nancheng District
+				Dongguan  Guangdong  523000
+				CN
+
+D0-14-11   (hex)		Video Security, Inc.
+800000-8FFFFF     (base 16)		Video Security, Inc.
+				80, Fengren Rd., Fengshan Dist.,
+				Kaohsiung, Taiwan, R.O.C.  Kaohsiung City  807
+				TW
+
+C4-A5-59   (hex)		METICS
+800000-8FFFFF     (base 16)		METICS
+				Koehorstmaat 7
+				Deurningen  Overijssel  7561 BM
+				NL
+
+84-B3-86   (hex)		Annapurna labs
+200000-2FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+D4-61-37   (hex)		KunPeng Instrument (Dalian)Co.,Ltd.
+B00000-BFFFFF     (base 16)		KunPeng Instrument (Dalian)Co.,Ltd.
+				dishang 10-2 No125 Gaoneng ST
+				Dalian   LiaoNing  116000
+				CN
+
+C4-A5-59   (hex)		Aviron Interactive Inc.
+700000-7FFFFF     (base 16)		Aviron Interactive Inc.
+				251 Bartley Drive. Unit 2 
+				Toronto  Ontario  M4A 2N7
+				CA
+
+C4-A5-59   (hex)		MINOLTA SECURITY
+D00000-DFFFFF     (base 16)		MINOLTA SECURITY
+				29 Park Place
+				Englewood  NJ  07631
+				US
+
+C4-A5-59   (hex)		Private
+400000-4FFFFF     (base 16)		Private
+
+70-5A-6F   (hex)		BMR s.r.o.
+100000-1FFFFF     (base 16)		BMR s.r.o.
+				Lipovka 17
+				Rychnov nad Kneznou    51601
+				CZ
+
+94-C9-B7   (hex)		Titanium union(shenzhen)technology co.,ltd
+900000-9FFFFF     (base 16)		Titanium union(shenzhen)technology co.,ltd
+				35F, Shenzhen Bay VC&PE Bldg, No.25, Haitian 2nd Rd, Binhai  Comm, Yuehai St., Nanshan Dist, Shenzhen
+				shenzhen  guangdong  518000
+				CN
+
+70-5A-6F   (hex)		Wavelab Telecom Equipment (GZ) Ltd.
+300000-3FFFFF     (base 16)		Wavelab Telecom Equipment (GZ) Ltd.
+				Room 2301, Binhe 9, Guangzhou Economic and Technological Development District
+				Guangzhou  Guangdong  510730
+				CN
+
+70-5A-6F   (hex)		Annapurna labs
+A00000-AFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+70-5A-6F   (hex)		CoolR Group Inc
+C00000-CFFFFF     (base 16)		CoolR Group Inc
+				4451 Brookfield Corporate Drive, Suite 111
+				Chantilly  VA  20151
+				US
+
+70-5A-6F   (hex)		Callidus trading, spol. s r.o.
+B00000-BFFFFF     (base 16)		Callidus trading, spol. s r.o.
+				Pašerových 1270/1
+				Ostrava    70900
+				CZ
+
+8C-5D-B2   (hex)		NPP NTT LLC
+000000-0FFFFF     (base 16)		NPP NTT LLC
+				S Kovalevskoy str., b. 20/1
+				St. Petersburg    195256
+				RU
+
+8C-5D-B2   (hex)		Unite Audio
+500000-5FFFFF     (base 16)		Unite Audio
+				15-19 Villas Road
+				Dandenong South  VIC  3175
+				AU
+
+7C-45-F9   (hex)		Hunan Shengyun Photoelectric Technology Co., LTD
+100000-1FFFFF     (base 16)		Hunan Shengyun Photoelectric Technology Co., LTD
+				Room 102, Building E8, Lugu Yuyuan, 27 Wenxuan Road, Changsha Hi-tech Development Zone
+				Changsha  Hunan  410000
+				CN
+
+C0-EA-C3   (hex)		CDSTech
+800000-8FFFFF     (base 16)		CDSTech
+				79, Bongdae-gil
+				Wonju-si,  Gangwon-do,  26463
+				KR
+
+C0-EA-C3   (hex)		Annapurna labs
+700000-7FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+7C-45-F9   (hex)		Scania CV AB
+E00000-EFFFFF     (base 16)		Scania CV AB
+				Lärlingsvägen 3
+				Södertälje    15165
+				SE
+
+88-C9-B3   (hex)		WEG AUTOMATION EUROPE S.R.L.
+A00000-AFFFFF     (base 16)		WEG AUTOMATION EUROPE S.R.L.
+				Via Carducci 24
+				Gerenzano (VA)  Varese  21040
+				IT
+
+5C-6A-EC   (hex)		Suzhou Huaqi Intelligent Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Suzhou Huaqi Intelligent Technology Co., Ltd.
+				No.350 Qingchengshan Road Suzhou National New & Hi-Tech Industrial Development Zone, Suzhou, P.R.CHINA.
+				Suzhou  Jiangsu  215153
+				CN
+
+5C-6A-EC   (hex)		Optiver Services B.V.
+800000-8FFFFF     (base 16)		Optiver Services B.V.
+				Strawinskylaan 3095
+				Amsterdam    1077 ZX
+				NL
+
+D0-93-95   (hex)		T-COM LLC
+D00000-DFFFFF     (base 16)		T-COM LLC
+				Kashirskoye Shosse, 49, Building 90,
+				Apartment IV, Floor 2, Room 2A  Moscow  115409
+				RU
+
+D0-93-95   (hex)		BRICK4U GmbH
+C00000-CFFFFF     (base 16)		BRICK4U GmbH
+				Gerichtsstr. 11
+				Oederan  Sachsen  09569
+				DE
+
+D0-93-95   (hex)		NINGBO SUNNY OPOTECH CO.,LTD
+900000-9FFFFF     (base 16)		NINGBO SUNNY OPOTECH CO.,LTD
+				67-69 Fengle Road, Yangming Street,Yuyao,Zhejiang,
+				NINGBO    315000
+				CN
+
+D0-93-95   (hex)		Automatic Devices
+A00000-AFFFFF     (base 16)		Automatic Devices
+				2121 South 12th Street
+				Allentown  PA  18103
+				US
+
+D0-93-95   (hex)		iSolution Technologies Co.,Ltd.
+700000-7FFFFF     (base 16)		iSolution Technologies Co.,Ltd.
+				5F,Bldg #6, Zhongguan Honghualing Industrial South Park
+				Shenzhen  Guangdong  518055
+				CN
+
+D0-93-95   (hex)		FungHwa i-Link Technology CO., LTD
+500000-5FFFFF     (base 16)		FungHwa i-Link Technology CO., LTD
+				1703B, Tower B, Galaxy World, Yabao RD No.1, Longgang District, Shenzhen, China
+				ShenZhen  GuangDong  518000
+				CN
+
+D0-16-F0   (hex)		wuxi high information Security Technolog
+500000-5FFFFF     (base 16)		wuxi high information Security Technolog
+				9 Wuhu Boulevard,LHSIP2101
+				wuxi  jiangsu  214125
+				CN
+
+D0-16-F0   (hex)		Shenzhen DOOGEE Hengtong Technology CO.,LTD
+800000-8FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO.,LTD
+				B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District
+				Shenzhen  Guangdong  518000
+				CN
+
+E0-3C-1C   (hex)		Hoplite Industries, Inc.
+200000-2FFFFF     (base 16)		Hoplite Industries, Inc.
+				PO Box 1274
+				Bozeman  MT  59771
+				US
+
+D0-16-F0   (hex)		Sofinet LLC
+300000-3FFFFF     (base 16)		Sofinet LLC
+				st. Nauryzbay batyra, house 31
+				Almaty    050000
+				KZ
+
+E0-3C-1C   (hex)		Meferi Technologies Co.,Ltd.
+C00000-CFFFFF     (base 16)		Meferi Technologies Co.,Ltd.
+				4501,45th Floor,Building A,No.530,Middle Tianfu Avenue,High-tech Zone,Chengdu,China
+				Chengdu  Sichuan  610000
+				CN
+
+E0-3C-1C   (hex)		Earable Inc.
+400000-4FFFFF     (base 16)		Earable Inc.
+				2995 Baseline Road, Suite 306 Boulder, CO 80303
+				Boulder  CO  80303
+				US
+
+E0-3C-1C   (hex)		GhinF Digital information technology (hangzhou) Co., Ltd
+600000-6FFFFF     (base 16)		GhinF Digital information technology (hangzhou) Co., Ltd
+				302, Building 1, No. 45, Wanxiang Road, Ningwei Street
+				hangzhou  zhejiang  310014
+				CN
+
+E0-3C-1C   (hex)		Tap Home, s.r.o.
+700000-7FFFFF     (base 16)		Tap Home, s.r.o.
+				Odborarska 21
+				Bratislava    831 02
+				SK
+
+E0-3C-1C   (hex)		Dewetron GmbH
+300000-3FFFFF     (base 16)		Dewetron GmbH
+				Parkring 4
+				Grambach    8074
+				AT
+
+E0-3C-1C   (hex)		Annapurna labs
+E00000-EFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+E0-3C-1C   (hex)		Scangrip
+000000-0FFFFF     (base 16)		Scangrip
+				Rytterhaven 9
+				Svendborg    5700
+				DK
+
+54-08-3B   (hex)		Dhyan Networks and Technologies, Inc
+300000-3FFFFF     (base 16)		Dhyan Networks and Technologies, Inc
+				160 Stanford Ave
+				Fremont  CA  94539-6092
+				US
+
+54-08-3B   (hex)		Toray Medical Company Limited
+400000-4FFFFF     (base 16)		Toray Medical Company Limited
+				405-65,Ashitaka
+				Numazu  Shizuoka  410-0001
+				JP
+
+54-08-3B   (hex)		shenzhen HAIOT technology co.,ltd
+500000-5FFFFF     (base 16)		shenzhen HAIOT technology co.,ltd
+				No 407 Building E zhongshan load, nanshan district,shenzhen city 
+				shenzhen  guangdong  518057
+				CN
+
+8C-14-7D   (hex)		Schneider Electric - Triconex
+100000-1FFFFF     (base 16)		Schneider Electric - Triconex
+				26561 Rancho Pkwy S
+				LAKE FOREST  CA  92630
+				US
+
+70-06-92   (hex)		Beijing Fortech Microsystems., Co., Ltd.
+100000-1FFFFF     (base 16)		Beijing Fortech Microsystems., Co., Ltd.
+				Suite A3 502, Zhongguancun No. 1, No. 81 Beiqing Road, Haidian District
+				Beijing    100084
+				CN
+
+4C-4B-F9   (hex)		Shandong Linkotech Electronic Co., Ltd.
+600000-6FFFFF     (base 16)		Shandong Linkotech Electronic Co., Ltd.
+				22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone
+				Jinan  Shandong  250101
+				CN
+
+4C-4B-F9   (hex)		Power Active Co., Ltd
+300000-3FFFFF     (base 16)		Power Active Co., Ltd
+				4F, No.23, Wugong 6th Rd., Wugu Dist.
+				New Taipei City    248
+				TW
+
+4C-4B-F9   (hex)		Multitek Elektronik Sanayi ve Ticaret A.S.
+000000-0FFFFF     (base 16)		Multitek Elektronik Sanayi ve Ticaret A.S.
+				Meclis Mah. Ataturk Cad. No:47, sancaktepe
+				istanbul    34785
+				TR
+
+20-85-93   (hex)		Mid Continent Controls, Inc.
+200000-2FFFFF     (base 16)		Mid Continent Controls, Inc.
+				901 North River Street
+				Derby  KS  67037
+				US
+
+34-04-9E   (hex)		Connected IO
+100000-1FFFFF     (base 16)		Connected IO
+				573 University Ave
+				Los Gatos  CA  95032
+				US
+
+24-15-10   (hex)		Topgolf Sweden AB
+900000-9FFFFF     (base 16)		Topgolf Sweden AB
+				Svärdvägen 11
+				Danderyd  Stockholm  182 33
+				SE
+
+24-15-10   (hex)		SuZhou A-rack Information Technology Co.,Ltd
+700000-7FFFFF     (base 16)		SuZhou A-rack Information Technology Co.,Ltd
+				No.10 Xinting Road,Suzhou New District
+				Suzhou  Jiangsu  215000
+				CN
+
+20-85-93   (hex)		AASSET SECURITY
+800000-8FFFFF     (base 16)		AASSET SECURITY
+				153 RUE MICHEL CARRE
+				ARGENTEUIL    95100
+				FR
+
+20-85-93   (hex)		Wave-In Communication
+500000-5FFFFF     (base 16)		Wave-In Communication
+				8F, No.322, Sec. 1, Neihu Rd., Neihu Dist.
+				Taipei City    114
+				TW
+
+BC-66-41   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+98-06-37   (hex)		Angora Networks
+A00000-AFFFFF     (base 16)		Angora Networks
+				Alacaatli Mah. Park Cad 47/31, Cayyolu
+				Ankara    06810
+				TR
+
+64-FB-81   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+58-FC-DB   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+74-F8-DB   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+7C-70-BC   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+D0-76-50   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+44-D5-F2   (hex)		Shenzhen Hebang Electronic Co., Ltd
+200000-2FFFFF     (base 16)		Shenzhen Hebang Electronic Co., Ltd
+				2nd Floor West, Bldg B, Kelunte Low Carbon Industry Park, Huarong Road, Dalang, Longhua District
+				Shenzhen    518000
+				CN
+
+98-06-37   (hex)		Chengdu Shuwei Communication Technology Co.,Ltd
+400000-4FFFFF     (base 16)		Chengdu Shuwei Communication Technology Co.,Ltd
+				The Second floor, G4 Building, G zone, Tianfu Software Park, 1800 Yizhou Avenue, High Tech Dsitrict
+				Chengdu  Sichuan  610041
+				CN
+
+D0-5F-64   (hex)		Nanjing Huamai Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Nanjing Huamai Technology Co.,Ltd
+				No.11 Runfa Road, Dongshan Industry Gathering Zone, Jiangning District
+				Nanjing  Jiangsu  210000
+				CN
+
+44-D5-F2   (hex)		Valeo Interior Controls (Shenzhen) Co.,Ltd
+B00000-BFFFFF     (base 16)		Valeo Interior Controls (Shenzhen) Co.,Ltd
+				North Junyi Ind. Park, Huaide Vil., Fuyong Town, Baoan Dist.
+				Shenzhen  Guangzhong  518103
+				CN
+
+44-D5-F2   (hex)		tiga.eleven GmbH
+500000-5FFFFF     (base 16)		tiga.eleven GmbH
+				Stallburggasse 2/37
+				Viennna    1010
+				AT
+
+D0-5F-64   (hex)		PartnerNET LTD
+A00000-AFFFFF     (base 16)		PartnerNET LTD
+				Salaminos 5
+				Nicossia  Strovolos  2044
+				CY
+
+FC-A4-7A   (hex)		Hefei Feier Smart Science&Technology Co. Ltd
+E00000-EFFFFF     (base 16)		Hefei Feier Smart Science&Technology Co. Ltd
+				6 / F 1#ZhongShi Building,CSV, High-tech Zone
+				HEFEI    230000
+				CN
+
+FC-A4-7A   (hex)		HOOC AG
+400000-4FFFFF     (base 16)		HOOC AG
+				Torweg 8
+				Visp  VS  3930
+				CH
+
+2C-16-BD   (hex)		Beijing Zhijian Link Technology Co., Ltd.
+500000-5FFFFF     (base 16)		Beijing Zhijian Link Technology Co., Ltd.
+				C3-1358, 3rd floor, No. 18 North Taipingzhuang Road, Haidian District
+				Beijing  Beijing  100088
+				CN
+
+FC-A4-7A   (hex)		Syfer
+500000-5FFFFF     (base 16)		Syfer
+				227 SANDY SPRINGS PL SUITE D-454
+				Atlanta  GA  30328-5918
+				US
+
+FC-A4-7A   (hex)		Ant Financial（Hang Zhou）Network Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Ant Financial（Hang Zhou）Network Technology Co.,Ltd.
+				801-10,8th Floor B Section,556Xixi Road,XihuDistrict,
+				HangzhouCity  ZhejiangProvince  310007
+				CN
+
+2C-16-BD   (hex)		Molex Incorporated 
+E00000-EFFFFF     (base 16)		Molex Incorporated 
+				46360 Fremont Blvd
+				Fremont  CA  94538
+				US
+
+D0-5F-64   (hex)		wallbe GmbH
+400000-4FFFFF     (base 16)		wallbe GmbH
+				Paderborner Straße 76
+				Schlangen   NRW  33189
+				DE
+
+D0-5F-64   (hex)		Decathlon SA
+000000-0FFFFF     (base 16)		Decathlon SA
+				4 Boulevard de Mons
+				Villeneuve d'Ascq  Haut de France  59650
+				FR
+
+B4-A2-EB   (hex)		 DCI International, LLC.
+100000-1FFFFF     (base 16)		 DCI International, LLC.
+				305 N Springbrook Road
+				Newberg  OR  97132
+				US
+
+B4-A2-EB   (hex)		ShenZhen Lark Acoustics Co., Ltd. 
+600000-6FFFFF     (base 16)		ShenZhen Lark Acoustics Co., Ltd. 
+				Room 2406, Northwestern Polytechnical University, Gaoxin South Nine Road,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+2C-16-BD   (hex)		Hangzhou Yanzhi Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Hangzhou Yanzhi Technology Co.,Ltd.
+				Room 406, 4th floor, building 6,316 jianghong south road,Binjiang Dist
+				Hangzhou  Zhejiang  310030
+				CN
+
+B4-A2-EB   (hex)		Dongguan Finslink Communication Technology Co.,Ltd.
+E00000-EFFFFF     (base 16)		Dongguan Finslink Communication Technology Co.,Ltd.
+				Room 202,2nd floor,G3 Building, University Innovation City,Songshan Lake High-tech Industrial Development Zone
+				Dongguan  Guangdong  523808
+				CN
+
+8C-59-3C   (hex)		Dantherm Cooling Inc.
+C00000-CFFFFF     (base 16)		Dantherm Cooling Inc.
+				110 Corporate Dr., Suite K
+				Spartanburg  SC  29303
+				US
+
+B4-A2-EB   (hex)		Canaan Creative Co.,Ltd.
+300000-3FFFFF     (base 16)		Canaan Creative Co.,Ltd.
+				ZPark 27# QianFang Science Building C,  Haidian District, Beijing, China.
+				Beijing  Beijing  100094
+				CN
+
+2C-16-BD   (hex)		CLOUDWALK TECHNOLOGY CO.,LTD
+600000-6FFFFF     (base 16)		CLOUDWALK TECHNOLOGY CO.,LTD
+				Five Floors of Block 106, West Jinkai Avenue, Yubei District
+				Chongqing  Chongqing  401120
+				CN
+
+D0-C8-57   (hex)		Imin Technology Pte Ltd
+400000-4FFFFF     (base 16)		Imin Technology Pte Ltd
+				77 Sciene park Drive #03-10 Cintech III 
+				Singapore  Singapore  118256
+				SG
+
+74-5B-C5   (hex)		Beijing Inspiry Technology Co., Ltd. 
+100000-1FFFFF     (base 16)		Beijing Inspiry Technology Co., Ltd. 
+				Building No. 5, East Zone, No. 10, Xibeiwang East Road, Haidian District
+				Beijing  Beijing  100092
+				CN
+
+D0-C8-57   (hex)		shenzhen cnsun
+A00000-AFFFFF     (base 16)		shenzhen cnsun
+				5 Floor, 2 Building,Tongfuyu Industrial City
+				shenzhen  guangdong  518000
+				CN
+
+D0-C8-57   (hex)		Shenzhen xiaosha  Intelligence  Technology Co. Ltd
+900000-9FFFFF     (base 16)		Shenzhen xiaosha  Intelligence  Technology Co. Ltd
+				 Poly Building, 2702 Nanhai Avenue, Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+D0-C8-57   (hex)		Innovative Industrial(HK)Co., Limited
+600000-6FFFFF     (base 16)		Innovative Industrial(HK)Co., Limited
+				OFFICE 3A,12/F,KAISER CENTRE,NO.18CENTRE STREET
+				SAI YING PUN    999077
+				HK
+
+30-0A-60   (hex)		Beijing Ruiteng Zhongtian TECH Ltd.,Co
+100000-1FFFFF     (base 16)		Beijing Ruiteng Zhongtian TECH Ltd.,Co
+				Blk 6,Rm 602,Noble CenterⅡ，No.1 Automotive Museum East Lane,South Fourth Ring Road, Fengtai District
+				Beijing  Beijing  100070
+				CN
+
+BC-97-40   (hex)		Lattec I/S
+200000-2FFFFF     (base 16)		Lattec I/S
+				Blytækkervej 10
+				Hillerød    3400
+				DK
+
+A4-3B-FA   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+D0-C8-57   (hex)		FORGAMERS INC.
+200000-2FFFFF     (base 16)		FORGAMERS INC.
+				6F., NO.51, DONGXING RD., XINYI DIST., TAIPEI CITY 110-70, TAIWAN
+				Taipei    110
+				TW
+
+60-95-CE   (hex)		Cadmo Soluciones SAC
+700000-7FFFFF     (base 16)		Cadmo Soluciones SAC
+				Av. Angamos Este 2495 Dpt. 301, San Borja
+				Lima  Lima  15036
+				PE
+
+60-95-CE   (hex)		GovComm
+D00000-DFFFFF     (base 16)		GovComm
+				3830 SW 30 Ave
+				Fort Lauderdale  FL  33312
+				US
+
+60-95-CE   (hex)		Ponoor Experiments Inc.
+100000-1FFFFF     (base 16)		Ponoor Experiments Inc.
+				Higashi-shinagawa 1-33-10, Terrada Art Complex 216
+				Shinagawa-ku  Tokyo  1400002
+				JP
+
+BC-97-40   (hex)		Alpha ESS Co., Ltd.
+000000-0FFFFF     (base 16)		Alpha ESS Co., Ltd.
+				JiuHua Road 888, Nantong High-Tech Industrial Development Zone,
+				Nantong  Jiangsu  226300
+				CN
+
+60-95-CE   (hex)		(UN)MANNED
+A00000-AFFFFF     (base 16)		(UN)MANNED
+				Baron Ruzettelaan 3
+				Brugge    8310
+				BE
+
+60-95-CE   (hex)		Jlztlink Industry(ShenZhen)Co.,Ltd.
+900000-9FFFFF     (base 16)		Jlztlink Industry(ShenZhen)Co.,Ltd.
+				D-502#,Tongan logistics center,Sanwei hangkong 30#,Xiang street,Baoan,
+				Shenzhen  Guangdong  518000
+				CN
+
+60-95-CE   (hex)		Robot S.A.
+300000-3FFFFF     (base 16)		Robot S.A.
+				Gremi de Cirurgians i Barbers 22
+				Palma de Mallorca  SPAIN / Balearic Islands  07009
+				ES
+
+BC-97-40   (hex)		Rollock Oy
+D00000-DFFFFF     (base 16)		Rollock Oy
+				Viestitie 2 B
+				Kajaani    87700
+				FI
+
+1C-82-59   (hex)		Shandong Luneng Intelligence Technology CO., Ltd
+000000-0FFFFF     (base 16)		Shandong Luneng Intelligence Technology CO., Ltd
+				Shandong Jinan Hightech zone Yinhe building block B, 2008 Xinluo Street
+				Jinan  Shandong  250100
+				CN
+
+1C-82-59   (hex)		Jump Trading
+700000-7FFFFF     (base 16)		Jump Trading
+				1 London Wall
+				London     EC2Y 5EA
+				GB
+
+1C-82-59   (hex)		winsun AG
+400000-4FFFFF     (base 16)		winsun AG
+				Beeschi Mattenstrasse 2
+				Steg  Wallis  3940
+				CH
+
+F8-1D-78   (hex)		TELEOFIS
+800000-8FFFFF     (base 16)		TELEOFIS
+				1K3, Electrolitny proezd
+				Moscow    115230
+				RU
+
+1C-82-59   (hex)		Applied Concepts, Inc.
+D00000-DFFFFF     (base 16)		Applied Concepts, Inc.
+				855 E Collins Blvd
+				Richardson  TX  75081
+				US
+
+84-8B-CD   (hex)		CHONGQING HUAYI KANGDAO TECHNOLOGY CO.,LTD.
+B00000-BFFFFF     (base 16)		CHONGQING HUAYI KANGDAO TECHNOLOGY CO.,LTD.
+				14th Floor, Unicom Building, 192 Yuzhou Road, Yuzhong District
+				CHONGQING    410010
+				CN
+
+84-8B-CD   (hex)		NORALSY
+900000-9FFFFF     (base 16)		NORALSY
+				16 rue Lavoisier
+				Chennevieres sur Marne  Ile de France  94430
+				FR
+
+1C-82-59   (hex)		Evondos Oy
+C00000-CFFFFF     (base 16)		Evondos Oy
+				Salorankatu 5-7
+				Salo    24240
+				FI
+
+1C-82-59   (hex)		Fagus-GreCon Greten GmbH & Co. KG
+500000-5FFFFF     (base 16)		Fagus-GreCon Greten GmbH & Co. KG
+				Hannoversche Straße 58
+				Alfeld    31061
+				DE
+
+1C-82-59   (hex)		C&A Marketing, INC.
+300000-3FFFFF     (base 16)		C&A Marketing, INC.
+				114 Tived Lane East
+				Edison   NJ  08837
+				US
+
+B0-FD-0B   (hex)		MartinLogan, Ltd.
+B00000-BFFFFF     (base 16)		MartinLogan, Ltd.
+				2101 Delware St
+				Lawrence  KS  66046
+				US
+
+B0-FD-0B   (hex)		DNESO TEN Ltd.
+600000-6FFFFF     (base 16)		DNESO TEN Ltd.
+				1-2-28,gosho-doori,hyougo-ku
+				kobe  hyougo  652-8510
+				JP
+
+84-8B-CD   (hex)		Shenzhen LTIME In-Vehicle Entertainment System Company Limited
+100000-1FFFFF     (base 16)		Shenzhen LTIME In-Vehicle Entertainment System Company Limited
+				4/F, Building 1, Nangang 1st Industrial Park No. 1029, Songbai Road, Xili, Nanshan District
+				SHENZHEN  GUANGDONG  518055
+				CN
+
+B0-FD-0B   (hex)		Haltian Products Oy
+C00000-CFFFFF     (base 16)		Haltian Products Oy
+				Yrttipellontie 1D
+				Oulu    90230
+				FI
+
+E4-1E-0A   (hex)		IDvaco Private Limited
+200000-2FFFFF     (base 16)		IDvaco Private Limited
+				Aljunied road, 627A,06-02
+				singapore  singapore  389842
+				SG
+
+E4-1E-0A   (hex)		Connected Cars A/S
+100000-1FFFFF     (base 16)		Connected Cars A/S
+				Park Allé 355
+				Brøndby    2605
+				DK
+
+E4-1E-0A   (hex)		B METERS S.R.L.
+900000-9FFFFF     (base 16)		B METERS S.R.L.
+				VIA FRIULI 3
+				GONARS  UDINE  33050
+				IT
+
+E4-1E-0A   (hex)		Safety Vision, LLC
+B00000-BFFFFF     (base 16)		Safety Vision, LLC
+				6100 West Sam Houston Parkway North
+				Houston  TX  77041-5113
+				US
+
+E4-1E-0A   (hex)		XPR Group
+400000-4FFFFF     (base 16)		XPR Group
+				Drève Richelle 161 - WOP G
+				Waterloo    1410
+				BE
+
+E4-1E-0A   (hex)		SFC Energy AG
+600000-6FFFFF     (base 16)		SFC Energy AG
+				Eugen-Saenger-Ring 7
+				Brunnthal    85649
+				DE
+
+C8-63-14   (hex)		Shenzhen Lihewei Electronics Co.,Ltd.Hunan Branch
+B00000-BFFFFF     (base 16)		Shenzhen Lihewei Electronics Co.,Ltd.Hunan Branch
+				Room 501,Room 502,Building 2,Xinggong Technology Park,No.100 Luyun Road, High-tech Development Zone
+				Changsha  Hunan  410000
+				CN
+
+34-E1-D1   (hex)		Hubitat Inc.
+800000-8FFFFF     (base 16)		Hubitat Inc.
+				20343 N Hayden Rd, Suite 105-280
+				Scottsdale  AZ  85255
+				US
+
+34-E1-D1   (hex)		APG Cash Drawer, LLC
+B00000-BFFFFF     (base 16)		APG Cash Drawer, LLC
+				5250 Industrial Blvd NE
+				Minneapolis  MN  55421
+				US
+
+34-E1-D1   (hex)		OrCam Technologies
+A00000-AFFFFF     (base 16)		OrCam Technologies
+				Kiryat Hamada 3
+				JERUSALEM    97775603
+				IL
+
+FC-D2-B6   (hex)		Cirque Audio Technology Co.,Ltd
+600000-6FFFFF     (base 16)		Cirque Audio Technology Co.,Ltd
+				No.2 Road BeiYiHeng,HuangJiaBao Industrial Park,ShiPai Town,DongGuan City,GuangDong,China
+				DongGuan  GuangDong  523000
+				CN
+
+FC-D2-B6   (hex)		LINK (FAR-EAST) CORPORATION
+100000-1FFFFF     (base 16)		LINK (FAR-EAST) CORPORATION
+				No.192, Lian-Cheng Rd., Chung-Ho, Taipei,Taiwan 23553
+				Taipei  Taiwan  23553
+				TW
+
+FC-D2-B6   (hex)		SHEN ZHEN XIN HAO YUAN PRECISION TECHNOLOGY CO.,L TD
+400000-4FFFFF     (base 16)		SHEN ZHEN XIN HAO YUAN PRECISION TECHNOLOGY CO.,L TD
+				1,2,3 Building,XinHaoYuan Industrial Area,HeYi Community,Shajing Street,BaoAn District.Shenzhen
+				shenzhen  guangdongsheng  518000
+				CN
+
+FC-D2-B6   (hex)		Teamly Digital
+700000-7FFFFF     (base 16)		Teamly Digital
+				11-13 Avenue de Friedland
+				Paris  Ile de France  75008
+				FR
+
+74-5B-C5   (hex)		Qingdao Wintec System Co., Ltd
+E00000-EFFFFF     (base 16)		Qingdao Wintec System Co., Ltd
+				Wintec Park, Xinye Road, High-tech Zone, Qingdao, China 266114
+				QING DAO  shan dong  of  China  6805
+				CN
+
+74-5B-C5   (hex)		SIGLENT TECHNOLOGIES CO., LTD.
+200000-2FFFFF     (base 16)		SIGLENT TECHNOLOGIES CO., LTD.
+				Blog No.4 & No.5, Antongda Industrial Zone, 3rd Liuxian Road, Bao’an District, Shenzhen, 518101, China.
+				Shenzhen  Guangdong  518101
+				CN
+
+74-5B-C5   (hex)		Yekani Manufacturing PTY Ltd
+600000-6FFFFF     (base 16)		Yekani Manufacturing PTY Ltd
+				Fourways Golf Park,Selbourne Building,Roos St
+				Witkoppen  Gauteng  5214
+				ZA
+
+74-5B-C5   (hex)		SHENZHEN ATX TECHNOLOGY CO.,LTD 
+700000-7FFFFF     (base 16)		SHENZHEN ATX TECHNOLOGY CO.,LTD 
+				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District
+				Shenzhen  GUANGDONG  518000
+				CN
+
+E4-4C-C7   (hex)		Ottomate International Pvt. Ltd.
+900000-9FFFFF     (base 16)		Ottomate International Pvt. Ltd.
+				Awfis Building, 5th Floor, Plot # 7, Sector-44
+				Gurgaon  Haryana  122003
+				IN
+
+E4-4C-C7   (hex)		ACS-Solutions GmbH
+100000-1FFFFF     (base 16)		ACS-Solutions GmbH
+				Science Park 2
+				Saarbrücken    66123
+				DE
+
+E4-4C-C7   (hex)		Telo Systems Limitd
+D00000-DFFFFF     (base 16)		Telo Systems Limitd
+				4/F, Chuangye Building, Seven-Star Park, Yu'an 2nd Road
+				ShenZhen  GuangDong  518000
+				CN
+
+E4-4C-C7   (hex)		SmallHD
+B00000-BFFFFF     (base 16)		SmallHD
+				301 Gregson Dr
+				Cary  NC  27511
+				US
+
+74-5B-C5   (hex)		SpringCard
+500000-5FFFFF     (base 16)		SpringCard
+				2 voie La Cardon, Parc Gutenberg
+				PALAISEAU  IDF  91120
+				FR
+
+74-5B-C5   (hex)		IRS Systementwicklung GmbH
+000000-0FFFFF     (base 16)		IRS Systementwicklung GmbH
+				Pfaffenthanner Weg, 5
+				Brennberg    93179
+				DE
+
+28-FD-80   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+E0-5A-9F   (hex)		ShenZhen Mornsun Smartlinker Limited Co., LTD
+C00000-CFFFFF     (base 16)		ShenZhen Mornsun Smartlinker Limited Co., LTD
+				South 2nd Flr, 23 Bldg, Yuanxi Industrial Zone, Kefa Rd, Nanshan Keji Yuan
+				ShenZhen  GuangDong  518058
+				CN
+
+4C-BC-98   (hex)		Elink Technology (Shenzhen) Co., Limited
+D00000-DFFFFF     (base 16)		Elink Technology (Shenzhen) Co., Limited
+				C-323,Baoan,Xinyidai Info.Tech.Industrial Park, No.139 Chuangye Er Rd.,Baoan District
+				Shenzhen  Guangdong  518101
+				CN
+
+4C-BC-98   (hex)		Charge-Amps AB
+000000-0FFFFF     (base 16)		Charge-Amps AB
+				GUSTAV III:S BOULEVARD 42, 8TR
+				SOLNA    16973
+				SE
+
+38-B1-9E   (hex)		ShenZhen ShuaiXian Electronic Equipment Co.Ltd
+E00000-EFFFFF     (base 16)		ShenZhen ShuaiXian Electronic Equipment Co.Ltd
+				No. 10, Lane 3, Longxing Rd, Dakang Village,HengGang Town
+				ShenZhen  Guangdong  518115
+				CN
+
+D8-86-0B   (hex)		Auvidea GmbH
+300000-3FFFFF     (base 16)		Auvidea GmbH
+				Kellerberg 3
+				Denklingen    86920
+				DE
+
+28-F5-37   (hex)		1MORE
+800000-8FFFFF     (base 16)		1MORE
+				TianliaoBuilding F14
+				New Materials Industrial Park,Xueyuan Blvd  Shenzhen, Nanshan District  518005
+				CN
+
+D8-86-0B   (hex)		 YUSAN INDUSTRIES LIMITED  
+C00000-CFFFFF     (base 16)		 YUSAN INDUSTRIES LIMITED  
+				UNIT 8-9, 8/F., HONOUR INDUSTRIAL CENTRE, 6 SUN YIP STREET, CHAI WAN
+				HongKong    999077
+				HK
+
+D8-86-0B   (hex)		Library Ideas
+B00000-BFFFFF     (base 16)		Library Ideas
+				PO Box 9
+				Vienna  VA  22183
+				US
+
+D8-86-0B   (hex)		ComNav Technology Ltd.
+D00000-DFFFFF     (base 16)		ComNav Technology Ltd.
+				Buliding 2,No. 618  Chengliu Middle  Road
+				JiaDing District  Shanghai  201801
+				CN
+
+38-B1-9E   (hex)		Star Electronics GmbH & CoKG
+500000-5FFFFF     (base 16)		Star Electronics GmbH & CoKG
+				Jahnstraße, 86
+				Göppingen    73037
+				DE
+
+38-B1-9E   (hex)		HDANYWHERE
+200000-2FFFFF     (base 16)		HDANYWHERE
+				Unit 23 Link Business Centre
+				Malvern  Worcs  WR14 1UQ
+				GB
+
+38-B1-9E   (hex)		Aeroespacial Guosheng Technology Co., Ltd
+A00000-AFFFFF     (base 16)		Aeroespacial Guosheng Technology Co., Ltd
+				501 Edificio Gaode, No. 10 Huayuan East Road,
+				Haiden DIstrict  Beijing  100191
+				CN
+
+D8-86-0B   (hex)		Shenzhen Yidong Technology Co.,Ltd
+E00000-EFFFFF     (base 16)		Shenzhen Yidong Technology Co.,Ltd
+				13th Floor,Jia'anda Building, No.110 Huafan Road,Tongsheng Community, Dalang Street,Longhua District
+				Shenzhen  Guangdong  518000
+				CN
+
+D8-86-0B   (hex)		VRINDA NANO TECHNOLOGIES PVT LTD
+800000-8FFFFF     (base 16)		VRINDA NANO TECHNOLOGIES PVT LTD
+				PLOT NO.283, SECTOR 7, IMT MANESAR, GURGAON 
+				INDIA  HARYANA  122050
+				IN
+
+38-B1-9E   (hex)		Triple Jump Medical
+000000-0FFFFF     (base 16)		Triple Jump Medical
+				5 HaCarmel St.
+				Yokneam    2069203
+				IL
+
+38-B1-9E   (hex)		BoCo Inc.
+800000-8FFFFF     (base 16)		BoCo Inc.
+				Isshin Bldg 6F,Yaesu 2-11-7
+				Chuo-ku, Tokyo    104-0028
+				JP
+
+38-B1-9E   (hex)		Gesellschaft industrieller Technologien 
+C00000-CFFFFF     (base 16)		Gesellschaft industrieller Technologien 
+				Hauptstraße 10
+				Großbeeren    14979 
+				DE
+
+CC-D3-9D   (hex)		Q-Branch Labs, Inc.
+B00000-BFFFFF     (base 16)		Q-Branch Labs, Inc.
+				427 N. Tatnall St., Suite #82712
+				Wilmington  DE  19801
+				US
+
+CC-D3-9D   (hex)		Shenzhen Chenggu Technology Co., Ltd
+400000-4FFFFF     (base 16)		Shenzhen Chenggu Technology Co., Ltd
+				Longgang District Jihua street Zhonghaixin Industrial Innovation City 19A 3F
+				Shenzhen  Guagndong  518112
+				CN
+
+CC-D3-9D   (hex)		Krontech
+600000-6FFFFF     (base 16)		Krontech
+				I.T.U ARI 3 Teknokent Kron Telekomunikasyon, Maslak
+				Istanbul    34467
+				TR
+
+CC-D3-9D   (hex)		Bejing Nexsec Inc.
+900000-9FFFFF     (base 16)		Bejing Nexsec Inc.
+				Floor 5, Room 5001,Buliding No.4,Fengxian Middle Road No.7
+				(Beike Industrial Park),Haidian District,  Beijing  100094
+				CN
+
+CC-D3-9D   (hex)		Obelisk Inc.
+800000-8FFFFF     (base 16)		Obelisk Inc.
+				67 Batterymarch Street, Floor 4
+				Boston    02110
+				US
+
+D4-25-CC   (hex)		TAKUMI JAPAN LTD
+900000-9FFFFF     (base 16)		TAKUMI JAPAN LTD
+				3-9-3 Uchiyama building 7F Nishishinbashi
+				Minato-ku Tokyo  Tokyo  1050003
+				JP
+
+9C-69-B4   (hex)		NINGBO SHEN LINK COMMUNICATION TECHNOLOGY CO., LTD
+E00000-EFFFFF     (base 16)		NINGBO SHEN LINK COMMUNICATION TECHNOLOGY CO., LTD
+				NO.87,FENGMINGROAD,LIZHOUSTREET, YUYAO, ZHEJIANG
+				NINGBO  ZHEJIANG  315400
+				CN
+
+4C-91-7A   (hex)		Openeye
+600000-6FFFFF     (base 16)		Openeye
+				23221 East Knox Avenue
+				Liberty Lake  WA  99019
+				US
+
+4C-91-7A   (hex)		Smart Access
+300000-3FFFFF     (base 16)		Smart Access
+				Nauchnuy Proezd 10
+				Moscow    117246
+				RU
+
+9C-69-B4   (hex)		Suzhou Fitcan Technology Co.,LTD
+000000-0FFFFF     (base 16)		Suzhou Fitcan Technology Co.,LTD
+				Kechuang Road
+				Suzhou City  Jiangsu Province  215163
+				CN
+
+9C-69-B4   (hex)		Guangdong Hanwei intergration Co.,Ltd
+C00000-CFFFFF     (base 16)		Guangdong Hanwei intergration Co.,Ltd
+				Room 404,7# Hongtai Zhihui Gu, No.23 Sicheng Road
+				Guangzhou  Guangdong  510663
+				CN
+
+9C-69-B4   (hex)		Shenzhen jiahua zhongli technology co.LTD
+600000-6FFFFF     (base 16)		Shenzhen jiahua zhongli technology co.LTD
+				3/F,building B,JINHU building,industrial road,longhua new district
+				Shenzhen  Guangdong  518109
+				CN
+
+6C-DF-FB   (hex)		Nanjing Buruike Electronics Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		Nanjing Buruike Electronics Technology Co., Ltd.
+				Jiangning District Moling Street, SuYuan Avenue No.117 Building 2, Floor 5 Room 541
+				Nanjing  Jiangsu  210000
+				CN
+
+4C-91-7A   (hex)		Alibaba (Beijing) Software Service Inc.
+C00000-CFFFFF     (base 16)		Alibaba (Beijing) Software Service Inc.
+				No. 301, 3 floor, 9 building, four district, Wangjing East Garden, Chaoyang District,
+				Beijing  Beijing  100102
+				CN
+
+4C-91-7A   (hex)		mtekvision
+500000-5FFFFF     (base 16)		mtekvision
+				6F, C's Tower, 58, Pangyo-ro 255veon-gil, Bundang-gu
+				seongnam-si  Gyeonggi-do  13486
+				KR
+
+7C-BC-84   (hex)		Beijing Topnew Group Co., Ltd
+E00000-EFFFFF     (base 16)		Beijing Topnew Group Co., Ltd
+				No.9, A, Jin Tai Li, ChaoYang District 
+				Beijing    100026
+				CN
+
+7C-BC-84   (hex)		Shenzhen Kuang-chi  Space Technology Co., Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Kuang-chi  Space Technology Co., Ltd.
+				No. 1 building, No. 2 Reservoir Road, Nan Keng community , Bantian street, Longgang District, Shenzhen
+				shenzhen  Guangdong  518000
+				CN
+
+6C-DF-FB   (hex)		Lineable Inc
+400000-4FFFFF     (base 16)		Lineable Inc
+				5, Ttukseom-ro 1na-gil, Seongdong-gu, Seoul, Republic of Korea, Heyground, G505
+				Seoul  Seoul  04779
+				KR
+
+98-F9-C7   (hex)		NC-LINK Technology Co., Ltd.
+E00000-EFFFFF     (base 16)		NC-LINK Technology Co., Ltd.
+				Block A2 Jinhai Business Mansion, Jinhai Road, Xixiang town
+				Shenzhen  Guangdong  518101
+				CN
+
+7C-BC-84   (hex)		Shanghai Yitu Technology Co. Ltd
+300000-3FFFFF     (base 16)		Shanghai Yitu Technology Co. Ltd
+				23/F, Tower 1, No.523 Loushanguan Road, Changning District
+				Shanghai    200051
+				CN
+
+0C-FE-5D   (hex)		Antailiye Technology Co.,Ltd
+600000-6FFFFF     (base 16)		Antailiye Technology Co.,Ltd
+				7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen
+				SHEN ZHEN  GUANGDONG  518000
+				CN
+
+0C-FE-5D   (hex)		Yantai Dongfang Wisdom Electic Co.,Ltd.
+400000-4FFFFF     (base 16)		Yantai Dongfang Wisdom Electic Co.,Ltd.
+				6 Jindu Road
+				Yantai  Shandong  264003
+				CN
+
+98-F9-C7   (hex)		Pozyx NV
+200000-2FFFFF     (base 16)		Pozyx NV
+				Vrijdagmarkt 10/201
+				Gent  Oost-Vlaanderen  9000
+				BE
+
+0C-FE-5D   (hex)		SELECTRIC Nachrichten-Systeme GmbH
+500000-5FFFFF     (base 16)		SELECTRIC Nachrichten-Systeme GmbH
+				Haferlandweg 18
+				Münster    48155
+				DE
+
+0C-FE-5D   (hex)		Vermes Microdispensing GmbH
+700000-7FFFFF     (base 16)		Vermes Microdispensing GmbH
+				Palnkamer Strasse 18
+				Otterfing  Bayern  83624
+				DE
+
+10-07-23   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+6C-5C-3D   (hex)		IskraUralTEL
+900000-9FFFFF     (base 16)		IskraUralTEL
+				Komvuzovkaya
+				Ekaterinburg    620137
+				RU
+
+6C-5C-3D   (hex)		HTI Co., LTD.
+400000-4FFFFF     (base 16)		HTI Co., LTD.
+				Rm741, Kyungin Ctr., 20, Baekbeom-ro 577, Bupyung-Gu
+				Incheon    21449
+				KR
+
+A8-3F-A1   (hex)		Plejd AB
+700000-7FFFFF     (base 16)		Plejd AB
+				Göteborgsvägen 52
+				Mölndal    431 37
+				SE
+
+A8-3F-A1   (hex)		Guangzhou Navigateworx Technologies Co., Limited
+E00000-EFFFFF     (base 16)		Guangzhou Navigateworx Technologies Co., Limited
+				Room 2320, Qianjin Commercial Building, Dongpu Town
+				Guangzhou  Guangdong  510660
+				CN
+
+A8-3F-A1   (hex)		Shanghai East China Computer Co., Ltd
+A00000-AFFFFF     (base 16)		Shanghai East China Computer Co., Ltd
+				27/F Tower B, No.391 Guiping Rd
+				Shanghai  Shanghai  200233
+				CN
+
+A0-3E-6B   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+A8-3F-A1   (hex)		Laonz Co.,Ltd
+C00000-CFFFFF     (base 16)		Laonz Co.,Ltd
+				15-3,Eonnam-Gil,Seocho-gu
+				Seoul    06779
+				KR
+
+3C-6A-2C   (hex)		figur8, Inc.
+300000-3FFFFF     (base 16)		figur8, Inc.
+				2 Park Plaza, Suite 605
+				BOSTON  MA  02116
+				US
+
+30-0A-60   (hex)		Realtime biometrics India pvt ltd
+600000-6FFFFF     (base 16)		Realtime biometrics India pvt ltd
+				C-68,1st Floor ganesh nagar pandav nagar complex
+				delhi  Delhi  110092
+				IN
+
+A4-ED-43   (hex)		Shanghai  Facom  Electronics Technology  Co, ltd.
+600000-6FFFFF     (base 16)		Shanghai  Facom  Electronics Technology  Co, ltd.
+				The third floor, A area,         Huaxu road No. 685
+				Shanghai  Xujing town，Qingpu  200217
+				CN
+
+30-0A-60   (hex)		Advanced Electronic Designs, Inc.
+200000-2FFFFF     (base 16)		Advanced Electronic Designs, Inc.
+				233 Enterprise Blvd
+				Bozeman  MT  59718
+				US
+
+A0-28-33   (hex)		SHANGHAI XUNTAI INFORMATION TECHNOLOGY CO.,LTD.
+300000-3FFFFF     (base 16)		SHANGHAI XUNTAI INFORMATION TECHNOLOGY CO.,LTD.
+				ET SPACE, ZIZHU PARK, NO.555, DONGCHUAN RD.
+				SHANGHAI  SHANGHAI  200241
+				CN
+
+A0-28-33   (hex)		Ordercube GmbH
+100000-1FFFFF     (base 16)		Ordercube GmbH
+				Aßlinger Str. 6
+				Grafing b. München  Bayern  85567
+				DE
+
+A0-28-33   (hex)		Medical Evolution Kft
+A00000-AFFFFF     (base 16)		Medical Evolution Kft
+				Liszenko telep 1
+				Pomaz    2013
+				HU
+
+A0-28-33   (hex)		HZHY TECHNOLOGY
+800000-8FFFFF     (base 16)		HZHY TECHNOLOGY
+				The 2th floor,Longzeyuan Multi-use
+				beijing    102208
+				CN
+
+A4-ED-43   (hex)		Beijing ICPC CO.,Ltd.
+500000-5FFFFF     (base 16)		Beijing ICPC CO.,Ltd.
+				Fengtai District HuaXiang LiuQuan  West Road NO.8 Xinhua ShuangChuangYuan Building B Floor 2 NO.203
+				Beijing  Beijing  100070
+				CN
+
+A4-ED-43   (hex)		NETAS TELEKOMUNIKASYON A.S.
+400000-4FFFFF     (base 16)		NETAS TELEKOMUNIKASYON A.S.
+				Kurtköy Mahallesi, Osmanlı Blv. No:11
+				Pendik  Istanbul  34912
+				TR
+
+A4-ED-43   (hex)		Guangzhou Maxfaith Communication Technology Co.,LTD.
+A00000-AFFFFF     (base 16)		Guangzhou Maxfaith Communication Technology Co.,LTD.
+				3rd Floor,Office of Youtong Zone,No.139,Zhongshan Avenue
+				Guangzhou    510665
+				CN
+
+84-89-EC   (hex)		Price Industries Limited
+D00000-DFFFFF     (base 16)		Price Industries Limited
+				638 Raleigh Street
+				Winnipeg  Manitoba  R2K3Z9
+				CA
+
+30-09-F9   (hex)		ZhongLi HengFeng (Shenzhen) Technology co.,Ltd.
+E00000-EFFFFF     (base 16)		ZhongLi HengFeng (Shenzhen) Technology co.,Ltd.
+				Room 402C Donglian Buiding,Chuangye NO 2 road,Baoan
+				Shenzhen  Guangdong  430000
+				CN
+
+30-09-F9   (hex)		Sichuan Nebula Networks Co.,LTD.
+B00000-BFFFFF     (base 16)		Sichuan Nebula Networks Co.,LTD.
+				Floor 21 Building 2,No.200 Tianquan Road,West Hi-Tech Zone,
+				Chengdu  Sichuan  611731
+				CN
+
+84-89-EC   (hex)		thousand star tech LTD.
+200000-2FFFFF     (base 16)		thousand star tech LTD.
+				guan nan yuan 1 road dangdai optical valley dream workshop
+				wuhan  hubei  430070
+				CN
+
+9C-F6-DD   (hex)		Shanxi ZhuoZhi fei High Electronic Technology Co. Ltd.
+E00000-EFFFFF     (base 16)		Shanxi ZhuoZhi fei High Electronic Technology Co. Ltd.
+				Red flag East Street
+				yuncheng  shanxi  044000
+				CN
+
+B8-D8-12   (hex)		IPM Sales and service Co.,Ltd.
+200000-2FFFFF     (base 16)		IPM Sales and service Co.,Ltd.
+				250-252 Soi 29 Somdet Prachaotaksin Road
+				Bangkok  Bangkok  10600
+				TH
+
+9C-F6-DD   (hex)		Beijing Sifang Automation Co., Ltd.
+200000-2FFFFF     (base 16)		Beijing Sifang Automation Co., Ltd.
+				No.9,Shangdi 4th Street,Haidian District
+				Beijing    100085
+				CN
+
+9C-F6-DD   (hex)		b8ta Inc.
+500000-5FFFFF     (base 16)		b8ta Inc.
+				164 Townsend St
+				San Francisco  CA  94107
+				US
+
+9C-F6-DD   (hex)		Annapurna labs
+000000-0FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+30-09-F9   (hex)		Honeywell
+C00000-CFFFFF     (base 16)		Honeywell
+				13350 US Hwy 19 N 
+				Clearwater  null  33764
+				US
+
+C0-83-59   (hex)		CHONGQING JIUYU SMART TECHNOLOGY CO.LTD.
+000000-0FFFFF     (base 16)		CHONGQING JIUYU SMART TECHNOLOGY CO.LTD.
+				T2-11-3, No. 2 Jiangbeizui Financial City, Jiangbei District,
+				Chongqing  Chongqing  400000
+				CN
+
+04-C3-E6   (hex)		Shenzhen Shuotian Information Technology Co., LTD
+600000-6FFFFF     (base 16)		Shenzhen Shuotian Information Technology Co., LTD
+				Xixiang Street , Bao'an District
+				Shenzhen  Guangdong  518000
+				CN
+
+04-C3-E6   (hex)		Advanced Digital Technologies, s.r.o.
+700000-7FFFFF     (base 16)		Advanced Digital Technologies, s.r.o.
+				Purkynova 649/127
+				Medlanky  Brno  612 00
+				CZ
+
+04-C3-E6   (hex)		 Guangdong New Pulse Electric Co., Ltd.
+100000-1FFFFF     (base 16)		 Guangdong New Pulse Electric Co., Ltd.
+				No. 38 South Kemu Road
+				 Guangzhou City  Tianhe District, Guangdong Province  510520
+				CN
+
+3C-42-7E   (hex)		Xiaoniu network technology (Shanghai) Co., Ltd.
+E00000-EFFFFF     (base 16)		Xiaoniu network technology (Shanghai) Co., Ltd.
+				Room 706, building 3, no.20 east road, jingan district.
+				Shang hai    200040
+				CN
+
+04-C3-E6   (hex)		SiS Technology
+200000-2FFFFF     (base 16)		SiS Technology
+				Business Park Varna, building B1, floor 4
+				Varna    9000
+				BG
+
+3C-42-7E   (hex)		Dongguan Taide Industrial Co.,Ltd.
+100000-1FFFFF     (base 16)		Dongguan Taide Industrial Co.,Ltd.
+				Taide Industrial Park,Phase 2 Jinfenghuang Industrial District Huangdong,Fenggang Town
+				Dongguan City  GuangDong  523696
+				CN
+
+D4-7C-44   (hex)		YunDing Network Technology (Beijing) Co., Ltd
+200000-2FFFFF     (base 16)		YunDing Network Technology (Beijing) Co., Ltd
+				A521,Floor 5, Tencent Space Building No.388, Hui long guan East St. 
+				Beijing    100000
+				CN
+
+D4-7C-44   (hex)		Suzhou Wan Dian Zhang Network Technology Co., Ltd
+900000-9FFFFF     (base 16)		Suzhou Wan Dian Zhang Network Technology Co., Ltd
+				No. 209 Zhuyuan Road, High-tech Zone
+				Suzhou City  Jiangsu  215010
+				CN
+
+B4-4B-D6   (hex)		 Shenzhen Huabai Intelligent Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		 Shenzhen Huabai Intelligent Technology Co., Ltd.
+				Science Park South District Shenzhen Digital
+				Technology Park Building B2 4th Floor Area A  Shenzhen, Guangdong  518000
+				CN
+
+3C-42-7E   (hex)		GJS Co., Ltd.
+700000-7FFFFF     (base 16)		GJS Co., Ltd.
+				305, Qianhai Innovation and Entrepreneur Hub, Bldg. C Qianwan 1st Rd., Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+3C-42-7E   (hex)		TAITEX CORPORATION
+900000-9FFFFF     (base 16)		TAITEX CORPORATION
+				1-7-12,WAKATAKE
+				ICHINOMIYA-SHI  AICHI-KEN  491-0832
+				JP
+
+B4-4B-D6   (hex)		Impakt S.A.
+C00000-CFFFFF     (base 16)		Impakt S.A.
+				Stanislawa Lema 16
+				Mosina  Wielkopolska  62-050
+				PL
+
+A0-19-B2   (hex)		Power Diagnostic Service Co., LTD.
+300000-3FFFFF     (base 16)		Power Diagnostic Service Co., LTD.
+				No.10, Ln.482, Sec.4 Zhonghua Rd.
+				Hsinchu City    30094
+				TW
+
+CC-D3-1E   (hex)		CUJO LLC
+D00000-DFFFFF     (base 16)		CUJO LLC
+				2512 Artesia Blvd
+				Redondo Beach  CA  90278
+				US
+
+A0-19-B2   (hex)		LDA Technologies
+C00000-CFFFFF     (base 16)		LDA Technologies
+				2680 Matheson Blvd E., Suite 102
+				Mississauga  Ontario  L4W2C6
+				CA
+
+A0-19-B2   (hex)		Vast Production Services
+000000-0FFFFF     (base 16)		Vast Production Services
+				307 Robbins Drive
+				Troy  MI  48083
+				US
+
+74-F8-DB   (hex)		Ballard Technology, Inc,
+A00000-AFFFFF     (base 16)		Ballard Technology, Inc,
+				11400 Airport Rd
+				Everett    98204
+				US
+
+2C-48-35   (hex)		DPS Electronics
+800000-8FFFFF     (base 16)		DPS Electronics
+				317 Gallatin Park Dr #2
+				Bozeman  MT  59715
+				US
+
+2C-48-35   (hex)		Shanghai Visteon Automotive Electronics System CO. Ltd.
+B00000-BFFFFF     (base 16)		Shanghai Visteon Automotive Electronics System CO. Ltd.
+				No.1268, East Kangqiao Road, Pudong District,
+				ShangHai    201315
+				CN
+
+8C-1C-DA   (hex)		Anntec （Beijing） Technology Co.,Ltd.
+400000-4FFFFF     (base 16)		Anntec （Beijing） Technology Co.,Ltd.
+				F803, Shangdi Third Street, No.9,HaiDian District
+				Beijing    100080
+				CN
+
+3C-24-F0   (hex)		CASKY eTech Co., Ltd.
+500000-5FFFFF     (base 16)		CASKY eTech Co., Ltd.
+				10th Floor, Viva Plaza, Yard 29 Suzhou Street, Haidian District,
+				Beijing  Beijing  100080
+				CN
+
+0C-73-EB   (hex)		Green Fox Electro AS
+600000-6FFFFF     (base 16)		Green Fox Electro AS
+				Wessels veg 63
+				STJORDAL    NO-7502
+				NO
+
+8C-1C-DA   (hex)		China Potevio Co., Ltd
+A00000-AFFFFF     (base 16)		China Potevio Co., Ltd
+				No.6, haidian north second street, haidian district, Beijing
+				Beijing  Beijing  100080
+				CN
+
+3C-24-F0   (hex)		Travis Holding B.V.
+D00000-DFFFFF     (base 16)		Travis Holding B.V.
+				Stationsplein 45, A4.002 3013 AK
+				Rotterdam    3013AK
+				NL
+
+3C-24-F0   (hex)		Abrites Ltd.
+100000-1FFFFF     (base 16)		Abrites Ltd.
+				147 Cherni Vrah Blvd.
+				Sofia  Sofia  1407
+				BG
+
+48-0B-B2   (hex)		Solaredge LTD.
+500000-5FFFFF     (base 16)		Solaredge LTD.
+				Hamada 1
+				Herzelia    4673335
+				IL
+
+48-0B-B2   (hex)		shanghai Rinlink  Intelligent Technology Co., Ltd.
+300000-3FFFFF     (base 16)		shanghai Rinlink  Intelligent Technology Co., Ltd.
+				Room1510,ROAD Xiuwen,Minhang District
+				shanghai    201100
+				CN
+
+88-5F-E8   (hex)		Unicom Global, Inc.
+E00000-EFFFFF     (base 16)		Unicom Global, Inc.
+				581, Ruiguang Road, Neihu Dist.
+				Taipei    11492
+				TW
+
+30-1F-9A   (hex)		 FINE TRIUMPH TECHNOLOGY CORP.,LTD.
+800000-8FFFFF     (base 16)		 FINE TRIUMPH TECHNOLOGY CORP.,LTD.
+				Xixiang
+				Shenzhen  Guangdong  518126
+				CN
+
+30-1F-9A   (hex)		Beijing Surestar Technology Co. Ltd,
+500000-5FFFFF     (base 16)		Beijing Surestar Technology Co. Ltd,
+				Room 502, building 1, No. 5 Yongfeng Road, Haidian District
+				Beijing    100089
+				CN
+
+30-1F-9A   (hex)		ILSAN ELECTRONICS
+000000-0FFFFF     (base 16)		ILSAN ELECTRONICS
+				433Beon-gil 52,Sasang-ro,Sasang-gu
+				Busan    46923
+				KR
+
+30-1F-9A   (hex)		Dewesoft d.o.o.
+100000-1FFFFF     (base 16)		Dewesoft d.o.o.
+				Gabrsko 11a
+				Trbovlje    1420
+				SI
+
+F0-41-C8   (hex)		SHENZHEN WISEWING INTERNET TECHNOLOGY CO.,LTD
+300000-3FFFFF     (base 16)		SHENZHEN WISEWING INTERNET TECHNOLOGY CO.,LTD
+				No.826,Zone 1,Block B,Famous industrial product display purchasing center,Baoyuan Road,Xixiang,Bao'an Dis., Shenzhen,P.R.China
+				shenzhen  China  518102
+				CN
+
+88-A9-A7   (hex)		Thomas & Darden, Inc
+400000-4FFFFF     (base 16)		Thomas & Darden, Inc
+				916 Springdale Rd Bldg 4 #104
+				Austin    78702
+				US
+
+F0-41-C8   (hex)		Powervault Ltd
+B00000-BFFFFF     (base 16)		Powervault Ltd
+				29 Shand Street, London Bridge
+				London    SE1 2ES
+				GB
+
+A4-DA-22   (hex)		EHO.LINK
+C00000-CFFFFF     (base 16)		EHO.LINK
+				5 Avenue de Saint Menet, Imm. Axiome, Bat. B
+				Marseille    13011
+				FR
+
+88-A9-A7   (hex)		Zhejiang Haoteng Electronic Technology Co.,Ltd.
+A00000-AFFFFF     (base 16)		Zhejiang Haoteng Electronic Technology Co.,Ltd.
+				Zhejiang Lishui city streets Nanming mountain Shek road Liandu District No. 268 Building 2 block B
+				Lishui  Zhejiang  323000
+				CN
+
+DC-E5-33   (hex)		Giant Power Technology Biomedical Corporation
+E00000-EFFFFF     (base 16)		Giant Power Technology Biomedical Corporation
+				Rm201, 2nd Educational Building, No. 84, Gongzhuan Rd, Taishan Dist
+				New Taipei City    24301
+				TW
+
+DC-E5-33   (hex)		Suzhou ATES electronic technology co.LTD
+D00000-DFFFFF     (base 16)		Suzhou ATES electronic technology co.LTD
+				NO.2 aimin road,Xiangcheng district
+				 Suzhou city  Jiangsu Province  215002
+				CN
+
+DC-E5-33   (hex)		BRCK
+C00000-CFFFFF     (base 16)		BRCK
+				PO Box 58275-00200, 2nd Floor Bishop Magua Center, George Padmore Lane, 2nd Floor Bishop Magua Center, George Padmore Lane
+				Nairobi  Nairobi  00200
+				KE
+
+DC-E5-33   (hex)		shenzhen bangying electronics co,.ltd
+400000-4FFFFF     (base 16)		shenzhen bangying electronics co,.ltd
+				3/F Building 16,Hongfa industrialPark,Tangtou Shiyan Town
+				shenzhen  guangdong  518000
+				CN
+
+DC-E5-33   (hex)		Tiertime Corporation
+900000-9FFFFF     (base 16)		Tiertime Corporation
+				2398 Walsh Avenue
+				Santa Clara  CA  95051
+				US
+
+DC-E5-33   (hex)		FLYHT Aerospace
+000000-0FFFFF     (base 16)		FLYHT Aerospace
+				300E 1144 - 29th St. N.E.
+				Calgary  AB  T2E7P1
+				CA
+
+9C-43-1E   (hex)		SuZhou Jinruiyang Information Technology CO.,LTD
+C00000-CFFFFF     (base 16)		SuZhou Jinruiyang Information Technology CO.,LTD
+				NO.1003 Room A1 Buliding Tengfei Business Park in Suzhou Industrial Park.
+				Suzhou  Jiangsu  215123
+				CN
+
+9C-43-1E   (hex)		JNL Technologies Inc
+B00000-BFFFFF     (base 16)		JNL Technologies Inc
+				W1205 Industrial Dr
+				Ixonia  WI  53036
+				US
+
+C4-FF-BC   (hex)		iMageTech CO.,LTD.
+400000-4FFFFF     (base 16)		iMageTech CO.,LTD.
+				5F., No.16, Lane 15, Sec. 6, Mincyuan E. Rd., Neihu District,
+				TAIPEI    114
+				TW
+
+C4-FF-BC   (hex)		SHENZHEN KALIF ELECTRONICS CO.,LTD
+300000-3FFFFF     (base 16)		SHENZHEN KALIF ELECTRONICS CO.,LTD
+				1、2 and 3 Floor, No.114, Haochong No.2 Industry Area, Hongxing Community, Songgang, Baoan, Shenzhen 
+				SHENZHEN  GuangDong  518105
+				CN
+
+28-2C-02   (hex)		Epoch International Enterprises, Inc.
+C00000-CFFFFF     (base 16)		Epoch International Enterprises, Inc.
+				10542 Calle Lee, #114
+				Los Alamitos  CA  90720
+				US
+
+28-2C-02   (hex)		EFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA
+400000-4FFFFF     (base 16)		EFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA
+				Dietla 93/6
+				Kraków    31-031
+				PL
+
+F8-B5-68   (hex)		PT. Eyro Digital Teknologi
+100000-1FFFFF     (base 16)		PT. Eyro Digital Teknologi
+				Jalan Amir Mahmud IX/23
+				Surabaya  Jawa Timur  60294
+				ID
+
+40-48-FD   (hex)		RL Controls LLC.
+300000-3FFFFF     (base 16)		RL Controls LLC.
+				2 G Gill St
+				Woburn  MA  01801
+				US
+
+40-48-FD   (hex)		Dynamic Engineering
+400000-4FFFFF     (base 16)		Dynamic Engineering
+				Dynamic Engineering, 150 DuBois St. Suite C
+				Santa Cruz  CA  95060
+				US
+
+40-48-FD   (hex)		Magenta Labs, Inc.
+B00000-BFFFFF     (base 16)		Magenta Labs, Inc.
+				P.O. BOX 77234
+				San Francisco  CA  94107
+				US
+
+40-48-FD   (hex)		Fast Programming
+100000-1FFFFF     (base 16)		Fast Programming
+				Alyarmouk
+				Riyadh  Ar Riyadh  13251
+				SA
+
+40-48-FD   (hex)		SMART SENSOR DEVICES AB
+E00000-EFFFFF     (base 16)		SMART SENSOR DEVICES AB
+				Sollentunavägen 67A
+				Sollentuna  Stockholm  19140
+				SE
+
+38-73-EA   (hex)		Eyesight(Shanghai)Communication Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Eyesight(Shanghai)Communication Technology Co.,Ltd.
+				Room 820, C/F, Building 1, NO. 3000 Longdong Avenue, China(Shanghai) Pilot Free Trade
+				ShangHai  ShangHai  201203
+				CN
+
+38-73-EA   (hex)		L-3 Communications Mobile-Vision, Inc.
+000000-0FFFFF     (base 16)		L-3 Communications Mobile-Vision, Inc.
+				400 Commons Way STE F
+				Rockaway    07866
+				US
+
+38-73-EA   (hex)		Rock Electronic Co., Ltd.
+800000-8FFFFF     (base 16)		Rock Electronic Co., Ltd.
+				No. 1 Chuangsheng Rd. 
+				shenzhen  Guangdong  518055
+				CN
+
+EC-9F-0D   (hex)		Paw-Taw-John Services, Inc.
+500000-5FFFFF     (base 16)		Paw-Taw-John Services, Inc.
+				18125 N Ramsey Rd
+				Rathdrum  ID  83858-8288
+				US
+
+EC-9F-0D   (hex)		Hesai Photonics Technology Co., Ltd
+000000-0FFFFF     (base 16)		Hesai Photonics Technology Co., Ltd
+				10th Floor, Building L2-B, Hongqiao World Center
+				Shanghai  Shanghai  200010
+				CN
+
+EC-9F-0D   (hex)		Sarcos Corp
+C00000-CFFFFF     (base 16)		Sarcos Corp
+				360 S Wakara Way
+				Salt Lake City  UT  84108
+				US
+
+EC-9F-0D   (hex)		FCI
+900000-9FFFFF     (base 16)		FCI
+				B-7F,Silicon Park, 35, Pangyo-ro 255 beon-gil,Bundang-gu
+				Seongnam si  Gyeonggi-do. KOREA  13486
+				KR
+
+EC-9F-0D   (hex)		Bei jing Lian Shan times Techonology Co.Ltd
+700000-7FFFFF     (base 16)		Bei jing Lian Shan times Techonology Co.Ltd
+				Beijing Haidian.No.2 of Yong Cheng North Road Building 1.402
+				Beijing    100094
+				CN
+
+34-D0-B8   (hex)		eesy-innovation GmbH
+500000-5FFFFF     (base 16)		eesy-innovation GmbH
+				Otto-Hahn-Str. 13b
+				Munich  Bavaria  85521
+				DE
+
+34-D0-B8   (hex)		Vtrek Group International Ltd.
+800000-8FFFFF     (base 16)		Vtrek Group International Ltd.
+				Room 1204,12/F.,Tower1,Silvercord,30 Canton Road,Tsim Sha Tsui
+				Hong Kong    999077
+				HK
+
+34-D0-B8   (hex)		Blustream Pty Ltd
+200000-2FFFFF     (base 16)		Blustream Pty Ltd
+				24 Lionel Road
+				Mt. Waverley  Victoria  3149
+				AU
+
+AC-1D-DF   (hex)		CRDE
+300000-3FFFFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+34-D0-B8   (hex)		Tascent, Inc.
+300000-3FFFFF     (base 16)		Tascent, Inc.
+				475 Alberto Way, Suite #200
+				Los Gatos  CA  95032
+				US
+
+74-1A-E0   (hex)		SAIERCOM CORPORATION
+A00000-AFFFFF     (base 16)		SAIERCOM CORPORATION
+				ROOM 11501,FLOOR 15,UNIT 1,BLOCK 1,RENOVATION CENTER,TUANJIE SOUTH RD.,HI-TECH ZONE,XIAN,SHAANXI
+				XIAN  SHAANXI  710065
+				CN
+
+74-1A-E0   (hex)		Blocks Wearables Inc.
+600000-6FFFFF     (base 16)		Blocks Wearables Inc.
+				1800 Century Park East, 10th Floor
+				Los Angeles  CA  90067
+				US
+
+74-1A-E0   (hex)		Voltaware Services Limited
+D00000-DFFFFF     (base 16)		Voltaware Services Limited
+				230 High Street
+				Swanage    BH19 2PQ
+				GB
+
+54-9A-11   (hex)		Elotech Industrieelektronik GmbH
+500000-5FFFFF     (base 16)		Elotech Industrieelektronik GmbH
+				Verbindungsstr. 27
+				Hilden  NRW  40723
+				DE
+
+CC-22-37   (hex)		SHANGHAI CARGOA M.&E.EQUIPMENT CO.LTD
+400000-4FFFFF     (base 16)		SHANGHAI CARGOA M.&E.EQUIPMENT CO.LTD
+				98 shunda road 9#,nanxiang town, Jianding district
+				Shanghai, 200182P.R.    200182
+				CN
+
+CC-22-37   (hex)		Hebei ZHSF Technology Co.,Ltd.
+C00000-CFFFFF     (base 16)		Hebei ZHSF Technology Co.,Ltd.
+				88 Xinshi South Road
+				Shijiazhuang, Hebei    050000
+				CN
+
+CC-22-37   (hex)		XConnect Professional Services
+300000-3FFFFF     (base 16)		XConnect Professional Services
+				459 Westlake Dr
+				Brisbane  QLD  4074
+				AU
+
+2C-27-9E   (hex)		AudioNord Distribution A/S
+500000-5FFFFF     (base 16)		AudioNord Distribution A/S
+				Moelbakvej 4
+				Lystrup    8520
+				DK
+
+18-9B-A5   (hex)		ChengDu Vantron Technology, Ltd.
+100000-1FFFFF     (base 16)		ChengDu Vantron Technology, Ltd.
+				6th Floor, 1st  Building,No.9, 3rd WuKe East Street, WuHou District,
+				ChengDu  SiChuan  610045
+				CN
+
+90-4E-91   (hex)		CUTTER Systems spol. s r.o.
+900000-9FFFFF     (base 16)		CUTTER Systems spol. s r.o.
+				Milicova 2530/26
+				Prostejov    79601
+				CZ
+
+90-4E-91   (hex)		mcf88 SRL
+500000-5FFFFF     (base 16)		mcf88 SRL
+				Via Roma, 3
+				Sozzago  Novara  28060
+				IT
+
+90-4E-91   (hex)		IBM
+700000-7FFFFF     (base 16)		IBM
+				9000 south rita rd
+				Tucson  AZ  85744
+				US
+
+90-4E-91   (hex)		North Pole Engineering, Inc.
+200000-2FFFFF     (base 16)		North Pole Engineering, Inc.
+				221 N. 1st. St., Suite 310
+				Minneapolis  MN  55401
+				US
+
+50-FF-99   (hex)		Informa LLC
+E00000-EFFFFF     (base 16)		Informa LLC
+				215 N. College Ave
+				Indianapolis  IN  46202
+				US
+
+90-4E-91   (hex)		Nuwa Robotics (HK) Limited Taiwan Branch
+600000-6FFFFF     (base 16)		Nuwa Robotics (HK) Limited Taiwan Branch
+				9F., No.101, Sec. 3, Nanjing E. Rd., Zhongshan Dist.
+				Taipei    10487
+				TW
+
+90-4E-91   (hex)		Spirtech
+000000-0FFFFF     (base 16)		Spirtech
+				29 rue du Louvre
+				Paris    75002
+				FR
+
+34-29-8F   (hex)		Shenzhen Advance River System Technology Co., Ltd
+200000-2FFFFF     (base 16)		Shenzhen Advance River System Technology Co., Ltd
+				6/F South Factory,2nd Jinxiang Building,Xinzhou South Road,Futian District,
+				Shenzhen  Guangdong  518048
+				CN
+
+34-00-8A   (hex)		ChengDu HuiZhong Cloud Information Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		ChengDu HuiZhong Cloud Information Technology Co., Ltd.
+				NO.1 CHENGJI ROAD ,CHENGHUA DISTRICT
+				CHENGDU CITY  SICHUAN  610000
+				CN
+
+28-F5-37   (hex)		Shenzhen Modern Cowboy Technology Co.,Ltd.     
+700000-7FFFFF     (base 16)		Shenzhen Modern Cowboy Technology Co.,Ltd.     
+				Room 1006,Beike building，Keyuan road,Yuehai streets,Nanshan District
+				Shenzhen  Guangdong Province  518200
+				CN
+
+28-F5-37   (hex)		PRIMETECH ENGINEERING CORP.
+300000-3FFFFF     (base 16)		PRIMETECH ENGINEERING CORP.
+				 Koishikawadaikoku Bldg. 3F, 1-3-25
+				 Koishikawa, Bunkyo-ku  Tokyo  112-0002
+				JP
+
+34-00-8A   (hex)		Keruyun Technoligies(Beijing) Corporation Limited
+900000-9FFFFF     (base 16)		Keruyun Technoligies(Beijing) Corporation Limited
+				Room 405, Taibang Technical Building, High-tech south 4 road, Nanshan
+				Shenzhen  Guangdong  518000
+				CN
+
+34-00-8A   (hex)		RPE Monitor
+200000-2FFFFF     (base 16)		RPE Monitor
+				Krasnokursantskaya 104a
+				Rostov-on-Don  Select  344068
+				RU
+
+34-00-8A   (hex)		Shenzhen Eternal Idea Tech Co.,Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Eternal Idea Tech Co.,Ltd
+				5/F, Building C, Chuangwei Technology Park,1st Rd,Shiyan tangtou,Baoan District, Shenzhen, Guang Dong Province,PRC 
+				Shenzhen  Guang Dong  518000
+				CN
+
+34-00-8A   (hex)		Fotonic i Norden AB
+400000-4FFFFF     (base 16)		Fotonic i Norden AB
+				Box 733
+				Skelleftea  SE  93127
+				SE
+
+28-F5-37   (hex)		Umojo
+100000-1FFFFF     (base 16)		Umojo
+				1 E. Superior St., Suite 402
+				Chicago  IL  60611
+				US
+
+28-F5-37   (hex)		Atomrock LLC
+500000-5FFFFF     (base 16)		Atomrock LLC
+				22525 SE 64th Place, Suite 2288
+				Issaquah    98027
+				US
+
+28-F5-37   (hex)		Skyrockettoys LLC
+D00000-DFFFFF     (base 16)		Skyrockettoys LLC
+				12910 culver blvd Ste F
+				los angeles  CA  90066
+				US
+
+28-F5-37   (hex)		Valeo Siemens eAutomotive Norway
+000000-0FFFFF     (base 16)		Valeo Siemens eAutomotive Norway
+				Graaterudveien 41
+				Drammen  Buskerud  3036
+				NO
+
+28-F5-37   (hex)		LogiM GmbH Software und Entwicklung
+B00000-BFFFFF     (base 16)		LogiM GmbH Software und Entwicklung
+				Mahonienweg 22b
+				Berlin    12437
+				DE
+
+78-D8-00   (hex)		Insignal Co., Ltd.
+A00000-AFFFFF     (base 16)		Insignal Co., Ltd.
+				#301, Ace High-end Tower 1st, 5 Digital-ro 26-gil
+				Seoul    ASI KR KS013 SEOUL
+				KR
+
+7C-BA-CC   (hex)		Sun Asia Trade Co.
+400000-4FFFFF     (base 16)		Sun Asia Trade Co.
+				RM 1005 10/F, HOKING COMMERCIAL CENTRE,2-16 FA YUEN STREET MONGKOk
+				Hong Kong  Hong Kong  9998800
+				HK
+
+7C-BA-CC   (hex)		Changsha SUNYE Electric Co., Ltd.
+100000-1FFFFF     (base 16)		Changsha SUNYE Electric Co., Ltd.
+				hi tech Zone, Sheng Xin Road, No. 669
+				Changsha   Hunan  410000
+				CN
+
+78-D8-00   (hex)		CS Instruments GmbH
+400000-4FFFFF     (base 16)		CS Instruments GmbH
+				Zindelsteiner Straße 15
+				 VS-Tannheim    78052
+				DE
+
+AC-64-DD   (hex)		HMicro Inc
+D00000-DFFFFF     (base 16)		HMicro Inc
+				39355 California St., Suite 303
+				Fremont  null  94538
+				US
+
+4C-65-A8   (hex)		Suzhou Embedded Electronic Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		Suzhou Embedded Electronic Technology Co., Ltd.
+				Room 15A05, KeJi GuangChang,QianJinDong Road
+				Kunshan  Jiangsu  215300
+				CN
+
+F8-8A-3C   (hex)		Shenzhen Shengyuan Tech Ltd.
+300000-3FFFFF     (base 16)		Shenzhen Shengyuan Tech Ltd.
+				Science and Technology Park North District, high tech North six Road, LAN LAN Technology Park, building C-309,Shenzhen Nanshan District, Guangdong Province, China
+				shenzhen  guangdong  518000
+				CN
+
+4C-65-A8   (hex)		Roost
+300000-3FFFFF     (base 16)		Roost
+				955, Benecia Ave
+				Sunnyvale  CA  94085
+				US
+
+F8-8A-3C   (hex)		KLATU Networks Inc
+200000-2FFFFF     (base 16)		KLATU Networks Inc
+				4174 NE Lookout Lane
+				Poulsbo  WA  98370
+				US
+
+A0-C5-F2   (hex)		Synapsys Solutions Ltd.
+E00000-EFFFFF     (base 16)		Synapsys Solutions Ltd.
+				1 Woodlands Court, Albert Drive
+				Burgess Hill  West Sussex  RH15 9TN
+				GB
+
+A0-C5-F2   (hex)		KNS Group LLC (YADRO Company)
+100000-1FFFFF     (base 16)		KNS Group LLC (YADRO Company)
+				Spartakovskaya sq., 14, bl. 1
+				Moscow    105082
+				RU
+
+A0-C5-F2   (hex)		Speedgoat GmbH
+200000-2FFFFF     (base 16)		Speedgoat GmbH
+				Waldeggstrasse 30
+				Liebefeld  BE  3097
+				CH
+
+A0-C5-F2   (hex)		Viettronimex JSC
+700000-7FFFFF     (base 16)		Viettronimex JSC
+				74-76 Nguyen Hue street, Ben nghe ward, distric 1
+				Ho Chi Minh    70000
+				VN
+
+04-71-4B   (hex)		Neurio Technology Inc.
+000000-0FFFFF     (base 16)		Neurio Technology Inc.
+				43 West Hastings Street
+				Vancouver  BC  V6B 1G4
+				CA
+
+04-71-4B   (hex)		Lighthouse AI, Inc
+900000-9FFFFF     (base 16)		Lighthouse AI, Inc
+				380 Portage Ave
+				Palo Alto  CA  94306
+				US
+
+F0-23-B9   (hex)		Emu Technology
+900000-9FFFFF     (base 16)		Emu Technology
+				1400 E. Angela Blvd. #101
+				South Bend  IN  46617
+				US
+
+F0-23-B9   (hex)		Audeara Pty. Ltd.
+500000-5FFFFF     (base 16)		Audeara Pty. Ltd.
+				375 Wickham Terrace
+				Brisbane  Queensland  4000
+				AU
+
+60-D7-E3   (hex)		Elap s.r.l.
+100000-1FFFFF     (base 16)		Elap s.r.l.
+				Via V. Veneto 4
+				Corsico  Milano  20094
+				IT
+
+04-71-4B   (hex)		DIGIBEST TECHNOLOGY CO., LTD.
+B00000-BFFFFF     (base 16)		DIGIBEST TECHNOLOGY CO., LTD.
+				4F ,No.65 , SHITAN ROAD , NEIHU DIST.
+				TAIPEI    114
+				TW
+
+04-71-4B   (hex)		KittyHawk Corporation
+C00000-CFFFFF     (base 16)		KittyHawk Corporation
+				2700 Broderick Way
+				Mountain View  CA  94043
+				US
+
+1C-C0-E1   (hex)		SHENZHEN KINSTONE D&T DEVELOP CO.,LTD
+700000-7FFFFF     (base 16)		SHENZHEN KINSTONE D&T DEVELOP CO.,LTD
+				5F, A2 Building ,XinJianXing Tech Industrial Park,Fengxin Road ,Lou Cun , Gongming Street,Guangming New Dist.,
+				 Shenzhen  Guangdong  518000
+				CN
+
+08-ED-02   (hex)		Eleven Engineering Incorporated
+700000-7FFFFF     (base 16)		Eleven Engineering Incorporated
+				10150 - 100 Street, Suite 800
+				Edmonton  Canada, Alberta  T5J 0P6
+				CA
+
+08-ED-02   (hex)		TES Touch Embedded Solutions Inc.
+200000-2FFFFF     (base 16)		TES Touch Embedded Solutions Inc.
+				3F, No. 141, Sec. 3, Ren'ai Rd.,
+				Taipei    106
+				TW
+
+98-AA-FC   (hex)		Resonant Systems Inc.
+B00000-BFFFFF     (base 16)		Resonant Systems Inc.
+				Tsurumi chiyoda building,4-34-26,Tsurumi-tyuou,Tsurumi
+				Yokohama-shi  kanagawa-ken  230-0051
+				JP
+
+98-AA-FC   (hex)		Shenzhen UniStrong Science & Technology Co., Ltd
+200000-2FFFFF     (base 16)		Shenzhen UniStrong Science & Technology Co., Ltd
+				B，4-4Factory,Zhengcheng Road, Fuyong Baoan District,
+				Shenzhen    518103
+				CN
+
+98-AA-FC   (hex)		SENKO Co.,Ltd.
+A00000-AFFFFF     (base 16)		SENKO Co.,Ltd.
+				73 Oesammiro15beon-gil 
+				Osan-si  Gyeonggi-do  18111
+				KR
+
+08-ED-02   (hex)		HANTAS CO., LTD.
+800000-8FFFFF     (base 16)		HANTAS CO., LTD.
+				474 Dunchondaero, Jungwon-gu
+				Seongnam-si  Kyonggi-do  13229
+				KR
+
+14-4F-D7   (hex)		Red Technology Limited
+400000-4FFFFF     (base 16)		Red Technology Limited
+				Room 702, 7/F., Fu Fai Commercial Centre, 27 Hillier Street, Sheung Wan
+				Hong Kong    999077
+				HK
+
+14-4F-D7   (hex)		Qingdao Wodatong Electronics Co., Ltd.
+300000-3FFFFF     (base 16)		Qingdao Wodatong Electronics Co., Ltd.
+				West of Committees, HouHaiXi Community, JiHongTan Street, Chengyang District,
+				Qingdao  Shandong  266111
+				CN
+
+14-4F-D7   (hex)		Unirobot Corporation
+A00000-AFFFFF     (base 16)		Unirobot Corporation
+				MK Hatagaya Sasazuka building 6F, Hatagaya, Shibuya-ku
+				Tokyo  Japan  1510072
+				JP
+
+A4-11-63   (hex)		Beijing XiaoRui Technology Co., Ltd
+600000-6FFFFF     (base 16)		Beijing XiaoRui Technology Co., Ltd
+				Room 1201, Zhongqing Building, East Third Ring Road, Chaoyang District, Beijing
+				Beijing  Beijing  100029
+				CN
+
+1C-A0-D3   (hex)		NovTech, Inc.
+200000-2FFFFF     (base 16)		NovTech, Inc.
+				7401 Wiles Road, Suite 229
+				Coral Springs  FL  33067
+				US
+
+40-F3-85   (hex)		URMET Home & Building Solutions Pty Ltd
+B00000-BFFFFF     (base 16)		URMET Home & Building Solutions Pty Ltd
+				36 Ricketty Street
+				Mascot  NSW  2020
+				AU
+
+40-F3-85   (hex)		Johnson Matthey
+100000-1FFFFF     (base 16)		Johnson Matthey
+				MTC, The Moat
+				Billingham  Cleveland  TS23 4ED
+				GB
+
+8C-C8-F4   (hex)		Beijing KXWELL Technology CO., LTD 
+500000-5FFFFF     (base 16)		Beijing KXWELL Technology CO., LTD 
+				 Room 12A05, North Real Estate Building, Block 3
+				81 Zizhuyuan Road, Haidian District  Beijing   100089
+				CN
+
+40-F3-85   (hex)		Clixxo Broadband Private Limited
+C00000-CFFFFF     (base 16)		Clixxo Broadband Private Limited
+				Suite # 10, 3rd Floor, Tower 2, Stellar IT Park, C-25, Sector 62
+				Noida  Uttar Pradesh  201301
+				IN
+
+50-A4-D0   (hex)		Beijing YangLian Networks Technology co., LTD
+C00000-CFFFFF     (base 16)		Beijing YangLian Networks Technology co., LTD
+				Building 17, East Zone, No.10 Xibeiwang Dong Rd, Haidian District, Beijing, PRC
+				BeiJing    100193
+				CN
+
+8C-C8-F4   (hex)		Beijing Xinxunxintong Eletronics Co.,Ltd
+D00000-DFFFFF     (base 16)		Beijing Xinxunxintong Eletronics Co.,Ltd
+				No.9 Yingfu Road,Haidian District
+				Beijing    100192
+				CN
+
+8C-C8-F4   (hex)		PTYPE Co., LTD.
+B00000-BFFFFF     (base 16)		PTYPE Co., LTD.
+				B121, B-dong, Keumkang Penterium IT Tower, 810, Gwanyand 2-dong, Dongan-gu
+				Anyang-si  Gyeonggi-do  14056
+				KR
+
+50-A4-D0   (hex)		Guangzhou Hysoon Electronic Co., Ltd.
+300000-3FFFFF     (base 16)		Guangzhou Hysoon Electronic Co., Ltd.
+				No.1, Fenghuang South Road, Xinhua, Huadu District
+				Guangzhou  Guangdong  510800
+				CN
+
+34-04-9E   (hex)		Harbin Yantuo Science and Technology Development Co., Ltd
+400000-4FFFFF     (base 16)		Harbin Yantuo Science and Technology Development Co., Ltd
+				No. 15 Xingnan Road, Nangang District
+				Harbin  Heilongjiang Province  150000
+				CN
+
+40-ED-98   (hex)		Hangzhou GANX Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Hangzhou GANX Technology Co.,Ltd.
+				Room 502, Building 2, No 1180, BinAn Rd, Binjiang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+40-ED-98   (hex)		TeraTron GmbH
+900000-9FFFFF     (base 16)		TeraTron GmbH
+				Bunsenstr. 10
+				Gummersbach  DE  51647
+				DE
+
+40-ED-98   (hex)		BORDA TECHNOLOGY
+E00000-EFFFFF     (base 16)		BORDA TECHNOLOGY
+				ITU ARI TEKNOKENT ARI 3 NO 504
+				ISTANBUL    34369
+				TR
+
+50-0B-91   (hex)		EWIN TECHNOLOGY LIMITED
+300000-3FFFFF     (base 16)		EWIN TECHNOLOGY LIMITED
+				3rd floor, No. 12, LIYE Road, 2nd industrial District, South Zone,
+				Zhongshan  Guangdong  528400
+				CN
+
+50-0B-91   (hex)		Security Alarms & Co. S.A.
+600000-6FFFFF     (base 16)		Security Alarms & Co. S.A.
+				Z.I. Tresi 6D
+				Preverenges    1028
+				CH
+
+A4-58-0F   (hex)		Changsha Tai Hui Network Technology Co.,Ltd
+700000-7FFFFF     (base 16)		Changsha Tai Hui Network Technology Co.,Ltd
+				102-202 Building A2,Luguyu Garden,No.27 Wenxuan Rd,Gaoxin District,Changsha
+				changsha  hunan  410205
+				CN
+
+A4-58-0F   (hex)		ABB AB PGHV
+B00000-BFFFFF     (base 16)		ABB AB PGHV
+				Lyviksvägen 4
+				Ludvika    77180
+				SE
+
+A4-58-0F   (hex)		Engineered SA
+300000-3FFFFF     (base 16)		Engineered SA
+				Avenue des Sports 28
+				Yverdon-les-Bains  VD  1400
+				CH
+
+7C-CB-E2   (hex)		optilink networks pvt ltd
+D00000-DFFFFF     (base 16)		optilink networks pvt ltd
+				501/502, sanjona complex, hemu kalani marg, chembur
+				mumbai  maharashtra  400071
+				IN
+
+7C-CB-E2   (hex)		Ningbo bird sales co.,LTD
+400000-4FFFFF     (base 16)		Ningbo bird sales co.,LTD
+				NO.999 Dacheng East Road
+				Fenghua City  Zhejiang Province  315559
+				CN
+
+48-65-EE   (hex)		CNU
+E00000-EFFFFF     (base 16)		CNU
+				No.8 Everygreen Road,  Haidian District 3 layer 313
+				Beijing    100195
+				CN
+
+48-65-EE   (hex)		Swistec Systems AG
+500000-5FFFFF     (base 16)		Swistec Systems AG
+				Allmendstrasse 30
+				Fehraltorf  ZH  8320
+				CH
+
+10-07-23   (hex)		Shenzhen Xinfa Electronic Co.,ltd
+C00000-CFFFFF     (base 16)		Shenzhen Xinfa Electronic Co.,ltd
+				 NO.57., Baoli Rd.,Buji Town.,Longgang District.,Shenzhen city.,guangdong province.,China
+				shenzhen  guangdong  518112
+				CN
+
+24-4E-7B   (hex)		sonoscape
+100000-1FFFFF     (base 16)		sonoscape
+				yuquan road
+				shenzhen  guangdong  518052
+				CN
+
+24-4E-7B   (hex)		Mighty Audio, Inc.
+B00000-BFFFFF     (base 16)		Mighty Audio, Inc.
+				707 Coeur d'Alene Ave
+				Venice  CA  90291
+				US
+
+24-4E-7B   (hex)		Shenzhen Ruixunyun Technology Co.,Ltd.
+300000-3FFFFF     (base 16)		Shenzhen Ruixunyun Technology Co.,Ltd.
+				Rm 311, 2Bldg.,Xunmei Technology Plaza, Keyuan Avenue, Nanshan District
+				Shenzhen  Guangdong   518057
+				CN
+
+24-4E-7B   (hex)		CHUNGHSIN TECHNOLOGY GROUP CO.,LTD
+C00000-CFFFFF     (base 16)		CHUNGHSIN TECHNOLOGY GROUP CO.,LTD
+				618-2#GONGREN WEST ROAD,JIAOJIANG AREA
+				TAIZHOU  ZHEJIANG  318000
+				CN
+
+1C-C0-E1   (hex)		Abbott Medical Optics Inc.
+200000-2FFFFF     (base 16)		Abbott Medical Optics Inc.
+				510 Cottonwood Drive
+				Milpitas  CA  95035
+				US
+
+1C-C0-E1   (hex)		Monument Labs, Inc.
+600000-6FFFFF     (base 16)		Monument Labs, Inc.
+				222 W. Merchandise Mart Plaza Ste 1212
+				Chicago  IL  60654
+				US
+
+4C-E1-73   (hex)		KTC(K-TEL)
+D00000-DFFFFF     (base 16)		KTC(K-TEL)
+				98, Sandan-ro 132beon-gil
+				Uijeongbu-si  Gyeonggi-do  11781
+				KR
+
+AC-64-DD   (hex)		Beijing Hamigua Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Beijing Hamigua Technology Co., Ltd.
+				Building C 02B-322, No.28A, Information Road, Haidian District
+				BEIJING  BEIJING  100000
+				CN
+
+4C-E1-73   (hex)		 Beijing Sutongwang E-Business Co., Ltd
+000000-0FFFFF     (base 16)		 Beijing Sutongwang E-Business Co., Ltd
+				 Room 1108, Qingyun modern building. NO.43 Bei San Huan Xi Road
+				Beijing  Beijing  100086
+				CN
+
+38-3A-21   (hex)		Mission Embedded GmbH
+C00000-CFFFFF     (base 16)		Mission Embedded GmbH
+				Gutheil-Schoder-Gasse 8-12
+				Wien  Wien  1100
+				AT
+
+F8-1D-78   (hex)		DACONS
+500000-5FFFFF     (base 16)		DACONS
+				90, Centum jungang-ro, Haeundae-gu
+				Busan    48059
+				KR
+
+38-3A-21   (hex)		Shanghai Greatwall Safety System Co.,Ltd
+300000-3FFFFF     (base 16)		Shanghai Greatwall Safety System Co.,Ltd
+				502B - Bloc ,No.168 Luoyang Str
+				ShangHai    201100
+				CN
+
+F8-1D-78   (hex)		Ophrys Systèmes
+900000-9FFFFF     (base 16)		Ophrys Systèmes
+				6 rue Valérien Perrin
+				Seyssinet    38170
+				FR
+
+70-F8-E7   (hex)		Dr. Simon Consulting GmbH
+300000-3FFFFF     (base 16)		Dr. Simon Consulting GmbH
+				Friedrichstr. 35
+				Göppingen    73033
+				DE
+
+F8-1D-78   (hex)		Xperio Labs Limited
+200000-2FFFFF     (base 16)		Xperio Labs Limited
+				Unit 3709, 37th Floor, Tower II, Lippo Centre, 89 Queensway, Admiralty,
+				Hong Kong  Hong Kong  Hong Kong
+				HK
+
+70-F8-E7   (hex)		TiVACI CORPORATION PTE LTD
+A00000-AFFFFF     (base 16)		TiVACI CORPORATION PTE LTD
+				264A Tanjong Katong Road
+				Singapore    437051
+				SG
+
+84-E0-F4   (hex)		AIMTRON CORPORATION
+C00000-CFFFFF     (base 16)		AIMTRON CORPORATION
+				555 S VERMONT ST
+				PALATINE  IL  60067
+				US
+
+84-E0-F4   (hex)		ASL Intercom B.V.
+300000-3FFFFF     (base 16)		ASL Intercom B.V.
+				Zonnebaan 42
+				Utrecht    3542EG
+				NL
+
+84-E0-F4   (hex)		Orchard Electronics Co., Ltd.
+B00000-BFFFFF     (base 16)		Orchard Electronics Co., Ltd.
+				8F,No.2,Lane 235,Bao-Chiao Rd., Hsin-Tien District,
+				New Taipei City    23145
+				TW
+
+C0-D3-91   (hex)		SAMSARA NETWORKS INC
+E00000-EFFFFF     (base 16)		SAMSARA NETWORKS INC
+				525 York St
+				San Francisco  CA  94110
+				US
+
+C0-D3-91   (hex)		Alpha Audiotronics, Inc.
+A00000-AFFFFF     (base 16)		Alpha Audiotronics, Inc.
+				401 Park Avenue South, Fl. 10
+				New York  NY  10016
+				US
+
+C0-D3-91   (hex)		Zhinengguo technology company limited
+C00000-CFFFFF     (base 16)		Zhinengguo technology company limited
+				Taiyueshangwu building, Luozhuang East road, Haidian District
+				beijing  beijing  100088
+				CN
+
+84-E0-F4   (hex)		ShenZhen Panrich Technology Limited
+000000-0FFFFF     (base 16)		ShenZhen Panrich Technology Limited
+				room 1321 qinghai building,beihuan rd,futian district
+				shenzhen    518034
+				CN
+
+58-E8-76   (hex)		TEM Mobile Limited
+900000-9FFFFF     (base 16)		TEM Mobile Limited
+				RM1703, North Block, Cangsong Building, Tairan 6 road, Futian District, Shenzhen.
+				Shenzhen  Guangdong  518000
+				CN
+
+C0-D3-91   (hex)		WiTagg, Inc
+500000-5FFFFF     (base 16)		WiTagg, Inc
+				1045 Linda Vista Avenue
+				Mountain View    94043
+				US
+
+F0-AC-D7   (hex)		Smart Power Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		Smart Power Technology Co., Ltd.
+				Room 102,Unit A,Building 32,No.999,Gaoxinqi Road, High Tech Industrial Development Zone,Nanchang,Jiangxi
+				 Nanchang City  Jiangxi Province  330096
+				CN
+
+58-E8-76   (hex)		PROBIT SRL
+400000-4FFFFF     (base 16)		PROBIT SRL
+				Pantelimon, 1
+				Bucharest    021591
+				RO
+
+F0-AC-D7   (hex)		Groupeer Technologies
+A00000-AFFFFF     (base 16)		Groupeer Technologies
+				17 avenue Georges 5
+				Paris  Ile-de-France  75008
+				FR
+
+28-36-38   (hex)		Shenzhen  Zhi Hua  Creative Technology  Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen  Zhi Hua  Creative Technology  Co., Ltd.
+				Bao`an District,  Shenzhen Baoan  District  Xixiang  Bao yuan road beach village in the 8-905 room
+				Shenzhen    518000
+				CN
+
+5C-F2-86   (hex)		Hangzhou Signwei Electronics Technology Co., Ltd
+000000-0FFFFF     (base 16)		Hangzhou Signwei Electronics Technology Co., Ltd
+				408 Room, 7 Cuibai Road,xihu District
+				 Hangzhou  Zhejiang  310012
+				CN
+
+28-36-38   (hex)		Panasonic System Solutions Europe
+100000-1FFFFF     (base 16)		Panasonic System Solutions Europe
+				Panasonic Marketing Europe GmbH, Hagenauer Str. 43
+				Wiesbaden    65203
+				DE
+
+8C-19-2D   (hex)		ELCO(TIANJIN)ELECTRONICS CO.,LTD.
+500000-5FFFFF     (base 16)		ELCO(TIANJIN)ELECTRONICS CO.,LTD.
+				NO. 12 4th XEDA Branch Road,XiQing Economic Development Area
+				Tianjin    300385
+				CN
+
+D0-D9-4F   (hex)		Teco Image Systems Co., Ltd.
+200000-2FFFFF     (base 16)		Teco Image Systems Co., Ltd.
+				2F., No. 1568-1, Chung Shan Road, Sec. 1, Kuang-In
+				Taoyuan    328
+				TW
+
+D0-D9-4F   (hex)		Hyundai Autohow
+600000-6FFFFF     (base 16)		Hyundai Autohow
+				Starwith 0914, Heungandaero427-38
+				Anyang  Gyunggi  14059
+				KR
+
+D0-D9-4F   (hex)		Hangzhou xiaoben technology co.,Ltd
+900000-9FFFFF     (base 16)		Hangzhou xiaoben technology co.,Ltd
+				Room 401,Building 5,No.503,Xingguo Road,Qianjiang Economic Development Area
+				Hangzhou  Zhejiang  311106
+				CN
+
+D0-D9-4F   (hex)		mycable GmbH
+100000-1FFFFF     (base 16)		mycable GmbH
+				Gartenstrasse 10
+				Neumuenster  Schleswig Holstein  24534
+				DE
+
+D0-D9-4F   (hex)		MAX Smart Home, LLC
+B00000-BFFFFF     (base 16)		MAX Smart Home, LLC
+				3830 Valley Centre Dr, STE 705-852
+				San Diego  CA  92130
+				US
+
+CC-D3-1E   (hex)		KEN A/S
+300000-3FFFFF     (base 16)		KEN A/S
+				Bøgebjergvej 60
+				Brobyværk  Denmark  5672
+				DK
+
+CC-D3-1E   (hex)		Neptune Systems
+200000-2FFFFF     (base 16)		Neptune Systems
+				15750 Vineyard Blvd Suite 150
+				MORGAN HILL  CA  95037
+				US
+
+CC-D3-1E   (hex)		SAMIM Co
+000000-0FFFFF     (base 16)		SAMIM Co
+				No. 47/19, Iranshahr St., Tehran, Iran
+				Tehran  Tehran  1581633939
+				IR
+
+CC-D3-1E   (hex)		Rondo Burgdorf AG
+100000-1FFFFF     (base 16)		Rondo Burgdorf AG
+				Heimiswilstrasse 42
+				Burgdorf    3400
+				CH
+
+C4-7C-8D   (hex)		ATI
+000000-0FFFFF     (base 16)		ATI
+				30 Jeffries Street
+				Boston  MA  02128
+				US
+
+68-91-D0   (hex)		femrice
+600000-6FFFFF     (base 16)		femrice
+				Rm408,Tower B,Jiahu Building,Shangdi 3rd Street,Haidian,Beijing,China
+				Beijing    100085
+				CN
+
+C4-7C-8D   (hex)		Labor Strauss Sicherungsanlagenbau GmbH
+E00000-EFFFFF     (base 16)		Labor Strauss Sicherungsanlagenbau GmbH
+				Wiegelestraße 36
+				Vienna    1230
+				AT
+
+C4-7C-8D   (hex)		LYNX INNOVATION LITIMED
+100000-1FFFFF     (base 16)		LYNX INNOVATION LITIMED
+				Unit 8A,331 Rosedale Road Albany,North Shore City 0632 Auckland,New Zealand
+				Auckland    0632
+				NZ
+
+68-91-D0   (hex)		Central Railway Manufacturing
+000000-0FFFFF     (base 16)		Central Railway Manufacturing
+				8933 Western Way Suite 8
+				Jacksonville  FL  32256
+				US
+
+68-91-D0   (hex)		Shenzhen NeaTech Intelligence Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Shenzhen NeaTech Intelligence Technology Co., Ltd.
+				C.8F, Bofook Lilang Industry Park, Bulan Road, Nanwan Street, Longgang
+				Shenzhen  Guangdong  518112
+				CN
+
+E0-B6-F5   (hex)		Shenzhen Xrinda Technology Ltd
+700000-7FFFFF     (base 16)		Shenzhen Xrinda Technology Ltd
+				Fl#15, Tianming Technology Building, Wushitou Road No.8, North high-tech park, Nanshan District, Shenzhen,P.R.China
+				Shenzhen  Guangdong  518052
+				CN
+
+E0-B6-F5   (hex)		BeSTAR Corporation
+000000-0FFFFF     (base 16)		BeSTAR Corporation
+				8th F/L, UNIQUEST B/D, 314, Hwangsaeul-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13591
+				KR
+
+50-FF-99   (hex)		Sea Eagle Optoelectronic Information Technology(Tianjin)co,Ltd
+900000-9FFFFF     (base 16)		Sea Eagle Optoelectronic Information Technology(Tianjin)co,Ltd
+				Nankai District
+				Tianjin  Tianjin  300000
+				CN
+
+98-6D-35   (hex)		DH Mechatronic AG
+300000-3FFFFF     (base 16)		DH Mechatronic AG
+				Georg-Sasse-Straße 28-32
+				Ammersbek  Schleswig-Holstein  22949
+				DE
+
+50-FF-99   (hex)		Simicon
+000000-0FFFFF     (base 16)		Simicon
+				Mendeleevskay str. 8
+				Saint-Petersburg    194044
+				RU
+
+50-FF-99   (hex)		LEGEND WINNER LIMITED
+600000-6FFFFF     (base 16)		LEGEND WINNER LIMITED
+				FLAT/RM 18-19 13/F HOLLYWOOD PLAZA 610 NATHAN ROAD MONGKOK
+				HONG kONG    00852
+				HK
+
+98-6D-35   (hex)		Shenzhen MALATA Mobile Communication Co.,LTD
+000000-0FFFFF     (base 16)		Shenzhen MALATA Mobile Communication Co.,LTD
+				25F, Malata Technology Building, No. 9998 Shennan Avenue, Hi-techPark, Nanshan District
+				Shenzhen  GUANGDONG  518057
+				CN
+
+7C-47-7C   (hex)		Dspread Technology (Beijing) Inc.
+A00000-AFFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+7C-47-7C   (hex)		BlueSmart Technology Corporation
+700000-7FFFFF     (base 16)		BlueSmart Technology Corporation
+				1451 Grant Road, Suite 200
+				Mountain View  CA  94042
+				US
+
+7C-47-7C   (hex)		Speedifi Inc
+D00000-DFFFFF     (base 16)		Speedifi Inc
+				1163 Kassel Terrace
+				Sunnyvale  CA  94089
+				
+
+5C-F2-86   (hex)		CHIPSEN Co.,Ltd.
+400000-4FFFFF     (base 16)		CHIPSEN Co.,Ltd.
+				Haan-ro 60
+				Gwang-myeong  Gyeonggi-do  14322
+				KR
+
+5C-F2-86   (hex)		iSon Tech
+100000-1FFFFF     (base 16)		iSon Tech
+				Rm. 3, 2F., No.417, Guangfu S. Rd., Sinyi Dist.
+				Taipei  Taiwan  110
+				TW
+
+38-FD-FE   (hex)		Inspero Inc
+600000-6FFFFF     (base 16)		Inspero Inc
+				C101, Ju'Er Hu Tong, Dong Cheng Qu
+				Beijing  Beijing  100001
+				CN
+
+38-FD-FE   (hex)		FUBA Automotive Electronics GmbH
+D00000-DFFFFF     (base 16)		FUBA Automotive Electronics GmbH
+				Tec Center 1
+				Bad Salzdetfurth    31162
+				DE
+
+38-B8-EB   (hex)		1.A Connect GmbH
+100000-1FFFFF     (base 16)		1.A Connect GmbH
+				Obere Seestrasse 13
+				Nohfelden  Saarland  66625
+				DE
+
+78-CA-83   (hex)		Konecranes
+E00000-EFFFFF     (base 16)		Konecranes
+				Koneenkatu 8
+				Hyvinkää    05801
+				FI
+
+38-B8-EB   (hex)		Aina Wireless Inc
+300000-3FFFFF     (base 16)		Aina Wireless Inc
+				Hub Salo, Tehdaskatu 6
+				Salo    24100
+				FI
+
+78-CA-83   (hex)		Huatune Technology (Shanghai) Co., Ltd.
+500000-5FFFFF     (base 16)		Huatune Technology (Shanghai) Co., Ltd.
+				No.8 Longxi RD
+				Shanghai  Changning District  200336
+				CN
+
+1C-88-79   (hex)		Sensys Networks, Inc.
+700000-7FFFFF     (base 16)		Sensys Networks, Inc.
+				1608 4th St. Suite 200
+				Berkeley  CA  94710
+				US
+
+1C-87-74   (hex)		Schawbel Technologies LLC
+600000-6FFFFF     (base 16)		Schawbel Technologies LLC
+				24 New England Executive Park, Suite 150
+				Burlington  MA  01803
+				US
+
+1C-87-74   (hex)		HABEY USA Inc.
+B00000-BFFFFF     (base 16)		HABEY USA Inc.
+				Room 205,Block A, Hua Feng Business Building ,Qian Jin 1st  Road, Baoan 25 Area, Shenzhen 518101, China.
+				Shenzhen  Guang Dong  518101
+				CN
+
+1C-88-79   (hex)		Shenzhen Xiaoxi Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Shenzhen Xiaoxi Technology Co., Ltd.
+				2F, Wing D, Building 5, Software Industry Base, No.14, Haitian 2nd Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+1C-88-79   (hex)		SHENZHENFREELINK ELECTRONIC CO.,LTD
+500000-5FFFFF     (base 16)		SHENZHENFREELINK ELECTRONIC CO.,LTD
+				3/F,Building A,Quanyongyuan industrial park,Langkou industrial area,Dalang,Bao'an District,Shenzhen,China 
+				Shenzhen    518000
+				CN
+
+1C-87-76   (hex)		Strone Technology
+C00000-CFFFFF     (base 16)		Strone Technology
+				13 Ellis Street
+				South Yarra  Victoria  3141
+				AU
+
+1C-87-76   (hex)		Jiangsu ETERN COMMUNICATION Co.,ltd
+A00000-AFFFFF     (base 16)		Jiangsu ETERN COMMUNICATION Co.,ltd
+				888 YUEXIU ROAD, LILI TOWN, WUJIANG DISTRICT, 
+				Suzhou  Jiangsu  215211
+				CN
+
+1C-87-76   (hex)		Zhuhai MYZR Technology Co.,Ltd
+500000-5FFFFF     (base 16)		Zhuhai MYZR Technology Co.,Ltd
+				Room 302,Area D2,National Hi-tech Zone,NO.1,Software Park Road
+				Zhuhai    519085
+				CN
+
+1C-88-79   (hex)		Xingtera China Ltd
+900000-9FFFFF     (base 16)		Xingtera China Ltd
+				88 Chenhui Rd Bldg 1 Ste 303
+				Shanghai    201203
+				CN
+
+1C-87-79   (hex)		Novetta
+400000-4FFFFF     (base 16)		Novetta
+				7921 Jones Branch Drive
+				McLean  VA  22102
+				US
+
+84-39-BE   (hex)		Neat S.r.l.
+500000-5FFFFF     (base 16)		Neat S.r.l.
+				via Edoardo D'Onofrio 304
+				Rome  ITALY  00155
+				IT
+
+84-39-BE   (hex)		Shenzhen Ramos Digital Technology Co,.Ltd.
+400000-4FFFFF     (base 16)		Shenzhen Ramos Digital Technology Co,.Ltd.
+				3F,Noth Block B, No.2 Kingdee Software Park, Keji South 12th Road, High-Tech Industrial Park, Nanshan District,Shenzhen 518057
+				Shenzhen  Guangdong  518000
+				CN
+
+40-A3-6B   (hex)		National Research Council of Canada
+500000-5FFFFF     (base 16)		National Research Council of Canada
+				717 White Lake Road
+				Kaleden  British Columbia  V0H1K0
+				CA
+
+40-A3-6B   (hex)		Embrionix Design Inc.
+A00000-AFFFFF     (base 16)		Embrionix Design Inc.
+				2120 Monterey, suite 200
+				Laval  Québec  H7L3S3
+				CA
+
+70-88-6B   (hex)		Chengdu Ophylink Communication Technology Ltd.
+500000-5FFFFF     (base 16)		Chengdu Ophylink Communication Technology Ltd.
+				3F,Bldg3,No.333,Yunhua Road,Hig-tech Zone
+				Chengdu  Sichuan  610041
+				CN
+
+70-88-6B   (hex)		CVnet
+200000-2FFFFF     (base 16)		CVnet
+				111, Maeyeong-ro 345beon-gil, Yeongtong-gu
+				Suwon-si  Gyeonggi-do  16703
+				KR
+
+CC-1B-E0   (hex)		Guangzhou Southelectric Power Science Technology Development Co.,Ltd.
+C00000-CFFFFF     (base 16)		Guangzhou Southelectric Power Science Technology Development Co.,Ltd.
+				No.1, zhongsuihua south street, Jiangnan BLVD,
+				Guangzhou  Guangdong  510310
+				CN
+
+A0-3E-6B   (hex)		Jining SmartCity Infotech Co.Ltd.
+D00000-DFFFFF     (base 16)		Jining SmartCity Infotech Co.Ltd.
+				Technology Center,Renchen District,
+				Jining  Shandong  272000
+				CN
+
+00-55-DA   (hex)		KoolPOS Inc.
+100000-1FFFFF     (base 16)		KoolPOS Inc.
+				5th Floor, B Section, Virgo Building,
+				Wuxi  Jiangsu  214135
+				CN
+
+CC-1B-E0   (hex)		Laserworld (Switzerland) AG
+400000-4FFFFF     (base 16)		Laserworld (Switzerland) AG
+				Kreuzlingerstrasse 5
+				Lengwil  TG  8574
+				CH
+
+00-55-DA   (hex)		Datapath Limited
+400000-4FFFFF     (base 16)		Datapath Limited
+				Bemrose House,
+				Derby  Derbyshire  DE21 6XQ
+				GB
+
+00-55-DA   (hex)		BroadSoft, Inc.
+800000-8FFFFF     (base 16)		BroadSoft, Inc.
+				550 S. Winchester Blvd. Suite 250
+				San Jose  California  95128
+				US
+
+00-55-DA   (hex)		Speechlab
+A00000-AFFFFF     (base 16)		Speechlab
+				Gaasterlandstraat 3
+				Amsterdam  NH  1079RH
+				NL
+
+C8-8E-D1   (hex)		Advanced Micro Controls Inc.
+B00000-BFFFFF     (base 16)		Advanced Micro Controls Inc.
+				20 Gear Dr.
+				Terryville  CT  06786
+				US
+
+C8-8E-D1   (hex)		Electronic Controls Design, Inc.
+800000-8FFFFF     (base 16)		Electronic Controls Design, Inc.
+				4287-B SE International Way
+				Milwaukie  OR  97222
+				US
+
+C8-8E-D1   (hex)		Focalcrest, Ltd.
+900000-9FFFFF     (base 16)		Focalcrest, Ltd.
+				Shenzhen City, Futian District Tairan nine road Haisong building B, room 1101
+				shenzhen  广东  518040
+				CN
+
+A0-3E-6B   (hex)		Shenzhen Neostra Technology Co.Ltd
+A00000-AFFFFF     (base 16)		Shenzhen Neostra Technology Co.Ltd
+				7th Building,Huaide Cuihai Industrial Park,Fuyong,
+				Shenzhen  Guangdong  518000
+				CN
+
+B0-C5-CA   (hex)		SunTech Medical, Inc.
+600000-6FFFFF     (base 16)		SunTech Medical, Inc.
+				507 Airport Blvd.
+				Morrisville  NC  27560
+				US
+
+DC-44-27   (hex)		Skywave Technology Co,.Ltd.
+200000-2FFFFF     (base 16)		Skywave Technology Co,.Ltd.
+				Beijing Chaoyang District, River Park 22-4-902
+				Beijing  Chaoyang  100107
+				CN
+
+DC-44-27   (hex)		EK-TEAM Elektronik- u. Kunststoff-Technik GmbH
+600000-6FFFFF     (base 16)		EK-TEAM Elektronik- u. Kunststoff-Technik GmbH
+				Schnackenburgallee 43
+				Hamburg  Hamburg  22525
+				DE
+
+DC-44-27   (hex)		EcoGuard AB
+700000-7FFFFF     (base 16)		EcoGuard AB
+				Radiatorvägen 11
+				ÖREBRO  -  70227
+				SE
+
+B0-C5-CA   (hex)		shanghai University Ding-Tech software Corp.,ltd
+400000-4FFFFF     (base 16)		shanghai University Ding-Tech software Corp.,ltd
+				No.9 Lane3,CaoDong Feeder Rd, Xuhui Area,shanghai,China
+				shanghai  shanghai  200235
+				CN
+
+78-C2-C0   (hex)		Shanghai Hanyi Technologies Co,.Ltd.
+C00000-CFFFFF     (base 16)		Shanghai Hanyi Technologies Co,.Ltd.
+				Room 2008, Feidiao International Building
+				Shanghai  Shanghai  200030
+				CN
+
+B4-37-D1   (hex)		NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.
+C00000-CFFFFF     (base 16)		NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.
+				No.1 Putian Road,Yuhuamenwai,Nanjing
+				Nan Jing  Jiang Su  210022
+				CN
+
+B4-37-D1   (hex)		Nanjing yuekong Intelligent Technology
+900000-9FFFFF     (base 16)		Nanjing yuekong Intelligent Technology
+				Room 923, No.2 Building, Deying International Square, No.222, Changhon
+				Nanjing  Jiangsu  210012
+				CN
+
+78-C2-C0   (hex)		Ningbo Sanxing Electric Co., Ltd.
+300000-3FFFFF     (base 16)		Ningbo Sanxing Electric Co., Ltd.
+				Fengwan No. 17, Cicheng Town,
+				Ningbo  Zhejiang  315033
+				CN
+
+78-C2-C0   (hex)		RONIX incorporated
+200000-2FFFFF     (base 16)		RONIX incorporated
+				904, 648, Seobusaet-gil,
+				SEOUL  GEUMCHEON-GU  153-803
+				KR
+
+74-F8-DB   (hex)		TBM CO., LTD.
+C00000-CFFFFF     (base 16)		TBM CO., LTD.
+				A-806, 282 Hakeui-Ro
+				Anyang-City  Gyeonggi-Do  431-810
+				KR
+
+74-F8-DB   (hex)		Bernard Krone Holding GmbH & Co. KG
+E00000-EFFFFF     (base 16)		Bernard Krone Holding GmbH & Co. KG
+				Heinrich-Krone-Str. 10
+				Spelle  Niedersachsen  48480
+				DE
+
+B4-37-D1   (hex)		Stratom, Inc.
+500000-5FFFFF     (base 16)		Stratom, Inc.
+				5375 Western Avenue Suite A
+				Boulder  Colorado  80301
+				US
+
+B4-37-D1   (hex)		KOMSIS ELEKTRONIK SISTEMLERI SAN. TIC. LTD.STI
+400000-4FFFFF     (base 16)		KOMSIS ELEKTRONIK SISTEMLERI SAN. TIC. LTD.STI
+				SERIF ALI MAH. TURKER CAD. MIRAS SOK.
+				ISTANBUL  UMRANIYE  34775
+				TR
+
+B4-37-D1   (hex)		eInfochips Limited
+800000-8FFFFF     (base 16)		eInfochips Limited
+				303 Parishram Building, 5/B Rashmi Society
+				Ahmedabad  Gujarat  380009
+				IN
+
+54-9A-11   (hex)		Elite Silicon Technology, Inc.
+B00000-BFFFFF     (base 16)		Elite Silicon Technology, Inc.
+				5F-B, No.24-2, Idustry E. Road IV.
+				Hsinchu  Taiwan  300
+				TW
+
+54-9A-11   (hex)		Tite, Inc.
+800000-8FFFFF     (base 16)		Tite, Inc.
+				11040 Bollinger Canyon Road, Suite E-107
+				San Ramon  CA  94582
+				US
+
+74-F8-DB   (hex)		Enercon Technologies
+000000-0FFFFF     (base 16)		Enercon Technologies
+				25 Northbrook Drive
+				Gray  ME  04039
+				US
+
+88-5D-90   (hex)		Unitac Technology Limited
+E00000-EFFFFF     (base 16)		Unitac Technology Limited
+				Unit 01, 10/F Carnival Comm. Bldg,
+				North Point  -  -
+				HK
+
+88-5D-90   (hex)		Shenzhen Speedrun Technologies Co.,Ltd.
+A00000-AFFFFF     (base 16)		Shenzhen Speedrun Technologies Co.,Ltd.
+				Room 303,Builing 5, GuiYuan Garden, NO.62 Airong Road, SheKou, NanShan District
+				ShenZhen  GuangDong  518067
+				CN
+
+74-F8-DB   (hex)		Capwave Technologies Inc
+B00000-BFFFFF     (base 16)		Capwave Technologies Inc
+				1501 Ocean Ave
+				Asbury Park  NJ  07712
+				US
+
+88-5D-90   (hex)		Creative Sensor Inc.
+800000-8FFFFF     (base 16)		Creative Sensor Inc.
+				9F., No.501, Sec. 6, Nanjing E. Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C.)
+				Taipei City  Taiwan  114
+				TW
+
+88-5D-90   (hex)		DAIDONG Industrial System Co., Ltd.
+200000-2FFFFF     (base 16)		DAIDONG Industrial System Co., Ltd.
+				153B 3L, Namdong Industrial Complex, 729-2, Gojan-dong
+				Incheon  Kyeong-gi  405-822
+				KR
+
+80-7B-85   (hex)		EFCO
+500000-5FFFFF     (base 16)		EFCO
+				10F-3, No.270, SEc 4  Chung Hsiao E Rd
+				Taipei    10674
+				TW
+
+80-7B-85   (hex)		Zhuhai TOP Intelligence Electric Co., Ltd.
+300000-3FFFFF     (base 16)		Zhuhai TOP Intelligence Electric Co., Ltd.
+				No.619,Huawei Road
+				Zhuhai City  Guangdong Province  519070
+				CN
+
+80-7B-85   (hex)		Hangzhou Synway Information Engineering Co., Ltd
+100000-1FFFFF     (base 16)		Hangzhou Synway Information Engineering Co., Ltd
+				  No.3756 Nanhuan Road,Hangzhou,Zhejiang,P.R.China
+				Hangzhou  Zhejiang  310053
+				CN
+
+80-7B-85   (hex)		Quantel USA, Inc.
+400000-4FFFFF     (base 16)		Quantel USA, Inc.
+				601 Haggerty Ln.
+				Bozeman  Montana  59715
+				US
+
+54-9A-11   (hex)		Alfen BV
+900000-9FFFFF     (base 16)		Alfen BV
+				Hefbrugweg
+				Almere  Netherlands  1332AP
+				NL
+
+54-9A-11   (hex)		Torrap Design Limited
+200000-2FFFFF     (base 16)		Torrap Design Limited
+				Unit 6, 19 Gloucester Road
+				Hurstville  New South Wales  2220
+				AU
+
+64-FB-81   (hex)		Securosys SA
+700000-7FFFFF     (base 16)		Securosys SA
+				Technopark 1
+				Zürich  ZH  8005
+				CH
+
+1C-CA-E3   (hex)		TengFeng
+500000-5FFFFF     (base 16)		TengFeng
+				3F, 1st Bldg, Yuejun Zhenxing lnd. Park,
+				Shenzhen  Guangdong  518000
+				CN
+
+80-E4-DA   (hex)		Guangzhou Pinzhong Electronic Technology CO., LTD
+100000-1FFFFF     (base 16)		Guangzhou Pinzhong Electronic Technology CO., LTD
+				Room 810, Yinglong Plaza
+				Guangzhou  Guangdong  510000
+				CN
+
+80-E4-DA   (hex)		Thurlby Thandar Instruments LTD
+200000-2FFFFF     (base 16)		Thurlby Thandar Instruments LTD
+				Glebe Road
+				Huntingdon  Cambridgeshire  PE29 7DR
+				GB
+
+1C-CA-E3   (hex)		SIREA
+A00000-AFFFFF     (base 16)		SIREA
+				69 Rue de L'industrie
+				CASTRES  Midi-Pyrénée  81100
+				FR
+
+2C-D1-41   (hex)		PIN SHANG LED Co., LTD.
+C00000-CFFFFF     (base 16)		PIN SHANG LED Co., LTD.
+				5-6Floor, Huilongda Industrial Park,shuitian community, ShiYan Town,bao’an district,
+				ShenZhen  Guangdong  518108
+				CN
+
+2C-D1-41   (hex)		Shanghai RW ELE&TEC CO.,LTD
+400000-4FFFFF     (base 16)		Shanghai RW ELE&TEC CO.,LTD
+				10th Floor, No 6, Lane 2500 Xiupu Road, Pudong New District, Shanghai
+				Shanghai  Shanghai  201315
+				CN
+
+90-C6-82   (hex)		PowerShield Limited
+D00000-DFFFFF     (base 16)		PowerShield Limited
+				12 Target Court
+				Glenfield  Auckland  0627
+				NZ
+
+2C-6A-6F   (hex)		Holjeron
+D00000-DFFFFF     (base 16)		Holjeron
+				9524 SW Tualatin Sherwood Rd.
+				Tualatin  OR  97062
+				US
+
+2C-6A-6F   (hex)		Sensity Systems
+C00000-CFFFFF     (base 16)		Sensity Systems
+				480 Oakmead Parkway
+				Sunnyvale  California  94085
+				US
+
+90-C6-82   (hex)		Neone, Inc.
+400000-4FFFFF     (base 16)		Neone, Inc.
+				2001 Travis Heights Blvd
+				Austin  Texas  78704
+				
+
+98-02-D8   (hex)		Navroom Beijing, China
+900000-9FFFFF     (base 16)		Navroom Beijing, China
+				Floor 22, Suite B, Xi'Ao Center, Datun Road
+				Beijing    100101
+				CN
+
+98-02-D8   (hex)		HySecurity
+A00000-AFFFFF     (base 16)		HySecurity
+				6623 South 228th Street
+				Kent  WA  98032
+				US
+
+98-02-D8   (hex)		Ormazabal Protection&Automation
+700000-7FFFFF     (base 16)		Ormazabal Protection&Automation
+				B/Basauntz, 2
+				Igorre  Bizkaia  48140
+				ES
+
+A0-BB-3E   (hex)		Beijing Techshino Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Beijing Techshino Technology Co., Ltd.
+				8/F, Building No. 1, Huihuang International Plaza, Shangdi 10th Street, Haidian District,
+				Beijing  Beijing  100085
+				CN
+
+98-02-D8   (hex)		Promicon Elektronik GmbH + Co.KG
+D00000-DFFFFF     (base 16)		Promicon Elektronik GmbH + Co.KG
+				Im Michelreis 6
+				Pliezhausen  Baden-Württemberg  72124
+				DE
+
+98-02-D8   (hex)		HANSHIN MEDICAL CO., LTD.
+B00000-BFFFFF     (base 16)		HANSHIN MEDICAL CO., LTD.
+				166, Pyeongcheonro, Bupyeong-gu
+				Incheon  Incheon  403-853
+				KR
+
+98-02-D8   (hex)		Stoerk-Tronic, Stoerk GmbH & Co.KG
+000000-0FFFFF     (base 16)		Stoerk-Tronic, Stoerk GmbH & Co.KG
+				Untere Waldplätze 6
+				Stuttgart  Baden-Wuerttemberg  70569
+				DE
+
+2C-6A-6F   (hex)		TINYCO
+400000-4FFFFF     (base 16)		TINYCO
+				3rd Fl., Dukwon Bldg., 1225-4 Gaepo-Dong
+				Seoul  Gangnam-Ku  135-963
+				KR
+
+2C-6A-6F   (hex)		Beep, Inc.
+600000-6FFFFF     (base 16)		Beep, Inc.
+				2519 Mission St
+				SAN FRANCISCO  CA  94110
+				US
+
+2C-6A-6F   (hex)		Cloudproject Generation Srl
+300000-3FFFFF     (base 16)		Cloudproject Generation Srl
+				Via Melchiorre Gioia 82
+				MILANO  MI  20125
+				IT
+
+A0-BB-3E   (hex)		SIMTEC Elektronik GmbH
+700000-7FFFFF     (base 16)		SIMTEC Elektronik GmbH
+				Glonner Strasse 5
+				Feldkirchen-Westerham  Bayern  83620
+				DE
+
+28-FD-80   (hex)		Millcode
+000000-0FFFFF     (base 16)		Millcode
+				Bergsgårdsliden 5
+				Halmstad  Halland  30272
+				SE
+
+2C-26-5F   (hex)		Itus Networks, LLC
+800000-8FFFFF     (base 16)		Itus Networks, LLC
+				6319 Nepo Drive
+				San Jose  CALIFORNIA  95119
+				US
+
+2C-26-5F   (hex)		Coremate Technical Co., Ltd
+700000-7FFFFF     (base 16)		Coremate Technical Co., Ltd
+				7F., No576, Sec.1, Minsheng N. Rd.,
+				Taoyuan    33393
+				TW
+
+2C-26-5F   (hex)		GTA Electronics Co., Ltd.
+400000-4FFFFF     (base 16)		GTA Electronics Co., Ltd.
+				9F., No.788, Zhongzheng Rd., Zhonghe Dist.
+				New Taipei City    23586
+				TW
+
+2C-26-5F   (hex)		Griessbach
+100000-1FFFFF     (base 16)		Griessbach
+				Im Biotechnologiepark
+				Luckenwalde    14943
+				DE
+
+28-FD-80   (hex)		Galileo, Inc.
+100000-1FFFFF     (base 16)		Galileo, Inc.
+				5-3-29 Tokiwagi
+				Ueda  Nagano  386-0027
+				JP
+
+A0-BB-3E   (hex)		Link Labs
+000000-0FFFFF     (base 16)		Link Labs
+				130 Holiday Court, Suite 100
+				Annapolis  Maryland  21401
+				US
+
+28-FD-80   (hex)		Grandway Technology (Shenzhen) Limited
+D00000-DFFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
+				Block 7, Zhu Keng Industrial Zone
+				Ping Shan District  Shenzhen  518118
+				CN
+
+28-FD-80   (hex)		University of York
+700000-7FFFFF     (base 16)		University of York
+				York Neuroimaging Centre, The Biocentre
+				York  Yorkshire  YO10 5NY
+				GB
+
+F8-02-78   (hex)		Luxul Technology Inc
+A00000-AFFFFF     (base 16)		Luxul Technology Inc
+				2F., No.3, Yuandong Rd
+				New Taipei City  Taiwan  220
+				TW
+
+0C-EF-AF   (hex)		Rotel
+900000-9FFFFF     (base 16)		Rotel
+				43-59 Queens Road East
+				Wanchai  Hong Kong  00000
+				HK
+
+0C-EF-AF   (hex)		Firmware Design AS
+600000-6FFFFF     (base 16)		Firmware Design AS
+				Grannes Terrasse 45
+				Hafrsfjord  Rogaland  N-4044
+				NO
+
+F8-02-78   (hex)		Reason Tecnologia SA
+100000-1FFFFF     (base 16)		Reason Tecnologia SA
+				 Rua Joaquim Carneiro, 192
+				Florianópolis  Santa Catarina  8811120
+				BR
+
+F8-02-78   (hex)		Dueton Systems s.r.o.
+D00000-DFFFFF     (base 16)		Dueton Systems s.r.o.
+				Varsavska 290/13
+				Prague 2  Vinohrady  120 00
+				CZ
+
+A4-4F-29   (hex)		LUCEOR
+200000-2FFFFF     (base 16)		LUCEOR
+				2 Place Jules Gevelot
+				ISSY LES MOULINEAUX  IDF  92138
+				FR
+
+A4-4F-29   (hex)		Olssen B.V.
+100000-1FFFFF     (base 16)		Olssen B.V.
+				Schrank 9
+				Hardinxveld-Giessendam  Zuid-Hollland  3371KJ
+				NL
+
+A4-4F-29   (hex)		DGC Access AB
+400000-4FFFFF     (base 16)		DGC Access AB
+				Sveavägen 145
+				Stockholm  Stockholms Län  113 46
+				SE
+
+A4-4F-29   (hex)		Selektro Power Inc
+600000-6FFFFF     (base 16)		Selektro Power Inc
+				3610 NW 115th Ave
+				Doral  Florida  33178
+				US
+
+A4-4F-29   (hex)		Shanghai KuanYu Industrial Network Equipment Co.,Ltd
+500000-5FFFFF     (base 16)		Shanghai KuanYu Industrial Network Equipment Co.,Ltd
+				15/F,No.3003,Baoyang Road, Baoshan District,
+				  Shanghai  201901
+				CN
+
+3C-39-E7   (hex)		chipsguide technology Co.,LTD
+B00000-BFFFFF     (base 16)		chipsguide technology Co.,LTD
+				NanGuang road, DongHua design house 758 room
+				Shenzhen  Guangdong  518000
+				CN
+
+3C-39-E7   (hex)		ELSA Japan Inc.
+300000-3FFFFF     (base 16)		ELSA Japan Inc.
+				Mita UT Bldg., 3-42-10 Shiba,
+				Minato-ku,  Tokyo  105-0014
+				JP
+
+0C-EF-AF   (hex)		Engineering Center ENERGOSERVICE
+300000-3FFFFF     (base 16)		Engineering Center ENERGOSERVICE
+				Kotlasskaya 26
+				Arkhangelsk  Arkhangelsk region  163046
+				RU
+
+10-07-23   (hex)		Beijing Assem Technology Co., ltd
+100000-1FFFFF     (base 16)		Beijing Assem Technology Co., ltd
+				Floor 6, Jinglong International Plaza,
+				Chaoyang District  Beijing  100107
+				CN
+
+D0-22-12   (hex)		GNS-GmbH
+A00000-AFFFFF     (base 16)		GNS-GmbH
+				Adenauerstr. 18
+				Wuerselen  NRW  52146
+				DE
+
+D0-22-12   (hex)		Xperio Labs Ltd.
+C00000-CFFFFF     (base 16)		Xperio Labs Ltd.
+				Unit 3709, 37th Floor, Tower II,
+				Hong Kong  Hong Kong  HONG KONG
+				HK
+
+10-07-23   (hex)		ESTONE TECHNOLOGY INC
+600000-6FFFFF     (base 16)		ESTONE TECHNOLOGY INC
+				21015 Commerce Point Drive Walnut, CA 91789
+				Los Angeles  California  91789
+				US
+
+E8-18-63   (hex)		DongGuan Pengxun Electronics Technology Co., Ltd.
+300000-3FFFFF     (base 16)		DongGuan Pengxun Electronics Technology Co., Ltd.
+				10th floor, Jinhui Bussiness Building,
+				DongGuan City  GuangDong Province  523850
+				CN
+
+E8-18-63   (hex)		Guangzhou Tianyi Electronics Co., Ltd
+400000-4FFFFF     (base 16)		Guangzhou Tianyi Electronics Co., Ltd
+				A3, Hongtu Industrial Plot, Dashi town,
+				 Guangzhou  Guangdong,  511430,
+				CN
+
+B8-D8-12   (hex)		ZheJiang FangTai Electirc Co., Ltd
+E00000-EFFFFF     (base 16)		ZheJiang FangTai Electirc Co., Ltd
+				B11 Block, Science and Technology Park
+				Hangzhou  ZheJiang  310024
+				CN
+
+E8-18-63   (hex)		DigiMagus Technology (Shenzhen) Co., Ltd
+000000-0FFFFF     (base 16)		DigiMagus Technology (Shenzhen) Co., Ltd
+				1206, Shenzhen University-town Business Park, Lishan Road
+				ShenZhen  GuangDong  518055
+				CN
+
+74-E1-4A   (hex)		aritec gmbh
+800000-8FFFFF     (base 16)		aritec gmbh
+				Vorstadtgasse 15
+				Maienfeld  Outside U.S./Canada  7304
+				CH
+
+B8-D8-12   (hex)		iModesty Technology Corp.
+300000-3FFFFF     (base 16)		iModesty Technology Corp.
+				3F-1, No.76, Sec.2 Jiafeng S.Rd.,
+				Zhubei County  Taiwan  302
+				TW
+
+E8-18-63   (hex)		JDM Mobile Internet Solution(Shanghai) Co., Ltd.
+A00000-AFFFFF     (base 16)		JDM Mobile Internet Solution(Shanghai) Co., Ltd.
+				2F, Building D, BenQ Plaza, No.207
+				Shanghai  Shanghai  200335
+				CN
+
+B8-D8-12   (hex)		Entotem LTD
+900000-9FFFFF     (base 16)		Entotem LTD
+				Unit 3, South Stanmore Stables,
+				Newbury  Berks  RG20 8SR
+				GB
+
+B8-D8-12   (hex)		XIAMEN XINDECO LTD.
+500000-5FFFFF     (base 16)		XIAMEN XINDECO LTD.
+				5F.,XINXI BLDG.,HULI
+				Xiamen  Fujian  361000
+				CN
+
+74-E1-4A   (hex)		AStar Design Service Technologies Co., Ltd.
+A00000-AFFFFF     (base 16)		AStar Design Service Technologies Co., Ltd.
+				3F, No219-1, Jianguo Rd. Sindian Dist.
+				New Taipei City  Taiwan  23142
+				TW
+
+E8-18-63   (hex)		ARTECH SOLUTION CO.,LTD
+600000-6FFFFF     (base 16)		ARTECH SOLUTION CO.,LTD
+				470/11 Pattanakarn Rd.,Suanluang，Bkk.10250 Thailand
+				Bangkok  Bangkok  10250
+				TH
+
+BC-66-41   (hex)		Shenzhen Crave Communication Co.,ltd
+C00000-CFFFFF     (base 16)		Shenzhen Crave Communication Co.,ltd
+				8th Block, Dongfangming Industry Park
+				Shenzhen  GuangDong  518000
+				CN
+
+BC-66-41   (hex)		Lucent Trans Electronics Co., Ltd
+E00000-EFFFFF     (base 16)		Lucent Trans Electronics Co., Ltd
+				9F-1, NO.16, CHIEN PAH RD.,
+				NEW TAIPEI CITY    23511
+				TW
+
+E4-95-6E   (hex)		eZeLink LLC
+900000-9FFFFF     (base 16)		eZeLink LLC
+				Office 1104, Aspect Tower, Executive Towers, Business Bay
+				Dubai  Dubai  111581
+				AE
+
+BC-66-41   (hex)		VSN Mobil
+700000-7FFFFF     (base 16)		VSN Mobil
+				1975 E. Sunrise Blbvd., #400
+				Fort Lauderdale  Florida  33304
+				US
+
+58-FC-DB   (hex)		SWARCO TRAFFIC SYSTEMS GMBH
+B00000-BFFFFF     (base 16)		SWARCO TRAFFIC SYSTEMS GMBH
+				Kelterstr. 67
+				Unterensingen  Baden-Württemberg  72669
+				DE
+
+B0-1F-81   (hex)		TAIWAN Anjie Electronics Co.,Ltd.
+D00000-DFFFFF     (base 16)		TAIWAN Anjie Electronics Co.,Ltd.
+				One 7th Floor,No.125,Lane 235, Pao Chiao Xindian District
+				New Taipei City  Xindian District  231
+				TW
+
+BC-66-41   (hex)		Sidus Novum Sp. z o. o.
+B00000-BFFFFF     (base 16)		Sidus Novum Sp. z o. o.
+				Ul. Ogrodowa 3B/203
+				Zielona Góra  Lubuskie  65462
+				PL
+
+58-FC-DB   (hex)		Xmodus Systems GmbH
+A00000-AFFFFF     (base 16)		Xmodus Systems GmbH
+				Reiherstrasse 2
+				Haiger  Hessen  35708
+				DE
+
+B0-1F-81   (hex)		SHENZHEN GRID TECHNOLOGY CO.,LTD
+500000-5FFFFF     (base 16)		SHENZHEN GRID TECHNOLOGY CO.,LTD
+				6thfloor,jinda Technology Center,No.8 of kefeng Road ,Science and Technology Park,NanshanDist,Shenzhen
+				shenzhen  guangdong  518054
+				CN
+
+B0-1F-81   (hex)		Private
+200000-2FFFFF     (base 16)		Private
+
+F4-0E-11   (hex)		Shenzhen Grandsun Electronic Co.,Ltd.
+700000-7FFFFF     (base 16)		Shenzhen Grandsun Electronic Co.,Ltd.
+				Gaoqiao Industrial Zone,Baishitang Village,
+				Shenzhen  Guangdong  518116
+				CN
+
+F4-0E-11   (hex)		Elektronika Naglic d.o.o.
+E00000-EFFFFF     (base 16)		Elektronika Naglic d.o.o.
+				Goricica pri Ihanu 44
+				Domzale    1230
+				SI
+
+F4-0E-11   (hex)		NIHON MEGA LOGIC CO.,LTD.
+C00000-CFFFFF     (base 16)		NIHON MEGA LOGIC CO.,LTD.
+				Mitsui-Seimei-Kameido BLDG. 1F
+				Koutou-ku  Tokyo  136-0071
+				JP
+
+B0-1F-81   (hex)		Sound United
+300000-3FFFFF     (base 16)		Sound United
+				11433 Cronridge Drive
+				Owings Mills  Maryland  21117
+				US
+
+F4-0E-11   (hex)		E-SONG
+500000-5FFFFF     (base 16)		E-SONG
+				BUSAN TECHNOPARK Head office & Factory: Unit 102
+				Busan  N/A  618-230
+				KR
+
+F4-0E-11   (hex)		Shenzhen headsun technology
+300000-3FFFFF     (base 16)		Shenzhen headsun technology
+				3 Floor, C Building, NanYuan Industrial
+				ShenZhen  GuangDong  518000
+				CN
+
+14-1F-BA   (hex)		Swiss Electronic (Shenzhen) Co., Ltd
+C00000-CFFFFF     (base 16)		Swiss Electronic (Shenzhen) Co., Ltd
+				2712 Great China International Exchange Square
+				Shenzhen  Guangdong  518026
+				CN
+
+14-1F-BA   (hex)		Shenzhen CATIC Information Technology Industry Co.,Ltd
+800000-8FFFFF     (base 16)		Shenzhen CATIC Information Technology Industry Co.,Ltd
+				3/FL, Block 1, Shenzhen Software Park, No.2, Gaoxin Middle Street,Nanshan
+				Shen Zhen  Guang Dong  518057
+				CN
+
+14-1F-BA   (hex)		Winsonic Electronics Co., Ltd.
+A00000-AFFFFF     (base 16)		Winsonic Electronics Co., Ltd.
+				No. 290-1, Wen Chung Rd.,
+				Taoyuan City    330
+				TW
+
+14-1F-BA   (hex)		GloQuad
+100000-1FFFFF     (base 16)		GloQuad
+				301 Biz Incubation Center, GSBC
+				Suwon-si  Gyeonggi-do  443-270
+				KR
+
+BC-34-00   (hex)		Parlay Labs dba Highfive
+C00000-CFFFFF     (base 16)		Parlay Labs dba Highfive
+				471 Emerson St.
+				Palo Alto  California  94301
+				US
+
+7C-70-BC   (hex)		XD-GE Automation CO.,LTD
+100000-1FFFFF     (base 16)		XD-GE Automation CO.,LTD
+				101# Fengcheng 6 Road
+				Xi'an  ShanXi  710016
+				CN
+
+A4-3B-FA   (hex)		ALSTOM Strongwish (Shenzhen) Co., Ltd
+B00000-BFFFFF     (base 16)		ALSTOM Strongwish (Shenzhen) Co., Ltd
+				5F, Building No.6, Keji Middle 2 Road, High-Tech Industrial Park
+				Shenzhen  Guangdong  518057
+				CN
+
+A4-3B-FA   (hex)		The Magstim Company Ltd.
+E00000-EFFFFF     (base 16)		The Magstim Company Ltd.
+				Spring Gardens
+				Whitland  Carmarthenshire  SA34 0HR
+				GB
+
+BC-34-00   (hex)		IPLINK Technology Corp
+100000-1FFFFF     (base 16)		IPLINK Technology Corp
+				8F-5, No. 347, Jingsin St.
+				New Taipei City    23582
+				TW
+
+A4-3B-FA   (hex)		Plus One Japan Ltd.
+A00000-AFFFFF     (base 16)		Plus One Japan Ltd.
+				Storia Akasaka 410,
+				Minato-ku  Tokyo  1080052
+				JP
+
+A4-3B-FA   (hex)		SHANGHAI XIETONG TECHNOLOGY INC.
+C00000-CFFFFF     (base 16)		SHANGHAI XIETONG TECHNOLOGY INC.
+				423 Wuning Road,Shanghai
+				  Shanghai  200063
+				CN
+
+D0-76-50   (hex)		DAIKEN AUTOMACAO LTDA
+100000-1FFFFF     (base 16)		DAIKEN AUTOMACAO LTDA
+				 AVENIDA SAO GABRIEL,481
+				COLOMBO  PARANA  83404000
+				BR
+
+D0-76-50   (hex)		PelKorea
+B00000-BFFFFF     (base 16)		PelKorea
+				60, Haan-ro
+				Gwangmyeong-si  Gyeonggi-do  KS009
+				KR
+
+D0-76-50   (hex)		InventDesign
+A00000-AFFFFF     (base 16)		InventDesign
+				Valschermkade 29
+				Amsterdam  Noord-Holland  1059CD
+				NL
+
+A4-3B-FA   (hex)		Powell Industries
+200000-2FFFFF     (base 16)		Powell Industries
+				201-55 Gostick Place
+				North Vancouver  British Columbia  V7M 3N2
+				
+
+D0-76-50   (hex)		ENCORED Technologies, Inc.
+700000-7FFFFF     (base 16)		ENCORED Technologies, Inc.
+				8F KTS, 215 Bongeunsa-ro
+				  Seoul  135-831
+				KR
+
+74-19-F8   (hex)		Trend-tech Technology Co., Limited
+100000-1FFFFF     (base 16)		Trend-tech Technology Co., Limited
+				NO. 609, Noble Plaza, Qianjin YiLu
+				Shenzhen  Guangdong  518101
+				CN
+
+74-19-F8   (hex)		Cloudvue Technologies Corporation
+400000-4FFFFF     (base 16)		Cloudvue Technologies Corporation
+				830 Stewart Drive, Suite 115
+				Sunnyvale  CA  94085
+				US
+
+74-19-F8   (hex)		Essential Trading Systems Corp
+300000-3FFFFF     (base 16)		Essential Trading Systems Corp
+				9 Austin Drive
+				Marlborough  CT  06447
+				US
+
+4C-4B-F9   (hex)		Shenzhen HommPro Technology Co.,Ltd
+200000-2FFFFF     (base 16)		Shenzhen HommPro Technology Co.,Ltd
+				5F,Building B,Zhengchangda Digital Technology Park,Jian'an Road,Tangwei community,Fuhai street,Bao'an District
+				Shenzhen  GuangDong  518000
+				CN
+
+40-11-75   (hex)		Beijing Hexinruitong Electric Power Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Beijing Hexinruitong Electric Power Technology Co., Ltd.
+				Room 306, 3F, No.16, Shangdi 5 Street, Haidian District
+				Beijing  Beijing  100085
+				CN
+
+40-11-75   (hex)		Guangzhou RALID Information System Co.Ltd
+700000-7FFFFF     (base 16)		Guangzhou RALID Information System Co.Ltd
+				ROOM 201 at 2nd floor in 2nd Building,No.602, Guangshan 2nd Road, Tianhe District
+				Guangzhou  Guangdong  510663
+				CN
+
+40-11-75   (hex)		NanJing HuaStart Network Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		NanJing HuaStart Network Technology Co.,Ltd.
+				Room 568,Longmian Road,Jiangning District
+				Nanjing   Jiang Su  210000
+				CN
+
+40-11-75   (hex)		Chongqing IQIYI Intelligence Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Chongqing IQIYI Intelligence Technology Co., Ltd.
+				Yongli International Center, Sanlitun, Chaoyang District
+				Beijing  Beijing  100027
+				CN
+
+10-DC-B6   (hex)		Annapurna labs
+400000-4FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+10-DC-B6   (hex)		Shenzhen Sunwoda intelligent hardware Co.,Ltd
+E00000-EFFFFF     (base 16)		Shenzhen Sunwoda intelligent hardware Co.,Ltd
+				No.6-6,Yan Shan Rd.,Baoan District,Shenzhen City,China
+				Shenzhen  Guangdong  518105
+				CN
+
+10-DC-B6   (hex)		Prolan Zrt.
+600000-6FFFFF     (base 16)		Prolan Zrt.
+				Szentendrei út 1-3.
+				Budakalasz    2011
+				HU
+
+54-A4-93   (hex)		Shenzhen C & D Electronics Co., Ltd.
+400000-4FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+10-DC-B6   (hex)		Sanofi (Beijing) Pharmaceutical Co., Ltd.
+800000-8FFFFF     (base 16)		Sanofi (Beijing) Pharmaceutical Co., Ltd.
+				No.7, Xingsheng Street, Beijing Economic and Technological Development Zone
+				Beijing  Beijing  100176
+				CN
+
+10-DC-B6   (hex)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
+200000-2FFFFF     (base 16)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
+				AVENIDA TORQUATO TAPAJOS, 7503 TARUMA GALPAO 2 - CNPJ: 07.200.194/0003-80
+				MANAUS  AMAZONAS  69041-025
+				BR
+
+54-A4-93   (hex)		ShenZhen Smart&Aspiration Co.,LTD
+100000-1FFFFF     (base 16)		ShenZhen Smart&Aspiration Co.,LTD
+				Guanlan
+				ShenZhen  GuangDong  518000
+				CN
+
+54-A4-93   (hex)		Chengdu EVECCA Technology Co.,Ltd.
+800000-8FFFFF     (base 16)		Chengdu EVECCA Technology Co.,Ltd.
+				Floor 20, Building B, Xingchen International, No.555, Middle Section of Yizhou Avenue
+				Chengdu  Sichuan  610015
+				CN
+
+54-A4-93   (hex)		AUSOUNDS INTELLIGENCE, LLC
+500000-5FFFFF     (base 16)		AUSOUNDS INTELLIGENCE, LLC
+				929 108TH AVE NE STE 1200, BELLEVUE, WA, 98004-4787, UNITED STATES
+				BELLEVUE  WA  98004
+				US
+
+54-A4-93   (hex)		ASSEM TECHNOLOGY CO.,LTD.
+D00000-DFFFFF     (base 16)		ASSEM TECHNOLOGY CO.,LTD.
+				No. 17, Minquan St., Tucheng Dist.,
+				New Taipei City  Taiwan (R.O.C.)  236
+				TW
+
+04-D1-6E   (hex)		Elotec Fischer Elektronik GmbH
+D00000-DFFFFF     (base 16)		Elotec Fischer Elektronik GmbH
+				Nordgaustraße 20
+				Furth im Wald  Bavaria  93437
+				DE
+
+54-A4-93   (hex)		Nederman Holding AB
+E00000-EFFFFF     (base 16)		Nederman Holding AB
+				Sydhamnsgatan 2
+				Helsingborg  Sweden  252 28
+				SE
+
+44-03-77   (hex)		OMNISENSE SYSTEMS PRIVATE LIMITED TAIWAN BRANCH
+D00000-DFFFFF     (base 16)		OMNISENSE SYSTEMS PRIVATE LIMITED TAIWAN BRANCH
+				7th Floor, No. 10, Lane 30, Lane 358, Ruiguang Road, Neihu District, Taipei, Taiwan
+				Taipei    114
+				TW
+
+50-62-55   (hex)		Ufanet SC
+000000-0FFFFF     (base 16)		Ufanet SC
+				bldg 4/3, Prospect Octyabrya
+				Ufa    450001
+				RU
+
+64-31-39   (hex)		Dongguan Huili electroacoustic Industrial Co.,ltd
+700000-7FFFFF     (base 16)		Dongguan Huili electroacoustic Industrial Co.,ltd
+				Dalang Town, Biyun Cai Bai Cun East Second Street 66,A4 Building 501
+				Dongguan  Guangdong  523770
+				CN
+
+50-62-55   (hex)		Southern Ground Audio LLC
+900000-9FFFFF     (base 16)		Southern Ground Audio LLC
+				101 Gardner Park
+				Peachtree City  GA  30269
+				US
+
+C4-95-4D   (hex)		Shenzhen Xtooltech Co., Ltd
+900000-9FFFFF     (base 16)		Shenzhen Xtooltech Co., Ltd
+				10574 Acacia St, Suite D4
+				Rancho Cucamonga  CA  91730
+				US
+
+C4-95-4D   (hex)		Shen Zhen Euse Technology Co.,Ltd
+200000-2FFFFF     (base 16)		Shen Zhen Euse Technology Co.,Ltd
+				4/F, Block A2, Xinhao First Industrial Zone,  Qiaotou Community, Fuhai Street
+				Shenzhen  Guangdong  518103
+				CN
+
+A0-22-4E   (hex)		ProPhotonix
+300000-3FFFFF     (base 16)		ProPhotonix
+				3020 Euro Business Park
+				Co Cork  Little Island  n/A
+				IE
+
+A0-22-4E   (hex)		Applied Information, Inc.
+700000-7FFFFF     (base 16)		Applied Information, Inc.
+				4411 Suwanee Dam Rd, Suite 510
+				Suwanee  GA  30024
+				US
+
+20-0A-0D   (hex)		Netinovo Technologies(Shenzhen) Ltd
+200000-2FFFFF     (base 16)		Netinovo Technologies(Shenzhen) Ltd
+				101,201,301,Bldg8,No.1 industry zone,Shanmen Community,Yanluo Street
+				Shenzhen  Guangdong  518105
+				CN
+
+20-0A-0D   (hex)		bcheck NV
+800000-8FFFFF     (base 16)		bcheck NV
+				Livornostraat 66/12
+				Brussels  Brussels  1000
+				BE
+
+40-2C-76   (hex)		Suteng Innovation Technology Co., Ltd.
+800000-8FFFFF     (base 16)		Suteng Innovation Technology Co., Ltd.
+				10-11/F, Block 3, Chongwen Garden, Nanshan IPark, 3370 Liuxian Avenue, Nanshan District
+				Shenzhen    518000
+				CN
+
+40-2C-76   (hex)		Lista AG
+000000-0FFFFF     (base 16)		Lista AG
+				Fabrikstrasse 1
+				Erlen  TG  8586
+				CH
+
+40-2C-76   (hex)		Zhejiang Guoli Security Technology Co., Ltd.
+700000-7FFFFF     (base 16)		Zhejiang Guoli Security Technology Co., Ltd.
+				Room (1-1-178), No. 150, Zhangpu Road, Jiushigang Town, Haishu District
+				Ningbo  Zhejiang  315000
+				CN
+
+40-2C-76   (hex)		Annapurna labs
+900000-9FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+50-DE-19   (hex)		BRAINWARE TERAHERTA INFORMATION TECHNOLOGY CO.,LTD.
+B00000-BFFFFF     (base 16)		BRAINWARE TERAHERTA INFORMATION TECHNOLOGY CO.,LTD.
+				F3 and F4 of Innovation Industrial Park Phase II in Hefei High-tech Zone
+				Hefei   Anhui   230000
+				CN
+
+40-2C-76   (hex)		Guangzhou LANGO Electronics Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Guangzhou LANGO Electronics Technology Co., Ltd.
+				136#, Gaopu Road, Tianhe District
+				Guangzhou  Guangdong  510663
+				CN
+
+50-DE-19   (hex)		Penny & Giles Aerospace Ltd
+D00000-DFFFFF     (base 16)		Penny & Giles Aerospace Ltd
+				15 Enterprise Way
+				Christchurch  Dorset  BH23 6HH
+				GB
+
+50-DE-19   (hex)		Bliq B.V.
+500000-5FFFFF     (base 16)		Bliq B.V.
+				Hogeweyselaan 145
+				Weesp    1382JK
+				NL
+
+3C-FA-D3   (hex)		AMobile Solutions (Xiamen) CO. , LTD.
+D00000-DFFFFF     (base 16)		AMobile Solutions (Xiamen) CO. , LTD.
+				Room 105A, building 5#, No. 20-24 East Huoju  Road,  Huoju Park, Xiamen Torch Hi-tech zone
+				Xiamen    361006
+				CN
+
+3C-FA-D3   (hex)		Energous Corporation
+800000-8FFFFF     (base 16)		Energous Corporation
+				3590 N. First Street
+				San Jose  CA  95134
+				US
+
+3C-FA-D3   (hex)		Gulf Security Technology Co., Ltd
+500000-5FFFFF     (base 16)		Gulf Security Technology Co., Ltd
+				80 Changjiang East Road, Economic & Technology Development Zone
+				Qinhuangdao  Hebei  066000
+				CN
+
+3C-FA-D3   (hex)		Home Control AS
+000000-0FFFFF     (base 16)		Home Control AS
+				Postboks 1618 Vika
+				Oslo    0119 
+				NO
+
+B0-B3-53   (hex)		HANMECIPS CO.
+900000-9FFFFF     (base 16)		HANMECIPS CO.
+				17, Alphacity 1-ro 31-gil, Suseong-gu, Daegu, Republic of Korea
+				TAEGU  TAEGU/053  ASIKRKS002TAEGU
+				KR
+
+B0-B3-53   (hex)		Zenlayer
+500000-5FFFFF     (base 16)		Zenlayer
+				21680 GATEWAY CENTER DR., Suite#350
+				DIAMOND BAR  CA  91765
+				US
+
+90-E2-FC   (hex)		ShenZhen Temwey Innovation Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		ShenZhen Temwey Innovation Technology Co.,Ltd.
+				Room 1008, 10/F, Bld.B, Bantian International Centre, No. 5 South Huancheng Road, Bantian Street of Shenzhen Longgang District
+				SHENZHEN  GUANGDONG  518129
+				CN
+
+90-E2-FC   (hex)		Beijing Lanxum Computer Technology CO.,LTD.
+D00000-DFFFFF     (base 16)		Beijing Lanxum Computer Technology CO.,LTD.
+				3A Floor,BlockB,Technology Fortune Center,No 8 Xueqing Road,Haidian District,
+				Beijing  Beijing  100192
+				CN
+
+90-E2-FC   (hex)		Dongguan Kangyong electronics technology Co. Ltd
+400000-4FFFFF     (base 16)		Dongguan Kangyong electronics technology Co. Ltd
+				No 9,Yincheng 1st Road, Xiabian Village, Chang’an Town
+				Dongguan  GuangDong  523877
+				CN
+
+90-E2-FC   (hex)		bitsensing Inc.
+800000-8FFFFF     (base 16)		bitsensing Inc.
+				165, Yeoksam-ro,
+				Gangnam-gu, Seoul,  Republic of Korea  06247
+				KR
+
+90-E2-FC   (hex)		Stanley Security
+C00000-CFFFFF     (base 16)		Stanley Security
+				8350 Sunlight Drive
+				Fishers  IN  46037
+				US
+
+14-AE-85   (hex)		iSolution Technologies Co.,Ltd.
+D00000-DFFFFF     (base 16)		iSolution Technologies Co.,Ltd.
+				5F,Bldg #6, Zhongguan Honghualing Industrial South Park
+				Shenzhen  Guangdong  518055
+				CN
+
+7C-BC-84   (hex)		VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
+D00000-DFFFFF     (base 16)		VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
+				B3, Bredon House, 321, Tettenhall Road, Tettenhall
+				Wolverhampton  West Midlands  WV6 0JZ
+				GB
+
+64-62-66   (hex)		Pass & Seymour, Inc d/b/a Legrand
+600000-6FFFFF     (base 16)		Pass & Seymour, Inc d/b/a Legrand
+				50 Boyd Ave
+				Syracuse  NY  13209
+				US
+
+64-62-66   (hex)		FaceHeart Inc.
+300000-3FFFFF     (base 16)		FaceHeart Inc.
+				Rm. 8, 19F., No.118, Ciyun Rd., East Dist.
+				Hsinchu  Taiwan  300
+				TW
+
+64-62-66   (hex)		Sensoro Co., Ltd.
+A00000-AFFFFF     (base 16)		Sensoro Co., Ltd.
+				7F D-Block, Lei Shing Hong Center, No. 8 Guangshun South Street, Chaoyang District,
+				Beijing  Beijing  100102
+				CN
+
+94-CC-04   (hex)		Shandong free optical technology co., ltd.
+B00000-BFFFFF     (base 16)		Shandong free optical technology co., ltd.
+				195 East First Street, Industrial First Street, Economic Development Zone, Weifang, Weicheng District,
+				Weifeng  Shandong  216000
+				CN
+
+94-CC-04   (hex)		ENTEC Electric & Electronic Co., LTD.
+900000-9FFFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
+				78-2 Buncheon-ri, Bongdam-eup
+				Hwaseong-city  Gyungki-do  445-894
+				KR
+
+94-CC-04   (hex)		SynchronicIT BV
+E00000-EFFFFF     (base 16)		SynchronicIT BV
+				Spoorstraat 155, room 413
+				Gennep  Nederland  6591 GT
+				NL
+
+F4-90-CB   (hex)		Simavita (Aust) Pty Ltd
+D00000-DFFFFF     (base 16)		Simavita (Aust) Pty Ltd
+				Suite 2.02, L2, 54 Miller Street
+				North Sydney  NSW  2060
+				AU
+
+F4-90-CB   (hex)		Ricker Lyman Robotic
+300000-3FFFFF     (base 16)		Ricker Lyman Robotic
+				319 Main Street
+				Beacon  NY  12508
+				US
+
+F4-90-CB   (hex)		Beijing Penslink Co., Ltd.
+800000-8FFFFF     (base 16)		Beijing Penslink Co., Ltd.
+				502,12rd floor,no.2,Fangheng International Center Beijing, Chaoyang district 100102
+				Beijing  Beijing  100102
+				CN
+
+C0-9B-F4   (hex)		The Professional Monitor Company Ltd
+D00000-DFFFFF     (base 16)		The Professional Monitor Company Ltd
+				Holme Court A1
+				Biggleswade  Bedfordshire  SG189ST
+				GB
+
+C0-9B-F4   (hex)		Connected Space Management
+100000-1FFFFF     (base 16)		Connected Space Management
+				62 boulevard Diderot
+				Paris    75012
+				FR
+
+C0-9B-F4   (hex)		Inveo
+A00000-AFFFFF     (base 16)		Inveo
+				Rzemieslnicza 21
+				Kozy    43-340
+				PL
+
+94-FB-A7   (hex)		Beijing Leja Tech co., Ltd.
+200000-2FFFFF     (base 16)		Beijing Leja Tech co., Ltd.
+				5F-Building1, Longyu center East Tower,Longyu Middle street, Changping District
+				Beijing  Beijing  100000
+				CN
+
+94-FB-A7   (hex)		Skyring Smart Technologies(Shenzhen) Co., Ltd.
+E00000-EFFFFF     (base 16)		Skyring Smart Technologies(Shenzhen) Co., Ltd.
+				6F GDC Building, 9Gaoxin Centeral Avenue 3rd, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+94-FB-A7   (hex)		Inaxsys Security Systems inc.
+100000-1FFFFF     (base 16)		Inaxsys Security Systems inc.
+				11685 Philippe-Panneton
+				Montreal  Quebec  H1E 4M1
+				CA
+
+94-FB-A7   (hex)		ELKRON 
+A00000-AFFFFF     (base 16)		ELKRON 
+				Via Bologna 188/C
+				TURIN  ITALY  10154
+				IT
+
+38-F7-CD   (hex)		ARUNAS PTY LTD
+700000-7FFFFF     (base 16)		ARUNAS PTY LTD
+				Freedom Taxation Building, 1 Ransley St
+				PENRITH  NSW  2750
+				AU
+
+38-F7-CD   (hex)		Macherey-Nagel GmbH & Co. KG
+D00000-DFFFFF     (base 16)		Macherey-Nagel GmbH & Co. KG
+				Neumann-Neander-Str. 6-8
+				Düren  Deutschland  52355
+				DE
+
+38-F7-CD   (hex)		Polska Fabryka Wodomierzy i Ciep?omierzy FILA 
+000000-0FFFFF     (base 16)		Polska Fabryka Wodomierzy i Ciep?omierzy FILA 
+				?eromskiego 30
+				Sztum  POMORSKIE  82-400
+				PL
+
+70-69-79   (hex)		Liquid Instruments Pty Ltd
+B00000-BFFFFF     (base 16)		Liquid Instruments Pty Ltd
+				243 Northbourne Avenue
+				Lynham  ACT  2602
+				AU
+
+70-69-79   (hex)		An Phat Information Technology Co., Ltd
+800000-8FFFFF     (base 16)		An Phat Information Technology Co., Ltd
+				3C Tran Phu, Ward 4, District 5
+				Ho Chi Minh City    70000
+				VN
+
+70-69-79   (hex)		Ibyte
+500000-5FFFFF     (base 16)		Ibyte
+				Rua Cleia, 460
+				Fortaleza  Ceara  60863280
+				BR
+
+70-69-79   (hex)		BAS-IP LP
+E00000-EFFFFF     (base 16)		BAS-IP LP
+				Suite 1, 4 Queen Street
+				Edinburgh    EH2 1JE
+				GB
+
+70-69-79   (hex)		Full Solution Telecom
+000000-0FFFFF     (base 16)		Full Solution Telecom
+				Calle 130A #59C-42, Barrio Ciudad Jardin Norte
+				Bogota  Distrito Capital de Bogota  111111
+				CO
+
+CC-C2-61   (hex)		Tecnoideal Srl
+200000-2FFFFF     (base 16)		Tecnoideal Srl
+				Via Lea Cazzuoli nr.43
+				Mirandola  Modena  41037
+				IT
+
+CC-C2-61   (hex)		Shenzhen Uyesee Technology Co.,Ltd
+A00000-AFFFFF     (base 16)		Shenzhen Uyesee Technology Co.,Ltd
+				201C, C6 Building, HengFeng Industry Park Hezhou, Baoan District
+				shenzhen  Guangdong  518102
+				CN
+
+CC-C2-61   (hex)		Toong In Electronic Corp.
+E00000-EFFFFF     (base 16)		Toong In Electronic Corp.
+				10F-8, No.738, Chung Cheng Road, Chung Ho Dist,.
+				New Taipei City  Taiwan  235
+				TW
+
+30-49-50   (hex)		Shenzhen iTG robot Co.,Ltd.
+700000-7FFFFF     (base 16)		Shenzhen iTG robot Co.,Ltd.
+				3rd Floor, 5th Floor, No. 5, Elephant Factory Building, Baiyunshan New Village, Tongsheng Community, Dalang Street, Longhua District
+				Shenzhen    518109
+				CN
+
+30-49-50   (hex)		ADVANCED MICROWAVE ENGINEERING SRL
+400000-4FFFFF     (base 16)		ADVANCED MICROWAVE ENGINEERING SRL
+				VIA LUCCA 50/54
+				FIRENZE    50142
+				IT
+
+30-49-50   (hex)		Morgan Schaffer Inc.
+300000-3FFFFF     (base 16)		Morgan Schaffer Inc.
+				8300 rue St-Patrick bureau 150
+				LaSalle  Quebec  H8N 2H1
+				CA
+
+D0-14-11   (hex)		Evoco Labs CO., LTD
+200000-2FFFFF     (base 16)		Evoco Labs CO., LTD
+				Room 315, Building 1, No.58 Xiangke Rd, Pudong New Area
+				Shanghai  Shanghai  201203
+				CN
+
+D0-14-11   (hex)		Shen Zhen HaiHe Hi-Tech Co., Ltd
+C00000-CFFFFF     (base 16)		Shen Zhen HaiHe Hi-Tech Co., Ltd
+				Bldg 10,Fumin Industrial Zone,Pinghu Subdistrict,Longgang District
+				Shen Zhen  Guang Dong  518111
+				CN
+
+D0-14-11   (hex)		EkkoSense Ltd
+000000-0FFFFF     (base 16)		EkkoSense Ltd
+				Sir Colin Campbell Building, UNIP
+				Triumph Road, Nottingham  UK Mainland  NG7 2TU
+				GB
+
+D0-14-11   (hex)		Private
+100000-1FFFFF     (base 16)		Private
+
+5C-85-7E   (hex)		Nautech Electronics Ltd
+D00000-DFFFFF     (base 16)		Nautech Electronics Ltd
+				120 Cryers Road
+				East Tamaki  Auckland  2013
+				NZ
+
+5C-85-7E   (hex)		Cable Matters Inc.
+300000-3FFFFF     (base 16)		Cable Matters Inc.
+				153 Northboro Road, Suite 5
+				Southborough  MA  01772
+				US
+
+30-49-50   (hex)		IK Elektronik GmbH
+500000-5FFFFF     (base 16)		IK Elektronik GmbH
+				Friedrichsgruener Str. 11-13
+				Muldenhammer    08262
+				DE
+
+5C-85-7E   (hex)		Beijing HZFD Technology Co., Ltd
+700000-7FFFFF     (base 16)		Beijing HZFD Technology Co., Ltd
+				Room 502, Tower A, Fangyuan Building, No. 56, South Zhongguancun Street, Haidian District
+				Beijing  Beiijng  100044
+				CN
+
+5C-85-7E   (hex)		Sichuan C.H Control Technology Co., Ltd.
+100000-1FFFFF     (base 16)		Sichuan C.H Control Technology Co., Ltd.
+				4F,B8,Tianfu Software Park, No. 99, Tianhua 1st Road
+				Chengdu  Si chuan  610000
+				CN
+
+F4-69-D5   (hex)		Junchuang (Xiamen) Automation Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Junchuang (Xiamen) Automation Technology Co.,Ltd
+				Room 705, building a, No. 96, Xiangxing Road, industrial zone, Xiamen Torch High tech Zone
+				Xiamen   Fujian  361101
+				CN
+
+5C-85-7E   (hex)		Zhejiang Jetron Ark Digital Technology Co., Ltd
+A00000-AFFFFF     (base 16)		Zhejiang Jetron Ark Digital Technology Co., Ltd
+				Room 12-9, building B (Hongmao building), No. 338, Juxing West Road, Jiangbei District, Ningbo, ZheJiang, China
+				Ningbo    315000
+				CN
+
+F4-69-D5   (hex)		ITS Co., Ltd. 
+300000-3FFFFF     (base 16)		ITS Co., Ltd. 
+				Wooyang building 7F, 68, Wolpyeong-ro, Nam-gu, Ulsan, Republic of Korea
+				Ulsan    44690
+				KR
+
+4C-93-A6   (hex)		Wuhan Maiwe communication Co.,Ltd
+C00000-CFFFFF     (base 16)		Wuhan Maiwe communication Co.,Ltd
+				Building 2,Area E, Phase ii, Optical valley core center, No.52, Liufang road, East Lake Hi-tech Development Zone,Wuhan,China
+				Wuhan  Hubei  430000
+				CN
+
+4C-93-A6   (hex)		Cantronic Systems (Canada) Inc
+D00000-DFFFFF     (base 16)		Cantronic Systems (Canada) Inc
+				Unit 8, 62 Fawcett
+				Coquitlam  British Columbia  V3K 6V5
+				CA
+
+4C-93-A6   (hex)		Atrie Technology Fzc
+100000-1FFFFF     (base 16)		Atrie Technology Fzc
+				ELOB office no E-44F-41, Hamriya Free zone
+				Sharjah  Sharjah  10001
+				AE
+
+28-B7-7C   (hex)		Anser Coding Inc.
+900000-9FFFFF     (base 16)		Anser Coding Inc.
+				34F., No. 99, Sec. 1, XinTai 5th Rd., Xizhi Dist.,
+				New Taipei City    221
+				TW
+
+28-B7-7C   (hex)		Ray Pte Ltd
+E00000-EFFFFF     (base 16)		Ray Pte Ltd
+				Suite #09-01, 20 Collyer Quay, 
+				Singapore    049319
+				SG
+
+98-FC-84   (hex)		Guangdong DE at science and technology co., LTD
+800000-8FFFFF     (base 16)		Guangdong DE at science and technology co., LTD
+				Taide Technology Park,Jinfenghuang Industrial District, Fenggang Town,
+				Dongguan  GuangDong  523000
+				CN
+
+C8-63-14   (hex)		Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.
+200000-2FFFFF     (base 16)		Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.
+				Tymphany Industrial Area, Xin Lian Village, XinXu Town, HuiYang District
+				Huizhou  Guangdong  516223
+				CN
+
+98-FC-84   (hex)		chiconypower
+B00000-BFFFFF     (base 16)		chiconypower
+				23F, No.69, Sec. 2, Guangfu Rd., Sanchong Dist., New Taipei City 241, Taiwan (R.O.C.)
+				New Taipei  Taiwan  241
+				TW
+
+18-FD-CB   (hex)		Cabtronix AG
+200000-2FFFFF     (base 16)		Cabtronix AG
+				Hohstrass 1
+				Kloten  Zuerich  8302
+				CH
+
+58-20-8A   (hex)		SAMBO HITECH
+D00000-DFFFFF     (base 16)		SAMBO HITECH
+				469,Seokjung-ro,Namdong-Gu
+				Incheon    21501
+				KR
+
+18-FD-CB   (hex)		Accel Robotics
+500000-5FFFFF     (base 16)		Accel Robotics
+				9160 KEARNY VILLA CT
+				San Diego  CA  92123
+				US
+
+58-20-8A   (hex)		Conductix-Wampfler
+A00000-AFFFFF     (base 16)		Conductix-Wampfler
+				10102 Fst
+				omaha  NE  68127
+				US
+
+58-20-8A   (hex)		Infodev Electronic Designers Intl.
+B00000-BFFFFF     (base 16)		Infodev Electronic Designers Intl.
+				1995 rue Frank-Carrel Suite 202
+				Quebec  Quebec  G1N4H9
+				CA
+
+58-20-8A   (hex)		JIA HUANG JHAN YE CO.,LTD
+500000-5FFFFF     (base 16)		JIA HUANG JHAN YE CO.,LTD
+				1F., No. 19, Huanmei 2nd St., Donggang Township
+				Plngtung County    928
+				TW
+
+CC-4F-5C   (hex)		MatchX GmbH
+200000-2FFFFF     (base 16)		MatchX GmbH
+				Adalbert Str.8
+				Berlin    10999
+				DE
+
+FC-CD-2F   (hex)		SCOPUS INTERNATIONAL-BELGIUM
+A00000-AFFFFF     (base 16)		SCOPUS INTERNATIONAL-BELGIUM
+				Cable Centre, Raja International Building, 
+				Andamukkam, Kollam  Kerala  691 001
+				IN
+
+FC-CD-2F   (hex)		Spedos ADS a.s.
+C00000-CFFFFF     (base 16)		Spedos ADS a.s.
+				Hranická771
+				Valašské Mezi?í?í    75701
+				CZ
+
+58-95-D8   (hex)		Epiphan Systems Inc
+700000-7FFFFF     (base 16)		Epiphan Systems Inc
+				400 March Rd Suite 510
+				Ottawa  Ontario  K2K3H4
+				CA
+
+58-95-D8   (hex)		SuZhou Ruishengwei Intelligent Technology Co.,Ltd
+B00000-BFFFFF     (base 16)		SuZhou Ruishengwei Intelligent Technology Co.,Ltd
+				Room 507?Building 1?ZhongXuXin Science Park?NO.91?Weixin Road?Suzhou Industrial Park
+				SuZhou  JiangSu  215021
+				CN
+
+58-95-D8   (hex)		Alunos AG
+D00000-DFFFFF     (base 16)		Alunos AG
+				Zugerstrasse
+				Unteraegeri    6314
+				CH
+
+20-85-93   (hex)		Mastodon Design
+900000-9FFFFF     (base 16)		Mastodon Design
+				176 Anderson Ave, Suite F112
+				Rochester  NY  14607
+				US
+
+DC-4A-9E   (hex)		Dongguan Huili electroacoustic Industrial Co.,ltd
+000000-0FFFFF     (base 16)		Dongguan Huili electroacoustic Industrial Co.,ltd
+				Dalang Town, Biyun Cai Bai Cun East Second Street 66,A4 Building 501
+				Dongguan  Guangdong  523770
+				CN
+
+84-11-C2   (hex)		Beijing Dayu Technology Co., Ltd.
+100000-1FFFFF     (base 16)		Beijing Dayu Technology Co., Ltd.
+				11B-660, Building 13, Wangjing Xiyuan, Chaoyang
+				Beijing    100000
+				CN
+
+84-11-C2   (hex)		C TECH BILISIM TEKNOLOJILERI SAN. VE TIC. A.S.
+900000-9FFFFF     (base 16)		C TECH BILISIM TEKNOLOJILERI SAN. VE TIC. A.S.
+				Teknopark ?stanbul, TGB, Sanayi Mah. Teknopark Bulvar?, No:1, Blok:1 Kat:2, Kurtköy-Pendik 34912, ?STANBUL
+				Istanbul    34912
+				TR
+
+84-11-C2   (hex)		Guangdong Creator&Flyaudio Electronic Technology Co.,LTD
+B00000-BFFFFF     (base 16)		Guangdong Creator&Flyaudio Electronic Technology Co.,LTD
+				Block D1, No.3 Industrial Zone, Banxianshan, Hengli Town
+				Dongguan  Guangdong  523460
+				CN
+
+84-11-C2   (hex)		Dangerous Music Group, LLC
+E00000-EFFFFF     (base 16)		Dangerous Music Group, LLC
+				701 South Mountain Road
+				New City  NY  10956
+				US
+
+8C-47-6E   (hex)		Private
+700000-7FFFFF     (base 16)		Private
+
+8C-AE-49   (hex)		BERTIN TECHNOLOGIES
+300000-3FFFFF     (base 16)		BERTIN TECHNOLOGIES
+				10 Avenue Ampère
+				Montigny-le-Bretonneux  IDF  78180
+				FR
+
+8C-AE-49   (hex)		Gati Information Technolog(Kunshan)Co.,Ltd.
+500000-5FFFFF     (base 16)		Gati Information Technolog(Kunshan)Co.,Ltd.
+				2-5 / F, room 7, No. 88, Baifu Road, Economic and Technological Development Zone
+				Kunshan.  jiangsu  215300
+				CN
+
+8C-AE-49   (hex)		SEVERIN Elektrogeräte GmbH
+200000-2FFFFF     (base 16)		SEVERIN Elektrogeräte GmbH
+				Röhre 27
+				Sundern  NRW  59846
+				DE
+
+A4-53-EE   (hex)		SOS LAB Co., Ltd.
+C00000-CFFFFF     (base 16)		SOS LAB Co., Ltd.
+				B-101, BI Center, GIST 123 Cheomdangwagi-ro
+				Gwangju    61005
+				KR
+
+A4-53-EE   (hex)		Williamson Corporation
+400000-4FFFFF     (base 16)		Williamson Corporation
+				70 Domino Drive
+				Concord  MA  01742
+				US
+
+A4-53-EE   (hex)		Larva.io OÜ
+300000-3FFFFF     (base 16)		Larva.io OÜ
+				Sidur 3
+				Tallinn    11313
+				EE
+
+A4-53-EE   (hex)		Foshan Yisihang Electrical Technology Co., Ltd.
+500000-5FFFFF     (base 16)		Foshan Yisihang Electrical Technology Co., Ltd.
+				F4 Block A Lege Industrial Park, North Yucheng Road, Lunjiao Town, Shunde District
+				Foshan  Guangdong  528308
+				CN
+
+A0-02-4A   (hex)		IoTecha Corp
+E00000-EFFFFF     (base 16)		IoTecha Corp
+				2555 Route 130, Suite 2
+				Cranbury  NJ  08512
+				US
+
+78-D4-F1   (hex)		TNB
+C00000-CFFFFF     (base 16)		TNB
+				Ryazanskiy Prospekt, 24, k.2
+				Moscow    109428
+				RU
+
+78-D4-F1   (hex)		Burisch Elektronik Bauteile GmbH
+000000-0FFFFF     (base 16)		Burisch Elektronik Bauteile GmbH
+				Leopoldauerstrasse 29
+				Vienna    1210
+				AT
+
+78-D4-F1   (hex)		Guangzhou Kingray information technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Guangzhou Kingray information technology Co.,Ltd.
+				No.8, Jinghu Road, Huadu Reg
+				Guangzhou    510800
+				CN
+
+78-D4-F1   (hex)		Ekoenergetyka - Polska S.A.
+300000-3FFFFF     (base 16)		Ekoenergetyka - Polska S.A.
+				ul. Nowy Kisielin - Wysockiego 8
+				Zielona Gora    66-002
+				PL
+
+44-6F-D8   (hex)		Shenzhen Furuilian Electronic Co.,Ltd.
+100000-1FFFFF     (base 16)		Shenzhen Furuilian Electronic Co.,Ltd.
+				3/F, No.5 Building Workshop, No.123, Shuitian Industrial Zone,Baoshi East Road, Shuitian Community, Shiyan Street, Bao'an District,
+				Shenzhen    518000
+				CN
+
+44-6F-D8   (hex)		lb Lautsprecher gmbH
+400000-4FFFFF     (base 16)		lb Lautsprecher gmbH
+				Steinerstrasse 15 K
+				Munich  Bavaria  81369
+				DE
+
+44-6F-D8   (hex)		Beijing gpthink technology co.,LTD.
+B00000-BFFFFF     (base 16)		Beijing gpthink technology co.,LTD.
+				Beijing fengtai guogongzhuang
+				Beijing    100070
+				CN
+
+44-6F-D8   (hex)		Global Telecom Engineering, Inc
+800000-8FFFFF     (base 16)		Global Telecom Engineering, Inc
+				17901 Von Karman Ave, Suite 600
+				Irvine  CA  92614
+				US
+
+40-11-75   (hex)		disguise Technologies Limited
+C00000-CFFFFF     (base 16)		disguise Technologies Limited
+				88-89 Blackfriars Rd
+				London  South Bank  SE1 8HA,
+				GB
+
+74-F8-DB   (hex)		Avantree Corporation
+900000-9FFFFF     (base 16)		Avantree Corporation
+				175 Bernal road Ste 106
+				SAN JOSE  CA  95119-1343
+				US
+
+04-11-19   (hex)		Shenzhen YIZHENG Technology Co.,Ltd
+800000-8FFFFF     (base 16)		Shenzhen YIZHENG Technology Co.,Ltd
+				2305, block A7, Chuangzhi Yuncheng, Liuxian Avenue, Xili Town, Nanshan District
+				ShenZhen  GuangDong  518000
+				CN
+
+04-11-19   (hex)		Hubei Baobao Intelligent Technology Co.,LTD
+B00000-BFFFFF     (base 16)		Hubei Baobao Intelligent Technology Co.,LTD
+				Hubei Baobao Intelligent Technology Co.,LTD
+				Wuhan  Hubei  430000
+				CN
+
+04-11-19   (hex)		JULIDA LIMITED
+E00000-EFFFFF     (base 16)		JULIDA LIMITED
+				1F., NO. 137, DATONG ST., BEITOU DIST.
+				TAIPEI CITY  Taiwan  112
+				TW
+
+04-11-19   (hex)		FORT Robotics Inc.
+000000-0FFFFF     (base 16)		FORT Robotics Inc.
+				170 S. Independence Mall, Suite 275W
+				Philadelphia  PA  19106
+				US
+
+E8-6C-C7   (hex)		Hangzhou Lanxum Security Technology Co., Ltd
+900000-9FFFFF     (base 16)		Hangzhou Lanxum Security Technology Co., Ltd
+				Room 402, Block A, 4th Floor, Building 3, No. 351 changhe Road, Changhe Street, Binjiang District
+				Hangzhou  Zhejiang  310000
+				CN
+
+E8-6C-C7   (hex)		KLAB
+600000-6FFFFF     (base 16)		KLAB
+				94-23,Techno 2-ro
+				Yuseong-gu  Daejeon  34014
+				KR
+
+24-5D-FC   (hex)		Senix Corporation
+C00000-CFFFFF     (base 16)		Senix Corporation
+				10516 Route 116, Suite 300
+				Hinesburg  VT  05461
+				US
+
+24-5D-FC   (hex)		Hunan Honestone lntelligence Technology Co.,Ltd
+D00000-DFFFFF     (base 16)		Hunan Honestone lntelligence Technology Co.,Ltd
+				705, Building 1, Fortune Plaza, Wankuntu, Xiangzhang Road, Yuhua District, Changsha City,
+				Changsha    410007
+				CN
+
+E8-6C-C7   (hex)		Shenzhen Rongda Computer Co.,Ltd
+500000-5FFFFF     (base 16)		Shenzhen Rongda Computer Co.,Ltd
+				905, Block B, DuoCaiKeChuan Park, No.5 Guanle Road
+				Longhua District  Shenzhen, Guangdong    518110
+				CN
+
+00-55-DA   (hex)		Nanoleaf
+500000-5FFFFF     (base 16)		Nanoleaf
+				100 Front Street East, 4th Floor
+				Toronto  Ontario  M5A 1E1
+				CA
+
+24-5D-FC   (hex)		Dodge
+E00000-EFFFFF     (base 16)		Dodge
+				6040 Ponders Court
+				Greenville  SC  29615
+				US
+
+60-15-92   (hex)		EDA Technology Co.,LTD
+200000-2FFFFF     (base 16)		EDA Technology Co.,LTD
+				Room 301, Building 24, Shengchuang Enterprise Park,No.1661 Jialuo Road, Jiading District
+				Shanghai  Shanghai  201822
+				CN
+
+60-15-92   (hex)		insensiv GmbH
+A00000-AFFFFF     (base 16)		insensiv GmbH
+				Auf dem Esch 28
+				Bielefeld  Nordrhein-Westfalen  33619
+				DE
+
+60-15-92   (hex)		REMOWIRELESS COMMUNICATION INTERNATIONAL CO.,LIMITED
+D00000-DFFFFF     (base 16)		REMOWIRELESS COMMUNICATION INTERNATIONAL CO.,LIMITED
+				 REMOWIRELESS RM1111,HONGYI BUILDING NO.2158 WANYUAN ROAD
+				SHANGHAI  SHANGHAI  201103
+				CN
+
+0C-5C-B5   (hex)		avxav Electronic Trading LLC
+100000-1FFFFF     (base 16)		avxav Electronic Trading LLC
+				Office 534 Building # 6WA Dubai Airport Free Zone
+				Dubai  United Arab Emirates  33964
+				AE
+
+0C-5C-B5   (hex)		Munters Europe AB
+E00000-EFFFFF     (base 16)		Munters Europe AB
+				Borgarfjordsgatan 16
+				Kista    16440
+				SE
+
+0C-5C-B5   (hex)		HongKong Blossom Limited
+200000-2FFFFF     (base 16)		HongKong Blossom Limited
+				B1715,Jiansheng Building,No. 1 Pingji Road, NanWan Street Longgang
+				Shenzhen    518112
+				CN
+
+1C-A0-EF   (hex)		Sequent AG
+300000-3FFFFF     (base 16)		Sequent AG
+				Eptingerstrasse 3
+				Basel    4052
+				CH
+
+0C-5C-B5   (hex)		Yamasei
+000000-0FFFFF     (base 16)		Yamasei
+				2F., No. 37, Ln. 11, Sec. 6, Minquan E. Rd., Neihu Dist.
+				Taipei  Taiwan (R.O.C.)  114
+				TW
+
+1C-A0-EF   (hex)		tec5AG
+700000-7FFFFF     (base 16)		tec5AG
+				Weisskirchener Strasse 2-6
+				Steinbach  Hessen  61449
+				DE
+
+20-CE-2A   (hex)		MeshPlusPlus, Inc.
+A00000-AFFFFF     (base 16)		MeshPlusPlus, Inc.
+				935 W. Chestnut St., Suite #505
+				Chicago  IL  60642
+				US
+
+20-CE-2A   (hex)		LAUDA DR R WOBSER GMBH & CO KG
+D00000-DFFFFF     (base 16)		LAUDA DR R WOBSER GMBH & CO KG
+				Pfarrstrasse 41/43
+				Lauda-Koenigshofen    97922
+				DE
+
+20-CE-2A   (hex)		Rugged Monitoring
+900000-9FFFFF     (base 16)		Rugged Monitoring
+				1415 Frank-Carrel, Suite 230
+				Quebec City  Quebec  G1N4N7
+				CA
+
+20-CE-2A   (hex)		Zaber Technologies Inc.
+500000-5FFFFF     (base 16)		Zaber Technologies Inc.
+				#2 - 605 West Kent Ave. N.
+				Vancouver  B.C.  V6P 6T7
+				CA
+
+20-CE-2A   (hex)		Swarovski Optik KG
+B00000-BFFFFF     (base 16)		Swarovski Optik KG
+				Daniel Swarovski Street 70
+				Absam    6067
+				AT
+
+88-C9-B3   (hex)		Brabender Technologie GmbH & Co, KG
+500000-5FFFFF     (base 16)		Brabender Technologie GmbH & Co, KG
+				Kulturstrasse 49
+				Duisburg    47055
+				DE
+
+20-CE-2A   (hex)		Funkwerk Systems GmbH
+E00000-EFFFFF     (base 16)		Funkwerk Systems GmbH
+				Im Funkwerk 5
+				Koelleda    99625
+				DE
+
+88-C9-B3   (hex)		Hasbro Inc
+400000-4FFFFF     (base 16)		Hasbro Inc
+				1027 Newport Ave
+				Pawtucket  RI  02861
+				US
+
+88-C9-B3   (hex)		Sercomm Corporation.
+E00000-EFFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+88-C9-B3   (hex)		Divelbiss Corporation
+800000-8FFFFF     (base 16)		Divelbiss Corporation
+				9778 Mount Gilead Road
+				Fredericktown  OH  43019
+				US
+
+88-C9-B3   (hex)		Origins Technology Limited
+D00000-DFFFFF     (base 16)		Origins Technology Limited
+				18 Xinzhong St Dushiyangguang4-1106, Dongcheng
+				Beijing    100027
+				CN
+
+C8-F5-D6   (hex)		Shanghai Mo xiang Network Technology CO.,Ltd
+900000-9FFFFF     (base 16)		Shanghai Mo xiang Network Technology CO.,Ltd
+				Room#418-421, ShaHeXiLi, 2-2 XiLi North Road, LiCheng Community, Xili Street, NanShan District
+				Shenzhen  Guangdong  518071
+				CN
+
+C8-F5-D6   (hex)		United Barcode Systems
+B00000-BFFFFF     (base 16)		United Barcode Systems
+				Av. Progres 56, Pol. Ind. els Garrofers
+				Vilassar de Mar  Barcelona  08340
+				ES
+
+C8-F5-D6   (hex)		Eltako GmbH
+C00000-CFFFFF     (base 16)		Eltako GmbH
+				Hofener Straße 54
+				Fellbach  BW  70736
+				DE
+
+C0-FB-F9   (hex)		SHENZHEN ELSKY TECHNOLOGY CO., LTD
+C00000-CFFFFF     (base 16)		SHENZHEN ELSKY TECHNOLOGY CO., LTD
+				1F BUILDING 2# ASIA INDUSTIAL PARK BANTIAN STREET LONGGANG DISTRICT 
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+C0-FB-F9   (hex)		Dropbeats Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		Dropbeats Technology Co., Ltd.
+				Room 304, Building 4?Juli Road ? Pudong New District
+				Shanghai  Shanghai  201203
+				CN
+
+D0-9F-D9   (hex)		Elevoc Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Elevoc Technology Co., Ltd.
+				5/F,Unit B,Block12,ShenZhenwan Science and Technology Ecological Garden,Nanshan Dist.
+				Shenzhen  Guangdong  518000
+				CN
+
+D0-9F-D9   (hex)		Eurolan Ltd
+A00000-AFFFFF     (base 16)		Eurolan Ltd
+				jk. Drujba 1, ul. 5028, do bl. 15
+				Sofia  Sofia (stolitsa)  1592
+				BG
+
+E0-5A-9F   (hex)		Fujian Newland Auto-ID Tech. Co,.Ltd.
+800000-8FFFFF     (base 16)		Fujian Newland Auto-ID Tech. Co,.Ltd.
+				Newland Science & Technology Park, No.1 Rujiang West Rd,Mawei,Fuzhou, P.R.China
+				Fuzhou  Fujian  350015
+				CN
+
+18-74-E2   (hex)		NextGen RF Design, Inc.
+C00000-CFFFFF     (base 16)		NextGen RF Design, Inc.
+				2130 Howard Dr W
+				North Mankato  MN  56003
+				US
+
+18-74-E2   (hex)		Sartorius Lab Instruments GmbH & Co. KG
+100000-1FFFFF     (base 16)		Sartorius Lab Instruments GmbH & Co. KG
+				Otto-Brenner-Straße 20
+				Goettingen    37079
+				DE
+
+18-74-E2   (hex)		Linux Automation GmbH
+A00000-AFFFFF     (base 16)		Linux Automation GmbH
+				Steuerwalder Str 21
+				Hildesheim    31137
+				DE
+
+E8-78-29   (hex)		Bernd Walter Computer Technology
+D00000-DFFFFF     (base 16)		Bernd Walter Computer Technology
+				Fontanestr. 18
+				Moers  NRW  47445
+				DE
+
+18-74-E2   (hex)		Samriddi Automations Pvt. Ltd.
+D00000-DFFFFF     (base 16)		Samriddi Automations Pvt. Ltd.
+				F-365
+				Noida  up  201307
+				IN
+
+E8-78-29   (hex)		METZ CONNECT GmbH
+A00000-AFFFFF     (base 16)		METZ CONNECT GmbH
+				Im Tal 2
+				Blumberg    78176
+				DE
+
+E8-78-29   (hex)		Shenzhen Jointelli Technologies Co.,Ltd 
+100000-1FFFFF     (base 16)		Shenzhen Jointelli Technologies Co.,Ltd 
+				Room A4-1203, Building A, Kexing Science Park, No. 15, Keyuan Road,Keyuan Community,Yuehai Street,Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+E8-78-29   (hex)		Solos Technology Limited
+E00000-EFFFFF     (base 16)		Solos Technology Limited
+				Unit 211, 2/F., Photonics Centre, No 2 Science Park East Avenue, Shatin
+				Hong Kong  Hong Kong  999077
+				HK
+
+78-13-05   (hex)		Shenzhen AV-Display Co.,Ltd
+800000-8FFFFF     (base 16)		Shenzhen AV-Display Co.,Ltd
+				No.39,He Ao Jin Yuan Road, Yuanshan Subdistrict, Longgang District ,Shenzhen, China
+				SHENZHEN    518000
+				CN
+
+78-13-05   (hex)		Bithouse Oy
+B00000-BFFFFF     (base 16)		Bithouse Oy
+				Hepolamminkatu 32
+				Tampere    FI-33720
+				FI
+
+78-13-05   (hex)		CRRC Nangjing Puzhen Haitai Brake Equipment Co., LTD 
+600000-6FFFFF     (base 16)		CRRC Nangjing Puzhen Haitai Brake Equipment Co., LTD 
+				No.10 Xinglong Road Pukou Economic Development District
+				Nanjing  Jiangsu  211800
+				CN
+
+A8-5B-36   (hex)		Bluesoo Tech (HongKong) Co.,Limited
+000000-0FFFFF     (base 16)		Bluesoo Tech (HongKong) Co.,Limited
+				Room 05, 28 / F, good view business centre, 2-16 Garden Street, Mong Kok, Kowloon, Hongkong.
+				HongKong    999077
+				HK
+
+A8-5B-36   (hex)		DAP B.V.
+600000-6FFFFF     (base 16)		DAP B.V.
+				Tussendiepen 4a
+				Drachten    9206 AD
+				NL
+
+A8-5B-36   (hex)		Louis Vuitton Malletier
+700000-7FFFFF     (base 16)		Louis Vuitton Malletier
+				2 rue du Pont Neuf
+				Paris    75001
+				FR
+
+A8-5B-36   (hex)		ORBITVU Sp. z o. o.
+E00000-EFFFFF     (base 16)		ORBITVU Sp. z o. o.
+				Sienkiewicza, 48
+				Tarnowskie Góry    42-600
+				PL
+
+F0-2A-2B   (hex)		Shenzhen ORVIBO Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd.
+				F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC.
+				shenzhen    518000
+				CN
+
+44-A9-2C   (hex)		China Electronics Corporation Greatwall Shengfeifan information system Co.,ltd. Hu'nan computer R.&D. Center
+900000-9FFFFF     (base 16)		China Electronics Corporation Greatwall Shengfeifan information system Co.,ltd. Hu'nan computer R.&D. Center
+				China Electronics Software Park,Yuelu District,Changsha City,Hunan Province
+				Changsha    410013
+				CN
+
+44-A9-2C   (hex)		NPP KOMETEH JSC
+D00000-DFFFFF     (base 16)		NPP KOMETEH JSC
+				Lomanaya 5
+				Sankt-Petersburg    196006
+				RU
+
+58-48-49   (hex)		Telegaertner Elektronik GmbH
+D00000-DFFFFF     (base 16)		Telegaertner Elektronik GmbH
+				Hofaeckerstr. 18
+				Crailsheim  Baden-Wuerttemberg  74564
+				DE
+
+58-48-49   (hex)		STACKFORCE GmbH
+800000-8FFFFF     (base 16)		STACKFORCE GmbH
+				Biengener Str. 3
+				Eschbach    79427
+				DE
+
+D0-9F-D9   (hex)		GS Yuasa Infrastructure Systems Co.,Ltd.
+300000-3FFFFF     (base 16)		GS Yuasa Infrastructure Systems Co.,Ltd.
+				677 Shimoakasaka-Ohnohara
+				Kawagoe-Shi  Saitama  350-1155
+				JP
+
+58-48-49   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+400000-4FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+58-48-49   (hex)		Haag-Streit AG
+C00000-CFFFFF     (base 16)		Haag-Streit AG
+				Gartenstadtstrasse 10
+				Koeniz    3098
+				CH
+
+64-33-B5   (hex)		Revo Smart Technologies co.,limited
+500000-5FFFFF     (base 16)		Revo Smart Technologies co.,limited
+				RM 1902 EASEY COMM BLDG 253-261 HENNESSY ROAD WANCHAI  HK
+				Hong Kong    999077
+				CN
+
+28-36-13   (hex)		Shenzhen HQVT TECHNOLOGY Co.,LTD
+200000-2FFFFF     (base 16)		Shenzhen HQVT TECHNOLOGY Co.,LTD
+				3/F,Building 8 ,Taihua Wutong Island,Xixiang,Bao'an District
+				China  Guang Dong  518000
+				CN
+
+28-36-13   (hex)		Shandong SIASUN Industrial Software Research Institute Co., Ltd
+000000-0FFFFF     (base 16)		Shandong SIASUN Industrial Software Research Institute Co., Ltd
+				Rm301,Artificial Intelligence Building,Jingshi Road,Jinan Area Of China(Shandong) Pilot Free Trade Zone
+				jinan    250000
+				CN
+
+28-36-13   (hex)		ESI Ventures, LLC
+600000-6FFFFF     (base 16)		ESI Ventures, LLC
+				2085 Humphrey Street
+				Fort Wayne  IN  46803
+				US
+
+28-36-13   (hex)		AVYCON
+D00000-DFFFFF     (base 16)		AVYCON
+				16682 Millikan Ave
+				Irvine  CA  92606
+				US
+
+78-5E-E8   (hex)		Jiangxi guoxuan radio and television technology Co.,Ltd
+800000-8FFFFF     (base 16)		Jiangxi guoxuan radio and television technology Co.,Ltd
+				No.3 Jincheng First Road, Guzhang Industrial Park, Shicheng County, Ganzhou City, Jiangxi
+				Ganzhou     341000
+				CN
+
+78-5E-E8   (hex)		Vega-Absolute
+200000-2FFFFF     (base 16)		Vega-Absolute
+				Kirova 113/1
+				Novosibirsk    630008
+				RU
+
+78-5E-E8   (hex)		Suzhou Tianping Advanced Digital Technologies Co.Ltd
+E00000-EFFFFF     (base 16)		Suzhou Tianping Advanced Digital Technologies Co.Ltd
+				Room304,Building 4,No.209.ZhuyuanRoad,Gaoxin District
+				Suzhou  Jiangsu  215000
+				CN
+
+84-11-C2   (hex)		 FUJIFILM Healthcare Corporation
+300000-3FFFFF     (base 16)		 FUJIFILM Healthcare Corporation
+				2-1,Shintoyofuta
+				Kashiwa-shi  Chiba  277-0804
+				JP
+
+78-5E-E8   (hex)		Incontrol LLC
+300000-3FFFFF     (base 16)		Incontrol LLC
+				23 building 2, office 5-7, Leninskaya Sloboda st
+				Moscow    115280
+				RU
+
+38-A8-CD   (hex)		NIC Technologii
+A00000-AFFFFF     (base 16)		NIC Technologii
+				2/5 Selezneva Street
+				Krasnodar  Krasnodarsky kray  350059
+				RU
+
+38-A8-CD   (hex)		PT Supertone
+900000-9FFFFF     (base 16)		PT Supertone
+				Jl Gajah Mada 218 F-G
+				Jakarta  DKI Jakarta   11120
+				ID
+
+50-DE-19   (hex)		DTEN Inc.
+E00000-EFFFFF     (base 16)		DTEN Inc.
+				97 E Brokaw Rd, Ste 180
+				San Jose  CA  95112-1032____
+				US
+
+7C-83-34   (hex)		Shenzhen AZW Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Shenzhen AZW Technology Co., Ltd.
+				LongJun Industrial Park
+				shenzhen    518000
+				CN
+
+38-A8-CD   (hex)		Revo Infratech USA Ltd
+500000-5FFFFF     (base 16)		Revo Infratech USA Ltd
+				7588 Central Parke Blvd Suite# 109
+				Mason  OH  45040
+				US
+
+7C-83-34   (hex)		Hunan Datang Xianyi Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Hunan Datang Xianyi Technology Co.,Ltd
+				No.568 QueYuan Road Chuanggu Park Flat 1001-1061
+				Changsha    410000
+				CN
+
+7C-83-34   (hex)		ENGINETECH (TIANJIN) COMPUTER CO.,LTD.
+A00000-AFFFFF     (base 16)		ENGINETECH (TIANJIN) COMPUTER CO.,LTD.
+				No.6 Hechang Road, Wuqing Development Zone
+				TIANJIN    301726
+				CN
+
+1C-AE-3E   (hex)		P.H.U. Metering Anna Moder
+400000-4FFFFF     (base 16)		P.H.U. Metering Anna Moder
+				Parkowa 1
+				Buczek    98-113
+				PL
+
+1C-AE-3E   (hex)		DAO QIN TECHNOLOGY CO.LTD.
+000000-0FFFFF     (base 16)		DAO QIN TECHNOLOGY CO.LTD.
+				NO.359, ZHONGXIAO RD.
+				CHISHANG TOWNSHIP  TAITUNG COUNTY   95861
+				TW
+
+7C-83-34   (hex)		Silicon Xpandas Electronics Co., Ltd.
+800000-8FFFFF     (base 16)		Silicon Xpandas Electronics Co., Ltd.
+				8F., No.437, Ruiguang Rd., Neihu Dist.
+				Taipei City 11492    11492
+				TW
+
+1C-AE-3E   (hex)		NextDrive Co.
+700000-7FFFFF     (base 16)		NextDrive Co.
+				8F., No. 8, Ln. 47, Sec. 3, Nangang Rd., Nangang Dist.,
+				Taipei City    115004
+				TW
+
+98-6E-E8   (hex)		Logos Payment Solutions A/S
+A00000-AFFFFF     (base 16)		Logos Payment Solutions A/S
+				Nærum Hovedgade 6
+				Nærum    2850
+				DK
+
+98-6E-E8   (hex)		Blair Companies
+600000-6FFFFF     (base 16)		Blair Companies
+				5107 Kissell Ave
+				Altoona  PA  16601
+				US
+
+98-6E-E8   (hex)		First Design System Inc.
+E00000-EFFFFF     (base 16)		First Design System Inc.
+				Tachibana Shinjuku Bldg. 3F, 3-2-26 Nishi-Shinjuku
+				Tokyo  Shinjuku-ku  160-0023
+				JP
+
+98-6E-E8   (hex)		Span.IO, Inc.
+900000-9FFFFF     (base 16)		Span.IO, Inc.
+				679 Bryant Street
+				San Francisco  CA  94107
+				US
+
+98-6E-E8   (hex)		ReeR SpA
+300000-3FFFFF     (base 16)		ReeR SpA
+				via carcano 32
+				torino    10153
+				IT
+
+98-6E-E8   (hex)		Sbarco Technology CO., Ltd.
+000000-0FFFFF     (base 16)		Sbarco Technology CO., Ltd.
+				4F, No.115, LIde St., JhongHe Dist.
+				New Taipei City     23556
+				TW
+
+98-80-BB   (hex)		RYEEX Technology Co.,Ltd.
+000000-0FFFFF     (base 16)		RYEEX Technology Co.,Ltd.
+				RM106,Joinin Hub,Builing J District 71,Construction Industrial Park,Xin'an Street,Bao'an, Shenzhen,China
+				SHENZHEN  GUANGDONG  518101
+				CN
+
+98-80-BB   (hex)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
+600000-6FFFFF     (base 16)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
+				No.2 Xinxiu Street, Hunnan District, Shenyang
+				Shenyang  Liaoning  110000
+				CN
+
+78-72-64   (hex)		digades GmbH
+B00000-BFFFFF     (base 16)		digades GmbH
+				Äußere Weberstraße 20
+				Zittau    02748
+				DE
+
+98-80-BB   (hex)		D.Med Technical Products GmbH
+E00000-EFFFFF     (base 16)		D.Med Technical Products GmbH
+				Klaus-Bungert-Str. 3
+				Düsseldorf    40468
+				DE
+
+98-80-BB   (hex)		GreatWall Information Co.,Ltd
+100000-1FFFFF     (base 16)		GreatWall Information Co.,Ltd
+				No.5,3rd EastRoad,ChangshaEconomic and TechnologicalDevelopment Zone,Hunan,Chian
+				Changsha  Hunan  410000
+				CN
+
+78-72-64   (hex)		Comcast-SRL
+C00000-CFFFFF     (base 16)		Comcast-SRL
+				Alejo Martinez 17
+				Sosua  Puerto Plata  34443
+				DO
+
+78-72-64   (hex)		Zhengzhou Reform Intelligent Device Co., Ltd
+100000-1FFFFF     (base 16)		Zhengzhou Reform Intelligent Device Co., Ltd
+				Kangqiao Business Plaza, Chengdong Road, Zhengbian Road, Guancheng District 2122
+				Zhengzhou City  Henan Province  450000
+				CN
+
+78-72-64   (hex)		CALTTA TECHNOLOGIES CO.,LTD.
+500000-5FFFFF     (base 16)		CALTTA TECHNOLOGIES CO.,LTD.
+				Building G2, International E-City, Nanshan District,
+				ShenZhen  Guangdong  518052
+				CN
+
+78-72-64   (hex)		Heltec Automation
+E00000-EFFFFF     (base 16)		Heltec Automation
+				64 Chenghong Rd., Longtan Industrial Park, Chenghua District
+				Chengdu  Sichuan  610000
+				CN
+
+F4-70-0C   (hex)		Shenzhen Excelland Technology Co., Ltd.
+100000-1FFFFF     (base 16)		Shenzhen Excelland Technology Co., Ltd.
+				5D, Building #1, Tingwei Industrial Park, Liufang Road #6, 67 Zone of Xingdong Community, Xin'an Street, Baoan District
+				Shenzhen  Guangdong  518100
+				CN
+
+F4-70-0C   (hex)		Changde xsound lnnovation technologies co;ltd.
+700000-7FFFFF     (base 16)		Changde xsound lnnovation technologies co;ltd.
+				2nd Floor, Building 6, Electroacoustic Industrial Park, Economic Development Zone, Deshan Town, Wuling District
+				changde  hunan  415000
+				CN
+
+F4-A4-54   (hex)		Shenzhen Cudy Technology Co., Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Cudy Technology Co., Ltd.
+				Room A606, Gaoxinqi Industrial Park, Baoan 67 Dist
+				Baoan 67 District, Shenzhen    518101
+				CN
+
+18-45-B3   (hex)		ELPITECH LLC
+500000-5FFFFF     (base 16)		ELPITECH LLC
+				26 km of Baltya road, business center Riga Lang, office 11.
+				Krasnogorsk  Moscow region, Krasnogorsk district  143421
+				RU
+
+08-F8-0D   (hex)		Zhejiang Luci Technology Co., Ltd
+500000-5FFFFF     (base 16)		Zhejiang Luci Technology Co., Ltd
+				14/ F, Building 36, Nantaihu Dongyuan Business Building, High-tech Zone, Wuxing District
+				Huzhou  Zhejiang  313000
+				CN
+
+08-F8-0D   (hex)		Huizhou changfei Optoelectruonics Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Huizhou changfei Optoelectruonics Technology Co.,Ltd
+				Floor 3-4.No.26,Xinhua Avenue,Tongqiao town
+				Huicheng District,Huizhou City  Guangdong Province  516032
+				CN
+
+08-F8-0D   (hex)		HANGZHOU YILI Communication Equipment Ltd
+700000-7FFFFF     (base 16)		HANGZHOU YILI Communication Equipment Ltd
+				No.12,Kangyuan Road
+				Shanghai  Hangzhou  Zhejiang
+				CN
+
+18-45-B3   (hex)		Sleep Number
+E00000-EFFFFF     (base 16)		Sleep Number
+				1001 Third Avenue South
+				Minneapolis  MN  55404
+				US
+
+94-C9-B7   (hex)		Dspread Technology (Beijing) Inc.
+D00000-DFFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+94-C9-B7   (hex)		Sitronics JSC
+300000-3FFFFF     (base 16)		Sitronics JSC
+				Volgogradskiy prospect 32, building 31
+				Moscow  Moscow region  109316
+				RU
+
+94-C9-B7   (hex)		Realtimes Beijing Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Realtimes Beijing Technology Co., Ltd.
+				RoomB 901 NO.20 Heping Xiyuan West Heping Street Chaoyang District 
+				Beijing    100013
+				CN
+
+08-F8-0D   (hex)		Shanghai Mininglamp AI Group Co.,Ltd
+200000-2FFFFF     (base 16)		Shanghai Mininglamp AI Group Co.,Ltd
+				29th,30th,31st and 32nd floors,701 Yunjin Road, Xuhui District
+				Shanghai    200232
+				CN
+
+08-F8-0D   (hex)		Vont Innovations
+B00000-BFFFFF     (base 16)		Vont Innovations
+				30 N Gould St Ste R, Sheridan, WY
+				Sheridan  WY  82801
+				US
+
+08-F8-0D   (hex)		MICKEY INDUSTRY,LTD.
+A00000-AFFFFF     (base 16)		MICKEY INDUSTRY,LTD.
+				26-3 Higashi 3-Chome 
+				Shibuya-ku  Tokyo  150-0011
+				JP
+
+94-C9-B7   (hex)		Jinjin Technology (Shenzhen) Co., Ltd
+C00000-CFFFFF     (base 16)		Jinjin Technology (Shenzhen) Co., Ltd
+				5-4 Shankeng Inner Ring Road, Shanxia Community, Pinghu Street, Longgang District
+				Shenzhen  Guangdong  518111
+				CN
+
+94-C9-B7   (hex)		MAMMOTHTEK CLOUD(DONG GUAN)TECHNOLOGY CO., LTD
+700000-7FFFFF     (base 16)		MAMMOTHTEK CLOUD(DONG GUAN)TECHNOLOGY CO., LTD
+				INDUSTRY NORTH ROAD,SONGSHANHU
+				DONGGUAN  GUANGDONG  523808
+				CN
+
+50-A0-30   (hex)		Shenzhen Hewang Electric Co.,Ltd
+700000-7FFFFF     (base 16)		Shenzhen Hewang Electric Co.,Ltd
+				5th Floor, building 6, No. 2 Industrial Zone, Guanlong village, Xili town, Nanshan district, 
+				Shenzhen    518000
+				CN
+
+50-A0-30   (hex)		XEPIC Corporation Limited
+100000-1FFFFF     (base 16)		XEPIC Corporation Limited
+				Floor 18-19, Shared Spaces, Research and Innovation Park, Huachuang Road, Jiangbei New Area 
+				Nanjing  Jiangsu  210043
+				CN
+
+04-EE-E8   (hex)		Shanghai ZLAN Information Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Shanghai ZLAN Information Technology Co.,Ltd
+				28# YuanWen Road, MinHang District
+				Shanghai  Shanghai  201199
+				CN
+
+50-A0-30   (hex)		Missing-Link Oy
+A00000-AFFFFF     (base 16)		Missing-Link Oy
+				Åkerlundinkatu 8
+				Tampere  Pirkanmaa  33100 
+				FI
+
+04-EE-E8   (hex)		Shenzhen C & D Electronics Co., Ltd.
+700000-7FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+18-D7-93   (hex)		Autel lntelligent Technology Corp.,Ltd
+600000-6FFFFF     (base 16)		Autel lntelligent Technology Corp.,Ltd
+				7th, 8th, 10th Floor, Building B1, Zhiyuan Road, No. 1001 Xueyuan Avenue, Xili Street, Nanshan District, Shenzhen
+				Shenzhen    518000
+				CN
+
+18-D7-93   (hex)		Remote Engineer B.V.
+400000-4FFFFF     (base 16)		Remote Engineer B.V.
+				It Vegelinskampke, 11
+				Akkrum  Select a state (US only)  8491PD
+				NL
+
+18-D7-93   (hex)		Private
+C00000-CFFFFF     (base 16)		Private
+
+DC-36-43   (hex)		Hangzhou Chingan Tech Co., Ltd.
+500000-5FFFFF     (base 16)		Hangzhou Chingan Tech Co., Ltd.
+				4F, BLDG. 4, 16# XIYUAN YI ROAD HANGZHOU, ZHEJIANG,CHINA 310030
+				hangzhou  zhejiang  310000
+				CN
+
+08-26-AE   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
+000000-0FFFFF     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
+				Tianyu Building, S.&T.Park, Huazhong University of S.&T.,East Lake Development Zone
+				Wuhan  Hubei  430000
+				CN
+
+DC-36-43   (hex)		Hefei EA Excelsior Information Security Co., Ltd.
+900000-9FFFFF     (base 16)		Hefei EA Excelsior Information Security Co., Ltd.
+				1F, Block A, Tsinghua Unis Infoport, Langshan Rd, Hi-Tech Industrial (North), Nanshan
+				Shenzhen  Guangdong  518000
+				CN
+
+08-26-AE   (hex)		EVTECH SOLUTIONS LTD. DBA 3D-P
+700000-7FFFFF     (base 16)		EVTECH SOLUTIONS LTD. DBA 3D-P
+				UNIT 101  2609 15TH STREET NE
+				CALGARY  Alberta  T2E 8Y4
+				CA
+
+98-8F-E0   (hex)		KuaiZhu SmartTechnology?Suzhou?CO.,Ltd
+500000-5FFFFF     (base 16)		KuaiZhu SmartTechnology?Suzhou?CO.,Ltd
+				NO.209 Zhu Yuan Road
+				suzhou  jiangsu  215100
+				CN
+
+98-8F-E0   (hex)		Nawon Machinery
+900000-9FFFFF     (base 16)		Nawon Machinery
+				268, Jaedurumi-gil
+				Paju-si  Gyeonggi-do  10863
+				KR
+
+98-8F-E0   (hex)		Valinso B.V.
+000000-0FFFFF     (base 16)		Valinso B.V.
+				Uithof 5
+				Wijk en Aalburg    4261 LN
+				NL
+
+10-54-D2   (hex)		Shenzhen Dinstech Technology Co.,Ltd.
+B00000-BFFFFF     (base 16)		Shenzhen Dinstech Technology Co.,Ltd.
+				Shenzhen Qianhai Shenzhen-Hong Kong Cooperation Zone Nanshan Street Linhai Avenue No. 59 Seaside Avenue 3rd Floor D378, Port Building, Shipping Center
+				Shenzhen    518000
+				CN
+
+10-54-D2   (hex)		Sun wealth technology corporation limited
+D00000-DFFFFF     (base 16)		Sun wealth technology corporation limited
+				Room605,The Dongfangmingzhu business building,qian jin 1 road,xin an street,bao an district ,shenzhen ,guang dong province,China.
+				shenzhen   Guang dong   518000
+				CN
+
+10-54-D2   (hex)		ComNav Technology Ltd.
+200000-2FFFFF     (base 16)		ComNav Technology Ltd.
+				3 floor Building 2,No.618 Chengliu Middle RD. Malu town,
+				Shanghai    200000
+				CN
+
+10-54-D2   (hex)		Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd.
+100000-1FFFFF     (base 16)		Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd.
+				Building 2 and 3,Intelligent Technology Industrial Park,high-tech industrial Development Zone, 
+				Yingtan     335000
+				CN
+
+0C-86-29   (hex)		BADA SYSTEM co., Ltd
+200000-2FFFFF     (base 16)		BADA SYSTEM co., Ltd
+				Saemalro 99 Kumsuk building 501
+				Seoul    05808
+				KR
+
+0C-86-29   (hex)		HagerEnergy GmbH
+700000-7FFFFF     (base 16)		HagerEnergy GmbH
+				Karlstrasse 5
+				Osnabrueck    49074
+				DE
+
+6C-93-08   (hex)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
+				E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District
+				shenz  guangdong  518055
+				CN
+
+30-43-D7   (hex)		Xiaoniu network technology (Shanghai) Co., Ltd.
+C00000-CFFFFF     (base 16)		Xiaoniu network technology (Shanghai) Co., Ltd.
+				Room 706, building 3, no.20 east road, jingan district.
+				Shang hai    200040
+				CN
+
+6C-93-08   (hex)		Estelar s.r.o
+400000-4FFFFF     (base 16)		Estelar s.r.o
+				Palackého 744/1
+				Holešov  ?eská republika  76901
+				CZ
+
+08-26-AE   (hex)		Flextronics International Kft
+A00000-AFFFFF     (base 16)		Flextronics International Kft
+				Zrínyi Miklós str. 38.
+				Zalaegerszeg    8900
+				HU
+
+38-1F-26   (hex)		HWACHANG CORPORATION 
+D00000-DFFFFF     (base 16)		HWACHANG CORPORATION 
+				90, NONGGONGANJI-GIL
+				SOCHO-SI    24899
+				KR
+
+38-1F-26   (hex)		Airmaster A/S
+400000-4FFFFF     (base 16)		Airmaster A/S
+				Industrivej 59
+				Aars    9600
+				DK
+
+18-A5-9C   (hex)		Actiontec Electronics Inc.
+200000-2FFFFF     (base 16)		Actiontec Electronics Inc.
+				2445 Augustine Dr #501
+				Santa Clara   CA  95054
+				US
+
+18-A5-9C   (hex)		IT-1
+400000-4FFFFF     (base 16)		IT-1
+				260, Changnyong-daero
+				Yeongtong-gu, Suwon-si  Gyeonggi-do  16229
+				KR
+
+18-A5-9C   (hex)		Residence Control Ltd
+800000-8FFFFF     (base 16)		Residence Control Ltd
+				Cvetan Vuchkov 7
+				Sofia  Sofia  1614
+				BG
+
+7C-70-BC   (hex)		Motec GmbH
+A00000-AFFFFF     (base 16)		Motec GmbH
+				287 27 Road
+				Grand Junction  CO  81503
+				US
+
+1C-59-74   (hex)		Syntax technology(tianjin)Co.,LTD
+400000-4FFFFF     (base 16)		Syntax technology(tianjin)Co.,LTD
+				Room 510-5,Comprehensive Office Building,Carpet Industrial Park,Wuqing District 
+				Tianjin  Tianjin  301700
+				CN
+
+1C-59-74   (hex)		Beijing Flintec Electronic Technology Co.,Ltd.
+B00000-BFFFFF     (base 16)		Beijing Flintec Electronic Technology Co.,Ltd.
+				Room 102,Building No.6,China Technology Venture Park,No.8,LaiGuangYing West Road,ChaoYang District 
+				Beijing  Beijing  100012
+				CN
+
+1C-59-74   (hex)		Shanghai Laisi Information Technology Co.,Ltd
+900000-9FFFFF     (base 16)		Shanghai Laisi Information Technology Co.,Ltd
+				1001,21#,No.1158 Zhongxin RD,Songjiang district Shanghai
+				shanghai    201614
+				CN
+
+6C-15-24   (hex)		Shenzhen Electron Technology Co., LTD.
+500000-5FFFFF     (base 16)		Shenzhen Electron Technology Co., LTD.
+				Building 2, Yingfeng Industrial Zone, Tantou Community, Songgang Street, Bao'an District
+				Shenzhen  Guangzhou  51800
+				CN
+
+6C-15-24   (hex)		ShenZhen Chainway Information Technology Co., Ltd.
+800000-8FFFFF     (base 16)		ShenZhen Chainway Information Technology Co., Ltd.
+				 9F Building2, Phase2, Gaoxinqi Industrial Park ,  Bao'an District
+				ShenZhen  GuangDong  518102
+				CN
+
+6C-15-24   (hex)		Annapurna labs
+B00000-BFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+1C-59-74   (hex)		Square Inc.
+600000-6FFFFF     (base 16)		Square Inc.
+				1455 Market St.
+				San Francisco  CA  94103
+				US
+
+6C-15-24   (hex)		DEFA AS
+000000-0FFFFF     (base 16)		DEFA AS
+				Blingsmovegen 30
+				Nesbyen    3540
+				NO
+
+6C-15-24   (hex)		Linkplay
+200000-2FFFFF     (base 16)		Linkplay
+				891 W. Washington Ave.
+				Sunnyvale  CA  94086
+				US
+
+6C-15-24   (hex)		CORAL-TAIYI
+C00000-CFFFFF     (base 16)		CORAL-TAIYI
+				8F-3, No. 200, Gangqian Rd, Neihu District
+				Taipei City    114
+				TW
+
+C4-A1-0E   (hex)		O-NET Industrial Technologies (Shenzhen) Limited
+500000-5FFFFF     (base 16)		O-NET Industrial Technologies (Shenzhen) Limited
+				501, Maile building, building 2, No. 28, Cuijing Road, Zhukeng community, Longtian street, Pingshan District
+				Shenzhen  Guangdong  518118
+				CN
+
+70-50-E7   (hex)		Nippon Pulse America, Inc.
+600000-6FFFFF     (base 16)		Nippon Pulse America, Inc.
+				4 Corporate Drive
+				Radford  VA  24141-5100
+				US
+
+C4-A1-0E   (hex)		Focus-on
+C00000-CFFFFF     (base 16)		Focus-on
+				Kerkeplaat 12
+				Dordrecht    3313LC
+				NL
+
+70-50-E7   (hex)		Eta Compute Inc.
+D00000-DFFFFF     (base 16)		Eta Compute Inc.
+				182 S. Murphy Ave
+				Sunnyvale  CA  94086
+				US
+
+80-02-F4   (hex)		Sichuan lookout environment protection technology co.,Ltd
+100000-1FFFFF     (base 16)		Sichuan lookout environment protection technology co.,Ltd
+				No. 1015, floor 10, unit 2, building 1, No. 1616, Nanhua Road, high tech Zone
+				Chengdu  Sichuan  610052
+				CN
+
+80-02-F4   (hex)		Wuhan Glory Road Intelligent Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Wuhan Glory Road Intelligent Technology Co., Ltd.
+				18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone
+				Wuhan  Hubei  430073
+				CN
+
+8C-51-09   (hex)		PROCET Technology Co., Ltd(HK)
+200000-2FFFFF     (base 16)		PROCET Technology Co., Ltd(HK)
+				Flat B,4/F, Kjngswell Commercial Tower, 171-173 Lockhard Road, Wanchai, Hongkong
+				Hong kong    999077
+				HK
+
+80-02-F4   (hex)		Alfred Systems Inc
+E00000-EFFFFF     (base 16)		Alfred Systems Inc
+				13F, No. 2, Sec. 5, Xinyi Rd.
+				Taipei city    110
+				TW
+
+8C-51-09   (hex)		SpotterRF LLC
+C00000-CFFFFF     (base 16)		SpotterRF LLC
+				720 Timpanogos Parkway
+				Orem  UT  84097
+				US
+
+0C-7F-ED   (hex)		Tango Networks Inc
+200000-2FFFFF     (base 16)		Tango Networks Inc
+				2801 Network Blvd, Suite 200
+				Frisco  TX  TX 75034
+				US
+
+0C-7F-ED   (hex)		Purple Mountain ,Inc
+400000-4FFFFF     (base 16)		Purple Mountain ,Inc
+				New District
+				SuZhou  JiangSu  215000
+				CN
+
+FC-61-79   (hex)		EchoStar Mobile
+300000-3FFFFF     (base 16)		EchoStar Mobile
+				25/28 NORTH WALL QUAY, DUBLIN 1, D01H104        Ireland
+				Dublin  Ireland  D01H104
+				IE
+
+0C-7F-ED   (hex)		environmental systems corporation
+E00000-EFFFFF     (base 16)		environmental systems corporation
+				122F Commerce Park Drive
+				Barrie    Ontario  L4N 8W8 
+				CA
+
+FC-61-79   (hex)		CHOEUNENG
+400000-4FFFFF     (base 16)		CHOEUNENG
+				22, Ildong-ro, Sangnok-gu
+				Ansan-si  Gyeonggi-do  15326
+				KR
+
+FC-61-79   (hex)		Hangzhou LiDe Communication Co.,Ltd
+600000-6FFFFF     (base 16)		Hangzhou LiDe Communication Co.,Ltd
+				No.188,DongJia Rd,Tonglu Econominc Development Zone,Hangzhou,Zhejiang,
+				Hangzhou    311500
+				CN
+
+30-3D-51   (hex)		Harman Connected Services Corporation India Pvt. Ltd.
+200000-2FFFFF     (base 16)		Harman Connected Services Corporation India Pvt. Ltd.
+				Plot No 3 & 3A, EOIZ Industrial Area, Sy.No.85 and 86, KIADB, Whitefield,
+				Bengaluru  Karnataka  560066
+				IN
+
+FC-61-79   (hex)		ACCO Brands USA LLC
+E00000-EFFFFF     (base 16)		ACCO Brands USA LLC
+				Four Corporate Drive
+				Lake Zurich  IL  60047-2997
+				US
+
+30-3D-51   (hex)		Annapurna labs
+900000-9FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+2C-69-1D   (hex)		Hunan Xiangjiang Kunpeng Information Technology Co., Ltd.
+000000-0FFFFF     (base 16)		Hunan Xiangjiang Kunpeng Information Technology Co., Ltd.
+				Building 1# and Building 4#, No. 67 Ziyuan Road, Xueshi Street, Yuelu District,
+				Changsha  Hunan  410006
+				CN
+
+30-3D-51   (hex)		Destiny Automate Limited
+700000-7FFFFF     (base 16)		Destiny Automate Limited
+				Aw House, 6-8 Stuart Street
+				Luton  Bedfordshire  LU1 2SJ
+				GB
+
+2C-69-1D   (hex)		Abode Systems Inc
+200000-2FFFFF     (base 16)		Abode Systems Inc
+				2625 Middlefield Road
+				Palo Alto  CA  94306
+				US
+
+2C-69-1D   (hex)		Shenzhen Daren HI-Tech Electronics Co., Ltd.
+B00000-BFFFFF     (base 16)		Shenzhen Daren HI-Tech Electronics Co., Ltd.
+				Room 401, No. 5, Jiayi Industrial Park, Guihua Community, Guanlan Street, Longhua District, Shenzhen
+				Shenzhen  Guangdong  518109
+				CN
+
+2C-69-1D   (hex)		Ascentac Inc.
+D00000-DFFFFF     (base 16)		Ascentac Inc.
+				11F.-1, No.80, Minzu 1st Rd., Sanmin Dist., Kaohsiung City 807, Taiwan (R.O.C.)
+				Kaohsiung City  Taiwan  807
+				TW
+
+14-1F-BA   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+				445 Hoes Lane
+				PISCATAWAY  NJ  08854
+				US
+
+BC-34-00   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+				445 Hoes Lane
+				PISCATAWAY  NJ  08854
+				US
+
+80-7B-85   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+				445 Hoes Lane
+				PISCATAWAY  NJ  08854
+				US
+
+78-C2-C0   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+				445 Hoes Lane
+				PISCATAWAY  NJ  08854
+				US
+
+F4-90-CB   (hex)		Fend Incorporated
+A00000-AFFFFF     (base 16)		Fend Incorporated
+				4600 Fairfax Dr Ste 410
+				Arlington  VA  22203-1553
+				US
+
+18-C3-F4   (hex)		SHENZHEN MEGMEET ELECTRICAL CO., LTD
+E00000-EFFFFF     (base 16)		SHENZHEN MEGMEET ELECTRICAL CO., LTD
+				5th Floor?Block B?Ziguang information Harbor?Langshan Rd., Science & Technology Park,Nahshan District,ShenZhen
+				ShenZhen    518051
+				CN
+
+18-C3-F4   (hex)		Scati Labs, S.A.
+000000-0FFFFF     (base 16)		Scati Labs, S.A.
+				Ronda del Canal Imperial de Aragon 18-20
+				ZARAGOZA  Aragon  50197
+				ES
+
+88-3C-C5   (hex)		KMtronic ltd
+700000-7FFFFF     (base 16)		KMtronic ltd
+				Dobri Czintulov 28A str.
+				 Gorna Oryahovica  VT  5100
+				BG
+
+88-3C-C5   (hex)		Chengdu Data Sky Technology Co., Ltd.
+000000-0FFFFF     (base 16)		Chengdu Data Sky Technology Co., Ltd.
+				No. 88, Tianchen Road, Hezuo Street, West District, High-tech Zone, Chengdu City, Sichuan Province
+				Chengdu  Sichuan  610000
+				CN
+
+58-47-CA   (hex)		Shenzhen Meigao Electronic Equipment Co.,Ltd
+700000-7FFFFF     (base 16)		Shenzhen Meigao Electronic Equipment Co.,Ltd
+				B201 B221-B222, Pinghu Center Plant, Shenye Logistics  No. 6 Fukang Rd., Hehua Community, Pinghu Street   Longgang District, Shenzhen
+				ShenZhen    518111
+				CN
+
+58-47-CA   (hex)		PRACTEK Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		PRACTEK Technology Co., Ltd.
+				1/F, No.1 Building, No.168 Dieqiao Road, Pudong
+				Shanghai    201315
+				CN
+
+58-47-CA   (hex)		ONAWHIM (OAW) INC.
+200000-2FFFFF     (base 16)		ONAWHIM (OAW) INC.
+				161 West 87th Street
+				New York  NY  10024
+				US
+
+D4-20-00   (hex)		Shenzhen AI Develop & Manufacture Co.,LTD.
+200000-2FFFFF     (base 16)		Shenzhen AI Develop & Manufacture Co.,LTD.
+				Room 609, Building 1, Phase 2, Gaoxinqi Strategic Emerging Industrial Park, Liu Xian 1st Road,Baoan
+				Shenzhen  Guangdong  518101
+				CN
+
+C4-83-72   (hex)		Wuhan Da Ta Technologies Co.,Ltd.
+500000-5FFFFF     (base 16)		Wuhan Da Ta Technologies Co.,Ltd.
+				Room801, Building C2, Future Science & Technology City, No. 999 Gaoxin Avenue, Donghu New Technology Development Zone,
+				Wuhan  Hubei  430075
+				CN
+
+C4-83-72   (hex)		Biwave Technologies, Inc.
+900000-9FFFFF     (base 16)		Biwave Technologies, Inc.
+				12F-1  No-391  Sec-4  Xinyi-Rd
+				Taipei  Taiwan  110601
+				TW
+
+D4-BA-BA   (hex)		Beijing Yuanxin Junsheng Technology Co.,ltd
+400000-4FFFFF     (base 16)		Beijing Yuanxin Junsheng Technology Co.,ltd
+				4th floor, building 3, No. 11, Hepingli East Street, Dongcheng District, Beijing
+				beijing    100013
+				CN
+
+C4-83-72   (hex)		Transact Technologies Inc
+400000-4FFFFF     (base 16)		Transact Technologies Inc
+				20 Bomax Drive
+				Ithaca    14850
+				US
+
+C4-98-94   (hex)		Alpine Electronics Marketing, Inc.
+400000-4FFFFF     (base 16)		Alpine Electronics Marketing, Inc.
+				1-7, Yukigaya-otsukamachi, Ota-ku
+				Tokyo    145-8501
+				JP
+
+C4-98-94   (hex)		Shanghai YVR Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Shanghai YVR Technology Co., Ltd.
+				Building #3, No.1, Caosong Rd, Songjiang District 
+				Shanghai  Shanghai  201612
+				CN
+
+C4-98-94   (hex)		Shenzhen Megmeet Drive Technology Co.,Ltd.
+000000-0FFFFF     (base 16)		Shenzhen Megmeet Drive Technology Co.,Ltd.
+				Ziguang Information Port, Langshan Road, North District, Science and Technology Park, Nanshan District, Shenzhen
+				SHENZHEN    518000
+				CN
+
+D0-96-86   (hex)		PROVCOM LTD
+100000-1FFFFF     (base 16)		PROVCOM LTD
+				1305 N Bascom Ave Ste H
+				San Jose  CA  95128
+				US
+
+C4-98-94   (hex)		Aetina Corporation 
+600000-6FFFFF     (base 16)		Aetina Corporation 
+				2F-1, No.237. Sec.1 , Datong Rd., Xizhi Dist
+				New Taipei City    221
+				TW
+
+D0-96-86   (hex)		Camfil
+900000-9FFFFF     (base 16)		Camfil
+				Avda. Juan Carlos I, Nº13 4ªPlanta
+				Alcalá de Henares  Madrid  28806 
+				ES
+
+4C-74-A7   (hex)		GoCodeIT Inc
+300000-3FFFFF     (base 16)		GoCodeIT Inc
+				8171 Yonge StreetSuite 255
+				Thornhill  Ontario  L3T2C6
+				CA
+
+4C-74-A7   (hex)		N3com
+C00000-CFFFFF     (base 16)		N3com
+				Proektiruemiy proezd 4062, 6b1, office 71
+				Moscow    115432
+				RU
+
+D4-61-37   (hex)		Shenzhen smart-core technology co.,ltd.
+100000-1FFFFF     (base 16)		Shenzhen smart-core technology co.,ltd.
+				19/F., Finance & Technology Building, No.11 Keyuan Road, Nanshan Dist., Shenzhen, China
+				Shenzhen  Guangdong  518057
+				CN
+
+D4-61-37   (hex)		UAB Brolis sensor technology
+E00000-EFFFFF     (base 16)		UAB Brolis sensor technology
+				Moletu pl. 73
+				Vilnius    14259
+				LT
+
+D4-61-37   (hex)		APPOTRONICS CO., LTD
+300000-3FFFFF     (base 16)		APPOTRONICS CO., LTD
+				22F,High-tech Zone Union Tower 63 Xuefu Road Shenzhen China
+				Shenzhen  Guangdong  518000
+				CN
+
+D4-61-37   (hex)		Robert Bosch Elektronikai Kft.
+200000-2FFFFF     (base 16)		Robert Bosch Elektronikai Kft.
+				Robert Bosch út 1.
+				Hatvan  Heves  3000
+				HU
+
+D4-61-37   (hex)		Securus CCTV India
+600000-6FFFFF     (base 16)		Securus CCTV India
+				KM Electronic Cables Pvt Ltd, KM House, Near Maurya Complex, Ashram Road
+				Ahmedabad    380014
+				IN
+
+F0-22-1D   (hex)		Shenzhen Glazero Technology Co., Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Glazero Technology Co., Ltd.
+				201 Block A, #1 Qianwan 1st Road, Qianhai Shenzhen-Hong Kong Cooperation Zone
+				Shenzhen  Guangdong  518000
+				CN
+
+F0-22-1D   (hex)		Shenzhen SuyuVisonTechnology Co.,Ltd
+500000-5FFFFF     (base 16)		Shenzhen SuyuVisonTechnology Co.,Ltd
+				16G, Bldg A Haiwang,Yuehai Sub-District,  Nanshan District, ShenZhen, China
+				Shenzhen  Guangdong  518001
+				CN
+
+F0-22-1D   (hex)		Bulat Co., Limited
+700000-7FFFFF     (base 16)		Bulat Co., Limited
+				ROOM A1, 11/F WINNER BUILDING,36 MAN YUE STREET, HUNG HOM,KOWLOON,hongkong
+				hongkong    999077
+				HK
+
+F0-22-1D   (hex)		Shanghai Gfanxvision Intelligent Technology Co.Ltd
+900000-9FFFFF     (base 16)		Shanghai Gfanxvision Intelligent Technology Co.Ltd
+				Room 506, No. 19, No. 498, GuoShouJing Road
+				Shanghai  Pudong New Area  201203
+				CN
+
+E0-38-2D   (hex)		SiLAND Chengdu Technology Co., Ltd
+C00000-CFFFFF     (base 16)		SiLAND Chengdu Technology Co., Ltd
+				Tianren Road,Chengdu Hi-tech Zone
+				ChengDu  Sichuan  610041
+				CN
+
+E0-38-2D   (hex)		Beijing Cgprintech Technology Co.,Ltd
+000000-0FFFFF     (base 16)		Beijing Cgprintech Technology Co.,Ltd
+				3A floor, Block B, Science and Technology Wealth Center, No. 8 Xueqing Road, Haidian District, Beijing
+				Beijing  Beijing  100192
+				CN
+
+E0-38-2D   (hex)		iTracxing
+600000-6FFFFF     (base 16)		iTracxing
+				 8F., No. 182, Sec. 2, Dunhua S. Rd., Da’an Dist., Taipei City 106033 , Taiwan (R.O.C.)
+				Taipei City   Da’an Dist.,  106033
+				TW
+
+E0-38-2D   (hex)		Annapurna labs
+300000-3FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+0C-CC-47   (hex)		Foxconn Brasil Industria e Comercio Ltda
+E00000-EFFFFF     (base 16)		Foxconn Brasil Industria e Comercio Ltda
+				Av. Marginal da Rodovia dos Bandeirantes, 800 - Distrito Industrial
+				Jundiaí  Sao Paulo  13213-008
+				BR
+
+84-B3-86   (hex)		Fusus
+500000-5FFFFF     (base 16)		Fusus
+				5550 TRIANGLE PKWY, STE 385
+				PEACHTREE CORNERS  GA  30092
+				US
+
+84-B3-86   (hex)		Sichuan Huakun Zhenyu Intelligent Technology Co., Ltd
+100000-1FFFFF     (base 16)		Sichuan Huakun Zhenyu Intelligent Technology Co., Ltd
+				24F, Block C, Maoye Center, No. 28, North Section of Tianfu Avenue, High tech Zone, Chengdu, Sichuan
+				Chengdu  Sichuan  621050
+				CN
+
+84-B3-86   (hex)		Phonesuite
+300000-3FFFFF     (base 16)		Phonesuite
+				400 Liberty Park Court
+				Flowood    39232
+				US
+
+C4-A5-59   (hex)		Hebei Far-East Communication System Engineerning Co.,Ltd.
+A00000-AFFFFF     (base 16)		Hebei Far-East Communication System Engineerning Co.,Ltd.
+				NO.21, Changsheng Street, Luquan Economic Development Zone
+				Shijiazhuang   Hebei Prov  050000
+				CN
+
+C4-A5-59   (hex)		Moultrie Mobile
+500000-5FFFFF     (base 16)		Moultrie Mobile
+				5724 Highway 280 East
+				Birmingham  AL  35242
+				US
+
+C4-A5-59   (hex)		Annapurna labs
+600000-6FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+94-C9-B7   (hex)		OSOM Products Inc
+800000-8FFFFF     (base 16)		OSOM Products Inc
+				10930 Miramonte Road
+				Cupertino  CA  95014
+				US
+
+70-5A-6F   (hex)		Annapurna labs
+900000-9FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+70-5A-6F   (hex)		Hall Technologies
+E00000-EFFFFF     (base 16)		Hall Technologies
+				1234 Lakeshore Dr., Ste. 150
+				Coppell  TX  75019
+				US
+
+8C-5D-B2   (hex)		NADDOD
+B00000-BFFFFF     (base 16)		NADDOD
+				6 Raffles Quay, #14-06 
+				Singapore    048580
+				SG
+
+8C-5D-B2   (hex)		Beijing Scistor Technologies Co., Ltd
+A00000-AFFFFF     (base 16)		Beijing Scistor Technologies Co., Ltd
+				Floor2,Ruipu Electronic Building,NO.5 Xiaguangli,Chaoyang District
+				Beijing  Beijing  100125
+				CN
+
+8C-5D-B2   (hex)		HEXIN Technologies Co., Ltd.
+C00000-CFFFFF     (base 16)		HEXIN Technologies Co., Ltd.
+				Room 301, No. 45 Ruiji 2nd Street, Huangpu District, 
+				Guangzhou    510799
+				CN
+
+C0-EA-C3   (hex)		OLEDCOMM
+900000-9FFFFF     (base 16)		OLEDCOMM
+				10-12 avenue de l'Europe
+				Vélizy Villacoublay  Ile de France  78140
+				FR
+
+8C-5D-B2   (hex)		Surbhi Satcom Pvt Ltd
+E00000-EFFFFF     (base 16)		Surbhi Satcom Pvt Ltd
+				D-23, Sector 11
+				Noida  Uttar Pradesh  201301
+				IN
+
+C0-EA-C3   (hex)		VOLT EQUIPAMENTOS ELETRONICOS LTDA
+A00000-AFFFFF     (base 16)		VOLT EQUIPAMENTOS ELETRONICOS LTDA
+				AV SAPUCAI 111 
+				SANTA RITA DO SAPUCAI  MINAS GERAIS  37540000
+				BR
+
+7C-45-F9   (hex)		Interactive Technologies, Inc.
+500000-5FFFFF     (base 16)		Interactive Technologies, Inc.
+				5295 Lake Pointe Center Drive
+				Cumming  GA  30041
+				US
+
+7C-45-F9   (hex)		HANK ELECTRONICS CO., LTD
+600000-6FFFFF     (base 16)		HANK ELECTRONICS CO., LTD
+				HANK Industry Park, 118 Shaxin Road, Tangxia Town
+				Dongguan  Guangdong  523900
+				CN
+
+7C-45-F9   (hex)		Xemex NV
+C00000-CFFFFF     (base 16)		Xemex NV
+				Metropoolstraat 11a
+				Schoten  Antwerp  BE-2900
+				BE
+
+7C-45-F9   (hex)		SPECS Surface Nano Analysis GmbH
+400000-4FFFFF     (base 16)		SPECS Surface Nano Analysis GmbH
+				Voltastraße 5
+				Berlin    13355
+				DE
+
+5C-6A-EC   (hex)		Shanghai Alway Information Technology Co., Ltd
+900000-9FFFFF     (base 16)		Shanghai Alway Information Technology Co., Ltd
+				Building 47, No. 555, Guiping Road, Xuhui District
+				Shanghai  Shanghai  200233
+				CN
+
+5C-6A-EC   (hex)		Nippon Pulse Motor Co., Ltd.
+700000-7FFFFF     (base 16)		Nippon Pulse Motor Co., Ltd.
+				2-16-13 Hongo, Bunkyo-ku
+				Tokyo    113-0033
+				JP
+
+5C-6A-EC   (hex)		Acuity Brands Lighting
+000000-0FFFFF     (base 16)		Acuity Brands Lighting
+				1 Acuity Way
+				Decatur    30035
+				US
+
+D0-93-95   (hex)		AT&T
+200000-2FFFFF     (base 16)		AT&T
+				200 South Laurel Avenue
+				Middletown  NJ  07748
+				US
+
+5C-6A-EC   (hex)		Saab Seaeye Ltd
+E00000-EFFFFF     (base 16)		Saab Seaeye Ltd
+				20 Brunel Way
+				Fareham  Hampshire  PO15 5SD
+				GB
+
+D0-16-F0   (hex)		Top Guard Technologies
+D00000-DFFFFF     (base 16)		Top Guard Technologies
+				9200 Corporate BlvdSuite 250
+				Rockville  MD  20850
+				US
+
+D0-16-F0   (hex)		RYSE Inc.
+200000-2FFFFF     (base 16)		RYSE Inc.
+				Unit 300, 251 Spadina Ave
+				Toronto  Ontario  M5T2E2
+				CA
+
+D0-16-F0   (hex)		Tornado Modular Systems
+600000-6FFFFF     (base 16)		Tornado Modular Systems
+				Inzhenernaya str. 4a
+				Novosibirsk    630090
+				RU
+
+E0-3C-1C   (hex)		Hangzhou Uni-Ubi Co.,Ltd.
+B00000-BFFFFF     (base 16)		Hangzhou Uni-Ubi Co.,Ltd.
+				Room 605, Building No.5, HaiChuang Park, No.998, Wenyi Road(West), YuHang District
+				HangZhou  ZheJiang  311121
+				CN
+
+54-08-3B   (hex)		Vector Atomic
+600000-6FFFFF     (base 16)		Vector Atomic
+				5700 Stoneridge Dr, Suite 102
+				Pleasanton  CA  94588
+				US
+
+54-08-3B   (hex)		Annapurna labs
+100000-1FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+54-08-3B   (hex)		Silex Ipari Automatizálási Zrt.
+A00000-AFFFFF     (base 16)		Silex Ipari Automatizálási Zrt.
+				Soroksári út.150.
+				Budapest, IX.    1095
+				HU
+
+54-08-3B   (hex)		ASCS Sp. z o.o.
+700000-7FFFFF     (base 16)		ASCS Sp. z o.o.
+				Zwirki i Wigury 65A
+				Mikolow  Slask  43-190 Mikolow
+				PL
+
+70-06-92   (hex)		ScoreBird, LLC
+C00000-CFFFFF     (base 16)		ScoreBird, LLC
+				6001 Kenwood Drive
+				Nashville  TN  37215
+				US
+
+70-06-92   (hex)		JMA Wireless
+800000-8FFFFF     (base 16)		JMA Wireless
+				140 Cortland Ave
+				Syracuse  NY  13202
+				US
+
+1C-A0-D3   (hex)		U-TX Technologies Ltd
+700000-7FFFFF     (base 16)		U-TX Technologies Ltd
+				Omonoia Avenue
+				Limassol  Cyprus  3045
+				CY
+
+20-85-93   (hex)		Great Lite International
+700000-7FFFFF     (base 16)		Great Lite International
+				11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist.,
+				New Taipei City  Taiwan  23143
+				TW
+
+4C-4B-F9   (hex)		Tecnoplus Srl
+900000-9FFFFF     (base 16)		Tecnoplus Srl
+				Via Cilavegna, 53
+				Gravellona Lomellina  Pavia  27020
+				IT
+
+98-06-37   (hex)		Summa nv
+200000-2FFFFF     (base 16)		Summa nv
+				Rochesterlaan 6
+				Gistel    8470
+				BE
+
+98-06-37   (hex)		Shanghai Jinnian information technology Co. Ltd
+E00000-EFFFFF     (base 16)		Shanghai Jinnian information technology Co. Ltd
+				Room 102-105 ,block 1 , No.33 leshan Road
+				Shanghai  Shanghai  200030
+				CN
+
+24-15-10   (hex)		Annapurna labs
+400000-4FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+44-D5-F2   (hex)		Auctus Technologies Co.,Ltd.
+900000-9FFFFF     (base 16)		Auctus Technologies Co.,Ltd.
+				17F, Building 3, China Science and Technology Development Park, No. 009, 1st South Gaoxin Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+44-D5-F2   (hex)		Shenzhen Qiutian Technology Co.,Ltd
+700000-7FFFFF     (base 16)		Shenzhen Qiutian Technology Co.,Ltd
+				5B01 5F Wangtang Building Xingao Road Xili Nanshan District
+				 Shenzhen  Guangdong  518000
+				CN
+
+44-D5-F2   (hex)		Joint-Stock Company Research and Development Center ELVEES
+E00000-EFFFFF     (base 16)		Joint-Stock Company Research and Development Center ELVEES
+				Proezd 4922, Dom 4, Stroenie 2
+				Zelenograd  Moscow  124498
+				RU
+
+44-D5-F2   (hex)		neocontrol soluções em automação
+C00000-CFFFFF     (base 16)		neocontrol soluções em automação
+				rua santa fe 100
+				belo horizonte  MG  30320-130
+				BR
+
+D0-5F-64   (hex)		Hangzhou ToupTek Photonics Co., Ltd.
+100000-1FFFFF     (base 16)		Hangzhou ToupTek Photonics Co., Ltd.
+				4F, Block A, B, Building 2, NO.321, Jinpeng Street, Xihu District
+				Hangzhou  Zhejiang  310030
+				CN
+
+FC-A4-7A   (hex)		Shenzhen VMAX New Energy Co., Ltd.
+100000-1FFFFF     (base 16)		Shenzhen VMAX New Energy Co., Ltd.
+				5F, Fengyun Building, No.5 Road, Hi-Tech Industrial Park (North), Nanshan District, 
+				Shenzhen  Guangdong  518057
+				CN
+
+D0-5F-64   (hex)		Beijing Core Shield Group Co., Ltd.
+700000-7FFFFF     (base 16)		Beijing Core Shield Group Co., Ltd.
+				2/F, Tower C, Building 4,  Zhongguancun Software Park, No.8 Dongbeiwang West Road, Haidian District, Beijing, China
+				Beijing    100085
+				CN
+
+2C-16-BD   (hex)		Shenzhen elink smart Co., ltd
+800000-8FFFFF     (base 16)		Shenzhen elink smart Co., ltd
+				Floor 2,Building A , Hongtian Xinfengze Industrial   Park Huang Pu Community , Xin Qiao District ,Baoan Area
+				shenzhen  Guangdong Province  518101
+				CN
+
+2C-16-BD   (hex)		Shenzhen Haiying Wire Tech Co., Ltd.
+A00000-AFFFFF     (base 16)		Shenzhen Haiying Wire Tech Co., Ltd.
+				5/F, No. 6 Bldg, Longcheng Industrial Park, Longhua District
+				Shenzhen  Guangdong  518110
+				CN
+
+FC-A4-7A   (hex)		Cliptech Industria e Comercio Ltda
+300000-3FFFFF     (base 16)		Cliptech Industria e Comercio Ltda
+				ROD VICE PREF HERMENEGILDO TONOLI, 2285
+				ITUPEVA  SAO PAULO  13295000
+				BR
+
+B4-A2-EB   (hex)		Softel SA de CV
+400000-4FFFFF     (base 16)		Softel SA de CV
+				Camino a Santa Teresa 
+				Tlalpan    14010
+				MX
+
+B4-A2-EB   (hex)		Katerra Inc
+200000-2FFFFF     (base 16)		Katerra Inc
+				2494 Sand Hill Rd, Bldg 7, Suite 100
+				Menlo Park  CA  94025-6981
+				US
+
+80-E4-DA   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+8C-59-3C   (hex)		Qbic Technology Co., Ltd
+600000-6FFFFF     (base 16)		Qbic Technology Co., Ltd
+				26F.-12, No.99, Sec. 1, Xintai 5th Rd., Xizhi Dist.,
+				New Taipei     22175
+				TW
+
+8C-59-3C   (hex)		IDRO-ELETTRICA S.P.A.
+D00000-DFFFFF     (base 16)		IDRO-ELETTRICA S.P.A.
+				VIA BELLINI 2
+				SAN CESARIO SUL PANARO  ITALY/MODENA  41018
+				IT
+
+8C-59-3C   (hex)		Chongqing beimoting technology co.ltd
+300000-3FFFFF     (base 16)		Chongqing beimoting technology co.ltd
+				97-2 keyuan 2nd street, jiulongpo district,
+				Chongqing  Chongqing  400039
+				CN
+
+8C-59-3C   (hex)		Fujian Chaozhi Group Co., Ltd.
+000000-0FFFFF     (base 16)		Fujian Chaozhi Group Co., Ltd.
+				Chaozhi Group, 13th Floor, Zhongqing Building, Haixi Science and Technology Park, Shangjie Town, Minhou County
+				Fuzhou  Fujian  350000
+				CN
+
+D0-C8-57   (hex)		CHUNGHSIN INTERNATIONAL ELECTRONICS CO.,LTD.
+B00000-BFFFFF     (base 16)		CHUNGHSIN INTERNATIONAL ELECTRONICS CO.,LTD.
+				618-2# Gongren West Road,Jiaojiang,
+				Taizhou  Zhejiang  317700
+				CN
+
+D0-C8-57   (hex)		DALI A/S
+100000-1FFFFF     (base 16)		DALI A/S
+				Dali Alle 1
+				Norager    9610
+				DK
+
+BC-97-40   (hex)		ForoTel
+B00000-BFFFFF     (base 16)		ForoTel
+				77, Shaumyana Str. 
+				Rostov-na-Donu  UFO  344079
+				RU
+
+BC-97-40   (hex)		Gaodi Rus
+800000-8FFFFF     (base 16)		Gaodi Rus
+				Korneeva, 14
+				Elektrostal  Moscow region  144009
+				RU
+
+60-95-CE   (hex)		AdvanWISE Corporation
+500000-5FFFFF     (base 16)		AdvanWISE Corporation
+				No.11, Aly. 18, Ln. 85, Fuqun St., Xiangshan Dist.
+				Hsinchu    30067
+				TW
+
+84-8B-CD   (hex)		Dunst tronic GmbH
+800000-8FFFFF     (base 16)		Dunst tronic GmbH
+				Seevetalstraße, 2
+				Seevetal  Niedersachsen  21217
+				DE
+
+84-8B-CD   (hex)		Annapurna labs
+300000-3FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+84-8B-CD   (hex)		Emotiv Inc
+E00000-EFFFFF     (base 16)		Emotiv Inc
+				490 Post Street
+				San Francisco  CA  94102
+				US
+
+84-8B-CD   (hex)		ENGISAT LDA
+D00000-DFFFFF     (base 16)		ENGISAT LDA
+				RUA CENTRAL SAO LOURENÇO Nº 312
+				VILAR DE ANDORINHO  PORTO  4430-358
+				PT
+
+84-8B-CD   (hex)		Smart Code (Shenzhen) Technology Co.,Ltd
+700000-7FFFFF     (base 16)		Smart Code (Shenzhen) Technology Co.,Ltd
+				Keji North 3rd Rd
+				Shenzhen  guangdong  518000
+				CN
+
+B0-FD-0B   (hex)		Fasii Information Technology (Shanghai) Ltd.
+400000-4FFFFF     (base 16)		Fasii Information Technology (Shanghai) Ltd.
+				Room 5011, Building 1, No.335 Guoding Road, Yangpu District
+				Shanghai  Shanghai  200433
+				CN
+
+B0-FD-0B   (hex)		TAE HYUNG Industrial Electronics Co., Ltd.
+000000-0FFFFF     (base 16)		TAE HYUNG Industrial Electronics Co., Ltd.
+				301-404, Bucheon Technopark, 345, Seokcheon-ro
+				Bucheon-si  Gyeonggi-do  14501
+				KR
+
+84-8B-CD   (hex)		Sphera Telecom
+A00000-AFFFFF     (base 16)		Sphera Telecom
+				Pos. Moscowskiy, 22-nd km of Kievskoye highway, household 4, building 2, body G, office 802G
+				Moscow    108811
+				RU
+
+C8-2C-2B   (hex)		Shiftall Inc.
+A00000-AFFFFF     (base 16)		Shiftall Inc.
+				4F TokyoDaiwa Bldg., 2-6-10 Nihonbashibakurocho, 
+				Chuo,   Tokyo  1030002
+				JP
+
+C8-2C-2B   (hex)		BIOT Sp. z o.o.
+900000-9FFFFF     (base 16)		BIOT Sp. z o.o.
+				Nowy Kisielin-Nowa 7
+				Zielona Góra  Lubuskie  66-002
+				PL
+
+E4-1E-0A   (hex)		Shanghai LeXiang Technology Co., Ltd
+E00000-EFFFFF     (base 16)		Shanghai LeXiang Technology Co., Ltd
+				Floor 6,Building 8,Yanjiaqiao Road,Pudong Area ,Shanghai ,China
+				shanghai    200125
+				CN
+
+C8-2C-2B   (hex)		Fungible, Inc.
+000000-0FFFFF     (base 16)		Fungible, Inc.
+				3201 Scott Blvd., 2nd floor
+				Santa Clara  CA  95054
+				US
+
+B0-FD-0B   (hex)		Habana Labs LTD
+D00000-DFFFFF     (base 16)		Habana Labs LTD
+				5 Tarshish St,
+				Caesarea    3079821
+				IL
+
+E4-1E-0A   (hex)		TELETASK BELGIUM
+C00000-CFFFFF     (base 16)		TELETASK BELGIUM
+				Ottergemsesteenweg-zuid 729
+				GENT  Oost-Vlaanderen  9000
+				BE
+
+C8-63-14   (hex)		GRINBI PARTNERS
+600000-6FFFFF     (base 16)		GRINBI PARTNERS
+				222, Dogok-ro, Gangnam-gu
+				Seoul    06272
+				KR
+
+E4-1E-0A   (hex)		ROMO Wind A/S
+D00000-DFFFFF     (base 16)		ROMO Wind A/S
+				Olof Palmes Allé 47
+				Aarhus N    8200
+				DK
+
+C8-63-14   (hex)		Shenzhen Wesion Technology Co., Ltd
+700000-7FFFFF     (base 16)		Shenzhen Wesion Technology Co., Ltd
+				A511, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
+				Shenzhen  Guangdong  518102
+				CN
+
+C8-63-14   (hex)		Shenzhen Zero Zero Infinity Technology Co.，Ltd.
+400000-4FFFFF     (base 16)		Shenzhen Zero Zero Infinity Technology Co.，Ltd.
+				309 Rainbow Technology Building, 36 Gaoxin North 6th Road, Xili Street
+				Shenzhen  Guangdong  518000
+				CN
+
+C8-63-14   (hex)		Telematix AG
+D00000-DFFFFF     (base 16)		Telematix AG
+				Freiburgstrasse 251
+				Bern  Bern  3018
+				CH
+
+C8-63-14   (hex)		TrackMan
+300000-3FFFFF     (base 16)		TrackMan
+				Stubbeled 2
+				Vedbaek    2950
+				DK
+
+34-E1-D1   (hex)		Annapurna labs
+E00000-EFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+FC-D2-B6   (hex)		Oviss Labs Inc.
+800000-8FFFFF     (base 16)		Oviss Labs Inc.
+				46259 Warm Springs Blvd
+				Fremont  CA  94539
+				US
+
+34-E1-D1   (hex)		Tianjin Sublue Ocean Science & Technology Co., Ltd
+000000-0FFFFF     (base 16)		Tianjin Sublue Ocean Science & Technology Co., Ltd
+				No.29 Factory No.156 Nanhai Road,TEDA
+				Tianjin    300050
+				CN
+
+34-E1-D1   (hex)		Doki Technologies Limited
+500000-5FFFFF     (base 16)		Doki Technologies Limited
+				Unit 601,Tower One, Silvercord, 30 Canton Road, Tsim Sha Tsui
+				Kowloon    00000
+				HK
+
+34-E1-D1   (hex)		Teton Camera LLC
+200000-2FFFFF     (base 16)		Teton Camera LLC
+				PO BOX 648
+				PINEDALE  WY  82941-0648
+				US
+
+74-5B-C5   (hex)		EDOMO Systems GmbH
+800000-8FFFFF     (base 16)		EDOMO Systems GmbH
+				Obertorplatz 2
+				Landau  Deutschland (DEU)  76829
+				DE
+
+90-C6-82   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+FC-D2-B6   (hex)		Grandway Technology (Shenzhen) Limited
+500000-5FFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
+				Block 7, Zhu Keng Industrial Zone
+				Ping Shan District  Shenzhen  518118
+				CN
+
+FC-D2-B6   (hex)		CG POWER AND INDUSTRIAL SOLUTIONS LTD
+000000-0FFFFF     (base 16)		CG POWER AND INDUSTRIAL SOLUTIONS LTD
+				A-3, MIDC , AMBAD 
+				NASHIK  MAHARASHTRA  422010
+				IN
+
+FC-D2-B6   (hex)		T CHIP DIGITAL TECHNOLOGY CO.LTD
+B00000-BFFFFF     (base 16)		T CHIP DIGITAL TECHNOLOGY CO.LTD
+				Room 320, C Tower, Jingji Building, HuaFeng Headquarter, Xixiang, Baoan
+				SHENZHEN  Guangdong  518000
+				CN
+
+E4-4C-C7   (hex)		FLK information security technology Co,. Ltd
+E00000-EFFFFF     (base 16)		FLK information security technology Co,. Ltd
+				Room 1801, Yinfeng Building, No. 1505, Binsheng Road, Binjiang District
+				Hangzhou  Zhejiang  310051
+				CN
+
+E4-4C-C7   (hex)		IAG GROUP LTD
+800000-8FFFFF     (base 16)		IAG GROUP LTD
+				IAG Industrial Park, Jiuwei, Xixiang Town, Baoan, Shenzhen, China.
+				shenzhen    518000
+				CN
+
+74-5B-C5   (hex)		uGrid Network Inc.
+400000-4FFFFF     (base 16)		uGrid Network Inc.
+				602 Gabriola Way
+				Ottawa  Ontario  K2T 0M2
+				CA
+
+E4-4C-C7   (hex)		Muzik Inc
+A00000-AFFFFF     (base 16)		Muzik Inc
+				9220 Sunset Blvd #112
+				West Hollywood    CA 90069
+				US
+
+4C-BC-98   (hex)		Airtex Manufacturing Partnership
+900000-9FFFFF     (base 16)		Airtex Manufacturing Partnership
+				1441 Hastings Cres. SE
+				Calgary  Alberta  T2G 4C8
+				CA
+
+4C-BC-98   (hex)		Voegtlin Instruments GmbH
+700000-7FFFFF     (base 16)		Voegtlin Instruments GmbH
+				Langenhagstrasse 1
+				Aesch    CH-4147
+				CH
+
+4C-BC-98   (hex)		Heliotis AG
+C00000-CFFFFF     (base 16)		Heliotis AG
+				Längenbold 5
+				Root    6037
+				CH
+
+4C-BC-98   (hex)		Humanplus Intelligent Robotics Technology Co.,Ltd.
+600000-6FFFFF     (base 16)		Humanplus Intelligent Robotics Technology Co.,Ltd.
+				Room507,5th Floor, Zhongguancun Frontier Technology Innovation Building, No. 67 North Fourth Ring Road,Haidian District,
+				Beijing  Beijing  100089
+				CN
+
+2C-26-5F   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+A0-BB-3E   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+2C-6A-6F   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+4C-65-A8   (hex)		ZMIN Technologies
+B00000-BFFFFF     (base 16)		ZMIN Technologies
+				Room 403-405, Building C, Baoan New Generation Information Technology Industrial Park, No.139, Chuangye 2 Rd., Baoan District
+				ShenZhen  GuangDong  518101
+				CN
+
+E0-5A-9F   (hex)		Chengdu Song Yuan Electronic Technology Co.,Ltd
+200000-2FFFFF     (base 16)		Chengdu Song Yuan Electronic Technology Co.,Ltd
+				Building 63 Cui Feng International, No.366 Bai Cao Road, High-tech West Zone
+				Chengdu  Sichuan  610000
+				CN
+
+E0-5A-9F   (hex)		Contemporary Amperex Technology Co., Limited
+A00000-AFFFFF     (base 16)		Contemporary Amperex Technology Co., Limited
+				No.2 Xingang Road,  Zhangwan Town, Jiaocheng District
+				Ningde  Fujian  352000
+				CN
+
+E0-5A-9F   (hex)		Annapurna labs
+000000-0FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+E0-5A-9F   (hex)		Mountz, Inc.
+D00000-DFFFFF     (base 16)		Mountz, Inc.
+				1080 N. 11th Street
+				San Jose  CA  95112
+				US
+
+E0-5A-9F   (hex)		TRYEN
+500000-5FFFFF     (base 16)		TRYEN
+				Manan-gu Anyang-ro 110
+				Anyang  Kyeong-gi  14035
+				KR
+
+38-B1-9E   (hex)		Freedompro Srl
+100000-1FFFFF     (base 16)		Freedompro Srl
+				Via Frova, 34
+				Cinisello Balsamo    20092
+				IT
+
+D8-86-0B   (hex)		Krspace
+100000-1FFFFF     (base 16)		Krspace
+				Building 1, Junhao Central Park Plaza
+				ChaoYang District  Beijing  100125
+				CN
+
+38-B1-9E   (hex)		Doepke Schaltgeräte GmbH
+900000-9FFFFF     (base 16)		Doepke Schaltgeräte GmbH
+				Stellmacherstr. 11
+				Norden  Niedersachsen  26506
+				DE
+
+28-36-38   (hex)		Swisson AG
+C00000-CFFFFF     (base 16)		Swisson AG
+				Fabrikstrasse 21
+				Lyss    3250
+				CH
+
+CC-D3-9D   (hex)		Evoko Unlimited AB
+100000-1FFFFF     (base 16)		Evoko Unlimited AB
+				Hästholmsvägen 32
+				Nacka    13130
+				SE
+
+D4-25-CC   (hex)		bvk technology
+500000-5FFFFF     (base 16)		bvk technology
+				Mithatpasa Mah. Serin Cikmazi No:4 C Blok Kemerburgaz, Eyupsultan
+				Istanbul  Istanbul  34075
+				TR
+
+D4-25-CC   (hex)		POSNET Polska S.A.
+C00000-CFFFFF     (base 16)		POSNET Polska S.A.
+				ul. Municypalna 33
+				Warszawa    02-281
+				PL
+
+D4-25-CC   (hex)		MusicLens Inc.
+200000-2FFFFF     (base 16)		MusicLens Inc.
+				311 E VALLEY BLVD#112 PMB27
+				SANGABRIEL  CA  91776
+				US
+
+CC-D3-9D   (hex)		Lubelskie Fabryki Wag FAWAG S.A.
+A00000-AFFFFF     (base 16)		Lubelskie Fabryki Wag FAWAG S.A.
+				Łęczyńska 58
+				Lublin    20-954
+				PL
+
+38-B1-9E   (hex)		Beijing Memblaze Technology Co Ltd
+700000-7FFFFF     (base 16)		Beijing Memblaze Technology Co Ltd
+				Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian
+				Beijing  Beijing  100192
+				CN
+
+9C-69-B4   (hex)		EA Technology Ltd
+100000-1FFFFF     (base 16)		EA Technology Ltd
+				Capenhurst Technology Park
+				Chester  Cheshire  CH16ES
+				GB
+
+D4-25-CC   (hex)		DOLBY LABORATORIES, INC.
+800000-8FFFFF     (base 16)		DOLBY LABORATORIES, INC.
+				100 Potrero Avenue
+				San Francisco  CA  94103-4938
+				US
+
+68-91-D0   (hex)		G-TECH Instruments Inc.
+400000-4FFFFF     (base 16)		G-TECH Instruments Inc.
+				2F.-2, No.83, Sec. 2, Gongdao 5th Rd., East Dist.
+				Hsinchu    30070
+				TW
+
+9C-69-B4   (hex)		Intellect module LLC
+D00000-DFFFFF     (base 16)		Intellect module LLC
+				Krasnogo kursanta str. 25 lit. J
+				Saint-Petersburg    197110
+				RU
+
+D4-25-CC   (hex)		BlueCats US, LLC
+700000-7FFFFF     (base 16)		BlueCats US, LLC
+				6767 OLD MADISON PIKE NW, SUITE 300
+				Huntsville  AL  35806
+				US
+
+4C-91-7A   (hex)		Annapurna labs
+E00000-EFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+4C-91-7A   (hex)		Erlab DFS SAS
+A00000-AFFFFF     (base 16)		Erlab DFS SAS
+				Parc d'Affaires des Portes - BP403
+				Val de Reuil    27104
+				FR
+
+6C-DF-FB   (hex)		Sercomm Corporation.
+200000-2FFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+4C-91-7A   (hex)		AvertX
+B00000-BFFFFF     (base 16)		AvertX
+				23221 E. Knox Ave
+				Liberty Lake  WA  99019
+				US
+
+6C-DF-FB   (hex)		Shenzhen HDCVT Technology
+000000-0FFFFF     (base 16)		Shenzhen HDCVT Technology
+				Floor 7, Building 5, Lihe Industrial Park, Songbai Road, Xili Street, Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+7C-BC-84   (hex)		Guangzhou Puppyrobot Technology Co.Ltd Beijing Branch
+B00000-BFFFFF     (base 16)		Guangzhou Puppyrobot Technology Co.Ltd Beijing Branch
+				R&F center,63 East middle 3rd ring road
+				beijing    10000
+				CN
+
+7C-BC-84   (hex)		HITIQ LIMITED
+900000-9FFFFF     (base 16)		HITIQ LIMITED
+				628 Newcastle St
+				Leederville  WA  6007
+				AU
+
+7C-BC-84   (hex)		Tibit Communications
+C00000-CFFFFF     (base 16)		Tibit Communications
+				1 Willowbrook Court, Suite 150
+				Petaluma  CA  94954
+				US
+
+7C-BC-84   (hex)		CONTINENTAL
+400000-4FFFFF     (base 16)		CONTINENTAL
+				1 AVENUE PAUL OURLIAC
+				TOULOUSE    31100
+				FR
+
+7C-BC-84   (hex)		3S Technology Co., Ltd.
+200000-2FFFFF     (base 16)		3S Technology Co., Ltd.
+				301-1103, 345, Seokcheon-ro
+				Bucheon-si  Gyeonggi-do  14501
+				KR
+
+7C-BC-84   (hex)		AG Neovo
+000000-0FFFFF     (base 16)		AG Neovo
+				5F-1, No. 3-1, Park Street, Nangang District, Taipei, 11503, Taiwan
+				Taipei    11503
+				TW
+
+98-F9-C7   (hex)		Beijing Horizon Information Technology Co., Ltd
+300000-3FFFFF     (base 16)		Beijing Horizon Information Technology Co., Ltd
+				3F,Unit H, West Gate, Hailong Mansion, No.1 Zhongguancun Street, Haidian District
+				Beijing    100080
+				CN
+
+9C-43-1E   (hex)		HAESUNG DS
+200000-2FFFFF     (base 16)		HAESUNG DS
+				8F, Haesung 2 Building, 508, Teheran-ro, Gangnam-gu
+				Seoul    06178
+				KR
+
+0C-FE-5D   (hex)		Maksat Technologies P Ltd
+D00000-DFFFFF     (base 16)		Maksat Technologies P Ltd
+				D-10/6, Okhla, Phase-I, Okhla
+				New Delhi  Delhi  110020
+				IN
+
+98-F9-C7   (hex)		ShenZhen Chuangwei Electronic Appliance Co.,Ltd
+C00000-CFFFFF     (base 16)		ShenZhen Chuangwei Electronic Appliance Co.,Ltd
+				4F & 6F, Overseas plant south, Skyworth Industrial Park, Shiyan Street, Bao'an  District,
+				Shenzhen  Guangdong  518101
+				CN
+
+98-F9-C7   (hex)		HIROIA Communications Pte. Ltd. Taiwan Branch
+B00000-BFFFFF     (base 16)		HIROIA Communications Pte. Ltd. Taiwan Branch
+				7F., No.189, Xinhu 3rd Rd., Neihu Dist.,
+				Taipei City    11494
+				TW
+
+0C-FE-5D   (hex)		Celerway Communication AS
+900000-9FFFFF     (base 16)		Celerway Communication AS
+				Martin Lingesvei 25
+				Fornebu    1364
+				NO
+
+0C-FE-5D   (hex)		Fender Musical Instrument
+100000-1FFFFF     (base 16)		Fender Musical Instrument
+				17600 N Perimeter DR #100
+				Scottsdale  AZ  85255
+				US
+
+0C-FE-5D   (hex)		YINUO-LINK LIMITED
+B00000-BFFFFF     (base 16)		YINUO-LINK LIMITED
+				5 Floor, Chuangyecheng,Xinghua Road,Xingwei,Fuyong
+				Shenzhen  Guangdong  518103
+				CN
+
+80-0A-80   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+
+1C-FD-08   (hex)		MESHBOX FOUNDATION PTE. LTD.
+E00000-EFFFFF     (base 16)		MESHBOX FOUNDATION PTE. LTD.
+				152 Beach Road #14-02 GATEWAY EAST TOWER
+				SINGAPORE    189721
+				SG
+
+1C-FD-08   (hex)		Tianjin Keyvia Electric Co.,Ltd
+D00000-DFFFFF     (base 16)		Tianjin Keyvia Electric Co.,Ltd
+				No.15 HaitaiFazhanErlu Road, Binhai Hi-tech Industrial Huayuan Development Area(Outer Ring)
+				Tianjin  Tianjin  300392
+				CN
+
+1C-FD-08   (hex)		Shanghai YottaTech Co Ltd (上海尧它科技有限公司）
+C00000-CFFFFF     (base 16)		Shanghai YottaTech Co Ltd (上海尧它科技有限公司）
+				399 keyuan Rd, Pudong New District
+				Shanghai    201203
+				CN
+
+1C-FD-08   (hex)		Banmak Technogies Co.,Ltd
+A00000-AFFFFF     (base 16)		Banmak Technogies Co.,Ltd
+				302, Building R3-B, High-Tech Park
+				Shenzhen  Guangdong  518057
+				CN
+
+1C-FD-08   (hex)		Shenzhen SEWO Technology Co.,Ltd.
+100000-1FFFFF     (base 16)		Shenzhen SEWO Technology Co.,Ltd.
+				Busha Road No 231. Buji Street. Longgang District.
+				Shenzhen  Guangdong  518112
+				CN
+
+6C-5C-3D   (hex)		Vertiv Industrial Systems
+200000-2FFFFF     (base 16)		Vertiv Industrial Systems
+				30 avenue Montgolfier
+				Chassieu    69684
+				FR
+
+6C-5C-3D   (hex)		KWONG MING ELECTRICAL MANUFACTORY LIMITED
+300000-3FFFFF     (base 16)		KWONG MING ELECTRICAL MANUFACTORY LIMITED
+				A3 bldg, Kwong Ming, Technology Industrial Zone, Shiwan Town, Boluo County 
+				Huizhou  Guangdong  516100
+				CN
+
+A8-3F-A1   (hex)		Imecon Engineering SrL
+000000-0FFFFF     (base 16)		Imecon Engineering SrL
+				via Gerola 13/15
+				Fiesco  CR  26010
+				IT
+
+A8-3F-A1   (hex)		Shenzhen ITLONG Intelligent Technology Co.,Ltd
+900000-9FFFFF     (base 16)		Shenzhen ITLONG Intelligent Technology Co.,Ltd
+				12th floor, Building C1, Nanshan Zhiyuan, 1001 Xueyuan Avenue , Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+3C-6A-2C   (hex)		WICKS Co., Ltd.
+900000-9FFFFF     (base 16)		WICKS Co., Ltd.
+				202,1-29 shingi takasu
+				kochi City  Kochi  781-8103
+				JP
+
+A8-3F-A1   (hex)		Sercomm Corporation.
+500000-5FFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+30-0A-60   (hex)		AVIC JONHON OPTRONIC TECHNOLOGY CO., LTD.
+400000-4FFFFF     (base 16)		AVIC JONHON OPTRONIC TECHNOLOGY CO., LTD.
+				Zhoushan Road10,Jianxi District,Luoyang City
+				Luoyang City  Henan Province  471003
+				CN
+
+30-0A-60   (hex)		Bronkhorst High-Tech BV
+800000-8FFFFF     (base 16)		Bronkhorst High-Tech BV
+				Nijverheidsstraat 1a
+				Ruurlo  Gelderland  NL-7261AK
+				NL
+
+A4-ED-43   (hex)		Paragon Business Solutions Ltd.
+B00000-BFFFFF     (base 16)		Paragon Business Solutions Ltd.
+				303-5th Avenue, Suite # 1007
+				New York    10016
+				US
+
+A4-ED-43   (hex)		Shanghai Mission Information Technologies (Group) Co.,Ltd
+200000-2FFFFF     (base 16)		Shanghai Mission Information Technologies (Group) Co.,Ltd
+				Room 803, modern traffic building (East District), 218 Hengfeng Road, Jingan District
+				Shanghai    200041
+				CN
+
+A4-ED-43   (hex)		Sweam AB
+000000-0FFFFF     (base 16)		Sweam AB
+				Kistagången 12
+				Kista  Stockholm  16440
+				SE
+
+A0-28-33   (hex)		Precision Planting, LLC.
+E00000-EFFFFF     (base 16)		Precision Planting, LLC.
+				23207 Townline Rd.
+				Tremont  IL  61568
+				US
+
+84-89-EC   (hex)		SmartGiant Technology
+000000-0FFFFF     (base 16)		SmartGiant Technology
+				1 North Zhong Jia Zhuang, Shi Gang Dong, Da Long Street
+				Guangzhou  Guangdong  510000
+				CN
+
+84-89-EC   (hex)		Zephyr Engineering, Inc.
+500000-5FFFFF     (base 16)		Zephyr Engineering, Inc.
+				2412 W. Huntington Dr.
+				Tempe  AZ  85282
+				US
+
+84-89-EC   (hex)		Aerionics Inc.
+300000-3FFFFF     (base 16)		Aerionics Inc.
+				3601 N St Paul Avenue
+				Sioux Falls  SD  57104
+				US
+
+A0-28-33   (hex)		FlexLink AB
+B00000-BFFFFF     (base 16)		FlexLink AB
+				BYFOGDEGATAN 11
+				GOTEBORG    41505
+				SE
+
+68-91-D0   (hex)		Ambitio LLC
+300000-3FFFFF     (base 16)		Ambitio LLC
+				10505 NW 27th ST
+				Doral  FL  33172
+				US
+
+D4-7C-44   (hex)		Sammi Onformation Systems
+400000-4FFFFF     (base 16)		Sammi Onformation Systems
+				Gasan Digital 1-ro 212
+				Geumcheon-gu  Seoul  08502
+				KR
+
+9C-F6-DD   (hex)		Shenzhen Xtooltech Co., Ltd
+600000-6FFFFF     (base 16)		Shenzhen Xtooltech Co., Ltd
+				10574 Acacia St, Suite D4
+				Rancho Cucamonga  CA  91730
+				US
+
+78-C2-C0   (hex)		Ory Laboratory Co., Ltd.
+400000-4FFFFF     (base 16)		Ory Laboratory Co., Ltd.
+				502 Bravi Mitaka, 1-3-11 Nishikubo
+				Musashino-shi  Tokyo  180-0013
+				JP
+
+30-09-F9   (hex)		Beijing Netswift Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Beijing Netswift Technology Co.,Ltd.
+				No. 7, 7th floor, No.49 Zhichun Road, Haidian District
+				Beijing  Beijing  100190 
+				CN
+
+30-09-F9   (hex)		Bonraybio
+900000-9FFFFF     (base 16)		Bonraybio
+				4F., No.118, Gongye 9th Rd., Dali Dist.,
+				Taichung City  Taiwan  412
+				TW
+
+30-09-F9   (hex)		Hurray Cloud Technology Co., Ltd.
+000000-0FFFFF     (base 16)		Hurray Cloud Technology Co., Ltd.
+				7F., No.407, Sec. 2, Zhongshan Rd., Zhonghe Dist.,
+				New Taipei City     235
+				TW
+
+84-89-EC   (hex)		Shenzhen Xtooltech Co., Ltd
+900000-9FFFFF     (base 16)		Shenzhen Xtooltech Co., Ltd
+				10574 Acacia St, Suite D4
+				Rancho Cucamonga  CA  91730
+				US
+
+C0-83-59   (hex)		ANTS
+400000-4FFFFF     (base 16)		ANTS
+				88, Simindae-ro, Dongan-Gu
+				Anyang    14079
+				KR
+
+C0-83-59   (hex)		Gemvax Technology ,. Co.Ltd
+100000-1FFFFF     (base 16)		Gemvax Technology ,. Co.Ltd
+				30, Techno1-ro, Yuseong-gu, Daejeon
+				Daejeon    34016
+				KR
+
+9C-F6-DD   (hex)		Foshan Synwit Technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Foshan Synwit Technology Co.,Ltd.
+				Room 501, Building 10, Leaguar Science Park, Shishan town, Nanhai
+				FoShan  Guangdong  528225
+				CN
+
+04-C3-E6   (hex)		DREAMKAS LLC
+000000-0FFFFF     (base 16)		DREAMKAS LLC
+				Bolshoy  Sampsoniyevskiy pr., 62A, office 2H
+				Saint-Petersburg    194044
+				RU
+
+04-C3-E6   (hex)		SHANTOU YINGSHENG IMPORT & EXPORT TRADING CO.,LTD.
+C00000-CFFFFF     (base 16)		SHANTOU YINGSHENG IMPORT & EXPORT TRADING CO.,LTD.
+				Chenghua Industrial Zone，Wenguan Road，Chenghai District
+				Shantou City  Guangdong  515800
+				CN
+
+3C-42-7E   (hex)		Edit Srl
+600000-6FFFFF     (base 16)		Edit Srl
+				Via Grotte di Nottola 10
+				Cisterna di Latina  Latina  04012
+				IT
+
+3C-42-7E   (hex)		UBTECH ROBOTICS CORP
+800000-8FFFFF     (base 16)		UBTECH ROBOTICS CORP
+				22 Floor, Block C1, Nanshan I Park, No. 1001 Xueyuan Road, Nanshan District,
+				Shenzhen  guangdong  518071
+				CN
+
+A0-C5-F2   (hex)		Quantlab Financial, LLC
+000000-0FFFFF     (base 16)		Quantlab Financial, LLC
+				3 Greenway Plaza, Suite 200
+				3 Greenway Plaza  TX  77046
+				US
+
+B4-4B-D6   (hex)		ShenZhen Comstar Technology Company
+500000-5FFFFF     (base 16)		ShenZhen Comstar Technology Company
+				Pengnian Science Park Building A 314
+				Shenzhen  Guangdong  518040
+				CN
+
+B4-4B-D6   (hex)		ELLETA SOLUTIONS LTD
+D00000-DFFFFF     (base 16)		ELLETA SOLUTIONS LTD
+				Yetsi'at Eropa Street 20
+				Hadera    3848427
+				IL
+
+3C-42-7E   (hex)		Compal Electronics INC.
+B00000-BFFFFF     (base 16)		Compal Electronics INC.
+				No.8 , Nandong Road , PingZhen Dist.
+				Taoyuan   Taiwan   32455
+				TW
+
+A0-19-B2   (hex)		SZBROAD   TECHNOLOGY (HK) CO.,LTMITED
+500000-5FFFFF     (base 16)		SZBROAD   TECHNOLOGY (HK) CO.,LTMITED
+				FLAT/RM 5 BLK B 14/F WAH HEN COMMERCIAL CENTRE
+				 383 HENNESSY ROAD WANCHAI  Hong Kong  00000
+				HK
+
+A0-19-B2   (hex)		El Sewedy Electrometer Egypt S.A.E.
+100000-1FFFFF     (base 16)		El Sewedy Electrometer Egypt S.A.E.
+				Plot No. 154/173 Industrial Zone 2
+				ET-6th October City    
+				EG
+
+2C-48-35   (hex)		Collatz+Trojan GmbH
+A00000-AFFFFF     (base 16)		Collatz+Trojan GmbH
+				Borsteler Chaussee85-99a
+				Hamburg  Hamburg  22453
+				DE
+
+8C-1C-DA   (hex)		Raychem RPG PVT. LTD.
+900000-9FFFFF     (base 16)		Raychem RPG PVT. LTD.
+				Safari Crossing, Near Halol GIDC, Village - Kanjari, Taluka - Halol
+				Halol  Gujarat  389350
+				IN
+
+8C-1C-DA   (hex)		ATOL LLC
+800000-8FFFFF     (base 16)		ATOL LLC
+				Bolshaya Novodmitrovskaya str., 14, build 4
+				Moscow    127015
+				RU
+
+2C-48-35   (hex)		GEARTECH LTD
+400000-4FFFFF     (base 16)		GEARTECH LTD
+				R310/312,3/F,Beike Venture Building,No.1077,Nanhai Avenue,Nanshan District
+				Shenzhen  Guangdong  518067
+				CN
+
+3C-24-F0   (hex)		Shenzhen Bestway Technology Co., Ltd
+A00000-AFFFFF     (base 16)		Shenzhen Bestway Technology Co., Ltd
+				2nd Floor, Building 9, Jingxuan Industrial Park, East Ring Road, Longhua District,
+				Shenzhen  GuangDong  518109
+				CN
+
+3C-24-F0   (hex)		GETMOBIT LLC
+E00000-EFFFFF     (base 16)		GETMOBIT LLC
+				d. 4 str. 2 pom. 137, ul. Programmistov
+				Dubna  Moscow  141983
+				RU
+
+8C-1C-DA   (hex)		Structura Technology & Innovation
+300000-3FFFFF     (base 16)		Structura Technology & Innovation
+				via Roveredo 20/B
+				Pordenone  PN  33170
+				IT
+
+8C-1C-DA   (hex)		GESAS GmbH
+100000-1FFFFF     (base 16)		GESAS GmbH
+				Pfaelzer Ring 18
+				Hockenheim  Baden-Wuerttemberg  68766
+				DE
+
+3C-24-F0   (hex)		Authentico Technologies
+C00000-CFFFFF     (base 16)		Authentico Technologies
+				Erikdahlbergsgatan 4
+				Göteborg    41126
+				SE
+
+8C-1C-DA   (hex)		T+A elektroakustik GmbH & Co.KG
+B00000-BFFFFF     (base 16)		T+A elektroakustik GmbH & Co.KG
+				Planckstr. 9-11
+				Herford    32052
+				DE
+
+48-0B-B2   (hex)		BAJA ELECTRONICS TECHNOLOGY LIMITED
+100000-1FFFFF     (base 16)		BAJA ELECTRONICS TECHNOLOGY LIMITED
+				403, Unit 3, Building 3, Zhongdian Hi-Tech Park, No.1 Kejiqi Rd.
+				Zhuhai  Guangdong  519080
+				CN
+
+48-0B-B2   (hex)		M2Lab Ltd.
+D00000-DFFFFF     (base 16)		M2Lab Ltd.
+				148 Des Voeux Rd Central
+				Hong Kong    HK
+				HK
+
+48-0B-B2   (hex)		Ridango AS
+000000-0FFFFF     (base 16)		Ridango AS
+				Pärnu maantee 139E/13
+				Tallinn  Harjumaa  11317
+				EE
+
+48-0B-B2   (hex)		Beijing MFOX technology Co., Ltd.
+E00000-EFFFFF     (base 16)		Beijing MFOX technology Co., Ltd.
+				B zone,floor 2,NO.A5 east Rongchang street .BDA (yizhuang) BeiJing
+				BeiJing  BeiJing  100176
+				CN
+
+0C-73-EB   (hex)		Husty M.Styczen J.Hupert Sp.J.
+500000-5FFFFF     (base 16)		Husty M.Styczen J.Hupert Sp.J.
+				Rzepakowa 5e
+				Krakow  malopolska  31-989
+				PL
+
+0C-73-EB   (hex)		Gemini Data Loggers (UK) Limited
+000000-0FFFFF     (base 16)		Gemini Data Loggers (UK) Limited
+				Scientific House, Terminus Road
+				Chichester  West Sussex  PO19 8UJ
+				GB
+
+88-5F-E8   (hex)		Lisle Design Ltd
+A00000-AFFFFF     (base 16)		Lisle Design Ltd
+				New Technology Centre, North Haugh
+				St. Andrews  Fife  KY16 9SR
+				GB
+
+30-1F-9A   (hex)		YiSheng technology  co.,LTD
+600000-6FFFFF     (base 16)		YiSheng technology  co.,LTD
+				Xintian road no:71,  F#202
+				shenzhen  baoan  518103
+				CN
+
+88-5F-E8   (hex)		Shenzhen Xin Kingbrand Enterprises Co.,Ltd     
+600000-6FFFFF     (base 16)		Shenzhen Xin Kingbrand Enterprises Co.,Ltd     
+				KingBrand Industrial Zone, Nanpu Road,Shang Liao Lin Pikeng,Shajing Town,Baoan District
+				Shenzhen     518000
+				CN
+
+2C-D1-41   (hex)		Beijing Hexing Chuangxiang Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Beijing Hexing Chuangxiang Technology Co., Ltd.
+				1306,A block,No.6 Zhichun Road
+				Haidian District,  Beijing  100088
+				CN
+
+30-1F-9A   (hex)		OLIMEX Ltd
+D00000-DFFFFF     (base 16)		OLIMEX Ltd
+				2 Pravda
+				Plovidv    4000
+				BG
+
+88-5F-E8   (hex)		Jungheinrich Norderstedt AG & Co. KG
+000000-0FFFFF     (base 16)		Jungheinrich Norderstedt AG & Co. KG
+				Lawaetzstr. 9-13
+				Norderstedt    22844
+				DE
+
+88-5F-E8   (hex)		Opto Engineering
+200000-2FFFFF     (base 16)		Opto Engineering
+				Circonvallazione Sud, 15
+				Mantova    46100
+				IT
+
+F0-41-C8   (hex)		Shenzhen  Nufilo Electronic Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen  Nufilo Electronic Technology Co., Ltd.
+				Tianliao Building West Unit F1315, (New Materials Industrial Park),  Xueyuan Road,  Nanshan District
+				Shenzhen   Guangdong  518055
+				CN
+
+F0-41-C8   (hex)		Nanchang BlackShark Co.,Ltd.
+700000-7FFFFF     (base 16)		Nanchang BlackShark Co.,Ltd.
+				Room 319, Jiaoqiao Town Office Building, Economic and Technical development zone, Nanchang City, Jiangxi Province.
+				Nanchang    330013
+				CN
+
+88-A9-A7   (hex)		Impact Distribution
+E00000-EFFFFF     (base 16)		Impact Distribution
+				Ter Heidelaan 50a
+				Aarschot    3200
+				BE
+
+88-A9-A7   (hex)		psb intralogistics GmbH
+800000-8FFFFF     (base 16)		psb intralogistics GmbH
+				Blocksbergstrasse 145
+				Pirmasens    66955
+				DE
+
+F0-41-C8   (hex)		AED Engineering GmbH
+600000-6FFFFF     (base 16)		AED Engineering GmbH
+				Taunusstr. 51
+				Munich  Bavaria  80807
+				DE
+
+88-A9-A7   (hex)		Solaredge LTD.
+100000-1FFFFF     (base 16)		Solaredge LTD.
+				Hamada 1
+				Herzelia    4673335
+				IL
+
+A4-DA-22   (hex)		General Electric Company
+000000-0FFFFF     (base 16)		General Electric Company
+				Valle del Cedro #1551
+				Ciudad Juarez  Chih  32575
+				MX
+
+88-A9-A7   (hex)		kimura giken corporation
+700000-7FFFFF     (base 16)		kimura giken corporation
+				4-9-19 kamiyoga
+				Setagaya-ku  Tokyo  158-0098
+				JP
+
+A4-DA-22   (hex)		Wyze Labs Inc
+200000-2FFFFF     (base 16)		Wyze Labs Inc
+				 22522 29TH DR SE L101
+				BOTHELL  WA  98021
+				US
+
+A4-DA-22   (hex)		Quuppa Oy
+E00000-EFFFFF     (base 16)		Quuppa Oy
+				Keilaranta 1
+				Espoo    02150
+				FI
+
+9C-43-1E   (hex)		ST Access Control System Corp.
+A00000-AFFFFF     (base 16)		ST Access Control System Corp.
+				3F., No. 111 Zhongzheng Rd., Banciao Dist., New Taipei City
+				New Taipei City    22054
+				TW
+
+DC-E5-33   (hex)		Controls Inc
+500000-5FFFFF     (base 16)		Controls Inc
+				5204 Portside Drive
+				Medina  OH  44256
+				US
+
+C4-FF-BC   (hex)		Danego BV
+000000-0FFFFF     (base 16)		Danego BV
+				Protonenlaan 24
+				Uden  NB  5405 NE
+				NL
+
+C4-FF-BC   (hex)		Critical Link
+700000-7FFFFF     (base 16)		Critical Link
+				6712 Brooklawn  Parkway
+				Syracuse  null  13211
+				US
+
+28-2C-02   (hex)		Shenzhen Neoway Technology Co.,Ltd.
+800000-8FFFFF     (base 16)		Shenzhen Neoway Technology Co.,Ltd.
+				4F-2#,Lian Jian Science & Industry Park,Huarong Road,Dalang Street,Longhua District
+				Shenzhen  Guangdong  518000
+				CN
+
+28-2C-02   (hex)		Capintec, Inc.
+E00000-EFFFFF     (base 16)		Capintec, Inc.
+				7 Vreeland Road
+				Florham Park  NJ  07932
+				US
+
+28-2C-02   (hex)		SHENZHEN DOMENOR TECHNOLOGY LLC
+D00000-DFFFFF     (base 16)		SHENZHEN DOMENOR TECHNOLOGY LLC
+				F4, BUILDING A3, SILICON VALLEY POWER TECHNOLOGY PARK, SILI ROAD, KUKENG COMMUNITY, GUANLAN TOWN,LONGHUA DISTRICT
+				SHENZHEN  GUANGDONG  518110
+				CN
+
+F8-B5-68   (hex)		Solarius
+D00000-DFFFFF     (base 16)		Solarius
+				Kaeshaldenstrasse 39
+				Zurich    8052
+				CH
+
+28-2C-02   (hex)		Astronics AES
+100000-1FFFFF     (base 16)		Astronics AES
+				12950 Willows Rd NE 
+				Kirkland  WA  98034
+				US
+
+F8-B5-68   (hex)		Package Guard, Inc
+600000-6FFFFF     (base 16)		Package Guard, Inc
+				2819 33rd ave so
+				seattle  WA  98144
+				US
+
+18-9B-A5   (hex)		Innominds Software Inc
+400000-4FFFFF     (base 16)		Innominds Software Inc
+				2055 Junction Ave Suite 122, San Jose CA 95131
+				San Jose  CA  95131
+				US
+
+40-48-FD   (hex)		Shenzhen Yifang Digital Technology Co., LTD. 
+A00000-AFFFFF     (base 16)		Shenzhen Yifang Digital Technology Co., LTD. 
+				Building NO. 23, Fifth Region, Baiwangxin  Industrial Park, Songbai Rd. Nanshan, Shenzhen 
+				Shenzhen     518108
+				CN
+
+38-73-EA   (hex)		Shanghai ZoomSmart Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Shanghai ZoomSmart Technology Co., Ltd.
+				ROOM 802, No. 189, Hengxi Road, Pujiang Town, Minhang District, Shanghai PRC
+				Shanghai    200000
+				CN
+
+EC-9F-0D   (hex)		MAX Technologies
+E00000-EFFFFF     (base 16)		MAX Technologies
+				2051 Victoria Av.
+				St-Lambert  Quebec  J4S1H1
+				CA
+
+38-73-EA   (hex)		KingWay Information Co.,Ltd.
+100000-1FFFFF     (base 16)		KingWay Information Co.,Ltd.
+				3/F Rongxin business organization #56 Jinyan Road
+				Fuzhou  Fujian  350000
+				CN
+
+EC-9F-0D   (hex)		Waverly Labs Inc.
+300000-3FFFFF     (base 16)		Waverly Labs Inc.
+				19 Morris Avenue
+				Brooklyn  NY  11205
+				US
+
+34-D0-B8   (hex)		Kongqiguanjia (Beijing)Technology co.，ltd
+E00000-EFFFFF     (base 16)		Kongqiguanjia (Beijing)Technology co.，ltd
+				Room 1201,Block A，Building of Fesco，Xidawang Road，Chaoyang district
+				Beijing  Beijing  100022
+				CN
+
+34-D0-B8   (hex)		NumberFour AG
+600000-6FFFFF     (base 16)		NumberFour AG
+				Schoenhauser Allee 8
+				Berlin    10119
+				DE
+
+EC-9F-0D   (hex)		DRB Systems
+200000-2FFFFF     (base 16)		DRB Systems
+				3245 Pickle Road
+				Akron  OH  44312
+				US
+
+EC-9F-0D   (hex)		SKS Control Oy
+D00000-DFFFFF     (base 16)		SKS Control Oy
+				Martinkyläntie 50
+				Vantaa    01720
+				FI
+
+AC-1D-DF   (hex)		PiOctave Solutions Pvt Ltd
+000000-0FFFFF     (base 16)		PiOctave Solutions Pvt Ltd
+				#1217, Ground Floor,4th Cross Road, 1st Block, HAL 3rd Stage
+				BENGALURU  KARNATAKA  560 075
+				IN
+
+AC-1D-DF   (hex)		Duravit AG
+E00000-EFFFFF     (base 16)		Duravit AG
+				Werderstr. 36
+				Hornberg  Baden Wuerttemberg  78132
+				DE
+
+34-D0-B8   (hex)		Shenzhen Rikomagic Tech Corp.,Ltd
+700000-7FFFFF     (base 16)		Shenzhen Rikomagic Tech Corp.,Ltd
+				7021,7F Beifang Junyi Business Center, Lixin South RD,Fuyong Street,Bao'an 
+				Shenzhen   Guangdong  518103
+				CN
+
+AC-1D-DF   (hex)		Beijing Chunhong Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Beijing Chunhong Technology Co., Ltd.
+				Room1502 Hailong Plaza, Zhongguancun, Haidian, Beijing
+				Beijing    100000
+				CN
+
+34-D0-B8   (hex)		Shenzhen Bao Lai Wei Intelligent Technology Co., L
+100000-1FFFFF     (base 16)		Shenzhen Bao Lai Wei Intelligent Technology Co., L
+				Longgang Street Baolong Wu Road on the 2nd
+				Shenzhen  Guangdong Province  518116
+				CN
+
+74-1A-E0   (hex)		SHEN ZHEN YINGJIACHUANG ELECTRONICS TECHNOLOGY CO.,LTD.
+B00000-BFFFFF     (base 16)		SHEN ZHEN YINGJIACHUANG ELECTRONICS TECHNOLOGY CO.,LTD.
+				Building A,Baishunjia Industrial Park,Guangming New District
+				Shenzhen    518107
+				CN
+
+74-1A-E0   (hex)		Philips Personal Health Solutions
+300000-3FFFFF     (base 16)		Philips Personal Health Solutions
+				High Tech Campus, HTC37 floor 0
+				Eindhoven    5656 AE
+				NL
+
+AC-1D-DF   (hex)		Shenzheng SenseTime Technology Co. Ltd
+600000-6FFFFF     (base 16)		Shenzheng SenseTime Technology Co. Ltd
+				7F,Haixiang plaza, No.1052 Nanhai Road, Nanshan district
+				Shenzhen  Guangdong  518000
+				CN
+
+CC-22-37   (hex)		Beijing Safesoft Greatmaker Co.,ltd
+500000-5FFFFF     (base 16)		Beijing Safesoft Greatmaker Co.,ltd
+				Room 501 ,Unit. D, Jinyujiahua Building ,No. 9 ,Shangdi Three Street , Haidian District 
+				Beijing    100144
+				CN
+
+CC-22-37   (hex)		Siemens AG Austria
+600000-6FFFFF     (base 16)		Siemens AG Austria
+				Siemensstrasse 90
+				Wien    A-1210
+				AT
+
+CC-22-37   (hex)		Shanghai Doit IOT Technology Co.,Ltd.
+700000-7FFFFF     (base 16)		Shanghai Doit IOT Technology Co.,Ltd.
+				410-412 rooms of 1B business building in NO.1588 ,lianhang road, minhang district
+				Shanghai    201100
+				CN
+
+CC-22-37   (hex)		MEDCOM sp. z o.o.
+000000-0FFFFF     (base 16)		MEDCOM sp. z o.o.
+				ul. Jutrzenki 78a
+				Warszawa  woj. mazowieckie  02-230
+				PL
+
+90-4E-91   (hex)		Shenzhen Cloudynamo Internet Technologies Co.,LTD.
+E00000-EFFFFF     (base 16)		Shenzhen Cloudynamo Internet Technologies Co.,LTD.
+				NO.502 lingyun Building honglang north second road
+				shenzhen    518000
+				CN
+
+90-4E-91   (hex)		CommandScape, Inc.
+800000-8FFFFF     (base 16)		CommandScape, Inc.
+				505 South Flagler Dr, Suite 900
+				West Palm Beach  FL  33401
+				US
+
+90-4E-91   (hex)		Kaertech Limited
+A00000-AFFFFF     (base 16)		Kaertech Limited
+				Unit 1601, 21-24 Connaught Road West
+				Hong Kong  Sheung Wan  00000
+				HK
+
+18-9B-A5   (hex)		Mantra Softech India Pvt Ltd
+600000-6FFFFF     (base 16)		Mantra Softech India Pvt Ltd
+				B203, Shapath Hexa, S.G. Highway, Sola,
+				Ahmedabad  Gujarat  380060
+				IN
+
+18-9B-A5   (hex)		Eutron SPA
+B00000-BFFFFF     (base 16)		Eutron SPA
+				Via Crespi 29/31
+				Pradalunga  Bergamo  24020
+				IT
+
+2C-27-9E   (hex)		WAYCOM Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		WAYCOM Technology Co.,Ltd
+				E-605,BLDG 201,A10 Jiuxianqiao North Road Chaoyang District,Beijing 100015,China
+				Beijing    100000
+				CN
+
+34-29-8F   (hex)		ARC Technology Co., Ltd
+E00000-EFFFFF     (base 16)		ARC Technology Co., Ltd
+				4F.-2, No.26, Wuquan 2nd Road, 
+				Xinzhuang District,  New Taipei City  24892
+				TW
+
+34-00-8A   (hex)		Federal Aviation Administration 
+500000-5FFFFF     (base 16)		Federal Aviation Administration 
+				Atlantic City Int'l Airport, Bldg. 270
+				Atlantic City  NJ  08405
+				US
+
+34-29-8F   (hex)		BlackEdge Capital
+000000-0FFFFF     (base 16)		BlackEdge Capital
+				801 West Adams Street, Suite 500
+				Chicago    60607
+				US
+
+34-00-8A   (hex)		Sithon Technologies SAS
+600000-6FFFFF     (base 16)		Sithon Technologies SAS
+				115 Rue Claude Chappe
+				Plouzane    29280
+				FR
+
+34-29-8F   (hex)		Dongguan Kingtron Electronics Tech Co., Ltd
+700000-7FFFFF     (base 16)		Dongguan Kingtron Electronics Tech Co., Ltd
+				No.3 Fumin North Rd,Shu'an Industrial Park, Humen Town
+				Dongguan  Guangdong China  523929
+				CN
+
+18-9B-A5   (hex)		Airprotec
+200000-2FFFFF     (base 16)		Airprotec
+				Avenue de l'Industrie 22
+				Braine-l'Alleud    1420
+				BE
+
+34-00-8A   (hex)		Globex 99 LTD
+300000-3FFFFF     (base 16)		Globex 99 LTD
+				Trakia bl. 240
+				Plovdiv    4000
+				BG
+
+0C-EF-AF   (hex)		Hubei Century Network Technology Co., Ltd
+B00000-BFFFFF     (base 16)		Hubei Century Network Technology Co., Ltd
+				9-11th floor, B7, FinancialHarbour, NO.77, Guanggu Avenue, East Lake New Technology Development Zone
+				Wuhan  Hubei  430074
+				CN
+
+34-00-8A   (hex)		ZQAM Communications
+100000-1FFFFF     (base 16)		ZQAM Communications
+				3F., No.6, Innovation Road II, Science Park, 
+				Hsinchu    30076
+				TW
+
+28-F5-37   (hex)		Matricx Singapore Pte Ltd
+C00000-CFFFFF     (base 16)		Matricx Singapore Pte Ltd
+				2nd Flr. 2 Bldg., Detai Technology Industrial Park, Huarong Road No. 460, Dalang, Longhua district,
+				Shenzhen  Guangdong  518000
+				CN
+
+28-F5-37   (hex)		Unicair Communication Tec Co., Ltd.
+200000-2FFFFF     (base 16)		Unicair Communication Tec Co., Ltd.
+				深圳市宝安区西乡航空路与顺昌路交汇处梧桐岛1号楼8楼
+				ShenZhen    418100
+				CN
+
+78-D8-00   (hex)		Kverneland Group Mechatronics
+000000-0FFFFF     (base 16)		Kverneland Group Mechatronics
+				Hoofdweg 1278
+				Nieuw-Vennep  Noord Holland  NL-2153 LR
+				NL
+
+78-D8-00   (hex)		Alango Technologies Ltd
+600000-6FFFFF     (base 16)		Alango Technologies Ltd
+				Etgar 2, Carmel Biulding 1rd floor
+				Tirat Carmel  Haifa  39100
+				IL
+
+28-F5-37   (hex)		Phyn LLC
+400000-4FFFFF     (base 16)		Phyn LLC
+				1855 Del Amo Blvd
+				Torrance  CA  90501
+				US
+
+78-D8-00   (hex)		Shanghai Espacetime Technology Co.,Ltd.
+200000-2FFFFF     (base 16)		Shanghai Espacetime Technology Co.,Ltd.
+				Room 1202-A ,NO.570 , Shengxia Road , Pudong
+				Shanghai    200120
+				CN
+
+7C-BA-CC   (hex)		Maco Lighting Pty. Ltd.
+200000-2FFFFF     (base 16)		Maco Lighting Pty. Ltd.
+				5/9 Stockwell Place
+				Archerfield  Queensland  4108
+				AU
+
+7C-BA-CC   (hex)		Collinear Networks Inc.
+800000-8FFFFF     (base 16)		Collinear Networks Inc.
+				2901 Tasman Drive
+				Santa Clara  CA  95054
+				US
+
+78-D8-00   (hex)		NimbeLink Corp
+700000-7FFFFF     (base 16)		NimbeLink Corp
+				3131 Fernbrook LN N, Ste 100
+				Plymouth  MN  55447
+				US
+
+F8-8A-3C   (hex)		withus
+900000-9FFFFF     (base 16)		withus
+				Rua Dr. Mario Sacramento Ed. Colombo II N22
+				Aveiro    3810-106
+				PT
+
+7C-BA-CC   (hex)		TGT Limited
+000000-0FFFFF     (base 16)		TGT Limited
+				Flat/Rm 1003 10/F, Witty Commercial Building, 1A-1L Tung Choi Street, Hong Kong 
+				HongKong    529060
+				HK
+
+F8-8A-3C   (hex)		THK Co.,LTD.
+D00000-DFFFFF     (base 16)		THK Co.,LTD.
+				4-9-16 Higashikoujiya
+				Ota  Tokyo  1440033
+				JP
+
+F8-8A-3C   (hex)		EXCETOP TECHNOLOGY (BEIJING) CO., LTD.
+C00000-CFFFFF     (base 16)		EXCETOP TECHNOLOGY (BEIJING) CO., LTD.
+				A03, 9th Floor, Horizon International Tower, No.6, Zhichun Road, Haidian District
+				Beijing    100191
+				CN
+
+4C-65-A8   (hex)		Qingping Technology (Beijing) Co., Ltd.
+D00000-DFFFFF     (base 16)		Qingping Technology (Beijing) Co., Ltd.
+				Room 401, Block B, Fangheng Times Square, No. 10 Wangjing Street, Chaoyang District
+				Beijing    100102
+				CN
+
+A0-C5-F2   (hex)		Shenzhen Feima Robotics Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Shenzhen Feima Robotics Technology Co.,Ltd
+				1/f,16 ,Zhiheng Industrial Park, Nantou Second Road, Nantou Street, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+F0-23-B9   (hex)		Raysgem Electronics and Technology Co.Ltd
+200000-2FFFFF     (base 16)		Raysgem Electronics and Technology Co.Ltd
+				4th Floor, Block2 HuafengIndustrial park for Oversea Students Baolong 1st Road Longgang 
+				Shenzhen  Guangdong  518118
+				CN
+
+8C-14-7D   (hex)		Reynaers Aluminium
+C00000-CFFFFF     (base 16)		Reynaers Aluminium
+				Oude Liersebaan 266
+				Duffel    2570
+				BE
+
+8C-14-7D   (hex)		Remotec Technology Limited
+300000-3FFFFF     (base 16)		Remotec Technology Limited
+				FLAT/RM 2 , BLK 2 , 2/F , TONIC INDUSTRIAL CENTRE , 19 LAM HING STREET , KOWLOON BAY 
+				HONG KONG    00000
+				HK
+
+8C-14-7D   (hex)		V2 S.p.A.
+800000-8FFFFF     (base 16)		V2 S.p.A.
+				Corso Principi di Piemonte 65/67
+				Racconigi  Cuneo  12035
+				IT
+
+A0-C5-F2   (hex)		ShenZhen JuWangShi Tech
+600000-6FFFFF     (base 16)		ShenZhen JuWangShi Tech
+				Room 1701 Unit B2,Kexing Science Park,Keyuan Road
+				ShenZhen  NanShan  518057
+				CN
+
+A0-C5-F2   (hex)		Spacepath Communications Ltd
+500000-5FFFFF     (base 16)		Spacepath Communications Ltd
+				Unit 4, Bartley Point, Osborn Way
+				Hook, Hampshire    RG27 9GX
+				GB
+
+8C-14-7D   (hex)		Agilent S.p.A
+200000-2FFFFF     (base 16)		Agilent S.p.A
+				Via.flli Varian 54
+				Leini  Torino  10040
+				IT
+
+8C-14-7D   (hex)		UrbanHello
+700000-7FFFFF     (base 16)		UrbanHello
+				13 rue Saint Antoine
+				Paris    75004
+				FR
+
+F0-23-B9   (hex)		Transcend Building Automation control network corporation
+700000-7FFFFF     (base 16)		Transcend Building Automation control network corporation
+				15F. No.145 Ren’ai Rd. Xizhi Dist.
+				New Taipei City  Taiwan  22164
+				TW
+
+04-71-4B   (hex)		Armstrong Fluid Technology
+600000-6FFFFF     (base 16)		Armstrong Fluid Technology
+				23 Bertrand Avenue
+				Toronto  Ontario  M1L2P3
+				CA
+
+60-D7-E3   (hex)		 LongSung Technology (Shanghai) Co.,Ltd.   
+900000-9FFFFF     (base 16)		 LongSung Technology (Shanghai) Co.,Ltd.   
+				 Room 606, Block B, Bldg. 1, No. 3000 Longdong Avenue., Zhangjiang Hi-Tech Park, Pudong District
+				ShangHai    201203
+				CN
+
+04-71-4B   (hex)		Omylis Pte Ltd
+700000-7FFFFF     (base 16)		Omylis Pte Ltd
+				150, South Bridge Road #06-04B, Fook Hai Building
+				Singapore    058727
+				SG
+
+60-D7-E3   (hex)		Novo innovations Ltd
+200000-2FFFFF     (base 16)		Novo innovations Ltd
+				Westwood way
+				Westwood business park  Coventry  Cv4 8lg
+				GB
+
+08-ED-02   (hex)		SANGO ELECTRONICS CO
+600000-6FFFFF     (base 16)		SANGO ELECTRONICS CO
+				RM 253,2/F,BLOCK A, CAMBRIDGE  PLAZA,188,SANWAN ROAD,  SHEUNG SHUI,HONG KONG 
+				HongKong     518131
+				CN
+
+08-ED-02   (hex)		Jiangsu Logread Network Technology Co., LTD.
+300000-3FFFFF     (base 16)		Jiangsu Logread Network Technology Co., LTD.
+				No. 100 # 9, Shu Gang West Road, HanJiang Area, 
+				Yangzhou   Jiangsu  225100
+				CN
+
+08-ED-02   (hex)		Vigitron Inc.
+500000-5FFFFF     (base 16)		Vigitron Inc.
+				7810 Trade Street, STE 100
+				San Diego  CA  92121
+				US
+
+08-ED-02   (hex)		Fio Corporation
+400000-4FFFFF     (base 16)		Fio Corporation
+				111 Queen Street East, Suite 500
+				Toronto  ON  M5C 1S2
+				CA
+
+08-ED-02   (hex)		Victiana SRL
+A00000-AFFFFF     (base 16)		Victiana SRL
+				Strada A. Hasdeu, nr. 66/3
+				Chisinau    MD-2001
+				MD
+
+60-D7-E3   (hex)		Phase One A/S
+700000-7FFFFF     (base 16)		Phase One A/S
+				Roskildevej 39
+				Frederiksberg    2000
+				DK
+
+98-AA-FC   (hex)		Shenzhen Hubsan Technology Co.，LTD.
+700000-7FFFFF     (base 16)		Shenzhen Hubsan Technology Co.，LTD.
+				 Xuefu Road, Nanshan District, 
+				13th Floor, Bldg 1C, Shenzhen Software Industry Base, Xuefu Road, Nanshan District,  Guangdong  518054
+				CN
+
+98-AA-FC   (hex)		SPM Instrument AB
+500000-5FFFFF     (base 16)		SPM Instrument AB
+				Box 504
+				Strängnäs    SE-64525
+				SE
+
+A4-11-63   (hex)		Viloc
+C00000-CFFFFF     (base 16)		Viloc
+				Langestraat, 221
+				Zandhoven  België  2240
+				BE
+
+1C-C0-E1   (hex)		Nitto Seiko
+C00000-CFFFFF     (base 16)		Nitto Seiko
+				shiroyama-cho 2banti
+				Ayabe-si  Kyoto-hu  623-0003
+				JP
+
+A4-11-63   (hex)		Adetel Equipment
+000000-0FFFFF     (base 16)		Adetel Equipment
+				3200 rue guénette
+				Montréal  Québec  H4S 2G5
+				CA
+
+A4-11-63   (hex)		tinylogics
+E00000-EFFFFF     (base 16)		tinylogics
+				St John's Innovation Centre, Cambridge
+				London    CB4 0WS
+				GB
+
+A4-11-63   (hex)		ISE GmbH
+A00000-AFFFFF     (base 16)		ISE GmbH
+				Osterstrasse 15
+				Oldenburg    26122
+				DE
+
+A4-11-63   (hex)		Allgo Tech. (Beijing) Co.,Ltd
+200000-2FFFFF     (base 16)		Allgo Tech. (Beijing) Co.,Ltd
+				Room 6012 Innovation Building ,NO.101 Southwest of 4th Ring Road, Fengtai District
+				Beijing  Beijing  100070
+				CN
+
+14-4F-D7   (hex)		Shenzhen V-Streaming Technology Co., Ltd.
+700000-7FFFFF     (base 16)		Shenzhen V-Streaming Technology Co., Ltd.
+				Room610, LangShanGe Building, Yugu Hi-Tech Park, Liuxin Road 1183, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+1C-A0-D3   (hex)		LYT inc.
+C00000-CFFFFF     (base 16)		LYT inc.
+				440, North Wolfe Road
+				Sunnyvale  CA  94085
+				US
+
+1C-A0-D3   (hex)		Desarrollos y Soluciones Guinea I+D S.L.
+800000-8FFFFF     (base 16)		Desarrollos y Soluciones Guinea I+D S.L.
+				Avda. de los Trabajadores nº2 1ªPlanta
+				Illescas  Toledo  45200
+				ES
+
+A4-11-63   (hex)		INTER CONTROL Hermann Köhler Elektrik GmbH & Co.KG
+100000-1FFFFF     (base 16)		INTER CONTROL Hermann Köhler Elektrik GmbH & Co.KG
+				Schafhofstrasse 30
+				Nuernberg    90411
+				DE
+
+38-FD-FE   (hex)		New Garden Co., Ltd.
+C00000-CFFFFF     (base 16)		New Garden Co., Ltd.
+				2F, NO.58, Xingshan Rd., Neihu.,
+				Taipei    114
+				TW
+
+A4-11-63   (hex)		AlterG, Inc.
+400000-4FFFFF     (base 16)		AlterG, Inc.
+				48438 Milmont Drive
+				Fremont  CA  94538
+				US
+
+1C-A0-D3   (hex)		Jabil circuit italia srl
+100000-1FFFFF     (base 16)		Jabil circuit italia srl
+				Via Giovanni Francesco Maggio'  Agglomerato Industriale
+				marcianise  caserta  81025
+				IT
+
+1C-A0-D3   (hex)		DSM Messtechnik GmbH
+A00000-AFFFFF     (base 16)		DSM Messtechnik GmbH
+				Dieselstrasse 16
+				Aalen  Baden-Wuerttemberg  73431
+				DE
+
+1C-A0-D3   (hex)		ERATO (HK) Corporation Limited
+D00000-DFFFFF     (base 16)		ERATO (HK) Corporation Limited
+				Unit P,8th floor, Kaiser Estate 3rd Phase, No,11 Hok Yuen Street, Hung Hom
+				Kowloon  Hong Kong  999077
+				HK
+
+58-E8-76   (hex)		DivioTec Inc.
+600000-6FFFFF     (base 16)		DivioTec Inc.
+				19F-1A, No.97, Sec. 4, ChongXin Rd., San Chong Dist., 
+				New Taipei     24161
+				TW
+
+50-A4-D0   (hex)		ZHENG DIAN ELECTRONICS LIMITED
+B00000-BFFFFF     (base 16)		ZHENG DIAN ELECTRONICS LIMITED
+				11 Xianghe Street, Xinmin, Changan
+				Dongguan  Guangdong  523879
+				CN
+
+50-A4-D0   (hex)		Beijing ANTVR Technology Co., LTD
+100000-1FFFFF     (base 16)		Beijing ANTVR Technology Co., LTD
+				4th floor of Building C, Lenovo Beijing Innovation Center, No. 6 Shangdi West Rd., Haidian Distr., Beijing 100085, China
+				Beijing  Beijing  100085
+				CN
+
+40-F3-85   (hex)		Lennox International Incorporated
+600000-6FFFFF     (base 16)		Lennox International Incorporated
+				1600 Metrocrest Drive
+				Carrollton  TX  75006
+				US
+
+80-7B-85   (hex)		Chendu Ningshui Technology Co.,Ltd
+700000-7FFFFF     (base 16)		Chendu Ningshui Technology Co.,Ltd
+				Baiyun Road ,xindu District ,ChengDu city, Sichuan Province ,China
+				Chengdu  Sichuan  610500
+				CN
+
+40-F3-85   (hex)		Fast Precision Technologies Co. Ltd.
+900000-9FFFFF     (base 16)		Fast Precision Technologies Co. Ltd.
+				4th Floor, Yang Tian Bldg., Chuang Ye Er Road & Yang Tian Road, Bao An District
+				Shenzhen  Guangdong  518101
+				CN
+
+50-A4-D0   (hex)		Seneco A/S
+200000-2FFFFF     (base 16)		Seneco A/S
+				Bøgekildevej 4
+				Hasselager  Danmark  8361
+				DK
+
+34-04-9E   (hex)		Pebble Technology
+700000-7FFFFF     (base 16)		Pebble Technology
+				900 Middlefield Road, Floor 5
+				Redwood City  CA  94063
+				US
+
+50-A4-D0   (hex)		PointGrab
+600000-6FFFFF     (base 16)		PointGrab
+				4 Haharash Str
+				Hod Hasharon    45240
+				IL
+
+34-04-9E   (hex)		EFD Induction
+200000-2FFFFF     (base 16)		EFD Induction
+				Boleveien 10
+				skien    3724
+				NO
+
+34-04-9E   (hex)		i3 International Inc.
+A00000-AFFFFF     (base 16)		i3 International Inc.
+				780 Birchmount Road
+				Scarborough  Ontario  M1K5H4
+				CA
+
+A4-58-0F   (hex)		BLOKS. GmbH
+200000-2FFFFF     (base 16)		BLOKS. GmbH
+				Agnes-Pockels-Bogen 1
+				Munich    80992
+				DE
+
+A4-58-0F   (hex)		INNOPRO
+000000-0FFFFF     (base 16)		INNOPRO
+				Building 33, Dahe Industrial Zone, Huanguan South Rd., Guanlan Street,
+				ShenZhen   GuangDong  518100
+				CN
+
+40-ED-98   (hex)		GUANGZHOU AURIC INTELLIGENT TECHNOLOGY CO.,LTD.
+800000-8FFFFF     (base 16)		GUANGZHOU AURIC INTELLIGENT TECHNOLOGY CO.,LTD.
+				Room 209, No. 115, JiuFoJianShe Road, Sino-Singapore Guangzhou Knowledge City, Huangpu District, Guangzhou
+				Guangzhou  Guangdong  510555
+				CN
+
+40-ED-98   (hex)		Knox Company
+300000-3FFFFF     (base 16)		Knox Company
+				1601 W DEER VALLEY RD
+				Phoenix  AZ  85027-2112
+				US
+
+40-ED-98   (hex)		Kendrion Kuhnke Automation GmbH
+400000-4FFFFF     (base 16)		Kendrion Kuhnke Automation GmbH
+				Luetjenburger Strasse 101
+				Malente  SH  23714
+				DE
+
+50-0B-91   (hex)		Machfu, Inc.
+900000-9FFFFF     (base 16)		Machfu, Inc.
+				20271 Goldenrod Ln
+				Germantown  MD  20876
+				US
+
+50-0B-91   (hex)		jiangsu zhongling high-tech CO.,LTD.
+500000-5FFFFF     (base 16)		jiangsu zhongling high-tech CO.,LTD.
+				NO.168 shugangdong road yangzhou city jiangsu china
+				yangzhou    225000
+				CN
+
+50-0B-91   (hex)		New Audio LLC
+A00000-AFFFFF     (base 16)		New Audio LLC
+				132 W 31st Street Suite 701
+				New York  NY  10001
+				US
+
+7C-CB-E2   (hex)		Shanghai Institute of Applied Physics, Chinese Academy of Sciences
+A00000-AFFFFF     (base 16)		Shanghai Institute of Applied Physics, Chinese Academy of Sciences
+				 239 Zhang Heng Road, Pudong New District
+				Shanghai  Shanghai  201203
+				CN
+
+50-0B-91   (hex)		SPD Development Company Ltd
+100000-1FFFFF     (base 16)		SPD Development Company Ltd
+				Stannard Way, Priory Business Park
+				Bedford    MK44 3UP
+				GB
+
+50-0B-91   (hex)		thumbzup UK Limited
+B00000-BFFFFF     (base 16)		thumbzup UK Limited
+				6th Floor, 94 Wigmore Street
+				London    W1U 3RF
+				GB
+
+48-65-EE   (hex)		VideoStitch, Inc
+900000-9FFFFF     (base 16)		VideoStitch, Inc
+				4677 Old Ironsides Dr, Suite 320
+				Santa Clara  CA  95054
+				US
+
+48-65-EE   (hex)		CaptionCall
+200000-2FFFFF     (base 16)		CaptionCall
+				4215 Riverboat Road
+				Salt Lake City  UT  84123
+				US
+
+24-4E-7B   (hex)		Cyber1st
+800000-8FFFFF     (base 16)		Cyber1st
+				Meteor Centre, Mansfield Road
+				Derby  Derbyshire  DE21 4SY
+				GB
+
+24-4E-7B   (hex)		Owasys Advanced Wireless Devices
+600000-6FFFFF     (base 16)		Owasys Advanced Wireless Devices
+				Parque Tecnologico, 207-B
+				Zamudio  Vizcaya  E-48170
+				ES
+
+48-65-EE   (hex)		Shenzhen Inpor cloud Computing Co., Ltd.
+A00000-AFFFFF     (base 16)		Shenzhen Inpor cloud Computing Co., Ltd.
+				15th Floor, Building B4, Kexing Science Park, Nanshan District zip
+				guangdong    518000
+				CN
+
+48-65-EE   (hex)		DNV GL
+C00000-CFFFFF     (base 16)		DNV GL
+				Utrechtseweg 310
+				Arnhem    6812 AR
+				NL
+
+1C-C0-E1   (hex)		Kids Wireless Inc
+500000-5FFFFF     (base 16)		Kids Wireless Inc
+				200 Bathurst Dr.
+				Waterloo  Ontario  N2V 2L7
+				CA
+
+1C-C0-E1   (hex)		Hangzhou Kaierda Electric Welding Machine Co.,Ltd
+100000-1FFFFF     (base 16)		Hangzhou Kaierda Electric Welding Machine Co.,Ltd
+				#6 Kenhui Five Road,Xiaoshan Economic & Technology Development Zone
+				Hangzhou    311232
+				CN
+
+1C-C0-E1   (hex)		Yun Yang Fire Safety Equipment Co.,Ltd.
+E00000-EFFFFF     (base 16)		Yun Yang Fire Safety Equipment Co.,Ltd.
+				No.11-4, Wanjin Rd., Dashe Dist., 
+				Kaohsiung City     815
+				TW
+
+AC-64-DD   (hex)		Kpnetworks Ltd.
+600000-6FFFFF     (base 16)		Kpnetworks Ltd.
+				4-5-11-10F Shiba
+				Minato-ku  Tokyo  108-0014
+				JP
+
+AC-64-DD   (hex)		SHANGHAI ZTE TECHNOLOGIES CO.,LTD
+500000-5FFFFF     (base 16)		SHANGHAI ZTE TECHNOLOGIES CO.,LTD
+				Bibo Road, Shanghai Pudong Zhangjiang Hi-Tech Park, Building No. 889, ZTE H Block 6F
+				SHANGHAI  SHANGHAI  201210
+				CN
+
+4C-E1-73   (hex)		jvi
+A00000-AFFFFF     (base 16)		jvi
+				Ettenbergstrasse 19
+				Deckenpfronn    75392
+				DE
+
+AC-64-DD   (hex)		Jia-Teng
+000000-0FFFFF     (base 16)		Jia-Teng
+				4F., No.417, Ruiguang Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C)
+				Taipei  Taipei  114
+				TW
+
+AC-64-DD   (hex)		Micro Connect Pty Ltd
+900000-9FFFFF     (base 16)		Micro Connect Pty Ltd
+				22 Gardenia Place
+				FOREST GLEN  QLD  4556
+				AU
+
+4C-E1-73   (hex)		Lenovo Data Center Group
+200000-2FFFFF     (base 16)		Lenovo Data Center Group
+				8001 Development Dr
+				Morrisville  NC   27560
+				US
+
+4C-E1-73   (hex)		Ersúles Limited
+700000-7FFFFF     (base 16)		Ersúles Limited
+				Unit 17 Sandyford Office Park
+				Dublin     D18 NP77
+				IE
+
+38-3A-21   (hex)		Foresight Sports
+A00000-AFFFFF     (base 16)		Foresight Sports
+				9965 Carroll Canyon Road
+				San Diego   CA  92131
+				US
+
+38-3A-21   (hex)		Alicat Scientific
+800000-8FFFFF     (base 16)		Alicat Scientific
+				7641 N Business Park Dr
+				Tucson  AZ  85743
+				US
+
+F8-1D-78   (hex)		Dongguan Shun Hing Plastics Limited
+000000-0FFFFF     (base 16)		Dongguan Shun Hing Plastics Limited
+				No.11,13,15,Zhongfang Industrial Road,Shatou,Changan Town
+				Dongguan City  Guangdong  523861
+				CN
+
+F8-1D-78   (hex)		Zengge Co., Limited
+600000-6FFFFF     (base 16)		Zengge Co., Limited
+				3/F, B Building, Second Laowei Industrial Zone, Longhua District
+				Shenzhen  Guangdong  518109
+				CN
+
+70-F8-E7   (hex)		CUAV
+E00000-EFFFFF     (base 16)		CUAV
+				zengcheng city xiapu
+				guangzhou  guangdong  511340
+				CN
+
+70-F8-E7   (hex)		Beijing Eehuu Technology Co.,Ltd.
+500000-5FFFFF     (base 16)		Beijing Eehuu Technology Co.,Ltd.
+				Room 2010, 3rd floor, Building #10, No.39 Sanlihe Road, Haidian District, Beijing, China
+				BEIJING  Beijing  10000
+				CN
+
+70-F8-E7   (hex)		NST Technology Limited Co.,Ltd.
+700000-7FFFFF     (base 16)		NST Technology Limited Co.,Ltd.
+				1F,ABuilding,Juxie Zuo,No.18 Zhenze Road, 
+				wuxi  Jiangsu  214073
+				CN
+
+70-F8-E7   (hex)		CLIP Inc.
+400000-4FFFFF     (base 16)		CLIP Inc.
+				4－5－18,Hommachi,Chuo-ku
+				Osaka-city  Osaka-fu  541-0053
+				JP
+
+84-E0-F4   (hex)		Hangzhou Nationalchip Science & Technology Co.,Ltd.
+500000-5FFFFF     (base 16)		Hangzhou Nationalchip Science & Technology Co.,Ltd.
+				5-6th Floor, Innovation Mansion East Software Park,90# Wensan Road
+				Hangzhou  Zhejiang  310012
+				CN
+
+70-F8-E7   (hex)		System-on-Chip engineering
+D00000-DFFFFF     (base 16)		System-on-Chip engineering
+				Jose María Escuza 23 Entreplanta Dcha D
+				Bilbao  Bizkaia  ES48013
+				ES
+
+70-F8-E7   (hex)		Photonfocus AG
+B00000-BFFFFF     (base 16)		Photonfocus AG
+				Bahnhofplatz 10
+				Lachen  SZ  8853
+				CH
+
+84-E0-F4   (hex)		SHENZHEN HCN.ELECTRONICS CO.,LTD.
+900000-9FFFFF     (base 16)		SHENZHEN HCN.ELECTRONICS CO.,LTD.
+				8F, Block C3, Nanshan I Park, No.1001 Xueyuan Road, Nanshan District
+				shenzhen  guangdong  518040
+				CN
+
+84-E0-F4   (hex)		Logos01 Srl
+D00000-DFFFFF     (base 16)		Logos01 Srl
+				Via Pertini 23
+				Marmirolo  MN  46045
+				IT
+
+84-E0-F4   (hex)		PetroInTrade
+400000-4FFFFF     (base 16)		PetroInTrade
+				Engelsa 71
+				Saint-Peterburg    194214
+				RU
+
+C0-D3-91   (hex)		Fuzhou Jinshi Technology Co.,Ltd.
+000000-0FFFFF     (base 16)		Fuzhou Jinshi Technology Co.,Ltd.
+				Block A, Building 39#，District D, Software Park
+				Fuzhou  Fujian Province  350003
+				CN
+
+C0-D3-91   (hex)		Vernier Software & Technology
+400000-4FFFFF     (base 16)		Vernier Software & Technology
+				13979 SW Millikan Way
+				Beaverton  OR  97005
+				US
+
+5C-F2-86   (hex)		Shenzhen VST Automotive Electronics Co., LTD
+900000-9FFFFF     (base 16)		Shenzhen VST Automotive Electronics Co., LTD
+				3 floor,1Building, No.3 West of ShangXue Science and technology park, Bantian town, LongGang District
+				ShenZhen  Guangdong  518100
+				CN
+
+C0-D3-91   (hex)		Ernitec
+600000-6FFFFF     (base 16)		Ernitec
+				Tempovej 41
+				Ballerup    2750
+				DK
+
+58-E8-76   (hex)		Beijing Perabytes IS Technology Co., Ltd
+100000-1FFFFF     (base 16)		Beijing Perabytes IS Technology Co., Ltd
+				2F, Office Building, No. 2 Yard, Longxiang Printing-plate Group, North of Huilongguan Village, Huilongguan Town, ChangPing District，Beijing 102208, P.R. China
+				Beijing  Beijing  102208
+				CN
+
+58-E8-76   (hex)		 Baoruh Electronic Co., Ltd.
+E00000-EFFFFF     (base 16)		 Baoruh Electronic Co., Ltd.
+				o.285, Dingciang Street, Kaohsiung, 80790 Taiwan.
+				 Kaohsiung    80790 
+				TW
+
+58-E8-76   (hex)		Coala Life AB
+200000-2FFFFF     (base 16)		Coala Life AB
+				Riddargatan 18
+				Stockholm    11451
+				SE
+
+58-E8-76   (hex)		Chronos Technology Ltd.
+700000-7FFFFF     (base 16)		Chronos Technology Ltd.
+				Stowfield House
+				Lydbrook  Gloucestershire  GL17 9PD
+				GB
+
+F0-AC-D7   (hex)		Simprints Technology Ltd
+C00000-CFFFFF     (base 16)		Simprints Technology Ltd
+				The Chesterton Tower
+				Cambridge    CB4 1DZ
+				GB
+
+B0-C5-CA   (hex)		SHENZHEN KTC TECHNOLOGY GROUP 
+700000-7FFFFF     (base 16)		SHENZHEN KTC TECHNOLOGY GROUP 
+				Northern Wuhe Road,Banxuegang Industry Area,Buji,Shenzhen,China
+				Shenzhen  Guangdong  518129
+				CN
+
+F0-AC-D7   (hex)		U3storage Technologies Co., Ltd
+900000-9FFFFF     (base 16)		U3storage Technologies Co., Ltd
+				information Road No. 26 , Haidian District 
+				BEIJING    100085
+				CN
+
+28-36-38   (hex)		SHENZHEN GOSPELL SMARTHOME ELECTRONIC CO., LTD.
+200000-2FFFFF     (base 16)		SHENZHEN GOSPELL SMARTHOME ELECTRONIC CO., LTD.
+				Block F10~13, F518 Idea Land, Bao Yuan Road, Baoan, Shenzhen
+				Shenzhen  Guangdong  518102
+				CN
+
+28-36-38   (hex)		Sabinetek
+300000-3FFFFF     (base 16)		Sabinetek
+				NO.1406  Hong Yuan Building  ,Jiu Xian Qiao Road A 4,Chao Yang Beijing China
+				Beijing  Beijing  100000
+				CN
+
+78-CA-83   (hex)		Hubei Boyuan Zhijia Network Media Co. Ltd.
+D00000-DFFFFF     (base 16)		Hubei Boyuan Zhijia Network Media Co. Ltd.
+				Wuhan City, Hubei City, Optics Valley Province, Optics Valley 77, city, financial port A3 12
+				Wuhan  Hubei  42000
+				CN
+
+8C-19-2D   (hex)		Elcon AB
+E00000-EFFFFF     (base 16)		Elcon AB
+				Hyttrisvagen 27
+				Nyhammar    77014
+				SE
+
+8C-19-2D   (hex)		Greenfield Technology
+300000-3FFFFF     (base 16)		Greenfield Technology
+				1 bis rue marcel paul
+				massy    91300
+				FR
+
+D0-D9-4F   (hex)		APPOTRONICS CO., LTD
+E00000-EFFFFF     (base 16)		APPOTRONICS CO., LTD
+				4th Floor,SZICC,NO.1089,Chaguang Road,Nanshan District, Shenzhen, China
+				Shenzhen  Guangdong  518000
+				CN
+
+CC-D3-1E   (hex)		Shenzhen Decnta Technology Co.,LTD.
+700000-7FFFFF     (base 16)		Shenzhen Decnta Technology Co.,LTD.
+				F13,No.02,Building Shangqi,Nanhaidadao 4050 Nanshan District,Shenzhen,P.R.China
+				shenzhen  Guangdong  518057
+				CN
+
+C4-7C-8D   (hex)		Star2Star Communications, LLC
+200000-2FFFFF     (base 16)		Star2Star Communications, LLC
+				600 Tallevast Road, Suite 202
+				Sarasota  FL  34243
+				US
+
+CC-D3-1E   (hex)		NTmore.Co.,Ltd
+500000-5FFFFF     (base 16)		NTmore.Co.,Ltd
+				38, Heungan-daero 427 beon-gil, Dongan-gu
+				Anyang  Gyeonggi  431-801
+				KR
+
+CC-D3-1E   (hex)		inoage GmbH
+800000-8FFFFF     (base 16)		inoage GmbH
+				Wiener Str. 56
+				Dresden    01219
+				DE
+
+C4-7C-8D   (hex)		Anhui GuangXing Linked-Video Communication Technology Co, Ltd.
+D00000-DFFFFF     (base 16)		Anhui GuangXing Linked-Video Communication Technology Co, Ltd.
+				Floor 6, Block B, Idiopathic Information Technology Port, Kefeng Road No. 2, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+68-91-D0   (hex)		solvimus GmbH
+800000-8FFFFF     (base 16)		solvimus GmbH
+				Ehrenbergstr. 11
+				Ilmenau    98693
+				DE
+
+68-91-D0   (hex)		Spraying Systems Co.
+C00000-CFFFFF     (base 16)		Spraying Systems Co.
+				North Ave. and Schmale Road P.O. Box 7900 
+				Wheaton  IL  60187-7901
+				US
+
+68-91-D0   (hex)		Fuzhou x-speed information technology Co.,Ltd.
+D00000-DFFFFF     (base 16)		Fuzhou x-speed information technology Co.,Ltd.
+				 tianewan 30#1601 Pushang Load,Cangshan District,
+				Fuzhou  Fujian  350008
+				CN
+
+E0-B6-F5   (hex)		Moog Crossbow
+B00000-BFFFFF     (base 16)		Moog Crossbow
+				1421 McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+E0-B6-F5   (hex)		START TODAY CO.,LTD.
+100000-1FFFFF     (base 16)		START TODAY CO.,LTD.
+				WBG Malibu West 16 Floor 2-6-1 Nakase Mihama-ku, Chiba
+				Chiba  Chiba  261-7116
+				JP
+
+50-FF-99   (hex)		metraTec GmbH
+A00000-AFFFFF     (base 16)		metraTec GmbH
+				Niels-Bohr-Str. 5
+				Magdeburg  Sachsen-Anh.  39106
+				DE
+
+50-FF-99   (hex)		Dolphin Concepts Limited
+800000-8FFFFF     (base 16)		Dolphin Concepts Limited
+				A 10, Unit B-E
+				11/F, Genesis, 33-35 Wong Chuk Hang Road,  Hong Kong  11111
+				HK
+
+98-6D-35   (hex)		SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.
+200000-2FFFFF     (base 16)		SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.
+				No.6 Building, Longfu Industrial Area, Huarong Road, Tongsheng Community, Dalang Street, Longhua New District, Shenzhen, Guangdong, China
+				shenzhen  guangdong  518000
+				CN
+
+98-6D-35   (hex)		INTECH
+B00000-BFFFFF     (base 16)		INTECH
+				1F No. 45, Wanghai Road / Software Park Phase Ⅱ, Xiamen, China
+				Xiamen  Fujian  361008
+				CN
+
+98-6D-35   (hex)		BAYCOM OPTO-ELECTRONICS TECHNOLGY CO., LTD.
+E00000-EFFFFF     (base 16)		BAYCOM OPTO-ELECTRONICS TECHNOLGY CO., LTD.
+				3F, NO.9, INDUSTRIAL EAST 9TH RD. HSINCHU SCIENCE PARK, HSIN-CHU CITY, TAIWAN, R.O.C.
+				HSIN-CHU    30075
+				TW
+
+98-6D-35   (hex)		iWave Japan, Inc.
+A00000-AFFFFF     (base 16)		iWave Japan, Inc.
+				8F-B,Kannai Sumiyoshi Building,3-29 Sumiyoshi-Cho,Naka-Ku,
+				Yokohama, Kanagawa    231-0013
+				JP
+
+10-07-23   (hex)		Diginet Control Systems Pty Ltd
+200000-2FFFFF     (base 16)		Diginet Control Systems Pty Ltd
+				96-112 Gow Street
+				Padstow  New South Wales  2211
+				AU
+
+7C-47-7C   (hex)		Hangzhou Yiyitaidi Information Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Hangzhou Yiyitaidi Information Technology Co., Ltd.
+				#9 Jiuhuan Road, Building 1B208, Jianggan District
+				Hangzhou  Zhejiang  310019
+				CN
+
+5C-F2-86   (hex)		Itron UK Limited
+B00000-BFFFFF     (base 16)		Itron UK Limited
+				Harfreys Road , Harfreys Ind. Estate
+				Great Yarmouth    NR31 0LS
+				GB
+
+38-FD-FE   (hex)		WAYTONE (BEIIJNG) COMMUNICATIONS CO.,LTD
+100000-1FFFFF     (base 16)		WAYTONE (BEIIJNG) COMMUNICATIONS CO.,LTD
+				ROOM 201B,KESHI BUILDING,NO.28 XINXI ROAD HAIDIAN BEIJING,P.R.CHINA 
+				Beijing  Beijing  100085 
+				CN
+
+7C-47-7C   (hex)		POWERLAND LIMITED
+200000-2FFFFF     (base 16)		POWERLAND LIMITED
+				7F, Buiding A2, ZhongTai Information Industry Park, DeZheng Road, ShiYan Street.
+				ShenZhen  GuangDong  518108
+				CN
+
+38-B8-EB   (hex)		Yellowbrick Data, Inc.
+D00000-DFFFFF     (base 16)		Yellowbrick Data, Inc.
+				250 Cambridge Av.,  Suite 201
+				Palo Alto  CA  94306
+				US
+
+38-FD-FE   (hex)		Siemens AG, PG IE R&D
+300000-3FFFFF     (base 16)		Siemens AG, PG IE R&D
+				Siemensalle 84
+				Karlsruhe    76187
+				DE
+
+38-B8-EB   (hex)		MATRIXSTREAM TECHNOLOGIES, INC.
+600000-6FFFFF     (base 16)		MATRIXSTREAM TECHNOLOGIES, INC.
+				303 Twin Dolphins Drive 6th Floor Redwood Shores, california,USA 94065 
+				california     94065 
+				AM
+
+38-B8-EB   (hex)		barox Kommunikation GmbH
+200000-2FFFFF     (base 16)		barox Kommunikation GmbH
+				Marie-Curie-Strasse 8
+				Lörrach    DE-79539
+				DE
+
+1C-88-79   (hex)		gekartel AG
+B00000-BFFFFF     (base 16)		gekartel AG
+				Julius-Otto-Straße 7
+				Dresden    01219
+				DE
+
+1C-88-79   (hex)		Newps co.,ltd
+000000-0FFFFF     (base 16)		Newps co.,ltd
+				33, Hoguk-ro
+				Daegu  Korea  41502
+				KR
+
+1C-87-74   (hex)		Quest Integrity
+E00000-EFFFFF     (base 16)		Quest Integrity
+				19823 58TH PL S, STE 100
+				Kent  WA  98032
+				US
+
+1C-88-79   (hex)		ITW-FEG
+A00000-AFFFFF     (base 16)		ITW-FEG
+				155 Harlem Avenue
+				Glenview  IL  60025
+				US
+
+1C-87-76   (hex)		Artis GmbH
+E00000-EFFFFF     (base 16)		Artis GmbH
+				Buchenring 40
+				Egestorf    21272
+				DE
+
+1C-87-79   (hex)		ASSYSTEM France
+E00000-EFFFFF     (base 16)		ASSYSTEM France
+				13 rue Marie Louise Dissard
+				TOULOUSE    31024
+				FR
+
+1C-87-74   (hex)		Nichigaku
+200000-2FFFFF     (base 16)		Nichigaku
+				Oimachi 1-49-15
+				Shinagawa  Tokyo  1400014
+				JP
+
+1C-87-74   (hex)		Philips Personal Health Solutions
+000000-0FFFFF     (base 16)		Philips Personal Health Solutions
+				High Tech Campus, HTC37 floor 0
+				Eindhoven    5656 AE
+				NL
+
+1C-87-76   (hex)		Hekatron Vertriebs GmbH
+B00000-BFFFFF     (base 16)		Hekatron Vertriebs GmbH
+				Brühlmatten 9
+				Sulzburg    79295
+				DE
+
+1C-87-76   (hex)		RDP.RU
+400000-4FFFFF     (base 16)		RDP.RU
+				3 Davydkovskaya street
+				Moscow    121352
+				RU
+
+1C-87-79   (hex)		TASC Systems Inc.
+700000-7FFFFF     (base 16)		TASC Systems Inc.
+				9415 - 202 Street
+				Langley  BRITISH COLUMBIA  V1M4B5
+				CA
+
+1C-87-79   (hex)		SMARTMOVT TECHNOLOGY Co.， LTD
+200000-2FFFFF     (base 16)		SMARTMOVT TECHNOLOGY Co.， LTD
+				Room204-210, F3 building, F518 Idea Land, Baoyuan road, Xixiang Ave, Bao’an District
+				Shenzhen  Guangdong  518100 
+				CN
+
+1C-87-79   (hex)		Beijing Geedeen Technology Co., Ltd
+B00000-BFFFFF     (base 16)		Beijing Geedeen Technology Co., Ltd
+				Room 1701, Building A, Boya International Center, Lizezhongerlu, Chaoyang District
+				Beijing  Beijing  100102
+				CN
+
+84-39-BE   (hex)		Guangzhou Heygears Technology Ltd
+100000-1FFFFF     (base 16)		Guangzhou Heygears Technology Ltd
+				Room 2301, #379 Zhongshan Road Central
+				Guangzhou  Guangdong  510000
+				CN
+
+70-88-6B   (hex)		Church & Dwight Co., Inc.
+600000-6FFFFF     (base 16)		Church & Dwight Co., Inc.
+				500 Charles Ewing Blvd
+				Ewing  NJ  08628
+				US
+
+40-A3-6B   (hex)		Onion Corporation
+C00000-CFFFFF     (base 16)		Onion Corporation
+				186 Denison Street
+				Markham  Ontario  L3R 1B5
+				CA
+
+70-88-6B   (hex)		Bitfinder Inc
+100000-1FFFFF     (base 16)		Bitfinder Inc
+				20660 Stevens Creeks #345
+				Cupertino  CA  95014
+				US
+
+40-A3-6B   (hex)		TW-TeamWare
+100000-1FFFFF     (base 16)		TW-TeamWare
+				Via Pindaro, 19
+				Milano    20128
+				IT
+
+70-88-6B   (hex)		Cable Matters Inc.
+800000-8FFFFF     (base 16)		Cable Matters Inc.
+				153 Northboro Road, Suite 5
+				Southborough  MA  01772
+				US
+
+70-88-6B   (hex)		Shenzhen Coolhear Information Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen Coolhear Information Technology Co., Ltd.
+				Room 502,Building A4, Kexing Science Park, Keyuan Road, Nanshan Distrct, Shenzhen, Guangdong,
+				Shenzhen  Guangdong  518000
+				CN
+
+00-55-DA   (hex)		OOO DEKATRON
+600000-6FFFFF     (base 16)		OOO DEKATRON
+				Oseny boulevard 15 apart. 394
+				Moscow  Moscow  121609
+				RU
+
+00-55-DA   (hex)		Quantum Communication Technology Co., Ltd.,Anhui
+900000-9FFFFF     (base 16)		Quantum Communication Technology Co., Ltd.,Anhui
+				D3 Innovation Industrial Park, No. 800 Wangjiang West Road, Hefei Hi-tech Industrial Development Zone, Hefei City, Anhui Province, China
+				Hefei  Anhui  230088
+				CN
+
+CC-1B-E0   (hex)		Cassia Networks
+E00000-EFFFFF     (base 16)		Cassia Networks
+				Room B206 , ZhongGuanCun FaZhanDaSha
+				Beijing  Beijing  100085
+				CN
+
+80-0A-80   (hex)		Golana Technology (Shenzhen) Co., Ltd.
+000000-0FFFFF     (base 16)		Golana Technology (Shenzhen) Co., Ltd.
+				4th Floor, Integration Building A1
+				Shenzhen  Guangdong  518129
+				CN
+
+CC-1B-E0   (hex)		Matter Labs Pty Ltd
+A00000-AFFFFF     (base 16)		Matter Labs Pty Ltd
+				Suite 105
+				South Yarra  Vic  3141
+				AU
+
+CC-1B-E0   (hex)		Beijing Daotongtianxia Co.Ltd.
+100000-1FFFFF     (base 16)		Beijing Daotongtianxia Co.Ltd.
+				Beijing, Haidian District, Taiyueyuan Building No.1, Taiyueshangwu Center Flo.5
+				Beijing  Beijing  100088
+				CN
+
+A0-3E-6B   (hex)		Shenzhen Nufilo Inc.
+400000-4FFFFF     (base 16)		Shenzhen Nufilo Inc.
+				Tianliao Building F3,(New Materials Industrial Park),Xueyuan Road,Nanshan District,Shenzhen City,P.R.China
+				Shenzhen  Guangdong  518055
+				CN
+
+C8-8E-D1   (hex)		Ube, Inc. (dba Plum)
+700000-7FFFFF     (base 16)		Ube, Inc. (dba Plum)
+				9800 N. Lamar Blvd., STE 310
+				Austin  TX  78753-4160
+				US
+
+C8-8E-D1   (hex)		Shanghai Bwave Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Shanghai Bwave Technology Co.,Ltd
+				6F,Building12,399 Keyuan Road, Zhangjiang Hi-Tech Park,shanghai,china
+				Shanghai  Shanghai  201203
+				CN
+
+A0-3E-6B   (hex)		KoCoS Messtechnik AG
+B00000-BFFFFF     (base 16)		KoCoS Messtechnik AG
+				Südring 42
+				Korbach  Hessen  34497
+				DE
+
+C8-8E-D1   (hex)		PHOENIX ENGINEERING CORP.
+D00000-DFFFFF     (base 16)		PHOENIX ENGINEERING CORP.
+				466-3 Fujikubo
+				Irumagun  Saitama  354-0041
+				JP
+
+A0-3E-6B   (hex)		s&t embedded GmbH
+000000-0FFFFF     (base 16)		s&t embedded GmbH
+				Breslauer Str. 3
+				Eching  Bayern  85386
+				DE
+
+1C-21-D1   (hex)		LG CNS
+A00000-AFFFFF     (base 16)		LG CNS
+				21F, FKI Tower, 24, Yeoui-daero, Yeongdeungpo-gu
+				Seoul    150-881
+				KR
+
+1C-21-D1   (hex)		Global Design Solutions Ltd
+B00000-BFFFFF     (base 16)		Global Design Solutions Ltd
+				Unit 13
+				Bristol  England  BS44ED
+				GB
+
+1C-21-D1   (hex)		Wuhan TieChi Detection Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Wuhan TieChi Detection Technology Co., Ltd.
+				Hongshan District Luo Yu RoadBainaohui room 1513
+				Wuhan  Hubei  430000
+				CN
+
+1C-21-D1   (hex)		Toyo System CO.,LTD.
+000000-0FFFFF     (base 16)		Toyo System CO.,LTD.
+				106-1,Zenita,Joban-Nishigo,
+				Iwaki,  Fukushima  972-8316
+				JP
+
+1C-21-D1   (hex)		Varaani Works Oy
+200000-2FFFFF     (base 16)		Varaani Works Oy
+				Takojankatu 1c B 16
+				Tampere  Pirkanmaa  33540
+				FI
+
+DC-44-27   (hex)		Rohde&Schwarz Topex SA
+D00000-DFFFFF     (base 16)		Rohde&Schwarz Topex SA
+				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
+				Bucuresti  Romania  014142
+				RO
+
+1C-21-D1   (hex)		Liscotech System Co., Ltd.
+D00000-DFFFFF     (base 16)		Liscotech System Co., Ltd.
+				4F. No. 342 Sec.4 Chenggong Rd. Neihu Dist.
+				Taipei  TW  11458
+				TW
+
+1C-21-D1   (hex)		Soundtrack Your Brand Sweden AB
+700000-7FFFFF     (base 16)		Soundtrack Your Brand Sweden AB
+				Birger Jarlsgatan 43
+				Stockholm    11145
+				SE
+
+C8-8E-D1   (hex)		Fibergate.Inc
+500000-5FFFFF     (base 16)		Fibergate.Inc
+				KDX Shibadaimon.Bld 2F Shibadaimon Minato-ku Tokyo 105-0012 Japan
+				Tokyo  Minato-ku  105-0012
+				JP
+
+DC-44-27   (hex)		VerifEye Technologies
+E00000-EFFFFF     (base 16)		VerifEye Technologies
+				2-151 Whitehall Dr.
+				Markham  ON  L3R9T1
+				CA
+
+C8-8E-D1   (hex)		Linx Technologies
+300000-3FFFFF     (base 16)		Linx Technologies
+				159 Ort Lane
+				Merlin  OR  97532
+				US
+
+C8-8E-D1   (hex)		Comlab AG
+400000-4FFFFF     (base 16)		Comlab AG
+				Ey 13
+				Ittigen  BE  3076
+				CH
+
+B0-C5-CA   (hex)		TEM Mobile Limited
+A00000-AFFFFF     (base 16)		TEM Mobile Limited
+				RM1703, North Block, Cangsong Building, Tairan 6 road, Futian District, Shenzhen.
+				Shenzhen  Guangdong  518000
+				CN
+
+B0-C5-CA   (hex)		RISECOMM  (HK) TECHNOLOGY CO. LIMITED
+B00000-BFFFFF     (base 16)		RISECOMM  (HK) TECHNOLOGY CO. LIMITED
+				Skyworth Building C501, Hi-tech Industrial Park, Shenzhen, China
+				shenzhan  guangdong  518057
+				CN
+
+B0-C5-CA   (hex)		LOWOTEC GmbH
+200000-2FFFFF     (base 16)		LOWOTEC GmbH
+				Marie-Curie-Str. 1
+				Oldenburg  Niedersachsen  26129
+				DE
+
+78-C2-C0   (hex)		ShenZhen TuLing Robot CO.,LTD
+500000-5FFFFF     (base 16)		ShenZhen TuLing Robot CO.,LTD
+				BLK 9, No 28, Langshan Road, Northern District of High Tech. Industry Park, Nanshan Dist., SZ., PRC.
+				ShenZhen  GuangDong  518000
+				CN
+
+B4-37-D1   (hex)		Axiomatic Technologies Corporation
+A00000-AFFFFF     (base 16)		Axiomatic Technologies Corporation
+				5915 Wallace St.
+				Mississauga  ON  L4Z1Z8
+				CA
+
+74-F8-DB   (hex)		GHL Advanced Technology GmbH & Co. KG
+100000-1FFFFF     (base 16)		GHL Advanced Technology GmbH & Co. KG
+				Marie-Curie-Str. 20
+				Kaiserslautern  RP  67661
+				DE
+
+54-9A-11   (hex)		Hangzhou duotin Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		Hangzhou duotin Technology Co., Ltd.
+				Haichuang Garden of Hangzhou city Yuhang District 4 Building 407B
+				hangzhou  Zhejiang  311100
+				CN
+
+88-5D-90   (hex)		Gigatech R&D Corp.
+900000-9FFFFF     (base 16)		Gigatech R&D Corp.
+				7F-5, 16 Jian 8th road, Zhonghe Dist.
+				New Taipei City  Taiwan  23511
+				TW
+
+88-5D-90   (hex)		ShenZhen Yuyangsheng technology company LTD
+100000-1FFFFF     (base 16)		ShenZhen Yuyangsheng technology company LTD
+				Yinfeng industrial park Jiu wei community
+				shenzhen  guangdong  518000
+				CN
+
+88-5D-90   (hex)		Hi-Profile Achievement (M) Sdn Bhd
+600000-6FFFFF     (base 16)		Hi-Profile Achievement (M) Sdn Bhd
+				42A, Lorong Teras Jaya 2, Kawasan Perniagaan Teras Jaya
+				Butterworth  Pulau Pinang  13400
+				MY
+
+54-9A-11   (hex)		VendNovation LLC
+A00000-AFFFFF     (base 16)		VendNovation LLC
+				13400 NE 20th Street
+				Bellevue  WA  98005
+				US
+
+80-7B-85   (hex)		Shiroshita Industrial Co., Ltd.
+000000-0FFFFF     (base 16)		Shiroshita Industrial Co., Ltd.
+				1-1-58, Tokiiri
+				Ueda-shi  Nagano  386-0015
+				JP
+
+80-7B-85   (hex)		Phoenix Co.,Ltd.
+200000-2FFFFF     (base 16)		Phoenix Co.,Ltd.
+				Perl Iidabashi Bldg.,
+				Chiyoda-ku  Tokyo  102-0072
+				JP
+
+64-FB-81   (hex)		Sichuan Haige Actec Communication Technology Co.,Ltd.
+B00000-BFFFFF     (base 16)		Sichuan Haige Actec Communication Technology Co.,Ltd.
+				8 Mintai Road, Youxian District, Mianyang City, Sichuan
+				Mianyang City  Sichuan  621022
+				CN
+
+80-7B-85   (hex)		IDair, LLC
+800000-8FFFFF     (base 16)		IDair, LLC
+				6767 Old Madison Pike
+				Huntsville  AL  35806
+				US
+
+80-E4-DA   (hex)		Neutronics
+A00000-AFFFFF     (base 16)		Neutronics
+				456 Creamery Way
+				Exton  Pennsylvania  19341
+				US
+
+64-FB-81   (hex)		Narrative AB
+100000-1FFFFF     (base 16)		Narrative AB
+				Agatan 55A
+				Linkoping  -  58222
+				SE
+
+1C-CA-E3   (hex)		Insigma Inc
+200000-2FFFFF     (base 16)		Insigma Inc
+				43490, Yukon Drive, Suite 102
+				Ashburn  VA  20147
+				US
+
+80-E4-DA   (hex)		Akenori PTE LTD
+E00000-EFFFFF     (base 16)		Akenori PTE LTD
+				176 JOO CHIAT ROAD #02-02
+				    427447
+				SG
+
+1C-CA-E3   (hex)		Dream Visions Co., LTD
+B00000-BFFFFF     (base 16)		Dream Visions Co., LTD
+				90 Chongpa_Ro YoungSan-Gu
+				Seoul  Seoul  140-742
+				KR
+
+1C-CA-E3   (hex)		Gahdeung Elecom
+C00000-CFFFFF     (base 16)		Gahdeung Elecom
+				203, Rojinmedical, 717, Lee-Dong, Sanrok-Gu
+				ANSAN  Kyeonggi-Do  ASI|KR|KS009|ANSAN
+				KR
+
+1C-CA-E3   (hex)		TOKAI RIKA CO., LTD.
+600000-6FFFFF     (base 16)		TOKAI RIKA CO., LTD.
+				3-260
+				Niwa-gun, Oguchi-cho  Aichi  480-0195
+				JP
+
+90-C6-82   (hex)		Shenzhen Photon Broadband Technology CO., LTD
+100000-1FFFFF     (base 16)		Shenzhen Photon Broadband Technology CO., LTD
+				8/F,C Bldg, Funing Hi-Tech Industrial Park, No.71 Fuyong Xintian Road,Baoan District Shenzhen,China
+				Shenzhen  Guangdong  518103
+				CN
+
+90-C6-82   (hex)		ekey biometric systems gmbh
+200000-2FFFFF     (base 16)		ekey biometric systems gmbh
+				Lunzerstrsasse 89
+				Linz  Upper Austria  4020
+				AT
+
+90-C6-82   (hex)		ACT
+900000-9FFFFF     (base 16)		ACT
+				Unit C1, South City Business Center
+				Dublin    
+				IE
+
+2C-D1-41   (hex)		AOptix Technologies, Inc
+300000-3FFFFF     (base 16)		AOptix Technologies, Inc
+				675 Campbell Technology Pkwy
+				Campbell  CA  95008
+				US
+
+2C-D1-41   (hex)		iCIRROUND Inc
+000000-0FFFFF     (base 16)		iCIRROUND Inc
+				7F,No.,79, Chou-Tze St.,
+				Taipei  Taiwan  114
+				TW
+
+90-C6-82   (hex)		Beijing Acorn Networks Corporation
+A00000-AFFFFF     (base 16)		Beijing Acorn Networks Corporation
+				1A-601，Wang Jing Street, Chao Yang Qu, Beijing, China
+				Beijing  Beijing  100102
+				CN
+
+2C-6A-6F   (hex)		Schneider Electric Korea
+B00000-BFFFFF     (base 16)		Schneider Electric Korea
+				14F Kbiz DMC tower,
+				  Seoul  121-904
+				KR
+
+2C-D1-41   (hex)		Minno LLC
+800000-8FFFFF     (base 16)		Minno LLC
+				421 North Milpas Street
+				Santa Barbara  CA  93103
+				US
+
+A0-BB-3E   (hex)		COMSYS Communications Systems Service GmbH
+400000-4FFFFF     (base 16)		COMSYS Communications Systems Service GmbH
+				TecCenter
+				Bad Salzdetfurth  Niedersachsen  31162
+				DE
+
+98-02-D8   (hex)		Fritz Kuebler GmbH
+600000-6FFFFF     (base 16)		Fritz Kuebler GmbH
+				Schubertstrasse 47
+				Villingen-Schwenningen  Baden-Wuerttemberg  78054
+				DE
+
+98-02-D8   (hex)		Grammer EiA Electronics nv
+300000-3FFFFF     (base 16)		Grammer EiA Electronics nv
+				Vluchtenburgstraat 3B
+				Aartselaar  Antwerp  2630
+				BE
+
+A0-BB-3E   (hex)		Messtechnik Sachs GmbH
+E00000-EFFFFF     (base 16)		Messtechnik Sachs GmbH
+				Siechenfeldstr. 30/1
+				Schorndorf  Germany  73614
+				DE
+
+98-02-D8   (hex)		SHENZHEN ATEKO PHOTOELECTRICITY CO LTD
+100000-1FFFFF     (base 16)		SHENZHEN ATEKO PHOTOELECTRICITY CO LTD
+				 4-5F, E1 Building, TCL International E City, No.1001 Zhongshanyuan Road, Nanshan District
+				Shenzhen,  Guangdong  518052
+				CN
+
+F8-02-78   (hex)		Lit Technologies
+E00000-EFFFFF     (base 16)		Lit Technologies
+				2011 Stampede Dr
+				Farmington  Utah  84025
+				US
+
+2C-26-5F   (hex)		XIAMEN VORLINK IOT TECHNOLOGY CO.,LTD.
+000000-0FFFFF     (base 16)		XIAMEN VORLINK IOT TECHNOLOGY CO.,LTD.
+				No.306 of Chengye Bldg., Xiamen Pioneering Park for Overseas Chinese Scholars
+				xiamen  fujian  361000
+				CN
+
+28-FD-80   (hex)		T-Radio AS
+E00000-EFFFFF     (base 16)		T-Radio AS
+				Stensarmen 3A
+				Tønsberg    3112
+				NO
+
+2C-26-5F   (hex)		Appostar Technology Co. Ltd
+600000-6FFFFF     (base 16)		Appostar Technology Co. Ltd
+				13F., No.213, Sec. 3, Beixin Rd., Xindian Dist., New Taipei City 231, Taiwan (R.O.C.)
+				Xindian Dist  New Taipei City  231
+				TW
+
+2C-26-5F   (hex)		shenzhen Clever Electronic Co., Ltd.
+300000-3FFFFF     (base 16)		shenzhen Clever Electronic Co., Ltd.
+				Building 8, Baiwang Creative Park(UTCP),Nanshan District,Shenzhen,China
+				Shenzhen  GuangDong  518055
+				CN
+
+28-FD-80   (hex)		NUUO, Inc.
+300000-3FFFFF     (base 16)		NUUO, Inc.
+				B1, No.207-1, Sec. 3, Beixin Rd.
+				New Taipei City  Xindian Dist.  231
+				TW
+
+0C-EF-AF   (hex)		PREMIUM SA
+500000-5FFFFF     (base 16)		PREMIUM SA
+				C/ Dolors Aleu 19  2º 2º
+				Hospitalet del Llobregat  Barcelona  08908
+				ES
+
+F8-02-78   (hex)		Technology Research, LLC
+C00000-CFFFFF     (base 16)		Technology Research, LLC
+				4525 140th Ave North
+				Clearwater  FL  33762
+				US
+
+0C-EF-AF   (hex)		BSX Athletics
+800000-8FFFFF     (base 16)		BSX Athletics
+				2500 E T C Jester Blvd.
+				Houston  TX  77008
+				US
+
+F8-02-78   (hex)		3Shape Holding A/S
+300000-3FFFFF     (base 16)		3Shape Holding A/S
+				Holmens Kanal 7,2
+				Copenhagen K.  Copenhagen  1060
+				DK
+
+F8-02-78   (hex)		Digatron Power Electronics GmbH
+000000-0FFFFF     (base 16)		Digatron Power Electronics GmbH
+				Tempelhofer Str. 12-14
+				Aachen  NRW  52068
+				DE
+
+F8-02-78   (hex)		Electric Objects
+500000-5FFFFF     (base 16)		Electric Objects
+				356 Bowery
+				New York  NY  10021
+				US
+
+A4-4F-29   (hex)		Neotech Systems Pvt. Ltd.
+E00000-EFFFFF     (base 16)		Neotech Systems Pvt. Ltd.
+				B-25, 2nd floor
+				New Delhi  Delhi  110049
+				IN
+
+A4-4F-29   (hex)		HALLIBURTON
+D00000-DFFFFF     (base 16)		HALLIBURTON
+				445 WOODLINE DR
+				SPRING  TX  77386
+				US
+
+3C-39-E7   (hex)		iiM AG
+A00000-AFFFFF     (base 16)		iiM AG
+				Neuer Friedberg 5
+				Suhl  Thuringia  98527
+				DE
+
+3C-39-E7   (hex)		Zone Controls AB
+900000-9FFFFF     (base 16)		Zone Controls AB
+				Verkstadsvägen 6
+				Västerhaninge  Stockholms län  137 37
+				SE
+
+3C-39-E7   (hex)		Sensor to Image GmbH
+700000-7FFFFF     (base 16)		Sensor to Image GmbH
+				Lechtorstrasse 20
+				Schongau  Bavaria  86956
+				DE
+
+0C-EF-AF   (hex)		LUMEL S.A.
+200000-2FFFFF     (base 16)		LUMEL S.A.
+				Ul.Slubicka 1
+				Zielona Gora    65-127
+				PL
+
+10-07-23   (hex)		Ion Professional Solutions
+800000-8FFFFF     (base 16)		Ion Professional Solutions
+				4514 Flower Bridge Ct
+				Humble  Texas  77396
+				US
+
+10-07-23   (hex)		First Chair Acoustics Co., Ltd.
+E00000-EFFFFF     (base 16)		First Chair Acoustics Co., Ltd.
+				No. 53, Lane 17, Yuhe Street
+				Taoyuan City, Taoyuan County    33057
+				TW
+
+10-07-23   (hex)		Fujian Quanzhou Dong Ang Electronics Co., Ltd.
+B00000-BFFFFF     (base 16)		Fujian Quanzhou Dong Ang Electronics Co., Ltd.
+				5th floor of Hengtaixing mansion, Yingbin Road
+				Quanzhou  Fujian  362000
+				CN
+
+10-07-23   (hex)		nanoTech Co., Ltd.
+700000-7FFFFF     (base 16)		nanoTech Co., Ltd.
+				4-2-17 Chuorinka
+				Yamato  Kanagawa  242-0007
+				JP
+
+D0-22-12   (hex)		UAB &quot;SALDA&quot;
+900000-9FFFFF     (base 16)		UAB &quot;SALDA&quot;
+				Ragaines 100
+				Šiauliai  Europe  LT-78109
+				LT
+
+D0-22-12   (hex)		Schleifenbauer Holding BV
+B00000-BFFFFF     (base 16)		Schleifenbauer Holding BV
+				Rietwaard 15
+				Hertogenbosch    5236WC 
+				NL
+
+D0-22-12   (hex)		Shanghai Routech Co., Ltd
+500000-5FFFFF     (base 16)		Shanghai Routech Co., Ltd
+				R.709-(2), B Zone, No.668 Eastern Beijing Rd. Shanghai P.R.C
+				Shanghai  Shanghai  200001
+				CN
+
+D0-22-12   (hex)		Cliptech Industria e Comercio Ltda
+700000-7FFFFF     (base 16)		Cliptech Industria e Comercio Ltda
+				ROD VICE PREF HERMENEGILDO TONOLI, 2285
+				ITUPEVA  SAO PAULO  13295000
+				BR
+
+D0-22-12   (hex)		u::Lux GmbH
+E00000-EFFFFF     (base 16)		u::Lux GmbH
+				Rechtes Salzachufer 42
+				Bergheim  Salzburg  5101
+				AT
+
+74-E1-4A   (hex)		Knog Pty Ltd
+D00000-DFFFFF     (base 16)		Knog Pty Ltd
+				453 Church St
+				Richmond  VIC  3128
+				AU
+
+74-E1-4A   (hex)		Loctek Visual Technology Corp.
+B00000-BFFFFF     (base 16)		Loctek Visual Technology Corp.
+				Floor 20 Aux Building No.757 Rili Middle Road Yinzhou District Ningbo China
+				Ningbo  zhejiang  315199
+				CN
+
+E8-18-63   (hex)		Acopian Technical Company
+E00000-EFFFFF     (base 16)		Acopian Technical Company
+				131 Loomis Street
+				Easton  PA  18045
+				US
+
+B8-D8-12   (hex)		Docobo Limited
+B00000-BFFFFF     (base 16)		Docobo Limited
+				The Old Granary, 21 High Street
+				Leatherhead  Surrey  KT23 4AA
+				GB
+
+E4-95-6E   (hex)		iConservo Inc
+B00000-BFFFFF     (base 16)		iConservo Inc
+				35 Tesla
+				Irvine  CA  92618
+				
+
+E4-95-6E   (hex)		Red Point Positioning, Corp.
+A00000-AFFFFF     (base 16)		Red Point Positioning, Corp.
+				20 Webster Street, Suite 411
+				Brookline  MASSACHUSETTS  02446
+				US
+
+74-E1-4A   (hex)		UTU Oy
+500000-5FFFFF     (base 16)		UTU Oy
+				Ahjontie 1
+				Ulvila  Finland  28400
+				FI
+
+E4-95-6E   (hex)		ELAN SYSTEMS
+500000-5FFFFF     (base 16)		ELAN SYSTEMS
+				10 IHASZ STR
+				BUDAPEST    1105
+				HU
+
+E4-95-6E   (hex)		Shenzhen Arronna Telecom Co.,Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Arronna Telecom Co.,Ltd
+				4F, Block 1, No 17-2, Pingxi South Rd
+				Shenzhen  Guangdong  518117
+				CN
+
+B0-1F-81   (hex)		CIDE Interactive
+900000-9FFFFF     (base 16)		CIDE Interactive
+				Viladecans Business Pk, Edificio Brasil
+				Viladecans  Barcelona  08840
+				ES
+
+58-FC-DB   (hex)		Timex Group USA Inc
+600000-6FFFFF     (base 16)		Timex Group USA Inc
+				555 Christian Rd
+				Middlebury  CT  06762
+				US
+
+BC-66-41   (hex)		ARGUS-SPECTRUM
+400000-4FFFFF     (base 16)		ARGUS-SPECTRUM
+				Serdobolskaya str.,65
+				St-Petersburg    197342
+				RU
+
+B0-1F-81   (hex)		Steffens Systems GmbH
+A00000-AFFFFF     (base 16)		Steffens Systems GmbH
+				Mathias-Brüggenstr. 83
+				Cologne  NRW  50829
+				DE
+
+F4-0E-11   (hex)		Zeepro Inc.
+800000-8FFFFF     (base 16)		Zeepro Inc.
+				151 10th Street
+				San Francisco  California  94103
+				US
+
+F4-0E-11   (hex)		Alpha Design Technologies Pvt Ltd
+600000-6FFFFF     (base 16)		Alpha Design Technologies Pvt Ltd
+				#9, Service Road, HAL II Stage
+				Bangalore  Karnataka  560008
+				IN
+
+14-1F-BA   (hex)		AJIS(DALIAN)co.,LTD
+D00000-DFFFFF     (base 16)		AJIS(DALIAN)co.,LTD
+				Room 202B
+				Dalian  Liaoning  116023
+				CN
+
+F4-0E-11   (hex)		BRADAR INDUSTRIA SA
+B00000-BFFFFF     (base 16)		BRADAR INDUSTRIA SA
+				AVENIDA SHISHIMA HIFUMI,2911
+				SÃO JOSE DOS CAMPOS  SÃO PAULO  12244-000
+				BR
+
+BC-34-00   (hex)		MATICA TECHNOLOGIES AG
+800000-8FFFFF     (base 16)		MATICA TECHNOLOGIES AG
+				52 TECKSTRASSE
+				ESSLINGEN AM NECKAR  BADEN WUERTTENBERG  73734
+				DE
+
+BC-34-00   (hex)		Shenzhen PHilorise Technical Limited
+900000-9FFFFF     (base 16)		Shenzhen PHilorise Technical Limited
+				Floor 4, Building 2, TingWeiGongYeQu,
+				ShenZhen  GuangDong  518010
+				CN
+
+14-1F-BA   (hex)		Thales Communications & Security SAS
+600000-6FFFFF     (base 16)		Thales Communications & Security SAS
+				BP 57
+				Bretigny-sur-Orge CEDEX  France  F 91229
+				FR
+
+BC-34-00   (hex)		Hangzhou Linker Digital Technology Co., Ltd
+D00000-DFFFFF     (base 16)		Hangzhou Linker Digital Technology Co., Ltd
+				4-5F, C Building, Jinrun Tech-Garden, 399# Qiuyi Road, Binjiang District
+				Hangzhou  ZheJiang  310052
+				CN
+
+BC-34-00   (hex)		LLD Technology Ltd.
+E00000-EFFFFF     (base 16)		LLD Technology Ltd.
+				4F., No. 220, Sec. 1, Zhongshan Rd.,
+				New Taipei City,  Taiwan  234
+				TW
+
+BC-34-00   (hex)		FARO TECHNOLOGIES, INC.
+B00000-BFFFFF     (base 16)		FARO TECHNOLOGIES, INC.
+				125 Technology Park
+				Lake Mary  FL  32746
+				US
+
+7C-70-BC   (hex)		mk-messtechnik GmbH
+D00000-DFFFFF     (base 16)		mk-messtechnik GmbH
+				Zeppelinstr. 1
+				Notzingen  D  73274
+				DE
+
+7C-70-BC   (hex)		Bidgely
+600000-6FFFFF     (base 16)		Bidgely
+				298  S Sunnyvale Ave
+				Sunnyvale  CA  94086
+				US
+
+14-1F-BA   (hex)		Inttelix Brasil Tecnologia e Sistemas Ltda
+500000-5FFFFF     (base 16)		Inttelix Brasil Tecnologia e Sistemas Ltda
+				 Rua Desembargador Jorge Fontana, 112B, Belvedere
+				Belo Horizonte  Minas Gerais  30320-670
+				BR
+
+14-1F-BA   (hex)		Shenzhen Mining Technology Co.,Ltd.
+000000-0FFFFF     (base 16)		Shenzhen Mining Technology Co.,Ltd.
+				2017#Baoan Internet Industry Base,Langman Gangwan
+				Shenzhen  Guangdong  518000
+				CN
+
+BC-34-00   (hex)		LifeSmart
+200000-2FFFFF     (base 16)		LifeSmart
+				1911, Huarong Times Plaza
+				Hangzhou  Zhejiang  310052
+				CN
+
+D0-76-50   (hex)		Electro-Motive Diesel
+C00000-CFFFFF     (base 16)		Electro-Motive Diesel
+				9301 W. 55th Street
+				La Grange  IL  60525
+				US
+
+BC-34-00   (hex)		NDSL, Inc.
+500000-5FFFFF     (base 16)		NDSL, Inc.
+				4112 Blue Ridge Road
+				Raleigh  North Carolina  27612
+				US
+
+A4-3B-FA   (hex)		BOI Solutions
+500000-5FFFFF     (base 16)		BOI Solutions
+				955 Mound Rd
+				Miamisburg  Ohio  45342
+				US
+
+D0-76-50   (hex)		Happo Solutions Oy
+200000-2FFFFF     (base 16)		Happo Solutions Oy
+				Graanintie 5
+				MIKKELI    50190
+				FI
+
+74-19-F8   (hex)		Volacomm Co., Ltd
+E00000-EFFFFF     (base 16)		Volacomm Co., Ltd
+				15F-6., No.7, Sec.3, New Taipei Blvd., Xinzhuang Dist., New Taipei City 242., Taiwan (R.O.C)
+				Xinzhuang Dist.  New Taipei City  242
+				TW
+
+74-19-F8   (hex)		Baudisch Electronic GmbH
+600000-6FFFFF     (base 16)		Baudisch Electronic GmbH
+				Im Gewerbegebiet 7-9
+				Wäschenbeuren  Baden-Württemberg  73116
+				DE
+
+D0-76-50   (hex)		TAPKO Technologies GmbH
+300000-3FFFFF     (base 16)		TAPKO Technologies GmbH
+				Im Gewerbepark A15
+				Regensburg  Bayern  93059
+				DE
+
+74-19-F8   (hex)		Marmitek
+000000-0FFFFF     (base 16)		Marmitek
+				Postbus 4257
+				Eindhoven  NB  5604 EG
+				NL
+
+40-11-75   (hex)		ShenZhen LanShuo Communication Equipment CO.,LTD.
+600000-6FFFFF     (base 16)		ShenZhen LanShuo Communication Equipment CO.,LTD.
+				NO.12,YUMIN ROAD,SHAJING TOWN,BAO’AN DISTRICT
+				SHENZHEN    518104
+				CN
+
+10-DC-B6   (hex)		BBPOS International Limited
+C00000-CFFFFF     (base 16)		BBPOS International Limited
+				Suite 1602, Tower 2, Nina Tower, 8 Yeung Uk Road, Tsuen Wan, NT
+				Hong Kong  China  00000
+				HK
+
+10-DC-B6   (hex)		Eyeball Fintech Company
+B00000-BFFFFF     (base 16)		Eyeball Fintech Company
+				Rm. 545, 5F., No. 19-11, Sanchong Rd., Nangang Dist.
+				Taipei City  Taiwan  11501
+				TW
+
+10-DC-B6   (hex)		HANACNS 
+300000-3FFFFF     (base 16)		HANACNS 
+				42-11, Taejanggongdan-gil, Wonju-si
+				Gangwon-do    26311
+				KR
+
+10-DC-B6   (hex)		LeoLabs
+D00000-DFFFFF     (base 16)		LeoLabs
+				Jankowicka 51
+				Rybnik    44-218
+				PL
+
+10-DC-B6   (hex)		Fuzhou Rockchip Electronics Co.,Ltd
+900000-9FFFFF     (base 16)		Fuzhou Rockchip Electronics Co.,Ltd
+				No. 18 Building, A District, No.89,software Boulevard Fuzhou,Fujian,PRC
+				Fuzhou  FuJian  350003
+				CN
+
+10-DC-B6   (hex)		Milesight Taiwan
+500000-5FFFFF     (base 16)		Milesight Taiwan
+				10F., No. 87, Sec. 4, Chongxin Rd
+				Sanchong Dist  New Taipei City  24161
+				TW
+
+54-A4-93   (hex)		BJ COTYTECH TECHNOLOGY CO.,LTD
+C00000-CFFFFF     (base 16)		BJ COTYTECH TECHNOLOGY CO.,LTD
+				Rm2302,Block B,Haojing Building,Zhichun Road,Haidian District
+				BeiJing  BeiJing  100086
+				CN
+
+54-A4-93   (hex)		Hannto Technology Co., Ltd
+600000-6FFFFF     (base 16)		Hannto Technology Co., Ltd
+				Rm 704,No.1,Lane 88,Shengrong Road, Free Trade Pilot Area,
+				Shanghai  Shanghai  200120
+				CN
+
+54-A4-93   (hex)		genua GmbH
+200000-2FFFFF     (base 16)		genua GmbH
+				Domagkstr. 7
+				Kirchheim    85551
+				DE
+
+04-D1-6E   (hex)		Metra Electronics
+A00000-AFFFFF     (base 16)		Metra Electronics
+				460 Walker Street
+				Holly Hill  FL  32117
+				US
+
+04-D1-6E   (hex)		ETL Elektrotechnik Lauter GmbH
+600000-6FFFFF     (base 16)		ETL Elektrotechnik Lauter GmbH
+				Konrad-Zuse-Str. 2
+				Mauerstetten  Bavaria  87665
+				DE
+
+04-D1-6E   (hex)		 Beijing Huaxia Qixin Technology Co., Ltd.
+300000-3FFFFF     (base 16)		 Beijing Huaxia Qixin Technology Co., Ltd.
+				 7th Floor, Building 1, No. 18, Yangfangdian Road, Haidian District, Beijing 705 
+				Beijing  Beijing  100038
+				CN
+
+04-D1-6E   (hex)		National Radio & Telecommunication Corporation - NRTC
+B00000-BFFFFF     (base 16)		National Radio & Telecommunication Corporation - NRTC
+				House 420, Street 13, Chaklala Scheme 3
+				Rawalpindi  Islamabad  46000
+				PK
+
+04-D1-6E   (hex)		INTRIPLE, a.s.
+000000-0FFFFF     (base 16)		INTRIPLE, a.s.
+				K Zelenci 2957/5
+				Praha 9 - Horni Pocernice    193 00
+				CZ
+
+44-03-77   (hex)		SHENZHEN UT-KING TECHNOLOGY CO.,LTD
+900000-9FFFFF     (base 16)		SHENZHEN UT-KING TECHNOLOGY CO.,LTD
+				504, Building B ,Guangming Industrial Park, Zhonghua  Road, Minzhi, Longhua District
+				SHENZHEN  GUANGDONG  518131
+				CN
+
+44-03-77   (hex)		Gemmy Electronics (Shenzhen) Co, Ltd
+800000-8FFFFF     (base 16)		Gemmy Electronics (Shenzhen) Co, Ltd
+				Datianyang Ind. Estate, Dongfang Road, Dangfang Road, Songgang Town, Bao'an District
+				Shenzhen  Guangdong  518105
+				CN
+
+44-03-77   (hex)		BIG Climatic Manufacture, Co. LTD, Zhongshan Branch
+C00000-CFFFFF     (base 16)		BIG Climatic Manufacture, Co. LTD, Zhongshan Branch
+				Nantou Dadao, 20
+				Zhongshan  Guangdong  528427
+				CN
+
+50-62-55   (hex)		Shenzhen Sinway South Technology Co., Ltd
+600000-6FFFFF     (base 16)		Shenzhen Sinway South Technology Co., Ltd
+				No.7, Guantian Road, Guanlan Street, Longhua District
+				Shenzhen  Guangdong  518110
+				CN
+
+50-62-55   (hex)		CHENGDU COVE TECHNOLOGY CO.,LTD
+B00000-BFFFFF     (base 16)		CHENGDU COVE TECHNOLOGY CO.,LTD
+				No.1-3, Floor 4, Building 2,No.1366 Middle Section of Tianfu Ave
+				Chengdu   SICHUAN  610000
+				CN
+
+50-62-55   (hex)		XSLAB Inc.
+400000-4FFFFF     (base 16)		XSLAB Inc.
+				#1103, 11, DIGITAL-RO 33-GIL, GURO-GU
+				SEOUL    08380
+				KR
+
+50-62-55   (hex)		ShenZhen ChuangMo Electronics Technology Co., Ltd
+200000-2FFFFF     (base 16)		ShenZhen ChuangMo Electronics Technology Co., Ltd
+				West Floor 4,building A,Bafangyuan high and new industrial zone,No.108 Zhoushi Rd.,Shiyan sub-district,Baoan, 
+				Shenzhen  Guangdong  518108
+				CN
+
+64-31-39   (hex)		SHENZHEN EMEET INTELLIGENT TECHNOLOGY CO., LTD.
+000000-0FFFFF     (base 16)		SHENZHEN EMEET INTELLIGENT TECHNOLOGY CO., LTD.
+				Unit 2C,Building A6,Guangming Science Park,Guangming Road 3009
+				Shenzhen  Guangdong  518000
+				CN
+
+64-31-39   (hex)		ZHEJIANG MOORGEN INTELLIGENT TECHNOLOGY CO.,LTD
+D00000-DFFFFF     (base 16)		ZHEJIANG MOORGEN INTELLIGENT TECHNOLOGY CO.,LTD
+				5 / F, Building A, qinghua pioneer park?No. 318 Tianhu Road, Camel Street, Zhenhai District
+				Ningbo    315202
+				CN
+
+64-31-39   (hex)		ATG UV Technology
+E00000-EFFFFF     (base 16)		ATG UV Technology
+				Genesis House
+				Wigan    WN5 8AA
+				GB
+
+C4-95-4D   (hex)		Marble Automation
+500000-5FFFFF     (base 16)		Marble Automation
+				Keteldiep 6
+				Urk    8321 MH
+				NL
+
+00-69-67   (hex)		Shenzhen Xiao Bi En Culture Education Technology Co.,Ltd.
+500000-5FFFFF     (base 16)		Shenzhen Xiao Bi En Culture Education Technology Co.,Ltd.
+				4GH Unit,Block D,Central Avenue,Intersection of Xixiang Avenue and Baoyuan Road,Labor Community,Xixiang Street,Baoan District
+				Shenzhen  China  518102
+				CN
+
+00-69-67   (hex)		Annapurna labs
+000000-0FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+00-69-67   (hex)		Suzhou Radiant Lighting Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Suzhou Radiant Lighting Technology Co.,Ltd
+				Jiatai Road West, Shuanglong Industrial Park,Fenghuang Town
+				Zhangjiagang  Jiangsu  215600
+				CN
+
+A0-22-4E   (hex)		Zhuhai Cheer Technology Co., LTD.
+500000-5FFFFF     (base 16)		Zhuhai Cheer Technology Co., LTD.
+				No.8 Hongwan Road, Hongwan Industry Zone, Xiangzhou District
+				Zhuhai  Guangdong  519060
+				CN
+
+A0-22-4E   (hex)		Digifocus Technology Inc.
+D00000-DFFFFF     (base 16)		Digifocus Technology Inc.
+				6F, No.89, Xinhu 1st Rd., Neihu Dist.
+				Taipei City     11494
+				TW
+
+A0-22-4E   (hex)		Delta Tau Data Systems, Inc.
+900000-9FFFFF     (base 16)		Delta Tau Data Systems, Inc.
+				21314 Lassen St.
+				Chatsworth  CA  91311
+				US
+
+A0-22-4E   (hex)		Closed Joint-Stock Company NORSI-TRANS
+200000-2FFFFF     (base 16)		Closed Joint-Stock Company NORSI-TRANS
+				B.Novodmitrovskaya Street, house 12, building 15
+				Moscow    127015
+				RU
+
+A0-22-4E   (hex)		All Inspire Health Inc.
+B00000-BFFFFF     (base 16)		All Inspire Health Inc.
+				19 Morris Avenue, Building 128, Cumberland Gate
+				Brooklyn  NY  11205
+				US
+
+20-0A-0D   (hex)		Welzek (Beijing) Technologies  Co, Ltd
+900000-9FFFFF     (base 16)		Welzek (Beijing) Technologies  Co, Ltd
+				No 201,Building 12, Chaolai Science Park, No.36 Chuangyuan RoadLaiguangying, Chaoyang Disctrict
+				Beijing  Beijing  100012
+				CN
+
+20-0A-0D   (hex)		Virtium
+400000-4FFFFF     (base 16)		Virtium
+				30052 Tomas
+				Racho Santa MArgarita  CA  92688
+				US
+
+20-0A-0D   (hex)		halstrup-walcher GmbH
+000000-0FFFFF     (base 16)		halstrup-walcher GmbH
+				Stegener Straße 10
+				Kirchzarten    79199
+				DE
+
+40-2C-76   (hex)		gridX GmbH
+C00000-CFFFFF     (base 16)		gridX GmbH
+				Oppenhoffallee 143
+				Aachen    52066
+				DE
+
+50-DE-19   (hex)		OCEANCCTV LTD
+600000-6FFFFF     (base 16)		OCEANCCTV LTD
+				4F., No. 1, Ln. 297, Xinyi Rd.,Banqiao Dist.,
+				New Taipei City    220
+				TW
+
+40-2C-76   (hex)		LS Energy Solutions
+E00000-EFFFFF     (base 16)		LS Energy Solutions
+				9201 Forsyth Park Drive
+				Charlotte  NC  28273
+				US
+
+50-DE-19   (hex)		IVATIV, INC
+800000-8FFFFF     (base 16)		IVATIV, INC
+				6141 RUNNING SPRINGS RD
+				SAN JOSE  CA  95135
+				US
+
+3C-FA-D3   (hex)		Nox Medical
+600000-6FFFFF     (base 16)		Nox Medical
+				Katrinartun 2
+				Reykjavik    105
+				IS
+
+B0-B3-53   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
+600000-6FFFFF     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
+				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
+				Hangzhou    310052
+				CN
+
+B0-B3-53   (hex)		Sprocomm Technologies CO.,LTD.
+100000-1FFFFF     (base 16)		Sprocomm Technologies CO.,LTD.
+				5D F1.6 Block,Tianfa Building,Tianan Chegongmiao Industrial park,Futian Dist
+				shenzhen  guangdong  518000
+				CN
+
+3C-FA-D3   (hex)		Mirico
+E00000-EFFFFF     (base 16)		Mirico
+				30 DongSan Rd 9th floor Mirico
+				Ansan  Gyunggi  15434
+				KR
+
+B0-B3-53   (hex)		Innotas Elektronik GmbH
+400000-4FFFFF     (base 16)		Innotas Elektronik GmbH
+				Rathenaustr. 18a
+				Zittau    D-02763
+				DE
+
+B0-B3-53   (hex)		VOXISCOM
+800000-8FFFFF     (base 16)		VOXISCOM
+				Rue Jules Ferry
+				PORNIC    44210
+				FR
+
+90-E2-FC   (hex)		Power Engineering & Manufacturing, Inc.
+A00000-AFFFFF     (base 16)		Power Engineering & Manufacturing, Inc.
+				1463 94th Lane NE
+				Blaine  MN  55449
+				US
+
+90-E2-FC   (hex)		Sindoh Techno Co., Ltd.
+600000-6FFFFF     (base 16)		Sindoh Techno Co., Ltd.
+				Sindoh Bldg., 6, Hyoryeong-ro 61-gil, Seocho-gu
+				Seoul    06643
+				KR
+
+90-E2-FC   (hex)		Shenzhen Hisource Technology Development CO.,Ltd.
+300000-3FFFFF     (base 16)		Shenzhen Hisource Technology Development CO.,Ltd.
+				Dalang
+				Shenzhen  Guangdong  518109
+				CN
+
+90-E2-FC   (hex)		TOTALONE TECHNOLOGY CO., LTD.
+500000-5FFFFF     (base 16)		TOTALONE TECHNOLOGY CO., LTD.
+				3F.-1, NO.18, LN. 48, XingShan RD.,
+				Taipei  Neihu dist  11469
+				TW
+
+90-E2-FC   (hex)		Yite technology
+100000-1FFFFF     (base 16)		Yite technology
+				No. 56, Xiaobei Rd., North Dist
+				tainan    70448 
+				TW
+
+90-E2-FC   (hex)		DevCom spol. s r.o.
+E00000-EFFFFF     (base 16)		DevCom spol. s r.o.
+				Božanovská 884
+				Praha  Select a State  19300
+				CZ
+
+14-AE-85   (hex)		IO Industries Inc.
+C00000-CFFFFF     (base 16)		IO Industries Inc.
+				15940 Robin's Hill Rd
+				London  Ontario  N5V 0A4
+				CA
+
+90-E2-FC   (hex)		Fair Winds Digital srl
+700000-7FFFFF     (base 16)		Fair Winds Digital srl
+				Via Italo Svevo 85
+				Rome  Italy  00137
+				IT
+
+14-AE-85   (hex)		AZ-TECHNOLOGY SDN BHD
+500000-5FFFFF     (base 16)		AZ-TECHNOLOGY SDN BHD
+				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
+				PETALING JAYA  SELANGOR  47301
+				MY
+
+14-AE-85   (hex)		CENTERVUE SPA
+400000-4FFFFF     (base 16)		CENTERVUE SPA
+				VIA SAN MARCO 9/H
+				PADOVA  PADOVA  35129
+				IT
+
+14-AE-85   (hex)		TMG TE GmbH
+600000-6FFFFF     (base 16)		TMG TE GmbH
+				Zur Gießerei 10
+				Karlsruhe    776227
+				DE
+
+14-AE-85   (hex)		Sercomm Corporation.
+E00000-EFFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+14-AE-85   (hex)		NTC SOFT
+B00000-BFFFFF     (base 16)		NTC SOFT
+				B-805, Gwangmyeong SK Techno park, 60, Haan-ro,
+				Gwangmyeong-si  Gyeonggi-do  14322
+				KR
+
+94-CC-04   (hex)		Hangzhou Yongkong Technology Co., Ltd.
+000000-0FFFFF     (base 16)		Hangzhou Yongkong Technology Co., Ltd.
+				Room 503, Building 12, Lefu Zhihui Garden, 28 Xiangyuan Road, Gongshu Distric
+				Hangzhou  Zhejiang  310000
+				CN
+
+64-62-66   (hex)		Jiangsu Aisida Electronic Co.,Ltd
+C00000-CFFFFF     (base 16)		Jiangsu Aisida Electronic Co.,Ltd
+				Aisida Industrial Park,Lanling Road,Danyang Development Zone
+				DanYang  JiangSu  212300
+				CN
+
+94-CC-04   (hex)		Gowing Business And Contracting Wenzhou Co., LTD
+700000-7FFFFF     (base 16)		Gowing Business And Contracting Wenzhou Co., LTD
+				Room 101, No.4 Liming Industrial District, Lucheng, Wenzhou, China
+				Wenzhou    325000
+				CN
+
+94-CC-04   (hex)		CircuitWerkes, Inc.
+800000-8FFFFF     (base 16)		CircuitWerkes, Inc.
+				2805 NW 6th St
+				Gainesville  FL  32609
+				US
+
+14-AE-85   (hex)		IFLYTEK CO.,LTD.
+300000-3FFFFF     (base 16)		IFLYTEK CO.,LTD.
+				National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
+				Hefei  An hui  230088
+				CN
+
+94-05-BB   (hex)		Shenzhen Baolijie Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Shenzhen Baolijie Technology Co., Ltd.
+				D2,No.47,Shasan Road,Sha jing Street,Baoan District
+				Shenzhen  Kowloon  518104
+				CN
+
+94-CC-04   (hex)		ProConnections, Inc.
+400000-4FFFFF     (base 16)		ProConnections, Inc.
+				30 Massachusetts, Ave, Suite 301
+				North Andover  MA  01845
+				US
+
+94-05-BB   (hex)		Dongguan Kingtron Electronics Tech Co., Ltd
+100000-1FFFFF     (base 16)		Dongguan Kingtron Electronics Tech Co., Ltd
+				No.3 Fumin North Rd,Shu'an Industrial Park, Humen Town
+				Dongguan  Guangdong China  523929
+				CN
+
+94-05-BB   (hex)		Sunthink S&T Development Co.,Ltd
+D00000-DFFFFF     (base 16)		Sunthink S&T Development Co.,Ltd
+				A3-f1, xinghezhong Technology Green Valley, No.14, luolei Industrial Avenue, Shiyan street, Bao'an District
+				Shenzhen    518100
+				CN
+
+DC-44-27   (hex)		Tesla,Inc.
+100000-1FFFFF     (base 16)		Tesla,Inc.
+				3500 Deer Creek Road
+				Palo Alto  CA  94304
+				US
+
+F4-90-CB   (hex)		ICE Gateway GmbH
+200000-2FFFFF     (base 16)		ICE Gateway GmbH
+				Am Studio 2
+				Berlin  Berlin  12489
+				DE
+
+C0-9B-F4   (hex)		SHENZHEN WINS ELECTRONIC TECHNOLOGY CO., LTD
+800000-8FFFFF     (base 16)		SHENZHEN WINS ELECTRONIC TECHNOLOGY CO., LTD
+				Baoan Xixiang Xinbaoji Industry Park,Building A1-2
+				Shenzhen  Guangdong  518026
+				CN
+
+F4-90-CB   (hex)		DELEM BV
+100000-1FFFFF     (base 16)		DELEM BV
+				LUCHTHAVEN WEG 42
+				5657 EB EINDHOVEN    
+				NL
+
+C0-9B-F4   (hex)		Hitachi High-Tech Materials Corporation
+200000-2FFFFF     (base 16)		Hitachi High-Tech Materials Corporation
+				Toranomon Hills Business Tower, 1-17-1 Toranomon, Minato-ku
+				Tokyo    105-6413
+				JP
+
+E8-B4-70   (hex)		UNICACCES GROUPE
+E00000-EFFFFF     (base 16)		UNICACCES GROUPE
+				24 Chemin des Vieilles Vignes
+				La tour-d'aigues  Vaucluse  84240
+				FR
+
+E8-B4-70   (hex)		Digifocus Technology Inc.
+B00000-BFFFFF     (base 16)		Digifocus Technology Inc.
+				6F, No.89, Xinhu 1st Rd., Neihu Dist.
+				Taipei City     11494
+				TW
+
+E8-B4-70   (hex)		Autocom Diagnostic Partner AB
+100000-1FFFFF     (base 16)		Autocom Diagnostic Partner AB
+				Grafitvägen 23B
+				TROLLHÄTTAN    46138
+				SE
+
+94-FB-A7   (hex)		Silver-I Co.,LTD.
+800000-8FFFFF     (base 16)		Silver-I Co.,LTD.
+				2-14-4 Shinyokohama,kohoku-ku
+				Yokohama  Kanagawa  222-0033
+				JP
+
+38-F7-CD   (hex)		NORDI TELEKOMMUNIKATSIOONI OÜ
+400000-4FFFFF     (base 16)		NORDI TELEKOMMUNIKATSIOONI OÜ
+				Valukoja 8
+				Tallinn city  Estonian Republic  11415
+				EE
+
+38-F7-CD   (hex)		Shanghai qinzhuo Electronic Co., Ltd.
+500000-5FFFFF     (base 16)		Shanghai qinzhuo Electronic Co., Ltd.
+				No. W, floor 1, building 2, No. 258, Minfeng Road, Pudong New Area
+				Shanghai  Shanghai  201209
+				CN
+
+38-F7-CD   (hex)		RFbeam Microwave GmbH
+900000-9FFFFF     (base 16)		RFbeam Microwave GmbH
+				Schuppisstrasse 7
+				St. Gallen    9016
+				CH
+
+38-F7-CD   (hex)		Shenzhen MADIGI Electronic Technology Co., Ltd
+C00000-CFFFFF     (base 16)		Shenzhen MADIGI Electronic Technology Co., Ltd
+				Room 111,1A Floor,Kanghesheng Blgg,No.1.Chuangsheng Rd.Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+70-69-79   (hex)		Faurecia Clarion Electronics (Dongguan) Co., Ltd
+900000-9FFFFF     (base 16)		Faurecia Clarion Electronics (Dongguan) Co., Ltd
+				South of Dongkeng Avenue, Dongkeng Town, Dongguan City, Guangdong
+				DONGGUAN  GUANGDONG  523455
+				CN
+
+38-F7-CD   (hex)		BlastWave Inc.
+800000-8FFFFF     (base 16)		BlastWave Inc.
+				1987 Leghorn Street, Suite 100
+				Moutain View  CA  94043
+				US
+
+70-69-79   (hex)		Intelitech SIA
+700000-7FFFFF     (base 16)		Intelitech SIA
+				2-22 Kruzes str.
+				Riga  Other  LV-1046
+				LV
+
+70-69-79   (hex)		Beijing Security Union Information Technology Co.,Ltd
+600000-6FFFFF     (base 16)		Beijing Security Union Information Technology Co.,Ltd
+				Beijing Security Union Information Technology Co.,Ltd 
+				Beijing  Beijing  100085
+				CN
+
+CC-C2-61   (hex)		Dspread Technology (Beijing) Inc.
+D00000-DFFFFF     (base 16)		Dspread Technology (Beijing) Inc.
+				Jingxin Building, 2045 Suite , Chaoyang District
+				Beijing    100027
+				CN
+
+CC-C2-61   (hex)		Viper Design, LLC
+500000-5FFFFF     (base 16)		Viper Design, LLC
+				125 Glancy St.
+				Goodlettsville  TN  37072
+				US
+
+CC-C2-61   (hex)		Ebiologic Technology Co., Ltd.
+000000-0FFFFF     (base 16)		Ebiologic Technology Co., Ltd.
+				9F., No.33, Ln. 3, Sec. 1, Zhongzheng E. Rd., Tamsui Dist., New Taipei City 251, Taiwan (R.O.C.)
+				New Taipei City    251
+				TW
+
+CC-C2-61   (hex)		BYTERG LLC
+900000-9FFFFF     (base 16)		BYTERG LLC
+				1st Nagatinsky proezd 10 build.1
+				Moscow  Moscow  115230
+				RU
+
+F0-D7-AF   (hex)		ADAM Audio GmbH
+400000-4FFFFF     (base 16)		ADAM Audio GmbH
+				Rudower Chaussee 50
+				Berlin    12489
+				DE
+
+B0-B3-53   (hex)		AD HOC DEVELOPMENTS S.L
+300000-3FFFFF     (base 16)		AD HOC DEVELOPMENTS S.L
+				C/ Crisol 3, despacho 17
+				Rivas-Vaciamadrid  Madrid  28522
+				ES
+
+F0-D7-AF   (hex)		Anord Mardix (USA) Inc.
+600000-6FFFFF     (base 16)		Anord Mardix (USA) Inc.
+				3930 Technology Court
+				Sandston  VA  23150
+				US
+
+F0-D7-AF   (hex)		SHEN ZHEN MICHIP TECHNOLOGIES CO.,LTD.
+800000-8FFFFF     (base 16)		SHEN ZHEN MICHIP TECHNOLOGIES CO.,LTD.
+				Fuxingda Indestrial park.Floor4?Building4
+				SHEN ZHEN  GUANG DONG  518126
+				CN
+
+94-FB-A7   (hex)		Rosenberger Technologies Co.,Ltd.
+D00000-DFFFFF     (base 16)		Rosenberger Technologies Co.,Ltd.
+				NO.6, ShenAn Rd, Dianshanhu Town
+				Kunshan City  Jiangsu Province  215345
+				CN
+
+30-49-50   (hex)		Guangzhou Lian-med Technology Co.,Ltd.
+000000-0FFFFF     (base 16)		Guangzhou Lian-med Technology Co.,Ltd.
+				Room 501, Building G1,No. 31 Kefeng Road, Huangpu district
+				Guangzhou    510670
+				CN
+
+30-49-50   (hex)		IoTmaxx GmbH
+E00000-EFFFFF     (base 16)		IoTmaxx GmbH
+				Bultstrasse 5a
+				Hannover    30159
+				DE
+
+D0-14-11   (hex)		Ahnnet
+600000-6FFFFF     (base 16)		Ahnnet
+				B-313, Samhwan HIPEX, 230, Pangyoyeok-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13493
+				KR
+
+1C-88-79   (hex)		ANDRA Sp. z o. o.
+100000-1FFFFF     (base 16)		ANDRA Sp. z o. o.
+				Pryzmaty 6/8
+				Warszawa    02-226
+				PL
+
+D0-14-11   (hex)		Guangdong Shiqi Manufacture Co., Ltd.
+D00000-DFFFFF     (base 16)		Guangdong Shiqi Manufacture Co., Ltd.
+				No. D10~11, Lunjiao intensive industrial Zone,  Licun  Village committee, Lunjiao street office, Shunde District
+				Foshan  Guangdong  528300
+				CN
+
+5C-85-7E   (hex)		Express LUCK Industrial Ltd.
+900000-9FFFFF     (base 16)		Express LUCK Industrial Ltd.
+				No. 88, Baotongnan Road, Xikeng, Yuanshan Street, Longgang District
+				Shenzhen  Guangdong  518100
+				CN
+
+5C-85-7E   (hex)		Guoyi Liangzi (Hefei) Technology Co., Ltd(CIQTEK)
+E00000-EFFFFF     (base 16)		Guoyi Liangzi (Hefei) Technology Co., Ltd(CIQTEK)
+				1-4th Floor, Building No.E2, Chuangxin Industrial Park, No.2800, Chuangxin Road Gaoxin District
+				Hefei   Anhui  Hefei 
+				CN
+
+F4-69-D5   (hex)		Nantong ZYDZ Electronic.,Co.Ltd
+D00000-DFFFFF     (base 16)		Nantong ZYDZ Electronic.,Co.Ltd
+				# F, High-Tech business Incubator, No.86 East Waihuan Road,
+				Nantong  Jiangsu  226300
+				CN
+
+4C-93-A6   (hex)		Hanwang Technology Co.,Ltd
+A00000-AFFFFF     (base 16)		Hanwang Technology Co.,Ltd
+				HANVON TOWER, BUILDING NO.5, ZHONGGUANCUN SOFTWARE PARK, HAIDIAN DISTRICT, BEIJING, CHINA  100193 
+				BEIJING  BEIJING  100193 
+				CN
+
+F4-69-D5   (hex)		Stype CS d.o.o.
+400000-4FFFFF     (base 16)		Stype CS d.o.o.
+				Velikopoljska 32
+				Zagreb    10010
+				HR
+
+28-B7-7C   (hex)		AnyLink LLC
+C00000-CFFFFF     (base 16)		AnyLink LLC
+				100 N Washington St. Floor 6
+				Boston  MA  02114
+				US
+
+28-B7-7C   (hex)		Shanghai Taiji Software Co.,Limited
+600000-6FFFFF     (base 16)		Shanghai Taiji Software Co.,Limited
+				Room J1224, No. 6, Lane 129, Huajiang Road, Jiading District
+				Shanghai  Shanghai  201800
+				CN
+
+C0-61-9A   (hex)		LYAND ACOUSTIC TECHNOLOGY CO.,LTD.
+300000-3FFFFF     (base 16)		LYAND ACOUSTIC TECHNOLOGY CO.,LTD.
+				No. 73 JinFu Road XiaoJinKou
+				Huizhou city   GuangDong  516023
+				CN
+
+28-B7-7C   (hex)		Enedo Finland Oy
+D00000-DFFFFF     (base 16)		Enedo Finland Oy
+				Martinkyläntie 43
+				Vantaa    01720
+				FI
+
+C0-61-9A   (hex)		KidKraft
+100000-1FFFFF     (base 16)		KidKraft
+				4630 Olin Rd
+				Dallas  TX  75244
+				US
+
+C0-61-9A   (hex)		Zhejiang Haikang Science And Technology Co.,Ltd
+E00000-EFFFFF     (base 16)		Zhejiang Haikang Science And Technology Co.,Ltd
+				No.797 Binkang Rd, Binjiang District
+				Hangzhou    310053
+				CN
+
+C0-61-9A   (hex)		Paragon Robotics LLC
+000000-0FFFFF     (base 16)		Paragon Robotics LLC
+				5386 Majestic Pkwy Ste 2
+				Bedford Heights  OH  44146
+				US
+
+C0-61-9A   (hex)		JAM-Labs Corp
+C00000-CFFFFF     (base 16)		JAM-Labs Corp
+				4109 Clipper Ct
+				Fremont  CA  94538
+				US
+
+98-FC-84   (hex)		ZERONE CO., LTD.
+600000-6FFFFF     (base 16)		ZERONE CO., LTD.
+				Shinil IT UTO Bldg. #810, LS-ro 13, Gunpo-si, Gyeonggi-do, Korea
+				SEOUL    15843
+				KR
+
+98-FC-84   (hex)		go-e GmbH
+100000-1FFFFF     (base 16)		go-e GmbH
+				Satellitenstrasse 1
+				Feldkirchen  Kaernten  9560
+				AT
+
+18-FD-CB   (hex)		TRANSLITE GLOBAL LLC
+B00000-BFFFFF     (base 16)		TRANSLITE GLOBAL LLC
+				6644 ANTOINE DRIVE 
+				HOUSTON  TX  77091
+				US
+
+98-FC-84   (hex)		Zymbit
+500000-5FFFFF     (base 16)		Zymbit
+				53 Cass Place, Suite B
+				Goleta  CA  93117
+				US
+
+18-FD-CB   (hex)		CreyNox GmbH
+900000-9FFFFF     (base 16)		CreyNox GmbH
+				Autokaderstrasse 29, BT2
+				Vienna    1210
+				AT
+
+58-20-8A   (hex)		SAMIL CTS Co., Ltd.
+800000-8FFFFF     (base 16)		SAMIL CTS Co., Ltd.
+				8F, Woolim Lion's Valley 3cha, 24 Dunchon Daero 388beon-gil, Jungwon-gu
+				Seongnam-si  Gyeonggi-do, KOREA  13403
+				KR
+
+18-FD-CB   (hex)		Shenzhen Rui jiali Electronic Technology Co. Ltd.
+000000-0FFFFF     (base 16)		Shenzhen Rui jiali Electronic Technology Co. Ltd.
+				306 ROOM,Building B, ShenZhaoYe Science Park, BaoLong 5 Road No. 1,Baolong Industrial City ,Pingshan District
+				Shenzhen    518118
+				CN
+
+18-FD-CB   (hex)		ENERGIE IP
+700000-7FFFFF     (base 16)		ENERGIE IP
+				48 rue du Château d’eau 
+				Paris  Ile-de-France  75010
+				FR
+
+CC-4F-5C   (hex)		Shanghai Zenchant Electornics Co.,LTD
+300000-3FFFFF     (base 16)		Shanghai Zenchant Electornics Co.,LTD
+				Room 1202, building a, Noble international, 908 Xiuwen Road, Minhang District
+				ShangHai  ShangHai  201199
+				CN
+
+CC-4F-5C   (hex)		Dtrovision
+900000-9FFFFF     (base 16)		Dtrovision
+				22-10 STATE RT 208
+				Fair Lawn  NJ  07410
+				US
+
+CC-4F-5C   (hex)		AZ-TECHNOLOGY SDN BHD
+A00000-AFFFFF     (base 16)		AZ-TECHNOLOGY SDN BHD
+				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
+				PETALING JAYA  SELANGOR  47301
+				MY
+
+FC-CD-2F   (hex)		Shenzhen Smartbyte Technology Co., Ltd.
+D00000-DFFFFF     (base 16)		Shenzhen Smartbyte Technology Co., Ltd.
+				 6th Floor, Building D, Huiqing Science and Technology Park, No. 8 Dafu Industrial Zone, Guanlan Street, Longhua District, Shenzhen
+				shenzhen  guangdong  518110
+				CN
+
+FC-CD-2F   (hex)		Siren Care(Shanghai) information and technology company
+100000-1FFFFF     (base 16)		Siren Care(Shanghai) information and technology company
+				Room 205, Floor 2, B Zone, Building 2, No 1899, Jiahao Rd, Jiading
+				Shanghai    201802
+				CN
+
+FC-CD-2F   (hex)		Xmitech Technology Co., Limited
+300000-3FFFFF     (base 16)		Xmitech Technology Co., Limited
+				RM888, F8,Tower B,Xinnengyuan Building
+				shenzhen    518054
+				CN
+
+FC-CD-2F   (hex)		Genitek Engineering sprl
+400000-4FFFFF     (base 16)		Genitek Engineering sprl
+				Rue Edouard Belin, 5
+				Mont-Saint-Guibert    1435
+				BE
+
+58-95-D8   (hex)		shenzhen UDD Technologies,co.,Ltd
+100000-1FFFFF     (base 16)		shenzhen UDD Technologies,co.,Ltd
+				Unit D, 6th Floor, Jialitai Bldg., No.45 Yanshan Road, Shekou, Nanshan District, Shenzhen, China
+				shenzhen  guangdong  51800
+				CN
+
+CC-4F-5C   (hex)		Beijing Neutron Technology CO.,LTD.
+D00000-DFFFFF     (base 16)		Beijing Neutron Technology CO.,LTD.
+				Beijing Neutron Technology CO.,LTD. 
+				Beijing  Beijing  100193
+				CN
+
+DC-4A-9E   (hex)		Maxvision Technology Corp.
+B00000-BFFFFF     (base 16)		Maxvision Technology Corp.
+				16F,East Block,High-tech Plaza Phase II,Tianan Cyber Park,Futian District,Shenzhen.
+				Shenzhen.    518000
+				CN
+
+58-95-D8   (hex)		elgris UG
+500000-5FFFFF     (base 16)		elgris UG
+				Langerweher Str. 10
+				Inden  Deutschland  52459
+				DE
+
+DC-4A-9E   (hex)		Annapurna labs
+200000-2FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+68-79-12   (hex)		ShangHai Aigentoo Information Technology Co., Ltd
+800000-8FFFFF     (base 16)		ShangHai Aigentoo Information Technology Co., Ltd
+				Room 1126,Building 1,Xin Ye Building,388 Tianlin Road,Xuhui District
+				Shanghai    200080
+				CN
+
+68-79-12   (hex)		PCTEL, Inc.
+000000-0FFFFF     (base 16)		PCTEL, Inc.
+				471 Brighton Drive
+				Bloomingdale  IL  60108
+				US
+
+68-79-12   (hex)		APPOTRONICS CO., LTD
+600000-6FFFFF     (base 16)		APPOTRONICS CO., LTD
+				4th Floor,SZICC,NO.1089,Chaguang Road,Nanshan District, Shenzhen, China
+				Shenzhen  Guangdong  518000
+				CN
+
+84-11-C2   (hex)		Provision-ISR
+C00000-CFFFFF     (base 16)		Provision-ISR
+				11 Atir Yeda St.
+				Kfar Saba  Israel  4464310
+				IL
+
+84-11-C2   (hex)		Goldmund Switzerland
+D00000-DFFFFF     (base 16)		Goldmund Switzerland
+				Chemin Grenet 21, 1214
+				Vernier  Geneva  1214
+				CH
+
+84-11-C2   (hex)		Ei3 Corporation
+700000-7FFFFF     (base 16)		Ei3 Corporation
+				2 Blue Hill Plaza, Ste 1544
+				Pearl River  NY  10965
+				US
+
+84-11-C2   (hex)		AIBIoT GmbH
+500000-5FFFFF     (base 16)		AIBIoT GmbH
+				Hornemannstr. 12
+				Hildesheim  Lower Saxony  31137
+				DE
+
+8C-47-6E   (hex)		Shanghai Satellite Communication Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Shanghai Satellite Communication Technology Co.,Ltd
+				Shanghai Satellite Communication Technology Co.,Ltd
+				Shanghai  Shanghai  201800
+				CN
+
+8C-47-6E   (hex)		Square Inc.
+500000-5FFFFF     (base 16)		Square Inc.
+				1455 Market St.
+				San Francisco  CA  94103
+				US
+
+68-79-12   (hex)		Stephan Electronics SARL
+300000-3FFFFF     (base 16)		Stephan Electronics SARL
+				Maupas 9
+				Lausanne    1004
+				CH
+
+8C-47-6E   (hex)		Faravid Communication&Data Analysis
+B00000-BFFFFF     (base 16)		Faravid Communication&Data Analysis
+				18th unit, No.2, Houman Alley Abbaspour Av., 
+				Vanak Sq.  Tehran  1435633413
+				IR
+
+8C-47-6E   (hex)		TelWare Corporation
+100000-1FFFFF     (base 16)		TelWare Corporation
+				1824 Industrial Center Circle
+				Charlotte  NC  28213
+				US
+
+8C-47-6E   (hex)		Shenzhen Juding Electronics Co., Ltd.
+400000-4FFFFF     (base 16)		Shenzhen Juding Electronics Co., Ltd.
+				5th Floor, Building B5, Fenghuanggang Third Industrial Zone, No.231, Baotian 1st Road, Baoan District
+				Shenzhen  Guangdong  518100
+				CN
+
+8C-47-6E   (hex)		Edge Networks Inc
+C00000-CFFFFF     (base 16)		Edge Networks Inc
+				943 W. Overland Road, Suite 152
+				Meridian  ID  83642
+				US
+
+8C-47-6E   (hex)		Annapurna labs
+E00000-EFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+8C-AE-49   (hex)		Ouman Oy
+000000-0FFFFF     (base 16)		Ouman Oy
+				Voimatie 6
+				Kempele    FIN-90440
+				FI
+
+8C-AE-49   (hex)		Jiangsu Sixingda Information Technology Co., Ltd.
+400000-4FFFFF     (base 16)		Jiangsu Sixingda Information Technology Co., Ltd.
+				Jiangsu Sixingda Information Technology Co., Ltd.
+				Nanjing  Jiangsu  210000
+				CN
+
+8C-AE-49   (hex)		Suzhou Guowang Electronics Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Suzhou Guowang Electronics Technology Co., Ltd.
+				No. 99, Changli Road, 703, Wuzhong science and technology entrepreneurship Park
+				Suzhou    215168
+				CN
+
+A4-53-EE   (hex)		Viper Design, LLC
+B00000-BFFFFF     (base 16)		Viper Design, LLC
+				85 Cude Lane
+				Madison  TN  37115
+				US
+
+A0-02-4A   (hex)		Guangdong Jinpeng Technology Co. LTD
+A00000-AFFFFF     (base 16)		Guangdong Jinpeng Technology Co. LTD
+				Room 504, 5 / F, Self-built A3 Building, No. 50 Science Avenue, Huangpu District
+				Guangzhou    510700
+				CN
+
+A0-02-4A   (hex)		Beijing Lyratone Technology Co., Ltd
+800000-8FFFFF     (base 16)		Beijing Lyratone Technology Co., Ltd
+				1st floor, Caigang building, No.40 Beiyuan Road
+				Beijing    100020
+				CN
+
+A0-02-4A   (hex)		Encroute AB
+C00000-CFFFFF     (base 16)		Encroute AB
+				Box 2062
+				Sundbyberg    17402
+				SE
+
+A0-02-4A   (hex)		Vitec Imaging Solutions Spa
+100000-1FFFFF     (base 16)		Vitec Imaging Solutions Spa
+				Via Valsugana 100
+				Cassola  Vicenza  36022
+				IT
+
+78-D4-F1   (hex)		Jiangsu byzoro intelligent technology Co.,Ltd
+B00000-BFFFFF     (base 16)		Jiangsu byzoro intelligent technology Co.,Ltd
+				Room 301, Building D, Yunmi City, No.19 Ningshuang Road, Yuhuatai District
+				Nanjing  Jiangsu  210012
+				CN
+
+44-6F-D8   (hex)		BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Ş.
+200000-2FFFFF     (base 16)		BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Ş.
+				Kimya Sanayicileri Org. San. Bolgesi Organik Cad. No:31
+				Istanbul  Tuzla   34956
+				TR
+
+44-6F-D8   (hex)		ITC
+700000-7FFFFF     (base 16)		ITC
+				3030 Corporate Grove Drive
+				Hudsonville  MI  49426
+				US
+
+44-6F-D8   (hex)		CTE
+E00000-EFFFFF     (base 16)		CTE
+				No. 1-7, Gongjian Rd., Cidu District, Keelung City 20647, Taiwan R.O.C
+				Keelung  Taiwan  106
+				TW
+
+98-27-82   (hex)		INFODAS GmbH
+100000-1FFFFF     (base 16)		INFODAS GmbH
+				Rhonestr. 2
+				Cologne    50765
+				DE
+
+98-27-82   (hex)		Anhui Shengren Electronic Technology Co., Ltd
+200000-2FFFFF     (base 16)		Anhui Shengren Electronic Technology Co., Ltd
+				520 Jiahe Road, Yuhui District
+				Bengbu  Anhui  233000
+				CN
+
+98-27-82   (hex)		SureFlap Ltd
+E00000-EFFFFF     (base 16)		SureFlap Ltd
+				7 The Irwin Centre, Scotland Road, Dry Drayton
+				Cambridge  Cambridgeshire  CB23 8AR
+				GB
+
+04-11-19   (hex)		CEITA COMMUNICATION TECHNOLOGY CO.,LTD
+500000-5FFFFF     (base 16)		CEITA COMMUNICATION TECHNOLOGY CO.,LTD
+				611, Renbao Building, 32 Baolong Road, Changlong Community, Buji Street, Longgang District
+				Shenzhen  Guangdong  518000
+				CN
+
+98-27-82   (hex)		KRISTECH Krzysztof Kajstura
+C00000-CFFFFF     (base 16)		KRISTECH Krzysztof Kajstura
+				Porzeczkowa 12
+				Ustro?  Please select region, state or province  43-450
+				PL
+
+04-11-19   (hex)		ZPD technology Co., Ltd
+600000-6FFFFF     (base 16)		ZPD technology Co., Ltd
+				2# Floor, 1# Gate?12# Building?5# Jiangtai Road, Chaoyang District,Beijing
+				Beijing  Beijing  100015
+				CN
+
+E8-6C-C7   (hex)		ASSA ABLOY(GuangZhou) Smart Technology Co., Ltd
+100000-1FFFFF     (base 16)		ASSA ABLOY(GuangZhou) Smart Technology Co., Ltd
+				Plant Building 5, 106 Xieshi Highway, Shibi 1st Village
+				Guangzhou  GuangDong  511495
+				CN
+
+04-11-19   (hex)		Haerbin Donglin Technology Co., Ltd.
+C00000-CFFFFF     (base 16)		Haerbin Donglin Technology Co., Ltd.
+				Room 2, Floor 1, Unit 6, Building 2,Yuanshi Street 35, Nangang District
+				Haerbin  Heilongjiang  150000
+				CN
+
+04-11-19   (hex)		Bolicom Innovation Technology (BeiJing) Co.,LTD.
+400000-4FFFFF     (base 16)		Bolicom Innovation Technology (BeiJing) Co.,LTD.
+				Rm2327, Building23, No.18 Anningzhuang East Road, Haidian District
+				Bei Jing    100000
+				CN
+
+24-5D-FC   (hex)		Shenzhen Hailuck Electronic Technology CO.,LTD
+300000-3FFFFF     (base 16)		Shenzhen Hailuck Electronic Technology CO.,LTD
+				2/F, building 19, Baotian industrial zone, the Third Baotian Road, Bao'an district
+				Shenzhen  GuangDong  518101
+				CN
+
+E8-6C-C7   (hex)		MORNSUN Guangzhou Science & Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		MORNSUN Guangzhou Science & Technology Co., Ltd.
+				No.5,Kehui St. 1,kehui Development Center,Science Ave.,Guangzhou Science City,  Huangpu District
+				GuangZhou  GuangDong   510000
+				CN
+
+24-5D-FC   (hex)		ONLY
+B00000-BFFFFF     (base 16)		ONLY
+				1F., No. 16, Ln. 76, Zhongyang N. Rd., Sanchong Dist
+				New Taipei City  Taiwan (R.O.C.)   24146
+				TW
+
+24-5D-FC   (hex)		Tata Sky Limited
+A00000-AFFFFF     (base 16)		Tata Sky Limited
+				Unit 301 to 305, 3rd Floor, Windsor, Off C.S.T. Road, Kalina, Santacruz (East), Mumbai – 400 098 
+				Mumbai  Maharashtra  400098
+				IN
+
+94-05-BB   (hex)		Neutrik AG
+300000-3FFFFF     (base 16)		Neutrik AG
+				Im alten Riet 143
+				Schaan  SCHAAN  9494
+				LI
+
+60-15-92   (hex)		Yangzhou Wanfang Electronic Technology,CO .,Ltd.
+800000-8FFFFF     (base 16)		Yangzhou Wanfang Electronic Technology,CO .,Ltd.
+				No.96 Anlin Road,Guangling District
+				Yangzhou City  Jiangsu Province  225000
+				CN
+
+A4-53-EE   (hex)		Shenzhen Xunqi Interconnet Technology Co., Ltd
+600000-6FFFFF     (base 16)		Shenzhen Xunqi Interconnet Technology Co., Ltd
+				26G, block B, Haiwang building, Chuangye Road, Nanshan District,
+				Shenzhen  Guangdong  518000
+				CN
+
+60-15-92   (hex)		BEIJING KUANGSHI TECHNOLOGY CO., LTD
+600000-6FFFFF     (base 16)		BEIJING KUANGSHI TECHNOLOGY CO., LTD
+				Room 1018,10th Floor, No.1 Zhongguancun Street, Haidian District, 
+				Beijing  Beijing  100086
+				CN
+
+0C-5C-B5   (hex)		BSU Inc
+D00000-DFFFFF     (base 16)		BSU Inc
+				1611 Headway Circle, Building 1, Suite 200
+				Austin  TX  78754
+				US
+
+1C-A0-EF   (hex)		Atlas Aerospace
+900000-9FFFFF     (base 16)		Atlas Aerospace
+				Ulbrokas 19a
+				Riga  Riga  LV-1021
+				LV
+
+0C-5C-B5   (hex)		Zhengzhou coal machinery hydraulic electric control Co.,Ltd
+A00000-AFFFFF     (base 16)		Zhengzhou coal machinery hydraulic electric control Co.,Ltd
+				167 Jingkai 9th Street, Zhengzhou Economic Development Zone
+				Zhengzhou    45000
+				CN
+
+1C-A0-EF   (hex)		Henrich Electronics Corporation
+A00000-AFFFFF     (base 16)		Henrich Electronics Corporation
+				225 Deming Place
+				Westmont    60559
+				US
+
+1C-A0-EF   (hex)		 BMK professional electronics GmbH
+B00000-BFFFFF     (base 16)		 BMK professional electronics GmbH
+				Werner-von-Siemens-Straße 6
+				Augsburg     86159
+				DE
+
+1C-A0-EF   (hex)		Nanjing Bilin Intelligent Identification Technology Co.,Ltd
+500000-5FFFFF     (base 16)		Nanjing Bilin Intelligent Identification Technology Co.,Ltd
+				No.9 Bancang Street
+				Nanjing  Jiangsu  210000
+				CN
+
+1C-A0-EF   (hex)		Schneider-Electric(China)Co.Ltd,Shenzhen Branch
+200000-2FFFFF     (base 16)		Schneider-Electric(China)Co.Ltd,Shenzhen Branch
+				Unit A to C 7/F and 8/F,CES Building ,No.3099,Keyuan South road, Nanshan Dist, Shenzhen, GD, China
+				SHENZHEN    518000
+				CN
+
+1C-A0-EF   (hex)		RDA Microelectronics Technologies (Shanghai) Co. , Ltd
+E00000-EFFFFF     (base 16)		RDA Microelectronics Technologies (Shanghai) Co. , Ltd
+				Room 336, No.3, Lane 2288, Zuchongzhi Road, Pudong Area
+				Shanghai  Shanghai  200120
+				CN
+
+20-CE-2A   (hex)		Annapurna labs
+000000-0FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+20-CE-2A   (hex)		Cuculus GmbH
+300000-3FFFFF     (base 16)		Cuculus GmbH
+				Lindenstr. 9 -11
+				Ilmenau  Thuringia  98693
+				DE
+
+20-CE-2A   (hex)		Annapurna labs
+400000-4FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+20-CE-2A   (hex)		Radarxense BV
+600000-6FFFFF     (base 16)		Radarxense BV
+				Kwekerijweg, 2A
+				Zeist  Nederland  3709 JA
+				NL
+
+78-C2-C0   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+600000-6FFFFF     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+				FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road, Chengdu, Sichuan
+				Chengdu  Sichuan  610000
+				CN
+
+88-C9-B3   (hex)		Shenzhen Viewsmart Technology Co.,Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Viewsmart Technology Co.,Ltd
+				Room 10C?Floor 10,South China Navigation Building, No.7 North Langshan Road,Nanshan District, Shenzhen, China.
+				SHENZHEN    518000
+				CN
+
+88-C9-B3   (hex)		Hugo Techno
+600000-6FFFFF     (base 16)		Hugo Techno
+				F92 Green Park
+				New Delhi  Delhi  110016
+				IN
+
+88-C9-B3   (hex)		Richbeam (Beijing) Technology Co., Ltd.
+900000-9FFFFF     (base 16)		Richbeam (Beijing) Technology Co., Ltd.
+				2608, Tower A, Tianzuo International, No.12, Zhongguancun South Street, Haidian District
+				Beijing  Beijing  100081
+				CN
+
+C8-F5-D6   (hex)		HENAN FOXSTAR DIGITAL DISPLAY Co.,Ltd.
+A00000-AFFFFF     (base 16)		HENAN FOXSTAR DIGITAL DISPLAY Co.,Ltd.
+				No. 7 Bldg., Yulong Block, Longsheng Road, Optronic Industry Area, Nanyang,Henan,P.R.China
+				Nanyang    473000
+				CN
+
+C8-F5-D6   (hex)		MEIRYO TECHNICA CORPORATION
+000000-0FFFFF     (base 16)		MEIRYO TECHNICA CORPORATION
+				2039-1,Shimoi, Shimoi-cho
+				Owariasahi-city  Aichi  488-0052
+				JP
+
+C0-FB-F9   (hex)		Minato Advanced Technologies inc
+400000-4FFFFF     (base 16)		Minato Advanced Technologies inc
+				4105, Minami Yamata-cho, Tsuzuki-ku,
+				YOKOHAMA  Kanagawa  224-0026
+				JP
+
+C0-FB-F9   (hex)		 LongSung Technology (Shanghai) Co.,Ltd.   
+700000-7FFFFF     (base 16)		 LongSung Technology (Shanghai) Co.,Ltd.   
+				 Room 606, Block B, Bldg. 1, No. 3000 Longdong Avenue., Zhangjiang Hi-Tech Park, Pudong District
+				ShangHai    201203
+				CN
+
+C8-F5-D6   (hex)		HEITEC AG
+E00000-EFFFFF     (base 16)		HEITEC AG
+				Güterbahnhofstrasse 5
+				Erlangen  Please select state  91052
+				DE
+
+C8-F5-D6   (hex)		BBPOS International Limited
+300000-3FFFFF     (base 16)		BBPOS International Limited
+				Suite 1602, Tower 2, Nina Tower, 8 Yeung Uk Road, Tsuen Wan, NT
+				Hong Kong  China  00000
+				HK
+
+88-C9-B3   (hex)		Fortive Setra-ICG(Tianjin)Co.,Ltd
+300000-3FFFFF     (base 16)		Fortive Setra-ICG(Tianjin)Co.,Ltd
+				28 weiwu Road,Micro-electronics Industrial Park,Xiqing District Tianjin,P,R,China
+				Tianjin    300380
+				CN
+
+C0-FB-F9   (hex)		Xerox Corporation
+000000-0FFFFF     (base 16)		Xerox Corporation
+				800 Phillips Rd, Mailstop 0207-2Z
+				Webster  NY  14580
+				US
+
+C0-FB-F9   (hex)		zxsolution
+900000-9FFFFF     (base 16)		zxsolution
+				nanshan shenzhen
+				shenzhen    518000
+				CN
+
+D0-9F-D9   (hex)		Westar Display Technologies
+200000-2FFFFF     (base 16)		Westar Display Technologies
+				4 Research Park Dr
+				St Charles  MO  63304
+				US
+
+18-74-E2   (hex)		Sansec Technology Co.,Ltd
+700000-7FFFFF     (base 16)		Sansec Technology Co.,Ltd
+				Bejing Chaoyang District Guangshun North Street Hostpital No.16 No.2 building 14 room 1406
+				Bejing   Bejing   100102
+				CN
+
+D0-9F-D9   (hex)		Cablewireless Laboratory Co., Ltd
+B00000-BFFFFF     (base 16)		Cablewireless Laboratory Co., Ltd
+				Room 218,  Block E1, Yuanchenxin Building, 12 Yumin Road, Chaoyang District
+				Beijing    100029
+				CN
+
+18-74-E2   (hex)		CT Company
+300000-3FFFFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+18-74-E2   (hex)		Ensor AG
+000000-0FFFFF     (base 16)		Ensor AG
+				Riedstrasse 11
+				Cham  Zug  CH - 6330
+				CH
+
+E8-78-29   (hex)		Ryu Tech. LTD
+900000-9FFFFF     (base 16)		Ryu Tech. LTD
+				No.10 Lane 369,Yuan Taung Rd.JhoneHe City
+				Taipei  Taiwan,R.O.C  235
+				TW
+
+E8-78-29   (hex)		Galcon
+200000-2FFFFF     (base 16)		Galcon
+				Kfar Blum  israel
+				Kfar Blum  Israel   121500
+				IL
+
+E8-78-29   (hex)		SHEN ZHEN SKYSI WISDOM TECHNOLOGY CO.,LTD.
+500000-5FFFFF     (base 16)		SHEN ZHEN SKYSI WISDOM TECHNOLOGY CO.,LTD.
+				Room 1106,11th floor, National Technology Building, no. 109, Baoshen Road, Songpingshan community, Xili Street, Nanshan district, Shenzhen City
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+E8-78-29   (hex)		FairPhone B.V.
+C00000-CFFFFF     (base 16)		FairPhone B.V.
+				VanDiemenstraat 200
+				Amsterdam    1013 CP
+				NL
+
+B4-4B-D6   (hex)		Shenzhen Cudy Technology Co., Ltd.
+200000-2FFFFF     (base 16)		Shenzhen Cudy Technology Co., Ltd.
+				Room A606, Gaoxinqi Industrial Park, Baoan 67 Dist
+				Baoan 67 District, Shenzhen    518101
+				CN
+
+A8-5B-36   (hex)		PARMA LLC
+100000-1FFFFF     (base 16)		PARMA LLC
+				Leninsky Prospekt, 140, lit A, room 15N
+				Saint Petersburg  Saint Petersburg  198216
+				RU
+
+78-13-05   (hex)		Shenzhen C & D Electronics Co., Ltd.
+900000-9FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+78-13-05   (hex)		Dongguan zhenxing electronic technology co.,limited
+E00000-EFFFFF     (base 16)		Dongguan zhenxing electronic technology co.,limited
+				GuangMingGang JinJun road 8#
+				DonggUAN    523768
+				CN
+
+A8-5B-36   (hex)		Adam Hall GmbH
+D00000-DFFFFF     (base 16)		Adam Hall GmbH
+				Adam-Hall-Str. 1
+				Neu-Anspach  Hessen  61267
+				DE
+
+F0-2A-2B   (hex)		Tenways Engineering Service Ltd
+800000-8FFFFF     (base 16)		Tenways Engineering Service Ltd
+				85 Kenilworth Road
+				Edgware  Middlesex  HA8 8XA
+				GB
+
+44-A9-2C   (hex)		NetX Networks a.s.
+400000-4FFFFF     (base 16)		NetX Networks a.s.
+				Palackeho trida 811/112
+				Brno  Czech Republic  62100
+				CZ
+
+F0-2A-2B   (hex)		Shenzhen CUCO Technology Co., Ltd
+E00000-EFFFFF     (base 16)		Shenzhen CUCO Technology Co., Ltd
+				Room 201, 301, Building A, No.12, Difu Road, Guxing Community, Xixiang Street, Baoan District
+				Shenzhen  Guangdong  418000
+				CN
+
+44-A9-2C   (hex)		uimcom
+100000-1FFFFF     (base 16)		uimcom
+				Yingying building, 99 Tuanjie Road, Pukou District, Nanjing
+				nanjing    211800
+				CN
+
+44-A9-2C   (hex)		Efficient Building Automation Corp.
+700000-7FFFFF     (base 16)		Efficient Building Automation Corp.
+				Unit 1004 - 7495 132nd Street
+				Surrey  British Columbia  V3W1J8
+				CA
+
+58-48-49   (hex)		Waoo
+A00000-AFFFFF     (base 16)		Waoo
+				True Møllevej 9
+				Tilst  Aarhus Municipallity  8381
+				DK
+
+64-33-B5   (hex)		ABB Electrification Smart Power (ELSP)
+700000-7FFFFF     (base 16)		ABB Electrification Smart Power (ELSP)
+				PVT. BAG 92609, SYMONDS STREET
+				Auckland    1150
+				NZ
+
+64-33-B5   (hex)		Eagle Eye Networks, Inc
+400000-4FFFFF     (base 16)		Eagle Eye Networks, Inc
+				4611 Bee Cave Rd Suite 200
+				austin  TX  78746
+				US
+
+64-33-B5   (hex)		LACO Technologies
+800000-8FFFFF     (base 16)		LACO Technologies
+				3085 W Directors Row
+				Salt Lake City  UT  84104
+				US
+
+64-33-B5   (hex)		electroCore Inc.
+B00000-BFFFFF     (base 16)		electroCore Inc.
+				205 Forge Way
+				Rockaway  NJ  07866
+				US
+
+64-33-B5   (hex)		MICROIT SRL
+600000-6FFFFF     (base 16)		MICROIT SRL
+				Via Galileo Galilei 1
+				Medolla  MODENA  41036
+				IT
+
+64-33-B5   (hex)		Annapurna labs
+900000-9FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+28-36-13   (hex)		Fuzhou Lesi Intelligent Technology Co., Ltd
+800000-8FFFFF     (base 16)		Fuzhou Lesi Intelligent Technology Co., Ltd
+				Room 1-3-5, north 9 / F, building 1, Fujian hi tech Pioneer Park, 611 Gongye Road, Gulou District
+				Fuzhou  Fujian  350000
+				CN
+
+28-36-13   (hex)		midBit Technologies, LLC
+C00000-CFFFFF     (base 16)		midBit Technologies, LLC
+				153 Homestead Ln
+				Romney  WV  26757
+				US
+
+28-36-13   (hex)		Turing Video
+500000-5FFFFF     (base 16)		Turing Video
+				1730 S El Camino Real, Suite 350
+				San Mateo  CA  94402
+				US
+
+28-36-13   (hex)		MAKEEN Energy
+A00000-AFFFFF     (base 16)		MAKEEN Energy
+				Alsvej 21
+				Randers    8940
+				DK
+
+28-36-13   (hex)		EGMedical, s.r.o.
+E00000-EFFFFF     (base 16)		EGMedical, s.r.o.
+				KRENOVA 19
+				Brno  JHMK  60200
+				CZ
+
+28-36-13   (hex)		Qorvo, Inc.
+B00000-BFFFFF     (base 16)		Qorvo, Inc.
+				500 W. Renner Road
+				Richardson  TX  75080
+				US
+
+78-5E-E8   (hex)		FINETOOLING TECHNOLOGY(HONG KONG)CO.,LIMITED
+C00000-CFFFFF     (base 16)		FINETOOLING TECHNOLOGY(HONG KONG)CO.,LIMITED
+				RM 1003 10/F TOWER 1 LIPPO CENTER 89 QUEENSWAY ADMIRALTY HK
+				HONG KONG  HONG KONG  999077
+				CN
+
+38-A8-CD   (hex)		Annapurna labs
+D00000-DFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+78-5E-E8   (hex)		Tachyon Networks
+D00000-DFFFFF     (base 16)		Tachyon Networks
+				11275 US HWY 98 W, STE. 6-259
+				Miramar Beach  FL  32550
+				US
+
+78-5E-E8   (hex)		beijing Areospace Hongda optoelectronics technology co.,ltd
+400000-4FFFFF     (base 16)		beijing Areospace Hongda optoelectronics technology co.,ltd
+				Room 422, No.4, North Row, No.28 South Yard
+				Beijing    Dongbei Wang Village, Dongbei Wang Township, Haidian District  065599
+				CN
+
+38-A8-CD   (hex)		Fujica System Co., ltd
+100000-1FFFFF     (base 16)		Fujica System Co., ltd
+				Building 6, JiuXiangLing Industrial Area, Xili street, Nanshan District,
+				Shenzhen  GuangDong  518055
+				CN
+
+7C-83-34   (hex)		Beijing Changkun Technology Co., Ltd.
+300000-3FFFFF     (base 16)		Beijing Changkun Technology Co., Ltd.
+				Room 821-1, unit 2, floor 10, building 1, No. 3, Rongjing East Street, Beijing Economic Development Zone
+				Beijing  Beijing  100176
+				CN
+
+7C-83-34   (hex)		ChengDU Yi Gong Intelligence Technology Co., Ltd.
+700000-7FFFFF     (base 16)		ChengDU Yi Gong Intelligence Technology Co., Ltd.
+				5th floor, building 4, No. 200, Tianfu 5th Street
+				ChengDu  SiChuan  610000
+				CN
+
+7C-83-34   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+900000-9FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+				Suzhou    215021
+				CN
+
+7C-83-34   (hex)		MSV elektronika s.r.o.
+D00000-DFFFFF     (base 16)		MSV elektronika s.r.o.
+				Postovni 662
+				Studenka    742 13
+				CZ
+
+98-6E-E8   (hex)		Changzhou Jiahao Radio&TV device CO.,LTD
+D00000-DFFFFF     (base 16)		Changzhou Jiahao Radio&TV device CO.,LTD
+				NO.155,Jiaxing road
+				Changzhou  Jiangsu  213000
+				CN
+
+98-6E-E8   (hex)		SUZHOU AUDITORYWORKS CO., LTD.
+500000-5FFFFF     (base 16)		SUZHOU AUDITORYWORKS CO., LTD.
+				Creative Industry Park, No.328, Xinghu Street, Suzhou Industrial Park, Unit 2-B504
+				Suzhou  Jiangsu  215000
+				CN
+
+1C-AE-3E   (hex)		China Convert Technology Co., Ltd.
+900000-9FFFFF     (base 16)		China Convert Technology Co., Ltd.
+				Room 405,18 Building,No. 3333, Huaning Street, Minhang District
+				Shanghai    210036
+				CN
+
+98-6E-E8   (hex)		Centro de Pesquisas Av Wernher Von Braun
+700000-7FFFFF     (base 16)		Centro de Pesquisas Av Wernher Von Braun
+				Avenida Alice de Castro Pupo Nogueira, Mattosinho, 301 - Alphaville
+				campinas  Sao Paulo  13098392
+				BR
+
+98-80-BB   (hex)		Annapurna labs
+300000-3FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+98-80-BB   (hex)		Shenzhen Xin Kingbrand Enterprises Co., Ltd
+C00000-CFFFFF     (base 16)		Shenzhen Xin Kingbrand Enterprises Co., Ltd
+				First and Third Floor of Building B,Building A, NO. 90 Nanpu Road, Shajing Street, Baoan District
+				Shenzhen    518000
+				CN
+
+98-80-BB   (hex)		Wyebot, Inc.
+D00000-DFFFFF     (base 16)		Wyebot, Inc.
+				2 Mount Royal Ave.
+				Marlborough  MA  01752
+				US
+
+78-72-64   (hex)		Typhoon HIL, Inc.
+A00000-AFFFFF     (base 16)		Typhoon HIL, Inc.
+				15 Ward Street, 2nd Floor
+				Somerville    02143
+				US
+
+78-72-64   (hex)		Conjing Networks Inc.
+700000-7FFFFF     (base 16)		Conjing Networks Inc.
+				4F., No.108, Zhenxing Rd., East Dist.
+				Hsinchu City    300081
+				TW
+
+78-72-64   (hex)		Asustor Inc.
+400000-4FFFFF     (base 16)		Asustor Inc.
+				3F, No.136, Daye Road, Beitou Dist.,
+				Taipei City    112
+				TW
+
+F4-70-0C   (hex)		HYUNSUNG CONVERGENCE 
+000000-0FFFFF     (base 16)		HYUNSUNG CONVERGENCE 
+				802-Ho,Sanbon-ro,48beon-gil 32
+				Gunpo-si  Gyeonggi-do  15846
+				KR
+
+F4-70-0C   (hex)		Shenzhen WeProTalk Technology Co., Ltd.
+E00000-EFFFFF     (base 16)		Shenzhen WeProTalk Technology Co., Ltd.
+				Room 201, R3-B building, Virtual univessity park, Nanshan
+				Shenzhen   Guangdong  518000
+				CN
+
+F4-70-0C   (hex)		Shenzhen Anycon Electronics Technology Co.,Ltd
+400000-4FFFFF     (base 16)		Shenzhen Anycon Electronics Technology Co.,Ltd
+				1109,11th floor, Tower E, Galaxy world, Minle community, Minzhi, Longhua district
+				Shenzhen  Guangdong  518100
+				CN
+
+F4-70-0C   (hex)		Shanghai Risingpo Electronics CO.,LTD
+B00000-BFFFFF     (base 16)		Shanghai Risingpo Electronics CO.,LTD
+				Room 501, Building 5, Lingang Excellence Industrial Park, No. 877, Jiuxin Road, Jiuting Town, Songjiang District, Shanghai
+				shanghai    201615
+				CN
+
+F4-A4-54   (hex)		Introl Design
+600000-6FFFFF     (base 16)		Introl Design
+				4883 ida park drive
+				Lockport  NY  14094
+				US
+
+F4-A4-54   (hex)		Chongqing Hengxun Liansheng Industrial Co.,Ltd
+300000-3FFFFF     (base 16)		Chongqing Hengxun Liansheng Industrial Co.,Ltd
+				Shop 42, Area C, Chongqing Yixiang City, No. 12 Jiangnan Avenue, Nan'an District
+				Chongqing  Chongqing Province  404100
+				CN
+
+F4-A4-54   (hex)		NKT Photonics A/S
+000000-0FFFFF     (base 16)		NKT Photonics A/S
+				Blokken 84
+				Birkerod    3460
+				DK
+
+18-45-B3   (hex)		Shenzhen Incar Technology Co., Ltd.
+700000-7FFFFF     (base 16)		Shenzhen Incar Technology Co., Ltd.
+				Zhongxi ECO International Building, Shuiku Rd., Baoan District
+				Shenzhen     518000
+				CN
+
+F4-A4-54   (hex)		TRI WORKS
+200000-2FFFFF     (base 16)		TRI WORKS
+				#402 Goto building 4F 2-2-2 Daimyo Chuo-ku
+				Fukuoka-shi    810-0041
+				JP
+
+08-F8-0D   (hex)		Shenzhen DophiGo IoT Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Shenzhen DophiGo IoT Technology Co.,Ltd
+				B02, first floor, building No.9, Nanshan Yungu start-up business industrial park second part, No.2, Pingshan first road, Pingshan Community, Taoyuan Street, Nanshan district
+				Shenzhen    518000
+				CN
+
+08-F8-0D   (hex)		OpenYard LLC
+800000-8FFFFF     (base 16)		OpenYard LLC
+				82, Sadovnicheskaya str., Building 2, Office 3F07
+				Moscow    115035
+				RU
+
+04-EE-E8   (hex)		Shenzhen JoiningFree Technology Co.,Ltd
+A00000-AFFFFF     (base 16)		Shenzhen JoiningFree Technology Co.,Ltd
+				16F, Block C, Qifengda Building, Taohuayuan Science and Technology Innovation Park, Furong Road, Songgang Street, Baoan District,
+				Shenzhen  Guangdong  518110
+				CN
+
+18-D7-93   (hex)		DongGuan Orient Electronics & Metal Co.,Ltd
+500000-5FFFFF     (base 16)		DongGuan Orient Electronics & Metal Co.,Ltd
+				A2 Building, ZhiGu Science and Technology Park, Gekeng industrial park, HengLi Town,  China
+				DongGuan  GuangDong,  523468
+				CN
+
+04-EE-E8   (hex)		MPEON Co.,Ltd
+800000-8FFFFF     (base 16)		MPEON Co.,Ltd
+				#927, Gyeonggi business Growh Center, Pangyo 2nd TechnoValley, 42, Changeop-ro, Sujeong-gu
+				Seongnam-si  Gyeonggi-do  13449
+				KP
+
+18-D7-93   (hex)		JFA Electronics Industry and Commerce EIRELI
+700000-7FFFFF     (base 16)		JFA Electronics Industry and Commerce EIRELI
+				Rua Flor das Pedras, 175
+				Belo Horizonte  Minas Gerais  30810-000
+				BR
+
+18-D7-93   (hex)		Hydrotechnik GmbH
+200000-2FFFFF     (base 16)		Hydrotechnik GmbH
+				Holzheimer Strasse  94-96
+				Limburg    65549
+				DE
+
+DC-36-43   (hex)		Orlaco Products B.V.
+C00000-CFFFFF     (base 16)		Orlaco Products B.V.
+				Albert Plesmanstraat 42
+				Barneveld    3772MN
+				NL
+
+DC-36-43   (hex)		OAK INFORMATION SYSTEM CO.
+800000-8FFFFF     (base 16)		OAK INFORMATION SYSTEM CO.
+				2-2-20 Higashishinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+DC-36-43   (hex)		KUANTECH (CAMBODIA) CORPORATION LIMITED
+A00000-AFFFFF     (base 16)		KUANTECH (CAMBODIA) CORPORATION LIMITED
+				PHUM CHORMPUL, KHUM P'PEL, SROK TRAMKORK
+				KINGDOM OF CAMBODIA  TAKEO PROVINCE  210209
+				KH
+
+08-26-AE   (hex)		Veth Propulsion bv
+D00000-DFFFFF     (base 16)		Veth Propulsion bv
+				Nanengat 17
+				Papendrecht    3356AA
+				NL
+
+08-26-AE   (hex)		Mass Electronics Pty Ltd
+E00000-EFFFFF     (base 16)		Mass Electronics Pty Ltd
+				12 McKechnie Drive
+				Eight Mile Plains  QLD  4113
+				AU
+
+98-8F-E0   (hex)		China Huaxin Post and Telecom Technologies Co., Ltd.
+700000-7FFFFF     (base 16)		China Huaxin Post and Telecom Technologies Co., Ltd.
+				5F, Building 1, Lane 60 Na Xian Road, Pudong District, Shanghai 201210 P.R.China
+				Shanghai    200127
+				CN
+
+98-8F-E0   (hex)		CEL Terminus (Shanghai) Information Technologies Co.,Ltd.
+E00000-EFFFFF     (base 16)		CEL Terminus (Shanghai) Information Technologies Co.,Ltd.
+				18F, Building 2, CES West Bund Center, No.277 Longlan Rd, Xuhui District,
+				Shanghai    200000
+				CN
+
+10-54-D2   (hex)		Annapurna labs
+800000-8FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+10-54-D2   (hex)		Lanao Communication Technology Limited
+600000-6FFFFF     (base 16)		Lanao Communication Technology Limited
+				#B2, Zhongbaotong Creative Park Changfa West Road No.34 Bantian
+				Shenzhen    518029
+				CN
+
+0C-86-29   (hex)		Ag Express Electronics
+400000-4FFFFF     (base 16)		Ag Express Electronics
+				6280 NE 14th St
+				Des Moines  IA  50313
+				US
+
+6C-93-08   (hex)		Liberty AV Solutions
+700000-7FFFFF     (base 16)		Liberty AV Solutions
+				1490 Garden of the Gods Road
+				Colorado Springs  CO  80907
+				US
+
+6C-93-08   (hex)		Uconfree technology(shenzhen)limited
+600000-6FFFFF     (base 16)		Uconfree technology(shenzhen)limited
+				Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China
+				SHENZHEN    518111
+				CN
+
+0C-86-29   (hex)		Annapurna labs
+300000-3FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+6C-93-08   (hex)		Hangzhou Risco System Co.,Ltd
+800000-8FFFFF     (base 16)		Hangzhou Risco System Co.,Ltd
+				No. 19, Naxian street, Liangzhu street, Yuhang District
+				Hangzhou City  Zhejiang Province  31000
+				CN
+
+30-43-D7   (hex)		Bodhi
+A00000-AFFFFF     (base 16)		Bodhi
+				3150 W. Prospect Road, Suite 330
+				Fort Lauderdale  FL  33309
+				US
+
+6C-93-08   (hex)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
+200000-2FFFFF     (base 16)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
+				Room 103,1st F,unit A,Buliding 3,No. 8,Xiyuan 1st Road,Sandun Town,Xihu District
+				HANGZHOU  ZHEJIANG  310000
+				CN
+
+30-43-D7   (hex)		Kesu (Shanghai) Electronic Technology Co., Ltd
+800000-8FFFFF     (base 16)		Kesu (Shanghai) Electronic Technology Co., Ltd
+				3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District
+				Shanghai    202150
+				CN
+
+30-43-D7   (hex)		PK Solutions LLC
+900000-9FFFFF     (base 16)		PK Solutions LLC
+				10811 E Harry
+				Wichita  KS  67207
+				US
+
+30-43-D7   (hex)		FIBERME COMMUNICATIONS LLC
+400000-4FFFFF     (base 16)		FIBERME COMMUNICATIONS LLC
+				1749 Old Meadow Rd.
+				McLean  VA  22102
+				US
+
+38-1F-26   (hex)		NOITAC sp. z o.o. sp.k.
+600000-6FFFFF     (base 16)		NOITAC sp. z o.o. sp.k.
+				Szlak 28/3
+				Kraków    31-153
+				PL
+
+38-1F-26   (hex)		JAESUNG INFORMATION & COMMUNICATION CO.LTD
+000000-0FFFFF     (base 16)		JAESUNG INFORMATION & COMMUNICATION CO.LTD
+				41-69, POWOL SAEMALGIL, YANG YANG-EUP
+				YANG YANG GUN    25017
+				KR
+
+38-1F-26   (hex)		Deutronic Elektronik GmbH
+B00000-BFFFFF     (base 16)		Deutronic Elektronik GmbH
+				Deutronicstraße 5
+				Adlkofen  Bayern  84166
+				DE
+
+38-1F-26   (hex)		Annapurna labs
+E00000-EFFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+38-1F-26   (hex)		RCE systems s.r.o.
+700000-7FFFFF     (base 16)		RCE systems s.r.o.
+				Svatopluka Cecha 2008/1d
+				Brno  CR  61200
+				CZ
+
+38-1F-26   (hex)		Sercomm Corporation.
+A00000-AFFFFF     (base 16)		Sercomm Corporation.
+				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+				Miao-Lih Hsuan    115
+				TW
+
+30-43-D7   (hex)		Motec GmbH
+B00000-BFFFFF     (base 16)		Motec GmbH
+				287 27 Road
+				Grand Junction  CO  81503
+				US
+
+CC-4F-5C   (hex)		Beijing Techao Weijia Technology Limited
+E00000-EFFFFF     (base 16)		Beijing Techao Weijia Technology Limited
+				Room 202, Floor 2, Building No. 3, No. 9 Xiaoying Road, Chaoyang District
+				Beijing    100101
+				CN
+
+1C-59-74   (hex)		Council Rock
+A00000-AFFFFF     (base 16)		Council Rock
+				11 Centre Park
+				Rochester    14614
+				US
+
+C4-A1-0E   (hex)		Hainan World Electronic Science and Techology Co.,Ltd
+600000-6FFFFF     (base 16)		Hainan World Electronic Science and Techology Co.,Ltd
+				Room 1502,15th Floor,Building 20,NO.487 Tianlin Road,Shanghai,200233 China
+				Shanghai  Shanghai  200233
+				CN
+
+C4-A1-0E   (hex)		Jiangsu Perceive World Technology Co.,Ltd.
+A00000-AFFFFF     (base 16)		Jiangsu Perceive World Technology Co.,Ltd.
+				4-5F,Hengsheng Science Park 70#,Zhonghui Ave 1588#,HuiShan District,Wuxi,Jiangsu,China
+				Wu xi  Jiangsu  214181
+				CN
+
+78-D4-F1   (hex)		Silla Industries
+100000-1FFFFF     (base 16)		Silla Industries
+				Via della Meccanica 2a
+				Padova  PD  35127
+				IT
+
+18-A5-9C   (hex)		Cuman
+100000-1FFFFF     (base 16)		Cuman
+				Al-Farabi 97/1
+				Nur-Sultan    010000
+				KZ
+
+C4-A1-0E   (hex)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
+900000-9FFFFF     (base 16)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
+				No.211 Tiangu 8th Road, High-tech Zone
+				Xi 'an   Shaanxi  710065
+				CN
+
+6C-15-24   (hex)		STERIS
+A00000-AFFFFF     (base 16)		STERIS
+				Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road
+				Bishops Stortford  herts  CM23 5GZ
+				GB
+
+C4-A1-0E   (hex)		Alio, Inc
+E00000-EFFFFF     (base 16)		Alio, Inc
+				10901 W. 120th Ave, Suite 380
+				Bloomfield  CO  80021
+				US
+
+70-50-E7   (hex)		Wall Box Chargers, S.L.
+500000-5FFFFF     (base 16)		Wall Box Chargers, S.L.
+				Paseo Castellana 95, 28 floor
+				Madrid  Madrid  28046
+				ES
+
+70-50-E7   (hex)		Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company
+A00000-AFFFFF     (base 16)		Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company
+				D01, Zone D, No. 6 (Yishun), Huangcun North Road, Tianhe District
+				Guangzhou    510660
+				CN
+
+70-50-E7   (hex)		Electronic's Time SRL
+200000-2FFFFF     (base 16)		Electronic's Time SRL
+				Via Madonna Piccola 32R/Q
+				Martina Franca  Taranto  74015
+				IT
+
+70-50-E7   (hex)		Yoctopuce
+700000-7FFFFF     (base 16)		Yoctopuce
+				Route de Cartigny 33
+				Cartigny    1236
+				CH
+
+70-50-E7   (hex)		Skychers Creations ShenZhen Limited
+300000-3FFFFF     (base 16)		Skychers Creations ShenZhen Limited
+				Room 907A, 9/F, Block T2, FongDa City, Longjing Village, Longzhu Avenue, Nanshan District
+				Shenzhen  Guangdong  518073
+				CN
+
+70-50-E7   (hex)		Elastics.cloud
+900000-9FFFFF     (base 16)		Elastics.cloud
+				1730 North First Street, 5th Floor
+				San Jose  CA  95112
+				US
+
+80-02-F4   (hex)		Lazer Safe Pty Ltd
+700000-7FFFFF     (base 16)		Lazer Safe Pty Ltd
+				27 Action Road
+				Perth  WA  6090
+				AU
+
+80-02-F4   (hex)		Beijing Cybercore
+200000-2FFFFF     (base 16)		Beijing Cybercore
+				A206,F2,Yard#12,Building#1,JingAn DongLi,Chaoyang
+				Beijing  Beijing  100028
+				CN
+
+80-02-F4   (hex)		Annapurna labs
+800000-8FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+8C-51-09   (hex)		Avxav Electronic Trading LLC
+600000-6FFFFF     (base 16)		Avxav Electronic Trading LLC
+				Office 534 Building # 6WA Dubai Airport Free Zone
+				Dubai  Dubai  33964
+				AE
+
+8C-51-09   (hex)		nerospec
+800000-8FFFFF     (base 16)		nerospec
+				9 Freda Road, Bromhof,Skyview Retail Park
+				Randburg  Gauteng  2169
+				ZA
+
+8C-51-09   (hex)		Surpedia Technologies Co., Ltd.
+D00000-DFFFFF     (base 16)		Surpedia Technologies Co., Ltd.
+				5F-1, No.212, Sec 3, Datong Rd.
+				Xhzhi Dist.  New Taipei City  22103
+				TW
+
+8C-51-09   (hex)		SHENZHEN LDROBOT CO., LTD.
+300000-3FFFFF     (base 16)		SHENZHEN LDROBOT CO., LTD.
+				Nanshan
+				Shenzhen    518000
+				CN
+
+8C-51-09   (hex)		IROOTELLUCKY Corp.
+E00000-EFFFFF     (base 16)		IROOTELLUCKY Corp.
+				609ho, 13, LS-ro
+				Gunpo-si  Gyeonggi-do  15843
+				KR
+
+0C-7F-ED   (hex)		Shenzhen MoreSense Technology Co., Ltd. 
+C00000-CFFFFF     (base 16)		Shenzhen MoreSense Technology Co., Ltd. 
+				#206 Building A1,#663 Bulong Road,Dafapu Community,Bantian Street,
+				Shenzhen  Guangdong  518129
+				CN
+
+0C-7F-ED   (hex)		Grandway Technology (Shenzhen) Limited
+700000-7FFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
+				Block 7, Zhu Keng Industrial Zone
+				Ping Shan District  Shenzhen  518118
+				CN
+
+0C-7F-ED   (hex)		TelX Systems
+B00000-BFFFFF     (base 16)		TelX Systems
+				UMM RAMOOL
+				DEIRA  DUBAI  48235
+				AE
+
+FC-61-79   (hex)		Signalinks Communication Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Signalinks Communication Technology Co.,Ltd
+				3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen
+				Shenzhen  Guangdong  518000
+				CN
+
+FC-61-79   (hex)		Int'Act Pty Ltd
+D00000-DFFFFF     (base 16)		Int'Act Pty Ltd
+				4 Pine Street
+				North Ipswich  Queensland  4305
+				AU
+
+0C-7F-ED   (hex)		Toast, Inc.
+100000-1FFFFF     (base 16)		Toast, Inc.
+				401 Park Drive, Suite 801
+				Boston  MA  02215
+				US
+
+30-3D-51   (hex)		The Heil Co dba AWTI 3rd Eye Cam
+800000-8FFFFF     (base 16)		The Heil Co dba AWTI 3rd Eye Cam
+				201 West Main Street, Suite 300
+				Chattanooga    37408
+				US
+
+FC-61-79   (hex)		Fulian Precision Electronics(Tianjin) Co., Ltd
+B00000-BFFFFF     (base 16)		Fulian Precision Electronics(Tianjin) Co., Ltd
+				No 36. North Street, West Zone, Economic & Technological Development Area, Tianjin, China
+				Tianjin  Tianjin  300457
+				CN
+
+FC-61-79   (hex)		Shenzhen Dptek Technology Co., Ltd.
+A00000-AFFFFF     (base 16)		Shenzhen Dptek Technology Co., Ltd.
+				Room 706, Building Pincui, Zhongcui Garden,Dafen Community, Buji Street, Longgang District
+				Shenzhen  Guangdong  518000
+				CN
+
+30-3D-51   (hex)		XOR UK Corporation Limited
+D00000-DFFFFF     (base 16)		XOR UK Corporation Limited
+				Unit 11-12, Stanhope Gate, Stanhope Rd
+				Camberley  Surrey  GU15 3DW
+				GB
+
+C0-D3-91   (hex)		 Celliber Technologies Pvt Limited
+B00000-BFFFFF     (base 16)		 Celliber Technologies Pvt Limited
+				No.1027, 24th Main, 11th Cross,
+				Bangalore  Karnataka  560102
+				IN
+
+2C-69-1D   (hex)		LG Electronics Inc.
+500000-5FFFFF     (base 16)		LG Electronics Inc.
+				LG Twin Towers, 128, Yeoui-daero, Yeongdeungpo-gu
+				Seoul    150-721
+				KR
+
+18-C3-F4   (hex)		Enertex Bayern GmbH
+100000-1FFFFF     (base 16)		Enertex Bayern GmbH
+				Ebermannstädter Str. 8
+				Forchheim  Bayern  91301
+				DE
+
+18-C3-F4   (hex)		General Test Systems
+300000-3FFFFF     (base 16)		General Test Systems
+				Building C–A7 Suite 805, 2190 Liuxian Avenue,Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+30-1F-9A   (hex)		Deep Sentinel 
+900000-9FFFFF     (base 16)		Deep Sentinel 
+				600 Main Street Suite C
+				PLEASANTON  CA  94566
+				US
+
+B8-D8-12   (hex)		Private
+F00000-FFFFFF     (base 16)		Private
+				445 Hoes Lane
+				PISCATAWAY  NJ  08854
+				US
+
+18-C3-F4   (hex)		Shenzhen Liandian Communication Technology Co.LTD
+800000-8FFFFF     (base 16)		Shenzhen Liandian Communication Technology Co.LTD
+				1307, building A4, workshop 2, LiLang International Jewelry Industrial Park, 31 Bulan Road, xialilang community, Nanwan street, Longgang District
+				Shenzhen  Guangdong  518112
+				CN
+
+18-C3-F4   (hex)		Synaptics, Inc
+500000-5FFFFF     (base 16)		Synaptics, Inc
+				1251 McKay Drive
+				San Jose  CA   95131-1709
+				US
+
+10-DC-B6   (hex)		Hitachi Energy Switzerland Ltd
+100000-1FFFFF     (base 16)		Hitachi Energy Switzerland Ltd
+				Fabrikstrasse 3
+				Lenzburg    5600
+				CH
+
+88-3C-C5   (hex)		shenzhen Feng Jing Sheng Electronics Technology Co.,Ltd
+300000-3FFFFF     (base 16)		shenzhen Feng Jing Sheng Electronics Technology Co.,Ltd
+				Fucheng Subdistrict
+				Shenzhen  Guangdong  518000
+				CN
+
+88-3C-C5   (hex)		Shanghai Ucan Automation Equipment Co., Ltd.
+500000-5FFFFF     (base 16)		Shanghai Ucan Automation Equipment Co., Ltd.
+				4F, Building (5), No. 8, Hangyi Road, Fengxian District, Shanghai
+				Shanghai    201499
+				CN
+
+18-74-E2   (hex)		Aggressive Electronics Manufacturing Services Pvt Limited
+400000-4FFFFF     (base 16)		Aggressive Electronics Manufacturing Services Pvt Limited
+				Plot  No 264, Sector 6, IMT Manesar
+				MANESAR  Haryana  122050
+				IN
+
+88-3C-C5   (hex)		NETGEN HITECH SOLUTIONS LLP
+200000-2FFFFF     (base 16)		NETGEN HITECH SOLUTIONS LLP
+				B 301 KNOX PLAZA MALAD WEST
+				MUMBAI  MAHARASHTRA  400064
+				IN
+
+58-47-CA   (hex)		Shenzhen C & D Electronics Co., Ltd.
+600000-6FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+58-47-CA   (hex)		Kingnuo Intelligent Technology (Jiaxing) Co., Ltd.
+900000-9FFFFF     (base 16)		Kingnuo Intelligent Technology (Jiaxing) Co., Ltd.
+				ROOM.1202,Yongyue Building, YOUCHEGANG TOWN?XIUZHOU DISTRICT
+				Jiaxing  Zhejiang  314000
+				CN
+
+E8-78-29   (hex)		Ampner Ltd
+B00000-BFFFFF     (base 16)		Ampner Ltd
+				Lestikuja 2
+				Vaasa    65380
+				FI
+
+58-47-CA   (hex)		AZURE SUMMIT TECHNOLOGY
+E00000-EFFFFF     (base 16)		AZURE SUMMIT TECHNOLOGY
+				1335 Gateway Drive, Suite 200
+				Melbourne  FL  32901
+				US
+
+D4-20-00   (hex)		Monolith Electric?Changzhou?Co.,Ltd.
+500000-5FFFFF     (base 16)		Monolith Electric?Changzhou?Co.,Ltd.
+				No.8,Huashan Road,Xinbei District Changzhou,Jiangsu,China
+				Changzhou  Jiangsu  213000
+				CN
+
+D4-20-00   (hex)		HiAR Information Technology Co.,Ltd
+600000-6FFFFF     (base 16)		HiAR Information Technology Co.,Ltd
+				Room 501, no.570, Shengxia Road, Pudong  New Area,
+				Shanghai    200120
+				CN
+
+D4-20-00   (hex)		Arbe Robotics Ltd.
+300000-3FFFFF     (base 16)		Arbe Robotics Ltd.
+				107, Hashmonaim st.
+				Tel Aviv    6713321
+				IL
+
+C4-83-72   (hex)		VIE STYLE,INC,
+A00000-AFFFFF     (base 16)		VIE STYLE,INC,
+				5-10-14 Zaimokuza
+				Kamakura  KN  2480013
+				JP
+
+C4-83-72   (hex)		Compumedics Germany GmbH
+000000-0FFFFF     (base 16)		Compumedics Germany GmbH
+				Josef-Schüttler-Straße 2
+				Singen    78224
+				DE
+
+C4-83-72   (hex)		Shenzhen King Will Technology Co., LTD
+100000-1FFFFF     (base 16)		Shenzhen King Will Technology Co., LTD
+				Room 202-207, Building A7, Tianliao Industrial Zone, Xueyuan Avenue, Taoyuan Street, Nanshan District
+				Shenzhen  Guangdong  518071
+				CN
+
+D4-BA-BA   (hex)		Shenzhen Double Better Technology Co., Ltd
+700000-7FFFFF     (base 16)		Shenzhen Double Better Technology Co., Ltd
+				12A5, Building T1, Fangda Plaza, Beihuan Avenue, Taoyuan Street, Nanshan District
+				Shenzhen    518000
+				CN
+
+D4-BA-BA   (hex)		SHENZHEN ACTION TECHNOLOGIES CO., LTD.
+000000-0FFFFF     (base 16)		SHENZHEN ACTION TECHNOLOGIES CO., LTD.
+				3/F,LIFENG BUILDING,42# OF LIUXIAN 1ST ROAD,BAO'AN 71ST DISTRICT,
+				Shenzhen  GUANGDONG  518101
+				CN
+
+D4-BA-BA   (hex)		GuangZhou Ostec Electronic Technology Co.,Limited
+200000-2FFFFF     (base 16)		GuangZhou Ostec Electronic Technology Co.,Limited
+				2of No.8, West Lane,Jiangcheng Road,Bangjiang East Village,Dalong Street,Panyu District,Guangzhou City,Guangdong,P.R.China
+				Guangzhou    511400
+				CN
+
+D4-BA-BA   (hex)		Actiontec Electronics Inc.
+A00000-AFFFFF     (base 16)		Actiontec Electronics Inc.
+				2445 Augustine Dr #501
+				Santa Clara   CA  95054
+				US
+
+D4-BA-BA   (hex)		Shenzhen Yueer Innovation Technology Co., Ltd
+600000-6FFFFF     (base 16)		Shenzhen Yueer Innovation Technology Co., Ltd
+				????????????????2?2??3?B08
+				??    518000
+				CN
+
+D4-BA-BA   (hex)		Qingdao Vzense Technology Co., Ltd.
+B00000-BFFFFF     (base 16)		Qingdao Vzense Technology Co., Ltd.
+				3 Building, Qingdao Research Institute of Beihang University, No. 393 Songling Road, Laoshan District
+				Qingdao  Shandong  266000
+				CN
+
+C4-98-94   (hex)		Shenzhen C & D Electronics Co., Ltd.
+700000-7FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+				ShenZhen  GuangDong  518000
+				CN
+
+C4-98-94   (hex)		shenzhen lanodo technology Co., Ltd
+500000-5FFFFF     (base 16)		shenzhen lanodo technology Co., Ltd
+				Room 501 Building D, Qiaoan Industry park, No 308 Wuhe Road, Guanlan, Longhua District
+				Shenzhen  Guangdong  518000
+				CN
+
+C4-98-94   (hex)		Jiangsu AIDriving Co.,Ltd.
+D00000-DFFFFF     (base 16)		Jiangsu AIDriving Co.,Ltd.
+				Room 1401,Beidou Building,6 Huida Road,Jiangbei NewDistrict
+				Nanjing  Jiangsu  210032
+				CN
+
+D4-BA-BA   (hex)		Camozzi Automation SpA
+E00000-EFFFFF     (base 16)		Camozzi Automation SpA
+				Via Eritrea 20/I
+				BRESCIA  ITALY  25080
+				IT
+
+D0-96-86   (hex)		 CertusNet Information Technology Co.,LTD
+D00000-DFFFFF     (base 16)		 CertusNet Information Technology Co.,LTD
+				6th floor,Shouxiang Technology Building,51 Xueyuan Road,Haidian District,Beijing
+				Beijing  Beijing  100083
+				CN
+
+D0-96-86   (hex)		TMLake Technology Ltd.,
+200000-2FFFFF     (base 16)		TMLake Technology Ltd.,
+				RM2403, Building 1, Block B, KEGU 1st Street, BDA
+				Beijing  Beijing  100176
+				CN
+
+D0-96-86   (hex)		Private
+700000-7FFFFF     (base 16)		Private
+
+D0-96-86   (hex)		ECS s.r.l.
+C00000-CFFFFF     (base 16)		ECS s.r.l.
+				Via dell'Artigianato n. 24
+				Belluno  BL  32100
+				IT
+
+4C-74-A7   (hex)		Shenzhen Hollyland Technology Co.,Ltd
+100000-1FFFFF     (base 16)		Shenzhen Hollyland Technology Co.,Ltd
+				8F, 5D Building, Skyworth Innovation Valley, Tangtou, Shiyan, Baoan District Shenzhen, China.
+				shenzhen  Guangdong  518000
+				CN
+
+4C-74-A7   (hex)		Cyanview
+200000-2FFFFF     (base 16)		Cyanview
+				26, Rue de la Foire
+				Papignies    7861
+				BE
+
+4C-74-A7   (hex)		ABB LV Installation Materials Co., Ltd. Beijing
+600000-6FFFFF     (base 16)		ABB LV Installation Materials Co., Ltd. Beijing
+				No.17 Kangding Street, Beijing Economic-Technological Development Area 100176, P.R. China
+				Beijing    100176
+				CN
+
+D0-96-86   (hex)		withnetworks
+E00000-EFFFFF     (base 16)		withnetworks
+				13, Hangang-daero 11-gil, Yongsan-gu
+				Seoul    04379
+				KR
+
+4C-74-A7   (hex)		AGILITY ROBOTICS, INC.
+500000-5FFFFF     (base 16)		AGILITY ROBOTICS, INC.
+				32114 MALLARD AVE BUILDING 52
+				TANGENT  OR  97389
+				US
+
+4C-74-A7   (hex)		traplinked Gmbh
+B00000-BFFFFF     (base 16)		traplinked Gmbh
+				Zollhof 7
+				Nürnberg  BY  90443
+				DE
+
+D4-61-37   (hex)		Beijing TAIXINYUN Technology Co.,Ltd
+400000-4FFFFF     (base 16)		Beijing TAIXINYUN Technology Co.,Ltd
+				Rm 2056 , Building 8, Xiaoyun li , ChaoYang District
+				Beijing  China  100016
+				CN
+
+D4-61-37   (hex)		Beijing Shudun Information Technology Co., Ltd
+700000-7FFFFF     (base 16)		Beijing Shudun Information Technology Co., Ltd
+				6 / F, building 1, zone 3
+				Beijing  Hanwei International Plaza, South Fourth Ring West Road, Fengtai District  100070
+				CN
+
+D4-61-37   (hex)		Private
+900000-9FFFFF     (base 16)		Private
+
+F0-22-1D   (hex)		Hangzhou Gold Electronic Equipment Co., Ltd
+A00000-AFFFFF     (base 16)		Hangzhou Gold Electronic Equipment Co., Ltd
+				Room 201, floor 2, building F, Haichuang Park, Zhongdian Haikang Group Co., Ltd., No. 198, aicheng street, Wuchang Street, Yuhang District
+				 Hangzhou  Zhejiang   310000
+				CN
+
+F0-22-1D   (hex)		Chonel Industry?shanghai?Co., Ltd.
+200000-2FFFFF     (base 16)		Chonel Industry?shanghai?Co., Ltd.
+				Room 501?Building 24?Lane 8633?Zhongchun Road?Minghang District
+				Shanghai  Shanghai  201100
+				CN
+
+A0-02-4A   (hex)		Dongguan Amsamotion Automation Technology Co., Ltd
+500000-5FFFFF     (base 16)		Dongguan Amsamotion Automation Technology Co., Ltd
+				Block A, Zosun Intelligence Creation Zone         
+				Dongguan  No.9 Yizhan Road, Yuanwubian Streeet Nancheng District, Gunagdong  523000
+				CN
+
+0C-CC-47   (hex)		Rich Source Precision IND., Co., LTD.
+A00000-AFFFFF     (base 16)		Rich Source Precision IND., Co., LTD.
+				8F., No. 219, Sec. 2, New Taipei Blvd.
+				New Taipei City  Xinzhuang Dist  242
+				TW
+
+0C-CC-47   (hex)		DMECOM TELECOM CO.,LTD.
+500000-5FFFFF     (base 16)		DMECOM TELECOM CO.,LTD.
+				1 F., No. 3, Ln. 72, Yumen Rd., Xitun Dist., Taichung City 40764, Taiwan (R.O.C.)
+				Taichung     407
+				TW
+
+0C-CC-47   (hex)		KUMI ELECTRONIC COMPONENTS
+C00000-CFFFFF     (base 16)		KUMI ELECTRONIC COMPONENTS
+				7/307, 302-7, 3-dan 1-ro, Gumi-si, Gyeongsangbuk-do
+				Gumi-si  Gyeongsangbuk-do  KOREA(SOUTH)  39391
+				KR
+
+0C-CC-47   (hex)		Spot AI, Inc.
+B00000-BFFFFF     (base 16)		Spot AI, Inc.
+				1350 Old Bayshore Hwy #920
+				Burlingame  CA  94010
+				US
+
+0C-CC-47   (hex)		Annapurna labs
+600000-6FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+0C-CC-47   (hex)		GODOX Photo Equipment Co., Ltd.
+D00000-DFFFFF     (base 16)		GODOX Photo Equipment Co., Ltd.
+				Building 2, Yaochuan Industrial Zone, Tangwei Community, Fuhai Street, Bao'an District, Shenzhen 518103,China
+				Shenzhen    518103
+				CN
+
+0C-CC-47   (hex)		Sun Yan International Trading Ltd.
+200000-2FFFFF     (base 16)		Sun Yan International Trading Ltd.
+				Unit F,27/F,Maxgrand Plaza,3 Tai Yan Street, San Po Kong, Kowloon, Hong Kong, China
+				Hong Kong    999077
+				CN
+
+84-B3-86   (hex)		Velocio Networks, Inc.
+A00000-AFFFFF     (base 16)		Velocio Networks, Inc.
+				2613 Vista Drive
+				Huntsville  AL  35803
+				US
+
+84-B3-86   (hex)		NetworX
+800000-8FFFFF     (base 16)		NetworX
+				5065 Commercial Circle
+				Concord  CA  94520
+				US
+
+84-B3-86   (hex)		NINGBO XINSUAN TECHNOLOGY CO.,LTD
+E00000-EFFFFF     (base 16)		NINGBO XINSUAN TECHNOLOGY CO.,LTD
+				Room 409, No. 68, Changshou East Road, Yinzhou District
+				NINGBO  ZHEJIANG  315100
+				CN
+
+C4-A5-59   (hex)		Shenzhen Meishifu Technology Co.,Ltd.
+900000-9FFFFF     (base 16)		Shenzhen Meishifu Technology Co.,Ltd.
+				217, Huichao Building, A3(A4), Yantian Industrial Zone, Yantian Community, Xixiang Street, Bao 'an District
+				Shenzhen  Guangdong  518000
+				CN
+
+C4-A5-59   (hex)		ALTAM SYSTEMS SL
+C00000-CFFFFF     (base 16)		ALTAM SYSTEMS SL
+				Carrer Orient 78-84, 2-8
+				Sant Cugat del Valles  Barcelona  08172
+				ES
+
+4C-74-A7   (hex)		KYOCERA CORPORATION
+E00000-EFFFFF     (base 16)		KYOCERA CORPORATION
+				3-7-1, MINATOMIRAI, NISHI-KU,
+				YOKOHAMA-SHI   KANAGAWA  2200012
+				JP
+
+70-5A-6F   (hex)		WiBASE Industrial Solutions Inc.
+700000-7FFFFF     (base 16)		WiBASE Industrial Solutions Inc.
+				17F., No.3-1, Park St., Nangang Dist.,, Taiwan R.O.C.
+				 Taipei City     115
+				TW
+
+C4-A5-59   (hex)		Archermind Japan Co.,Ltd.
+000000-0FFFFF     (base 16)		Archermind Japan Co.,Ltd.
+				4F Shinagawa East One Tower, 2-16-1, Konan
+				Minato-ku  Tokyo  1080075
+				JP
+
+70-5A-6F   (hex)		Acer Connect
+500000-5FFFFF     (base 16)		Acer Connect
+				8F,88, Sec. 1, Xintai 5th Rd. Xizhi
+				New Taipei    22181
+				TW
+
+8C-5D-B2   (hex)		Yuzhou Zhongnan lnformation Technology Co.,Ltd
+300000-3FFFFF     (base 16)		Yuzhou Zhongnan lnformation Technology Co.,Ltd
+				Yuzhou Juntaiban Lianluowan Road 2
+				Yuzhou    461670
+				CN
+
+8C-5D-B2   (hex)		Cleartex s.r.o.
+700000-7FFFFF     (base 16)		Cleartex s.r.o.
+				Ampérova 649
+				Liberec 23  Czech republic  46312
+				CZ
+
+8C-5D-B2   (hex)		CoreTigo
+400000-4FFFFF     (base 16)		CoreTigo
+				Giborei Israel 5 Natanya
+				Natanya    4250405
+				IL
+
+C0-EA-C3   (hex)		NEXSEC Incorporated
+200000-2FFFFF     (base 16)		NEXSEC Incorporated
+				Room 201, Floor 2, Unit 2, Building 15, No.3 Gaolizhang Road, Haidian District
+				Beijing    100094
+				CN
+
+C0-EA-C3   (hex)		Trumeter
+C00000-CFFFFF     (base 16)		Trumeter
+				Pilot Mill, Alfred Street
+				Manchester  lancashire  BL9 9JR
+				GB
+
+C0-EA-C3   (hex)		Beijing Zhongyuanyishang Technology Co Ltd
+E00000-EFFFFF     (base 16)		Beijing Zhongyuanyishang Technology Co Ltd
+				Unit 404, 4th Floor, Building 12, Yard 69, Fushi Road, Haidian District, Beijing
+				Beijing    100000
+				CN
+
+C0-EA-C3   (hex)		Tokoz a.s.
+400000-4FFFFF     (base 16)		Tokoz a.s.
+				Santiniho 20/26
+				Ž?ár nad Sázavou    591 02
+				CZ
+
+7C-45-F9   (hex)		Hangzhou LUXAR Technologies Co., Ltd
+300000-3FFFFF     (base 16)		Hangzhou LUXAR Technologies Co., Ltd
+				23F, NO.17 Jugong Road, Binjiang Zone
+				Hangzhou  Zhejiang  310051
+				CN
+
+7C-45-F9   (hex)		IngDan China-chip Electronic Technology(Wuxi) Co.,Ltd.
+B00000-BFFFFF     (base 16)		IngDan China-chip Electronic Technology(Wuxi) Co.,Ltd.
+				Room 1407-1410, Building C, Huirong Business Plaza, No. 26, Hefeng Road, Xinwu District, Wuxi City
+				Wuxi    214111
+				CN
+
+7C-45-F9   (hex)		SENSeOR
+000000-0FFFFF     (base 16)		SENSeOR
+				1198, avenue du Docteur Maurice Donat,  
+				Mougins     06250
+				FR
+
+7C-45-F9   (hex)		qiio AG
+A00000-AFFFFF     (base 16)		qiio AG
+				Am Wasser 24
+				Zurich  Zurich  8049
+				CH
+
+5C-6A-EC   (hex)		Shenzhen Olax Technology CO.,Ltd
+A00000-AFFFFF     (base 16)		Shenzhen Olax Technology CO.,Ltd
+				Room 6008, 6th Floor, Jincheng(Baode) Industrial Area, Lixin South Road No.201, FUyong,Baoan,Shenzhen.Guangdong,China
+				Shenzhen  Guangdong  518000
+				CN
+
+5C-6A-EC   (hex)		FEMTOCELL
+600000-6FFFFF     (base 16)		FEMTOCELL
+				#2506,122,Jomaru-ro 385beon-gil, Bucheon-si, Gyeonggi-do, Koera,14556
+				 Bucheon-si    14556
+				KR
+
+D0-93-95   (hex)		Nesecure Telecom Pvt Ltd
+300000-3FFFFF     (base 16)		Nesecure Telecom Pvt Ltd
+				Fl No 503, S No 126, Pl No 22/26, Prakash uday, Katraj, Pune-411046
+				Pune  Mahrashtra  411046
+				IN
+
+D0-93-95   (hex)		Annapurna labs
+800000-8FFFFF     (base 16)		Annapurna labs
+				Matam Scientific Industries Center,   Building 8.2
+				Mail box 15123  Haifa  3508409
+				IL
+
+D0-16-F0   (hex)		worldcns inc.
+B00000-BFFFFF     (base 16)		worldcns inc.
+				174, Namjo-ro 1-gil, Jocheon-eup
+				Jeju-si  Jeju-do  63335
+				KR
+
+D0-16-F0   (hex)		BEIJING XIAOYUAN WENHUA CULTURE COMMUNICATION CO., LTD.
+400000-4FFFFF     (base 16)		BEIJING XIAOYUAN WENHUA CULTURE COMMUNICATION CO., LTD.
+				Unit 1,F01,5th Floor,Building 1,No.8,Guangshun South Street,Chaoyang District
+				Beijing    100102
+				CN
+
+D0-16-F0   (hex)		QBIC COMMUNICATIONS DMCC
+100000-1FFFFF     (base 16)		QBIC COMMUNICATIONS DMCC
+				1003 Palladium Tower JLT Dubai, UAE
+				Dubai    393518
+				AE
+
+E0-3C-1C   (hex)		Ocamar Technologies (Shanghai) Co.,Ltd.
+900000-9FFFFF     (base 16)		Ocamar Technologies (Shanghai) Co.,Ltd.
+				2F, Block C, Bld. 20, No. 2388 Chenhang Road, Minhang District
+				Shanghai  Shanghai  201100
+				CN
+
+60-15-92   (hex)		Unipi Technology s.r.o.
+700000-7FFFFF     (base 16)		Unipi Technology s.r.o.
+				Okružní 834/29a
+				Brno  Lesná  638 00
+				CZ
+
+54-08-3B   (hex)		Update Systems Inc.
+800000-8FFFFF     (base 16)		Update Systems Inc.
+				10545 Baur Blvd.
+				Saint Louis  MO  63132
+				US
+
+54-08-3B   (hex)		Shenzhen Liandian Communication Technology Co.LTD
+000000-0FFFFF     (base 16)		Shenzhen Liandian Communication Technology Co.LTD
+				1307, building A4, workshop 2, LiLang International Jewelry Industrial Park, 31 Bulan Road, xialilang community, Nanwan street, Longgang District
+				Shenzhen  Guangdong  518112
+				CN
+
+70-06-92   (hex)		BOSSCCTV CO., LTD
+300000-3FFFFF     (base 16)		BOSSCCTV CO., LTD
+				6F.-6, No. 22, Sec. 2, Keelung Rd., Xinyi Dist.
+				Taipei City  Taiwan (R.O.C.)  11052
+				TW
+
+70-06-92   (hex)		Techology, LLC
+000000-0FFFFF     (base 16)		Techology, LLC
+				2335 S Ellis St
+				Lakewood  CO  80228
+				US
+
+70-06-92   (hex)		CANAAN CREATIVE CO.,LTD.
+500000-5FFFFF     (base 16)		CANAAN CREATIVE CO.,LTD.
+				Building 1, Yard 1, No.81 Beiqing Road, Haidian District
+				Beijing    100144
+				CN
diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt
index 704a346..92aeaac 100644
--- a/hwdb.d/ma-small.txt
+++ b/hwdb.d/ma-small.txt
@@ -1,29091 +1,31680 @@
-OUI                                                         Organization                                 
-OUI-36/MA-S Range                                           Organization                                 
-                                                            Address                                      
-
-70-B3-D5   (hex)		TELEPLATFORMS
-F2F000-F2FFFF     (base 16)		TELEPLATFORMS
-				Polbina st., 3/1
-				Moscow    109388
-				RU
-
-70-B3-D5   (hex)		2M Technology
-719000-719FFF     (base 16)		2M Technology
-				802 Greenview Drive 
-				Grand Prairie  TX  75050
-				US
-
-70-B3-D5   (hex)		Truecom Telesoft Private Limited
-9FC000-9FCFFF     (base 16)		Truecom Telesoft Private Limited
-				2nd Floor, Block N, Safal Mondeal Retail Park, S.G Highway, Bodakdev
-				Ahmedabad  Gujarat  380056
-				IN
-
-70-B3-D5   (hex)		DSILOG
-577000-577FFF     (base 16)		DSILOG
-				104 rue Marcel Pagnol
-				Voreppe    38340
-				FR
-
-70-B3-D5   (hex)		Radikal d.o.o.
-56F000-56FFFF     (base 16)		Radikal d.o.o.
-				J. Mise 8
-				Sesvete  Sesvete  10360
-				HR
-
-70-B3-D5   (hex)		OSAKI DATATECH CO., LTD.
-A0F000-A0FFFF     (base 16)		OSAKI DATATECH CO., LTD.
-				2-1-10 Higashi-Gotanda Shinagawa-ku
-				Tokyo    141-0022
-				JP
-
-70-B3-D5   (hex)		Ochno AB
-03A000-03AFFF     (base 16)		Ochno AB
-				c/o Westras, Kopparbergsv 6
-				Västerås    72213
-				SE
-
-70-B3-D5   (hex)		Sanwa New Tec Co.,Ltd
-155000-155FFF     (base 16)		Sanwa New Tec Co.,Ltd
-				6536 Honjyou
-				Kunitomi-cho Higashimorokata-gun   Miyazaki  880-1101
-				JP
-
-70-B3-D5   (hex)		VECTOR.CO.,LTD.
-D33000-D33FFF     (base 16)		VECTOR.CO.,LTD.
-				2-12-16 Ekiminami
-				Kosai  Shizuoka  431-0427
-				JP
-
-70-B3-D5   (hex)		Acrodea, Inc.
-6A4000-6A4FFF     (base 16)		Acrodea, Inc.
-				3F, Daisan Yamada Bldg., 22 Aizumi-cho
-				Shinjuku-ku  Tokyo  1600005
-				JP
-
-70-B3-D5   (hex)		ООО РОНЕКС
-F3E000-F3EFFF     (base 16)		ООО РОНЕКС
-				Автомобильный проезд, д. 10, стр. 4, пом. 201
-				Москва  Россия, Московская область  109052
-				RU
-
-70-B3-D5   (hex)		Clearly IP Inc
-9B0000-9B0FFF     (base 16)		Clearly IP Inc
-				2416 Industrial Dr Unit F
-				Neenah  WI  54956
-				US
-
-70-B3-D5   (hex)		BARCO, s.r.o.
-62F000-62FFFF     (base 16)		BARCO, s.r.o.
-				Hradistska 849
-				Buchlovice    68708
-				CZ
-
-70-B3-D5   (hex)		BRS Sistemas Eletrônicos
-356000-356FFF     (base 16)		BRS Sistemas Eletrônicos
-				Rua Gomes de Freitas, 491 / 204
-				Porto Alegre  RS  91380-000
-				BR
-
-70-B3-D5   (hex)		VITEC
-D61000-D61FFF     (base 16)		VITEC
-				99 rue pierre sémard
-				Chatillon  France  92320
-				FR
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-A34000-A34FFF     (base 16)		RCH ITALIA SPA 
-				VIA CENDON 39
-				SILEA   TREVISO   31057
-				IT
-
-70-B3-D5   (hex)		Wagner Group GmbH
-59A000-59AFFF     (base 16)		Wagner Group GmbH
-				Schleswigstrasse 1-5
-				Langenhagen    30853
-				DE
-
-70-B3-D5   (hex)		FX TECHNOLOGY LIMITED
-FCE000-FCEFFF     (base 16)		FX TECHNOLOGY LIMITED
-				38a High Street, Northwood
-				Middlesex  -  HA6 1BN
-				GB
-
-70-B3-D5   (hex)		CT Company
-667000-667FFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-70-B3-D5   (hex)		Zhejiang Zhaolong Interconnect Technology Co.,Ltd
-A68000-A68FFF     (base 16)		Zhejiang Zhaolong Interconnect Technology Co.,Ltd
-				Shilin Industrial Zone,Xinshi, Deqing,Zhejiang,China
-				Deqing  Zhejiang  313200
-				CN
-
-70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
-C7A000-C7AFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
-				78-2 Buncheon-ri, Bongdam-eup
-				Hwaseong-city  Gyungki-do  445-894
-				KR
-
-70-B3-D5   (hex)		Private
-6F4000-6F4FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-1FC000-1FCFFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		LLC NPO Svyazkomplektservis
-588000-588FFF     (base 16)		LLC NPO Svyazkomplektservis
-				Bronnitskaya str., 3
-				Podolsk    Moscow region  142103
-				RU
-
-70-B3-D5   (hex)		Equos Research Co., Ltd
-34D000-34DFFF     (base 16)		Equos Research Co., Ltd
-				Akihabara Daibiru 7F, 1-18-13 Sotokanda
-				Chiyoda-ku  Tokyo  101-0021
-				JP
-
-70-B3-D5   (hex)		Aetina Corporation
-171000-171FFF     (base 16)		Aetina Corporation
-				2F-1, No.237, Sec.1, Datong Rd., Xizhi Dist.,
-				New Taipei City   No State  221
-				TW
-
-70-B3-D5   (hex)		ECOINET
-420000-420FFF     (base 16)		ECOINET
-				519, 2 Gasandigital 1ro, Geumcheon-gu
-				seoul    08591
-				KR
-
-70-B3-D5   (hex)		Southern Ground Audio LLC
-CD4000-CD4FFF     (base 16)		Southern Ground Audio LLC
-				101 Gardner Park
-				Peachtree City  GA  30269
-				US
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-13A000-13AFFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach    51465
-				DE
-
-70-B3-D5   (hex)		Hermann Automation GmbH
-B2F000-B2FFFF     (base 16)		Hermann Automation GmbH
-				Erlenwiese 15
-				Mengerskirchen  Hessen  D-35794
-				DE
-
-70-B3-D5   (hex)		Worldsensing
-2C7000-2C7FFF     (base 16)		Worldsensing
-				Carrer Viriat 47, Edificio Numancia 1 7th floor
-				Barcelona  - Please Choose -  08014
-				ES
-
-70-B3-D5   (hex)		BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Ş.
-258000-258FFF     (base 16)		BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Ş.
-				Kimya Sanayicileri Org. San. Bolgesi Organik Cad. No:31
-				Istanbul  Tuzla   34956
-				TR
-
-70-B3-D5   (hex)		wtec GmbH
-ABD000-ABDFFF     (base 16)		wtec GmbH
-				Dornbachstrasse 1a
-				Bad Homburg    61352
-				DE
-
-70-B3-D5   (hex)		DAO QIN TECHNOLOGY CO.LTD.
-3BD000-3BDFFF     (base 16)		DAO QIN TECHNOLOGY CO.LTD.
-				No. 359, Zhongxiao Rd
-				Chishang Township  Taitung County  958
-				TW
-
-70-B3-D5   (hex)		Ascon Tecnologic S.r.l.
-57E000-57EFFF     (base 16)		Ascon Tecnologic S.r.l.
-				via Indipendenza, 56
-				Vigevano  PV  27029
-				IT
-
-70-B3-D5   (hex)		Private
-2D7000-2D7FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Idneo Technologies S.A.U.
-CF8000-CF8FFF     (base 16)		Idneo Technologies S.A.U.
-				Gran Via Carlos III , 98 Planta 5
-				Barcelona  Barcelona  08028
-				ES
-
-70-B3-D5   (hex)		Arevita
-5E1000-5E1FFF     (base 16)		Arevita
-				Baltu ave 145
-				Kaunas  Select  47125
-				LT
-
-70-B3-D5   (hex)		Virsae Group Ltd
-151000-151FFF     (base 16)		Virsae Group Ltd
-				B:HIVE, 74 Taharoto Road, Smales Farm
-				Takapuna  Auckland  0622
-				NZ
-
-70-B3-D5   (hex)		Automata GmbH & Co. KG
-1F9000-1F9FFF     (base 16)		Automata GmbH & Co. KG
-				Gewerbering 5
-				Ried  Bavaria  86510
-				DE
-
-70-B3-D5   (hex)		AMEDTEC Medizintechnik Aue GmbH
-50A000-50AFFF     (base 16)		AMEDTEC Medizintechnik Aue GmbH
-				Schneeberger Str. 5
-				Aue    08280
-				DE
-
-70-B3-D5   (hex)		OCEANCCTV LTD
-FD5000-FD5FFF     (base 16)		OCEANCCTV LTD
-				4F., No. 1, Ln. 297, Xinyi Rd.,Banqiao Dist.,
-				New Taipei City    220
-				TW
-
-70-B3-D5   (hex)		Blake UK
-9DA000-9DAFFF     (base 16)		Blake UK
-				177-187, Rutland Road
-				Sheffield  --select--  S3 9PT
-				GB
-
-70-B3-D5   (hex)		Angora Networks
-822000-822FFF     (base 16)		Angora Networks
-				Alacaatli Mah. Park Cad 47/31, Cayyolu
-				Ankara    06810
-				TR
-
-70-B3-D5   (hex)		Clever Devices
-A2B000-A2BFFF     (base 16)		Clever Devices
-				300 Crossways Park Dr
-				Woodbury  NY  11797
-				US
-
-70-B3-D5   (hex)		Sikom AS
-237000-237FFF     (base 16)		Sikom AS
-				Neptunvegen 6
-				Verdal    7652
-				NO
-
-70-B3-D5   (hex)		MIRAE INFORMATION TECHNOLOGY CO., LTD.
-056000-056FFF     (base 16)		MIRAE INFORMATION TECHNOLOGY CO., LTD.
-				GYEONGGI-DO
-				SEONGNAM-SI  JUNGWON-GU  13376
-				KR
-
-70-B3-D5   (hex)		Invent Vision - iVision Sistemas de Imagem e Visão S.A.
-E29000-E29FFF     (base 16)		Invent Vision - iVision Sistemas de Imagem e Visão S.A.
-				R. Prof. José Vieira de Mendonça, 770, 2° andar - BHTEC, Parque Tecnológico de Belo Horizonte
-				Belo Horizonte  Minas Gerais  31310-260
-				BR
-
-70-B3-D5   (hex)		COSMOIT.CO.LTD
-754000-754FFF     (base 16)		COSMOIT.CO.LTD
-				14Fl., Ace Twin Tower II, 273, Digital-ro, Guro-gu
-				Seoul    08381
-				KR
-
-70-B3-D5   (hex)		Sicon srl
-BEE000-BEEFFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Sanmina Israel
-66D000-66DFFF     (base 16)		Sanmina Israel
-				Koren Industrial Zone , POBox 102
-				Maalot  Israel  2101002
-				IL
-
-70-B3-D5   (hex)		XANTIA SA
-33F000-33FFFF     (base 16)		XANTIA SA
-				Chemin du Longchamps 99
-				Bienne    2504
-				CH
-
-70-B3-D5   (hex)		Acutronic Link Robotics AG
-21A000-21AFFF     (base 16)		Acutronic Link Robotics AG
-				Calle Venta de la Estrella, 6 Pab. 130
-				VITORIA-GASTEIZ  ALAVA  01003
-				ES
-
-70-B3-D5   (hex)		Xiamen Beogold Technology Co. Ltd.
-490000-490FFF     (base 16)		Xiamen Beogold Technology Co. Ltd.
-				 11F Amoy Institute of Technovation,Jimei District
-				Xiamen  Fujian  361021
-				CN
-
-70-B3-D5   (hex)		Benetel
-E15000-E15FFF     (base 16)		Benetel
-				Guinness Enterprise Centre, Taylors Lane,
-				Dublin    D08 XV25
-				IE
-
-70-B3-D5   (hex)		Zaxcom Inc
-9CC000-9CCFFF     (base 16)		Zaxcom Inc
-				230 West Parkway STE 9
-				Pompton Plains  NJ  07444
-				US
-
-70-B3-D5   (hex)		RADAR
-CB1000-CB1FFF     (base 16)		RADAR
-				547 W 27th St.
-				NEW YORK  NY  10001-5670
-				US
-
-70-B3-D5   (hex)		Soehnle Industrial Solutions GmbH
-F89000-F89FFF     (base 16)		Soehnle Industrial Solutions GmbH
-				Gaildorfer Strasse 6
-				Backnang    71522
-				DE
-
-70-B3-D5   (hex)		vision systems safety tech 
-98A000-98AFFF     (base 16)		vision systems safety tech 
-				Route d’Irigny – ZI NORD - BP 32 
-				Brignais  Rhone alpes auverne   69530
-				FR
-
-70-B3-D5   (hex)		GMI Ltd
-C93000-C93FFF     (base 16)		GMI Ltd
-				Inchinnan Business Park
-				Renfre    PA4 9RG
-				GB
-
-70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
-1DF000-1DFFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
-				78-2 Buncheon-ri, Bongdam-eup
-				Hwaseong-city  Gyungki-do  445-894
-				KR
-
-70-B3-D5   (hex)		comtac AG
-F3F000-F3FFFF     (base 16)		comtac AG
-				Allenwindenstrasse 1
-				Flurlingen    8247
-				CH
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-E33000-E33FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		ALBIRAL DISPLAY SOLUTIONS SL
-497000-497FFF     (base 16)		ALBIRAL DISPLAY SOLUTIONS SL
-				Fàtima 25
-				Sant Hipòlit de Voltregà  Barcelona  08512
-				ES
-
-70-B3-D5   (hex)		PABLO AIR Co., LTD
-9A9000-9A9FFF     (base 16)		PABLO AIR Co., LTD
-				#E-1606, 30, Songdomirae-ro, Yeonsu-gu
-				Incheon    21990
-				KR
-
-70-B3-D5   (hex)		Cloud Intelligence Pty Ltd
-574000-574FFF     (base 16)		Cloud Intelligence Pty Ltd
-				43/10 Gladstone Rd
-				Castle Hill  NSW  2154
-				AU
-
-70-B3-D5   (hex)		COMPAL ELECTRONICS, INC.
-4F2000-4F2FFF     (base 16)		COMPAL ELECTRONICS, INC.
-				No.500, Ruiguang Rd., Neihu District,
-				Taipei    11492
-				TW
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-5D4000-5D4FFF     (base 16)		RCH ITALIA SPA 
-				VIA CENDON 39
-				SILEA   TREVISO   31057
-				IT
-
-70-B3-D5   (hex)		iOne
-330000-330FFF     (base 16)		iOne
-				8F-2, #75, sec 1, Hsin Tai Wu Rd., Hsi Chih District
-				New Taipei City, Taiwan    22101
-				TW
-
-70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-70E000-70EFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-70-B3-D5   (hex)		Airity Technologies Inc.
-545000-545FFF     (base 16)		Airity Technologies Inc.
-				1505 Woodside Rd
-				Redwood City  CA  94061
-				US
-
-70-B3-D5   (hex)		Elbit Systems of America
-C24000-C24FFF     (base 16)		Elbit Systems of America
-				4700 Marine Creek Parkway
-				Fort Worth  TX  76179
-				US
-
-70-B3-D5   (hex)		Private
-6CF000-6CFFFF     (base 16)		Private
-
-70-B3-D5   (hex)		ProHound Controles Eirelli 
-0D0000-0D0FFF     (base 16)		ProHound Controles Eirelli 
-				Rua Felipe José de Figueiredo, 45
-				São Paulo  São Paulo  03807300
-				BR
-
-70-B3-D5   (hex)		Samriddi Automations Pvt. Ltd.
-BBA000-BBAFFF     (base 16)		Samriddi Automations Pvt. Ltd.
-				F-365
-				Noida  up  201307
-				IN
-
-70-B3-D5   (hex)		Monnit Corporation
-D1A000-D1AFFF     (base 16)		Monnit Corporation
-				3400 S West Temple
-				Taylorsville  UT  84115
-				US
-
-70-B3-D5   (hex)		Hypex Electronics BV
-287000-287FFF     (base 16)		Hypex Electronics BV
-				Kattegat 8
-				Groningen  Groningen  9723 JP
-				NL
-
-70-B3-D5   (hex)		Algodue Elettronica Srl
-49B000-49BFFF     (base 16)		Algodue Elettronica Srl
-				Via Passerina 3/A
-				Fontaneto d'Agogna  Novara  28010
-				IT
-
-70-B3-D5   (hex)		ASML
-DE5000-DE5FFF     (base 16)		ASML
-				17075 Thornmint Ct
-				San Diego    92127
-				US
-
-70-B3-D5   (hex)		O-Net Communications(Shenzhen)Limited
-9A2000-9A2FFF     (base 16)		O-Net Communications(Shenzhen)Limited
-				No. 35, Cuijing Road, Pingshan New District
-				Shenzhen  Guangdong  518118
-				CN
-
-70-B3-D5   (hex)		Camwell India LLP
-E78000-E78FFF     (base 16)		Camwell India LLP
-				Plot no 72/11/2, Ground Floor
-				Mundka  DELHI  110041
-				IN
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-752000-752FFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		Sonel S.A.
-F71000-F71FFF     (base 16)		Sonel S.A.
-				Wokulskiego 11
-				Swidnica  Dolnoslaskie  58-100
-				PL
-
-70-B3-D5   (hex)		Siemens Mobility GmbH - MO TI SPA
-E40000-E40FFF     (base 16)		Siemens Mobility GmbH - MO TI SPA
-				Rudower Chaussee 29
-				Berlin  Berlin  12489
-				DE
-
-70-B3-D5   (hex)		PEEK TRAFFIC
-0C7000-0C7FFF     (base 16)		PEEK TRAFFIC
-				5401 N SAM HOUSTON PKWY W
-				HOUSTON  null  77086
-				US
-
-70-B3-D5   (hex)		DEVAU Lemppenau GmbH
-4A2000-4A2FFF     (base 16)		DEVAU Lemppenau GmbH
-				Wolbringstrasse 12
-				Bocholt  NRW  46397
-				DE
-
-70-B3-D5   (hex)		Tieline Research Pty Ltd
-FCB000-FCBFFF     (base 16)		Tieline Research Pty Ltd
-				PO Box 2092
-				MALAGA  Western Australia  6944
-				AU
-
-70-B3-D5   (hex)		National Radio & Telecommunication Corporation - NRTC
-949000-949FFF     (base 16)		National Radio & Telecommunication Corporation - NRTC
-				T&T Complex, Haripur
-				Haripur  KPK  22620
-				PK
-
-70-B3-D5   (hex)		Electrónica Falcón S.A.U
-36E000-36EFFF     (base 16)		Electrónica Falcón S.A.U
-				Polígono Industrial Escopar, Calle E, Nº 1
-				Peralta  Navarra  31350
-				ES
-
-70-B3-D5   (hex)		Hessware GmbH
-7AF000-7AFFFF     (base 16)		Hessware GmbH
-				Weinheimer Straße 68
-				Mannheim  BW  68309
-				DE
-
-70-B3-D5   (hex)		Authenticdata
-836000-836FFF     (base 16)		Authenticdata
-				12F-8, No.100, Sec. 1, Jiafeng 11th Rd., Zhubei City
-				HsinChu    30273
-				TW
-
-70-B3-D5   (hex)		ISAC SRL
-07C000-07CFFF     (base 16)		ISAC SRL
-				via Maestri del Lavoro 30
-				CASCINA  PISA  56021
-				IT
-
-70-B3-D5   (hex)		FARECO
-8AE000-8AEFFF     (base 16)		FARECO
-				8 EUROPARC de la Sainte Victoire
-				MEYREUIL    13590
-				FR
-
-70-B3-D5   (hex)		Advice
-926000-926FFF     (base 16)		Advice
-				16 Atir Yeda St
-				Kfar Saba  Not applicable  4464321
-				IL
-
-70-B3-D5   (hex)		robert juliat
-EE8000-EE8FFF     (base 16)		robert juliat
-				32 route de beaumont
-				fresnoy en thelle  Oise  60530
-				FR
-
-70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
-9C5000-9C5FFF     (base 16)		LINEAGE POWER PVT LTD.,
-				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
-				BANGALORE  KARNATAKA  560074
-				IN
-
-70-B3-D5   (hex)		VNT electronics s.r.o.
-0E9000-0E9FFF     (base 16)		VNT electronics s.r.o.
-				Dvorská, 605
-				Lanškroun-Ostrovské Předměstí (okres Ústí nad Orlicí)    56301
-				CZ
-
-70-B3-D5   (hex)		Airmar Technology Corp
-08C000-08CFFF     (base 16)		Airmar Technology Corp
-				35 Meadowbrook Dr
-				Milford  NH  03055
-				US
-
-70-B3-D5   (hex)		Myostat Motion Control Inc
-96E000-96EFFF     (base 16)		Myostat Motion Control Inc
-				17817 Leslie St #21
-				Newmarket  ON  L3Y8C6
-				CA
-
-70-B3-D5   (hex)		AUDI AG
-01B000-01BFFF     (base 16)		AUDI AG
-				Auto-Union-Strasse 1
-				Ingolstadt    85045
-				DE
-
-70-B3-D5   (hex)		FSR, INC.
-A44000-A44FFF     (base 16)		FSR, INC.
-				244 Bergen Blvd
-				Wodland Park  NJ  07424
-				US
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-E47000-E47FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-CBA000-CBAFFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		chiconypower
-3A0000-3A0FFF     (base 16)		chiconypower
-				23F, No.69, Sec. 2, Guangfu Rd., Sanchong Dist., New Taipei City 241, Taiwan (R.O.C.)
-				New Taipei  Taiwan  241
-				TW
-
-70-B3-D5   (hex)		HD Vision Systems GmbH
-F18000-F18FFF     (base 16)		HD Vision Systems GmbH
-				Berliner Str. 43
-				Heidelberg    69120
-				DE
-
-70-B3-D5   (hex)		Signals and systems india pvt ltd
-2ED000-2EDFFF     (base 16)		Signals and systems india pvt ltd
-				15/D-19, 3rd Main Road, SIPCOT IT PARK, SIRUSERI, OMR
-				CHENNAI  TAMIL NADU  603103
-				IN
-
-70-B3-D5   (hex)		Piranha EMS Inc.
-006000-006FFF     (base 16)		Piranha EMS Inc.
-				2681 Zanker Road
-				San Jose  CA  95134
-				US
-
-70-B3-D5   (hex)		Biotage Sweden AB
-4D2000-4D2FFF     (base 16)		Biotage Sweden AB
-				Vimpelgatan 5
-				Uppsala    753 18
-				SE
-
-70-B3-D5   (hex)		Datamars SA
-AA9000-AA9FFF     (base 16)		Datamars SA
-				Via Industria 16
-				Lamone    6814
-				CH
-
-70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau AG
-08B000-08BFFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
-				Werner-von-Siemens-Str. 1
-				Offenburg  Ba-Wue  77656
-				DE
-
-70-B3-D5   (hex)		ESYSE GmbH Embedded Systems Engineering
-008000-008FFF     (base 16)		ESYSE GmbH Embedded Systems Engineering
-				Ruth-Niehaus Str. 8
-				Meerbusch  Nordrhein-Westfalen  40667
-				DE
-
-70-B3-D5   (hex)		Toshiba Electron Tubes & Devices Co., Ltd.
-D28000-D28FFF     (base 16)		Toshiba Electron Tubes & Devices Co., Ltd.
-				1385, Shimoishigami
-				Otawara-shi  Tochigi  324-8550
-				JP
-
-70-B3-D5   (hex)		Waldo System
-CA1000-CA1FFF     (base 16)		Waldo System
-				4th Floor, 658, Yangcheon-ro, Gangseo-gu,
-				Seoul     07554
-				KR
-
-70-B3-D5   (hex)		MOTION LIB,Inc.
-27C000-27CFFF     (base 16)		MOTION LIB,Inc.
-				Saiwai-ku ,Shinkawasaki 7-7-237
-				Kawasaki City  Kanagawa  212-0032
-				JP
-
-70-B3-D5   (hex)		APG Cash Drawer, LLC
-ACF000-ACFFFF     (base 16)		APG Cash Drawer, LLC
-				5250 Industrial Blvd NE
-				Minneapolis  MN  55421
-				US
-
-70-B3-D5   (hex)		Gastech Australia Pty Ltd
-793000-793FFF     (base 16)		Gastech Australia Pty Ltd
-				24 Baretta Road
-				Wanagra  WA  6065
-				AU
-
-70-B3-D5   (hex)		Microvideo
-4E0000-4E0FFF     (base 16)		Microvideo
-				Copley Hill Business Park, Cambridge Road
-				Babraham    CB22 3GN
-				GB
-
-70-B3-D5   (hex)		Cambria Corporation
-B6B000-B6BFFF     (base 16)		Cambria Corporation
-				1328 North 128th Street
-				Seattle  WA  98133
-				US
-
-70-B3-D5   (hex)		eWireless
-BC3000-BC3FFF     (base 16)		eWireless
-				4629 n capitol ave
-				Indianapolis  IN  46208
-				US
-
-70-B3-D5   (hex)		Fluid Components Intl
-9F9000-9F9FFF     (base 16)		Fluid Components Intl
-				1755 La Costa Meadows Dr.
-				San Marcos  CA  92078
-				US
-
-70-B3-D5   (hex)		Dokuen Co. Ltd.
-334000-334FFF     (base 16)		Dokuen Co. Ltd.
-				12-3 minami-matsunoki-cho higashi-kujo minami-ku
-				kyoto    6018023
-				JP
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-BD8000-BD8FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Sanmina Israel
-3D4000-3D4FFF     (base 16)		Sanmina Israel
-				Koren Industrial Zone , POBox 102
-				Maalot  Israel  2101002
-				IL
-
-70-B3-D5   (hex)		TATTILE SRL
-937000-937FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Last Mile Gear
-EBA000-EBAFFF     (base 16)		Last Mile Gear
-				1119 11th Ave
-				LONGVIEW  WA  98632
-				US
-
-70-B3-D5   (hex)		WAVE
-ED7000-ED7FFF     (base 16)		WAVE
-				12078 University City Boulevard
-				Harrisburg  NC  28075
-				US
-
-70-B3-D5   (hex)		Season Electronics Ltd
-15E000-15EFFF     (base 16)		Season Electronics Ltd
-				600 Nest Business Park 
-				Havant  Hampshire  PO9 5TL
-				GB
-
-70-B3-D5   (hex)		Sicon srl
-7C7000-7C7FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Cooltera Limited
-DD5000-DD5FFF     (base 16)		Cooltera Limited
-				Fircroft House, Fircroft Way
-				Edenbridge  Kent  TN8 6EJ
-				GB
-
-70-B3-D5   (hex)		HoseoTelnet Inc...
-11B000-11BFFF     (base 16)		HoseoTelnet Inc...
-				Hoseo Plaza B/D 7F, 416
-				Gangseo-ro, Gangseo-gu  Seoul   07583
-				KR
-
-70-B3-D5   (hex)		Bespoon
-0F7000-0F7FFF     (base 16)		Bespoon
-				17 rue du Lac St andre
-				Le bourget du Lac    73370
-				FR
-
-70-B3-D5   (hex)		U-JIN Mesco Co., Ltd.
-868000-868FFF     (base 16)		U-JIN Mesco Co., Ltd.
-				Nakajima-cho 18-22
-				Nishinomiya  Hyogo  663-8105
-				JP
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-E2B000-E2BFFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		CMT Medical technologies
-950000-950FFF     (base 16)		CMT Medical technologies
-				Hacarmel 7/2
-				Yoqneam    20692
-				IL
-
-70-B3-D5   (hex)		Abionic
-BC1000-BC1FFF     (base 16)		Abionic
-				Route de la Corniche 5
-				Epalinges    1066
-				CH
-
-70-B3-D5   (hex)		SYSCO Sicherheitssysteme GmbH
-471000-471FFF     (base 16)		SYSCO Sicherheitssysteme GmbH
-				Nebenstrasse 13
-				Hasselroth  Hessen  63594 
-				DE
-
-70-B3-D5   (hex)		PKE Electronics AG
-61E000-61EFFF     (base 16)		PKE Electronics AG
-				Computerstraße, 6
-				Wien  Wien  1100
-				AT
-
-70-B3-D5   (hex)		TATTILE SRL
-ACB000-ACBFFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Honeywell
-F4D000-F4DFFF     (base 16)		Honeywell
-				Aerospace - ETS
-				Clearwater    33764
-				US
-
-70-B3-D5   (hex)		Honeywell
-F70000-F70FFF     (base 16)		Honeywell
-				13350 US Highway 19 N 
-				  Clearwater   null   33764 
-				US
-
-70-B3-D5   (hex)		TECNOWATT
-B1F000-B1FFFF     (base 16)		TECNOWATT
-				Via dell'Aeronautica
-				Bergamo    24035
-				IT
-
-70-B3-D5   (hex)		Symetrics Industries d.b.a. Extant Aerospace
-0A8000-0A8FFF     (base 16)		Symetrics Industries d.b.a. Extant Aerospace
-				1615 West NASA Blvd
-				Melbourne  FL  32901
-				US
-
-70-B3-D5   (hex)		Cygnetic Technologies (Pty) Ltd
-B94000-B94FFF     (base 16)		Cygnetic Technologies (Pty) Ltd
-				10 Church Street
-				Cape Town    7550
-				ZA
-
-70-B3-D5   (hex)		VISION SYSTEMS AURTOMOTIVE (SAFETY TECH)
-948000-948FFF     (base 16)		VISION SYSTEMS AURTOMOTIVE (SAFETY TECH)
-				CHEMIN DE CHIRADIE
-				BRIGNAIS  RHONE ALPES AUVERGNE  69530
-				FR
-
-70-B3-D5   (hex)		CoreKinect
-84C000-84CFFF     (base 16)		CoreKinect
-				5024 S. Ash Ave, Suite 101
-				Tempe  AZ  85282
-				US
-
-70-B3-D5   (hex)		KST technology
-8A5000-8A5FFF     (base 16)		KST technology
-				KST B/D 4-5, Wiryeseong-daero 12-gil
-				Songpa-gu  Seoul  05636
-				KR
-
-70-B3-D5   (hex)		Moduware PTY LTD
-FC8000-FC8FFF     (base 16)		Moduware PTY LTD
-				502/37 Swanston Street
-				Melbourne  Victoria  3000
-				AU
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-2CF000-2CFFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbühl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Argon ST
-A9E000-A9EFFF     (base 16)		Argon ST
-				12701 Fair Lakes Circle
-				Fairfax  VA  22033
-				US
-
-70-B3-D5   (hex)		TripleOre
-862000-862FFF     (base 16)		TripleOre
-				Kazernestraat 19
-				Venlo    5928 NL
-				NL
-
-70-B3-D5   (hex)		ioThings
-993000-993FFF     (base 16)		ioThings
-				Past. Debijestraat 42
-				Hegelsom  Limburg  5963AG
-				NL
-
-70-B3-D5   (hex)		MICAS AG
-AB3000-AB3FFF     (base 16)		MICAS AG
-				Turleyring 18-22
-				Oelsnitz    09376
-				DE
-
-70-B3-D5   (hex)		Acrodea, Inc.
-406000-406FFF     (base 16)		Acrodea, Inc.
-				3F, Daisan Yamada Bldg., 22 Aizumi-cho
-				Shinjuku-ku  Tokyo  1600005
-				JP
-
-70-B3-D5   (hex)		LG Electronics
-9E3000-9E3FFF     (base 16)		LG Electronics
-				10, Magokjungang 10-ro, Gangseo-gu
-				Seoul    07796
-				KR
-
-70-B3-D5   (hex)		Microtronics Engineering GmbH
-D24000-D24FFF     (base 16)		Microtronics Engineering GmbH
-				Hauptstrasse 7
-				Ruprechtshofen    3244
-				AT
-
-70-B3-D5   (hex)		Medical Monitoring Center OOD
-92E000-92EFFF     (base 16)		Medical Monitoring Center OOD
-				Office 8, 10 Poduevo Street
-				Sofia    1680
-				BG
-
-70-B3-D5   (hex)		Guilin Tryin Technology Co.,Ltd
-460000-460FFF     (base 16)		Guilin Tryin Technology Co.,Ltd
-				Room C-306, Innovation Building,Information Industry Park, Chaoyang Road,Guilin,China
-				GuiLin  Guangxi  541000
-				CN
-
-70-B3-D5   (hex)		Acrodea, Inc.
-67D000-67DFFF     (base 16)		Acrodea, Inc.
-				3F, Daisan Yamada Bldg., 22 Aizumi-cho
-				Shinjuku-ku  Tokyo  1600005
-				JP
-
-70-B3-D5   (hex)		Human Systems Integration
-085000-085FFF     (base 16)		Human Systems Integration
-				153 Washington St, 4th Floor
-				Walpole  MA  02170
-				US
-
-70-B3-D5   (hex)		Vistec Electron Beam GmbH
-17B000-17BFFF     (base 16)		Vistec Electron Beam GmbH
-				Ilmstraße 4
-				Jena    07743
-				DE
-
-70-B3-D5   (hex)		Tornado Modular Systems
-A87000-A87FFF     (base 16)		Tornado Modular Systems
-				Inzhenernaya st. 4a
-				Novosibirsk  Novosibirsk  630128
-				RU
-
-70-B3-D5   (hex)		Common Sense Monitoring Solutions Ltd.
-0D1000-0D1FFF     (base 16)		Common Sense Monitoring Solutions Ltd.
-				Unit 1, Holts Court
-				Threshers Bush  Essex  CM17 0NS
-				GB
-
-70-B3-D5   (hex)		FUJICOM Co.,Ltd.
-00A000-00AFFF     (base 16)		FUJICOM Co.,Ltd.
-				8-10-17-403, HON-chou
-				KOUNOSU-shi  SAITAMA-ken  3650038
-				JP
-
-70-B3-D5   (hex)		Sanmina Israel
-984000-984FFF     (base 16)		Sanmina Israel
-				Koren Industrial Zone , POBox 102
-				Maalot  Israel  2101002
-				IL
-
-70-B3-D5   (hex)		Saankhya Labs Private Limited
-CA3000-CA3FFF     (base 16)		Saankhya Labs Private Limited
-				Embassy Icon, 3rd Floor, No. 3, Infantry Road,
-				Bangalore  Karnataka  560001
-				IN
-
-70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
-5ED000-5EDFFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-70-B3-D5   (hex)		HANYOUNG NUX CO.,LTD
-103000-103FFF     (base 16)		HANYOUNG NUX CO.,LTD
-				28. GILPA-RO
-				INCHEON  NAM-GU  22121
-				KR
-
-70-B3-D5   (hex)		Vocality international T/A Cubic
-75F000-75FFFF     (base 16)		Vocality international T/A Cubic
-				Lydling Barn,Lydling Farm,, Puttenham Lane
-				Godalming  Surrey  gu8 6ap
-				GB
-
-70-B3-D5   (hex)		Adel System srl
-375000-375FFF     (base 16)		Adel System srl
-				VIA LUIGI BARCHI, 9/B
-				Reggio Emilia    42124
-				IT
-
-70-B3-D5   (hex)		AIROBOT OÜ
-1D3000-1D3FFF     (base 16)		AIROBOT OÜ
-				Pardi 32-1
-				Pärnu    80016
-				EE
-
-70-B3-D5   (hex)		Ariston Thermo s.p.a.
-C11000-C11FFF     (base 16)		Ariston Thermo s.p.a.
-				Via Aristide Merloni 45
-				Fabriano  Ancona  60044
-				IT
-
-70-B3-D5   (hex)		Scenario Automation
-8B4000-8B4FFF     (base 16)		Scenario Automation
-				Rua Paulo Elias, 216
-				São Carlos  São Paulo  13564400
-				BR
-
-70-B3-D5   (hex)		CT Company
-3AD000-3ADFFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-70-B3-D5   (hex)		Rishaad Brown
-D09000-D09FFF     (base 16)		Rishaad Brown
-				224 Thoreau dr. Apt.D
-				Yorktown  VA  23693
-				US
-
-70-B3-D5   (hex)		Verity Studios AG
-7AC000-7ACFFF     (base 16)		Verity Studios AG
-				Zürcherstrasse 39
-				Schlieren    8952
-				CH
-
-70-B3-D5   (hex)		WARECUBE,INC
-F06000-F06FFF     (base 16)		WARECUBE,INC
-				#A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu
-				Suwon-si    16648
-				KR
-
-70-B3-D5   (hex)		SEASON DESIGN TECHNOLOGY
-2C9000-2C9FFF     (base 16)		SEASON DESIGN TECHNOLOGY
-				FLOOR 4, WARDS EXCHANGE, 199 ECCLESALL ROAD
-				SHEFFIELD  SOUTH YORKSHIRE  S11 8HW
-				GB
-
-70-B3-D5   (hex)		Silex Inside
-3BA000-3BAFFF     (base 16)		Silex Inside
-				rue du bosquet 7
-				LouvainlaNeuve  Brabant  1348
-				BE
-
-70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
-E0B000-E0BFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
-				78-2 Buncheon-ri, Bongdam-eup
-				Hwaseong-city  Gyungki-do  445-894
-				KR
-
-70-B3-D5   (hex)		Sicon srl
-145000-145FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		TATTILE SRL
-2CA000-2CAFFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-00-1B-C5   (hex)		Dynasthetics
-074000-074FFF     (base 16)		Dynasthetics
-				801-484-3820
-				Salt Lake City  UT  84119
-				US
-
-70-B3-D5   (hex)		Teko Telecom Srl
-29C000-29CFFF     (base 16)		Teko Telecom Srl
-				via Meucci 24/a
-				Castel San Pietro Terme  Bologna  40024
-				IT
-
-70-B3-D5   (hex)		ERA a.s.
-A90000-A90FFF     (base 16)		ERA a.s.
-				Prumyslova 462
-				Pardubice    53003
-				CZ
-
-70-B3-D5   (hex)		X-SPEX GmbH
-D6F000-D6FFFF     (base 16)		X-SPEX GmbH
-				Albert-Einstein-Str. 14
-				Berlin  Berlin  12489
-				DE
-
-70-B3-D5   (hex)		Gedomo GmbH
-7D7000-7D7FFF     (base 16)		Gedomo GmbH
-				Erlacker 483
-				Poellau bei Hartberg  Steiermark  8225
-				AT
-
-70-B3-D5   (hex)		Raft Technologies
-8D0000-8D0FFF     (base 16)		Raft Technologies
-				Habarzel 25
-				Tel aviv    6971035
-				IL
-
-70-B3-D5   (hex)		Zamir Recognition Systems Ltd.
-981000-981FFF     (base 16)		Zamir Recognition Systems Ltd.
-				Manachat Tech Park 1/22
-				Jerusalem    96951
-				IL
-
-70-B3-D5   (hex)		University Of Groningen
-700000-700FFF     (base 16)		University Of Groningen
-				Broerstraat 5
-				Groningen  Groningen  9712 CP
-				NL
-
-70-B3-D5   (hex)		Association Romandix
-AEB000-AEBFFF     (base 16)		Association Romandix
-				rue de Sebeillon 9b
-				Lausanne  Vaud  1004
-				CH
-
-70-B3-D5   (hex)		AdInte, inc.
-BAC000-BACFFF     (base 16)		AdInte, inc.
-				347-1, Shijo-cho, Shimogyo-ku, 7F CUBE Nishikarasuma BLDG.
-				Kyoto-shi  Kyoto  6008441
-				JP
-
-70-B3-D5   (hex)		Insitu, Inc
-B3B000-B3BFFF     (base 16)		Insitu, Inc
-				118 E Columbia River Way
-				Bingen  WA  98605
-				US
-
-70-B3-D5   (hex)		Insitu, Inc
-7AD000-7ADFFF     (base 16)		Insitu, Inc
-				118 E Columbia River Way
-				Bingen  WA  98605
-				US
-
-70-B3-D5   (hex)		HiDes, Inc.
-837000-837FFF     (base 16)		HiDes, Inc.
-				6F, No.86, Baozhong Rd., Xindian Dist.,
-				New Taipei City  New Taipei City  23144
-				TW
-
-70-B3-D5   (hex)		SENSO2ME 
-F7A000-F7AFFF     (base 16)		SENSO2ME 
-				Zandhoef  16
-				KASTERLEE  België  2460
-				BE
-
-70-B3-D5   (hex)		ELDES
-9A0000-9A0FFF     (base 16)		ELDES
-				Ukmerges 283B
-				Vilnius    06313
-				LT
-
-70-B3-D5   (hex)		Mimo Networks
-25D000-25DFFF     (base 16)		Mimo Networks
-				701 E Middlefield Road Mountain View, 
-				Mountain View  CA  94043
-				US
-
-70-B3-D5   (hex)		Vtron Pty Ltd
-15D000-15DFFF     (base 16)		Vtron Pty Ltd
-				Unit 2, 62 Township Drive West
-				West Burleigh  Queensland  4219
-				AU
-
-70-B3-D5   (hex)		Abbas, a.s.
-B18000-B18FFF     (base 16)		Abbas, a.s.
-				Edisonova 5
-				Brno  CZ  61200
-				CZ
-
-70-B3-D5   (hex)		Emergency Lighting Products Limited
-480000-480FFF     (base 16)		Emergency Lighting Products Limited
-				Gillmans Industrial Estate, Natts Lane
-				Billingshurst    RH14 9EZ
-				GB
-
-70-B3-D5   (hex)		Kunshan excellent Intelligent Technology Co., Ltd.
-BE4000-BE4FFF     (base 16)		Kunshan excellent Intelligent Technology Co., Ltd.
-				Room 2002 Site B Modern Square No 8 Wei yi Road 
-				kunshan  Jiangsu Province   215301
-				CN
-
-70-B3-D5   (hex)		DIMASTEC GESTAO DE PONTO E ACESSO EIRELI-ME
-F8F000-F8FFFF     (base 16)		DIMASTEC GESTAO DE PONTO E ACESSO EIRELI-ME
-				Praça Rotary Club, 355
-				Ribeirão Preto  São Paulo  14021-355
-				BR
-
-70-B3-D5   (hex)		QUANTAFLOW
-6EB000-6EBFFF     (base 16)		QUANTAFLOW
-				AVENUE DU CANADA
-				HONFLEUR    14600
-				FR
-
-70-B3-D5   (hex)		JUSTEK INC
-EB5000-EB5FFF     (base 16)		JUSTEK INC
-				613-9, DONGCHUN-RI, JINWI-MYEON
-				PYEONGTAEK-SI  GYEONGGI-DO  17711
-				KR
-
-70-B3-D5   (hex)		Neuron GmbH
-E1B000-E1BFFF     (base 16)		Neuron GmbH
-				Badenerstrasse 9
-				Brugg    5200
-				CH
-
-70-B3-D5   (hex)		Critical Link LLC
-EF9000-EF9FFF     (base 16)		Critical Link LLC
-				6712 Brooklawn Pkwy
-				Syracuse  NY  13211
-				US
-
-70-B3-D5   (hex)		TechSigno srl
-0A2000-0A2FFF     (base 16)		TechSigno srl
-				Via Giovanni Paolo II, 3
-				Udiner  UD  33100
-				IT
-
-70-B3-D5   (hex)		BLOCKSI LLC
-95E000-95EFFF     (base 16)		BLOCKSI LLC
-				228 Hamilton avenue 3rd floor
-				Palo Alto    94301
-				US
-
-70-B3-D5   (hex)		thou&tech
-782000-782FFF     (base 16)		thou&tech
-				161, Simin-daero,  Dongan-gu, Anyang-si
-				Anyang-si  Gyeonggi-do  14067
-				KR
-
-70-B3-D5   (hex)		VAGLER International Sdn Bhd
-582000-582FFF     (base 16)		VAGLER International Sdn Bhd
-				2006 Jalan Jelawat, Seberang Jaya Industrial Estate
-				Prai  Penang  13700
-				MY
-
-70-B3-D5   (hex)		HOW-E
-741000-741FFF     (base 16)		HOW-E
-				No. 19, Alley 16, Lane 61, Yangmei dist.
-				Taoyuan City    32647
-				TW
-
-70-B3-D5   (hex)		Telstra
-026000-026FFF     (base 16)		Telstra
-				231 Elisabeth St
-				SYDNEY  NSW  2000
-				AU
-
-70-B3-D5   (hex)		JL World Corporation Limited
-D54000-D54FFF     (base 16)		JL World Corporation Limited
-				Unit 20, 5/F., Block B, Proficient Industrial Centre
-				Kowloon Bay    0000
-				HK
-
-70-B3-D5   (hex)		GlobalTest LLC
-A1F000-A1FFFF     (base 16)		GlobalTest LLC
-				Pavlika Morozova 6
-				Sarov  Nizhnij Novgorod  607185
-				RU
-
-70-B3-D5   (hex)		Array Technologies Inc.
-A4E000-A4EFFF     (base 16)		Array Technologies Inc.
-				21 Sequin Drive
-				Glastonbury    06033
-				US
-
-70-B3-D5   (hex)		BioBusiness
-A08000-A08FFF     (base 16)		BioBusiness
-				4 Elsafwa Towers, Ellebiny st, Mariutia Haram
-				Giza  Cairo  12111
-				EG
-
-70-B3-D5   (hex)		Landis Gyr
-0B6000-0B6FFF     (base 16)		Landis Gyr
-				Hasdrubal Bellegard, 400, CIC
-				Curitiba  Paraná  81460120
-				BR
-
-70-B3-D5   (hex)		Lode BV
-716000-716FFF     (base 16)		Lode BV
-				Zernikepark 16
-				Groningen    9747 AN
-				NL
-
-70-B3-D5   (hex)		Telonic Berkeley Inc
-61D000-61DFFF     (base 16)		Telonic Berkeley Inc
-				1080 La Mirada Ct.
-				Vista  CA  92081
-				US
-
-70-B3-D5   (hex)		PAMIR Inc
-D93000-D93FFF     (base 16)		PAMIR Inc
-				B-222, 606, Seobusaet-gil, Geumcheon-gu
-				Seoul    08504
-				KR
-
-70-B3-D5   (hex)		NOTICE Co., Ltd.
-CAB000-CABFFF     (base 16)		NOTICE Co., Ltd.
-				A-1307/8, Keumkang Penterium IT Tower, 282, Hagui-ro
-				Anyang  Gyeonggi-do  14056
-				KR
-
-70-B3-D5   (hex)		Sierra Nevada Corporation
-252000-252FFF     (base 16)		Sierra Nevada Corporation
-				444 Salomon Circle
-				Sparks  NV  89434
-				US
-
-70-B3-D5   (hex)		Uwinloc
-D6B000-D6BFFF     (base 16)		Uwinloc
-				57 Avenue Jean Monnet
-				Colomiers    31770
-				FR
-
-70-B3-D5   (hex)		Rtone
-5F3000-5F3FFF     (base 16)		Rtone
-				120 rue de Saint cyr
-				Lyon    69009
-				FR
-
-70-B3-D5   (hex)		EIIT SA
-608000-608FFF     (base 16)		EIIT SA
-				Camino Robledo de Chavela 9B
-				Valdemorillo  Madrid / Madrid  28210
-				ES
-
-70-B3-D5   (hex)		IOT Engineering
-16B000-16BFFF     (base 16)		IOT Engineering
-				3 Eglington Ave
-				Epson  Auckland  1024
-				NZ
-
-70-B3-D5   (hex)		TATTILE SRL
-B21000-B21FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Alma
-BA9000-BA9FFF     (base 16)		Alma
-				4A, Bd de la Gare, Porte 1 
-				Boissy St Léger  PACA  94470
-				FR
-
-70-B3-D5   (hex)		International Roll-Call Corporation
-4B8000-4B8FFF     (base 16)		International Roll-Call Corporation
-				8346 Old Richfood Road
-				Mechanicsville  VA  23116
-				US
-
-70-B3-D5   (hex)		S.I.C.E.S. srl
-EA7000-EA7FFF     (base 16)		S.I.C.E.S. srl
-				Via Molinello, 8B
-				Jerago con Orago  VARESE  21040
-				IT
-
-70-B3-D5   (hex)		RCATSONE
-3AA000-3AAFFF     (base 16)		RCATSONE
-				5925 Airport Road - Suite 905
-				Mississauga  Ontario   L4V 1W1
-				CA
-
-70-B3-D5   (hex)		PLUTO Solution co.,ltd.
-842000-842FFF     (base 16)		PLUTO Solution co.,ltd.
-				B-1018, Kumkang Penterium IT Tower, 282, Hagui-ro, Dongan-gu
-				Anyang-si  Gyeonggi-do  14056
-				KR
-
-70-B3-D5   (hex)		SHENZHEN GAONA ELECTRONIC CO.LTD
-031000-031FFF     (base 16)		SHENZHEN GAONA ELECTRONIC CO.LTD
-				F3.East block. Xinwu Industrial Building, Longzhu Road.Nanshan District
-				Shenzhen   Guangdong China  518000
-				CN
-
-00-1B-C5   (hex)		SKODA ELECTRIC a.s.
-0B2000-0B2FFF     (base 16)		SKODA ELECTRIC a.s.
-				Tylova 1/57
-				Plzen    301 28
-				CZ
-
-70-B3-D5   (hex)		Dameca a/s
-EEA000-EEAFFF     (base 16)		Dameca a/s
-				Islevdalvej 211
-				Roedovre    2610
-				DK
-
-70-B3-D5   (hex)		Cardinal Scale Mfg Co
-488000-488FFF     (base 16)		Cardinal Scale Mfg Co
-				203 E. Daugherty
-				Webb City  MO  64870
-				US
-
-70-B3-D5   (hex)		ISO/TC 22/SC 31
-319000-319FFF     (base 16)		ISO/TC 22/SC 31
-				Behrenstr. 35
-				Berlin    10117
-				DE
-
-70-B3-D5   (hex)		ndb technologies
-0B2000-0B2FFF     (base 16)		ndb technologies
-				1405-111 Av Saint-Jean-Baptiste
-				Quebec  Quebec  G2E5K2
-				CA
-
-70-B3-D5   (hex)		Nanjing Dandick Science&technology development co., LTD
-E7D000-E7DFFF     (base 16)		Nanjing Dandick Science&technology development co., LTD
-				No.5,JinMa Road,MaQun Science Park,Qixia district
-				NanJing  Jiang Su  210049
-				CN
-
-70-B3-D5   (hex)		Critical Link LLC
-E5E000-E5EFFF     (base 16)		Critical Link LLC
-				6712 Brooklawn Parkway
-				Syracuse  null  13211
-				US
-
-70-B3-D5   (hex)		SISTEM SA
-DB8000-DB8FFF     (base 16)		SISTEM SA
-				Avda.Rita Levi Montalcini, nº2 Parcela 5
-				Getafe  Madrid  28906
-				ES
-
-70-B3-D5   (hex)		Fortress Cyber Security
-674000-674FFF     (base 16)		Fortress Cyber Security
-				189 South Orange Ave, Suite 1950
-				Orlando  FL  32801
-				US
-
-70-B3-D5   (hex)		QUICCO SOUND Corporation
-A7E000-A7EFFF     (base 16)		QUICCO SOUND Corporation
-				B2,1-3-3-1,Incubate Center, Shin-Miyakoda, Kita-ku
-				Hamamatsu  Shizuoka  431-2103
-				JP
-
-70-B3-D5   (hex)		RDT Ltd
-7DF000-7DFFFF     (base 16)		RDT Ltd
-				Pavilion C2, Ashwood Park, Ashwood Way
-				Basingstoke  Hampshire  RG23 8BG
-				GB
-
-70-B3-D5   (hex)		Package Guard, Inc
-878000-878FFF     (base 16)		Package Guard, Inc
-				2819 33rd ave so
-				seattle  WA  98144
-				US
-
-70-B3-D5   (hex)		SDK Kristall
-7D2000-7D2FFF     (base 16)		SDK Kristall
-				Polevaia Sabirovskaia  49A, 1H
-				Saint-Petersburg  Russia  197183
-				RU
-
-70-B3-D5   (hex)		BEDEROV GmbH
-371000-371FFF     (base 16)		BEDEROV GmbH
-				Rankestr. 8
-				Berlin  Berlin  10789
-				DE
-
-70-B3-D5   (hex)		Sensoterra BV
-DC9000-DC9FFF     (base 16)		Sensoterra BV
-				Science Park 106   
-				Amsterdam    1098 XG
-				NL
-
-70-B3-D5   (hex)		Fusar Technologies inc
-E6C000-E6CFFF     (base 16)		Fusar Technologies inc
-				385 Monmouth St #2
-				Jersey City  NJ  07302
-				US
-
-70-B3-D5   (hex)		FOCAL-JMLab
-96B000-96BFFF     (base 16)		FOCAL-JMLab
-				108 rue de l'Avenir
-				La Talaudière    42353
-				FR
-
-70-B3-D5   (hex)		Comrod AS
-408000-408FFF     (base 16)		Comrod AS
-				Fiskaaveien 1
-				TAU    4120
-				NO
-
-70-B3-D5   (hex)		Santa Barbara Imaging Systems
-446000-446FFF     (base 16)		Santa Barbara Imaging Systems
-				340 Storke Road, Suite 101
-				Goleta  CA  93117
-				US
-
-70-B3-D5   (hex)		SENSONEO
-007000-007FFF     (base 16)		SENSONEO
-				Kollarova 27
-				Bratislava  Slovak Republic  84106
-				SK
-
-70-B3-D5   (hex)		BRS Sistemas Eletrônicos
-55E000-55EFFF     (base 16)		BRS Sistemas Eletrônicos
-				Rua Gomes de Freitas, 491 / 204
-				Porto Alegre  RS  91380-000
-				BR
-
-70-B3-D5   (hex)		ARC Technology Solutions, LLC
-FAD000-FADFFF     (base 16)		ARC Technology Solutions, LLC
-				165 Ledge Street
-				Nashua  NH  03060
-				US
-
-70-B3-D5   (hex)		vivaMOS
-AC7000-AC7FFF     (base 16)		vivaMOS
-				2 Venture Road
-				Southampton  Hampshire  SO16 7NP
-				GB
-
-70-B3-D5   (hex)		Southern Innovation
-C16000-C16FFF     (base 16)		Southern Innovation
-				729 Nicholson street
-				Carlton North  Victoria  3054
-				AU
-
-70-B3-D5   (hex)		Micro Electroninc Products
-DB2000-DB2FFF     (base 16)		Micro Electroninc Products
-				TT Vasumweg 150
-				Amsterdam    1033 SH
-				NL
-
-70-B3-D5   (hex)		Circuitlink Pty Ltd
-094000-094FFF     (base 16)		Circuitlink Pty Ltd
-				4 / 87 Station Road
-				Seven Hills  NSW  2147
-				AU
-
-70-B3-D5   (hex)		Baumtec GmbH
-AEF000-AEFFFF     (base 16)		Baumtec GmbH
-				Behringstr.6
-				Rodgau  Hessen  63110
-				DE
-
-70-B3-D5   (hex)		Rievtech Electronic Co.,Ltd 
-8C1000-8C1FFF     (base 16)		Rievtech Electronic Co.,Ltd 
-				Room 505, Building A, No.88,Dazhou Road,Tiexinqiao,Yu huatai District, Nanjing City, Jiangsu Province,P.R.China +0086 25 52895099                 52890138 info@rievtech.com sales@rievtech.com
-				Nanjing City  Jiangsu Province  210000
-				CN
-
-70-B3-D5   (hex)		CRDE
-DEE000-DEEFFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		Ash Technologies
-30B000-30BFFF     (base 16)		Ash Technologies
-				Unit B5, M7 Business Park
-				Naas  Kildare  W91P684
-				IE
-
-70-B3-D5   (hex)		Step Technica Co., Ltd.
-28C000-28CFFF     (base 16)		Step Technica Co., Ltd.
-				757-3 Shimofujisawa
-				Iruma-shi  Saitama-ken  3580011
-				JP
-
-70-B3-D5   (hex)		Chelsea Technologies Group Ltd
-579000-579FFF     (base 16)		Chelsea Technologies Group Ltd
-				55, Central Avenue
-				West Molesey  Surrey  KT8 2QZ
-				GB
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-B6A000-B6AFFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		CircuitMeter Inc.
-365000-365FFF     (base 16)		CircuitMeter Inc.
-				1238 Maple Ridge Dr
-				Pickering  Ontario  L1X 1A5
-				CA
-
-70-B3-D5   (hex)		KST technology
-861000-861FFF     (base 16)		KST technology
-				164-1, KST b/d., Bangi-dong, songpa-gu
-				SEOUL  N/A  138-050
-				KR
-
-70-B3-D5   (hex)		MobiPromo
-A73000-A73FFF     (base 16)		MobiPromo
-				10, 64-72 Beresford Rd
-				Lilydale  Victoria  3140
-				AU
-
-70-B3-D5   (hex)		Nefteavtomatika
-585000-585FFF     (base 16)		Nefteavtomatika
-				50-letiay Oktyabria, 24
-				Ufa    450005
-				RU
-
-70-B3-D5   (hex)		Blair Companies
-442000-442FFF     (base 16)		Blair Companies
-				5107 Kissell Ave
-				Altoona  PA  16601
-				US
-
-70-B3-D5   (hex)		Equatel
-911000-911FFF     (base 16)		Equatel
-				Bury New Road
-				Manchester    M25 0JW
-				GB
-
-70-B3-D5   (hex)		RJ45 Technologies
-9D0000-9D0FFF     (base 16)		RJ45 Technologies
-				7, rue Roland Martin
-				Champigny sur Marne  France  94500
-				FR
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-B56000-B56FFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		S.C.E. srl
-AF6000-AF6FFF     (base 16)		S.C.E. srl
-				Via Giardini 1271/A
-				Modena  Italy  41126
-				IT
-
-70-B3-D5   (hex)		Seraphim Optronics Ltd
-ADF000-ADFFFF     (base 16)		Seraphim Optronics Ltd
-				2 hacarmel  st  
-				Yokneam   Israel  20692
-				IL
-
-70-B3-D5   (hex)		KLEIBER Infrared GmbH
-672000-672FFF     (base 16)		KLEIBER Infrared GmbH
-				Am Gewände 3
-				Unterwellenborn  Thüringen  07333
-				DE
-
-70-B3-D5   (hex)		DORLET SAU
-135000-135FFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		ProTom International
-997000-997FFF     (base 16)		ProTom International
-				1100 Parker Square, Suite 230
-				Flower Mound  TX  75028
-				US
-
-70-B3-D5   (hex)		Systolé Hardware B.V.
-B30000-B30FFF     (base 16)		Systolé Hardware B.V.
-				Hogehilweg, 5E
-				Amsterdam    1101 CA
-				NL
-
-70-B3-D5   (hex)		ZAO ZEO
-07A000-07AFFF     (base 16)		ZAO ZEO
-				Khachaturiana 14a
-				Moscow    127562
-				RU
-
-70-B3-D5   (hex)		Motomuto Aps
-F05000-F05FFF     (base 16)		Motomuto Aps
-				Arresoevej 11
-				Risskov  MIDT  8240
-				DK
-
-70-B3-D5   (hex)		synchrotron SOLEIL
-378000-378FFF     (base 16)		synchrotron SOLEIL
-				l'orme des merisiers
-				gif sur yvette    91192
-				FR
-
-70-B3-D5   (hex)		Contiweb
-DFD000-DFDFFF     (base 16)		Contiweb
-				Ir. Wagterstraat 10
-				Boxmeer    5831 AZ
-				NL
-
-70-B3-D5   (hex)		Specialised Imaging Limited
-D1C000-D1CFFF     (base 16)		Specialised Imaging Limited
-				6 Harvington Park
-				Pitstone  Bucks  LU7 9GX
-				GB
-
-70-B3-D5   (hex)		ATX Networks Corp
-9D9000-9D9FFF     (base 16)		ATX Networks Corp
-				1-501 Clements Road West
-				Ajax  Ontario  L1s7H4
-				CA
-
-70-B3-D5   (hex)		Giant Power Technology Biomedical Corporation
-A8B000-A8BFFF     (base 16)		Giant Power Technology Biomedical Corporation
-				Rm201, 2nd Educational Building, No. 84, Gongzhuan Rd, Taishan Dist
-				New Taipei City    24301
-				TW
-
-70-B3-D5   (hex)		LUCEO
-6BB000-6BBFFF     (base 16)		LUCEO
-				16 Rue Laënnec
-				Vern Sur Seiche  Bretagne  35770
-				FR
-
-70-B3-D5   (hex)		INEO-SENSE
-637000-637FFF     (base 16)		INEO-SENSE
-				125 rue de l'Hostellerie, Immeuble Ellipsis - Niv 4-12
-				NIMES    30900
-				FR
-
-70-B3-D5   (hex)		Lumacron Technology Ltd.
-778000-778FFF     (base 16)		Lumacron Technology Ltd.
-				4 Pitreavie Court, Pitreavie Business Park
-				Dunfermline  Fife  KY11 8UU
-				GB
-
-70-B3-D5   (hex)		Gecko Robotics Inc
-04A000-04AFFF     (base 16)		Gecko Robotics Inc
-				6901 Lynn Way, Suite 310
-				Pittsburgh  PA  15208
-				US
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-FBD000-FBDFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Fourth Frontier Technologies Private Limited
-E2C000-E2CFFF     (base 16)		Fourth Frontier Technologies Private Limited
-				91 Bhuvaneshwari Nagar, CV Raman Nagar Post
-				Bangalore  Karnataka  560093
-				IN
-
-70-B3-D5   (hex)		hera Laborsysteme GmbH
-4C2000-4C2FFF     (base 16)		hera Laborsysteme GmbH
-				Hermann-Rapp-Str. 40
-				Blaufelden    74572
-				DE
-
-70-B3-D5   (hex)		Proximus
-AA6000-AA6FFF     (base 16)		Proximus
-				Bld du Roi Albert II 27
-				Brussels    1030
-				BE
-
-70-B3-D5   (hex)		Joehl & Koeferli AG
-81A000-81AFFF     (base 16)		Joehl & Koeferli AG
-				Wittenwilerstrasse 31
-				Aadorf  TG  8355
-				CH
-
-70-B3-D5   (hex)		TATTILE SRL
-825000-825FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Tunstall A/S
-2F8000-2F8FFF     (base 16)		Tunstall A/S
-				Niels Bohrs vej 42
-				Stilling  Skanderborg  8660
-				DK
-
-70-B3-D5   (hex)		Tibit Communications
-523000-523FFF     (base 16)		Tibit Communications
-				1 Willowbrook Court, Suite 150
-				Petaluma  CA  94954
-				US
-
-70-B3-D5   (hex)		ATG UV Technology
-E9C000-E9CFFF     (base 16)		ATG UV Technology
-				Genesis House
-				Wigan    WN5 8AA
-				GB
-
-70-B3-D5   (hex)		Cybercom AB
-FF7000-FF7FFF     (base 16)		Cybercom AB
-				Lindholmenspiren 3A
-				Göteborg  Vastra götland  41756
-				SE
-
-70-B3-D5   (hex)		IoTrek Technology Private Limited
-A07000-A07FFF     (base 16)		IoTrek Technology Private Limited
-				Paharganj, Delhi
-				New Delhi  New Delhi  110055
-				IN
-
-70-B3-D5   (hex)		ANKER-EAST
-C4B000-C4BFFF     (base 16)		ANKER-EAST
-				B. Raznochinnaya 28
-				St Petersburg    197110
-				RU
-
-70-B3-D5   (hex)		Schneider Displaytechnik GmbH
-9C0000-9C0FFF     (base 16)		Schneider Displaytechnik GmbH
-				Tegelweg, 14
-				Paderborn    33102
-				DE
-
-70-B3-D5   (hex)		Canam Technology, Inc.
-B97000-B97FFF     (base 16)		Canam Technology, Inc.
-				5318 East 2nd. St, #700
-				Long Beach  CA  90803
-				US
-
-70-B3-D5   (hex)		FRANKLIN FRANCE
-767000-767FFF     (base 16)		FRANKLIN FRANCE
-				13 RUE LOUIS ARMAND
-				OZOIR LA FERRIERE    77330
-				FR
-
-70-B3-D5   (hex)		ENERGISME
-465000-465FFF     (base 16)		ENERGISME
-				88 avenue du General Leclerc
-				Boulogne Billancourt    92100
-				FR
-
-70-B3-D5   (hex)		DUVAL MESSIEN
-F07000-F07FFF     (base 16)		DUVAL MESSIEN
-				30 RUE DE LA VARENNE
-				ST MAUR DES FOSSES    94100
-				FR
-
-70-B3-D5   (hex)		TTC TELEKOMUNIKACE, s.r.o.
-6B1000-6B1FFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
-				Trebohosticka 5
-				Praha 10  Praha  10000
-				CZ
-
-70-B3-D5   (hex)		Smith Meter, Inc.
-816000-816FFF     (base 16)		Smith Meter, Inc.
-				1602 Wagner Ave.
-				Erie  PA  16514
-				US
-
-70-B3-D5   (hex)		The Institute of Mine Seismology
-930000-930FFF     (base 16)		The Institute of Mine Seismology
-				175 Tinderbox Road
-				Tinderbox, Hobart  Tasmania  7054
-				AU
-
-70-B3-D5   (hex)		Beijing Wing ICT Technology Co., Ltd.
-EBB000-EBBFFF     (base 16)		Beijing Wing ICT Technology Co., Ltd.
-				Room901，Fuhai international harbour Building,Daliushu Road No.17,Haidian District
-				Beijing  Beijing  100081
-				CN
-
-70-B3-D5   (hex)		HDANYWHERE
-60E000-60EFFF     (base 16)		HDANYWHERE
-				Unit 23 Link Business Centre
-				Malvern  Worcs  WR14 1UQ
-				GB
-
-70-B3-D5   (hex)		Revolution Retail Systems, LLC
-B53000-B53FFF     (base 16)		Revolution Retail Systems, LLC
-				1840 Hutton Drive Ste 130
-				Carrollton  TX  75006
-				US
-
-70-B3-D5   (hex)		APG Cash Drawer, LLC
-37A000-37AFFF     (base 16)		APG Cash Drawer, LLC
-				5250 Industrial Blvd NE
-				Minneapolis  MN  55421
-				US
-
-70-B3-D5   (hex)		Pivothead
-63C000-63CFFF     (base 16)		Pivothead
-				1224 Speer Blvd. 
-				Denver  CO  80204
-				US
-
-70-B3-D5   (hex)		exceet electronics GesmbH
-A85000-A85FFF     (base 16)		exceet electronics GesmbH
-				Wildbichlerstraße 2e
-				Ebbs  Austria  6341
-				AT
-
-70-B3-D5   (hex)		digital-spice
-AFF000-AFFFFF     (base 16)		digital-spice
-				toyohira529-2
-				chino  nagano  391-0213
-				JP
-
-70-B3-D5   (hex)		Miguel Corporate Services Pte Ltd
-136000-136FFF     (base 16)		Miguel Corporate Services Pte Ltd
-				18 Sin Ming Lane #06-32 Midview City
-				Singapore    573960
-				SG
-
-70-B3-D5   (hex)		XotonicsMED GmbH
-C06000-C06FFF     (base 16)		XotonicsMED GmbH
-				Gewerbestrasse, 19
-				Treuen OT Hartmannsgrün  Saxony  08233
-				DE
-
-70-B3-D5   (hex)		Megaflex Oy
-7E5000-7E5FFF     (base 16)		Megaflex Oy
-				Nuijamiestentie 3 c 1
-				Helsinki  Select State  00400
-				FI
-
-70-B3-D5   (hex)		FDSTiming
-5F4000-5F4FFF     (base 16)		FDSTiming
-				Rue du Nord 123
-				la Chaux-de-Fonds    2300
-				CH
-
-70-B3-D5   (hex)		Euklis by GSG International
-D32000-D32FFF     (base 16)		Euklis by GSG International
-				via Colombo 23
-				Trezzano sul Naviglio  MI  20090
-				IT
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-9C7000-9C7FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-D9A000-D9AFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-70-B3-D5   (hex)		PTYPE Co., LTD.
-6B0000-6B0FFF     (base 16)		PTYPE Co., LTD.
-				B121, B-dong, Keumkang Penterium IT Tower, 810, Gwanyand 2-dong, Dongan-gu
-				Anyang-si  Gyeonggi-do  14056
-				KR
-
-70-B3-D5   (hex)		WELT Corporation
-8CB000-8CBFFF     (base 16)		WELT Corporation
-				Seocho, Bangbae, 481-5
-				Seoul    06699
-				KR
-
-70-B3-D5   (hex)		Hangzhou SunTown Intelligent Science & Technology Co.,Ltd.
-90A000-90AFFF     (base 16)		Hangzhou SunTown Intelligent Science & Technology Co.,Ltd.
-				Hangzhou Zhenhua Road, Xihu District No. 298 West Port A District 2 16F
-				Hangzhou  Zhejiang Province  310030
-				CN
-
-70-B3-D5   (hex)		ATE Systems Inc
-594000-594FFF     (base 16)		ATE Systems Inc
-				85 Rangeway Road
-				N Billerica  MA  01862
-				US
-
-70-B3-D5   (hex)		TD ECOPHISIKA
-27A000-27AFFF     (base 16)		TD ECOPHISIKA
-				Vernadskogo,77
-				Moscow    119415
-				RU
-
-70-B3-D5   (hex)		Alion Science & Technology
-70F000-70FFFF     (base 16)		Alion Science & Technology
-				220 Salina Meadows Pkwy, Suite 210
-				Syracuse  NY  13212
-				US
-
-70-B3-D5   (hex)		Inova Design Solutions Ltd
-131000-131FFF     (base 16)		Inova Design Solutions Ltd
-				40 Occam Road
-				Guildford  SURREY  GU2 7YG
-				GB
-
-70-B3-D5   (hex)		DCNS
-989000-989FFF     (base 16)		DCNS
-				40-42 Rue du docteur Finlay
-				PARIS CEDEX 15    75732
-				FR
-
-70-B3-D5   (hex)		Instec, Inc.
-22F000-22FFFF     (base 16)		Instec, Inc.
-				5589 Arapahoe Avenue, Ste. 208
-				Boulder  CO  80303
-				US
-
-70-B3-D5   (hex)		Montalvo
-227000-227FFF     (base 16)		Montalvo
-				50 hutcherson drive
-				Gorham  ME  04038
-				US
-
-70-B3-D5   (hex)		DR.BRIDGE AQUATECH
-779000-779FFF     (base 16)		DR.BRIDGE AQUATECH
-				4F., No.40, Sec. 3, Chengde Rd., Datong Dist.,
-				 Taipei    103
-				TW
-
-70-B3-D5   (hex)		Design For Life Systems
-A20000-A20FFF     (base 16)		Design For Life Systems
-				Unit 15, Jubilee Enterprise Centre
-				Weymouth    DT47BS
-				GB
-
-70-B3-D5   (hex)		Finder SpA
-FEC000-FECFFF     (base 16)		Finder SpA
-				via Drubiaglio 14
-				Almese  TO  10040
-				IT
-
-70-B3-D5   (hex)		XGEM SAS
-498000-498FFF     (base 16)		XGEM SAS
-				9 Rue de la Négresse
-				Biarritz    64200
-				FR
-
-70-B3-D5   (hex)		TIAMA
-A33000-A33FFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-70-B3-D5   (hex)		Advanced Products Corporation Pte Ltd
-CED000-CEDFFF     (base 16)		Advanced Products Corporation Pte Ltd
-				5006 Ang Mo Kio Ave 5, #05-01/12 TECHPlace II
-				Singapore    569873
-				SG
-
-70-B3-D5   (hex)		D.Marchiori Srl
-42C000-42CFFF     (base 16)		D.Marchiori Srl
-				Via Pontina Km 43,856
-				Aprilia  LT  04011
-				IT
-
-70-B3-D5   (hex)		RF Track
-E82000-E82FFF     (base 16)		RF Track
-				80, avenue des buttes de Coesmes
-				Rennes    35700
-				FR
-
-70-B3-D5   (hex)		CRDE
-855000-855FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		aelettronica group srl
-4A7000-4A7FFF     (base 16)		aelettronica group srl
-				via matteotti,22
-				gaggiano  milano  20083
-				IT
-
-70-B3-D5   (hex)		JETI Technische Instrumente GmbH
-938000-938FFF     (base 16)		JETI Technische Instrumente GmbH
-				Tatzendpromenade 2
-				Jena    07745
-				DE
-
-70-B3-D5   (hex)		Flextronics Canafa Design Services
-F8D000-F8DFFF     (base 16)		Flextronics Canafa Design Services
-				1280 Teron Road
-				Ottawa  ON  K2K 2C1
-				CA
-
-70-B3-D5   (hex)		SOLVERIS sp. z o.o.
-4C7000-4C7FFF     (base 16)		SOLVERIS sp. z o.o.
-				Majdan Krasieniński 16A
-				Niemce  lubelskie  21-025
-				PL
-
-70-B3-D5   (hex)		Netemera Sp. z o.o.
-CA4000-CA4FFF     (base 16)		Netemera Sp. z o.o.
-				Ostrobramska 83/1208A
-				Warszawa  mazowieckie  04-175
-				PL
-
-70-B3-D5   (hex)		GS Industrie-Elektronik GmbH
-A53000-A53FFF     (base 16)		GS Industrie-Elektronik GmbH
-				Porschestrasse 11
-				Leverkusen    51381
-				DE
-
-70-B3-D5   (hex)		Morgan Schaffer Inc.
-7C2000-7C2FFF     (base 16)		Morgan Schaffer Inc.
-				8300 rue St-Patrick bureau 150
-				LaSalle  Quebec  H8N 2H1
-				CA
-
-70-B3-D5   (hex)		PEEK TRAFFIC
-68F000-68FFFF     (base 16)		PEEK TRAFFIC
-				5401 N SAM HOUSTON PKWY W
-				HOUSTON  TX  77086
-				US
-
-70-B3-D5   (hex)		Bel Power Solutions GmbH
-CAA000-CAAFFF     (base 16)		Bel Power Solutions GmbH
-				Ackerstrasse 56
-				Uster    8610
-				CH
-
-70-B3-D5   (hex)		Pycom Ltd
-499000-499FFF     (base 16)		Pycom Ltd
-				57 Avenue Road
-				Cranleigh  Surrey  GU6 7LJ
-				GB
-
-70-B3-D5   (hex)		Sertone, a division of Opti-Knights Ltd
-584000-584FFF     (base 16)		Sertone, a division of Opti-Knights Ltd
-				Chesterfield House, 207 Old Marylebone Road
-				London     NW1 5QP 
-				GB
-
-70-B3-D5   (hex)		SICS Swedish ICT
-7D5000-7D5FFF     (base 16)		SICS Swedish ICT
-				Isafjordsgatan 22
-				Kista  Stockholm  SE-164 40
-				SE
-
-70-B3-D5   (hex)		HOSIN INDUSTRIAL LIMITED
-692000-692FFF     (base 16)		HOSIN INDUSTRIAL LIMITED
-				15 Floor, Investment building, Shennan Road 4009, Futian
-				Shenzhen    518031
-				CN
-
-70-B3-D5   (hex)		ACS MOTION CONTROL
-9D2000-9D2FFF     (base 16)		ACS MOTION CONTROL
-				1 Hataasia St., Ramat Gabriel Industrial Park,
-				Migdal Ha'Emek  Israel  2307037
-				IL
-
-70-B3-D5   (hex)		CJSC «Russian telecom equipment company» (CJSC RTEC)
-6C5000-6C5FFF     (base 16)		CJSC «Russian telecom equipment company» (CJSC RTEC)
-				Zvenigorodskaya 2-nd  street 13/15
-				Moscow    123022
-				RU
-
-70-B3-D5   (hex)		Open Grow
-696000-696FFF     (base 16)		Open Grow
-				Edifício Expobeiras
-				Viseu  Viseu  3500 618
-				PT
-
-70-B3-D5   (hex)		Sontay Ltd.
-55A000-55AFFF     (base 16)		Sontay Ltd.
-				Four Elms Road
-				Edenbridge    TN86AB
-				GB
-
-70-B3-D5   (hex)		NEXTtec srl
-02D000-02DFFF     (base 16)		NEXTtec srl
-				Via Ivrea 71/B
-				Rivoli  TO  10098
-				IT
-
-70-B3-D5   (hex)		Survalent Technology Corporation
-78C000-78CFFF     (base 16)		Survalent Technology Corporation
-				7965 Heritage Road
-				Brampton  Ontario  L6Y 5X5
-				CA
-
-70-B3-D5   (hex)		LOGIX ITS Inc
-B7D000-B7DFFF     (base 16)		LOGIX ITS Inc
-				990 upton
-				lasalle  Quebec  h8r2t9
-				CA
-
-70-B3-D5   (hex)		Eiden Co.,Ltd.
-167000-167FFF     (base 16)		Eiden Co.,Ltd.
-				2-7-1 kurigi,asao-ku,kawasaki-shi
-				kanagawa    215-0033
-				JP
-
-70-B3-D5   (hex)		B.P.A. SRL
-49F000-49FFFF     (base 16)		B.P.A. SRL
-				Via Primo Villa 2/1
-				Burago di Molgora  MB  20875
-				IT
-
-70-B3-D5   (hex)		MART NETWORK SOLUTIONS LTD
-ABE000-ABEFFF     (base 16)		MART NETWORK SOLUTIONS LTD
-				ABBEY HOUSE, 450 BATH ROAD
-				LONGFORD  MIDDLESEX  UB70EB
-				GB
-
-70-B3-D5   (hex)		Rohde&Schwarz Topex SA
-186000-186FFF     (base 16)		Rohde&Schwarz Topex SA
-				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
-				Bucuresti  Romania  014142
-				RO
-
-70-B3-D5   (hex)		Kratos Analytical Ltd
-8DB000-8DBFFF     (base 16)		Kratos Analytical Ltd
-				Trafford Wharf Road
-				Manchester    M17 1GP
-				GB
-
-70-B3-D5   (hex)		WUHAN EASYLINKIN TECHNOLOGY co.,LTD
-88B000-88BFFF     (base 16)		WUHAN EASYLINKIN TECHNOLOGY co.,LTD
-				22 Optics Valley Ave.,East Lake New Technology Development Zone
-				WUHAN  HUBEI  430000
-				CN
-
-70-B3-D5   (hex)		Mechatronics Systems Private Limited
-5E6000-5E6FFF     (base 16)		Mechatronics Systems Private Limited
-				S No. 107, Warje, Mechatronics House, Off Mumbai Bangalore Bypass Highway, Near Rosary School,
-				Pune  Maharashtra  411058
-				IN
-
-70-B3-D5   (hex)		SensoTec GmbH
-AAC000-AACFFF     (base 16)		SensoTec GmbH
-				Hinter dem Turme 15
-				Braunschweig    38114
-				DE
-
-70-B3-D5   (hex)		CRDE
-6EC000-6ECFFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		CTAG - ESG36871424
-B55000-B55FFF     (base 16)		CTAG - ESG36871424
-				Pol. Industrial A Granxa, Calle A, parcelas 249-250
-				Porriño  Pontevedra  36400
-				ES
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-986000-986FFF     (base 16)		Aplex Technology Inc.
-				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-70-B3-D5   (hex)		TLV CO., LTD.
-A2C000-A2CFFF     (base 16)		TLV CO., LTD.
-				881 Nagasuna, Noguchi
-				Kakogawa, Hyogo    675-8511
-				JP
-
-70-B3-D5   (hex)		TATTILE SRL
-881000-881FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		mapna group
-04C000-04CFFF     (base 16)		mapna group
-				mirdamad
-				Tehran    0512258788
-				IR
-
-70-B3-D5   (hex)		w-tec AG
-A10000-A10FFF     (base 16)		w-tec AG
-				Dombachstrasse 1a
-				Bad Homburg    61352
-				DE
-
-70-B3-D5   (hex)		Vitrea Smart Home Technologies 
-51B000-51BFFF     (base 16)		Vitrea Smart Home Technologies 
-				11 Moshe Levi st.
-				Rishon Lezion    7565828
-				IL
-
-70-B3-D5   (hex)		Proconex 2010 Inc.
-CCE000-CCEFFF     (base 16)		Proconex 2010 Inc.
-				16753 Hymus Blvd.
-				Kirkland  Quebec  H9H 3L4
-				CA
-
-70-B3-D5   (hex)		Marques,S.A.
-643000-643FFF     (base 16)		Marques,S.A.
-				Zona Industrial da Alagoa - APT 3134
-				Águeda  Aveiro  3754-901
-				PT
-
-70-B3-D5   (hex)		Transelektronik Messgeräte GmbH
-A7C000-A7CFFF     (base 16)		Transelektronik Messgeräte GmbH
-				Theresiengasse 3
-				Wien  Austria  1180
-				AT
-
-70-B3-D5   (hex)		Dolotron d.o.o.
-91B000-91BFFF     (base 16)		Dolotron d.o.o.
-				Ziskovec 141
-				Cakovec    40000
-				HR
-
-70-B3-D5   (hex)		 GD Mission Systems
-39C000-39CFFF     (base 16)		 GD Mission Systems
-				8220 E. Roosevelt St.
-				Scottsdale  AZ  85257
-				US
-
-70-B3-D5   (hex)		APG Cash Drawer, LLC
-712000-712FFF     (base 16)		APG Cash Drawer, LLC
-				5250 Industrial Blvd NE
-				Minneapolis  MN  55421
-				US
-
-70-B3-D5   (hex)		Rimota Limited
-8F2000-8F2FFF     (base 16)		Rimota Limited
-				Archer House, Britland Estate, Northbourne Road
-				Eastbourne  East Sussex  BN22 8PW
-				GB
-
-70-B3-D5   (hex)		ZIGPOS GmbH
-879000-879FFF     (base 16)		ZIGPOS GmbH
-				Strehlener Straße 12/14
-				Dresden  Saxony  01069
-				DE
-
-70-B3-D5   (hex)		Novoptel GmbH
-AC3000-AC3FFF     (base 16)		Novoptel GmbH
-				EIM-E, Warburger Str. 100
-				Paderborn    33098
-				DE
-
-70-B3-D5   (hex)		Applied Radar, Inc.
-35A000-35AFFF     (base 16)		Applied Radar, Inc.
-				315 Commerce Park Road Unit 3
-				North Kingstown  RI  02886
-				US
-
-70-B3-D5   (hex)		MAVILI ELEKTRONIK TIC. VE SAN. A.S.
-DE4000-DE4FFF     (base 16)		MAVILI ELEKTRONIK TIC. VE SAN. A.S.
-				Serifali Mah. Kutup Sk. No: 27/1-2-4
-				Istanbul  Umraniye  34775
-				TR
-
-70-B3-D5   (hex)		Otto Bihler Maschinenfabrik GmbH & Co. KG
-6BF000-6BFFFF     (base 16)		Otto Bihler Maschinenfabrik GmbH & Co. KG
-				Lechbrucker Str. 15
-				Halblech    87642
-				DE
-
-70-B3-D5   (hex)		CRDE
-D65000-D65FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		ACD Elekronik GmbH
-DE2000-DE2FFF     (base 16)		ACD Elekronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		Instro Precision Limited
-B81000-B81FFF     (base 16)		Instro Precision Limited
-				15 Hornet Close, Pysons Road Industrial Estate
-				Broadstairs  Kent  CT10 2YD
-				GB
-
-70-B3-D5   (hex)		ES Industrial Systems Co., Ltd.
-9E0000-9E0FFF     (base 16)		ES Industrial Systems Co., Ltd.
-				B-dong, 12, Baekseokgongdan 3-gil, Seobuk-gu, Cheonan-si, Chungcheongnam-do
-				Cheonan-si  Chungcheongnam-do  31094
-				KR
-
-70-B3-D5   (hex)		Trapeze Software Group Inc
-A66000-A66FFF     (base 16)		Trapeze Software Group Inc
-				5265 Rockwell Dr NE
-				Cedar Rapids  IA  52402
-				US
-
-70-B3-D5   (hex)		InsideRF Co., Ltd.
-0FA000-0FAFFF     (base 16)		InsideRF Co., Ltd.
-				801 31 Seongsui-ro 24-gil Seongdong-gu
-				Seoul  Asia  04798
-				KR
-
-70-B3-D5   (hex)		Access Control Systems JSC
-1AB000-1ABFFF     (base 16)		Access Control Systems JSC
-				Bogatyrsky av. 18/1 office 505
-				Sankt-Peterburg    197348
-				RU
-
-70-B3-D5   (hex)		AT-Automation Technology GmbH
-028000-028FFF     (base 16)		AT-Automation Technology GmbH
-				Hermann-Boessow-Str. 6-8
-				Bad Oldesloe    D-23843
-				DE
-
-70-B3-D5   (hex)		tinnos
-CF2000-CF2FFF     (base 16)		tinnos
-				  4th Floor, 25, Banpo-daero
-				Seocho-gu  Seoul  06710
-				KR
-
-70-B3-D5   (hex)		G-PHILOS CO.,LTD
-D34000-D34FFF     (base 16)		G-PHILOS CO.,LTD
-				#602,3 RDWOOLIMLIONSVALLY 24, DUNCHONDAERO, 388BEAN-GIL JUNGWONGU
-				SEOUNGNAM-SI  GYEONGGI-DO  13403
-				KR
-
-70-B3-D5   (hex)		emperor brands
-658000-658FFF     (base 16)		emperor brands
-				11345 Ventura Blvd
-				Studio City  CA  90043
-				US
-
-70-B3-D5   (hex)		Dewetron GmbH
-D94000-D94FFF     (base 16)		Dewetron GmbH
-				Parkring 4
-				Grambach    8074
-				AT
-
-70-B3-D5   (hex)		Grace Design/Lunatec LLC
-A3B000-A3BFFF     (base 16)		Grace Design/Lunatec LLC
-				4689 Ute Highway
-				Longmont  CO  80503
-				US
-
-70-B3-D5   (hex)		IDA
-B89000-B89FFF     (base 16)		IDA
-				1801 38th Street South
-				Fargo  ND  58103
-				US
-
-70-B3-D5   (hex)		Uni Control System Sp. z o. o.
-05A000-05AFFF     (base 16)		Uni Control System Sp. z o. o.
-				Kartuska 391A
-				Gdansk  Pomorskie  80-125
-				PL
-
-70-B3-D5   (hex)		ATEME
-531000-531FFF     (base 16)		ATEME
-				6 rue Dewoitine
-				Vélizy-Villacoublay    78140
-				FR
-
-70-B3-D5   (hex)		Reactec Ltd
-7A0000-7A0FFF     (base 16)		Reactec Ltd
-				Vantage Point
-				Edinburgh  -- select a state --  EH11 4DF
-				GB
-
-70-B3-D5   (hex)		RedWave Labs Ltd
-B67000-B67FFF     (base 16)		RedWave Labs Ltd
-				173 Curie Ave
-				Didcot    OX11 0QG
-				GB
-
-70-B3-D5   (hex)		INFRASAFE/ ADVANTOR SYSTEMS 
-C32000-C32FFF     (base 16)		INFRASAFE/ ADVANTOR SYSTEMS 
-				12612 CHALLENGER PARKWAY 
-				ORLANDO  FL  32826
-				US
-
-70-B3-D5   (hex)		OCULI VISION
-17E000-17EFFF     (base 16)		OCULI VISION
-				Dubai Multi Commodities Centre, Jumeirah Lake Towers, HDS TOWER
-				Office 304  Dubai  PO Box 341061
-				AE
-
-70-B3-D5   (hex)		Wincode Technology Co., Ltd.
-3F4000-3F4FFF     (base 16)		Wincode Technology Co., Ltd.
-				13F., No.219, Sec. 3, Beixin Rd.,
-				Xindian Dist  New Taipei City   231
-				TW
-
-70-B3-D5   (hex)		Thinnect, Inc,
-E39000-E39FFF     (base 16)		Thinnect, Inc,
-				440 N Wolfe Rd
-				Sunnyvale  CA  94085
-				US
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-FD8000-FD8FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Power Ltd.
-37B000-37BFFF     (base 16)		Power Ltd.
-				Kazal str. 64-66
-				Budapest    1031
-				HU
-
-70-B3-D5   (hex)		CRDE
-CAC000-CACFFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		PushCorp, Inc.
-74E000-74EFFF     (base 16)		PushCorp, Inc.
-				3001 W. Kingsley Rd.
-				Garland  TX  75041
-				US
-
-70-B3-D5   (hex)		Mecsel Oy
-7E9000-7E9FFF     (base 16)		Mecsel Oy
-				Laitilankuja 5
-				Helsinki    00420
-				FI
-
-70-B3-D5   (hex)		Mango DSP, Inc.
-6DF000-6DFFFF     (base 16)		Mango DSP, Inc.
-				83 East Avenue Suite#115
-				Norwalk  CT  06851
-				US
-
-70-B3-D5   (hex)		AppTek
-06C000-06CFFF     (base 16)		AppTek
-				6867 Elm Street, Suite 300
-				McLean  VA  22101
-				US
-
-70-B3-D5   (hex)		VITEC MULTIMEDIA
-A9D000-A9DFFF     (base 16)		VITEC MULTIMEDIA
-				99, rue Pierre SÃ©mard
-				CHATILLON    92324 CEDEX
-				FR
-
-70-B3-D5   (hex)		Motec Pty Ltd
-618000-618FFF     (base 16)		Motec Pty Ltd
-				121 Merrindale Drive
-				Croydon South  Victoria  3136
-				AU
-
-70-B3-D5   (hex)		ORCA Technologies, LLC
-7CF000-7CFFFF     (base 16)		ORCA Technologies, LLC
-				934 Calle Negocio, Suite B
-				San Clemente  CA  92673
-				US
-
-70-B3-D5   (hex)		Connoiseur Electronics Private Limited
-8BE000-8BEFFF     (base 16)		Connoiseur Electronics Private Limited
-				Connoiseur House, #12, 13th Main, 12th cross, Doopanahalli, H.A.L. 2nd Stage, Indiranagar
-				Bangalore  Karnataka  560038
-				IN
-
-70-B3-D5   (hex)		SA Instrumentation Limited
-733000-733FFF     (base 16)		SA Instrumentation Limited
-				Mill Court, Mill Lane
-				Tayport  Fife  DD6 9EL
-				GB
-
-70-B3-D5   (hex)		Orange Tree Technologies Ltd
-FB5000-FB5FFF     (base 16)		Orange Tree Technologies Ltd
-				173 Curie Avenue, Harwell Oxford
-				Didcot  Oxfordshire  OX11 0QG
-				GB
-
-70-B3-D5   (hex)		Tornado Modular Systems
-23E000-23EFFF     (base 16)		Tornado Modular Systems
-				Inzhenernaya st. 4a
-				Novosibirsk    630128
-				RU
-
-70-B3-D5   (hex)		Pedax Danmark
-286000-286FFF     (base 16)		Pedax Danmark
-				Tinvej 5
-				Espergærde  Sjælland  3060
-				DK
-
-70-B3-D5   (hex)		MARKUS LABS
-F65000-F65FFF     (base 16)		MARKUS LABS
-				Potocna 16
-				Kosice    04001
-				SK
-
-70-B3-D5   (hex)		MobiPromo
-09E000-09EFFF     (base 16)		MobiPromo
-				10, 64-72 Beresford Rd
-				Lilydale  Victoria  3140
-				AU
-
-70-B3-D5   (hex)		Nordic Automation Systems AS
-B02000-B02FFF     (base 16)		Nordic Automation Systems AS
-				Strandgata 12
-				Hareid  Møre og Romsdal  6060
-				NO
-
-70-B3-D5   (hex)		Elektronik & Präzisionsbau Saalfeld GmbH
-187000-187FFF     (base 16)		Elektronik & Präzisionsbau Saalfeld GmbH
-				Remschützer Straße 1
-				Saalfeld  Thüringen  07318
-				DE
-
-70-B3-D5   (hex)		TruTeq Devices (Pty) Ltd
-942000-942FFF     (base 16)		TruTeq Devices (Pty) Ltd
-				Ameton House, 1028 Clifton Avenue
-				Lyttelton Manor X3, Centurion  Gauteng  0157
-				ZA
-
-70-B3-D5   (hex)		Hatel Elektronik LTD. STI.
-1E3000-1E3FFF     (base 16)		Hatel Elektronik LTD. STI.
-				1348 Sok. No:2/V Keremogli Is Merkezi - Yenisehir
-				IZMIR  Konak  35170
-				TR
-
-70-B3-D5   (hex)		Picture Elements, Inc.
-0EE000-0EEFFF     (base 16)		Picture Elements, Inc.
-				777 Panoramic Way
-				Berkeley  CA  94704
-				US
-
-70-B3-D5   (hex)		Kendrion Mechatronics Center GmbH
-E49000-E49FFF     (base 16)		Kendrion Mechatronics Center GmbH
-				Werner-von-Siemens-Str. 12
-				Ilmenau    98693
-				DE
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-A92000-A92FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		IMAGE TECH CO.,LTD
-578000-578FFF     (base 16)		IMAGE TECH CO.,LTD
-				4-9-22,Sanarudai
-				Naka-ku,Hamamatsu  Shizuoka Prefecture  432-8021
-				JP
-
-70-B3-D5   (hex)		TATTILE SRL
-C7F000-C7FFFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-D9E000-D9EFFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		E2G srl
-659000-659FFF     (base 16)		E2G srl
-				Via Polveriera, 6
-				Novate Milanese  Milano  20026
-				IT
-
-70-B3-D5   (hex)		HYOSUNG Power & Industrial Systems
-41A000-41AFFF     (base 16)		HYOSUNG Power & Industrial Systems
-				119, Mapo-daero, Mapo-gu
-				Seoul    04144
-				KR
-
-70-B3-D5   (hex)		Flintab AB
-D60000-D60FFF     (base 16)		Flintab AB
-				Kabelvägen 4
-				Jönköping    55302
-				SE
-
-70-B3-D5   (hex)		FR-Team International SA
-476000-476FFF     (base 16)		FR-Team International SA
-				Zone industrielle lotissement Vulcalux 10
-				Windhof    8399
-				LU
-
-70-B3-D5   (hex)		Perceptics, LLC
-88A000-88AFFF     (base 16)		Perceptics, LLC
-				11130 Kingston Pike, Ste 6
-				Farragut  TN  37934
-				US
-
-70-B3-D5   (hex)		EMAC, Inc.
-729000-729FFF     (base 16)		EMAC, Inc.
-				2390 EMAC Way
-				Carbondale  IL  62901
-				US
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-605000-605FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		Kopis Mobile LLC
-A06000-A06FFF     (base 16)		Kopis Mobile LLC
-				3010 Lakeland Cv Suite M
-				Flowood  MS  39232
-				US
-
-70-B3-D5   (hex)		Smeg S.p.A.
-1C4000-1C4FFF     (base 16)		Smeg S.p.A.
-				via Leonardo da Vinci 4
-				Guastalla  RE  42016
-				IT
-
-70-B3-D5   (hex)		Dofuntech Co.,LTD.
-8F6000-8F6FFF     (base 16)		Dofuntech Co.,LTD.
-				RM306, Block E, RD Xinjunhuan,Pujiang
-				Minghang  Shanghai  201113
-				CN
-
-70-B3-D5   (hex)		Vista Research, Inc.
-D38000-D38FFF     (base 16)		Vista Research, Inc.
-				2231 Crystal Drive, Suite 515
-				Arlington  VA  22202
-				US
-
-70-B3-D5   (hex)		Abbott Medical Optics Inc.
-943000-943FFF     (base 16)		Abbott Medical Optics Inc.
-				510 Cottonwood Drive
-				Milpitas  CA  95035
-				US
-
-70-B3-D5   (hex)		TWIN DEVELOPMENT
-BF2000-BF2FFF     (base 16)		TWIN DEVELOPMENT
-				FAUBOURG DE BRUXELLES 320
-				GOSSSELIES    6041
-				BE
-
-70-B3-D5   (hex)		HAS co.,ltd.
-2B3000-2B3FFF     (base 16)		HAS co.,ltd.
-				4F Kojimachi Shimira Bldg., 4-1-5 Kojimachi
-				Chiyoda-ku  TOKYO  1020083
-				JP
-
-70-B3-D5   (hex)		AlyTech
-45C000-45CFFF     (base 16)		AlyTech
-				3 rue Condorcet
-				Juvisy sur Orge    91260
-				FR
-
-70-B3-D5   (hex)		RedLeaf Security
-7E3000-7E3FFF     (base 16)		RedLeaf Security
-				1226 Islington Avenue, Center Tower, 8-10th Floor
-				Toronto    M8X 1Y8
-				CA
-
-70-B3-D5   (hex)		CONSOSPY
-2F9000-2F9FFF     (base 16)		CONSOSPY
-				2, AVENUE GALILEE
-				CHASSENEUIL-DU-POITOU  VIENNE  86360
-				FR
-
-70-B3-D5   (hex)		Dakton Microlabs LLC
-11D000-11DFFF     (base 16)		Dakton Microlabs LLC
-				520 Brickell Key Drive, A-1811
-				Miami  FL  33131
-				US
-
-70-B3-D5   (hex)		ChamSys Ltd
-0BE000-0BEFFF     (base 16)		ChamSys Ltd
-				Unit 3B Richmond Works, Pitt Road
-				Southampton  Hampshire  SO15 3FQ
-				GB
-
-70-B3-D5   (hex)		Comark Interactive Solutions
-39D000-39DFFF     (base 16)		Comark Interactive Solutions
-				430 Fortune Blvd
-				Milford  MA  01757
-				US
-
-70-B3-D5   (hex)		Wave Music Ltd
-A3C000-A3CFFF     (base 16)		Wave Music Ltd
-				Suite 1309 Asia Standard Tower
-				59-65 Queens Road Central   Hong Kong  000000
-				HK
-
-70-B3-D5   (hex)		Yönnet Akıllı Bina ve Otomasyon Sistemleri 
-C77000-C77FFF     (base 16)		Yönnet Akıllı Bina ve Otomasyon Sistemleri 
-				Şebnem Sokak Tavukçuoglu
-				Istanbul  Bostancı/Kadıköy  34744
-				TR
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-A95000-A95FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		EPD Electronics
-5B1000-5B1FFF     (base 16)		EPD Electronics
-				5 Acee Drive
-				Natrona Heights  PA  15065
-				US
-
-70-B3-D5   (hex)		HUSTY M.Styczen J.Hupert sp.j.
-B28000-B28FFF     (base 16)		HUSTY M.Styczen J.Hupert sp.j.
-				ul.Rzepakowa 5e
-				Krakow  malopolska  31-989
-				PL
-
-70-B3-D5   (hex)		Wuxi New Optical Communication Co.,Ltd.
-524000-524FFF     (base 16)		Wuxi New Optical Communication Co.,Ltd.
-				Room 301,Building No. 2, Zhongguancun Software Park Taihu Sub-park
-				Wuxi  Jiangsu  214315
-				CN
-
-70-B3-D5   (hex)		WICOM1 GmbH
-57D000-57DFFF     (base 16)		WICOM1 GmbH
-				Im Frauental 15
-				Amberg  Bavaria  92224
-				DE
-
-70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S.L.
-A12000-A12FFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
-				Antoni Isern 4 baixos
-				Reus  Tarragona  43205
-				ES
-
-70-B3-D5   (hex)		Net And Print Inc.
-AF5000-AF5FFF     (base 16)		Net And Print Inc.
-				52-1, Aza Kawakubo,
-				Koriyama  Fukushima  963-0725
-				JP
-
-70-B3-D5   (hex)		SmartGuard LLC
-C01000-C01FFF     (base 16)		SmartGuard LLC
-				3660 Technology Drive NE
-				Minneapolis  MN  55418
-				US
-
-70-B3-D5   (hex)		INFOSOFT DIGITAL DESIGN & SERVICES PRIVATE LIMITED
-4EB000-4EBFFF     (base 16)		INFOSOFT DIGITAL DESIGN & SERVICES PRIVATE LIMITED
-				104-105, Suneja Tower-1
-				New Delhi  Delhi  110058
-				IN
-
-70-B3-D5   (hex)		Shachihata Inc.
-6FB000-6FBFFF     (base 16)		Shachihata Inc.
-				37 , SHINMEI-CHO , KOUWA
-				INAZAWA  AICHI  492-8102
-				JP
-
-70-B3-D5   (hex)		ERMINE Corporation
-D73000-D73FFF     (base 16)		ERMINE Corporation
-				Hirooka-Harashinden 573-6, SK-Residence,
-				Shiojiri  Nagano  399-0706
-				JP
-
-70-B3-D5   (hex)		Netbric Technology Co.,Ltd.
-64A000-64AFFF     (base 16)		Netbric Technology Co.,Ltd.
-				Room 801D, POWER CREATIVE #E, 1st Shangdi
-				  BeiJing  100085
-				CN
-
-70-B3-D5   (hex)		Golden Grid Systems
-20A000-20AFFF     (base 16)		Golden Grid Systems
-				2775 Curry Street
-				pleasanton  California  94588
-				US
-
-70-B3-D5   (hex)		CRDE
-7C8000-7C8FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		SURTEC
-5FC000-5FCFFF     (base 16)		SURTEC
-				616 avenue de l'Europe
-				Le Creusot  burgundy  71206
-				FR
-
-70-B3-D5   (hex)		GLOBALCOM ENGINEERING SPA
-D3F000-D3FFFF     (base 16)		GLOBALCOM ENGINEERING SPA
-				Via Volta 9
-				MORNAGO  VA  21020
-				IT
-
-70-B3-D5   (hex)		Precitec Optronik GmbH
-0C5000-0C5FFF     (base 16)		Precitec Optronik GmbH
-				Schleussnerstraße 54
-				Neu-Isenburg  Hessen  63263
-				DE
-
-70-B3-D5   (hex)		Swiftnet SOC Ltd
-76A000-76AFFF     (base 16)		Swiftnet SOC Ltd
-				Bldg 22, Cambridge Office Park
-				Centurion  Gauteng  0157
-				ZA
-
-70-B3-D5   (hex)		Triax A/S
-D7E000-D7EFFF     (base 16)		Triax A/S
-				Bjornkaervej 3
-				Hornsyld  Denmark  8783
-				DK
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-EA4000-EA4FFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		NARA CONTROLS INC.
-FDF000-FDFFFF     (base 16)		NARA CONTROLS INC.
-				NARA BUILDING, 12TH FLOOR 719
-				SEOUL  SEOUL  100-043
-				KR
-
-70-B3-D5   (hex)		ART SPA
-E7A000-E7AFFF     (base 16)		ART SPA
-				VOC.PISCHIELLO, 20
-				PASSIGNANO SUL TRASIMENO  PG  06065
-				IT
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-F00000-F00FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		Yaviar
-226000-226FFF     (base 16)		Yaviar
-				Mamina-Sibiryaka 145
-				Ekaterinburg  Sverdlovsk oblast  620137
-				RU
-
-70-B3-D5   (hex)		LumiGrow, Inc
-172000-172FFF     (base 16)		LumiGrow, Inc
-				8 Digital Drive
-				Novato  CA  94949
-				US
-
-70-B3-D5   (hex)		TRIUMPH BOARD a.s.
-D57000-D57FFF     (base 16)		TRIUMPH BOARD a.s.
-				Neklanova 122/15
-				Prague    12800
-				CZ
-
-70-B3-D5   (hex)		Hydra Controls
-3FF000-3FFFFF     (base 16)		Hydra Controls
-				291 Worcester Road
-				New Braintree  MA  01531
-				US
-
-70-B3-D5   (hex)		Elektro-System s.c.
-343000-343FFF     (base 16)		Elektro-System s.c.
-				Sienkiewicza 25
-				Kutno  łódzkie  99-300
-				PL
-
-70-B3-D5   (hex)		Dynetics, Inc.
-B91000-B91FFF     (base 16)		Dynetics, Inc.
-				1004 Explorer Blvd
-				Huntsville  AL  35806
-				US
-
-70-B3-D5   (hex)		Xiamen Maxincom Technologies Co., Ltd.
-9E7000-9E7FFF     (base 16)		Xiamen Maxincom Technologies Co., Ltd.
-				B1F, A District, HuaXun Building,
-				Xiamen  Fujian  361000
-				CN
-
-70-B3-D5   (hex)		Quadio Devices Private Limited
-472000-472FFF     (base 16)		Quadio Devices Private Limited
-				101 Business Avenue
-				Pune  Maharashtra  411001
-				IN
-
-70-B3-D5   (hex)		sydetion UG (h.b.)
-538000-538FFF     (base 16)		sydetion UG (h.b.)
-				Helfensteinstr. 14
-				GOEPPINGEN  BW  73037
-				DE
-
-70-B3-D5   (hex)		Bolide Technology Group, Inc.
-2DC000-2DCFFF     (base 16)		Bolide Technology Group, Inc.
-				468 S. San Dimas Ave.,
-				San Dimas  CA  91773
-				US
-
-70-B3-D5   (hex)		MC2-Technologies
-505000-505FFF     (base 16)		MC2-Technologies
-				5 rue du Colibri
-				Villeneuve d'Ascq  Nord  59650
-				FR
-
-70-B3-D5   (hex)		EIDOS s.p.a.
-35E000-35EFFF     (base 16)		EIDOS s.p.a.
-				Via dell'Industria, 11
-				CHIERI  TO  10023
-				IT
-
-70-B3-D5   (hex)		DuraComm Corporation
-6B3000-6B3FFF     (base 16)		DuraComm Corporation
-				6655 Troost Avenue
-				Kansas City  MO  64131
-				US
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-2EE000-2EEFFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		ID Lock AS
-F2D000-F2DFFF     (base 16)		ID Lock AS
-				Stasjonsveien 46
-				Moi  Rogaland  4460
-				NO
-
-70-B3-D5   (hex)		GACI
-4AD000-4ADFFF     (base 16)		GACI
-				5 avenue du Québec
-				Villebon sur Yvette  Essonne  91140
-				FR
-
-70-B3-D5   (hex)		Sensor Developments
-935000-935FFF     (base 16)		Sensor Developments
-				Nordre Kullerød 21
-				Sandefjord    3241
-				NO
-
-70-B3-D5   (hex)		Array Telepresence
-C2A000-C2AFFF     (base 16)		Array Telepresence
-				7593 Tylers Place Blvd.
-				West Chester  Ohio  45069
-				US
-
-70-B3-D5   (hex)		Solid State Disks Ltd
-C85000-C85FFF     (base 16)		Solid State Disks Ltd
-				The Granary
-				Reading  Berkshire  RG74BB
-				GB
-
-70-B3-D5   (hex)		dinosys
-F36000-F36FFF     (base 16)		dinosys
-				501,35,Gwangnaruro 6-gil,
-				Seoul  Seoul  133-832
-				KR
-
-70-B3-D5   (hex)		Solectrix
-342000-342FFF     (base 16)		Solectrix
-				Fürther Str. 244b
-				Nürnberg  Bayern  90429
-				DE
-
-70-B3-D5   (hex)		Signature Control Systems, LLC.
-E20000-E20FFF     (base 16)		Signature Control Systems, LLC.
-				425 Brice Rd. North
-				Blacklick  OH  43004
-				US
-
-70-B3-D5   (hex)		OAS Sweden AB
-347000-347FFF     (base 16)		OAS Sweden AB
-				Brorod 7774
-				Klippan  Skane  26492
-				SE
-
-70-B3-D5   (hex)		iSiS-Ex Limited
-530000-530FFF     (base 16)		iSiS-Ex Limited
-				Unit A & B Windmill Industrial Estate
-				Malton  North Yorkshire  YO17 6BT
-				GB
-
-70-B3-D5   (hex)		Herrick Tech Labs
-3F9000-3F9FFF     (base 16)		Herrick Tech Labs
-				20201 Century Blvd.
-				Germantown  MD  20874
-				US
-
-70-B3-D5   (hex)		Sarokal Test Systems Oy
-FA2000-FA2FFF     (base 16)		Sarokal Test Systems Oy
-				Paulaharjuntie 20 B 2
-				Oulu  Oulu  90530
-				FI
-
-70-B3-D5   (hex)		Profound Medical Inc.
-B8B000-B8BFFF     (base 16)		Profound Medical Inc.
-				3080 Yonge St Suite 4040
-				Toronto  Ontario  M4N3N1
-				CA
-
-70-B3-D5   (hex)		MECA SYSTEM
-A1C000-A1CFFF     (base 16)		MECA SYSTEM
-				1-906 INNOPLEX 552
-				Suwon-si  Gyeonggi-do  443380
-				KR
-
-70-B3-D5   (hex)		GE Aviation Cheltenham
-52B000-52BFFF     (base 16)		GE Aviation Cheltenham
-				Evesham Road
-				Cheltenham  Glos  GL52 8SF
-				GB
-
-70-B3-D5   (hex)		AMMT GmbH
-D80000-D80FFF     (base 16)		AMMT GmbH
-				Anselm-Feuerbach-Str. 6
-				Frankenthal  RLP  67227
-				DE
-
-70-B3-D5   (hex)		SAVRONİK ELEKTRONİK
-15F000-15FFFF     (base 16)		SAVRONİK ELEKTRONİK
-				ORGANİZE SAN BÖL.
-				ESKİŞEHİR  ODUNPAZARI  26110
-				TR
-
-70-B3-D5   (hex)		Jingtu Printing Systems Co., Ltd
-78B000-78BFFF     (base 16)		Jingtu Printing Systems Co., Ltd
-				25 Xiaoyun Road,
-				  Beijing  100027
-				CN
-
-70-B3-D5   (hex)		Hear Gear, Inc.
-A26000-A26FFF     (base 16)		Hear Gear, Inc.
-				7800 Technology Drive
-				West Melbourne  Florida  32904
-				US
-
-70-B3-D5   (hex)		LECIP CORPORATION
-A50000-A50FFF     (base 16)		LECIP CORPORATION
-				1260-1
-				Motosu-shi  Gifu-ken  501-0401
-				JP
-
-70-B3-D5   (hex)		Russian Telecom Equipment Company
-D9B000-D9BFFF     (base 16)		Russian Telecom Equipment Company
-				3, Kapranov lane
-				Moscow  Moscow  123242
-				RU
-
-70-B3-D5   (hex)		Vaisala Oyj
-5FF000-5FFFFF     (base 16)		Vaisala Oyj
-				Vanha Nurmijarventie 21
-				VANTAA    Fin-01670
-				FI
-
-70-B3-D5   (hex)		Symbicon Ltd
-7A7000-7A7FFF     (base 16)		Symbicon Ltd
-				Heinimäentie 1
-				Kajaani  Finland  87250
-				FI
-
-70-B3-D5   (hex)		Soniclean Pty Ltd
-79B000-79BFFF     (base 16)		Soniclean Pty Ltd
-				38 Anderson Street
-				Thebarton  SA  5031
-				AU
-
-70-B3-D5   (hex)		GOMA ELETTRONICA SpA
-D79000-D79FFF     (base 16)		GOMA ELETTRONICA SpA
-				Via Carlo Capelli 89
-				TURIN  TO  10146
-				IT
-
-70-B3-D5   (hex)		GEGA ELECTRONIQUE
-65D000-65DFFF     (base 16)		GEGA ELECTRONIQUE
-				1 RUE SAINT ELOI
-				MONTCEAU LES MINES  SAONE ET LOIRE  71300
-				FR
-
-70-B3-D5   (hex)		Lumine Lighting Solutions Oy
-83F000-83FFFF     (base 16)		Lumine Lighting Solutions Oy
-				Albertinkatu 27b
-				Helsinki  Uusimaa  00180
-				FI
-
-70-B3-D5   (hex)		DISK Multimedia s.r.o.
-E70000-E70FFF     (base 16)		DISK Multimedia s.r.o.
-				Sokolska 13
-				Boskovice  JM  68001
-				CZ
-
-70-B3-D5   (hex)		Commsignia Ltd.
-C5A000-C5AFFF     (base 16)		Commsignia Ltd.
-				Bartok Bela ut 105-113. Building 4. Floor 2
-				Budapest  Budapest  1115
-				HU
-
-70-B3-D5   (hex)		CAS Medical Systems, Inc
-9DB000-9DBFFF     (base 16)		CAS Medical Systems, Inc
-				44 East Industrial Road
-				Branford  CT  06405
-				US
-
-70-B3-D5   (hex)		JSC Electrical Equipment Factory
-A6E000-A6EFFF     (base 16)		JSC Electrical Equipment Factory
-				Otradnaya str, 6
-				Moscow    129626
-				RU
-
-70-B3-D5   (hex)		Airborne Engineering Limited
-46B000-46BFFF     (base 16)		Airborne Engineering Limited
-				3 Landmark House
-				Glastonbury  Somerset  BA6 9FR
-				GB
-
-70-B3-D5   (hex)		Alpha Elettronica s.r.l.
-F7E000-F7EFFF     (base 16)		Alpha Elettronica s.r.l.
-				Strada Antolini 2/a
-				Collecchio  Parma  43044
-				IT
-
-70-B3-D5   (hex)		Head
-3E3000-3E3FFF     (base 16)		Head
-				kita-ku tenjinbashi 2-2-25
-				Osaka-shi  Osaka  5300041
-				JP
-
-70-B3-D5   (hex)		hangzhou battle link technology Co.,Ltd
-ED5000-ED5FFF     (base 16)		hangzhou battle link technology Co.,Ltd
-				xipu road no. 1503 binke building, room 1606
-				hangzhou binjiang  zhejiang  310052
-				CN
-
-70-B3-D5   (hex)		CP contech electronic GmbH
-EB1000-EB1FFF     (base 16)		CP contech electronic GmbH
-				Westring 31a
-				Leopoldshöhe  NRW  33818
-				DE
-
-70-B3-D5   (hex)		Tecnint HTE SRL
-FC6000-FC6FFF     (base 16)		Tecnint HTE SRL
-				Via della Tecnica 16/18
-				Osnago  Lecco  23875
-				IT
-
-70-B3-D5   (hex)		Communication Technology Ltd.
-0A4000-0A4FFF     (base 16)		Communication Technology Ltd.
-				11F,No.166, Jian 1th Rd.,Jhonghe Dist.
-				11F,No.166, Jian 1th Rd.,Jhonghe Dist.    
-				TW
-
-70-B3-D5   (hex)		Haag-Streit AG
-5C5000-5C5FFF     (base 16)		Haag-Streit AG
-				Gartenstadtstrasse 10
-				Koeniz  Bern  CH-3098
-				CH
-
-70-B3-D5   (hex)		DSP DESIGN
-5E4000-5E4FFF     (base 16)		DSP DESIGN
-				TAPTON PK INNOVATION CENTRE
-				CHESTERFIELD  DERBYSHIRE  S41 0TZ
-				GB
-
-70-B3-D5   (hex)		ACS MOTION CONTROL
-0EC000-0ECFFF     (base 16)		ACS MOTION CONTROL
-				1 Hataasia St., Ramat Gabriel Industrial Park,
-				Migdal Ha'Emek  Israel  2307037
-				IL
-
-70-B3-D5   (hex)		speedsignal GmbH
-C25000-C25FFF     (base 16)		speedsignal GmbH
-				Aeussere Oberaustr. 20
-				Rosenheim  Bavaria  83026
-				DE
-
-70-B3-D5   (hex)		astozi consulting Tomasz Zieba
-DF0000-DF0FFF     (base 16)		astozi consulting Tomasz Zieba
-				ul. Inzynierska 8/20
-				Nowa Sol  Lubuskie  67-100
-				PL
-
-70-B3-D5   (hex)		FUELCELLPOWER
-0A5000-0A5FFF     (base 16)		FUELCELLPOWER
-				D-301, Bundang Technopark, yatop-dong
-				Gyeonggi-do, Korea  Bundang-gu, Seongnam-si  463-760
-				KR
-
-70-B3-D5   (hex)		MOG Laboratories Pty Ltd
-84A000-84AFFF     (base 16)		MOG Laboratories Pty Ltd
-				18 Boase St
-				Brunswick  VIC  3056
-				AU
-
-70-B3-D5   (hex)		iungo
-6F3000-6F3FFF     (base 16)		iungo
-				Vrouwenlaan 62
-				Zwolle  Overijssel  8017 HS
-				NL
-
-70-B3-D5   (hex)		Power Security Systems Ltd.
-AFA000-AFAFFF     (base 16)		Power Security Systems Ltd.
-				Kazal str. 64-66
-				Budapest  Budapest  1031
-				HU
-
-70-B3-D5   (hex)		Plum sp. z o.o
-104000-104FFF     (base 16)		Plum sp. z o.o
-				Ignatki 27a
-				Kleosin  podlaskie  16-001
-				PL
-
-70-B3-D5   (hex)		Multipure International
-CDE000-CDEFFF     (base 16)		Multipure International
-				7251 Cathedral Rock Dr.
-				Las Vegas  Nevada  89128
-				US
-
-70-B3-D5   (hex)		KST technology
-0AB000-0ABFFF     (base 16)		KST technology
-				164-1, KST b/d., Bangi-dong, songpa-gu
-				SEOUL  N/A  138-050
-				KR
-
-70-B3-D5   (hex)		Phoniro Systems AB
-731000-731FFF     (base 16)		Phoniro Systems AB
-				Rorkullsvagen 4
-				Halmstad  Halland  30241
-				SE
-
-70-B3-D5   (hex)		Peek Traffic
-501000-501FFF     (base 16)		Peek Traffic
-				2906 Corporate Way
-				Palmetto  FL  34235
-				US
-
-70-B3-D5   (hex)		NELS Ltd.
-82C000-82CFFF     (base 16)		NELS Ltd.
-				bldg.23, h.5, proezd 4806.
-				Moscow, Zelenograd  Moscow  124498
-				RU
-
-70-B3-D5   (hex)		Environexus
-A62000-A62FFF     (base 16)		Environexus
-				50 Ricketts Road
-				Mount Waverley  VIC  3149
-				AU
-
-70-B3-D5   (hex)		PCSC
-A57000-A57FFF     (base 16)		PCSC
-				3541 Challenger Street
-				Torrance  CA  90503
-				US
-
-70-B3-D5   (hex)		VECTARE Inc
-6D9000-6D9FFF     (base 16)		VECTARE Inc
-				10340 Democracy Ln Ste 101
-				Fairfax  VA  22030
-				US
-
-70-B3-D5   (hex)		Stmovic
-8F5000-8F5FFF     (base 16)		Stmovic
-				201 2, 3 th.
-				Gangdonggu  Seoul  134-811
-				KR
-
-70-B3-D5   (hex)		AGR International
-ABF000-ABFFFF     (base 16)		AGR International
-				615 Whitestown Road
-				Butler  PA  16001
-				US
-
-70-B3-D5   (hex)		BKM-Micronic Richtfunkanlagen GmbH
-ABC000-ABCFFF     (base 16)		BKM-Micronic Richtfunkanlagen GmbH
-				Im Steinernen Kreuz 19
-				Wurmberg    75449
-				DE
-
-70-B3-D5   (hex)		SSL - Electrical Aerospace Ground Equipment Section
-03B000-03BFFF     (base 16)		SSL - Electrical Aerospace Ground Equipment Section
-				3852 Fabian Way
-				Palo Alto  CALIFORNIA  94303
-				US
-
-70-B3-D5   (hex)		Kubu, Inc.
-19C000-19CFFF     (base 16)		Kubu, Inc.
-				991 El Cajon Way
-				Palo Alto  CA  94303
-				US
-
-70-B3-D5   (hex)		DORLET SAU
-B3C000-B3CFFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		Videri Inc.
-33C000-33CFFF     (base 16)		Videri Inc.
-				541 West 23rd Street
-				New York  NY  10011
-				US
-
-70-B3-D5   (hex)		AL ZAJEL MODERN TELECOMM
-F68000-F68FFF     (base 16)		AL ZAJEL MODERN TELECOMM
-				PO BOX:3932
-				AL QURUM  MUSCAT  112
-				OM
-
-70-B3-D5   (hex)		idaqs Co.,Ltd.
-634000-634FFF     (base 16)		idaqs Co.,Ltd.
-				M&I Building 2F
-				Suginami-Ku  Tokyo  167-0042
-				JP
-
-70-B3-D5   (hex)		RFL Electronics, Inc.
-54E000-54EFFF     (base 16)		RFL Electronics, Inc.
-				353 Powerville Road
-				Booton Twp.  NJ  07005
-				US
-
-70-B3-D5   (hex)		TWC
-204000-204FFF     (base 16)		TWC
-				12101 Airport Way
-				Broomfield  CO  80021
-				US
-
-70-B3-D5   (hex)		Schwer+Kopka GmbH
-099000-099FFF     (base 16)		Schwer+Kopka GmbH
-				Herkner Str. 4
-				Weingarten  Baden Württemberg  88250
-				DE
-
-70-B3-D5   (hex)		Private
-C6A000-C6AFFF     (base 16)		Private
-
-70-B3-D5   (hex)		Marimo electronics Co.,Ltd.
-029000-029FFF     (base 16)		Marimo electronics Co.,Ltd.
-				1071,SUWAGATA
-				UEDA  NAGANO  3860032
-				JP
-
-70-B3-D5   (hex)		Woodside Electronics
-E27000-E27FFF     (base 16)		Woodside Electronics
-				1311 Bluegrass Pl
-				Woodland  California  95776
-				US
-
-70-B3-D5   (hex)		DSP DESIGN
-C81000-C81FFF     (base 16)		DSP DESIGN
-				TAPTON PK INNOVATION CENTRE
-				CHESTERFIELD  DERBYSHIRE  S41 0TZ
-				GB
-
-70-B3-D5   (hex)		MI INC.
-E53000-E53FFF     (base 16)		MI INC.
-				3F Daiichi-Heiwa-Bldg. 5-1, Kabuto-cho
-				TOKYO  Chuo-ku  103-0026
-				JP
-
-70-B3-D5   (hex)		adidas AG
-7A9000-7A9FFF     (base 16)		adidas AG
-				Adi-Dassler-Strasse 1
-				Herzogenaurach  Bayern  91074
-				DE
-
-70-B3-D5   (hex)		O-Net Automation Technology (Shenzhen)Limited
-EE4000-EE4FFF     (base 16)		O-Net Automation Technology (Shenzhen)Limited
-				#35 Cuijing Road,Pingshan New District,Guangdong,Shenzhen.China
-				Shenzhen  Guangdong  518118
-				CN
-
-70-B3-D5   (hex)		Myro Control, LLC
-B2A000-B2AFFF     (base 16)		Myro Control, LLC
-				201 164th Ave NE
-				Redmond  WA  98052
-				US
-
-70-B3-D5   (hex)		Labotect Labor-Technik-Göttingen GmbH
-61F000-61FFFF     (base 16)		Labotect Labor-Technik-Göttingen GmbH
-				Kampweg 12
-				Rosdorf    37124
-				DE
-
-70-B3-D5   (hex)		AOT System GmbH
-655000-655FFF     (base 16)		AOT System GmbH
-				Am Becketal 14
-				  Bremen  28755
-				DE
-
-70-B3-D5   (hex)		Baader Planetarium GmbH
-E07000-E07FFF     (base 16)		Baader Planetarium GmbH
-				Zur Sternwarte
-				Mammendorf  Bavaria  82291
-				DE
-
-70-B3-D5   (hex)		Acco Brands Europe
-6F6000-6F6FFF     (base 16)		Acco Brands Europe
-				Oxford house
-				Aylesbury  Buckinghamshire  HP21 8SZ
-				GB
-
-70-B3-D5   (hex)		SINTOKOGIO, LTD
-42F000-42FFFF     (base 16)		SINTOKOGIO, LTD
-				3-1, Honohara
-				Toyokawa  Aichi  4428505
-				JP
-
-70-B3-D5   (hex)		Sensor Highway Ltd
-702000-702FFF     (base 16)		Sensor Highway Ltd
-				Unit 7, The Quadrangle
-				Romsey  United Kingdom  SO51 9DL
-				GB
-
-70-B3-D5   (hex)		Don Electronics Ltd
-044000-044FFF     (base 16)		Don Electronics Ltd
-				Westfield Industrial Estate
-				Leeds  West Yorkshire  LS19 7LX
-				GB
-
-70-B3-D5   (hex)		Scanvaegt Nordic A/S
-F38000-F38FFF     (base 16)		Scanvaegt Nordic A/S
-				Johann Gutenbergs vej 5-9
-				Aarhus N    8200
-				DK
-
-70-B3-D5   (hex)		Dromont S.p.A.
-C2C000-C2CFFF     (base 16)		Dromont S.p.A.
-				via Borzone 42
-				Grinzane Cavour  Cuneo  12060
-				IT
-
-70-B3-D5   (hex)		InAccess Networks SA
-077000-077FFF     (base 16)		InAccess Networks SA
-				12, Sorou str.
-				Maroussi  Athens  GR15125
-				GR
-
-70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S. L.
-4C1000-4C1FFF     (base 16)		QUERCUS TECHNOLOGIES, S. L.
-				Antoni Isern 4
-				Reus  Tarragona  43205
-				ES
-
-70-B3-D5   (hex)		FLSmidth
-D4E000-D4EFFF     (base 16)		FLSmidth
-				Vigerslev Allé 77
-				Valby  Copenhagen  2500
-				DK
-
-70-B3-D5   (hex)		Nexus Tech. VN
-B8A000-B8AFFF     (base 16)		Nexus Tech. VN
-				2139 Corktree Ln
-				San Jose  California  95132
-				US
-
-70-B3-D5   (hex)		Lenoxi Automation s.r.o.
-D8B000-D8BFFF     (base 16)		Lenoxi Automation s.r.o.
-				Lipa 218
-				Lipa u Havlickova Brodu  Vysocina  58257
-				
-
-70-B3-D5   (hex)		Ingenieurbuero SOMTRONIK
-814000-814FFF     (base 16)		Ingenieurbuero SOMTRONIK
-				Riesebusch 17
-				Bad Schwartau  Schleswig Holstein  23611
-				DE
-
-70-B3-D5   (hex)		XTech2 SIA
-29D000-29DFFF     (base 16)		XTech2 SIA
-				Katrinas dambis 24a-15
-				  Riga  LV1045
-				LV
-
-70-B3-D5   (hex)		ProConnections, Inc.
-0A9000-0A9FFF     (base 16)		ProConnections, Inc.
-				239 Littleton Road
-				Westford  Massachusettes  01886
-				US
-
-70-B3-D5   (hex)		SBS-Feintechnik GmbH & Co. KG
-ECD000-ECDFFF     (base 16)		SBS-Feintechnik GmbH & Co. KG
-				Hermann-Burger-Str. 31
-				Schonach    78136
-				DE
-
-70-B3-D5   (hex)		ACS electronics srl
-35C000-35CFFF     (base 16)		ACS electronics srl
-				Via Lamaneigra 10/R
-				Tribogna  Genova  16030
-				
-
-70-B3-D5   (hex)		Fantom Wireless, Inc.
-190000-190FFF     (base 16)		Fantom Wireless, Inc.
-				156 2nd Street, Suite #614
-				San Francisco  CA  94014
-				
-
-70-B3-D5   (hex)		PLCiS
-0E0000-0E0FFF     (base 16)		PLCiS
-				B115,Lotte plaza Bldg,971-1,
-				Suwon  GyungGi-Do  443-811
-				KR
-
-70-B3-D5   (hex)		Ultra Electronics Sonar System Division
-3ED000-3EDFFF     (base 16)		Ultra Electronics Sonar System Division
-				418, Bridport Road
-				Greenford  Middlesex  UB6 8UA
-				GB
-
-00-1B-C5   (hex)		Dialine
-0C8000-0C8FFF     (base 16)		Dialine
-				1 allee du pressoir
-				Sucy en Brie  Val de Marne  94370
-				FR
-
-00-1B-C5   (hex)		WIZZILAB SAS
-0C7000-0C7FFF     (base 16)		WIZZILAB SAS
-				64 rue Greneta
-				Paris    75002
-				FR
-
-00-1B-C5   (hex)		ELDES
-0C4000-0C4FFF     (base 16)		ELDES
-				Ukmerges 283B
-				Vilnius    06313
-				LT
-
-00-1B-C5   (hex)		Denki Kogyo Company, Limited
-0B9000-0B9FFF     (base 16)		Denki Kogyo Company, Limited
-				13-4 Satsuki-cho
-				Kanuma-shi  Tochigi  3220014
-				JP
-
-00-1B-C5   (hex)		Exibea AB
-0B5000-0B5FFF     (base 16)		Exibea AB
-				Ekmansgatan 3
-				411  SE-  41132
-				SE
-
-00-1B-C5   (hex)		FSM Solutions Limited
-0B3000-0B3FFF     (base 16)		FSM Solutions Limited
-				Granatny per 2/9-73
-				Moscow  Moscow  123001
-				RU
-
-00-1B-C5   (hex)		Roslen Eco-Networking Products
-0B1000-0B1FFF     (base 16)		Roslen Eco-Networking Products
-				2010 Vada Ranch Road
-				Auburn  CA  95603
-				US
-
-00-1B-C5   (hex)		Navitar Inc
-09D000-09DFFF     (base 16)		Navitar Inc
-				200 Commerce Dr
-				Rochester  NY  14623
-				US
-
-00-1B-C5   (hex)		Sanstreak Corp.
-096000-096FFF     (base 16)		Sanstreak Corp.
-				300 Santana Row
-				San Jose  CA  95128
-				US
-
-00-1B-C5   (hex)		Ambient Devices, Inc.
-093000-093FFF     (base 16)		Ambient Devices, Inc.
-				One Broadway
-				Cambridge  MA  02142
-				US
-
-00-1B-C5   (hex)		Arnouse Digital Devices, Corp.
-092000-092FFF     (base 16)		Arnouse Digital Devices, Corp.
-				1983 Marcus Ave., Suite 104
-				Lake Success  New York  11042
-				US
-
-00-1B-C5   (hex)		Unilever R&amp;D
-08F000-08FFFF     (base 16)		Unilever R&amp;D
-				Port Sunlight
-				Bebington  Wirral  ch63 3jw
-				GB
-
-00-1B-C5   (hex)		Nistica
-08B000-08BFFF     (base 16)		Nistica
-				745 Route 202-206
-				Bridgewater  NJ  08807
-				US
-
-00-1B-C5   (hex)		Oberon microsystems, Inc.
-085000-085FFF     (base 16)		Oberon microsystems, Inc.
-				Technoparkstrasse 1
-				Zurich  ZH  8005
-				CH
-
-00-1B-C5   (hex)		head
-07C000-07CFFF     (base 16)		head
-				kita-ku tenjinbashi 2-2-25
-				Osaka-shi  Osaka  5300041
-				JP
-
-00-1B-C5   (hex)		Greatcom AG
-07D000-07DFFF     (base 16)		Greatcom AG
-				Gewerbestrasse 20
-				Egg  ZH  8132
-				CH
-
-00-1B-C5   (hex)		LUMINO GmbH
-080000-080FFF     (base 16)		LUMINO GmbH
-				Europark Fichtenhain A8
-				Krefeld  NRW  47807
-				US
-
-00-1B-C5   (hex)		Datasat Digital Entertainment
-069000-069FFF     (base 16)		Datasat Digital Entertainment
-				9631 Topanga Canyon Place
-				Chatsworth  California  91311
-				US
-
-00-1B-C5   (hex)		Embit srl 
-067000-067FFF     (base 16)		Embit srl 
-				via Emilia est, 911
-				Modena  Modena  41122
-				IT
-
-00-1B-C5   (hex)		Enkora Oy Ltd
-064000-064FFF     (base 16)		Enkora Oy Ltd
-				Köydenpunojankatu 8 G
-				Helsinki  Uusimaa  00180
-				FI
-
-00-1B-C5   (hex)		Scientific-Technical Center Epsilon Limited company
-061000-061FFF     (base 16)		Scientific-Technical Center Epsilon Limited company
-				Shkiperskiy Protok, plot 14, building 1
-				St.-Petersburg  -  199106
-				RU
-
-00-1B-C5   (hex)		optiMEAS GmbH
-058000-058FFF     (base 16)		optiMEAS GmbH
-				Am Houiller Platz 4
-				Friedrichsdorf    61381
-				DE
-
-00-1B-C5   (hex)		EREE Electronique
-057000-057FFF     (base 16)		EREE Electronique
-				6 avenue Dr Schweitzer
-				MEYZIEU    69882
-				FR
-
-00-1B-C5   (hex)		LUMIPLAN TRANSPORT 
-055000-055FFF     (base 16)		LUMIPLAN TRANSPORT 
-				1 ,Impasse Augustin Fresnel
-				SAINT-HERBLAIN    44815
-				FR
-
-00-1B-C5   (hex)		EUROCONTROL S.p.A.
-049000-049FFF     (base 16)		EUROCONTROL S.p.A.
-				Via Varenna 52/A
-				Genova  Italy  16155
-				IT
-
-00-1B-C5   (hex)		Marvel Digital International Limited
-045000-045FFF     (base 16)		Marvel Digital International Limited
-				15/F Siu On Centre
-				Wanchai    HKSAR
-				HK
-
-00-1B-C5   (hex)		JE Suunnittelu Oy
-033000-033FFF     (base 16)		JE Suunnittelu Oy
-				Teollisuustie 16
-				Pietarsaari    68600
-				FI
-
-00-1B-C5   (hex)		InterCEL Pty Ltd
-034000-034FFF     (base 16)		InterCEL Pty Ltd
-				33 Glenvale Crescent
-				Mulgrave  Victoria  3170
-				AU
-
-00-1B-C5   (hex)		ADIXEIN LIMITED
-031000-031FFF     (base 16)		ADIXEIN LIMITED
-				14 Plater Drive
-				Oxford  Oxfordshire  OX2 6QT
-				GB
-
-00-1B-C5   (hex)		Care Everywhere LLC
-02C000-02CFFF     (base 16)		Care Everywhere LLC
-				9 Tech Circle
-				Natick  MA  01760
-				US
-
-00-1B-C5   (hex)		Saturn South Pty Ltd
-02B000-02BFFF     (base 16)		Saturn South Pty Ltd
-				4 Maning Avenue
-				Sandy Bay  Tasmania  7005
-				AU
-
-00-1B-C5   (hex)		STECHWIN.CO.LTD.
-028000-028FFF     (base 16)		STECHWIN.CO.LTD.
-				368-2, HwaGok 1-Dong
-				Seoul    157-884
-				KR
-
-00-1B-C5   (hex)		CJSC STC  SIMOS
-022000-022FFF     (base 16)		CJSC STC  SIMOS
-				41, Geroyev Khasana Str.
-				Perm    614990
-				RU
-
-00-1B-C5   (hex)		Momentum Data Systems
-020000-020FFF     (base 16)		Momentum Data Systems
-				17330 Brookhurst Street
-				Fountain Valley  CA  92708
-				US
-
-00-1B-C5   (hex)		Openpeak, Inc
-021000-021FFF     (base 16)		Openpeak, Inc
-				1750 Clint Moore Rd
-				Boca Raton  Florida  33487
-				US
-
-00-1B-C5   (hex)		Saturn Solutions Ltd
-01F000-01FFFF     (base 16)		Saturn Solutions Ltd
-				Ingles Yard
-				Folkestone  Kent  CT20 2RY
-				GB
-
-00-1B-C5   (hex)		Energotechnica OOO NPP Ltd
-016000-016FFF     (base 16)		Energotechnica OOO NPP Ltd
-				3, Lermontova str.
-				Penza    
-				RU
-
-00-1B-C5   (hex)		Mercury HMI Ltd
-00A000-00AFFF     (base 16)		Mercury HMI Ltd
-				George House
-				Malton  North Yorkshire  Y017 6YB
-				GB
-
-00-1B-C5   (hex)		Softel SA de CV
-010000-010FFF     (base 16)		Softel SA de CV
-				Camino a Santa Teresa 
-				Tlalpan    14010
-				MX
-
-00-1B-C5   (hex)		Quantum Technology Sciences, Inc.
-00C000-00CFFF     (base 16)		Quantum Technology Sciences, Inc.
-				1980 N. Atlantic Ave., Suite 930
-				Cocoa Beach  FL  32931
-				US
-
-00-1B-C5   (hex)		Solomon Systech Pte Ltd
-009000-009FFF     (base 16)		Solomon Systech Pte Ltd
-				3 Bishan Place,
-				    579838
-				SG
-
-70-B3-D5   (hex)		Biennebi s.r.l.
-537000-537FFF     (base 16)		Biennebi s.r.l.
-				Via Santi 23
-				Bione  Brescia  25070
-				IT
-
-70-B3-D5   (hex)		ORtek Technology, Inc.
-3D0000-3D0FFF     (base 16)		ORtek Technology, Inc.
-				13F, no.150, Jian-Yi Rd., ZhongHe Dist.
-				New Taipei City  Taiwan  23511
-				TW
-
-70-B3-D5   (hex)		Primalucelab isrl
-329000-329FFF     (base 16)		Primalucelab isrl
-				VIA BRENTELLA 53/7
-				ROVEREDO IN PIANO  PN  33080
-				IT
-
-70-B3-D5   (hex)		cal4care Pte Ltd
-043000-043FFF     (base 16)		cal4care Pte Ltd
-				118 Aljunied AVE 2
-				SINGAPORE  SINGAPORE  380118
-				SG
-
-70-B3-D5   (hex)		Golding Audio Ltd
-454000-454FFF     (base 16)		Golding Audio Ltd
-				8 Peartree Business Centre, Stanway
-				Colchester  Essex  CO30JN
-				GB
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-81D000-81DFFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
-0DD000-0DDFFF     (base 16)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
-				Room 201,Building A,No.1,Qianhai 1st Road,Shengang cooperation zone,Qianhai
-				Shenzhen    518054
-				CN
-
-70-B3-D5   (hex)		TATTILE SRL
-EC5000-EC5FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Lumentum
-BFD000-BFDFFF     (base 16)		Lumentum
-				460 N McCarthy Blvd
-				Milpitas  CA  95035
-				US
-
-70-B3-D5   (hex)		Nuance Hearing Ltd.
-569000-569FFF     (base 16)		Nuance Hearing Ltd.
-				Raoul Wallenberg 24, Building A1, Floor 3
-				Tel Aviv    6971920
-				IL
-
-70-B3-D5   (hex)		Connected Response
-C9C000-C9CFFF     (base 16)		Connected Response
-				12 Meiklejohn Street
-				Stirling  Stirling  FK9 5HQ
-				GB
-
-70-B3-D5   (hex)		IHI Rotating Machinery Engineering Co.,Ltd.
-89C000-89CFFF     (base 16)		IHI Rotating Machinery Engineering Co.,Ltd.
-				1, Shin-nakahara-cho, Isogo-ku
-				Yokohama  Kanagawa  235-8501
-				JP
-
-70-B3-D5   (hex)		iREA System Industry
-113000-113FFF     (base 16)		iREA System Industry
-				Rm 210, Sahwa-ro 210, Uichang-gu
-				Changwon-si  Gyeongsangnam-do  51390
-				KR
-
-70-B3-D5   (hex)		Netzikon GmbH
-D3D000-D3DFFF     (base 16)		Netzikon GmbH
-				Gerberstrasse 34
-				Backnang    71522
-				DE
-
-70-B3-D5   (hex)		WiFi Nation Ltd
-95F000-95FFFF     (base 16)		WiFi Nation Ltd
-				Unit 53, CoWorkz Business Centre, Chester West Employment Park, Minerva Avenue,
-				Chester  Cheshire  CH1 4QL
-				GB
-
-70-B3-D5   (hex)		Suzhou Sapa Automotive Technology Co.,Ltd
-9AC000-9ACFFF     (base 16)		Suzhou Sapa Automotive Technology Co.,Ltd
-				Room 812, Building 1, Suhong Road 177
-				Suzhou  Jiangsu  215000
-				CN
-
-70-B3-D5   (hex)		LX Design House
-221000-221FFF     (base 16)		LX Design House
-				4 Cornwallis Street
-				Eveleigh  NSW  2015
-				AU
-
-70-B3-D5   (hex)		Amazon Technologies Inc.
-270000-270FFF     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno    89507
-				US
-
-70-B3-D5   (hex)		i-View Communication Inc.
-CA7000-CA7FFF     (base 16)		i-View Communication Inc.
-				2F, No.70, Min De Rd, Chutung, 310-48 Hsinchu, Taiwan
-				Hsinchu County  Chutung  310148
-				TW
-
-70-B3-D5   (hex)		Leidos
-E10000-E10FFF     (base 16)		Leidos
-				7031 Albert Einstein Drive
-				Columbia  MD  21046
-				US
-
-70-B3-D5   (hex)		Combilent
-C50000-C50FFF     (base 16)		Combilent
-				Ryttermarken 5
-				Farum    3520
-				DK
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-971000-971FFF     (base 16)		RCH ITALIA SPA 
-				VIA CENDON 39
-				SILEA   TREVISO   31057
-				IT
-
-70-B3-D5   (hex)		IOTIZE
-9CF000-9CFFFF     (base 16)		IOTIZE
-				960 chemin de la Croix Verte
-				Montbonnot-Saint-Martin  Isere  38330
-				FR
-
-70-B3-D5   (hex)		Contec Americas Inc.
-914000-914FFF     (base 16)		Contec Americas Inc.
-				3991 Sarno Rd
-				Melbourne  FL  32934
-				US
-
-70-B3-D5   (hex)		Sadel S.p.A.
-68B000-68BFFF     (base 16)		Sadel S.p.A.
-				via Marino Serenari, 1
-				Castel Maggiore  Bologna  40013
-				IT
-
-70-B3-D5   (hex)		NEXELEC
-40F000-40FFFF     (base 16)		NEXELEC
-				15 Allée FJ BROUSSAIS
-				VANNES    56000
-				FR
-
-70-B3-D5   (hex)		Loma Systems s.r.o.
-9B8000-9B8FFF     (base 16)		Loma Systems s.r.o.
-				Southwood
-				Farnborough  Hampshire  GU14 0NY
-				GB
-
-70-B3-D5   (hex)		Wartsila Voyage Limited
-A05000-A05FFF     (base 16)		Wartsila Voyage Limited
-				13-18 City Quay
-				Dublin 2    D02 ED70
-				IE
-
-70-B3-D5   (hex)		Wartsila Voyage Limited
-ED8000-ED8FFF     (base 16)		Wartsila Voyage Limited
-				13-18 City Quay
-				Dublin 2    D02 ED70
-				IE
-
-70-B3-D5   (hex)		Sakura Seiki Co.,Ltd.
-082000-082FFF     (base 16)		Sakura Seiki Co.,Ltd.
-				75-5, Imojiya
-				Chikuma-city  Nagano Prefecture  387-0015
-				JP
-
-70-B3-D5   (hex)		Amazon Technologies Inc.
-E6F000-E6FFFF     (base 16)		Amazon Technologies Inc.
-				P.O Box 8102
-				Reno  NV  89507
-				US
-
-70-B3-D5   (hex)		Private
-11A000-11AFFF     (base 16)		Private
-
-70-B3-D5   (hex)		Mettler Toledo
-4FC000-4FCFFF     (base 16)		Mettler Toledo
-				1571 Northpointe Parkway
-				Lutz  FL  33558
-				US
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-56E000-56EFFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		GSP Sprachtechnologie GmbH
-695000-695FFF     (base 16)		GSP Sprachtechnologie GmbH
-				Teltowkanalstraße 1
-				Berlin    12247
-				DE
-
-70-B3-D5   (hex)		Clecell
-565000-565FFF     (base 16)		Clecell
-				26, Beobwon-ro 9-gil
-				Song-pa gu  Seoul  06210
-				KR
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-060000-060FFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		LLC NTC ACTOR
-86F000-86FFFF     (base 16)		LLC NTC ACTOR
-				Zelenograd, Sostovaya alleya, bld.6, str.22
-				Moscow    124489
-				RU
-
-70-B3-D5   (hex)		Leica Microsystems Ltd. Shanghai
-D30000-D30FFF     (base 16)		Leica Microsystems Ltd. Shanghai
-				258 Jinzang Road, Building 1, Pudong
-				Shanghai  Shanghai  201206
-				CN
-
-70-B3-D5   (hex)		Solid State Disks Ltd
-F91000-F91FFF     (base 16)		Solid State Disks Ltd
-				The Granary
-				Reading  Berkshire  RG74BB
-				GB
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-786000-786FFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		Scanvaegt Systems A/S
-C10000-C10FFF     (base 16)		Scanvaegt Systems A/S
-				Scanvaegt Systems A/S, Johann Gutenbergs Vej 5-9
-				Aarhus N    8200
-				DK
-
-70-B3-D5   (hex)		Toptech Systems, Inc.
-E97000-E97FFF     (base 16)		Toptech Systems, Inc.
-				1124 Florida Central Parkway
-				Longwood  FL  32750
-				US
-
-70-B3-D5   (hex)		Acouva, Inc.
-E0A000-E0AFFF     (base 16)		Acouva, Inc.
-				2269 Chestnut St
-				San Francisico  CA  94123
-				US
-
-70-B3-D5   (hex)		Suzhou Wansong Electric Co.,Ltd
-92D000-92DFFF     (base 16)		Suzhou Wansong Electric Co.,Ltd
-				Shaxi industrial development zone
-				Taicang  Jiangsu  215421
-				CN
-
-70-B3-D5   (hex)		Nanotok LLC
-EF1000-EF1FFF     (base 16)		Nanotok LLC
-				3075 Raccoon Point Rd
-				Eastsound  WA  98245
-				US
-
-70-B3-D5   (hex)		MacGray Services
-1D6000-1D6FFF     (base 16)		MacGray Services
-				404 Wyman St
-				Waltham  MA  02451
-				
-
-70-B3-D5   (hex)		Romteck Australia
-394000-394FFF     (base 16)		Romteck Australia
-				40 O’Malley Street, Osborne Park
-				Perth  Western Australia  6017
-				AU
-
-70-B3-D5   (hex)		Romteck Australia
-791000-791FFF     (base 16)		Romteck Australia
-				40 O’Malley Street, Osborne Park
-				Perth  Western Australia  6017
-				AU
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-642000-642FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Leontech Limited
-201000-201FFF     (base 16)		Leontech Limited
-				1208 WorkingBerg Commercial Buildung, 41-47 Marble Road
-				Hong Kong  Hong Kong  00000
-				HK
-
-70-B3-D5   (hex)		Technology Link Corporation
-B1B000-B1BFFF     (base 16)		Technology Link Corporation
-				Shin-Yokohama Kohoku-ku
-				yokohama  kanagawa  222-0033
-				JP
-
-70-B3-D5   (hex)		VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
-6BE000-6BEFFF     (base 16)		VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
-				B3, Bredon House, 321, Tettenhall Road, Tettenhall
-				Wolverhampton  West Midlands  WV6 0JZ
-				GB
-
-70-B3-D5   (hex)		Todd Digital Limited
-C9A000-C9AFFF     (base 16)		Todd Digital Limited
-				Level 15, 95 Customhouse Quay
-				Wellington    6011
-				NZ
-
-70-B3-D5   (hex)		JENG IoT BV
-5AF000-5AFFFF     (base 16)		JENG IoT BV
-				Steenbokstraat 33
-				APELDOORN  Gelderland  7324 AZ
-				NL
-
-70-B3-D5   (hex)		TXMission Ltd.
-F47000-F47FFF     (base 16)		TXMission Ltd.
-				CP House, Otterspool Way
-				Watford  Hertfordshire  WD25 8HU
-				GB
-
-70-B3-D5   (hex)		sensorway
-C52000-C52FFF     (base 16)		sensorway
-				A-339 samsong techno valley, 140 tongilro, deockyanggu
-				goyangsi  gyeonggido  10594
-				KR
-
-70-B3-D5   (hex)		Tucsen Photonics Co., Ltd. 
-8A7000-8A7FFF     (base 16)		Tucsen Photonics Co., Ltd. 
-				6F NO.1 building Caimao Zone, 756# Qi an Road, Gaishan Town, Cangshan Area, Fuzhou, Fujian, PR, CHINA.
-				fuzhou    350000
-				CN
-
-70-B3-D5   (hex)		Beijing Yourong Runda Rechnology Development Co.Ltd.
-980000-980FFF     (base 16)		Beijing Yourong Runda Rechnology Development Co.Ltd.
-				Changping District Science and Technology Park Advanced Road 37
-				Beijing    6219650
-				CN
-
-70-B3-D5   (hex)		KDT Corp.
-E72000-E72FFF     (base 16)		KDT Corp.
-				no1705-1, BLDG 3#, Lantian shixin plaza, keqiao zone
-				shaoxing  zhejiang  312030
-				CN
-
-70-B3-D5   (hex)		AUTOMATICA Y REGULACION S.A.
-EBF000-EBFFFF     (base 16)		AUTOMATICA Y REGULACION S.A.
-				Condell 1735, Nunoa
-				Santiago  RM  7770331
-				CL
-
-70-B3-D5   (hex)		R.C. Systems Inc
-52F000-52FFFF     (base 16)		R.C. Systems Inc
-				8621 hwy. 6
-				hitchcock  TX  77563
-				US
-
-70-B3-D5   (hex)		Dalcnet srl
-1CF000-1CFFFF     (base 16)		Dalcnet srl
-				Via Meucci 35
-				Brendola  Vicenza  36040
-				IT
-
-70-B3-D5   (hex)		Digital Solutions JSC
-D9F000-D9FFFF     (base 16)		Digital Solutions JSC
-				room 4, office 1, 3rd floor, building 7, house 9a, 2nd Sinichkina Str.
-				Moscow    111020
-				RU
-
-70-B3-D5   (hex)		DOGA
-62A000-62AFFF     (base 16)		DOGA
-				11 rue Lavoisier
-				MAUREPAS    78310
-				FR
-
-70-B3-D5   (hex)		Oculii
-B96000-B96FFF     (base 16)		Oculii
-				829 Space Dr
-				Beavercreek  OH  45434
-				US
-
-70-B3-D5   (hex)		XPS ELETRONICA LTDA
-4F3000-4F3FFF     (base 16)		XPS ELETRONICA LTDA
-				AVENIDA JAÇANÃ, 470/474 - VILA NELSON
-				SÃO PAULO  SÃO PAULO  02273-001
-				BR
-
-70-B3-D5   (hex)		Firecom, Inc.
-331000-331FFF     (base 16)		Firecom, Inc.
-				3927 59th Street
-				Woodside  NY  11377
-				US
-
-70-B3-D5   (hex)		Remote Diagnostic Technologies Ltd
-C99000-C99FFF     (base 16)		Remote Diagnostic Technologies Ltd
-				Pavilion C2 Ashwood Park, Ashwood Way
-				Basingstoke  Hampshire  RG23 8BG
-				GB
-
-70-B3-D5   (hex)		NEUROPHET, Inc.
-E31000-E31FFF     (base 16)		NEUROPHET, Inc.
-				3rd Floor, 175, Yeoksam-ro, Gangnam-gu, seoul
-				Seoul  Province  06247
-				KR
-
-70-B3-D5   (hex)		Chromateq
-944000-944FFF     (base 16)		Chromateq
-				191, allée de Lauzard, Bat. B, RDC 1 (Chromateq)
-				Saint Gély du Fesc    34980
-				FR
-
-70-B3-D5   (hex)		Elk Solutions, LLC
-1A7000-1A7FFF     (base 16)		Elk Solutions, LLC
-				12708 Misty Grove St
-				Moorpark  CA  93021
-				US
-
-70-B3-D5   (hex)		KAYA Instruments
-F3D000-F3DFFF     (base 16)		KAYA Instruments
-				20 HaMesila St.
-				Nesher     3688520
-				IL
-
-70-B3-D5   (hex)		Gogo Business Aviation
-3E0000-3E0FFF     (base 16)		Gogo Business Aviation
-				105 Edgeview Dr., Suite 300
-				Broomfield  CO  80021
-				US
-
-70-B3-D5   (hex)		Asiga Pty Ltd
-53E000-53EFFF     (base 16)		Asiga Pty Ltd
-				Unit 2, 19-21 Bourke Road
-				Alexandria  New South Wales  2015
-				AU
-
-70-B3-D5   (hex)		ENABLER LTD.
-15A000-15AFFF     (base 16)		ENABLER LTD.
-				29F Shiroyama Trust Tower 4-3-1 Toranomon 
-				Minato-ku  Tokyo  105-6029
-				JP
-
-70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
-62E000-62EFFF     (base 16)		LINEAGE POWER PVT LTD.,
-				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
-				BANGALORE  KARNATAKA  560074
-				IN
-
-70-B3-D5   (hex)		Salupo Sas
-898000-898FFF     (base 16)		Salupo Sas
-				Via Laganeto n. 129
-				Rocca di Capri Leone  Italia / ME / Sicilia  98070
-				IT
-
-70-B3-D5   (hex)		Nippon Safety co,ltd
-872000-872FFF     (base 16)		Nippon Safety co,ltd
-				1, suimeicho
-				Amagasaki  Hyogo  660-0082
-				JP
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-40D000-40DFFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		AnaPico AG
-0BB000-0BBFFF     (base 16)		AnaPico AG
-				Europa-Strasse 9
-				Glattbrugg  Schweiz  8152
-				CH
-
-70-B3-D5   (hex)		Season Electronics Ltd
-F46000-F46FFF     (base 16)		Season Electronics Ltd
-				600 Nest Business Park 
-				Havant  Hampshire  PO9 5TL
-				GB
-
-70-B3-D5   (hex)		WEPTECH elektronik GmbH
-9CD000-9CDFFF     (base 16)		WEPTECH elektronik GmbH
-				Ostring 10
-				Landau    76829
-				DE
-
-70-B3-D5   (hex)		Egag, LLC
-9A8000-9A8FFF     (base 16)		Egag, LLC
-				303 King James Ct
-				Upper Marlboro  MD  20774
-				US
-
-70-B3-D5   (hex)		Hermann Sewerin GmbH
-484000-484FFF     (base 16)		Hermann Sewerin GmbH
-				Robert-Bosch-Str. 3
-				Gütersloh  NRW  33334
-				DE
-
-70-B3-D5   (hex)		OZRAY
-629000-629FFF     (base 16)		OZRAY
-				D-#1514, GwangMyung SK Techno park, 60, Haan-ro, GwangMyung-si, Gyeonggi-do, Korea
-				GwangMyung-si  Gyeonggi-do, Korea  14322
-				KR
-
-70-B3-D5   (hex)		Algodue Elettronica Srl
-191000-191FFF     (base 16)		Algodue Elettronica Srl
-				Via P. Gobetti, 16F
-				Maggiora  NO  28014
-				IT
-
-70-B3-D5   (hex)		Beijing Vizum Technology Co.,Ltd.
-F33000-F33FFF     (base 16)		Beijing Vizum Technology Co.,Ltd.
-				Room603, Floor6, Block2, No.1 Zhongguancun, No.81 Beiqing Road
-				Beijing  Beijing  100094
-				CN
-
-70-B3-D5   (hex)		Volution Group UK
-687000-687FFF     (base 16)		Volution Group UK
-				Vent-Axia Ltd, Fleming Way
-				Crawley  WEST SUSSEX  RH10 9YX
-				GB
-
-70-B3-D5   (hex)		Vertex Co.,Ltd.
-8DD000-8DDFFF     (base 16)		Vertex Co.,Ltd.
-				4-1-17 Higashifuchinobe,Chuo-ku
-				Sagamihara  Kanagawa  252-0203
-				JP
-
-70-B3-D5   (hex)		Monnit Corporation
-393000-393FFF     (base 16)		Monnit Corporation
-				3400 S West Temple
-				Salt Lake City  UT  84115
-				US
-
-70-B3-D5   (hex)		Specialized Communications Corp.
-867000-867FFF     (base 16)		Specialized Communications Corp.
-				20940 Twin Springs Drive
-				Smithsburg    21783
-				US
-
-70-B3-D5   (hex)		eSight
-FD9000-FD9FFF     (base 16)		eSight
-				515 Legget Drive, Suite 200
-				Ottawa  ON  K2K3G4
-				CA
-
-70-B3-D5   (hex)		Nilar AB
-D99000-D99FFF     (base 16)		Nilar AB
-				Bönavägen 55
-				Gävle  Gavleborg  80647
-				SE
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-632000-632FFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		CT Company
-005000-005FFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-70-B3-D5   (hex)		Tomahawk Robotics
-0EB000-0EBFFF     (base 16)		Tomahawk Robotics
-				2412 Irwin St
-				Melbourne  FL  32901
-				US
-
-00-1B-C5   (hex)		Silvair
-0A0000-0A0FFF     (base 16)		Silvair
-				ul. Jasnogórska 44
-				Kraków    31-358
-				PL
-
-70-B3-D5   (hex)		JPEmbedded Mazan Filipek Sp. J.
-69D000-69DFFF     (base 16)		JPEmbedded Mazan Filipek Sp. J.
-				Strumienna 12
-				Krakow  Lesser Poland Voivodeship  30-609
-				PL
-
-70-B3-D5   (hex)		JT
-051000-051FFF     (base 16)		JT
-				203, Business Incubator Center,  Korea Polytechnic University, 237, Sangidaehak-ro,
-				Siheung-si  Gyeonggi-do  15073
-				KR
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-D06000-D06FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				1-4-30
-				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Guangzhou Wanglu 
-8D5000-8D5FFF     (base 16)		Guangzhou Wanglu 
-				2nd floor, Block C, DET building, No.2 Ruitai Road,Kaitai Street, Huangpu District
-				Guangzhou  Guangdong  510665
-				CN
-
-70-B3-D5   (hex)		Cominfo, Inc.
-6F5000-6F5FFF     (base 16)		Cominfo, Inc.
-				Nabrezi 695
-				Zlin    760 01
-				CZ
-
-70-B3-D5   (hex)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
-00F000-00FFFF     (base 16)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
-				No.2 Xinxiu Street, Hunnan District, Shenyang
-				Shenyang  Liaoning  110000
-				CN
-
-70-B3-D5   (hex)		7thSense Design Limited
-E46000-E46FFF     (base 16)		7thSense Design Limited
-				2 The Courtyard, Shoreham Road
-				Upper Beeding  West Sussex  BN44 3TN
-				GB
-
-70-B3-D5   (hex)		Weltek Technologies Co. Ltd.
-C48000-C48FFF     (base 16)		Weltek Technologies Co. Ltd.
-				Flat A-B, 12/F, Block 1, Wah Fung Ind. Centre, 33-39 Kwai Fung Crescent, Kwai Chung, N.T.
-				HK    852
-				HK
-
-70-B3-D5   (hex)		TimeMachines Inc.
-756000-756FFF     (base 16)		TimeMachines Inc.
-				300 S 68th Street Place, Suite 100
-				Lincoln  NE  68510
-				US
-
-70-B3-D5   (hex)		BirdDog Australia
-3B9000-3B9FFF     (base 16)		BirdDog Australia
-				Unit 1, 8 Theobald St
-				THORNBURY  VIC  3071
-				AU
-
-70-B3-D5   (hex)		Clarity Medical Pvt Ltd
-C0D000-C0DFFF     (base 16)		Clarity Medical Pvt Ltd
-				PLOT No. 1687A, JLPL  INDUSTRIAL AREA, SECTOR 82, MOHALI
-				MOHALI  Punjab  140306
-				IN
-
-70-B3-D5   (hex)		KRONOTECH SRL
-626000-626FFF     (base 16)		KRONOTECH SRL
-				VIALE UNGHERIA 125
-				UDINE  ITALY/UDINE  33100
-				IT
-
-70-B3-D5   (hex)		Algra tec AG
-80C000-80CFFF     (base 16)		Algra tec AG
-				Rigistr. 1
-				Merenschwand  Aargau  5634
-				CH
-
-70-B3-D5   (hex)		Enlaps
-2AF000-2AFFFF     (base 16)		Enlaps
-				29 chemin du vieux chene, Tarmac
-				MEYLAN    38240
-				FR
-
-70-B3-D5   (hex)		Comeo Technology Co.,Ltd
-242000-242FFF     (base 16)		Comeo Technology Co.,Ltd
-				5F-2,NO.237 , Zhong-Xiao  RD., BANG-QIAO Dist., New Taipei City
-				New Taipei CIty    22064
-				TW
-
-70-B3-D5   (hex)		BORMANN EDV und Zubehoer
-864000-864FFF     (base 16)		BORMANN EDV und Zubehoer
-				Lohwaldstr. 53
-				Neusaess  Bayern  85356
-				DE
-
-70-B3-D5   (hex)		Shangnuo company
-82B000-82BFFF     (base 16)		Shangnuo company
-				Nong'an district
-				Changchun  Jilin  130000
-				CN
-
-70-B3-D5   (hex)		Shanghai Westwell Information and Technology Company Ltd
-856000-856FFF     (base 16)		Shanghai Westwell Information and Technology Company Ltd
-				No.102,Lixi Road.ChangNing district
-				Shanghai  Shanghai  200050
-				CN
-
-70-B3-D5   (hex)		NaraControls Inc
-3FD000-3FDFFF     (base 16)		NaraControls Inc
-				youngdong daero
-				Seoul    06072
-				KR
-
-70-B3-D5   (hex)		Vision Sensing Co., Ltd.
-93F000-93FFFF     (base 16)		Vision Sensing Co., Ltd.
-				Yorikimachi park bld.5F, Yorikimachi1-5, Kita-ku
-				Osaka  Osaka  530-0036
-				JP
-
-70-B3-D5   (hex)		Opsys-Tech
-99D000-99DFFF     (base 16)		Opsys-Tech
-				26 Harokmim st
-				Holon    5885849
-				IL
-
-70-B3-D5   (hex)		Elektronik Art
-F32000-F32FFF     (base 16)		Elektronik Art
-				80 Melgiewska Str.
-				Lublin  Lublin  20234
-				PL
-
-70-B3-D5   (hex)		Nueon - The COR
-A1A000-A1AFFF     (base 16)		Nueon - The COR
-				101 Jefferson Drive
-				Menlo Park    94025
-				US
-
-70-B3-D5   (hex)		ABL Space Systems
-F7F000-F7FFFF     (base 16)		ABL Space Systems
-				224 Oregon St
-				El Segundo  CA  90245
-				US
-
-70-B3-D5   (hex)		DUEVI SRL
-F41000-F41FFF     (base 16)		DUEVI SRL
-				VIA BARD 12/A
-				TORINO  TORINO  10142
-				IT
-
-70-B3-D5   (hex)		Daifuku CO., Ltd.
-3A2000-3A2FFF     (base 16)		Daifuku CO., Ltd.
-				1225 Nakazaiji, Hino-cho, Gamo-gun, Shiga
-				Gamo-gun  Shiga-ken  529-1692
-				JP
-
-70-B3-D5   (hex)		CLARESYS LIMITED
-485000-485FFF     (base 16)		CLARESYS LIMITED
-				154E Brook Drive, Milton Park
-				Abingdon    OX14 4SD
-				GB
-
-70-B3-D5   (hex)		Elmeasure India Pvt Ltd
-93D000-93DFFF     (base 16)		Elmeasure India Pvt Ltd
-				No.47-P, KIADB Hardware Park, Huvinayakanahalli
-				Bengaluru  Karnataka  562149
-				IN
-
-70-B3-D5   (hex)		Panamera
-7B1000-7B1FFF     (base 16)		Panamera
-				Rua. Dr. Brasilio Vicente de Castro, 111
-				Critiba  Parana  81200-526
-				BR
-
-70-B3-D5   (hex)		QUNU LABS PRIVATE LIMITED
-9A6000-9A6FFF     (base 16)		QUNU LABS PRIVATE LIMITED
-				Centenary Building, 2nd Floor,, East Wing, No. 28 M.G. Road
-				BANGALORE  KARNATAKA  560025
-				IN
-
-70-B3-D5   (hex)		ALTIT.CO.,Ltd.
-552000-552FFF     (base 16)		ALTIT.CO.,Ltd.
-				Gasan Digital 1 ro 88, 1905
-				Seoul  Korea  08590
-				KR
-
-70-B3-D5   (hex)		Harman Connected Services Corporation India Pvt. Ltd.
-423000-423FFF     (base 16)		Harman Connected Services Corporation India Pvt. Ltd.
-				Plot No 3 & 3A, EOIZ Industrial Area, Sy.No.85 and 86, KIADB, Whitefield,
-				Bengaluru  Karnataka  560066
-				IN
-
-70-B3-D5   (hex)		Galaxy Next Generation, Inc.
-E1D000-E1DFFF     (base 16)		Galaxy Next Generation, Inc.
-				285 Big A Rd 
-				Toccoa  GA  30577
-				US
-
-70-B3-D5   (hex)		Gigaband IP LLC
-E9F000-E9FFFF     (base 16)		Gigaband IP LLC
-				85 N Brookside St
-				Chandler  AZ  85225
-				US
-
-70-B3-D5   (hex)		Intrinsic Group Limited
-663000-663FFF     (base 16)		Intrinsic Group Limited
-				The Maltings
-				Allendale  Northumberland  NE47 9EE
-				GB
-
-70-B3-D5   (hex)		Barcelona Smart Technologies
-D5E000-D5EFFF     (base 16)		Barcelona Smart Technologies
-				C/Joaquim Molins 5
-				Barcelona  Catalunya  08028
-				ES
-
-70-B3-D5   (hex)		C TECH BILISIM TEKNOLOJILERI SAN. VE TIC. A.S.
-DCD000-DCDFFF     (base 16)		C TECH BILISIM TEKNOLOJILERI SAN. VE TIC. A.S.
-				Teknopark İstanbul, TGB, Sanayi Mah. Teknopark Bulvarı, No:1, Blok:1 Kat:2, Kurtköy-Pendik 34912, İSTANBUL
-				Istanbul    34912
-				TR
-
-70-B3-D5   (hex)		TableConnect GmbH
-7BD000-7BDFFF     (base 16)		TableConnect GmbH
-				Schlossgasse 13/2/3
-				Vienna  Vienna  1050
-				AT
-
-70-B3-D5   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
-7EC000-7ECFFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
-				10545 Hardin Valley Rd
-				Knoxville  TN  37932
-				US
-
-70-B3-D5   (hex)		Eldes Ltd
-8B6000-8B6FFF     (base 16)		Eldes Ltd
-				Ukmerges 283b
-				Vilnius    LT-06313
-				LT
-
-70-B3-D5   (hex)		Foerster-Technik GmbH
-453000-453FFF     (base 16)		Foerster-Technik GmbH
-				Gerwigstraße 25
-				Engen  Baden-Württemberg  78234
-				DE
-
-70-B3-D5   (hex)		BTG Instruments AB
-D85000-D85FFF     (base 16)		BTG Instruments AB
-				Industrigatan 1-3
-				Saffle  Varmland  66132
-				SE
-
-70-B3-D5   (hex)		Circle Consult ApS
-23D000-23DFFF     (base 16)		Circle Consult ApS
-				Rundforbivej 271A
-				Naerum    2850
-				DK
-
-70-B3-D5   (hex)		CreevX
-BF4000-BF4FFF     (base 16)		CreevX
-				158A Staffordstown Rd
-				Randalstown  Antrim  BT41 3LH
-				GB
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-261000-261FFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Velvac Incorporated
-44F000-44FFFF     (base 16)		Velvac Incorporated
-				2405 S. Calhoun Road
-				New Berlin  WI  53151-2709
-				US
-
-70-B3-D5   (hex)		Connido Limited
-71D000-71DFFF     (base 16)		Connido Limited
-				35 Kingsland Road
-				London    E2 8AA
-				GB
-
-70-B3-D5   (hex)		EDF Lab
-BDC000-BDCFFF     (base 16)		EDF Lab
-				7 Bd Gaspard Monge
-				PALAISEAU    91120
-				FR
-
-70-B3-D5   (hex)		EarTex
-627000-627FFF     (base 16)		EarTex
-				41 Corsham Street
-				London  England  N1 6DR
-				GB
-
-70-B3-D5   (hex)		VALEO CDA
-51F000-51FFFF     (base 16)		VALEO CDA
-				Hummendorfer Str 74
-				Kronach    96317
-				DE
-
-70-B3-D5   (hex)		PANASONIC LIFE SOLUTIONS ELEKTRİK SANAYİ VE TİCARE
-EC8000-EC8FFF     (base 16)		PANASONIC LIFE SOLUTIONS ELEKTRİK SANAYİ VE TİCARE
-				Abdurrahmangazi Mah. Ebubekir Cad. No:44 Sancaktepe
-				Istanbul    34887
-				TR
-
-70-B3-D5   (hex)		Telco Antennas Pty Ltd
-256000-256FFF     (base 16)		Telco Antennas Pty Ltd
-				5/1 Roebuck St
-				Hemmant  QLD  4154
-				AU
-
-70-B3-D5   (hex)		enders GmbH
-D3E000-D3EFFF     (base 16)		enders GmbH
-				Sonnenstraße 39
-				Ergolding    84030
-				DE
-
-70-B3-D5   (hex)		DaiShin Information & Communications Co., Ltd
-560000-560FFF     (base 16)		DaiShin Information & Communications Co., Ltd
-				DaiShin I&C Bldg., 205-28, Gasan digital 1-ro Geumcheon-gu
-				Seoul  Seoul  08501
-				KR
-
-70-B3-D5   (hex)		ULSee Inc
-1B7000-1B7FFF     (base 16)		ULSee Inc
-				9F, No.97, Jingye 1st Road  Zhongshan Dist.,Taipei City 104451 Taiwan
-				Taipei  Taipei  104451
-				TW
-
-70-B3-D5   (hex)		Network Customizing Technologies Inc
-B4B000-B4BFFF     (base 16)		Network Customizing Technologies Inc
-				29, Yuseong-daero 1184beon-gil, Yuseong-gu
-				Daejeon    34109
-				KR
-
-70-B3-D5   (hex)		Nexus Electric S.A.
-CD8000-CD8FFF     (base 16)		Nexus Electric S.A.
-				Serú 63
-				Mendoza  Mendoza  M5500FNA
-				AR
-
-70-B3-D5   (hex)		SPE Smartico, LLC
-399000-399FFF     (base 16)		SPE Smartico, LLC
-				82G, Oleksandra Polya Avenue
-				Dnipro  Dnipropetrovsk  49000
-				UA
-
-70-B3-D5   (hex)		Austco Marketing & Service (USA) ltd.
-316000-316FFF     (base 16)		Austco Marketing & Service (USA) ltd.
-				9155 Sterling St Unit 100
-				Irving  TX  75063
-				US
-
-70-B3-D5   (hex)		ARKS Enterprises, Inc.
-43A000-43AFFF     (base 16)		ARKS Enterprises, Inc.
-				4304 Alfriends Trail
-				Virginia Beach  VA  23455-6102
-				US
-
-70-B3-D5   (hex)		CT Company
-39F000-39FFFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-70-B3-D5   (hex)		VONSCH
-491000-491FFF     (base 16)		VONSCH
-				Budovatelska 13
-				Brezno    97703
-				SK
-
-70-B3-D5   (hex)		Thesycon Software Solutions GmbH & Co. KG
-919000-919FFF     (base 16)		Thesycon Software Solutions GmbH & Co. KG
-				Werner-von-Siemens-Str. 2
-				Ilmenau    98693
-				DE
-
-70-B3-D5   (hex)		ZMBIZI APP LLC
-F49000-F49FFF     (base 16)		ZMBIZI APP LLC
-				10000 Santa Monica Blvd, Suite 503
-				LOS ANGELES  CA  90067
-				US
-
-70-B3-D5   (hex)		N A Communications LLC
-B92000-B92FFF     (base 16)		N A Communications LLC
-				3820 Ohio Ave Ste 12
-				St Charles  IL  60174
-				US
-
-70-B3-D5   (hex)		Bita-International Co., Ltd.
-1C6000-1C6FFF     (base 16)		Bita-International Co., Ltd.
-				2F., NO. 36, PARK ST., NANGANG DIST.,
-				TAIPEI    11560
-				TW
-
-70-B3-D5   (hex)		nexgenwave
-5BD000-5BDFFF     (base 16)		nexgenwave
-				1209 sicox tower, 484 Dunchon-daero, jungwon-gu
-				Sungnam-si  gyeonggi-do  13229
-				KR
-
-70-B3-D5   (hex)		EBZ SysTec GmbH
-1FA000-1FAFFF     (base 16)		EBZ SysTec GmbH
-				Bleicherstraße 7
-				Ravensburg  DE    88212
-				DE
-
-70-B3-D5   (hex)		TRIOPTICS
-A11000-A11FFF     (base 16)		TRIOPTICS
-				Strandbaddamm 6
-				Wedel  Schleswig-Holstein  22880
-				DE
-
-70-B3-D5   (hex)		SIAME
-66E000-66EFFF     (base 16)		SIAME
-				RUE DES MATHEMATIQUES
-				GROMBALIA    8030
-				TN
-
-70-B3-D5   (hex)		Lockheed Martin - THAAD
-9EE000-9EEFFF     (base 16)		Lockheed Martin - THAAD
-				4800 Bradford Drive
-				Huntsville  AL  35805
-				US
-
-70-B3-D5   (hex)		Plenty Unlimited Inc
-D04000-D04FFF     (base 16)		Plenty Unlimited Inc
-				590 Eccles Ave
-				South San Francisco  CA  94080
-				US
-
-70-B3-D5   (hex)		TT Group SRL
-BD7000-BD7FFF     (base 16)		TT Group SRL
-				Via Pazzano 112
-				Roma  RM  00118
-				IT
-
-70-B3-D5   (hex)		Aliter Technologies
-586000-586FFF     (base 16)		Aliter Technologies
-				Turcianska 16
-				Bratislava    82109
-				SK
-
-70-B3-D5   (hex)		Stecomp
-EE0000-EE0FFF     (base 16)		Stecomp
-				Bollaarsdijk 11
-				Brielle    3231LA
-				NL
-
-70-B3-D5   (hex)		TORGOVYY DOM  TEHNOLOGIY LLC
-7C0000-7C0FFF     (base 16)		TORGOVYY DOM  TEHNOLOGIY LLC
-				Gospytalnaya 10, ap. 109, village Selyatino, city Naro-Fominsk,
-				Moscow  Moscow Region  143345
-				RU
-
-70-B3-D5   (hex)		XJ ELECTRIC CO., LTD.
-F26000-F26FFF     (base 16)		XJ ELECTRIC CO., LTD.
-				#1298 XUJI AVENUE
-				XUCHANG  HENAN  461000
-				CN
-
-70-B3-D5   (hex)		Automata GmbH & Co. KG
-19D000-19DFFF     (base 16)		Automata GmbH & Co. KG
-				Gewerbering 5
-				Ried  Bavaria  86510
-				DE
-
-70-B3-D5   (hex)		Topic Embedded Products B.V.
-63D000-63DFFF     (base 16)		Topic Embedded Products B.V.
-				Materiaalweg 4
-				Best  Noord-Brabant  5681 RJ
-				NL
-
-70-B3-D5   (hex)		EcoG
-1AE000-1AEFFF     (base 16)		EcoG
-				Gaenslerweg 24
-				Furth  Bavaria  82041
-				DE
-
-70-B3-D5   (hex)		Hubbell Power Systems
-DDA000-DDAFFF     (base 16)		Hubbell Power Systems
-				353 Powerville Road
-				Boonton Township  NJ  07005
-				US
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-6D5000-6D5FFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Jiangsu Etern Compamy Limited
-DA0000-DA0FFF     (base 16)		Jiangsu Etern Compamy Limited
-				No. 1788 fenhu Guo Dao Road, Foho New&High-tech Industrial Development Zone, Wujiang
-				Suzhou  Jiangsu  215211
-				CN
-
-70-B3-D5   (hex)		JSC Ural Factories
-0FD000-0FDFFF     (base 16)		JSC Ural Factories
-				Gorky street 92
-				Izhevsk  Udmurtia  426000
-				RU
-
-70-B3-D5   (hex)		Semiconsoft, inc
-212000-212FFF     (base 16)		Semiconsoft, inc
-				83 PINE HILL RD
-				SOUTHBOROUGH  MA  01772
-				US
-
-70-B3-D5   (hex)		M.S. CONTROL
-CE0000-CE0FFF     (base 16)		M.S. CONTROL
-				139-141 Fitzgerald Street
-				WEST PERTH  WA  6005
-				AU
-
-70-B3-D5   (hex)		Master Meter Inc.
-A9F000-A9FFFF     (base 16)		Master Meter Inc.
-				101 Regency Pkwy
-				Mansfield  TX  76063
-				US
-
-70-B3-D5   (hex)		TIAMA
-798000-798FFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-70-B3-D5   (hex)		Rapiot
-265000-265FFF     (base 16)		Rapiot
-				Eteläesplanadi 2
-				Helsinki    00130
-				FI
-
-70-B3-D5   (hex)		S Labs sp. z o.o.
-C53000-C53FFF     (base 16)		S Labs sp. z o.o.
-				Dworska 1a/1u
-				Kraków  Lesser Poland  30-314
-				PL
-
-70-B3-D5   (hex)		Torion Plasma Corporation
-B70000-B70FFF     (base 16)		Torion Plasma Corporation
-				99 Hooper Rd, Unit #6
-				Barrie  Ontario  L4N9S3
-				CA
-
-70-B3-D5   (hex)		OMNISENSING PHOTONICS LLC
-70D000-70DFFF     (base 16)		OMNISENSING PHOTONICS LLC
-				8015 Four Quarter Road
-				Ellicott City  MD  21043
-				US
-
-70-B3-D5   (hex)		Smart Systems LLC
-746000-746FFF     (base 16)		Smart Systems LLC
-				Flat 1, building 7, Izmalkova street
-				Mykolaiv    54028
-				UA
-
-70-B3-D5   (hex)		Megger Germany GmbH
-59F000-59FFFF     (base 16)		Megger Germany GmbH
-				Röderaue 41
-				Radeburg    01471
-				DE
-
-70-B3-D5   (hex)		Leviathan Solutions Ltd.
-A69000-A69FFF     (base 16)		Leviathan Solutions Ltd.
-				Abel Jeno utca 23
-				Budapest    1113
-				HU
-
-70-B3-D5   (hex)		BluB0X Security, Inc.
-16D000-16DFFF     (base 16)		BluB0X Security, Inc.
-				9 Bartlet Street Suite 334
-				Andover  MA  01810
-				US
-
-70-B3-D5   (hex)		biosilver .co.,ltd
-D21000-D21FFF     (base 16)		biosilver .co.,ltd
-				2-14-4, shinyokohama
-				yokohama  kanagawa  2220033
-				JP
-
-70-B3-D5   (hex)		ACD Elekronik GmbH
-D6D000-D6DFFF     (base 16)		ACD Elekronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		Network Integrity Systems
-9FF000-9FFFFF     (base 16)		Network Integrity Systems
-				1937 Tate Blvd. SE
-				Hickory  NC  28602
-				US
-
-70-B3-D5   (hex)		Vemco Sp. z o. o.
-D45000-D45FFF     (base 16)		Vemco Sp. z o. o.
-				ul. Biala 1
-				Gdansk    80-435
-				PL
-
-70-B3-D5   (hex)		Beijing Xiansheng Technology Co., Ltd
-8D6000-8D6FFF     (base 16)		Beijing Xiansheng Technology Co., Ltd
-				Room 02, 102-1 / F, building 32, yard 69, Yanfu Road, Fangshan District
-				Beijing  Beijing  102488
-				CN
-
-70-B3-D5   (hex)		Subject Link Inc
-137000-137FFF     (base 16)		Subject Link Inc
-				9F-1, No. 77, Sec 4. Nanjing E. Rd., SongShan Dist.
-				Taipei City  Taiwan  105406
-				TW
-
-70-B3-D5   (hex)		Crane-elec. Co., LTD.
-1FB000-1FBFFF     (base 16)		Crane-elec. Co., LTD.
-				Tamakushicho-higashi 3-3-97
-				Higashi osaka  OSAKA  5780932
-				JP
-
-70-B3-D5   (hex)		Jabil
-736000-736FFF     (base 16)		Jabil
-				888 Executive Center Dr. W.
-				St.Petersubrg  FL  33702
-				US
-
-70-B3-D5   (hex)		AudioTEC LLC
-33A000-33AFFF     (base 16)		AudioTEC LLC
-				108 Scott Street
-				Ripon  WI  54971
-				US
-
-70-B3-D5   (hex)		IRT Technologies
-D13000-D13FFF     (base 16)		IRT Technologies
-				5580 BOULEVARD THIMENS
-				Saint-Laurent  Quebec  H4R 2K9
-				CA
-
-70-B3-D5   (hex)		11811347 CANADA Inc.
-7E6000-7E6FFF     (base 16)		11811347 CANADA Inc.
-				1215 13th St  SE, Suite 114
-				Calgary  AB  T2G 3J4
-				CA
-
-70-B3-D5   (hex)		Season Electronics Ltd
-BA0000-BA0FFF     (base 16)		Season Electronics Ltd
-				600 Nest Business Park 
-				Havant  Hampshire  PO9 5TL
-				GB
-
-70-B3-D5   (hex)		KST technology
-20B000-20BFFF     (base 16)		KST technology
-				KST B/D 4-5, Wiryeseong-daero 12-gil
-				Songpa-gu  Seoul  05636
-				KR
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-9B1000-9B1FFF     (base 16)		Aplex Technology Inc.
-				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
-				Shenzhen City  Guangdong  518129
-				CN
-
-70-B3-D5   (hex)		Santa Barbara Imaging Systems
-4E6000-4E6FFF     (base 16)		Santa Barbara Imaging Systems
-				340 Storke Road, Suite 101
-				Goleta  CA  93117
-				US
-
-70-B3-D5   (hex)		AM General Contractor
-2C6000-2C6FFF     (base 16)		AM General Contractor
-				Via Angelo Scarsellini 147
-				Genova  Italy  16149
-				IT
-
-70-B3-D5   (hex)		ProtoConvert Pty Ltd
-EC0000-EC0FFF     (base 16)		ProtoConvert Pty Ltd
-				2 Clyden Court
-				Burwood East  Victoria  3151
-				AU
-
-70-B3-D5   (hex)		Reflexion Medical
-298000-298FFF     (base 16)		Reflexion Medical
-				Reflexion Medical 25841 Industrial Blvd.
-				Hayward  CA  94545
-				US
-
-70-B3-D5   (hex)		Zumbach Electronic AG
-C19000-C19FFF     (base 16)		Zumbach Electronic AG
-				Hauptstrasse 93
-				Orpund  Bern  2552
-				CH
-
-70-B3-D5   (hex)		Lobaro GmbH
-E05000-E05FFF     (base 16)		Lobaro GmbH
-				Stadtdeich 7
-				Hamburg      20097
-				DE
-
-70-B3-D5   (hex)		LDA Audiotech
-685000-685FFF     (base 16)		LDA Audiotech
-				C/Severo Ochoa, 31
-				Malaga  Malaga  29590
-				ES
-
-70-B3-D5   (hex)		HORIZON.INC
-69B000-69BFFF     (base 16)		HORIZON.INC
-				1600 Aza-Shironoshita Asahi
-				Shin Asahi-cho  Takashima, Shiga  520-1501
-				JP
-
-70-B3-D5   (hex)		aelettronica group srl
-A14000-A14FFF     (base 16)		aelettronica group srl
-				via matteotti,22
-				gaggiano  milano  20083
-				IT
-
-70-B3-D5   (hex)		MedRx, Inc
-3B6000-3B6FFF     (base 16)		MedRx, Inc
-				1200 Starkey Rd Ste.105
-				Largo  FL  33771
-				US
-
-70-B3-D5   (hex)		ZIEHL-ABEGG SE
-698000-698FFF     (base 16)		ZIEHL-ABEGG SE
-				Heinz-Ziehl-Strasse 1
-				Kuenzelsau    74653
-				DE
-
-70-B3-D5   (hex)		Vema Venturi AB
-036000-036FFF     (base 16)		Vema Venturi AB
-				Johan på gårdas gata 5A
-				Gothenburg  Västra Götaland  41250
-				SE
-
-70-B3-D5   (hex)		Vendanor AS
-D0B000-D0BFFF     (base 16)		Vendanor AS
-				Grandevegen 13
-				Stryn    6783
-				NO
-
-70-B3-D5   (hex)		Tinkerforge GmbH
-509000-509FFF     (base 16)		Tinkerforge GmbH
-				Zur Brinke 7
-				Schloss Holte-Stukenbrock  NRW  33758
-				DE
-
-70-B3-D5   (hex)		4neXt S.r.l.s.
-E41000-E41FFF     (base 16)		4neXt S.r.l.s.
-				Via Leonardo da Vinci 15/4
-				Vigonovo  Veneto  30030
-				IT
-
-8C-1F-64   (hex)		Solace Systems Inc.
-460000-460FFF     (base 16)		Solace Systems Inc.
-				535 Legget Drive,
-				Kanata  Ontario  K2K3B8
-				CA
-
-8C-1F-64   (hex)		AUTOMATIZACION Y CONECTIVIDAD SA DE CV
-F41000-F41FFF     (base 16)		AUTOMATIZACION Y CONECTIVIDAD SA DE CV
-				LA GARITA ANDADOR 6 DUPLEX 1 CASA 2
-				CDMX  TLALPAN  14390
-				MX
-
-8C-1F-64   (hex)		AEM Singapore Pte Ltd
-7F1000-7F1FFF     (base 16)		AEM Singapore Pte Ltd
-				52 Serangoon North Ave 4
-				Singapore  Singapore  555853
-				SG
-
-8C-1F-64   (hex)		DAVE SRL
-726000-726FFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-8C-1F-64   (hex)		LLC EMS-Expert
-21C000-21CFFF     (base 16)		LLC EMS-Expert
-				Gorodskoy, st., d.39,1
-				Tula  Tula region  300012
-				RU
-
-8C-1F-64   (hex)		Gamber Johnson-LLC
-42B000-42BFFF     (base 16)		Gamber Johnson-LLC
-				3001 Borham Ave
-				Stevens Point  WI  54481
-				US
-
-8C-1F-64   (hex)		Green Access Ltd
-878000-878FFF     (base 16)		Green Access Ltd
-				Unit 1 Kensworthgate  200-204 High Street South
-				Dunstable  Bedfordshire   LU6 3HS
-				GB
-
-8C-1F-64   (hex)		QUERCUS TECHNOLOGIES, S.L.
-B9A000-B9AFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
-				Av. Onze de Setembre 19
-				Reus  Tarragona  43203
-				ES
-
-8C-1F-64   (hex)		Siemens Industry Software Inc.
-611000-611FFF     (base 16)		Siemens Industry Software Inc.
-				46871 Bayside Parkway
-				Fremont  CA  94538
-				US
-
-8C-1F-64   (hex)		ZMBIZI APP LLC
-572000-572FFF     (base 16)		ZMBIZI APP LLC
-				10000 Santa Monica Blvd, Suite 503
-				LOS ANGELES  CA  90067
-				US
-
-8C-1F-64   (hex)		Arcopie
-28A000-28AFFF     (base 16)		Arcopie
-				Office 438, YTC, 847, Buheung-ro, Gwangjeok-myeon
-				Yangju-si  Alabama  11416
-				KR
-
-8C-1F-64   (hex)		Prosys
-A5C000-A5CFFF     (base 16)		Prosys
-				280 route de serry
-				fillinges    74250
-				FR
-
-8C-1F-64   (hex)		Pixel Design & Manufacturing Sdn. Bhd.
-CE3000-CE3FFF     (base 16)		Pixel Design & Manufacturing Sdn. Bhd.
-				87, Jalan 20/7, Paramount Garden
-				Petaling Jaya  Selangor  46300
-				MY
-
-8C-1F-64   (hex)		Antai technology Co.,Ltd
-72C000-72CFFF     (base 16)		Antai technology Co.,Ltd
-				T2-704, No.159 Shenwu Road, Minhang District
-				Shanghai  Shanghai  201100
-				CN
-
-8C-1F-64   (hex)		mapna group
-768000-768FFF     (base 16)		mapna group
-				mirdamad
-				Tehran    0512258788
-				IR
-
-8C-1F-64   (hex)		Sicon srl
-193000-193FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-8C-1F-64   (hex)		Abacus Peripherals Pvt Ltd
-984000-984FFF     (base 16)		Abacus Peripherals Pvt Ltd
-				29 Apurva Industrial Estate, Makwana Road, Marol, Andheri East
-				Mumbai  Maharashtra  400059
-				IN
-
-8C-1F-64   (hex)		YULISTA INTEGRATED SOLUTION
-128000-128FFF     (base 16)		YULISTA INTEGRATED SOLUTION
-				7600 ADVANCED GATEWAY
-				HUNTSVILLE  AL  35808
-				US
-
-8C-1F-64   (hex)		Esys Srl
-C1F000-C1FFFF     (base 16)		Esys Srl
-				via Spagna 240/242
-				Rende  Calabria  87036
-				IT
-
-8C-1F-64   (hex)		Rayhaan Networks
-ACE000-ACEFFF     (base 16)		Rayhaan Networks
-				Tuchmacherstrasse 36
-				Zurich    8041
-				CH
-
-8C-1F-64   (hex)		Intel Corporate
-397000-397FFF     (base 16)		Intel Corporate
-				Lot 8, Jalan Hi-Tech 2/3  
-				Kulim  Kedah  09000
-				MY
-
-8C-1F-64   (hex)		Red Sensors Limited
-1B6000-1B6FFF     (base 16)		Red Sensors Limited
-				Dock, 75 Exploration Dr
-				Leicester  Leicestershire  LE4 5NU
-				GB
-
-8C-1F-64   (hex)		Security Products International, LLC
-493000-493FFF     (base 16)		Security Products International, LLC
-				2025 Ebenezer Road  Suite F
-				Rock Hill   SC  29732
-				US
-
-8C-1F-64   (hex)		Vision Systems Safety Tech
-330000-330FFF     (base 16)		Vision Systems Safety Tech
-				5 Chemin de Chiradie
-				Brignais    69530
-				FR
-
-8C-1F-64   (hex)		TowerIQ
-3AD000-3ADFFF     (base 16)		TowerIQ
-				13723 Riverport Drive
-				Saint Louis  MO  63043
-				US
-
-8C-1F-64   (hex)		Algodue Elettronica Srl
-7D6000-7D6FFF     (base 16)		Algodue Elettronica Srl
-				Via P. Gobetti, 16F
-				Maggiora  NO  28014
-				IT
-
-8C-1F-64   (hex)		Actronika SAS
-EC1000-EC1FFF     (base 16)		Actronika SAS
-				157 boulevard MacDonald
-				Paris    75019
-				FR
-
-8C-1F-64   (hex)		Shenzhen ROLSTONE Technology Co., Ltd
-382000-382FFF     (base 16)		Shenzhen ROLSTONE Technology Co., Ltd
-				4F?Block 3, Fushijie Industry Park, Dalang District, 
-				Shenzhen  Guangdong  518110
-				CN
-
-8C-1F-64   (hex)		Guardian Controls International Ltd
-7A1000-7A1FFF     (base 16)		Guardian Controls International Ltd
-				 The Dairy, Spring Bank Farm
-				Arclid  Cheshire  CW11 2UD
-				GB
-
-8C-1F-64   (hex)		TechnipFMC
-0C5000-0C5FFF     (base 16)		TechnipFMC
-				1602 WAGNER AVE
-				ERIE  PA  16510-1444
-				US
-
-8C-1F-64   (hex)		General Motors
-CAD000-CADFFF     (base 16)		General Motors
-				Galgalei Hapladaa 
-				Herzliya    3030000
-				IL
-
-8C-1F-64   (hex)		Orange Tree Technologies Ltd
-77C000-77CFFF     (base 16)		Orange Tree Technologies Ltd
-				173 Curie Avenue, Harwell Oxford
-				Didcot  Oxfordshire  OX11 0QG
-				GB
-
-8C-1F-64   (hex)		Monnit Corporation
-06D000-06DFFF     (base 16)		Monnit Corporation
-				450 South Simmons STE 670
-				Kaysville  UT  84037
-				US
-
-8C-1F-64   (hex)		Sciospec Scientific Instruments GmbH
-C40000-C40FFF     (base 16)		Sciospec Scientific Instruments GmbH
-				Leipziger Str. 43b
-				Bennwitz  Deutschland  04828
-				DE
-
-8C-1F-64   (hex)		Lift Ventures, Inc
-C27000-C27FFF     (base 16)		Lift Ventures, Inc
-				28475 GREENFIELD RD STE 113 #7100
-				Southfield  MI  48076
-				US
-
-8C-1F-64   (hex)		Dynomotion, Inc
-15E000-15EFFF     (base 16)		Dynomotion, Inc
-				1054 Bath Ln 
-				Ventura  CA  93001
-				US
-
-8C-1F-64   (hex)		KB Modul, LLC
-EAA000-EAAFFF     (base 16)		KB Modul, LLC
-				Verejskaya str. bld.29
-				Moscow    121351
-				RU
-
-8C-1F-64   (hex)		Guan Show Technologe Co., Ltd.
-8A9000-8A9FFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-8C-1F-64   (hex)		Industrial Laser Machines, LLC
-F3F000-F3FFFF     (base 16)		Industrial Laser Machines, LLC
-				6985 UNIVERSITY BLVD
-				WINTER PARK  FL  32792-6713
-				US
-
-8C-1F-64   (hex)		Norbit ODM AS
-0AB000-0ABFFF     (base 16)		Norbit ODM AS
-				Stiklestadveien 1
-				Trondheim    7041
-				NO
-
-8C-1F-64   (hex)		Guan Show Technologe Co., Ltd.
-4CD000-4CDFFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		Dorsett Technologies Inc
-E76000-E76FFF     (base 16)		Dorsett Technologies Inc
-				
-				Yadkinville  NC  27055
-				US
-
-8C-1F-64   (hex)		Goertek Robotics Co.,Ltd.
-CEF000-CEFFFF     (base 16)		Goertek Robotics Co.,Ltd.
-				Unit 18, E Link World Business Park, 1777 Hualong Road, Qingpu District
-				Shanghai  Shanghai  201708
-				CN
-
-8C-1F-64   (hex)		Exi Flow Measurement Ltd
-9CE000-9CEFFF     (base 16)		Exi Flow Measurement Ltd
-				Unit 22 Ford Lane business Park
-				Ford, ARUNDEL  West Sussex  BN164HP
-				GB
-
-8C-1F-64   (hex)		Shenzhen Qunfang Technology Co., LTD.
-8AE000-8AEFFF     (base 16)		Shenzhen Qunfang Technology Co., LTD.
-				4th floor, building A4, Huihao Industrial Park, Matian street, Guangming District, Shenzhen
-				Shenzhen    518000
-				CN
-
-8C-1F-64   (hex)		ATM LLC
-782000-782FFF     (base 16)		ATM LLC
-				Rybinskaya 3-ya str., 18, build 22, floor 2, office 5
-				Moscow    107113
-				RU
-
-8C-1F-64   (hex)		Ermes Elettronica s.r.l.
-DB9000-DB9FFF     (base 16)		Ermes Elettronica s.r.l.
-				Via Treviso, 36
-				San Vendemiano  TV  31020
-				IT
-
-8C-1F-64   (hex)		GY-FX SAS
-E77000-E77FFF     (base 16)		GY-FX SAS
-				38 rue du Botrel
-				35690  Brittany  Acigne
-				FR
-
-8C-1F-64   (hex)		LcmVeloci ApS
-E52000-E52FFF     (base 16)		LcmVeloci ApS
-				Smedeland 2
-				Glostrup    2600
-				DK
-
-8C-1F-64   (hex)		Brighten Controls LLP
-003000-003FFF     (base 16)		Brighten Controls LLP
-				#306B, ARATT ROYAL MANOR, SECTOR 2, SOMASUNDARPALAYA MAIN ROAD, HSR LAYOUT
-				BANGALORE  Karnataka  560102
-				IN
-
-8C-1F-64   (hex)		DEUTA-WERKE GmbH
-A76000-A76FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-8C-1F-64   (hex)		Clock-O-Matic
-4C1000-4C1FFF     (base 16)		Clock-O-Matic
-				De Vunt 14
-				Holsbeek  VBR  3220
-				BE
-
-8C-1F-64   (hex)		Shanghai Shenxu Technology Co., Ltd
-08B000-08BFFF     (base 16)		Shanghai Shenxu Technology Co., Ltd
-				4012, No. 22, Lane 1800, Sanxin North Road, Songjiang District
-				Shanghai  Shanghai  201600
-				CN
-
-8C-1F-64   (hex)		NPO ECO-INTECH Ltd.
-57A000-57AFFF     (base 16)		NPO ECO-INTECH Ltd.
-				Kashirskoye shosse 13-1
-				Moscow    115230
-				RU
-
-8C-1F-64   (hex)		NuGrid Power
-A38000-A38FFF     (base 16)		NuGrid Power
-				Unit 110 - 8575 Government St
-				Burnaby  BC  V3N 4V1
-				CA
-
-8C-1F-64   (hex)		DISPLAX S.A.
-CEE000-CEEFFF     (base 16)		DISPLAX S.A.
-				Rua Soldado  Manuel Pinheiro Magalhãe, 68s
-				Adaúfe  Braga  4710-167
-				PT
-
-8C-1F-64   (hex)		Carestream Dental LLC
-B77000-B77FFF     (base 16)		Carestream Dental LLC
-				3625 Cumberland Blvd. Ste. 700 Atlanta, GA 30339
-				Atlanta    30339
-				US
-
-8C-1F-64   (hex)		TEX COMPUTER SRL 
-2C2000-2C2FFF     (base 16)		TEX COMPUTER SRL 
-				Via O. Respighi 13
-				CATTOLICA   RIMINI   47841
-				IT
-
-8C-1F-64   (hex)		Union Electronic.
-BD7000-BD7FFF     (base 16)		Union Electronic.
-				1-134.Kajita-cho
-				Obu-shi  Aichi  474-0071
-				JP
-
-8C-1F-64   (hex)		Aspen Spectra Sdn Bhd
-41D000-41DFFF     (base 16)		Aspen Spectra Sdn Bhd
-				51-10, The Boulevard, Mid Valley City
-				Lingkaran Syed Putra  Kuala Lumpur  59200
-				MY
-
-8C-1F-64   (hex)		Camozzi Automation SpA
-9C3000-9C3FFF     (base 16)		Camozzi Automation SpA
-				Via Eritrea 20/I
-				BRESCIA  ITALY  25080
-				IT
-
-8C-1F-64   (hex)		Grossenbacher Systeme AG
-E41000-E41FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-8C-1F-64   (hex)		Emcom Systems
-177000-177FFF     (base 16)		Emcom Systems
-				92 N Main St, Building 18, Unit A, 
-				Windsor  NJ  07762
-				US
-
-8C-1F-64   (hex)		Power Electronics Espana, S.L.
-FE3000-FE3FFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-8C-1F-64   (hex)		Telco Antennas Pty Ltd
-F5A000-F5AFFF     (base 16)		Telco Antennas Pty Ltd
-				5/1 Roebuck St
-				Hemmant  QLD  4154
-				AU
-
-8C-1F-64   (hex)		SACO Controls Inc.
-F96000-F96FFF     (base 16)		SACO Controls Inc.
-				550 McCaffrey
-				Saint Laurent  Quebec  H4T1N1
-				CA
-
-8C-1F-64   (hex)		Fluid Components Intl
-BF4000-BF4FFF     (base 16)		Fluid Components Intl
-				1755 La Costa Meadows Dr.
-				San Marcos  CA  92078
-				US
-
-8C-1F-64   (hex)		FeedFlo
-19B000-19BFFF     (base 16)		FeedFlo
-				1200 220 Portage Ave
-				Winnipeg  MB - Manitoba  R3C0A5
-				CA
-
-8C-1F-64   (hex)		Benchmark Electronics BV
-16E000-16EFFF     (base 16)		Benchmark Electronics BV
-				Lelyweg 10
-				Almelo  Overijssel  7602 EA
-				NL
-
-8C-1F-64   (hex)		International Water Treatment Maritime AS
-F31000-F31FFF     (base 16)		International Water Treatment Maritime AS
-				Eternitveien 34, Bjerkås næringspark bygg 1, PB 54
-				Slemmestad    3470
-				NO
-
-8C-1F-64   (hex)		Asiga Pty Ltd
-31A000-31AFFF     (base 16)		Asiga Pty Ltd
-				Unit 2, 19-21 Bourke Road
-				Alexandria  New South Wales  2015
-				AU
-
-8C-1F-64   (hex)		Aqua Broadcast Ltd
-EB2000-EB2FFF     (base 16)		Aqua Broadcast Ltd
-				C/O Able & Young Ltd , Airport House
-				Croydon    CR0 0XZ
-				GB
-
-8C-1F-64   (hex)		West Pharmaceutical Services, Inc.
-84E000-84EFFF     (base 16)		West Pharmaceutical Services, Inc.
-				530 Herman O. West Drive
-				Exton  PA  19341
-				US
-
-8C-1F-64   (hex)		Optotune Switzerland AG
-656000-656FFF     (base 16)		Optotune Switzerland AG
-				Bernstrasse 388
-				Dietikon    8953
-				CH
-
-8C-1F-64   (hex)		ISAC SRL
-111000-111FFF     (base 16)		ISAC SRL
-				via Maestri del Lavoro 30
-				CASCINA  PISA  56021
-				IT
-
-8C-1F-64   (hex)		Misaka Network, Inc.
-F25000-F25FFF     (base 16)		Misaka Network, Inc.
-				8 The Green, Suite 6288
-				Dover  DE  19901
-				US
-
-8C-1F-64   (hex)		Smart Radar System, Inc
-517000-517FFF     (base 16)		Smart Radar System, Inc
-				7F, Innovalley A, 253 Pangyo-ro Bundang-gu
-				Seongnam-si   Gyeonggi-do Korea  13486
-				KR
-
-8C-1F-64   (hex)		KRONOTECH SRL
-103000-103FFF     (base 16)		KRONOTECH SRL
-				VIALE UNGHERIA 125
-				UDINE  ITALY/UDINE  33100
-				IT
-
-8C-1F-64   (hex)		Senior Group LLC
-647000-647FFF     (base 16)		Senior Group LLC
-				1300 West Main Street
-				Louisville  KY  40203
-				US
-
-8C-1F-64   (hex)		Deviceroy
-7B9000-7B9FFF     (base 16)		Deviceroy
-				231 W VINEYARD WAY
-				Saratoga Springs  UT  84045
-				US
-
-8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
-E99000-E99FFF     (base 16)		Pantherun Technologies Pvt Ltd
-				311 6th main road Hal 2nd stage
-				Bangalore  Karnataka  560038
-				IN
-
-8C-1F-64   (hex)		Anhui Chaokun Testing Equipment Co., Ltd
-600000-600FFF     (base 16)		Anhui Chaokun Testing Equipment Co., Ltd
-				E502, Workshop 2, Longshan Science and Technology Park, 35 Hengshan Road, Jiujiang District, Wuhu city, Anhui Province  
-				Wuhu  Anhui  241000
-				CN
-
-8C-1F-64   (hex)		SMILICS TECHNOLOGIES, S.L.
-FD3000-FD3FFF     (base 16)		SMILICS TECHNOLOGIES, S.L.
-				C/Lepanto, 43
-				Barcelona  Barcelona  08223
-				ES
-
-8C-1F-64   (hex)		Samwell International Inc
-E49000-E49FFF     (base 16)		Samwell International Inc
-				No. 317-1, Sec.2, An Kang Rd., Hsintien Dist
-				New Taipei City    231
-				TW
-
-8C-1F-64   (hex)		Magnet-Physik Dr. Steingroever GmbH
-C97000-C97FFF     (base 16)		Magnet-Physik Dr. Steingroever GmbH
-				Emil-Hoffmann Str. 3
-				Köln  Nordrhein-W estfalen   50996
-				DE
-
-8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
-88D000-88DFFF     (base 16)		Pantherun Technologies Pvt Ltd
-				311 6th main road Hal 2nd stage
-				Bangalore  Karnataka  560038
-				IN
-
-8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
-099000-099FFF     (base 16)		Pantherun Technologies Pvt Ltd
-				311 6th main road Hal 2nd stage
-				Bangalore  Karnataka  560038
-				IN
-
-8C-1F-64   (hex)		GE AVIC Civil Avionics Systems Company Limited
-F74000-F74FFF     (base 16)		GE AVIC Civil Avionics Systems Company Limited
-				666 Zixing Road
-				Shanghai    200241
-				CN
-
-8C-1F-64   (hex)		Stercom Power Solutions GmbH
-2B6000-2B6FFF     (base 16)		Stercom Power Solutions GmbH
-				Ziegelstr. 1
-				Weyarn  Bayern  83629
-				DE
-
-8C-1F-64   (hex)		Shenzhen zhushida Technology lnformation Co.,Ltd
-A5D000-A5DFFF     (base 16)		Shenzhen zhushida Technology lnformation Co.,Ltd
-				1309, Block A, Innovation Building, Majialong Industrial Zone, Nantou Street, Nanshan District, 
-				SHENZHEN    518000
-				CN
-
-8C-1F-64   (hex)		EnviroNode IoT Solutions
-1AF000-1AFFFF     (base 16)		EnviroNode IoT Solutions
-				4 Malvern  Avenue
-				Sydney  New South Wales  2132
-				AU
-
-8C-1F-64   (hex)		Gateview Technologies
-B7B000-B7BFFF     (base 16)		Gateview Technologies
-				 104 White St #201
-				Wake Forest    27587
-				US
-
-8C-1F-64   (hex)		Suntech Engineering
-7D3000-7D3FFF     (base 16)		Suntech Engineering
-				30, Gukgasandan-daero 34-gil, Guji-myeon, Dalseong-gun, Daegu, Republic of Korea
-				Daegu    43008
-				KR
-
-8C-1F-64   (hex)		Ascon Tecnologic S.r.l.
-FF6000-FF6FFF     (base 16)		Ascon Tecnologic S.r.l.
-				via Indipendenza, 56
-				Vigevano  PV  27029
-				IT
-
-8C-1F-64   (hex)		Delta Computers LLC.
-59F000-59FFFF     (base 16)		Delta Computers LLC.
-				Office 22/10, room part 22, room IV, floor 3, 41A, 3-rd Parkovaya str.
-				Moscow    105425
-				RU
-
-8C-1F-64   (hex)		Newtec A/S
-BF0000-BF0FFF     (base 16)		Newtec A/S
-				Stærmosegårdsvej  18
-				Odense SV  Region Syd  5230
-				DK
-
-8C-1F-64   (hex)		Onto Innovation
-FBA000-FBAFFF     (base 16)		Onto Innovation
-				16 Jonspin rd
-				Wilmington  MA  01887
-				US
-
-8C-1F-64   (hex)		DAVE SRL
-967000-967FFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-8C-1F-64   (hex)		Becton Dickinson
-775000-775FFF     (base 16)		Becton Dickinson
-				7 Loveton Circle
-				Sparks  MD  21152
-				US
-
-8C-1F-64   (hex)		FIBERME COMMUNICATIONS LLC
-C68000-C68FFF     (base 16)		FIBERME COMMUNICATIONS LLC
-				1749 Old Meadow Rd.
-				McLean  VA  22102
-				US
-
-8C-1F-64   (hex)		TechArgos
-BFB000-BFBFFF     (base 16)		TechArgos
-				Nizhnyaya Krasnoselskaya Str. 35-64
-				Moscow     105066
-				RU
-
-8C-1F-64   (hex)		e.kundenservice Netz GmbH
-855000-855FFF     (base 16)		e.kundenservice Netz GmbH
-				Steindamm 100
-				Hamburg    20099
-				DE
-
-8C-1F-64   (hex)		Meiryo Denshi Corp.
-EB5000-EB5FFF     (base 16)		Meiryo Denshi Corp.
-				38-23 higashi maeda
-				Nishin City  Aichi  470-0124
-				JP
-
-8C-1F-64   (hex)		Baker Hughes EMEA
-40E000-40EFFF     (base 16)		Baker Hughes EMEA
-				Sensing House, Shannon Free Zone East
-				Shannon  Co. Clare  V14 V99
-				IE
-
-8C-1F-64   (hex)		Calnex Solutions plc
-703000-703FFF     (base 16)		Calnex Solutions plc
-				Oracle Campus
-				 Linlithgow  West Lothian  EH49 7LR
-				GB
-
-8C-1F-64   (hex)		LLC NTPC
-660000-660FFF     (base 16)		LLC NTPC
-				Kharkovsky alley 36g, office room 1
-				Belgorod    308012
-				RU
-
-8C-1F-64   (hex)		Renukas Castle Hard- and Software
-4E5000-4E5FFF     (base 16)		Renukas Castle Hard- and Software
-				Renukas Castle, 35th Ward, Kalyan Nagar, Ring Road, near Lions School
-				Gadag  Karnataka  582103
-				IN
-
-8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
-059000-059FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-8C-1F-64   (hex)		Tesat-Spacecom GmbH & Co. KG
-F27000-F27FFF     (base 16)		Tesat-Spacecom GmbH & Co. KG
-				Gerberstrasse 49
-				Backnang    71522
-				DE
-
-8C-1F-64   (hex)		REFU Storage System GmbH
-53B000-53BFFF     (base 16)		REFU Storage System GmbH
-				Marktstraße 185
-				Pfullingen    72793
-				DE
-
-8C-1F-64   (hex)		DEUTA-WERKE GmbH
-883000-883FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-8C-1F-64   (hex)		JBF
-F45000-F45FFF     (base 16)		JBF
-				via goretta 90
-				mappano  torino  10079
-				IT
-
-8C-1F-64   (hex)		Micro Electroninc Products
-765000-765FFF     (base 16)		Micro Electroninc Products
-				TT Vasumweg 150
-				Amsterdam    1033 SH
-				NL
-
-8C-1F-64   (hex)		Logical Product
-622000-622FFF     (base 16)		Logical Product
-				2-25-5,matoba,minamiku
-				Fukuoka  Fukuoka  811-1314
-				JP
-
-8C-1F-64   (hex)		Dan Smith LLC
-4D6000-4D6FFF     (base 16)		Dan Smith LLC
-				4638 Cameron Ridge Drive, Apt 138
-				Indianapolis  IN  46240
-				US
-
-8C-1F-64   (hex)		Sicon srl
-B3B000-B3BFFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-8C-1F-64   (hex)		INVIXIUM ACCESS INC
-274000-274FFF     (base 16)		INVIXIUM ACCESS INC
-				111 Gordon Baker Road, Suite #300
-				Toronto  Ontario  M2H 3R1
-				CA
-
-8C-1F-64   (hex)		Bunka Shutter Co., Ltd.
-0B0000-0B0FFF     (base 16)		Bunka Shutter Co., Ltd.
-				644-1 Tenjingoe,Ooaza-Kamiishizuka
-				Oyama  Tochigi  323-0063
-				JP
-
-8C-1F-64   (hex)		Sanchar Telesystems limited
-958000-958FFF     (base 16)		Sanchar Telesystems limited
-				A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI
-				New Delhi  Delhi  110020
-				IN
-
-8C-1F-64   (hex)		Rodgers Instruments US LLC
-A42000-A42FFF     (base 16)		Rodgers Instruments US LLC
-				6497 NE Croeni Avenue
-				Hillsboro    97124
-				US
-
-8C-1F-64   (hex)		Potter Electric Signal Company
-316000-316FFF     (base 16)		Potter Electric Signal Company
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-8C-1F-64   (hex)		Diffraction Limited
-8CF000-8CFFFF     (base 16)		Diffraction Limited
-				59 Grenfell Crescent, Unit B
-				Ottawa  ON  K2G 0G3
-				CA
-
-8C-1F-64   (hex)		Tunstall A/S
-F2C000-F2CFFF     (base 16)		Tunstall A/S
-				Niels Bohrs vej 42
-				Stilling  Skanderborg  8660
-				DK
-
-8C-1F-64   (hex)		Tantronic AG
-1EF000-1EFFFF     (base 16)		Tantronic AG
-				Gewerbering 12
-				Wohlen  AG  5610
-				CH
-
-8C-1F-64   (hex)		Strategic Robotic Systems
-C57000-C57FFF     (base 16)		Strategic Robotic Systems
-				14842 NE 95th StreetBuilding 5
-				Redmond  WA  98052
-				US
-
-8C-1F-64   (hex)		MHE Electronics
-E90000-E90FFF     (base 16)		MHE Electronics
-				49Alexander Rd, Westmead
-				Durban  KwaZulu Natal  3610
-				ZA
-
-8C-1F-64   (hex)		tickIoT Inc.
-949000-949FFF     (base 16)		tickIoT Inc.
-				651 N Broad St Ste 206, Ste 206
-				Middletown  DE  19709
-				US
-
-8C-1F-64   (hex)		SYSN
-2C5000-2C5FFF     (base 16)		SYSN
-				the third floor, 26, Namsan-ro 39beon-gil, Uichang-gu
-				Changwon-si, Gyeongsangnam-do, Republic of Korea    51368
-				KR
-
-70-B3-D5   (hex)		EVCO SPA
-A80000-A80FFF     (base 16)		EVCO SPA
-				VIA FELTRE N. 81
-				SEDICO  BELLUNO  32036
-				IT
-
-70-B3-D5   (hex)		Forcite Helmet Systems Pty Ltd
-5F8000-5F8FFF     (base 16)		Forcite Helmet Systems Pty Ltd
-				63 Dixon Street, Haymarket, Haymarket HQ
-				Sydney  NSW  2000
-				AU
-
-70-B3-D5   (hex)		KRISTECH Krzysztof Kajstura
-66C000-66CFFF     (base 16)		KRISTECH Krzysztof Kajstura
-				Porzeczkowa 12
-				Ustroń  Please select region, state or province  43-450
-				PL
-
-70-B3-D5   (hex)		Songwoo Information & Technology Co., Ltd
-824000-824FFF     (base 16)		Songwoo Information & Technology Co., Ltd
-				24-9, Jinju-daero 404beon-gil, Jinju-si, Gyeongsangnam-do, Korea 
-				Jinju  Gyeongsangnam-do  52826
-				KR
-
-70-B3-D5   (hex)		Preston Industries dba PolyScience
-F82000-F82FFF     (base 16)		Preston Industries dba PolyScience
-				6600 W. Touhy Ave
-				Niles  IL  60714-4588
-				US
-
-70-B3-D5   (hex)		Sorion Electronics ltd
-26D000-26DFFF     (base 16)		Sorion Electronics ltd
-				Unit 12 Magreal ind. est
-				Ladywood, Birmingham  West Midlands  B16 0QZ
-				GB
-
-70-B3-D5   (hex)		Unipower AB
-A49000-A49FFF     (base 16)		Unipower AB
-				PO Box 411
-				SE-441 28 Alingsas    
-				SE
-
-70-B3-D5   (hex)		Intelligent Security Systems (ISS)
-514000-514FFF     (base 16)		Intelligent Security Systems (ISS)
-				1480 US Highway 9 North Suite 202
-				Woodbridge  NJ  07095
-				US
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-F94000-F94FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Boston Dynamics
-292000-292FFF     (base 16)		Boston Dynamics
-				
-				    
-				
-
-70-B3-D5   (hex)		TIAMA
-4BC000-4BCFFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-70-B3-D5   (hex)		Natav Services Ltd.
-E8D000-E8DFFF     (base 16)		Natav Services Ltd.
-				Binyamin 39/1
-				Modiin  Israel  7175260
-				IL
-
-70-B3-D5   (hex)		COTT Electronics
-D23000-D23FFF     (base 16)		COTT Electronics
-				71-75 Shelton Street
-				London    WC2H 9JQ
-				GB
-
-70-B3-D5   (hex)		VITEC
-5E8000-5E8FFF     (base 16)		VITEC
-				99 rue pierre semard
-				Chatillon    92320
-				FR
-
-70-B3-D5   (hex)		VITEC
-05E000-05EFFF     (base 16)		VITEC
-				99 rue pierre sémard
-				Chatillon  France  92320
-				FR
-
-70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
-957000-957FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-70-B3-D5   (hex)		Beijing Yutian Technology Co., Ltd.
-409000-409FFF     (base 16)		Beijing Yutian Technology Co., Ltd.
-				First floor, Jiangshan Holding Building, No.6 Academy of Agricultural Sciences  West Road, Haidian District
-				Beijing  Beijing  100097
-				CN
-
-70-B3-D5   (hex)		MARINE INSTRUMENTS, S.A.
-931000-931FFF     (base 16)		MARINE INSTRUMENTS, S.A.
-				acabaleiro@marineinstruments.es
-				Nigran  Spain  36350
-				ES
-
-70-B3-D5   (hex)		KSE GmbH
-0F6000-0F6FFF     (base 16)		KSE GmbH
-				Frühlingstraße 31-33
-				Ingolstadt    85055
-				DE
-
-70-B3-D5   (hex)		Edgeware AB
-449000-449FFF     (base 16)		Edgeware AB
-				Master Samuelsgatan 42
-				Stockholm    11157
-				SE
-
-70-B3-D5   (hex)		MRC Systems GmbH
-72A000-72AFFF     (base 16)		MRC Systems GmbH
-				Hans-Bunte-Str. 10
-				Heidelberg    69123
-				DE
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-6D3000-6D3FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach    51465
-				DE
-
-70-B3-D5   (hex)		COMPAR Computer GmbH
-701000-701FFF     (base 16)		COMPAR Computer GmbH
-				Steigweg 24
-				Kitzingen    97318
-				DE
-
-70-B3-D5   (hex)		Cubitech
-91D000-91DFFF     (base 16)		Cubitech
-				4-6 Kiprou str
-				Tavros  Athens  17778
-				GR
-
-70-B3-D5   (hex)		DAVE SRL
-3EA000-3EAFFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-70-B3-D5   (hex)		Hangzhou Leaper Technology Co. Ltd.
-8BF000-8BFFFF     (base 16)		Hangzhou Leaper Technology Co. Ltd.
-				20Th floor, Xinghui Center, 723 Dayuan Road
-				Hangzhou  Zhejiang Province  311300
-				CN
-
-70-B3-D5   (hex)		Oxford Monitoring Solutions Ltd
-102000-102FFF     (base 16)		Oxford Monitoring Solutions Ltd
-				Oakfield Estate
-				Eynsham  Oxford  OX298JG
-				GB
-
-70-B3-D5   (hex)		Heim- & Bürokommunikation Ilmert e.K.
-DF4000-DF4FFF     (base 16)		Heim- & Bürokommunikation Ilmert e.K.
-				Jakobsbrunnenstr. 14
-				Frankfurt am Main    60386
-				DE
-
-70-B3-D5   (hex)		GeoSpectrum Technologies Inc
-3CB000-3CBFFF     (base 16)		GeoSpectrum Technologies Inc
-				10 Akerley Blvd, #19
-				Dartmouth  Nova Scotia  B3B1J4
-				CA
-
-70-B3-D5   (hex)		Morgan Schaffer Inc.
-1F7000-1F7FFF     (base 16)		Morgan Schaffer Inc.
-				8300 rue St-Patrick bureau 150
-				LaSalle  Quebec  H8N 2H1
-				CA
-
-70-B3-D5   (hex)		Beijing PanGu Company
-E54000-E54FFF     (base 16)		Beijing PanGu Company
-				Beijing agricultural college
-				Beijing    100010
-				CN
-
-70-B3-D5   (hex)		Sensative AB
-2C0000-2C0FFF     (base 16)		Sensative AB
-				Mobilvägen 10
-				Lund    22362
-				SE
-
-70-B3-D5   (hex)		Astronomical Research Cameras, Inc.
-24C000-24CFFF     (base 16)		Astronomical Research Cameras, Inc.
-				2247 San Diego Ave #135
-				San Diego  CA  92110
-				US
-
-70-B3-D5   (hex)		Echogear
-571000-571FFF     (base 16)		Echogear
-				12884 Frontrunner Blvd Ste 201
-				Draper  UT  84020
-				US
-
-70-B3-D5   (hex)		WARECUBE,INC
-463000-463FFF     (base 16)		WARECUBE,INC
-				#A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu
-				Suwon-si    16648
-				KR
-
-70-B3-D5   (hex)		Fath Mechatronics
-DC3000-DC3FFF     (base 16)		Fath Mechatronics
-				Hügelmühle 31
-				Spalt  bavaria  91174
-				DE
-
-70-B3-D5   (hex)		VITEC
-0CA000-0CAFFF     (base 16)		VITEC
-				99, rue Pierre Semard
-				CHATILLON    92320
-				FR
-
-70-B3-D5   (hex)		 Eastone Century Technology Co.,Ltd.
-210000-210FFF     (base 16)		 Eastone Century Technology Co.,Ltd.
-				A12 Floor, Information Port, 16 Keyun Road, Tianhe DistrictGuangzhou
-				Guangzhou  GuangDong  510000
-				CN
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-7FE000-7FEFFF     (base 16)		RCH ITALIA SPA 
-				Via Cendon 39
-				SILEA  Treviso  31057
-				IT
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-857000-857FFF     (base 16)		RCH ITALIA SPA 
-				Via Cendon 39
-				SILEA  Treviso  31057
-				IT
-
-70-B3-D5   (hex)		BESO sp. z o.o.
-C00000-C00FFF     (base 16)		BESO sp. z o.o.
-				Mlynska 1a
-				Brzeg Dolny    56-120
-				PL
-
-70-B3-D5   (hex)		Automata Spa
-E14000-E14FFF     (base 16)		Automata Spa
-				Via Carducci 705
-				Caronno Pertusella  Varese  21042
-				IT
-
-70-B3-D5   (hex)		digitrol limited
-477000-477FFF     (base 16)		digitrol limited
-				CORONET WAY, ENTERPRISE PARK
-				SWANSEA  WEST GLAMORGAN  SA6 8RH
-				GB
-
-70-B3-D5   (hex)		INTECH
-E9D000-E9DFFF     (base 16)		INTECH
-				Vavilova st,13/7
-				Moscow    117312
-				RU
-
-70-B3-D5   (hex)		GREATWALL Infotech Co., Ltd.
-946000-946FFF     (base 16)		GREATWALL Infotech Co., Ltd.
-				7F, No. 143, Sec. 3, Cheng Gong Road,, Neihu District
-				Taipei  Taiwan  114
-				TW
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-BD4000-BD4FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		NanoSense
-8ED000-8EDFFF     (base 16)		NanoSense
-				123 rue de Bellevue, RDC
-				Boulogne Billancourt    92100
-				FR
-
-70-B3-D5   (hex)		Tonbo Imaging Pte Ltd
-506000-506FFF     (base 16)		Tonbo Imaging Pte Ltd
-				 77 Science Park Drive,CINTECH III, Singapore Science Park I
-				Singapore    118256
-				SG
-
-70-B3-D5   (hex)		ABB
-080000-080FFF     (base 16)		ABB
-				Fulachstrasse 150
-				Schaffhausen    8200
-				CH
-
-70-B3-D5   (hex)		EYEDEA
-FB9000-FB9FFF     (base 16)		EYEDEA
-				Rm.367, 3Fl., Enterprise Support Hub, 815, Daewangpangyo-ro, Sujeong-gu 
-				Seongnam-si  Gyeonggi-do  13449
-				KR
-
-70-B3-D5   (hex)		Private
-30E000-30EFFF     (base 16)		Private
-
-70-B3-D5   (hex)		KJ3 Elektronik AB
-FB2000-FB2FFF     (base 16)		KJ3 Elektronik AB
-				Fornåsa 110
-				Fornåsa    59033
-				SE
-
-70-B3-D5   (hex)		Orlaco Products B.V.
-620000-620FFF     (base 16)		Orlaco Products B.V.
-				Albert Plesmanstraat 42
-				Barneveld    3772MN
-				NL
-
-70-B3-D5   (hex)		GSI Technology
-2A6000-2A6FFF     (base 16)		GSI Technology
-				Raul Walenberg 18
-				Tel Aviv  IL  6971915
-				IL
-
-70-B3-D5   (hex)		Private
-1D7000-1D7FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Orlaco Products B.V.
-EAE000-EAEFFF     (base 16)		Orlaco Products B.V.
-				Albert Plesmanstraat 42
-				Barneveld    3772MN
-				NL
-
-70-B3-D5   (hex)		iGrid T&D
-B50000-B50FFF     (base 16)		iGrid T&D
-				C. Marie Curie, 8-14
-				Barcelona  Catalonia  08042
-				ES
-
-70-B3-D5   (hex)		Izome
-9BE000-9BEFFF     (base 16)		Izome
-				route de chaudron
-				Montrevault sur Evre  Maine et Loire  49110
-				FR
-
-70-B3-D5   (hex)		Ethical Lighting and Sensor Solutions Limited
-5B6000-5B6FFF     (base 16)		Ethical Lighting and Sensor Solutions Limited
-				Unit 5 Churchill Industrial Estate
-				Cheltenham  Gloucestershire  GL53 7EG
-				GB
-
-70-B3-D5   (hex)		Divelbiss Corporation
-F43000-F43FFF     (base 16)		Divelbiss Corporation
-				9778 Mount Gilead Road
-				Fredericktown  OH  43019
-				US
-
-70-B3-D5   (hex)		TATTILE SRL
-8AA000-8AAFFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		ATION Corporation
-32C000-32CFFF     (base 16)		ATION Corporation
-				6FL, Room no.602, 14, Nonhyeon-ro 95-gil, Gangnam-gu
-				Seoul    06131
-				KR
-
-70-B3-D5   (hex)		MECT SRL
-7C4000-7C4FFF     (base 16)		MECT SRL
-				VIA E. FERMI 57/59
-				ALPIGNANO    10091
-				IT
-
-70-B3-D5   (hex)		Shenzhen Wesion Technology Co., Ltd
-863000-863FFF     (base 16)		Shenzhen Wesion Technology Co., Ltd
-				A511, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
-				Shenzhen  Guangdong  518102
-				CN
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-AB2000-AB2FFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		IMP-Computer Systems
-354000-354FFF     (base 16)		IMP-Computer Systems
-				Volgina 15
-				Belgrade    11000
-				RS
-
-70-B3-D5   (hex)		IMP-TELEKOMUNIKACIJE DOO
-38D000-38DFFF     (base 16)		IMP-TELEKOMUNIKACIJE DOO
-				Volgina 15
-				Belgrade    11060
-				RS
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-803000-803FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		Qntra Technology
-EA1000-EA1FFF     (base 16)		Qntra Technology
-				Velcho Atanasov 47
-				Sofia  Sofia  1505
-				BG
-
-70-B3-D5   (hex)		Heroic Technologies Inc.
-5E7000-5E7FFF     (base 16)		Heroic Technologies Inc.
-				200-155 East Beaver Creek Rd
-				Richmond Hill  Ontario  L4B2N1
-				CA
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-7DA000-7DAFFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		ZAO ZEO
-B60000-B60FFF     (base 16)		ZAO ZEO
-				Khachaturiana 14a
-				Moscow    127562
-				RU
-
-70-B3-D5   (hex)		Agrident GmbH
-EDE000-EDEFFF     (base 16)		Agrident GmbH
-				Steinklippenstrasse 10
-				Barsinghausen  Low Saxonia  30890
-				DE
-
-70-B3-D5   (hex)		MondeF
-1D9000-1D9FFF     (base 16)		MondeF
-				Neutronstraat 7-2
-				Groningen  Groningen  9743AM
-				NL
-
-70-B3-D5   (hex)		Alere Technologies AS
-91C000-91CFFF     (base 16)		Alere Technologies AS
-				Kjelsaasveien 161
-				Oslo  Oslo  0382
-				NO
-
-70-B3-D5   (hex)		BIGHOUSE.,INC.
-B80000-B80FFF     (base 16)		BIGHOUSE.,INC.
-				72-11, Pyeongchangmunwha-ro
-				SEOUL  KOREA  03011
-				KR
-
-70-B3-D5   (hex)		LG Electronics
-4F1000-4F1FFF     (base 16)		LG Electronics
-				Science Park W5, 10, Magokjungang 10-ro, Gangseo-gu
-				Seoul    07796
-				KR
-
-70-B3-D5   (hex)		Kniggendorf + Kögler Security GmbH 
-3DD000-3DDFFF     (base 16)		Kniggendorf + Kögler Security GmbH 
-				Hamburger Straße 4
-				Laatzen    30880
-				DE
-
-70-B3-D5   (hex)		812th AITS
-590000-590FFF     (base 16)		812th AITS
-				300 E Yeagar Blvd
-				Edwards AFB  CA  93524
-				US
-
-70-B3-D5   (hex)		OOO Alyans
-107000-107FFF     (base 16)		OOO Alyans
-				9 maya, 20
-				Krasnoyarsk  Krasnoyarski Krai  660125
-				RU
-
-70-B3-D5   (hex)		ABB S.p.A.
-5A7000-5A7FFF     (base 16)		ABB S.p.A.
-				Via Pisani 16
-				Milano  MI  20124
-				IT
-
-70-B3-D5   (hex)		W. H. Leary Co., Inc.
-1C0000-1C0FFF     (base 16)		W. H. Leary Co., Inc.
-				8440B West 183rd Pl
-				Tinley Park  IL  60487
-				US
-
-70-B3-D5   (hex)		Creative Electronics Ltd
-5EC000-5ECFFF     (base 16)		Creative Electronics Ltd
-				Broomwood, South Park
-				SEVENOAKS  Kent  TN131EL
-				GB
-
-70-B3-D5   (hex)		Plexus
-B2D000-B2DFFF     (base 16)		Plexus
-				5511 Capital Center Drive, Ste 600
-				Raleigh  NC  27606
-				US
-
-70-B3-D5   (hex)		WAVES SYSTEM
-CE4000-CE4FFF     (base 16)		WAVES SYSTEM
-				La Ville en Bois
-				BOUAYE  Loire Atlantique  44830
-				FR
-
-70-B3-D5   (hex)		Ruag Defence France SAS
-598000-598FFF     (base 16)		Ruag Defence France SAS
-				Chemin Jean Thomas
-				Terssac    81150
-				FR
-
-70-B3-D5   (hex)		SwineTech, Inc.
-DC2000-DC2FFF     (base 16)		SwineTech, Inc.
-				230 2nd Street SE, Ste 302
-				Cedar Rapids  IA  52401
-				US
-
-70-B3-D5   (hex)		sohonet ltd
-0CF000-0CFFFF     (base 16)		sohonet ltd
-				3-5, Soho Street
-				London  London  W1D 3DG
-				GB
-
-70-B3-D5   (hex)		Scame Sistemi srl
-F04000-F04FFF     (base 16)		Scame Sistemi srl
-				Via Lombardia 5
-				Arluno  Milan  20010
-				IT
-
-70-B3-D5   (hex)		RF Code
-94B000-94BFFF     (base 16)		RF Code
-				2600 Longhorn Blvd. ste 111
-				Austin  null  78758
-				US
-
-70-B3-D5   (hex)		Audiodo AB
-1FF000-1FFFFF     (base 16)		Audiodo AB
-				Östra Varvsgatan 4
-				Malmö    21114
-				SE
-
-70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
-8CD000-8CDFFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-70-B3-D5   (hex)		TruTeq Wireless (Pty) Ltd
-4AB000-4ABFFF     (base 16)		TruTeq Wireless (Pty) Ltd
-				Ameton House
-				Centurion  Gauteng  0157
-				ZA
-
-70-B3-D5   (hex)		IPG Photonics Corporation
-2E6000-2E6FFF     (base 16)		IPG Photonics Corporation
-				377 Simarano Drive
-				Marlborough  MA  01752
-				US
-
-70-B3-D5   (hex)		Open System Solutions Limited
-FAB000-FABFFF     (base 16)		Open System Solutions Limited
-				Unit 33, Mitchell Point, Ensign Way
-				Southampton  Hampshire  SO31 4RF
-				GB
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-2DE000-2DEFFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Centro de Ingenieria y Desarrollo industrial
-73C000-73CFFF     (base 16)		Centro de Ingenieria y Desarrollo industrial
-				Av. Playa Pie de la cuesta No.702 Desarrollo san pablo
-				Queretaro  Queretaro  76125
-				MX
-
-70-B3-D5   (hex)		Coral Telecom Limited
-C8E000-C8EFFF     (base 16)		Coral Telecom Limited
-				E-2, Sector 63
-				Noida  Uttar Pradesh  201301
-				IN
-
-70-B3-D5   (hex)		Smashtag Ltd
-F6F000-F6FFFF     (base 16)		Smashtag Ltd
-				Unit B6 Beech House, Melbourn Science Park
-				Royston  Hertfordshire  SG8 6HB
-				GB
-
-70-B3-D5   (hex)		David Horn Communications Ltd
-ABB000-ABBFFF     (base 16)		David Horn Communications Ltd
-				Enterprise way,, Bramingham Business park
-				Luton  Bedfordshire  LU3 4BU
-				GB
-
-70-B3-D5   (hex)		CRDMDEVEOPPEMENTS
-B5F000-B5FFFF     (base 16)		CRDMDEVEOPPEMENTS
-				13 Petit chemin de la generale
-				Villenave d'Ornon  Gironde  33140
-				FR
-
-70-B3-D5   (hex)		Tecnint HTE SRL
-ACA000-ACAFFF     (base 16)		Tecnint HTE SRL
-				Via della Tecnica 16/18
-				Osnago  Lecco  23875
-				IT
-
-70-B3-D5   (hex)		Ascenix Corporation
-3A4000-3A4FFF     (base 16)		Ascenix Corporation
-				1120 Benfield Blvd. STE A
-				Millersville  MD  21108
-				US
-
-70-B3-D5   (hex)		NAJIN automation
-6CB000-6CBFFF     (base 16)		NAJIN automation
-				7F Rm.144, Hyoryeong-Ro 304
-				Seocho-Gu  Seoul  06720
-				KR
-
-70-B3-D5   (hex)		Camsat Przemysław Gralak
-FE9000-FE9FFF     (base 16)		Camsat Przemysław Gralak
-				Ogrodowa 2A
-				Solec Kujawski    86-050
-				PL
-
-70-B3-D5   (hex)		TAALEX Systemtechnik GmbH
-553000-553FFF     (base 16)		TAALEX Systemtechnik GmbH
-				Schubertstrasse 27
-				Stadtlohn  NRW  48703
-				DE
-
-70-B3-D5   (hex)		Foerster-Technik GmbH
-9F7000-9F7FFF     (base 16)		Foerster-Technik GmbH
-				Gerwigstraße 25
-				Engen  Baden-Württemberg  78234
-				DE
-
-70-B3-D5   (hex)		wallbe GmbH
-543000-543FFF     (base 16)		wallbe GmbH
-				Paderborner Straße 76
-				Schlangen   NRW  33189
-				DE
-
-70-B3-D5   (hex)		Cardinal Scales Manufacturing Co
-30F000-30FFFF     (base 16)		Cardinal Scales Manufacturing Co
-				203 East Daugherty Street
-				Webb City  MO  64870
-				US
-
-70-B3-D5   (hex)		Vision4ce Ltd
-D01000-D01FFF     (base 16)		Vision4ce Ltd
-				Unit 4, Wokingham Commercial Centre
-				Wokingham  Berkshire  RG41 2RF
-				GB
-
-70-B3-D5   (hex)		Virtual Control Systems Ltd
-EC3000-EC3FFF     (base 16)		Virtual Control Systems Ltd
-				27 Main Street, Overton
-				Morecambe  Lancashire  LA3 3HF
-				GB
-
-70-B3-D5   (hex)		SOREL GmbH Mikroelektronik
-A84000-A84FFF     (base 16)		SOREL GmbH Mikroelektronik
-				REME-Str. 12
-				Wetter    58300
-				DE
-
-70-B3-D5   (hex)		Energy Wall
-990000-990FFF     (base 16)		Energy Wall
-				1002 New Holland Ave
-				Lancaster  PA  17601
-				US
-
-70-B3-D5   (hex)		CAPTEMP, Lda
-49E000-49EFFF     (base 16)		CAPTEMP, Lda
-				Rua São João, s/n - Ladeira das Leais
-				Pombal    3100-346
-				PT
-
-70-B3-D5   (hex)		DogWatch Inc
-302000-302FFF     (base 16)		DogWatch Inc
-				10 Michigan Drive
-				Natick  MA  01760
-				US
-
-70-B3-D5   (hex)		PSL ELEKTRONİK SANAYİ VE TİCARET A.S.
-510000-510FFF     (base 16)		PSL ELEKTRONİK SANAYİ VE TİCARET A.S.
-				Antalya OSB 3. Kısım 25. Cadde No:30
-				ANTALYA    07190
-				TR
-
-70-B3-D5   (hex)		eze System, Inc.
-2F5000-2F5FFF     (base 16)		eze System, Inc.
-				785 Orchard Dr #100
-				Folsom  CA  95630
-				US
-
-70-B3-D5   (hex)		Shengli Financial Software Development
-F22000-F22FFF     (base 16)		Shengli Financial Software Development
-				3766 Nanhuan Road, Binjiang
-				Hangzhou    310051
-				CN
-
-70-B3-D5   (hex)		Gogo BA 
-1E8000-1E8FFF     (base 16)		Gogo BA 
-				105 Edgeview Drive
-				Broomfield  CO  80021
-				US
-
-70-B3-D5   (hex)		Mighty Cube Co., Ltd.
-403000-403FFF     (base 16)		Mighty Cube Co., Ltd.
-				UNIZO Nihonbashihoncho 3-CHome Building 5F 3-8-4 Nihonbashi-honcho
-				Chuo-ku  TOKYO  103-0023
-				JP
-
-70-B3-D5   (hex)		Software Systems Plus
-7DC000-7DCFFF     (base 16)		Software Systems Plus
-				9924 N. Ash Avenue
-				Kansas City  null  64157
-				US
-
-70-B3-D5   (hex)		Digital Way
-437000-437FFF     (base 16)		Digital Way
-				1 Chemin des CHAUX
-				Saint-Etienne  Loire  42000
-				FR
-
-70-B3-D5   (hex)		IoT Routers Limited
-F51000-F51FFF     (base 16)		IoT Routers Limited
-				The Barn, 22 Brackendale
-				Bradford  West Yorkshire  BD10 0SJ
-				GB
-
-70-B3-D5   (hex)		LSC Lighting Systems (Aust) Pty Ltd
-CC2000-CC2FFF     (base 16)		LSC Lighting Systems (Aust) Pty Ltd
-				65-67 Discovery Road
-				Dandenong South  Victoria  3175
-				AU
-
-70-B3-D5   (hex)		APG Cash Drawer, LLC
-C9D000-C9DFFF     (base 16)		APG Cash Drawer, LLC
-				5250 Industrial Blvd NE
-				Minneapolis  MN  55421
-				US
-
-70-B3-D5   (hex)		EIDOS s.r.l.
-890000-890FFF     (base 16)		EIDOS s.r.l.
-				via dell'Industria, 11 Z.I. Fontaneto 
-				CHIERI   Turin  10023
-				IT
-
-70-B3-D5   (hex)		Ahrens & Birner Company GmbH
-6D2000-6D2FFF     (base 16)		Ahrens & Birner Company GmbH
-				Virchowstreet 19/19a
-				Nuremberg    90409
-				DE
-
-70-B3-D5   (hex)		Daatrics LTD
-A5F000-A5FFFF     (base 16)		Daatrics LTD
-				4th Floor, 86-90 Paul Street
-				LONDON    EC2A 4NE
-				GB
-
-70-B3-D5   (hex)		BRS Sistemas Eletrônicos
-F16000-F16FFF     (base 16)		BRS Sistemas Eletrônicos
-				Rua Gomes de Freitas, 491 / 204
-				Porto Alegre  RS  91380-000
-				BR
-
-70-B3-D5   (hex)		Boffins Technologies AB
-E5D000-E5DFFF     (base 16)		Boffins Technologies AB
-				Russgatan 5
-				Malmö    212 35
-				SE
-
-70-B3-D5   (hex)		Liaoyun Information Technology Co., Ltd.
-40E000-40EFFF     (base 16)		Liaoyun Information Technology Co., Ltd.
-				Floor 5, Building 8, No. 690 Bibo Road
-				Shanghai    201203
-				CN
-
-70-B3-D5   (hex)		BT9
-6B8000-6B8FFF     (base 16)		BT9
-				Dolev 33
-				Tefen    2495900
-				IL
-
-70-B3-D5   (hex)		biosilver .co.,ltd
-43F000-43FFFF     (base 16)		biosilver .co.,ltd
-				2-14-4, shinyokohama
-				yokohama  kanagawa  2220033
-				JP
-
-70-B3-D5   (hex)		Hongin., Ltd
-355000-355FFF     (base 16)		Hongin., Ltd
-				160, Daehwa-ro, Daedeok-gu
-				Daejeon  Republic of Korea  34368
-				KR
-
-70-B3-D5   (hex)		Centum Adetel Group
-FD7000-FD7FFF     (base 16)		Centum Adetel Group
-				4 Chemin du ruisseau
-				Ecully    69130
-				FR
-
-70-B3-D5   (hex)		CRUXELL Corp.
-518000-518FFF     (base 16)		CRUXELL Corp.
-				A-405 Migun techno world II,187 techno 2-ro, Yusong-gu
-				Daejeon  Daejeon  34025
-				KR
-
-70-B3-D5   (hex)		Shenzhen Hui Rui Tianyan Technology Co., Ltd.
-FA5000-FA5FFF     (base 16)		Shenzhen Hui Rui Tianyan Technology Co., Ltd.
-				7th Floor, Yuemei Building, Gaoxin South Road, Nanshan District
-				Shenzhen  Guangdong  518000
-				CN
-
-70-B3-D5   (hex)		AEV Broadcast Srl 
-0EA000-0EAFFF     (base 16)		AEV Broadcast Srl 
-				Via Della Tecnica, 33
-				Argelato  BO - VAT IT03167451206     40050
-				IT
-
-70-B3-D5   (hex)		Veo Technologies
-A9C000-A9CFFF     (base 16)		Veo Technologies
-				Skyttegade 7, 3. tv
-				Copenhagen  Denmark  2200
-				DK
-
-70-B3-D5   (hex)		BLUE-SOLUTIONS CANADA INC.
-EE7000-EE7FFF     (base 16)		BLUE-SOLUTIONS CANADA INC.
-				1560 RUE DE COULOMB
-				BOUCHERVILLE  QUEBEC  J4B 7Z7
-				CA
-
-70-B3-D5   (hex)		Vocality international T/A Cubic
-4EA000-4EAFFF     (base 16)		Vocality international T/A Cubic
-				Lydling Barn,Lydling Farm,, Puttenham Lane
-				Godalming  Surrey  gu8 6ap
-				GB
-
-70-B3-D5   (hex)		CDR SRL
-F58000-F58FFF     (base 16)		CDR SRL
-				VIA DEGLI ARTIGIANI 6
-				GINESTRA FIORENTINA  FLORENCE  50055
-				IT
-
-70-B3-D5   (hex)		SilTerra Malaysia Sdn. Bhd.
-31B000-31BFFF     (base 16)		SilTerra Malaysia Sdn. Bhd.
-				Lot 8, Phase II, Kulim Hi-Tech Park
-				KULIM  KEDAH  09000
-				MY
-
-70-B3-D5   (hex)		Dr. Zinngrebe GmbH
-42E000-42EFFF     (base 16)		Dr. Zinngrebe GmbH
-				Schillerstraße 1/15
-				Ulm  Baden-Württemberg  89077
-				DE
-
-70-B3-D5   (hex)		Lumiplan Duhamel
-E94000-E94FFF     (base 16)		Lumiplan Duhamel
-				2 rue de l'industrie
-				Domène  Isère  38420
-				FR
-
-70-B3-D5   (hex)		Newshine
-A64000-A64FFF     (base 16)		Newshine
-				Pingcheng Rd
-				Shanghai  Shanghai  201800
-				CN
-
-70-B3-D5   (hex)		OS42 UG (haftungsbeschraenkt)
-9D1000-9D1FFF     (base 16)		OS42 UG (haftungsbeschraenkt)
-				Wachtelstrasse 81
-				Hamburg    22305
-				DE
-
-70-B3-D5   (hex)		csintech
-DB6000-DB6FFF     (base 16)		csintech
-				234, Oksan-ro
-				Bucheon-si  Gyeonggi-do  14521
-				KR
-
-70-B3-D5   (hex)		Aldridge Electrical Industries
-848000-848FFF     (base 16)		Aldridge Electrical Industries
-				10-16 Sir Joseph Banks Drive 
-				Sydney  NSW  2231
-				AU
-
-70-B3-D5   (hex)		alfamation spa
-675000-675FFF     (base 16)		alfamation spa
-				via cadore 21
-				lissone  mb  20851
-				IT
-
-70-B3-D5   (hex)		Incusense
-7F5000-7F5FFF     (base 16)		Incusense
-				424 NE 4th st
-				McMinnville  OR  97128
-				US
-
-70-B3-D5   (hex)		Onosokki Co.,Ltd
-8C6000-8C6FFF     (base 16)		Onosokki Co.,Ltd
-				3-9-3 shinyokohama,kohoku
-				yokohama    222-8507
-				JP
-
-70-B3-D5   (hex)		LEGENDAIRE TECHNOLOGY CO., LTD.
-02F000-02FFFF     (base 16)		LEGENDAIRE TECHNOLOGY CO., LTD.
-				2F,No.278,Fu Shun Rd.
-				Taichung City    40764
-				TW
-
-70-B3-D5   (hex)		Lexi Devices, Inc.
-AC4000-AC4FFF     (base 16)		Lexi Devices, Inc.
-				2342 Shattuck Ave, #260
-				Berkeley    94704
-				US
-
-70-B3-D5   (hex)		Fidalia Networks Inc
-CC3000-CC3FFF     (base 16)		Fidalia Networks Inc
-				1 Port Street East
-				Mississauga  Ontario  L5G4N1
-				CA
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-5F9000-5F9FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Dia-Stron Limited
-EA8000-EA8FFF     (base 16)		Dia-Stron Limited
-				Unit 9 Focus Way
-				Andover  Hampshire  SP10 5NY
-				GB
-
-70-B3-D5   (hex)		wallbe GmbH
-07B000-07BFFF     (base 16)		wallbe GmbH
-				Paderborner Straße 76
-				Schlangen   NRW  33189
-				DE
-
-70-B3-D5   (hex)		Hanwell Technology Co., Ltd.
-32D000-32DFFF     (base 16)		Hanwell Technology Co., Ltd.
-				3F., No. 41, Dongxing Rd., Xinyi District.
-				Taipei    11070
-				TW
-
-70-B3-D5   (hex)		Amfitech ApS
-123000-123FFF     (base 16)		Amfitech ApS
-				Platzvej 2
-				Vejle  Syddanmark  7100
-				DK
-
-70-B3-D5   (hex)		Procon Electronics Pty Ltd
-8EB000-8EBFFF     (base 16)		Procon Electronics Pty Ltd
-				P O Box 164
-				Seven Hills  NSW  1730
-				AU
-
-70-B3-D5   (hex)		TASK SISTEMAS DE COMPUTACAO LTDA
-961000-961FFF     (base 16)		TASK SISTEMAS DE COMPUTACAO LTDA
-				Rua 2 / 112 Jardim Itatiaia 
-				Itatiaia  Rio de Janeiro  27580-000
-				BR
-
-70-B3-D5   (hex)		AooGee Controls Co., LTD.
-1CC000-1CCFFF     (base 16)		AooGee Controls Co., LTD.
-				Siming District office building 14, Fu Lian
-				Xiamen  Fujian  361000
-				CN
-
-70-B3-D5   (hex)		FRAKO Kondensatoren und Anlagenbau GmbH
-014000-014FFF     (base 16)		FRAKO Kondensatoren und Anlagenbau GmbH
-				Tscheulinstr. 21a
-				Teningen    79331
-				DE
-
-70-B3-D5   (hex)		Akse srl
-09A000-09AFFF     (base 16)		Akse srl
-				Via Aldo Moro, 39
-				Reggio Emilia  Italy  42124
-				IT
-
-70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
-0C9000-0C9FFF     (base 16)		LINEAGE POWER PVT LTD.,
-				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
-				BANGALORE  KARNATAKA  560074
-				IN
-
-70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
-B0B000-B0BFFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
-				Sector Foresta 43, local 26
-				Tres Cantos  Madrid  28760
-				ES
-
-70-B3-D5   (hex)		Ellenex Pty Ltd
-CD0000-CD0FFF     (base 16)		Ellenex Pty Ltd
-				91 Tope Street
-				South Melbourne  VIC  3205
-				AU
-
-70-B3-D5   (hex)		Blue Access Inc
-C66000-C66FFF     (base 16)		Blue Access Inc
-				P.O. Box 
-				Erie  CO  80516
-				US
-
-70-B3-D5   (hex)		provedo
-A54000-A54FFF     (base 16)		provedo
-				Friedrich-Ebert-Straße, 63
-				Leipzig    04109
-				DE
-
-70-B3-D5   (hex)		Okolab Srl
-BF9000-BF9FFF     (base 16)		Okolab Srl
-				Via G. di Prisco n. 152
-				Ottaviano  NA  80044
-				IT
-
-70-B3-D5   (hex)		TEX COMPUTER SRL 
-5FA000-5FAFFF     (base 16)		TEX COMPUTER SRL 
-				VIA MERCADANTE 35
-				CATTOLICA   RIMINI   47841
-				IT
-
-70-B3-D5   (hex)		EN ElectronicNetwork Hamburg GmbH
-015000-015FFF     (base 16)		EN ElectronicNetwork Hamburg GmbH
-				Meiendorfer Strasse 205
-				Hamburg    22145
-				DE
-
-70-B3-D5   (hex)		Convergent Design
-1F8000-1F8FFF     (base 16)		Convergent Design
-				4525 Northpark Drive
-				Colorado Springs  CO  80918
-				US
-
-70-B3-D5   (hex)		FRS GmbH & Co. KG
-F8A000-F8AFFF     (base 16)		FRS GmbH & Co. KG
-				Weingartenstr. 1-3
-				Dortmund  NW  44263
-				DE
-
-70-B3-D5   (hex)		MSB Elektronik und Gerätebau GmbH
-E9E000-E9EFFF     (base 16)		MSB Elektronik und Gerätebau GmbH
-				Hofwiesenstr. 23
-				Crailsheim    74564
-				DE
-
-70-B3-D5   (hex)		DiTEST Fahrzeugdiagnose GmbH
-109000-109FFF     (base 16)		DiTEST Fahrzeugdiagnose GmbH
-				ALTE POSTSTRASSE 152
-				A-8020  GRAZ  STEIERMARK
-				AT
-
-70-B3-D5   (hex)		Merlin CSI
-C41000-C41FFF     (base 16)		Merlin CSI
-				10755 Scripps Poway Pkwy # 524
-				San Diego  CA  92131
-				US
-
-70-B3-D5   (hex)		CHRONOMEDIA
-21F000-21FFFF     (base 16)		CHRONOMEDIA
-				#508, 1130, Beoman-ro, Geumcheon-gu
-				Seoul    08595
-				KR
-
-70-B3-D5   (hex)		SHANGHAI IRISIAN OPTRONICS TECHNOLOGY CO.,LTD.
-2D2000-2D2FFF     (base 16)		SHANGHAI IRISIAN OPTRONICS TECHNOLOGY CO.,LTD.
-				8F, NO.800, Huanhu NO.2 Road (W), Pudong New District, Shanghai 201306, China
-				Shanghai  Shanghai   201306
-				CN
-
-70-B3-D5   (hex)		Naval Group
-382000-382FFF     (base 16)		Naval Group
-				40-42 Rue Du Docteur Finlay
-				PARIS CEDEX 15    75732
-				FR
-
-70-B3-D5   (hex)		EIFFAGE ENERGIE ELECTRONIQUE
-037000-037FFF     (base 16)		EIFFAGE ENERGIE ELECTRONIQUE
-				D937
-				VERQUIN    62131
-				FR
-
-70-B3-D5   (hex)		Telefrank GmbH
-A82000-A82FFF     (base 16)		Telefrank GmbH
-				Am Wildengrund 1
-				Altenambach  TH  98553
-				DE
-
-70-B3-D5   (hex)		Orange Tree Technologies Ltd
-EF4000-EF4FFF     (base 16)		Orange Tree Technologies Ltd
-				173 Curie Avenue, Harwell Oxford
-				Didcot  Oxfordshire  OX11 0QG
-				GB
-
-70-B3-D5   (hex)		Yukilab
-7D6000-7D6FFF     (base 16)		Yukilab
-				1-7-3 Sekiya-Matsunami, Chuo
-				Niigata  Niigata  951-8161
-				JP
-
-70-B3-D5   (hex)		SYS TEC electronic GmbH
-BAF000-BAFFFF     (base 16)		SYS TEC electronic GmbH
-				Am Windrad 2
-				Heinsdorfergrund     D-08468
-				DE
-
-70-B3-D5   (hex)		Technica Engineering GmbH
-4C0000-4C0FFF     (base 16)		Technica Engineering GmbH
-				Leopoldstraße 236
-				Munich    80807
-				DE
-
-70-B3-D5   (hex)		SiFive
-92F000-92FFFF     (base 16)		SiFive
-				1875 S Grant St
-				San Mateo  CA  94403
-				US
-
-70-B3-D5   (hex)		KnowRoaming
-D6A000-D6AFFF     (base 16)		KnowRoaming
-				90 Eglinton Ave. E
-				Toronto  Ontario - ON  M4P2Y3
-				CA
-
-70-B3-D5   (hex)		Pietro Fiorentini
-A76000-A76FFF     (base 16)		Pietro Fiorentini
-				Via Enrico Fermi
-				Arcugnano    36057
-				IT
-
-70-B3-D5   (hex)		OnYield Inc Ltd
-B74000-B74FFF     (base 16)		OnYield Inc Ltd
-				814 Houston Centre, 63 Mody Road
-				Kowloon    TST East
-				HK
-
-70-B3-D5   (hex)		Hangzhou Woosiyuan Communication Co.,Ltd.
-1F4000-1F4FFF     (base 16)		Hangzhou Woosiyuan Communication Co.,Ltd.
-				13 Dongyuexincun Xihu district
-				Hangzhou  Zhejiang  310023
-				CN
-
-70-B3-D5   (hex)		ZAO ZEO
-B43000-B43FFF     (base 16)		ZAO ZEO
-				Khachaturiana 14a
-				Moscow    127562
-				RU
-
-70-B3-D5   (hex)		Roxford
-651000-651FFF     (base 16)		Roxford
-				PO Box 231851
-				Encinitas  CA  92023-1851
-				US
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-8D9000-8D9FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Granite River Labs Inc
-749000-749FFF     (base 16)		Granite River Labs Inc
-				3500 Thomas Rd # A,
-				 Santa Clara    95054
-				US
-
-70-B3-D5   (hex)		OÜ ELIKO Tehnoloogia Arenduskeskus
-D4A000-D4AFFF     (base 16)		OÜ ELIKO Tehnoloogia Arenduskeskus
-				Mäealuse 2/1
-				Tallinn  Harju  12618
-				EE
-
-70-B3-D5   (hex)		Shandong Hospot IOT Technology Co.,Ltd.
-576000-576FFF     (base 16)		Shandong Hospot IOT Technology Co.,Ltd.
-				No.96 Road Fuyang
-				Rizhao  Shandong  276800
-				CN
-
-70-B3-D5   (hex)		Yaham Optoelectronics Co., Ltd
-2FE000-2FEFFF     (base 16)		Yaham Optoelectronics Co., Ltd
-				Bldg A & Bldg D, Yongwei Industrial Park,#118 Yongfu Rd, Qiaotou Community, Fuyong,Bao'an District,Shenzhen
-				Shenzhen  Bao'an District/GuangDong  518103
-				CN
-
-70-B3-D5   (hex)		FlowNet LLC
-526000-526FFF     (base 16)		FlowNet LLC
-				580 Lake Ave
-				Lancaster  NY  14086
-				US
-
-70-B3-D5   (hex)		HZHY TECHNOLOGY
-4A6000-4A6FFF     (base 16)		HZHY TECHNOLOGY
-				The 2th floor,Longzeyuan Multi-use
-				beijing    102208
-				CN
-
-70-B3-D5   (hex)		D.E.M. SPA
-C1C000-C1CFFF     (base 16)		D.E.M. SPA
-				Z.I. VILLANOVA 20
-				Longarone (BL)    32013
-				IT
-
-70-B3-D5   (hex)		Globalcom Engineering SPA
-A0D000-A0DFFF     (base 16)		Globalcom Engineering SPA
-				Via Volta 39
-				CARDANO AL CAMPO  VA  21010
-				IT
-
-70-B3-D5   (hex)		FOSHAN VOHOM
-2BF000-2BFFFF     (base 16)		FOSHAN VOHOM
-				Unit 402, 4/F ENT A3 Bldg, Hantian Science and Technology City, No. 17 Shenhai RD.
-				Foshan  Guangdong  528200
-				CN
-
-70-B3-D5   (hex)		Hills Health Solutions
-78A000-78AFFF     (base 16)		Hills Health Solutions
-				Unit 1, Builing F, 3-29 Birnie Ave
-				Lidcombe  New South Wales  2141
-				AU
-
-70-B3-D5   (hex)		Triax A/S
-941000-941FFF     (base 16)		Triax A/S
-				Bjornkaervej 3
-				Hornsyld  Denmark  8783
-				DK
-
-70-B3-D5   (hex)		Metrum Sweden AB
-F98000-F98FFF     (base 16)		Metrum Sweden AB
-				Anders Personsgatan 16
-				Goteborg    41664
-				SE
-
-70-B3-D5   (hex)		Quantum Opus, LLC
-602000-602FFF     (base 16)		Quantum Opus, LLC
-				45211 Helm St
-				Plymouth  MI  48170
-				US
-
-70-B3-D5   (hex)		MatchX GmbH
-1CB000-1CBFFF     (base 16)		MatchX GmbH
-				Adalbert Str.8
-				Berlin    10999
-				DE
-
-70-B3-D5   (hex)		Avant Technologies, Inc
-410000-410FFF     (base 16)		Avant Technologies, Inc
-				Road 156 Caguas West Ind. Park bldg 39
-				Caguas  PR  00726
-				US
-
-70-B3-D5   (hex)		SHINWA INDUSTRIES, INC.
-F87000-F87FFF     (base 16)		SHINWA INDUSTRIES, INC.
-				Daisan Nishi-Aoyama Bldg. 6F 1-8-1 Shibuya
-				Shibuya-ku  Tokyo  150-0002
-				JP
-
-70-B3-D5   (hex)		HEITEC AG
-228000-228FFF     (base 16)		HEITEC AG
-				Dr.-Otto-Leich-Str. 16
-				Eckental  Bavaria  90542
-				DE
-
-70-B3-D5   (hex)		Divigraph (Pty) LTD
-A86000-A86FFF     (base 16)		Divigraph (Pty) LTD
-				 Postnet Suite 72, Private Bag X7
-				Chempet    7442
-				ZA
-
-70-B3-D5   (hex)		Impulse Automation
-7A3000-7A3FFF     (base 16)		Impulse Automation
-				Obuhovskoy Oborony 120-B
-				Saint Petersburg  Saint Petersburg  192012
-				RU
-
-70-B3-D5   (hex)		MonsoonRF, Inc.
-0F3000-0F3FFF     (base 16)		MonsoonRF, Inc.
-				7740 Garvey Ave, Unit D
-				Rosemead  CA  91770
-				US
-
-70-B3-D5   (hex)		Planewave Instruments
-CB4000-CB4FFF     (base 16)		Planewave Instruments
-				1819 Kona Dr.
-				Compton  CA  90220
-				US
-
-70-B3-D5   (hex)		NESA SRL
-BFA000-BFAFFF     (base 16)		NESA SRL
-				Via Sartori, 6/8
-				Vidor  Treviso  31020
-				IT
-
-70-B3-D5   (hex)		ONDEMAND LABORATORY Co., Ltd.
-069000-069FFF     (base 16)		ONDEMAND LABORATORY Co., Ltd.
-				Daiba 449 Space 369 Building 2F
-				Mishima  Shizuoka  411-0803
-				JP
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-08A000-08AFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Particle sizing systems
-670000-670FFF     (base 16)		Particle sizing systems
-				8203 Kristel Cir
-				New Port Richey  FL  34652
-				US
-
-70-B3-D5   (hex)		FLUDIA
-4A0000-4A0FFF     (base 16)		FLUDIA
-				4T rue honoré d'estienne d'orves
-				Suresnes    92150
-				FR
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-E86000-E86FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		RELISTE Ges.m.b.H.
-1B9000-1B9FFF     (base 16)		RELISTE Ges.m.b.H.
-				Enzersdorfer Strasse 8-10
-				Brunn am Gebirge    2345
-				AT
-
-70-B3-D5   (hex)		Hagenuk KMT Kabelmesstechnik GmbH
-132000-132FFF     (base 16)		Hagenuk KMT Kabelmesstechnik GmbH
-				Röderaue 41
-				Radeburg  Sachsen  01471
-				DE
-
-70-B3-D5   (hex)		Jiangsu Jinheng  Information Technology Co.,Ltd.
-492000-492FFF     (base 16)		Jiangsu Jinheng  Information Technology Co.,Ltd.
-				LuHe District,XieJiaDian,Ninggang Road No.81
-				Nanjing  Jiangsu  210035
-				CN
-
-70-B3-D5   (hex)		MAMAC Systems, Inc.
-BA2000-BA2FFF     (base 16)		MAMAC Systems, Inc.
-				8189 Century Blvd.
-				Chanhassen  null  55317-8002
-				US
-
-70-B3-D5   (hex)		Ofil USA
-9E2000-9E2FFF     (base 16)		Ofil USA
-				5415 Sugarloaf Parkway Suite 1102 A&B
-				Lawrenceville  GA  30043
-				US
-
-70-B3-D5   (hex)		iTelaSoft Pvt Ltd
-6F0000-6F0FFF     (base 16)		iTelaSoft Pvt Ltd
-				No. 02, Balapokuna Road
-				Colombo 06    00600
-				LK
-
-70-B3-D5   (hex)		CE LINK LIMITED
-547000-547FFF     (base 16)		CE LINK LIMITED
-				2/F, Building G, Licheng Tech. Ind. Zone
-				Shenzhen  Guangdong  518104
-				CN
-
-70-B3-D5   (hex)		Integritech
-BB4000-BB4FFF     (base 16)		Integritech
-				6434 E. Main Street, Unit 103
-				Reynoldsburg  OH  43068
-				US
-
-70-B3-D5   (hex)		I.E. Sevko A.V.
-8F7000-8F7FFF     (base 16)		I.E. Sevko A.V.
-				7-1-97, Polyarnaya st.
-				Moscow    127081
-				RU
-
-70-B3-D5   (hex)		Systems Engineering Arts Pty Ltd
-3CF000-3CFFFF     (base 16)		Systems Engineering Arts Pty Ltd
-				56 Benbow St
-				Yarraville  Vic  3013
-				AU
-
-70-B3-D5   (hex)		Embedded Arts Co., Ltd.
-0C6000-0C6FFF     (base 16)		Embedded Arts Co., Ltd.
-				1-1-6 Ryousoutuuun Bldg. 2F
-				Kisarazu-shi  Chiba  292-0067
-				JP
-
-70-B3-D5   (hex)		DAVE SRL
-EF7000-EF7FFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-70-B3-D5   (hex)		Movicom LLC
-5DB000-5DBFFF     (base 16)		Movicom LLC
-				Nauchny proezd, 20
-				Moscow    117246
-				RU
-
-70-B3-D5   (hex)		Toughdog Security Systems
-A32000-A32FFF     (base 16)		Toughdog Security Systems
-				1317 E Hackberry Ave
-				McAllen  TX  78501
-				US
-
-70-B3-D5   (hex)		Stanet Co.,Ltd
-841000-841FFF     (base 16)		Stanet Co.,Ltd
-				6F., No.67, Guangfu S. Rd.
-				Taipei    105
-				TW
-
-70-B3-D5   (hex)		FreeFlight Systems
-5F6000-5F6FFF     (base 16)		FreeFlight Systems
-				8150 Springwood Drive, Suite 100
-				Irving  TX  75063
-				US
-
-70-B3-D5   (hex)		APG Cash Drawer, LLC
-BB3000-BB3FFF     (base 16)		APG Cash Drawer, LLC
-				5250 Industrial Blvd NE
-				Minneapolis  MN  55421
-				US
-
-70-B3-D5   (hex)		Silixa Ltd
-FAE000-FAEFFF     (base 16)		Silixa Ltd
-				230 Centennial Park
-				Elstree  Hertfordshire  WD6 3SN
-				GB
-
-70-B3-D5   (hex)		ENTEC Electric & Electronic CO., LTD
-07E000-07EFFF     (base 16)		ENTEC Electric & Electronic CO., LTD
-				78-2 Buncheon-ri
-				Hwaseong-city  Gyungki-do  445-894
-				KR
-
-70-B3-D5   (hex)		Turbo Technologies Corporation
-3AF000-3AFFFF     (base 16)		Turbo Technologies Corporation
-				Rm701,Building C2,Land of Innovation City of Future,No.999.Gaoxin Avenue,East Lake Hi-Tech Zone
-				Wuhan  Hubei  430075
-				CN
-
-70-B3-D5   (hex)		Ensys srl
-BBF000-BBFFFF     (base 16)		Ensys srl
-				Via Zamenhof, 817
-				Vicenza  Vicenza  36100
-				IT
-
-70-B3-D5   (hex)		EFG CZ spol. s r.o.
-897000-897FFF     (base 16)		EFG CZ spol. s r.o.
-				Na Jarově 4
-				Praha 3  Czech republic  13000
-				CZ
-
-70-B3-D5   (hex)		Husty M.Styczen J.Hupert Sp.J.
-086000-086FFF     (base 16)		Husty M.Styczen J.Hupert Sp.J.
-				Rzepakowa 5e
-				Krakow  malopolska  31-989
-				PL
-
-70-B3-D5   (hex)		Controlrad
-CD3000-CD3FFF     (base 16)		Controlrad
-				20(49), HaTaas st,
-				Kfar-Saba,   Israel  4442520
-				IL
-
-70-B3-D5   (hex)		Globalcom Engineering SPA
-284000-284FFF     (base 16)		Globalcom Engineering SPA
-				Via Volta 39
-				CARDANO AL CAMPO  VA  21010
-				IT
-
-70-B3-D5   (hex)		Javasparrow Inc.
-991000-991FFF     (base 16)		Javasparrow Inc.
-				303,1-31-17,Koudou
-				Adachi  Tokyo  120013
-				JP
-
-70-B3-D5   (hex)		KM OptoElektronik GmbH
-9D7000-9D7FFF     (base 16)		KM OptoElektronik GmbH
-				Mollenbachstraße 14 
-				Leonberg  Württemberg  71229
-				DE
-
-70-B3-D5   (hex)		viZaar industrial imaging AG
-4E5000-4E5FFF     (base 16)		viZaar industrial imaging AG
-				Hechinger Strasse 152
-				Albstadt  Baden-Württemberg  72461
-				DE
-
-70-B3-D5   (hex)		ic-automation GmbH
-D44000-D44FFF     (base 16)		ic-automation GmbH
-				Alexander-Diehl-Straße, 2A
-				Mainz  Deutschland  55130
-				DE
-
-70-B3-D5   (hex)		WOOJIN Inc
-203000-203FFF     (base 16)		WOOJIN Inc
-				Gyeonggi
-				Hwaseong  Dongbu-daero 970beon-gil 110  18481
-				KR
-
-70-B3-D5   (hex)		Neoptix Inc.
-EC7000-EC7FFF     (base 16)		Neoptix Inc.
-				1415 Frank-Carrel
-				Quebec    G1N4N7
-				CA
-
-70-B3-D5   (hex)		Newtouch Electronics (Shanghai) Co.,Ltd.
-DFA000-DFAFFF     (base 16)		Newtouch Electronics (Shanghai) Co.,Ltd.
-				No.418, 4F, Building 1, Lujiazui Software Park No.98,  Lane 91, E Shan Rd
-				ShangHai    200127
-				CN
-
-70-B3-D5   (hex)		Tecnint HTE SRL
-809000-809FFF     (base 16)		Tecnint HTE SRL
-				Via della Tecnica 16/18
-				Osnago  Lecco  23875
-				IT
-
-70-B3-D5   (hex)		Virtuosys Ltd
-BEA000-BEAFFF     (base 16)		Virtuosys Ltd
-				The Tramshed Offices, Beehive Yard
-				Bath  Somerset  BA1 5BB
-				GB
-
-70-B3-D5   (hex)		WeVo Tech
-273000-273FFF     (base 16)		WeVo Tech
-				2985 Drew Road
-				Mississauga   Ontario  L4T0A4
-				CA
-
-70-B3-D5   (hex)		Sicon srl
-A35000-A35FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		AML
-6E7000-6E7FFF     (base 16)		AML
-				2190 Regal Parkway
-				Euless  TX  76040
-				US
-
-70-B3-D5   (hex)		Kranze Technology Solutions
-C1D000-C1DFFF     (base 16)		Kranze Technology Solutions
-				742 Pinecrest Dr
-				Prospect Heights  IL  60070
-				US
-
-70-B3-D5   (hex)		LYNX Technik AG
-5D8000-5D8FFF     (base 16)		LYNX Technik AG
-				Brunnenweg 3
-				Weiterstadt  Hessen  64331
-				DE
-
-70-B3-D5   (hex)		Risk Expert sarl
-34E000-34EFFF     (base 16)		Risk Expert sarl
-				63, Rue de Hollerich
-				Luxembourg    1741
-				LU
-
-70-B3-D5   (hex)		Kazan Networks Corporation
-768000-768FFF     (base 16)		Kazan Networks Corporation
-				660 Auburn Folsom Rd, Suite 204
-				Auburn  CA  95722
-				US
-
-70-B3-D5   (hex)		TELEPLATFORMS
-5FB000-5FBFFF     (base 16)		TELEPLATFORMS
-				Polbina st., 3/1
-				Moscow    109388
-				RU
-
-70-B3-D5   (hex)		SENSO2ME 
-631000-631FFF     (base 16)		SENSO2ME 
-				Zandhoef  16
-				KASTERLEE  België  2460
-				BE
-
-70-B3-D5   (hex)		T+A elektroakustik GmbH & Co.KG
-69F000-69FFFF     (base 16)		T+A elektroakustik GmbH & Co.KG
-				Planckstr. 9-11
-				Herford    32052
-				DE
-
-70-B3-D5   (hex)		NIPPON SEIKI CO., LTD.
-18E000-18EFFF     (base 16)		NIPPON SEIKI CO., LTD.
-				2-8 Higashi-Takami 2-Chome
-				NAGAOKA  NIIGATA  940-0006
-				JP
-
-70-B3-D5   (hex)		SEASON DESIGN TECHNOLOGY
-AF0000-AF0FFF     (base 16)		SEASON DESIGN TECHNOLOGY
-				FLOOR 4, WARDS EXCHANGE, 199 ECCLESALL ROAD
-				SHEFFIELD  SOUTH YORKSHIRE  S11 8HW
-				GB
-
-70-B3-D5   (hex)		Advanced Devices SpA
-445000-445FFF     (base 16)		Advanced Devices SpA
-				via Spagna 240-242
-				Rende  Cosenza  87036
-				IT
-
-70-B3-D5   (hex)		SPEECH TECHNOLOGY CENTER LIMITED
-74D000-74DFFF     (base 16)		SPEECH TECHNOLOGY CENTER LIMITED
-				4 Krasutskogo str.
-				Saint Petersburg    196084
-				RU
-
-70-B3-D5   (hex)		Iradimed
-E57000-E57FFF     (base 16)		Iradimed
-				1025 Willa Springs Dr.
-				Winter Springs  FL  32708-____
-				US
-
-70-B3-D5   (hex)		em-tec GmbH
-DD1000-DD1FFF     (base 16)		em-tec GmbH
-				Lerchenberg 20
-				Finning  Bavaria  86923
-				DE
-
-70-B3-D5   (hex)		Clover Electronics Technology Co., Ltd.
-08D000-08DFFF     (base 16)		Clover Electronics Technology Co., Ltd.
-				505 room, No.6-18 building, XinHe road, Shajing town, Baoan district
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-70-B3-D5   (hex)		Przemyslowy Instytut Automatyki i Pomiarow
-ED1000-ED1FFF     (base 16)		Przemyslowy Instytut Automatyki i Pomiarow
-				Al. Jerozolimskie 202
-				Warszawa  Mazowieckie  02-486
-				PL
-
-70-B3-D5   (hex)		HRT
-D3C000-D3CFFF     (base 16)		HRT
-				via Pio La Torre 13
-				Campogalliano    41011
-				IT
-
-70-B3-D5   (hex)		 Beijing Zhongyi Yue Tai Technology Co., Ltd
-2B0000-2B0FFF     (base 16)		 Beijing Zhongyi Yue Tai Technology Co., Ltd
-				Building 809, Xiaoying Road
-				Beijing   Chaoyang District  100101
-				CN
-
-70-B3-D5   (hex)		Spark Lasers
-2E2000-2E2FFF     (base 16)		Spark Lasers
-				IOGS - Bâtiment IOA - Rue François Mitterrand
-				Talence    33400
-				FR
-
-70-B3-D5   (hex)		OOO Microlink-Svyaz
-129000-129FFF     (base 16)		OOO Microlink-Svyaz
-				1st veshnjakovsky proezd 7
-				moscow   moscow   109456
-				RU
-
-70-B3-D5   (hex)		Lookman Electroplast Industries Ltd
-38B000-38BFFF     (base 16)		Lookman Electroplast Industries Ltd
-				Old No : 9, New No : 15, II Street Etn., III Main Road , CIT Nagar, Nandanam
-				Chennai  Tamilnadu  600035
-				IN
-
-70-B3-D5   (hex)		ACEMIS FRANCE
-64C000-64CFFF     (base 16)		ACEMIS FRANCE
-				36 RUE ARISTIDE BERGES
-				CUGNAUX    31270
-				FR
-
-70-B3-D5   (hex)		Fischer Block, Inc.
-80B000-80BFFF     (base 16)		Fischer Block, Inc.
-				21 S High St
-				West Chester  PA  19382
-				US
-
-70-B3-D5   (hex)		Akribis Systems
-175000-175FFF     (base 16)		Akribis Systems
-				Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5
-				Singapore  Singapore  569876
-				SG
-
-70-B3-D5   (hex)		TATA POWER SED
-60A000-60AFFF     (base 16)		TATA POWER SED
-				42-43 Electronics City
-				Bengaluru  Karnataka  560100
-				IN
-
-70-B3-D5   (hex)		Zetechtics Ltd
-888000-888FFF     (base 16)		Zetechtics Ltd
-				Main Street Amotherby
-				Malton    YO176TA
-				GB
-
-70-B3-D5   (hex)		CONTINENT, Ltd
-9B2000-9B2FFF     (base 16)		CONTINENT, Ltd
-				Liflandskaya
-				St.-Petersburg    190020
-				RU
-
-70-B3-D5   (hex)		InnoSenT
-332000-332FFF     (base 16)		InnoSenT
-				Am Roedertor 30  
-				Donnersdorf  Bavaria  97499
-				DE
-
-70-B3-D5   (hex)		Arnouse Digital Devices Corp
-831000-831FFF     (base 16)		Arnouse Digital Devices Corp
-				1983 Marcus Ave, Suite 104
-				Lake Success  NY  11042
-				US
-
-70-B3-D5   (hex)		HANGZHOU HUALAN MICROELECTRONIQUE CO.,LTD
-FEF000-FEFFFF     (base 16)		HANGZHOU HUALAN MICROELECTRONIQUE CO.,LTD
-				22F,BUILDING-1 OF HUA RUI CENTER,FIRST JIANSHE ROAD,XIAOSHAN DISTRICT
-				HANGZHOU  ZHEJIANG  311200
-				CN
-
-70-B3-D5   (hex)		TELL Software Hungaria Kft.
-276000-276FFF     (base 16)		TELL Software Hungaria Kft.
-				Vagohid u. 2.
-				Debrecen    4034
-				HU
-
-70-B3-D5   (hex)		Wart-Elektronik
-AD2000-AD2FFF     (base 16)		Wart-Elektronik
-				Nickenicher Strasse 24
-				Andernach    56626
-				DE
-
-70-B3-D5   (hex)		Procon automatic systems GmbH
-549000-549FFF     (base 16)		Procon automatic systems GmbH
-				Bettwiesenweg 18
-				Sellnrod    35325
-				DE
-
-70-B3-D5   (hex)		Norbit ODM AS
-F45000-F45FFF     (base 16)		Norbit ODM AS
-				Stiklestadveien 1
-				Trondheim    7041
-				NO
-
-70-B3-D5   (hex)		Inphi Corporation
-370000-370FFF     (base 16)		Inphi Corporation
-				112 S. Lakeview Canyon Rd., Suite 100
-				Westlake Village  CA  91362
-				US
-
-70-B3-D5   (hex)		Gencoa Ltd
-17A000-17AFFF     (base 16)		Gencoa Ltd
-				4 De Havilland Drive
-				Liverpool  Merseyside  L24 8RN
-				GB
-
-70-B3-D5   (hex)		Gogo BA 
-C60000-C60FFF     (base 16)		Gogo BA 
-				303 S. Technology Ct
-				Broomfield    80021
-				US
-
-70-B3-D5   (hex)		Data Strategy Limited
-FF1000-FF1FFF     (base 16)		Data Strategy Limited
-				259 Shirland Road, Maida Vale
-				London  Please Select...  W9 3JW
-				GB
-
-70-B3-D5   (hex)		Quantum Detectors
-2C2000-2C2FFF     (base 16)		Quantum Detectors
-				R104, RAL, Fermi Avenue
-				Harwell Oxford  Oxfordshire  OX11 0QX
-				GB
-
-70-B3-D5   (hex)		CRDE
-572000-572FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		Stiebel Eltron GmbH
-C45000-C45FFF     (base 16)		Stiebel Eltron GmbH
-				Dr.-Stiebel-Strasse 33
-				Holzminden    37603
-				DE
-
-70-B3-D5   (hex)		Satcube AB
-F77000-F77FFF     (base 16)		Satcube AB
-				Anders Carlssons gata 7
-				Gothenburg    41755
-				SE
-
-70-B3-D5   (hex)		Vtron Pty Ltd
-B2B000-B2BFFF     (base 16)		Vtron Pty Ltd
-				Unit 2, 62 Township Drive West
-				West Burleigh  Queensland  4219
-				AU
-
-70-B3-D5   (hex)		Hexagon Metrology SAS
-5E0000-5E0FFF     (base 16)		Hexagon Metrology SAS
-				2 rue François Arago
-				Montoire sur le Loir  Loir et Cher  41800
-				FR
-
-70-B3-D5   (hex)		Macnica Technology
-E8E000-E8EFFF     (base 16)		Macnica Technology
-				380 Stevens Avenue
-				Solana Beach  CA  92075
-				US
-
-70-B3-D5   (hex)		MeQ Inc.
-F0D000-F0DFFF     (base 16)		MeQ Inc.
-				6028 Dimm Way
-				Richmond  CA  94805
-				US
-
-70-B3-D5   (hex)		Welltec Corp.
-115000-115FFF     (base 16)		Welltec Corp.
-				1075-93 Seongseok-dong, Ilsandong-gu
-				Goyang-si  Gyeonggi-do  10251
-				KR
-
-70-B3-D5   (hex)		Rugged Science
-773000-773FFF     (base 16)		Rugged Science
-				2511 Walmer Ave
-				Norfolk  VA  23513
-				US
-
-70-B3-D5   (hex)		Bresslergroup
-288000-288FFF     (base 16)		Bresslergroup
-				1216 Arch Street, Floor 7
-				Philadelphia  PA  19107
-				US
-
-70-B3-D5   (hex)		Combilent
-E04000-E04FFF     (base 16)		Combilent
-				Gydevang 21D
-				Alleroed    3450
-				DK
-
-70-B3-D5   (hex)		Beijing One City Science & Technology Co., LTD
-0F1000-0F1FFF     (base 16)		Beijing One City Science & Technology Co., LTD
-				Room 901, Building #6, FENGCHUANG KeJi Park
-				YIZHUANG economic development zone, District Daxing  Beijing  100176
-				CN
-
-70-B3-D5   (hex)		SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
-A30000-A30FFF     (base 16)		SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
-				Longhua New District Qing Xiang Road, Bao Neng Technology Park
-				SHEN ZHEN  GUANG DONG  518109
-				CN
-
-70-B3-D5   (hex)		Savari Inc
-040000-040FFF     (base 16)		Savari Inc
-				2005 De la cruz blvd, st 111,
-				santa clara  CA  95050
-				US
-
-70-B3-D5   (hex)		Mr.Loop
-53B000-53BFFF     (base 16)		Mr.Loop
-				7F.-6, No.237, Sec. 1,Datong Rd. Xizhi Dist.
-				New Taipei City    22161
-				TW
-
-70-B3-D5   (hex)		CRDE
-D40000-D40FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		HCH. Kündig & CIE. AG
-753000-753FFF     (base 16)		HCH. Kündig & CIE. AG
-				Joweid Zentrum 11
-				Rüti ZH    8630
-				CH
-
-70-B3-D5   (hex)		Practical Software Studio LLC
-0BC000-0BCFFF     (base 16)		Practical Software Studio LLC
-				1 Northfield Plaza, Suite 300
-				Northfield  IL  60093
-				US
-
-70-B3-D5   (hex)		Pullnet Technology,S.L.
-AA4000-AA4FFF     (base 16)		Pullnet Technology,S.L.
-				Parc Tecnologic BCNord
-				Barcelona  Catalonia  08042
-				ES
-
-70-B3-D5   (hex)		Mini Solution Co. Ltd.
-C68000-C68FFF     (base 16)		Mini Solution Co. Ltd.
-				2-98-85, Yarimizu
-				Hachiouji  Toyko  1920375
-				JP
-
-70-B3-D5   (hex)		Fläkt Woods AB
-2E5000-2E5FFF     (base 16)		Fläkt Woods AB
-				Fläktgatan 1
-				Jönköping  Foreign state  55184
-				SE
-
-70-B3-D5   (hex)		Sicon srl
-D37000-D37FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		THEMA
-CAE000-CAEFFF     (base 16)		THEMA
-				le praesidium , 350 av du club hippique
-				aix en provence  france  13090
-				FR
-
-70-B3-D5   (hex)		Woods Hole Oceanographic Institution
-15C000-15CFFF     (base 16)		Woods Hole Oceanographic Institution
-				92 Water Street MS#10
-				Woods Hole  MA  02543
-				US
-
-70-B3-D5   (hex)		HUNTER LIBERTY CORPORATION
-FC2000-FC2FFF     (base 16)		HUNTER LIBERTY CORPORATION
-				85 GOLF CREST DRIVE, SUITE 301
-				ACWORTH  GA  30101
-				US
-
-70-B3-D5   (hex)		Brechbuehler AG
-0D9000-0D9FFF     (base 16)		Brechbuehler AG
-				Steinwiesenstrasse 3
-				Schlieren    8952
-				CH
-
-70-B3-D5   (hex)		BuddyGuard GmbH
-36F000-36FFFF     (base 16)		BuddyGuard GmbH
-				Dircksenstr. 40
-				Berlin  Berlin  10178
-				DE
-
-70-B3-D5   (hex)		Edgeware AB
-6EA000-6EAFFF     (base 16)		Edgeware AB
-				Master Samuelsgatan 42
-				Stockholm    11157
-				SE
-
-70-B3-D5   (hex)		SinTau SrL
-0E3000-0E3FFF     (base 16)		SinTau SrL
-				Viale Nizza 11
-				L'Aquila    67100
-				IT
-
-70-B3-D5   (hex)		Lanmark Controls Inc.
-39E000-39EFFF     (base 16)		Lanmark Controls Inc.
-				125 Nagog Park
-				Acton  MA  01720
-				US
-
-70-B3-D5   (hex)		Epdm Pty Ltd
-F3B000-F3BFFF     (base 16)		Epdm Pty Ltd
-				2 / 1013 Centre Road
-				Bentleigh East  Victoria  3165
-				AU
-
-70-B3-D5   (hex)		Solace Systems Inc.
-0A3000-0A3FFF     (base 16)		Solace Systems Inc.
-				535 Legget Drive,
-				Kanata  Ontario  K2K3B8
-				CA
-
-70-B3-D5   (hex)		Standard Backhaul Communications
-75A000-75AFFF     (base 16)		Standard Backhaul Communications
-				
-				    
-				
-
-70-B3-D5   (hex)		Bolide Technology Group, Inc.
-241000-241FFF     (base 16)		Bolide Technology Group, Inc.
-				468 S. San Dimas Ave.,
-				San Dimas  CA  91773
-				US
-
-70-B3-D5   (hex)		Sentry360
-D84000-D84FFF     (base 16)		Sentry360
-				23807 W Andrew Road
-				Plainfield  IL  60585
-				US
-
-70-B3-D5   (hex)		Cosylab d.d.
-635000-635FFF     (base 16)		Cosylab d.d.
-				Teslova ulica 30
-				Ljubljana    1000
-				SI
-
-70-B3-D5   (hex)		Slot3 GmbH
-443000-443FFF     (base 16)		Slot3 GmbH
-				Am Brambusch 22
-				Luenen  Germany  44536
-				DE
-
-70-B3-D5   (hex)		Globalcom Engineering SPA
-352000-352FFF     (base 16)		Globalcom Engineering SPA
-				Via Volta 39
-				CARDANO AL CAMPO  VA  21010
-				IT
-
-70-B3-D5   (hex)		Tecnologix s.r.l.
-1E4000-1E4FFF     (base 16)		Tecnologix s.r.l.
-				Via dei Biancospini 6
-				Milano  Mi  20146
-				IT
-
-70-B3-D5   (hex)		Opgal Optronic Industries
-2AD000-2ADFFF     (base 16)		Opgal Optronic Industries
-				Hanapach 21
-				Carmiel    2161401
-				IL
-
-70-B3-D5   (hex)		Supracon AG
-5D3000-5D3FFF     (base 16)		Supracon AG
-				An der Lehmgrube 11
-				Jena  Thüringen  07751
-				DE
-
-70-B3-D5   (hex)		Alere Technologies AS
-A4C000-A4CFFF     (base 16)		Alere Technologies AS
-				Kjelsaasveien 161
-				Oslo  Oslo  0382
-				NO
-
-70-B3-D5   (hex)		Proterra
-2C3000-2C3FFF     (base 16)		Proterra
-				1 Whitlee Ct
-				Greenville  SC  29607
-				US
-
-70-B3-D5   (hex)		Synics AG
-BD5000-BD5FFF     (base 16)		Synics AG
-				Querstr. 8
-				Regensdorf    8105
-				CH
-
-70-B3-D5   (hex)		Agilack
-4CE000-4CEFFF     (base 16)		Agilack
-				12 avenue Jules Verne
-				Saint Sebastien sur loire    44230
-				FR
-
-70-B3-D5   (hex)		Meridian Technologies Inc
-924000-924FFF     (base 16)		Meridian Technologies Inc
-				700 Elmont Rd
-				Elmont  NY  11003
-				US
-
-70-B3-D5   (hex)		Paul Scherrer Institut (PSI)
-3B7000-3B7FFF     (base 16)		Paul Scherrer Institut (PSI)
-				WHGA/U130
-				Villigen-PSI  Aargau  CH-5232
-				CH
-
-70-B3-D5   (hex)		CMI, Inc.
-4EF000-4EFFFF     (base 16)		CMI, Inc.
-				316 East 9th Street
-				Owensboro  KY  42303
-				US
-
-70-B3-D5   (hex)		Beijing DamingWuzhou Science&Technology Co., Ltd.
-A36000-A36FFF     (base 16)		Beijing DamingWuzhou Science&Technology Co., Ltd.
-				8001,8 Floor,Building C,KanjianBaoshen Square,Haidian District
-				Beijing    100192
-				CN
-
-70-B3-D5   (hex)		MCQ TECH GmbH
-A58000-A58FFF     (base 16)		MCQ TECH GmbH
-				Ottilienweg 9
-				Blumberg  BW  78176
-				DE
-
-70-B3-D5   (hex)		Density Inc.
-785000-785FFF     (base 16)		Density Inc.
-				235 HARRISON ST, Mail Drop 24
-				Syracuse  NY  13202
-				US
-
-70-B3-D5   (hex)		IROC AB
-39B000-39BFFF     (base 16)		IROC AB
-				Bärtas Väg 15
-				Kode  Västra Götaland  442 98
-				
-
-70-B3-D5   (hex)		ProtoPixel SL
-2DB000-2DBFFF     (base 16)		ProtoPixel SL
-				C/Pujades 77-79, 5e 4a
-				Barcelona  Barcelona  08005
-				ES
-
-70-B3-D5   (hex)		Trinity College Dublin
-99E000-99EFFF     (base 16)		Trinity College Dublin
-				Dunlop Oriel House, Fenian Street
-				Dublin 2    2
-				IE
-
-70-B3-D5   (hex)		comtime GmbH
-1E9000-1E9FFF     (base 16)		comtime GmbH
-				Gutenbergring 22
-				Norderstedt    22848
-				DE
-
-70-B3-D5   (hex)		HAXE SYSTEME
-49A000-49AFFF     (base 16)		HAXE SYSTEME
-				1, rue de Lorraine
-				La Chapelle sur Erdre  Pays de la Loire  44240
-				FR
-
-70-B3-D5   (hex)		BirdDog Australia
-C7E000-C7EFFF     (base 16)		BirdDog Australia
-				Unit 1, 8 Theobald St
-				THORNBURY  VIC  3071
-				AU
-
-70-B3-D5   (hex)		ATOM GIKEN Co.,Ltd.
-AC5000-AC5FFF     (base 16)		ATOM GIKEN Co.,Ltd.
-				92-2 KATASE
-				FUJISAWA  KANAGAWA  251-0032
-				JP
-
-70-B3-D5   (hex)		ADE Technology Inc.
-F30000-F30FFF     (base 16)		ADE Technology Inc.
-				15F. No.90, Xingde Rd., Sanchong Dist.
-				New Taipei City    24158
-				TW
-
-70-B3-D5   (hex)		Husty M.Styczen J.Hupert Sp.J.
-54C000-54CFFF     (base 16)		Husty M.Styczen J.Hupert Sp.J.
-				Rzepakowa 5e
-				Krakow  malopolska  31-989
-				PL
-
-70-B3-D5   (hex)		George Wilson Industries Ltd
-48A000-48AFFF     (base 16)		George Wilson Industries Ltd
-				Barlow Road, Aldermans Green Industrial Estate
-				Coventry  West Midlands  CV2 2LD
-				GB
-
-70-B3-D5   (hex)		Get SAT
-F95000-F95FFF     (base 16)		Get SAT
-				Hamada 12
-				Rehovot  Select From Dropdown  7670316
-				IL
-
-70-B3-D5   (hex)		Apantac LLC
-CD5000-CD5FFF     (base 16)		Apantac LLC
-				7556 SW Bridgeport Road
-				Durham  OR  97224
-				US
-
-70-B3-D5   (hex)		Checkbill Co,Ltd.
-947000-947FFF     (base 16)		Checkbill Co,Ltd.
-				3306~7-ho, Beonyeonggwan, Chungnam Techno Park, 136, Jiksan-ro, Jiksan-eup, Seobuk-gu
-				Cheonan-si  Chungcheongnam-do   31035
-				KR
-
-70-B3-D5   (hex)		DWEWOONG ELECTRIC Co., Ltd.
-BC2000-BC2FFF     (base 16)		DWEWOONG ELECTRIC Co., Ltd.
-				10, Hwanggeum-ro 127beon-gil Yangchon-eup
-				Gimpo-si  Gyeonggi-do  10048
-				KR
-
-70-B3-D5   (hex)		MG s.r.l.
-405000-405FFF     (base 16)		MG s.r.l.
-				via Monte Bianco, 1
-				Solbiate Olona  VA  21058
-				IT
-
-70-B3-D5   (hex)		ZAO ZEO
-083000-083FFF     (base 16)		ZAO ZEO
-				Khachaturiana 14a
-				Moscow    127562
-				RU
-
-70-B3-D5   (hex)		Infosocket Co., Ltd.
-C0A000-C0AFFF     (base 16)		Infosocket Co., Ltd.
-				1-6-1-303
-				Musashino  Tokyo  180-0005
-				JP
-
-70-B3-D5   (hex)		HolidayCoro
-009000-009FFF     (base 16)		HolidayCoro
-				27719 Nelson St
-				Spring  TX  77373
-				US
-
-70-B3-D5   (hex)		EFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA
-1BB000-1BBFFF     (base 16)		EFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA
-				Dietla 93/6
-				Kraków    31-031
-				PL
-
-70-B3-D5   (hex)		Merten GmbH&CoKG
-550000-550FFF     (base 16)		Merten GmbH&CoKG
-				Fritz-Kotz-Str. 8
-				Wiehl  NRW  51674
-				DE
-
-70-B3-D5   (hex)		AndFun Co.,Ltd.
-BE8000-BE8FFF     (base 16)		AndFun Co.,Ltd.
-				5972-2 Ohkusa
-				Komaki  Aichi  4850802
-				JP
-
-70-B3-D5   (hex)		Technica Engineering GmbH
-28D000-28DFFF     (base 16)		Technica Engineering GmbH
-				Leopoldstraße 236
-				Munich    80807
-				DE
-
-70-B3-D5   (hex)		DAVE SRL
-142000-142FFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-70-B3-D5   (hex)		LDA audio video profesional S.L.
-1C8000-1C8FFF     (base 16)		LDA audio video profesional S.L.
-				C/ Severo Ochoa, 31
-				Malaga  Malaga  29590
-				ES
-
-70-B3-D5   (hex)		Sensobox GmbH
-C15000-C15FFF     (base 16)		Sensobox GmbH
-				Eschenstrasse 24
-				6005  Lucerne  6005
-				CH
-
-70-B3-D5   (hex)		Stesalit Systems Ltd
-67B000-67BFFF     (base 16)		Stesalit Systems Ltd
-				Stesalit Towers, Block GP, Sector 5, Salt Lake Electronics Complex, 
-				Kolkata  West Bengal  700091
-				IN
-
-70-B3-D5   (hex)		midBit Technologies, LLC
-EBD000-EBDFFF     (base 16)		midBit Technologies, LLC
-				153 Homestead Ln
-				Romney  WV  26757
-				US
-
-70-B3-D5   (hex)		OMESH CITY GROUP
-A8E000-A8EFFF     (base 16)		OMESH CITY GROUP
-				202,A building,Xu Zhuang Software Park,Xuan Wu District
-				Nangjing  Jiangsu  240042
-				CN
-
-70-B3-D5   (hex)		Gamber Johnson-LLC
-178000-178FFF     (base 16)		Gamber Johnson-LLC
-				3001 Borham Ave
-				Stevens Point  WI  54481
-				US
-
-70-B3-D5   (hex)		Molekule
-A5C000-A5CFFF     (base 16)		Molekule
-				2507 Bryant St.
-				San Francisco  CA  94110
-				US
-
-70-B3-D5   (hex)		Seiwa Giken
-48F000-48FFFF     (base 16)		Seiwa Giken
-				4-4-23 Hotarugaike-higashimachi
-				Toyonaka-City  Osaka  560-0032
-				JP
-
-70-B3-D5   (hex)		AE Van de Vliet BVBA
-C4F000-C4FFFF     (base 16)		AE Van de Vliet BVBA
-				INDUSTRIEDIJK 14
-				TURNHOUT  ANTWERPEN  2300
-				BE
-
-70-B3-D5   (hex)		Acacia Research
-BF5000-BF5FFF     (base 16)		Acacia Research
-				5 Butler Drive
-				HENDON  South Australia  5014
-				AU
-
-70-B3-D5   (hex)		ALPHA　Corporation
-D67000-D67FFF     (base 16)		ALPHA　Corporation
-				1-6-8 Fukuura, 
-				Yokohama City, Kanazawa-ku,   Kanagawa  236-0004
-				JP
-
-70-B3-D5   (hex)		ATHREYA INC
-85D000-85DFFF     (base 16)		ATHREYA INC
-				261 Conlins Road
-				TORONTO  ON  M1C1C4
-				CA
-
-70-B3-D5   (hex)		SYSDEV Srl
-C0E000-C0EFFF     (base 16)		SYSDEV Srl
-				via Lamarmora 16
-				Torino  TO  10128
-				IT
-
-70-B3-D5   (hex)		LECO Corporation
-599000-599FFF     (base 16)		LECO Corporation
-				3000 Lakeview Ave.
-				St. Joseph  null  49085
-				US
-
-70-B3-D5   (hex)		SiS Technology
-E71000-E71FFF     (base 16)		SiS Technology
-				Business Park Varna, building B1, floor 4
-				Varna    9000
-				BG
-
-70-B3-D5   (hex)		Excel Medical Electronics LLC
-7DD000-7DDFFF     (base 16)		Excel Medical Electronics LLC
-				801 Maplewood Dr.
-				Jupiter  null  33458
-				US
-
-70-B3-D5   (hex)		ChongQing JianTao Technology Co., Ltd.
-486000-486FFF     (base 16)		ChongQing JianTao Technology Co., Ltd.
-				10th, Building NO.C1, District E, Dawn industrial area, CunTan, JiangBei District, ChongQing City. China
-				ChongQing  ChongQing  400025
-				CN
-
-70-B3-D5   (hex)		FoodALYT GmbH
-D91000-D91FFF     (base 16)		FoodALYT GmbH
-				Robert-Hooke-Str.8
-				Bremen  Bremen  28359
-				DE
-
-70-B3-D5   (hex)		Exicom Technologies fze
-3AE000-3AEFFF     (base 16)		Exicom Technologies fze
-				Technology park , P.O.box 327792
-				Ras Al Khaimah FTZ  Ras Al Khaimah   327792
-				AE
-
-70-B3-D5   (hex)		TESEC Corporation
-461000-461FFF     (base 16)		TESEC Corporation
-				391-1, Kamikitadai 3-Chome
-				Higasiyamato  Tokyo  2070023
-				JP
-
-70-B3-D5   (hex)		AERONAUTICAL & GENERAL INSTRUMENTS LTD.
-FDE000-FDEFFF     (base 16)		AERONAUTICAL & GENERAL INSTRUMENTS LTD.
-				FLEETS POINT
-				POOLE  DORSET  BH12 3SS
-				GB
-
-70-B3-D5   (hex)		oxynet Solutions
-3D5000-3D5FFF     (base 16)		oxynet Solutions
-				G04 A block, Ground Floor, King Space Meadows, Thanisandra Main Road
-				Bangalore  Karnataka  560077
-				IN
-
-70-B3-D5   (hex)		CAB S.R.L.
-B11000-B11FFF     (base 16)		CAB S.R.L.
-				VIA CARDUCCI, 41/E
-				SAN GIULIANO MILANESE  MILANO  20098
-				IT
-
-70-B3-D5   (hex)		IDEAL INDUSTRIES Ltd t/a Casella
-A91000-A91FFF     (base 16)		IDEAL INDUSTRIES Ltd t/a Casella
-				Regent House, Wolseley Road
-				Kempston, Bedford  Bedfordshire  MK427JY
-				GB
-
-70-B3-D5   (hex)		BeatCraft, Inc.
-AE5000-AE5FFF     (base 16)		BeatCraft, Inc.
-				5F, S.HARUYAMA BLDG, Kinshi2-13-6 
-				Sumida  Tokyo  1300013
-				JP
-
-70-B3-D5   (hex)		Zumbach Electronic AG
-7B4000-7B4FFF     (base 16)		Zumbach Electronic AG
-				Hauptstrasse 93
-				Orpund  Bern  2552
-				CH
-
-70-B3-D5   (hex)		Shanghai EICT Global Service Co., Ltd
-FC9000-FC9FFF     (base 16)		Shanghai EICT Global Service Co., Ltd
-				Room 1105 NO.376 ZhaojiaBang Road, XuHui District
-				Shanghai    200031
-				CN
-
-70-B3-D5   (hex)		Telairity Semiconductor
-1A3000-1A3FFF     (base 16)		Telairity Semiconductor
-				3375 Scott Blvd.
-				Santa Clara  CA  95054
-				US
-
-70-B3-D5   (hex)		Weltek Technologies Co. Ltd.
-A4F000-A4FFFF     (base 16)		Weltek Technologies Co. Ltd.
-				Flat A-B, 12/F, Block 1, Wah Fung Ind. Centre, 33-39 Kwai Fung Crescent, Kwai Chung, N.T.
-				HK    852
-				HK
-
-70-B3-D5   (hex)		CCII Systems (Pty) Ltd
-BE6000-BE6FFF     (base 16)		CCII Systems (Pty) Ltd
-				Unit 3, 67 Rosmead Avenue
-				Cape Town  Cape  7708
-				ZA
-
-70-B3-D5   (hex)		Neurio Technology Inc.
-750000-750FFF     (base 16)		Neurio Technology Inc.
-				43 West Hastings Street
-				Vancouver  BC  V6B 1G4
-				CA
-
-70-B3-D5   (hex)		Rohde&Schwarz Topex SA
-243000-243FFF     (base 16)		Rohde&Schwarz Topex SA
-				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
-				Bucuresti  Romania  014142
-				RO
-
-70-B3-D5   (hex)		Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
-33E000-33EFFF     (base 16)		Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
-				Unit C&D, No.201 WuXiang, Export Processing Zone A No.200Suhong Road SIP
-				Suzhou  JiangSu  215021
-				CN
-
-70-B3-D5   (hex)		Eleven Engineering Incorporated
-6E6000-6E6FFF     (base 16)		Eleven Engineering Incorporated
-				10150 - 100 Street, Suite 800
-				Edmonton  Canada, Alberta  T5J 0P6
-				CA
-
-70-B3-D5   (hex)		CL International 
-ABA000-ABAFFF     (base 16)		CL International 
-				12th Floor, Woolim Lions Valley 1 Bldg 27, Dunchon-daero 457beongil, Jungwon-gu
-				Seongnam   Kyeonggi-do   462-806
-				KR
-
-70-B3-D5   (hex)		Emka Technologies
-AF1000-AF1FFF     (base 16)		Emka Technologies
-				59 bd General Martial Valin
-				PARIS    75015
-				FR
-
-70-B3-D5   (hex)		Siemens AG
-C87000-C87FFF     (base 16)		Siemens AG
-				MO TPE RE PI
-				Erlangen  Bavaria  91052
-				DE
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-18B000-18BFFF     (base 16)		Aplex Technology Inc.
-				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-70-B3-D5   (hex)		Stara S/A Indústria de Implementos Agrícolas
-13E000-13EFFF     (base 16)		Stara S/A Indústria de Implementos Agrícolas
-				Avenida Stara 519
-				Não-Me-Toque  Rio Grande do Sul  99470000
-				BR
-
-70-B3-D5   (hex)		BlueMark Innovations BV
-325000-325FFF     (base 16)		BlueMark Innovations BV
-				Hengelosestraat 517
-				Enschede    7521 AG
-				NL
-
-70-B3-D5   (hex)		Östling Marking Systems GmbH
-A96000-A96FFF     (base 16)		Östling Marking Systems GmbH
-				Broßhauserstr. 27
-				Solingen    42697
-				DE
-
-70-B3-D5   (hex)		Meta-chrom Co. Ltd.
-68D000-68DFFF     (base 16)		Meta-chrom Co. Ltd.
-				Baumana St.,100
-				Yoshkar-Ola  Select State  424000
-				RU
-
-70-B3-D5   (hex)		xm
-840000-840FFF     (base 16)		xm
-				50, Cheomdangwagi-ro 208beon-gil, Buk-gu, Gwangju, Korea
-				Gwangju    61012
-				KR
-
-70-B3-D5   (hex)		MART NETWORK SOLUTIONS LTD
-94F000-94FFFF     (base 16)		MART NETWORK SOLUTIONS LTD
-				ABBEY HOUSE, 450 BATH ROAD
-				LONGFORD  MIDDLESEX  UB70EB
-				GB
-
-70-B3-D5   (hex)		TextNinja Co.
-283000-283FFF     (base 16)		TextNinja Co.
-				222 W Merchandise Mart Plaza, Suite 1212
-				Chicago  IL  60654
-				US
-
-70-B3-D5   (hex)		Micro Trend Automation Co., LTD
-50E000-50EFFF     (base 16)		Micro Trend Automation Co., LTD
-				3F, No 78 Cheng Kung Road Sec1
-				Taipei  Nan Kang  11570
-				TW
-
-70-B3-D5   (hex)		Explorer Inc.
-E85000-E85FFF     (base 16)		Explorer Inc.
-				379-22 kikyou-cho
-				Hakodate  Hokkaido  041-0801
-				JP
-
-70-B3-D5   (hex)		Sicon srl
-30C000-30CFFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Innoflight, Inc.
-BB7000-BB7FFF     (base 16)		Innoflight, Inc.
-				9985 Pacific Heights Blvd, Suite 250
-				San Diego  CA  92121
-				US
-
-70-B3-D5   (hex)		CRDE
-D63000-D63FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		Discover Video
-440000-440FFF     (base 16)		Discover Video
-				Bld 3
-				Wallingford  CT  06492
-				US
-
-70-B3-D5   (hex)		Moog Rekofa  GmbH
-4D5000-4D5FFF     (base 16)		Moog Rekofa  GmbH
-				Bergstrasse 41
-				Antweiler  Rhineland-Palatinate  53533
-				DE
-
-70-B3-D5   (hex)		Electronic Equipment Company Pvt. Ltd.
-640000-640FFF     (base 16)		Electronic Equipment Company Pvt. Ltd.
-				146/2, Old China Bazar Street,
-				Kolkata  West Bengal  700001
-				IN
-
-70-B3-D5   (hex)		Zebra Elektronik A.S.
-259000-259FFF     (base 16)		Zebra Elektronik A.S.
-				Kayisdagi Cd. Baris Sk. No:2 K:5 Kucukbakkalkoy
-				Istanbul  NA  34750
-				TR
-
-70-B3-D5   (hex)		Tanaka Information System, LLC.
-60F000-60FFFF     (base 16)		Tanaka Information System, LLC.
-				3-17-18 Higashi-Nakano,
-				Nakano-ku  Tokyo  1640003
-				JP
-
-00-1B-C5   (hex)		Onnet Technologies and Innovations LLC
-087000-087FFF     (base 16)		Onnet Technologies and Innovations LLC
-				1,  Opp GIBCA CAMP
-				AJMAN  AJMAN  52141
-				AE
-
-70-B3-D5   (hex)		Jireh Industries Ltd.
-974000-974FFF     (base 16)		Jireh Industries Ltd.
-				53158 Range Road 224
-				Ardrossan  Alberta  T8E2K4
-				CA
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-4B7000-4B7FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		P4Q ELECTRONICS, S.L.
-3C5000-3C5FFF     (base 16)		P4Q ELECTRONICS, S.L.
-				CTRA. BILBAO BALMASEDA, KM9
-				ALONSOTEGUI  VIZCAYA  48810
-				ES
-
-70-B3-D5   (hex)		Alligator Communications
-9CB000-9CBFFF     (base 16)		Alligator Communications
-				317 Brokaw Road
-				Santa Clara  CA  95050
-				US
-
-70-B3-D5   (hex)		Preston Industries dba PolyScience
-9EB000-9EBFFF     (base 16)		Preston Industries dba PolyScience
-				6600 W. Touhy Ave
-				Niles  IL  60714-4588
-				US
-
-70-B3-D5   (hex)		Depro Électronique inc
-7E2000-7E2FFF     (base 16)		Depro Électronique inc
-				755 Cure-Boivin local 22
-				Boisbriand  Quebec  J7G2J2
-				CA
-
-70-B3-D5   (hex)		Szabo Software & Engineering UK Ltd
-F08000-F08FFF     (base 16)		Szabo Software & Engineering UK Ltd
-				43 Angrave Rd
-				East Leake  Leicester  LE12 6JA
-				GB
-
-70-B3-D5   (hex)		STC Rainbow Ltd.
-1A8000-1A8FFF     (base 16)		STC Rainbow Ltd.
-				5-y Donskoy pr-d, 15с2
-				Moscow    119334
-				RU
-
-70-B3-D5   (hex)		Cubro Acronet GesmbH
-01A000-01AFFF     (base 16)		Cubro Acronet GesmbH
-				Geiselberstraße 17 / 6 Floor
-				Vienna  Vienna  1110
-				AT
-
-70-B3-D5   (hex)		VNG Corporation
-8D8000-8D8FFF     (base 16)		VNG Corporation
-				322B Lý Thường Kiệt, P.14
-				Hồ Chí Minh    70000
-				VN
-
-70-B3-D5   (hex)		Lumiplan Duhamel
-070000-070FFF     (base 16)		Lumiplan Duhamel
-				2 rue de l'industrie
-				Domène  Isère  38420
-				FR
-
-70-B3-D5   (hex)		The Things Network Foundation
-7ED000-7EDFFF     (base 16)		The Things Network Foundation
-				Herengracht 182
-				Amsterdam  NH  1016BR
-				NL
-
-70-B3-D5   (hex)		Sensapex Oy
-45D000-45DFFF     (base 16)		Sensapex Oy
-				Teknologiatie 13
-				Oulu    90590
-				FI
-
-70-B3-D5   (hex)		Ensura Solutions BV
-CBE000-CBEFFF     (base 16)		Ensura Solutions BV
-				Hofstraat 4
-				Ulft  Gelderland  7071 KB
-				NL
-
-70-B3-D5   (hex)		GSP Sprachtechnologie GmbH
-120000-120FFF     (base 16)		GSP Sprachtechnologie GmbH
-				Teltowkanalstraße 1
-				Berlin    12247
-				DE
-
-70-B3-D5   (hex)		Coester Automação Ltda
-975000-975FFF     (base 16)		Coester Automação Ltda
-				Rua Jacy Porto, 1157
-				Sao Leopoldo  RS  93025-120
-				BR
-
-70-B3-D5   (hex)		Robert Bosch, LLC
-652000-652FFF     (base 16)		Robert Bosch, LLC
-				256 Raceway Drive, Suite 4
-				Mooresville  NC  28117
-				US
-
-70-B3-D5   (hex)		Windar Photonics
-5FD000-5FDFFF     (base 16)		Windar Photonics
-				Helgeshoj Alle 16
-				Taastrup  Copenhagen  2630
-				DK
-
-70-B3-D5   (hex)		CT Company
-5A3000-5A3FFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-70-B3-D5   (hex)		Cathwell AS
-BA1000-BA1FFF     (base 16)		Cathwell AS
-				Kongshavnsgate 18
-				Langesund  Telemark  N-3970
-				NO
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-BFE000-BFEFFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		KST technology
-F7B000-F7BFFF     (base 16)		KST technology
-				164-1, KST b/d., Bangi-dong, songpa-gu
-				SEOUL  N/A  138-050
-				KR
-
-70-B3-D5   (hex)		SIEMENS AS
-CCA000-CCAFFF     (base 16)		SIEMENS AS
-				Bratsbergveien 5
-				Trondheim    7037
-				NO
-
-70-B3-D5   (hex)		NPF Modem, LLC
-8B2000-8B2FFF     (base 16)		NPF Modem, LLC
-				Kolomyazhskiy prosp. 27A
-				Saint-Petersburg    197341
-				RU
-
-70-B3-D5   (hex)		SOCIEDAD IBERICA DE CONSTRUCCIONES ELECTRICAS, S.A. (SICE)
-EEE000-EEEFFF     (base 16)		SOCIEDAD IBERICA DE CONSTRUCCIONES ELECTRICAS, S.A. (SICE)
-				C/Sepulveda, 6
-				ALCOBENDAS  MADRID  28108
-				ES
-
-70-B3-D5   (hex)		Project Service S.a.s.
-781000-781FFF     (base 16)		Project Service S.a.s.
-				Via Paderno 31/C
-				Seriate  Bergamo  24068
-				IT
-
-70-B3-D5   (hex)		UPM Technology, Inc
-75C000-75CFFF     (base 16)		UPM Technology, Inc
-				3000 NW Stucki pl ste #100
-				Hillsboro OR  OR  97124
-				US
-
-70-B3-D5   (hex)		Groupeer Technologies
-054000-054FFF     (base 16)		Groupeer Technologies
-				17 avenue Georges 5
-				Paris  Ile-de-France  75008
-				FR
-
-70-B3-D5   (hex)		Seal Shield, LLC
-33B000-33BFFF     (base 16)		Seal Shield, LLC
-				2000 N. Alafaya Trail Suite 350
-				Jacksonville  FL  32826
-				US
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-CA8000-CA8FFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		TATTILE SRL
-323000-323FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		TATTILE SRL
-8F3000-8F3FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		PBSI Group Limited
-609000-609FFF     (base 16)		PBSI Group Limited
-				Belle Vue Works, Boundary Street
-				Manchester  Lancashire  M12 5NG
-				GB
-
-70-B3-D5   (hex)		Vironova AB
-C3B000-C3BFFF     (base 16)		Vironova AB
-				Gävlegatan 22
-				Stockholm    11330
-				SE
-
-70-B3-D5   (hex)		5nines
-1B4000-1B4FFF     (base 16)		5nines
-				Avalon Four, Mill Street
-				Cape Town  Western Cape  8001
-				ZA
-
-70-B3-D5   (hex)		Innitive B.V.
-66B000-66BFFF     (base 16)		Innitive B.V.
-				Brouwerijstraat 20
-				Enschede  Overijssel  7523xd
-				NL
-
-70-B3-D5   (hex)		Al Kamel Systems S.L.
-BB8000-BB8FFF     (base 16)		Al Kamel Systems S.L.
-				Priora Xixilona, 93
-				La Garriga  Barcelona  08530
-				ES
-
-70-B3-D5   (hex)		XpertSea Solutions inc.
-996000-996FFF     (base 16)		XpertSea Solutions inc.
-				2700 Jean-Perrin suite 170
-				Québec  QC  G2C 1S9
-				CA
-
-00-1B-C5   (hex)		ChamSys Ltd
-042000-042FFF     (base 16)		ChamSys Ltd
-				Unit 3B Richmond Works
-				Southampton  Hampshire  SO15 3FQ
-				GB
-
-70-B3-D5   (hex)		Sea Shell Corporation
-671000-671FFF     (base 16)		Sea Shell Corporation
-				10th Fl. Chuohtanimachi bldg. 9-3-7, Tanimachi, Chuohku
-				Osaka    542-0012
-				JP
-
-70-B3-D5   (hex)		InDiCor
-FC1000-FC1FFF     (base 16)		InDiCor
-				Kornstr. 18
-				Horgenzell    88263
-				DE
-
-70-B3-D5   (hex)		Waversa Systems
-D07000-D07FFF     (base 16)		Waversa Systems
-				#1002 Pankyo-Innovalley, 622 Sampyong-dong, Bundang-gu
-				Seongnam-si, Kyeonggi-do    13486
-				KR
-
-70-B3-D5   (hex)		IST Technologies (SHENZHEN) Limited
-081000-081FFF     (base 16)		IST Technologies (SHENZHEN) Limited
-				Flat 1203, Block C6, HengFeng Industrial City, HeZhou,
-				Shenzhen  Guangdong  518126
-				CN
-
-70-B3-D5   (hex)		TDI. Co., LTD
-E48000-E48FFF     (base 16)		TDI. Co., LTD
-				80 Daehak-ro, Sankyuk-dong, Buk-gu
-				Deagu  Deagu  41566
-				KR
-
-70-B3-D5   (hex)		R&D Gran-System-S LLC
-185000-185FFF     (base 16)		R&D Gran-System-S LLC
-				F.Skoriny 54A
-				Minsk  NA  220141
-				BY
-
-70-B3-D5   (hex)		Triple Play Communications
-C26000-C26FFF     (base 16)		Triple Play Communications
-				250 East Drive, Suite F
-				Melbourne  Florida  32904
-				US
-
-70-B3-D5   (hex)		Apator Miitors ApS
-771000-771FFF     (base 16)		Apator Miitors ApS
-				Bautavej 1A
-				Aarhus V  Midtjylland  8210
-				DK
-
-70-B3-D5   (hex)		North Pole Engineering, Inc.
-066000-066FFF     (base 16)		North Pole Engineering, Inc.
-				221 N. 1st. St., Suite 310
-				Minneapolis  MN  55401
-				US
-
-70-B3-D5   (hex)		QIAGEN Instruments AG
-7B9000-7B9FFF     (base 16)		QIAGEN Instruments AG
-				Garstligweg 8
-				Hombrechtikon  Zurich  8634
-				CH
-
-70-B3-D5   (hex)		Sadel S.p.A.
-7AA000-7AAFFF     (base 16)		Sadel S.p.A.
-				via Marino Serenari, 1
-				Castel Maggiore  Bologna  40013
-				IT
-
-70-B3-D5   (hex)		Medtronic
-B34000-B34FFF     (base 16)		Medtronic
-				7 Hamarpe Street
-				Jerusalem  Israel  97774
-				IL
-
-70-B3-D5   (hex)		Prisma Telecom Testing Srl
-740000-740FFF     (base 16)		Prisma Telecom Testing Srl
-				Via Petrocchi, 4
-				Milano  MI  20127
-				IT
-
-70-B3-D5   (hex)		Itrinegy Ltd.
-BED000-BEDFFF     (base 16)		Itrinegy Ltd.
-				Albany Chambers
-				Welwyn Garden City  Herts  AL7 1HL
-				GB
-
-70-B3-D5   (hex)		TATTILE SRL
-2F6000-2F6FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Solystic
-F85000-F85FFF     (base 16)		Solystic
-				152/160 av Aristide Briand
-				Bagneux  Region Parisienne  92227
-				FR
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-817000-817FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		OTI LTD
-76F000-76FFFF     (base 16)		OTI LTD
-				Z.H.R Ind.Zone
-				Rosh Pina  North Israel  1200000
-				IL
-
-70-B3-D5   (hex)		Critical Link LLC
-B51000-B51FFF     (base 16)		Critical Link LLC
-				6712 Brooklawn Parkway
-				Syracuse  New York  13211
-				US
-
-70-B3-D5   (hex)		Xsight Systems Ltd.
-504000-504FFF     (base 16)		Xsight Systems Ltd.
-				11 Haavoda Street
-				Rosh-Haayin  Shfela  4801761
-				IL
-
-70-B3-D5   (hex)		Mikrotron Mikrocomputer, Digital- und Analogtechnik GmbH
-5EE000-5EEFFF     (base 16)		Mikrotron Mikrocomputer, Digital- und Analogtechnik GmbH
-				Landshuter Str. 20 - 22
-				Unterschleissheim  Bavaria  85716
-				DE
-
-70-B3-D5   (hex)		BroadSoft Inc
-F11000-F11FFF     (base 16)		BroadSoft Inc
-				550 S Winchester Blvd
-				San Jose  CA  95128
-				US
-
-70-B3-D5   (hex)		Sigma Connectivity AB
-E0D000-E0DFFF     (base 16)		Sigma Connectivity AB
-				BOX99
-				Lund  Skane  SE- 221 00
-				SE
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-D90000-D90FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		DETECT Australia
-DD7000-DD7FFF     (base 16)		DETECT Australia
-				40 Clements Avenue
-				Bundoora  Victoria  3083
-				AU
-
-70-B3-D5   (hex)		Firehose Labs, Inc.
-F79000-F79FFF     (base 16)		Firehose Labs, Inc.
-				1540 Oak Creek Dr #404
-				Palo Alto  CA  94304
-				US
-
-70-B3-D5   (hex)		Fuchu Giken, Inc.
-303000-303FFF     (base 16)		Fuchu Giken, Inc.
-				5-38-33
-				Fuchu-shi  Tokyo  183-0026
-				JP
-
-70-B3-D5   (hex)		BRNET CO.,LTD.
-2EB000-2EBFFF     (base 16)		BRNET CO.,LTD.
-				Zhoushi Jiangnan mingzhu garden 48-902
-				KUNSHAN  JIANGSU  215300
-				CN
-
-70-B3-D5   (hex)		DORLET SAU
-A56000-A56FFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		CT Company
-230000-230FFF     (base 16)		CT Company
-				9F.-1, No,Jian 8th Rd.
-				Jhonghe Dist  New Taipei  23511
-				TW
-
-70-B3-D5   (hex)		vitalcare
-0FC000-0FCFFF     (base 16)		vitalcare
-				Unit 14, 31-33 Chaplin Drive
-				Lane cove  NSW  2066
-				AU
-
-70-B3-D5   (hex)		Temperature@lert
-4DB000-4DBFFF     (base 16)		Temperature@lert
-				108 Lincoln St.
-				Boston  MA  02111
-				US
-
-70-B3-D5   (hex)		Flexim Security Oy
-7C3000-7C3FFF     (base 16)		Flexim Security Oy
-				P.O.Box 700
-				ESPOO  Southern Finland  02131
-				FI
-
-70-B3-D5   (hex)		Neptec Technologies Corp.
-3E4000-3E4FFF     (base 16)		Neptec Technologies Corp.
-				302 Legget Drive
-				Kanata  Ontario  K2K 1Y5
-				CA
-
-70-B3-D5   (hex)		Phyton, Inc. Microsystems and Development Tools
-8A4000-8A4FFF     (base 16)		Phyton, Inc. Microsystems and Development Tools
-				7206 Bay Parkway
-				Brooklyn  NY  11204
-				US
-
-70-B3-D5   (hex)		PK Sound
-9C9000-9C9FFF     (base 16)		PK Sound
-				Bay 133 2634 45th Ave SE
-				Calgary  Alberta  T2B 3M1
-				CA
-
-70-B3-D5   (hex)		Engage Technologies
-FCD000-FCDFFF     (base 16)		Engage Technologies
-				7041 Boone Ave. N
-				Brooklyn Park  MN  55428
-				US
-
-70-B3-D5   (hex)		CheckBill Co,Ltd.
-079000-079FFF     (base 16)		CheckBill Co,Ltd.
-				jiksan-eup, Seobuk-gu 28, 4sandan 5-gil
-				Cheonan-si  Chungcheongnam-do  331-814
-				KR
-
-70-B3-D5   (hex)		Alturna Networks
-714000-714FFF     (base 16)		Alturna Networks
-				De Huchtstraat 35
-				Almere  Fleovland  1327 EC
-				NL
-
-70-B3-D5   (hex)		UFATECH LTD
-1A0000-1A0FFF     (base 16)		UFATECH LTD
-				Mendeleev st 134
-				UFA  RB  450073
-				RU
-
-70-B3-D5   (hex)		Videogenix
-730000-730FFF     (base 16)		Videogenix
-				1423 Beacon St
-				Brookline  MA  02446
-				US
-
-70-B3-D5   (hex)		dieEntwickler Elektronik GmbH
-7A8000-7A8FFF     (base 16)		dieEntwickler Elektronik GmbH
-				Linzer Str. 4
-				Bad Zell  Upper Austria  4283
-				AT
-
-70-B3-D5   (hex)		Speedifi Inc
-D7A000-D7AFFF     (base 16)		Speedifi Inc
-				1163 Kassel Terrace
-				Sunnyvale  CA  94089
-				
-
-70-B3-D5   (hex)		SD Biosensor
-737000-737FFF     (base 16)		SD Biosensor
-				C-4th & 5th Floor, Digital Empire Building, 980-3
-				Suwon-si  Kyonggi-do  ASI|KR|KS002|SUWON
-				KR
-
-70-B3-D5   (hex)		Sierra Nevada Corporation
-339000-339FFF     (base 16)		Sierra Nevada Corporation
-				444 Salomon Circle
-				Sparks  NV  89434
-				US
-
-70-B3-D5   (hex)		StromIdee GmbH
-703000-703FFF     (base 16)		StromIdee GmbH
-				Walzmühlestrasse 51
-				Frauenfeld  TG  8500
-				CH
-
-70-B3-D5   (hex)		Tofino
-838000-838FFF     (base 16)		Tofino
-				47823 Westinghouse Dr.
-				Fremont  California  94539
-				US
-
-70-B3-D5   (hex)		Rexxam Co.,Ltd.
-B35000-B35FFF     (base 16)		Rexxam Co.,Ltd.
-				Ikenouchi 958
-				Takamatsu-shi, Kounan-cho  Kagawa-prefecture  761-1494
-				JP
-
-70-B3-D5   (hex)		Techno Mathematical Co.,Ltd
-916000-916FFF     (base 16)		Techno Mathematical Co.,Ltd
-				7F, Gotanda NN Bldg.,
-				Shinagawa-ku  Tokyo  141-0031
-				JP
-
-70-B3-D5   (hex)		BroadSoft Inc
-AB5000-AB5FFF     (base 16)		BroadSoft Inc
-				550 S Winchester Blvd
-				San Jose  CA  95128
-				US
-
-70-B3-D5   (hex)		Data Physics Corporation
-80D000-80DFFF     (base 16)		Data Physics Corporation
-				1741 Technology Drive, Suite 260
-				San Jose  California  95110
-				US
-
-70-B3-D5   (hex)		LACE LLC.
-4B1000-4B1FFF     (base 16)		LACE LLC.
-				Obukhovskoy oborony 70/2, office 416
-				Saint-Petersburg  Saint-Petersburg  192029
-				RU
-
-70-B3-D5   (hex)		VEILUX INC.
-FE7000-FE7FFF     (base 16)		VEILUX INC.
-				802 GREENVIEW DR. STE 200
-				GRAND PRAIRIE    75050
-				US
-
-70-B3-D5   (hex)		METRONIC APARATURA KONTROLNO - POMIAROWA
-1A5000-1A5FFF     (base 16)		METRONIC APARATURA KONTROLNO - POMIAROWA
-				WYBICKIEGO 7
-				KRAKOW  MALOPOLSKA  31-261
-				PL
-
-70-B3-D5   (hex)		WiTagg, Inc
-4F4000-4F4FFF     (base 16)		WiTagg, Inc
-				1045 Linda Vista Avenue
-				Mountain View  CA  94043
-				US
-
-70-B3-D5   (hex)		Lazer Safe Pty Ltd
-63B000-63BFFF     (base 16)		Lazer Safe Pty Ltd
-				27 Action Road
-				Perth  WA  6090
-				AU
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-431000-431FFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		PA CONSULTING SERVICES
-0A6000-0A6FFF     (base 16)		PA CONSULTING SERVICES
-				CAMBRIDGE TECH CENTRE
-				MELBOURN  HERTFORDSHIRE  SG8 6DP
-				GB
-
-70-B3-D5   (hex)		KOMSIS ELEKTRONIK SISTEMLERI SAN. TIC. LTD.STI
-9CA000-9CAFFF     (base 16)		KOMSIS ELEKTRONIK SISTEMLERI SAN. TIC. LTD.STI
-				MEVLANA MAH. BATTAL SOK. NO:4
-				ISTANBUL  SANCAKTEPE  34791
-				TR
-
-70-B3-D5   (hex)		Thales Nederland BV
-324000-324FFF     (base 16)		Thales Nederland BV
-				PO Box 42
-				Hengelo  OV  7554 PA
-				NL
-
-70-B3-D5   (hex)		Parent Power
-361000-361FFF     (base 16)		Parent Power
-				35 Garland Way
-				Trigg  Western Australia  6029
-				AU
-
-70-B3-D5   (hex)		Cityntel OU
-589000-589FFF     (base 16)		Cityntel OU
-				Akadeemia tee 21/1
-				Tallinn  Harjumaa  12618
-				EE
-
-70-B3-D5   (hex)		DELTA TAU DATA SYSTEMS, INC.
-231000-231FFF     (base 16)		DELTA TAU DATA SYSTEMS, INC.
-				21314 LASSEN STREET
-				CHATSWORTH  CALIFORNIA  91311
-				US
-
-70-B3-D5   (hex)		JK DEVICE CORPORATION
-4DC000-4DCFFF     (base 16)		JK DEVICE CORPORATION
-				RYOGOKU 4-35-1-304
-				SUMIDA-KU  TOKYO  1300026
-				JP
-
-70-B3-D5   (hex)		Plazma-T
-4BB000-4BBFFF     (base 16)		Plazma-T
-				Fryazevskaya str, 10
-				Moscow  Moscow   111396
-				RU
-
-70-B3-D5   (hex)		Dalcnet srl
-CE3000-CE3FFF     (base 16)		Dalcnet srl
-				Via Meucci 35
-				Brendola  Vicenza  36040
-				IT
-
-70-B3-D5   (hex)		Manvish eTech Pvt. Ltd.
-F78000-F78FFF     (base 16)		Manvish eTech Pvt. Ltd.
-				No. 78, Elephant Rock Road
-				Bangalore  Karnataka  560011
-				IN
-
-70-B3-D5   (hex)		Nidec Avtron Automation Corp
-4DF000-4DFFFF     (base 16)		Nidec Avtron Automation Corp
-				8901 East Pleasant Valley Rd
-				Independence  Ohio  44131
-				US
-
-70-B3-D5   (hex)		AML
-DF2000-DF2FFF     (base 16)		AML
-				2190 Regal Parkway
-				Euless  TX  76040
-				US
-
-70-B3-D5   (hex)		North Star Bestech Co.,
-421000-421FFF     (base 16)		North Star Bestech Co.,
-				203,e-spce b/d, digital-ro 27-gil, guro-gu
-				seoul  guro-gu  152-789
-				KR
-
-70-B3-D5   (hex)		CJSC «INTERSET»
-811000-811FFF     (base 16)		CJSC «INTERSET»
-				117292, Moscow, Nakhimovsky prospekt 52/27, office B
-				Moscow  Moscow  117292
-				RU
-
-70-B3-D5   (hex)		Enovative Networks, Inc.
-6DA000-6DAFFF     (base 16)		Enovative Networks, Inc.
-				1901 Central Drive
-				Bedford  TX  76021
-				US
-
-70-B3-D5   (hex)		Kwant Controls BV
-74C000-74CFFF     (base 16)		Kwant Controls BV
-				Voltastraat 3
-				Sneek  Select Your State or Province  8606 JW
-				NL
-
-70-B3-D5   (hex)		Dataforth Corporation
-6FA000-6FAFFF     (base 16)		Dataforth Corporation
-				3331 E. Hemisphere Loop
-				Tucson  AZ  85706
-				US
-
-70-B3-D5   (hex)		Signal Processing Devices Sweden AB
-9BD000-9BDFFF     (base 16)		Signal Processing Devices Sweden AB
-				Teknikringen 6
-				Linköping    SE-58330
-				SE
-
-70-B3-D5   (hex)		ABB SPA - DMPC
-6E0000-6E0FFF     (base 16)		ABB SPA - DMPC
-				VIA ALBARETO 35
-				GENOVA  ITALY  16153
-				IT
-
-70-B3-D5   (hex)		Stellwerk GmbH
-600000-600FFF     (base 16)		Stellwerk GmbH
-				Am Saegewerk 3
-				Baienfurt  BW  88255
-				DE
-
-70-B3-D5   (hex)		Peek Traffic
-875000-875FFF     (base 16)		Peek Traffic
-				2906 Corporate Way
-				Palmetto  FL  34235
-				US
-
-70-B3-D5   (hex)		Communication Technology Ltd.
-9D3000-9D3FFF     (base 16)		Communication Technology Ltd.
-				11F,No.166, Jian 1th Rd.,Jhonghe Dist.
-				New Taipei    23511
-				TW
-
-70-B3-D5   (hex)		Mistral Solutions Pvt. LTD
-500000-500FFF     (base 16)		Mistral Solutions Pvt. LTD
-				No. 60 Adarsh Regent 100 Ft Ring Road
-				Bangalore  Karnataka  560071
-				IN
-
-70-B3-D5   (hex)		Hanshin Electronics
-F72000-F72FFF     (base 16)		Hanshin Electronics
-				Namhangnam-Ro 45, Yeongdo-Gu, Busan, Korea
-				Busan  N/C  606816
-				KR
-
-70-B3-D5   (hex)		serva transport systems GmbH
-46F000-46FFFF     (base 16)		serva transport systems GmbH
-				Gut Sossau 31
-				Grabenstaett  Bayern  83355
-				DE
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-5C8000-5C8FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Bentec GmbH Drilling & Oilfield Systems
-285000-285FFF     (base 16)		Bentec GmbH Drilling & Oilfield Systems
-				Deilmannstraße 1
-				Bad Bentheim  Lower Saxony  48455
-				DE
-
-70-B3-D5   (hex)		ESII
-EC6000-EC6FFF     (base 16)		ESII
-				2 Rue de la Prade
-				LAVERUNE  LR  34880
-				FR
-
-70-B3-D5   (hex)		CertUsus GmbH
-665000-665FFF     (base 16)		CertUsus GmbH
-				Fidlerstrasse 4
-				Ermatingen  Thurgau  8272
-				CH
-
-70-B3-D5   (hex)		Contineo s.r.o.
-D46000-D46FFF     (base 16)		Contineo s.r.o.
-				Jiskrova 4
-				Košice  -  040 01
-				SK
-
-70-B3-D5   (hex)		Zhejiang Wellsun Electric Meter Co.,Ltd
-AE3000-AE3FFF     (base 16)		Zhejiang Wellsun Electric Meter Co.,Ltd
-				No 189 East Xixia Road
-				Taizhou  Zhejiang  317200
-				CN
-
-70-B3-D5   (hex)		Gridless Power Corperation
-EA3000-EA3FFF     (base 16)		Gridless Power Corperation
-				13 Fern Ave
-				Collingswood  New Jersey  08108
-				US
-
-70-B3-D5   (hex)		AeroVision Avionics, Inc.
-7F1000-7F1FFF     (base 16)		AeroVision Avionics, Inc.
-				2F, No.30, R&D Rd. II,
-				Hsinchu City  Hsinchu City  30076
-				TW
-
-70-B3-D5   (hex)		DAVE SRL
-63A000-63AFFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-70-B3-D5   (hex)		Tieto Sweden AB
-C9B000-C9BFFF     (base 16)		Tieto Sweden AB
-				Kanikenäsbanken 12
-				Karlstad  Karlstad  65115
-				SE
-
-70-B3-D5   (hex)		XAVi Technologies Corp.
-C03000-C03FFF     (base 16)		XAVi Technologies Corp.
-				9F., No129, Xingde RD.,Sanchong Dist.,
-				New Taipei  Taiwan  24158
-				TW
-
-70-B3-D5   (hex)		BroadSoft Inc
-E95000-E95FFF     (base 16)		BroadSoft Inc
-				550 S Winchester Blvd
-				San Jose  CA  95128
-				US
-
-70-B3-D5   (hex)		Teuco Guzzini
-2D5000-2D5FFF     (base 16)		Teuco Guzzini
-				Via V. Guzzini, 2
-				Montelupone  Macerata  62010
-				IT
-
-70-B3-D5   (hex)		Innominds Software Private Limited
-DE7000-DE7FFF     (base 16)		Innominds Software Private Limited
-				Sy No 109,110,111/2, Q City, 6th Floor,
-				Hyderabad  Telangana  500032
-				IN
-
-70-B3-D5   (hex)		CRAVIS CO., LIMITED
-7EF000-7EFFFF     (base 16)		CRAVIS CO., LIMITED
-				Room 11, 7/F., Metro Centre, Phase 1 No.32
-				Lam Hing Street  Kowloon Bay  0000
-				HK
-
-70-B3-D5   (hex)		Elektronik Art
-B9B000-B9BFFF     (base 16)		Elektronik Art
-				80 Melgiewska Str.
-				Lublin  Lublin  20234
-				PL
-
-70-B3-D5   (hex)		Mesh Motion Inc
-CF3000-CF3FFF     (base 16)		Mesh Motion Inc
-				242 Stanford Ave
-				Kensington  California  94708
-				US
-
-70-B3-D5   (hex)		Molekuler Goruntuleme A.S.
-7CD000-7CDFFF     (base 16)		Molekuler Goruntuleme A.S.
-				Tubitak-MAM, TEKSEB
-				Kocaeli  Kocaeli  41470
-				TR
-
-70-B3-D5   (hex)		UNISOR MULTISYSTEMS LTD
-05F000-05FFFF     (base 16)		UNISOR MULTISYSTEMS LTD
-				HAYETZIRA 6 ST
-				NETANYA  ISRAEL  4250578
-				IL
-
-70-B3-D5   (hex)		MEIDEN SYSTEM SOLUTIONS
-EFE000-EFEFFF     (base 16)		MEIDEN SYSTEM SOLUTIONS
-				515
-				NUMAZU  SHIZUOKA  410-8588
-				JP
-
-70-B3-D5   (hex)		TATTILE SRL
-412000-412FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Avant Technologies
-097000-097FFF     (base 16)		Avant Technologies
-				P.O. Box 9359
-				Caguas  Puerto Rico  00726
-				PR
-
-70-B3-D5   (hex)		 GD Mission Systems
-DAD000-DADFFF     (base 16)		 GD Mission Systems
-				8220 E. Roosevelt St.
-				Scottsdale  AZ  85257
-				US
-
-70-B3-D5   (hex)		Kitron UAB
-182000-182FFF     (base 16)		Kitron UAB
-				Taikos pr. 151
-				Kaunas  Kaunas  LT-52119
-				LT
-
-70-B3-D5   (hex)		KYS,INC
-5EA000-5EAFFF     (base 16)		KYS,INC
-				C-605 Digital Empire Bldg
-				Yeongtong-gu  Suwon-si, Gyoenggi-do  443-702
-				KR
-
-70-B3-D5   (hex)		SENSEON Corporation
-6F8000-6F8FFF     (base 16)		SENSEON Corporation
-				5-23-31 Mori Isogo-Ku
-				Yokohama  Kanagawa  235-0023
-				JP
-
-70-B3-D5   (hex)		inomed Medizintechnik GmbH
-092000-092FFF     (base 16)		inomed Medizintechnik GmbH
-				Im Hausgruen 29
-				Emmendingen  Baden Württemberg  79312
-				DE
-
-70-B3-D5   (hex)		Fresh Idea Factory BV
-35D000-35DFFF     (base 16)		Fresh Idea Factory BV
-				Torenmolenlaan 67
-				Lochem  Nederland - Nederlands  7241VL
-				NL
-
-70-B3-D5   (hex)		HMicro Inc
-1A1000-1A1FFF     (base 16)		HMicro Inc
-				39355 California St., Suite 303
-				Fremont  California  94538
-				US
-
-70-B3-D5   (hex)		BroadSoft Inc
-7B3000-7B3FFF     (base 16)		BroadSoft Inc
-				550 S Winchester Blvd
-				San Jose  CA  95128
-				US
-
-70-B3-D5   (hex)		RM Michaelides Software & Elektronik GmbH
-062000-062FFF     (base 16)		RM Michaelides Software & Elektronik GmbH
-				Donaustrasse 14
-				Fulda  Hessen  36043
-				
-
-70-B3-D5   (hex)		JungwooEng Co., Ltd
-B8D000-B8DFFF     (base 16)		JungwooEng Co., Ltd
-				#864-5, Gwanyang2-dong, Dongan-gu
-				Anyang-si  Gyeonggi-do  431-804
-				KR
-
-70-B3-D5   (hex)		Automata GmbH & Co. KG
-57C000-57CFFF     (base 16)		Automata GmbH & Co. KG
-				Gewerbering 5
-				Ried  Bavaria  86510
-				DE
-
-70-B3-D5   (hex)		Martec S.p.A.
-1F5000-1F5FFF     (base 16)		Martec S.p.A.
-				Via dell'Industria 1/3
-				Vignate  Milano  20060
-				IT
-
-70-B3-D5   (hex)		DiTEST Fahrzeugdiagnose GmbH
-112000-112FFF     (base 16)		DiTEST Fahrzeugdiagnose GmbH
-				Alte Poststraße 152
-				Graz  Steiermark  8020
-				AT
-
-70-B3-D5   (hex)		Esource Srl
-205000-205FFF     (base 16)		Esource Srl
-				via del Caravaggio 3
-				Milano  Mi  20144
-				IT
-
-70-B3-D5   (hex)		IBM Research GmbH
-708000-708FFF     (base 16)		IBM Research GmbH
-				Saeumerstrasse 4
-				Rueschlikon  ZH  8803
-				CH
-
-70-B3-D5   (hex)		Tokyo Communication Equipment MFG Co.,ltd.
-BEC000-BECFFF     (base 16)		Tokyo Communication Equipment MFG Co.,ltd.
-				3-8-13
-				Minato-ku  Tokyo  1080074
-				JP
-
-70-B3-D5   (hex)		Elsuhd Net Ltd Co.
-025000-025FFF     (base 16)		Elsuhd Net Ltd Co.
-				Karrada dakhil-Q 909- St.20-Building 74
-				Karrada  Baghdad  10001
-				IQ
-
-70-B3-D5   (hex)		Simple Works, Inc.
-AA0000-AA0FFF     (base 16)		Simple Works, Inc.
-				PO Box 345
-				Libertyville  Illinois  60048
-				US
-
-70-B3-D5   (hex)		AML
-709000-709FFF     (base 16)		AML
-				2190 Regal Parkway
-				Euless  TX  76040
-				US
-
-70-B3-D5   (hex)		ePOINT Embedded Computing Limited
-B8C000-B8CFFF     (base 16)		ePOINT Embedded Computing Limited
-				Williamton House
-				Culross  Fife  KY12 8HL
-				GB
-
-70-B3-D5   (hex)		Telink Semiconductor CO, Limtied, Taiwan
-058000-058FFF     (base 16)		Telink Semiconductor CO, Limtied, Taiwan
-				Room 1050, 10F, Bld H, YuanQu St.
-				Taipei  Taiwan  11503
-				TW
-
-70-B3-D5   (hex)		LandmarkTech Systems Technology Co.,Ltd.
-755000-755FFF     (base 16)		LandmarkTech Systems Technology Co.,Ltd.
-				Room221, Building #29, No.368 Zhangjiang Rd.,
-				  Shanghai  201210
-				CN
-
-70-B3-D5   (hex)		AeroVision Avionics, Inc.
-956000-956FFF     (base 16)		AeroVision Avionics, Inc.
-				2F, No.30, R&D. II, Science Park,
-				Hsinchu City  Taiwan  30076
-				TW
-
-70-B3-D5   (hex)		Qingdao Haitian Weiye Automation Control System Co., Ltd
-54D000-54DFFF     (base 16)		Qingdao Haitian Weiye Automation Control System Co., Ltd
-				D&D Wealth Building
-				Qingdao  Shandong  266000
-				CN
-
-70-B3-D5   (hex)		octoScope
-EF3000-EF3FFF     (base 16)		octoScope
-				305 Foster Street
-				Littleton  Massachusetts  01460
-				US
-
-70-B3-D5   (hex)		5-D Systems, Inc.
-BDA000-BDAFFF     (base 16)		5-D Systems, Inc.
-				1 Chisholm Trail
-				Round Rock  TX  78681
-				US
-
-70-B3-D5   (hex)		Sunrise Systems Electronics Co. Inc.
-BBE000-BBEFFF     (base 16)		Sunrise Systems Electronics Co. Inc.
-				720 Washington street
-				Pembroke  MA  02359
-				US
-
-70-B3-D5   (hex)		GNF
-751000-751FFF     (base 16)		GNF
-				10675 John Jay Hopkins Drive
-				San Diego  CA  92121
-				US
-
-70-B3-D5   (hex)		Procon Electronics Pty Ltd
-CBC000-CBCFFF     (base 16)		Procon Electronics Pty Ltd
-				P O Box 164
-				Seven Hills  NSW  1730
-				AU
-
-70-B3-D5   (hex)		Secuinfo Co. Ltd
-B08000-B08FFF     (base 16)		Secuinfo Co. Ltd
-				1411, Kranz Techno, 5442-1
-				Seongnam-si  Gyeonggi-do  462-729
-				KR
-
-70-B3-D5   (hex)		INCAA Computers
-587000-587FFF     (base 16)		INCAA Computers
-				Po Box 722
-				Apeldoorn  Gelderland  7300 AS
-				NL
-
-70-B3-D5   (hex)		Intercore GmbH
-A15000-A15FFF     (base 16)		Intercore GmbH
-				Oberlandstrasse 13-14
-				  Berlin  12099
-				DE
-
-70-B3-D5   (hex)		ICP NewTech Ltd
-E4A000-E4AFFF     (base 16)		ICP NewTech Ltd
-				Kilbrittain
-				Bandon  Cork  WLF-17-68G
-				IE
-
-70-B3-D5   (hex)		Quasonix, LLC
-23C000-23CFFF     (base 16)		Quasonix, LLC
-				6025 Schumacher Park Dr
-				West Chester  Ohio  45069
-				US
-
-70-B3-D5   (hex)		Atessa, Inc.
-7E7000-7E7FFF     (base 16)		Atessa, Inc.
-				5000 Hopyard Rd.
-				Pleasanton  CA  94588
-				US
-
-70-B3-D5   (hex)		GHL Systems Berhad
-ADD000-ADDFFF     (base 16)		GHL Systems Berhad
-				Unit L8 C-G-15, Block C,
-				Bandar Sri Damansara  Kuala Lumpur  52200
-				MY
-
-70-B3-D5   (hex)		Exfrontier Co., Ltd.
-E74000-E74FFF     (base 16)		Exfrontier Co., Ltd.
-				5-27 Shinano-Cho
-				Seto-City  Aichi  480-1207
-				JP
-
-70-B3-D5   (hex)		NETA Elektronik AS
-C78000-C78FFF     (base 16)		NETA Elektronik AS
-				Yukari Dudullu Organize Sanayi Bolgesi
-				Istanbul  -  34775
-				TR
-
-70-B3-D5   (hex)		Olssen
-E08000-E08FFF     (base 16)		Olssen
-				Schrank 9
-				Hardinxveld-Giessendam  Zuid Holland  3371kj
-				NL
-
-70-B3-D5   (hex)		YotaScope Technologies Co., Ltd.
-D47000-D47FFF     (base 16)		YotaScope Technologies Co., Ltd.
-				3F, No. 7-1, Jhongsing Road.,
-				New Taipei City    23678
-				TW
-
-70-B3-D5   (hex)		WPGSYS Pte Ltd
-D86000-D86FFF     (base 16)		WPGSYS Pte Ltd
-				5 Harper Road #04-01
-				    369673
-				SG
-
-70-B3-D5   (hex)		ambiHome GmbH
-A0B000-A0BFFF     (base 16)		ambiHome GmbH
-				Theaterstrasse 19
-				Aachen  NRW  52062
-				
-
-70-B3-D5   (hex)		ELOMAC Elektronik GmbH
-3DE000-3DEFFF     (base 16)		ELOMAC Elektronik GmbH
-				Heinrich-Vogl-Str. 14
-				Ebersberg  Bayern  85560
-				DE
-
-70-B3-D5   (hex)		Cari Electronic
-AE9000-AE9FFF     (base 16)		Cari Electronic
-				8 rue olivier de Serres
-				Valence  Drome  26958
-				FR
-
-70-B3-D5   (hex)		XV360 Optical Information Systems Ltd.
-184000-184FFF     (base 16)		XV360 Optical Information Systems Ltd.
-				241, Sean Bldgs. Floor 1, S.Psaila Street
-				Birkirkara  Malta  BKR9078
-				MT
-
-70-B3-D5   (hex)		INRADIOS GmbH
-6B6000-6B6FFF     (base 16)		INRADIOS GmbH
-				Nossener Bruecke 12
-				Dresden  SAX  01187
-				DE
-
-70-B3-D5   (hex)		Wanco Inc
-0AA000-0AAFFF     (base 16)		Wanco Inc
-				5870 Tennyson St
-				Arvada  CO  80003
-				US
-
-70-B3-D5   (hex)		Solar Network & Partners
-EDD000-EDDFFF     (base 16)		Solar Network & Partners
-				Corneliusstr. 90
-				Geilenkirchen  NRW  52511
-				DE
-
-00-1B-C5   (hex)		inomatic GmbH
-0C3000-0C3FFF     (base 16)		inomatic GmbH
-				
-				Nordhorn    48513
-				DE
-
-00-1B-C5   (hex)		YESpay International Ltd
-0BE000-0BEFFF     (base 16)		YESpay International Ltd
-				Checknet House
-				Barnet  Hertfordshire  EN4 8QZ
-				GB
-
-00-1B-C5   (hex)		Hangzhou Zhiping Technology Co., Ltd.
-0A1000-0A1FFF     (base 16)		Hangzhou Zhiping Technology Co., Ltd.
-				Room 619, Science and technology square, East software park,
-				Hangzhou  Zhejiang  310012
-				CN
-
-00-1B-C5   (hex)		Hettich Benelux
-0A2000-0A2FFF     (base 16)		Hettich Benelux
-				de Aaldor 9
-				Geldermalsen  Gelderland  4191PC
-				NL
-
-00-1B-C5   (hex)		ENTE Sp. z o.o.
-09F000-09FFFF     (base 16)		ENTE Sp. z o.o.
-				ul. Gaudiego 7
-				Gliwice   Śląskie  44-100
-				PL
-
-00-1B-C5   (hex)		Shenzhen Guang Lian Zhi Tong Limited
-09A000-09AFFF     (base 16)		Shenzhen Guang Lian Zhi Tong Limited
-				Room 2411, Block E, Xi hai ming zhu
-				Shenzhen  Guangdong  518000
-				CN
-
-00-1B-C5   (hex)		PREVAC sp. z o.o.
-095000-095FFF     (base 16)		PREVAC sp. z o.o.
-				ul. Raciborska 61
-				44-362 Rogow, Silesia    
-				PL
-
-00-1B-C5   (hex)		Topicon
-08A000-08AFFF     (base 16)		Topicon
-				Room 201, 2F, Lee Loong Building
-				Central    
-				HK
-
-00-1B-C5   (hex)		DIWEL
-083000-083FFF     (base 16)		DIWEL
-				80 avenue des buttes de coesmes
-				RENNES    35700
-				FR
-
-00-1B-C5   (hex)		TGS Geophysical Company (UK) Limited
-082000-082FFF     (base 16)		TGS Geophysical Company (UK) Limited
-				Millbank House
-				Surbiton    KT6 6AP
-				GB
-
-00-1B-C5   (hex)		Momentum Data Systems
-077000-077FFF     (base 16)		Momentum Data Systems
-				5432 Bolsa Ave
-				Huntington Beach  California  92649
-				US
-
-00-1B-C5   (hex)		Ohio Semitronics, Inc.
-072000-072FFF     (base 16)		Ohio Semitronics, Inc.
-				4242 Reynolds Dr
-				Hilliard  Ohio  43026
-				US
-
-00-1B-C5   (hex)		Kitron GmbH
-075000-075FFF     (base 16)		Kitron GmbH
-				Lessingstr. 24
-				Großbettlingen  Baden-Württemberg  72663
-				DE
-
-00-1B-C5   (hex)		HCS KABLOLAMA SISTEMLERI SAN. ve TIC.A.S.
-068000-068FFF     (base 16)		HCS KABLOLAMA SISTEMLERI SAN. ve TIC.A.S.
-				Turgutreis Mah. Barbaros Cad. 
-				Esenler / ISTANBUL    34235
-				TR
-
-00-1B-C5   (hex)		ENSTECH
-060000-060FFF     (base 16)		ENSTECH
-				Sunil Technopia 802, #440
-				Seongnam-City  South Korea / Kyunggi-do  462-120
-				KR
-
-00-1B-C5   (hex)		Suretrak Global Pty Ltd
-05C000-05CFFF     (base 16)		Suretrak Global Pty Ltd
-				PO Box 7075
-				Wetherill Park  NSW  2164
-				AU
-
-00-1B-C5   (hex)		Mitsubishi Electric India PVT. LTD
-04E000-04EFFF     (base 16)		Mitsubishi Electric India PVT. LTD
-				Emerald House, EL-3
-				Pune  Maharashtra  411026
-				IN
-
-00-1B-C5   (hex)		Orbital Systems, Ltd.
-04F000-04FFFF     (base 16)		Orbital Systems, Ltd.
-				3807 Carbon Rd.
-				Irving  TEXAS  75038
-				US
-
-00-1B-C5   (hex)		Certis Technology International Pte Ltd
-04A000-04AFFF     (base 16)		Certis Technology International Pte Ltd
-				Certis CISCO Centre
-				409179    409179
-				SG
-
-00-1B-C5   (hex)		Silicon Controls
-04B000-04BFFF     (base 16)		Silicon Controls
-				Unit 14A
-				Macqaurie Park  NSW  2113
-				AU
-
-00-1B-C5   (hex)		GÉANT
-046000-046FFF     (base 16)		GÉANT
-				Singel 468D
-				Amsterdam  Noord-Holland  1017AW
-				NL
-
-00-1B-C5   (hex)		Xiphos Systems Corp.
-03C000-03CFFF     (base 16)		Xiphos Systems Corp.
-				Suite 500
-				Montreal  QC  H2W 1Y5
-				CA
-
-00-1B-C5   (hex)		rioxo GmbH
-03D000-03DFFF     (base 16)		rioxo GmbH
-				Im Grund 15
-				Baden-Dättwil  AG  5405
-				CH
-
-00-1B-C5   (hex)		Promixis, LLC
-03B000-03BFFF     (base 16)		Promixis, LLC
-				211 Edenberry Avenue
-				Jupiter  FL  33458
-				US
-
-00-1B-C5   (hex)		LOMAR SRL
-036000-036FFF     (base 16)		LOMAR SRL
-				VIA PETRARCA 
-				FLERO  BRESCIA  25020
-				IT
-
-00-1B-C5   (hex)		Fibrain Co. Ltd.
-02F000-02FFFF     (base 16)		Fibrain Co. Ltd.
-				ul. WspÃ³lna 4A
-				Rzeszów   Podkarpacie  35-205
-				PL
-
-00-1B-C5   (hex)		DDTRONIK Dariusz Dowgiert
-02D000-02DFFF     (base 16)		DDTRONIK Dariusz Dowgiert
-				Chabrowa 2
-				Czarna Bialostocka  Podlaskie  16-020
-				PL
-
-00-1B-C5   (hex)		Analytical Instrument Systems, Inc.
-02A000-02AFFF     (base 16)		Analytical Instrument Systems, Inc.
-				P.O. Box 458
-				Flemington  New Jersey  08822
-				US
-
-00-1B-C5   (hex)		2 FRANCE MARINE
-029000-029FFF     (base 16)		2 FRANCE MARINE
-				61, route de la Chapelle de Rousse
-				GAN    64290
-				FR
-
-00-1B-C5   (hex)		CAMEA, spol. s r.o.
-027000-027FFF     (base 16)		CAMEA, spol. s r.o.
-				Korenskeho 25
-				Brno    621 00
-				CZ
-
-00-1B-C5   (hex)		ANNECY ELECTRONIQUE SAS
-024000-024FFF     (base 16)		ANNECY ELECTRONIQUE SAS
-				Parc Altaīs, 1 Rue Callisto
-				CHAVANOD  FRANCE  74650
-				FR
-
-00-1B-C5   (hex)		MAGO di Della Mora Walter
-023000-023FFF     (base 16)		MAGO di Della Mora Walter
-				Via S.Vidotto 2/3
-				Codroipo fr. Biauzzo  Udine (UD)  33033
-				IT
-
-00-1B-C5   (hex)		Private
-01E000-01EFFF     (base 16)		Private
-
-00-1B-C5   (hex)		Coolit Systems, Inc.
-01C000-01CFFF     (base 16)		Coolit Systems, Inc.
-				3920 - 29th St. N.E.
-				Calgary  AB  T1Y6B6
-				CA
-
-00-1B-C5   (hex)		Commonwealth Scientific and Industrial  Research Organisation
-01B000-01BFFF     (base 16)		Commonwealth Scientific and Industrial  Research Organisation
-				PO Box 883
-				Kenmore  Queensland  4069
-				AU
-
-00-1B-C5   (hex)		cPacket Networks
-017000-017FFF     (base 16)		cPacket Networks
-				2061 Landings Drive
-				Mountain View  CA  94043
-				US
-
-00-1B-C5   (hex)		Tokyo Cosmos Electric, Inc.
-012000-012FFF     (base 16)		Tokyo Cosmos Electric, Inc.
-				2-268 Sobudai
-				Zama  Kanagawa  252-8550
-				JP
-
-00-1B-C5   (hex)		MicroSigns Technologies Inc
-003000-003FFF     (base 16)		MicroSigns Technologies Inc
-				1350 Mazurette
-				Montreal  QC  H1V 2C8
-				CA
-
-70-B3-D5   (hex)		KMtronic ltd
-299000-299FFF     (base 16)		KMtronic ltd
-				Dobri Czintulov 28A str.
-				 Gorna Oryahovica  VT  5100
-				BG
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-3EB000-3EBFFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		Kyoto Denkiki
-F0F000-F0FFFF     (base 16)		Kyoto Denkiki
-				makishima 16 19-1
-				Uji    6110041
-				JP
-
-70-B3-D5   (hex)		Copious Imaging LLC
-4E8000-4E8FFF     (base 16)		Copious Imaging LLC
-				83 Hartwell Ave, Suite 150
-				Lexington  MA  02421
-				US
-
-70-B3-D5   (hex)		APEX Stabilizations GmbH
-A52000-A52FFF     (base 16)		APEX Stabilizations GmbH
-				Künstlergasse 11, 4. OG, Top 2
-				Vienna    1150
-				AT
-
-70-B3-D5   (hex)		NEOPATH INTEGRATED SYSTEMS LTDA
-067000-067FFF     (base 16)		NEOPATH INTEGRATED SYSTEMS LTDA
-				Rua Paulo Emídio Barbosa, 485 - sala 302
-				Rio de Janeiro  Rio de Janeiro  21941-907
-				BR
-
-70-B3-D5   (hex)		Waco Giken Co.,  Ltd.
-815000-815FFF     (base 16)		Waco Giken Co.,  Ltd.
-				1-1-50, Suehiro-Cho, 
-				Tsurumi-Ku, Yokohama    230-0045
-				JP
-
-70-B3-D5   (hex)		Monnit Corporation
-D16000-D16FFF     (base 16)		Monnit Corporation
-				3400 S West Temple
-				Salt Lake City    84115
-				US
-
-70-B3-D5   (hex)		Harmonic Design GmbH
-1F0000-1F0FFF     (base 16)		Harmonic Design GmbH
-				Bahnhofstraße 1
-				Steinheim    71711
-				DE
-
-70-B3-D5   (hex)		hmt telematik GmbH
-EC4000-EC4FFF     (base 16)		hmt telematik GmbH
-				Grazer Str. 34b
-				Graz    8045
-				AT
-
-70-B3-D5   (hex)		Exsom Computers LLC
-4BF000-4BFFFF     (base 16)		Exsom Computers LLC
-				Office 3206, The Citadel Tower, Business Bay
-				Dubai  Dubai  72891
-				AE
-
-70-B3-D5   (hex)		Piranha EMS Inc.
-8CC000-8CCFFF     (base 16)		Piranha EMS Inc.
-				2681 Zanker Road
-				San Jose  CA  95134
-				US
-
-70-B3-D5   (hex)		Small Data Garden Oy
-568000-568FFF     (base 16)		Small Data Garden Oy
-				Paloheimonkatu 2
-				Riihimäki    11130
-				FI
-
-70-B3-D5   (hex)		Densitron Technologies Ltd
-E3C000-E3CFFF     (base 16)		Densitron Technologies Ltd
-				16 South Park
-				Sevenoaks  Kent  TN13 1AN
-				GB
-
-70-B3-D5   (hex)		Shanghai AiGentoo Information Technology Co.,Ltd.
-4FF000-4FFFFF     (base 16)		Shanghai AiGentoo Information Technology Co.,Ltd.
-				No.309 room 2445 14C?Tanggu Road?Hongkou District
-				Shanghai    200080
-				CN
-
-70-B3-D5   (hex)		GENTEC ELECTRO-OPTICS
-CF7000-CF7FFF     (base 16)		GENTEC ELECTRO-OPTICS
-				445 ST-JEAN-BAPTISTE SUITE 160
-				Quebec  Quebec  G2E 5N7
-				CA
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-519000-519FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Ossiaco
-CB0000-CB0FFF     (base 16)		Ossiaco
-				355 Peel St.
-				Montreal  Quebec  H3C2G9
-				CA
-
-70-B3-D5   (hex)		Profotech
-5AD000-5ADFFF     (base 16)		Profotech
-				Volgogradsky prospekt, 42/5
-				Moscow    109316
-				RU
-
-70-B3-D5   (hex)		A & T Technologies
-143000-143FFF     (base 16)		A & T Technologies
-				ul. Baumana 57a-31
-				Kemerovo    650040
-				RU
-
-70-B3-D5   (hex)		INNOVATIVE CONCEPTS AND DESIGN LLC
-DAF000-DAFFFF     (base 16)		INNOVATIVE CONCEPTS AND DESIGN LLC
-				107 Trumbull Street, Bldg F8
-				Elizabeth  NJ  07206
-				US
-
-70-B3-D5   (hex)		Contec Americas Inc.
-363000-363FFF     (base 16)		Contec Americas Inc.
-				3991 Sarno Rd
-				Melbourne  FL  32934
-				US
-
-70-B3-D5   (hex)		GABO 
-757000-757FFF     (base 16)		GABO 
-				Gyeonggido
-				Ansan    15617
-				KR
-
-70-B3-D5   (hex)		Pro-Digital Projetos Eletronicos Ltda
-56D000-56DFFF     (base 16)		Pro-Digital Projetos Eletronicos Ltda
-				RUA SENADOR SARAIVA 200
-				CURITIBA  PR  80510300
-				BR
-
-70-B3-D5   (hex)		Season Electronics Ltd
-67E000-67EFFF     (base 16)		Season Electronics Ltd
-				600 Nest Business Park 
-				Havant  Hampshire  PO9 5TL
-				GB
-
-70-B3-D5   (hex)		SUS Corporation
-422000-422FFF     (base 16)		SUS Corporation
-				6F, S-patio Bldg. 14-25 Minami-cho, Suruga-ku,
-				Shizuoka city,  Shizuoka  422-8067
-				JP
-
-70-B3-D5   (hex)		Emporia Renewable Energy Corp
-EB8000-EB8FFF     (base 16)		Emporia Renewable Energy Corp
-				7901 Shaffer Pkwy
-				Littleton  CO  80127
-				US
-
-70-B3-D5   (hex)		Loma Systems s.r.o.
-5EB000-5EBFFF     (base 16)		Loma Systems s.r.o.
-				U Lomy 1069
-				Dob?any    33441
-				CZ
-
-70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
-606000-606FFF     (base 16)		OOO Research and Production Center Computer Technologies
-				Komsomolsky avenue, 90-17
-				Perm  Perm Region  614010
-				RU
-
-70-B3-D5   (hex)		GSI GeoSolutions International Ltd
-8BC000-8BCFFF     (base 16)		GSI GeoSolutions International Ltd
-				Ahornweg 5A
-				Othmarsingen    5504
-				CH
-
-70-B3-D5   (hex)		CorDes, LLC
-FA9000-FA9FFF     (base 16)		CorDes, LLC
-				20243 Kentucky Oaks Ct
-				Ashburn  VA  20147
-				US
-
-70-B3-D5   (hex)		Yite technology
-321000-321FFF     (base 16)		Yite technology
-				No. 56, Xiaobei Rd., North Dist
-				tainan    70448 
-				TW
-
-70-B3-D5   (hex)		Wartsila Voyage Limited
-9D4000-9D4FFF     (base 16)		Wartsila Voyage Limited
-				13-18 City Quay
-				Dublin 2    D02 ED70
-				IE
-
-70-B3-D5   (hex)		Typhon Treatment Systems Ltd
-F97000-F97FFF     (base 16)		Typhon Treatment Systems Ltd
-				Unit 10, Newton Gate Industrial Estate
-				Penrith  Cumbria  CA11 0BF
-				GB
-
-70-B3-D5   (hex)		Franz Kessler GmbH
-C44000-C44FFF     (base 16)		Franz Kessler GmbH
-				Franz-Kessler-Str. 2
-				Bad Buchau  Baden-Wuerttemberg  88422
-				DE
-
-70-B3-D5   (hex)		WIKA Alexander Wiegand SE & Co. KG
-97B000-97BFFF     (base 16)		WIKA Alexander Wiegand SE & Co. KG
-				Alexander-Wiegand-Strasse 30
-				Klingenberg    63911
-				DE
-
-70-B3-D5   (hex)		Conserv Solutions
-310000-310FFF     (base 16)		Conserv Solutions
-				2222 2nd Ave N. Suite 204
-				Birmingham  AL  35203
-				US
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-03E000-03EFFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-DA9000-DA9FFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		OOO NTC Rotek
-62C000-62CFFF     (base 16)		OOO NTC Rotek
-				Malaya Krasnoselskaya str., build. 2/8, block 7, floor 4, dep. II, room 5
-				Moscow  Moscow  107140
-				RU
-
-70-B3-D5   (hex)		SHANDHAI LANDLEAF ARCHITECTURE TECHNOLOGY CO.,LTD
-B5D000-B5DFFF     (base 16)		SHANDHAI LANDLEAF ARCHITECTURE TECHNOLOGY CO.,LTD
-				Real Power Innovation Center tower NO.2,7Floor,No.51 Zhengxue Road,Yangpu District
-				SHANGHAI  SHANGHAI  200433
-				CN
-
-70-B3-D5   (hex)		ITG.CO.LTD
-281000-281FFF     (base 16)		ITG.CO.LTD
-				617, anyang Megavally, 268, Hagui-ro, Dongan-gu
-				Anyang    14056
-				KR
-
-70-B3-D5   (hex)		Utrend Technology (Shanghai) Co., Ltd
-7C6000-7C6FFF     (base 16)		Utrend Technology (Shanghai) Co., Ltd
-				Building #3-P, No 780 Cailun Road
-				Shanghai  Shanghai  201203
-				CN
-
-70-B3-D5   (hex)		Olympus NDT Canada
-5BB000-5BBFFF     (base 16)		Olympus NDT Canada
-				3415 rue Pierre Ardouin
-				Québec  Québec  G1P 0B3
-				CA
-
-70-B3-D5   (hex)		Dosepack India LLP
-2B5000-2B5FFF     (base 16)		Dosepack India LLP
-				429/A,Kalasagar Shopping Hub, Sattadhar Cross Road
-				Ahmedabad  Gujarat  380061
-				IN
-
-70-B3-D5   (hex)		Serveron Corporation
-FF4000-FF4FFF     (base 16)		Serveron Corporation
-				13550 SW Karl Braun Drive
-				Beaverton  OR  97077
-				US
-
-70-B3-D5   (hex)		TIAMA
-8BA000-8BAFFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-70-B3-D5   (hex)		IAAN Co., Ltd
-67F000-67FFFF     (base 16)		IAAN Co., Ltd
-				4F 261 Yangjae-dong, Seocho-gu
-				Seoul    06777
-				KR
-
-70-B3-D5   (hex)		Stealth Communications
-86A000-86AFFF     (base 16)		Stealth Communications
-				1 Penn Plaza, Suite 6308
-				New York  NY  10119
-				US
-
-70-B3-D5   (hex)		Pneumax S.p.A.
-A60000-A60FFF     (base 16)		Pneumax S.p.A.
-				Via Cascina Barbellina 10
-				Lurano    24050
-				IT
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-F80000-F80FFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		ENLESS WIRELESS
-4FD000-4FDFFF     (base 16)		ENLESS WIRELESS
-				45 TER AVENUE DE VERDUN
-				BRUGES    33520
-				FR
-
-70-B3-D5   (hex)		Newtec A/S
-18F000-18FFFF     (base 16)		Newtec A/S
-				Stærmosegårdsvej  18
-				Odense SV  Region Syd  5230
-				DK
-
-70-B3-D5   (hex)		AUDIO VISUAL DIGITAL SYSTEMS
-A7F000-A7FFFF     (base 16)		AUDIO VISUAL DIGITAL SYSTEMS
-				PLOT NO.180 PHASE V SECTOR56, HSIIDC I.E KUNDLI SONEPAT
-				SONEPAT  HARYANA  131028
-				IN
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-1BF000-1BFFFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Cetitec GmbH
-B36000-B36FFF     (base 16)		Cetitec GmbH
-				Mannheimer Strasse 17
-				Pforzheim    75179
-				DE
-
-70-B3-D5   (hex)		DONG IL VISION Co., Ltd.
-038000-038FFF     (base 16)		DONG IL VISION Co., Ltd.
-				#9 Ftrek tower, 11-25, Simindaero 327 beongil,Dongan-gu
-				Anyangi-Si  Gyeonggi-Do  14055
-				KR
-
-70-B3-D5   (hex)		Kamacho Scale Co., Ltd.
-385000-385FFF     (base 16)		Kamacho Scale Co., Ltd.
-				2246 Mure
-				Takamatsu-shi  Kagawa-ken  761-0196
-				JP
-
-70-B3-D5   (hex)		Visual Robotics
-0F4000-0F4FFF     (base 16)		Visual Robotics
-				38 Irving Rd
-				Eugene  OR  97404
-				US
-
-70-B3-D5   (hex)		Vessel Technology Ltd
-44D000-44DFFF     (base 16)		Vessel Technology Ltd
-				Banchory Business Centre, Burn O'Bennie Road
-				Banchory  Aberdeenshire  AB31 5ZU
-				GB
-
-70-B3-D5   (hex)		Munters
-FA8000-FA8FFF     (base 16)		Munters
-				Hasivim 18
-				Pethch Tikva  Israel  4959376
-				IL
-
-70-B3-D5   (hex)		TEX COMPUTER SRL 
-6C2000-6C2FFF     (base 16)		TEX COMPUTER SRL 
-				VIA MERCADANTE 35
-				CATTOLICA   RIMINI   47841
-				IT
-
-70-B3-D5   (hex)		TangRen C&S CO., Ltd
-3FC000-3FCFFF     (base 16)		TangRen C&S CO., Ltd
-				3a-5d, Tingwei Daxia, Tingwei Industrial Park, No. 6, Liufang Road, Bao'an District
-				Shenzhen  Guangdong  518052
-				CN
-
-70-B3-D5   (hex)		LOTES TM OOO
-EA5000-EA5FFF     (base 16)		LOTES TM OOO
-				Barklaya 22, str.1
-				Moscow    121309
-				RU
-
-70-B3-D5   (hex)		Yi An Electronics Co., Ltd
-F28000-F28FFF     (base 16)		Yi An Electronics Co., Ltd
-				5F.-2, No. 81, Sec. 1, Xintai 5th Rd., Xizhi Dist
-				 New Taipei City    22101
-				TW
-
-70-B3-D5   (hex)		Ariston Thermo s.p.a.
-3D6000-3D6FFF     (base 16)		Ariston Thermo s.p.a.
-				Via Aristide Merloni 45
-				Fabriano  Ancona  60044
-				IT
-
-70-B3-D5   (hex)		MG s.r.l.
-130000-130FFF     (base 16)		MG s.r.l.
-				via Monte Bianco, 1
-				Solbiate Olona  VA  21058
-				IT
-
-70-B3-D5   (hex)		DORLET SAU
-639000-639FFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		OOO ORION-R
-047000-047FFF     (base 16)		OOO ORION-R
-				Novoselov str., 40A, room N200
-				Ryazan    390048
-				RU
-
-70-B3-D5   (hex)		Glory Technology Service Inc.
-801000-801FFF     (base 16)		Glory Technology Service Inc.
-				3F., No.43-1, Ln. 11, Sec. 6, Minquan E. Rd
-				Taipei City   Neihu Dist  114
-				TW
-
-70-B3-D5   (hex)		Toolplanet Co., Ltd.
-4B5000-4B5FFF     (base 16)		Toolplanet Co., Ltd.
-				43-2 Himigaike-cho
-				Gifu-shi  Gifu  500-8122
-				JP
-
-70-B3-D5   (hex)		Postmark Incorporated 
-CBB000-CBBFFF     (base 16)		Postmark Incorporated 
-				3197 Duncan Lane
-				San Luis Obispo  CA  93401
-				US
-
-70-B3-D5   (hex)		Abbott Diagnostics Technologies AS
-53F000-53FFFF     (base 16)		Abbott Diagnostics Technologies AS
-				P. O.  Box 6863 Rodeløkka
-				Oslo  Oslo  0504
-				NO
-
-70-B3-D5   (hex)		Surion (Pty) Ltd
-7FC000-7FCFFF     (base 16)		Surion (Pty) Ltd
-				205 Park Corner, 2 Bolton road, Rosebank
-				JOHANNESBURG NORTH  Gauteng  2193
-				ZA
-
-70-B3-D5   (hex)		REO AG
-8E7000-8E7FFF     (base 16)		REO AG
-				Brühlerstr. 100
-				Solingen    42657
-				DE
-
-70-B3-D5   (hex)		GIORDANO CONTROLS SPA
-95D000-95DFFF     (base 16)		GIORDANO CONTROLS SPA
-				VIA PARALLELA 2/4
-				VILLA BARTOLOMEA  IT  37049
-				IT
-
-70-B3-D5   (hex)		Global Power Products
-3B1000-3B1FFF     (base 16)		Global Power Products
-				225 Arnold Road
-				Lawrenceville    30044
-				US
-
-70-B3-D5   (hex)		Sankyo Intec Co,ltd
-E7F000-E7FFFF     (base 16)		Sankyo Intec Co,ltd
-				127 Tokimata
-				Iida-shi  Nagano-ken  399-2563
-				JP
-
-70-B3-D5   (hex)		olympus-ossa
-5D9000-5D9FFF     (base 16)		olympus-ossa
-				48 woerd ave
-				waltham  MA  02453
-				US
-
-70-B3-D5   (hex)		EnergizeEV
-EB6000-EB6FFF     (base 16)		EnergizeEV
-				#160, 1684 Decoto Road
-				Union City  CA  94587
-				US
-
-70-B3-D5   (hex)		Seznam.cz, a.s., CZ26168685
-F66000-F66FFF     (base 16)		Seznam.cz, a.s., CZ26168685
-				Radlicka 3294/10
-				Praha  Czech Republic  15000
-				CZ
-
-70-B3-D5   (hex)		Nidec asi spa
-D88000-D88FFF     (base 16)		Nidec asi spa
-				s.s11 , ca sordis 4
-				Montebello Vicentino  vicenza  36054
-				IT
-
-70-B3-D5   (hex)		Frog Cellsat Limited
-C5E000-C5EFFF     (base 16)		Frog Cellsat Limited
-				D-213, Sector-63, Noida
-				Noida  Utter Pardesh  201301
-				IN
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-6DC000-6DCFFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Levelup Holding, Inc.
-89F000-89FFFF     (base 16)		Levelup Holding, Inc.
-				3015 W Weldon Ave
-				Phoenix  AZ  85017
-				US
-
-70-B3-D5   (hex)		Cavagna Group Spa
-1B2000-1B2FFF     (base 16)		Cavagna Group Spa
-				Via Statale 11/13
-				Ponte S.Marco di Calcinato (BS)    25011
-				IT
-
-70-B3-D5   (hex)		RTA srl
-32B000-32BFFF     (base 16)		RTA srl
-				Via Mattei Fraz. Divisa
-				Marcignago  PV  27020
-				IT
-
-70-B3-D5   (hex)		RF-Tuote Oy
-3AC000-3ACFFF     (base 16)		RF-Tuote Oy
-				Joensuunkatu 13
-				Salo  246  24130
-				FI
-
-70-B3-D5   (hex)		Shanghai Junqian Sensing Technology Co., LTD
-468000-468FFF     (base 16)		Shanghai Junqian Sensing Technology Co., LTD
-				Room 602,Building 1,NO.760,Xinjunhuan Road, Caohejing High-Tech Park
-				Shanghai  Shanghai  201114
-				CN
-
-70-B3-D5   (hex)		NooliTIC
-E51000-E51FFF     (base 16)		NooliTIC
-				165 avenue de bretagne
-				LILLE    59000
-				FR
-
-70-B3-D5   (hex)		Simplified MFG
-66F000-66FFFF     (base 16)		Simplified MFG
-				1707 S Gilmore Cir
-				Mesa  AZ  85206
-				US
-
-70-B3-D5   (hex)		Sphere of economical technologies Ltd
-1C1000-1C1FFF     (base 16)		Sphere of economical technologies Ltd
-				132, 7-ya Liniya Str.
-				Omsk  Omskaya oblast  644021
-				RU
-
-70-B3-D5   (hex)		Scenario Automation
-43C000-43CFFF     (base 16)		Scenario Automation
-				Rua Paulo Elias, 216
-				São Carlos  São Paulo  13564400
-				BR
-
-70-B3-D5   (hex)		LACS SRL
-F4A000-F4AFFF     (base 16)		LACS SRL
-				VIA MONTE NERO 4
-				ROSA'  VI  36027
-				IT
-
-70-B3-D5   (hex)		Orion Power Systems, Inc.
-110000-110FFF     (base 16)		Orion Power Systems, Inc.
-				2939 W. Beaver Street
-				Jacksonville  FL  32254
-				US
-
-70-B3-D5   (hex)		Sicon srl
-EAF000-EAFFFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Garmo Instruments S.L.
-C02000-C02FFF     (base 16)		Garmo Instruments S.L.
-				Polig. Malpica, Calle E, 32-39, nave 43
-				Zaragoza  Aragon   50016
-				ES
-
-70-B3-D5   (hex)		King-On Technology Ltd.
-D35000-D35FFF     (base 16)		King-On Technology Ltd.
-				13F, No.207, Sec#3, Beixin Rd., Xindian District.
-				New Taipei City  Taiwan  23143
-				TW
-
-70-B3-D5   (hex)		BRS Sistemas Eletrônicos
-3CD000-3CDFFF     (base 16)		BRS Sistemas Eletrônicos
-				Rua Gomes de Freitas, 491 / 204
-				Porto Alegre  RS  91380-000
-				BR
-
-70-B3-D5   (hex)		Nuance Hearing Ltd.
-AE4000-AE4FFF     (base 16)		Nuance Hearing Ltd.
-				Raoul Wallenberg 24, Building A1, Floor 3
-				Tel Aviv    6971920
-				IL
-
-70-B3-D5   (hex)		HONG JIANG ELECTRONICS CO., LTD.
-E64000-E64FFF     (base 16)		HONG JIANG ELECTRONICS CO., LTD.
-				9F, No. 649-3, Zhong Zheng Rd.,, Xin Zhuang Dist., New Taipei City,, TAIWAN(R.O.C.)
-				24257  Taiwan  SHINJUANG
-				TW
-
-70-B3-D5   (hex)		Yongtong tech
-2CB000-2CBFFF     (base 16)		Yongtong tech
-				D18,NO.6 Road HuangChunBei
-				TianHe  GuangZhou  515800
-				CN
-
-70-B3-D5   (hex)		Malin Space Science System
-FE5000-FE5FFF     (base 16)		Malin Space Science System
-				5880 Pacific Center Blvd 
-				San Diego  CA  92121
-				US
-
-70-B3-D5   (hex)		OLEDCOMM
-7D3000-7D3FFF     (base 16)		OLEDCOMM
-				10-12 avenue de l'Europe
-				Vélizy Villacoublay  Ile de France  78140
-				FR
-
-70-B3-D5   (hex)		Wexiodisk AB
-905000-905FFF     (base 16)		Wexiodisk AB
-				Mardvagen 4
-				Vaxjo  Kronoberg  352 45
-				SE
-
-70-B3-D5   (hex)		Klaxoon
-DB3000-DB3FFF     (base 16)		Klaxoon
-				3 av de Belle Fontaine
-				Cesson-Sevigne    35510
-				FR
-
-70-B3-D5   (hex)		ECoCoMS Ltd.
-5CB000-5CBFFF     (base 16)		ECoCoMS Ltd.
-				BIC-ISOT, Tzarigradsko shose blvd., 7-th km, Corpus 3, fl. 4,
-				Sofia  BG  1784
-				BG
-
-70-B3-D5   (hex)		MetCom Solutions GmbH
-D18000-D18FFF     (base 16)		MetCom Solutions GmbH
-				Marie-Curie-Str. 19
-				Mannheim  Baden-Wuerttemberg  68219
-				DE
-
-70-B3-D5   (hex)		BeiLi eTek (Zhangjiagang) Co., Ltd.
-D53000-D53FFF     (base 16)		BeiLi eTek (Zhangjiagang) Co., Ltd.
-				Dongnan Industrial Park, Nanfeng Town
-				Zhangjiagang  Jiangsu  215619
-				CN
-
-70-B3-D5   (hex)		Konzept Informationssysteme GmbH
-71C000-71CFFF     (base 16)		Konzept Informationssysteme GmbH
-				Am Weiher 13
-				Meersburg    88709
-				DE
-
-70-B3-D5   (hex)		ABECO Industrie Computer GmbH
-F02000-F02FFF     (base 16)		ABECO Industrie Computer GmbH
-				Industriestrasse 2
-				Straelen  NRW  47638
-				DE
-
-70-B3-D5   (hex)		Abbott Diagnostics Technologies AS
-DDE000-DDEFFF     (base 16)		Abbott Diagnostics Technologies AS
-				P. O.  Box 6863 Rodeløkka
-				Oslo  Oslo  0504
-				NO
-
-70-B3-D5   (hex)		PuS GmbH und Co. KG
-09D000-09DFFF     (base 16)		PuS GmbH und Co. KG
-				Hainstr. 13
-				Gera  Germany  07545
-				DE
-
-70-B3-D5   (hex)		Partilink Inc.
-6A7000-6A7FFF     (base 16)		Partilink Inc.
-				2F-2, No.18, Ln. 48. Xingshan Rd, Neihu Dist.
-				Taipei     114
-				TW
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-B22000-B22FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				1-4-30
-				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Laser Imagineering Vertriebs GmbH
-3EE000-3EEFFF     (base 16)		Laser Imagineering Vertriebs GmbH
-				Rudolf-Diesel-Weg 5
-				Moelln    23879
-				DE
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-1BA000-1BAFFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		Serveron / Qualitrol
-B1C000-B1CFFF     (base 16)		Serveron / Qualitrol
-				13550 SW Karl Braun Drive
-				Beaverton  OR  97005
-				US
-
-70-B3-D5   (hex)		Gentec
-83D000-83DFFF     (base 16)		Gentec
-				2625 Dalton
-				Quebec    G1P 3S9
-				CA
-
-70-B3-D5   (hex)		Xirgo Technologies LLC
-1A2000-1A2FFF     (base 16)		Xirgo Technologies LLC
-				188 Camino Ruiz
-				Camarillo  CA  93012
-				US
-
-70-B3-D5   (hex)		HAN CHANG
-859000-859FFF     (base 16)		HAN CHANG
-				171, Gasan digital 1-ro, Geumcheon-gu, Seoul, Republic of Korea
-				Seoul  Geumcheon-gu, Seoul  08503
-				KR
-
-70-B3-D5   (hex)		Daatrics LTD
-B69000-B69FFF     (base 16)		Daatrics LTD
-				4th Floor, 86-90 Paul Street
-				LONDON    EC2A 4NE
-				GB
-
-70-B3-D5   (hex)		Guangdong Transtek Medical Electronics Co., Ltd.
-8D4000-8D4FFF     (base 16)		Guangdong Transtek Medical Electronics Co., Ltd.
-				Zone A, No.105, Dongli Road, Torch Development District
-				Zhongshan  Guangdong  528437
-				CN
-
-70-B3-D5   (hex)		Williams Sound LLC
-58B000-58BFFF     (base 16)		Williams Sound LLC
-				10300 Valley View Road
-				Eden Prairie  MN  55344
-				US
-
-70-B3-D5   (hex)		BrainboxAI Inc
-E44000-E44FFF     (base 16)		BrainboxAI Inc
-				2075 boul Robert-Bourassa, Suite 500
-				MONTREAL  QUEBEC  H3A 2L1
-				CA
-
-70-B3-D5   (hex)		Cardinal Kinetic
-09C000-09CFFF     (base 16)		Cardinal Kinetic
-				2748 Circleport Drive
-				Erlanger  KY  41018
-				US
-
-70-B3-D5   (hex)		Sicon srl
-6C8000-6C8FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Private
-A31000-A31FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Clockwork Dog
-5D7000-5D7FFF     (base 16)		Clockwork Dog
-				43 Philpot Street
-				London    E1 2JH
-				GB
-
-70-B3-D5   (hex)		SUN ELECTRONICS CO.,LTD.
-D82000-D82FFF     (base 16)		SUN ELECTRONICS CO.,LTD.
-				667-2,Furugori,Misato-machi,Kodama-gun
-				Saitama-ken    367-0111
-				JP
-
-70-B3-D5   (hex)		BIRTECH TECHNOLOGY
-E65000-E65FFF     (base 16)		BIRTECH TECHNOLOGY
-				Ak is Business Center, Tuzla, Istanbul / Turkey
-				Istanbul  Tuzla  34944
-				TR
-
-70-B3-D5   (hex)		Transit Solutions, LLC.
-E68000-E68FFF     (base 16)		Transit Solutions, LLC.
-				114 West Grandview Avenue
-				Zelienople  PA  16063
-				US
-
-70-B3-D5   (hex)		Nuance Hearing Ltd.
-35B000-35BFFF     (base 16)		Nuance Hearing Ltd.
-				Raoul Wallenberg 24, Building A1, Floor 3
-				Tel Aviv    6971920
-				IL
-
-70-B3-D5   (hex)		xTom GmbH
-8B5000-8B5FFF     (base 16)		xTom GmbH
-				Kreuzstr.60
-				Duesseldorf  NRW  40210
-				DE
-
-70-B3-D5   (hex)		E-Controls
-6E2000-6E2FFF     (base 16)		E-Controls
-				PASSATGE GARROTXA, 6
-				SANT BOI DE LLOBREGAT    08830
-				ES
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-B9A000-B9AFFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-1BE000-1BEFFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Integrated Protein Technologies, Inc.
-FAC000-FACFFF     (base 16)		Integrated Protein Technologies, Inc.
-				PO box 1839
-				Evanston  IL  60204
-				US
-
-70-B3-D5   (hex)		GETT Geraetetechnik GmbH
-290000-290FFF     (base 16)		GETT Geraetetechnik GmbH
-				Mittlerer Ring 1
-				Treuen    08233
-				DE
-
-70-B3-D5   (hex)		ABB
-C47000-C47FFF     (base 16)		ABB
-				Fulachstrasse 150
-				Schaffhausen    8200
-				CH
-
-70-B3-D5   (hex)		CREATIVE
-A65000-A65FFF     (base 16)		CREATIVE
-				801 Chenil Bldg. 266 Hwagokro,
-				Gangseogu  seoul  07673
-				KR
-
-70-B3-D5   (hex)		Samwell International Inc
-B42000-B42FFF     (base 16)		Samwell International Inc
-				No. 317-1, Sec.2, An Kang Rd., Hsintien Dist
-				New Taipei City    231
-				TW
-
-70-B3-D5   (hex)		BAE Systems
-AFC000-AFCFFF     (base 16)		BAE Systems
-				1098 Clark Street
-				Endicott  NY  13760
-				US
-
-70-B3-D5   (hex)		Guangzhou Xianhe Technology Engineering Co., Ltd
-C13000-C13FFF     (base 16)		Guangzhou Xianhe Technology Engineering Co., Ltd
-				No. 30-6, Jiantai Road, Dongyong Town, Nansha District
-				Guangzhou  Guangdong  511453
-				CN
-
-70-B3-D5   (hex)		Lightside Instruments AS
-EC2000-EC2FFF     (base 16)		Lightside Instruments AS
-				Thorvald Meyers gate 34A
-				Oslo    0555
-				NO
-
-70-B3-D5   (hex)		Farmobile, LLC
-5A8000-5A8FFF     (base 16)		Farmobile, LLC
-				4001 West 114th Street  Suite 300
-				Leawood  KS  66211
-				US
-
-70-B3-D5   (hex)		i2-electronics
-59E000-59EFFF     (base 16)		i2-electronics
-				Kitazakae 4-13-15-701
-				Urayasu city  Chiba  2790002
-				JP
-
-70-B3-D5   (hex)		EXATEL
-065000-065FFF     (base 16)		EXATEL
-				Perkuna 46
-				Warsaw  Mazowieckie  04-164
-				PL
-
-70-B3-D5   (hex)		Shenzhen Shi Fang Communication Technology Co., Ltd
-E6B000-E6BFFF     (base 16)		Shenzhen Shi Fang Communication Technology Co., Ltd
-				601-6 Mitehuapujing No.9 Jinxiu Mid Road Longtian Street Pingshan Distinct
-				Shenzhen   Guangdong  518118
-				CN
-
-70-B3-D5   (hex)		Kita Kirmizi Takim Bilgi Guvenligi Danismanlik ve Egitim A.S.
-998000-998FFF     (base 16)		Kita Kirmizi Takim Bilgi Guvenligi Danismanlik ve Egitim A.S.
-				Sogutozu mah. Sogutözu cad. A Blok No:2A/47 Cankaya/ANKARA Maltepe V.D. 559 051 3252
-				Ankara  Cankaya  06510
-				TR
-
-70-B3-D5   (hex)		Octopus IoT srl
-AD7000-AD7FFF     (base 16)		Octopus IoT srl
-				Via Acquasanta, 15
-				Salerno  Salerno  84131
-				IT
-
-70-B3-D5   (hex)		ACRIOS Systems s.r.o.
-CEE000-CEEFFF     (base 16)		ACRIOS Systems s.r.o.
-				Tvaruzkova, 2738 
-				Roznov pod  Radhostem  756 61
-				CZ
-
-70-B3-D5   (hex)		SIANA Systems
-82F000-82FFFF     (base 16)		SIANA Systems
-				8979 Carley circle
-				San Diego  CA  92126
-				US
-
-70-B3-D5   (hex)		Günther Spelsberg GmbH + Co. KG
-311000-311FFF     (base 16)		Günther Spelsberg GmbH + Co. KG
-				Im Gewerbepark 1
-				Schalksmühle  NRW  58579
-				DE
-
-70-B3-D5   (hex)		Eneon sp. z o.o.
-E66000-E66FFF     (base 16)		Eneon sp. z o.o.
-				Aleje Jerozolimskie 200
-				Warsaw    02-486
-				PL
-
-70-B3-D5   (hex)		WIZAPPLY CO.,LTD
-8D2000-8D2FFF     (base 16)		WIZAPPLY CO.,LTD
-				1-3-13-5107, Benten
-				Osaka-shi, Minato-ku  Osaka-fu  552-0007
-				JP
-
-70-B3-D5   (hex)		AmericanPharma Technologies
-B4C000-B4CFFF     (base 16)		AmericanPharma Technologies
-				222 N 13th Street   Suite 200
-				Boise  ID  83702
-				US
-
-70-B3-D5   (hex)		ALFI
-B0D000-B0DFFF     (base 16)		ALFI
-				Via Castelletto 20
-				Borgo Ticino  NO  28040
-				IT
-
-70-B3-D5   (hex)		Medipense Inc.
-72B000-72BFFF     (base 16)		Medipense Inc.
-				9145 rue Boivin
-				Montreal  Quebec  H8R 2E5
-				CA
-
-70-B3-D5   (hex)		MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
-7CC000-7CCFFF     (base 16)		MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
-				3-1, Asahi, Nishibiwajima-Cho
-				Kiyosu  Aichi  452-8561
-				JP
-
-70-B3-D5   (hex)		The-Box Development
-F31000-F31FFF     (base 16)		The-Box Development
-				D.D. Eisenhowerstraat 74
-				Groningen  Groningen  9728 RX
-				NL
-
-70-B3-D5   (hex)		MAS Elettronica sas di Mascetti Sandro e C.
-4FB000-4FBFFF     (base 16)		MAS Elettronica sas di Mascetti Sandro e C.
-				Via Risorgimento 16/C
-				Selvazzano Dentro  Padova  35030
-				IT
-
-70-B3-D5   (hex)		DHK Storage, LLC
-915000-915FFF     (base 16)		DHK Storage, LLC
-				13873 Park Center Rd, Ste 510N
-				Herndon  VA  20171
-				US
-
-70-B3-D5   (hex)		Shenzhen Zhiting Technology Co.,Ltd
-FE1000-FE1FFF     (base 16)		Shenzhen Zhiting Technology Co.,Ltd
-				Room 516, Building 4,  Qidi Xiexin science and Technology Park, Longcheng Street
-				Shenzhen  Guangdong  518109
-				CN
-
-70-B3-D5   (hex)		on-systems limited
-5B7000-5B7FFF     (base 16)		on-systems limited
-				615A Jubilee Road
-				Letchworth Garden City  Hertfordshire  SG6 1NE
-				GB
-
-70-B3-D5   (hex)		Blueprint Lab
-FE0000-FE0FFF     (base 16)		Blueprint Lab
-				3-5 Queen St
-				Glebe  NSW  2037
-				AU
-
-70-B3-D5   (hex)		MiraeSignal Co., Ltd
-38C000-38CFFF     (base 16)		MiraeSignal Co., Ltd
-				#701,C-dong Bundang Techno Park Pangyoro 744
-				Bundang-gu Sungnam-si  Kyungkido  13510
-				KR
-
-70-B3-D5   (hex)		LEIDOS
-004000-004FFF     (base 16)		LEIDOS
-				1121 W Reeves
-				Ridgecrest  CA  93555
-				US
-
-70-B3-D5   (hex)		Swiss Timing LTD
-725000-725FFF     (base 16)		Swiss Timing LTD
-				Rue de l'Envers 1
-				Corgemont    2606
-				CH
-
-70-B3-D5   (hex)		Avionica 
-CC0000-CC0FFF     (base 16)		Avionica 
-				9941 West Jessamine St
-				Miami   FL  33157 
-				US
-
-70-B3-D5   (hex)		Nudron IoT Solutions LLP
-6B4000-6B4FFF     (base 16)		Nudron IoT Solutions LLP
-				10, Gitaneel Arcade, Hill Road, Bandra-W
-				Mumbai  Maharashtra  400050
-				IN
-
-70-B3-D5   (hex)		DORLET SAU
-DEB000-DEBFFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		Dadacon GmbH
-B79000-B79FFF     (base 16)		Dadacon GmbH
-				Hammarskjoeldring 75F
-				Frankfurt am Main  Hessen  60439
-				DE
-
-70-B3-D5   (hex)		XIA LLC
-3DC000-3DCFFF     (base 16)		XIA LLC
-				31057 Genstar Road
-				HAYWARD  CA  94544
-				US
-
-70-B3-D5   (hex)		Nordson Corporation
-50B000-50BFFF     (base 16)		Nordson Corporation
-				11475 Lakefield Dr
-				Duluth  GA  30097
-				US
-
-70-B3-D5   (hex)		Jeio Tech 
-720000-720FFF     (base 16)		Jeio Tech 
-				19 Alexander Road, Suite 7
-				Billerica  MA  01821
-				US
-
-70-B3-D5   (hex)		BAB TECHNOLOGIE GmbH
-E19000-E19FFF     (base 16)		BAB TECHNOLOGIE GmbH
-				Hoerder Burgstr.18
-				Dortmund  NRW  44263
-				DE
-
-70-B3-D5   (hex)		Schneider Electric Motion USA
-2E4000-2E4FFF     (base 16)		Schneider Electric Motion USA
-				370 N. Main St.
-				Marlborough  CT  06447
-				US
-
-70-B3-D5   (hex)		Done Design Inc
-928000-928FFF     (base 16)		Done Design Inc
-				930 Delray Drive
-				Forest Hill  MD  21050
-				US
-
-70-B3-D5   (hex)		TESCAN Brno, s.r.o.
-812000-812FFF     (base 16)		TESCAN Brno, s.r.o.
-				Libusina tr.1
-				Brno    62300
-				CZ
-
-70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
-965000-965FFF     (base 16)		LINEAGE POWER PVT LTD.,
-				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
-				BANGALORE  KARNATAKA  560074
-				IN
-
-70-B3-D5   (hex)		China Telecom Fufu Information Technology CO.,LTD
-38E000-38EFFF     (base 16)		China Telecom Fufu Information Technology CO.,LTD
-				22 Shuitou Road, Doumen,Fuzhou
-				Fuzhou  FuJian  350013
-				CN
-
-70-B3-D5   (hex)		Dynim Oy
-CE6000-CE6FFF     (base 16)		Dynim Oy
-				Kirkkokatu 5b
-				Oulu    90100
-				FI
-
-70-B3-D5   (hex)		Beijing Muniulinghang Technology Co., Ltd
-198000-198FFF     (base 16)		Beijing Muniulinghang Technology Co., Ltd
-				C9001 Kangjianbaosheng Square C, No.8 Heiquan Road, Haidian District,
-				Beijing    100192
-				CN
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-35F000-35FFFF     (base 16)		Aplex Technology Inc.
-				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
-				Shenzhen City  Guangdong  518129
-				CN
-
-70-B3-D5   (hex)		TESSA AGRITECH SRL
-F74000-F74FFF     (base 16)		TESSA AGRITECH SRL
-				VIA ALLA CASCATA, 56
-				Trento  Trento  38123
-				IT
-
-70-B3-D5   (hex)		CAR-connect GmbH
-81F000-81FFFF     (base 16)		CAR-connect GmbH
-				Am Egelingsberg 8
-				Leiferde  Niedersachsen  38542
-				DE
-
-70-B3-D5   (hex)		MBJ
-E03000-E03FFF     (base 16)		MBJ
-				Jochim-Klindt-Straße 7
-				Ahrensburg  Schleswig Holstein  22926
-				DE
-
-70-B3-D5   (hex)		Code Blue Corporation 
-271000-271FFF     (base 16)		Code Blue Corporation 
-				259 Hedcor Street
-				Holland  MI  49423
-				US
-
-70-B3-D5   (hex)		Fischer Connectors
-BF7000-BF7FFF     (base 16)		Fischer Connectors
-				11 Waterberry drive
-				Waterlooville  Hampshire  PO7 7YH
-				GB
-
-70-B3-D5   (hex)		VK Integrated Systems
-A8F000-A8FFFF     (base 16)		VK Integrated Systems
-				810 Crossland Ave
-				Clarksville  TN  37040
-				US
-
-70-B3-D5   (hex)		Wisebox.,Co.Ltd
-AC2000-AC2FFF     (base 16)		Wisebox.,Co.Ltd
-				23, Geoje-daero 108beon-gil, Yeonje-gu
-				Busan    47547
-				KR
-
-8C-1F-64   (hex)		DB Systel GmbH
-991000-991FFF     (base 16)		DB Systel GmbH
-				Jürgen-Ponto-Platz1
-				Frankfurt  Hessen  60329
-				DE
-
-8C-1F-64   (hex)		Katronic AG & Co. KG
-C41000-C41FFF     (base 16)		Katronic AG & Co. KG
-				Gießerweg 5
-				Wernigerode    38855
-				DE
-
-8C-1F-64   (hex)		NAGTECH LLC
-29F000-29FFFF     (base 16)		NAGTECH LLC
-				12A, Krasnolesya Str., off 507
-				Ekaterinburg  Sverdlovskaya oblast  620110
-				RU
-
-8C-1F-64   (hex)		ROBOfiber, Inc.
-CF1000-CF1FFF     (base 16)		ROBOfiber, Inc.
-				3000F Danville Blvd, #300
-				Alamo  CA  94507
-				US
-
-8C-1F-64   (hex)		QLM Technology Ltd
-3A4000-3A4FFF     (base 16)		QLM Technology Ltd
-				Unit DX, Albert Road
-				Bristol    BS20XJ
-				GB
-
-8C-1F-64   (hex)		Abiman Engineering
-C03000-C03FFF     (base 16)		Abiman Engineering
-				34, Pureundeulpan-ro 567 Beon-gil, Paltan-myeon
-				Hwaseong-si  Gyeonggi-do  18529
-				KR
-
-8C-1F-64   (hex)		Integer.pl S.A.
-438000-438FFF     (base 16)		Integer.pl S.A.
-				Wielicka 28
-				Krakow    30-552
-				PL
-
-8C-1F-64   (hex)		LLC TC Vympel
-947000-947FFF     (base 16)		LLC TC Vympel
-				Bolshaya Serpukhovskaya street 25, bld. 2, 1 st floor, room III
-				Moscow    115093
-				RU
-
-8C-1F-64   (hex)		castcore
-204000-204FFF     (base 16)		castcore
-				D1210, 947 Hanam-daero
-				Hanam-si, Gyeonggi-do    12982
-				KR
-
-8C-1F-64   (hex)		Zhejiang Laolan Information Technology Co., Ltd
-801000-801FFF     (base 16)		Zhejiang Laolan Information Technology Co., Ltd
-				Zhejiang Laolan Information Technology Co., Ltd
-				Hangzhou  Zhejiang   311700
-				CN
-
-8C-1F-64   (hex)		BlueSword Intelligent Technology Co., Ltd.
-AAB000-AABFFF     (base 16)		BlueSword Intelligent Technology Co., Ltd.
-				No. 909, Longaobei Road,Jinan,Shandong
-				Jinan  Shandong  250101
-				CN
-
-8C-1F-64   (hex)		Aton srl
-19C000-19CFFF     (base 16)		Aton srl
-				Via Guido Rossa 5
-				Spilamberto  MO  41057
-				IT
-
-8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
-AED000-AEDFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-8C-1F-64   (hex)		RealWear
-9C1000-9C1FFF     (base 16)		RealWear
-				600 Hathaway Rd, Ste 105
-				Vancouver  WA  98661
-				US
-
-8C-1F-64   (hex)		Jacquet Dechaume
-7C8000-7C8FFF     (base 16)		Jacquet Dechaume
-				1 Rue Louis Armand
-				Le Plessis Bouchard    95130
-				FR
-
-8C-1F-64   (hex)		Jemac Sweden AB
-304000-304FFF     (base 16)		Jemac Sweden AB
-				Trångsundsvägen 20A
-				Kalmar    39356
-				SE
-
-8C-1F-64   (hex)		HEINEN ELEKTRONIK GmbH
-AA4000-AA4FFF     (base 16)		HEINEN ELEKTRONIK GmbH
-				Hunsrückstraße 7
-				HAAN  NRW  42781
-				DE
-
-8C-1F-64   (hex)		Sanskruti
-4FA000-4FAFFF     (base 16)		Sanskruti
-				76/121, Mohit House, 2nd cross, Dasarahali Main Road, buvaneswari Nagar
-				bangalore  karnataka  560024
-				IN
-
-8C-1F-64   (hex)		Figment Design Laboratories
-445000-445FFF     (base 16)		Figment Design Laboratories
-				113 11th Avenue
-				Johannesburg  Guateng  2170
-				ZA
-
-8C-1F-64   (hex)		SVMS
-3B5000-3B5FFF     (base 16)		SVMS
-				ZA de Berroueta
-				Urrugne    64122
-				FR
-
-8C-1F-64   (hex)		JUSTMORPH PTE. LTD.
-AB5000-AB5FFF     (base 16)		JUSTMORPH PTE. LTD.
-				29A Mosque Street
-				Singapore    059507
-				SG
-
-8C-1F-64   (hex)		INFOSTECH Co., Ltd.
-F86000-F86FFF     (base 16)		INFOSTECH Co., Ltd.
-				26, Namsan-ro 39beon-gil, Uichang-gu
-				Changwon-si  Gyeongsangnam-do  51368
-				KR
-
-8C-1F-64   (hex)		NEXCONTECH
-53D000-53DFFF     (base 16)		NEXCONTECH
-				138, Ilsan-ro, Ilsandong-gu, Goyang-si
-				Gyeonggi-do    10442
-				KR
-
-8C-1F-64   (hex)		Grupo Epelsa S.L.
-D54000-D54FFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-8C-1F-64   (hex)		Daedalean AG
-E43000-E43FFF     (base 16)		Daedalean AG
-				Albisriederstrasse 199
-				Zürich    8047
-				CH
-
-8C-1F-64   (hex)		GIORDANO CONTROLS SPA
-242000-242FFF     (base 16)		GIORDANO CONTROLS SPA
-				VIA PARALLELA 2/4
-				VILLA BARTOLOMEA  IT  37049
-				IT
-
-8C-1F-64   (hex)		Eloy Water
-5D3000-5D3FFF     (base 16)		Eloy Water
-				Rue des Spinettes, 13
-				Sprimont  Liège  4140
-				BE
-
-8C-1F-64   (hex)		Spacee
-C50000-C50FFF     (base 16)		Spacee
-				3752 Arapaho Rd
-				Addison  TX  75001
-				US
-
-8C-1F-64   (hex)		TIAMA
-63B000-63BFFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-8C-1F-64   (hex)		Luxshare Electronic Technology (Kunshan) LTD
-E98000-E98FFF     (base 16)		Luxshare Electronic Technology (Kunshan) LTD
-				No.158,Jinchang Road,Jinxi Town,Kunshan City,Jiangsu Province,215324, China
-				Kunshan  Jiangsu  215324
-				CN
-
-8C-1F-64   (hex)		GTR Industries
-E73000-E73FFF     (base 16)		GTR Industries
-				1020 Lawrence Ave West
-				North York  Ontario  M6A 1C8
-				CA
-
-8C-1F-64   (hex)		ReliaSpeak Information Technology Co., Ltd.
-CA6000-CA6FFF     (base 16)		ReliaSpeak Information Technology Co., Ltd.
-				Room 905, Ruide Building, No.5 Yumin East Road, Xicheng District, Beijing, China
-				Beijing    100029
-				CN
-
-8C-1F-64   (hex)		XCOM Labs
-30A000-30AFFF     (base 16)		XCOM Labs
-				9450 Carroll Park Drive
-				San Diego  CA  92121
-				US
-
-8C-1F-64   (hex)		Barkodes Bilgisayar Sistemleri Bilgi Iletisim ve Y
-B0C000-B0CFFF     (base 16)		Barkodes Bilgisayar Sistemleri Bilgi Iletisim ve Y
-				Cevizli Mahallesi, Nedret Sokak, No: 4, Barkodes Plaza, Maltepe
-				Istanbul    34846
-				TR
-
-8C-1F-64   (hex)		SAN-AI Electronic Industries Co.,Ltd.
-FBD000-FBDFFF     (base 16)		SAN-AI Electronic Industries Co.,Ltd.
-				2-4-15
-				Fukura,Yokohama Shi  Kanagawa Ken  236-0004
-				JP
-
-8C-1F-64   (hex)		AS Strömungstechnik GmbH
-1D1000-1D1FFF     (base 16)		AS Strömungstechnik GmbH
-				Elly-Beinhorn-Straße 7
-				Ostfildern    73760
-				DE
-
-8C-1F-64   (hex)		KMtronic ltd
-6EA000-6EAFFF     (base 16)		KMtronic ltd
-				Dobri Czintulov 28A str.
-				 Gorna Oryahovica  VT  5100
-				BG
-
-8C-1F-64   (hex)		Hunan Oushi Electronic Technology Co.,Ltd
-D78000-D78FFF     (base 16)		Hunan Oushi Electronic Technology Co.,Ltd
-				Yueliangdao street, Wangcheng District
-				Changsha    410200
-				CN
-
-8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
-923000-923FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-8C-1F-64   (hex)		Orlaco Products B.V.
-8D1000-8D1FFF     (base 16)		Orlaco Products B.V.
-				Albert Plesmanstraat 42
-				Barneveld    3772MN
-				NL
-
-8C-1F-64   (hex)		ALPHA Corporation
-8E2000-8E2FFF     (base 16)		ALPHA Corporation
-				Product Development Department, Housing Hardware Devision
-				Yokohama  Kanagawa  236-0004
-				JP
-
-8C-1F-64   (hex)		ikan International LLC
-0F9000-0F9FFF     (base 16)		ikan International LLC
-				11500 S Sam Houston Pkwy W
-				HOUSTON  TX  77031
-				US
-
-8C-1F-64   (hex)		SURYA ELECTRONICS
-534000-534FFF     (base 16)		SURYA ELECTRONICS
-				Plot no115 ALEAP Industrial Estate Gajularamaram village, Quthubullapur Mandal
-				HYDERABAD  Telangana  500055
-				IN
-
-8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
-AD2000-AD2FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				1-4-30
-				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
-				JP
-
-8C-1F-64   (hex)		FLOYD inc.
-07E000-07EFFF     (base 16)		FLOYD inc.
-				121, Digital-ro, Geumcheon-gu, Acegasan Tower, rm 1506
-				seoul  Seoul  08505
-				KR
-
-8C-1F-64   (hex)		Dorsett Technologies Inc
-973000-973FFF     (base 16)		Dorsett Technologies Inc
-				100 Woodlyn Dr
-				Yadkinville  NC  27055
-				US
-
-8C-1F-64   (hex)		VAF Co.
-1E1000-1E1FFF     (base 16)		VAF Co.
-				No.3,6th Alley , Sabunchi St., Tehran 
-				Tehran    1533655514
-				IR
-
-8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
-9F2000-9F2FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		IndiNatus (IndiNatus India Private Limited)
-F1B000-F1BFFF     (base 16)		IndiNatus (IndiNatus India Private Limited)
-				D-92/6, 2nd Floor, Okhla Industrial Area, Okhla Phase -I
-				New Delhi  New Delhi  110020
-				IN
-
-8C-1F-64   (hex)		ePlant, Inc.
-9F0000-9F0FFF     (base 16)		ePlant, Inc.
-				350 2nd St, STE 6
-				Los Altos  CA  94022
-				US
-
-8C-1F-64   (hex)		Canway Technology GmbH
-CDF000-CDFFFF     (base 16)		Canway Technology GmbH
-				Graf-Zeppelin-Ring 13
-				Ostbevern    48346
-				DE
-
-8C-1F-64   (hex)		Blik Sensing B.V.
-512000-512FFF     (base 16)		Blik Sensing B.V.
-				Duivenkamp 351
-				Maarssen    3607BB
-				NL
-
-8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
-CA1000-CA1FFF     (base 16)		Pantherun Technologies Pvt Ltd
-				311 6th main road Hal 2nd stage
-				Bangalore  Karnataka  560038
-				IN
-
-8C-1F-64   (hex)		Sirius LLC
-BEE000-BEEFFF     (base 16)		Sirius LLC
-				Suvorova street, 3A
-				Gubaha  Permskiy kray  618250
-				RU
-
-8C-1F-64   (hex)		INFRASAFE/ ADVANTOR SYSTEMS 
-971000-971FFF     (base 16)		INFRASAFE/ ADVANTOR SYSTEMS 
-				12612 CHALLENGER PARKWAY 
-				ORLANDO  FL  32826
-				US
-
-8C-1F-64   (hex)		Gogo Business Aviation
-CD8000-CD8FFF     (base 16)		Gogo Business Aviation
-				105 Edgeview Dr., Suite 300
-				Broomfield  CO  80021
-				US
-
-8C-1F-64   (hex)		Com Video Security Systems Co., Ltd.
-328000-328FFF     (base 16)		Com Video Security Systems Co., Ltd.
-				 No.1, Aly. 2, Ln. 2, Sec. 1, Minsheng N. Rd. Gueishan Dist.,
-				Taoyuan City     33391
-				TW
-
-8C-1F-64   (hex)		TimeMachines Inc.
-7B8000-7B8FFF     (base 16)		TimeMachines Inc.
-				300 S 68th Street Place, Suite 100
-				Lincoln  NE  68510
-				US
-
-8C-1F-64   (hex)		GJD Manufacturing
-A07000-A07FFF     (base 16)		GJD Manufacturing
-				Unit 2, Birch Business Park, Whittle Lane
-				Heywood    OL10 2SX
-				GB
-
-8C-1F-64   (hex)		HME Co.,ltd
-780000-780FFF     (base 16)		HME Co.,ltd
-				292,Nukata
-				Kuwana  Mie  511-0911
-				JP
-
-8C-1F-64   (hex)		Landinger
-256000-256FFF     (base 16)		Landinger
-				Thalkirchen 19
-				Bad Endorf  Bavaria  83093
-				DE
-
-70-B3-D5   (hex)		Tabology
-85C000-85CFFF     (base 16)		Tabology
-				4 Gleneagles Court
-				Wakefield  UK  WF6 1WW
-				GB
-
-8C-1F-64   (hex)		Potter Electric Signal Company
-57B000-57BFFF     (base 16)		Potter Electric Signal Company
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Fluid Components Intl
-A1D000-A1DFFF     (base 16)		Fluid Components Intl
-				1755 La Costa Meadows Drive
-				San Marcos  CA  92078
-				US
-
-8C-1F-64   (hex)		Porsche engineering
-DCA000-DCAFFF     (base 16)		Porsche engineering
-				Radlicka 714/113a
-				Praha 5    158 00
-				CZ
-
-8C-1F-64   (hex)		Recab Sweden AB
-8D4000-8D4FFF     (base 16)		Recab Sweden AB
-				Västberga Allé 5
-				Hägersten    126 30
-				SE
-
-70-B3-D5   (hex)		Nautel LTD
-EB0000-EB0FFF     (base 16)		Nautel LTD
-				10089 Peggy's Cove Road
-				Hackett's Cove  Nova Scotia  B3Z 3J4
-				CA
-
-8C-1F-64   (hex)		Institute of geophysics, China earthquake administration
-77E000-77EFFF     (base 16)		Institute of geophysics, China earthquake administration
-				NO.5 minzuaxue south road, haidian district, 
-				beijing     100000
-				CN
-
-8C-1F-64   (hex)		Jena-Optronik GmbH
-848000-848FFF     (base 16)		Jena-Optronik GmbH
-				Otto-Eppenstein-Strasse 3
-				Jena    07745
-				DE
-
-8C-1F-64   (hex)		Wilson Electronics
-38D000-38DFFF     (base 16)		Wilson Electronics
-				3301 E. Deseret Dr.
-				Saint George  UT  84790
-				US
-
-8C-1F-64   (hex)		Contrader
-F72000-F72FFF     (base 16)		Contrader
-				Via Dei Longobardi 9
-				Benevento  Benevento  82100
-				IT
-
-8C-1F-64   (hex)		Labforge Inc.
-D0E000-D0EFFF     (base 16)		Labforge Inc.
-				103 Bauer Pl, Suite 6
-				Waterloo  Ontario  N2L 6B5
-				CA
-
-8C-1F-64   (hex)		OAS AG
-707000-707FFF     (base 16)		OAS AG
-				Caroline-Herschel-Straße 1
-				Bremen  Deutschland  28359
-				DE
-
-8C-1F-64   (hex)		Breas Medical AB
-D40000-D40FFF     (base 16)		Breas Medical AB
-				Företagsvägen 1
-				Mölnlycke    SE-435 33
-				SE
-
-8C-1F-64   (hex)		Fracarro srl
-417000-417FFF     (base 16)		Fracarro srl
-				via Cazzaro 3
-				Castelfranco Veneto    31033
-				IT
-
-8C-1F-64   (hex)		Tongye lnnovation Science and Technology (Shenzhen) Co.,Ltd
-B8D000-B8DFFF     (base 16)		Tongye lnnovation Science and Technology (Shenzhen) Co.,Ltd
-				Room 7-004, 7 / F, Tianxia IC Industrial Park, 133 Yiyuan Road, Nanshan District, 
-				Shenzhen  Guangdong  518000
-				CN
-
-8C-1F-64   (hex)		Suzhou Motorcomm Electronic Technology Co., Ltd
-5AE000-5AEFFF     (base 16)		Suzhou Motorcomm Electronic Technology Co., Ltd
-				No.78 Keling Rd, Building 4, Room 201, SND
-				Suzhou  Jiangsu  215000
-				CN
-
-8C-1F-64   (hex)		Italora
-6CF000-6CFFFF     (base 16)		Italora
-				sitia yomo 4
-				Vernate  Milano  20080
-				IT
-
-8C-1F-64   (hex)		BELLCO TRADING COMPANY (PVT) LTD
-50A000-50AFFF     (base 16)		BELLCO TRADING COMPANY (PVT) LTD
-				DAR-U-SALAM ROAD NEAR ZXMCO MOTORCYCLES FACTORY, OFF RAIWAND ROAD,  23 KM FROM THOKAR NIAZ BAIG, LAHORE PAKISTAN
-				LAHORE  PUNJAB  55150
-				PK
-
-8C-1F-64   (hex)		ITS Teknik A/S
-E02000-E02FFF     (base 16)		ITS Teknik A/S
-				Skomagervej
-				Vejle    7100
-				DK
-
-8C-1F-64   (hex)		NETGEN HITECH SOLUTIONS LLP
-ED9000-ED9FFF     (base 16)		NETGEN HITECH SOLUTIONS LLP
-				B 301 KNOX PLAZA MALAD WEST
-				MUMBAI  MAHARASHTRA  400064
-				IN
-
-8C-1F-64   (hex)		Vekto
-4AC000-4ACFFF     (base 16)		Vekto
-				Televisieweg 75
-				Almere    1322AK
-				NL
-
-8C-1F-64   (hex)		Wolfspyre Labs
-9D4000-9D4FFF     (base 16)		Wolfspyre Labs
-				5007 Highland Ct #WPL-IEEE
-				Austin  TX  78731
-				US
-
-8C-1F-64   (hex)		IO Master Technology
-BD3000-BD3FFF     (base 16)		IO Master Technology
-				4F?1 No. 258, Lian  Cheng Rd, Zhong He Dist
-				New Taipei City 235  Taipei  235
-				TW
-
-8C-1F-64   (hex)		SpectraDynamics, Inc.
-581000-581FFF     (base 16)		SpectraDynamics, Inc.
-				1849 Cherry St.
-				Louisville  CO  80027
-				US
-
-8C-1F-64   (hex)		TIFLEX
-194000-194FFF     (base 16)		TIFLEX
-				10 Avenue de la 1ère Armée Française Rhin - Danube
-				PONCIN    01450
-				FR
-
-8C-1F-64   (hex)		ESCAD AUTOMATION GmbH
-05F000-05FFFF     (base 16)		ESCAD AUTOMATION GmbH
-				Escadstr. 1
-				Pfullendorf    88630
-				DE
-
-8C-1F-64   (hex)		Sichuan Aiyijan Technology Company Ltd.
-40C000-40CFFF     (base 16)		Sichuan Aiyijan Technology Company Ltd.
-				C1102 No. 65 Wuke West 1st Rd Wuhou District
-				Chengdu  Sichuan  61000
-				CN
-
-8C-1F-64   (hex)		Rapidev Pvt Ltd
-A44000-A44FFF     (base 16)		Rapidev Pvt Ltd
-				Office # G201-204 NSTP, NUST ISLAMABAD
-				ISLAMABAD  Islamabad Capital Territory  44000
-				PK
-
-8C-1F-64   (hex)		Opgal Optronic Industries ltd
-35C000-35CFFF     (base 16)		Opgal Optronic Industries ltd
-				Hanapach 11
-				Karmiel     2165317
-				IL
-
-8C-1F-64   (hex)		Alifax S.r.l.
-C24000-C24FFF     (base 16)		Alifax S.r.l.
-				VIA PETRARCA 2/1
-				POLVERARA  PD  35020
-				IT
-
-8C-1F-64   (hex)		Neuralog LP
-115000-115FFF     (base 16)		Neuralog LP
-				4800 Sugar Grove Blvd., Ste. 200
-				Stafford  TX  77479
-				US
-
-8C-1F-64   (hex)		Pietro Fiorentini Spa
-8D9000-8D9FFF     (base 16)		Pietro Fiorentini Spa
-				Via Armenia, 16
-				San Vito al Tagliamento (PN)    33078
-				IT
-
-8C-1F-64   (hex)		Flextronics International Kft
-A4C000-A4CFFF     (base 16)		Flextronics International Kft
-				Zrínyi Miklós str. 38.
-				Zalaegerszeg    8900
-				HU
-
-8C-1F-64   (hex)		Flextronics International Kft
-D02000-D02FFF     (base 16)		Flextronics International Kft
-				38. Zrinyi Str.
-				Zalaegerszeg  Zala  8900
-				HU
-
-8C-1F-64   (hex)		Autark GmbH
-943000-943FFF     (base 16)		Autark GmbH
-				Platz des Friedens 8
-				Baunatal  Hessen  D-34225
-				DE
-
-8C-1F-64   (hex)		VMukti Solutions Private Limited
-E30000-E30FFF     (base 16)		VMukti Solutions Private Limited
-				3-4, Shivalik Plaza, Panjrapole, Ambawadi
-				Ahmedabad  Gujarat  380015
-				IN
-
-8C-1F-64   (hex)		ACTELSER S.L.
-3F4000-3F4FFF     (base 16)		ACTELSER S.L.
-				CARRER ALBERT EINSTEIN, 44
-				TERRASSA  BARCELONA  08223
-				ES
-
-8C-1F-64   (hex)		Timegate Instruments Ltd.
-7A7000-7A7FFF     (base 16)		Timegate Instruments Ltd.
-				Tutkijantie 7
-				Oulu    90540
-				FI
-
-8C-1F-64   (hex)		GSP Sprachtechnologie GmbH
-FED000-FEDFFF     (base 16)		GSP Sprachtechnologie GmbH
-				Teltowkanalstraße 1
-				Berlin    12247
-				DE
-
-8C-1F-64   (hex)		Wartsila Voyage Limited
-38E000-38EFFF     (base 16)		Wartsila Voyage Limited
-				13-18 City Quay
-				Dublin 2    D02 ED70
-				IE
-
-8C-1F-64   (hex)		AZD Praha s.r.o., ZOZ Olomouc
-FA2000-FA2FFF     (base 16)		AZD Praha s.r.o., ZOZ Olomouc
-				Zeleznicni
-				Olomouc  czech republic  77900
-				CZ
-
-8C-1F-64   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
-52D000-52DFFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
-				10545 Hardin Valley Rd
-				Knoxville  TN  37932
-				US
-
-8C-1F-64   (hex)		Beijing Zhongchen Microelectronics Co.,Ltd
-AB4000-AB4FFF     (base 16)		Beijing Zhongchen Microelectronics Co.,Ltd
-				Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District
-				Beijing  Beijing  100081
-				CN
-
-8C-1F-64   (hex)		Toolplanet Co., Ltd.
-54F000-54FFFF     (base 16)		Toolplanet Co., Ltd.
-				43-2 Himigaike-cho
-				Gifu-shi  Gifu  500-8122
-				JP
-
-8C-1F-64   (hex)		AIDirections
-702000-702FFF     (base 16)		AIDirections
-				Torch Tower
-				Dubai  Dubai  74249
-				AE
-
-70-B3-D5   (hex)		Watteco
-E75000-E75FFF     (base 16)		Watteco
-				Rue Gutenberg
-				Hennebont  Brittany  56700
-				FR
-
-8C-1F-64   (hex)		Weidmann Tecnologia Electrica de Mexico
-7B7000-7B7FFF     (base 16)		Weidmann Tecnologia Electrica de Mexico
-				Oscar Flores Tapia No. 304, Col. El Llano
-				Arteaga   Coahuila  25350 
-				MX
-
-8C-1F-64   (hex)		Ashinne Technology Co., Ltd
-E7C000-E7CFFF     (base 16)		Ashinne Technology Co., Ltd
-				10F-1, No.18, Lane 609, Sec.5, Chung Hsin Rd., San Chung Dist.
-				New Taipei City    241
-				TW
-
-8C-1F-64   (hex)		Forever Engineering Systems Pvt. Ltd.
-AC5000-AC5FFF     (base 16)		Forever Engineering Systems Pvt. Ltd.
-				B-817, 8th floor, Advant Navis Business Park, Sector-142
-				NOIDA  Uttar Pradesh  201301
-				IN
-
-8C-1F-64   (hex)		AMESS
-EEA000-EEAFFF     (base 16)		AMESS
-				C-1501, 60, Haan-ro
-				Gwangmyeong-si  Gyeonggi-do  14322
-				KR
-
-8C-1F-64   (hex)		EVERNET CO,.LTD TAIWAN
-B7C000-B7CFFF     (base 16)		EVERNET CO,.LTD TAIWAN
-				12 F., No. 206-2, Sec. 2, Daxing W. Rd
-				Taoyuan  Taiwan   330
-				TW
-
-8C-1F-64   (hex)		Farmote Limited
-017000-017FFF     (base 16)		Farmote Limited
-				92 Collingwood Street, Nelson
-				Nelson  Nelson  7010
-				NZ
-
-8C-1F-64   (hex)		e.p.g. Elettronica s.r.l.
-3D4000-3D4FFF     (base 16)		e.p.g. Elettronica s.r.l.
-				Via della Crocetta 3
-				Oltrona di San Mamette  Como (CO)  22070
-				IT
-
-8C-1F-64   (hex)		Stratis IOT
-3C5000-3C5FFF     (base 16)		Stratis IOT
-				4230 Main Street
-				Philadelphia  PA  19127
-				US
-
-8C-1F-64   (hex)		Twinleaf LLC
-080000-080FFF     (base 16)		Twinleaf LLC
-				300 Deer Creek DriveSuite 300
-				Plainsboro  NJ  08536
-				US
-
-8C-1F-64   (hex)		Genius vision digital private limted
-CC6000-CC6FFF     (base 16)		Genius vision digital private limted
-				S-39, GF JANTA MARKET, RAJOURI GARDEN,NEW DELHI - 110027
-				new delhi  new delhi  110027
-				IN
-
-8C-1F-64   (hex)		FMTec GmbH - Future Management Technologies
-3E3000-3E3FFF     (base 16)		FMTec GmbH - Future Management Technologies
-				Austraße 59e
-				Bludenz  Austria  6700
-				AT
-
-70-B3-D5   (hex)		System West dba ICS Electronics
-E06000-E06FFF     (base 16)		System West dba ICS Electronics
-				7034 Commerce Circle Suite A
-				Pleasanton  CA  94588
-				US
-
-70-B3-D5   (hex)		Nevotek
-358000-358FFF     (base 16)		Nevotek
-				5201 Great America Pkwy ste 320
-				Santa Clara  CA  95054
-				US
-
-70-B3-D5   (hex)		Arctos Showlasertechnik GmbH
-D02000-D02FFF     (base 16)		Arctos Showlasertechnik GmbH
-				Sägewerkstraße 16
-				Saaldorf-Surheim  Bavaria  83416
-				DE
-
-70-B3-D5   (hex)		Gremesh.com
-218000-218FFF     (base 16)		Gremesh.com
-				Beursplein 37
-				Rotterdam  Zuid-Holland  3011 AA
-				NL
-
-70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau AG
-5B2000-5B2FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
-				Werner-von-Siemens-Str. 1
-				Offenburg  Ba-Wue  77656
-				DE
-
-70-B3-D5   (hex)		Private
-FFF000-FFFFFF     (base 16)		Private
-
-70-B3-D5   (hex)		SENSO2ME 
-BC0000-BC0FFF     (base 16)		SENSO2ME 
-				Lange Gasthiuisstraat 29
-				ANTWERP  Antwerp  2000
-				BE
-
-70-B3-D5   (hex)		JLCooper Electronics
-8EA000-8EAFFF     (base 16)		JLCooper Electronics
-				142 Arena St
-				El Segundo  CA  90245
-				US
-
-70-B3-D5   (hex)		R Cubed Engineering, LLC
-C59000-C59FFF     (base 16)		R Cubed Engineering, LLC
-				705 10th Ave W unit 102
-				Palmetto    34221
-				US
-
-70-B3-D5   (hex)		Rotem Industry LTD
-B65000-B65FFF     (base 16)		Rotem Industry LTD
-				Rotem Industrial Park
-				Mishor Rotem  D.N. Arava  8680600
-				IL
-
-70-B3-D5   (hex)		The Dini Group, La Jolla inc.
-83E000-83EFFF     (base 16)		The Dini Group, La Jolla inc.
-				7469 Draper Ave.
-				La Jolla  CA  92037
-				US
-
-70-B3-D5   (hex)		Metralight, Inc.
-DC1000-DC1FFF     (base 16)		Metralight, Inc.
-				533 Airport Blvd., #400
-				Burlingame  CA  94010
-				US
-
-70-B3-D5   (hex)		Gateview Technologies
-A70000-A70FFF     (base 16)		Gateview Technologies
-				 104 White St #201
-				Wake Forest    27587
-				US
-
-70-B3-D5   (hex)		Selex ES Inc.
-521000-521FFF     (base 16)		Selex ES Inc.
-				4221 Tudor Lane
-				Greensboro  NC  27410
-				US
-
-70-B3-D5   (hex)		Operational Technology Solutions
-4D6000-4D6FFF     (base 16)		Operational Technology Solutions
-				Level 10 555 Lonsdale Street
-				Melbourne  Victoria  3000
-				AU
-
-70-B3-D5   (hex)		Laborie
-337000-337FFF     (base 16)		Laborie
-				6415 Northwest Drive, Unit 2
-				Mississauga  Ontario  L4V1X1
-				CA
-
-70-B3-D5   (hex)		ENS Engineered Network Systems
-983000-983FFF     (base 16)		ENS Engineered Network Systems
-				14451 Ewing Ave. Suite 100
-				Burnsville  MN  55306
-				US
-
-70-B3-D5   (hex)		JSC VIST Group 
-A8A000-A8AFFF     (base 16)		JSC VIST Group 
-				Dokuchaev lane, 3, bld. 1, attic, premise 1, room 14
-				Moscow    107078
-				RU
-
-70-B3-D5   (hex)		Legrand Electric Ltd
-093000-093FFF     (base 16)		Legrand Electric Ltd
-				Unit 10 Cowley Road
-				Blyth  Northumberland  NE24 5TF
-				GB
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-4A4000-4A4FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
-B58000-B58FFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
-				Sector Foresta 43, local 26
-				Tres Cantos  Madrid  28760
-				ES
-
-70-B3-D5   (hex)		Sicon srl
-D49000-D49FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Syscom Instruments SA
-BE7000-BE7FFF     (base 16)		Syscom Instruments SA
-				industrie 21
-				Sainte-Croix    1450
-				CH
-
-70-B3-D5   (hex)		AutomationX GmbH
-CD7000-CD7FFF     (base 16)		AutomationX GmbH
-				Lauzilgasse 13
-				Graz  Styria  8020
-				AT
-
-70-B3-D5   (hex)		Onethinx BV
-068000-068FFF     (base 16)		Onethinx BV
-				Punterweg 2
-				Zwolle  OV  8042 PB
-				NL
-
-70-B3-D5   (hex)		Private
-401000-401FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Alpha ESS Co., Ltd.
-7A2000-7A2FFF     (base 16)		Alpha ESS Co., Ltd.
-				JiuHua Road 888, Nantong High-Tech Industrial Development Zone,
-				Nantong  Jiangsu  226300
-				CN
-
-70-B3-D5   (hex)		NTO IRE-POLUS
-6FE000-6FEFFF     (base 16)		NTO IRE-POLUS
-				Akademika Vvedenskogo 1/2
-				Fryazino    141190
-				RU
-
-70-B3-D5   (hex)		microtec Sicherheitstechnik GmbH
-DFE000-DFEFFF     (base 16)		microtec Sicherheitstechnik GmbH
-				Auf der Langwies 20
-				Hünstetten    65510
-				DE
-
-70-B3-D5   (hex)		FRESENIUS MEDICAL CARE
-4CC000-4CCFFF     (base 16)		FRESENIUS MEDICAL CARE
-				496 So. Abbott Ave
-				Milpitas  CA  95035
-				US
-
-70-B3-D5   (hex)		OHASHI ENGINEERING CO.,LTD.
-556000-556FFF     (base 16)		OHASHI ENGINEERING CO.,LTD.
-				1-471-8 TOYONODAI
-				KAZO-CITY  SAITAMA  349-1148
-				JP
-
-70-B3-D5   (hex)		JIANGSU HORAINTEL CO.,LTD
-D8A000-D8AFFF     (base 16)		JIANGSU HORAINTEL CO.,LTD
-				32 Buidling R&D Center, No.99 Chuqiao Road
-				ZHENJIANG   JIANGSU  212009
-				CN
-
-70-B3-D5   (hex)		AVA Monitoring AB
-31D000-31DFFF     (base 16)		AVA Monitoring AB
-				Vädursgatan 6
-				Göteborg  Västra götaland  412 50
-				SE
-
-70-B3-D5   (hex)		PAL Inc.
-05B000-05BFFF     (base 16)		PAL Inc.
-				2217-2 Hayashicho
-				Takamatsu  Kagawa  7610301
-				JP
-
-70-B3-D5   (hex)		TimeMachines Inc.
-5A6000-5A6FFF     (base 16)		TimeMachines Inc.
-				300 S 68th Street Place, Suite 100
-				Lincoln  NE  68510
-				US
-
-70-B3-D5   (hex)		Cobo, Inc.
-EAD000-EADFFF     (base 16)		Cobo, Inc.
-				3624 Alta Vista Avenue
-				Santa Rosa  CA  95409
-				US
-
-70-B3-D5   (hex)		Discover Battery
-6F1000-6F1FFF     (base 16)		Discover Battery
-				#4 - 13511 Crestwood Place
-				Richmond  BC  v6v 2e9
-				CA
-
-70-B3-D5   (hex)		Itronics Ltd
-9B7000-9B7FFF     (base 16)		Itronics Ltd
-				8a Triton Dr, Rosedale
-				Auckland    0632
-				NZ
-
-70-B3-D5   (hex)		Tapdn
-FDC000-FDCFFF     (base 16)		Tapdn
-				840 Apollo St Suite 100
-				El Segundo  CA  90245
-				US
-
-70-B3-D5   (hex)		Controlled Power Company
-BA8000-BA8FFF     (base 16)		Controlled Power Company
-				1955 Stephenston Hwy
-				Troy  MI  48083
-				US
-
-70-B3-D5   (hex)		Editech Co., Ltd
-79D000-79DFFF     (base 16)		Editech Co., Ltd
-				284, Gongdan-ro
-				Gunpo-si  Gyeonggi-do  15809
-				KR
-
-70-B3-D5   (hex)		Talleres de Escoriaza SA
-C08000-C08FFF     (base 16)		Talleres de Escoriaza SA
-				Barrio Ventas, 35
-				Irun  Gipuzkoa  20305
-				ES
-
-70-B3-D5   (hex)		Gamber Johnson-LLC
-DBC000-DBCFFF     (base 16)		Gamber Johnson-LLC
-				3001 Borham Ave
-				Stevens Point  WI  54481
-				US
-
-70-B3-D5   (hex)		EXASCEND (Wuhan) Co., Ltd
-851000-851FFF     (base 16)		EXASCEND (Wuhan) Co., Ltd
-				West 2nd-3rd Floor, No. 2 Building, Guan Nan Industrial Park,Te 1 Hao, Gao Xing 2 Lu,Dong Hu New Technology Development District
-				Wuhan  Hubei  430000
-				CN
-
-70-B3-D5   (hex)		Niron systems & Projects
-FED000-FEDFFF     (base 16)		Niron systems & Projects
-				PO Box 8546
-				Netania    4250407
-				IL
-
-70-B3-D5   (hex)		Nubewell Networks Pvt Ltd
-61B000-61BFFF     (base 16)		Nubewell Networks Pvt Ltd
-				1242, Ground Floor, 4th Main, 4th Cross, BTM 4th stage, 1st Block, Deverachikkanahalli
-				Bangalore  Karnataka  560076
-				IN
-
-70-B3-D5   (hex)		Paratec Ltd.
-AEC000-AECFFF     (base 16)		Paratec Ltd.
-				P.O.Box 3574
-				Haifa    3103402
-				IL
-
-70-B3-D5   (hex)		Slan
-788000-788FFF     (base 16)		Slan
-				11 rue de la Senette
-				Carrieres sous Poissy    78955
-				FR
-
-70-B3-D5   (hex)		EGISTECH CO.,LTD.
-603000-603FFF     (base 16)		EGISTECH CO.,LTD.
-				611 2Dong 98, Gasan digital 2-ro
-				Geumcheon-gu  Seoul  08506
-				KR
-
-70-B3-D5   (hex)		Nippon Marine Enterprises, Ltd.
-533000-533FFF     (base 16)		Nippon Marine Enterprises, Ltd.
-				14-1, Ogawa-cho
-				Yokosuka  Kanagawa  2380004
-				JP
-
-70-B3-D5   (hex)		Aethera Technologies
-9B9000-9B9FFF     (base 16)		Aethera Technologies
-				63 Crane Lake Drive
-				Halifax  NS  B3S 1B5
-				CA
-
-70-B3-D5   (hex)		hiSky S.C.S LTD
-2E1000-2E1FFF     (base 16)		hiSky S.C.S LTD
-				24 Ammal
-				Rosh Hain    4809268
-				IL
-
-70-B3-D5   (hex)		QuestHouse, Inc.
-84B000-84BFFF     (base 16)		QuestHouse, Inc.
-				Rm 204, 5 B/D, 20 Techno 1-ro, Yuseong-gu
-				Daejeon    34016
-				KR
-
-70-B3-D5   (hex)		Insitu Inc.
-D36000-D36FFF     (base 16)		Insitu Inc.
-				901 E Bingen Point Way
-				Bingen  WA  98605
-				US
-
-00-1B-C5   (hex)		Private
-0B8000-0B8FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Dat-Con d.o.o.
-CDC000-CDCFFF     (base 16)		Dat-Con d.o.o.
-				Cvetlična ulica 52
-				Polzela    3313
-				SI
-
-70-B3-D5   (hex)		PixelApps s.r.o.
-251000-251FFF     (base 16)		PixelApps s.r.o.
-				Hošťálkova 633/49
-				Praha 6    16900
-				CZ
-
-70-B3-D5   (hex)		MICRO DEBUG, Y.K.
-020000-020FFF     (base 16)		MICRO DEBUG, Y.K.
-				5-18-15 Oowada-cho
-				hachiouji  Tokyo  192-0045
-				JP
-
-70-B3-D5   (hex)		amakidenki
-9FD000-9FDFFF     (base 16)		amakidenki
-				m.okuyama@amaki.co.jp
-				higashiyamatoshi  tokyo  207-0004
-				JP
-
-70-B3-D5   (hex)		OSMOZIS
-A9B000-A9BFFF     (base 16)		OSMOZIS
-				7 AVENUE DE L'EUROPE
-				CLAPIERS  LANGUEDOC ROUSSSILLON  34830
-				FR
-
-70-B3-D5   (hex)		Project Service S.r.l.
-A2D000-A2DFFF     (base 16)		Project Service S.r.l.
-				Via Paderno 31/C
-				Seriate (BG)    24068
-				IT
-
-70-B3-D5   (hex)		Avid Controls Inc
-447000-447FFF     (base 16)		Avid Controls Inc
-				41261 Park 290 Dr
-				WALLER  TX  77484
-				US
-
-70-B3-D5   (hex)		Alcohol Countermeasure Systems
-FD0000-FD0FFF     (base 16)		Alcohol Countermeasure Systems
-				60 International Blvd
-				Toronto  Ontario  M9W 6J2
-				CA
-
-70-B3-D5   (hex)		Applied Silver
-239000-239FFF     (base 16)		Applied Silver
-				26254 Eden Landing Road
-				Hayward  CA  94545
-				US
-
-70-B3-D5   (hex)		DKI Technology Co., Ltd
-D00000-D00FFF     (base 16)		DKI Technology Co., Ltd
-				Room #1005, DONGHWA BLDG, 71, Yeouinaru-ro, Yeongdeungpo-gu
-				Seoul  Seoul  KR-11
-				KR
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-AA5000-AA5FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Fracarro srl
-E8C000-E8CFFF     (base 16)		Fracarro srl
-				via Cazzaro 3
-				Castelfranco Veneto    31033
-				IT
-
-70-B3-D5   (hex)		Crown Solar Power Fencing Systems
-9D6000-9D6FFF     (base 16)		Crown Solar Power Fencing Systems
-				123/A, Ushodaya Towers Shahpurnagar, Jeedimetla
-				Hyderabad  Telangana  500055
-				IN
-
-70-B3-D5   (hex)		Hiber
-DBE000-DBEFFF     (base 16)		Hiber
-				Keizersgracht 209-sous
-				Amsterdam  Noord-Holland  1016DT
-				NL
-
-70-B3-D5   (hex)		MEGGITT
-1EE000-1EEFFF     (base 16)		MEGGITT
-				14600 MYFORD RD
-				IRVINE  CA  92606
-				US
-
-70-B3-D5   (hex)		SET Power Systems GmbH
-DAB000-DABFFF     (base 16)		SET Power Systems GmbH
-				August Braun Strasse 3
-				Wangen  Baden Wuerttemberg  88239
-				DE
-
-70-B3-D5   (hex)		Prior Scientific Instruments Ltd
-A7D000-A7DFFF     (base 16)		Prior Scientific Instruments Ltd
-				3-4 Fielding industrial estate, Fulbourn
-				Cambridge  Cambridgeshire  CB21 5ET
-				GB
-
-70-B3-D5   (hex)		AUTOMATIZACION Y CONECTIVIDAD SA DE CV
-59B000-59BFFF     (base 16)		AUTOMATIZACION Y CONECTIVIDAD SA DE CV
-				LA GARITA ANDADOR 6 DUPLEX 1 CASA 2
-				CDMX  TLALPAN  14390
-				MX
-
-70-B3-D5   (hex)		Blue Skies Global LLC
-1D8000-1D8FFF     (base 16)		Blue Skies Global LLC
-				PO Box 796
-				Williams Bay  WI  53191
-				US
-
-70-B3-D5   (hex)		Alcodex Technologies Private Limited
-098000-098FFF     (base 16)		Alcodex Technologies Private Limited
-				7/719-B, PLOT 180, Mavelipuram colony, Kakkanad
-				ernakulam  Kerala  682030
-				IN
-
-70-B3-D5   (hex)		Digital Media Professionals
-BC4000-BC4FFF     (base 16)		Digital Media Professionals
-				16F NakanoCentralParkSouth,4-10-2 Nakano
-				Nakano-ku  Tokyo  164-0001
-				JP
-
-70-B3-D5   (hex)		Lightdrop
-072000-072FFF     (base 16)		Lightdrop
-				Matiční 730/3
-				Ostrava    70200
-				CZ
-
-70-B3-D5   (hex)		NeurIT s.r.o.
-2E9000-2E9FFF     (base 16)		NeurIT s.r.o.
-				Husovo náměstí 14
-				Hostivice  Czech Republic  25301
-				CZ
-
-70-B3-D5   (hex)		Shishido Electrostatic, Ltd.
-22A000-22AFFF     (base 16)		Shishido Electrostatic, Ltd.
-				4-7-21 Chigasaki-higashi, Tsuzuki-ku
-				Yokohama  Kanagawa Prefecture  224-0033
-				JP
-
-70-B3-D5   (hex)		Consarc Corporation
-BD6000-BD6FFF     (base 16)		Consarc Corporation
-				100 Indel Ave
-				Rancocas   NJ  08073
-				US
-
-70-B3-D5   (hex)		Amber Kinetics Inc
-05C000-05CFFF     (base 16)		Amber Kinetics Inc
-				32920 Alvarado-Niles Rd #250
-				Union City  CA  94587
-				US
-
-70-B3-D5   (hex)		Qingdao CNR HITACH Railway Signal&communication co.,ltd
-802000-802FFF     (base 16)		Qingdao CNR HITACH Railway Signal&communication co.,ltd
-				231-2 Ruichang Road
-				Qingdao    266031
-				CN
-
-70-B3-D5   (hex)		Zumbach Electronic AG
-B10000-B10FFF     (base 16)		Zumbach Electronic AG
-				Hauptstrasse 93
-				Orpund  Bern  2552
-				CH
-
-70-B3-D5   (hex)		VTC Digicom
-C4C000-C4CFFF     (base 16)		VTC Digicom
-				23 Lac Trung
-				Ha Noi  Ha Noi  100000
-				VN
-
-70-B3-D5   (hex)		WICELL TECHNOLOGY
-BB0000-BB0FFF     (base 16)		WICELL TECHNOLOGY
-				61 Dien Bien Phu
-				Ho Chi Minh    700000
-				VN
-
-70-B3-D5   (hex)		KOMZ - IZMERENIYA
-45B000-45BFFF     (base 16)		KOMZ - IZMERENIYA
-				Pravobulachnaya 35/2
-				Kazan    420111
-				RU
-
-70-B3-D5   (hex)		GoTrustID Inc.
-B38000-B38FFF     (base 16)		GoTrustID Inc.
-				800 N. State Street, Suite 402, Dover
-				County of Kent  DE  19901
-				US
-
-70-B3-D5   (hex)		Communication Systems Solutions
-E0C000-E0CFFF     (base 16)		Communication Systems Solutions
-				6030 S. 58th Street
-				Lincoln  NE  68516
-				US
-
-70-B3-D5   (hex)		Private
-591000-591FFF     (base 16)		Private
-
-00-1B-C5   (hex)		Corporate Systems Engineering 
-015000-015FFF     (base 16)		Corporate Systems Engineering 
-				1215 Brookville Way
-				Indianapolis   IN  46239
-				US
-
-70-B3-D5   (hex)		Armstrong International, Inc.
-15B000-15BFFF     (base 16)		Armstrong International, Inc.
-				816 Maple Street
-				Three Rivers  MI  49093
-				US
-
-70-B3-D5   (hex)		Ya Batho Trading (Pty) Ltd
-AE6000-AE6FFF     (base 16)		Ya Batho Trading (Pty) Ltd
-				9 Estee Ackerman Street
-				Jet Park  Gauteng  1462
-				ZA
-
-70-B3-D5   (hex)		MicroElectronics System Co.Ltd
-8DA000-8DAFFF     (base 16)		MicroElectronics System Co.Ltd
-				29 uchihata-cho Nishinokyo Nakagyoku
-				Kyoto City  Kyoto-fu  604-8411
-				JP
-
-70-B3-D5   (hex)		Engage Technologies
-977000-977FFF     (base 16)		Engage Technologies
-				7041 Boone Avenue North
-				Brooklyn Park  MN  55428
-				US
-
-70-B3-D5   (hex)		Opti-Sciences, Inc.
-338000-338FFF     (base 16)		Opti-Sciences, Inc.
-				8 Winn Ave
-				Hudson  NH  03051
-				US
-
-70-B3-D5   (hex)		Silent Gliss International Ltd
-B66000-B66FFF     (base 16)		Silent Gliss International Ltd
-				Worbstrasse 210
-				Guemligen    3073
-				CH
-
-70-B3-D5   (hex)		Videoport S.A.
-441000-441FFF     (base 16)		Videoport S.A.
-				Sigma Business Center, Building A Nivel 2
-				San Pedro  San Jose  11501
-				CR
-
-70-B3-D5   (hex)		AKIS technologies
-402000-402FFF     (base 16)		AKIS technologies
-				Ciurlionio g. 82
-				Vilnius  Lithuania  03100
-				LT
-
-70-B3-D5   (hex)		Satixfy Israel Ltd.
-978000-978FFF     (base 16)		Satixfy Israel Ltd.
-				12 Hamada st.
-				Rehovot    7670300
-				IL
-
-70-B3-D5   (hex)		ANALOGICS TECH INDIA LTD
-B49000-B49FFF     (base 16)		ANALOGICS TECH INDIA LTD
-				PLOT # 9/10, NACHARAM INDUSTRIAL ESTATE
-				HYDERABAD  TELANGANA  500076
-				IN
-
-70-B3-D5   (hex)		ACD Elekronik GmbH
-673000-673FFF     (base 16)		ACD Elekronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		Aural Ltd
-76C000-76CFFF     (base 16)		Aural Ltd
-				Aural Ltd, 3b Wellington Close, Parkgate Industrial Estate
-				KNUTSFORD  Cheshire  WA16 8XL
-				GB
-
-70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
-516000-516FFF     (base 16)		LINEAGE POWER PVT LTD.,
-				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
-				BANGALORE  KARNATAKA  560074
-				IN
-
-70-B3-D5   (hex)		Sense For Innovation
-1EA000-1EAFFF     (base 16)		Sense For Innovation
-				Nistelrodeseweg 9A
-				Uden    5406 PT
-				NL
-
-70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
-E84000-E84FFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
-				78-2 Buncheon-ri, Bongdam-eup
-				Hwaseong-city  Gyungki-do  445-894
-				KR
-
-70-B3-D5   (hex)		AML
-759000-759FFF     (base 16)		AML
-				2190 Regal Parkway
-				Euless  TX  76040
-				US
-
-70-B3-D5   (hex)		NIRIT- Xinwei  Telecom Technology Co., Ltd.
-F27000-F27FFF     (base 16)		NIRIT- Xinwei  Telecom Technology Co., Ltd.
-				2-й Кожуховский проезд, д.12, стр.2
-				Moscow    115432
-				RU
-
-70-B3-D5   (hex)		Schneider Electric Motion USA
-8D7000-8D7FFF     (base 16)		Schneider Electric Motion USA
-				370 N. Main St.
-				Marlborough  CT  06447
-				US
-
-70-B3-D5   (hex)		DOBE Computing
-9DF000-9DFFFF     (base 16)		DOBE Computing
-				Dong-Bu 61 Song-Dam Univ. Chang-Ui 203
-				Yong-In    17145
-				KR
-
-70-B3-D5   (hex)		Laser Imagineering Vertriebs GmbH
-FDD000-FDDFFF     (base 16)		Laser Imagineering Vertriebs GmbH
-				Rudolf-Diesel-Weg 5
-				Moelln    23879
-				DE
-
-70-B3-D5   (hex)		Avidbots Corporation
-B4D000-B4DFFF     (base 16)		Avidbots Corporation
-				975 Bleams Road, Unit 5
-				Kitchener  Ontario  N2E 3Z5
-				CA
-
-70-B3-D5   (hex)		Reckeen HDP Media sp. z o.o. sp. k.
-3A1000-3A1FFF     (base 16)		Reckeen HDP Media sp. z o.o. sp. k.
-				Robotnicza 68c
-				Wroclaw    53608
-				PL
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-F84000-F84FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Sun Creative (ZheJiang) Technology INC.
-2B2000-2B2FFF     (base 16)		Sun Creative (ZheJiang) Technology INC.
-				3#Building No.181 Wuchang street
-				HANGZHOU  ZHE JIANG   310023
-				CN
-
-70-B3-D5   (hex)		BASF Corporation
-680000-680FFF     (base 16)		BASF Corporation
-				26 Davis Drive
-				Research Triangle Park  NC  27709
-				US
-
-70-B3-D5   (hex)		ACCEL CORP
-53D000-53DFFF     (base 16)		ACCEL CORP
-				16-32 Nakamachi
-				CHINO  Nagano  3910005
-				JP
-
-70-B3-D5   (hex)		Advansid 
-3F7000-3F7FFF     (base 16)		Advansid 
-				Via Alla Cascata 56/C
-				Trento    38123
-				IT
-
-70-B3-D5   (hex)		SCHMID electronic
-764000-764FFF     (base 16)		SCHMID electronic
-				Badstrasse 39
-				Reutlingen    72766
-				DE
-
-70-B3-D5   (hex)		Globalcom Engineering SPA
-636000-636FFF     (base 16)		Globalcom Engineering SPA
-				Via Volta 39
-				CARDANO AL CAMPO  VA  21010
-				IT
-
-70-B3-D5   (hex)		Harvard Technology Ltd
-56A000-56AFFF     (base 16)		Harvard Technology Ltd
-				Tyler Close, Normanton
-				Wakefield    WF6 1RL
-				GB
-
-70-B3-D5   (hex)		Roboteq
-DA5000-DA5FFF     (base 16)		Roboteq
-				7812 E Acoma dr
-				Scottsdale  AZ  85260
-				US
-
-70-B3-D5   (hex)		CAMEON S.A.
-235000-235FFF     (base 16)		CAMEON S.A.
-				3 rue de la Bavière
-				La Chapelle sur Erdre  Loire-Atlantique  44240
-				FR
-
-70-B3-D5   (hex)		Computech International
-280000-280FFF     (base 16)		Computech International
-				525 Northern Boulevard
-				Great Neck  NY  11021
-				US
-
-70-B3-D5   (hex)		Groupe Paris-Turf
-9AB000-9ABFFF     (base 16)		Groupe Paris-Turf
-				45 avenue Victor-Hugo, Bâtiment 270, 2e étage
-				AUBERVILLIERS    93300
-				FR
-
-00-1B-C5   (hex)		Osborne Coinage Co
-032000-032FFF     (base 16)		Osborne Coinage Co
-				2851 Massachusetts Avenue
-				Cincinnati  OH  45225
-				US
-
-00-1B-C5   (hex)		VEILUX INC.
-0B6000-0B6FFF     (base 16)		VEILUX INC.
-				802 GREENVIEW DR. STE 200
-				GRAND PRAIRIE    75050
-				US
-
-70-B3-D5   (hex)		KST technology
-C05000-C05FFF     (base 16)		KST technology
-				KST B/D 4-5, Wiryeseong-daero 12-gil
-				Songpa-gu  Seoul  05636
-				KR
-
-70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
-26C000-26CFFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-85F000-85FFFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		EGICON SRL
-6F7000-6F7FFF     (base 16)		EGICON SRL
-				Via Posta Vecchia 36
-				Mirandola  Modena  41037
-				IT
-
-70-B3-D5   (hex)		Smith Meter, Inc.
-706000-706FFF     (base 16)		Smith Meter, Inc.
-				1602 Wagner Ave.
-				Erie    16514
-				US
-
-70-B3-D5   (hex)		SL Audio A/S
-E43000-E43FFF     (base 16)		SL Audio A/S
-				Ulvevej 28, Danmark
-				Skive  Denmark  7800
-				DK
-
-70-B3-D5   (hex)		SANYU SWITCH CO., LTD.
-F14000-F14FFF     (base 16)		SANYU SWITCH CO., LTD.
-				Muro 1639-2
-				Kikuchi-gun Ohzu-cho  Kumamoto-pref.  869-1235
-				JP
-
-70-B3-D5   (hex)		MEDEX
-B4A000-B4AFFF     (base 16)		MEDEX
-				240 Allée Jacques Monod
-				Saint-Priest  France  69800
-				FR
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-161000-161FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbühl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Beijing Nacao Technology Co., Ltd.
-105000-105FFF     (base 16)		Beijing Nacao Technology Co., Ltd.
-				1912B, Zhongguancunkemao Building, Zhongguancun Da Jie
-				Beijing    100080
-				CN
-
-70-B3-D5   (hex)		IONETECH
-876000-876FFF     (base 16)		IONETECH
-				#50,sicheongseo4gil
-				yeosu  jeonnam  59674
-				KR
-
-70-B3-D5   (hex)		Beijing Daswell Science and Technology Co.LTD
-06F000-06FFFF     (base 16)		Beijing Daswell Science and Technology Co.LTD
-				6th floor,Building B,Dachen Industry Park, NO.10 Jingyuan Street, BDA
-				Beijing  Beijing  100176
-				CN
-
-70-B3-D5   (hex)		Redfish Group Pty Ltd
-DA6000-DA6FFF     (base 16)		Redfish Group Pty Ltd
-				Level 3, 24 Little Edward Street
-				Spring Hill  QLD  4000
-				AU
-
-70-B3-D5   (hex)		Impolux GmbH
-EEC000-EECFFF     (base 16)		Impolux GmbH
-				Boschstr. 7
-				Kastellaun  RLP  56288
-				DE
-
-70-B3-D5   (hex)		Centero
-CE2000-CE2FFF     (base 16)		Centero
-				1640 Powers Ferry Road Bldg.14-360
-				Marietta  GA  30067
-				US
-
-70-B3-D5   (hex)		STREGA 
-770000-770FFF     (base 16)		STREGA 
-				Dreve de la Meute 31
-				Waterloo    1410
-				BE
-
-70-B3-D5   (hex)		Burk Technology
-985000-985FFF     (base 16)		Burk Technology
-				7 Beaver Brook road
-				Littleton  MA  01460
-				US
-
-70-B3-D5   (hex)		Heng Dian Technology Co., Ltd
-FEA000-FEAFFF     (base 16)		Heng Dian Technology Co., Ltd
-				No.9, Yunmei Road,Tianmulake Town
-				Liyang  Jiangsu  213300
-				CN
-
-70-B3-D5   (hex)		Fen Systems Ltd
-B1E000-B1EFFF     (base 16)		Fen Systems Ltd
-				110 Cromwell Road
-				Cambridge    CB1 3EG
-				GB
-
-70-B3-D5   (hex)		INVIXIUM ACCESS INC.
-87D000-87DFFF     (base 16)		INVIXIUM ACCESS INC.
-				50 ACADIA AVE, 310
-				MARKHAM  Ontario  L3R0B3
-				CA
-
-70-B3-D5   (hex)		JSK System
-B7F000-B7FFFF     (base 16)		JSK System
-				Wiośniana, 30/32
-				Łódź    93-228
-				PL
-
-70-B3-D5   (hex)		Enertex Bayern GmbH
-DC8000-DC8FFF     (base 16)		Enertex Bayern GmbH
-				Ebermannstädter Str. 8
-				Forchheim  Bayern  91301
-				DE
-
-70-B3-D5   (hex)		Liteon Technology Corporation
-073000-073FFF     (base 16)		Liteon Technology Corporation
-				8F, 866, Chung-Cheng Road, Chung Ho
-				New Taipei City  Taiwan  23585
-				TW
-
-70-B3-D5   (hex)		Orlaco Products B.V.
-240000-240FFF     (base 16)		Orlaco Products B.V.
-				Albert Plesmanstraat 42
-				Barneveld    3772MN
-				NL
-
-70-B3-D5   (hex)		Invisible Systems Limited
-5F2000-5F2FFF     (base 16)		Invisible Systems Limited
-				9 Beetham Road
-				Milnthorpe  Cumbria  LA7 7QL
-				GB
-
-70-B3-D5   (hex)		Refine Technology, LLC
-EBC000-EBCFFF     (base 16)		Refine Technology, LLC
-				26 Chapin Road, Unit 1107, PO Box 691
-				Pine Brook  NJ  07058
-				US
-
-70-B3-D5   (hex)		Heartlandmicropayments
-455000-455FFF     (base 16)		Heartlandmicropayments
-				2115 Chapman Road Suite 159
-				Chattanooga  TN  37421
-				US
-
-70-B3-D5   (hex)		AVI Pty Ltd
-790000-790FFF     (base 16)		AVI Pty Ltd
-				9 Pitt Way
-				Booragoon  Western Australia  6154
-				AU
-
-70-B3-D5   (hex)		PEEK TRAFFIC
-C65000-C65FFF     (base 16)		PEEK TRAFFIC
-				5401 N SAM HOUSTON PKWY W
-				HOUSTON  null  77086
-				US
-
-70-B3-D5   (hex)		Kalfire
-64B000-64BFFF     (base 16)		Kalfire
-				Geloërveldweg 21
-				Belfeld  Limburg  5951 DH
-				NL
-
-70-B3-D5   (hex)		Biovigil Hygiene Technologies
-DB1000-DB1FFF     (base 16)		Biovigil Hygiene Technologies
-				924 N. Main st., Suite 2
-				Ann Arbor  MI  48104
-				US
-
-70-B3-D5   (hex)		Talleres de Escoriaza SA
-532000-532FFF     (base 16)		Talleres de Escoriaza SA
-				Barrio Ventas, 35
-				Irun  Gipuzkoa  20305
-				ES
-
-70-B3-D5   (hex)		Vitro Technology Corporation
-F19000-F19FFF     (base 16)		Vitro Technology Corporation
-				Box 91232
-				Austin  TX  78709-1232
-				US
-
-70-B3-D5   (hex)		Riegl Laser Measurement Systems GmbH
-F10000-F10FFF     (base 16)		Riegl Laser Measurement Systems GmbH
-				Riedenburgstraße 48
-				Horn  Niederösterreich  A-3580
-				AT
-
-70-B3-D5   (hex)		Robotelf Technologies (Chengdu) Co., Ltd.
-1A6000-1A6FFF     (base 16)		Robotelf Technologies (Chengdu) Co., Ltd.
-				N3-4-1-1914, Global Center, No. 1700, Tianfu Road North, High-rech Zone
-				Chengdu City  Sichuan  610041
-				CN
-
-70-B3-D5   (hex)		M.T. S.R.L.
-141000-141FFF     (base 16)		M.T. S.R.L.
-				VIA MONZA 83
-				GESSATE    20060
-				IT
-
-70-B3-D5   (hex)		Walk Horizon Technology (Beijing) Co., Ltd.
-154000-154FFF     (base 16)		Walk Horizon Technology (Beijing) Co., Ltd.
-				Rm121 B1 Shouxindasha Building, 5 Jiangtailu Rd., Chaoyang District
-				Beijing    100015
-				CN
-
-70-B3-D5   (hex)		CoXlab Inc.
-DF1000-DF1FFF     (base 16)		CoXlab Inc.
-				312 Hannuri-daero, 309
-				Sejong    30128
-				KR
-
-70-B3-D5   (hex)		BCD Audio
-728000-728FFF     (base 16)		BCD Audio
-				5 Bristol Way, Stoke Gardens
-				Slough  Berkshire  SL1 3QE
-				GB
-
-70-B3-D5   (hex)		Zigencorp, Inc
-739000-739FFF     (base 16)		Zigencorp, Inc
-				6934 Canby Avenue 107
-				Reseda  CA  91335
-				US
-
-70-B3-D5   (hex)		E-MetroTel
-FF0000-FF0FFF     (base 16)		E-MetroTel
-				2828 West Parker Unit B201
-				Plano  TX  75075
-				US
-
-70-B3-D5   (hex)		Euklis by GSG International
-AD8000-AD8FFF     (base 16)		Euklis by GSG International
-				via Colombo 23
-				Trezzano sul Naviglio  MI  20090
-				IT
-
-70-B3-D5   (hex)		Mesa Labs, Inc.
-23A000-23AFFF     (base 16)		Mesa Labs, Inc.
-				12100 West 6th Ave.
-				Lakewood  CO  80228
-				US
-
-70-B3-D5   (hex)		Systems With Intelligence Inc.
-93E000-93EFFF     (base 16)		Systems With Intelligence Inc.
-				6889 Rexwood Road, Unit 9
-				Mississauga  Ontario  L4V 1R2
-				CA
-
-70-B3-D5   (hex)		Gentec Systems  Co.
-469000-469FFF     (base 16)		Gentec Systems  Co.
-				5F., No.51-3, Fuxing Rd., Xindian Dist., 
-				New Taipei City     23150
-				TW
-
-70-B3-D5   (hex)		Guangzhou Male Industrial Animation Technology Co.,Ltd.
-0D4000-0D4FFF     (base 16)		Guangzhou Male Industrial Animation Technology Co.,Ltd.
-				4/F,Block A, 23 Huancun Road,Dalong Street, Panyu District,Guangzhou City
-				Guangzhou City  Guangdong Province  514000
-				CN
-
-70-B3-D5   (hex)		BigStuff3, Inc. 
-64E000-64EFFF     (base 16)		BigStuff3, Inc. 
-				4352 Fenton Rd
-				Hartland  MI  48353
-				US
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-EF5000-EF5FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Wimate Technology Solutions Private Limited
-253000-253FFF     (base 16)		Wimate Technology Solutions Private Limited
-				96, 34th B cross, 16th Main, Jayanagar 4th T block
-				Bangalore  Karnataka  560041
-				IN
-
-70-B3-D5   (hex)		ELEUSI GmbH
-1CD000-1CDFFF     (base 16)		ELEUSI GmbH
-				Rottendorferstrasse 1
-				Feldkirchen  Kaernten  9560
-				AT
-
-70-B3-D5   (hex)		Core Balance Co., Ltd.
-D5F000-D5FFFF     (base 16)		Core Balance Co., Ltd.
-				#1807, #1808, 308-4, Seongsu-dong 2-ga, Seongdong-gu
-				Seoul    04781
-				KR
-
-00-1B-C5   (hex)		TechSolutions A/S
-0C2000-0C2FFF     (base 16)		TechSolutions A/S
-				Lyskaer 15, 2
-				Herlev    2730
-				DK
-
-70-B3-D5   (hex)		G+D Mobile Security
-024000-024FFF     (base 16)		G+D Mobile Security
-				C/ 114 nº 27, Polígon Pratenc
-				El Prat de Llobregat  Barcelona  E-08820
-				ES
-
-70-B3-D5   (hex)		ETON Deutschland Electro Acoustic GmbH
-213000-213FFF     (base 16)		ETON Deutschland Electro Acoustic GmbH
-				Pfaffenweg 21
-				Neu-Ulm  Bavaria  89231
-				DE
-
-70-B3-D5   (hex)		Saratoga Speed, Inc.
-55C000-55CFFF     (base 16)		Saratoga Speed, Inc.
-				2701 Zanker Rd
-				San Jose  CA  95134
-				US
-
-70-B3-D5   (hex)		AmTote Australasia
-DAA000-DAAFFF     (base 16)		AmTote Australasia
-				Unit3, 28 LeightonPlace.
-				HORNSBY  NSW  2077
-				AU
-
-70-B3-D5   (hex)		TRIDENT INFOSOL PVT LTD
-C8F000-C8FFFF     (base 16)		TRIDENT INFOSOL PVT LTD
-				NO1A , KUSHAL GARDEN , PEENYA INDUSTRIAL AREA
-				BANGALORE    560058
-				IN
-
-70-B3-D5   (hex)		OSUNG LST CO.,LTD.
-B64000-B64FFF     (base 16)		OSUNG LST CO.,LTD.
-				#433-31, Sandong-ro, Eumbong-myeon
-				Asan-si  Chungcheongnam-do  31418
-				KR
-
-70-B3-D5   (hex)		ELBIT SYSTEMS BMD AND LAND EW - ELISRA LTD
-24F000-24FFFF     (base 16)		ELBIT SYSTEMS BMD AND LAND EW - ELISRA LTD
-				Hamerchava 29
-				holon    58101
-				IL
-
-70-B3-D5   (hex)		Valk Welding B.V.
-5DA000-5DAFFF     (base 16)		Valk Welding B.V.
-				Staalindustrieweg 15
-				Alblasserdam  Zuid Holland  2952 AT
-				NL
-
-70-B3-D5   (hex)		Special Services Group, LLC
-0F8000-0F8FFF     (base 16)		Special Services Group, LLC
-				PO Box 825
-				Denair  CA  95316
-				US
-
-70-B3-D5   (hex)		AEM Singapore Pte. Ltd.
-AC1000-AC1FFF     (base 16)		AEM Singapore Pte. Ltd.
-				52 Serangoon North Ave 4
-				Singapore  Singapore  555853
-				SG
-
-70-B3-D5   (hex)		Fire4 Systems UK Ltd
-E69000-E69FFF     (base 16)		Fire4 Systems UK Ltd
-				8 Regent Street
-				Leeds  West Yorkshire  LS7 4PE
-				GB
-
-70-B3-D5   (hex)		Preston Industries dba PolyScience
-3B5000-3B5FFF     (base 16)		Preston Industries dba PolyScience
-				6600 W. Touhy Ave
-				Niles  IL  60714-4588
-				US
-
-70-B3-D5   (hex)		Stone Three
-7BF000-7BFFFF     (base 16)		Stone Three
-				24 Gardner Williams Ave
-				Somerset West  Western Cape  7130
-				ZA
-
-70-B3-D5   (hex)		Cyanview
-E3A000-E3AFFF     (base 16)		Cyanview
-				26, Rue de la Foire
-				Papignies    7861
-				BE
-
-70-B3-D5   (hex)		Matrix Orbital Corporation
-2B7000-2B7FFF     (base 16)		Matrix Orbital Corporation
-				Suite 602, 4774 Westwinds Dr NE
-				Calgary  Alberta  T3J 0L7
-				CA
-
-70-B3-D5   (hex)		BLOCKSI LLC
-9E6000-9E6FFF     (base 16)		BLOCKSI LLC
-				228 Hamilton avenue 3rd floor
-				Palo Alto    94301
-				US
-
-70-B3-D5   (hex)		Krontech
-6E9000-6E9FFF     (base 16)		Krontech
-				I.T.U ARI 3 Teknokent Kron Telekomunikasyon, Maslak
-				Istanbul    34467
-				TR
-
-70-B3-D5   (hex)		ELVA-1 MICROWAVE HANDELSBOLAG
-FA3000-FA3FFF     (base 16)		ELVA-1 MICROWAVE HANDELSBOLAG
-				c/o Hornlund, Kungsgatan 54
-				Furulund    244 62
-				SE
-
-70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
-743000-743FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-70-B3-D5   (hex)		Waterkotte GmbH
-7EA000-7EAFFF     (base 16)		Waterkotte GmbH
-				Gewerkenstr. 15
-				Herne    44628
-				DE
-
-70-B3-D5   (hex)		Mo-Sys Engineering Ltd
-075000-075FFF     (base 16)		Mo-Sys Engineering Ltd
-				Thames Bank House, Tunnel Avenue
-				London    SE100PA
-				GB
-
-70-B3-D5   (hex)		Prisma Telecom Testing Srl
-689000-689FFF     (base 16)		Prisma Telecom Testing Srl
-				Via Petrocchi, 4
-				Milano  MI  20127
-				IT
-
-70-B3-D5   (hex)		KRONOTECH SRL
-8C8000-8C8FFF     (base 16)		KRONOTECH SRL
-				VIALE UNGHERIA 125
-				UDINE  ITALY/UDINE  33100
-				IT
-
-70-B3-D5   (hex)		HAVELSAN A.Ş.
-096000-096FFF     (base 16)		HAVELSAN A.Ş.
-				Mustafa Kemal Mah. 2120.Cad. No.39                   
-				ANKARA    06510 
-				TR
-
-70-B3-D5   (hex)		Triax A/S
-963000-963FFF     (base 16)		Triax A/S
-				Bjornkaervej 3
-				Hornsyld  Denmark  8783
-				DK
-
-70-B3-D5   (hex)		KST technology
-351000-351FFF     (base 16)		KST technology
-				KST B/D 4-5, Wiryeseong-daero 12-gil
-				Songpa-gu  Seoul  05636
-				KR
-
-70-B3-D5   (hex)		KSE GmbH
-D41000-D41FFF     (base 16)		KSE GmbH
-				Frühlingstraße 31-33
-				Ingolstadt    85055
-				DE
-
-70-B3-D5   (hex)		bobz GmbH
-81B000-81BFFF     (base 16)		bobz GmbH
-				Südring 3d
-				Wentorf b. Hamburg  SH  21465
-				DE
-
-70-B3-D5   (hex)		GHM-Messtechnik GmbH (Standort IMTRON)
-B6C000-B6CFFF     (base 16)		GHM-Messtechnik GmbH (Standort IMTRON)
-				Carl-Benz-Strasse 11
-				Owingen  Baden-Würrtemberg  88696
-				DE
-
-70-B3-D5   (hex)		Core Akıllı Ev Sistemleri
-6FD000-6FDFFF     (base 16)		Core Akıllı Ev Sistemleri
-				Akdeniz Mah. Cumhuriyet Bulvarı No:82/802 Konak
-				İzmir    35210
-				TR
-
-70-B3-D5   (hex)		WeWork Companies, Inc.
-2CC000-2CCFFF     (base 16)		WeWork Companies, Inc.
-				115 W 18th St
-				New York  NY  10011
-				US
-
-70-B3-D5   (hex)		Link Electric & Safety Control Co.
-60D000-60DFFF     (base 16)		Link Electric & Safety Control Co.
-				444 McNally Drive
-				Nashville    37211
-				US
-
-70-B3-D5   (hex)		Adigitalmedia
-B3A000-B3AFFF     (base 16)		Adigitalmedia
-				#211, 444, Hangeulbiseok-ro, Nowon-gu
-				seoul    01666
-				KR
-
-70-B3-D5   (hex)		LG Electronics
-723000-723FFF     (base 16)		LG Electronics
-				189, LG Gasan Digital Center, Gasan digital 1-ro, Geumcheon-gu
-				Seoul    153-803
-				KR
-
-70-B3-D5   (hex)		Galios
-EA6000-EA6FFF     (base 16)		Galios
-				Dmitriy Donskoy, 35A, 526
-				Tver    170006
-				RU
-
-70-B3-D5   (hex)		RADA Electronics Industries Ltd.
-C4D000-C4DFFF     (base 16)		RADA Electronics Industries Ltd.
-				7 Gibory Israel St.
-				Netanya    42504
-				IL
-
-70-B3-D5   (hex)		Breas Medical AB
-E88000-E88FFF     (base 16)		Breas Medical AB
-				Företagsvägen 1
-				Mölnlycke    SE-435 33
-				SE
-
-70-B3-D5   (hex)		Wilson Electronics
-95C000-95CFFF     (base 16)		Wilson Electronics
-				3301 E. Deseret Dr.
-				Saint George  UT  84790
-				US
-
-70-B3-D5   (hex)		McQ Inc
-C6C000-C6CFFF     (base 16)		McQ Inc
-				1551 FORBES ST
-				Fredericksburg  VA  22405
-				US
-
-70-B3-D5   (hex)		Paradigm Technology Services B.V.
-940000-940FFF     (base 16)		Paradigm Technology Services B.V.
-				Ambachtsweg 7
-				Groot-Ammers    2964LG
-				NL
-
-70-B3-D5   (hex)		Xacti Corporation
-828000-828FFF     (base 16)		Xacti Corporation
-				Tower East 28F, Umeda Sky bldg, 1-1-88, Oyodonaka, Kita-ku,
-				Osaka   Osaka  5316028
-				JP
-
-70-B3-D5   (hex)		QUALITTEQ LLC
-760000-760FFF     (base 16)		QUALITTEQ LLC
-				16th Parkovaya 26/1
-				Moscow    105484
-				RU
-
-70-B3-D5   (hex)		Ideetron b.v.
-9B5000-9B5FFF     (base 16)		Ideetron b.v.
-				Dorpsstraat 81
-				Doorn  Utrecht  3941JL
-				NL
-
-70-B3-D5   (hex)		Digital Matter Pty Ltd
-705000-705FFF     (base 16)		Digital Matter Pty Ltd
-				9/100 Railway Rd
-				Subiaco  WA  6008
-				AU
-
-70-B3-D5   (hex)		mg-sensor GmbH
-2BD000-2BDFFF     (base 16)		mg-sensor GmbH
-				Airport Boulevard B 210
-				Rheinmuenster    77836
-				DE
-
-70-B3-D5   (hex)		UnI Systech Co.,Ltd
-894000-894FFF     (base 16)		UnI Systech Co.,Ltd
-				A-511 Sigma2 164,Tancheongsang-ro,Bundang-gu
-				Seongnam-si  Gyeonggi-do  13631
-				KR
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-DE6000-DE6FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		BESTCODE LLC
-E3F000-E3FFFF     (base 16)		BESTCODE LLC
-				3034 SE Loop 820
-				Fort Worth  TX  76140
-				US
-
-70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
-92B000-92BFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
-				78-2 Buncheon-ri, Bongdam-eup
-				Hwaseong-city  Gyungki-do  445-894
-				KR
-
-70-B3-D5   (hex)		Wi6labs
-8F8000-8F8FFF     (base 16)		Wi6labs
-				1137 A - Avenue des Champs Blancs
-				Cesson Sevigné    35510
-				FR
-
-70-B3-D5   (hex)		Sanmina Israel
-1E6000-1E6FFF     (base 16)		Sanmina Israel
-				Koren Industrial Zone , POBox 102
-				Maalot  Israel  2101002
-				IL
-
-70-B3-D5   (hex)		Elbit Systems of America
-826000-826FFF     (base 16)		Elbit Systems of America
-				4700 Marine Creek Parkway
-				Fort Worth   TX  76179
-				US
-
-70-B3-D5   (hex)		NASA Johnson Space Center
-2AB000-2ABFFF     (base 16)		NASA Johnson Space Center
-				2101 NASA Parkway
-				Houston  TX  77058
-				US
-
-70-B3-D5   (hex)		LP Technologies Inc.
-727000-727FFF     (base 16)		LP Technologies Inc.
-				1919 N. Amidon St 216
-				Wichita  KS  67203
-				US
-
-70-B3-D5   (hex)		Health Care Originals, Inc.
-2F2000-2F2FFF     (base 16)		Health Care Originals, Inc.
-				1 Pleasant St., Ste. 442
-				Rochester  NY  14604
-				US
-
-70-B3-D5   (hex)		Spectrum Brands
-254000-254FFF     (base 16)		Spectrum Brands
-				19701 DaVinci
-				Lake Forest    92656
-				US
-
-70-B3-D5   (hex)		Vidisys GmbH
-133000-133FFF     (base 16)		Vidisys GmbH
-				Rudolf-Diesel-Ring 30
-				Sauerlach  Bavaria  82054
-				DE
-
-70-B3-D5   (hex)		SANSFIL Technologies
-844000-844FFF     (base 16)		SANSFIL Technologies
-				rue pierre Fontaine Str
-				paris  NA  04271
-				FR
-
-70-B3-D5   (hex)		Blu Wireless Technology Ltd
-6E8000-6E8FFF     (base 16)		Blu Wireless Technology Ltd
-				Engine Shed, Station Approach,
-				Bristol    BS1 6QH
-				GB
-
-70-B3-D5   (hex)		Thiel Audio Products Company, LLC
-EB9000-EB9FFF     (base 16)		Thiel Audio Products Company, LLC
-				566 Mainstream Dr, Suite 500
-				Nashville  TN  37228
-				US
-
-70-B3-D5   (hex)		Intermind Inc.
-4A5000-4A5FFF     (base 16)		Intermind Inc.
-				2-64-4-2104 Hiyoshi-honchou Kouhoku-ku
-				Yokohama  kanagawa  2230062
-				JP
-
-70-B3-D5   (hex)		ACD Elekronik GmbH
-D98000-D98FFF     (base 16)		ACD Elekronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		CONNIT
-6AD000-6ADFFF     (base 16)		CONNIT
-				231 rue Pierre et Marie Curie
-				LABEGE    31670
-				FR
-
-70-B3-D5   (hex)		Aton srl
-5BF000-5BFFFF     (base 16)		Aton srl
-				Via Guido Rossa 5
-				Spilamberto  MO  41057
-				IT
-
-70-B3-D5   (hex)		Dutile, Glines and Higgins Corporation
-FF8000-FF8FFF     (base 16)		Dutile, Glines and Higgins Corporation
-				P.O. Box 5638
-				Manchester  NH  03108
-				US
-
-70-B3-D5   (hex)		OPTSYS
-58C000-58CFFF     (base 16)		OPTSYS
-				7, rue Salvador Dali – BP 505
-				SAINT ETIENNE    42007
-				FR
-
-70-B3-D5   (hex)		Tech4Race
-C0C000-C0CFFF     (base 16)		Tech4Race
-				1137 A avenue des champs blancs
-				Cesson-Sévigné    35510
-				FR
-
-70-B3-D5   (hex)		TSAT AS
-0D3000-0D3FFF     (base 16)		TSAT AS
-				Martin Linges v 25
-				Fornebu    1364
-				NO
-
-70-B3-D5   (hex)		Dandong Dongfang Measurement & Control Technology Co., Ltd.
-C33000-C33FFF     (base 16)		Dandong Dongfang Measurement & Control Technology Co., Ltd.
-				No. 136, Binjiang M. Road, Yanjiang Development Zone
-				Dandong  Liaoning  118000
-				CN
-
-70-B3-D5   (hex)		PROFEN COMMUNICATIONS
-CC8000-CC8FFF     (base 16)		PROFEN COMMUNICATIONS
-				Famas Plaza A Blok Kat: 10 No:35 Okmeydani
-				Istanbul    34384
-				TR
-
-70-B3-D5   (hex)		Mipot S.p.a.
-C20000-C20FFF     (base 16)		Mipot S.p.a.
-				Via Corona 5
-				Cormons    34071
-				IT
-
-70-B3-D5   (hex)		Securolytics, Inc.
-125000-125FFF     (base 16)		Securolytics, Inc.
-				2002 Summit Boulevard, Suite 300
-				Atlanta  GA  30319
-				US
-
-70-B3-D5   (hex)		Thermo Fisher Scientific
-D69000-D69FFF     (base 16)		Thermo Fisher Scientific
-				27 forge Parkway
-				Franklin  MA  02038
-				US
-
-70-B3-D5   (hex)		S.E.I. CO.,LTD.
-56B000-56BFFF     (base 16)		S.E.I. CO.,LTD.
-				59 Nirayama Tada
-				Izunokuni  Shizuoka  4102133
-				JP
-
-70-B3-D5   (hex)		Camsat Przemysław Gralak
-807000-807FFF     (base 16)		Camsat Przemysław Gralak
-				Ogrodowa 2A
-				Solec Kujawski  Bydgoszcz  86-050
-				PL
-
-70-B3-D5   (hex)		Lithe Technology, LLC
-EE3000-EE3FFF     (base 16)		Lithe Technology, LLC
-				4574 North First Avenue, Suite 100
-				Tucson  AZ  85718
-				US
-
-70-B3-D5   (hex)		TIAMA
-FA0000-FA0FFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-70-B3-D5   (hex)		Elystec Technology Co., Ltd
-D4C000-D4CFFF     (base 16)		Elystec Technology Co., Ltd
-				Room 601, Zhong Da Court,Zhong Guan Garden,No.1311 Liuxian Road
-				Shenzhen  Guangdong  518000
-				CN
-
-70-B3-D5   (hex)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
-7F3000-7F3FFF     (base 16)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
-				Room 201,Building A,No.1,Qianhai 1st Road,Shengang cooperation zone,Qianhai
-				Shenzhen    518054
-				CN
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-C79000-C79FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Cominfo, Inc.
-0A0000-0A0FFF     (base 16)		Cominfo, Inc.
-				Nabrezi 695
-				Zlin    760 01
-				CZ
-
-70-B3-D5   (hex)		CRDE
-DA4000-DA4FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		ijin co.,ltd.
-2D0000-2D0FFF     (base 16)		ijin co.,ltd.
-				#109  BI, Hanyandaehak-ro
-				Ansan  South Korea  15588
-				KR
-
-70-B3-D5   (hex)		Zeroplus Technology Co.,Ltd.
-9C1000-9C1FFF     (base 16)		Zeroplus Technology Co.,Ltd.
-				3F.,No.121,Jian 8th Rd.,Zhonghe Dist.,
-				New Taipei City  Taiwan  23585
-				TW
-
-70-B3-D5   (hex)		A Trap, USA
-763000-763FFF     (base 16)		A Trap, USA
-				2021 Sperry Ave, Unit 11
-				Ventura  CA  93003
-				US
-
-70-B3-D5   (hex)		JSC “Scientific Industrial Enterprise Rubin
-F25000-F25FFF     (base 16)		JSC “Scientific Industrial Enterprise Rubin
-				2, Baydukov str.
-				Penza  Penza reg.  440000
-				RU
-
-70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
-AA3000-AA3FFF     (base 16)		LINEAGE POWER PVT LTD.,
-				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
-				BANGALORE  KARNATAKA  560074
-				IN
-
-70-B3-D5   (hex)		TATTILE SRL
-967000-967FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		PEEK TRAFFIC
-A28000-A28FFF     (base 16)		PEEK TRAFFIC
-				5401 N SAM HOUSTON PKWY W
-				HOUSTON  null  77086
-				US
-
-70-B3-D5   (hex)		Shanghai Daorech Industry Developmnet Co.,Ltd
-9DC000-9DCFFF     (base 16)		Shanghai Daorech Industry Developmnet Co.,Ltd
-				21F Hitech Plaza No.488 South Wu Ning Road
-				shanghai   shanghai   200042
-				CN
-
-70-B3-D5   (hex)		Monnit Corporation
-02E000-02EFFF     (base 16)		Monnit Corporation
-				3400 S WEST TEMPLE
-				SALT LAKE CITY  UT  84115
-				US
-
-70-B3-D5   (hex)		Axatel SrL
-D8E000-D8EFFF     (base 16)		Axatel SrL
-				Via del Mercato Nuovo, 75
-				VICENZA  ITALY  36100
-				IT
-
-70-B3-D5   (hex)		comtac AG
-BF6000-BF6FFF     (base 16)		comtac AG
-				Allenwindenstrasse 1
-				Flurlingen    8247
-				CH
-
-70-B3-D5   (hex)		ModulaTeam GmbH
-F0C000-F0CFFF     (base 16)		ModulaTeam GmbH
-				Schrannenplatz 6
-				Erding  Bavaria  85435
-				DE
-
-70-B3-D5   (hex)		Fracarro srl
-E59000-E59FFF     (base 16)		Fracarro srl
-				VIA CAZZARO 3
-				CASTELFRANCO VENETO  TV  31033
-				IT
-
-70-B3-D5   (hex)		Qtechnology A/S
-C74000-C74FFF     (base 16)		Qtechnology A/S
-				Valby Langgade 142, 1.
-				Valby  DK  2500
-				DK
-
-70-B3-D5   (hex)		SPEA SPA
-3F3000-3F3FFF     (base 16)		SPEA SPA
-				Via Torino 16
-				Volpiano  Piemonte  10088
-				IT
-
-70-B3-D5   (hex)		Raven Systems Design, Inc
-0B0000-0B0FFF     (base 16)		Raven Systems Design, Inc
-				7777 Wall St
-				Valley View  OH  44125
-				US
-
-70-B3-D5   (hex)		Mitsubishi Electric Micro-Computer Application Software Co.,Ltd. 
-F37000-F37FFF     (base 16)		Mitsubishi Electric Micro-Computer Application Software Co.,Ltd. 
-				Inadera, 2-5-1
-				Amagasaki  Hyogo  661-0981
-				JP
-
-70-B3-D5   (hex)		SMITEC S.p.A.
-138000-138FFF     (base 16)		SMITEC S.p.A.
-				Via Carlo Ceresa, 10
-				San Giovanni Bianco  Bergamo  24015
-				IT
-
-70-B3-D5   (hex)		LGE
-630000-630FFF     (base 16)		LGE
-				2621, Nambusunhwan-ro, Gangnam-gu
-				Seoul    06267
-				KR
-
-70-B3-D5   (hex)		Veeco Instruments
-D08000-D08FFF     (base 16)		Veeco Instruments
-				4875 Constellation Dr
-				St. Paul  MN  55127
-				US
-
-70-B3-D5   (hex)		University of Wisconsin Madison - Department of High Energy Physics
-98C000-98CFFF     (base 16)		University of Wisconsin Madison - Department of High Energy Physics
-				1150 University Ave
-				Madison  WI  53706
-				US
-
-70-B3-D5   (hex)		Excelfore Corporation
-7A1000-7A1FFF     (base 16)		Excelfore Corporation
-				3155 Kearnet St, Suite 200
-				Fremont  CA  94538
-				US
-
-70-B3-D5   (hex)		Critical Link LLC
-F1D000-F1DFFF     (base 16)		Critical Link LLC
-				6712 Brooklawn Parkway
-				Syracuse  null  13211
-				US
-
-70-B3-D5   (hex)		XLOGIC srl
-85E000-85EFFF     (base 16)		XLOGIC srl
-				Via A. Grandi 23
-				Cinisello Balsamo    20092
-				IT
-
-70-B3-D5   (hex)		Unlimiterhear co.,ltd. taiwan branch
-902000-902FFF     (base 16)		Unlimiterhear co.,ltd. taiwan branch
-				5F-1 No18.-1, sec.3 , Ren-Ai Rd.
-				Taipei City    106
-				TW
-
-70-B3-D5   (hex)		DYCEC, S.A.
-1DE000-1DEFFF     (base 16)		DYCEC, S.A.
-				Torres Quevedo, 1-P.T.M.
-				Tres Cantos  Madrid  28760
-				ES
-
-70-B3-D5   (hex)		Symetrics Industries d.b.a. Extant Aerospace
-FFC000-FFCFFF     (base 16)		Symetrics Industries d.b.a. Extant Aerospace
-				1615 West NASA Blvd
-				Melbourne  FL  32901
-				US
-
-70-B3-D5   (hex)		Nordson Corporation
-FA7000-FA7FFF     (base 16)		Nordson Corporation
-				11475 Lakefield Dr
-				Duluth  GA  30097
-				US
-
-70-B3-D5   (hex)		Radig Hard & Software
-FAF000-FAFFFF     (base 16)		Radig Hard & Software
-				An der Bahn 18
-				Kreuztal    57223
-				DE
-
-70-B3-D5   (hex)		GREEN HOUSE CO., LTD.
-4CF000-4CFFFF     (base 16)		GREEN HOUSE CO., LTD.
-				5F Unosawa Building
-				Ebisu Shibuya-ku  Tokyo  150-0013
-				JP
-
-70-B3-D5   (hex)		ACD Elekronik GmbH
-5CA000-5CAFFF     (base 16)		ACD Elekronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		Skopei B.V.
-880000-880FFF     (base 16)		Skopei B.V.
-				Haagweg 199
-				Rijswijk  ZH  2281AM
-				NL
-
-70-B3-D5   (hex)		Edgeware AB
-60B000-60BFFF     (base 16)		Edgeware AB
-				Master Samuelsgatan 42
-				Stockholm    11157
-				SE
-
-70-B3-D5   (hex)		Edgeware AB
-9F6000-9F6FFF     (base 16)		Edgeware AB
-				Master Samuelsgatan 42
-				Stockholm    11157
-				SE
-
-70-B3-D5   (hex)		Tata Communications Ltd.
-F83000-F83FFF     (base 16)		Tata Communications Ltd.
-				VSB Mahatma Gandhi Road Fort Mumbai
-				Mumbai  Maharashtra  400001
-				IN
-
-70-B3-D5   (hex)		Triax A/S
-C2E000-C2EFFF     (base 16)		Triax A/S
-				Bjornkaervej 3
-				Hornsyld  Denmark  8783
-				DK
-
-70-B3-D5   (hex)		HAIYANG OLIX CO.,LTD.
-5E5000-5E5FFF     (base 16)		HAIYANG OLIX CO.,LTD.
-				103-903 BUCHEONTECHNOPARK 364 SAMJEONG
-				BUCHEON  GEYONGGI  421-740
-				KR
-
-70-B3-D5   (hex)		PTN Electronics Limited 
-0A1000-0A1FFF     (base 16)		PTN Electronics Limited 
-				G2, JinXiongDa Technology Park, HuanGuan Road South 105th  GuanLan Block, LongHua New District 
-				ShenZhen City  guangdong  518000
-				CN
-
-70-B3-D5   (hex)		Merus Power Dynamics Ltd.
-37C000-37CFFF     (base 16)		Merus Power Dynamics Ltd.
-				Pirkkalaistie 1
-				Nokia    37100
-				FI
-
-70-B3-D5   (hex)		DoWoo Digitech
-039000-039FFF     (base 16)		DoWoo Digitech
-				A-706ho,Ssangyong IT Twintower, dunchondaero, JungWon-Gu
-				Seongnam-si  Gyeonggi-do  13216
-				KR
-
-70-B3-D5   (hex)		Dextera Labs
-0EF000-0EFFFF     (base 16)		Dextera Labs
-				3175 Quatre-Bourgeois #104
-				Quebec  Quebec  G1W2K7
-				CA
-
-70-B3-D5   (hex)		ENGenesis 
-D25000-D25FFF     (base 16)		ENGenesis 
-				19 Technology Drive
-				Auburn  MA  01501
-				US
-
-70-B3-D5   (hex)		Zehntner Testing Instruments
-267000-267FFF     (base 16)		Zehntner Testing Instruments
-				Gewerbestrasse 4
-				Sissach    4450
-				CH
-
-70-B3-D5   (hex)		APPLIED PROCESSING
-E67000-E67FFF     (base 16)		APPLIED PROCESSING
-				176 rue du Marechal Foch
-				Flins sur Seine    78410
-				FR
-
-70-B3-D5   (hex)		National TeleConsultants LLC
-173000-173FFF     (base 16)		National TeleConsultants LLC
-				550 North Brand Boulevard, 17th Floor
-				Glendale  CA  91203-1944
-				US
-
-70-B3-D5   (hex)		Engage Technologies
-20D000-20DFFF     (base 16)		Engage Technologies
-				7041 Boone Avenue North
-				Brooklyn Park  MN  55428
-				US
-
-70-B3-D5   (hex)		RTDS Technologies Inc.
-542000-542FFF     (base 16)		RTDS Technologies Inc.
-				100-150 Innovation Drive
-				Winnipeg  Manitoba  R3T 2E1
-				CA
-
-70-B3-D5   (hex)		WM Design s.r.o
-D55000-D55FFF     (base 16)		WM Design s.r.o
-				Zamoravi 1572
-				Napajedla    76361
-				CZ
-
-70-B3-D5   (hex)		JSC Kaluga Astral
-E98000-E98FFF     (base 16)		JSC Kaluga Astral
-				Tsyolkovsky 4
-				Kaluga  Kaluga  248000
-				RU
-
-70-B3-D5   (hex)		eleven-x
-149000-149FFF     (base 16)		eleven-x
-				295 Hagey Blvd
-				Waterloo  Ontario  N2L 6R5
-				CA
-
-70-B3-D5   (hex)		REQUEA
-952000-952FFF     (base 16)		REQUEA
-				9 RUE ROBERT
-				LYON    69006
-				FR
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-5E2000-5E2FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		Shanghai JaWay Information Technology Co., Ltd.
-5C1000-5C1FFF     (base 16)		Shanghai JaWay Information Technology Co., Ltd.
-				Rm. 1102, Science and Technology Building A, No. 900 of Yishan Road, Xuhui District,
-				Shanghai    200030
-				CN
-
-70-B3-D5   (hex)		Telecast Inc.
-BE9000-BE9FFF     (base 16)		Telecast Inc.
-				Jindaiji-Motomachi 3-36-11-103
-				Chofu  Tokyo  182-0017
-				JP
-
-70-B3-D5   (hex)		Code Blue Corporation 
-6D0000-6D0FFF     (base 16)		Code Blue Corporation 
-				259 Hedcor Street
-				Holland  MI  49423
-				US
-
-70-B3-D5   (hex)		NimbeLink Corp
-16F000-16FFFF     (base 16)		NimbeLink Corp
-				3131 Fernbrook LN N, Ste 100
-				Plymouth  MN  55447
-				US
-
-70-B3-D5   (hex)		Birket Engineering
-188000-188FFF     (base 16)		Birket Engineering
-				162 W Plant St
-				Winter Garden  FL  34787
-				US
-
-70-B3-D5   (hex)		Geppetto Electronics
-11F000-11FFFF     (base 16)		Geppetto Electronics
-				2784 Homestead Rd. #323
-				Santa Clara  CA  95051
-				US
-
-70-B3-D5   (hex)		Zhejiang Hao Teng Electronic Technology Co., Ltd.
-563000-563FFF     (base 16)		Zhejiang Hao Teng Electronic Technology Co., Ltd.
-				Liandu District Information Industry Park 12
-				Lishui  ZhejiangZhejiang Hao Teng Electronic Technology Co., Ltd.  323000
-				CN
-
-70-B3-D5   (hex)		F-domain corporation
-8C2000-8C2FFF     (base 16)		F-domain corporation
-				157 Nakayashiki Sobue town
-				Inazawa city   Aichi pref.  495-0001
-				JP
-
-70-B3-D5   (hex)		VAPE RAIL INTERNATIONAL
-597000-597FFF     (base 16)		VAPE RAIL INTERNATIONAL
-				9 RUE DES NOISETIERS
-				MONTREAL LA CLUSE    01460
-				FR
-
-70-B3-D5   (hex)		EarTex
-462000-462FFF     (base 16)		EarTex
-				41 Corsham Street
-				London  England  N1 6DR
-				GB
-
-70-B3-D5   (hex)		RF Code
-ADB000-ADBFFF     (base 16)		RF Code
-				2600 Longhorn Blvd. ste 111
-				Austin  null  78758
-				US
-
-70-B3-D5   (hex)		REO AG
-850000-850FFF     (base 16)		REO AG
-				Brühlerstr. 100
-				Solingen    42657
-				DE
-
-70-B3-D5   (hex)		CT Company
-5D5000-5D5FFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-70-B3-D5   (hex)		Dream I System Co., Ltd
-04B000-04BFFF     (base 16)		Dream I System Co., Ltd
-				#510, 298, Beotkkot-ro, Ceumcheon-gu
-				Seoul    08510
-				KR
-
-70-B3-D5   (hex)		DOSADORES ALLTRONIC
-C3E000-C3EFFF     (base 16)		DOSADORES ALLTRONIC
-				RUA VALENTE DE NOVAIS, 270
-				SÃO PAULO  SAO PAULO  08120-420
-				BR
-
-70-B3-D5   (hex)		Novathings
-81E000-81EFFF     (base 16)		Novathings
-				100 Impasse des houilleres
-				MEYREUIL    13590
-				FR
-
-70-B3-D5   (hex)		Honeywell Safety Products USA, Inc
-C0F000-C0FFFF     (base 16)		Honeywell Safety Products USA, Inc
-				7828 Waterville Road
-				San Diego  CA  92154
-				US
-
-70-B3-D5   (hex)		Applied Materials
-7E1000-7E1FFF     (base 16)		Applied Materials
-				35 Dory Rd
-				Gloucester  MA  01930
-				US
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-BCC000-BCCFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		OSR R&D ISRAEL LTD
-AB0000-AB0FFF     (base 16)		OSR R&D ISRAEL LTD
-				24 Magshimim St
-				Petah-Tikva    4934833
-				IL
-
-70-B3-D5   (hex)		Motec Pty Ltd
-B77000-B77FFF     (base 16)		Motec Pty Ltd
-				121 Merrindale Drive
-				Croydon South  Victoria  3136
-				AU
-
-70-B3-D5   (hex)		CRDE
-ACD000-ACDFFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		New Imaging Technologies
-2AC000-2ACFFF     (base 16)		New Imaging Technologies
-				1 impasse de la noisette, Bâtiment D, BP 426
-				Verrières le buisson  Essonne  91370
-				FR
-
-70-B3-D5   (hex)		Alpiq InTec Management AG
-833000-833FFF     (base 16)		Alpiq InTec Management AG
-				Hohlstrasse 188
-				Zürich     8004
-				CH
-
-70-B3-D5   (hex)		Netberg
-CCF000-CCFFFF     (base 16)		Netberg
-				2F-1 No.36, Park St., Nangang District
-				Taipei    11560
-				TW
-
-70-B3-D5   (hex)		Hudson Robotics
-1DB000-1DBFFF     (base 16)		Hudson Robotics
-				10 Stern Ave
-				Springfield  NJ  07081
-				US
-
-70-B3-D5   (hex)		Asis Pro
-593000-593FFF     (base 16)		Asis Pro
-				27 Shaked st
-				Hevel Modiin Industrial Park    7319900
-				IL
-
-70-B3-D5   (hex)		Orbit International
-B3F000-B3FFFF     (base 16)		Orbit International
-				80 Cabot Ct
-				Hauppauge  NY  11788
-				US
-
-70-B3-D5   (hex)		COMTECH Kft.
-09F000-09FFFF     (base 16)		COMTECH Kft.
-				Torok Ignac u. 66.
-				Gyor  Gyor-Moson-Sopron  9028
-				HU
-
-70-B3-D5   (hex)		Eginity, Inc.
-910000-910FFF     (base 16)		Eginity, Inc.
-				37 N Orange Ave STE 770
-				Orlando    32801
-				US
-
-70-B3-D5   (hex)		Schneider Electric Motion USA
-7D1000-7D1FFF     (base 16)		Schneider Electric Motion USA
-				370 N. Main St.
-				Marlborough  CT  06447
-				US
-
-70-B3-D5   (hex)		BELECTRIC GmbH
-2B9000-2B9FFF     (base 16)		BELECTRIC GmbH
-				Wadenbrunner Str, 10
-				Kolitzheim  Bavaria  97509
-				DE
-
-70-B3-D5   (hex)		Xemex NV
-AAA000-AAAFFF     (base 16)		Xemex NV
-				Metropoolstraat 11a
-				Schoten  Antwerp  BE-2900
-				BE
-
-70-B3-D5   (hex)		KST technology
-012000-012FFF     (base 16)		KST technology
-				164-1, KST b/d., Bangi-dong, songpa-gu
-				SEOUL  N/A  138-050
-				KR
-
-70-B3-D5   (hex)		J-Factor Embedded Technologies
-19E000-19EFFF     (base 16)		J-Factor Embedded Technologies
-				1441 Laura Lane #201
-				Pottstown  PA  19464
-				US
-
-70-B3-D5   (hex)		ADTEK
-1EF000-1EFFFF     (base 16)		ADTEK
-				4F-18,No.14,Lane 609,Sec.5,Chongsin Rd.,Sanchong Dist,
-				New Taipei City  Taiwan,(R.O.C)  24159
-				TW
-
-70-B3-D5   (hex)		Becton Dickinson
-36A000-36AFFF     (base 16)		Becton Dickinson
-				7 Loveton Circle
-				Sparks  MD  21152
-				US
-
-70-B3-D5   (hex)		Vitsch Electronics
-6A8000-6A8FFF     (base 16)		Vitsch Electronics
-				Dragonder 24-E
-				Valkenswaard  Noord-Brabant  5554 GM
-				NL
-
-70-B3-D5   (hex)		Intercomp S.p.A.
-9B6000-9B6FFF     (base 16)		Intercomp S.p.A.
-				Via della Scienza, 27
-				Verona    37139
-				IT
-
-70-B3-D5   (hex)		carbonTRACK
-F35000-F35FFF     (base 16)		carbonTRACK
-				Level 2 104 Burwood Road
-				Hawthorn   Vic  3122
-				AU
-
-70-B3-D5   (hex)		PPI Inc.
-A21000-A21FFF     (base 16)		PPI Inc.
-				Cheomdan-Gwagiro 345
-				Gwangju  Buk-gu  61 008
-				KR
-
-70-B3-D5   (hex)		GridBridge Inc
-CE5000-CE5FFF     (base 16)		GridBridge Inc
-				130 Penmarc Drive, Suite 101
-				Raleigh  NC  27603
-				US
-
-70-B3-D5   (hex)		Sea Air and Land Communications Ltd
-5AB000-5ABFFF     (base 16)		Sea Air and Land Communications Ltd
-				10 Magdala Place
-				Christchurch  Canterbury  8024
-				NZ
-
-70-B3-D5   (hex)		HBH Microwave GmbH
-CD2000-CD2FFF     (base 16)		HBH Microwave GmbH
-				Helmholtzstr. 1
-				Stutensee    76297
-				DE
-
-70-B3-D5   (hex)		Firefly RFID Solutions
-8B3000-8B3FFF     (base 16)		Firefly RFID Solutions
-				1521 Boone Trail Rd
-				Sanford  NC  27330
-				US
-
-70-B3-D5   (hex)		Bartec GmbH
-AAD000-AADFFF     (base 16)		Bartec GmbH
-				Max-Eyth-Str. 16
-				Bad Mergentheim    97980 
-				DE
-
-70-B3-D5   (hex)		POLSYSTEM SI SP. Z O.O., S.K.A.
-B9E000-B9EFFF     (base 16)		POLSYSTEM SI SP. Z O.O., S.K.A.
-				Francuska 92
-				Wrocław  Dolnośląskie  54-405
-				PL
-
-70-B3-D5   (hex)		TSUBAKIMOTO CHAIN CO.
-85B000-85BFFF     (base 16)		TSUBAKIMOTO CHAIN CO.
-				Nakanoshima Mitsui Building, 6F, 3-3-3, Nakanoshima
-				Kita-ku  Osaka  530-0005
-				JP
-
-70-B3-D5   (hex)		Vtron Pty Ltd
-E0F000-E0FFFF     (base 16)		Vtron Pty Ltd
-				Unit 2, 62 Township Drive West
-				West Burleigh  Queensland  4219
-				AU
-
-70-B3-D5   (hex)		Shanghai Longpal Communication Equipment Co., Ltd.
-896000-896FFF     (base 16)		Shanghai Longpal Communication Equipment Co., Ltd.
-				18 LongPal Building, GuangFuLin Rd 4855
-				Shanghai    201616
-				CN
-
-70-B3-D5   (hex)		GreenFlux
-12E000-12EFFF     (base 16)		GreenFlux
-				Mauritskade 63
-				Amsterdam    1092 AD
-				NL
-
-70-B3-D5   (hex)		SLAT
-349000-349FFF     (base 16)		SLAT
-				11 Rue Jean-Elysée DUPUY
-				Champagne au Mont d'Or  Rhône  69543
-				FR
-
-70-B3-D5   (hex)		CIELLE S.R.L.
-12C000-12CFFF     (base 16)		CIELLE S.R.L.
-				VIA TONIOLO, 6
-				PERO DI BREDA DI PIAVE  TREVISO  31030
-				IT
-
-70-B3-D5   (hex)		QuirkLogic
-885000-885FFF     (base 16)		QuirkLogic
-				3600 4th Street SE
-				Calgary  Alberta  T2G2W3
-				CA
-
-70-B3-D5   (hex)		Critical Link LLC
-761000-761FFF     (base 16)		Critical Link LLC
-				6712 BROOKLAWN PKWY
-				SYRACUSE  NY  13211
-				US
-
-70-B3-D5   (hex)		Moving iMage Technologies LLC
-4C5000-4C5FFF     (base 16)		Moving iMage Technologies LLC
-				17760 Newhope Street Suite B
-				Fountain Valley  CA  92708
-				US
-
-70-B3-D5   (hex)		Ideas srl
-9FA000-9FAFFF     (base 16)		Ideas srl
-				Via dei Brughi, 21
-				Gessate  Milan  20060
-				IT
-
-70-B3-D5   (hex)		M2M Cybernetics Pvt Ltd
-FCA000-FCAFFF     (base 16)		M2M Cybernetics Pvt Ltd
-				GH-11, Ahinsa Khand 2, Indirapuram
-				Ghaziabad  Uttar Pradesh  201010
-				IN
-
-70-B3-D5   (hex)		Procon Electronics Pty Ltd
-55B000-55BFFF     (base 16)		Procon Electronics Pty Ltd
-				P O Box 164
-				Seven Hills  NSW  1730
-				AU
-
-70-B3-D5   (hex)		Samriddi Automations Pvt. Ltd.
-11C000-11CFFF     (base 16)		Samriddi Automations Pvt. Ltd.
-				F-365
-				Noida  up  201307
-				IN
-
-70-B3-D5   (hex)		Promess Inc.
-1DA000-1DAFFF     (base 16)		Promess Inc.
-				11429 Grand River
-				Brighton  MI  48116
-				US
-
-70-B3-D5   (hex)		GIFAS-ELECTRIC GmbH
-650000-650FFF     (base 16)		GIFAS-ELECTRIC GmbH
-				Dietrichstrasse  2
-				Rheineck  St.Gallen  9424
-				CH
-
-70-B3-D5   (hex)		Netool LLC
-75B000-75BFFF     (base 16)		Netool LLC
-				18515 san Antonio street
-				fountain valley  CA  92708
-				US
-
-70-B3-D5   (hex)		ROMO Wind A/S
-147000-147FFF     (base 16)		ROMO Wind A/S
-				Olof Palmes Allé 47
-				Aarhus N    8200
-				DK
-
-70-B3-D5   (hex)		Zoe Medical
-721000-721FFF     (base 16)		Zoe Medical
-				460 Boston Street
-				Topsfield  MA  01983
-				US
-
-70-B3-D5   (hex)		UNMANNED SPA
-0D2000-0D2FFF     (base 16)		UNMANNED SPA
-				sevilla lote 13 s/n 
-				Valdivia  Los Rios  5090000
-				CL
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-C91000-C91FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		ART SPA
-6B5000-6B5FFF     (base 16)		ART SPA
-				VOC.PISCHIELLO, 20
-				PASSIGNANO SUL TRASIMENO  PG  06065
-				IT
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-65A000-65AFFF     (base 16)		Aplex Technology Inc.
-				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-7CE000-7CEFFF     (base 16)		Aplex Technology Inc.
-				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-70-B3-D5   (hex)		GWF MessSysteme AG
-387000-387FFF     (base 16)		GWF MessSysteme AG
-				Obergrundstrasse 119
-				Luzern    6002
-				CH
-
-70-B3-D5   (hex)		Power Ltd.
-776000-776FFF     (base 16)		Power Ltd.
-				Kazal str. 64-66
-				Budapest    1031
-				HU
-
-70-B3-D5   (hex)		CTG sp. z o. o.
-396000-396FFF     (base 16)		CTG sp. z o. o.
-				ul. Katowicka 24
-				Jastrzebie-Zdroj    44-335
-				PL
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-297000-297FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		UB330.net d.o.o.
-B72000-B72FFF     (base 16)		UB330.net d.o.o.
-				Radio cesta 1
-				Domzale    1230
-				SI
-
-70-B3-D5   (hex)		Living Water
-367000-367FFF     (base 16)		Living Water
-				629 Yorkshire Ct
-				Livermore  CA  94551
-				US
-
-70-B3-D5   (hex)		Telaeris, Inc.
-7DE000-7DEFFF     (base 16)		Telaeris, Inc.
-				9123 Chesapeake Dr.
-				San Diego  CA  92123
-				US
-
-70-B3-D5   (hex)		WiTagg, Inc
-4FE000-4FEFFF     (base 16)		WiTagg, Inc
-				1045 Linda Vista Avenue
-				Mountain View  CA  94043
-				US
-
-70-B3-D5   (hex)		Andium
-0BD000-0BDFFF     (base 16)		Andium
-				609 E 11th Street, 2B
-				New York  NY  10009
-				US
-
-70-B3-D5   (hex)		StreamPlay Oy Ltd
-D2B000-D2BFFF     (base 16)		StreamPlay Oy Ltd
-				Sarankulmankatu 12 B
-				Tampere    33900
-				FI
-
-70-B3-D5   (hex)		KMtronic ltd
-3A5000-3A5FFF     (base 16)		KMtronic ltd
-				Dobri Czintulov 28A str.
-				 Gorna Oryahovica  VT  5100
-				BG
-
-70-B3-D5   (hex)		Spanawave Corporation
-DFF000-DFFFFF     (base 16)		Spanawave Corporation
-				1640 Lead Hill Blvd., Suite 130
-				Roseville  CA  95661
-				US
-
-70-B3-D5   (hex)		SEASON DESIGN TECHNOLOGY
-10A000-10AFFF     (base 16)		SEASON DESIGN TECHNOLOGY
-				FLOOR 4, WARDS EXCHANGE, 199 ECCLESALL ROAD
-				SHEFFIELD  SOUTH YORKSHIRE  S11 8HW
-				GB
-
-70-B3-D5   (hex)		Groupe Citypassenger Inc
-E7E000-E7EFFF     (base 16)		Groupe Citypassenger Inc
-				1117 sainte catherine ouest
-				Montreal  Quebec  H3B1H9
-				CA
-
-70-B3-D5   (hex)		Voltaware Limited
-277000-277FFF     (base 16)		Voltaware Limited
-				282 Earls Court Road
-				London  London  SW5 9AS
-				GB
-
-70-B3-D5   (hex)		United States Technologies Inc.
-74F000-74FFFF     (base 16)		United States Technologies Inc.
-				1701 Pollitt Drive
-				Fair Lawn  NJ  07410
-				US
-
-70-B3-D5   (hex)		Sycomp Electronic GmbH
-3F6000-3F6FFF     (base 16)		Sycomp Electronic GmbH
-				Einsteinstr 7
-				Dachau    85221
-				DE
-
-70-B3-D5   (hex)		GILLAM-FEI S.A.
-31E000-31EFFF     (base 16)		GILLAM-FEI S.A.
-				Mont St Martin 58
-				LIEGE    B4000
-				BE
-
-70-B3-D5   (hex)		ISAC SRL
-ADE000-ADEFFF     (base 16)		ISAC SRL
-				via Maestri del Lavoro 30
-				CASCINA  PISA  56021
-				IT
-
-70-B3-D5   (hex)		HMicro Inc
-8C5000-8C5FFF     (base 16)		HMicro Inc
-				39355 California St., Suite 303
-				Fremont  null  94538
-				US
-
-70-B3-D5   (hex)		Par-Tech, Inc.
-47C000-47CFFF     (base 16)		Par-Tech, Inc.
-				139 Premier Dr.
-				Lake Orion  MI  48359
-				US
-
-70-B3-D5   (hex)		Beeper Communications Ltd.
-8EF000-8EFFFF     (base 16)		Beeper Communications Ltd.
-				No6, Hataas str.
-				Ramat-Gan    5251247
-				IL
-
-70-B3-D5   (hex)		Impulse Networks Pte Ltd
-493000-493FFF     (base 16)		Impulse Networks Pte Ltd
-				1 Raffles Place, #44-08 Raffles Place
-				Singapore    048616
-				SG
-
-70-B3-D5   (hex)		CARE PVT LTD
-FE4000-FE4FFF     (base 16)		CARE PVT LTD
-				19-A Attaturk Avenue G-5/1
-				Islamabad  Fedral Capital  44000
-				PK
-
-70-B3-D5   (hex)		Silicon Safe Ltd
-544000-544FFF     (base 16)		Silicon Safe Ltd
-				St John's Innovation centre, Crowley road
-				Cambridge  Cambridgeshire  Cb4 ows
-				GB
-
-70-B3-D5   (hex)		Les distributions Multi-Secure incorporee
-FEB000-FEBFFF     (base 16)		Les distributions Multi-Secure incorporee
-				7 Provost
-				La Prairie  Quebec  J5R 5Y7
-				CA
-
-70-B3-D5   (hex)		Redco Audio Inc
-429000-429FFF     (base 16)		Redco Audio Inc
-				1701 Stratford Ave
-				Stratford  CT  06615
-				US
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-202000-202FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Lucas-Nülle GmbH
-0B8000-0B8FFF     (base 16)		Lucas-Nülle GmbH
-				Siemensstr. 2
-				Kerpen  NRW  50170
-				DE
-
-70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
-B93000-B93FFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
-				Sector Foresta 43, local 26
-				Tres Cantos  Madrid  28760
-				ES
-
-70-B3-D5   (hex)		CRDE
-592000-592FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		RIC Electronics
-12B000-12BFFF     (base 16)		RIC Electronics
-				1 - 5628 Riverbend Drive
-				Burnaby  BC  V3N 0C1
-				CA
-
-70-B3-D5   (hex)		Vocality International Ltd
-0FE000-0FEFFF     (base 16)		Vocality International Ltd
-				Lydling Barn
-				Shackleford  Surrey  GU8 6AP
-				GB
-
-70-B3-D5   (hex)		2-Observe
-14D000-14DFFF     (base 16)		2-Observe
-				Rue du Bois Saint-Jean, 15/1
-				Sereing  Liège  4102
-				BE
-
-70-B3-D5   (hex)		FLEXTRONICS
-216000-216FFF     (base 16)		FLEXTRONICS
-				Carretera Base Aerea 5850 int 4
-				Zapopan  Jalisco  45136
-				MX
-
-70-B3-D5   (hex)		Dynacard Co., Ltd.
-955000-955FFF     (base 16)		Dynacard Co., Ltd.
-				1F.,No.19-1,Ln.222,Dunhua N.Rd.
-				Taipei  Tapei  105
-				TW
-
-70-B3-D5   (hex)		GLIAL TECHNOLOGY
-6A1000-6A1FFF     (base 16)		GLIAL TECHNOLOGY
-				7 Rue Aristide Briand
-				Nuits-Saint-Georges    21700
-				FR
-
-70-B3-D5   (hex)		Integrated Control Corp.
-895000-895FFF     (base 16)		Integrated Control Corp.
-				748 Park Ave
-				Huntington  NY  11743
-				US
-
-70-B3-D5   (hex)		TTI Ltd
-3CA000-3CAFFF     (base 16)		TTI Ltd
-				5-y Donskoy pr-d, 15с2
-				Moscow    119334
-				RU
-
-70-B3-D5   (hex)		CASWA
-5BE000-5BEFFF     (base 16)		CASWA
-				Unit2/33 Horus bend
-				Bibra Lake  WA  6163
-				AU
-
-70-B3-D5   (hex)		Detec Systems Ltd
-13C000-13CFFF     (base 16)		Detec Systems Ltd
-				1728 Shearwater Terrace
-				Sidney  BC  V8L 5L4
-				CA
-
-70-B3-D5   (hex)		Toray　Medical　Co.,Ltd
-2FA000-2FAFFF     (base 16)		Toray　Medical　Co.,Ltd
-				405-65　onoue　ashitaka
-				numadu  shizuoka  410-0001
-				JP
-
-70-B3-D5   (hex)		Solvera Lynx d.d.
-7F8000-7F8FFF     (base 16)		Solvera Lynx d.d.
-				Stegne 23A
-				1000 Ljubljana  Ljubljana  00386
-				SI
-
-70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
-4C4000-4C4FFF     (base 16)		OOO Research and Production Center Computer Technologies
-				Komsomolsky avenue, 90-17
-				Perm  Perm Region  614010
-				RU
-
-70-B3-D5   (hex)		Momentum Data Systems
-E45000-E45FFF     (base 16)		Momentum Data Systems
-				5432 Bolsa Ave Unit B
-				Huntington Beach  CA  92649
-				US
-
-70-B3-D5   (hex)		Skreens
-EB7000-EB7FFF     (base 16)		Skreens
-				22 Ames Road
-				Foxboro  MA  02035
-				US
-
-70-B3-D5   (hex)		VirtualHere Pty. Ltd.
-F56000-F56FFF     (base 16)		VirtualHere Pty. Ltd.
-				6/5 Wentworth St
-				Manly  NSW  2095
-				AU
-
-70-B3-D5   (hex)		ABB
-892000-892FFF     (base 16)		ABB
-				Fulachstrasse 150
-				Schaffhausen    8200
-				CH
-
-70-B3-D5   (hex)		Transportal Solutions Ltd
-EA2000-EA2FFF     (base 16)		Transportal Solutions Ltd
-				The Offices @ The Old Cow Barn
-				Masham  North Yorkshire  HG4 4NE
-				GB
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-148000-148FFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		Cubitech
-893000-893FFF     (base 16)		Cubitech
-				4-6 Kiprou str
-				Tavros  Athens  17778
-				GR
-
-70-B3-D5   (hex)		Kokam Co., Ltd
-A2E000-A2EFFF     (base 16)		Kokam Co., Ltd
-				1022, Gyeongsu-daero, Jangan-gu
-				Suwon-si  Gyeonggi-do  16203
-				KR
-
-70-B3-D5   (hex)		Digital Outfit
-353000-353FFF     (base 16)		Digital Outfit
-				329 15th St E
-				North Vancouver  BC  V7L 2R6
-				CA
-
-70-B3-D5   (hex)		A.F.MENSAH, INC
-F5B000-F5BFFF     (base 16)		A.F.MENSAH, INC
-				252 NASSAU ST, 2ND FLOOR
-				PRINCETON  NJ  08542
-				US
-
-70-B3-D5   (hex)		Business Marketers Group, Inc.
-A72000-A72FFF     (base 16)		Business Marketers Group, Inc.
-				N56W24720 N. Corporate Circle
-				Sussex  WI  53089
-				US
-
-70-B3-D5   (hex)		BBR Verkehrstechnik GmbH
-AEA000-AEAFFF     (base 16)		BBR Verkehrstechnik GmbH
-				Pillaustrasse 1e
-				Braunschweig    38126
-				DE
-
-70-B3-D5   (hex)		Qowisio
-F6D000-F6DFFF     (base 16)		Qowisio
-				4 rue fulton
-				Angers    49000
-				FR
-
-70-B3-D5   (hex)		TATTILE SRL
-0D6000-0D6FFF     (base 16)		TATTILE SRL
-				via G.Donizetti 1/3/5
-				Brescia    25030
-				IT
-
-70-B3-D5   (hex)		infrachip
-551000-551FFF     (base 16)		infrachip
-				Danwan-Gu, Yeonsuwan-Ro, Post-Bi Center
-				Ansan  Gyeonggi  425-849
-				KR
-
-70-B3-D5   (hex)		MAHLE
-B7A000-B7AFFF     (base 16)		MAHLE
-				23030 Haggerty Road
-				Farmington Hills  MI  48335
-				US
-
-70-B3-D5   (hex)		Becton Dickinson
-6C7000-6C7FFF     (base 16)		Becton Dickinson
-				7 Loveton Circle
-				Sparks  MD  21152
-				US
-
-70-B3-D5   (hex)		Shenzhen Riitek Technology Co.,Ltd
-913000-913FFF     (base 16)		Shenzhen Riitek Technology Co.,Ltd
-				4F, Building1, Zhongkenou Industry Park, Hezhou Development, Baoan district,
-				Shenzhen,    518000
-				CN
-
-70-B3-D5   (hex)		BEEcube Inc.
-CC1000-CC1FFF     (base 16)		BEEcube Inc.
-				39465 Paseo Padre Pkwy
-				Fremont  CA  94538
-				US
-
-70-B3-D5   (hex)		Syncopated Engineering Inc
-522000-522FFF     (base 16)		Syncopated Engineering Inc
-				13136 Williamfield Dr
-				Ellicott City  MD  21042
-				US
-
-70-B3-D5   (hex)		EMAC, Inc.
-654000-654FFF     (base 16)		EMAC, Inc.
-				2390 EMAC Way
-				Carbondale  IL  62901
-				US
-
-70-B3-D5   (hex)		Kuebrich Ingeniergesellschaft mbh & Co. KG
-CB6000-CB6FFF     (base 16)		Kuebrich Ingeniergesellschaft mbh & Co. KG
-				Weissmuehle 10
-				Priesendorf    96170
-				DE
-
-70-B3-D5   (hex)		Zehnder Group Nederland
-426000-426FFF     (base 16)		Zehnder Group Nederland
-				Postbus 621
-				Zwolle    8000 AP  
-				NL
-
-70-B3-D5   (hex)		Rational Production srl Unipersonale
-D70000-D70FFF     (base 16)		Rational Production srl Unipersonale
-				Via L. Galvani 7/H
-				Albano S. Alessandro  Bergamo  24061
-				IT
-
-70-B3-D5   (hex)		Harbin Cheng Tian Technology Development Co., Ltd.
-CF4000-CF4FFF     (base 16)		Harbin Cheng Tian Technology Development Co., Ltd.
-				ROOM140，Building21A，145 Nantong Street
-				Harbin  Heilongjiang  150001
-				CN
-
-70-B3-D5   (hex)		SHEN ZHEN TTK TECHNOLOGY CO,LTD
-4B9000-4B9FFF     (base 16)		SHEN ZHEN TTK TECHNOLOGY CO,LTD
-				8/F, Nan Yuan commerical Bldg,Minzhi,Long Hua town,Baoan,district,Shenzhen
-				SHEN ZHEN   GuangDong  51813
-				CN
-
-70-B3-D5   (hex)		Electronic Navigation Ltd
-B7C000-B7CFFF     (base 16)		Electronic Navigation Ltd
-				65 Gaunt Street
-				Auckland    1010
-				NZ
-
-70-B3-D5   (hex)		Sinoembed
-83C000-83CFFF     (base 16)		Sinoembed
-				RM1105,No 2078,YueLiangWan Road,NanShan District
-				ShenZhen  GuangDong  518000
-				CN
-
-70-B3-D5   (hex)		NORTHBOUND NETWORKS PTY. LTD.
-6CD000-6CDFFF     (base 16)		NORTHBOUND NETWORKS PTY. LTD.
-				14 Sommersby Road
-				Point Cook  Victoria  3030
-				AU
-
-70-B3-D5   (hex)		Critical Link LLC
-AF9000-AF9FFF     (base 16)		Critical Link LLC
-				6712 Brooklawn Parkway
-				Syracuse  null  13211
-				US
-
-70-B3-D5   (hex)		WyreStorm Technologies Ltd
-D5A000-D5AFFF     (base 16)		WyreStorm Technologies Ltd
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-70-B3-D5   (hex)		WyreStorm Technologies Ltd
-D5B000-D5BFFF     (base 16)		WyreStorm Technologies Ltd
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-70-B3-D5   (hex)		Unitro Fleischmann
-C92000-C92FFF     (base 16)		Unitro Fleischmann
-				Gaildorfer Strasse 15
-				Backnang    71522
-				DE
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-F57000-F57FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		Sienna Corporation
-13B000-13BFFF     (base 16)		Sienna Corporation
-				475 Horizon drive
-				Suwanee  GA  30024
-				US
-
-70-B3-D5   (hex)		Monnit Corporation
-377000-377FFF     (base 16)		Monnit Corporation
-				450 South Simmons STE 670
-				Kaysville  UT  84037
-				US
-
-70-B3-D5   (hex)		Virta Laboratories, Inc.
-140000-140FFF     (base 16)		Virta Laboratories, Inc.
-				1327 Jones Dr
-				Ann Arbor  Michigan  48105
-				US
-
-70-B3-D5   (hex)		ARECO
-C07000-C07FFF     (base 16)		ARECO
-				114 chemin de Saint Marc
-				GRASSE  PACA  06130
-				FR
-
-70-B3-D5   (hex)		Foro Tel
-18D000-18DFFF     (base 16)		Foro Tel
-				77, Shaumyana  Str.
-				Rostov-na-Donu  UFO  344079
-				RU
-
-70-B3-D5   (hex)		SPX Flow Technology BV
-01F000-01FFFF     (base 16)		SPX Flow Technology BV
-				Munnikenheiweg 41
-				Etten-Leur  Noord-Braband  4879NE
-				NL
-
-70-B3-D5   (hex)		Nxcontrol system Co., Ltd.
-CA9000-CA9FFF     (base 16)		Nxcontrol system Co., Ltd.
-				10F, No. 257, Wenxing Rd.
-				Zhubei City  Hsinchu county  30264
-				TW
-
-70-B3-D5   (hex)		GridNavigator
-EDF000-EDFFFF     (base 16)		GridNavigator
-				200 Varick Street #508
-				New York  NY  10014
-				US
-
-70-B3-D5   (hex)		DSan Corporation
-DCA000-DCAFFF     (base 16)		DSan Corporation
-				142 Mineola Avenue
-				Roslyn Heights  NY  11577
-				US
-
-70-B3-D5   (hex)		IntelliDesign Pty Ltd
-061000-061FFF     (base 16)		IntelliDesign Pty Ltd
-				99 Bluestone Circuit
-				Seventeen Mile Rocks  Qld  4073
-				AU
-
-70-B3-D5   (hex)		ISPHER
-517000-517FFF     (base 16)		ISPHER
-				Chemin des Aulx 21
-				PLAN LES OUATES  CANTON DE GENEVE  1228
-				CH
-
-70-B3-D5   (hex)		LPA Excil Electronics
-383000-383FFF     (base 16)		LPA Excil Electronics
-				Ripley Drive
-				Wakefield  West Yorkshire  WF6 1QT
-				GB
-
-70-B3-D5   (hex)		HIPODROMO DE AGUA CALIENTE SA CV
-328000-328FFF     (base 16)		HIPODROMO DE AGUA CALIENTE SA CV
-				BLVD AGUA CALIENTE 12027
-				TIJUANA  BAJA CALIFORNIA  22420
-				MX
-
-70-B3-D5   (hex)		neocontrol soluções em automação
-891000-891FFF     (base 16)		neocontrol soluções em automação
-				rua santa fe 100
-				belo horizonte  MG  30320-130
-				BR
-
-70-B3-D5   (hex)		ERAESEEDS co.,ltd.
-8F0000-8F0FFF     (base 16)		ERAESEEDS co.,ltd.
-				284-2, WONHYORO3-GA, YONGSAN-GU
-				SEOUL    140-849
-				KR
-
-70-B3-D5   (hex)		Sportzcast
-D29000-D29FFF     (base 16)		Sportzcast
-				1144 Citrus Oaks Run
-				Winter Springs  FL  32708
-				US
-
-70-B3-D5   (hex)		TCI
-7F2000-7F2FFF     (base 16)		TCI
-				3541 Gateway Blvd
-				Fremont  CA  94538
-				US
-
-70-B3-D5   (hex)		DELTA
-E4B000-E4BFFF     (base 16)		DELTA
-				Venlighedsvej 4
-				Horsholm  Denmark  2970
-				DK
-
-70-B3-D5   (hex)		GLT Exports Ltd
-34C000-34CFFF     (base 16)		GLT Exports Ltd
-				Detection House
-				Swansea  County of Swansea  SA1 2EN
-				GB
-
-70-B3-D5   (hex)		Tanaka Electric Industry Co., Ltd.
-52D000-52DFFF     (base 16)		Tanaka Electric Industry Co., Ltd.
-				7-3-31 Takadono,
-				Osaka-shi  Osaka  535-0031
-				JP
-
-70-B3-D5   (hex)		Pantec Engineering AG
-BE5000-BE5FFF     (base 16)		Pantec Engineering AG
-				Industriering 21
-				Ruggell  Principality of Liechtenstein  9491
-				LI
-
-70-B3-D5   (hex)		Transtronic AB
-ECA000-ECAFFF     (base 16)		Transtronic AB
-				Fabriksgatan 1
-				Köping  Västmanland  73124
-				SE
-
-70-B3-D5   (hex)		Techworld Industries Ltd
-1AD000-1ADFFF     (base 16)		Techworld Industries Ltd
-				Unit 1705, 17/F, Nanyang Plaza, 57 Hung To Road,
-				Hong Kong  N/A  N/A
-				HK
-
-70-B3-D5   (hex)		Domus S.C.
-E6D000-E6DFFF     (base 16)		Domus S.C.
-				87 A Oriente #1623 Local A
-				Puebla  Puebla  72587
-				MX
-
-70-B3-D5   (hex)		Vena Engineering Corporation
-FBB000-FBBFFF     (base 16)		Vena Engineering Corporation
-				7 Hangar Way
-				Watsonville  CA  95076
-				US
-
-70-B3-D5   (hex)		OptiScan Biomedical Corp.
-088000-088FFF     (base 16)		OptiScan Biomedical Corp.
-				24590 Clawiter Road
-				Hayward  CA  94545
-				US
-
-70-B3-D5   (hex)		Cymtec Ltd
-903000-903FFF     (base 16)		Cymtec Ltd
-				Tredomen Business Centre
-				Ystrad Mynach  Caerphilly  CF82 7FN
-				GB
-
-70-B3-D5   (hex)		Trimble
-76D000-76DFFF     (base 16)		Trimble
-				6-8 Kondorfa street
-				Budapest    1116
-				HU
-
-70-B3-D5   (hex)		Acorde Technologies
-9F2000-9F2FFF     (base 16)		Acorde Technologies
-				PCTCAN - Av. Albert Einstein, 6
-				Santander  Cantabria  39011
-				ES
-
-70-B3-D5   (hex)		Elesar Limited
-03F000-03FFFF     (base 16)		Elesar Limited
-				Future Business Centre
-				Cambridge  Cambridgeshire  CB4 2HY
-				GB
-
-70-B3-D5   (hex)		ASL Holdings
-F73000-F73FFF     (base 16)		ASL Holdings
-				The Oaks
-				Pitsford  Northants  NN6 9AA
-				GB
-
-70-B3-D5   (hex)		VendNovation LLC
-1E5000-1E5FFF     (base 16)		VendNovation LLC
-				13400 NE 20th Street
-				Bellevue  WA  98005
-				US
-
-70-B3-D5   (hex)		Kron Medidores
-72D000-72DFFF     (base 16)		Kron Medidores
-				Rua Alexandre de Gusmão, 278
-				São Paulo  São Paulo  04760-020
-				BR
-
-70-B3-D5   (hex)		Remote Sensing Solutions, Inc.
-3D7000-3D7FFF     (base 16)		Remote Sensing Solutions, Inc.
-				3179 MAIN ST UNIT 3
-				BARNSTABLE  MA  02630
-				US
-
-70-B3-D5   (hex)		Revolution Retail Systems
-F54000-F54FFF     (base 16)		Revolution Retail Systems
-				1840 Hutton Drive
-				Carrollton  Texas  75006
-				US
-
-70-B3-D5   (hex)		Nasdaq
-0E6000-0E6FFF     (base 16)		Nasdaq
-				165 Broadway
-				New York  NY  10006
-				US
-
-70-B3-D5   (hex)		Tempus Fugit Consoles bvba
-087000-087FFF     (base 16)		Tempus Fugit Consoles bvba
-				Albert I-straat 40
-				Schepdaal  n/a  1703
-				BE
-
-70-B3-D5   (hex)		Cloud4Wi
-45F000-45FFFF     (base 16)		Cloud4Wi
-				22 Cleveland St
-				San Francisco  CALIFORNIA  94103
-				US
-
-70-B3-D5   (hex)		Software Systems Plus
-F01000-F01FFF     (base 16)		Software Systems Plus
-				9924 N. Ash Avenue
-				Kansas City  MISSOURI  64157
-				US
-
-70-B3-D5   (hex)		BELT S.r.l.
-E55000-E55FFF     (base 16)		BELT S.r.l.
-				Corso Vinzaglio, 2
-				Torino  TO  10121
-				IT
-
-70-B3-D5   (hex)		DSIT Solutions LTD
-B47000-B47FFF     (base 16)		DSIT Solutions LTD
-				Rechvam Zeevi 2
-				Givat-Shmuel    5401777
-				IL
-
-70-B3-D5   (hex)		Inspike S.R.L.
-2F1000-2F1FFF     (base 16)		Inspike S.R.L.
-				via G. De Castillia 7
-				Vimercate  MB  20871
-				IT
-
-70-B3-D5   (hex)		SEMEX-EngCon GmbH
-789000-789FFF     (base 16)		SEMEX-EngCon GmbH
-				Pforzheimer Str. 202D
-				Ettlingen  Baden-Wuerttemberg  76275
-				DE
-
-70-B3-D5   (hex)		B.E.A. sa
-0DF000-0DFFFF     (base 16)		B.E.A. sa
-				Allée des Noisetiers 5
-				Angleur  Liege  4031
-				BE
-
-70-B3-D5   (hex)		Private
-119000-119FFF     (base 16)		Private
-
-70-B3-D5   (hex)		SP Controls
-823000-823FFF     (base 16)		SP Controls
-				930 Linde Ave
-				South San Francisco  CA  94080
-				US
-
-70-B3-D5   (hex)		eumig industrie-tv GmbH
-923000-923FFF     (base 16)		eumig industrie-tv GmbH
-				Gewerbeparkstr. 9
-				Anif  Salzburg  5081
-				AT
-
-70-B3-D5   (hex)		3City Electronics
-146000-146FFF     (base 16)		3City Electronics
-				Jaskowa Dolina 9/5a
-				Gdansk  pomorskie  80-252
-				PL
-
-70-B3-D5   (hex)		Subinitial LLC
-D9C000-D9CFFF     (base 16)		Subinitial LLC
-				10160 Three Oaks Way
-				Santee  CA  92071
-				US
-
-70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-435000-435FFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-70-B3-D5   (hex)		DSP DESIGN LTD
-208000-208FFF     (base 16)		DSP DESIGN LTD
-				TAPTON PARK INNOVATION CENTRE
-				CHESTERFIELD  DERBYSHIRE  S41 0TZ
-				GB
-
-70-B3-D5   (hex)		HOERMANN GmbH
-B78000-B78FFF     (base 16)		HOERMANN GmbH
-				Hauptstr. 45-47
-				Kirchseeon  Bavaria  85614
-				DE
-
-70-B3-D5   (hex)		Private
-D0A000-D0AFFF     (base 16)		Private
-
-70-B3-D5   (hex)		CSINFOTEL
-C97000-C97FFF     (base 16)		CSINFOTEL
-				3F, daedeok-daero 566, Yuseong-gu, Daejeon
-				Daejeon  Republic of Korea  305-340
-				KR
-
-70-B3-D5   (hex)		Protium Technologies, Inc.
-459000-459FFF     (base 16)		Protium Technologies, Inc.
-				10 Bearfoot Rd.
-				Northborough  MA  01532
-				US
-
-70-B3-D5   (hex)		Midfin Systems
-E4E000-E4EFFF     (base 16)		Midfin Systems
-				2509 152nd Ave NE
-				Redmond  WA  98052
-				US
-
-70-B3-D5   (hex)		Wallner Automation GmbH
-5A2000-5A2FFF     (base 16)		Wallner Automation GmbH
-				Kenzianweg 8
-				Schaerding  Upper Austria  A-4780
-				AT
-
-70-B3-D5   (hex)		Intelligent Energy Ltd
-C55000-C55FFF     (base 16)		Intelligent Energy Ltd
-				Holywell Park
-				Loughborough  Leicestershire  LE11 3GB
-				GB
-
-70-B3-D5   (hex)		Creotech Instruments S.A.
-91E000-91EFFF     (base 16)		Creotech Instruments S.A.
-				ul. Gen. L. Okulickiego 7/9
-				Piaseczno  Mazovia  05-500
-				PL
-
-70-B3-D5   (hex)		McKay Brothers LLC
-A4B000-A4BFFF     (base 16)		McKay Brothers LLC
-				2355 Broadway
-				Oakland  CA  94612
-				US
-
-70-B3-D5   (hex)		OrbiWise SA
-078000-078FFF     (base 16)		OrbiWise SA
-				c/o Fongit
-				Plan-les-Ouates  Geneva  1228
-				CH
-
-70-B3-D5   (hex)		Trident RFID Pty Ltd
-73E000-73EFFF     (base 16)		Trident RFID Pty Ltd
-				Unit 1/24 Redcliffe Gardens Drive
-				Clontarf  QLD  4019
-				AU
-
-70-B3-D5   (hex)		APEN GROUP SpA (VAT IT08767740155)
-EAB000-EABFFF     (base 16)		APEN GROUP SpA (VAT IT08767740155)
-				Via Isonzo 1
-				Pessano con Bornago  MI  20060
-				IT
-
-70-B3-D5   (hex)		ACD Elektronik GmbH
-C5B000-C5BFFF     (base 16)		ACD Elektronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		Getein Biotechnology Co.,ltd
-E90000-E90FFF     (base 16)		Getein Biotechnology Co.,ltd
-				No.9 Bofu Road,Luhe District, Nanjing,china
-				Nanjing  jiangsu  211505
-				CN
-
-70-B3-D5   (hex)		Russian Telecom Equipment Company
-0D7000-0D7FFF     (base 16)		Russian Telecom Equipment Company
-				3, Kapranov lane
-				Moscow  Moscow  123242
-				RU
-
-70-B3-D5   (hex)		WiViCom Co., Ltd.
-B29000-B29FFF     (base 16)		WiViCom Co., Ltd.
-				602 Shichiku Sogo Building
-				Niigata  Niigata  950-0916
-				JP
-
-70-B3-D5   (hex)		Tornado Modular Systems
-CF6000-CF6FFF     (base 16)		Tornado Modular Systems
-				Inzhenernaya st. 4a
-				Novosibirsk  Novosibirsk  630128
-				RU
-
-70-B3-D5   (hex)		Solace Systems Inc.
-44E000-44EFFF     (base 16)		Solace Systems Inc.
-				535 Legget Drive,
-				Kanata  Ontario  K2K3B8
-				CA
-
-70-B3-D5   (hex)		Verti Tecnologia
-CB8000-CB8FFF     (base 16)		Verti Tecnologia
-				Praça Osório, 437, 5º andar
-				Curitiba  Parana  80020-010
-				BR
-
-70-B3-D5   (hex)		HEADROOM Broadcast GmbH
-D48000-D48FFF     (base 16)		HEADROOM Broadcast GmbH
-				RudowerChaussee 29/31
-				Berlin  Berlin  12489
-				DE
-
-70-B3-D5   (hex)		Telenor Connexion AB
-27D000-27DFFF     (base 16)		Telenor Connexion AB
-				116 88
-				Stockholm  Sverige  SE-116 88
-				SE
-
-70-B3-D5   (hex)		Datasat Digital Entertainment
-B24000-B24FFF     (base 16)		Datasat Digital Entertainment
-				9631 Topanga Canyon Place
-				Chatsworth  California  91311
-				US
-
-70-B3-D5   (hex)		Sensortech Systems Inc.
-BEF000-BEFFFF     (base 16)		Sensortech Systems Inc.
-				2221 E. Celsius Avenue
-				Oxnard  CA  93030
-				US
-
-70-B3-D5   (hex)		Imagine Inc.
-3D2000-3D2FFF     (base 16)		Imagine Inc.
-				2-24-1-915 Kamiosaki
-				Shinagawa-Ku  Tokyo  141-0021
-				JP
-
-70-B3-D5   (hex)		Task Sistemas
-181000-181FFF     (base 16)		Task Sistemas
-				Rua Visconde de Ouro Preto 5/8
-				Rio de Janeiro  RJ  22250180
-				BR
-
-70-B3-D5   (hex)		Sicon srl
-36C000-36CFFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Bandelin electronic GmbH & Co. KG
-A99000-A99FFF     (base 16)		Bandelin electronic GmbH & Co. KG
-				Heinrichstraße 3-4
-				Berlin  Berlin  12207
-				DE
-
-70-B3-D5   (hex)		TOFWERK AG
-732000-732FFF     (base 16)		TOFWERK AG
-				Uttigenstrasse 22
-				Thun  BE  3600
-				CH
-
-70-B3-D5   (hex)		Becker Nachrichtentechnik GmbH
-820000-820FFF     (base 16)		Becker Nachrichtentechnik GmbH
-				Kapellenweg 3
-				Asbach  Rheinland-Pfalz  53567
-				DE
-
-70-B3-D5   (hex)		LSL systems
-58F000-58FFFF     (base 16)		LSL systems
-				303. SanHak. Hallym university.
-				Chuncheon.  KW  200-702
-				KR
-
-70-B3-D5   (hex)		Assembly Contracts Ltd
-B8F000-B8FFFF     (base 16)		Assembly Contracts Ltd
-				Ledson Road
-				Manchester  Lancashire  M23 9GP
-				GB
-
-70-B3-D5   (hex)		POLVISION
-610000-610FFF     (base 16)		POLVISION
-				ul. Witkowska 16
-				Wrocław  woj. dolnośląskie  51-003
-				PL
-
-70-B3-D5   (hex)		HUSTY M.Styczen J.Hupert Sp.J.
-77C000-77CFFF     (base 16)		HUSTY M.Styczen J.Hupert Sp.J.
-				Rzepakowa 5e
-				Krakow  malopolska  31-989
-				PL
-
-70-B3-D5   (hex)		PANORAMIC POWER
-07D000-07DFFF     (base 16)		PANORAMIC POWER
-				20 ATIR YEDA ST.
-				KFAR-SABA  ISRAEL  44643
-				IL
-
-70-B3-D5   (hex)		DTECH Labs, Inc.
-CFF000-CFFFFF     (base 16)		DTECH Labs, Inc.
-				22876 Shaw Rd
-				Sterling  Virginia  20166
-				US
-
-70-B3-D5   (hex)		NimbeLink Corp
-D3B000-D3BFFF     (base 16)		NimbeLink Corp
-				3131 Fernbrook LN N, Ste 100
-				Plymouth  MN  55447
-				US
-
-70-B3-D5   (hex)		iotec GmbH
-E28000-E28FFF     (base 16)		iotec GmbH
-				Albert-Einstein-Str. 1
-				Osnabrück  Niedersachsen  49076
-				DE
-
-70-B3-D5   (hex)		June Automation Singapore Pte. Ltd.
-CE7000-CE7FFF     (base 16)		June Automation Singapore Pte. Ltd.
-				blk4008 #02-03,
-				Singapore  N/A  569625
-				SG
-
-70-B3-D5   (hex)		Thurlby Thandar Instruments LTD
-E58000-E58FFF     (base 16)		Thurlby Thandar Instruments LTD
-				Glebe Road
-				Huntingdon  Cambridgeshire  PE29 7DR
-				GB
-
-70-B3-D5   (hex)		Future Skies
-C43000-C43FFF     (base 16)		Future Skies
-				1333 Campus Parkway
-				Neptune  New Jersey  07753
-				US
-
-70-B3-D5   (hex)		Xafax Nederland bv
-EC1000-EC1FFF     (base 16)		Xafax Nederland bv
-				Postbus 107
-				Alkmaar  NH  1800AC
-				NL
-
-70-B3-D5   (hex)		LightDec GmbH & Co. KG
-CF1000-CF1FFF     (base 16)		LightDec GmbH & Co. KG
-				Robert-Bosch-Str. 6
-				Ingolstadt  Bavaria  85053
-				DE
-
-70-B3-D5   (hex)		Rosslare Enterprises Limited
-682000-682FFF     (base 16)		Rosslare Enterprises Limited
-				Flat 912 Wing Fat Industrial Building
-				Kowloon Bay  Kowloon  
-				HK
-
-70-B3-D5   (hex)		Datum Electronics Limited
-250000-250FFF     (base 16)		Datum Electronics Limited
-				Needles Building
-				East Cowes  Isle of Wight  PO32 6RF
-				GB
-
-70-B3-D5   (hex)		PAVO TASARIM ÜRETİM TİC A.Ş.
-34A000-34AFFF     (base 16)		PAVO TASARIM ÜRETİM TİC A.Ş.
-				Teknopark İstanbul Ar-Ge Binaları. 1.Blok
-				İSTANBUL  PENDİK  34349
-				TR
-
-70-B3-D5   (hex)		Sigmann Elektronik GmbH
-95A000-95AFFF     (base 16)		Sigmann Elektronik GmbH
-				Hauptstrasse 53
-				Hueffenhardt    74928
-				DE
-
-70-B3-D5   (hex)		Shooter Detection Systems
-EB2000-EB2FFF     (base 16)		Shooter Detection Systems
-				300 Newburyport Turnpike
-				Rowley  MA  01969
-				US
-
-70-B3-D5   (hex)		SPC Bioclinicum
-DF3000-DF3FFF     (base 16)		SPC Bioclinicum
-				Ugreshskaya 2 b.83
-				Moscow  Moscow  115088
-				RU
-
-70-B3-D5   (hex)		SIGLEAD INC
-AB7000-AB7FFF     (base 16)		SIGLEAD INC
-				NAKAGAWACHUO1-38-10
-				YOKOHAMA  KANAGAWA  224-0003
-				JP
-
-70-B3-D5   (hex)		ARP Corporation
-B88000-B88FFF     (base 16)		ARP Corporation
-				166-1 Horikawa
-				Hadano  Kanagawa  259-1305
-				JP
-
-70-B3-D5   (hex)		ACD Elektronik GmbH
-FDA000-FDAFFF     (base 16)		ACD Elektronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		ELAMAKATO GmbH
-57B000-57BFFF     (base 16)		ELAMAKATO GmbH
-				Ottostrasse 5
-				Eggenstein-Leopoldshafen  Baden-Württemberg  76344
-				DE
-
-70-B3-D5   (hex)		Eagle Mountain Technology
-559000-559FFF     (base 16)		Eagle Mountain Technology
-				1811 MacCullen Drive
-				Erie  CO  80516
-				US
-
-70-B3-D5   (hex)		Condev-Automation GmbH
-DEC000-DECFFF     (base 16)		Condev-Automation GmbH
-				Obere Erlentiefenstr. 27
-				Bergkamen  NRW  59192
-				DE
-
-70-B3-D5   (hex)		CAITRON Industrial Solutions GmbH
-305000-305FFF     (base 16)		CAITRON Industrial Solutions GmbH
-				Eich 8
-				Ramerberg  Bavaria  83561
-				DE
-
-70-B3-D5   (hex)		Telefonix Incorporated
-83B000-83BFFF     (base 16)		Telefonix Incorporated
-				2340 Ernie Krueger Circle
-				Waukegan  Illinois  60087
-				US
-
-70-B3-D5   (hex)		Special Projects Group, Inc
-2FD000-2FDFFF     (base 16)		Special Projects Group, Inc
-				45 Wingate St
-				Haverhill  MA  0832
-				US
-
-70-B3-D5   (hex)		Hanwa Electronic Ind.Co.,Ltd.
-010000-010FFF     (base 16)		Hanwa Electronic Ind.Co.,Ltd.
-				689-3,Ogaito
-				Wakayama    649-6272
-				JP
-
-70-B3-D5   (hex)		NextEra Energy Resources, LLC
-EFA000-EFAFFF     (base 16)		NextEra Energy Resources, LLC
-				700 Universe Blvd
-				Juno Beach  Florida  33408
-				US
-
-70-B3-D5   (hex)		Taitotekniikka
-2A5000-2A5FFF     (base 16)		Taitotekniikka
-				Elielinaukio aukio 3
-				Helsinki    00100
-				FI
-
-70-B3-D5   (hex)		Human Oriented Technology, Inc.
-507000-507FFF     (base 16)		Human Oriented Technology, Inc.
-				Rm 1021, 10/F SOLO Bldg
-				Tsimshatsui  Kowloon  
-				TW
-
-70-B3-D5   (hex)		4CAM GmbH
-96F000-96FFFF     (base 16)		4CAM GmbH
-				Hauptstrasse 18
-				Reimlingen  Bayern  86756
-				DE
-
-70-B3-D5   (hex)		CORES Corporation
-8CE000-8CEFFF     (base 16)		CORES Corporation
-				338-3 Furukawado
-				Tsuru-shi  Yamanashi  402-0004
-				JP
-
-70-B3-D5   (hex)		Ultamation Limited
-346000-346FFF     (base 16)		Ultamation Limited
-				Liverpool Science Park, ic2
-				Liverpool  Merseyside  L3 5RF
-				GB
-
-70-B3-D5   (hex)		Innerspec Technologies Inc.
-79A000-79AFFF     (base 16)		Innerspec Technologies Inc.
-				4004 Murray Place
-				Lynchburg  Virgnia  24501
-				US
-
-70-B3-D5   (hex)		Fundación Cardiovascular de Colombia
-51E000-51EFFF     (base 16)		Fundación Cardiovascular de Colombia
-				Cra 5 No 6 - 33. Floridablanca
-				Bucaramanga  Floridablanca  681003
-				CO
-
-70-B3-D5   (hex)		VX Instruments GmbH
-625000-625FFF     (base 16)		VX Instruments GmbH
-				Bernsteinstraße 41 A
-				Altdorf-Landshut  Bavaria  84032
-				DE
-
-70-B3-D5   (hex)		SVP Broadcast Microwave S.L.
-1AC000-1ACFFF     (base 16)		SVP Broadcast Microwave S.L.
-				Zubiaurre, 7 bajo
-				Iurreta  Vizcaya  48215
-				ES
-
-70-B3-D5   (hex)		FARO TECHNOLOGIES, INC.
-936000-936FFF     (base 16)		FARO TECHNOLOGIES, INC.
-				125 Technology Park
-				Lake Mary  FL  32746
-				US
-
-70-B3-D5   (hex)		Clock-O-Matic
-2F0000-2F0FFF     (base 16)		Clock-O-Matic
-				De Vunt 14
-				Holsbeek  VBR  3220
-				BE
-
-70-B3-D5   (hex)		RMI Laser LLC
-C58000-C58FFF     (base 16)		RMI Laser LLC
-				106 Laser Drive
-				Lafayette  Colorado  80026
-				US
-
-70-B3-D5   (hex)		HKC Limited
-CB7000-CB7FFF     (base 16)		HKC Limited
-				Parkway Business Centre
-				Ballymount  Dublin  Dublin 24
-				IE
-
-70-B3-D5   (hex)		Molu Technology Inc., LTD.
-D8F000-D8FFFF     (base 16)		Molu Technology Inc., LTD.
-				NO. 25, Ln., 230, Zhonghe Rd.,
-				Zhonghe Dist.  New Taipei City  235
-				TW
-
-70-B3-D5   (hex)		Quickware Eng & Des LLC
-80F000-80FFFF     (base 16)		Quickware Eng & Des LLC
-				32 Pleasant St
-				Waltham  MA  02452
-				US
-
-70-B3-D5   (hex)		Avionica
-0F0000-0F0FFF     (base 16)		Avionica
-				9941 West Jessamine St
-				Miami  Florida  33157
-				US
-
-70-B3-D5   (hex)		KeFF Networks
-994000-994FFF     (base 16)		KeFF Networks
-				Sorogatan 1
-				Kista  Stockholm  16441
-				SE
-
-70-B3-D5   (hex)		Ars Products
-F63000-F63FFF     (base 16)		Ars Products
-				30 Crabtree Lane
-				Woodstock  CT  06281
-				US
-
-70-B3-D5   (hex)		FRS GmbH & Co. KG
-F62000-F62FFF     (base 16)		FRS GmbH & Co. KG
-				Weingartenstr. 1-3
-				Dortmund  NW  44263
-				DE
-
-70-B3-D5   (hex)		KINEMETRICS
-CE9000-CE9FFF     (base 16)		KINEMETRICS
-				222 VISTA AVENUE
-				PASADENA  CA  91107
-				US
-
-70-B3-D5   (hex)		POWERCRAFT ELECTRONICS PVT. LTD.
-090000-090FFF     (base 16)		POWERCRAFT ELECTRONICS PVT. LTD.
-				305, 3rd FLOOR, BLUE ROSE INDUSTRIAL ESTATE,
-				MUMBAI  MAHARASHTRA  400066
-				IN
-
-70-B3-D5   (hex)		DSD MICROTECHNOLOGY,INC.
-308000-308FFF     (base 16)		DSD MICROTECHNOLOGY,INC.
-				4700 WEST PROSPECT ROAD
-				FORT LAUDERDALE  FLORIDA  33309
-				US
-
-70-B3-D5   (hex)		Accusonic
-908000-908FFF     (base 16)		Accusonic
-				28 Patterson Brook Road
-				West Wareham  MA  02576
-				US
-
-70-B3-D5   (hex)		Overline Systems
-28F000-28FFFF     (base 16)		Overline Systems
-				21 av. Sophie Wallerstein
-				Andernos  Aquitaine  33510
-				FR
-
-70-B3-D5   (hex)		Hosokawa Micron Powder Systems
-4C8000-4C8FFF     (base 16)		Hosokawa Micron Powder Systems
-				10 Chatham Road
-				Summit  New Jersey  07901
-				US
-
-70-B3-D5   (hex)		RedRat Ltd
-FD1000-FD1FFF     (base 16)		RedRat Ltd
-				The Business & Technology Centre
-				Saffron Walden  Essex  CB11 3AQ
-				
-
-00-1B-C5   (hex)		EREE Electronique
-0C1000-0C1FFF     (base 16)		EREE Electronique
-				6 avenue Dr Schweitzer
-				MEYZIEU    69882
-				FR
-
-00-1B-C5   (hex)		kuwatec, Inc.
-0BC000-0BCFFF     (base 16)		kuwatec, Inc.
-				2-39-5 Umesato
-				Suginami-ku  Tokyo  166-0011
-				JP
-
-00-1B-C5   (hex)		COBAN SRL
-0B4000-0B4FFF     (base 16)		COBAN SRL
-				VIA BERGAMO,1910
-				CARONNO PERTUSELLA  VA  21042
-				IT
-
-00-1B-C5   (hex)		J-D.COM
-0B0000-0B0FFF     (base 16)		J-D.COM
-				6 rue Blaise pascal
-				Elancourt    78990
-				FR
-
-00-1B-C5   (hex)		Senceive Ltd
-0AA000-0AAFFF     (base 16)		Senceive Ltd
-				Hurlingham Studios
-				London    SW6 3PA
-				GB
-
-00-1B-C5   (hex)		Balter Security GmbH
-0A6000-0A6FFF     (base 16)		Balter Security GmbH
-				In den Diken 33
-				Duesseldorf  NRW  40472
-				DE
-
-00-1B-C5   (hex)		reelyActive
-094000-094FFF     (base 16)		reelyActive
-				501-1015 rue William
-				Montreal  Quebec  H3C 1P4
-				CA
-
-00-1B-C5   (hex)		UAB Kitron
-099000-099FFF     (base 16)		UAB Kitron
-				Taikos 151
-				Kaunas  Lithuania  LT-52119
-				US
-
-00-1B-C5   (hex)		TrendPoint Systems
-08E000-08EFFF     (base 16)		TrendPoint Systems
-				1595 E. 6th Street
-				Corona  CA  92879
-				US
-
-00-1B-C5   (hex)		Bio Molecular System Pty Ltd
-07E000-07EFFF     (base 16)		Bio Molecular System Pty Ltd
-				5/3 Northward St
-				Upper Coomera  Queensland  4209
-				AU
-
-00-1B-C5   (hex)		Hitechlab Inc
-07F000-07FFFF     (base 16)		Hitechlab Inc
-				Hotarugaike-Nishimachi 2-14-14
-				Toyonaka  Osaka  560-0036
-				JP
-
-00-1B-C5   (hex)		tado GmbH
-073000-073FFF     (base 16)		tado GmbH
-				Kochelseestraße 8-10
-				München  Deutschland  81371
-				DE
-
-00-1B-C5   (hex)		Center for E-Commerce Infrastructure Development, The University of Hong Kong
-071000-071FFF     (base 16)		Center for E-Commerce Infrastructure Development, The University of Hong Kong
-				Room 301, Chow Yei Ching Building,
-				    
-				HK
-
-00-1B-C5   (hex)		TES Electronic Solutions (I) Pvt. Ltd.
-06D000-06DFFF     (base 16)		TES Electronic Solutions (I) Pvt. Ltd.
-				#65, 35th Main, 100 feet Ring Road,
-				Bangalore  Karnataka  560068
-				IN
-
-00-1B-C5   (hex)		Check-It Solutions Inc
-063000-063FFF     (base 16)		Check-It Solutions Inc
-				1601A - 4th Ave
-				Regina  Saskatchewan  S4R 8P9
-				CA
-
-00-1B-C5   (hex)		Klingenthaler Musikelektronik GmbH
-05F000-05FFFF     (base 16)		Klingenthaler Musikelektronik GmbH
-				Auerbacher Str. 268
-				Klingenthal  Saxony  08248
-				DE
-
-00-1B-C5   (hex)		Ecomed-Complex
-05E000-05EFFF     (base 16)		Ecomed-Complex
-				Petrogradskaya nab. 34
-				  Saint-Petersburg  197101
-				RU
-
-00-1B-C5   (hex)		konzeptpark GmbH
-05B000-05BFFF     (base 16)		konzeptpark GmbH
-				Georg-Ohm-Straße 2
-				Lahnau  Hesse  35633
-				DE
-
-00-1B-C5   (hex)		POSTEC DATA SYSTEMS
-05A000-05AFFF     (base 16)		POSTEC DATA SYSTEMS
-				45-47 Paul Matthews Road
-				Auckland    0632
-				NZ
-
-00-1B-C5   (hex)		QQ Navigation AB
-051000-051FFF     (base 16)		QQ Navigation AB
-				Gryt 44
-				Ösmo    14892
-				SE
-
-00-1B-C5   (hex)		PT. Amanindo Nusapadu
-047000-047FFF     (base 16)		PT. Amanindo Nusapadu
-				Jalan Pangeran Jayakarta 101 Blok D No. 4~5
-				Jakarta  Jawa Barat  10730
-				ID
-
-00-1B-C5   (hex)		Rhino Controls Ltd.
-04C000-04CFFF     (base 16)		Rhino Controls Ltd.
-				13545 113 Ave
-				Surrey  British Columbia  V3R 6S9
-				CA
-
-00-1B-C5   (hex)		DesignA Electronics Limited
-041000-041FFF     (base 16)		DesignA Electronics Limited
-				Unit 6
-				Christchurch  New Zealand  8011
-				NZ
-
-00-1B-C5   (hex)		Daylight  Solutions, Inc
-03E000-03EFFF     (base 16)		Daylight  Solutions, Inc
-				15378 Avenue of Science
-				San Diego  CA  92128
-				US
-
-00-1B-C5   (hex)		ELTRADE Ltd
-03F000-03FFFF     (base 16)		ELTRADE Ltd
-				blvd. G.Delchev blok 102
-				Sofia    1404
-				BG
-
-00-1B-C5   (hex)		SEED International Ltd.
-038000-038FFF     (base 16)		SEED International Ltd.
-				Unit 1201, Pan-pacific Plaza, No.12A, South Street Zhongguancun, 
-				Beijing    100081
-				CN
-
-00-1B-C5   (hex)		ITW Reyflex North America
-037000-037FFF     (base 16)		ITW Reyflex North America
-				195 E Algonquin Road
-				Des Plaines  IL  60090
-				US
-
-00-1B-C5   (hex)		andersen lighting GmbH
-025000-025FFF     (base 16)		andersen lighting GmbH
-				Technologiezentrum
-				Hildesheim    D-31137
-				DE
-
-00-1B-C5   (hex)		DIMEP Sistemas
-026000-026FFF     (base 16)		DIMEP Sistemas
-				Av. Mofarrej, 840
-				São Paulo    05311000
-				BR
-
-00-1B-C5   (hex)		Dunlop Systems & Components
-019000-019FFF     (base 16)		Dunlop Systems & Components
-				Holbrook Lane
-				Coventry  West Midlands  CV6 4QX
-				GB
-
-00-1B-C5   (hex)		Advanced Scientific Concepts, Inc.
-00D000-00DFFF     (base 16)		Advanced Scientific Concepts, Inc.
-				135 E. Ortega Street
-				Santa Barbara  CA  93101
-				US
-
-00-1B-C5   (hex)		Private
-014000-014FFF     (base 16)		Private
-
-00-1B-C5   (hex)		Intellvisions Software Ltd
-004000-004FFF     (base 16)		Intellvisions Software Ltd
-				303, Steel House, 24 Mahal Indl Estate
-				Mumbai  Maharashtra  400093
-				IN
-
-00-1B-C5   (hex)		OpenRB.com, Direct SIA
-001000-001FFF     (base 16)		OpenRB.com, Direct SIA
-				E. Birznieka-Upisha
-				Riga    LV-1050
-				LV
-
-70-B3-D5   (hex)		YAMAKATSU ELECTRONICS INDUSTRY CO., LTD.
-053000-053FFF     (base 16)		YAMAKATSU ELECTRONICS INDUSTRY CO., LTD.
-				1-37-23, Suenaga, Takatsu
-				Kawasaki-City  Kanagawa  213-0013
-				JP
-
-70-B3-D5   (hex)		ard sa
-206000-206FFF     (base 16)		ard sa
-				Micropolis Bat Clematis
-				Gap  France  05000
-				FR
-
-70-B3-D5   (hex)		Guangzhou Haoxiang Computer Technology Co.,Ltd.
-42B000-42BFFF     (base 16)		Guangzhou Haoxiang Computer Technology Co.,Ltd.
-				Room 502, 4th Floor, No. 6 Building, Hongtai Wisdom Valley, No. 21 Sicheng Road, Tianhe District
-				Guangzhou  Guangdong  510665
-				CN
-
-70-B3-D5   (hex)		Hunan Shengyun Photoelectric Technology Co., Ltd.
-7CA000-7CAFFF     (base 16)		Hunan Shengyun Photoelectric Technology Co., Ltd.
-				Unit 2, Building E8, Lugu Enterprise Plaza, Yuelu District
-				Changsha  Hunan  410205
-				CN
-
-70-B3-D5   (hex)		Nordson Corporation
-830000-830FFF     (base 16)		Nordson Corporation
-				11475 Lakefield Dr
-				Duluth  GA  30097
-				US
-
-70-B3-D5   (hex)		Medicomp, Inc
-279000-279FFF     (base 16)		Medicomp, Inc
-				600 Atlantis Rd
-				Melbourne  FL  32904
-				US
-
-70-B3-D5   (hex)		CYNIX Systems Inc
-320000-320FFF     (base 16)		CYNIX Systems Inc
-				Dunchon-daero
-				Seongnam-si  Gyeonggi-do  13215
-				KR
-
-70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
-B84000-B84FFF     (base 16)		OOO Research and Production Center Computer Technologies
-				Komsomolsky avenue, 90-17
-				Perm  Perm Region  614010
-				RU
-
-70-B3-D5   (hex)		Magneti Marelli S.p.A. Electronics
-F44000-F44FFF     (base 16)		Magneti Marelli S.p.A. Electronics
-				Viale Aldo Borletti 61/63
-				Corbetta  MI  20011
-				IT
-
-70-B3-D5   (hex)		Bolide Technology Group, Inc.
-9E1000-9E1FFF     (base 16)		Bolide Technology Group, Inc.
-				468 S. San Dimas Ave.,
-				San Dimas  CA  91773
-				US
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-BF8000-BF8FFF     (base 16)		RCH ITALIA SPA 
-				VIA CENDON 39
-				SILEA   TREVISO   31057
-				IT
-
-70-B3-D5   (hex)		Orion S.r.l.
-41F000-41FFFF     (base 16)		Orion S.r.l.
-				Via Alessandro Volta 25/B
-				Veggiano  Padova  35030
-				IT
-
-70-B3-D5   (hex)		Digifocus Technology Inc.
-ECC000-ECCFFF     (base 16)		Digifocus Technology Inc.
-				6F, No.89, Xinhu 1st Rd., Neihu Dist.
-				Taipei City     11494
-				TW
-
-70-B3-D5   (hex)		Foxtel srl
-4F7000-4F7FFF     (base 16)		Foxtel srl
-				via della chimica 25
-				viterbo    01100
-				IT
-
-70-B3-D5   (hex)		Palarum LLC
-45A000-45AFFF     (base 16)		Palarum LLC
-				986 BELVEDERE DRIVE, Suite B
-				LEBANON  OH  45036
-				US
-
-70-B3-D5   (hex)		Cubitech
-AED000-AEDFFF     (base 16)		Cubitech
-				4-6 Kiprou str
-				Tavros  Athens  17778
-				GR
-
-70-B3-D5   (hex)		DynaMount LLC
-B5B000-B5BFFF     (base 16)		DynaMount LLC
-				16357 Whispering Oaks Dr
-				Ramona  CA  92065
-				US
-
-70-B3-D5   (hex)		Zerospace ICT Services B.V.
-9E8000-9E8FFF     (base 16)		Zerospace ICT Services B.V.
-				Johan Huizingalaan 400
-				Amsterdam  Noord-Holland  1066 JS
-				NL
-
-70-B3-D5   (hex)		Kahler Automation
-0D5000-0D5FFF     (base 16)		Kahler Automation
-				808 Timberlake Rd
-				Fairmont  MN  56031
-				US
-
-70-B3-D5   (hex)		GLOBAL-KING INTERNATIONAL CO., LTD.
-06E000-06EFFF     (base 16)		GLOBAL-KING INTERNATIONAL CO., LTD.
-				5F., No. 19, Qingxiang St., Tucheng Dist.,
-				New Taipei City  Taiwan  236
-				TW
-
-70-B3-D5   (hex)		Abbott Diagnostics Technologies AS
-6DD000-6DDFFF     (base 16)		Abbott Diagnostics Technologies AS
-				P. O.  Box 6863 Rodeløkka
-				Oslo  Oslo  0504
-				NO
-
-70-B3-D5   (hex)		Systems Technologies
-5B4000-5B4FFF     (base 16)		Systems Technologies
-				11310 N Government Way
-				Hayden  ID  83835
-				US
-
-70-B3-D5   (hex)		Monixo
-47B000-47BFFF     (base 16)		Monixo
-				16 rue alexandre
-				Creteil    94000
-				FR
-
-70-B3-D5   (hex)		Benchmark Electronics BV
-CC4000-CC4FFF     (base 16)		Benchmark Electronics BV
-				Lelyweg 10
-				Almelo  Overijssel  7602 EA
-				NL
-
-70-B3-D5   (hex)		Xacti Corporation
-1D2000-1D2FFF     (base 16)		Xacti Corporation
-				Tower East 28F,Umeda Sky Building,1-1-88,Oyodonaka,Kita-ku
-				Osaka  Osaka  531-6048
-				JP
-
-70-B3-D5   (hex)		Cambridge Technology, Inc.
-EFD000-EFDFFF     (base 16)		Cambridge Technology, Inc.
-				125 middlesex turnpike
-				bedford  MA  01730
-				US
-
-70-B3-D5   (hex)		AXING AG
-00B000-00BFFF     (base 16)		AXING AG
-				Gewerbehaus Moskau
-				Ramsen    8262
-				CH
-
-70-B3-D5   (hex)		NIRECO CORPORATION
-0CB000-0CBFFF     (base 16)		NIRECO CORPORATION
-				2951-4, Ishikawa-machi
-				Hachioji-shi  Tokyo  192-8522
-				JP
-
-70-B3-D5   (hex)		Hifocus Electronics India Private Limited
-B25000-B25FFF     (base 16)		Hifocus Electronics India Private Limited
-				No. 3 Sunguvar Street, Chintadripet
-				Chennai  Tamil Nadu  600002
-				IN
-
-70-B3-D5   (hex)		Wartsila Voyage Limited
-304000-304FFF     (base 16)		Wartsila Voyage Limited
-				13-18 City Quay
-				Dublin 2    D02 ED70
-				IE
-
-70-B3-D5   (hex)		CAITRON GmbH
-B87000-B87FFF     (base 16)		CAITRON GmbH
-				Eich 8
-				Ramerberg    83561
-				DE
-
-70-B3-D5   (hex)		WideNorth AS
-2B8000-2B8FFF     (base 16)		WideNorth AS
-				Vollsveien 13C
-				Lysaker    1366
-				NO
-
-70-B3-D5   (hex)		TRANSLITE GLOBAL LLC
-DBD000-DBDFFF     (base 16)		TRANSLITE GLOBAL LLC
-				6644 ANTOINE DRIVE 
-				HOUSTON  TX  77091
-				US
-
-70-B3-D5   (hex)		Ellego Powertec Oy
-CEF000-CEFFFF     (base 16)		Ellego Powertec Oy
-				Linnapellontie 18
-				Halikko    24910
-				FI
-
-70-B3-D5   (hex)		SmartD Technologies Inc
-AB6000-AB6FFF     (base 16)		SmartD Technologies Inc
-				400 Montfort
-				Montreal  Qc  H3C4J9
-				CA
-
-70-B3-D5   (hex)		Elvys s.r.o
-12A000-12AFFF     (base 16)		Elvys s.r.o
-				Polska 9
-				Kosice    04011
-				SK
-
-70-B3-D5   (hex)		Active Brains
-2BA000-2BAFFF     (base 16)		Active Brains
-				Yokohama Dia BLDG 8F 1-7 Kinkocho Kanagawa-ku
-				Yokohama  Kanagawa  221-0056
-				JP
-
-70-B3-D5   (hex)		GDI Technology Inc 
-8B8000-8B8FFF     (base 16)		GDI Technology Inc 
-				12400 SW 134 Ct #14
-				Miami  FL  33186
-				US
-
-70-B3-D5   (hex)		MONTRADE SPA
-EE2000-EE2FFF     (base 16)		MONTRADE SPA
-				Via Armando Sarti 6
-				Bologna    40132
-				IT
-
-70-B3-D5   (hex)		Mettler Toledo
-D64000-D64FFF     (base 16)		Mettler Toledo
-				1571 Northpointe Parkway
-				Lutz  FL  33558
-				US
-
-70-B3-D5   (hex)		Mettler Toledo
-74A000-74AFFF     (base 16)		Mettler Toledo
-				1571 Northpointe Parkway
-				Lutz  FL  33558
-				US
-
-70-B3-D5   (hex)		W.A. Benjamin Electric Co.
-4E4000-4E4FFF     (base 16)		W.A. Benjamin Electric Co.
-				1615 Staunton Ave.
-				Los Angeles  CA  60021
-				US
-
-70-B3-D5   (hex)		Mettler Toledo
-84F000-84FFFF     (base 16)		Mettler Toledo
-				1571 Northpointe Parkway
-				Lutz  FL  33558
-				US
-
-70-B3-D5   (hex)		THELIGHT Luminary for Cine and TV S.L.
-A41000-A41FFF     (base 16)		THELIGHT Luminary for Cine and TV S.L.
-				C/ Cerdanya, 11-A
-				Sant Quirze del Valles  Barcelona  08192
-				ES
-
-70-B3-D5   (hex)		TATTILE SRL
-48B000-48BFFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Elsist Srl
-4C9000-4C9FFF     (base 16)		Elsist Srl
-				Via G. Brodolini, 15
-				Casale Monf.to  Alessandria  15033
-				IT
-
-70-B3-D5   (hex)		HANKOOK CTEC CO,. LTD.
-6EE000-6EEFFF     (base 16)		HANKOOK CTEC CO,. LTD.
-				404 Hallasigmavalley, 53, Gasandigital 2-ro Geumcheongu
-				Seoul    08588
-				KR
-
-70-B3-D5   (hex)		Olympus NDT Canada
-3F1000-3F1FFF     (base 16)		Olympus NDT Canada
-				3415 rue Pierre Ardouin
-				Québec  Québec  G1P 0B3
-				CA
-
-70-B3-D5   (hex)		Cominfo, Inc.
-617000-617FFF     (base 16)		Cominfo, Inc.
-				Nabrezi 695
-				Zlin    760 01
-				CZ
-
-70-B3-D5   (hex)		HAN CHANG
-C3A000-C3AFFF     (base 16)		HAN CHANG
-				171, Gasan digital 1-ro, Geumcheon-gu, Seoul, Republic of Korea
-				Seoul  Geumcheon-gu, Seoul  08503
-				KR
-
-70-B3-D5   (hex)		SinterCast
-425000-425FFF     (base 16)		SinterCast
-				Kungsgatan 2
-				Katrineholm  Please Select..sodermanland.  64130
-				SE
-
-70-B3-D5   (hex)		ECS s.r.l.
-487000-487FFF     (base 16)		ECS s.r.l.
-				Via dell'Artigianato n. 24
-				Belluno  BL  32100
-				IT
-
-70-B3-D5   (hex)		Konrad GmbH
-575000-575FFF     (base 16)		Konrad GmbH
-				Fritz-Reichle-Ring.12
-				Radolfzell    78315
-				DE
-
-70-B3-D5   (hex)		Dalian Laike Technology Development Co., Ltd 
-DAC000-DACFFF     (base 16)		Dalian Laike Technology Development Co., Ltd 
-				Room 406, 4th Floor, Block A, 29 Xixian Street, Dalian High-tech Industrial Park
-				Dalian   Liaoning  116085
-				CN
-
-70-B3-D5   (hex)		Conclusive Engineering
-B9D000-B9DFFF     (base 16)		Conclusive Engineering
-				Ligocka 103/3
-				Katowice  Silesia  40-568
-				PL
-
-70-B3-D5   (hex)		Sevensense Robotics AG
-9C3000-9C3FFF     (base 16)		Sevensense Robotics AG
-				Weinbergstrasse 35
-				Zurich    8092
-				CH
-
-70-B3-D5   (hex)		Hodwa Co., Ltd
-2C4000-2C4FFF     (base 16)		Hodwa Co., Ltd
-				3F., No. 216, Xinhu 1st Rd., Neihu Dist.
-				Taipei    11494
-				TW
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-159000-159FFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		Visility
-964000-964FFF     (base 16)		Visility
-				Universitetsparken 7
-				Roskilde    4000
-				DK
-
-70-B3-D5   (hex)		Public Joint Stock Company Morion
-97E000-97EFFF     (base 16)		Public Joint Stock Company Morion
-				Kosmonavtov Avn, 111, bld 1
-				Perm  Perm  614066
-				RU
-
-70-B3-D5   (hex)		Screen Innovations
-CFB000-CFBFFF     (base 16)		Screen Innovations
-				9715 Burnet Rd  B-400
-				Austin  TX  78758
-				US
-
-70-B3-D5   (hex)		Insitu, Inc.
-865000-865FFF     (base 16)		Insitu, Inc.
-				118 E Columbia River Way
-				Bingen  WA  98605
-				US
-
-70-B3-D5   (hex)		German Power GmbH
-C31000-C31FFF     (base 16)		German Power GmbH
-				Freiburger Strasse 7
-				Pforzheim    75179
-				DE
-
-70-B3-D5   (hex)		Lyse AS
-F23000-F23FFF     (base 16)		Lyse AS
-				Breiflåtveien 18
-				Stavanger    4017
-				NO
-
-70-B3-D5   (hex)		Outsight SA
-3EC000-3ECFFF     (base 16)		Outsight SA
-				2 rue de Berite
-				Paris    75006
-				FR
-
-70-B3-D5   (hex)		Hefei STAROT Technology Co.,Ltd
-4D3000-4D3FFF     (base 16)		Hefei STAROT Technology Co.,Ltd
-				406, 4th Floor, Quality Control Building, Saipu Science Park, No. 6 Yunfei Road, High-tech Zone
-				hefei  anhui  230000
-				CN
-
-70-B3-D5   (hex)		SysCom Automationstechnik GmbH
-117000-117FFF     (base 16)		SysCom Automationstechnik GmbH
-				An der Lehmkaute 13
-				Bad Marienberg  Rheinland-Pfalz  56470
-				DE
-
-70-B3-D5   (hex)		JFA Electronics Industry and Commerce EIRELI
-5F7000-5F7FFF     (base 16)		JFA Electronics Industry and Commerce EIRELI
-				Rua Flor das Pedras, 175
-				Belo Horizonte  Minas Gerais  30810-000
-				BR
-
-70-B3-D5   (hex)		Hubbell Power Systems
-858000-858FFF     (base 16)		Hubbell Power Systems
-				353 Powerville Road
-				Boonton Township  NJ  07005
-				US
-
-70-B3-D5   (hex)		Walton Hi-Tech Industries Ltd.
-E5C000-E5CFFF     (base 16)		Walton Hi-Tech Industries Ltd.
-				HOLDING NO. I-65/2, WARD NO-07
-				CHANDRA, KALIAKOIR, GAZIPUR.    1750
-				BD
-
-70-B3-D5   (hex)		aquila biolabs GmbH
-7DB000-7DBFFF     (base 16)		aquila biolabs GmbH
-				Arnold-Sommerfeld-Ring 2
-				Baesweiler  NRW  52499
-				DE
-
-70-B3-D5   (hex)		Sicon srl
-C82000-C82FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Flextronics International Kft
-699000-699FFF     (base 16)		Flextronics International Kft
-				38. Zrinyi Str.
-				Zalaegerszeg  Zala  8900
-				HU
-
-70-B3-D5   (hex)		LGE
-DAE000-DAEFFF     (base 16)		LGE
-				10, Magokjungang 10-ro, Gangseo-gu
-				Seoul    07796
-				KR
-
-70-B3-D5   (hex)		Jonsa Australia Pty Ltd
-335000-335FFF     (base 16)		Jonsa Australia Pty Ltd
-				Unit D2 3-29 Birnie Ave
-				Lidcombe  NSW  2141
-				AU
-
-70-B3-D5   (hex)		GreenWake Technologies
-467000-467FFF     (base 16)		GreenWake Technologies
-				56 boulevard Niels Bohr, CEI2
-				Villeurbanne    69100
-				FR
-
-70-B3-D5   (hex)		shenzhen suofeixiang technology Co.,Ltd
-EEB000-EEBFFF     (base 16)		shenzhen suofeixiang technology Co.,Ltd
-				sales09@sfxhd.com
-				shenzhen    518000
-				CN
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-97D000-97DFFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		SNK, Inc.
-E12000-E12FFF     (base 16)		SNK, Inc.
-				Rm 302 Inobiz park, 1646, Yuseong-daero, Yuseong-gu
-				Daejeon    34054
-				KR
-
-70-B3-D5   (hex)		SYLink Technologie
-466000-466FFF     (base 16)		SYLink Technologie
-				18 rue de la conche
-				Mirefleurs  Auvergne  63730
-				FR
-
-70-B3-D5   (hex)		silicom
-F64000-F64FFF     (base 16)		silicom
-				14 Atir-Yeda St/
-				Kfar-Sava  Israel  44000
-				IL
-
-70-B3-D5   (hex)		NSP Europe Ltd
-18A000-18AFFF     (base 16)		NSP Europe Ltd
-				Unit 5, Devonshire Business Park
-				Borehamwood  Hert  WD6 1NA
-				GB
-
-70-B3-D5   (hex)		Microchip Technology Germany II GmbH&Co.KG
-77F000-77FFFF     (base 16)		Microchip Technology Germany II GmbH&Co.KG
-				Emmy-Noether-Straße 14
-				Karlsruhe    76131
-				DE
-
-70-B3-D5   (hex)		Trust Automation
-C98000-C98FFF     (base 16)		Trust Automation
-				125 Venture Dr
-				San Luis Obispo  CA  93401
-				US
-
-70-B3-D5   (hex)		Kospel S.A.
-249000-249FFF     (base 16)		Kospel S.A.
-				Olchowa 1
-				Koszalin    75-136
-				PL
-
-70-B3-D5   (hex)		Coheros Oy
-D2E000-D2EFFF     (base 16)		Coheros Oy
-				Tammukkakatu 6
-				Nokia    37130
-				FI
-
-70-B3-D5   (hex)		Gogo Business Aviation
-E24000-E24FFF     (base 16)		Gogo Business Aviation
-				105 Edgeview Dr., Suite 300
-				Broomfield  CO  80021
-				US
-
-70-B3-D5   (hex)		Taejin InfoTech
-A75000-A75FFF     (base 16)		Taejin InfoTech
-				40, Imi-ro, A-411
-				Uiwang-si  Gyeonggi-do  16006
-				KR
-
-70-B3-D5   (hex)		ARCLAN'SYSTEM
-25C000-25CFFF     (base 16)		ARCLAN'SYSTEM
-				1140 rue Ampère - Actimart II - Lot 9
-				AIX EN PROVENCE    13290
-				FR
-
-70-B3-D5   (hex)		Smart Embedded Systems
-A09000-A09FFF     (base 16)		Smart Embedded Systems
-				6701  Koll Center Parkway #250
-				Pleasonton  CA  94566
-				US
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-F6A000-F6AFFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		LLC Sarov Innovative Technologies (WIZOLUTION)
-50F000-50FFFF     (base 16)		LLC Sarov Innovative Technologies (WIZOLUTION)
-				RUSSIAN FEDERATION, Nizhny Novgorod region, Varlamovskaya road, 7, build 2
-				Sarov  Nizhny Novgorod  607188
-				RU
-
-70-B3-D5   (hex)		SPX Radiodetection
-A77000-A77FFF     (base 16)		SPX Radiodetection
-				Western Drive
-				Bristol  Avon  BS14 0AF
-				GB
-
-70-B3-D5   (hex)		LM-Instruments Oy
-5AC000-5ACFFF     (base 16)		LM-Instruments Oy
-				Norrbyn rantatie 8
-				Parainen    21600
-				FI
-
-70-B3-D5   (hex)		Fuhr GmbH Filtertechnik
-DBB000-DBBFFF     (base 16)		Fuhr GmbH Filtertechnik
-				Am Weinkastell 14
-				Klein-Winternheim  Rheinland-Pfalz  55270
-				DE
-
-70-B3-D5   (hex)		Sanmina Israel
-C18000-C18FFF     (base 16)		Sanmina Israel
-				Koren Industrial Zone , POBox 102
-				Maalot  Israel  2101002
-				IL
-
-70-B3-D5   (hex)		INVISSYS
-AD4000-AD4FFF     (base 16)		INVISSYS
-				25 rue marcel issartier
-				merignac    33700
-				FR
-
-70-B3-D5   (hex)		Panoramic Power
-669000-669FFF     (base 16)		Panoramic Power
-				15 Atir Yeda
-				Kfar Saba    4464312
-				IL
-
-70-B3-D5   (hex)		Panoramic Power
-06D000-06DFFF     (base 16)		Panoramic Power
-				Atir Yeda 15
-				Kfar Saba    4464312
-				IL
-
-70-B3-D5   (hex)		Avlinkpro
-2C1000-2C1FFF     (base 16)		Avlinkpro
-				380 US Highway 46
-				Totowa  NJ  07512
-				US
-
-70-B3-D5   (hex)		DECYBEN
-683000-683FFF     (base 16)		DECYBEN
-				170 Rue Raymond Losserand
-				Paris    75014
-				FR
-
-70-B3-D5   (hex)		C4I Systems Ltd
-5C6000-5C6FFF     (base 16)		C4I Systems Ltd
-				Unit 1Twyford Court
-				Hereford  Herefordshire  HR2 6JR
-				GB
-
-70-B3-D5   (hex)		Knowledge Resources GmbH
-C36000-C36FFF     (base 16)		Knowledge Resources GmbH
-				Ackerstrasse 30
-				Bsel  BS  4057
-				CH
-
-70-B3-D5   (hex)		CoreEL Technologies Pvt Ltd
-10D000-10DFFF     (base 16)		CoreEL Technologies Pvt Ltd
-				#21, 7th Main, 1st Block ,Koramangala, 
-				Bangalore  Karnataka  560034
-				IN
-
-70-B3-D5   (hex)		adnexo GmbH
-4E3000-4E3FFF     (base 16)		adnexo GmbH
-				Rennweg 38
-				Zürich  Zurich  8001
-				CH
-
-70-B3-D5   (hex)		Sumitomo Heavy Industries, Ltd.
-C23000-C23FFF     (base 16)		Sumitomo Heavy Industries, Ltd.
-				5-2, Soubiraki-cho
-				Niihama  Ehime  792-8588
-				JP
-
-70-B3-D5   (hex)		LLC Open Converged Networks
-73F000-73FFFF     (base 16)		LLC Open Converged Networks
-				st. Stepana Shutova 8-1-34
-				Moscow  Moscow  109380
-				RU
-
-70-B3-D5   (hex)		Shenzhen Vikings Technology Co., Ltd.
-46A000-46AFFF     (base 16)		Shenzhen Vikings Technology Co., Ltd.
-				Floor 3, building 2, tiantong industrial park, gaofeng community, dalang street, longhua district
-				Shenzhen  Guangdong  518109
-				CN
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-294000-294FFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		aelettronica group srl
-AD9000-AD9FFF     (base 16)		aelettronica group srl
-				via matteotti,22
-				gaggiano  milano  20083
-				IT
-
-70-B3-D5   (hex)		C W F Hamilton & Co Ltd
-82A000-82AFFF     (base 16)		C W F Hamilton & Co Ltd
-				20 Lunns Road, Middleton
-				Christchurch  Canterbury  8024
-				NZ
-
-70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-165000-165FFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-70-B3-D5   (hex)		BESO sp. z o.o.
-D7D000-D7DFFF     (base 16)		BESO sp. z o.o.
-				Mlynska 1a
-				Brzeg Dolny    56-120
-				PL
-
-70-B3-D5   (hex)		Computechnic AG
-7D4000-7D4FFF     (base 16)		Computechnic AG
-				Rietlistrasse 3
-				Rorschacherberg  Goldach  9403
-				CH
-
-70-B3-D5   (hex)		National Time & Signal Corp.
-846000-846FFF     (base 16)		National Time & Signal Corp.
-				28045 Oakland Oaks Ct
-				Wixom  MI  48393
-				US
-
-70-B3-D5   (hex)		Senior Group LLC
-D19000-D19FFF     (base 16)		Senior Group LLC
-				1300 West Main Street
-				Louisville  KY  40203
-				US
-
-70-B3-D5   (hex)		Sportsbeams Lighting, Inc.
-9C2000-9C2FFF     (base 16)		Sportsbeams Lighting, Inc.
-				1260 Pine Forest Cir
-				Round Rock  TX  78665
-				US
-
-70-B3-D5   (hex)		Amico Corporation
-B90000-B90FFF     (base 16)		Amico Corporation
-				85 Fulton Way
-				Richmond Hill  ON   L4B 2N4
-				CA
-
-70-B3-D5   (hex)		ICTK Holdings
-5C9000-5C9FFF     (base 16)		ICTK Holdings
-				3F Ventureforum B'd, Pangyodae-ro
-				Seung-nam Si  Gyeonggi-Do  13488
-				KR
-
-70-B3-D5   (hex)		TIAMA
-8A1000-8A1FFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-70-B3-D5   (hex)		Honeywell/Intelligrated
-94C000-94CFFF     (base 16)		Honeywell/Intelligrated
-				10045 International Blvd
-				Cincinnati  OH  45246
-				US
-
-70-B3-D5   (hex)		LARIMART SPA
-536000-536FFF     (base 16)		LARIMART SPA
-				VIA DI TORREVECCHIA
-				ROMA    00168
-				IT
-
-70-B3-D5   (hex)		Transformational Security, LLC
-762000-762FFF     (base 16)		Transformational Security, LLC
-				9101 Guilford Rd
-				Columbia  MD  21046
-				US
-
-70-B3-D5   (hex)		Breas Medical AB
-EDA000-EDAFFF     (base 16)		Breas Medical AB
-				Företagsvägen 1
-				Mölnlycke    SE-435 33
-				SE
-
-70-B3-D5   (hex)		Packet Power
-B54000-B54FFF     (base 16)		Packet Power
-				2716 Summer Str. N.E.
-				Minneapolis  MN  55413
-				US
-
-70-B3-D5   (hex)		Ketronixs Sdn Bhd
-6AC000-6ACFFF     (base 16)		Ketronixs Sdn Bhd
-				51-17-B Menara BHL Bank, Jalan Sultan Ahmad Shah
-				Georgetown  Penang  10050
-				MY
-
-70-B3-D5   (hex)		Alto Aviation
-D0F000-D0FFFF     (base 16)		Alto Aviation
-				86 Leominster Road
-				Sterling  MA  01564
-				US
-
-70-B3-D5   (hex)		BOE Technology Group Co., Ltd.
-5A1000-5A1FFF     (base 16)		BOE Technology Group Co., Ltd.
-				No.12 Xihuanzhong RD, BDA
-				Beijing  Beijing  100176
-				CN
-
-70-B3-D5   (hex)		KAEONIT
-992000-992FFF     (base 16)		KAEONIT
-				51 boulevard Tristan Corbiere
-				Marseille    13012
-				FR
-
-70-B3-D5   (hex)		LG Electronics
-A23000-A23FFF     (base 16)		LG Electronics
-				LG Science Park, 10, Magokjungang 10-ro, GangSeo-gu
-				SEOUL    07796
-				KR
-
-70-B3-D5   (hex)		Antlia Systems
-416000-416FFF     (base 16)		Antlia Systems
-				401 N Michigan Ave Ste 1200
-				Chicago  IL  60611
-				US
-
-70-B3-D5   (hex)		BAE SYSTEMS 
-055000-055FFF     (base 16)		BAE SYSTEMS 
-				150 PARISH DRIVE 
-				WAYNE  NJ  07470
-				US
-
-70-B3-D5   (hex)		Advanced Telecommunications Research Institute International
-68A000-68AFFF     (base 16)		Advanced Telecommunications Research Institute International
-				2-2-2 Hikaridai
-				Seika-cho, Sorakugun  Kyoto  619-0288
-				JP
-
-70-B3-D5   (hex)		Doosan Digital Innovation America
-B7B000-B7BFFF     (base 16)		Doosan Digital Innovation America
-				195 GOVERNORS HWY
-				SOUTH WINDSOR  CT  06074-2419
-				US
-
-70-B3-D5   (hex)		Engage Technologies
-E11000-E11FFF     (base 16)		Engage Technologies
-				7041 Boone Avenue North
-				Brooklyn Park  MN  55428
-				US
-
-70-B3-D5   (hex)		GPSat Systems
-386000-386FFF     (base 16)		GPSat Systems
-				Suite 1 22 Aberdeen Road
-				Macleod  VIC  3085
-				AU
-
-70-B3-D5   (hex)		Season Electronics Ltd
-0F5000-0F5FFF     (base 16)		Season Electronics Ltd
-				600 Nest Business Park 
-				Havant  Hampshire  PO9 5TL
-				GB
-
-70-B3-D5   (hex)		Proemion GmbH
-A03000-A03FFF     (base 16)		Proemion GmbH
-				Donaustraße 14
-				Fulda  Hessen  36043
-				DE
-
-70-B3-D5   (hex)		Magenta Labs, Inc.
-376000-376FFF     (base 16)		Magenta Labs, Inc.
-				164 Townsend Street Unit 1
-				San Francisco  CA  94107
-				US
-
-70-B3-D5   (hex)		AC Power Corp.
-49C000-49CFFF     (base 16)		AC Power Corp.
-				3F, No.200, Gangqian Rd., Neihu District
-				Taipei City    11494
-				TW
-
-70-B3-D5   (hex)		Technological Ray GmbH
-4D7000-4D7FFF     (base 16)		Technological Ray GmbH
-				Zeppelinstraße 1
-				Hösbach  Bayern  63768
-				DE
-
-70-B3-D5   (hex)		PCS Inc.
-622000-622FFF     (base 16)		PCS Inc.
-				4974 Provident Drive
-				Cincinnati  OH  45246
-				US
-
-70-B3-D5   (hex)		GRYPHON SECURE INC
-738000-738FFF     (base 16)		GRYPHON SECURE INC
-				1015 - 2225 SHEPPARD AVE E
-				TORONTO  ONTARIO  M2J 5C2
-				CA
-
-70-B3-D5   (hex)		Beringar
-6EF000-6EFFFF     (base 16)		Beringar
-				citypoint - 65 Haymarket Terrace
-				Edinburgh  Lothian  EH12 5HD
-				GB
-
-70-B3-D5   (hex)		Satsky Communication Equipment Co.,Ltd.
-247000-247FFF     (base 16)		Satsky Communication Equipment Co.,Ltd.
-				6/F., 710 building, Liantang Pengji Industrial Zone,Luohu District
-				Shenzhen  Guangdong  518000
-				CN
-
-70-B3-D5   (hex)		LITUM BILGI TEKNOLOJILERI SAN. VE TIC. A.S.
-483000-483FFF     (base 16)		LITUM BILGI TEKNOLOJILERI SAN. VE TIC. A.S.
-				?evket Özçelik Sk. No:29 Kültür Mah. Litum Plaza
-				IZMIR    35220
-				TR
-
-70-B3-D5   (hex)		Shanghai Hourui Technology Co., Ltd.
-9A3000-9A3FFF     (base 16)		Shanghai Hourui Technology Co., Ltd.
-				Room A1001A,Building A,No.1618 Yishan Road
-				Shanghai    201103
-				CN
-
-70-B3-D5   (hex)		Optiver Pty Ltd
-B71000-B71FFF     (base 16)		Optiver Pty Ltd
-				39 HUNTER ST
-				SYDNEY  NSW  2000
-				AU
-
-70-B3-D5   (hex)		GEGA ELECTRONIQUE
-573000-573FFF     (base 16)		GEGA ELECTRONIQUE
-				1 RUE SAINT ELOI
-				MONTCEAU LES MINES  SAONE ET LOIRE  71300
-				FR
-
-70-B3-D5   (hex)		DAVE SRL
-27B000-27BFFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-70-B3-D5   (hex)		ZAO ZEO
-619000-619FFF     (base 16)		ZAO ZEO
-				Khachaturiana 14a
-				Moscow    127562
-				RU
-
-70-B3-D5   (hex)		Nuand LLC
-7D8000-7D8FFF     (base 16)		Nuand LLC
-				680 Mission Street #41H
-				San Francisco  CA  94105
-				US
-
-70-B3-D5   (hex)		Jinga-hi, Inc.
-9BB000-9BBFFF     (base 16)		Jinga-hi, Inc.
-				20303 Clifden Way
-				CUPERTINO  CA  95014
-				US
-
-70-B3-D5   (hex)		SeaTech Intelligent Technology (Shanghai) Co., LTD
-380000-380FFF     (base 16)		SeaTech Intelligent Technology (Shanghai) Co., LTD
-				5th Flr,7Bldg,No.518,Xinzhuan Road
-				Shanghai  Shanghai  201612
-				CN
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-8FB000-8FBFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		ABC Electric Co.
-3C8000-3C8FFF     (base 16)		ABC Electric Co.
-				Room 266, 1333 Road Xinlong
-				Shanghai    201101
-				CN
-
-70-B3-D5   (hex)		Senquire Pte. Ltd
-962000-962FFF     (base 16)		Senquire Pte. Ltd
-				12, Bedok Reservoir View,, 17-37
-				Singapore  Singapore  479237
-				SG
-
-70-B3-D5   (hex)		WILMORE ELECTRONICS COMPANY
-ED4000-ED4FFF     (base 16)		WILMORE ELECTRONICS COMPANY
-				607 US HIGHWAY 70A E
-				HILLSBOROUGH  NC  27278-8526
-				US
-
-70-B3-D5   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
-CBF000-CBFFFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
-				10545 Hardin Valley Rd
-				Knoxville  TN  37932
-				US
-
-70-B3-D5   (hex)		Veo Robotics, Inc.
-6C4000-6C4FFF     (base 16)		Veo Robotics, Inc.
-				411 Waverley Oaks Rd. Suite 107
-				Waltham  MA  02452
-				US
-
-70-B3-D5   (hex)		PCTEL, Inc.
-ED2000-ED2FFF     (base 16)		PCTEL, Inc.
-				22600 gateway center drive, Suite 100
-				Clarksburg  MD  20871
-				US
-
-70-B3-D5   (hex)		Energybox Limited
-FA4000-FA4FFF     (base 16)		Energybox Limited
-				8/F., Green 18, HK Science Park
-				Sha Tin  Hong Kong   0000
-				HK
-
-70-B3-D5   (hex)		eBZ GmbH
-C57000-C57FFF     (base 16)		eBZ GmbH
-				Neusser Straße 8
-				Bielefeld  NRW  33649
-				DE
-
-70-B3-D5   (hex)		Teneo IoT B.V.
-CDD000-CDDFFF     (base 16)		Teneo IoT B.V.
-				Landbouwstraat 5-06
-				Winterswijk    7101 EK
-				NL
-
-70-B3-D5   (hex)		tetronik GmbH AEN
-909000-909FFF     (base 16)		tetronik GmbH AEN
-				Silberbachstr.10
-				Taunusstein  Hessen  65232
-				DE
-
-70-B3-D5   (hex)		EBE Mobility & Green Energy GmbH
-624000-624FFF     (base 16)		EBE Mobility & Green Energy GmbH
-				Prießnitzgasse 16
-				Mödling  Austria  2340
-				AT
-
-70-B3-D5   (hex)		WuXi anktech Co., Ltd 
-B61000-B61FFF     (base 16)		WuXi anktech Co., Ltd 
-				Room1801, No.6 Third Financial Street, Binhu District, Wuxi City, Jiangsu Province
-				Wuxi  jiangsu  214000
-				CN
-
-70-B3-D5   (hex)		Power Element 
-D17000-D17FFF     (base 16)		Power Element 
-				Verkhnyaya Krasnoselskaya 2/1
-				Moscow  moscow  107140
-				RU
-
-70-B3-D5   (hex)		ISRV Zrt.
-AB1000-AB1FFF     (base 16)		ISRV Zrt.
-				 Löv?ház utca 2-6. IV. emelet
-				Budapest  PEST  1024 
-				HU
-
-70-B3-D5   (hex)		Boundary Technologies Ltd
-BBC000-BBCFFF     (base 16)		Boundary Technologies Ltd
-				61 Dublin Street
-				Edinburgh  Midlothian  EH3 6NL
-				GB
-
-70-B3-D5   (hex)		Microvision
-5F5000-5F5FFF     (base 16)		Microvision
-				272, Digital-ro, 1004ho Microvision.
-				Guro-gu, Seoul, Republic of Korea    08848
-				KR
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-70C000-70CFFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-C17000-C17FFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Field Design Inc.
-8D1000-8D1FFF     (base 16)		Field Design Inc.
-				BrightCore 4F, Kita-Shinagaw 5-5-15
-				Shinagawa-ku  Tokyo  1410001
-				JP
-
-70-B3-D5   (hex)		Alfa Elettronica srl
-BF0000-BF0FFF     (base 16)		Alfa Elettronica srl
-				Via Amman, 35
-				Cordenons  - - not required - -  33084
-				IT
-
-70-B3-D5   (hex)		PREO INDUSTRIES FAR EAST LTD
-8E8000-8E8FFF     (base 16)		PREO INDUSTRIES FAR EAST LTD
-				UNIT B, 26/F, AMIATA IND'L BLDG
-				HONG KONG    NIL
-				HK
-
-70-B3-D5   (hex)		Utopi Ltd
-80E000-80EFFF     (base 16)		Utopi Ltd
-				3 Candymill Lane
-				Hamilton    ML3 0FD
-				GB
-
-70-B3-D5   (hex)		Entec Solar S.L.
-887000-887FFF     (base 16)		Entec Solar S.L.
-				C/ Bambú 4
-				Madrid  Madrid  28036
-				ES
-
-70-B3-D5   (hex)		Nxvi Microelectronics Technology (Jinan) Co., Ltd.
-D78000-D78FFF     (base 16)		Nxvi Microelectronics Technology (Jinan) Co., Ltd.
-				2701, 27th floor, No. 7000, Hanyu Golden Valley Business Service Center, Jingshi Road, Jinan Area, Pilot Free Trade Zone, 
-				Jinan  Shandong   250102
-				CN
-
-70-B3-D5   (hex)		Procon Electronics Pty Ltd
-527000-527FFF     (base 16)		Procon Electronics Pty Ltd
-				P O Box 164
-				Seven Hills  NSW  1730
-				AU
-
-00-1B-C5   (hex)		OctoGate IT Security Systems GmbH
-030000-030FFF     (base 16)		OctoGate IT Security Systems GmbH
-				Klingender Strasse 5
-				Paderborn  NRW  33100
-				DE
-
-70-B3-D5   (hex)		AKASAKATEC  INC.
-D83000-D83FFF     (base 16)		AKASAKATEC  INC.
-				3F Marina Plaza 4-2
-				Shiraho kanazawa-ku Yokohamashi    2360007
-				JP
-
-70-B3-D5   (hex)		VTEQ
-B12000-B12FFF     (base 16)		VTEQ
-				Conca de Barbera
-				Castellar del Vallés  Barcelona / Spain  08122
-				ES
-
-70-B3-D5   (hex)		promedias AG
-520000-520FFF     (base 16)		promedias AG
-				Grabenackerstrasse 27
-				Oberhasli  ZH  CH-8156
-				CH
-
-70-B3-D5   (hex)		REO AG
-AD0000-AD0FFF     (base 16)		REO AG
-				Brühlerstr. 100
-				Solingen    42657
-				DE
-
-70-B3-D5   (hex)		Array Technologies Inc.
-FB4000-FB4FFF     (base 16)		Array Technologies Inc.
-				21 Sequin Drive
-				Glastonbury    06033
-				US
-
-70-B3-D5   (hex)		ejoin, s.r.o.
-44C000-44CFFF     (base 16)		ejoin, s.r.o.
-				Sturova 1
-				Dubnica nad Vahom    01841
-				SK
-
-70-B3-D5   (hex)		TEX COMPUTER SRL 
-390000-390FFF     (base 16)		TEX COMPUTER SRL 
-				VIA MERCADANTE 35
-				CATTOLICA   RIMINI   47841
-				IT
-
-70-B3-D5   (hex)		Grau Elektronik GmbH
-314000-314FFF     (base 16)		Grau Elektronik GmbH
-				Badhausweg 14
-				Karlsbad Ittersbach  Baden-Württemberg  76307
-				DE
-
-70-B3-D5   (hex)		microWerk GmbH
-D2C000-D2CFFF     (base 16)		microWerk GmbH
-				Kaffeegasse, 7
-				Halsenbach    56283
-				DE
-
-70-B3-D5   (hex)		Foxtrot Research Corp
-604000-604FFF     (base 16)		Foxtrot Research Corp
-				6201 Johns Road, Suite 3
-				Tampa  FL  33634
-				US
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-46D000-46DFFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		Monnit Corporation
-A1E000-A1EFFF     (base 16)		Monnit Corporation
-				450 South Simmons STE 670
-				Kaysville  UT  84037
-				US
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-681000-681FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Movicom Electric LLC
-3B3000-3B3FFF     (base 16)		Movicom Electric LLC
-				Nauchny proezd, 20
-				Moscow  Moscow  117246
-				RU
-
-70-B3-D5   (hex)		Sicon srl
-690000-690FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		SMITEC S.p.A.
-312000-312FFF     (base 16)		SMITEC S.p.A.
-				Via Carlo Ceresa, 10
-				San Giovanni Bianco  Bergamo  24015
-				IT
-
-70-B3-D5   (hex)		SCHEIBER
-CFA000-CFAFFF     (base 16)		SCHEIBER
-				2 BELLEVUE
-				SAINT PIERRE DU CHEMIN    85120
-				FR
-
-70-B3-D5   (hex)		Telerob Gesellschaft für Fernhantierungs
-6D4000-6D4FFF     (base 16)		Telerob Gesellschaft für Fernhantierungs
-				Vogelsangstr. 8
-				Ostfildern    73760
-				DE
-
-70-B3-D5   (hex)		Metrasens Limited
-ED6000-ED6FFF     (base 16)		Metrasens Limited
-				8 Beauchamp Business Centre,, Sparrowhawk Close
-				Malvern  Worcestershire  WR14 1GL
-				GB
-
-70-B3-D5   (hex)		Perform3-D LLC
-451000-451FFF     (base 16)		Perform3-D LLC
-				411 Huronview Blvd STE 200
-				Ann Arbor  MI  48103
-				US
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-906000-906FFF     (base 16)		Aplex Technology Inc.
-				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
-				Shenzhen City  Guangdong  518129
-				CN
-
-70-B3-D5   (hex)		DesignA Electronics Limited
-A63000-A63FFF     (base 16)		DesignA Electronics Limited
-				Unit 6
-				Christchurch  New Zealand  8011
-				NZ
-
-70-B3-D5   (hex)		Grayshift
-71F000-71FFFF     (base 16)		Grayshift
-				931 Monroe Dr NE, Suite A102-340
-				Atlanta  GA  30308
-				US
-
-70-B3-D5   (hex)		dongsheng
-AFD000-AFDFFF     (base 16)		dongsheng
-				No. 2, Sec. 2, Beiyi Rd., Xindian Dist.,
-				New Taipei City    231067
-				TW
-
-70-B3-D5   (hex)		Exemplar Medical, LLC
-318000-318FFF     (base 16)		Exemplar Medical, LLC
-				4521 Wornall Road, #106
-				Kansas City  MO  64111
-				US
-
-70-B3-D5   (hex)		HLT Micro 
-2B6000-2B6FFF     (base 16)		HLT Micro 
-				Bld 6, 4th Park, Xitian, GM Distinct
-				shenzhen    511088
-				CN
-
-70-B3-D5   (hex)		Cucos Retail Systems GmbH
-4CB000-4CBFFF     (base 16)		Cucos Retail Systems GmbH
-				Detmolder Straße 7
-				Soest    59494
-				DE
-
-70-B3-D5   (hex)		Apantac LLC
-450000-450FFF     (base 16)		Apantac LLC
-				7556 SW Bridgeport Road
-				Durham  OR  97224
-				US
-
-8C-1F-64   (hex)		GIORDANO CONTROLS SPA
-DBD000-DBDFFF     (base 16)		GIORDANO CONTROLS SPA
-				VIA PARALLELA 2/4
-				VILLA BARTOLOMEA  IT  37049
-				IT
-
-70-B3-D5   (hex)		i2Systems
-FFD000-FFDFFF     (base 16)		i2Systems
-				355 Bantam Lake Road
-				Morris  CT  06763
-				US
-
-8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
-918000-918FFF     (base 16)		Abbott Diagnostics Technologies AS
-				P. O.  Box 6863 Rodeløkka
-				Oslo  Oslo  0504
-				NO
-
-8C-1F-64   (hex)		Ruichuangte
-3E8000-3E8FFF     (base 16)		Ruichuangte
-				Zijinlianhelifang, No.155, LongPan Road
-				Nanjing  Jiangsu  210037
-				CN
-
-8C-1F-64   (hex)		Vishay Nobel AB
-9FD000-9FDFFF     (base 16)		Vishay Nobel AB
-				Box 423
-				Karlskoga    SE-691 27
-				SE
-
-8C-1F-64   (hex)		Shenzhen Pisoftware Technology Co.,Ltd.
-B03000-B03FFF     (base 16)		Shenzhen Pisoftware Technology Co.,Ltd.
-				Room 1221, 12F,Shenzhen Newspaper Group and Periodicals Building, Qinghu Community,Longhua Street, Longhua District, Shenzhen, China 
-				Shenzhen  GUANGDONG  518103
-				CN
-
-70-B3-D5   (hex)		ATS-CONVERS,LLC
-901000-901FFF     (base 16)		ATS-CONVERS,LLC
-				Yana Fabrittsyusa str., 10
-				Pskov    180017
-				RU
-
-8C-1F-64   (hex)		Langfang ENN lntelligent Technology Co.,Ltd.
-144000-144FFF     (base 16)		Langfang ENN lntelligent Technology Co.,Ltd.
-				HuaxiangRoad,No.106,Langfang Economic&Technical Devevlopment Zone,Hebei P.R.China
-				Langfang    065000
-				CN
-
-8C-1F-64   (hex)		ABB S.p.A.
-CF3000-CF3FFF     (base 16)		ABB S.p.A.
-				Via Pisani 16
-				Milano  MI  20124
-				IT
-
-8C-1F-64   (hex)		ASW-ATI Srl
-101000-101FFF     (base 16)		ASW-ATI Srl
-				Via Volontari della Libertà 54/56
-				Empoli    50053
-				IT
-
-8C-1F-64   (hex)		R2Sonic, LLC
-25E000-25EFFF     (base 16)		R2Sonic, LLC
-				5307 Industrial Oaks Blvd
-				Austin  TX  78735
-				US
-
-8C-1F-64   (hex)		Secure Bits
-D29000-D29FFF     (base 16)		Secure Bits
-				2 Taubman St
-				Symonston  ACT  2609
-				AU
-
-8C-1F-64   (hex)		Autopharma
-0E0000-0E0FFF     (base 16)		Autopharma
-				Orionweg 49
-				Leeuwarden    8938 AG
-				NL
-
-8C-1F-64   (hex)		Potter Electric Signal Company
-FE0000-FE0FFF     (base 16)		Potter Electric Signal Company
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-8C-1F-64   (hex)		Invisense AB
-2EF000-2EFFFF     (base 16)		Invisense AB
-				Nygatan 56
-				Linköping    582 27
-				SE
-
-8C-1F-64   (hex)		NewAgeMicro
-73D000-73DFFF     (base 16)		NewAgeMicro
-				171 Forbes Blvd, Suite 5000
-				Mansfield  MA  02048
-				US
-
-8C-1F-64   (hex)		DEUTA-WERKE GmbH
-BA3000-BA3FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-8C-1F-64   (hex)		INSEVIS GmbH
-414000-414FFF     (base 16)		INSEVIS GmbH
-				Am Weichselgarten 7
-				Erlangen    D-91058
-				DE
-
-8C-1F-64   (hex)		Shenzhen Longyun Lighting Electric Appliances Co., Ltd
-95A000-95AFFF     (base 16)		Shenzhen Longyun Lighting Electric Appliances Co., Ltd
-				Building A5 , Silicon Valley Power Industrial Park, No.334, Guiyue Road, Guanlan
-				Shenzhen  Guangdong  518110
-				CN
-
-8C-1F-64   (hex)		Peter Huber Kaeltemaschinenbau AG
-DC9000-DC9FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
-				Werner-von-Siemens-Str. 1
-				Offenburg  Ba-Wue  77656
-				DE
-
-8C-1F-64   (hex)		Guangzhou Desam Audio Co.,Ltd
-219000-219FFF     (base 16)		Guangzhou Desam Audio Co.,Ltd
-				101,Building 1,No.28,Wenqiao Rd,Wenbian Village,Shiji Town,Panyu District,Duangzhou
-				Duangzhou    511400
-				CN
-
-8C-1F-64   (hex)		Xacti Corporation
-90E000-90EFFF     (base 16)		Xacti Corporation
-				Tower East 28F,Umeda Sky Building,1-1-88,Oyodonaka,Kita-ku
-				Osaka  Osaka  531-6048
-				JP
-
-8C-1F-64   (hex)		Nexion Data Systems P/L
-712000-712FFF     (base 16)		Nexion Data Systems P/L
-				Unit 1, 53 Boyland Avenue
-				Coopers Plains  Queensland  4108
-				AU
-
-8C-1F-64   (hex)		ICT International
-60E000-60EFFF     (base 16)		ICT International
-				211 Mann St
-				Armidale  NSW  2350
-				AU
-
-8C-1F-64   (hex)		Bray International
-6AE000-6AEFFF     (base 16)		Bray International
-				13333 Westland East Blvd.
-				Houston  TX  77041
-				US
-
-8C-1F-64   (hex)		Software Systems Plus
-398000-398FFF     (base 16)		Software Systems Plus
-				9924 N. Ash Avenue
-				Kansas City    64157
-				US
-
-8C-1F-64   (hex)		EA Elektroautomatik GmbH & Co. KG
-F94000-F94FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-8C-1F-64   (hex)		Thermo Onix Ltd
-92A000-92AFFF     (base 16)		Thermo Onix Ltd
-				Ion Path
-				Winsford  Cheshire  CW7 3GA
-				GB
-
-8C-1F-64   (hex)		SPX Flow Technology
-B84000-B84FFF     (base 16)		SPX Flow Technology
-				4647 S.W. 40th Ave.
-				Ocala  FL  34474
-				US
-
-8C-1F-64   (hex)		Gemini Electronics B.V.
-54C000-54CFFF     (base 16)		Gemini Electronics B.V.
-				Burg. van Meeuwenstraat 14
-				Beek  Limburg  6191 ND
-				NL
-
-8C-1F-64   (hex)		MDI Industrial
-892000-892FFF     (base 16)		MDI Industrial
-				Rua Lilia Dias da Silva, 339
-				Lauro de Freitas  Bahia  42712-850
-				BR
-
-8C-1F-64   (hex)		ViewSonic International Corporation
-6E3000-6E3FFF     (base 16)		ViewSonic International Corporation
-				9F, No. 192, Lien Chen Road, Zhonghe Dist, New Taipei City 235, , Taiwan
-				New Taipei City  Taiwan  235
-				TW
-
-8C-1F-64   (hex)		LINEAGE POWER PVT LTD.,
-66C000-66CFFF     (base 16)		LINEAGE POWER PVT LTD.,
-				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
-				BANGALORE  KARNATAKA  560074
-				IN
-
-8C-1F-64   (hex)		First Mode
-C54000-C54FFF     (base 16)		First Mode
-				542 1st Ave S Ste 300
-				Seatte  WA  98104
-				US
-
-8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
-8EE000-8EEFFF     (base 16)		Abbott Diagnostics Technologies AS
-				P. O.  Box 6863 Rodeløkka
-				Oslo  Oslo  0504
-				NO
-
-8C-1F-64   (hex)		Integer.pl S.A.
-9D8000-9D8FFF     (base 16)		Integer.pl S.A.
-				Wielicka 28
-				Krakow    30-552
-				PL
-
-8C-1F-64   (hex)		victtron
-DB5000-DB5FFF     (base 16)		victtron
-				68, Saemal 2-gil, Daedeok-gu
-				Daejeon    34344
-				KR
-
-8C-1F-64   (hex)		Potter Electric Signal Company
-6AD000-6ADFFF     (base 16)		Potter Electric Signal Company
-				5757 Phantom Drive
-				Hazelwood  MO  63042
-				US
-
-8C-1F-64   (hex)		UISEE(SHANGHAI) AUTOMOTIVE TECHNOLOGIES LTD.
-3FF000-3FFFFF     (base 16)		UISEE(SHANGHAI) AUTOMOTIVE TECHNOLOGIES LTD.
-				Building 2,No 1818,Chengbei Road,Jiading District
-				shanghai  shanghai  201800
-				CN
-
-8C-1F-64   (hex)		ZUUM
-708000-708FFF     (base 16)		ZUUM
-				4321 W Sam Houston Pkwy N Ste 120
-				Houston  TX  77043
-				US
-
-8C-1F-64   (hex)		Labtrino AB
-619000-619FFF     (base 16)		Labtrino AB
-				Sankt Eriksgatan 33A
-				Stockholm  Stockholm  11239
-				SE
-
-8C-1F-64   (hex)		Revo - Tec GmbH
-164000-164FFF     (base 16)		Revo - Tec GmbH
-				Zeller Straße 14
-				Mittersill    5730
-				AT
-
-8C-1F-64   (hex)		ABB
-FB1000-FB1FFF     (base 16)		ABB
-				Fulachstrasse 150
-				Schaffhausen    8200
-				CH
-
-8C-1F-64   (hex)		MATELEX
-909000-909FFF     (base 16)		MATELEX
-				4 rue de la Croix Faubin
-				Paris    75011
-				FR
-
-8C-1F-64   (hex)		DREAMSWELL Technology CO.,Ltd
-F9E000-F9EFFF     (base 16)		DREAMSWELL Technology CO.,Ltd
-				1F.,NO.17, MINGYUAN., DASHE DIST
-				KAOHSIUHG    815
-				TW
-
-8C-1F-64   (hex)		THUNDER DATA TAIWAN CO., LTD.
-638000-638FFF     (base 16)		THUNDER DATA TAIWAN CO., LTD.
-				9F., NO. 168, RUIGUANG RD., NEIHU DIST.
-				TAIPEI CITY    114
-				TW
-
-8C-1F-64   (hex)		Chongqing Huaxiu Technology Co.,Ltd
-1DA000-1DAFFF     (base 16)		Chongqing Huaxiu Technology Co.,Ltd
-				Room 1005/1006, SOHO Building, No. 28-2, Xiyong Street, Shapingba District, Chongqing
-				Chongqing    400000
-				CN
-
-8C-1F-64   (hex)		Xylon
-0F0000-0F0FFF     (base 16)		Xylon
-				Fallerovo setaliste 22
-				Zagreb    10000
-				HR
-
-8C-1F-64   (hex)		XOR UK Corporation Limited
-4EC000-4ECFFF     (base 16)		XOR UK Corporation Limited
-				Unit 11-12, Stanhope Gate, Stanhope Rd
-				Camberley  Surrey  GU15 3DW
-				GB
-
-8C-1F-64   (hex)		Seed Core Co., LTD.
-B82000-B82FFF     (base 16)		Seed Core Co., LTD.
-				37-17, Yuseong-daero 1628 Yuseong-gu
-				Daejeon    34054
-				KR
-
-8C-1F-64   (hex)		Renwei Electronics Technology (Shenzhen) Co.,LTD.
-1BB000-1BBFFF     (base 16)		Renwei Electronics Technology (Shenzhen) Co.,LTD.
-				Rm 1-704 Tongjian Bldg. Shennan Middle Road
-				Shenzhen  GUANG DONG  518028
-				CN
-
-8C-1F-64   (hex)		Plum sp. z.o.o.
-3FE000-3FEFFF     (base 16)		Plum sp. z.o.o.
-				Ignatki, ul. Wspólna 19
-				Kleosin  No States Found. Use Address  16-001
-				PL
-
-8C-1F-64   (hex)		Inovonics Inc.
-F59000-F59FFF     (base 16)		Inovonics Inc.
-				5805 HWY 9
-				FELTON  CA  95018-9680
-				US
-
-70-B3-D5   (hex)		R.A.I.T.88 Srl
-6C1000-6C1FFF     (base 16)		R.A.I.T.88 Srl
-				Via di Cervara 49,
-				Rome    00155
-				IT
-
-8C-1F-64   (hex)		HORIBA ABX SAS
-C01000-C01FFF     (base 16)		HORIBA ABX SAS
-				rue du caducee
-				Montpellier  Herault  34000
-				FR
-
-8C-1F-64   (hex)		Wisdom Audio
-D56000-D56FFF     (base 16)		Wisdom Audio
-				1572 College Parkway
-				Carson City  NV  89706
-				US
-
-8C-1F-64   (hex)		DORLET SAU
-071000-071FFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-8C-1F-64   (hex)		Paulmann Licht GmbH
-956000-956FFF     (base 16)		Paulmann Licht GmbH
-				Quezinger Feld 2
-				Springe    31832
-				DE
-
-8C-1F-64   (hex)		BLIGHTER SURVEILLANCE SYSTEMS LTD
-B22000-B22FFF     (base 16)		BLIGHTER SURVEILLANCE SYSTEMS LTD
-				Iceni House, London Road, Great Chesterford
-				Saffron Walden  Essex  CB10 1NY
-				GB
-
-8C-1F-64   (hex)		Genesis Technologies AG
-8A4000-8A4FFF     (base 16)		Genesis Technologies AG
-				Werkstrasse 73
-				Lyss  Bern  3250
-				CH
-
-8C-1F-64   (hex)		Columbus McKinnon
-535000-535FFF     (base 16)		Columbus McKinnon
-				9415 Pioneer Avenue
-				Charlotte  NC  28273
-				US
-
-8C-1F-64   (hex)		Toshniwal Security Solutions Pvt Ltd
-45F000-45FFFF     (base 16)		Toshniwal Security Solutions Pvt Ltd
-				industrial estate, makhupura, ajmer, rajasthan
-				ajmer  Rajasthan  305002
-				IN
-
-8C-1F-64   (hex)		Methods2Business B.V.
-7EC000-7ECFFF     (base 16)		Methods2Business B.V.
-				Burg. Wittestraat 21
-				EINDHOVEN  Noord-Brabant  5616 DA
-				NL
-
-8C-1F-64   (hex)		JinYuan International Corporation
-E5D000-E5DFFF     (base 16)		JinYuan International Corporation
-				8F., No. 649-8, Zhongzheng Rd. Xinzhuang Dist.
-				New Taipei City    242051
-				TW
-
-8C-1F-64   (hex)		VisionTIR Multispectral Technology
-747000-747FFF     (base 16)		VisionTIR Multispectral Technology
-				C/Pierre Laffitte Nº8
-				Málaga  Málaga  29590
-				ES
-
-8C-1F-64   (hex)		Megger Germany GmbH
-298000-298FFF     (base 16)		Megger Germany GmbH
-				Röderaue 41
-				Radeburg    01471
-				DE
-
-8C-1F-64   (hex)		SmartSky Networks LLC
-0EA000-0EAFFF     (base 16)		SmartSky Networks LLC
-				45610 Woodland Road, Suite 370
-				Sterling  VA  20166
-				US
-
-8C-1F-64   (hex)		KJ Klimateknik A/S
-454000-454FFF     (base 16)		KJ Klimateknik A/S
-				Bommen 2
-				Kjellerup    8620
-				DK
-
-8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
-498000-498FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				1-4-30
-				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
-				JP
-
-8C-1F-64   (hex)		Nautel LTD
-A32000-A32FFF     (base 16)		Nautel LTD
-				10089 Peggy's Cove Road
-				Hackett's Cove  NS  B3Z 3J4
-				CA
-
-8C-1F-64   (hex)		Gemini Electronics B.V.
-B97000-B97FFF     (base 16)		Gemini Electronics B.V.
-				Burg. van Meeuwenstraat 14
-				Beek  Limburg  6191 ND
-				NL
-
-70-B3-D5   (hex)		Nautel LTD
-87C000-87CFFF     (base 16)		Nautel LTD
-				10089 Peggy's Cove Road
-				Hackett's Cove  Nova Scotia  B3Z3J4
-				CA
-
-8C-1F-64   (hex)		MTU Aero Engines AG
-B10000-B10FFF     (base 16)		MTU Aero Engines AG
-				Dachauer Straße 665
-				München  Bavaria  80995
-				DE
-
-8C-1F-64   (hex)		Shenzhen INVT Electric Co.,Ltd
-F32000-F32FFF     (base 16)		Shenzhen INVT Electric Co.,Ltd
-				INVT Guangming Technology Building,Songbai Road
-				ShenZhen  Matian,Guangming District  518106  
-				CN
-
-8C-1F-64   (hex)		Hermes Network Inc
-8C4000-8C4FFF     (base 16)		Hermes Network Inc
-				1810 E Sahara Ave Ste 212-1354
-				Las Vegas  NV  89104-3707
-				US
-
-8C-1F-64   (hex)		INSTITUTO DE GESTÃO, REDES TECNOLÓGICAS E NERGIAS
-9A6000-9A6FFF     (base 16)		INSTITUTO DE GESTÃO, REDES TECNOLÓGICAS E NERGIAS
-				Rua Martinho Rodrigues, 331 - FÁTIMA, , 60411-280
-				FORTALEZA  CEARÁ  60411-280
-				BR
-
-8C-1F-64   (hex)		HEITEC AG
-5BC000-5BCFFF     (base 16)		HEITEC AG
-				Dr.-Otto-Leich-Str. 16
-				Eckental  Bavaria  90542
-				DE
-
-8C-1F-64   (hex)		Metroval Controle de Fluidos Ltda
-9FE000-9FEFFF     (base 16)		Metroval Controle de Fluidos Ltda
-				RUA CHRISTIANO KILMEYERS, 819
-				NOVA ODESSA  SP  13380-296
-				BR
-
-8C-1F-64   (hex)		IWS Global Pty Ltd
-4BB000-4BBFFF     (base 16)		IWS Global Pty Ltd
-				29 Oxleigh Dr
-				Perth  Western Australia  6090
-				AU
-
-8C-1F-64   (hex)		Tieline Research Pty Ltd
-4F0000-4F0FFF     (base 16)		Tieline Research Pty Ltd
-				PO Box 2092
-				MALAGA  Western Australia  6944
-				AU
-
-8C-1F-64   (hex)		HM Systems A/S
-6FC000-6FCFFF     (base 16)		HM Systems A/S
-				Melskov Alle 6
-				Haderslev    6100
-				DK
-
-8C-1F-64   (hex)		MARIAN GmbH
-FB0000-FB0FFF     (base 16)		MARIAN GmbH
-				Berggartenstr. 12
-				Leipzig    04155
-				DE
-
-8C-1F-64   (hex)		Stange Elektronik GmbH
-E61000-E61FFF     (base 16)		Stange Elektronik GmbH
-				Gutenbergstrasse 3
-				Gummersbach    51645
-				DE
-
-70-B3-D5   (hex)		PHB Eletronica Ltda.
-904000-904FFF     (base 16)		PHB Eletronica Ltda.
-				12 Sao Bernardino
-				São Paulo  Parque Anhanguera  05120-050
-				BR
-
-8C-1F-64   (hex)		PHB Eletronica Ltda.
-224000-224FFF     (base 16)		PHB Eletronica Ltda.
-				12 Sao Bernardino
-				São Paulo  Parque Anhanguera  05120-050
-				BR
-
-8C-1F-64   (hex)		SORB ENGINEERING LLC
-085000-085FFF     (base 16)		SORB ENGINEERING LLC
-				Grishina street 24/1 44
-				Moscow    121354
-				RU
-
-70-B3-D5   (hex)		Delta Solutions LLC
-0E5000-0E5FFF     (base 16)		Delta Solutions LLC
-				Kolhoznaya str., 8A, Room 20, 2nd Floor
-				Lubertsy  Lubertsy City District, Moscow Region  140002
-				RU
-
-8C-1F-64   (hex)		Taiv
-09B000-09BFFF     (base 16)		Taiv
-				195 McPhillips St
-				Winnipeg  Manitoba  R3E 2K2
-				CA
-
-8C-1F-64   (hex)		AT-Automation Technology GmbH
-69E000-69EFFF     (base 16)		AT-Automation Technology GmbH
-				Hermann-Boessow-Str. 6-8
-				Bad Oldesloe    D-23843
-				DE
-
-8C-1F-64   (hex)		Corigine, Inc
-306000-306FFF     (base 16)		Corigine, Inc
-				4655 Old Ironsides Dr #270
-				Santa Clara  CA  95054
-				US
-
-8C-1F-64   (hex)		biosilver .co.,ltd
-641000-641FFF     (base 16)		biosilver .co.,ltd
-				2-14-4, shinyokohama
-				yokohama  kanagawa  2220033
-				JP
-
-8C-1F-64   (hex)		Beijing Tongtech Technology Co., Ltd.
-12B000-12BFFF     (base 16)		Beijing Tongtech Technology Co., Ltd.
-				Room 3017, Building 1, Hongfu Science Park, Changping District
-				Beijing  Beijing  100029
-				CN
-
-8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
-429000-429FFF     (base 16)		Abbott Diagnostics Technologies AS
-				P. O.  Box 6863 Rodeløkka
-				Oslo  Oslo  0504
-				NO
-
-8C-1F-64   (hex)		EOLANE
-911000-911FFF     (base 16)		EOLANE
-				ZI DU VAL D OMBREE
-				COMBREE  -  49520
-				FR
-
-8C-1F-64   (hex)		Huz Electronics Ltd
-BC2000-BC2FFF     (base 16)		Huz Electronics Ltd
-				10 Avondale road
-				Cwmbran  S Wales  NP44 1UD
-				GB
-
-8C-1F-64   (hex)		Microlynx Systems Ltd
-F3C000-F3CFFF     (base 16)		Microlynx Systems Ltd
-				#107, 1925 - 18 Ave NE
-				Calgary  AB  T2E 7T8
-				CA
-
-8C-1F-64   (hex)		ANDDORO LLC
-6F9000-6F9FFF     (base 16)		ANDDORO LLC
-				1430 Broadway NY 
-				New York  NY  10018
-				US
-
-8C-1F-64   (hex)		GIORDANO CONTROLS SPA
-807000-807FFF     (base 16)		GIORDANO CONTROLS SPA
-				VIA PARALLELA 2/4
-				VILLA BARTOLOMEA  IT  37049
-				IT
-
-8C-1F-64   (hex)		VEILUX INC.
-045000-045FFF     (base 16)		VEILUX INC.
-				802 GREENVIEW DR. STE 200
-				GRAND PRAIRIE    75050
-				US
-
-8C-1F-64   (hex)		Cleanwatts Digital, S.A.
-0E6000-0E6FFF     (base 16)		Cleanwatts Digital, S.A.
-				Ladeira da Paula, 6
-				Antanhol-Coimbra    3040-574
-				PT
-
-8C-1F-64   (hex)		FORSEE POWER
-0AF000-0AFFFF     (base 16)		FORSEE POWER
-				2 chemin du ruisseau
-				ECULLY    69130
-				FR
-
-8C-1F-64   (hex)		Sakura Seiki Co.,Ltd.
-28C000-28CFFF     (base 16)		Sakura Seiki Co.,Ltd.
-				75-5, Imojiya
-				Chikuma-city  Nagano Prefecture  387-0015
-				JP
-
-8C-1F-64   (hex)		Indefac company
-E64000-E64FFF     (base 16)		Indefac company
-				Ka-211, Whangmool ro 190, DongDaemoon Gu 
-				Seoul    02622
-				KR
-
-8C-1F-64   (hex)		Jide Car Rastreamento e Monitoramento LTDA
-22E000-22EFFF     (base 16)		Jide Car Rastreamento e Monitoramento LTDA
-				Rua Arcipreste Andrade 630
-				São Paulo  São Paulo  04268020
-				BR
-
-8C-1F-64   (hex)		Fingoti Limited
-CD9000-CD9FFF     (base 16)		Fingoti Limited
-				Barnam Ham Farm
-				Bickleigh, Plymouth  Devon  PL6 7AL
-				GB
-
-8C-1F-64   (hex)		Grace Design/Lunatec LLC
-FB7000-FB7FFF     (base 16)		Grace Design/Lunatec LLC
-				4689 Ute Highway
-				Longmont  CO  80503
-				US
-
-8C-1F-64   (hex)		Farmobile LLC
-672000-672FFF     (base 16)		Farmobile LLC
-				4001 W. 114th, Suite 300
-				Leawood  KS  66251
-				US
-
-8C-1F-64   (hex)		Real Digital
-3B2000-3B2FFF     (base 16)		Real Digital
-				655 SW James Pl
-				Pullman  WA  99163
-				US
-
-8C-1F-64   (hex)		Zhuhai Yunzhou Intelligence Technology Ltd.
-254000-254FFF     (base 16)		Zhuhai Yunzhou Intelligence Technology Ltd.
-				Room 311,312A,Floor 3,Heung Shan TechPort,No.3888 Qinglv North Road,Tangjiawan Town
-				Zhuhai  Guangdong  519000
-				CN
-
-8C-1F-64   (hex)		AIQuatro
-AC0000-AC0FFF     (base 16)		AIQuatro
-				143B
-				São Paulo  São Paulo  02433-070
-				BR
-
-8C-1F-64   (hex)		Active Research Limited
-0C0000-0C0FFF     (base 16)		Active Research Limited
-				21 Harwell Road
-				Poole  Dorset  BH17 0GE
-				GB
-
-8C-1F-64   (hex)		Beijing Redlink Information Technology Co., Ltd.
-D9A000-D9AFFF     (base 16)		Beijing Redlink Information Technology Co., Ltd.
-				Room 5, 2nd floor, Deshi Building, Haidian District, Beijing, China
-				Beijing    100085
-				CN
-
-8C-1F-64   (hex)		Sphere Com Services Pvt Ltd
-A6A000-A6AFFF     (base 16)		Sphere Com Services Pvt Ltd
-				Sphere Com Services Pvt Ltd, F-16-22, pankaj plaza, plot-no-7, Sector - 12, Dwarka, New Delhi - 110075, New Delhi
-				New Delhi  Delhi  110075
-				IN
-
-8C-1F-64   (hex)		suzhou yuecrown Electronic Technology Co.,LTD
-CCB000-CCBFFF     (base 16)		suzhou yuecrown Electronic Technology Co.,LTD
-				B6,no.1599,West Chengbei Road,Gusu District
-				suzhou  jiangsu  215000
-				CN
-
-8C-1F-64   (hex)		nke marine electronics
-817000-817FFF     (base 16)		nke marine electronics
-				6 rue gutenberg
-				Hennebont    56700
-				FR
-
-8C-1F-64   (hex)		GS Industrie-Elektronik GmbH
-6B9000-6B9FFF     (base 16)		GS Industrie-Elektronik GmbH
-				Porschestrasse 11
-				Leverkusen    51381
-				DE
-
-8C-1F-64   (hex)		Paragraf
-01A000-01AFFF     (base 16)		Paragraf
-				7-8 West Newlands
-				Somersham  Cambridgeshire  PE28 3EB
-				GB
-
-8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
-5AC000-5ACFFF     (base 16)		YUYAMA MFG Co.,Ltd
-				1-4-30
-				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
-				JP
-
-8C-1F-64   (hex)		Transdigital Pty Ltd
-7CF000-7CFFFF     (base 16)		Transdigital Pty Ltd
-				1/160 Stirling Highway
-				Nedlands  Western Australia  6009
-				AU
-
-8C-1F-64   (hex)		Talleres de Escoriaza SA
-F65000-F65FFF     (base 16)		Talleres de Escoriaza SA
-				Barrio Ventas, 35
-				Irun  Gipuzkoa  20305
-				ES
-
-8C-1F-64   (hex)		EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
-CDB000-CDBFFF     (base 16)		EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
-				1132 Budapest, Váci út 22-24. 3. em.)
-				Budapest    1132
-				HU
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-BBB000-BBBFFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		D-E-K GmbH & Co.KG
-219000-219FFF     (base 16)		D-E-K GmbH & Co.KG
-				Südfeld 9
-				Ascheberg / Herbern    58387
-				DE
-
-70-B3-D5   (hex)		AvMap srlu
-B4F000-B4FFFF     (base 16)		AvMap srlu
-				Viale Zaccagna 6
-				Carrara    54033
-				IT
-
-70-B3-D5   (hex)		Theatrixx Technologies, Inc.
-5DD000-5DDFFF     (base 16)		Theatrixx Technologies, Inc.
-				1655 Richardson
-				Montreal  QC  H3K3J7
-				CA
-
-70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
-6BC000-6BCFFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-70-B3-D5   (hex)		Adolf Nissen Elektrobau GmbH + Co. KG
-101000-101FFF     (base 16)		Adolf Nissen Elektrobau GmbH + Co. KG
-				Friedrichstädter Chaussee 4
-				Tönning    25832
-				DE
-
-70-B3-D5   (hex)		TinTec Co., Ltd.
-5AE000-5AEFFF     (base 16)		TinTec Co., Ltd.
-				#825 101, Magokseo-ro, Gangseo-gu
-				Seoul    07798
-				KR
-
-70-B3-D5   (hex)		Blue Storm Associates, Inc.
-9EA000-9EAFFF     (base 16)		Blue Storm Associates, Inc.
-				8605 Cross View
-				Fairfax Station    22039
-				US
-
-70-B3-D5   (hex)		Neuronal Innovation Control S.L.
-F0A000-F0AFFF     (base 16)		Neuronal Innovation Control S.L.
-				Anade Real 11
-				Oleiros  A Coruna  15179
-				ES
-
-70-B3-D5   (hex)		LECO Corporation
-684000-684FFF     (base 16)		LECO Corporation
-				3000 Lakeview Ave.
-				St. Joseph  null  49085
-				US
-
-70-B3-D5   (hex)		SPETSSTROY-SVYAZ Ltd
-A39000-A39FFF     (base 16)		SPETSSTROY-SVYAZ Ltd
-				13-26 B. Bulvarnaya St.
-				Taganrog  Rostov  347913
-				RU
-
-70-B3-D5   (hex)		AirBie AG
-0B1000-0B1FFF     (base 16)		AirBie AG
-				Kinkelstrasse 36
-				Zurich  Zurich  8006
-				CH
-
-70-B3-D5   (hex)		3DGence sp. z o.o.
-D15000-D15FFF     (base 16)		3DGence sp. z o.o.
-				Mickiewicza 29
-				Katowice  Slaskie  40-085
-				PL
-
-70-B3-D5   (hex)		ASHIDA Electronics Pvt. Ltd
-D39000-D39FFF     (base 16)		ASHIDA Electronics Pvt. Ltd
-				ASHIDA House Plot No A308 Road No. 21 Wagle Ind. Estate
-				Thane  Maharashtra  400604
-				IN
-
-70-B3-D5   (hex)		COMPAL ELECTRONICS, INC.
-26F000-26FFFF     (base 16)		COMPAL ELECTRONICS, INC.
-				No.500, Ruiguang Rd., Neihu District,
-				Taipei    11492
-				TW
-
-70-B3-D5   (hex)		ARKRAY, Inc. Kyoto Laboratory
-C4E000-C4EFFF     (base 16)		ARKRAY, Inc. Kyoto Laboratory
-				Yousuien-nai
-				Kyoto  Kamigyo-ku  602-0008
-				JP
-
-70-B3-D5   (hex)		EM Clarity Pty Ltd
-C7B000-C7BFFF     (base 16)		EM Clarity Pty Ltd
-				55 Curzon St
-				Tennyson  QLD  4105
-				AU
-
-70-B3-D5   (hex)		Smith Meter, Inc.
-414000-414FFF     (base 16)		Smith Meter, Inc.
-				1602 Wagner Ave.
-				Erie  PA  16514
-				US
-
-70-B3-D5   (hex)		Echo Ridge, LLC
-1AA000-1AAFFF     (base 16)		Echo Ridge, LLC
-				100 Carpenter Drive
-				Sterling  VA  20164
-				US
-
-70-B3-D5   (hex)		SURUGA SEIKI CO., LTD.
-9FE000-9FEFFF     (base 16)		SURUGA SEIKI CO., LTD.
-				505, Nanatsushinya, Shimizu-ku
-				Shizuoka-shi  Shizuoka  424-8566
-				JP
-
-70-B3-D5   (hex)		HIPODROMO DE AGUA CALIENTE, S.A. DE C.V.
-E56000-E56FFF     (base 16)		HIPODROMO DE AGUA CALIENTE, S.A. DE C.V.
-				BLVD. AGUA CALIENTE 12027
-				TIJUANA  BAJA CALIFORNIA  22420
-				MX
-
-70-B3-D5   (hex)		CHIeru., CO., Ltd. 
-783000-783FFF     (base 16)		CHIeru., CO., Ltd. 
-				Tennozu Central Tower 3F, 2-2-24, Higashi-shinagawa, Shinagawa-ku
-				tokyo    140-0002
-				JP
-
-70-B3-D5   (hex)		VITEC
-22B000-22BFFF     (base 16)		VITEC
-				99 rue pierre sémard
-				Chatillon  France  92320
-				FR
-
-70-B3-D5   (hex)		SLAT
-E81000-E81FFF     (base 16)		SLAT
-				11 Rue Jean-Elysée DUPUY
-				Champagne au Mont d'Or  Rhône  69543
-				FR
-
-70-B3-D5   (hex)		CertusNet Inc.
-C83000-C83FFF     (base 16)		CertusNet Inc.
-				No.699-22 Xuanwu Avenue, Xuanwu District 
-				Nanjing  Jiangsu  210042
-				CN
-
-70-B3-D5   (hex)		eumig industrie-TV GmbH.
-7FF000-7FFFFF     (base 16)		eumig industrie-TV GmbH.
-				Gewerbeparkstrasse 9
-				Anif  Salzburg  5081
-				AT
-
-70-B3-D5   (hex)		NORTHBOUND NETWORKS PTY. LTD.
-874000-874FFF     (base 16)		NORTHBOUND NETWORKS PTY. LTD.
-				14 Sommersby Road
-				Point Cook  Victoria  3030
-				AU
-
-70-B3-D5   (hex)		EAX Labs s.r.o.
-158000-158FFF     (base 16)		EAX Labs s.r.o.
-				Krizovnicka 86/6
-				Praha 1    11000
-				CZ
-
-70-B3-D5   (hex)		Liberty Reach
-3FB000-3FBFFF     (base 16)		Liberty Reach
-				3550 W Liberty Rd Suite 5
-				Ann Arbor  MI  48103
-				US
-
-70-B3-D5   (hex)		Ongisul Co.,Ltd.
-458000-458FFF     (base 16)		Ongisul Co.,Ltd.
-				Yangji Building 6F, 85, Seonghwang-ro
-				Dongnam-gu, Cheonan-si,   Chungcheongnam-do  31125
-				KR
-
-70-B3-D5   (hex)		VisioGreen
-F6C000-F6CFFF     (base 16)		VisioGreen
-				26, Avenue Winston Churchill
-				Louviers  27 Eure  27400
-				FR
-
-70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
-6CA000-6CAFFF     (base 16)		LINEAGE POWER PVT LTD.,
-				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
-				BANGALORE  KARNATAKA  560074
-				IN
-
-70-B3-D5   (hex)		Private
-FFE000-FFEFFF     (base 16)		Private
-
-70-B3-D5   (hex)		Alere Technologies AS
-70B000-70BFFF     (base 16)		Alere Technologies AS
-				Kjelsaasveien 161
-				Oslo  Oslo  0382
-				NO
-
-70-B3-D5   (hex)		Cursor Systems NV
-E38000-E38FFF     (base 16)		Cursor Systems NV
-				Drevendaal 14
-				Sint-Katelijne-Waver  Antwerpen  2860
-				BE
-
-70-B3-D5   (hex)		Innotas Elektronik GmbH
-C51000-C51FFF     (base 16)		Innotas Elektronik GmbH
-				Rathenaustr. 18a
-				Zittau    D-02763
-				DE
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-6E5000-6E5FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				     ,  Bergisch Gladbach  51465
-				DE
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-CC6000-CC6FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Yamamoto Works Ltd.
-DFB000-DFBFFF     (base 16)		Yamamoto Works Ltd.
-				3-1-3 Kashiwaza
-				Ageo  Saitama  3620075
-				JP
-
-70-B3-D5   (hex)		Prolan Zrt.
-C04000-C04FFF     (base 16)		Prolan Zrt.
-				Szentendrei út 1-3.
-				Budakalasz    2011
-				HU
-
-70-B3-D5   (hex)		Umano Medical Inc.
-E1E000-E1EFFF     (base 16)		Umano Medical Inc.
-				230, Boul. Nilus-Leclerc
-				L'Islet  Québec  G0R 2C0
-				CA
-
-70-B3-D5   (hex)		AEye, Inc.
-B52000-B52FFF     (base 16)		AEye, Inc.
-				5700 Stoneridge Drive, Suite 102
-				Pleasanton  CA  94588
-				US
-
-70-B3-D5   (hex)		EMDEP CENTRO TECNOLOGICO MEXICO
-83A000-83AFFF     (base 16)		EMDEP CENTRO TECNOLOGICO MEXICO
-				Circuito Corral de Piedras #36, Polígono Empresarial San Miguel
-				San Miguel de Allende  Guanajuato  37880
-				MX
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-42D000-42DFFF     (base 16)		RCH ITALIA SPA 
-				Via Cendon 39
-				SILEA  Treviso  31057
-				IT
-
-70-B3-D5   (hex)		Cetto Industries
-B73000-B73FFF     (base 16)		Cetto Industries
-				Dechenstr. 9-15
-				Ratingen    40878
-				DE
-
-70-B3-D5   (hex)		APE GmbH
-8C4000-8C4FFF     (base 16)		APE GmbH
-				Plauener Str. 163-165, Haus N
-				Berlin    13053
-				DE
-
-70-B3-D5   (hex)		Melecs EWS GmbH
-E8A000-E8AFFF     (base 16)		Melecs EWS GmbH
-				GZO-Technologiestrasse 1
-				Siegendorf     7011
-				AT
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-BB5000-BB5FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		iMAR Navigation GmbH
-A42000-A42FFF     (base 16)		iMAR Navigation GmbH
-				Im Reihersbruch 3
-				St. Ingbert  Saarland  66386
-				DE
-
-70-B3-D5   (hex)		Viper Innovations Ltd
-A45000-A45FFF     (base 16)		Viper Innovations Ltd
-				45 Martingale Way
-				Bristol    BS20 7AW
-				GB
-
-70-B3-D5   (hex)		SamabaNova Systems
-F29000-F29FFF     (base 16)		SamabaNova Systems
-				2100 Geng Rd #103
-				Palo Alto  CA  94303
-				US
-
-70-B3-D5   (hex)		LANSITEC TECHNOLOGY CO., LTD
-A4D000-A4DFFF     (base 16)		LANSITEC TECHNOLOGY CO., LTD
-				No. 8 Huashen Avenue
-				Nanjing  Jiangsu  210012
-				CN
-
-70-B3-D5   (hex)		ELINKGATE JSC
-37E000-37EFFF     (base 16)		ELINKGATE JSC
-				J4A Buu Long Dist 10
-				Ho Chi Minh  Vietnam  70350
-				VN
-
-70-B3-D5   (hex)		ICT BUSINESS GROUP of Humanrights Center for disabled people
-B20000-B20FFF     (base 16)		ICT BUSINESS GROUP of Humanrights Center for disabled people
-				#A1101-6,70 Gyeongin-ro 71-gil,
-				Seoul  Yeongdeungpo-gu  07286
-				KR
-
-70-B3-D5   (hex)		TIECHE Engineered Systems
-795000-795FFF     (base 16)		TIECHE Engineered Systems
-				940 Enchanted Way,Suite 104
-				Simi Valley  CA  93065
-				US
-
-70-B3-D5   (hex)		Multiple Access Communications Ltd
-558000-558FFF     (base 16)		Multiple Access Communications Ltd
-				Delta House, Southampton Science Park
-				Southampton  Hampshire  SO16 7NS
-				GB
-
-70-B3-D5   (hex)		FIRST RF Corporation
-7BC000-7BCFFF     (base 16)		FIRST RF Corporation
-				6150 Lookout Rd
-				Boulder  CO  80301
-				US
-
-70-B3-D5   (hex)		PROMOMED RUS LLC
-D3A000-D3AFFF     (base 16)		PROMOMED RUS LLC
-				UL. POCHTOVAYA M., D. 2/2,C.1,P.iK2 I, K.2
-				Moscow    129090
-				RU
-
-70-B3-D5   (hex)		Vega-Absolute
-0AD000-0ADFFF     (base 16)		Vega-Absolute
-				Kirova 113/1
-				Novosibirsk    630008
-				RU
-
-70-B3-D5   (hex)		Acrodea, Inc.
-4A8000-4A8FFF     (base 16)		Acrodea, Inc.
-				3F, Daisan Yamada Bldg., 22 Aizumi-cho
-				Shinjuku-ku  Tokyo  1600005
-				JP
-
-70-B3-D5   (hex)		MaNima Technologies BV
-DD9000-DD9FFF     (base 16)		MaNima Technologies BV
-				Hastelweg 260B
-				Eindhoven  Noord-Brabant  5652CN
-				NL
-
-70-B3-D5   (hex)		Integrotech sp. z o.o.
-6BA000-6BAFFF     (base 16)		Integrotech sp. z o.o.
-				plac Zwyciestwa 2 bud. D
-				Lodz  lodzkie  90-312
-				PL
-
-70-B3-D5   (hex)		Xitron
-388000-388FFF     (base 16)		Xitron
-				4750 Venture Drive
-				Ann Arbor  MI  48108
-				US
-
-70-B3-D5   (hex)		Private
-4F8000-4F8FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Becton Dickinson
-808000-808FFF     (base 16)		Becton Dickinson
-				7 Loveton Circle
-				Sparks  MD  21152
-				US
-
-70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
-275000-275FFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
-				Sector Foresta 43, local 26
-				Tres Cantos  Madrid  28760
-				ES
-
-70-B3-D5   (hex)		MECT SRL
-628000-628FFF     (base 16)		MECT SRL
-				VIA E. FERMI 57/59
-				ALPIGNANO  TORINO  10093
-				IT
-
-70-B3-D5   (hex)		SITA Messtechnik GmbH
-535000-535FFF     (base 16)		SITA Messtechnik GmbH
-				Gostritzer Str. 63
-				Dresden    01217
-				DE
-
-70-B3-D5   (hex)		KBS Industrieelektronik GmbH
-860000-860FFF     (base 16)		KBS Industrieelektronik GmbH
-				Burkheimer Str. 10
-				Freiburg    79111
-				DE
-
-70-B3-D5   (hex)		Aaronia AG
-B1A000-B1AFFF     (base 16)		Aaronia AG
-				Kauthenbergstr. 14
-				Strickscheid    54597
-				DE
-
-70-B3-D5   (hex)		MBio Diagnostics, Inc.
-57F000-57FFFF     (base 16)		MBio Diagnostics, Inc.
-				5603 Arapahoe Avenue, Suite 1
-				BOULDER  CO  80303
-				US
-
-70-B3-D5   (hex)		Acrodea, Inc.
-E79000-E79FFF     (base 16)		Acrodea, Inc.
-				3F, Daisan Yamada Bldg., 22 Aizumi-cho
-				Shinjuku-ku  Tokyo  1600005
-				JP
-
-70-B3-D5   (hex)		TEX COMPUTER SRL 
-1E1000-1E1FFF     (base 16)		TEX COMPUTER SRL 
-				VIA MERCADANTE 35
-				CATTOLICA   RIMINI   47841
-				IT
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-150000-150FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Magnamed Tecnologia Medica S/A
-648000-648FFF     (base 16)		Magnamed Tecnologia Medica S/A
-				Rua Des. Eliseu Guilherme, 292 6 Andar
-				Sao Paulo  SP  04004-030
-				BR
-
-70-B3-D5   (hex)		Traffic and Parking Control Co, Inc.
-0A7000-0A7FFF     (base 16)		Traffic and Parking Control Co, Inc.
-				5100 W. Brown Deer Rd.
-				Brown Deer  WI  53223
-				US
-
-70-B3-D5   (hex)		Shenzhen Luxurite Smart Home Ltd
-121000-121FFF     (base 16)		Shenzhen Luxurite Smart Home Ltd
-				13th Floor,  Kenuo Building, No. 7 road, TongGuan Street,  GuangMing
-				Shenzhen  GuangDong  518000
-				CN
-
-70-B3-D5   (hex)		Fiber Optika Technologies Pvt. Ltd. 
-47E000-47EFFF     (base 16)		Fiber Optika Technologies Pvt. Ltd. 
-				#38, 22nd Main, 14th Cross, Padmanabhanagar
-				Bangalore  Karnataka  560070
-				IN
-
-70-B3-D5   (hex)		AT-Automation Technology GmbH
-345000-345FFF     (base 16)		AT-Automation Technology GmbH
-				Hermann-Boessow-Str. 6-8
-				Bad Oldesloe    D-23843
-				DE
-
-70-B3-D5   (hex)		C-COM Satellite Systems Inc.
-D4F000-D4FFFF     (base 16)		C-COM Satellite Systems Inc.
-				2574 Sheffield Road
-				Ottawa  Ontario  K1B3V7
-				CA
-
-70-B3-D5   (hex)		OutdoorLink
-6A3000-6A3FFF     (base 16)		OutdoorLink
-				3058 Leeman Ferry Rd
-				Huntsville  AL  35801
-				US
-
-70-B3-D5   (hex)		Sasken Technologies Ltd
-BCD000-BCDFFF     (base 16)		Sasken Technologies Ltd
-				139/25, Amarjyothi Layout, Domlur
-				Bangalore    560071
-				IN
-
-70-B3-D5   (hex)		FAS Electronics (Fujian) Co.,LTD.
-B46000-B46FFF     (base 16)		FAS Electronics (Fujian) Co.,LTD.
-				#1 Building,Weihuang Industrial Zone, Qingkou Invest District
-				Minhou city, Fuzhou  Fujian  350119 
-				CN
-
-70-B3-D5   (hex)		Algodue Elettronica Srl
-89A000-89AFFF     (base 16)		Algodue Elettronica Srl
-				Via P. Gobetti, 16F
-				Maggiora  NO  28014
-				IT
-
-70-B3-D5   (hex)		HongSeok Ltd.
-C40000-C40FFF     (base 16)		HongSeok Ltd.
-				166, Osan-ro, Osan-myeon
-				Iksan-si  Jeollabuk-do  54670
-				KR
-
-70-B3-D5   (hex)		BP Lubricants USA, Inc.
-94E000-94EFFF     (base 16)		BP Lubricants USA, Inc.
-				201 North Webster
-				White Cloud  MI  49349
-				US
-
-70-B3-D5   (hex)		Algodue Elettronica Srl
-430000-430FFF     (base 16)		Algodue Elettronica Srl
-				Via Passerina 3/A
-				Fontaneto d'Agogna  Novara  28010
-				IT
-
-70-B3-D5   (hex)		SmartSafe
-A7B000-A7BFFF     (base 16)		SmartSafe
-				Avenida das Américas 3301 Bloco 01 Lojas 102/110
-				Rio de Janeiro  RJ  22631-003
-				BR
-
-70-B3-D5   (hex)		aelettronica group srl
-9C4000-9C4FFF     (base 16)		aelettronica group srl
-				via matteotti,22
-				gaggiano  milano  20083
-				IT
-
-70-B3-D5   (hex)		Changshu Ruite Electric Co.,Ltd.
-391000-391FFF     (base 16)		Changshu Ruite Electric Co.,Ltd.
-				No.2,Qingdao Road,Yushan High-tech Industrial Development Zone
-				Changshu  Jiangshu  215500
-				CN
-
-70-B3-D5   (hex)		 Zhiye Electronics Co., Ltd.
-8E2000-8E2FFF     (base 16)		 Zhiye Electronics Co., Ltd.
-				No. 1117, Pioneer Road, High-tech Zone
-				Jinan City  Shandong Province  250101
-				CN
-
-70-B3-D5   (hex)		Position Imaging
-A5D000-A5DFFF     (base 16)		Position Imaging
-				22 marin way unit 1
-				stratham  NH  03885
-				US
-
-70-B3-D5   (hex)		AixControl GmbH
-972000-972FFF     (base 16)		AixControl GmbH
-				Sonnenweg 15
-				Aachen  NRW  52070
-				DE
-
-70-B3-D5   (hex)		AVL DiTEST
-86B000-86BFFF     (base 16)		AVL DiTEST
-				Fahrzeugdiagnose GmbH
-				Graz  Steiermark  8020
-				AT
-
-70-B3-D5   (hex)		Graphcore Ltd
-1B3000-1B3FFF     (base 16)		Graphcore Ltd
-				11-19 Wine Street
-				Bristol    BS1 2PH
-				GB
-
-70-B3-D5   (hex)		Shenzhen Siera Technology Ltd
-1BD000-1BDFFF     (base 16)		Shenzhen Siera Technology Ltd
-				Room 2039, Shenhai Building, Wanzhong Village, Bulong Road, Minzhi, Longhua district,  City: Shenzhen
-				Shenzhen  Guangdong  518131
-				CN
-
-70-B3-D5   (hex)		SYS TEC electronic GmbH
-41B000-41BFFF     (base 16)		SYS TEC electronic GmbH
-				Am Windrad 2
-				Heinsdorfergrund     D-08468
-				DE
-
-70-B3-D5   (hex)		Sportsbeams Lighting, Inc.
-013000-013FFF     (base 16)		Sportsbeams Lighting, Inc.
-				1260 Pine Forest Cir
-				Round Rock  TX  78665
-				US
-
-70-B3-D5   (hex)		ANYROAM
-003000-003FFF     (base 16)		ANYROAM
-				2450 E.J. Chapman DR
-				Knoxville  TN  37996
-				US
-
-70-B3-D5   (hex)		Telensa Ltd
-56C000-56CFFF     (base 16)		Telensa Ltd
-				Iconix 3, London Road
-				Pampisford  Cambridgeshire  CB22 3EG
-				GB
-
-70-B3-D5   (hex)		Techno Broad,Inc
-512000-512FFF     (base 16)		Techno Broad,Inc
-				2-12-12, shin-chiba,chuo-ku,
-				chiba  chiba  2600031
-				JP
-
-70-B3-D5   (hex)		Open System Solutions Limited
-44B000-44BFFF     (base 16)		Open System Solutions Limited
-				Saltmakers House
-				Southampton  Hampshire  SO31 4NB
-				GB
-
-70-B3-D5   (hex)		NOA Co., Ltd.
-4EE000-4EEFFF     (base 16)		NOA Co., Ltd.
-				#201, 96, Seokho-ro, Sangrok-gu
-				Ansan-si  Gyeonggi-do  15579
-				KR
-
-70-B3-D5   (hex)		Secturion Systems
-CFE000-CFEFFF     (base 16)		Secturion Systems
-				520 N Marketplace Dr,
-				Centerville  UT  84014
-				US
-
-70-B3-D5   (hex)		SOFTLAND INDIA LTD
-C29000-C29FFF     (base 16)		SOFTLAND INDIA LTD
-				#14A, KINFRA SMALL INDUSTRIES PARK, MENAMKULAM, KAZHAKOOTTAM
-				TRIVANDRUM  KERALA  695586
-				IN
-
-70-B3-D5   (hex)		Sunstone Engineering
-2FF000-2FFFFF     (base 16)		Sunstone Engineering
-				1693 American Way Suite 5
-				Payson  UT  84651
-				US
-
-70-B3-D5   (hex)		FSR, INC.
-071000-071FFF     (base 16)		FSR, INC.
-				244 BERGEN BLVD
-				WOODLAND PARK  NJ  07424
-				US
-
-70-B3-D5   (hex)		eSys Solutions Sweden AB
-A22000-A22FFF     (base 16)		eSys Solutions Sweden AB
-				Sandsborgsvagen 50
-				Enskede    12233
-				SE
-
-70-B3-D5   (hex)		EvoLogics GmbH
-F9B000-F9BFFF     (base 16)		EvoLogics GmbH
-				Ackerstr. 76
-				Berlin    13355
-				DE
-
-70-B3-D5   (hex)		Franke Aquarotter GmbH
-BB6000-BB6FFF     (base 16)		Franke Aquarotter GmbH
-				Parkstraße 1-5
-				Ludwigsfelde    14974
-				DE
-
-70-B3-D5   (hex)		Bacsoft
-4B3000-4B3FFF     (base 16)		Bacsoft
-				Hazarhan 13
-				Kiryat Gat    8258112
-				IL
-
-70-B3-D5   (hex)		C21 Systems Ltd
-14B000-14BFFF     (base 16)		C21 Systems Ltd
-				Dunston Innovation Centre
-				Chesterfield  Derbyshire  S41 8NG
-				GB
-
-70-B3-D5   (hex)		Zaklad Energoelektroniki Twerd
-3FA000-3FAFFF     (base 16)		Zaklad Energoelektroniki Twerd
-				Aleksandrowska 28/30
-				Torun    87100
-				PL
-
-70-B3-D5   (hex)		CODESYSTEM Co.,Ltd
-FC0000-FC0FFF     (base 16)		CODESYSTEM Co.,Ltd
-				#705, Namsung Plaza(Ace9), 130 Digitalro, Keumchon-Gu
-				Seoul    08589
-				KR
-
-70-B3-D5   (hex)		Telefire
-2E8000-2E8FFF     (base 16)		Telefire
-				43 hasivim 
-				Petah Tikva  Israel  49000
-				IL
-
-70-B3-D5   (hex)		boekel
-AF8000-AF8FFF     (base 16)		boekel
-				855 pennsylvania blvd
-				feasterville  PA  19053
-				US
-
-70-B3-D5   (hex)		BlueBox Video Limited
-4C6000-4C6FFF     (base 16)		BlueBox Video Limited
-				Drysdale View, Fenny Bentley
-				Ashbourne    DE6 1LA
-				GB
-
-70-B3-D5   (hex)		DAVE SRL
-189000-189FFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-70-B3-D5   (hex)		Solar RIg Technologies
-293000-293FFF     (base 16)		Solar RIg Technologies
-				651 Garden Street
-				Carlstadt  NJ  07072
-				US
-
-70-B3-D5   (hex)		merkur Funksysteme AG
-B0F000-B0FFFF     (base 16)		merkur Funksysteme AG
-				Wassergrabe 14
-				Sursee    6210
-				CH
-
-70-B3-D5   (hex)		HERUTU ELECTRONICS CORPORATION
-E32000-E32FFF     (base 16)		HERUTU ELECTRONICS CORPORATION
-				62-1  Toyooka-cho, Kita-ku
-				Hamamatsu  Shizuoka  433-8103
-				JP
-
-70-B3-D5   (hex)		MG s.r.l.
-688000-688FFF     (base 16)		MG s.r.l.
-				via Monte Bianco, 1
-				Solbiate Olona  VA  21058
-				IT
-
-70-B3-D5   (hex)		DOLBY LABORATORIES, INC.
-3F5000-3F5FFF     (base 16)		DOLBY LABORATORIES, INC.
-				100 Potrero Avenue
-				San Francisco  CA  94103-4938
-				US
-
-70-B3-D5   (hex)		Koco Motion US LLC
-707000-707FFF     (base 16)		Koco Motion US LLC
-				335 Cochrane Circle
-				Morgan Hill  CA  95037
-				US
-
-70-B3-D5   (hex)		NAC Planning Co., Ltd.
-87F000-87FFFF     (base 16)		NAC Planning Co., Ltd.
-				NREG Akihabara Bldg 2F, 1-8-13, Sotokanda
-				Chiyoda-ku  Tokyo  101-0021
-				JP
-
-70-B3-D5   (hex)		Elektronik Art S.C.
-82D000-82DFFF     (base 16)		Elektronik Art S.C.
-				Mełgiewska 80
-				Lublin    20-234
-				PL
-
-70-B3-D5   (hex)		TEKVEL Ltd.
-1DC000-1DCFFF     (base 16)		TEKVEL Ltd.
-				Federativny prospekt, 5-1-5
-				Moscow  Moscow  111399
-				RU
-
-70-B3-D5   (hex)		TIAMA
-C4A000-C4AFFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-70-B3-D5   (hex)		Adeli
-E61000-E61FFF     (base 16)		Adeli
-				Route de Sandrans
-				Saint Trivier sur Moignans  Ain  01990
-				FR
-
-70-B3-D5   (hex)		Code Blue Corporation 
-A8D000-A8DFFF     (base 16)		Code Blue Corporation 
-				259 Hedcor Street
-				Holland  MI  49423
-				US
-
-70-B3-D5   (hex)		Smart Vision Lights
-BCB000-BCBFFF     (base 16)		Smart Vision Lights
-				2359 Holton Rd
-				Muskegon  MI  49445
-				US
-
-70-B3-D5   (hex)		SYS TEC electronic GmbH
-C64000-C64FFF     (base 16)		SYS TEC electronic GmbH
-				Am Windrad 2
-				Heinsdorfergrund     D-08468
-				DE
-
-70-B3-D5   (hex)		ATT Nussbaum Prüftechnik GmbH
-2A3000-2A3FFF     (base 16)		ATT Nussbaum Prüftechnik GmbH
-				Robert-Koch-Str. 35
-				Kehl-Auenheim    77694
-				DE
-
-70-B3-D5   (hex)		WINNERS DIGITAL CORPORATION
-8A2000-8A2FFF     (base 16)		WINNERS DIGITAL CORPORATION
-				3F, No. 4, Ln. 263, Chongyang Rd., Nangang Dist.,
-				Taipei City  Taiwan  115-73
-				TW
-
-70-B3-D5   (hex)		H3D, Inc.
-3F2000-3F2FFF     (base 16)		H3D, Inc.
-				812 Avis Drive
-				Ann Arbor  MI  48108
-				US
-
-70-B3-D5   (hex)		PT. Emsonic Indonesia
-360000-360FFF     (base 16)		PT. Emsonic Indonesia
-				Jl.Timor Blok E5, MM2100 Industrial Town Jatiwangi Cikarang Barat
-				Bekasi  Jawa Barat  17530
-				ID
-
-70-B3-D5   (hex)		IDEA SPA
-415000-415FFF     (base 16)		IDEA SPA
-				VIA PARALLELA 2/4
-				VILLA BARTOLOMEA  VERONA  37049
-				IT
-
-70-B3-D5   (hex)		RCD Radiokomunikace
-225000-225FFF     (base 16)		RCD Radiokomunikace
-				U Posty 26
-				Stare Hradiste    53352
-				CZ
-
-70-B3-D5   (hex)		Millennial Net, Inc.
-3B0000-3B0FFF     (base 16)		Millennial Net, Inc.
-				24 Hartwell Avenue
-				Lexington  MA  02421
-				US
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-758000-758FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		FSTUDIO CO LTD
-C0B000-C0BFFF     (base 16)		FSTUDIO CO LTD
-				Yanagawa Bldg. 2F 5-16-13
-				Watanabe-Dori Chuo-ku Fukuoka  Fukuoka  810-0004
-				JP
-
-70-B3-D5   (hex)		Den Automation
-0BF000-0BFFFF     (base 16)		Den Automation
-				Unit 6.05, Metropolitan Wharf
-				London    E1W 3SS
-				GB
-
-70-B3-D5   (hex)		EDCO Technology 1993 ltd
-B9C000-B9CFFF     (base 16)		EDCO Technology 1993 ltd
-				10 hamelacha street
-				Rosh haayin    4809118
-				IL
-
-70-B3-D5   (hex)		3D Printing Specialists
-CDF000-CDFFFF     (base 16)		3D Printing Specialists
-				7916 Grow Ln
-				Houston  TX  77040
-				US
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-17F000-17FFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbühl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		eumig industrie-TV GmbH.
-AA2000-AA2FFF     (base 16)		eumig industrie-TV GmbH.
-				Gewerbeparkstrasse 9
-				Anif  Salzburg  5081
-				AT
-
-70-B3-D5   (hex)		Xylon
-C1A000-C1AFFF     (base 16)		Xylon
-				Fallerovo setaliste 22
-				Zagreb    10000
-				HR
-
-70-B3-D5   (hex)		FUKUDA SANGYO CO., LTD.
-C9E000-C9EFFF     (base 16)		FUKUDA SANGYO CO., LTD.
-				Nazukari 996
-				Nagareyama  Chiba  2700145
-				JP
-
-70-B3-D5   (hex)		Rako Controls Ltd
-084000-084FFF     (base 16)		Rako Controls Ltd
-				Knight Road
-				Rochester  Kent  ME2 2AH
-				GB
-
-70-B3-D5   (hex)		Airthings
-53C000-53CFFF     (base 16)		Airthings
-				Wergelandsveien 7
-				Oslo    0167
-				NO
-
-70-B3-D5   (hex)		Sankyo Intec co.,ltd
-664000-664FFF     (base 16)		Sankyo Intec co.,ltd
-				Tokimata127
-				Iida  Nagano  3992563
-				JP
-
-70-B3-D5   (hex)		SOFTCREATE CORP.
-3C7000-3C7FFF     (base 16)		SOFTCREATE CORP.
-				2-15-1 Shibuya
-				Shibuya-ku  Tokyo  150-0002
-				JP
-
-70-B3-D5   (hex)		Tecsys do Brasil Industrial Ltda
-9AA000-9AAFFF     (base 16)		Tecsys do Brasil Industrial Ltda
-				Rua Oros, 146
-				Sao Jose dos Campos  SP  12237150
-				BR
-
-70-B3-D5   (hex)		PCSC
-515000-515FFF     (base 16)		PCSC
-				3541 Challenger St.
-				Torrance  CA  90503
-				US
-
-70-B3-D5   (hex)		CAPSYS
-A0A000-A0AFFF     (base 16)		CAPSYS
-				ZI Parc technologique des Fontaines
-				BERNIN    38190
-				FR
-
-70-B3-D5   (hex)		Akse srl
-5CC000-5CCFFF     (base 16)		Akse srl
-				Via Aldo Moro, 39
-				Reggio Emilia  Italy  42124
-				IT
-
-70-B3-D5   (hex)		INSEVIS GmbH
-508000-508FFF     (base 16)		INSEVIS GmbH
-				Am Weichselgarten 7
-				Erlangen    D-91058
-				DE
-
-70-B3-D5   (hex)		SoFiHa
-78F000-78FFFF     (base 16)		SoFiHa
-				Hagenower Strasee 73
-				Schwerin    19061
-				DE
-
-70-B3-D5   (hex)		Guangzhou Moblin Technology Co., Ltd. 
-E52000-E52FFF     (base 16)		Guangzhou Moblin Technology Co., Ltd. 
-				35 Tianshou Rd, Tianhe District
-				Guangzhou  Guangdong  510000
-				CN
-
-70-B3-D5   (hex)		Fink Telecom Services
-23B000-23BFFF     (base 16)		Fink Telecom Services
-				Paradieshofstrasse 101
-				Basel    4054
-				CH
-
-70-B3-D5   (hex)		Koizumi Lighting Technology Corp.
-19F000-19FFFF     (base 16)		Koizumi Lighting Technology Corp.
-				3-5-2-Chome
-				Higashinakamoto,Higashinari-ku,Osaka    537-0021
-				JP
-
-70-B3-D5   (hex)		Private
-389000-389FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Touchnet/OneCard
-478000-478FFF     (base 16)		Touchnet/OneCard
-				2115 Chapman Rd. Suite 159
-				Chattanooga  TN  37421
-				US
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-2A9000-2A9FFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		Hangzhou Youshi Industry Co., Ltd.
-4EC000-4ECFFF     (base 16)		Hangzhou Youshi Industry Co., Ltd.
-				Unit 501-38, Blue Sky Business Centre，GongShu District,
-				Hangzhou  Zhejiang  310000
-				CN
-
-70-B3-D5   (hex)		YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
-BCE000-BCEFFF     (base 16)		YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
-				1-17-1 Ohmorihigashi
-				Ohta-ku  Tokyo  143-0012
-				JP
-
-70-B3-D5   (hex)		MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
-A37000-A37FFF     (base 16)		MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
-				3-1, Asahi, Nishibiwajima-Cho
-				Kiyosu  Aichi  452-8561
-				JP
-
-70-B3-D5   (hex)		samwooeleco
-676000-676FFF     (base 16)		samwooeleco
-				A-1001,#119,GASAN-DIGITAL 1RO, GEUMCHEON-GU
-				SEOUL    153-773
-				KR
-
-70-B3-D5   (hex)		Suprock Technologies
-613000-613FFF     (base 16)		Suprock Technologies
-				45 Scott Hill Rd
-				Warren  NH  03279
-				US
-
-70-B3-D5   (hex)		GSP Sprachtechnologie GmbH
-2A4000-2A4FFF     (base 16)		GSP Sprachtechnologie GmbH
-				Teltowkanalstraße 1
-				Berlin    12247
-				DE
-
-70-B3-D5   (hex)		OnYield Inc Ltd
-D72000-D72FFF     (base 16)		OnYield Inc Ltd
-				814 Houston Centre, 63 Mody Road
-				Kowloon    TST East
-				HK
-
-70-B3-D5   (hex)		Eurotek Srl
-1D1000-1D1FFF     (base 16)		Eurotek Srl
-				Strada Comunale Savonesa, 9
-				Rivalta Scrivia  AL  15050
-				IT
-
-70-B3-D5   (hex)		Redcap Solutions s.r.o.
-027000-027FFF     (base 16)		Redcap Solutions s.r.o.
-				Na Viničních Horách 16
-				Praha 6    16000
-				CZ
-
-70-B3-D5   (hex)		Colorimetry Research, Inc
-10E000-10EFFF     (base 16)		Colorimetry Research, Inc
-				26612 Heirloom Place
-				Santa Clarita  CA  91350
-				US
-
-70-B3-D5   (hex)		LG Electronics
-257000-257FFF     (base 16)		LG Electronics
-				10, Magokjungang 10-ro, Gangseo-gu
-				Seoul    07796
-				KR
-
-70-B3-D5   (hex)		De Haardt bv
-CA2000-CA2FFF     (base 16)		De Haardt bv
-				Marithaime 6
-				Elst    6662 WD
-				NL
-
-70-B3-D5   (hex)		Exi Flow Measurement Ltd
-AAF000-AAFFFF     (base 16)		Exi Flow Measurement Ltd
-				Unit 22 Ford Lane business Park
-				Ford, ARUNDEL  West Sussex  BN164HP
-				GB
-
-70-B3-D5   (hex)		Resolution Systems
-D89000-D89FFF     (base 16)		Resolution Systems
-				1/214 Greenhill Rd
-				Eastwood  South Australia  6063
-				AU
-
-70-B3-D5   (hex)		Urbana Smart Solutions Pte Ltd
-224000-224FFF     (base 16)		Urbana Smart Solutions Pte Ltd
-				6 Eu Tong Sen Street #06-20 The Central
-				Singapore    059817
-				SG
-
-70-B3-D5   (hex)		Henrich Electronics Corporation
-436000-436FFF     (base 16)		Henrich Electronics Corporation
-				225 Deming Place
-				Westmont  IL  60559
-				US
-
-00-1B-C5   (hex)		Triax A/S
-08C000-08CFFF     (base 16)		Triax A/S
-				Bjornkaervej 3
-				Hornsyld  Denmark  8783
-				DK
-
-70-B3-D5   (hex)		Agramkow Fluid Systems A/S
-4AF000-4AFFFF     (base 16)		Agramkow Fluid Systems A/S
-				Augustenborg Landevej 19
-				Soenderborg  DK  6400
-				DK
-
-70-B3-D5   (hex)		Advice
-810000-810FFF     (base 16)		Advice
-				16 Atir Yeda St
-				Kfar Saba  Not applicable  4464321
-				IL
-
-70-B3-D5   (hex)		Uplevel Systems Inc
-A13000-A13FFF     (base 16)		Uplevel Systems Inc
-				6950 SW Hampton Street, Suite 308
-				Tigard  OR  97223
-				US
-
-70-B3-D5   (hex)		Cambridge Pixel
-023000-023FFF     (base 16)		Cambridge Pixel
-				New Cambridge House, Litlington
-				Royston  Herts  SG8 0SS
-				GB
-
-70-B3-D5   (hex)		SAICE
-FB7000-FB7FFF     (base 16)		SAICE
-				5-23-1
-				Shinagawa Higashi-Gotanda  Tokyo  141-0022
-				JP
-
-70-B3-D5   (hex)		Hermann Lümmen GmbH
-D4B000-D4BFFF     (base 16)		Hermann Lümmen GmbH
-				Biberweg 32
-				Troisdorf    53842
-				DE
-
-70-B3-D5   (hex)		Hi Tech Systems Ltd
-4B4000-4B4FFF     (base 16)		Hi Tech Systems Ltd
-				Holbrook House, Oakley Lane
-				Basingstoke  Hampshire  RG23 7JY
-				GB
-
-70-B3-D5   (hex)		PULLNET TECHNOLOGY, SA DE CV SSC1012302S73
-70A000-70AFFF     (base 16)		PULLNET TECHNOLOGY, SA DE CV SSC1012302S73
-				LUZ SAVIÑON 2007
-				BENITO JUAREZ  CIUDAD DE MEXICO  03020
-				MX
-
-70-B3-D5   (hex)		KOSMEK.Ltd
-BB9000-BB9FFF     (base 16)		KOSMEK.Ltd
-				Murodani 2-1-5, Nishi-ku
-				Kobe-City  Hyogo Pref.  6512241
-				JP
-
-70-B3-D5   (hex)		Jacarta Ltd
-09B000-09BFFF     (base 16)		Jacarta Ltd
-				Wagon Yard, London Road
-				Marlborough    SN8 1LH
-				GB
-
-70-B3-D5   (hex)		ST Aerospace Systems
-27F000-27FFFF     (base 16)		ST Aerospace Systems
-				505A Airport Road Paya Lebar
-				Singapore  Singapore  539934
-				SG
-
-70-B3-D5   (hex)		SoftLab-NSK
-555000-555FFF     (base 16)		SoftLab-NSK
-				Pr.Koptjuga 1
-				Novosibirsk    630090
-				RU
-
-70-B3-D5   (hex)		Nortek Global HVAC
-4D4000-4D4FFF     (base 16)		Nortek Global HVAC
-				Fens Pool Ave
-				Brierley Hill  West Midlands  DY5 1QA
-				GB
-
-70-B3-D5   (hex)		Tunstall A/S
-A17000-A17FFF     (base 16)		Tunstall A/S
-				Niels Bohrs vej 42
-				Stilling  Skanderborg  8660
-				DK
-
-00-1B-C5   (hex)		Vigor Electric Corp
-00E000-00EFFF     (base 16)		Vigor Electric Corp
-				No. 42-12. Pidao Village
-				New Taipei    251
-				TW
-
-70-B3-D5   (hex)		OptoPrecision GmbH
-4F9000-4F9FFF     (base 16)		OptoPrecision GmbH
-				Auf der Höhe 15
-				Bremen  Bremen  28357
-				DE
-
-70-B3-D5   (hex)		Richard Paul Russell Ltd
-98B000-98BFFF     (base 16)		Richard Paul Russell Ltd
-				The Lodge, Unit 1 Barnes Farm Business Park
-				Milford on Sea  Hampshire  SO41 0AP
-				GB
-
-70-B3-D5   (hex)		Avionica 
-611000-611FFF     (base 16)		Avionica 
-				9941 West Jessamine St
-				Miami   FL  33157 
-				US
-
-70-B3-D5   (hex)		Collini Dienstleistungs GmbH
-C67000-C67FFF     (base 16)		Collini Dienstleistungs GmbH
-				Schweizerstr. 59
-				Hohenems    A 6845
-				AT
-
-70-B3-D5   (hex)		Imecon Engineering SrL
-5E3000-5E3FFF     (base 16)		Imecon Engineering SrL
-				via Gerola 13/15
-				Fiesco  CR  26010
-				IT
-
-70-B3-D5   (hex)		ATBiS Co.,Ltd
-C2F000-C2FFFF     (base 16)		ATBiS Co.,Ltd
-				#1603 5th. Ace High-end Tower, 226 Gasan Digital 1-ro, Geumcheon-gu
-				Seoul    08502
-				KR
-
-70-B3-D5   (hex)		Shenzhen bayue software co. LTD
-784000-784FFF     (base 16)		Shenzhen bayue software co. LTD
-				B301, second phase of China merchants street technology building, nanshan district
-				ShenZhen    518000
-				CN
-
-70-B3-D5   (hex)		X-Laser LLC
-711000-711FFF     (base 16)		X-Laser LLC
-				9125 Whiskey Bottom Rd Ste A
-				Laurel  MD  20723
-				US
-
-70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S.L.
-777000-777FFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
-				Av. Onze de Setembre 19
-				Reus  Tarragona  43203
-				ES
-
-70-B3-D5   (hex)		Shenzhen INVT Electric Co.,Ltd
-1D0000-1D0FFF     (base 16)		Shenzhen INVT Electric Co.,Ltd
-				 INVT Bldg., GaoFa Scientific Park, Longjing, Nanshan, Shenzhen.
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		White Matter LLC
-368000-368FFF     (base 16)		White Matter LLC
-				999 3rd Ave 700
-				Seattle    98104
-				US
-
-70-B3-D5   (hex)		Critical Link LLC
-D5C000-D5CFFF     (base 16)		Critical Link LLC
-				6712 Brooklawn Parkway
-				Syracuse  null  13211
-				US
-
-70-B3-D5   (hex)		Secure Systems & Services
-717000-717FFF     (base 16)		Secure Systems & Services
-				24, Chemin de la Pouranque
-				F-13752  LES PENNES MIRABEAU  CS30084
-				FR
-
-70-B3-D5   (hex)		SYS TEC electronic GmbH
-7FD000-7FDFFF     (base 16)		SYS TEC electronic GmbH
-				Am Windrad 2
-				Heinsdorfergrund     D-08468
-				DE
-
-70-B3-D5   (hex)		JSC InformInvestGroup
-91F000-91FFFF     (base 16)		JSC InformInvestGroup
-				Moscow, Prospekt Andropova street, 18
-				Moscow  Moscow State  115432
-				RU
-
-70-B3-D5   (hex)		Autocom Diagnostic Partner AB
-98E000-98EFFF     (base 16)		Autocom Diagnostic Partner AB
-				Grafitvägen 23B
-				TROLLHÄTTAN    46138
-				SE
-
-70-B3-D5   (hex)		Ultimate Software
-03C000-03CFFF     (base 16)		Ultimate Software
-				2000 Ultimate Way
-				Weston  FL  33326
-				US
-
-70-B3-D5   (hex)		Microgate Srl
-7AB000-7ABFFF     (base 16)		Microgate Srl
-				Via Stradivari, 4
-				BOLZANO  BZ  39100
-				IT
-
-70-B3-D5   (hex)		Polynet Telecommunications Consulting and Contractor Ltd.
-877000-877FFF     (base 16)		Polynet Telecommunications Consulting and Contractor Ltd.
-				Montevideo street 3/b
-				Budapest    1037
-				HU
-
-70-B3-D5   (hex)		LOGICUBE INC
-999000-999FFF     (base 16)		LOGICUBE INC
-				19755 Nordhoff Place
-				Chatsworth  CA  91311
-				US
-
-70-B3-D5   (hex)		Schneider Electric Motion USA
-153000-153FFF     (base 16)		Schneider Electric Motion USA
-				370 N. Main St.
-				Marlborough  CT  06447
-				US
-
-70-B3-D5   (hex)		TOSEI ENGINEERING CORP.
-24B000-24BFFF     (base 16)		TOSEI ENGINEERING CORP.
-				 4-6, Higashi-Nakanuki-machi
-				Tsuchiura-city  Ibaraki  300-0006
-				JP
-
-70-B3-D5   (hex)		Korea Airports Corporation
-2CD000-2CDFFF     (base 16)		Korea Airports Corporation
-				78 Haneul-gil Gangseo-gu
-				SEOUL    07505
-				KR
-
-70-B3-D5   (hex)		DEK Technologies
-D22000-D22FFF     (base 16)		DEK Technologies
-				cnr Riggall Street and Maldon Street
-				Broadmeadows  Victoria  3047
-				AU
-
-70-B3-D5   (hex)		PHPower Srl
-A3F000-A3FFFF     (base 16)		PHPower Srl
-				Via Borgonuovo 27
-				Milano  MI  20121
-				IT
-
-70-B3-D5   (hex)		Saline Lectronics, Inc.
-246000-246FFF     (base 16)		Saline Lectronics, Inc.
-				710 N Maple Rd
-				Saline  MI  48176
-				US
-
-70-B3-D5   (hex)		Global Technical Systems
-19B000-19BFFF     (base 16)		Global Technical Systems
-				784 Lynnhaven Parkway
-				Virginia Beach  VA  23452
-				US
-
-70-B3-D5   (hex)		Cannex Technology Inc.
-CD1000-CD1FFF     (base 16)		Cannex Technology Inc.
-				No.182, Sec.2, Yuanlu Rd.
-				Sihu  Changhua  51449
-				TW
-
-70-B3-D5   (hex)		Intecom
-CC5000-CC5FFF     (base 16)		Intecom
-				ul.Hrustalnaya d11.korp2
-				Saint-Petersburg  SPb  192019
-				RU
-
-70-B3-D5   (hex)		Certus Operations Ltd
-4B2000-4B2FFF     (base 16)		Certus Operations Ltd
-				Dragonara Business Centre, 5th Floor, Dragonara Road c/w Ball Street
-				St Julians    STJ 3141
-				MT
-
-70-B3-D5   (hex)		NETWAYS GmbH
-73D000-73DFFF     (base 16)		NETWAYS GmbH
-				Deutschherrnstraße 15
-				Nürnberg    90429 
-				DE
-
-70-B3-D5   (hex)		Flirtey Inc
-2AA000-2AAFFF     (base 16)		Flirtey Inc
-				P O BOX 7315
-				Reno  NV  89510
-				US
-
-70-B3-D5   (hex)		Spectrum Techniques, LLC
-953000-953FFF     (base 16)		Spectrum Techniques, LLC
-				106 Union Valley Rd
-				Oak Ridge  TN  37930
-				US
-
-70-B3-D5   (hex)		Southern Tier Technologies
-9D5000-9D5FFF     (base 16)		Southern Tier Technologies
-				307 CHAUMONT DR
-				ENDWELL  NY  13760-5831
-				US
-
-70-B3-D5   (hex)		The Dini Group, La Jolla inc.
-678000-678FFF     (base 16)		The Dini Group, La Jolla inc.
-				7469 Draper Ave.
-				La Jolla  CA  92037
-				US
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-0DE000-0DEFFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		SureFlap Ltd
-F9C000-F9CFFF     (base 16)		SureFlap Ltd
-				7 The Irwin Centre, Scotland Road, Dry Drayton
-				Cambridge  Cambridgeshire  CB23 8AR
-				GB
-
-70-B3-D5   (hex)		Enlaps
-F75000-F75FFF     (base 16)		Enlaps
-				29 chemin du vieux chene, Tarmac
-				MEYLAN    38240
-				FR
-
-70-B3-D5   (hex)		megatec electronic GmbH
-8A8000-8A8FFF     (base 16)		megatec electronic GmbH
-				Lehenhammer 14
-				Etzelwang  Bayern  92268
-				DE
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-432000-432FFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Service Plus LLC
-169000-169FFF     (base 16)		Service Plus LLC
-				Kotlyakovskaya str. 5
-				Moscow    115201
-				RU
-
-70-B3-D5   (hex)		Omwave
-B13000-B13FFF     (base 16)		Omwave
-				34 bis rue d'Estienne d'Orves
-				Montrouge  Ile de France  92120
-				FR
-
-70-B3-D5   (hex)		Radixon s.r.o.
-2F4000-2F4FFF     (base 16)		Radixon s.r.o.
-				Opatska 19
-				Kosice-Krasna    04018
-				SK
-
-70-B3-D5   (hex)		GSF Corporation Pte Ltd
-B98000-B98FFF     (base 16)		GSF Corporation Pte Ltd
-				60 Paya Lebar Road
-				# 12-05 Paya Lebar Square    409051
-				SG
-
-70-B3-D5   (hex)		Hella Gutmann Solutions GmbH 
-5B8000-5B8FFF     (base 16)		Hella Gutmann Solutions GmbH 
-				Am Krebsbach 2
-				Ihringen   Baden Württemberg  79241
-				DE
-
-70-B3-D5   (hex)		HKW-Elektronik GmbH
-035000-035FFF     (base 16)		HKW-Elektronik GmbH
-				Eisenacher Str. 42b
-				Wutha-Farnroda  Thüringen  99848
-				DE
-
-70-B3-D5   (hex)		OOO NPP Mars-Energo
-374000-374FFF     (base 16)		OOO NPP Mars-Energo
-				199034  V.O.  13  liniya,  6-8,  lit.A, office 40H,
-				Saint-Petersburg    199034
-				RU
-
-70-B3-D5   (hex)		CRDE
-381000-381FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		RFL Electronics, Inc.
-FA6000-FA6FFF     (base 16)		RFL Electronics, Inc.
-				353 Powerville Road
-				Booton Twp.    07005
-				US
-
-70-B3-D5   (hex)		Fiberbase
-30D000-30DFFF     (base 16)		Fiberbase
-				#516 Complex-dong Heongduk IT Valley, Heonduk 1ro 13, Giheong-gu
-				Young-in  Gyeong-gi  16954
-				KR
-
-70-B3-D5   (hex)		Vensi, Inc.
-379000-379FFF     (base 16)		Vensi, Inc.
-				113 McHenry Rd #191
-				Buffalo Grove  IL  60089
-				US
-
-70-B3-D5   (hex)		AeroVision Avionics, Inc.
-77B000-77BFFF     (base 16)		AeroVision Avionics, Inc.
-				2F, No.30, R&D. II, Science Park,
-				Hsinchu City  Taiwan  30076
-				TW
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-C14000-C14FFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		Matsuhisa Corporation
-F42000-F42FFF     (base 16)		Matsuhisa Corporation
-				55-20 Katayama-cho
-				Fukui-shi    910-3611
-				JP
-
-70-B3-D5   (hex)		Daavlin
-F24000-F24FFF     (base 16)		Daavlin
-				205 W Bement St.
-				Bryan  OH  43506
-				US
-
-70-B3-D5   (hex)		Twoway Communications, Inc.
-FBC000-FBCFFF     (base 16)		Twoway Communications, Inc.
-				41 Wu Kung 6 Rd., New Taipei Industrial Park, New Taipei City,24891,Taiwan,R.O.C.
-				New Taipei city  Taipei  24891
-				TW
-
-70-B3-D5   (hex)		Axess AG
-413000-413FFF     (base 16)		Axess AG
-				Sonystrasse 18
-				Anif  Salzburg  5081
-				AT
-
-70-B3-D5   (hex)		Intra Corporation
-DDB000-DDBFFF     (base 16)		Intra Corporation
-				885 Manufacturers Dr.
-				Westland  MI  48186
-				US
-
-70-B3-D5   (hex)		Network Additions
-8EE000-8EEFFF     (base 16)		Network Additions
-				2-14-10 Minamiyana
-				Hadano  Kanagawa  2570003
-				JP
-
-70-B3-D5   (hex)		Newtec A/S
-245000-245FFF     (base 16)		Newtec A/S
-				Stærmosegårdsvej  18
-				Odense SV  Region Syd  5230
-				DK
-
-70-B3-D5   (hex)		Orion Technologies, LLC
-C6E000-C6EFFF     (base 16)		Orion Technologies, LLC
-				12605 Challenger Pkwy, Ste 130
-				ORLANDO  FL  32826
-				US
-
-70-B3-D5   (hex)		GP Systems GmbH
-D6C000-D6CFFF     (base 16)		GP Systems GmbH
-				Ochshäuser Str. 45
-				Kassel    34123
-				DE
-
-70-B3-D5   (hex)		The Morey Corporation
-D4D000-D4DFFF     (base 16)		The Morey Corporation
-				100 Morey Drive
-				Woodridge  IL  60517
-				US
-
-70-B3-D5   (hex)		Rollogo Limited
-C8C000-C8CFFF     (base 16)		Rollogo Limited
-				22/F., Far East Finance Centre, 16 Harcourt Road, Admiralty,
-				Hong Kong    000000
-				HK
-
-70-B3-D5   (hex)		DAVE SRL
-59C000-59CFFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-70-B3-D5   (hex)		Quantum Design Inc.
-84D000-84DFFF     (base 16)		Quantum Design Inc.
-				10307 Pacific Center Court
-				San Diego  CA  92121
-				US
-
-70-B3-D5   (hex)		DTRON Communications (Pty) Ltd
-90F000-90FFFF     (base 16)		DTRON Communications (Pty) Ltd
-				A18 Bellville Business Park, cnr Mike Pienaar blvd & Voortrekker road
-				Bellville  Western Cape  7530
-				ZA
-
-70-B3-D5   (hex)		Rapiscan Systems
-CC9000-CC9FFF     (base 16)		Rapiscan Systems
-				14000 Mead Street
-				Longmont   CO  80504
-				US
-
-70-B3-D5   (hex)		TEX COMPUTER SRL 
-108000-108FFF     (base 16)		TEX COMPUTER SRL 
-				VIA MERCADANTE 35
-				CATTOLICA   RIMINI   47841
-				IT
-
-70-B3-D5   (hex)		ASE GmbH
-47F000-47FFFF     (base 16)		ASE GmbH
-				Lußhardtstraße 6
-				Bruchsal    76646
-				DE
-
-70-B3-D5   (hex)		Fraunhofer-Institut IIS
-677000-677FFF     (base 16)		Fraunhofer-Institut IIS
-				Am Wolfsmantel 33
-				Erlangen  Bayern  91058
-				DE
-
-70-B3-D5   (hex)		DACOM West GmbH
-1B6000-1B6FFF     (base 16)		DACOM West GmbH
-				Schallbruch 19-21
-				Haan    42781
-				DE
-
-70-B3-D5   (hex)		Zamir Recognition Systems Ltd.
-D92000-D92FFF     (base 16)		Zamir Recognition Systems Ltd.
-				Manachat Tech Park 1/22
-				Jerusalem    96951
-				IL
-
-70-B3-D5   (hex)		AVER
-0B4000-0B4FFF     (base 16)		AVER
-				13000 Danielson St Ste A 
-				Poway  CA  92064
-				US
-
-70-B3-D5   (hex)		​ASUNG TECHNO CO.,Ltd
-8AC000-8ACFFF     (base 16)		​ASUNG TECHNO CO.,Ltd
-				462, Dogok-ro, Songpa-gu, Seoul, Republic of Korea
-				SEOUL  Repubilc of KOREA  05574
-				KR
-
-70-B3-D5   (hex)		Fracarro srl
-211000-211FFF     (base 16)		Fracarro srl
-				via Cazzaro 3
-				Castelfranco Veneto    31033
-				IT
-
-70-B3-D5   (hex)		MSB Elektronik und Gerätebau GmbH
-96D000-96DFFF     (base 16)		MSB Elektronik und Gerätebau GmbH
-				Hofwiesenstr. 23
-				Crailsheim    74564
-				DE
-
-70-B3-D5   (hex)		VITEC
-127000-127FFF     (base 16)		VITEC
-				99, rue Pierre Semard
-				CHATILLON    92320
-				FR
-
-70-B3-D5   (hex)		WOW System
-6A6000-6A6FFF     (base 16)		WOW System
-				#411, MEGA Center, 124, Sagimakgol-ro, Jungwon-gu
-				Seongnam-si    13207
-				KR
-
-70-B3-D5   (hex)		Eurotronik Kranj d.o.o.
-805000-805FFF     (base 16)		Eurotronik Kranj d.o.o.
-				Stirnova 8
-				Kranj    4000
-				SI
-
-70-B3-D5   (hex)		Sanko-sha,inc.
-7E0000-7E0FFF     (base 16)		Sanko-sha,inc.
-				3-9-12 ChuorinkanNishi
-				Yamato-shi  Kanagawa-Prefecture  242-0008
-				JP
-
-70-B3-D5   (hex)		Mannkind Corporation
-7E8000-7E8FFF     (base 16)		Mannkind Corporation
-				1 Casper Street
-				Danbury  CT  06810
-				US
-
-70-B3-D5   (hex)		BTG Instruments AB
-C49000-C49FFF     (base 16)		BTG Instruments AB
-				Industrigatan 1-3
-				Saffle  Varmland  66132
-				SE
-
-70-B3-D5   (hex)		Luxar Tech, Inc.
-653000-653FFF     (base 16)		Luxar Tech, Inc.
-				42840 Christy St, Suite 101
-				Fremont  CA  94538
-				US
-
-70-B3-D5   (hex)		WIXCON Co., Ltd
-2B1000-2B1FFF     (base 16)		WIXCON Co., Ltd
-				Room 803, 77, Seongsuil-ro, Seongdong-gu
-				SEOUL    04790
-				KR
-
-70-B3-D5   (hex)		HKC Limited
-F1F000-F1FFFF     (base 16)		HKC Limited
-				Parkway Business Centre
-				Ballymount  Dublin  Dublin 24
-				IE
-
-70-B3-D5   (hex)		Gogo BA 
-002000-002FFF     (base 16)		Gogo BA 
-				105 Edgeview Drive
-				Broomfield  CO  80021
-				US
-
-70-B3-D5   (hex)		Dataspeed Inc
-215000-215FFF     (base 16)		Dataspeed Inc
-				1935 Enterprise Dr
-				Rochester Hills  MI  48309
-				US
-
-70-B3-D5   (hex)		neQis
-10F000-10FFFF     (base 16)		neQis
-				Star House, Star Hill
-				Rochester  Kent  ME11UX
-				GB
-
-70-B3-D5   (hex)		U-Tech
-06B000-06BFFF     (base 16)		U-Tech
-				#306 Building 25, Simin-daero 284 beon-gil, Dongan-gu
-				Anyang-si  Gyeonggi-do  14067
-				KR
-
-70-B3-D5   (hex)		Ravelin Ltd
-022000-022FFF     (base 16)		Ravelin Ltd
-				Prof. Popova str 4
-				St Petersburg  Russia  197022
-				RU
-
-70-B3-D5   (hex)		CRDE
-14C000-14CFFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		Modtronix Engineering
-90D000-90DFFF     (base 16)		Modtronix Engineering
-				Boden PL
-				Castle Hill  NSW  2154
-				AU
-
-70-B3-D5   (hex)		Stahl GmbH
-DCE000-DCEFFF     (base 16)		Stahl GmbH
-				Wilhelm-Maybach-Str. 3
-				Crailsheim    74564
-				DE
-
-70-B3-D5   (hex)		Hiquel Elektronik- und Anlagenbau GmbH
-22C000-22CFFF     (base 16)		Hiquel Elektronik- und Anlagenbau GmbH
-				Bairisch Koelldorf 266
-				Bad Gleichenberg    8344
-				AT
-
-70-B3-D5   (hex)		Overspeed SARL
-9C6000-9C6FFF     (base 16)		Overspeed SARL
-				53 bis boulevard des Belges
-				Rouen    76000
-				FR
-
-70-B3-D5   (hex)		GY-FX SAS
-4BE000-4BEFFF     (base 16)		GY-FX SAS
-				38 rue du Botrel
-				35690  Brittany  Acigne
-				FR
-
-70-B3-D5   (hex)		TMSI LLC
-745000-745FFF     (base 16)		TMSI LLC
-				9073 Pleasantwood Ave NW
-				North Canton  OH  44720
-				US
-
-70-B3-D5   (hex)		SmartNodes
-209000-209FFF     (base 16)		SmartNodes
-				Quai Banning 6
-				Liège  Liège  4000
-				BE
-
-70-B3-D5   (hex)		Incoil Induktion AB
-F12000-F12FFF     (base 16)		Incoil Induktion AB
-				Brandthovdagatan 29
-				Vasteras  Vastmanland  72135
-				SE
-
-70-B3-D5   (hex)		KOMS Co.,Ltd.
-05D000-05DFFF     (base 16)		KOMS Co.,Ltd.
-				1059 Kitakata
-				Iida  Nagano  395-0151
-				JP
-
-70-B3-D5   (hex)		Rail Power Systems GmbH
-7B2000-7B2FFF     (base 16)		Rail Power Systems GmbH
-				Frankfurter Straße 111
-				Offenbach am Main  Hessen  63067
-				DE
-
-70-B3-D5   (hex)		BÄR Bahnsicherung AG
-348000-348FFF     (base 16)		BÄR Bahnsicherung AG
-				Luppmenstrasse 3
-				Fehraltorf     8320
-				CH
-
-70-B3-D5   (hex)		Sensile Technologies SA
-AD1000-AD1FFF     (base 16)		Sensile Technologies SA
-				Rue de Lausanne 45
-				Morges  VD  1110
-				CH
-
-70-B3-D5   (hex)		Miravue
-92A000-92AFFF     (base 16)		Miravue
-				75 E 400 S STE 302
-				Salt Lake City  UT  84111
-				US
-
-70-B3-D5   (hex)		OCEAN
-16C000-16CFFF     (base 16)		OCEAN
-				30 rue Mozart
-				CLICHY    92110
-				FR
-
-70-B3-D5   (hex)		Idyllic Engineering Pte Ltd
-D58000-D58FFF     (base 16)		Idyllic Engineering Pte Ltd
-				Blk 62B, Strathmore Ave, #04-58
-				Singapore  Singapore  143062
-				SG
-
-70-B3-D5   (hex)		Computerwise, Inc.
-CEA000-CEAFFF     (base 16)		Computerwise, Inc.
-				302 N. Winchester
-				Olathe  KS  66062
-				US
-
-70-B3-D5   (hex)		Next Sight srl
-511000-511FFF     (base 16)		Next Sight srl
-				via Roveredo 20/b
-				pordenone  Italy  33170
-				IT
-
-70-B3-D5   (hex)		Embedded Systems Lukasz Panasiuk
-A18000-A18FFF     (base 16)		Embedded Systems Lukasz Panasiuk
-				Wielkopolska 2A/9
-				Kolobrzeg    78100
-				PL
-
-70-B3-D5   (hex)		Dot System S.r.l.
-954000-954FFF     (base 16)		Dot System S.r.l.
-				Via Marco Biagi 34
-				Lomagna  Lecco  23871
-				IT
-
-70-B3-D5   (hex)		LG Electronics
-88D000-88DFFF     (base 16)		LG Electronics
-				2621, Nuambusunhwan-ro, Gangnam-gu,
-				Seoul    135-860
-				KR
-
-70-B3-D5   (hex)		Brinkmann Audio GmbH
-1D4000-1D4FFF     (base 16)		Brinkmann Audio GmbH
-				Im Himmelreich 13
-				Achberg    88147
-				DE
-
-70-B3-D5   (hex)		Profcon AB
-86E000-86EFFF     (base 16)		Profcon AB
-				Victor Hasselblads gata 9
-				Västra Frölunda    42131
-				SE
-
-70-B3-D5   (hex)		Marioff Corporation Oy
-222000-222FFF     (base 16)		Marioff Corporation Oy
-				Äyritie 24
-				Vantaa    01510
-				FI
-
-70-B3-D5   (hex)		LAMTEC Meß- und Regeltechnik für Feuerungen GmbH & Co. KG
-5BC000-5BCFFF     (base 16)		LAMTEC Meß- und Regeltechnik für Feuerungen GmbH & Co. KG
-				Wiesenstraße 6
-				Walldorf  Baden Württemberg  69190
-				DE
-
-70-B3-D5   (hex)		Petring Energietechnik GmbH
-CF5000-CF5FFF     (base 16)		Petring Energietechnik GmbH
-				Paderborner Str.76
-				Schlangen  Deutschland  33189
-				DE
-
-70-B3-D5   (hex)		iRF - Intelligent RF Solutions, LLC
-21D000-21DFFF     (base 16)		iRF - Intelligent RF Solutions, LLC
-				14600 York Road, Suite B
-				Sparks  MD  21152
-				US
-
-70-B3-D5   (hex)		Gilbarco Veeder-Root  ‎
-269000-269FFF     (base 16)		Gilbarco Veeder-Root  ‎
-				Level 1, 20 Highgate Street
-				Auburn  NSW  2144
-				AU
-
-70-B3-D5   (hex)		Aeryon Labs Inc
-482000-482FFF     (base 16)		Aeryon Labs Inc
-				575 Kumpf Dr
-				Waterloo  ON  N2V 1K3
-				CA
-
-70-B3-D5   (hex)		Rudy Tellert
-8EC000-8ECFFF     (base 16)		Rudy Tellert
-				Dorfstr. 15
-				Werneck    97440
-				DE
-
-70-B3-D5   (hex)		SenSys (Design Electronics Ltd)
-FBF000-FBFFFF     (base 16)		SenSys (Design Electronics Ltd)
-				71 Redwood Valley Lane RD1
-				Richmond  Tasman  7081
-				NZ
-
-70-B3-D5   (hex)		WARECUBE,INC
-4A9000-4A9FFF     (base 16)		WARECUBE,INC
-				3F, 119-59, Sasadong
-				Ansansi  Gyunggido  426-220
-				KR
-
-70-B3-D5   (hex)		L-3 communications ComCept Division
-E09000-E09FFF     (base 16)		L-3 communications ComCept Division
-				1700 Science Place
-				Rockwall   TX  75032
-				US
-
-70-B3-D5   (hex)		CEA Technologies Pty Ltd
-68E000-68EFFF     (base 16)		CEA Technologies Pty Ltd
-				59-65 Gladstone St
-				Fyshwick  ACT  2609
-				AU
-
-70-B3-D5   (hex)		KST technology
-7F4000-7F4FFF     (base 16)		KST technology
-				164-1, KST b/d., Bangi-dong, songpa-gu
-				SEOUL  N/A  138-050
-				KR
-
-70-B3-D5   (hex)		TELECOM SANTE
-272000-272FFF     (base 16)		TELECOM SANTE
-				8 SQUARE DU CHENE GERMAIN
-				CESSON SEVIGNE    35510
-				FR
-
-70-B3-D5   (hex)		Henri Systems Holland bv
-122000-122FFF     (base 16)		Henri Systems Holland bv
-				Scheepmalersstraat 33
-				Zwijndrecht  ZH  3334 KG
-				NL
-
-70-B3-D5   (hex)		ELSAG
-1C5000-1C5FFF     (base 16)		ELSAG
-				205H Creek Ridge ROad
-				Greensboro  NC  27406
-				US
-
-70-B3-D5   (hex)		ModuSystems, Inc
-260000-260FFF     (base 16)		ModuSystems, Inc
-				780 Montague Expressway Suite 203
-				San Jose  CA  95131
-				US
-
-70-B3-D5   (hex)		Invertek Drives Ltd
-939000-939FFF     (base 16)		Invertek Drives Ltd
-				Offa's Dyke Business Park 
-				Welshpool  Powys  SY21 8JF
-				GB
-
-70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S.L.
-03D000-03DFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
-				Av. Onze de Setembre 19
-				Reus  Tarragona  43203
-				ES
-
-70-B3-D5   (hex)		CMC Industrial Electronics Ltd
-18C000-18CFFF     (base 16)		CMC Industrial Electronics Ltd
-				305-3602 Gilmore Way
-				Burnaby  BC  v5g4w9
-				CA
-
-70-B3-D5   (hex)		BIZERBA LUCEO
-E1A000-E1AFFF     (base 16)		BIZERBA LUCEO
-				16 RUE LAENNEC
-				VERN SUR SEICHE    35772
-				FR
-
-70-B3-D5   (hex)		Allied Data Systems
-8CA000-8CAFFF     (base 16)		Allied Data Systems
-				67/176 South Creek Road
-				Cromer  NSW  2099
-				AU
-
-70-B3-D5   (hex)		Vigilate srl
-B0C000-B0CFFF     (base 16)		Vigilate srl
-				Via Napoleonica, 6
-				Rezzato  BS  25086
-				IT
-
-70-B3-D5   (hex)		eeas gmbh
-86C000-86CFFF     (base 16)		eeas gmbh
-				Bachstrasse 44
-				Schwertberg    4311
-				AT
-
-70-B3-D5   (hex)		Asymmetric Technologies
-9F8000-9F8FFF     (base 16)		Asymmetric Technologies
-				1395 Grandview Avenue, Suite 3
-				Columbus  OH  43212
-				US
-
-70-B3-D5   (hex)		CISTECH Solutions
-C3D000-C3DFFF     (base 16)		CISTECH Solutions
-				170 JAMES ST
-				TOOWOOMBA  QLD  4350
-				AU
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-2EC000-2ECFFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-32A000-32AFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-70-B3-D5   (hex)		INFO CREATIVE (HK) LTD
-24D000-24DFFF     (base 16)		INFO CREATIVE (HK) LTD
-				44A 12/F,LUENTAK BLD.,JORDAN RD.,KOWLOON
-				HONGKONG    999077
-				HK
-
-70-B3-D5   (hex)		FIBERNET LTD
-041000-041FFF     (base 16)		FIBERNET LTD
-				9 Hakidma st. Hi-Tech City Park,
-				Yokneam  Non-US/Canada  2069206
-				IL
-
-70-B3-D5   (hex)		Electroimpact, Inc.
-D9D000-D9DFFF     (base 16)		Electroimpact, Inc.
-				4413 Chennault Beach Rd
-				Mukilteo  WA  98275
-				US
-
-70-B3-D5   (hex)		Centuryarks Ltd.,
-52C000-52CFFF     (base 16)		Centuryarks Ltd.,
-				 3-13-1,Nishiazabu
-				Minato-ku  Tokyo  106-0031
-				JP
-
-70-B3-D5   (hex)		EMSCAN Corp. 
-DD8000-DD8FFF     (base 16)		EMSCAN Corp. 
-				1 - 1715 27 ave NE
-				Calgary  Alberta  T2E 7E1
-				CA
-
-70-B3-D5   (hex)		Septentrio NV
-87E000-87EFFF     (base 16)		Septentrio NV
-				Interleuvenlaan 15i
-				Leuven    3001
-				BE
-
-70-B3-D5   (hex)		S-I-C
-73B000-73BFFF     (base 16)		S-I-C
-				Schornbacher Weg 37-8
-				Schorndorf  BW  73614
-				DE
-
-70-B3-D5   (hex)		ELECTRONIC SYSTEMS DESIGN SPRL
-DFC000-DFCFFF     (base 16)		ELECTRONIC SYSTEMS DESIGN SPRL
-				Rue de l'Etang 40
-				Waterloo    1410
-				BE
-
-70-B3-D5   (hex)		GBS COMMUNICATIONS, LLC
-A89000-A89FFF     (base 16)		GBS COMMUNICATIONS, LLC
-				10773 NW 58TH STREET, STE 712
-				DORAL  FL  33178
-				US
-
-70-B3-D5   (hex)		Aquavision Distribution Ltd
-0DA000-0DAFFF     (base 16)		Aquavision Distribution Ltd
-				unit 7 Riverpark, Billet Lane
-				Berkhamsted  Hertfordshire  HP4 1HL
-				GB
-
-70-B3-D5   (hex)		CODEC Co., Ltd.
-B37000-B37FFF     (base 16)		CODEC Co., Ltd.
-				1-29-18 Tamagawa
-				Choufu-shi  Tokyo  182-0025
-				JP
-
-70-B3-D5   (hex)		RCS Energy Management Ltd
-A5A000-A5AFFF     (base 16)		RCS Energy Management Ltd
-				RMS House
-				Newbury  Berkshire  RG14 5PX
-				GB
-
-70-B3-D5   (hex)		Ecologicsense
-F96000-F96FFF     (base 16)		Ecologicsense
-				605 Avenue Olivier Perroy
-				Rousset  Bouches du Rhône  13790
-				FR
-
-70-B3-D5   (hex)		Woodam Co., Ltd.
-C86000-C86FFF     (base 16)		Woodam Co., Ltd.
-				Na 555, EZEN Mecha zone, 117 Hwanggeum-ro, Yangchon-eup
-				Gimpo  Gyeonggi-do  10048
-				KR
-
-70-B3-D5   (hex)		ATEME
-607000-607FFF     (base 16)		ATEME
-				6 rue Dewoitine
-				Vélizy-Villacoublay    78140
-				FR
-
-70-B3-D5   (hex)		Nable Communications, Inc.
-F5C000-F5CFFF     (base 16)		Nable Communications, Inc.
-				A-dong 702-ho, 660, Daewangpangyo-ro, Bundang-gu
-				Seongnam-si  Gyeonggi-do  13494
-				KR
-
-70-B3-D5   (hex)		Code Hardware SA
-29F000-29FFFF     (base 16)		Code Hardware SA
-				100 Metros Norte Hogar de Ancianos
-				Quesada    21001
-				CR
-
-70-B3-D5   (hex)		Thermo Fisher Scientific
-F76000-F76FFF     (base 16)		Thermo Fisher Scientific
-				27 forge Parkway
-				Franklin  MA  02038
-				US
-
-70-B3-D5   (hex)		DISMUNTEL, S.A.
-E8F000-E8FFFF     (base 16)		DISMUNTEL, S.A.
-				P.I Cotes c/aiguaders, 15
-				Valencia  Algemesi  46680
-				ES
-
-70-B3-D5   (hex)		L.I.F.E. Corporation SA
-D2F000-D2FFFF     (base 16)		L.I.F.E. Corporation SA
-				20, rue Jean-Pierre Beicht
-				Luxembourg    L-1226
-				LU
-
-70-B3-D5   (hex)		BHARAT HEAVY ELECTRICALS LIMITED
-163000-163FFF     (base 16)		BHARAT HEAVY ELECTRICALS LIMITED
-				ELECTRONICS DIVISION , P.B NO. 2606 , MYSORE ROAD,
-				BANGALORE  KARNATAKA  560026
-				IN
-
-70-B3-D5   (hex)		QUISS AG
-E30000-E30FFF     (base 16)		QUISS AG
-				Lilienthalstr. 5
-				Puchheim  Bavarian  82178
-				DE
-
-70-B3-D5   (hex)		HL2 group
-821000-821FFF     (base 16)		HL2 group
-				2 Avenue Galilee
-				Chasseneuil Futuroscope    86961
-				FR
-
-70-B3-D5   (hex)		Volansys technologies pvt ltd
-9AE000-9AEFFF     (base 16)		Volansys technologies pvt ltd
-				Block A-7th Floor, Safal Profitaire, Corporate Road, Prahaladnagar
-				Ahmedabad  Gujarat  380015
-				IN
-
-70-B3-D5   (hex)		Arnouse Digital Devices Corp
-DB0000-DB0FFF     (base 16)		Arnouse Digital Devices Corp
-				1983 Marcus Ave, Suite 104
-				Lake Success  NY  11042
-				US
-
-70-B3-D5   (hex)		Syscom Instruments SA
-DDC000-DDCFFF     (base 16)		Syscom Instruments SA
-				industrie 21
-				Sainte-Croix    1450
-				CH
-
-70-B3-D5   (hex)		Tecogen Inc.
-4B0000-4B0FFF     (base 16)		Tecogen Inc.
-				45 First Avenue
-				Waltham  MA  02451
-				US
-
-70-B3-D5   (hex)		elsys
-71B000-71BFFF     (base 16)		elsys
-				 203-59, Yulchonsandan 2-ro, Yulchon-myeon
-				Yeosu-si  Jeollanam-do  59602
-				KR
-
-70-B3-D5   (hex)		ControlWorks, Inc.
-89B000-89BFFF     (base 16)		ControlWorks, Inc.
-				Jinil Bldg. Suite401, 13 Eonju-ro 81 gil, Gangnam-gu,
-				Seoul    06222
-				KR
-
-70-B3-D5   (hex)		Adimec Advanced Image Systems
-854000-854FFF     (base 16)		Adimec Advanced Image Systems
-				Luchthavenweg 91
-				Eindhoven    5657 EA
-				NL
-
-70-B3-D5   (hex)		Hildebrand Technology Limited
-21E000-21EFFF     (base 16)		Hildebrand Technology Limited
-				16 Mortimer Street
-				London  London  W1T 3JL
-				GB
-
-70-B3-D5   (hex)		Saratov Electrounit Production Plant named after Sergo Ordzhonikidze, OJSC
-BE3000-BE3FFF     (base 16)		Saratov Electrounit Production Plant named after Sergo Ordzhonikidze, OJSC
-				239, Bolshaya Sadovaya
-				Saratov  Saratovskaya oblast  410005
-				RU
-
-70-B3-D5   (hex)		3PS Inc
-FB3000-FB3FFF     (base 16)		3PS Inc
-				1300 Arrow Point Drive
-				Cedar Park  TX  78613
-				US
-
-70-B3-D5   (hex)		Alazar Technologies Inc.
-697000-697FFF     (base 16)		Alazar Technologies Inc.
-				310 - 6600 Trans-Canada Hwy
-				Pointe-Claire  QC  H9R 4S2
-				CA
-
-70-B3-D5   (hex)		E-T-A Elektrotechnische Apparate GmbH
-AE7000-AE7FFF     (base 16)		E-T-A Elektrotechnische Apparate GmbH
-				Industriestr. 2-8
-				Altdorf    90518
-				DE
-
-70-B3-D5   (hex)		Vtron Pty Ltd
-400000-400FFF     (base 16)		Vtron Pty Ltd
-				Unit 2, 62 Township Drive West
-				West Burleigh  Queensland  4219
-				AU
-
-70-B3-D5   (hex)		Innovative Circuit Technology
-889000-889FFF     (base 16)		Innovative Circuit Technology
-				26921 Gloucester Way
-				Langley  BC  V4W 3Y3
-				CA
-
-70-B3-D5   (hex)		DORLET SAU
-58D000-58DFFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		AKEO PLUS
-6FF000-6FFFFF     (base 16)		AKEO PLUS
-				ZA EN BEAUVOIR 769 RUE DE LA OUTARDE
-				CHATEAU GAILLARD    01500
-				FR
-
-70-B3-D5   (hex)		Rocket Lab Ltd.
-61A000-61AFFF     (base 16)		Rocket Lab Ltd.
-				3A Airpark Drive
-				Mangere  Auckland  2022
-				NZ
-
-70-B3-D5   (hex)		PARK24
-EA0000-EA0FFF     (base 16)		PARK24
-				48 rue René CLAIR
-				PARIS    75018
-				FR
-
-70-B3-D5   (hex)		Carlson Wireless Technologies Inc. 
-174000-174FFF     (base 16)		Carlson Wireless Technologies Inc. 
-				2700 Foster Ave.
-				Arcata  CA  95521
-				US
-
-70-B3-D5   (hex)		swissled technologies AG
-649000-649FFF     (base 16)		swissled technologies AG
-				chemin des chalets 7
-				chavannes de bogis    1279
-				CH
-
-70-B3-D5   (hex)		A-M Systems
-3BB000-3BBFFF     (base 16)		A-M Systems
-				PO BOX 850
-				Carlsborg  WA  98324
-				US
-
-70-B3-D5   (hex)		Stercom Power Solutions GmbH
-274000-274FFF     (base 16)		Stercom Power Solutions GmbH
-				Sebastian-Tiefenthalerstr. 15
-				Rohrdorf  Bayern  83101
-				DE
-
-70-B3-D5   (hex)		db Broadcast Products Ltd
-7FB000-7FBFFF     (base 16)		db Broadcast Products Ltd
-				Kestrel House Sedgeway Business Park Witchford 
-				Ely  Cambridgeshire  CB6 2HY
-				GB
-
-70-B3-D5   (hex)		Krabbenhøft og Ingolfsson
-F9A000-F9AFFF     (base 16)		Krabbenhøft og Ingolfsson
-				Thorsgade 59, 4. tv.
-				København N  Danmark  2200
-				DK
-
-70-B3-D5   (hex)		Fujian Landfone Information Technology Co.,Ltd
-91A000-91AFFF     (base 16)		Fujian Landfone Information Technology Co.,Ltd
-				Room 305, third floor，NO.550,Western suburbs Industrial Road,Hongshan Town,Gulou District,Fuzhou,P.R.China
-				Fuzhou  Fujian  350001
-				CN
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-513000-513FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Diamante Lighting Srl
-925000-925FFF     (base 16)		Diamante Lighting Srl
-				via Einaudi, 8
-				Alessandria  AL  15121
-				IT
-
-70-B3-D5   (hex)		Xentech Solutions Limited
-C63000-C63FFF     (base 16)		Xentech Solutions Limited
-				Suite 6 Stanta Business Centre, 3 Soothouse Spring
-				St Albans  Hertfordshire  AL36PF
-				GB
-
-70-B3-D5   (hex)		EREE Electronique
-D11000-D11FFF     (base 16)		EREE Electronique
-				6 avenu Dr Schweitzer
-				MEYZIEU    69882
-				FR
-
-70-B3-D5   (hex)		Burk Technology
-BD2000-BD2FFF     (base 16)		Burk Technology
-				7 Beaver Brook road
-				Littleton  MA  01460
-				US
-
-70-B3-D5   (hex)		Amada Miyachi America Inc.
-7B6000-7B6FFF     (base 16)		Amada Miyachi America Inc.
-				1820 S. Myrtle Avenue
-				Monrovia  CA  91016
-				US
-
-70-B3-D5   (hex)		Vocality International Ltd
-10C000-10CFFF     (base 16)		Vocality International Ltd
-				Lydling Barn
-				Guildford  Surrey  GU86AP
-				GB
-
-70-B3-D5   (hex)		The DX Shop Limited
-37D000-37DFFF     (base 16)		The DX Shop Limited
-				Eliot Business Park
-				Nuneaton  Warwickshire  CV10 7RJ 
-				GB
-
-70-B3-D5   (hex)		TIAMA
-0C4000-0C4FFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-70-B3-D5   (hex)		CRDE
-818000-818FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		SciTronix
-3BC000-3BCFFF     (base 16)		SciTronix
-				Neufeld 6a
-				Höchst    6973
-				AT
-
-70-B3-D5   (hex)		LHA Systems (Pty) Ltd
-180000-180FFF     (base 16)		LHA Systems (Pty) Ltd
-				1 Innovation Center, Technopark
-				Stellenbosch  Western Cape  7600
-				ZA
-
-70-B3-D5   (hex)		Rohde&Schwarz Topex SA
-932000-932FFF     (base 16)		Rohde&Schwarz Topex SA
-				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
-				Bucuresti  Romania  014142
-				RO
-
-70-B3-D5   (hex)		AEC s.r.l.
-CCC000-CCCFFF     (base 16)		AEC s.r.l.
-				Via Zambon, 33/A
-				Creazzo  Vicenza  36051
-				IT
-
-70-B3-D5   (hex)		ADETEC SAS
-4E9000-4E9FFF     (base 16)		ADETEC SAS
-				8 rue de l'Angoumois
-				ARGENTEUIL    95100
-				FR
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-F4F000-F4FFFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-3D9000-3D9FFF     (base 16)		Aplex Technology Inc.
-				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-E7C000-E7CFFF     (base 16)		Aplex Technology Inc.
-				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-70-B3-D5   (hex)		NextEV Co., Ltd.
-200000-200FFF     (base 16)		NextEV Co., Ltd.
-				20 Building, No. 56 AnTuo Road, Anting Town, Jiading
-				Shanghai  Shanghai  201805
-				CN
-
-70-B3-D5   (hex)		Sicon srl
-3B2000-3B2FFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		NUMATA R&D Co.,Ltd
-E9B000-E9BFFF     (base 16)		NUMATA R&D Co.,Ltd
-				1-68 Furukawa-ekiminami
-				Osaki city    989-6161
-				JP
-
-70-B3-D5   (hex)		Scame Sistemi srl
-2F3000-2F3FFF     (base 16)		Scame Sistemi srl
-				Via Lombardia 5
-				Arluno  Milan  20010
-				IT
-
-70-B3-D5   (hex)		Triax A/S
-C9F000-C9FFFF     (base 16)		Triax A/S
-				Bjornkaervej 3
-				Hornsyld  Denmark  8783
-				DK
-
-70-B3-D5   (hex)		Muuntosähkö Oy - Trafox
-A59000-A59FFF     (base 16)		Muuntosähkö Oy - Trafox
-				Niittylänpolku 4
-				Helsinki    00620
-				FI
-
-70-B3-D5   (hex)		Cello Electronics (UK) Ltd
-295000-295FFF     (base 16)		Cello Electronics (UK) Ltd
-				Cliff Lodge
-				Leyburn  North Yorkshire  DL8 5NS
-				GB
-
-70-B3-D5   (hex)		Labinvent JSC
-C1B000-C1BFFF     (base 16)		Labinvent JSC
-				vul. Adoewskaha 131, office 303
-				Minsk  Minsk  220018
-				BY
-
-70-B3-D5   (hex)		Gigaray
-F3C000-F3CFFF     (base 16)		Gigaray
-				100 Dicui Road
-				Wuxi  Jiangsu  214072
-				CN
-
-70-B3-D5   (hex)		Nu-Tek Power Controls and Automation
-97C000-97CFFF     (base 16)		Nu-Tek Power Controls and Automation
-				6, Hosa Road , G.K Layout, Electronic City post
-				Bangalore  Karnataka  560100
-				IN
-
-70-B3-D5   (hex)		Tagarno AS
-DA8000-DA8FFF     (base 16)		Tagarno AS
-				Sandovej 4
-				Horsens  Denmark  DK-8700
-				DK
-
-70-B3-D5   (hex)		ANTEK GmbH
-90C000-90CFFF     (base 16)		ANTEK GmbH
-				Im Koechersgrund 3
-				Beilstein  Baden-Württemberg  71717
-				DE
-
-70-B3-D5   (hex)		Bionics co.,ltd.
-A78000-A78FFF     (base 16)		Bionics co.,ltd.
-				Honmachi 1chome 2-1 Honmachi-riverside-bill 2F
-				osaka-city  osaka-fu  541-0053
-				JP
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-742000-742FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		SYS TEC electronic GmbH
-AB4000-AB4FFF     (base 16)		SYS TEC electronic GmbH
-				Am Windrad 2
-				Heinsdorfergrund     D-08468
-				DE
-
-70-B3-D5   (hex)		BAE Systems Surface Ships Limited
-02A000-02AFFF     (base 16)		BAE Systems Surface Ships Limited
-				BAE Systems Surface Ships Ltd Broad Oak
-				Portsmouth  Hampshire  PO3 5PQ
-				GB
-
-70-B3-D5   (hex)		M-Tech Innovations Limited
-8B1000-8B1FFF     (base 16)		M-Tech Innovations Limited
-				Plot No. 1/2, Rajiv Gandhi Infotech Park,
-				Pune  Maharashtra  411057
-				IN
-
-70-B3-D5   (hex)		allora Factory BVBA
-EE1000-EE1FFF     (base 16)		allora Factory BVBA
-				Lijsterlaan 11
-				Bornem    2880
-				BE
-
-70-B3-D5   (hex)		Easy Digital Concept
-0B9000-0B9FFF     (base 16)		Easy Digital Concept
-				1 avenue Girardot
-				Montmorency    95160
-				FR
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-528000-528FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		Entech Electronics
-17D000-17DFFF     (base 16)		Entech Electronics
-				37 Belford Ave
-				Adelaide  Australia  5008
-				AU
-
-70-B3-D5   (hex)		Digital Yacht Ltd
-BA7000-BA7FFF     (base 16)		Digital Yacht Ltd
-				Failand Farm
-				Bristol  Avon  BS8 3TR
-				GB
-
-70-B3-D5   (hex)		Arnouse Digital Devices, Corp.
-28B000-28BFFF     (base 16)		Arnouse Digital Devices, Corp.
-				1983 Marcus Ave., Suite 104
-				Lake Success  null  11042
-				US
-
-70-B3-D5   (hex)		Vivalnk
-3A9000-3A9FFF     (base 16)		Vivalnk
-				4655 Old Ironsides Dr, #390
-				Santa Clara  CA  95054
-				US
-
-70-B3-D5   (hex)		Atos spa
-2E7000-2E7FFF     (base 16)		Atos spa
-				Via alla Piana 57
-				Sesto Calende  Varese  21018
-				IT
-
-70-B3-D5   (hex)		Galileo Tıp Teknolojileri San. ve Tic. A.S.
-FE2000-FE2FFF     (base 16)		Galileo Tıp Teknolojileri San. ve Tic. A.S.
-				Bulgurlu Mah. Kanyon Cd. 89/1 Battalgazi
-				Malatya    44000
-				TR
-
-70-B3-D5   (hex)		enModus
-772000-772FFF     (base 16)		enModus
-				Cas-Gwent Chambers, Welsh Street
-				Chepstow  Monmouthshire  NP165X
-				GB
-
-70-B3-D5   (hex)		Shenzhen Rihuida Electronics Co,. Ltd
-046000-046FFF     (base 16)		Shenzhen Rihuida Electronics Co,. Ltd
-				Fuzhong Industrial Park #4 
-				Shenzhen    518103
-				CN
-
-70-B3-D5   (hex)		Prozess Technologie
-B5C000-B5CFFF     (base 16)		Prozess Technologie
-				6124 Delmar Blvd
-				St. Louis  MO  63112
-				US
-
-70-B3-D5   (hex)		DALIAN  LEVEAR ELECTRIC  CO., LTD
-FD2000-FD2FFF     (base 16)		DALIAN  LEVEAR ELECTRIC  CO., LTD
-				DA LIAN GAN JING ZI
-				DA LIAN  LIAO NING  116033
-				CN
-
-70-B3-D5   (hex)		UCONSYS 
-232000-232FFF     (base 16)		UCONSYS 
-				R.506, Blk. 17T11, Nguyen Thi Dinh Str.
-				Hanoi    123456
-				VN
-
-70-B3-D5   (hex)		Kohler Mira Ltd
-F55000-F55FFF     (base 16)		Kohler Mira Ltd
-				Cromwell Road
-				Cheltenham  Gloucestershire  GL52 5EP
-				GB
-
-70-B3-D5   (hex)		PROFITT Ltd
-091000-091FFF     (base 16)		PROFITT Ltd
-				office 5H, block 14-2 lit.A, Raevsky av.
-				Saint-Petersburg    194064
-				RU
-
-70-B3-D5   (hex)		IES S.r.l.
-8B0000-8B0FFF     (base 16)		IES S.r.l.
-				Via Amedeo Nazzari, 3
-				Anzio  Roma  00042
-				IT
-
-70-B3-D5   (hex)		Sorama BV
-26B000-26BFFF     (base 16)		Sorama BV
-				Torenallee 20
-				Eindhoven  Noord-Brabant  5617 BC
-				NL
-
-70-B3-D5   (hex)		Ai-Lynx
-847000-847FFF     (base 16)		Ai-Lynx
-				1 avenue de l'Atlantique
-				Les Ulis    91940
-				FR
-
-70-B3-D5   (hex)		Software Motor Corp
-5D1000-5D1FFF     (base 16)		Software Motor Corp
-				1295 Forgewood Avenue
-				Sunnyvale  CA  94089
-				US
-
-70-B3-D5   (hex)		Sensohive Technologies
-384000-384FFF     (base 16)		Sensohive Technologies
-				Cortex Park 26
-				Odense M    5230
-				DK
-
-70-B3-D5   (hex)		8Cups
-A6F000-A6FFFF     (base 16)		8Cups
-				29, Gonghang-daero 61-gil, Gangseo-gu
-				Seoul    07563
-				KR
-
-70-B3-D5   (hex)		Transit Solutions, LLC.
-28A000-28AFFF     (base 16)		Transit Solutions, LLC.
-				114 West Grandview Avenue
-				Zelienople  PA  16063
-				US
-
-70-B3-D5   (hex)		Ascon Tecnologic S.r.l.
-5A0000-5A0FFF     (base 16)		Ascon Tecnologic S.r.l.
-				via Indipendenza, 56
-				Vigevano  PV  27029
-				IT
-
-70-B3-D5   (hex)		Forschungs- und Transferzentrum Leipzig e.V.
-124000-124FFF     (base 16)		Forschungs- und Transferzentrum Leipzig e.V.
-				Karl-Liebknecht-Strasse 143
-				Leipzig    04277
-				DE
-
-70-B3-D5   (hex)		PTYPE Co., LTD.
-69E000-69EFFF     (base 16)		PTYPE Co., LTD.
-				B121, B-dong, Keumkang Penterium IT Tower, 810, Gwanyand 2-dong, Dongan-gu
-				Anyang-si  Gyeonggi-do  14056
-				KR
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-DB4000-DB4FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-D1B000-D1BFFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		Swissponic Sagl
-52E000-52EFFF     (base 16)		Swissponic Sagl
-				via Pedemonte 28a
-				Bellinzona  Ticino  6500
-				CH
-
-70-B3-D5   (hex)		Herholdt Controls srl
-4A1000-4A1FFF     (base 16)		Herholdt Controls srl
-				Via Mestre 13
-				Milan    20132
-				IT
-
-70-B3-D5   (hex)		MESOTECHNIC
-AFE000-AFEFFF     (base 16)		MESOTECHNIC
-				9 rue Léopold Sédar-Senghor
-				COLOMBELLES    14460
-				FR
-
-70-B3-D5   (hex)		OHMORI ELECTRIC INDUSTRIES CO.LTD
-6A9000-6A9FFF     (base 16)		OHMORI ELECTRIC INDUSTRIES CO.LTD
-				Tuzuki-ku 1 Higashiyamata
-				Yokohama-shi  Kanagawa-ken  224-0024
-				JP
-
-70-B3-D5   (hex)		PDD Group Ltd
-D81000-D81FFF     (base 16)		PDD Group Ltd
-				87 Richford Street
-				London  Greater London  W6 7HJ
-				GB
-
-70-B3-D5   (hex)		NEMEUS-SAS
-326000-326FFF     (base 16)		NEMEUS-SAS
-				1 rue de la Chalotais Bat A
-				Cesson-Sévigné    35510
-				FR
-
-70-B3-D5   (hex)		SHIZUKI ELECTRIC CO.,INC
-FE6000-FE6FFF     (base 16)		SHIZUKI ELECTRIC CO.,INC
-				10-45 Taisha-cho
-				Nishinomiya-shi Hyogo    662-0867
-				JP
-
-70-B3-D5   (hex)		EMAC, Inc.
-8AB000-8ABFFF     (base 16)		EMAC, Inc.
-				2390 EMAC Way
-				Carbondale  IL  62901
-				US
-
-70-B3-D5   (hex)		Fin Robotics Inc
-0C8000-0C8FFF     (base 16)		Fin Robotics Inc
-				11871 Hilltop Dr, Losaltos Hills
-				Los Altos  CA  94024
-				US
-
-70-B3-D5   (hex)		OPTIX JSC
-E77000-E77FFF     (base 16)		OPTIX JSC
-				19 Kliment Ohridski str.
-				Sofia  Sofia  1756
-				BG
-
-70-B3-D5   (hex)		Bayern Engineering GmbH & Co. KG
-570000-570FFF     (base 16)		Bayern Engineering GmbH & Co. KG
-				Maillinger Str.13
-				Bad Aibling  Bavaria  83043
-				DE
-
-70-B3-D5   (hex)		Project Decibel, Inc.
-645000-645FFF     (base 16)		Project Decibel, Inc.
-				745 Atlantic Ave Fl 8
-				Boston  MA  02111
-				US
-
-70-B3-D5   (hex)		eCozy GmbH
-DE0000-DE0FFF     (base 16)		eCozy GmbH
-				Trimburgstr. 2
-				Munich  Bavaria  81249
-				DE
-
-70-B3-D5   (hex)		Innosonix GmbH
-14E000-14EFFF     (base 16)		Innosonix GmbH
-				Hauptstrasse 35
-				Ahorn  Bayern  96482
-				DE
-
-70-B3-D5   (hex)		MoviTHERM
-694000-694FFF     (base 16)		MoviTHERM
-				15540 Rockfield Blvd C110
-				Irvine  CA  92618
-				US
-
-70-B3-D5   (hex)		Sailmon BV
-033000-033FFF     (base 16)		Sailmon BV
-				Vlierweg 22
-				Amsterdam  Noord-Holland  1032 LG
-				NL
-
-70-B3-D5   (hex)		IDOSENS
-407000-407FFF     (base 16)		IDOSENS
-				51 chemin du vieux chene
-				MEYLAN  ISERE  38240
-				FR
-
-70-B3-D5   (hex)		GID Industrial
-25B000-25BFFF     (base 16)		GID Industrial
-				1218 Executive Drive West
-				Richardson  TX  75081
-				US
-
-70-B3-D5   (hex)		DIEHL Controls
-313000-313FFF     (base 16)		DIEHL Controls
-				Pfannerstrasse 75-83
-				Wangen im Allgaeu  D  88239
-				DE
-
-70-B3-D5   (hex)		APOLLO GIKEN Co.,Ltd.
-3E9000-3E9FFF     (base 16)		APOLLO GIKEN Co.,Ltd.
-				2-6-25 CHIGASAKIMINAMI TSUZUKI-KU
-				Yokohama  Kanagawa  2240037
-				JP
-
-70-B3-D5   (hex)		Acc+Ess Ltd
-FCF000-FCFFFF     (base 16)		Acc+Ess Ltd
-				Glenrhu
-				Wick  Highland  KW1 4TW
-				GB
-
-70-B3-D5   (hex)		Paradigm Communication Systems Ltd
-B3E000-B3EFFF     (base 16)		Paradigm Communication Systems Ltd
-				Paradigm House
-				Alton  Hants  GU34 2PP
-				GB
-
-70-B3-D5   (hex)		ePOINT Embedded Computing Limited
-01E000-01EFFF     (base 16)		ePOINT Embedded Computing Limited
-				Williamton House
-				Culross  Fife  KY12 8HL
-				GB
-
-70-B3-D5   (hex)		Nanospeed Technologies Limited
-E35000-E35FFF     (base 16)		Nanospeed Technologies Limited
-				Devonshire House
-				Borehamwood  Hertfordshire  WD6 1QQ
-				GB
-
-70-B3-D5   (hex)		FUJICOM Co.,Ltd.
-9F0000-9F0FFF     (base 16)		FUJICOM Co.,Ltd.
-				1581-1, Wakakodama, Gyouda-shi
-				Saitama-ken    3610017
-				JP
-
-70-B3-D5   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
-364000-364FFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
-				Felix-Wankel-Str. 13
-				Zaberfeld  Baden-Württemberg  74374
-				DE
-
-70-B3-D5   (hex)		ENVItech s.r.o.
-6F9000-6F9FFF     (base 16)		ENVItech s.r.o.
-				Janka Krala 16
-				Trencin    911 01
-				SK
-
-70-B3-D5   (hex)		servicios de consultoria independiente S.L.
-59D000-59DFFF     (base 16)		servicios de consultoria independiente S.L.
-				c/doctor apolinario macias 22. of.2
-				las palmas de gran canaria  Las Palmas  35011
-				ES
-
-70-B3-D5   (hex)		RANIX,Inc.
-404000-404FFF     (base 16)		RANIX,Inc.
-				3F, Handock Bldg., 2645 Nambusunhwan-ro, Gangnam-gu, Seoul, Korea
-				Seoul  Gangnam-gu  135-859
-				KR
-
-70-B3-D5   (hex)		DK-Technologies A/S
-3C0000-3C0FFF     (base 16)		DK-Technologies A/S
-				Marielundvej 37D
-				Herlev  _  2730
-				DK
-
-70-B3-D5   (hex)		Teletypes Manufacturing Plant
-554000-554FFF     (base 16)		Teletypes Manufacturing Plant
-				141, Saltykova-Schedrina Stree
-				Kaluga  Kaluga/Kaluga region  248002
-				RU
-
-70-B3-D5   (hex)		FeldTech GmbH
-A01000-A01FFF     (base 16)		FeldTech GmbH
-				Goestingerstrasse 70
-				Graz  -  8051
-				AT
-
-70-B3-D5   (hex)		ATEME
-DC0000-DC0FFF     (base 16)		ATEME
-				26 Burospace
-				Bievres  IDF  91470
-				
-
-70-B3-D5   (hex)		SINED srl
-C88000-C88FFF     (base 16)		SINED srl
-				Via 25 Aprile 34
-				Granarolo  Bologna  40057
-				IT
-
-70-B3-D5   (hex)		CommBox P/L
-835000-835FFF     (base 16)		CommBox P/L
-				3b/10 Rodborough Rd
-				Frenchs Forest  NSW  2086
-				AU
-
-70-B3-D5   (hex)		Quaesta Instruments, LLC
-88F000-88FFFF     (base 16)		Quaesta Instruments, LLC
-				1665 E 18th Street
-				Tucson  AZ  85719
-				US
-
-70-B3-D5   (hex)		Private
-ADA000-ADAFFF     (base 16)		Private
-
-70-B3-D5   (hex)		MEPS Realtime
-866000-866FFF     (base 16)		MEPS Realtime
-				6451 El Camino Real
-				Carlsbad  California  92009
-				US
-
-70-B3-D5   (hex)		PlayAlive A/S
-82E000-82EFFF     (base 16)		PlayAlive A/S
-				Platzvej 2
-				Vejle  Denmark  7100
-				DK
-
-70-B3-D5   (hex)		Applied Systems Engineering, Inc.
-9C8000-9C8FFF     (base 16)		Applied Systems Engineering, Inc.
-				1671 Dell Ave.
-				Campbell  CA  95008
-				US
-
-70-B3-D5   (hex)		Bunka Shutter Co., Ltd.
-5A9000-5A9FFF     (base 16)		Bunka Shutter Co., Ltd.
-				644-1 Tenjingoe,Ooaza-Kamiishizuka
-				Oyama  Tochigi  323-0063
-				JP
-
-70-B3-D5   (hex)		Damerell Design Limited (DCL)
-D8C000-D8CFFF     (base 16)		Damerell Design Limited (DCL)
-				111 St Michaels Road
-				Aldershot  Hampshire  GU12 4JW
-				GB
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-C21000-C21FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		Sinftech LLC
-4BA000-4BAFFF     (base 16)		Sinftech LLC
-				406, 1, Rizhskaya street
-				Saint Petersburg  Saint Petersburg  195196
-				RU
-
-70-B3-D5   (hex)		Metromatics Pty Ltd
-827000-827FFF     (base 16)		Metromatics Pty Ltd
-				25 Flinders Pde
-				North Lakes  QLD  4509
-				AU
-
-70-B3-D5   (hex)		Plasmability, LLC
-2A7000-2A7FFF     (base 16)		Plasmability, LLC
-				4715 Steiner Ranch Blvd
-				Austin  TX  78732
-				US
-
-70-B3-D5   (hex)		Laser Imagineering GmbH
-0D8000-0D8FFF     (base 16)		Laser Imagineering GmbH
-				Rudolf-Diesel-Weg 5
-				Moelln  Schleswig Holstein  23879
-				DE
-
-70-B3-D5   (hex)		Smart Energy Code Company Limited
-1F3000-1F3FFF     (base 16)		Smart Energy Code Company Limited
-				8 Fenchurch Place
-				London  England, London  EC3M 4AJ
-				GB
-
-70-B3-D5   (hex)		WARECUBE,INC
-BAE000-BAEFFF     (base 16)		WARECUBE,INC
-				3F, 119-59, Sasadong
-				Ansansi  Gyunggido  426-220
-				KR
-
-70-B3-D5   (hex)		Fenotech Inc.
-B85000-B85FFF     (base 16)		Fenotech Inc.
-				3478 Buskirk Ave Ste 1000
-				Pleasant Hill  CA  94523
-				US
-
-70-B3-D5   (hex)		Pullnet Technology,S.L.
-D8D000-D8DFFF     (base 16)		Pullnet Technology,S.L.
-				Parc Tecnologic BCNord
-				Barcelona  Catalonia  08042
-				ES
-
-70-B3-D5   (hex)		EQUIPOS DE TELECOMUNICACIÓN OPTOELECTRÓNICOS, S.A.
-2BC000-2BCFFF     (base 16)		EQUIPOS DE TELECOMUNICACIÓN OPTOELECTRÓNICOS, S.A.
-				POL.MALPICA, C/F OESTE, G.QUEJIDO, 74
-				ZARAGOZA  ZARAGOZA  50057
-				ES
-
-70-B3-D5   (hex)		HDL da Amazônia Industria Eletrônica Ltda
-A27000-A27FFF     (base 16)		HDL da Amazônia Industria Eletrônica Ltda
-				Avenida Abiurana, 1150 - Distrito
-				Manaus  MN  69075-010
-				BR
-
-70-B3-D5   (hex)		Visual Engineering Technologies Ltd
-6D1000-6D1FFF     (base 16)		Visual Engineering Technologies Ltd
-				The Barns, Kemps Farm
-				Colchester  Essex  CO3 8NB
-				GB
-
-70-B3-D5   (hex)		Birdland Audio
-AD5000-AD5FFF     (base 16)		Birdland Audio
-				484 Washington St. Ste.B-450
-				Monterey  CA  93940
-				US
-
-70-B3-D5   (hex)		AVI Pty Ltd
-3E2000-3E2FFF     (base 16)		AVI Pty Ltd
-				9 Pitt Way
-				Booragoon  Western Australia  6154
-				AU
-
-70-B3-D5   (hex)		PCME Ltd.
-FE8000-FE8FFF     (base 16)		PCME Ltd.
-				Clearview Building
-				St Ives  Cambridgeshire  PE27 3GH
-				GB
-
-70-B3-D5   (hex)		pureLiFi Ltd
-958000-958FFF     (base 16)		pureLiFi Ltd
-				ETTC, Alrick Building
-				Edinburgh  Edinburgh  EH9 3BF
-				GB
-
-70-B3-D5   (hex)		PEEK TRAFFIC
-C3C000-C3CFFF     (base 16)		PEEK TRAFFIC
-				5401 N SAM HOUSTON PKWY W
-				HOUSTON  TEXAS  77086
-				US
-
-70-B3-D5   (hex)		Technik & Design GmbH
-BAD000-BADFFF     (base 16)		Technik & Design GmbH
-				Rhinstrasse 84
-				Berlin  Berlin  12681
-				DE
-
-70-B3-D5   (hex)		RF Code
-A51000-A51FFF     (base 16)		RF Code
-				2600 Longhorn Blvd. ste 111
-				Austin  Texas  78758
-				US
-
-70-B3-D5   (hex)		Qxperts Italia S.r.l.
-5B0000-5B0FFF     (base 16)		Qxperts Italia S.r.l.
-				Via Muratori 9
-				Genova  Italy  16152
-				IT
-
-70-B3-D5   (hex)		LLVISION TECHNOLOGY CO.,LTD
-E21000-E21FFF     (base 16)		LLVISION TECHNOLOGY CO.,LTD
-				Room302,Building A Fuxing,No.30 He Tao Yuan,Guan Dong Dian Bei Jie
-				Beijing  Beijing  100026
-				CN
-
-70-B3-D5   (hex)		AML Oceanographic
-0CD000-0CDFFF     (base 16)		AML Oceanographic
-				2071 Malaview Avenue
-				Sidney  British Columbia  V8L 5X6
-				CA
-
-70-B3-D5   (hex)		Twoway Communications, Inc.
-4AA000-4AAFFF     (base 16)		Twoway Communications, Inc.
-				41 Wu Kung 6 Rd., New Taipei Industrial Park, New Taipei City,24891,Taiwan,R.O.C.
-				New Taipei city  Taipei  24891
-				TW
-
-70-B3-D5   (hex)		Kentech Instruments Limited
-EAC000-EACFFF     (base 16)		Kentech Instruments Limited
-				The Isis Building
-				Wallingford  Oxfordshire  OX10 8BA
-				GB
-
-70-B3-D5   (hex)		Global Communications Technology LLC
-8AD000-8ADFFF     (base 16)		Global Communications Technology LLC
-				4915 Waters Edge Dr
-				Raleigh  North Carolina  27606-2394
-				US
-
-70-B3-D5   (hex)		Conjing Networks Inc.
-134000-134FFF     (base 16)		Conjing Networks Inc.
-				4F., No.108, Zhenxing Rd., East Dist.
-				Hsinchu City  Taiwan  30063
-				TW
-
-70-B3-D5   (hex)		CW2. Gmbh & Co. KG
-79E000-79EFFF     (base 16)		CW2. Gmbh & Co. KG
-				Tübinger Straße 43
-				Stuttgart  Baden-Württemberg  70178
-				DE
-
-70-B3-D5   (hex)		Vtron Pty Ltd
-341000-341FFF     (base 16)		Vtron Pty Ltd
-				Unit 2, 62 Township Drive West
-				West Burleigh  Queensland  4219
-				AU
-
-70-B3-D5   (hex)		HAMEG GmbH
-F5A000-F5AFFF     (base 16)		HAMEG GmbH
-				Industriestr. 6
-				Mainhausen  Hessen  63533
-				DE
-
-70-B3-D5   (hex)		Vitec System Engineering Inc.
-799000-799FFF     (base 16)		Vitec System Engineering Inc.
-				1-2-5
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-70-B3-D5   (hex)		Akenori PTE LTD
-6A5000-6A5FFF     (base 16)		Akenori PTE LTD
-				176 JOO CHIAT ROAD #02-02
-				    427447
-				SG
-
-70-B3-D5   (hex)		Amrehn & Partner EDV-Service GmbH
-20E000-20EFFF     (base 16)		Amrehn & Partner EDV-Service GmbH
-				Friedrich-König-Straße 11
-				Waldbüttelbrunn  Bayern  97297
-				DE
-
-70-B3-D5   (hex)		West-Com Nurse Call Systems, Inc.
-AA8000-AA8FFF     (base 16)		West-Com Nurse Call Systems, Inc.
-				2200 Cordelia Road
-				Fairfield  CA  94534
-				US
-
-70-B3-D5   (hex)		FOTONA D.D.
-BD3000-BD3FFF     (base 16)		FOTONA D.D.
-				Stegne 7
-				Ljubljana    1000
-				SI
-
-70-B3-D5   (hex)		Redwood Systems
-A2A000-A2AFFF     (base 16)		Redwood Systems
-				3839 Spinnaker Court
-				Fremont   CA  94538
-				US
-
-70-B3-D5   (hex)		Wiingtech International Co. LTD.
-6ED000-6EDFFF     (base 16)		Wiingtech International Co. LTD.
-				2F., No. 51, LN. 174, Chungshiao Rd.
-				New Taipei City  Taiwan  220
-				TW
-
-70-B3-D5   (hex)		Smith Meter, Inc.
-E23000-E23FFF     (base 16)		Smith Meter, Inc.
-				1602 Wagner Ave.
-				Erie  PA  16510
-				US
-
-70-B3-D5   (hex)		KSJ Co.Ltd
-917000-917FFF     (base 16)		KSJ Co.Ltd
-				Address 4F Kurosu Bldg.
-				Nakano-ku  Tokyo  1640012
-				JP
-
-70-B3-D5   (hex)		PXM sp.k.
-EFB000-EFBFFF     (base 16)		PXM sp.k.
-				Przemyslowa 12
-				Krakow  Malopolska  30-701
-				PL
-
-70-B3-D5   (hex)		Tiab Limited
-DF6000-DF6FFF     (base 16)		Tiab Limited
-				Upton Lodge Buildings,
-				Middleton Cheney  Banbury  OX17 2PJ
-				GB
-
-70-B3-D5   (hex)		Dynamic Controls
-AB9000-AB9FFF     (base 16)		Dynamic Controls
-				17 Print Place
-				Christchurch  Canterbury  8024
-				NZ
-
-70-B3-D5   (hex)		Redler Computers
-41E000-41EFFF     (base 16)		Redler Computers
-				Hamelacha St., 8 ,New Industrial Zone
-				Netanya  Israel  42815
-				IL
-
-70-B3-D5   (hex)		ATX NETWORKS LTD
-A00000-A00FFF     (base 16)		ATX NETWORKS LTD
-				Halapid 12 st
-				Petach tikva  Israel  4917001
-				IL
-
-70-B3-D5   (hex)		Confed Holding B.V.
-99F000-99FFFF     (base 16)		Confed Holding B.V.
-				Beurtschipper 2-4
-				Nijkerk  n.a.  3861SC
-				NL
-
-70-B3-D5   (hex)		Li Seng Technology Ltd.,
-4F0000-4F0FFF     (base 16)		Li Seng Technology Ltd.,
-				901., Siu Fung Hong Building
-				Hong Kong  Hong Kong  852
-				HK
-
-70-B3-D5   (hex)		Zenros ApS
-F39000-F39FFF     (base 16)		Zenros ApS
-				Kongevejen 331- 1.
-				Holte  Hovedstaden  DK2840
-				DK
-
-70-B3-D5   (hex)		TELETASK
-C56000-C56FFF     (base 16)		TELETASK
-				Ottergemsesteenweg-Zuid 729
-				GENT    9000
-				BE
-
-70-B3-D5   (hex)		Private
-22E000-22EFFF     (base 16)		Private
-
-70-B3-D5   (hex)		Coherent Logix, Inc.
-2BE000-2BEFFF     (base 16)		Coherent Logix, Inc.
-				1120 S Capital of TX HWY
-				Austin  TX  78746
-				US
-
-70-B3-D5   (hex)		Figment Design Laboratories
-417000-417FFF     (base 16)		Figment Design Laboratories
-				113 11th Avenue
-				Johannesburg  Gauteng  2170
-				ZA
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-4CD000-4CDFFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		Institute of Power Engineering, Gdansk Division
-6E4000-6E4FFF     (base 16)		Institute of Power Engineering, Gdansk Division
-				Mikolaja Reja 27
-				Gdansk  Pomorskie  80-870
-				PL
-
-70-B3-D5   (hex)		Lieron BVBA
-E6E000-E6EFFF     (base 16)		Lieron BVBA
-				Beversluis 6
-				Wezemaal  Vl. Brabant  3111
-				BE
-
-70-B3-D5   (hex)		FeCon GmbH
-BE1000-BE1FFF     (base 16)		FeCon GmbH
-				Eckernförder Landstraße 78
-				Flensburg  Schleswig Holstein  24941
-				DE
-
-70-B3-D5   (hex)		Nanjing Magewell Electronics Co., Ltd.
-75D000-75DFFF     (base 16)		Nanjing Magewell Electronics Co., Ltd.
-				Romm 701, Building C, Win-world Innovation Park
-				Nanjing  Jiangsu  211100
-				CN
-
-70-B3-D5   (hex)		Roush
-65B000-65BFFF     (base 16)		Roush
-				12249 Levan
-				Livonia  MI  48150
-				US
-
-70-B3-D5   (hex)		Nexus Technologies Pty Ltd
-0C1000-0C1FFF     (base 16)		Nexus Technologies Pty Ltd
-				66-68 Wedgewood Road
-				Hallam  Victoria  3803
-				AU
-
-70-B3-D5   (hex)		HI-TECH SYSTEM Co. Ltd.
-26E000-26EFFF     (base 16)		HI-TECH SYSTEM Co. Ltd.
-				76-22 Toiso
-				Eniwa  Hokkaido  061-1405
-				JP
-
-70-B3-D5   (hex)		Zehetner-Elektronik GmbH
-5E9000-5E9FFF     (base 16)		Zehetner-Elektronik GmbH
-				Florianerstrasse 19
-				Sankt Marien    4502
-				AT
-
-70-B3-D5   (hex)		RFEL Ltd
-9F1000-9F1FFF     (base 16)		RFEL Ltd
-				Unit B, The Apex
-				Newport  Isle of Wight  PO30 5XW
-				GB
-
-70-B3-D5   (hex)		MeshWorks Wireless Oy
-C39000-C39FFF     (base 16)		MeshWorks Wireless Oy
-				Haarlankatu 1 J
-				Tampere  No selection required  33230
-				FI
-
-70-B3-D5   (hex)		GAMPT mbH
-796000-796FFF     (base 16)		GAMPT mbH
-				Hallesche Str. 99F
-				Merseburg  S-A  06217
-				DE
-
-70-B3-D5   (hex)		Tresent Technologies
-030000-030FFF     (base 16)		Tresent Technologies
-				104 Bartlett Drive
-				Schwenksville  Pennsylvania  19473
-				US
-
-70-B3-D5   (hex)		Lookout Portable Security
-B82000-B82FFF     (base 16)		Lookout Portable Security
-				4105 Royal Dr. #100
-				Kennesaw  GA  30144
-				US
-
-70-B3-D5   (hex)		Videotrend srl
-39A000-39AFFF     (base 16)		Videotrend srl
-				Via Brughetti 9/H
-				Bovisio Masciago  Monza Brianza  20813
-				IT
-
-70-B3-D5   (hex)		SIMON TECH, S.L.
-882000-882FFF     (base 16)		SIMON TECH, S.L.
-				Diputació, 390
-				BARCELONA  BARCELONA  08013
-				ES
-
-70-B3-D5   (hex)		Smart Service Technologies CO., LTD
-660000-660FFF     (base 16)		Smart Service Technologies CO., LTD
-				No.802, 2-12-3, Imajuku, Nishi-ku
-				Fukuoka  Fukuoka  819-0167
-				JP
-
-70-B3-D5   (hex)		Vickers Electronics Ltd
-9F5000-9F5FFF     (base 16)		Vickers Electronics Ltd
-				Unit 14, Alliance House
-				Trafford Park  Manchester  M17 1QS
-				GB
-
-70-B3-D5   (hex)		Connor Winfield LTD
-D0C000-D0CFFF     (base 16)		Connor Winfield LTD
-				Bay 143 Shannon Ind Est
-				Shannon  Clare  0000
-				IE
-
-70-B3-D5   (hex)		OMEGA BILANCE SRL SOCIETA' UNIPERSONALE
-48D000-48DFFF     (base 16)		OMEGA BILANCE SRL SOCIETA' UNIPERSONALE
-				VIA FRANCESCO CARACCIOLO, 115
-				NAPLES  NAPLES  80122
-				IT
-
-70-B3-D5   (hex)		Loop Labs, Inc.
-3DA000-3DAFFF     (base 16)		Loop Labs, Inc.
-				207 South Bannock Street
-				Denver  Colorado  80223
-				US
-
-70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
-0FF000-0FFFFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
-				Sector Foresta 43, local 26
-				Tres Cantos  Madrid  28760
-				ES
-
-70-B3-D5   (hex)		Glidewell Laboratories
-502000-502FFF     (base 16)		Glidewell Laboratories
-				4141 MacArthur Blvd
-				Newport Beach  CA  92660
-				US
-
-70-B3-D5   (hex)		Metek Meteorologische Messtechnik GmbH
-A6D000-A6DFFF     (base 16)		Metek Meteorologische Messtechnik GmbH
-				Fritz-Straßmann-Straße 4
-				Elmshorn  Schleswig-Holstein  D-25337
-				
-
-70-B3-D5   (hex)		Beijing CONvision Technology Co.,Ltd
-08E000-08EFFF     (base 16)		Beijing CONvision Technology Co.,Ltd
-				suzhoujie apartment #33 room 1302
-				  Beijing  100080
-				CN
-
-70-B3-D5   (hex)		WoKa-Elektronik GmbH
-8E1000-8E1FFF     (base 16)		WoKa-Elektronik GmbH
-				Fulder Tor 30
-				Alsfeld  Hessen  36304
-				DE
-
-70-B3-D5   (hex)		SOUDAX EQUIPEMENTS
-8E0000-8E0FFF     (base 16)		SOUDAX EQUIPEMENTS
-				14 AVE DE LA MAULDRE
-				EPONE  IDF  78680
-				FR
-
-70-B3-D5   (hex)		Cyviz AS
-C6D000-C6DFFF     (base 16)		Cyviz AS
-				Vestre svanholmen 6
-				Sandnes  NO  N4313
-				NO
-
-70-B3-D5   (hex)		Qprel srl
-DA1000-DA1FFF     (base 16)		Qprel srl
-				Via Fiorentina 578/D
-				Pistoia  Italy  51100
-				IT
-
-70-B3-D5   (hex)		Cyberteam Sp z o o
-36D000-36DFFF     (base 16)		Cyberteam Sp z o o
-				Kalinowice 157
-				Zamosc  Lubelskie  22400
-				PL
-
-70-B3-D5   (hex)		LunaNexus Inc
-55D000-55DFFF     (base 16)		LunaNexus Inc
-				1-8-29 nishimiyahara
-				Osakashi yodogawa-ku  Osaka-fu  5320004
-				JP
-
-70-B3-D5   (hex)		Houston Radar LLC
-D1E000-D1EFFF     (base 16)		Houston Radar LLC
-				12818 Century Dr
-				Stafford  Texas  77477
-				US
-
-70-B3-D5   (hex)		Veryx Technologies Private Limited
-43D000-43DFFF     (base 16)		Veryx Technologies Private Limited
-				Floor 1, RR Tower 4, Thiru-Vi-Ka Industrial Estate
-				Chennai  Tamil Nadu  600032
-				IN
-
-70-B3-D5   (hex)		Deymed Diagnostic
-BCA000-BCAFFF     (base 16)		Deymed Diagnostic
-				Velky Drevic 91
-				Hronov  Kralovehradecky kraj  54934
-				CZ
-
-70-B3-D5   (hex)		managee GmbH & Co KG
-5F0000-5F0FFF     (base 16)		managee GmbH & Co KG
-				Marbergweg 79
-				Cologne  NRW  51107
-				DE
-
-70-B3-D5   (hex)		Niveo International BV
-8DC000-8DCFFF     (base 16)		Niveo International BV
-				Communicatieweg 9L
-				Mijdrecht  ZH  3641SG
-				NL
-
-70-B3-D5   (hex)		ATEME
-3E5000-3E5FFF     (base 16)		ATEME
-				26 Burospace
-				Bievres  IDF  91470
-				
-
-70-B3-D5   (hex)		DiTEST Fahrzeugdiagnose GmbH
-AEE000-AEEFFF     (base 16)		DiTEST Fahrzeugdiagnose GmbH
-				Alte Poststraße 152
-				Graz  Steiermark  8020
-				AT
-
-70-B3-D5   (hex)		Ipitek
-ECF000-ECFFFF     (base 16)		Ipitek
-				2320 Faraday Ave
-				Carlsbad  CA  92008
-				US
-
-70-B3-D5   (hex)		STRACK LIFT AUTOMATION GmbH
-A40000-A40FFF     (base 16)		STRACK LIFT AUTOMATION GmbH
-				Lise-Meitner-Straße 2
-				Wülfrath  NRW  42489
-				DE
-
-70-B3-D5   (hex)		XI'AN SHENMING ELECTRON TECHNOLOGY CO.,LTD
-B16000-B16FFF     (base 16)		XI'AN SHENMING ELECTRON TECHNOLOGY CO.,LTD
-				1-2-4-2401 XIANGSHU NO.3 KEJI FIVE STREET
-				XI'AN  SHANXI  710000
-				CN
-
-70-B3-D5   (hex)		Census Digital Incorporated
-86D000-86DFFF     (base 16)		Census Digital Incorporated
-				72 Dynamic Drive
-				Toronto  Ontario  M1V 3Z5
-				CA
-
-70-B3-D5   (hex)		WIBOND Informationssysteme GmbH
-F2A000-F2AFFF     (base 16)		WIBOND Informationssysteme GmbH
-				Neustädter Strasse 19
-				Parkstein  Bayern  92711
-				DE
-
-70-B3-D5   (hex)		Providius Corp
-BBD000-BBDFFF     (base 16)		Providius Corp
-				848 Main St E
-				Hamilton  Ontario  L8M1L9
-				CA
-
-70-B3-D5   (hex)		UNI DIMENXI SDN BHD
-C96000-C96FFF     (base 16)		UNI DIMENXI SDN BHD
-				A-1-05, SME Technopreneur Centre Cyberjaya,
-				Cyberjaya  Selangor Darul Ehsan  63000
-				MY
-
-70-B3-D5   (hex)		Botek Systems AB
-A2F000-A2FFFF     (base 16)		Botek Systems AB
-				Box 35
-				Ulricehamn    52321
-				SE
-
-70-B3-D5   (hex)		Lehigh Electric Products Co
-5B5000-5B5FFF     (base 16)		Lehigh Electric Products Co
-				6265 Hamilton Blvd
-				Allentown  PA  18106
-				US
-
-70-B3-D5   (hex)		Eta Beta Srl
-B15000-B15FFF     (base 16)		Eta Beta Srl
-				Via Mura dei Francesi, 26
-				Ciampino  Roma  00043
-				IT
-
-70-B3-D5   (hex)		Honeywell
-9A7000-9A7FFF     (base 16)		Honeywell
-				13350 US Highway 19 N
-				Clearwater  FLORIDA  33764
-				US
-
-70-B3-D5   (hex)		Cygnus LLC
-0FB000-0FBFFF     (base 16)		Cygnus LLC
-				510 East 41st St
-				Paterson  NJ  07504
-				US
-
-70-B3-D5   (hex)		KST technology
-C8D000-C8DFFF     (base 16)		KST technology
-				164-1, KST b/d., Bangi-dong, songpa-gu
-				SEOUL  N/A  138-050
-				KR
-
-70-B3-D5   (hex)		BIO RAD LABORATORIES
-DDD000-DDDFFF     (base 16)		BIO RAD LABORATORIES
-				6000 JAMES WATSON DR.
-				HERCULES  CA  94547
-				US
-
-70-B3-D5   (hex)		 GD Mission Systems
-C27000-C27FFF     (base 16)		 GD Mission Systems
-				8220 E. Roosevelt St.
-				Scottsdale  AZ  85257
-				US
-
-70-B3-D5   (hex)		Glova Rail A/S
-918000-918FFF     (base 16)		Glova Rail A/S
-				Elvej 3
-				Odense S    5260
-				DK
-
-70-B3-D5   (hex)		Oso Technologies
-871000-871FFF     (base 16)		Oso Technologies
-				301 N. Neil St.
-				Champaign  Illinois  61820
-				US
-
-00-1B-C5   (hex)		UAB Kitron
-0C9000-0C9FFF     (base 16)		UAB Kitron
-				Taikos 151
-				Kaunas  Lithuania  LT-52119
-				US
-
-00-1B-C5   (hex)		Gill Instruments Ltd
-0C5000-0C5FFF     (base 16)		Gill Instruments Ltd
-				Saltmarsh Park
-				Lymington  Hampshire  SO41 9EG
-				GB
-
-00-1B-C5   (hex)		Connode
-0C6000-0C6FFF     (base 16)		Connode
-				Järnvägsgatan 10 PO Box 1094
-				Sundbyberg    17222
-				SE
-
-00-1B-C5   (hex)		NT MICROSYSTEMS
-0BA000-0BAFFF     (base 16)		NT MICROSYSTEMS
-				Midori-ku
-				Yokohama  Kanagawa  2260017
-				JP
-
-00-1B-C5   (hex)		Bridge Diagnostics, Inc.
-0BD000-0BDFFF     (base 16)		Bridge Diagnostics, Inc.
-				1995 57th Court N.Ste 100
-				Boulder  Co  80301
-				US
-
-00-1B-C5   (hex)		Tierra Japan Co.,Ltd
-0AD000-0ADFFF     (base 16)		Tierra Japan Co.,Ltd
-				Cosmos Mansion 201
-				Shinjuku-ku  Tokyo  169-0072
-				JP
-
-00-1B-C5   (hex)		Enerwise Solutions Ltd.
-0AF000-0AFFFF     (base 16)		Enerwise Solutions Ltd.
-				Flat/Room 510, 5/F Wayson,Comm Building
-				    
-				HK
-
-00-1B-C5   (hex)		Elektrometal SA
-0A9000-0A9FFF     (base 16)		Elektrometal SA
-				Stawowa 71
-				Cieszyn  Slaskie  43-400
-				PL
-
-00-1B-C5   (hex)		L.G.L. Electronics S.p.a.
-0A7000-0A7FFF     (base 16)		L.G.L. Electronics S.p.a.
-				Via Ugo Foscolo, 156
-				Gandino  Bergamo  24024
-				IT
-
-00-1B-C5   (hex)		Link Precision
-0A8000-0A8FFF     (base 16)		Link Precision
-				Rua Lauro Linhares, 589
-				Florianópolis  SC  88036001
-				BR
-
-00-1B-C5   (hex)		AVnu Alliance
-0AC000-0ACFFF     (base 16)		AVnu Alliance
-				3855 SW 153rd Drive
-				Beaverton  Oregon  97003
-				US
-
-00-1B-C5   (hex)		Tesla Controls
-0A5000-0A5FFF     (base 16)		Tesla Controls
-				8400 Miramar Road
-				San Diego  CA  92126
-				US
-
-00-1B-C5   (hex)		RADMOR S.A.
-0A4000-0A4FFF     (base 16)		RADMOR S.A.
-				HUTNICZA 3
-				GDYNIA  Pomorskie  81-212
-				PL
-
-00-1B-C5   (hex)		K+K Messtechnik GmbH
-09E000-09EFFF     (base 16)		K+K Messtechnik GmbH
-				St.-Wendel-Str. 12
-				Braunschweig  Niedersachsen  38116
-				DE
-
-00-1B-C5   (hex)		YIK Corporation
-09B000-09BFFF     (base 16)		YIK Corporation
-				B-4F,Pangyo Silicon Park 613
-				seongnam-si  Gyeonggi-do  463-400
-				KR
-
-00-1B-C5   (hex)		Plexstar Inc.
-097000-097FFF     (base 16)		Plexstar Inc.
-				209 S H 121 Bypass, STE 35
-				Lewisville  TX  75067
-				US
-
-00-1B-C5   (hex)		3green ApS
-091000-091FFF     (base 16)		3green ApS
-				Tinghaven 5
-				Vodskov    9000
-				DK
-
-00-1B-C5   (hex)		Seven Solutions S.L
-090000-090FFF     (base 16)		Seven Solutions S.L
-				C/Baza, parcela 19,
-				Peligros  Granada  18210
-				ES
-
-00-1B-C5   (hex)		CAST Group of Companies Inc.
-086000-086FFF     (base 16)		CAST Group of Companies Inc.
-				35 Ripley Ave.
-				Toronto  Ontario  M6S3P2
-				CA
-
-00-1B-C5   (hex)		Applied Innovations Research LLC
-084000-084FFF     (base 16)		Applied Innovations Research LLC
-				21265 Radisson Road
-				Shorewood  MN  55331-9191
-				US
-
-00-1B-C5   (hex)		QCORE Medical
-07B000-07BFFF     (base 16)		QCORE Medical
-				14 Hamefalsim St
-				Petach Tikva  Israel  49130
-				IL
-
-00-1B-C5   (hex)		Servicios Electronicos Industriales Berbel s.l.
-07A000-07AFFF     (base 16)		Servicios Electronicos Industriales Berbel s.l.
-				Calle San Jose N
-				PINTO  MADRID  28320
-				ES
-
-00-1B-C5   (hex)		Donbass Soft Ltd and Co.KG
-078000-078FFF     (base 16)		Donbass Soft Ltd and Co.KG
-				Im Gewerbepark C25
-				Regensburg  Bavaria  93059
-				DE
-
-00-1B-C5   (hex)		PLAiR Media, Inc
-076000-076FFF     (base 16)		PLAiR Media, Inc
-				2901 Tasman Dr.
-				Santa Clara  California  95054
-				US
-
-00-1B-C5   (hex)		IST GmbH
-06A000-06AFFF     (base 16)		IST GmbH
-				Peter-Henlein-Str. 11
-				Guenzburg    86312
-				DE
-
-00-1B-C5   (hex)		Manufacturas y transformados AB
-066000-066FFF     (base 16)		Manufacturas y transformados AB
-				Sant Antoni de Baix 110-112
-				Igualada  Barcelona  08700
-				ES
-
-00-1B-C5   (hex)		Metrycom Communications Ltd
-053000-053FFF     (base 16)		Metrycom Communications Ltd
-				2 Koifman st.
-				Tel Aviv    68012
-				IL
-
-00-1B-C5   (hex)		Engineering Center ENERGOSERVICE
-052000-052FFF     (base 16)		Engineering Center ENERGOSERVICE
-				26 Kotlasskaya str.
-				Arkhangelsk    163046
-				RU
-
-00-1B-C5   (hex)		INPIXAL
-059000-059FFF     (base 16)		INPIXAL
-				80 Avenue des Buttes de Coesmes
-				RENNES  BRETAGNE  35700
-				FR
-
-00-1B-C5   (hex)		ThinKom Solutions, Inc
-056000-056FFF     (base 16)		ThinKom Solutions, Inc
-				20000 Mariner Ave
-				Torrance  CA  90503
-				US
-
-00-1B-C5   (hex)		TeliSwitch Solutions
-050000-050FFF     (base 16)		TeliSwitch Solutions
-				7 Hatochna st.
-				Kfar Saba    44641
-				IL
-
-00-1B-C5   (hex)		eiraku electric corp.
-04D000-04DFFF     (base 16)		eiraku electric corp.
-				osaki 1-19-1
-				tokyo  shinagawa  141-0032
-				JP
-
-00-1B-C5   (hex)		ZAO &quot;RADIUS Avtomatika&quot;
-044000-044FFF     (base 16)		ZAO &quot;RADIUS Avtomatika&quot;
-				Panfilovskiy prospekt, 10/3
-				Zelenograd  Moscow  124489
-				RU
-
-00-1B-C5   (hex)		XPossible Technologies Pte Ltd
-048000-048FFF     (base 16)		XPossible Technologies Pte Ltd
-				105 Tampines Road
-				     535127
-				SG
-
-00-1B-C5   (hex)		Coincident, Inc.
-043000-043FFF     (base 16)		Coincident, Inc.
-				337 Summer Street
-				Boston  MA  02210
-				US
-
-00-1B-C5   (hex)		MindMade Sp. z o.o.
-03A000-03AFFF     (base 16)		MindMade Sp. z o.o.
-				Sniadeckich 10
-				Warsaw    00-656
-				PL
-
-00-1B-C5   (hex)		BETTINI SRL
-02E000-02EFFF     (base 16)		BETTINI SRL
-				VIA CESARE BATTISTI 22
-				CESANO MADERNO  MILAN  20031
-				IT
-
-00-1B-C5   (hex)		Simavita Pty Ltd
-00F000-00FFFF     (base 16)		Simavita Pty Ltd
-				492 St Kilda Road
-				Melbourne  Victoria  3004
-				AU
-
-00-1B-C5   (hex)		Converging Systems Inc.
-000000-000FFF     (base 16)		Converging Systems Inc.
-				32420 Nautilus Drive
-				Rancho Palos Verdes  CA  90275
-				US
-
-00-1B-C5   (hex)		GORAMO - Janusz Gorecki
-002000-002FFF     (base 16)		GORAMO - Janusz Gorecki
-				ul. Szancowa 82
-				    PL 01-458
-				PL
-
-00-1B-C5   (hex)		Dalaj Electro-Telecom
-008000-008FFF     (base 16)		Dalaj Electro-Telecom
-				1st Floor, Confidence Insurance Building
-				Akure  Ondo  2341
-				NG
-
-70-B3-D5   (hex)		Tempris GmbH
-539000-539FFF     (base 16)		Tempris GmbH
-				Industriestr. 7
-				Holzkirchen    83607
-				DE
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-057000-057FFF     (base 16)		RCH ITALIA SPA 
-				VIA CENDON 39
-				SILEA   TREVISO   31057
-				IT
-
-70-B3-D5   (hex)		ELA INNOVATION
-C76000-C76FFF     (base 16)		ELA INNOVATION
-				297 RUE MAURICE BEJART
-				MONTPELLIER    34080
-				FR
-
-70-B3-D5   (hex)		AB PRECISION (POOLE) LTD
-064000-064FFF     (base 16)		AB PRECISION (POOLE) LTD
-				1 FLEETS LANE
-				POOLE  DORSET  BH15 3BZ
-				GB
-
-70-B3-D5   (hex)		Schneider Electric Motion USA
-ACC000-ACCFFF     (base 16)		Schneider Electric Motion USA
-				370 N. Main St.
-				Marlborough  CT  06447
-				US
-
-70-B3-D5   (hex)		NIDEC LEROY-SOMER
-780000-780FFF     (base 16)		NIDEC LEROY-SOMER
-				Boulevard Marcellin Leroy zone industriel angoulême
-				Angoulême    16800
-				FR
-
-70-B3-D5   (hex)		ARROW (CHINA) ELECTRONICS TRADING CO., LTD.
-6AB000-6ABFFF     (base 16)		ARROW (CHINA) ELECTRONICS TRADING CO., LTD.
-				Floor 28, taikang financial building, building 1, yard 38, dongsanhuan north road, chaoyang district, Beijing
-				beijing  beijing  100033
-				CN
-
-70-B3-D5   (hex)		Shenzhen Chanslink Network Technology Co., Ltd
-49D000-49DFFF     (base 16)		Shenzhen Chanslink Network Technology Co., Ltd
-				Room 432, Block A,CMEC Plaza, Buji Road 1028
-				Shenzhen  Guangdong  518001
-				CN
-
-70-B3-D5   (hex)		Aloxy
-7BB000-7BBFFF     (base 16)		Aloxy
-				Sint-Pietersvliet 7
-				Antwerp    2000
-				BE
-
-70-B3-D5   (hex)		Umweltanalytik Holbach GmbH
-DD6000-DD6FFF     (base 16)		Umweltanalytik Holbach GmbH
-				Sperberweg 3
-				Wadern    66687
-				DE
-
-70-B3-D5   (hex)		Azmoon Keifiat
-41D000-41DFFF     (base 16)		Azmoon Keifiat
-				#3,19th Alley,Gandi Ave,Tehran
-				Tehran  Tehran  1517865314
-				IR
-
-70-B3-D5   (hex)		Becton Dickinson
-6B9000-6B9FFF     (base 16)		Becton Dickinson
-				7 Loveton Circle
-				Sparks  MD  21152
-				US
-
-70-B3-D5   (hex)		Changzhou Rapid Information Technology Co,Ltd
-E80000-E80FFF     (base 16)		Changzhou Rapid Information Technology Co,Ltd
-				Sanjing World Tech Park,3rd Floor,Bld NO3 NO.18huashan Road 
-				Changzhou  Jiangsu  213001
-				CN
-
-70-B3-D5   (hex)		SC3 Automation
-EE9000-EE9FFF     (base 16)		SC3 Automation
-				790 Principale Ouest
-				Magog  Quebec  J1X2B3
-				CA
-
-70-B3-D5   (hex)		Navaero Avionics AB
-045000-045FFF     (base 16)		Navaero Avionics AB
-				Forradsgatan 4
-				Sundsvall  Vasternorrland  85633
-				SE
-
-70-B3-D5   (hex)		ResIOT UBLSOFTWARE SRL
-DD4000-DD4FFF     (base 16)		ResIOT UBLSOFTWARE SRL
-				Ripa di Porta Ticinese, 39
-				Milano  Mi  20143
-				IT
-
-70-B3-D5   (hex)		AZ-TECHNOLOGY SDN BHD
-C69000-C69FFF     (base 16)		AZ-TECHNOLOGY SDN BHD
-				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
-				PETALING JAYA  SELANGOR  47301
-				MY
-
-70-B3-D5   (hex)		GTI Technologies Inc
-B5A000-B5AFFF     (base 16)		GTI Technologies Inc
-				12707 High Bluff Dr, ste 200
-				San Diego  CA  92130
-				US
-
-70-B3-D5   (hex)		JSC «SATIS-TL-94»
-CB9000-CB9FFF     (base 16)		JSC «SATIS-TL-94»
-				1, bld.2, Timiryazevskaya str. 
-				Moscow    127422
-				RU
-
-70-B3-D5   (hex)		Dynics
-B5E000-B5EFFF     (base 16)		Dynics
-				620 Technology Drive
-				Ann Arbor  MI  48108
-				US
-
-70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
-F3A000-F3AFFF     (base 16)		OOO Research and Production Center Computer Technologies
-				Komsomolsky avenue, 90-17
-				Perm  Perm Region  614010
-				RU
-
-70-B3-D5   (hex)		Icon Industrial Engineering
-662000-662FFF     (base 16)		Icon Industrial Engineering
-				Radio street, 24/2, office 101
-				Moscow  Moscow  105005
-				RU
-
-70-B3-D5   (hex)		Contec Americas Inc.
-392000-392FFF     (base 16)		Contec Americas Inc.
-				3991 Sarno Rd
-				Melbourne  FL  32934
-				US
-
-70-B3-D5   (hex)		Contec Americas Inc.
-D10000-D10FFF     (base 16)		Contec Americas Inc.
-				3991 Sarno Rd
-				Melbourne  FL  32934
-				US
-
-70-B3-D5   (hex)		Contec Americas Inc.
-8B7000-8B7FFF     (base 16)		Contec Americas Inc.
-				3991 Sarno Rd
-				Melbourne  FL  32934
-				US
-
-70-B3-D5   (hex)		NCE Network Consulting Engineering srl
-834000-834FFF     (base 16)		NCE Network Consulting Engineering srl
-				via Novaluce 42
-				Tremestieri Etneo  Catania  95030
-				IT
-
-70-B3-D5   (hex)		Mitsubishi Electric India Pvt. Ltd.
-797000-797FFF     (base 16)		Mitsubishi Electric India Pvt. Ltd.
-				EL3, J BLOCK, M.I.D.C. Bhosari
-				PUNE  Maharastra  411027
-				IN
-
-70-B3-D5   (hex)		Shanghai Brellet Telecommunication Technology Co., Ltd.
-9AF000-9AFFFF     (base 16)		Shanghai Brellet Telecommunication Technology Co., Ltd.
-				Building 2, No.5555, Shenzhuan Road, Songjiang District
-				Shanghai    201619
-				CN
-
-70-B3-D5   (hex)		e-Matix Corporation
-89D000-89DFFF     (base 16)		e-Matix Corporation
-				5812 Machine Drive
-				Huntington Beach  CA  92649
-				US
-
-70-B3-D5   (hex)		Guangdong Centnet Technology Co.,Ltd
-06A000-06AFFF     (base 16)		Guangdong Centnet Technology Co.,Ltd
-				Room403/410, 2nd Building, No 4 South of Industrial Rd, Songshan Lake industrial Park, 
-				Dongguan   Guangdong  523808
-				CN
-
-00-1B-C5   (hex)		Evondos Oy
-0AB000-0ABFFF     (base 16)		Evondos Oy
-				Salorankatu 5-7
-				Salo    24240
-				FI
-
-70-B3-D5   (hex)		Yuksek Kapasite Radyolink Sistemleri San. ve Tic. A.S.
-B9F000-B9FFFF     (base 16)		Yuksek Kapasite Radyolink Sistemleri San. ve Tic. A.S.
-				Ikitelli Osb Mah., TU Ikitelli Teknopark Sok. 1/Z18
-				Istanbul  Basaksehir  34490
-				TR
-
-70-B3-D5   (hex)		Talleres de Escoriaza SA
-26A000-26AFFF     (base 16)		Talleres de Escoriaza SA
-				Barrio Ventas, 35
-				Irun  Gipuzkoa  20305
-				ES
-
-70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
-843000-843FFF     (base 16)		OOO Research and Production Center Computer Technologies
-				Komsomolsky avenue, 90-17
-				Perm  Perm Region  614010
-				RU
-
-70-B3-D5   (hex)		Mettler Toledo
-BB2000-BB2FFF     (base 16)		Mettler Toledo
-				1571 Northpointe Parkway
-				Lutz  FL  33558
-				US
-
-70-B3-D5   (hex)		Mettler Toledo
-27E000-27EFFF     (base 16)		Mettler Toledo
-				1571 Northpointe Parkway
-				Lutz  FL  33558
-				US
-
-70-B3-D5   (hex)		S.E.I. CO.,LTD.
-12D000-12DFFF     (base 16)		S.E.I. CO.,LTD.
-				59 Nirayama Tada
-				Izunokuni  Shizuoka  4102133
-				JP
-
-70-B3-D5   (hex)		Code Blue Corporation
-74B000-74BFFF     (base 16)		Code Blue Corporation
-				259 Hedcor St.
-				Holland  MI  49423
-				US
-
-70-B3-D5   (hex)		Hangzhou Weimu Technology Co,.Ltd.
-6AE000-6AEFFF     (base 16)		Hangzhou Weimu Technology Co,.Ltd.
-				3 / f, building 1, yongle village, cangqian street, yuhang district
-				Hangzhou  Zhejiang  310000
-				CN
-
-70-B3-D5   (hex)		Semacon Business Machines
-5DF000-5DFFFF     (base 16)		Semacon Business Machines
-				7430 Trade Street
-				San Diego  CA  92121
-				US
-
-70-B3-D5   (hex)		CT Company
-50D000-50DFFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-70-B3-D5   (hex)		Pure Air Filtration
-0E7000-0E7FFF     (base 16)		Pure Air Filtration
-				6050 peachtree Pkwy
-				Norcross  GA  30092
-				US
-
-70-B3-D5   (hex)		DAVE SRL
-CAF000-CAFFFF     (base 16)		DAVE SRL
-				VIA TALPONEDO 29/A
-				PORCIA  PORDENONE  330850
-				IT
-
-70-B3-D5   (hex)		HighTechSystem Co.,Ltd.
-F53000-F53FFF     (base 16)		HighTechSystem Co.,Ltd.
-				1-16-7 Matsunami
-				 Yamagata-shi  Yamagata  990-0023
-				JP
-
-70-B3-D5   (hex)		Trident Systems Inc
-951000-951FFF     (base 16)		Trident Systems Inc
-				10201 Fairfax Blvd  Suite 300
-				Fairfax  VA  22030
-				US
-
-70-B3-D5   (hex)		Hangzhou landesker digital technology co. LTD
-50C000-50CFFF     (base 16)		Hangzhou landesker digital technology co. LTD
-				Gudun road Youpanshidai Center
-				Hangzhou  Zhejiang  310030
-				CN
-
-70-B3-D5   (hex)		Aug. Winkhaus GmbH & Co. KG
-0C3000-0C3FFF     (base 16)		Aug. Winkhaus GmbH & Co. KG
-				August-Winkhaus-Straße 31
-				Telgte  NRW  48291
-				DE
-
-70-B3-D5   (hex)		SMART IN OVATION GmbH
-A3D000-A3DFFF     (base 16)		SMART IN OVATION GmbH
-				Meitnerstraße 10
-				Stuttgart    70563
-				DE
-
-70-B3-D5   (hex)		PTS Technologies Pte Ltd
-CA5000-CA5FFF     (base 16)		PTS Technologies Pte Ltd
-				BLk 2, Kaki Bukit Ave 1 , #04-05
-				Singapore    417938
-				SG
-
-70-B3-D5   (hex)		HGL Dynamics Ltd
-021000-021FFF     (base 16)		HGL Dynamics Ltd
-				Hamilton Barr House, Bridge Mews
-				Godalming  Surrey  GU7 1HZ
-				GB
-
-70-B3-D5   (hex)		Cognosos, Inc.
-BE0000-BE0FFF     (base 16)		Cognosos, Inc.
-				1100 Spring St. NW, Suite 300A
-				Atlanta  GA  30309
-				US
-
-70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
-0F9000-0F9FFF     (base 16)		OOO Research and Production Center Computer Technologies
-				Komsomolsky avenue, 90-17
-				Perm  Perm Region  614010
-				RU
-
-70-B3-D5   (hex)		Nordmann International GmbH
-9A4000-9A4FFF     (base 16)		Nordmann International GmbH
-				Huobstrasse 10
-				Pfäffikon SZ    8808
-				CH
-
-70-B3-D5   (hex)		Orlaco Products B.V.
-074000-074FFF     (base 16)		Orlaco Products B.V.
-				Albert Plesmanstraat 42
-				Barneveld    3772MN
-				NL
-
-70-B3-D5   (hex)		ACQUA-SYSTEMS srls
-8F4000-8F4FFF     (base 16)		ACQUA-SYSTEMS srls
-				Via Italia 121
-				Marnate  Varese  21050
-				IT
-
-70-B3-D5   (hex)		ADMiTAS CCTV Taiwan Co. Ltd
-0CC000-0CCFFF     (base 16)		ADMiTAS CCTV Taiwan Co. Ltd
-				12F-3, No. 77 Xinpu 6th Street, Taoyuan District
-				Taoyuan      330
-				TW
-
-70-B3-D5   (hex)		Zhuhai Lonl electric Co.,Ltd.
-EA9000-EA9FFF     (base 16)		Zhuhai Lonl electric Co.,Ltd.
-				2nd floor, building B3, nanfang software park, xiangzhou district
-				Zhuhai  Guangdong   519000
-				CN
-
-70-B3-D5   (hex)		PolyTech A/S
-F4C000-F4CFFF     (base 16)		PolyTech A/S
-				HI Park 445
-				Herning  Herning  7400
-				DK
-
-70-B3-D5   (hex)		Shanghai Tiancheng Communication Technology Corporation
-1C3000-1C3FFF     (base 16)		Shanghai Tiancheng Communication Technology Corporation
-				No.618,Guangxing Rd.,Songjiang 
-				shanghai    200090
-				CN
-
-70-B3-D5   (hex)		T&M Media Pty Ltd
-B41000-B41FFF     (base 16)		T&M Media Pty Ltd
-				6, 476 Gardeners Road
-				Alexandria  NSW  2015
-				AU
-
-70-B3-D5   (hex)		SAMBO HITECH
-282000-282FFF     (base 16)		SAMBO HITECH
-				469,Seokjung-ro,Namdong-Gu
-				Incheon    21501
-				KR
-
-70-B3-D5   (hex)		M.A.C. Solutions (UK) Ltd
-F9F000-F9FFFF     (base 16)		M.A.C. Solutions (UK) Ltd
-				Units 6-7 Kingfisher Business Park, Arthur Street
-				Redditch  Worcestershire  B98 8LG
-				GB
-
-70-B3-D5   (hex)		Shenzhen CAMERAY ELECTRONIC CO., LTD
-1E2000-1E2FFF     (base 16)		Shenzhen CAMERAY ELECTRONIC CO., LTD
-				4-5FL, Building 1, Guanghui Science, and Technology Park; Minqing Road, Longhua Town
-				shenzhen  GD  518109
-				CN
-
-70-B3-D5   (hex)		Vulcan Wireless Inc.
-E4D000-E4DFFF     (base 16)		Vulcan Wireless Inc.
-				2218 Faraday Ave Suite 110
-				Carlsbad  CA  92008
-				US
-
-70-B3-D5   (hex)		ERA TOYS LIMITED
-193000-193FFF     (base 16)		ERA TOYS LIMITED
-				Room 505, 5th Floor, Beverley Commercial Centre, 87-105 Chatham Road South
-				Tsim Sha Tsui  Kowloon  0000
-				HK
-
-70-B3-D5   (hex)		Scorpion Precision Industry (HK)CO. Ltd.
-02B000-02BFFF     (base 16)		Scorpion Precision Industry (HK)CO. Ltd.
-				16th Floor, Excelsior Industrial Building,68-76 Sha Tsui Road,
-				Tsuen Wan  New Territories  999077
-				HK
-
-70-B3-D5   (hex)		Cryptotronix LLC
-0DB000-0DBFFF     (base 16)		Cryptotronix LLC
-				P.O. Box 273029
-				Fort Collins  CO  80525
-				US
-
-70-B3-D5   (hex)		MIVO Technology AB
-1D5000-1D5FFF     (base 16)		MIVO Technology AB
-				Hornsbergsvägen 28
-				Stockholm    11215
-				SE
-
-70-B3-D5   (hex)		A&T Corporation
-32E000-32EFFF     (base 16)		A&T Corporation
-				2023-1
-				Endo, Fujisawa, Kanagawa    252-0816
-				JP
-
-70-B3-D5   (hex)		TOMEI TSUSHIN KOGYO CO,.LTD
-FB1000-FB1FFF     (base 16)		TOMEI TSUSHIN KOGYO CO,.LTD
-				100-3, Amaike Kodacho
-				Inazawa Shi  Aichi ken  4928274
-				JP
-
-70-B3-D5   (hex)		DogWatch Inc
-1E7000-1E7FFF     (base 16)		DogWatch Inc
-				10 Michigan Drive
-				Natick    01760
-				US
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-C09000-C09FFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		Copper Labs, Inc.
-F69000-F69FFF     (base 16)		Copper Labs, Inc.
-				3015 Sterling Circle #200
-				Boulder  CO  80301
-				US
-
-70-B3-D5   (hex)		SHENZHEN HUINENGYUAN Technology Co., Ltd
-A83000-A83FFF     (base 16)		SHENZHEN HUINENGYUAN Technology Co., Ltd
-				Room 206, 3 Building, Hongwanchuangke Center, Gushu, Xixiang, Baoan District
-				Shenzhen  Guangdong  518126
-				CN
-
-70-B3-D5   (hex)		Vars Technology 
-C94000-C94FFF     (base 16)		Vars Technology 
-				Squires gate industrial estate Unit 14
-				Blackpool  lancashire   FY4 3RN
-				GB
-
-70-B3-D5   (hex)		Burk Technology
-641000-641FFF     (base 16)		Burk Technology
-				7 Beaver Brook road
-				Littleton  MA  01460
-				US
-
-70-B3-D5   (hex)		Inventeq B.V.
-529000-529FFF     (base 16)		Inventeq B.V.
-				Ravenlaan 27
-				Blaricum    1261WT
-				NL
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-B75000-B75FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		ITsynergy Ltd
-D2A000-D2AFFF     (base 16)		ITsynergy Ltd
-				9 Bonhill Street
-				London    EC2A 4DJ
-				GB
-
-70-B3-D5   (hex)		Vaunix Technology Corporation
-EE6000-EE6FFF     (base 16)		Vaunix Technology Corporation
-				7 New Pasture Rd
-				Newburyport  MA  01950
-				US
-
-70-B3-D5   (hex)		chargeBIG
-869000-869FFF     (base 16)		chargeBIG
-				Pragstraße 26-46
-				Stuttgart    70376
-				DE
-
-70-B3-D5   (hex)		Portrait Displays, Inc.
-D77000-D77FFF     (base 16)		Portrait Displays, Inc.
-				6663 OWENS DR
-				PLEASANTON  CA  94588
-				US
-
-70-B3-D5   (hex)		Sprintshield d.o.o.
-B03000-B03FFF     (base 16)		Sprintshield d.o.o.
-				Marina Getaldi?a 3
-				Velika Gorica    10410
-				HR
-
-70-B3-D5   (hex)		Tricom Research Inc.
-601000-601FFF     (base 16)		Tricom Research Inc.
-				17791 Sky Park Circle Suite GHJ
-				Irvine  CA  92614
-				US
-
-70-B3-D5   (hex)		Mictrotrac Retsch GmbH
-F09000-F09FFF     (base 16)		Mictrotrac Retsch GmbH
-				Retsch-Allee 1-5
-				Haan  NRW  42781
-				DE
-
-70-B3-D5   (hex)		KeyProd
-473000-473FFF     (base 16)		KeyProd
-				66 avenue des Champs Elysées
-				Paris    77008
-				FR
-
-70-B3-D5   (hex)		WARECUBE,INC
-AD3000-AD3FFF     (base 16)		WARECUBE,INC
-				#A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu
-				Suwon-si    16648
-				KR
-
-70-B3-D5   (hex)		myUpTech AB
-FC3000-FC3FFF     (base 16)		myUpTech AB
-				Box 14
-				Markaryd    28532
-				SE
-
-70-B3-D5   (hex)		Scharco Elektronik GmbH
-C72000-C72FFF     (base 16)		Scharco Elektronik GmbH
-				Tilsiter Strasse 8
-				Wuppertal  NRW  42277
-				DE
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-6D7000-6D7FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		EarTex
-E01000-E01FFF     (base 16)		EarTex
-				41 Corsham Street
-				London  England  N1 6DR
-				GB
-
-70-B3-D5   (hex)		AVL DiTEST GmbH
-78D000-78DFFF     (base 16)		AVL DiTEST GmbH
-				Alte Poststrasse 156
-				Graz    8020
-				AT
-
-70-B3-D5   (hex)		TextSpeak Corporation
-F0E000-F0EFFF     (base 16)		TextSpeak Corporation
-				55 Greensfarm RD 2nd Flr 200-69
-				Westport  CT  06880
-				US
-
-70-B3-D5   (hex)		Techimp - Altanova group Srl
-6DB000-6DBFFF     (base 16)		Techimp - Altanova group Srl
-				via Toscana 11/C
-				Zola Predosa  Bologna  40069
-				IT
-
-70-B3-D5   (hex)		HongSeok Ltd.
-30A000-30AFFF     (base 16)		HongSeok Ltd.
-				166, Osan-ro, Osan-myeon
-				Iksan-si  Jeollabuk-do  54670
-				KR
-
-70-B3-D5   (hex)		WAYNE ANALYTICS LLC
-301000-301FFF     (base 16)		WAYNE ANALYTICS LLC
-				100 Rialto Place, Suite 721
-				MELBOURNE  FL  32901
-				US
-
-70-B3-D5   (hex)		GS Elektromedizinsiche Geräte G. Stemple GmbH
-3D3000-3D3FFF     (base 16)		GS Elektromedizinsiche Geräte G. Stemple GmbH
-				Hauswiesenstr. 26
-				Kaufering  Bayern  86916
-				DE
-
-70-B3-D5   (hex)		Hunan Lianzhong Technology Co.,Ltd.
-F4E000-F4EFFF     (base 16)		Hunan Lianzhong Technology Co.,Ltd.
-				5th Floor, Chuangye Building, Economic and Technological Development Zone,
-				Loudi  Hunan   417000
-				CN
-
-70-B3-D5   (hex)		Diretta
-C90000-C90FFF     (base 16)		Diretta
-				3-4-9 HigashiKomagata Sumida-ku
-				Tokyo    1300005
-				JP
-
-70-B3-D5   (hex)		RoomMate AS
-E1C000-E1CFFF     (base 16)		RoomMate AS
-				Hamangskogen 60
-				Sandvika  -  1338
-				NO
-
-70-B3-D5   (hex)		DARBS Inc.
-63F000-63FFFF     (base 16)		DARBS Inc.
-				#153, #154, 65 Techno 3-ro
-				Daejeon  Yuseong-gu  34016
-				KR
-
-70-B3-D5   (hex)		KODENSHI CORP.
-DBA000-DBAFFF     (base 16)		KODENSHI CORP.
-				161,Jyuichi,Makishima
-				UJI  KYOTO  6110041
-				JP
-
-70-B3-D5   (hex)		Sequent AG
-291000-291FFF     (base 16)		Sequent AG
-				Eptingerstrasse 3
-				Basel    4052
-				CH
-
-70-B3-D5   (hex)		Profusion Limited
-29A000-29AFFF     (base 16)		Profusion Limited
-				Aviation Way
-				Southend on Sea  Essex  SS2 6UN
-				GB
-
-70-B3-D5   (hex)		ID Quantique SA
-657000-657FFF     (base 16)		ID Quantique SA
-				3 chemin de la marbrerie
-				Carouge    1227
-				CH
-
-70-B3-D5   (hex)		CDS Institute of Management Strategy, Inc.
-3A3000-3A3FFF     (base 16)		CDS Institute of Management Strategy, Inc.
-				Fukuyoshi-cho Billding 7F, Roppongi 2-2-6
-				MINATO-KU  TOKYO  1060032
-				JP
-
-70-B3-D5   (hex)		BIT Group USA, Inc.
-C75000-C75FFF     (base 16)		BIT Group USA, Inc.
-				15870 Bernardo center drive 
-				San Diego   CA  92127
-				US
-
-70-B3-D5   (hex)		Zeus Control Systems Ltd
-E73000-E73FFF     (base 16)		Zeus Control Systems Ltd
-				1-4 Alexander House Station Road
-				Nuneaton    CV13 0PE
-				GB
-
-70-B3-D5   (hex)		Beijing Lihong Create Co., Ltd.
-ED3000-ED3FFF     (base 16)		Beijing Lihong Create Co., Ltd.
-				Changping, Zhenxinglu. 46
-				Beijing    102299
-				CN
-
-70-B3-D5   (hex)		Integra Metering SAS
-B6F000-B6FFFF     (base 16)		Integra Metering SAS
-				12 rue Font Grasse
-				Blagnac    31700
-				FR
-
-70-B3-D5   (hex)		AXING AG
-263000-263FFF     (base 16)		AXING AG
-				Gewerbehaus Moskau
-				Ramsen    8262
-				CH
-
-70-B3-D5   (hex)		K&A Electronics Inc.
-9E4000-9E4FFF     (base 16)		K&A Electronics Inc.
-				2609 Pinelawn dr.
-				La Crescenta  CA  91214
-				US
-
-70-B3-D5   (hex)		Paramount Bed Holdings Co., Ltd.
-8F1000-8F1FFF     (base 16)		Paramount Bed Holdings Co., Ltd.
-				2-14-5. Higashisuna
-				 Koto-ku  Tokyo  136-8671
-				JP
-
-70-B3-D5   (hex)		Schneider Electric Motion USA
-33D000-33DFFF     (base 16)		Schneider Electric Motion USA
-				370 N. Main St.
-				Marlborough  CT  06447
-				US
-
-70-B3-D5   (hex)		Wired Broadcast Ltd
-177000-177FFF     (base 16)		Wired Broadcast Ltd
-				 Berol House, 25 Ashley Road
-				LONDON  County (optional)  N17 9LJ
-				GB
-
-70-B3-D5   (hex)		Indutherm Giesstechnologie GmbH
-8DE000-8DEFFF     (base 16)		Indutherm Giesstechnologie GmbH
-				Brettener Straße 32
-				Walzbachtal  Baden-Württemberg  75045
-				DE
-
-70-B3-D5   (hex)		MAHLE ELECTRONICS, SLU
-8BD000-8BDFFF     (base 16)		MAHLE ELECTRONICS, SLU
-				CTRA.MADRID-VALENCIA,KM.196
-				MOTILLA DEL PALANCAR  CUENCA  16200
-				ES
-
-70-B3-D5   (hex)		Intermobility
-6AA000-6AAFFF     (base 16)		Intermobility
-				Gabelle 18a
-				Bienne  berne  2503
-				CH
-
-70-B3-D5   (hex)		BRS Sistemas Eletrônicos
-D97000-D97FFF     (base 16)		BRS Sistemas Eletrônicos
-				Rua Gomes de Freitas, 491/204
-				Porto Alegre - RS  (Non U.S.)  91380-000
-				BR
-
-70-B3-D5   (hex)		2M Technology
-F7D000-F7DFFF     (base 16)		2M Technology
-				802 Greenview Drive 
-				Grand Prairie  TX  75050
-				US
-
-70-B3-D5   (hex)		DogWatch Inc
-567000-567FFF     (base 16)		DogWatch Inc
-				10 Michigan Drive
-				Natick  MA  01760
-				US
-
-70-B3-D5   (hex)		Ideas srl
-B63000-B63FFF     (base 16)		Ideas srl
-				Via dei Brughi, 21
-				Gessate  Milan  20060
-				IT
-
-70-B3-D5   (hex)		Invert Robotics Ltd.
-FC7000-FC7FFF     (base 16)		Invert Robotics Ltd.
-				Unit A, 235 Annex Road
-				Christchurch    8024
-				NZ
-
-70-B3-D5   (hex)		MPM Micro Präzision Marx GmbH
-F60000-F60FFF     (base 16)		MPM Micro Präzision Marx GmbH
-				Neuenweiherstraße 19
-				Erlangen  Deutschland  91056
-				DE
-
-70-B3-D5   (hex)		DOLBY LABORATORIES, INC.
-73A000-73AFFF     (base 16)		DOLBY LABORATORIES, INC.
-				100 Potrero Avenue
-				San Francisco  CA  94103-4938
-				US
-
-70-B3-D5   (hex)		Underground Systems, Inc.
-424000-424FFF     (base 16)		Underground Systems, Inc.
-				3A Trowbridge Drive
-				Bethel  CT  06801
-				US
-
-70-B3-D5   (hex)		AERIAL CAMERA SYSTEMS Ltd
-FC4000-FC4FFF     (base 16)		AERIAL CAMERA SYSTEMS Ltd
-				3 The Merlin Centre, Lancaster Road,
-				HIGH WYCOMBE    HP12 3QL
-				GB
-
-70-B3-D5   (hex)		TUALCOM ELEKTRONIK A.S.
-4A3000-4A3FFF     (base 16)		TUALCOM ELEKTRONIK A.S.
-				Mustafa Kemal mah.
-				ANKARA    06530
-				TR
-
-70-B3-D5   (hex)		Shanghai Jupper Technology Co.Ltd
-157000-157FFF     (base 16)		Shanghai Jupper Technology Co.Ltd
-				Room511,building D10, Lane 3188, Xiupu road, Pudong New District
-				Shanghai    201315
-				CN
-
-70-B3-D5   (hex)		Kron Medidores
-C1E000-C1EFFF     (base 16)		Kron Medidores
-				Rua Alexandre de Gusmão, 278
-				São Paulo  São Paulo  04760-020
-				BR
-
-70-B3-D5   (hex)		IK MULTIMEDIA PRODUCTION SRL
-2FB000-2FBFFF     (base 16)		IK MULTIMEDIA PRODUCTION SRL
-				Via dell'Industria 46
-				Modena  Italy  41122
-				IT
-
-70-B3-D5   (hex)		Hensoldt Sensors GmbH
-2D3000-2D3FFF     (base 16)		Hensoldt Sensors GmbH
-				Woerthstrasse 85
-				Ulm  Baden-Wuerttemberg  89081
-				DE
-
-70-B3-D5   (hex)		Autonomic Controls, Inc.
-BC7000-BC7FFF     (base 16)		Autonomic Controls, Inc.
-				28 Kaysal Ct
-				ARMONK  NY  10504
-				US
-
-70-B3-D5   (hex)		CYG CONTRON CO.LTD
-A8C000-A8CFFF     (base 16)		CYG CONTRON CO.LTD
-				BUILDING A.NO.11 OF THE 6TH TECHNOGY ROAD,PHASE III OF TECNOLOGY INNOVATION COAST,ZHUHAI NATIONAL HI-TECH INDUSTRIES DEVELOPMENT ZONE
-				Zhuhai    519000
-				CN
-
-70-B3-D5   (hex)		Thermo Fisher Scientific Inc.
-D96000-D96FFF     (base 16)		Thermo Fisher Scientific Inc.
-				Thermo Fisher Scientific Inc.
-				Shanghai  Shanghai  201206
-				CN
-
-70-B3-D5   (hex)		S-Rain Control A/S
-B68000-B68FFF     (base 16)		S-Rain Control A/S
-				Oldenvej 6
-				Kvistgård  Copenhagen  DK-3490
-				DK
-
-70-B3-D5   (hex)		LIGPT
-D14000-D14FFF     (base 16)		LIGPT
-				167, Jukdong-ro
-				Daejeon   Yuseong-gu  34127
-				KR
-
-70-B3-D5   (hex)		Royal Engineering Consultancy Private Limited
-34F000-34FFFF     (base 16)		Royal Engineering Consultancy Private Limited
-				203 2nd Floor Jyoti Building 66 Nehru Place
-				New Delhi    110019
-				IN
-
-70-B3-D5   (hex)		Melissa Climate Jsc
-2DD000-2DDFFF     (base 16)		Melissa Climate Jsc
-				Gen. Gurko 4 Street
-				Sofia    1000
-				BG
-
-70-B3-D5   (hex)		Innoknight
-AE8000-AE8FFF     (base 16)		Innoknight
-				Rm. 1A2-A01, No. 1, Lixing 1st Rd., East Dist., Hsinchu City 300, Taiwan (R.O.C.)
-				Hsinchu    300
-				TW
-
-70-B3-D5   (hex)		NUBURU Inc.
-DC7000-DC7FFF     (base 16)		NUBURU Inc.
-				7442 S. Tucson Way
-				Centennial  CO  80112
-				US
-
-70-B3-D5   (hex)		Vigorcloud Co., Ltd.
-A3E000-A3EFFF     (base 16)		Vigorcloud Co., Ltd.
-				3F., No. 11, Xinpo 1st St., Xindian Dist.,
-				New Taipei City    231
-				TW
-
-70-B3-D5   (hex)		Tornado Modular Systems
-40C000-40CFFF     (base 16)		Tornado Modular Systems
-				Inzhenernaya st. 4a
-				Novosibirsk  Novosibirsk  630128
-				RU
-
-70-B3-D5   (hex)		SECUREAN CO.,Ltd
-10B000-10BFFF     (base 16)		SECUREAN CO.,Ltd
-				danny@securean.com
-				Incheon  2nd floor, 16 Giljuro, Seogu  22793
-				KR
-
-70-B3-D5   (hex)		Projects Unlimited Inc.
-7C5000-7C5FFF     (base 16)		Projects Unlimited Inc.
-				6300 Sand Lake Road
-				Dayton  OH  45414
-				US
-
-70-B3-D5   (hex)		RFHIC
-25E000-25EFFF     (base 16)		RFHIC
-				41-14, Burim-ro 170beon-gil
-				Dongan-gu, Anyang-si  Gyeonggi-do  14055
-				KR
-
-70-B3-D5   (hex)		Hilo
-B86000-B86FFF     (base 16)		Hilo
-				4-6 Kiprou str
-				Tavros  Athens  17778
-				GR
-
-70-B3-D5   (hex)		Federated Wireless, Inc. 
-E22000-E22FFF     (base 16)		Federated Wireless, Inc. 
-				4301 North Fairfax Drive, Suite 310 
-				Arlington   VA  22203
-				US
-
-70-B3-D5   (hex)		Nocix, LLC
-BE2000-BE2FFF     (base 16)		Nocix, LLC
-				201 East 16th Ave
-				North Kansas City  MO  64116
-				US
-
-70-B3-D5   (hex)		ADDE
-79C000-79CFFF     (base 16)		ADDE
-				21 impasse frédéric faÿs
-				Villeurbanne    69100
-				FR
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-F6B000-F6BFFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Servotronix Motion Control
-B0E000-B0EFFF     (base 16)		Servotronix Motion Control
-				21C Yagia Kapayim st.
-				Petach Tikva     49130
-				IL
-
-70-B3-D5   (hex)		Matrix Telematics Limited
-B83000-B83FFF     (base 16)		Matrix Telematics Limited
-				Merlin Court, Atlantic Street
-				Altrincham  Cheshire  WA14 5NL
-				GB
-
-70-B3-D5   (hex)		STACKFORCE GmbH
-E87000-E87FFF     (base 16)		STACKFORCE GmbH
-				Biengener Str. 3
-				Eschbach    79427
-				DE
-
-70-B3-D5   (hex)		Qlinx Technologies
-EC9000-EC9FFF     (base 16)		Qlinx Technologies
-				1717 N Street NW Ste 1
-				Washington  DC  20036
-				US
-
-70-B3-D5   (hex)		Pantherun Technologies Pvt Ltd
-B14000-B14FFF     (base 16)		Pantherun Technologies Pvt Ltd
-				311 6th main road Hal 2nd stage
-				Bangalore  Karnataka  560038
-				IN
-
-70-B3-D5   (hex)		Liberator Pty Ltd
-561000-561FFF     (base 16)		Liberator Pty Ltd
-				265?Gilbert Street
-				Adelaide     SA 5000
-				AU
-
-70-B3-D5   (hex)		EASTERN SCIENCE & TECHNOLOGY CO., LTD
-2DF000-2DFFFF     (base 16)		EASTERN SCIENCE & TECHNOLOGY CO., LTD
-				6F.,No.963, Zhongzheng Rd, Zhonghe Dist.
-				New Taipei City    235
-				TW
-
-70-B3-D5   (hex)		Imenco Ltd
-3D1000-3D1FFF     (base 16)		Imenco Ltd
-				Campus 1 Innovation Park, Balgownie Road
-				Bridge of Don  Aberdeen  AB22 8GT
-				GB
-
-70-B3-D5   (hex)		Contec Americas Inc.
-883000-883FFF     (base 16)		Contec Americas Inc.
-				3991 Sarno Rd
-				Melbourne  FL  32934
-				US
-
-70-B3-D5   (hex)		Hon Hai Precision IND.CO.,LTD
-B45000-B45FFF     (base 16)		Hon Hai Precision IND.CO.,LTD
-				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
-				TAIPEI  TAIWAN  33859
-				CN
-
-70-B3-D5   (hex)		International Super Computer Co., Ltd.
-806000-806FFF     (base 16)		International Super Computer Co., Ltd.
-				807-3, 8 / F, block F, No. 9, Shangdi Third Street, Haidian District
-				Beijing    100085
-				CN
-
-70-B3-D5   (hex)		Rivercity Innovations Ltd.
-156000-156FFF     (base 16)		Rivercity Innovations Ltd.
-				116 Research Drive, Suit 217
-				Saskatoon  Saskatchewan  S7N 3R3
-				CA
-
-70-B3-D5   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
-D50000-D50FFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
-				10545 Hardin Valley Rd
-				Knoxville  TN  37932
-				US
-
-70-B3-D5   (hex)		myenergi Ltd
-3A6000-3A6FFF     (base 16)		myenergi Ltd
-				Church View Business Centre, Binbrook
-				Market Rasen  Lincolnshire  LN8 6BY
-				GB
-
-70-B3-D5   (hex)		eumig industrie-TV GmbH.
-C46000-C46FFF     (base 16)		eumig industrie-TV GmbH.
-				Gewerbeparkstrasse 9
-				Anif  Salzburg  5081
-				AT
-
-70-B3-D5   (hex)		IWS Global Pty Ltd
-8F9000-8F9FFF     (base 16)		IWS Global Pty Ltd
-				29 Oxleigh Dr
-				Perth  Western Australia  6090
-				AU
-
-70-B3-D5   (hex)		SERTEC SRL
-621000-621FFF     (base 16)		SERTEC SRL
-				VIA LOMBARDIA, 7/8
-				BUSSOLENGO   VERONA  37012
-				IT
-
-70-B3-D5   (hex)		QDevil
-921000-921FFF     (base 16)		QDevil
-				Fruebjergvej 3
-				København Ø    2100
-				DK
-
-70-B3-D5   (hex)		Macromatic Industrial Controls, Inc.
-118000-118FFF     (base 16)		Macromatic Industrial Controls, Inc.
-				W134N5345 Campbell Drive
-				Menomonee Falls  WI  53051
-				US
-
-70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
-4C3000-4C3FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-70-B3-D5   (hex)		YDK Technologies Co.,Ltd
-7F0000-7F0FFF     (base 16)		YDK Technologies Co.,Ltd
-				Minami Shinjuku Hoshino Bldg.  5-23-13 Sendagaya
-				Shibuya-ku  Tokyo  151-0051
-				JP
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-A1B000-A1BFFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-BEB000-BEBFFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		EkspertStroyProekt LLC
-DE9000-DE9FFF     (base 16)		EkspertStroyProekt LLC
-				office 400, str.61, d.2/4, Luzhnetskaya nab.
-				Moscow  Moscow  119270
-				RU
-
-70-B3-D5   (hex)		GSP Sprachtechnologie GmbH
-93C000-93CFFF     (base 16)		GSP Sprachtechnologie GmbH
-				Teltowkanalstraße 1
-				Berlin    12247
-				DE
-
-70-B3-D5   (hex)		GUNMA ELECTRONICS CO LTD
-64F000-64FFFF     (base 16)		GUNMA ELECTRONICS CO LTD
-				760 OOMAMA
-				MIDORI-CITY  GUNMA  376-0101
-				JP
-
-70-B3-D5   (hex)		Velvac Incorporated
-4DD000-4DDFFF     (base 16)		Velvac Incorporated
-				2183 Alpine Way
-				Bellingham  WA  98226
-				US
-
-70-B3-D5   (hex)		Digitella Inc.
-D03000-D03FFF     (base 16)		Digitella Inc.
-				2F, Banpodaero 99
-				Seocho-gu  Seoul  06657
-				KR
-
-70-B3-D5   (hex)		Twoway Communications, Inc.
-41C000-41CFFF     (base 16)		Twoway Communications, Inc.
-				41 Wu Kung 6 Rd., New Taipei Industrial Park, New Taipei City,24891,Taiwan,R.O.C.
-				New Taipei city  Taipei  24891
-				TW
-
-70-B3-D5   (hex)		B2cloud lda
-29E000-29EFFF     (base 16)		B2cloud lda
-				Urbanizacao do correlo 4,14
-				Gandra  Paredes  4585-362
-				PT
-
-70-B3-D5   (hex)		Elman srl
-B2C000-B2CFFF     (base 16)		Elman srl
-				Via di Valle Caia, km 4.700
-				Pomezia  Roma  00040
-				IT
-
-70-B3-D5   (hex)		Power Electronics Espana, S.L.
-BDB000-BDBFFF     (base 16)		Power Electronics Espana, S.L.
-				PI Pla de Carrases, CV-35 Salida 30Salida 30-
-				lliria  Valencia  46160
-				ES
-
-70-B3-D5   (hex)		AADONA Communication Pvt Ltd
-ED9000-ED9FFF     (base 16)		AADONA Communication Pvt Ltd
-				1st Floor, Phoenix Tech Tower, Plot No. 14/46, IDA - Uppal
-				Hyderabad  Telangana  500039
-				IN
-
-70-B3-D5   (hex)		Eon
-E62000-E62FFF     (base 16)		Eon
-				415, Heungan-daero, Dongan-gu, Anyang-si, Gyeonggi-do, Republic of Korea
-				Anyang-si  Gyeonggi-do  KS009
-				KR
-
-70-B3-D5   (hex)		ARINAX
-6CC000-6CCFFF     (base 16)		ARINAX
-				259 rue du Rocher de Lorzier
-				MOIRANS    38430
-				FR
-
-70-B3-D5   (hex)		NOREYA Technology e.U.
-A79000-A79FFF     (base 16)		NOREYA Technology e.U.
-				Parkring 1
-				Raaba-Grambach  Styria  8074
-				AT
-
-70-B3-D5   (hex)		Motohaus Powersports Limited
-98D000-98DFFF     (base 16)		Motohaus Powersports Limited
-				Motohaus Powersports Limited, 1a Rose Estate Osborn Way
-				Hook    RG27 9UT
-				GB
-
-70-B3-D5   (hex)		IMMOLAS
-792000-792FFF     (base 16)		IMMOLAS
-				Aleje Jerozolimskie 85/21
-				Warszawa    02-001
-				PL
-
-70-B3-D5   (hex)		EVPU Defence a.s.
-04F000-04FFFF     (base 16)		EVPU Defence a.s.
-				Jaktare 1781
-				Uherske Hradiste    686 01
-				CZ
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-5A4000-5A4FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		NAL Research Corporation
-1B0000-1B0FFF     (base 16)		NAL Research Corporation
-				11100 Endeavor Ct, Suite 300
-				Manassas  VA  20109
-				US
-
-70-B3-D5   (hex)		LLC NTZ Mekhanotronika
-6C0000-6C0FFF     (base 16)		LLC NTZ Mekhanotronika
-				Pionerstroya, build 23a
-				Saint-Petersburg    198206
-				RU
-
-70-B3-D5   (hex)		AXING AG
-CA6000-CA6FFF     (base 16)		AXING AG
-				Gewerbehaus Moskau
-				Ramsen    8262
-				CH
-
-70-B3-D5   (hex)		Akse srl
-128000-128FFF     (base 16)		Akse srl
-				Via Aldo Moro, 39
-				Reggio Emilia  Italy  42124
-				IT
-
-70-B3-D5   (hex)		PNETWORKS
-EF0000-EF0FFF     (base 16)		PNETWORKS
-				TEKNOPARK Bul. 1/1A No: 201 Pendik ?stanbul
-				Istanbul    34906
-				TR
-
-70-B3-D5   (hex)		Arwin Technology Limited
-8C9000-8C9FFF     (base 16)		Arwin Technology Limited
-				Unit 215, 2/F, 19W, 19 Science Park West Avenue
-				Hong Kong    0
-				HK
-
-70-B3-D5   (hex)		Herholdt Controls srl
-C6B000-C6BFFF     (base 16)		Herholdt Controls srl
-				Via Mestre 13
-				Milan    20132
-				IT
-
-70-B3-D5   (hex)		Atlas Lighting Products
-CB5000-CB5FFF     (base 16)		Atlas Lighting Products
-				1406 S Mebane St
-				Burlington    27215
-				US
-
-70-B3-D5   (hex)		Weble Sàrl
-96C000-96CFFF     (base 16)		Weble Sàrl
-				Rue du Jura 12
-				Bussigny  Vaud  1030
-				CH
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-CE8000-CE8FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		G.S.D GROUP INC.
-B01000-B01FFF     (base 16)		G.S.D GROUP INC.
-				2010 RUE MICHELIN, SUITE 100
-				LAVAL  Quebec  H7L 5C2
-				CA
-
-70-B3-D5   (hex)		Medicomp, Inc
-F7C000-F7CFFF     (base 16)		Medicomp, Inc
-				600 Atlantis Rd
-				Melbourne  FL  32904
-				US
-
-70-B3-D5   (hex)		DIC Corporation
-5C3000-5C3FFF     (base 16)		DIC Corporation
-				DIC Building,7-20,Nihonbashi 3-chome
-				Chuo-ku,Tokyo    103-8233
-				JP
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-CAD000-CADFFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Sono-Tek Corporation
-5C2000-5C2FFF     (base 16)		Sono-Tek Corporation
-				2012 Rte. 9W Bldg 3
-				Milton  NY  12547
-				US
-
-70-B3-D5   (hex)		Davitor AB
-E60000-E60FFF     (base 16)		Davitor AB
-				Skordarevagen 5
-				Kalmar    39353
-				SE
-
-70-B3-D5   (hex)		Shenzhen Rongda Computer Co.,Ltd
-289000-289FFF     (base 16)		Shenzhen Rongda Computer Co.,Ltd
-				905, Block B, DuoCaiKeChuan Park, No.5 Guanle Road
-				Longhua District  Shenzhen, Guangdong    518110
-				CN
-
-70-B3-D5   (hex)		Breas Medical AB
-CF9000-CF9FFF     (base 16)		Breas Medical AB
-				Företagsvägen 1
-				Mölnlycke    SE-435 33
-				SE
-
-70-B3-D5   (hex)		European Synchrotron Radiation Facility
-160000-160FFF     (base 16)		European Synchrotron Radiation Facility
-				71, avenue des Martyrs
-				Grenoble  Isère  38000
-				FR
-
-70-B3-D5   (hex)		Radian Research, Inc.
-9BC000-9BCFFF     (base 16)		Radian Research, Inc.
-				3852 Fortune Drive
-				Lafayette  IN  47905
-				US
-
-70-B3-D5   (hex)		Coloet S.r.l.
-713000-713FFF     (base 16)		Coloet S.r.l.
-				Via Mascheroni, 20
-				MILANO  Italy  20145
-				IT
-
-70-B3-D5   (hex)		meoENERGY
-7FA000-7FAFFF     (base 16)		meoENERGY
-				Glacisstraße 9/1
-				Graz    8010
-				AT
-
-70-B3-D5   (hex)		VERTEL DIGITAL PRIVATE LIMITED
-912000-912FFF     (base 16)		VERTEL DIGITAL PRIVATE LIMITED
-				C-98, SECTOR-10 
-				NOIDA  Uttar Pradesh  201301
-				IN
-
-70-B3-D5   (hex)		ITALIANA PONTI RADIO SRL
-452000-452FFF     (base 16)		ITALIANA PONTI RADIO SRL
-				VIA CA' BASSA 67
-				VARESE  VARESE  21100
-				IT
-
-70-B3-D5   (hex)		Stuyts Engineering Haarlem BV
-D1D000-D1DFFF     (base 16)		Stuyts Engineering Haarlem BV
-				Hogeweg 40
-				Zandvoort  Noord-Holland  2042GH
-				NL
-
-70-B3-D5   (hex)		sonatest
-8FD000-8FDFFF     (base 16)		sonatest
-				1175 Rue Lavigerie, Bur.90
-				Quebec  Quebec  G1V 4P1
-				CA
-
-70-B3-D5   (hex)		IP Devices
-5CE000-5CEFFF     (base 16)		IP Devices
-				Etrog 72 8
-				Givat Zeev    9091700
-				IL
-
-70-B3-D5   (hex)		JESE Ltd
-0E2000-0E2FFF     (base 16)		JESE Ltd
-				Unit 2 Gales
-				Newton Abbot  Devon  TQ13 8FD
-				GB
-
-70-B3-D5   (hex)		IDZ Ltd
-7F6000-7F6FFF     (base 16)		IDZ Ltd
-				160 CITY ROAD
-				LONDON    EC1V 2NX
-				GB
-
-70-B3-D5   (hex)		Private Enterprise Scientific and Production Private EnterpriseSparing-Vist Center
-076000-076FFF     (base 16)		Private Enterprise Scientific and Production Private EnterpriseSparing-Vist Center
-				33 V.Velykoho Str.
-				Lviv    79026
-				UA
-
-70-B3-D5   (hex)		LinkAV Technology Co., Ltd
-1F6000-1F6FFF     (base 16)		LinkAV Technology Co., Ltd
-				Room 401, 4F, Skyworth Digital Building, Songbai Rd, Baoan District 
-				Shenzhen  Guangdong  518108
-				CN
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-B33000-B33FFF     (base 16)		Aplex Technology Inc.
-				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
-				Shenzhen City  Guangdong  518129
-				CN
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-106000-106FFF     (base 16)		Aplex Technology Inc.
-				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
-				Shenzhen City  Guangdong  518129
-				CN
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-666000-666FFF     (base 16)		Aplex Technology Inc.
-				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
-				Shenzhen City  Guangdong  518129
-				CN
-
-70-B3-D5   (hex)		FARHO DOMOTICA SL
-ACE000-ACEFFF     (base 16)		FARHO DOMOTICA SL
-				POLIGONO DE TABAZA II, NAVES 9-13
-				TABAZA  ASTURIAS  33439
-				ES
-
-70-B3-D5   (hex)		The Engineerix Group
-C71000-C71FFF     (base 16)		The Engineerix Group
-				1418 Beech Ave 119A
-				McAllen  TX  78501
-				US
-
-70-B3-D5   (hex)		Flextronics International Kft
-1BC000-1BCFFF     (base 16)		Flextronics International Kft
-				38. Zrinyi Str.
-				Zalaegerszeg  Zala  8900
-				HU
-
-70-B3-D5   (hex)		Research Laboratory of Design Automation, Ltd.
-223000-223FFF     (base 16)		Research Laboratory of Design Automation, Ltd.
-				8 Birzhevoy Spusk
-				Taganrog    347900
-				RU
-
-70-B3-D5   (hex)		Private
-315000-315FFF     (base 16)		Private
-
-70-B3-D5   (hex)		JOLANYEE  Technology Co., Ltd.
-9D8000-9D8FFF     (base 16)		JOLANYEE  Technology Co., Ltd.
-				2F., No. 13, Sec. 1, Yonghe Rd.
-				Yonghe Dist., New Taipei City    234014
-				TW
-
-70-B3-D5   (hex)		SEASONS 4 INC
-D5D000-D5DFFF     (base 16)		SEASONS 4 INC
-				3601 LA GRANGE PKWY, SUITE 500
-				TOANO  VA  23168
-				US
-
-70-B3-D5   (hex)		VulcanForms
-E0E000-E0EFFF     (base 16)		VulcanForms
-				20 North Ave.
-				Burlington  MA  01803
-				US
-
-8C-1F-64   (hex)		Xi‘an Hangguang Satellite and Control Technology Co.,Ltd
-270000-270FFF     (base 16)		Xi‘an Hangguang Satellite and Control Technology Co.,Ltd
-				Hi-tech Industrial Park Zaozitai Road No.10,Chang’an, Xi’an, Shaanxi China
-				Xi’an    710075
-				CN
-
-8C-1F-64   (hex)		Thales Belgium
-D7E000-D7EFFF     (base 16)		Thales Belgium
-				Rue Des Frères Taymans 28
-				Tubize  Brussels  1480
-				BE
-
-8C-1F-64   (hex)		GSP Sprachtechnologie GmbH
-B64000-B64FFF     (base 16)		GSP Sprachtechnologie GmbH
-				Teltowkanalstraße 1
-				Berlin    12247
-				DE
-
-8C-1F-64   (hex)		Brad Technology
-549000-549FFF     (base 16)		Brad Technology
-				20 Avenue des Erables
-				Avignon    84000
-				FR
-
-8C-1F-64   (hex)		Yuval Fichman
-135000-135FFF     (base 16)		Yuval Fichman
-				37 Mishmar Hayarden St.
-				Tel Aviv    6986519
-				IL
-
-8C-1F-64   (hex)		EkspertStroyProekt
-A57000-A57FFF     (base 16)		EkspertStroyProekt
-				office 422, str.1, d.1, ul. Eniseyskaya
-				Moscow    129344
-				RU
-
-8C-1F-64   (hex)		GS Elektromedizinsiche Geräte G. Stemple GmbH
-BC0000-BC0FFF     (base 16)		GS Elektromedizinsiche Geräte G. Stemple GmbH
-				Hauswiesenstr. 26
-				Kaufering  Bayern  86916
-				DE
-
-8C-1F-64   (hex)		BR. Voss Ingenjörsfirma AB
-264000-264FFF     (base 16)		BR. Voss Ingenjörsfirma AB
-				Getängsvägen 4
-				Borås    50468
-				SE
-
-8C-1F-64   (hex)		Garten Automation
-856000-856FFF     (base 16)		Garten Automation
-				Av. Herbert Hadler, 1367
-				Pelotas  Rio Grande do Sul  96050460
-				BR
-
-8C-1F-64   (hex)		Portrait Displays, Inc.
-903000-903FFF     (base 16)		Portrait Displays, Inc.
-				6663 OWENS DR
-				PLEASANTON  CA  94588
-				US
-
-70-B3-D5   (hex)		Green Access Ltd
-B2E000-B2EFFF     (base 16)		Green Access Ltd
-				Unit 1 Kensworthgate  200-204 High Street South
-				Dunstable  Bedfordshire   LU6 3HS
-				GB
-
-8C-1F-64   (hex)		Scientific Lightning Solutions
-E5C000-E5CFFF     (base 16)		Scientific Lightning Solutions
-				1419 Chaffee Drive, Suite 1
-				Titusville  FL  32780
-				US
-
-8C-1F-64   (hex)		WOLF Advanced Technology
-370000-370FFF     (base 16)		WOLF Advanced Technology
-				175 Mostar Street, Suite 200
-				Stouffville  Ontario  L4A 0Y2
-				CA
-
-8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
-AE1000-AE1FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-8C-1F-64   (hex)		Roog zhi tong Technology(Beijing) Co.,Ltd
-296000-296FFF     (base 16)		Roog zhi tong Technology(Beijing) Co.,Ltd
-				Room 806, Huizhong building, building 2, Yard 1, Shangdi Seventh Street, Haidian District, Beijing
-				Beijing    100089
-				CN
-
-8C-1F-64   (hex)		SBS SpA
-4C7000-4C7FFF     (base 16)		SBS SpA
-				via Circonvallazione s/n
-				Miasino  NO  28010
-				IT
-
-8C-1F-64   (hex)		Grossenbacher Systeme AG
-83A000-83AFFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-8C-1F-64   (hex)		Murata Manufacturing Co., Ltd.
-79D000-79DFFF     (base 16)		Murata Manufacturing Co., Ltd.
-				2288, Oaza-Ohshinohara, Yasu-cho,
-				Yasu-gun  Shiga  520-2393
-				JP
-
-8C-1F-64   (hex)		Gogo Business Aviation
-151000-151FFF     (base 16)		Gogo Business Aviation
-				105 Edgeview Dr., Suite 300
-				Broomfield  CO  80021
-				US
-
-8C-1F-64   (hex)		Cirrus Systems, Inc.
-8C2000-8C2FFF     (base 16)		Cirrus Systems, Inc.
-				200 West Road
-				Portsmouth  NH  03801
-				US
-
-8C-1F-64   (hex)		Florida R&D Associates LLC
-2F5000-2F5FFF     (base 16)		Florida R&D Associates LLC
-				76 Spring Vista Drive
-				DeBary  FL  32713
-				US
-
-8C-1F-64   (hex)		Sonora Network Solutions
-2E8000-2E8FFF     (base 16)		Sonora Network Solutions
-				8 The Green Suite A
-				Dover  DE  19901
-				US
-
-8C-1F-64   (hex)		Global Organ Group B.V.
-EE8000-EE8FFF     (base 16)		Global Organ Group B.V.
-				Keplerlaan 2
-				EDE  The Netherlands  6716BS
-				NL
-
-8C-1F-64   (hex)		AiUnion Co.,Ltd
-EEF000-EEFFFF     (base 16)		AiUnion Co.,Ltd
-				3F.-1, No. 268, Liancheng Rd., Zhonghe Dist.
-				New Taipei City   Taiwan (R.O.C.)  235
-				TW
-
-8C-1F-64   (hex)		ard sa
-AF7000-AF7FFF     (base 16)		ard sa
-				Micropolis Bat Clematis
-				Gap  France  05000
-				FR
-
-8C-1F-64   (hex)		BIOTAGE GB LTD
-EF1000-EF1FFF     (base 16)		BIOTAGE GB LTD
-				UNIT 10 DYFFRYN BUSINESS PARK
-				YSTRAD MYNACH    CF82 7TS
-				GB
-
-8C-1F-64   (hex)		UBISCALE
-73F000-73FFFF     (base 16)		UBISCALE
-				1 Avenue de Bellefontaine
-				Cesson-Sevigne    35510
-				FR
-
-8C-1F-64   (hex)		Accemic Technologies GmbH
-79E000-79EFFF     (base 16)		Accemic Technologies GmbH
-				Franz-Huber-Str. 39
-				Kiefersfelden  Bavaria  83088
-				DE
-
-8C-1F-64   (hex)		YPP Corporation
-3E0000-3E0FFF     (base 16)		YPP Corporation
-				24
-				Geumchon-gu  Seoul  153-802
-				KR
-
-8C-1F-64   (hex)		Mainco automotion s.l.
-DAE000-DAEFFF     (base 16)		Mainco automotion s.l.
-				P.O. Box 55
-				Almussafes  Valencia  46440
-				ES
-
-8C-1F-64   (hex)		WEPTECH elektronik GmbH
-086000-086FFF     (base 16)		WEPTECH elektronik GmbH
-				Ostring 10
-				Landau    76829
-				DE
-
-8C-1F-64   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-6CD000-6CDFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-8C-1F-64   (hex)		TPVision Europe B.V
-53A000-53AFFF     (base 16)		TPVision Europe B.V
-				Prins Bernhardplein 200
-				Amsterdam  Noord-Holland  1097 JB
-				NL
-
-70-B3-D5   (hex)		Guardian Controls International Ltd
-710000-710FFF     (base 16)		Guardian Controls International Ltd
-				 The Dairy, Spring Bank Farm
-				Arclid  Cheshire  CW11 2UD
-				GB
-
-8C-1F-64   (hex)		FIT
-6C6000-6C6FFF     (base 16)		FIT
-				7-64
-				Unumakakamigahara-cho Kakamigahara City  Gifu  5090141
-				JP
-
-8C-1F-64   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-25A000-25AFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-8C-1F-64   (hex)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
-B2C000-B2CFFF     (base 16)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
-				Koren industrial zone no 5
-				Mallot  Israel  2101002
-				IL
-
-8C-1F-64   (hex)		Ternary Research Corporation
-F78000-F78FFF     (base 16)		Ternary Research Corporation
-				6017 Snell Ave #360
-				San Jose  CA  95123
-				US
-
-8C-1F-64   (hex)		Multilane Inc
-385000-385FFF     (base 16)		Multilane Inc
-				48521 Warm Springs Blvd Suite 310
-				Fremont  CA  94529
-				US
-
-8C-1F-64   (hex)		ZHEJIANG CHITIC-SAFEWAY NEW ENERGY TECHNICAL CO.,LTD.
-ED4000-ED4FFF     (base 16)		ZHEJIANG CHITIC-SAFEWAY NEW ENERGY TECHNICAL CO.,LTD.
-				Add: F5, B1, Chitic Science & Technology Park, No.260, 6th Road, Xiasha, EDA, Hangzhou, Zhejiang, China 
-				HANGZHOU  ZHEJIANG  310018
-				CN
-
-8C-1F-64   (hex)		mal-tech Technological Solutions Ltd/CRISP
-663000-663FFF     (base 16)		mal-tech Technological Solutions Ltd/CRISP
-				hanapach 3
-				Holon    7518301
-				IL
-
-8C-1F-64   (hex)		BEIJING LXTV TECHNOLOGY CO.,LTD
-536000-536FFF     (base 16)		BEIJING LXTV TECHNOLOGY CO.,LTD
-				Floor 8, Jinlan building, No. 2, Beihuan Road, Changping District
-				Beijing  Beijing  102200
-				CN
-
-8C-1F-64   (hex)		PHYGITALL SOLUÇÕES EM INTERNET DAS COISAS
-B46000-B46FFF     (base 16)		PHYGITALL SOLUÇÕES EM INTERNET DAS COISAS
-				SAO MIGUEL STREET, 301 - 201 - TIJUCA
-				RIO DE JANEIRO  RIO DE JANEIRO  20530420
-				BR
-
-8C-1F-64   (hex)		DTDS Technology Pte Ltd
-4DA000-4DAFFF     (base 16)		DTDS Technology Pte Ltd
-				Block 19 #05-153, Kallang Avenue
-				Singapore    339410
-				SG
-
-8C-1F-64   (hex)		KxS Technologies Oy
-EB9000-EB9FFF     (base 16)		KxS Technologies Oy
-				Zirkonipolku 2  A LH1
-				VANTAA    01700
-				FI
-
-70-B3-D5   (hex)		RealD, Inc.
-CCB000-CCBFFF     (base 16)		RealD, Inc.
-				9777 Wilshire Boulevard, Ste 430
-				 Beverly Hills  CA  90212
-				US
-
-8C-1F-64   (hex)		L tec Co.,Ltd
-650000-650FFF     (base 16)		L tec Co.,Ltd
-				670-1 Shin Pukuji
-				Chiyoda-machi Ora-gun  Gunma-pref  370-0505
-				JP
-
-8C-1F-64   (hex)		Tabology
-787000-787FFF     (base 16)		Tabology
-				8-10 WOOD STREET WAKEFIELD
-				Wakefield  West Yorkshire  WF1 2ED
-				GB
-
-8C-1F-64   (hex)		Bulwark
-6A8000-6A8FFF     (base 16)		Bulwark
-				2/3 Sahra Grove
-				Carrum Downs  VIC  3201
-				AU
-
-8C-1F-64   (hex)		HongSeok Ltd.
-5F5000-5F5FFF     (base 16)		HongSeok Ltd.
-				166, Osan-ro, Osan-myeon
-				Iksan-si  Jeollabuk-do  54670
-				KR
-
-8C-1F-64   (hex)		MP-SENSOR GmbH
-521000-521FFF     (base 16)		MP-SENSOR GmbH
-				Albstraße, 13
-				Neuhausen auf den Fildern    73765
-				DE
-
-8C-1F-64   (hex)		Monarch Instrument
-D44000-D44FFF     (base 16)		Monarch Instrument
-				15 Columbia drive
-				Amherst  NH  03031
-				US
-
-8C-1F-64   (hex)		Ibeos
-8AF000-8AFFFF     (base 16)		Ibeos
-				12110 SUNSET HILLS RD
-				RESTON  VA  20190
-				US
-
-8C-1F-64   (hex)		EYatsko Individual
-D13000-D13FFF     (base 16)		EYatsko Individual
-				5, apt. 84, Gogolya st.
-				Pushkino  Moscow Region  141207
-				RU
-
-8C-1F-64   (hex)		O-Net Communications(Shenzhen)Limited
-6B5000-6B5FFF     (base 16)		O-Net Communications(Shenzhen)Limited
-				No. 35, Cuijing Road, Pingshan New District
-				Shenzhen  Guangdong  518118
-				CN
-
-70-B3-D5   (hex)		Fluid Management Technology
-A7A000-A7AFFF     (base 16)		Fluid Management Technology
-				169 Grange Rd, Beverley
-				169 Grange Rd, Beverley, South Australia 5009 AU.  South Australia  5009
-				AU
-
-8C-1F-64   (hex)		Transit Solutions, LLC.
-675000-675FFF     (base 16)		Transit Solutions, LLC.
-				114 West Grandview Avenue
-				Zelienople  PA  16063
-				US
-
-8C-1F-64   (hex)		Atlantic Pumps Ltd
-85B000-85BFFF     (base 16)		Atlantic Pumps Ltd
-				Carrwood Road
-				Chesterfield  Derbyshire  S41 9QB
-				GB
-
-8C-1F-64   (hex)		Novanta Corp / Novanta IMS
-510000-510FFF     (base 16)		Novanta Corp / Novanta IMS
-				370 N. Main St.
-				Marlborough  CT  06447
-				US
-
-8C-1F-64   (hex)		Chengdu ZiChen Time&Frequency Technology Co.,Ltd
-BC6000-BC6FFF     (base 16)		Chengdu ZiChen Time&Frequency Technology Co.,Ltd
-				Building 1, No. 3, Xixin Avenue, hi tech Zone,
-				Chengdu  Sichuan  610069
-				CN
-
-8C-1F-64   (hex)		RFENGINE CO., LTD.
-60A000-60AFFF     (base 16)		RFENGINE CO., LTD.
-				#1-618 CHEONGJU TECHNO S-TOWER
-				CHEONGJU-SI    28578
-				KR
-
-8C-1F-64   (hex)		Dongguan Pengchen Earth Instrument CO. LT
-E7B000-E7BFFF     (base 16)		Dongguan Pengchen Earth Instrument CO. LT
-				Room 301, Building 1, No.6, North Huwu Road, Liuwu Village, Shijie Town, Dongguan city, Guangdong Province
-				Dongguan    523290
-				CN
-
-8C-1F-64   (hex)		Wavestream Corp
-3C6000-3C6FFF     (base 16)		Wavestream Corp
-				545 W Terrace Dr.
-				San Dimas  CA  91773
-				US
-
-8C-1F-64   (hex)		Fuku Energy Technology Co., Ltd.
-603000-603FFF     (base 16)		Fuku Energy Technology Co., Ltd.
-				1F., No. 176, Sec. 2, Muxin Rd., Wenshan Dist., Taipei City 116024, Taiwan (R.O.C.)
-				Taipei City  Taiwan (R.O.C.)  802
-				TW
-
-8C-1F-64   (hex)		Security&Best
-35D000-35DFFF     (base 16)		Security&Best
-				B-dong, #204, 17, Gosan-ro 148beon-gil
-				Gunpo-si  Gyeonggi-do  15850
-				KR
-
-8C-1F-64   (hex)		Guan Show Technologe Co., Ltd.
-A01000-A01FFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-8C-1F-64   (hex)		Astrometric Instruments, Inc.
-65F000-65FFFF     (base 16)		Astrometric Instruments, Inc.
-				409 East St.
-				Wallingford  VT  05773
-				US
-
-8C-1F-64   (hex)		Engage Technologies
-077000-077FFF     (base 16)		Engage Technologies
-				7041 Boone Avenue North
-				Brooklyn Park  MN  55428
-				US
-
-8C-1F-64   (hex)		STEAMIQ, Inc.
-EBF000-EBFFFF     (base 16)		STEAMIQ, Inc.
-				632 Main Street, 
-				HINGHAM  MA  02043
-				US
-
-8C-1F-64   (hex)		Enlaps
-7D2000-7D2FFF     (base 16)		Enlaps
-				29 chemin du vieux chene, Tarmac
-				MEYLAN    38240
-				FR
-
-8C-1F-64   (hex)		Delta Solutions LLC
-EB7000-EB7FFF     (base 16)		Delta Solutions LLC
-				Kolhoznaya str., 8A, Room 20, 2nd Floor
-				Lubertsy  Lubertsy City District, Moscow Region  140002
-				RU
-
-8C-1F-64   (hex)		WENet Vietnam Joint Stock company
-A2B000-A2BFFF     (base 16)		WENet Vietnam Joint Stock company
-				BT2-15, Trung Van New Urban Area, Trung Van Ward, Nam Tu Liem District, Hanoi, Vietnam
-				Hanoi  Hanoi  10000
-				VN
-
-8C-1F-64   (hex)		WARECUBE,INC
-EFB000-EFBFFF     (base 16)		WARECUBE,INC
-				#A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu
-				Suwon-si    16648
-				KR
-
-8C-1F-64   (hex)		Missing Link Electronics, Inc.
-47A000-47AFFF     (base 16)		Missing Link Electronics, Inc.
-				2880 Zanker Road, Ste 203
-				San Jose    95134
-				US
-
-8C-1F-64   (hex)		Gemini Electronics B.V.
-81A000-81AFFF     (base 16)		Gemini Electronics B.V.
-				Burg. van Meeuwenstraat 14
-				Beek  Limburg  6191 ND
-				NL
-
-8C-1F-64   (hex)		AixControl GmbH
-08F000-08FFFF     (base 16)		AixControl GmbH
-				Sonnenweg 15
-				Aachen  NRW  52070
-				DE
-
-8C-1F-64   (hex)		Zilica Limited
-A1B000-A1BFFF     (base 16)		Zilica Limited
-				8 Hasting Close, Bray, Bray
-				Maidenhead Bray  Berks  SL6 2DA
-				GB
-
-8C-1F-64   (hex)		REO AG
-73C000-73CFFF     (base 16)		REO AG
-				Brühlerstr. 100
-				Solingen    42657
-				DE
-
-8C-1F-64   (hex)		Borrell USA Corp
-38B000-38BFFF     (base 16)		Borrell USA Corp
-				240 RIGGS AV
-				MERCED    95341
-				US
-
-8C-1F-64   (hex)		NOVA Products GmbH
-BD6000-BD6FFF     (base 16)		NOVA Products GmbH
-				Thierschstr. 11
-				Munich    80538
-				DE
-
-70-B3-D5   (hex)		Flextronics International Kft
-E2F000-E2FFFF     (base 16)		Flextronics International Kft
-				Zrínyi Miklós str. 38.
-				Zalaegerszeg    8900
-				HU
-
-8C-1F-64   (hex)		Flextronics International Kft
-F5C000-F5CFFF     (base 16)		Flextronics International Kft
-				Zrínyi Miklós str. 38.
-				Zalaegerszeg    8900
-				HU
-
-8C-1F-64   (hex)		ECO-ADAPT
-C38000-C38FFF     (base 16)		ECO-ADAPT
-				39 Rue de Chateaudun
-				Paris  Ile-de-France  75009
-				FR
-
-8C-1F-64   (hex)		In-lite Design BV
-557000-557FFF     (base 16)		In-lite Design BV
-				Stephensonweg 18
-				Gorinchem  Zuid-Holland  4207 HB
-				NL
-
-8C-1F-64   (hex)		SMS group GmbH
-FF4000-FF4FFF     (base 16)		SMS group GmbH
-				Hirtenwiese 4
-				Elkenroth  Rhineland-Palantine  57578
-				DE
-
-8C-1F-64   (hex)		CyberneX Co., Ltd
-A6D000-A6DFFF     (base 16)		CyberneX Co., Ltd
-				Kamata, 5-26-8, Ardel Kamata #1107
-				O-taku  Tokyo-to  1440052
-				JP
-
-8C-1F-64   (hex)		Enestone Corporation
-2FD000-2FDFFF     (base 16)		Enestone Corporation
-				3-24-5 Shin yokohama Kohoku
-				YOKOHAMA  Kanagawa  222-0033
-				JP
-
-8C-1F-64   (hex)		ADETEC SAS
-AE8000-AE8FFF     (base 16)		ADETEC SAS
-				8 rue de l'Angoumois
-				ARGENTEUIL    95100
-				FR
-
-8C-1F-64   (hex)		AML
-634000-634FFF     (base 16)		AML
-				2190 Regal Parkway
-				Euless  TX  76040
-				US
-
-70-B3-D5   (hex)		Active Research Limited
-6A0000-6A0FFF     (base 16)		Active Research Limited
-				21 Harwell Road
-				Poole  Dorset  BH17 0GE
-				GB
-
-8C-1F-64   (hex)		SiEngine Technology Co., Ltd.
-F7A000-F7AFFF     (base 16)		SiEngine Technology Co., Ltd.
-				6th floor,Building 23,No.1999,Yi Shan Road
-				Shanghai  Shanghai  201114
-				CN
-
-8C-1F-64   (hex)		Vesperix Corporation
-8E9000-8E9FFF     (base 16)		Vesperix Corporation
-				803 West Broad St Suite 520
-				Falls Church  VA  22046
-				US
-
-8C-1F-64   (hex)		SOCNOC AI Inc
-7DE000-7DEFFF     (base 16)		SOCNOC AI Inc
-				 2800 Innovation Avenue, Innovation Industrial Park?
-				Hefei  Anhui  230000
-				CN
-
-8C-1F-64   (hex)		Sontay Ltd.
-697000-697FFF     (base 16)		Sontay Ltd.
-				Four Elms Road
-				Edenbridge    TN86AB
-				GB
-
-8C-1F-64   (hex)		Lumiplan Duhamel
-C4C000-C4CFFF     (base 16)		Lumiplan Duhamel
-				2 rue de l'industrie
-				Domène  Isère  38420
-				FR
-
-8C-1F-64   (hex)		BRICKMAKERS GmbH
-E5E000-E5EFFF     (base 16)		BRICKMAKERS GmbH
-				Am Plan 14-16
-				Koblenz    56068
-				DE
-
-8C-1F-64   (hex)		AvMap srlu
-84C000-84CFFF     (base 16)		AvMap srlu
-				Viale Zaccagna 6
-				Carrara    54033
-				IT
-
-8C-1F-64   (hex)		Neurable
-B92000-B92FFF     (base 16)		Neurable
-				45 Bromfield St
-				Chicago  IL  60641
-				US
-
-8C-1F-64   (hex)		ADiCo Corporation
-D69000-D69FFF     (base 16)		ADiCo Corporation
-				2045-32, Takaragi-honcho
-				Utsunomiya-shi  Tochigi  320-0075
-				JP
-
-8C-1F-64   (hex)		METRONA-Union GmbH
-9FA000-9FAFFF     (base 16)		METRONA-Union GmbH
-				Aidenbachstr. 40
-				München    81379
-				DE
-
-8C-1F-64   (hex)		Wittra Networks AB
-DF8000-DF8FFF     (base 16)		Wittra Networks AB
-				Västra Järnvägsgatan 39th floor(Convendum)
-				Stockholm  Stockholm  111 64
-				SE
-
-8C-1F-64   (hex)		Unitron Systems b.v.
-FA8000-FA8FFF     (base 16)		Unitron Systems b.v.
-				SCHANSESTRAAT 7
-				IJzendijke    4515 RN
-				NL
-
-8C-1F-64   (hex)		University of Geneva - Department of Particle Physics
-D88000-D88FFF     (base 16)		University of Geneva - Department of Particle Physics
-				Quai Ernest-Ansermet 24
-				Geneva    1211
-				CH
-
-8C-1F-64   (hex)		Massar Networks
-FAA000-FAAFFF     (base 16)		Massar Networks
-				Postfach 1207PEAX ID 473.1849.6740.89
-				Baar  Zug  CH-6341
-				CH
-
-8C-1F-64   (hex)		Vytahy-Vymyslicky s.r.o.
-737000-737FFF     (base 16)		Vytahy-Vymyslicky s.r.o.
-				Pivovarska 542
-				Uherske Hradiste - Jarosov    60801
-				CZ
-
-8C-1F-64   (hex)		Retency
-BBF000-BBFFFF     (base 16)		Retency
-				19 rue Vivienne
-				Paris    75002
-				FR
-
-8C-1F-64   (hex)		Camius
-601000-601FFF     (base 16)		Camius
-				41593 Winchester Rd., Ste 200
-				Temecula  CA  92590
-				US
-
-8C-1F-64   (hex)		Patch Technologies, Inc.
-0AC000-0ACFFF     (base 16)		Patch Technologies, Inc.
-				100 S Cincinnati Ave, Fifth Floor
-				Tulsa  OK  74103
-				US
-
-8C-1F-64   (hex)		BNB
-0BE000-0BEFFF     (base 16)		BNB
-				Deongmyeongdong-ro 22beon-gil
-				Daejeon  Yuseong-gu  34155
-				KR
-
-8C-1F-64   (hex)		Pionierkraft GmbH
-CD3000-CD3FFF     (base 16)		Pionierkraft GmbH
-				Agnes-Pockels-Bogen 1
-				Munich  Bavaria  80992
-				DE
-
-8C-1F-64   (hex)		Comm-ence, Inc.
-B73000-B73FFF     (base 16)		Comm-ence, Inc.
-				1813 Limerick Ct
-				Darien  IL  60561
-				US
-
-8C-1F-64   (hex)		YUSUR Technology Co., Ltd.
-C3A000-C3AFFF     (base 16)		YUSUR Technology Co., Ltd.
-				Room 1401,building 4,yard 1, Beiqing Road No.81, Haidian District
-				Beijing  Beijing  100086
-				CN
-
-70-B3-D5   (hex)		Ava Technologies
-72F000-72FFFF     (base 16)		Ava Technologies
-				2409 E. Pender St.
-				Vancouver  BC  V5K 2B2
-				CA
-
-8C-1F-64   (hex)		Benison Tech
-3AC000-3ACFFF     (base 16)		Benison Tech
-				2100 Geng Road, Suite 210
-				Palo Alto  CA  94043
-				US
-
-8C-1F-64   (hex)		HIGHVOLT Prüftechnik
-8F8000-8F8FFF     (base 16)		HIGHVOLT Prüftechnik
-				Marie-Curie-Straße10
-				Dresden    01139
-				DE
-
-8C-1F-64   (hex)		Stresstech OY
-625000-625FFF     (base 16)		Stresstech OY
-				Tikkutehtaantie 1
-				Vaajakoski    40800
-				FI
-
-8C-1F-64   (hex)		BCMTECH
-94C000-94CFFF     (base 16)		BCMTECH
-				803ho(Gongjang-dong), Simin-daero 109beon-gil, Dongan-gu,
-				Anyang-si  Gyeonggi-do  14042
-				KR
-
-8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
-97C000-97CFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-8C-1F-64   (hex)		SLAT
-683000-683FFF     (base 16)		SLAT
-				11 Rue Jean-Elysée DUPUY
-				Champagne au Mont d'Or  Rhône  69543
-				FR
-
-8C-1F-64   (hex)		E VISION INDIA PVT LTD 
-7AF000-7AFFFF     (base 16)		E VISION INDIA PVT LTD 
-				9/205, MAIN MARKET OLD FARIDABAD HARYANA INDIA 121002
-				Faridabad  HARYANA  121002
-				IN
-
-70-B3-D5   (hex)		DISMUNTEL SAL
-92C000-92CFFF     (base 16)		DISMUNTEL SAL
-				Pol ind cotes
-				Algemesi  Valencia  46680
-				ES
-
-70-B3-D5   (hex)		Chengdu Lingya Technology Co., Ltd.
-F4B000-F4BFFF     (base 16)		Chengdu Lingya Technology Co., Ltd.
-				8 Floor, Block A, West City International Phase II, 48 Shuxi Road, Jinniu District
-				Chengdu  Sichuan  610037
-				CN
-
-70-B3-D5   (hex)		xmi systems
-A6B000-A6BFFF     (base 16)		xmi systems
-				Sonnenbergstrasse 7
-				Hergiswil    6052
-				CH
-
-70-B3-D5   (hex)		Tecsag Innovation AG
-77A000-77AFFF     (base 16)		Tecsag Innovation AG
-				Verenastrasse 4b
-				Wollerau    8832
-				CH
-
-70-B3-D5   (hex)		Controles S.A.
-A6C000-A6CFFF     (base 16)		Controles S.A.
-				Rivera 3314
-				Montevideo  Montevideo  11300
-				UY
-
-70-B3-D5   (hex)		Vishay Nobel AB
-BFC000-BFCFFF     (base 16)		Vishay Nobel AB
-				Box 423
-				Karlskoga    SE-691 27
-				SE
-
-70-B3-D5   (hex)		Hyannis Port Research
-FB8000-FB8FFF     (base 16)		Hyannis Port Research
-				75 2nd Ave, Suite 210
-				Needham  MA  02494
-				US
-
-70-B3-D5   (hex)		Henschel-Robotics GmbH
-8C7000-8C7FFF     (base 16)		Henschel-Robotics GmbH
-				Mulchlingerstrasse, 67
-				Winterthur  Zuerich  8405
-				CH
-
-70-B3-D5   (hex)		Linc Technology Corporation dba Data-Linc Group 
-C84000-C84FFF     (base 16)		Linc Technology Corporation dba Data-Linc Group 
-				1125 12th Ave NW # B-2
-				Issaquah  WA  98027
-				US
-
-70-B3-D5   (hex)		Green Instruments A/S
-79F000-79FFFF     (base 16)		Green Instruments A/S
-				Erhvervsparken 29
-				Broenderslev    9700
-				DK
-
-70-B3-D5   (hex)		Solace Systems Inc.
-D31000-D31FFF     (base 16)		Solace Systems Inc.
-				535 Legget Drive,
-				Kanata  Ontario  K2K3B8
-				CA
-
-70-B3-D5   (hex)		Den Automation
-787000-787FFF     (base 16)		Den Automation
-				Unit 6.05, Metropolitan Wharf
-				London    E1W 3SS
-				GB
-
-70-B3-D5   (hex)		Airthings
-2A0000-2A0FFF     (base 16)		Airthings
-				Wergelandsveien 7
-				Oslo    0167
-				NO
-
-70-B3-D5   (hex)		Micatu
-67A000-67AFFF     (base 16)		Micatu
-				315 Daniel Zenker Drive
-				Horseheads  NY  14845
-				US
-
-70-B3-D5   (hex)		Mutelcor GmbH
-170000-170FFF     (base 16)		Mutelcor GmbH
-				An der Bastei, 42A
-				Duisburg  NRW  47259
-				DE
-
-70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-CDB000-CDBFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-70-B3-D5   (hex)		WTE Limited
-C8A000-C8AFFF     (base 16)		WTE Limited
-				1 Pukeko Place, Southshore
-				Christchurch  Canterbury  8062
-				NZ
-
-70-B3-D5   (hex)		SHS SRL
-BD0000-BD0FFF     (base 16)		SHS SRL
-				Via Ponte di Sirico,48 
-				SAVIANO  NAPLES  80039
-				IT
-
-70-B3-D5   (hex)		Sadel S.p.A.
-A74000-A74FFF     (base 16)		Sadel S.p.A.
-				via Marino Serenari, 1
-				Castel Maggiore  Bologna  40013
-				IT
-
-70-B3-D5   (hex)		HORIBA ABX SAS
-B00000-B00FFF     (base 16)		HORIBA ABX SAS
-				rue du caducee
-				Montpellier  Herault  34000
-				FR
-
-70-B3-D5   (hex)		VITEC
-F17000-F17FFF     (base 16)		VITEC
-				99 rue pierre sémard
-				Chatillon  France  92320
-				FR
-
-70-B3-D5   (hex)		VITEC
-CDA000-CDAFFF     (base 16)		VITEC
-				99 rue pierre sémard
-				Chatillon  France  92320
-				FR
-
-70-B3-D5   (hex)		Potomac Electric Corporation
-E63000-E63FFF     (base 16)		Potomac Electric Corporation
-				One Westinghouse Plaza
-				Boston  MA  02136
-				US
-
-70-B3-D5   (hex)		Bintel AB
-970000-970FFF     (base 16)		Bintel AB
-				Mobilvägen 10
-				Lund  Skåne  22362
-				SE
-
-70-B3-D5   (hex)		HEITEC AG
-F48000-F48FFF     (base 16)		HEITEC AG
-				Dr.-Otto-Leich-Str. 16
-				Eckental  Bavaria  90542
-				DE
-
-70-B3-D5   (hex)		Simpulse
-DED000-DEDFFF     (base 16)		Simpulse
-				7 rue de la croix Martre
-				Palaiseau    91120
-				FR
-
-70-B3-D5   (hex)		Season Electronics Ltd
-65E000-65EFFF     (base 16)		Season Electronics Ltd
-				600 Nest Business Park 
-				Havant  Hampshire  PO9 5TL
-				GB
-
-70-B3-D5   (hex)		ATGS
-726000-726FFF     (base 16)		ATGS
-				11 POLBINA ST.
-				MOSCOW    109388
-				RU
-
-70-B3-D5   (hex)		GlooVir Inc.
-47A000-47AFFF     (base 16)		GlooVir Inc.
-				#413, 96 Gajeongbuk-Ro
-				Daejeon  Yuseong  34111
-				KR
-
-70-B3-D5   (hex)		SIPRO s.r.l.
-398000-398FFF     (base 16)		SIPRO s.r.l.
-				VIALE DELL'INDUSTRIA, 7
-				VERONA  VERONA  37135
-				IT
-
-70-B3-D5   (hex)		Profcon AB
-496000-496FFF     (base 16)		Profcon AB
-				Victor Hasselblads gata 9
-				Västra Frölunda    42131
-				SE
-
-70-B3-D5   (hex)		Private
-580000-580FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Technological Application and Production One Member Liability Company (Tecapro company)
-456000-456FFF     (base 16)		Technological Application and Production One Member Liability Company (Tecapro company)
-				18A Cong Hoa street
-				Ho Chi Minh city  Ho Chi Minh city  700000
-				VN
-
-70-B3-D5   (hex)		KRONOTECH SRL
-D56000-D56FFF     (base 16)		KRONOTECH SRL
-				VIALE UNGHERIA 125
-				UDINE  ITALY/UDINE  33100
-				IT
-
-70-B3-D5   (hex)		LG Electronics
-884000-884FFF     (base 16)		LG Electronics
-				19, Yangje-daero 11gil, Seocho-gu
-				Seoul    06772
-				KR
-
-70-B3-D5   (hex)		RITEC
-AC0000-AC0FFF     (base 16)		RITEC
-				25 East Easy St
-				Simi Valley  CA  93065
-				US
-
-70-B3-D5   (hex)		Carlo Gavazzi Industri
-EFF000-EFFFFF     (base 16)		Carlo Gavazzi Industri
-				Over Hadstenvej 40
-				Hadsten  Denmark  8370
-				DK
-
-70-B3-D5   (hex)		GJD Manufacturing
-E25000-E25FFF     (base 16)		GJD Manufacturing
-				Unit 2, Birch Business Park, Whittle Lane
-				Heywood    OL10 2SX
-				GB
-
-70-B3-D5   (hex)		INFRASAFE/ ADVANTOR SYSTEMS 
-5BA000-5BAFFF     (base 16)		INFRASAFE/ ADVANTOR SYSTEMS 
-				12612 CHALLENGER PARKWAY 
-				ORLANDO  FL  32826
-				US
-
-70-B3-D5   (hex)		DORLET SAU
-8DF000-8DFFFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		Yite technology
-BC9000-BC9FFF     (base 16)		Yite technology
-				No. 56, Xiaobei Rd., North Dist
-				Tainan    70448
-				TW
-
-70-B3-D5   (hex)		Xiris Automation Inc.
-9BF000-9BFFFF     (base 16)		Xiris Automation Inc.
-				1016 Sutton Dr, Unit C5
-				Burlington  Ontario  L7L 6B8
-				CA
-
-70-B3-D5   (hex)		RCH ITALIA SPA 
-99B000-99BFFF     (base 16)		RCH ITALIA SPA 
-				VIA CENDON 39
-				SILEA   TREVISO   31057
-				IT
-
-70-B3-D5   (hex)		Thruvision Limited
-4FA000-4FAFFF     (base 16)		Thruvision Limited
-				121 Olympic Avenue, Milton Park
-				Abingdon  Oxfordshire  OX14 4SA
-				GB
-
-70-B3-D5   (hex)		DAVEY BICKFORD
-1A4000-1A4FFF     (base 16)		DAVEY BICKFORD
-				CHEMIN DE LA PYROTECHNIE
-				HERY    89550
-				FR
-
-70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S.L.
-40B000-40BFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
-				Av. Onze de Setembre 19
-				Reus  Tarragona  43203
-				ES
-
-70-B3-D5   (hex)		KeyW Corporation
-7CB000-7CBFFF     (base 16)		KeyW Corporation
-				7763 Old Telegraph Road
-				Severn  MD  21144
-				US
-
-70-B3-D5   (hex)		Transit Solutions, LLC.
-019000-019FFF     (base 16)		Transit Solutions, LLC.
-				114 West Grandview Avenue
-				Zelienople    16063
-				US
-
-70-B3-D5   (hex)		MULTIVOICE LLC
-B06000-B06FFF     (base 16)		MULTIVOICE LLC
-				224 S. Main St #401
-				Springville  UT  84660
-				US
-
-70-B3-D5   (hex)		AMS Controls, Inc.
-444000-444FFF     (base 16)		AMS Controls, Inc.
-				12180 Prichard Farm Road
-				Maryland Heights  MO  63043
-				US
-
-70-B3-D5   (hex)		3S - Sensors, Signal Processing, Systems GmbH
-982000-982FFF     (base 16)		3S - Sensors, Signal Processing, Systems GmbH
-				Saar-Lor-Lux-Straße 11
-				Saarbrücken    66115
-				DE
-
-70-B3-D5   (hex)		Leonardo Sistemi Integrati S.r.l.
-111000-111FFF     (base 16)		Leonardo Sistemi Integrati S.r.l.
-				Via Greto di Cornigliano, 6R
-				Genova    16152
-				IT
-
-70-B3-D5   (hex)		WoKa-Elektronik GmbH
-8A9000-8A9FFF     (base 16)		WoKa-Elektronik GmbH
-				Fulder Tor 30
-				Alsfeld  Hessen  36304
-				DE
-
-70-B3-D5   (hex)		Jeaway CCTV Security Ltd,.
-E00000-E00FFF     (base 16)		Jeaway CCTV Security Ltd,.
-				No. 24, Yifa St., Sanmin Dist.
-				Kaohsiung     807
-				TW
-
-70-B3-D5   (hex)		Flexsolution APS
-C54000-C54FFF     (base 16)		Flexsolution APS
-				Østervangsvej 39
-				Esbjerg N  Jylland  6715
-				DK
-
-70-B3-D5   (hex)		Ametek Solidstate Controls
-6DE000-6DEFFF     (base 16)		Ametek Solidstate Controls
-				875 DEARBORN DR
-				COLUMBUS  OH  43085-1586
-				US
-
-70-B3-D5   (hex)		Clean-Lasersysteme GmbH
-C5F000-C5FFFF     (base 16)		Clean-Lasersysteme GmbH
-				Dornkaulstr. 6-8
-				Herzogenrath  NRW  52134
-				DE
-
-70-B3-D5   (hex)		Private
-E2D000-E2DFFF     (base 16)		Private
-
-70-B3-D5   (hex)		Altaneos
-69A000-69AFFF     (base 16)		Altaneos
-				Chaussée Verte, 93B
-				Saint-Georges    4470
-				BE
-
-70-B3-D5   (hex)		EXARA Group
-00C000-00CFFF     (base 16)		EXARA Group
-				Andropova pr. 18 1
-				Moscow    115432
-				RU
-
-70-B3-D5   (hex)		TrexEdge, Inc.
-0F2000-0F2FFF     (base 16)		TrexEdge, Inc.
-				1-2-2 Osaki
-				Shinagawa  Tokyo  1410032
-				JP
-
-70-B3-D5   (hex)		Zamir Recognition Systems Ltd.
-46E000-46EFFF     (base 16)		Zamir Recognition Systems Ltd.
-				Manachat Tech Park 1/22
-				Jerusalem    96951
-				IL
-
-70-B3-D5   (hex)		Preo Industries Far East Limited
-CBD000-CBDFFF     (base 16)		Preo Industries Far East Limited
-				31-39 Wo Tong Tsui Street
-				Hong Kong    999077
-				HK
-
-70-B3-D5   (hex)		Gluon Solutions Inc.
-BA6000-BA6FFF     (base 16)		Gluon Solutions Inc.
-				6951 Southfront Road
-				Livermore  CA  94551
-				US
-
-70-B3-D5   (hex)		Bavaria Digital Technik GmbH
-F1C000-F1CFFF     (base 16)		Bavaria Digital Technik GmbH
-				Rehbichler Weg 26
-				Pfronten  Bayern  87459
-				DE
-
-70-B3-D5   (hex)		Vectology,Inc
-F50000-F50FFF     (base 16)		Vectology,Inc
-				UU bld 4F  2-5-2 Shinyokohama
-				Kouhoku-ku Yokohama  Kanagawa  2220033
-				JP
-
-70-B3-D5   (hex)		U&R GmbH Hardware- und Systemdesign
-BC5000-BC5FFF     (base 16)		U&R GmbH Hardware- und Systemdesign
-				In den Wiesen 2
-				Erbach    89155
-				DE
-
-70-B3-D5   (hex)		VITEC
-DD3000-DD3FFF     (base 16)		VITEC
-				99, rue Pierre Semard
-				CHATILLON    92320
-				FR
-
-70-B3-D5   (hex)		Loanguard T/A SE Controls
-2FC000-2FCFFF     (base 16)		Loanguard T/A SE Controls
-				Wellington Crescent
-				Lichfield  Staffordshire  WS13 8RZ
-				GB
-
-70-B3-D5   (hex)		Lupa Tecnologia e Sistemas Ltda
-0ED000-0EDFFF     (base 16)		Lupa Tecnologia e Sistemas Ltda
-				Rua Viscondessa de Cavalcanti, 50 - Poço Rico
-				Juiz de Fora  Minas Gerais  36020-070
-				BR
-
-70-B3-D5   (hex)		OBSERVER FOUNDATION
-633000-633FFF     (base 16)		OBSERVER FOUNDATION
-				Narva mnt 5
-				Tallinn city  Harju county  10117
-				EE
-
-70-B3-D5   (hex)		tiga.eleven GmbH
-FF2000-FF2FFF     (base 16)		tiga.eleven GmbH
-				Stallburggasse 2/37
-				Viennna    1010
-				AT
-
-70-B3-D5   (hex)		GETRALINE
-FD4000-FD4FFF     (base 16)		GETRALINE
-				15 RUE D'ANGIVILLER
-				VERSAILLES    78000
-				FR
-
-70-B3-D5   (hex)		Beijing Huanyu Zhilian Science &Technology Co., Ltd.
-DF5000-DF5FFF     (base 16)		Beijing Huanyu Zhilian Science &Technology Co., Ltd.
-				2/F 202-030, Building 2, No. 1, Gaolizhang Road, Haidian District,Beijing
-				Beijing  Beijing  100095
-				CN
-
-70-B3-D5   (hex)		Smart Controls LLC
-199000-199FFF     (base 16)		Smart Controls LLC
-				10000 St. Clair Ave.
-				Fairview Heights  IL  62208
-				US
-
-70-B3-D5   (hex)		MAC Solutions (UK) Ltd
-E6A000-E6AFFF     (base 16)		MAC Solutions (UK) Ltd
-				Units 6 & 7, Kingfisher Business Park, Arthur Street
-				Redditch  Worcestershire  B98 8LG
-				GB
-
-70-B3-D5   (hex)		Microsoft Research
-4AC000-4ACFFF     (base 16)		Microsoft Research
-				1 Microsoft Way
-				Redmond  WA  98052
-				US
-
-70-B3-D5   (hex)		THETA432
-E1F000-E1FFFF     (base 16)		THETA432
-				1730 E Holly Ave suite 805
-				El Segundo  CA  90245
-				US
-
-70-B3-D5   (hex)		DIEHL Connectivity Solutions
-1F1000-1F1FFF     (base 16)		DIEHL Connectivity Solutions
-				Stephanstraße 49
-				Nürnberg  Bayern  90478
-				DE
-
-70-B3-D5   (hex)		SA Photonics
-E17000-E17FFF     (base 16)		SA Photonics
-				120 Knowles Drive
-				Los Gatos  CA  95032
-				US
-
-70-B3-D5   (hex)		Elbit Systems of America
-B7E000-B7EFFF     (base 16)		Elbit Systems of America
-				4700 Marine Creek Parkway
-				Fort Worth  TX  76179
-				US
-
-70-B3-D5   (hex)		SHENZHEN WITLINK CO.,LTD.
-CF0000-CF0FFF     (base 16)		SHENZHEN WITLINK CO.,LTD.
-				1211 Room,Satellite building,Southern Hi-Tech Zone,Nanshan District
-				ShenZhen  Guangdong  518000
-				CN
-
-70-B3-D5   (hex)		ComNav Technology Ltd.
-E3B000-E3BFFF     (base 16)		ComNav Technology Ltd.
-				Buliding 2,No. 618  Chengliu Middle  Road
-				JiaDing District  Shanghai  201801
-				CN
-
-70-B3-D5   (hex)		Pengo Technology Co., Ltd
-DB7000-DB7FFF     (base 16)		Pengo Technology Co., Ltd
-				No. 13, Alley 7, Lane 533, Rongxing Road, Bade District
-				Taoyuan City    33463
-				TW
-
-70-B3-D5   (hex)		ifak technology + service GmbH
-264000-264FFF     (base 16)		ifak technology + service GmbH
-				Ludwig-Erhard-Allee 10
-				Karlsruhe    76131
-				DE
-
-70-B3-D5   (hex)		Edgeware AB
-B6E000-B6EFFF     (base 16)		Edgeware AB
-				Master Samuelsgatan 42
-				Stockholm    11157
-				SE
-
-70-B3-D5   (hex)		JNR Sports Holdings, LLC
-3E7000-3E7FFF     (base 16)		JNR Sports Holdings, LLC
-				656 NORTH RD
-				CANDIA  NH  03034-2027
-				US
-
-70-B3-D5   (hex)		Elcoma
-31F000-31FFFF     (base 16)		Elcoma
-				Rua Barbosa Lima, 149
-				Recife  Pernambuco  50030-330
-				BR
-
-70-B3-D5   (hex)		Wireless Systems Solutions LLC
-F86000-F86FFF     (base 16)		Wireless Systems Solutions LLC
-				630 Davis Drive Suite 250
-				Morrisville  NC  27560
-				US
-
-70-B3-D5   (hex)		Project H Pty Ltd
-114000-114FFF     (base 16)		Project H Pty Ltd
-				168 Abbotts Rd
-				Glen Innes  NSW  2370
-				AU
-
-70-B3-D5   (hex)		HeadsafeIP PTY LTD
-800000-800FFF     (base 16)		HeadsafeIP PTY LTD
-				231 Birrell st
-				bronte  nsw  2024
-				AU
-
-70-B3-D5   (hex)		Magnetek
-C70000-C70FFF     (base 16)		Magnetek
-				N49W13650 Campbell Dr
-				Menomonee Falls  WI  53051
-				US
-
-70-B3-D5   (hex)		4Jtech s.r.o.
-16A000-16AFFF     (base 16)		4Jtech s.r.o.
-				Ringhofferova 115/1
-				Prague  Czech Republic  155 21
-				CZ
-
-70-B3-D5   (hex)		Capgemini Netherlands
-0B5000-0B5FFF     (base 16)		Capgemini Netherlands
-				Reykjavikplein 1
-				Utrecht    3543KA
-				NL
-
-70-B3-D5   (hex)		Peloton Technology
-43E000-43EFFF     (base 16)		Peloton Technology
-				1060 La Avenida
-				Mountain View  CA  94043
-				US
-
-70-B3-D5   (hex)		ATL-SD
-B76000-B76FFF     (base 16)		ATL-SD
-				Ogawacho 1-1034-11
-				Kodaira  Tokyo  187-0032
-				JP
-
-70-B3-D5   (hex)		Motec Pty Ltd
-71E000-71EFFF     (base 16)		Motec Pty Ltd
-				121 Merrindale Drive
-				Croydon South  Victoria  3136
-				AU
-
-70-B3-D5   (hex)		DORLET SAU
-4F6000-4F6FFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		Ensotech Limited
-C2D000-C2DFFF     (base 16)		Ensotech Limited
-				Unit F,  6 Floor, Cheung Hing Shing Centre, No.23 Sha Tsui Road
-				Tsuen Wan    0000
-				HK
-
-70-B3-D5   (hex)		Unmukti Technology Pvt Ltd
-24A000-24AFFF     (base 16)		Unmukti Technology Pvt Ltd
-				2/288, Vishwas Khand, Gomti Nagar
-				Lucknow  Uttar Pradesh  226010
-				IN
-
-70-B3-D5   (hex)		Digital Instrument Transformers
-54A000-54AFFF     (base 16)		Digital Instrument Transformers
-				26 Bolshaya Vorobyovskaya, off 27
-				Ivanovo    153000
-				RU
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-1C9000-1C9FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Rhythm Engineering, LLC.
-57A000-57AFFF     (base 16)		Rhythm Engineering, LLC.
-				11228 Thompson Ave.
-				Lenexa  KS  66219
-				US
-
-70-B3-D5   (hex)		LG Electronics
-765000-765FFF     (base 16)		LG Electronics
-				LG Science Park, 10, Magokjungang 10-ro, GangSeo-gu
-				SEOUL    07796
-				KR
-
-70-B3-D5   (hex)		APG Cash Drawer, LLC
-77D000-77DFFF     (base 16)		APG Cash Drawer, LLC
-				5250 Industrial Blvd NE
-				Minneapolis  MN  55421
-				US
-
-70-B3-D5   (hex)		AvMap srlu
-048000-048FFF     (base 16)		AvMap srlu
-				Viale Zaccagna 6
-				Carrara    54033
-				IT
-
-70-B3-D5   (hex)		Parkalot Denmark ApS
-638000-638FFF     (base 16)		Parkalot Denmark ApS
-				Niels Jernes Vej 12
-				Aalborg East    9220
-				DK
-
-70-B3-D5   (hex)		Insitu, Inc
-DD2000-DD2FFF     (base 16)		Insitu, Inc
-				118 E Columbia River Way
-				Bingen  WA  98605
-				US
-
-70-B3-D5   (hex)		dds
-F21000-F21FFF     (base 16)		dds
-				606, Woolim Lions Valley 2Cha, 2, Gasan digital 1-ro Geumcheon-gu
-				Seoul    08591
-				KR
-
-70-B3-D5   (hex)		Kawasaki Robot Service,Ltd.
-FEE000-FEEFFF     (base 16)		Kawasaki Robot Service,Ltd.
-				2-1-9,Takatsukadai,Nishi-ku
-				Kobe  Hyogo  651-2271
-				JP
-
-70-B3-D5   (hex)		WiSuite USA
-19A000-19AFFF     (base 16)		WiSuite USA
-				13201 Stephens Road Suite E
-				Warren  MI  48089
-				US
-
-70-B3-D5   (hex)		Access Protocol Pty Ltd
-686000-686FFF     (base 16)		Access Protocol Pty Ltd
-				45 Sarich Court
-				Osborne Park  Western Australia  6017
-				AU
-
-70-B3-D5   (hex)		COPPERNIC SAS
-25F000-25FFFF     (base 16)		COPPERNIC SAS
-				185 avenue Archimede
-				Aix en Provence    13857
-				FR
-
-70-B3-D5   (hex)		KST technology
-8BB000-8BBFFF     (base 16)		KST technology
-				KST B/D 4-5, Wiryeseong-daero 12-gil
-				Songpa-gu  Seoul  05636
-				KR
-
-70-B3-D5   (hex)		Voleatech GmbH
-DA3000-DA3FFF     (base 16)		Voleatech GmbH
-				Grathwohlstr. 5
-				Reutlingen    72762
-				DE
-
-70-B3-D5   (hex)		Leder Elektronik Design
-22D000-22DFFF     (base 16)		Leder Elektronik Design
-				Bruchweg 10
-				Ketsch  Baden-Wuerttemberg  68775
-				DE
-
-70-B3-D5   (hex)		KDT
-748000-748FFF     (base 16)		KDT
-				126, Haeoreum-gil, Namsan-myeon
-				Chuncheon-si  Gangwon-do  200-911
-				KR
-
-70-B3-D5   (hex)		SODAQ
-ADC000-ADCFFF     (base 16)		SODAQ
-				Laapersveld 75
-				Hilversum  -  1213 VB
-				NL
-
-70-B3-D5   (hex)		Behr Technologies Inc
-C1F000-C1FFFF     (base 16)		Behr Technologies Inc
-				10 York Mills Road, Suite 610
-				Toronto  Ontario  M2P 2G4
-				CA
-
-70-B3-D5   (hex)		Communication Systems Solutions
-7F9000-7F9FFF     (base 16)		Communication Systems Solutions
-				6030 S 58th ST, STE C
-				Litcoln  NE  68516
-				US
-
-70-B3-D5   (hex)		APG Cash Drawer, LLC
-BCF000-BCFFFF     (base 16)		APG Cash Drawer, LLC
-				5250 Industrial Blvd NE
-				Minneapolis  MN  55421
-				US
-
-70-B3-D5   (hex)		ODAWARAKIKI AUTO-MACHINE MFG.CO.,LTD
-F88000-F88FFF     (base 16)		ODAWARAKIKI AUTO-MACHINE MFG.CO.,LTD
-				1-11-3 Nakacho
-				Odawara  Kanagawa  250-0005
-				JP
-
-70-B3-D5   (hex)		Beijing HuaLian Technology Co, Ltd.
-623000-623FFF     (base 16)		Beijing HuaLian Technology Co, Ltd.
-				Floor4 16C, north district of Ufida software park, No. 68 Beiqing road, HaiDian district.
-				Beijing  Beijing  100094
-				CN
-
-70-B3-D5   (hex)		UR FOG S.R.L.
-B8E000-B8EFFF     (base 16)		UR FOG S.R.L.
-				Via Toscana 38
-				San Mauro Torinese  TO  10099
-				IT
-
-70-B3-D5   (hex)		Samwell International Inc
-A71000-A71FFF     (base 16)		Samwell International Inc
-				No. 317-1, Sec.2, An Kang Rd., Hsintien Dist
-				New Taipei City    231
-				TW
-
-70-B3-D5   (hex)		PEEK TRAFFIC
-718000-718FFF     (base 16)		PEEK TRAFFIC
-				5401 N SAM HOUSTON PKWY W
-				HOUSTON  null  77086
-				US
-
-70-B3-D5   (hex)		EMAC, Inc.
-679000-679FFF     (base 16)		EMAC, Inc.
-				2390 EMAC Way
-				Carbondale  IL  62901
-				US
-
-70-B3-D5   (hex)		EDFelectronics JRMM Sp z o.o. sp.k.
-234000-234FFF     (base 16)		EDFelectronics JRMM Sp z o.o. sp.k.
-				Rybnicka 64
-				Radlin    44-310
-				PL
-
-70-B3-D5   (hex)		winsun AG
-F67000-F67FFF     (base 16)		winsun AG
-				Beeschi Mattenstrasse 2
-				Steg  Wallis  3940
-				CH
-
-70-B3-D5   (hex)		MI Inc.
-6FC000-6FCFFF     (base 16)		MI Inc.
-				6F, Toto building, 5-1-4, Toranomon, Minato-ku
-				Tokyo    1050001
-				JP
-
-70-B3-D5   (hex)		Orion Corporation
-97A000-97AFFF     (base 16)		Orion Corporation
-				2nd Fl., Shin-Showa No.5 Bldg., 1-5-15 Higashi-Sakata
-				Kimitsu  Chiba  299-1144
-				JP
-
-70-B3-D5   (hex)		Rehwork GmbH
-5A5000-5A5FFF     (base 16)		Rehwork GmbH
-				Ivo-Hauptmann-Ring 14
-				Hamburg    22159
-				DE
-
-70-B3-D5   (hex)		Dynamic Perspective GmbH
-2A8000-2A8FFF     (base 16)		Dynamic Perspective GmbH
-				Wehlistrasse 29/1/1
-				Vienna    1200
-				AT
-
-70-B3-D5   (hex)		Compusign Systems Pty Ltd
-050000-050FFF     (base 16)		Compusign Systems Pty Ltd
-				8/10 Clarice Road
-				Box Hill  Victoria  3128
-				AU
-
-70-B3-D5   (hex)		dA Tomato Limited
-966000-966FFF     (base 16)		dA Tomato Limited
-				8/2 Paribag, Hatirpool, Motaleb Tower, Tower 1, 11A
-				Dhaka  DAC  1000
-				BD
-
-70-B3-D5   (hex)		PROEL TSI s.r.l.
-5CF000-5CFFFF     (base 16)		PROEL TSI s.r.l.
-				VIA DIVISIONE JULIA, 10
-				MANZANO  UD  33044
-				IT
-
-70-B3-D5   (hex)		MiWave Consulting, LLC
-0E1000-0E1FFF     (base 16)		MiWave Consulting, LLC
-				1117 Paine Court
-				Raleigh  NC  27609
-				US
-
-70-B3-D5   (hex)		Vibrationmaster
-C35000-C35FFF     (base 16)		Vibrationmaster
-				Rue Du Commerce, Technoport 3A
-				FOETZ    3895
-				LU
-
-70-B3-D5   (hex)		BEIJING ZGH SECURITY RESEARCH INSTITUTE CO., LTD
-6C3000-6C3FFF     (base 16)		BEIJING ZGH SECURITY RESEARCH INSTITUTE CO., LTD
-				Room 1407, Tianchen Plaza, Chaoyang District
-				BeiJing  BeiJing  100020
-				CN
-
-70-B3-D5   (hex)		Private
-66A000-66AFFF     (base 16)		Private
-
-70-B3-D5   (hex)		Keepen
-69C000-69CFFF     (base 16)		Keepen
-				12, rue Anselme
-				Saint-Ouen    93400
-				FR
-
-70-B3-D5   (hex)		VEILUX INC.
-CFC000-CFCFFF     (base 16)		VEILUX INC.
-				802 GREENVIEW DR. STE 200
-				GRAND PRAIRIE    75050
-				US
-
-70-B3-D5   (hex)		VEILUX INC.
-58E000-58EFFF     (base 16)		VEILUX INC.
-				802 GREENVIEW DR. STE 200
-				GRAND PRAIRIE    75050
-				US
-
-70-B3-D5   (hex)		Wit.com Inc
-434000-434FFF     (base 16)		Wit.com Inc
-				1251 Park Ave
-				Emeryville  CA  94608
-				US
-
-70-B3-D5   (hex)		ETA Technology Pvt Ltd
-A94000-A94FFF     (base 16)		ETA Technology Pvt Ltd
-				No. 484-D, 13th Cross, IV Phase, Peenya Industrial Area,
-				Bangalore  Karnataka  560058
-				IN
-
-70-B3-D5   (hex)		CRESPRIT INC.
-C38000-C38FFF     (base 16)		CRESPRIT INC.
-				D-315 ,177, Jeongjail-ro, Bundang-gu
-				Seongnam-si    13557
-				KR
-
-70-B3-D5   (hex)		Robotic Research, LLC
-EB4000-EB4FFF     (base 16)		Robotic Research, LLC
-				555 Quince Orchard Rd, Suite 300
-				Gaithersburg  MD  20878
-				US
-
-70-B3-D5   (hex)		NINGBO CRRC TIMES TRANSDUCER TECHNOLOGY CO., LTD
-907000-907FFF     (base 16)		NINGBO CRRC TIMES TRANSDUCER TECHNOLOGY CO., LTD
-				No.138 Zhenyong Road
-				Ningbo  Zhejiang  315021
-				CN
-
-70-B3-D5   (hex)		ETA-USA
-23F000-23FFFF     (base 16)		ETA-USA
-				16170 Vineyard Blvd.,  #180
-				Morgan Hill  CA  95037
-				US
-
-70-B3-D5   (hex)		MyoungSung System
-9B4000-9B4FFF     (base 16)		MyoungSung System
-				205, Manhae-ro, Danwon-gu
-				Ansan  Gyeonggi-do  15421
-				KR
-
-70-B3-D5   (hex)		RZB Rudolf Zimmermann, Bamberg GmbH
-D71000-D71FFF     (base 16)		RZB Rudolf Zimmermann, Bamberg GmbH
-				Rheinstraße 16
-				Bamberg  Bavaria  96052
-				DE
-
-70-B3-D5   (hex)		Hagiwara Solutions Co., Ltd.
-3C4000-3C4FFF     (base 16)		Hagiwara Solutions Co., Ltd.
-				2-5-12 Nishiki, Naka-ku
-				Nagoya-shi  Aichi-ken  460-0003
-				JP
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-B39000-B39FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 5
-				Dinkelsbühl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Sensefarm AB
-546000-546FFF     (base 16)		Sensefarm AB
-				Mobilvagen 10
-				Lund    22362
-				SE
-
-70-B3-D5   (hex)		ESPAI DE PRODUCCIÓ I ELECTRÓNI
-162000-162FFF     (base 16)		ESPAI DE PRODUCCIÓ I ELECTRÓNI
-				C/Johannes Gutenberg, 4 y 6
-				Paterna  Valencia  46980
-				ES
-
-70-B3-D5   (hex)		machineQ
-3E6000-3E6FFF     (base 16)		machineQ
-				1900 market st
-				philadelphia  PA  19103
-				US
-
-70-B3-D5   (hex)		shanghai qiaoqi zhinengkeji
-ED0000-ED0FFF     (base 16)		shanghai qiaoqi zhinengkeji
-				building 34, lane 333, laifang road
-				shanghai    201615
-				CN
-
-70-B3-D5   (hex)		Alere Technologies AS
-F52000-F52FFF     (base 16)		Alere Technologies AS
-				Kjelsaasveien 161
-				Oslo  Oslo  0382
-				NO
-
-70-B3-D5   (hex)		Advanced Ventilation Applications, Inc.
-DEA000-DEAFFF     (base 16)		Advanced Ventilation Applications, Inc.
-				2158 Gordon Ave.
-				Menlo Park  CA  94025
-				US
-
-70-B3-D5   (hex)		HORIZON TELECOM
-960000-960FFF     (base 16)		HORIZON TELECOM
-				6 rue de GUEUGNON
-				MONTCEAU LES MINES    71300
-				FR
-
-70-B3-D5   (hex)		Metatronics B.V.
-C7D000-C7DFFF     (base 16)		Metatronics B.V.
-				Torenallee 42-54
-				Eindhoven    5617 BD
-				NL
-
-70-B3-D5   (hex)		Fater Rasa Noor 
-5F1000-5F1FFF     (base 16)		Fater Rasa Noor 
-				Damavand St. , Between Khaghani and Ayat station, Hadi Building, no.499, second floor
-				Tehran  Tehran  0098
-				IR
-
-70-B3-D5   (hex)		Foxconn 4Tech
-A46000-A46FFF     (base 16)		Foxconn 4Tech
-				U Zámečku 27
-				Pardubice  Česká republika  53003
-				CZ
-
-70-B3-D5   (hex)		ADVEEZ
-7EE000-7EEFFF     (base 16)		ADVEEZ
-				12 RUE MICHEL LABROUSSE, BATIMENT 6
-				toulouse  FRANCE   31100
-				FR
-
-70-B3-D5   (hex)		LGM Ingénierie
-968000-968FFF     (base 16)		LGM Ingénierie
-				13 avenue Morane Saulnier
-				Vélizy-Villacoublay    78140
-				FR
-
-70-B3-D5   (hex)		D.T.S Illuminazione Srl 
-D7C000-D7CFFF     (base 16)		D.T.S Illuminazione Srl 
-				Via Fagnano Selve,  12 / 14
-				Misano Adriatico   Rimini   47843
-				IT
-
-70-B3-D5   (hex)		TATTILE SRL
-EEF000-EEFFFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		GL TECH CO.,LTD
-248000-248FFF     (base 16)		GL TECH CO.,LTD
-				No. Ten Changchun Road
-				ZHENGZHOU  HENAN  455000
-				CN
-
-70-B3-D5   (hex)		ard sa
-D6E000-D6EFFF     (base 16)		ard sa
-				Micropolis Bat Clematis
-				Gap  France  05000
-				FR
-
-70-B3-D5   (hex)		Duerkopp-Adler
-3C9000-3C9FFF     (base 16)		Duerkopp-Adler
-				Potsdamerstr. 190
-				Bielefeld    33719
-				DE
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-6B7000-6B7FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		RoboCore Tecnologia
-0AC000-0ACFFF     (base 16)		RoboCore Tecnologia
-				Estrada das Lagrimas 1986 sala 22
-				Sao Caetano do Sul  SP  09580500
-				BR
-
-70-B3-D5   (hex)		DEA SYSTEM SPA
-8FA000-8FAFFF     (base 16)		DEA SYSTEM SPA
-				VIA DELLA TECNICA 6
-				PIOVENE ROCCHETTE  VICENZA  36013
-				IT
-
-70-B3-D5   (hex)		Blue Marble Communications, Inc.
-77E000-77EFFF     (base 16)		Blue Marble Communications, Inc.
-				9520 Padgett St, Suite 101
-				San Diego  CA  92126
-				US
-
-70-B3-D5   (hex)		Enyx SA
-21C000-21CFFF     (base 16)		Enyx SA
-				8 rue greneta
-				Paris    75003
-				FR
-
-70-B3-D5   (hex)		SonoSound ApS
-656000-656FFF     (base 16)		SonoSound ApS
-				Malov Byvej 229
-				Malov  Hovedstaden  2760
-				DK
-
-70-B3-D5   (hex)		Andasis Elektronik San. ve Tic. A.Ş.
-D62000-D62FFF     (base 16)		Andasis Elektronik San. ve Tic. A.Ş.
-				Teknopark İstanbul,  Sanayi Mah, Teknopark Bulvarı, No:1/1C 1206 Pendik/İstanbul
-				İstanbul    34906
-				TR
-
-70-B3-D5   (hex)		RFRain LLC
-F5F000-F5FFFF     (base 16)		RFRain LLC
-				8 THE GREEN SUITE 4510
-				Dover  DE  19901
-				US
-
-70-B3-D5   (hex)		UMAN
-722000-722FFF     (base 16)		UMAN
-				Unit 12, Oxbow Crescent, Esturies, Century City
-				Cape Town  Western Cape  7441
-				ZA
-
-70-B3-D5   (hex)		SLAT
-920000-920FFF     (base 16)		SLAT
-				11 Rue Jean-Elysée DUPUY
-				Champagne au Mont d'Or  Rhône  69543
-				FR
-
-70-B3-D5   (hex)		Star Systems International
-5EF000-5EFFFF     (base 16)		Star Systems International
-				Unit 04, 12/F Vanta Industrial Centre, 21-33 Tai Lin Pai Road
-				Kwai Chung    852
-				HK
-
-70-B3-D5   (hex)		CT Company
-2D4000-2D4FFF     (base 16)		CT Company
-				Godovikova , 9, Moscow
-				Moscow  RUSSIA  129085
-				RU
-
-70-B3-D5   (hex)		Brakels IT
-54B000-54BFFF     (base 16)		Brakels IT
-				Veldboersweg 10a
-				Langeveen  Overijssel  7679TL
-				NL
-
-70-B3-D5   (hex)		GS Elektromedizinsiche Geräte G. Stemple GmbH
-144000-144FFF     (base 16)		GS Elektromedizinsiche Geräte G. Stemple GmbH
-				Hauswiesenstr. 26
-				Kaufering  Bayern  86916
-				DE
-
-70-B3-D5   (hex)		Chengdu Cove Technology CO.,LTD
-24E000-24EFFF     (base 16)		Chengdu Cove Technology CO.,LTD
-				6-419, Hi-tech Incubation Park, No.1480 Tianfu Ave
-				Chengdu  Sichuan  610000
-				CN
-
-70-B3-D5   (hex)		DORLET SAU
-8E3000-8E3FFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-70-B3-D5   (hex)		Cubitech
-7D0000-7D0FFF     (base 16)		Cubitech
-				4-6 Kiprou str
-				Tavros  Athens  17778
-				GR
-
-70-B3-D5   (hex)		Hangzhou AwareTec Technology Co., Ltd
-5DE000-5DEFFF     (base 16)		Hangzhou AwareTec Technology Co., Ltd
-				6th Floor,Building 2,No.307 Liuhe Road,Binjiang District,Hangzhou 城市： Hangzhou
-				Hangzhou  Zhejiang  310000
-				CN
-
-70-B3-D5   (hex)		TIAMA
-BA3000-BA3FFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-00-1B-C5   (hex)		Triax A/S
-0BB000-0BBFFF     (base 16)		Triax A/S
-				Bjornkaervej 3
-				Hornsyld  Denmark  8783
-				DK
-
-70-B3-D5   (hex)		APP Engineering, Inc.
-049000-049FFF     (base 16)		APP Engineering, Inc.
-				5234 Elmwood Avenue
-				Indianapolis  IN  46203
-				US
-
-70-B3-D5   (hex)		Shanghai YuanAn Environmental Protection Technology Co.,Ltd
-6D8000-6D8FFF     (base 16)		Shanghai YuanAn Environmental Protection Technology Co.,Ltd
-				Rm213/225,Oriental Pearl European City,No 285 East luochuan Road
-				Shanghai  Shanghai  200072
-				CN
-
-70-B3-D5   (hex)		Cardinal Health
-75E000-75EFFF     (base 16)		Cardinal Health
-				444 McDonnell Blvd.
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Monnit Corporation
-236000-236FFF     (base 16)		Monnit Corporation
-				3400 S West Temple
-				Salt Lake City    84115
-				US
-
-70-B3-D5   (hex)		Melecs EWS GmbH
-704000-704FFF     (base 16)		Melecs EWS GmbH
-				GZO-Technologiestrasse 1
-				Siegendorf     7011
-				AT
-
-70-B3-D5   (hex)		Triton Electronics Ltd
-7A5000-7A5FFF     (base 16)		Triton Electronics Ltd
-				Bigods Hall, Bigods Lane
-				DUNMOW  Essex  CM63BE
-				GB
-
-70-B3-D5   (hex)		Lab241 Co.,Ltd.
-21B000-21BFFF     (base 16)		Lab241 Co.,Ltd.
-				25Dong 241Ho, 97, Siheung-daero, Geumcheon-gu
-				Seoul  Seoul  08639
-				KR
-
-70-B3-D5   (hex)		Infodev Electronic Designers Intl.
-DBF000-DBFFFF     (base 16)		Infodev Electronic Designers Intl.
-				1995 rue Frank-Carrel Suite 202
-				Quebec  Quebec  G1N4H9
-				CA
-
-70-B3-D5   (hex)		KWS-Electronic GmbH
-EB3000-EB3FFF     (base 16)		KWS-Electronic GmbH
-				Sportplatzstrasse 1
-				Grosskarolinenfeld    D-83109
-				DE
-
-70-B3-D5   (hex)		Alere Technologies AS
-2AE000-2AEFFF     (base 16)		Alere Technologies AS
-				Kjelsaasveien 161
-				Oslo  Oslo  0382
-				NO
-
-70-B3-D5   (hex)		Intesens
-B17000-B17FFF     (base 16)		Intesens
-				425 rue Jean Rostand
-				labege    31670
-				FR
-
-70-B3-D5   (hex)		Shanghai Holystar Information Technology Co.,Ltd
-6E1000-6E1FFF     (base 16)		Shanghai Holystar Information Technology Co.,Ltd
-				8F Building A3 NO.1528 Gumei Rd Shanghai China PR
-				shanghai    200233
-				CN
-
-70-B3-D5   (hex)		CSM MACHINERY srl
-FE3000-FE3FFF     (base 16)		CSM MACHINERY srl
-				Via Cadore Mare, 25
-				Cimetta di Codognè  Treviso  31013
-				IT
-
-70-B3-D5   (hex)		Plantiga Technologies Inc
-525000-525FFF     (base 16)		Plantiga Technologies Inc
-				324-611 Alexander Street
-				Vancouver  British Columbia  V6A 1E1
-				CA
-
-70-B3-D5   (hex)		Renesas Electronics
-340000-340FFF     (base 16)		Renesas Electronics
-				2801 Scott Blvd
-				Santa Clara  CA  95050
-				US
-
-70-B3-D5   (hex)		HGH SYSTEMES INFRAROUGES
-853000-853FFF     (base 16)		HGH SYSTEMES INFRAROUGES
-				10 Rue Maryse Bastié
-				Igny  IDF  91430
-				FR
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-4E1000-4E1FFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		KMtronic ltd
-0AF000-0AFFFF     (base 16)		KMtronic ltd
-				Dobri Czintulov 28A str.
-				 Gorna Oryahovica  VT  5100
-				BG
-
-70-B3-D5   (hex)		FactoryLab B.V.
-5DC000-5DCFFF     (base 16)		FactoryLab B.V.
-				Lindtsedijk 54
-				Zwijndrecht  Zuid Holland  3336LE
-				NL
-
-70-B3-D5   (hex)		OLEDCOMM
-A43000-A43FFF     (base 16)		OLEDCOMM
-				10-12 avenue de l'Europe
-				Vélizy Villacoublay  Ile de France  78140
-				FR
-
-70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau AG
-D7B000-D7BFFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
-				Werner-von-Siemens-Str. 1
-				Offenburg  Ba-Wue  77656
-				DE
-
-70-B3-D5   (hex)		SHENZHEN WISEWING INTERNET TECHNOLOGY CO.,LTD
-94A000-94AFFF     (base 16)		SHENZHEN WISEWING INTERNET TECHNOLOGY CO.,LTD
-				No.826,Zone 1,Block B,Famous industrial product display purchasing center,Baoyuan Road,Xixiang,Bao'an Dis., Shenzhen,P.R.China
-				shenzhen  China  518102
-				CN
-
-70-B3-D5   (hex)		Savari Inc
-207000-207FFF     (base 16)		Savari Inc
-				2005 De la cruz blvd, st 111,
-				santa clara  CA  95050
-				US
-
-70-B3-D5   (hex)		Selex ES Inc.
-F5E000-F5EFFF     (base 16)		Selex ES Inc.
-				4221 Tudor Lane
-				Greensboro  NC  27410
-				US
-
-70-B3-D5   (hex)		iFreecomm Technology Co., Ltd
-032000-032FFF     (base 16)		iFreecomm Technology Co., Ltd
-				D401, NO.16 Langshan Road, Nanshan District
-				Shenzhen  Guangdong  518057
-				CN
-
-70-B3-D5   (hex)		QIAGEN Instruments AG
-A29000-A29FFF     (base 16)		QIAGEN Instruments AG
-				Garstligweg 8
-				Hombrechtikon  Zurich  8634
-				CH
-
-70-B3-D5   (hex)		True Networks Ltd.
-AF2000-AF2FFF     (base 16)		True Networks Ltd.
-				#401 51 Seongnam-Daero Bundang-gu
-				SEONGNAM-si  GYEONGGI-do  13636
-				KR
-
-70-B3-D5   (hex)		EPSOFT Co., Ltd
-A3A000-A3AFFF     (base 16)		EPSOFT Co., Ltd
-				301, Bupyeong-daero, Bupyeong-gu
-				Incheon    21315
-				KR
-
-70-B3-D5   (hex)		Visual Fan
-FD6000-FD6FFF     (base 16)		Visual Fan
-				Brazilor nr.61
-				Brasov  Brasov  500313
-				RO
-
-70-B3-D5   (hex)		InOut Communication Systems
-FF9000-FF9FFF     (base 16)		InOut Communication Systems
-				via Nobel, 10
-				Noventa di Piave  Venezia  30020
-				IT
-
-70-B3-D5   (hex)		Sensor 42
-BFB000-BFBFFF     (base 16)		Sensor 42
-				1165 Linda Vista, #110
-				San Marcos  CA  92078
-				US
-
-70-B3-D5   (hex)		Electrolux
-7A6000-7A6FFF     (base 16)		Electrolux
-				Corso Lino Zanussi 24
-				Porcia  PORDENONE  33080
-				IT
-
-70-B3-D5   (hex)		Movimento Group AB
-357000-357FFF     (base 16)		Movimento Group AB
-				45550 Commerce Center Drive
-				Plymouth  MI  48170
-				US
-
-70-B3-D5   (hex)		IDEM INC.
-DC6000-DC6FFF     (base 16)		IDEM INC.
-				17302 Daimler St. STE A
-				Irvine  CA  92614
-				US
-
-70-B3-D5   (hex)		MANSION INDUSTRY CO., LTD.
-734000-734FFF     (base 16)		MANSION INDUSTRY CO., LTD.
-				5F., No.6, Siwei Ln., Zhongzheng Rd., Xindian Dist.,
-				New Taipei City     231
-				TW
-
-70-B3-D5   (hex)		Wavemed srl
-813000-813FFF     (base 16)		Wavemed srl
-				Via di campo gillaro 29/a
-				San Cesareo  Roma  00030
-				IT
-
-70-B3-D5   (hex)		Spaceflight Industries
-98F000-98FFFF     (base 16)		Spaceflight Industries
-				1505 Westlake Ave N, Ste 600
-				Seattle  WA  98109
-				US
-
-70-B3-D5   (hex)		Keycom Corp.
-C37000-C37FFF     (base 16)		Keycom Corp.
-				3-39-14 Minamiotsuka
-				Toshima-ku  Tokyo  170-0005
-				JP
-
-70-B3-D5   (hex)		Enerwise Solutions Ltd.
-99C000-99CFFF     (base 16)		Enerwise Solutions Ltd.
-				Flat/Room 510, 5/F, Wayson Comm Building
-				Hong Kong  none  none
-				HK
-
-70-B3-D5   (hex)		Scrona AG
-00D000-00DFFF     (base 16)		Scrona AG
-				Technoparkstrasse 1
-				Zurich  Zurich  8005
-				CH
-
-70-B3-D5   (hex)		Axxess Identification Ltd
-616000-616FFF     (base 16)		Axxess Identification Ltd
-				27-28 Shrivenham Hundred Business Park
-				Swindon  Wiltshire  SN6 8TZ
-				GB
-
-70-B3-D5   (hex)		RIKEN OPTECH CORPORATION
-63E000-63EFFF     (base 16)		RIKEN OPTECH CORPORATION
-				5615-1 Taguchi
-				Saku-city  Nagano  384-0412
-				JP
-
-70-B3-D5   (hex)		Asystems Corporation
-255000-255FFF     (base 16)		Asystems Corporation
-				10F., No.70, Sec.1, Keelung Rd
-				Taipei  Taiwan  11070
-				TW
-
-70-B3-D5   (hex)		Arrowvale Electronics
-B07000-B07FFF     (base 16)		Arrowvale Electronics
-				Shawbank Road
-				Redditch  Worcestershire  B98 8YN
-				GB
-
-70-B3-D5   (hex)		NAS Australia P/L
-E91000-E91FFF     (base 16)		NAS Australia P/L
-				28 Newstead Terrace
-				Newstead  QLD  4006
-				AU
-
-70-B3-D5   (hex)		Data Informs LLC
-566000-566FFF     (base 16)		Data Informs LLC
-				9838 Nevada Avenue
-				Chatsworth  CA  91311-4040
-				US
-
-70-B3-D5   (hex)		MI Inc.
-D26000-D26FFF     (base 16)		MI Inc.
-				6F, Toto building, 5-1-4, Toranomon, Minato-ku
-				Tokyo    1050001
-				JP
-
-70-B3-D5   (hex)		Shangdong Bosure Automation Technology Ltd
-A88000-A88FFF     (base 16)		Shangdong Bosure Automation Technology Ltd
-				No.1 Shunhua Road, Gaoxin District
-				Jinan  Shangdong  250101
-				CN
-
-70-B3-D5   (hex)		Maharsystem
-72E000-72EFFF     (base 16)		Maharsystem
-				No 1, 5th Alley ,Ozgol , Artesh Blvd
-				Tehran  Tehran  1694937141
-				IR
-
-70-B3-D5   (hex)		HumanEyes Technologies Ltd.
-9DD000-9DDFFF     (base 16)		HumanEyes Technologies Ltd.
-				Neve Ilan
-				Neve Ilan    90850
-				IL
-
-70-B3-D5   (hex)		Shenzhen  SanYeCao  Electronics  Co.,Ltd
-E7B000-E7BFFF     (base 16)		Shenzhen  SanYeCao  Electronics  Co.,Ltd
-				505, 5/F, Dahong High Tech Industry Park, No.6-18, Xinhe Road, Shajing, Baoan District,   Shenzhen
-				SHENZHEN  GUANGDONG  518100
-				CN
-
-70-B3-D5   (hex)		RMA Mess- und Regeltechnik GmbH & Co.KG
-DF8000-DF8FFF     (base 16)		RMA Mess- und Regeltechnik GmbH & Co.KG
-				Forsthausstr. 3
-				Rheinau    77866
-				DE
-
-70-B3-D5   (hex)		Cellier Domesticus inc
-E96000-E96FFF     (base 16)		Cellier Domesticus inc
-				840 5E avenue
-				Montreal  Quebec  H9c1j5
-				CA
-
-70-B3-D5   (hex)		COMM-connect A/S
-EED000-EEDFFF     (base 16)		COMM-connect A/S
-				Raasigvangen 2
-				Slangerup    DK-3550
-				DK
-
-70-B3-D5   (hex)		Plasmapp Co.,Ltd.
-E18000-E18FFF     (base 16)		Plasmapp Co.,Ltd.
-				83, Jukdong-ro, Yuseong-gu,
-				Daejeon    KS015
-				KR
-
-70-B3-D5   (hex)		Harborside Technology
-845000-845FFF     (base 16)		Harborside Technology
-				140 Mcknitt Pl
-				Garner  NC  27529
-				US
-
-70-B3-D5   (hex)		Rockwell Collins Canada
-839000-839FFF     (base 16)		Rockwell Collins Canada
-				30 Edgewater Street, Suite 104
-				Ottawa  ON  K2L1V8
-				CA
-
-70-B3-D5   (hex)		HEITEC AG
-557000-557FFF     (base 16)		HEITEC AG
-				Dr.-Otto-Leich-Str. 16
-				Eckental  Bavaria  90542
-				DE
-
-70-B3-D5   (hex)		ND METER
-68C000-68CFFF     (base 16)		ND METER
-				228 BOLTON ROAD
-				BRADFORD    BD3 0QW
-				GB
-
-70-B3-D5   (hex)		CRDE
-C42000-C42FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		DIGIVERV INC
-548000-548FFF     (base 16)		DIGIVERV INC
-				1515 Evanvale Dr
-				Allen  TX  75013
-				US
-
-70-B3-D5   (hex)		Council Rock
-7C9000-7C9FFF     (base 16)		Council Rock
-				11 Centre Park
-				Rochester    14614
-				US
-
-70-B3-D5   (hex)		Blink Services AB
-2A1000-2A1FFF     (base 16)		Blink Services AB
-				Generalsgatan 5
-				Malmö    211 33
-				SE
-
-70-B3-D5   (hex)		KST technology
-CB3000-CB3FFF     (base 16)		KST technology
-				KST B/D 4-5, Wiryeseong-daero 12-gil
-				Songpa-gu  Seoul  05636
-				KR
-
-70-B3-D5   (hex)		Boutronic
-359000-359FFF     (base 16)		Boutronic
-				Edisonstraat 24
-				's-Gravenzande  Nederland  2691GT
-				NL
-
-70-B3-D5   (hex)		Abalance Corporation
-07F000-07FFFF     (base 16)		Abalance Corporation
-				Tennozu First Tower 5F, 2-2-4 Higashishinagawa
-				Shinagawa-ku  Tokyo  140-0002
-				JP
-
-70-B3-D5   (hex)		HUGEL GmbH
-04E000-04EFFF     (base 16)		HUGEL GmbH
-				Seestrasse 4
-				Oberrieden  ZH  8942
-				CH
-
-70-B3-D5   (hex)		EZSYS Co., Ltd.
-D43000-D43FFF     (base 16)		EZSYS Co., Ltd.
-				E-914,E-915, 60, Haan-ro(Soha-dong, Gwangmyeong SK Technopark)
-				 Gwangmyeong-si  Gyeonggi-do  14322
-				KR
-
-70-B3-D5   (hex)		SRS Group s.r.o.
-95B000-95BFFF     (base 16)		SRS Group s.r.o.
-				Rybnicna 36/D
-				Bratislava    83107
-				SK
-
-70-B3-D5   (hex)		JASCO Applied Sciences Canada Ltd
-7F7000-7F7FFF     (base 16)		JASCO Applied Sciences Canada Ltd
-				32 Troop Avenue, Suite 202
-				Dartmouth  Nova Scotia  B3B 1Z1
-				CA
-
-70-B3-D5   (hex)		CRDE
-6B2000-6B2FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		RIOT
-715000-715FFF     (base 16)		RIOT
-				295 Kent ave
-				ferndale, Randburg  Gauteng  2194
-				ZA
-
-70-B3-D5   (hex)		Design SHIFT
-FDB000-FDBFFF     (base 16)		Design SHIFT
-				3475 Edison Way, Suite G
-				Menlo Park  CA  94025
-				US
-
-70-B3-D5   (hex)		Sensorberg GmbH
-6AF000-6AFFFF     (base 16)		Sensorberg GmbH
-				Leipziger Str. 126
-				Berlin  Berlin  10117
-				DE
-
-70-B3-D5   (hex)		Rheonics GmbH
-D20000-D20FFF     (base 16)		Rheonics GmbH
-				Rheonics GmbH, Technoparkstr. 2
-				Winterthur  Schweiz  8406
-				CH
-
-70-B3-D5   (hex)		Emtel System Sp. z o.o.
-969000-969FFF     (base 16)		Emtel System Sp. z o.o.
-				Promienista 11
-				Poznan    60-288
-				PL
-
-70-B3-D5   (hex)		Amphenol Advanced Sensors
-A9A000-A9AFFF     (base 16)		Amphenol Advanced Sensors
-				Amphenol Interconnect India Private Ltd, MAHAVEER TECHNO PARK  APIIC, Plot no.6, Survey No.64, Software Units layout, Hi-tech City, Madhapur,
-				HYDERABAD  Telangana  500081
-				IN
-
-70-B3-D5   (hex)		DWQ Informatikai Tanacsado es Vezerlestechnikai KFT
-B48000-B48FFF     (base 16)		DWQ Informatikai Tanacsado es Vezerlestechnikai KFT
-				Bathoty Istvan str 14
-				Rackeve    2300
-				HU
-
-70-B3-D5   (hex)		Skyriver Communications Inc.
-C22000-C22FFF     (base 16)		Skyriver Communications Inc.
-				7310 Miramar Rd. #600
-				San Diego  CA  92126
-				US
-
-70-B3-D5   (hex)		K&J Schmittschneider AG
-9B3000-9B3FFF     (base 16)		K&J Schmittschneider AG
-				Wiesholzstrasse 452
-				Ramsen  Schaffhausen  8262
-				CH
-
-70-B3-D5   (hex)		Meta Computing Services, Corp
-E9A000-E9AFFF     (base 16)		Meta Computing Services, Corp
-				5795 S Sandhill Rd Suite F
-				Las Vegas  NV  89120
-				US
-
-70-B3-D5   (hex)		ExSens Technology (Pty) Ltd.
-14A000-14AFFF     (base 16)		ExSens Technology (Pty) Ltd.
-				39 Kelly Road, The Palisades Business Park Unit C1
-				Boksburg  Gauteng  1459
-				ZA
-
-70-B3-D5   (hex)		Digital Domain
-4E7000-4E7FFF     (base 16)		Digital Domain
-				1700 Main St Ste 222
-				Washougal  WA  98671
-				US
-
-70-B3-D5   (hex)		Tieline Research Pty Ltd
-20F000-20FFFF     (base 16)		Tieline Research Pty Ltd
-				PO Box 2092
-				MALAGA  Western Australia  6944
-				AU
-
-70-B3-D5   (hex)		Herrmann Datensysteme GmbH
-B04000-B04FFF     (base 16)		Herrmann Datensysteme GmbH
-				Gewerbepark 10
-				Großpostwitz OT Ebendörfel    02692
-				DE
-
-70-B3-D5   (hex)		Symboticware Incorporated
-945000-945FFF     (base 16)		Symboticware Incorporated
-				1545 Maley Drive
-				Sudbury  ON  P3A 4R7
-				CA
-
-70-B3-D5   (hex)		ASPT, INC.
-192000-192FFF     (base 16)		ASPT, INC.
-				303-ho B-dong Songdosmartvalley, 30 Songdomirae-ro Yeonsu-gu
-				Incheon    21990
-				KR
-
-70-B3-D5   (hex)		CONTROL SYSTEMS Srl
-229000-229FFF     (base 16)		CONTROL SYSTEMS Srl
-				Via del Brolo, 14
-				Cremona  CR  26100
-				IT
-
-70-B3-D5   (hex)		SHANGHAI CHENZHU INSTRUMENT CO., LTD.
-46C000-46CFFF     (base 16)		SHANGHAI CHENZHU INSTRUMENT CO., LTD.
-				Building 6, 201 Minyi Road, Songjiang District
-				Shanghai    201612
-				CN
-
-70-B3-D5   (hex)		Applied Satellite Engineering
-A48000-A48FFF     (base 16)		Applied Satellite Engineering
-				16559 N 92nd, Suite 101
-				Scottsdale  AZ  85260
-				US
-
-70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
-479000-479FFF     (base 16)		LINEAGE POWER PVT LTD.,
-				186/3, #117, HOODY VILLAGE MAHADEVAPURA POST, WHITEFIELD RD.          
-				BANGALORE  KAR  560048
-				IN
-
-70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
-CE1000-CE1FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-70-B3-D5   (hex)		System 11 Sp. z o.o.
-9DE000-9DEFFF     (base 16)		System 11 Sp. z o.o.
-				Wieniawskiego 18
-				Chorzow    41-506
-				PL
-
-70-B3-D5   (hex)		KANOA INC
-A47000-A47FFF     (base 16)		KANOA INC
-				760 Bryant Street
-				San Francisco  CA  94107
-				US
-
-70-B3-D5   (hex)		Biwave Technologies, Inc.
-168000-168FFF     (base 16)		Biwave Technologies, Inc.
-				3F-6, No. 77, Keelung Rd., Sec. 2
-				Taipei     11491 
-				TW
-
-70-B3-D5   (hex)		Mencom Corporation
-596000-596FFF     (base 16)		Mencom Corporation
-				5750 McEver Road
-				Oakwood  GA  30566
-				US
-
-70-B3-D5   (hex)		Fiem Industries Ltd.
-495000-495FFF     (base 16)		Fiem Industries Ltd.
-				Unit VII, Plot No. 1915, Rai Industrial Estate, Phase-V
-				Sonepat  Haryana  131029
-				IN
-
-70-B3-D5   (hex)		Wyebot, Inc.
-8C3000-8C3FFF     (base 16)		Wyebot, Inc.
-				2 Mount Royal Ave.
-				Marlborough  MA  01752
-				US
-
-70-B3-D5   (hex)		Advanced Vision Technology Ltd
-E50000-E50FFF     (base 16)		Advanced Vision Technology Ltd
-				Thames House, Mere Park
-				Marlow  Buckinghamshire  SL7 1PB
-				GB
-
-70-B3-D5   (hex)		Foerster-Technik GmbH
-2B4000-2B4FFF     (base 16)		Foerster-Technik GmbH
-				Gerwigstraße 25
-				Engen  Baden-Württemberg  78234
-				DE
-
-70-B3-D5   (hex)		China Entropy Co., Ltd.
-E16000-E16FFF     (base 16)		China Entropy Co., Ltd.
-				Haidian District
-				Beijing    100085
-				CN
-
-70-B3-D5   (hex)		ard sa
-489000-489FFF     (base 16)		ard sa
-				Micropolis Bat Clematis
-				Gap  France  05000
-				FR
-
-70-B3-D5   (hex)		ITS Industrial Turbine Services GmbH
-9A1000-9A1FFF     (base 16)		ITS Industrial Turbine Services GmbH
-				Fabriksplatz 1
-				Steyrermuehl  Upper Austria  4662
-				AT
-
-70-B3-D5   (hex)		CG-WIRELESS
-BF3000-BF3FFF     (base 16)		CG-WIRELESS
-				LE MOUSTOIR
-				PLOGASTEL SAINT GERMAIN    29710
-				FR
-
-70-B3-D5   (hex)		Vishay Nobel AB
-873000-873FFF     (base 16)		Vishay Nobel AB
-				Box 423
-				Karlskoga    SE-691 27
-				SE
-
-70-B3-D5   (hex)		DesignA Electronics Limited
-661000-661FFF     (base 16)		DesignA Electronics Limited
-				Unit 6
-				Christchurch  New Zealand  8011
-				NZ
-
-70-B3-D5   (hex)		Visualware, Inc.
-2A2000-2A2FFF     (base 16)		Visualware, Inc.
-				937 SIERRA DRIVE
-				TURLOCK  CA  95380
-				US
-
-70-B3-D5   (hex)		Sumer Data S.L
-011000-011FFF     (base 16)		Sumer Data S.L
-				Francisco Ayala,2
-				Rivas-Vaciamadrid  Madrid  28522
-				ES
-
-70-B3-D5   (hex)		LG Electronics
-927000-927FFF     (base 16)		LG Electronics
-				2621, Nuambusunhwan-ro, Gangnam-gu,
-				Seoul    135-860
-				KR
-
-70-B3-D5   (hex)		Intervala
-3F0000-3F0FFF     (base 16)		Intervala
-				700 Braddock Avenue
-				East Pittsburgh  PA  15112-1242
-				US
-
-70-B3-D5   (hex)		HORIBA ABX SAS
-AB8000-AB8FFF     (base 16)		HORIBA ABX SAS
-				rue du caducee
-				Montpellier  Herault  34000
-				FR
-
-70-B3-D5   (hex)		International Center for Elementary Particle Physics, The University of Tokyo
-F9E000-F9EFFF     (base 16)		International Center for Elementary Particle Physics, The University of Tokyo
-				7-3-1 Hongo, Bunkyo-ku
-				Tokyo    113-0033
-				JP
-
-70-B3-D5   (hex)		Star Electronics GmbH & Co. KG 
-3BF000-3BFFFF     (base 16)		Star Electronics GmbH & Co. KG 
-				Jahnstraße 86 
-				Göppingen  BW  73037
-				DE
-
-70-B3-D5   (hex)		CableLabs
-BD1000-BD1FFF     (base 16)		CableLabs
-				858 Coal Creek Circle
-				Louisville  CO  80027
-				US
-
-70-B3-D5   (hex)		Guangxi Hunter Information Industry Co.,Ltd
-397000-397FFF     (base 16)		Guangxi Hunter Information Industry Co.,Ltd
-				Hunter Building,Creative Industry Park In Guilin,China
-				Guilin  Guangxi Province  541004
-				CN
-
-70-B3-D5   (hex)		LOOK EASY INTERNATIONAL LIMITED
-0C2000-0C2FFF     (base 16)		LOOK EASY INTERNATIONAL LIMITED
-				4th Floor, No. 551, Guang-Fu South Road
-				Taipei  Xinyi District  11074
-				TW
-
-70-B3-D5   (hex)		ATX Networks Corp
-51C000-51CFFF     (base 16)		ATX Networks Corp
-				1-501 Clements Road West
-				Ajax  Ontario  L1s7H4
-				CA
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-0E8000-0E8FFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		Sierra Pacific Innovations Corp
-EBE000-EBEFFF     (base 16)		Sierra Pacific Innovations Corp
-				6620 S Tenaya Way
-				 Las Vegas    89113
-				US
-
-70-B3-D5   (hex)		Terragene S.A
-9CE000-9CEFFF     (base 16)		Terragene S.A
-				Guemes 2879
-				Rosario  Santa fe  2000
-				AR
-
-70-B3-D5   (hex)		FINANCIERE DE L'OMBREE (eolane)
-31C000-31CFFF     (base 16)		FINANCIERE DE L'OMBREE (eolane)
-				La Fresnay
-				Le Fresne sur Loire    49123
-				FR
-
-70-B3-D5   (hex)		OES Inc.
-1B8000-1B8FFF     (base 16)		OES Inc.
-				4056 Blakie Road
-				London  ON  N6L1P7
-				CA
-
-70-B3-D5   (hex)		DKS Dienstl.ges. f. Komm.anl. d. Stadt- u. Reg.verk. mbH
-EF8000-EF8FFF     (base 16)		DKS Dienstl.ges. f. Komm.anl. d. Stadt- u. Reg.verk. mbH
-				Robert-Perthel-Str. 79
-				Cologne    50739
-				DE
-
-70-B3-D5   (hex)		BRUSHIES
-85A000-85AFFF     (base 16)		BRUSHIES
-				6402 Langer Lane
-				Lino Lakes  MN  55038
-				US
-
-70-B3-D5   (hex)		Quan International Co., Ltd.
-724000-724FFF     (base 16)		Quan International Co., Ltd.
-				4F, No. 196, Hsinghu 3rd Rd., Neihu District
-				Taipei    11494
-				TW
-
-70-B3-D5   (hex)		Key Chemical & Equipment Company
-427000-427FFF     (base 16)		Key Chemical & Equipment Company
-				13195 49th Street North Suite H
-				Clearwater  FL  33762
-				US
-
-70-B3-D5   (hex)		Earth Works
-61C000-61CFFF     (base 16)		Earth Works
-				13-21 Saiwaityou
-				Kofu  Yamanashi  400-0857
-				JP
-
-70-B3-D5   (hex)		Layer Logic Inc
-C5C000-C5CFFF     (base 16)		Layer Logic Inc
-				5412 Courseview Drive, suite 100
-				Mason  OH  45040
-				US
-
-70-B3-D5   (hex)		Eutron SPA
-DCC000-DCCFFF     (base 16)		Eutron SPA
-				Via Crespi 29/31
-				Pradalunga  Bergamo  24020
-				IT
-
-70-B3-D5   (hex)		Device Solutions Ltd
-BAA000-BAAFFF     (base 16)		Device Solutions Ltd
-				PO Box 131
-				Rolleston  Canterbury  7614
-				NZ
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-25A000-25AFFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		SEASON DESIGN TECHNOLOGY
-94D000-94DFFF     (base 16)		SEASON DESIGN TECHNOLOGY
-				FLOOR 4, WARDS EXCHANGE, 199 ECCLESALL ROAD
-				SHEFFIELD  SOUTH YORKSHIRE  S11 8HW
-				GB
-
-70-B3-D5   (hex)		Altron, a.s.
-693000-693FFF     (base 16)		Altron, a.s.
-				Novodvorska 994/138
-				Praha    14221
-				CZ
-
-70-B3-D5   (hex)		Matrix Switch Corporation
-90B000-90BFFF     (base 16)		Matrix Switch Corporation
-				431 Crown Point Circle, Suite 200
-				Grass Valley  CA  95945
-				US
-
-70-B3-D5   (hex)		Beijing Wisetone Information Technology Co.,Ltd.
-C12000-C12FFF     (base 16)		Beijing Wisetone Information Technology Co.,Ltd.
-				B-7A ,48A Zhichun Road,Haidian District,Beijing
-				Beijing  Beijing  100098
-				CN
-
-70-B3-D5   (hex)		WIZNOVA
-C62000-C62FFF     (base 16)		WIZNOVA
-				403, Daedeok Plaza1, 12, Dochon-ro, Jungwon-gu, Gyeonggi-do
-				Seongnam    KS009
-				KR
-
-70-B3-D5   (hex)		Elsist Srl
-13D000-13DFFF     (base 16)		Elsist Srl
-				Via G. Brodolini, 15
-				Casale Monf.to  Alessandria  15033
-				IT
-
-70-B3-D5   (hex)		Swiss Audio
-735000-735FFF     (base 16)		Swiss Audio
-				6 Rue de Saint-Léger
-				Geneva  Geneva  1205
-				CH
-
-70-B3-D5   (hex)		NuRi&G Engineering co,.Ltd.
-72C000-72CFFF     (base 16)		NuRi&G Engineering co,.Ltd.
-				#66-33, Elevator road, Geochang Industrial Complex
-				Geochang-gun  Gyeongsangnam-do  50148
-				KR
-
-70-B3-D5   (hex)		IOOOTA Srl
-F8B000-F8BFFF     (base 16)		IOOOTA Srl
-				Via Molino Rosso, 8
-				Imola  BO  40026
-				IT
-
-70-B3-D5   (hex)		GMI Ltd
-F03000-F03FFF     (base 16)		GMI Ltd
-				Inchinnan Business Park
-				Renfre    PA4 9RG
-				GB
-
-70-B3-D5   (hex)		TEX COMPUTER SRL 
-28E000-28EFFF     (base 16)		TEX COMPUTER SRL 
-				VIA MERCADANTE 35
-				CATTOLICA   RIMINI   47841
-				IT
-
-70-B3-D5   (hex)		RBS Netkom GmbH
-934000-934FFF     (base 16)		RBS Netkom GmbH
-				Muenchnerstrasse 87b
-				Dachau    85221
-				DE
-
-70-B3-D5   (hex)		MyDefence Communication ApS
-3BE000-3BEFFF     (base 16)		MyDefence Communication ApS
-				Sundsholmen 25
-				Noerresundby  Danmark  9400
-				DK
-
-70-B3-D5   (hex)		Itest communication Tech Co., LTD
-503000-503FFF     (base 16)		Itest communication Tech Co., LTD
-				F2,#2,2nd Southern IND Zone of HongHualing,Nanshan District
-				shenzhen  guangdong  518000
-				CN
-
-70-B3-D5   (hex)		BMT Messtechnik Gmbh
-5D6000-5D6FFF     (base 16)		BMT Messtechnik Gmbh
-				Güterfelder Damm 87-91
-				Stahnsdorf    14532
-				DE
-
-70-B3-D5   (hex)		Unicom Global, Inc.
-9FB000-9FBFFF     (base 16)		Unicom Global, Inc.
-				581, Ruiguang Road, Neihu Dist.
-				Taipei    11492
-				TW
-
-70-B3-D5   (hex)		Vivaldi Clima Srl
-457000-457FFF     (base 16)		Vivaldi Clima Srl
-				Via Pascoli 13
-				Casazza  Lombardia  24060
-				IT
-
-70-B3-D5   (hex)		Hyundai MNSOFT
-D75000-D75FFF     (base 16)		Hyundai MNSOFT
-				74, Wonhyoro, Yongsan-gu, Seoul 140-711, korea
-				Seoul  N/A  KS013
-				KR
-
-70-B3-D5   (hex)		Re spa - Controlli Industriali - IT01782300154
-ECB000-ECBFFF     (base 16)		Re spa - Controlli Industriali - IT01782300154
-				via Firenze 3
-				Bussero    20060
-				IT
-
-70-B3-D5   (hex)		FIRST LIGHT IMAGING
-B09000-B09FFF     (base 16)		FIRST LIGHT IMAGING
-				100 route des Houilleres
-				MEYREUIL    13590
-				FR
-
-70-B3-D5   (hex)		Critical Link LLC
-42A000-42AFFF     (base 16)		Critical Link LLC
-				6712 Brooklawn Parkway
-				Syracuse  null  13211
-				US
-
-70-B3-D5   (hex)		FOSHAN SHILANTIAN NETWORK S.T. CO., LTD.
-C5D000-C5DFFF     (base 16)		FOSHAN SHILANTIAN NETWORK S.T. CO., LTD.
-				NO.11,ZHANGCHA ROAD,CHANCHENG DISTRICT
-				FOSHAN  GUANGDONG  528000
-				CN
-
-70-B3-D5   (hex)		EWATTCH
-475000-475FFF     (base 16)		EWATTCH
-				13, rue Maurice Jeandon
-				Saint Die des Vosges  Lorraine  88100
-				FR
-
-70-B3-D5   (hex)		nyantec GmbH
-C6F000-C6FFFF     (base 16)		nyantec GmbH
-				Europaplatz 2
-				Berlin    10557
-				DE
-
-70-B3-D5   (hex)		Iotopia Solutions
-317000-317FFF     (base 16)		Iotopia Solutions
-				711 Atlantic Ave
-				Boston  MA  02111
-				US
-
-70-B3-D5   (hex)		COSMOS web Co., Ltd.
-3E8000-3E8FFF     (base 16)		COSMOS web Co., Ltd.
-				5-4-1 Kuryu Aoba-ku
-				Sendai-shi  Miyagi  989-3122
-				JP
-
-70-B3-D5   (hex)		SANO SERVICE Co.,Ltd
-D95000-D95FFF     (base 16)		SANO SERVICE Co.,Ltd
-				2-10-3 Sotokanda Chiyoda-ku
-				Tokyo    1010021
-				JP
-
-70-B3-D5   (hex)		BISTOS.,Co.,Ltd
-97F000-97FFFF     (base 16)		BISTOS.,Co.,Ltd
-				7th Fl., A Bldg., Woolim Lions Valley 5-cha, 144-3, Sangdaewon-dong, Jungwon-gu
-				Seongnam-si  Gyeonggi-do  462-739
-				KR
-
-70-B3-D5   (hex)		Autonomic Controls, Inc.
-973000-973FFF     (base 16)		Autonomic Controls, Inc.
-				28 Kaysal Ct
-				ARMONK  NY  10504
-				US
-
-70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau GmbH
-CD9000-CD9FFF     (base 16)		Peter Huber Kaeltemaschinenbau GmbH
-				Werner-von-Siemens-Str. 1
-				Offenburg  Ba-Wue  77656
-				DE
-
-70-B3-D5   (hex)		AXIS CORPORATION
-987000-987FFF     (base 16)		AXIS CORPORATION
-				Higashi Tokorozawa 2-24-5
-				Tokorozawa-shi  Saitama  359-0021
-				JP
-
-70-B3-D5   (hex)		Atonarp Micro-Systems India Pvt. Ltd.
-976000-976FFF     (base 16)		Atonarp Micro-Systems India Pvt. Ltd.
-				The Millenia, Tower A, 3rd Floor, No. 1&2 Murphy Road – Ulsoor, 
-				Bangalore  Karnataka  560008
-				IN
-
-70-B3-D5   (hex)		Innominds Software Inc
-0CE000-0CEFFF     (base 16)		Innominds Software Inc
-				2055 Junction Ave Suite 122, San Jose CA 95131
-				San Jose  CA  95131
-				US
-
-70-B3-D5   (hex)		Assembly Contracts Limited
-54F000-54FFFF     (base 16)		Assembly Contracts Limited
-				Ledson Road
-				Wythenshawe  Manchester  M23 9GP
-				GB
-
-70-B3-D5   (hex)		ATX Networks Corp
-644000-644FFF     (base 16)		ATX Networks Corp
-				1-501 Clements Road West
-				Ajax  Ontario  L1s7H4
-				CA
-
-70-B3-D5   (hex)		Netfort Solutions
-EDB000-EDBFFF     (base 16)		Netfort Solutions
-				10 Hamlin Manor,, GLENLUCE DRIVE,
-				Douglasdale  Johannesburg  2191
-				ZA
-
-70-B3-D5   (hex)		Lattech Systems Pty Ltd
-197000-197FFF     (base 16)		Lattech Systems Pty Ltd
-				24 Richelieu Street
-				Durbanville  Western Cape  7550
-				ZA
-
-70-B3-D5   (hex)		Fortuna Impex Pvt ltd
-9AD000-9ADFFF     (base 16)		Fortuna Impex Pvt ltd
-				12D Harrington Mansions , 8 Ho Chi Minh Sarani
-				Kolkata  West Bengal  700071
-				IN
-
-70-B3-D5   (hex)		Sakura Seiki Co.,Ltd.
-B62000-B62FFF     (base 16)		Sakura Seiki Co.,Ltd.
-				75-5, Imojiya
-				Chikuma-city  Nagano Prefecture  387-0015
-				JP
-
-70-B3-D5   (hex)		Qualitronix Madrass Pvt Ltd
-A19000-A19FFF     (base 16)		Qualitronix Madrass Pvt Ltd
-				No112, Tiny Sector, Guindy Industrial Estate, 
-				Chennai  TamilNadu  600032
-				IN
-
-70-B3-D5   (hex)		Medisafe International
-7B0000-7B0FFF     (base 16)		Medisafe International
-				Twyford Road
-				Bishops Stortford  Hertfordshire  CM23 3LJ
-				GB
-
-70-B3-D5   (hex)		Littlemore Scientific
-F81000-F81FFF     (base 16)		Littlemore Scientific
-				Gutchpool Farm
-				Gillingham  Dorset  SP8 5QP
-				GB
-
-70-B3-D5   (hex)		Link Care Services
-C80000-C80FFF     (base 16)		Link Care Services
-				3bis rue Taylor
-				Paris  Paris  75010
-				FR
-
-70-B3-D5   (hex)		TATTILE SRL
-5C4000-5C4FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Arete Associates
-238000-238FFF     (base 16)		Arete Associates
-				9301 Corbin Ave Suite 2000
-				Northridge  CA  91324
-				US
-
-70-B3-D5   (hex)		RWS Automation GmbH
-E4F000-E4FFFF     (base 16)		RWS Automation GmbH
-				Neuer Weg 2
-				Niefern - Öschelbronn    75223
-				DE
-
-70-B3-D5   (hex)		Suzhou PowerCore Technology Co.,Ltd.
-CCD000-CCDFFF     (base 16)		Suzhou PowerCore Technology Co.,Ltd.
-				Building #3,No.9 Xuesen Road,Science&Technology Town,Suzhou New District
-				Suzhou  Jiangsu  215000
-				CN
-
-70-B3-D5   (hex)		Supervision Test et Pilotage
-B23000-B23FFF     (base 16)		Supervision Test et Pilotage
-				70 avenue de Rome
-				LA SEYNE SUR MER    83500
-				FR
-
-70-B3-D5   (hex)		SolwayTech
-BD9000-BD9FFF     (base 16)		SolwayTech
-				124, Jungdae-ro, Songpa-gu
-				seoul    05829
-				KR
-
-70-B3-D5   (hex)		Colmek
-D05000-D05FFF     (base 16)		Colmek
-				6526 S Cottonwood St
-				Murray  UT  84107
-				US
-
-70-B3-D5   (hex)		DSP4YOU LTd
-12F000-12FFFF     (base 16)		DSP4YOU LTd
-				Unit 1204, 106 How Ming Street
-				Hong Kong    0000
-				HK
-
-70-B3-D5   (hex)		LogiM GmbH Software und Entwicklung
-FAA000-FAAFFF     (base 16)		LogiM GmbH Software und Entwicklung
-				Mahonienweg 22b
-				Berlin    12437
-				DE
-
-70-B3-D5   (hex)		B/E Aerospace, Inc.
-448000-448FFF     (base 16)		B/E Aerospace, Inc.
-				355 Knickerbocker Ave
-				Bohemia  NY  11716
-				US
-
-70-B3-D5   (hex)		Vtron Pty Ltd
-3EF000-3EFFFF     (base 16)		Vtron Pty Ltd
-				Unit 2, 62 Township Drive West
-				West Burleigh  Queensland  4219
-				AU
-
-70-B3-D5   (hex)		Ascendent Technology Group
-D66000-D66FFF     (base 16)		Ascendent Technology Group
-				15 -  9th Avenue South 
-				Cranbrook  BC  V1C 2L9
-				CA
-
-70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
-B44000-B44FFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
-				78-2 Buncheon-ri, Bongdam-eup
-				Hwaseong-city  Gyungki-do  445-894
-				KR
-
-70-B3-D5   (hex)		JSC OTZVUK
-615000-615FFF     (base 16)		JSC OTZVUK
-				10-30 Dostoevskogo Str.
-				Saint-Petersburg    191119
-				RU
-
-70-B3-D5   (hex)		Beijing Arrow SEED Technology Co,.Ltd.
-A4A000-A4AFFF     (base 16)		Beijing Arrow SEED Technology Co,.Ltd.
-				28/F, Taikang Financial Tower, 38 North Street of East 3rd Ring, Chaoyang District
-				beijing  beijing  100033
-				CN
-
-70-B3-D5   (hex)		FutureTechnologyLaboratories INC.
-B59000-B59FFF     (base 16)		FutureTechnologyLaboratories INC.
-				3-2 Shinsakae-3chome Naka-ku
-				Nagoya  Aichi  460-0007
-				JP
-
-70-B3-D5   (hex)		Varikorea
-3A7000-3A7FFF     (base 16)		Varikorea
-				#505 kolon digital tower aston, gasan, geumcheon
-				seoul    08502
-				KR
-
-70-B3-D5   (hex)		TEX COMPUTER SRL 
-F99000-F99FFF     (base 16)		TEX COMPUTER SRL 
-				Tex Computer Srl Via Mercadante 35
-				Cattolica   RIMINI   47841
-				IT
-
-70-B3-D5   (hex)		ConectaIP Tecnologia S.L.
-A5E000-A5EFFF     (base 16)		ConectaIP Tecnologia S.L.
-				Novell 58
-				Barcelona    08014
-				ES
-
-70-B3-D5   (hex)		MVT Video Technologies R + H Maedler GbR
-5CD000-5CDFFF     (base 16)		MVT Video Technologies R + H Maedler GbR
-				Neustraße 35-37
-				Velbert    42553
-				DE
-
-70-B3-D5   (hex)		eSoftThings
-9EC000-9ECFFF     (base 16)		eSoftThings
-				80 Avenue des Buttes de Coesmes
-				RENNES    35700
-				FR
-
-70-B3-D5   (hex)		DimoSystems BV
-AF7000-AF7FFF     (base 16)		DimoSystems BV
-				PO Box 875
-				Gorinchem  Zuid-Holland  4200AW
-				NL
-
-70-B3-D5   (hex)		StarBridge, Inc.
-1B5000-1B5FFF     (base 16)		StarBridge, Inc.
-				3-5-10
-				Tachikawa  Tokyo  190-0023
-				JP
-
-70-B3-D5   (hex)		Energi innovation Aps
-307000-307FFF     (base 16)		Energi innovation Aps
-				HC andersens alle 3
-				Vejen  Danmark  6600
-				DK
-
-70-B3-D5   (hex)		Asia Pacific Satellite Coummunication Inc.
-C8B000-C8BFFF     (base 16)		Asia Pacific Satellite Coummunication Inc.
-				9F, Lotte IT Castle 2-Dong, #550-1, Gasan-Dong, Geumchon-Gu,
-				SEOUL    08506
-				KR
-
-70-B3-D5   (hex)		RF CREATIONS LTD
-1DD000-1DDFFF     (base 16)		RF CREATIONS LTD
-				St John's Innovation Centre
-				Cambridge  Cambridgeshire  CB4 0WS
-				GB
-
-70-B3-D5   (hex)		SECLAB
-CB2000-CB2FFF     (base 16)		SECLAB
-				40 Avenue Theroigne de Mericourt
-				MONTPELLIER    34000
-				FR
-
-70-B3-D5   (hex)		Norsat International Inc.
-0AE000-0AEFFF     (base 16)		Norsat International Inc.
-				110-4020 Viking Way
-				Richmond  BC  V6V 2L4
-				CA
-
-70-B3-D5   (hex)		Dainichi Denshi　Co.,LTD
-8CF000-8CFFFF     (base 16)		Dainichi Denshi　Co.,LTD
-				12-27 Enoki-cho
-				Suita city  Osaka   564-0053
-				JP
-
-70-B3-D5   (hex)		Rohde&Schwarz Topex SA
-296000-296FFF     (base 16)		Rohde&Schwarz Topex SA
-				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
-				Bucuresti  Romania  014142
-				RO
-
-70-B3-D5   (hex)		Tecnint HTE SRL
-217000-217FFF     (base 16)		Tecnint HTE SRL
-				Via della Tecnica 16/18
-				Osnago  Lecco  23875
-				IT
-
-70-B3-D5   (hex)		Rohde&Schwarz Topex SA
-FB0000-FB0FFF     (base 16)		Rohde&Schwarz Topex SA
-				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
-				Bucuresti  Romania  014142
-				RO
-
-70-B3-D5   (hex)		DomoSafety S.A.
-B99000-B99FFF     (base 16)		DomoSafety S.A.
-				Innovation Park - Site EPFL
-				Lausanne    1015
-				CH
-
-70-B3-D5   (hex)		MobiPromo
-1FE000-1FEFFF     (base 16)		MobiPromo
-				10, 64-72 Beresford Rd
-				Lilydale  Victoria  3140
-				AU
-
-70-B3-D5   (hex)		RF Industries
-F0B000-F0BFFF     (base 16)		RF Industries
-				PO Box 5
-				Welland  SA  5007
-				AU
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-FF3000-FF3FFF     (base 16)		Aplex Technology Inc.
-				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-65C000-65CFFF     (base 16)		Aplex Technology Inc.
-				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
-				Shenzhen  Guangdong  518054
-				CN
-
-70-B3-D5   (hex)		Safelet BV
-B1D000-B1DFFF     (base 16)		Safelet BV
-				Bilderdijkkade 26a-hs
-				amsterdam    1053 vc
-				NL
-
-70-B3-D5   (hex)		Nuviz Oy
-AAE000-AAEFFF     (base 16)		Nuviz Oy
-				Joensuunkatu 7
-				Salo    24100
-				FI
-
-70-B3-D5   (hex)		Technical Panels Co. Ltd.
-C34000-C34FFF     (base 16)		Technical Panels Co. Ltd.
-				288 Soi Chalongkrung 31, Lat Krabang
-				Bangkok  Bangkok  10520
-				TH
-
-70-B3-D5   (hex)		Ayre Acoustics, Inc.
-0BA000-0BAFFF     (base 16)		Ayre Acoustics, Inc.
-				2300 Central Ave, #B
-				Boulder  CO  80301
-				US
-
-70-B3-D5   (hex)		Shenzhen Weema TV Technology Co.,Ltd.
-AA1000-AA1FFF     (base 16)		Shenzhen Weema TV Technology Co.,Ltd.
-				4/F,Building two,YuChang Industrial Park,No.28,Guangda Road,Henggang Street,Longgang,Shenzhen.
-				shenzhen    518000
-				CN
-
-70-B3-D5   (hex)		Reinhardt System- und Messelectronic GmbH
-4AE000-4AEFFF     (base 16)		Reinhardt System- und Messelectronic GmbH
-				Bergstr. 33
-				Obermuehlhausen    86911
-				DE
-
-70-B3-D5   (hex)		Sol Welding srl
-E3E000-E3EFFF     (base 16)		Sol Welding srl
-				Via Meucci 26
-				Costabissara  Italy / Vicenza  36030
-				IT
-
-70-B3-D5   (hex)		Silicann Systems GmbH
-62B000-62BFFF     (base 16)		Silicann Systems GmbH
-				Schillerplatz 10
-				Rostock    18055
-				DE
-
-70-B3-D5   (hex)		BRS Sistemas Eletrônicos
-1FD000-1FDFFF     (base 16)		BRS Sistemas Eletrônicos
-				Rua Gomes de Freitas, 491 / 204
-				Porto Alegre  RS  91380-000
-				BR
-
-70-B3-D5   (hex)		ATOM GIKEN Co.,Ltd.
-7D9000-7D9FFF     (base 16)		ATOM GIKEN Co.,Ltd.
-				92-2 KATASE
-				FUJISAWA  KANAGAWA  251-0032
-				JP
-
-70-B3-D5   (hex)		Tickster AB
-350000-350FFF     (base 16)		Tickster AB
-				Magasinsgatan 8
-				Arvika  Värmland  SE67131
-				SE
-
-70-B3-D5   (hex)		Merz s.r.o.
-E2E000-E2EFFF     (base 16)		Merz s.r.o.
-				U Sirotcince 353/7
-				Liberec    460 01
-				CZ
-
-70-B3-D5   (hex)		Leo Bodnar Electronics Ltd
-E3D000-E3DFFF     (base 16)		Leo Bodnar Electronics Ltd
-				Unit 8 New Rookery Farm
-				Silverstone    NN12 8UP
-				GB
-
-70-B3-D5   (hex)		INTEC International GmbH
-B26000-B26FFF     (base 16)		INTEC International GmbH
-				Killertalstr. 4
-				Hechingen    72379
-				DE
-
-70-B3-D5   (hex)		Aplex Technology Inc.
-8E4000-8E4FFF     (base 16)		Aplex Technology Inc.
-				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
-				Shenzhen  Guangdong  518055
-				CN
-
-70-B3-D5   (hex)		MEDIAM Sp. z o.o.
-F13000-F13FFF     (base 16)		MEDIAM Sp. z o.o.
-				Wadowicka 12
-				Kraków    30-415
-				PL
-
-70-B3-D5   (hex)		Coveloz Technologies Inc.
-042000-042FFF     (base 16)		Coveloz Technologies Inc.
-				232 Herzberg Road, Suite 204
-				Kanata  Ontario  K2K 2A1
-				CA
-
-70-B3-D5   (hex)		PMT Corporation
-804000-804FFF     (base 16)		PMT Corporation
-				1705-1 Satani,Sue
-				Kasuya-gun  Fukuoka  811-2115
-				JP
-
-70-B3-D5   (hex)		ALTRAN UK
-179000-179FFF     (base 16)		ALTRAN UK
-				22 St Lawrence Street
-				Bath  Somerset  BA1 1AN
-				GB
-
-70-B3-D5   (hex)		Qwave Inc
-B31000-B31FFF     (base 16)		Qwave Inc
-				18725 Metler Ct
-				Saratoga  CA  95070
-				US
-
-70-B3-D5   (hex)		PERFORMANCE CONTROLS, INC.
-8D3000-8D3FFF     (base 16)		PERFORMANCE CONTROLS, INC.
-				151 DOMORAH DRIVE
-				MONTGOMERYVILLE  PA  18936
-				US
-
-70-B3-D5   (hex)		Husty M.Styczen J.Hupert Sp.J.
-194000-194FFF     (base 16)		Husty M.Styczen J.Hupert Sp.J.
-				Rzepakowa 5e
-				Krakow  malopolska  31-989
-				PL
-
-70-B3-D5   (hex)		Tirasoft Nederland
-766000-766FFF     (base 16)		Tirasoft Nederland
-				Hyacinthstraat174
-				Groningen  Groningen  9713XK
-				NL
-
-70-B3-D5   (hex)		Automation Networks & Solutions LLC
-2BB000-2BBFFF     (base 16)		Automation Networks & Solutions LLC
-				8300 FM 1960 West, Suite 450
-				Houston  TX  77070
-				US
-
-70-B3-D5   (hex)		DimoCore Corporation
-AE1000-AE1FFF     (base 16)		DimoCore Corporation
-				GoldenBill #930, GwangDukDae-ro 206
-				Ahnsan  Kyonggi-do  15462
-				KR
-
-70-B3-D5   (hex)		AIMCO
-3C3000-3C3FFF     (base 16)		AIMCO
-				10000 SE Pine St
-				Portland  OR  97216
-				US
-
-70-B3-D5   (hex)		KEVIC. inc,
-99A000-99AFFF     (base 16)		KEVIC. inc,
-				5, Nonhyunro 24 Gil, Gangnam-gu
-				Seoul    06302
-				KR
-
-70-B3-D5   (hex)		Xiamen Point Circle Technologh Co,ltd
-DB5000-DB5FFF     (base 16)		Xiamen Point Circle Technologh Co,ltd
-				S307SouthBuildingWeiYeBuildinPioneering Park,Huli District,Xia M XIAMEN
-				Xiamen    361000
-				CN
-
-70-B3-D5   (hex)		SMTC Corporation
-AC6000-AC6FFF     (base 16)		SMTC Corporation
-				2302 Trade Zone Blvd
-				San Jose    95131
-				US
-
-70-B3-D5   (hex)		Hanbat National University
-FBE000-FBEFFF     (base 16)		Hanbat National University
-				Hanbat National Univ., Deongmyeong-dong, Yuseong-gu
-				Daejeon    34158
-				KR
-
-70-B3-D5   (hex)		Cardinal Scale Mfg Co
-268000-268FFF     (base 16)		Cardinal Scale Mfg Co
-				203 E. Daugherty
-				Webb City  MO  64870
-				US
-
-70-B3-D5   (hex)		Cottonwood Creek Technologies, Inc.
-9EF000-9EFFFF     (base 16)		Cottonwood Creek Technologies, Inc.
-				7108 S. Alton Way, Ste G-102
-				Centennial    80112
-				US
-
-70-B3-D5   (hex)		TATTILE SRL
-AF4000-AF4FFF     (base 16)		TATTILE SRL
-				VIA DONIZETTI, 1/3/5
-				MAIRANO  BRESCIA  25030
-				IT
-
-70-B3-D5   (hex)		Hoshin Electronics Co., Ltd.
-1C7000-1C7FFF     (base 16)		Hoshin Electronics Co., Ltd.
-				3-9-12, Miyamaedaira, Miyamae-Ku
-				Kawasaki-Shi  Kanagawa  216-0006
-				JP
-
-70-B3-D5   (hex)		DermaLumics S.L.
-29B000-29BFFF     (base 16)		DermaLumics S.L.
-				Ronda de Poniente 16, 1E
-				Tres Cantos  Madrid  28760
-				ES
-
-70-B3-D5   (hex)		Presentation Switchers, Inc.
-428000-428FFF     (base 16)		Presentation Switchers, Inc.
-				2324 Cheney-Spokane Road
-				Cheney  WA  99004
-				US
-
-70-B3-D5   (hex)		DIgSILENT GmbH
-FCC000-FCCFFF     (base 16)		DIgSILENT GmbH
-				Heinrich-Hertz-Str. 9
-				Gomaringen    72810
-				DE
-
-70-B3-D5   (hex)		EMPELOR GmbH
-76B000-76BFFF     (base 16)		EMPELOR GmbH
-				Gubelstr. 12
-				Zug  Zug  6300
-				CH
-
-70-B3-D5   (hex)		Sator Controls s.r.o.
-F1A000-F1AFFF     (base 16)		Sator Controls s.r.o.
-				Ke Zdravotnímu středisku 103/1
-				Praha - Řeporyje  Select State  15500
-				CZ
-
-70-B3-D5   (hex)		Shanghai JCY Technology Company
-F2E000-F2EFFF     (base 16)		Shanghai JCY Technology Company
-				304, 228 Jiang Chang 3rd Road
-				Shanghai,China  Shanghai  200436
-				CN
-
-70-B3-D5   (hex)		Sorynorydotcom Inc
-38F000-38FFFF     (base 16)		Sorynorydotcom Inc
-				206-1, 2F, 8, Suseong-ro, Gwonseon-gu
-				Suwon-si  Gyeonggi-do   16426
-				KR
-
-70-B3-D5   (hex)		Toptech Systems, Inc.
-8B9000-8B9FFF     (base 16)		Toptech Systems, Inc.
-				1124 Florida Central Parkway
-				Longwood  FL  32750
-				US
-
-70-B3-D5   (hex)		KRONOTECH SRL
-FB6000-FB6FFF     (base 16)		KRONOTECH SRL
-				VIALE UNGHERIA 125
-				UDINE  ITALY/UDINE  33100
-				IT
-
-70-B3-D5   (hex)		Eva Automation
-747000-747FFF     (base 16)		Eva Automation
-				401 Warren Street
-				Redwood City  CA  94063
-				US
-
-70-B3-D5   (hex)		Pro-Digital Projetos Eletronicos Ltda
-059000-059FFF     (base 16)		Pro-Digital Projetos Eletronicos Ltda
-				RUA SENADOR SARAIVA 200
-				CURITIBA  PR  80510300
-				BR
-
-70-B3-D5   (hex)		KZTA
-647000-647FFF     (base 16)		KZTA
-				S.-Shhedrina
-				Kaluga    248002
-				RU
-
-70-B3-D5   (hex)		Azcom Technology S.r.l.
-D51000-D51FFF     (base 16)		Azcom Technology S.r.l.
-				Strada 6 Palazzo N2
-				Rozzano  MI  20089
-				IT
-
-70-B3-D5   (hex)		OCEANIX INC.
-1A9000-1A9FFF     (base 16)		OCEANIX INC.
-				15703 LAKE LODGE DR
-				HOUSTON  TX  77062
-				US
-
-70-B3-D5   (hex)		Xped Corporation Pty Ltd
-152000-152FFF     (base 16)		Xped Corporation Pty Ltd
-				Innovation House
-				Mawson Lakes  SA  5095
-				AU
-
-70-B3-D5   (hex)		SENSING LABS
-80A000-80AFFF     (base 16)		SENSING LABS
-				CAP OMÉGA - Rond Point Benjamin Franklin
-				MONTPELLIER    34960
-				FR
-
-70-B3-D5   (hex)		ATIM Radiocommunication
-9BA000-9BAFFF     (base 16)		ATIM Radiocommunication
-				Chemin des Guillets
-				Villard de Lans    38250
-				FR
-
-70-B3-D5   (hex)		YEHL & JORDAN LLC
-E02000-E02FFF     (base 16)		YEHL & JORDAN LLC
-				114 Paige Bend
-				Hutto  TX  78634
-				US
-
-70-B3-D5   (hex)		VEILUX INC.
-4B6000-4B6FFF     (base 16)		VEILUX INC.
-				802 GREENVIEW DR. STE 200
-				GRAND PRAIRIE    75050
-				US
-
-70-B3-D5   (hex)		CRDE
-8A6000-8A6FFF     (base 16)		CRDE
-				ZI DES GRANDS CAMPS
-				MERCUES  LOT  46090
-				FR
-
-70-B3-D5   (hex)		E-PLUS TECHNOLOGY CO., LTD
-B05000-B05FFF     (base 16)		E-PLUS TECHNOLOGY CO., LTD
-				21F, NO.1-145, Zhonghua Rd.
-				Tainan  Yongkang Dist  71084
-				TW
-
-70-B3-D5   (hex)		TerOpta Ltd
-3CC000-3CCFFF     (base 16)		TerOpta Ltd
-				108 Balmoral Drive
-				Nottingham    NG9 3FT
-				GB
-
-70-B3-D5   (hex)		ACD Elekronik GmbH
-3C6000-3C6FFF     (base 16)		ACD Elekronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		OutSys
-929000-929FFF     (base 16)		OutSys
-				Via Caracciolo, 65
-				MIlano  MI  20155
-				IT
-
-70-B3-D5   (hex)		CHARGELIB
-EF6000-EF6FFF     (base 16)		CHARGELIB
-				11 CITE VANEAU
-				PARIS    75007
-				FR
-
-70-B3-D5   (hex)		signalparser
-214000-214FFF     (base 16)		signalparser
-				#901-1 A-dong, Bundang Technopark, 697, Pangyo-ro, Bundang-gu
-				Seongnam-si   Gyeonggi-do  13511
-				KR
-
-70-B3-D5   (hex)		Movis
-B6D000-B6DFFF     (base 16)		Movis
-				Naverland 2, 4. sal
-				Glostrup  Denmark  DK-2600
-				DK
-
-70-B3-D5   (hex)		IEM SA
-2EF000-2EFFFF     (base 16)		IEM SA
-				109 chemin du pont du centenaire
-				Plan-les-Ouates    1228
-				CH
-
-70-B3-D5   (hex)		Shadin Avionics
-794000-794FFF     (base 16)		Shadin Avionics
-				6831 Oxford Street
-				St. Louis Park  MN  55426
-				US
-
-70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-B40000-B40FFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
-				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
-				Wuhan  Hubei  430074
-				CN
-
-70-B3-D5   (hex)		Axotec Technologies GmbH
-BAB000-BABFFF     (base 16)		Axotec Technologies GmbH
-				Sudetenstraße 88
-				Geretsried  Bavaria  82538
-				DE
-
-70-B3-D5   (hex)		Grupo Epelsa S.L.
-76E000-76EFFF     (base 16)		Grupo Epelsa S.L.
-				C/ Punto Net,3
-				Alcala de Henares  Madrid  28805
-				ES
-
-70-B3-D5   (hex)		Beijing Aumiwalker technology CO.,LTD
-D0E000-D0EFFF     (base 16)		Beijing Aumiwalker technology CO.,LTD
-				Floor 6, Tower 1, No.1 Zhonghe Road Fengtai Science Park Beijing P.R.C.
-				Beijing  Beijing  100071
-				CN
-
-70-B3-D5   (hex)		Streambox Inc
-F6E000-F6EFFF     (base 16)		Streambox Inc
-				1848 Westlake Ave N
-				Seattle  WA  98109
-				US
-
-70-B3-D5   (hex)		Schildknecht AG
-494000-494FFF     (base 16)		Schildknecht AG
-				Haugweg 26
-				Murr    71711
-				DE
-
-70-B3-D5   (hex)		effectas GmbH
-78E000-78EFFF     (base 16)		effectas GmbH
-				Bundesstrasse 6
-				Zug    6300
-				CH
-
-70-B3-D5   (hex)		Spectra Displays Ltd
-266000-266FFF     (base 16)		Spectra Displays Ltd
-				Unit 25 Lancaster Way Business Park
-				Ely  Cambridgeshire  CB6 3NW
-				GB
-
-70-B3-D5   (hex)		attocube systems AG
-D76000-D76FFF     (base 16)		attocube systems AG
-				Koeniginstrasse 11A
-				Muenchen    80997
-				DE
-
-70-B3-D5   (hex)		IEEE Registration Authority
-9F3000-9F3FFF     (base 16)		IEEE Registration Authority
-				445 Hoes Lane
-				Piscataway  NJ  08554
-				US
-
-70-B3-D5   (hex)		Jemac Sweden AB
-16E000-16EFFF     (base 16)		Jemac Sweden AB
-				Trångsundsvägen 20A
-				Kalmar    39356
-				SE
-
-70-B3-D5   (hex)		ECON Technology Co.Ltd
-E93000-E93FFF     (base 16)		ECON Technology Co.Ltd
-				Mogan Road 1418-41-4
-				Hangzhou  Zhejiang   310015
-				CN
-
-70-B3-D5   (hex)		Boulder Amplifiers, Inc.
-4BD000-4BDFFF     (base 16)		Boulder Amplifiers, Inc.
-				3225 Prairie Avenue
-				Boulder  CO  80301
-				US
-
-70-B3-D5   (hex)		AnyComm.Co.,Ltd.
-AE0000-AE0FFF     (base 16)		AnyComm.Co.,Ltd.
-				3F, 54, Simin-daero 327beon-gil
-				Dongan-gu Anyang-si Gyeonggi-do  Gyeonggi-do  14055
-				KR
-
-70-B3-D5   (hex)		SOREDI touch systems GmbH
-001000-001FFF     (base 16)		SOREDI touch systems GmbH
-				Werner-von-Siemens-Str. 13
-				Olching  Bavaria  82140
-				DE
-
-70-B3-D5   (hex)		Xerox International Partners
-7EB000-7EBFFF     (base 16)		Xerox International Partners
-				3174 Porter Drive
-				Palo Alto    94304
-				US
-
-70-B3-D5   (hex)		TOPROOTTechnology Corp. Ltd.
-1E0000-1E0FFF     (base 16)		TOPROOTTechnology Corp. Ltd.
-				5F-8, No. 14, Lane 609, Sec.5, Chongsin Rd.,
-				New Taipei City  Taipei  241
-				TW
-
-70-B3-D5   (hex)		TriLED
-439000-439FFF     (base 16)		TriLED
-				Dijkstraat 8
-				Ham  Limburg  3945
-				BE
-
-70-B3-D5   (hex)		DM RADIOCOM
-8A0000-8A0FFF     (base 16)		DM RADIOCOM
-				CD 908
-				13720  BELCODENE  13380
-				FR
-
-70-B3-D5   (hex)		Contraves Advanced Devices Sdn. Bhd.
-4D1000-4D1FFF     (base 16)		Contraves Advanced Devices Sdn. Bhd.
-				Batu Berendam FTZ, PO Box 39,75700 Malacca, Malaysia.
-				Melacca  No State  75700
-				MY
-
-70-B3-D5   (hex)		WyreStorm Technologies Ltd
-D59000-D59FFF     (base 16)		WyreStorm Technologies Ltd
-				22 Ergo Business Park, Kelvin Road
-				Greenbridge  Swindon  SN3 3JW
-				GB
-
-70-B3-D5   (hex)		Mobile Devices Unlimited
-14F000-14FFFF     (base 16)		Mobile Devices Unlimited
-				1611 North Austin Avenue
-				Chicago  IL  60639-4073
-				US
-
-70-B3-D5   (hex)		Sandia National Laboratories
-D74000-D74FFF     (base 16)		Sandia National Laboratories
-				1515 Eubank BLVD SE
-				Albuquerque  New Mexico  87123
-				US
-
-70-B3-D5   (hex)		IDS Innomic GmbH
-37F000-37FFFF     (base 16)		IDS Innomic GmbH
-				Zum Buchhorst 35
-				Salzwedel  Sachsen-Anhalt  29410
-				DE
-
-70-B3-D5   (hex)		Gupsy GmbH
-100000-100FFF     (base 16)		Gupsy GmbH
-				Metzgerstrasse 67
-				Aachen  NRW  52070
-				DE
-
-70-B3-D5   (hex)		KDT
-2CE000-2CEFFF     (base 16)		KDT
-				126, Haeoreum-gil, Namsan-myeon
-				Chuncheon-si  Gangwon-do  200-911
-				KR
-
-70-B3-D5   (hex)		Beijing Hzhytech Technology Co.Ltd
-EE5000-EE5FFF     (base 16)		Beijing Hzhytech Technology Co.Ltd
-				The 2th floor,Longzeyuan Multi-use
-				  Beijing  102208
-				CN
-
-70-B3-D5   (hex)		Schneider Electric Motion
-2EA000-2EAFFF     (base 16)		Schneider Electric Motion
-				370 North Main St
-				Marlborough  CT  06447
-				US
-
-70-B3-D5   (hex)		DSP DESIGN
-D42000-D42FFF     (base 16)		DSP DESIGN
-				TAPTON PK INNOVATION CENTRE
-				CHESTERFIELD  DERBYSHIRE  S41 0TZ
-				GB
-
-70-B3-D5   (hex)		Galea Electric S.L.
-A04000-A04FFF     (base 16)		Galea Electric S.L.
-				Zeharkale 36, Edificio Izarra Centre
-				Ermua  Bizkaia  48260
-				ES
-
-70-B3-D5   (hex)		FIDELTRONIK POLAND SP. Z O.O.
-D12000-D12FFF     (base 16)		FIDELTRONIK POLAND SP. Z O.O.
-				Beniowskiego 1
-				    
-				PL
-
-70-B3-D5   (hex)		Chromalox, Inc.
-84E000-84EFFF     (base 16)		Chromalox, Inc.
-				1347 Heil Quaker Blvd
-				La Vergne  TN  37086
-				US
-
-70-B3-D5   (hex)		Sicon srl
-04D000-04DFFF     (base 16)		Sicon srl
-				Via Sila 1/3
-				Isola Vicentina  Vicenza  36033
-				IT
-
-70-B3-D5   (hex)		Flashnet SRL
-BF1000-BF1FFF     (base 16)		Flashnet SRL
-				Str. Fundatura Harmanului nr.4A
-				Brasov  Brasov  500240
-				RO
-
-70-B3-D5   (hex)		AeroVision Avionics, Inc.
-DDF000-DDFFFF     (base 16)		AeroVision Avionics, Inc.
-				2F, No.30, R&D Rd. II,
-				Hsinchu City  Hsinchu City  30076
-				TW
-
-70-B3-D5   (hex)		Micram Instruments Ltd
-774000-774FFF     (base 16)		Micram Instruments Ltd
-				5 The Parade
-				Auckland    2012
-				NZ
-
-70-B3-D5   (hex)		SARL S@TIS
-933000-933FFF     (base 16)		SARL S@TIS
-				19, Rue de Bretagne
-				Saint Quentin Fallavier  Rhone-Alpes  38070
-				FR
-
-70-B3-D5   (hex)		Allim System Co,.Ltd.
-48E000-48EFFF     (base 16)		Allim System Co,.Ltd.
-				#605, E&C Venture Dream Tower 6Cha,
-				Seoul  Seoul  152-179
-				KR
-
-70-B3-D5   (hex)		Benchmark Electronics BV
-9ED000-9EDFFF     (base 16)		Benchmark Electronics BV
-				Lelyweg 10
-				Almelo  Overijssel  7602 EA
-				NL
-
-70-B3-D5   (hex)		ARD
-C89000-C89FFF     (base 16)		ARD
-				MICROPOLIS
-				GAP CEDEX  paca  05005
-				FR
-
-70-B3-D5   (hex)		Kalycito Infotech Private Limited
-43B000-43BFFF     (base 16)		Kalycito Infotech Private Limited
-				6/2 & 6/3,Pappampatti Pirivu, Trichy Road,
-				Coimbatore  Tamil Nadu  641103
-				IN
-
-70-B3-D5   (hex)		NetBoxSC, LLC
-852000-852FFF     (base 16)		NetBoxSC, LLC
-				43774 Bemis Road
-				Belleville  MI  48111
-				US
-
-70-B3-D5   (hex)		Mes Communication Co., Ltd
-A93000-A93FFF     (base 16)		Mes Communication Co., Ltd
-				5F, No. 6 , Szu Wei Lane , Chung Cheng
-				New Taipei City    231
-				TW
-
-70-B3-D5   (hex)		VideoRay LLC
-CD6000-CD6FFF     (base 16)		VideoRay LLC
-				212 E High Street
-				Pottstown  Pennsylvania  19464
-				US
-
-70-B3-D5   (hex)		Movidius SRL
-32F000-32FFFF     (base 16)		Movidius SRL
-				Str Gh Lazar, Nb24
-				Timisoara  -  300081
-				RO
-
-70-B3-D5   (hex)		Data Sciences International
-7C1000-7C1FFF     (base 16)		Data Sciences International
-				119 14th St. NW
-				St. Paul  MN  55112
-				US
-
-70-B3-D5   (hex)		SERIAL IMAGE INC.
-166000-166FFF     (base 16)		SERIAL IMAGE INC.
-				16530 Ventura Blvd.
-				Encino  California  91436
-				US
-
-70-B3-D5   (hex)		PLR Prueftechnik Linke und Ruehe GmbH
-595000-595FFF     (base 16)		PLR Prueftechnik Linke und Ruehe GmbH
-				Altenhaeuser Str. 6
-				Magdeburg  Saxony-Anhalt  39126
-				DE
-
-70-B3-D5   (hex)		Oso Technologies, Inc.
-4DE000-4DEFFF     (base 16)		Oso Technologies, Inc.
-				722 W KILLARNEY ST
-				Urbana  Illinois  61801
-				US
-
-70-B3-D5   (hex)		Abitsoftware, Ltd.
-3D8000-3D8FFF     (base 16)		Abitsoftware, Ltd.
-				Passfield Business Centre
-				Passfield, Liphook  Hampshire  GU30 7SB
-				GB
-
-70-B3-D5   (hex)		IMST GmbH
-8FF000-8FFFFF     (base 16)		IMST GmbH
-				Carl-Friedrich-Gauss-Str. 2-4
-				Kamp-Lintfort  Northrhine-Westfalia  47475
-				DE
-
-70-B3-D5   (hex)		KITRON UAB
-470000-470FFF     (base 16)		KITRON UAB
-				TAIKOS 151
-				KAUNAS  KAUNAS  LT-52119
-				LT
-
-70-B3-D5   (hex)		Peter Huber
-2E0000-2E0FFF     (base 16)		Peter Huber
-				Kaeltemaschinenbau GmbH
-				Offenburg  Ba-Wue  77656
-				DE
-
-70-B3-D5   (hex)		ATX NETWORKS LTD
-F1E000-F1EFFF     (base 16)		ATX NETWORKS LTD
-				Halapid 12 st
-				Petach tikva  Israel  4917001
-				IL
-
-70-B3-D5   (hex)		Korea Plant Maintenance
-DF9000-DF9FFF     (base 16)		Korea Plant Maintenance
-				102 DTC Tower
-				Seongnam-si  Gyeonggi-do  463-400
-				KR
-
-70-B3-D5   (hex)		Hella Gutmann Solutions GmbH
-F93000-F93FFF     (base 16)		Hella Gutmann Solutions GmbH
-				Am Krebsbach 2
-				Ihringen  BW  79241
-				DE
-
-70-B3-D5   (hex)		C21 Systems Ltd
-7E4000-7E4FFF     (base 16)		C21 Systems Ltd
-				Dunston Innovation Centre
-				Chesterfield  Derbyshire  S41 8NG
-				GB
-
-70-B3-D5   (hex)		Magosys Systems LTD
-00E000-00EFFF     (base 16)		Magosys Systems LTD
-				Gad Feinstein 13
-				Rehovot    7638517
-				IL
-
-70-B3-D5   (hex)		Kvazar LLC
-2D6000-2D6FFF     (base 16)		Kvazar LLC
-				200-letiya goroda 2
-				Noginsk  Moscow region  142400
-				RU
-
-70-B3-D5   (hex)		Evolute Systems Private Limited
-D2D000-D2DFFF     (base 16)		Evolute Systems Private Limited
-				Sri Rama, 15/6, 3rd Floor
-				Bangalore  Karnataka  560008
-				IN
-
-70-B3-D5   (hex)		Guidance Navigation Limited
-E36000-E36FFF     (base 16)		Guidance Navigation Limited
-				4 Dominus Way
-				Leicester  Leicestershire  LE19 1RP
-				GB
-
-70-B3-D5   (hex)		DEUTA-WERKE GmbH
-08F000-08FFFF     (base 16)		DEUTA-WERKE GmbH
-				Paffrather Str. 140
-				Bergisch Gladbach  North Rhine-Westphalia  51465
-				DE
-
-70-B3-D5   (hex)		Isabellenhütte Heusler Gmbh &Co KG
-F8E000-F8EFFF     (base 16)		Isabellenhütte Heusler Gmbh &Co KG
-				Eibacherweg 3-5
-				Dillenburg  Hessen  35683
-				DE
-
-70-B3-D5   (hex)		Lemonade Lab Inc
-AD6000-AD6FFF     (base 16)		Lemonade Lab Inc
-				1-10-8 Nishi-Azabu
-				Minato-ku  Tokyo  106-0031
-				JP
-
-70-B3-D5   (hex)		Shanghai Tianhe Automation Instrumentation Co., Ltd.
-AFB000-AFBFFF     (base 16)		Shanghai Tianhe Automation Instrumentation Co., Ltd.
-				room 501, block D, No. 100, lane 2891, Qilianshan Nan road,
-				Shanghai  Shanghai  200331
-				CN
-
-70-B3-D5   (hex)		iLOQ Oy
-CFD000-CFDFFF     (base 16)		iLOQ Oy
-				Yrttipellontie 10
-				Oulu  EMEA  90230
-				FI
-
-70-B3-D5   (hex)		C.D.N.CORPORATION
-C73000-C73FFF     (base 16)		C.D.N.CORPORATION
-				1-18-22　Ohtsubo-higashi,Miyazaki-Ciy
-				Miyazaki  Miyazaki  880-0934
-				JP
-
-70-B3-D5   (hex)		bentrup Industriesteuerungen
-870000-870FFF     (base 16)		bentrup Industriesteuerungen
-				Zum Buchwald 4-6
-				Fernwald  Hessia  35463
-				DE
-
-70-B3-D5   (hex)		Apogee Applied Research, Inc.
-FBA000-FBAFFF     (base 16)		Apogee Applied Research, Inc.
-				4401 Dayton Xenia Rd
-				Dayton  Ohio  45432
-				US
-
-70-B3-D5   (hex)		Synaccess Networks Inc.
-336000-336FFF     (base 16)		Synaccess Networks Inc.
-				75 W. Baseline Rd.
-				Gilbert  AZ  85233
-				US
-
-70-B3-D5   (hex)		Zigen Corp
-D87000-D87FFF     (base 16)		Zigen Corp
-				6934 Canby Avenue
-				Reseda  CA  91335
-				US
-
-70-B3-D5   (hex)		LSB - LA SALLE BLANCHE
-7B7000-7B7FFF     (base 16)		LSB - LA SALLE BLANCHE
-				RN 100
-				APT EN PROVENCE  84  84400
-				FR
-
-70-B3-D5   (hex)		Liquid Instruments Pty Ltd
-87B000-87BFFF     (base 16)		Liquid Instruments Pty Ltd
-				31 Pokana Cct
-				Kaleen  ACT  2617
-				AU
-
-70-B3-D5   (hex)		Ducommun Inc.
-583000-583FFF     (base 16)		Ducommun Inc.
-				700 Braddock Avenue
-				East Pittsburgh  PA  15112
-				US
-
-70-B3-D5   (hex)		Versilis Inc.
-4D8000-4D8FFF     (base 16)		Versilis Inc.
-				4295 St-Elzear Ouest
-				Laval  Quebec  h7p4j3
-				CA
-
-70-B3-D5   (hex)		LayTec AG
-995000-995FFF     (base 16)		LayTec AG
-				Seesener Str. 10 13
-				Berlin  Berlin  10709
-				DE
-
-70-B3-D5   (hex)		Talleres de Escoriaza
-0DC000-0DCFFF     (base 16)		Talleres de Escoriaza
-				Barrio Ventas 35
-				Irun  Gipuzkoa  20305
-				ES
-
-70-B3-D5   (hex)		Exi Flow Measurement Ltd
-7AE000-7AEFFF     (base 16)		Exi Flow Measurement Ltd
-				Unit 22 Ford Lane business Park
-				Ford, ARUNDEL  West Sussex  BN164HP
-				GB
-
-70-B3-D5   (hex)		Integrated Systems Engineering, Inc.
-48C000-48CFFF     (base 16)		Integrated Systems Engineering, Inc.
-				600 South Holmes, STE 4
-				St. Louis  Missouri  63122
-				US
-
-70-B3-D5   (hex)		New Japan Radio Co., Ltd
-AF3000-AF3FFF     (base 16)		New Japan Radio Co., Ltd
-				2-1-1 Fukuoka
-				Fujimino  Saitama  356-8510
-				JP
-
-70-B3-D5   (hex)		Trinity Solutions LLC
-AC9000-AC9FFF     (base 16)		Trinity Solutions LLC
-				PO Box 309
-				Mt. Nebo  West Virginia  26679
-				US
-
-70-B3-D5   (hex)		Kumu Networks
-01C000-01CFFF     (base 16)		Kumu Networks
-				960 Hamlin Court
-				Sunnyvale  California  94089
-				US
-
-70-B3-D5   (hex)		Nation-E Ltd.
-DE8000-DE8FFF     (base 16)		Nation-E Ltd.
-				89 Medinat hayehudim St.
-				Herziliya  IL  4676672
-				IL
-
-70-B3-D5   (hex)		Sonel S.A.
-775000-775FFF     (base 16)		Sonel S.A.
-				Wokulskiego 11
-				Swidnica  Dolnoslaskie  58-100
-				PL
-
-70-B3-D5   (hex)		CDR SRL
-BDD000-BDDFFF     (base 16)		CDR SRL
-				VIA DEGLI ARTIGIANI 6
-				GINESTRA FIORENTINA  FLORENCE  50055
-				IT
-
-70-B3-D5   (hex)		Novo DR Ltd.
-300000-300FFF     (base 16)		Novo DR Ltd.
-				40 HaAtsmaut Road
-				Yehud  - Please Choose -  5630417
-				IL
-
-70-B3-D5   (hex)		Hengen Technologies GmbH
-F2C000-F2CFFF     (base 16)		Hengen Technologies GmbH
-				Vogesenstrasse 19a
-				Landau  Rheinland-Pfalz  76829
-				DE
-
-70-B3-D5   (hex)		DEV Systemtechnik GmbH& Co KG
-418000-418FFF     (base 16)		DEV Systemtechnik GmbH& Co KG
-				Gruener Weg 4A
-				Friedberg  Hessen  61169
-				DE
-
-70-B3-D5   (hex)		ATEME
-AA7000-AA7FFF     (base 16)		ATEME
-				26 Burospace
-				Bievres  IDF  91470
-				
-
-70-B3-D5   (hex)		Code Blue Corporation
-C3F000-C3FFFF     (base 16)		Code Blue Corporation
-				259 Hedcor St
-				Holland  MI  49423
-				US
-
-70-B3-D5   (hex)		RF-Tuote Oy
-849000-849FFF     (base 16)		RF-Tuote Oy
-				Joensuunkatu 13
-				Salo    24130
-				FI
-
-70-B3-D5   (hex)		Sienda New Media Technologies GmbH
-A81000-A81FFF     (base 16)		Sienda New Media Technologies GmbH
-				Lange Gasse 90
-				Basel  Basel-land  4052
-				CH
-
-70-B3-D5   (hex)		Logiwaste AB
-D0D000-D0DFFF     (base 16)		Logiwaste AB
-				Gamla Stallet Stora Wäsby
-				Upplands Väsby  Upplands Väsby  194 37
-				SE
-
-70-B3-D5   (hex)		Teenage Engineering AB
-1AF000-1AFFFF     (base 16)		Teenage Engineering AB
-				Katarina Bangata 71
-				Stockholm  n/a  11642
-				SE
-
-70-B3-D5   (hex)		ConectaIP Tecnologia S.L.
-D7F000-D7FFFF     (base 16)		ConectaIP Tecnologia S.L.
-				Novell 58, 4.2
-				Barcelona    08014
-				ES
-
-70-B3-D5   (hex)		Bizwerks, LLC
-A97000-A97FFF     (base 16)		Bizwerks, LLC
-				1201 East 15th Street
-				Plano  TX  75074
-				US
-
-70-B3-D5   (hex)		SerEnergy A/S
-7B8000-7B8FFF     (base 16)		SerEnergy A/S
-				Lyngvej 8
-				Aalborg  Denmark  9000
-				DK
-
-70-B3-D5   (hex)		KST technology
-3DB000-3DBFFF     (base 16)		KST technology
-				164-1, KST b/d., Bangi-dong, songpa-gu
-				SEOUL  N/A  138-050
-				KR
-
-70-B3-D5   (hex)		KLS Netherlands B.V.
-DCF000-DCFFFF     (base 16)		KLS Netherlands B.V.
-				Buitenvaart 1401
-				HOOGEVEEN  DRENTHE  7905 SJ
-				NL
-
-70-B3-D5   (hex)		TechOne
-F92000-F92FFF     (base 16)		TechOne
-				6-20-13-803, Chuo
-				Fukutsu  Fukuoka  8113217
-				JP
-
-70-B3-D5   (hex)		Embest Technology Co., Ltd
-A55000-A55FFF     (base 16)		Embest Technology Co., Ltd
-				Tower B 4/F, Shanshui Building, , Liuxian Ave. No. 1183, Taoyuan St.,
-				Nanshan District, Shenzhen  Gangdong Province  518055
-				CN
-
-70-B3-D5   (hex)		PulseTor LLC
-A25000-A25FFF     (base 16)		PulseTor LLC
-				1580 Reed Road
-				Pennington  NJ  08534
-				US
-
-70-B3-D5   (hex)		Embsec AB
-D1F000-D1FFFF     (base 16)		Embsec AB
-				Propellervagen 10
-				Taby  Taby  18362
-				SE
-
-70-B3-D5   (hex)		Tokyo Drawing Ltd.
-164000-164FFF     (base 16)		Tokyo Drawing Ltd.
-				103 Ni Terai-machi
-				Nomi-shi  Ishikawa  923-1121
-				JP
-
-70-B3-D5   (hex)		Zulex International Co.,Ltd.
-959000-959FFF     (base 16)		Zulex International Co.,Ltd.
-				52/54 M.6 Talingchan-Suphanburi rd.,
-				Bangyai  Nonthaburi  11140
-				TH
-
-70-B3-D5   (hex)		Prolan Process Control Co.
-FF5000-FF5FFF     (base 16)		Prolan Process Control Co.
-				Szentendrei út 1-3.
-				Budakalász  HUngary  2013
-				HU
-
-70-B3-D5   (hex)		Seneco A/S
-327000-327FFF     (base 16)		Seneco A/S
-				Bøgekildevej 4
-				Hasselager  Danmark  8361
-				DK
-
-70-B3-D5   (hex)		COMM-connect A/S
-ECE000-ECEFFF     (base 16)		COMM-connect A/S
-				Raasigvangen 2
-				Slangerup    DK-3550
-				DK
-
-70-B3-D5   (hex)		IHI Inspection & Instrumentation Co., Ltd.
-344000-344FFF     (base 16)		IHI Inspection & Instrumentation Co., Ltd.
-				1-100, Takamatsu-Cho,
-				Tachikawa-Shi  Tokyo  190-0011
-				JP
-
-70-B3-D5   (hex)		EIWA GIKEN INC.
-BA4000-BA4FFF     (base 16)		EIWA GIKEN INC.
-				5-708 FUSHIYA NAKAGAWA-KU
-				NAGOYA  AICHI-PREFECTURE  454-0996
-				JP
-
-70-B3-D5   (hex)		JC HUNTER TECHNOLOGIES
-C61000-C61FFF     (base 16)		JC HUNTER TECHNOLOGIES
-				185 Custer St. Apt. 4
-				Lander  wy  82520
-				US
-
-70-B3-D5   (hex)		nVideon, Inc.
-3B8000-3B8FFF     (base 16)		nVideon, Inc.
-				3170 Sugarplum Rd. NE
-				Atlanta  GA  30345
-				US
-
-70-B3-D5   (hex)		Private
-220000-220FFF     (base 16)		Private
-
-70-B3-D5   (hex)		Christ Elektronik GmbH
-A5B000-A5BFFF     (base 16)		Christ Elektronik GmbH
-				Alpenstrasse 34
-				Memmingen  Bayern  87700
-				DE
-
-70-B3-D5   (hex)		FUJI DATA SYSTEM CO.,LTD.
-E92000-E92FFF     (base 16)		FUJI DATA SYSTEM CO.,LTD.
-				5-21-14
-				AMAGASAKI-SHI  HYOGO PREF  660-0892
-				JP
-
-70-B3-D5   (hex)		EUROPEAN ADVANCED TECHNOLOGIES
-F8C000-F8CFFF     (base 16)		EUROPEAN ADVANCED TECHNOLOGIES
-				VIA CARDUCCI 32
-				MILANO  MILANO  20123
-				IT
-
-70-B3-D5   (hex)		SENSYS GmbH
-F2B000-F2BFFF     (base 16)		SENSYS GmbH
-				Rabenfelde 5
-				Bad Saarow/OT Neu Golm  Brandenburg  15526
-				DE
-
-70-B3-D5   (hex)		Siemens Healthcare Diagnostics
-20C000-20CFFF     (base 16)		Siemens Healthcare Diagnostics
-				62 Flanders Bartley Road
-				Flanders  NJ  07836
-				US
-
-70-B3-D5   (hex)		Hatteland Display AS
-BC6000-BC6FFF     (base 16)		Hatteland Display AS
-				Pb. 446 Alnabru
-				Oslo  Oslo  N-0614
-				NO
-
-70-B3-D5   (hex)		MultiDyne
-3DF000-3DFFFF     (base 16)		MultiDyne
-				191 Forest Ave
-				Locust Valley  NY  11560
-				US
-
-70-B3-D5   (hex)		Reonix Automation
-0B3000-0B3FFF     (base 16)		Reonix Automation
-				#10 - 3716 56 ave SE
-				Calgary  Alberta  T2C2B5
-				CA
-
-70-B3-D5   (hex)		Molu Technology Inc., LTD.
-0C0000-0C0FFF     (base 16)		Molu Technology Inc., LTD.
-				NO. 25, Ln., 230, Zhonghe Rd.,
-				Zhonghe Dist.  New Taipei City  235
-				TW
-
-70-B3-D5   (hex)		Aditec GmbH
-3CE000-3CEFFF     (base 16)		Aditec GmbH
-				Talweg 17
-				Offenau  Baden-Wuerttemberg  74254
-				DE
-
-70-B3-D5   (hex)		IAI-Israel Aerospace Industries MBT
-E4C000-E4CFFF     (base 16)		IAI-Israel Aerospace Industries MBT
-				1 Altalef st.
-				Yehud  Yehud  5610001
-				IL
-
-70-B3-D5   (hex)		Excel Medical Electronics LLC
-DC5000-DC5FFF     (base 16)		Excel Medical Electronics LLC
-				801 Maplewood Dr.
-				Jupiter  Florida  33458
-				US
-
-70-B3-D5   (hex)		FEITIAN CO.,LTD.
-E26000-E26FFF     (base 16)		FEITIAN CO.,LTD.
-				7-F,7-15-17 Roppongi
-				MINATOKU  TOKYO  106-0032
-				JP
-
-70-B3-D5   (hex)		Advitronics telecom bv
-E99000-E99FFF     (base 16)		Advitronics telecom bv
-				Garnizoenstraat 1
-				Velp (nb)  Noord brabant  5363 VX
-				NL
-
-70-B3-D5   (hex)		Asiga
-362000-362FFF     (base 16)		Asiga
-				2/36 Albert Street
-				St Peters  NSW  2044
-				AU
-
-70-B3-D5   (hex)		Weigl Elektronik & Mediaprojekte
-01D000-01DFFF     (base 16)		Weigl Elektronik & Mediaprojekte
-				Limberg 3
-				Gramastetten  Oberoesterreich  4201
-				AT
-
-70-B3-D5   (hex)		P&C Micro's Pty Ltd
-6F2000-6F2FFF     (base 16)		P&C Micro's Pty Ltd
-				14 Ricketts Road
-				Mount Waverley  Victoria  3149
-				AU
-
-70-B3-D5   (hex)		Meiknologic GmbH
-2E3000-2E3FFF     (base 16)		Meiknologic GmbH
-				Hölderlinweg 19a
-				Darmstadt  Hessen  64285
-				DE
-
-70-B3-D5   (hex)		eSOL Co.,Ltd.
-45E000-45EFFF     (base 16)		eSOL Co.,Ltd.
-				8-1-31
-				  saitama  336-0026
-				JP
-
-70-B3-D5   (hex)		Chugoku Electric Manufacturing Co.,Inc
-5AA000-5AAFFF     (base 16)		Chugoku Electric Manufacturing Co.,Inc
-				Ozu 4-4-32
-				Minami-ku, Hirosima-shi  HIROSHIMA  732-0802
-				JP
-
-70-B3-D5   (hex)		Eltwin A/S
-FC5000-FC5FFF     (base 16)		Eltwin A/S
-				Torsoevej 1b
-				Risskov  Aarhus  8240
-				DK
-
-70-B3-D5   (hex)		«Intellect module» LLC
-819000-819FFF     (base 16)		«Intellect module» LLC
-				Krasnogo kursanta str. 25 lit. J
-				Saint-Petersburg    197110
-				RU
-
-70-B3-D5   (hex)		Skywave Networks Private Limited
-2DA000-2DAFFF     (base 16)		Skywave Networks Private Limited
-				Achyut Mansion,H.No 7-1-621/48,Flat No 201,Above Sindhu Travels,
-				Hyderabad  Andhra Pradesh  500038
-				IN
-
-70-B3-D5   (hex)		Heartland.Data Inc.
-AC8000-AC8FFF     (base 16)		Heartland.Data Inc.
-				361 Fukui-Cho
-				Ashikaga-City  Tochigi-Pref  326-0338
-				JP
-
-70-B3-D5   (hex)		christmann informationstechnik + medien GmbH & Co. KG
-564000-564FFF     (base 16)		christmann informationstechnik + medien GmbH & Co. KG
-				Ilseder Huette 10c
-				Ilsede  Niedersachsen  31241
-				DE
-
-70-B3-D5   (hex)		IST ElektronikgesmbH
-60C000-60CFFF     (base 16)		IST ElektronikgesmbH
-				Marktplatz 40
-				Neukirchen am Walde  Upper Austria  4724
-				AT
-
-70-B3-D5   (hex)		Kongsberg Intergrated Tactical Systems
-EF2000-EF2FFF     (base 16)		Kongsberg Intergrated Tactical Systems
-				10 Pinehurst Dr
-				Bellport  New York  11713
-				US
-
-70-B3-D5   (hex)		Barnstormer Softworks
-3E1000-3E1FFF     (base 16)		Barnstormer Softworks
-				837 N Grant St.
-				Wooster  OH  44691
-				US
-
-70-B3-D5   (hex)		Sudo Premium Engineering
-052000-052FFF     (base 16)		Sudo Premium Engineering
-				Seoch dong, Seocho gu
-				    ASI|KR|KS013|SEOUL
-				KR
-
-70-B3-D5   (hex)		Vetaphone A/S
-A0E000-A0EFFF     (base 16)		Vetaphone A/S
-				Fabriksvej 11
-				Kolding  Region syddanmark  6000
-				DK
-
-70-B3-D5   (hex)		Power Diagnostic Service
-F61000-F61FFF     (base 16)		Power Diagnostic Service
-				No.5, Aly. 2, Ln. 261, Yanping Rd,
-				Hsinchu City  Hsinchu County  300
-				TW
-
-70-B3-D5   (hex)		Flexsolution APS
-433000-433FFF     (base 16)		Flexsolution APS
-				Østervangsvej 39
-				Esbjerg N  Jylland  6715
-				DK
-
-70-B3-D5   (hex)		MacGray Services
-F34000-F34FFF     (base 16)		MacGray Services
-				404 Wyman St
-				Waltham  MA  02451
-				
-
-70-B3-D5   (hex)		AKIS technologies
-FD3000-FD3FFF     (base 16)		AKIS technologies
-				Ciurlionio g. 82
-				Vilnius  Lithuania  03100
-				LT
-
-70-B3-D5   (hex)		BBI Engineering, Inc.
-FA1000-FA1FFF     (base 16)		BBI Engineering, Inc.
-				241 Quint Street
-				San Francisco  California  94124
-				US
-
-70-B3-D5   (hex)		Tecnint HTE SRL
-51D000-51DFFF     (base 16)		Tecnint HTE SRL
-				Via della Tecnica 16/18
-				Osnago  Lecco  23875
-				IT
-
-70-B3-D5   (hex)		Tband srl
-9F4000-9F4FFF     (base 16)		Tband srl
-				Via A. Meucci, 4
-				Preganziol  Treviso  31022
-				IT
-
-70-B3-D5   (hex)		JamHub Corp.
-3A8000-3A8FFF     (base 16)		JamHub Corp.
-				One Main Street
-				Whitinsville  MA  01588
-				US
-
-70-B3-D5   (hex)		Monroe Electronics, Inc.
-40A000-40AFFF     (base 16)		Monroe Electronics, Inc.
-				100 Housel Avenue
-				Lyndonville  NY  14098
-				US
-
-70-B3-D5   (hex)		J.D. Koftinoff Software, Ltd.
-EDC000-EDCFFF     (base 16)		J.D. Koftinoff Software, Ltd.
-				4-3600 Pleasant Valley Rd.
-				Vernon  B.C  V1T4L6
-				CA
-
-70-B3-D5   (hex)		Inras GmbH
-B3D000-B3DFFF     (base 16)		Inras GmbH
-				Altenberger Straße 69
-				Linz  Oberösterreich  A-4040
-				AT
-
-70-B3-D5   (hex)		Tunstall A/S
-139000-139FFF     (base 16)		Tunstall A/S
-				Niels Bohrs vej 42
-				Stilling  Skanderborg  8660
-				DK
-
-70-B3-D5   (hex)		Evco S.p.a.
-183000-183FFF     (base 16)		Evco S.p.a.
-				Via Feltre 81
-				Sedico  Belluno  32036
-				IT
-
-70-B3-D5   (hex)		Cellular Specialties, Inc.
-3C2000-3C2FFF     (base 16)		Cellular Specialties, Inc.
-				670 North Commercial Avenue,
-				Manchester  NH  03101
-				US
-
-00-1B-C5   (hex)		TN Core Co.,Ltd.
-0BF000-0BFFFF     (base 16)		TN Core Co.,Ltd.
-				707, Daerung Post Tower 6, 50-3
-				Seoul  -  153715
-				KR
-
-00-1B-C5   (hex)		Digital Loggers, Inc.
-0C0000-0C0FFF     (base 16)		Digital Loggers, Inc.
-				2695 Walsh Avenue
-				Santa Clara  CA  95051
-				US
-
-00-1B-C5   (hex)		Autelis, LLC
-0B7000-0B7FFF     (base 16)		Autelis, LLC
-				1820 W Calle De Pompas
-				Phoenix  Arizona  85085
-				US
-
-00-1B-C5   (hex)		Techlan Reti s.r.l.
-0AE000-0AEFFF     (base 16)		Techlan Reti s.r.l.
-				Via delle mondine 8 a/b
-				Carpi  Modena  41012
-				IT
-
-00-1B-C5   (hex)		P A Network Laboratory Co.,Ltd
-0A3000-0A3FFF     (base 16)		P A Network Laboratory Co.,Ltd
-				2-12-10 Takanami Bld.3kai, Shiba, Minato-ku, Tokyo, 105-0014, Japan
-				Minato-ku  Tokyo  1050014
-				JP
-
-00-1B-C5   (hex)		S.I.C.E.S. srl
-09C000-09CFFF     (base 16)		S.I.C.E.S. srl
-				Via Molinello, 8B
-				Jerago con Orago  VARESE  21040
-				IT
-
-00-1B-C5   (hex)		Cubic Systems, Inc.
-098000-098FFF     (base 16)		Cubic Systems, Inc.
-				139 Dino Drive
-				Ann Arbor  MI  48103
-				US
-
-00-1B-C5   (hex)		EUREK  SRL
-08D000-08DFFF     (base 16)		EUREK  SRL
-				VIA CELLETTA 8/B
-				IMOLA  BOLOGNA  40026
-				US
-
-00-1B-C5   (hex)		SIGNATURE CONTROL SYSTEMS, INC.
-089000-089FFF     (base 16)		SIGNATURE CONTROL SYSTEMS, INC.
-				18 GOODYEAR STE 110
-				IRVINE  CA  92618
-				US
-
-00-1B-C5   (hex)		UAB Kitron
-088000-088FFF     (base 16)		UAB Kitron
-				Taikos pr. 151
-				  Kaunas  LT-52119
-				LT
-
-00-1B-C5   (hex)		WonATech Co., Ltd.
-081000-081FFF     (base 16)		WonATech Co., Ltd.
-				171-17
-				Seocho-Gu  Seoul  137-180
-				KR
-
-00-1B-C5   (hex)		HPI High Pressure Instrumentation GmbH
-079000-079FFF     (base 16)		HPI High Pressure Instrumentation GmbH
-				Ueberfuhrgasse 37
-				Graz  Steiermark  8020
-				AT
-
-00-1B-C5   (hex)		LLC Emzior
-06F000-06FFFF     (base 16)		LLC Emzior
-				Strelna, Svyazi Street, 34, Lit A, of. 234
-				Saint-Petersburg    198515
-				RU
-
-00-1B-C5   (hex)		Siemens Industries, Inc, Retail & Commercial Systems
-070000-070FFF     (base 16)		Siemens Industries, Inc, Retail & Commercial Systems
-				9225 Bee Caves Rd
-				Austin  TX  78733
-				US
-
-00-1B-C5   (hex)		Verified Energy, LLC.
-06B000-06BFFF     (base 16)		Verified Energy, LLC.
-				PO Box 111
-				Oneida  New York  13421
-				US
-
-00-1B-C5   (hex)		Luxcon System Limited
-06C000-06CFFF     (base 16)		Luxcon System Limited
-				Rm1605, SEAVIEW PLAZA, 283 SHAUKEIWAN RD,
-				HongKong    
-				HK
-
-00-1B-C5   (hex)		Two Dimensional Instruments, LLC
-06E000-06EFFF     (base 16)		Two Dimensional Instruments, LLC
-				P O Box 159
-				Crestwood  KY  40014
-				US
-
-00-1B-C5   (hex)		Sulaon Oy
-062000-062FFF     (base 16)		Sulaon Oy
-				Muuraintie 6
-				Salo    24280
-				FI
-
-00-1B-C5   (hex)		Plair Media Inc.
-065000-065FFF     (base 16)		Plair Media Inc.
-				2901 Tasman Drive
-				Santa Clara  California  95054
-				US
-
-00-1B-C5   (hex)		JSC Prominform
-05D000-05DFFF     (base 16)		JSC Prominform
-				Gazeti Zvezda str., 24A
-				Perm  Permskiy krai  614000
-				RU
-
-00-1B-C5   (hex)		Private
-054000-054FFF     (base 16)		Private
-
-00-1B-C5   (hex)		OOO Actidata
-040000-040FFF     (base 16)		OOO Actidata
-				Bolshaya Pochtovaya 36 Bldg 10
-				Moscow    105082
-				RU
-
-00-1B-C5   (hex)		EURESYS S.A.
-039000-039FFF     (base 16)		EURESYS S.A.
-				Avenue du Pre-Aily 14
-				ANGLEUR  LIEGE  4031
-				BE
-
-00-1B-C5   (hex)		RTLS Ltd.
-035000-035FFF     (base 16)		RTLS Ltd.
-				42 Bol. Gruzinskaya str.
-				Moscow    123056
-				RU
-
-00-1B-C5   (hex)		Rose + Herleth GbR
-01D000-01DFFF     (base 16)		Rose + Herleth GbR
-				Wendenweg 17
-				Berlin    13595
-				DE
-
-00-1B-C5   (hex)		ABA ELECTRONICS TECHNOLOGY CO.,LTD
-01A000-01AFFF     (base 16)		ABA ELECTRONICS TECHNOLOGY CO.,LTD
-				10F-3,NO.2,SEC.4,JHONGYANG RD,TUCHENG CITY,
-				TAIPEI    236
-				TW
-
-00-1B-C5   (hex)		Zamir Recognition Systems Ltd.
-013000-013FFF     (base 16)		Zamir Recognition Systems Ltd.
-				Manachat Tech Park 1/22
-				Jerusalem    96951
-				IL
-
-00-1B-C5   (hex)		OOO NPP Mera
-011000-011FFF     (base 16)		OOO NPP Mera
-				Pionerskaya 4
-				Korolev  Moscow reg  141070
-				RU
-
-00-1B-C5   (hex)		Private
-005000-005FFF     (base 16)		Private
-
-00-1B-C5   (hex)		TRIAX-HIRSCHMANN Multi-Media GmbH
-006000-006FFF     (base 16)		TRIAX-HIRSCHMANN Multi-Media GmbH
-				Karl-Benz-Strasse 10
-				Pliezhausen  Baden-Württemberg  72124
-				DE
-
-00-1B-C5   (hex)		Energy Aware Technology
-007000-007FFF     (base 16)		Energy Aware Technology
-				Suite 515
-				Vancouver  BC  V6A3X3
-				CA
-
-00-1B-C5   (hex)		Private
-00B000-00BFFF     (base 16)		Private
-
-70-B3-D5   (hex)		Deep BV
-55F000-55FFFF     (base 16)		Deep BV
-				Johan van Hasseltweg 39d
-				Amsterdam    1021KN
-				NL
-
-70-B3-D5   (hex)		SHEN ZHEN QLS ELECTRONIC TECHNOLOGY CO.,LTD.
-6E3000-6E3FFF     (base 16)		SHEN ZHEN QLS ELECTRONIC TECHNOLOGY CO.,LTD.
-				Room A1502, NiuLanQian Building, MinZhi Road, LongHua Town
-				ShenZhen  GuangDong  518109
-				CN
-
-70-B3-D5   (hex)		Xavant
-1EB000-1EBFFF     (base 16)		Xavant
-				309 Derdepoort Rylaan, Silverton
-				Pretoria  Gauteng  0181
-				ZA
-
-70-B3-D5   (hex)		Argosy Labs Inc.
-E5B000-E5BFFF     (base 16)		Argosy Labs Inc.
-				490 Canal St #14
-				San Rafael  CA  94901
-				US
-
-70-B3-D5   (hex)		Brayden Automation Corp
-B19000-B19FFF     (base 16)		Brayden Automation Corp
-				6230 Aviation Circle
-				Loveland   CO  80538
-				US
-
-70-B3-D5   (hex)		Aditec GmbH
-A38000-A38FFF     (base 16)		Aditec GmbH
-				Talweg 17
-				Offenau  Baden-Wuerttemberg  74254
-				DE
-
-70-B3-D5   (hex)		Elektro Adrian
-FF6000-FF6FFF     (base 16)		Elektro Adrian
-				Via Garibaldi no.1
-				Predazzo  Trento  38037
-				IT
-
-70-B3-D5   (hex)		PEEK TRAFFIC
-691000-691FFF     (base 16)		PEEK TRAFFIC
-				5401 N SAM HOUSTON PKWY W
-				HOUSTON    77086
-				US
-
-70-B3-D5   (hex)		Dataflex International BV
-52A000-52AFFF     (base 16)		Dataflex International BV
-				van Nassauweg 2-6
-				Krimpen aan den IJssel  Zuid-Holland  2921 LX
-				NL
-
-70-B3-D5   (hex)		MATELEX
-372000-372FFF     (base 16)		MATELEX
-				26, AVENUE DU PETIT PARC
-				VINCENNES    94683
-				FR
-
-70-B3-D5   (hex)		ETL Elektrotechnik Lauter GmbH
-DE3000-DE3FFF     (base 16)		ETL Elektrotechnik Lauter GmbH
-				Konrad-Zuse-Str. 2
-				Mauerstetten  Bavaria  87665
-				DE
-
-70-B3-D5   (hex)		Light field Lab
-D27000-D27FFF     (base 16)		Light field Lab
-				699 E Brokaw Rd
-				San Jose  CA  95112
-				US
-
-70-B3-D5   (hex)		CENSIS, Uiversity of Glasgow
-1C2000-1C2FFF     (base 16)		CENSIS, Uiversity of Glasgow
-				121 George Street
-				Glasgow    G1 1RD
-				GB
-
-70-B3-D5   (hex)		Solarlytics, Inc.
-366000-366FFF     (base 16)		Solarlytics, Inc.
-				288 Lindbergh Avenue
-				LIVERMORE  CA  94551
-				US
-
-70-B3-D5   (hex)		Phytron GmbH
-7BE000-7BEFFF     (base 16)		Phytron GmbH
-				Industriestr. 12
-				Groebenzell  Bayern  82194
-				DE
-
-70-B3-D5   (hex)		KSE GmbH
-38A000-38AFFF     (base 16)		KSE GmbH
-				Frühlingstraße 31-33
-				Ingolstadt    85055
-				DE
-
-70-B3-D5   (hex)		Maytronics Ltd.
-90E000-90EFFF     (base 16)		Maytronics Ltd.
-				
-				    
-				
-
-70-B3-D5   (hex)		InterTalk Critical Information Systems
-5D0000-5D0FFF     (base 16)		InterTalk Critical Information Systems
-				371 Cutler Avenue
-				Dartmouth  Nova Scotia  B3B 0J5
-				CA
-
-70-B3-D5   (hex)		fpgalabs.com
-BA5000-BA5FFF     (base 16)		fpgalabs.com
-				p.Moskovskiy, d. Rumyantsevo, str.4
-				Moscow    108811
-				RU
-
-70-B3-D5   (hex)		Gstar Creation Co .,Ltd
-A67000-A67FFF     (base 16)		Gstar Creation Co .,Ltd
-				1F NO53 Jimay Street san chong district
-				New Taipei    241
-				TW
-
-70-B3-D5   (hex)		JSC Kaluga Astral
-E89000-E89FFF     (base 16)		JSC Kaluga Astral
-				Tsyolkovsky 4
-				Kaluga  Kaluga  248000
-				RU
-
-70-B3-D5   (hex)		Sunsa, Inc
-BFF000-BFFFFF     (base 16)		Sunsa, Inc
-				3422 Fait Ave
-				Baltimore  MD  21224
-				US
-
-70-B3-D5   (hex)		Dream D&S Co.,Ltd
-E8B000-E8BFFF     (base 16)		Dream D&S Co.,Ltd
-				6F, 8, Jungdae-ro 8-gil, Songpa-gu
-				Seoul    05833
-				KR
-
-70-B3-D5   (hex)		FTG Corporation
-017000-017FFF     (base 16)		FTG Corporation
-				10 Commander Blvd.
-				Ajax  Ontario  M1S 3T2
-				CA
-
-70-B3-D5   (hex)		AddSecure Smart Grids
-126000-126FFF     (base 16)		AddSecure Smart Grids
-				Campus Gräsvik 1
-				Karlskrona    37175
-				SE
-
-70-B3-D5   (hex)		Changchun FAW Yanfeng Visteon Automotive Electronics.,Ltd.
-93B000-93BFFF     (base 16)		Changchun FAW Yanfeng Visteon Automotive Electronics.,Ltd.
-				No.2338 Guanggu Street Changchun City
-				chang chun  ji lin  130000
-				CN
-
-70-B3-D5   (hex)		Pantec AG
-A98000-A98FFF     (base 16)		Pantec AG
-				Industriering 21
-				Ruggell    9491
-				LI
-
-70-B3-D5   (hex)		Shachihata Inc.
-51A000-51AFFF     (base 16)		Shachihata Inc.
-				37 , SHINMEI-CHO , KOUWA
-				INAZAWA  AICHI  492-8102
-				JP
-
-70-B3-D5   (hex)		Wartsila Voyage Limited
-AE2000-AE2FFF     (base 16)		Wartsila Voyage Limited
-				13-18 City Quay
-				Dublin 2    D02 ED70
-				IE
-
-70-B3-D5   (hex)		Unisight Digital Products
-2D8000-2D8FFF     (base 16)		Unisight Digital Products
-				99 Inverness Drive East, Suite#180
-				Englewood  CO  80112
-				US
-
-70-B3-D5   (hex)		H2O-YUG LLC
-BDF000-BDFFFF     (base 16)		H2O-YUG LLC
-				Uralskaya st. 87/1 k
-				Krasnodar  Krasnodarskiy krai  350059
-				RU
-
-70-B3-D5   (hex)		QBIC COMMUNICATIONS DMCC
-8AF000-8AFFFF     (base 16)		QBIC COMMUNICATIONS DMCC
-				Office 302 1Lake Plaza Jumeirah Lake Towers Cluster T
-				Dubai    393518
-				AE
-
-70-B3-D5   (hex)		Softel
-9A5000-9A5FFF     (base 16)		Softel
-				35 bld 9, Nizhnyaya Krasnosel'skaya Ulitsa
-				Moscow    105066
-				RU
-
-70-B3-D5   (hex)		Shanghai Danyan Information Technology Co., Ltd.
-1B1000-1B1FFF     (base 16)		Shanghai Danyan Information Technology Co., Ltd.
-				12D, Building 7, 2388, Chenhang Road, Minhang District
-				Shanghai  Shanghai  201114
-				CN
-
-70-B3-D5   (hex)		Innovative Control Systems, LP
-89E000-89EFFF     (base 16)		Innovative Control Systems, LP
-				10801 N. 24th Ave Ste 102
-				Phoenix  AZ  85029
-				US
-
-70-B3-D5   (hex)		ACD Elekronik GmbH
-DA2000-DA2FFF     (base 16)		ACD Elekronik GmbH
-				Engelberg 2
-				Achstetten    88480
-				DE
-
-70-B3-D5   (hex)		Chengdu Meihuan Technology Co., Ltd
-C95000-C95FFF     (base 16)		Chengdu Meihuan Technology Co., Ltd
-				Floor 17, Building D6, Tianfu Software Park,
-				Chengdu  Sichuan  610041
-				CN
-
-70-B3-D5   (hex)		The Fire Horn, Inc.
-3F8000-3F8FFF     (base 16)		The Fire Horn, Inc.
-				1212 Helen St
-				Paducah  KY  42001
-				US
-
-70-B3-D5   (hex)		Absolent AB
-EFC000-EFCFFF     (base 16)		Absolent AB
-				Staplaregatan 1
-				Lidköping    53140
-				SE
-
-70-B3-D5   (hex)		Booz Allen Hamilton
-A24000-A24FFF     (base 16)		Booz Allen Hamilton
-				1900 West Park Drive, Suite 205
-				Westborough    01581
-				US
-
-70-B3-D5   (hex)		Mothonic AB
-8E6000-8E6FFF     (base 16)		Mothonic AB
-				Krouthéns Gata 8
-				Linköping    582 55
-				SE
-
-70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
-262000-262FFF     (base 16)		OOO Research and Production Center Computer Technologies
-				Komsomolsky avenue, 90-17
-				Perm  Perm Region  614010
-				RU
-
-70-B3-D5   (hex)		Digital Systems Engineering
-034000-034FFF     (base 16)		Digital Systems Engineering
-				17491 N. 93rd St.
-				Scottsdale  AZ  85255
-				US
-
-70-B3-D5   (hex)		Lumiplan Duhamel
-BB1000-BB1FFF     (base 16)		Lumiplan Duhamel
-				2 rue de l'industrie
-				Domène  Isère  38420
-				FR
-
-70-B3-D5   (hex)		SenseNL
-8C0000-8C0FFF     (base 16)		SenseNL
-				Ambachtsweg 41 F
-				Pijnacker  Zuid-Holland  2641 KT
-				NL
-
-70-B3-D5   (hex)		 LEMZ-T, LLC
-306000-306FFF     (base 16)		 LEMZ-T, LLC
-				Razvitia pr., 8
-				Tomsk    634031
-				RU
-
-70-B3-D5   (hex)		LEAFF ENGINEERING SRL
-34B000-34BFFF     (base 16)		LEAFF ENGINEERING SRL
-				Via Pastore 10
-				Osimo  AN  60027
-				IT
-
-70-B3-D5   (hex)		CONTES, spol. s r.o.
-E2A000-E2AFFF     (base 16)		CONTES, spol. s r.o.
-				U podolskeho hrbitova 667/6
-				Prague    14700
-				CZ
-
-70-B3-D5   (hex)		Braemar Manufacturing, LLC
-93A000-93AFFF     (base 16)		Braemar Manufacturing, LLC
-				1285 Corporate Center Drive Suite 150
-				Eagan  MN  55121
-				US
-
-70-B3-D5   (hex)		Viotec USA
-899000-899FFF     (base 16)		Viotec USA
-				3 East Third Ave
-				San Mateo  CA  94401
-				US
-
-70-B3-D5   (hex)		Eredi Giuseppe Mercuri SPA
-6CE000-6CEFFF     (base 16)		Eredi Giuseppe Mercuri SPA
-				via Cupa Vicinale S.Aniello, 88
-				Naples    80146
-				IT
-
-70-B3-D5   (hex)		ITK Dr. Kassen GmbH
-58A000-58AFFF     (base 16)		ITK Dr. Kassen GmbH
-				Beim Eberacker 3
-				D-35633 Lahnau    
-				DE
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-88E000-88EFFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		Privafy, Inc
-A6A000-A6AFFF     (base 16)		Privafy, Inc
-				2 Burlington Woods Dr. Suite 200
-				Burlington  MA  01803
-				US
-
-70-B3-D5   (hex)		Contec Americas Inc.
-5D2000-5D2FFF     (base 16)		Contec Americas Inc.
-				3991 Sarno Rd
-				Melbourne  FL  32934
-				US
-
-70-B3-D5   (hex)		elements
-62D000-62DFFF     (base 16)		elements
-				Townsgate Road Suite 200 
-				Westlake Village  CA  91361
-				US
-
-70-B3-D5   (hex)		DAT Informatics Pvt Ltd
-244000-244FFF     (base 16)		DAT Informatics Pvt Ltd
-				Plot No 109 HPSIDC Industria Estate Davni, Baddi
-				Baddi  HIMACHAL PRADESH  173205
-				IN
-
-70-B3-D5   (hex)		Abbott Diagnostics Technologies AS
-6C6000-6C6FFF     (base 16)		Abbott Diagnostics Technologies AS
-				P. O.  Box 6863 Rodeløkka
-				Oslo  Oslo  0504
-				NO
-
-70-B3-D5   (hex)		Gamber Johnson-LLC
-E34000-E34FFF     (base 16)		Gamber Johnson-LLC
-				3001 Borham Ave
-				Stevens Point  WI  54481
-				US
-
-70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
-6BD000-6BDFFF     (base 16)		RCH Vietnam Limited Liability Company
-				Workshop F.01B-2, Lot No. F.01B Long Hau
-				Ho Chi Minh City  Ho Chi Minh  70000
-				VN
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-1F2000-1F2FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		QUALITTEQ LLC
-614000-614FFF     (base 16)		QUALITTEQ LLC
-				16th Parkovaya 26/1
-				Moscow    105484
-				RU
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-C2B000-C2BFFF     (base 16)		YUYAMA MFG Co.,Ltd
-				3-3-1
-				TOYONAKASHI  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		eSMART Technologies SA
-979000-979FFF     (base 16)		eSMART Technologies SA
-				Chemin de la Rueyre, 118
-				Renens VD    1020
-				CH
-
-70-B3-D5   (hex)		Duplomatic MS spa
-DE1000-DE1FFF     (base 16)		Duplomatic MS spa
-				Via Re Depaolini 24
-				Parabiago  Milan  20015
-				IT
-
-70-B3-D5   (hex)		Axnes AS
-65F000-65FFFF     (base 16)		Axnes AS
-				Terje Løvåsvei 1
-				Grimstad    4879
-				NO
-
-70-B3-D5   (hex)		Nanjing Pingguang Electronic Technology Co., Ltd
-541000-541FFF     (base 16)		Nanjing Pingguang Electronic Technology Co., Ltd
-				B30/B31 4th Floor, Building#11, Shengtai Road, JiangNing District
-				NanJing    211100
-				CN
-
-70-B3-D5   (hex)		thingdust AG
-3C1000-3C1FFF     (base 16)		thingdust AG
-				Moosstrasse 7
-				Lucerne  Lucerne  6003
-				CH
-
-70-B3-D5   (hex)		ALVAT s.r.o.
-369000-369FFF     (base 16)		ALVAT s.r.o.
-				Chodovska 228/3
-				Praha 4    14100
-				CZ
-
-70-B3-D5   (hex)		PHYZHON Health Inc
-744000-744FFF     (base 16)		PHYZHON Health Inc
-				180 Blue Ravine Road, suite A
-				Folsom  CA  95630
-				US
-
-70-B3-D5   (hex)		PCB Piezotronics
-4CA000-4CAFFF     (base 16)		PCB Piezotronics
-				3425 Walden Avenue
-				Depew  NY  14043
-				US
-
-70-B3-D5   (hex)		Panoramic Power
-53A000-53AFFF     (base 16)		Panoramic Power
-				15 Atir Yeda
-				Kfar Saba    4464312
-				IL
-
-70-B3-D5   (hex)		STEP sarl
-481000-481FFF     (base 16)		STEP sarl
-				11, avenue Aristide Berges
-				LANCEY  ISERE  38190
-				FR
-
-70-B3-D5   (hex)		ZPAS S.A.
-2D9000-2D9FFF     (base 16)		ZPAS S.A.
-				Przygorze 209
-				Woliborz  Lower Silesian (Dolno?l?skie)  57-431
-				PL
-
-70-B3-D5   (hex)		Redstone Sunshine(Beijing)Technology Co.,Ltd.
-6C9000-6C9FFF     (base 16)		Redstone Sunshine(Beijing)Technology Co.,Ltd.
-				Floor 2,Block B,Fu Xing Office Building,He Tao Yuan NO.30,Guan Dong Dian Bei Jie,Chao Yang District
-				Beijing    100020
-				CN
-
-70-B3-D5   (hex)		Mianjie Technology
-8FC000-8FCFFF     (base 16)		Mianjie Technology
-				Zhubang2000 Building2 1205
-				Beijing    100000
-				CN
-
-70-B3-D5   (hex)		HAI ROBOTICS Co., Ltd.
-0B7000-0B7FFF     (base 16)		HAI ROBOTICS Co., Ltd.
-				Room 101, 1st Floor, Xuda Industrial Park, Xiaweiyuanyixiang Xixiang, Bao'an District
-				SHENZHEN  GUANGDONG  518000
-				CN
-
-70-B3-D5   (hex)		inomatic GmbH
-1CA000-1CAFFF     (base 16)		inomatic GmbH
-				Karl-Braun-Straße 12
-				Nordhorn    48531
-				DE
-
-70-B3-D5   (hex)		Integer.pl S.A.
-2D1000-2D1FFF     (base 16)		Integer.pl S.A.
-				Wielicka 28
-				Krakow    30-552
-				PL
-
-70-B3-D5   (hex)		Benchmark Electronics - Secure Technology
-67C000-67CFFF     (base 16)		Benchmark Electronics - Secure Technology
-				1740 E Wilshire Ave
-				Santa Ana  CA  92705
-				US
-
-70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau AG
-DC4000-DC4FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
-				Werner-von-Siemens-Str. 1
-				Offenburg  Ba-Wue  77656
-				DE
-
-70-B3-D5   (hex)		Beijing Aumiwalker technology CO.,LTD
-C7C000-C7CFFF     (base 16)		Beijing Aumiwalker technology CO.,LTD
-				Floor 6, Tower 1, No.1 Zhonghe Road Fengtai Science Park Beijing P.R.C.
-				Beijing  Beijing  100071
-				CN
-
-70-B3-D5   (hex)		Kazdream Technologies LLP
-089000-089FFF     (base 16)		Kazdream Technologies LLP
-				10, Turkestan Str.
-				Nur-Sultan    010000
-				KZ
-
-70-B3-D5   (hex)		Cardinal Scales Manufacturing Co
-E5A000-E5AFFF     (base 16)		Cardinal Scales Manufacturing Co
-				203 East Daugherty Street
-				Webb City  MO  64870
-				US
-
-70-B3-D5   (hex)		Farmpro Ltd
-17C000-17CFFF     (base 16)		Farmpro Ltd
-				806, 28 Digitalro 30gil, Gurogu
-				Seoul    08389
-				KR
-
-70-B3-D5   (hex)		Talleres de Escoriaza SA
-E83000-E83FFF     (base 16)		Talleres de Escoriaza SA
-				Barrio Ventas, 35
-				Irun  Gipuzkoa  20305
-				ES
-
-70-B3-D5   (hex)		Military Research Institute
-2F7000-2F7FFF     (base 16)		Military Research Institute
-				Veslarska 230
-				Brno    63700
-				CZ
-
-70-B3-D5   (hex)		Network Innovations
-DA7000-DA7FFF     (base 16)		Network Innovations
-				4950 West Prospect Road
-				Fort Lauderdale  FL  33309
-				US
-
-70-B3-D5   (hex)		SLAT
-2C8000-2C8FFF     (base 16)		SLAT
-				11 Rue Jean-Elysée DUPUY
-				Champagne au Mont d'Or  Rhône  69543
-				FR
-
-70-B3-D5   (hex)		Shanghai Qinyue Communication Technology Co., Ltd.
-B57000-B57FFF     (base 16)		Shanghai Qinyue Communication Technology Co., Ltd.
-				Room 101,Building 51,Lane 588,ShuPing Road,Jiading District
-				Shanghai    201808
-				CN
-
-70-B3-D5   (hex)		Selmatec AS
-8FE000-8FEFFF     (base 16)		Selmatec AS
-				Berghagen 3
-				Oslo  Select One  1405
-				NO
-
-70-B3-D5   (hex)		QUISS GmbH
-AAB000-AABFFF     (base 16)		QUISS GmbH
-				Lilienthalstraße 5
-				Puchheim    82178
-				DE
-
-70-B3-D5   (hex)		Grossenbacher Systeme AG
-5FE000-5FEFFF     (base 16)		Grossenbacher Systeme AG
-				Spinnereistrasse 10
-				St. Gallen    9008
-				CH
-
-70-B3-D5   (hex)		Accolade Technology Inc
-87A000-87AFFF     (base 16)		Accolade Technology Inc
-				124 Grove Street, Suite 315
-				FRANKLIN  MA  02038
-				US
-
-70-B3-D5   (hex)		Adcole Space
-922000-922FFF     (base 16)		Adcole Space
-				734 Forest St.,Suite #100
-				Marlborough  MA  01752
-				US
-
-70-B3-D5   (hex)		QSnet Visual Technologies Ltd
-5C7000-5C7FFF     (base 16)		QSnet Visual Technologies Ltd
-				13 Gan Rave
-				YAVNE  ISRAEL  8122321
-				IL
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-886000-886FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		Loehnert Elektronik GmbH
-8A3000-8A3FFF     (base 16)		Loehnert Elektronik GmbH
-				Oskar-Sembach-Ring 18
-				Lauf a.d.Peg.  Bavaria  91207
-				DE
-
-70-B3-D5   (hex)		plc-tec AG
-095000-095FFF     (base 16)		plc-tec AG
-				Panoramastrasse 5
-				Hägglingen    5607
-				CH
-
-70-B3-D5   (hex)		Edge Power Solutions
-612000-612FFF     (base 16)		Edge Power Solutions
-				5131 Industry Drive, Suite 107
-				Melbourne  FL  32940
-				US
-
-70-B3-D5   (hex)		Antek Technology 
-9E5000-9E5FFF     (base 16)		Antek Technology 
-				11F, No. 51 Heng Yang Road
-				Taipei    100
-				TW
-
-70-B3-D5   (hex)		Eurotempest AB
-E37000-E37FFF     (base 16)		Eurotempest AB
-				Algolgatan 10
-				Linköping  Other  58335
-				SE
-
-70-B3-D5   (hex)		ARECA EMBEDDED SYSTEMS PVT LTD
-F15000-F15FFF     (base 16)		ARECA EMBEDDED SYSTEMS PVT LTD
-				Plot No.5B, Survey No.184-185, P-V, Cherlapally
-				HYDERABAD  TELANGANA  500051
-				IN
-
-70-B3-D5   (hex)		KOREA SPECTRAL PRODUCTS
-F59000-F59FFF     (base 16)		KOREA SPECTRAL PRODUCTS
-				Room #402, 273, DIGITAL-RO,
-				GURO-GU  SEOUL  08381
-				KR
-
-70-B3-D5   (hex)		YOUSUNG
-3B4000-3B4FFF     (base 16)		YOUSUNG
-				76, Gaetbeol-ro, Yeonsu-gu
-				Incheon    21999
-				KR
-
-70-B3-D5   (hex)		Weihai Weigao Medical Imaging Technology Co., Ltd
-534000-534FFF     (base 16)		Weihai Weigao Medical Imaging Technology Co., Ltd
-				No. 566-1, Qishan Road, Lingang Economic and Technological Development Zone
-				Weihai  Shandong  264210
-				CN
-
-70-B3-D5   (hex)		LiveCopper Inc.
-9E9000-9E9FFF     (base 16)		LiveCopper Inc.
-				600 Greer Rd
-				Palo Alto  CA  94303
-				US
-
-70-B3-D5   (hex)		KMtronic ltd
-6D6000-6D6FFF     (base 16)		KMtronic ltd
-				Dobri Czintulov 28A str.
-				Gorna Oryahovica  VT  5100
-				BG
-
-70-B3-D5   (hex)		CANON ELECTRON TUBES & DEVICES CO., LTD.
-44A000-44AFFF     (base 16)		CANON ELECTRON TUBES & DEVICES CO., LTD.
-				1385, Shimoishigami
-				Otawara-shi  Tochigi  324-8550
-				JP
-
-70-B3-D5   (hex)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
-64D000-64DFFF     (base 16)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
-				Koren industrial zone no 5
-				Mallot  Israel  2101002
-				IL
-
-70-B3-D5   (hex)		Orlaco Products B.V.
-4F5000-4F5FFF     (base 16)		Orlaco Products B.V.
-				Albert Plesmanstraat 42
-				Barneveld    3772MN
-				NL
-
-70-B3-D5   (hex)		Shenzhen Lianfaxun Electronic Technology Co., Ltd
-5C0000-5C0FFF     (base 16)		Shenzhen Lianfaxun Electronic Technology Co., Ltd
-				No. 25, Tianrong road, Tianliao second industrial park, Yutang street, Guangming new district
-				Shenzhen  Guangdong   518132
-				CN
-
-70-B3-D5   (hex)		CAST Group of Companies Inc.
-BDE000-BDEFFF     (base 16)		CAST Group of Companies Inc.
-				35 Ripley Ave.
-				Toronto  Ontario  M6S3P2
-				CA
-
-70-B3-D5   (hex)		Momentum Data Systems
-116000-116FFF     (base 16)		Momentum Data Systems
-				5432 Bolsa Ave Unit B
-				Huntington Beach  CA  92649
-				US
-
-70-B3-D5   (hex)		Camozzi Automation SpA
-3AB000-3ABFFF     (base 16)		Camozzi Automation SpA
-				Via Eritrea 20/I
-				BRESCIA  ITALY  25080
-				IT
-
-70-B3-D5   (hex)		PuS GmbH und Co. KG
-322000-322FFF     (base 16)		PuS GmbH und Co. KG
-				Hainstr. 13
-				Gera  Germany  07545
-				DE
-
-70-B3-D5   (hex)		Ci4Rail
-195000-195FFF     (base 16)		Ci4Rail
-				Vogelweiherstrasse 20
-				Nürnberg  Bavaria  90441
-				DE
-
-70-B3-D5   (hex)		Arris
-988000-988FFF     (base 16)		Arris
-				2500 Walsh Ave.
-				Santa Clara  CA  95014
-				US
-
-70-B3-D5   (hex)		Xirgo Technologies LLC
-646000-646FFF     (base 16)		Xirgo Technologies LLC
-				188 Camino Ruiz
-				Camarillo  CA  93012
-				US
-
-70-B3-D5   (hex)		Transit Solutions, LLC.
-4E2000-4E2FFF     (base 16)		Transit Solutions, LLC.
-				114 West Grandview Avenue
-				Zelienople  PA  16063
-				US
-
-70-B3-D5   (hex)		JD Squared, Inc.
-562000-562FFF     (base 16)		JD Squared, Inc.
-				915 Riverview Drive
-				Johnson City  TN  37601
-				US
-
-70-B3-D5   (hex)		VOCAL Technologies Ltd.
-7B5000-7B5FFF     (base 16)		VOCAL Technologies Ltd.
-				520 LEE ENTRANCE STE 202
-				BUFFALO  NY  142282583
-				US
-
-70-B3-D5   (hex)		Deltronic Security AB
-CEC000-CECFFF     (base 16)		Deltronic Security AB
-				E A Rosengrensgata 4
-				Västra Frölunda    421 31
-				SE
-
-70-B3-D5   (hex)		Atman Tecnologia Ltda
-F90000-F90FFF     (base 16)		Atman Tecnologia Ltda
-				Avenida Adalberto Simão Nader
-				Vitória  Espírito Santo  29070-010
-				BR
-
-70-B3-D5   (hex)		Shenyang TECHE Technology Co.,Ltd
-47D000-47DFFF     (base 16)		Shenyang TECHE Technology Co.,Ltd
-				oom2302, Changfeng building, 26-2 Pangjiang street, Dadong District
-				Shenyang  Liaoning  110041
-				CN
-
-70-B3-D5   (hex)		Öresundskraft AB
-668000-668FFF     (base 16)		Öresundskraft AB
-				Västra Sandgatan 4
-				Helsingborg    25225
-				SE
-
-70-B3-D5   (hex)		Omsk Manufacturing Association named after A.S. Popov
-A61000-A61FFF     (base 16)		Omsk Manufacturing Association named after A.S. Popov
-				10 Let Oktyabrya str, 195
-				Omsk    644009
-				RU
-
-70-B3-D5   (hex)		DELITECH GROUP
-018000-018FFF     (base 16)		DELITECH GROUP
-				425 Rue du Trident
-				VENDARGUES    34740
-				FR
-
-70-B3-D5   (hex)		Larraioz Elektronika
-176000-176FFF     (base 16)		Larraioz Elektronika
-				FACT Larraioz, Ctra GI3162 km 2,2
-				Zarautz    20800
-				ES
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-7A4000-7A4FFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-F5D000-F5DFFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		Potter Electric Signal Co. LLC
-832000-832FFF     (base 16)		Potter Electric Signal Co. LLC
-				1609 Park 370 Place
-				Hazelwood  MO  63042
-				US
-
-70-B3-D5   (hex)		ICsec S.A.
-395000-395FFF     (base 16)		ICsec S.A.
-				Wichrowa 1A
-				Poznan    60-446
-				PL
-
-70-B3-D5   (hex)		SOtM
-CC7000-CC7FFF     (base 16)		SOtM
-				202 SSANGYONG-DONG 84/9 WOLBONG 4RO SEOBUK GU
-				Cheonan  Chungnam  31171
-				KR
-
-70-B3-D5   (hex)		MIJIENETRTECH CO.,LTD
-DCB000-DCBFFF     (base 16)		MIJIENETRTECH CO.,LTD
-				402, Ilshin Techno Valley,555, Dalseo-daero Dalseo-gu
-				Daegu    42709
-				KR
-
-70-B3-D5   (hex)		Mitech Integrated Systems Inc.
-C28000-C28FFF     (base 16)		Mitech Integrated Systems Inc.
-				219 Robert Hicks Dr
-				Toronto  ON  M2R3R3
-				CA
-
-70-B3-D5   (hex)		KMtronic ltd
-540000-540FFF     (base 16)		KMtronic ltd
-				Dobri Czintulov 28A str.
-				 Gorna Oryahovica  VT  5100
-				BG
-
-70-B3-D5   (hex)		Terratel Technology s.r.o.
-31A000-31AFFF     (base 16)		Terratel Technology s.r.o.
-				Dukelska 2192
-				Benesov  CZ  25601
-				CZ
-
-70-B3-D5   (hex)		Teledyne API
-F9D000-F9DFFF     (base 16)		Teledyne API
-				9970 Carroll Canyon Road
-				San Diego  CA  92131-1106
-				US
-
-70-B3-D5   (hex)		QIT Co., Ltd.
-81C000-81CFFF     (base 16)		QIT Co., Ltd.
-				#713, ACE Gwanggyo Tower1, 17, Daehak 4-ro, Yeongtong-gu
-				Suwon-si  Gyeonggi-do  16226
-				KR
-
-70-B3-D5   (hex)		Farmobile, LLC
-13F000-13FFFF     (base 16)		Farmobile, LLC
-				4001 West 114th Street  Suite 300
-				Leawood  KS  66211
-				US
-
-70-B3-D5   (hex)		PULOON Tech
-DB9000-DB9FFF     (base 16)		PULOON Tech
-				23-10, Hyoryeong-ro 60 gil, Seocho-gu, Seoul, korea
-				seoul    06721
-				KR
-
-70-B3-D5   (hex)		Polskie Sady Nowe Podole Sp. z o.o.
-C30000-C30FFF     (base 16)		Polskie Sady Nowe Podole Sp. z o.o.
-				Rzymowskiego 17/48
-				Warsaw  Mazowieckie  02-297
-				PL
-
-70-B3-D5   (hex)		Suzhou ZhiCai Co.,Ltd.
-E13000-E13FFF     (base 16)		Suzhou ZhiCai Co.,Ltd.
-				Room 1902,Block A,Global Fortune Plaza,88 Suhui Road,Suzhou Industrial Park
-				SuZhou  Jiangsu  215021
-				CN
-
-70-B3-D5   (hex)		Private
-4DA000-4DAFFF     (base 16)		Private
-
-70-B3-D5   (hex)		devAIs s.r.l.
-A16000-A16FFF     (base 16)		devAIs s.r.l.
-				Via Carlo Goldoni 1
-				Milano  Milano  20129
-				IT
-
-70-B3-D5   (hex)		Naval Group
-B27000-B27FFF     (base 16)		Naval Group
-				40-42 Rue Du Docteur Finlay
-				PARIS CEDEX 15    75732
-				FR
-
-70-B3-D5   (hex)		Shanghai Armour Technology Co., Ltd.
-8E5000-8E5FFF     (base 16)		Shanghai Armour Technology Co., Ltd.
-				Room 411, building 10, 471 Guiping Road, Xuhui District
-				 Shanghai   Shanghai  200233
-				CN
-
-70-B3-D5   (hex)		Hangzhou Weimu Technology Co.,Ltd.
-373000-373FFF     (base 16)		Hangzhou Weimu Technology Co.,Ltd.
-				3 / f, building 1, yongle village, cangqian street, yuhang district
-				Hangzhou  Zhejiang  310000
-				CN
-
-70-B3-D5   (hex)		Xirgo Technologies LLC
-CA0000-CA0FFF     (base 16)		Xirgo Technologies LLC
-				188 Camino Ruiz
-				Camarillo  CA  93012
-				US
-
-70-B3-D5   (hex)		Xirgo Technologies LLC
-CEB000-CEBFFF     (base 16)		Xirgo Technologies LLC
-				188 Camino Ruiz
-				Camarillo  CA  93012
-				US
-
-70-B3-D5   (hex)		GreenFlux
-A02000-A02FFF     (base 16)		GreenFlux
-				Mauritskade 63
-				Amsterdam    1092 AD
-				NL
-
-70-B3-D5   (hex)		Iylus Inc.
-02C000-02CFFF     (base 16)		Iylus Inc.
-				3100 Clarendon Blvd., Suite 200
-				Arlington  VA  22201
-				US
-
-70-B3-D5   (hex)		Coda Octopus Products Limited
-4D9000-4D9FFF     (base 16)		Coda Octopus Products Limited
-				38 S. Gyle Crescent, South Gyle Business Park
-				Edinburgh  Scotland  EH12 9EB
-				GB
-
-70-B3-D5   (hex)		Walter Müller AG
-0E4000-0E4FFF     (base 16)		Walter Müller AG
-				Russikerstrasse 37
-				Fehraltorf  Zürich  8320
-				CH
-
-70-B3-D5   (hex)		Sensoronic Co.,Ltd
-D52000-D52FFF     (base 16)		Sensoronic Co.,Ltd
-				1311ho, sambo techno tower, Jomaru-ro 385beongil,
-				Bucheon-si  Gyeonggi-do  14556
-				KR
-
-70-B3-D5   (hex)		COONTROL Tecnologia em Combustão LTDA EPP
-8E9000-8E9FFF     (base 16)		COONTROL Tecnologia em Combustão LTDA EPP
-				RUA ABRAHAN LINCOLS, 464, Jardim América
-				RIO DO SUL  SANTA CATARINA  89160202
-				BR
-
-70-B3-D5   (hex)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
-E42000-E42FFF     (base 16)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
-				No.2 Xinxiu Street, Hunnan District, Shenyang
-				Shenyang  Liaoning  110000
-				CN
-
-70-B3-D5   (hex)		Private
-278000-278FFF     (base 16)		Private
-				600 Atlantis Rd
-				Melbourne  FL  32904
-				US
-
-70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
-196000-196FFF     (base 16)		YUYAMA MFG Co.,Ltd
-				1-4-30
-				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
-				JP
-
-70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
-829000-829FFF     (base 16)		Guan Show Technologe Co., Ltd.
-				No.127, Jianguo 1st Rd., Lingya Dist.
-				 Kaohsiung City     802
-				TW
-
-70-B3-D5   (hex)		Thermokon Sensortechnik GmbH
-581000-581FFF     (base 16)		Thermokon Sensortechnik GmbH
-				Platanenweg 1
-				Mittenaar  Hessen  35756
-				DE
-
-70-B3-D5   (hex)		PoolDigital GmbH & Co. KG
-063000-063FFF     (base 16)		PoolDigital GmbH & Co. KG
-				Gablinger Weg 102
-				Augsburg    86156
-				DE
-
-70-B3-D5   (hex)		Loma Systems s.r.o.
-BC8000-BC8FFF     (base 16)		Loma Systems s.r.o.
-				Southwood
-				Farnborough  Hampshire  GU14 0NY
-				GB
-
-70-B3-D5   (hex)		MECT SRL
-2C5000-2C5FFF     (base 16)		MECT SRL
-				VIA E. FERMI 57/59
-				ALPIGNANO  string:TO  10091
-				IT
-
-70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
-71A000-71AFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-70-B3-D5   (hex)		EIZO RUGGED SOLUTIONS
-5B9000-5B9FFF     (base 16)		EIZO RUGGED SOLUTIONS
-				442 Northlake Blvd Suite 1008
-				Altamonte Springs  FL  32701
-				US
-
-70-B3-D5   (hex)		ISG Nordic AB
-DEF000-DEFFFF     (base 16)		ISG Nordic AB
-				Energigatan 9
-				KUNGSBACKA  Select State  SE-43437
-				SE
-
-70-B3-D5   (hex)		CTROGERS LLC
-474000-474FFF     (base 16)		CTROGERS LLC
-				815 1st Ave #174
-				Seattle  WA  98104
-				US
-
-70-B3-D5   (hex)		Deep Secure Limited
-DD0000-DD0FFF     (base 16)		Deep Secure Limited
-				1 Nimrod House, Sandys Road
-				Malvern  Worcestershire  WR14 1JJ
-				GB
-
-70-B3-D5   (hex)		Mi-Fi Networks Pvt Ltd
-411000-411FFF     (base 16)		Mi-Fi Networks Pvt Ltd
-				No 13 A, Kalakshetra Road , Thiruvanmiyur 
-				Chennai  Tamil Nadu  600041
-				IN
-
-70-B3-D5   (hex)		CesiumAstro Inc.
-E5F000-E5FFFF     (base 16)		CesiumAstro Inc.
-				13412 Galleria Circle, Suite H-100
-				Austin  TX  78738
-				US
-
-70-B3-D5   (hex)		Druck Ltd.
-EAA000-EAAFFF     (base 16)		Druck Ltd.
-				Firtree Lane, Groby, Leicester
-				Le6 0FH  England  
-				GB
-
-70-B3-D5   (hex)		Panoramic Power
-4ED000-4EDFFF     (base 16)		Panoramic Power
-				Atir Yeda 15
-				Kfar Saba    4464312
-				IL
-
-70-B3-D5   (hex)		STENTORIUS by ADI
-5B3000-5B3FFF     (base 16)		STENTORIUS by ADI
-				41 - 47 Rue des frères Lumière
-				Neuilly sur Marne  Ile-de-France  93330
-				FR
-
-70-B3-D5   (hex)		Codewerk GmbH
-4D0000-4D0FFF     (base 16)		Codewerk GmbH
-				Siemensallee 75
-				Karlsruhe    76187 
-				DE
-
-70-B3-D5   (hex)		Orlaco Products B.V.
-333000-333FFF     (base 16)		Orlaco Products B.V.
-				Albert Plesmanstraat 42
-				Barneveld    3772MN
-				NL
-
-70-B3-D5   (hex)		ScopeSensor Oy
-DF7000-DF7FFF     (base 16)		ScopeSensor Oy
-				Teollisuustie 1
-				Haukipudas    90830
-				FI
-
-70-B3-D5   (hex)		KBPR LLC
-11E000-11EFFF     (base 16)		KBPR LLC
-				Raketny bulvar street 16
-				Moscow  Select State  129164
-				RU
-
-70-B3-D5   (hex)		Anello Photonics
-96A000-96AFFF     (base 16)		Anello Photonics
-				3964 Rivermark Plaza, Suite 144
-				Santa Clara  CA  95054
-				US
-
-70-B3-D5   (hex)		HORIZON.INC
-F40000-F40FFF     (base 16)		HORIZON.INC
-				1600 Aza-Shironoshita Asahi
-				Shin Asahi-cho  Takashima, Shiga  520-1501
-				JP
-
-70-B3-D5   (hex)		SUS Corporation
-1ED000-1EDFFF     (base 16)		SUS Corporation
-				6F, S-patio Bldg. 14-25 Minami-cho, Suruga-ku,
-				Shizuoka city,  Shizuoka  422-8067
-				JP
-
-70-B3-D5   (hex)		Lumiplan Duhamel
-A0C000-A0CFFF     (base 16)		Lumiplan Duhamel
-				2 rue de l'industrie
-				Domène  Isère  38420
-				FR
-
-8C-1F-64   (hex)		Griffyn Robotech Private Limited
-4DD000-4DDFFF     (base 16)		Griffyn Robotech Private Limited
-				Shewale Center  B MIDC Pimpri Colony
-				Pimpri Chinchwad  Maharashtra  411019
-				IN
-
-8C-1F-64   (hex)		Suzhou Xingxiangyi Precision Manufacturing Co.,Ltd.
-000000-000FFF     (base 16)		Suzhou Xingxiangyi Precision Manufacturing Co.,Ltd.
-				Building 2, no.6, Lane 1, Wupu Road, Suzhou Industrial Park
-				Suzhou  Jiangsu  215000
-				CN
-
-8C-1F-64   (hex)		CPC (UK)
-391000-391FFF     (base 16)		CPC (UK)
-				Unit 3 Beta Way
-				Egham  Surrey  TW208RE
-				GB
-
-8C-1F-64   (hex)		NavSys Technology Inc.
-3C4000-3C4FFF     (base 16)		NavSys Technology Inc.
-				IT Mirea Tower #2003-1, 33, Digital-ro 9-gil
-				Geumcheon-gu  Seoul, Republic of Korea  08511
-				KR
-
-8C-1F-64   (hex)		SamabaNova Systems
-0A8000-0A8FFF     (base 16)		SamabaNova Systems
-				2100 Geng Rd #103
-				Palo Alto  CA  94303
-				US
-
-8C-1F-64   (hex)		Edgeware AB
-FD1000-FD1FFF     (base 16)		Edgeware AB
-				Master Samuelsgatan 42
-				Stockholm    11157
-				SE
-
-8C-1F-64   (hex)		Intamsys Technology Co.Ltd
-466000-466FFF     (base 16)		Intamsys Technology Co.Ltd
-				3/F, Building C9, No.3188 Xiupu Road Pudong New District,Shanghai
-				Shanghai    201315
-				CN
-
-8C-1F-64   (hex)		Power Electronics Espana, S.L.
-C2F000-C2FFFF     (base 16)		Power Electronics Espana, S.L.
-				C/ Leonardo Da Vinci, 24-26
-				Paterna  Valencia  46980
-				ES
-
-8C-1F-64   (hex)		Hikari Alphax Inc.
-166000-166FFF     (base 16)		Hikari Alphax Inc.
-				2-2-2, Nakanoshima, Kita-ku
-				Osaka  Osaka  530-0005
-				JP
-
-8C-1F-64   (hex)		Miracle Healthcare, Inc.
-EAC000-EACFFF     (base 16)		Miracle Healthcare, Inc.
-				130-2, Donghwagongdan-ro, Munmak-eup
-				Wonju-si  Gangwon-do  26365
-				KR
-
-8C-1F-64   (hex)		Ringtail Security
-A29000-A29FFF     (base 16)		Ringtail Security
-				Grand-Rue 75
-				Gland  VD  1196
-				CH
-
-70-B3-D5   (hex)		Tobi Tribe Inc.
-D68000-D68FFF     (base 16)		Tobi Tribe Inc.
-				45945 Trefoil Ln #157
-				 Sterling  VA  20166
-				US
-
-70-B3-D5   (hex)		Barracuda Measurement Solutions
-FFA000-FFAFFF     (base 16)		Barracuda Measurement Solutions
-				10701 Corporate Dr Suite 360
-				Stafford  TX  77477
-				US
-
-8C-1F-64   (hex)		ASAP Electronics GmbH
-9CF000-9CFFFF     (base 16)		ASAP Electronics GmbH
-				Sachsstraße 1A
-				Gaimersheim  Bayern  85080
-				DE
-
-8C-1F-64   (hex)		WINK Streaming
-372000-372FFF     (base 16)		WINK Streaming
-				3 Prados Del Convento
-				Escazu  SJ  10201
-				CR
-
-8C-1F-64   (hex)		Yu-Heng Electric Co., LTD 
-575000-575FFF     (base 16)		Yu-Heng Electric Co., LTD 
-				No 8 , Gongye 2nd Rd., Renwu Industry Park
-				Kaohsiung  Kaohsiung City  814
-				TW
-
-70-B3-D5   (hex)		Siemens Industry Software Inc.
-3FE000-3FEFFF     (base 16)		Siemens Industry Software Inc.
-				46871 Bayside Parkway
-				Fremont  CA  94538
-				US
-
-8C-1F-64   (hex)		OTMetric
-7A6000-7A6FFF     (base 16)		OTMetric
-				1 rue de La Haye
-				Tremblay en France    93290
-				FR
-
-8C-1F-64   (hex)		BRS Sistemas Eletrônicos
-2C8000-2C8FFF     (base 16)		BRS Sistemas Eletrônicos
-				Rua Gomes de Freitas, 491 / 204
-				Porto Alegre  RS  91380-000
-				BR
-
-8C-1F-64   (hex)		Syscom Instruments SA
-A4E000-A4EFFF     (base 16)		Syscom Instruments SA
-				industrie 21
-				Sainte-Croix    1450
-				CH
-
-8C-1F-64   (hex)		Caproc Oy
-D4A000-D4AFFF     (base 16)		Caproc Oy
-				Vintilänkatu 20
-				Lahti    15680
-				FI
-
-8C-1F-64   (hex)		KIB Energo LLC
-D3C000-D3CFFF     (base 16)		KIB Energo LLC
-				Moskovskoe ave. 9
-				Saint-Petersburg    196158
-				RU
-
-8C-1F-64   (hex)		Nonet Inc
-2A5000-2A5FFF     (base 16)		Nonet Inc
-				Daan Dist, Xinhai Road Section 1, No. 79, 5F
-				Taipei  Taipei  10647
-				TW
-
-8C-1F-64   (hex)		WBNet
-1E3000-1E3FFF     (base 16)		WBNet
-				Drielse Wetering 17
-				Kerkdriel  Gelderland  5331RK
-				NL
-
-8C-1F-64   (hex)		EVLO Stockage Énergie
-998000-998FFF     (base 16)		EVLO Stockage Énergie
-				1804 Boulevard Lionel-Boulet, Édifice Archimède
-				VARENNES  Quebec  J3X 1S1
-				CA
-
-8C-1F-64   (hex)		Landis+Gyr Equipamentos de Medição Ltda
-542000-542FFF     (base 16)		Landis+Gyr Equipamentos de Medição Ltda
-				Hasdrubal Bellegard, 400, CIC
-				Curitiba  Paraná  81460-120
-				BR
-
-8C-1F-64   (hex)		Xtend Technologies Pvt Ltd
-83C000-83CFFF     (base 16)		Xtend Technologies Pvt Ltd
-				Blue Hill, KP Lane, Ernakulam South
-				Kochi  Kerala  682016
-				IN
-
-8C-1F-64   (hex)		Franke Aquarotter GmbH
-DE1000-DE1FFF     (base 16)		Franke Aquarotter GmbH
-				Parkstraße 1-5
-				Ludwigsfelde    14974
-				DE
-
-8C-1F-64   (hex)		U -MEI-DAH INT'L ENTERPRISE CO.,LTD.
-4B0000-4B0FFF     (base 16)		U -MEI-DAH INT'L ENTERPRISE CO.,LTD.
-				11F., No. 365, Fude 3rd Rd., Xizhi Dist., New Taipei City 221011 , Taiwan (R.O.C.)
-				New Taipei City    221011
-				TW
-
-8C-1F-64   (hex)		NodeUDesign
-11F000-11FFFF     (base 16)		NodeUDesign
-				7295 Flyhawk ln
-				Sauk City  WI  53583
-				US
-
-70-B3-D5   (hex)		Decentlab GmbH
-7BA000-7BAFFF     (base 16)		Decentlab GmbH
-				Kriesbachstrasse 30
-				Dübendorf    8600
-				CH
-
-8C-1F-64   (hex)		Private
-4DB000-4DBFFF     (base 16)		Private
-
-8C-1F-64   (hex)		MERKLE Schweissanlagen-Technik GmbH
-C7C000-C7CFFF     (base 16)		MERKLE Schweissanlagen-Technik GmbH
-				Industriestraße 3
-				Kötz     89359
-				DE
-
-70-B3-D5   (hex)		Guardian Controls International Ltd
-016000-016FFF     (base 16)		Guardian Controls International Ltd
-				 The Dairy, Spring Bank Farm
-				Arclid  Cheshire  CW11 2UD
-				GB
-
-8C-1F-64   (hex)		Scenario Automation
-AEF000-AEFFFF     (base 16)		Scenario Automation
-				Rua Paulo Elias, 216
-				São Carlos  São Paulo  13564400
-				BR
-
-8C-1F-64   (hex)		Solid Invent Ltda.
-1C2000-1C2FFF     (base 16)		Solid Invent Ltda.
-				Buarque de Macedo, 267
-				Porto Alegre  Rio Grande do Sul  90230250
-				BR
-
-8C-1F-64   (hex)		Digilens
-227000-227FFF     (base 16)		Digilens
-				1276 Hammerwood Ave
-				Sunnyvale  CA  94089
-				US
-
-8C-1F-64   (hex)		ASTRACOM Co. Ltd
-75F000-75FFFF     (base 16)		ASTRACOM Co. Ltd
-				Shpalernaya st, 24A
-				Saint-Peterburg    191123
-				RU
-
-8C-1F-64   (hex)		BOZHON Precision Industry Technology Co.,Ltd
-8AC000-8ACFFF     (base 16)		BOZHON Precision Industry Technology Co.,Ltd
-				No.666 Huxin west Road, Wujiang District, Suzhou city
-				Suzhou    215200
-				CN
-
-8C-1F-64   (hex)		Ashton Bentley Collaboration Spaces
-8B5000-8B5FFF     (base 16)		Ashton Bentley Collaboration Spaces
-				23 Schooner Court
-				Dartford  Kent  DA2 6NW
-				GB
-
-8C-1F-64   (hex)		Davetech Limited
-DAA000-DAAFFF     (base 16)		Davetech Limited
-				Centenary House
-				Brighton    BN16QR
-				GB
-
-8C-1F-64   (hex)		IVOR Intelligent Electrical Appliance Co., Ltd
-92D000-92DFFF     (base 16)		IVOR Intelligent Electrical Appliance Co., Ltd
-				Floor 3, Building 67, Shidongxia Road, Chancheng
-				Foshan  Guangdong  528000
-				CN
-
-8C-1F-64   (hex)		USM Pty Ltd
-CD6000-CD6FFF     (base 16)		USM Pty Ltd
-				29/90 Frances Bay Drive
-				Darwin  Northern Territory  0820
-				AU
-
-8C-1F-64   (hex)		Circa Enterprises Inc
-CBE000-CBEFFF     (base 16)		Circa Enterprises Inc
-				2256 29 Street Northeast #10
-				Calgary  Alberta  T1Y7G4
-				CA
-
-8C-1F-64   (hex)		OvercomTech
-70E000-70EFFF     (base 16)		OvercomTech
-				#1003, Byucksan Digital Valley 2-cha, 184, Gasan digital 2-ro, Geumcheon-gu
-				Seoul    08501
-				KR
-
-8C-1F-64   (hex)		Forever Engineering Systems Pvt. Ltd.
-8AA000-8AAFFF     (base 16)		Forever Engineering Systems Pvt. Ltd.
-				B-817, 8th floor, Advant Navis Business Park, Sector-142
-				NOIDA  Uttar Pradesh  201301
-				IN
-
-8C-1F-64   (hex)		Velvac Incorporated
-53F000-53FFFF     (base 16)		Velvac Incorporated
-				2405 S. Calhoun Road
-				New Berlin  WI  53151-2709
-				US
-
-8C-1F-64   (hex)		LG-LHT Aircraft Solutions GmbH
-E21000-E21FFF     (base 16)		LG-LHT Aircraft Solutions GmbH
-				Hindenburgstrasse 162
-				Hamburg    22297
-				DE
-
-8C-1F-64   (hex)		Future wave ultra tech Company 
-A94000-A94FFF     (base 16)		Future wave ultra tech Company 
-				Number 8 , Barmak street,Arjantin Square
-				Tehran  Tehran   1516634114
-				IR
-
-8C-1F-64   (hex)		TAKASAKI KYODO COMPUTING CENTER Co.,LTD.
-7DD000-7DDFFF     (base 16)		TAKASAKI KYODO COMPUTING CENTER Co.,LTD.
-				936-20,Shimonojo-Machi
-				Takasaki-City  Gunma  370-0854
-				JP
-
-8C-1F-64   (hex)		IoTSecure, LLC
-F04000-F04FFF     (base 16)		IoTSecure, LLC
-				2180 Satellite Boulevard, Suite 400
-				Duluth  GA  30097
-				US
-
-8C-1F-64   (hex)		ACOD
-56D000-56DFFF     (base 16)		ACOD
-				Varshavskoye shosse, 125
-				Moscow  Moscow  117587
-				RU
-
-8C-1F-64   (hex)		GIORDANO CONTROLS SPA
-C0C000-C0CFFF     (base 16)		GIORDANO CONTROLS SPA
-				VIA PARALLELA 2/4
-				VILLA BARTOLOMEA  IT  37049
-				IT
-
-8C-1F-64   (hex)		Feritech Ltd.
-6B3000-6B3FFF     (base 16)		Feritech Ltd.
-				Trelan Business Centre, Menerdue Lane
-				Redruth  Non-U.S. resident  TR16 6PD
-				GB
-
-8C-1F-64   (hex)		Surge Networks, Inc.
-472000-472FFF     (base 16)		Surge Networks, Inc.
-				2035 Sunset Lake Road, Suite B-2
-				Newark  DE  19702
-				US
-
-8C-1F-64   (hex)		Critical Software SA
-D52000-D52FFF     (base 16)		Critical Software SA
-				Parque Industrial de Taveiro, Lote 49
-				Coimbra  504208187  3045-504
-				PT
-
-8C-1F-64   (hex)		RealD, Inc.
-B3D000-B3DFFF     (base 16)		RealD, Inc.
-				9777 Wilshire Boulevard, Ste 430
-				 Beverly Hills  CA  90212
-				US
-
-8C-1F-64   (hex)		Elsist Srl
-6F4000-6F4FFF     (base 16)		Elsist Srl
-				Via G. Brodolini, 15
-				Casale Monf.to  Alessandria  15033
-				IT
-
-8C-1F-64   (hex)		Picocom Technology Ltd 
-B4C000-B4CFFF     (base 16)		Picocom Technology Ltd 
-				DeskLodge House, Redcliffe Way
-				Bristol    BS1 6NL
-				GB
-
-70-B3-D5   (hex)		Clear Flow by Antiference
-1CE000-1CEFFF     (base 16)		Clear Flow by Antiference
-				Unit 2 Common Lane Fradley Park
-				Lichfield  Staffordshire  WS13 8NQ
-				GB
-
-8C-1F-64   (hex)		elbit systems - EW and sigint - Elisra
-FCD000-FCDFFF     (base 16)		elbit systems - EW and sigint - Elisra
-				29 hamerkava st
-				Holon    5885118
-				IL
-
-8C-1F-64   (hex)		Tornado Spectral Systems Inc.
-C28000-C28FFF     (base 16)		Tornado Spectral Systems Inc.
-				5155 Spectrum Way, Unit 6
-				Mississauga  ON  L4W 5A1
-				CA
-
-8C-1F-64   (hex)		Automata GmbH & Co. KG
-118000-118FFF     (base 16)		Automata GmbH & Co. KG
-				Gewerbering 5
-				Ried  Bavaria  86510
-				DE
-
-8C-1F-64   (hex)		navXperience GmbH
-774000-774FFF     (base 16)		navXperience GmbH
-				Querweg 20
-				Berlin    13591
-				DE
-
-8C-1F-64   (hex)		HANATEKSYSTEM
-55E000-55EFFF     (base 16)		HANATEKSYSTEM
-				D-1412 gwangmyeong techno park
-				gwangmyeong-si  gyeonggi-do  14322
-				KR
-
-8C-1F-64   (hex)		Signatrol Ltd
-0B8000-0B8FFF     (base 16)		Signatrol Ltd
-				Unit E2, Green Lane Business Park,
-				Tewkesbury  Gloucestershire  GL20 8SJ
-				GB
-
-8C-1F-64   (hex)		S.E.I. CO.,LTD.
-655000-655FFF     (base 16)		S.E.I. CO.,LTD.
-				59 Nirayama Tada
-				Izunokuni  Shizuoka  4102133
-				JP
-
-8C-1F-64   (hex)		DORLET SAU
-72A000-72AFFF     (base 16)		DORLET SAU
-				Albert Eistein 34
-				Alava  SPAIN  01510
-				ES
-
-8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
-09F000-09FFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
-				Winnettener Straße 6
-				Dinkelsbuehl  Bavaria  91550
-				DE
-
-8C-1F-64   (hex)		Arcvideo
-B56000-B56FFF     (base 16)		Arcvideo
-				16F, Building E, Tiantang Software Park, No3. Xidou
-				hangzhou  zhejiang  310012
-				CN
-
-8C-1F-64   (hex)		Signasystems Elektronik San. ve Tic. Ltd. Sti.
-A9A000-A9AFFF     (base 16)		Signasystems Elektronik San. ve Tic. Ltd. Sti.
-				Baskent OSB. 26. Cad. No:5 Malikoy
-				Ankara  Sincan  06909
-				TR
-
-8C-1F-64   (hex)		TIAMA
-820000-820FFF     (base 16)		TIAMA
-				ZA des Plattes - 1 Chemin des Plattes
-				VOURLES     69390 
-				FR
-
-8C-1F-64   (hex)		AVD INNOVATION LIMITED
-0D6000-0D6FFF     (base 16)		AVD INNOVATION LIMITED
-				TuenMun
-				HongKong  HongKong  999077
-				CN
-
-8C-1F-64   (hex)		Lightworks GmbH
-61F000-61FFFF     (base 16)		Lightworks GmbH
-				Bahnhofplatz 2
-				Holzkirchen  Germany  83607
-				DE
-
-8C-1F-64   (hex)		Ossia Inc
-1BF000-1BFFFF     (base 16)		Ossia Inc
-				2683 151st Place NE
-				Redmond  WA  98052
-				US
-
-8C-1F-64   (hex)		Pigs Can Fly Labs LLC
-DC0000-DC0FFF     (base 16)		Pigs Can Fly Labs LLC
-				9450 SW Gemini Dr, PMB 41687
-				Beaverton  OR  97008
-				US
-
-8C-1F-64   (hex)		United States Technologies Inc.
-525000-525FFF     (base 16)		United States Technologies Inc.
-				1701 Pollitt Drive
-				Fair Lawn  NJ  07410
-				US
-
-8C-1F-64   (hex)		EMBSYS SISTEMAS EMBARCADOS
-FD4000-FD4FFF     (base 16)		EMBSYS SISTEMAS EMBARCADOS
-				AV. SIGISMUNDO NUNES DE OLIVEIRA,570 CASA 324
-				MARILIA  SAO PAULO  17512752
-				BR
-
-8C-1F-64   (hex)		Cardinal Scales Manufacturing Co
-DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
-				203 East Daugherty Street
-				Webb City  MO  64870
-				US
-
-8C-1F-64   (hex)		PuS GmbH und Co. KG
-4E0000-4E0FFF     (base 16)		PuS GmbH und Co. KG
-				Hainstr. 13
-				Gera  Germany  07545
-				DE
-
-8C-1F-64   (hex)		EA Elektroautomatik GmbH & Co. KG
-504000-504FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
-				Helmholtzstraße 31-33
-				Viersen  NRW  41747
-				DE
-
-8C-1F-64   (hex)		Rumble, Inc
-837000-837FFF     (base 16)		Rumble, Inc
-				Bluebonnet Ln
-				Austin  TX  78704
-				US
-
-8C-1F-64   (hex)		Cinetix Srl
-89E000-89EFFF     (base 16)		Cinetix Srl
-				Via Armentera, 8
-				Borgo Valsugana  Trento  38051
-				IT
-
-8C-1F-64   (hex)		Mitsubishi Electric India Pvt. Ltd.
-D92000-D92FFF     (base 16)		Mitsubishi Electric India Pvt. Ltd.
-				EL3, J BLOCK, M.I.D.C. Bhosari
-				PUNE  Maharastra  411027
-				IN
-
-8C-1F-64   (hex)		ATM SOLUTIONS
-9BD000-9BDFFF     (base 16)		ATM SOLUTIONS
-				Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine
-				Navi Mumbai  Maharashatra  400709
-				IN
-
-8C-1F-64   (hex)		Integer.pl S.A.
-A97000-A97FFF     (base 16)		Integer.pl S.A.
-				Wielicka 28
-				Krakow    30-552
-				PL
-
-8C-1F-64   (hex)		Monnit Corporation
-94E000-94EFFF     (base 16)		Monnit Corporation
-				450 South Simmons STE 670
-				Kaysville  UT  84037
-				US
-
-8C-1F-64   (hex)		SASYS e.K.
-1CB000-1CBFFF     (base 16)		SASYS e.K.
-				Spannstiftstr. 16
-				Hagen    58119
-				DE
-
-8C-1F-64   (hex)		SCIREQ Scientific Respiratory Equipment  Inc
-01E000-01EFFF     (base 16)		SCIREQ Scientific Respiratory Equipment  Inc
-				6600 rue St. Urbain, Suite 300
-				Montreal  Quebec  H2S 3G8
-				CA
-
-8C-1F-64   (hex)		Beijing Wenrise Technology Co., Ltd.
-A84000-A84FFF     (base 16)		Beijing Wenrise Technology Co., Ltd.
-				No.10 Shangdi Road, Haidian District
-				Beijing  Beijing  100085
-				CN
-
-8C-1F-64   (hex)		XSENSOR Technology Corp.
-7AA000-7AAFFF     (base 16)		XSENSOR Technology Corp.
-				133 12 Ave SE
-				Calgary  Alberta  T2G 0Z9
-				CA
-
-8C-1F-64   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
-F4E000-F4EFFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
-				Felix-Wankel-Str. 13
-				Zaberfeld  Baden-Württemberg  74374
-				DE
-
-8C-1F-64   (hex)		MG s.r.l.
-67A000-67AFFF     (base 16)		MG s.r.l.
-				via Monte Bianco, 1
-				Solbiate Olona  VA  21058
-				IT
-
-8C-1F-64   (hex)		AMF Medical SA
-F52000-F52FFF     (base 16)		AMF Medical SA
-				Chemin de la Dent-d'Oche 1 A
-				Ecublens VD  Vaud  1024 
-				CH
-
-8C-1F-64   (hex)		Qualitrol LLC
-905000-905FFF     (base 16)		Qualitrol LLC
-				1385 Fairport Rd
-				Fairport  NY  14450
-				US
-
-8C-1F-64   (hex)		HUPI
-489000-489FFF     (base 16)		HUPI
-				45 allée théodore monod
-				Bidart  Sélectionnez un département / état  64210
-				FR
-
-8C-1F-64   (hex)		TTC TELEKOMUNIKACE, s.r.o.
-E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
-				Trebohosticka 5
-				Praha 10  Praha  10000
-				CZ
-
-70-B3-D5   (hex)		Root Automation
-6A2000-6A2FFF     (base 16)		Root Automation
-				112 4 H Way
-				Yreka  CA  96097
-				US
-
-8C-1F-64   (hex)		WINTUS SYSTEM
-9BA000-9BAFFF     (base 16)		WINTUS SYSTEM
-				E1102, 7 yeonmujang 5ga gil, seongdong-gu
-				SEOUL  SEOUL  04782 
-				KR
-
-8C-1F-64   (hex)		eumig industrie-TV GmbH.
-5B3000-5B3FFF     (base 16)		eumig industrie-TV GmbH.
-				Gewerbeparkstrasse 9
-				Anif  Salzburg  5081
-				AT
-
-8C-1F-64   (hex)		Proterra, Inc
-552000-552FFF     (base 16)		Proterra, Inc
-				1 Whitlee Court
-				Greenville  SC  29607
-				US
-
-8C-1F-64   (hex)		TeraDiode / Panasonic
-2C3000-2C3FFF     (base 16)		TeraDiode / Panasonic
-				30 Upton Dr
-				Wilmington  MA  01887
-				US
-
-8C-1F-64   (hex)		QUERCUS TECHNOLOGIES, S.L.
-D7C000-D7CFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
-				Av. Onze de Setembre 19
-				Reus  Tarragona  43203
-				ES
-
-8C-1F-64   (hex)		SPIT Technology, Inc
-939000-939FFF     (base 16)		SPIT Technology, Inc
-				2F, 91-1, Gyeongui-ro
-				Uijeongbu-si  Gyonggi-do  11652
-				KR
-
-8C-1F-64   (hex)		M/S MILIND RAMACHANDRA RAJWADE
-721000-721FFF     (base 16)		M/S MILIND RAMACHANDRA RAJWADE
-				713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru
-				Pune  Maharashtra  411051
-				IN
-
-8C-1F-64   (hex)		JW Froehlich Maschinenfabrik GmbH
-C8F000-C8FFFF     (base 16)		JW Froehlich Maschinenfabrik GmbH
-				Kohlhammerstrasse 18-24
-				Leinfelden-Echterdingen    70771
-				DE
-
-8C-1F-64   (hex)		VECOS Europe B.V.
-C80000-C80FFF     (base 16)		VECOS Europe B.V.
-				ESP 237
-				Eindhoven  Noord-Brabant  5633 AD
-				NL
-
-8C-1F-64   (hex)		EMIT GmbH
-3D1000-3D1FFF     (base 16)		EMIT GmbH
-				Johannes-Mauthe-Straße 14
-				Albstadt  Baden Württemberg  72458
-				DE
-
-8C-1F-64   (hex)		Power Electronics Espana, S.L.
-D08000-D08FFF     (base 16)		Power Electronics Espana, S.L.
-				Poligono Industrial Carrases. Ronda del camp d Aviacio 4
-				Lliria  Valencia  46160
-				ES
-
-8C-1F-64   (hex)		Mediana
-C6B000-C6BFFF     (base 16)		Mediana
-				Wonju Medical Industry Park, 1650-1 Donghwa-Ri,
-				Wonju-Si  Gangwon-Do  220-801
-				KR
-
-8C-1F-64   (hex)		noah
-B01000-B01FFF     (base 16)		noah
-				Augustusplatz 1-4
-				Leipzig    04109
-				DE
-
-8C-1F-64   (hex)		eumig industrie-TV GmbH.
-426000-426FFF     (base 16)		eumig industrie-TV GmbH.
-				Gewerbeparkstrasse 9
-				Anif  Salzburg  5081
-				AT
-
-8C-1F-64   (hex)		Hamamatsu Photonics K.K.
-67F000-67FFFF     (base 16)		Hamamatsu Photonics K.K.
-				314-5 Shimokanzo
-				Iwata  Shizuoka  4380193
-				JP
-
-8C-1F-64   (hex)		Telemetrics Inc.
-5E5000-5E5FFF     (base 16)		Telemetrics Inc.
-				75 Commerce Dr
-				Allendale    07401
-				US
-
-8C-1F-64   (hex)		Nokeval Oy
-E0E000-E0EFFF     (base 16)		Nokeval Oy
-				Rounionkatu 107
-				Nokia    37150
-				FI
-
-8C-1F-64   (hex)		NextT Microwave Inc
-8C5000-8C5FFF     (base 16)		NextT Microwave Inc
-				121 Hymus Boulevard
-				Pointe-Claire  Quebec  H9R 1E6
-				CA
-
-8C-1F-64   (hex)		  Fuzhou Tucsen Photonics Co.,Ltd
-45D000-45DFFF     (base 16)		  Fuzhou Tucsen Photonics Co.,Ltd
-				5# Wanwushe Smart Industrial Park , No.2 Yangqi Branch Rd, Gaishan Town, Cangshan Area, Fuzhou, Fujian,PRC
-				fuzhou    350008
-				CN
-
-8C-1F-64   (hex)		TEKVOX, Inc
-197000-197FFF     (base 16)		TEKVOX, Inc
-				1965 Post Rd, Suite 400
-				New Braunfels  TX  78130
-				US
-
-8C-1F-64   (hex)		ACSL Ltd.
-A2D000-A2DFFF     (base 16)		ACSL Ltd.
-				3-6-4 Rinkaicho
-				Edogawa-ku  Tokyo  134-0086
-				JP
-
-8C-1F-64   (hex)		Private
-EE0000-EE0FFF     (base 16)		Private
-
-8C-1F-64   (hex)		Agar Corporation Inc.
-301000-301FFF     (base 16)		Agar Corporation Inc.
-				5150 Tacoma Dr
-				Houston  TX  77041
-				US
-
-8C-1F-64   (hex)		Sensus Healthcare
-746000-746FFF     (base 16)		Sensus Healthcare
-				851 Broken Sound Parkway NW, Suite 215
-				Boca Raton  FL  33487
-				US
-
-8C-1F-64   (hex)		Nuvation Energy
-DFE000-DFEFFF     (base 16)		Nuvation Energy
-				40 Bathurst Drive
-				Waterloo  Ontario  N2V 1V6
-				CA
+OUI                                                         Organization                                 
+OUI-36/MA-S Range                                           Organization                                 
+                                                            Address                                      
+
+70-B3-D5   (hex)		TELEPLATFORMS
+F2F000-F2FFFF     (base 16)		TELEPLATFORMS
+				Polbina st., 3/1
+				Moscow    109388
+				RU
+
+70-B3-D5   (hex)		2M Technology
+719000-719FFF     (base 16)		2M Technology
+				802 Greenview Drive 
+				Grand Prairie  TX  75050
+				US
+
+70-B3-D5   (hex)		Truecom Telesoft Private Limited
+9FC000-9FCFFF     (base 16)		Truecom Telesoft Private Limited
+				2nd Floor, Block N, Safal Mondeal Retail Park, S.G Highway, Bodakdev
+				Ahmedabad  Gujarat  380056
+				IN
+
+70-B3-D5   (hex)		DSILOG
+577000-577FFF     (base 16)		DSILOG
+				104 rue Marcel Pagnol
+				Voreppe    38340
+				FR
+
+70-B3-D5   (hex)		Radikal d.o.o.
+56F000-56FFFF     (base 16)		Radikal d.o.o.
+				J. Mise 8
+				Sesvete  Sesvete  10360
+				HR
+
+70-B3-D5   (hex)		OSAKI DATATECH CO., LTD.
+A0F000-A0FFFF     (base 16)		OSAKI DATATECH CO., LTD.
+				2-1-10 Higashi-Gotanda Shinagawa-ku
+				Tokyo    141-0022
+				JP
+
+70-B3-D5   (hex)		Ochno AB
+03A000-03AFFF     (base 16)		Ochno AB
+				c/o Westras, Kopparbergsv 6
+				Västerås    72213
+				SE
+
+70-B3-D5   (hex)		Sanwa New Tec Co.,Ltd
+155000-155FFF     (base 16)		Sanwa New Tec Co.,Ltd
+				6536 Honjyou
+				Kunitomi-cho Higashimorokata-gun   Miyazaki  880-1101
+				JP
+
+70-B3-D5   (hex)		VECTOR.CO.,LTD.
+D33000-D33FFF     (base 16)		VECTOR.CO.,LTD.
+				2-12-16 Ekiminami
+				Kosai  Shizuoka  431-0427
+				JP
+
+70-B3-D5   (hex)		Acrodea, Inc.
+6A4000-6A4FFF     (base 16)		Acrodea, Inc.
+				3F, Daisan Yamada Bldg., 22 Aizumi-cho
+				Shinjuku-ku  Tokyo  1600005
+				JP
+
+70-B3-D5   (hex)		ООО РОНЕКС
+F3E000-F3EFFF     (base 16)		ООО РОНЕКС
+				Автомобильный проезд, д. 10, стр. 4, пом. 201
+				Москва  Россия, Московская область  109052
+				RU
+
+70-B3-D5   (hex)		Clearly IP Inc
+9B0000-9B0FFF     (base 16)		Clearly IP Inc
+				2416 Industrial Dr Unit F
+				Neenah  WI  54956
+				US
+
+70-B3-D5   (hex)		BARCO, s.r.o.
+62F000-62FFFF     (base 16)		BARCO, s.r.o.
+				Hradistska 849
+				Buchlovice    68708
+				CZ
+
+70-B3-D5   (hex)		BRS Sistemas Eletrônicos
+356000-356FFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491 / 204
+				Porto Alegre  RS  91380-000
+				BR
+
+70-B3-D5   (hex)		VITEC
+D61000-D61FFF     (base 16)		VITEC
+				99 rue pierre sémard
+				Chatillon  France  92320
+				FR
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+A34000-A34FFF     (base 16)		RCH ITALIA SPA 
+				VIA CENDON 39
+				SILEA   TREVISO   31057
+				IT
+
+70-B3-D5   (hex)		Wagner Group GmbH
+59A000-59AFFF     (base 16)		Wagner Group GmbH
+				Schleswigstrasse 1-5
+				Langenhagen    30853
+				DE
+
+70-B3-D5   (hex)		FX TECHNOLOGY LIMITED
+FCE000-FCEFFF     (base 16)		FX TECHNOLOGY LIMITED
+				38a High Street, Northwood
+				Middlesex  -  HA6 1BN
+				GB
+
+70-B3-D5   (hex)		CT Company
+667000-667FFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+70-B3-D5   (hex)		Zhejiang Zhaolong Interconnect Technology Co.,Ltd
+A68000-A68FFF     (base 16)		Zhejiang Zhaolong Interconnect Technology Co.,Ltd
+				Shilin Industrial Zone,Xinshi, Deqing,Zhejiang,China
+				Deqing  Zhejiang  313200
+				CN
+
+70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
+C7A000-C7AFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
+				78-2 Buncheon-ri, Bongdam-eup
+				Hwaseong-city  Gyungki-do  445-894
+				KR
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+1FC000-1FCFFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		LLC NPO Svyazkomplektservis
+588000-588FFF     (base 16)		LLC NPO Svyazkomplektservis
+				Bronnitskaya str., 3
+				Podolsk    Moscow region  142103
+				RU
+
+70-B3-D5   (hex)		Equos Research Co., Ltd
+34D000-34DFFF     (base 16)		Equos Research Co., Ltd
+				Akihabara Daibiru 7F, 1-18-13 Sotokanda
+				Chiyoda-ku  Tokyo  101-0021
+				JP
+
+70-B3-D5   (hex)		Aetina Corporation
+171000-171FFF     (base 16)		Aetina Corporation
+				2F-1, No.237, Sec.1, Datong Rd., Xizhi Dist.,
+				New Taipei City   No State  221
+				TW
+
+70-B3-D5   (hex)		ECOINET
+420000-420FFF     (base 16)		ECOINET
+				519, 2 Gasandigital 1ro, Geumcheon-gu
+				seoul    08591
+				KR
+
+70-B3-D5   (hex)		Southern Ground Audio LLC
+CD4000-CD4FFF     (base 16)		Southern Ground Audio LLC
+				101 Gardner Park
+				Peachtree City  GA  30269
+				US
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+13A000-13AFFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach    51465
+				DE
+
+70-B3-D5   (hex)		Hermann Automation GmbH
+B2F000-B2FFFF     (base 16)		Hermann Automation GmbH
+				Erlenwiese 15
+				Mengerskirchen  Hessen  D-35794
+				DE
+
+70-B3-D5   (hex)		Worldsensing
+2C7000-2C7FFF     (base 16)		Worldsensing
+				Carrer Viriat 47, Edificio Numancia 1 7th floor
+				Barcelona  - Please Choose -  08014
+				ES
+
+70-B3-D5   (hex)		BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Ş.
+258000-258FFF     (base 16)		BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Ş.
+				Kimya Sanayicileri Org. San. Bolgesi Organik Cad. No:31
+				Istanbul  Tuzla   34956
+				TR
+
+70-B3-D5   (hex)		wtec GmbH
+ABD000-ABDFFF     (base 16)		wtec GmbH
+				Dornbachstrasse 1a
+				Bad Homburg    61352
+				DE
+
+70-B3-D5   (hex)		DAO QIN TECHNOLOGY CO.LTD.
+3BD000-3BDFFF     (base 16)		DAO QIN TECHNOLOGY CO.LTD.
+				No. 359, Zhongxiao Rd
+				Chishang Township  Taitung County  958
+				TW
+
+70-B3-D5   (hex)		Ascon Tecnologic S.r.l.
+57E000-57EFFF     (base 16)		Ascon Tecnologic S.r.l.
+				via Indipendenza, 56
+				Vigevano  PV  27029
+				IT
+
+70-B3-D5   (hex)		Private
+2D7000-2D7FFF     (base 16)		Private
+
+70-B3-D5   (hex)		Idneo Technologies S.A.U.
+CF8000-CF8FFF     (base 16)		Idneo Technologies S.A.U.
+				Gran Via Carlos III , 98 Planta 5
+				Barcelona  Barcelona  08028
+				ES
+
+70-B3-D5   (hex)		Arevita
+5E1000-5E1FFF     (base 16)		Arevita
+				Baltu ave 145
+				Kaunas  Select  47125
+				LT
+
+70-B3-D5   (hex)		Virsae Group Ltd
+151000-151FFF     (base 16)		Virsae Group Ltd
+				B:HIVE, 74 Taharoto Road, Smales Farm
+				Takapuna  Auckland  0622
+				NZ
+
+70-B3-D5   (hex)		Automata GmbH & Co. KG
+1F9000-1F9FFF     (base 16)		Automata GmbH & Co. KG
+				Gewerbering 5
+				Ried  Bavaria  86510
+				DE
+
+70-B3-D5   (hex)		AMEDTEC Medizintechnik Aue GmbH
+50A000-50AFFF     (base 16)		AMEDTEC Medizintechnik Aue GmbH
+				Schneeberger Str. 5
+				Aue    08280
+				DE
+
+70-B3-D5   (hex)		OCEANCCTV LTD
+FD5000-FD5FFF     (base 16)		OCEANCCTV LTD
+				4F., No. 1, Ln. 297, Xinyi Rd.,Banqiao Dist.,
+				New Taipei City    220
+				TW
+
+70-B3-D5   (hex)		Blake UK
+9DA000-9DAFFF     (base 16)		Blake UK
+				177-187, Rutland Road
+				Sheffield  --select--  S3 9PT
+				GB
+
+70-B3-D5   (hex)		Angora Networks
+822000-822FFF     (base 16)		Angora Networks
+				Alacaatli Mah. Park Cad 47/31, Cayyolu
+				Ankara    06810
+				TR
+
+70-B3-D5   (hex)		Clever Devices
+A2B000-A2BFFF     (base 16)		Clever Devices
+				300 Crossways Park Dr
+				Woodbury  NY  11797
+				US
+
+70-B3-D5   (hex)		Sikom AS
+237000-237FFF     (base 16)		Sikom AS
+				Neptunvegen 6
+				Verdal    7652
+				NO
+
+70-B3-D5   (hex)		MIRAE INFORMATION TECHNOLOGY CO., LTD.
+056000-056FFF     (base 16)		MIRAE INFORMATION TECHNOLOGY CO., LTD.
+				GYEONGGI-DO
+				SEONGNAM-SI  JUNGWON-GU  13376
+				KR
+
+70-B3-D5   (hex)		Invent Vision - iVision Sistemas de Imagem e Visão S.A.
+E29000-E29FFF     (base 16)		Invent Vision - iVision Sistemas de Imagem e Visão S.A.
+				R. Prof. José Vieira de Mendonça, 770, 2° andar - BHTEC, Parque Tecnológico de Belo Horizonte
+				Belo Horizonte  Minas Gerais  31310-260
+				BR
+
+70-B3-D5   (hex)		COSMOIT.CO.LTD
+754000-754FFF     (base 16)		COSMOIT.CO.LTD
+				14Fl., Ace Twin Tower II, 273, Digital-ro, Guro-gu
+				Seoul    08381
+				KR
+
+70-B3-D5   (hex)		Sicon srl
+BEE000-BEEFFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Sanmina Israel
+66D000-66DFFF     (base 16)		Sanmina Israel
+				Koren Industrial Zone , POBox 102
+				Maalot  Israel  2101002
+				IL
+
+70-B3-D5   (hex)		XANTIA SA
+33F000-33FFFF     (base 16)		XANTIA SA
+				Chemin du Longchamps 99
+				Bienne    2504
+				CH
+
+70-B3-D5   (hex)		Acutronic Link Robotics AG
+21A000-21AFFF     (base 16)		Acutronic Link Robotics AG
+				Calle Venta de la Estrella, 6 Pab. 130
+				VITORIA-GASTEIZ  ALAVA  01003
+				ES
+
+70-B3-D5   (hex)		Xiamen Beogold Technology Co. Ltd.
+490000-490FFF     (base 16)		Xiamen Beogold Technology Co. Ltd.
+				 11F Amoy Institute of Technovation,Jimei District
+				Xiamen  Fujian  361021
+				CN
+
+70-B3-D5   (hex)		Benetel
+E15000-E15FFF     (base 16)		Benetel
+				Guinness Enterprise Centre, Taylors Lane,
+				Dublin    D08 XV25
+				IE
+
+70-B3-D5   (hex)		Zaxcom Inc
+9CC000-9CCFFF     (base 16)		Zaxcom Inc
+				230 West Parkway STE 9
+				Pompton Plains  NJ  07444
+				US
+
+70-B3-D5   (hex)		RADAR
+CB1000-CB1FFF     (base 16)		RADAR
+				547 W 27th St.
+				NEW YORK  NY  10001-5670
+				US
+
+70-B3-D5   (hex)		Soehnle Industrial Solutions GmbH
+F89000-F89FFF     (base 16)		Soehnle Industrial Solutions GmbH
+				Gaildorfer Strasse 6
+				Backnang    71522
+				DE
+
+70-B3-D5   (hex)		vision systems safety tech 
+98A000-98AFFF     (base 16)		vision systems safety tech 
+				Route d’Irigny – ZI NORD - BP 32 
+				Brignais  Rhone alpes auverne   69530
+				FR
+
+70-B3-D5   (hex)		GMI Ltd
+C93000-C93FFF     (base 16)		GMI Ltd
+				Inchinnan Business Park
+				Renfre    PA4 9RG
+				GB
+
+70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
+1DF000-1DFFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
+				78-2 Buncheon-ri, Bongdam-eup
+				Hwaseong-city  Gyungki-do  445-894
+				KR
+
+70-B3-D5   (hex)		comtac AG
+F3F000-F3FFFF     (base 16)		comtac AG
+				Allenwindenstrasse 1
+				Flurlingen    8247
+				CH
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+E33000-E33FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		ALBIRAL DISPLAY SOLUTIONS SL
+497000-497FFF     (base 16)		ALBIRAL DISPLAY SOLUTIONS SL
+				Fàtima 25
+				Sant Hipòlit de Voltregà  Barcelona  08512
+				ES
+
+70-B3-D5   (hex)		PABLO AIR Co., LTD
+9A9000-9A9FFF     (base 16)		PABLO AIR Co., LTD
+				#E-1606, 30, Songdomirae-ro, Yeonsu-gu
+				Incheon    21990
+				KR
+
+70-B3-D5   (hex)		Cloud Intelligence Pty Ltd
+574000-574FFF     (base 16)		Cloud Intelligence Pty Ltd
+				43/10 Gladstone Rd
+				Castle Hill  NSW  2154
+				AU
+
+70-B3-D5   (hex)		COMPAL ELECTRONICS, INC.
+4F2000-4F2FFF     (base 16)		COMPAL ELECTRONICS, INC.
+				No.500, Ruiguang Rd., Neihu District,
+				Taipei    11492
+				TW
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+5D4000-5D4FFF     (base 16)		RCH ITALIA SPA 
+				VIA CENDON 39
+				SILEA   TREVISO   31057
+				IT
+
+70-B3-D5   (hex)		iOne
+330000-330FFF     (base 16)		iOne
+				8F-2, #75, sec 1, Hsin Tai Wu Rd., Hsi Chih District
+				New Taipei City, Taiwan    22101
+				TW
+
+70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+70E000-70EFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+70-B3-D5   (hex)		Airity Technologies Inc.
+545000-545FFF     (base 16)		Airity Technologies Inc.
+				1505 Woodside Rd
+				Redwood City  CA  94061
+				US
+
+70-B3-D5   (hex)		Elbit Systems of America
+C24000-C24FFF     (base 16)		Elbit Systems of America
+				4700 Marine Creek Parkway
+				Fort Worth  TX  76179
+				US
+
+70-B3-D5   (hex)		Private
+6CF000-6CFFFF     (base 16)		Private
+
+70-B3-D5   (hex)		ProHound Controles Eirelli 
+0D0000-0D0FFF     (base 16)		ProHound Controles Eirelli 
+				Rua Felipe José de Figueiredo, 45
+				São Paulo  São Paulo  03807300
+				BR
+
+70-B3-D5   (hex)		Samriddi Automations Pvt. Ltd.
+BBA000-BBAFFF     (base 16)		Samriddi Automations Pvt. Ltd.
+				F-365
+				Noida  up  201307
+				IN
+
+70-B3-D5   (hex)		Monnit Corporation
+D1A000-D1AFFF     (base 16)		Monnit Corporation
+				3400 S West Temple
+				Taylorsville  UT  84115
+				US
+
+70-B3-D5   (hex)		Hypex Electronics BV
+287000-287FFF     (base 16)		Hypex Electronics BV
+				Kattegat 8
+				Groningen  Groningen  9723 JP
+				NL
+
+70-B3-D5   (hex)		Algodue Elettronica Srl
+49B000-49BFFF     (base 16)		Algodue Elettronica Srl
+				Via Passerina 3/A
+				Fontaneto d'Agogna  Novara  28010
+				IT
+
+70-B3-D5   (hex)		ASML
+DE5000-DE5FFF     (base 16)		ASML
+				17075 Thornmint Ct
+				San Diego    92127
+				US
+
+70-B3-D5   (hex)		O-Net Communications(Shenzhen)Limited
+9A2000-9A2FFF     (base 16)		O-Net Communications(Shenzhen)Limited
+				No. 35, Cuijing Road, Pingshan New District
+				Shenzhen  Guangdong  518118
+				CN
+
+70-B3-D5   (hex)		Camwell India LLP
+E78000-E78FFF     (base 16)		Camwell India LLP
+				Plot no 72/11/2, Ground Floor
+				Mundka  DELHI  110041
+				IN
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+752000-752FFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		Sonel S.A.
+F71000-F71FFF     (base 16)		Sonel S.A.
+				Wokulskiego 11
+				Swidnica  Dolnoslaskie  58-100
+				PL
+
+70-B3-D5   (hex)		Siemens Mobility GmbH - MO TI SPA
+E40000-E40FFF     (base 16)		Siemens Mobility GmbH - MO TI SPA
+				Rudower Chaussee 29
+				Berlin  Berlin  12489
+				DE
+
+70-B3-D5   (hex)		PEEK TRAFFIC
+0C7000-0C7FFF     (base 16)		PEEK TRAFFIC
+				5401 N SAM HOUSTON PKWY W
+				HOUSTON  null  77086
+				US
+
+70-B3-D5   (hex)		DEVAU Lemppenau GmbH
+4A2000-4A2FFF     (base 16)		DEVAU Lemppenau GmbH
+				Wolbringstrasse 12
+				Bocholt  NRW  46397
+				DE
+
+70-B3-D5   (hex)		Tieline Research Pty Ltd
+FCB000-FCBFFF     (base 16)		Tieline Research Pty Ltd
+				PO Box 2092
+				MALAGA  Western Australia  6944
+				AU
+
+70-B3-D5   (hex)		National Radio & Telecommunication Corporation - NRTC
+949000-949FFF     (base 16)		National Radio & Telecommunication Corporation - NRTC
+				T&T Complex, Haripur
+				Haripur  KPK  22620
+				PK
+
+70-B3-D5   (hex)		Electrónica Falcón S.A.U
+36E000-36EFFF     (base 16)		Electrónica Falcón S.A.U
+				Polígono Industrial Escopar, Calle E, Nº 1
+				Peralta  Navarra  31350
+				ES
+
+70-B3-D5   (hex)		Hessware GmbH
+7AF000-7AFFFF     (base 16)		Hessware GmbH
+				Weinheimer Straße 68
+				Mannheim  BW  68309
+				DE
+
+70-B3-D5   (hex)		Authenticdata
+836000-836FFF     (base 16)		Authenticdata
+				12F-8, No.100, Sec. 1, Jiafeng 11th Rd., Zhubei City
+				HsinChu    30273
+				TW
+
+70-B3-D5   (hex)		ISAC SRL
+07C000-07CFFF     (base 16)		ISAC SRL
+				via Maestri del Lavoro 30
+				CASCINA  PISA  56021
+				IT
+
+70-B3-D5   (hex)		FARECO
+8AE000-8AEFFF     (base 16)		FARECO
+				8 EUROPARC de la Sainte Victoire
+				MEYREUIL    13590
+				FR
+
+70-B3-D5   (hex)		Advice
+926000-926FFF     (base 16)		Advice
+				16 Atir Yeda St
+				Kfar Saba  Not applicable  4464321
+				IL
+
+70-B3-D5   (hex)		robert juliat
+EE8000-EE8FFF     (base 16)		robert juliat
+				32 route de beaumont
+				fresnoy en thelle  Oise  60530
+				FR
+
+70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
+9C5000-9C5FFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+70-B3-D5   (hex)		VNT electronics s.r.o.
+0E9000-0E9FFF     (base 16)		VNT electronics s.r.o.
+				Dvorská, 605
+				Lanškroun-Ostrovské Předměstí (okres Ústí nad Orlicí)    56301
+				CZ
+
+70-B3-D5   (hex)		Airmar Technology Corp
+08C000-08CFFF     (base 16)		Airmar Technology Corp
+				35 Meadowbrook Dr
+				Milford  NH  03055
+				US
+
+70-B3-D5   (hex)		Myostat Motion Control Inc
+96E000-96EFFF     (base 16)		Myostat Motion Control Inc
+				17817 Leslie St #21
+				Newmarket  ON  L3Y8C6
+				CA
+
+70-B3-D5   (hex)		AUDI AG
+01B000-01BFFF     (base 16)		AUDI AG
+				Auto-Union-Strasse 1
+				Ingolstadt    85045
+				DE
+
+70-B3-D5   (hex)		FSR, INC.
+A44000-A44FFF     (base 16)		FSR, INC.
+				244 Bergen Blvd
+				Wodland Park  NJ  07424
+				US
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+E47000-E47FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+CBA000-CBAFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		chiconypower
+3A0000-3A0FFF     (base 16)		chiconypower
+				23F, No.69, Sec. 2, Guangfu Rd., Sanchong Dist., New Taipei City 241, Taiwan (R.O.C.)
+				New Taipei  Taiwan  241
+				TW
+
+70-B3-D5   (hex)		HD Vision Systems GmbH
+F18000-F18FFF     (base 16)		HD Vision Systems GmbH
+				Berliner Str. 43
+				Heidelberg    69120
+				DE
+
+70-B3-D5   (hex)		Signals and systems india pvt ltd
+2ED000-2EDFFF     (base 16)		Signals and systems india pvt ltd
+				15/D-19, 3rd Main Road, SIPCOT IT PARK, SIRUSERI, OMR
+				CHENNAI  TAMIL NADU  603103
+				IN
+
+70-B3-D5   (hex)		Piranha EMS Inc.
+006000-006FFF     (base 16)		Piranha EMS Inc.
+				2681 Zanker Road
+				San Jose  CA  95134
+				US
+
+70-B3-D5   (hex)		Biotage Sweden AB
+4D2000-4D2FFF     (base 16)		Biotage Sweden AB
+				Vimpelgatan 5
+				Uppsala    753 18
+				SE
+
+70-B3-D5   (hex)		Datamars SA
+AA9000-AA9FFF     (base 16)		Datamars SA
+				Via Industria 16
+				Lamone    6814
+				CH
+
+70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau AG
+08B000-08BFFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
+				Werner-von-Siemens-Str. 1
+				Offenburg  Ba-Wue  77656
+				DE
+
+70-B3-D5   (hex)		ESYSE GmbH Embedded Systems Engineering
+008000-008FFF     (base 16)		ESYSE GmbH Embedded Systems Engineering
+				Ruth-Niehaus Str. 8
+				Meerbusch  Nordrhein-Westfalen  40667
+				DE
+
+70-B3-D5   (hex)		Toshiba Electron Tubes & Devices Co., Ltd.
+D28000-D28FFF     (base 16)		Toshiba Electron Tubes & Devices Co., Ltd.
+				1385, Shimoishigami
+				Otawara-shi  Tochigi  324-8550
+				JP
+
+70-B3-D5   (hex)		Waldo System
+CA1000-CA1FFF     (base 16)		Waldo System
+				4th Floor, 658, Yangcheon-ro, Gangseo-gu,
+				Seoul     07554
+				KR
+
+70-B3-D5   (hex)		MOTION LIB,Inc.
+27C000-27CFFF     (base 16)		MOTION LIB,Inc.
+				Saiwai-ku ,Shinkawasaki 7-7-237
+				Kawasaki City  Kanagawa  212-0032
+				JP
+
+70-B3-D5   (hex)		APG Cash Drawer, LLC
+ACF000-ACFFFF     (base 16)		APG Cash Drawer, LLC
+				5250 Industrial Blvd NE
+				Minneapolis  MN  55421
+				US
+
+70-B3-D5   (hex)		Gastech Australia Pty Ltd
+793000-793FFF     (base 16)		Gastech Australia Pty Ltd
+				24 Baretta Road
+				Wanagra  WA  6065
+				AU
+
+70-B3-D5   (hex)		Microvideo
+4E0000-4E0FFF     (base 16)		Microvideo
+				Copley Hill Business Park, Cambridge Road
+				Babraham    CB22 3GN
+				GB
+
+70-B3-D5   (hex)		Cambria Corporation
+B6B000-B6BFFF     (base 16)		Cambria Corporation
+				1328 North 128th Street
+				Seattle  WA  98133
+				US
+
+70-B3-D5   (hex)		eWireless
+BC3000-BC3FFF     (base 16)		eWireless
+				4629 n capitol ave
+				Indianapolis  IN  46208
+				US
+
+70-B3-D5   (hex)		Fluid Components Intl
+9F9000-9F9FFF     (base 16)		Fluid Components Intl
+				1755 La Costa Meadows Dr.
+				San Marcos  CA  92078
+				US
+
+70-B3-D5   (hex)		Dokuen Co. Ltd.
+334000-334FFF     (base 16)		Dokuen Co. Ltd.
+				12-3 minami-matsunoki-cho higashi-kujo minami-ku
+				kyoto    6018023
+				JP
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+BD8000-BD8FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Sanmina Israel
+3D4000-3D4FFF     (base 16)		Sanmina Israel
+				Koren Industrial Zone , POBox 102
+				Maalot  Israel  2101002
+				IL
+
+70-B3-D5   (hex)		TATTILE SRL
+937000-937FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Last Mile Gear
+EBA000-EBAFFF     (base 16)		Last Mile Gear
+				1119 11th Ave
+				LONGVIEW  WA  98632
+				US
+
+70-B3-D5   (hex)		WAVE
+ED7000-ED7FFF     (base 16)		WAVE
+				12078 University City Boulevard
+				Harrisburg  NC  28075
+				US
+
+70-B3-D5   (hex)		Season Electronics Ltd
+15E000-15EFFF     (base 16)		Season Electronics Ltd
+				600 Nest Business Park 
+				Havant  Hampshire  PO9 5TL
+				GB
+
+70-B3-D5   (hex)		Sicon srl
+7C7000-7C7FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Cooltera Limited
+DD5000-DD5FFF     (base 16)		Cooltera Limited
+				Fircroft House, Fircroft Way
+				Edenbridge  Kent  TN8 6EJ
+				GB
+
+70-B3-D5   (hex)		HoseoTelnet Inc...
+11B000-11BFFF     (base 16)		HoseoTelnet Inc...
+				Hoseo Plaza B/D 7F, 416
+				Gangseo-ro, Gangseo-gu  Seoul   07583
+				KR
+
+70-B3-D5   (hex)		Bespoon
+0F7000-0F7FFF     (base 16)		Bespoon
+				17 rue du Lac St andre
+				Le bourget du Lac    73370
+				FR
+
+70-B3-D5   (hex)		U-JIN Mesco Co., Ltd.
+868000-868FFF     (base 16)		U-JIN Mesco Co., Ltd.
+				Nakajima-cho 18-22
+				Nishinomiya  Hyogo  663-8105
+				JP
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+E2B000-E2BFFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		CMT Medical technologies
+950000-950FFF     (base 16)		CMT Medical technologies
+				Hacarmel 7/2
+				Yoqneam    20692
+				IL
+
+70-B3-D5   (hex)		Abionic
+BC1000-BC1FFF     (base 16)		Abionic
+				Route de la Corniche 5
+				Epalinges    1066
+				CH
+
+70-B3-D5   (hex)		SYSCO Sicherheitssysteme GmbH
+471000-471FFF     (base 16)		SYSCO Sicherheitssysteme GmbH
+				Nebenstrasse 13
+				Hasselroth  Hessen  63594 
+				DE
+
+70-B3-D5   (hex)		PKE Electronics AG
+61E000-61EFFF     (base 16)		PKE Electronics AG
+				Computerstraße, 6
+				Wien  Wien  1100
+				AT
+
+70-B3-D5   (hex)		TATTILE SRL
+ACB000-ACBFFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Honeywell
+F4D000-F4DFFF     (base 16)		Honeywell
+				Aerospace - ETS
+				Clearwater    33764
+				US
+
+70-B3-D5   (hex)		Honeywell
+F70000-F70FFF     (base 16)		Honeywell
+				13350 US Highway 19 N 
+				  Clearwater   null   33764 
+				US
+
+70-B3-D5   (hex)		TECNOWATT
+B1F000-B1FFFF     (base 16)		TECNOWATT
+				Via dell'Aeronautica
+				Bergamo    24035
+				IT
+
+70-B3-D5   (hex)		Symetrics Industries d.b.a. Extant Aerospace
+0A8000-0A8FFF     (base 16)		Symetrics Industries d.b.a. Extant Aerospace
+				1615 West NASA Blvd
+				Melbourne  FL  32901
+				US
+
+70-B3-D5   (hex)		Cygnetic Technologies (Pty) Ltd
+B94000-B94FFF     (base 16)		Cygnetic Technologies (Pty) Ltd
+				10 Church Street
+				Cape Town    7550
+				ZA
+
+70-B3-D5   (hex)		VISION SYSTEMS AURTOMOTIVE (SAFETY TECH)
+948000-948FFF     (base 16)		VISION SYSTEMS AURTOMOTIVE (SAFETY TECH)
+				CHEMIN DE CHIRADIE
+				BRIGNAIS  RHONE ALPES AUVERGNE  69530
+				FR
+
+70-B3-D5   (hex)		CoreKinect
+84C000-84CFFF     (base 16)		CoreKinect
+				5024 S. Ash Ave, Suite 101
+				Tempe  AZ  85282
+				US
+
+70-B3-D5   (hex)		KST technology
+8A5000-8A5FFF     (base 16)		KST technology
+				KST B/D 4-5, Wiryeseong-daero 12-gil
+				Songpa-gu  Seoul  05636
+				KR
+
+70-B3-D5   (hex)		Moduware PTY LTD
+FC8000-FC8FFF     (base 16)		Moduware PTY LTD
+				502/37 Swanston Street
+				Melbourne  Victoria  3000
+				AU
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+2CF000-2CFFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbühl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Argon ST
+A9E000-A9EFFF     (base 16)		Argon ST
+				12701 Fair Lakes Circle
+				Fairfax  VA  22033
+				US
+
+70-B3-D5   (hex)		TripleOre
+862000-862FFF     (base 16)		TripleOre
+				Kazernestraat 19
+				Venlo    5928 NL
+				NL
+
+70-B3-D5   (hex)		ioThings
+993000-993FFF     (base 16)		ioThings
+				Past. Debijestraat 42
+				Hegelsom  Limburg  5963AG
+				NL
+
+70-B3-D5   (hex)		MICAS AG
+AB3000-AB3FFF     (base 16)		MICAS AG
+				Turleyring 18-22
+				Oelsnitz    09376
+				DE
+
+70-B3-D5   (hex)		Acrodea, Inc.
+406000-406FFF     (base 16)		Acrodea, Inc.
+				3F, Daisan Yamada Bldg., 22 Aizumi-cho
+				Shinjuku-ku  Tokyo  1600005
+				JP
+
+70-B3-D5   (hex)		LG Electronics
+9E3000-9E3FFF     (base 16)		LG Electronics
+				10, Magokjungang 10-ro, Gangseo-gu
+				Seoul    07796
+				KR
+
+70-B3-D5   (hex)		Microtronics Engineering GmbH
+D24000-D24FFF     (base 16)		Microtronics Engineering GmbH
+				Hauptstrasse 7
+				Ruprechtshofen    3244
+				AT
+
+70-B3-D5   (hex)		Medical Monitoring Center OOD
+92E000-92EFFF     (base 16)		Medical Monitoring Center OOD
+				Office 8, 10 Poduevo Street
+				Sofia    1680
+				BG
+
+70-B3-D5   (hex)		Guilin Tryin Technology Co.,Ltd
+460000-460FFF     (base 16)		Guilin Tryin Technology Co.,Ltd
+				Room C-306, Innovation Building,Information Industry Park, Chaoyang Road,Guilin,China
+				GuiLin  Guangxi  541000
+				CN
+
+70-B3-D5   (hex)		Acrodea, Inc.
+67D000-67DFFF     (base 16)		Acrodea, Inc.
+				3F, Daisan Yamada Bldg., 22 Aizumi-cho
+				Shinjuku-ku  Tokyo  1600005
+				JP
+
+70-B3-D5   (hex)		Human Systems Integration
+085000-085FFF     (base 16)		Human Systems Integration
+				153 Washington St, 4th Floor
+				Walpole  MA  02170
+				US
+
+70-B3-D5   (hex)		Vistec Electron Beam GmbH
+17B000-17BFFF     (base 16)		Vistec Electron Beam GmbH
+				Ilmstraße 4
+				Jena    07743
+				DE
+
+70-B3-D5   (hex)		Tornado Modular Systems
+A87000-A87FFF     (base 16)		Tornado Modular Systems
+				Inzhenernaya st. 4a
+				Novosibirsk  Novosibirsk  630128
+				RU
+
+70-B3-D5   (hex)		Common Sense Monitoring Solutions Ltd.
+0D1000-0D1FFF     (base 16)		Common Sense Monitoring Solutions Ltd.
+				Unit 1, Holts Court
+				Threshers Bush  Essex  CM17 0NS
+				GB
+
+70-B3-D5   (hex)		FUJICOM Co.,Ltd.
+00A000-00AFFF     (base 16)		FUJICOM Co.,Ltd.
+				8-10-17-403, HON-chou
+				KOUNOSU-shi  SAITAMA-ken  3650038
+				JP
+
+70-B3-D5   (hex)		Sanmina Israel
+984000-984FFF     (base 16)		Sanmina Israel
+				Koren Industrial Zone , POBox 102
+				Maalot  Israel  2101002
+				IL
+
+70-B3-D5   (hex)		Saankhya Labs Private Limited
+CA3000-CA3FFF     (base 16)		Saankhya Labs Private Limited
+				Embassy Icon, 3rd Floor, No. 3, Infantry Road,
+				Bangalore  Karnataka  560001
+				IN
+
+70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
+5ED000-5EDFFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+70-B3-D5   (hex)		HANYOUNG NUX CO.,LTD
+103000-103FFF     (base 16)		HANYOUNG NUX CO.,LTD
+				28. GILPA-RO
+				INCHEON  NAM-GU  22121
+				KR
+
+70-B3-D5   (hex)		Vocality international T/A Cubic
+75F000-75FFFF     (base 16)		Vocality international T/A Cubic
+				Lydling Barn,Lydling Farm,, Puttenham Lane
+				Godalming  Surrey  gu8 6ap
+				GB
+
+70-B3-D5   (hex)		Adel System srl
+375000-375FFF     (base 16)		Adel System srl
+				VIA LUIGI BARCHI, 9/B
+				Reggio Emilia    42124
+				IT
+
+70-B3-D5   (hex)		AIROBOT OÜ
+1D3000-1D3FFF     (base 16)		AIROBOT OÜ
+				Pardi 32-1
+				Pärnu    80016
+				EE
+
+70-B3-D5   (hex)		Ariston Thermo s.p.a.
+C11000-C11FFF     (base 16)		Ariston Thermo s.p.a.
+				Via Aristide Merloni 45
+				Fabriano  Ancona  60044
+				IT
+
+70-B3-D5   (hex)		Scenario Automation
+8B4000-8B4FFF     (base 16)		Scenario Automation
+				Rua Paulo Elias, 216
+				São Carlos  São Paulo  13564400
+				BR
+
+70-B3-D5   (hex)		CT Company
+3AD000-3ADFFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+70-B3-D5   (hex)		Rishaad Brown
+D09000-D09FFF     (base 16)		Rishaad Brown
+				224 Thoreau dr. Apt.D
+				Yorktown  VA  23693
+				US
+
+70-B3-D5   (hex)		Verity Studios AG
+7AC000-7ACFFF     (base 16)		Verity Studios AG
+				Zürcherstrasse 39
+				Schlieren    8952
+				CH
+
+70-B3-D5   (hex)		WARECUBE,INC
+F06000-F06FFF     (base 16)		WARECUBE,INC
+				#A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu
+				Suwon-si    16648
+				KR
+
+70-B3-D5   (hex)		SEASON DESIGN TECHNOLOGY
+2C9000-2C9FFF     (base 16)		SEASON DESIGN TECHNOLOGY
+				FLOOR 4, WARDS EXCHANGE, 199 ECCLESALL ROAD
+				SHEFFIELD  SOUTH YORKSHIRE  S11 8HW
+				GB
+
+70-B3-D5   (hex)		Silex Inside
+3BA000-3BAFFF     (base 16)		Silex Inside
+				rue du bosquet 7
+				LouvainlaNeuve  Brabant  1348
+				BE
+
+70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
+E0B000-E0BFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
+				78-2 Buncheon-ri, Bongdam-eup
+				Hwaseong-city  Gyungki-do  445-894
+				KR
+
+70-B3-D5   (hex)		Sicon srl
+145000-145FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		TATTILE SRL
+2CA000-2CAFFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+00-1B-C5   (hex)		Dynasthetics
+074000-074FFF     (base 16)		Dynasthetics
+				801-484-3820
+				Salt Lake City  UT  84119
+				US
+
+70-B3-D5   (hex)		Teko Telecom Srl
+29C000-29CFFF     (base 16)		Teko Telecom Srl
+				via Meucci 24/a
+				Castel San Pietro Terme  Bologna  40024
+				IT
+
+70-B3-D5   (hex)		ERA a.s.
+A90000-A90FFF     (base 16)		ERA a.s.
+				Prumyslova 462
+				Pardubice    53003
+				CZ
+
+70-B3-D5   (hex)		X-SPEX GmbH
+D6F000-D6FFFF     (base 16)		X-SPEX GmbH
+				Albert-Einstein-Str. 14
+				Berlin  Berlin  12489
+				DE
+
+70-B3-D5   (hex)		Gedomo GmbH
+7D7000-7D7FFF     (base 16)		Gedomo GmbH
+				Erlacker 483
+				Poellau bei Hartberg  Steiermark  8225
+				AT
+
+70-B3-D5   (hex)		Raft Technologies
+8D0000-8D0FFF     (base 16)		Raft Technologies
+				Habarzel 25
+				Tel aviv    6971035
+				IL
+
+70-B3-D5   (hex)		Zamir Recognition Systems Ltd.
+981000-981FFF     (base 16)		Zamir Recognition Systems Ltd.
+				Manachat Tech Park 1/22
+				Jerusalem    96951
+				IL
+
+70-B3-D5   (hex)		University Of Groningen
+700000-700FFF     (base 16)		University Of Groningen
+				Broerstraat 5
+				Groningen  Groningen  9712 CP
+				NL
+
+70-B3-D5   (hex)		Association Romandix
+AEB000-AEBFFF     (base 16)		Association Romandix
+				rue de Sebeillon 9b
+				Lausanne  Vaud  1004
+				CH
+
+70-B3-D5   (hex)		AdInte, inc.
+BAC000-BACFFF     (base 16)		AdInte, inc.
+				347-1, Shijo-cho, Shimogyo-ku, 7F CUBE Nishikarasuma BLDG.
+				Kyoto-shi  Kyoto  6008441
+				JP
+
+70-B3-D5   (hex)		Insitu, Inc
+B3B000-B3BFFF     (base 16)		Insitu, Inc
+				118 E Columbia River Way
+				Bingen  WA  98605
+				US
+
+70-B3-D5   (hex)		Insitu, Inc
+7AD000-7ADFFF     (base 16)		Insitu, Inc
+				118 E Columbia River Way
+				Bingen  WA  98605
+				US
+
+70-B3-D5   (hex)		HiDes, Inc.
+837000-837FFF     (base 16)		HiDes, Inc.
+				6F, No.86, Baozhong Rd., Xindian Dist.,
+				New Taipei City  New Taipei City  23144
+				TW
+
+70-B3-D5   (hex)		SENSO2ME 
+F7A000-F7AFFF     (base 16)		SENSO2ME 
+				Zandhoef  16
+				KASTERLEE  België  2460
+				BE
+
+70-B3-D5   (hex)		ELDES
+9A0000-9A0FFF     (base 16)		ELDES
+				Ukmerges 283B
+				Vilnius    06313
+				LT
+
+70-B3-D5   (hex)		Mimo Networks
+25D000-25DFFF     (base 16)		Mimo Networks
+				701 E Middlefield Road Mountain View, 
+				Mountain View  CA  94043
+				US
+
+70-B3-D5   (hex)		Vtron Pty Ltd
+15D000-15DFFF     (base 16)		Vtron Pty Ltd
+				Unit 2, 62 Township Drive West
+				West Burleigh  Queensland  4219
+				AU
+
+70-B3-D5   (hex)		Abbas, a.s.
+B18000-B18FFF     (base 16)		Abbas, a.s.
+				Edisonova 5
+				Brno  CZ  61200
+				CZ
+
+70-B3-D5   (hex)		Emergency Lighting Products Limited
+480000-480FFF     (base 16)		Emergency Lighting Products Limited
+				Gillmans Industrial Estate, Natts Lane
+				Billingshurst    RH14 9EZ
+				GB
+
+70-B3-D5   (hex)		Kunshan excellent Intelligent Technology Co., Ltd.
+BE4000-BE4FFF     (base 16)		Kunshan excellent Intelligent Technology Co., Ltd.
+				Room 2002 Site B Modern Square No 8 Wei yi Road 
+				kunshan  Jiangsu Province   215301
+				CN
+
+70-B3-D5   (hex)		DIMASTEC GESTAO DE PONTO E ACESSO EIRELI-ME
+F8F000-F8FFFF     (base 16)		DIMASTEC GESTAO DE PONTO E ACESSO EIRELI-ME
+				Praça Rotary Club, 355
+				Ribeirão Preto  São Paulo  14021-355
+				BR
+
+70-B3-D5   (hex)		QUANTAFLOW
+6EB000-6EBFFF     (base 16)		QUANTAFLOW
+				AVENUE DU CANADA
+				HONFLEUR    14600
+				FR
+
+70-B3-D5   (hex)		JUSTEK INC
+EB5000-EB5FFF     (base 16)		JUSTEK INC
+				613-9, DONGCHUN-RI, JINWI-MYEON
+				PYEONGTAEK-SI  GYEONGGI-DO  17711
+				KR
+
+70-B3-D5   (hex)		Neuron GmbH
+E1B000-E1BFFF     (base 16)		Neuron GmbH
+				Badenerstrasse 9
+				Brugg    5200
+				CH
+
+70-B3-D5   (hex)		Critical Link LLC
+EF9000-EF9FFF     (base 16)		Critical Link LLC
+				6712 Brooklawn Pkwy
+				Syracuse  NY  13211
+				US
+
+70-B3-D5   (hex)		TechSigno srl
+0A2000-0A2FFF     (base 16)		TechSigno srl
+				Via Giovanni Paolo II, 3
+				Udiner  UD  33100
+				IT
+
+70-B3-D5   (hex)		BLOCKSI LLC
+95E000-95EFFF     (base 16)		BLOCKSI LLC
+				228 Hamilton avenue 3rd floor
+				Palo Alto    94301
+				US
+
+70-B3-D5   (hex)		thou&tech
+782000-782FFF     (base 16)		thou&tech
+				161, Simin-daero,  Dongan-gu, Anyang-si
+				Anyang-si  Gyeonggi-do  14067
+				KR
+
+70-B3-D5   (hex)		VAGLER International Sdn Bhd
+582000-582FFF     (base 16)		VAGLER International Sdn Bhd
+				2006 Jalan Jelawat, Seberang Jaya Industrial Estate
+				Prai  Penang  13700
+				MY
+
+70-B3-D5   (hex)		HOW-E
+741000-741FFF     (base 16)		HOW-E
+				No. 19, Alley 16, Lane 61, Yangmei dist.
+				Taoyuan City    32647
+				TW
+
+70-B3-D5   (hex)		Telstra
+026000-026FFF     (base 16)		Telstra
+				231 Elisabeth St
+				SYDNEY  NSW  2000
+				AU
+
+70-B3-D5   (hex)		JL World Corporation Limited
+D54000-D54FFF     (base 16)		JL World Corporation Limited
+				Unit 20, 5/F., Block B, Proficient Industrial Centre
+				Kowloon Bay    0000
+				HK
+
+70-B3-D5   (hex)		GlobalTest LLC
+A1F000-A1FFFF     (base 16)		GlobalTest LLC
+				Pavlika Morozova 6
+				Sarov  Nizhnij Novgorod  607185
+				RU
+
+70-B3-D5   (hex)		Array Technologies Inc.
+A4E000-A4EFFF     (base 16)		Array Technologies Inc.
+				21 Sequin Drive
+				Glastonbury    06033
+				US
+
+70-B3-D5   (hex)		BioBusiness
+A08000-A08FFF     (base 16)		BioBusiness
+				4 Elsafwa Towers, Ellebiny st, Mariutia Haram
+				Giza  Cairo  12111
+				EG
+
+70-B3-D5   (hex)		Landis Gyr
+0B6000-0B6FFF     (base 16)		Landis Gyr
+				Hasdrubal Bellegard, 400, CIC
+				Curitiba  Paraná  81460120
+				BR
+
+70-B3-D5   (hex)		Lode BV
+716000-716FFF     (base 16)		Lode BV
+				Zernikepark 16
+				Groningen    9747 AN
+				NL
+
+70-B3-D5   (hex)		Telonic Berkeley Inc
+61D000-61DFFF     (base 16)		Telonic Berkeley Inc
+				1080 La Mirada Ct.
+				Vista  CA  92081
+				US
+
+70-B3-D5   (hex)		PAMIR Inc
+D93000-D93FFF     (base 16)		PAMIR Inc
+				B-222, 606, Seobusaet-gil, Geumcheon-gu
+				Seoul    08504
+				KR
+
+70-B3-D5   (hex)		NOTICE Co., Ltd.
+CAB000-CABFFF     (base 16)		NOTICE Co., Ltd.
+				A-1307/8, Keumkang Penterium IT Tower, 282, Hagui-ro
+				Anyang  Gyeonggi-do  14056
+				KR
+
+70-B3-D5   (hex)		Sierra Nevada Corporation
+252000-252FFF     (base 16)		Sierra Nevada Corporation
+				444 Salomon Circle
+				Sparks  NV  89434
+				US
+
+70-B3-D5   (hex)		Uwinloc
+D6B000-D6BFFF     (base 16)		Uwinloc
+				57 Avenue Jean Monnet
+				Colomiers    31770
+				FR
+
+70-B3-D5   (hex)		Rtone
+5F3000-5F3FFF     (base 16)		Rtone
+				120 rue de Saint cyr
+				Lyon    69009
+				FR
+
+70-B3-D5   (hex)		EIIT SA
+608000-608FFF     (base 16)		EIIT SA
+				Camino Robledo de Chavela 9B
+				Valdemorillo  Madrid / Madrid  28210
+				ES
+
+70-B3-D5   (hex)		IOT Engineering
+16B000-16BFFF     (base 16)		IOT Engineering
+				3 Eglington Ave
+				Epson  Auckland  1024
+				NZ
+
+70-B3-D5   (hex)		TATTILE SRL
+B21000-B21FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Alma
+BA9000-BA9FFF     (base 16)		Alma
+				4A, Bd de la Gare, Porte 1 
+				Boissy St Léger  PACA  94470
+				FR
+
+70-B3-D5   (hex)		International Roll-Call Corporation
+4B8000-4B8FFF     (base 16)		International Roll-Call Corporation
+				8346 Old Richfood Road
+				Mechanicsville  VA  23116
+				US
+
+70-B3-D5   (hex)		S.I.C.E.S. srl
+EA7000-EA7FFF     (base 16)		S.I.C.E.S. srl
+				Via Molinello, 8B
+				Jerago con Orago  VARESE  21040
+				IT
+
+70-B3-D5   (hex)		RCATSONE
+3AA000-3AAFFF     (base 16)		RCATSONE
+				5925 Airport Road - Suite 905
+				Mississauga  Ontario   L4V 1W1
+				CA
+
+70-B3-D5   (hex)		PLUTO Solution co.,ltd.
+842000-842FFF     (base 16)		PLUTO Solution co.,ltd.
+				B-1018, Kumkang Penterium IT Tower, 282, Hagui-ro, Dongan-gu
+				Anyang-si  Gyeonggi-do  14056
+				KR
+
+70-B3-D5   (hex)		SHENZHEN GAONA ELECTRONIC CO.LTD
+031000-031FFF     (base 16)		SHENZHEN GAONA ELECTRONIC CO.LTD
+				F3.East block. Xinwu Industrial Building, Longzhu Road.Nanshan District
+				Shenzhen   Guangdong China  518000
+				CN
+
+00-1B-C5   (hex)		SKODA ELECTRIC a.s.
+0B2000-0B2FFF     (base 16)		SKODA ELECTRIC a.s.
+				Tylova 1/57
+				Plzen    301 28
+				CZ
+
+70-B3-D5   (hex)		Dameca a/s
+EEA000-EEAFFF     (base 16)		Dameca a/s
+				Islevdalvej 211
+				Roedovre    2610
+				DK
+
+70-B3-D5   (hex)		Cardinal Scale Mfg Co
+488000-488FFF     (base 16)		Cardinal Scale Mfg Co
+				203 E. Daugherty
+				Webb City  MO  64870
+				US
+
+70-B3-D5   (hex)		ISO/TC 22/SC 31
+319000-319FFF     (base 16)		ISO/TC 22/SC 31
+				Behrenstr. 35
+				Berlin    10117
+				DE
+
+70-B3-D5   (hex)		ndb technologies
+0B2000-0B2FFF     (base 16)		ndb technologies
+				1405-111 Av Saint-Jean-Baptiste
+				Quebec  Quebec  G2E5K2
+				CA
+
+70-B3-D5   (hex)		Nanjing Dandick Science&technology development co., LTD
+E7D000-E7DFFF     (base 16)		Nanjing Dandick Science&technology development co., LTD
+				No.5,JinMa Road,MaQun Science Park,Qixia district
+				NanJing  Jiang Su  210049
+				CN
+
+70-B3-D5   (hex)		Critical Link LLC
+E5E000-E5EFFF     (base 16)		Critical Link LLC
+				6712 Brooklawn Parkway
+				Syracuse  null  13211
+				US
+
+70-B3-D5   (hex)		SISTEM SA
+DB8000-DB8FFF     (base 16)		SISTEM SA
+				Avda.Rita Levi Montalcini, nº2 Parcela 5
+				Getafe  Madrid  28906
+				ES
+
+70-B3-D5   (hex)		Fortress Cyber Security
+674000-674FFF     (base 16)		Fortress Cyber Security
+				189 South Orange Ave, Suite 1950
+				Orlando  FL  32801
+				US
+
+70-B3-D5   (hex)		QUICCO SOUND Corporation
+A7E000-A7EFFF     (base 16)		QUICCO SOUND Corporation
+				B2,1-3-3-1,Incubate Center, Shin-Miyakoda, Kita-ku
+				Hamamatsu  Shizuoka  431-2103
+				JP
+
+70-B3-D5   (hex)		RDT Ltd
+7DF000-7DFFFF     (base 16)		RDT Ltd
+				Pavilion C2, Ashwood Park, Ashwood Way
+				Basingstoke  Hampshire  RG23 8BG
+				GB
+
+70-B3-D5   (hex)		Package Guard, Inc
+878000-878FFF     (base 16)		Package Guard, Inc
+				2819 33rd ave so
+				seattle  WA  98144
+				US
+
+70-B3-D5   (hex)		SDK Kristall
+7D2000-7D2FFF     (base 16)		SDK Kristall
+				Polevaia Sabirovskaia  49A, 1H
+				Saint-Petersburg  Russia  197183
+				RU
+
+70-B3-D5   (hex)		BEDEROV GmbH
+371000-371FFF     (base 16)		BEDEROV GmbH
+				Rankestr. 8
+				Berlin  Berlin  10789
+				DE
+
+70-B3-D5   (hex)		Sensoterra BV
+DC9000-DC9FFF     (base 16)		Sensoterra BV
+				Science Park 106   
+				Amsterdam    1098 XG
+				NL
+
+70-B3-D5   (hex)		Fusar Technologies inc
+E6C000-E6CFFF     (base 16)		Fusar Technologies inc
+				385 Monmouth St #2
+				Jersey City  NJ  07302
+				US
+
+70-B3-D5   (hex)		FOCAL-JMLab
+96B000-96BFFF     (base 16)		FOCAL-JMLab
+				108 rue de l'Avenir
+				La Talaudière    42353
+				FR
+
+70-B3-D5   (hex)		Comrod AS
+408000-408FFF     (base 16)		Comrod AS
+				Fiskaaveien 1
+				TAU    4120
+				NO
+
+70-B3-D5   (hex)		Santa Barbara Imaging Systems
+446000-446FFF     (base 16)		Santa Barbara Imaging Systems
+				340 Storke Road, Suite 101
+				Goleta  CA  93117
+				US
+
+70-B3-D5   (hex)		SENSONEO
+007000-007FFF     (base 16)		SENSONEO
+				Kollarova 27
+				Bratislava  Slovak Republic  84106
+				SK
+
+70-B3-D5   (hex)		BRS Sistemas Eletrônicos
+55E000-55EFFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491 / 204
+				Porto Alegre  RS  91380-000
+				BR
+
+70-B3-D5   (hex)		ARC Technology Solutions, LLC
+FAD000-FADFFF     (base 16)		ARC Technology Solutions, LLC
+				165 Ledge Street
+				Nashua  NH  03060
+				US
+
+70-B3-D5   (hex)		vivaMOS
+AC7000-AC7FFF     (base 16)		vivaMOS
+				2 Venture Road
+				Southampton  Hampshire  SO16 7NP
+				GB
+
+70-B3-D5   (hex)		Southern Innovation
+C16000-C16FFF     (base 16)		Southern Innovation
+				729 Nicholson street
+				Carlton North  Victoria  3054
+				AU
+
+70-B3-D5   (hex)		Micro Electroninc Products
+DB2000-DB2FFF     (base 16)		Micro Electroninc Products
+				TT Vasumweg 150
+				Amsterdam    1033 SH
+				NL
+
+70-B3-D5   (hex)		Circuitlink Pty Ltd
+094000-094FFF     (base 16)		Circuitlink Pty Ltd
+				4 / 87 Station Road
+				Seven Hills  NSW  2147
+				AU
+
+70-B3-D5   (hex)		Baumtec GmbH
+AEF000-AEFFFF     (base 16)		Baumtec GmbH
+				Behringstr.6
+				Rodgau  Hessen  63110
+				DE
+
+70-B3-D5   (hex)		Rievtech Electronic Co.,Ltd 
+8C1000-8C1FFF     (base 16)		Rievtech Electronic Co.,Ltd 
+				Room 505, Building A, No.88,Dazhou Road,Tiexinqiao,Yu huatai District, Nanjing City, Jiangsu Province,P.R.China +0086 25 52895099                 52890138 info@rievtech.com sales@rievtech.com
+				Nanjing City  Jiangsu Province  210000
+				CN
+
+70-B3-D5   (hex)		CRDE
+DEE000-DEEFFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		Ash Technologies
+30B000-30BFFF     (base 16)		Ash Technologies
+				Unit B5, M7 Business Park
+				Naas  Kildare  W91P684
+				IE
+
+70-B3-D5   (hex)		Step Technica Co., Ltd.
+28C000-28CFFF     (base 16)		Step Technica Co., Ltd.
+				757-3 Shimofujisawa
+				Iruma-shi  Saitama-ken  3580011
+				JP
+
+70-B3-D5   (hex)		Chelsea Technologies Group Ltd
+579000-579FFF     (base 16)		Chelsea Technologies Group Ltd
+				55, Central Avenue
+				West Molesey  Surrey  KT8 2QZ
+				GB
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+B6A000-B6AFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		CircuitMeter Inc.
+365000-365FFF     (base 16)		CircuitMeter Inc.
+				1238 Maple Ridge Dr
+				Pickering  Ontario  L1X 1A5
+				CA
+
+70-B3-D5   (hex)		KST technology
+861000-861FFF     (base 16)		KST technology
+				164-1, KST b/d., Bangi-dong, songpa-gu
+				SEOUL  N/A  138-050
+				KR
+
+70-B3-D5   (hex)		MobiPromo
+A73000-A73FFF     (base 16)		MobiPromo
+				10, 64-72 Beresford Rd
+				Lilydale  Victoria  3140
+				AU
+
+70-B3-D5   (hex)		Nefteavtomatika
+585000-585FFF     (base 16)		Nefteavtomatika
+				50-letiay Oktyabria, 24
+				Ufa    450005
+				RU
+
+70-B3-D5   (hex)		Blair Companies
+442000-442FFF     (base 16)		Blair Companies
+				5107 Kissell Ave
+				Altoona  PA  16601
+				US
+
+70-B3-D5   (hex)		Equatel
+911000-911FFF     (base 16)		Equatel
+				Bury New Road
+				Manchester    M25 0JW
+				GB
+
+70-B3-D5   (hex)		RJ45 Technologies
+9D0000-9D0FFF     (base 16)		RJ45 Technologies
+				7, rue Roland Martin
+				Champigny sur Marne  France  94500
+				FR
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+B56000-B56FFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		S.C.E. srl
+AF6000-AF6FFF     (base 16)		S.C.E. srl
+				Via Giardini 1271/A
+				Modena  Italy  41126
+				IT
+
+70-B3-D5   (hex)		Seraphim Optronics Ltd
+ADF000-ADFFFF     (base 16)		Seraphim Optronics Ltd
+				2 hacarmel  st  
+				Yokneam   Israel  20692
+				IL
+
+70-B3-D5   (hex)		KLEIBER Infrared GmbH
+672000-672FFF     (base 16)		KLEIBER Infrared GmbH
+				Am Gewände 3
+				Unterwellenborn  Thüringen  07333
+				DE
+
+70-B3-D5   (hex)		DORLET SAU
+135000-135FFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		ProTom International
+997000-997FFF     (base 16)		ProTom International
+				1100 Parker Square, Suite 230
+				Flower Mound  TX  75028
+				US
+
+70-B3-D5   (hex)		Systolé Hardware B.V.
+B30000-B30FFF     (base 16)		Systolé Hardware B.V.
+				Hogehilweg, 5E
+				Amsterdam    1101 CA
+				NL
+
+70-B3-D5   (hex)		ZAO ZEO
+07A000-07AFFF     (base 16)		ZAO ZEO
+				Khachaturiana 14a
+				Moscow    127562
+				RU
+
+70-B3-D5   (hex)		Motomuto Aps
+F05000-F05FFF     (base 16)		Motomuto Aps
+				Arresoevej 11
+				Risskov  MIDT  8240
+				DK
+
+70-B3-D5   (hex)		synchrotron SOLEIL
+378000-378FFF     (base 16)		synchrotron SOLEIL
+				l'orme des merisiers
+				gif sur yvette    91192
+				FR
+
+70-B3-D5   (hex)		Contiweb
+DFD000-DFDFFF     (base 16)		Contiweb
+				Ir. Wagterstraat 10
+				Boxmeer    5831 AZ
+				NL
+
+70-B3-D5   (hex)		Specialised Imaging Limited
+D1C000-D1CFFF     (base 16)		Specialised Imaging Limited
+				6 Harvington Park
+				Pitstone  Bucks  LU7 9GX
+				GB
+
+70-B3-D5   (hex)		ATX Networks Corp
+9D9000-9D9FFF     (base 16)		ATX Networks Corp
+				1-501 Clements Road West
+				Ajax  Ontario  L1s7H4
+				CA
+
+70-B3-D5   (hex)		Giant Power Technology Biomedical Corporation
+A8B000-A8BFFF     (base 16)		Giant Power Technology Biomedical Corporation
+				Rm201, 2nd Educational Building, No. 84, Gongzhuan Rd, Taishan Dist
+				New Taipei City    24301
+				TW
+
+70-B3-D5   (hex)		LUCEO
+6BB000-6BBFFF     (base 16)		LUCEO
+				16 Rue Laënnec
+				Vern Sur Seiche  Bretagne  35770
+				FR
+
+70-B3-D5   (hex)		INEO-SENSE
+637000-637FFF     (base 16)		INEO-SENSE
+				125 rue de l'Hostellerie, Immeuble Ellipsis - Niv 4-12
+				NIMES    30900
+				FR
+
+70-B3-D5   (hex)		Lumacron Technology Ltd.
+778000-778FFF     (base 16)		Lumacron Technology Ltd.
+				4 Pitreavie Court, Pitreavie Business Park
+				Dunfermline  Fife  KY11 8UU
+				GB
+
+70-B3-D5   (hex)		Gecko Robotics Inc
+04A000-04AFFF     (base 16)		Gecko Robotics Inc
+				6901 Lynn Way, Suite 310
+				Pittsburgh  PA  15208
+				US
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+FBD000-FBDFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Fourth Frontier Technologies Private Limited
+E2C000-E2CFFF     (base 16)		Fourth Frontier Technologies Private Limited
+				91 Bhuvaneshwari Nagar, CV Raman Nagar Post
+				Bangalore  Karnataka  560093
+				IN
+
+70-B3-D5   (hex)		hera Laborsysteme GmbH
+4C2000-4C2FFF     (base 16)		hera Laborsysteme GmbH
+				Hermann-Rapp-Str. 40
+				Blaufelden    74572
+				DE
+
+70-B3-D5   (hex)		Proximus
+AA6000-AA6FFF     (base 16)		Proximus
+				Bld du Roi Albert II 27
+				Brussels    1030
+				BE
+
+70-B3-D5   (hex)		Joehl & Koeferli AG
+81A000-81AFFF     (base 16)		Joehl & Koeferli AG
+				Wittenwilerstrasse 31
+				Aadorf  TG  8355
+				CH
+
+70-B3-D5   (hex)		TATTILE SRL
+825000-825FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Tunstall A/S
+2F8000-2F8FFF     (base 16)		Tunstall A/S
+				Niels Bohrs vej 42
+				Stilling  Skanderborg  8660
+				DK
+
+70-B3-D5   (hex)		Tibit Communications
+523000-523FFF     (base 16)		Tibit Communications
+				1 Willowbrook Court, Suite 150
+				Petaluma  CA  94954
+				US
+
+70-B3-D5   (hex)		ATG UV Technology
+E9C000-E9CFFF     (base 16)		ATG UV Technology
+				Genesis House
+				Wigan    WN5 8AA
+				GB
+
+70-B3-D5   (hex)		Cybercom AB
+FF7000-FF7FFF     (base 16)		Cybercom AB
+				Lindholmenspiren 3A
+				Göteborg  Vastra götland  41756
+				SE
+
+70-B3-D5   (hex)		IoTrek Technology Private Limited
+A07000-A07FFF     (base 16)		IoTrek Technology Private Limited
+				Paharganj, Delhi
+				New Delhi  New Delhi  110055
+				IN
+
+70-B3-D5   (hex)		ANKER-EAST
+C4B000-C4BFFF     (base 16)		ANKER-EAST
+				B. Raznochinnaya 28
+				St Petersburg    197110
+				RU
+
+70-B3-D5   (hex)		Schneider Displaytechnik GmbH
+9C0000-9C0FFF     (base 16)		Schneider Displaytechnik GmbH
+				Tegelweg, 14
+				Paderborn    33102
+				DE
+
+70-B3-D5   (hex)		Canam Technology, Inc.
+B97000-B97FFF     (base 16)		Canam Technology, Inc.
+				5318 East 2nd. St, #700
+				Long Beach  CA  90803
+				US
+
+70-B3-D5   (hex)		FRANKLIN FRANCE
+767000-767FFF     (base 16)		FRANKLIN FRANCE
+				13 RUE LOUIS ARMAND
+				OZOIR LA FERRIERE    77330
+				FR
+
+70-B3-D5   (hex)		ENERGISME
+465000-465FFF     (base 16)		ENERGISME
+				88 avenue du General Leclerc
+				Boulogne Billancourt    92100
+				FR
+
+70-B3-D5   (hex)		DUVAL MESSIEN
+F07000-F07FFF     (base 16)		DUVAL MESSIEN
+				30 RUE DE LA VARENNE
+				ST MAUR DES FOSSES    94100
+				FR
+
+70-B3-D5   (hex)		TTC TELEKOMUNIKACE, s.r.o.
+6B1000-6B1FFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
+				Trebohosticka 5
+				Praha 10  Praha  10000
+				CZ
+
+70-B3-D5   (hex)		Smith Meter, Inc.
+816000-816FFF     (base 16)		Smith Meter, Inc.
+				1602 Wagner Ave.
+				Erie  PA  16514
+				US
+
+70-B3-D5   (hex)		The Institute of Mine Seismology
+930000-930FFF     (base 16)		The Institute of Mine Seismology
+				175 Tinderbox Road
+				Tinderbox, Hobart  Tasmania  7054
+				AU
+
+70-B3-D5   (hex)		Beijing Wing ICT Technology Co., Ltd.
+EBB000-EBBFFF     (base 16)		Beijing Wing ICT Technology Co., Ltd.
+				Room901，Fuhai international harbour Building,Daliushu Road No.17,Haidian District
+				Beijing  Beijing  100081
+				CN
+
+70-B3-D5   (hex)		HDANYWHERE
+60E000-60EFFF     (base 16)		HDANYWHERE
+				Unit 23 Link Business Centre
+				Malvern  Worcs  WR14 1UQ
+				GB
+
+70-B3-D5   (hex)		Revolution Retail Systems, LLC
+B53000-B53FFF     (base 16)		Revolution Retail Systems, LLC
+				1840 Hutton Drive Ste 130
+				Carrollton  TX  75006
+				US
+
+70-B3-D5   (hex)		APG Cash Drawer, LLC
+37A000-37AFFF     (base 16)		APG Cash Drawer, LLC
+				5250 Industrial Blvd NE
+				Minneapolis  MN  55421
+				US
+
+70-B3-D5   (hex)		Pivothead
+63C000-63CFFF     (base 16)		Pivothead
+				1224 Speer Blvd. 
+				Denver  CO  80204
+				US
+
+70-B3-D5   (hex)		exceet electronics GesmbH
+A85000-A85FFF     (base 16)		exceet electronics GesmbH
+				Wildbichlerstraße 2e
+				Ebbs  Austria  6341
+				AT
+
+70-B3-D5   (hex)		digital-spice
+AFF000-AFFFFF     (base 16)		digital-spice
+				toyohira529-2
+				chino  nagano  391-0213
+				JP
+
+70-B3-D5   (hex)		Miguel Corporate Services Pte Ltd
+136000-136FFF     (base 16)		Miguel Corporate Services Pte Ltd
+				18 Sin Ming Lane #06-32 Midview City
+				Singapore    573960
+				SG
+
+70-B3-D5   (hex)		XotonicsMED GmbH
+C06000-C06FFF     (base 16)		XotonicsMED GmbH
+				Gewerbestrasse, 19
+				Treuen OT Hartmannsgrün  Saxony  08233
+				DE
+
+70-B3-D5   (hex)		Megaflex Oy
+7E5000-7E5FFF     (base 16)		Megaflex Oy
+				Nuijamiestentie 3 c 1
+				Helsinki  Select State  00400
+				FI
+
+70-B3-D5   (hex)		FDSTiming
+5F4000-5F4FFF     (base 16)		FDSTiming
+				Rue du Nord 123
+				la Chaux-de-Fonds    2300
+				CH
+
+70-B3-D5   (hex)		Euklis by GSG International
+D32000-D32FFF     (base 16)		Euklis by GSG International
+				via Colombo 23
+				Trezzano sul Naviglio  MI  20090
+				IT
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+9C7000-9C7FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+D9A000-D9AFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+70-B3-D5   (hex)		PTYPE Co., LTD.
+6B0000-6B0FFF     (base 16)		PTYPE Co., LTD.
+				B121, B-dong, Keumkang Penterium IT Tower, 810, Gwanyand 2-dong, Dongan-gu
+				Anyang-si  Gyeonggi-do  14056
+				KR
+
+70-B3-D5   (hex)		WELT Corporation
+8CB000-8CBFFF     (base 16)		WELT Corporation
+				Seocho, Bangbae, 481-5
+				Seoul    06699
+				KR
+
+70-B3-D5   (hex)		Hangzhou SunTown Intelligent Science & Technology Co.,Ltd.
+90A000-90AFFF     (base 16)		Hangzhou SunTown Intelligent Science & Technology Co.,Ltd.
+				Hangzhou Zhenhua Road, Xihu District No. 298 West Port A District 2 16F
+				Hangzhou  Zhejiang Province  310030
+				CN
+
+70-B3-D5   (hex)		ATE Systems Inc
+594000-594FFF     (base 16)		ATE Systems Inc
+				85 Rangeway Road
+				N Billerica  MA  01862
+				US
+
+70-B3-D5   (hex)		TD ECOPHISIKA
+27A000-27AFFF     (base 16)		TD ECOPHISIKA
+				Vernadskogo,77
+				Moscow    119415
+				RU
+
+70-B3-D5   (hex)		Alion Science & Technology
+70F000-70FFFF     (base 16)		Alion Science & Technology
+				220 Salina Meadows Pkwy, Suite 210
+				Syracuse  NY  13212
+				US
+
+70-B3-D5   (hex)		Inova Design Solutions Ltd
+131000-131FFF     (base 16)		Inova Design Solutions Ltd
+				40 Occam Road
+				Guildford  SURREY  GU2 7YG
+				GB
+
+70-B3-D5   (hex)		DCNS
+989000-989FFF     (base 16)		DCNS
+				40-42 Rue du docteur Finlay
+				PARIS CEDEX 15    75732
+				FR
+
+70-B3-D5   (hex)		Instec, Inc.
+22F000-22FFFF     (base 16)		Instec, Inc.
+				5589 Arapahoe Avenue, Ste. 208
+				Boulder  CO  80303
+				US
+
+70-B3-D5   (hex)		Montalvo
+227000-227FFF     (base 16)		Montalvo
+				50 hutcherson drive
+				Gorham  ME  04038
+				US
+
+70-B3-D5   (hex)		DR.BRIDGE AQUATECH
+779000-779FFF     (base 16)		DR.BRIDGE AQUATECH
+				4F., No.40, Sec. 3, Chengde Rd., Datong Dist.,
+				 Taipei    103
+				TW
+
+70-B3-D5   (hex)		Design For Life Systems
+A20000-A20FFF     (base 16)		Design For Life Systems
+				Unit 15, Jubilee Enterprise Centre
+				Weymouth    DT47BS
+				GB
+
+70-B3-D5   (hex)		Finder SpA
+FEC000-FECFFF     (base 16)		Finder SpA
+				via Drubiaglio 14
+				Almese  TO  10040
+				IT
+
+70-B3-D5   (hex)		XGEM SAS
+498000-498FFF     (base 16)		XGEM SAS
+				9 Rue de la Négresse
+				Biarritz    64200
+				FR
+
+70-B3-D5   (hex)		Advanced Products Corporation Pte Ltd
+CED000-CEDFFF     (base 16)		Advanced Products Corporation Pte Ltd
+				5006 Ang Mo Kio Ave 5, #05-01/12 TECHPlace II
+				Singapore    569873
+				SG
+
+70-B3-D5   (hex)		D.Marchiori Srl
+42C000-42CFFF     (base 16)		D.Marchiori Srl
+				Via Pontina Km 43,856
+				Aprilia  LT  04011
+				IT
+
+70-B3-D5   (hex)		RF Track
+E82000-E82FFF     (base 16)		RF Track
+				80, avenue des buttes de Coesmes
+				Rennes    35700
+				FR
+
+70-B3-D5   (hex)		CRDE
+855000-855FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		aelettronica group srl
+4A7000-4A7FFF     (base 16)		aelettronica group srl
+				via matteotti,22
+				gaggiano  milano  20083
+				IT
+
+70-B3-D5   (hex)		JETI Technische Instrumente GmbH
+938000-938FFF     (base 16)		JETI Technische Instrumente GmbH
+				Tatzendpromenade 2
+				Jena    07745
+				DE
+
+70-B3-D5   (hex)		Flextronics Canafa Design Services
+F8D000-F8DFFF     (base 16)		Flextronics Canafa Design Services
+				1280 Teron Road
+				Ottawa  ON  K2K 2C1
+				CA
+
+70-B3-D5   (hex)		SOLVERIS sp. z o.o.
+4C7000-4C7FFF     (base 16)		SOLVERIS sp. z o.o.
+				Majdan Krasieniński 16A
+				Niemce  lubelskie  21-025
+				PL
+
+70-B3-D5   (hex)		Netemera Sp. z o.o.
+CA4000-CA4FFF     (base 16)		Netemera Sp. z o.o.
+				Ostrobramska 83/1208A
+				Warszawa  mazowieckie  04-175
+				PL
+
+70-B3-D5   (hex)		GS Industrie-Elektronik GmbH
+A53000-A53FFF     (base 16)		GS Industrie-Elektronik GmbH
+				Porschestrasse 11
+				Leverkusen    51381
+				DE
+
+70-B3-D5   (hex)		Morgan Schaffer Inc.
+7C2000-7C2FFF     (base 16)		Morgan Schaffer Inc.
+				8300 rue St-Patrick bureau 150
+				LaSalle  Quebec  H8N 2H1
+				CA
+
+70-B3-D5   (hex)		PEEK TRAFFIC
+68F000-68FFFF     (base 16)		PEEK TRAFFIC
+				5401 N SAM HOUSTON PKWY W
+				HOUSTON  TX  77086
+				US
+
+70-B3-D5   (hex)		Bel Power Solutions GmbH
+CAA000-CAAFFF     (base 16)		Bel Power Solutions GmbH
+				Ackerstrasse 56
+				Uster    8610
+				CH
+
+70-B3-D5   (hex)		Pycom Ltd
+499000-499FFF     (base 16)		Pycom Ltd
+				57 Avenue Road
+				Cranleigh  Surrey  GU6 7LJ
+				GB
+
+70-B3-D5   (hex)		Sertone, a division of Opti-Knights Ltd
+584000-584FFF     (base 16)		Sertone, a division of Opti-Knights Ltd
+				Chesterfield House, 207 Old Marylebone Road
+				London     NW1 5QP 
+				GB
+
+70-B3-D5   (hex)		SICS Swedish ICT
+7D5000-7D5FFF     (base 16)		SICS Swedish ICT
+				Isafjordsgatan 22
+				Kista  Stockholm  SE-164 40
+				SE
+
+70-B3-D5   (hex)		HOSIN INDUSTRIAL LIMITED
+692000-692FFF     (base 16)		HOSIN INDUSTRIAL LIMITED
+				15 Floor, Investment building, Shennan Road 4009, Futian
+				Shenzhen    518031
+				CN
+
+70-B3-D5   (hex)		ACS MOTION CONTROL
+9D2000-9D2FFF     (base 16)		ACS MOTION CONTROL
+				1 Hataasia St., Ramat Gabriel Industrial Park,
+				Migdal Ha'Emek  Israel  2307037
+				IL
+
+70-B3-D5   (hex)		CJSC «Russian telecom equipment company» (CJSC RTEC)
+6C5000-6C5FFF     (base 16)		CJSC «Russian telecom equipment company» (CJSC RTEC)
+				Zvenigorodskaya 2-nd  street 13/15
+				Moscow    123022
+				RU
+
+70-B3-D5   (hex)		Open Grow
+696000-696FFF     (base 16)		Open Grow
+				Edifício Expobeiras
+				Viseu  Viseu  3500 618
+				PT
+
+70-B3-D5   (hex)		Sontay Ltd.
+55A000-55AFFF     (base 16)		Sontay Ltd.
+				Four Elms Road
+				Edenbridge    TN86AB
+				GB
+
+70-B3-D5   (hex)		NEXTtec srl
+02D000-02DFFF     (base 16)		NEXTtec srl
+				Via Ivrea 71/B
+				Rivoli  TO  10098
+				IT
+
+70-B3-D5   (hex)		Survalent Technology Corporation
+78C000-78CFFF     (base 16)		Survalent Technology Corporation
+				7965 Heritage Road
+				Brampton  Ontario  L6Y 5X5
+				CA
+
+70-B3-D5   (hex)		LOGIX ITS Inc
+B7D000-B7DFFF     (base 16)		LOGIX ITS Inc
+				990 upton
+				lasalle  Quebec  h8r2t9
+				CA
+
+70-B3-D5   (hex)		Eiden Co.,Ltd.
+167000-167FFF     (base 16)		Eiden Co.,Ltd.
+				2-7-1 kurigi,asao-ku,kawasaki-shi
+				kanagawa    215-0033
+				JP
+
+70-B3-D5   (hex)		B.P.A. SRL
+49F000-49FFFF     (base 16)		B.P.A. SRL
+				Via Primo Villa 2/1
+				Burago di Molgora  MB  20875
+				IT
+
+70-B3-D5   (hex)		MART NETWORK SOLUTIONS LTD
+ABE000-ABEFFF     (base 16)		MART NETWORK SOLUTIONS LTD
+				ABBEY HOUSE, 450 BATH ROAD
+				LONGFORD  MIDDLESEX  UB70EB
+				GB
+
+70-B3-D5   (hex)		Rohde&Schwarz Topex SA
+186000-186FFF     (base 16)		Rohde&Schwarz Topex SA
+				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
+				Bucuresti  Romania  014142
+				RO
+
+70-B3-D5   (hex)		Kratos Analytical Ltd
+8DB000-8DBFFF     (base 16)		Kratos Analytical Ltd
+				Trafford Wharf Road
+				Manchester    M17 1GP
+				GB
+
+70-B3-D5   (hex)		WUHAN EASYLINKIN TECHNOLOGY co.,LTD
+88B000-88BFFF     (base 16)		WUHAN EASYLINKIN TECHNOLOGY co.,LTD
+				22 Optics Valley Ave.,East Lake New Technology Development Zone
+				WUHAN  HUBEI  430000
+				CN
+
+70-B3-D5   (hex)		Mechatronics Systems Private Limited
+5E6000-5E6FFF     (base 16)		Mechatronics Systems Private Limited
+				S No. 107, Warje, Mechatronics House, Off Mumbai Bangalore Bypass Highway, Near Rosary School,
+				Pune  Maharashtra  411058
+				IN
+
+70-B3-D5   (hex)		SensoTec GmbH
+AAC000-AACFFF     (base 16)		SensoTec GmbH
+				Hinter dem Turme 15
+				Braunschweig    38114
+				DE
+
+70-B3-D5   (hex)		CRDE
+6EC000-6ECFFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		CTAG - ESG36871424
+B55000-B55FFF     (base 16)		CTAG - ESG36871424
+				Pol. Industrial A Granxa, Calle A, parcelas 249-250
+				Porriño  Pontevedra  36400
+				ES
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+986000-986FFF     (base 16)		Aplex Technology Inc.
+				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+70-B3-D5   (hex)		TLV CO., LTD.
+A2C000-A2CFFF     (base 16)		TLV CO., LTD.
+				881 Nagasuna, Noguchi
+				Kakogawa, Hyogo    675-8511
+				JP
+
+70-B3-D5   (hex)		TATTILE SRL
+881000-881FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		mapna group
+04C000-04CFFF     (base 16)		mapna group
+				mirdamad
+				Tehran    0512258788
+				IR
+
+70-B3-D5   (hex)		w-tec AG
+A10000-A10FFF     (base 16)		w-tec AG
+				Dombachstrasse 1a
+				Bad Homburg    61352
+				DE
+
+70-B3-D5   (hex)		Vitrea Smart Home Technologies 
+51B000-51BFFF     (base 16)		Vitrea Smart Home Technologies 
+				11 Moshe Levi st.
+				Rishon Lezion    7565828
+				IL
+
+70-B3-D5   (hex)		Proconex 2010 Inc.
+CCE000-CCEFFF     (base 16)		Proconex 2010 Inc.
+				16753 Hymus Blvd.
+				Kirkland  Quebec  H9H 3L4
+				CA
+
+70-B3-D5   (hex)		Marques,S.A.
+643000-643FFF     (base 16)		Marques,S.A.
+				Zona Industrial da Alagoa - APT 3134
+				Águeda  Aveiro  3754-901
+				PT
+
+70-B3-D5   (hex)		Transelektronik Messgeräte GmbH
+A7C000-A7CFFF     (base 16)		Transelektronik Messgeräte GmbH
+				Theresiengasse 3
+				Wien  Austria  1180
+				AT
+
+70-B3-D5   (hex)		Dolotron d.o.o.
+91B000-91BFFF     (base 16)		Dolotron d.o.o.
+				Ziskovec 141
+				Cakovec    40000
+				HR
+
+70-B3-D5   (hex)		 GD Mission Systems
+39C000-39CFFF     (base 16)		 GD Mission Systems
+				8220 E. Roosevelt St.
+				Scottsdale  AZ  85257
+				US
+
+70-B3-D5   (hex)		APG Cash Drawer, LLC
+712000-712FFF     (base 16)		APG Cash Drawer, LLC
+				5250 Industrial Blvd NE
+				Minneapolis  MN  55421
+				US
+
+70-B3-D5   (hex)		Rimota Limited
+8F2000-8F2FFF     (base 16)		Rimota Limited
+				Archer House, Britland Estate, Northbourne Road
+				Eastbourne  East Sussex  BN22 8PW
+				GB
+
+70-B3-D5   (hex)		ZIGPOS GmbH
+879000-879FFF     (base 16)		ZIGPOS GmbH
+				Strehlener Straße 12/14
+				Dresden  Saxony  01069
+				DE
+
+70-B3-D5   (hex)		Novoptel GmbH
+AC3000-AC3FFF     (base 16)		Novoptel GmbH
+				EIM-E, Warburger Str. 100
+				Paderborn    33098
+				DE
+
+70-B3-D5   (hex)		Applied Radar, Inc.
+35A000-35AFFF     (base 16)		Applied Radar, Inc.
+				315 Commerce Park Road Unit 3
+				North Kingstown  RI  02886
+				US
+
+70-B3-D5   (hex)		MAVILI ELEKTRONIK TIC. VE SAN. A.S.
+DE4000-DE4FFF     (base 16)		MAVILI ELEKTRONIK TIC. VE SAN. A.S.
+				Serifali Mah. Kutup Sk. No: 27/1-2-4
+				Istanbul  Umraniye  34775
+				TR
+
+70-B3-D5   (hex)		Otto Bihler Maschinenfabrik GmbH & Co. KG
+6BF000-6BFFFF     (base 16)		Otto Bihler Maschinenfabrik GmbH & Co. KG
+				Lechbrucker Str. 15
+				Halblech    87642
+				DE
+
+70-B3-D5   (hex)		CRDE
+D65000-D65FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		ACD Elekronik GmbH
+DE2000-DE2FFF     (base 16)		ACD Elekronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		Instro Precision Limited
+B81000-B81FFF     (base 16)		Instro Precision Limited
+				15 Hornet Close, Pysons Road Industrial Estate
+				Broadstairs  Kent  CT10 2YD
+				GB
+
+70-B3-D5   (hex)		ES Industrial Systems Co., Ltd.
+9E0000-9E0FFF     (base 16)		ES Industrial Systems Co., Ltd.
+				B-dong, 12, Baekseokgongdan 3-gil, Seobuk-gu, Cheonan-si, Chungcheongnam-do
+				Cheonan-si  Chungcheongnam-do  31094
+				KR
+
+70-B3-D5   (hex)		Trapeze Software Group Inc
+A66000-A66FFF     (base 16)		Trapeze Software Group Inc
+				5265 Rockwell Dr NE
+				Cedar Rapids  IA  52402
+				US
+
+70-B3-D5   (hex)		InsideRF Co., Ltd.
+0FA000-0FAFFF     (base 16)		InsideRF Co., Ltd.
+				801 31 Seongsui-ro 24-gil Seongdong-gu
+				Seoul  Asia  04798
+				KR
+
+70-B3-D5   (hex)		Access Control Systems JSC
+1AB000-1ABFFF     (base 16)		Access Control Systems JSC
+				Bogatyrsky av. 18/1 office 505
+				Sankt-Peterburg    197348
+				RU
+
+70-B3-D5   (hex)		AT-Automation Technology GmbH
+028000-028FFF     (base 16)		AT-Automation Technology GmbH
+				Hermann-Boessow-Str. 6-8
+				Bad Oldesloe    D-23843
+				DE
+
+70-B3-D5   (hex)		tinnos
+CF2000-CF2FFF     (base 16)		tinnos
+				  4th Floor, 25, Banpo-daero
+				Seocho-gu  Seoul  06710
+				KR
+
+70-B3-D5   (hex)		G-PHILOS CO.,LTD
+D34000-D34FFF     (base 16)		G-PHILOS CO.,LTD
+				#602,3 RDWOOLIMLIONSVALLY 24, DUNCHONDAERO, 388BEAN-GIL JUNGWONGU
+				SEOUNGNAM-SI  GYEONGGI-DO  13403
+				KR
+
+70-B3-D5   (hex)		emperor brands
+658000-658FFF     (base 16)		emperor brands
+				11345 Ventura Blvd
+				Studio City  CA  90043
+				US
+
+70-B3-D5   (hex)		Dewetron GmbH
+D94000-D94FFF     (base 16)		Dewetron GmbH
+				Parkring 4
+				Grambach    8074
+				AT
+
+70-B3-D5   (hex)		Grace Design/Lunatec LLC
+A3B000-A3BFFF     (base 16)		Grace Design/Lunatec LLC
+				4689 Ute Highway
+				Longmont  CO  80503
+				US
+
+70-B3-D5   (hex)		IDA
+B89000-B89FFF     (base 16)		IDA
+				1801 38th Street South
+				Fargo  ND  58103
+				US
+
+70-B3-D5   (hex)		Uni Control System Sp. z o. o.
+05A000-05AFFF     (base 16)		Uni Control System Sp. z o. o.
+				Kartuska 391A
+				Gdansk  Pomorskie  80-125
+				PL
+
+70-B3-D5   (hex)		ATEME
+531000-531FFF     (base 16)		ATEME
+				6 rue Dewoitine
+				Vélizy-Villacoublay    78140
+				FR
+
+70-B3-D5   (hex)		Reactec Ltd
+7A0000-7A0FFF     (base 16)		Reactec Ltd
+				Vantage Point
+				Edinburgh  -- select a state --  EH11 4DF
+				GB
+
+70-B3-D5   (hex)		RedWave Labs Ltd
+B67000-B67FFF     (base 16)		RedWave Labs Ltd
+				173 Curie Ave
+				Didcot    OX11 0QG
+				GB
+
+70-B3-D5   (hex)		INFRASAFE/ ADVANTOR SYSTEMS 
+C32000-C32FFF     (base 16)		INFRASAFE/ ADVANTOR SYSTEMS 
+				12612 CHALLENGER PARKWAY 
+				ORLANDO  FL  32826
+				US
+
+70-B3-D5   (hex)		OCULI VISION
+17E000-17EFFF     (base 16)		OCULI VISION
+				Dubai Multi Commodities Centre, Jumeirah Lake Towers, HDS TOWER
+				Office 304  Dubai  PO Box 341061
+				AE
+
+70-B3-D5   (hex)		Wincode Technology Co., Ltd.
+3F4000-3F4FFF     (base 16)		Wincode Technology Co., Ltd.
+				13F., No.219, Sec. 3, Beixin Rd.,
+				Xindian Dist  New Taipei City   231
+				TW
+
+70-B3-D5   (hex)		Thinnect, Inc,
+E39000-E39FFF     (base 16)		Thinnect, Inc,
+				440 N Wolfe Rd
+				Sunnyvale  CA  94085
+				US
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+FD8000-FD8FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Power Ltd.
+37B000-37BFFF     (base 16)		Power Ltd.
+				Kazal str. 64-66
+				Budapest    1031
+				HU
+
+70-B3-D5   (hex)		CRDE
+CAC000-CACFFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		PushCorp, Inc.
+74E000-74EFFF     (base 16)		PushCorp, Inc.
+				3001 W. Kingsley Rd.
+				Garland  TX  75041
+				US
+
+70-B3-D5   (hex)		Mecsel Oy
+7E9000-7E9FFF     (base 16)		Mecsel Oy
+				Laitilankuja 5
+				Helsinki    00420
+				FI
+
+70-B3-D5   (hex)		Mango DSP, Inc.
+6DF000-6DFFFF     (base 16)		Mango DSP, Inc.
+				83 East Avenue Suite#115
+				Norwalk  CT  06851
+				US
+
+70-B3-D5   (hex)		AppTek
+06C000-06CFFF     (base 16)		AppTek
+				6867 Elm Street, Suite 300
+				McLean  VA  22101
+				US
+
+70-B3-D5   (hex)		VITEC MULTIMEDIA
+A9D000-A9DFFF     (base 16)		VITEC MULTIMEDIA
+				99, rue Pierre SÃ©mard
+				CHATILLON    92324 CEDEX
+				FR
+
+70-B3-D5   (hex)		Motec Pty Ltd
+618000-618FFF     (base 16)		Motec Pty Ltd
+				121 Merrindale Drive
+				Croydon South  Victoria  3136
+				AU
+
+70-B3-D5   (hex)		ORCA Technologies, LLC
+7CF000-7CFFFF     (base 16)		ORCA Technologies, LLC
+				934 Calle Negocio, Suite B
+				San Clemente  CA  92673
+				US
+
+70-B3-D5   (hex)		Connoiseur Electronics Private Limited
+8BE000-8BEFFF     (base 16)		Connoiseur Electronics Private Limited
+				Connoiseur House, #12, 13th Main, 12th cross, Doopanahalli, H.A.L. 2nd Stage, Indiranagar
+				Bangalore  Karnataka  560038
+				IN
+
+70-B3-D5   (hex)		SA Instrumentation Limited
+733000-733FFF     (base 16)		SA Instrumentation Limited
+				Mill Court, Mill Lane
+				Tayport  Fife  DD6 9EL
+				GB
+
+70-B3-D5   (hex)		Orange Tree Technologies Ltd
+FB5000-FB5FFF     (base 16)		Orange Tree Technologies Ltd
+				173 Curie Avenue, Harwell Oxford
+				Didcot  Oxfordshire  OX11 0QG
+				GB
+
+70-B3-D5   (hex)		Tornado Modular Systems
+23E000-23EFFF     (base 16)		Tornado Modular Systems
+				Inzhenernaya st. 4a
+				Novosibirsk    630128
+				RU
+
+70-B3-D5   (hex)		Pedax Danmark
+286000-286FFF     (base 16)		Pedax Danmark
+				Tinvej 5
+				Espergærde  Sjælland  3060
+				DK
+
+70-B3-D5   (hex)		MARKUS LABS
+F65000-F65FFF     (base 16)		MARKUS LABS
+				Potocna 16
+				Kosice    04001
+				SK
+
+70-B3-D5   (hex)		MobiPromo
+09E000-09EFFF     (base 16)		MobiPromo
+				10, 64-72 Beresford Rd
+				Lilydale  Victoria  3140
+				AU
+
+70-B3-D5   (hex)		Nordic Automation Systems AS
+B02000-B02FFF     (base 16)		Nordic Automation Systems AS
+				Strandgata 12
+				Hareid  Møre og Romsdal  6060
+				NO
+
+70-B3-D5   (hex)		Elektronik & Präzisionsbau Saalfeld GmbH
+187000-187FFF     (base 16)		Elektronik & Präzisionsbau Saalfeld GmbH
+				Remschützer Straße 1
+				Saalfeld  Thüringen  07318
+				DE
+
+70-B3-D5   (hex)		TruTeq Devices (Pty) Ltd
+942000-942FFF     (base 16)		TruTeq Devices (Pty) Ltd
+				Ameton House, 1028 Clifton Avenue
+				Lyttelton Manor X3, Centurion  Gauteng  0157
+				ZA
+
+70-B3-D5   (hex)		Hatel Elektronik LTD. STI.
+1E3000-1E3FFF     (base 16)		Hatel Elektronik LTD. STI.
+				1348 Sok. No:2/V Keremogli Is Merkezi - Yenisehir
+				IZMIR  Konak  35170
+				TR
+
+70-B3-D5   (hex)		Picture Elements, Inc.
+0EE000-0EEFFF     (base 16)		Picture Elements, Inc.
+				777 Panoramic Way
+				Berkeley  CA  94704
+				US
+
+70-B3-D5   (hex)		Kendrion Mechatronics Center GmbH
+E49000-E49FFF     (base 16)		Kendrion Mechatronics Center GmbH
+				Werner-von-Siemens-Str. 12
+				Ilmenau    98693
+				DE
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+A92000-A92FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		IMAGE TECH CO.,LTD
+578000-578FFF     (base 16)		IMAGE TECH CO.,LTD
+				4-9-22,Sanarudai
+				Naka-ku,Hamamatsu  Shizuoka Prefecture  432-8021
+				JP
+
+70-B3-D5   (hex)		TATTILE SRL
+C7F000-C7FFFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+D9E000-D9EFFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		E2G srl
+659000-659FFF     (base 16)		E2G srl
+				Via Polveriera, 6
+				Novate Milanese  Milano  20026
+				IT
+
+70-B3-D5   (hex)		Flintab AB
+D60000-D60FFF     (base 16)		Flintab AB
+				Kabelvägen 4
+				Jönköping    55302
+				SE
+
+70-B3-D5   (hex)		FR-Team International SA
+476000-476FFF     (base 16)		FR-Team International SA
+				Zone industrielle lotissement Vulcalux 10
+				Windhof    8399
+				LU
+
+70-B3-D5   (hex)		Perceptics, LLC
+88A000-88AFFF     (base 16)		Perceptics, LLC
+				11130 Kingston Pike, Ste 6
+				Farragut  TN  37934
+				US
+
+70-B3-D5   (hex)		EMAC, Inc.
+729000-729FFF     (base 16)		EMAC, Inc.
+				2390 EMAC Way
+				Carbondale  IL  62901
+				US
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+605000-605FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		Kopis Mobile LLC
+A06000-A06FFF     (base 16)		Kopis Mobile LLC
+				3010 Lakeland Cv Suite M
+				Flowood  MS  39232
+				US
+
+70-B3-D5   (hex)		Smeg S.p.A.
+1C4000-1C4FFF     (base 16)		Smeg S.p.A.
+				via Leonardo da Vinci 4
+				Guastalla  RE  42016
+				IT
+
+70-B3-D5   (hex)		Dofuntech Co.,LTD.
+8F6000-8F6FFF     (base 16)		Dofuntech Co.,LTD.
+				RM306, Block E, RD Xinjunhuan,Pujiang
+				Minghang  Shanghai  201113
+				CN
+
+70-B3-D5   (hex)		Vista Research, Inc.
+D38000-D38FFF     (base 16)		Vista Research, Inc.
+				2231 Crystal Drive, Suite 515
+				Arlington  VA  22202
+				US
+
+70-B3-D5   (hex)		Abbott Medical Optics Inc.
+943000-943FFF     (base 16)		Abbott Medical Optics Inc.
+				510 Cottonwood Drive
+				Milpitas  CA  95035
+				US
+
+70-B3-D5   (hex)		TWIN DEVELOPMENT
+BF2000-BF2FFF     (base 16)		TWIN DEVELOPMENT
+				FAUBOURG DE BRUXELLES 320
+				GOSSSELIES    6041
+				BE
+
+70-B3-D5   (hex)		HAS co.,ltd.
+2B3000-2B3FFF     (base 16)		HAS co.,ltd.
+				4F Kojimachi Shimira Bldg., 4-1-5 Kojimachi
+				Chiyoda-ku  TOKYO  1020083
+				JP
+
+70-B3-D5   (hex)		AlyTech
+45C000-45CFFF     (base 16)		AlyTech
+				3 rue Condorcet
+				Juvisy sur Orge    91260
+				FR
+
+70-B3-D5   (hex)		RedLeaf Security
+7E3000-7E3FFF     (base 16)		RedLeaf Security
+				1226 Islington Avenue, Center Tower, 8-10th Floor
+				Toronto    M8X 1Y8
+				CA
+
+70-B3-D5   (hex)		CONSOSPY
+2F9000-2F9FFF     (base 16)		CONSOSPY
+				2, AVENUE GALILEE
+				CHASSENEUIL-DU-POITOU  VIENNE  86360
+				FR
+
+70-B3-D5   (hex)		Dakton Microlabs LLC
+11D000-11DFFF     (base 16)		Dakton Microlabs LLC
+				520 Brickell Key Drive, A-1811
+				Miami  FL  33131
+				US
+
+70-B3-D5   (hex)		ChamSys Ltd
+0BE000-0BEFFF     (base 16)		ChamSys Ltd
+				Unit 3B Richmond Works, Pitt Road
+				Southampton  Hampshire  SO15 3FQ
+				GB
+
+70-B3-D5   (hex)		Comark Interactive Solutions
+39D000-39DFFF     (base 16)		Comark Interactive Solutions
+				430 Fortune Blvd
+				Milford  MA  01757
+				US
+
+70-B3-D5   (hex)		Wave Music Ltd
+A3C000-A3CFFF     (base 16)		Wave Music Ltd
+				Suite 1309 Asia Standard Tower
+				59-65 Queens Road Central   Hong Kong  000000
+				HK
+
+70-B3-D5   (hex)		Yönnet Akıllı Bina ve Otomasyon Sistemleri 
+C77000-C77FFF     (base 16)		Yönnet Akıllı Bina ve Otomasyon Sistemleri 
+				Şebnem Sokak Tavukçuoglu
+				Istanbul  Bostancı/Kadıköy  34744
+				TR
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+A95000-A95FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		EPD Electronics
+5B1000-5B1FFF     (base 16)		EPD Electronics
+				5 Acee Drive
+				Natrona Heights  PA  15065
+				US
+
+70-B3-D5   (hex)		HUSTY M.Styczen J.Hupert sp.j.
+B28000-B28FFF     (base 16)		HUSTY M.Styczen J.Hupert sp.j.
+				ul.Rzepakowa 5e
+				Krakow  malopolska  31-989
+				PL
+
+70-B3-D5   (hex)		Wuxi New Optical Communication Co.,Ltd.
+524000-524FFF     (base 16)		Wuxi New Optical Communication Co.,Ltd.
+				Room 301,Building No. 2, Zhongguancun Software Park Taihu Sub-park
+				Wuxi  Jiangsu  214315
+				CN
+
+70-B3-D5   (hex)		WICOM1 GmbH
+57D000-57DFFF     (base 16)		WICOM1 GmbH
+				Im Frauental 15
+				Amberg  Bavaria  92224
+				DE
+
+70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S.L.
+A12000-A12FFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
+				Antoni Isern 4 baixos
+				Reus  Tarragona  43205
+				ES
+
+70-B3-D5   (hex)		Net And Print Inc.
+AF5000-AF5FFF     (base 16)		Net And Print Inc.
+				52-1, Aza Kawakubo,
+				Koriyama  Fukushima  963-0725
+				JP
+
+70-B3-D5   (hex)		SmartGuard LLC
+C01000-C01FFF     (base 16)		SmartGuard LLC
+				3660 Technology Drive NE
+				Minneapolis  MN  55418
+				US
+
+70-B3-D5   (hex)		INFOSOFT DIGITAL DESIGN & SERVICES PRIVATE LIMITED
+4EB000-4EBFFF     (base 16)		INFOSOFT DIGITAL DESIGN & SERVICES PRIVATE LIMITED
+				104-105, Suneja Tower-1
+				New Delhi  Delhi  110058
+				IN
+
+70-B3-D5   (hex)		Shachihata Inc.
+6FB000-6FBFFF     (base 16)		Shachihata Inc.
+				37 , SHINMEI-CHO , KOUWA
+				INAZAWA  AICHI  492-8102
+				JP
+
+70-B3-D5   (hex)		ERMINE Corporation
+D73000-D73FFF     (base 16)		ERMINE Corporation
+				Hirooka-Harashinden 573-6, SK-Residence,
+				Shiojiri  Nagano  399-0706
+				JP
+
+70-B3-D5   (hex)		Netbric Technology Co.,Ltd.
+64A000-64AFFF     (base 16)		Netbric Technology Co.,Ltd.
+				Room 801D, POWER CREATIVE #E, 1st Shangdi
+				  BeiJing  100085
+				CN
+
+70-B3-D5   (hex)		Golden Grid Systems
+20A000-20AFFF     (base 16)		Golden Grid Systems
+				2775 Curry Street
+				pleasanton  California  94588
+				US
+
+70-B3-D5   (hex)		CRDE
+7C8000-7C8FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		SURTEC
+5FC000-5FCFFF     (base 16)		SURTEC
+				616 avenue de l'Europe
+				Le Creusot  burgundy  71206
+				FR
+
+70-B3-D5   (hex)		GLOBALCOM ENGINEERING SPA
+D3F000-D3FFFF     (base 16)		GLOBALCOM ENGINEERING SPA
+				Via Volta 9
+				MORNAGO  VA  21020
+				IT
+
+70-B3-D5   (hex)		Precitec Optronik GmbH
+0C5000-0C5FFF     (base 16)		Precitec Optronik GmbH
+				Schleussnerstraße 54
+				Neu-Isenburg  Hessen  63263
+				DE
+
+70-B3-D5   (hex)		Swiftnet SOC Ltd
+76A000-76AFFF     (base 16)		Swiftnet SOC Ltd
+				Bldg 22, Cambridge Office Park
+				Centurion  Gauteng  0157
+				ZA
+
+70-B3-D5   (hex)		Triax A/S
+D7E000-D7EFFF     (base 16)		Triax A/S
+				Bjornkaervej 3
+				Hornsyld  Denmark  8783
+				DK
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+EA4000-EA4FFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		NARA CONTROLS INC.
+FDF000-FDFFFF     (base 16)		NARA CONTROLS INC.
+				NARA BUILDING, 12TH FLOOR 719
+				SEOUL  SEOUL  100-043
+				KR
+
+70-B3-D5   (hex)		ART SPA
+E7A000-E7AFFF     (base 16)		ART SPA
+				VOC.PISCHIELLO, 20
+				PASSIGNANO SUL TRASIMENO  PG  06065
+				IT
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+F00000-F00FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		Yaviar
+226000-226FFF     (base 16)		Yaviar
+				Mamina-Sibiryaka 145
+				Ekaterinburg  Sverdlovsk oblast  620137
+				RU
+
+70-B3-D5   (hex)		LumiGrow, Inc
+172000-172FFF     (base 16)		LumiGrow, Inc
+				8 Digital Drive
+				Novato  CA  94949
+				US
+
+70-B3-D5   (hex)		TRIUMPH BOARD a.s.
+D57000-D57FFF     (base 16)		TRIUMPH BOARD a.s.
+				Neklanova 122/15
+				Prague    12800
+				CZ
+
+70-B3-D5   (hex)		Hydra Controls
+3FF000-3FFFFF     (base 16)		Hydra Controls
+				291 Worcester Road
+				New Braintree  MA  01531
+				US
+
+70-B3-D5   (hex)		Elektro-System s.c.
+343000-343FFF     (base 16)		Elektro-System s.c.
+				Sienkiewicza 25
+				Kutno  łódzkie  99-300
+				PL
+
+70-B3-D5   (hex)		Dynetics, Inc.
+B91000-B91FFF     (base 16)		Dynetics, Inc.
+				1004 Explorer Blvd
+				Huntsville  AL  35806
+				US
+
+70-B3-D5   (hex)		Xiamen Maxincom Technologies Co., Ltd.
+9E7000-9E7FFF     (base 16)		Xiamen Maxincom Technologies Co., Ltd.
+				B1F, A District, HuaXun Building,
+				Xiamen  Fujian  361000
+				CN
+
+70-B3-D5   (hex)		Quadio Devices Private Limited
+472000-472FFF     (base 16)		Quadio Devices Private Limited
+				101 Business Avenue
+				Pune  Maharashtra  411001
+				IN
+
+70-B3-D5   (hex)		sydetion UG (h.b.)
+538000-538FFF     (base 16)		sydetion UG (h.b.)
+				Helfensteinstr. 14
+				GOEPPINGEN  BW  73037
+				DE
+
+70-B3-D5   (hex)		Bolide Technology Group, Inc.
+2DC000-2DCFFF     (base 16)		Bolide Technology Group, Inc.
+				468 S. San Dimas Ave.,
+				San Dimas  CA  91773
+				US
+
+70-B3-D5   (hex)		MC2-Technologies
+505000-505FFF     (base 16)		MC2-Technologies
+				5 rue du Colibri
+				Villeneuve d'Ascq  Nord  59650
+				FR
+
+70-B3-D5   (hex)		EIDOS s.p.a.
+35E000-35EFFF     (base 16)		EIDOS s.p.a.
+				Via dell'Industria, 11
+				CHIERI  TO  10023
+				IT
+
+70-B3-D5   (hex)		DuraComm Corporation
+6B3000-6B3FFF     (base 16)		DuraComm Corporation
+				6655 Troost Avenue
+				Kansas City  MO  64131
+				US
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+2EE000-2EEFFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		ID Lock AS
+F2D000-F2DFFF     (base 16)		ID Lock AS
+				Stasjonsveien 46
+				Moi  Rogaland  4460
+				NO
+
+70-B3-D5   (hex)		GACI
+4AD000-4ADFFF     (base 16)		GACI
+				5 avenue du Québec
+				Villebon sur Yvette  Essonne  91140
+				FR
+
+70-B3-D5   (hex)		Sensor Developments
+935000-935FFF     (base 16)		Sensor Developments
+				Nordre Kullerød 21
+				Sandefjord    3241
+				NO
+
+70-B3-D5   (hex)		Array Telepresence
+C2A000-C2AFFF     (base 16)		Array Telepresence
+				7593 Tylers Place Blvd.
+				West Chester  Ohio  45069
+				US
+
+70-B3-D5   (hex)		Solid State Disks Ltd
+C85000-C85FFF     (base 16)		Solid State Disks Ltd
+				The Granary
+				Reading  Berkshire  RG74BB
+				GB
+
+70-B3-D5   (hex)		dinosys
+F36000-F36FFF     (base 16)		dinosys
+				501,35,Gwangnaruro 6-gil,
+				Seoul  Seoul  133-832
+				KR
+
+70-B3-D5   (hex)		Solectrix
+342000-342FFF     (base 16)		Solectrix
+				Fürther Str. 244b
+				Nürnberg  Bayern  90429
+				DE
+
+70-B3-D5   (hex)		Signature Control Systems, LLC.
+E20000-E20FFF     (base 16)		Signature Control Systems, LLC.
+				425 Brice Rd. North
+				Blacklick  OH  43004
+				US
+
+70-B3-D5   (hex)		OAS Sweden AB
+347000-347FFF     (base 16)		OAS Sweden AB
+				Brorod 7774
+				Klippan  Skane  26492
+				SE
+
+70-B3-D5   (hex)		iSiS-Ex Limited
+530000-530FFF     (base 16)		iSiS-Ex Limited
+				Unit A & B Windmill Industrial Estate
+				Malton  North Yorkshire  YO17 6BT
+				GB
+
+70-B3-D5   (hex)		Herrick Tech Labs
+3F9000-3F9FFF     (base 16)		Herrick Tech Labs
+				20201 Century Blvd.
+				Germantown  MD  20874
+				US
+
+70-B3-D5   (hex)		Sarokal Test Systems Oy
+FA2000-FA2FFF     (base 16)		Sarokal Test Systems Oy
+				Paulaharjuntie 20 B 2
+				Oulu  Oulu  90530
+				FI
+
+70-B3-D5   (hex)		Profound Medical Inc.
+B8B000-B8BFFF     (base 16)		Profound Medical Inc.
+				3080 Yonge St Suite 4040
+				Toronto  Ontario  M4N3N1
+				CA
+
+70-B3-D5   (hex)		MECA SYSTEM
+A1C000-A1CFFF     (base 16)		MECA SYSTEM
+				1-906 INNOPLEX 552
+				Suwon-si  Gyeonggi-do  443380
+				KR
+
+70-B3-D5   (hex)		GE Aviation Cheltenham
+52B000-52BFFF     (base 16)		GE Aviation Cheltenham
+				Evesham Road
+				Cheltenham  Glos  GL52 8SF
+				GB
+
+70-B3-D5   (hex)		AMMT GmbH
+D80000-D80FFF     (base 16)		AMMT GmbH
+				Anselm-Feuerbach-Str. 6
+				Frankenthal  RLP  67227
+				DE
+
+70-B3-D5   (hex)		SAVRONİK ELEKTRONİK
+15F000-15FFFF     (base 16)		SAVRONİK ELEKTRONİK
+				ORGANİZE SAN BÖL.
+				ESKİŞEHİR  ODUNPAZARI  26110
+				TR
+
+70-B3-D5   (hex)		Jingtu Printing Systems Co., Ltd
+78B000-78BFFF     (base 16)		Jingtu Printing Systems Co., Ltd
+				25 Xiaoyun Road,
+				  Beijing  100027
+				CN
+
+70-B3-D5   (hex)		Hear Gear, Inc.
+A26000-A26FFF     (base 16)		Hear Gear, Inc.
+				7800 Technology Drive
+				West Melbourne  Florida  32904
+				US
+
+70-B3-D5   (hex)		LECIP CORPORATION
+A50000-A50FFF     (base 16)		LECIP CORPORATION
+				1260-1
+				Motosu-shi  Gifu-ken  501-0401
+				JP
+
+70-B3-D5   (hex)		Russian Telecom Equipment Company
+D9B000-D9BFFF     (base 16)		Russian Telecom Equipment Company
+				3, Kapranov lane
+				Moscow  Moscow  123242
+				RU
+
+70-B3-D5   (hex)		Vaisala Oyj
+5FF000-5FFFFF     (base 16)		Vaisala Oyj
+				Vanha Nurmijarventie 21
+				VANTAA    Fin-01670
+				FI
+
+70-B3-D5   (hex)		Symbicon Ltd
+7A7000-7A7FFF     (base 16)		Symbicon Ltd
+				Heinimäentie 1
+				Kajaani  Finland  87250
+				FI
+
+70-B3-D5   (hex)		Soniclean Pty Ltd
+79B000-79BFFF     (base 16)		Soniclean Pty Ltd
+				38 Anderson Street
+				Thebarton  SA  5031
+				AU
+
+70-B3-D5   (hex)		GOMA ELETTRONICA SpA
+D79000-D79FFF     (base 16)		GOMA ELETTRONICA SpA
+				Via Carlo Capelli 89
+				TURIN  TO  10146
+				IT
+
+70-B3-D5   (hex)		GEGA ELECTRONIQUE
+65D000-65DFFF     (base 16)		GEGA ELECTRONIQUE
+				1 RUE SAINT ELOI
+				MONTCEAU LES MINES  SAONE ET LOIRE  71300
+				FR
+
+70-B3-D5   (hex)		Lumine Lighting Solutions Oy
+83F000-83FFFF     (base 16)		Lumine Lighting Solutions Oy
+				Albertinkatu 27b
+				Helsinki  Uusimaa  00180
+				FI
+
+70-B3-D5   (hex)		DISK Multimedia s.r.o.
+E70000-E70FFF     (base 16)		DISK Multimedia s.r.o.
+				Sokolska 13
+				Boskovice  JM  68001
+				CZ
+
+70-B3-D5   (hex)		Commsignia Ltd.
+C5A000-C5AFFF     (base 16)		Commsignia Ltd.
+				Bartok Bela ut 105-113. Building 4. Floor 2
+				Budapest  Budapest  1115
+				HU
+
+70-B3-D5   (hex)		CAS Medical Systems, Inc
+9DB000-9DBFFF     (base 16)		CAS Medical Systems, Inc
+				44 East Industrial Road
+				Branford  CT  06405
+				US
+
+70-B3-D5   (hex)		JSC Electrical Equipment Factory
+A6E000-A6EFFF     (base 16)		JSC Electrical Equipment Factory
+				Otradnaya str, 6
+				Moscow    129626
+				RU
+
+70-B3-D5   (hex)		Airborne Engineering Limited
+46B000-46BFFF     (base 16)		Airborne Engineering Limited
+				3 Landmark House
+				Glastonbury  Somerset  BA6 9FR
+				GB
+
+70-B3-D5   (hex)		Alpha Elettronica s.r.l.
+F7E000-F7EFFF     (base 16)		Alpha Elettronica s.r.l.
+				Strada Antolini 2/a
+				Collecchio  Parma  43044
+				IT
+
+70-B3-D5   (hex)		Head
+3E3000-3E3FFF     (base 16)		Head
+				kita-ku tenjinbashi 2-2-25
+				Osaka-shi  Osaka  5300041
+				JP
+
+70-B3-D5   (hex)		hangzhou battle link technology Co.,Ltd
+ED5000-ED5FFF     (base 16)		hangzhou battle link technology Co.,Ltd
+				xipu road no. 1503 binke building, room 1606
+				hangzhou binjiang  zhejiang  310052
+				CN
+
+70-B3-D5   (hex)		CP contech electronic GmbH
+EB1000-EB1FFF     (base 16)		CP contech electronic GmbH
+				Westring 31a
+				Leopoldshöhe  NRW  33818
+				DE
+
+70-B3-D5   (hex)		Tecnint HTE SRL
+FC6000-FC6FFF     (base 16)		Tecnint HTE SRL
+				Via della Tecnica 16/18
+				Osnago  Lecco  23875
+				IT
+
+70-B3-D5   (hex)		Communication Technology Ltd.
+0A4000-0A4FFF     (base 16)		Communication Technology Ltd.
+				11F,No.166, Jian 1th Rd.,Jhonghe Dist.
+				11F,No.166, Jian 1th Rd.,Jhonghe Dist.    
+				TW
+
+70-B3-D5   (hex)		Haag-Streit AG
+5C5000-5C5FFF     (base 16)		Haag-Streit AG
+				Gartenstadtstrasse 10
+				Koeniz  Bern  CH-3098
+				CH
+
+70-B3-D5   (hex)		DSP DESIGN
+5E4000-5E4FFF     (base 16)		DSP DESIGN
+				TAPTON PK INNOVATION CENTRE
+				CHESTERFIELD  DERBYSHIRE  S41 0TZ
+				GB
+
+70-B3-D5   (hex)		ACS MOTION CONTROL
+0EC000-0ECFFF     (base 16)		ACS MOTION CONTROL
+				1 Hataasia St., Ramat Gabriel Industrial Park,
+				Migdal Ha'Emek  Israel  2307037
+				IL
+
+70-B3-D5   (hex)		speedsignal GmbH
+C25000-C25FFF     (base 16)		speedsignal GmbH
+				Aeussere Oberaustr. 20
+				Rosenheim  Bavaria  83026
+				DE
+
+70-B3-D5   (hex)		astozi consulting Tomasz Zieba
+DF0000-DF0FFF     (base 16)		astozi consulting Tomasz Zieba
+				ul. Inzynierska 8/20
+				Nowa Sol  Lubuskie  67-100
+				PL
+
+70-B3-D5   (hex)		FUELCELLPOWER
+0A5000-0A5FFF     (base 16)		FUELCELLPOWER
+				D-301, Bundang Technopark, yatop-dong
+				Gyeonggi-do, Korea  Bundang-gu, Seongnam-si  463-760
+				KR
+
+70-B3-D5   (hex)		MOG Laboratories Pty Ltd
+84A000-84AFFF     (base 16)		MOG Laboratories Pty Ltd
+				18 Boase St
+				Brunswick  VIC  3056
+				AU
+
+70-B3-D5   (hex)		iungo
+6F3000-6F3FFF     (base 16)		iungo
+				Vrouwenlaan 62
+				Zwolle  Overijssel  8017 HS
+				NL
+
+70-B3-D5   (hex)		Power Security Systems Ltd.
+AFA000-AFAFFF     (base 16)		Power Security Systems Ltd.
+				Kazal str. 64-66
+				Budapest  Budapest  1031
+				HU
+
+70-B3-D5   (hex)		Plum sp. z o.o
+104000-104FFF     (base 16)		Plum sp. z o.o
+				Ignatki 27a
+				Kleosin  podlaskie  16-001
+				PL
+
+70-B3-D5   (hex)		Multipure International
+CDE000-CDEFFF     (base 16)		Multipure International
+				7251 Cathedral Rock Dr.
+				Las Vegas  Nevada  89128
+				US
+
+70-B3-D5   (hex)		KST technology
+0AB000-0ABFFF     (base 16)		KST technology
+				164-1, KST b/d., Bangi-dong, songpa-gu
+				SEOUL  N/A  138-050
+				KR
+
+70-B3-D5   (hex)		Phoniro Systems AB
+731000-731FFF     (base 16)		Phoniro Systems AB
+				Rorkullsvagen 4
+				Halmstad  Halland  30241
+				SE
+
+70-B3-D5   (hex)		Peek Traffic
+501000-501FFF     (base 16)		Peek Traffic
+				2906 Corporate Way
+				Palmetto  FL  34235
+				US
+
+70-B3-D5   (hex)		NELS Ltd.
+82C000-82CFFF     (base 16)		NELS Ltd.
+				bldg.23, h.5, proezd 4806.
+				Moscow, Zelenograd  Moscow  124498
+				RU
+
+70-B3-D5   (hex)		Environexus
+A62000-A62FFF     (base 16)		Environexus
+				50 Ricketts Road
+				Mount Waverley  VIC  3149
+				AU
+
+70-B3-D5   (hex)		PCSC
+A57000-A57FFF     (base 16)		PCSC
+				3541 Challenger Street
+				Torrance  CA  90503
+				US
+
+70-B3-D5   (hex)		VECTARE Inc
+6D9000-6D9FFF     (base 16)		VECTARE Inc
+				10340 Democracy Ln Ste 101
+				Fairfax  VA  22030
+				US
+
+70-B3-D5   (hex)		Stmovic
+8F5000-8F5FFF     (base 16)		Stmovic
+				201 2, 3 th.
+				Gangdonggu  Seoul  134-811
+				KR
+
+70-B3-D5   (hex)		AGR International
+ABF000-ABFFFF     (base 16)		AGR International
+				615 Whitestown Road
+				Butler  PA  16001
+				US
+
+70-B3-D5   (hex)		BKM-Micronic Richtfunkanlagen GmbH
+ABC000-ABCFFF     (base 16)		BKM-Micronic Richtfunkanlagen GmbH
+				Im Steinernen Kreuz 19
+				Wurmberg    75449
+				DE
+
+70-B3-D5   (hex)		SSL - Electrical Aerospace Ground Equipment Section
+03B000-03BFFF     (base 16)		SSL - Electrical Aerospace Ground Equipment Section
+				3852 Fabian Way
+				Palo Alto  CALIFORNIA  94303
+				US
+
+70-B3-D5   (hex)		Kubu, Inc.
+19C000-19CFFF     (base 16)		Kubu, Inc.
+				991 El Cajon Way
+				Palo Alto  CA  94303
+				US
+
+70-B3-D5   (hex)		DORLET SAU
+B3C000-B3CFFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		Videri Inc.
+33C000-33CFFF     (base 16)		Videri Inc.
+				541 West 23rd Street
+				New York  NY  10011
+				US
+
+70-B3-D5   (hex)		AL ZAJEL MODERN TELECOMM
+F68000-F68FFF     (base 16)		AL ZAJEL MODERN TELECOMM
+				PO BOX:3932
+				AL QURUM  MUSCAT  112
+				OM
+
+70-B3-D5   (hex)		idaqs Co.,Ltd.
+634000-634FFF     (base 16)		idaqs Co.,Ltd.
+				M&I Building 2F
+				Suginami-Ku  Tokyo  167-0042
+				JP
+
+70-B3-D5   (hex)		RFL Electronics, Inc.
+54E000-54EFFF     (base 16)		RFL Electronics, Inc.
+				353 Powerville Road
+				Booton Twp.  NJ  07005
+				US
+
+70-B3-D5   (hex)		TWC
+204000-204FFF     (base 16)		TWC
+				12101 Airport Way
+				Broomfield  CO  80021
+				US
+
+70-B3-D5   (hex)		Schwer+Kopka GmbH
+099000-099FFF     (base 16)		Schwer+Kopka GmbH
+				Herkner Str. 4
+				Weingarten  Baden Württemberg  88250
+				DE
+
+70-B3-D5   (hex)		Private
+C6A000-C6AFFF     (base 16)		Private
+
+70-B3-D5   (hex)		Marimo electronics Co.,Ltd.
+029000-029FFF     (base 16)		Marimo electronics Co.,Ltd.
+				1071,SUWAGATA
+				UEDA  NAGANO  3860032
+				JP
+
+70-B3-D5   (hex)		Woodside Electronics
+E27000-E27FFF     (base 16)		Woodside Electronics
+				1311 Bluegrass Pl
+				Woodland  California  95776
+				US
+
+70-B3-D5   (hex)		DSP DESIGN
+C81000-C81FFF     (base 16)		DSP DESIGN
+				TAPTON PK INNOVATION CENTRE
+				CHESTERFIELD  DERBYSHIRE  S41 0TZ
+				GB
+
+70-B3-D5   (hex)		MI INC.
+E53000-E53FFF     (base 16)		MI INC.
+				3F Daiichi-Heiwa-Bldg. 5-1, Kabuto-cho
+				TOKYO  Chuo-ku  103-0026
+				JP
+
+70-B3-D5   (hex)		adidas AG
+7A9000-7A9FFF     (base 16)		adidas AG
+				Adi-Dassler-Strasse 1
+				Herzogenaurach  Bayern  91074
+				DE
+
+70-B3-D5   (hex)		O-Net Automation Technology (Shenzhen)Limited
+EE4000-EE4FFF     (base 16)		O-Net Automation Technology (Shenzhen)Limited
+				#35 Cuijing Road,Pingshan New District,Guangdong,Shenzhen.China
+				Shenzhen  Guangdong  518118
+				CN
+
+70-B3-D5   (hex)		Myro Control, LLC
+B2A000-B2AFFF     (base 16)		Myro Control, LLC
+				201 164th Ave NE
+				Redmond  WA  98052
+				US
+
+70-B3-D5   (hex)		Labotect Labor-Technik-Göttingen GmbH
+61F000-61FFFF     (base 16)		Labotect Labor-Technik-Göttingen GmbH
+				Kampweg 12
+				Rosdorf    37124
+				DE
+
+70-B3-D5   (hex)		AOT System GmbH
+655000-655FFF     (base 16)		AOT System GmbH
+				Am Becketal 14
+				  Bremen  28755
+				DE
+
+70-B3-D5   (hex)		Baader Planetarium GmbH
+E07000-E07FFF     (base 16)		Baader Planetarium GmbH
+				Zur Sternwarte
+				Mammendorf  Bavaria  82291
+				DE
+
+70-B3-D5   (hex)		Acco Brands Europe
+6F6000-6F6FFF     (base 16)		Acco Brands Europe
+				Oxford house
+				Aylesbury  Buckinghamshire  HP21 8SZ
+				GB
+
+70-B3-D5   (hex)		SINTOKOGIO, LTD
+42F000-42FFFF     (base 16)		SINTOKOGIO, LTD
+				3-1, Honohara
+				Toyokawa  Aichi  4428505
+				JP
+
+70-B3-D5   (hex)		Sensor Highway Ltd
+702000-702FFF     (base 16)		Sensor Highway Ltd
+				Unit 7, The Quadrangle
+				Romsey  United Kingdom  SO51 9DL
+				GB
+
+70-B3-D5   (hex)		Don Electronics Ltd
+044000-044FFF     (base 16)		Don Electronics Ltd
+				Westfield Industrial Estate
+				Leeds  West Yorkshire  LS19 7LX
+				GB
+
+70-B3-D5   (hex)		Scanvaegt Nordic A/S
+F38000-F38FFF     (base 16)		Scanvaegt Nordic A/S
+				Johann Gutenbergs vej 5-9
+				Aarhus N    8200
+				DK
+
+70-B3-D5   (hex)		Dromont S.p.A.
+C2C000-C2CFFF     (base 16)		Dromont S.p.A.
+				via Borzone 42
+				Grinzane Cavour  Cuneo  12060
+				IT
+
+70-B3-D5   (hex)		InAccess Networks SA
+077000-077FFF     (base 16)		InAccess Networks SA
+				12, Sorou str.
+				Maroussi  Athens  GR15125
+				GR
+
+70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S. L.
+4C1000-4C1FFF     (base 16)		QUERCUS TECHNOLOGIES, S. L.
+				Antoni Isern 4
+				Reus  Tarragona  43205
+				ES
+
+70-B3-D5   (hex)		FLSmidth
+D4E000-D4EFFF     (base 16)		FLSmidth
+				Vigerslev Allé 77
+				Valby  Copenhagen  2500
+				DK
+
+70-B3-D5   (hex)		Nexus Tech. VN
+B8A000-B8AFFF     (base 16)		Nexus Tech. VN
+				2139 Corktree Ln
+				San Jose  California  95132
+				US
+
+70-B3-D5   (hex)		Lenoxi Automation s.r.o.
+D8B000-D8BFFF     (base 16)		Lenoxi Automation s.r.o.
+				Lipa 218
+				Lipa u Havlickova Brodu  Vysocina  58257
+				
+
+70-B3-D5   (hex)		Ingenieurbuero SOMTRONIK
+814000-814FFF     (base 16)		Ingenieurbuero SOMTRONIK
+				Riesebusch 17
+				Bad Schwartau  Schleswig Holstein  23611
+				DE
+
+70-B3-D5   (hex)		XTech2 SIA
+29D000-29DFFF     (base 16)		XTech2 SIA
+				Katrinas dambis 24a-15
+				  Riga  LV1045
+				LV
+
+70-B3-D5   (hex)		ProConnections, Inc.
+0A9000-0A9FFF     (base 16)		ProConnections, Inc.
+				239 Littleton Road
+				Westford  Massachusettes  01886
+				US
+
+70-B3-D5   (hex)		SBS-Feintechnik GmbH & Co. KG
+ECD000-ECDFFF     (base 16)		SBS-Feintechnik GmbH & Co. KG
+				Hermann-Burger-Str. 31
+				Schonach    78136
+				DE
+
+70-B3-D5   (hex)		ACS electronics srl
+35C000-35CFFF     (base 16)		ACS electronics srl
+				Via Lamaneigra 10/R
+				Tribogna  Genova  16030
+				
+
+70-B3-D5   (hex)		Fantom Wireless, Inc.
+190000-190FFF     (base 16)		Fantom Wireless, Inc.
+				156 2nd Street, Suite #614
+				San Francisco  CA  94014
+				
+
+70-B3-D5   (hex)		PLCiS
+0E0000-0E0FFF     (base 16)		PLCiS
+				B115,Lotte plaza Bldg,971-1,
+				Suwon  GyungGi-Do  443-811
+				KR
+
+70-B3-D5   (hex)		Ultra Electronics Sonar System Division
+3ED000-3EDFFF     (base 16)		Ultra Electronics Sonar System Division
+				418, Bridport Road
+				Greenford  Middlesex  UB6 8UA
+				GB
+
+00-1B-C5   (hex)		Dialine
+0C8000-0C8FFF     (base 16)		Dialine
+				1 allee du pressoir
+				Sucy en Brie  Val de Marne  94370
+				FR
+
+00-1B-C5   (hex)		WIZZILAB SAS
+0C7000-0C7FFF     (base 16)		WIZZILAB SAS
+				64 rue Greneta
+				Paris    75002
+				FR
+
+00-1B-C5   (hex)		ELDES
+0C4000-0C4FFF     (base 16)		ELDES
+				Ukmerges 283B
+				Vilnius    06313
+				LT
+
+00-1B-C5   (hex)		Denki Kogyo Company, Limited
+0B9000-0B9FFF     (base 16)		Denki Kogyo Company, Limited
+				13-4 Satsuki-cho
+				Kanuma-shi  Tochigi  3220014
+				JP
+
+00-1B-C5   (hex)		Exibea AB
+0B5000-0B5FFF     (base 16)		Exibea AB
+				Ekmansgatan 3
+				411  SE-  41132
+				SE
+
+00-1B-C5   (hex)		FSM Solutions Limited
+0B3000-0B3FFF     (base 16)		FSM Solutions Limited
+				Granatny per 2/9-73
+				Moscow  Moscow  123001
+				RU
+
+00-1B-C5   (hex)		Roslen Eco-Networking Products
+0B1000-0B1FFF     (base 16)		Roslen Eco-Networking Products
+				2010 Vada Ranch Road
+				Auburn  CA  95603
+				US
+
+00-1B-C5   (hex)		Navitar Inc
+09D000-09DFFF     (base 16)		Navitar Inc
+				200 Commerce Dr
+				Rochester  NY  14623
+				US
+
+00-1B-C5   (hex)		Sanstreak Corp.
+096000-096FFF     (base 16)		Sanstreak Corp.
+				300 Santana Row
+				San Jose  CA  95128
+				US
+
+00-1B-C5   (hex)		Ambient Devices, Inc.
+093000-093FFF     (base 16)		Ambient Devices, Inc.
+				One Broadway
+				Cambridge  MA  02142
+				US
+
+00-1B-C5   (hex)		Arnouse Digital Devices, Corp.
+092000-092FFF     (base 16)		Arnouse Digital Devices, Corp.
+				1983 Marcus Ave., Suite 104
+				Lake Success  New York  11042
+				US
+
+00-1B-C5   (hex)		Unilever R&amp;D
+08F000-08FFFF     (base 16)		Unilever R&amp;D
+				Port Sunlight
+				Bebington  Wirral  ch63 3jw
+				GB
+
+00-1B-C5   (hex)		Nistica
+08B000-08BFFF     (base 16)		Nistica
+				745 Route 202-206
+				Bridgewater  NJ  08807
+				US
+
+00-1B-C5   (hex)		Oberon microsystems, Inc.
+085000-085FFF     (base 16)		Oberon microsystems, Inc.
+				Technoparkstrasse 1
+				Zurich  ZH  8005
+				CH
+
+00-1B-C5   (hex)		head
+07C000-07CFFF     (base 16)		head
+				kita-ku tenjinbashi 2-2-25
+				Osaka-shi  Osaka  5300041
+				JP
+
+00-1B-C5   (hex)		Greatcom AG
+07D000-07DFFF     (base 16)		Greatcom AG
+				Gewerbestrasse 20
+				Egg  ZH  8132
+				CH
+
+00-1B-C5   (hex)		LUMINO GmbH
+080000-080FFF     (base 16)		LUMINO GmbH
+				Europark Fichtenhain A8
+				Krefeld  NRW  47807
+				US
+
+00-1B-C5   (hex)		Datasat Digital Entertainment
+069000-069FFF     (base 16)		Datasat Digital Entertainment
+				9631 Topanga Canyon Place
+				Chatsworth  California  91311
+				US
+
+00-1B-C5   (hex)		Embit srl 
+067000-067FFF     (base 16)		Embit srl 
+				via Emilia est, 911
+				Modena  Modena  41122
+				IT
+
+00-1B-C5   (hex)		Enkora Oy Ltd
+064000-064FFF     (base 16)		Enkora Oy Ltd
+				Köydenpunojankatu 8 G
+				Helsinki  Uusimaa  00180
+				FI
+
+00-1B-C5   (hex)		Scientific-Technical Center Epsilon Limited company
+061000-061FFF     (base 16)		Scientific-Technical Center Epsilon Limited company
+				Shkiperskiy Protok, plot 14, building 1
+				St.-Petersburg  -  199106
+				RU
+
+00-1B-C5   (hex)		optiMEAS GmbH
+058000-058FFF     (base 16)		optiMEAS GmbH
+				Am Houiller Platz 4
+				Friedrichsdorf    61381
+				DE
+
+00-1B-C5   (hex)		EREE Electronique
+057000-057FFF     (base 16)		EREE Electronique
+				6 avenue Dr Schweitzer
+				MEYZIEU    69882
+				FR
+
+00-1B-C5   (hex)		LUMIPLAN TRANSPORT 
+055000-055FFF     (base 16)		LUMIPLAN TRANSPORT 
+				1 ,Impasse Augustin Fresnel
+				SAINT-HERBLAIN    44815
+				FR
+
+00-1B-C5   (hex)		EUROCONTROL S.p.A.
+049000-049FFF     (base 16)		EUROCONTROL S.p.A.
+				Via Varenna 52/A
+				Genova  Italy  16155
+				IT
+
+00-1B-C5   (hex)		Marvel Digital International Limited
+045000-045FFF     (base 16)		Marvel Digital International Limited
+				15/F Siu On Centre
+				Wanchai    HKSAR
+				HK
+
+00-1B-C5   (hex)		JE Suunnittelu Oy
+033000-033FFF     (base 16)		JE Suunnittelu Oy
+				Teollisuustie 16
+				Pietarsaari    68600
+				FI
+
+00-1B-C5   (hex)		InterCEL Pty Ltd
+034000-034FFF     (base 16)		InterCEL Pty Ltd
+				33 Glenvale Crescent
+				Mulgrave  Victoria  3170
+				AU
+
+00-1B-C5   (hex)		ADIXEIN LIMITED
+031000-031FFF     (base 16)		ADIXEIN LIMITED
+				14 Plater Drive
+				Oxford  Oxfordshire  OX2 6QT
+				GB
+
+00-1B-C5   (hex)		Care Everywhere LLC
+02C000-02CFFF     (base 16)		Care Everywhere LLC
+				9 Tech Circle
+				Natick  MA  01760
+				US
+
+00-1B-C5   (hex)		Saturn South Pty Ltd
+02B000-02BFFF     (base 16)		Saturn South Pty Ltd
+				4 Maning Avenue
+				Sandy Bay  Tasmania  7005
+				AU
+
+00-1B-C5   (hex)		STECHWIN.CO.LTD.
+028000-028FFF     (base 16)		STECHWIN.CO.LTD.
+				368-2, HwaGok 1-Dong
+				Seoul    157-884
+				KR
+
+00-1B-C5   (hex)		CJSC STC  SIMOS
+022000-022FFF     (base 16)		CJSC STC  SIMOS
+				41, Geroyev Khasana Str.
+				Perm    614990
+				RU
+
+00-1B-C5   (hex)		Momentum Data Systems
+020000-020FFF     (base 16)		Momentum Data Systems
+				17330 Brookhurst Street
+				Fountain Valley  CA  92708
+				US
+
+00-1B-C5   (hex)		Openpeak, Inc
+021000-021FFF     (base 16)		Openpeak, Inc
+				1750 Clint Moore Rd
+				Boca Raton  Florida  33487
+				US
+
+00-1B-C5   (hex)		Saturn Solutions Ltd
+01F000-01FFFF     (base 16)		Saturn Solutions Ltd
+				Ingles Yard
+				Folkestone  Kent  CT20 2RY
+				GB
+
+00-1B-C5   (hex)		Energotechnica OOO NPP Ltd
+016000-016FFF     (base 16)		Energotechnica OOO NPP Ltd
+				3, Lermontova str.
+				Penza    
+				RU
+
+00-1B-C5   (hex)		Mercury HMI Ltd
+00A000-00AFFF     (base 16)		Mercury HMI Ltd
+				George House
+				Malton  North Yorkshire  Y017 6YB
+				GB
+
+00-1B-C5   (hex)		Softel SA de CV
+010000-010FFF     (base 16)		Softel SA de CV
+				Camino a Santa Teresa 
+				Tlalpan    14010
+				MX
+
+00-1B-C5   (hex)		Quantum Technology Sciences, Inc.
+00C000-00CFFF     (base 16)		Quantum Technology Sciences, Inc.
+				1980 N. Atlantic Ave., Suite 930
+				Cocoa Beach  FL  32931
+				US
+
+00-1B-C5   (hex)		Solomon Systech Pte Ltd
+009000-009FFF     (base 16)		Solomon Systech Pte Ltd
+				3 Bishan Place,
+				    579838
+				SG
+
+70-B3-D5   (hex)		Biennebi s.r.l.
+537000-537FFF     (base 16)		Biennebi s.r.l.
+				Via Santi 23
+				Bione  Brescia  25070
+				IT
+
+70-B3-D5   (hex)		ORtek Technology, Inc.
+3D0000-3D0FFF     (base 16)		ORtek Technology, Inc.
+				13F, no.150, Jian-Yi Rd., ZhongHe Dist.
+				New Taipei City  Taiwan  23511
+				TW
+
+70-B3-D5   (hex)		Primalucelab isrl
+329000-329FFF     (base 16)		Primalucelab isrl
+				VIA BRENTELLA 53/7
+				ROVEREDO IN PIANO  PN  33080
+				IT
+
+70-B3-D5   (hex)		cal4care Pte Ltd
+043000-043FFF     (base 16)		cal4care Pte Ltd
+				118 Aljunied AVE 2
+				SINGAPORE  SINGAPORE  380118
+				SG
+
+70-B3-D5   (hex)		Golding Audio Ltd
+454000-454FFF     (base 16)		Golding Audio Ltd
+				8 Peartree Business Centre, Stanway
+				Colchester  Essex  CO30JN
+				GB
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+81D000-81DFFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
+0DD000-0DDFFF     (base 16)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
+				Room 201,Building A,No.1,Qianhai 1st Road,Shengang cooperation zone,Qianhai
+				Shenzhen    518054
+				CN
+
+70-B3-D5   (hex)		TATTILE SRL
+EC5000-EC5FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Lumentum
+BFD000-BFDFFF     (base 16)		Lumentum
+				460 N McCarthy Blvd
+				Milpitas  CA  95035
+				US
+
+70-B3-D5   (hex)		Nuance Hearing Ltd.
+569000-569FFF     (base 16)		Nuance Hearing Ltd.
+				Raoul Wallenberg 24, Building A1, Floor 3
+				Tel Aviv    6971920
+				IL
+
+70-B3-D5   (hex)		Connected Response
+C9C000-C9CFFF     (base 16)		Connected Response
+				12 Meiklejohn Street
+				Stirling  Stirling  FK9 5HQ
+				GB
+
+70-B3-D5   (hex)		IHI Rotating Machinery Engineering Co.,Ltd.
+89C000-89CFFF     (base 16)		IHI Rotating Machinery Engineering Co.,Ltd.
+				1, Shin-nakahara-cho, Isogo-ku
+				Yokohama  Kanagawa  235-8501
+				JP
+
+70-B3-D5   (hex)		iREA System Industry
+113000-113FFF     (base 16)		iREA System Industry
+				Rm 210, Sahwa-ro 210, Uichang-gu
+				Changwon-si  Gyeongsangnam-do  51390
+				KR
+
+70-B3-D5   (hex)		Netzikon GmbH
+D3D000-D3DFFF     (base 16)		Netzikon GmbH
+				Gerberstrasse 34
+				Backnang    71522
+				DE
+
+70-B3-D5   (hex)		WiFi Nation Ltd
+95F000-95FFFF     (base 16)		WiFi Nation Ltd
+				Unit 53, CoWorkz Business Centre, Chester West Employment Park, Minerva Avenue,
+				Chester  Cheshire  CH1 4QL
+				GB
+
+70-B3-D5   (hex)		Suzhou Sapa Automotive Technology Co.,Ltd
+9AC000-9ACFFF     (base 16)		Suzhou Sapa Automotive Technology Co.,Ltd
+				Room 812, Building 1, Suhong Road 177
+				Suzhou  Jiangsu  215000
+				CN
+
+70-B3-D5   (hex)		LX Design House
+221000-221FFF     (base 16)		LX Design House
+				4 Cornwallis Street
+				Eveleigh  NSW  2015
+				AU
+
+70-B3-D5   (hex)		Amazon Technologies Inc.
+270000-270FFF     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno    89507
+				US
+
+70-B3-D5   (hex)		i-View Communication Inc.
+CA7000-CA7FFF     (base 16)		i-View Communication Inc.
+				2F, No.70, Min De Rd, Chutung, 310-48 Hsinchu, Taiwan
+				Hsinchu County  Chutung  310148
+				TW
+
+70-B3-D5   (hex)		Leidos
+E10000-E10FFF     (base 16)		Leidos
+				7031 Albert Einstein Drive
+				Columbia  MD  21046
+				US
+
+70-B3-D5   (hex)		Combilent
+C50000-C50FFF     (base 16)		Combilent
+				Ryttermarken 5
+				Farum    3520
+				DK
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+971000-971FFF     (base 16)		RCH ITALIA SPA 
+				VIA CENDON 39
+				SILEA   TREVISO   31057
+				IT
+
+70-B3-D5   (hex)		IOTIZE
+9CF000-9CFFFF     (base 16)		IOTIZE
+				960 chemin de la Croix Verte
+				Montbonnot-Saint-Martin  Isere  38330
+				FR
+
+70-B3-D5   (hex)		Contec Americas Inc.
+914000-914FFF     (base 16)		Contec Americas Inc.
+				3991 Sarno Rd
+				Melbourne  FL  32934
+				US
+
+70-B3-D5   (hex)		Sadel S.p.A.
+68B000-68BFFF     (base 16)		Sadel S.p.A.
+				via Marino Serenari, 1
+				Castel Maggiore  Bologna  40013
+				IT
+
+70-B3-D5   (hex)		NEXELEC
+40F000-40FFFF     (base 16)		NEXELEC
+				15 Allée FJ BROUSSAIS
+				VANNES    56000
+				FR
+
+70-B3-D5   (hex)		Loma Systems s.r.o.
+9B8000-9B8FFF     (base 16)		Loma Systems s.r.o.
+				Southwood
+				Farnborough  Hampshire  GU14 0NY
+				GB
+
+70-B3-D5   (hex)		Wartsila Voyage Limited
+A05000-A05FFF     (base 16)		Wartsila Voyage Limited
+				13-18 City Quay
+				Dublin 2    D02 ED70
+				IE
+
+70-B3-D5   (hex)		Wartsila Voyage Limited
+ED8000-ED8FFF     (base 16)		Wartsila Voyage Limited
+				13-18 City Quay
+				Dublin 2    D02 ED70
+				IE
+
+70-B3-D5   (hex)		Sakura Seiki Co.,Ltd.
+082000-082FFF     (base 16)		Sakura Seiki Co.,Ltd.
+				75-5, Imojiya
+				Chikuma-city  Nagano Prefecture  387-0015
+				JP
+
+70-B3-D5   (hex)		Amazon Technologies Inc.
+E6F000-E6FFFF     (base 16)		Amazon Technologies Inc.
+				P.O Box 8102
+				Reno  NV  89507
+				US
+
+70-B3-D5   (hex)		Mettler Toledo
+4FC000-4FCFFF     (base 16)		Mettler Toledo
+				1571 Northpointe Parkway
+				Lutz  FL  33558
+				US
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+56E000-56EFFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		GSP Sprachtechnologie GmbH
+695000-695FFF     (base 16)		GSP Sprachtechnologie GmbH
+				Teltowkanalstraße 1
+				Berlin    12247
+				DE
+
+70-B3-D5   (hex)		Clecell
+565000-565FFF     (base 16)		Clecell
+				26, Beobwon-ro 9-gil
+				Song-pa gu  Seoul  06210
+				KR
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+060000-060FFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		LLC NTC ACTOR
+86F000-86FFFF     (base 16)		LLC NTC ACTOR
+				Zelenograd, Sostovaya alleya, bld.6, str.22
+				Moscow    124489
+				RU
+
+70-B3-D5   (hex)		Leica Microsystems Ltd. Shanghai
+D30000-D30FFF     (base 16)		Leica Microsystems Ltd. Shanghai
+				258 Jinzang Road, Building 1, Pudong
+				Shanghai  Shanghai  201206
+				CN
+
+70-B3-D5   (hex)		Solid State Disks Ltd
+F91000-F91FFF     (base 16)		Solid State Disks Ltd
+				The Granary
+				Reading  Berkshire  RG74BB
+				GB
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+786000-786FFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		Scanvaegt Systems A/S
+C10000-C10FFF     (base 16)		Scanvaegt Systems A/S
+				Scanvaegt Systems A/S, Johann Gutenbergs Vej 5-9
+				Aarhus N    8200
+				DK
+
+70-B3-D5   (hex)		Toptech Systems, Inc.
+E97000-E97FFF     (base 16)		Toptech Systems, Inc.
+				1124 Florida Central Parkway
+				Longwood  FL  32750
+				US
+
+70-B3-D5   (hex)		Acouva, Inc.
+E0A000-E0AFFF     (base 16)		Acouva, Inc.
+				2269 Chestnut St
+				San Francisico  CA  94123
+				US
+
+70-B3-D5   (hex)		Suzhou Wansong Electric Co.,Ltd
+92D000-92DFFF     (base 16)		Suzhou Wansong Electric Co.,Ltd
+				Shaxi industrial development zone
+				Taicang  Jiangsu  215421
+				CN
+
+70-B3-D5   (hex)		Nanotok LLC
+EF1000-EF1FFF     (base 16)		Nanotok LLC
+				3075 Raccoon Point Rd
+				Eastsound  WA  98245
+				US
+
+70-B3-D5   (hex)		MacGray Services
+1D6000-1D6FFF     (base 16)		MacGray Services
+				404 Wyman St
+				Waltham  MA  02451
+				
+
+70-B3-D5   (hex)		Romteck Australia
+394000-394FFF     (base 16)		Romteck Australia
+				40 O’Malley Street, Osborne Park
+				Perth  Western Australia  6017
+				AU
+
+70-B3-D5   (hex)		Romteck Australia
+791000-791FFF     (base 16)		Romteck Australia
+				40 O’Malley Street, Osborne Park
+				Perth  Western Australia  6017
+				AU
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+642000-642FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Leontech Limited
+201000-201FFF     (base 16)		Leontech Limited
+				1208 WorkingBerg Commercial Buildung, 41-47 Marble Road
+				Hong Kong  Hong Kong  00000
+				HK
+
+70-B3-D5   (hex)		Technology Link Corporation
+B1B000-B1BFFF     (base 16)		Technology Link Corporation
+				Shin-Yokohama Kohoku-ku
+				yokohama  kanagawa  222-0033
+				JP
+
+70-B3-D5   (hex)		VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
+6BE000-6BEFFF     (base 16)		VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
+				B3, Bredon House, 321, Tettenhall Road, Tettenhall
+				Wolverhampton  West Midlands  WV6 0JZ
+				GB
+
+70-B3-D5   (hex)		Todd Digital Limited
+C9A000-C9AFFF     (base 16)		Todd Digital Limited
+				Level 15, 95 Customhouse Quay
+				Wellington    6011
+				NZ
+
+70-B3-D5   (hex)		JENG IoT BV
+5AF000-5AFFFF     (base 16)		JENG IoT BV
+				Steenbokstraat 33
+				APELDOORN  Gelderland  7324 AZ
+				NL
+
+70-B3-D5   (hex)		TXMission Ltd.
+F47000-F47FFF     (base 16)		TXMission Ltd.
+				CP House, Otterspool Way
+				Watford  Hertfordshire  WD25 8HU
+				GB
+
+70-B3-D5   (hex)		sensorway
+C52000-C52FFF     (base 16)		sensorway
+				A-339 samsong techno valley, 140 tongilro, deockyanggu
+				goyangsi  gyeonggido  10594
+				KR
+
+70-B3-D5   (hex)		Tucsen Photonics Co., Ltd. 
+8A7000-8A7FFF     (base 16)		Tucsen Photonics Co., Ltd. 
+				6F NO.1 building Caimao Zone, 756# Qi an Road, Gaishan Town, Cangshan Area, Fuzhou, Fujian, PR, CHINA.
+				fuzhou    350000
+				CN
+
+70-B3-D5   (hex)		Beijing Yourong Runda Rechnology Development Co.Ltd.
+980000-980FFF     (base 16)		Beijing Yourong Runda Rechnology Development Co.Ltd.
+				Changping District Science and Technology Park Advanced Road 37
+				Beijing    6219650
+				CN
+
+70-B3-D5   (hex)		KDT Corp.
+E72000-E72FFF     (base 16)		KDT Corp.
+				no1705-1, BLDG 3#, Lantian shixin plaza, keqiao zone
+				shaoxing  zhejiang  312030
+				CN
+
+70-B3-D5   (hex)		AUTOMATICA Y REGULACION S.A.
+EBF000-EBFFFF     (base 16)		AUTOMATICA Y REGULACION S.A.
+				Condell 1735, Nunoa
+				Santiago  RM  7770331
+				CL
+
+70-B3-D5   (hex)		R.C. Systems Inc
+52F000-52FFFF     (base 16)		R.C. Systems Inc
+				8621 hwy. 6
+				hitchcock  TX  77563
+				US
+
+70-B3-D5   (hex)		Dalcnet srl
+1CF000-1CFFFF     (base 16)		Dalcnet srl
+				Via Meucci 35
+				Brendola  Vicenza  36040
+				IT
+
+70-B3-D5   (hex)		Digital Solutions JSC
+D9F000-D9FFFF     (base 16)		Digital Solutions JSC
+				room 4, office 1, 3rd floor, building 7, house 9a, 2nd Sinichkina Str.
+				Moscow    111020
+				RU
+
+70-B3-D5   (hex)		DOGA
+62A000-62AFFF     (base 16)		DOGA
+				11 rue Lavoisier
+				MAUREPAS    78310
+				FR
+
+70-B3-D5   (hex)		Oculii
+B96000-B96FFF     (base 16)		Oculii
+				829 Space Dr
+				Beavercreek  OH  45434
+				US
+
+70-B3-D5   (hex)		XPS ELETRONICA LTDA
+4F3000-4F3FFF     (base 16)		XPS ELETRONICA LTDA
+				AVENIDA JAÇANÃ, 470/474 - VILA NELSON
+				SÃO PAULO  SÃO PAULO  02273-001
+				BR
+
+70-B3-D5   (hex)		Firecom, Inc.
+331000-331FFF     (base 16)		Firecom, Inc.
+				3927 59th Street
+				Woodside  NY  11377
+				US
+
+70-B3-D5   (hex)		Remote Diagnostic Technologies Ltd
+C99000-C99FFF     (base 16)		Remote Diagnostic Technologies Ltd
+				Pavilion C2 Ashwood Park, Ashwood Way
+				Basingstoke  Hampshire  RG23 8BG
+				GB
+
+70-B3-D5   (hex)		NEUROPHET, Inc.
+E31000-E31FFF     (base 16)		NEUROPHET, Inc.
+				3rd Floor, 175, Yeoksam-ro, Gangnam-gu, seoul
+				Seoul  Province  06247
+				KR
+
+70-B3-D5   (hex)		Chromateq
+944000-944FFF     (base 16)		Chromateq
+				191, allée de Lauzard, Bat. B, RDC 1 (Chromateq)
+				Saint Gély du Fesc    34980
+				FR
+
+70-B3-D5   (hex)		Elk Solutions, LLC
+1A7000-1A7FFF     (base 16)		Elk Solutions, LLC
+				12708 Misty Grove St
+				Moorpark  CA  93021
+				US
+
+70-B3-D5   (hex)		KAYA Instruments
+F3D000-F3DFFF     (base 16)		KAYA Instruments
+				20 HaMesila St.
+				Nesher     3688520
+				IL
+
+70-B3-D5   (hex)		Gogo Business Aviation
+3E0000-3E0FFF     (base 16)		Gogo Business Aviation
+				105 Edgeview Dr., Suite 300
+				Broomfield  CO  80021
+				US
+
+70-B3-D5   (hex)		Asiga Pty Ltd
+53E000-53EFFF     (base 16)		Asiga Pty Ltd
+				Unit 2, 19-21 Bourke Road
+				Alexandria  New South Wales  2015
+				AU
+
+70-B3-D5   (hex)		ENABLER LTD.
+15A000-15AFFF     (base 16)		ENABLER LTD.
+				29F Shiroyama Trust Tower 4-3-1 Toranomon 
+				Minato-ku  Tokyo  105-6029
+				JP
+
+70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
+62E000-62EFFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+70-B3-D5   (hex)		Salupo Sas
+898000-898FFF     (base 16)		Salupo Sas
+				Via Laganeto n. 129
+				Rocca di Capri Leone  Italia / ME / Sicilia  98070
+				IT
+
+70-B3-D5   (hex)		Nippon Safety co,ltd
+872000-872FFF     (base 16)		Nippon Safety co,ltd
+				1, suimeicho
+				Amagasaki  Hyogo  660-0082
+				JP
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+40D000-40DFFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		AnaPico AG
+0BB000-0BBFFF     (base 16)		AnaPico AG
+				Europa-Strasse 9
+				Glattbrugg  Schweiz  8152
+				CH
+
+70-B3-D5   (hex)		Season Electronics Ltd
+F46000-F46FFF     (base 16)		Season Electronics Ltd
+				600 Nest Business Park 
+				Havant  Hampshire  PO9 5TL
+				GB
+
+70-B3-D5   (hex)		WEPTECH elektronik GmbH
+9CD000-9CDFFF     (base 16)		WEPTECH elektronik GmbH
+				Ostring 10
+				Landau    76829
+				DE
+
+70-B3-D5   (hex)		Egag, LLC
+9A8000-9A8FFF     (base 16)		Egag, LLC
+				303 King James Ct
+				Upper Marlboro  MD  20774
+				US
+
+70-B3-D5   (hex)		Hermann Sewerin GmbH
+484000-484FFF     (base 16)		Hermann Sewerin GmbH
+				Robert-Bosch-Str. 3
+				Gütersloh  NRW  33334
+				DE
+
+70-B3-D5   (hex)		OZRAY
+629000-629FFF     (base 16)		OZRAY
+				D-#1514, GwangMyung SK Techno park, 60, Haan-ro, GwangMyung-si, Gyeonggi-do, Korea
+				GwangMyung-si  Gyeonggi-do, Korea  14322
+				KR
+
+70-B3-D5   (hex)		Algodue Elettronica Srl
+191000-191FFF     (base 16)		Algodue Elettronica Srl
+				Via P. Gobetti, 16F
+				Maggiora  NO  28014
+				IT
+
+70-B3-D5   (hex)		Beijing Vizum Technology Co.,Ltd.
+F33000-F33FFF     (base 16)		Beijing Vizum Technology Co.,Ltd.
+				Room603, Floor6, Block2, No.1 Zhongguancun, No.81 Beiqing Road
+				Beijing  Beijing  100094
+				CN
+
+70-B3-D5   (hex)		Volution Group UK
+687000-687FFF     (base 16)		Volution Group UK
+				Vent-Axia Ltd, Fleming Way
+				Crawley  WEST SUSSEX  RH10 9YX
+				GB
+
+70-B3-D5   (hex)		Vertex Co.,Ltd.
+8DD000-8DDFFF     (base 16)		Vertex Co.,Ltd.
+				4-1-17 Higashifuchinobe,Chuo-ku
+				Sagamihara  Kanagawa  252-0203
+				JP
+
+70-B3-D5   (hex)		Monnit Corporation
+393000-393FFF     (base 16)		Monnit Corporation
+				3400 S West Temple
+				Salt Lake City  UT  84115
+				US
+
+70-B3-D5   (hex)		Specialized Communications Corp.
+867000-867FFF     (base 16)		Specialized Communications Corp.
+				20940 Twin Springs Drive
+				Smithsburg    21783
+				US
+
+70-B3-D5   (hex)		eSight
+FD9000-FD9FFF     (base 16)		eSight
+				515 Legget Drive, Suite 200
+				Ottawa  ON  K2K3G4
+				CA
+
+70-B3-D5   (hex)		Nilar AB
+D99000-D99FFF     (base 16)		Nilar AB
+				Bönavägen 55
+				Gävle  Gavleborg  80647
+				SE
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+632000-632FFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		CT Company
+005000-005FFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+70-B3-D5   (hex)		Tomahawk Robotics
+0EB000-0EBFFF     (base 16)		Tomahawk Robotics
+				2412 Irwin St
+				Melbourne  FL  32901
+				US
+
+00-1B-C5   (hex)		Silvair
+0A0000-0A0FFF     (base 16)		Silvair
+				ul. Jasnogórska 44
+				Kraków    31-358
+				PL
+
+70-B3-D5   (hex)		JPEmbedded Mazan Filipek Sp. J.
+69D000-69DFFF     (base 16)		JPEmbedded Mazan Filipek Sp. J.
+				Strumienna 12
+				Krakow  Lesser Poland Voivodeship  30-609
+				PL
+
+70-B3-D5   (hex)		JT
+051000-051FFF     (base 16)		JT
+				203, Business Incubator Center,  Korea Polytechnic University, 237, Sangidaehak-ro,
+				Siheung-si  Gyeonggi-do  15073
+				KR
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+D06000-D06FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Guangzhou Wanglu 
+8D5000-8D5FFF     (base 16)		Guangzhou Wanglu 
+				2nd floor, Block C, DET building, No.2 Ruitai Road,Kaitai Street, Huangpu District
+				Guangzhou  Guangdong  510665
+				CN
+
+70-B3-D5   (hex)		Cominfo, Inc.
+6F5000-6F5FFF     (base 16)		Cominfo, Inc.
+				Nabrezi 695
+				Zlin    760 01
+				CZ
+
+70-B3-D5   (hex)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
+00F000-00FFFF     (base 16)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
+				No.2 Xinxiu Street, Hunnan District, Shenyang
+				Shenyang  Liaoning  110000
+				CN
+
+70-B3-D5   (hex)		7thSense Design Limited
+E46000-E46FFF     (base 16)		7thSense Design Limited
+				2 The Courtyard, Shoreham Road
+				Upper Beeding  West Sussex  BN44 3TN
+				GB
+
+70-B3-D5   (hex)		Weltek Technologies Co. Ltd.
+C48000-C48FFF     (base 16)		Weltek Technologies Co. Ltd.
+				Flat A-B, 12/F, Block 1, Wah Fung Ind. Centre, 33-39 Kwai Fung Crescent, Kwai Chung, N.T.
+				HK    852
+				HK
+
+70-B3-D5   (hex)		TimeMachines Inc.
+756000-756FFF     (base 16)		TimeMachines Inc.
+				300 S 68th Street Place, Suite 100
+				Lincoln  NE  68510
+				US
+
+70-B3-D5   (hex)		BirdDog Australia
+3B9000-3B9FFF     (base 16)		BirdDog Australia
+				Unit 1, 8 Theobald St
+				THORNBURY  VIC  3071
+				AU
+
+70-B3-D5   (hex)		Clarity Medical Pvt Ltd
+C0D000-C0DFFF     (base 16)		Clarity Medical Pvt Ltd
+				PLOT No. 1687A, JLPL  INDUSTRIAL AREA, SECTOR 82, MOHALI
+				MOHALI  Punjab  140306
+				IN
+
+70-B3-D5   (hex)		KRONOTECH SRL
+626000-626FFF     (base 16)		KRONOTECH SRL
+				VIALE UNGHERIA 125
+				UDINE  ITALY/UDINE  33100
+				IT
+
+70-B3-D5   (hex)		Algra tec AG
+80C000-80CFFF     (base 16)		Algra tec AG
+				Rigistr. 1
+				Merenschwand  Aargau  5634
+				CH
+
+70-B3-D5   (hex)		Enlaps
+2AF000-2AFFFF     (base 16)		Enlaps
+				29 chemin du vieux chene, Tarmac
+				MEYLAN    38240
+				FR
+
+70-B3-D5   (hex)		Comeo Technology Co.,Ltd
+242000-242FFF     (base 16)		Comeo Technology Co.,Ltd
+				5F-2,NO.237 , Zhong-Xiao  RD., BANG-QIAO Dist., New Taipei City
+				New Taipei CIty    22064
+				TW
+
+70-B3-D5   (hex)		BORMANN EDV und Zubehoer
+864000-864FFF     (base 16)		BORMANN EDV und Zubehoer
+				Lohwaldstr. 53
+				Neusaess  Bayern  85356
+				DE
+
+70-B3-D5   (hex)		Shangnuo company
+82B000-82BFFF     (base 16)		Shangnuo company
+				Nong'an district
+				Changchun  Jilin  130000
+				CN
+
+70-B3-D5   (hex)		Shanghai Westwell Information and Technology Company Ltd
+856000-856FFF     (base 16)		Shanghai Westwell Information and Technology Company Ltd
+				No.102,Lixi Road.ChangNing district
+				Shanghai  Shanghai  200050
+				CN
+
+70-B3-D5   (hex)		NaraControls Inc
+3FD000-3FDFFF     (base 16)		NaraControls Inc
+				youngdong daero
+				Seoul    06072
+				KR
+
+70-B3-D5   (hex)		Vision Sensing Co., Ltd.
+93F000-93FFFF     (base 16)		Vision Sensing Co., Ltd.
+				Yorikimachi park bld.5F, Yorikimachi1-5, Kita-ku
+				Osaka  Osaka  530-0036
+				JP
+
+70-B3-D5   (hex)		Opsys-Tech
+99D000-99DFFF     (base 16)		Opsys-Tech
+				26 Harokmim st
+				Holon    5885849
+				IL
+
+70-B3-D5   (hex)		Elektronik Art
+F32000-F32FFF     (base 16)		Elektronik Art
+				80 Melgiewska Str.
+				Lublin  Lublin  20234
+				PL
+
+70-B3-D5   (hex)		Nueon - The COR
+A1A000-A1AFFF     (base 16)		Nueon - The COR
+				101 Jefferson Drive
+				Menlo Park    94025
+				US
+
+70-B3-D5   (hex)		ABL Space Systems
+F7F000-F7FFFF     (base 16)		ABL Space Systems
+				224 Oregon St
+				El Segundo  CA  90245
+				US
+
+70-B3-D5   (hex)		DUEVI SRL
+F41000-F41FFF     (base 16)		DUEVI SRL
+				VIA BARD 12/A
+				TORINO  TORINO  10142
+				IT
+
+70-B3-D5   (hex)		Daifuku CO., Ltd.
+3A2000-3A2FFF     (base 16)		Daifuku CO., Ltd.
+				1225 Nakazaiji, Hino-cho, Gamo-gun, Shiga
+				Gamo-gun  Shiga-ken  529-1692
+				JP
+
+70-B3-D5   (hex)		CLARESYS LIMITED
+485000-485FFF     (base 16)		CLARESYS LIMITED
+				154E Brook Drive, Milton Park
+				Abingdon    OX14 4SD
+				GB
+
+70-B3-D5   (hex)		Elmeasure India Pvt Ltd
+93D000-93DFFF     (base 16)		Elmeasure India Pvt Ltd
+				No.47-P, KIADB Hardware Park, Huvinayakanahalli
+				Bengaluru  Karnataka  562149
+				IN
+
+70-B3-D5   (hex)		Panamera
+7B1000-7B1FFF     (base 16)		Panamera
+				Rua. Dr. Brasilio Vicente de Castro, 111
+				Critiba  Parana  81200-526
+				BR
+
+70-B3-D5   (hex)		QUNU LABS PRIVATE LIMITED
+9A6000-9A6FFF     (base 16)		QUNU LABS PRIVATE LIMITED
+				Centenary Building, 2nd Floor,, East Wing, No. 28 M.G. Road
+				BANGALORE  KARNATAKA  560025
+				IN
+
+70-B3-D5   (hex)		ALTIT.CO.,Ltd.
+552000-552FFF     (base 16)		ALTIT.CO.,Ltd.
+				Gasan Digital 1 ro 88, 1905
+				Seoul  Korea  08590
+				KR
+
+70-B3-D5   (hex)		Harman Connected Services Corporation India Pvt. Ltd.
+423000-423FFF     (base 16)		Harman Connected Services Corporation India Pvt. Ltd.
+				Plot No 3 & 3A, EOIZ Industrial Area, Sy.No.85 and 86, KIADB, Whitefield,
+				Bengaluru  Karnataka  560066
+				IN
+
+70-B3-D5   (hex)		Galaxy Next Generation, Inc.
+E1D000-E1DFFF     (base 16)		Galaxy Next Generation, Inc.
+				285 Big A Rd 
+				Toccoa  GA  30577
+				US
+
+70-B3-D5   (hex)		Gigaband IP LLC
+E9F000-E9FFFF     (base 16)		Gigaband IP LLC
+				85 N Brookside St
+				Chandler  AZ  85225
+				US
+
+70-B3-D5   (hex)		Intrinsic Group Limited
+663000-663FFF     (base 16)		Intrinsic Group Limited
+				The Maltings
+				Allendale  Northumberland  NE47 9EE
+				GB
+
+70-B3-D5   (hex)		Barcelona Smart Technologies
+D5E000-D5EFFF     (base 16)		Barcelona Smart Technologies
+				C/Joaquim Molins 5
+				Barcelona  Catalunya  08028
+				ES
+
+70-B3-D5   (hex)		C TECH BILISIM TEKNOLOJILERI SAN. VE TIC. A.S.
+DCD000-DCDFFF     (base 16)		C TECH BILISIM TEKNOLOJILERI SAN. VE TIC. A.S.
+				Teknopark İstanbul, TGB, Sanayi Mah. Teknopark Bulvarı, No:1, Blok:1 Kat:2, Kurtköy-Pendik 34912, İSTANBUL
+				Istanbul    34912
+				TR
+
+70-B3-D5   (hex)		TableConnect GmbH
+7BD000-7BDFFF     (base 16)		TableConnect GmbH
+				Schlossgasse 13/2/3
+				Vienna  Vienna  1050
+				AT
+
+70-B3-D5   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
+7EC000-7ECFFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
+				10545 Hardin Valley Rd
+				Knoxville  TN  37932
+				US
+
+70-B3-D5   (hex)		Eldes Ltd
+8B6000-8B6FFF     (base 16)		Eldes Ltd
+				Ukmerges 283b
+				Vilnius    LT-06313
+				LT
+
+70-B3-D5   (hex)		Foerster-Technik GmbH
+453000-453FFF     (base 16)		Foerster-Technik GmbH
+				Gerwigstraße 25
+				Engen  Baden-Württemberg  78234
+				DE
+
+70-B3-D5   (hex)		BTG Instruments AB
+D85000-D85FFF     (base 16)		BTG Instruments AB
+				Industrigatan 1-3
+				Saffle  Varmland  66132
+				SE
+
+70-B3-D5   (hex)		Circle Consult ApS
+23D000-23DFFF     (base 16)		Circle Consult ApS
+				Rundforbivej 271A
+				Naerum    2850
+				DK
+
+70-B3-D5   (hex)		CreevX
+BF4000-BF4FFF     (base 16)		CreevX
+				158A Staffordstown Rd
+				Randalstown  Antrim  BT41 3LH
+				GB
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+261000-261FFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Velvac Incorporated
+44F000-44FFFF     (base 16)		Velvac Incorporated
+				2405 S. Calhoun Road
+				New Berlin  WI  53151-2709
+				US
+
+70-B3-D5   (hex)		Connido Limited
+71D000-71DFFF     (base 16)		Connido Limited
+				35 Kingsland Road
+				London    E2 8AA
+				GB
+
+70-B3-D5   (hex)		EDF Lab
+BDC000-BDCFFF     (base 16)		EDF Lab
+				7 Bd Gaspard Monge
+				PALAISEAU    91120
+				FR
+
+70-B3-D5   (hex)		EarTex
+627000-627FFF     (base 16)		EarTex
+				41 Corsham Street
+				London  England  N1 6DR
+				GB
+
+70-B3-D5   (hex)		VALEO CDA
+51F000-51FFFF     (base 16)		VALEO CDA
+				Hummendorfer Str 74
+				Kronach    96317
+				DE
+
+70-B3-D5   (hex)		PANASONIC LIFE SOLUTIONS ELEKTRİK SANAYİ VE TİCARE
+EC8000-EC8FFF     (base 16)		PANASONIC LIFE SOLUTIONS ELEKTRİK SANAYİ VE TİCARE
+				Abdurrahmangazi Mah. Ebubekir Cad. No:44 Sancaktepe
+				Istanbul    34887
+				TR
+
+70-B3-D5   (hex)		Telco Antennas Pty Ltd
+256000-256FFF     (base 16)		Telco Antennas Pty Ltd
+				5/1 Roebuck St
+				Hemmant  QLD  4154
+				AU
+
+70-B3-D5   (hex)		enders GmbH
+D3E000-D3EFFF     (base 16)		enders GmbH
+				Sonnenstraße 39
+				Ergolding    84030
+				DE
+
+70-B3-D5   (hex)		DaiShin Information & Communications Co., Ltd
+560000-560FFF     (base 16)		DaiShin Information & Communications Co., Ltd
+				DaiShin I&C Bldg., 205-28, Gasan digital 1-ro Geumcheon-gu
+				Seoul  Seoul  08501
+				KR
+
+70-B3-D5   (hex)		ULSee Inc
+1B7000-1B7FFF     (base 16)		ULSee Inc
+				9F, No.97, Jingye 1st Road  Zhongshan Dist.,Taipei City 104451 Taiwan
+				Taipei  Taipei  104451
+				TW
+
+70-B3-D5   (hex)		Network Customizing Technologies Inc
+B4B000-B4BFFF     (base 16)		Network Customizing Technologies Inc
+				29, Yuseong-daero 1184beon-gil, Yuseong-gu
+				Daejeon    34109
+				KR
+
+70-B3-D5   (hex)		Nexus Electric S.A.
+CD8000-CD8FFF     (base 16)		Nexus Electric S.A.
+				Serú 63
+				Mendoza  Mendoza  M5500FNA
+				AR
+
+70-B3-D5   (hex)		SPE Smartico, LLC
+399000-399FFF     (base 16)		SPE Smartico, LLC
+				82G, Oleksandra Polya Avenue
+				Dnipro  Dnipropetrovsk  49000
+				UA
+
+70-B3-D5   (hex)		Austco Marketing & Service (USA) ltd.
+316000-316FFF     (base 16)		Austco Marketing & Service (USA) ltd.
+				9155 Sterling St Unit 100
+				Irving  TX  75063
+				US
+
+70-B3-D5   (hex)		ARKS Enterprises, Inc.
+43A000-43AFFF     (base 16)		ARKS Enterprises, Inc.
+				4304 Alfriends Trail
+				Virginia Beach  VA  23455-6102
+				US
+
+70-B3-D5   (hex)		CT Company
+39F000-39FFFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+70-B3-D5   (hex)		VONSCH
+491000-491FFF     (base 16)		VONSCH
+				Budovatelska 13
+				Brezno    97703
+				SK
+
+70-B3-D5   (hex)		Thesycon Software Solutions GmbH & Co. KG
+919000-919FFF     (base 16)		Thesycon Software Solutions GmbH & Co. KG
+				Werner-von-Siemens-Str. 2
+				Ilmenau    98693
+				DE
+
+70-B3-D5   (hex)		ZMBIZI APP LLC
+F49000-F49FFF     (base 16)		ZMBIZI APP LLC
+				10000 Santa Monica Blvd, Suite 503
+				LOS ANGELES  CA  90067
+				US
+
+70-B3-D5   (hex)		N A Communications LLC
+B92000-B92FFF     (base 16)		N A Communications LLC
+				3820 Ohio Ave Ste 12
+				St Charles  IL  60174
+				US
+
+70-B3-D5   (hex)		Bita-International Co., Ltd.
+1C6000-1C6FFF     (base 16)		Bita-International Co., Ltd.
+				2F., NO. 36, PARK ST., NANGANG DIST.,
+				TAIPEI    11560
+				TW
+
+70-B3-D5   (hex)		nexgenwave
+5BD000-5BDFFF     (base 16)		nexgenwave
+				1209 sicox tower, 484 Dunchon-daero, jungwon-gu
+				Sungnam-si  gyeonggi-do  13229
+				KR
+
+70-B3-D5   (hex)		EBZ SysTec GmbH
+1FA000-1FAFFF     (base 16)		EBZ SysTec GmbH
+				Bleicherstraße 7
+				Ravensburg  DE    88212
+				DE
+
+70-B3-D5   (hex)		TRIOPTICS
+A11000-A11FFF     (base 16)		TRIOPTICS
+				Strandbaddamm 6
+				Wedel  Schleswig-Holstein  22880
+				DE
+
+70-B3-D5   (hex)		SIAME
+66E000-66EFFF     (base 16)		SIAME
+				RUE DES MATHEMATIQUES
+				GROMBALIA    8030
+				TN
+
+70-B3-D5   (hex)		Lockheed Martin - THAAD
+9EE000-9EEFFF     (base 16)		Lockheed Martin - THAAD
+				4800 Bradford Drive
+				Huntsville  AL  35805
+				US
+
+70-B3-D5   (hex)		Plenty Unlimited Inc
+D04000-D04FFF     (base 16)		Plenty Unlimited Inc
+				590 Eccles Ave
+				South San Francisco  CA  94080
+				US
+
+70-B3-D5   (hex)		TT Group SRL
+BD7000-BD7FFF     (base 16)		TT Group SRL
+				Via Pazzano 112
+				Roma  RM  00118
+				IT
+
+70-B3-D5   (hex)		Aliter Technologies
+586000-586FFF     (base 16)		Aliter Technologies
+				Turcianska 16
+				Bratislava    82109
+				SK
+
+70-B3-D5   (hex)		Stecomp
+EE0000-EE0FFF     (base 16)		Stecomp
+				Bollaarsdijk 11
+				Brielle    3231LA
+				NL
+
+70-B3-D5   (hex)		TORGOVYY DOM  TEHNOLOGIY LLC
+7C0000-7C0FFF     (base 16)		TORGOVYY DOM  TEHNOLOGIY LLC
+				Gospytalnaya 10, ap. 109, village Selyatino, city Naro-Fominsk,
+				Moscow  Moscow Region  143345
+				RU
+
+70-B3-D5   (hex)		XJ ELECTRIC CO., LTD.
+F26000-F26FFF     (base 16)		XJ ELECTRIC CO., LTD.
+				#1298 XUJI AVENUE
+				XUCHANG  HENAN  461000
+				CN
+
+70-B3-D5   (hex)		Automata GmbH & Co. KG
+19D000-19DFFF     (base 16)		Automata GmbH & Co. KG
+				Gewerbering 5
+				Ried  Bavaria  86510
+				DE
+
+70-B3-D5   (hex)		Topic Embedded Products B.V.
+63D000-63DFFF     (base 16)		Topic Embedded Products B.V.
+				Materiaalweg 4
+				Best  Noord-Brabant  5681 RJ
+				NL
+
+70-B3-D5   (hex)		EcoG
+1AE000-1AEFFF     (base 16)		EcoG
+				Gaenslerweg 24
+				Furth  Bavaria  82041
+				DE
+
+70-B3-D5   (hex)		Hubbell Power Systems
+DDA000-DDAFFF     (base 16)		Hubbell Power Systems
+				353 Powerville Road
+				Boonton Township  NJ  07005
+				US
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+6D5000-6D5FFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Jiangsu Etern Compamy Limited
+DA0000-DA0FFF     (base 16)		Jiangsu Etern Compamy Limited
+				No. 1788 fenhu Guo Dao Road, Foho New&High-tech Industrial Development Zone, Wujiang
+				Suzhou  Jiangsu  215211
+				CN
+
+70-B3-D5   (hex)		JSC Ural Factories
+0FD000-0FDFFF     (base 16)		JSC Ural Factories
+				Gorky street 92
+				Izhevsk  Udmurtia  426000
+				RU
+
+70-B3-D5   (hex)		Semiconsoft, inc
+212000-212FFF     (base 16)		Semiconsoft, inc
+				83 PINE HILL RD
+				SOUTHBOROUGH  MA  01772
+				US
+
+70-B3-D5   (hex)		M.S. CONTROL
+CE0000-CE0FFF     (base 16)		M.S. CONTROL
+				139-141 Fitzgerald Street
+				WEST PERTH  WA  6005
+				AU
+
+70-B3-D5   (hex)		Master Meter Inc.
+A9F000-A9FFFF     (base 16)		Master Meter Inc.
+				101 Regency Pkwy
+				Mansfield  TX  76063
+				US
+
+70-B3-D5   (hex)		Rapiot
+265000-265FFF     (base 16)		Rapiot
+				Eteläesplanadi 2
+				Helsinki    00130
+				FI
+
+70-B3-D5   (hex)		S Labs sp. z o.o.
+C53000-C53FFF     (base 16)		S Labs sp. z o.o.
+				Dworska 1a/1u
+				Kraków  Lesser Poland  30-314
+				PL
+
+70-B3-D5   (hex)		Torion Plasma Corporation
+B70000-B70FFF     (base 16)		Torion Plasma Corporation
+				99 Hooper Rd, Unit #6
+				Barrie  Ontario  L4N9S3
+				CA
+
+70-B3-D5   (hex)		OMNISENSING PHOTONICS LLC
+70D000-70DFFF     (base 16)		OMNISENSING PHOTONICS LLC
+				8015 Four Quarter Road
+				Ellicott City  MD  21043
+				US
+
+70-B3-D5   (hex)		Smart Systems LLC
+746000-746FFF     (base 16)		Smart Systems LLC
+				Flat 1, building 7, Izmalkova street
+				Mykolaiv    54028
+				UA
+
+70-B3-D5   (hex)		Megger Germany GmbH
+59F000-59FFFF     (base 16)		Megger Germany GmbH
+				Röderaue 41
+				Radeburg    01471
+				DE
+
+70-B3-D5   (hex)		Leviathan Solutions Ltd.
+A69000-A69FFF     (base 16)		Leviathan Solutions Ltd.
+				Abel Jeno utca 23
+				Budapest    1113
+				HU
+
+70-B3-D5   (hex)		BluB0X Security, Inc.
+16D000-16DFFF     (base 16)		BluB0X Security, Inc.
+				9 Bartlet Street Suite 334
+				Andover  MA  01810
+				US
+
+70-B3-D5   (hex)		biosilver .co.,ltd
+D21000-D21FFF     (base 16)		biosilver .co.,ltd
+				2-14-4, shinyokohama
+				yokohama  kanagawa  2220033
+				JP
+
+70-B3-D5   (hex)		ACD Elekronik GmbH
+D6D000-D6DFFF     (base 16)		ACD Elekronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		Network Integrity Systems
+9FF000-9FFFFF     (base 16)		Network Integrity Systems
+				1937 Tate Blvd. SE
+				Hickory  NC  28602
+				US
+
+70-B3-D5   (hex)		Vemco Sp. z o. o.
+D45000-D45FFF     (base 16)		Vemco Sp. z o. o.
+				ul. Biala 1
+				Gdansk    80-435
+				PL
+
+70-B3-D5   (hex)		Beijing Xiansheng Technology Co., Ltd
+8D6000-8D6FFF     (base 16)		Beijing Xiansheng Technology Co., Ltd
+				Room 02, 102-1 / F, building 32, yard 69, Yanfu Road, Fangshan District
+				Beijing  Beijing  102488
+				CN
+
+70-B3-D5   (hex)		Subject Link Inc
+137000-137FFF     (base 16)		Subject Link Inc
+				9F-1, No. 77, Sec 4. Nanjing E. Rd., SongShan Dist.
+				Taipei City  Taiwan  105406
+				TW
+
+70-B3-D5   (hex)		Crane-elec. Co., LTD.
+1FB000-1FBFFF     (base 16)		Crane-elec. Co., LTD.
+				Tamakushicho-higashi 3-3-97
+				Higashi osaka  OSAKA  5780932
+				JP
+
+70-B3-D5   (hex)		Jabil
+736000-736FFF     (base 16)		Jabil
+				888 Executive Center Dr. W.
+				St.Petersubrg  FL  33702
+				US
+
+70-B3-D5   (hex)		AudioTEC LLC
+33A000-33AFFF     (base 16)		AudioTEC LLC
+				108 Scott Street
+				Ripon  WI  54971
+				US
+
+70-B3-D5   (hex)		IRT Technologies
+D13000-D13FFF     (base 16)		IRT Technologies
+				5580 BOULEVARD THIMENS
+				Saint-Laurent  Quebec  H4R 2K9
+				CA
+
+70-B3-D5   (hex)		11811347 CANADA Inc.
+7E6000-7E6FFF     (base 16)		11811347 CANADA Inc.
+				1215 13th St  SE, Suite 114
+				Calgary  AB  T2G 3J4
+				CA
+
+70-B3-D5   (hex)		Season Electronics Ltd
+BA0000-BA0FFF     (base 16)		Season Electronics Ltd
+				600 Nest Business Park 
+				Havant  Hampshire  PO9 5TL
+				GB
+
+70-B3-D5   (hex)		KST technology
+20B000-20BFFF     (base 16)		KST technology
+				KST B/D 4-5, Wiryeseong-daero 12-gil
+				Songpa-gu  Seoul  05636
+				KR
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+9B1000-9B1FFF     (base 16)		Aplex Technology Inc.
+				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
+				Shenzhen City  Guangdong  518129
+				CN
+
+70-B3-D5   (hex)		Santa Barbara Imaging Systems
+4E6000-4E6FFF     (base 16)		Santa Barbara Imaging Systems
+				340 Storke Road, Suite 101
+				Goleta  CA  93117
+				US
+
+70-B3-D5   (hex)		AM General Contractor
+2C6000-2C6FFF     (base 16)		AM General Contractor
+				Via Angelo Scarsellini 147
+				Genova  Italy  16149
+				IT
+
+70-B3-D5   (hex)		ProtoConvert Pty Ltd
+EC0000-EC0FFF     (base 16)		ProtoConvert Pty Ltd
+				2 Clyden Court
+				Burwood East  Victoria  3151
+				AU
+
+70-B3-D5   (hex)		Reflexion Medical
+298000-298FFF     (base 16)		Reflexion Medical
+				Reflexion Medical 25841 Industrial Blvd.
+				Hayward  CA  94545
+				US
+
+70-B3-D5   (hex)		Zumbach Electronic AG
+C19000-C19FFF     (base 16)		Zumbach Electronic AG
+				Hauptstrasse 93
+				Orpund  Bern  2552
+				CH
+
+70-B3-D5   (hex)		Lobaro GmbH
+E05000-E05FFF     (base 16)		Lobaro GmbH
+				Stadtdeich 7
+				Hamburg      20097
+				DE
+
+70-B3-D5   (hex)		LDA Audiotech
+685000-685FFF     (base 16)		LDA Audiotech
+				C/Severo Ochoa, 31
+				Malaga  Malaga  29590
+				ES
+
+70-B3-D5   (hex)		HORIZON.INC
+69B000-69BFFF     (base 16)		HORIZON.INC
+				1600 Aza-Shironoshita Asahi
+				Shin Asahi-cho  Takashima, Shiga  520-1501
+				JP
+
+70-B3-D5   (hex)		aelettronica group srl
+A14000-A14FFF     (base 16)		aelettronica group srl
+				via matteotti,22
+				gaggiano  milano  20083
+				IT
+
+70-B3-D5   (hex)		MedRx, Inc
+3B6000-3B6FFF     (base 16)		MedRx, Inc
+				1200 Starkey Rd Ste.105
+				Largo  FL  33771
+				US
+
+70-B3-D5   (hex)		ZIEHL-ABEGG SE
+698000-698FFF     (base 16)		ZIEHL-ABEGG SE
+				Heinz-Ziehl-Strasse 1
+				Kuenzelsau    74653
+				DE
+
+70-B3-D5   (hex)		Vema Venturi AB
+036000-036FFF     (base 16)		Vema Venturi AB
+				Johan på gårdas gata 5A
+				Gothenburg  Västra Götaland  41250
+				SE
+
+70-B3-D5   (hex)		Vendanor AS
+D0B000-D0BFFF     (base 16)		Vendanor AS
+				Grandevegen 13
+				Stryn    6783
+				NO
+
+70-B3-D5   (hex)		Tinkerforge GmbH
+509000-509FFF     (base 16)		Tinkerforge GmbH
+				Zur Brinke 7
+				Schloss Holte-Stukenbrock  NRW  33758
+				DE
+
+70-B3-D5   (hex)		4neXt S.r.l.s.
+E41000-E41FFF     (base 16)		4neXt S.r.l.s.
+				Via Leonardo da Vinci 15/4
+				Vigonovo  Veneto  30030
+				IT
+
+8C-1F-64   (hex)		Solace Systems Inc.
+460000-460FFF     (base 16)		Solace Systems Inc.
+				535 Legget Drive,
+				Kanata  Ontario  K2K3B8
+				CA
+
+8C-1F-64   (hex)		AUTOMATIZACION Y CONECTIVIDAD SA DE CV
+F41000-F41FFF     (base 16)		AUTOMATIZACION Y CONECTIVIDAD SA DE CV
+				LA GARITA ANDADOR 6 DUPLEX 1 CASA 2
+				CDMX  TLALPAN  14390
+				MX
+
+8C-1F-64   (hex)		AEM Singapore Pte Ltd
+7F1000-7F1FFF     (base 16)		AEM Singapore Pte Ltd
+				52 Serangoon North Ave 4
+				Singapore  Singapore  555853
+				SG
+
+8C-1F-64   (hex)		DAVE SRL
+726000-726FFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+8C-1F-64   (hex)		LLC EMS-Expert
+21C000-21CFFF     (base 16)		LLC EMS-Expert
+				Gorodskoy, st., d.39,1
+				Tula  Tula region  300012
+				RU
+
+8C-1F-64   (hex)		Gamber Johnson-LLC
+42B000-42BFFF     (base 16)		Gamber Johnson-LLC
+				3001 Borham Ave
+				Stevens Point  WI  54481
+				US
+
+8C-1F-64   (hex)		Green Access Ltd
+878000-878FFF     (base 16)		Green Access Ltd
+				Unit 1 Kensworthgate  200-204 High Street South
+				Dunstable  Bedfordshire   LU6 3HS
+				GB
+
+8C-1F-64   (hex)		QUERCUS TECHNOLOGIES, S.L.
+B9A000-B9AFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
+				Av. Onze de Setembre 19
+				Reus  Tarragona  43203
+				ES
+
+8C-1F-64   (hex)		Siemens Industry Software Inc.
+611000-611FFF     (base 16)		Siemens Industry Software Inc.
+				46871 Bayside Parkway
+				Fremont  CA  94538
+				US
+
+8C-1F-64   (hex)		ZMBIZI APP LLC
+572000-572FFF     (base 16)		ZMBIZI APP LLC
+				10000 Santa Monica Blvd, Suite 503
+				LOS ANGELES  CA  90067
+				US
+
+8C-1F-64   (hex)		Arcopie
+28A000-28AFFF     (base 16)		Arcopie
+				Office 438, YTC, 847, Buheung-ro, Gwangjeok-myeon
+				Yangju-si  Alabama  11416
+				KR
+
+8C-1F-64   (hex)		Prosys
+A5C000-A5CFFF     (base 16)		Prosys
+				280 route de serry
+				fillinges    74250
+				FR
+
+8C-1F-64   (hex)		Pixel Design & Manufacturing Sdn. Bhd.
+CE3000-CE3FFF     (base 16)		Pixel Design & Manufacturing Sdn. Bhd.
+				87, Jalan 20/7, Paramount Garden
+				Petaling Jaya  Selangor  46300
+				MY
+
+8C-1F-64   (hex)		Antai technology Co.,Ltd
+72C000-72CFFF     (base 16)		Antai technology Co.,Ltd
+				T2-704, No.159 Shenwu Road, Minhang District
+				Shanghai  Shanghai  201100
+				CN
+
+8C-1F-64   (hex)		mapna group
+768000-768FFF     (base 16)		mapna group
+				mirdamad
+				Tehran    0512258788
+				IR
+
+8C-1F-64   (hex)		Sicon srl
+193000-193FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+8C-1F-64   (hex)		Abacus Peripherals Pvt Ltd
+984000-984FFF     (base 16)		Abacus Peripherals Pvt Ltd
+				29 Apurva Industrial Estate, Makwana Road, Marol, Andheri East
+				Mumbai  Maharashtra  400059
+				IN
+
+8C-1F-64   (hex)		YULISTA INTEGRATED SOLUTION
+128000-128FFF     (base 16)		YULISTA INTEGRATED SOLUTION
+				7600 ADVANCED GATEWAY
+				HUNTSVILLE  AL  35808
+				US
+
+8C-1F-64   (hex)		Esys Srl
+C1F000-C1FFFF     (base 16)		Esys Srl
+				via Spagna 240/242
+				Rende  Calabria  87036
+				IT
+
+8C-1F-64   (hex)		Rayhaan Networks
+ACE000-ACEFFF     (base 16)		Rayhaan Networks
+				Tuchmacherstrasse 36
+				Zurich    8041
+				CH
+
+8C-1F-64   (hex)		Intel Corporate
+397000-397FFF     (base 16)		Intel Corporate
+				Lot 8, Jalan Hi-Tech 2/3  
+				Kulim  Kedah  09000
+				MY
+
+8C-1F-64   (hex)		Red Sensors Limited
+1B6000-1B6FFF     (base 16)		Red Sensors Limited
+				Dock, 75 Exploration Dr
+				Leicester  Leicestershire  LE4 5NU
+				GB
+
+8C-1F-64   (hex)		Security Products International, LLC
+493000-493FFF     (base 16)		Security Products International, LLC
+				2025 Ebenezer Road  Suite F
+				Rock Hill   SC  29732
+				US
+
+8C-1F-64   (hex)		Vision Systems Safety Tech
+330000-330FFF     (base 16)		Vision Systems Safety Tech
+				5 Chemin de Chiradie
+				Brignais    69530
+				FR
+
+8C-1F-64   (hex)		TowerIQ
+3AD000-3ADFFF     (base 16)		TowerIQ
+				13723 Riverport Drive
+				Saint Louis  MO  63043
+				US
+
+8C-1F-64   (hex)		Algodue Elettronica Srl
+7D6000-7D6FFF     (base 16)		Algodue Elettronica Srl
+				Via P. Gobetti, 16F
+				Maggiora  NO  28014
+				IT
+
+8C-1F-64   (hex)		Actronika SAS
+EC1000-EC1FFF     (base 16)		Actronika SAS
+				157 boulevard MacDonald
+				Paris    75019
+				FR
+
+8C-1F-64   (hex)		Shenzhen ROLSTONE Technology Co., Ltd
+382000-382FFF     (base 16)		Shenzhen ROLSTONE Technology Co., Ltd
+				4F?Block 3, Fushijie Industry Park, Dalang District, 
+				Shenzhen  Guangdong  518110
+				CN
+
+8C-1F-64   (hex)		Guardian Controls International Ltd
+7A1000-7A1FFF     (base 16)		Guardian Controls International Ltd
+				 The Dairy, Spring Bank Farm
+				Arclid  Cheshire  CW11 2UD
+				GB
+
+8C-1F-64   (hex)		TechnipFMC
+0C5000-0C5FFF     (base 16)		TechnipFMC
+				1602 WAGNER AVE
+				ERIE  PA  16510-1444
+				US
+
+8C-1F-64   (hex)		General Motors
+CAD000-CADFFF     (base 16)		General Motors
+				Galgalei Hapladaa 
+				Herzliya    3030000
+				IL
+
+8C-1F-64   (hex)		Orange Tree Technologies Ltd
+77C000-77CFFF     (base 16)		Orange Tree Technologies Ltd
+				173 Curie Avenue, Harwell Oxford
+				Didcot  Oxfordshire  OX11 0QG
+				GB
+
+8C-1F-64   (hex)		Monnit Corporation
+06D000-06DFFF     (base 16)		Monnit Corporation
+				450 South Simmons STE 670
+				Kaysville  UT  84037
+				US
+
+8C-1F-64   (hex)		Sciospec Scientific Instruments GmbH
+C40000-C40FFF     (base 16)		Sciospec Scientific Instruments GmbH
+				Leipziger Str. 43b
+				Bennwitz  Deutschland  04828
+				DE
+
+8C-1F-64   (hex)		Lift Ventures, Inc
+C27000-C27FFF     (base 16)		Lift Ventures, Inc
+				28475 GREENFIELD RD STE 113 #7100
+				Southfield  MI  48076
+				US
+
+8C-1F-64   (hex)		Dynomotion, Inc
+15E000-15EFFF     (base 16)		Dynomotion, Inc
+				1054 Bath Ln 
+				Ventura  CA  93001
+				US
+
+8C-1F-64   (hex)		KB Modul, LLC
+EAA000-EAAFFF     (base 16)		KB Modul, LLC
+				Verejskaya str. bld.29
+				Moscow    121351
+				RU
+
+8C-1F-64   (hex)		Guan Show Technologe Co., Ltd.
+8A9000-8A9FFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+8C-1F-64   (hex)		Industrial Laser Machines, LLC
+F3F000-F3FFFF     (base 16)		Industrial Laser Machines, LLC
+				6985 UNIVERSITY BLVD
+				WINTER PARK  FL  32792-6713
+				US
+
+8C-1F-64   (hex)		Norbit ODM AS
+0AB000-0ABFFF     (base 16)		Norbit ODM AS
+				Stiklestadveien 1
+				Trondheim    7041
+				NO
+
+8C-1F-64   (hex)		Guan Show Technologe Co., Ltd.
+4CD000-4CDFFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		Dorsett Technologies Inc
+E76000-E76FFF     (base 16)		Dorsett Technologies Inc
+				
+				Yadkinville  NC  27055
+				US
+
+8C-1F-64   (hex)		Goertek Robotics Co.,Ltd.
+CEF000-CEFFFF     (base 16)		Goertek Robotics Co.,Ltd.
+				Unit 18, E Link World Business Park, 1777 Hualong Road, Qingpu District
+				Shanghai  Shanghai  201708
+				CN
+
+8C-1F-64   (hex)		Exi Flow Measurement Ltd
+9CE000-9CEFFF     (base 16)		Exi Flow Measurement Ltd
+				Unit 22 Ford Lane business Park
+				Ford, ARUNDEL  West Sussex  BN164HP
+				GB
+
+8C-1F-64   (hex)		Shenzhen Qunfang Technology Co., LTD.
+8AE000-8AEFFF     (base 16)		Shenzhen Qunfang Technology Co., LTD.
+				4th floor, building A4, Huihao Industrial Park, Matian street, Guangming District, Shenzhen
+				Shenzhen    518000
+				CN
+
+8C-1F-64   (hex)		ATM LLC
+782000-782FFF     (base 16)		ATM LLC
+				Rybinskaya 3-ya str., 18, build 22, floor 2, office 5
+				Moscow    107113
+				RU
+
+8C-1F-64   (hex)		Ermes Elettronica s.r.l.
+DB9000-DB9FFF     (base 16)		Ermes Elettronica s.r.l.
+				Via Treviso, 36
+				San Vendemiano  TV  31020
+				IT
+
+8C-1F-64   (hex)		GY-FX SAS
+E77000-E77FFF     (base 16)		GY-FX SAS
+				38 rue du Botrel
+				35690  Brittany  Acigne
+				FR
+
+8C-1F-64   (hex)		LcmVeloci ApS
+E52000-E52FFF     (base 16)		LcmVeloci ApS
+				Smedeland 2
+				Glostrup    2600
+				DK
+
+8C-1F-64   (hex)		Brighten Controls LLP
+003000-003FFF     (base 16)		Brighten Controls LLP
+				#306B, ARATT ROYAL MANOR, SECTOR 2, SOMASUNDARPALAYA MAIN ROAD, HSR LAYOUT
+				BANGALORE  Karnataka  560102
+				IN
+
+8C-1F-64   (hex)		DEUTA-WERKE GmbH
+A76000-A76FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+8C-1F-64   (hex)		Clock-O-Matic
+4C1000-4C1FFF     (base 16)		Clock-O-Matic
+				De Vunt 14
+				Holsbeek  VBR  3220
+				BE
+
+8C-1F-64   (hex)		Shanghai Shenxu Technology Co., Ltd
+08B000-08BFFF     (base 16)		Shanghai Shenxu Technology Co., Ltd
+				4012, No. 22, Lane 1800, Sanxin North Road, Songjiang District
+				Shanghai  Shanghai  201600
+				CN
+
+8C-1F-64   (hex)		NPO ECO-INTECH Ltd.
+57A000-57AFFF     (base 16)		NPO ECO-INTECH Ltd.
+				Kashirskoye shosse 13-1
+				Moscow    115230
+				RU
+
+8C-1F-64   (hex)		NuGrid Power
+A38000-A38FFF     (base 16)		NuGrid Power
+				Unit 110 - 8575 Government St
+				Burnaby  BC  V3N 4V1
+				CA
+
+8C-1F-64   (hex)		DISPLAX S.A.
+CEE000-CEEFFF     (base 16)		DISPLAX S.A.
+				Rua Soldado  Manuel Pinheiro Magalhãe, 68s
+				Adaúfe  Braga  4710-167
+				PT
+
+8C-1F-64   (hex)		Carestream Dental LLC
+B77000-B77FFF     (base 16)		Carestream Dental LLC
+				3625 Cumberland Blvd. Ste. 700 Atlanta, GA 30339
+				Atlanta    30339
+				US
+
+8C-1F-64   (hex)		TEX COMPUTER SRL 
+2C2000-2C2FFF     (base 16)		TEX COMPUTER SRL 
+				Via O. Respighi 13
+				CATTOLICA   RIMINI   47841
+				IT
+
+8C-1F-64   (hex)		Union Electronic.
+BD7000-BD7FFF     (base 16)		Union Electronic.
+				1-134.Kajita-cho
+				Obu-shi  Aichi  474-0071
+				JP
+
+8C-1F-64   (hex)		Aspen Spectra Sdn Bhd
+41D000-41DFFF     (base 16)		Aspen Spectra Sdn Bhd
+				51-10, The Boulevard, Mid Valley City
+				Lingkaran Syed Putra  Kuala Lumpur  59200
+				MY
+
+8C-1F-64   (hex)		Camozzi Automation SpA
+9C3000-9C3FFF     (base 16)		Camozzi Automation SpA
+				Via Eritrea 20/I
+				BRESCIA  ITALY  25080
+				IT
+
+8C-1F-64   (hex)		Grossenbacher Systeme AG
+E41000-E41FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+8C-1F-64   (hex)		Emcom Systems
+177000-177FFF     (base 16)		Emcom Systems
+				92 N Main St, Building 18, Unit A, 
+				Windsor  NJ  07762
+				US
+
+8C-1F-64   (hex)		Power Electronics Espana, S.L.
+FE3000-FE3FFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+8C-1F-64   (hex)		Telco Antennas Pty Ltd
+F5A000-F5AFFF     (base 16)		Telco Antennas Pty Ltd
+				5/1 Roebuck St
+				Hemmant  QLD  4154
+				AU
+
+8C-1F-64   (hex)		SACO Controls Inc.
+F96000-F96FFF     (base 16)		SACO Controls Inc.
+				550 McCaffrey
+				Saint Laurent  Quebec  H4T1N1
+				CA
+
+8C-1F-64   (hex)		Fluid Components Intl
+BF4000-BF4FFF     (base 16)		Fluid Components Intl
+				1755 La Costa Meadows Dr.
+				San Marcos  CA  92078
+				US
+
+8C-1F-64   (hex)		FeedFlo
+19B000-19BFFF     (base 16)		FeedFlo
+				1200 220 Portage Ave
+				Winnipeg  MB - Manitoba  R3C0A5
+				CA
+
+8C-1F-64   (hex)		Benchmark Electronics BV
+16E000-16EFFF     (base 16)		Benchmark Electronics BV
+				Lelyweg 10
+				Almelo  Overijssel  7602 EA
+				NL
+
+8C-1F-64   (hex)		International Water Treatment Maritime AS
+F31000-F31FFF     (base 16)		International Water Treatment Maritime AS
+				Eternitveien 34, Bjerkås næringspark bygg 1, PB 54
+				Slemmestad    3470
+				NO
+
+8C-1F-64   (hex)		Asiga Pty Ltd
+31A000-31AFFF     (base 16)		Asiga Pty Ltd
+				Unit 2, 19-21 Bourke Road
+				Alexandria  New South Wales  2015
+				AU
+
+8C-1F-64   (hex)		Aqua Broadcast Ltd
+EB2000-EB2FFF     (base 16)		Aqua Broadcast Ltd
+				C/O Able & Young Ltd , Airport House
+				Croydon    CR0 0XZ
+				GB
+
+8C-1F-64   (hex)		West Pharmaceutical Services, Inc.
+84E000-84EFFF     (base 16)		West Pharmaceutical Services, Inc.
+				530 Herman O. West Drive
+				Exton  PA  19341
+				US
+
+8C-1F-64   (hex)		Optotune Switzerland AG
+656000-656FFF     (base 16)		Optotune Switzerland AG
+				Bernstrasse 388
+				Dietikon    8953
+				CH
+
+8C-1F-64   (hex)		ISAC SRL
+111000-111FFF     (base 16)		ISAC SRL
+				via Maestri del Lavoro 30
+				CASCINA  PISA  56021
+				IT
+
+8C-1F-64   (hex)		Misaka Network, Inc.
+F25000-F25FFF     (base 16)		Misaka Network, Inc.
+				8 The Green, Suite 6288
+				Dover  DE  19901
+				US
+
+8C-1F-64   (hex)		Smart Radar System, Inc
+517000-517FFF     (base 16)		Smart Radar System, Inc
+				7F, Innovalley A, 253 Pangyo-ro Bundang-gu
+				Seongnam-si   Gyeonggi-do Korea  13486
+				KR
+
+8C-1F-64   (hex)		KRONOTECH SRL
+103000-103FFF     (base 16)		KRONOTECH SRL
+				VIALE UNGHERIA 125
+				UDINE  ITALY/UDINE  33100
+				IT
+
+8C-1F-64   (hex)		Senior Group LLC
+647000-647FFF     (base 16)		Senior Group LLC
+				1300 West Main Street
+				Louisville  KY  40203
+				US
+
+8C-1F-64   (hex)		Deviceroy
+7B9000-7B9FFF     (base 16)		Deviceroy
+				231 W VINEYARD WAY
+				Saratoga Springs  UT  84045
+				US
+
+8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
+E99000-E99FFF     (base 16)		Pantherun Technologies Pvt Ltd
+				311 6th main road Hal 2nd stage
+				Bangalore  Karnataka  560038
+				IN
+
+8C-1F-64   (hex)		Anhui Chaokun Testing Equipment Co., Ltd
+600000-600FFF     (base 16)		Anhui Chaokun Testing Equipment Co., Ltd
+				E502, Workshop 2, Longshan Science and Technology Park, 35 Hengshan Road, Jiujiang District, Wuhu city, Anhui Province  
+				Wuhu  Anhui  241000
+				CN
+
+8C-1F-64   (hex)		SMILICS TECHNOLOGIES, S.L.
+FD3000-FD3FFF     (base 16)		SMILICS TECHNOLOGIES, S.L.
+				C/Lepanto, 43
+				Barcelona  Barcelona  08223
+				ES
+
+8C-1F-64   (hex)		Samwell International Inc
+E49000-E49FFF     (base 16)		Samwell International Inc
+				No. 317-1, Sec.2, An Kang Rd., Hsintien Dist
+				New Taipei City    231
+				TW
+
+8C-1F-64   (hex)		Magnet-Physik Dr. Steingroever GmbH
+C97000-C97FFF     (base 16)		Magnet-Physik Dr. Steingroever GmbH
+				Emil-Hoffmann Str. 3
+				Köln  Nordrhein-W estfalen   50996
+				DE
+
+8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
+88D000-88DFFF     (base 16)		Pantherun Technologies Pvt Ltd
+				311 6th main road Hal 2nd stage
+				Bangalore  Karnataka  560038
+				IN
+
+8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
+099000-099FFF     (base 16)		Pantherun Technologies Pvt Ltd
+				311 6th main road Hal 2nd stage
+				Bangalore  Karnataka  560038
+				IN
+
+8C-1F-64   (hex)		GE AVIC Civil Avionics Systems Company Limited
+F74000-F74FFF     (base 16)		GE AVIC Civil Avionics Systems Company Limited
+				666 Zixing Road
+				Shanghai    200241
+				CN
+
+8C-1F-64   (hex)		Stercom Power Solutions GmbH
+2B6000-2B6FFF     (base 16)		Stercom Power Solutions GmbH
+				Ziegelstr. 1
+				Weyarn  Bayern  83629
+				DE
+
+8C-1F-64   (hex)		Shenzhen zhushida Technology lnformation Co.,Ltd
+A5D000-A5DFFF     (base 16)		Shenzhen zhushida Technology lnformation Co.,Ltd
+				1309, Block A, Innovation Building, Majialong Industrial Zone, Nantou Street, Nanshan District, 
+				SHENZHEN    518000
+				CN
+
+8C-1F-64   (hex)		EnviroNode IoT Solutions
+1AF000-1AFFFF     (base 16)		EnviroNode IoT Solutions
+				4 Malvern  Avenue
+				Sydney  New South Wales  2132
+				AU
+
+8C-1F-64   (hex)		Gateview Technologies
+B7B000-B7BFFF     (base 16)		Gateview Technologies
+				 104 White St #201
+				Wake Forest    27587
+				US
+
+8C-1F-64   (hex)		Suntech Engineering
+7D3000-7D3FFF     (base 16)		Suntech Engineering
+				30, Gukgasandan-daero 34-gil, Guji-myeon, Dalseong-gun, Daegu, Republic of Korea
+				Daegu    43008
+				KR
+
+8C-1F-64   (hex)		Ascon Tecnologic S.r.l.
+FF6000-FF6FFF     (base 16)		Ascon Tecnologic S.r.l.
+				via Indipendenza, 56
+				Vigevano  PV  27029
+				IT
+
+8C-1F-64   (hex)		Delta Computers LLC.
+59F000-59FFFF     (base 16)		Delta Computers LLC.
+				Office 22/10, room part 22, room IV, floor 3, 41A, 3-rd Parkovaya str.
+				Moscow    105425
+				RU
+
+8C-1F-64   (hex)		Newtec A/S
+BF0000-BF0FFF     (base 16)		Newtec A/S
+				Stærmosegårdsvej  18
+				Odense SV  Region Syd  5230
+				DK
+
+8C-1F-64   (hex)		Onto Innovation
+FBA000-FBAFFF     (base 16)		Onto Innovation
+				16 Jonspin rd
+				Wilmington  MA  01887
+				US
+
+8C-1F-64   (hex)		DAVE SRL
+967000-967FFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+8C-1F-64   (hex)		Becton Dickinson
+775000-775FFF     (base 16)		Becton Dickinson
+				7 Loveton Circle
+				Sparks  MD  21152
+				US
+
+8C-1F-64   (hex)		FIBERME COMMUNICATIONS LLC
+C68000-C68FFF     (base 16)		FIBERME COMMUNICATIONS LLC
+				1749 Old Meadow Rd.
+				McLean  VA  22102
+				US
+
+8C-1F-64   (hex)		TechArgos
+BFB000-BFBFFF     (base 16)		TechArgos
+				Nizhnyaya Krasnoselskaya Str. 35-64
+				Moscow     105066
+				RU
+
+8C-1F-64   (hex)		e.kundenservice Netz GmbH
+855000-855FFF     (base 16)		e.kundenservice Netz GmbH
+				Steindamm 100
+				Hamburg    20099
+				DE
+
+8C-1F-64   (hex)		Meiryo Denshi Corp.
+EB5000-EB5FFF     (base 16)		Meiryo Denshi Corp.
+				38-23 higashi maeda
+				Nishin City  Aichi  470-0124
+				JP
+
+8C-1F-64   (hex)		Baker Hughes EMEA
+40E000-40EFFF     (base 16)		Baker Hughes EMEA
+				Sensing House, Shannon Free Zone East
+				Shannon  Co. Clare  V14 V99
+				IE
+
+8C-1F-64   (hex)		Calnex Solutions plc
+703000-703FFF     (base 16)		Calnex Solutions plc
+				Oracle Campus
+				 Linlithgow  West Lothian  EH49 7LR
+				GB
+
+8C-1F-64   (hex)		LLC NTPC
+660000-660FFF     (base 16)		LLC NTPC
+				Kharkovsky alley 36g, office room 1
+				Belgorod    308012
+				RU
+
+8C-1F-64   (hex)		Renukas Castle Hard- and Software
+4E5000-4E5FFF     (base 16)		Renukas Castle Hard- and Software
+				Renukas Castle, 35th Ward, Kalyan Nagar, Ring Road, near Lions School
+				Gadag  Karnataka  582103
+				IN
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+059000-059FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+8C-1F-64   (hex)		Tesat-Spacecom GmbH & Co. KG
+F27000-F27FFF     (base 16)		Tesat-Spacecom GmbH & Co. KG
+				Gerberstrasse 49
+				Backnang    71522
+				DE
+
+8C-1F-64   (hex)		REFU Storage System GmbH
+53B000-53BFFF     (base 16)		REFU Storage System GmbH
+				Marktstraße 185
+				Pfullingen    72793
+				DE
+
+8C-1F-64   (hex)		DEUTA-WERKE GmbH
+883000-883FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+8C-1F-64   (hex)		JBF
+F45000-F45FFF     (base 16)		JBF
+				via goretta 90
+				mappano  torino  10079
+				IT
+
+8C-1F-64   (hex)		Micro Electroninc Products
+765000-765FFF     (base 16)		Micro Electroninc Products
+				TT Vasumweg 150
+				Amsterdam    1033 SH
+				NL
+
+8C-1F-64   (hex)		Logical Product
+622000-622FFF     (base 16)		Logical Product
+				2-25-5,matoba,minamiku
+				Fukuoka  Fukuoka  811-1314
+				JP
+
+8C-1F-64   (hex)		Dan Smith LLC
+4D6000-4D6FFF     (base 16)		Dan Smith LLC
+				4638 Cameron Ridge Drive, Apt 138
+				Indianapolis  IN  46240
+				US
+
+8C-1F-64   (hex)		Sicon srl
+B3B000-B3BFFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+8C-1F-64   (hex)		INVIXIUM ACCESS INC
+274000-274FFF     (base 16)		INVIXIUM ACCESS INC
+				111 Gordon Baker Road, Suite #300
+				Toronto  Ontario  M2H 3R1
+				CA
+
+8C-1F-64   (hex)		Bunka Shutter Co., Ltd.
+0B0000-0B0FFF     (base 16)		Bunka Shutter Co., Ltd.
+				644-1 Tenjingoe,Ooaza-Kamiishizuka
+				Oyama  Tochigi  323-0063
+				JP
+
+8C-1F-64   (hex)		Sanchar Telesystems limited
+958000-958FFF     (base 16)		Sanchar Telesystems limited
+				A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI
+				New Delhi  Delhi  110020
+				IN
+
+8C-1F-64   (hex)		Rodgers Instruments US LLC
+A42000-A42FFF     (base 16)		Rodgers Instruments US LLC
+				6497 NE Croeni Avenue
+				Hillsboro    97124
+				US
+
+8C-1F-64   (hex)		Potter Electric Signal Company
+316000-316FFF     (base 16)		Potter Electric Signal Company
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+8C-1F-64   (hex)		Diffraction Limited
+8CF000-8CFFFF     (base 16)		Diffraction Limited
+				59 Grenfell Crescent, Unit B
+				Ottawa  ON  K2G 0G3
+				CA
+
+8C-1F-64   (hex)		Tunstall A/S
+F2C000-F2CFFF     (base 16)		Tunstall A/S
+				Niels Bohrs vej 42
+				Stilling  Skanderborg  8660
+				DK
+
+8C-1F-64   (hex)		Tantronic AG
+1EF000-1EFFFF     (base 16)		Tantronic AG
+				Gewerbering 12
+				Wohlen  AG  5610
+				CH
+
+8C-1F-64   (hex)		Strategic Robotic Systems
+C57000-C57FFF     (base 16)		Strategic Robotic Systems
+				14842 NE 95th StreetBuilding 5
+				Redmond  WA  98052
+				US
+
+8C-1F-64   (hex)		MHE Electronics
+E90000-E90FFF     (base 16)		MHE Electronics
+				49Alexander Rd, Westmead
+				Durban  KwaZulu Natal  3610
+				ZA
+
+8C-1F-64   (hex)		tickIoT Inc.
+949000-949FFF     (base 16)		tickIoT Inc.
+				651 N Broad St Ste 206, Ste 206
+				Middletown  DE  19709
+				US
+
+8C-1F-64   (hex)		SYSN
+2C5000-2C5FFF     (base 16)		SYSN
+				the third floor, 26, Namsan-ro 39beon-gil, Uichang-gu
+				Changwon-si, Gyeongsangnam-do, Republic of Korea    51368
+				KR
+
+8C-1F-64   (hex)		Lambda Systems Inc.
+DB7000-DB7FFF     (base 16)		Lambda Systems Inc.
+				2-11-26 Sangenjaya
+				Setagaya-ku  Tokyo  154-0024
+				JP
+
+8C-1F-64   (hex)		Satelles Inc
+9FF000-9FFFFF     (base 16)		Satelles Inc
+				1835 Alexander Bell Dr., Suite 240
+				Reston  VA  20191
+				US
+
+8C-1F-64   (hex)		Grossenbacher Systeme AG
+9F4000-9F4FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+8C-1F-64   (hex)		KCS Co., Ltd.
+4AE000-4AEFFF     (base 16)		KCS Co., Ltd.
+				1101, NexZone, 50, Wanam-ro, Seongsan-gu,
+				Changwon-si    51573
+				KR
+
+8C-1F-64   (hex)		Peter Huber Kaeltemaschinenbau AG
+C35000-C35FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
+				Werner-von-Siemens-Str. 1
+				Offenburg  Ba-Wue  77656
+				DE
+
+8C-1F-64   (hex)		Nexilis Electronics India Pvt Ltd (PICSYS)
+692000-692FFF     (base 16)		Nexilis Electronics India Pvt Ltd (PICSYS)
+				Plot No.23,DITPL Industrial Area,Bashettihalli,Doddaballapura
+				Bangalore  Karnataka  561203
+				IN
+
+70-B3-D5   (hex)		Mahindra Electric Mobility Limited
+11A000-11AFFF     (base 16)		Mahindra Electric Mobility Limited
+				690, Gold Hill Square, Hosur Road, Bommanahalli
+				Bangalore  Karnataka  560068
+				IN
+
+8C-1F-64   (hex)		wtec GmbH
+F43000-F43FFF     (base 16)		wtec GmbH
+				Dornbachstrasse 1a
+				Bad Homburg    61352
+				DE
+
+8C-1F-64   (hex)		VECTOR TECHNOLOGIES, LLC
+365000-365FFF     (base 16)		VECTOR TECHNOLOGIES, LLC
+				Razdolnaya str, 76bldg3
+				Orel  Orel region  302038
+				RU
+
+8C-1F-64   (hex)		BABTEL
+A51000-A51FFF     (base 16)		BABTEL
+				139 E Chestnut St
+				Coatesville    19320
+				US
+
+8C-1F-64   (hex)		Agrowtek Inc.
+179000-179FFF     (base 16)		Agrowtek Inc.
+				3365 Gateway Rd
+				Brookfield  WI  53045
+				US
+
+8C-1F-64   (hex)		BusPas
+CF7000-CF7FFF     (base 16)		BusPas
+				615 Rene Levesque WestSuite 500
+				Montreal  Quebec  H3B 1P5
+				CA
+
+8C-1F-64   (hex)		Profcon AB
+91A000-91AFFF     (base 16)		Profcon AB
+				Victor Hasselblads gata 9
+				Västra Frölunda    42131
+				SE
+
+8C-1F-64   (hex)		Sichuan AnSphere Technology Co. Ltd.
+208000-208FFF     (base 16)		Sichuan AnSphere Technology Co. Ltd.
+				Room 332, Building 2, Innovation Center, Science and Technology Innovation Park
+				Mian Yang  Sichuan  621000
+				CN
+
+8C-1F-64   (hex)		Kinetic Technologies
+324000-324FFF     (base 16)		Kinetic Technologies
+				6399 San Ignacio Ave #250
+				San Jose  CA  95119
+				US
+
+70-B3-D5   (hex)		HYOSUNG Heavy Industries Corporation
+41A000-41AFFF     (base 16)		HYOSUNG Heavy Industries Corporation
+				119, Mapo-daero, Mapo-gu
+				Seoul    04144
+				KR
+
+8C-1F-64   (hex)		HYOSUNG Heavy Industries Corporation
+C07000-C07FFF     (base 16)		HYOSUNG Heavy Industries Corporation
+				119, Mapo-daero, Mapo-gu
+				Seoul    04144
+				KR
+
+8C-1F-64   (hex)		Noisewave Corporation
+7D9000-7D9FFF     (base 16)		Noisewave Corporation
+				20 Troy Rd. Ste 3
+				Whippany  NJ  07981
+				US
+
+8C-1F-64   (hex)		GS Elektromedizinsiche Geräte G. Stemple GmbH
+9B6000-9B6FFF     (base 16)		GS Elektromedizinsiche Geräte G. Stemple GmbH
+				Hauswiesenstr. 26
+				Kaufering  Bayern  86916
+				DE
+
+8C-1F-64   (hex)		Sicon srl
+83E000-83EFFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+8C-1F-64   (hex)		Circuit Solutions
+4E7000-4E7FFF     (base 16)		Circuit Solutions
+				2514 Bonnie Dell Drive
+				South Park  PA  15129
+				US
+
+8C-1F-64   (hex)		BAE Systems
+556000-556FFF     (base 16)		BAE Systems
+				65 Spir Brook Rd.
+				Nashua  NH  03060
+				US
+
+8C-1F-64   (hex)		MI Inc.
+17E000-17EFFF     (base 16)		MI Inc.
+				6F, Toto building, 5-1-4, Toranomon, Minato-ku
+				Tokyo    1050001
+				JP
+
+8C-1F-64   (hex)		GVA Lighting, Inc.
+44E000-44EFFF     (base 16)		GVA Lighting, Inc.
+				2771 Bristol Circle
+				Oakville  Ontario  L6H 6X5
+				CA
+
+8C-1F-64   (hex)		Photonic Science and Engineering Ltd
+4F9000-4F9FFF     (base 16)		Photonic Science and Engineering Ltd
+				22 Theaklen Drive
+				St Leonards on Sea  EAST SUSSEX  TN38 9AZ
+				GB
+
+8C-1F-64   (hex)		KSE GmbH
+97D000-97DFFF     (base 16)		KSE GmbH
+				Kaethe Paulus Strasse 6
+				Koesching    85092
+				DE
+
+8C-1F-64   (hex)		Power Electronics Espana, S.L.
+B9E000-B9EFFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+8C-1F-64   (hex)		VERSITRON, Inc.
+2FE000-2FEFFF     (base 16)		VERSITRON, Inc.
+				83C Albe Drive
+				Newark  DE  19702
+				US
+
+8C-1F-64   (hex)		Guan Show Technologe Co., Ltd.
+00C000-00CFFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+8C-1F-64   (hex)		REO AG
+462000-462FFF     (base 16)		REO AG
+				Brühlerstr. 100
+				Solingen    42657
+				DE
+
+8C-1F-64   (hex)		DIAS Infrared GmbH
+376000-376FFF     (base 16)		DIAS Infrared GmbH
+				Pforzheimer Str. 21
+				Dresden  Saxony  01189
+				DE
+
+8C-1F-64   (hex)		Panoramic Power
+50E000-50EFFF     (base 16)		Panoramic Power
+				Atir Yeda 15
+				Kfar Saba    4464312
+				IL
+
+8C-1F-64   (hex)		LabLogic Systems
+9A4000-9A4FFF     (base 16)		LabLogic Systems
+				Paradigm House, Melbourne Avenue,
+				Sheffiled  South Yorkshire  S10 2QJ
+				GB
+
+8C-1F-64   (hex)		RealD, Inc.
+0D5000-0D5FFF     (base 16)		RealD, Inc.
+				9777 Wilshire Boulevard, Ste 430
+				 Beverly Hills  CA  90212
+				US
+
+8C-1F-64   (hex)		Grossenbacher Systeme AG
+117000-117FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+8C-1F-64   (hex)		sdt.net AG
+676000-676FFF     (base 16)		sdt.net AG
+				Ulmer Str. 130
+				Aalen  Baden-Wuerttemberg  73431
+				DE
+
+8C-1F-64   (hex)		Sypris Electronics
+C44000-C44FFF     (base 16)		Sypris Electronics
+				10901N McKinley Dr
+				Tampa    33612
+				US
+
+8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
+2A1000-2A1FFF     (base 16)		Pantherun Technologies Pvt Ltd
+				311 6th main road Hal 2nd stage
+				Bangalore  Karnataka  560038
+				IN
+
+8C-1F-64   (hex)		Quantum Technologies Inc
+F2F000-F2FFFF     (base 16)		Quantum Technologies Inc
+				991 DISCOVERY DR NW
+				Huntsville  AL  35806
+				US
+
+8C-1F-64   (hex)		Cronus Electronics
+B08000-B08FFF     (base 16)		Cronus Electronics
+				7 Manor RoadManor Road
+				WEYMOUTH  Dorset  DT3 5HR
+				GB
+
+8C-1F-64   (hex)		FoxIoT OÜ
+BC3000-BC3FFF     (base 16)		FoxIoT OÜ
+				Mäealuse tn 2/1
+				Tallinn  Harjumaa  12618
+				EE
+
+8C-1F-64   (hex)		Algodue Elettronica Srl
+90D000-90DFFF     (base 16)		Algodue Elettronica Srl
+				Via P. Gobetti, 16F
+				Maggiora  NO  28014
+				IT
+
+8C-1F-64   (hex)		Emerson Rosemount Analytical
+9B2000-9B2FFF     (base 16)		Emerson Rosemount Analytical
+				8200 Market Blvd.
+				Chanhassen  MN  55317-9687
+				US
+
+8C-1F-64   (hex)		Mesomat inc.
+1D8000-1D8FFF     (base 16)		Mesomat inc.
+				175 Longwood Road South, Suite 303A
+				Hamilton  Ontario  L8P0A1
+				CA
+
+8C-1F-64   (hex)		Portrait Displays, Inc.
+5D6000-5D6FFF     (base 16)		Portrait Displays, Inc.
+				6663 OWENS DR
+				PLEASANTON    94588
+				US
+
+8C-1F-64   (hex)		GHM Messtechnik GmbH
+9E8000-9E8FFF     (base 16)		GHM Messtechnik GmbH
+				Tenter Weg, 2-8
+				Remscheid    42897
+				DE
+
+8C-1F-64   (hex)		CHASEO CONNECTOME
+744000-744FFF     (base 16)		CHASEO CONNECTOME
+				2floor, 14, Nambusunhwan-ro 378-gil
+				Gangnam-gu  seoul  06296
+				KR
+
+8C-1F-64   (hex)		Murata Manufacturing CO., Ltd.
+B14000-B14FFF     (base 16)		Murata Manufacturing CO., Ltd.
+				4-3-8, Minatomirai, Nishi-ku
+				Yokohama-shi  Kanagawa-ken  220-0012
+				JP
+
+8C-1F-64   (hex)		ABB
+6D0000-6D0FFF     (base 16)		ABB
+				Fulachstrasse 150
+				Schaffhausen    8200
+				CH
+
+8C-1F-64   (hex)		Connection Systems
+78F000-78FFFF     (base 16)		Connection Systems
+				Westerbuurt 25
+				Venhuizen    1606 AK
+				NL
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+CFA000-CFAFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		Power Electronics Espana, S.L.
+DA6000-DA6FFF     (base 16)		Power Electronics Espana, S.L.
+				Pol Industrial Carrases Ronda del Camp d’Aviació,4
+				Lliria  Valencia  46160
+				ES
+
+8C-1F-64   (hex)		Scarlet Tech Co., Ltd.
+37F000-37FFFF     (base 16)		Scarlet Tech Co., Ltd.
+				4F-3, 347 HePing E Rd 2nd Sec, Daan Dist 
+				Taipei City   Taipei   106 
+				TW
+
+8C-1F-64   (hex)		Brillian Network & Automation Integrated System Co., Ltd.
+593000-593FFF     (base 16)		Brillian Network & Automation Integrated System Co., Ltd.
+				No.41, Keyi St., Zhunan Township, Miaoli County 350Taiwan (R.O.C.)
+				Zhunan Township  Miaoli County  35059
+				TW
+
+8C-1F-64   (hex)		Dacom West GmbH
+895000-895FFF     (base 16)		Dacom West GmbH
+				Schallbruch 19-21
+				Haan  NRW  42781
+				DE
+
+8C-1F-64   (hex)		Watchdog Systems
+251000-251FFF     (base 16)		Watchdog Systems
+				334 W Weatherby Pl
+				Chandler    85286
+				US
+
+8C-1F-64   (hex)		KST technology
+F84000-F84FFF     (base 16)		KST technology
+				KST B/D 4-5, Wiryeseong-daero 12-gil
+				Songpa-gu  Seoul  05636
+				KR
+
+8C-1F-64   (hex)		Soha Jin
+BF1000-BF1FFF     (base 16)		Soha Jin
+				North Campus, Wenzhou University
+				Wenzhou  Zhejiang  325035
+				CN
+
+8C-1F-64   (hex)		Qtechnology A/S
+AFF000-AFFFFF     (base 16)		Qtechnology A/S
+				Valby Langgade 142, 1.
+				Valby  DK  2500
+				DK
+
+8C-1F-64   (hex)		INVENTIS S.r.l.
+36A000-36AFFF     (base 16)		INVENTIS S.r.l.
+				Corso Stati Uniti 1/3
+				Padova    35127
+				IT
+
+8C-1F-64   (hex)		UniTik Technology Co., Limited
+8E3000-8E3FFF     (base 16)		UniTik Technology Co., Limited
+				7F.-3, No. 15, Lane  360, Sec. 1, Neihu Rd., Neihu Dist.,
+				Taipei    114064
+				TW
+
+8C-1F-64   (hex)		DB SAS
+77B000-77BFFF     (base 16)		DB SAS
+				13 rue du Bois BriandImpasse de la Turquoise
+				Nantes    44300
+				FR
+
+8C-1F-64   (hex)		Nixer Ltd
+5E3000-5E3FFF     (base 16)		Nixer Ltd
+				45 Evelyn Road
+				Dunstable  Bedfordshire  LU5 4NG
+				GB
+
+8C-1F-64   (hex)		CLOUD TELECOM Inc.
+52E000-52EFFF     (base 16)		CLOUD TELECOM Inc.
+				6F HAT Building,11-8, Nihonbashiodenma-cho
+				 Chuo-ku  Tokyo  1030011
+				JP
+
+8C-1F-64   (hex)		AW-SOM Technologies LLC
+0F4000-0F4FFF     (base 16)		AW-SOM Technologies LLC
+				1284 SOM Center Rd. -Suite 145
+				Mayfield Heights  OH  44124-2048
+				US
+
+8C-1F-64   (hex)		Lumiplan Duhamel
+A0D000-A0DFFF     (base 16)		Lumiplan Duhamel
+				2 rue de l'industrie
+				Domène  Isère  38420
+				FR
+
+8C-1F-64   (hex)		Landis+Gyr Equipamentos de Medição Ltda
+293000-293FFF     (base 16)		Landis+Gyr Equipamentos de Medição Ltda
+				Hasdrubal Bellegard, 400, CIC
+				Curitiba  Paraná  81460-120
+				BR
+
+8C-1F-64   (hex)		MOSCA Elektronik und Antriebstechnik GmbH
+803000-803FFF     (base 16)		MOSCA Elektronik und Antriebstechnik GmbH
+				Albert-Einstein-Straße 5
+				Buchen    74722
+				DE
+
+8C-1F-64   (hex)		Star Systems International Limited
+756000-756FFF     (base 16)		Star Systems International Limited
+				Unit 7B,  8/F, Vanta Industrial Centre, 21-33 Tai Lin Pai Road, Kwai Chung
+				New Territories    852
+				HK
+
+8C-1F-64   (hex)		VT100 SRL
+66D000-66DFFF     (base 16)		VT100 SRL
+				Via A. Meucci 11
+				Caldiero  ITALY  37042
+				IT
+
+8C-1F-64   (hex)		Flextronics International Kft
+154000-154FFF     (base 16)		Flextronics International Kft
+				38. Zrinyi Str.
+				Zalaegerszeg  Zala  8900
+				HU
+
+70-B3-D5   (hex)		TIAMA
+A33000-A33FFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+70-B3-D5   (hex)		TIAMA
+798000-798FFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+8C-1F-64   (hex)		Zing Communications Inc
+A31000-A31FFF     (base 16)		Zing Communications Inc
+				2741 Hillcrest Avenue,#551Antioch, CA, 94531
+				Antioch  CA  94531
+				US
+
+8C-1F-64   (hex)		Taiwan Vtron
+2CD000-2CDFFF     (base 16)		Taiwan Vtron
+				6F., No.506-3, Yuanshan Rd., ZhongheDist., New Taipei City 235 Taiwan(R.O.C.)
+				New Taipei    235
+				TW
+
+8C-1F-64   (hex)		Aditec GmbH
+793000-793FFF     (base 16)		Aditec GmbH
+				Talweg 17
+				Offenau  Baden-Wuerttemberg  74254
+				DE
+
+8C-1F-64   (hex)		Primalucelab isrl
+59A000-59AFFF     (base 16)		Primalucelab isrl
+				VIA BRENTELLA 53/7
+				ROVEREDO IN PIANO  PN  33080
+				IT
+
+8C-1F-64   (hex)		Cardinal Scales Manufacturing Co
+BDB000-BDBFFF     (base 16)		Cardinal Scales Manufacturing Co
+				203 East Daugherty Street
+				Webb City  MO  64870
+				US
+
+8C-1F-64   (hex)		SMITEC S.p.A.
+025000-025FFF     (base 16)		SMITEC S.p.A.
+				Via Carlo Ceresa, 10
+				San Giovanni Bianco  Bergamo  24015
+				IT
+
+8C-1F-64   (hex)		PuS GmbH und Co. KG
+EE1000-EE1FFF     (base 16)		PuS GmbH und Co. KG
+				Hainstr. 13
+				Gera  Germany  07545
+				DE
+
+8C-1F-64   (hex)		Albotronic
+F24000-F24FFF     (base 16)		Albotronic
+				Bunsenstr. 3
+				Oberkochen  BW  73447
+				DE
+
+8C-1F-64   (hex)		techone system
+408000-408FFF     (base 16)		techone system
+				716ho, SKV1 AP Tower16, Gasan digital 1-ro, Geumcheon-gu
+				seoul    08591
+				KR
+
+8C-1F-64   (hex)		TOYOGIKEN CO.,LTD.
+CC2000-CC2FFF     (base 16)		TOYOGIKEN CO.,LTD.
+				Osachi Gongencho 4-8-7
+				Okaya  Nagano  3940081
+				JP
+
+70-B3-D5   (hex)		WDI Wise Device Inc.
+6F4000-6F4FFF     (base 16)		WDI Wise Device Inc.
+				135 west beaver creek rd unit 2
+				Richmond hill   Ontario  L4B 1l2
+				CA
+
+8C-1F-64   (hex)		i2s
+286000-286FFF     (base 16)		i2s
+				28 Rue Jean Perrin
+				France    33600
+				FR
+
+70-B3-D5   (hex)		EVCO SPA
+A80000-A80FFF     (base 16)		EVCO SPA
+				VIA FELTRE N. 81
+				SEDICO  BELLUNO  32036
+				IT
+
+70-B3-D5   (hex)		Forcite Helmet Systems Pty Ltd
+5F8000-5F8FFF     (base 16)		Forcite Helmet Systems Pty Ltd
+				63 Dixon Street, Haymarket, Haymarket HQ
+				Sydney  NSW  2000
+				AU
+
+70-B3-D5   (hex)		KRISTECH Krzysztof Kajstura
+66C000-66CFFF     (base 16)		KRISTECH Krzysztof Kajstura
+				Porzeczkowa 12
+				Ustroń  Please select region, state or province  43-450
+				PL
+
+70-B3-D5   (hex)		Songwoo Information & Technology Co., Ltd
+824000-824FFF     (base 16)		Songwoo Information & Technology Co., Ltd
+				24-9, Jinju-daero 404beon-gil, Jinju-si, Gyeongsangnam-do, Korea 
+				Jinju  Gyeongsangnam-do  52826
+				KR
+
+70-B3-D5   (hex)		Preston Industries dba PolyScience
+F82000-F82FFF     (base 16)		Preston Industries dba PolyScience
+				6600 W. Touhy Ave
+				Niles  IL  60714-4588
+				US
+
+70-B3-D5   (hex)		Sorion Electronics ltd
+26D000-26DFFF     (base 16)		Sorion Electronics ltd
+				Unit 12 Magreal ind. est
+				Ladywood, Birmingham  West Midlands  B16 0QZ
+				GB
+
+70-B3-D5   (hex)		Unipower AB
+A49000-A49FFF     (base 16)		Unipower AB
+				PO Box 411
+				SE-441 28 Alingsas    
+				SE
+
+70-B3-D5   (hex)		Intelligent Security Systems (ISS)
+514000-514FFF     (base 16)		Intelligent Security Systems (ISS)
+				1480 US Highway 9 North Suite 202
+				Woodbridge  NJ  07095
+				US
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+F94000-F94FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Boston Dynamics
+292000-292FFF     (base 16)		Boston Dynamics
+				
+				    
+				
+
+70-B3-D5   (hex)		Natav Services Ltd.
+E8D000-E8DFFF     (base 16)		Natav Services Ltd.
+				Binyamin 39/1
+				Modiin  Israel  7175260
+				IL
+
+70-B3-D5   (hex)		COTT Electronics
+D23000-D23FFF     (base 16)		COTT Electronics
+				71-75 Shelton Street
+				London    WC2H 9JQ
+				GB
+
+70-B3-D5   (hex)		VITEC
+5E8000-5E8FFF     (base 16)		VITEC
+				99 rue pierre semard
+				Chatillon    92320
+				FR
+
+70-B3-D5   (hex)		VITEC
+05E000-05EFFF     (base 16)		VITEC
+				99 rue pierre sémard
+				Chatillon  France  92320
+				FR
+
+70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
+957000-957FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+70-B3-D5   (hex)		Beijing Yutian Technology Co., Ltd.
+409000-409FFF     (base 16)		Beijing Yutian Technology Co., Ltd.
+				First floor, Jiangshan Holding Building, No.6 Academy of Agricultural Sciences  West Road, Haidian District
+				Beijing  Beijing  100097
+				CN
+
+70-B3-D5   (hex)		MARINE INSTRUMENTS, S.A.
+931000-931FFF     (base 16)		MARINE INSTRUMENTS, S.A.
+				acabaleiro@marineinstruments.es
+				Nigran  Spain  36350
+				ES
+
+70-B3-D5   (hex)		Edgeware AB
+449000-449FFF     (base 16)		Edgeware AB
+				Master Samuelsgatan 42
+				Stockholm    11157
+				SE
+
+70-B3-D5   (hex)		MRC Systems GmbH
+72A000-72AFFF     (base 16)		MRC Systems GmbH
+				Hans-Bunte-Str. 10
+				Heidelberg    69123
+				DE
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+6D3000-6D3FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach    51465
+				DE
+
+70-B3-D5   (hex)		COMPAR Computer GmbH
+701000-701FFF     (base 16)		COMPAR Computer GmbH
+				Steigweg 24
+				Kitzingen    97318
+				DE
+
+70-B3-D5   (hex)		Cubitech
+91D000-91DFFF     (base 16)		Cubitech
+				4-6 Kiprou str
+				Tavros  Athens  17778
+				GR
+
+70-B3-D5   (hex)		DAVE SRL
+3EA000-3EAFFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+70-B3-D5   (hex)		Hangzhou Leaper Technology Co. Ltd.
+8BF000-8BFFFF     (base 16)		Hangzhou Leaper Technology Co. Ltd.
+				20Th floor, Xinghui Center, 723 Dayuan Road
+				Hangzhou  Zhejiang Province  311300
+				CN
+
+70-B3-D5   (hex)		Oxford Monitoring Solutions Ltd
+102000-102FFF     (base 16)		Oxford Monitoring Solutions Ltd
+				Oakfield Estate
+				Eynsham  Oxford  OX298JG
+				GB
+
+70-B3-D5   (hex)		Heim- & Bürokommunikation Ilmert e.K.
+DF4000-DF4FFF     (base 16)		Heim- & Bürokommunikation Ilmert e.K.
+				Jakobsbrunnenstr. 14
+				Frankfurt am Main    60386
+				DE
+
+70-B3-D5   (hex)		GeoSpectrum Technologies Inc
+3CB000-3CBFFF     (base 16)		GeoSpectrum Technologies Inc
+				10 Akerley Blvd, #19
+				Dartmouth  Nova Scotia  B3B1J4
+				CA
+
+70-B3-D5   (hex)		Morgan Schaffer Inc.
+1F7000-1F7FFF     (base 16)		Morgan Schaffer Inc.
+				8300 rue St-Patrick bureau 150
+				LaSalle  Quebec  H8N 2H1
+				CA
+
+70-B3-D5   (hex)		Beijing PanGu Company
+E54000-E54FFF     (base 16)		Beijing PanGu Company
+				Beijing agricultural college
+				Beijing    100010
+				CN
+
+70-B3-D5   (hex)		Sensative AB
+2C0000-2C0FFF     (base 16)		Sensative AB
+				Mobilvägen 10
+				Lund    22362
+				SE
+
+70-B3-D5   (hex)		Astronomical Research Cameras, Inc.
+24C000-24CFFF     (base 16)		Astronomical Research Cameras, Inc.
+				2247 San Diego Ave #135
+				San Diego  CA  92110
+				US
+
+70-B3-D5   (hex)		Echogear
+571000-571FFF     (base 16)		Echogear
+				12884 Frontrunner Blvd Ste 201
+				Draper  UT  84020
+				US
+
+70-B3-D5   (hex)		WARECUBE,INC
+463000-463FFF     (base 16)		WARECUBE,INC
+				#A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu
+				Suwon-si    16648
+				KR
+
+70-B3-D5   (hex)		Fath Mechatronics
+DC3000-DC3FFF     (base 16)		Fath Mechatronics
+				Hügelmühle 31
+				Spalt  bavaria  91174
+				DE
+
+70-B3-D5   (hex)		VITEC
+0CA000-0CAFFF     (base 16)		VITEC
+				99, rue Pierre Semard
+				CHATILLON    92320
+				FR
+
+70-B3-D5   (hex)		 Eastone Century Technology Co.,Ltd.
+210000-210FFF     (base 16)		 Eastone Century Technology Co.,Ltd.
+				A12 Floor, Information Port, 16 Keyun Road, Tianhe DistrictGuangzhou
+				Guangzhou  GuangDong  510000
+				CN
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+7FE000-7FEFFF     (base 16)		RCH ITALIA SPA 
+				Via Cendon 39
+				SILEA  Treviso  31057
+				IT
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+857000-857FFF     (base 16)		RCH ITALIA SPA 
+				Via Cendon 39
+				SILEA  Treviso  31057
+				IT
+
+70-B3-D5   (hex)		BESO sp. z o.o.
+C00000-C00FFF     (base 16)		BESO sp. z o.o.
+				Mlynska 1a
+				Brzeg Dolny    56-120
+				PL
+
+70-B3-D5   (hex)		Automata Spa
+E14000-E14FFF     (base 16)		Automata Spa
+				Via Carducci 705
+				Caronno Pertusella  Varese  21042
+				IT
+
+70-B3-D5   (hex)		digitrol limited
+477000-477FFF     (base 16)		digitrol limited
+				CORONET WAY, ENTERPRISE PARK
+				SWANSEA  WEST GLAMORGAN  SA6 8RH
+				GB
+
+70-B3-D5   (hex)		INTECH
+E9D000-E9DFFF     (base 16)		INTECH
+				Vavilova st,13/7
+				Moscow    117312
+				RU
+
+70-B3-D5   (hex)		GREATWALL Infotech Co., Ltd.
+946000-946FFF     (base 16)		GREATWALL Infotech Co., Ltd.
+				7F, No. 143, Sec. 3, Cheng Gong Road,, Neihu District
+				Taipei  Taiwan  114
+				TW
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+BD4000-BD4FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		NanoSense
+8ED000-8EDFFF     (base 16)		NanoSense
+				123 rue de Bellevue, RDC
+				Boulogne Billancourt    92100
+				FR
+
+70-B3-D5   (hex)		Tonbo Imaging Pte Ltd
+506000-506FFF     (base 16)		Tonbo Imaging Pte Ltd
+				 77 Science Park Drive,CINTECH III, Singapore Science Park I
+				Singapore    118256
+				SG
+
+70-B3-D5   (hex)		ABB
+080000-080FFF     (base 16)		ABB
+				Fulachstrasse 150
+				Schaffhausen    8200
+				CH
+
+70-B3-D5   (hex)		EYEDEA
+FB9000-FB9FFF     (base 16)		EYEDEA
+				Rm.367, 3Fl., Enterprise Support Hub, 815, Daewangpangyo-ro, Sujeong-gu 
+				Seongnam-si  Gyeonggi-do  13449
+				KR
+
+70-B3-D5   (hex)		KJ3 Elektronik AB
+FB2000-FB2FFF     (base 16)		KJ3 Elektronik AB
+				Fornåsa 110
+				Fornåsa    59033
+				SE
+
+70-B3-D5   (hex)		Orlaco Products B.V.
+620000-620FFF     (base 16)		Orlaco Products B.V.
+				Albert Plesmanstraat 42
+				Barneveld    3772MN
+				NL
+
+70-B3-D5   (hex)		GSI Technology
+2A6000-2A6FFF     (base 16)		GSI Technology
+				Raul Walenberg 18
+				Tel Aviv  IL  6971915
+				IL
+
+70-B3-D5   (hex)		Orlaco Products B.V.
+EAE000-EAEFFF     (base 16)		Orlaco Products B.V.
+				Albert Plesmanstraat 42
+				Barneveld    3772MN
+				NL
+
+70-B3-D5   (hex)		iGrid T&D
+B50000-B50FFF     (base 16)		iGrid T&D
+				C. Marie Curie, 8-14
+				Barcelona  Catalonia  08042
+				ES
+
+70-B3-D5   (hex)		Izome
+9BE000-9BEFFF     (base 16)		Izome
+				route de chaudron
+				Montrevault sur Evre  Maine et Loire  49110
+				FR
+
+70-B3-D5   (hex)		Ethical Lighting and Sensor Solutions Limited
+5B6000-5B6FFF     (base 16)		Ethical Lighting and Sensor Solutions Limited
+				Unit 5 Churchill Industrial Estate
+				Cheltenham  Gloucestershire  GL53 7EG
+				GB
+
+70-B3-D5   (hex)		Divelbiss Corporation
+F43000-F43FFF     (base 16)		Divelbiss Corporation
+				9778 Mount Gilead Road
+				Fredericktown  OH  43019
+				US
+
+70-B3-D5   (hex)		TATTILE SRL
+8AA000-8AAFFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		ATION Corporation
+32C000-32CFFF     (base 16)		ATION Corporation
+				6FL, Room no.602, 14, Nonhyeon-ro 95-gil, Gangnam-gu
+				Seoul    06131
+				KR
+
+70-B3-D5   (hex)		MECT SRL
+7C4000-7C4FFF     (base 16)		MECT SRL
+				VIA E. FERMI 57/59
+				ALPIGNANO    10091
+				IT
+
+70-B3-D5   (hex)		Shenzhen Wesion Technology Co., Ltd
+863000-863FFF     (base 16)		Shenzhen Wesion Technology Co., Ltd
+				A511, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
+				Shenzhen  Guangdong  518102
+				CN
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+AB2000-AB2FFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		IMP-Computer Systems
+354000-354FFF     (base 16)		IMP-Computer Systems
+				Volgina 15
+				Belgrade    11000
+				RS
+
+70-B3-D5   (hex)		IMP-TELEKOMUNIKACIJE DOO
+38D000-38DFFF     (base 16)		IMP-TELEKOMUNIKACIJE DOO
+				Volgina 15
+				Belgrade    11060
+				RS
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+803000-803FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		Qntra Technology
+EA1000-EA1FFF     (base 16)		Qntra Technology
+				Velcho Atanasov 47
+				Sofia  Sofia  1505
+				BG
+
+70-B3-D5   (hex)		Heroic Technologies Inc.
+5E7000-5E7FFF     (base 16)		Heroic Technologies Inc.
+				200-155 East Beaver Creek Rd
+				Richmond Hill  Ontario  L4B2N1
+				CA
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+7DA000-7DAFFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		ZAO ZEO
+B60000-B60FFF     (base 16)		ZAO ZEO
+				Khachaturiana 14a
+				Moscow    127562
+				RU
+
+70-B3-D5   (hex)		Agrident GmbH
+EDE000-EDEFFF     (base 16)		Agrident GmbH
+				Steinklippenstrasse 10
+				Barsinghausen  Low Saxonia  30890
+				DE
+
+70-B3-D5   (hex)		MondeF
+1D9000-1D9FFF     (base 16)		MondeF
+				Neutronstraat 7-2
+				Groningen  Groningen  9743AM
+				NL
+
+70-B3-D5   (hex)		Alere Technologies AS
+91C000-91CFFF     (base 16)		Alere Technologies AS
+				Kjelsaasveien 161
+				Oslo  Oslo  0382
+				NO
+
+70-B3-D5   (hex)		BIGHOUSE.,INC.
+B80000-B80FFF     (base 16)		BIGHOUSE.,INC.
+				72-11, Pyeongchangmunwha-ro
+				SEOUL  KOREA  03011
+				KR
+
+70-B3-D5   (hex)		LG Electronics
+4F1000-4F1FFF     (base 16)		LG Electronics
+				Science Park W5, 10, Magokjungang 10-ro, Gangseo-gu
+				Seoul    07796
+				KR
+
+70-B3-D5   (hex)		Kniggendorf + Kögler Security GmbH 
+3DD000-3DDFFF     (base 16)		Kniggendorf + Kögler Security GmbH 
+				Hamburger Straße 4
+				Laatzen    30880
+				DE
+
+70-B3-D5   (hex)		812th AITS
+590000-590FFF     (base 16)		812th AITS
+				300 E Yeagar Blvd
+				Edwards AFB  CA  93524
+				US
+
+70-B3-D5   (hex)		OOO Alyans
+107000-107FFF     (base 16)		OOO Alyans
+				9 maya, 20
+				Krasnoyarsk  Krasnoyarski Krai  660125
+				RU
+
+70-B3-D5   (hex)		ABB S.p.A.
+5A7000-5A7FFF     (base 16)		ABB S.p.A.
+				Via Pisani 16
+				Milano  MI  20124
+				IT
+
+70-B3-D5   (hex)		W. H. Leary Co., Inc.
+1C0000-1C0FFF     (base 16)		W. H. Leary Co., Inc.
+				8440B West 183rd Pl
+				Tinley Park  IL  60487
+				US
+
+70-B3-D5   (hex)		Creative Electronics Ltd
+5EC000-5ECFFF     (base 16)		Creative Electronics Ltd
+				Broomwood, South Park
+				SEVENOAKS  Kent  TN131EL
+				GB
+
+70-B3-D5   (hex)		Plexus
+B2D000-B2DFFF     (base 16)		Plexus
+				5511 Capital Center Drive, Ste 600
+				Raleigh  NC  27606
+				US
+
+70-B3-D5   (hex)		WAVES SYSTEM
+CE4000-CE4FFF     (base 16)		WAVES SYSTEM
+				La Ville en Bois
+				BOUAYE  Loire Atlantique  44830
+				FR
+
+70-B3-D5   (hex)		Ruag Defence France SAS
+598000-598FFF     (base 16)		Ruag Defence France SAS
+				Chemin Jean Thomas
+				Terssac    81150
+				FR
+
+70-B3-D5   (hex)		SwineTech, Inc.
+DC2000-DC2FFF     (base 16)		SwineTech, Inc.
+				230 2nd Street SE, Ste 302
+				Cedar Rapids  IA  52401
+				US
+
+70-B3-D5   (hex)		sohonet ltd
+0CF000-0CFFFF     (base 16)		sohonet ltd
+				3-5, Soho Street
+				London  London  W1D 3DG
+				GB
+
+70-B3-D5   (hex)		Scame Sistemi srl
+F04000-F04FFF     (base 16)		Scame Sistemi srl
+				Via Lombardia 5
+				Arluno  Milan  20010
+				IT
+
+70-B3-D5   (hex)		Audiodo AB
+1FF000-1FFFFF     (base 16)		Audiodo AB
+				Östra Varvsgatan 4
+				Malmö    21114
+				SE
+
+70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
+8CD000-8CDFFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+70-B3-D5   (hex)		TruTeq Wireless (Pty) Ltd
+4AB000-4ABFFF     (base 16)		TruTeq Wireless (Pty) Ltd
+				Ameton House
+				Centurion  Gauteng  0157
+				ZA
+
+70-B3-D5   (hex)		IPG Photonics Corporation
+2E6000-2E6FFF     (base 16)		IPG Photonics Corporation
+				377 Simarano Drive
+				Marlborough  MA  01752
+				US
+
+70-B3-D5   (hex)		Open System Solutions Limited
+FAB000-FABFFF     (base 16)		Open System Solutions Limited
+				Unit 33, Mitchell Point, Ensign Way
+				Southampton  Hampshire  SO31 4RF
+				GB
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+2DE000-2DEFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Centro de Ingenieria y Desarrollo industrial
+73C000-73CFFF     (base 16)		Centro de Ingenieria y Desarrollo industrial
+				Av. Playa Pie de la cuesta No.702 Desarrollo san pablo
+				Queretaro  Queretaro  76125
+				MX
+
+70-B3-D5   (hex)		Coral Telecom Limited
+C8E000-C8EFFF     (base 16)		Coral Telecom Limited
+				E-2, Sector 63
+				Noida  Uttar Pradesh  201301
+				IN
+
+70-B3-D5   (hex)		Smashtag Ltd
+F6F000-F6FFFF     (base 16)		Smashtag Ltd
+				Unit B6 Beech House, Melbourn Science Park
+				Royston  Hertfordshire  SG8 6HB
+				GB
+
+70-B3-D5   (hex)		David Horn Communications Ltd
+ABB000-ABBFFF     (base 16)		David Horn Communications Ltd
+				Enterprise way,, Bramingham Business park
+				Luton  Bedfordshire  LU3 4BU
+				GB
+
+70-B3-D5   (hex)		CRDMDEVEOPPEMENTS
+B5F000-B5FFFF     (base 16)		CRDMDEVEOPPEMENTS
+				13 Petit chemin de la generale
+				Villenave d'Ornon  Gironde  33140
+				FR
+
+70-B3-D5   (hex)		Tecnint HTE SRL
+ACA000-ACAFFF     (base 16)		Tecnint HTE SRL
+				Via della Tecnica 16/18
+				Osnago  Lecco  23875
+				IT
+
+70-B3-D5   (hex)		Ascenix Corporation
+3A4000-3A4FFF     (base 16)		Ascenix Corporation
+				1120 Benfield Blvd. STE A
+				Millersville  MD  21108
+				US
+
+70-B3-D5   (hex)		NAJIN automation
+6CB000-6CBFFF     (base 16)		NAJIN automation
+				7F Rm.144, Hyoryeong-Ro 304
+				Seocho-Gu  Seoul  06720
+				KR
+
+70-B3-D5   (hex)		Camsat Przemysław Gralak
+FE9000-FE9FFF     (base 16)		Camsat Przemysław Gralak
+				Ogrodowa 2A
+				Solec Kujawski    86-050
+				PL
+
+70-B3-D5   (hex)		TAALEX Systemtechnik GmbH
+553000-553FFF     (base 16)		TAALEX Systemtechnik GmbH
+				Schubertstrasse 27
+				Stadtlohn  NRW  48703
+				DE
+
+70-B3-D5   (hex)		Foerster-Technik GmbH
+9F7000-9F7FFF     (base 16)		Foerster-Technik GmbH
+				Gerwigstraße 25
+				Engen  Baden-Württemberg  78234
+				DE
+
+70-B3-D5   (hex)		wallbe GmbH
+543000-543FFF     (base 16)		wallbe GmbH
+				Paderborner Straße 76
+				Schlangen   NRW  33189
+				DE
+
+70-B3-D5   (hex)		Cardinal Scales Manufacturing Co
+30F000-30FFFF     (base 16)		Cardinal Scales Manufacturing Co
+				203 East Daugherty Street
+				Webb City  MO  64870
+				US
+
+70-B3-D5   (hex)		Vision4ce Ltd
+D01000-D01FFF     (base 16)		Vision4ce Ltd
+				Unit 4, Wokingham Commercial Centre
+				Wokingham  Berkshire  RG41 2RF
+				GB
+
+70-B3-D5   (hex)		Virtual Control Systems Ltd
+EC3000-EC3FFF     (base 16)		Virtual Control Systems Ltd
+				27 Main Street, Overton
+				Morecambe  Lancashire  LA3 3HF
+				GB
+
+70-B3-D5   (hex)		SOREL GmbH Mikroelektronik
+A84000-A84FFF     (base 16)		SOREL GmbH Mikroelektronik
+				REME-Str. 12
+				Wetter    58300
+				DE
+
+70-B3-D5   (hex)		Energy Wall
+990000-990FFF     (base 16)		Energy Wall
+				1002 New Holland Ave
+				Lancaster  PA  17601
+				US
+
+70-B3-D5   (hex)		CAPTEMP, Lda
+49E000-49EFFF     (base 16)		CAPTEMP, Lda
+				Rua São João, s/n - Ladeira das Leais
+				Pombal    3100-346
+				PT
+
+70-B3-D5   (hex)		DogWatch Inc
+302000-302FFF     (base 16)		DogWatch Inc
+				10 Michigan Drive
+				Natick  MA  01760
+				US
+
+70-B3-D5   (hex)		PSL ELEKTRONİK SANAYİ VE TİCARET A.S.
+510000-510FFF     (base 16)		PSL ELEKTRONİK SANAYİ VE TİCARET A.S.
+				Antalya OSB 3. Kısım 25. Cadde No:30
+				ANTALYA    07190
+				TR
+
+70-B3-D5   (hex)		eze System, Inc.
+2F5000-2F5FFF     (base 16)		eze System, Inc.
+				785 Orchard Dr #100
+				Folsom  CA  95630
+				US
+
+70-B3-D5   (hex)		Shengli Financial Software Development
+F22000-F22FFF     (base 16)		Shengli Financial Software Development
+				3766 Nanhuan Road, Binjiang
+				Hangzhou    310051
+				CN
+
+70-B3-D5   (hex)		Gogo BA 
+1E8000-1E8FFF     (base 16)		Gogo BA 
+				105 Edgeview Drive
+				Broomfield  CO  80021
+				US
+
+70-B3-D5   (hex)		Mighty Cube Co., Ltd.
+403000-403FFF     (base 16)		Mighty Cube Co., Ltd.
+				UNIZO Nihonbashihoncho 3-CHome Building 5F 3-8-4 Nihonbashi-honcho
+				Chuo-ku  TOKYO  103-0023
+				JP
+
+70-B3-D5   (hex)		Software Systems Plus
+7DC000-7DCFFF     (base 16)		Software Systems Plus
+				9924 N. Ash Avenue
+				Kansas City  null  64157
+				US
+
+70-B3-D5   (hex)		Digital Way
+437000-437FFF     (base 16)		Digital Way
+				1 Chemin des CHAUX
+				Saint-Etienne  Loire  42000
+				FR
+
+70-B3-D5   (hex)		IoT Routers Limited
+F51000-F51FFF     (base 16)		IoT Routers Limited
+				The Barn, 22 Brackendale
+				Bradford  West Yorkshire  BD10 0SJ
+				GB
+
+70-B3-D5   (hex)		LSC Lighting Systems (Aust) Pty Ltd
+CC2000-CC2FFF     (base 16)		LSC Lighting Systems (Aust) Pty Ltd
+				65-67 Discovery Road
+				Dandenong South  Victoria  3175
+				AU
+
+70-B3-D5   (hex)		APG Cash Drawer, LLC
+C9D000-C9DFFF     (base 16)		APG Cash Drawer, LLC
+				5250 Industrial Blvd NE
+				Minneapolis  MN  55421
+				US
+
+70-B3-D5   (hex)		EIDOS s.r.l.
+890000-890FFF     (base 16)		EIDOS s.r.l.
+				via dell'Industria, 11 Z.I. Fontaneto 
+				CHIERI   Turin  10023
+				IT
+
+70-B3-D5   (hex)		Ahrens & Birner Company GmbH
+6D2000-6D2FFF     (base 16)		Ahrens & Birner Company GmbH
+				Virchowstreet 19/19a
+				Nuremberg    90409
+				DE
+
+70-B3-D5   (hex)		Daatrics LTD
+A5F000-A5FFFF     (base 16)		Daatrics LTD
+				4th Floor, 86-90 Paul Street
+				LONDON    EC2A 4NE
+				GB
+
+70-B3-D5   (hex)		BRS Sistemas Eletrônicos
+F16000-F16FFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491 / 204
+				Porto Alegre  RS  91380-000
+				BR
+
+70-B3-D5   (hex)		Boffins Technologies AB
+E5D000-E5DFFF     (base 16)		Boffins Technologies AB
+				Russgatan 5
+				Malmö    212 35
+				SE
+
+70-B3-D5   (hex)		Liaoyun Information Technology Co., Ltd.
+40E000-40EFFF     (base 16)		Liaoyun Information Technology Co., Ltd.
+				Floor 5, Building 8, No. 690 Bibo Road
+				Shanghai    201203
+				CN
+
+70-B3-D5   (hex)		BT9
+6B8000-6B8FFF     (base 16)		BT9
+				Dolev 33
+				Tefen    2495900
+				IL
+
+70-B3-D5   (hex)		biosilver .co.,ltd
+43F000-43FFFF     (base 16)		biosilver .co.,ltd
+				2-14-4, shinyokohama
+				yokohama  kanagawa  2220033
+				JP
+
+70-B3-D5   (hex)		Hongin., Ltd
+355000-355FFF     (base 16)		Hongin., Ltd
+				160, Daehwa-ro, Daedeok-gu
+				Daejeon  Republic of Korea  34368
+				KR
+
+70-B3-D5   (hex)		Centum Adetel Group
+FD7000-FD7FFF     (base 16)		Centum Adetel Group
+				4 Chemin du ruisseau
+				Ecully    69130
+				FR
+
+70-B3-D5   (hex)		CRUXELL Corp.
+518000-518FFF     (base 16)		CRUXELL Corp.
+				A-405 Migun techno world II,187 techno 2-ro, Yusong-gu
+				Daejeon  Daejeon  34025
+				KR
+
+70-B3-D5   (hex)		Shenzhen Hui Rui Tianyan Technology Co., Ltd.
+FA5000-FA5FFF     (base 16)		Shenzhen Hui Rui Tianyan Technology Co., Ltd.
+				7th Floor, Yuemei Building, Gaoxin South Road, Nanshan District
+				Shenzhen  Guangdong  518000
+				CN
+
+70-B3-D5   (hex)		AEV Broadcast Srl 
+0EA000-0EAFFF     (base 16)		AEV Broadcast Srl 
+				Via Della Tecnica, 33
+				Argelato  BO - VAT IT03167451206     40050
+				IT
+
+70-B3-D5   (hex)		Veo Technologies
+A9C000-A9CFFF     (base 16)		Veo Technologies
+				Skyttegade 7, 3. tv
+				Copenhagen  Denmark  2200
+				DK
+
+70-B3-D5   (hex)		BLUE-SOLUTIONS CANADA INC.
+EE7000-EE7FFF     (base 16)		BLUE-SOLUTIONS CANADA INC.
+				1560 RUE DE COULOMB
+				BOUCHERVILLE  QUEBEC  J4B 7Z7
+				CA
+
+70-B3-D5   (hex)		Vocality international T/A Cubic
+4EA000-4EAFFF     (base 16)		Vocality international T/A Cubic
+				Lydling Barn,Lydling Farm,, Puttenham Lane
+				Godalming  Surrey  gu8 6ap
+				GB
+
+70-B3-D5   (hex)		CDR SRL
+F58000-F58FFF     (base 16)		CDR SRL
+				VIA DEGLI ARTIGIANI 6
+				GINESTRA FIORENTINA  FLORENCE  50055
+				IT
+
+70-B3-D5   (hex)		SilTerra Malaysia Sdn. Bhd.
+31B000-31BFFF     (base 16)		SilTerra Malaysia Sdn. Bhd.
+				Lot 8, Phase II, Kulim Hi-Tech Park
+				KULIM  KEDAH  09000
+				MY
+
+70-B3-D5   (hex)		Dr. Zinngrebe GmbH
+42E000-42EFFF     (base 16)		Dr. Zinngrebe GmbH
+				Schillerstraße 1/15
+				Ulm  Baden-Württemberg  89077
+				DE
+
+70-B3-D5   (hex)		Lumiplan Duhamel
+E94000-E94FFF     (base 16)		Lumiplan Duhamel
+				2 rue de l'industrie
+				Domène  Isère  38420
+				FR
+
+70-B3-D5   (hex)		Newshine
+A64000-A64FFF     (base 16)		Newshine
+				Pingcheng Rd
+				Shanghai  Shanghai  201800
+				CN
+
+70-B3-D5   (hex)		OS42 UG (haftungsbeschraenkt)
+9D1000-9D1FFF     (base 16)		OS42 UG (haftungsbeschraenkt)
+				Wachtelstrasse 81
+				Hamburg    22305
+				DE
+
+70-B3-D5   (hex)		csintech
+DB6000-DB6FFF     (base 16)		csintech
+				234, Oksan-ro
+				Bucheon-si  Gyeonggi-do  14521
+				KR
+
+70-B3-D5   (hex)		Aldridge Electrical Industries
+848000-848FFF     (base 16)		Aldridge Electrical Industries
+				10-16 Sir Joseph Banks Drive 
+				Sydney  NSW  2231
+				AU
+
+70-B3-D5   (hex)		alfamation spa
+675000-675FFF     (base 16)		alfamation spa
+				via cadore 21
+				lissone  mb  20851
+				IT
+
+70-B3-D5   (hex)		Incusense
+7F5000-7F5FFF     (base 16)		Incusense
+				424 NE 4th st
+				McMinnville  OR  97128
+				US
+
+70-B3-D5   (hex)		Onosokki Co.,Ltd
+8C6000-8C6FFF     (base 16)		Onosokki Co.,Ltd
+				3-9-3 shinyokohama,kohoku
+				yokohama    222-8507
+				JP
+
+70-B3-D5   (hex)		LEGENDAIRE TECHNOLOGY CO., LTD.
+02F000-02FFFF     (base 16)		LEGENDAIRE TECHNOLOGY CO., LTD.
+				2F,No.278,Fu Shun Rd.
+				Taichung City    40764
+				TW
+
+70-B3-D5   (hex)		Lexi Devices, Inc.
+AC4000-AC4FFF     (base 16)		Lexi Devices, Inc.
+				2342 Shattuck Ave, #260
+				Berkeley    94704
+				US
+
+70-B3-D5   (hex)		Fidalia Networks Inc
+CC3000-CC3FFF     (base 16)		Fidalia Networks Inc
+				1 Port Street East
+				Mississauga  Ontario  L5G4N1
+				CA
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+5F9000-5F9FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Dia-Stron Limited
+EA8000-EA8FFF     (base 16)		Dia-Stron Limited
+				Unit 9 Focus Way
+				Andover  Hampshire  SP10 5NY
+				GB
+
+70-B3-D5   (hex)		wallbe GmbH
+07B000-07BFFF     (base 16)		wallbe GmbH
+				Paderborner Straße 76
+				Schlangen   NRW  33189
+				DE
+
+70-B3-D5   (hex)		Hanwell Technology Co., Ltd.
+32D000-32DFFF     (base 16)		Hanwell Technology Co., Ltd.
+				3F., No. 41, Dongxing Rd., Xinyi District.
+				Taipei    11070
+				TW
+
+70-B3-D5   (hex)		Amfitech ApS
+123000-123FFF     (base 16)		Amfitech ApS
+				Platzvej 2
+				Vejle  Syddanmark  7100
+				DK
+
+70-B3-D5   (hex)		Procon Electronics Pty Ltd
+8EB000-8EBFFF     (base 16)		Procon Electronics Pty Ltd
+				P O Box 164
+				Seven Hills  NSW  1730
+				AU
+
+70-B3-D5   (hex)		TASK SISTEMAS DE COMPUTACAO LTDA
+961000-961FFF     (base 16)		TASK SISTEMAS DE COMPUTACAO LTDA
+				Rua 2 / 112 Jardim Itatiaia 
+				Itatiaia  Rio de Janeiro  27580-000
+				BR
+
+70-B3-D5   (hex)		AooGee Controls Co., LTD.
+1CC000-1CCFFF     (base 16)		AooGee Controls Co., LTD.
+				Siming District office building 14, Fu Lian
+				Xiamen  Fujian  361000
+				CN
+
+70-B3-D5   (hex)		FRAKO Kondensatoren und Anlagenbau GmbH
+014000-014FFF     (base 16)		FRAKO Kondensatoren und Anlagenbau GmbH
+				Tscheulinstr. 21a
+				Teningen    79331
+				DE
+
+70-B3-D5   (hex)		Akse srl
+09A000-09AFFF     (base 16)		Akse srl
+				Via Aldo Moro, 39
+				Reggio Emilia  Italy  42124
+				IT
+
+70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
+0C9000-0C9FFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
+B0B000-B0BFFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
+				Sector Foresta 43, local 26
+				Tres Cantos  Madrid  28760
+				ES
+
+70-B3-D5   (hex)		Ellenex Pty Ltd
+CD0000-CD0FFF     (base 16)		Ellenex Pty Ltd
+				91 Tope Street
+				South Melbourne  VIC  3205
+				AU
+
+70-B3-D5   (hex)		Blue Access Inc
+C66000-C66FFF     (base 16)		Blue Access Inc
+				P.O. Box 
+				Erie  CO  80516
+				US
+
+70-B3-D5   (hex)		provedo
+A54000-A54FFF     (base 16)		provedo
+				Friedrich-Ebert-Straße, 63
+				Leipzig    04109
+				DE
+
+70-B3-D5   (hex)		Okolab Srl
+BF9000-BF9FFF     (base 16)		Okolab Srl
+				Via G. di Prisco n. 152
+				Ottaviano  NA  80044
+				IT
+
+70-B3-D5   (hex)		TEX COMPUTER SRL 
+5FA000-5FAFFF     (base 16)		TEX COMPUTER SRL 
+				VIA MERCADANTE 35
+				CATTOLICA   RIMINI   47841
+				IT
+
+70-B3-D5   (hex)		EN ElectronicNetwork Hamburg GmbH
+015000-015FFF     (base 16)		EN ElectronicNetwork Hamburg GmbH
+				Meiendorfer Strasse 205
+				Hamburg    22145
+				DE
+
+70-B3-D5   (hex)		Convergent Design
+1F8000-1F8FFF     (base 16)		Convergent Design
+				4525 Northpark Drive
+				Colorado Springs  CO  80918
+				US
+
+70-B3-D5   (hex)		FRS GmbH & Co. KG
+F8A000-F8AFFF     (base 16)		FRS GmbH & Co. KG
+				Weingartenstr. 1-3
+				Dortmund  NW  44263
+				DE
+
+70-B3-D5   (hex)		MSB Elektronik und Gerätebau GmbH
+E9E000-E9EFFF     (base 16)		MSB Elektronik und Gerätebau GmbH
+				Hofwiesenstr. 23
+				Crailsheim    74564
+				DE
+
+70-B3-D5   (hex)		DiTEST Fahrzeugdiagnose GmbH
+109000-109FFF     (base 16)		DiTEST Fahrzeugdiagnose GmbH
+				ALTE POSTSTRASSE 152
+				A-8020  GRAZ  STEIERMARK
+				AT
+
+70-B3-D5   (hex)		Merlin CSI
+C41000-C41FFF     (base 16)		Merlin CSI
+				10755 Scripps Poway Pkwy # 524
+				San Diego  CA  92131
+				US
+
+70-B3-D5   (hex)		CHRONOMEDIA
+21F000-21FFFF     (base 16)		CHRONOMEDIA
+				#508, 1130, Beoman-ro, Geumcheon-gu
+				Seoul    08595
+				KR
+
+70-B3-D5   (hex)		SHANGHAI IRISIAN OPTRONICS TECHNOLOGY CO.,LTD.
+2D2000-2D2FFF     (base 16)		SHANGHAI IRISIAN OPTRONICS TECHNOLOGY CO.,LTD.
+				8F, NO.800, Huanhu NO.2 Road (W), Pudong New District, Shanghai 201306, China
+				Shanghai  Shanghai   201306
+				CN
+
+70-B3-D5   (hex)		Naval Group
+382000-382FFF     (base 16)		Naval Group
+				40-42 Rue Du Docteur Finlay
+				PARIS CEDEX 15    75732
+				FR
+
+70-B3-D5   (hex)		EIFFAGE ENERGIE ELECTRONIQUE
+037000-037FFF     (base 16)		EIFFAGE ENERGIE ELECTRONIQUE
+				D937
+				VERQUIN    62131
+				FR
+
+70-B3-D5   (hex)		Telefrank GmbH
+A82000-A82FFF     (base 16)		Telefrank GmbH
+				Am Wildengrund 1
+				Altenambach  TH  98553
+				DE
+
+70-B3-D5   (hex)		Orange Tree Technologies Ltd
+EF4000-EF4FFF     (base 16)		Orange Tree Technologies Ltd
+				173 Curie Avenue, Harwell Oxford
+				Didcot  Oxfordshire  OX11 0QG
+				GB
+
+70-B3-D5   (hex)		Yukilab
+7D6000-7D6FFF     (base 16)		Yukilab
+				1-7-3 Sekiya-Matsunami, Chuo
+				Niigata  Niigata  951-8161
+				JP
+
+70-B3-D5   (hex)		SYS TEC electronic GmbH
+BAF000-BAFFFF     (base 16)		SYS TEC electronic GmbH
+				Am Windrad 2
+				Heinsdorfergrund     D-08468
+				DE
+
+70-B3-D5   (hex)		Technica Engineering GmbH
+4C0000-4C0FFF     (base 16)		Technica Engineering GmbH
+				Leopoldstraße 236
+				Munich    80807
+				DE
+
+70-B3-D5   (hex)		SiFive
+92F000-92FFFF     (base 16)		SiFive
+				1875 S Grant St
+				San Mateo  CA  94403
+				US
+
+70-B3-D5   (hex)		KnowRoaming
+D6A000-D6AFFF     (base 16)		KnowRoaming
+				90 Eglinton Ave. E
+				Toronto  Ontario - ON  M4P2Y3
+				CA
+
+70-B3-D5   (hex)		Pietro Fiorentini
+A76000-A76FFF     (base 16)		Pietro Fiorentini
+				Via Enrico Fermi
+				Arcugnano    36057
+				IT
+
+70-B3-D5   (hex)		OnYield Inc Ltd
+B74000-B74FFF     (base 16)		OnYield Inc Ltd
+				814 Houston Centre, 63 Mody Road
+				Kowloon    TST East
+				HK
+
+70-B3-D5   (hex)		Hangzhou Woosiyuan Communication Co.,Ltd.
+1F4000-1F4FFF     (base 16)		Hangzhou Woosiyuan Communication Co.,Ltd.
+				13 Dongyuexincun Xihu district
+				Hangzhou  Zhejiang  310023
+				CN
+
+70-B3-D5   (hex)		ZAO ZEO
+B43000-B43FFF     (base 16)		ZAO ZEO
+				Khachaturiana 14a
+				Moscow    127562
+				RU
+
+70-B3-D5   (hex)		Roxford
+651000-651FFF     (base 16)		Roxford
+				PO Box 231851
+				Encinitas  CA  92023-1851
+				US
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+8D9000-8D9FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Granite River Labs Inc
+749000-749FFF     (base 16)		Granite River Labs Inc
+				3500 Thomas Rd # A,
+				 Santa Clara    95054
+				US
+
+70-B3-D5   (hex)		OÜ ELIKO Tehnoloogia Arenduskeskus
+D4A000-D4AFFF     (base 16)		OÜ ELIKO Tehnoloogia Arenduskeskus
+				Mäealuse 2/1
+				Tallinn  Harju  12618
+				EE
+
+70-B3-D5   (hex)		Shandong Hospot IOT Technology Co.,Ltd.
+576000-576FFF     (base 16)		Shandong Hospot IOT Technology Co.,Ltd.
+				No.96 Road Fuyang
+				Rizhao  Shandong  276800
+				CN
+
+70-B3-D5   (hex)		Yaham Optoelectronics Co., Ltd
+2FE000-2FEFFF     (base 16)		Yaham Optoelectronics Co., Ltd
+				Bldg A & Bldg D, Yongwei Industrial Park,#118 Yongfu Rd, Qiaotou Community, Fuyong,Bao'an District,Shenzhen
+				Shenzhen  Bao'an District/GuangDong  518103
+				CN
+
+70-B3-D5   (hex)		FlowNet LLC
+526000-526FFF     (base 16)		FlowNet LLC
+				580 Lake Ave
+				Lancaster  NY  14086
+				US
+
+70-B3-D5   (hex)		HZHY TECHNOLOGY
+4A6000-4A6FFF     (base 16)		HZHY TECHNOLOGY
+				The 2th floor,Longzeyuan Multi-use
+				beijing    102208
+				CN
+
+70-B3-D5   (hex)		D.E.M. SPA
+C1C000-C1CFFF     (base 16)		D.E.M. SPA
+				Z.I. VILLANOVA 20
+				Longarone (BL)    32013
+				IT
+
+70-B3-D5   (hex)		Globalcom Engineering SPA
+A0D000-A0DFFF     (base 16)		Globalcom Engineering SPA
+				Via Volta 39
+				CARDANO AL CAMPO  VA  21010
+				IT
+
+70-B3-D5   (hex)		FOSHAN VOHOM
+2BF000-2BFFFF     (base 16)		FOSHAN VOHOM
+				Unit 402, 4/F ENT A3 Bldg, Hantian Science and Technology City, No. 17 Shenhai RD.
+				Foshan  Guangdong  528200
+				CN
+
+70-B3-D5   (hex)		Hills Health Solutions
+78A000-78AFFF     (base 16)		Hills Health Solutions
+				Unit 1, Builing F, 3-29 Birnie Ave
+				Lidcombe  New South Wales  2141
+				AU
+
+70-B3-D5   (hex)		Triax A/S
+941000-941FFF     (base 16)		Triax A/S
+				Bjornkaervej 3
+				Hornsyld  Denmark  8783
+				DK
+
+70-B3-D5   (hex)		Metrum Sweden AB
+F98000-F98FFF     (base 16)		Metrum Sweden AB
+				Anders Personsgatan 16
+				Goteborg    41664
+				SE
+
+70-B3-D5   (hex)		Quantum Opus, LLC
+602000-602FFF     (base 16)		Quantum Opus, LLC
+				45211 Helm St
+				Plymouth  MI  48170
+				US
+
+70-B3-D5   (hex)		MatchX GmbH
+1CB000-1CBFFF     (base 16)		MatchX GmbH
+				Adalbert Str.8
+				Berlin    10999
+				DE
+
+70-B3-D5   (hex)		Avant Technologies, Inc
+410000-410FFF     (base 16)		Avant Technologies, Inc
+				Road 156 Caguas West Ind. Park bldg 39
+				Caguas  PR  00726
+				US
+
+70-B3-D5   (hex)		SHINWA INDUSTRIES, INC.
+F87000-F87FFF     (base 16)		SHINWA INDUSTRIES, INC.
+				Daisan Nishi-Aoyama Bldg. 6F 1-8-1 Shibuya
+				Shibuya-ku  Tokyo  150-0002
+				JP
+
+70-B3-D5   (hex)		HEITEC AG
+228000-228FFF     (base 16)		HEITEC AG
+				Dr.-Otto-Leich-Str. 16
+				Eckental  Bavaria  90542
+				DE
+
+70-B3-D5   (hex)		Divigraph (Pty) LTD
+A86000-A86FFF     (base 16)		Divigraph (Pty) LTD
+				 Postnet Suite 72, Private Bag X7
+				Chempet    7442
+				ZA
+
+70-B3-D5   (hex)		Impulse Automation
+7A3000-7A3FFF     (base 16)		Impulse Automation
+				Obuhovskoy Oborony 120-B
+				Saint Petersburg  Saint Petersburg  192012
+				RU
+
+70-B3-D5   (hex)		MonsoonRF, Inc.
+0F3000-0F3FFF     (base 16)		MonsoonRF, Inc.
+				7740 Garvey Ave, Unit D
+				Rosemead  CA  91770
+				US
+
+70-B3-D5   (hex)		Planewave Instruments
+CB4000-CB4FFF     (base 16)		Planewave Instruments
+				1819 Kona Dr.
+				Compton  CA  90220
+				US
+
+70-B3-D5   (hex)		NESA SRL
+BFA000-BFAFFF     (base 16)		NESA SRL
+				Via Sartori, 6/8
+				Vidor  Treviso  31020
+				IT
+
+70-B3-D5   (hex)		ONDEMAND LABORATORY Co., Ltd.
+069000-069FFF     (base 16)		ONDEMAND LABORATORY Co., Ltd.
+				Daiba 449 Space 369 Building 2F
+				Mishima  Shizuoka  411-0803
+				JP
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+08A000-08AFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Particle sizing systems
+670000-670FFF     (base 16)		Particle sizing systems
+				8203 Kristel Cir
+				New Port Richey  FL  34652
+				US
+
+70-B3-D5   (hex)		FLUDIA
+4A0000-4A0FFF     (base 16)		FLUDIA
+				4T rue honoré d'estienne d'orves
+				Suresnes    92150
+				FR
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+E86000-E86FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		RELISTE Ges.m.b.H.
+1B9000-1B9FFF     (base 16)		RELISTE Ges.m.b.H.
+				Enzersdorfer Strasse 8-10
+				Brunn am Gebirge    2345
+				AT
+
+70-B3-D5   (hex)		Hagenuk KMT Kabelmesstechnik GmbH
+132000-132FFF     (base 16)		Hagenuk KMT Kabelmesstechnik GmbH
+				Röderaue 41
+				Radeburg  Sachsen  01471
+				DE
+
+70-B3-D5   (hex)		Jiangsu Jinheng  Information Technology Co.,Ltd.
+492000-492FFF     (base 16)		Jiangsu Jinheng  Information Technology Co.,Ltd.
+				LuHe District,XieJiaDian,Ninggang Road No.81
+				Nanjing  Jiangsu  210035
+				CN
+
+70-B3-D5   (hex)		MAMAC Systems, Inc.
+BA2000-BA2FFF     (base 16)		MAMAC Systems, Inc.
+				8189 Century Blvd.
+				Chanhassen  null  55317-8002
+				US
+
+70-B3-D5   (hex)		Ofil USA
+9E2000-9E2FFF     (base 16)		Ofil USA
+				5415 Sugarloaf Parkway Suite 1102 A&B
+				Lawrenceville  GA  30043
+				US
+
+70-B3-D5   (hex)		iTelaSoft Pvt Ltd
+6F0000-6F0FFF     (base 16)		iTelaSoft Pvt Ltd
+				No. 02, Balapokuna Road
+				Colombo 06    00600
+				LK
+
+70-B3-D5   (hex)		CE LINK LIMITED
+547000-547FFF     (base 16)		CE LINK LIMITED
+				2/F, Building G, Licheng Tech. Ind. Zone
+				Shenzhen  Guangdong  518104
+				CN
+
+70-B3-D5   (hex)		Integritech
+BB4000-BB4FFF     (base 16)		Integritech
+				6434 E. Main Street, Unit 103
+				Reynoldsburg  OH  43068
+				US
+
+70-B3-D5   (hex)		I.E. Sevko A.V.
+8F7000-8F7FFF     (base 16)		I.E. Sevko A.V.
+				7-1-97, Polyarnaya st.
+				Moscow    127081
+				RU
+
+70-B3-D5   (hex)		Systems Engineering Arts Pty Ltd
+3CF000-3CFFFF     (base 16)		Systems Engineering Arts Pty Ltd
+				56 Benbow St
+				Yarraville  Vic  3013
+				AU
+
+70-B3-D5   (hex)		Embedded Arts Co., Ltd.
+0C6000-0C6FFF     (base 16)		Embedded Arts Co., Ltd.
+				1-1-6 Ryousoutuuun Bldg. 2F
+				Kisarazu-shi  Chiba  292-0067
+				JP
+
+70-B3-D5   (hex)		DAVE SRL
+EF7000-EF7FFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+70-B3-D5   (hex)		Movicom LLC
+5DB000-5DBFFF     (base 16)		Movicom LLC
+				Nauchny proezd, 20
+				Moscow    117246
+				RU
+
+70-B3-D5   (hex)		Toughdog Security Systems
+A32000-A32FFF     (base 16)		Toughdog Security Systems
+				1317 E Hackberry Ave
+				McAllen  TX  78501
+				US
+
+70-B3-D5   (hex)		Stanet Co.,Ltd
+841000-841FFF     (base 16)		Stanet Co.,Ltd
+				6F., No.67, Guangfu S. Rd.
+				Taipei    105
+				TW
+
+70-B3-D5   (hex)		FreeFlight Systems
+5F6000-5F6FFF     (base 16)		FreeFlight Systems
+				8150 Springwood Drive, Suite 100
+				Irving  TX  75063
+				US
+
+70-B3-D5   (hex)		APG Cash Drawer, LLC
+BB3000-BB3FFF     (base 16)		APG Cash Drawer, LLC
+				5250 Industrial Blvd NE
+				Minneapolis  MN  55421
+				US
+
+70-B3-D5   (hex)		Silixa Ltd
+FAE000-FAEFFF     (base 16)		Silixa Ltd
+				230 Centennial Park
+				Elstree  Hertfordshire  WD6 3SN
+				GB
+
+70-B3-D5   (hex)		ENTEC Electric & Electronic CO., LTD
+07E000-07EFFF     (base 16)		ENTEC Electric & Electronic CO., LTD
+				78-2 Buncheon-ri
+				Hwaseong-city  Gyungki-do  445-894
+				KR
+
+70-B3-D5   (hex)		Turbo Technologies Corporation
+3AF000-3AFFFF     (base 16)		Turbo Technologies Corporation
+				Rm701,Building C2,Land of Innovation City of Future,No.999.Gaoxin Avenue,East Lake Hi-Tech Zone
+				Wuhan  Hubei  430075
+				CN
+
+70-B3-D5   (hex)		Ensys srl
+BBF000-BBFFFF     (base 16)		Ensys srl
+				Via Zamenhof, 817
+				Vicenza  Vicenza  36100
+				IT
+
+70-B3-D5   (hex)		EFG CZ spol. s r.o.
+897000-897FFF     (base 16)		EFG CZ spol. s r.o.
+				Na Jarově 4
+				Praha 3  Czech republic  13000
+				CZ
+
+70-B3-D5   (hex)		Husty M.Styczen J.Hupert Sp.J.
+086000-086FFF     (base 16)		Husty M.Styczen J.Hupert Sp.J.
+				Rzepakowa 5e
+				Krakow  malopolska  31-989
+				PL
+
+70-B3-D5   (hex)		Controlrad
+CD3000-CD3FFF     (base 16)		Controlrad
+				20(49), HaTaas st,
+				Kfar-Saba,   Israel  4442520
+				IL
+
+70-B3-D5   (hex)		Globalcom Engineering SPA
+284000-284FFF     (base 16)		Globalcom Engineering SPA
+				Via Volta 39
+				CARDANO AL CAMPO  VA  21010
+				IT
+
+70-B3-D5   (hex)		Javasparrow Inc.
+991000-991FFF     (base 16)		Javasparrow Inc.
+				303,1-31-17,Koudou
+				Adachi  Tokyo  120013
+				JP
+
+70-B3-D5   (hex)		KM OptoElektronik GmbH
+9D7000-9D7FFF     (base 16)		KM OptoElektronik GmbH
+				Mollenbachstraße 14 
+				Leonberg  Württemberg  71229
+				DE
+
+70-B3-D5   (hex)		viZaar industrial imaging AG
+4E5000-4E5FFF     (base 16)		viZaar industrial imaging AG
+				Hechinger Strasse 152
+				Albstadt  Baden-Württemberg  72461
+				DE
+
+70-B3-D5   (hex)		ic-automation GmbH
+D44000-D44FFF     (base 16)		ic-automation GmbH
+				Alexander-Diehl-Straße, 2A
+				Mainz  Deutschland  55130
+				DE
+
+70-B3-D5   (hex)		WOOJIN Inc
+203000-203FFF     (base 16)		WOOJIN Inc
+				Gyeonggi
+				Hwaseong  Dongbu-daero 970beon-gil 110  18481
+				KR
+
+70-B3-D5   (hex)		Neoptix Inc.
+EC7000-EC7FFF     (base 16)		Neoptix Inc.
+				1415 Frank-Carrel
+				Quebec    G1N4N7
+				CA
+
+70-B3-D5   (hex)		Newtouch Electronics (Shanghai) Co.,Ltd.
+DFA000-DFAFFF     (base 16)		Newtouch Electronics (Shanghai) Co.,Ltd.
+				No.418, 4F, Building 1, Lujiazui Software Park No.98,  Lane 91, E Shan Rd
+				ShangHai    200127
+				CN
+
+70-B3-D5   (hex)		Tecnint HTE SRL
+809000-809FFF     (base 16)		Tecnint HTE SRL
+				Via della Tecnica 16/18
+				Osnago  Lecco  23875
+				IT
+
+70-B3-D5   (hex)		Virtuosys Ltd
+BEA000-BEAFFF     (base 16)		Virtuosys Ltd
+				The Tramshed Offices, Beehive Yard
+				Bath  Somerset  BA1 5BB
+				GB
+
+70-B3-D5   (hex)		WeVo Tech
+273000-273FFF     (base 16)		WeVo Tech
+				2985 Drew Road
+				Mississauga   Ontario  L4T0A4
+				CA
+
+70-B3-D5   (hex)		Sicon srl
+A35000-A35FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		AML
+6E7000-6E7FFF     (base 16)		AML
+				2190 Regal Parkway
+				Euless  TX  76040
+				US
+
+70-B3-D5   (hex)		Kranze Technology Solutions
+C1D000-C1DFFF     (base 16)		Kranze Technology Solutions
+				742 Pinecrest Dr
+				Prospect Heights  IL  60070
+				US
+
+70-B3-D5   (hex)		LYNX Technik AG
+5D8000-5D8FFF     (base 16)		LYNX Technik AG
+				Brunnenweg 3
+				Weiterstadt  Hessen  64331
+				DE
+
+70-B3-D5   (hex)		Risk Expert sarl
+34E000-34EFFF     (base 16)		Risk Expert sarl
+				63, Rue de Hollerich
+				Luxembourg    1741
+				LU
+
+70-B3-D5   (hex)		Kazan Networks Corporation
+768000-768FFF     (base 16)		Kazan Networks Corporation
+				660 Auburn Folsom Rd, Suite 204
+				Auburn  CA  95722
+				US
+
+70-B3-D5   (hex)		TELEPLATFORMS
+5FB000-5FBFFF     (base 16)		TELEPLATFORMS
+				Polbina st., 3/1
+				Moscow    109388
+				RU
+
+70-B3-D5   (hex)		SENSO2ME 
+631000-631FFF     (base 16)		SENSO2ME 
+				Zandhoef  16
+				KASTERLEE  België  2460
+				BE
+
+70-B3-D5   (hex)		T+A elektroakustik GmbH & Co.KG
+69F000-69FFFF     (base 16)		T+A elektroakustik GmbH & Co.KG
+				Planckstr. 9-11
+				Herford    32052
+				DE
+
+70-B3-D5   (hex)		NIPPON SEIKI CO., LTD.
+18E000-18EFFF     (base 16)		NIPPON SEIKI CO., LTD.
+				2-8 Higashi-Takami 2-Chome
+				NAGAOKA  NIIGATA  940-0006
+				JP
+
+70-B3-D5   (hex)		SEASON DESIGN TECHNOLOGY
+AF0000-AF0FFF     (base 16)		SEASON DESIGN TECHNOLOGY
+				FLOOR 4, WARDS EXCHANGE, 199 ECCLESALL ROAD
+				SHEFFIELD  SOUTH YORKSHIRE  S11 8HW
+				GB
+
+70-B3-D5   (hex)		Advanced Devices SpA
+445000-445FFF     (base 16)		Advanced Devices SpA
+				via Spagna 240-242
+				Rende  Cosenza  87036
+				IT
+
+70-B3-D5   (hex)		SPEECH TECHNOLOGY CENTER LIMITED
+74D000-74DFFF     (base 16)		SPEECH TECHNOLOGY CENTER LIMITED
+				4 Krasutskogo str.
+				Saint Petersburg    196084
+				RU
+
+70-B3-D5   (hex)		Iradimed
+E57000-E57FFF     (base 16)		Iradimed
+				1025 Willa Springs Dr.
+				Winter Springs  FL  32708-____
+				US
+
+70-B3-D5   (hex)		em-tec GmbH
+DD1000-DD1FFF     (base 16)		em-tec GmbH
+				Lerchenberg 20
+				Finning  Bavaria  86923
+				DE
+
+70-B3-D5   (hex)		Clover Electronics Technology Co., Ltd.
+08D000-08DFFF     (base 16)		Clover Electronics Technology Co., Ltd.
+				505 room, No.6-18 building, XinHe road, Shajing town, Baoan district
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+70-B3-D5   (hex)		Przemyslowy Instytut Automatyki i Pomiarow
+ED1000-ED1FFF     (base 16)		Przemyslowy Instytut Automatyki i Pomiarow
+				Al. Jerozolimskie 202
+				Warszawa  Mazowieckie  02-486
+				PL
+
+70-B3-D5   (hex)		HRT
+D3C000-D3CFFF     (base 16)		HRT
+				via Pio La Torre 13
+				Campogalliano    41011
+				IT
+
+70-B3-D5   (hex)		 Beijing Zhongyi Yue Tai Technology Co., Ltd
+2B0000-2B0FFF     (base 16)		 Beijing Zhongyi Yue Tai Technology Co., Ltd
+				Building 809, Xiaoying Road
+				Beijing   Chaoyang District  100101
+				CN
+
+70-B3-D5   (hex)		Spark Lasers
+2E2000-2E2FFF     (base 16)		Spark Lasers
+				IOGS - Bâtiment IOA - Rue François Mitterrand
+				Talence    33400
+				FR
+
+70-B3-D5   (hex)		OOO Microlink-Svyaz
+129000-129FFF     (base 16)		OOO Microlink-Svyaz
+				1st veshnjakovsky proezd 7
+				moscow   moscow   109456
+				RU
+
+70-B3-D5   (hex)		Lookman Electroplast Industries Ltd
+38B000-38BFFF     (base 16)		Lookman Electroplast Industries Ltd
+				Old No : 9, New No : 15, II Street Etn., III Main Road , CIT Nagar, Nandanam
+				Chennai  Tamilnadu  600035
+				IN
+
+70-B3-D5   (hex)		ACEMIS FRANCE
+64C000-64CFFF     (base 16)		ACEMIS FRANCE
+				36 RUE ARISTIDE BERGES
+				CUGNAUX    31270
+				FR
+
+70-B3-D5   (hex)		Fischer Block, Inc.
+80B000-80BFFF     (base 16)		Fischer Block, Inc.
+				21 S High St
+				West Chester  PA  19382
+				US
+
+70-B3-D5   (hex)		Akribis Systems
+175000-175FFF     (base 16)		Akribis Systems
+				Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5
+				Singapore  Singapore  569876
+				SG
+
+70-B3-D5   (hex)		TATA POWER SED
+60A000-60AFFF     (base 16)		TATA POWER SED
+				42-43 Electronics City
+				Bengaluru  Karnataka  560100
+				IN
+
+70-B3-D5   (hex)		Zetechtics Ltd
+888000-888FFF     (base 16)		Zetechtics Ltd
+				Main Street Amotherby
+				Malton    YO176TA
+				GB
+
+70-B3-D5   (hex)		CONTINENT, Ltd
+9B2000-9B2FFF     (base 16)		CONTINENT, Ltd
+				Liflandskaya
+				St.-Petersburg    190020
+				RU
+
+70-B3-D5   (hex)		InnoSenT
+332000-332FFF     (base 16)		InnoSenT
+				Am Roedertor 30  
+				Donnersdorf  Bavaria  97499
+				DE
+
+70-B3-D5   (hex)		Arnouse Digital Devices Corp
+831000-831FFF     (base 16)		Arnouse Digital Devices Corp
+				1983 Marcus Ave, Suite 104
+				Lake Success  NY  11042
+				US
+
+70-B3-D5   (hex)		HANGZHOU HUALAN MICROELECTRONIQUE CO.,LTD
+FEF000-FEFFFF     (base 16)		HANGZHOU HUALAN MICROELECTRONIQUE CO.,LTD
+				22F,BUILDING-1 OF HUA RUI CENTER,FIRST JIANSHE ROAD,XIAOSHAN DISTRICT
+				HANGZHOU  ZHEJIANG  311200
+				CN
+
+70-B3-D5   (hex)		TELL Software Hungaria Kft.
+276000-276FFF     (base 16)		TELL Software Hungaria Kft.
+				Vagohid u. 2.
+				Debrecen    4034
+				HU
+
+70-B3-D5   (hex)		Wart-Elektronik
+AD2000-AD2FFF     (base 16)		Wart-Elektronik
+				Nickenicher Strasse 24
+				Andernach    56626
+				DE
+
+70-B3-D5   (hex)		Procon automatic systems GmbH
+549000-549FFF     (base 16)		Procon automatic systems GmbH
+				Bettwiesenweg 18
+				Sellnrod    35325
+				DE
+
+70-B3-D5   (hex)		Norbit ODM AS
+F45000-F45FFF     (base 16)		Norbit ODM AS
+				Stiklestadveien 1
+				Trondheim    7041
+				NO
+
+70-B3-D5   (hex)		Inphi Corporation
+370000-370FFF     (base 16)		Inphi Corporation
+				112 S. Lakeview Canyon Rd., Suite 100
+				Westlake Village  CA  91362
+				US
+
+70-B3-D5   (hex)		Gencoa Ltd
+17A000-17AFFF     (base 16)		Gencoa Ltd
+				4 De Havilland Drive
+				Liverpool  Merseyside  L24 8RN
+				GB
+
+70-B3-D5   (hex)		Gogo BA 
+C60000-C60FFF     (base 16)		Gogo BA 
+				303 S. Technology Ct
+				Broomfield    80021
+				US
+
+70-B3-D5   (hex)		Data Strategy Limited
+FF1000-FF1FFF     (base 16)		Data Strategy Limited
+				259 Shirland Road, Maida Vale
+				London  Please Select...  W9 3JW
+				GB
+
+70-B3-D5   (hex)		Quantum Detectors
+2C2000-2C2FFF     (base 16)		Quantum Detectors
+				R104, RAL, Fermi Avenue
+				Harwell Oxford  Oxfordshire  OX11 0QX
+				GB
+
+70-B3-D5   (hex)		CRDE
+572000-572FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		Stiebel Eltron GmbH
+C45000-C45FFF     (base 16)		Stiebel Eltron GmbH
+				Dr.-Stiebel-Strasse 33
+				Holzminden    37603
+				DE
+
+70-B3-D5   (hex)		Satcube AB
+F77000-F77FFF     (base 16)		Satcube AB
+				Anders Carlssons gata 7
+				Gothenburg    41755
+				SE
+
+70-B3-D5   (hex)		Vtron Pty Ltd
+B2B000-B2BFFF     (base 16)		Vtron Pty Ltd
+				Unit 2, 62 Township Drive West
+				West Burleigh  Queensland  4219
+				AU
+
+70-B3-D5   (hex)		Hexagon Metrology SAS
+5E0000-5E0FFF     (base 16)		Hexagon Metrology SAS
+				2 rue François Arago
+				Montoire sur le Loir  Loir et Cher  41800
+				FR
+
+70-B3-D5   (hex)		Macnica Technology
+E8E000-E8EFFF     (base 16)		Macnica Technology
+				380 Stevens Avenue
+				Solana Beach  CA  92075
+				US
+
+70-B3-D5   (hex)		MeQ Inc.
+F0D000-F0DFFF     (base 16)		MeQ Inc.
+				6028 Dimm Way
+				Richmond  CA  94805
+				US
+
+70-B3-D5   (hex)		Welltec Corp.
+115000-115FFF     (base 16)		Welltec Corp.
+				1075-93 Seongseok-dong, Ilsandong-gu
+				Goyang-si  Gyeonggi-do  10251
+				KR
+
+70-B3-D5   (hex)		Rugged Science
+773000-773FFF     (base 16)		Rugged Science
+				2511 Walmer Ave
+				Norfolk  VA  23513
+				US
+
+70-B3-D5   (hex)		Bresslergroup
+288000-288FFF     (base 16)		Bresslergroup
+				1216 Arch Street, Floor 7
+				Philadelphia  PA  19107
+				US
+
+70-B3-D5   (hex)		Combilent
+E04000-E04FFF     (base 16)		Combilent
+				Gydevang 21D
+				Alleroed    3450
+				DK
+
+70-B3-D5   (hex)		Beijing One City Science & Technology Co., LTD
+0F1000-0F1FFF     (base 16)		Beijing One City Science & Technology Co., LTD
+				Room 901, Building #6, FENGCHUANG KeJi Park
+				YIZHUANG economic development zone, District Daxing  Beijing  100176
+				CN
+
+70-B3-D5   (hex)		SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
+A30000-A30FFF     (base 16)		SHEN ZHEN HUAWANG TECHNOLOGY CO; LTD
+				Longhua New District Qing Xiang Road, Bao Neng Technology Park
+				SHEN ZHEN  GUANG DONG  518109
+				CN
+
+70-B3-D5   (hex)		Savari Inc
+040000-040FFF     (base 16)		Savari Inc
+				2005 De la cruz blvd, st 111,
+				santa clara  CA  95050
+				US
+
+70-B3-D5   (hex)		Mr.Loop
+53B000-53BFFF     (base 16)		Mr.Loop
+				7F.-6, No.237, Sec. 1,Datong Rd. Xizhi Dist.
+				New Taipei City    22161
+				TW
+
+70-B3-D5   (hex)		CRDE
+D40000-D40FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		HCH. Kündig & CIE. AG
+753000-753FFF     (base 16)		HCH. Kündig & CIE. AG
+				Joweid Zentrum 11
+				Rüti ZH    8630
+				CH
+
+70-B3-D5   (hex)		Practical Software Studio LLC
+0BC000-0BCFFF     (base 16)		Practical Software Studio LLC
+				1 Northfield Plaza, Suite 300
+				Northfield  IL  60093
+				US
+
+70-B3-D5   (hex)		Pullnet Technology,S.L.
+AA4000-AA4FFF     (base 16)		Pullnet Technology,S.L.
+				Parc Tecnologic BCNord
+				Barcelona  Catalonia  08042
+				ES
+
+70-B3-D5   (hex)		Mini Solution Co. Ltd.
+C68000-C68FFF     (base 16)		Mini Solution Co. Ltd.
+				2-98-85, Yarimizu
+				Hachiouji  Toyko  1920375
+				JP
+
+70-B3-D5   (hex)		Fläkt Woods AB
+2E5000-2E5FFF     (base 16)		Fläkt Woods AB
+				Fläktgatan 1
+				Jönköping  Foreign state  55184
+				SE
+
+70-B3-D5   (hex)		Sicon srl
+D37000-D37FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		THEMA
+CAE000-CAEFFF     (base 16)		THEMA
+				le praesidium , 350 av du club hippique
+				aix en provence  france  13090
+				FR
+
+70-B3-D5   (hex)		Woods Hole Oceanographic Institution
+15C000-15CFFF     (base 16)		Woods Hole Oceanographic Institution
+				92 Water Street MS#10
+				Woods Hole  MA  02543
+				US
+
+70-B3-D5   (hex)		HUNTER LIBERTY CORPORATION
+FC2000-FC2FFF     (base 16)		HUNTER LIBERTY CORPORATION
+				85 GOLF CREST DRIVE, SUITE 301
+				ACWORTH  GA  30101
+				US
+
+70-B3-D5   (hex)		Brechbuehler AG
+0D9000-0D9FFF     (base 16)		Brechbuehler AG
+				Steinwiesenstrasse 3
+				Schlieren    8952
+				CH
+
+70-B3-D5   (hex)		BuddyGuard GmbH
+36F000-36FFFF     (base 16)		BuddyGuard GmbH
+				Dircksenstr. 40
+				Berlin  Berlin  10178
+				DE
+
+70-B3-D5   (hex)		Edgeware AB
+6EA000-6EAFFF     (base 16)		Edgeware AB
+				Master Samuelsgatan 42
+				Stockholm    11157
+				SE
+
+70-B3-D5   (hex)		SinTau SrL
+0E3000-0E3FFF     (base 16)		SinTau SrL
+				Viale Nizza 11
+				L'Aquila    67100
+				IT
+
+70-B3-D5   (hex)		Lanmark Controls Inc.
+39E000-39EFFF     (base 16)		Lanmark Controls Inc.
+				125 Nagog Park
+				Acton  MA  01720
+				US
+
+70-B3-D5   (hex)		Epdm Pty Ltd
+F3B000-F3BFFF     (base 16)		Epdm Pty Ltd
+				2 / 1013 Centre Road
+				Bentleigh East  Victoria  3165
+				AU
+
+70-B3-D5   (hex)		Solace Systems Inc.
+0A3000-0A3FFF     (base 16)		Solace Systems Inc.
+				535 Legget Drive,
+				Kanata  Ontario  K2K3B8
+				CA
+
+70-B3-D5   (hex)		Standard Backhaul Communications
+75A000-75AFFF     (base 16)		Standard Backhaul Communications
+				
+				    
+				
+
+70-B3-D5   (hex)		Bolide Technology Group, Inc.
+241000-241FFF     (base 16)		Bolide Technology Group, Inc.
+				468 S. San Dimas Ave.,
+				San Dimas  CA  91773
+				US
+
+70-B3-D5   (hex)		Sentry360
+D84000-D84FFF     (base 16)		Sentry360
+				23807 W Andrew Road
+				Plainfield  IL  60585
+				US
+
+70-B3-D5   (hex)		Cosylab d.d.
+635000-635FFF     (base 16)		Cosylab d.d.
+				Teslova ulica 30
+				Ljubljana    1000
+				SI
+
+70-B3-D5   (hex)		Slot3 GmbH
+443000-443FFF     (base 16)		Slot3 GmbH
+				Am Brambusch 22
+				Luenen  Germany  44536
+				DE
+
+70-B3-D5   (hex)		Globalcom Engineering SPA
+352000-352FFF     (base 16)		Globalcom Engineering SPA
+				Via Volta 39
+				CARDANO AL CAMPO  VA  21010
+				IT
+
+70-B3-D5   (hex)		Tecnologix s.r.l.
+1E4000-1E4FFF     (base 16)		Tecnologix s.r.l.
+				Via dei Biancospini 6
+				Milano  Mi  20146
+				IT
+
+70-B3-D5   (hex)		Opgal Optronic Industries
+2AD000-2ADFFF     (base 16)		Opgal Optronic Industries
+				Hanapach 21
+				Carmiel    2161401
+				IL
+
+70-B3-D5   (hex)		Supracon AG
+5D3000-5D3FFF     (base 16)		Supracon AG
+				An der Lehmgrube 11
+				Jena  Thüringen  07751
+				DE
+
+70-B3-D5   (hex)		Alere Technologies AS
+A4C000-A4CFFF     (base 16)		Alere Technologies AS
+				Kjelsaasveien 161
+				Oslo  Oslo  0382
+				NO
+
+70-B3-D5   (hex)		Proterra
+2C3000-2C3FFF     (base 16)		Proterra
+				1 Whitlee Ct
+				Greenville  SC  29607
+				US
+
+70-B3-D5   (hex)		Synics AG
+BD5000-BD5FFF     (base 16)		Synics AG
+				Querstr. 8
+				Regensdorf    8105
+				CH
+
+70-B3-D5   (hex)		Agilack
+4CE000-4CEFFF     (base 16)		Agilack
+				12 avenue Jules Verne
+				Saint Sebastien sur loire    44230
+				FR
+
+70-B3-D5   (hex)		Meridian Technologies Inc
+924000-924FFF     (base 16)		Meridian Technologies Inc
+				700 Elmont Rd
+				Elmont  NY  11003
+				US
+
+70-B3-D5   (hex)		Paul Scherrer Institut (PSI)
+3B7000-3B7FFF     (base 16)		Paul Scherrer Institut (PSI)
+				WHGA/U130
+				Villigen-PSI  Aargau  CH-5232
+				CH
+
+70-B3-D5   (hex)		CMI, Inc.
+4EF000-4EFFFF     (base 16)		CMI, Inc.
+				316 East 9th Street
+				Owensboro  KY  42303
+				US
+
+70-B3-D5   (hex)		Beijing DamingWuzhou Science&Technology Co., Ltd.
+A36000-A36FFF     (base 16)		Beijing DamingWuzhou Science&Technology Co., Ltd.
+				8001,8 Floor,Building C,KanjianBaoshen Square,Haidian District
+				Beijing    100192
+				CN
+
+70-B3-D5   (hex)		MCQ TECH GmbH
+A58000-A58FFF     (base 16)		MCQ TECH GmbH
+				Ottilienweg 9
+				Blumberg  BW  78176
+				DE
+
+70-B3-D5   (hex)		Density Inc.
+785000-785FFF     (base 16)		Density Inc.
+				235 HARRISON ST, Mail Drop 24
+				Syracuse  NY  13202
+				US
+
+70-B3-D5   (hex)		IROC AB
+39B000-39BFFF     (base 16)		IROC AB
+				Bärtas Väg 15
+				Kode  Västra Götaland  442 98
+				
+
+70-B3-D5   (hex)		ProtoPixel SL
+2DB000-2DBFFF     (base 16)		ProtoPixel SL
+				C/Pujades 77-79, 5e 4a
+				Barcelona  Barcelona  08005
+				ES
+
+70-B3-D5   (hex)		Trinity College Dublin
+99E000-99EFFF     (base 16)		Trinity College Dublin
+				Dunlop Oriel House, Fenian Street
+				Dublin 2    2
+				IE
+
+70-B3-D5   (hex)		comtime GmbH
+1E9000-1E9FFF     (base 16)		comtime GmbH
+				Gutenbergring 22
+				Norderstedt    22848
+				DE
+
+70-B3-D5   (hex)		HAXE SYSTEME
+49A000-49AFFF     (base 16)		HAXE SYSTEME
+				1, rue de Lorraine
+				La Chapelle sur Erdre  Pays de la Loire  44240
+				FR
+
+70-B3-D5   (hex)		BirdDog Australia
+C7E000-C7EFFF     (base 16)		BirdDog Australia
+				Unit 1, 8 Theobald St
+				THORNBURY  VIC  3071
+				AU
+
+70-B3-D5   (hex)		ATOM GIKEN Co.,Ltd.
+AC5000-AC5FFF     (base 16)		ATOM GIKEN Co.,Ltd.
+				92-2 KATASE
+				FUJISAWA  KANAGAWA  251-0032
+				JP
+
+70-B3-D5   (hex)		ADE Technology Inc.
+F30000-F30FFF     (base 16)		ADE Technology Inc.
+				15F. No.90, Xingde Rd., Sanchong Dist.
+				New Taipei City    24158
+				TW
+
+70-B3-D5   (hex)		Husty M.Styczen J.Hupert Sp.J.
+54C000-54CFFF     (base 16)		Husty M.Styczen J.Hupert Sp.J.
+				Rzepakowa 5e
+				Krakow  malopolska  31-989
+				PL
+
+70-B3-D5   (hex)		George Wilson Industries Ltd
+48A000-48AFFF     (base 16)		George Wilson Industries Ltd
+				Barlow Road, Aldermans Green Industrial Estate
+				Coventry  West Midlands  CV2 2LD
+				GB
+
+70-B3-D5   (hex)		Get SAT
+F95000-F95FFF     (base 16)		Get SAT
+				Hamada 12
+				Rehovot  Select From Dropdown  7670316
+				IL
+
+70-B3-D5   (hex)		Apantac LLC
+CD5000-CD5FFF     (base 16)		Apantac LLC
+				7556 SW Bridgeport Road
+				Durham  OR  97224
+				US
+
+70-B3-D5   (hex)		Checkbill Co,Ltd.
+947000-947FFF     (base 16)		Checkbill Co,Ltd.
+				3306~7-ho, Beonyeonggwan, Chungnam Techno Park, 136, Jiksan-ro, Jiksan-eup, Seobuk-gu
+				Cheonan-si  Chungcheongnam-do   31035
+				KR
+
+70-B3-D5   (hex)		DWEWOONG ELECTRIC Co., Ltd.
+BC2000-BC2FFF     (base 16)		DWEWOONG ELECTRIC Co., Ltd.
+				10, Hwanggeum-ro 127beon-gil Yangchon-eup
+				Gimpo-si  Gyeonggi-do  10048
+				KR
+
+70-B3-D5   (hex)		MG s.r.l.
+405000-405FFF     (base 16)		MG s.r.l.
+				via Monte Bianco, 1
+				Solbiate Olona  VA  21058
+				IT
+
+70-B3-D5   (hex)		ZAO ZEO
+083000-083FFF     (base 16)		ZAO ZEO
+				Khachaturiana 14a
+				Moscow    127562
+				RU
+
+70-B3-D5   (hex)		Infosocket Co., Ltd.
+C0A000-C0AFFF     (base 16)		Infosocket Co., Ltd.
+				1-6-1-303
+				Musashino  Tokyo  180-0005
+				JP
+
+70-B3-D5   (hex)		HolidayCoro
+009000-009FFF     (base 16)		HolidayCoro
+				27719 Nelson St
+				Spring  TX  77373
+				US
+
+70-B3-D5   (hex)		EFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA
+1BB000-1BBFFF     (base 16)		EFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA
+				Dietla 93/6
+				Kraków    31-031
+				PL
+
+70-B3-D5   (hex)		Merten GmbH&CoKG
+550000-550FFF     (base 16)		Merten GmbH&CoKG
+				Fritz-Kotz-Str. 8
+				Wiehl  NRW  51674
+				DE
+
+70-B3-D5   (hex)		AndFun Co.,Ltd.
+BE8000-BE8FFF     (base 16)		AndFun Co.,Ltd.
+				5972-2 Ohkusa
+				Komaki  Aichi  4850802
+				JP
+
+70-B3-D5   (hex)		Technica Engineering GmbH
+28D000-28DFFF     (base 16)		Technica Engineering GmbH
+				Leopoldstraße 236
+				Munich    80807
+				DE
+
+70-B3-D5   (hex)		DAVE SRL
+142000-142FFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+70-B3-D5   (hex)		LDA audio video profesional S.L.
+1C8000-1C8FFF     (base 16)		LDA audio video profesional S.L.
+				C/ Severo Ochoa, 31
+				Malaga  Malaga  29590
+				ES
+
+70-B3-D5   (hex)		Sensobox GmbH
+C15000-C15FFF     (base 16)		Sensobox GmbH
+				Eschenstrasse 24
+				6005  Lucerne  6005
+				CH
+
+70-B3-D5   (hex)		Stesalit Systems Ltd
+67B000-67BFFF     (base 16)		Stesalit Systems Ltd
+				Stesalit Towers, Block GP, Sector 5, Salt Lake Electronics Complex, 
+				Kolkata  West Bengal  700091
+				IN
+
+70-B3-D5   (hex)		midBit Technologies, LLC
+EBD000-EBDFFF     (base 16)		midBit Technologies, LLC
+				153 Homestead Ln
+				Romney  WV  26757
+				US
+
+70-B3-D5   (hex)		OMESH CITY GROUP
+A8E000-A8EFFF     (base 16)		OMESH CITY GROUP
+				202,A building,Xu Zhuang Software Park,Xuan Wu District
+				Nangjing  Jiangsu  240042
+				CN
+
+70-B3-D5   (hex)		Gamber Johnson-LLC
+178000-178FFF     (base 16)		Gamber Johnson-LLC
+				3001 Borham Ave
+				Stevens Point  WI  54481
+				US
+
+70-B3-D5   (hex)		Molekule
+A5C000-A5CFFF     (base 16)		Molekule
+				2507 Bryant St.
+				San Francisco  CA  94110
+				US
+
+70-B3-D5   (hex)		Seiwa Giken
+48F000-48FFFF     (base 16)		Seiwa Giken
+				4-4-23 Hotarugaike-higashimachi
+				Toyonaka-City  Osaka  560-0032
+				JP
+
+70-B3-D5   (hex)		AE Van de Vliet BVBA
+C4F000-C4FFFF     (base 16)		AE Van de Vliet BVBA
+				INDUSTRIEDIJK 14
+				TURNHOUT  ANTWERPEN  2300
+				BE
+
+70-B3-D5   (hex)		Acacia Research
+BF5000-BF5FFF     (base 16)		Acacia Research
+				5 Butler Drive
+				HENDON  South Australia  5014
+				AU
+
+70-B3-D5   (hex)		ALPHA　Corporation
+D67000-D67FFF     (base 16)		ALPHA　Corporation
+				1-6-8 Fukuura, 
+				Yokohama City, Kanazawa-ku,   Kanagawa  236-0004
+				JP
+
+70-B3-D5   (hex)		ATHREYA INC
+85D000-85DFFF     (base 16)		ATHREYA INC
+				261 Conlins Road
+				TORONTO  ON  M1C1C4
+				CA
+
+70-B3-D5   (hex)		SYSDEV Srl
+C0E000-C0EFFF     (base 16)		SYSDEV Srl
+				via Lamarmora 16
+				Torino  TO  10128
+				IT
+
+70-B3-D5   (hex)		LECO Corporation
+599000-599FFF     (base 16)		LECO Corporation
+				3000 Lakeview Ave.
+				St. Joseph  null  49085
+				US
+
+70-B3-D5   (hex)		SiS Technology
+E71000-E71FFF     (base 16)		SiS Technology
+				Business Park Varna, building B1, floor 4
+				Varna    9000
+				BG
+
+70-B3-D5   (hex)		Excel Medical Electronics LLC
+7DD000-7DDFFF     (base 16)		Excel Medical Electronics LLC
+				801 Maplewood Dr.
+				Jupiter  null  33458
+				US
+
+70-B3-D5   (hex)		ChongQing JianTao Technology Co., Ltd.
+486000-486FFF     (base 16)		ChongQing JianTao Technology Co., Ltd.
+				10th, Building NO.C1, District E, Dawn industrial area, CunTan, JiangBei District, ChongQing City. China
+				ChongQing  ChongQing  400025
+				CN
+
+70-B3-D5   (hex)		FoodALYT GmbH
+D91000-D91FFF     (base 16)		FoodALYT GmbH
+				Robert-Hooke-Str.8
+				Bremen  Bremen  28359
+				DE
+
+70-B3-D5   (hex)		Exicom Technologies fze
+3AE000-3AEFFF     (base 16)		Exicom Technologies fze
+				Technology park , P.O.box 327792
+				Ras Al Khaimah FTZ  Ras Al Khaimah   327792
+				AE
+
+70-B3-D5   (hex)		TESEC Corporation
+461000-461FFF     (base 16)		TESEC Corporation
+				391-1, Kamikitadai 3-Chome
+				Higasiyamato  Tokyo  2070023
+				JP
+
+70-B3-D5   (hex)		AERONAUTICAL & GENERAL INSTRUMENTS LTD.
+FDE000-FDEFFF     (base 16)		AERONAUTICAL & GENERAL INSTRUMENTS LTD.
+				FLEETS POINT
+				POOLE  DORSET  BH12 3SS
+				GB
+
+70-B3-D5   (hex)		oxynet Solutions
+3D5000-3D5FFF     (base 16)		oxynet Solutions
+				G04 A block, Ground Floor, King Space Meadows, Thanisandra Main Road
+				Bangalore  Karnataka  560077
+				IN
+
+70-B3-D5   (hex)		CAB S.R.L.
+B11000-B11FFF     (base 16)		CAB S.R.L.
+				VIA CARDUCCI, 41/E
+				SAN GIULIANO MILANESE  MILANO  20098
+				IT
+
+70-B3-D5   (hex)		IDEAL INDUSTRIES Ltd t/a Casella
+A91000-A91FFF     (base 16)		IDEAL INDUSTRIES Ltd t/a Casella
+				Regent House, Wolseley Road
+				Kempston, Bedford  Bedfordshire  MK427JY
+				GB
+
+70-B3-D5   (hex)		BeatCraft, Inc.
+AE5000-AE5FFF     (base 16)		BeatCraft, Inc.
+				5F, S.HARUYAMA BLDG, Kinshi2-13-6 
+				Sumida  Tokyo  1300013
+				JP
+
+70-B3-D5   (hex)		Zumbach Electronic AG
+7B4000-7B4FFF     (base 16)		Zumbach Electronic AG
+				Hauptstrasse 93
+				Orpund  Bern  2552
+				CH
+
+70-B3-D5   (hex)		Shanghai EICT Global Service Co., Ltd
+FC9000-FC9FFF     (base 16)		Shanghai EICT Global Service Co., Ltd
+				Room 1105 NO.376 ZhaojiaBang Road, XuHui District
+				Shanghai    200031
+				CN
+
+70-B3-D5   (hex)		Telairity Semiconductor
+1A3000-1A3FFF     (base 16)		Telairity Semiconductor
+				3375 Scott Blvd.
+				Santa Clara  CA  95054
+				US
+
+70-B3-D5   (hex)		Weltek Technologies Co. Ltd.
+A4F000-A4FFFF     (base 16)		Weltek Technologies Co. Ltd.
+				Flat A-B, 12/F, Block 1, Wah Fung Ind. Centre, 33-39 Kwai Fung Crescent, Kwai Chung, N.T.
+				HK    852
+				HK
+
+70-B3-D5   (hex)		CCII Systems (Pty) Ltd
+BE6000-BE6FFF     (base 16)		CCII Systems (Pty) Ltd
+				Unit 3, 67 Rosmead Avenue
+				Cape Town  Cape  7708
+				ZA
+
+70-B3-D5   (hex)		Neurio Technology Inc.
+750000-750FFF     (base 16)		Neurio Technology Inc.
+				43 West Hastings Street
+				Vancouver  BC  V6B 1G4
+				CA
+
+70-B3-D5   (hex)		Rohde&Schwarz Topex SA
+243000-243FFF     (base 16)		Rohde&Schwarz Topex SA
+				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
+				Bucuresti  Romania  014142
+				RO
+
+70-B3-D5   (hex)		Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
+33E000-33EFFF     (base 16)		Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
+				Unit C&D, No.201 WuXiang, Export Processing Zone A No.200Suhong Road SIP
+				Suzhou  JiangSu  215021
+				CN
+
+70-B3-D5   (hex)		Eleven Engineering Incorporated
+6E6000-6E6FFF     (base 16)		Eleven Engineering Incorporated
+				10150 - 100 Street, Suite 800
+				Edmonton  Canada, Alberta  T5J 0P6
+				CA
+
+70-B3-D5   (hex)		CL International 
+ABA000-ABAFFF     (base 16)		CL International 
+				12th Floor, Woolim Lions Valley 1 Bldg 27, Dunchon-daero 457beongil, Jungwon-gu
+				Seongnam   Kyeonggi-do   462-806
+				KR
+
+70-B3-D5   (hex)		Emka Technologies
+AF1000-AF1FFF     (base 16)		Emka Technologies
+				59 bd General Martial Valin
+				PARIS    75015
+				FR
+
+70-B3-D5   (hex)		Siemens AG
+C87000-C87FFF     (base 16)		Siemens AG
+				MO TPE RE PI
+				Erlangen  Bavaria  91052
+				DE
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+18B000-18BFFF     (base 16)		Aplex Technology Inc.
+				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+70-B3-D5   (hex)		Stara S/A Indústria de Implementos Agrícolas
+13E000-13EFFF     (base 16)		Stara S/A Indústria de Implementos Agrícolas
+				Avenida Stara 519
+				Não-Me-Toque  Rio Grande do Sul  99470000
+				BR
+
+70-B3-D5   (hex)		BlueMark Innovations BV
+325000-325FFF     (base 16)		BlueMark Innovations BV
+				Hengelosestraat 517
+				Enschede    7521 AG
+				NL
+
+70-B3-D5   (hex)		Östling Marking Systems GmbH
+A96000-A96FFF     (base 16)		Östling Marking Systems GmbH
+				Broßhauserstr. 27
+				Solingen    42697
+				DE
+
+70-B3-D5   (hex)		Meta-chrom Co. Ltd.
+68D000-68DFFF     (base 16)		Meta-chrom Co. Ltd.
+				Baumana St.,100
+				Yoshkar-Ola  Select State  424000
+				RU
+
+70-B3-D5   (hex)		xm
+840000-840FFF     (base 16)		xm
+				50, Cheomdangwagi-ro 208beon-gil, Buk-gu, Gwangju, Korea
+				Gwangju    61012
+				KR
+
+70-B3-D5   (hex)		MART NETWORK SOLUTIONS LTD
+94F000-94FFFF     (base 16)		MART NETWORK SOLUTIONS LTD
+				ABBEY HOUSE, 450 BATH ROAD
+				LONGFORD  MIDDLESEX  UB70EB
+				GB
+
+70-B3-D5   (hex)		TextNinja Co.
+283000-283FFF     (base 16)		TextNinja Co.
+				222 W Merchandise Mart Plaza, Suite 1212
+				Chicago  IL  60654
+				US
+
+70-B3-D5   (hex)		Micro Trend Automation Co., LTD
+50E000-50EFFF     (base 16)		Micro Trend Automation Co., LTD
+				3F, No 78 Cheng Kung Road Sec1
+				Taipei  Nan Kang  11570
+				TW
+
+70-B3-D5   (hex)		Explorer Inc.
+E85000-E85FFF     (base 16)		Explorer Inc.
+				379-22 kikyou-cho
+				Hakodate  Hokkaido  041-0801
+				JP
+
+70-B3-D5   (hex)		Sicon srl
+30C000-30CFFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Innoflight, Inc.
+BB7000-BB7FFF     (base 16)		Innoflight, Inc.
+				9985 Pacific Heights Blvd, Suite 250
+				San Diego  CA  92121
+				US
+
+70-B3-D5   (hex)		CRDE
+D63000-D63FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		Discover Video
+440000-440FFF     (base 16)		Discover Video
+				Bld 3
+				Wallingford  CT  06492
+				US
+
+70-B3-D5   (hex)		Moog Rekofa  GmbH
+4D5000-4D5FFF     (base 16)		Moog Rekofa  GmbH
+				Bergstrasse 41
+				Antweiler  Rhineland-Palatinate  53533
+				DE
+
+70-B3-D5   (hex)		Electronic Equipment Company Pvt. Ltd.
+640000-640FFF     (base 16)		Electronic Equipment Company Pvt. Ltd.
+				146/2, Old China Bazar Street,
+				Kolkata  West Bengal  700001
+				IN
+
+70-B3-D5   (hex)		Zebra Elektronik A.S.
+259000-259FFF     (base 16)		Zebra Elektronik A.S.
+				Kayisdagi Cd. Baris Sk. No:2 K:5 Kucukbakkalkoy
+				Istanbul  NA  34750
+				TR
+
+70-B3-D5   (hex)		Tanaka Information System, LLC.
+60F000-60FFFF     (base 16)		Tanaka Information System, LLC.
+				3-17-18 Higashi-Nakano,
+				Nakano-ku  Tokyo  1640003
+				JP
+
+00-1B-C5   (hex)		Onnet Technologies and Innovations LLC
+087000-087FFF     (base 16)		Onnet Technologies and Innovations LLC
+				1,  Opp GIBCA CAMP
+				AJMAN  AJMAN  52141
+				AE
+
+70-B3-D5   (hex)		Jireh Industries Ltd.
+974000-974FFF     (base 16)		Jireh Industries Ltd.
+				53158 Range Road 224
+				Ardrossan  Alberta  T8E2K4
+				CA
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+4B7000-4B7FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		P4Q ELECTRONICS, S.L.
+3C5000-3C5FFF     (base 16)		P4Q ELECTRONICS, S.L.
+				CTRA. BILBAO BALMASEDA, KM9
+				ALONSOTEGUI  VIZCAYA  48810
+				ES
+
+70-B3-D5   (hex)		Alligator Communications
+9CB000-9CBFFF     (base 16)		Alligator Communications
+				317 Brokaw Road
+				Santa Clara  CA  95050
+				US
+
+70-B3-D5   (hex)		Preston Industries dba PolyScience
+9EB000-9EBFFF     (base 16)		Preston Industries dba PolyScience
+				6600 W. Touhy Ave
+				Niles  IL  60714-4588
+				US
+
+70-B3-D5   (hex)		Depro Électronique inc
+7E2000-7E2FFF     (base 16)		Depro Électronique inc
+				755 Cure-Boivin local 22
+				Boisbriand  Quebec  J7G2J2
+				CA
+
+70-B3-D5   (hex)		Szabo Software & Engineering UK Ltd
+F08000-F08FFF     (base 16)		Szabo Software & Engineering UK Ltd
+				43 Angrave Rd
+				East Leake  Leicester  LE12 6JA
+				GB
+
+70-B3-D5   (hex)		STC Rainbow Ltd.
+1A8000-1A8FFF     (base 16)		STC Rainbow Ltd.
+				5-y Donskoy pr-d, 15с2
+				Moscow    119334
+				RU
+
+70-B3-D5   (hex)		Cubro Acronet GesmbH
+01A000-01AFFF     (base 16)		Cubro Acronet GesmbH
+				Geiselberstraße 17 / 6 Floor
+				Vienna  Vienna  1110
+				AT
+
+70-B3-D5   (hex)		VNG Corporation
+8D8000-8D8FFF     (base 16)		VNG Corporation
+				322B Lý Thường Kiệt, P.14
+				Hồ Chí Minh    70000
+				VN
+
+70-B3-D5   (hex)		Lumiplan Duhamel
+070000-070FFF     (base 16)		Lumiplan Duhamel
+				2 rue de l'industrie
+				Domène  Isère  38420
+				FR
+
+70-B3-D5   (hex)		The Things Network Foundation
+7ED000-7EDFFF     (base 16)		The Things Network Foundation
+				Herengracht 182
+				Amsterdam  NH  1016BR
+				NL
+
+70-B3-D5   (hex)		Sensapex Oy
+45D000-45DFFF     (base 16)		Sensapex Oy
+				Teknologiatie 13
+				Oulu    90590
+				FI
+
+70-B3-D5   (hex)		Ensura Solutions BV
+CBE000-CBEFFF     (base 16)		Ensura Solutions BV
+				Hofstraat 4
+				Ulft  Gelderland  7071 KB
+				NL
+
+70-B3-D5   (hex)		GSP Sprachtechnologie GmbH
+120000-120FFF     (base 16)		GSP Sprachtechnologie GmbH
+				Teltowkanalstraße 1
+				Berlin    12247
+				DE
+
+70-B3-D5   (hex)		Coester Automação Ltda
+975000-975FFF     (base 16)		Coester Automação Ltda
+				Rua Jacy Porto, 1157
+				Sao Leopoldo  RS  93025-120
+				BR
+
+70-B3-D5   (hex)		Robert Bosch, LLC
+652000-652FFF     (base 16)		Robert Bosch, LLC
+				256 Raceway Drive, Suite 4
+				Mooresville  NC  28117
+				US
+
+70-B3-D5   (hex)		Windar Photonics
+5FD000-5FDFFF     (base 16)		Windar Photonics
+				Helgeshoj Alle 16
+				Taastrup  Copenhagen  2630
+				DK
+
+70-B3-D5   (hex)		CT Company
+5A3000-5A3FFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+70-B3-D5   (hex)		Cathwell AS
+BA1000-BA1FFF     (base 16)		Cathwell AS
+				Kongshavnsgate 18
+				Langesund  Telemark  N-3970
+				NO
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+BFE000-BFEFFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		KST technology
+F7B000-F7BFFF     (base 16)		KST technology
+				164-1, KST b/d., Bangi-dong, songpa-gu
+				SEOUL  N/A  138-050
+				KR
+
+70-B3-D5   (hex)		SIEMENS AS
+CCA000-CCAFFF     (base 16)		SIEMENS AS
+				Bratsbergveien 5
+				Trondheim    7037
+				NO
+
+70-B3-D5   (hex)		NPF Modem, LLC
+8B2000-8B2FFF     (base 16)		NPF Modem, LLC
+				Kolomyazhskiy prosp. 27A
+				Saint-Petersburg    197341
+				RU
+
+70-B3-D5   (hex)		SOCIEDAD IBERICA DE CONSTRUCCIONES ELECTRICAS, S.A. (SICE)
+EEE000-EEEFFF     (base 16)		SOCIEDAD IBERICA DE CONSTRUCCIONES ELECTRICAS, S.A. (SICE)
+				C/Sepulveda, 6
+				ALCOBENDAS  MADRID  28108
+				ES
+
+70-B3-D5   (hex)		Project Service S.a.s.
+781000-781FFF     (base 16)		Project Service S.a.s.
+				Via Paderno 31/C
+				Seriate  Bergamo  24068
+				IT
+
+70-B3-D5   (hex)		UPM Technology, Inc
+75C000-75CFFF     (base 16)		UPM Technology, Inc
+				3000 NW Stucki pl ste #100
+				Hillsboro OR  OR  97124
+				US
+
+70-B3-D5   (hex)		Groupeer Technologies
+054000-054FFF     (base 16)		Groupeer Technologies
+				17 avenue Georges 5
+				Paris  Ile-de-France  75008
+				FR
+
+70-B3-D5   (hex)		Seal Shield, LLC
+33B000-33BFFF     (base 16)		Seal Shield, LLC
+				2000 N. Alafaya Trail Suite 350
+				Jacksonville  FL  32826
+				US
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+CA8000-CA8FFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		TATTILE SRL
+323000-323FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		TATTILE SRL
+8F3000-8F3FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		PBSI Group Limited
+609000-609FFF     (base 16)		PBSI Group Limited
+				Belle Vue Works, Boundary Street
+				Manchester  Lancashire  M12 5NG
+				GB
+
+70-B3-D5   (hex)		Vironova AB
+C3B000-C3BFFF     (base 16)		Vironova AB
+				Gävlegatan 22
+				Stockholm    11330
+				SE
+
+70-B3-D5   (hex)		5nines
+1B4000-1B4FFF     (base 16)		5nines
+				Avalon Four, Mill Street
+				Cape Town  Western Cape  8001
+				ZA
+
+70-B3-D5   (hex)		Innitive B.V.
+66B000-66BFFF     (base 16)		Innitive B.V.
+				Brouwerijstraat 20
+				Enschede  Overijssel  7523xd
+				NL
+
+70-B3-D5   (hex)		Al Kamel Systems S.L.
+BB8000-BB8FFF     (base 16)		Al Kamel Systems S.L.
+				Priora Xixilona, 93
+				La Garriga  Barcelona  08530
+				ES
+
+70-B3-D5   (hex)		XpertSea Solutions inc.
+996000-996FFF     (base 16)		XpertSea Solutions inc.
+				2700 Jean-Perrin suite 170
+				Québec  QC  G2C 1S9
+				CA
+
+00-1B-C5   (hex)		ChamSys Ltd
+042000-042FFF     (base 16)		ChamSys Ltd
+				Unit 3B Richmond Works
+				Southampton  Hampshire  SO15 3FQ
+				GB
+
+70-B3-D5   (hex)		Sea Shell Corporation
+671000-671FFF     (base 16)		Sea Shell Corporation
+				10th Fl. Chuohtanimachi bldg. 9-3-7, Tanimachi, Chuohku
+				Osaka    542-0012
+				JP
+
+70-B3-D5   (hex)		InDiCor
+FC1000-FC1FFF     (base 16)		InDiCor
+				Kornstr. 18
+				Horgenzell    88263
+				DE
+
+70-B3-D5   (hex)		Waversa Systems
+D07000-D07FFF     (base 16)		Waversa Systems
+				#1002 Pankyo-Innovalley, 622 Sampyong-dong, Bundang-gu
+				Seongnam-si, Kyeonggi-do    13486
+				KR
+
+70-B3-D5   (hex)		IST Technologies (SHENZHEN) Limited
+081000-081FFF     (base 16)		IST Technologies (SHENZHEN) Limited
+				Flat 1203, Block C6, HengFeng Industrial City, HeZhou,
+				Shenzhen  Guangdong  518126
+				CN
+
+70-B3-D5   (hex)		TDI. Co., LTD
+E48000-E48FFF     (base 16)		TDI. Co., LTD
+				80 Daehak-ro, Sankyuk-dong, Buk-gu
+				Deagu  Deagu  41566
+				KR
+
+70-B3-D5   (hex)		R&D Gran-System-S LLC
+185000-185FFF     (base 16)		R&D Gran-System-S LLC
+				F.Skoriny 54A
+				Minsk  NA  220141
+				BY
+
+70-B3-D5   (hex)		Triple Play Communications
+C26000-C26FFF     (base 16)		Triple Play Communications
+				250 East Drive, Suite F
+				Melbourne  Florida  32904
+				US
+
+70-B3-D5   (hex)		Apator Miitors ApS
+771000-771FFF     (base 16)		Apator Miitors ApS
+				Bautavej 1A
+				Aarhus V  Midtjylland  8210
+				DK
+
+70-B3-D5   (hex)		North Pole Engineering, Inc.
+066000-066FFF     (base 16)		North Pole Engineering, Inc.
+				221 N. 1st. St., Suite 310
+				Minneapolis  MN  55401
+				US
+
+70-B3-D5   (hex)		QIAGEN Instruments AG
+7B9000-7B9FFF     (base 16)		QIAGEN Instruments AG
+				Garstligweg 8
+				Hombrechtikon  Zurich  8634
+				CH
+
+70-B3-D5   (hex)		Sadel S.p.A.
+7AA000-7AAFFF     (base 16)		Sadel S.p.A.
+				via Marino Serenari, 1
+				Castel Maggiore  Bologna  40013
+				IT
+
+70-B3-D5   (hex)		Medtronic
+B34000-B34FFF     (base 16)		Medtronic
+				7 Hamarpe Street
+				Jerusalem  Israel  97774
+				IL
+
+70-B3-D5   (hex)		Prisma Telecom Testing Srl
+740000-740FFF     (base 16)		Prisma Telecom Testing Srl
+				Via Petrocchi, 4
+				Milano  MI  20127
+				IT
+
+70-B3-D5   (hex)		Itrinegy Ltd.
+BED000-BEDFFF     (base 16)		Itrinegy Ltd.
+				Albany Chambers
+				Welwyn Garden City  Herts  AL7 1HL
+				GB
+
+70-B3-D5   (hex)		TATTILE SRL
+2F6000-2F6FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Solystic
+F85000-F85FFF     (base 16)		Solystic
+				152/160 av Aristide Briand
+				Bagneux  Region Parisienne  92227
+				FR
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+817000-817FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		OTI LTD
+76F000-76FFFF     (base 16)		OTI LTD
+				Z.H.R Ind.Zone
+				Rosh Pina  North Israel  1200000
+				IL
+
+70-B3-D5   (hex)		Critical Link LLC
+B51000-B51FFF     (base 16)		Critical Link LLC
+				6712 Brooklawn Parkway
+				Syracuse  New York  13211
+				US
+
+70-B3-D5   (hex)		Xsight Systems Ltd.
+504000-504FFF     (base 16)		Xsight Systems Ltd.
+				11 Haavoda Street
+				Rosh-Haayin  Shfela  4801761
+				IL
+
+70-B3-D5   (hex)		Mikrotron Mikrocomputer, Digital- und Analogtechnik GmbH
+5EE000-5EEFFF     (base 16)		Mikrotron Mikrocomputer, Digital- und Analogtechnik GmbH
+				Landshuter Str. 20 - 22
+				Unterschleissheim  Bavaria  85716
+				DE
+
+70-B3-D5   (hex)		BroadSoft Inc
+F11000-F11FFF     (base 16)		BroadSoft Inc
+				550 S Winchester Blvd
+				San Jose  CA  95128
+				US
+
+70-B3-D5   (hex)		Sigma Connectivity AB
+E0D000-E0DFFF     (base 16)		Sigma Connectivity AB
+				BOX99
+				Lund  Skane  SE- 221 00
+				SE
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+D90000-D90FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		DETECT Australia
+DD7000-DD7FFF     (base 16)		DETECT Australia
+				40 Clements Avenue
+				Bundoora  Victoria  3083
+				AU
+
+70-B3-D5   (hex)		Firehose Labs, Inc.
+F79000-F79FFF     (base 16)		Firehose Labs, Inc.
+				1540 Oak Creek Dr #404
+				Palo Alto  CA  94304
+				US
+
+70-B3-D5   (hex)		Fuchu Giken, Inc.
+303000-303FFF     (base 16)		Fuchu Giken, Inc.
+				5-38-33
+				Fuchu-shi  Tokyo  183-0026
+				JP
+
+70-B3-D5   (hex)		BRNET CO.,LTD.
+2EB000-2EBFFF     (base 16)		BRNET CO.,LTD.
+				Zhoushi Jiangnan mingzhu garden 48-902
+				KUNSHAN  JIANGSU  215300
+				CN
+
+70-B3-D5   (hex)		DORLET SAU
+A56000-A56FFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		CT Company
+230000-230FFF     (base 16)		CT Company
+				9F.-1, No,Jian 8th Rd.
+				Jhonghe Dist  New Taipei  23511
+				TW
+
+70-B3-D5   (hex)		vitalcare
+0FC000-0FCFFF     (base 16)		vitalcare
+				Unit 14, 31-33 Chaplin Drive
+				Lane cove  NSW  2066
+				AU
+
+70-B3-D5   (hex)		Temperature@lert
+4DB000-4DBFFF     (base 16)		Temperature@lert
+				108 Lincoln St.
+				Boston  MA  02111
+				US
+
+70-B3-D5   (hex)		Flexim Security Oy
+7C3000-7C3FFF     (base 16)		Flexim Security Oy
+				P.O.Box 700
+				ESPOO  Southern Finland  02131
+				FI
+
+70-B3-D5   (hex)		Neptec Technologies Corp.
+3E4000-3E4FFF     (base 16)		Neptec Technologies Corp.
+				302 Legget Drive
+				Kanata  Ontario  K2K 1Y5
+				CA
+
+70-B3-D5   (hex)		Phyton, Inc. Microsystems and Development Tools
+8A4000-8A4FFF     (base 16)		Phyton, Inc. Microsystems and Development Tools
+				7206 Bay Parkway
+				Brooklyn  NY  11204
+				US
+
+70-B3-D5   (hex)		PK Sound
+9C9000-9C9FFF     (base 16)		PK Sound
+				Bay 133 2634 45th Ave SE
+				Calgary  Alberta  T2B 3M1
+				CA
+
+70-B3-D5   (hex)		Engage Technologies
+FCD000-FCDFFF     (base 16)		Engage Technologies
+				7041 Boone Ave. N
+				Brooklyn Park  MN  55428
+				US
+
+70-B3-D5   (hex)		CheckBill Co,Ltd.
+079000-079FFF     (base 16)		CheckBill Co,Ltd.
+				jiksan-eup, Seobuk-gu 28, 4sandan 5-gil
+				Cheonan-si  Chungcheongnam-do  331-814
+				KR
+
+70-B3-D5   (hex)		Alturna Networks
+714000-714FFF     (base 16)		Alturna Networks
+				De Huchtstraat 35
+				Almere  Fleovland  1327 EC
+				NL
+
+70-B3-D5   (hex)		UFATECH LTD
+1A0000-1A0FFF     (base 16)		UFATECH LTD
+				Mendeleev st 134
+				UFA  RB  450073
+				RU
+
+70-B3-D5   (hex)		Videogenix
+730000-730FFF     (base 16)		Videogenix
+				1423 Beacon St
+				Brookline  MA  02446
+				US
+
+70-B3-D5   (hex)		dieEntwickler Elektronik GmbH
+7A8000-7A8FFF     (base 16)		dieEntwickler Elektronik GmbH
+				Linzer Str. 4
+				Bad Zell  Upper Austria  4283
+				AT
+
+70-B3-D5   (hex)		Speedifi Inc
+D7A000-D7AFFF     (base 16)		Speedifi Inc
+				1163 Kassel Terrace
+				Sunnyvale  CA  94089
+				
+
+70-B3-D5   (hex)		SD Biosensor
+737000-737FFF     (base 16)		SD Biosensor
+				C-4th & 5th Floor, Digital Empire Building, 980-3
+				Suwon-si  Kyonggi-do  ASI|KR|KS002|SUWON
+				KR
+
+70-B3-D5   (hex)		Sierra Nevada Corporation
+339000-339FFF     (base 16)		Sierra Nevada Corporation
+				444 Salomon Circle
+				Sparks  NV  89434
+				US
+
+70-B3-D5   (hex)		StromIdee GmbH
+703000-703FFF     (base 16)		StromIdee GmbH
+				Walzmühlestrasse 51
+				Frauenfeld  TG  8500
+				CH
+
+70-B3-D5   (hex)		Tofino
+838000-838FFF     (base 16)		Tofino
+				47823 Westinghouse Dr.
+				Fremont  California  94539
+				US
+
+70-B3-D5   (hex)		Rexxam Co.,Ltd.
+B35000-B35FFF     (base 16)		Rexxam Co.,Ltd.
+				Ikenouchi 958
+				Takamatsu-shi, Kounan-cho  Kagawa-prefecture  761-1494
+				JP
+
+70-B3-D5   (hex)		Techno Mathematical Co.,Ltd
+916000-916FFF     (base 16)		Techno Mathematical Co.,Ltd
+				7F, Gotanda NN Bldg.,
+				Shinagawa-ku  Tokyo  141-0031
+				JP
+
+70-B3-D5   (hex)		BroadSoft Inc
+AB5000-AB5FFF     (base 16)		BroadSoft Inc
+				550 S Winchester Blvd
+				San Jose  CA  95128
+				US
+
+70-B3-D5   (hex)		Data Physics Corporation
+80D000-80DFFF     (base 16)		Data Physics Corporation
+				1741 Technology Drive, Suite 260
+				San Jose  California  95110
+				US
+
+70-B3-D5   (hex)		LACE LLC.
+4B1000-4B1FFF     (base 16)		LACE LLC.
+				Obukhovskoy oborony 70/2, office 416
+				Saint-Petersburg  Saint-Petersburg  192029
+				RU
+
+70-B3-D5   (hex)		VEILUX INC.
+FE7000-FE7FFF     (base 16)		VEILUX INC.
+				802 GREENVIEW DR. STE 200
+				GRAND PRAIRIE    75050
+				US
+
+70-B3-D5   (hex)		METRONIC APARATURA KONTROLNO - POMIAROWA
+1A5000-1A5FFF     (base 16)		METRONIC APARATURA KONTROLNO - POMIAROWA
+				WYBICKIEGO 7
+				KRAKOW  MALOPOLSKA  31-261
+				PL
+
+70-B3-D5   (hex)		WiTagg, Inc
+4F4000-4F4FFF     (base 16)		WiTagg, Inc
+				1045 Linda Vista Avenue
+				Mountain View  CA  94043
+				US
+
+70-B3-D5   (hex)		Lazer Safe Pty Ltd
+63B000-63BFFF     (base 16)		Lazer Safe Pty Ltd
+				27 Action Road
+				Perth  WA  6090
+				AU
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+431000-431FFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		PA CONSULTING SERVICES
+0A6000-0A6FFF     (base 16)		PA CONSULTING SERVICES
+				CAMBRIDGE TECH CENTRE
+				MELBOURN  HERTFORDSHIRE  SG8 6DP
+				GB
+
+70-B3-D5   (hex)		KOMSIS ELEKTRONIK SISTEMLERI SAN. TIC. LTD.STI
+9CA000-9CAFFF     (base 16)		KOMSIS ELEKTRONIK SISTEMLERI SAN. TIC. LTD.STI
+				MEVLANA MAH. BATTAL SOK. NO:4
+				ISTANBUL  SANCAKTEPE  34791
+				TR
+
+70-B3-D5   (hex)		Thales Nederland BV
+324000-324FFF     (base 16)		Thales Nederland BV
+				PO Box 42
+				Hengelo  OV  7554 PA
+				NL
+
+70-B3-D5   (hex)		Parent Power
+361000-361FFF     (base 16)		Parent Power
+				35 Garland Way
+				Trigg  Western Australia  6029
+				AU
+
+70-B3-D5   (hex)		Cityntel OU
+589000-589FFF     (base 16)		Cityntel OU
+				Akadeemia tee 21/1
+				Tallinn  Harjumaa  12618
+				EE
+
+70-B3-D5   (hex)		DELTA TAU DATA SYSTEMS, INC.
+231000-231FFF     (base 16)		DELTA TAU DATA SYSTEMS, INC.
+				21314 LASSEN STREET
+				CHATSWORTH  CALIFORNIA  91311
+				US
+
+70-B3-D5   (hex)		JK DEVICE CORPORATION
+4DC000-4DCFFF     (base 16)		JK DEVICE CORPORATION
+				RYOGOKU 4-35-1-304
+				SUMIDA-KU  TOKYO  1300026
+				JP
+
+70-B3-D5   (hex)		Plazma-T
+4BB000-4BBFFF     (base 16)		Plazma-T
+				Fryazevskaya str, 10
+				Moscow  Moscow   111396
+				RU
+
+70-B3-D5   (hex)		Dalcnet srl
+CE3000-CE3FFF     (base 16)		Dalcnet srl
+				Via Meucci 35
+				Brendola  Vicenza  36040
+				IT
+
+70-B3-D5   (hex)		Manvish eTech Pvt. Ltd.
+F78000-F78FFF     (base 16)		Manvish eTech Pvt. Ltd.
+				No. 78, Elephant Rock Road
+				Bangalore  Karnataka  560011
+				IN
+
+70-B3-D5   (hex)		Nidec Avtron Automation Corp
+4DF000-4DFFFF     (base 16)		Nidec Avtron Automation Corp
+				8901 East Pleasant Valley Rd
+				Independence  Ohio  44131
+				US
+
+70-B3-D5   (hex)		AML
+DF2000-DF2FFF     (base 16)		AML
+				2190 Regal Parkway
+				Euless  TX  76040
+				US
+
+70-B3-D5   (hex)		North Star Bestech Co.,
+421000-421FFF     (base 16)		North Star Bestech Co.,
+				203,e-spce b/d, digital-ro 27-gil, guro-gu
+				seoul  guro-gu  152-789
+				KR
+
+70-B3-D5   (hex)		CJSC «INTERSET»
+811000-811FFF     (base 16)		CJSC «INTERSET»
+				117292, Moscow, Nakhimovsky prospekt 52/27, office B
+				Moscow  Moscow  117292
+				RU
+
+70-B3-D5   (hex)		Enovative Networks, Inc.
+6DA000-6DAFFF     (base 16)		Enovative Networks, Inc.
+				1901 Central Drive
+				Bedford  TX  76021
+				US
+
+70-B3-D5   (hex)		Kwant Controls BV
+74C000-74CFFF     (base 16)		Kwant Controls BV
+				Voltastraat 3
+				Sneek  Select Your State or Province  8606 JW
+				NL
+
+70-B3-D5   (hex)		Dataforth Corporation
+6FA000-6FAFFF     (base 16)		Dataforth Corporation
+				3331 E. Hemisphere Loop
+				Tucson  AZ  85706
+				US
+
+70-B3-D5   (hex)		Signal Processing Devices Sweden AB
+9BD000-9BDFFF     (base 16)		Signal Processing Devices Sweden AB
+				Teknikringen 6
+				Linköping    SE-58330
+				SE
+
+70-B3-D5   (hex)		ABB SPA - DMPC
+6E0000-6E0FFF     (base 16)		ABB SPA - DMPC
+				VIA ALBARETO 35
+				GENOVA  ITALY  16153
+				IT
+
+70-B3-D5   (hex)		Stellwerk GmbH
+600000-600FFF     (base 16)		Stellwerk GmbH
+				Am Saegewerk 3
+				Baienfurt  BW  88255
+				DE
+
+70-B3-D5   (hex)		Peek Traffic
+875000-875FFF     (base 16)		Peek Traffic
+				2906 Corporate Way
+				Palmetto  FL  34235
+				US
+
+70-B3-D5   (hex)		Communication Technology Ltd.
+9D3000-9D3FFF     (base 16)		Communication Technology Ltd.
+				11F,No.166, Jian 1th Rd.,Jhonghe Dist.
+				New Taipei    23511
+				TW
+
+70-B3-D5   (hex)		Mistral Solutions Pvt. LTD
+500000-500FFF     (base 16)		Mistral Solutions Pvt. LTD
+				No. 60 Adarsh Regent 100 Ft Ring Road
+				Bangalore  Karnataka  560071
+				IN
+
+70-B3-D5   (hex)		Hanshin Electronics
+F72000-F72FFF     (base 16)		Hanshin Electronics
+				Namhangnam-Ro 45, Yeongdo-Gu, Busan, Korea
+				Busan  N/C  606816
+				KR
+
+70-B3-D5   (hex)		serva transport systems GmbH
+46F000-46FFFF     (base 16)		serva transport systems GmbH
+				Gut Sossau 31
+				Grabenstaett  Bayern  83355
+				DE
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+5C8000-5C8FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Bentec GmbH Drilling & Oilfield Systems
+285000-285FFF     (base 16)		Bentec GmbH Drilling & Oilfield Systems
+				Deilmannstraße 1
+				Bad Bentheim  Lower Saxony  48455
+				DE
+
+70-B3-D5   (hex)		ESII
+EC6000-EC6FFF     (base 16)		ESII
+				2 Rue de la Prade
+				LAVERUNE  LR  34880
+				FR
+
+70-B3-D5   (hex)		CertUsus GmbH
+665000-665FFF     (base 16)		CertUsus GmbH
+				Fidlerstrasse 4
+				Ermatingen  Thurgau  8272
+				CH
+
+70-B3-D5   (hex)		Contineo s.r.o.
+D46000-D46FFF     (base 16)		Contineo s.r.o.
+				Jiskrova 4
+				Košice  -  040 01
+				SK
+
+70-B3-D5   (hex)		Zhejiang Wellsun Electric Meter Co.,Ltd
+AE3000-AE3FFF     (base 16)		Zhejiang Wellsun Electric Meter Co.,Ltd
+				No 189 East Xixia Road
+				Taizhou  Zhejiang  317200
+				CN
+
+70-B3-D5   (hex)		Gridless Power Corperation
+EA3000-EA3FFF     (base 16)		Gridless Power Corperation
+				13 Fern Ave
+				Collingswood  New Jersey  08108
+				US
+
+70-B3-D5   (hex)		AeroVision Avionics, Inc.
+7F1000-7F1FFF     (base 16)		AeroVision Avionics, Inc.
+				2F, No.30, R&D Rd. II,
+				Hsinchu City  Hsinchu City  30076
+				TW
+
+70-B3-D5   (hex)		DAVE SRL
+63A000-63AFFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+70-B3-D5   (hex)		Tieto Sweden AB
+C9B000-C9BFFF     (base 16)		Tieto Sweden AB
+				Kanikenäsbanken 12
+				Karlstad  Karlstad  65115
+				SE
+
+70-B3-D5   (hex)		XAVi Technologies Corp.
+C03000-C03FFF     (base 16)		XAVi Technologies Corp.
+				9F., No129, Xingde RD.,Sanchong Dist.,
+				New Taipei  Taiwan  24158
+				TW
+
+70-B3-D5   (hex)		BroadSoft Inc
+E95000-E95FFF     (base 16)		BroadSoft Inc
+				550 S Winchester Blvd
+				San Jose  CA  95128
+				US
+
+70-B3-D5   (hex)		Teuco Guzzini
+2D5000-2D5FFF     (base 16)		Teuco Guzzini
+				Via V. Guzzini, 2
+				Montelupone  Macerata  62010
+				IT
+
+70-B3-D5   (hex)		Innominds Software Private Limited
+DE7000-DE7FFF     (base 16)		Innominds Software Private Limited
+				Sy No 109,110,111/2, Q City, 6th Floor,
+				Hyderabad  Telangana  500032
+				IN
+
+70-B3-D5   (hex)		CRAVIS CO., LIMITED
+7EF000-7EFFFF     (base 16)		CRAVIS CO., LIMITED
+				Room 11, 7/F., Metro Centre, Phase 1 No.32
+				Lam Hing Street  Kowloon Bay  0000
+				HK
+
+70-B3-D5   (hex)		Elektronik Art
+B9B000-B9BFFF     (base 16)		Elektronik Art
+				80 Melgiewska Str.
+				Lublin  Lublin  20234
+				PL
+
+70-B3-D5   (hex)		Mesh Motion Inc
+CF3000-CF3FFF     (base 16)		Mesh Motion Inc
+				242 Stanford Ave
+				Kensington  California  94708
+				US
+
+70-B3-D5   (hex)		Molekuler Goruntuleme A.S.
+7CD000-7CDFFF     (base 16)		Molekuler Goruntuleme A.S.
+				Tubitak-MAM, TEKSEB
+				Kocaeli  Kocaeli  41470
+				TR
+
+70-B3-D5   (hex)		UNISOR MULTISYSTEMS LTD
+05F000-05FFFF     (base 16)		UNISOR MULTISYSTEMS LTD
+				HAYETZIRA 6 ST
+				NETANYA  ISRAEL  4250578
+				IL
+
+70-B3-D5   (hex)		MEIDEN SYSTEM SOLUTIONS
+EFE000-EFEFFF     (base 16)		MEIDEN SYSTEM SOLUTIONS
+				515
+				NUMAZU  SHIZUOKA  410-8588
+				JP
+
+70-B3-D5   (hex)		TATTILE SRL
+412000-412FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Avant Technologies
+097000-097FFF     (base 16)		Avant Technologies
+				P.O. Box 9359
+				Caguas  Puerto Rico  00726
+				PR
+
+70-B3-D5   (hex)		 GD Mission Systems
+DAD000-DADFFF     (base 16)		 GD Mission Systems
+				8220 E. Roosevelt St.
+				Scottsdale  AZ  85257
+				US
+
+70-B3-D5   (hex)		Kitron UAB
+182000-182FFF     (base 16)		Kitron UAB
+				Taikos pr. 151
+				Kaunas  Kaunas  LT-52119
+				LT
+
+70-B3-D5   (hex)		KYS,INC
+5EA000-5EAFFF     (base 16)		KYS,INC
+				C-605 Digital Empire Bldg
+				Yeongtong-gu  Suwon-si, Gyoenggi-do  443-702
+				KR
+
+70-B3-D5   (hex)		SENSEON Corporation
+6F8000-6F8FFF     (base 16)		SENSEON Corporation
+				5-23-31 Mori Isogo-Ku
+				Yokohama  Kanagawa  235-0023
+				JP
+
+70-B3-D5   (hex)		inomed Medizintechnik GmbH
+092000-092FFF     (base 16)		inomed Medizintechnik GmbH
+				Im Hausgruen 29
+				Emmendingen  Baden Württemberg  79312
+				DE
+
+70-B3-D5   (hex)		Fresh Idea Factory BV
+35D000-35DFFF     (base 16)		Fresh Idea Factory BV
+				Torenmolenlaan 67
+				Lochem  Nederland - Nederlands  7241VL
+				NL
+
+70-B3-D5   (hex)		HMicro Inc
+1A1000-1A1FFF     (base 16)		HMicro Inc
+				39355 California St., Suite 303
+				Fremont  California  94538
+				US
+
+70-B3-D5   (hex)		BroadSoft Inc
+7B3000-7B3FFF     (base 16)		BroadSoft Inc
+				550 S Winchester Blvd
+				San Jose  CA  95128
+				US
+
+70-B3-D5   (hex)		RM Michaelides Software & Elektronik GmbH
+062000-062FFF     (base 16)		RM Michaelides Software & Elektronik GmbH
+				Donaustrasse 14
+				Fulda  Hessen  36043
+				
+
+70-B3-D5   (hex)		JungwooEng Co., Ltd
+B8D000-B8DFFF     (base 16)		JungwooEng Co., Ltd
+				#864-5, Gwanyang2-dong, Dongan-gu
+				Anyang-si  Gyeonggi-do  431-804
+				KR
+
+70-B3-D5   (hex)		Automata GmbH & Co. KG
+57C000-57CFFF     (base 16)		Automata GmbH & Co. KG
+				Gewerbering 5
+				Ried  Bavaria  86510
+				DE
+
+70-B3-D5   (hex)		Martec S.p.A.
+1F5000-1F5FFF     (base 16)		Martec S.p.A.
+				Via dell'Industria 1/3
+				Vignate  Milano  20060
+				IT
+
+70-B3-D5   (hex)		DiTEST Fahrzeugdiagnose GmbH
+112000-112FFF     (base 16)		DiTEST Fahrzeugdiagnose GmbH
+				Alte Poststraße 152
+				Graz  Steiermark  8020
+				AT
+
+70-B3-D5   (hex)		Esource Srl
+205000-205FFF     (base 16)		Esource Srl
+				via del Caravaggio 3
+				Milano  Mi  20144
+				IT
+
+70-B3-D5   (hex)		IBM Research GmbH
+708000-708FFF     (base 16)		IBM Research GmbH
+				Saeumerstrasse 4
+				Rueschlikon  ZH  8803
+				CH
+
+70-B3-D5   (hex)		Tokyo Communication Equipment MFG Co.,ltd.
+BEC000-BECFFF     (base 16)		Tokyo Communication Equipment MFG Co.,ltd.
+				3-8-13
+				Minato-ku  Tokyo  1080074
+				JP
+
+70-B3-D5   (hex)		Elsuhd Net Ltd Co.
+025000-025FFF     (base 16)		Elsuhd Net Ltd Co.
+				Karrada dakhil-Q 909- St.20-Building 74
+				Karrada  Baghdad  10001
+				IQ
+
+70-B3-D5   (hex)		Simple Works, Inc.
+AA0000-AA0FFF     (base 16)		Simple Works, Inc.
+				PO Box 345
+				Libertyville  Illinois  60048
+				US
+
+70-B3-D5   (hex)		AML
+709000-709FFF     (base 16)		AML
+				2190 Regal Parkway
+				Euless  TX  76040
+				US
+
+70-B3-D5   (hex)		ePOINT Embedded Computing Limited
+B8C000-B8CFFF     (base 16)		ePOINT Embedded Computing Limited
+				Williamton House
+				Culross  Fife  KY12 8HL
+				GB
+
+70-B3-D5   (hex)		Telink Semiconductor CO, Limtied, Taiwan
+058000-058FFF     (base 16)		Telink Semiconductor CO, Limtied, Taiwan
+				Room 1050, 10F, Bld H, YuanQu St.
+				Taipei  Taiwan  11503
+				TW
+
+70-B3-D5   (hex)		LandmarkTech Systems Technology Co.,Ltd.
+755000-755FFF     (base 16)		LandmarkTech Systems Technology Co.,Ltd.
+				Room221, Building #29, No.368 Zhangjiang Rd.,
+				  Shanghai  201210
+				CN
+
+70-B3-D5   (hex)		AeroVision Avionics, Inc.
+956000-956FFF     (base 16)		AeroVision Avionics, Inc.
+				2F, No.30, R&D. II, Science Park,
+				Hsinchu City  Taiwan  30076
+				TW
+
+70-B3-D5   (hex)		Qingdao Haitian Weiye Automation Control System Co., Ltd
+54D000-54DFFF     (base 16)		Qingdao Haitian Weiye Automation Control System Co., Ltd
+				D&D Wealth Building
+				Qingdao  Shandong  266000
+				CN
+
+70-B3-D5   (hex)		octoScope
+EF3000-EF3FFF     (base 16)		octoScope
+				305 Foster Street
+				Littleton  Massachusetts  01460
+				US
+
+70-B3-D5   (hex)		5-D Systems, Inc.
+BDA000-BDAFFF     (base 16)		5-D Systems, Inc.
+				1 Chisholm Trail
+				Round Rock  TX  78681
+				US
+
+70-B3-D5   (hex)		Sunrise Systems Electronics Co. Inc.
+BBE000-BBEFFF     (base 16)		Sunrise Systems Electronics Co. Inc.
+				720 Washington street
+				Pembroke  MA  02359
+				US
+
+70-B3-D5   (hex)		GNF
+751000-751FFF     (base 16)		GNF
+				10675 John Jay Hopkins Drive
+				San Diego  CA  92121
+				US
+
+70-B3-D5   (hex)		Procon Electronics Pty Ltd
+CBC000-CBCFFF     (base 16)		Procon Electronics Pty Ltd
+				P O Box 164
+				Seven Hills  NSW  1730
+				AU
+
+70-B3-D5   (hex)		Secuinfo Co. Ltd
+B08000-B08FFF     (base 16)		Secuinfo Co. Ltd
+				1411, Kranz Techno, 5442-1
+				Seongnam-si  Gyeonggi-do  462-729
+				KR
+
+70-B3-D5   (hex)		INCAA Computers
+587000-587FFF     (base 16)		INCAA Computers
+				Po Box 722
+				Apeldoorn  Gelderland  7300 AS
+				NL
+
+70-B3-D5   (hex)		Intercore GmbH
+A15000-A15FFF     (base 16)		Intercore GmbH
+				Oberlandstrasse 13-14
+				  Berlin  12099
+				DE
+
+70-B3-D5   (hex)		ICP NewTech Ltd
+E4A000-E4AFFF     (base 16)		ICP NewTech Ltd
+				Kilbrittain
+				Bandon  Cork  WLF-17-68G
+				IE
+
+70-B3-D5   (hex)		Quasonix, LLC
+23C000-23CFFF     (base 16)		Quasonix, LLC
+				6025 Schumacher Park Dr
+				West Chester  Ohio  45069
+				US
+
+70-B3-D5   (hex)		Atessa, Inc.
+7E7000-7E7FFF     (base 16)		Atessa, Inc.
+				5000 Hopyard Rd.
+				Pleasanton  CA  94588
+				US
+
+70-B3-D5   (hex)		GHL Systems Berhad
+ADD000-ADDFFF     (base 16)		GHL Systems Berhad
+				Unit L8 C-G-15, Block C,
+				Bandar Sri Damansara  Kuala Lumpur  52200
+				MY
+
+70-B3-D5   (hex)		Exfrontier Co., Ltd.
+E74000-E74FFF     (base 16)		Exfrontier Co., Ltd.
+				5-27 Shinano-Cho
+				Seto-City  Aichi  480-1207
+				JP
+
+70-B3-D5   (hex)		NETA Elektronik AS
+C78000-C78FFF     (base 16)		NETA Elektronik AS
+				Yukari Dudullu Organize Sanayi Bolgesi
+				Istanbul  -  34775
+				TR
+
+70-B3-D5   (hex)		Olssen
+E08000-E08FFF     (base 16)		Olssen
+				Schrank 9
+				Hardinxveld-Giessendam  Zuid Holland  3371kj
+				NL
+
+70-B3-D5   (hex)		YotaScope Technologies Co., Ltd.
+D47000-D47FFF     (base 16)		YotaScope Technologies Co., Ltd.
+				3F, No. 7-1, Jhongsing Road.,
+				New Taipei City    23678
+				TW
+
+70-B3-D5   (hex)		WPGSYS Pte Ltd
+D86000-D86FFF     (base 16)		WPGSYS Pte Ltd
+				5 Harper Road #04-01
+				    369673
+				SG
+
+70-B3-D5   (hex)		ambiHome GmbH
+A0B000-A0BFFF     (base 16)		ambiHome GmbH
+				Theaterstrasse 19
+				Aachen  NRW  52062
+				
+
+70-B3-D5   (hex)		ELOMAC Elektronik GmbH
+3DE000-3DEFFF     (base 16)		ELOMAC Elektronik GmbH
+				Heinrich-Vogl-Str. 14
+				Ebersberg  Bayern  85560
+				DE
+
+70-B3-D5   (hex)		Cari Electronic
+AE9000-AE9FFF     (base 16)		Cari Electronic
+				8 rue olivier de Serres
+				Valence  Drome  26958
+				FR
+
+70-B3-D5   (hex)		XV360 Optical Information Systems Ltd.
+184000-184FFF     (base 16)		XV360 Optical Information Systems Ltd.
+				241, Sean Bldgs. Floor 1, S.Psaila Street
+				Birkirkara  Malta  BKR9078
+				MT
+
+70-B3-D5   (hex)		INRADIOS GmbH
+6B6000-6B6FFF     (base 16)		INRADIOS GmbH
+				Nossener Bruecke 12
+				Dresden  SAX  01187
+				DE
+
+70-B3-D5   (hex)		Wanco Inc
+0AA000-0AAFFF     (base 16)		Wanco Inc
+				5870 Tennyson St
+				Arvada  CO  80003
+				US
+
+70-B3-D5   (hex)		Solar Network & Partners
+EDD000-EDDFFF     (base 16)		Solar Network & Partners
+				Corneliusstr. 90
+				Geilenkirchen  NRW  52511
+				DE
+
+00-1B-C5   (hex)		inomatic GmbH
+0C3000-0C3FFF     (base 16)		inomatic GmbH
+				
+				Nordhorn    48513
+				DE
+
+00-1B-C5   (hex)		YESpay International Ltd
+0BE000-0BEFFF     (base 16)		YESpay International Ltd
+				Checknet House
+				Barnet  Hertfordshire  EN4 8QZ
+				GB
+
+00-1B-C5   (hex)		Hangzhou Zhiping Technology Co., Ltd.
+0A1000-0A1FFF     (base 16)		Hangzhou Zhiping Technology Co., Ltd.
+				Room 619, Science and technology square, East software park,
+				Hangzhou  Zhejiang  310012
+				CN
+
+00-1B-C5   (hex)		Hettich Benelux
+0A2000-0A2FFF     (base 16)		Hettich Benelux
+				de Aaldor 9
+				Geldermalsen  Gelderland  4191PC
+				NL
+
+00-1B-C5   (hex)		ENTE Sp. z o.o.
+09F000-09FFFF     (base 16)		ENTE Sp. z o.o.
+				ul. Gaudiego 7
+				Gliwice   Śląskie  44-100
+				PL
+
+00-1B-C5   (hex)		Shenzhen Guang Lian Zhi Tong Limited
+09A000-09AFFF     (base 16)		Shenzhen Guang Lian Zhi Tong Limited
+				Room 2411, Block E, Xi hai ming zhu
+				Shenzhen  Guangdong  518000
+				CN
+
+00-1B-C5   (hex)		PREVAC sp. z o.o.
+095000-095FFF     (base 16)		PREVAC sp. z o.o.
+				ul. Raciborska 61
+				44-362 Rogow, Silesia    
+				PL
+
+00-1B-C5   (hex)		Topicon
+08A000-08AFFF     (base 16)		Topicon
+				Room 201, 2F, Lee Loong Building
+				Central    
+				HK
+
+00-1B-C5   (hex)		DIWEL
+083000-083FFF     (base 16)		DIWEL
+				80 avenue des buttes de coesmes
+				RENNES    35700
+				FR
+
+00-1B-C5   (hex)		TGS Geophysical Company (UK) Limited
+082000-082FFF     (base 16)		TGS Geophysical Company (UK) Limited
+				Millbank House
+				Surbiton    KT6 6AP
+				GB
+
+00-1B-C5   (hex)		Momentum Data Systems
+077000-077FFF     (base 16)		Momentum Data Systems
+				5432 Bolsa Ave
+				Huntington Beach  California  92649
+				US
+
+00-1B-C5   (hex)		Ohio Semitronics, Inc.
+072000-072FFF     (base 16)		Ohio Semitronics, Inc.
+				4242 Reynolds Dr
+				Hilliard  Ohio  43026
+				US
+
+00-1B-C5   (hex)		Kitron GmbH
+075000-075FFF     (base 16)		Kitron GmbH
+				Lessingstr. 24
+				Großbettlingen  Baden-Württemberg  72663
+				DE
+
+00-1B-C5   (hex)		HCS KABLOLAMA SISTEMLERI SAN. ve TIC.A.S.
+068000-068FFF     (base 16)		HCS KABLOLAMA SISTEMLERI SAN. ve TIC.A.S.
+				Turgutreis Mah. Barbaros Cad. 
+				Esenler / ISTANBUL    34235
+				TR
+
+00-1B-C5   (hex)		ENSTECH
+060000-060FFF     (base 16)		ENSTECH
+				Sunil Technopia 802, #440
+				Seongnam-City  South Korea / Kyunggi-do  462-120
+				KR
+
+00-1B-C5   (hex)		Suretrak Global Pty Ltd
+05C000-05CFFF     (base 16)		Suretrak Global Pty Ltd
+				PO Box 7075
+				Wetherill Park  NSW  2164
+				AU
+
+00-1B-C5   (hex)		Mitsubishi Electric India PVT. LTD
+04E000-04EFFF     (base 16)		Mitsubishi Electric India PVT. LTD
+				Emerald House, EL-3
+				Pune  Maharashtra  411026
+				IN
+
+00-1B-C5   (hex)		Orbital Systems, Ltd.
+04F000-04FFFF     (base 16)		Orbital Systems, Ltd.
+				3807 Carbon Rd.
+				Irving  TEXAS  75038
+				US
+
+00-1B-C5   (hex)		Certis Technology International Pte Ltd
+04A000-04AFFF     (base 16)		Certis Technology International Pte Ltd
+				Certis CISCO Centre
+				409179    409179
+				SG
+
+00-1B-C5   (hex)		Silicon Controls
+04B000-04BFFF     (base 16)		Silicon Controls
+				Unit 14A
+				Macqaurie Park  NSW  2113
+				AU
+
+00-1B-C5   (hex)		GÉANT
+046000-046FFF     (base 16)		GÉANT
+				Singel 468D
+				Amsterdam  Noord-Holland  1017AW
+				NL
+
+00-1B-C5   (hex)		Xiphos Systems Corp.
+03C000-03CFFF     (base 16)		Xiphos Systems Corp.
+				Suite 500
+				Montreal  QC  H2W 1Y5
+				CA
+
+00-1B-C5   (hex)		rioxo GmbH
+03D000-03DFFF     (base 16)		rioxo GmbH
+				Im Grund 15
+				Baden-Dättwil  AG  5405
+				CH
+
+00-1B-C5   (hex)		Promixis, LLC
+03B000-03BFFF     (base 16)		Promixis, LLC
+				211 Edenberry Avenue
+				Jupiter  FL  33458
+				US
+
+00-1B-C5   (hex)		LOMAR SRL
+036000-036FFF     (base 16)		LOMAR SRL
+				VIA PETRARCA 
+				FLERO  BRESCIA  25020
+				IT
+
+00-1B-C5   (hex)		Fibrain Co. Ltd.
+02F000-02FFFF     (base 16)		Fibrain Co. Ltd.
+				ul. WspÃ³lna 4A
+				Rzeszów   Podkarpacie  35-205
+				PL
+
+00-1B-C5   (hex)		DDTRONIK Dariusz Dowgiert
+02D000-02DFFF     (base 16)		DDTRONIK Dariusz Dowgiert
+				Chabrowa 2
+				Czarna Bialostocka  Podlaskie  16-020
+				PL
+
+00-1B-C5   (hex)		Analytical Instrument Systems, Inc.
+02A000-02AFFF     (base 16)		Analytical Instrument Systems, Inc.
+				P.O. Box 458
+				Flemington  New Jersey  08822
+				US
+
+00-1B-C5   (hex)		2 FRANCE MARINE
+029000-029FFF     (base 16)		2 FRANCE MARINE
+				61, route de la Chapelle de Rousse
+				GAN    64290
+				FR
+
+00-1B-C5   (hex)		CAMEA, spol. s r.o.
+027000-027FFF     (base 16)		CAMEA, spol. s r.o.
+				Korenskeho 25
+				Brno    621 00
+				CZ
+
+00-1B-C5   (hex)		ANNECY ELECTRONIQUE SAS
+024000-024FFF     (base 16)		ANNECY ELECTRONIQUE SAS
+				Parc Altaīs, 1 Rue Callisto
+				CHAVANOD  FRANCE  74650
+				FR
+
+00-1B-C5   (hex)		MAGO di Della Mora Walter
+023000-023FFF     (base 16)		MAGO di Della Mora Walter
+				Via S.Vidotto 2/3
+				Codroipo fr. Biauzzo  Udine (UD)  33033
+				IT
+
+00-1B-C5   (hex)		Private
+01E000-01EFFF     (base 16)		Private
+
+00-1B-C5   (hex)		Coolit Systems, Inc.
+01C000-01CFFF     (base 16)		Coolit Systems, Inc.
+				3920 - 29th St. N.E.
+				Calgary  AB  T1Y6B6
+				CA
+
+00-1B-C5   (hex)		Commonwealth Scientific and Industrial  Research Organisation
+01B000-01BFFF     (base 16)		Commonwealth Scientific and Industrial  Research Organisation
+				PO Box 883
+				Kenmore  Queensland  4069
+				AU
+
+00-1B-C5   (hex)		cPacket Networks
+017000-017FFF     (base 16)		cPacket Networks
+				2061 Landings Drive
+				Mountain View  CA  94043
+				US
+
+00-1B-C5   (hex)		Tokyo Cosmos Electric, Inc.
+012000-012FFF     (base 16)		Tokyo Cosmos Electric, Inc.
+				2-268 Sobudai
+				Zama  Kanagawa  252-8550
+				JP
+
+00-1B-C5   (hex)		MicroSigns Technologies Inc
+003000-003FFF     (base 16)		MicroSigns Technologies Inc
+				1350 Mazurette
+				Montreal  QC  H1V 2C8
+				CA
+
+70-B3-D5   (hex)		KMtronic ltd
+299000-299FFF     (base 16)		KMtronic ltd
+				Dobri Czintulov 28A str.
+				 Gorna Oryahovica  VT  5100
+				BG
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+3EB000-3EBFFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		Kyoto Denkiki
+F0F000-F0FFFF     (base 16)		Kyoto Denkiki
+				makishima 16 19-1
+				Uji    6110041
+				JP
+
+70-B3-D5   (hex)		Copious Imaging LLC
+4E8000-4E8FFF     (base 16)		Copious Imaging LLC
+				83 Hartwell Ave, Suite 150
+				Lexington  MA  02421
+				US
+
+70-B3-D5   (hex)		APEX Stabilizations GmbH
+A52000-A52FFF     (base 16)		APEX Stabilizations GmbH
+				Künstlergasse 11, 4. OG, Top 2
+				Vienna    1150
+				AT
+
+70-B3-D5   (hex)		NEOPATH INTEGRATED SYSTEMS LTDA
+067000-067FFF     (base 16)		NEOPATH INTEGRATED SYSTEMS LTDA
+				Rua Paulo Emídio Barbosa, 485 - sala 302
+				Rio de Janeiro  Rio de Janeiro  21941-907
+				BR
+
+70-B3-D5   (hex)		Waco Giken Co.,  Ltd.
+815000-815FFF     (base 16)		Waco Giken Co.,  Ltd.
+				1-1-50, Suehiro-Cho, 
+				Tsurumi-Ku, Yokohama    230-0045
+				JP
+
+70-B3-D5   (hex)		Monnit Corporation
+D16000-D16FFF     (base 16)		Monnit Corporation
+				3400 S West Temple
+				Salt Lake City    84115
+				US
+
+70-B3-D5   (hex)		Harmonic Design GmbH
+1F0000-1F0FFF     (base 16)		Harmonic Design GmbH
+				Bahnhofstraße 1
+				Steinheim    71711
+				DE
+
+70-B3-D5   (hex)		hmt telematik GmbH
+EC4000-EC4FFF     (base 16)		hmt telematik GmbH
+				Grazer Str. 34b
+				Graz    8045
+				AT
+
+70-B3-D5   (hex)		Exsom Computers LLC
+4BF000-4BFFFF     (base 16)		Exsom Computers LLC
+				Office 3206, The Citadel Tower, Business Bay
+				Dubai  Dubai  72891
+				AE
+
+70-B3-D5   (hex)		Piranha EMS Inc.
+8CC000-8CCFFF     (base 16)		Piranha EMS Inc.
+				2681 Zanker Road
+				San Jose  CA  95134
+				US
+
+70-B3-D5   (hex)		Small Data Garden Oy
+568000-568FFF     (base 16)		Small Data Garden Oy
+				Paloheimonkatu 2
+				Riihimäki    11130
+				FI
+
+70-B3-D5   (hex)		Densitron Technologies Ltd
+E3C000-E3CFFF     (base 16)		Densitron Technologies Ltd
+				16 South Park
+				Sevenoaks  Kent  TN13 1AN
+				GB
+
+70-B3-D5   (hex)		Shanghai AiGentoo Information Technology Co.,Ltd.
+4FF000-4FFFFF     (base 16)		Shanghai AiGentoo Information Technology Co.,Ltd.
+				No.309 room 2445 14C?Tanggu Road?Hongkou District
+				Shanghai    200080
+				CN
+
+70-B3-D5   (hex)		GENTEC ELECTRO-OPTICS
+CF7000-CF7FFF     (base 16)		GENTEC ELECTRO-OPTICS
+				445 ST-JEAN-BAPTISTE SUITE 160
+				Quebec  Quebec  G2E 5N7
+				CA
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+519000-519FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Ossiaco
+CB0000-CB0FFF     (base 16)		Ossiaco
+				355 Peel St.
+				Montreal  Quebec  H3C2G9
+				CA
+
+70-B3-D5   (hex)		Profotech
+5AD000-5ADFFF     (base 16)		Profotech
+				Volgogradsky prospekt, 42/5
+				Moscow    109316
+				RU
+
+70-B3-D5   (hex)		A & T Technologies
+143000-143FFF     (base 16)		A & T Technologies
+				ul. Baumana 57a-31
+				Kemerovo    650040
+				RU
+
+70-B3-D5   (hex)		INNOVATIVE CONCEPTS AND DESIGN LLC
+DAF000-DAFFFF     (base 16)		INNOVATIVE CONCEPTS AND DESIGN LLC
+				107 Trumbull Street, Bldg F8
+				Elizabeth  NJ  07206
+				US
+
+70-B3-D5   (hex)		Contec Americas Inc.
+363000-363FFF     (base 16)		Contec Americas Inc.
+				3991 Sarno Rd
+				Melbourne  FL  32934
+				US
+
+70-B3-D5   (hex)		GABO 
+757000-757FFF     (base 16)		GABO 
+				Gyeonggido
+				Ansan    15617
+				KR
+
+70-B3-D5   (hex)		Pro-Digital Projetos Eletronicos Ltda
+56D000-56DFFF     (base 16)		Pro-Digital Projetos Eletronicos Ltda
+				RUA SENADOR SARAIVA 200
+				CURITIBA  PR  80510300
+				BR
+
+70-B3-D5   (hex)		Season Electronics Ltd
+67E000-67EFFF     (base 16)		Season Electronics Ltd
+				600 Nest Business Park 
+				Havant  Hampshire  PO9 5TL
+				GB
+
+70-B3-D5   (hex)		SUS Corporation
+422000-422FFF     (base 16)		SUS Corporation
+				6F, S-patio Bldg. 14-25 Minami-cho, Suruga-ku,
+				Shizuoka city,  Shizuoka  422-8067
+				JP
+
+70-B3-D5   (hex)		Emporia Renewable Energy Corp
+EB8000-EB8FFF     (base 16)		Emporia Renewable Energy Corp
+				7901 Shaffer Pkwy
+				Littleton  CO  80127
+				US
+
+70-B3-D5   (hex)		Loma Systems s.r.o.
+5EB000-5EBFFF     (base 16)		Loma Systems s.r.o.
+				U Lomy 1069
+				Dob?any    33441
+				CZ
+
+70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
+606000-606FFF     (base 16)		OOO Research and Production Center Computer Technologies
+				Komsomolsky avenue, 90-17
+				Perm  Perm Region  614010
+				RU
+
+70-B3-D5   (hex)		GSI GeoSolutions International Ltd
+8BC000-8BCFFF     (base 16)		GSI GeoSolutions International Ltd
+				Ahornweg 5A
+				Othmarsingen    5504
+				CH
+
+70-B3-D5   (hex)		CorDes, LLC
+FA9000-FA9FFF     (base 16)		CorDes, LLC
+				20243 Kentucky Oaks Ct
+				Ashburn  VA  20147
+				US
+
+70-B3-D5   (hex)		Yite technology
+321000-321FFF     (base 16)		Yite technology
+				No. 56, Xiaobei Rd., North Dist
+				tainan    70448 
+				TW
+
+70-B3-D5   (hex)		Wartsila Voyage Limited
+9D4000-9D4FFF     (base 16)		Wartsila Voyage Limited
+				13-18 City Quay
+				Dublin 2    D02 ED70
+				IE
+
+70-B3-D5   (hex)		Typhon Treatment Systems Ltd
+F97000-F97FFF     (base 16)		Typhon Treatment Systems Ltd
+				Unit 10, Newton Gate Industrial Estate
+				Penrith  Cumbria  CA11 0BF
+				GB
+
+70-B3-D5   (hex)		Franz Kessler GmbH
+C44000-C44FFF     (base 16)		Franz Kessler GmbH
+				Franz-Kessler-Str. 2
+				Bad Buchau  Baden-Wuerttemberg  88422
+				DE
+
+70-B3-D5   (hex)		WIKA Alexander Wiegand SE & Co. KG
+97B000-97BFFF     (base 16)		WIKA Alexander Wiegand SE & Co. KG
+				Alexander-Wiegand-Strasse 30
+				Klingenberg    63911
+				DE
+
+70-B3-D5   (hex)		Conserv Solutions
+310000-310FFF     (base 16)		Conserv Solutions
+				2222 2nd Ave N. Suite 204
+				Birmingham  AL  35203
+				US
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+03E000-03EFFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+DA9000-DA9FFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		OOO NTC Rotek
+62C000-62CFFF     (base 16)		OOO NTC Rotek
+				Malaya Krasnoselskaya str., build. 2/8, block 7, floor 4, dep. II, room 5
+				Moscow  Moscow  107140
+				RU
+
+70-B3-D5   (hex)		SHANDHAI LANDLEAF ARCHITECTURE TECHNOLOGY CO.,LTD
+B5D000-B5DFFF     (base 16)		SHANDHAI LANDLEAF ARCHITECTURE TECHNOLOGY CO.,LTD
+				Real Power Innovation Center tower NO.2,7Floor,No.51 Zhengxue Road,Yangpu District
+				SHANGHAI  SHANGHAI  200433
+				CN
+
+70-B3-D5   (hex)		ITG.CO.LTD
+281000-281FFF     (base 16)		ITG.CO.LTD
+				617, anyang Megavally, 268, Hagui-ro, Dongan-gu
+				Anyang    14056
+				KR
+
+70-B3-D5   (hex)		Utrend Technology (Shanghai) Co., Ltd
+7C6000-7C6FFF     (base 16)		Utrend Technology (Shanghai) Co., Ltd
+				Building #3-P, No 780 Cailun Road
+				Shanghai  Shanghai  201203
+				CN
+
+70-B3-D5   (hex)		Olympus NDT Canada
+5BB000-5BBFFF     (base 16)		Olympus NDT Canada
+				3415 rue Pierre Ardouin
+				Québec  Québec  G1P 0B3
+				CA
+
+70-B3-D5   (hex)		Dosepack India LLP
+2B5000-2B5FFF     (base 16)		Dosepack India LLP
+				429/A,Kalasagar Shopping Hub, Sattadhar Cross Road
+				Ahmedabad  Gujarat  380061
+				IN
+
+70-B3-D5   (hex)		Serveron Corporation
+FF4000-FF4FFF     (base 16)		Serveron Corporation
+				13550 SW Karl Braun Drive
+				Beaverton  OR  97077
+				US
+
+70-B3-D5   (hex)		IAAN Co., Ltd
+67F000-67FFFF     (base 16)		IAAN Co., Ltd
+				4F 261 Yangjae-dong, Seocho-gu
+				Seoul    06777
+				KR
+
+70-B3-D5   (hex)		Stealth Communications
+86A000-86AFFF     (base 16)		Stealth Communications
+				1 Penn Plaza, Suite 6308
+				New York  NY  10119
+				US
+
+70-B3-D5   (hex)		Pneumax S.p.A.
+A60000-A60FFF     (base 16)		Pneumax S.p.A.
+				Via Cascina Barbellina 10
+				Lurano    24050
+				IT
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+F80000-F80FFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		ENLESS WIRELESS
+4FD000-4FDFFF     (base 16)		ENLESS WIRELESS
+				45 TER AVENUE DE VERDUN
+				BRUGES    33520
+				FR
+
+70-B3-D5   (hex)		Newtec A/S
+18F000-18FFFF     (base 16)		Newtec A/S
+				Stærmosegårdsvej  18
+				Odense SV  Region Syd  5230
+				DK
+
+70-B3-D5   (hex)		AUDIO VISUAL DIGITAL SYSTEMS
+A7F000-A7FFFF     (base 16)		AUDIO VISUAL DIGITAL SYSTEMS
+				PLOT NO.180 PHASE V SECTOR56, HSIIDC I.E KUNDLI SONEPAT
+				SONEPAT  HARYANA  131028
+				IN
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+1BF000-1BFFFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Cetitec GmbH
+B36000-B36FFF     (base 16)		Cetitec GmbH
+				Mannheimer Strasse 17
+				Pforzheim    75179
+				DE
+
+70-B3-D5   (hex)		DONG IL VISION Co., Ltd.
+038000-038FFF     (base 16)		DONG IL VISION Co., Ltd.
+				#9 Ftrek tower, 11-25, Simindaero 327 beongil,Dongan-gu
+				Anyangi-Si  Gyeonggi-Do  14055
+				KR
+
+70-B3-D5   (hex)		Kamacho Scale Co., Ltd.
+385000-385FFF     (base 16)		Kamacho Scale Co., Ltd.
+				2246 Mure
+				Takamatsu-shi  Kagawa-ken  761-0196
+				JP
+
+70-B3-D5   (hex)		Visual Robotics
+0F4000-0F4FFF     (base 16)		Visual Robotics
+				38 Irving Rd
+				Eugene  OR  97404
+				US
+
+70-B3-D5   (hex)		Vessel Technology Ltd
+44D000-44DFFF     (base 16)		Vessel Technology Ltd
+				Banchory Business Centre, Burn O'Bennie Road
+				Banchory  Aberdeenshire  AB31 5ZU
+				GB
+
+70-B3-D5   (hex)		Munters
+FA8000-FA8FFF     (base 16)		Munters
+				Hasivim 18
+				Pethch Tikva  Israel  4959376
+				IL
+
+70-B3-D5   (hex)		TEX COMPUTER SRL 
+6C2000-6C2FFF     (base 16)		TEX COMPUTER SRL 
+				VIA MERCADANTE 35
+				CATTOLICA   RIMINI   47841
+				IT
+
+70-B3-D5   (hex)		TangRen C&S CO., Ltd
+3FC000-3FCFFF     (base 16)		TangRen C&S CO., Ltd
+				3a-5d, Tingwei Daxia, Tingwei Industrial Park, No. 6, Liufang Road, Bao'an District
+				Shenzhen  Guangdong  518052
+				CN
+
+70-B3-D5   (hex)		LOTES TM OOO
+EA5000-EA5FFF     (base 16)		LOTES TM OOO
+				Barklaya 22, str.1
+				Moscow    121309
+				RU
+
+70-B3-D5   (hex)		Yi An Electronics Co., Ltd
+F28000-F28FFF     (base 16)		Yi An Electronics Co., Ltd
+				5F.-2, No. 81, Sec. 1, Xintai 5th Rd., Xizhi Dist
+				 New Taipei City    22101
+				TW
+
+70-B3-D5   (hex)		Ariston Thermo s.p.a.
+3D6000-3D6FFF     (base 16)		Ariston Thermo s.p.a.
+				Via Aristide Merloni 45
+				Fabriano  Ancona  60044
+				IT
+
+70-B3-D5   (hex)		MG s.r.l.
+130000-130FFF     (base 16)		MG s.r.l.
+				via Monte Bianco, 1
+				Solbiate Olona  VA  21058
+				IT
+
+70-B3-D5   (hex)		DORLET SAU
+639000-639FFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		OOO ORION-R
+047000-047FFF     (base 16)		OOO ORION-R
+				Novoselov str., 40A, room N200
+				Ryazan    390048
+				RU
+
+70-B3-D5   (hex)		Glory Technology Service Inc.
+801000-801FFF     (base 16)		Glory Technology Service Inc.
+				3F., No.43-1, Ln. 11, Sec. 6, Minquan E. Rd
+				Taipei City   Neihu Dist  114
+				TW
+
+70-B3-D5   (hex)		Toolplanet Co., Ltd.
+4B5000-4B5FFF     (base 16)		Toolplanet Co., Ltd.
+				43-2 Himigaike-cho
+				Gifu-shi  Gifu  500-8122
+				JP
+
+70-B3-D5   (hex)		Postmark Incorporated 
+CBB000-CBBFFF     (base 16)		Postmark Incorporated 
+				3197 Duncan Lane
+				San Luis Obispo  CA  93401
+				US
+
+70-B3-D5   (hex)		Abbott Diagnostics Technologies AS
+53F000-53FFFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo  Oslo  0504
+				NO
+
+70-B3-D5   (hex)		Surion (Pty) Ltd
+7FC000-7FCFFF     (base 16)		Surion (Pty) Ltd
+				205 Park Corner, 2 Bolton road, Rosebank
+				JOHANNESBURG NORTH  Gauteng  2193
+				ZA
+
+70-B3-D5   (hex)		REO AG
+8E7000-8E7FFF     (base 16)		REO AG
+				Brühlerstr. 100
+				Solingen    42657
+				DE
+
+70-B3-D5   (hex)		GIORDANO CONTROLS SPA
+95D000-95DFFF     (base 16)		GIORDANO CONTROLS SPA
+				VIA PARALLELA 2/4
+				VILLA BARTOLOMEA  IT  37049
+				IT
+
+70-B3-D5   (hex)		Global Power Products
+3B1000-3B1FFF     (base 16)		Global Power Products
+				225 Arnold Road
+				Lawrenceville    30044
+				US
+
+70-B3-D5   (hex)		Sankyo Intec Co,ltd
+E7F000-E7FFFF     (base 16)		Sankyo Intec Co,ltd
+				127 Tokimata
+				Iida-shi  Nagano-ken  399-2563
+				JP
+
+70-B3-D5   (hex)		EnergizeEV
+EB6000-EB6FFF     (base 16)		EnergizeEV
+				#160, 1684 Decoto Road
+				Union City  CA  94587
+				US
+
+70-B3-D5   (hex)		Seznam.cz, a.s., CZ26168685
+F66000-F66FFF     (base 16)		Seznam.cz, a.s., CZ26168685
+				Radlicka 3294/10
+				Praha  Czech Republic  15000
+				CZ
+
+70-B3-D5   (hex)		Nidec asi spa
+D88000-D88FFF     (base 16)		Nidec asi spa
+				s.s11 , ca sordis 4
+				Montebello Vicentino  vicenza  36054
+				IT
+
+70-B3-D5   (hex)		Frog Cellsat Limited
+C5E000-C5EFFF     (base 16)		Frog Cellsat Limited
+				D-213, Sector-63, Noida
+				Noida  Utter Pardesh  201301
+				IN
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+6DC000-6DCFFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Levelup Holding, Inc.
+89F000-89FFFF     (base 16)		Levelup Holding, Inc.
+				3015 W Weldon Ave
+				Phoenix  AZ  85017
+				US
+
+70-B3-D5   (hex)		Cavagna Group Spa
+1B2000-1B2FFF     (base 16)		Cavagna Group Spa
+				Via Statale 11/13
+				Ponte S.Marco di Calcinato (BS)    25011
+				IT
+
+70-B3-D5   (hex)		RTA srl
+32B000-32BFFF     (base 16)		RTA srl
+				Via Mattei Fraz. Divisa
+				Marcignago  PV  27020
+				IT
+
+70-B3-D5   (hex)		RF-Tuote Oy
+3AC000-3ACFFF     (base 16)		RF-Tuote Oy
+				Joensuunkatu 13
+				Salo  246  24130
+				FI
+
+70-B3-D5   (hex)		Shanghai Junqian Sensing Technology Co., LTD
+468000-468FFF     (base 16)		Shanghai Junqian Sensing Technology Co., LTD
+				Room 602,Building 1,NO.760,Xinjunhuan Road, Caohejing High-Tech Park
+				Shanghai  Shanghai  201114
+				CN
+
+70-B3-D5   (hex)		NooliTIC
+E51000-E51FFF     (base 16)		NooliTIC
+				165 avenue de bretagne
+				LILLE    59000
+				FR
+
+70-B3-D5   (hex)		Simplified MFG
+66F000-66FFFF     (base 16)		Simplified MFG
+				1707 S Gilmore Cir
+				Mesa  AZ  85206
+				US
+
+70-B3-D5   (hex)		Sphere of economical technologies Ltd
+1C1000-1C1FFF     (base 16)		Sphere of economical technologies Ltd
+				132, 7-ya Liniya Str.
+				Omsk  Omskaya oblast  644021
+				RU
+
+70-B3-D5   (hex)		Scenario Automation
+43C000-43CFFF     (base 16)		Scenario Automation
+				Rua Paulo Elias, 216
+				São Carlos  São Paulo  13564400
+				BR
+
+70-B3-D5   (hex)		LACS SRL
+F4A000-F4AFFF     (base 16)		LACS SRL
+				VIA MONTE NERO 4
+				ROSA'  VI  36027
+				IT
+
+70-B3-D5   (hex)		Orion Power Systems, Inc.
+110000-110FFF     (base 16)		Orion Power Systems, Inc.
+				2939 W. Beaver Street
+				Jacksonville  FL  32254
+				US
+
+70-B3-D5   (hex)		Sicon srl
+EAF000-EAFFFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Garmo Instruments S.L.
+C02000-C02FFF     (base 16)		Garmo Instruments S.L.
+				Polig. Malpica, Calle E, 32-39, nave 43
+				Zaragoza  Aragon   50016
+				ES
+
+70-B3-D5   (hex)		King-On Technology Ltd.
+D35000-D35FFF     (base 16)		King-On Technology Ltd.
+				13F, No.207, Sec#3, Beixin Rd., Xindian District.
+				New Taipei City  Taiwan  23143
+				TW
+
+70-B3-D5   (hex)		BRS Sistemas Eletrônicos
+3CD000-3CDFFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491 / 204
+				Porto Alegre  RS  91380-000
+				BR
+
+70-B3-D5   (hex)		Nuance Hearing Ltd.
+AE4000-AE4FFF     (base 16)		Nuance Hearing Ltd.
+				Raoul Wallenberg 24, Building A1, Floor 3
+				Tel Aviv    6971920
+				IL
+
+70-B3-D5   (hex)		HONG JIANG ELECTRONICS CO., LTD.
+E64000-E64FFF     (base 16)		HONG JIANG ELECTRONICS CO., LTD.
+				9F, No. 649-3, Zhong Zheng Rd.,, Xin Zhuang Dist., New Taipei City,, TAIWAN(R.O.C.)
+				24257  Taiwan  SHINJUANG
+				TW
+
+70-B3-D5   (hex)		Yongtong tech
+2CB000-2CBFFF     (base 16)		Yongtong tech
+				D18,NO.6 Road HuangChunBei
+				TianHe  GuangZhou  515800
+				CN
+
+70-B3-D5   (hex)		Malin Space Science System
+FE5000-FE5FFF     (base 16)		Malin Space Science System
+				5880 Pacific Center Blvd 
+				San Diego  CA  92121
+				US
+
+70-B3-D5   (hex)		OLEDCOMM
+7D3000-7D3FFF     (base 16)		OLEDCOMM
+				10-12 avenue de l'Europe
+				Vélizy Villacoublay  Ile de France  78140
+				FR
+
+70-B3-D5   (hex)		Wexiodisk AB
+905000-905FFF     (base 16)		Wexiodisk AB
+				Mardvagen 4
+				Vaxjo  Kronoberg  352 45
+				SE
+
+70-B3-D5   (hex)		Klaxoon
+DB3000-DB3FFF     (base 16)		Klaxoon
+				3 av de Belle Fontaine
+				Cesson-Sevigne    35510
+				FR
+
+70-B3-D5   (hex)		ECoCoMS Ltd.
+5CB000-5CBFFF     (base 16)		ECoCoMS Ltd.
+				BIC-ISOT, Tzarigradsko shose blvd., 7-th km, Corpus 3, fl. 4,
+				Sofia  BG  1784
+				BG
+
+70-B3-D5   (hex)		MetCom Solutions GmbH
+D18000-D18FFF     (base 16)		MetCom Solutions GmbH
+				Marie-Curie-Str. 19
+				Mannheim  Baden-Wuerttemberg  68219
+				DE
+
+70-B3-D5   (hex)		BeiLi eTek (Zhangjiagang) Co., Ltd.
+D53000-D53FFF     (base 16)		BeiLi eTek (Zhangjiagang) Co., Ltd.
+				Dongnan Industrial Park, Nanfeng Town
+				Zhangjiagang  Jiangsu  215619
+				CN
+
+70-B3-D5   (hex)		Konzept Informationssysteme GmbH
+71C000-71CFFF     (base 16)		Konzept Informationssysteme GmbH
+				Am Weiher 13
+				Meersburg    88709
+				DE
+
+70-B3-D5   (hex)		ABECO Industrie Computer GmbH
+F02000-F02FFF     (base 16)		ABECO Industrie Computer GmbH
+				Industriestrasse 2
+				Straelen  NRW  47638
+				DE
+
+70-B3-D5   (hex)		Abbott Diagnostics Technologies AS
+DDE000-DDEFFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo  Oslo  0504
+				NO
+
+70-B3-D5   (hex)		PuS GmbH und Co. KG
+09D000-09DFFF     (base 16)		PuS GmbH und Co. KG
+				Hainstr. 13
+				Gera  Germany  07545
+				DE
+
+70-B3-D5   (hex)		Partilink Inc.
+6A7000-6A7FFF     (base 16)		Partilink Inc.
+				2F-2, No.18, Ln. 48. Xingshan Rd, Neihu Dist.
+				Taipei     114
+				TW
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+B22000-B22FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Laser Imagineering Vertriebs GmbH
+3EE000-3EEFFF     (base 16)		Laser Imagineering Vertriebs GmbH
+				Rudolf-Diesel-Weg 5
+				Moelln    23879
+				DE
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+1BA000-1BAFFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		Serveron / Qualitrol
+B1C000-B1CFFF     (base 16)		Serveron / Qualitrol
+				13550 SW Karl Braun Drive
+				Beaverton  OR  97005
+				US
+
+70-B3-D5   (hex)		Gentec
+83D000-83DFFF     (base 16)		Gentec
+				2625 Dalton
+				Quebec    G1P 3S9
+				CA
+
+70-B3-D5   (hex)		Xirgo Technologies LLC
+1A2000-1A2FFF     (base 16)		Xirgo Technologies LLC
+				188 Camino Ruiz
+				Camarillo  CA  93012
+				US
+
+70-B3-D5   (hex)		HAN CHANG
+859000-859FFF     (base 16)		HAN CHANG
+				171, Gasan digital 1-ro, Geumcheon-gu, Seoul, Republic of Korea
+				Seoul  Geumcheon-gu, Seoul  08503
+				KR
+
+70-B3-D5   (hex)		Daatrics LTD
+B69000-B69FFF     (base 16)		Daatrics LTD
+				4th Floor, 86-90 Paul Street
+				LONDON    EC2A 4NE
+				GB
+
+70-B3-D5   (hex)		Guangdong Transtek Medical Electronics Co., Ltd.
+8D4000-8D4FFF     (base 16)		Guangdong Transtek Medical Electronics Co., Ltd.
+				Zone A, No.105, Dongli Road, Torch Development District
+				Zhongshan  Guangdong  528437
+				CN
+
+70-B3-D5   (hex)		Williams Sound LLC
+58B000-58BFFF     (base 16)		Williams Sound LLC
+				10300 Valley View Road
+				Eden Prairie  MN  55344
+				US
+
+70-B3-D5   (hex)		BrainboxAI Inc
+E44000-E44FFF     (base 16)		BrainboxAI Inc
+				2075 boul Robert-Bourassa, Suite 500
+				MONTREAL  QUEBEC  H3A 2L1
+				CA
+
+70-B3-D5   (hex)		Cardinal Kinetic
+09C000-09CFFF     (base 16)		Cardinal Kinetic
+				2748 Circleport Drive
+				Erlanger  KY  41018
+				US
+
+70-B3-D5   (hex)		Sicon srl
+6C8000-6C8FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Clockwork Dog
+5D7000-5D7FFF     (base 16)		Clockwork Dog
+				43 Philpot Street
+				London    E1 2JH
+				GB
+
+70-B3-D5   (hex)		SUN ELECTRONICS CO.,LTD.
+D82000-D82FFF     (base 16)		SUN ELECTRONICS CO.,LTD.
+				667-2,Furugori,Misato-machi,Kodama-gun
+				Saitama-ken    367-0111
+				JP
+
+70-B3-D5   (hex)		BIRTECH TECHNOLOGY
+E65000-E65FFF     (base 16)		BIRTECH TECHNOLOGY
+				Ak is Business Center, Tuzla, Istanbul / Turkey
+				Istanbul  Tuzla  34944
+				TR
+
+70-B3-D5   (hex)		Transit Solutions, LLC.
+E68000-E68FFF     (base 16)		Transit Solutions, LLC.
+				114 West Grandview Avenue
+				Zelienople  PA  16063
+				US
+
+70-B3-D5   (hex)		Nuance Hearing Ltd.
+35B000-35BFFF     (base 16)		Nuance Hearing Ltd.
+				Raoul Wallenberg 24, Building A1, Floor 3
+				Tel Aviv    6971920
+				IL
+
+70-B3-D5   (hex)		xTom GmbH
+8B5000-8B5FFF     (base 16)		xTom GmbH
+				Kreuzstr.60
+				Duesseldorf  NRW  40210
+				DE
+
+70-B3-D5   (hex)		E-Controls
+6E2000-6E2FFF     (base 16)		E-Controls
+				PASSATGE GARROTXA, 6
+				SANT BOI DE LLOBREGAT    08830
+				ES
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+B9A000-B9AFFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+1BE000-1BEFFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Integrated Protein Technologies, Inc.
+FAC000-FACFFF     (base 16)		Integrated Protein Technologies, Inc.
+				PO box 1839
+				Evanston  IL  60204
+				US
+
+70-B3-D5   (hex)		GETT Geraetetechnik GmbH
+290000-290FFF     (base 16)		GETT Geraetetechnik GmbH
+				Mittlerer Ring 1
+				Treuen    08233
+				DE
+
+70-B3-D5   (hex)		ABB
+C47000-C47FFF     (base 16)		ABB
+				Fulachstrasse 150
+				Schaffhausen    8200
+				CH
+
+70-B3-D5   (hex)		CREATIVE
+A65000-A65FFF     (base 16)		CREATIVE
+				801 Chenil Bldg. 266 Hwagokro,
+				Gangseogu  seoul  07673
+				KR
+
+70-B3-D5   (hex)		Samwell International Inc
+B42000-B42FFF     (base 16)		Samwell International Inc
+				No. 317-1, Sec.2, An Kang Rd., Hsintien Dist
+				New Taipei City    231
+				TW
+
+70-B3-D5   (hex)		BAE Systems
+AFC000-AFCFFF     (base 16)		BAE Systems
+				1098 Clark Street
+				Endicott  NY  13760
+				US
+
+70-B3-D5   (hex)		Guangzhou Xianhe Technology Engineering Co., Ltd
+C13000-C13FFF     (base 16)		Guangzhou Xianhe Technology Engineering Co., Ltd
+				No. 30-6, Jiantai Road, Dongyong Town, Nansha District
+				Guangzhou  Guangdong  511453
+				CN
+
+70-B3-D5   (hex)		Lightside Instruments AS
+EC2000-EC2FFF     (base 16)		Lightside Instruments AS
+				Thorvald Meyers gate 34A
+				Oslo    0555
+				NO
+
+70-B3-D5   (hex)		Farmobile, LLC
+5A8000-5A8FFF     (base 16)		Farmobile, LLC
+				4001 West 114th Street  Suite 300
+				Leawood  KS  66211
+				US
+
+70-B3-D5   (hex)		i2-electronics
+59E000-59EFFF     (base 16)		i2-electronics
+				Kitazakae 4-13-15-701
+				Urayasu city  Chiba  2790002
+				JP
+
+70-B3-D5   (hex)		EXATEL
+065000-065FFF     (base 16)		EXATEL
+				Perkuna 46
+				Warsaw  Mazowieckie  04-164
+				PL
+
+70-B3-D5   (hex)		Shenzhen Shi Fang Communication Technology Co., Ltd
+E6B000-E6BFFF     (base 16)		Shenzhen Shi Fang Communication Technology Co., Ltd
+				601-6 Mitehuapujing No.9 Jinxiu Mid Road Longtian Street Pingshan Distinct
+				Shenzhen   Guangdong  518118
+				CN
+
+70-B3-D5   (hex)		Kita Kirmizi Takim Bilgi Guvenligi Danismanlik ve Egitim A.S.
+998000-998FFF     (base 16)		Kita Kirmizi Takim Bilgi Guvenligi Danismanlik ve Egitim A.S.
+				Sogutozu mah. Sogutözu cad. A Blok No:2A/47 Cankaya/ANKARA Maltepe V.D. 559 051 3252
+				Ankara  Cankaya  06510
+				TR
+
+70-B3-D5   (hex)		Octopus IoT srl
+AD7000-AD7FFF     (base 16)		Octopus IoT srl
+				Via Acquasanta, 15
+				Salerno  Salerno  84131
+				IT
+
+70-B3-D5   (hex)		ACRIOS Systems s.r.o.
+CEE000-CEEFFF     (base 16)		ACRIOS Systems s.r.o.
+				Tvaruzkova, 2738 
+				Roznov pod  Radhostem  756 61
+				CZ
+
+70-B3-D5   (hex)		SIANA Systems
+82F000-82FFFF     (base 16)		SIANA Systems
+				8979 Carley circle
+				San Diego  CA  92126
+				US
+
+70-B3-D5   (hex)		Günther Spelsberg GmbH + Co. KG
+311000-311FFF     (base 16)		Günther Spelsberg GmbH + Co. KG
+				Im Gewerbepark 1
+				Schalksmühle  NRW  58579
+				DE
+
+70-B3-D5   (hex)		Eneon sp. z o.o.
+E66000-E66FFF     (base 16)		Eneon sp. z o.o.
+				Aleje Jerozolimskie 200
+				Warsaw    02-486
+				PL
+
+70-B3-D5   (hex)		WIZAPPLY CO.,LTD
+8D2000-8D2FFF     (base 16)		WIZAPPLY CO.,LTD
+				1-3-13-5107, Benten
+				Osaka-shi, Minato-ku  Osaka-fu  552-0007
+				JP
+
+70-B3-D5   (hex)		AmericanPharma Technologies
+B4C000-B4CFFF     (base 16)		AmericanPharma Technologies
+				222 N 13th Street   Suite 200
+				Boise  ID  83702
+				US
+
+70-B3-D5   (hex)		ALFI
+B0D000-B0DFFF     (base 16)		ALFI
+				Via Castelletto 20
+				Borgo Ticino  NO  28040
+				IT
+
+70-B3-D5   (hex)		Medipense Inc.
+72B000-72BFFF     (base 16)		Medipense Inc.
+				9145 rue Boivin
+				Montreal  Quebec  H8R 2E5
+				CA
+
+70-B3-D5   (hex)		MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
+7CC000-7CCFFF     (base 16)		MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
+				3-1, Asahi, Nishibiwajima-Cho
+				Kiyosu  Aichi  452-8561
+				JP
+
+70-B3-D5   (hex)		The-Box Development
+F31000-F31FFF     (base 16)		The-Box Development
+				D.D. Eisenhowerstraat 74
+				Groningen  Groningen  9728 RX
+				NL
+
+70-B3-D5   (hex)		MAS Elettronica sas di Mascetti Sandro e C.
+4FB000-4FBFFF     (base 16)		MAS Elettronica sas di Mascetti Sandro e C.
+				Via Risorgimento 16/C
+				Selvazzano Dentro  Padova  35030
+				IT
+
+70-B3-D5   (hex)		DHK Storage, LLC
+915000-915FFF     (base 16)		DHK Storage, LLC
+				13873 Park Center Rd, Ste 510N
+				Herndon  VA  20171
+				US
+
+70-B3-D5   (hex)		Shenzhen Zhiting Technology Co.,Ltd
+FE1000-FE1FFF     (base 16)		Shenzhen Zhiting Technology Co.,Ltd
+				Room 516, Building 4,  Qidi Xiexin science and Technology Park, Longcheng Street
+				Shenzhen  Guangdong  518109
+				CN
+
+70-B3-D5   (hex)		on-systems limited
+5B7000-5B7FFF     (base 16)		on-systems limited
+				615A Jubilee Road
+				Letchworth Garden City  Hertfordshire  SG6 1NE
+				GB
+
+70-B3-D5   (hex)		Blueprint Lab
+FE0000-FE0FFF     (base 16)		Blueprint Lab
+				3-5 Queen St
+				Glebe  NSW  2037
+				AU
+
+70-B3-D5   (hex)		MiraeSignal Co., Ltd
+38C000-38CFFF     (base 16)		MiraeSignal Co., Ltd
+				#701,C-dong Bundang Techno Park Pangyoro 744
+				Bundang-gu Sungnam-si  Kyungkido  13510
+				KR
+
+70-B3-D5   (hex)		LEIDOS
+004000-004FFF     (base 16)		LEIDOS
+				1121 W Reeves
+				Ridgecrest  CA  93555
+				US
+
+70-B3-D5   (hex)		Swiss Timing LTD
+725000-725FFF     (base 16)		Swiss Timing LTD
+				Rue de l'Envers 1
+				Corgemont    2606
+				CH
+
+70-B3-D5   (hex)		Avionica 
+CC0000-CC0FFF     (base 16)		Avionica 
+				9941 West Jessamine St
+				Miami   FL  33157 
+				US
+
+70-B3-D5   (hex)		Nudron IoT Solutions LLP
+6B4000-6B4FFF     (base 16)		Nudron IoT Solutions LLP
+				10, Gitaneel Arcade, Hill Road, Bandra-W
+				Mumbai  Maharashtra  400050
+				IN
+
+70-B3-D5   (hex)		DORLET SAU
+DEB000-DEBFFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		Dadacon GmbH
+B79000-B79FFF     (base 16)		Dadacon GmbH
+				Hammarskjoeldring 75F
+				Frankfurt am Main  Hessen  60439
+				DE
+
+70-B3-D5   (hex)		XIA LLC
+3DC000-3DCFFF     (base 16)		XIA LLC
+				31057 Genstar Road
+				HAYWARD  CA  94544
+				US
+
+70-B3-D5   (hex)		Nordson Corporation
+50B000-50BFFF     (base 16)		Nordson Corporation
+				11475 Lakefield Dr
+				Duluth  GA  30097
+				US
+
+70-B3-D5   (hex)		Jeio Tech 
+720000-720FFF     (base 16)		Jeio Tech 
+				19 Alexander Road, Suite 7
+				Billerica  MA  01821
+				US
+
+70-B3-D5   (hex)		BAB TECHNOLOGIE GmbH
+E19000-E19FFF     (base 16)		BAB TECHNOLOGIE GmbH
+				Hoerder Burgstr.18
+				Dortmund  NRW  44263
+				DE
+
+70-B3-D5   (hex)		Schneider Electric Motion USA
+2E4000-2E4FFF     (base 16)		Schneider Electric Motion USA
+				370 N. Main St.
+				Marlborough  CT  06447
+				US
+
+70-B3-D5   (hex)		Done Design Inc
+928000-928FFF     (base 16)		Done Design Inc
+				930 Delray Drive
+				Forest Hill  MD  21050
+				US
+
+70-B3-D5   (hex)		TESCAN Brno, s.r.o.
+812000-812FFF     (base 16)		TESCAN Brno, s.r.o.
+				Libusina tr.1
+				Brno    62300
+				CZ
+
+70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
+965000-965FFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+70-B3-D5   (hex)		China Telecom Fufu Information Technology CO.,LTD
+38E000-38EFFF     (base 16)		China Telecom Fufu Information Technology CO.,LTD
+				22 Shuitou Road, Doumen,Fuzhou
+				Fuzhou  FuJian  350013
+				CN
+
+70-B3-D5   (hex)		Dynim Oy
+CE6000-CE6FFF     (base 16)		Dynim Oy
+				Kirkkokatu 5b
+				Oulu    90100
+				FI
+
+70-B3-D5   (hex)		Beijing Muniulinghang Technology Co., Ltd
+198000-198FFF     (base 16)		Beijing Muniulinghang Technology Co., Ltd
+				C9001 Kangjianbaosheng Square C, No.8 Heiquan Road, Haidian District,
+				Beijing    100192
+				CN
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+35F000-35FFFF     (base 16)		Aplex Technology Inc.
+				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
+				Shenzhen City  Guangdong  518129
+				CN
+
+70-B3-D5   (hex)		TESSA AGRITECH SRL
+F74000-F74FFF     (base 16)		TESSA AGRITECH SRL
+				VIA ALLA CASCATA, 56
+				Trento  Trento  38123
+				IT
+
+70-B3-D5   (hex)		CAR-connect GmbH
+81F000-81FFFF     (base 16)		CAR-connect GmbH
+				Am Egelingsberg 8
+				Leiferde  Niedersachsen  38542
+				DE
+
+70-B3-D5   (hex)		MBJ
+E03000-E03FFF     (base 16)		MBJ
+				Jochim-Klindt-Straße 7
+				Ahrensburg  Schleswig Holstein  22926
+				DE
+
+70-B3-D5   (hex)		Code Blue Corporation 
+271000-271FFF     (base 16)		Code Blue Corporation 
+				259 Hedcor Street
+				Holland  MI  49423
+				US
+
+70-B3-D5   (hex)		Fischer Connectors
+BF7000-BF7FFF     (base 16)		Fischer Connectors
+				11 Waterberry drive
+				Waterlooville  Hampshire  PO7 7YH
+				GB
+
+70-B3-D5   (hex)		VK Integrated Systems
+A8F000-A8FFFF     (base 16)		VK Integrated Systems
+				810 Crossland Ave
+				Clarksville  TN  37040
+				US
+
+70-B3-D5   (hex)		Wisebox.,Co.Ltd
+AC2000-AC2FFF     (base 16)		Wisebox.,Co.Ltd
+				23, Geoje-daero 108beon-gil, Yeonje-gu
+				Busan    47547
+				KR
+
+8C-1F-64   (hex)		DB Systel GmbH
+991000-991FFF     (base 16)		DB Systel GmbH
+				Jürgen-Ponto-Platz1
+				Frankfurt  Hessen  60329
+				DE
+
+8C-1F-64   (hex)		Katronic AG & Co. KG
+C41000-C41FFF     (base 16)		Katronic AG & Co. KG
+				Gießerweg 5
+				Wernigerode    38855
+				DE
+
+8C-1F-64   (hex)		NAGTECH LLC
+29F000-29FFFF     (base 16)		NAGTECH LLC
+				12A, Krasnolesya Str., off 507
+				Ekaterinburg  Sverdlovskaya oblast  620110
+				RU
+
+8C-1F-64   (hex)		ROBOfiber, Inc.
+CF1000-CF1FFF     (base 16)		ROBOfiber, Inc.
+				3000F Danville Blvd, #300
+				Alamo  CA  94507
+				US
+
+8C-1F-64   (hex)		QLM Technology Ltd
+3A4000-3A4FFF     (base 16)		QLM Technology Ltd
+				Unit DX, Albert Road
+				Bristol    BS20XJ
+				GB
+
+8C-1F-64   (hex)		Abiman Engineering
+C03000-C03FFF     (base 16)		Abiman Engineering
+				34, Pureundeulpan-ro 567 Beon-gil, Paltan-myeon
+				Hwaseong-si  Gyeonggi-do  18529
+				KR
+
+8C-1F-64   (hex)		Integer.pl S.A.
+438000-438FFF     (base 16)		Integer.pl S.A.
+				Wielicka 28
+				Krakow    30-552
+				PL
+
+8C-1F-64   (hex)		LLC TC Vympel
+947000-947FFF     (base 16)		LLC TC Vympel
+				Bolshaya Serpukhovskaya street 25, bld. 2, 1 st floor, room III
+				Moscow    115093
+				RU
+
+8C-1F-64   (hex)		castcore
+204000-204FFF     (base 16)		castcore
+				D1210, 947 Hanam-daero
+				Hanam-si, Gyeonggi-do    12982
+				KR
+
+8C-1F-64   (hex)		Zhejiang Laolan Information Technology Co., Ltd
+801000-801FFF     (base 16)		Zhejiang Laolan Information Technology Co., Ltd
+				Zhejiang Laolan Information Technology Co., Ltd
+				Hangzhou  Zhejiang   311700
+				CN
+
+8C-1F-64   (hex)		BlueSword Intelligent Technology Co., Ltd.
+AAB000-AABFFF     (base 16)		BlueSword Intelligent Technology Co., Ltd.
+				No. 909, Longaobei Road,Jinan,Shandong
+				Jinan  Shandong  250101
+				CN
+
+8C-1F-64   (hex)		Aton srl
+19C000-19CFFF     (base 16)		Aton srl
+				Via Guido Rossa 5
+				Spilamberto  MO  41057
+				IT
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+AED000-AEDFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+8C-1F-64   (hex)		RealWear
+9C1000-9C1FFF     (base 16)		RealWear
+				600 Hathaway Rd, Ste 105
+				Vancouver  WA  98661
+				US
+
+8C-1F-64   (hex)		Jacquet Dechaume
+7C8000-7C8FFF     (base 16)		Jacquet Dechaume
+				1 Rue Louis Armand
+				Le Plessis Bouchard    95130
+				FR
+
+8C-1F-64   (hex)		Jemac Sweden AB
+304000-304FFF     (base 16)		Jemac Sweden AB
+				Trångsundsvägen 20A
+				Kalmar    39356
+				SE
+
+8C-1F-64   (hex)		HEINEN ELEKTRONIK GmbH
+AA4000-AA4FFF     (base 16)		HEINEN ELEKTRONIK GmbH
+				Hunsrückstraße 7
+				HAAN  NRW  42781
+				DE
+
+8C-1F-64   (hex)		Sanskruti
+4FA000-4FAFFF     (base 16)		Sanskruti
+				76/121, Mohit House, 2nd cross, Dasarahali Main Road, buvaneswari Nagar
+				bangalore  karnataka  560024
+				IN
+
+8C-1F-64   (hex)		Figment Design Laboratories
+445000-445FFF     (base 16)		Figment Design Laboratories
+				113 11th Avenue
+				Johannesburg  Guateng  2170
+				ZA
+
+8C-1F-64   (hex)		SVMS
+3B5000-3B5FFF     (base 16)		SVMS
+				ZA de Berroueta
+				Urrugne    64122
+				FR
+
+8C-1F-64   (hex)		JUSTMORPH PTE. LTD.
+AB5000-AB5FFF     (base 16)		JUSTMORPH PTE. LTD.
+				29A Mosque Street
+				Singapore    059507
+				SG
+
+8C-1F-64   (hex)		INFOSTECH Co., Ltd.
+F86000-F86FFF     (base 16)		INFOSTECH Co., Ltd.
+				26, Namsan-ro 39beon-gil, Uichang-gu
+				Changwon-si  Gyeongsangnam-do  51368
+				KR
+
+8C-1F-64   (hex)		NEXCONTECH
+53D000-53DFFF     (base 16)		NEXCONTECH
+				138, Ilsan-ro, Ilsandong-gu, Goyang-si
+				Gyeonggi-do    10442
+				KR
+
+8C-1F-64   (hex)		Grupo Epelsa S.L.
+D54000-D54FFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+8C-1F-64   (hex)		Daedalean AG
+E43000-E43FFF     (base 16)		Daedalean AG
+				Albisriederstrasse 199
+				Zürich    8047
+				CH
+
+8C-1F-64   (hex)		GIORDANO CONTROLS SPA
+242000-242FFF     (base 16)		GIORDANO CONTROLS SPA
+				VIA PARALLELA 2/4
+				VILLA BARTOLOMEA  IT  37049
+				IT
+
+8C-1F-64   (hex)		Eloy Water
+5D3000-5D3FFF     (base 16)		Eloy Water
+				Rue des Spinettes, 13
+				Sprimont  Liège  4140
+				BE
+
+8C-1F-64   (hex)		Spacee
+C50000-C50FFF     (base 16)		Spacee
+				3752 Arapaho Rd
+				Addison  TX  75001
+				US
+
+8C-1F-64   (hex)		Luxshare Electronic Technology (Kunshan) LTD
+E98000-E98FFF     (base 16)		Luxshare Electronic Technology (Kunshan) LTD
+				No.158,Jinchang Road,Jinxi Town,Kunshan City,Jiangsu Province,215324, China
+				Kunshan  Jiangsu  215324
+				CN
+
+8C-1F-64   (hex)		GTR Industries
+E73000-E73FFF     (base 16)		GTR Industries
+				1020 Lawrence Ave West
+				North York  Ontario  M6A 1C8
+				CA
+
+8C-1F-64   (hex)		ReliaSpeak Information Technology Co., Ltd.
+CA6000-CA6FFF     (base 16)		ReliaSpeak Information Technology Co., Ltd.
+				Room 905, Ruide Building, No.5 Yumin East Road, Xicheng District, Beijing, China
+				Beijing    100029
+				CN
+
+8C-1F-64   (hex)		XCOM Labs
+30A000-30AFFF     (base 16)		XCOM Labs
+				9450 Carroll Park Drive
+				San Diego  CA  92121
+				US
+
+8C-1F-64   (hex)		Barkodes Bilgisayar Sistemleri Bilgi Iletisim ve Y
+B0C000-B0CFFF     (base 16)		Barkodes Bilgisayar Sistemleri Bilgi Iletisim ve Y
+				Cevizli Mahallesi, Nedret Sokak, No: 4, Barkodes Plaza, Maltepe
+				Istanbul    34846
+				TR
+
+8C-1F-64   (hex)		SAN-AI Electronic Industries Co.,Ltd.
+FBD000-FBDFFF     (base 16)		SAN-AI Electronic Industries Co.,Ltd.
+				2-4-15
+				Fukura,Yokohama Shi  Kanagawa Ken  236-0004
+				JP
+
+8C-1F-64   (hex)		AS Strömungstechnik GmbH
+1D1000-1D1FFF     (base 16)		AS Strömungstechnik GmbH
+				Elly-Beinhorn-Straße 7
+				Ostfildern    73760
+				DE
+
+8C-1F-64   (hex)		KMtronic ltd
+6EA000-6EAFFF     (base 16)		KMtronic ltd
+				Dobri Czintulov 28A str.
+				 Gorna Oryahovica  VT  5100
+				BG
+
+8C-1F-64   (hex)		Hunan Oushi Electronic Technology Co.,Ltd
+D78000-D78FFF     (base 16)		Hunan Oushi Electronic Technology Co.,Ltd
+				Yueliangdao street, Wangcheng District
+				Changsha    410200
+				CN
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+923000-923FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+8C-1F-64   (hex)		Orlaco Products B.V.
+8D1000-8D1FFF     (base 16)		Orlaco Products B.V.
+				Albert Plesmanstraat 42
+				Barneveld    3772MN
+				NL
+
+8C-1F-64   (hex)		ALPHA Corporation
+8E2000-8E2FFF     (base 16)		ALPHA Corporation
+				Product Development Department, Housing Hardware Devision
+				Yokohama  Kanagawa  236-0004
+				JP
+
+8C-1F-64   (hex)		ikan International LLC
+0F9000-0F9FFF     (base 16)		ikan International LLC
+				11500 S Sam Houston Pkwy W
+				HOUSTON  TX  77031
+				US
+
+8C-1F-64   (hex)		SURYA ELECTRONICS
+534000-534FFF     (base 16)		SURYA ELECTRONICS
+				Plot no115 ALEAP Industrial Estate Gajularamaram village, Quthubullapur Mandal
+				HYDERABAD  Telangana  500055
+				IN
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+AD2000-AD2FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		FLOYD inc.
+07E000-07EFFF     (base 16)		FLOYD inc.
+				121, Digital-ro, Geumcheon-gu, Acegasan Tower, rm 1506
+				seoul  Seoul  08505
+				KR
+
+8C-1F-64   (hex)		Dorsett Technologies Inc
+973000-973FFF     (base 16)		Dorsett Technologies Inc
+				100 Woodlyn Dr
+				Yadkinville  NC  27055
+				US
+
+8C-1F-64   (hex)		VAF Co.
+1E1000-1E1FFF     (base 16)		VAF Co.
+				No.3,6th Alley , Sabunchi St., Tehran 
+				Tehran    1533655514
+				IR
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+9F2000-9F2FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		IndiNatus (IndiNatus India Private Limited)
+F1B000-F1BFFF     (base 16)		IndiNatus (IndiNatus India Private Limited)
+				D-92/6, 2nd Floor, Okhla Industrial Area, Okhla Phase -I
+				New Delhi  New Delhi  110020
+				IN
+
+8C-1F-64   (hex)		ePlant, Inc.
+9F0000-9F0FFF     (base 16)		ePlant, Inc.
+				350 2nd St, STE 6
+				Los Altos  CA  94022
+				US
+
+8C-1F-64   (hex)		Canway Technology GmbH
+CDF000-CDFFFF     (base 16)		Canway Technology GmbH
+				Graf-Zeppelin-Ring 13
+				Ostbevern    48346
+				DE
+
+8C-1F-64   (hex)		Blik Sensing B.V.
+512000-512FFF     (base 16)		Blik Sensing B.V.
+				Duivenkamp 351
+				Maarssen    3607BB
+				NL
+
+8C-1F-64   (hex)		Pantherun Technologies Pvt Ltd
+CA1000-CA1FFF     (base 16)		Pantherun Technologies Pvt Ltd
+				311 6th main road Hal 2nd stage
+				Bangalore  Karnataka  560038
+				IN
+
+8C-1F-64   (hex)		Sirius LLC
+BEE000-BEEFFF     (base 16)		Sirius LLC
+				Suvorova street, 3A
+				Gubaha  Permskiy kray  618250
+				RU
+
+8C-1F-64   (hex)		INFRASAFE/ ADVANTOR SYSTEMS 
+971000-971FFF     (base 16)		INFRASAFE/ ADVANTOR SYSTEMS 
+				12612 CHALLENGER PARKWAY 
+				ORLANDO  FL  32826
+				US
+
+8C-1F-64   (hex)		Gogo Business Aviation
+CD8000-CD8FFF     (base 16)		Gogo Business Aviation
+				105 Edgeview Dr., Suite 300
+				Broomfield  CO  80021
+				US
+
+8C-1F-64   (hex)		Com Video Security Systems Co., Ltd.
+328000-328FFF     (base 16)		Com Video Security Systems Co., Ltd.
+				 No.1, Aly. 2, Ln. 2, Sec. 1, Minsheng N. Rd. Gueishan Dist.,
+				Taoyuan City     33391
+				TW
+
+8C-1F-64   (hex)		TimeMachines Inc.
+7B8000-7B8FFF     (base 16)		TimeMachines Inc.
+				300 S 68th Street Place, Suite 100
+				Lincoln  NE  68510
+				US
+
+8C-1F-64   (hex)		GJD Manufacturing
+A07000-A07FFF     (base 16)		GJD Manufacturing
+				Unit 2, Birch Business Park, Whittle Lane
+				Heywood    OL10 2SX
+				GB
+
+8C-1F-64   (hex)		HME Co.,ltd
+780000-780FFF     (base 16)		HME Co.,ltd
+				292,Nukata
+				Kuwana  Mie  511-0911
+				JP
+
+8C-1F-64   (hex)		Landinger
+256000-256FFF     (base 16)		Landinger
+				Thalkirchen 19
+				Bad Endorf  Bavaria  83093
+				DE
+
+70-B3-D5   (hex)		Tabology
+85C000-85CFFF     (base 16)		Tabology
+				4 Gleneagles Court
+				Wakefield  UK  WF6 1WW
+				GB
+
+8C-1F-64   (hex)		Potter Electric Signal Company
+57B000-57BFFF     (base 16)		Potter Electric Signal Company
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Fluid Components Intl
+A1D000-A1DFFF     (base 16)		Fluid Components Intl
+				1755 La Costa Meadows Drive
+				San Marcos  CA  92078
+				US
+
+8C-1F-64   (hex)		Porsche engineering
+DCA000-DCAFFF     (base 16)		Porsche engineering
+				Radlicka 714/113a
+				Praha 5    158 00
+				CZ
+
+8C-1F-64   (hex)		Recab Sweden AB
+8D4000-8D4FFF     (base 16)		Recab Sweden AB
+				Västberga Allé 5
+				Hägersten    126 30
+				SE
+
+70-B3-D5   (hex)		Nautel LTD
+EB0000-EB0FFF     (base 16)		Nautel LTD
+				10089 Peggy's Cove Road
+				Hackett's Cove  Nova Scotia  B3Z 3J4
+				CA
+
+8C-1F-64   (hex)		Institute of geophysics, China earthquake administration
+77E000-77EFFF     (base 16)		Institute of geophysics, China earthquake administration
+				NO.5 minzuaxue south road, haidian district, 
+				beijing     100000
+				CN
+
+8C-1F-64   (hex)		Jena-Optronik GmbH
+848000-848FFF     (base 16)		Jena-Optronik GmbH
+				Otto-Eppenstein-Strasse 3
+				Jena    07745
+				DE
+
+8C-1F-64   (hex)		Wilson Electronics
+38D000-38DFFF     (base 16)		Wilson Electronics
+				3301 E. Deseret Dr.
+				Saint George  UT  84790
+				US
+
+8C-1F-64   (hex)		Contrader
+F72000-F72FFF     (base 16)		Contrader
+				Via Dei Longobardi 9
+				Benevento  Benevento  82100
+				IT
+
+8C-1F-64   (hex)		Labforge Inc.
+D0E000-D0EFFF     (base 16)		Labforge Inc.
+				103 Bauer Pl, Suite 6
+				Waterloo  Ontario  N2L 6B5
+				CA
+
+8C-1F-64   (hex)		OAS AG
+707000-707FFF     (base 16)		OAS AG
+				Caroline-Herschel-Straße 1
+				Bremen  Deutschland  28359
+				DE
+
+8C-1F-64   (hex)		Breas Medical AB
+D40000-D40FFF     (base 16)		Breas Medical AB
+				Företagsvägen 1
+				Mölnlycke    SE-435 33
+				SE
+
+8C-1F-64   (hex)		Fracarro srl
+417000-417FFF     (base 16)		Fracarro srl
+				via Cazzaro 3
+				Castelfranco Veneto    31033
+				IT
+
+8C-1F-64   (hex)		Tongye lnnovation Science and Technology (Shenzhen) Co.,Ltd
+B8D000-B8DFFF     (base 16)		Tongye lnnovation Science and Technology (Shenzhen) Co.,Ltd
+				Room 7-004, 7 / F, Tianxia IC Industrial Park, 133 Yiyuan Road, Nanshan District, 
+				Shenzhen  Guangdong  518000
+				CN
+
+8C-1F-64   (hex)		Suzhou Motorcomm Electronic Technology Co., Ltd
+5AE000-5AEFFF     (base 16)		Suzhou Motorcomm Electronic Technology Co., Ltd
+				No.78 Keling Rd, Building 4, Room 201, SND
+				Suzhou  Jiangsu  215000
+				CN
+
+8C-1F-64   (hex)		Italora
+6CF000-6CFFFF     (base 16)		Italora
+				sitia yomo 4
+				Vernate  Milano  20080
+				IT
+
+8C-1F-64   (hex)		BELLCO TRADING COMPANY (PVT) LTD
+50A000-50AFFF     (base 16)		BELLCO TRADING COMPANY (PVT) LTD
+				DAR-U-SALAM ROAD NEAR ZXMCO MOTORCYCLES FACTORY, OFF RAIWAND ROAD,  23 KM FROM THOKAR NIAZ BAIG, LAHORE PAKISTAN
+				LAHORE  PUNJAB  55150
+				PK
+
+8C-1F-64   (hex)		ITS Teknik A/S
+E02000-E02FFF     (base 16)		ITS Teknik A/S
+				Skomagervej
+				Vejle    7100
+				DK
+
+8C-1F-64   (hex)		NETGEN HITECH SOLUTIONS LLP
+ED9000-ED9FFF     (base 16)		NETGEN HITECH SOLUTIONS LLP
+				B 301 KNOX PLAZA MALAD WEST
+				MUMBAI  MAHARASHTRA  400064
+				IN
+
+8C-1F-64   (hex)		Vekto
+4AC000-4ACFFF     (base 16)		Vekto
+				Televisieweg 75
+				Almere    1322AK
+				NL
+
+8C-1F-64   (hex)		Wolfspyre Labs
+9D4000-9D4FFF     (base 16)		Wolfspyre Labs
+				5007 Highland Ct #WPL-IEEE
+				Austin  TX  78731
+				US
+
+8C-1F-64   (hex)		IO Master Technology
+BD3000-BD3FFF     (base 16)		IO Master Technology
+				4F?1 No. 258, Lian  Cheng Rd, Zhong He Dist
+				New Taipei City 235  Taipei  235
+				TW
+
+8C-1F-64   (hex)		SpectraDynamics, Inc.
+581000-581FFF     (base 16)		SpectraDynamics, Inc.
+				1849 Cherry St.
+				Louisville  CO  80027
+				US
+
+8C-1F-64   (hex)		TIFLEX
+194000-194FFF     (base 16)		TIFLEX
+				10 Avenue de la 1ère Armée Française Rhin - Danube
+				PONCIN    01450
+				FR
+
+8C-1F-64   (hex)		ESCAD AUTOMATION GmbH
+05F000-05FFFF     (base 16)		ESCAD AUTOMATION GmbH
+				Escadstr. 1
+				Pfullendorf    88630
+				DE
+
+8C-1F-64   (hex)		Sichuan Aiyijan Technology Company Ltd.
+40C000-40CFFF     (base 16)		Sichuan Aiyijan Technology Company Ltd.
+				C1102 No. 65 Wuke West 1st Rd Wuhou District
+				Chengdu  Sichuan  61000
+				CN
+
+8C-1F-64   (hex)		Rapidev Pvt Ltd
+A44000-A44FFF     (base 16)		Rapidev Pvt Ltd
+				Office # G201-204 NSTP, NUST ISLAMABAD
+				ISLAMABAD  Islamabad Capital Territory  44000
+				PK
+
+8C-1F-64   (hex)		Opgal Optronic Industries ltd
+35C000-35CFFF     (base 16)		Opgal Optronic Industries ltd
+				Hanapach 11
+				Karmiel     2165317
+				IL
+
+8C-1F-64   (hex)		Alifax S.r.l.
+C24000-C24FFF     (base 16)		Alifax S.r.l.
+				VIA PETRARCA 2/1
+				POLVERARA  PD  35020
+				IT
+
+8C-1F-64   (hex)		Neuralog LP
+115000-115FFF     (base 16)		Neuralog LP
+				4800 Sugar Grove Blvd., Ste. 200
+				Stafford  TX  77479
+				US
+
+8C-1F-64   (hex)		Pietro Fiorentini Spa
+8D9000-8D9FFF     (base 16)		Pietro Fiorentini Spa
+				Via Armenia, 16
+				San Vito al Tagliamento (PN)    33078
+				IT
+
+8C-1F-64   (hex)		Flextronics International Kft
+A4C000-A4CFFF     (base 16)		Flextronics International Kft
+				Zrínyi Miklós str. 38.
+				Zalaegerszeg    8900
+				HU
+
+8C-1F-64   (hex)		Flextronics International Kft
+D02000-D02FFF     (base 16)		Flextronics International Kft
+				38. Zrinyi Str.
+				Zalaegerszeg  Zala  8900
+				HU
+
+8C-1F-64   (hex)		Autark GmbH
+943000-943FFF     (base 16)		Autark GmbH
+				Platz des Friedens 8
+				Baunatal  Hessen  D-34225
+				DE
+
+8C-1F-64   (hex)		VMukti Solutions Private Limited
+E30000-E30FFF     (base 16)		VMukti Solutions Private Limited
+				3-4, Shivalik Plaza, Panjrapole, Ambawadi
+				Ahmedabad  Gujarat  380015
+				IN
+
+8C-1F-64   (hex)		ACTELSER S.L.
+3F4000-3F4FFF     (base 16)		ACTELSER S.L.
+				CARRER ALBERT EINSTEIN, 44
+				TERRASSA  BARCELONA  08223
+				ES
+
+8C-1F-64   (hex)		Timegate Instruments Ltd.
+7A7000-7A7FFF     (base 16)		Timegate Instruments Ltd.
+				Tutkijantie 7
+				Oulu    90540
+				FI
+
+8C-1F-64   (hex)		GSP Sprachtechnologie GmbH
+FED000-FEDFFF     (base 16)		GSP Sprachtechnologie GmbH
+				Teltowkanalstraße 1
+				Berlin    12247
+				DE
+
+8C-1F-64   (hex)		Wartsila Voyage Limited
+38E000-38EFFF     (base 16)		Wartsila Voyage Limited
+				13-18 City Quay
+				Dublin 2    D02 ED70
+				IE
+
+8C-1F-64   (hex)		AZD Praha s.r.o., ZOZ Olomouc
+FA2000-FA2FFF     (base 16)		AZD Praha s.r.o., ZOZ Olomouc
+				Zeleznicni
+				Olomouc  czech republic  77900
+				CZ
+
+8C-1F-64   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
+52D000-52DFFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
+				10545 Hardin Valley Rd
+				Knoxville  TN  37932
+				US
+
+8C-1F-64   (hex)		Beijing Zhongchen Microelectronics Co.,Ltd
+AB4000-AB4FFF     (base 16)		Beijing Zhongchen Microelectronics Co.,Ltd
+				Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District
+				Beijing  Beijing  100081
+				CN
+
+8C-1F-64   (hex)		Toolplanet Co., Ltd.
+54F000-54FFFF     (base 16)		Toolplanet Co., Ltd.
+				43-2 Himigaike-cho
+				Gifu-shi  Gifu  500-8122
+				JP
+
+8C-1F-64   (hex)		AIDirections
+702000-702FFF     (base 16)		AIDirections
+				Torch Tower
+				Dubai  Dubai  74249
+				AE
+
+70-B3-D5   (hex)		Watteco
+E75000-E75FFF     (base 16)		Watteco
+				Rue Gutenberg
+				Hennebont  Brittany  56700
+				FR
+
+8C-1F-64   (hex)		Weidmann Tecnologia Electrica de Mexico
+7B7000-7B7FFF     (base 16)		Weidmann Tecnologia Electrica de Mexico
+				Oscar Flores Tapia No. 304, Col. El Llano
+				Arteaga   Coahuila  25350 
+				MX
+
+8C-1F-64   (hex)		Ashinne Technology Co., Ltd
+E7C000-E7CFFF     (base 16)		Ashinne Technology Co., Ltd
+				10F-1, No.18, Lane 609, Sec.5, Chung Hsin Rd., San Chung Dist.
+				New Taipei City    241
+				TW
+
+8C-1F-64   (hex)		Forever Engineering Systems Pvt. Ltd.
+AC5000-AC5FFF     (base 16)		Forever Engineering Systems Pvt. Ltd.
+				B-817, 8th floor, Advant Navis Business Park, Sector-142
+				NOIDA  Uttar Pradesh  201301
+				IN
+
+8C-1F-64   (hex)		AMESS
+EEA000-EEAFFF     (base 16)		AMESS
+				C-1501, 60, Haan-ro
+				Gwangmyeong-si  Gyeonggi-do  14322
+				KR
+
+8C-1F-64   (hex)		EVERNET CO,.LTD TAIWAN
+B7C000-B7CFFF     (base 16)		EVERNET CO,.LTD TAIWAN
+				12 F., No. 206-2, Sec. 2, Daxing W. Rd
+				Taoyuan  Taiwan   330
+				TW
+
+8C-1F-64   (hex)		Farmote Limited
+017000-017FFF     (base 16)		Farmote Limited
+				92 Collingwood Street, Nelson
+				Nelson  Nelson  7010
+				NZ
+
+8C-1F-64   (hex)		e.p.g. Elettronica s.r.l.
+3D4000-3D4FFF     (base 16)		e.p.g. Elettronica s.r.l.
+				Via della Crocetta 3
+				Oltrona di San Mamette  Como (CO)  22070
+				IT
+
+8C-1F-64   (hex)		Stratis IOT
+3C5000-3C5FFF     (base 16)		Stratis IOT
+				4230 Main Street
+				Philadelphia  PA  19127
+				US
+
+8C-1F-64   (hex)		Twinleaf LLC
+080000-080FFF     (base 16)		Twinleaf LLC
+				300 Deer Creek DriveSuite 300
+				Plainsboro  NJ  08536
+				US
+
+8C-1F-64   (hex)		FMTec GmbH - Future Management Technologies
+3E3000-3E3FFF     (base 16)		FMTec GmbH - Future Management Technologies
+				Austraße 59e
+				Bludenz  Austria  6700
+				AT
+
+8C-1F-64   (hex)		Genius Vision Digital Private Limited
+CC6000-CC6FFF     (base 16)		Genius Vision Digital Private Limited
+				S-39, GF JANTA MARKET, RAJOURI GARDEN,NEW DELHI - 110027
+				new delhi  new delhi  110027
+				IN
+
+8C-1F-64   (hex)		AVCOMM Technologies Inc
+1F0000-1F0FFF     (base 16)		AVCOMM Technologies Inc
+				333 West Loop N FreewaySuite 460
+				Houston  TX  77024-7338
+				US
+
+8C-1F-64   (hex)		Tinkerbee Innovations Private Limited
+544000-544FFF     (base 16)		Tinkerbee Innovations Private Limited
+				#677, 1st Floor, 27th Main, 13th Cross Road,HSR Layout, Sector 1
+				Bengaluru  Karnataka  560102
+				IN
+
+8C-1F-64   (hex)		Abode Systems Inc
+B13000-B13FFF     (base 16)		Abode Systems Inc
+				2625 Middlefield Road
+				Palo Alto  CA  94306
+				US
+
+8C-1F-64   (hex)		GO development GmbH
+7BC000-7BCFFF     (base 16)		GO development GmbH
+				Zeppelinstraße 126
+				Esslingen am Neckar    73730
+				DE
+
+8C-1F-64   (hex)		Season Electronics Ltd
+6BB000-6BBFFF     (base 16)		Season Electronics Ltd
+				600 Nest Business Park 
+				Havant  Hampshire  PO9 5TL
+				GB
+
+8C-1F-64   (hex)		Integer.pl S.A.
+D5E000-D5EFFF     (base 16)		Integer.pl S.A.
+				Wielicka 28
+				Krakow    30-552
+				PL
+
+8C-1F-64   (hex)		Ear Micro LLC
+58C000-58CFFF     (base 16)		Ear Micro LLC
+				4043 Broadway
+				Kansas City  MO  64111
+				US
+
+8C-1F-64   (hex)		DAVE SRL
+0EF000-0EFFFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+8C-1F-64   (hex)		Breas Medical AB
+98F000-98FFFF     (base 16)		Breas Medical AB
+				Företagsvägen 1
+				Mölnlycke    SE-435 33
+				SE
+
+8C-1F-64   (hex)		Suzhou Leamore Optronics Co., Ltd.
+662000-662FFF     (base 16)		Suzhou Leamore Optronics Co., Ltd.
+				Block 12-301, NO 99 Jinji Lake Road, Suzhou Industrial Park, Suzhou
+				Suzhou  Jiangsu   215000
+				CN
+
+8C-1F-64   (hex)		Loadrite (Auckland) Limited
+8F4000-8F4FFF     (base 16)		Loadrite (Auckland) Limited
+				45 Patiki road, Avondale
+				Auckland  Auckland  1026
+				NZ
+
+8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
+300000-300FFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo    0504
+				NO
+
+8C-1F-64   (hex)		Bit Trade One, Ltd.
+6EC000-6ECFFF     (base 16)		Bit Trade One, Ltd.
+				5-1-23 Kamimizo, Chuo-ku
+				Sagamihara City   Kanagawa Prefecture  2520243
+				JP
+
+8C-1F-64   (hex)		AVA Monitoring AB
+28D000-28DFFF     (base 16)		AVA Monitoring AB
+				Vädursgatan 6
+				Göteborg  Västra götaland  412 50
+				SE
+
+8C-1F-64   (hex)		Private
+E2D000-E2DFFF     (base 16)		Private
+
+8C-1F-64   (hex)		MECT SRL
+309000-309FFF     (base 16)		MECT SRL
+				VIA E. FERMI 57/59
+				ALPIGNANO    10091
+				IT
+
+70-B3-D5   (hex)		BAE Systems Apllied Intelligence
+1D7000-1D7FFF     (base 16)		BAE Systems Apllied Intelligence
+				170 Waterside House
+				Guildford  Surrey  GU2 7RQ
+				GB
+
+8C-1F-64   (hex)		Avionica 
+6A0000-6A0FFF     (base 16)		Avionica 
+				9941 West Jessamine St
+				Miami   FL  33157 
+				US
+
+8C-1F-64   (hex)		Elix Systems SA
+66F000-66FFFF     (base 16)		Elix Systems SA
+				Route de Chavannes 9
+				Lausanne    1007
+				CH
+
+8C-1F-64   (hex)		Northwest Central Indiana Community Partnerships Inc dba Wabash Heartland Innovation Network (WHIN)
+EF8000-EF8FFF     (base 16)		Northwest Central Indiana Community Partnerships Inc dba Wabash Heartland Innovation Network (WHIN)
+				1281 Win Hentschel BlvdSuite 2161
+				West Lafayette  IN  47906
+				US
+
+8C-1F-64   (hex)		biosilver .co.,ltd
+34D000-34DFFF     (base 16)		biosilver .co.,ltd
+				2-14-4, shinyokohama
+				yokohama  kanagawa  2220033
+				JP
+
+8C-1F-64   (hex)		Arcus-EDS GmbH
+698000-698FFF     (base 16)		Arcus-EDS GmbH
+				Rigaer Str. 88
+				Berlin  Berlin  10247
+				DE
+
+8C-1F-64   (hex)		EUREKA FOR SMART PROPERTIES CO. W.L.L
+CEB000-CEBFFF     (base 16)		EUREKA FOR SMART PROPERTIES CO. W.L.L
+				Office 11, Building 288C, Avenue 16, Hidd Block 111
+				Hidd     111
+				BH
+
+8C-1F-64   (hex)		TEX COMPUTER SRL 
+3B6000-3B6FFF     (base 16)		TEX COMPUTER SRL 
+				Via O. Respighi 13
+				CATTOLICA   RIMINI   47841
+				IT
+
+8C-1F-64   (hex)		Vision Systems Safety Tech
+F70000-F70FFF     (base 16)		Vision Systems Safety Tech
+				5 Chemin de Chiradie
+				Brignais    69530
+				FR
+
+8C-1F-64   (hex)		Cedel BV
+314000-314FFF     (base 16)		Cedel BV
+				Portugallaan 5
+				Assen    9403DR
+				NL
+
+8C-1F-64   (hex)		FIDICA GmbH & Co. KG
+699000-699FFF     (base 16)		FIDICA GmbH & Co. KG
+				Frohnradstr. 7-9
+				Hösbach    63768
+				DE
+
+8C-1F-64   (hex)		Dyncir Soluções Tecnológicas Ltda
+CB2000-CB2FFF     (base 16)		Dyncir Soluções Tecnológicas Ltda
+				Av. BPS, 1303, Predio J3, Sala 6
+				Itajubá  MG  37500-185
+				BR
+
+70-B3-D5   (hex)		KSE GmbH
+0F6000-0F6FFF     (base 16)		KSE GmbH
+				Kaethe Paulus Strasse 6
+				Koesching    85092
+				DE
+
+8C-1F-64   (hex)		A&T Corporation
+BCB000-BCBFFF     (base 16)		A&T Corporation
+				2023-1
+				Endo, Fujisawa, Kanagawa    252-0816
+				JP
+
+8C-1F-64   (hex)		ehoosys Co.,LTD.
+731000-731FFF     (base 16)		ehoosys Co.,LTD.
+				148, Gongdan-ro, Gunpo-si, Gyeonggi-do, Republic of Korea
+				Gunpo-si  Gyeonggi-do  15845
+				KR
+
+70-B3-D5   (hex)		Ecolonum Inc.
+30E000-30EFFF     (base 16)		Ecolonum Inc.
+				456 Morimae Itozawa
+				Minamiaizu  Minamiaizu-gun Fukushima  9670014
+				JP
+
+8C-1F-64   (hex)		HUERNER Schweisstechnik GmbH
+F2D000-F2DFFF     (base 16)		HUERNER Schweisstechnik GmbH
+				Nieder-Ohmener Str. 26
+				Muecke    35325
+				DE
+
+8C-1F-64   (hex)		Soehnle Industrial Solutions GmbH
+C91000-C91FFF     (base 16)		Soehnle Industrial Solutions GmbH
+				Gaildorfer Strasse 6
+				Backnang    71522
+				DE
+
+8C-1F-64   (hex)		SOLIDpower SpA
+02F000-02FFFF     (base 16)		SOLIDpower SpA
+				viale Trento 115/117
+				Mezzolombardo  Trento  38017
+				IT
+
+8C-1F-64   (hex)		Hirotech inc.
+7A4000-7A4FFF     (base 16)		Hirotech inc.
+				Shinyokohama I/O Bldg, 1-3-10 Shinyokohama, Kohoku-ku
+				Yokohama City  Kanagawa  2220033
+				JP
+
+8C-1F-64   (hex)		Voyage Audio LLC
+F22000-F22FFF     (base 16)		Voyage Audio LLC
+				3555 Rosecrans St, Suite #114-491
+				San Diego  CA  92110
+				US
+
+8C-1F-64   (hex)		enlighten
+91D000-91DFFF     (base 16)		enlighten
+				396,Seocho-daero, seocho-gu, seoul, 06619
+				KR    06619
+				KR
+
+8C-1F-64   (hex)		Forever Engineering Systems Pvt. Ltd.
+867000-867FFF     (base 16)		Forever Engineering Systems Pvt. Ltd.
+				B-817, 8th floor, Advant Navis Business Park, Sector-142
+				NOIDA  Uttar Pradesh  201301
+				IN
+
+8C-1F-64   (hex)		MESA TECHNOLOGIES LLC
+4FB000-4FBFFF     (base 16)		MESA TECHNOLOGIES LLC
+				5801 DIERKER DR
+				HOUSTON  TX  77041-6214
+				US
+
+8C-1F-64   (hex)		Alphatek AS
+BF3000-BF3FFF     (base 16)		Alphatek AS
+				Andreas Harestads vei 30
+				Randaberg  Rogaland  4070 
+				NO
+
+8C-1F-64   (hex)		Ingenious Technology LLC
+573000-573FFF     (base 16)		Ingenious Technology LLC
+				111 Deerwood Road, Suite 200
+				San Ramon  CA  94583
+				US
+
+70-B3-D5   (hex)		Wise Ally Holdings Limited
+A31000-A31FFF     (base 16)		Wise Ally Holdings Limited
+				Unit 3203-3207 , Tower 1 , Enterprise Square Five , 38 Wang Chiu Road
+				Hong Kong  Kowloon Bay  852
+				HK
+
+8C-1F-64   (hex)		Mark Roberts Motion Control
+2E2000-2E2FFF     (base 16)		Mark Roberts Motion Control
+				UNIT 3 SOUTH EAST STUDIOS  EASTBOURNE ROAD
+				LINGFIELD    RH7 6JP
+				GB
+
+8C-1F-64   (hex)		Beijing Ceresdate Technology Co.,LTD
+C61000-C61FFF     (base 16)		Beijing Ceresdate Technology Co.,LTD
+				Tower B 2th FI., Bldg.12,(East Zone) No.10 Xibeiwangdong Road, Haidian District
+				Beijing  Beijing  100193
+				CN
+
+8C-1F-64   (hex)		Beijing Zhongzhi Huida Technology Co., Ltd
+610000-610FFF     (base 16)		Beijing Zhongzhi Huida Technology Co., Ltd
+				302,floor 3,building 2,No.15 Guanghua Road,Chaoyang District
+				Beijing  Beijing  100026
+				CN
+
+8C-1F-64   (hex)		Spectrum FiftyNine BV
+145000-145FFF     (base 16)		Spectrum FiftyNine BV
+				Middelweg 8a
+				Molenhoek  Limb  6584ah
+				NL
+
+8C-1F-64   (hex)		GREDMANN TAIWAN LTD.
+FCC000-FCCFFF     (base 16)		GREDMANN TAIWAN LTD.
+				9F., No. 170, Sec. 3, Minquan E. Rd., Songshan Dist.
+				Taipei City    105603
+				TW
+
+8C-1F-64   (hex)		Optimum Instruments Inc.
+A9E000-A9EFFF     (base 16)		Optimum Instruments Inc.
+				#201, 3132 Parsons Road NW
+				Edmonton  Alberta  T6N1L6
+				CA
+
+8C-1F-64   (hex)		Shin Nihon Denshi Co., Ltd.
+024000-024FFF     (base 16)		Shin Nihon Denshi Co., Ltd.
+				6-18-17 Naruse
+				Machida-shi  Tokyo  194-0044
+				JP
+
+8C-1F-64   (hex)		VisionTools Bildanalyse Systeme GmbH
+86A000-86AFFF     (base 16)		VisionTools Bildanalyse Systeme GmbH
+				Heinrich-Hertz-Straße 7
+				Waghäusel  Baden-Württemberg  68753
+				DE
+
+8C-1F-64   (hex)		Noptel Oy
+931000-931FFF     (base 16)		Noptel Oy
+				Teknologiantie 2
+				Oulu    90590
+				FI
+
+8C-1F-64   (hex)		DEUTA-WERKE GmbH
+011000-011FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Evident Scientific, Inc.
+5D9000-5D9FFF     (base 16)		Evident Scientific, Inc.
+				48 Woerd Ave
+				Waltham  MA  02453
+				US
+
+8C-1F-64   (hex)		LYNKX
+EE6000-EE6FFF     (base 16)		LYNKX
+				776 route du balcon
+				Les Adrets    38190
+				FR
+
+8C-1F-64   (hex)		ANDA TELECOM PVT LTD
+406000-406FFF     (base 16)		ANDA TELECOM PVT LTD
+				E-36 Amar Colony, Lajpat Nagar, New Delhi
+				New Delhi  Delhi  110024
+				IN
+
+8C-1F-64   (hex)		Chakra Technology Ltd
+2BB000-2BBFFF     (base 16)		Chakra Technology Ltd
+				7F, NO. 93, SHUEI YUAN RD.
+				, TAIPEI,   TAIWAN  100
+				TW
+
+8C-1F-64   (hex)		Unimar, Inc.
+2FC000-2FCFFF     (base 16)		Unimar, Inc.
+				3195 Vickery Road
+				North Syracuse  NY  13212
+				US
+
+8C-1F-64   (hex)		PolCam Systems Sp. z o.o.
+5FA000-5FAFFF     (base 16)		PolCam Systems Sp. z o.o.
+				Plutonu Torpedy 27A
+				Warsaw  Mazovia  02-495
+				PL
+
+8C-1F-64   (hex)		Header Rhyme
+9C0000-9C0FFF     (base 16)		Header Rhyme
+				C401, 410, Jeongseojin-ro
+				Incheon  Incheon  22689
+				KR
+
+8C-1F-64   (hex)		AI-BLOX
+3B7000-3B7FFF     (base 16)		AI-BLOX
+				Ikaroslaan 1
+				Zaventem    1930
+				BE
+
+8C-1F-64   (hex)		Wende Tan
+691000-691FFF     (base 16)		Wende Tan
+				FIT 1-213, Tsinghua University
+				Beijing    100084
+				CN
+
+8C-1F-64   (hex)		HomyHub SL
+B65000-B65FFF     (base 16)		HomyHub SL
+				Sierra de Atapuerca 13Correos Labs
+				MADRID  Madrid  28050
+				ES
+
+8C-1F-64   (hex)		CI SYSTEMS ISRAEL LTD
+9FB000-9FBFFF     (base 16)		CI SYSTEMS ISRAEL LTD
+				HaMehkar St 6
+				 Migdal HaEmek    2306990
+				IL
+
+8C-1F-64   (hex)		Tunstall A/S
+C59000-C59FFF     (base 16)		Tunstall A/S
+				Niels Bohrs vej 42
+				Stilling  Skanderborg  8660
+				DK
+
+8C-1F-64   (hex)		XTIA Ltd.
+A5E000-A5EFFF     (base 16)		XTIA Ltd.
+				IS Bld.2F, Higashi-shinagawa 3-32-42 
+				Shinagawa-Ku  Tokyo  140-0002
+				JP
+
+8C-1F-64   (hex)		Embeddded Plus Plus
+62D000-62DFFF     (base 16)		Embeddded Plus Plus
+				Filmbyen 23, 2. tv.
+				Aarhus C    8000
+				DK
+
+8C-1F-64   (hex)		Nuphoton Technologies
+FDC000-FDCFFF     (base 16)		Nuphoton Technologies
+				41610 CORNING PLACE
+				MURRIETA  CA  92562
+				US
+
+8C-1F-64   (hex)		Alpha Bridge Technologies Private Limited
+20E000-20EFFF     (base 16)		Alpha Bridge Technologies Private Limited
+				T5-1001, Parsvnath Green Ville, Sector 48 , Sohna Road 
+				Gurgaon  Haryana  122018
+				IN
+
+8C-1F-64   (hex)		Potter Electric Signal Co. LLC
+CC5000-CC5FFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+8C-1F-64   (hex)		Monnit Corporation
+ECF000-ECFFFF     (base 16)		Monnit Corporation
+				450 South Simmons STE 670
+				Kaysville  UT  84037
+				US
+
+8C-1F-64   (hex)		LINEAGE POWER PVT LTD.,
+7DC000-7DCFFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+8C-1F-64   (hex)		Gnewtek photoelectric technology Ltd.
+D98000-D98FFF     (base 16)		Gnewtek photoelectric technology Ltd.
+				No. 238-15, Ln. 220, Sec. 1, Minyi Rd., Wugu Dist., New Taipei City 248 , Taiwan (R.O.C.)
+				NEW TAIPEI CITY    248
+				TW
+
+8C-1F-64   (hex)		Alpine Quantum Technologies GmbH
+475000-475FFF     (base 16)		Alpine Quantum Technologies GmbH
+				Technikerstrasse 17/1
+				Innsbruck    6020
+				AT
+
+8C-1F-64   (hex)		TIAMA
+63B000-63BFFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+8C-1F-64   (hex)		TIAMA
+0B7000-0B7FFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+70-B3-D5   (hex)		TIAMA
+4BC000-4BCFFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+70-B3-D5   (hex)		TIAMA
+8BA000-8BAFFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+8C-1F-64   (hex)		Sanwa Supply Inc.
+06B000-06BFFF     (base 16)		Sanwa Supply Inc.
+				1-10-1 Tamachi Kita-ku
+				Okayama  Okayama Prefecture  700-0825
+				JP
+
+8C-1F-64   (hex)		Planet Innovation Products Inc.
+978000-978FFF     (base 16)		Planet Innovation Products Inc.
+				80 Technology Dr.
+				Irvine  CA  92618
+				US
+
+8C-1F-64   (hex)		TR7 Siber Savunma A.S.
+F5F000-F5FFFF     (base 16)		TR7 Siber Savunma A.S.
+				Bilkent Cyberpark 3/106 Çankaya
+				Ankara  TR  06800
+				TR
+
+8C-1F-64   (hex)		Bipom Electronics, Inc.
+211000-211FFF     (base 16)		Bipom Electronics, Inc.
+				9788 Clarewood Dr. 306
+				Houston  TX  77036
+				US
+
+8C-1F-64   (hex)		Adasky Ltd.
+71B000-71BFFF     (base 16)		Adasky Ltd.
+				7 Hamada Street
+				Yokneam Illit     2069206
+				IL
+
+8C-1F-64   (hex)		NanoThings Inc.
+1F5000-1F5FFF     (base 16)		NanoThings Inc.
+				1460 Broadway, Suite 14034
+				New York  NY  10036
+				US
+
+8C-1F-64   (hex)		Europe Trade
+636000-636FFF     (base 16)		Europe Trade
+				LUGAR SALTO LOBO
+				RIANXO  LA CORUÑA  15920
+				ES
+
+70-B3-D5   (hex)		RF Code
+94B000-94BFFF     (base 16)		RF Code
+				9229 Waterford Centre Blvd #500
+				Austin  TX  78758
+				US
+
+8C-1F-64   (hex)		ZIGEN Lighting Solution co., ltd.
+D51000-D51FFF     (base 16)		ZIGEN Lighting Solution co., ltd.
+				1-3-10 Hachihonmatsuminami
+				Higashihiroshima  Hiroshima  7390144
+				JP
+
+8C-1F-64   (hex)		Grossenbacher Systeme AG
+8DF000-8DFFFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+8C-1F-64   (hex)		Shenyang Taihua Technology Co., Ltd.
+32B000-32BFFF     (base 16)		Shenyang Taihua Technology Co., Ltd.
+				No. 33-48, Quanyun Fifth Road, Hunnan District
+				Shenyang City  Liaoning Province  110179
+				CN
+
+8C-1F-64   (hex)		Sicon srl
+907000-907FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+D42000-D42FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		Hiwin Mikrosystem Corp.
+423000-423FFF     (base 16)		Hiwin Mikrosystem Corp.
+				NO 6 JINGKE CENTRAL RD  TAICHUNG CITY TAIWAN 40841
+				TAICHUNG    40841
+				TW
+
+8C-1F-64   (hex)		AMETEK CTS GMBH
+D21000-D21FFF     (base 16)		AMETEK CTS GMBH
+				Sternenhofstrasse 15
+				Reinach  BL  4153
+				CH
+
+8C-1F-64   (hex)		3D perception AS
+A81000-A81FFF     (base 16)		3D perception AS
+				Nye Vakas vei 14
+				Hvalstad    1395
+				NO
+
+8C-1F-64   (hex)		Power Electronics Espana, S.L.
+0D8000-0D8FFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+8C-1F-64   (hex)		joint analytical systems GmbH
+31B000-31BFFF     (base 16)		joint analytical systems GmbH
+				Carl-Zeiss-Str. 49
+				Moers  NRW  47445
+				DE
+
+8C-1F-64   (hex)		Midlands Technical Co., Ltd.
+DD4000-DD4FFF     (base 16)		Midlands Technical Co., Ltd.
+				1-29-4 5F Takadanobaba
+				shinjyuku-ku  Tokyo  169-0075
+				JP
+
+70-B3-D5   (hex)		System West dba ICS Electronics
+E06000-E06FFF     (base 16)		System West dba ICS Electronics
+				7034 Commerce Circle Suite A
+				Pleasanton  CA  94588
+				US
+
+70-B3-D5   (hex)		Nevotek
+358000-358FFF     (base 16)		Nevotek
+				5201 Great America Pkwy ste 320
+				Santa Clara  CA  95054
+				US
+
+70-B3-D5   (hex)		Arctos Showlasertechnik GmbH
+D02000-D02FFF     (base 16)		Arctos Showlasertechnik GmbH
+				Sägewerkstraße 16
+				Saaldorf-Surheim  Bavaria  83416
+				DE
+
+70-B3-D5   (hex)		Gremesh.com
+218000-218FFF     (base 16)		Gremesh.com
+				Beursplein 37
+				Rotterdam  Zuid-Holland  3011 AA
+				NL
+
+70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau AG
+5B2000-5B2FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
+				Werner-von-Siemens-Str. 1
+				Offenburg  Ba-Wue  77656
+				DE
+
+70-B3-D5   (hex)		Private
+FFF000-FFFFFF     (base 16)		Private
+
+70-B3-D5   (hex)		SENSO2ME 
+BC0000-BC0FFF     (base 16)		SENSO2ME 
+				Lange Gasthiuisstraat 29
+				ANTWERP  Antwerp  2000
+				BE
+
+70-B3-D5   (hex)		JLCooper Electronics
+8EA000-8EAFFF     (base 16)		JLCooper Electronics
+				142 Arena St
+				El Segundo  CA  90245
+				US
+
+70-B3-D5   (hex)		R Cubed Engineering, LLC
+C59000-C59FFF     (base 16)		R Cubed Engineering, LLC
+				705 10th Ave W unit 102
+				Palmetto    34221
+				US
+
+70-B3-D5   (hex)		Rotem Industry LTD
+B65000-B65FFF     (base 16)		Rotem Industry LTD
+				Rotem Industrial Park
+				Mishor Rotem  D.N. Arava  8680600
+				IL
+
+70-B3-D5   (hex)		The Dini Group, La Jolla inc.
+83E000-83EFFF     (base 16)		The Dini Group, La Jolla inc.
+				7469 Draper Ave.
+				La Jolla  CA  92037
+				US
+
+70-B3-D5   (hex)		Metralight, Inc.
+DC1000-DC1FFF     (base 16)		Metralight, Inc.
+				533 Airport Blvd., #400
+				Burlingame  CA  94010
+				US
+
+70-B3-D5   (hex)		Gateview Technologies
+A70000-A70FFF     (base 16)		Gateview Technologies
+				 104 White St #201
+				Wake Forest    27587
+				US
+
+70-B3-D5   (hex)		Selex ES Inc.
+521000-521FFF     (base 16)		Selex ES Inc.
+				4221 Tudor Lane
+				Greensboro  NC  27410
+				US
+
+70-B3-D5   (hex)		Operational Technology Solutions
+4D6000-4D6FFF     (base 16)		Operational Technology Solutions
+				Level 10 555 Lonsdale Street
+				Melbourne  Victoria  3000
+				AU
+
+70-B3-D5   (hex)		Laborie
+337000-337FFF     (base 16)		Laborie
+				6415 Northwest Drive, Unit 2
+				Mississauga  Ontario  L4V1X1
+				CA
+
+70-B3-D5   (hex)		ENS Engineered Network Systems
+983000-983FFF     (base 16)		ENS Engineered Network Systems
+				14451 Ewing Ave. Suite 100
+				Burnsville  MN  55306
+				US
+
+70-B3-D5   (hex)		JSC VIST Group 
+A8A000-A8AFFF     (base 16)		JSC VIST Group 
+				Dokuchaev lane, 3, bld. 1, attic, premise 1, room 14
+				Moscow    107078
+				RU
+
+70-B3-D5   (hex)		Legrand Electric Ltd
+093000-093FFF     (base 16)		Legrand Electric Ltd
+				Unit 10 Cowley Road
+				Blyth  Northumberland  NE24 5TF
+				GB
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+4A4000-4A4FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
+B58000-B58FFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
+				Sector Foresta 43, local 26
+				Tres Cantos  Madrid  28760
+				ES
+
+70-B3-D5   (hex)		Sicon srl
+D49000-D49FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Syscom Instruments SA
+BE7000-BE7FFF     (base 16)		Syscom Instruments SA
+				industrie 21
+				Sainte-Croix    1450
+				CH
+
+70-B3-D5   (hex)		AutomationX GmbH
+CD7000-CD7FFF     (base 16)		AutomationX GmbH
+				Lauzilgasse 13
+				Graz  Styria  8020
+				AT
+
+70-B3-D5   (hex)		Onethinx BV
+068000-068FFF     (base 16)		Onethinx BV
+				Punterweg 2
+				Zwolle  OV  8042 PB
+				NL
+
+70-B3-D5   (hex)		Private
+401000-401FFF     (base 16)		Private
+
+70-B3-D5   (hex)		Alpha ESS Co., Ltd.
+7A2000-7A2FFF     (base 16)		Alpha ESS Co., Ltd.
+				JiuHua Road 888, Nantong High-Tech Industrial Development Zone,
+				Nantong  Jiangsu  226300
+				CN
+
+70-B3-D5   (hex)		NTO IRE-POLUS
+6FE000-6FEFFF     (base 16)		NTO IRE-POLUS
+				Akademika Vvedenskogo 1/2
+				Fryazino    141190
+				RU
+
+70-B3-D5   (hex)		microtec Sicherheitstechnik GmbH
+DFE000-DFEFFF     (base 16)		microtec Sicherheitstechnik GmbH
+				Auf der Langwies 20
+				Hünstetten    65510
+				DE
+
+70-B3-D5   (hex)		FRESENIUS MEDICAL CARE
+4CC000-4CCFFF     (base 16)		FRESENIUS MEDICAL CARE
+				496 So. Abbott Ave
+				Milpitas  CA  95035
+				US
+
+70-B3-D5   (hex)		OHASHI ENGINEERING CO.,LTD.
+556000-556FFF     (base 16)		OHASHI ENGINEERING CO.,LTD.
+				1-471-8 TOYONODAI
+				KAZO-CITY  SAITAMA  349-1148
+				JP
+
+70-B3-D5   (hex)		JIANGSU HORAINTEL CO.,LTD
+D8A000-D8AFFF     (base 16)		JIANGSU HORAINTEL CO.,LTD
+				32 Buidling R&D Center, No.99 Chuqiao Road
+				ZHENJIANG   JIANGSU  212009
+				CN
+
+70-B3-D5   (hex)		AVA Monitoring AB
+31D000-31DFFF     (base 16)		AVA Monitoring AB
+				Vädursgatan 6
+				Göteborg  Västra götaland  412 50
+				SE
+
+70-B3-D5   (hex)		PAL Inc.
+05B000-05BFFF     (base 16)		PAL Inc.
+				2217-2 Hayashicho
+				Takamatsu  Kagawa  7610301
+				JP
+
+70-B3-D5   (hex)		TimeMachines Inc.
+5A6000-5A6FFF     (base 16)		TimeMachines Inc.
+				300 S 68th Street Place, Suite 100
+				Lincoln  NE  68510
+				US
+
+70-B3-D5   (hex)		Cobo, Inc.
+EAD000-EADFFF     (base 16)		Cobo, Inc.
+				3624 Alta Vista Avenue
+				Santa Rosa  CA  95409
+				US
+
+70-B3-D5   (hex)		Discover Battery
+6F1000-6F1FFF     (base 16)		Discover Battery
+				#4 - 13511 Crestwood Place
+				Richmond  BC  v6v 2e9
+				CA
+
+70-B3-D5   (hex)		Itronics Ltd
+9B7000-9B7FFF     (base 16)		Itronics Ltd
+				8a Triton Dr, Rosedale
+				Auckland    0632
+				NZ
+
+70-B3-D5   (hex)		Tapdn
+FDC000-FDCFFF     (base 16)		Tapdn
+				840 Apollo St Suite 100
+				El Segundo  CA  90245
+				US
+
+70-B3-D5   (hex)		Controlled Power Company
+BA8000-BA8FFF     (base 16)		Controlled Power Company
+				1955 Stephenston Hwy
+				Troy  MI  48083
+				US
+
+70-B3-D5   (hex)		Editech Co., Ltd
+79D000-79DFFF     (base 16)		Editech Co., Ltd
+				284, Gongdan-ro
+				Gunpo-si  Gyeonggi-do  15809
+				KR
+
+70-B3-D5   (hex)		Talleres de Escoriaza SA
+C08000-C08FFF     (base 16)		Talleres de Escoriaza SA
+				Barrio Ventas, 35
+				Irun  Gipuzkoa  20305
+				ES
+
+70-B3-D5   (hex)		Gamber Johnson-LLC
+DBC000-DBCFFF     (base 16)		Gamber Johnson-LLC
+				3001 Borham Ave
+				Stevens Point  WI  54481
+				US
+
+70-B3-D5   (hex)		Niron systems & Projects
+FED000-FEDFFF     (base 16)		Niron systems & Projects
+				PO Box 8546
+				Netania    4250407
+				IL
+
+70-B3-D5   (hex)		Nubewell Networks Pvt Ltd
+61B000-61BFFF     (base 16)		Nubewell Networks Pvt Ltd
+				1242, Ground Floor, 4th Main, 4th Cross, BTM 4th stage, 1st Block, Deverachikkanahalli
+				Bangalore  Karnataka  560076
+				IN
+
+70-B3-D5   (hex)		Paratec Ltd.
+AEC000-AECFFF     (base 16)		Paratec Ltd.
+				P.O.Box 3574
+				Haifa    3103402
+				IL
+
+70-B3-D5   (hex)		Slan
+788000-788FFF     (base 16)		Slan
+				11 rue de la Senette
+				Carrieres sous Poissy    78955
+				FR
+
+70-B3-D5   (hex)		EGISTECH CO.,LTD.
+603000-603FFF     (base 16)		EGISTECH CO.,LTD.
+				611 2Dong 98, Gasan digital 2-ro
+				Geumcheon-gu  Seoul  08506
+				KR
+
+70-B3-D5   (hex)		Nippon Marine Enterprises, Ltd.
+533000-533FFF     (base 16)		Nippon Marine Enterprises, Ltd.
+				14-1, Ogawa-cho
+				Yokosuka  Kanagawa  2380004
+				JP
+
+70-B3-D5   (hex)		Aethera Technologies
+9B9000-9B9FFF     (base 16)		Aethera Technologies
+				63 Crane Lake Drive
+				Halifax  NS  B3S 1B5
+				CA
+
+70-B3-D5   (hex)		hiSky S.C.S LTD
+2E1000-2E1FFF     (base 16)		hiSky S.C.S LTD
+				24 Ammal
+				Rosh Hain    4809268
+				IL
+
+70-B3-D5   (hex)		QuestHouse, Inc.
+84B000-84BFFF     (base 16)		QuestHouse, Inc.
+				Rm 204, 5 B/D, 20 Techno 1-ro, Yuseong-gu
+				Daejeon    34016
+				KR
+
+70-B3-D5   (hex)		Insitu Inc.
+D36000-D36FFF     (base 16)		Insitu Inc.
+				901 E Bingen Point Way
+				Bingen  WA  98605
+				US
+
+00-1B-C5   (hex)		Private
+0B8000-0B8FFF     (base 16)		Private
+
+70-B3-D5   (hex)		Dat-Con d.o.o.
+CDC000-CDCFFF     (base 16)		Dat-Con d.o.o.
+				Cvetlična ulica 52
+				Polzela    3313
+				SI
+
+70-B3-D5   (hex)		MICRO DEBUG, Y.K.
+020000-020FFF     (base 16)		MICRO DEBUG, Y.K.
+				5-18-15 Oowada-cho
+				hachiouji  Tokyo  192-0045
+				JP
+
+70-B3-D5   (hex)		amakidenki
+9FD000-9FDFFF     (base 16)		amakidenki
+				m.okuyama@amaki.co.jp
+				higashiyamatoshi  tokyo  207-0004
+				JP
+
+70-B3-D5   (hex)		OSMOZIS
+A9B000-A9BFFF     (base 16)		OSMOZIS
+				7 AVENUE DE L'EUROPE
+				CLAPIERS  LANGUEDOC ROUSSSILLON  34830
+				FR
+
+70-B3-D5   (hex)		Project Service S.r.l.
+A2D000-A2DFFF     (base 16)		Project Service S.r.l.
+				Via Paderno 31/C
+				Seriate (BG)    24068
+				IT
+
+70-B3-D5   (hex)		Avid Controls Inc
+447000-447FFF     (base 16)		Avid Controls Inc
+				41261 Park 290 Dr
+				WALLER  TX  77484
+				US
+
+70-B3-D5   (hex)		Alcohol Countermeasure Systems
+FD0000-FD0FFF     (base 16)		Alcohol Countermeasure Systems
+				60 International Blvd
+				Toronto  Ontario  M9W 6J2
+				CA
+
+70-B3-D5   (hex)		Applied Silver
+239000-239FFF     (base 16)		Applied Silver
+				26254 Eden Landing Road
+				Hayward  CA  94545
+				US
+
+70-B3-D5   (hex)		DKI Technology Co., Ltd
+D00000-D00FFF     (base 16)		DKI Technology Co., Ltd
+				Room #1005, DONGHWA BLDG, 71, Yeouinaru-ro, Yeongdeungpo-gu
+				Seoul  Seoul  KR-11
+				KR
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+AA5000-AA5FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Fracarro srl
+E8C000-E8CFFF     (base 16)		Fracarro srl
+				via Cazzaro 3
+				Castelfranco Veneto    31033
+				IT
+
+70-B3-D5   (hex)		Crown Solar Power Fencing Systems
+9D6000-9D6FFF     (base 16)		Crown Solar Power Fencing Systems
+				123/A, Ushodaya Towers Shahpurnagar, Jeedimetla
+				Hyderabad  Telangana  500055
+				IN
+
+70-B3-D5   (hex)		Hiber
+DBE000-DBEFFF     (base 16)		Hiber
+				Keizersgracht 209-sous
+				Amsterdam  Noord-Holland  1016DT
+				NL
+
+70-B3-D5   (hex)		MEGGITT
+1EE000-1EEFFF     (base 16)		MEGGITT
+				14600 MYFORD RD
+				IRVINE  CA  92606
+				US
+
+70-B3-D5   (hex)		SET Power Systems GmbH
+DAB000-DABFFF     (base 16)		SET Power Systems GmbH
+				August Braun Strasse 3
+				Wangen  Baden Wuerttemberg  88239
+				DE
+
+70-B3-D5   (hex)		Prior Scientific Instruments Ltd
+A7D000-A7DFFF     (base 16)		Prior Scientific Instruments Ltd
+				3-4 Fielding industrial estate, Fulbourn
+				Cambridge  Cambridgeshire  CB21 5ET
+				GB
+
+70-B3-D5   (hex)		AUTOMATIZACION Y CONECTIVIDAD SA DE CV
+59B000-59BFFF     (base 16)		AUTOMATIZACION Y CONECTIVIDAD SA DE CV
+				LA GARITA ANDADOR 6 DUPLEX 1 CASA 2
+				CDMX  TLALPAN  14390
+				MX
+
+70-B3-D5   (hex)		Blue Skies Global LLC
+1D8000-1D8FFF     (base 16)		Blue Skies Global LLC
+				PO Box 796
+				Williams Bay  WI  53191
+				US
+
+70-B3-D5   (hex)		Alcodex Technologies Private Limited
+098000-098FFF     (base 16)		Alcodex Technologies Private Limited
+				7/719-B, PLOT 180, Mavelipuram colony, Kakkanad
+				ernakulam  Kerala  682030
+				IN
+
+70-B3-D5   (hex)		Digital Media Professionals
+BC4000-BC4FFF     (base 16)		Digital Media Professionals
+				16F NakanoCentralParkSouth,4-10-2 Nakano
+				Nakano-ku  Tokyo  164-0001
+				JP
+
+70-B3-D5   (hex)		Lightdrop
+072000-072FFF     (base 16)		Lightdrop
+				Matiční 730/3
+				Ostrava    70200
+				CZ
+
+70-B3-D5   (hex)		NeurIT s.r.o.
+2E9000-2E9FFF     (base 16)		NeurIT s.r.o.
+				Husovo náměstí 14
+				Hostivice  Czech Republic  25301
+				CZ
+
+70-B3-D5   (hex)		Shishido Electrostatic, Ltd.
+22A000-22AFFF     (base 16)		Shishido Electrostatic, Ltd.
+				4-7-21 Chigasaki-higashi, Tsuzuki-ku
+				Yokohama  Kanagawa Prefecture  224-0033
+				JP
+
+70-B3-D5   (hex)		Consarc Corporation
+BD6000-BD6FFF     (base 16)		Consarc Corporation
+				100 Indel Ave
+				Rancocas   NJ  08073
+				US
+
+70-B3-D5   (hex)		Amber Kinetics Inc
+05C000-05CFFF     (base 16)		Amber Kinetics Inc
+				32920 Alvarado-Niles Rd #250
+				Union City  CA  94587
+				US
+
+70-B3-D5   (hex)		Qingdao CNR HITACH Railway Signal&communication co.,ltd
+802000-802FFF     (base 16)		Qingdao CNR HITACH Railway Signal&communication co.,ltd
+				231-2 Ruichang Road
+				Qingdao    266031
+				CN
+
+70-B3-D5   (hex)		Zumbach Electronic AG
+B10000-B10FFF     (base 16)		Zumbach Electronic AG
+				Hauptstrasse 93
+				Orpund  Bern  2552
+				CH
+
+70-B3-D5   (hex)		VTC Digicom
+C4C000-C4CFFF     (base 16)		VTC Digicom
+				23 Lac Trung
+				Ha Noi  Ha Noi  100000
+				VN
+
+70-B3-D5   (hex)		WICELL TECHNOLOGY
+BB0000-BB0FFF     (base 16)		WICELL TECHNOLOGY
+				61 Dien Bien Phu
+				Ho Chi Minh    700000
+				VN
+
+70-B3-D5   (hex)		KOMZ - IZMERENIYA
+45B000-45BFFF     (base 16)		KOMZ - IZMERENIYA
+				Pravobulachnaya 35/2
+				Kazan    420111
+				RU
+
+70-B3-D5   (hex)		GoTrustID Inc.
+B38000-B38FFF     (base 16)		GoTrustID Inc.
+				800 N. State Street, Suite 402, Dover
+				County of Kent  DE  19901
+				US
+
+70-B3-D5   (hex)		Communication Systems Solutions
+E0C000-E0CFFF     (base 16)		Communication Systems Solutions
+				6030 S. 58th Street
+				Lincoln  NE  68516
+				US
+
+00-1B-C5   (hex)		Corporate Systems Engineering 
+015000-015FFF     (base 16)		Corporate Systems Engineering 
+				1215 Brookville Way
+				Indianapolis   IN  46239
+				US
+
+70-B3-D5   (hex)		Armstrong International, Inc.
+15B000-15BFFF     (base 16)		Armstrong International, Inc.
+				816 Maple Street
+				Three Rivers  MI  49093
+				US
+
+70-B3-D5   (hex)		Ya Batho Trading (Pty) Ltd
+AE6000-AE6FFF     (base 16)		Ya Batho Trading (Pty) Ltd
+				9 Estee Ackerman Street
+				Jet Park  Gauteng  1462
+				ZA
+
+70-B3-D5   (hex)		MicroElectronics System Co.Ltd
+8DA000-8DAFFF     (base 16)		MicroElectronics System Co.Ltd
+				29 uchihata-cho Nishinokyo Nakagyoku
+				Kyoto City  Kyoto-fu  604-8411
+				JP
+
+70-B3-D5   (hex)		Engage Technologies
+977000-977FFF     (base 16)		Engage Technologies
+				7041 Boone Avenue North
+				Brooklyn Park  MN  55428
+				US
+
+70-B3-D5   (hex)		Opti-Sciences, Inc.
+338000-338FFF     (base 16)		Opti-Sciences, Inc.
+				8 Winn Ave
+				Hudson  NH  03051
+				US
+
+70-B3-D5   (hex)		Silent Gliss International Ltd
+B66000-B66FFF     (base 16)		Silent Gliss International Ltd
+				Worbstrasse 210
+				Guemligen    3073
+				CH
+
+70-B3-D5   (hex)		Videoport S.A.
+441000-441FFF     (base 16)		Videoport S.A.
+				Sigma Business Center, Building A Nivel 2
+				San Pedro  San Jose  11501
+				CR
+
+70-B3-D5   (hex)		AKIS technologies
+402000-402FFF     (base 16)		AKIS technologies
+				Ciurlionio g. 82
+				Vilnius  Lithuania  03100
+				LT
+
+70-B3-D5   (hex)		Satixfy Israel Ltd.
+978000-978FFF     (base 16)		Satixfy Israel Ltd.
+				12 Hamada st.
+				Rehovot    7670300
+				IL
+
+70-B3-D5   (hex)		ANALOGICS TECH INDIA LTD
+B49000-B49FFF     (base 16)		ANALOGICS TECH INDIA LTD
+				PLOT # 9/10, NACHARAM INDUSTRIAL ESTATE
+				HYDERABAD  TELANGANA  500076
+				IN
+
+70-B3-D5   (hex)		ACD Elekronik GmbH
+673000-673FFF     (base 16)		ACD Elekronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		Aural Ltd
+76C000-76CFFF     (base 16)		Aural Ltd
+				Aural Ltd, 3b Wellington Close, Parkgate Industrial Estate
+				KNUTSFORD  Cheshire  WA16 8XL
+				GB
+
+70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
+516000-516FFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+70-B3-D5   (hex)		Sense For Innovation
+1EA000-1EAFFF     (base 16)		Sense For Innovation
+				Nistelrodeseweg 9A
+				Uden    5406 PT
+				NL
+
+70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
+E84000-E84FFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
+				78-2 Buncheon-ri, Bongdam-eup
+				Hwaseong-city  Gyungki-do  445-894
+				KR
+
+70-B3-D5   (hex)		AML
+759000-759FFF     (base 16)		AML
+				2190 Regal Parkway
+				Euless  TX  76040
+				US
+
+70-B3-D5   (hex)		NIRIT- Xinwei  Telecom Technology Co., Ltd.
+F27000-F27FFF     (base 16)		NIRIT- Xinwei  Telecom Technology Co., Ltd.
+				2-й Кожуховский проезд, д.12, стр.2
+				Moscow    115432
+				RU
+
+70-B3-D5   (hex)		Schneider Electric Motion USA
+8D7000-8D7FFF     (base 16)		Schneider Electric Motion USA
+				370 N. Main St.
+				Marlborough  CT  06447
+				US
+
+70-B3-D5   (hex)		DOBE Computing
+9DF000-9DFFFF     (base 16)		DOBE Computing
+				Dong-Bu 61 Song-Dam Univ. Chang-Ui 203
+				Yong-In    17145
+				KR
+
+70-B3-D5   (hex)		Laser Imagineering Vertriebs GmbH
+FDD000-FDDFFF     (base 16)		Laser Imagineering Vertriebs GmbH
+				Rudolf-Diesel-Weg 5
+				Moelln    23879
+				DE
+
+70-B3-D5   (hex)		Avidbots Corporation
+B4D000-B4DFFF     (base 16)		Avidbots Corporation
+				975 Bleams Road, Unit 5
+				Kitchener  Ontario  N2E 3Z5
+				CA
+
+70-B3-D5   (hex)		Reckeen HDP Media sp. z o.o. sp. k.
+3A1000-3A1FFF     (base 16)		Reckeen HDP Media sp. z o.o. sp. k.
+				Robotnicza 68c
+				Wroclaw    53608
+				PL
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+F84000-F84FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Sun Creative (ZheJiang) Technology INC.
+2B2000-2B2FFF     (base 16)		Sun Creative (ZheJiang) Technology INC.
+				3#Building No.181 Wuchang street
+				HANGZHOU  ZHE JIANG   310023
+				CN
+
+70-B3-D5   (hex)		BASF Corporation
+680000-680FFF     (base 16)		BASF Corporation
+				26 Davis Drive
+				Research Triangle Park  NC  27709
+				US
+
+70-B3-D5   (hex)		ACCEL CORP
+53D000-53DFFF     (base 16)		ACCEL CORP
+				16-32 Nakamachi
+				CHINO  Nagano  3910005
+				JP
+
+70-B3-D5   (hex)		Advansid 
+3F7000-3F7FFF     (base 16)		Advansid 
+				Via Alla Cascata 56/C
+				Trento    38123
+				IT
+
+70-B3-D5   (hex)		SCHMID electronic
+764000-764FFF     (base 16)		SCHMID electronic
+				Badstrasse 39
+				Reutlingen    72766
+				DE
+
+70-B3-D5   (hex)		Globalcom Engineering SPA
+636000-636FFF     (base 16)		Globalcom Engineering SPA
+				Via Volta 39
+				CARDANO AL CAMPO  VA  21010
+				IT
+
+70-B3-D5   (hex)		Harvard Technology Ltd
+56A000-56AFFF     (base 16)		Harvard Technology Ltd
+				Tyler Close, Normanton
+				Wakefield    WF6 1RL
+				GB
+
+70-B3-D5   (hex)		Roboteq
+DA5000-DA5FFF     (base 16)		Roboteq
+				7812 E Acoma dr
+				Scottsdale  AZ  85260
+				US
+
+70-B3-D5   (hex)		CAMEON S.A.
+235000-235FFF     (base 16)		CAMEON S.A.
+				3 rue de la Bavière
+				La Chapelle sur Erdre  Loire-Atlantique  44240
+				FR
+
+70-B3-D5   (hex)		Computech International
+280000-280FFF     (base 16)		Computech International
+				525 Northern Boulevard
+				Great Neck  NY  11021
+				US
+
+70-B3-D5   (hex)		Groupe Paris-Turf
+9AB000-9ABFFF     (base 16)		Groupe Paris-Turf
+				45 avenue Victor-Hugo, Bâtiment 270, 2e étage
+				AUBERVILLIERS    93300
+				FR
+
+00-1B-C5   (hex)		Osborne Coinage Co
+032000-032FFF     (base 16)		Osborne Coinage Co
+				2851 Massachusetts Avenue
+				Cincinnati  OH  45225
+				US
+
+00-1B-C5   (hex)		VEILUX INC.
+0B6000-0B6FFF     (base 16)		VEILUX INC.
+				802 GREENVIEW DR. STE 200
+				GRAND PRAIRIE    75050
+				US
+
+70-B3-D5   (hex)		KST technology
+C05000-C05FFF     (base 16)		KST technology
+				KST B/D 4-5, Wiryeseong-daero 12-gil
+				Songpa-gu  Seoul  05636
+				KR
+
+70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
+26C000-26CFFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+85F000-85FFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		EGICON SRL
+6F7000-6F7FFF     (base 16)		EGICON SRL
+				Via Posta Vecchia 36
+				Mirandola  Modena  41037
+				IT
+
+70-B3-D5   (hex)		Smith Meter, Inc.
+706000-706FFF     (base 16)		Smith Meter, Inc.
+				1602 Wagner Ave.
+				Erie    16514
+				US
+
+70-B3-D5   (hex)		SL Audio A/S
+E43000-E43FFF     (base 16)		SL Audio A/S
+				Ulvevej 28, Danmark
+				Skive  Denmark  7800
+				DK
+
+70-B3-D5   (hex)		SANYU SWITCH CO., LTD.
+F14000-F14FFF     (base 16)		SANYU SWITCH CO., LTD.
+				Muro 1639-2
+				Kikuchi-gun Ohzu-cho  Kumamoto-pref.  869-1235
+				JP
+
+70-B3-D5   (hex)		MEDEX
+B4A000-B4AFFF     (base 16)		MEDEX
+				240 Allée Jacques Monod
+				Saint-Priest  France  69800
+				FR
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+161000-161FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbühl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Beijing Nacao Technology Co., Ltd.
+105000-105FFF     (base 16)		Beijing Nacao Technology Co., Ltd.
+				1912B, Zhongguancunkemao Building, Zhongguancun Da Jie
+				Beijing    100080
+				CN
+
+70-B3-D5   (hex)		IONETECH
+876000-876FFF     (base 16)		IONETECH
+				#50,sicheongseo4gil
+				yeosu  jeonnam  59674
+				KR
+
+70-B3-D5   (hex)		Beijing Daswell Science and Technology Co.LTD
+06F000-06FFFF     (base 16)		Beijing Daswell Science and Technology Co.LTD
+				6th floor,Building B,Dachen Industry Park, NO.10 Jingyuan Street, BDA
+				Beijing  Beijing  100176
+				CN
+
+70-B3-D5   (hex)		Redfish Group Pty Ltd
+DA6000-DA6FFF     (base 16)		Redfish Group Pty Ltd
+				Level 3, 24 Little Edward Street
+				Spring Hill  QLD  4000
+				AU
+
+70-B3-D5   (hex)		Impolux GmbH
+EEC000-EECFFF     (base 16)		Impolux GmbH
+				Boschstr. 7
+				Kastellaun  RLP  56288
+				DE
+
+70-B3-D5   (hex)		Centero
+CE2000-CE2FFF     (base 16)		Centero
+				1640 Powers Ferry Road Bldg.14-360
+				Marietta  GA  30067
+				US
+
+70-B3-D5   (hex)		STREGA 
+770000-770FFF     (base 16)		STREGA 
+				Dreve de la Meute 31
+				Waterloo    1410
+				BE
+
+70-B3-D5   (hex)		Burk Technology
+985000-985FFF     (base 16)		Burk Technology
+				7 Beaver Brook road
+				Littleton  MA  01460
+				US
+
+70-B3-D5   (hex)		Heng Dian Technology Co., Ltd
+FEA000-FEAFFF     (base 16)		Heng Dian Technology Co., Ltd
+				No.9, Yunmei Road,Tianmulake Town
+				Liyang  Jiangsu  213300
+				CN
+
+70-B3-D5   (hex)		Fen Systems Ltd
+B1E000-B1EFFF     (base 16)		Fen Systems Ltd
+				110 Cromwell Road
+				Cambridge    CB1 3EG
+				GB
+
+70-B3-D5   (hex)		INVIXIUM ACCESS INC.
+87D000-87DFFF     (base 16)		INVIXIUM ACCESS INC.
+				50 ACADIA AVE, 310
+				MARKHAM  Ontario  L3R0B3
+				CA
+
+70-B3-D5   (hex)		JSK System
+B7F000-B7FFFF     (base 16)		JSK System
+				Wiośniana, 30/32
+				Łódź    93-228
+				PL
+
+70-B3-D5   (hex)		Enertex Bayern GmbH
+DC8000-DC8FFF     (base 16)		Enertex Bayern GmbH
+				Ebermannstädter Str. 8
+				Forchheim  Bayern  91301
+				DE
+
+70-B3-D5   (hex)		Liteon Technology Corporation
+073000-073FFF     (base 16)		Liteon Technology Corporation
+				8F, 866, Chung-Cheng Road, Chung Ho
+				New Taipei City  Taiwan  23585
+				TW
+
+70-B3-D5   (hex)		Orlaco Products B.V.
+240000-240FFF     (base 16)		Orlaco Products B.V.
+				Albert Plesmanstraat 42
+				Barneveld    3772MN
+				NL
+
+70-B3-D5   (hex)		Invisible Systems Limited
+5F2000-5F2FFF     (base 16)		Invisible Systems Limited
+				9 Beetham Road
+				Milnthorpe  Cumbria  LA7 7QL
+				GB
+
+70-B3-D5   (hex)		Refine Technology, LLC
+EBC000-EBCFFF     (base 16)		Refine Technology, LLC
+				26 Chapin Road, Unit 1107, PO Box 691
+				Pine Brook  NJ  07058
+				US
+
+70-B3-D5   (hex)		Heartlandmicropayments
+455000-455FFF     (base 16)		Heartlandmicropayments
+				2115 Chapman Road Suite 159
+				Chattanooga  TN  37421
+				US
+
+70-B3-D5   (hex)		AVI Pty Ltd
+790000-790FFF     (base 16)		AVI Pty Ltd
+				9 Pitt Way
+				Booragoon  Western Australia  6154
+				AU
+
+70-B3-D5   (hex)		PEEK TRAFFIC
+C65000-C65FFF     (base 16)		PEEK TRAFFIC
+				5401 N SAM HOUSTON PKWY W
+				HOUSTON  null  77086
+				US
+
+70-B3-D5   (hex)		Kalfire
+64B000-64BFFF     (base 16)		Kalfire
+				Geloërveldweg 21
+				Belfeld  Limburg  5951 DH
+				NL
+
+70-B3-D5   (hex)		Biovigil Hygiene Technologies
+DB1000-DB1FFF     (base 16)		Biovigil Hygiene Technologies
+				924 N. Main st., Suite 2
+				Ann Arbor  MI  48104
+				US
+
+70-B3-D5   (hex)		Talleres de Escoriaza SA
+532000-532FFF     (base 16)		Talleres de Escoriaza SA
+				Barrio Ventas, 35
+				Irun  Gipuzkoa  20305
+				ES
+
+70-B3-D5   (hex)		Vitro Technology Corporation
+F19000-F19FFF     (base 16)		Vitro Technology Corporation
+				Box 91232
+				Austin  TX  78709-1232
+				US
+
+70-B3-D5   (hex)		Riegl Laser Measurement Systems GmbH
+F10000-F10FFF     (base 16)		Riegl Laser Measurement Systems GmbH
+				Riedenburgstraße 48
+				Horn  Niederösterreich  A-3580
+				AT
+
+70-B3-D5   (hex)		Robotelf Technologies (Chengdu) Co., Ltd.
+1A6000-1A6FFF     (base 16)		Robotelf Technologies (Chengdu) Co., Ltd.
+				N3-4-1-1914, Global Center, No. 1700, Tianfu Road North, High-rech Zone
+				Chengdu City  Sichuan  610041
+				CN
+
+70-B3-D5   (hex)		M.T. S.R.L.
+141000-141FFF     (base 16)		M.T. S.R.L.
+				VIA MONZA 83
+				GESSATE    20060
+				IT
+
+70-B3-D5   (hex)		Walk Horizon Technology (Beijing) Co., Ltd.
+154000-154FFF     (base 16)		Walk Horizon Technology (Beijing) Co., Ltd.
+				Rm121 B1 Shouxindasha Building, 5 Jiangtailu Rd., Chaoyang District
+				Beijing    100015
+				CN
+
+70-B3-D5   (hex)		CoXlab Inc.
+DF1000-DF1FFF     (base 16)		CoXlab Inc.
+				312 Hannuri-daero, 309
+				Sejong    30128
+				KR
+
+70-B3-D5   (hex)		BCD Audio
+728000-728FFF     (base 16)		BCD Audio
+				5 Bristol Way, Stoke Gardens
+				Slough  Berkshire  SL1 3QE
+				GB
+
+70-B3-D5   (hex)		Zigencorp, Inc
+739000-739FFF     (base 16)		Zigencorp, Inc
+				6934 Canby Avenue 107
+				Reseda  CA  91335
+				US
+
+70-B3-D5   (hex)		E-MetroTel
+FF0000-FF0FFF     (base 16)		E-MetroTel
+				2828 West Parker Unit B201
+				Plano  TX  75075
+				US
+
+70-B3-D5   (hex)		Euklis by GSG International
+AD8000-AD8FFF     (base 16)		Euklis by GSG International
+				via Colombo 23
+				Trezzano sul Naviglio  MI  20090
+				IT
+
+70-B3-D5   (hex)		Mesa Labs, Inc.
+23A000-23AFFF     (base 16)		Mesa Labs, Inc.
+				12100 West 6th Ave.
+				Lakewood  CO  80228
+				US
+
+70-B3-D5   (hex)		Systems With Intelligence Inc.
+93E000-93EFFF     (base 16)		Systems With Intelligence Inc.
+				6889 Rexwood Road, Unit 9
+				Mississauga  Ontario  L4V 1R2
+				CA
+
+70-B3-D5   (hex)		Gentec Systems  Co.
+469000-469FFF     (base 16)		Gentec Systems  Co.
+				5F., No.51-3, Fuxing Rd., Xindian Dist., 
+				New Taipei City     23150
+				TW
+
+70-B3-D5   (hex)		Guangzhou Male Industrial Animation Technology Co.,Ltd.
+0D4000-0D4FFF     (base 16)		Guangzhou Male Industrial Animation Technology Co.,Ltd.
+				4/F,Block A, 23 Huancun Road,Dalong Street, Panyu District,Guangzhou City
+				Guangzhou City  Guangdong Province  514000
+				CN
+
+70-B3-D5   (hex)		BigStuff3, Inc. 
+64E000-64EFFF     (base 16)		BigStuff3, Inc. 
+				4352 Fenton Rd
+				Hartland  MI  48353
+				US
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+EF5000-EF5FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Wimate Technology Solutions Private Limited
+253000-253FFF     (base 16)		Wimate Technology Solutions Private Limited
+				96, 34th B cross, 16th Main, Jayanagar 4th T block
+				Bangalore  Karnataka  560041
+				IN
+
+70-B3-D5   (hex)		ELEUSI GmbH
+1CD000-1CDFFF     (base 16)		ELEUSI GmbH
+				Rottendorferstrasse 1
+				Feldkirchen  Kaernten  9560
+				AT
+
+70-B3-D5   (hex)		Core Balance Co., Ltd.
+D5F000-D5FFFF     (base 16)		Core Balance Co., Ltd.
+				#1807, #1808, 308-4, Seongsu-dong 2-ga, Seongdong-gu
+				Seoul    04781
+				KR
+
+00-1B-C5   (hex)		TechSolutions A/S
+0C2000-0C2FFF     (base 16)		TechSolutions A/S
+				Lyskaer 15, 2
+				Herlev    2730
+				DK
+
+70-B3-D5   (hex)		G+D Mobile Security
+024000-024FFF     (base 16)		G+D Mobile Security
+				C/ 114 nº 27, Polígon Pratenc
+				El Prat de Llobregat  Barcelona  E-08820
+				ES
+
+70-B3-D5   (hex)		ETON Deutschland Electro Acoustic GmbH
+213000-213FFF     (base 16)		ETON Deutschland Electro Acoustic GmbH
+				Pfaffenweg 21
+				Neu-Ulm  Bavaria  89231
+				DE
+
+70-B3-D5   (hex)		Saratoga Speed, Inc.
+55C000-55CFFF     (base 16)		Saratoga Speed, Inc.
+				2701 Zanker Rd
+				San Jose  CA  95134
+				US
+
+70-B3-D5   (hex)		AmTote Australasia
+DAA000-DAAFFF     (base 16)		AmTote Australasia
+				Unit3, 28 LeightonPlace.
+				HORNSBY  NSW  2077
+				AU
+
+70-B3-D5   (hex)		TRIDENT INFOSOL PVT LTD
+C8F000-C8FFFF     (base 16)		TRIDENT INFOSOL PVT LTD
+				NO1A , KUSHAL GARDEN , PEENYA INDUSTRIAL AREA
+				BANGALORE    560058
+				IN
+
+70-B3-D5   (hex)		OSUNG LST CO.,LTD.
+B64000-B64FFF     (base 16)		OSUNG LST CO.,LTD.
+				#433-31, Sandong-ro, Eumbong-myeon
+				Asan-si  Chungcheongnam-do  31418
+				KR
+
+70-B3-D5   (hex)		ELBIT SYSTEMS BMD AND LAND EW - ELISRA LTD
+24F000-24FFFF     (base 16)		ELBIT SYSTEMS BMD AND LAND EW - ELISRA LTD
+				Hamerchava 29
+				holon    58101
+				IL
+
+70-B3-D5   (hex)		Valk Welding B.V.
+5DA000-5DAFFF     (base 16)		Valk Welding B.V.
+				Staalindustrieweg 15
+				Alblasserdam  Zuid Holland  2952 AT
+				NL
+
+70-B3-D5   (hex)		Special Services Group, LLC
+0F8000-0F8FFF     (base 16)		Special Services Group, LLC
+				PO Box 825
+				Denair  CA  95316
+				US
+
+70-B3-D5   (hex)		AEM Singapore Pte. Ltd.
+AC1000-AC1FFF     (base 16)		AEM Singapore Pte. Ltd.
+				52 Serangoon North Ave 4
+				Singapore  Singapore  555853
+				SG
+
+70-B3-D5   (hex)		Fire4 Systems UK Ltd
+E69000-E69FFF     (base 16)		Fire4 Systems UK Ltd
+				8 Regent Street
+				Leeds  West Yorkshire  LS7 4PE
+				GB
+
+70-B3-D5   (hex)		Preston Industries dba PolyScience
+3B5000-3B5FFF     (base 16)		Preston Industries dba PolyScience
+				6600 W. Touhy Ave
+				Niles  IL  60714-4588
+				US
+
+70-B3-D5   (hex)		Stone Three
+7BF000-7BFFFF     (base 16)		Stone Three
+				24 Gardner Williams Ave
+				Somerset West  Western Cape  7130
+				ZA
+
+70-B3-D5   (hex)		Cyanview
+E3A000-E3AFFF     (base 16)		Cyanview
+				26, Rue de la Foire
+				Papignies    7861
+				BE
+
+70-B3-D5   (hex)		Matrix Orbital Corporation
+2B7000-2B7FFF     (base 16)		Matrix Orbital Corporation
+				Suite 602, 4774 Westwinds Dr NE
+				Calgary  Alberta  T3J 0L7
+				CA
+
+70-B3-D5   (hex)		BLOCKSI LLC
+9E6000-9E6FFF     (base 16)		BLOCKSI LLC
+				228 Hamilton avenue 3rd floor
+				Palo Alto    94301
+				US
+
+70-B3-D5   (hex)		Krontech
+6E9000-6E9FFF     (base 16)		Krontech
+				I.T.U ARI 3 Teknokent Kron Telekomunikasyon, Maslak
+				Istanbul    34467
+				TR
+
+70-B3-D5   (hex)		ELVA-1 MICROWAVE HANDELSBOLAG
+FA3000-FA3FFF     (base 16)		ELVA-1 MICROWAVE HANDELSBOLAG
+				c/o Hornlund, Kungsgatan 54
+				Furulund    244 62
+				SE
+
+70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
+743000-743FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+70-B3-D5   (hex)		Waterkotte GmbH
+7EA000-7EAFFF     (base 16)		Waterkotte GmbH
+				Gewerkenstr. 15
+				Herne    44628
+				DE
+
+70-B3-D5   (hex)		Mo-Sys Engineering Ltd
+075000-075FFF     (base 16)		Mo-Sys Engineering Ltd
+				Thames Bank House, Tunnel Avenue
+				London    SE100PA
+				GB
+
+70-B3-D5   (hex)		Prisma Telecom Testing Srl
+689000-689FFF     (base 16)		Prisma Telecom Testing Srl
+				Via Petrocchi, 4
+				Milano  MI  20127
+				IT
+
+70-B3-D5   (hex)		KRONOTECH SRL
+8C8000-8C8FFF     (base 16)		KRONOTECH SRL
+				VIALE UNGHERIA 125
+				UDINE  ITALY/UDINE  33100
+				IT
+
+70-B3-D5   (hex)		HAVELSAN A.Ş.
+096000-096FFF     (base 16)		HAVELSAN A.Ş.
+				Mustafa Kemal Mah. 2120.Cad. No.39                   
+				ANKARA    06510 
+				TR
+
+70-B3-D5   (hex)		Triax A/S
+963000-963FFF     (base 16)		Triax A/S
+				Bjornkaervej 3
+				Hornsyld  Denmark  8783
+				DK
+
+70-B3-D5   (hex)		KST technology
+351000-351FFF     (base 16)		KST technology
+				KST B/D 4-5, Wiryeseong-daero 12-gil
+				Songpa-gu  Seoul  05636
+				KR
+
+70-B3-D5   (hex)		bobz GmbH
+81B000-81BFFF     (base 16)		bobz GmbH
+				Südring 3d
+				Wentorf b. Hamburg  SH  21465
+				DE
+
+70-B3-D5   (hex)		GHM-Messtechnik GmbH (Standort IMTRON)
+B6C000-B6CFFF     (base 16)		GHM-Messtechnik GmbH (Standort IMTRON)
+				Carl-Benz-Strasse 11
+				Owingen  Baden-Würrtemberg  88696
+				DE
+
+70-B3-D5   (hex)		Core Akıllı Ev Sistemleri
+6FD000-6FDFFF     (base 16)		Core Akıllı Ev Sistemleri
+				Akdeniz Mah. Cumhuriyet Bulvarı No:82/802 Konak
+				İzmir    35210
+				TR
+
+70-B3-D5   (hex)		WeWork Companies, Inc.
+2CC000-2CCFFF     (base 16)		WeWork Companies, Inc.
+				115 W 18th St
+				New York  NY  10011
+				US
+
+70-B3-D5   (hex)		Link Electric & Safety Control Co.
+60D000-60DFFF     (base 16)		Link Electric & Safety Control Co.
+				444 McNally Drive
+				Nashville    37211
+				US
+
+70-B3-D5   (hex)		Adigitalmedia
+B3A000-B3AFFF     (base 16)		Adigitalmedia
+				#211, 444, Hangeulbiseok-ro, Nowon-gu
+				seoul    01666
+				KR
+
+70-B3-D5   (hex)		LG Electronics
+723000-723FFF     (base 16)		LG Electronics
+				189, LG Gasan Digital Center, Gasan digital 1-ro, Geumcheon-gu
+				Seoul    153-803
+				KR
+
+70-B3-D5   (hex)		Galios
+EA6000-EA6FFF     (base 16)		Galios
+				Dmitriy Donskoy, 35A, 526
+				Tver    170006
+				RU
+
+70-B3-D5   (hex)		RADA Electronics Industries Ltd.
+C4D000-C4DFFF     (base 16)		RADA Electronics Industries Ltd.
+				7 Gibory Israel St.
+				Netanya    42504
+				IL
+
+70-B3-D5   (hex)		Breas Medical AB
+E88000-E88FFF     (base 16)		Breas Medical AB
+				Företagsvägen 1
+				Mölnlycke    SE-435 33
+				SE
+
+70-B3-D5   (hex)		Wilson Electronics
+95C000-95CFFF     (base 16)		Wilson Electronics
+				3301 E. Deseret Dr.
+				Saint George  UT  84790
+				US
+
+70-B3-D5   (hex)		McQ Inc
+C6C000-C6CFFF     (base 16)		McQ Inc
+				1551 FORBES ST
+				Fredericksburg  VA  22405
+				US
+
+70-B3-D5   (hex)		Paradigm Technology Services B.V.
+940000-940FFF     (base 16)		Paradigm Technology Services B.V.
+				Ambachtsweg 7
+				Groot-Ammers    2964LG
+				NL
+
+70-B3-D5   (hex)		Xacti Corporation
+828000-828FFF     (base 16)		Xacti Corporation
+				Tower East 28F, Umeda Sky bldg, 1-1-88, Oyodonaka, Kita-ku,
+				Osaka   Osaka  5316028
+				JP
+
+70-B3-D5   (hex)		QUALITTEQ LLC
+760000-760FFF     (base 16)		QUALITTEQ LLC
+				16th Parkovaya 26/1
+				Moscow    105484
+				RU
+
+70-B3-D5   (hex)		Ideetron b.v.
+9B5000-9B5FFF     (base 16)		Ideetron b.v.
+				Dorpsstraat 81
+				Doorn  Utrecht  3941JL
+				NL
+
+70-B3-D5   (hex)		Digital Matter Pty Ltd
+705000-705FFF     (base 16)		Digital Matter Pty Ltd
+				9/100 Railway Rd
+				Subiaco  WA  6008
+				AU
+
+70-B3-D5   (hex)		mg-sensor GmbH
+2BD000-2BDFFF     (base 16)		mg-sensor GmbH
+				Airport Boulevard B 210
+				Rheinmuenster    77836
+				DE
+
+70-B3-D5   (hex)		UnI Systech Co.,Ltd
+894000-894FFF     (base 16)		UnI Systech Co.,Ltd
+				A-511 Sigma2 164,Tancheongsang-ro,Bundang-gu
+				Seongnam-si  Gyeonggi-do  13631
+				KR
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+DE6000-DE6FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		BESTCODE LLC
+E3F000-E3FFFF     (base 16)		BESTCODE LLC
+				3034 SE Loop 820
+				Fort Worth  TX  76140
+				US
+
+70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
+92B000-92BFFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
+				78-2 Buncheon-ri, Bongdam-eup
+				Hwaseong-city  Gyungki-do  445-894
+				KR
+
+70-B3-D5   (hex)		Wi6labs
+8F8000-8F8FFF     (base 16)		Wi6labs
+				1137 A - Avenue des Champs Blancs
+				Cesson Sevigné    35510
+				FR
+
+70-B3-D5   (hex)		Sanmina Israel
+1E6000-1E6FFF     (base 16)		Sanmina Israel
+				Koren Industrial Zone , POBox 102
+				Maalot  Israel  2101002
+				IL
+
+70-B3-D5   (hex)		Elbit Systems of America
+826000-826FFF     (base 16)		Elbit Systems of America
+				4700 Marine Creek Parkway
+				Fort Worth   TX  76179
+				US
+
+70-B3-D5   (hex)		NASA Johnson Space Center
+2AB000-2ABFFF     (base 16)		NASA Johnson Space Center
+				2101 NASA Parkway
+				Houston  TX  77058
+				US
+
+70-B3-D5   (hex)		LP Technologies Inc.
+727000-727FFF     (base 16)		LP Technologies Inc.
+				1919 N. Amidon St 216
+				Wichita  KS  67203
+				US
+
+70-B3-D5   (hex)		Health Care Originals, Inc.
+2F2000-2F2FFF     (base 16)		Health Care Originals, Inc.
+				1 Pleasant St., Ste. 442
+				Rochester  NY  14604
+				US
+
+70-B3-D5   (hex)		Spectrum Brands
+254000-254FFF     (base 16)		Spectrum Brands
+				19701 DaVinci
+				Lake Forest    92656
+				US
+
+70-B3-D5   (hex)		Vidisys GmbH
+133000-133FFF     (base 16)		Vidisys GmbH
+				Rudolf-Diesel-Ring 30
+				Sauerlach  Bavaria  82054
+				DE
+
+70-B3-D5   (hex)		SANSFIL Technologies
+844000-844FFF     (base 16)		SANSFIL Technologies
+				rue pierre Fontaine Str
+				paris  NA  04271
+				FR
+
+70-B3-D5   (hex)		Blu Wireless Technology Ltd
+6E8000-6E8FFF     (base 16)		Blu Wireless Technology Ltd
+				Engine Shed, Station Approach,
+				Bristol    BS1 6QH
+				GB
+
+70-B3-D5   (hex)		Thiel Audio Products Company, LLC
+EB9000-EB9FFF     (base 16)		Thiel Audio Products Company, LLC
+				566 Mainstream Dr, Suite 500
+				Nashville  TN  37228
+				US
+
+70-B3-D5   (hex)		Intermind Inc.
+4A5000-4A5FFF     (base 16)		Intermind Inc.
+				2-64-4-2104 Hiyoshi-honchou Kouhoku-ku
+				Yokohama  kanagawa  2230062
+				JP
+
+70-B3-D5   (hex)		ACD Elekronik GmbH
+D98000-D98FFF     (base 16)		ACD Elekronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		CONNIT
+6AD000-6ADFFF     (base 16)		CONNIT
+				231 rue Pierre et Marie Curie
+				LABEGE    31670
+				FR
+
+70-B3-D5   (hex)		Aton srl
+5BF000-5BFFFF     (base 16)		Aton srl
+				Via Guido Rossa 5
+				Spilamberto  MO  41057
+				IT
+
+70-B3-D5   (hex)		Dutile, Glines and Higgins Corporation
+FF8000-FF8FFF     (base 16)		Dutile, Glines and Higgins Corporation
+				P.O. Box 5638
+				Manchester  NH  03108
+				US
+
+70-B3-D5   (hex)		OPTSYS
+58C000-58CFFF     (base 16)		OPTSYS
+				7, rue Salvador Dali – BP 505
+				SAINT ETIENNE    42007
+				FR
+
+70-B3-D5   (hex)		Tech4Race
+C0C000-C0CFFF     (base 16)		Tech4Race
+				1137 A avenue des champs blancs
+				Cesson-Sévigné    35510
+				FR
+
+70-B3-D5   (hex)		TSAT AS
+0D3000-0D3FFF     (base 16)		TSAT AS
+				Martin Linges v 25
+				Fornebu    1364
+				NO
+
+70-B3-D5   (hex)		Dandong Dongfang Measurement & Control Technology Co., Ltd.
+C33000-C33FFF     (base 16)		Dandong Dongfang Measurement & Control Technology Co., Ltd.
+				No. 136, Binjiang M. Road, Yanjiang Development Zone
+				Dandong  Liaoning  118000
+				CN
+
+70-B3-D5   (hex)		PROFEN COMMUNICATIONS
+CC8000-CC8FFF     (base 16)		PROFEN COMMUNICATIONS
+				Famas Plaza A Blok Kat: 10 No:35 Okmeydani
+				Istanbul    34384
+				TR
+
+70-B3-D5   (hex)		Mipot S.p.a.
+C20000-C20FFF     (base 16)		Mipot S.p.a.
+				Via Corona 5
+				Cormons    34071
+				IT
+
+70-B3-D5   (hex)		Securolytics, Inc.
+125000-125FFF     (base 16)		Securolytics, Inc.
+				2002 Summit Boulevard, Suite 300
+				Atlanta  GA  30319
+				US
+
+70-B3-D5   (hex)		Thermo Fisher Scientific
+D69000-D69FFF     (base 16)		Thermo Fisher Scientific
+				27 forge Parkway
+				Franklin  MA  02038
+				US
+
+70-B3-D5   (hex)		S.E.I. CO.,LTD.
+56B000-56BFFF     (base 16)		S.E.I. CO.,LTD.
+				59 Nirayama Tada
+				Izunokuni  Shizuoka  4102133
+				JP
+
+70-B3-D5   (hex)		Camsat Przemysław Gralak
+807000-807FFF     (base 16)		Camsat Przemysław Gralak
+				Ogrodowa 2A
+				Solec Kujawski  Bydgoszcz  86-050
+				PL
+
+70-B3-D5   (hex)		Lithe Technology, LLC
+EE3000-EE3FFF     (base 16)		Lithe Technology, LLC
+				4574 North First Avenue, Suite 100
+				Tucson  AZ  85718
+				US
+
+70-B3-D5   (hex)		Elystec Technology Co., Ltd
+D4C000-D4CFFF     (base 16)		Elystec Technology Co., Ltd
+				Room 601, Zhong Da Court,Zhong Guan Garden,No.1311 Liuxian Road
+				Shenzhen  Guangdong  518000
+				CN
+
+70-B3-D5   (hex)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
+7F3000-7F3FFF     (base 16)		Shenzhen Virtual Clusters Information Technology Co.,Ltd.
+				Room 201,Building A,No.1,Qianhai 1st Road,Shengang cooperation zone,Qianhai
+				Shenzhen    518054
+				CN
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+C79000-C79FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Cominfo, Inc.
+0A0000-0A0FFF     (base 16)		Cominfo, Inc.
+				Nabrezi 695
+				Zlin    760 01
+				CZ
+
+70-B3-D5   (hex)		CRDE
+DA4000-DA4FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		ijin co.,ltd.
+2D0000-2D0FFF     (base 16)		ijin co.,ltd.
+				#109  BI, Hanyandaehak-ro
+				Ansan  South Korea  15588
+				KR
+
+70-B3-D5   (hex)		Zeroplus Technology Co.,Ltd.
+9C1000-9C1FFF     (base 16)		Zeroplus Technology Co.,Ltd.
+				3F.,No.121,Jian 8th Rd.,Zhonghe Dist.,
+				New Taipei City  Taiwan  23585
+				TW
+
+70-B3-D5   (hex)		A Trap, USA
+763000-763FFF     (base 16)		A Trap, USA
+				2021 Sperry Ave, Unit 11
+				Ventura  CA  93003
+				US
+
+70-B3-D5   (hex)		JSC “Scientific Industrial Enterprise Rubin
+F25000-F25FFF     (base 16)		JSC “Scientific Industrial Enterprise Rubin
+				2, Baydukov str.
+				Penza  Penza reg.  440000
+				RU
+
+70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
+AA3000-AA3FFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+70-B3-D5   (hex)		TATTILE SRL
+967000-967FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		PEEK TRAFFIC
+A28000-A28FFF     (base 16)		PEEK TRAFFIC
+				5401 N SAM HOUSTON PKWY W
+				HOUSTON  null  77086
+				US
+
+70-B3-D5   (hex)		Shanghai Daorech Industry Developmnet Co.,Ltd
+9DC000-9DCFFF     (base 16)		Shanghai Daorech Industry Developmnet Co.,Ltd
+				21F Hitech Plaza No.488 South Wu Ning Road
+				shanghai   shanghai   200042
+				CN
+
+70-B3-D5   (hex)		Monnit Corporation
+02E000-02EFFF     (base 16)		Monnit Corporation
+				3400 S WEST TEMPLE
+				SALT LAKE CITY  UT  84115
+				US
+
+70-B3-D5   (hex)		Axatel SrL
+D8E000-D8EFFF     (base 16)		Axatel SrL
+				Via del Mercato Nuovo, 75
+				VICENZA  ITALY  36100
+				IT
+
+70-B3-D5   (hex)		comtac AG
+BF6000-BF6FFF     (base 16)		comtac AG
+				Allenwindenstrasse 1
+				Flurlingen    8247
+				CH
+
+70-B3-D5   (hex)		ModulaTeam GmbH
+F0C000-F0CFFF     (base 16)		ModulaTeam GmbH
+				Schrannenplatz 6
+				Erding  Bavaria  85435
+				DE
+
+70-B3-D5   (hex)		Fracarro srl
+E59000-E59FFF     (base 16)		Fracarro srl
+				VIA CAZZARO 3
+				CASTELFRANCO VENETO  TV  31033
+				IT
+
+70-B3-D5   (hex)		Qtechnology A/S
+C74000-C74FFF     (base 16)		Qtechnology A/S
+				Valby Langgade 142, 1.
+				Valby  DK  2500
+				DK
+
+70-B3-D5   (hex)		SPEA SPA
+3F3000-3F3FFF     (base 16)		SPEA SPA
+				Via Torino 16
+				Volpiano  Piemonte  10088
+				IT
+
+70-B3-D5   (hex)		Raven Systems Design, Inc
+0B0000-0B0FFF     (base 16)		Raven Systems Design, Inc
+				7777 Wall St
+				Valley View  OH  44125
+				US
+
+70-B3-D5   (hex)		Mitsubishi Electric Micro-Computer Application Software Co.,Ltd. 
+F37000-F37FFF     (base 16)		Mitsubishi Electric Micro-Computer Application Software Co.,Ltd. 
+				Inadera, 2-5-1
+				Amagasaki  Hyogo  661-0981
+				JP
+
+70-B3-D5   (hex)		SMITEC S.p.A.
+138000-138FFF     (base 16)		SMITEC S.p.A.
+				Via Carlo Ceresa, 10
+				San Giovanni Bianco  Bergamo  24015
+				IT
+
+70-B3-D5   (hex)		LGE
+630000-630FFF     (base 16)		LGE
+				2621, Nambusunhwan-ro, Gangnam-gu
+				Seoul    06267
+				KR
+
+70-B3-D5   (hex)		Veeco Instruments
+D08000-D08FFF     (base 16)		Veeco Instruments
+				4875 Constellation Dr
+				St. Paul  MN  55127
+				US
+
+70-B3-D5   (hex)		University of Wisconsin Madison - Department of High Energy Physics
+98C000-98CFFF     (base 16)		University of Wisconsin Madison - Department of High Energy Physics
+				1150 University Ave
+				Madison  WI  53706
+				US
+
+70-B3-D5   (hex)		Excelfore Corporation
+7A1000-7A1FFF     (base 16)		Excelfore Corporation
+				3155 Kearnet St, Suite 200
+				Fremont  CA  94538
+				US
+
+70-B3-D5   (hex)		Critical Link LLC
+F1D000-F1DFFF     (base 16)		Critical Link LLC
+				6712 Brooklawn Parkway
+				Syracuse  null  13211
+				US
+
+70-B3-D5   (hex)		XLOGIC srl
+85E000-85EFFF     (base 16)		XLOGIC srl
+				Via A. Grandi 23
+				Cinisello Balsamo    20092
+				IT
+
+70-B3-D5   (hex)		Unlimiterhear co.,ltd. taiwan branch
+902000-902FFF     (base 16)		Unlimiterhear co.,ltd. taiwan branch
+				5F-1 No18.-1, sec.3 , Ren-Ai Rd.
+				Taipei City    106
+				TW
+
+70-B3-D5   (hex)		DYCEC, S.A.
+1DE000-1DEFFF     (base 16)		DYCEC, S.A.
+				Torres Quevedo, 1-P.T.M.
+				Tres Cantos  Madrid  28760
+				ES
+
+70-B3-D5   (hex)		Symetrics Industries d.b.a. Extant Aerospace
+FFC000-FFCFFF     (base 16)		Symetrics Industries d.b.a. Extant Aerospace
+				1615 West NASA Blvd
+				Melbourne  FL  32901
+				US
+
+70-B3-D5   (hex)		Nordson Corporation
+FA7000-FA7FFF     (base 16)		Nordson Corporation
+				11475 Lakefield Dr
+				Duluth  GA  30097
+				US
+
+70-B3-D5   (hex)		Radig Hard & Software
+FAF000-FAFFFF     (base 16)		Radig Hard & Software
+				An der Bahn 18
+				Kreuztal    57223
+				DE
+
+70-B3-D5   (hex)		GREEN HOUSE CO., LTD.
+4CF000-4CFFFF     (base 16)		GREEN HOUSE CO., LTD.
+				5F Unosawa Building
+				Ebisu Shibuya-ku  Tokyo  150-0013
+				JP
+
+70-B3-D5   (hex)		ACD Elekronik GmbH
+5CA000-5CAFFF     (base 16)		ACD Elekronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		Skopei B.V.
+880000-880FFF     (base 16)		Skopei B.V.
+				Haagweg 199
+				Rijswijk  ZH  2281AM
+				NL
+
+70-B3-D5   (hex)		Edgeware AB
+60B000-60BFFF     (base 16)		Edgeware AB
+				Master Samuelsgatan 42
+				Stockholm    11157
+				SE
+
+70-B3-D5   (hex)		Edgeware AB
+9F6000-9F6FFF     (base 16)		Edgeware AB
+				Master Samuelsgatan 42
+				Stockholm    11157
+				SE
+
+70-B3-D5   (hex)		Tata Communications Ltd.
+F83000-F83FFF     (base 16)		Tata Communications Ltd.
+				VSB Mahatma Gandhi Road Fort Mumbai
+				Mumbai  Maharashtra  400001
+				IN
+
+70-B3-D5   (hex)		Triax A/S
+C2E000-C2EFFF     (base 16)		Triax A/S
+				Bjornkaervej 3
+				Hornsyld  Denmark  8783
+				DK
+
+70-B3-D5   (hex)		HAIYANG OLIX CO.,LTD.
+5E5000-5E5FFF     (base 16)		HAIYANG OLIX CO.,LTD.
+				103-903 BUCHEONTECHNOPARK 364 SAMJEONG
+				BUCHEON  GEYONGGI  421-740
+				KR
+
+70-B3-D5   (hex)		PTN Electronics Limited 
+0A1000-0A1FFF     (base 16)		PTN Electronics Limited 
+				G2, JinXiongDa Technology Park, HuanGuan Road South 105th  GuanLan Block, LongHua New District 
+				ShenZhen City  guangdong  518000
+				CN
+
+70-B3-D5   (hex)		Merus Power Dynamics Ltd.
+37C000-37CFFF     (base 16)		Merus Power Dynamics Ltd.
+				Pirkkalaistie 1
+				Nokia    37100
+				FI
+
+70-B3-D5   (hex)		DoWoo Digitech
+039000-039FFF     (base 16)		DoWoo Digitech
+				A-706ho,Ssangyong IT Twintower, dunchondaero, JungWon-Gu
+				Seongnam-si  Gyeonggi-do  13216
+				KR
+
+70-B3-D5   (hex)		Dextera Labs
+0EF000-0EFFFF     (base 16)		Dextera Labs
+				3175 Quatre-Bourgeois #104
+				Quebec  Quebec  G1W2K7
+				CA
+
+70-B3-D5   (hex)		ENGenesis 
+D25000-D25FFF     (base 16)		ENGenesis 
+				19 Technology Drive
+				Auburn  MA  01501
+				US
+
+70-B3-D5   (hex)		Zehntner Testing Instruments
+267000-267FFF     (base 16)		Zehntner Testing Instruments
+				Gewerbestrasse 4
+				Sissach    4450
+				CH
+
+70-B3-D5   (hex)		APPLIED PROCESSING
+E67000-E67FFF     (base 16)		APPLIED PROCESSING
+				176 rue du Marechal Foch
+				Flins sur Seine    78410
+				FR
+
+70-B3-D5   (hex)		National TeleConsultants LLC
+173000-173FFF     (base 16)		National TeleConsultants LLC
+				550 North Brand Boulevard, 17th Floor
+				Glendale  CA  91203-1944
+				US
+
+70-B3-D5   (hex)		Engage Technologies
+20D000-20DFFF     (base 16)		Engage Technologies
+				7041 Boone Avenue North
+				Brooklyn Park  MN  55428
+				US
+
+70-B3-D5   (hex)		RTDS Technologies Inc.
+542000-542FFF     (base 16)		RTDS Technologies Inc.
+				100-150 Innovation Drive
+				Winnipeg  Manitoba  R3T 2E1
+				CA
+
+70-B3-D5   (hex)		WM Design s.r.o
+D55000-D55FFF     (base 16)		WM Design s.r.o
+				Zamoravi 1572
+				Napajedla    76361
+				CZ
+
+70-B3-D5   (hex)		JSC Kaluga Astral
+E98000-E98FFF     (base 16)		JSC Kaluga Astral
+				Tsyolkovsky 4
+				Kaluga  Kaluga  248000
+				RU
+
+70-B3-D5   (hex)		eleven-x
+149000-149FFF     (base 16)		eleven-x
+				295 Hagey Blvd
+				Waterloo  Ontario  N2L 6R5
+				CA
+
+70-B3-D5   (hex)		REQUEA
+952000-952FFF     (base 16)		REQUEA
+				9 RUE ROBERT
+				LYON    69006
+				FR
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+5E2000-5E2FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		Shanghai JaWay Information Technology Co., Ltd.
+5C1000-5C1FFF     (base 16)		Shanghai JaWay Information Technology Co., Ltd.
+				Rm. 1102, Science and Technology Building A, No. 900 of Yishan Road, Xuhui District,
+				Shanghai    200030
+				CN
+
+70-B3-D5   (hex)		Telecast Inc.
+BE9000-BE9FFF     (base 16)		Telecast Inc.
+				Jindaiji-Motomachi 3-36-11-103
+				Chofu  Tokyo  182-0017
+				JP
+
+70-B3-D5   (hex)		Code Blue Corporation 
+6D0000-6D0FFF     (base 16)		Code Blue Corporation 
+				259 Hedcor Street
+				Holland  MI  49423
+				US
+
+70-B3-D5   (hex)		NimbeLink Corp
+16F000-16FFFF     (base 16)		NimbeLink Corp
+				3131 Fernbrook LN N, Ste 100
+				Plymouth  MN  55447
+				US
+
+70-B3-D5   (hex)		Birket Engineering
+188000-188FFF     (base 16)		Birket Engineering
+				162 W Plant St
+				Winter Garden  FL  34787
+				US
+
+70-B3-D5   (hex)		Geppetto Electronics
+11F000-11FFFF     (base 16)		Geppetto Electronics
+				2784 Homestead Rd. #323
+				Santa Clara  CA  95051
+				US
+
+70-B3-D5   (hex)		Zhejiang Hao Teng Electronic Technology Co., Ltd.
+563000-563FFF     (base 16)		Zhejiang Hao Teng Electronic Technology Co., Ltd.
+				Liandu District Information Industry Park 12
+				Lishui  ZhejiangZhejiang Hao Teng Electronic Technology Co., Ltd.  323000
+				CN
+
+70-B3-D5   (hex)		F-domain corporation
+8C2000-8C2FFF     (base 16)		F-domain corporation
+				157 Nakayashiki Sobue town
+				Inazawa city   Aichi pref.  495-0001
+				JP
+
+70-B3-D5   (hex)		VAPE RAIL INTERNATIONAL
+597000-597FFF     (base 16)		VAPE RAIL INTERNATIONAL
+				9 RUE DES NOISETIERS
+				MONTREAL LA CLUSE    01460
+				FR
+
+70-B3-D5   (hex)		EarTex
+462000-462FFF     (base 16)		EarTex
+				41 Corsham Street
+				London  England  N1 6DR
+				GB
+
+70-B3-D5   (hex)		REO AG
+850000-850FFF     (base 16)		REO AG
+				Brühlerstr. 100
+				Solingen    42657
+				DE
+
+70-B3-D5   (hex)		CT Company
+5D5000-5D5FFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+70-B3-D5   (hex)		Dream I System Co., Ltd
+04B000-04BFFF     (base 16)		Dream I System Co., Ltd
+				#510, 298, Beotkkot-ro, Ceumcheon-gu
+				Seoul    08510
+				KR
+
+70-B3-D5   (hex)		DOSADORES ALLTRONIC
+C3E000-C3EFFF     (base 16)		DOSADORES ALLTRONIC
+				RUA VALENTE DE NOVAIS, 270
+				SÃO PAULO  SAO PAULO  08120-420
+				BR
+
+70-B3-D5   (hex)		Novathings
+81E000-81EFFF     (base 16)		Novathings
+				100 Impasse des houilleres
+				MEYREUIL    13590
+				FR
+
+70-B3-D5   (hex)		Honeywell Safety Products USA, Inc
+C0F000-C0FFFF     (base 16)		Honeywell Safety Products USA, Inc
+				7828 Waterville Road
+				San Diego  CA  92154
+				US
+
+70-B3-D5   (hex)		Applied Materials
+7E1000-7E1FFF     (base 16)		Applied Materials
+				35 Dory Rd
+				Gloucester  MA  01930
+				US
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+BCC000-BCCFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		OSR R&D ISRAEL LTD
+AB0000-AB0FFF     (base 16)		OSR R&D ISRAEL LTD
+				24 Magshimim St
+				Petah-Tikva    4934833
+				IL
+
+70-B3-D5   (hex)		Motec Pty Ltd
+B77000-B77FFF     (base 16)		Motec Pty Ltd
+				121 Merrindale Drive
+				Croydon South  Victoria  3136
+				AU
+
+70-B3-D5   (hex)		CRDE
+ACD000-ACDFFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		New Imaging Technologies
+2AC000-2ACFFF     (base 16)		New Imaging Technologies
+				1 impasse de la noisette, Bâtiment D, BP 426
+				Verrières le buisson  Essonne  91370
+				FR
+
+70-B3-D5   (hex)		Alpiq InTec Management AG
+833000-833FFF     (base 16)		Alpiq InTec Management AG
+				Hohlstrasse 188
+				Zürich     8004
+				CH
+
+70-B3-D5   (hex)		Netberg
+CCF000-CCFFFF     (base 16)		Netberg
+				2F-1 No.36, Park St., Nangang District
+				Taipei    11560
+				TW
+
+70-B3-D5   (hex)		Hudson Robotics
+1DB000-1DBFFF     (base 16)		Hudson Robotics
+				10 Stern Ave
+				Springfield  NJ  07081
+				US
+
+70-B3-D5   (hex)		Asis Pro
+593000-593FFF     (base 16)		Asis Pro
+				27 Shaked st
+				Hevel Modiin Industrial Park    7319900
+				IL
+
+70-B3-D5   (hex)		Orbit International
+B3F000-B3FFFF     (base 16)		Orbit International
+				80 Cabot Ct
+				Hauppauge  NY  11788
+				US
+
+70-B3-D5   (hex)		COMTECH Kft.
+09F000-09FFFF     (base 16)		COMTECH Kft.
+				Torok Ignac u. 66.
+				Gyor  Gyor-Moson-Sopron  9028
+				HU
+
+70-B3-D5   (hex)		Eginity, Inc.
+910000-910FFF     (base 16)		Eginity, Inc.
+				37 N Orange Ave STE 770
+				Orlando    32801
+				US
+
+70-B3-D5   (hex)		Schneider Electric Motion USA
+7D1000-7D1FFF     (base 16)		Schneider Electric Motion USA
+				370 N. Main St.
+				Marlborough  CT  06447
+				US
+
+70-B3-D5   (hex)		BELECTRIC GmbH
+2B9000-2B9FFF     (base 16)		BELECTRIC GmbH
+				Wadenbrunner Str, 10
+				Kolitzheim  Bavaria  97509
+				DE
+
+70-B3-D5   (hex)		Xemex NV
+AAA000-AAAFFF     (base 16)		Xemex NV
+				Metropoolstraat 11a
+				Schoten  Antwerp  BE-2900
+				BE
+
+70-B3-D5   (hex)		KST technology
+012000-012FFF     (base 16)		KST technology
+				164-1, KST b/d., Bangi-dong, songpa-gu
+				SEOUL  N/A  138-050
+				KR
+
+70-B3-D5   (hex)		J-Factor Embedded Technologies
+19E000-19EFFF     (base 16)		J-Factor Embedded Technologies
+				1441 Laura Lane #201
+				Pottstown  PA  19464
+				US
+
+70-B3-D5   (hex)		ADTEK
+1EF000-1EFFFF     (base 16)		ADTEK
+				4F-18,No.14,Lane 609,Sec.5,Chongsin Rd.,Sanchong Dist,
+				New Taipei City  Taiwan,(R.O.C)  24159
+				TW
+
+70-B3-D5   (hex)		Becton Dickinson
+36A000-36AFFF     (base 16)		Becton Dickinson
+				7 Loveton Circle
+				Sparks  MD  21152
+				US
+
+70-B3-D5   (hex)		Vitsch Electronics
+6A8000-6A8FFF     (base 16)		Vitsch Electronics
+				Dragonder 24-E
+				Valkenswaard  Noord-Brabant  5554 GM
+				NL
+
+70-B3-D5   (hex)		Intercomp S.p.A.
+9B6000-9B6FFF     (base 16)		Intercomp S.p.A.
+				Via della Scienza, 27
+				Verona    37139
+				IT
+
+70-B3-D5   (hex)		carbonTRACK
+F35000-F35FFF     (base 16)		carbonTRACK
+				Level 2 104 Burwood Road
+				Hawthorn   Vic  3122
+				AU
+
+70-B3-D5   (hex)		PPI Inc.
+A21000-A21FFF     (base 16)		PPI Inc.
+				Cheomdan-Gwagiro 345
+				Gwangju  Buk-gu  61 008
+				KR
+
+70-B3-D5   (hex)		GridBridge Inc
+CE5000-CE5FFF     (base 16)		GridBridge Inc
+				130 Penmarc Drive, Suite 101
+				Raleigh  NC  27603
+				US
+
+70-B3-D5   (hex)		Sea Air and Land Communications Ltd
+5AB000-5ABFFF     (base 16)		Sea Air and Land Communications Ltd
+				10 Magdala Place
+				Christchurch  Canterbury  8024
+				NZ
+
+70-B3-D5   (hex)		Firefly RFID Solutions
+8B3000-8B3FFF     (base 16)		Firefly RFID Solutions
+				1521 Boone Trail Rd
+				Sanford  NC  27330
+				US
+
+70-B3-D5   (hex)		Bartec GmbH
+AAD000-AADFFF     (base 16)		Bartec GmbH
+				Max-Eyth-Str. 16
+				Bad Mergentheim    97980 
+				DE
+
+70-B3-D5   (hex)		POLSYSTEM SI SP. Z O.O., S.K.A.
+B9E000-B9EFFF     (base 16)		POLSYSTEM SI SP. Z O.O., S.K.A.
+				Francuska 92
+				Wrocław  Dolnośląskie  54-405
+				PL
+
+70-B3-D5   (hex)		TSUBAKIMOTO CHAIN CO.
+85B000-85BFFF     (base 16)		TSUBAKIMOTO CHAIN CO.
+				Nakanoshima Mitsui Building, 6F, 3-3-3, Nakanoshima
+				Kita-ku  Osaka  530-0005
+				JP
+
+70-B3-D5   (hex)		Vtron Pty Ltd
+E0F000-E0FFFF     (base 16)		Vtron Pty Ltd
+				Unit 2, 62 Township Drive West
+				West Burleigh  Queensland  4219
+				AU
+
+70-B3-D5   (hex)		Shanghai Longpal Communication Equipment Co., Ltd.
+896000-896FFF     (base 16)		Shanghai Longpal Communication Equipment Co., Ltd.
+				18 LongPal Building, GuangFuLin Rd 4855
+				Shanghai    201616
+				CN
+
+70-B3-D5   (hex)		GreenFlux
+12E000-12EFFF     (base 16)		GreenFlux
+				Mauritskade 63
+				Amsterdam    1092 AD
+				NL
+
+70-B3-D5   (hex)		SLAT
+349000-349FFF     (base 16)		SLAT
+				11 Rue Jean-Elysée DUPUY
+				Champagne au Mont d'Or  Rhône  69543
+				FR
+
+70-B3-D5   (hex)		CIELLE S.R.L.
+12C000-12CFFF     (base 16)		CIELLE S.R.L.
+				VIA TONIOLO, 6
+				PERO DI BREDA DI PIAVE  TREVISO  31030
+				IT
+
+70-B3-D5   (hex)		QuirkLogic
+885000-885FFF     (base 16)		QuirkLogic
+				3600 4th Street SE
+				Calgary  Alberta  T2G2W3
+				CA
+
+70-B3-D5   (hex)		Critical Link LLC
+761000-761FFF     (base 16)		Critical Link LLC
+				6712 BROOKLAWN PKWY
+				SYRACUSE  NY  13211
+				US
+
+70-B3-D5   (hex)		Moving iMage Technologies LLC
+4C5000-4C5FFF     (base 16)		Moving iMage Technologies LLC
+				17760 Newhope Street Suite B
+				Fountain Valley  CA  92708
+				US
+
+70-B3-D5   (hex)		Ideas srl
+9FA000-9FAFFF     (base 16)		Ideas srl
+				Via dei Brughi, 21
+				Gessate  Milan  20060
+				IT
+
+70-B3-D5   (hex)		M2M Cybernetics Pvt Ltd
+FCA000-FCAFFF     (base 16)		M2M Cybernetics Pvt Ltd
+				GH-11, Ahinsa Khand 2, Indirapuram
+				Ghaziabad  Uttar Pradesh  201010
+				IN
+
+70-B3-D5   (hex)		Procon Electronics Pty Ltd
+55B000-55BFFF     (base 16)		Procon Electronics Pty Ltd
+				P O Box 164
+				Seven Hills  NSW  1730
+				AU
+
+70-B3-D5   (hex)		Samriddi Automations Pvt. Ltd.
+11C000-11CFFF     (base 16)		Samriddi Automations Pvt. Ltd.
+				F-365
+				Noida  up  201307
+				IN
+
+70-B3-D5   (hex)		Promess Inc.
+1DA000-1DAFFF     (base 16)		Promess Inc.
+				11429 Grand River
+				Brighton  MI  48116
+				US
+
+70-B3-D5   (hex)		GIFAS-ELECTRIC GmbH
+650000-650FFF     (base 16)		GIFAS-ELECTRIC GmbH
+				Dietrichstrasse  2
+				Rheineck  St.Gallen  9424
+				CH
+
+70-B3-D5   (hex)		Netool LLC
+75B000-75BFFF     (base 16)		Netool LLC
+				18515 san Antonio street
+				fountain valley  CA  92708
+				US
+
+70-B3-D5   (hex)		ROMO Wind A/S
+147000-147FFF     (base 16)		ROMO Wind A/S
+				Olof Palmes Allé 47
+				Aarhus N    8200
+				DK
+
+70-B3-D5   (hex)		Zoe Medical
+721000-721FFF     (base 16)		Zoe Medical
+				460 Boston Street
+				Topsfield  MA  01983
+				US
+
+70-B3-D5   (hex)		UNMANNED SPA
+0D2000-0D2FFF     (base 16)		UNMANNED SPA
+				sevilla lote 13 s/n 
+				Valdivia  Los Rios  5090000
+				CL
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+C91000-C91FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		ART SPA
+6B5000-6B5FFF     (base 16)		ART SPA
+				VOC.PISCHIELLO, 20
+				PASSIGNANO SUL TRASIMENO  PG  06065
+				IT
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+65A000-65AFFF     (base 16)		Aplex Technology Inc.
+				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+7CE000-7CEFFF     (base 16)		Aplex Technology Inc.
+				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+70-B3-D5   (hex)		GWF MessSysteme AG
+387000-387FFF     (base 16)		GWF MessSysteme AG
+				Obergrundstrasse 119
+				Luzern    6002
+				CH
+
+70-B3-D5   (hex)		Power Ltd.
+776000-776FFF     (base 16)		Power Ltd.
+				Kazal str. 64-66
+				Budapest    1031
+				HU
+
+70-B3-D5   (hex)		CTG sp. z o. o.
+396000-396FFF     (base 16)		CTG sp. z o. o.
+				ul. Katowicka 24
+				Jastrzebie-Zdroj    44-335
+				PL
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+297000-297FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		UB330.net d.o.o.
+B72000-B72FFF     (base 16)		UB330.net d.o.o.
+				Radio cesta 1
+				Domzale    1230
+				SI
+
+70-B3-D5   (hex)		Living Water
+367000-367FFF     (base 16)		Living Water
+				629 Yorkshire Ct
+				Livermore  CA  94551
+				US
+
+70-B3-D5   (hex)		Telaeris, Inc.
+7DE000-7DEFFF     (base 16)		Telaeris, Inc.
+				9123 Chesapeake Dr.
+				San Diego  CA  92123
+				US
+
+70-B3-D5   (hex)		WiTagg, Inc
+4FE000-4FEFFF     (base 16)		WiTagg, Inc
+				1045 Linda Vista Avenue
+				Mountain View  CA  94043
+				US
+
+70-B3-D5   (hex)		Andium
+0BD000-0BDFFF     (base 16)		Andium
+				609 E 11th Street, 2B
+				New York  NY  10009
+				US
+
+70-B3-D5   (hex)		StreamPlay Oy Ltd
+D2B000-D2BFFF     (base 16)		StreamPlay Oy Ltd
+				Sarankulmankatu 12 B
+				Tampere    33900
+				FI
+
+70-B3-D5   (hex)		KMtronic ltd
+3A5000-3A5FFF     (base 16)		KMtronic ltd
+				Dobri Czintulov 28A str.
+				 Gorna Oryahovica  VT  5100
+				BG
+
+70-B3-D5   (hex)		Spanawave Corporation
+DFF000-DFFFFF     (base 16)		Spanawave Corporation
+				1640 Lead Hill Blvd., Suite 130
+				Roseville  CA  95661
+				US
+
+70-B3-D5   (hex)		SEASON DESIGN TECHNOLOGY
+10A000-10AFFF     (base 16)		SEASON DESIGN TECHNOLOGY
+				FLOOR 4, WARDS EXCHANGE, 199 ECCLESALL ROAD
+				SHEFFIELD  SOUTH YORKSHIRE  S11 8HW
+				GB
+
+70-B3-D5   (hex)		Groupe Citypassenger Inc
+E7E000-E7EFFF     (base 16)		Groupe Citypassenger Inc
+				1117 sainte catherine ouest
+				Montreal  Quebec  H3B1H9
+				CA
+
+70-B3-D5   (hex)		Voltaware Limited
+277000-277FFF     (base 16)		Voltaware Limited
+				282 Earls Court Road
+				London  London  SW5 9AS
+				GB
+
+70-B3-D5   (hex)		United States Technologies Inc.
+74F000-74FFFF     (base 16)		United States Technologies Inc.
+				1701 Pollitt Drive
+				Fair Lawn  NJ  07410
+				US
+
+70-B3-D5   (hex)		Sycomp Electronic GmbH
+3F6000-3F6FFF     (base 16)		Sycomp Electronic GmbH
+				Einsteinstr 7
+				Dachau    85221
+				DE
+
+70-B3-D5   (hex)		GILLAM-FEI S.A.
+31E000-31EFFF     (base 16)		GILLAM-FEI S.A.
+				Mont St Martin 58
+				LIEGE    B4000
+				BE
+
+70-B3-D5   (hex)		ISAC SRL
+ADE000-ADEFFF     (base 16)		ISAC SRL
+				via Maestri del Lavoro 30
+				CASCINA  PISA  56021
+				IT
+
+70-B3-D5   (hex)		HMicro Inc
+8C5000-8C5FFF     (base 16)		HMicro Inc
+				39355 California St., Suite 303
+				Fremont  null  94538
+				US
+
+70-B3-D5   (hex)		Par-Tech, Inc.
+47C000-47CFFF     (base 16)		Par-Tech, Inc.
+				139 Premier Dr.
+				Lake Orion  MI  48359
+				US
+
+70-B3-D5   (hex)		Beeper Communications Ltd.
+8EF000-8EFFFF     (base 16)		Beeper Communications Ltd.
+				No6, Hataas str.
+				Ramat-Gan    5251247
+				IL
+
+70-B3-D5   (hex)		Impulse Networks Pte Ltd
+493000-493FFF     (base 16)		Impulse Networks Pte Ltd
+				1 Raffles Place, #44-08 Raffles Place
+				Singapore    048616
+				SG
+
+70-B3-D5   (hex)		CARE PVT LTD
+FE4000-FE4FFF     (base 16)		CARE PVT LTD
+				19-A Attaturk Avenue G-5/1
+				Islamabad  Fedral Capital  44000
+				PK
+
+70-B3-D5   (hex)		Silicon Safe Ltd
+544000-544FFF     (base 16)		Silicon Safe Ltd
+				St John's Innovation centre, Crowley road
+				Cambridge  Cambridgeshire  Cb4 ows
+				GB
+
+70-B3-D5   (hex)		Les distributions Multi-Secure incorporee
+FEB000-FEBFFF     (base 16)		Les distributions Multi-Secure incorporee
+				7 Provost
+				La Prairie  Quebec  J5R 5Y7
+				CA
+
+70-B3-D5   (hex)		Redco Audio Inc
+429000-429FFF     (base 16)		Redco Audio Inc
+				1701 Stratford Ave
+				Stratford  CT  06615
+				US
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+202000-202FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Lucas-Nülle GmbH
+0B8000-0B8FFF     (base 16)		Lucas-Nülle GmbH
+				Siemensstr. 2
+				Kerpen  NRW  50170
+				DE
+
+70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
+B93000-B93FFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
+				Sector Foresta 43, local 26
+				Tres Cantos  Madrid  28760
+				ES
+
+70-B3-D5   (hex)		CRDE
+592000-592FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		RIC Electronics
+12B000-12BFFF     (base 16)		RIC Electronics
+				1 - 5628 Riverbend Drive
+				Burnaby  BC  V3N 0C1
+				CA
+
+70-B3-D5   (hex)		Vocality International Ltd
+0FE000-0FEFFF     (base 16)		Vocality International Ltd
+				Lydling Barn
+				Shackleford  Surrey  GU8 6AP
+				GB
+
+70-B3-D5   (hex)		2-Observe
+14D000-14DFFF     (base 16)		2-Observe
+				Rue du Bois Saint-Jean, 15/1
+				Sereing  Liège  4102
+				BE
+
+70-B3-D5   (hex)		FLEXTRONICS
+216000-216FFF     (base 16)		FLEXTRONICS
+				Carretera Base Aerea 5850 int 4
+				Zapopan  Jalisco  45136
+				MX
+
+70-B3-D5   (hex)		Dynacard Co., Ltd.
+955000-955FFF     (base 16)		Dynacard Co., Ltd.
+				1F.,No.19-1,Ln.222,Dunhua N.Rd.
+				Taipei  Tapei  105
+				TW
+
+70-B3-D5   (hex)		GLIAL TECHNOLOGY
+6A1000-6A1FFF     (base 16)		GLIAL TECHNOLOGY
+				7 Rue Aristide Briand
+				Nuits-Saint-Georges    21700
+				FR
+
+70-B3-D5   (hex)		Integrated Control Corp.
+895000-895FFF     (base 16)		Integrated Control Corp.
+				748 Park Ave
+				Huntington  NY  11743
+				US
+
+70-B3-D5   (hex)		TTI Ltd
+3CA000-3CAFFF     (base 16)		TTI Ltd
+				5-y Donskoy pr-d, 15с2
+				Moscow    119334
+				RU
+
+70-B3-D5   (hex)		CASWA
+5BE000-5BEFFF     (base 16)		CASWA
+				Unit2/33 Horus bend
+				Bibra Lake  WA  6163
+				AU
+
+70-B3-D5   (hex)		Detec Systems Ltd
+13C000-13CFFF     (base 16)		Detec Systems Ltd
+				1728 Shearwater Terrace
+				Sidney  BC  V8L 5L4
+				CA
+
+70-B3-D5   (hex)		Toray　Medical　Co.,Ltd
+2FA000-2FAFFF     (base 16)		Toray　Medical　Co.,Ltd
+				405-65　onoue　ashitaka
+				numadu  shizuoka  410-0001
+				JP
+
+70-B3-D5   (hex)		Solvera Lynx d.d.
+7F8000-7F8FFF     (base 16)		Solvera Lynx d.d.
+				Stegne 23A
+				1000 Ljubljana  Ljubljana  00386
+				SI
+
+70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
+4C4000-4C4FFF     (base 16)		OOO Research and Production Center Computer Technologies
+				Komsomolsky avenue, 90-17
+				Perm  Perm Region  614010
+				RU
+
+70-B3-D5   (hex)		Momentum Data Systems
+E45000-E45FFF     (base 16)		Momentum Data Systems
+				5432 Bolsa Ave Unit B
+				Huntington Beach  CA  92649
+				US
+
+70-B3-D5   (hex)		Skreens
+EB7000-EB7FFF     (base 16)		Skreens
+				22 Ames Road
+				Foxboro  MA  02035
+				US
+
+70-B3-D5   (hex)		VirtualHere Pty. Ltd.
+F56000-F56FFF     (base 16)		VirtualHere Pty. Ltd.
+				6/5 Wentworth St
+				Manly  NSW  2095
+				AU
+
+70-B3-D5   (hex)		ABB
+892000-892FFF     (base 16)		ABB
+				Fulachstrasse 150
+				Schaffhausen    8200
+				CH
+
+70-B3-D5   (hex)		Transportal Solutions Ltd
+EA2000-EA2FFF     (base 16)		Transportal Solutions Ltd
+				The Offices @ The Old Cow Barn
+				Masham  North Yorkshire  HG4 4NE
+				GB
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+148000-148FFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		Cubitech
+893000-893FFF     (base 16)		Cubitech
+				4-6 Kiprou str
+				Tavros  Athens  17778
+				GR
+
+70-B3-D5   (hex)		Kokam Co., Ltd
+A2E000-A2EFFF     (base 16)		Kokam Co., Ltd
+				1022, Gyeongsu-daero, Jangan-gu
+				Suwon-si  Gyeonggi-do  16203
+				KR
+
+70-B3-D5   (hex)		Digital Outfit
+353000-353FFF     (base 16)		Digital Outfit
+				329 15th St E
+				North Vancouver  BC  V7L 2R6
+				CA
+
+70-B3-D5   (hex)		A.F.MENSAH, INC
+F5B000-F5BFFF     (base 16)		A.F.MENSAH, INC
+				252 NASSAU ST, 2ND FLOOR
+				PRINCETON  NJ  08542
+				US
+
+70-B3-D5   (hex)		Business Marketers Group, Inc.
+A72000-A72FFF     (base 16)		Business Marketers Group, Inc.
+				N56W24720 N. Corporate Circle
+				Sussex  WI  53089
+				US
+
+70-B3-D5   (hex)		BBR Verkehrstechnik GmbH
+AEA000-AEAFFF     (base 16)		BBR Verkehrstechnik GmbH
+				Pillaustrasse 1e
+				Braunschweig    38126
+				DE
+
+70-B3-D5   (hex)		Qowisio
+F6D000-F6DFFF     (base 16)		Qowisio
+				4 rue fulton
+				Angers    49000
+				FR
+
+70-B3-D5   (hex)		TATTILE SRL
+0D6000-0D6FFF     (base 16)		TATTILE SRL
+				via G.Donizetti 1/3/5
+				Brescia    25030
+				IT
+
+70-B3-D5   (hex)		infrachip
+551000-551FFF     (base 16)		infrachip
+				Danwan-Gu, Yeonsuwan-Ro, Post-Bi Center
+				Ansan  Gyeonggi  425-849
+				KR
+
+70-B3-D5   (hex)		MAHLE
+B7A000-B7AFFF     (base 16)		MAHLE
+				23030 Haggerty Road
+				Farmington Hills  MI  48335
+				US
+
+70-B3-D5   (hex)		Becton Dickinson
+6C7000-6C7FFF     (base 16)		Becton Dickinson
+				7 Loveton Circle
+				Sparks  MD  21152
+				US
+
+70-B3-D5   (hex)		Shenzhen Riitek Technology Co.,Ltd
+913000-913FFF     (base 16)		Shenzhen Riitek Technology Co.,Ltd
+				4F, Building1, Zhongkenou Industry Park, Hezhou Development, Baoan district,
+				Shenzhen,    518000
+				CN
+
+70-B3-D5   (hex)		BEEcube Inc.
+CC1000-CC1FFF     (base 16)		BEEcube Inc.
+				39465 Paseo Padre Pkwy
+				Fremont  CA  94538
+				US
+
+70-B3-D5   (hex)		Syncopated Engineering Inc
+522000-522FFF     (base 16)		Syncopated Engineering Inc
+				13136 Williamfield Dr
+				Ellicott City  MD  21042
+				US
+
+70-B3-D5   (hex)		EMAC, Inc.
+654000-654FFF     (base 16)		EMAC, Inc.
+				2390 EMAC Way
+				Carbondale  IL  62901
+				US
+
+70-B3-D5   (hex)		Kuebrich Ingeniergesellschaft mbh & Co. KG
+CB6000-CB6FFF     (base 16)		Kuebrich Ingeniergesellschaft mbh & Co. KG
+				Weissmuehle 10
+				Priesendorf    96170
+				DE
+
+70-B3-D5   (hex)		Zehnder Group Nederland
+426000-426FFF     (base 16)		Zehnder Group Nederland
+				Postbus 621
+				Zwolle    8000 AP  
+				NL
+
+70-B3-D5   (hex)		Rational Production srl Unipersonale
+D70000-D70FFF     (base 16)		Rational Production srl Unipersonale
+				Via L. Galvani 7/H
+				Albano S. Alessandro  Bergamo  24061
+				IT
+
+70-B3-D5   (hex)		Harbin Cheng Tian Technology Development Co., Ltd.
+CF4000-CF4FFF     (base 16)		Harbin Cheng Tian Technology Development Co., Ltd.
+				ROOM140，Building21A，145 Nantong Street
+				Harbin  Heilongjiang  150001
+				CN
+
+70-B3-D5   (hex)		SHEN ZHEN TTK TECHNOLOGY CO,LTD
+4B9000-4B9FFF     (base 16)		SHEN ZHEN TTK TECHNOLOGY CO,LTD
+				8/F, Nan Yuan commerical Bldg,Minzhi,Long Hua town,Baoan,district,Shenzhen
+				SHEN ZHEN   GuangDong  51813
+				CN
+
+70-B3-D5   (hex)		Electronic Navigation Ltd
+B7C000-B7CFFF     (base 16)		Electronic Navigation Ltd
+				65 Gaunt Street
+				Auckland    1010
+				NZ
+
+70-B3-D5   (hex)		Sinoembed
+83C000-83CFFF     (base 16)		Sinoembed
+				RM1105,No 2078,YueLiangWan Road,NanShan District
+				ShenZhen  GuangDong  518000
+				CN
+
+70-B3-D5   (hex)		NORTHBOUND NETWORKS PTY. LTD.
+6CD000-6CDFFF     (base 16)		NORTHBOUND NETWORKS PTY. LTD.
+				14 Sommersby Road
+				Point Cook  Victoria  3030
+				AU
+
+70-B3-D5   (hex)		Critical Link LLC
+AF9000-AF9FFF     (base 16)		Critical Link LLC
+				6712 Brooklawn Parkway
+				Syracuse  null  13211
+				US
+
+70-B3-D5   (hex)		WyreStorm Technologies Ltd
+D5A000-D5AFFF     (base 16)		WyreStorm Technologies Ltd
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+70-B3-D5   (hex)		WyreStorm Technologies Ltd
+D5B000-D5BFFF     (base 16)		WyreStorm Technologies Ltd
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+70-B3-D5   (hex)		Unitro Fleischmann
+C92000-C92FFF     (base 16)		Unitro Fleischmann
+				Gaildorfer Strasse 15
+				Backnang    71522
+				DE
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+F57000-F57FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		Sienna Corporation
+13B000-13BFFF     (base 16)		Sienna Corporation
+				475 Horizon drive
+				Suwanee  GA  30024
+				US
+
+70-B3-D5   (hex)		Monnit Corporation
+377000-377FFF     (base 16)		Monnit Corporation
+				450 South Simmons STE 670
+				Kaysville  UT  84037
+				US
+
+70-B3-D5   (hex)		Virta Laboratories, Inc.
+140000-140FFF     (base 16)		Virta Laboratories, Inc.
+				1327 Jones Dr
+				Ann Arbor  Michigan  48105
+				US
+
+70-B3-D5   (hex)		ARECO
+C07000-C07FFF     (base 16)		ARECO
+				114 chemin de Saint Marc
+				GRASSE  PACA  06130
+				FR
+
+70-B3-D5   (hex)		Foro Tel
+18D000-18DFFF     (base 16)		Foro Tel
+				77, Shaumyana  Str.
+				Rostov-na-Donu  UFO  344079
+				RU
+
+70-B3-D5   (hex)		SPX Flow Technology BV
+01F000-01FFFF     (base 16)		SPX Flow Technology BV
+				Munnikenheiweg 41
+				Etten-Leur  Noord-Braband  4879NE
+				NL
+
+70-B3-D5   (hex)		Nxcontrol system Co., Ltd.
+CA9000-CA9FFF     (base 16)		Nxcontrol system Co., Ltd.
+				10F, No. 257, Wenxing Rd.
+				Zhubei City  Hsinchu county  30264
+				TW
+
+70-B3-D5   (hex)		GridNavigator
+EDF000-EDFFFF     (base 16)		GridNavigator
+				200 Varick Street #508
+				New York  NY  10014
+				US
+
+70-B3-D5   (hex)		DSan Corporation
+DCA000-DCAFFF     (base 16)		DSan Corporation
+				142 Mineola Avenue
+				Roslyn Heights  NY  11577
+				US
+
+70-B3-D5   (hex)		IntelliDesign Pty Ltd
+061000-061FFF     (base 16)		IntelliDesign Pty Ltd
+				99 Bluestone Circuit
+				Seventeen Mile Rocks  Qld  4073
+				AU
+
+70-B3-D5   (hex)		ISPHER
+517000-517FFF     (base 16)		ISPHER
+				Chemin des Aulx 21
+				PLAN LES OUATES  CANTON DE GENEVE  1228
+				CH
+
+70-B3-D5   (hex)		LPA Excil Electronics
+383000-383FFF     (base 16)		LPA Excil Electronics
+				Ripley Drive
+				Wakefield  West Yorkshire  WF6 1QT
+				GB
+
+70-B3-D5   (hex)		HIPODROMO DE AGUA CALIENTE SA CV
+328000-328FFF     (base 16)		HIPODROMO DE AGUA CALIENTE SA CV
+				BLVD AGUA CALIENTE 12027
+				TIJUANA  BAJA CALIFORNIA  22420
+				MX
+
+70-B3-D5   (hex)		neocontrol soluções em automação
+891000-891FFF     (base 16)		neocontrol soluções em automação
+				rua santa fe 100
+				belo horizonte  MG  30320-130
+				BR
+
+70-B3-D5   (hex)		ERAESEEDS co.,ltd.
+8F0000-8F0FFF     (base 16)		ERAESEEDS co.,ltd.
+				284-2, WONHYORO3-GA, YONGSAN-GU
+				SEOUL    140-849
+				KR
+
+70-B3-D5   (hex)		Sportzcast
+D29000-D29FFF     (base 16)		Sportzcast
+				1144 Citrus Oaks Run
+				Winter Springs  FL  32708
+				US
+
+70-B3-D5   (hex)		TCI
+7F2000-7F2FFF     (base 16)		TCI
+				3541 Gateway Blvd
+				Fremont  CA  94538
+				US
+
+70-B3-D5   (hex)		DELTA
+E4B000-E4BFFF     (base 16)		DELTA
+				Venlighedsvej 4
+				Horsholm  Denmark  2970
+				DK
+
+70-B3-D5   (hex)		GLT Exports Ltd
+34C000-34CFFF     (base 16)		GLT Exports Ltd
+				Detection House
+				Swansea  County of Swansea  SA1 2EN
+				GB
+
+70-B3-D5   (hex)		Tanaka Electric Industry Co., Ltd.
+52D000-52DFFF     (base 16)		Tanaka Electric Industry Co., Ltd.
+				7-3-31 Takadono,
+				Osaka-shi  Osaka  535-0031
+				JP
+
+70-B3-D5   (hex)		Pantec Engineering AG
+BE5000-BE5FFF     (base 16)		Pantec Engineering AG
+				Industriering 21
+				Ruggell  Principality of Liechtenstein  9491
+				LI
+
+70-B3-D5   (hex)		Transtronic AB
+ECA000-ECAFFF     (base 16)		Transtronic AB
+				Fabriksgatan 1
+				Köping  Västmanland  73124
+				SE
+
+70-B3-D5   (hex)		Techworld Industries Ltd
+1AD000-1ADFFF     (base 16)		Techworld Industries Ltd
+				Unit 1705, 17/F, Nanyang Plaza, 57 Hung To Road,
+				Hong Kong  N/A  N/A
+				HK
+
+70-B3-D5   (hex)		Domus S.C.
+E6D000-E6DFFF     (base 16)		Domus S.C.
+				87 A Oriente #1623 Local A
+				Puebla  Puebla  72587
+				MX
+
+70-B3-D5   (hex)		Vena Engineering Corporation
+FBB000-FBBFFF     (base 16)		Vena Engineering Corporation
+				7 Hangar Way
+				Watsonville  CA  95076
+				US
+
+70-B3-D5   (hex)		OptiScan Biomedical Corp.
+088000-088FFF     (base 16)		OptiScan Biomedical Corp.
+				24590 Clawiter Road
+				Hayward  CA  94545
+				US
+
+70-B3-D5   (hex)		Cymtec Ltd
+903000-903FFF     (base 16)		Cymtec Ltd
+				Tredomen Business Centre
+				Ystrad Mynach  Caerphilly  CF82 7FN
+				GB
+
+70-B3-D5   (hex)		Trimble
+76D000-76DFFF     (base 16)		Trimble
+				6-8 Kondorfa street
+				Budapest    1116
+				HU
+
+70-B3-D5   (hex)		Acorde Technologies
+9F2000-9F2FFF     (base 16)		Acorde Technologies
+				PCTCAN - Av. Albert Einstein, 6
+				Santander  Cantabria  39011
+				ES
+
+70-B3-D5   (hex)		Elesar Limited
+03F000-03FFFF     (base 16)		Elesar Limited
+				Future Business Centre
+				Cambridge  Cambridgeshire  CB4 2HY
+				GB
+
+70-B3-D5   (hex)		ASL Holdings
+F73000-F73FFF     (base 16)		ASL Holdings
+				The Oaks
+				Pitsford  Northants  NN6 9AA
+				GB
+
+70-B3-D5   (hex)		VendNovation LLC
+1E5000-1E5FFF     (base 16)		VendNovation LLC
+				13400 NE 20th Street
+				Bellevue  WA  98005
+				US
+
+70-B3-D5   (hex)		Kron Medidores
+72D000-72DFFF     (base 16)		Kron Medidores
+				Rua Alexandre de Gusmão, 278
+				São Paulo  São Paulo  04760-020
+				BR
+
+70-B3-D5   (hex)		Remote Sensing Solutions, Inc.
+3D7000-3D7FFF     (base 16)		Remote Sensing Solutions, Inc.
+				3179 MAIN ST UNIT 3
+				BARNSTABLE  MA  02630
+				US
+
+70-B3-D5   (hex)		Revolution Retail Systems
+F54000-F54FFF     (base 16)		Revolution Retail Systems
+				1840 Hutton Drive
+				Carrollton  Texas  75006
+				US
+
+70-B3-D5   (hex)		Nasdaq
+0E6000-0E6FFF     (base 16)		Nasdaq
+				165 Broadway
+				New York  NY  10006
+				US
+
+70-B3-D5   (hex)		Tempus Fugit Consoles bvba
+087000-087FFF     (base 16)		Tempus Fugit Consoles bvba
+				Albert I-straat 40
+				Schepdaal  n/a  1703
+				BE
+
+70-B3-D5   (hex)		Cloud4Wi
+45F000-45FFFF     (base 16)		Cloud4Wi
+				22 Cleveland St
+				San Francisco  CALIFORNIA  94103
+				US
+
+70-B3-D5   (hex)		Software Systems Plus
+F01000-F01FFF     (base 16)		Software Systems Plus
+				9924 N. Ash Avenue
+				Kansas City  MISSOURI  64157
+				US
+
+70-B3-D5   (hex)		BELT S.r.l.
+E55000-E55FFF     (base 16)		BELT S.r.l.
+				Corso Vinzaglio, 2
+				Torino  TO  10121
+				IT
+
+70-B3-D5   (hex)		DSIT Solutions LTD
+B47000-B47FFF     (base 16)		DSIT Solutions LTD
+				Rechvam Zeevi 2
+				Givat-Shmuel    5401777
+				IL
+
+70-B3-D5   (hex)		Inspike S.R.L.
+2F1000-2F1FFF     (base 16)		Inspike S.R.L.
+				via G. De Castillia 7
+				Vimercate  MB  20871
+				IT
+
+70-B3-D5   (hex)		SEMEX-EngCon GmbH
+789000-789FFF     (base 16)		SEMEX-EngCon GmbH
+				Pforzheimer Str. 202D
+				Ettlingen  Baden-Wuerttemberg  76275
+				DE
+
+70-B3-D5   (hex)		B.E.A. sa
+0DF000-0DFFFF     (base 16)		B.E.A. sa
+				Allée des Noisetiers 5
+				Angleur  Liege  4031
+				BE
+
+70-B3-D5   (hex)		SP Controls
+823000-823FFF     (base 16)		SP Controls
+				930 Linde Ave
+				South San Francisco  CA  94080
+				US
+
+70-B3-D5   (hex)		eumig industrie-tv GmbH
+923000-923FFF     (base 16)		eumig industrie-tv GmbH
+				Gewerbeparkstr. 9
+				Anif  Salzburg  5081
+				AT
+
+70-B3-D5   (hex)		3City Electronics
+146000-146FFF     (base 16)		3City Electronics
+				Jaskowa Dolina 9/5a
+				Gdansk  pomorskie  80-252
+				PL
+
+70-B3-D5   (hex)		Subinitial LLC
+D9C000-D9CFFF     (base 16)		Subinitial LLC
+				10160 Three Oaks Way
+				Santee  CA  92071
+				US
+
+70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+435000-435FFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+70-B3-D5   (hex)		DSP DESIGN LTD
+208000-208FFF     (base 16)		DSP DESIGN LTD
+				TAPTON PARK INNOVATION CENTRE
+				CHESTERFIELD  DERBYSHIRE  S41 0TZ
+				GB
+
+70-B3-D5   (hex)		HOERMANN GmbH
+B78000-B78FFF     (base 16)		HOERMANN GmbH
+				Hauptstr. 45-47
+				Kirchseeon  Bavaria  85614
+				DE
+
+70-B3-D5   (hex)		Private
+D0A000-D0AFFF     (base 16)		Private
+
+70-B3-D5   (hex)		CSINFOTEL
+C97000-C97FFF     (base 16)		CSINFOTEL
+				3F, daedeok-daero 566, Yuseong-gu, Daejeon
+				Daejeon  Republic of Korea  305-340
+				KR
+
+70-B3-D5   (hex)		Protium Technologies, Inc.
+459000-459FFF     (base 16)		Protium Technologies, Inc.
+				10 Bearfoot Rd.
+				Northborough  MA  01532
+				US
+
+70-B3-D5   (hex)		Midfin Systems
+E4E000-E4EFFF     (base 16)		Midfin Systems
+				2509 152nd Ave NE
+				Redmond  WA  98052
+				US
+
+70-B3-D5   (hex)		Wallner Automation GmbH
+5A2000-5A2FFF     (base 16)		Wallner Automation GmbH
+				Kenzianweg 8
+				Schaerding  Upper Austria  A-4780
+				AT
+
+70-B3-D5   (hex)		Intelligent Energy Ltd
+C55000-C55FFF     (base 16)		Intelligent Energy Ltd
+				Holywell Park
+				Loughborough  Leicestershire  LE11 3GB
+				GB
+
+70-B3-D5   (hex)		Creotech Instruments S.A.
+91E000-91EFFF     (base 16)		Creotech Instruments S.A.
+				ul. Gen. L. Okulickiego 7/9
+				Piaseczno  Mazovia  05-500
+				PL
+
+70-B3-D5   (hex)		McKay Brothers LLC
+A4B000-A4BFFF     (base 16)		McKay Brothers LLC
+				2355 Broadway
+				Oakland  CA  94612
+				US
+
+70-B3-D5   (hex)		OrbiWise SA
+078000-078FFF     (base 16)		OrbiWise SA
+				c/o Fongit
+				Plan-les-Ouates  Geneva  1228
+				CH
+
+70-B3-D5   (hex)		Trident RFID Pty Ltd
+73E000-73EFFF     (base 16)		Trident RFID Pty Ltd
+				Unit 1/24 Redcliffe Gardens Drive
+				Clontarf  QLD  4019
+				AU
+
+70-B3-D5   (hex)		APEN GROUP SpA (VAT IT08767740155)
+EAB000-EABFFF     (base 16)		APEN GROUP SpA (VAT IT08767740155)
+				Via Isonzo 1
+				Pessano con Bornago  MI  20060
+				IT
+
+70-B3-D5   (hex)		ACD Elektronik GmbH
+C5B000-C5BFFF     (base 16)		ACD Elektronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		Getein Biotechnology Co.,ltd
+E90000-E90FFF     (base 16)		Getein Biotechnology Co.,ltd
+				No.9 Bofu Road,Luhe District, Nanjing,china
+				Nanjing  jiangsu  211505
+				CN
+
+70-B3-D5   (hex)		Russian Telecom Equipment Company
+0D7000-0D7FFF     (base 16)		Russian Telecom Equipment Company
+				3, Kapranov lane
+				Moscow  Moscow  123242
+				RU
+
+70-B3-D5   (hex)		WiViCom Co., Ltd.
+B29000-B29FFF     (base 16)		WiViCom Co., Ltd.
+				602 Shichiku Sogo Building
+				Niigata  Niigata  950-0916
+				JP
+
+70-B3-D5   (hex)		Tornado Modular Systems
+CF6000-CF6FFF     (base 16)		Tornado Modular Systems
+				Inzhenernaya st. 4a
+				Novosibirsk  Novosibirsk  630128
+				RU
+
+70-B3-D5   (hex)		Solace Systems Inc.
+44E000-44EFFF     (base 16)		Solace Systems Inc.
+				535 Legget Drive,
+				Kanata  Ontario  K2K3B8
+				CA
+
+70-B3-D5   (hex)		Verti Tecnologia
+CB8000-CB8FFF     (base 16)		Verti Tecnologia
+				Praça Osório, 437, 5º andar
+				Curitiba  Parana  80020-010
+				BR
+
+70-B3-D5   (hex)		HEADROOM Broadcast GmbH
+D48000-D48FFF     (base 16)		HEADROOM Broadcast GmbH
+				RudowerChaussee 29/31
+				Berlin  Berlin  12489
+				DE
+
+70-B3-D5   (hex)		Telenor Connexion AB
+27D000-27DFFF     (base 16)		Telenor Connexion AB
+				116 88
+				Stockholm  Sverige  SE-116 88
+				SE
+
+70-B3-D5   (hex)		Datasat Digital Entertainment
+B24000-B24FFF     (base 16)		Datasat Digital Entertainment
+				9631 Topanga Canyon Place
+				Chatsworth  California  91311
+				US
+
+70-B3-D5   (hex)		Sensortech Systems Inc.
+BEF000-BEFFFF     (base 16)		Sensortech Systems Inc.
+				2221 E. Celsius Avenue
+				Oxnard  CA  93030
+				US
+
+70-B3-D5   (hex)		Imagine Inc.
+3D2000-3D2FFF     (base 16)		Imagine Inc.
+				2-24-1-915 Kamiosaki
+				Shinagawa-Ku  Tokyo  141-0021
+				JP
+
+70-B3-D5   (hex)		Task Sistemas
+181000-181FFF     (base 16)		Task Sistemas
+				Rua Visconde de Ouro Preto 5/8
+				Rio de Janeiro  RJ  22250180
+				BR
+
+70-B3-D5   (hex)		Sicon srl
+36C000-36CFFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Bandelin electronic GmbH & Co. KG
+A99000-A99FFF     (base 16)		Bandelin electronic GmbH & Co. KG
+				Heinrichstraße 3-4
+				Berlin  Berlin  12207
+				DE
+
+70-B3-D5   (hex)		TOFWERK AG
+732000-732FFF     (base 16)		TOFWERK AG
+				Uttigenstrasse 22
+				Thun  BE  3600
+				CH
+
+70-B3-D5   (hex)		Becker Nachrichtentechnik GmbH
+820000-820FFF     (base 16)		Becker Nachrichtentechnik GmbH
+				Kapellenweg 3
+				Asbach  Rheinland-Pfalz  53567
+				DE
+
+70-B3-D5   (hex)		LSL systems
+58F000-58FFFF     (base 16)		LSL systems
+				303. SanHak. Hallym university.
+				Chuncheon.  KW  200-702
+				KR
+
+70-B3-D5   (hex)		Assembly Contracts Ltd
+B8F000-B8FFFF     (base 16)		Assembly Contracts Ltd
+				Ledson Road
+				Manchester  Lancashire  M23 9GP
+				GB
+
+70-B3-D5   (hex)		POLVISION
+610000-610FFF     (base 16)		POLVISION
+				ul. Witkowska 16
+				Wrocław  woj. dolnośląskie  51-003
+				PL
+
+70-B3-D5   (hex)		HUSTY M.Styczen J.Hupert Sp.J.
+77C000-77CFFF     (base 16)		HUSTY M.Styczen J.Hupert Sp.J.
+				Rzepakowa 5e
+				Krakow  malopolska  31-989
+				PL
+
+70-B3-D5   (hex)		PANORAMIC POWER
+07D000-07DFFF     (base 16)		PANORAMIC POWER
+				20 ATIR YEDA ST.
+				KFAR-SABA  ISRAEL  44643
+				IL
+
+70-B3-D5   (hex)		DTECH Labs, Inc.
+CFF000-CFFFFF     (base 16)		DTECH Labs, Inc.
+				22876 Shaw Rd
+				Sterling  Virginia  20166
+				US
+
+70-B3-D5   (hex)		NimbeLink Corp
+D3B000-D3BFFF     (base 16)		NimbeLink Corp
+				3131 Fernbrook LN N, Ste 100
+				Plymouth  MN  55447
+				US
+
+70-B3-D5   (hex)		iotec GmbH
+E28000-E28FFF     (base 16)		iotec GmbH
+				Albert-Einstein-Str. 1
+				Osnabrück  Niedersachsen  49076
+				DE
+
+70-B3-D5   (hex)		June Automation Singapore Pte. Ltd.
+CE7000-CE7FFF     (base 16)		June Automation Singapore Pte. Ltd.
+				blk4008 #02-03,
+				Singapore  N/A  569625
+				SG
+
+70-B3-D5   (hex)		Thurlby Thandar Instruments LTD
+E58000-E58FFF     (base 16)		Thurlby Thandar Instruments LTD
+				Glebe Road
+				Huntingdon  Cambridgeshire  PE29 7DR
+				GB
+
+70-B3-D5   (hex)		Future Skies
+C43000-C43FFF     (base 16)		Future Skies
+				1333 Campus Parkway
+				Neptune  New Jersey  07753
+				US
+
+70-B3-D5   (hex)		Xafax Nederland bv
+EC1000-EC1FFF     (base 16)		Xafax Nederland bv
+				Postbus 107
+				Alkmaar  NH  1800AC
+				NL
+
+70-B3-D5   (hex)		LightDec GmbH & Co. KG
+CF1000-CF1FFF     (base 16)		LightDec GmbH & Co. KG
+				Robert-Bosch-Str. 6
+				Ingolstadt  Bavaria  85053
+				DE
+
+70-B3-D5   (hex)		Rosslare Enterprises Limited
+682000-682FFF     (base 16)		Rosslare Enterprises Limited
+				Flat 912 Wing Fat Industrial Building
+				Kowloon Bay  Kowloon  
+				HK
+
+70-B3-D5   (hex)		Datum Electronics Limited
+250000-250FFF     (base 16)		Datum Electronics Limited
+				Needles Building
+				East Cowes  Isle of Wight  PO32 6RF
+				GB
+
+70-B3-D5   (hex)		PAVO TASARIM ÜRETİM TİC A.Ş.
+34A000-34AFFF     (base 16)		PAVO TASARIM ÜRETİM TİC A.Ş.
+				Teknopark İstanbul Ar-Ge Binaları. 1.Blok
+				İSTANBUL  PENDİK  34349
+				TR
+
+70-B3-D5   (hex)		Sigmann Elektronik GmbH
+95A000-95AFFF     (base 16)		Sigmann Elektronik GmbH
+				Hauptstrasse 53
+				Hueffenhardt    74928
+				DE
+
+70-B3-D5   (hex)		Shooter Detection Systems
+EB2000-EB2FFF     (base 16)		Shooter Detection Systems
+				300 Newburyport Turnpike
+				Rowley  MA  01969
+				US
+
+70-B3-D5   (hex)		SPC Bioclinicum
+DF3000-DF3FFF     (base 16)		SPC Bioclinicum
+				Ugreshskaya 2 b.83
+				Moscow  Moscow  115088
+				RU
+
+70-B3-D5   (hex)		SIGLEAD INC
+AB7000-AB7FFF     (base 16)		SIGLEAD INC
+				NAKAGAWACHUO1-38-10
+				YOKOHAMA  KANAGAWA  224-0003
+				JP
+
+70-B3-D5   (hex)		ARP Corporation
+B88000-B88FFF     (base 16)		ARP Corporation
+				166-1 Horikawa
+				Hadano  Kanagawa  259-1305
+				JP
+
+70-B3-D5   (hex)		ACD Elektronik GmbH
+FDA000-FDAFFF     (base 16)		ACD Elektronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		ELAMAKATO GmbH
+57B000-57BFFF     (base 16)		ELAMAKATO GmbH
+				Ottostrasse 5
+				Eggenstein-Leopoldshafen  Baden-Württemberg  76344
+				DE
+
+70-B3-D5   (hex)		Eagle Mountain Technology
+559000-559FFF     (base 16)		Eagle Mountain Technology
+				1811 MacCullen Drive
+				Erie  CO  80516
+				US
+
+70-B3-D5   (hex)		Condev-Automation GmbH
+DEC000-DECFFF     (base 16)		Condev-Automation GmbH
+				Obere Erlentiefenstr. 27
+				Bergkamen  NRW  59192
+				DE
+
+70-B3-D5   (hex)		CAITRON Industrial Solutions GmbH
+305000-305FFF     (base 16)		CAITRON Industrial Solutions GmbH
+				Eich 8
+				Ramerberg  Bavaria  83561
+				DE
+
+70-B3-D5   (hex)		Telefonix Incorporated
+83B000-83BFFF     (base 16)		Telefonix Incorporated
+				2340 Ernie Krueger Circle
+				Waukegan  Illinois  60087
+				US
+
+70-B3-D5   (hex)		Special Projects Group, Inc
+2FD000-2FDFFF     (base 16)		Special Projects Group, Inc
+				45 Wingate St
+				Haverhill  MA  0832
+				US
+
+70-B3-D5   (hex)		Hanwa Electronic Ind.Co.,Ltd.
+010000-010FFF     (base 16)		Hanwa Electronic Ind.Co.,Ltd.
+				689-3,Ogaito
+				Wakayama    649-6272
+				JP
+
+70-B3-D5   (hex)		NextEra Energy Resources, LLC
+EFA000-EFAFFF     (base 16)		NextEra Energy Resources, LLC
+				700 Universe Blvd
+				Juno Beach  Florida  33408
+				US
+
+70-B3-D5   (hex)		Taitotekniikka
+2A5000-2A5FFF     (base 16)		Taitotekniikka
+				Elielinaukio aukio 3
+				Helsinki    00100
+				FI
+
+70-B3-D5   (hex)		Human Oriented Technology, Inc.
+507000-507FFF     (base 16)		Human Oriented Technology, Inc.
+				Rm 1021, 10/F SOLO Bldg
+				Tsimshatsui  Kowloon  
+				TW
+
+70-B3-D5   (hex)		4CAM GmbH
+96F000-96FFFF     (base 16)		4CAM GmbH
+				Hauptstrasse 18
+				Reimlingen  Bayern  86756
+				DE
+
+70-B3-D5   (hex)		CORES Corporation
+8CE000-8CEFFF     (base 16)		CORES Corporation
+				338-3 Furukawado
+				Tsuru-shi  Yamanashi  402-0004
+				JP
+
+70-B3-D5   (hex)		Ultamation Limited
+346000-346FFF     (base 16)		Ultamation Limited
+				Liverpool Science Park, ic2
+				Liverpool  Merseyside  L3 5RF
+				GB
+
+70-B3-D5   (hex)		Innerspec Technologies Inc.
+79A000-79AFFF     (base 16)		Innerspec Technologies Inc.
+				4004 Murray Place
+				Lynchburg  Virgnia  24501
+				US
+
+70-B3-D5   (hex)		Fundación Cardiovascular de Colombia
+51E000-51EFFF     (base 16)		Fundación Cardiovascular de Colombia
+				Cra 5 No 6 - 33. Floridablanca
+				Bucaramanga  Floridablanca  681003
+				CO
+
+70-B3-D5   (hex)		VX Instruments GmbH
+625000-625FFF     (base 16)		VX Instruments GmbH
+				Bernsteinstraße 41 A
+				Altdorf-Landshut  Bavaria  84032
+				DE
+
+70-B3-D5   (hex)		SVP Broadcast Microwave S.L.
+1AC000-1ACFFF     (base 16)		SVP Broadcast Microwave S.L.
+				Zubiaurre, 7 bajo
+				Iurreta  Vizcaya  48215
+				ES
+
+70-B3-D5   (hex)		FARO TECHNOLOGIES, INC.
+936000-936FFF     (base 16)		FARO TECHNOLOGIES, INC.
+				125 Technology Park
+				Lake Mary  FL  32746
+				US
+
+70-B3-D5   (hex)		Clock-O-Matic
+2F0000-2F0FFF     (base 16)		Clock-O-Matic
+				De Vunt 14
+				Holsbeek  VBR  3220
+				BE
+
+70-B3-D5   (hex)		RMI Laser LLC
+C58000-C58FFF     (base 16)		RMI Laser LLC
+				106 Laser Drive
+				Lafayette  Colorado  80026
+				US
+
+70-B3-D5   (hex)		Molu Technology Inc., LTD.
+D8F000-D8FFFF     (base 16)		Molu Technology Inc., LTD.
+				NO. 25, Ln., 230, Zhonghe Rd.,
+				Zhonghe Dist.  New Taipei City  235
+				TW
+
+70-B3-D5   (hex)		Quickware Eng & Des LLC
+80F000-80FFFF     (base 16)		Quickware Eng & Des LLC
+				32 Pleasant St
+				Waltham  MA  02452
+				US
+
+70-B3-D5   (hex)		Avionica
+0F0000-0F0FFF     (base 16)		Avionica
+				9941 West Jessamine St
+				Miami  Florida  33157
+				US
+
+70-B3-D5   (hex)		KeFF Networks
+994000-994FFF     (base 16)		KeFF Networks
+				Sorogatan 1
+				Kista  Stockholm  16441
+				SE
+
+70-B3-D5   (hex)		Ars Products
+F63000-F63FFF     (base 16)		Ars Products
+				30 Crabtree Lane
+				Woodstock  CT  06281
+				US
+
+70-B3-D5   (hex)		FRS GmbH & Co. KG
+F62000-F62FFF     (base 16)		FRS GmbH & Co. KG
+				Weingartenstr. 1-3
+				Dortmund  NW  44263
+				DE
+
+70-B3-D5   (hex)		KINEMETRICS
+CE9000-CE9FFF     (base 16)		KINEMETRICS
+				222 VISTA AVENUE
+				PASADENA  CA  91107
+				US
+
+70-B3-D5   (hex)		POWERCRAFT ELECTRONICS PVT. LTD.
+090000-090FFF     (base 16)		POWERCRAFT ELECTRONICS PVT. LTD.
+				305, 3rd FLOOR, BLUE ROSE INDUSTRIAL ESTATE,
+				MUMBAI  MAHARASHTRA  400066
+				IN
+
+70-B3-D5   (hex)		DSD MICROTECHNOLOGY,INC.
+308000-308FFF     (base 16)		DSD MICROTECHNOLOGY,INC.
+				4700 WEST PROSPECT ROAD
+				FORT LAUDERDALE  FLORIDA  33309
+				US
+
+70-B3-D5   (hex)		Accusonic
+908000-908FFF     (base 16)		Accusonic
+				28 Patterson Brook Road
+				West Wareham  MA  02576
+				US
+
+70-B3-D5   (hex)		Overline Systems
+28F000-28FFFF     (base 16)		Overline Systems
+				21 av. Sophie Wallerstein
+				Andernos  Aquitaine  33510
+				FR
+
+70-B3-D5   (hex)		Hosokawa Micron Powder Systems
+4C8000-4C8FFF     (base 16)		Hosokawa Micron Powder Systems
+				10 Chatham Road
+				Summit  New Jersey  07901
+				US
+
+70-B3-D5   (hex)		RedRat Ltd
+FD1000-FD1FFF     (base 16)		RedRat Ltd
+				The Business & Technology Centre
+				Saffron Walden  Essex  CB11 3AQ
+				
+
+00-1B-C5   (hex)		EREE Electronique
+0C1000-0C1FFF     (base 16)		EREE Electronique
+				6 avenue Dr Schweitzer
+				MEYZIEU    69882
+				FR
+
+00-1B-C5   (hex)		kuwatec, Inc.
+0BC000-0BCFFF     (base 16)		kuwatec, Inc.
+				2-39-5 Umesato
+				Suginami-ku  Tokyo  166-0011
+				JP
+
+00-1B-C5   (hex)		COBAN SRL
+0B4000-0B4FFF     (base 16)		COBAN SRL
+				VIA BERGAMO,1910
+				CARONNO PERTUSELLA  VA  21042
+				IT
+
+00-1B-C5   (hex)		J-D.COM
+0B0000-0B0FFF     (base 16)		J-D.COM
+				6 rue Blaise pascal
+				Elancourt    78990
+				FR
+
+00-1B-C5   (hex)		Senceive Ltd
+0AA000-0AAFFF     (base 16)		Senceive Ltd
+				Hurlingham Studios
+				London    SW6 3PA
+				GB
+
+00-1B-C5   (hex)		Balter Security GmbH
+0A6000-0A6FFF     (base 16)		Balter Security GmbH
+				In den Diken 33
+				Duesseldorf  NRW  40472
+				DE
+
+00-1B-C5   (hex)		reelyActive
+094000-094FFF     (base 16)		reelyActive
+				501-1015 rue William
+				Montreal  Quebec  H3C 1P4
+				CA
+
+00-1B-C5   (hex)		UAB Kitron
+099000-099FFF     (base 16)		UAB Kitron
+				Taikos 151
+				Kaunas  Lithuania  LT-52119
+				US
+
+00-1B-C5   (hex)		TrendPoint Systems
+08E000-08EFFF     (base 16)		TrendPoint Systems
+				1595 E. 6th Street
+				Corona  CA  92879
+				US
+
+00-1B-C5   (hex)		Bio Molecular System Pty Ltd
+07E000-07EFFF     (base 16)		Bio Molecular System Pty Ltd
+				5/3 Northward St
+				Upper Coomera  Queensland  4209
+				AU
+
+00-1B-C5   (hex)		Hitechlab Inc
+07F000-07FFFF     (base 16)		Hitechlab Inc
+				Hotarugaike-Nishimachi 2-14-14
+				Toyonaka  Osaka  560-0036
+				JP
+
+00-1B-C5   (hex)		tado GmbH
+073000-073FFF     (base 16)		tado GmbH
+				Kochelseestraße 8-10
+				München  Deutschland  81371
+				DE
+
+00-1B-C5   (hex)		Center for E-Commerce Infrastructure Development, The University of Hong Kong
+071000-071FFF     (base 16)		Center for E-Commerce Infrastructure Development, The University of Hong Kong
+				Room 301, Chow Yei Ching Building,
+				    
+				HK
+
+00-1B-C5   (hex)		TES Electronic Solutions (I) Pvt. Ltd.
+06D000-06DFFF     (base 16)		TES Electronic Solutions (I) Pvt. Ltd.
+				#65, 35th Main, 100 feet Ring Road,
+				Bangalore  Karnataka  560068
+				IN
+
+00-1B-C5   (hex)		Check-It Solutions Inc
+063000-063FFF     (base 16)		Check-It Solutions Inc
+				1601A - 4th Ave
+				Regina  Saskatchewan  S4R 8P9
+				CA
+
+00-1B-C5   (hex)		Klingenthaler Musikelektronik GmbH
+05F000-05FFFF     (base 16)		Klingenthaler Musikelektronik GmbH
+				Auerbacher Str. 268
+				Klingenthal  Saxony  08248
+				DE
+
+00-1B-C5   (hex)		Ecomed-Complex
+05E000-05EFFF     (base 16)		Ecomed-Complex
+				Petrogradskaya nab. 34
+				  Saint-Petersburg  197101
+				RU
+
+00-1B-C5   (hex)		konzeptpark GmbH
+05B000-05BFFF     (base 16)		konzeptpark GmbH
+				Georg-Ohm-Straße 2
+				Lahnau  Hesse  35633
+				DE
+
+00-1B-C5   (hex)		POSTEC DATA SYSTEMS
+05A000-05AFFF     (base 16)		POSTEC DATA SYSTEMS
+				45-47 Paul Matthews Road
+				Auckland    0632
+				NZ
+
+00-1B-C5   (hex)		QQ Navigation AB
+051000-051FFF     (base 16)		QQ Navigation AB
+				Gryt 44
+				Ösmo    14892
+				SE
+
+00-1B-C5   (hex)		PT. Amanindo Nusapadu
+047000-047FFF     (base 16)		PT. Amanindo Nusapadu
+				Jalan Pangeran Jayakarta 101 Blok D No. 4~5
+				Jakarta  Jawa Barat  10730
+				ID
+
+00-1B-C5   (hex)		Rhino Controls Ltd.
+04C000-04CFFF     (base 16)		Rhino Controls Ltd.
+				13545 113 Ave
+				Surrey  British Columbia  V3R 6S9
+				CA
+
+00-1B-C5   (hex)		DesignA Electronics Limited
+041000-041FFF     (base 16)		DesignA Electronics Limited
+				Unit 6
+				Christchurch  New Zealand  8011
+				NZ
+
+00-1B-C5   (hex)		Daylight  Solutions, Inc
+03E000-03EFFF     (base 16)		Daylight  Solutions, Inc
+				15378 Avenue of Science
+				San Diego  CA  92128
+				US
+
+00-1B-C5   (hex)		ELTRADE Ltd
+03F000-03FFFF     (base 16)		ELTRADE Ltd
+				blvd. G.Delchev blok 102
+				Sofia    1404
+				BG
+
+00-1B-C5   (hex)		SEED International Ltd.
+038000-038FFF     (base 16)		SEED International Ltd.
+				Unit 1201, Pan-pacific Plaza, No.12A, South Street Zhongguancun, 
+				Beijing    100081
+				CN
+
+00-1B-C5   (hex)		ITW Reyflex North America
+037000-037FFF     (base 16)		ITW Reyflex North America
+				195 E Algonquin Road
+				Des Plaines  IL  60090
+				US
+
+00-1B-C5   (hex)		andersen lighting GmbH
+025000-025FFF     (base 16)		andersen lighting GmbH
+				Technologiezentrum
+				Hildesheim    D-31137
+				DE
+
+00-1B-C5   (hex)		DIMEP Sistemas
+026000-026FFF     (base 16)		DIMEP Sistemas
+				Av. Mofarrej, 840
+				São Paulo    05311000
+				BR
+
+00-1B-C5   (hex)		Dunlop Systems & Components
+019000-019FFF     (base 16)		Dunlop Systems & Components
+				Holbrook Lane
+				Coventry  West Midlands  CV6 4QX
+				GB
+
+00-1B-C5   (hex)		Advanced Scientific Concepts, Inc.
+00D000-00DFFF     (base 16)		Advanced Scientific Concepts, Inc.
+				135 E. Ortega Street
+				Santa Barbara  CA  93101
+				US
+
+00-1B-C5   (hex)		Private
+014000-014FFF     (base 16)		Private
+
+00-1B-C5   (hex)		Intellvisions Software Ltd
+004000-004FFF     (base 16)		Intellvisions Software Ltd
+				303, Steel House, 24 Mahal Indl Estate
+				Mumbai  Maharashtra  400093
+				IN
+
+00-1B-C5   (hex)		OpenRB.com, Direct SIA
+001000-001FFF     (base 16)		OpenRB.com, Direct SIA
+				E. Birznieka-Upisha
+				Riga    LV-1050
+				LV
+
+70-B3-D5   (hex)		YAMAKATSU ELECTRONICS INDUSTRY CO., LTD.
+053000-053FFF     (base 16)		YAMAKATSU ELECTRONICS INDUSTRY CO., LTD.
+				1-37-23, Suenaga, Takatsu
+				Kawasaki-City  Kanagawa  213-0013
+				JP
+
+70-B3-D5   (hex)		ard sa
+206000-206FFF     (base 16)		ard sa
+				Micropolis Bat Clematis
+				Gap  France  05000
+				FR
+
+70-B3-D5   (hex)		Guangzhou Haoxiang Computer Technology Co.,Ltd.
+42B000-42BFFF     (base 16)		Guangzhou Haoxiang Computer Technology Co.,Ltd.
+				Room 502, 4th Floor, No. 6 Building, Hongtai Wisdom Valley, No. 21 Sicheng Road, Tianhe District
+				Guangzhou  Guangdong  510665
+				CN
+
+70-B3-D5   (hex)		Hunan Shengyun Photoelectric Technology Co., Ltd.
+7CA000-7CAFFF     (base 16)		Hunan Shengyun Photoelectric Technology Co., Ltd.
+				Unit 2, Building E8, Lugu Enterprise Plaza, Yuelu District
+				Changsha  Hunan  410205
+				CN
+
+70-B3-D5   (hex)		Nordson Corporation
+830000-830FFF     (base 16)		Nordson Corporation
+				11475 Lakefield Dr
+				Duluth  GA  30097
+				US
+
+70-B3-D5   (hex)		Medicomp, Inc
+279000-279FFF     (base 16)		Medicomp, Inc
+				600 Atlantis Rd
+				Melbourne  FL  32904
+				US
+
+70-B3-D5   (hex)		CYNIX Systems Inc
+320000-320FFF     (base 16)		CYNIX Systems Inc
+				Dunchon-daero
+				Seongnam-si  Gyeonggi-do  13215
+				KR
+
+70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
+B84000-B84FFF     (base 16)		OOO Research and Production Center Computer Technologies
+				Komsomolsky avenue, 90-17
+				Perm  Perm Region  614010
+				RU
+
+70-B3-D5   (hex)		Magneti Marelli S.p.A. Electronics
+F44000-F44FFF     (base 16)		Magneti Marelli S.p.A. Electronics
+				Viale Aldo Borletti 61/63
+				Corbetta  MI  20011
+				IT
+
+70-B3-D5   (hex)		Bolide Technology Group, Inc.
+9E1000-9E1FFF     (base 16)		Bolide Technology Group, Inc.
+				468 S. San Dimas Ave.,
+				San Dimas  CA  91773
+				US
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+BF8000-BF8FFF     (base 16)		RCH ITALIA SPA 
+				VIA CENDON 39
+				SILEA   TREVISO   31057
+				IT
+
+70-B3-D5   (hex)		Orion S.r.l.
+41F000-41FFFF     (base 16)		Orion S.r.l.
+				Via Alessandro Volta 25/B
+				Veggiano  Padova  35030
+				IT
+
+70-B3-D5   (hex)		Digifocus Technology Inc.
+ECC000-ECCFFF     (base 16)		Digifocus Technology Inc.
+				6F, No.89, Xinhu 1st Rd., Neihu Dist.
+				Taipei City     11494
+				TW
+
+70-B3-D5   (hex)		Foxtel srl
+4F7000-4F7FFF     (base 16)		Foxtel srl
+				via della chimica 25
+				viterbo    01100
+				IT
+
+70-B3-D5   (hex)		Palarum LLC
+45A000-45AFFF     (base 16)		Palarum LLC
+				986 BELVEDERE DRIVE, Suite B
+				LEBANON  OH  45036
+				US
+
+70-B3-D5   (hex)		Cubitech
+AED000-AEDFFF     (base 16)		Cubitech
+				4-6 Kiprou str
+				Tavros  Athens  17778
+				GR
+
+70-B3-D5   (hex)		DynaMount LLC
+B5B000-B5BFFF     (base 16)		DynaMount LLC
+				16357 Whispering Oaks Dr
+				Ramona  CA  92065
+				US
+
+70-B3-D5   (hex)		Zerospace ICT Services B.V.
+9E8000-9E8FFF     (base 16)		Zerospace ICT Services B.V.
+				Johan Huizingalaan 400
+				Amsterdam  Noord-Holland  1066 JS
+				NL
+
+70-B3-D5   (hex)		Kahler Automation
+0D5000-0D5FFF     (base 16)		Kahler Automation
+				808 Timberlake Rd
+				Fairmont  MN  56031
+				US
+
+70-B3-D5   (hex)		GLOBAL-KING INTERNATIONAL CO., LTD.
+06E000-06EFFF     (base 16)		GLOBAL-KING INTERNATIONAL CO., LTD.
+				5F., No. 19, Qingxiang St., Tucheng Dist.,
+				New Taipei City  Taiwan  236
+				TW
+
+70-B3-D5   (hex)		Abbott Diagnostics Technologies AS
+6DD000-6DDFFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo  Oslo  0504
+				NO
+
+70-B3-D5   (hex)		Systems Technologies
+5B4000-5B4FFF     (base 16)		Systems Technologies
+				11310 N Government Way
+				Hayden  ID  83835
+				US
+
+70-B3-D5   (hex)		Monixo
+47B000-47BFFF     (base 16)		Monixo
+				16 rue alexandre
+				Creteil    94000
+				FR
+
+70-B3-D5   (hex)		Benchmark Electronics BV
+CC4000-CC4FFF     (base 16)		Benchmark Electronics BV
+				Lelyweg 10
+				Almelo  Overijssel  7602 EA
+				NL
+
+70-B3-D5   (hex)		Xacti Corporation
+1D2000-1D2FFF     (base 16)		Xacti Corporation
+				Tower East 28F,Umeda Sky Building,1-1-88,Oyodonaka,Kita-ku
+				Osaka  Osaka  531-6048
+				JP
+
+70-B3-D5   (hex)		Cambridge Technology, Inc.
+EFD000-EFDFFF     (base 16)		Cambridge Technology, Inc.
+				125 middlesex turnpike
+				bedford  MA  01730
+				US
+
+70-B3-D5   (hex)		AXING AG
+00B000-00BFFF     (base 16)		AXING AG
+				Gewerbehaus Moskau
+				Ramsen    8262
+				CH
+
+70-B3-D5   (hex)		NIRECO CORPORATION
+0CB000-0CBFFF     (base 16)		NIRECO CORPORATION
+				2951-4, Ishikawa-machi
+				Hachioji-shi  Tokyo  192-8522
+				JP
+
+70-B3-D5   (hex)		Hifocus Electronics India Private Limited
+B25000-B25FFF     (base 16)		Hifocus Electronics India Private Limited
+				No. 3 Sunguvar Street, Chintadripet
+				Chennai  Tamil Nadu  600002
+				IN
+
+70-B3-D5   (hex)		Wartsila Voyage Limited
+304000-304FFF     (base 16)		Wartsila Voyage Limited
+				13-18 City Quay
+				Dublin 2    D02 ED70
+				IE
+
+70-B3-D5   (hex)		CAITRON GmbH
+B87000-B87FFF     (base 16)		CAITRON GmbH
+				Eich 8
+				Ramerberg    83561
+				DE
+
+70-B3-D5   (hex)		WideNorth AS
+2B8000-2B8FFF     (base 16)		WideNorth AS
+				Vollsveien 13C
+				Lysaker    1366
+				NO
+
+70-B3-D5   (hex)		TRANSLITE GLOBAL LLC
+DBD000-DBDFFF     (base 16)		TRANSLITE GLOBAL LLC
+				6644 ANTOINE DRIVE 
+				HOUSTON  TX  77091
+				US
+
+70-B3-D5   (hex)		Ellego Powertec Oy
+CEF000-CEFFFF     (base 16)		Ellego Powertec Oy
+				Linnapellontie 18
+				Halikko    24910
+				FI
+
+70-B3-D5   (hex)		SmartD Technologies Inc
+AB6000-AB6FFF     (base 16)		SmartD Technologies Inc
+				400 Montfort
+				Montreal  Qc  H3C4J9
+				CA
+
+70-B3-D5   (hex)		Elvys s.r.o
+12A000-12AFFF     (base 16)		Elvys s.r.o
+				Polska 9
+				Kosice    04011
+				SK
+
+70-B3-D5   (hex)		Active Brains
+2BA000-2BAFFF     (base 16)		Active Brains
+				Yokohama Dia BLDG 8F 1-7 Kinkocho Kanagawa-ku
+				Yokohama  Kanagawa  221-0056
+				JP
+
+70-B3-D5   (hex)		GDI Technology Inc 
+8B8000-8B8FFF     (base 16)		GDI Technology Inc 
+				12400 SW 134 Ct #14
+				Miami  FL  33186
+				US
+
+70-B3-D5   (hex)		MONTRADE SPA
+EE2000-EE2FFF     (base 16)		MONTRADE SPA
+				Via Armando Sarti 6
+				Bologna    40132
+				IT
+
+70-B3-D5   (hex)		Mettler Toledo
+D64000-D64FFF     (base 16)		Mettler Toledo
+				1571 Northpointe Parkway
+				Lutz  FL  33558
+				US
+
+70-B3-D5   (hex)		Mettler Toledo
+74A000-74AFFF     (base 16)		Mettler Toledo
+				1571 Northpointe Parkway
+				Lutz  FL  33558
+				US
+
+70-B3-D5   (hex)		W.A. Benjamin Electric Co.
+4E4000-4E4FFF     (base 16)		W.A. Benjamin Electric Co.
+				1615 Staunton Ave.
+				Los Angeles  CA  60021
+				US
+
+70-B3-D5   (hex)		Mettler Toledo
+84F000-84FFFF     (base 16)		Mettler Toledo
+				1571 Northpointe Parkway
+				Lutz  FL  33558
+				US
+
+70-B3-D5   (hex)		THELIGHT Luminary for Cine and TV S.L.
+A41000-A41FFF     (base 16)		THELIGHT Luminary for Cine and TV S.L.
+				C/ Cerdanya, 11-A
+				Sant Quirze del Valles  Barcelona  08192
+				ES
+
+70-B3-D5   (hex)		TATTILE SRL
+48B000-48BFFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Elsist Srl
+4C9000-4C9FFF     (base 16)		Elsist Srl
+				Via G. Brodolini, 15
+				Casale Monf.to  Alessandria  15033
+				IT
+
+70-B3-D5   (hex)		HANKOOK CTEC CO,. LTD.
+6EE000-6EEFFF     (base 16)		HANKOOK CTEC CO,. LTD.
+				404 Hallasigmavalley, 53, Gasandigital 2-ro Geumcheongu
+				Seoul    08588
+				KR
+
+70-B3-D5   (hex)		Olympus NDT Canada
+3F1000-3F1FFF     (base 16)		Olympus NDT Canada
+				3415 rue Pierre Ardouin
+				Québec  Québec  G1P 0B3
+				CA
+
+70-B3-D5   (hex)		Cominfo, Inc.
+617000-617FFF     (base 16)		Cominfo, Inc.
+				Nabrezi 695
+				Zlin    760 01
+				CZ
+
+70-B3-D5   (hex)		HAN CHANG
+C3A000-C3AFFF     (base 16)		HAN CHANG
+				171, Gasan digital 1-ro, Geumcheon-gu, Seoul, Republic of Korea
+				Seoul  Geumcheon-gu, Seoul  08503
+				KR
+
+70-B3-D5   (hex)		SinterCast
+425000-425FFF     (base 16)		SinterCast
+				Kungsgatan 2
+				Katrineholm  Please Select..sodermanland.  64130
+				SE
+
+70-B3-D5   (hex)		ECS s.r.l.
+487000-487FFF     (base 16)		ECS s.r.l.
+				Via dell'Artigianato n. 24
+				Belluno  BL  32100
+				IT
+
+70-B3-D5   (hex)		Konrad GmbH
+575000-575FFF     (base 16)		Konrad GmbH
+				Fritz-Reichle-Ring.12
+				Radolfzell    78315
+				DE
+
+70-B3-D5   (hex)		Dalian Laike Technology Development Co., Ltd 
+DAC000-DACFFF     (base 16)		Dalian Laike Technology Development Co., Ltd 
+				Room 406, 4th Floor, Block A, 29 Xixian Street, Dalian High-tech Industrial Park
+				Dalian   Liaoning  116085
+				CN
+
+70-B3-D5   (hex)		Conclusive Engineering
+B9D000-B9DFFF     (base 16)		Conclusive Engineering
+				Ligocka 103/3
+				Katowice  Silesia  40-568
+				PL
+
+70-B3-D5   (hex)		Sevensense Robotics AG
+9C3000-9C3FFF     (base 16)		Sevensense Robotics AG
+				Weinbergstrasse 35
+				Zurich    8092
+				CH
+
+70-B3-D5   (hex)		Hodwa Co., Ltd
+2C4000-2C4FFF     (base 16)		Hodwa Co., Ltd
+				3F., No. 216, Xinhu 1st Rd., Neihu Dist.
+				Taipei    11494
+				TW
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+159000-159FFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		Visility
+964000-964FFF     (base 16)		Visility
+				Universitetsparken 7
+				Roskilde    4000
+				DK
+
+70-B3-D5   (hex)		Public Joint Stock Company Morion
+97E000-97EFFF     (base 16)		Public Joint Stock Company Morion
+				Kosmonavtov Avn, 111, bld 1
+				Perm  Perm  614066
+				RU
+
+70-B3-D5   (hex)		Screen Innovations
+CFB000-CFBFFF     (base 16)		Screen Innovations
+				9715 Burnet Rd  B-400
+				Austin  TX  78758
+				US
+
+70-B3-D5   (hex)		Insitu, Inc.
+865000-865FFF     (base 16)		Insitu, Inc.
+				118 E Columbia River Way
+				Bingen  WA  98605
+				US
+
+70-B3-D5   (hex)		German Power GmbH
+C31000-C31FFF     (base 16)		German Power GmbH
+				Freiburger Strasse 7
+				Pforzheim    75179
+				DE
+
+70-B3-D5   (hex)		Lyse AS
+F23000-F23FFF     (base 16)		Lyse AS
+				Breiflåtveien 18
+				Stavanger    4017
+				NO
+
+70-B3-D5   (hex)		Outsight SA
+3EC000-3ECFFF     (base 16)		Outsight SA
+				2 rue de Berite
+				Paris    75006
+				FR
+
+70-B3-D5   (hex)		Hefei STAROT Technology Co.,Ltd
+4D3000-4D3FFF     (base 16)		Hefei STAROT Technology Co.,Ltd
+				406, 4th Floor, Quality Control Building, Saipu Science Park, No. 6 Yunfei Road, High-tech Zone
+				hefei  anhui  230000
+				CN
+
+70-B3-D5   (hex)		SysCom Automationstechnik GmbH
+117000-117FFF     (base 16)		SysCom Automationstechnik GmbH
+				An der Lehmkaute 13
+				Bad Marienberg  Rheinland-Pfalz  56470
+				DE
+
+70-B3-D5   (hex)		JFA Electronics Industry and Commerce EIRELI
+5F7000-5F7FFF     (base 16)		JFA Electronics Industry and Commerce EIRELI
+				Rua Flor das Pedras, 175
+				Belo Horizonte  Minas Gerais  30810-000
+				BR
+
+70-B3-D5   (hex)		Hubbell Power Systems
+858000-858FFF     (base 16)		Hubbell Power Systems
+				353 Powerville Road
+				Boonton Township  NJ  07005
+				US
+
+70-B3-D5   (hex)		Walton Hi-Tech Industries Ltd.
+E5C000-E5CFFF     (base 16)		Walton Hi-Tech Industries Ltd.
+				HOLDING NO. I-65/2, WARD NO-07
+				CHANDRA, KALIAKOIR, GAZIPUR.    1750
+				BD
+
+70-B3-D5   (hex)		aquila biolabs GmbH
+7DB000-7DBFFF     (base 16)		aquila biolabs GmbH
+				Arnold-Sommerfeld-Ring 2
+				Baesweiler  NRW  52499
+				DE
+
+70-B3-D5   (hex)		Sicon srl
+C82000-C82FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Flextronics International Kft
+699000-699FFF     (base 16)		Flextronics International Kft
+				38. Zrinyi Str.
+				Zalaegerszeg  Zala  8900
+				HU
+
+70-B3-D5   (hex)		LGE
+DAE000-DAEFFF     (base 16)		LGE
+				10, Magokjungang 10-ro, Gangseo-gu
+				Seoul    07796
+				KR
+
+70-B3-D5   (hex)		Jonsa Australia Pty Ltd
+335000-335FFF     (base 16)		Jonsa Australia Pty Ltd
+				Unit D2 3-29 Birnie Ave
+				Lidcombe  NSW  2141
+				AU
+
+70-B3-D5   (hex)		GreenWake Technologies
+467000-467FFF     (base 16)		GreenWake Technologies
+				56 boulevard Niels Bohr, CEI2
+				Villeurbanne    69100
+				FR
+
+70-B3-D5   (hex)		shenzhen suofeixiang technology Co.,Ltd
+EEB000-EEBFFF     (base 16)		shenzhen suofeixiang technology Co.,Ltd
+				sales09@sfxhd.com
+				shenzhen    518000
+				CN
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+97D000-97DFFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		SNK, Inc.
+E12000-E12FFF     (base 16)		SNK, Inc.
+				Rm 302 Inobiz park, 1646, Yuseong-daero, Yuseong-gu
+				Daejeon    34054
+				KR
+
+70-B3-D5   (hex)		SYLink Technologie
+466000-466FFF     (base 16)		SYLink Technologie
+				18 rue de la conche
+				Mirefleurs  Auvergne  63730
+				FR
+
+70-B3-D5   (hex)		silicom
+F64000-F64FFF     (base 16)		silicom
+				14 Atir-Yeda St/
+				Kfar-Sava  Israel  44000
+				IL
+
+70-B3-D5   (hex)		NSP Europe Ltd
+18A000-18AFFF     (base 16)		NSP Europe Ltd
+				Unit 5, Devonshire Business Park
+				Borehamwood  Hert  WD6 1NA
+				GB
+
+70-B3-D5   (hex)		Microchip Technology Germany II GmbH&Co.KG
+77F000-77FFFF     (base 16)		Microchip Technology Germany II GmbH&Co.KG
+				Emmy-Noether-Straße 14
+				Karlsruhe    76131
+				DE
+
+70-B3-D5   (hex)		Trust Automation
+C98000-C98FFF     (base 16)		Trust Automation
+				125 Venture Dr
+				San Luis Obispo  CA  93401
+				US
+
+70-B3-D5   (hex)		Kospel S.A.
+249000-249FFF     (base 16)		Kospel S.A.
+				Olchowa 1
+				Koszalin    75-136
+				PL
+
+70-B3-D5   (hex)		Coheros Oy
+D2E000-D2EFFF     (base 16)		Coheros Oy
+				Tammukkakatu 6
+				Nokia    37130
+				FI
+
+70-B3-D5   (hex)		Gogo Business Aviation
+E24000-E24FFF     (base 16)		Gogo Business Aviation
+				105 Edgeview Dr., Suite 300
+				Broomfield  CO  80021
+				US
+
+70-B3-D5   (hex)		Taejin InfoTech
+A75000-A75FFF     (base 16)		Taejin InfoTech
+				40, Imi-ro, A-411
+				Uiwang-si  Gyeonggi-do  16006
+				KR
+
+70-B3-D5   (hex)		ARCLAN'SYSTEM
+25C000-25CFFF     (base 16)		ARCLAN'SYSTEM
+				1140 rue Ampère - Actimart II - Lot 9
+				AIX EN PROVENCE    13290
+				FR
+
+70-B3-D5   (hex)		Smart Embedded Systems
+A09000-A09FFF     (base 16)		Smart Embedded Systems
+				6701  Koll Center Parkway #250
+				Pleasonton  CA  94566
+				US
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+F6A000-F6AFFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		LLC Sarov Innovative Technologies (WIZOLUTION)
+50F000-50FFFF     (base 16)		LLC Sarov Innovative Technologies (WIZOLUTION)
+				RUSSIAN FEDERATION, Nizhny Novgorod region, Varlamovskaya road, 7, build 2
+				Sarov  Nizhny Novgorod  607188
+				RU
+
+70-B3-D5   (hex)		SPX Radiodetection
+A77000-A77FFF     (base 16)		SPX Radiodetection
+				Western Drive
+				Bristol  Avon  BS14 0AF
+				GB
+
+70-B3-D5   (hex)		LM-Instruments Oy
+5AC000-5ACFFF     (base 16)		LM-Instruments Oy
+				Norrbyn rantatie 8
+				Parainen    21600
+				FI
+
+70-B3-D5   (hex)		Fuhr GmbH Filtertechnik
+DBB000-DBBFFF     (base 16)		Fuhr GmbH Filtertechnik
+				Am Weinkastell 14
+				Klein-Winternheim  Rheinland-Pfalz  55270
+				DE
+
+70-B3-D5   (hex)		Sanmina Israel
+C18000-C18FFF     (base 16)		Sanmina Israel
+				Koren Industrial Zone , POBox 102
+				Maalot  Israel  2101002
+				IL
+
+70-B3-D5   (hex)		INVISSYS
+AD4000-AD4FFF     (base 16)		INVISSYS
+				25 rue marcel issartier
+				merignac    33700
+				FR
+
+70-B3-D5   (hex)		Panoramic Power
+669000-669FFF     (base 16)		Panoramic Power
+				15 Atir Yeda
+				Kfar Saba    4464312
+				IL
+
+70-B3-D5   (hex)		Panoramic Power
+06D000-06DFFF     (base 16)		Panoramic Power
+				Atir Yeda 15
+				Kfar Saba    4464312
+				IL
+
+70-B3-D5   (hex)		Avlinkpro
+2C1000-2C1FFF     (base 16)		Avlinkpro
+				380 US Highway 46
+				Totowa  NJ  07512
+				US
+
+70-B3-D5   (hex)		DECYBEN
+683000-683FFF     (base 16)		DECYBEN
+				170 Rue Raymond Losserand
+				Paris    75014
+				FR
+
+70-B3-D5   (hex)		C4I Systems Ltd
+5C6000-5C6FFF     (base 16)		C4I Systems Ltd
+				Unit 1Twyford Court
+				Hereford  Herefordshire  HR2 6JR
+				GB
+
+70-B3-D5   (hex)		Knowledge Resources GmbH
+C36000-C36FFF     (base 16)		Knowledge Resources GmbH
+				Ackerstrasse 30
+				Bsel  BS  4057
+				CH
+
+70-B3-D5   (hex)		CoreEL Technologies Pvt Ltd
+10D000-10DFFF     (base 16)		CoreEL Technologies Pvt Ltd
+				#21, 7th Main, 1st Block ,Koramangala, 
+				Bangalore  Karnataka  560034
+				IN
+
+70-B3-D5   (hex)		adnexo GmbH
+4E3000-4E3FFF     (base 16)		adnexo GmbH
+				Rennweg 38
+				Zürich  Zurich  8001
+				CH
+
+70-B3-D5   (hex)		Sumitomo Heavy Industries, Ltd.
+C23000-C23FFF     (base 16)		Sumitomo Heavy Industries, Ltd.
+				5-2, Soubiraki-cho
+				Niihama  Ehime  792-8588
+				JP
+
+70-B3-D5   (hex)		LLC Open Converged Networks
+73F000-73FFFF     (base 16)		LLC Open Converged Networks
+				st. Stepana Shutova 8-1-34
+				Moscow  Moscow  109380
+				RU
+
+70-B3-D5   (hex)		Shenzhen Vikings Technology Co., Ltd.
+46A000-46AFFF     (base 16)		Shenzhen Vikings Technology Co., Ltd.
+				Floor 3, building 2, tiantong industrial park, gaofeng community, dalang street, longhua district
+				Shenzhen  Guangdong  518109
+				CN
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+294000-294FFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		aelettronica group srl
+AD9000-AD9FFF     (base 16)		aelettronica group srl
+				via matteotti,22
+				gaggiano  milano  20083
+				IT
+
+70-B3-D5   (hex)		C W F Hamilton & Co Ltd
+82A000-82AFFF     (base 16)		C W F Hamilton & Co Ltd
+				20 Lunns Road, Middleton
+				Christchurch  Canterbury  8024
+				NZ
+
+70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+165000-165FFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+70-B3-D5   (hex)		BESO sp. z o.o.
+D7D000-D7DFFF     (base 16)		BESO sp. z o.o.
+				Mlynska 1a
+				Brzeg Dolny    56-120
+				PL
+
+70-B3-D5   (hex)		Computechnic AG
+7D4000-7D4FFF     (base 16)		Computechnic AG
+				Rietlistrasse 3
+				Rorschacherberg  Goldach  9403
+				CH
+
+70-B3-D5   (hex)		National Time & Signal Corp.
+846000-846FFF     (base 16)		National Time & Signal Corp.
+				28045 Oakland Oaks Ct
+				Wixom  MI  48393
+				US
+
+70-B3-D5   (hex)		Senior Group LLC
+D19000-D19FFF     (base 16)		Senior Group LLC
+				1300 West Main Street
+				Louisville  KY  40203
+				US
+
+70-B3-D5   (hex)		Sportsbeams Lighting, Inc.
+9C2000-9C2FFF     (base 16)		Sportsbeams Lighting, Inc.
+				1260 Pine Forest Cir
+				Round Rock  TX  78665
+				US
+
+70-B3-D5   (hex)		Amico Corporation
+B90000-B90FFF     (base 16)		Amico Corporation
+				85 Fulton Way
+				Richmond Hill  ON   L4B 2N4
+				CA
+
+70-B3-D5   (hex)		ICTK Holdings
+5C9000-5C9FFF     (base 16)		ICTK Holdings
+				3F Ventureforum B'd, Pangyodae-ro
+				Seung-nam Si  Gyeonggi-Do  13488
+				KR
+
+70-B3-D5   (hex)		TIAMA
+8A1000-8A1FFF     (base 16)		TIAMA
+				ZA des Plattes - 1 Chemin des Plattes
+				VOURLES     69390 
+				FR
+
+70-B3-D5   (hex)		Honeywell/Intelligrated
+94C000-94CFFF     (base 16)		Honeywell/Intelligrated
+				10045 International Blvd
+				Cincinnati  OH  45246
+				US
+
+70-B3-D5   (hex)		LARIMART SPA
+536000-536FFF     (base 16)		LARIMART SPA
+				VIA DI TORREVECCHIA
+				ROMA    00168
+				IT
+
+70-B3-D5   (hex)		Transformational Security, LLC
+762000-762FFF     (base 16)		Transformational Security, LLC
+				9101 Guilford Rd
+				Columbia  MD  21046
+				US
+
+70-B3-D5   (hex)		Breas Medical AB
+EDA000-EDAFFF     (base 16)		Breas Medical AB
+				Företagsvägen 1
+				Mölnlycke    SE-435 33
+				SE
+
+70-B3-D5   (hex)		Packet Power
+B54000-B54FFF     (base 16)		Packet Power
+				2716 Summer Str. N.E.
+				Minneapolis  MN  55413
+				US
+
+70-B3-D5   (hex)		Ketronixs Sdn Bhd
+6AC000-6ACFFF     (base 16)		Ketronixs Sdn Bhd
+				51-17-B Menara BHL Bank, Jalan Sultan Ahmad Shah
+				Georgetown  Penang  10050
+				MY
+
+70-B3-D5   (hex)		Alto Aviation
+D0F000-D0FFFF     (base 16)		Alto Aviation
+				86 Leominster Road
+				Sterling  MA  01564
+				US
+
+70-B3-D5   (hex)		BOE Technology Group Co., Ltd.
+5A1000-5A1FFF     (base 16)		BOE Technology Group Co., Ltd.
+				No.12 Xihuanzhong RD, BDA
+				Beijing  Beijing  100176
+				CN
+
+70-B3-D5   (hex)		KAEONIT
+992000-992FFF     (base 16)		KAEONIT
+				51 boulevard Tristan Corbiere
+				Marseille    13012
+				FR
+
+70-B3-D5   (hex)		LG Electronics
+A23000-A23FFF     (base 16)		LG Electronics
+				LG Science Park, 10, Magokjungang 10-ro, GangSeo-gu
+				SEOUL    07796
+				KR
+
+70-B3-D5   (hex)		Antlia Systems
+416000-416FFF     (base 16)		Antlia Systems
+				401 N Michigan Ave Ste 1200
+				Chicago  IL  60611
+				US
+
+70-B3-D5   (hex)		BAE SYSTEMS 
+055000-055FFF     (base 16)		BAE SYSTEMS 
+				150 PARISH DRIVE 
+				WAYNE  NJ  07470
+				US
+
+70-B3-D5   (hex)		Advanced Telecommunications Research Institute International
+68A000-68AFFF     (base 16)		Advanced Telecommunications Research Institute International
+				2-2-2 Hikaridai
+				Seika-cho, Sorakugun  Kyoto  619-0288
+				JP
+
+70-B3-D5   (hex)		Doosan Digital Innovation America
+B7B000-B7BFFF     (base 16)		Doosan Digital Innovation America
+				195 GOVERNORS HWY
+				SOUTH WINDSOR  CT  06074-2419
+				US
+
+70-B3-D5   (hex)		Engage Technologies
+E11000-E11FFF     (base 16)		Engage Technologies
+				7041 Boone Avenue North
+				Brooklyn Park  MN  55428
+				US
+
+70-B3-D5   (hex)		GPSat Systems
+386000-386FFF     (base 16)		GPSat Systems
+				Suite 1 22 Aberdeen Road
+				Macleod  VIC  3085
+				AU
+
+70-B3-D5   (hex)		Season Electronics Ltd
+0F5000-0F5FFF     (base 16)		Season Electronics Ltd
+				600 Nest Business Park 
+				Havant  Hampshire  PO9 5TL
+				GB
+
+70-B3-D5   (hex)		Proemion GmbH
+A03000-A03FFF     (base 16)		Proemion GmbH
+				Donaustraße 14
+				Fulda  Hessen  36043
+				DE
+
+70-B3-D5   (hex)		Magenta Labs, Inc.
+376000-376FFF     (base 16)		Magenta Labs, Inc.
+				164 Townsend Street Unit 1
+				San Francisco  CA  94107
+				US
+
+70-B3-D5   (hex)		AC Power Corp.
+49C000-49CFFF     (base 16)		AC Power Corp.
+				3F, No.200, Gangqian Rd., Neihu District
+				Taipei City    11494
+				TW
+
+70-B3-D5   (hex)		Technological Ray GmbH
+4D7000-4D7FFF     (base 16)		Technological Ray GmbH
+				Zeppelinstraße 1
+				Hösbach  Bayern  63768
+				DE
+
+70-B3-D5   (hex)		PCS Inc.
+622000-622FFF     (base 16)		PCS Inc.
+				4974 Provident Drive
+				Cincinnati  OH  45246
+				US
+
+70-B3-D5   (hex)		GRYPHON SECURE INC
+738000-738FFF     (base 16)		GRYPHON SECURE INC
+				1015 - 2225 SHEPPARD AVE E
+				TORONTO  ONTARIO  M2J 5C2
+				CA
+
+70-B3-D5   (hex)		Beringar
+6EF000-6EFFFF     (base 16)		Beringar
+				citypoint - 65 Haymarket Terrace
+				Edinburgh  Lothian  EH12 5HD
+				GB
+
+70-B3-D5   (hex)		Satsky Communication Equipment Co.,Ltd.
+247000-247FFF     (base 16)		Satsky Communication Equipment Co.,Ltd.
+				6/F., 710 building, Liantang Pengji Industrial Zone,Luohu District
+				Shenzhen  Guangdong  518000
+				CN
+
+70-B3-D5   (hex)		LITUM BILGI TEKNOLOJILERI SAN. VE TIC. A.S.
+483000-483FFF     (base 16)		LITUM BILGI TEKNOLOJILERI SAN. VE TIC. A.S.
+				?evket Özçelik Sk. No:29 Kültür Mah. Litum Plaza
+				IZMIR    35220
+				TR
+
+70-B3-D5   (hex)		Shanghai Hourui Technology Co., Ltd.
+9A3000-9A3FFF     (base 16)		Shanghai Hourui Technology Co., Ltd.
+				Room A1001A,Building A,No.1618 Yishan Road
+				Shanghai    201103
+				CN
+
+70-B3-D5   (hex)		Optiver Pty Ltd
+B71000-B71FFF     (base 16)		Optiver Pty Ltd
+				39 HUNTER ST
+				SYDNEY  NSW  2000
+				AU
+
+70-B3-D5   (hex)		GEGA ELECTRONIQUE
+573000-573FFF     (base 16)		GEGA ELECTRONIQUE
+				1 RUE SAINT ELOI
+				MONTCEAU LES MINES  SAONE ET LOIRE  71300
+				FR
+
+70-B3-D5   (hex)		DAVE SRL
+27B000-27BFFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+70-B3-D5   (hex)		ZAO ZEO
+619000-619FFF     (base 16)		ZAO ZEO
+				Khachaturiana 14a
+				Moscow    127562
+				RU
+
+70-B3-D5   (hex)		Nuand LLC
+7D8000-7D8FFF     (base 16)		Nuand LLC
+				680 Mission Street #41H
+				San Francisco  CA  94105
+				US
+
+70-B3-D5   (hex)		Jinga-hi, Inc.
+9BB000-9BBFFF     (base 16)		Jinga-hi, Inc.
+				20303 Clifden Way
+				CUPERTINO  CA  95014
+				US
+
+70-B3-D5   (hex)		SeaTech Intelligent Technology (Shanghai) Co., LTD
+380000-380FFF     (base 16)		SeaTech Intelligent Technology (Shanghai) Co., LTD
+				5th Flr,7Bldg,No.518,Xinzhuan Road
+				Shanghai  Shanghai  201612
+				CN
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+8FB000-8FBFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		ABC Electric Co.
+3C8000-3C8FFF     (base 16)		ABC Electric Co.
+				Room 266, 1333 Road Xinlong
+				Shanghai    201101
+				CN
+
+70-B3-D5   (hex)		Senquire Pte. Ltd
+962000-962FFF     (base 16)		Senquire Pte. Ltd
+				12, Bedok Reservoir View,, 17-37
+				Singapore  Singapore  479237
+				SG
+
+70-B3-D5   (hex)		WILMORE ELECTRONICS COMPANY
+ED4000-ED4FFF     (base 16)		WILMORE ELECTRONICS COMPANY
+				607 US HIGHWAY 70A E
+				HILLSBOROUGH  NC  27278-8526
+				US
+
+70-B3-D5   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
+CBF000-CBFFFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
+				10545 Hardin Valley Rd
+				Knoxville  TN  37932
+				US
+
+70-B3-D5   (hex)		Veo Robotics, Inc.
+6C4000-6C4FFF     (base 16)		Veo Robotics, Inc.
+				411 Waverley Oaks Rd. Suite 107
+				Waltham  MA  02452
+				US
+
+70-B3-D5   (hex)		PCTEL, Inc.
+ED2000-ED2FFF     (base 16)		PCTEL, Inc.
+				22600 gateway center drive, Suite 100
+				Clarksburg  MD  20871
+				US
+
+70-B3-D5   (hex)		Energybox Limited
+FA4000-FA4FFF     (base 16)		Energybox Limited
+				8/F., Green 18, HK Science Park
+				Sha Tin  Hong Kong   0000
+				HK
+
+70-B3-D5   (hex)		eBZ GmbH
+C57000-C57FFF     (base 16)		eBZ GmbH
+				Neusser Straße 8
+				Bielefeld  NRW  33649
+				DE
+
+70-B3-D5   (hex)		Teneo IoT B.V.
+CDD000-CDDFFF     (base 16)		Teneo IoT B.V.
+				Landbouwstraat 5-06
+				Winterswijk    7101 EK
+				NL
+
+70-B3-D5   (hex)		tetronik GmbH AEN
+909000-909FFF     (base 16)		tetronik GmbH AEN
+				Silberbachstr.10
+				Taunusstein  Hessen  65232
+				DE
+
+70-B3-D5   (hex)		EBE Mobility & Green Energy GmbH
+624000-624FFF     (base 16)		EBE Mobility & Green Energy GmbH
+				Prießnitzgasse 16
+				Mödling  Austria  2340
+				AT
+
+70-B3-D5   (hex)		WuXi anktech Co., Ltd 
+B61000-B61FFF     (base 16)		WuXi anktech Co., Ltd 
+				Room1801, No.6 Third Financial Street, Binhu District, Wuxi City, Jiangsu Province
+				Wuxi  jiangsu  214000
+				CN
+
+70-B3-D5   (hex)		Power Element 
+D17000-D17FFF     (base 16)		Power Element 
+				Verkhnyaya Krasnoselskaya 2/1
+				Moscow  moscow  107140
+				RU
+
+70-B3-D5   (hex)		ISRV Zrt.
+AB1000-AB1FFF     (base 16)		ISRV Zrt.
+				 Löv?ház utca 2-6. IV. emelet
+				Budapest  PEST  1024 
+				HU
+
+70-B3-D5   (hex)		Boundary Technologies Ltd
+BBC000-BBCFFF     (base 16)		Boundary Technologies Ltd
+				61 Dublin Street
+				Edinburgh  Midlothian  EH3 6NL
+				GB
+
+70-B3-D5   (hex)		Microvision
+5F5000-5F5FFF     (base 16)		Microvision
+				272, Digital-ro, 1004ho Microvision.
+				Guro-gu, Seoul, Republic of Korea    08848
+				KR
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+70C000-70CFFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+C17000-C17FFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Field Design Inc.
+8D1000-8D1FFF     (base 16)		Field Design Inc.
+				BrightCore 4F, Kita-Shinagaw 5-5-15
+				Shinagawa-ku  Tokyo  1410001
+				JP
+
+70-B3-D5   (hex)		Alfa Elettronica srl
+BF0000-BF0FFF     (base 16)		Alfa Elettronica srl
+				Via Amman, 35
+				Cordenons  - - not required - -  33084
+				IT
+
+70-B3-D5   (hex)		PREO INDUSTRIES FAR EAST LTD
+8E8000-8E8FFF     (base 16)		PREO INDUSTRIES FAR EAST LTD
+				UNIT B, 26/F, AMIATA IND'L BLDG
+				HONG KONG    NIL
+				HK
+
+70-B3-D5   (hex)		Utopi Ltd
+80E000-80EFFF     (base 16)		Utopi Ltd
+				3 Candymill Lane
+				Hamilton    ML3 0FD
+				GB
+
+70-B3-D5   (hex)		Entec Solar S.L.
+887000-887FFF     (base 16)		Entec Solar S.L.
+				C/ Bambú 4
+				Madrid  Madrid  28036
+				ES
+
+70-B3-D5   (hex)		Nxvi Microelectronics Technology (Jinan) Co., Ltd.
+D78000-D78FFF     (base 16)		Nxvi Microelectronics Technology (Jinan) Co., Ltd.
+				2701, 27th floor, No. 7000, Hanyu Golden Valley Business Service Center, Jingshi Road, Jinan Area, Pilot Free Trade Zone, 
+				Jinan  Shandong   250102
+				CN
+
+70-B3-D5   (hex)		Procon Electronics Pty Ltd
+527000-527FFF     (base 16)		Procon Electronics Pty Ltd
+				P O Box 164
+				Seven Hills  NSW  1730
+				AU
+
+00-1B-C5   (hex)		OctoGate IT Security Systems GmbH
+030000-030FFF     (base 16)		OctoGate IT Security Systems GmbH
+				Klingender Strasse 5
+				Paderborn  NRW  33100
+				DE
+
+70-B3-D5   (hex)		AKASAKATEC  INC.
+D83000-D83FFF     (base 16)		AKASAKATEC  INC.
+				3F Marina Plaza 4-2
+				Shiraho kanazawa-ku Yokohamashi    2360007
+				JP
+
+70-B3-D5   (hex)		VTEQ
+B12000-B12FFF     (base 16)		VTEQ
+				Conca de Barbera
+				Castellar del Vallés  Barcelona / Spain  08122
+				ES
+
+70-B3-D5   (hex)		promedias AG
+520000-520FFF     (base 16)		promedias AG
+				Grabenackerstrasse 27
+				Oberhasli  ZH  CH-8156
+				CH
+
+70-B3-D5   (hex)		REO AG
+AD0000-AD0FFF     (base 16)		REO AG
+				Brühlerstr. 100
+				Solingen    42657
+				DE
+
+70-B3-D5   (hex)		Array Technologies Inc.
+FB4000-FB4FFF     (base 16)		Array Technologies Inc.
+				21 Sequin Drive
+				Glastonbury    06033
+				US
+
+70-B3-D5   (hex)		ejoin, s.r.o.
+44C000-44CFFF     (base 16)		ejoin, s.r.o.
+				Sturova 1
+				Dubnica nad Vahom    01841
+				SK
+
+70-B3-D5   (hex)		TEX COMPUTER SRL 
+390000-390FFF     (base 16)		TEX COMPUTER SRL 
+				VIA MERCADANTE 35
+				CATTOLICA   RIMINI   47841
+				IT
+
+70-B3-D5   (hex)		Grau Elektronik GmbH
+314000-314FFF     (base 16)		Grau Elektronik GmbH
+				Badhausweg 14
+				Karlsbad Ittersbach  Baden-Württemberg  76307
+				DE
+
+70-B3-D5   (hex)		microWerk GmbH
+D2C000-D2CFFF     (base 16)		microWerk GmbH
+				Kaffeegasse, 7
+				Halsenbach    56283
+				DE
+
+70-B3-D5   (hex)		Foxtrot Research Corp
+604000-604FFF     (base 16)		Foxtrot Research Corp
+				6201 Johns Road, Suite 3
+				Tampa  FL  33634
+				US
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+46D000-46DFFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		Monnit Corporation
+A1E000-A1EFFF     (base 16)		Monnit Corporation
+				450 South Simmons STE 670
+				Kaysville  UT  84037
+				US
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+681000-681FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Movicom Electric LLC
+3B3000-3B3FFF     (base 16)		Movicom Electric LLC
+				Nauchny proezd, 20
+				Moscow  Moscow  117246
+				RU
+
+70-B3-D5   (hex)		Sicon srl
+690000-690FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		SMITEC S.p.A.
+312000-312FFF     (base 16)		SMITEC S.p.A.
+				Via Carlo Ceresa, 10
+				San Giovanni Bianco  Bergamo  24015
+				IT
+
+70-B3-D5   (hex)		SCHEIBER
+CFA000-CFAFFF     (base 16)		SCHEIBER
+				2 BELLEVUE
+				SAINT PIERRE DU CHEMIN    85120
+				FR
+
+70-B3-D5   (hex)		Telerob Gesellschaft für Fernhantierungs
+6D4000-6D4FFF     (base 16)		Telerob Gesellschaft für Fernhantierungs
+				Vogelsangstr. 8
+				Ostfildern    73760
+				DE
+
+70-B3-D5   (hex)		Metrasens Limited
+ED6000-ED6FFF     (base 16)		Metrasens Limited
+				8 Beauchamp Business Centre,, Sparrowhawk Close
+				Malvern  Worcestershire  WR14 1GL
+				GB
+
+70-B3-D5   (hex)		Perform3-D LLC
+451000-451FFF     (base 16)		Perform3-D LLC
+				411 Huronview Blvd STE 200
+				Ann Arbor  MI  48103
+				US
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+906000-906FFF     (base 16)		Aplex Technology Inc.
+				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
+				Shenzhen City  Guangdong  518129
+				CN
+
+70-B3-D5   (hex)		DesignA Electronics Limited
+A63000-A63FFF     (base 16)		DesignA Electronics Limited
+				Unit 6
+				Christchurch  New Zealand  8011
+				NZ
+
+70-B3-D5   (hex)		Grayshift
+71F000-71FFFF     (base 16)		Grayshift
+				931 Monroe Dr NE, Suite A102-340
+				Atlanta  GA  30308
+				US
+
+70-B3-D5   (hex)		dongsheng
+AFD000-AFDFFF     (base 16)		dongsheng
+				No. 2, Sec. 2, Beiyi Rd., Xindian Dist.,
+				New Taipei City    231067
+				TW
+
+70-B3-D5   (hex)		Exemplar Medical, LLC
+318000-318FFF     (base 16)		Exemplar Medical, LLC
+				4521 Wornall Road, #106
+				Kansas City  MO  64111
+				US
+
+70-B3-D5   (hex)		HLT Micro 
+2B6000-2B6FFF     (base 16)		HLT Micro 
+				Bld 6, 4th Park, Xitian, GM Distinct
+				shenzhen    511088
+				CN
+
+70-B3-D5   (hex)		Cucos Retail Systems GmbH
+4CB000-4CBFFF     (base 16)		Cucos Retail Systems GmbH
+				Detmolder Straße 7
+				Soest    59494
+				DE
+
+70-B3-D5   (hex)		Apantac LLC
+450000-450FFF     (base 16)		Apantac LLC
+				7556 SW Bridgeport Road
+				Durham  OR  97224
+				US
+
+8C-1F-64   (hex)		GIORDANO CONTROLS SPA
+DBD000-DBDFFF     (base 16)		GIORDANO CONTROLS SPA
+				VIA PARALLELA 2/4
+				VILLA BARTOLOMEA  IT  37049
+				IT
+
+70-B3-D5   (hex)		i2Systems
+FFD000-FFDFFF     (base 16)		i2Systems
+				355 Bantam Lake Road
+				Morris  CT  06763
+				US
+
+8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
+918000-918FFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo  Oslo  0504
+				NO
+
+8C-1F-64   (hex)		Ruichuangte
+3E8000-3E8FFF     (base 16)		Ruichuangte
+				Zijinlianhelifang, No.155, LongPan Road
+				Nanjing  Jiangsu  210037
+				CN
+
+8C-1F-64   (hex)		Vishay Nobel AB
+9FD000-9FDFFF     (base 16)		Vishay Nobel AB
+				Box 423
+				Karlskoga    SE-691 27
+				SE
+
+8C-1F-64   (hex)		Shenzhen Pisoftware Technology Co.,Ltd.
+B03000-B03FFF     (base 16)		Shenzhen Pisoftware Technology Co.,Ltd.
+				Room 1221, 12F,Shenzhen Newspaper Group and Periodicals Building, Qinghu Community,Longhua Street, Longhua District, Shenzhen, China 
+				Shenzhen  GUANGDONG  518103
+				CN
+
+70-B3-D5   (hex)		ATS-CONVERS,LLC
+901000-901FFF     (base 16)		ATS-CONVERS,LLC
+				Yana Fabrittsyusa str., 10
+				Pskov    180017
+				RU
+
+8C-1F-64   (hex)		Langfang ENN lntelligent Technology Co.,Ltd.
+144000-144FFF     (base 16)		Langfang ENN lntelligent Technology Co.,Ltd.
+				HuaxiangRoad,No.106,Langfang Economic&Technical Devevlopment Zone,Hebei P.R.China
+				Langfang    065000
+				CN
+
+8C-1F-64   (hex)		ABB S.p.A.
+CF3000-CF3FFF     (base 16)		ABB S.p.A.
+				Via Pisani 16
+				Milano  MI  20124
+				IT
+
+8C-1F-64   (hex)		ASW-ATI Srl
+101000-101FFF     (base 16)		ASW-ATI Srl
+				Via Volontari della Libertà 54/56
+				Empoli    50053
+				IT
+
+8C-1F-64   (hex)		R2Sonic, LLC
+25E000-25EFFF     (base 16)		R2Sonic, LLC
+				5307 Industrial Oaks Blvd
+				Austin  TX  78735
+				US
+
+8C-1F-64   (hex)		Secure Bits
+D29000-D29FFF     (base 16)		Secure Bits
+				2 Taubman St
+				Symonston  ACT  2609
+				AU
+
+8C-1F-64   (hex)		Autopharma
+0E0000-0E0FFF     (base 16)		Autopharma
+				Orionweg 49
+				Leeuwarden    8938 AG
+				NL
+
+8C-1F-64   (hex)		Potter Electric Signal Company
+FE0000-FE0FFF     (base 16)		Potter Electric Signal Company
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+8C-1F-64   (hex)		Invisense AB
+2EF000-2EFFFF     (base 16)		Invisense AB
+				Nygatan 56
+				Linköping    582 27
+				SE
+
+8C-1F-64   (hex)		NewAgeMicro
+73D000-73DFFF     (base 16)		NewAgeMicro
+				171 Forbes Blvd, Suite 5000
+				Mansfield  MA  02048
+				US
+
+8C-1F-64   (hex)		DEUTA-WERKE GmbH
+BA3000-BA3FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+8C-1F-64   (hex)		INSEVIS GmbH
+414000-414FFF     (base 16)		INSEVIS GmbH
+				Am Weichselgarten 7
+				Erlangen    D-91058
+				DE
+
+8C-1F-64   (hex)		Shenzhen Longyun Lighting Electric Appliances Co., Ltd
+95A000-95AFFF     (base 16)		Shenzhen Longyun Lighting Electric Appliances Co., Ltd
+				Building A5 , Silicon Valley Power Industrial Park, No.334, Guiyue Road, Guanlan
+				Shenzhen  Guangdong  518110
+				CN
+
+8C-1F-64   (hex)		Peter Huber Kaeltemaschinenbau AG
+DC9000-DC9FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
+				Werner-von-Siemens-Str. 1
+				Offenburg  Ba-Wue  77656
+				DE
+
+8C-1F-64   (hex)		Guangzhou Desam Audio Co.,Ltd
+219000-219FFF     (base 16)		Guangzhou Desam Audio Co.,Ltd
+				101,Building 1,No.28,Wenqiao Rd,Wenbian Village,Shiji Town,Panyu District,Duangzhou
+				Duangzhou    511400
+				CN
+
+8C-1F-64   (hex)		Xacti Corporation
+90E000-90EFFF     (base 16)		Xacti Corporation
+				Tower East 28F,Umeda Sky Building,1-1-88,Oyodonaka,Kita-ku
+				Osaka  Osaka  531-6048
+				JP
+
+8C-1F-64   (hex)		Nexion Data Systems P/L
+712000-712FFF     (base 16)		Nexion Data Systems P/L
+				Unit 1, 53 Boyland Avenue
+				Coopers Plains  Queensland  4108
+				AU
+
+8C-1F-64   (hex)		ICT International
+60E000-60EFFF     (base 16)		ICT International
+				211 Mann St
+				Armidale  NSW  2350
+				AU
+
+8C-1F-64   (hex)		Bray International
+6AE000-6AEFFF     (base 16)		Bray International
+				13333 Westland East Blvd.
+				Houston  TX  77041
+				US
+
+8C-1F-64   (hex)		Software Systems Plus
+398000-398FFF     (base 16)		Software Systems Plus
+				9924 N. Ash Avenue
+				Kansas City    64157
+				US
+
+8C-1F-64   (hex)		EA Elektroautomatik GmbH & Co. KG
+F94000-F94FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+8C-1F-64   (hex)		Thermo Onix Ltd
+92A000-92AFFF     (base 16)		Thermo Onix Ltd
+				Ion Path
+				Winsford  Cheshire  CW7 3GA
+				GB
+
+8C-1F-64   (hex)		SPX Flow Technology
+B84000-B84FFF     (base 16)		SPX Flow Technology
+				4647 S.W. 40th Ave.
+				Ocala  FL  34474
+				US
+
+8C-1F-64   (hex)		Gemini Electronics B.V.
+54C000-54CFFF     (base 16)		Gemini Electronics B.V.
+				Burg. van Meeuwenstraat 14
+				Beek  Limburg  6191 ND
+				NL
+
+8C-1F-64   (hex)		MDI Industrial
+892000-892FFF     (base 16)		MDI Industrial
+				Rua Lilia Dias da Silva, 339
+				Lauro de Freitas  Bahia  42712-850
+				BR
+
+8C-1F-64   (hex)		ViewSonic International Corporation
+6E3000-6E3FFF     (base 16)		ViewSonic International Corporation
+				9F, No. 192, Lien Chen Road, Zhonghe Dist, New Taipei City 235, , Taiwan
+				New Taipei City  Taiwan  235
+				TW
+
+8C-1F-64   (hex)		LINEAGE POWER PVT LTD.,
+66C000-66CFFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+8C-1F-64   (hex)		First Mode
+C54000-C54FFF     (base 16)		First Mode
+				542 1st Ave S Ste 300
+				Seatte  WA  98104
+				US
+
+8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
+8EE000-8EEFFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo  Oslo  0504
+				NO
+
+8C-1F-64   (hex)		Integer.pl S.A.
+9D8000-9D8FFF     (base 16)		Integer.pl S.A.
+				Wielicka 28
+				Krakow    30-552
+				PL
+
+8C-1F-64   (hex)		victtron
+DB5000-DB5FFF     (base 16)		victtron
+				68, Saemal 2-gil, Daedeok-gu
+				Daejeon    34344
+				KR
+
+8C-1F-64   (hex)		Potter Electric Signal Company
+6AD000-6ADFFF     (base 16)		Potter Electric Signal Company
+				5757 Phantom Drive
+				Hazelwood  MO  63042
+				US
+
+8C-1F-64   (hex)		UISEE(SHANGHAI) AUTOMOTIVE TECHNOLOGIES LTD.
+3FF000-3FFFFF     (base 16)		UISEE(SHANGHAI) AUTOMOTIVE TECHNOLOGIES LTD.
+				Building 2,No 1818,Chengbei Road,Jiading District
+				shanghai  shanghai  201800
+				CN
+
+8C-1F-64   (hex)		ZUUM
+708000-708FFF     (base 16)		ZUUM
+				4321 W Sam Houston Pkwy N Ste 120
+				Houston  TX  77043
+				US
+
+8C-1F-64   (hex)		Labtrino AB
+619000-619FFF     (base 16)		Labtrino AB
+				Sankt Eriksgatan 33A
+				Stockholm  Stockholm  11239
+				SE
+
+8C-1F-64   (hex)		Revo - Tec GmbH
+164000-164FFF     (base 16)		Revo - Tec GmbH
+				Zeller Straße 14
+				Mittersill    5730
+				AT
+
+8C-1F-64   (hex)		ABB
+FB1000-FB1FFF     (base 16)		ABB
+				Fulachstrasse 150
+				Schaffhausen    8200
+				CH
+
+8C-1F-64   (hex)		MATELEX
+909000-909FFF     (base 16)		MATELEX
+				4 rue de la Croix Faubin
+				Paris    75011
+				FR
+
+8C-1F-64   (hex)		DREAMSWELL Technology CO.,Ltd
+F9E000-F9EFFF     (base 16)		DREAMSWELL Technology CO.,Ltd
+				1F.,NO.17, MINGYUAN., DASHE DIST
+				KAOHSIUHG    815
+				TW
+
+8C-1F-64   (hex)		THUNDER DATA TAIWAN CO., LTD.
+638000-638FFF     (base 16)		THUNDER DATA TAIWAN CO., LTD.
+				9F., NO. 168, RUIGUANG RD., NEIHU DIST.
+				TAIPEI CITY    114
+				TW
+
+8C-1F-64   (hex)		Chongqing Huaxiu Technology Co.,Ltd
+1DA000-1DAFFF     (base 16)		Chongqing Huaxiu Technology Co.,Ltd
+				Room 1005/1006, SOHO Building, No. 28-2, Xiyong Street, Shapingba District, Chongqing
+				Chongqing    400000
+				CN
+
+8C-1F-64   (hex)		Xylon
+0F0000-0F0FFF     (base 16)		Xylon
+				Fallerovo setaliste 22
+				Zagreb    10000
+				HR
+
+8C-1F-64   (hex)		XOR UK Corporation Limited
+4EC000-4ECFFF     (base 16)		XOR UK Corporation Limited
+				Unit 11-12, Stanhope Gate, Stanhope Rd
+				Camberley  Surrey  GU15 3DW
+				GB
+
+8C-1F-64   (hex)		Seed Core Co., LTD.
+B82000-B82FFF     (base 16)		Seed Core Co., LTD.
+				37-17, Yuseong-daero 1628 Yuseong-gu
+				Daejeon    34054
+				KR
+
+8C-1F-64   (hex)		Renwei Electronics Technology (Shenzhen) Co.,LTD.
+1BB000-1BBFFF     (base 16)		Renwei Electronics Technology (Shenzhen) Co.,LTD.
+				Rm 1-704 Tongjian Bldg. Shennan Middle Road
+				Shenzhen  GUANG DONG  518028
+				CN
+
+8C-1F-64   (hex)		Plum sp. z.o.o.
+3FE000-3FEFFF     (base 16)		Plum sp. z.o.o.
+				Ignatki, ul. Wspólna 19
+				Kleosin  No States Found. Use Address  16-001
+				PL
+
+8C-1F-64   (hex)		Inovonics Inc.
+F59000-F59FFF     (base 16)		Inovonics Inc.
+				5805 HWY 9
+				FELTON  CA  95018-9680
+				US
+
+70-B3-D5   (hex)		R.A.I.T.88 Srl
+6C1000-6C1FFF     (base 16)		R.A.I.T.88 Srl
+				Via di Cervara 49,
+				Rome    00155
+				IT
+
+8C-1F-64   (hex)		HORIBA ABX SAS
+C01000-C01FFF     (base 16)		HORIBA ABX SAS
+				rue du caducee
+				Montpellier  Herault  34000
+				FR
+
+8C-1F-64   (hex)		Wisdom Audio
+D56000-D56FFF     (base 16)		Wisdom Audio
+				1572 College Parkway
+				Carson City  NV  89706
+				US
+
+8C-1F-64   (hex)		DORLET SAU
+071000-071FFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+8C-1F-64   (hex)		Paulmann Licht GmbH
+956000-956FFF     (base 16)		Paulmann Licht GmbH
+				Quezinger Feld 2
+				Springe    31832
+				DE
+
+8C-1F-64   (hex)		BLIGHTER SURVEILLANCE SYSTEMS LTD
+B22000-B22FFF     (base 16)		BLIGHTER SURVEILLANCE SYSTEMS LTD
+				Iceni House, London Road, Great Chesterford
+				Saffron Walden  Essex  CB10 1NY
+				GB
+
+8C-1F-64   (hex)		Genesis Technologies AG
+8A4000-8A4FFF     (base 16)		Genesis Technologies AG
+				Werkstrasse 73
+				Lyss  Bern  3250
+				CH
+
+8C-1F-64   (hex)		Columbus McKinnon
+535000-535FFF     (base 16)		Columbus McKinnon
+				9415 Pioneer Avenue
+				Charlotte  NC  28273
+				US
+
+8C-1F-64   (hex)		Toshniwal Security Solutions Pvt Ltd
+45F000-45FFFF     (base 16)		Toshniwal Security Solutions Pvt Ltd
+				industrial estate, makhupura, ajmer, rajasthan
+				ajmer  Rajasthan  305002
+				IN
+
+8C-1F-64   (hex)		Methods2Business B.V.
+7EC000-7ECFFF     (base 16)		Methods2Business B.V.
+				Burg. Wittestraat 21
+				EINDHOVEN  Noord-Brabant  5616 DA
+				NL
+
+8C-1F-64   (hex)		JinYuan International Corporation
+E5D000-E5DFFF     (base 16)		JinYuan International Corporation
+				8F., No. 649-8, Zhongzheng Rd. Xinzhuang Dist.
+				New Taipei City    242051
+				TW
+
+8C-1F-64   (hex)		VisionTIR Multispectral Technology
+747000-747FFF     (base 16)		VisionTIR Multispectral Technology
+				C/Pierre Laffitte Nº8
+				Málaga  Málaga  29590
+				ES
+
+8C-1F-64   (hex)		Megger Germany GmbH
+298000-298FFF     (base 16)		Megger Germany GmbH
+				Röderaue 41
+				Radeburg    01471
+				DE
+
+8C-1F-64   (hex)		SmartSky Networks LLC
+0EA000-0EAFFF     (base 16)		SmartSky Networks LLC
+				45610 Woodland Road, Suite 370
+				Sterling  VA  20166
+				US
+
+8C-1F-64   (hex)		KJ Klimateknik A/S
+454000-454FFF     (base 16)		KJ Klimateknik A/S
+				Bommen 2
+				Kjellerup    8620
+				DK
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+498000-498FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		Nautel LTD
+A32000-A32FFF     (base 16)		Nautel LTD
+				10089 Peggy's Cove Road
+				Hackett's Cove  NS  B3Z 3J4
+				CA
+
+8C-1F-64   (hex)		Gemini Electronics B.V.
+B97000-B97FFF     (base 16)		Gemini Electronics B.V.
+				Burg. van Meeuwenstraat 14
+				Beek  Limburg  6191 ND
+				NL
+
+70-B3-D5   (hex)		Nautel LTD
+87C000-87CFFF     (base 16)		Nautel LTD
+				10089 Peggy's Cove Road
+				Hackett's Cove  Nova Scotia  B3Z3J4
+				CA
+
+8C-1F-64   (hex)		MTU Aero Engines AG
+B10000-B10FFF     (base 16)		MTU Aero Engines AG
+				Dachauer Straße 665
+				München  Bavaria  80995
+				DE
+
+8C-1F-64   (hex)		Shenzhen INVT Electric Co.,Ltd
+F32000-F32FFF     (base 16)		Shenzhen INVT Electric Co.,Ltd
+				INVT Guangming Technology Building,Songbai Road
+				ShenZhen  Matian,Guangming District  518106  
+				CN
+
+8C-1F-64   (hex)		Hermes Network Inc
+8C4000-8C4FFF     (base 16)		Hermes Network Inc
+				1810 E Sahara Ave Ste 212-1354
+				Las Vegas  NV  89104-3707
+				US
+
+8C-1F-64   (hex)		INSTITUTO DE GESTÃO, REDES TECNOLÓGICAS E NERGIAS
+9A6000-9A6FFF     (base 16)		INSTITUTO DE GESTÃO, REDES TECNOLÓGICAS E NERGIAS
+				Rua Martinho Rodrigues, 331 - FÁTIMA, , 60411-280
+				FORTALEZA  CEARÁ  60411-280
+				BR
+
+8C-1F-64   (hex)		HEITEC AG
+5BC000-5BCFFF     (base 16)		HEITEC AG
+				Dr.-Otto-Leich-Str. 16
+				Eckental  Bavaria  90542
+				DE
+
+8C-1F-64   (hex)		Metroval Controle de Fluidos Ltda
+9FE000-9FEFFF     (base 16)		Metroval Controle de Fluidos Ltda
+				RUA CHRISTIANO KILMEYERS, 819
+				NOVA ODESSA  SP  13380-296
+				BR
+
+8C-1F-64   (hex)		IWS Global Pty Ltd
+4BB000-4BBFFF     (base 16)		IWS Global Pty Ltd
+				29 Oxleigh Dr
+				Perth  Western Australia  6090
+				AU
+
+8C-1F-64   (hex)		Tieline Research Pty Ltd
+4F0000-4F0FFF     (base 16)		Tieline Research Pty Ltd
+				PO Box 2092
+				MALAGA  Western Australia  6944
+				AU
+
+8C-1F-64   (hex)		HM Systems A/S
+6FC000-6FCFFF     (base 16)		HM Systems A/S
+				Melskov Alle 6
+				Haderslev    6100
+				DK
+
+8C-1F-64   (hex)		MARIAN GmbH
+FB0000-FB0FFF     (base 16)		MARIAN GmbH
+				Berggartenstr. 12
+				Leipzig    04155
+				DE
+
+8C-1F-64   (hex)		Stange Elektronik GmbH
+E61000-E61FFF     (base 16)		Stange Elektronik GmbH
+				Gutenbergstrasse 3
+				Gummersbach    51645
+				DE
+
+70-B3-D5   (hex)		PHB Eletronica Ltda.
+904000-904FFF     (base 16)		PHB Eletronica Ltda.
+				12 Sao Bernardino
+				São Paulo  Parque Anhanguera  05120-050
+				BR
+
+8C-1F-64   (hex)		PHB Eletronica Ltda.
+224000-224FFF     (base 16)		PHB Eletronica Ltda.
+				12 Sao Bernardino
+				São Paulo  Parque Anhanguera  05120-050
+				BR
+
+8C-1F-64   (hex)		SORB ENGINEERING LLC
+085000-085FFF     (base 16)		SORB ENGINEERING LLC
+				Grishina street 24/1 44
+				Moscow    121354
+				RU
+
+70-B3-D5   (hex)		Delta Solutions LLC
+0E5000-0E5FFF     (base 16)		Delta Solutions LLC
+				Kolhoznaya str., 8A, Room 20, 2nd Floor
+				Lubertsy  Lubertsy City District, Moscow Region  140002
+				RU
+
+8C-1F-64   (hex)		Taiv
+09B000-09BFFF     (base 16)		Taiv
+				195 McPhillips St
+				Winnipeg  Manitoba  R3E 2K2
+				CA
+
+8C-1F-64   (hex)		AT-Automation Technology GmbH
+69E000-69EFFF     (base 16)		AT-Automation Technology GmbH
+				Hermann-Boessow-Str. 6-8
+				Bad Oldesloe    D-23843
+				DE
+
+8C-1F-64   (hex)		biosilver .co.,ltd
+641000-641FFF     (base 16)		biosilver .co.,ltd
+				2-14-4, shinyokohama
+				yokohama  kanagawa  2220033
+				JP
+
+8C-1F-64   (hex)		Beijing Tongtech Technology Co., Ltd.
+12B000-12BFFF     (base 16)		Beijing Tongtech Technology Co., Ltd.
+				Room 3017, Building 1, Hongfu Science Park, Changping District
+				Beijing  Beijing  100029
+				CN
+
+8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
+429000-429FFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo  Oslo  0504
+				NO
+
+8C-1F-64   (hex)		EOLANE
+911000-911FFF     (base 16)		EOLANE
+				ZI DU VAL D OMBREE
+				COMBREE  -  49520
+				FR
+
+8C-1F-64   (hex)		Huz Electronics Ltd
+BC2000-BC2FFF     (base 16)		Huz Electronics Ltd
+				10 Avondale road
+				Cwmbran  S Wales  NP44 1UD
+				GB
+
+8C-1F-64   (hex)		Microlynx Systems Ltd
+F3C000-F3CFFF     (base 16)		Microlynx Systems Ltd
+				#107, 1925 - 18 Ave NE
+				Calgary  AB  T2E 7T8
+				CA
+
+8C-1F-64   (hex)		ANDDORO LLC
+6F9000-6F9FFF     (base 16)		ANDDORO LLC
+				1430 Broadway NY 
+				New York  NY  10018
+				US
+
+8C-1F-64   (hex)		GIORDANO CONTROLS SPA
+807000-807FFF     (base 16)		GIORDANO CONTROLS SPA
+				VIA PARALLELA 2/4
+				VILLA BARTOLOMEA  IT  37049
+				IT
+
+8C-1F-64   (hex)		VEILUX INC.
+045000-045FFF     (base 16)		VEILUX INC.
+				802 GREENVIEW DR. STE 200
+				GRAND PRAIRIE    75050
+				US
+
+8C-1F-64   (hex)		Cleanwatts Digital, S.A.
+0E6000-0E6FFF     (base 16)		Cleanwatts Digital, S.A.
+				Ladeira da Paula, 6
+				Antanhol-Coimbra    3040-574
+				PT
+
+8C-1F-64   (hex)		FORSEE POWER
+0AF000-0AFFFF     (base 16)		FORSEE POWER
+				2 chemin du ruisseau
+				ECULLY    69130
+				FR
+
+8C-1F-64   (hex)		Sakura Seiki Co.,Ltd.
+28C000-28CFFF     (base 16)		Sakura Seiki Co.,Ltd.
+				75-5, Imojiya
+				Chikuma-city  Nagano Prefecture  387-0015
+				JP
+
+8C-1F-64   (hex)		Indefac company
+E64000-E64FFF     (base 16)		Indefac company
+				Ka-211, Whangmool ro 190, DongDaemoon Gu 
+				Seoul    02622
+				KR
+
+8C-1F-64   (hex)		Jide Car Rastreamento e Monitoramento LTDA
+22E000-22EFFF     (base 16)		Jide Car Rastreamento e Monitoramento LTDA
+				Rua Arcipreste Andrade 630
+				São Paulo  São Paulo  04268020
+				BR
+
+8C-1F-64   (hex)		Fingoti Limited
+CD9000-CD9FFF     (base 16)		Fingoti Limited
+				Barnam Ham Farm
+				Bickleigh, Plymouth  Devon  PL6 7AL
+				GB
+
+8C-1F-64   (hex)		Grace Design/Lunatec LLC
+FB7000-FB7FFF     (base 16)		Grace Design/Lunatec LLC
+				4689 Ute Highway
+				Longmont  CO  80503
+				US
+
+8C-1F-64   (hex)		Farmobile LLC
+672000-672FFF     (base 16)		Farmobile LLC
+				4001 W. 114th, Suite 300
+				Leawood  KS  66251
+				US
+
+8C-1F-64   (hex)		Real Digital
+3B2000-3B2FFF     (base 16)		Real Digital
+				655 SW James Pl
+				Pullman  WA  99163
+				US
+
+8C-1F-64   (hex)		Zhuhai Yunzhou Intelligence Technology Ltd.
+254000-254FFF     (base 16)		Zhuhai Yunzhou Intelligence Technology Ltd.
+				Room 311,312A,Floor 3,Heung Shan TechPort,No.3888 Qinglv North Road,Tangjiawan Town
+				Zhuhai  Guangdong  519000
+				CN
+
+8C-1F-64   (hex)		AIQuatro
+AC0000-AC0FFF     (base 16)		AIQuatro
+				143B
+				São Paulo  São Paulo  02433-070
+				BR
+
+8C-1F-64   (hex)		Active Research Limited
+0C0000-0C0FFF     (base 16)		Active Research Limited
+				21 Harwell Road
+				Poole  Dorset  BH17 0GE
+				GB
+
+8C-1F-64   (hex)		Beijing Redlink Information Technology Co., Ltd.
+D9A000-D9AFFF     (base 16)		Beijing Redlink Information Technology Co., Ltd.
+				Room 5, 2nd floor, Deshi Building, Haidian District, Beijing, China
+				Beijing    100085
+				CN
+
+8C-1F-64   (hex)		Sphere Com Services Pvt Ltd
+A6A000-A6AFFF     (base 16)		Sphere Com Services Pvt Ltd
+				Sphere Com Services Pvt Ltd, F-16-22, pankaj plaza, plot-no-7, Sector - 12, Dwarka, New Delhi - 110075, New Delhi
+				New Delhi  Delhi  110075
+				IN
+
+8C-1F-64   (hex)		suzhou yuecrown Electronic Technology Co.,LTD
+CCB000-CCBFFF     (base 16)		suzhou yuecrown Electronic Technology Co.,LTD
+				B6,no.1599,West Chengbei Road,Gusu District
+				suzhou  jiangsu  215000
+				CN
+
+8C-1F-64   (hex)		nke marine electronics
+817000-817FFF     (base 16)		nke marine electronics
+				6 rue gutenberg
+				Hennebont    56700
+				FR
+
+8C-1F-64   (hex)		GS Industrie-Elektronik GmbH
+6B9000-6B9FFF     (base 16)		GS Industrie-Elektronik GmbH
+				Porschestrasse 11
+				Leverkusen    51381
+				DE
+
+8C-1F-64   (hex)		Paragraf
+01A000-01AFFF     (base 16)		Paragraf
+				7-8 West Newlands
+				Somersham  Cambridgeshire  PE28 3EB
+				GB
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+5AC000-5ACFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		Transdigital Pty Ltd
+7CF000-7CFFFF     (base 16)		Transdigital Pty Ltd
+				1/160 Stirling Highway
+				Nedlands  Western Australia  6009
+				AU
+
+8C-1F-64   (hex)		Talleres de Escoriaza SA
+F65000-F65FFF     (base 16)		Talleres de Escoriaza SA
+				Barrio Ventas, 35
+				Irun  Gipuzkoa  20305
+				ES
+
+8C-1F-64   (hex)		EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
+CDB000-CDBFFF     (base 16)		EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
+				1132 Budapest, Váci út 22-24. 3. em.)
+				Budapest    1132
+				HU
+
+8C-1F-64   (hex)		Goodtech AS dep Fredrikstad
+C0E000-C0EFFF     (base 16)		Goodtech AS dep Fredrikstad
+				Gamle Beddingvei 28
+				FREDRIKSTAD  Viken  1671
+				NO
+
+70-B3-D5   (hex)		TRUMPF Huttinger GmbH + Co. KG,
+CD2000-CD2FFF     (base 16)		TRUMPF Huttinger GmbH + Co. KG,
+				Helmholtzstr. 1
+				Stutensee    76297
+				DE
+
+8C-1F-64   (hex)		HTK Hamburg GmbH
+6D5000-6D5FFF     (base 16)		HTK Hamburg GmbH
+				Frahmredder 49
+				Hamburg  Hamburg  22393
+				DE
+
+8C-1F-64   (hex)		DIALTRONICS SYSTEMS PVT LTD
+1A5000-1A5FFF     (base 16)		DIALTRONICS SYSTEMS PVT LTD
+				Dialtronics Systems Pvt Ltd, #201, Sirisampada Hitech, Kavuri Hills, Madhapur
+				Hyderabad  Telangana  500081
+				IN
+
+8C-1F-64   (hex)		dinosys
+5CB000-5CBFFF     (base 16)		dinosys
+				501,35,Gwangnaruro 6-gil,
+				Seoul  Seoul  133-832
+				KR
+
+8C-1F-64   (hex)		Agvolution GmbH
+098000-098FFF     (base 16)		Agvolution GmbH
+				Philipp-Reis-Str. 2A
+				Göttingen    37075
+				DE
+
+8C-1F-64   (hex)		HIROSAWA ELECTRIC Co.,Ltd.
+7D8000-7D8FFF     (base 16)		HIROSAWA ELECTRIC Co.,Ltd.
+				2-13-14 Nishikoujiya
+				Otaku  Tokyo  1440034
+				JP
+
+8C-1F-64   (hex)		WonATech Co., Ltd.
+890000-890FFF     (base 16)		WonATech Co., Ltd.
+				7, Neunganmal 1-gil
+				Seocho-gu  Seoul  06801
+				KR
+
+8C-1F-64   (hex)		Agramkow A/S
+8D5000-8D5FFF     (base 16)		Agramkow A/S
+				Augustenborg Landevej 19
+				Sønderborg    6400
+				DK
+
+8C-1F-64   (hex)		Gogo BA 
+092000-092FFF     (base 16)		Gogo BA 
+				105 Edgeview Drive
+				Broomfield  CO  80021
+				US
+
+8C-1F-64   (hex)		HuiTong intelligence Company
+240000-240FFF     (base 16)		HuiTong intelligence Company
+				8F., No. 51, Ln. 258, Rueiguang Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C.)
+				Taipei    114
+				TW
+
+8C-1F-64   (hex)		axelife
+AA8000-AA8FFF     (base 16)		axelife
+				17 place Eugène Lafontaine
+				Saint Nicolas de Redon    44460
+				FR
+
+8C-1F-64   (hex)		Zynex Monitoring Solutions
+8B9000-8B9FFF     (base 16)		Zynex Monitoring Solutions
+				9555 Maroon Circle
+				Englewood    80112
+				US
+
+8C-1F-64   (hex)		MClavis Co.,Ltd.
+AB7000-AB7FFF     (base 16)		MClavis Co.,Ltd.
+				2nd Fl. 9, Dongsan-ro 14gil, Seocho-gu
+				Seoul  Seoul  06784
+				KR
+
+8C-1F-64   (hex)		SANWA CORPORATION
+C04000-C04FFF     (base 16)		SANWA CORPORATION
+				808, Shimbashi ekimae bldg. No.1, 2-20-15 Shimbashi, minato-ku
+				minato-ku  Tokyo  1050004
+				JP
+
+8C-1F-64   (hex)		Beijing Aoxing Technology Co.,Ltd
+45B000-45BFFF     (base 16)		Beijing Aoxing Technology Co.,Ltd
+				No.204,2f,building 8,Zhongguancun Software Park,No.8,Dongbeiwang West Road,Haidian District
+				BeiJing  BeiJing  100193
+				CN
+
+8C-1F-64   (hex)		Axcend
+E62000-E62FFF     (base 16)		Axcend
+				5252 N Edgewood Dr
+				Provo  UT  84604
+				US
+
+70-B3-D5   (hex)		DCS Corp
+900000-900FFF     (base 16)		DCS Corp
+				295 Foster Street Suite 120
+				Littleton  MA  01460
+				US
+
+8C-1F-64   (hex)		Monnit Corporation
+739000-739FFF     (base 16)		Monnit Corporation
+				450 South Simmons STE 670
+				Kaysville  UT  84037
+				US
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+2FB000-2FBFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+8C-1F-64   (hex)		Druck Ltd.
+8E5000-8E5FFF     (base 16)		Druck Ltd.
+				Firtree Lane, Groby, Leicester
+				Le6 0FH  England  
+				GB
+
+8C-1F-64   (hex)		Corigine,Inc.
+306000-306FFF     (base 16)		Corigine,Inc.
+				Room202 ,west side of 2nd floor,Building 1,1516 Hongfeng Road
+				Huzhou  Zhejiang  313000 
+				CN
+
+8C-1F-64   (hex)		Orange Precision Measurement LLC
+7EE000-7EEFFF     (base 16)		Orange Precision Measurement LLC
+				212 Technology Dr,Suite K
+				Irvine    92618
+				US
+
+8C-1F-64   (hex)		NAS Engineering PRO
+D20000-D20FFF     (base 16)		NAS Engineering PRO
+				Liduma 17
+				Jelgava  Jelgava  LV-3001
+				LV
+
+70-B3-D5   (hex)		YPP Corporation
+119000-119FFF     (base 16)		YPP Corporation
+				24
+				Geumchon-gu  Seoul  153-802
+				KR
+
+8C-1F-64   (hex)		Applied Materials
+D3A000-D3AFFF     (base 16)		Applied Materials
+				2100 Brighton Henrietta Townline Rd
+				Rochester  NY  14623
+				US
+
+70-B3-D5   (hex)		HKC Security Ltd.
+CB7000-CB7FFF     (base 16)		HKC Security Ltd.
+				Parkway Business Centre
+				Ballymount  Dublin  Dublin 24
+				IE
+
+8C-1F-64   (hex)		Invendis Technologies India Pvt Ltd
+FFC000-FFCFFF     (base 16)		Invendis Technologies India Pvt Ltd
+				#230 BOOHBCS Layout BTM 2nd Stage 38th MAIN 1ST CROSS
+				Bengaluru  Karnataka  560068
+				IN
+
+8C-1F-64   (hex)		Mokila Networks Pvt Ltd
+23D000-23DFFF     (base 16)		Mokila Networks Pvt Ltd
+				101, First Floor, Block 1, White HouseKundanbagh, Begumpet
+				Hyderabad  Telangana  500016
+				IN
+
+70-B3-D5   (hex)		KSE GmbH
+D41000-D41FFF     (base 16)		KSE GmbH
+				Kaethe Paulus Strasse 6
+				Koesching    85092
+				DE
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+366000-366FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+8C-1F-64   (hex)		Sound Health Systems
+BCC000-BCCFFF     (base 16)		Sound Health Systems
+				650B Fremont Ave #65
+				Los Altos  CA  94024
+				US
+
+8C-1F-64   (hex)		Colombo Sales & Engineering, Inc.
+7E0000-7E0FFF     (base 16)		Colombo Sales & Engineering, Inc.
+				17108 S. Hemlock Rd
+				Oakley  MI  48649
+				US
+
+8C-1F-64   (hex)		robert juliat
+7E7000-7E7FFF     (base 16)		robert juliat
+				32 route de beaumont
+				fresnoy en thelle  Oise  60530
+				FR
+
+8C-1F-64   (hex)		Paul Tagliamonte
+354000-354FFF     (base 16)		Paul Tagliamonte
+				PO Box 15335
+				Washington  DC  20003
+				US
+
+70-B3-D5   (hex)		Medicomp, Inc
+591000-591FFF     (base 16)		Medicomp, Inc
+				600 Atlantis Rd
+				Melbourne  FL  32904
+				US
+
+8C-1F-64   (hex)		Koizumi Lighting Technology Corp.
+26E000-26EFFF     (base 16)		Koizumi Lighting Technology Corp.
+				3-5-2-Chome
+				Higashinakamoto,Higashinari-ku,Osaka    537-0021
+				JP
+
+8C-1F-64   (hex)		Local Security
+D5B000-D5BFFF     (base 16)		Local Security
+				113-437 Martin StreetSuite 422
+				Penticton  BC  V2A5L1
+				CA
+
+8C-1F-64   (hex)		Converging Systems Inc.
+009000-009FFF     (base 16)		Converging Systems Inc.
+				32420 Nautilus Drive
+				Rancho Palos Verdes  CA  90275
+				US
+
+8C-1F-64   (hex)		TYT Electronics CO., LTD
+252000-252FFF     (base 16)		TYT Electronics CO., LTD
+				Block 39-1, Optoelectronics-information industry base, Nan’an,
+				Quanzhou  Fujian  362300
+				CN
+
+8C-1F-64   (hex)		TRON FUTURE TECH INC.
+15C000-15CFFF     (base 16)		TRON FUTURE TECH INC.
+				7F-A, No. 1, Sec. 3, Gongdao 5th Rd., Hsinchu 300, Taiwan (R.O.C.)
+				Hsinchu    30069
+				TW
+
+8C-1F-64   (hex)		Elbit Systems of America, LLC
+2A9000-2A9FFF     (base 16)		Elbit Systems of America, LLC
+				3401 Quorum Drive (Suite 380)
+				Fortworth  TX  76137
+				US
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+2C6000-2C6FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		MinebeaMitsumi Inc.
+AF0000-AF0FFF     (base 16)		MinebeaMitsumi Inc.
+				3-9-6, Mita
+				Minato-ku  Tokyo  1080073
+				JP
+
+8C-1F-64   (hex)		Pharsighted LLC
+46A000-46AFFF     (base 16)		Pharsighted LLC
+				7 Pepperidge Road
+				Boonton Township  NJ  07005
+				US
+
+8C-1F-64   (hex)		OMNIVISION
+387000-387FFF     (base 16)		OMNIVISION
+				4275 Burton Dr
+				Santa Clara  CA  95054
+				US
+
+8C-1F-64   (hex)		qiio AG
+08E000-08EFFF     (base 16)		qiio AG
+				Am Wasser 24
+				Zurich  Zurich  8049
+				CH
+
+8C-1F-64   (hex)		GSP Sprachtechnologie GmbH
+F10000-F10FFF     (base 16)		GSP Sprachtechnologie GmbH
+				Teltowkanalstraße 1
+				Berlin    12247
+				DE
+
+8C-1F-64   (hex)		EA Elektro-Automatik
+F57000-F57FFF     (base 16)		EA Elektro-Automatik
+				Helmholtzstraße 31-37
+				Viersen  Nordrhein-Westfalen  41747
+				DE
+
+8C-1F-64   (hex)		Flextronics International Kft
+3B0000-3B0FFF     (base 16)		Flextronics International Kft
+				38. Zrinyi Str.
+				Zalaegerszeg  Zala  8900
+				HU
+
+8C-1F-64   (hex)		AXID SYSTEM
+7B0000-7B0FFF     (base 16)		AXID SYSTEM
+				105 route du Pin Montard
+				BIOT  PACA  06410
+				FR
+
+8C-1F-64   (hex)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
+AF5000-AF5FFF     (base 16)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
+				Koren industrial zone no 5
+				Mallot  Israel  2101002
+				IL
+
+8C-1F-64   (hex)		Automata GmbH & Co. KG
+61C000-61CFFF     (base 16)		Automata GmbH & Co. KG
+				Gewerbering 5
+				Ried  Bavaria  86510
+				DE
+
+8C-1F-64   (hex)		Sicon srl
+187000-187FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+8C-1F-64   (hex)		DAVE SRL
+9AB000-9ABFFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+8C-1F-64   (hex)		Invendis Technologies India Pvt Ltd
+C52000-C52FFF     (base 16)		Invendis Technologies India Pvt Ltd
+				#230 BOOHBCS Layout BTM 2nd Stage 38th MAIN 1ST CROSS
+				Bengaluru  Karnataka  560068
+				IN
+
+8C-1F-64   (hex)		ABB
+852000-852FFF     (base 16)		ABB
+				Fulachstrasse 150
+				Schaffhausen    8200
+				CH
+
+8C-1F-64   (hex)		ComVetia AG
+E86000-E86FFF     (base 16)		ComVetia AG
+				Wittenwilerstrasse 31
+				Aadorf  TG  8355
+				CH
+
+8C-1F-64   (hex)		PREO INDUSTRIES FAR EAST LTD
+63F000-63FFFF     (base 16)		PREO INDUSTRIES FAR EAST LTD
+				UNIT B, 26/F, AMIATA IND'L BLDG
+				HONG KONG    NIL
+				HK
+
+8C-1F-64   (hex)		Universal Robots A/S
+AFD000-AFDFFF     (base 16)		Universal Robots A/S
+				Energivej 25
+				Odense S  Odense  5260
+				DK
+
+8C-1F-64   (hex)		Video Network Security
+733000-733FFF     (base 16)		Video Network Security
+				Suite 402-01, B Wing DSO HQ Building
+				Dubai    6009
+				AE
+
+8C-1F-64   (hex)		Specialist Mechanical Engineers (PTY)LTD
+6B1000-6B1FFF     (base 16)		Specialist Mechanical Engineers (PTY)LTD
+				907 HertzogstreetRietfontein
+				Pretoria  Gauteng  0182
+				ZA
+
+8C-1F-64   (hex)		XIAMEN ZHIXIAOJIN INTELLIGENT TECHNOLOGY CO., LTD
+38C000-38CFFF     (base 16)		XIAMEN ZHIXIAOJIN INTELLIGENT TECHNOLOGY CO., LTD
+				8th Floor, 99-4, Zhigu Dong Yi Road, Xike Town, Tong 'an District
+				Xiamen  Fujian  361100
+				CN
+
+8C-1F-64   (hex)		Orbital Astronautics Ltd
+369000-369FFF     (base 16)		Orbital Astronautics Ltd
+				Atlas Building, Harwell Campus
+				Didcot  Oxfordshire  OX11 0QX
+				GB
+
+8C-1F-64   (hex)		Technology for Energy Corp
+9E2000-9E2FFF     (base 16)		Technology for Energy Corp
+				10737 Lexington Dr
+				Knoxville  TN  37932
+				US
+
+8C-1F-64   (hex)		Gogo Business Aviation
+963000-963FFF     (base 16)		Gogo Business Aviation
+				105 Edgeview Dr., Suite 300
+				Broomfield  CO  80021
+				US
+
+8C-1F-64   (hex)		Loop Technologies
+B6E000-B6EFFF     (base 16)		Loop Technologies
+				35 Bryant Road
+				Hamilton  Waikato  3200
+				NZ
+
+8C-1F-64   (hex)		DONG GUAN YUNG FU ELECTRONICS LTD.
+056000-056FFF     (base 16)		DONG GUAN YUNG FU ELECTRONICS LTD.
+				No.3 LIAN SHENG INDUSTRIAL AREA,DENG WU VILLAGE,QIAO TOU TOWN
+				DONGGUAN CITY  GUANG DONG  523000
+				CN
+
+8C-1F-64   (hex)		ShenYang LeShun Technology Co.,Ltd
+AC9000-AC9FFF     (base 16)		ShenYang LeShun Technology Co.,Ltd
+				Floor 6, R&D Building, No. 37, Shenbei Road, Shenbei New District, Shenyang
+				ShenYang  LiaoNing   110000
+				CN
+
+8C-1F-64   (hex)		FoMa Systems GmbH
+097000-097FFF     (base 16)		FoMa Systems GmbH
+				Oskar-Sembach-Ring 11
+				Lauf    91207
+				DE
+
+8C-1F-64   (hex)		NEETRA SRL SB
+08D000-08DFFF     (base 16)		NEETRA SRL SB
+				SP 231 km 1,300
+				Modugno  BA  70026
+				IT
+
+8C-1F-64   (hex)		Tardis Technology
+C06000-C06FFF     (base 16)		Tardis Technology
+				A-3 Fl. KAIST Center, 330 Chumdan-Ro 
+				Jejusi  Jejudo  63309
+				KR
+
+8C-1F-64   (hex)		SmartD Technologies Inc
+4F7000-4F7FFF     (base 16)		SmartD Technologies Inc
+				400 Montfort
+				Montreal  Qc  H3C4J9
+				CA
+
+8C-1F-64   (hex)		Alfa Proxima d.o.o.
+C5D000-C5DFFF     (base 16)		Alfa Proxima d.o.o.
+				Rozna dolina, cesta V 31
+				Ljubljana    1000
+				SI
+
+8C-1F-64   (hex)		ASHIDA Electronics Pvt. Ltd
+879000-879FFF     (base 16)		ASHIDA Electronics Pvt. Ltd
+				ASHIDA House Plot No A308 Road No. 21 Wagle Ind. Estate
+				Thane  Maharashtra  400604
+				IN
+
+8C-1F-64   (hex)		Celestica Inc.
+723000-723FFF     (base 16)		Celestica Inc.
+				213 Harry Walker Pkwy South
+				Newmarket  Ontario  L3Y 8T3
+				CA
+
+8C-1F-64   (hex)		Fiberstory communications Pvt Ltd
+D7F000-D7FFFF     (base 16)		Fiberstory communications Pvt Ltd
+				Office no 907,9th Floor,Clover Hills Plaza,NIBM Road,Kondhwa, 
+				Pune  Maharashtra  411048
+				IN
+
+8C-1F-64   (hex)		TIAMA
+5EB000-5EBFFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+591000-591FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		TIAMA
+FA0000-FA0FFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+8C-1F-64   (hex)		inomatic GmbH
+F4C000-F4CFFF     (base 16)		inomatic GmbH
+				Karl-Braun-Straße 12
+				Nordhorn    48531
+				DE
+
+8C-1F-64   (hex)		SCU Co., Ltd.
+6E2000-6E2FFF     (base 16)		SCU Co., Ltd.
+				2-9, Kanda-Nishikicho, Chiyoda-ku
+				Tokyo    101-0054
+				JP
+
+8C-1F-64   (hex)		LAMTEC Mess- und Regeltechnik für Feuerungen GmbH & Co. KG
+367000-367FFF     (base 16)		LAMTEC Mess- und Regeltechnik für Feuerungen GmbH & Co. KG
+				Josef-Reiert-Str. 26
+				Walldorf  Baden Württemberg  69190
+				DE
+
+8C-1F-64   (hex)		T PROJE MUHENDISLIK DIS TIC. LTD. STI.
+E53000-E53FFF     (base 16)		T PROJE MUHENDISLIK DIS TIC. LTD. STI.
+				RIHTIM CAD. NEMLIZADE SOK. DUYGU APT. NO: 35/2
+				ISTANBUL    34716
+				TR
+
+8C-1F-64   (hex)		End 2 End Technologies
+D46000-D46FFF     (base 16)		End 2 End Technologies
+				60 Sycamore Street W
+				St. Paul    55117
+				US
+
+8C-1F-64   (hex)		Flextronics International Kft.
+A56000-A56FFF     (base 16)		Flextronics International Kft.
+				Zrinyi street 38.
+				Zalaegerszeg  Zala  8900
+				HU
+
+8C-1F-64   (hex)		Dart Systems Ltd
+8DA000-8DAFFF     (base 16)		Dart Systems Ltd
+				First Avenue
+				Radstock  Somerset  BA3 4BS
+				GB
+
+8C-1F-64   (hex)		Vissavi sp. z o.o.
+138000-138FFF     (base 16)		Vissavi sp. z o.o.
+				Robotnicza 68 C
+				Wroclaw  Dolnyslask  53-608
+				PL
+
+8C-1F-64   (hex)		Talleres de Escoriaza SA
+97F000-97FFFF     (base 16)		Talleres de Escoriaza SA
+				Barrio Ventas, 35
+				Irun  Gipuzkoa  20305
+				ES
+
+8C-1F-64   (hex)		Clausal Computing Oy
+3BB000-3BBFFF     (base 16)		Clausal Computing Oy
+				Varastokuja 5
+				Loviisa  Uusimaa  07900
+				FI
+
+8C-1F-64   (hex)		Vigor Electric Corp.
+F50000-F50FFF     (base 16)		Vigor Electric Corp.
+				No.116, Xingzhong Rd., Danshui Dist., New Taipei City 25152, Taiwan (R.O.C.)
+				Danshui Dist.  New Taipei City  25152
+				TW
+
+70-B3-D5   (hex)		RF Code
+ADB000-ADBFFF     (base 16)		RF Code
+				9229 Waterford Centre Blvd #500
+				Austin  TX  78758
+				US
+
+8C-1F-64   (hex)		Panoramic Power
+811000-811FFF     (base 16)		Panoramic Power
+				Atir Yeda 15
+				Kfar Saba    4464312
+				IL
+
+8C-1F-64   (hex)		Zaruc Tecnologia LTDA
+BB3000-BB3FFF     (base 16)		Zaruc Tecnologia LTDA
+				Rua Afonso Arinos Melo Franco, 181, Parque Residencial Laranjeiras
+				Serra  Espírito Santo  29165-491
+				BR
+
+70-B3-D5   (hex)		Exascend, Inc.
+851000-851FFF     (base 16)		Exascend, Inc.
+				530 Lawrence Expy., #416
+				Sunnyvale  CA  94085
+				US
+
+70-B3-D5   (hex)		Tap Home, s.r.o.
+251000-251FFF     (base 16)		Tap Home, s.r.o.
+				Hošťálkova 633/49
+				Praha 6    16900
+				CZ
+
+8C-1F-64   (hex)		BESO sp. z o.o.
+4DC000-4DCFFF     (base 16)		BESO sp. z o.o.
+				Mlynska 1a
+				Brzeg Dolny    56-120
+				PL
+
+8C-1F-64   (hex)		Potter Electric Signal Co. LLC
+C85000-C85FFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+8C-1F-64   (hex)		Scenario Automation
+E10000-E10FFF     (base 16)		Scenario Automation
+				Rua Paulo Elias, 216
+				São Carlos  São Paulo  13564400
+				BR
+
+8C-1F-64   (hex)		CubeWorks, Inc.
+88E000-88EFFF     (base 16)		CubeWorks, Inc.
+				1600 Huron ParkwayOFC 520-2364
+				Ann Arbor  MI  48109
+				US
+
+8C-1F-64   (hex)		M-Pulse GmbH & Co.KG
+18B000-18BFFF     (base 16)		M-Pulse GmbH & Co.KG
+				Haunerbusch110
+				Kierspe  NRW  58566
+				DE
+
+8C-1F-64   (hex)		Bitmapper Integration Technologies Private Limited
+84A000-84AFFF     (base 16)		Bitmapper Integration Technologies Private Limited
+				Shewale Centre A, Survey No. 22/2 CTS No 4691, 4889, 4990
+				Pune  Maharashtra  411018
+				IN
+
+8C-1F-64   (hex)		ARKRAY,Inc.Kyoto Laboratory
+CB7000-CB7FFF     (base 16)		ARKRAY,Inc.Kyoto Laboratory
+				Kamigyo-ku Gansui-cho 59 Yousuien-nai
+				Kyoto  Kyoto-fu  602-0008
+				JP
+
+8C-1F-64   (hex)		EA Elektro-Automatik
+E92000-E92FFF     (base 16)		EA Elektro-Automatik
+				Helmholtzstraße 31-37
+				Viersen  Nordrhein-Westfalen  41747
+				DE
+
+8C-1F-64   (hex)		EIDOS s.r.l.
+99E000-99EFFF     (base 16)		EIDOS s.r.l.
+				via dell'Industria, 11 Z.I. Fontaneto 
+				CHIERI   Turin  10023
+				IT
+
+8C-1F-64   (hex)		Nilfisk Food
+64E000-64EFFF     (base 16)		Nilfisk Food
+				Blytækkervej 2
+				Aalborg    9000
+				DK
+
+8C-1F-64   (hex)		Gamber-Johnson LLC
+CB5000-CB5FFF     (base 16)		Gamber-Johnson LLC
+				5001 Joerns Dr
+				Stevens Point  WI  54481
+				US
+
+8C-1F-64   (hex)		Rax-Tech International
+A77000-A77FFF     (base 16)		Rax-Tech International
+				5th floor, 5/391 Kaleeswari towerTambaram-Velachery Main road, Medavakkam
+				Chennai  Tamil Nadu  600100
+				IN
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+BBB000-BBBFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		D-E-K GmbH & Co.KG
+219000-219FFF     (base 16)		D-E-K GmbH & Co.KG
+				Südfeld 9
+				Ascheberg / Herbern    58387
+				DE
+
+70-B3-D5   (hex)		AvMap srlu
+B4F000-B4FFFF     (base 16)		AvMap srlu
+				Viale Zaccagna 6
+				Carrara    54033
+				IT
+
+70-B3-D5   (hex)		Theatrixx Technologies, Inc.
+5DD000-5DDFFF     (base 16)		Theatrixx Technologies, Inc.
+				1655 Richardson
+				Montreal  QC  H3K3J7
+				CA
+
+70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
+6BC000-6BCFFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+70-B3-D5   (hex)		Adolf Nissen Elektrobau GmbH + Co. KG
+101000-101FFF     (base 16)		Adolf Nissen Elektrobau GmbH + Co. KG
+				Friedrichstädter Chaussee 4
+				Tönning    25832
+				DE
+
+70-B3-D5   (hex)		TinTec Co., Ltd.
+5AE000-5AEFFF     (base 16)		TinTec Co., Ltd.
+				#825 101, Magokseo-ro, Gangseo-gu
+				Seoul    07798
+				KR
+
+70-B3-D5   (hex)		Blue Storm Associates, Inc.
+9EA000-9EAFFF     (base 16)		Blue Storm Associates, Inc.
+				8605 Cross View
+				Fairfax Station    22039
+				US
+
+70-B3-D5   (hex)		Neuronal Innovation Control S.L.
+F0A000-F0AFFF     (base 16)		Neuronal Innovation Control S.L.
+				Anade Real 11
+				Oleiros  A Coruna  15179
+				ES
+
+70-B3-D5   (hex)		LECO Corporation
+684000-684FFF     (base 16)		LECO Corporation
+				3000 Lakeview Ave.
+				St. Joseph  null  49085
+				US
+
+70-B3-D5   (hex)		SPETSSTROY-SVYAZ Ltd
+A39000-A39FFF     (base 16)		SPETSSTROY-SVYAZ Ltd
+				13-26 B. Bulvarnaya St.
+				Taganrog  Rostov  347913
+				RU
+
+70-B3-D5   (hex)		AirBie AG
+0B1000-0B1FFF     (base 16)		AirBie AG
+				Kinkelstrasse 36
+				Zurich  Zurich  8006
+				CH
+
+70-B3-D5   (hex)		3DGence sp. z o.o.
+D15000-D15FFF     (base 16)		3DGence sp. z o.o.
+				Mickiewicza 29
+				Katowice  Slaskie  40-085
+				PL
+
+70-B3-D5   (hex)		ASHIDA Electronics Pvt. Ltd
+D39000-D39FFF     (base 16)		ASHIDA Electronics Pvt. Ltd
+				ASHIDA House Plot No A308 Road No. 21 Wagle Ind. Estate
+				Thane  Maharashtra  400604
+				IN
+
+70-B3-D5   (hex)		COMPAL ELECTRONICS, INC.
+26F000-26FFFF     (base 16)		COMPAL ELECTRONICS, INC.
+				No.500, Ruiguang Rd., Neihu District,
+				Taipei    11492
+				TW
+
+70-B3-D5   (hex)		ARKRAY, Inc. Kyoto Laboratory
+C4E000-C4EFFF     (base 16)		ARKRAY, Inc. Kyoto Laboratory
+				Yousuien-nai
+				Kyoto  Kamigyo-ku  602-0008
+				JP
+
+70-B3-D5   (hex)		EM Clarity Pty Ltd
+C7B000-C7BFFF     (base 16)		EM Clarity Pty Ltd
+				55 Curzon St
+				Tennyson  QLD  4105
+				AU
+
+70-B3-D5   (hex)		Smith Meter, Inc.
+414000-414FFF     (base 16)		Smith Meter, Inc.
+				1602 Wagner Ave.
+				Erie  PA  16514
+				US
+
+70-B3-D5   (hex)		Echo Ridge, LLC
+1AA000-1AAFFF     (base 16)		Echo Ridge, LLC
+				100 Carpenter Drive
+				Sterling  VA  20164
+				US
+
+70-B3-D5   (hex)		SURUGA SEIKI CO., LTD.
+9FE000-9FEFFF     (base 16)		SURUGA SEIKI CO., LTD.
+				505, Nanatsushinya, Shimizu-ku
+				Shizuoka-shi  Shizuoka  424-8566
+				JP
+
+70-B3-D5   (hex)		HIPODROMO DE AGUA CALIENTE, S.A. DE C.V.
+E56000-E56FFF     (base 16)		HIPODROMO DE AGUA CALIENTE, S.A. DE C.V.
+				BLVD. AGUA CALIENTE 12027
+				TIJUANA  BAJA CALIFORNIA  22420
+				MX
+
+70-B3-D5   (hex)		CHIeru., CO., Ltd. 
+783000-783FFF     (base 16)		CHIeru., CO., Ltd. 
+				Tennozu Central Tower 3F, 2-2-24, Higashi-shinagawa, Shinagawa-ku
+				tokyo    140-0002
+				JP
+
+70-B3-D5   (hex)		VITEC
+22B000-22BFFF     (base 16)		VITEC
+				99 rue pierre sémard
+				Chatillon  France  92320
+				FR
+
+70-B3-D5   (hex)		SLAT
+E81000-E81FFF     (base 16)		SLAT
+				11 Rue Jean-Elysée DUPUY
+				Champagne au Mont d'Or  Rhône  69543
+				FR
+
+70-B3-D5   (hex)		CertusNet Inc.
+C83000-C83FFF     (base 16)		CertusNet Inc.
+				No.699-22 Xuanwu Avenue, Xuanwu District 
+				Nanjing  Jiangsu  210042
+				CN
+
+70-B3-D5   (hex)		eumig industrie-TV GmbH.
+7FF000-7FFFFF     (base 16)		eumig industrie-TV GmbH.
+				Gewerbeparkstrasse 9
+				Anif  Salzburg  5081
+				AT
+
+70-B3-D5   (hex)		NORTHBOUND NETWORKS PTY. LTD.
+874000-874FFF     (base 16)		NORTHBOUND NETWORKS PTY. LTD.
+				14 Sommersby Road
+				Point Cook  Victoria  3030
+				AU
+
+70-B3-D5   (hex)		EAX Labs s.r.o.
+158000-158FFF     (base 16)		EAX Labs s.r.o.
+				Krizovnicka 86/6
+				Praha 1    11000
+				CZ
+
+70-B3-D5   (hex)		Liberty Reach
+3FB000-3FBFFF     (base 16)		Liberty Reach
+				3550 W Liberty Rd Suite 5
+				Ann Arbor  MI  48103
+				US
+
+70-B3-D5   (hex)		Ongisul Co.,Ltd.
+458000-458FFF     (base 16)		Ongisul Co.,Ltd.
+				Yangji Building 6F, 85, Seonghwang-ro
+				Dongnam-gu, Cheonan-si,   Chungcheongnam-do  31125
+				KR
+
+70-B3-D5   (hex)		VisioGreen
+F6C000-F6CFFF     (base 16)		VisioGreen
+				26, Avenue Winston Churchill
+				Louviers  27 Eure  27400
+				FR
+
+70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
+6CA000-6CAFFF     (base 16)		LINEAGE POWER PVT LTD.,
+				30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD
+				BANGALORE  KARNATAKA  560074
+				IN
+
+70-B3-D5   (hex)		Private
+FFE000-FFEFFF     (base 16)		Private
+
+70-B3-D5   (hex)		Alere Technologies AS
+70B000-70BFFF     (base 16)		Alere Technologies AS
+				Kjelsaasveien 161
+				Oslo  Oslo  0382
+				NO
+
+70-B3-D5   (hex)		Cursor Systems NV
+E38000-E38FFF     (base 16)		Cursor Systems NV
+				Drevendaal 14
+				Sint-Katelijne-Waver  Antwerpen  2860
+				BE
+
+70-B3-D5   (hex)		Innotas Elektronik GmbH
+C51000-C51FFF     (base 16)		Innotas Elektronik GmbH
+				Rathenaustr. 18a
+				Zittau    D-02763
+				DE
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+6E5000-6E5FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				     ,  Bergisch Gladbach  51465
+				DE
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+CC6000-CC6FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Yamamoto Works Ltd.
+DFB000-DFBFFF     (base 16)		Yamamoto Works Ltd.
+				3-1-3 Kashiwaza
+				Ageo  Saitama  3620075
+				JP
+
+70-B3-D5   (hex)		Prolan Zrt.
+C04000-C04FFF     (base 16)		Prolan Zrt.
+				Szentendrei út 1-3.
+				Budakalasz    2011
+				HU
+
+70-B3-D5   (hex)		Umano Medical Inc.
+E1E000-E1EFFF     (base 16)		Umano Medical Inc.
+				230, Boul. Nilus-Leclerc
+				L'Islet  Québec  G0R 2C0
+				CA
+
+70-B3-D5   (hex)		AEye, Inc.
+B52000-B52FFF     (base 16)		AEye, Inc.
+				5700 Stoneridge Drive, Suite 102
+				Pleasanton  CA  94588
+				US
+
+70-B3-D5   (hex)		EMDEP CENTRO TECNOLOGICO MEXICO
+83A000-83AFFF     (base 16)		EMDEP CENTRO TECNOLOGICO MEXICO
+				Circuito Corral de Piedras #36, Polígono Empresarial San Miguel
+				San Miguel de Allende  Guanajuato  37880
+				MX
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+42D000-42DFFF     (base 16)		RCH ITALIA SPA 
+				Via Cendon 39
+				SILEA  Treviso  31057
+				IT
+
+70-B3-D5   (hex)		Cetto Industries
+B73000-B73FFF     (base 16)		Cetto Industries
+				Dechenstr. 9-15
+				Ratingen    40878
+				DE
+
+70-B3-D5   (hex)		APE GmbH
+8C4000-8C4FFF     (base 16)		APE GmbH
+				Plauener Str. 163-165, Haus N
+				Berlin    13053
+				DE
+
+70-B3-D5   (hex)		Melecs EWS GmbH
+E8A000-E8AFFF     (base 16)		Melecs EWS GmbH
+				GZO-Technologiestrasse 1
+				Siegendorf     7011
+				AT
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+BB5000-BB5FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		iMAR Navigation GmbH
+A42000-A42FFF     (base 16)		iMAR Navigation GmbH
+				Im Reihersbruch 3
+				St. Ingbert  Saarland  66386
+				DE
+
+70-B3-D5   (hex)		Viper Innovations Ltd
+A45000-A45FFF     (base 16)		Viper Innovations Ltd
+				45 Martingale Way
+				Bristol    BS20 7AW
+				GB
+
+70-B3-D5   (hex)		SamabaNova Systems
+F29000-F29FFF     (base 16)		SamabaNova Systems
+				2100 Geng Rd #103
+				Palo Alto  CA  94303
+				US
+
+70-B3-D5   (hex)		LANSITEC TECHNOLOGY CO., LTD
+A4D000-A4DFFF     (base 16)		LANSITEC TECHNOLOGY CO., LTD
+				No. 8 Huashen Avenue
+				Nanjing  Jiangsu  210012
+				CN
+
+70-B3-D5   (hex)		ELINKGATE JSC
+37E000-37EFFF     (base 16)		ELINKGATE JSC
+				J4A Buu Long Dist 10
+				Ho Chi Minh  Vietnam  70350
+				VN
+
+70-B3-D5   (hex)		ICT BUSINESS GROUP of Humanrights Center for disabled people
+B20000-B20FFF     (base 16)		ICT BUSINESS GROUP of Humanrights Center for disabled people
+				#A1101-6,70 Gyeongin-ro 71-gil,
+				Seoul  Yeongdeungpo-gu  07286
+				KR
+
+70-B3-D5   (hex)		TIECHE Engineered Systems
+795000-795FFF     (base 16)		TIECHE Engineered Systems
+				940 Enchanted Way,Suite 104
+				Simi Valley  CA  93065
+				US
+
+70-B3-D5   (hex)		Multiple Access Communications Ltd
+558000-558FFF     (base 16)		Multiple Access Communications Ltd
+				Delta House, Southampton Science Park
+				Southampton  Hampshire  SO16 7NS
+				GB
+
+70-B3-D5   (hex)		FIRST RF Corporation
+7BC000-7BCFFF     (base 16)		FIRST RF Corporation
+				6150 Lookout Rd
+				Boulder  CO  80301
+				US
+
+70-B3-D5   (hex)		PROMOMED RUS LLC
+D3A000-D3AFFF     (base 16)		PROMOMED RUS LLC
+				UL. POCHTOVAYA M., D. 2/2,C.1,P.iK2 I, K.2
+				Moscow    129090
+				RU
+
+70-B3-D5   (hex)		Vega-Absolute
+0AD000-0ADFFF     (base 16)		Vega-Absolute
+				Kirova 113/1
+				Novosibirsk    630008
+				RU
+
+70-B3-D5   (hex)		Acrodea, Inc.
+4A8000-4A8FFF     (base 16)		Acrodea, Inc.
+				3F, Daisan Yamada Bldg., 22 Aizumi-cho
+				Shinjuku-ku  Tokyo  1600005
+				JP
+
+70-B3-D5   (hex)		MaNima Technologies BV
+DD9000-DD9FFF     (base 16)		MaNima Technologies BV
+				Hastelweg 260B
+				Eindhoven  Noord-Brabant  5652CN
+				NL
+
+70-B3-D5   (hex)		Integrotech sp. z o.o.
+6BA000-6BAFFF     (base 16)		Integrotech sp. z o.o.
+				plac Zwyciestwa 2 bud. D
+				Lodz  lodzkie  90-312
+				PL
+
+70-B3-D5   (hex)		Xitron
+388000-388FFF     (base 16)		Xitron
+				4750 Venture Drive
+				Ann Arbor  MI  48108
+				US
+
+70-B3-D5   (hex)		Becton Dickinson
+808000-808FFF     (base 16)		Becton Dickinson
+				7 Loveton Circle
+				Sparks  MD  21152
+				US
+
+70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
+275000-275FFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
+				Sector Foresta 43, local 26
+				Tres Cantos  Madrid  28760
+				ES
+
+70-B3-D5   (hex)		MECT SRL
+628000-628FFF     (base 16)		MECT SRL
+				VIA E. FERMI 57/59
+				ALPIGNANO  TORINO  10093
+				IT
+
+70-B3-D5   (hex)		SITA Messtechnik GmbH
+535000-535FFF     (base 16)		SITA Messtechnik GmbH
+				Gostritzer Str. 63
+				Dresden    01217
+				DE
+
+70-B3-D5   (hex)		KBS Industrieelektronik GmbH
+860000-860FFF     (base 16)		KBS Industrieelektronik GmbH
+				Burkheimer Str. 10
+				Freiburg    79111
+				DE
+
+70-B3-D5   (hex)		Aaronia AG
+B1A000-B1AFFF     (base 16)		Aaronia AG
+				Kauthenbergstr. 14
+				Strickscheid    54597
+				DE
+
+70-B3-D5   (hex)		MBio Diagnostics, Inc.
+57F000-57FFFF     (base 16)		MBio Diagnostics, Inc.
+				5603 Arapahoe Avenue, Suite 1
+				BOULDER  CO  80303
+				US
+
+70-B3-D5   (hex)		Acrodea, Inc.
+E79000-E79FFF     (base 16)		Acrodea, Inc.
+				3F, Daisan Yamada Bldg., 22 Aizumi-cho
+				Shinjuku-ku  Tokyo  1600005
+				JP
+
+70-B3-D5   (hex)		TEX COMPUTER SRL 
+1E1000-1E1FFF     (base 16)		TEX COMPUTER SRL 
+				VIA MERCADANTE 35
+				CATTOLICA   RIMINI   47841
+				IT
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+150000-150FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Magnamed Tecnologia Medica S/A
+648000-648FFF     (base 16)		Magnamed Tecnologia Medica S/A
+				Rua Des. Eliseu Guilherme, 292 6 Andar
+				Sao Paulo  SP  04004-030
+				BR
+
+70-B3-D5   (hex)		Traffic and Parking Control Co, Inc.
+0A7000-0A7FFF     (base 16)		Traffic and Parking Control Co, Inc.
+				5100 W. Brown Deer Rd.
+				Brown Deer  WI  53223
+				US
+
+70-B3-D5   (hex)		Shenzhen Luxurite Smart Home Ltd
+121000-121FFF     (base 16)		Shenzhen Luxurite Smart Home Ltd
+				13th Floor,  Kenuo Building, No. 7 road, TongGuan Street,  GuangMing
+				Shenzhen  GuangDong  518000
+				CN
+
+70-B3-D5   (hex)		Fiber Optika Technologies Pvt. Ltd. 
+47E000-47EFFF     (base 16)		Fiber Optika Technologies Pvt. Ltd. 
+				#38, 22nd Main, 14th Cross, Padmanabhanagar
+				Bangalore  Karnataka  560070
+				IN
+
+70-B3-D5   (hex)		AT-Automation Technology GmbH
+345000-345FFF     (base 16)		AT-Automation Technology GmbH
+				Hermann-Boessow-Str. 6-8
+				Bad Oldesloe    D-23843
+				DE
+
+70-B3-D5   (hex)		C-COM Satellite Systems Inc.
+D4F000-D4FFFF     (base 16)		C-COM Satellite Systems Inc.
+				2574 Sheffield Road
+				Ottawa  Ontario  K1B3V7
+				CA
+
+70-B3-D5   (hex)		OutdoorLink
+6A3000-6A3FFF     (base 16)		OutdoorLink
+				3058 Leeman Ferry Rd
+				Huntsville  AL  35801
+				US
+
+70-B3-D5   (hex)		Sasken Technologies Ltd
+BCD000-BCDFFF     (base 16)		Sasken Technologies Ltd
+				139/25, Amarjyothi Layout, Domlur
+				Bangalore    560071
+				IN
+
+70-B3-D5   (hex)		FAS Electronics (Fujian) Co.,LTD.
+B46000-B46FFF     (base 16)		FAS Electronics (Fujian) Co.,LTD.
+				#1 Building,Weihuang Industrial Zone, Qingkou Invest District
+				Minhou city, Fuzhou  Fujian  350119 
+				CN
+
+70-B3-D5   (hex)		Algodue Elettronica Srl
+89A000-89AFFF     (base 16)		Algodue Elettronica Srl
+				Via P. Gobetti, 16F
+				Maggiora  NO  28014
+				IT
+
+70-B3-D5   (hex)		HongSeok Ltd.
+C40000-C40FFF     (base 16)		HongSeok Ltd.
+				166, Osan-ro, Osan-myeon
+				Iksan-si  Jeollabuk-do  54670
+				KR
+
+70-B3-D5   (hex)		BP Lubricants USA, Inc.
+94E000-94EFFF     (base 16)		BP Lubricants USA, Inc.
+				201 North Webster
+				White Cloud  MI  49349
+				US
+
+70-B3-D5   (hex)		Algodue Elettronica Srl
+430000-430FFF     (base 16)		Algodue Elettronica Srl
+				Via Passerina 3/A
+				Fontaneto d'Agogna  Novara  28010
+				IT
+
+70-B3-D5   (hex)		SmartSafe
+A7B000-A7BFFF     (base 16)		SmartSafe
+				Avenida das Américas 3301 Bloco 01 Lojas 102/110
+				Rio de Janeiro  RJ  22631-003
+				BR
+
+70-B3-D5   (hex)		aelettronica group srl
+9C4000-9C4FFF     (base 16)		aelettronica group srl
+				via matteotti,22
+				gaggiano  milano  20083
+				IT
+
+70-B3-D5   (hex)		Changshu Ruite Electric Co.,Ltd.
+391000-391FFF     (base 16)		Changshu Ruite Electric Co.,Ltd.
+				No.2,Qingdao Road,Yushan High-tech Industrial Development Zone
+				Changshu  Jiangshu  215500
+				CN
+
+70-B3-D5   (hex)		 Zhiye Electronics Co., Ltd.
+8E2000-8E2FFF     (base 16)		 Zhiye Electronics Co., Ltd.
+				No. 1117, Pioneer Road, High-tech Zone
+				Jinan City  Shandong Province  250101
+				CN
+
+70-B3-D5   (hex)		Position Imaging
+A5D000-A5DFFF     (base 16)		Position Imaging
+				22 marin way unit 1
+				stratham  NH  03885
+				US
+
+70-B3-D5   (hex)		AixControl GmbH
+972000-972FFF     (base 16)		AixControl GmbH
+				Sonnenweg 15
+				Aachen  NRW  52070
+				DE
+
+70-B3-D5   (hex)		AVL DiTEST
+86B000-86BFFF     (base 16)		AVL DiTEST
+				Fahrzeugdiagnose GmbH
+				Graz  Steiermark  8020
+				AT
+
+70-B3-D5   (hex)		Graphcore Ltd
+1B3000-1B3FFF     (base 16)		Graphcore Ltd
+				11-19 Wine Street
+				Bristol    BS1 2PH
+				GB
+
+70-B3-D5   (hex)		Shenzhen Siera Technology Ltd
+1BD000-1BDFFF     (base 16)		Shenzhen Siera Technology Ltd
+				Room 2039, Shenhai Building, Wanzhong Village, Bulong Road, Minzhi, Longhua district,  City: Shenzhen
+				Shenzhen  Guangdong  518131
+				CN
+
+70-B3-D5   (hex)		SYS TEC electronic GmbH
+41B000-41BFFF     (base 16)		SYS TEC electronic GmbH
+				Am Windrad 2
+				Heinsdorfergrund     D-08468
+				DE
+
+70-B3-D5   (hex)		Sportsbeams Lighting, Inc.
+013000-013FFF     (base 16)		Sportsbeams Lighting, Inc.
+				1260 Pine Forest Cir
+				Round Rock  TX  78665
+				US
+
+70-B3-D5   (hex)		ANYROAM
+003000-003FFF     (base 16)		ANYROAM
+				2450 E.J. Chapman DR
+				Knoxville  TN  37996
+				US
+
+70-B3-D5   (hex)		Telensa Ltd
+56C000-56CFFF     (base 16)		Telensa Ltd
+				Iconix 3, London Road
+				Pampisford  Cambridgeshire  CB22 3EG
+				GB
+
+70-B3-D5   (hex)		Techno Broad,Inc
+512000-512FFF     (base 16)		Techno Broad,Inc
+				2-12-12, shin-chiba,chuo-ku,
+				chiba  chiba  2600031
+				JP
+
+70-B3-D5   (hex)		Open System Solutions Limited
+44B000-44BFFF     (base 16)		Open System Solutions Limited
+				Saltmakers House
+				Southampton  Hampshire  SO31 4NB
+				GB
+
+70-B3-D5   (hex)		NOA Co., Ltd.
+4EE000-4EEFFF     (base 16)		NOA Co., Ltd.
+				#201, 96, Seokho-ro, Sangrok-gu
+				Ansan-si  Gyeonggi-do  15579
+				KR
+
+70-B3-D5   (hex)		Secturion Systems
+CFE000-CFEFFF     (base 16)		Secturion Systems
+				520 N Marketplace Dr,
+				Centerville  UT  84014
+				US
+
+70-B3-D5   (hex)		SOFTLAND INDIA LTD
+C29000-C29FFF     (base 16)		SOFTLAND INDIA LTD
+				#14A, KINFRA SMALL INDUSTRIES PARK, MENAMKULAM, KAZHAKOOTTAM
+				TRIVANDRUM  KERALA  695586
+				IN
+
+70-B3-D5   (hex)		Sunstone Engineering
+2FF000-2FFFFF     (base 16)		Sunstone Engineering
+				1693 American Way Suite 5
+				Payson  UT  84651
+				US
+
+70-B3-D5   (hex)		FSR, INC.
+071000-071FFF     (base 16)		FSR, INC.
+				244 BERGEN BLVD
+				WOODLAND PARK  NJ  07424
+				US
+
+70-B3-D5   (hex)		eSys Solutions Sweden AB
+A22000-A22FFF     (base 16)		eSys Solutions Sweden AB
+				Sandsborgsvagen 50
+				Enskede    12233
+				SE
+
+70-B3-D5   (hex)		EvoLogics GmbH
+F9B000-F9BFFF     (base 16)		EvoLogics GmbH
+				Ackerstr. 76
+				Berlin    13355
+				DE
+
+70-B3-D5   (hex)		Franke Aquarotter GmbH
+BB6000-BB6FFF     (base 16)		Franke Aquarotter GmbH
+				Parkstraße 1-5
+				Ludwigsfelde    14974
+				DE
+
+70-B3-D5   (hex)		Bacsoft
+4B3000-4B3FFF     (base 16)		Bacsoft
+				Hazarhan 13
+				Kiryat Gat    8258112
+				IL
+
+70-B3-D5   (hex)		C21 Systems Ltd
+14B000-14BFFF     (base 16)		C21 Systems Ltd
+				Dunston Innovation Centre
+				Chesterfield  Derbyshire  S41 8NG
+				GB
+
+70-B3-D5   (hex)		Zaklad Energoelektroniki Twerd
+3FA000-3FAFFF     (base 16)		Zaklad Energoelektroniki Twerd
+				Aleksandrowska 28/30
+				Torun    87100
+				PL
+
+70-B3-D5   (hex)		CODESYSTEM Co.,Ltd
+FC0000-FC0FFF     (base 16)		CODESYSTEM Co.,Ltd
+				#705, Namsung Plaza(Ace9), 130 Digitalro, Keumchon-Gu
+				Seoul    08589
+				KR
+
+70-B3-D5   (hex)		Telefire
+2E8000-2E8FFF     (base 16)		Telefire
+				43 hasivim 
+				Petah Tikva  Israel  49000
+				IL
+
+70-B3-D5   (hex)		boekel
+AF8000-AF8FFF     (base 16)		boekel
+				855 pennsylvania blvd
+				feasterville  PA  19053
+				US
+
+70-B3-D5   (hex)		BlueBox Video Limited
+4C6000-4C6FFF     (base 16)		BlueBox Video Limited
+				Drysdale View, Fenny Bentley
+				Ashbourne    DE6 1LA
+				GB
+
+70-B3-D5   (hex)		DAVE SRL
+189000-189FFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+70-B3-D5   (hex)		Solar RIg Technologies
+293000-293FFF     (base 16)		Solar RIg Technologies
+				651 Garden Street
+				Carlstadt  NJ  07072
+				US
+
+70-B3-D5   (hex)		merkur Funksysteme AG
+B0F000-B0FFFF     (base 16)		merkur Funksysteme AG
+				Wassergrabe 14
+				Sursee    6210
+				CH
+
+70-B3-D5   (hex)		HERUTU ELECTRONICS CORPORATION
+E32000-E32FFF     (base 16)		HERUTU ELECTRONICS CORPORATION
+				62-1  Toyooka-cho, Kita-ku
+				Hamamatsu  Shizuoka  433-8103
+				JP
+
+70-B3-D5   (hex)		MG s.r.l.
+688000-688FFF     (base 16)		MG s.r.l.
+				via Monte Bianco, 1
+				Solbiate Olona  VA  21058
+				IT
+
+70-B3-D5   (hex)		DOLBY LABORATORIES, INC.
+3F5000-3F5FFF     (base 16)		DOLBY LABORATORIES, INC.
+				100 Potrero Avenue
+				San Francisco  CA  94103-4938
+				US
+
+70-B3-D5   (hex)		Koco Motion US LLC
+707000-707FFF     (base 16)		Koco Motion US LLC
+				335 Cochrane Circle
+				Morgan Hill  CA  95037
+				US
+
+70-B3-D5   (hex)		NAC Planning Co., Ltd.
+87F000-87FFFF     (base 16)		NAC Planning Co., Ltd.
+				NREG Akihabara Bldg 2F, 1-8-13, Sotokanda
+				Chiyoda-ku  Tokyo  101-0021
+				JP
+
+70-B3-D5   (hex)		Elektronik Art S.C.
+82D000-82DFFF     (base 16)		Elektronik Art S.C.
+				Mełgiewska 80
+				Lublin    20-234
+				PL
+
+70-B3-D5   (hex)		TEKVEL Ltd.
+1DC000-1DCFFF     (base 16)		TEKVEL Ltd.
+				Federativny prospekt, 5-1-5
+				Moscow  Moscow  111399
+				RU
+
+70-B3-D5   (hex)		Adeli
+E61000-E61FFF     (base 16)		Adeli
+				Route de Sandrans
+				Saint Trivier sur Moignans  Ain  01990
+				FR
+
+70-B3-D5   (hex)		Code Blue Corporation 
+A8D000-A8DFFF     (base 16)		Code Blue Corporation 
+				259 Hedcor Street
+				Holland  MI  49423
+				US
+
+70-B3-D5   (hex)		Smart Vision Lights
+BCB000-BCBFFF     (base 16)		Smart Vision Lights
+				2359 Holton Rd
+				Muskegon  MI  49445
+				US
+
+70-B3-D5   (hex)		SYS TEC electronic GmbH
+C64000-C64FFF     (base 16)		SYS TEC electronic GmbH
+				Am Windrad 2
+				Heinsdorfergrund     D-08468
+				DE
+
+70-B3-D5   (hex)		ATT Nussbaum Prüftechnik GmbH
+2A3000-2A3FFF     (base 16)		ATT Nussbaum Prüftechnik GmbH
+				Robert-Koch-Str. 35
+				Kehl-Auenheim    77694
+				DE
+
+70-B3-D5   (hex)		WINNERS DIGITAL CORPORATION
+8A2000-8A2FFF     (base 16)		WINNERS DIGITAL CORPORATION
+				3F, No. 4, Ln. 263, Chongyang Rd., Nangang Dist.,
+				Taipei City  Taiwan  115-73
+				TW
+
+70-B3-D5   (hex)		H3D, Inc.
+3F2000-3F2FFF     (base 16)		H3D, Inc.
+				812 Avis Drive
+				Ann Arbor  MI  48108
+				US
+
+70-B3-D5   (hex)		PT. Emsonic Indonesia
+360000-360FFF     (base 16)		PT. Emsonic Indonesia
+				Jl.Timor Blok E5, MM2100 Industrial Town Jatiwangi Cikarang Barat
+				Bekasi  Jawa Barat  17530
+				ID
+
+70-B3-D5   (hex)		IDEA SPA
+415000-415FFF     (base 16)		IDEA SPA
+				VIA PARALLELA 2/4
+				VILLA BARTOLOMEA  VERONA  37049
+				IT
+
+70-B3-D5   (hex)		RCD Radiokomunikace
+225000-225FFF     (base 16)		RCD Radiokomunikace
+				U Posty 26
+				Stare Hradiste    53352
+				CZ
+
+70-B3-D5   (hex)		Millennial Net, Inc.
+3B0000-3B0FFF     (base 16)		Millennial Net, Inc.
+				24 Hartwell Avenue
+				Lexington  MA  02421
+				US
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+758000-758FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		FSTUDIO CO LTD
+C0B000-C0BFFF     (base 16)		FSTUDIO CO LTD
+				Yanagawa Bldg. 2F 5-16-13
+				Watanabe-Dori Chuo-ku Fukuoka  Fukuoka  810-0004
+				JP
+
+70-B3-D5   (hex)		Den Automation
+0BF000-0BFFFF     (base 16)		Den Automation
+				Unit 6.05, Metropolitan Wharf
+				London    E1W 3SS
+				GB
+
+70-B3-D5   (hex)		EDCO Technology 1993 ltd
+B9C000-B9CFFF     (base 16)		EDCO Technology 1993 ltd
+				10 hamelacha street
+				Rosh haayin    4809118
+				IL
+
+70-B3-D5   (hex)		3D Printing Specialists
+CDF000-CDFFFF     (base 16)		3D Printing Specialists
+				7916 Grow Ln
+				Houston  TX  77040
+				US
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+17F000-17FFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbühl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		eumig industrie-TV GmbH.
+AA2000-AA2FFF     (base 16)		eumig industrie-TV GmbH.
+				Gewerbeparkstrasse 9
+				Anif  Salzburg  5081
+				AT
+
+70-B3-D5   (hex)		Xylon
+C1A000-C1AFFF     (base 16)		Xylon
+				Fallerovo setaliste 22
+				Zagreb    10000
+				HR
+
+70-B3-D5   (hex)		FUKUDA SANGYO CO., LTD.
+C9E000-C9EFFF     (base 16)		FUKUDA SANGYO CO., LTD.
+				Nazukari 996
+				Nagareyama  Chiba  2700145
+				JP
+
+70-B3-D5   (hex)		Rako Controls Ltd
+084000-084FFF     (base 16)		Rako Controls Ltd
+				Knight Road
+				Rochester  Kent  ME2 2AH
+				GB
+
+70-B3-D5   (hex)		Airthings
+53C000-53CFFF     (base 16)		Airthings
+				Wergelandsveien 7
+				Oslo    0167
+				NO
+
+70-B3-D5   (hex)		Sankyo Intec co.,ltd
+664000-664FFF     (base 16)		Sankyo Intec co.,ltd
+				Tokimata127
+				Iida  Nagano  3992563
+				JP
+
+70-B3-D5   (hex)		SOFTCREATE CORP.
+3C7000-3C7FFF     (base 16)		SOFTCREATE CORP.
+				2-15-1 Shibuya
+				Shibuya-ku  Tokyo  150-0002
+				JP
+
+70-B3-D5   (hex)		Tecsys do Brasil Industrial Ltda
+9AA000-9AAFFF     (base 16)		Tecsys do Brasil Industrial Ltda
+				Rua Oros, 146
+				Sao Jose dos Campos  SP  12237150
+				BR
+
+70-B3-D5   (hex)		PCSC
+515000-515FFF     (base 16)		PCSC
+				3541 Challenger St.
+				Torrance  CA  90503
+				US
+
+70-B3-D5   (hex)		CAPSYS
+A0A000-A0AFFF     (base 16)		CAPSYS
+				ZI Parc technologique des Fontaines
+				BERNIN    38190
+				FR
+
+70-B3-D5   (hex)		Akse srl
+5CC000-5CCFFF     (base 16)		Akse srl
+				Via Aldo Moro, 39
+				Reggio Emilia  Italy  42124
+				IT
+
+70-B3-D5   (hex)		INSEVIS GmbH
+508000-508FFF     (base 16)		INSEVIS GmbH
+				Am Weichselgarten 7
+				Erlangen    D-91058
+				DE
+
+70-B3-D5   (hex)		SoFiHa
+78F000-78FFFF     (base 16)		SoFiHa
+				Hagenower Strasee 73
+				Schwerin    19061
+				DE
+
+70-B3-D5   (hex)		Guangzhou Moblin Technology Co., Ltd. 
+E52000-E52FFF     (base 16)		Guangzhou Moblin Technology Co., Ltd. 
+				35 Tianshou Rd, Tianhe District
+				Guangzhou  Guangdong  510000
+				CN
+
+70-B3-D5   (hex)		Fink Telecom Services
+23B000-23BFFF     (base 16)		Fink Telecom Services
+				Paradieshofstrasse 101
+				Basel    4054
+				CH
+
+70-B3-D5   (hex)		Koizumi Lighting Technology Corp.
+19F000-19FFFF     (base 16)		Koizumi Lighting Technology Corp.
+				3-5-2-Chome
+				Higashinakamoto,Higashinari-ku,Osaka    537-0021
+				JP
+
+70-B3-D5   (hex)		Private
+389000-389FFF     (base 16)		Private
+
+70-B3-D5   (hex)		Touchnet/OneCard
+478000-478FFF     (base 16)		Touchnet/OneCard
+				2115 Chapman Rd. Suite 159
+				Chattanooga  TN  37421
+				US
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+2A9000-2A9FFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		Hangzhou Youshi Industry Co., Ltd.
+4EC000-4ECFFF     (base 16)		Hangzhou Youshi Industry Co., Ltd.
+				Unit 501-38, Blue Sky Business Centre，GongShu District,
+				Hangzhou  Zhejiang  310000
+				CN
+
+70-B3-D5   (hex)		YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
+BCE000-BCEFFF     (base 16)		YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
+				1-17-1 Ohmorihigashi
+				Ohta-ku  Tokyo  143-0012
+				JP
+
+70-B3-D5   (hex)		MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
+A37000-A37FFF     (base 16)		MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
+				3-1, Asahi, Nishibiwajima-Cho
+				Kiyosu  Aichi  452-8561
+				JP
+
+70-B3-D5   (hex)		samwooeleco
+676000-676FFF     (base 16)		samwooeleco
+				A-1001,#119,GASAN-DIGITAL 1RO, GEUMCHEON-GU
+				SEOUL    153-773
+				KR
+
+70-B3-D5   (hex)		Suprock Technologies
+613000-613FFF     (base 16)		Suprock Technologies
+				45 Scott Hill Rd
+				Warren  NH  03279
+				US
+
+70-B3-D5   (hex)		GSP Sprachtechnologie GmbH
+2A4000-2A4FFF     (base 16)		GSP Sprachtechnologie GmbH
+				Teltowkanalstraße 1
+				Berlin    12247
+				DE
+
+70-B3-D5   (hex)		OnYield Inc Ltd
+D72000-D72FFF     (base 16)		OnYield Inc Ltd
+				814 Houston Centre, 63 Mody Road
+				Kowloon    TST East
+				HK
+
+70-B3-D5   (hex)		Eurotek Srl
+1D1000-1D1FFF     (base 16)		Eurotek Srl
+				Strada Comunale Savonesa, 9
+				Rivalta Scrivia  AL  15050
+				IT
+
+70-B3-D5   (hex)		Redcap Solutions s.r.o.
+027000-027FFF     (base 16)		Redcap Solutions s.r.o.
+				Na Viničních Horách 16
+				Praha 6    16000
+				CZ
+
+70-B3-D5   (hex)		Colorimetry Research, Inc
+10E000-10EFFF     (base 16)		Colorimetry Research, Inc
+				26612 Heirloom Place
+				Santa Clarita  CA  91350
+				US
+
+70-B3-D5   (hex)		LG Electronics
+257000-257FFF     (base 16)		LG Electronics
+				10, Magokjungang 10-ro, Gangseo-gu
+				Seoul    07796
+				KR
+
+70-B3-D5   (hex)		De Haardt bv
+CA2000-CA2FFF     (base 16)		De Haardt bv
+				Marithaime 6
+				Elst    6662 WD
+				NL
+
+70-B3-D5   (hex)		Exi Flow Measurement Ltd
+AAF000-AAFFFF     (base 16)		Exi Flow Measurement Ltd
+				Unit 22 Ford Lane business Park
+				Ford, ARUNDEL  West Sussex  BN164HP
+				GB
+
+70-B3-D5   (hex)		Resolution Systems
+D89000-D89FFF     (base 16)		Resolution Systems
+				1/214 Greenhill Rd
+				Eastwood  South Australia  6063
+				AU
+
+70-B3-D5   (hex)		Urbana Smart Solutions Pte Ltd
+224000-224FFF     (base 16)		Urbana Smart Solutions Pte Ltd
+				6 Eu Tong Sen Street #06-20 The Central
+				Singapore    059817
+				SG
+
+70-B3-D5   (hex)		Henrich Electronics Corporation
+436000-436FFF     (base 16)		Henrich Electronics Corporation
+				225 Deming Place
+				Westmont  IL  60559
+				US
+
+00-1B-C5   (hex)		Triax A/S
+08C000-08CFFF     (base 16)		Triax A/S
+				Bjornkaervej 3
+				Hornsyld  Denmark  8783
+				DK
+
+70-B3-D5   (hex)		Agramkow Fluid Systems A/S
+4AF000-4AFFFF     (base 16)		Agramkow Fluid Systems A/S
+				Augustenborg Landevej 19
+				Soenderborg  DK  6400
+				DK
+
+70-B3-D5   (hex)		Advice
+810000-810FFF     (base 16)		Advice
+				16 Atir Yeda St
+				Kfar Saba  Not applicable  4464321
+				IL
+
+70-B3-D5   (hex)		Uplevel Systems Inc
+A13000-A13FFF     (base 16)		Uplevel Systems Inc
+				6950 SW Hampton Street, Suite 308
+				Tigard  OR  97223
+				US
+
+70-B3-D5   (hex)		Cambridge Pixel
+023000-023FFF     (base 16)		Cambridge Pixel
+				New Cambridge House, Litlington
+				Royston  Herts  SG8 0SS
+				GB
+
+70-B3-D5   (hex)		SAICE
+FB7000-FB7FFF     (base 16)		SAICE
+				5-23-1
+				Shinagawa Higashi-Gotanda  Tokyo  141-0022
+				JP
+
+70-B3-D5   (hex)		Hermann Lümmen GmbH
+D4B000-D4BFFF     (base 16)		Hermann Lümmen GmbH
+				Biberweg 32
+				Troisdorf    53842
+				DE
+
+70-B3-D5   (hex)		Hi Tech Systems Ltd
+4B4000-4B4FFF     (base 16)		Hi Tech Systems Ltd
+				Holbrook House, Oakley Lane
+				Basingstoke  Hampshire  RG23 7JY
+				GB
+
+70-B3-D5   (hex)		PULLNET TECHNOLOGY, SA DE CV SSC1012302S73
+70A000-70AFFF     (base 16)		PULLNET TECHNOLOGY, SA DE CV SSC1012302S73
+				LUZ SAVIÑON 2007
+				BENITO JUAREZ  CIUDAD DE MEXICO  03020
+				MX
+
+70-B3-D5   (hex)		KOSMEK.Ltd
+BB9000-BB9FFF     (base 16)		KOSMEK.Ltd
+				Murodani 2-1-5, Nishi-ku
+				Kobe-City  Hyogo Pref.  6512241
+				JP
+
+70-B3-D5   (hex)		Jacarta Ltd
+09B000-09BFFF     (base 16)		Jacarta Ltd
+				Wagon Yard, London Road
+				Marlborough    SN8 1LH
+				GB
+
+70-B3-D5   (hex)		ST Aerospace Systems
+27F000-27FFFF     (base 16)		ST Aerospace Systems
+				505A Airport Road Paya Lebar
+				Singapore  Singapore  539934
+				SG
+
+70-B3-D5   (hex)		SoftLab-NSK
+555000-555FFF     (base 16)		SoftLab-NSK
+				Pr.Koptjuga 1
+				Novosibirsk    630090
+				RU
+
+70-B3-D5   (hex)		Nortek Global HVAC
+4D4000-4D4FFF     (base 16)		Nortek Global HVAC
+				Fens Pool Ave
+				Brierley Hill  West Midlands  DY5 1QA
+				GB
+
+70-B3-D5   (hex)		Tunstall A/S
+A17000-A17FFF     (base 16)		Tunstall A/S
+				Niels Bohrs vej 42
+				Stilling  Skanderborg  8660
+				DK
+
+00-1B-C5   (hex)		Vigor Electric Corp
+00E000-00EFFF     (base 16)		Vigor Electric Corp
+				No. 42-12. Pidao Village
+				New Taipei    251
+				TW
+
+70-B3-D5   (hex)		OptoPrecision GmbH
+4F9000-4F9FFF     (base 16)		OptoPrecision GmbH
+				Auf der Höhe 15
+				Bremen  Bremen  28357
+				DE
+
+70-B3-D5   (hex)		Richard Paul Russell Ltd
+98B000-98BFFF     (base 16)		Richard Paul Russell Ltd
+				The Lodge, Unit 1 Barnes Farm Business Park
+				Milford on Sea  Hampshire  SO41 0AP
+				GB
+
+70-B3-D5   (hex)		Avionica 
+611000-611FFF     (base 16)		Avionica 
+				9941 West Jessamine St
+				Miami   FL  33157 
+				US
+
+70-B3-D5   (hex)		Collini Dienstleistungs GmbH
+C67000-C67FFF     (base 16)		Collini Dienstleistungs GmbH
+				Schweizerstr. 59
+				Hohenems    A 6845
+				AT
+
+70-B3-D5   (hex)		Imecon Engineering SrL
+5E3000-5E3FFF     (base 16)		Imecon Engineering SrL
+				via Gerola 13/15
+				Fiesco  CR  26010
+				IT
+
+70-B3-D5   (hex)		ATBiS Co.,Ltd
+C2F000-C2FFFF     (base 16)		ATBiS Co.,Ltd
+				#1603 5th. Ace High-end Tower, 226 Gasan Digital 1-ro, Geumcheon-gu
+				Seoul    08502
+				KR
+
+70-B3-D5   (hex)		Shenzhen bayue software co. LTD
+784000-784FFF     (base 16)		Shenzhen bayue software co. LTD
+				B301, second phase of China merchants street technology building, nanshan district
+				ShenZhen    518000
+				CN
+
+70-B3-D5   (hex)		X-Laser LLC
+711000-711FFF     (base 16)		X-Laser LLC
+				9125 Whiskey Bottom Rd Ste A
+				Laurel  MD  20723
+				US
+
+70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S.L.
+777000-777FFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
+				Av. Onze de Setembre 19
+				Reus  Tarragona  43203
+				ES
+
+70-B3-D5   (hex)		Shenzhen INVT Electric Co.,Ltd
+1D0000-1D0FFF     (base 16)		Shenzhen INVT Electric Co.,Ltd
+				 INVT Bldg., GaoFa Scientific Park, Longjing, Nanshan, Shenzhen.
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		White Matter LLC
+368000-368FFF     (base 16)		White Matter LLC
+				999 3rd Ave 700
+				Seattle    98104
+				US
+
+70-B3-D5   (hex)		Critical Link LLC
+D5C000-D5CFFF     (base 16)		Critical Link LLC
+				6712 Brooklawn Parkway
+				Syracuse  null  13211
+				US
+
+70-B3-D5   (hex)		Secure Systems & Services
+717000-717FFF     (base 16)		Secure Systems & Services
+				24, Chemin de la Pouranque
+				F-13752  LES PENNES MIRABEAU  CS30084
+				FR
+
+70-B3-D5   (hex)		SYS TEC electronic GmbH
+7FD000-7FDFFF     (base 16)		SYS TEC electronic GmbH
+				Am Windrad 2
+				Heinsdorfergrund     D-08468
+				DE
+
+70-B3-D5   (hex)		JSC InformInvestGroup
+91F000-91FFFF     (base 16)		JSC InformInvestGroup
+				Moscow, Prospekt Andropova street, 18
+				Moscow  Moscow State  115432
+				RU
+
+70-B3-D5   (hex)		Autocom Diagnostic Partner AB
+98E000-98EFFF     (base 16)		Autocom Diagnostic Partner AB
+				Grafitvägen 23B
+				TROLLHÄTTAN    46138
+				SE
+
+70-B3-D5   (hex)		Ultimate Software
+03C000-03CFFF     (base 16)		Ultimate Software
+				2000 Ultimate Way
+				Weston  FL  33326
+				US
+
+70-B3-D5   (hex)		Microgate Srl
+7AB000-7ABFFF     (base 16)		Microgate Srl
+				Via Stradivari, 4
+				BOLZANO  BZ  39100
+				IT
+
+70-B3-D5   (hex)		Polynet Telecommunications Consulting and Contractor Ltd.
+877000-877FFF     (base 16)		Polynet Telecommunications Consulting and Contractor Ltd.
+				Montevideo street 3/b
+				Budapest    1037
+				HU
+
+70-B3-D5   (hex)		LOGICUBE INC
+999000-999FFF     (base 16)		LOGICUBE INC
+				19755 Nordhoff Place
+				Chatsworth  CA  91311
+				US
+
+70-B3-D5   (hex)		Schneider Electric Motion USA
+153000-153FFF     (base 16)		Schneider Electric Motion USA
+				370 N. Main St.
+				Marlborough  CT  06447
+				US
+
+70-B3-D5   (hex)		TOSEI ENGINEERING CORP.
+24B000-24BFFF     (base 16)		TOSEI ENGINEERING CORP.
+				 4-6, Higashi-Nakanuki-machi
+				Tsuchiura-city  Ibaraki  300-0006
+				JP
+
+70-B3-D5   (hex)		Korea Airports Corporation
+2CD000-2CDFFF     (base 16)		Korea Airports Corporation
+				78 Haneul-gil Gangseo-gu
+				SEOUL    07505
+				KR
+
+70-B3-D5   (hex)		DEK Technologies
+D22000-D22FFF     (base 16)		DEK Technologies
+				cnr Riggall Street and Maldon Street
+				Broadmeadows  Victoria  3047
+				AU
+
+70-B3-D5   (hex)		PHPower Srl
+A3F000-A3FFFF     (base 16)		PHPower Srl
+				Via Borgonuovo 27
+				Milano  MI  20121
+				IT
+
+70-B3-D5   (hex)		Saline Lectronics, Inc.
+246000-246FFF     (base 16)		Saline Lectronics, Inc.
+				710 N Maple Rd
+				Saline  MI  48176
+				US
+
+70-B3-D5   (hex)		Global Technical Systems
+19B000-19BFFF     (base 16)		Global Technical Systems
+				784 Lynnhaven Parkway
+				Virginia Beach  VA  23452
+				US
+
+70-B3-D5   (hex)		Cannex Technology Inc.
+CD1000-CD1FFF     (base 16)		Cannex Technology Inc.
+				No.182, Sec.2, Yuanlu Rd.
+				Sihu  Changhua  51449
+				TW
+
+70-B3-D5   (hex)		Intecom
+CC5000-CC5FFF     (base 16)		Intecom
+				ul.Hrustalnaya d11.korp2
+				Saint-Petersburg  SPb  192019
+				RU
+
+70-B3-D5   (hex)		Certus Operations Ltd
+4B2000-4B2FFF     (base 16)		Certus Operations Ltd
+				Dragonara Business Centre, 5th Floor, Dragonara Road c/w Ball Street
+				St Julians    STJ 3141
+				MT
+
+70-B3-D5   (hex)		NETWAYS GmbH
+73D000-73DFFF     (base 16)		NETWAYS GmbH
+				Deutschherrnstraße 15
+				Nürnberg    90429 
+				DE
+
+70-B3-D5   (hex)		Flirtey Inc
+2AA000-2AAFFF     (base 16)		Flirtey Inc
+				P O BOX 7315
+				Reno  NV  89510
+				US
+
+70-B3-D5   (hex)		Spectrum Techniques, LLC
+953000-953FFF     (base 16)		Spectrum Techniques, LLC
+				106 Union Valley Rd
+				Oak Ridge  TN  37930
+				US
+
+70-B3-D5   (hex)		Southern Tier Technologies
+9D5000-9D5FFF     (base 16)		Southern Tier Technologies
+				307 CHAUMONT DR
+				ENDWELL  NY  13760-5831
+				US
+
+70-B3-D5   (hex)		The Dini Group, La Jolla inc.
+678000-678FFF     (base 16)		The Dini Group, La Jolla inc.
+				7469 Draper Ave.
+				La Jolla  CA  92037
+				US
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+0DE000-0DEFFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		SureFlap Ltd
+F9C000-F9CFFF     (base 16)		SureFlap Ltd
+				7 The Irwin Centre, Scotland Road, Dry Drayton
+				Cambridge  Cambridgeshire  CB23 8AR
+				GB
+
+70-B3-D5   (hex)		Enlaps
+F75000-F75FFF     (base 16)		Enlaps
+				29 chemin du vieux chene, Tarmac
+				MEYLAN    38240
+				FR
+
+70-B3-D5   (hex)		megatec electronic GmbH
+8A8000-8A8FFF     (base 16)		megatec electronic GmbH
+				Lehenhammer 14
+				Etzelwang  Bayern  92268
+				DE
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+432000-432FFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Service Plus LLC
+169000-169FFF     (base 16)		Service Plus LLC
+				Kotlyakovskaya str. 5
+				Moscow    115201
+				RU
+
+70-B3-D5   (hex)		Omwave
+B13000-B13FFF     (base 16)		Omwave
+				34 bis rue d'Estienne d'Orves
+				Montrouge  Ile de France  92120
+				FR
+
+70-B3-D5   (hex)		Radixon s.r.o.
+2F4000-2F4FFF     (base 16)		Radixon s.r.o.
+				Opatska 19
+				Kosice-Krasna    04018
+				SK
+
+70-B3-D5   (hex)		GSF Corporation Pte Ltd
+B98000-B98FFF     (base 16)		GSF Corporation Pte Ltd
+				60 Paya Lebar Road
+				# 12-05 Paya Lebar Square    409051
+				SG
+
+70-B3-D5   (hex)		Hella Gutmann Solutions GmbH 
+5B8000-5B8FFF     (base 16)		Hella Gutmann Solutions GmbH 
+				Am Krebsbach 2
+				Ihringen   Baden Württemberg  79241
+				DE
+
+70-B3-D5   (hex)		HKW-Elektronik GmbH
+035000-035FFF     (base 16)		HKW-Elektronik GmbH
+				Eisenacher Str. 42b
+				Wutha-Farnroda  Thüringen  99848
+				DE
+
+70-B3-D5   (hex)		OOO NPP Mars-Energo
+374000-374FFF     (base 16)		OOO NPP Mars-Energo
+				199034  V.O.  13  liniya,  6-8,  lit.A, office 40H,
+				Saint-Petersburg    199034
+				RU
+
+70-B3-D5   (hex)		CRDE
+381000-381FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		RFL Electronics, Inc.
+FA6000-FA6FFF     (base 16)		RFL Electronics, Inc.
+				353 Powerville Road
+				Booton Twp.    07005
+				US
+
+70-B3-D5   (hex)		Fiberbase
+30D000-30DFFF     (base 16)		Fiberbase
+				#516 Complex-dong Heongduk IT Valley, Heonduk 1ro 13, Giheong-gu
+				Young-in  Gyeong-gi  16954
+				KR
+
+70-B3-D5   (hex)		Vensi, Inc.
+379000-379FFF     (base 16)		Vensi, Inc.
+				113 McHenry Rd #191
+				Buffalo Grove  IL  60089
+				US
+
+70-B3-D5   (hex)		AeroVision Avionics, Inc.
+77B000-77BFFF     (base 16)		AeroVision Avionics, Inc.
+				2F, No.30, R&D. II, Science Park,
+				Hsinchu City  Taiwan  30076
+				TW
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+C14000-C14FFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		Matsuhisa Corporation
+F42000-F42FFF     (base 16)		Matsuhisa Corporation
+				55-20 Katayama-cho
+				Fukui-shi    910-3611
+				JP
+
+70-B3-D5   (hex)		Daavlin
+F24000-F24FFF     (base 16)		Daavlin
+				205 W Bement St.
+				Bryan  OH  43506
+				US
+
+70-B3-D5   (hex)		Twoway Communications, Inc.
+FBC000-FBCFFF     (base 16)		Twoway Communications, Inc.
+				41 Wu Kung 6 Rd., New Taipei Industrial Park, New Taipei City,24891,Taiwan,R.O.C.
+				New Taipei city  Taipei  24891
+				TW
+
+70-B3-D5   (hex)		Axess AG
+413000-413FFF     (base 16)		Axess AG
+				Sonystrasse 18
+				Anif  Salzburg  5081
+				AT
+
+70-B3-D5   (hex)		Intra Corporation
+DDB000-DDBFFF     (base 16)		Intra Corporation
+				885 Manufacturers Dr.
+				Westland  MI  48186
+				US
+
+70-B3-D5   (hex)		Network Additions
+8EE000-8EEFFF     (base 16)		Network Additions
+				2-14-10 Minamiyana
+				Hadano  Kanagawa  2570003
+				JP
+
+70-B3-D5   (hex)		Newtec A/S
+245000-245FFF     (base 16)		Newtec A/S
+				Stærmosegårdsvej  18
+				Odense SV  Region Syd  5230
+				DK
+
+70-B3-D5   (hex)		Orion Technologies, LLC
+C6E000-C6EFFF     (base 16)		Orion Technologies, LLC
+				12605 Challenger Pkwy, Ste 130
+				ORLANDO  FL  32826
+				US
+
+70-B3-D5   (hex)		GP Systems GmbH
+D6C000-D6CFFF     (base 16)		GP Systems GmbH
+				Ochshäuser Str. 45
+				Kassel    34123
+				DE
+
+70-B3-D5   (hex)		The Morey Corporation
+D4D000-D4DFFF     (base 16)		The Morey Corporation
+				100 Morey Drive
+				Woodridge  IL  60517
+				US
+
+70-B3-D5   (hex)		Rollogo Limited
+C8C000-C8CFFF     (base 16)		Rollogo Limited
+				22/F., Far East Finance Centre, 16 Harcourt Road, Admiralty,
+				Hong Kong    000000
+				HK
+
+70-B3-D5   (hex)		DAVE SRL
+59C000-59CFFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+70-B3-D5   (hex)		Quantum Design Inc.
+84D000-84DFFF     (base 16)		Quantum Design Inc.
+				10307 Pacific Center Court
+				San Diego  CA  92121
+				US
+
+70-B3-D5   (hex)		DTRON Communications (Pty) Ltd
+90F000-90FFFF     (base 16)		DTRON Communications (Pty) Ltd
+				A18 Bellville Business Park, cnr Mike Pienaar blvd & Voortrekker road
+				Bellville  Western Cape  7530
+				ZA
+
+70-B3-D5   (hex)		Rapiscan Systems
+CC9000-CC9FFF     (base 16)		Rapiscan Systems
+				14000 Mead Street
+				Longmont   CO  80504
+				US
+
+70-B3-D5   (hex)		TEX COMPUTER SRL 
+108000-108FFF     (base 16)		TEX COMPUTER SRL 
+				VIA MERCADANTE 35
+				CATTOLICA   RIMINI   47841
+				IT
+
+70-B3-D5   (hex)		ASE GmbH
+47F000-47FFFF     (base 16)		ASE GmbH
+				Lußhardtstraße 6
+				Bruchsal    76646
+				DE
+
+70-B3-D5   (hex)		Fraunhofer-Institut IIS
+677000-677FFF     (base 16)		Fraunhofer-Institut IIS
+				Am Wolfsmantel 33
+				Erlangen  Bayern  91058
+				DE
+
+70-B3-D5   (hex)		DACOM West GmbH
+1B6000-1B6FFF     (base 16)		DACOM West GmbH
+				Schallbruch 19-21
+				Haan    42781
+				DE
+
+70-B3-D5   (hex)		Zamir Recognition Systems Ltd.
+D92000-D92FFF     (base 16)		Zamir Recognition Systems Ltd.
+				Manachat Tech Park 1/22
+				Jerusalem    96951
+				IL
+
+70-B3-D5   (hex)		AVER
+0B4000-0B4FFF     (base 16)		AVER
+				13000 Danielson St Ste A 
+				Poway  CA  92064
+				US
+
+70-B3-D5   (hex)		​ASUNG TECHNO CO.,Ltd
+8AC000-8ACFFF     (base 16)		​ASUNG TECHNO CO.,Ltd
+				462, Dogok-ro, Songpa-gu, Seoul, Republic of Korea
+				SEOUL  Repubilc of KOREA  05574
+				KR
+
+70-B3-D5   (hex)		Fracarro srl
+211000-211FFF     (base 16)		Fracarro srl
+				via Cazzaro 3
+				Castelfranco Veneto    31033
+				IT
+
+70-B3-D5   (hex)		MSB Elektronik und Gerätebau GmbH
+96D000-96DFFF     (base 16)		MSB Elektronik und Gerätebau GmbH
+				Hofwiesenstr. 23
+				Crailsheim    74564
+				DE
+
+70-B3-D5   (hex)		VITEC
+127000-127FFF     (base 16)		VITEC
+				99, rue Pierre Semard
+				CHATILLON    92320
+				FR
+
+70-B3-D5   (hex)		WOW System
+6A6000-6A6FFF     (base 16)		WOW System
+				#411, MEGA Center, 124, Sagimakgol-ro, Jungwon-gu
+				Seongnam-si    13207
+				KR
+
+70-B3-D5   (hex)		Eurotronik Kranj d.o.o.
+805000-805FFF     (base 16)		Eurotronik Kranj d.o.o.
+				Stirnova 8
+				Kranj    4000
+				SI
+
+70-B3-D5   (hex)		Sanko-sha,inc.
+7E0000-7E0FFF     (base 16)		Sanko-sha,inc.
+				3-9-12 ChuorinkanNishi
+				Yamato-shi  Kanagawa-Prefecture  242-0008
+				JP
+
+70-B3-D5   (hex)		Mannkind Corporation
+7E8000-7E8FFF     (base 16)		Mannkind Corporation
+				1 Casper Street
+				Danbury  CT  06810
+				US
+
+70-B3-D5   (hex)		BTG Instruments AB
+C49000-C49FFF     (base 16)		BTG Instruments AB
+				Industrigatan 1-3
+				Saffle  Varmland  66132
+				SE
+
+70-B3-D5   (hex)		Luxar Tech, Inc.
+653000-653FFF     (base 16)		Luxar Tech, Inc.
+				42840 Christy St, Suite 101
+				Fremont  CA  94538
+				US
+
+70-B3-D5   (hex)		WIXCON Co., Ltd
+2B1000-2B1FFF     (base 16)		WIXCON Co., Ltd
+				Room 803, 77, Seongsuil-ro, Seongdong-gu
+				SEOUL    04790
+				KR
+
+70-B3-D5   (hex)		Gogo BA 
+002000-002FFF     (base 16)		Gogo BA 
+				105 Edgeview Drive
+				Broomfield  CO  80021
+				US
+
+70-B3-D5   (hex)		Dataspeed Inc
+215000-215FFF     (base 16)		Dataspeed Inc
+				1935 Enterprise Dr
+				Rochester Hills  MI  48309
+				US
+
+70-B3-D5   (hex)		neQis
+10F000-10FFFF     (base 16)		neQis
+				Star House, Star Hill
+				Rochester  Kent  ME11UX
+				GB
+
+70-B3-D5   (hex)		U-Tech
+06B000-06BFFF     (base 16)		U-Tech
+				#306 Building 25, Simin-daero 284 beon-gil, Dongan-gu
+				Anyang-si  Gyeonggi-do  14067
+				KR
+
+70-B3-D5   (hex)		Ravelin Ltd
+022000-022FFF     (base 16)		Ravelin Ltd
+				Prof. Popova str 4
+				St Petersburg  Russia  197022
+				RU
+
+70-B3-D5   (hex)		CRDE
+14C000-14CFFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		Modtronix Engineering
+90D000-90DFFF     (base 16)		Modtronix Engineering
+				Boden PL
+				Castle Hill  NSW  2154
+				AU
+
+70-B3-D5   (hex)		Stahl GmbH
+DCE000-DCEFFF     (base 16)		Stahl GmbH
+				Wilhelm-Maybach-Str. 3
+				Crailsheim    74564
+				DE
+
+70-B3-D5   (hex)		Hiquel Elektronik- und Anlagenbau GmbH
+22C000-22CFFF     (base 16)		Hiquel Elektronik- und Anlagenbau GmbH
+				Bairisch Koelldorf 266
+				Bad Gleichenberg    8344
+				AT
+
+70-B3-D5   (hex)		Overspeed SARL
+9C6000-9C6FFF     (base 16)		Overspeed SARL
+				53 bis boulevard des Belges
+				Rouen    76000
+				FR
+
+70-B3-D5   (hex)		GY-FX SAS
+4BE000-4BEFFF     (base 16)		GY-FX SAS
+				38 rue du Botrel
+				35690  Brittany  Acigne
+				FR
+
+70-B3-D5   (hex)		TMSI LLC
+745000-745FFF     (base 16)		TMSI LLC
+				9073 Pleasantwood Ave NW
+				North Canton  OH  44720
+				US
+
+70-B3-D5   (hex)		SmartNodes
+209000-209FFF     (base 16)		SmartNodes
+				Quai Banning 6
+				Liège  Liège  4000
+				BE
+
+70-B3-D5   (hex)		Incoil Induktion AB
+F12000-F12FFF     (base 16)		Incoil Induktion AB
+				Brandthovdagatan 29
+				Vasteras  Vastmanland  72135
+				SE
+
+70-B3-D5   (hex)		KOMS Co.,Ltd.
+05D000-05DFFF     (base 16)		KOMS Co.,Ltd.
+				1059 Kitakata
+				Iida  Nagano  395-0151
+				JP
+
+70-B3-D5   (hex)		Rail Power Systems GmbH
+7B2000-7B2FFF     (base 16)		Rail Power Systems GmbH
+				Frankfurter Straße 111
+				Offenbach am Main  Hessen  63067
+				DE
+
+70-B3-D5   (hex)		BÄR Bahnsicherung AG
+348000-348FFF     (base 16)		BÄR Bahnsicherung AG
+				Luppmenstrasse 3
+				Fehraltorf     8320
+				CH
+
+70-B3-D5   (hex)		Sensile Technologies SA
+AD1000-AD1FFF     (base 16)		Sensile Technologies SA
+				Rue de Lausanne 45
+				Morges  VD  1110
+				CH
+
+70-B3-D5   (hex)		Miravue
+92A000-92AFFF     (base 16)		Miravue
+				75 E 400 S STE 302
+				Salt Lake City  UT  84111
+				US
+
+70-B3-D5   (hex)		OCEAN
+16C000-16CFFF     (base 16)		OCEAN
+				30 rue Mozart
+				CLICHY    92110
+				FR
+
+70-B3-D5   (hex)		Idyllic Engineering Pte Ltd
+D58000-D58FFF     (base 16)		Idyllic Engineering Pte Ltd
+				Blk 62B, Strathmore Ave, #04-58
+				Singapore  Singapore  143062
+				SG
+
+70-B3-D5   (hex)		Computerwise, Inc.
+CEA000-CEAFFF     (base 16)		Computerwise, Inc.
+				302 N. Winchester
+				Olathe  KS  66062
+				US
+
+70-B3-D5   (hex)		Next Sight srl
+511000-511FFF     (base 16)		Next Sight srl
+				via Roveredo 20/b
+				pordenone  Italy  33170
+				IT
+
+70-B3-D5   (hex)		Embedded Systems Lukasz Panasiuk
+A18000-A18FFF     (base 16)		Embedded Systems Lukasz Panasiuk
+				Wielkopolska 2A/9
+				Kolobrzeg    78100
+				PL
+
+70-B3-D5   (hex)		Dot System S.r.l.
+954000-954FFF     (base 16)		Dot System S.r.l.
+				Via Marco Biagi 34
+				Lomagna  Lecco  23871
+				IT
+
+70-B3-D5   (hex)		LG Electronics
+88D000-88DFFF     (base 16)		LG Electronics
+				2621, Nuambusunhwan-ro, Gangnam-gu,
+				Seoul    135-860
+				KR
+
+70-B3-D5   (hex)		Brinkmann Audio GmbH
+1D4000-1D4FFF     (base 16)		Brinkmann Audio GmbH
+				Im Himmelreich 13
+				Achberg    88147
+				DE
+
+70-B3-D5   (hex)		Profcon AB
+86E000-86EFFF     (base 16)		Profcon AB
+				Victor Hasselblads gata 9
+				Västra Frölunda    42131
+				SE
+
+70-B3-D5   (hex)		Marioff Corporation Oy
+222000-222FFF     (base 16)		Marioff Corporation Oy
+				Äyritie 24
+				Vantaa    01510
+				FI
+
+70-B3-D5   (hex)		Petring Energietechnik GmbH
+CF5000-CF5FFF     (base 16)		Petring Energietechnik GmbH
+				Paderborner Str.76
+				Schlangen  Deutschland  33189
+				DE
+
+70-B3-D5   (hex)		iRF - Intelligent RF Solutions, LLC
+21D000-21DFFF     (base 16)		iRF - Intelligent RF Solutions, LLC
+				14600 York Road, Suite B
+				Sparks  MD  21152
+				US
+
+70-B3-D5   (hex)		Gilbarco Veeder-Root  ‎
+269000-269FFF     (base 16)		Gilbarco Veeder-Root  ‎
+				Level 1, 20 Highgate Street
+				Auburn  NSW  2144
+				AU
+
+70-B3-D5   (hex)		Aeryon Labs Inc
+482000-482FFF     (base 16)		Aeryon Labs Inc
+				575 Kumpf Dr
+				Waterloo  ON  N2V 1K3
+				CA
+
+70-B3-D5   (hex)		Rudy Tellert
+8EC000-8ECFFF     (base 16)		Rudy Tellert
+				Dorfstr. 15
+				Werneck    97440
+				DE
+
+70-B3-D5   (hex)		SenSys (Design Electronics Ltd)
+FBF000-FBFFFF     (base 16)		SenSys (Design Electronics Ltd)
+				71 Redwood Valley Lane RD1
+				Richmond  Tasman  7081
+				NZ
+
+70-B3-D5   (hex)		WARECUBE,INC
+4A9000-4A9FFF     (base 16)		WARECUBE,INC
+				3F, 119-59, Sasadong
+				Ansansi  Gyunggido  426-220
+				KR
+
+70-B3-D5   (hex)		L-3 communications ComCept Division
+E09000-E09FFF     (base 16)		L-3 communications ComCept Division
+				1700 Science Place
+				Rockwall   TX  75032
+				US
+
+70-B3-D5   (hex)		CEA Technologies Pty Ltd
+68E000-68EFFF     (base 16)		CEA Technologies Pty Ltd
+				59-65 Gladstone St
+				Fyshwick  ACT  2609
+				AU
+
+70-B3-D5   (hex)		KST technology
+7F4000-7F4FFF     (base 16)		KST technology
+				164-1, KST b/d., Bangi-dong, songpa-gu
+				SEOUL  N/A  138-050
+				KR
+
+70-B3-D5   (hex)		TELECOM SANTE
+272000-272FFF     (base 16)		TELECOM SANTE
+				8 SQUARE DU CHENE GERMAIN
+				CESSON SEVIGNE    35510
+				FR
+
+70-B3-D5   (hex)		Henri Systems Holland bv
+122000-122FFF     (base 16)		Henri Systems Holland bv
+				Scheepmalersstraat 33
+				Zwijndrecht  ZH  3334 KG
+				NL
+
+70-B3-D5   (hex)		ELSAG
+1C5000-1C5FFF     (base 16)		ELSAG
+				205H Creek Ridge ROad
+				Greensboro  NC  27406
+				US
+
+70-B3-D5   (hex)		ModuSystems, Inc
+260000-260FFF     (base 16)		ModuSystems, Inc
+				780 Montague Expressway Suite 203
+				San Jose  CA  95131
+				US
+
+70-B3-D5   (hex)		Invertek Drives Ltd
+939000-939FFF     (base 16)		Invertek Drives Ltd
+				Offa's Dyke Business Park 
+				Welshpool  Powys  SY21 8JF
+				GB
+
+70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S.L.
+03D000-03DFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
+				Av. Onze de Setembre 19
+				Reus  Tarragona  43203
+				ES
+
+70-B3-D5   (hex)		CMC Industrial Electronics Ltd
+18C000-18CFFF     (base 16)		CMC Industrial Electronics Ltd
+				305-3602 Gilmore Way
+				Burnaby  BC  v5g4w9
+				CA
+
+70-B3-D5   (hex)		BIZERBA LUCEO
+E1A000-E1AFFF     (base 16)		BIZERBA LUCEO
+				16 RUE LAENNEC
+				VERN SUR SEICHE    35772
+				FR
+
+70-B3-D5   (hex)		Allied Data Systems
+8CA000-8CAFFF     (base 16)		Allied Data Systems
+				67/176 South Creek Road
+				Cromer  NSW  2099
+				AU
+
+70-B3-D5   (hex)		Vigilate srl
+B0C000-B0CFFF     (base 16)		Vigilate srl
+				Via Napoleonica, 6
+				Rezzato  BS  25086
+				IT
+
+70-B3-D5   (hex)		eeas gmbh
+86C000-86CFFF     (base 16)		eeas gmbh
+				Bachstrasse 44
+				Schwertberg    4311
+				AT
+
+70-B3-D5   (hex)		Asymmetric Technologies
+9F8000-9F8FFF     (base 16)		Asymmetric Technologies
+				1395 Grandview Avenue, Suite 3
+				Columbus  OH  43212
+				US
+
+70-B3-D5   (hex)		CISTECH Solutions
+C3D000-C3DFFF     (base 16)		CISTECH Solutions
+				170 JAMES ST
+				TOOWOOMBA  QLD  4350
+				AU
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+2EC000-2ECFFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+32A000-32AFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+70-B3-D5   (hex)		INFO CREATIVE (HK) LTD
+24D000-24DFFF     (base 16)		INFO CREATIVE (HK) LTD
+				44A 12/F,LUENTAK BLD.,JORDAN RD.,KOWLOON
+				HONGKONG    999077
+				HK
+
+70-B3-D5   (hex)		FIBERNET LTD
+041000-041FFF     (base 16)		FIBERNET LTD
+				9 Hakidma st. Hi-Tech City Park,
+				Yokneam  Non-US/Canada  2069206
+				IL
+
+70-B3-D5   (hex)		Electroimpact, Inc.
+D9D000-D9DFFF     (base 16)		Electroimpact, Inc.
+				4413 Chennault Beach Rd
+				Mukilteo  WA  98275
+				US
+
+70-B3-D5   (hex)		Centuryarks Ltd.,
+52C000-52CFFF     (base 16)		Centuryarks Ltd.,
+				 3-13-1,Nishiazabu
+				Minato-ku  Tokyo  106-0031
+				JP
+
+70-B3-D5   (hex)		EMSCAN Corp. 
+DD8000-DD8FFF     (base 16)		EMSCAN Corp. 
+				1 - 1715 27 ave NE
+				Calgary  Alberta  T2E 7E1
+				CA
+
+70-B3-D5   (hex)		Septentrio NV
+87E000-87EFFF     (base 16)		Septentrio NV
+				Interleuvenlaan 15i
+				Leuven    3001
+				BE
+
+70-B3-D5   (hex)		S-I-C
+73B000-73BFFF     (base 16)		S-I-C
+				Schornbacher Weg 37-8
+				Schorndorf  BW  73614
+				DE
+
+70-B3-D5   (hex)		ELECTRONIC SYSTEMS DESIGN SPRL
+DFC000-DFCFFF     (base 16)		ELECTRONIC SYSTEMS DESIGN SPRL
+				Rue de l'Etang 40
+				Waterloo    1410
+				BE
+
+70-B3-D5   (hex)		GBS COMMUNICATIONS, LLC
+A89000-A89FFF     (base 16)		GBS COMMUNICATIONS, LLC
+				10773 NW 58TH STREET, STE 712
+				DORAL  FL  33178
+				US
+
+70-B3-D5   (hex)		Aquavision Distribution Ltd
+0DA000-0DAFFF     (base 16)		Aquavision Distribution Ltd
+				unit 7 Riverpark, Billet Lane
+				Berkhamsted  Hertfordshire  HP4 1HL
+				GB
+
+70-B3-D5   (hex)		CODEC Co., Ltd.
+B37000-B37FFF     (base 16)		CODEC Co., Ltd.
+				1-29-18 Tamagawa
+				Choufu-shi  Tokyo  182-0025
+				JP
+
+70-B3-D5   (hex)		RCS Energy Management Ltd
+A5A000-A5AFFF     (base 16)		RCS Energy Management Ltd
+				RMS House
+				Newbury  Berkshire  RG14 5PX
+				GB
+
+70-B3-D5   (hex)		Ecologicsense
+F96000-F96FFF     (base 16)		Ecologicsense
+				605 Avenue Olivier Perroy
+				Rousset  Bouches du Rhône  13790
+				FR
+
+70-B3-D5   (hex)		Woodam Co., Ltd.
+C86000-C86FFF     (base 16)		Woodam Co., Ltd.
+				Na 555, EZEN Mecha zone, 117 Hwanggeum-ro, Yangchon-eup
+				Gimpo  Gyeonggi-do  10048
+				KR
+
+70-B3-D5   (hex)		ATEME
+607000-607FFF     (base 16)		ATEME
+				6 rue Dewoitine
+				Vélizy-Villacoublay    78140
+				FR
+
+70-B3-D5   (hex)		Nable Communications, Inc.
+F5C000-F5CFFF     (base 16)		Nable Communications, Inc.
+				A-dong 702-ho, 660, Daewangpangyo-ro, Bundang-gu
+				Seongnam-si  Gyeonggi-do  13494
+				KR
+
+70-B3-D5   (hex)		Code Hardware SA
+29F000-29FFFF     (base 16)		Code Hardware SA
+				100 Metros Norte Hogar de Ancianos
+				Quesada    21001
+				CR
+
+70-B3-D5   (hex)		Thermo Fisher Scientific
+F76000-F76FFF     (base 16)		Thermo Fisher Scientific
+				27 forge Parkway
+				Franklin  MA  02038
+				US
+
+70-B3-D5   (hex)		DISMUNTEL, S.A.
+E8F000-E8FFFF     (base 16)		DISMUNTEL, S.A.
+				P.I Cotes c/aiguaders, 15
+				Valencia  Algemesi  46680
+				ES
+
+70-B3-D5   (hex)		L.I.F.E. Corporation SA
+D2F000-D2FFFF     (base 16)		L.I.F.E. Corporation SA
+				20, rue Jean-Pierre Beicht
+				Luxembourg    L-1226
+				LU
+
+70-B3-D5   (hex)		BHARAT HEAVY ELECTRICALS LIMITED
+163000-163FFF     (base 16)		BHARAT HEAVY ELECTRICALS LIMITED
+				ELECTRONICS DIVISION , P.B NO. 2606 , MYSORE ROAD,
+				BANGALORE  KARNATAKA  560026
+				IN
+
+70-B3-D5   (hex)		QUISS AG
+E30000-E30FFF     (base 16)		QUISS AG
+				Lilienthalstr. 5
+				Puchheim  Bavarian  82178
+				DE
+
+70-B3-D5   (hex)		HL2 group
+821000-821FFF     (base 16)		HL2 group
+				2 Avenue Galilee
+				Chasseneuil Futuroscope    86961
+				FR
+
+70-B3-D5   (hex)		Volansys technologies pvt ltd
+9AE000-9AEFFF     (base 16)		Volansys technologies pvt ltd
+				Block A-7th Floor, Safal Profitaire, Corporate Road, Prahaladnagar
+				Ahmedabad  Gujarat  380015
+				IN
+
+70-B3-D5   (hex)		Arnouse Digital Devices Corp
+DB0000-DB0FFF     (base 16)		Arnouse Digital Devices Corp
+				1983 Marcus Ave, Suite 104
+				Lake Success  NY  11042
+				US
+
+70-B3-D5   (hex)		Syscom Instruments SA
+DDC000-DDCFFF     (base 16)		Syscom Instruments SA
+				industrie 21
+				Sainte-Croix    1450
+				CH
+
+70-B3-D5   (hex)		Tecogen Inc.
+4B0000-4B0FFF     (base 16)		Tecogen Inc.
+				45 First Avenue
+				Waltham  MA  02451
+				US
+
+70-B3-D5   (hex)		elsys
+71B000-71BFFF     (base 16)		elsys
+				 203-59, Yulchonsandan 2-ro, Yulchon-myeon
+				Yeosu-si  Jeollanam-do  59602
+				KR
+
+70-B3-D5   (hex)		ControlWorks, Inc.
+89B000-89BFFF     (base 16)		ControlWorks, Inc.
+				Jinil Bldg. Suite401, 13 Eonju-ro 81 gil, Gangnam-gu,
+				Seoul    06222
+				KR
+
+70-B3-D5   (hex)		Adimec Advanced Image Systems
+854000-854FFF     (base 16)		Adimec Advanced Image Systems
+				Luchthavenweg 91
+				Eindhoven    5657 EA
+				NL
+
+70-B3-D5   (hex)		Hildebrand Technology Limited
+21E000-21EFFF     (base 16)		Hildebrand Technology Limited
+				16 Mortimer Street
+				London  London  W1T 3JL
+				GB
+
+70-B3-D5   (hex)		Saratov Electrounit Production Plant named after Sergo Ordzhonikidze, OJSC
+BE3000-BE3FFF     (base 16)		Saratov Electrounit Production Plant named after Sergo Ordzhonikidze, OJSC
+				239, Bolshaya Sadovaya
+				Saratov  Saratovskaya oblast  410005
+				RU
+
+70-B3-D5   (hex)		3PS Inc
+FB3000-FB3FFF     (base 16)		3PS Inc
+				1300 Arrow Point Drive
+				Cedar Park  TX  78613
+				US
+
+70-B3-D5   (hex)		Alazar Technologies Inc.
+697000-697FFF     (base 16)		Alazar Technologies Inc.
+				310 - 6600 Trans-Canada Hwy
+				Pointe-Claire  QC  H9R 4S2
+				CA
+
+70-B3-D5   (hex)		E-T-A Elektrotechnische Apparate GmbH
+AE7000-AE7FFF     (base 16)		E-T-A Elektrotechnische Apparate GmbH
+				Industriestr. 2-8
+				Altdorf    90518
+				DE
+
+70-B3-D5   (hex)		Vtron Pty Ltd
+400000-400FFF     (base 16)		Vtron Pty Ltd
+				Unit 2, 62 Township Drive West
+				West Burleigh  Queensland  4219
+				AU
+
+70-B3-D5   (hex)		Innovative Circuit Technology
+889000-889FFF     (base 16)		Innovative Circuit Technology
+				26921 Gloucester Way
+				Langley  BC  V4W 3Y3
+				CA
+
+70-B3-D5   (hex)		DORLET SAU
+58D000-58DFFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		AKEO PLUS
+6FF000-6FFFFF     (base 16)		AKEO PLUS
+				ZA EN BEAUVOIR 769 RUE DE LA OUTARDE
+				CHATEAU GAILLARD    01500
+				FR
+
+70-B3-D5   (hex)		Rocket Lab Ltd.
+61A000-61AFFF     (base 16)		Rocket Lab Ltd.
+				3A Airpark Drive
+				Mangere  Auckland  2022
+				NZ
+
+70-B3-D5   (hex)		PARK24
+EA0000-EA0FFF     (base 16)		PARK24
+				48 rue René CLAIR
+				PARIS    75018
+				FR
+
+70-B3-D5   (hex)		Carlson Wireless Technologies Inc. 
+174000-174FFF     (base 16)		Carlson Wireless Technologies Inc. 
+				2700 Foster Ave.
+				Arcata  CA  95521
+				US
+
+70-B3-D5   (hex)		swissled technologies AG
+649000-649FFF     (base 16)		swissled technologies AG
+				chemin des chalets 7
+				chavannes de bogis    1279
+				CH
+
+70-B3-D5   (hex)		A-M Systems
+3BB000-3BBFFF     (base 16)		A-M Systems
+				PO BOX 850
+				Carlsborg  WA  98324
+				US
+
+70-B3-D5   (hex)		Stercom Power Solutions GmbH
+274000-274FFF     (base 16)		Stercom Power Solutions GmbH
+				Sebastian-Tiefenthalerstr. 15
+				Rohrdorf  Bayern  83101
+				DE
+
+70-B3-D5   (hex)		db Broadcast Products Ltd
+7FB000-7FBFFF     (base 16)		db Broadcast Products Ltd
+				Kestrel House Sedgeway Business Park Witchford 
+				Ely  Cambridgeshire  CB6 2HY
+				GB
+
+70-B3-D5   (hex)		Krabbenhøft og Ingolfsson
+F9A000-F9AFFF     (base 16)		Krabbenhøft og Ingolfsson
+				Thorsgade 59, 4. tv.
+				København N  Danmark  2200
+				DK
+
+70-B3-D5   (hex)		Fujian Landfone Information Technology Co.,Ltd
+91A000-91AFFF     (base 16)		Fujian Landfone Information Technology Co.,Ltd
+				Room 305, third floor，NO.550,Western suburbs Industrial Road,Hongshan Town,Gulou District,Fuzhou,P.R.China
+				Fuzhou  Fujian  350001
+				CN
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+513000-513FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Diamante Lighting Srl
+925000-925FFF     (base 16)		Diamante Lighting Srl
+				via Einaudi, 8
+				Alessandria  AL  15121
+				IT
+
+70-B3-D5   (hex)		Xentech Solutions Limited
+C63000-C63FFF     (base 16)		Xentech Solutions Limited
+				Suite 6 Stanta Business Centre, 3 Soothouse Spring
+				St Albans  Hertfordshire  AL36PF
+				GB
+
+70-B3-D5   (hex)		EREE Electronique
+D11000-D11FFF     (base 16)		EREE Electronique
+				6 avenu Dr Schweitzer
+				MEYZIEU    69882
+				FR
+
+70-B3-D5   (hex)		Burk Technology
+BD2000-BD2FFF     (base 16)		Burk Technology
+				7 Beaver Brook road
+				Littleton  MA  01460
+				US
+
+70-B3-D5   (hex)		Amada Miyachi America Inc.
+7B6000-7B6FFF     (base 16)		Amada Miyachi America Inc.
+				1820 S. Myrtle Avenue
+				Monrovia  CA  91016
+				US
+
+70-B3-D5   (hex)		Vocality International Ltd
+10C000-10CFFF     (base 16)		Vocality International Ltd
+				Lydling Barn
+				Guildford  Surrey  GU86AP
+				GB
+
+70-B3-D5   (hex)		The DX Shop Limited
+37D000-37DFFF     (base 16)		The DX Shop Limited
+				Eliot Business Park
+				Nuneaton  Warwickshire  CV10 7RJ 
+				GB
+
+70-B3-D5   (hex)		CRDE
+818000-818FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		SciTronix
+3BC000-3BCFFF     (base 16)		SciTronix
+				Neufeld 6a
+				Höchst    6973
+				AT
+
+70-B3-D5   (hex)		LHA Systems (Pty) Ltd
+180000-180FFF     (base 16)		LHA Systems (Pty) Ltd
+				1 Innovation Center, Technopark
+				Stellenbosch  Western Cape  7600
+				ZA
+
+70-B3-D5   (hex)		Rohde&Schwarz Topex SA
+932000-932FFF     (base 16)		Rohde&Schwarz Topex SA
+				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
+				Bucuresti  Romania  014142
+				RO
+
+70-B3-D5   (hex)		AEC s.r.l.
+CCC000-CCCFFF     (base 16)		AEC s.r.l.
+				Via Zambon, 33/A
+				Creazzo  Vicenza  36051
+				IT
+
+70-B3-D5   (hex)		ADETEC SAS
+4E9000-4E9FFF     (base 16)		ADETEC SAS
+				8 rue de l'Angoumois
+				ARGENTEUIL    95100
+				FR
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+F4F000-F4FFFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+3D9000-3D9FFF     (base 16)		Aplex Technology Inc.
+				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+E7C000-E7CFFF     (base 16)		Aplex Technology Inc.
+				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+70-B3-D5   (hex)		NextEV Co., Ltd.
+200000-200FFF     (base 16)		NextEV Co., Ltd.
+				20 Building, No. 56 AnTuo Road, Anting Town, Jiading
+				Shanghai  Shanghai  201805
+				CN
+
+70-B3-D5   (hex)		Sicon srl
+3B2000-3B2FFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		NUMATA R&D Co.,Ltd
+E9B000-E9BFFF     (base 16)		NUMATA R&D Co.,Ltd
+				1-68 Furukawa-ekiminami
+				Osaki city    989-6161
+				JP
+
+70-B3-D5   (hex)		Scame Sistemi srl
+2F3000-2F3FFF     (base 16)		Scame Sistemi srl
+				Via Lombardia 5
+				Arluno  Milan  20010
+				IT
+
+70-B3-D5   (hex)		Triax A/S
+C9F000-C9FFFF     (base 16)		Triax A/S
+				Bjornkaervej 3
+				Hornsyld  Denmark  8783
+				DK
+
+70-B3-D5   (hex)		Muuntosähkö Oy - Trafox
+A59000-A59FFF     (base 16)		Muuntosähkö Oy - Trafox
+				Niittylänpolku 4
+				Helsinki    00620
+				FI
+
+70-B3-D5   (hex)		Cello Electronics (UK) Ltd
+295000-295FFF     (base 16)		Cello Electronics (UK) Ltd
+				Cliff Lodge
+				Leyburn  North Yorkshire  DL8 5NS
+				GB
+
+70-B3-D5   (hex)		Labinvent JSC
+C1B000-C1BFFF     (base 16)		Labinvent JSC
+				vul. Adoewskaha 131, office 303
+				Minsk  Minsk  220018
+				BY
+
+70-B3-D5   (hex)		Gigaray
+F3C000-F3CFFF     (base 16)		Gigaray
+				100 Dicui Road
+				Wuxi  Jiangsu  214072
+				CN
+
+70-B3-D5   (hex)		Nu-Tek Power Controls and Automation
+97C000-97CFFF     (base 16)		Nu-Tek Power Controls and Automation
+				6, Hosa Road , G.K Layout, Electronic City post
+				Bangalore  Karnataka  560100
+				IN
+
+70-B3-D5   (hex)		Tagarno AS
+DA8000-DA8FFF     (base 16)		Tagarno AS
+				Sandovej 4
+				Horsens  Denmark  DK-8700
+				DK
+
+70-B3-D5   (hex)		ANTEK GmbH
+90C000-90CFFF     (base 16)		ANTEK GmbH
+				Im Koechersgrund 3
+				Beilstein  Baden-Württemberg  71717
+				DE
+
+70-B3-D5   (hex)		Bionics co.,ltd.
+A78000-A78FFF     (base 16)		Bionics co.,ltd.
+				Honmachi 1chome 2-1 Honmachi-riverside-bill 2F
+				osaka-city  osaka-fu  541-0053
+				JP
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+742000-742FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		SYS TEC electronic GmbH
+AB4000-AB4FFF     (base 16)		SYS TEC electronic GmbH
+				Am Windrad 2
+				Heinsdorfergrund     D-08468
+				DE
+
+70-B3-D5   (hex)		BAE Systems Surface Ships Limited
+02A000-02AFFF     (base 16)		BAE Systems Surface Ships Limited
+				BAE Systems Surface Ships Ltd Broad Oak
+				Portsmouth  Hampshire  PO3 5PQ
+				GB
+
+70-B3-D5   (hex)		M-Tech Innovations Limited
+8B1000-8B1FFF     (base 16)		M-Tech Innovations Limited
+				Plot No. 1/2, Rajiv Gandhi Infotech Park,
+				Pune  Maharashtra  411057
+				IN
+
+70-B3-D5   (hex)		allora Factory BVBA
+EE1000-EE1FFF     (base 16)		allora Factory BVBA
+				Lijsterlaan 11
+				Bornem    2880
+				BE
+
+70-B3-D5   (hex)		Easy Digital Concept
+0B9000-0B9FFF     (base 16)		Easy Digital Concept
+				1 avenue Girardot
+				Montmorency    95160
+				FR
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+528000-528FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		Entech Electronics
+17D000-17DFFF     (base 16)		Entech Electronics
+				37 Belford Ave
+				Adelaide  Australia  5008
+				AU
+
+70-B3-D5   (hex)		Digital Yacht Ltd
+BA7000-BA7FFF     (base 16)		Digital Yacht Ltd
+				Failand Farm
+				Bristol  Avon  BS8 3TR
+				GB
+
+70-B3-D5   (hex)		Arnouse Digital Devices, Corp.
+28B000-28BFFF     (base 16)		Arnouse Digital Devices, Corp.
+				1983 Marcus Ave., Suite 104
+				Lake Success  null  11042
+				US
+
+70-B3-D5   (hex)		Vivalnk
+3A9000-3A9FFF     (base 16)		Vivalnk
+				4655 Old Ironsides Dr, #390
+				Santa Clara  CA  95054
+				US
+
+70-B3-D5   (hex)		Atos spa
+2E7000-2E7FFF     (base 16)		Atos spa
+				Via alla Piana 57
+				Sesto Calende  Varese  21018
+				IT
+
+70-B3-D5   (hex)		Galileo Tıp Teknolojileri San. ve Tic. A.S.
+FE2000-FE2FFF     (base 16)		Galileo Tıp Teknolojileri San. ve Tic. A.S.
+				Bulgurlu Mah. Kanyon Cd. 89/1 Battalgazi
+				Malatya    44000
+				TR
+
+70-B3-D5   (hex)		enModus
+772000-772FFF     (base 16)		enModus
+				Cas-Gwent Chambers, Welsh Street
+				Chepstow  Monmouthshire  NP165X
+				GB
+
+70-B3-D5   (hex)		Shenzhen Rihuida Electronics Co,. Ltd
+046000-046FFF     (base 16)		Shenzhen Rihuida Electronics Co,. Ltd
+				Fuzhong Industrial Park #4 
+				Shenzhen    518103
+				CN
+
+70-B3-D5   (hex)		Prozess Technologie
+B5C000-B5CFFF     (base 16)		Prozess Technologie
+				6124 Delmar Blvd
+				St. Louis  MO  63112
+				US
+
+70-B3-D5   (hex)		DALIAN  LEVEAR ELECTRIC  CO., LTD
+FD2000-FD2FFF     (base 16)		DALIAN  LEVEAR ELECTRIC  CO., LTD
+				DA LIAN GAN JING ZI
+				DA LIAN  LIAO NING  116033
+				CN
+
+70-B3-D5   (hex)		UCONSYS 
+232000-232FFF     (base 16)		UCONSYS 
+				R.506, Blk. 17T11, Nguyen Thi Dinh Str.
+				Hanoi    123456
+				VN
+
+70-B3-D5   (hex)		Kohler Mira Ltd
+F55000-F55FFF     (base 16)		Kohler Mira Ltd
+				Cromwell Road
+				Cheltenham  Gloucestershire  GL52 5EP
+				GB
+
+70-B3-D5   (hex)		PROFITT Ltd
+091000-091FFF     (base 16)		PROFITT Ltd
+				office 5H, block 14-2 lit.A, Raevsky av.
+				Saint-Petersburg    194064
+				RU
+
+70-B3-D5   (hex)		IES S.r.l.
+8B0000-8B0FFF     (base 16)		IES S.r.l.
+				Via Amedeo Nazzari, 3
+				Anzio  Roma  00042
+				IT
+
+70-B3-D5   (hex)		Sorama BV
+26B000-26BFFF     (base 16)		Sorama BV
+				Torenallee 20
+				Eindhoven  Noord-Brabant  5617 BC
+				NL
+
+70-B3-D5   (hex)		Ai-Lynx
+847000-847FFF     (base 16)		Ai-Lynx
+				1 avenue de l'Atlantique
+				Les Ulis    91940
+				FR
+
+70-B3-D5   (hex)		Software Motor Corp
+5D1000-5D1FFF     (base 16)		Software Motor Corp
+				1295 Forgewood Avenue
+				Sunnyvale  CA  94089
+				US
+
+70-B3-D5   (hex)		Sensohive Technologies
+384000-384FFF     (base 16)		Sensohive Technologies
+				Cortex Park 26
+				Odense M    5230
+				DK
+
+70-B3-D5   (hex)		8Cups
+A6F000-A6FFFF     (base 16)		8Cups
+				29, Gonghang-daero 61-gil, Gangseo-gu
+				Seoul    07563
+				KR
+
+70-B3-D5   (hex)		Transit Solutions, LLC.
+28A000-28AFFF     (base 16)		Transit Solutions, LLC.
+				114 West Grandview Avenue
+				Zelienople  PA  16063
+				US
+
+70-B3-D5   (hex)		Ascon Tecnologic S.r.l.
+5A0000-5A0FFF     (base 16)		Ascon Tecnologic S.r.l.
+				via Indipendenza, 56
+				Vigevano  PV  27029
+				IT
+
+70-B3-D5   (hex)		Forschungs- und Transferzentrum Leipzig e.V.
+124000-124FFF     (base 16)		Forschungs- und Transferzentrum Leipzig e.V.
+				Karl-Liebknecht-Strasse 143
+				Leipzig    04277
+				DE
+
+70-B3-D5   (hex)		PTYPE Co., LTD.
+69E000-69EFFF     (base 16)		PTYPE Co., LTD.
+				B121, B-dong, Keumkang Penterium IT Tower, 810, Gwanyand 2-dong, Dongan-gu
+				Anyang-si  Gyeonggi-do  14056
+				KR
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+DB4000-DB4FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+D1B000-D1BFFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		Swissponic Sagl
+52E000-52EFFF     (base 16)		Swissponic Sagl
+				via Pedemonte 28a
+				Bellinzona  Ticino  6500
+				CH
+
+70-B3-D5   (hex)		Herholdt Controls srl
+4A1000-4A1FFF     (base 16)		Herholdt Controls srl
+				Via Mestre 13
+				Milan    20132
+				IT
+
+70-B3-D5   (hex)		MESOTECHNIC
+AFE000-AFEFFF     (base 16)		MESOTECHNIC
+				9 rue Léopold Sédar-Senghor
+				COLOMBELLES    14460
+				FR
+
+70-B3-D5   (hex)		OHMORI ELECTRIC INDUSTRIES CO.LTD
+6A9000-6A9FFF     (base 16)		OHMORI ELECTRIC INDUSTRIES CO.LTD
+				Tuzuki-ku 1 Higashiyamata
+				Yokohama-shi  Kanagawa-ken  224-0024
+				JP
+
+70-B3-D5   (hex)		PDD Group Ltd
+D81000-D81FFF     (base 16)		PDD Group Ltd
+				87 Richford Street
+				London  Greater London  W6 7HJ
+				GB
+
+70-B3-D5   (hex)		NEMEUS-SAS
+326000-326FFF     (base 16)		NEMEUS-SAS
+				1 rue de la Chalotais Bat A
+				Cesson-Sévigné    35510
+				FR
+
+70-B3-D5   (hex)		SHIZUKI ELECTRIC CO.,INC
+FE6000-FE6FFF     (base 16)		SHIZUKI ELECTRIC CO.,INC
+				10-45 Taisha-cho
+				Nishinomiya-shi Hyogo    662-0867
+				JP
+
+70-B3-D5   (hex)		EMAC, Inc.
+8AB000-8ABFFF     (base 16)		EMAC, Inc.
+				2390 EMAC Way
+				Carbondale  IL  62901
+				US
+
+70-B3-D5   (hex)		Fin Robotics Inc
+0C8000-0C8FFF     (base 16)		Fin Robotics Inc
+				11871 Hilltop Dr, Losaltos Hills
+				Los Altos  CA  94024
+				US
+
+70-B3-D5   (hex)		OPTIX JSC
+E77000-E77FFF     (base 16)		OPTIX JSC
+				19 Kliment Ohridski str.
+				Sofia  Sofia  1756
+				BG
+
+70-B3-D5   (hex)		Bayern Engineering GmbH & Co. KG
+570000-570FFF     (base 16)		Bayern Engineering GmbH & Co. KG
+				Maillinger Str.13
+				Bad Aibling  Bavaria  83043
+				DE
+
+70-B3-D5   (hex)		Project Decibel, Inc.
+645000-645FFF     (base 16)		Project Decibel, Inc.
+				745 Atlantic Ave Fl 8
+				Boston  MA  02111
+				US
+
+70-B3-D5   (hex)		eCozy GmbH
+DE0000-DE0FFF     (base 16)		eCozy GmbH
+				Trimburgstr. 2
+				Munich  Bavaria  81249
+				DE
+
+70-B3-D5   (hex)		Innosonix GmbH
+14E000-14EFFF     (base 16)		Innosonix GmbH
+				Hauptstrasse 35
+				Ahorn  Bayern  96482
+				DE
+
+70-B3-D5   (hex)		MoviTHERM
+694000-694FFF     (base 16)		MoviTHERM
+				15540 Rockfield Blvd C110
+				Irvine  CA  92618
+				US
+
+70-B3-D5   (hex)		Sailmon BV
+033000-033FFF     (base 16)		Sailmon BV
+				Vlierweg 22
+				Amsterdam  Noord-Holland  1032 LG
+				NL
+
+70-B3-D5   (hex)		IDOSENS
+407000-407FFF     (base 16)		IDOSENS
+				51 chemin du vieux chene
+				MEYLAN  ISERE  38240
+				FR
+
+70-B3-D5   (hex)		GID Industrial
+25B000-25BFFF     (base 16)		GID Industrial
+				1218 Executive Drive West
+				Richardson  TX  75081
+				US
+
+70-B3-D5   (hex)		DIEHL Controls
+313000-313FFF     (base 16)		DIEHL Controls
+				Pfannerstrasse 75-83
+				Wangen im Allgaeu  D  88239
+				DE
+
+70-B3-D5   (hex)		APOLLO GIKEN Co.,Ltd.
+3E9000-3E9FFF     (base 16)		APOLLO GIKEN Co.,Ltd.
+				2-6-25 CHIGASAKIMINAMI TSUZUKI-KU
+				Yokohama  Kanagawa  2240037
+				JP
+
+70-B3-D5   (hex)		Acc+Ess Ltd
+FCF000-FCFFFF     (base 16)		Acc+Ess Ltd
+				Glenrhu
+				Wick  Highland  KW1 4TW
+				GB
+
+70-B3-D5   (hex)		Paradigm Communication Systems Ltd
+B3E000-B3EFFF     (base 16)		Paradigm Communication Systems Ltd
+				Paradigm House
+				Alton  Hants  GU34 2PP
+				GB
+
+70-B3-D5   (hex)		ePOINT Embedded Computing Limited
+01E000-01EFFF     (base 16)		ePOINT Embedded Computing Limited
+				Williamton House
+				Culross  Fife  KY12 8HL
+				GB
+
+70-B3-D5   (hex)		Nanospeed Technologies Limited
+E35000-E35FFF     (base 16)		Nanospeed Technologies Limited
+				Devonshire House
+				Borehamwood  Hertfordshire  WD6 1QQ
+				GB
+
+70-B3-D5   (hex)		FUJICOM Co.,Ltd.
+9F0000-9F0FFF     (base 16)		FUJICOM Co.,Ltd.
+				1581-1, Wakakodama, Gyouda-shi
+				Saitama-ken    3610017
+				JP
+
+70-B3-D5   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
+364000-364FFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
+				Felix-Wankel-Str. 13
+				Zaberfeld  Baden-Württemberg  74374
+				DE
+
+70-B3-D5   (hex)		ENVItech s.r.o.
+6F9000-6F9FFF     (base 16)		ENVItech s.r.o.
+				Janka Krala 16
+				Trencin    911 01
+				SK
+
+70-B3-D5   (hex)		servicios de consultoria independiente S.L.
+59D000-59DFFF     (base 16)		servicios de consultoria independiente S.L.
+				c/doctor apolinario macias 22. of.2
+				las palmas de gran canaria  Las Palmas  35011
+				ES
+
+70-B3-D5   (hex)		RANIX,Inc.
+404000-404FFF     (base 16)		RANIX,Inc.
+				3F, Handock Bldg., 2645 Nambusunhwan-ro, Gangnam-gu, Seoul, Korea
+				Seoul  Gangnam-gu  135-859
+				KR
+
+70-B3-D5   (hex)		DK-Technologies A/S
+3C0000-3C0FFF     (base 16)		DK-Technologies A/S
+				Marielundvej 37D
+				Herlev  _  2730
+				DK
+
+70-B3-D5   (hex)		Teletypes Manufacturing Plant
+554000-554FFF     (base 16)		Teletypes Manufacturing Plant
+				141, Saltykova-Schedrina Stree
+				Kaluga  Kaluga/Kaluga region  248002
+				RU
+
+70-B3-D5   (hex)		FeldTech GmbH
+A01000-A01FFF     (base 16)		FeldTech GmbH
+				Goestingerstrasse 70
+				Graz  -  8051
+				AT
+
+70-B3-D5   (hex)		ATEME
+DC0000-DC0FFF     (base 16)		ATEME
+				26 Burospace
+				Bievres  IDF  91470
+				
+
+70-B3-D5   (hex)		SINED srl
+C88000-C88FFF     (base 16)		SINED srl
+				Via 25 Aprile 34
+				Granarolo  Bologna  40057
+				IT
+
+70-B3-D5   (hex)		CommBox P/L
+835000-835FFF     (base 16)		CommBox P/L
+				3b/10 Rodborough Rd
+				Frenchs Forest  NSW  2086
+				AU
+
+70-B3-D5   (hex)		Quaesta Instruments, LLC
+88F000-88FFFF     (base 16)		Quaesta Instruments, LLC
+				1665 E 18th Street
+				Tucson  AZ  85719
+				US
+
+70-B3-D5   (hex)		Private
+ADA000-ADAFFF     (base 16)		Private
+
+70-B3-D5   (hex)		MEPS Realtime
+866000-866FFF     (base 16)		MEPS Realtime
+				6451 El Camino Real
+				Carlsbad  California  92009
+				US
+
+70-B3-D5   (hex)		PlayAlive A/S
+82E000-82EFFF     (base 16)		PlayAlive A/S
+				Platzvej 2
+				Vejle  Denmark  7100
+				DK
+
+70-B3-D5   (hex)		Applied Systems Engineering, Inc.
+9C8000-9C8FFF     (base 16)		Applied Systems Engineering, Inc.
+				1671 Dell Ave.
+				Campbell  CA  95008
+				US
+
+70-B3-D5   (hex)		Bunka Shutter Co., Ltd.
+5A9000-5A9FFF     (base 16)		Bunka Shutter Co., Ltd.
+				644-1 Tenjingoe,Ooaza-Kamiishizuka
+				Oyama  Tochigi  323-0063
+				JP
+
+70-B3-D5   (hex)		Damerell Design Limited (DCL)
+D8C000-D8CFFF     (base 16)		Damerell Design Limited (DCL)
+				111 St Michaels Road
+				Aldershot  Hampshire  GU12 4JW
+				GB
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+C21000-C21FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		Sinftech LLC
+4BA000-4BAFFF     (base 16)		Sinftech LLC
+				406, 1, Rizhskaya street
+				Saint Petersburg  Saint Petersburg  195196
+				RU
+
+70-B3-D5   (hex)		Metromatics Pty Ltd
+827000-827FFF     (base 16)		Metromatics Pty Ltd
+				25 Flinders Pde
+				North Lakes  QLD  4509
+				AU
+
+70-B3-D5   (hex)		Plasmability, LLC
+2A7000-2A7FFF     (base 16)		Plasmability, LLC
+				4715 Steiner Ranch Blvd
+				Austin  TX  78732
+				US
+
+70-B3-D5   (hex)		Laser Imagineering GmbH
+0D8000-0D8FFF     (base 16)		Laser Imagineering GmbH
+				Rudolf-Diesel-Weg 5
+				Moelln  Schleswig Holstein  23879
+				DE
+
+70-B3-D5   (hex)		Smart Energy Code Company Limited
+1F3000-1F3FFF     (base 16)		Smart Energy Code Company Limited
+				8 Fenchurch Place
+				London  England, London  EC3M 4AJ
+				GB
+
+70-B3-D5   (hex)		WARECUBE,INC
+BAE000-BAEFFF     (base 16)		WARECUBE,INC
+				3F, 119-59, Sasadong
+				Ansansi  Gyunggido  426-220
+				KR
+
+70-B3-D5   (hex)		Fenotech Inc.
+B85000-B85FFF     (base 16)		Fenotech Inc.
+				3478 Buskirk Ave Ste 1000
+				Pleasant Hill  CA  94523
+				US
+
+70-B3-D5   (hex)		Pullnet Technology,S.L.
+D8D000-D8DFFF     (base 16)		Pullnet Technology,S.L.
+				Parc Tecnologic BCNord
+				Barcelona  Catalonia  08042
+				ES
+
+70-B3-D5   (hex)		EQUIPOS DE TELECOMUNICACIÓN OPTOELECTRÓNICOS, S.A.
+2BC000-2BCFFF     (base 16)		EQUIPOS DE TELECOMUNICACIÓN OPTOELECTRÓNICOS, S.A.
+				POL.MALPICA, C/F OESTE, G.QUEJIDO, 74
+				ZARAGOZA  ZARAGOZA  50057
+				ES
+
+70-B3-D5   (hex)		HDL da Amazônia Industria Eletrônica Ltda
+A27000-A27FFF     (base 16)		HDL da Amazônia Industria Eletrônica Ltda
+				Avenida Abiurana, 1150 - Distrito
+				Manaus  MN  69075-010
+				BR
+
+70-B3-D5   (hex)		Visual Engineering Technologies Ltd
+6D1000-6D1FFF     (base 16)		Visual Engineering Technologies Ltd
+				The Barns, Kemps Farm
+				Colchester  Essex  CO3 8NB
+				GB
+
+70-B3-D5   (hex)		Birdland Audio
+AD5000-AD5FFF     (base 16)		Birdland Audio
+				484 Washington St. Ste.B-450
+				Monterey  CA  93940
+				US
+
+70-B3-D5   (hex)		AVI Pty Ltd
+3E2000-3E2FFF     (base 16)		AVI Pty Ltd
+				9 Pitt Way
+				Booragoon  Western Australia  6154
+				AU
+
+70-B3-D5   (hex)		PCME Ltd.
+FE8000-FE8FFF     (base 16)		PCME Ltd.
+				Clearview Building
+				St Ives  Cambridgeshire  PE27 3GH
+				GB
+
+70-B3-D5   (hex)		pureLiFi Ltd
+958000-958FFF     (base 16)		pureLiFi Ltd
+				ETTC, Alrick Building
+				Edinburgh  Edinburgh  EH9 3BF
+				GB
+
+70-B3-D5   (hex)		PEEK TRAFFIC
+C3C000-C3CFFF     (base 16)		PEEK TRAFFIC
+				5401 N SAM HOUSTON PKWY W
+				HOUSTON  TEXAS  77086
+				US
+
+70-B3-D5   (hex)		Technik & Design GmbH
+BAD000-BADFFF     (base 16)		Technik & Design GmbH
+				Rhinstrasse 84
+				Berlin  Berlin  12681
+				DE
+
+70-B3-D5   (hex)		Qxperts Italia S.r.l.
+5B0000-5B0FFF     (base 16)		Qxperts Italia S.r.l.
+				Via Muratori 9
+				Genova  Italy  16152
+				IT
+
+70-B3-D5   (hex)		LLVISION TECHNOLOGY CO.,LTD
+E21000-E21FFF     (base 16)		LLVISION TECHNOLOGY CO.,LTD
+				Room302,Building A Fuxing,No.30 He Tao Yuan,Guan Dong Dian Bei Jie
+				Beijing  Beijing  100026
+				CN
+
+70-B3-D5   (hex)		AML Oceanographic
+0CD000-0CDFFF     (base 16)		AML Oceanographic
+				2071 Malaview Avenue
+				Sidney  British Columbia  V8L 5X6
+				CA
+
+70-B3-D5   (hex)		Twoway Communications, Inc.
+4AA000-4AAFFF     (base 16)		Twoway Communications, Inc.
+				41 Wu Kung 6 Rd., New Taipei Industrial Park, New Taipei City,24891,Taiwan,R.O.C.
+				New Taipei city  Taipei  24891
+				TW
+
+70-B3-D5   (hex)		Kentech Instruments Limited
+EAC000-EACFFF     (base 16)		Kentech Instruments Limited
+				The Isis Building
+				Wallingford  Oxfordshire  OX10 8BA
+				GB
+
+70-B3-D5   (hex)		Global Communications Technology LLC
+8AD000-8ADFFF     (base 16)		Global Communications Technology LLC
+				4915 Waters Edge Dr
+				Raleigh  North Carolina  27606-2394
+				US
+
+70-B3-D5   (hex)		Conjing Networks Inc.
+134000-134FFF     (base 16)		Conjing Networks Inc.
+				4F., No.108, Zhenxing Rd., East Dist.
+				Hsinchu City  Taiwan  30063
+				TW
+
+70-B3-D5   (hex)		CW2. Gmbh & Co. KG
+79E000-79EFFF     (base 16)		CW2. Gmbh & Co. KG
+				Tübinger Straße 43
+				Stuttgart  Baden-Württemberg  70178
+				DE
+
+70-B3-D5   (hex)		Vtron Pty Ltd
+341000-341FFF     (base 16)		Vtron Pty Ltd
+				Unit 2, 62 Township Drive West
+				West Burleigh  Queensland  4219
+				AU
+
+70-B3-D5   (hex)		HAMEG GmbH
+F5A000-F5AFFF     (base 16)		HAMEG GmbH
+				Industriestr. 6
+				Mainhausen  Hessen  63533
+				DE
+
+70-B3-D5   (hex)		Vitec System Engineering Inc.
+799000-799FFF     (base 16)		Vitec System Engineering Inc.
+				1-2-5
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+70-B3-D5   (hex)		Akenori PTE LTD
+6A5000-6A5FFF     (base 16)		Akenori PTE LTD
+				176 JOO CHIAT ROAD #02-02
+				    427447
+				SG
+
+70-B3-D5   (hex)		Amrehn & Partner EDV-Service GmbH
+20E000-20EFFF     (base 16)		Amrehn & Partner EDV-Service GmbH
+				Friedrich-König-Straße 11
+				Waldbüttelbrunn  Bayern  97297
+				DE
+
+70-B3-D5   (hex)		West-Com Nurse Call Systems, Inc.
+AA8000-AA8FFF     (base 16)		West-Com Nurse Call Systems, Inc.
+				2200 Cordelia Road
+				Fairfield  CA  94534
+				US
+
+70-B3-D5   (hex)		FOTONA D.D.
+BD3000-BD3FFF     (base 16)		FOTONA D.D.
+				Stegne 7
+				Ljubljana    1000
+				SI
+
+70-B3-D5   (hex)		Redwood Systems
+A2A000-A2AFFF     (base 16)		Redwood Systems
+				3839 Spinnaker Court
+				Fremont   CA  94538
+				US
+
+70-B3-D5   (hex)		Wiingtech International Co. LTD.
+6ED000-6EDFFF     (base 16)		Wiingtech International Co. LTD.
+				2F., No. 51, LN. 174, Chungshiao Rd.
+				New Taipei City  Taiwan  220
+				TW
+
+70-B3-D5   (hex)		Smith Meter, Inc.
+E23000-E23FFF     (base 16)		Smith Meter, Inc.
+				1602 Wagner Ave.
+				Erie  PA  16510
+				US
+
+70-B3-D5   (hex)		KSJ Co.Ltd
+917000-917FFF     (base 16)		KSJ Co.Ltd
+				Address 4F Kurosu Bldg.
+				Nakano-ku  Tokyo  1640012
+				JP
+
+70-B3-D5   (hex)		PXM sp.k.
+EFB000-EFBFFF     (base 16)		PXM sp.k.
+				Przemyslowa 12
+				Krakow  Malopolska  30-701
+				PL
+
+70-B3-D5   (hex)		Tiab Limited
+DF6000-DF6FFF     (base 16)		Tiab Limited
+				Upton Lodge Buildings,
+				Middleton Cheney  Banbury  OX17 2PJ
+				GB
+
+70-B3-D5   (hex)		Dynamic Controls
+AB9000-AB9FFF     (base 16)		Dynamic Controls
+				17 Print Place
+				Christchurch  Canterbury  8024
+				NZ
+
+70-B3-D5   (hex)		Redler Computers
+41E000-41EFFF     (base 16)		Redler Computers
+				Hamelacha St., 8 ,New Industrial Zone
+				Netanya  Israel  42815
+				IL
+
+70-B3-D5   (hex)		ATX NETWORKS LTD
+A00000-A00FFF     (base 16)		ATX NETWORKS LTD
+				Halapid 12 st
+				Petach tikva  Israel  4917001
+				IL
+
+70-B3-D5   (hex)		Confed Holding B.V.
+99F000-99FFFF     (base 16)		Confed Holding B.V.
+				Beurtschipper 2-4
+				Nijkerk  n.a.  3861SC
+				NL
+
+70-B3-D5   (hex)		Li Seng Technology Ltd.,
+4F0000-4F0FFF     (base 16)		Li Seng Technology Ltd.,
+				901., Siu Fung Hong Building
+				Hong Kong  Hong Kong  852
+				HK
+
+70-B3-D5   (hex)		Zenros ApS
+F39000-F39FFF     (base 16)		Zenros ApS
+				Kongevejen 331- 1.
+				Holte  Hovedstaden  DK2840
+				DK
+
+70-B3-D5   (hex)		TELETASK
+C56000-C56FFF     (base 16)		TELETASK
+				Ottergemsesteenweg-Zuid 729
+				GENT    9000
+				BE
+
+70-B3-D5   (hex)		Private
+22E000-22EFFF     (base 16)		Private
+
+70-B3-D5   (hex)		Coherent Logix, Inc.
+2BE000-2BEFFF     (base 16)		Coherent Logix, Inc.
+				1120 S Capital of TX HWY
+				Austin  TX  78746
+				US
+
+70-B3-D5   (hex)		Figment Design Laboratories
+417000-417FFF     (base 16)		Figment Design Laboratories
+				113 11th Avenue
+				Johannesburg  Gauteng  2170
+				ZA
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+4CD000-4CDFFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		Institute of Power Engineering, Gdansk Division
+6E4000-6E4FFF     (base 16)		Institute of Power Engineering, Gdansk Division
+				Mikolaja Reja 27
+				Gdansk  Pomorskie  80-870
+				PL
+
+70-B3-D5   (hex)		Lieron BVBA
+E6E000-E6EFFF     (base 16)		Lieron BVBA
+				Beversluis 6
+				Wezemaal  Vl. Brabant  3111
+				BE
+
+70-B3-D5   (hex)		FeCon GmbH
+BE1000-BE1FFF     (base 16)		FeCon GmbH
+				Eckernförder Landstraße 78
+				Flensburg  Schleswig Holstein  24941
+				DE
+
+70-B3-D5   (hex)		Nanjing Magewell Electronics Co., Ltd.
+75D000-75DFFF     (base 16)		Nanjing Magewell Electronics Co., Ltd.
+				Romm 701, Building C, Win-world Innovation Park
+				Nanjing  Jiangsu  211100
+				CN
+
+70-B3-D5   (hex)		Roush
+65B000-65BFFF     (base 16)		Roush
+				12249 Levan
+				Livonia  MI  48150
+				US
+
+70-B3-D5   (hex)		Nexus Technologies Pty Ltd
+0C1000-0C1FFF     (base 16)		Nexus Technologies Pty Ltd
+				66-68 Wedgewood Road
+				Hallam  Victoria  3803
+				AU
+
+70-B3-D5   (hex)		HI-TECH SYSTEM Co. Ltd.
+26E000-26EFFF     (base 16)		HI-TECH SYSTEM Co. Ltd.
+				76-22 Toiso
+				Eniwa  Hokkaido  061-1405
+				JP
+
+70-B3-D5   (hex)		Zehetner-Elektronik GmbH
+5E9000-5E9FFF     (base 16)		Zehetner-Elektronik GmbH
+				Florianerstrasse 19
+				Sankt Marien    4502
+				AT
+
+70-B3-D5   (hex)		RFEL Ltd
+9F1000-9F1FFF     (base 16)		RFEL Ltd
+				Unit B, The Apex
+				Newport  Isle of Wight  PO30 5XW
+				GB
+
+70-B3-D5   (hex)		MeshWorks Wireless Oy
+C39000-C39FFF     (base 16)		MeshWorks Wireless Oy
+				Haarlankatu 1 J
+				Tampere  No selection required  33230
+				FI
+
+70-B3-D5   (hex)		GAMPT mbH
+796000-796FFF     (base 16)		GAMPT mbH
+				Hallesche Str. 99F
+				Merseburg  S-A  06217
+				DE
+
+70-B3-D5   (hex)		Tresent Technologies
+030000-030FFF     (base 16)		Tresent Technologies
+				104 Bartlett Drive
+				Schwenksville  Pennsylvania  19473
+				US
+
+70-B3-D5   (hex)		Lookout Portable Security
+B82000-B82FFF     (base 16)		Lookout Portable Security
+				4105 Royal Dr. #100
+				Kennesaw  GA  30144
+				US
+
+70-B3-D5   (hex)		Videotrend srl
+39A000-39AFFF     (base 16)		Videotrend srl
+				Via Brughetti 9/H
+				Bovisio Masciago  Monza Brianza  20813
+				IT
+
+70-B3-D5   (hex)		SIMON TECH, S.L.
+882000-882FFF     (base 16)		SIMON TECH, S.L.
+				Diputació, 390
+				BARCELONA  BARCELONA  08013
+				ES
+
+70-B3-D5   (hex)		Smart Service Technologies CO., LTD
+660000-660FFF     (base 16)		Smart Service Technologies CO., LTD
+				No.802, 2-12-3, Imajuku, Nishi-ku
+				Fukuoka  Fukuoka  819-0167
+				JP
+
+70-B3-D5   (hex)		Vickers Electronics Ltd
+9F5000-9F5FFF     (base 16)		Vickers Electronics Ltd
+				Unit 14, Alliance House
+				Trafford Park  Manchester  M17 1QS
+				GB
+
+70-B3-D5   (hex)		Connor Winfield LTD
+D0C000-D0CFFF     (base 16)		Connor Winfield LTD
+				Bay 143 Shannon Ind Est
+				Shannon  Clare  0000
+				IE
+
+70-B3-D5   (hex)		OMEGA BILANCE SRL SOCIETA' UNIPERSONALE
+48D000-48DFFF     (base 16)		OMEGA BILANCE SRL SOCIETA' UNIPERSONALE
+				VIA FRANCESCO CARACCIOLO, 115
+				NAPLES  NAPLES  80122
+				IT
+
+70-B3-D5   (hex)		Loop Labs, Inc.
+3DA000-3DAFFF     (base 16)		Loop Labs, Inc.
+				207 South Bannock Street
+				Denver  Colorado  80223
+				US
+
+70-B3-D5   (hex)		INTERNET PROTOCOLO LOGICA SL
+0FF000-0FFFFF     (base 16)		INTERNET PROTOCOLO LOGICA SL
+				Sector Foresta 43, local 26
+				Tres Cantos  Madrid  28760
+				ES
+
+70-B3-D5   (hex)		Glidewell Laboratories
+502000-502FFF     (base 16)		Glidewell Laboratories
+				4141 MacArthur Blvd
+				Newport Beach  CA  92660
+				US
+
+70-B3-D5   (hex)		Metek Meteorologische Messtechnik GmbH
+A6D000-A6DFFF     (base 16)		Metek Meteorologische Messtechnik GmbH
+				Fritz-Straßmann-Straße 4
+				Elmshorn  Schleswig-Holstein  D-25337
+				
+
+70-B3-D5   (hex)		Beijing CONvision Technology Co.,Ltd
+08E000-08EFFF     (base 16)		Beijing CONvision Technology Co.,Ltd
+				suzhoujie apartment #33 room 1302
+				  Beijing  100080
+				CN
+
+70-B3-D5   (hex)		WoKa-Elektronik GmbH
+8E1000-8E1FFF     (base 16)		WoKa-Elektronik GmbH
+				Fulder Tor 30
+				Alsfeld  Hessen  36304
+				DE
+
+70-B3-D5   (hex)		SOUDAX EQUIPEMENTS
+8E0000-8E0FFF     (base 16)		SOUDAX EQUIPEMENTS
+				14 AVE DE LA MAULDRE
+				EPONE  IDF  78680
+				FR
+
+70-B3-D5   (hex)		Cyviz AS
+C6D000-C6DFFF     (base 16)		Cyviz AS
+				Vestre svanholmen 6
+				Sandnes  NO  N4313
+				NO
+
+70-B3-D5   (hex)		Qprel srl
+DA1000-DA1FFF     (base 16)		Qprel srl
+				Via Fiorentina 578/D
+				Pistoia  Italy  51100
+				IT
+
+70-B3-D5   (hex)		Cyberteam Sp z o o
+36D000-36DFFF     (base 16)		Cyberteam Sp z o o
+				Kalinowice 157
+				Zamosc  Lubelskie  22400
+				PL
+
+70-B3-D5   (hex)		LunaNexus Inc
+55D000-55DFFF     (base 16)		LunaNexus Inc
+				1-8-29 nishimiyahara
+				Osakashi yodogawa-ku  Osaka-fu  5320004
+				JP
+
+70-B3-D5   (hex)		Houston Radar LLC
+D1E000-D1EFFF     (base 16)		Houston Radar LLC
+				12818 Century Dr
+				Stafford  Texas  77477
+				US
+
+70-B3-D5   (hex)		Veryx Technologies Private Limited
+43D000-43DFFF     (base 16)		Veryx Technologies Private Limited
+				Floor 1, RR Tower 4, Thiru-Vi-Ka Industrial Estate
+				Chennai  Tamil Nadu  600032
+				IN
+
+70-B3-D5   (hex)		Deymed Diagnostic
+BCA000-BCAFFF     (base 16)		Deymed Diagnostic
+				Velky Drevic 91
+				Hronov  Kralovehradecky kraj  54934
+				CZ
+
+70-B3-D5   (hex)		managee GmbH & Co KG
+5F0000-5F0FFF     (base 16)		managee GmbH & Co KG
+				Marbergweg 79
+				Cologne  NRW  51107
+				DE
+
+70-B3-D5   (hex)		Niveo International BV
+8DC000-8DCFFF     (base 16)		Niveo International BV
+				Communicatieweg 9L
+				Mijdrecht  ZH  3641SG
+				NL
+
+70-B3-D5   (hex)		ATEME
+3E5000-3E5FFF     (base 16)		ATEME
+				26 Burospace
+				Bievres  IDF  91470
+				
+
+70-B3-D5   (hex)		DiTEST Fahrzeugdiagnose GmbH
+AEE000-AEEFFF     (base 16)		DiTEST Fahrzeugdiagnose GmbH
+				Alte Poststraße 152
+				Graz  Steiermark  8020
+				AT
+
+70-B3-D5   (hex)		Ipitek
+ECF000-ECFFFF     (base 16)		Ipitek
+				2320 Faraday Ave
+				Carlsbad  CA  92008
+				US
+
+70-B3-D5   (hex)		STRACK LIFT AUTOMATION GmbH
+A40000-A40FFF     (base 16)		STRACK LIFT AUTOMATION GmbH
+				Lise-Meitner-Straße 2
+				Wülfrath  NRW  42489
+				DE
+
+70-B3-D5   (hex)		XI'AN SHENMING ELECTRON TECHNOLOGY CO.,LTD
+B16000-B16FFF     (base 16)		XI'AN SHENMING ELECTRON TECHNOLOGY CO.,LTD
+				1-2-4-2401 XIANGSHU NO.3 KEJI FIVE STREET
+				XI'AN  SHANXI  710000
+				CN
+
+70-B3-D5   (hex)		Census Digital Incorporated
+86D000-86DFFF     (base 16)		Census Digital Incorporated
+				72 Dynamic Drive
+				Toronto  Ontario  M1V 3Z5
+				CA
+
+70-B3-D5   (hex)		WIBOND Informationssysteme GmbH
+F2A000-F2AFFF     (base 16)		WIBOND Informationssysteme GmbH
+				Neustädter Strasse 19
+				Parkstein  Bayern  92711
+				DE
+
+70-B3-D5   (hex)		Providius Corp
+BBD000-BBDFFF     (base 16)		Providius Corp
+				848 Main St E
+				Hamilton  Ontario  L8M1L9
+				CA
+
+70-B3-D5   (hex)		UNI DIMENXI SDN BHD
+C96000-C96FFF     (base 16)		UNI DIMENXI SDN BHD
+				A-1-05, SME Technopreneur Centre Cyberjaya,
+				Cyberjaya  Selangor Darul Ehsan  63000
+				MY
+
+70-B3-D5   (hex)		Botek Systems AB
+A2F000-A2FFFF     (base 16)		Botek Systems AB
+				Box 35
+				Ulricehamn    52321
+				SE
+
+70-B3-D5   (hex)		Lehigh Electric Products Co
+5B5000-5B5FFF     (base 16)		Lehigh Electric Products Co
+				6265 Hamilton Blvd
+				Allentown  PA  18106
+				US
+
+70-B3-D5   (hex)		Eta Beta Srl
+B15000-B15FFF     (base 16)		Eta Beta Srl
+				Via Mura dei Francesi, 26
+				Ciampino  Roma  00043
+				IT
+
+70-B3-D5   (hex)		Honeywell
+9A7000-9A7FFF     (base 16)		Honeywell
+				13350 US Highway 19 N
+				Clearwater  FLORIDA  33764
+				US
+
+70-B3-D5   (hex)		Cygnus LLC
+0FB000-0FBFFF     (base 16)		Cygnus LLC
+				510 East 41st St
+				Paterson  NJ  07504
+				US
+
+70-B3-D5   (hex)		KST technology
+C8D000-C8DFFF     (base 16)		KST technology
+				164-1, KST b/d., Bangi-dong, songpa-gu
+				SEOUL  N/A  138-050
+				KR
+
+70-B3-D5   (hex)		BIO RAD LABORATORIES
+DDD000-DDDFFF     (base 16)		BIO RAD LABORATORIES
+				6000 JAMES WATSON DR.
+				HERCULES  CA  94547
+				US
+
+70-B3-D5   (hex)		 GD Mission Systems
+C27000-C27FFF     (base 16)		 GD Mission Systems
+				8220 E. Roosevelt St.
+				Scottsdale  AZ  85257
+				US
+
+70-B3-D5   (hex)		Glova Rail A/S
+918000-918FFF     (base 16)		Glova Rail A/S
+				Elvej 3
+				Odense S    5260
+				DK
+
+70-B3-D5   (hex)		Oso Technologies
+871000-871FFF     (base 16)		Oso Technologies
+				301 N. Neil St.
+				Champaign  Illinois  61820
+				US
+
+00-1B-C5   (hex)		UAB Kitron
+0C9000-0C9FFF     (base 16)		UAB Kitron
+				Taikos 151
+				Kaunas  Lithuania  LT-52119
+				US
+
+00-1B-C5   (hex)		Gill Instruments Ltd
+0C5000-0C5FFF     (base 16)		Gill Instruments Ltd
+				Saltmarsh Park
+				Lymington  Hampshire  SO41 9EG
+				GB
+
+00-1B-C5   (hex)		Connode
+0C6000-0C6FFF     (base 16)		Connode
+				Järnvägsgatan 10 PO Box 1094
+				Sundbyberg    17222
+				SE
+
+00-1B-C5   (hex)		NT MICROSYSTEMS
+0BA000-0BAFFF     (base 16)		NT MICROSYSTEMS
+				Midori-ku
+				Yokohama  Kanagawa  2260017
+				JP
+
+00-1B-C5   (hex)		Bridge Diagnostics, Inc.
+0BD000-0BDFFF     (base 16)		Bridge Diagnostics, Inc.
+				1995 57th Court N.Ste 100
+				Boulder  Co  80301
+				US
+
+00-1B-C5   (hex)		Tierra Japan Co.,Ltd
+0AD000-0ADFFF     (base 16)		Tierra Japan Co.,Ltd
+				Cosmos Mansion 201
+				Shinjuku-ku  Tokyo  169-0072
+				JP
+
+00-1B-C5   (hex)		Enerwise Solutions Ltd.
+0AF000-0AFFFF     (base 16)		Enerwise Solutions Ltd.
+				Flat/Room 510, 5/F Wayson,Comm Building
+				    
+				HK
+
+00-1B-C5   (hex)		Elektrometal SA
+0A9000-0A9FFF     (base 16)		Elektrometal SA
+				Stawowa 71
+				Cieszyn  Slaskie  43-400
+				PL
+
+00-1B-C5   (hex)		L.G.L. Electronics S.p.a.
+0A7000-0A7FFF     (base 16)		L.G.L. Electronics S.p.a.
+				Via Ugo Foscolo, 156
+				Gandino  Bergamo  24024
+				IT
+
+00-1B-C5   (hex)		Link Precision
+0A8000-0A8FFF     (base 16)		Link Precision
+				Rua Lauro Linhares, 589
+				Florianópolis  SC  88036001
+				BR
+
+00-1B-C5   (hex)		AVnu Alliance
+0AC000-0ACFFF     (base 16)		AVnu Alliance
+				3855 SW 153rd Drive
+				Beaverton  Oregon  97003
+				US
+
+00-1B-C5   (hex)		Tesla Controls
+0A5000-0A5FFF     (base 16)		Tesla Controls
+				8400 Miramar Road
+				San Diego  CA  92126
+				US
+
+00-1B-C5   (hex)		RADMOR S.A.
+0A4000-0A4FFF     (base 16)		RADMOR S.A.
+				HUTNICZA 3
+				GDYNIA  Pomorskie  81-212
+				PL
+
+00-1B-C5   (hex)		K+K Messtechnik GmbH
+09E000-09EFFF     (base 16)		K+K Messtechnik GmbH
+				St.-Wendel-Str. 12
+				Braunschweig  Niedersachsen  38116
+				DE
+
+00-1B-C5   (hex)		YIK Corporation
+09B000-09BFFF     (base 16)		YIK Corporation
+				B-4F,Pangyo Silicon Park 613
+				seongnam-si  Gyeonggi-do  463-400
+				KR
+
+00-1B-C5   (hex)		Plexstar Inc.
+097000-097FFF     (base 16)		Plexstar Inc.
+				209 S H 121 Bypass, STE 35
+				Lewisville  TX  75067
+				US
+
+00-1B-C5   (hex)		3green ApS
+091000-091FFF     (base 16)		3green ApS
+				Tinghaven 5
+				Vodskov    9000
+				DK
+
+00-1B-C5   (hex)		Seven Solutions S.L
+090000-090FFF     (base 16)		Seven Solutions S.L
+				C/Baza, parcela 19,
+				Peligros  Granada  18210
+				ES
+
+00-1B-C5   (hex)		CAST Group of Companies Inc.
+086000-086FFF     (base 16)		CAST Group of Companies Inc.
+				35 Ripley Ave.
+				Toronto  Ontario  M6S3P2
+				CA
+
+00-1B-C5   (hex)		Applied Innovations Research LLC
+084000-084FFF     (base 16)		Applied Innovations Research LLC
+				21265 Radisson Road
+				Shorewood  MN  55331-9191
+				US
+
+00-1B-C5   (hex)		QCORE Medical
+07B000-07BFFF     (base 16)		QCORE Medical
+				14 Hamefalsim St
+				Petach Tikva  Israel  49130
+				IL
+
+00-1B-C5   (hex)		Servicios Electronicos Industriales Berbel s.l.
+07A000-07AFFF     (base 16)		Servicios Electronicos Industriales Berbel s.l.
+				Calle San Jose N
+				PINTO  MADRID  28320
+				ES
+
+00-1B-C5   (hex)		Donbass Soft Ltd and Co.KG
+078000-078FFF     (base 16)		Donbass Soft Ltd and Co.KG
+				Im Gewerbepark C25
+				Regensburg  Bavaria  93059
+				DE
+
+00-1B-C5   (hex)		PLAiR Media, Inc
+076000-076FFF     (base 16)		PLAiR Media, Inc
+				2901 Tasman Dr.
+				Santa Clara  California  95054
+				US
+
+00-1B-C5   (hex)		IST GmbH
+06A000-06AFFF     (base 16)		IST GmbH
+				Peter-Henlein-Str. 11
+				Guenzburg    86312
+				DE
+
+00-1B-C5   (hex)		Manufacturas y transformados AB
+066000-066FFF     (base 16)		Manufacturas y transformados AB
+				Sant Antoni de Baix 110-112
+				Igualada  Barcelona  08700
+				ES
+
+00-1B-C5   (hex)		Metrycom Communications Ltd
+053000-053FFF     (base 16)		Metrycom Communications Ltd
+				2 Koifman st.
+				Tel Aviv    68012
+				IL
+
+00-1B-C5   (hex)		Engineering Center ENERGOSERVICE
+052000-052FFF     (base 16)		Engineering Center ENERGOSERVICE
+				26 Kotlasskaya str.
+				Arkhangelsk    163046
+				RU
+
+00-1B-C5   (hex)		INPIXAL
+059000-059FFF     (base 16)		INPIXAL
+				80 Avenue des Buttes de Coesmes
+				RENNES  BRETAGNE  35700
+				FR
+
+00-1B-C5   (hex)		ThinKom Solutions, Inc
+056000-056FFF     (base 16)		ThinKom Solutions, Inc
+				20000 Mariner Ave
+				Torrance  CA  90503
+				US
+
+00-1B-C5   (hex)		TeliSwitch Solutions
+050000-050FFF     (base 16)		TeliSwitch Solutions
+				7 Hatochna st.
+				Kfar Saba    44641
+				IL
+
+00-1B-C5   (hex)		eiraku electric corp.
+04D000-04DFFF     (base 16)		eiraku electric corp.
+				osaki 1-19-1
+				tokyo  shinagawa  141-0032
+				JP
+
+00-1B-C5   (hex)		ZAO &quot;RADIUS Avtomatika&quot;
+044000-044FFF     (base 16)		ZAO &quot;RADIUS Avtomatika&quot;
+				Panfilovskiy prospekt, 10/3
+				Zelenograd  Moscow  124489
+				RU
+
+00-1B-C5   (hex)		XPossible Technologies Pte Ltd
+048000-048FFF     (base 16)		XPossible Technologies Pte Ltd
+				105 Tampines Road
+				     535127
+				SG
+
+00-1B-C5   (hex)		Coincident, Inc.
+043000-043FFF     (base 16)		Coincident, Inc.
+				337 Summer Street
+				Boston  MA  02210
+				US
+
+00-1B-C5   (hex)		MindMade Sp. z o.o.
+03A000-03AFFF     (base 16)		MindMade Sp. z o.o.
+				Sniadeckich 10
+				Warsaw    00-656
+				PL
+
+00-1B-C5   (hex)		BETTINI SRL
+02E000-02EFFF     (base 16)		BETTINI SRL
+				VIA CESARE BATTISTI 22
+				CESANO MADERNO  MILAN  20031
+				IT
+
+00-1B-C5   (hex)		Simavita Pty Ltd
+00F000-00FFFF     (base 16)		Simavita Pty Ltd
+				492 St Kilda Road
+				Melbourne  Victoria  3004
+				AU
+
+00-1B-C5   (hex)		Converging Systems Inc.
+000000-000FFF     (base 16)		Converging Systems Inc.
+				32420 Nautilus Drive
+				Rancho Palos Verdes  CA  90275
+				US
+
+00-1B-C5   (hex)		GORAMO - Janusz Gorecki
+002000-002FFF     (base 16)		GORAMO - Janusz Gorecki
+				ul. Szancowa 82
+				    PL 01-458
+				PL
+
+00-1B-C5   (hex)		Dalaj Electro-Telecom
+008000-008FFF     (base 16)		Dalaj Electro-Telecom
+				1st Floor, Confidence Insurance Building
+				Akure  Ondo  2341
+				NG
+
+70-B3-D5   (hex)		Tempris GmbH
+539000-539FFF     (base 16)		Tempris GmbH
+				Industriestr. 7
+				Holzkirchen    83607
+				DE
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+057000-057FFF     (base 16)		RCH ITALIA SPA 
+				VIA CENDON 39
+				SILEA   TREVISO   31057
+				IT
+
+70-B3-D5   (hex)		ELA INNOVATION
+C76000-C76FFF     (base 16)		ELA INNOVATION
+				297 RUE MAURICE BEJART
+				MONTPELLIER    34080
+				FR
+
+70-B3-D5   (hex)		AB PRECISION (POOLE) LTD
+064000-064FFF     (base 16)		AB PRECISION (POOLE) LTD
+				1 FLEETS LANE
+				POOLE  DORSET  BH15 3BZ
+				GB
+
+70-B3-D5   (hex)		Schneider Electric Motion USA
+ACC000-ACCFFF     (base 16)		Schneider Electric Motion USA
+				370 N. Main St.
+				Marlborough  CT  06447
+				US
+
+70-B3-D5   (hex)		NIDEC LEROY-SOMER
+780000-780FFF     (base 16)		NIDEC LEROY-SOMER
+				Boulevard Marcellin Leroy zone industriel angoulême
+				Angoulême    16800
+				FR
+
+70-B3-D5   (hex)		ARROW (CHINA) ELECTRONICS TRADING CO., LTD.
+6AB000-6ABFFF     (base 16)		ARROW (CHINA) ELECTRONICS TRADING CO., LTD.
+				Floor 28, taikang financial building, building 1, yard 38, dongsanhuan north road, chaoyang district, Beijing
+				beijing  beijing  100033
+				CN
+
+70-B3-D5   (hex)		Shenzhen Chanslink Network Technology Co., Ltd
+49D000-49DFFF     (base 16)		Shenzhen Chanslink Network Technology Co., Ltd
+				Room 432, Block A,CMEC Plaza, Buji Road 1028
+				Shenzhen  Guangdong  518001
+				CN
+
+70-B3-D5   (hex)		Aloxy
+7BB000-7BBFFF     (base 16)		Aloxy
+				Sint-Pietersvliet 7
+				Antwerp    2000
+				BE
+
+70-B3-D5   (hex)		Umweltanalytik Holbach GmbH
+DD6000-DD6FFF     (base 16)		Umweltanalytik Holbach GmbH
+				Sperberweg 3
+				Wadern    66687
+				DE
+
+70-B3-D5   (hex)		Azmoon Keifiat
+41D000-41DFFF     (base 16)		Azmoon Keifiat
+				#3,19th Alley,Gandi Ave,Tehran
+				Tehran  Tehran  1517865314
+				IR
+
+70-B3-D5   (hex)		Becton Dickinson
+6B9000-6B9FFF     (base 16)		Becton Dickinson
+				7 Loveton Circle
+				Sparks  MD  21152
+				US
+
+70-B3-D5   (hex)		Changzhou Rapid Information Technology Co,Ltd
+E80000-E80FFF     (base 16)		Changzhou Rapid Information Technology Co,Ltd
+				Sanjing World Tech Park,3rd Floor,Bld NO3 NO.18huashan Road 
+				Changzhou  Jiangsu  213001
+				CN
+
+70-B3-D5   (hex)		SC3 Automation
+EE9000-EE9FFF     (base 16)		SC3 Automation
+				790 Principale Ouest
+				Magog  Quebec  J1X2B3
+				CA
+
+70-B3-D5   (hex)		Navaero Avionics AB
+045000-045FFF     (base 16)		Navaero Avionics AB
+				Forradsgatan 4
+				Sundsvall  Vasternorrland  85633
+				SE
+
+70-B3-D5   (hex)		ResIOT UBLSOFTWARE SRL
+DD4000-DD4FFF     (base 16)		ResIOT UBLSOFTWARE SRL
+				Ripa di Porta Ticinese, 39
+				Milano  Mi  20143
+				IT
+
+70-B3-D5   (hex)		AZ-TECHNOLOGY SDN BHD
+C69000-C69FFF     (base 16)		AZ-TECHNOLOGY SDN BHD
+				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
+				PETALING JAYA  SELANGOR  47301
+				MY
+
+70-B3-D5   (hex)		GTI Technologies Inc
+B5A000-B5AFFF     (base 16)		GTI Technologies Inc
+				12707 High Bluff Dr, ste 200
+				San Diego  CA  92130
+				US
+
+70-B3-D5   (hex)		JSC «SATIS-TL-94»
+CB9000-CB9FFF     (base 16)		JSC «SATIS-TL-94»
+				1, bld.2, Timiryazevskaya str. 
+				Moscow    127422
+				RU
+
+70-B3-D5   (hex)		Dynics
+B5E000-B5EFFF     (base 16)		Dynics
+				620 Technology Drive
+				Ann Arbor  MI  48108
+				US
+
+70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
+F3A000-F3AFFF     (base 16)		OOO Research and Production Center Computer Technologies
+				Komsomolsky avenue, 90-17
+				Perm  Perm Region  614010
+				RU
+
+70-B3-D5   (hex)		Icon Industrial Engineering
+662000-662FFF     (base 16)		Icon Industrial Engineering
+				Radio street, 24/2, office 101
+				Moscow  Moscow  105005
+				RU
+
+70-B3-D5   (hex)		Contec Americas Inc.
+392000-392FFF     (base 16)		Contec Americas Inc.
+				3991 Sarno Rd
+				Melbourne  FL  32934
+				US
+
+70-B3-D5   (hex)		Contec Americas Inc.
+D10000-D10FFF     (base 16)		Contec Americas Inc.
+				3991 Sarno Rd
+				Melbourne  FL  32934
+				US
+
+70-B3-D5   (hex)		Contec Americas Inc.
+8B7000-8B7FFF     (base 16)		Contec Americas Inc.
+				3991 Sarno Rd
+				Melbourne  FL  32934
+				US
+
+70-B3-D5   (hex)		NCE Network Consulting Engineering srl
+834000-834FFF     (base 16)		NCE Network Consulting Engineering srl
+				via Novaluce 42
+				Tremestieri Etneo  Catania  95030
+				IT
+
+70-B3-D5   (hex)		Mitsubishi Electric India Pvt. Ltd.
+797000-797FFF     (base 16)		Mitsubishi Electric India Pvt. Ltd.
+				EL3, J BLOCK, M.I.D.C. Bhosari
+				PUNE  Maharastra  411027
+				IN
+
+70-B3-D5   (hex)		Shanghai Brellet Telecommunication Technology Co., Ltd.
+9AF000-9AFFFF     (base 16)		Shanghai Brellet Telecommunication Technology Co., Ltd.
+				Building 2, No.5555, Shenzhuan Road, Songjiang District
+				Shanghai    201619
+				CN
+
+70-B3-D5   (hex)		e-Matix Corporation
+89D000-89DFFF     (base 16)		e-Matix Corporation
+				5812 Machine Drive
+				Huntington Beach  CA  92649
+				US
+
+70-B3-D5   (hex)		Guangdong Centnet Technology Co.,Ltd
+06A000-06AFFF     (base 16)		Guangdong Centnet Technology Co.,Ltd
+				Room403/410, 2nd Building, No 4 South of Industrial Rd, Songshan Lake industrial Park, 
+				Dongguan   Guangdong  523808
+				CN
+
+00-1B-C5   (hex)		Evondos Oy
+0AB000-0ABFFF     (base 16)		Evondos Oy
+				Salorankatu 5-7
+				Salo    24240
+				FI
+
+70-B3-D5   (hex)		Yuksek Kapasite Radyolink Sistemleri San. ve Tic. A.S.
+B9F000-B9FFFF     (base 16)		Yuksek Kapasite Radyolink Sistemleri San. ve Tic. A.S.
+				Ikitelli Osb Mah., TU Ikitelli Teknopark Sok. 1/Z18
+				Istanbul  Basaksehir  34490
+				TR
+
+70-B3-D5   (hex)		Talleres de Escoriaza SA
+26A000-26AFFF     (base 16)		Talleres de Escoriaza SA
+				Barrio Ventas, 35
+				Irun  Gipuzkoa  20305
+				ES
+
+70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
+843000-843FFF     (base 16)		OOO Research and Production Center Computer Technologies
+				Komsomolsky avenue, 90-17
+				Perm  Perm Region  614010
+				RU
+
+70-B3-D5   (hex)		Mettler Toledo
+BB2000-BB2FFF     (base 16)		Mettler Toledo
+				1571 Northpointe Parkway
+				Lutz  FL  33558
+				US
+
+70-B3-D5   (hex)		Mettler Toledo
+27E000-27EFFF     (base 16)		Mettler Toledo
+				1571 Northpointe Parkway
+				Lutz  FL  33558
+				US
+
+70-B3-D5   (hex)		S.E.I. CO.,LTD.
+12D000-12DFFF     (base 16)		S.E.I. CO.,LTD.
+				59 Nirayama Tada
+				Izunokuni  Shizuoka  4102133
+				JP
+
+70-B3-D5   (hex)		Code Blue Corporation
+74B000-74BFFF     (base 16)		Code Blue Corporation
+				259 Hedcor St.
+				Holland  MI  49423
+				US
+
+70-B3-D5   (hex)		Hangzhou Weimu Technology Co,.Ltd.
+6AE000-6AEFFF     (base 16)		Hangzhou Weimu Technology Co,.Ltd.
+				3 / f, building 1, yongle village, cangqian street, yuhang district
+				Hangzhou  Zhejiang  310000
+				CN
+
+70-B3-D5   (hex)		Semacon Business Machines
+5DF000-5DFFFF     (base 16)		Semacon Business Machines
+				7430 Trade Street
+				San Diego  CA  92121
+				US
+
+70-B3-D5   (hex)		CT Company
+50D000-50DFFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+70-B3-D5   (hex)		Pure Air Filtration
+0E7000-0E7FFF     (base 16)		Pure Air Filtration
+				6050 peachtree Pkwy
+				Norcross  GA  30092
+				US
+
+70-B3-D5   (hex)		DAVE SRL
+CAF000-CAFFFF     (base 16)		DAVE SRL
+				VIA TALPONEDO 29/A
+				PORCIA  PORDENONE  330850
+				IT
+
+70-B3-D5   (hex)		HighTechSystem Co.,Ltd.
+F53000-F53FFF     (base 16)		HighTechSystem Co.,Ltd.
+				1-16-7 Matsunami
+				 Yamagata-shi  Yamagata  990-0023
+				JP
+
+70-B3-D5   (hex)		Trident Systems Inc
+951000-951FFF     (base 16)		Trident Systems Inc
+				10201 Fairfax Blvd  Suite 300
+				Fairfax  VA  22030
+				US
+
+70-B3-D5   (hex)		Hangzhou landesker digital technology co. LTD
+50C000-50CFFF     (base 16)		Hangzhou landesker digital technology co. LTD
+				Gudun road Youpanshidai Center
+				Hangzhou  Zhejiang  310030
+				CN
+
+70-B3-D5   (hex)		Aug. Winkhaus GmbH & Co. KG
+0C3000-0C3FFF     (base 16)		Aug. Winkhaus GmbH & Co. KG
+				August-Winkhaus-Straße 31
+				Telgte  NRW  48291
+				DE
+
+70-B3-D5   (hex)		SMART IN OVATION GmbH
+A3D000-A3DFFF     (base 16)		SMART IN OVATION GmbH
+				Meitnerstraße 10
+				Stuttgart    70563
+				DE
+
+70-B3-D5   (hex)		PTS Technologies Pte Ltd
+CA5000-CA5FFF     (base 16)		PTS Technologies Pte Ltd
+				BLk 2, Kaki Bukit Ave 1 , #04-05
+				Singapore    417938
+				SG
+
+70-B3-D5   (hex)		HGL Dynamics Ltd
+021000-021FFF     (base 16)		HGL Dynamics Ltd
+				Hamilton Barr House, Bridge Mews
+				Godalming  Surrey  GU7 1HZ
+				GB
+
+70-B3-D5   (hex)		Cognosos, Inc.
+BE0000-BE0FFF     (base 16)		Cognosos, Inc.
+				1100 Spring St. NW, Suite 300A
+				Atlanta  GA  30309
+				US
+
+70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
+0F9000-0F9FFF     (base 16)		OOO Research and Production Center Computer Technologies
+				Komsomolsky avenue, 90-17
+				Perm  Perm Region  614010
+				RU
+
+70-B3-D5   (hex)		Nordmann International GmbH
+9A4000-9A4FFF     (base 16)		Nordmann International GmbH
+				Huobstrasse 10
+				Pfäffikon SZ    8808
+				CH
+
+70-B3-D5   (hex)		Orlaco Products B.V.
+074000-074FFF     (base 16)		Orlaco Products B.V.
+				Albert Plesmanstraat 42
+				Barneveld    3772MN
+				NL
+
+70-B3-D5   (hex)		ACQUA-SYSTEMS srls
+8F4000-8F4FFF     (base 16)		ACQUA-SYSTEMS srls
+				Via Italia 121
+				Marnate  Varese  21050
+				IT
+
+70-B3-D5   (hex)		ADMiTAS CCTV Taiwan Co. Ltd
+0CC000-0CCFFF     (base 16)		ADMiTAS CCTV Taiwan Co. Ltd
+				12F-3, No. 77 Xinpu 6th Street, Taoyuan District
+				Taoyuan      330
+				TW
+
+70-B3-D5   (hex)		Zhuhai Lonl electric Co.,Ltd.
+EA9000-EA9FFF     (base 16)		Zhuhai Lonl electric Co.,Ltd.
+				2nd floor, building B3, nanfang software park, xiangzhou district
+				Zhuhai  Guangdong   519000
+				CN
+
+70-B3-D5   (hex)		PolyTech A/S
+F4C000-F4CFFF     (base 16)		PolyTech A/S
+				HI Park 445
+				Herning  Herning  7400
+				DK
+
+70-B3-D5   (hex)		Shanghai Tiancheng Communication Technology Corporation
+1C3000-1C3FFF     (base 16)		Shanghai Tiancheng Communication Technology Corporation
+				No.618,Guangxing Rd.,Songjiang 
+				shanghai    200090
+				CN
+
+70-B3-D5   (hex)		T&M Media Pty Ltd
+B41000-B41FFF     (base 16)		T&M Media Pty Ltd
+				6, 476 Gardeners Road
+				Alexandria  NSW  2015
+				AU
+
+70-B3-D5   (hex)		SAMBO HITECH
+282000-282FFF     (base 16)		SAMBO HITECH
+				469,Seokjung-ro,Namdong-Gu
+				Incheon    21501
+				KR
+
+70-B3-D5   (hex)		M.A.C. Solutions (UK) Ltd
+F9F000-F9FFFF     (base 16)		M.A.C. Solutions (UK) Ltd
+				Units 6-7 Kingfisher Business Park, Arthur Street
+				Redditch  Worcestershire  B98 8LG
+				GB
+
+70-B3-D5   (hex)		Shenzhen CAMERAY ELECTRONIC CO., LTD
+1E2000-1E2FFF     (base 16)		Shenzhen CAMERAY ELECTRONIC CO., LTD
+				4-5FL, Building 1, Guanghui Science, and Technology Park; Minqing Road, Longhua Town
+				shenzhen  GD  518109
+				CN
+
+70-B3-D5   (hex)		Vulcan Wireless Inc.
+E4D000-E4DFFF     (base 16)		Vulcan Wireless Inc.
+				2218 Faraday Ave Suite 110
+				Carlsbad  CA  92008
+				US
+
+70-B3-D5   (hex)		ERA TOYS LIMITED
+193000-193FFF     (base 16)		ERA TOYS LIMITED
+				Room 505, 5th Floor, Beverley Commercial Centre, 87-105 Chatham Road South
+				Tsim Sha Tsui  Kowloon  0000
+				HK
+
+70-B3-D5   (hex)		Scorpion Precision Industry (HK)CO. Ltd.
+02B000-02BFFF     (base 16)		Scorpion Precision Industry (HK)CO. Ltd.
+				16th Floor, Excelsior Industrial Building,68-76 Sha Tsui Road,
+				Tsuen Wan  New Territories  999077
+				HK
+
+70-B3-D5   (hex)		Cryptotronix LLC
+0DB000-0DBFFF     (base 16)		Cryptotronix LLC
+				P.O. Box 273029
+				Fort Collins  CO  80525
+				US
+
+70-B3-D5   (hex)		MIVO Technology AB
+1D5000-1D5FFF     (base 16)		MIVO Technology AB
+				Hornsbergsvägen 28
+				Stockholm    11215
+				SE
+
+70-B3-D5   (hex)		A&T Corporation
+32E000-32EFFF     (base 16)		A&T Corporation
+				2023-1
+				Endo, Fujisawa, Kanagawa    252-0816
+				JP
+
+70-B3-D5   (hex)		TOMEI TSUSHIN KOGYO CO,.LTD
+FB1000-FB1FFF     (base 16)		TOMEI TSUSHIN KOGYO CO,.LTD
+				100-3, Amaike Kodacho
+				Inazawa Shi  Aichi ken  4928274
+				JP
+
+70-B3-D5   (hex)		DogWatch Inc
+1E7000-1E7FFF     (base 16)		DogWatch Inc
+				10 Michigan Drive
+				Natick    01760
+				US
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+C09000-C09FFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		Copper Labs, Inc.
+F69000-F69FFF     (base 16)		Copper Labs, Inc.
+				3015 Sterling Circle #200
+				Boulder  CO  80301
+				US
+
+70-B3-D5   (hex)		SHENZHEN HUINENGYUAN Technology Co., Ltd
+A83000-A83FFF     (base 16)		SHENZHEN HUINENGYUAN Technology Co., Ltd
+				Room 206, 3 Building, Hongwanchuangke Center, Gushu, Xixiang, Baoan District
+				Shenzhen  Guangdong  518126
+				CN
+
+70-B3-D5   (hex)		Vars Technology 
+C94000-C94FFF     (base 16)		Vars Technology 
+				Squires gate industrial estate Unit 14
+				Blackpool  lancashire   FY4 3RN
+				GB
+
+70-B3-D5   (hex)		Burk Technology
+641000-641FFF     (base 16)		Burk Technology
+				7 Beaver Brook road
+				Littleton  MA  01460
+				US
+
+70-B3-D5   (hex)		Inventeq B.V.
+529000-529FFF     (base 16)		Inventeq B.V.
+				Ravenlaan 27
+				Blaricum    1261WT
+				NL
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+B75000-B75FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		ITsynergy Ltd
+D2A000-D2AFFF     (base 16)		ITsynergy Ltd
+				9 Bonhill Street
+				London    EC2A 4DJ
+				GB
+
+70-B3-D5   (hex)		Vaunix Technology Corporation
+EE6000-EE6FFF     (base 16)		Vaunix Technology Corporation
+				7 New Pasture Rd
+				Newburyport  MA  01950
+				US
+
+70-B3-D5   (hex)		chargeBIG
+869000-869FFF     (base 16)		chargeBIG
+				Pragstraße 26-46
+				Stuttgart    70376
+				DE
+
+70-B3-D5   (hex)		Portrait Displays, Inc.
+D77000-D77FFF     (base 16)		Portrait Displays, Inc.
+				6663 OWENS DR
+				PLEASANTON  CA  94588
+				US
+
+70-B3-D5   (hex)		Sprintshield d.o.o.
+B03000-B03FFF     (base 16)		Sprintshield d.o.o.
+				Marina Getaldi?a 3
+				Velika Gorica    10410
+				HR
+
+70-B3-D5   (hex)		Tricom Research Inc.
+601000-601FFF     (base 16)		Tricom Research Inc.
+				17791 Sky Park Circle Suite GHJ
+				Irvine  CA  92614
+				US
+
+70-B3-D5   (hex)		Mictrotrac Retsch GmbH
+F09000-F09FFF     (base 16)		Mictrotrac Retsch GmbH
+				Retsch-Allee 1-5
+				Haan  NRW  42781
+				DE
+
+70-B3-D5   (hex)		KeyProd
+473000-473FFF     (base 16)		KeyProd
+				66 avenue des Champs Elysées
+				Paris    77008
+				FR
+
+70-B3-D5   (hex)		WARECUBE,INC
+AD3000-AD3FFF     (base 16)		WARECUBE,INC
+				#A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu
+				Suwon-si    16648
+				KR
+
+70-B3-D5   (hex)		myUpTech AB
+FC3000-FC3FFF     (base 16)		myUpTech AB
+				Box 14
+				Markaryd    28532
+				SE
+
+70-B3-D5   (hex)		Scharco Elektronik GmbH
+C72000-C72FFF     (base 16)		Scharco Elektronik GmbH
+				Tilsiter Strasse 8
+				Wuppertal  NRW  42277
+				DE
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+6D7000-6D7FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		EarTex
+E01000-E01FFF     (base 16)		EarTex
+				41 Corsham Street
+				London  England  N1 6DR
+				GB
+
+70-B3-D5   (hex)		AVL DiTEST GmbH
+78D000-78DFFF     (base 16)		AVL DiTEST GmbH
+				Alte Poststrasse 156
+				Graz    8020
+				AT
+
+70-B3-D5   (hex)		TextSpeak Corporation
+F0E000-F0EFFF     (base 16)		TextSpeak Corporation
+				55 Greensfarm RD 2nd Flr 200-69
+				Westport  CT  06880
+				US
+
+70-B3-D5   (hex)		Techimp - Altanova group Srl
+6DB000-6DBFFF     (base 16)		Techimp - Altanova group Srl
+				via Toscana 11/C
+				Zola Predosa  Bologna  40069
+				IT
+
+70-B3-D5   (hex)		HongSeok Ltd.
+30A000-30AFFF     (base 16)		HongSeok Ltd.
+				166, Osan-ro, Osan-myeon
+				Iksan-si  Jeollabuk-do  54670
+				KR
+
+70-B3-D5   (hex)		WAYNE ANALYTICS LLC
+301000-301FFF     (base 16)		WAYNE ANALYTICS LLC
+				100 Rialto Place, Suite 721
+				MELBOURNE  FL  32901
+				US
+
+70-B3-D5   (hex)		GS Elektromedizinsiche Geräte G. Stemple GmbH
+3D3000-3D3FFF     (base 16)		GS Elektromedizinsiche Geräte G. Stemple GmbH
+				Hauswiesenstr. 26
+				Kaufering  Bayern  86916
+				DE
+
+70-B3-D5   (hex)		Hunan Lianzhong Technology Co.,Ltd.
+F4E000-F4EFFF     (base 16)		Hunan Lianzhong Technology Co.,Ltd.
+				5th Floor, Chuangye Building, Economic and Technological Development Zone,
+				Loudi  Hunan   417000
+				CN
+
+70-B3-D5   (hex)		Diretta
+C90000-C90FFF     (base 16)		Diretta
+				3-4-9 HigashiKomagata Sumida-ku
+				Tokyo    1300005
+				JP
+
+70-B3-D5   (hex)		RoomMate AS
+E1C000-E1CFFF     (base 16)		RoomMate AS
+				Hamangskogen 60
+				Sandvika  -  1338
+				NO
+
+70-B3-D5   (hex)		DARBS Inc.
+63F000-63FFFF     (base 16)		DARBS Inc.
+				#153, #154, 65 Techno 3-ro
+				Daejeon  Yuseong-gu  34016
+				KR
+
+70-B3-D5   (hex)		KODENSHI CORP.
+DBA000-DBAFFF     (base 16)		KODENSHI CORP.
+				161,Jyuichi,Makishima
+				UJI  KYOTO  6110041
+				JP
+
+70-B3-D5   (hex)		Sequent AG
+291000-291FFF     (base 16)		Sequent AG
+				Eptingerstrasse 3
+				Basel    4052
+				CH
+
+70-B3-D5   (hex)		Profusion Limited
+29A000-29AFFF     (base 16)		Profusion Limited
+				Aviation Way
+				Southend on Sea  Essex  SS2 6UN
+				GB
+
+70-B3-D5   (hex)		ID Quantique SA
+657000-657FFF     (base 16)		ID Quantique SA
+				3 chemin de la marbrerie
+				Carouge    1227
+				CH
+
+70-B3-D5   (hex)		CDS Institute of Management Strategy, Inc.
+3A3000-3A3FFF     (base 16)		CDS Institute of Management Strategy, Inc.
+				Fukuyoshi-cho Billding 7F, Roppongi 2-2-6
+				MINATO-KU  TOKYO  1060032
+				JP
+
+70-B3-D5   (hex)		Zeus Control Systems Ltd
+E73000-E73FFF     (base 16)		Zeus Control Systems Ltd
+				1-4 Alexander House Station Road
+				Nuneaton    CV13 0PE
+				GB
+
+70-B3-D5   (hex)		Beijing Lihong Create Co., Ltd.
+ED3000-ED3FFF     (base 16)		Beijing Lihong Create Co., Ltd.
+				Changping, Zhenxinglu. 46
+				Beijing    102299
+				CN
+
+70-B3-D5   (hex)		Integra Metering SAS
+B6F000-B6FFFF     (base 16)		Integra Metering SAS
+				12 rue Font Grasse
+				Blagnac    31700
+				FR
+
+70-B3-D5   (hex)		AXING AG
+263000-263FFF     (base 16)		AXING AG
+				Gewerbehaus Moskau
+				Ramsen    8262
+				CH
+
+70-B3-D5   (hex)		K&A Electronics Inc.
+9E4000-9E4FFF     (base 16)		K&A Electronics Inc.
+				2609 Pinelawn dr.
+				La Crescenta  CA  91214
+				US
+
+70-B3-D5   (hex)		Paramount Bed Holdings Co., Ltd.
+8F1000-8F1FFF     (base 16)		Paramount Bed Holdings Co., Ltd.
+				2-14-5. Higashisuna
+				 Koto-ku  Tokyo  136-8671
+				JP
+
+70-B3-D5   (hex)		Schneider Electric Motion USA
+33D000-33DFFF     (base 16)		Schneider Electric Motion USA
+				370 N. Main St.
+				Marlborough  CT  06447
+				US
+
+70-B3-D5   (hex)		Wired Broadcast Ltd
+177000-177FFF     (base 16)		Wired Broadcast Ltd
+				 Berol House, 25 Ashley Road
+				LONDON  County (optional)  N17 9LJ
+				GB
+
+70-B3-D5   (hex)		Indutherm Giesstechnologie GmbH
+8DE000-8DEFFF     (base 16)		Indutherm Giesstechnologie GmbH
+				Brettener Straße 32
+				Walzbachtal  Baden-Württemberg  75045
+				DE
+
+70-B3-D5   (hex)		MAHLE ELECTRONICS, SLU
+8BD000-8BDFFF     (base 16)		MAHLE ELECTRONICS, SLU
+				CTRA.MADRID-VALENCIA,KM.196
+				MOTILLA DEL PALANCAR  CUENCA  16200
+				ES
+
+70-B3-D5   (hex)		Intermobility
+6AA000-6AAFFF     (base 16)		Intermobility
+				Gabelle 18a
+				Bienne  berne  2503
+				CH
+
+70-B3-D5   (hex)		BRS Sistemas Eletrônicos
+D97000-D97FFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491/204
+				Porto Alegre - RS  (Non U.S.)  91380-000
+				BR
+
+70-B3-D5   (hex)		2M Technology
+F7D000-F7DFFF     (base 16)		2M Technology
+				802 Greenview Drive 
+				Grand Prairie  TX  75050
+				US
+
+70-B3-D5   (hex)		DogWatch Inc
+567000-567FFF     (base 16)		DogWatch Inc
+				10 Michigan Drive
+				Natick  MA  01760
+				US
+
+70-B3-D5   (hex)		Ideas srl
+B63000-B63FFF     (base 16)		Ideas srl
+				Via dei Brughi, 21
+				Gessate  Milan  20060
+				IT
+
+70-B3-D5   (hex)		Invert Robotics Ltd.
+FC7000-FC7FFF     (base 16)		Invert Robotics Ltd.
+				Unit A, 235 Annex Road
+				Christchurch    8024
+				NZ
+
+70-B3-D5   (hex)		MPM Micro Präzision Marx GmbH
+F60000-F60FFF     (base 16)		MPM Micro Präzision Marx GmbH
+				Neuenweiherstraße 19
+				Erlangen  Deutschland  91056
+				DE
+
+70-B3-D5   (hex)		DOLBY LABORATORIES, INC.
+73A000-73AFFF     (base 16)		DOLBY LABORATORIES, INC.
+				100 Potrero Avenue
+				San Francisco  CA  94103-4938
+				US
+
+70-B3-D5   (hex)		Underground Systems, Inc.
+424000-424FFF     (base 16)		Underground Systems, Inc.
+				3A Trowbridge Drive
+				Bethel  CT  06801
+				US
+
+70-B3-D5   (hex)		AERIAL CAMERA SYSTEMS Ltd
+FC4000-FC4FFF     (base 16)		AERIAL CAMERA SYSTEMS Ltd
+				3 The Merlin Centre, Lancaster Road,
+				HIGH WYCOMBE    HP12 3QL
+				GB
+
+70-B3-D5   (hex)		TUALCOM ELEKTRONIK A.S.
+4A3000-4A3FFF     (base 16)		TUALCOM ELEKTRONIK A.S.
+				Mustafa Kemal mah.
+				ANKARA    06530
+				TR
+
+70-B3-D5   (hex)		Shanghai Jupper Technology Co.Ltd
+157000-157FFF     (base 16)		Shanghai Jupper Technology Co.Ltd
+				Room511,building D10, Lane 3188, Xiupu road, Pudong New District
+				Shanghai    201315
+				CN
+
+70-B3-D5   (hex)		Kron Medidores
+C1E000-C1EFFF     (base 16)		Kron Medidores
+				Rua Alexandre de Gusmão, 278
+				São Paulo  São Paulo  04760-020
+				BR
+
+70-B3-D5   (hex)		IK MULTIMEDIA PRODUCTION SRL
+2FB000-2FBFFF     (base 16)		IK MULTIMEDIA PRODUCTION SRL
+				Via dell'Industria 46
+				Modena  Italy  41122
+				IT
+
+70-B3-D5   (hex)		Hensoldt Sensors GmbH
+2D3000-2D3FFF     (base 16)		Hensoldt Sensors GmbH
+				Woerthstrasse 85
+				Ulm  Baden-Wuerttemberg  89081
+				DE
+
+70-B3-D5   (hex)		Autonomic Controls, Inc.
+BC7000-BC7FFF     (base 16)		Autonomic Controls, Inc.
+				28 Kaysal Ct
+				ARMONK  NY  10504
+				US
+
+70-B3-D5   (hex)		CYG CONTRON CO.LTD
+A8C000-A8CFFF     (base 16)		CYG CONTRON CO.LTD
+				BUILDING A.NO.11 OF THE 6TH TECHNOGY ROAD,PHASE III OF TECNOLOGY INNOVATION COAST,ZHUHAI NATIONAL HI-TECH INDUSTRIES DEVELOPMENT ZONE
+				Zhuhai    519000
+				CN
+
+70-B3-D5   (hex)		Thermo Fisher Scientific Inc.
+D96000-D96FFF     (base 16)		Thermo Fisher Scientific Inc.
+				Thermo Fisher Scientific Inc.
+				Shanghai  Shanghai  201206
+				CN
+
+70-B3-D5   (hex)		S-Rain Control A/S
+B68000-B68FFF     (base 16)		S-Rain Control A/S
+				Oldenvej 6
+				Kvistgård  Copenhagen  DK-3490
+				DK
+
+70-B3-D5   (hex)		LIGPT
+D14000-D14FFF     (base 16)		LIGPT
+				167, Jukdong-ro
+				Daejeon   Yuseong-gu  34127
+				KR
+
+70-B3-D5   (hex)		Royal Engineering Consultancy Private Limited
+34F000-34FFFF     (base 16)		Royal Engineering Consultancy Private Limited
+				203 2nd Floor Jyoti Building 66 Nehru Place
+				New Delhi    110019
+				IN
+
+70-B3-D5   (hex)		Melissa Climate Jsc
+2DD000-2DDFFF     (base 16)		Melissa Climate Jsc
+				Gen. Gurko 4 Street
+				Sofia    1000
+				BG
+
+70-B3-D5   (hex)		Innoknight
+AE8000-AE8FFF     (base 16)		Innoknight
+				Rm. 1A2-A01, No. 1, Lixing 1st Rd., East Dist., Hsinchu City 300, Taiwan (R.O.C.)
+				Hsinchu    300
+				TW
+
+70-B3-D5   (hex)		NUBURU Inc.
+DC7000-DC7FFF     (base 16)		NUBURU Inc.
+				7442 S. Tucson Way
+				Centennial  CO  80112
+				US
+
+70-B3-D5   (hex)		Vigorcloud Co., Ltd.
+A3E000-A3EFFF     (base 16)		Vigorcloud Co., Ltd.
+				3F., No. 11, Xinpo 1st St., Xindian Dist.,
+				New Taipei City    231
+				TW
+
+70-B3-D5   (hex)		Tornado Modular Systems
+40C000-40CFFF     (base 16)		Tornado Modular Systems
+				Inzhenernaya st. 4a
+				Novosibirsk  Novosibirsk  630128
+				RU
+
+70-B3-D5   (hex)		SECUREAN CO.,Ltd
+10B000-10BFFF     (base 16)		SECUREAN CO.,Ltd
+				danny@securean.com
+				Incheon  2nd floor, 16 Giljuro, Seogu  22793
+				KR
+
+70-B3-D5   (hex)		Projects Unlimited Inc.
+7C5000-7C5FFF     (base 16)		Projects Unlimited Inc.
+				6300 Sand Lake Road
+				Dayton  OH  45414
+				US
+
+70-B3-D5   (hex)		RFHIC
+25E000-25EFFF     (base 16)		RFHIC
+				41-14, Burim-ro 170beon-gil
+				Dongan-gu, Anyang-si  Gyeonggi-do  14055
+				KR
+
+70-B3-D5   (hex)		Hilo
+B86000-B86FFF     (base 16)		Hilo
+				4-6 Kiprou str
+				Tavros  Athens  17778
+				GR
+
+70-B3-D5   (hex)		Federated Wireless, Inc. 
+E22000-E22FFF     (base 16)		Federated Wireless, Inc. 
+				4301 North Fairfax Drive, Suite 310 
+				Arlington   VA  22203
+				US
+
+70-B3-D5   (hex)		Nocix, LLC
+BE2000-BE2FFF     (base 16)		Nocix, LLC
+				201 East 16th Ave
+				North Kansas City  MO  64116
+				US
+
+70-B3-D5   (hex)		ADDE
+79C000-79CFFF     (base 16)		ADDE
+				21 impasse frédéric faÿs
+				Villeurbanne    69100
+				FR
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+F6B000-F6BFFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Servotronix Motion Control
+B0E000-B0EFFF     (base 16)		Servotronix Motion Control
+				21C Yagia Kapayim st.
+				Petach Tikva     49130
+				IL
+
+70-B3-D5   (hex)		Matrix Telematics Limited
+B83000-B83FFF     (base 16)		Matrix Telematics Limited
+				Merlin Court, Atlantic Street
+				Altrincham  Cheshire  WA14 5NL
+				GB
+
+70-B3-D5   (hex)		STACKFORCE GmbH
+E87000-E87FFF     (base 16)		STACKFORCE GmbH
+				Biengener Str. 3
+				Eschbach    79427
+				DE
+
+70-B3-D5   (hex)		Qlinx Technologies
+EC9000-EC9FFF     (base 16)		Qlinx Technologies
+				1717 N Street NW Ste 1
+				Washington  DC  20036
+				US
+
+70-B3-D5   (hex)		Pantherun Technologies Pvt Ltd
+B14000-B14FFF     (base 16)		Pantherun Technologies Pvt Ltd
+				311 6th main road Hal 2nd stage
+				Bangalore  Karnataka  560038
+				IN
+
+70-B3-D5   (hex)		EASTERN SCIENCE & TECHNOLOGY CO., LTD
+2DF000-2DFFFF     (base 16)		EASTERN SCIENCE & TECHNOLOGY CO., LTD
+				6F.,No.963, Zhongzheng Rd, Zhonghe Dist.
+				New Taipei City    235
+				TW
+
+70-B3-D5   (hex)		Imenco Ltd
+3D1000-3D1FFF     (base 16)		Imenco Ltd
+				Campus 1 Innovation Park, Balgownie Road
+				Bridge of Don  Aberdeen  AB22 8GT
+				GB
+
+70-B3-D5   (hex)		Contec Americas Inc.
+883000-883FFF     (base 16)		Contec Americas Inc.
+				3991 Sarno Rd
+				Melbourne  FL  32934
+				US
+
+70-B3-D5   (hex)		Hon Hai Precision IND.CO.,LTD
+B45000-B45FFF     (base 16)		Hon Hai Precision IND.CO.,LTD
+				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
+				TAIPEI  TAIWAN  33859
+				CN
+
+70-B3-D5   (hex)		International Super Computer Co., Ltd.
+806000-806FFF     (base 16)		International Super Computer Co., Ltd.
+				807-3, 8 / F, block F, No. 9, Shangdi Third Street, Haidian District
+				Beijing    100085
+				CN
+
+70-B3-D5   (hex)		Rivercity Innovations Ltd.
+156000-156FFF     (base 16)		Rivercity Innovations Ltd.
+				116 Research Drive, Suit 217
+				Saskatoon  Saskatchewan  S7N 3R3
+				CA
+
+70-B3-D5   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
+D50000-D50FFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
+				10545 Hardin Valley Rd
+				Knoxville  TN  37932
+				US
+
+70-B3-D5   (hex)		myenergi Ltd
+3A6000-3A6FFF     (base 16)		myenergi Ltd
+				Church View Business Centre, Binbrook
+				Market Rasen  Lincolnshire  LN8 6BY
+				GB
+
+70-B3-D5   (hex)		eumig industrie-TV GmbH.
+C46000-C46FFF     (base 16)		eumig industrie-TV GmbH.
+				Gewerbeparkstrasse 9
+				Anif  Salzburg  5081
+				AT
+
+70-B3-D5   (hex)		IWS Global Pty Ltd
+8F9000-8F9FFF     (base 16)		IWS Global Pty Ltd
+				29 Oxleigh Dr
+				Perth  Western Australia  6090
+				AU
+
+70-B3-D5   (hex)		SERTEC SRL
+621000-621FFF     (base 16)		SERTEC SRL
+				VIA LOMBARDIA, 7/8
+				BUSSOLENGO   VERONA  37012
+				IT
+
+70-B3-D5   (hex)		QDevil
+921000-921FFF     (base 16)		QDevil
+				Fruebjergvej 3
+				København Ø    2100
+				DK
+
+70-B3-D5   (hex)		Macromatic Industrial Controls, Inc.
+118000-118FFF     (base 16)		Macromatic Industrial Controls, Inc.
+				W134N5345 Campbell Drive
+				Menomonee Falls  WI  53051
+				US
+
+70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
+4C3000-4C3FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+70-B3-D5   (hex)		YDK Technologies Co.,Ltd
+7F0000-7F0FFF     (base 16)		YDK Technologies Co.,Ltd
+				Minami Shinjuku Hoshino Bldg.  5-23-13 Sendagaya
+				Shibuya-ku  Tokyo  151-0051
+				JP
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+A1B000-A1BFFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+BEB000-BEBFFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		EkspertStroyProekt LLC
+DE9000-DE9FFF     (base 16)		EkspertStroyProekt LLC
+				office 400, str.61, d.2/4, Luzhnetskaya nab.
+				Moscow  Moscow  119270
+				RU
+
+70-B3-D5   (hex)		GSP Sprachtechnologie GmbH
+93C000-93CFFF     (base 16)		GSP Sprachtechnologie GmbH
+				Teltowkanalstraße 1
+				Berlin    12247
+				DE
+
+70-B3-D5   (hex)		GUNMA ELECTRONICS CO LTD
+64F000-64FFFF     (base 16)		GUNMA ELECTRONICS CO LTD
+				760 OOMAMA
+				MIDORI-CITY  GUNMA  376-0101
+				JP
+
+70-B3-D5   (hex)		Velvac Incorporated
+4DD000-4DDFFF     (base 16)		Velvac Incorporated
+				2183 Alpine Way
+				Bellingham  WA  98226
+				US
+
+70-B3-D5   (hex)		Digitella Inc.
+D03000-D03FFF     (base 16)		Digitella Inc.
+				2F, Banpodaero 99
+				Seocho-gu  Seoul  06657
+				KR
+
+70-B3-D5   (hex)		Twoway Communications, Inc.
+41C000-41CFFF     (base 16)		Twoway Communications, Inc.
+				41 Wu Kung 6 Rd., New Taipei Industrial Park, New Taipei City,24891,Taiwan,R.O.C.
+				New Taipei city  Taipei  24891
+				TW
+
+70-B3-D5   (hex)		B2cloud lda
+29E000-29EFFF     (base 16)		B2cloud lda
+				Urbanizacao do correlo 4,14
+				Gandra  Paredes  4585-362
+				PT
+
+70-B3-D5   (hex)		Elman srl
+B2C000-B2CFFF     (base 16)		Elman srl
+				Via di Valle Caia, km 4.700
+				Pomezia  Roma  00040
+				IT
+
+70-B3-D5   (hex)		Power Electronics Espana, S.L.
+BDB000-BDBFFF     (base 16)		Power Electronics Espana, S.L.
+				PI Pla de Carrases, CV-35 Salida 30Salida 30-
+				lliria  Valencia  46160
+				ES
+
+70-B3-D5   (hex)		Eon
+E62000-E62FFF     (base 16)		Eon
+				415, Heungan-daero, Dongan-gu, Anyang-si, Gyeonggi-do, Republic of Korea
+				Anyang-si  Gyeonggi-do  KS009
+				KR
+
+70-B3-D5   (hex)		ARINAX
+6CC000-6CCFFF     (base 16)		ARINAX
+				259 rue du Rocher de Lorzier
+				MOIRANS    38430
+				FR
+
+70-B3-D5   (hex)		NOREYA Technology e.U.
+A79000-A79FFF     (base 16)		NOREYA Technology e.U.
+				Parkring 1
+				Raaba-Grambach  Styria  8074
+				AT
+
+70-B3-D5   (hex)		Motohaus Powersports Limited
+98D000-98DFFF     (base 16)		Motohaus Powersports Limited
+				Motohaus Powersports Limited, 1a Rose Estate Osborn Way
+				Hook    RG27 9UT
+				GB
+
+70-B3-D5   (hex)		IMMOLAS
+792000-792FFF     (base 16)		IMMOLAS
+				Aleje Jerozolimskie 85/21
+				Warszawa    02-001
+				PL
+
+70-B3-D5   (hex)		EVPU Defence a.s.
+04F000-04FFFF     (base 16)		EVPU Defence a.s.
+				Jaktare 1781
+				Uherske Hradiste    686 01
+				CZ
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+5A4000-5A4FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		NAL Research Corporation
+1B0000-1B0FFF     (base 16)		NAL Research Corporation
+				11100 Endeavor Ct, Suite 300
+				Manassas  VA  20109
+				US
+
+70-B3-D5   (hex)		LLC NTZ Mekhanotronika
+6C0000-6C0FFF     (base 16)		LLC NTZ Mekhanotronika
+				Pionerstroya, build 23a
+				Saint-Petersburg    198206
+				RU
+
+70-B3-D5   (hex)		AXING AG
+CA6000-CA6FFF     (base 16)		AXING AG
+				Gewerbehaus Moskau
+				Ramsen    8262
+				CH
+
+70-B3-D5   (hex)		Akse srl
+128000-128FFF     (base 16)		Akse srl
+				Via Aldo Moro, 39
+				Reggio Emilia  Italy  42124
+				IT
+
+70-B3-D5   (hex)		PNETWORKS
+EF0000-EF0FFF     (base 16)		PNETWORKS
+				TEKNOPARK Bul. 1/1A No: 201 Pendik ?stanbul
+				Istanbul    34906
+				TR
+
+70-B3-D5   (hex)		Arwin Technology Limited
+8C9000-8C9FFF     (base 16)		Arwin Technology Limited
+				Unit 215, 2/F, 19W, 19 Science Park West Avenue
+				Hong Kong    0
+				HK
+
+70-B3-D5   (hex)		Herholdt Controls srl
+C6B000-C6BFFF     (base 16)		Herholdt Controls srl
+				Via Mestre 13
+				Milan    20132
+				IT
+
+70-B3-D5   (hex)		Atlas Lighting Products
+CB5000-CB5FFF     (base 16)		Atlas Lighting Products
+				1406 S Mebane St
+				Burlington    27215
+				US
+
+70-B3-D5   (hex)		Weble Sàrl
+96C000-96CFFF     (base 16)		Weble Sàrl
+				Rue du Jura 12
+				Bussigny  Vaud  1030
+				CH
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+CE8000-CE8FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		G.S.D GROUP INC.
+B01000-B01FFF     (base 16)		G.S.D GROUP INC.
+				2010 RUE MICHELIN, SUITE 100
+				LAVAL  Quebec  H7L 5C2
+				CA
+
+70-B3-D5   (hex)		Medicomp, Inc
+F7C000-F7CFFF     (base 16)		Medicomp, Inc
+				600 Atlantis Rd
+				Melbourne  FL  32904
+				US
+
+70-B3-D5   (hex)		DIC Corporation
+5C3000-5C3FFF     (base 16)		DIC Corporation
+				DIC Building,7-20,Nihonbashi 3-chome
+				Chuo-ku,Tokyo    103-8233
+				JP
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+CAD000-CADFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Sono-Tek Corporation
+5C2000-5C2FFF     (base 16)		Sono-Tek Corporation
+				2012 Rte. 9W Bldg 3
+				Milton  NY  12547
+				US
+
+70-B3-D5   (hex)		Davitor AB
+E60000-E60FFF     (base 16)		Davitor AB
+				Skordarevagen 5
+				Kalmar    39353
+				SE
+
+70-B3-D5   (hex)		Shenzhen Rongda Computer Co.,Ltd
+289000-289FFF     (base 16)		Shenzhen Rongda Computer Co.,Ltd
+				905, Block B, DuoCaiKeChuan Park, No.5 Guanle Road
+				Longhua District  Shenzhen, Guangdong    518110
+				CN
+
+70-B3-D5   (hex)		Breas Medical AB
+CF9000-CF9FFF     (base 16)		Breas Medical AB
+				Företagsvägen 1
+				Mölnlycke    SE-435 33
+				SE
+
+70-B3-D5   (hex)		European Synchrotron Radiation Facility
+160000-160FFF     (base 16)		European Synchrotron Radiation Facility
+				71, avenue des Martyrs
+				Grenoble  Isère  38000
+				FR
+
+70-B3-D5   (hex)		Radian Research, Inc.
+9BC000-9BCFFF     (base 16)		Radian Research, Inc.
+				3852 Fortune Drive
+				Lafayette  IN  47905
+				US
+
+70-B3-D5   (hex)		Coloet S.r.l.
+713000-713FFF     (base 16)		Coloet S.r.l.
+				Via Mascheroni, 20
+				MILANO  Italy  20145
+				IT
+
+70-B3-D5   (hex)		meoENERGY
+7FA000-7FAFFF     (base 16)		meoENERGY
+				Glacisstraße 9/1
+				Graz    8010
+				AT
+
+70-B3-D5   (hex)		VERTEL DIGITAL PRIVATE LIMITED
+912000-912FFF     (base 16)		VERTEL DIGITAL PRIVATE LIMITED
+				C-98, SECTOR-10 
+				NOIDA  Uttar Pradesh  201301
+				IN
+
+70-B3-D5   (hex)		ITALIANA PONTI RADIO SRL
+452000-452FFF     (base 16)		ITALIANA PONTI RADIO SRL
+				VIA CA' BASSA 67
+				VARESE  VARESE  21100
+				IT
+
+70-B3-D5   (hex)		Stuyts Engineering Haarlem BV
+D1D000-D1DFFF     (base 16)		Stuyts Engineering Haarlem BV
+				Hogeweg 40
+				Zandvoort  Noord-Holland  2042GH
+				NL
+
+70-B3-D5   (hex)		sonatest
+8FD000-8FDFFF     (base 16)		sonatest
+				1175 Rue Lavigerie, Bur.90
+				Quebec  Quebec  G1V 4P1
+				CA
+
+70-B3-D5   (hex)		IP Devices
+5CE000-5CEFFF     (base 16)		IP Devices
+				Etrog 72 8
+				Givat Zeev    9091700
+				IL
+
+70-B3-D5   (hex)		JESE Ltd
+0E2000-0E2FFF     (base 16)		JESE Ltd
+				Unit 2 Gales
+				Newton Abbot  Devon  TQ13 8FD
+				GB
+
+70-B3-D5   (hex)		IDZ Ltd
+7F6000-7F6FFF     (base 16)		IDZ Ltd
+				160 CITY ROAD
+				LONDON    EC1V 2NX
+				GB
+
+70-B3-D5   (hex)		Private Enterprise Scientific and Production Private EnterpriseSparing-Vist Center
+076000-076FFF     (base 16)		Private Enterprise Scientific and Production Private EnterpriseSparing-Vist Center
+				33 V.Velykoho Str.
+				Lviv    79026
+				UA
+
+70-B3-D5   (hex)		LinkAV Technology Co., Ltd
+1F6000-1F6FFF     (base 16)		LinkAV Technology Co., Ltd
+				Room 401, 4F, Skyworth Digital Building, Songbai Rd, Baoan District 
+				Shenzhen  Guangdong  518108
+				CN
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+B33000-B33FFF     (base 16)		Aplex Technology Inc.
+				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
+				Shenzhen City  Guangdong  518129
+				CN
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+106000-106FFF     (base 16)		Aplex Technology Inc.
+				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
+				Shenzhen City  Guangdong  518129
+				CN
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+666000-666FFF     (base 16)		Aplex Technology Inc.
+				501-5B01,Xintianxia phase 2 building,Wankecheng community,Bantian township,Longgang district
+				Shenzhen City  Guangdong  518129
+				CN
+
+70-B3-D5   (hex)		FARHO DOMOTICA SL
+ACE000-ACEFFF     (base 16)		FARHO DOMOTICA SL
+				POLIGONO DE TABAZA II, NAVES 9-13
+				TABAZA  ASTURIAS  33439
+				ES
+
+70-B3-D5   (hex)		The Engineerix Group
+C71000-C71FFF     (base 16)		The Engineerix Group
+				1418 Beech Ave 119A
+				McAllen  TX  78501
+				US
+
+70-B3-D5   (hex)		Flextronics International Kft
+1BC000-1BCFFF     (base 16)		Flextronics International Kft
+				38. Zrinyi Str.
+				Zalaegerszeg  Zala  8900
+				HU
+
+70-B3-D5   (hex)		Research Laboratory of Design Automation, Ltd.
+223000-223FFF     (base 16)		Research Laboratory of Design Automation, Ltd.
+				8 Birzhevoy Spusk
+				Taganrog    347900
+				RU
+
+70-B3-D5   (hex)		Private
+315000-315FFF     (base 16)		Private
+
+70-B3-D5   (hex)		JOLANYEE  Technology Co., Ltd.
+9D8000-9D8FFF     (base 16)		JOLANYEE  Technology Co., Ltd.
+				2F., No. 13, Sec. 1, Yonghe Rd.
+				Yonghe Dist., New Taipei City    234014
+				TW
+
+70-B3-D5   (hex)		SEASONS 4 INC
+D5D000-D5DFFF     (base 16)		SEASONS 4 INC
+				3601 LA GRANGE PKWY, SUITE 500
+				TOANO  VA  23168
+				US
+
+70-B3-D5   (hex)		VulcanForms
+E0E000-E0EFFF     (base 16)		VulcanForms
+				20 North Ave.
+				Burlington  MA  01803
+				US
+
+8C-1F-64   (hex)		Xi‘an Hangguang Satellite and Control Technology Co.,Ltd
+270000-270FFF     (base 16)		Xi‘an Hangguang Satellite and Control Technology Co.,Ltd
+				Hi-tech Industrial Park Zaozitai Road No.10,Chang’an, Xi’an, Shaanxi China
+				Xi’an    710075
+				CN
+
+8C-1F-64   (hex)		Thales Belgium
+D7E000-D7EFFF     (base 16)		Thales Belgium
+				Rue Des Frères Taymans 28
+				Tubize  Brussels  1480
+				BE
+
+8C-1F-64   (hex)		GSP Sprachtechnologie GmbH
+B64000-B64FFF     (base 16)		GSP Sprachtechnologie GmbH
+				Teltowkanalstraße 1
+				Berlin    12247
+				DE
+
+8C-1F-64   (hex)		Brad Technology
+549000-549FFF     (base 16)		Brad Technology
+				20 Avenue des Erables
+				Avignon    84000
+				FR
+
+8C-1F-64   (hex)		Yuval Fichman
+135000-135FFF     (base 16)		Yuval Fichman
+				37 Mishmar Hayarden St.
+				Tel Aviv    6986519
+				IL
+
+8C-1F-64   (hex)		EkspertStroyProekt
+A57000-A57FFF     (base 16)		EkspertStroyProekt
+				office 422, str.1, d.1, ul. Eniseyskaya
+				Moscow    129344
+				RU
+
+8C-1F-64   (hex)		GS Elektromedizinsiche Geräte G. Stemple GmbH
+BC0000-BC0FFF     (base 16)		GS Elektromedizinsiche Geräte G. Stemple GmbH
+				Hauswiesenstr. 26
+				Kaufering  Bayern  86916
+				DE
+
+8C-1F-64   (hex)		BR. Voss Ingenjörsfirma AB
+264000-264FFF     (base 16)		BR. Voss Ingenjörsfirma AB
+				Getängsvägen 4
+				Borås    50468
+				SE
+
+8C-1F-64   (hex)		Garten Automation
+856000-856FFF     (base 16)		Garten Automation
+				Av. Herbert Hadler, 1367
+				Pelotas  Rio Grande do Sul  96050460
+				BR
+
+8C-1F-64   (hex)		Portrait Displays, Inc.
+903000-903FFF     (base 16)		Portrait Displays, Inc.
+				6663 OWENS DR
+				PLEASANTON  CA  94588
+				US
+
+70-B3-D5   (hex)		Green Access Ltd
+B2E000-B2EFFF     (base 16)		Green Access Ltd
+				Unit 1 Kensworthgate  200-204 High Street South
+				Dunstable  Bedfordshire   LU6 3HS
+				GB
+
+8C-1F-64   (hex)		Scientific Lightning Solutions
+E5C000-E5CFFF     (base 16)		Scientific Lightning Solutions
+				1419 Chaffee Drive, Suite 1
+				Titusville  FL  32780
+				US
+
+8C-1F-64   (hex)		WOLF Advanced Technology
+370000-370FFF     (base 16)		WOLF Advanced Technology
+				175 Mostar Street, Suite 200
+				Stouffville  Ontario  L4A 0Y2
+				CA
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+AE1000-AE1FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		Roog zhi tong Technology(Beijing) Co.,Ltd
+296000-296FFF     (base 16)		Roog zhi tong Technology(Beijing) Co.,Ltd
+				Room 806, Huizhong building, building 2, Yard 1, Shangdi Seventh Street, Haidian District, Beijing
+				Beijing    100089
+				CN
+
+8C-1F-64   (hex)		SBS SpA
+4C7000-4C7FFF     (base 16)		SBS SpA
+				via Circonvallazione s/n
+				Miasino  NO  28010
+				IT
+
+8C-1F-64   (hex)		Grossenbacher Systeme AG
+83A000-83AFFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+8C-1F-64   (hex)		Murata Manufacturing Co., Ltd.
+79D000-79DFFF     (base 16)		Murata Manufacturing Co., Ltd.
+				2288, Oaza-Ohshinohara, Yasu-cho,
+				Yasu-gun  Shiga  520-2393
+				JP
+
+8C-1F-64   (hex)		Gogo Business Aviation
+151000-151FFF     (base 16)		Gogo Business Aviation
+				105 Edgeview Dr., Suite 300
+				Broomfield  CO  80021
+				US
+
+8C-1F-64   (hex)		Cirrus Systems, Inc.
+8C2000-8C2FFF     (base 16)		Cirrus Systems, Inc.
+				200 West Road
+				Portsmouth  NH  03801
+				US
+
+8C-1F-64   (hex)		Florida R&D Associates LLC
+2F5000-2F5FFF     (base 16)		Florida R&D Associates LLC
+				76 Spring Vista Drive
+				DeBary  FL  32713
+				US
+
+8C-1F-64   (hex)		Sonora Network Solutions
+2E8000-2E8FFF     (base 16)		Sonora Network Solutions
+				8 The Green Suite A
+				Dover  DE  19901
+				US
+
+8C-1F-64   (hex)		Global Organ Group B.V.
+EE8000-EE8FFF     (base 16)		Global Organ Group B.V.
+				Keplerlaan 2
+				EDE  The Netherlands  6716BS
+				NL
+
+8C-1F-64   (hex)		AiUnion Co.,Ltd
+EEF000-EEFFFF     (base 16)		AiUnion Co.,Ltd
+				3F.-1, No. 268, Liancheng Rd., Zhonghe Dist.
+				New Taipei City   Taiwan (R.O.C.)  235
+				TW
+
+8C-1F-64   (hex)		ard sa
+AF7000-AF7FFF     (base 16)		ard sa
+				Micropolis Bat Clematis
+				Gap  France  05000
+				FR
+
+8C-1F-64   (hex)		BIOTAGE GB LTD
+EF1000-EF1FFF     (base 16)		BIOTAGE GB LTD
+				UNIT 10 DYFFRYN BUSINESS PARK
+				YSTRAD MYNACH    CF82 7TS
+				GB
+
+8C-1F-64   (hex)		UBISCALE
+73F000-73FFFF     (base 16)		UBISCALE
+				1 Avenue de Bellefontaine
+				Cesson-Sevigne    35510
+				FR
+
+8C-1F-64   (hex)		Accemic Technologies GmbH
+79E000-79EFFF     (base 16)		Accemic Technologies GmbH
+				Franz-Huber-Str. 39
+				Kiefersfelden  Bavaria  83088
+				DE
+
+8C-1F-64   (hex)		YPP Corporation
+3E0000-3E0FFF     (base 16)		YPP Corporation
+				24
+				Geumchon-gu  Seoul  153-802
+				KR
+
+8C-1F-64   (hex)		Mainco automotion s.l.
+DAE000-DAEFFF     (base 16)		Mainco automotion s.l.
+				P.O. Box 55
+				Almussafes  Valencia  46440
+				ES
+
+8C-1F-64   (hex)		WEPTECH elektronik GmbH
+086000-086FFF     (base 16)		WEPTECH elektronik GmbH
+				Ostring 10
+				Landau    76829
+				DE
+
+8C-1F-64   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+6CD000-6CDFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+8C-1F-64   (hex)		TPVision Europe B.V
+53A000-53AFFF     (base 16)		TPVision Europe B.V
+				Prins Bernhardplein 200
+				Amsterdam  Noord-Holland  1097 JB
+				NL
+
+70-B3-D5   (hex)		Guardian Controls International Ltd
+710000-710FFF     (base 16)		Guardian Controls International Ltd
+				 The Dairy, Spring Bank Farm
+				Arclid  Cheshire  CW11 2UD
+				GB
+
+8C-1F-64   (hex)		FIT
+6C6000-6C6FFF     (base 16)		FIT
+				7-64
+				Unumakakamigahara-cho Kakamigahara City  Gifu  5090141
+				JP
+
+8C-1F-64   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+25A000-25AFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+8C-1F-64   (hex)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
+B2C000-B2CFFF     (base 16)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
+				Koren industrial zone no 5
+				Mallot  Israel  2101002
+				IL
+
+8C-1F-64   (hex)		Ternary Research Corporation
+F78000-F78FFF     (base 16)		Ternary Research Corporation
+				6017 Snell Ave #360
+				San Jose  CA  95123
+				US
+
+8C-1F-64   (hex)		Multilane Inc
+385000-385FFF     (base 16)		Multilane Inc
+				48521 Warm Springs Blvd Suite 310
+				Fremont  CA  94529
+				US
+
+8C-1F-64   (hex)		ZHEJIANG CHITIC-SAFEWAY NEW ENERGY TECHNICAL CO.,LTD.
+ED4000-ED4FFF     (base 16)		ZHEJIANG CHITIC-SAFEWAY NEW ENERGY TECHNICAL CO.,LTD.
+				Add: F5, B1, Chitic Science & Technology Park, No.260, 6th Road, Xiasha, EDA, Hangzhou, Zhejiang, China 
+				HANGZHOU  ZHEJIANG  310018
+				CN
+
+8C-1F-64   (hex)		mal-tech Technological Solutions Ltd/CRISP
+663000-663FFF     (base 16)		mal-tech Technological Solutions Ltd/CRISP
+				hanapach 3
+				Holon    7518301
+				IL
+
+8C-1F-64   (hex)		BEIJING LXTV TECHNOLOGY CO.,LTD
+536000-536FFF     (base 16)		BEIJING LXTV TECHNOLOGY CO.,LTD
+				Floor 8, Jinlan building, No. 2, Beihuan Road, Changping District
+				Beijing  Beijing  102200
+				CN
+
+8C-1F-64   (hex)		PHYGITALL SOLUÇÕES EM INTERNET DAS COISAS
+B46000-B46FFF     (base 16)		PHYGITALL SOLUÇÕES EM INTERNET DAS COISAS
+				SAO MIGUEL STREET, 301 - 201 - TIJUCA
+				RIO DE JANEIRO  RIO DE JANEIRO  20530420
+				BR
+
+8C-1F-64   (hex)		DTDS Technology Pte Ltd
+4DA000-4DAFFF     (base 16)		DTDS Technology Pte Ltd
+				Block 19 #05-153, Kallang Avenue
+				Singapore    339410
+				SG
+
+8C-1F-64   (hex)		KxS Technologies Oy
+EB9000-EB9FFF     (base 16)		KxS Technologies Oy
+				Zirkonipolku 2  A LH1
+				VANTAA    01700
+				FI
+
+70-B3-D5   (hex)		RealD, Inc.
+CCB000-CCBFFF     (base 16)		RealD, Inc.
+				9777 Wilshire Boulevard, Ste 430
+				 Beverly Hills  CA  90212
+				US
+
+8C-1F-64   (hex)		L tec Co.,Ltd
+650000-650FFF     (base 16)		L tec Co.,Ltd
+				670-1 Shin Pukuji
+				Chiyoda-machi Ora-gun  Gunma-pref  370-0505
+				JP
+
+8C-1F-64   (hex)		Tabology
+787000-787FFF     (base 16)		Tabology
+				8-10 WOOD STREET WAKEFIELD
+				Wakefield  West Yorkshire  WF1 2ED
+				GB
+
+8C-1F-64   (hex)		Bulwark
+6A8000-6A8FFF     (base 16)		Bulwark
+				2/3 Sahra Grove
+				Carrum Downs  VIC  3201
+				AU
+
+8C-1F-64   (hex)		HongSeok Ltd.
+5F5000-5F5FFF     (base 16)		HongSeok Ltd.
+				166, Osan-ro, Osan-myeon
+				Iksan-si  Jeollabuk-do  54670
+				KR
+
+8C-1F-64   (hex)		MP-SENSOR GmbH
+521000-521FFF     (base 16)		MP-SENSOR GmbH
+				Albstraße, 13
+				Neuhausen auf den Fildern    73765
+				DE
+
+8C-1F-64   (hex)		Monarch Instrument
+D44000-D44FFF     (base 16)		Monarch Instrument
+				15 Columbia drive
+				Amherst  NH  03031
+				US
+
+8C-1F-64   (hex)		Ibeos
+8AF000-8AFFFF     (base 16)		Ibeos
+				12110 SUNSET HILLS RD
+				RESTON  VA  20190
+				US
+
+8C-1F-64   (hex)		EYatsko Individual
+D13000-D13FFF     (base 16)		EYatsko Individual
+				5, apt. 84, Gogolya st.
+				Pushkino  Moscow Region  141207
+				RU
+
+8C-1F-64   (hex)		O-Net Communications(Shenzhen)Limited
+6B5000-6B5FFF     (base 16)		O-Net Communications(Shenzhen)Limited
+				No. 35, Cuijing Road, Pingshan New District
+				Shenzhen  Guangdong  518118
+				CN
+
+70-B3-D5   (hex)		Fluid Management Technology
+A7A000-A7AFFF     (base 16)		Fluid Management Technology
+				169 Grange Rd, Beverley
+				169 Grange Rd, Beverley, South Australia 5009 AU.  South Australia  5009
+				AU
+
+8C-1F-64   (hex)		Transit Solutions, LLC.
+675000-675FFF     (base 16)		Transit Solutions, LLC.
+				114 West Grandview Avenue
+				Zelienople  PA  16063
+				US
+
+8C-1F-64   (hex)		Atlantic Pumps Ltd
+85B000-85BFFF     (base 16)		Atlantic Pumps Ltd
+				Carrwood Road
+				Chesterfield  Derbyshire  S41 9QB
+				GB
+
+8C-1F-64   (hex)		Novanta Corp / Novanta IMS
+510000-510FFF     (base 16)		Novanta Corp / Novanta IMS
+				370 N. Main St.
+				Marlborough  CT  06447
+				US
+
+8C-1F-64   (hex)		Chengdu ZiChen Time&Frequency Technology Co.,Ltd
+BC6000-BC6FFF     (base 16)		Chengdu ZiChen Time&Frequency Technology Co.,Ltd
+				Building 1, No. 3, Xixin Avenue, hi tech Zone,
+				Chengdu  Sichuan  610069
+				CN
+
+8C-1F-64   (hex)		RFENGINE CO., LTD.
+60A000-60AFFF     (base 16)		RFENGINE CO., LTD.
+				#1-618 CHEONGJU TECHNO S-TOWER
+				CHEONGJU-SI    28578
+				KR
+
+8C-1F-64   (hex)		Dongguan Pengchen Earth Instrument CO. LT
+E7B000-E7BFFF     (base 16)		Dongguan Pengchen Earth Instrument CO. LT
+				Room 301, Building 1, No.6, North Huwu Road, Liuwu Village, Shijie Town, Dongguan city, Guangdong Province
+				Dongguan    523290
+				CN
+
+8C-1F-64   (hex)		Wavestream Corp
+3C6000-3C6FFF     (base 16)		Wavestream Corp
+				545 W Terrace Dr.
+				San Dimas  CA  91773
+				US
+
+8C-1F-64   (hex)		Fuku Energy Technology Co., Ltd.
+603000-603FFF     (base 16)		Fuku Energy Technology Co., Ltd.
+				1F., No. 176, Sec. 2, Muxin Rd., Wenshan Dist., Taipei City 116024, Taiwan (R.O.C.)
+				Taipei City  Taiwan (R.O.C.)  802
+				TW
+
+8C-1F-64   (hex)		Security&Best
+35D000-35DFFF     (base 16)		Security&Best
+				B-dong, #204, 17, Gosan-ro 148beon-gil
+				Gunpo-si  Gyeonggi-do  15850
+				KR
+
+8C-1F-64   (hex)		Guan Show Technologe Co., Ltd.
+A01000-A01FFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+8C-1F-64   (hex)		Astrometric Instruments, Inc.
+65F000-65FFFF     (base 16)		Astrometric Instruments, Inc.
+				409 East St.
+				Wallingford  VT  05773
+				US
+
+8C-1F-64   (hex)		Engage Technologies
+077000-077FFF     (base 16)		Engage Technologies
+				7041 Boone Avenue North
+				Brooklyn Park  MN  55428
+				US
+
+8C-1F-64   (hex)		STEAMIQ, Inc.
+EBF000-EBFFFF     (base 16)		STEAMIQ, Inc.
+				632 Main Street, 
+				HINGHAM  MA  02043
+				US
+
+8C-1F-64   (hex)		Enlaps
+7D2000-7D2FFF     (base 16)		Enlaps
+				29 chemin du vieux chene, Tarmac
+				MEYLAN    38240
+				FR
+
+8C-1F-64   (hex)		Delta Solutions LLC
+EB7000-EB7FFF     (base 16)		Delta Solutions LLC
+				Kolhoznaya str., 8A, Room 20, 2nd Floor
+				Lubertsy  Lubertsy City District, Moscow Region  140002
+				RU
+
+8C-1F-64   (hex)		WENet Vietnam Joint Stock company
+A2B000-A2BFFF     (base 16)		WENet Vietnam Joint Stock company
+				BT2-15, Trung Van New Urban Area, Trung Van Ward, Nam Tu Liem District, Hanoi, Vietnam
+				Hanoi  Hanoi  10000
+				VN
+
+8C-1F-64   (hex)		WARECUBE,INC
+EFB000-EFBFFF     (base 16)		WARECUBE,INC
+				#A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu
+				Suwon-si    16648
+				KR
+
+8C-1F-64   (hex)		Missing Link Electronics, Inc.
+47A000-47AFFF     (base 16)		Missing Link Electronics, Inc.
+				2880 Zanker Road, Ste 203
+				San Jose    95134
+				US
+
+8C-1F-64   (hex)		Gemini Electronics B.V.
+81A000-81AFFF     (base 16)		Gemini Electronics B.V.
+				Burg. van Meeuwenstraat 14
+				Beek  Limburg  6191 ND
+				NL
+
+8C-1F-64   (hex)		AixControl GmbH
+08F000-08FFFF     (base 16)		AixControl GmbH
+				Sonnenweg 15
+				Aachen  NRW  52070
+				DE
+
+8C-1F-64   (hex)		Zilica Limited
+A1B000-A1BFFF     (base 16)		Zilica Limited
+				8 Hasting Close, Bray, Bray
+				Maidenhead Bray  Berks  SL6 2DA
+				GB
+
+8C-1F-64   (hex)		REO AG
+73C000-73CFFF     (base 16)		REO AG
+				Brühlerstr. 100
+				Solingen    42657
+				DE
+
+8C-1F-64   (hex)		Borrell USA Corp
+38B000-38BFFF     (base 16)		Borrell USA Corp
+				240 RIGGS AV
+				MERCED    95341
+				US
+
+8C-1F-64   (hex)		NOVA Products GmbH
+BD6000-BD6FFF     (base 16)		NOVA Products GmbH
+				Thierschstr. 11
+				Munich    80538
+				DE
+
+70-B3-D5   (hex)		Flextronics International Kft
+E2F000-E2FFFF     (base 16)		Flextronics International Kft
+				Zrínyi Miklós str. 38.
+				Zalaegerszeg    8900
+				HU
+
+8C-1F-64   (hex)		Flextronics International Kft
+F5C000-F5CFFF     (base 16)		Flextronics International Kft
+				Zrínyi Miklós str. 38.
+				Zalaegerszeg    8900
+				HU
+
+8C-1F-64   (hex)		ECO-ADAPT
+C38000-C38FFF     (base 16)		ECO-ADAPT
+				39 Rue de Chateaudun
+				Paris  Ile-de-France  75009
+				FR
+
+8C-1F-64   (hex)		In-lite Design BV
+557000-557FFF     (base 16)		In-lite Design BV
+				Stephensonweg 18
+				Gorinchem  Zuid-Holland  4207 HB
+				NL
+
+8C-1F-64   (hex)		SMS group GmbH
+FF4000-FF4FFF     (base 16)		SMS group GmbH
+				Hirtenwiese 4
+				Elkenroth  Rhineland-Palantine  57578
+				DE
+
+8C-1F-64   (hex)		CyberneX Co., Ltd
+A6D000-A6DFFF     (base 16)		CyberneX Co., Ltd
+				Kamata, 5-26-8, Ardel Kamata #1107
+				O-taku  Tokyo-to  1440052
+				JP
+
+8C-1F-64   (hex)		Enestone Corporation
+2FD000-2FDFFF     (base 16)		Enestone Corporation
+				3-24-5 Shin yokohama Kohoku
+				YOKOHAMA  Kanagawa  222-0033
+				JP
+
+8C-1F-64   (hex)		ADETEC SAS
+AE8000-AE8FFF     (base 16)		ADETEC SAS
+				8 rue de l'Angoumois
+				ARGENTEUIL    95100
+				FR
+
+8C-1F-64   (hex)		AML
+634000-634FFF     (base 16)		AML
+				2190 Regal Parkway
+				Euless  TX  76040
+				US
+
+70-B3-D5   (hex)		Active Research Limited
+6A0000-6A0FFF     (base 16)		Active Research Limited
+				21 Harwell Road
+				Poole  Dorset  BH17 0GE
+				GB
+
+8C-1F-64   (hex)		SiEngine Technology Co., Ltd.
+F7A000-F7AFFF     (base 16)		SiEngine Technology Co., Ltd.
+				6th floor,Building 23,No.1999,Yi Shan Road
+				Shanghai  Shanghai  201114
+				CN
+
+8C-1F-64   (hex)		Vesperix Corporation
+8E9000-8E9FFF     (base 16)		Vesperix Corporation
+				803 West Broad St Suite 520
+				Falls Church  VA  22046
+				US
+
+8C-1F-64   (hex)		SOCNOC AI Inc
+7DE000-7DEFFF     (base 16)		SOCNOC AI Inc
+				 2800 Innovation Avenue, Innovation Industrial Park?
+				Hefei  Anhui  230000
+				CN
+
+8C-1F-64   (hex)		Sontay Ltd.
+697000-697FFF     (base 16)		Sontay Ltd.
+				Four Elms Road
+				Edenbridge    TN86AB
+				GB
+
+8C-1F-64   (hex)		Lumiplan Duhamel
+C4C000-C4CFFF     (base 16)		Lumiplan Duhamel
+				2 rue de l'industrie
+				Domène  Isère  38420
+				FR
+
+8C-1F-64   (hex)		BRICKMAKERS GmbH
+E5E000-E5EFFF     (base 16)		BRICKMAKERS GmbH
+				Am Plan 14-16
+				Koblenz    56068
+				DE
+
+8C-1F-64   (hex)		AvMap srlu
+84C000-84CFFF     (base 16)		AvMap srlu
+				Viale Zaccagna 6
+				Carrara    54033
+				IT
+
+8C-1F-64   (hex)		Neurable
+B92000-B92FFF     (base 16)		Neurable
+				45 Bromfield St
+				Chicago  IL  60641
+				US
+
+8C-1F-64   (hex)		ADiCo Corporation
+D69000-D69FFF     (base 16)		ADiCo Corporation
+				2045-32, Takaragi-honcho
+				Utsunomiya-shi  Tochigi  320-0075
+				JP
+
+8C-1F-64   (hex)		METRONA-Union GmbH
+9FA000-9FAFFF     (base 16)		METRONA-Union GmbH
+				Aidenbachstr. 40
+				München    81379
+				DE
+
+8C-1F-64   (hex)		Wittra Networks AB
+DF8000-DF8FFF     (base 16)		Wittra Networks AB
+				Västra Järnvägsgatan 39th floor(Convendum)
+				Stockholm  Stockholm  111 64
+				SE
+
+8C-1F-64   (hex)		Unitron Systems b.v.
+FA8000-FA8FFF     (base 16)		Unitron Systems b.v.
+				SCHANSESTRAAT 7
+				IJzendijke    4515 RN
+				NL
+
+8C-1F-64   (hex)		University of Geneva - Department of Particle Physics
+D88000-D88FFF     (base 16)		University of Geneva - Department of Particle Physics
+				Quai Ernest-Ansermet 24
+				Geneva    1211
+				CH
+
+8C-1F-64   (hex)		Massar Networks
+FAA000-FAAFFF     (base 16)		Massar Networks
+				Postfach 1207PEAX ID 473.1849.6740.89
+				Baar  Zug  CH-6341
+				CH
+
+8C-1F-64   (hex)		Vytahy-Vymyslicky s.r.o.
+737000-737FFF     (base 16)		Vytahy-Vymyslicky s.r.o.
+				Pivovarska 542
+				Uherske Hradiste - Jarosov    60801
+				CZ
+
+8C-1F-64   (hex)		Retency
+BBF000-BBFFFF     (base 16)		Retency
+				19 rue Vivienne
+				Paris    75002
+				FR
+
+8C-1F-64   (hex)		Camius
+601000-601FFF     (base 16)		Camius
+				41593 Winchester Rd., Ste 200
+				Temecula  CA  92590
+				US
+
+8C-1F-64   (hex)		Patch Technologies, Inc.
+0AC000-0ACFFF     (base 16)		Patch Technologies, Inc.
+				100 S Cincinnati Ave, Fifth Floor
+				Tulsa  OK  74103
+				US
+
+8C-1F-64   (hex)		BNB
+0BE000-0BEFFF     (base 16)		BNB
+				Deongmyeongdong-ro 22beon-gil
+				Daejeon  Yuseong-gu  34155
+				KR
+
+8C-1F-64   (hex)		Pionierkraft GmbH
+CD3000-CD3FFF     (base 16)		Pionierkraft GmbH
+				Agnes-Pockels-Bogen 1
+				Munich  Bavaria  80992
+				DE
+
+8C-1F-64   (hex)		Comm-ence, Inc.
+B73000-B73FFF     (base 16)		Comm-ence, Inc.
+				1813 Limerick Ct
+				Darien  IL  60561
+				US
+
+8C-1F-64   (hex)		YUSUR Technology Co., Ltd.
+C3A000-C3AFFF     (base 16)		YUSUR Technology Co., Ltd.
+				Room 1401,building 4,yard 1, Beiqing Road No.81, Haidian District
+				Beijing  Beijing  100086
+				CN
+
+70-B3-D5   (hex)		Ava Technologies
+72F000-72FFFF     (base 16)		Ava Technologies
+				2409 E. Pender St.
+				Vancouver  BC  V5K 2B2
+				CA
+
+8C-1F-64   (hex)		Benison Tech
+3AC000-3ACFFF     (base 16)		Benison Tech
+				2100 Geng Road, Suite 210
+				Palo Alto  CA  94043
+				US
+
+8C-1F-64   (hex)		HIGHVOLT Prüftechnik
+8F8000-8F8FFF     (base 16)		HIGHVOLT Prüftechnik
+				Marie-Curie-Straße10
+				Dresden    01139
+				DE
+
+8C-1F-64   (hex)		Stresstech OY
+625000-625FFF     (base 16)		Stresstech OY
+				Tikkutehtaantie 1
+				Vaajakoski    40800
+				FI
+
+8C-1F-64   (hex)		BCMTECH
+94C000-94CFFF     (base 16)		BCMTECH
+				803ho(Gongjang-dong), Simin-daero 109beon-gil, Dongan-gu,
+				Anyang-si  Gyeonggi-do  14042
+				KR
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+97C000-97CFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+8C-1F-64   (hex)		SLAT
+683000-683FFF     (base 16)		SLAT
+				11 Rue Jean-Elysée DUPUY
+				Champagne au Mont d'Or  Rhône  69543
+				FR
+
+8C-1F-64   (hex)		E VISION INDIA PVT LTD 
+7AF000-7AFFFF     (base 16)		E VISION INDIA PVT LTD 
+				9/205, MAIN MARKET OLD FARIDABAD HARYANA INDIA 121002
+				Faridabad  HARYANA  121002
+				IN
+
+8C-1F-64   (hex)		Fink Zeitsysteme GmbH
+73B000-73BFFF     (base 16)		Fink Zeitsysteme GmbH
+				Möslestraße 21
+				Altach  Vorarlberg  6844
+				AT
+
+8C-1F-64   (hex)		Bavaria Digital Technik GmbH
+FB5000-FB5FFF     (base 16)		Bavaria Digital Technik GmbH
+				Rehbichler Weg 26
+				Pfronten  Bayern  87459
+				DE
+
+8C-1F-64   (hex)		KST technology
+DD7000-DD7FFF     (base 16)		KST technology
+				KST B/D 4-5, Wiryeseong-daero 12-gil
+				Songpa-gu  Seoul  05636
+				KR
+
+8C-1F-64   (hex)		NT
+CF4000-CF4FFF     (base 16)		NT
+				Azrieli Circular Tower132 Menachem Begin Rd
+				Tel Aviv    6701101
+				IL
+
+8C-1F-64   (hex)		BRS Sistemas Eletrônicos
+CAF000-CAFFFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491 / 204
+				Porto Alegre  RS  91380-000
+				BR
+
+8C-1F-64   (hex)		UniJet Co., Ltd.
+946000-946FFF     (base 16)		UniJet Co., Ltd.
+				53-24,Dongtansandan 6-gil
+				Hwaseong  Gyeonggi-do  18487
+				KR
+
+8C-1F-64   (hex)		BELIMO Automation AG
+90F000-90FFFF     (base 16)		BELIMO Automation AG
+				brunnenbachstrasse 1
+				Hinwil  Zurich  8340
+				CH
+
+8C-1F-64   (hex)		Sanchar Communication Systems
+685000-685FFF     (base 16)		Sanchar Communication Systems
+				X-47, okhla phase 2
+				delhi  delhi  110020
+				IN
+
+8C-1F-64   (hex)		DORLET SAU
+1BD000-1BDFFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+8C-1F-64   (hex)		SkyCell AG
+C05000-C05FFF     (base 16)		SkyCell AG
+				Hardturmstrasse 11
+				Zürich  ZH  8005
+				CH
+
+8C-1F-64   (hex)		CSIRO
+626000-626FFF     (base 16)		CSIRO
+				Cnr Vimiera and Pembroke Roads
+				Marsfield  NSW  2122
+				AU
+
+8C-1F-64   (hex)		STV Electronic GmbH
+3FC000-3FCFFF     (base 16)		STV Electronic GmbH
+				Hellweg 203-205
+				Schloss Holte  Nordrhein Westfalen  33758
+				DE
+
+8C-1F-64   (hex)		Foerster-Technik GmbH
+79B000-79BFFF     (base 16)		Foerster-Technik GmbH
+				Gerwigstraße 25
+				Engen  Baden-Württemberg  78234
+				DE
+
+8C-1F-64   (hex)		Sanchar Telesystems limited
+B55000-B55FFF     (base 16)		Sanchar Telesystems limited
+				A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI
+				New Delhi  Delhi  110020
+				IN
+
+70-B3-D5   (hex)		HKC Security Ltd.
+F1F000-F1FFFF     (base 16)		HKC Security Ltd.
+				Parkway Business Centre
+				Ballymount  Dublin  Dublin 24
+				IE
+
+8C-1F-64   (hex)		Thales Nederland BV
+FB4000-FB4FFF     (base 16)		Thales Nederland BV
+				PO Box 42
+				Hengelo  OV  7554 PA
+				NL
+
+70-B3-D5   (hex)		AADONA Communication Pvt Ltd
+ED9000-ED9FFF     (base 16)		AADONA Communication Pvt Ltd
+				1st Floor, Phoenix Tech Tower, Plot No. 14/46, IDA - Uppal
+				Hyderabad   Telangana  500039
+				IN
+
+8C-1F-64   (hex)		aelettronica group srl
+1A7000-1A7FFF     (base 16)		aelettronica group srl
+				via matteotti,22
+				gaggiano  milano  20083
+				IT
+
+8C-1F-64   (hex)		Zelp Ltd
+17C000-17CFFF     (base 16)		Zelp Ltd
+				102 St Pancras Way
+				London  Select  NW1 9ND
+				GB
+
+8C-1F-64   (hex)		Gridnt
+D53000-D53FFF     (base 16)		Gridnt
+				1166 XinLuo Street
+				JiNan  ShanDong  250100
+				CN
+
+8C-1F-64   (hex)		MTU Aero Engines AG
+825000-825FFF     (base 16)		MTU Aero Engines AG
+				Dachauer Straße 665
+				München  Bavaria  80995
+				DE
+
+8C-1F-64   (hex)		KC5 International Sdn Bhd
+F56000-F56FFF     (base 16)		KC5 International Sdn Bhd
+				253G-4-3, Premier Centre, Jalan Burma
+				Penang    10350
+				MY
+
+8C-1F-64   (hex)		M2M craft Co., Ltd.
+B67000-B67FFF     (base 16)		M2M craft Co., Ltd.
+				N23 bldg. 6F, Nishi 5-2-39, Kita 23-jo , Kita-ku
+				Sapporo  Hokkaido  001-0023
+				JP
+
+8C-1F-64   (hex)		Rich Source Precision IND., Co., LTD.
+0EE000-0EEFFF     (base 16)		Rich Source Precision IND., Co., LTD.
+				8F., No. 219, Sec. 2, New Taipei Blvd.
+				New Taipei City  Xinzhuang Dist  242
+				TW
+
+70-B3-D5   (hex)		SICPA SA - GSS
+4F8000-4F8FFF     (base 16)		SICPA SA - GSS
+				Route des Flumeaux 50
+				Prilly    1008
+				CH
+
+8C-1F-64   (hex)		Shanghai Wise-Tech Intelligent Technology Co.,Ltd.
+A0A000-A0AFFF     (base 16)		Shanghai Wise-Tech Intelligent Technology Co.,Ltd.
+				Room 408, building C, No. 154, Lane 953, Jianchuan Road, Minhang District
+				Shanghai  Shanghai  201100
+				CN
+
+8C-1F-64   (hex)		DEUTA Controls GmbH
+32F000-32FFFF     (base 16)		DEUTA Controls GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  NRW  51465
+				DE
+
+8C-1F-64   (hex)		ZIN TECHNOLOGIES
+E94000-E94FFF     (base 16)		ZIN TECHNOLOGIES
+				6745 Engle Road
+				Middleburg Heights  OH  44130
+				US
+
+8C-1F-64   (hex)		Aaronn Electronic GmbH
+7E2000-7E2FFF     (base 16)		Aaronn Electronic GmbH
+				Zeppelinstrasse 2
+				Puchheim    82178
+				DE
+
+8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
+39E000-39EFFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo    0504
+				NO
+
+8C-1F-64   (hex)		IDEX India Pvt Ltd
+F23000-F23FFF     (base 16)		IDEX India Pvt Ltd
+				Survey No 256 Nr Bombardier CircleGIDC Manjusar
+				Vadodara  Gujarat  391775
+				IN
+
+8C-1F-64   (hex)		TECHNOLOGIES BACMOVE INC.
+BE8000-BE8FFF     (base 16)		TECHNOLOGIES BACMOVE INC.
+				2610 rue du Gardenia
+				Quebec  Quebec  G1M 3P7
+				CA
+
+8C-1F-64   (hex)		Burk Technology
+1FE000-1FEFFF     (base 16)		Burk Technology
+				7 Beaver Brook road
+				Littleton  MA  01460
+				US
+
+8C-1F-64   (hex)		Upstart Power
+A9C000-A9CFFF     (base 16)		Upstart Power
+				153 Northboro Rd Suite #1
+				Southborough  MA  01772
+				US
+
+8C-1F-64   (hex)		Teq Diligent Product Solutions Pvt. Ltd.
+5AF000-5AFFFF     (base 16)		Teq Diligent Product Solutions Pvt. Ltd.
+				S-304, Shrinand Nagar -2, Makarba Road, Vejalpur
+				Ahmedabad  Gujarat  380051
+				IN
+
+8C-1F-64   (hex)		Iconet Services
+8DE000-8DEFFF     (base 16)		Iconet Services
+				 102 Spur Tank Rd. Chetpet
+				chennai  Tamil Nadu  600031
+				IN
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+1D0000-1D0FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+8C-1F-64   (hex)		Flextronics International Kft
+07A000-07AFFF     (base 16)		Flextronics International Kft
+				38. Zrinyi Str.
+				Zalaegerszeg  Zala  8900
+				HU
+
+8C-1F-64   (hex)		WAVES SYSTEM
+AC3000-AC3FFF     (base 16)		WAVES SYSTEM
+				14 rue Philippe Lebon
+				Sainte Luce Sur Loire  Loire Atlantique  44980
+				FR
+
+8C-1F-64   (hex)		EPC Energy Inc
+C51000-C51FFF     (base 16)		EPC Energy Inc
+				780 Montague Expy, Building 1, Suite 101
+				San Jose  CA  95131
+				US
+
+8C-1F-64   (hex)		TMY TECHNOLOGY INC.
+882000-882FFF     (base 16)		TMY TECHNOLOGY INC.
+				Rm. E, 3F., No. 3, Yuandong Rd., Banqiao Dist., 
+				New Taipei City 220,     220
+				TW
+
+8C-1F-64   (hex)		nanoTRONIX Computing Inc.
+764000-764FFF     (base 16)		nanoTRONIX Computing Inc.
+				1, Wood Road
+				Wilmington  DE   19806
+				US
+
+8C-1F-64   (hex)		TimeMachines Inc.
+25C000-25CFFF     (base 16)		TimeMachines Inc.
+				300 S 68th Street Place, Suite 100
+				Lincoln  NE  68510
+				US
+
+8C-1F-64   (hex)		Rhombus Europe
+B2B000-B2BFFF     (base 16)		Rhombus Europe
+				6 Peobrajenie str
+				Razlog  BLAGOEVGRAD  2760
+				BG
+
+8C-1F-64   (hex)		comelec
+AC4000-AC4FFF     (base 16)		comelec
+				1253 CD 908
+				belcodene  bouches du rhone  13720
+				FR
+
+8C-1F-64   (hex)		INHEMETER Co.,Ltd
+AEA000-AEAFFF     (base 16)		INHEMETER Co.,Ltd
+				8-9/F, Software Park, Southern Hi-Tech Zone, Nanshan District
+				SHENZHEN  Guangdong  518054
+				CN
+
+8C-1F-64   (hex)		GL TECH CO.,LTD
+BC9000-BC9FFF     (base 16)		GL TECH CO.,LTD
+				NO.Ten Changchun Road
+				ZHENGZHOU  HENAN  455000
+				CN
+
+8C-1F-64   (hex)		Integer.pl S.A.
+402000-402FFF     (base 16)		Integer.pl S.A.
+				Wielicka 28
+				Krakow    30-552
+				PL
+
+8C-1F-64   (hex)		EkspertStroyProekt
+A83000-A83FFF     (base 16)		EkspertStroyProekt
+				office 422, str.1, d.1, ul. Eniseyskaya
+				Moscow    129344
+				RU
+
+8C-1F-64   (hex)		Idneo Technologies S.A.U.
+8F6000-8F6FFF     (base 16)		Idneo Technologies S.A.U.
+				Carrer de Dalt, 3
+				Mollet del Valles  Barcelona  08100
+				ES
+
+8C-1F-64   (hex)		EERS GLOBAL TECHNOLOGIES INC.
+4E9000-4E9FFF     (base 16)		EERS GLOBAL TECHNOLOGIES INC.
+				355  PEEL ST. SUITE #710
+				MONTREAL  Quebec  H3C 2G9
+				CA
+
+8C-1F-64   (hex)		Bobeesc Co.
+DFB000-DFBFFF     (base 16)		Bobeesc Co.
+				100, Nonggongdanji-gil, Sokcho-si, Gangwon-do, Republic of Korea
+				sokcho  gangwon  24899
+				KR
+
+8C-1F-64   (hex)		Pixus Technologies Inc.
+E12000-E12FFF     (base 16)		Pixus Technologies Inc.
+				50 Bathurst Dr., Unit 6
+				Waterloo  Ontario  N2V 2C5
+				CA
+
+8C-1F-64   (hex)		InfraChen Technology Co., Ltd.
+0BB000-0BBFFF     (base 16)		InfraChen Technology Co., Ltd.
+				14F., No. 90, Xingde Rd., Sanchong Dist.
+				New Taipei City    24158
+				TW
+
+8C-1F-64   (hex)		ALZAJEL MODERN TELECOMMUNICATION
+FE9000-FE9FFF     (base 16)		ALZAJEL MODERN TELECOMMUNICATION
+				BOX: 3932
+				RUWI  MUSCAT  112
+				OM
+
+8C-1F-64   (hex)		Solid State Supplies Ltd
+43D000-43DFFF     (base 16)		Solid State Supplies Ltd
+				Ravensbank Business ParkHedera Road
+				Redditch    B98 9EY
+				GB
+
+8C-1F-64   (hex)		inomatic GmbH
+12E000-12EFFF     (base 16)		inomatic GmbH
+				Karl-Braun-Straße 12
+				Nordhorn    48531
+				DE
+
+8C-1F-64   (hex)		Kyushu Keisokki Co.,Ltd.
+34C000-34CFFF     (base 16)		Kyushu Keisokki Co.,Ltd.
+				1-6-18 Sanno Hakata-ku
+				Fukuoka-shi  Fukuoka  8120015
+				JP
+
+8C-1F-64   (hex)		miniDSP
+4AF000-4AFFFF     (base 16)		miniDSP
+				Unit 307, 13 Wang Hoi Road
+				Kowloon Bay  Kowloon  na
+				HK
+
+8C-1F-64   (hex)		Enerthing GmbH
+8D0000-8D0FFF     (base 16)		Enerthing GmbH
+				An der Schusterinsel 3a
+				Leverkusen    51379
+				DE
+
+8C-1F-64   (hex)		RAB Microfluidics R&D Company Ltd
+6E4000-6E4FFF     (base 16)		RAB Microfluidics R&D Company Ltd
+				75 Beech Manor, Stoneywood
+				Dyce    AB21 9AZ
+				GB
+
+8C-1F-64   (hex)		Shenzhen Link-All Technolgy Co., Ltd
+24C000-24CFFF     (base 16)		Shenzhen Link-All Technolgy Co., Ltd
+				Floor 5th, Block 9th, Sunny Industrial Zone, Xili Town, Shenzhen, China
+				Shenzhen  Guangdong  518108
+				CN
+
+8C-1F-64   (hex)		VA SYD
+C1E000-C1EFFF     (base 16)		VA SYD
+				Box 191
+				Malmö    201 21
+				SE
+
+8C-1F-64   (hex)		P5
+653000-653FFF     (base 16)		P5
+				Angol 38
+				Budapest    1149
+				HU
+
+70-B3-D5   (hex)		TIAMA
+0C4000-0C4FFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+8C-1F-64   (hex)		Shanghai Sizhong Information Technology Co., Ltd
+9CB000-9CBFFF     (base 16)		Shanghai Sizhong Information Technology Co., Ltd
+				Room 402 Building 13 No.518 XinZhuan Road Caohejing Hi-tech Park,Xinqiao Town?SongJiang District,ShangHai
+				Shanghai  Shanghai  201612
+				CN
+
+70-B3-D5   (hex)		TIAMA
+C4A000-C4AFFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+70-B3-D5   (hex)		Planet Innovation Products Inc.
+C75000-C75FFF     (base 16)		Planet Innovation Products Inc.
+				80 Technology Dr.
+				Irvine  CA  92618
+				US
+
+8C-1F-64   (hex)		American Fullway Corp.
+046000-046FFF     (base 16)		American Fullway Corp.
+				468 South San Dimas Ave
+				San Dimas  CA  91773
+				US
+
+8C-1F-64   (hex)		ard sa
+550000-550FFF     (base 16)		ard sa
+				Micropolis Bat Clematis
+				Gap  France  05000
+				FR
+
+8C-1F-64   (hex)		Beijing Yahong Century Technology Co., Ltd
+FD7000-FD7FFF     (base 16)		Beijing Yahong Century Technology Co., Ltd
+				Floor 3, Building 2, Yard 3, Gaolizhang Road, Haidian District
+				Beijing  Beijing  100095
+				CN
+
+8C-1F-64   (hex)		BRS Sistemas Eletrônicos
+D73000-D73FFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491 / 204
+				Porto Alegre  RS  91380-000
+				BR
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+F79000-F79FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		China Information Technology Designing &Consulting Institute Co.,Ltd.
+FA4000-FA4FFF     (base 16)		China Information Technology Designing &Consulting Institute Co.,Ltd.
+				NO.9, Shouti Nanlu, Haidian District
+				Beijing  Beijing  100048
+				CN
+
+8C-1F-64   (hex)		HOSCH Gebäude Automation Neue Produkte GmbH
+5E7000-5E7FFF     (base 16)		HOSCH Gebäude Automation Neue Produkte GmbH
+				Rheinstr 9
+				Teltow    14513
+				DE
+
+70-B3-D5   (hex)		LAMTEC Mess- und Regeltechnik für Feuerungen GmbH & Co. KG
+5BC000-5BCFFF     (base 16)		LAMTEC Mess- und Regeltechnik für Feuerungen GmbH & Co. KG
+				Wiesenstraße 6
+				Walldorf  Baden Württemberg  69190
+				DE
+
+8C-1F-64   (hex)		Cool Air Incorporated
+90C000-90CFFF     (base 16)		Cool Air Incorporated
+				1544 134th Ave NEHam Lake
+				Ham Lake  MN  55304
+				US
+
+8C-1F-64   (hex)		Fujian Satlink Electronics Co., Ltd
+A3B000-A3BFFF     (base 16)		Fujian Satlink Electronics Co., Ltd
+				Jiangnan Hi-tech Park Licheng District 
+				Quanzhou  Fujian  362000
+				CN
+
+8C-1F-64   (hex)		L-signature
+83D000-83DFFF     (base 16)		L-signature
+				44, Charyong-ro 48beon-gil, Uichang-gu, Changwon-si
+				Gyeongsangnam-do    51391
+				KR
+
+8C-1F-64   (hex)		PROFITT Ltd
+40D000-40DFFF     (base 16)		PROFITT Ltd
+				office 5H, block 14-2 lit.A, Raevsky av.
+				Saint-Petersburg    194064
+				RU
+
+70-B3-D5   (hex)		RF Code
+A51000-A51FFF     (base 16)		RF Code
+				9229 Waterford Centre Blvd #500
+				Austin  TX  78758
+				US
+
+8C-1F-64   (hex)		Numa Products LLC
+8EB000-8EBFFF     (base 16)		Numa Products LLC
+				80 Pine Street Floor 12
+				New York  NY  10005
+				US
+
+8C-1F-64   (hex)		Jemac Sweden AB
+DDE000-DDEFFF     (base 16)		Jemac Sweden AB
+				Trångsundsvägen 20A
+				Kalmar    39356
+				SE
+
+8C-1F-64   (hex)		Spyder Controls Corp.
+CAB000-CABFFF     (base 16)		Spyder Controls Corp.
+				7102-52 Street #10
+				Lacombe  AB  T4L 1Y9
+				CA
+
+8C-1F-64   (hex)		RF Code
+596000-596FFF     (base 16)		RF Code
+				9229 Waterford Centre Blvd #500
+				Austin  TX  78758
+				US
+
+8C-1F-64   (hex)		Packetalk LLC
+5CE000-5CEFFF     (base 16)		Packetalk LLC
+				163 Stuyvesant Avenue
+				Lyndhurst  NJ  07071
+				US
+
+8C-1F-64   (hex)		Bacancy Systems LLP
+317000-317FFF     (base 16)		Bacancy Systems LLP
+				15-16, Times Corporate Park, Near, Thaltej - Shilaj Rd, opp. COPPER STONE FLATS, Thaltej
+				Ahmedabad  Gujarat  380059
+				IN
+
+8C-1F-64   (hex)		Taiko Audio B.V.
+32C000-32CFFF     (base 16)		Taiko Audio B.V.
+				Zandbreeweg 6
+				Oldenzaal  Overijssel  7577 BZ
+				NL
+
+70-B3-D5   (hex)		Liberator Pty Ltd
+561000-561FFF     (base 16)		Liberator Pty Ltd
+				265 Gilbert Street
+				Adelaide     SA 5000
+				AU
+
+70-B3-D5   (hex)		DISMUNTEL SAL
+92C000-92CFFF     (base 16)		DISMUNTEL SAL
+				Pol ind cotes
+				Algemesi  Valencia  46680
+				ES
+
+70-B3-D5   (hex)		Chengdu Lingya Technology Co., Ltd.
+F4B000-F4BFFF     (base 16)		Chengdu Lingya Technology Co., Ltd.
+				8 Floor, Block A, West City International Phase II, 48 Shuxi Road, Jinniu District
+				Chengdu  Sichuan  610037
+				CN
+
+70-B3-D5   (hex)		xmi systems
+A6B000-A6BFFF     (base 16)		xmi systems
+				Sonnenbergstrasse 7
+				Hergiswil    6052
+				CH
+
+70-B3-D5   (hex)		Tecsag Innovation AG
+77A000-77AFFF     (base 16)		Tecsag Innovation AG
+				Verenastrasse 4b
+				Wollerau    8832
+				CH
+
+70-B3-D5   (hex)		Controles S.A.
+A6C000-A6CFFF     (base 16)		Controles S.A.
+				Rivera 3314
+				Montevideo  Montevideo  11300
+				UY
+
+70-B3-D5   (hex)		Vishay Nobel AB
+BFC000-BFCFFF     (base 16)		Vishay Nobel AB
+				Box 423
+				Karlskoga    SE-691 27
+				SE
+
+70-B3-D5   (hex)		Hyannis Port Research
+FB8000-FB8FFF     (base 16)		Hyannis Port Research
+				75 2nd Ave, Suite 210
+				Needham  MA  02494
+				US
+
+70-B3-D5   (hex)		Henschel-Robotics GmbH
+8C7000-8C7FFF     (base 16)		Henschel-Robotics GmbH
+				Mulchlingerstrasse, 67
+				Winterthur  Zuerich  8405
+				CH
+
+70-B3-D5   (hex)		Linc Technology Corporation dba Data-Linc Group 
+C84000-C84FFF     (base 16)		Linc Technology Corporation dba Data-Linc Group 
+				1125 12th Ave NW # B-2
+				Issaquah  WA  98027
+				US
+
+70-B3-D5   (hex)		Green Instruments A/S
+79F000-79FFFF     (base 16)		Green Instruments A/S
+				Erhvervsparken 29
+				Broenderslev    9700
+				DK
+
+70-B3-D5   (hex)		Solace Systems Inc.
+D31000-D31FFF     (base 16)		Solace Systems Inc.
+				535 Legget Drive,
+				Kanata  Ontario  K2K3B8
+				CA
+
+70-B3-D5   (hex)		Den Automation
+787000-787FFF     (base 16)		Den Automation
+				Unit 6.05, Metropolitan Wharf
+				London    E1W 3SS
+				GB
+
+70-B3-D5   (hex)		Airthings
+2A0000-2A0FFF     (base 16)		Airthings
+				Wergelandsveien 7
+				Oslo    0167
+				NO
+
+70-B3-D5   (hex)		Micatu
+67A000-67AFFF     (base 16)		Micatu
+				315 Daniel Zenker Drive
+				Horseheads  NY  14845
+				US
+
+70-B3-D5   (hex)		Mutelcor GmbH
+170000-170FFF     (base 16)		Mutelcor GmbH
+				An der Bastei, 42A
+				Duisburg  NRW  47259
+				DE
+
+70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+CDB000-CDBFFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+70-B3-D5   (hex)		WTE Limited
+C8A000-C8AFFF     (base 16)		WTE Limited
+				1 Pukeko Place, Southshore
+				Christchurch  Canterbury  8062
+				NZ
+
+70-B3-D5   (hex)		SHS SRL
+BD0000-BD0FFF     (base 16)		SHS SRL
+				Via Ponte di Sirico,48 
+				SAVIANO  NAPLES  80039
+				IT
+
+70-B3-D5   (hex)		Sadel S.p.A.
+A74000-A74FFF     (base 16)		Sadel S.p.A.
+				via Marino Serenari, 1
+				Castel Maggiore  Bologna  40013
+				IT
+
+70-B3-D5   (hex)		HORIBA ABX SAS
+B00000-B00FFF     (base 16)		HORIBA ABX SAS
+				rue du caducee
+				Montpellier  Herault  34000
+				FR
+
+70-B3-D5   (hex)		VITEC
+F17000-F17FFF     (base 16)		VITEC
+				99 rue pierre sémard
+				Chatillon  France  92320
+				FR
+
+70-B3-D5   (hex)		VITEC
+CDA000-CDAFFF     (base 16)		VITEC
+				99 rue pierre sémard
+				Chatillon  France  92320
+				FR
+
+70-B3-D5   (hex)		Potomac Electric Corporation
+E63000-E63FFF     (base 16)		Potomac Electric Corporation
+				One Westinghouse Plaza
+				Boston  MA  02136
+				US
+
+70-B3-D5   (hex)		Bintel AB
+970000-970FFF     (base 16)		Bintel AB
+				Mobilvägen 10
+				Lund  Skåne  22362
+				SE
+
+70-B3-D5   (hex)		HEITEC AG
+F48000-F48FFF     (base 16)		HEITEC AG
+				Dr.-Otto-Leich-Str. 16
+				Eckental  Bavaria  90542
+				DE
+
+70-B3-D5   (hex)		Simpulse
+DED000-DEDFFF     (base 16)		Simpulse
+				7 rue de la croix Martre
+				Palaiseau    91120
+				FR
+
+70-B3-D5   (hex)		Season Electronics Ltd
+65E000-65EFFF     (base 16)		Season Electronics Ltd
+				600 Nest Business Park 
+				Havant  Hampshire  PO9 5TL
+				GB
+
+70-B3-D5   (hex)		ATGS
+726000-726FFF     (base 16)		ATGS
+				11 POLBINA ST.
+				MOSCOW    109388
+				RU
+
+70-B3-D5   (hex)		GlooVir Inc.
+47A000-47AFFF     (base 16)		GlooVir Inc.
+				#413, 96 Gajeongbuk-Ro
+				Daejeon  Yuseong  34111
+				KR
+
+70-B3-D5   (hex)		SIPRO s.r.l.
+398000-398FFF     (base 16)		SIPRO s.r.l.
+				VIALE DELL'INDUSTRIA, 7
+				VERONA  VERONA  37135
+				IT
+
+70-B3-D5   (hex)		Profcon AB
+496000-496FFF     (base 16)		Profcon AB
+				Victor Hasselblads gata 9
+				Västra Frölunda    42131
+				SE
+
+70-B3-D5   (hex)		Private
+580000-580FFF     (base 16)		Private
+
+70-B3-D5   (hex)		Technological Application and Production One Member Liability Company (Tecapro company)
+456000-456FFF     (base 16)		Technological Application and Production One Member Liability Company (Tecapro company)
+				18A Cong Hoa street
+				Ho Chi Minh city  Ho Chi Minh city  700000
+				VN
+
+70-B3-D5   (hex)		KRONOTECH SRL
+D56000-D56FFF     (base 16)		KRONOTECH SRL
+				VIALE UNGHERIA 125
+				UDINE  ITALY/UDINE  33100
+				IT
+
+70-B3-D5   (hex)		LG Electronics
+884000-884FFF     (base 16)		LG Electronics
+				19, Yangje-daero 11gil, Seocho-gu
+				Seoul    06772
+				KR
+
+70-B3-D5   (hex)		RITEC
+AC0000-AC0FFF     (base 16)		RITEC
+				25 East Easy St
+				Simi Valley  CA  93065
+				US
+
+70-B3-D5   (hex)		Carlo Gavazzi Industri
+EFF000-EFFFFF     (base 16)		Carlo Gavazzi Industri
+				Over Hadstenvej 40
+				Hadsten  Denmark  8370
+				DK
+
+70-B3-D5   (hex)		GJD Manufacturing
+E25000-E25FFF     (base 16)		GJD Manufacturing
+				Unit 2, Birch Business Park, Whittle Lane
+				Heywood    OL10 2SX
+				GB
+
+70-B3-D5   (hex)		INFRASAFE/ ADVANTOR SYSTEMS 
+5BA000-5BAFFF     (base 16)		INFRASAFE/ ADVANTOR SYSTEMS 
+				12612 CHALLENGER PARKWAY 
+				ORLANDO  FL  32826
+				US
+
+70-B3-D5   (hex)		DORLET SAU
+8DF000-8DFFFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		Yite technology
+BC9000-BC9FFF     (base 16)		Yite technology
+				No. 56, Xiaobei Rd., North Dist
+				Tainan    70448
+				TW
+
+70-B3-D5   (hex)		Xiris Automation Inc.
+9BF000-9BFFFF     (base 16)		Xiris Automation Inc.
+				1016 Sutton Dr, Unit C5
+				Burlington  Ontario  L7L 6B8
+				CA
+
+70-B3-D5   (hex)		RCH ITALIA SPA 
+99B000-99BFFF     (base 16)		RCH ITALIA SPA 
+				VIA CENDON 39
+				SILEA   TREVISO   31057
+				IT
+
+70-B3-D5   (hex)		Thruvision Limited
+4FA000-4FAFFF     (base 16)		Thruvision Limited
+				121 Olympic Avenue, Milton Park
+				Abingdon  Oxfordshire  OX14 4SA
+				GB
+
+70-B3-D5   (hex)		DAVEY BICKFORD
+1A4000-1A4FFF     (base 16)		DAVEY BICKFORD
+				CHEMIN DE LA PYROTECHNIE
+				HERY    89550
+				FR
+
+70-B3-D5   (hex)		QUERCUS TECHNOLOGIES, S.L.
+40B000-40BFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
+				Av. Onze de Setembre 19
+				Reus  Tarragona  43203
+				ES
+
+70-B3-D5   (hex)		KeyW Corporation
+7CB000-7CBFFF     (base 16)		KeyW Corporation
+				7763 Old Telegraph Road
+				Severn  MD  21144
+				US
+
+70-B3-D5   (hex)		Transit Solutions, LLC.
+019000-019FFF     (base 16)		Transit Solutions, LLC.
+				114 West Grandview Avenue
+				Zelienople    16063
+				US
+
+70-B3-D5   (hex)		MULTIVOICE LLC
+B06000-B06FFF     (base 16)		MULTIVOICE LLC
+				224 S. Main St #401
+				Springville  UT  84660
+				US
+
+70-B3-D5   (hex)		AMS Controls, Inc.
+444000-444FFF     (base 16)		AMS Controls, Inc.
+				12180 Prichard Farm Road
+				Maryland Heights  MO  63043
+				US
+
+70-B3-D5   (hex)		3S - Sensors, Signal Processing, Systems GmbH
+982000-982FFF     (base 16)		3S - Sensors, Signal Processing, Systems GmbH
+				Saar-Lor-Lux-Straße 11
+				Saarbrücken    66115
+				DE
+
+70-B3-D5   (hex)		Leonardo Sistemi Integrati S.r.l.
+111000-111FFF     (base 16)		Leonardo Sistemi Integrati S.r.l.
+				Via Greto di Cornigliano, 6R
+				Genova    16152
+				IT
+
+70-B3-D5   (hex)		WoKa-Elektronik GmbH
+8A9000-8A9FFF     (base 16)		WoKa-Elektronik GmbH
+				Fulder Tor 30
+				Alsfeld  Hessen  36304
+				DE
+
+70-B3-D5   (hex)		Jeaway CCTV Security Ltd,.
+E00000-E00FFF     (base 16)		Jeaway CCTV Security Ltd,.
+				No. 24, Yifa St., Sanmin Dist.
+				Kaohsiung     807
+				TW
+
+70-B3-D5   (hex)		Flexsolution APS
+C54000-C54FFF     (base 16)		Flexsolution APS
+				Østervangsvej 39
+				Esbjerg N  Jylland  6715
+				DK
+
+70-B3-D5   (hex)		Ametek Solidstate Controls
+6DE000-6DEFFF     (base 16)		Ametek Solidstate Controls
+				875 DEARBORN DR
+				COLUMBUS  OH  43085-1586
+				US
+
+70-B3-D5   (hex)		Clean-Lasersysteme GmbH
+C5F000-C5FFFF     (base 16)		Clean-Lasersysteme GmbH
+				Dornkaulstr. 6-8
+				Herzogenrath  NRW  52134
+				DE
+
+70-B3-D5   (hex)		Altaneos
+69A000-69AFFF     (base 16)		Altaneos
+				Chaussée Verte, 93B
+				Saint-Georges    4470
+				BE
+
+70-B3-D5   (hex)		EXARA Group
+00C000-00CFFF     (base 16)		EXARA Group
+				Andropova pr. 18 1
+				Moscow    115432
+				RU
+
+70-B3-D5   (hex)		TrexEdge, Inc.
+0F2000-0F2FFF     (base 16)		TrexEdge, Inc.
+				1-2-2 Osaki
+				Shinagawa  Tokyo  1410032
+				JP
+
+70-B3-D5   (hex)		Zamir Recognition Systems Ltd.
+46E000-46EFFF     (base 16)		Zamir Recognition Systems Ltd.
+				Manachat Tech Park 1/22
+				Jerusalem    96951
+				IL
+
+70-B3-D5   (hex)		Gluon Solutions Inc.
+BA6000-BA6FFF     (base 16)		Gluon Solutions Inc.
+				6951 Southfront Road
+				Livermore  CA  94551
+				US
+
+70-B3-D5   (hex)		Bavaria Digital Technik GmbH
+F1C000-F1CFFF     (base 16)		Bavaria Digital Technik GmbH
+				Rehbichler Weg 26
+				Pfronten  Bayern  87459
+				DE
+
+70-B3-D5   (hex)		Vectology,Inc
+F50000-F50FFF     (base 16)		Vectology,Inc
+				UU bld 4F  2-5-2 Shinyokohama
+				Kouhoku-ku Yokohama  Kanagawa  2220033
+				JP
+
+70-B3-D5   (hex)		U&R GmbH Hardware- und Systemdesign
+BC5000-BC5FFF     (base 16)		U&R GmbH Hardware- und Systemdesign
+				In den Wiesen 2
+				Erbach    89155
+				DE
+
+70-B3-D5   (hex)		VITEC
+DD3000-DD3FFF     (base 16)		VITEC
+				99, rue Pierre Semard
+				CHATILLON    92320
+				FR
+
+70-B3-D5   (hex)		Loanguard T/A SE Controls
+2FC000-2FCFFF     (base 16)		Loanguard T/A SE Controls
+				Wellington Crescent
+				Lichfield  Staffordshire  WS13 8RZ
+				GB
+
+70-B3-D5   (hex)		Lupa Tecnologia e Sistemas Ltda
+0ED000-0EDFFF     (base 16)		Lupa Tecnologia e Sistemas Ltda
+				Rua Viscondessa de Cavalcanti, 50 - Poço Rico
+				Juiz de Fora  Minas Gerais  36020-070
+				BR
+
+70-B3-D5   (hex)		OBSERVER FOUNDATION
+633000-633FFF     (base 16)		OBSERVER FOUNDATION
+				Narva mnt 5
+				Tallinn city  Harju county  10117
+				EE
+
+70-B3-D5   (hex)		tiga.eleven GmbH
+FF2000-FF2FFF     (base 16)		tiga.eleven GmbH
+				Stallburggasse 2/37
+				Viennna    1010
+				AT
+
+70-B3-D5   (hex)		GETRALINE
+FD4000-FD4FFF     (base 16)		GETRALINE
+				15 RUE D'ANGIVILLER
+				VERSAILLES    78000
+				FR
+
+70-B3-D5   (hex)		Beijing Huanyu Zhilian Science &Technology Co., Ltd.
+DF5000-DF5FFF     (base 16)		Beijing Huanyu Zhilian Science &Technology Co., Ltd.
+				2/F 202-030, Building 2, No. 1, Gaolizhang Road, Haidian District,Beijing
+				Beijing  Beijing  100095
+				CN
+
+70-B3-D5   (hex)		Smart Controls LLC
+199000-199FFF     (base 16)		Smart Controls LLC
+				10000 St. Clair Ave.
+				Fairview Heights  IL  62208
+				US
+
+70-B3-D5   (hex)		MAC Solutions (UK) Ltd
+E6A000-E6AFFF     (base 16)		MAC Solutions (UK) Ltd
+				Units 6 & 7, Kingfisher Business Park, Arthur Street
+				Redditch  Worcestershire  B98 8LG
+				GB
+
+70-B3-D5   (hex)		Microsoft Research
+4AC000-4ACFFF     (base 16)		Microsoft Research
+				1 Microsoft Way
+				Redmond  WA  98052
+				US
+
+70-B3-D5   (hex)		THETA432
+E1F000-E1FFFF     (base 16)		THETA432
+				1730 E Holly Ave suite 805
+				El Segundo  CA  90245
+				US
+
+70-B3-D5   (hex)		DIEHL Connectivity Solutions
+1F1000-1F1FFF     (base 16)		DIEHL Connectivity Solutions
+				Stephanstraße 49
+				Nürnberg  Bayern  90478
+				DE
+
+70-B3-D5   (hex)		SA Photonics
+E17000-E17FFF     (base 16)		SA Photonics
+				120 Knowles Drive
+				Los Gatos  CA  95032
+				US
+
+70-B3-D5   (hex)		Elbit Systems of America
+B7E000-B7EFFF     (base 16)		Elbit Systems of America
+				4700 Marine Creek Parkway
+				Fort Worth  TX  76179
+				US
+
+70-B3-D5   (hex)		SHENZHEN WITLINK CO.,LTD.
+CF0000-CF0FFF     (base 16)		SHENZHEN WITLINK CO.,LTD.
+				1211 Room,Satellite building,Southern Hi-Tech Zone,Nanshan District
+				ShenZhen  Guangdong  518000
+				CN
+
+70-B3-D5   (hex)		ComNav Technology Ltd.
+E3B000-E3BFFF     (base 16)		ComNav Technology Ltd.
+				Buliding 2,No. 618  Chengliu Middle  Road
+				JiaDing District  Shanghai  201801
+				CN
+
+70-B3-D5   (hex)		Pengo Technology Co., Ltd
+DB7000-DB7FFF     (base 16)		Pengo Technology Co., Ltd
+				No. 13, Alley 7, Lane 533, Rongxing Road, Bade District
+				Taoyuan City    33463
+				TW
+
+70-B3-D5   (hex)		ifak technology + service GmbH
+264000-264FFF     (base 16)		ifak technology + service GmbH
+				Ludwig-Erhard-Allee 10
+				Karlsruhe    76131
+				DE
+
+70-B3-D5   (hex)		Edgeware AB
+B6E000-B6EFFF     (base 16)		Edgeware AB
+				Master Samuelsgatan 42
+				Stockholm    11157
+				SE
+
+70-B3-D5   (hex)		JNR Sports Holdings, LLC
+3E7000-3E7FFF     (base 16)		JNR Sports Holdings, LLC
+				656 NORTH RD
+				CANDIA  NH  03034-2027
+				US
+
+70-B3-D5   (hex)		Elcoma
+31F000-31FFFF     (base 16)		Elcoma
+				Rua Barbosa Lima, 149
+				Recife  Pernambuco  50030-330
+				BR
+
+70-B3-D5   (hex)		Wireless Systems Solutions LLC
+F86000-F86FFF     (base 16)		Wireless Systems Solutions LLC
+				630 Davis Drive Suite 250
+				Morrisville  NC  27560
+				US
+
+70-B3-D5   (hex)		Project H Pty Ltd
+114000-114FFF     (base 16)		Project H Pty Ltd
+				168 Abbotts Rd
+				Glen Innes  NSW  2370
+				AU
+
+70-B3-D5   (hex)		HeadsafeIP PTY LTD
+800000-800FFF     (base 16)		HeadsafeIP PTY LTD
+				231 Birrell st
+				bronte  nsw  2024
+				AU
+
+70-B3-D5   (hex)		Magnetek
+C70000-C70FFF     (base 16)		Magnetek
+				N49W13650 Campbell Dr
+				Menomonee Falls  WI  53051
+				US
+
+70-B3-D5   (hex)		4Jtech s.r.o.
+16A000-16AFFF     (base 16)		4Jtech s.r.o.
+				Ringhofferova 115/1
+				Prague  Czech Republic  155 21
+				CZ
+
+70-B3-D5   (hex)		Capgemini Netherlands
+0B5000-0B5FFF     (base 16)		Capgemini Netherlands
+				Reykjavikplein 1
+				Utrecht    3543KA
+				NL
+
+70-B3-D5   (hex)		Peloton Technology
+43E000-43EFFF     (base 16)		Peloton Technology
+				1060 La Avenida
+				Mountain View  CA  94043
+				US
+
+70-B3-D5   (hex)		ATL-SD
+B76000-B76FFF     (base 16)		ATL-SD
+				Ogawacho 1-1034-11
+				Kodaira  Tokyo  187-0032
+				JP
+
+70-B3-D5   (hex)		Motec Pty Ltd
+71E000-71EFFF     (base 16)		Motec Pty Ltd
+				121 Merrindale Drive
+				Croydon South  Victoria  3136
+				AU
+
+70-B3-D5   (hex)		DORLET SAU
+4F6000-4F6FFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		Ensotech Limited
+C2D000-C2DFFF     (base 16)		Ensotech Limited
+				Unit F,  6 Floor, Cheung Hing Shing Centre, No.23 Sha Tsui Road
+				Tsuen Wan    0000
+				HK
+
+70-B3-D5   (hex)		Unmukti Technology Pvt Ltd
+24A000-24AFFF     (base 16)		Unmukti Technology Pvt Ltd
+				2/288, Vishwas Khand, Gomti Nagar
+				Lucknow  Uttar Pradesh  226010
+				IN
+
+70-B3-D5   (hex)		Digital Instrument Transformers
+54A000-54AFFF     (base 16)		Digital Instrument Transformers
+				26 Bolshaya Vorobyovskaya, off 27
+				Ivanovo    153000
+				RU
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+1C9000-1C9FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Rhythm Engineering, LLC.
+57A000-57AFFF     (base 16)		Rhythm Engineering, LLC.
+				11228 Thompson Ave.
+				Lenexa  KS  66219
+				US
+
+70-B3-D5   (hex)		LG Electronics
+765000-765FFF     (base 16)		LG Electronics
+				LG Science Park, 10, Magokjungang 10-ro, GangSeo-gu
+				SEOUL    07796
+				KR
+
+70-B3-D5   (hex)		APG Cash Drawer, LLC
+77D000-77DFFF     (base 16)		APG Cash Drawer, LLC
+				5250 Industrial Blvd NE
+				Minneapolis  MN  55421
+				US
+
+70-B3-D5   (hex)		AvMap srlu
+048000-048FFF     (base 16)		AvMap srlu
+				Viale Zaccagna 6
+				Carrara    54033
+				IT
+
+70-B3-D5   (hex)		Parkalot Denmark ApS
+638000-638FFF     (base 16)		Parkalot Denmark ApS
+				Niels Jernes Vej 12
+				Aalborg East    9220
+				DK
+
+70-B3-D5   (hex)		Insitu, Inc
+DD2000-DD2FFF     (base 16)		Insitu, Inc
+				118 E Columbia River Way
+				Bingen  WA  98605
+				US
+
+70-B3-D5   (hex)		dds
+F21000-F21FFF     (base 16)		dds
+				606, Woolim Lions Valley 2Cha, 2, Gasan digital 1-ro Geumcheon-gu
+				Seoul    08591
+				KR
+
+70-B3-D5   (hex)		Kawasaki Robot Service,Ltd.
+FEE000-FEEFFF     (base 16)		Kawasaki Robot Service,Ltd.
+				2-1-9,Takatsukadai,Nishi-ku
+				Kobe  Hyogo  651-2271
+				JP
+
+70-B3-D5   (hex)		WiSuite USA
+19A000-19AFFF     (base 16)		WiSuite USA
+				13201 Stephens Road Suite E
+				Warren  MI  48089
+				US
+
+70-B3-D5   (hex)		Access Protocol Pty Ltd
+686000-686FFF     (base 16)		Access Protocol Pty Ltd
+				45 Sarich Court
+				Osborne Park  Western Australia  6017
+				AU
+
+70-B3-D5   (hex)		COPPERNIC SAS
+25F000-25FFFF     (base 16)		COPPERNIC SAS
+				185 avenue Archimede
+				Aix en Provence    13857
+				FR
+
+70-B3-D5   (hex)		KST technology
+8BB000-8BBFFF     (base 16)		KST technology
+				KST B/D 4-5, Wiryeseong-daero 12-gil
+				Songpa-gu  Seoul  05636
+				KR
+
+70-B3-D5   (hex)		Voleatech GmbH
+DA3000-DA3FFF     (base 16)		Voleatech GmbH
+				Grathwohlstr. 5
+				Reutlingen    72762
+				DE
+
+70-B3-D5   (hex)		Leder Elektronik Design
+22D000-22DFFF     (base 16)		Leder Elektronik Design
+				Bruchweg 10
+				Ketsch  Baden-Wuerttemberg  68775
+				DE
+
+70-B3-D5   (hex)		KDT
+748000-748FFF     (base 16)		KDT
+				126, Haeoreum-gil, Namsan-myeon
+				Chuncheon-si  Gangwon-do  200-911
+				KR
+
+70-B3-D5   (hex)		SODAQ
+ADC000-ADCFFF     (base 16)		SODAQ
+				Laapersveld 75
+				Hilversum  -  1213 VB
+				NL
+
+70-B3-D5   (hex)		Behr Technologies Inc
+C1F000-C1FFFF     (base 16)		Behr Technologies Inc
+				10 York Mills Road, Suite 610
+				Toronto  Ontario  M2P 2G4
+				CA
+
+70-B3-D5   (hex)		Communication Systems Solutions
+7F9000-7F9FFF     (base 16)		Communication Systems Solutions
+				6030 S 58th ST, STE C
+				Litcoln  NE  68516
+				US
+
+70-B3-D5   (hex)		APG Cash Drawer, LLC
+BCF000-BCFFFF     (base 16)		APG Cash Drawer, LLC
+				5250 Industrial Blvd NE
+				Minneapolis  MN  55421
+				US
+
+70-B3-D5   (hex)		ODAWARAKIKI AUTO-MACHINE MFG.CO.,LTD
+F88000-F88FFF     (base 16)		ODAWARAKIKI AUTO-MACHINE MFG.CO.,LTD
+				1-11-3 Nakacho
+				Odawara  Kanagawa  250-0005
+				JP
+
+70-B3-D5   (hex)		Beijing HuaLian Technology Co, Ltd.
+623000-623FFF     (base 16)		Beijing HuaLian Technology Co, Ltd.
+				Floor4 16C, north district of Ufida software park, No. 68 Beiqing road, HaiDian district.
+				Beijing  Beijing  100094
+				CN
+
+70-B3-D5   (hex)		UR FOG S.R.L.
+B8E000-B8EFFF     (base 16)		UR FOG S.R.L.
+				Via Toscana 38
+				San Mauro Torinese  TO  10099
+				IT
+
+70-B3-D5   (hex)		Samwell International Inc
+A71000-A71FFF     (base 16)		Samwell International Inc
+				No. 317-1, Sec.2, An Kang Rd., Hsintien Dist
+				New Taipei City    231
+				TW
+
+70-B3-D5   (hex)		PEEK TRAFFIC
+718000-718FFF     (base 16)		PEEK TRAFFIC
+				5401 N SAM HOUSTON PKWY W
+				HOUSTON  null  77086
+				US
+
+70-B3-D5   (hex)		EMAC, Inc.
+679000-679FFF     (base 16)		EMAC, Inc.
+				2390 EMAC Way
+				Carbondale  IL  62901
+				US
+
+70-B3-D5   (hex)		EDFelectronics JRMM Sp z o.o. sp.k.
+234000-234FFF     (base 16)		EDFelectronics JRMM Sp z o.o. sp.k.
+				Rybnicka 64
+				Radlin    44-310
+				PL
+
+70-B3-D5   (hex)		winsun AG
+F67000-F67FFF     (base 16)		winsun AG
+				Beeschi Mattenstrasse 2
+				Steg  Wallis  3940
+				CH
+
+70-B3-D5   (hex)		MI Inc.
+6FC000-6FCFFF     (base 16)		MI Inc.
+				6F, Toto building, 5-1-4, Toranomon, Minato-ku
+				Tokyo    1050001
+				JP
+
+70-B3-D5   (hex)		Orion Corporation
+97A000-97AFFF     (base 16)		Orion Corporation
+				2nd Fl., Shin-Showa No.5 Bldg., 1-5-15 Higashi-Sakata
+				Kimitsu  Chiba  299-1144
+				JP
+
+70-B3-D5   (hex)		Rehwork GmbH
+5A5000-5A5FFF     (base 16)		Rehwork GmbH
+				Ivo-Hauptmann-Ring 14
+				Hamburg    22159
+				DE
+
+70-B3-D5   (hex)		Dynamic Perspective GmbH
+2A8000-2A8FFF     (base 16)		Dynamic Perspective GmbH
+				Wehlistrasse 29/1/1
+				Vienna    1200
+				AT
+
+70-B3-D5   (hex)		Compusign Systems Pty Ltd
+050000-050FFF     (base 16)		Compusign Systems Pty Ltd
+				8/10 Clarice Road
+				Box Hill  Victoria  3128
+				AU
+
+70-B3-D5   (hex)		dA Tomato Limited
+966000-966FFF     (base 16)		dA Tomato Limited
+				8/2 Paribag, Hatirpool, Motaleb Tower, Tower 1, 11A
+				Dhaka  DAC  1000
+				BD
+
+70-B3-D5   (hex)		PROEL TSI s.r.l.
+5CF000-5CFFFF     (base 16)		PROEL TSI s.r.l.
+				VIA DIVISIONE JULIA, 10
+				MANZANO  UD  33044
+				IT
+
+70-B3-D5   (hex)		MiWave Consulting, LLC
+0E1000-0E1FFF     (base 16)		MiWave Consulting, LLC
+				1117 Paine Court
+				Raleigh  NC  27609
+				US
+
+70-B3-D5   (hex)		Vibrationmaster
+C35000-C35FFF     (base 16)		Vibrationmaster
+				Rue Du Commerce, Technoport 3A
+				FOETZ    3895
+				LU
+
+70-B3-D5   (hex)		BEIJING ZGH SECURITY RESEARCH INSTITUTE CO., LTD
+6C3000-6C3FFF     (base 16)		BEIJING ZGH SECURITY RESEARCH INSTITUTE CO., LTD
+				Room 1407, Tianchen Plaza, Chaoyang District
+				BeiJing  BeiJing  100020
+				CN
+
+70-B3-D5   (hex)		Keepen
+69C000-69CFFF     (base 16)		Keepen
+				12, rue Anselme
+				Saint-Ouen    93400
+				FR
+
+70-B3-D5   (hex)		VEILUX INC.
+CFC000-CFCFFF     (base 16)		VEILUX INC.
+				802 GREENVIEW DR. STE 200
+				GRAND PRAIRIE    75050
+				US
+
+70-B3-D5   (hex)		VEILUX INC.
+58E000-58EFFF     (base 16)		VEILUX INC.
+				802 GREENVIEW DR. STE 200
+				GRAND PRAIRIE    75050
+				US
+
+70-B3-D5   (hex)		Wit.com Inc
+434000-434FFF     (base 16)		Wit.com Inc
+				1251 Park Ave
+				Emeryville  CA  94608
+				US
+
+70-B3-D5   (hex)		ETA Technology Pvt Ltd
+A94000-A94FFF     (base 16)		ETA Technology Pvt Ltd
+				No. 484-D, 13th Cross, IV Phase, Peenya Industrial Area,
+				Bangalore  Karnataka  560058
+				IN
+
+70-B3-D5   (hex)		CRESPRIT INC.
+C38000-C38FFF     (base 16)		CRESPRIT INC.
+				D-315 ,177, Jeongjail-ro, Bundang-gu
+				Seongnam-si    13557
+				KR
+
+70-B3-D5   (hex)		Robotic Research, LLC
+EB4000-EB4FFF     (base 16)		Robotic Research, LLC
+				555 Quince Orchard Rd, Suite 300
+				Gaithersburg  MD  20878
+				US
+
+70-B3-D5   (hex)		NINGBO CRRC TIMES TRANSDUCER TECHNOLOGY CO., LTD
+907000-907FFF     (base 16)		NINGBO CRRC TIMES TRANSDUCER TECHNOLOGY CO., LTD
+				No.138 Zhenyong Road
+				Ningbo  Zhejiang  315021
+				CN
+
+70-B3-D5   (hex)		ETA-USA
+23F000-23FFFF     (base 16)		ETA-USA
+				16170 Vineyard Blvd.,  #180
+				Morgan Hill  CA  95037
+				US
+
+70-B3-D5   (hex)		MyoungSung System
+9B4000-9B4FFF     (base 16)		MyoungSung System
+				205, Manhae-ro, Danwon-gu
+				Ansan  Gyeonggi-do  15421
+				KR
+
+70-B3-D5   (hex)		RZB Rudolf Zimmermann, Bamberg GmbH
+D71000-D71FFF     (base 16)		RZB Rudolf Zimmermann, Bamberg GmbH
+				Rheinstraße 16
+				Bamberg  Bavaria  96052
+				DE
+
+70-B3-D5   (hex)		Hagiwara Solutions Co., Ltd.
+3C4000-3C4FFF     (base 16)		Hagiwara Solutions Co., Ltd.
+				2-5-12 Nishiki, Naka-ku
+				Nagoya-shi  Aichi-ken  460-0003
+				JP
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+B39000-B39FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 5
+				Dinkelsbühl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Sensefarm AB
+546000-546FFF     (base 16)		Sensefarm AB
+				Mobilvagen 10
+				Lund    22362
+				SE
+
+70-B3-D5   (hex)		ESPAI DE PRODUCCIÓ I ELECTRÓNI
+162000-162FFF     (base 16)		ESPAI DE PRODUCCIÓ I ELECTRÓNI
+				C/Johannes Gutenberg, 4 y 6
+				Paterna  Valencia  46980
+				ES
+
+70-B3-D5   (hex)		machineQ
+3E6000-3E6FFF     (base 16)		machineQ
+				1900 market st
+				philadelphia  PA  19103
+				US
+
+70-B3-D5   (hex)		shanghai qiaoqi zhinengkeji
+ED0000-ED0FFF     (base 16)		shanghai qiaoqi zhinengkeji
+				building 34, lane 333, laifang road
+				shanghai    201615
+				CN
+
+70-B3-D5   (hex)		Alere Technologies AS
+F52000-F52FFF     (base 16)		Alere Technologies AS
+				Kjelsaasveien 161
+				Oslo  Oslo  0382
+				NO
+
+70-B3-D5   (hex)		Advanced Ventilation Applications, Inc.
+DEA000-DEAFFF     (base 16)		Advanced Ventilation Applications, Inc.
+				2158 Gordon Ave.
+				Menlo Park  CA  94025
+				US
+
+70-B3-D5   (hex)		HORIZON TELECOM
+960000-960FFF     (base 16)		HORIZON TELECOM
+				6 rue de GUEUGNON
+				MONTCEAU LES MINES    71300
+				FR
+
+70-B3-D5   (hex)		Metatronics B.V.
+C7D000-C7DFFF     (base 16)		Metatronics B.V.
+				Torenallee 42-54
+				Eindhoven    5617 BD
+				NL
+
+70-B3-D5   (hex)		Fater Rasa Noor 
+5F1000-5F1FFF     (base 16)		Fater Rasa Noor 
+				Damavand St. , Between Khaghani and Ayat station, Hadi Building, no.499, second floor
+				Tehran  Tehran  0098
+				IR
+
+70-B3-D5   (hex)		Foxconn 4Tech
+A46000-A46FFF     (base 16)		Foxconn 4Tech
+				U Zámečku 27
+				Pardubice  Česká republika  53003
+				CZ
+
+70-B3-D5   (hex)		ADVEEZ
+7EE000-7EEFFF     (base 16)		ADVEEZ
+				12 RUE MICHEL LABROUSSE, BATIMENT 6
+				toulouse  FRANCE   31100
+				FR
+
+70-B3-D5   (hex)		LGM Ingénierie
+968000-968FFF     (base 16)		LGM Ingénierie
+				13 avenue Morane Saulnier
+				Vélizy-Villacoublay    78140
+				FR
+
+70-B3-D5   (hex)		D.T.S Illuminazione Srl 
+D7C000-D7CFFF     (base 16)		D.T.S Illuminazione Srl 
+				Via Fagnano Selve,  12 / 14
+				Misano Adriatico   Rimini   47843
+				IT
+
+70-B3-D5   (hex)		TATTILE SRL
+EEF000-EEFFFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		GL TECH CO.,LTD
+248000-248FFF     (base 16)		GL TECH CO.,LTD
+				No. Ten Changchun Road
+				ZHENGZHOU  HENAN  455000
+				CN
+
+70-B3-D5   (hex)		ard sa
+D6E000-D6EFFF     (base 16)		ard sa
+				Micropolis Bat Clematis
+				Gap  France  05000
+				FR
+
+70-B3-D5   (hex)		Duerkopp-Adler
+3C9000-3C9FFF     (base 16)		Duerkopp-Adler
+				Potsdamerstr. 190
+				Bielefeld    33719
+				DE
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+6B7000-6B7FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		RoboCore Tecnologia
+0AC000-0ACFFF     (base 16)		RoboCore Tecnologia
+				Estrada das Lagrimas 1986 sala 22
+				Sao Caetano do Sul  SP  09580500
+				BR
+
+70-B3-D5   (hex)		DEA SYSTEM SPA
+8FA000-8FAFFF     (base 16)		DEA SYSTEM SPA
+				VIA DELLA TECNICA 6
+				PIOVENE ROCCHETTE  VICENZA  36013
+				IT
+
+70-B3-D5   (hex)		Blue Marble Communications, Inc.
+77E000-77EFFF     (base 16)		Blue Marble Communications, Inc.
+				9520 Padgett St, Suite 101
+				San Diego  CA  92126
+				US
+
+70-B3-D5   (hex)		Enyx SA
+21C000-21CFFF     (base 16)		Enyx SA
+				8 rue greneta
+				Paris    75003
+				FR
+
+70-B3-D5   (hex)		SonoSound ApS
+656000-656FFF     (base 16)		SonoSound ApS
+				Malov Byvej 229
+				Malov  Hovedstaden  2760
+				DK
+
+70-B3-D5   (hex)		Andasis Elektronik San. ve Tic. A.Ş.
+D62000-D62FFF     (base 16)		Andasis Elektronik San. ve Tic. A.Ş.
+				Teknopark İstanbul,  Sanayi Mah, Teknopark Bulvarı, No:1/1C 1206 Pendik/İstanbul
+				İstanbul    34906
+				TR
+
+70-B3-D5   (hex)		RFRain LLC
+F5F000-F5FFFF     (base 16)		RFRain LLC
+				8 THE GREEN SUITE 4510
+				Dover  DE  19901
+				US
+
+70-B3-D5   (hex)		UMAN
+722000-722FFF     (base 16)		UMAN
+				Unit 12, Oxbow Crescent, Esturies, Century City
+				Cape Town  Western Cape  7441
+				ZA
+
+70-B3-D5   (hex)		SLAT
+920000-920FFF     (base 16)		SLAT
+				11 Rue Jean-Elysée DUPUY
+				Champagne au Mont d'Or  Rhône  69543
+				FR
+
+70-B3-D5   (hex)		Star Systems International
+5EF000-5EFFFF     (base 16)		Star Systems International
+				Unit 04, 12/F Vanta Industrial Centre, 21-33 Tai Lin Pai Road
+				Kwai Chung    852
+				HK
+
+70-B3-D5   (hex)		CT Company
+2D4000-2D4FFF     (base 16)		CT Company
+				Godovikova , 9, Moscow
+				Moscow  RUSSIA  129085
+				RU
+
+70-B3-D5   (hex)		Brakels IT
+54B000-54BFFF     (base 16)		Brakels IT
+				Veldboersweg 10a
+				Langeveen  Overijssel  7679TL
+				NL
+
+70-B3-D5   (hex)		GS Elektromedizinsiche Geräte G. Stemple GmbH
+144000-144FFF     (base 16)		GS Elektromedizinsiche Geräte G. Stemple GmbH
+				Hauswiesenstr. 26
+				Kaufering  Bayern  86916
+				DE
+
+70-B3-D5   (hex)		Chengdu Cove Technology CO.,LTD
+24E000-24EFFF     (base 16)		Chengdu Cove Technology CO.,LTD
+				6-419, Hi-tech Incubation Park, No.1480 Tianfu Ave
+				Chengdu  Sichuan  610000
+				CN
+
+70-B3-D5   (hex)		DORLET SAU
+8E3000-8E3FFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+70-B3-D5   (hex)		Cubitech
+7D0000-7D0FFF     (base 16)		Cubitech
+				4-6 Kiprou str
+				Tavros  Athens  17778
+				GR
+
+70-B3-D5   (hex)		Hangzhou AwareTec Technology Co., Ltd
+5DE000-5DEFFF     (base 16)		Hangzhou AwareTec Technology Co., Ltd
+				6th Floor,Building 2,No.307 Liuhe Road,Binjiang District,Hangzhou 城市： Hangzhou
+				Hangzhou  Zhejiang  310000
+				CN
+
+00-1B-C5   (hex)		Triax A/S
+0BB000-0BBFFF     (base 16)		Triax A/S
+				Bjornkaervej 3
+				Hornsyld  Denmark  8783
+				DK
+
+70-B3-D5   (hex)		APP Engineering, Inc.
+049000-049FFF     (base 16)		APP Engineering, Inc.
+				5234 Elmwood Avenue
+				Indianapolis  IN  46203
+				US
+
+70-B3-D5   (hex)		Shanghai YuanAn Environmental Protection Technology Co.,Ltd
+6D8000-6D8FFF     (base 16)		Shanghai YuanAn Environmental Protection Technology Co.,Ltd
+				Rm213/225,Oriental Pearl European City,No 285 East luochuan Road
+				Shanghai  Shanghai  200072
+				CN
+
+70-B3-D5   (hex)		Cardinal Health
+75E000-75EFFF     (base 16)		Cardinal Health
+				444 McDonnell Blvd.
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Monnit Corporation
+236000-236FFF     (base 16)		Monnit Corporation
+				3400 S West Temple
+				Salt Lake City    84115
+				US
+
+70-B3-D5   (hex)		Melecs EWS GmbH
+704000-704FFF     (base 16)		Melecs EWS GmbH
+				GZO-Technologiestrasse 1
+				Siegendorf     7011
+				AT
+
+70-B3-D5   (hex)		Triton Electronics Ltd
+7A5000-7A5FFF     (base 16)		Triton Electronics Ltd
+				Bigods Hall, Bigods Lane
+				DUNMOW  Essex  CM63BE
+				GB
+
+70-B3-D5   (hex)		Lab241 Co.,Ltd.
+21B000-21BFFF     (base 16)		Lab241 Co.,Ltd.
+				25Dong 241Ho, 97, Siheung-daero, Geumcheon-gu
+				Seoul  Seoul  08639
+				KR
+
+70-B3-D5   (hex)		Infodev Electronic Designers Intl.
+DBF000-DBFFFF     (base 16)		Infodev Electronic Designers Intl.
+				1995 rue Frank-Carrel Suite 202
+				Quebec  Quebec  G1N4H9
+				CA
+
+70-B3-D5   (hex)		KWS-Electronic GmbH
+EB3000-EB3FFF     (base 16)		KWS-Electronic GmbH
+				Sportplatzstrasse 1
+				Grosskarolinenfeld    D-83109
+				DE
+
+70-B3-D5   (hex)		Alere Technologies AS
+2AE000-2AEFFF     (base 16)		Alere Technologies AS
+				Kjelsaasveien 161
+				Oslo  Oslo  0382
+				NO
+
+70-B3-D5   (hex)		Intesens
+B17000-B17FFF     (base 16)		Intesens
+				425 rue Jean Rostand
+				labege    31670
+				FR
+
+70-B3-D5   (hex)		Shanghai Holystar Information Technology Co.,Ltd
+6E1000-6E1FFF     (base 16)		Shanghai Holystar Information Technology Co.,Ltd
+				8F Building A3 NO.1528 Gumei Rd Shanghai China PR
+				shanghai    200233
+				CN
+
+70-B3-D5   (hex)		CSM MACHINERY srl
+FE3000-FE3FFF     (base 16)		CSM MACHINERY srl
+				Via Cadore Mare, 25
+				Cimetta di Codognè  Treviso  31013
+				IT
+
+70-B3-D5   (hex)		Plantiga Technologies Inc
+525000-525FFF     (base 16)		Plantiga Technologies Inc
+				324-611 Alexander Street
+				Vancouver  British Columbia  V6A 1E1
+				CA
+
+70-B3-D5   (hex)		Renesas Electronics
+340000-340FFF     (base 16)		Renesas Electronics
+				2801 Scott Blvd
+				Santa Clara  CA  95050
+				US
+
+70-B3-D5   (hex)		HGH SYSTEMES INFRAROUGES
+853000-853FFF     (base 16)		HGH SYSTEMES INFRAROUGES
+				10 Rue Maryse Bastié
+				Igny  IDF  91430
+				FR
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+4E1000-4E1FFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		KMtronic ltd
+0AF000-0AFFFF     (base 16)		KMtronic ltd
+				Dobri Czintulov 28A str.
+				 Gorna Oryahovica  VT  5100
+				BG
+
+70-B3-D5   (hex)		FactoryLab B.V.
+5DC000-5DCFFF     (base 16)		FactoryLab B.V.
+				Lindtsedijk 54
+				Zwijndrecht  Zuid Holland  3336LE
+				NL
+
+70-B3-D5   (hex)		OLEDCOMM
+A43000-A43FFF     (base 16)		OLEDCOMM
+				10-12 avenue de l'Europe
+				Vélizy Villacoublay  Ile de France  78140
+				FR
+
+70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau AG
+D7B000-D7BFFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
+				Werner-von-Siemens-Str. 1
+				Offenburg  Ba-Wue  77656
+				DE
+
+70-B3-D5   (hex)		SHENZHEN WISEWING INTERNET TECHNOLOGY CO.,LTD
+94A000-94AFFF     (base 16)		SHENZHEN WISEWING INTERNET TECHNOLOGY CO.,LTD
+				No.826,Zone 1,Block B,Famous industrial product display purchasing center,Baoyuan Road,Xixiang,Bao'an Dis., Shenzhen,P.R.China
+				shenzhen  China  518102
+				CN
+
+70-B3-D5   (hex)		Savari Inc
+207000-207FFF     (base 16)		Savari Inc
+				2005 De la cruz blvd, st 111,
+				santa clara  CA  95050
+				US
+
+70-B3-D5   (hex)		Selex ES Inc.
+F5E000-F5EFFF     (base 16)		Selex ES Inc.
+				4221 Tudor Lane
+				Greensboro  NC  27410
+				US
+
+70-B3-D5   (hex)		iFreecomm Technology Co., Ltd
+032000-032FFF     (base 16)		iFreecomm Technology Co., Ltd
+				D401, NO.16 Langshan Road, Nanshan District
+				Shenzhen  Guangdong  518057
+				CN
+
+70-B3-D5   (hex)		QIAGEN Instruments AG
+A29000-A29FFF     (base 16)		QIAGEN Instruments AG
+				Garstligweg 8
+				Hombrechtikon  Zurich  8634
+				CH
+
+70-B3-D5   (hex)		True Networks Ltd.
+AF2000-AF2FFF     (base 16)		True Networks Ltd.
+				#401 51 Seongnam-Daero Bundang-gu
+				SEONGNAM-si  GYEONGGI-do  13636
+				KR
+
+70-B3-D5   (hex)		EPSOFT Co., Ltd
+A3A000-A3AFFF     (base 16)		EPSOFT Co., Ltd
+				301, Bupyeong-daero, Bupyeong-gu
+				Incheon    21315
+				KR
+
+70-B3-D5   (hex)		Visual Fan
+FD6000-FD6FFF     (base 16)		Visual Fan
+				Brazilor nr.61
+				Brasov  Brasov  500313
+				RO
+
+70-B3-D5   (hex)		InOut Communication Systems
+FF9000-FF9FFF     (base 16)		InOut Communication Systems
+				via Nobel, 10
+				Noventa di Piave  Venezia  30020
+				IT
+
+70-B3-D5   (hex)		Sensor 42
+BFB000-BFBFFF     (base 16)		Sensor 42
+				1165 Linda Vista, #110
+				San Marcos  CA  92078
+				US
+
+70-B3-D5   (hex)		Electrolux
+7A6000-7A6FFF     (base 16)		Electrolux
+				Corso Lino Zanussi 24
+				Porcia  PORDENONE  33080
+				IT
+
+70-B3-D5   (hex)		Movimento Group AB
+357000-357FFF     (base 16)		Movimento Group AB
+				45550 Commerce Center Drive
+				Plymouth  MI  48170
+				US
+
+70-B3-D5   (hex)		IDEM INC.
+DC6000-DC6FFF     (base 16)		IDEM INC.
+				17302 Daimler St. STE A
+				Irvine  CA  92614
+				US
+
+70-B3-D5   (hex)		MANSION INDUSTRY CO., LTD.
+734000-734FFF     (base 16)		MANSION INDUSTRY CO., LTD.
+				5F., No.6, Siwei Ln., Zhongzheng Rd., Xindian Dist.,
+				New Taipei City     231
+				TW
+
+70-B3-D5   (hex)		Wavemed srl
+813000-813FFF     (base 16)		Wavemed srl
+				Via di campo gillaro 29/a
+				San Cesareo  Roma  00030
+				IT
+
+70-B3-D5   (hex)		Spaceflight Industries
+98F000-98FFFF     (base 16)		Spaceflight Industries
+				1505 Westlake Ave N, Ste 600
+				Seattle  WA  98109
+				US
+
+70-B3-D5   (hex)		Keycom Corp.
+C37000-C37FFF     (base 16)		Keycom Corp.
+				3-39-14 Minamiotsuka
+				Toshima-ku  Tokyo  170-0005
+				JP
+
+70-B3-D5   (hex)		Enerwise Solutions Ltd.
+99C000-99CFFF     (base 16)		Enerwise Solutions Ltd.
+				Flat/Room 510, 5/F, Wayson Comm Building
+				Hong Kong  none  none
+				HK
+
+70-B3-D5   (hex)		Scrona AG
+00D000-00DFFF     (base 16)		Scrona AG
+				Technoparkstrasse 1
+				Zurich  Zurich  8005
+				CH
+
+70-B3-D5   (hex)		Axxess Identification Ltd
+616000-616FFF     (base 16)		Axxess Identification Ltd
+				27-28 Shrivenham Hundred Business Park
+				Swindon  Wiltshire  SN6 8TZ
+				GB
+
+70-B3-D5   (hex)		RIKEN OPTECH CORPORATION
+63E000-63EFFF     (base 16)		RIKEN OPTECH CORPORATION
+				5615-1 Taguchi
+				Saku-city  Nagano  384-0412
+				JP
+
+70-B3-D5   (hex)		Asystems Corporation
+255000-255FFF     (base 16)		Asystems Corporation
+				10F., No.70, Sec.1, Keelung Rd
+				Taipei  Taiwan  11070
+				TW
+
+70-B3-D5   (hex)		Arrowvale Electronics
+B07000-B07FFF     (base 16)		Arrowvale Electronics
+				Shawbank Road
+				Redditch  Worcestershire  B98 8YN
+				GB
+
+70-B3-D5   (hex)		NAS Australia P/L
+E91000-E91FFF     (base 16)		NAS Australia P/L
+				28 Newstead Terrace
+				Newstead  QLD  4006
+				AU
+
+70-B3-D5   (hex)		Data Informs LLC
+566000-566FFF     (base 16)		Data Informs LLC
+				9838 Nevada Avenue
+				Chatsworth  CA  91311-4040
+				US
+
+70-B3-D5   (hex)		MI Inc.
+D26000-D26FFF     (base 16)		MI Inc.
+				6F, Toto building, 5-1-4, Toranomon, Minato-ku
+				Tokyo    1050001
+				JP
+
+70-B3-D5   (hex)		Shangdong Bosure Automation Technology Ltd
+A88000-A88FFF     (base 16)		Shangdong Bosure Automation Technology Ltd
+				No.1 Shunhua Road, Gaoxin District
+				Jinan  Shangdong  250101
+				CN
+
+70-B3-D5   (hex)		Maharsystem
+72E000-72EFFF     (base 16)		Maharsystem
+				No 1, 5th Alley ,Ozgol , Artesh Blvd
+				Tehran  Tehran  1694937141
+				IR
+
+70-B3-D5   (hex)		HumanEyes Technologies Ltd.
+9DD000-9DDFFF     (base 16)		HumanEyes Technologies Ltd.
+				Neve Ilan
+				Neve Ilan    90850
+				IL
+
+70-B3-D5   (hex)		Shenzhen  SanYeCao  Electronics  Co.,Ltd
+E7B000-E7BFFF     (base 16)		Shenzhen  SanYeCao  Electronics  Co.,Ltd
+				505, 5/F, Dahong High Tech Industry Park, No.6-18, Xinhe Road, Shajing, Baoan District,   Shenzhen
+				SHENZHEN  GUANGDONG  518100
+				CN
+
+70-B3-D5   (hex)		RMA Mess- und Regeltechnik GmbH & Co.KG
+DF8000-DF8FFF     (base 16)		RMA Mess- und Regeltechnik GmbH & Co.KG
+				Forsthausstr. 3
+				Rheinau    77866
+				DE
+
+70-B3-D5   (hex)		Cellier Domesticus inc
+E96000-E96FFF     (base 16)		Cellier Domesticus inc
+				840 5E avenue
+				Montreal  Quebec  H9c1j5
+				CA
+
+70-B3-D5   (hex)		COMM-connect A/S
+EED000-EEDFFF     (base 16)		COMM-connect A/S
+				Raasigvangen 2
+				Slangerup    DK-3550
+				DK
+
+70-B3-D5   (hex)		Plasmapp Co.,Ltd.
+E18000-E18FFF     (base 16)		Plasmapp Co.,Ltd.
+				83, Jukdong-ro, Yuseong-gu,
+				Daejeon    KS015
+				KR
+
+70-B3-D5   (hex)		Harborside Technology
+845000-845FFF     (base 16)		Harborside Technology
+				140 Mcknitt Pl
+				Garner  NC  27529
+				US
+
+70-B3-D5   (hex)		Rockwell Collins Canada
+839000-839FFF     (base 16)		Rockwell Collins Canada
+				30 Edgewater Street, Suite 104
+				Ottawa  ON  K2L1V8
+				CA
+
+70-B3-D5   (hex)		HEITEC AG
+557000-557FFF     (base 16)		HEITEC AG
+				Dr.-Otto-Leich-Str. 16
+				Eckental  Bavaria  90542
+				DE
+
+70-B3-D5   (hex)		ND METER
+68C000-68CFFF     (base 16)		ND METER
+				228 BOLTON ROAD
+				BRADFORD    BD3 0QW
+				GB
+
+70-B3-D5   (hex)		CRDE
+C42000-C42FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		DIGIVERV INC
+548000-548FFF     (base 16)		DIGIVERV INC
+				1515 Evanvale Dr
+				Allen  TX  75013
+				US
+
+70-B3-D5   (hex)		Council Rock
+7C9000-7C9FFF     (base 16)		Council Rock
+				11 Centre Park
+				Rochester    14614
+				US
+
+70-B3-D5   (hex)		Blink Services AB
+2A1000-2A1FFF     (base 16)		Blink Services AB
+				Generalsgatan 5
+				Malmö    211 33
+				SE
+
+70-B3-D5   (hex)		KST technology
+CB3000-CB3FFF     (base 16)		KST technology
+				KST B/D 4-5, Wiryeseong-daero 12-gil
+				Songpa-gu  Seoul  05636
+				KR
+
+70-B3-D5   (hex)		Boutronic
+359000-359FFF     (base 16)		Boutronic
+				Edisonstraat 24
+				's-Gravenzande  Nederland  2691GT
+				NL
+
+70-B3-D5   (hex)		Abalance Corporation
+07F000-07FFFF     (base 16)		Abalance Corporation
+				Tennozu First Tower 5F, 2-2-4 Higashishinagawa
+				Shinagawa-ku  Tokyo  140-0002
+				JP
+
+70-B3-D5   (hex)		HUGEL GmbH
+04E000-04EFFF     (base 16)		HUGEL GmbH
+				Seestrasse 4
+				Oberrieden  ZH  8942
+				CH
+
+70-B3-D5   (hex)		EZSYS Co., Ltd.
+D43000-D43FFF     (base 16)		EZSYS Co., Ltd.
+				E-914,E-915, 60, Haan-ro(Soha-dong, Gwangmyeong SK Technopark)
+				 Gwangmyeong-si  Gyeonggi-do  14322
+				KR
+
+70-B3-D5   (hex)		SRS Group s.r.o.
+95B000-95BFFF     (base 16)		SRS Group s.r.o.
+				Rybnicna 36/D
+				Bratislava    83107
+				SK
+
+70-B3-D5   (hex)		JASCO Applied Sciences Canada Ltd
+7F7000-7F7FFF     (base 16)		JASCO Applied Sciences Canada Ltd
+				32 Troop Avenue, Suite 202
+				Dartmouth  Nova Scotia  B3B 1Z1
+				CA
+
+70-B3-D5   (hex)		CRDE
+6B2000-6B2FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		RIOT
+715000-715FFF     (base 16)		RIOT
+				295 Kent ave
+				ferndale, Randburg  Gauteng  2194
+				ZA
+
+70-B3-D5   (hex)		Design SHIFT
+FDB000-FDBFFF     (base 16)		Design SHIFT
+				3475 Edison Way, Suite G
+				Menlo Park  CA  94025
+				US
+
+70-B3-D5   (hex)		Sensorberg GmbH
+6AF000-6AFFFF     (base 16)		Sensorberg GmbH
+				Leipziger Str. 126
+				Berlin  Berlin  10117
+				DE
+
+70-B3-D5   (hex)		Rheonics GmbH
+D20000-D20FFF     (base 16)		Rheonics GmbH
+				Rheonics GmbH, Technoparkstr. 2
+				Winterthur  Schweiz  8406
+				CH
+
+70-B3-D5   (hex)		Emtel System Sp. z o.o.
+969000-969FFF     (base 16)		Emtel System Sp. z o.o.
+				Promienista 11
+				Poznan    60-288
+				PL
+
+70-B3-D5   (hex)		Amphenol Advanced Sensors
+A9A000-A9AFFF     (base 16)		Amphenol Advanced Sensors
+				Amphenol Interconnect India Private Ltd, MAHAVEER TECHNO PARK  APIIC, Plot no.6, Survey No.64, Software Units layout, Hi-tech City, Madhapur,
+				HYDERABAD  Telangana  500081
+				IN
+
+70-B3-D5   (hex)		DWQ Informatikai Tanacsado es Vezerlestechnikai KFT
+B48000-B48FFF     (base 16)		DWQ Informatikai Tanacsado es Vezerlestechnikai KFT
+				Bathoty Istvan str 14
+				Rackeve    2300
+				HU
+
+70-B3-D5   (hex)		Skyriver Communications Inc.
+C22000-C22FFF     (base 16)		Skyriver Communications Inc.
+				7310 Miramar Rd. #600
+				San Diego  CA  92126
+				US
+
+70-B3-D5   (hex)		K&J Schmittschneider AG
+9B3000-9B3FFF     (base 16)		K&J Schmittschneider AG
+				Wiesholzstrasse 452
+				Ramsen  Schaffhausen  8262
+				CH
+
+70-B3-D5   (hex)		Meta Computing Services, Corp
+E9A000-E9AFFF     (base 16)		Meta Computing Services, Corp
+				5795 S Sandhill Rd Suite F
+				Las Vegas  NV  89120
+				US
+
+70-B3-D5   (hex)		ExSens Technology (Pty) Ltd.
+14A000-14AFFF     (base 16)		ExSens Technology (Pty) Ltd.
+				39 Kelly Road, The Palisades Business Park Unit C1
+				Boksburg  Gauteng  1459
+				ZA
+
+70-B3-D5   (hex)		Digital Domain
+4E7000-4E7FFF     (base 16)		Digital Domain
+				1700 Main St Ste 222
+				Washougal  WA  98671
+				US
+
+70-B3-D5   (hex)		Tieline Research Pty Ltd
+20F000-20FFFF     (base 16)		Tieline Research Pty Ltd
+				PO Box 2092
+				MALAGA  Western Australia  6944
+				AU
+
+70-B3-D5   (hex)		Herrmann Datensysteme GmbH
+B04000-B04FFF     (base 16)		Herrmann Datensysteme GmbH
+				Gewerbepark 10
+				Großpostwitz OT Ebendörfel    02692
+				DE
+
+70-B3-D5   (hex)		Symboticware Incorporated
+945000-945FFF     (base 16)		Symboticware Incorporated
+				1545 Maley Drive
+				Sudbury  ON  P3A 4R7
+				CA
+
+70-B3-D5   (hex)		ASPT, INC.
+192000-192FFF     (base 16)		ASPT, INC.
+				303-ho B-dong Songdosmartvalley, 30 Songdomirae-ro Yeonsu-gu
+				Incheon    21990
+				KR
+
+70-B3-D5   (hex)		CONTROL SYSTEMS Srl
+229000-229FFF     (base 16)		CONTROL SYSTEMS Srl
+				Via del Brolo, 14
+				Cremona  CR  26100
+				IT
+
+70-B3-D5   (hex)		SHANGHAI CHENZHU INSTRUMENT CO., LTD.
+46C000-46CFFF     (base 16)		SHANGHAI CHENZHU INSTRUMENT CO., LTD.
+				Building 6, 201 Minyi Road, Songjiang District
+				Shanghai    201612
+				CN
+
+70-B3-D5   (hex)		Applied Satellite Engineering
+A48000-A48FFF     (base 16)		Applied Satellite Engineering
+				16559 N 92nd, Suite 101
+				Scottsdale  AZ  85260
+				US
+
+70-B3-D5   (hex)		LINEAGE POWER PVT LTD.,
+479000-479FFF     (base 16)		LINEAGE POWER PVT LTD.,
+				186/3, #117, HOODY VILLAGE MAHADEVAPURA POST, WHITEFIELD RD.          
+				BANGALORE  KAR  560048
+				IN
+
+70-B3-D5   (hex)		EA Elektroautomatik GmbH & Co. KG
+CE1000-CE1FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+70-B3-D5   (hex)		System 11 Sp. z o.o.
+9DE000-9DEFFF     (base 16)		System 11 Sp. z o.o.
+				Wieniawskiego 18
+				Chorzow    41-506
+				PL
+
+70-B3-D5   (hex)		KANOA INC
+A47000-A47FFF     (base 16)		KANOA INC
+				760 Bryant Street
+				San Francisco  CA  94107
+				US
+
+70-B3-D5   (hex)		Biwave Technologies, Inc.
+168000-168FFF     (base 16)		Biwave Technologies, Inc.
+				3F-6, No. 77, Keelung Rd., Sec. 2
+				Taipei     11491 
+				TW
+
+70-B3-D5   (hex)		Mencom Corporation
+596000-596FFF     (base 16)		Mencom Corporation
+				5750 McEver Road
+				Oakwood  GA  30566
+				US
+
+70-B3-D5   (hex)		Fiem Industries Ltd.
+495000-495FFF     (base 16)		Fiem Industries Ltd.
+				Unit VII, Plot No. 1915, Rai Industrial Estate, Phase-V
+				Sonepat  Haryana  131029
+				IN
+
+70-B3-D5   (hex)		Wyebot, Inc.
+8C3000-8C3FFF     (base 16)		Wyebot, Inc.
+				2 Mount Royal Ave.
+				Marlborough  MA  01752
+				US
+
+70-B3-D5   (hex)		Advanced Vision Technology Ltd
+E50000-E50FFF     (base 16)		Advanced Vision Technology Ltd
+				Thames House, Mere Park
+				Marlow  Buckinghamshire  SL7 1PB
+				GB
+
+70-B3-D5   (hex)		Foerster-Technik GmbH
+2B4000-2B4FFF     (base 16)		Foerster-Technik GmbH
+				Gerwigstraße 25
+				Engen  Baden-Württemberg  78234
+				DE
+
+70-B3-D5   (hex)		China Entropy Co., Ltd.
+E16000-E16FFF     (base 16)		China Entropy Co., Ltd.
+				Haidian District
+				Beijing    100085
+				CN
+
+70-B3-D5   (hex)		ard sa
+489000-489FFF     (base 16)		ard sa
+				Micropolis Bat Clematis
+				Gap  France  05000
+				FR
+
+70-B3-D5   (hex)		ITS Industrial Turbine Services GmbH
+9A1000-9A1FFF     (base 16)		ITS Industrial Turbine Services GmbH
+				Fabriksplatz 1
+				Steyrermuehl  Upper Austria  4662
+				AT
+
+70-B3-D5   (hex)		CG-WIRELESS
+BF3000-BF3FFF     (base 16)		CG-WIRELESS
+				LE MOUSTOIR
+				PLOGASTEL SAINT GERMAIN    29710
+				FR
+
+70-B3-D5   (hex)		Vishay Nobel AB
+873000-873FFF     (base 16)		Vishay Nobel AB
+				Box 423
+				Karlskoga    SE-691 27
+				SE
+
+70-B3-D5   (hex)		DesignA Electronics Limited
+661000-661FFF     (base 16)		DesignA Electronics Limited
+				Unit 6
+				Christchurch  New Zealand  8011
+				NZ
+
+70-B3-D5   (hex)		Visualware, Inc.
+2A2000-2A2FFF     (base 16)		Visualware, Inc.
+				937 SIERRA DRIVE
+				TURLOCK  CA  95380
+				US
+
+70-B3-D5   (hex)		Sumer Data S.L
+011000-011FFF     (base 16)		Sumer Data S.L
+				Francisco Ayala,2
+				Rivas-Vaciamadrid  Madrid  28522
+				ES
+
+70-B3-D5   (hex)		LG Electronics
+927000-927FFF     (base 16)		LG Electronics
+				2621, Nuambusunhwan-ro, Gangnam-gu,
+				Seoul    135-860
+				KR
+
+70-B3-D5   (hex)		Intervala
+3F0000-3F0FFF     (base 16)		Intervala
+				700 Braddock Avenue
+				East Pittsburgh  PA  15112-1242
+				US
+
+70-B3-D5   (hex)		HORIBA ABX SAS
+AB8000-AB8FFF     (base 16)		HORIBA ABX SAS
+				rue du caducee
+				Montpellier  Herault  34000
+				FR
+
+70-B3-D5   (hex)		International Center for Elementary Particle Physics, The University of Tokyo
+F9E000-F9EFFF     (base 16)		International Center for Elementary Particle Physics, The University of Tokyo
+				7-3-1 Hongo, Bunkyo-ku
+				Tokyo    113-0033
+				JP
+
+70-B3-D5   (hex)		Star Electronics GmbH & Co. KG 
+3BF000-3BFFFF     (base 16)		Star Electronics GmbH & Co. KG 
+				Jahnstraße 86 
+				Göppingen  BW  73037
+				DE
+
+70-B3-D5   (hex)		CableLabs
+BD1000-BD1FFF     (base 16)		CableLabs
+				858 Coal Creek Circle
+				Louisville  CO  80027
+				US
+
+70-B3-D5   (hex)		Guangxi Hunter Information Industry Co.,Ltd
+397000-397FFF     (base 16)		Guangxi Hunter Information Industry Co.,Ltd
+				Hunter Building,Creative Industry Park In Guilin,China
+				Guilin  Guangxi Province  541004
+				CN
+
+70-B3-D5   (hex)		LOOK EASY INTERNATIONAL LIMITED
+0C2000-0C2FFF     (base 16)		LOOK EASY INTERNATIONAL LIMITED
+				4th Floor, No. 551, Guang-Fu South Road
+				Taipei  Xinyi District  11074
+				TW
+
+70-B3-D5   (hex)		ATX Networks Corp
+51C000-51CFFF     (base 16)		ATX Networks Corp
+				1-501 Clements Road West
+				Ajax  Ontario  L1s7H4
+				CA
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+0E8000-0E8FFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		Sierra Pacific Innovations Corp
+EBE000-EBEFFF     (base 16)		Sierra Pacific Innovations Corp
+				6620 S Tenaya Way
+				 Las Vegas    89113
+				US
+
+70-B3-D5   (hex)		Terragene S.A
+9CE000-9CEFFF     (base 16)		Terragene S.A
+				Guemes 2879
+				Rosario  Santa fe  2000
+				AR
+
+70-B3-D5   (hex)		FINANCIERE DE L'OMBREE (eolane)
+31C000-31CFFF     (base 16)		FINANCIERE DE L'OMBREE (eolane)
+				La Fresnay
+				Le Fresne sur Loire    49123
+				FR
+
+70-B3-D5   (hex)		OES Inc.
+1B8000-1B8FFF     (base 16)		OES Inc.
+				4056 Blakie Road
+				London  ON  N6L1P7
+				CA
+
+70-B3-D5   (hex)		DKS Dienstl.ges. f. Komm.anl. d. Stadt- u. Reg.verk. mbH
+EF8000-EF8FFF     (base 16)		DKS Dienstl.ges. f. Komm.anl. d. Stadt- u. Reg.verk. mbH
+				Robert-Perthel-Str. 79
+				Cologne    50739
+				DE
+
+70-B3-D5   (hex)		BRUSHIES
+85A000-85AFFF     (base 16)		BRUSHIES
+				6402 Langer Lane
+				Lino Lakes  MN  55038
+				US
+
+70-B3-D5   (hex)		Quan International Co., Ltd.
+724000-724FFF     (base 16)		Quan International Co., Ltd.
+				4F, No. 196, Hsinghu 3rd Rd., Neihu District
+				Taipei    11494
+				TW
+
+70-B3-D5   (hex)		Key Chemical & Equipment Company
+427000-427FFF     (base 16)		Key Chemical & Equipment Company
+				13195 49th Street North Suite H
+				Clearwater  FL  33762
+				US
+
+70-B3-D5   (hex)		Layer Logic Inc
+C5C000-C5CFFF     (base 16)		Layer Logic Inc
+				5412 Courseview Drive, suite 100
+				Mason  OH  45040
+				US
+
+70-B3-D5   (hex)		Eutron SPA
+DCC000-DCCFFF     (base 16)		Eutron SPA
+				Via Crespi 29/31
+				Pradalunga  Bergamo  24020
+				IT
+
+70-B3-D5   (hex)		Device Solutions Ltd
+BAA000-BAAFFF     (base 16)		Device Solutions Ltd
+				PO Box 131
+				Rolleston  Canterbury  7614
+				NZ
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+25A000-25AFFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		SEASON DESIGN TECHNOLOGY
+94D000-94DFFF     (base 16)		SEASON DESIGN TECHNOLOGY
+				FLOOR 4, WARDS EXCHANGE, 199 ECCLESALL ROAD
+				SHEFFIELD  SOUTH YORKSHIRE  S11 8HW
+				GB
+
+70-B3-D5   (hex)		Altron, a.s.
+693000-693FFF     (base 16)		Altron, a.s.
+				Novodvorska 994/138
+				Praha    14221
+				CZ
+
+70-B3-D5   (hex)		Matrix Switch Corporation
+90B000-90BFFF     (base 16)		Matrix Switch Corporation
+				431 Crown Point Circle, Suite 200
+				Grass Valley  CA  95945
+				US
+
+70-B3-D5   (hex)		Beijing Wisetone Information Technology Co.,Ltd.
+C12000-C12FFF     (base 16)		Beijing Wisetone Information Technology Co.,Ltd.
+				B-7A ,48A Zhichun Road,Haidian District,Beijing
+				Beijing  Beijing  100098
+				CN
+
+70-B3-D5   (hex)		WIZNOVA
+C62000-C62FFF     (base 16)		WIZNOVA
+				403, Daedeok Plaza1, 12, Dochon-ro, Jungwon-gu, Gyeonggi-do
+				Seongnam    KS009
+				KR
+
+70-B3-D5   (hex)		Elsist Srl
+13D000-13DFFF     (base 16)		Elsist Srl
+				Via G. Brodolini, 15
+				Casale Monf.to  Alessandria  15033
+				IT
+
+70-B3-D5   (hex)		Swiss Audio
+735000-735FFF     (base 16)		Swiss Audio
+				6 Rue de Saint-Léger
+				Geneva  Geneva  1205
+				CH
+
+70-B3-D5   (hex)		NuRi&G Engineering co,.Ltd.
+72C000-72CFFF     (base 16)		NuRi&G Engineering co,.Ltd.
+				#66-33, Elevator road, Geochang Industrial Complex
+				Geochang-gun  Gyeongsangnam-do  50148
+				KR
+
+70-B3-D5   (hex)		IOOOTA Srl
+F8B000-F8BFFF     (base 16)		IOOOTA Srl
+				Via Molino Rosso, 8
+				Imola  BO  40026
+				IT
+
+70-B3-D5   (hex)		GMI Ltd
+F03000-F03FFF     (base 16)		GMI Ltd
+				Inchinnan Business Park
+				Renfre    PA4 9RG
+				GB
+
+70-B3-D5   (hex)		TEX COMPUTER SRL 
+28E000-28EFFF     (base 16)		TEX COMPUTER SRL 
+				VIA MERCADANTE 35
+				CATTOLICA   RIMINI   47841
+				IT
+
+70-B3-D5   (hex)		RBS Netkom GmbH
+934000-934FFF     (base 16)		RBS Netkom GmbH
+				Muenchnerstrasse 87b
+				Dachau    85221
+				DE
+
+70-B3-D5   (hex)		MyDefence Communication ApS
+3BE000-3BEFFF     (base 16)		MyDefence Communication ApS
+				Sundsholmen 25
+				Noerresundby  Danmark  9400
+				DK
+
+70-B3-D5   (hex)		Itest communication Tech Co., LTD
+503000-503FFF     (base 16)		Itest communication Tech Co., LTD
+				F2,#2,2nd Southern IND Zone of HongHualing,Nanshan District
+				shenzhen  guangdong  518000
+				CN
+
+70-B3-D5   (hex)		BMT Messtechnik Gmbh
+5D6000-5D6FFF     (base 16)		BMT Messtechnik Gmbh
+				Güterfelder Damm 87-91
+				Stahnsdorf    14532
+				DE
+
+70-B3-D5   (hex)		Unicom Global, Inc.
+9FB000-9FBFFF     (base 16)		Unicom Global, Inc.
+				581, Ruiguang Road, Neihu Dist.
+				Taipei    11492
+				TW
+
+70-B3-D5   (hex)		Vivaldi Clima Srl
+457000-457FFF     (base 16)		Vivaldi Clima Srl
+				Via Pascoli 13
+				Casazza  Lombardia  24060
+				IT
+
+70-B3-D5   (hex)		Hyundai MNSOFT
+D75000-D75FFF     (base 16)		Hyundai MNSOFT
+				74, Wonhyoro, Yongsan-gu, Seoul 140-711, korea
+				Seoul  N/A  KS013
+				KR
+
+70-B3-D5   (hex)		Re spa - Controlli Industriali - IT01782300154
+ECB000-ECBFFF     (base 16)		Re spa - Controlli Industriali - IT01782300154
+				via Firenze 3
+				Bussero    20060
+				IT
+
+70-B3-D5   (hex)		FIRST LIGHT IMAGING
+B09000-B09FFF     (base 16)		FIRST LIGHT IMAGING
+				100 route des Houilleres
+				MEYREUIL    13590
+				FR
+
+70-B3-D5   (hex)		Critical Link LLC
+42A000-42AFFF     (base 16)		Critical Link LLC
+				6712 Brooklawn Parkway
+				Syracuse  null  13211
+				US
+
+70-B3-D5   (hex)		FOSHAN SHILANTIAN NETWORK S.T. CO., LTD.
+C5D000-C5DFFF     (base 16)		FOSHAN SHILANTIAN NETWORK S.T. CO., LTD.
+				NO.11,ZHANGCHA ROAD,CHANCHENG DISTRICT
+				FOSHAN  GUANGDONG  528000
+				CN
+
+70-B3-D5   (hex)		EWATTCH
+475000-475FFF     (base 16)		EWATTCH
+				13, rue Maurice Jeandon
+				Saint Die des Vosges  Lorraine  88100
+				FR
+
+70-B3-D5   (hex)		nyantec GmbH
+C6F000-C6FFFF     (base 16)		nyantec GmbH
+				Europaplatz 2
+				Berlin    10557
+				DE
+
+70-B3-D5   (hex)		Iotopia Solutions
+317000-317FFF     (base 16)		Iotopia Solutions
+				711 Atlantic Ave
+				Boston  MA  02111
+				US
+
+70-B3-D5   (hex)		COSMOS web Co., Ltd.
+3E8000-3E8FFF     (base 16)		COSMOS web Co., Ltd.
+				5-4-1 Kuryu Aoba-ku
+				Sendai-shi  Miyagi  989-3122
+				JP
+
+70-B3-D5   (hex)		SANO SERVICE Co.,Ltd
+D95000-D95FFF     (base 16)		SANO SERVICE Co.,Ltd
+				2-10-3 Sotokanda Chiyoda-ku
+				Tokyo    1010021
+				JP
+
+70-B3-D5   (hex)		BISTOS.,Co.,Ltd
+97F000-97FFFF     (base 16)		BISTOS.,Co.,Ltd
+				7th Fl., A Bldg., Woolim Lions Valley 5-cha, 144-3, Sangdaewon-dong, Jungwon-gu
+				Seongnam-si  Gyeonggi-do  462-739
+				KR
+
+70-B3-D5   (hex)		Autonomic Controls, Inc.
+973000-973FFF     (base 16)		Autonomic Controls, Inc.
+				28 Kaysal Ct
+				ARMONK  NY  10504
+				US
+
+70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau GmbH
+CD9000-CD9FFF     (base 16)		Peter Huber Kaeltemaschinenbau GmbH
+				Werner-von-Siemens-Str. 1
+				Offenburg  Ba-Wue  77656
+				DE
+
+70-B3-D5   (hex)		AXIS CORPORATION
+987000-987FFF     (base 16)		AXIS CORPORATION
+				Higashi Tokorozawa 2-24-5
+				Tokorozawa-shi  Saitama  359-0021
+				JP
+
+70-B3-D5   (hex)		Atonarp Micro-Systems India Pvt. Ltd.
+976000-976FFF     (base 16)		Atonarp Micro-Systems India Pvt. Ltd.
+				The Millenia, Tower A, 3rd Floor, No. 1&2 Murphy Road – Ulsoor, 
+				Bangalore  Karnataka  560008
+				IN
+
+70-B3-D5   (hex)		Innominds Software Inc
+0CE000-0CEFFF     (base 16)		Innominds Software Inc
+				2055 Junction Ave Suite 122, San Jose CA 95131
+				San Jose  CA  95131
+				US
+
+70-B3-D5   (hex)		Assembly Contracts Limited
+54F000-54FFFF     (base 16)		Assembly Contracts Limited
+				Ledson Road
+				Wythenshawe  Manchester  M23 9GP
+				GB
+
+70-B3-D5   (hex)		ATX Networks Corp
+644000-644FFF     (base 16)		ATX Networks Corp
+				1-501 Clements Road West
+				Ajax  Ontario  L1s7H4
+				CA
+
+70-B3-D5   (hex)		Netfort Solutions
+EDB000-EDBFFF     (base 16)		Netfort Solutions
+				10 Hamlin Manor,, GLENLUCE DRIVE,
+				Douglasdale  Johannesburg  2191
+				ZA
+
+70-B3-D5   (hex)		Lattech Systems Pty Ltd
+197000-197FFF     (base 16)		Lattech Systems Pty Ltd
+				24 Richelieu Street
+				Durbanville  Western Cape  7550
+				ZA
+
+70-B3-D5   (hex)		Fortuna Impex Pvt ltd
+9AD000-9ADFFF     (base 16)		Fortuna Impex Pvt ltd
+				12D Harrington Mansions , 8 Ho Chi Minh Sarani
+				Kolkata  West Bengal  700071
+				IN
+
+70-B3-D5   (hex)		Sakura Seiki Co.,Ltd.
+B62000-B62FFF     (base 16)		Sakura Seiki Co.,Ltd.
+				75-5, Imojiya
+				Chikuma-city  Nagano Prefecture  387-0015
+				JP
+
+70-B3-D5   (hex)		Qualitronix Madrass Pvt Ltd
+A19000-A19FFF     (base 16)		Qualitronix Madrass Pvt Ltd
+				No112, Tiny Sector, Guindy Industrial Estate, 
+				Chennai  TamilNadu  600032
+				IN
+
+70-B3-D5   (hex)		Medisafe International
+7B0000-7B0FFF     (base 16)		Medisafe International
+				Twyford Road
+				Bishops Stortford  Hertfordshire  CM23 3LJ
+				GB
+
+70-B3-D5   (hex)		Littlemore Scientific
+F81000-F81FFF     (base 16)		Littlemore Scientific
+				Gutchpool Farm
+				Gillingham  Dorset  SP8 5QP
+				GB
+
+70-B3-D5   (hex)		Link Care Services
+C80000-C80FFF     (base 16)		Link Care Services
+				3bis rue Taylor
+				Paris  Paris  75010
+				FR
+
+70-B3-D5   (hex)		TATTILE SRL
+5C4000-5C4FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Arete Associates
+238000-238FFF     (base 16)		Arete Associates
+				9301 Corbin Ave Suite 2000
+				Northridge  CA  91324
+				US
+
+70-B3-D5   (hex)		RWS Automation GmbH
+E4F000-E4FFFF     (base 16)		RWS Automation GmbH
+				Neuer Weg 2
+				Niefern - Öschelbronn    75223
+				DE
+
+70-B3-D5   (hex)		Suzhou PowerCore Technology Co.,Ltd.
+CCD000-CCDFFF     (base 16)		Suzhou PowerCore Technology Co.,Ltd.
+				Building #3,No.9 Xuesen Road,Science&Technology Town,Suzhou New District
+				Suzhou  Jiangsu  215000
+				CN
+
+70-B3-D5   (hex)		Supervision Test et Pilotage
+B23000-B23FFF     (base 16)		Supervision Test et Pilotage
+				70 avenue de Rome
+				LA SEYNE SUR MER    83500
+				FR
+
+70-B3-D5   (hex)		SolwayTech
+BD9000-BD9FFF     (base 16)		SolwayTech
+				124, Jungdae-ro, Songpa-gu
+				seoul    05829
+				KR
+
+70-B3-D5   (hex)		Colmek
+D05000-D05FFF     (base 16)		Colmek
+				6526 S Cottonwood St
+				Murray  UT  84107
+				US
+
+70-B3-D5   (hex)		DSP4YOU LTd
+12F000-12FFFF     (base 16)		DSP4YOU LTd
+				Unit 1204, 106 How Ming Street
+				Hong Kong    0000
+				HK
+
+70-B3-D5   (hex)		LogiM GmbH Software und Entwicklung
+FAA000-FAAFFF     (base 16)		LogiM GmbH Software und Entwicklung
+				Mahonienweg 22b
+				Berlin    12437
+				DE
+
+70-B3-D5   (hex)		B/E Aerospace, Inc.
+448000-448FFF     (base 16)		B/E Aerospace, Inc.
+				355 Knickerbocker Ave
+				Bohemia  NY  11716
+				US
+
+70-B3-D5   (hex)		Vtron Pty Ltd
+3EF000-3EFFFF     (base 16)		Vtron Pty Ltd
+				Unit 2, 62 Township Drive West
+				West Burleigh  Queensland  4219
+				AU
+
+70-B3-D5   (hex)		Ascendent Technology Group
+D66000-D66FFF     (base 16)		Ascendent Technology Group
+				15 -  9th Avenue South 
+				Cranbrook  BC  V1C 2L9
+				CA
+
+70-B3-D5   (hex)		ENTEC Electric & Electronic Co., LTD.
+B44000-B44FFF     (base 16)		ENTEC Electric & Electronic Co., LTD.
+				78-2 Buncheon-ri, Bongdam-eup
+				Hwaseong-city  Gyungki-do  445-894
+				KR
+
+70-B3-D5   (hex)		JSC OTZVUK
+615000-615FFF     (base 16)		JSC OTZVUK
+				10-30 Dostoevskogo Str.
+				Saint-Petersburg    191119
+				RU
+
+70-B3-D5   (hex)		Beijing Arrow SEED Technology Co,.Ltd.
+A4A000-A4AFFF     (base 16)		Beijing Arrow SEED Technology Co,.Ltd.
+				28/F, Taikang Financial Tower, 38 North Street of East 3rd Ring, Chaoyang District
+				beijing  beijing  100033
+				CN
+
+70-B3-D5   (hex)		FutureTechnologyLaboratories INC.
+B59000-B59FFF     (base 16)		FutureTechnologyLaboratories INC.
+				3-2 Shinsakae-3chome Naka-ku
+				Nagoya  Aichi  460-0007
+				JP
+
+70-B3-D5   (hex)		Varikorea
+3A7000-3A7FFF     (base 16)		Varikorea
+				#505 kolon digital tower aston, gasan, geumcheon
+				seoul    08502
+				KR
+
+70-B3-D5   (hex)		TEX COMPUTER SRL 
+F99000-F99FFF     (base 16)		TEX COMPUTER SRL 
+				Tex Computer Srl Via Mercadante 35
+				Cattolica   RIMINI   47841
+				IT
+
+70-B3-D5   (hex)		ConectaIP Tecnologia S.L.
+A5E000-A5EFFF     (base 16)		ConectaIP Tecnologia S.L.
+				Novell 58
+				Barcelona    08014
+				ES
+
+70-B3-D5   (hex)		MVT Video Technologies R + H Maedler GbR
+5CD000-5CDFFF     (base 16)		MVT Video Technologies R + H Maedler GbR
+				Neustraße 35-37
+				Velbert    42553
+				DE
+
+70-B3-D5   (hex)		eSoftThings
+9EC000-9ECFFF     (base 16)		eSoftThings
+				80 Avenue des Buttes de Coesmes
+				RENNES    35700
+				FR
+
+70-B3-D5   (hex)		DimoSystems BV
+AF7000-AF7FFF     (base 16)		DimoSystems BV
+				PO Box 875
+				Gorinchem  Zuid-Holland  4200AW
+				NL
+
+70-B3-D5   (hex)		StarBridge, Inc.
+1B5000-1B5FFF     (base 16)		StarBridge, Inc.
+				3-5-10
+				Tachikawa  Tokyo  190-0023
+				JP
+
+70-B3-D5   (hex)		Energi innovation Aps
+307000-307FFF     (base 16)		Energi innovation Aps
+				HC andersens alle 3
+				Vejen  Danmark  6600
+				DK
+
+70-B3-D5   (hex)		Asia Pacific Satellite Coummunication Inc.
+C8B000-C8BFFF     (base 16)		Asia Pacific Satellite Coummunication Inc.
+				9F, Lotte IT Castle 2-Dong, #550-1, Gasan-Dong, Geumchon-Gu,
+				SEOUL    08506
+				KR
+
+70-B3-D5   (hex)		RF CREATIONS LTD
+1DD000-1DDFFF     (base 16)		RF CREATIONS LTD
+				St John's Innovation Centre
+				Cambridge  Cambridgeshire  CB4 0WS
+				GB
+
+70-B3-D5   (hex)		SECLAB
+CB2000-CB2FFF     (base 16)		SECLAB
+				40 Avenue Theroigne de Mericourt
+				MONTPELLIER    34000
+				FR
+
+70-B3-D5   (hex)		Norsat International Inc.
+0AE000-0AEFFF     (base 16)		Norsat International Inc.
+				110-4020 Viking Way
+				Richmond  BC  V6V 2L4
+				CA
+
+70-B3-D5   (hex)		Dainichi Denshi　Co.,LTD
+8CF000-8CFFFF     (base 16)		Dainichi Denshi　Co.,LTD
+				12-27 Enoki-cho
+				Suita city  Osaka   564-0053
+				JP
+
+70-B3-D5   (hex)		Rohde&Schwarz Topex SA
+296000-296FFF     (base 16)		Rohde&Schwarz Topex SA
+				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
+				Bucuresti  Romania  014142
+				RO
+
+70-B3-D5   (hex)		Tecnint HTE SRL
+217000-217FFF     (base 16)		Tecnint HTE SRL
+				Via della Tecnica 16/18
+				Osnago  Lecco  23875
+				IT
+
+70-B3-D5   (hex)		Rohde&Schwarz Topex SA
+FB0000-FB0FFF     (base 16)		Rohde&Schwarz Topex SA
+				71th-73th Nicolae Caramfil street, 2nd floor, 1th district
+				Bucuresti  Romania  014142
+				RO
+
+70-B3-D5   (hex)		DomoSafety S.A.
+B99000-B99FFF     (base 16)		DomoSafety S.A.
+				Innovation Park - Site EPFL
+				Lausanne    1015
+				CH
+
+70-B3-D5   (hex)		MobiPromo
+1FE000-1FEFFF     (base 16)		MobiPromo
+				10, 64-72 Beresford Rd
+				Lilydale  Victoria  3140
+				AU
+
+70-B3-D5   (hex)		RF Industries
+F0B000-F0BFFF     (base 16)		RF Industries
+				PO Box 5
+				Welland  SA  5007
+				AU
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+FF3000-FF3FFF     (base 16)		Aplex Technology Inc.
+				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+65C000-65CFFF     (base 16)		Aplex Technology Inc.
+				2Q , NanYouTianAn industrial park Tower4 ,Nanshan District
+				Shenzhen  Guangdong  518054
+				CN
+
+70-B3-D5   (hex)		Safelet BV
+B1D000-B1DFFF     (base 16)		Safelet BV
+				Bilderdijkkade 26a-hs
+				amsterdam    1053 vc
+				NL
+
+70-B3-D5   (hex)		Nuviz Oy
+AAE000-AAEFFF     (base 16)		Nuviz Oy
+				Joensuunkatu 7
+				Salo    24100
+				FI
+
+70-B3-D5   (hex)		Technical Panels Co. Ltd.
+C34000-C34FFF     (base 16)		Technical Panels Co. Ltd.
+				288 Soi Chalongkrung 31, Lat Krabang
+				Bangkok  Bangkok  10520
+				TH
+
+70-B3-D5   (hex)		Ayre Acoustics, Inc.
+0BA000-0BAFFF     (base 16)		Ayre Acoustics, Inc.
+				2300 Central Ave, #B
+				Boulder  CO  80301
+				US
+
+70-B3-D5   (hex)		Shenzhen Weema TV Technology Co.,Ltd.
+AA1000-AA1FFF     (base 16)		Shenzhen Weema TV Technology Co.,Ltd.
+				4/F,Building two,YuChang Industrial Park,No.28,Guangda Road,Henggang Street,Longgang,Shenzhen.
+				shenzhen    518000
+				CN
+
+70-B3-D5   (hex)		Reinhardt System- und Messelectronic GmbH
+4AE000-4AEFFF     (base 16)		Reinhardt System- und Messelectronic GmbH
+				Bergstr. 33
+				Obermuehlhausen    86911
+				DE
+
+70-B3-D5   (hex)		Sol Welding srl
+E3E000-E3EFFF     (base 16)		Sol Welding srl
+				Via Meucci 26
+				Costabissara  Italy / Vicenza  36030
+				IT
+
+70-B3-D5   (hex)		Silicann Systems GmbH
+62B000-62BFFF     (base 16)		Silicann Systems GmbH
+				Schillerplatz 10
+				Rostock    18055
+				DE
+
+70-B3-D5   (hex)		BRS Sistemas Eletrônicos
+1FD000-1FDFFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491 / 204
+				Porto Alegre  RS  91380-000
+				BR
+
+70-B3-D5   (hex)		ATOM GIKEN Co.,Ltd.
+7D9000-7D9FFF     (base 16)		ATOM GIKEN Co.,Ltd.
+				92-2 KATASE
+				FUJISAWA  KANAGAWA  251-0032
+				JP
+
+70-B3-D5   (hex)		Tickster AB
+350000-350FFF     (base 16)		Tickster AB
+				Magasinsgatan 8
+				Arvika  Värmland  SE67131
+				SE
+
+70-B3-D5   (hex)		Merz s.r.o.
+E2E000-E2EFFF     (base 16)		Merz s.r.o.
+				U Sirotcince 353/7
+				Liberec    460 01
+				CZ
+
+70-B3-D5   (hex)		Leo Bodnar Electronics Ltd
+E3D000-E3DFFF     (base 16)		Leo Bodnar Electronics Ltd
+				Unit 8 New Rookery Farm
+				Silverstone    NN12 8UP
+				GB
+
+70-B3-D5   (hex)		INTEC International GmbH
+B26000-B26FFF     (base 16)		INTEC International GmbH
+				Killertalstr. 4
+				Hechingen    72379
+				DE
+
+70-B3-D5   (hex)		Aplex Technology Inc.
+8E4000-8E4FFF     (base 16)		Aplex Technology Inc.
+				2nd Floor,Tower3,District5,HongHuaLing industrial park,  Nanshan District
+				Shenzhen  Guangdong  518055
+				CN
+
+70-B3-D5   (hex)		MEDIAM Sp. z o.o.
+F13000-F13FFF     (base 16)		MEDIAM Sp. z o.o.
+				Wadowicka 12
+				Kraków    30-415
+				PL
+
+70-B3-D5   (hex)		Coveloz Technologies Inc.
+042000-042FFF     (base 16)		Coveloz Technologies Inc.
+				232 Herzberg Road, Suite 204
+				Kanata  Ontario  K2K 2A1
+				CA
+
+70-B3-D5   (hex)		PMT Corporation
+804000-804FFF     (base 16)		PMT Corporation
+				1705-1 Satani,Sue
+				Kasuya-gun  Fukuoka  811-2115
+				JP
+
+70-B3-D5   (hex)		ALTRAN UK
+179000-179FFF     (base 16)		ALTRAN UK
+				22 St Lawrence Street
+				Bath  Somerset  BA1 1AN
+				GB
+
+70-B3-D5   (hex)		Qwave Inc
+B31000-B31FFF     (base 16)		Qwave Inc
+				18725 Metler Ct
+				Saratoga  CA  95070
+				US
+
+70-B3-D5   (hex)		PERFORMANCE CONTROLS, INC.
+8D3000-8D3FFF     (base 16)		PERFORMANCE CONTROLS, INC.
+				151 DOMORAH DRIVE
+				MONTGOMERYVILLE  PA  18936
+				US
+
+70-B3-D5   (hex)		Husty M.Styczen J.Hupert Sp.J.
+194000-194FFF     (base 16)		Husty M.Styczen J.Hupert Sp.J.
+				Rzepakowa 5e
+				Krakow  malopolska  31-989
+				PL
+
+70-B3-D5   (hex)		Tirasoft Nederland
+766000-766FFF     (base 16)		Tirasoft Nederland
+				Hyacinthstraat174
+				Groningen  Groningen  9713XK
+				NL
+
+70-B3-D5   (hex)		Automation Networks & Solutions LLC
+2BB000-2BBFFF     (base 16)		Automation Networks & Solutions LLC
+				8300 FM 1960 West, Suite 450
+				Houston  TX  77070
+				US
+
+70-B3-D5   (hex)		DimoCore Corporation
+AE1000-AE1FFF     (base 16)		DimoCore Corporation
+				GoldenBill #930, GwangDukDae-ro 206
+				Ahnsan  Kyonggi-do  15462
+				KR
+
+70-B3-D5   (hex)		AIMCO
+3C3000-3C3FFF     (base 16)		AIMCO
+				10000 SE Pine St
+				Portland  OR  97216
+				US
+
+70-B3-D5   (hex)		KEVIC. inc,
+99A000-99AFFF     (base 16)		KEVIC. inc,
+				5, Nonhyunro 24 Gil, Gangnam-gu
+				Seoul    06302
+				KR
+
+70-B3-D5   (hex)		Xiamen Point Circle Technologh Co,ltd
+DB5000-DB5FFF     (base 16)		Xiamen Point Circle Technologh Co,ltd
+				S307SouthBuildingWeiYeBuildinPioneering Park,Huli District,Xia M XIAMEN
+				Xiamen    361000
+				CN
+
+70-B3-D5   (hex)		SMTC Corporation
+AC6000-AC6FFF     (base 16)		SMTC Corporation
+				2302 Trade Zone Blvd
+				San Jose    95131
+				US
+
+70-B3-D5   (hex)		Hanbat National University
+FBE000-FBEFFF     (base 16)		Hanbat National University
+				Hanbat National Univ., Deongmyeong-dong, Yuseong-gu
+				Daejeon    34158
+				KR
+
+70-B3-D5   (hex)		Cardinal Scale Mfg Co
+268000-268FFF     (base 16)		Cardinal Scale Mfg Co
+				203 E. Daugherty
+				Webb City  MO  64870
+				US
+
+70-B3-D5   (hex)		Cottonwood Creek Technologies, Inc.
+9EF000-9EFFFF     (base 16)		Cottonwood Creek Technologies, Inc.
+				7108 S. Alton Way, Ste G-102
+				Centennial    80112
+				US
+
+70-B3-D5   (hex)		TATTILE SRL
+AF4000-AF4FFF     (base 16)		TATTILE SRL
+				VIA DONIZETTI, 1/3/5
+				MAIRANO  BRESCIA  25030
+				IT
+
+70-B3-D5   (hex)		Hoshin Electronics Co., Ltd.
+1C7000-1C7FFF     (base 16)		Hoshin Electronics Co., Ltd.
+				3-9-12, Miyamaedaira, Miyamae-Ku
+				Kawasaki-Shi  Kanagawa  216-0006
+				JP
+
+70-B3-D5   (hex)		DermaLumics S.L.
+29B000-29BFFF     (base 16)		DermaLumics S.L.
+				Ronda de Poniente 16, 1E
+				Tres Cantos  Madrid  28760
+				ES
+
+70-B3-D5   (hex)		Presentation Switchers, Inc.
+428000-428FFF     (base 16)		Presentation Switchers, Inc.
+				2324 Cheney-Spokane Road
+				Cheney  WA  99004
+				US
+
+70-B3-D5   (hex)		DIgSILENT GmbH
+FCC000-FCCFFF     (base 16)		DIgSILENT GmbH
+				Heinrich-Hertz-Str. 9
+				Gomaringen    72810
+				DE
+
+70-B3-D5   (hex)		EMPELOR GmbH
+76B000-76BFFF     (base 16)		EMPELOR GmbH
+				Gubelstr. 12
+				Zug  Zug  6300
+				CH
+
+70-B3-D5   (hex)		Sator Controls s.r.o.
+F1A000-F1AFFF     (base 16)		Sator Controls s.r.o.
+				Ke Zdravotnímu středisku 103/1
+				Praha - Řeporyje  Select State  15500
+				CZ
+
+70-B3-D5   (hex)		Shanghai JCY Technology Company
+F2E000-F2EFFF     (base 16)		Shanghai JCY Technology Company
+				304, 228 Jiang Chang 3rd Road
+				Shanghai,China  Shanghai  200436
+				CN
+
+70-B3-D5   (hex)		Sorynorydotcom Inc
+38F000-38FFFF     (base 16)		Sorynorydotcom Inc
+				206-1, 2F, 8, Suseong-ro, Gwonseon-gu
+				Suwon-si  Gyeonggi-do   16426
+				KR
+
+70-B3-D5   (hex)		Toptech Systems, Inc.
+8B9000-8B9FFF     (base 16)		Toptech Systems, Inc.
+				1124 Florida Central Parkway
+				Longwood  FL  32750
+				US
+
+70-B3-D5   (hex)		KRONOTECH SRL
+FB6000-FB6FFF     (base 16)		KRONOTECH SRL
+				VIALE UNGHERIA 125
+				UDINE  ITALY/UDINE  33100
+				IT
+
+70-B3-D5   (hex)		Eva Automation
+747000-747FFF     (base 16)		Eva Automation
+				401 Warren Street
+				Redwood City  CA  94063
+				US
+
+70-B3-D5   (hex)		Pro-Digital Projetos Eletronicos Ltda
+059000-059FFF     (base 16)		Pro-Digital Projetos Eletronicos Ltda
+				RUA SENADOR SARAIVA 200
+				CURITIBA  PR  80510300
+				BR
+
+70-B3-D5   (hex)		KZTA
+647000-647FFF     (base 16)		KZTA
+				S.-Shhedrina
+				Kaluga    248002
+				RU
+
+70-B3-D5   (hex)		Azcom Technology S.r.l.
+D51000-D51FFF     (base 16)		Azcom Technology S.r.l.
+				Strada 6 Palazzo N2
+				Rozzano  MI  20089
+				IT
+
+70-B3-D5   (hex)		OCEANIX INC.
+1A9000-1A9FFF     (base 16)		OCEANIX INC.
+				15703 LAKE LODGE DR
+				HOUSTON  TX  77062
+				US
+
+70-B3-D5   (hex)		Xped Corporation Pty Ltd
+152000-152FFF     (base 16)		Xped Corporation Pty Ltd
+				Innovation House
+				Mawson Lakes  SA  5095
+				AU
+
+70-B3-D5   (hex)		SENSING LABS
+80A000-80AFFF     (base 16)		SENSING LABS
+				CAP OMÉGA - Rond Point Benjamin Franklin
+				MONTPELLIER    34960
+				FR
+
+70-B3-D5   (hex)		ATIM Radiocommunication
+9BA000-9BAFFF     (base 16)		ATIM Radiocommunication
+				Chemin des Guillets
+				Villard de Lans    38250
+				FR
+
+70-B3-D5   (hex)		YEHL & JORDAN LLC
+E02000-E02FFF     (base 16)		YEHL & JORDAN LLC
+				114 Paige Bend
+				Hutto  TX  78634
+				US
+
+70-B3-D5   (hex)		VEILUX INC.
+4B6000-4B6FFF     (base 16)		VEILUX INC.
+				802 GREENVIEW DR. STE 200
+				GRAND PRAIRIE    75050
+				US
+
+70-B3-D5   (hex)		CRDE
+8A6000-8A6FFF     (base 16)		CRDE
+				ZI DES GRANDS CAMPS
+				MERCUES  LOT  46090
+				FR
+
+70-B3-D5   (hex)		E-PLUS TECHNOLOGY CO., LTD
+B05000-B05FFF     (base 16)		E-PLUS TECHNOLOGY CO., LTD
+				21F, NO.1-145, Zhonghua Rd.
+				Tainan  Yongkang Dist  71084
+				TW
+
+70-B3-D5   (hex)		TerOpta Ltd
+3CC000-3CCFFF     (base 16)		TerOpta Ltd
+				108 Balmoral Drive
+				Nottingham    NG9 3FT
+				GB
+
+70-B3-D5   (hex)		ACD Elekronik GmbH
+3C6000-3C6FFF     (base 16)		ACD Elekronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		OutSys
+929000-929FFF     (base 16)		OutSys
+				Via Caracciolo, 65
+				MIlano  MI  20155
+				IT
+
+70-B3-D5   (hex)		CHARGELIB
+EF6000-EF6FFF     (base 16)		CHARGELIB
+				11 CITE VANEAU
+				PARIS    75007
+				FR
+
+70-B3-D5   (hex)		signalparser
+214000-214FFF     (base 16)		signalparser
+				#901-1 A-dong, Bundang Technopark, 697, Pangyo-ro, Bundang-gu
+				Seongnam-si   Gyeonggi-do  13511
+				KR
+
+70-B3-D5   (hex)		Movis
+B6D000-B6DFFF     (base 16)		Movis
+				Naverland 2, 4. sal
+				Glostrup  Denmark  DK-2600
+				DK
+
+70-B3-D5   (hex)		IEM SA
+2EF000-2EFFFF     (base 16)		IEM SA
+				109 chemin du pont du centenaire
+				Plan-les-Ouates    1228
+				CH
+
+70-B3-D5   (hex)		Shadin Avionics
+794000-794FFF     (base 16)		Shadin Avionics
+				6831 Oxford Street
+				St. Louis Park  MN  55426
+				US
+
+70-B3-D5   (hex)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+B40000-B40FFF     (base 16)		Wuhan Xingtuxinke ELectronic Co.,Ltd
+				NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
+				Wuhan  Hubei  430074
+				CN
+
+70-B3-D5   (hex)		Axotec Technologies GmbH
+BAB000-BABFFF     (base 16)		Axotec Technologies GmbH
+				Sudetenstraße 88
+				Geretsried  Bavaria  82538
+				DE
+
+70-B3-D5   (hex)		Grupo Epelsa S.L.
+76E000-76EFFF     (base 16)		Grupo Epelsa S.L.
+				C/ Punto Net,3
+				Alcala de Henares  Madrid  28805
+				ES
+
+70-B3-D5   (hex)		Beijing Aumiwalker technology CO.,LTD
+D0E000-D0EFFF     (base 16)		Beijing Aumiwalker technology CO.,LTD
+				Floor 6, Tower 1, No.1 Zhonghe Road Fengtai Science Park Beijing P.R.C.
+				Beijing  Beijing  100071
+				CN
+
+70-B3-D5   (hex)		Streambox Inc
+F6E000-F6EFFF     (base 16)		Streambox Inc
+				1848 Westlake Ave N
+				Seattle  WA  98109
+				US
+
+70-B3-D5   (hex)		Schildknecht AG
+494000-494FFF     (base 16)		Schildknecht AG
+				Haugweg 26
+				Murr    71711
+				DE
+
+70-B3-D5   (hex)		effectas GmbH
+78E000-78EFFF     (base 16)		effectas GmbH
+				Bundesstrasse 6
+				Zug    6300
+				CH
+
+70-B3-D5   (hex)		Spectra Displays Ltd
+266000-266FFF     (base 16)		Spectra Displays Ltd
+				Unit 25 Lancaster Way Business Park
+				Ely  Cambridgeshire  CB6 3NW
+				GB
+
+70-B3-D5   (hex)		attocube systems AG
+D76000-D76FFF     (base 16)		attocube systems AG
+				Koeniginstrasse 11A
+				Muenchen    80997
+				DE
+
+70-B3-D5   (hex)		IEEE Registration Authority
+9F3000-9F3FFF     (base 16)		IEEE Registration Authority
+				445 Hoes Lane
+				Piscataway  NJ  08554
+				US
+
+70-B3-D5   (hex)		Jemac Sweden AB
+16E000-16EFFF     (base 16)		Jemac Sweden AB
+				Trångsundsvägen 20A
+				Kalmar    39356
+				SE
+
+70-B3-D5   (hex)		ECON Technology Co.Ltd
+E93000-E93FFF     (base 16)		ECON Technology Co.Ltd
+				Mogan Road 1418-41-4
+				Hangzhou  Zhejiang   310015
+				CN
+
+70-B3-D5   (hex)		Boulder Amplifiers, Inc.
+4BD000-4BDFFF     (base 16)		Boulder Amplifiers, Inc.
+				3225 Prairie Avenue
+				Boulder  CO  80301
+				US
+
+70-B3-D5   (hex)		AnyComm.Co.,Ltd.
+AE0000-AE0FFF     (base 16)		AnyComm.Co.,Ltd.
+				3F, 54, Simin-daero 327beon-gil
+				Dongan-gu Anyang-si Gyeonggi-do  Gyeonggi-do  14055
+				KR
+
+70-B3-D5   (hex)		SOREDI touch systems GmbH
+001000-001FFF     (base 16)		SOREDI touch systems GmbH
+				Werner-von-Siemens-Str. 13
+				Olching  Bavaria  82140
+				DE
+
+70-B3-D5   (hex)		Xerox International Partners
+7EB000-7EBFFF     (base 16)		Xerox International Partners
+				3174 Porter Drive
+				Palo Alto    94304
+				US
+
+70-B3-D5   (hex)		TOPROOTTechnology Corp. Ltd.
+1E0000-1E0FFF     (base 16)		TOPROOTTechnology Corp. Ltd.
+				5F-8, No. 14, Lane 609, Sec.5, Chongsin Rd.,
+				New Taipei City  Taipei  241
+				TW
+
+70-B3-D5   (hex)		TriLED
+439000-439FFF     (base 16)		TriLED
+				Dijkstraat 8
+				Ham  Limburg  3945
+				BE
+
+70-B3-D5   (hex)		DM RADIOCOM
+8A0000-8A0FFF     (base 16)		DM RADIOCOM
+				CD 908
+				13720  BELCODENE  13380
+				FR
+
+70-B3-D5   (hex)		Contraves Advanced Devices Sdn. Bhd.
+4D1000-4D1FFF     (base 16)		Contraves Advanced Devices Sdn. Bhd.
+				Batu Berendam FTZ, PO Box 39,75700 Malacca, Malaysia.
+				Melacca  No State  75700
+				MY
+
+70-B3-D5   (hex)		WyreStorm Technologies Ltd
+D59000-D59FFF     (base 16)		WyreStorm Technologies Ltd
+				22 Ergo Business Park, Kelvin Road
+				Greenbridge  Swindon  SN3 3JW
+				GB
+
+70-B3-D5   (hex)		Mobile Devices Unlimited
+14F000-14FFFF     (base 16)		Mobile Devices Unlimited
+				1611 North Austin Avenue
+				Chicago  IL  60639-4073
+				US
+
+70-B3-D5   (hex)		Sandia National Laboratories
+D74000-D74FFF     (base 16)		Sandia National Laboratories
+				1515 Eubank BLVD SE
+				Albuquerque  New Mexico  87123
+				US
+
+70-B3-D5   (hex)		IDS Innomic GmbH
+37F000-37FFFF     (base 16)		IDS Innomic GmbH
+				Zum Buchhorst 35
+				Salzwedel  Sachsen-Anhalt  29410
+				DE
+
+70-B3-D5   (hex)		Gupsy GmbH
+100000-100FFF     (base 16)		Gupsy GmbH
+				Metzgerstrasse 67
+				Aachen  NRW  52070
+				DE
+
+70-B3-D5   (hex)		KDT
+2CE000-2CEFFF     (base 16)		KDT
+				126, Haeoreum-gil, Namsan-myeon
+				Chuncheon-si  Gangwon-do  200-911
+				KR
+
+70-B3-D5   (hex)		Beijing Hzhytech Technology Co.Ltd
+EE5000-EE5FFF     (base 16)		Beijing Hzhytech Technology Co.Ltd
+				The 2th floor,Longzeyuan Multi-use
+				  Beijing  102208
+				CN
+
+70-B3-D5   (hex)		Schneider Electric Motion
+2EA000-2EAFFF     (base 16)		Schneider Electric Motion
+				370 North Main St
+				Marlborough  CT  06447
+				US
+
+70-B3-D5   (hex)		DSP DESIGN
+D42000-D42FFF     (base 16)		DSP DESIGN
+				TAPTON PK INNOVATION CENTRE
+				CHESTERFIELD  DERBYSHIRE  S41 0TZ
+				GB
+
+70-B3-D5   (hex)		Galea Electric S.L.
+A04000-A04FFF     (base 16)		Galea Electric S.L.
+				Zeharkale 36, Edificio Izarra Centre
+				Ermua  Bizkaia  48260
+				ES
+
+70-B3-D5   (hex)		FIDELTRONIK POLAND SP. Z O.O.
+D12000-D12FFF     (base 16)		FIDELTRONIK POLAND SP. Z O.O.
+				Beniowskiego 1
+				    
+				PL
+
+70-B3-D5   (hex)		Chromalox, Inc.
+84E000-84EFFF     (base 16)		Chromalox, Inc.
+				1347 Heil Quaker Blvd
+				La Vergne  TN  37086
+				US
+
+70-B3-D5   (hex)		Sicon srl
+04D000-04DFFF     (base 16)		Sicon srl
+				Via Sila 1/3
+				Isola Vicentina  Vicenza  36033
+				IT
+
+70-B3-D5   (hex)		Flashnet SRL
+BF1000-BF1FFF     (base 16)		Flashnet SRL
+				Str. Fundatura Harmanului nr.4A
+				Brasov  Brasov  500240
+				RO
+
+70-B3-D5   (hex)		AeroVision Avionics, Inc.
+DDF000-DDFFFF     (base 16)		AeroVision Avionics, Inc.
+				2F, No.30, R&D Rd. II,
+				Hsinchu City  Hsinchu City  30076
+				TW
+
+70-B3-D5   (hex)		Micram Instruments Ltd
+774000-774FFF     (base 16)		Micram Instruments Ltd
+				5 The Parade
+				Auckland    2012
+				NZ
+
+70-B3-D5   (hex)		SARL S@TIS
+933000-933FFF     (base 16)		SARL S@TIS
+				19, Rue de Bretagne
+				Saint Quentin Fallavier  Rhone-Alpes  38070
+				FR
+
+70-B3-D5   (hex)		Allim System Co,.Ltd.
+48E000-48EFFF     (base 16)		Allim System Co,.Ltd.
+				#605, E&C Venture Dream Tower 6Cha,
+				Seoul  Seoul  152-179
+				KR
+
+70-B3-D5   (hex)		Benchmark Electronics BV
+9ED000-9EDFFF     (base 16)		Benchmark Electronics BV
+				Lelyweg 10
+				Almelo  Overijssel  7602 EA
+				NL
+
+70-B3-D5   (hex)		ARD
+C89000-C89FFF     (base 16)		ARD
+				MICROPOLIS
+				GAP CEDEX  paca  05005
+				FR
+
+70-B3-D5   (hex)		Kalycito Infotech Private Limited
+43B000-43BFFF     (base 16)		Kalycito Infotech Private Limited
+				6/2 & 6/3,Pappampatti Pirivu, Trichy Road,
+				Coimbatore  Tamil Nadu  641103
+				IN
+
+70-B3-D5   (hex)		NetBoxSC, LLC
+852000-852FFF     (base 16)		NetBoxSC, LLC
+				43774 Bemis Road
+				Belleville  MI  48111
+				US
+
+70-B3-D5   (hex)		Mes Communication Co., Ltd
+A93000-A93FFF     (base 16)		Mes Communication Co., Ltd
+				5F, No. 6 , Szu Wei Lane , Chung Cheng
+				New Taipei City    231
+				TW
+
+70-B3-D5   (hex)		VideoRay LLC
+CD6000-CD6FFF     (base 16)		VideoRay LLC
+				212 E High Street
+				Pottstown  Pennsylvania  19464
+				US
+
+70-B3-D5   (hex)		Movidius SRL
+32F000-32FFFF     (base 16)		Movidius SRL
+				Str Gh Lazar, Nb24
+				Timisoara  -  300081
+				RO
+
+70-B3-D5   (hex)		Data Sciences International
+7C1000-7C1FFF     (base 16)		Data Sciences International
+				119 14th St. NW
+				St. Paul  MN  55112
+				US
+
+70-B3-D5   (hex)		SERIAL IMAGE INC.
+166000-166FFF     (base 16)		SERIAL IMAGE INC.
+				16530 Ventura Blvd.
+				Encino  California  91436
+				US
+
+70-B3-D5   (hex)		PLR Prueftechnik Linke und Ruehe GmbH
+595000-595FFF     (base 16)		PLR Prueftechnik Linke und Ruehe GmbH
+				Altenhaeuser Str. 6
+				Magdeburg  Saxony-Anhalt  39126
+				DE
+
+70-B3-D5   (hex)		Oso Technologies, Inc.
+4DE000-4DEFFF     (base 16)		Oso Technologies, Inc.
+				722 W KILLARNEY ST
+				Urbana  Illinois  61801
+				US
+
+70-B3-D5   (hex)		Abitsoftware, Ltd.
+3D8000-3D8FFF     (base 16)		Abitsoftware, Ltd.
+				Passfield Business Centre
+				Passfield, Liphook  Hampshire  GU30 7SB
+				GB
+
+70-B3-D5   (hex)		IMST GmbH
+8FF000-8FFFFF     (base 16)		IMST GmbH
+				Carl-Friedrich-Gauss-Str. 2-4
+				Kamp-Lintfort  Northrhine-Westfalia  47475
+				DE
+
+70-B3-D5   (hex)		KITRON UAB
+470000-470FFF     (base 16)		KITRON UAB
+				TAIKOS 151
+				KAUNAS  KAUNAS  LT-52119
+				LT
+
+70-B3-D5   (hex)		Peter Huber
+2E0000-2E0FFF     (base 16)		Peter Huber
+				Kaeltemaschinenbau GmbH
+				Offenburg  Ba-Wue  77656
+				DE
+
+70-B3-D5   (hex)		ATX NETWORKS LTD
+F1E000-F1EFFF     (base 16)		ATX NETWORKS LTD
+				Halapid 12 st
+				Petach tikva  Israel  4917001
+				IL
+
+70-B3-D5   (hex)		Korea Plant Maintenance
+DF9000-DF9FFF     (base 16)		Korea Plant Maintenance
+				102 DTC Tower
+				Seongnam-si  Gyeonggi-do  463-400
+				KR
+
+70-B3-D5   (hex)		Hella Gutmann Solutions GmbH
+F93000-F93FFF     (base 16)		Hella Gutmann Solutions GmbH
+				Am Krebsbach 2
+				Ihringen  BW  79241
+				DE
+
+70-B3-D5   (hex)		C21 Systems Ltd
+7E4000-7E4FFF     (base 16)		C21 Systems Ltd
+				Dunston Innovation Centre
+				Chesterfield  Derbyshire  S41 8NG
+				GB
+
+70-B3-D5   (hex)		Magosys Systems LTD
+00E000-00EFFF     (base 16)		Magosys Systems LTD
+				Gad Feinstein 13
+				Rehovot    7638517
+				IL
+
+70-B3-D5   (hex)		Kvazar LLC
+2D6000-2D6FFF     (base 16)		Kvazar LLC
+				200-letiya goroda 2
+				Noginsk  Moscow region  142400
+				RU
+
+70-B3-D5   (hex)		Evolute Systems Private Limited
+D2D000-D2DFFF     (base 16)		Evolute Systems Private Limited
+				Sri Rama, 15/6, 3rd Floor
+				Bangalore  Karnataka  560008
+				IN
+
+70-B3-D5   (hex)		Guidance Navigation Limited
+E36000-E36FFF     (base 16)		Guidance Navigation Limited
+				4 Dominus Way
+				Leicester  Leicestershire  LE19 1RP
+				GB
+
+70-B3-D5   (hex)		DEUTA-WERKE GmbH
+08F000-08FFFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+70-B3-D5   (hex)		Isabellenhütte Heusler Gmbh &Co KG
+F8E000-F8EFFF     (base 16)		Isabellenhütte Heusler Gmbh &Co KG
+				Eibacherweg 3-5
+				Dillenburg  Hessen  35683
+				DE
+
+70-B3-D5   (hex)		Lemonade Lab Inc
+AD6000-AD6FFF     (base 16)		Lemonade Lab Inc
+				1-10-8 Nishi-Azabu
+				Minato-ku  Tokyo  106-0031
+				JP
+
+70-B3-D5   (hex)		Shanghai Tianhe Automation Instrumentation Co., Ltd.
+AFB000-AFBFFF     (base 16)		Shanghai Tianhe Automation Instrumentation Co., Ltd.
+				room 501, block D, No. 100, lane 2891, Qilianshan Nan road,
+				Shanghai  Shanghai  200331
+				CN
+
+70-B3-D5   (hex)		iLOQ Oy
+CFD000-CFDFFF     (base 16)		iLOQ Oy
+				Yrttipellontie 10
+				Oulu  EMEA  90230
+				FI
+
+70-B3-D5   (hex)		C.D.N.CORPORATION
+C73000-C73FFF     (base 16)		C.D.N.CORPORATION
+				1-18-22　Ohtsubo-higashi,Miyazaki-Ciy
+				Miyazaki  Miyazaki  880-0934
+				JP
+
+70-B3-D5   (hex)		bentrup Industriesteuerungen
+870000-870FFF     (base 16)		bentrup Industriesteuerungen
+				Zum Buchwald 4-6
+				Fernwald  Hessia  35463
+				DE
+
+70-B3-D5   (hex)		Apogee Applied Research, Inc.
+FBA000-FBAFFF     (base 16)		Apogee Applied Research, Inc.
+				4401 Dayton Xenia Rd
+				Dayton  Ohio  45432
+				US
+
+70-B3-D5   (hex)		Synaccess Networks Inc.
+336000-336FFF     (base 16)		Synaccess Networks Inc.
+				75 W. Baseline Rd.
+				Gilbert  AZ  85233
+				US
+
+70-B3-D5   (hex)		Zigen Corp
+D87000-D87FFF     (base 16)		Zigen Corp
+				6934 Canby Avenue
+				Reseda  CA  91335
+				US
+
+70-B3-D5   (hex)		LSB - LA SALLE BLANCHE
+7B7000-7B7FFF     (base 16)		LSB - LA SALLE BLANCHE
+				RN 100
+				APT EN PROVENCE  84  84400
+				FR
+
+70-B3-D5   (hex)		Liquid Instruments Pty Ltd
+87B000-87BFFF     (base 16)		Liquid Instruments Pty Ltd
+				31 Pokana Cct
+				Kaleen  ACT  2617
+				AU
+
+70-B3-D5   (hex)		Ducommun Inc.
+583000-583FFF     (base 16)		Ducommun Inc.
+				700 Braddock Avenue
+				East Pittsburgh  PA  15112
+				US
+
+70-B3-D5   (hex)		Versilis Inc.
+4D8000-4D8FFF     (base 16)		Versilis Inc.
+				4295 St-Elzear Ouest
+				Laval  Quebec  h7p4j3
+				CA
+
+70-B3-D5   (hex)		LayTec AG
+995000-995FFF     (base 16)		LayTec AG
+				Seesener Str. 10 13
+				Berlin  Berlin  10709
+				DE
+
+70-B3-D5   (hex)		Talleres de Escoriaza
+0DC000-0DCFFF     (base 16)		Talleres de Escoriaza
+				Barrio Ventas 35
+				Irun  Gipuzkoa  20305
+				ES
+
+70-B3-D5   (hex)		Exi Flow Measurement Ltd
+7AE000-7AEFFF     (base 16)		Exi Flow Measurement Ltd
+				Unit 22 Ford Lane business Park
+				Ford, ARUNDEL  West Sussex  BN164HP
+				GB
+
+70-B3-D5   (hex)		Integrated Systems Engineering, Inc.
+48C000-48CFFF     (base 16)		Integrated Systems Engineering, Inc.
+				600 South Holmes, STE 4
+				St. Louis  Missouri  63122
+				US
+
+70-B3-D5   (hex)		New Japan Radio Co., Ltd
+AF3000-AF3FFF     (base 16)		New Japan Radio Co., Ltd
+				2-1-1 Fukuoka
+				Fujimino  Saitama  356-8510
+				JP
+
+70-B3-D5   (hex)		Trinity Solutions LLC
+AC9000-AC9FFF     (base 16)		Trinity Solutions LLC
+				PO Box 309
+				Mt. Nebo  West Virginia  26679
+				US
+
+70-B3-D5   (hex)		Kumu Networks
+01C000-01CFFF     (base 16)		Kumu Networks
+				960 Hamlin Court
+				Sunnyvale  California  94089
+				US
+
+70-B3-D5   (hex)		Nation-E Ltd.
+DE8000-DE8FFF     (base 16)		Nation-E Ltd.
+				89 Medinat hayehudim St.
+				Herziliya  IL  4676672
+				IL
+
+70-B3-D5   (hex)		Sonel S.A.
+775000-775FFF     (base 16)		Sonel S.A.
+				Wokulskiego 11
+				Swidnica  Dolnoslaskie  58-100
+				PL
+
+70-B3-D5   (hex)		CDR SRL
+BDD000-BDDFFF     (base 16)		CDR SRL
+				VIA DEGLI ARTIGIANI 6
+				GINESTRA FIORENTINA  FLORENCE  50055
+				IT
+
+70-B3-D5   (hex)		Novo DR Ltd.
+300000-300FFF     (base 16)		Novo DR Ltd.
+				40 HaAtsmaut Road
+				Yehud  - Please Choose -  5630417
+				IL
+
+70-B3-D5   (hex)		Hengen Technologies GmbH
+F2C000-F2CFFF     (base 16)		Hengen Technologies GmbH
+				Vogesenstrasse 19a
+				Landau  Rheinland-Pfalz  76829
+				DE
+
+70-B3-D5   (hex)		DEV Systemtechnik GmbH& Co KG
+418000-418FFF     (base 16)		DEV Systemtechnik GmbH& Co KG
+				Gruener Weg 4A
+				Friedberg  Hessen  61169
+				DE
+
+70-B3-D5   (hex)		ATEME
+AA7000-AA7FFF     (base 16)		ATEME
+				26 Burospace
+				Bievres  IDF  91470
+				
+
+70-B3-D5   (hex)		Code Blue Corporation
+C3F000-C3FFFF     (base 16)		Code Blue Corporation
+				259 Hedcor St
+				Holland  MI  49423
+				US
+
+70-B3-D5   (hex)		RF-Tuote Oy
+849000-849FFF     (base 16)		RF-Tuote Oy
+				Joensuunkatu 13
+				Salo    24130
+				FI
+
+70-B3-D5   (hex)		Sienda New Media Technologies GmbH
+A81000-A81FFF     (base 16)		Sienda New Media Technologies GmbH
+				Lange Gasse 90
+				Basel  Basel-land  4052
+				CH
+
+70-B3-D5   (hex)		Logiwaste AB
+D0D000-D0DFFF     (base 16)		Logiwaste AB
+				Gamla Stallet Stora Wäsby
+				Upplands Väsby  Upplands Väsby  194 37
+				SE
+
+70-B3-D5   (hex)		Teenage Engineering AB
+1AF000-1AFFFF     (base 16)		Teenage Engineering AB
+				Katarina Bangata 71
+				Stockholm  n/a  11642
+				SE
+
+70-B3-D5   (hex)		ConectaIP Tecnologia S.L.
+D7F000-D7FFFF     (base 16)		ConectaIP Tecnologia S.L.
+				Novell 58, 4.2
+				Barcelona    08014
+				ES
+
+70-B3-D5   (hex)		Bizwerks, LLC
+A97000-A97FFF     (base 16)		Bizwerks, LLC
+				1201 East 15th Street
+				Plano  TX  75074
+				US
+
+70-B3-D5   (hex)		SerEnergy A/S
+7B8000-7B8FFF     (base 16)		SerEnergy A/S
+				Lyngvej 8
+				Aalborg  Denmark  9000
+				DK
+
+70-B3-D5   (hex)		KST technology
+3DB000-3DBFFF     (base 16)		KST technology
+				164-1, KST b/d., Bangi-dong, songpa-gu
+				SEOUL  N/A  138-050
+				KR
+
+70-B3-D5   (hex)		KLS Netherlands B.V.
+DCF000-DCFFFF     (base 16)		KLS Netherlands B.V.
+				Buitenvaart 1401
+				HOOGEVEEN  DRENTHE  7905 SJ
+				NL
+
+70-B3-D5   (hex)		TechOne
+F92000-F92FFF     (base 16)		TechOne
+				6-20-13-803, Chuo
+				Fukutsu  Fukuoka  8113217
+				JP
+
+70-B3-D5   (hex)		Embest Technology Co., Ltd
+A55000-A55FFF     (base 16)		Embest Technology Co., Ltd
+				Tower B 4/F, Shanshui Building, , Liuxian Ave. No. 1183, Taoyuan St.,
+				Nanshan District, Shenzhen  Gangdong Province  518055
+				CN
+
+70-B3-D5   (hex)		PulseTor LLC
+A25000-A25FFF     (base 16)		PulseTor LLC
+				1580 Reed Road
+				Pennington  NJ  08534
+				US
+
+70-B3-D5   (hex)		Embsec AB
+D1F000-D1FFFF     (base 16)		Embsec AB
+				Propellervagen 10
+				Taby  Taby  18362
+				SE
+
+70-B3-D5   (hex)		Tokyo Drawing Ltd.
+164000-164FFF     (base 16)		Tokyo Drawing Ltd.
+				103 Ni Terai-machi
+				Nomi-shi  Ishikawa  923-1121
+				JP
+
+70-B3-D5   (hex)		Zulex International Co.,Ltd.
+959000-959FFF     (base 16)		Zulex International Co.,Ltd.
+				52/54 M.6 Talingchan-Suphanburi rd.,
+				Bangyai  Nonthaburi  11140
+				TH
+
+70-B3-D5   (hex)		Prolan Process Control Co.
+FF5000-FF5FFF     (base 16)		Prolan Process Control Co.
+				Szentendrei út 1-3.
+				Budakalász  HUngary  2013
+				HU
+
+70-B3-D5   (hex)		Seneco A/S
+327000-327FFF     (base 16)		Seneco A/S
+				Bøgekildevej 4
+				Hasselager  Danmark  8361
+				DK
+
+70-B3-D5   (hex)		COMM-connect A/S
+ECE000-ECEFFF     (base 16)		COMM-connect A/S
+				Raasigvangen 2
+				Slangerup    DK-3550
+				DK
+
+70-B3-D5   (hex)		IHI Inspection & Instrumentation Co., Ltd.
+344000-344FFF     (base 16)		IHI Inspection & Instrumentation Co., Ltd.
+				1-100, Takamatsu-Cho,
+				Tachikawa-Shi  Tokyo  190-0011
+				JP
+
+70-B3-D5   (hex)		EIWA GIKEN INC.
+BA4000-BA4FFF     (base 16)		EIWA GIKEN INC.
+				5-708 FUSHIYA NAKAGAWA-KU
+				NAGOYA  AICHI-PREFECTURE  454-0996
+				JP
+
+70-B3-D5   (hex)		JC HUNTER TECHNOLOGIES
+C61000-C61FFF     (base 16)		JC HUNTER TECHNOLOGIES
+				185 Custer St. Apt. 4
+				Lander  wy  82520
+				US
+
+70-B3-D5   (hex)		nVideon, Inc.
+3B8000-3B8FFF     (base 16)		nVideon, Inc.
+				3170 Sugarplum Rd. NE
+				Atlanta  GA  30345
+				US
+
+70-B3-D5   (hex)		Private
+220000-220FFF     (base 16)		Private
+
+70-B3-D5   (hex)		Christ Elektronik GmbH
+A5B000-A5BFFF     (base 16)		Christ Elektronik GmbH
+				Alpenstrasse 34
+				Memmingen  Bayern  87700
+				DE
+
+70-B3-D5   (hex)		FUJI DATA SYSTEM CO.,LTD.
+E92000-E92FFF     (base 16)		FUJI DATA SYSTEM CO.,LTD.
+				5-21-14
+				AMAGASAKI-SHI  HYOGO PREF  660-0892
+				JP
+
+70-B3-D5   (hex)		EUROPEAN ADVANCED TECHNOLOGIES
+F8C000-F8CFFF     (base 16)		EUROPEAN ADVANCED TECHNOLOGIES
+				VIA CARDUCCI 32
+				MILANO  MILANO  20123
+				IT
+
+70-B3-D5   (hex)		SENSYS GmbH
+F2B000-F2BFFF     (base 16)		SENSYS GmbH
+				Rabenfelde 5
+				Bad Saarow/OT Neu Golm  Brandenburg  15526
+				DE
+
+70-B3-D5   (hex)		Siemens Healthcare Diagnostics
+20C000-20CFFF     (base 16)		Siemens Healthcare Diagnostics
+				62 Flanders Bartley Road
+				Flanders  NJ  07836
+				US
+
+70-B3-D5   (hex)		Hatteland Display AS
+BC6000-BC6FFF     (base 16)		Hatteland Display AS
+				Pb. 446 Alnabru
+				Oslo  Oslo  N-0614
+				NO
+
+70-B3-D5   (hex)		MultiDyne
+3DF000-3DFFFF     (base 16)		MultiDyne
+				191 Forest Ave
+				Locust Valley  NY  11560
+				US
+
+70-B3-D5   (hex)		Reonix Automation
+0B3000-0B3FFF     (base 16)		Reonix Automation
+				#10 - 3716 56 ave SE
+				Calgary  Alberta  T2C2B5
+				CA
+
+70-B3-D5   (hex)		Molu Technology Inc., LTD.
+0C0000-0C0FFF     (base 16)		Molu Technology Inc., LTD.
+				NO. 25, Ln., 230, Zhonghe Rd.,
+				Zhonghe Dist.  New Taipei City  235
+				TW
+
+70-B3-D5   (hex)		Aditec GmbH
+3CE000-3CEFFF     (base 16)		Aditec GmbH
+				Talweg 17
+				Offenau  Baden-Wuerttemberg  74254
+				DE
+
+70-B3-D5   (hex)		IAI-Israel Aerospace Industries MBT
+E4C000-E4CFFF     (base 16)		IAI-Israel Aerospace Industries MBT
+				1 Altalef st.
+				Yehud  Yehud  5610001
+				IL
+
+70-B3-D5   (hex)		Excel Medical Electronics LLC
+DC5000-DC5FFF     (base 16)		Excel Medical Electronics LLC
+				801 Maplewood Dr.
+				Jupiter  Florida  33458
+				US
+
+70-B3-D5   (hex)		FEITIAN CO.,LTD.
+E26000-E26FFF     (base 16)		FEITIAN CO.,LTD.
+				7-F,7-15-17 Roppongi
+				MINATOKU  TOKYO  106-0032
+				JP
+
+70-B3-D5   (hex)		Advitronics telecom bv
+E99000-E99FFF     (base 16)		Advitronics telecom bv
+				Garnizoenstraat 1
+				Velp (nb)  Noord brabant  5363 VX
+				NL
+
+70-B3-D5   (hex)		Asiga
+362000-362FFF     (base 16)		Asiga
+				2/36 Albert Street
+				St Peters  NSW  2044
+				AU
+
+70-B3-D5   (hex)		Weigl Elektronik & Mediaprojekte
+01D000-01DFFF     (base 16)		Weigl Elektronik & Mediaprojekte
+				Limberg 3
+				Gramastetten  Oberoesterreich  4201
+				AT
+
+70-B3-D5   (hex)		P&C Micro's Pty Ltd
+6F2000-6F2FFF     (base 16)		P&C Micro's Pty Ltd
+				14 Ricketts Road
+				Mount Waverley  Victoria  3149
+				AU
+
+70-B3-D5   (hex)		Meiknologic GmbH
+2E3000-2E3FFF     (base 16)		Meiknologic GmbH
+				Hölderlinweg 19a
+				Darmstadt  Hessen  64285
+				DE
+
+70-B3-D5   (hex)		eSOL Co.,Ltd.
+45E000-45EFFF     (base 16)		eSOL Co.,Ltd.
+				8-1-31
+				  saitama  336-0026
+				JP
+
+70-B3-D5   (hex)		Chugoku Electric Manufacturing Co.,Inc
+5AA000-5AAFFF     (base 16)		Chugoku Electric Manufacturing Co.,Inc
+				Ozu 4-4-32
+				Minami-ku, Hirosima-shi  HIROSHIMA  732-0802
+				JP
+
+70-B3-D5   (hex)		Eltwin A/S
+FC5000-FC5FFF     (base 16)		Eltwin A/S
+				Torsoevej 1b
+				Risskov  Aarhus  8240
+				DK
+
+70-B3-D5   (hex)		«Intellect module» LLC
+819000-819FFF     (base 16)		«Intellect module» LLC
+				Krasnogo kursanta str. 25 lit. J
+				Saint-Petersburg    197110
+				RU
+
+70-B3-D5   (hex)		Skywave Networks Private Limited
+2DA000-2DAFFF     (base 16)		Skywave Networks Private Limited
+				Achyut Mansion,H.No 7-1-621/48,Flat No 201,Above Sindhu Travels,
+				Hyderabad  Andhra Pradesh  500038
+				IN
+
+70-B3-D5   (hex)		Heartland.Data Inc.
+AC8000-AC8FFF     (base 16)		Heartland.Data Inc.
+				361 Fukui-Cho
+				Ashikaga-City  Tochigi-Pref  326-0338
+				JP
+
+70-B3-D5   (hex)		christmann informationstechnik + medien GmbH & Co. KG
+564000-564FFF     (base 16)		christmann informationstechnik + medien GmbH & Co. KG
+				Ilseder Huette 10c
+				Ilsede  Niedersachsen  31241
+				DE
+
+70-B3-D5   (hex)		IST ElektronikgesmbH
+60C000-60CFFF     (base 16)		IST ElektronikgesmbH
+				Marktplatz 40
+				Neukirchen am Walde  Upper Austria  4724
+				AT
+
+70-B3-D5   (hex)		Kongsberg Intergrated Tactical Systems
+EF2000-EF2FFF     (base 16)		Kongsberg Intergrated Tactical Systems
+				10 Pinehurst Dr
+				Bellport  New York  11713
+				US
+
+70-B3-D5   (hex)		Barnstormer Softworks
+3E1000-3E1FFF     (base 16)		Barnstormer Softworks
+				837 N Grant St.
+				Wooster  OH  44691
+				US
+
+70-B3-D5   (hex)		Sudo Premium Engineering
+052000-052FFF     (base 16)		Sudo Premium Engineering
+				Seoch dong, Seocho gu
+				    ASI|KR|KS013|SEOUL
+				KR
+
+70-B3-D5   (hex)		Vetaphone A/S
+A0E000-A0EFFF     (base 16)		Vetaphone A/S
+				Fabriksvej 11
+				Kolding  Region syddanmark  6000
+				DK
+
+70-B3-D5   (hex)		Power Diagnostic Service
+F61000-F61FFF     (base 16)		Power Diagnostic Service
+				No.5, Aly. 2, Ln. 261, Yanping Rd,
+				Hsinchu City  Hsinchu County  300
+				TW
+
+70-B3-D5   (hex)		Flexsolution APS
+433000-433FFF     (base 16)		Flexsolution APS
+				Østervangsvej 39
+				Esbjerg N  Jylland  6715
+				DK
+
+70-B3-D5   (hex)		MacGray Services
+F34000-F34FFF     (base 16)		MacGray Services
+				404 Wyman St
+				Waltham  MA  02451
+				
+
+70-B3-D5   (hex)		AKIS technologies
+FD3000-FD3FFF     (base 16)		AKIS technologies
+				Ciurlionio g. 82
+				Vilnius  Lithuania  03100
+				LT
+
+70-B3-D5   (hex)		BBI Engineering, Inc.
+FA1000-FA1FFF     (base 16)		BBI Engineering, Inc.
+				241 Quint Street
+				San Francisco  California  94124
+				US
+
+70-B3-D5   (hex)		Tecnint HTE SRL
+51D000-51DFFF     (base 16)		Tecnint HTE SRL
+				Via della Tecnica 16/18
+				Osnago  Lecco  23875
+				IT
+
+70-B3-D5   (hex)		Tband srl
+9F4000-9F4FFF     (base 16)		Tband srl
+				Via A. Meucci, 4
+				Preganziol  Treviso  31022
+				IT
+
+70-B3-D5   (hex)		JamHub Corp.
+3A8000-3A8FFF     (base 16)		JamHub Corp.
+				One Main Street
+				Whitinsville  MA  01588
+				US
+
+70-B3-D5   (hex)		Monroe Electronics, Inc.
+40A000-40AFFF     (base 16)		Monroe Electronics, Inc.
+				100 Housel Avenue
+				Lyndonville  NY  14098
+				US
+
+70-B3-D5   (hex)		J.D. Koftinoff Software, Ltd.
+EDC000-EDCFFF     (base 16)		J.D. Koftinoff Software, Ltd.
+				4-3600 Pleasant Valley Rd.
+				Vernon  B.C  V1T4L6
+				CA
+
+70-B3-D5   (hex)		Inras GmbH
+B3D000-B3DFFF     (base 16)		Inras GmbH
+				Altenberger Straße 69
+				Linz  Oberösterreich  A-4040
+				AT
+
+70-B3-D5   (hex)		Tunstall A/S
+139000-139FFF     (base 16)		Tunstall A/S
+				Niels Bohrs vej 42
+				Stilling  Skanderborg  8660
+				DK
+
+70-B3-D5   (hex)		Evco S.p.a.
+183000-183FFF     (base 16)		Evco S.p.a.
+				Via Feltre 81
+				Sedico  Belluno  32036
+				IT
+
+70-B3-D5   (hex)		Cellular Specialties, Inc.
+3C2000-3C2FFF     (base 16)		Cellular Specialties, Inc.
+				670 North Commercial Avenue,
+				Manchester  NH  03101
+				US
+
+00-1B-C5   (hex)		TN Core Co.,Ltd.
+0BF000-0BFFFF     (base 16)		TN Core Co.,Ltd.
+				707, Daerung Post Tower 6, 50-3
+				Seoul  -  153715
+				KR
+
+00-1B-C5   (hex)		Digital Loggers, Inc.
+0C0000-0C0FFF     (base 16)		Digital Loggers, Inc.
+				2695 Walsh Avenue
+				Santa Clara  CA  95051
+				US
+
+00-1B-C5   (hex)		Autelis, LLC
+0B7000-0B7FFF     (base 16)		Autelis, LLC
+				1820 W Calle De Pompas
+				Phoenix  Arizona  85085
+				US
+
+00-1B-C5   (hex)		Techlan Reti s.r.l.
+0AE000-0AEFFF     (base 16)		Techlan Reti s.r.l.
+				Via delle mondine 8 a/b
+				Carpi  Modena  41012
+				IT
+
+00-1B-C5   (hex)		P A Network Laboratory Co.,Ltd
+0A3000-0A3FFF     (base 16)		P A Network Laboratory Co.,Ltd
+				2-12-10 Takanami Bld.3kai, Shiba, Minato-ku, Tokyo, 105-0014, Japan
+				Minato-ku  Tokyo  1050014
+				JP
+
+00-1B-C5   (hex)		S.I.C.E.S. srl
+09C000-09CFFF     (base 16)		S.I.C.E.S. srl
+				Via Molinello, 8B
+				Jerago con Orago  VARESE  21040
+				IT
+
+00-1B-C5   (hex)		Cubic Systems, Inc.
+098000-098FFF     (base 16)		Cubic Systems, Inc.
+				139 Dino Drive
+				Ann Arbor  MI  48103
+				US
+
+00-1B-C5   (hex)		EUREK  SRL
+08D000-08DFFF     (base 16)		EUREK  SRL
+				VIA CELLETTA 8/B
+				IMOLA  BOLOGNA  40026
+				US
+
+00-1B-C5   (hex)		SIGNATURE CONTROL SYSTEMS, INC.
+089000-089FFF     (base 16)		SIGNATURE CONTROL SYSTEMS, INC.
+				18 GOODYEAR STE 110
+				IRVINE  CA  92618
+				US
+
+00-1B-C5   (hex)		UAB Kitron
+088000-088FFF     (base 16)		UAB Kitron
+				Taikos pr. 151
+				  Kaunas  LT-52119
+				LT
+
+00-1B-C5   (hex)		WonATech Co., Ltd.
+081000-081FFF     (base 16)		WonATech Co., Ltd.
+				171-17
+				Seocho-Gu  Seoul  137-180
+				KR
+
+00-1B-C5   (hex)		HPI High Pressure Instrumentation GmbH
+079000-079FFF     (base 16)		HPI High Pressure Instrumentation GmbH
+				Ueberfuhrgasse 37
+				Graz  Steiermark  8020
+				AT
+
+00-1B-C5   (hex)		LLC Emzior
+06F000-06FFFF     (base 16)		LLC Emzior
+				Strelna, Svyazi Street, 34, Lit A, of. 234
+				Saint-Petersburg    198515
+				RU
+
+00-1B-C5   (hex)		Siemens Industries, Inc, Retail & Commercial Systems
+070000-070FFF     (base 16)		Siemens Industries, Inc, Retail & Commercial Systems
+				9225 Bee Caves Rd
+				Austin  TX  78733
+				US
+
+00-1B-C5   (hex)		Verified Energy, LLC.
+06B000-06BFFF     (base 16)		Verified Energy, LLC.
+				PO Box 111
+				Oneida  New York  13421
+				US
+
+00-1B-C5   (hex)		Luxcon System Limited
+06C000-06CFFF     (base 16)		Luxcon System Limited
+				Rm1605, SEAVIEW PLAZA, 283 SHAUKEIWAN RD,
+				HongKong    
+				HK
+
+00-1B-C5   (hex)		Two Dimensional Instruments, LLC
+06E000-06EFFF     (base 16)		Two Dimensional Instruments, LLC
+				P O Box 159
+				Crestwood  KY  40014
+				US
+
+00-1B-C5   (hex)		Sulaon Oy
+062000-062FFF     (base 16)		Sulaon Oy
+				Muuraintie 6
+				Salo    24280
+				FI
+
+00-1B-C5   (hex)		Plair Media Inc.
+065000-065FFF     (base 16)		Plair Media Inc.
+				2901 Tasman Drive
+				Santa Clara  California  95054
+				US
+
+00-1B-C5   (hex)		JSC Prominform
+05D000-05DFFF     (base 16)		JSC Prominform
+				Gazeti Zvezda str., 24A
+				Perm  Permskiy krai  614000
+				RU
+
+00-1B-C5   (hex)		Private
+054000-054FFF     (base 16)		Private
+
+00-1B-C5   (hex)		OOO Actidata
+040000-040FFF     (base 16)		OOO Actidata
+				Bolshaya Pochtovaya 36 Bldg 10
+				Moscow    105082
+				RU
+
+00-1B-C5   (hex)		EURESYS S.A.
+039000-039FFF     (base 16)		EURESYS S.A.
+				Avenue du Pre-Aily 14
+				ANGLEUR  LIEGE  4031
+				BE
+
+00-1B-C5   (hex)		RTLS Ltd.
+035000-035FFF     (base 16)		RTLS Ltd.
+				42 Bol. Gruzinskaya str.
+				Moscow    123056
+				RU
+
+00-1B-C5   (hex)		Rose + Herleth GbR
+01D000-01DFFF     (base 16)		Rose + Herleth GbR
+				Wendenweg 17
+				Berlin    13595
+				DE
+
+00-1B-C5   (hex)		ABA ELECTRONICS TECHNOLOGY CO.,LTD
+01A000-01AFFF     (base 16)		ABA ELECTRONICS TECHNOLOGY CO.,LTD
+				10F-3,NO.2,SEC.4,JHONGYANG RD,TUCHENG CITY,
+				TAIPEI    236
+				TW
+
+00-1B-C5   (hex)		Zamir Recognition Systems Ltd.
+013000-013FFF     (base 16)		Zamir Recognition Systems Ltd.
+				Manachat Tech Park 1/22
+				Jerusalem    96951
+				IL
+
+00-1B-C5   (hex)		OOO NPP Mera
+011000-011FFF     (base 16)		OOO NPP Mera
+				Pionerskaya 4
+				Korolev  Moscow reg  141070
+				RU
+
+00-1B-C5   (hex)		Private
+005000-005FFF     (base 16)		Private
+
+00-1B-C5   (hex)		TRIAX-HIRSCHMANN Multi-Media GmbH
+006000-006FFF     (base 16)		TRIAX-HIRSCHMANN Multi-Media GmbH
+				Karl-Benz-Strasse 10
+				Pliezhausen  Baden-Württemberg  72124
+				DE
+
+00-1B-C5   (hex)		Energy Aware Technology
+007000-007FFF     (base 16)		Energy Aware Technology
+				Suite 515
+				Vancouver  BC  V6A3X3
+				CA
+
+00-1B-C5   (hex)		Private
+00B000-00BFFF     (base 16)		Private
+
+70-B3-D5   (hex)		Deep BV
+55F000-55FFFF     (base 16)		Deep BV
+				Johan van Hasseltweg 39d
+				Amsterdam    1021KN
+				NL
+
+70-B3-D5   (hex)		SHEN ZHEN QLS ELECTRONIC TECHNOLOGY CO.,LTD.
+6E3000-6E3FFF     (base 16)		SHEN ZHEN QLS ELECTRONIC TECHNOLOGY CO.,LTD.
+				Room A1502, NiuLanQian Building, MinZhi Road, LongHua Town
+				ShenZhen  GuangDong  518109
+				CN
+
+70-B3-D5   (hex)		Xavant
+1EB000-1EBFFF     (base 16)		Xavant
+				309 Derdepoort Rylaan, Silverton
+				Pretoria  Gauteng  0181
+				ZA
+
+70-B3-D5   (hex)		Argosy Labs Inc.
+E5B000-E5BFFF     (base 16)		Argosy Labs Inc.
+				490 Canal St #14
+				San Rafael  CA  94901
+				US
+
+70-B3-D5   (hex)		Brayden Automation Corp
+B19000-B19FFF     (base 16)		Brayden Automation Corp
+				6230 Aviation Circle
+				Loveland   CO  80538
+				US
+
+70-B3-D5   (hex)		Aditec GmbH
+A38000-A38FFF     (base 16)		Aditec GmbH
+				Talweg 17
+				Offenau  Baden-Wuerttemberg  74254
+				DE
+
+70-B3-D5   (hex)		PEEK TRAFFIC
+691000-691FFF     (base 16)		PEEK TRAFFIC
+				5401 N SAM HOUSTON PKWY W
+				HOUSTON    77086
+				US
+
+70-B3-D5   (hex)		Dataflex International BV
+52A000-52AFFF     (base 16)		Dataflex International BV
+				van Nassauweg 2-6
+				Krimpen aan den IJssel  Zuid-Holland  2921 LX
+				NL
+
+70-B3-D5   (hex)		MATELEX
+372000-372FFF     (base 16)		MATELEX
+				26, AVENUE DU PETIT PARC
+				VINCENNES    94683
+				FR
+
+70-B3-D5   (hex)		ETL Elektrotechnik Lauter GmbH
+DE3000-DE3FFF     (base 16)		ETL Elektrotechnik Lauter GmbH
+				Konrad-Zuse-Str. 2
+				Mauerstetten  Bavaria  87665
+				DE
+
+70-B3-D5   (hex)		Light field Lab
+D27000-D27FFF     (base 16)		Light field Lab
+				699 E Brokaw Rd
+				San Jose  CA  95112
+				US
+
+70-B3-D5   (hex)		CENSIS, Uiversity of Glasgow
+1C2000-1C2FFF     (base 16)		CENSIS, Uiversity of Glasgow
+				121 George Street
+				Glasgow    G1 1RD
+				GB
+
+70-B3-D5   (hex)		Solarlytics, Inc.
+366000-366FFF     (base 16)		Solarlytics, Inc.
+				288 Lindbergh Avenue
+				LIVERMORE  CA  94551
+				US
+
+70-B3-D5   (hex)		Phytron GmbH
+7BE000-7BEFFF     (base 16)		Phytron GmbH
+				Industriestr. 12
+				Groebenzell  Bayern  82194
+				DE
+
+70-B3-D5   (hex)		Maytronics Ltd.
+90E000-90EFFF     (base 16)		Maytronics Ltd.
+				
+				    
+				
+
+70-B3-D5   (hex)		InterTalk Critical Information Systems
+5D0000-5D0FFF     (base 16)		InterTalk Critical Information Systems
+				371 Cutler Avenue
+				Dartmouth  Nova Scotia  B3B 0J5
+				CA
+
+70-B3-D5   (hex)		fpgalabs.com
+BA5000-BA5FFF     (base 16)		fpgalabs.com
+				p.Moskovskiy, d. Rumyantsevo, str.4
+				Moscow    108811
+				RU
+
+70-B3-D5   (hex)		Gstar Creation Co .,Ltd
+A67000-A67FFF     (base 16)		Gstar Creation Co .,Ltd
+				1F NO53 Jimay Street san chong district
+				New Taipei    241
+				TW
+
+70-B3-D5   (hex)		JSC Kaluga Astral
+E89000-E89FFF     (base 16)		JSC Kaluga Astral
+				Tsyolkovsky 4
+				Kaluga  Kaluga  248000
+				RU
+
+70-B3-D5   (hex)		Sunsa, Inc
+BFF000-BFFFFF     (base 16)		Sunsa, Inc
+				3422 Fait Ave
+				Baltimore  MD  21224
+				US
+
+70-B3-D5   (hex)		Dream D&S Co.,Ltd
+E8B000-E8BFFF     (base 16)		Dream D&S Co.,Ltd
+				6F, 8, Jungdae-ro 8-gil, Songpa-gu
+				Seoul    05833
+				KR
+
+70-B3-D5   (hex)		FTG Corporation
+017000-017FFF     (base 16)		FTG Corporation
+				10 Commander Blvd.
+				Ajax  Ontario  M1S 3T2
+				CA
+
+70-B3-D5   (hex)		AddSecure Smart Grids
+126000-126FFF     (base 16)		AddSecure Smart Grids
+				Campus Gräsvik 1
+				Karlskrona    37175
+				SE
+
+70-B3-D5   (hex)		Changchun FAW Yanfeng Visteon Automotive Electronics.,Ltd.
+93B000-93BFFF     (base 16)		Changchun FAW Yanfeng Visteon Automotive Electronics.,Ltd.
+				No.2338 Guanggu Street Changchun City
+				chang chun  ji lin  130000
+				CN
+
+70-B3-D5   (hex)		Pantec AG
+A98000-A98FFF     (base 16)		Pantec AG
+				Industriering 21
+				Ruggell    9491
+				LI
+
+70-B3-D5   (hex)		Shachihata Inc.
+51A000-51AFFF     (base 16)		Shachihata Inc.
+				37 , SHINMEI-CHO , KOUWA
+				INAZAWA  AICHI  492-8102
+				JP
+
+70-B3-D5   (hex)		Wartsila Voyage Limited
+AE2000-AE2FFF     (base 16)		Wartsila Voyage Limited
+				13-18 City Quay
+				Dublin 2    D02 ED70
+				IE
+
+70-B3-D5   (hex)		Unisight Digital Products
+2D8000-2D8FFF     (base 16)		Unisight Digital Products
+				99 Inverness Drive East, Suite#180
+				Englewood  CO  80112
+				US
+
+70-B3-D5   (hex)		H2O-YUG LLC
+BDF000-BDFFFF     (base 16)		H2O-YUG LLC
+				Uralskaya st. 87/1 k
+				Krasnodar  Krasnodarskiy krai  350059
+				RU
+
+70-B3-D5   (hex)		QBIC COMMUNICATIONS DMCC
+8AF000-8AFFFF     (base 16)		QBIC COMMUNICATIONS DMCC
+				Office 302 1Lake Plaza Jumeirah Lake Towers Cluster T
+				Dubai    393518
+				AE
+
+70-B3-D5   (hex)		Softel
+9A5000-9A5FFF     (base 16)		Softel
+				35 bld 9, Nizhnyaya Krasnosel'skaya Ulitsa
+				Moscow    105066
+				RU
+
+70-B3-D5   (hex)		Shanghai Danyan Information Technology Co., Ltd.
+1B1000-1B1FFF     (base 16)		Shanghai Danyan Information Technology Co., Ltd.
+				12D, Building 7, 2388, Chenhang Road, Minhang District
+				Shanghai  Shanghai  201114
+				CN
+
+70-B3-D5   (hex)		Innovative Control Systems, LP
+89E000-89EFFF     (base 16)		Innovative Control Systems, LP
+				10801 N. 24th Ave Ste 102
+				Phoenix  AZ  85029
+				US
+
+70-B3-D5   (hex)		ACD Elekronik GmbH
+DA2000-DA2FFF     (base 16)		ACD Elekronik GmbH
+				Engelberg 2
+				Achstetten    88480
+				DE
+
+70-B3-D5   (hex)		Chengdu Meihuan Technology Co., Ltd
+C95000-C95FFF     (base 16)		Chengdu Meihuan Technology Co., Ltd
+				Floor 17, Building D6, Tianfu Software Park,
+				Chengdu  Sichuan  610041
+				CN
+
+70-B3-D5   (hex)		The Fire Horn, Inc.
+3F8000-3F8FFF     (base 16)		The Fire Horn, Inc.
+				1212 Helen St
+				Paducah  KY  42001
+				US
+
+70-B3-D5   (hex)		Absolent AB
+EFC000-EFCFFF     (base 16)		Absolent AB
+				Staplaregatan 1
+				Lidköping    53140
+				SE
+
+70-B3-D5   (hex)		Booz Allen Hamilton
+A24000-A24FFF     (base 16)		Booz Allen Hamilton
+				1900 West Park Drive, Suite 205
+				Westborough    01581
+				US
+
+70-B3-D5   (hex)		Mothonic AB
+8E6000-8E6FFF     (base 16)		Mothonic AB
+				Krouthéns Gata 8
+				Linköping    582 55
+				SE
+
+70-B3-D5   (hex)		OOO Research and Production Center Computer Technologies
+262000-262FFF     (base 16)		OOO Research and Production Center Computer Technologies
+				Komsomolsky avenue, 90-17
+				Perm  Perm Region  614010
+				RU
+
+70-B3-D5   (hex)		Digital Systems Engineering
+034000-034FFF     (base 16)		Digital Systems Engineering
+				17491 N. 93rd St.
+				Scottsdale  AZ  85255
+				US
+
+70-B3-D5   (hex)		Lumiplan Duhamel
+BB1000-BB1FFF     (base 16)		Lumiplan Duhamel
+				2 rue de l'industrie
+				Domène  Isère  38420
+				FR
+
+70-B3-D5   (hex)		SenseNL
+8C0000-8C0FFF     (base 16)		SenseNL
+				Ambachtsweg 41 F
+				Pijnacker  Zuid-Holland  2641 KT
+				NL
+
+70-B3-D5   (hex)		 LEMZ-T, LLC
+306000-306FFF     (base 16)		 LEMZ-T, LLC
+				Razvitia pr., 8
+				Tomsk    634031
+				RU
+
+70-B3-D5   (hex)		LEAFF ENGINEERING SRL
+34B000-34BFFF     (base 16)		LEAFF ENGINEERING SRL
+				Via Pastore 10
+				Osimo  AN  60027
+				IT
+
+70-B3-D5   (hex)		CONTES, spol. s r.o.
+E2A000-E2AFFF     (base 16)		CONTES, spol. s r.o.
+				U podolskeho hrbitova 667/6
+				Prague    14700
+				CZ
+
+70-B3-D5   (hex)		Braemar Manufacturing, LLC
+93A000-93AFFF     (base 16)		Braemar Manufacturing, LLC
+				1285 Corporate Center Drive Suite 150
+				Eagan  MN  55121
+				US
+
+70-B3-D5   (hex)		Viotec USA
+899000-899FFF     (base 16)		Viotec USA
+				3 East Third Ave
+				San Mateo  CA  94401
+				US
+
+70-B3-D5   (hex)		Eredi Giuseppe Mercuri SPA
+6CE000-6CEFFF     (base 16)		Eredi Giuseppe Mercuri SPA
+				via Cupa Vicinale S.Aniello, 88
+				Naples    80146
+				IT
+
+70-B3-D5   (hex)		ITK Dr. Kassen GmbH
+58A000-58AFFF     (base 16)		ITK Dr. Kassen GmbH
+				Beim Eberacker 3
+				D-35633 Lahnau    
+				DE
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+88E000-88EFFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		Privafy, Inc
+A6A000-A6AFFF     (base 16)		Privafy, Inc
+				2 Burlington Woods Dr. Suite 200
+				Burlington  MA  01803
+				US
+
+70-B3-D5   (hex)		Contec Americas Inc.
+5D2000-5D2FFF     (base 16)		Contec Americas Inc.
+				3991 Sarno Rd
+				Melbourne  FL  32934
+				US
+
+70-B3-D5   (hex)		elements
+62D000-62DFFF     (base 16)		elements
+				Townsgate Road Suite 200 
+				Westlake Village  CA  91361
+				US
+
+70-B3-D5   (hex)		DAT Informatics Pvt Ltd
+244000-244FFF     (base 16)		DAT Informatics Pvt Ltd
+				Plot No 109 HPSIDC Industria Estate Davni, Baddi
+				Baddi  HIMACHAL PRADESH  173205
+				IN
+
+70-B3-D5   (hex)		Abbott Diagnostics Technologies AS
+6C6000-6C6FFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo  Oslo  0504
+				NO
+
+70-B3-D5   (hex)		Gamber Johnson-LLC
+E34000-E34FFF     (base 16)		Gamber Johnson-LLC
+				3001 Borham Ave
+				Stevens Point  WI  54481
+				US
+
+70-B3-D5   (hex)		RCH Vietnam Limited Liability Company
+6BD000-6BDFFF     (base 16)		RCH Vietnam Limited Liability Company
+				Workshop F.01B-2, Lot No. F.01B Long Hau
+				Ho Chi Minh City  Ho Chi Minh  70000
+				VN
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+1F2000-1F2FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		QUALITTEQ LLC
+614000-614FFF     (base 16)		QUALITTEQ LLC
+				16th Parkovaya 26/1
+				Moscow    105484
+				RU
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+C2B000-C2BFFF     (base 16)		YUYAMA MFG Co.,Ltd
+				3-3-1
+				TOYONAKASHI  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		eSMART Technologies SA
+979000-979FFF     (base 16)		eSMART Technologies SA
+				Chemin de la Rueyre, 118
+				Renens VD    1020
+				CH
+
+70-B3-D5   (hex)		Duplomatic MS spa
+DE1000-DE1FFF     (base 16)		Duplomatic MS spa
+				Via Re Depaolini 24
+				Parabiago  Milan  20015
+				IT
+
+70-B3-D5   (hex)		Axnes AS
+65F000-65FFFF     (base 16)		Axnes AS
+				Terje Løvåsvei 1
+				Grimstad    4879
+				NO
+
+70-B3-D5   (hex)		Nanjing Pingguang Electronic Technology Co., Ltd
+541000-541FFF     (base 16)		Nanjing Pingguang Electronic Technology Co., Ltd
+				B30/B31 4th Floor, Building#11, Shengtai Road, JiangNing District
+				NanJing    211100
+				CN
+
+70-B3-D5   (hex)		thingdust AG
+3C1000-3C1FFF     (base 16)		thingdust AG
+				Moosstrasse 7
+				Lucerne  Lucerne  6003
+				CH
+
+70-B3-D5   (hex)		ALVAT s.r.o.
+369000-369FFF     (base 16)		ALVAT s.r.o.
+				Chodovska 228/3
+				Praha 4    14100
+				CZ
+
+70-B3-D5   (hex)		PHYZHON Health Inc
+744000-744FFF     (base 16)		PHYZHON Health Inc
+				180 Blue Ravine Road, suite A
+				Folsom  CA  95630
+				US
+
+70-B3-D5   (hex)		PCB Piezotronics
+4CA000-4CAFFF     (base 16)		PCB Piezotronics
+				3425 Walden Avenue
+				Depew  NY  14043
+				US
+
+70-B3-D5   (hex)		Panoramic Power
+53A000-53AFFF     (base 16)		Panoramic Power
+				15 Atir Yeda
+				Kfar Saba    4464312
+				IL
+
+70-B3-D5   (hex)		STEP sarl
+481000-481FFF     (base 16)		STEP sarl
+				11, avenue Aristide Berges
+				LANCEY  ISERE  38190
+				FR
+
+70-B3-D5   (hex)		ZPAS S.A.
+2D9000-2D9FFF     (base 16)		ZPAS S.A.
+				Przygorze 209
+				Woliborz  Lower Silesian (Dolno?l?skie)  57-431
+				PL
+
+70-B3-D5   (hex)		Redstone Sunshine(Beijing)Technology Co.,Ltd.
+6C9000-6C9FFF     (base 16)		Redstone Sunshine(Beijing)Technology Co.,Ltd.
+				Floor 2,Block B,Fu Xing Office Building,He Tao Yuan NO.30,Guan Dong Dian Bei Jie,Chao Yang District
+				Beijing    100020
+				CN
+
+70-B3-D5   (hex)		Mianjie Technology
+8FC000-8FCFFF     (base 16)		Mianjie Technology
+				Zhubang2000 Building2 1205
+				Beijing    100000
+				CN
+
+70-B3-D5   (hex)		HAI ROBOTICS Co., Ltd.
+0B7000-0B7FFF     (base 16)		HAI ROBOTICS Co., Ltd.
+				Room 101, 1st Floor, Xuda Industrial Park, Xiaweiyuanyixiang Xixiang, Bao'an District
+				SHENZHEN  GUANGDONG  518000
+				CN
+
+70-B3-D5   (hex)		inomatic GmbH
+1CA000-1CAFFF     (base 16)		inomatic GmbH
+				Karl-Braun-Straße 12
+				Nordhorn    48531
+				DE
+
+70-B3-D5   (hex)		Integer.pl S.A.
+2D1000-2D1FFF     (base 16)		Integer.pl S.A.
+				Wielicka 28
+				Krakow    30-552
+				PL
+
+70-B3-D5   (hex)		Benchmark Electronics - Secure Technology
+67C000-67CFFF     (base 16)		Benchmark Electronics - Secure Technology
+				1740 E Wilshire Ave
+				Santa Ana  CA  92705
+				US
+
+70-B3-D5   (hex)		Peter Huber Kaeltemaschinenbau AG
+DC4000-DC4FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
+				Werner-von-Siemens-Str. 1
+				Offenburg  Ba-Wue  77656
+				DE
+
+70-B3-D5   (hex)		Beijing Aumiwalker technology CO.,LTD
+C7C000-C7CFFF     (base 16)		Beijing Aumiwalker technology CO.,LTD
+				Floor 6, Tower 1, No.1 Zhonghe Road Fengtai Science Park Beijing P.R.C.
+				Beijing  Beijing  100071
+				CN
+
+70-B3-D5   (hex)		Kazdream Technologies LLP
+089000-089FFF     (base 16)		Kazdream Technologies LLP
+				10, Turkestan Str.
+				Nur-Sultan    010000
+				KZ
+
+70-B3-D5   (hex)		Cardinal Scales Manufacturing Co
+E5A000-E5AFFF     (base 16)		Cardinal Scales Manufacturing Co
+				203 East Daugherty Street
+				Webb City  MO  64870
+				US
+
+70-B3-D5   (hex)		Farmpro Ltd
+17C000-17CFFF     (base 16)		Farmpro Ltd
+				806, 28 Digitalro 30gil, Gurogu
+				Seoul    08389
+				KR
+
+70-B3-D5   (hex)		Talleres de Escoriaza SA
+E83000-E83FFF     (base 16)		Talleres de Escoriaza SA
+				Barrio Ventas, 35
+				Irun  Gipuzkoa  20305
+				ES
+
+70-B3-D5   (hex)		Military Research Institute
+2F7000-2F7FFF     (base 16)		Military Research Institute
+				Veslarska 230
+				Brno    63700
+				CZ
+
+70-B3-D5   (hex)		Network Innovations
+DA7000-DA7FFF     (base 16)		Network Innovations
+				4950 West Prospect Road
+				Fort Lauderdale  FL  33309
+				US
+
+70-B3-D5   (hex)		SLAT
+2C8000-2C8FFF     (base 16)		SLAT
+				11 Rue Jean-Elysée DUPUY
+				Champagne au Mont d'Or  Rhône  69543
+				FR
+
+70-B3-D5   (hex)		Shanghai Qinyue Communication Technology Co., Ltd.
+B57000-B57FFF     (base 16)		Shanghai Qinyue Communication Technology Co., Ltd.
+				Room 101,Building 51,Lane 588,ShuPing Road,Jiading District
+				Shanghai    201808
+				CN
+
+70-B3-D5   (hex)		Selmatec AS
+8FE000-8FEFFF     (base 16)		Selmatec AS
+				Berghagen 3
+				Oslo  Select One  1405
+				NO
+
+70-B3-D5   (hex)		QUISS GmbH
+AAB000-AABFFF     (base 16)		QUISS GmbH
+				Lilienthalstraße 5
+				Puchheim    82178
+				DE
+
+70-B3-D5   (hex)		Grossenbacher Systeme AG
+5FE000-5FEFFF     (base 16)		Grossenbacher Systeme AG
+				Spinnereistrasse 10
+				St. Gallen    9008
+				CH
+
+70-B3-D5   (hex)		Accolade Technology Inc
+87A000-87AFFF     (base 16)		Accolade Technology Inc
+				124 Grove Street, Suite 315
+				FRANKLIN  MA  02038
+				US
+
+70-B3-D5   (hex)		Adcole Space
+922000-922FFF     (base 16)		Adcole Space
+				734 Forest St.,Suite #100
+				Marlborough  MA  01752
+				US
+
+70-B3-D5   (hex)		QSnet Visual Technologies Ltd
+5C7000-5C7FFF     (base 16)		QSnet Visual Technologies Ltd
+				13 Gan Rave
+				YAVNE  ISRAEL  8122321
+				IL
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+886000-886FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		Loehnert Elektronik GmbH
+8A3000-8A3FFF     (base 16)		Loehnert Elektronik GmbH
+				Oskar-Sembach-Ring 18
+				Lauf a.d.Peg.  Bavaria  91207
+				DE
+
+70-B3-D5   (hex)		plc-tec AG
+095000-095FFF     (base 16)		plc-tec AG
+				Panoramastrasse 5
+				Hägglingen    5607
+				CH
+
+70-B3-D5   (hex)		Edge Power Solutions
+612000-612FFF     (base 16)		Edge Power Solutions
+				5131 Industry Drive, Suite 107
+				Melbourne  FL  32940
+				US
+
+70-B3-D5   (hex)		Antek Technology 
+9E5000-9E5FFF     (base 16)		Antek Technology 
+				11F, No. 51 Heng Yang Road
+				Taipei    100
+				TW
+
+70-B3-D5   (hex)		Eurotempest AB
+E37000-E37FFF     (base 16)		Eurotempest AB
+				Algolgatan 10
+				Linköping  Other  58335
+				SE
+
+70-B3-D5   (hex)		ARECA EMBEDDED SYSTEMS PVT LTD
+F15000-F15FFF     (base 16)		ARECA EMBEDDED SYSTEMS PVT LTD
+				Plot No.5B, Survey No.184-185, P-V, Cherlapally
+				HYDERABAD  TELANGANA  500051
+				IN
+
+70-B3-D5   (hex)		KOREA SPECTRAL PRODUCTS
+F59000-F59FFF     (base 16)		KOREA SPECTRAL PRODUCTS
+				Room #402, 273, DIGITAL-RO,
+				GURO-GU  SEOUL  08381
+				KR
+
+70-B3-D5   (hex)		YOUSUNG
+3B4000-3B4FFF     (base 16)		YOUSUNG
+				76, Gaetbeol-ro, Yeonsu-gu
+				Incheon    21999
+				KR
+
+70-B3-D5   (hex)		Weihai Weigao Medical Imaging Technology Co., Ltd
+534000-534FFF     (base 16)		Weihai Weigao Medical Imaging Technology Co., Ltd
+				No. 566-1, Qishan Road, Lingang Economic and Technological Development Zone
+				Weihai  Shandong  264210
+				CN
+
+70-B3-D5   (hex)		LiveCopper Inc.
+9E9000-9E9FFF     (base 16)		LiveCopper Inc.
+				600 Greer Rd
+				Palo Alto  CA  94303
+				US
+
+70-B3-D5   (hex)		KMtronic ltd
+6D6000-6D6FFF     (base 16)		KMtronic ltd
+				Dobri Czintulov 28A str.
+				Gorna Oryahovica  VT  5100
+				BG
+
+70-B3-D5   (hex)		CANON ELECTRON TUBES & DEVICES CO., LTD.
+44A000-44AFFF     (base 16)		CANON ELECTRON TUBES & DEVICES CO., LTD.
+				1385, Shimoishigami
+				Otawara-shi  Tochigi  324-8550
+				JP
+
+70-B3-D5   (hex)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
+64D000-64DFFF     (base 16)		SANMINA ISRAEL MEDICAL SYSTEMS LTD
+				Koren industrial zone no 5
+				Mallot  Israel  2101002
+				IL
+
+70-B3-D5   (hex)		Orlaco Products B.V.
+4F5000-4F5FFF     (base 16)		Orlaco Products B.V.
+				Albert Plesmanstraat 42
+				Barneveld    3772MN
+				NL
+
+70-B3-D5   (hex)		Shenzhen Lianfaxun Electronic Technology Co., Ltd
+5C0000-5C0FFF     (base 16)		Shenzhen Lianfaxun Electronic Technology Co., Ltd
+				No. 25, Tianrong road, Tianliao second industrial park, Yutang street, Guangming new district
+				Shenzhen  Guangdong   518132
+				CN
+
+70-B3-D5   (hex)		CAST Group of Companies Inc.
+BDE000-BDEFFF     (base 16)		CAST Group of Companies Inc.
+				35 Ripley Ave.
+				Toronto  Ontario  M6S3P2
+				CA
+
+70-B3-D5   (hex)		Momentum Data Systems
+116000-116FFF     (base 16)		Momentum Data Systems
+				5432 Bolsa Ave Unit B
+				Huntington Beach  CA  92649
+				US
+
+70-B3-D5   (hex)		Camozzi Automation SpA
+3AB000-3ABFFF     (base 16)		Camozzi Automation SpA
+				Via Eritrea 20/I
+				BRESCIA  ITALY  25080
+				IT
+
+70-B3-D5   (hex)		PuS GmbH und Co. KG
+322000-322FFF     (base 16)		PuS GmbH und Co. KG
+				Hainstr. 13
+				Gera  Germany  07545
+				DE
+
+70-B3-D5   (hex)		Ci4Rail
+195000-195FFF     (base 16)		Ci4Rail
+				Vogelweiherstrasse 20
+				Nürnberg  Bavaria  90441
+				DE
+
+70-B3-D5   (hex)		Arris
+988000-988FFF     (base 16)		Arris
+				2500 Walsh Ave.
+				Santa Clara  CA  95014
+				US
+
+70-B3-D5   (hex)		Xirgo Technologies LLC
+646000-646FFF     (base 16)		Xirgo Technologies LLC
+				188 Camino Ruiz
+				Camarillo  CA  93012
+				US
+
+70-B3-D5   (hex)		Transit Solutions, LLC.
+4E2000-4E2FFF     (base 16)		Transit Solutions, LLC.
+				114 West Grandview Avenue
+				Zelienople  PA  16063
+				US
+
+70-B3-D5   (hex)		JD Squared, Inc.
+562000-562FFF     (base 16)		JD Squared, Inc.
+				915 Riverview Drive
+				Johnson City  TN  37601
+				US
+
+70-B3-D5   (hex)		VOCAL Technologies Ltd.
+7B5000-7B5FFF     (base 16)		VOCAL Technologies Ltd.
+				520 LEE ENTRANCE STE 202
+				BUFFALO  NY  142282583
+				US
+
+70-B3-D5   (hex)		Deltronic Security AB
+CEC000-CECFFF     (base 16)		Deltronic Security AB
+				E A Rosengrensgata 4
+				Västra Frölunda    421 31
+				SE
+
+70-B3-D5   (hex)		Atman Tecnologia Ltda
+F90000-F90FFF     (base 16)		Atman Tecnologia Ltda
+				Avenida Adalberto Simão Nader
+				Vitória  Espírito Santo  29070-010
+				BR
+
+70-B3-D5   (hex)		Shenyang TECHE Technology Co.,Ltd
+47D000-47DFFF     (base 16)		Shenyang TECHE Technology Co.,Ltd
+				oom2302, Changfeng building, 26-2 Pangjiang street, Dadong District
+				Shenyang  Liaoning  110041
+				CN
+
+70-B3-D5   (hex)		Öresundskraft AB
+668000-668FFF     (base 16)		Öresundskraft AB
+				Västra Sandgatan 4
+				Helsingborg    25225
+				SE
+
+70-B3-D5   (hex)		Omsk Manufacturing Association named after A.S. Popov
+A61000-A61FFF     (base 16)		Omsk Manufacturing Association named after A.S. Popov
+				10 Let Oktyabrya str, 195
+				Omsk    644009
+				RU
+
+70-B3-D5   (hex)		DELITECH GROUP
+018000-018FFF     (base 16)		DELITECH GROUP
+				425 Rue du Trident
+				VENDARGUES    34740
+				FR
+
+70-B3-D5   (hex)		Larraioz Elektronika
+176000-176FFF     (base 16)		Larraioz Elektronika
+				FACT Larraioz, Ctra GI3162 km 2,2
+				Zarautz    20800
+				ES
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+7A4000-7A4FFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+F5D000-F5DFFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		Potter Electric Signal Co. LLC
+832000-832FFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+70-B3-D5   (hex)		ICsec S.A.
+395000-395FFF     (base 16)		ICsec S.A.
+				Wichrowa 1A
+				Poznan    60-446
+				PL
+
+70-B3-D5   (hex)		SOtM
+CC7000-CC7FFF     (base 16)		SOtM
+				202 SSANGYONG-DONG 84/9 WOLBONG 4RO SEOBUK GU
+				Cheonan  Chungnam  31171
+				KR
+
+70-B3-D5   (hex)		MIJIENETRTECH CO.,LTD
+DCB000-DCBFFF     (base 16)		MIJIENETRTECH CO.,LTD
+				402, Ilshin Techno Valley,555, Dalseo-daero Dalseo-gu
+				Daegu    42709
+				KR
+
+70-B3-D5   (hex)		Mitech Integrated Systems Inc.
+C28000-C28FFF     (base 16)		Mitech Integrated Systems Inc.
+				219 Robert Hicks Dr
+				Toronto  ON  M2R3R3
+				CA
+
+70-B3-D5   (hex)		KMtronic ltd
+540000-540FFF     (base 16)		KMtronic ltd
+				Dobri Czintulov 28A str.
+				 Gorna Oryahovica  VT  5100
+				BG
+
+70-B3-D5   (hex)		Terratel Technology s.r.o.
+31A000-31AFFF     (base 16)		Terratel Technology s.r.o.
+				Dukelska 2192
+				Benesov  CZ  25601
+				CZ
+
+70-B3-D5   (hex)		Teledyne API
+F9D000-F9DFFF     (base 16)		Teledyne API
+				9970 Carroll Canyon Road
+				San Diego  CA  92131-1106
+				US
+
+70-B3-D5   (hex)		QIT Co., Ltd.
+81C000-81CFFF     (base 16)		QIT Co., Ltd.
+				#713, ACE Gwanggyo Tower1, 17, Daehak 4-ro, Yeongtong-gu
+				Suwon-si  Gyeonggi-do  16226
+				KR
+
+70-B3-D5   (hex)		Farmobile, LLC
+13F000-13FFFF     (base 16)		Farmobile, LLC
+				4001 West 114th Street  Suite 300
+				Leawood  KS  66211
+				US
+
+70-B3-D5   (hex)		PULOON Tech
+DB9000-DB9FFF     (base 16)		PULOON Tech
+				23-10, Hyoryeong-ro 60 gil, Seocho-gu, Seoul, korea
+				seoul    06721
+				KR
+
+70-B3-D5   (hex)		Polskie Sady Nowe Podole Sp. z o.o.
+C30000-C30FFF     (base 16)		Polskie Sady Nowe Podole Sp. z o.o.
+				Rzymowskiego 17/48
+				Warsaw  Mazowieckie  02-297
+				PL
+
+70-B3-D5   (hex)		Suzhou ZhiCai Co.,Ltd.
+E13000-E13FFF     (base 16)		Suzhou ZhiCai Co.,Ltd.
+				Room 1902,Block A,Global Fortune Plaza,88 Suhui Road,Suzhou Industrial Park
+				SuZhou  Jiangsu  215021
+				CN
+
+70-B3-D5   (hex)		Private
+4DA000-4DAFFF     (base 16)		Private
+
+70-B3-D5   (hex)		devAIs s.r.l.
+A16000-A16FFF     (base 16)		devAIs s.r.l.
+				Via Carlo Goldoni 1
+				Milano  Milano  20129
+				IT
+
+70-B3-D5   (hex)		Naval Group
+B27000-B27FFF     (base 16)		Naval Group
+				40-42 Rue Du Docteur Finlay
+				PARIS CEDEX 15    75732
+				FR
+
+70-B3-D5   (hex)		Shanghai Armour Technology Co., Ltd.
+8E5000-8E5FFF     (base 16)		Shanghai Armour Technology Co., Ltd.
+				Room 411, building 10, 471 Guiping Road, Xuhui District
+				 Shanghai   Shanghai  200233
+				CN
+
+70-B3-D5   (hex)		Hangzhou Weimu Technology Co.,Ltd.
+373000-373FFF     (base 16)		Hangzhou Weimu Technology Co.,Ltd.
+				3 / f, building 1, yongle village, cangqian street, yuhang district
+				Hangzhou  Zhejiang  310000
+				CN
+
+70-B3-D5   (hex)		Xirgo Technologies LLC
+CA0000-CA0FFF     (base 16)		Xirgo Technologies LLC
+				188 Camino Ruiz
+				Camarillo  CA  93012
+				US
+
+70-B3-D5   (hex)		Xirgo Technologies LLC
+CEB000-CEBFFF     (base 16)		Xirgo Technologies LLC
+				188 Camino Ruiz
+				Camarillo  CA  93012
+				US
+
+70-B3-D5   (hex)		GreenFlux
+A02000-A02FFF     (base 16)		GreenFlux
+				Mauritskade 63
+				Amsterdam    1092 AD
+				NL
+
+70-B3-D5   (hex)		Iylus Inc.
+02C000-02CFFF     (base 16)		Iylus Inc.
+				3100 Clarendon Blvd., Suite 200
+				Arlington  VA  22201
+				US
+
+70-B3-D5   (hex)		Coda Octopus Products Limited
+4D9000-4D9FFF     (base 16)		Coda Octopus Products Limited
+				38 S. Gyle Crescent, South Gyle Business Park
+				Edinburgh  Scotland  EH12 9EB
+				GB
+
+70-B3-D5   (hex)		Walter Müller AG
+0E4000-0E4FFF     (base 16)		Walter Müller AG
+				Russikerstrasse 37
+				Fehraltorf  Zürich  8320
+				CH
+
+70-B3-D5   (hex)		Sensoronic Co.,Ltd
+D52000-D52FFF     (base 16)		Sensoronic Co.,Ltd
+				1311ho, sambo techno tower, Jomaru-ro 385beongil,
+				Bucheon-si  Gyeonggi-do  14556
+				KR
+
+70-B3-D5   (hex)		COONTROL Tecnologia em Combustão LTDA EPP
+8E9000-8E9FFF     (base 16)		COONTROL Tecnologia em Combustão LTDA EPP
+				RUA ABRAHAN LINCOLS, 464, Jardim América
+				RIO DO SUL  SANTA CATARINA  89160202
+				BR
+
+70-B3-D5   (hex)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
+E42000-E42FFF     (base 16)		Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
+				No.2 Xinxiu Street, Hunnan District, Shenyang
+				Shenyang  Liaoning  110000
+				CN
+
+70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+196000-196FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+70-B3-D5   (hex)		Guan Show Technologe Co., Ltd.
+829000-829FFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+70-B3-D5   (hex)		Thermokon Sensortechnik GmbH
+581000-581FFF     (base 16)		Thermokon Sensortechnik GmbH
+				Platanenweg 1
+				Mittenaar  Hessen  35756
+				DE
+
+70-B3-D5   (hex)		PoolDigital GmbH & Co. KG
+063000-063FFF     (base 16)		PoolDigital GmbH & Co. KG
+				Gablinger Weg 102
+				Augsburg    86156
+				DE
+
+70-B3-D5   (hex)		Loma Systems s.r.o.
+BC8000-BC8FFF     (base 16)		Loma Systems s.r.o.
+				Southwood
+				Farnborough  Hampshire  GU14 0NY
+				GB
+
+70-B3-D5   (hex)		MECT SRL
+2C5000-2C5FFF     (base 16)		MECT SRL
+				VIA E. FERMI 57/59
+				ALPIGNANO  string:TO  10091
+				IT
+
+70-B3-D5   (hex)		MB connect line GmbH Fernwartungssysteme
+71A000-71AFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+70-B3-D5   (hex)		EIZO RUGGED SOLUTIONS
+5B9000-5B9FFF     (base 16)		EIZO RUGGED SOLUTIONS
+				442 Northlake Blvd Suite 1008
+				Altamonte Springs  FL  32701
+				US
+
+70-B3-D5   (hex)		ISG Nordic AB
+DEF000-DEFFFF     (base 16)		ISG Nordic AB
+				Energigatan 9
+				KUNGSBACKA  Select State  SE-43437
+				SE
+
+70-B3-D5   (hex)		CTROGERS LLC
+474000-474FFF     (base 16)		CTROGERS LLC
+				815 1st Ave #174
+				Seattle  WA  98104
+				US
+
+70-B3-D5   (hex)		Deep Secure Limited
+DD0000-DD0FFF     (base 16)		Deep Secure Limited
+				1 Nimrod House, Sandys Road
+				Malvern  Worcestershire  WR14 1JJ
+				GB
+
+70-B3-D5   (hex)		Mi-Fi Networks Pvt Ltd
+411000-411FFF     (base 16)		Mi-Fi Networks Pvt Ltd
+				No 13 A, Kalakshetra Road , Thiruvanmiyur 
+				Chennai  Tamil Nadu  600041
+				IN
+
+70-B3-D5   (hex)		CesiumAstro Inc.
+E5F000-E5FFFF     (base 16)		CesiumAstro Inc.
+				13412 Galleria Circle, Suite H-100
+				Austin  TX  78738
+				US
+
+70-B3-D5   (hex)		Druck Ltd.
+EAA000-EAAFFF     (base 16)		Druck Ltd.
+				Firtree Lane, Groby, Leicester
+				Le6 0FH  England  
+				GB
+
+70-B3-D5   (hex)		Panoramic Power
+4ED000-4EDFFF     (base 16)		Panoramic Power
+				Atir Yeda 15
+				Kfar Saba    4464312
+				IL
+
+70-B3-D5   (hex)		STENTORIUS by ADI
+5B3000-5B3FFF     (base 16)		STENTORIUS by ADI
+				41 - 47 Rue des frères Lumière
+				Neuilly sur Marne  Ile-de-France  93330
+				FR
+
+70-B3-D5   (hex)		Codewerk GmbH
+4D0000-4D0FFF     (base 16)		Codewerk GmbH
+				Siemensallee 75
+				Karlsruhe    76187 
+				DE
+
+70-B3-D5   (hex)		Orlaco Products B.V.
+333000-333FFF     (base 16)		Orlaco Products B.V.
+				Albert Plesmanstraat 42
+				Barneveld    3772MN
+				NL
+
+70-B3-D5   (hex)		ScopeSensor Oy
+DF7000-DF7FFF     (base 16)		ScopeSensor Oy
+				Teollisuustie 1
+				Haukipudas    90830
+				FI
+
+70-B3-D5   (hex)		KBPR LLC
+11E000-11EFFF     (base 16)		KBPR LLC
+				Raketny bulvar street 16
+				Moscow  Select State  129164
+				RU
+
+70-B3-D5   (hex)		Anello Photonics
+96A000-96AFFF     (base 16)		Anello Photonics
+				3964 Rivermark Plaza, Suite 144
+				Santa Clara  CA  95054
+				US
+
+70-B3-D5   (hex)		HORIZON.INC
+F40000-F40FFF     (base 16)		HORIZON.INC
+				1600 Aza-Shironoshita Asahi
+				Shin Asahi-cho  Takashima, Shiga  520-1501
+				JP
+
+70-B3-D5   (hex)		SUS Corporation
+1ED000-1EDFFF     (base 16)		SUS Corporation
+				6F, S-patio Bldg. 14-25 Minami-cho, Suruga-ku,
+				Shizuoka city,  Shizuoka  422-8067
+				JP
+
+70-B3-D5   (hex)		Lumiplan Duhamel
+A0C000-A0CFFF     (base 16)		Lumiplan Duhamel
+				2 rue de l'industrie
+				Domène  Isère  38420
+				FR
+
+8C-1F-64   (hex)		Griffyn Robotech Private Limited
+4DD000-4DDFFF     (base 16)		Griffyn Robotech Private Limited
+				Shewale Center  B MIDC Pimpri Colony
+				Pimpri Chinchwad  Maharashtra  411019
+				IN
+
+8C-1F-64   (hex)		Suzhou Xingxiangyi Precision Manufacturing Co.,Ltd.
+000000-000FFF     (base 16)		Suzhou Xingxiangyi Precision Manufacturing Co.,Ltd.
+				Building 2, no.6, Lane 1, Wupu Road, Suzhou Industrial Park
+				Suzhou  Jiangsu  215000
+				CN
+
+8C-1F-64   (hex)		CPC (UK)
+391000-391FFF     (base 16)		CPC (UK)
+				Unit 3 Beta Way
+				Egham  Surrey  TW208RE
+				GB
+
+8C-1F-64   (hex)		NavSys Technology Inc.
+3C4000-3C4FFF     (base 16)		NavSys Technology Inc.
+				IT Mirea Tower #2003-1, 33, Digital-ro 9-gil
+				Geumcheon-gu  Seoul, Republic of Korea  08511
+				KR
+
+8C-1F-64   (hex)		SamabaNova Systems
+0A8000-0A8FFF     (base 16)		SamabaNova Systems
+				2100 Geng Rd #103
+				Palo Alto  CA  94303
+				US
+
+8C-1F-64   (hex)		Edgeware AB
+FD1000-FD1FFF     (base 16)		Edgeware AB
+				Master Samuelsgatan 42
+				Stockholm    11157
+				SE
+
+8C-1F-64   (hex)		Intamsys Technology Co.Ltd
+466000-466FFF     (base 16)		Intamsys Technology Co.Ltd
+				3/F, Building C9, No.3188 Xiupu Road Pudong New District,Shanghai
+				Shanghai    201315
+				CN
+
+8C-1F-64   (hex)		Power Electronics Espana, S.L.
+C2F000-C2FFFF     (base 16)		Power Electronics Espana, S.L.
+				C/ Leonardo Da Vinci, 24-26
+				Paterna  Valencia  46980
+				ES
+
+8C-1F-64   (hex)		Hikari Alphax Inc.
+166000-166FFF     (base 16)		Hikari Alphax Inc.
+				2-2-2, Nakanoshima, Kita-ku
+				Osaka  Osaka  530-0005
+				JP
+
+8C-1F-64   (hex)		Miracle Healthcare, Inc.
+EAC000-EACFFF     (base 16)		Miracle Healthcare, Inc.
+				130-2, Donghwagongdan-ro, Munmak-eup
+				Wonju-si  Gangwon-do  26365
+				KR
+
+8C-1F-64   (hex)		Ringtail Security
+A29000-A29FFF     (base 16)		Ringtail Security
+				Grand-Rue 75
+				Gland  VD  1196
+				CH
+
+70-B3-D5   (hex)		Tobi Tribe Inc.
+D68000-D68FFF     (base 16)		Tobi Tribe Inc.
+				45945 Trefoil Ln #157
+				 Sterling  VA  20166
+				US
+
+70-B3-D5   (hex)		Barracuda Measurement Solutions
+FFA000-FFAFFF     (base 16)		Barracuda Measurement Solutions
+				10701 Corporate Dr Suite 360
+				Stafford  TX  77477
+				US
+
+8C-1F-64   (hex)		ASAP Electronics GmbH
+9CF000-9CFFFF     (base 16)		ASAP Electronics GmbH
+				Sachsstraße 1A
+				Gaimersheim  Bayern  85080
+				DE
+
+8C-1F-64   (hex)		WINK Streaming
+372000-372FFF     (base 16)		WINK Streaming
+				3 Prados Del Convento
+				Escazu  SJ  10201
+				CR
+
+8C-1F-64   (hex)		Yu-Heng Electric Co., LTD 
+575000-575FFF     (base 16)		Yu-Heng Electric Co., LTD 
+				No 8 , Gongye 2nd Rd., Renwu Industry Park
+				Kaohsiung  Kaohsiung City  814
+				TW
+
+70-B3-D5   (hex)		Siemens Industry Software Inc.
+3FE000-3FEFFF     (base 16)		Siemens Industry Software Inc.
+				46871 Bayside Parkway
+				Fremont  CA  94538
+				US
+
+8C-1F-64   (hex)		OTMetric
+7A6000-7A6FFF     (base 16)		OTMetric
+				1 rue de La Haye
+				Tremblay en France    93290
+				FR
+
+8C-1F-64   (hex)		BRS Sistemas Eletrônicos
+2C8000-2C8FFF     (base 16)		BRS Sistemas Eletrônicos
+				Rua Gomes de Freitas, 491 / 204
+				Porto Alegre  RS  91380-000
+				BR
+
+8C-1F-64   (hex)		Syscom Instruments SA
+A4E000-A4EFFF     (base 16)		Syscom Instruments SA
+				industrie 21
+				Sainte-Croix    1450
+				CH
+
+8C-1F-64   (hex)		Caproc Oy
+D4A000-D4AFFF     (base 16)		Caproc Oy
+				Vintilänkatu 20
+				Lahti    15680
+				FI
+
+8C-1F-64   (hex)		KIB Energo LLC
+D3C000-D3CFFF     (base 16)		KIB Energo LLC
+				Moskovskoe ave. 9
+				Saint-Petersburg    196158
+				RU
+
+8C-1F-64   (hex)		Nonet Inc
+2A5000-2A5FFF     (base 16)		Nonet Inc
+				Daan Dist, Xinhai Road Section 1, No. 79, 5F
+				Taipei  Taipei  10647
+				TW
+
+8C-1F-64   (hex)		WBNet
+1E3000-1E3FFF     (base 16)		WBNet
+				Drielse Wetering 17
+				Kerkdriel  Gelderland  5331RK
+				NL
+
+8C-1F-64   (hex)		EVLO Stockage Énergie
+998000-998FFF     (base 16)		EVLO Stockage Énergie
+				1804 Boulevard Lionel-Boulet, Édifice Archimède
+				VARENNES  Quebec  J3X 1S1
+				CA
+
+8C-1F-64   (hex)		Landis+Gyr Equipamentos de Medição Ltda
+542000-542FFF     (base 16)		Landis+Gyr Equipamentos de Medição Ltda
+				Hasdrubal Bellegard, 400, CIC
+				Curitiba  Paraná  81460-120
+				BR
+
+8C-1F-64   (hex)		Xtend Technologies Pvt Ltd
+83C000-83CFFF     (base 16)		Xtend Technologies Pvt Ltd
+				Blue Hill, KP Lane, Ernakulam South
+				Kochi  Kerala  682016
+				IN
+
+8C-1F-64   (hex)		Franke Aquarotter GmbH
+DE1000-DE1FFF     (base 16)		Franke Aquarotter GmbH
+				Parkstraße 1-5
+				Ludwigsfelde    14974
+				DE
+
+8C-1F-64   (hex)		U -MEI-DAH INT'L ENTERPRISE CO.,LTD.
+4B0000-4B0FFF     (base 16)		U -MEI-DAH INT'L ENTERPRISE CO.,LTD.
+				11F., No. 365, Fude 3rd Rd., Xizhi Dist., New Taipei City 221011 , Taiwan (R.O.C.)
+				New Taipei City    221011
+				TW
+
+8C-1F-64   (hex)		NodeUDesign
+11F000-11FFFF     (base 16)		NodeUDesign
+				7295 Flyhawk ln
+				Sauk City  WI  53583
+				US
+
+70-B3-D5   (hex)		Decentlab GmbH
+7BA000-7BAFFF     (base 16)		Decentlab GmbH
+				Kriesbachstrasse 30
+				Dübendorf    8600
+				CH
+
+8C-1F-64   (hex)		Private
+4DB000-4DBFFF     (base 16)		Private
+
+8C-1F-64   (hex)		MERKLE Schweissanlagen-Technik GmbH
+C7C000-C7CFFF     (base 16)		MERKLE Schweissanlagen-Technik GmbH
+				Industriestraße 3
+				Kötz     89359
+				DE
+
+70-B3-D5   (hex)		Guardian Controls International Ltd
+016000-016FFF     (base 16)		Guardian Controls International Ltd
+				 The Dairy, Spring Bank Farm
+				Arclid  Cheshire  CW11 2UD
+				GB
+
+8C-1F-64   (hex)		Scenario Automation
+AEF000-AEFFFF     (base 16)		Scenario Automation
+				Rua Paulo Elias, 216
+				São Carlos  São Paulo  13564400
+				BR
+
+8C-1F-64   (hex)		Solid Invent Ltda.
+1C2000-1C2FFF     (base 16)		Solid Invent Ltda.
+				Buarque de Macedo, 267
+				Porto Alegre  Rio Grande do Sul  90230250
+				BR
+
+8C-1F-64   (hex)		Digilens
+227000-227FFF     (base 16)		Digilens
+				1276 Hammerwood Ave
+				Sunnyvale  CA  94089
+				US
+
+8C-1F-64   (hex)		ASTRACOM Co. Ltd
+75F000-75FFFF     (base 16)		ASTRACOM Co. Ltd
+				Shpalernaya st, 24A
+				Saint-Peterburg    191123
+				RU
+
+8C-1F-64   (hex)		BOZHON Precision Industry Technology Co.,Ltd
+8AC000-8ACFFF     (base 16)		BOZHON Precision Industry Technology Co.,Ltd
+				No.666 Huxin west Road, Wujiang District, Suzhou city
+				Suzhou    215200
+				CN
+
+8C-1F-64   (hex)		Ashton Bentley Collaboration Spaces
+8B5000-8B5FFF     (base 16)		Ashton Bentley Collaboration Spaces
+				23 Schooner Court
+				Dartford  Kent  DA2 6NW
+				GB
+
+8C-1F-64   (hex)		Davetech Limited
+DAA000-DAAFFF     (base 16)		Davetech Limited
+				Centenary House
+				Brighton    BN16QR
+				GB
+
+8C-1F-64   (hex)		IVOR Intelligent Electrical Appliance Co., Ltd
+92D000-92DFFF     (base 16)		IVOR Intelligent Electrical Appliance Co., Ltd
+				Floor 3, Building 67, Shidongxia Road, Chancheng
+				Foshan  Guangdong  528000
+				CN
+
+8C-1F-64   (hex)		USM Pty Ltd
+CD6000-CD6FFF     (base 16)		USM Pty Ltd
+				29/90 Frances Bay Drive
+				Darwin  Northern Territory  0820
+				AU
+
+8C-1F-64   (hex)		Circa Enterprises Inc
+CBE000-CBEFFF     (base 16)		Circa Enterprises Inc
+				2256 29 Street Northeast #10
+				Calgary  Alberta  T1Y7G4
+				CA
+
+8C-1F-64   (hex)		OvercomTech
+70E000-70EFFF     (base 16)		OvercomTech
+				#1003, Byucksan Digital Valley 2-cha, 184, Gasan digital 2-ro, Geumcheon-gu
+				Seoul    08501
+				KR
+
+8C-1F-64   (hex)		Forever Engineering Systems Pvt. Ltd.
+8AA000-8AAFFF     (base 16)		Forever Engineering Systems Pvt. Ltd.
+				B-817, 8th floor, Advant Navis Business Park, Sector-142
+				NOIDA  Uttar Pradesh  201301
+				IN
+
+8C-1F-64   (hex)		Velvac Incorporated
+53F000-53FFFF     (base 16)		Velvac Incorporated
+				2405 S. Calhoun Road
+				New Berlin  WI  53151-2709
+				US
+
+8C-1F-64   (hex)		LG-LHT Aircraft Solutions GmbH
+E21000-E21FFF     (base 16)		LG-LHT Aircraft Solutions GmbH
+				Hindenburgstrasse 162
+				Hamburg    22297
+				DE
+
+8C-1F-64   (hex)		Future wave ultra tech Company 
+A94000-A94FFF     (base 16)		Future wave ultra tech Company 
+				Number 8 , Barmak street,Arjantin Square
+				Tehran  Tehran   1516634114
+				IR
+
+8C-1F-64   (hex)		TAKASAKI KYODO COMPUTING CENTER Co.,LTD.
+7DD000-7DDFFF     (base 16)		TAKASAKI KYODO COMPUTING CENTER Co.,LTD.
+				936-20,Shimonojo-Machi
+				Takasaki-City  Gunma  370-0854
+				JP
+
+8C-1F-64   (hex)		IoTSecure, LLC
+F04000-F04FFF     (base 16)		IoTSecure, LLC
+				2180 Satellite Boulevard, Suite 400
+				Duluth  GA  30097
+				US
+
+8C-1F-64   (hex)		ACOD
+56D000-56DFFF     (base 16)		ACOD
+				Varshavskoye shosse, 125
+				Moscow  Moscow  117587
+				RU
+
+8C-1F-64   (hex)		GIORDANO CONTROLS SPA
+C0C000-C0CFFF     (base 16)		GIORDANO CONTROLS SPA
+				VIA PARALLELA 2/4
+				VILLA BARTOLOMEA  IT  37049
+				IT
+
+8C-1F-64   (hex)		Feritech Ltd.
+6B3000-6B3FFF     (base 16)		Feritech Ltd.
+				Trelan Business Centre, Menerdue Lane
+				Redruth  Non-U.S. resident  TR16 6PD
+				GB
+
+8C-1F-64   (hex)		Surge Networks, Inc.
+472000-472FFF     (base 16)		Surge Networks, Inc.
+				2035 Sunset Lake Road, Suite B-2
+				Newark  DE  19702
+				US
+
+8C-1F-64   (hex)		Critical Software SA
+D52000-D52FFF     (base 16)		Critical Software SA
+				Parque Industrial de Taveiro, Lote 49
+				Coimbra  504208187  3045-504
+				PT
+
+8C-1F-64   (hex)		RealD, Inc.
+B3D000-B3DFFF     (base 16)		RealD, Inc.
+				9777 Wilshire Boulevard, Ste 430
+				 Beverly Hills  CA  90212
+				US
+
+8C-1F-64   (hex)		Elsist Srl
+6F4000-6F4FFF     (base 16)		Elsist Srl
+				Via G. Brodolini, 15
+				Casale Monf.to  Alessandria  15033
+				IT
+
+8C-1F-64   (hex)		Picocom Technology Ltd 
+B4C000-B4CFFF     (base 16)		Picocom Technology Ltd 
+				DeskLodge House, Redcliffe Way
+				Bristol    BS1 6NL
+				GB
+
+70-B3-D5   (hex)		Clear Flow by Antiference
+1CE000-1CEFFF     (base 16)		Clear Flow by Antiference
+				Unit 2 Common Lane Fradley Park
+				Lichfield  Staffordshire  WS13 8NQ
+				GB
+
+8C-1F-64   (hex)		elbit systems - EW and sigint - Elisra
+FCD000-FCDFFF     (base 16)		elbit systems - EW and sigint - Elisra
+				29 hamerkava st
+				Holon    5885118
+				IL
+
+8C-1F-64   (hex)		Tornado Spectral Systems Inc.
+C28000-C28FFF     (base 16)		Tornado Spectral Systems Inc.
+				5155 Spectrum Way, Unit 6
+				Mississauga  ON  L4W 5A1
+				CA
+
+8C-1F-64   (hex)		Automata GmbH & Co. KG
+118000-118FFF     (base 16)		Automata GmbH & Co. KG
+				Gewerbering 5
+				Ried  Bavaria  86510
+				DE
+
+8C-1F-64   (hex)		navXperience GmbH
+774000-774FFF     (base 16)		navXperience GmbH
+				Querweg 20
+				Berlin    13591
+				DE
+
+8C-1F-64   (hex)		HANATEKSYSTEM
+55E000-55EFFF     (base 16)		HANATEKSYSTEM
+				D-1412 gwangmyeong techno park
+				gwangmyeong-si  gyeonggi-do  14322
+				KR
+
+8C-1F-64   (hex)		Signatrol Ltd
+0B8000-0B8FFF     (base 16)		Signatrol Ltd
+				Unit E2, Green Lane Business Park,
+				Tewkesbury  Gloucestershire  GL20 8SJ
+				GB
+
+8C-1F-64   (hex)		S.E.I. CO.,LTD.
+655000-655FFF     (base 16)		S.E.I. CO.,LTD.
+				59 Nirayama Tada
+				Izunokuni  Shizuoka  4102133
+				JP
+
+8C-1F-64   (hex)		DORLET SAU
+72A000-72AFFF     (base 16)		DORLET SAU
+				Albert Eistein 34
+				Alava  SPAIN  01510
+				ES
+
+8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+09F000-09FFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+				Winnettener Straße 6
+				Dinkelsbuehl  Bavaria  91550
+				DE
+
+8C-1F-64   (hex)		Arcvideo
+B56000-B56FFF     (base 16)		Arcvideo
+				16F, Building E, Tiantang Software Park, No3. Xidou
+				hangzhou  zhejiang  310012
+				CN
+
+8C-1F-64   (hex)		Signasystems Elektronik San. ve Tic. Ltd. Sti.
+A9A000-A9AFFF     (base 16)		Signasystems Elektronik San. ve Tic. Ltd. Sti.
+				Baskent OSB. 26. Cad. No:5 Malikoy
+				Ankara  Sincan  06909
+				TR
+
+8C-1F-64   (hex)		AVD INNOVATION LIMITED
+0D6000-0D6FFF     (base 16)		AVD INNOVATION LIMITED
+				TuenMun
+				HongKong  HongKong  999077
+				CN
+
+8C-1F-64   (hex)		Lightworks GmbH
+61F000-61FFFF     (base 16)		Lightworks GmbH
+				Bahnhofplatz 2
+				Holzkirchen  Germany  83607
+				DE
+
+8C-1F-64   (hex)		Ossia Inc
+1BF000-1BFFFF     (base 16)		Ossia Inc
+				2683 151st Place NE
+				Redmond  WA  98052
+				US
+
+8C-1F-64   (hex)		Pigs Can Fly Labs LLC
+DC0000-DC0FFF     (base 16)		Pigs Can Fly Labs LLC
+				9450 SW Gemini Dr, PMB 41687
+				Beaverton  OR  97008
+				US
+
+8C-1F-64   (hex)		United States Technologies Inc.
+525000-525FFF     (base 16)		United States Technologies Inc.
+				1701 Pollitt Drive
+				Fair Lawn  NJ  07410
+				US
+
+8C-1F-64   (hex)		EMBSYS SISTEMAS EMBARCADOS
+FD4000-FD4FFF     (base 16)		EMBSYS SISTEMAS EMBARCADOS
+				AV. SIGISMUNDO NUNES DE OLIVEIRA,570 CASA 324
+				MARILIA  SAO PAULO  17512752
+				BR
+
+8C-1F-64   (hex)		Cardinal Scales Manufacturing Co
+DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
+				203 East Daugherty Street
+				Webb City  MO  64870
+				US
+
+8C-1F-64   (hex)		PuS GmbH und Co. KG
+4E0000-4E0FFF     (base 16)		PuS GmbH und Co. KG
+				Hainstr. 13
+				Gera  Germany  07545
+				DE
+
+8C-1F-64   (hex)		EA Elektroautomatik GmbH & Co. KG
+504000-504FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+				Helmholtzstraße 31-33
+				Viersen  NRW  41747
+				DE
+
+8C-1F-64   (hex)		Cinetix Srl
+89E000-89EFFF     (base 16)		Cinetix Srl
+				Via Armentera, 8
+				Borgo Valsugana  Trento  38051
+				IT
+
+8C-1F-64   (hex)		Mitsubishi Electric India Pvt. Ltd.
+D92000-D92FFF     (base 16)		Mitsubishi Electric India Pvt. Ltd.
+				EL3, J BLOCK, M.I.D.C. Bhosari
+				PUNE  Maharastra  411027
+				IN
+
+8C-1F-64   (hex)		ATM SOLUTIONS
+9BD000-9BDFFF     (base 16)		ATM SOLUTIONS
+				Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine
+				Navi Mumbai  Maharashatra  400709
+				IN
+
+8C-1F-64   (hex)		Integer.pl S.A.
+A97000-A97FFF     (base 16)		Integer.pl S.A.
+				Wielicka 28
+				Krakow    30-552
+				PL
+
+8C-1F-64   (hex)		Monnit Corporation
+94E000-94EFFF     (base 16)		Monnit Corporation
+				450 South Simmons STE 670
+				Kaysville  UT  84037
+				US
+
+8C-1F-64   (hex)		SASYS e.K.
+1CB000-1CBFFF     (base 16)		SASYS e.K.
+				Spannstiftstr. 16
+				Hagen    58119
+				DE
+
+8C-1F-64   (hex)		SCIREQ Scientific Respiratory Equipment  Inc
+01E000-01EFFF     (base 16)		SCIREQ Scientific Respiratory Equipment  Inc
+				6600 rue St. Urbain, Suite 300
+				Montreal  Quebec  H2S 3G8
+				CA
+
+8C-1F-64   (hex)		Beijing Wenrise Technology Co., Ltd.
+A84000-A84FFF     (base 16)		Beijing Wenrise Technology Co., Ltd.
+				No.10 Shangdi Road, Haidian District
+				Beijing  Beijing  100085
+				CN
+
+8C-1F-64   (hex)		XSENSOR Technology Corp.
+7AA000-7AAFFF     (base 16)		XSENSOR Technology Corp.
+				133 12 Ave SE
+				Calgary  Alberta  T2G 0Z9
+				CA
+
+8C-1F-64   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
+F4E000-F4EFFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
+				Felix-Wankel-Str. 13
+				Zaberfeld  Baden-Württemberg  74374
+				DE
+
+8C-1F-64   (hex)		MG s.r.l.
+67A000-67AFFF     (base 16)		MG s.r.l.
+				via Monte Bianco, 1
+				Solbiate Olona  VA  21058
+				IT
+
+8C-1F-64   (hex)		AMF Medical SA
+F52000-F52FFF     (base 16)		AMF Medical SA
+				Chemin de la Dent-d'Oche 1 A
+				Ecublens VD  Vaud  1024 
+				CH
+
+8C-1F-64   (hex)		Qualitrol LLC
+905000-905FFF     (base 16)		Qualitrol LLC
+				1385 Fairport Rd
+				Fairport  NY  14450
+				US
+
+8C-1F-64   (hex)		HUPI
+489000-489FFF     (base 16)		HUPI
+				45 allée théodore monod
+				Bidart  Sélectionnez un département / état  64210
+				FR
+
+8C-1F-64   (hex)		TTC TELEKOMUNIKACE, s.r.o.
+E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
+				Trebohosticka 5
+				Praha 10  Praha  10000
+				CZ
+
+70-B3-D5   (hex)		Root Automation
+6A2000-6A2FFF     (base 16)		Root Automation
+				112 4 H Way
+				Yreka  CA  96097
+				US
+
+8C-1F-64   (hex)		WINTUS SYSTEM
+9BA000-9BAFFF     (base 16)		WINTUS SYSTEM
+				E1102, 7 yeonmujang 5ga gil, seongdong-gu
+				SEOUL  SEOUL  04782 
+				KR
+
+8C-1F-64   (hex)		eumig industrie-TV GmbH.
+5B3000-5B3FFF     (base 16)		eumig industrie-TV GmbH.
+				Gewerbeparkstrasse 9
+				Anif  Salzburg  5081
+				AT
+
+8C-1F-64   (hex)		Proterra, Inc
+552000-552FFF     (base 16)		Proterra, Inc
+				1 Whitlee Court
+				Greenville  SC  29607
+				US
+
+8C-1F-64   (hex)		TeraDiode / Panasonic
+2C3000-2C3FFF     (base 16)		TeraDiode / Panasonic
+				30 Upton Dr
+				Wilmington  MA  01887
+				US
+
+8C-1F-64   (hex)		QUERCUS TECHNOLOGIES, S.L.
+D7C000-D7CFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
+				Av. Onze de Setembre 19
+				Reus  Tarragona  43203
+				ES
+
+8C-1F-64   (hex)		SPIT Technology, Inc
+939000-939FFF     (base 16)		SPIT Technology, Inc
+				2F, 91-1, Gyeongui-ro
+				Uijeongbu-si  Gyonggi-do  11652
+				KR
+
+8C-1F-64   (hex)		M/S MILIND RAMACHANDRA RAJWADE
+721000-721FFF     (base 16)		M/S MILIND RAMACHANDRA RAJWADE
+				713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru
+				Pune  Maharashtra  411051
+				IN
+
+8C-1F-64   (hex)		JW Froehlich Maschinenfabrik GmbH
+C8F000-C8FFFF     (base 16)		JW Froehlich Maschinenfabrik GmbH
+				Kohlhammerstrasse 18-24
+				Leinfelden-Echterdingen    70771
+				DE
+
+8C-1F-64   (hex)		VECOS Europe B.V.
+C80000-C80FFF     (base 16)		VECOS Europe B.V.
+				ESP 237
+				Eindhoven  Noord-Brabant  5633 AD
+				NL
+
+8C-1F-64   (hex)		EMIT GmbH
+3D1000-3D1FFF     (base 16)		EMIT GmbH
+				Johannes-Mauthe-Straße 14
+				Albstadt  Baden Württemberg  72458
+				DE
+
+8C-1F-64   (hex)		Power Electronics Espana, S.L.
+D08000-D08FFF     (base 16)		Power Electronics Espana, S.L.
+				Poligono Industrial Carrases. Ronda del camp d Aviacio 4
+				Lliria  Valencia  46160
+				ES
+
+8C-1F-64   (hex)		Mediana
+C6B000-C6BFFF     (base 16)		Mediana
+				Wonju Medical Industry Park, 1650-1 Donghwa-Ri,
+				Wonju-Si  Gangwon-Do  220-801
+				KR
+
+8C-1F-64   (hex)		noah
+B01000-B01FFF     (base 16)		noah
+				Augustusplatz 1-4
+				Leipzig    04109
+				DE
+
+8C-1F-64   (hex)		eumig industrie-TV GmbH.
+426000-426FFF     (base 16)		eumig industrie-TV GmbH.
+				Gewerbeparkstrasse 9
+				Anif  Salzburg  5081
+				AT
+
+8C-1F-64   (hex)		Hamamatsu Photonics K.K.
+67F000-67FFFF     (base 16)		Hamamatsu Photonics K.K.
+				314-5 Shimokanzo
+				Iwata  Shizuoka  4380193
+				JP
+
+8C-1F-64   (hex)		Telemetrics Inc.
+5E5000-5E5FFF     (base 16)		Telemetrics Inc.
+				75 Commerce Dr
+				Allendale    07401
+				US
+
+8C-1F-64   (hex)		Nokeval Oy
+E0E000-E0EFFF     (base 16)		Nokeval Oy
+				Rounionkatu 107
+				Nokia    37150
+				FI
+
+8C-1F-64   (hex)		NextT Microwave Inc
+8C5000-8C5FFF     (base 16)		NextT Microwave Inc
+				121 Hymus Boulevard
+				Pointe-Claire  Quebec  H9R 1E6
+				CA
+
+8C-1F-64   (hex)		  Fuzhou Tucsen Photonics Co.,Ltd
+45D000-45DFFF     (base 16)		  Fuzhou Tucsen Photonics Co.,Ltd
+				5# Wanwushe Smart Industrial Park , No.2 Yangqi Branch Rd, Gaishan Town, Cangshan Area, Fuzhou, Fujian,PRC
+				fuzhou    350008
+				CN
+
+8C-1F-64   (hex)		TEKVOX, Inc
+197000-197FFF     (base 16)		TEKVOX, Inc
+				1965 Post Rd, Suite 400
+				New Braunfels  TX  78130
+				US
+
+8C-1F-64   (hex)		ACSL Ltd.
+A2D000-A2DFFF     (base 16)		ACSL Ltd.
+				3-6-4 Rinkaicho
+				Edogawa-ku  Tokyo  134-0086
+				JP
+
+8C-1F-64   (hex)		Private
+EE0000-EE0FFF     (base 16)		Private
+
+8C-1F-64   (hex)		Agar Corporation Inc.
+301000-301FFF     (base 16)		Agar Corporation Inc.
+				5150 Tacoma Dr
+				Houston  TX  77041
+				US
+
+8C-1F-64   (hex)		Sensus Healthcare
+746000-746FFF     (base 16)		Sensus Healthcare
+				851 Broken Sound Parkway NW, Suite 215
+				Boca Raton  FL  33487
+				US
+
+8C-1F-64   (hex)		Nuvation Energy
+DFE000-DFEFFF     (base 16)		Nuvation Energy
+				40 Bathurst Drive
+				Waterloo  Ontario  N2V 1V6
+				CA
+
+8C-1F-64   (hex)		Astro Machine Corporation
+268000-268FFF     (base 16)		Astro Machine Corporation
+				630 Lively Blvd
+				Elk Grove Village  IL  60007
+				US
+
+8C-1F-64   (hex)		AperNet, LLC
+043000-043FFF     (base 16)		AperNet, LLC
+				651 North Broad StreetSuite 206
+				Middletown  DE  19709
+				US
+
+8C-1F-64   (hex)		Belden India Private Limited
+54A000-54AFFF     (base 16)		Belden India Private Limited
+				Plot No. D-228, Chakan MIDC Phase 2, 
+				Village Bhamboli, Taluka:Khed  Pune, Maharashtra  410 507
+				IN
+
+8C-1F-64   (hex)		IAV ENGINEERING SARL
+968000-968FFF     (base 16)		IAV ENGINEERING SARL
+				4a chemin des couleuvres
+				Tannay  VD  1295
+				CH
+
+8C-1F-64   (hex)		I/O Controls
+FC2000-FC2FFF     (base 16)		I/O Controls
+				1357 W Foothill Blvd
+				Azusa  CA  91702
+				US
+
+8C-1F-64   (hex)		SemaConnect, Inc
+F5B000-F5BFFF     (base 16)		SemaConnect, Inc
+				4961 Tesla Drive 
+				Bowie  MD  20715
+				US
+
+70-B3-D5   (hex)		Nomadic
+66A000-66AFFF     (base 16)		Nomadic
+				101 Glacier Point, Suite E
+				San Rafael  CA  94901
+				US
+
+70-B3-D5   (hex)		BAE Systems Apllied Intelligence
+E2D000-E2DFFF     (base 16)		BAE Systems Apllied Intelligence
+				170 Waterside House
+				Guildford  Surrey  GU2 7RQ
+				GB
+
+8C-1F-64   (hex)		GlobalInvacom
+5DB000-5DBFFF     (base 16)		GlobalInvacom
+				Global Invacom LTD,Network house ,station road
+				Maldon  Essex  CM9 4LQ
+				GB
+
+8C-1F-64   (hex)		Control Aut Tecnologia em Automação LTDA
+511000-511FFF     (base 16)		Control Aut Tecnologia em Automação LTDA
+				Rua Pedregulhos, 48
+				Campinas   São Paulo  13090716
+				BR
+
+8C-1F-64   (hex)		Anteus Kft.
+D2A000-D2AFFF     (base 16)		Anteus Kft.
+				Veres Péter út 48
+				Budapest    1163
+				HU
+
+8C-1F-64   (hex)		Guan Show Technologe Co., Ltd.
+7B5000-7B5FFF     (base 16)		Guan Show Technologe Co., Ltd.
+				No.127, Jianguo 1st Rd., Lingya Dist.
+				 Kaohsiung City     802
+				TW
+
+8C-1F-64   (hex)		Potter Electric Signal Company
+14B000-14BFFF     (base 16)		Potter Electric Signal Company
+				1609 Park 370 Place
+				Hazelwood, MO    63042
+				US
+
+8C-1F-64   (hex)		Xicato
+1B5000-1B5FFF     (base 16)		Xicato
+				102 Cooper Court
+				LOS GATOS  CA  95032
+				US
+
+8C-1F-64   (hex)		Sejong security system Cor.
+3CD000-3CDFFF     (base 16)		Sejong security system Cor.
+				chungnam cheonansi dongnamgu tongjung 1ro 18(sinbangdong)
+				cheonan     31208
+				KR
+
+8C-1F-64   (hex)		KEYLINE S.P.A.
+7B6000-7B6FFF     (base 16)		KEYLINE S.P.A.
+				VIA CAMILLO BIANCHI, 2
+				CONEGLIANO  TV  31015
+				IT
+
+8C-1F-64   (hex)		Xiamen Rgblink Science & Technology Co., Ltd.
+16D000-16DFFF     (base 16)		Xiamen Rgblink Science & Technology Co., Ltd.
+				Room 601A, No. 37-3 Banshang community, Building 3, Xinke Plaza, Torch Hi-Tech Industrial Development Zone, 
+				Xiamen,  Fujian  361115
+				CN
+
+8C-1F-64   (hex)		CAITRON GmbH
+F12000-F12FFF     (base 16)		CAITRON GmbH
+				Gewerbepark Edelweiss 4
+				Weissensberg    88138
+				DE
+
+8C-1F-64   (hex)		Norvento Tecnología, S.L.
+740000-740FFF     (base 16)		Norvento Tecnología, S.L.
+				Calle Ramón María Aller Ulloa, 23.
+				Lugo  Lugo  27003
+				ES
+
+8C-1F-64   (hex)		??????????
+F3B000-F3BFFF     (base 16)		??????????
+				???????????????1?1?2?219?
+				Beijing    102300
+				CN
+
+8C-1F-64   (hex)		Ensto Protrol AB
+67C000-67CFFF     (base 16)		Ensto Protrol AB
+				Alfagatan 3
+				Mölndal    SE-43149
+				SE
+
+8C-1F-64   (hex)		Vtron Pty Ltd
+133000-133FFF     (base 16)		Vtron Pty Ltd
+				Unit 2, 62 Township Drive West
+				West Burleigh  Queensland  4219
+				AU
+
+8C-1F-64   (hex)		HKC Security Ltd.
+B0F000-B0FFFF     (base 16)		HKC Security Ltd.
+				Parkway Business Centre
+				Ballymount  Dublin  D24 WY49
+				IE
+
+8C-1F-64   (hex)		Byte Lab Grupa d.o.o.
+F3D000-F3DFFF     (base 16)		Byte Lab Grupa d.o.o.
+				Medarska 69/1
+				Zagreb    10090
+				HR
+
+70-B3-D5   (hex)		Elektro Adrian
+FF6000-FF6FFF     (base 16)		Elektro Adrian
+				Via Garibaldi no.1
+				Predazzo   Trento  38037
+				IT
+
+70-B3-D5   (hex)		KSE GmbH
+38A000-38AFFF     (base 16)		KSE GmbH
+				Kaethe Paulus Strasse 6
+				Koesching    85092
+				DE
+
+8C-1F-64   (hex)		Weinan Wins Future Technology Co.,Ltd
+F39000-F39FFF     (base 16)		Weinan Wins Future Technology Co.,Ltd
+				The northwest corner of the intersection of Chaoyang Avenue and Gaoxin West Road,No.87 Chaoyang Avenue,High-tech Industrial Development Zone
+				Weinan  Shanxi  714000
+				CN
+
+8C-1F-64   (hex)		Rax-Tech International
+1B7000-1B7FFF     (base 16)		Rax-Tech International
+				5th floor, 5/391 Kaleeswari towerTambaram-Velachery Main road, Medavakkam
+				Chennai  Tamil Nadu  600100
+				IN
+
+8C-1F-64   (hex)		ENIGMA SOI Sp. z o.o.
+553000-553FFF     (base 16)		ENIGMA SOI Sp. z o.o.
+				Jutrzenki 116
+				Warsaw    02-230
+				PL
+
+8C-1F-64   (hex)		Zhuhai Lonl electric Co.,Ltd
+DAF000-DAFFFF     (base 16)		Zhuhai Lonl electric Co.,Ltd
+				2nd Floor,building B3,nanfang software park, xiangzhou district
+				Zhuhai  Guangdong  519000
+				CN
+
+8C-1F-64   (hex)		Golding Audio Ltd
+39A000-39AFFF     (base 16)		Golding Audio Ltd
+				8 Peartree Business Centre, Stanway
+				Colchester  Essex  CO30JN
+				GB
+
+8C-1F-64   (hex)		Action Streamer LLC
+65D000-65DFFF     (base 16)		Action Streamer LLC
+				1776 Mentor AveSuite 179
+				Cincinnati  OH  45212
+				US
+
+8C-1F-64   (hex)		RealD, Inc.
+44F000-44FFFF     (base 16)		RealD, Inc.
+				9777 Wilshire Boulevard, Ste 430
+				 Beverly Hills  CA  90212
+				US
+
+8C-1F-64   (hex)		BITECHNIK GmbH
+A00000-A00FFF     (base 16)		BITECHNIK GmbH
+				Dresdner Str. 49/5/Top 2
+				Vienna    1200
+				AT
+
+8C-1F-64   (hex)		Nautel LTD
+E46000-E46FFF     (base 16)		Nautel LTD
+				10089 Peggy's Cove Road
+				Hackett's Cove  NS  B3Z 3J4
+				CA
+
+8C-1F-64   (hex)		INVENTIA Sp. z o.o.
+1C0000-1C0FFF     (base 16)		INVENTIA Sp. z o.o.
+				Poleczki 23
+				Warszawa  Mazowieckie  02-822
+				PL
+
+8C-1F-64   (hex)		BTG Instruments AB
+5EA000-5EAFFF     (base 16)		BTG Instruments AB
+				Industrigatan 1-3
+				Saffle  Varmland  66132
+				SE
+
+8C-1F-64   (hex)		Active Optical Systems, LLC
+A60000-A60FFF     (base 16)		Active Optical Systems, LLC
+				9019 Washington Street NortheastSuite B-2
+				Albuquerque  NM  87113
+				US
+
+8C-1F-64   (hex)		Böckelt GmbH
+9B3000-9B3FFF     (base 16)		Böckelt GmbH
+				Ludwig-Erhard-Straße6
+				Wenden  NRW  57482
+				DE
+
+8C-1F-64   (hex)		VITREA Smart Home Technologies Ltd.
+CC1000-CC1FFF     (base 16)		VITREA Smart Home Technologies Ltd.
+				3 Abraham Buma Shavit, 4A
+				Rishon Lezion    7559907
+				IL
+
+8C-1F-64   (hex)		Wagner Group GmbH
+518000-518FFF     (base 16)		Wagner Group GmbH
+				Schleswigstrasse 1-5
+				Langenhagen    30853
+				DE
+
+8C-1F-64   (hex)		Novanta IMS
+58E000-58EFFF     (base 16)		Novanta IMS
+				370 North Main St
+				Marlborough   CT  06447
+				US
+
+8C-1F-64   (hex)		QUANTAFLOW
+700000-700FFF     (base 16)		QUANTAFLOW
+				AVENUE DU CANADA
+				HONFLEUR    14600
+				FR
+
+8C-1F-64   (hex)		ELTEK SpA
+56C000-56CFFF     (base 16)		ELTEK SpA
+				Strada Valenza 5/A
+				Casale Monferrato  Alessandria  15033
+				IT
+
+8C-1F-64   (hex)		Potter Electric Signal Co. LLC
+842000-842FFF     (base 16)		Potter Electric Signal Co. LLC
+				1609 Park 370 Place
+				Hazelwood  MO  63042
+				US
+
+8C-1F-64   (hex)		PHYSEC GmbH
+C12000-C12FFF     (base 16)		PHYSEC GmbH
+				Universitätsstraße 142
+				Bochum    44799
+				DE
+
+8C-1F-64   (hex)		Taiwan Aulisa Medical Devices Technologies, Inc
+88B000-88BFFF     (base 16)		Taiwan Aulisa Medical Devices Technologies, Inc
+				10F., NO. 3-2, YUANQU ST., NANGANG DIST., TAIPEI CITY 11503, Taiwan
+				Taipei  NANGANG  115
+				TW
+
+70-B3-D5   (hex)		PREO INDUSTRIES FAR EAST LTD
+CBD000-CBDFFF     (base 16)		PREO INDUSTRIES FAR EAST LTD
+				 Flat B, 26/F, Amiata Industrial building,58-64 Lei Muk Road
+				Hong Kong  Kwai Chung, N.T.  999077
+				HK
+
+8C-1F-64   (hex)		Taolink Technologies Corporation
+C81000-C81FFF     (base 16)		Taolink Technologies Corporation
+				Floor 5, Building 4, Shanghai Intelligent Sensing Industrial Park, 333 Huangqing Road, Jiading District
+				Shanghai    201899
+				CN
+
+8C-1F-64   (hex)		Texi AS
+F09000-F09FFF     (base 16)		Texi AS
+				Abels gate 5
+				Trondheim    7030
+				NO
+
+8C-1F-64   (hex)		CONTROL SYSTEMS Srl
+2D8000-2D8FFF     (base 16)		CONTROL SYSTEMS Srl
+				Via del Brolo, 14
+				Cremona  CR  26100
+				IT
+
+8C-1F-64   (hex)		runZero, Inc
+837000-837FFF     (base 16)		runZero, Inc
+				Bluebonnet Ln
+				Austin  TX  78704
+				US
+
+8C-1F-64   (hex)		Quanxing Tech Co.,LTD
+B69000-B69FFF     (base 16)		Quanxing Tech Co.,LTD
+				No. 102, building 3, Qianhai Shenzhen-Hong Kong Youth Innovation & Entrepreneur Hub, Qianwan 1st Road, Nanshan District,
+				SHENZHEN  Guangdong  518066
+				CN
+
+8C-1F-64   (hex)		ArgusEye TECH. INC
+9BF000-9BFFFF     (base 16)		ArgusEye TECH. INC
+				9F, No. 168, Ruiguang Rd., Neihu Dist.
+				Taipei City    114062
+				TW
+
+8C-1F-64   (hex)		Rapid-e-Engineering Steffen Kramer
+1B2000-1B2FFF     (base 16)		Rapid-e-Engineering Steffen Kramer
+				Am Waldring 7
+				Rechtmehring  Bayern  83562
+				DE
+
+8C-1F-64   (hex)		Eagle Harbor Technologies, Inc.
+5F7000-5F7FFF     (base 16)		Eagle Harbor Technologies, Inc.
+				169 Western Ave W.
+				Seattle  WA  98119
+				US
+
+70-B3-D5   (hex)		Earth Works
+61C000-61CFFF     (base 16)		Earth Works
+				2-9-14 Aioi
+				Kofu  Yamanashi  400-0858
+				JP
+
+8C-1F-64   (hex)		Zumbach Electronic AG
+EA8000-EA8FFF     (base 16)		Zumbach Electronic AG
+				Hauptstrasse 93
+				Orpund    2552
+				CH
+
+8C-1F-64   (hex)		Procon Electronics Pty Ltd
+DC2000-DC2FFF     (base 16)		Procon Electronics Pty Ltd
+				P O Box 164
+				Seven Hills  NSW  1730
+				AU
+
+8C-1F-64   (hex)		Khimo
+6D9000-6D9FFF     (base 16)		Khimo
+				Siria 6101
+				Montevideo  Uruguay  11400
+				UY
+
+8C-1F-64   (hex)		ITG Co.Ltd
+928000-928FFF     (base 16)		ITG Co.Ltd
+				617, anyang Megavally, 268, Hagui-ro, Dongan-gu
+				Anyang    14056
+				KR
+
+8C-1F-64   (hex)		DI3 INFOTECH LLP
+0AA000-0AAFFF     (base 16)		DI3 INFOTECH LLP
+				406, CRYSTAL ARCADE, NEXT TO BSNL EXCHANGE, C.G ROAD, NAVRANGPURA
+				AHMEDABAD  Gujarat  380009
+				IN
+
+8C-1F-64   (hex)		Graphimecc Group SRL
+0F2000-0F2FFF     (base 16)		Graphimecc Group SRL
+				Via Nobel 2
+				San Martino Buon Albergo  Verona  37036
+				IT
+
+8C-1F-64   (hex)		IQ Home Kft.
+033000-033FFF     (base 16)		IQ Home Kft.
+				Forgach utca 32/5. 312.
+				Budapest    1139
+				HU
+
+8C-1F-64   (hex)		SL USA, LLC
+CE4000-CE4FFF     (base 16)		SL USA, LLC
+				1960 S. Milestone Drive Unit C
+				Salt Lake City  UT  84104
+				US
+
+8C-1F-64   (hex)		Penteon Corporation 
+7D4000-7D4FFF     (base 16)		Penteon Corporation 
+				1460 Broadway
+				New york  NY  10036
+				US
+
+8C-1F-64   (hex)		PSA Technology Ltda.
+3AF000-3AFFFF     (base 16)		PSA Technology Ltda.
+				Rua Domingos de Morais, 388 CJ 131/132Vila Mariana
+				São Paulo  São Paulo  04010-000
+				BR
+
+8C-1F-64   (hex)		Comercial Electronica Studio-2 s.l.
+412000-412FFF     (base 16)		Comercial Electronica Studio-2 s.l.
+				P.I. La Figuera - C/ Rosa Luxemburgo, 34
+				Alaquas  Valencia  46970
+				ES
+
+8C-1F-64   (hex)		WAVES SYSTEM
+349000-349FFF     (base 16)		WAVES SYSTEM
+				La Ville en Bois
+				BOUAYE  Loire Atlantique  44830
+				FR
+
+8C-1F-64   (hex)		TIAMA
+820000-820FFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+70-B3-D5   (hex)		TIAMA
+BA3000-BA3FFF     (base 16)		TIAMA
+				215 Chemin du Grand Revoyet
+				Saint-Genis Laval  Auvergne Rhone Alpes  69230
+				FR
+
+8C-1F-64   (hex)		Ajeco Oy
+C64000-C64FFF     (base 16)		Ajeco Oy
+				Arinatie 8
+				Helsinki    00370
+				FI
+
+8C-1F-64   (hex)		biosilver .co.,ltd
+350000-350FFF     (base 16)		biosilver .co.,ltd
+				2-14-4, shinyokohama
+				yokohama  kanagawa  2220033
+				JP
+
+8C-1F-64   (hex)		White2net srl
+5DA000-5DAFFF     (base 16)		White2net srl
+				Chemin du grand bois 5
+				Lasne  Brabant wallon   1380
+				BE
+
+8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
+5C9000-5C9FFF     (base 16)		Abbott Diagnostics Technologies AS
+				P. O.  Box 6863 Rodeløkka
+				Oslo  Oslo  0504
+				NO
+
+8C-1F-64   (hex)		Relcom, Inc.
+D9C000-D9CFFF     (base 16)		Relcom, Inc.
+				2221 Yew Street
+				Forest Grove  OR  97116
+				US
+
+8C-1F-64   (hex)		Vtron Pty Ltd
+830000-830FFF     (base 16)		Vtron Pty Ltd
+				Unit 2, 62 Township Drive West
+				West Burleigh  Queensland  4219
+				AU
+
+8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+329000-329FFF     (base 16)		YUYAMA MFG Co.,Ltd
+				1-4-30
+				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
+				JP
+
+8C-1F-64   (hex)		BORNICO
+439000-439FFF     (base 16)		BORNICO
+				Ma??czy?ska 25
+				Radom  Polska  26-600
+				PL
+
+8C-1F-64   (hex)		GJD Manufacturing
+6CB000-6CBFFF     (base 16)		GJD Manufacturing
+				Unit 2, Birch Business Park, Whittle Lane
+				Heywood    OL10 2SX
+				GB
+
+8C-1F-64   (hex)		Peter Huber Kaeltemaschinenbau AG
+AA3000-AA3FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
+				Werner-von-Siemens-Str. 1
+				Offenburg  Ba-Wue  77656
+				DE
+
+8C-1F-64   (hex)		Scheurich GmbH
+B7D000-B7DFFF     (base 16)		Scheurich GmbH
+				Grimmenstein 9/1
+				Wolfegg    88364
+				DE
+
+8C-1F-64   (hex)		DEUTA-WERKE GmbH
+EDA000-EDAFFF     (base 16)		DEUTA-WERKE GmbH
+				Paffrather Str. 140
+				Bergisch Gladbach  North Rhine-Westphalia  51465
+				DE
+
+8C-1F-64   (hex)		Craft4 Digital GmbH
+289000-289FFF     (base 16)		Craft4 Digital GmbH
+				Sonnenwirtleweg 9
+				Vaihingen  Baden-Württemberg  71665
+				DE
+
+8C-1F-64   (hex)		NVP TECO LTD
+281000-281FFF     (base 16)		NVP TECO LTD
+				str Zalutinska 10
+				Kharkiv    61177
+				UA
+
+8C-1F-64   (hex)		Timberline Manufacturing
+113000-113FFF     (base 16)		Timberline Manufacturing
+				1029 Blairs Ferry Rd
+				Marion  IA  52302
+				US
+
+8C-1F-64   (hex)		Vishay Nobel AB
+0F5000-0F5FFF     (base 16)		Vishay Nobel AB
+				Box 423
+				Karlskoga    SE-691 27
+				SE
+
+70-B3-D5   (hex)		Medicomp, Inc
+278000-278FFF     (base 16)		Medicomp, Inc
+				600 Atlantis Rd
+				Melbourne  FL  32904
+				US
+
+8C-1F-64   (hex)		Vision Systems Safety Tech
+9F6000-9F6FFF     (base 16)		Vision Systems Safety Tech
+				5 Chemin de Chiradie
+				Brignais    69530
+				FR
+
+8C-1F-64   (hex)		Liberator Pty Ltd
+BBC000-BBCFFF     (base 16)		Liberator Pty Ltd
+				265 Gilbert Street
+				Adelaide     SA 5000
+				AU
+
+8C-1F-64   (hex)		COMETA SAS
+E24000-E24FFF     (base 16)		COMETA SAS
+				9 rue marcel chabloz
+				Saint martin d'Hères    38400
+				FR
diff --git a/hwdb.d/meson.build b/hwdb.d/meson.build
index 2f27288..90b7191 100644
--- a/hwdb.d/meson.build
+++ b/hwdb.d/meson.build
@@ -3,39 +3,38 @@
 # Those files right now are not supported by the grammar. Also,
 # they are very long but quite repetitive and the parser is not very fast.
 # So we don't "test" them.
-hwdb_files_notest = files('''
-        README
-        20-dmi-id.hwdb
-        20-pci-vendor-model.hwdb
-        20-pci-classes.hwdb
-        20-usb-vendor-model.hwdb
-        20-usb-classes.hwdb
-        20-sdio-vendor-model.hwdb
-        20-sdio-classes.hwdb
-        20-bluetooth-vendor-product.hwdb
-        20-acpi-vendor.hwdb
-        20-OUI.hwdb
-        20-net-ifname.hwdb
-        20-vmbus-class.hwdb
-'''.split())
+hwdb_files_notest = files(
+        'README',
+        '20-dmi-id.hwdb',
+        '20-pci-vendor-model.hwdb',
+        '20-pci-classes.hwdb',
+        '20-usb-vendor-model.hwdb',
+        '20-usb-classes.hwdb',
+        '20-sdio-vendor-model.hwdb',
+        '20-sdio-classes.hwdb',
+        '20-bluetooth-vendor-product.hwdb',
+        '20-acpi-vendor.hwdb',
+        '20-OUI.hwdb',
+        '20-net-ifname.hwdb',
+        '20-vmbus-class.hwdb')
 
-hwdb_files_test = files('''
-        60-autosuspend.hwdb
-        60-autosuspend-fingerprint-reader.hwdb
-        60-evdev.hwdb
-        60-input-id.hwdb
-        60-keyboard.hwdb
-        60-seat.hwdb
-        60-sensor.hwdb
-        70-analyzers.hwdb
-        70-av-production.hwdb
-        70-cameras.hwdb
-        70-joystick.hwdb
-        70-mouse.hwdb
-        70-pointingstick.hwdb
-        70-touchpad.hwdb
-        80-ieee1394-unit-function.hwdb
-'''.split())
+hwdb_files_test = files(
+        '60-autosuspend.hwdb',
+        '60-autosuspend-fingerprint-reader.hwdb',
+        '60-evdev.hwdb',
+        '60-input-id.hwdb',
+        '60-keyboard.hwdb',
+        '60-seat.hwdb',
+        '60-sensor.hwdb',
+        '70-analyzers.hwdb',
+        '70-av-production.hwdb',
+        '70-cameras.hwdb',
+        '70-joystick.hwdb',
+        '70-mouse.hwdb',
+        '70-pda.hwdb',
+        '70-pointingstick.hwdb',
+        '70-touchpad.hwdb',
+        '80-ieee1394-unit-function.hwdb')
 
 if conf.get('ENABLE_HWDB') == 1
         auto_suspend_rules = custom_target(
@@ -52,7 +51,7 @@
 
         if install_sysconfdir
                 meson.add_install_script('sh', '-c',
-                                         mkdir_p.format(join_paths(sysconfdir, 'udev/hwdb.d')))
+                                         mkdir_p.format(sysconfdir / 'udev/hwdb.d'))
 
                 meson.add_install_script('sh', '-c',
                                          'test -n "$DESTDIR" || @0@/systemd-hwdb update'.format(rootbindir))
@@ -62,6 +61,7 @@
                 parse_hwdb_py = find_program('parse_hwdb.py')
                 test('parse-hwdb',
                      parse_hwdb_py,
+                     suite : 'dist-check',
                      args : [hwdb_files_test,
                              auto_suspend_rules],
                      timeout : 90)
diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
index 0bc9d1a..5a1ae5a 100755
--- a/hwdb.d/parse_hwdb.py
+++ b/hwdb.d/parse_hwdb.py
@@ -1,4 +1,6 @@
 #!/usr/bin/env python3
+# pylint: disable=line-too-long,invalid-name,global-statement,redefined-outer-name
+# pylint: disable=missing-function-docstring,missing-class-docstring,missing-module-docstring
 # SPDX-License-Identifier: MIT
 #
 # This file is distributed under the MIT license, see below.
@@ -33,12 +35,23 @@
                            OneOrMore, Combine, Or, Optional, Suppress, Group,
                            nums, alphanums, printables,
                            stringEnd, pythonStyleComment,
-                           ParseBaseException, __diag__)
+                           ParseBaseException)
 except ImportError:
     print('pyparsing is not available')
     sys.exit(77)
 
 try:
+    from pyparsing import __diag__
+
+    __diag__.warn_multiple_tokens_in_named_alternation = True
+    __diag__.warn_ungrouped_named_tokens_in_collection = True
+    __diag__.warn_name_set_on_empty_Forward = True
+    __diag__.warn_on_multiple_string_args_to_oneof = True
+    __diag__.enable_debug_on_named_expressions = True
+except ImportError:
+    pass
+
+try:
     from evdev.ecodes import ecodes
 except ImportError:
     ecodes = None
@@ -50,12 +63,6 @@
     # don't do caching on old python
     lru_cache = lambda: (lambda f: f)
 
-__diag__.warn_multiple_tokens_in_named_alternation = True
-__diag__.warn_ungrouped_named_tokens_in_collection = True
-__diag__.warn_name_set_on_empty_Forward = True
-__diag__.warn_on_multiple_string_args_to_oneof = True
-__diag__.enable_debug_on_named_expressions = True
-
 EOL = LineEnd().suppress()
 EMPTYLINE = LineEnd()
 COMMENTLINE = pythonStyleComment + EOL
@@ -72,7 +79,20 @@
          'touchpad': ('i8042', 'rmi', 'bluetooth', 'usb'),
          'joystick': ('i8042', 'rmi', 'bluetooth', 'usb'),
          'keyboard': ('name', ),
-         'sensor':   ('modalias', ),
+         'sensor':   ('modalias',
+                      'accel-base',
+                      'accel-display',
+                      'accel-camera',
+                      'proximity-palmrest',
+                      'proximity-palmrest-left',
+                      'proximity-palmrest-right',
+                      'proximity-lap',
+                      'proximity-wifi',
+                      'proximity-lte',
+                      'proximity-wifi-lte',
+                      'proximity-wifi-left',
+                      'proximity-wifi-right',
+                      ),
          'ieee1394-unit-function' : ('node', ),
          'camera':   ('usb'),
         }
@@ -121,7 +141,7 @@
 def property_grammar():
     ParserElement.setDefaultWhitespaceChars(' ')
 
-    dpi_setting = Group(Optional('*')('DEFAULT') + INTEGER('DPI') + Suppress('@') + INTEGER('HZ'))('SETTINGS*')
+    dpi_setting = Group(Optional('*')('DEFAULT') + INTEGER('DPI') + Optional(Suppress('@') + INTEGER('HZ')))('SETTINGS*')
     mount_matrix_row = SIGNED_REAL + ',' + SIGNED_REAL + ',' + SIGNED_REAL
     mount_matrix = Group(mount_matrix_row + ';' + mount_matrix_row + ';' + mount_matrix_row)('MOUNT_MATRIX')
     xkb_setting = Optional(Word(alphanums + '+-/@._'))
@@ -135,8 +155,10 @@
              ('MOUSE_WHEEL_CLICK_COUNT', INTEGER),
              ('MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL', INTEGER),
              ('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))),
+             ('ID_AUTOSUSPEND_DELAY_MS', INTEGER),
              ('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))),
              ('ID_PERSIST', Or((Literal('0'), Literal('1')))),
+             ('ID_PDA', Or((Literal('0'), Literal('1')))),
              ('ID_INPUT', Or((Literal('0'), Literal('1')))),
              ('ID_INPUT_ACCELEROMETER', Or((Literal('0'), Literal('1')))),
              ('ID_INPUT_JOYSTICK', Or((Literal('0'), Literal('1')))),
@@ -180,7 +202,7 @@
                 ]
     abs_props = [Regex(r'EVDEV_ABS_[0-9a-f]{2}')('NAME')
                  - Suppress('=') -
-                 Word(nums + ':')('VALUE')
+                 Word('-' + nums + ':')('VALUE')
                 ]
 
     grammar = Or(fixed_props + kbd_props + abs_props) + EOL
@@ -257,7 +279,7 @@
               'x' if bad_x else ('y' if bad_y else 'z'),
               prop)
 
-def check_one_keycode(prop, value):
+def check_one_keycode(value):
     if value != '!' and ecodes is not None:
         key = 'KEY_' + value.upper()
         if not (key in ecodes or
@@ -277,14 +299,14 @@
 
 def check_properties(groups):
     grammar = property_grammar()
-    for matches, props in groups:
+    for _, props in groups:
         seen_props = {}
         for prop in props:
             # print('--', prop)
             prop = prop.partition('#')[0].rstrip()
             try:
                 parsed = grammar.parseString(prop)
-            except ParseBaseException as e:
+            except ParseBaseException:
                 error('Failed to parse: {!r}', prop)
                 continue
             # print('{!r}'.format(parsed))
@@ -297,18 +319,17 @@
                 check_one_mount_matrix(prop, parsed.VALUE)
             elif parsed.NAME.startswith('KEYBOARD_KEY_'):
                 val = parsed.VALUE if isinstance(parsed.VALUE, str) else parsed.VALUE[0]
-                check_one_keycode(prop, val)
+                check_one_keycode(val)
 
         check_wheel_clicks(seen_props)
 
 def print_summary(fname, groups):
     n_matches = sum(len(matches) for matches, props in groups)
     n_props = sum(len(props) for matches, props in groups)
-    print('{}: {} match groups, {} matches, {} properties'
-          .format(fname, len(groups), n_matches, n_props))
+    print(f'{fname}: {len(groups)} match groups, {n_matches} matches, {n_props} properties')
 
     if n_matches == 0 or n_props == 0:
-        error('{}: no matches or props'.format(fname))
+        error(f'{fname}: no matches or props')
 
 if __name__ == '__main__':
     args = sys.argv[1:] or sorted(glob.glob(os.path.dirname(sys.argv[0]) + '/[678][0-9]-*.hwdb'))
diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids
index c657b03..f5dcf90 100644
--- a/hwdb.d/pci.ids
+++ b/hwdb.d/pci.ids
@@ -1,8 +1,8 @@
 #
 #	List of PCI ID's
 #
-#	Version: 2022.04.16
-#	Date:    2022-04-16 00:17:00
+#	Version: 2023.02.11
+#	Date:    2023-02-11 03:15:01
 #
 #	Maintained by Albert Pool, Martin Mares, and other volunteers from
 #	the PCI ID Project at https://pci-ids.ucw.cz/.
@@ -70,11 +70,17 @@
 018a  LevelOne
 	0106  FPC-0106TX misprogrammed [RTL81xx]
 01de  Oxide Computer Company
+	0000  Propolis NVMe Controller
+	0001  Propolis xHCI Controller
+	0002  Propolis PCI-PCI Bridge
 # probably misprogrammed Intel Atom C2338 on Dell 0K8Y0N board
 0200  Dell (wrong ID)
 # 021b is not Compaq but there is a board misprogrammed
 021b  Compaq Computer Corporation
 	8139  HNE-300 (RealTek RTL8139c) [iPaq Networking]
+025e  Solidigm
+# Solidigm SSD Product
+	0b70  NVMe DC SSD [Yorktown controller]
 0270  Hauppauge computer works Inc. (Wrong ID)
 0291  Davicom Semiconductor, Inc. (Wrong ID)
 # SpeedStream is Efficient Networks, Inc, a Siemens Company
@@ -89,6 +95,8 @@
 0432  SCM Microsystems, Inc.
 	0001  Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]
 0497  Dell Inc. (wrong ID)
+060e  Lightelligence
+	0001  Hummingbird ES
 0675  Dynalink
 	1700  IS64PH ISDN Adapter
 	1702  IS64PH ISDN Adapter
@@ -106,6 +114,7 @@
 	9100  JM9100
 		0731 9101  JM9100
 		0731 9102  JM9100-I
+		0731 9103  JM9100M
 	910a  JH910
 		0731 910a  JH910
 		0731 910b  JH910-I
@@ -130,6 +139,7 @@
 	930a  JH930-I
 		0731 930a  JH930-I
 		0731 930b  JH930-M
+		0731 930c  JH930
 	930b  JH930-M
 0777  Ubiquiti Networks, Inc.
 0795  Wired Inc.
@@ -154,6 +164,7 @@
 	0905  R1T3 Single T3 Digital Telephony Card
 	0906  RCB24FXX 24-channel modular analog telephony card
 	0a06  RCB672FXX 672-channel modular analog telephony card
+0bae  Bachmann electronic GmbH
 0ccd  Preferred Networks, Inc.
 0e11  Compaq Computer Corporation
 	0001  PCI to EISA Bridge
@@ -258,7 +269,9 @@
 	b1a4  NC7131 Gigabit Server Adapter
 	b200  Memory Hot-Plug Controller
 	b203  Integrated Lights Out Controller
+		103c 3305  iLO2
 	b204  Integrated Lights Out  Processor
+		103c 3305  iLO2
 	c000  Remote Insight Lights-Out Edition
 	f130  NetFlex-3/P ThunderLAN 1.0
 	f150  NetFlex-3/P ThunderLAN 2.3
@@ -487,6 +500,7 @@
 		1028 1f4f  PERC H730P Slim
 		1028 1f54  PERC FD33xD
 		1028 1fd1  PERC H730P MX
+		1734 11f6  PRAID EP400i
 		17aa 1052  ThinkServer RAID 720i
 		17aa 1053  ThinkServer RAID 720ix
 		1bd4 0014  12G SAS3108 2G
@@ -554,6 +568,7 @@
 		1014 040e  ServeRAID H1110
 	0071  MR SAS HBA 2004
 	0072  SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon]
+		1000 3020  9211-8i
 		1000 3040  9210-8i
 		1000 3080  9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA]
 		1000 30b0  9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA]
@@ -733,6 +748,8 @@
 		1000 46a0  MegaRAID 9660-24i Tri-Mode Storage Adapter
 		1000 46c0  eHBA 9680W-16e Tri-Mode Storage Adapter
 		1000 46d0  eHBA 9600-8i8e Tri-Mode Storage Adapter
+# eHBA 9602W-16e Tri-Mode Storage Adapter
+		1000 46e0  eHBA 9602W-16e Tri-Mode Storage Adapter
 		1028 2114  PERC H965i Adapter
 		1028 2115  PERC H965i Front
 		1028 2117  PERC H965i MX
@@ -743,8 +760,11 @@
 		1028 213e  PERC H765i MX
 		1028 213f  PERC H365i Adapter
 		1028 2140  PERC H365i Front
-		1028 2141  PERC H360 MX
-		1028 2142  HBA 465e Adapter
+		1028 2141  PERC H365i MX
+		1028 2142  HBA465e Adapter
+		1028 2209  HBA465i Adapter
+		1028 220a  HBA465i Front
+		1d49 020a  ThinkSystem 450W-16e SAS/SATA PCIe Gen4 24Gb HBA
 	00ab  SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC)
 # 8 Internal and 8 External port channel 9400 HBA
 		1000 3040  HBA 9400-8i8e
@@ -842,6 +862,7 @@
 		1028 2170  HBA350i MM
 		1028 2175  HBA350i Adapter
 		1028 2197  HBA350i MM LP
+		1028 2212  HBA355e-s Adapter
 		1d49 0205  ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA
 		1d49 0206  ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA
 		1d49 0207  ThinkSystem 440-8i SAS/SATA PCIe Gen4 12Gb HBA
@@ -863,6 +884,8 @@
 		1d49 0002  ThinkSystem 810-4P NVMe Switch Adapter
 	02b1  Virtual Endpoint on PCIe Switch (9749)
 		1d49 0004  ThinkSystem 1610-8P NVMe Switch Adapter
+# Virtual endpoint used in Broadcom synthetic PCIe switches for resource reservation
+	02b2  Virtual PCIe Placeholder Endpoint
 	0407  MegaRAID
 		1000 0530  MegaRAID 530 SCSI 320-0X RAID Controller
 		1000 0531  MegaRAID 531 SCSI 320-4X RAID Controller
@@ -983,6 +1006,7 @@
 	10e4  MegaRAID 12GSAS/PCIe Unsupported SAS38xx
 	10e5  MegaRAID 12GSAS/PCIe SAS38xx
 	10e6  MegaRAID 12GSAS/PCIe Secure SAS38xx
+		1000 40e0  MegaRAID 9540-2M2
 		1028 2172  PERC H355 Adapter
 		1028 2173  PERC H355 Front
 		1028 2174  PERC H350 Mini
@@ -1006,10 +1030,59 @@
 		8086 0523  MegaRAID RAID Controller SRCS16
 	3050  SAS2008 PCI-Express Fusion-MPT SAS-2
 	6001  DX1 Multiformat Broadcast HD/SD Encoder/Decoder
-	c010  PEX88048 50 lane, 50 port, PCI Express Gen 4.0 ExpressFabric Platform
+	c010  PEX880xx PCIe Gen 4 Switch
+		1000 100b  PEX88000 PCIe Gen 4 Virtual Upstream/Downstream Port
+		1000 2004  PEX88000 Virtual PCIe TWC/NT2 Endpoint
+		1000 2005  PEX88000 Virtual PCIe gDMA Endpoint
+		1000 a024  PEX88024 24 lane/port PCIe Gen 4.0 Switch
+		1000 a032  PEX88032 32 lane/port PCIe Gen 4 Switch
+		1000 a048  PEX88048 50 lane/port PCIe Gen 4.0 Switch
+		1000 a064  PEX88064 64 lane/port PCIe Gen 4 Switch
+		1000 a080  PEX88080 80 lane/port PCIe Gen 4 Switch
+		1000 a096  PEX88096 98 lane/port PCIe Gen 4.0 Switch
 	c012  PEX880xx PCIe Gen 4 Switch
+# Virtual endpoint used in Broadcom synthetic PCIe switches for resource reservation
+		1000 100b  PEX88000 PCIe Gen 4 Virtual Upstream/Downstream Port
+# For secure part version of this chip
+		1000 2004  PEX88000 Virtual PCIe TWC/NT2 Endpoint
+# For secure part version of this chip
+		1000 2005  PEX88000 Virtual PCIe gDMA Endpoint
+# For secure part version of this chip
+		1000 a024  PEX88024 24 lane/port PCIe Gen 4.0 Switch
+# For secure part version of this chip
+		1000 a032  PEX88032 32 lane/port PCIe Gen 4.0 Switch
+# For secure part version of this chip
+		1000 a048  PEX88048 48 lane/port PCIe Gen 4.0 Switch
+		1000 a064  PEX88064 64 lane/port PCIe Gen 4.0 Switch
+# For secure part version of this chip
+		1000 a080  PEX88080 80 lane/port PCIe Gen 4.0 Switch
+# For secure part version of this chip
+		1000 a096  PEX88096 96 lane/port PCIe Gen 4.0 Switch
 		1d49 0003  ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter
 	c030  PEX890xx PCIe Gen 5 Switch
+		1000 0024  PEX89024 PCIe Gen 5 24 port/lane Switch Upstream/Downstream Port
+		1000 0032  PEX89032 PCIe Gen 5 32 port/lane Switch Upstream/Downstream Port
+		1000 0048  PEX89048 PCIe Gen 5 48 port/lane Switch Upstream/Downstream Port
+		1000 0072  PEX89072 PCIe Gen 5 36 port/72 lane Switch Upstream/Downstream Port
+		1000 0088  PEX89088 PCIe Gen 5 44 port/88 lane Switch Upstream/Downstream Port
+		1000 0104  PEX89104 PCIe Gen 5 52 port/104 lane Switch Upstream/Downstream Port
+		1000 0144  PEX89144 PCIe Gen 5 72 port/144 lane Switch Upstream/Downstream Port
+		1000 100b  PEX89000 PCIe Gen 5 Virtual Upstream/Downstream Port
+		1000 2004  PEX89000 Virtual PCIe TWC/NT 2.0 Endpoint
+		1000 2005  PEX89000 Virtual PCIe gDMA Endpoint
+# Lower lane count PEX89000 switch
+	c034  PEX890xx PCIe Gen 5 Switch
+# Lower lane count PEX89000 switch
+		1000 0024  PEX89024 PCIe Gen 5 24 port/lane Switch Upstream/Downstream Port
+		1000 0032  PEX89032 PCIe Gen 5 32 port/lane Switch Upstream/Downstream Port
+# Lower lane count PEX89000 switch
+		1000 0048  PEX89048 PCIe Gen 5 48 port/lane Switch Upstream/Downstream Port
+# Lower lane count PEX89000 switch
+		1000 100b  PEX89000 PCIe Gen 5 Virtual Upstream/Downstream Port
+# Lower lane count PEX89000 switch
+		1000 2004  PEX89000 Virtual PCIe TWC/NT 2.0 Endpoint
+# Lower lane count PEX89000 switch
+		1000 2005  PEX89000 Virtual PCIe gDMA Endpoint
 1001  Kolter Electronic
 	0010  PCI 1616 Measurement card with 32 digital I/O lines
 	0011  OPTO-PCI Opto-Isolated digital I/O board
@@ -1049,20 +1122,24 @@
 	131b  Kaveri [Radeon R4 Graphics]
 	131c  Kaveri [Radeon R7 Graphics]
 	131d  Kaveri [Radeon R6 Graphics]
-	13e9  Ariel
-	13fe  Cyan Skillfish
+	13e9  Ariel/Navi10Lite
+	13f9  Oberon/Navi12Lite
+	13fe  Cyan Skillfish [BC-250]
 	1478  Navi 10 XL Upstream Port of PCI Express Switch
 	1479  Navi 10 XL Downstream Port of PCI Express Switch
+	1506  Mendocino
 	154c  Kryptos [Radeon RX 350]
 		1462 7c28  MS-7C28 Motherboard
 	154e  Garfield
 	1551  Arlene
 	1552  Pooky
 	1561  Anubis
+	15bf  Phoenix
 	15d8  Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series]
 		103c 8615  Pavilion Laptop 15-cw1xxx
 		17aa 3181  ThinkCentre M75n IoT
 		17aa 5124  ThinkPad E595
+		1dc2 2209  Avita Pura 14 Notebook
 		ea50 cc10  RXi2-BP
 	15dd  Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]
 		103c 83c6  Radeon Vega 8 Mobile
@@ -1078,16 +1155,20 @@
 		103c 8615  Pavilion Laptop 15-cw1xxx
 		ea50 ce19  mCOM10-L1900
 	15e7  Barcelo
+		103c 8b17  ProBook 445 G9/455 G9 [Ryzen 7 Integrated Radeon GPU]
 	15ff  Fenghuang [Zhongshan Subor Z+]
 	1607  Arden
 	1636  Renoir
 	1637  Renoir Radeon High Definition Audio Controller
-	1638  Cezanne
+	1638  Cezanne [Radeon Vega Series / Radeon Vega Mobile Series]
+		1043 16c2  Radeon Vega 8
 # Used in the Steam Deck
 	163f  VanGogh [AMD Custom GPU 0405]
 	1640  Rembrandt Radeon High Definition Audio Controller
 	164c  Lucienne
 	164d  Rembrandt
+	164e  Raphael
+	164f  Phoenix
 	1681  Rembrandt [Radeon 680M]
 	1714  BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
 		103c 168b  ProBook 4535s
@@ -1604,6 +1685,7 @@
 		1028 00bb  Latitude CPx
 		1179 ff00  Satellite 1715XCDS laptop
 		13bd 1019  PC-AR10
+	4c4e  Rage Mobility L AGP 2x
 	4c50  Rage 3 LT [3D Rage LT PRO PCI]
 		1002 4c50  Rage LT Pro
 	4c52  M1 [Rage Mobility-M1 PCI]
@@ -1766,6 +1848,7 @@
 		1028 0225  PowerEdge T105 Embedded ATI ES1000
 		1028 023c  PowerEdge R200 Embedded ATI ES1000
 		103c 1304  Integrity iLO2 Advanced KVM VGA [AD307A]
+		103c 31fb  ProLiant DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
@@ -1887,7 +1970,7 @@
 	5964  RV280 [Radeon 9200 SE]
 		1002 5964  Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz
 		1043 c006  Radeon 9200 SE / TD / 128M
-		1458 4018  R92S128T (Radeon 9200 SE 128MB)
+		1458 4018  R92S128T [Radeon 9200 SE 128MB]
 		1458 4032  Radeon 9200 SE 128MB
 		147b 6191  R9200SE-DT
 		148c 2073  CN-AG92E
@@ -2062,6 +2145,7 @@
 		148c 7340  Radeon R7 340
 		1682 7240  R7 240 2048 MB
 		1dcf 3000  Oland PRO [Radeon R7 240/340 / Radeon 520]
+	6617  Oland LE [Radeon R7 240]
 	6631  Oland
 	6640  Saturn XT [FirePro M6100]
 		106b 014b  Tropo XT [Radeon R9 M380 Mac Edition]
@@ -2123,7 +2207,7 @@
 		1025 0846  Radeon HD 8570A
 		17aa 3805  Radeon HD 8570M
 	6664  Jet XT [Radeon R5 M240]
-	6665  Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile]
+	6665  Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520/610 Mobile]
 		17aa 1309  Z50-75 Radeon R7 M260DX
 		17aa 368f  Radeon R5 A230
 	6667  Jet ULT [Radeon R5 M230]
@@ -2661,7 +2745,7 @@
 # FX-797A-TNBC
 		1682 3213  HD 7970 Black Edition
 		1682 3214  Double D HD 7970
-		1787 201c  HD 7970 IceQ X²
+		1787 201c  HD 7970 IceQ XÂ²
 # Radeon HD 7970 X2
 		1787 2317  Radeon HD 7990
 		1787 3000  Tahiti XT2 [Radeon HD 7970 GHz Edition]
@@ -2724,7 +2808,7 @@
 		174b e282  Vapor-X R9 290X Tri-X OC
 		174b e285  R9 290X Tri-X OC
 		174b e324  Grenada XT2 [Radeon R9 390X]
-		1787 2020  R9 290X IceQ X² Turbo
+		1787 2020  R9 290X IceQ XÂ² Turbo
 		1787 2357  Grenada XT [Radeon R9 390X]
 	67b1  Hawaii PRO [Radeon R9 290/390]
 		1043 04dd  STRIX R9 390
@@ -3040,20 +3124,20 @@
 		144d c0c7  Radeon HD 7550M
 	6842  Thames LE [Radeon HD 7000M Series]
 	6843  Thames [Radeon HD 7670M]
-	6860  Vega 10 [Radeon Instinct MI25]
+	6860  Vega 10 [Instinct MI25/MI25x2/V340/V320]
 		1002 0c35  Radeon PRO V320
 		1002 6c75  Radeon PRO V320
 		106b 017c  Radeon Pro Vega 64
 	6861  Vega 10 XT [Radeon PRO WX 9100]
 	6862  Vega 10 XT [Radeon PRO SSG]
 	6863  Vega 10 XTX [Radeon Vega Frontier Edition]
-	6864  Vega 10 [Radeon Pro V340]
+	6864  Vega 10 [Radeon Pro V340/Instinct MI25x2]
 	6867  Vega 10 XL [Radeon Pro Vega 56]
 	6868  Vega 10 [Radeon PRO WX 8100/8200]
 	6869  Vega 10 XGA [Radeon Pro Vega 48]
 	686a  Vega 10 LEA
 	686b  Vega 10 XTXA [Radeon Pro Vega 64X]
-	686c  Vega 10 [Radeon Instinct MI25 MxGPU]
+	686c  Vega 10 [Instinct MI25 MxGPU/MI25x2 MxGPU/V340 MxGPU/V340L MxGPU]
 	686d  Vega 10 GLXTA
 	686e  Vega 10 GLXLA
 	687f  Vega 10 XL/XT [Radeon RX Vega 56/64]
@@ -3074,7 +3158,7 @@
 	688c  Cypress XT GL [FireStream 9370]
 	688d  Cypress PRO GL [FireStream 9350]
 	6898  Cypress XT [Radeon HD 5870]
-		1002 0b00  Radeon HD 5870 Eyefinity⁶ Edition
+		1002 0b00  Radeon HD 5870 Eyefinity Edition
 		106b 00d0  Radeon HD 5870 Mac Edition
 # R5870-PM2D1G
 		1462 8032  Radeon HD 5870 1 GB GDDR5
@@ -3615,7 +3699,7 @@
 		1002 0322  All-in-Wonder X1800XL
 		1002 0d02  Radeon X1800 CrossFire Edition
 	710a  R520 [Radeon X1800 GTO]
-		1002 0b12  Radeon X1800 GTO²
+		1002 0b12  Radeon X1800 GTOÂ²
 	710b  R520 [Radeon X1800 GTO]
 	710e  R520 GL [FireGL V7300]
 		13cc 3d0c  MXRT-5150
@@ -3742,6 +3826,7 @@
 	72b1  RV560 [Radeon X1650 XT] (Secondary)
 	72b3  RV560 [Radeon X1650 GT] (Secondary)
 	7300  Fiji [Radeon R9 FURY / NANO Series]
+		1002 0b35  FirePro S9300 X2
 		1002 0b36  Radeon R9 FURY X / NANO
 		1002 1b36  Radeon Pro Duo
 		1043 049e  Radeon R9 FURY
@@ -3750,48 +3835,75 @@
 	7310  Navi 10 [Radeon Pro W5700X]
 	7312  Navi 10 [Radeon Pro W5700]
 	7314  Navi 10 USB
+	731e  TDC-150
 	731f  Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
 		1002 0b36  Reference RX 5700 XT
 		1458 2313  Radeon RX 5700 XT Gaming OC
+		1458 231d  Radeon RX 5600 XT/REV 2.0 [Windforce 6GB OC]
+		148c 2398  AXRX 5700 XT 8GBD6-3DHE/OC [PowerColor Red Devil Radeon RX 5700 XT]
 		1682 5701  RX 5700 XT RAW II
 		1849 5120  Radeon RX 5600 XT
 		1da2 e409  Sapphire Technology Limited Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
+		1da2 e410  Sapphire NITRO+ RX 5700 XT
 		1da2 e411  Radeon RX 5600 XT
 	7340  Navi 14 [Radeon RX 5500/5500M / Pro 5500M]
 	7341  Navi 14 [Radeon Pro W5500]
 	7347  Navi 14 [Radeon Pro W5500M]
 	734f  Navi 14 [Radeon Pro W5300M]
-	7360  Navi 12 [Radeon Pro 5600M / V520]
-	7362  Navi 12 [Radeon Pro V520]
+	7360  Navi 12 [Radeon Pro 5600M/V520/BC-160]
+	7362  Navi 12 [Radeon Pro V520/V540]
 	7388  Arcturus GL-XL
 	738c  Arcturus GL-XL [Instinct MI100]
 	738e  Arcturus GL-XL [Instinct MI100]
+	73a1  Navi 21 [Radeon Pro V620]
 	73a2  Navi 21 Pro-XTA [Radeon Pro W6900X]
 	73a3  Navi 21 GL-XL [Radeon PRO W6800]
 	73a4  Navi 21 USB
 	73a5  Navi 21 [Radeon RX 6950 XT]
+		1da2 441d  Navi 21 [Sapphire Nitro+ Radeon RX 6950 XT]
 	73ab  Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo]
+	73ae  Navi 21 [Radeon Pro V620 MxGPU]
 	73af  Navi 21 [Radeon RX 6900 XT]
 		148c 2414  Navi 21 XTXH [PowerColor Red Devil RX 6900 XT Ultimate]
 	73bf  Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
 		1002 0e3a  Radeon RX 6900 XT
 		148c 2408  Red Devil AMD Radeon RX 6900 XT
-		1eae 6701  XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black
+		1da2 440f  TOXIC RX 6900 XT
+		1da2 e437  Pulse Radeon RX 6800
+		1eae 6701  Speedster MERC 319 AMD Radeon RX 6800 XT Black
+		1eae 6901  Speedster MERC 319 AMD Radeon RX 6900 XT Black
 	73c3  Navi 22
 	73c4  Navi 22 USB
-	73df  Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M]
+	73ce  Navi22-XL SRIOV MxGPU
+	73df  Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT]
+		1043 16c2  Radeon RX 6800M
+		1458 2408  Radeon RX 6750 XT GAMING OC 12G
+		1849 5219  Radeon RX 6700 XT Challenger D
+		1da2 e445  Sapphire Radeon RX 6700
+		1eae 6601  Speedster QICK 319 RX 6700 XT
 	73e0  Navi 23
 	73e1  Navi 23 WKS-XM [Radeon PRO W6600M]
 	73e3  Navi 23 WKS-XL [Radeon PRO W6600]
 	73e4  Navi 23 USB
 	73ef  Navi 23 [Radeon RX 6650 XT]
+		1002 73ef  Navi 23 [Radeon RX 6700S / 6800S / 6650 XT]
+		1458 2405  Navi 23 [Radeon RX 6650 XT]
 	73ff  Navi 23 [Radeon RX 6600/6600 XT/6600M]
+		1462 5022  RX 6600 MECH 2X
 		148c 2412  PowerColor Red Devil RX 6600 XT
-	7408  Aldebaran
-	740c  Aldebaran
-	740f  Aldebaran
-	743f  Navi 24 [Radeon RX 6400 / 6500 XT]
+# This is the non-XT version
+		1849 5218  Radeon RX 6600 Challenger ITX 8GB
+	7408  Aldebaran/MI200 [Instinct MI250X]
+	740c  Aldebaran/MI200 [Instinct MI250X/MI250]
+	740f  Aldebaran/MI200 [Instinct MI210]
+	7421  Navi 24 [Radeon PRO W6500M]
+	7422  Navi 24 [Radeon PRO W6400]
+	7423  Navi 24 [Radeon PRO W6300/W6300M]
+	7424  Navi 24 [Radeon RX 6300]
+	743f  Navi 24 [Radeon RX 6400/6500 XT/6500M]
 		1da2 e457  PULSE AMD Radeon RX 6500 XT
+	744c  Navi 31 [Radeon RX 7900 XT/7900 XTX]
+		1da2 e471  NITRO+ RX 7900 XTX Vapor-X
 	7833  RS350 Host Bridge
 	7834  RS350 [Radeon 9100 PRO/XT IGP]
 	7835  RS350M [Mobility Radeon 9000 IGP]
@@ -3926,7 +4038,7 @@
 		148c 3000  Radeon HD 4350 Go! Green 512MB GDDR3
 # 113-2E172001-003
 		174b 3000  Radeon HD 4350/4550 HyperMemory DDR2
-	9553  RV710/M92 [Mobility Radeon HD 4530/4570/545v]
+	9553  RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v]
 		1025 015e  Mobility Radeon HD 4570
 		1025 017d  Mobility Radeon HD 4570
 		1025 0205  Mobility Radeon HD 4570 / 545v
@@ -3949,7 +4061,7 @@
 		17aa 2129  Mobility Radeon HD 545v
 		17aa 215b  Mobility Radeon HD 545v
 		17aa 21bb  Mobility Radeon HD 545v
-	9555  RV710/M92 [Mobility Radeon HD 4350/4550]
+	9555  RV711/M93 [Mobility Radeon HD 4350/4550/530v/540v/545v / FirePro RG220]
 		103c 1411  ProBook 4720s GPU (Mobility Radeon HD 4350)
 	9557  RV711/M93 GL [FirePro RG220]
 	955f  RV710/M92 [Mobility Radeon HD 4330]
@@ -4819,14 +4931,14 @@
 	1453  Family 17h (Models 00h-0fh) PCIe GPP Bridge
 	1454  Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B
 	1455  Zeppelin/Renoir PCIe Dummy Function
-	1456  Family 17h (Models 00h-0fh) Platform Security Processor
+	1456  Family 17h (Models 00h-0fh) Platform Security Processor (PSP) 3.0 Device
 	1457  Family 17h (Models 00h-0fh) HD Audio Controller
 	145a  Zeppelin/Raven/Raven2 PCIe Dummy Function
 	145b  Zeppelin Non-Transparent Bridge
 	145c  Family 17h (Models 00h-0fh) USB 3.0 Host Controller
 	145d  Zeppelin Switch Upstream (PCIE SW.US)
 	145e  Zeppelin Switch Downstream (PCIE SW.DS)
-	145f  Zeppelin USB 3.0 Host controller
+	145f  Zeppelin USB 3.0 xHCI Compliant Host Controller
 	1460  Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 0
 	1461  Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 1
 	1462  Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 2
@@ -4844,6 +4956,7 @@
 	1481  Starship/Matisse IOMMU
 	1482  Starship/Matisse PCIe Dummy Host Bridge
 	1483  Starship/Matisse GPP Bridge
+		01de fff9  Gimlet Baseboard
 	1484  Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
 	1485  Starship/Matisse Reserved SPP
 	1486  Starship/Matisse Cryptographic Coprocessor PSPCPP
@@ -4873,6 +4986,12 @@
 	149c  Matisse USB 3.0 Host Controller
 		1462 7c37  X570-A PRO motherboard
 	149d  Vangogh CVIP
+	14b5  Family 17h-19h PCIe Root Complex
+	14b6  Family 17h-19h IOMMU
+	14b7  Family 17h-19h PCIe Dummy Host Bridge
+	14b9  Family 17h-19h Internal PCIe GPP Bridge
+	14ba  Family 17h-19h PCIe GPP Bridge
+	14cd  Family 19h USB4/Thunderbolt PCIe tunnel
 	1510  Family 14h Processor Root Complex
 		174b 1001  PURE Fusion Mini
 	1512  Family 14h Processor Root Port
@@ -4969,6 +5088,8 @@
 		ea50 ce19  mCOM10-L1900
 	15d4  FireFlight USB 3.1
 	15d5  FireFlight USB 3.1
+	15d6  Rembrandt USB4 XHCI controller #5
+	15d7  Rembrandt USB4 XHCI controller #6
 	15da  Raven/Raven2 PCIe Dummy Host Bridge
 	15db  Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A
 		ea50 ce19  mCOM10-L1900
@@ -4994,6 +5115,7 @@
 		ea50 ce19  mCOM10-L1900
 	15e3  Family 17h/19h HD Audio Controller
 		103c 8615  Pavilion Laptop 15-cw1xxx
+		103c 8b17  ProBook 445 G9/455 G9
 		1043 86c7  PRIME B450M-A Motherboard
 		17aa 5124  ThinkPad E595
 	15e4  Sensor Fusion Hub
@@ -5041,6 +5163,12 @@
 	160d  Arden Device 18h: Function 5
 	160e  Arden Device 18h: Function 6
 	160f  Arden Device 18h: Function 7
+	161a  Rembrandt USB4 XHCI controller #1
+	161b  Rembrandt USB4 XHCI controller #2
+	161c  Rembrandt USB4 XHCI controller #7
+	161d  Rembrandt USB4 XHCI controller #3
+	161e  Rembrandt USB4 XHCI controller #4
+	161f  Rembrandt USB4 XHCI controller #8
 	1620  Anubis HT Configuration
 	1621  Anubis Address Maps
 	1622  Anubis DRAM Configuration
@@ -5053,6 +5181,9 @@
 	1629  Arden PCIe GPP Bridge
 	162a  Arden Internal PCIe GPP Bridge 0 to bus X
 	162b  Arden PCIe Non-Transparent Bridge
+	162c  VanGogh USB2
+	162e  Rembrandt USB4/Thunderbolt NHI controller #1
+	162f  Rembrandt USB4/Thunderbolt NHI controller #2
 	1630  Renoir/Cezanne Root Complex
 	1631  Renoir/Cezanne IOMMU
 	1632  Renoir PCIe Dummy Host Bridge
@@ -5070,7 +5201,10 @@
 	1642  Renoir WLAN
 	1643  Renoir BT
 	1644  Renoir I2S
-	1648  VanGogh Root Complex
+	1645  VanGogh Root Complex
+	1646  VanGogh IOMMU
+	1647  VanGogh PCIe GPP Bridge
+	1648  VanGogh Internal PCIe GPP Bridge to Bus
 	1649  VanGogh PSP/CCP
 	164f  Milan IOMMU
 	1650  Milan Data Fabric; Function 0
@@ -5081,6 +5215,14 @@
 	1655  Milan Data Fabric; Function 5
 	1656  Milan Data Fabric; Function 6
 	1657  Milan Data Fabric; Function 7
+	1660  VanGogh Data Fabric; Function 0
+	1661  VanGogh Data Fabric; Function 1
+	1662  VanGogh Data Fabric; Function 2
+	1663  VanGogh Data Fabric; Function 3
+	1664  VanGogh Data Fabric; Function 4
+	1665  VanGogh Data Fabric; Function 5
+	1666  VanGogh Data Fabric; Function 6
+	1667  VanGogh Data Fabric; Function 7
 	166a  Cezanne Data Fabric; Function 0
 	166b  Cezanne Data Fabric; Function 1
 	166c  Cezanne Data Fabric; Function 2
@@ -5089,6 +5231,14 @@
 	166f  Cezanne Data Fabric; Function 5
 	1670  Cezanne Data Fabric; Function 6
 	1671  Cezanne Data Fabric; Function 7
+	1679  Rembrandt Data Fabric: Device 18h; Function 0
+	167a  Rembrandt Data Fabric: Device 18h; Function 1
+	167b  Rembrandt Data Fabric: Device 18h; Function 2
+	167c  Rembrandt Data Fabric: Device 18h; Function 3
+	167d  Rembrandt Data Fabric: Device 18h; Function 4
+	167e  Rembrandt Data Fabric: Device 18h; Function 5
+	167f  Rembrandt Data Fabric: Device 18h; Function 6
+	1680  Rembrandt Data Fabric: Device 18h; Function 7
 	1700  Family 12h/14h Processor Function 0
 	1701  Family 12h/14h Processor Function 1
 	1702  Family 12h/14h Processor Function 2
@@ -5171,7 +5321,7 @@
 	43c6  400 Series Chipset PCIe Bridge
 	43c7  400 Series Chipset PCIe Port
 	43c8  400 Series Chipset SATA Controller
-	43d5  400 Series Chipset USB 3.1 XHCI Controller
+	43d5  400 Series Chipset USB 3.1 xHCI Compliant Host Controller
 	43e9  500 Series Chipset Switch Upstream Port
 	43eb  500 Series Chipset SATA Controller
 # or ASM106X Serial ATA Controller
@@ -5308,6 +5458,7 @@
 	7908  FCH USB EHCI Controller
 	790b  FCH SMBus Controller
 		103c 8615  Pavilion Laptop 15-cw1xxx
+		103c 8b17  ProBook 445 G9/455 G9
 		1043 876b  PRIME Motherboard
 		1462 7c37  X570-A PRO motherboard
 		15d9 790b  H12SSL-i
@@ -5398,7 +5549,10 @@
 	9910  CyberBlade/XP
 	9930  CyberBlade/XPm
 	9960  CyberBlade XP2
-1024  Zenith Data Systems
+1024  Beijing Dajia Internet Information Technology Co.
+	0101  StreamLake 200 AI-VPU
+		1024 0201  SL200-NP
+		1024 0301  SL200-P
 1025  Acer Incorporated [ALI]
 	1435  M1435
 	1445  M1445
@@ -5502,6 +5656,12 @@
 		1028 1f24  PERC S300 Controller
 # NV-RAM Adapter used in Dell DR appliances
 	0073  NV-RAM Adapter
+	1028  PCIe Bridge riser
+	2600  ENT NVMe RT1
+		1028 215e  ENT NVMe RT1 RI 3.84TB
+		1028 215f  ENT NVMe RT1 RI 7.68TB
+		1028 2160  ENT NVMe RT1 FIPS RI 3.84TB
+		1028 2161  ENT NVMe RT1 FIPS RI 7.68TB
 1029  Siemens Nixdorf IS
 102a  LSI Logic
 	0000  HYDRA
@@ -6751,6 +6911,7 @@
 	90a3  Aeolia Memory (DDR3/SPM)
 	90a4  Aeolia USB 3.0 xHCI Host Controller
 	90bc  SxS Pro+ memory card
+	90c0  PCIe x8 XAVC Codec Board
 	90c8  Belize ACPI
 	90c9  Belize Ethernet Controller
 	90ca  Belize SATA AHCI Controller
@@ -6816,6 +6977,8 @@
 	3505  SH7751 PCI Controller (PCIC)
 	350e  SH7751R PCI Controller (PCIC)
 1055  Microchip Technology / SMSC
+	7430  LAN7430
+	7431  LAN7431
 	9130  SLC90E66 [Victory66] IDE
 	9460  SLC90E66 [Victory66] ISA
 	9462  SLC90E66 [Victory66] USB
@@ -7174,6 +7337,8 @@
 	006a  Intrepid2 Firewire
 	006b  Intrepid2 GMAC (Sun GEM)
 	0074  U4 HT Bridge
+	100c  Apple Silicon PCI Express Root Port
+	1010  Apple Silicon USB4/Thunderbolt PCI Express Root Port
 # should be 14e4:1645
 	1645  Broadcom NetXtreme BCM5701 Gigabit Ethernet
 	1801  T2 Bridge Controller
@@ -7322,7 +7487,7 @@
 		1077 02f2  QLogic 1x32Gb QLE2770 FC HBA
 		1077 02f3  QLogic 2x32Gb QLE2772 FC HBA
 		1590 02d3  SN1610Q - 1P Enhanced 32GFC Single Port Fibre Channel Host Bus Adapter
-		1590 02d4  SN1610Q – 2P Enhanced 32GFC Dual Port Fibre Channel Host Bus Adapter
+		1590 02d4  SN1610Q â€“ 2P Enhanced 32GFC Dual Port Fibre Channel Host Bus Adapter
 	2289  ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption
 		1077 02e9  QLE2882 Dual Port 64GFC PCIe Gen4 x8 Adapter with StorCryption
 		1077 02eb  QLE2782 Dual Port 32GFC PCIe Gen4 x8 Adapter with StorCryption
@@ -7570,7 +7735,7 @@
 	0022  ATM Adapter
 108e  Oracle/SUN
 	0001  EBUS
-	1000  EBUS
+	1000  STP2003QFP [PCIO] EBUS
 	1001  Happy Meal 10/100 Ethernet [hme]
 	1100  RIO EBUS
 		108e 1100  RIO EBUS on Blade 100 motherboard
@@ -8442,6 +8607,7 @@
 # nee CMD Technology Inc
 1095  Silicon Image, Inc.
 	0240  Adaptec AAR-1210SA SATA HostRAID Controller
+	0242  AAR-1220SA SATA RAID Controller
 	0640  PCI0640
 	0643  PCI0643
 	0646  PCI0646
@@ -8925,10 +9091,10 @@
 		10b5 3334  Cambridge Pixel HPx Radar Input Card
 		10b5 3352  Alpermann+Velte PCL PCIe HD: Timecode Reader Board
 		10b5 3353  Alpermann+Velte PCL PCIe D: Timecode Reader Board
-		10b5 3354  Alpermann+Velte PCL PCIe LV: Timecode Reader Board
-		10b5 3355  Alpermann+Velte PCL PCIe L: Timecode Reader Board
-		10b5 3415  Alpermann+Velte PCIe TS: Time Synchronisation Board
-		10b5 3493  Alpermann+Velte PCL PCIe 3G: Timecode Reader Board
+		10b5 3354  Plura PCL PCIe LV: Timecode Reader Board
+		10b5 3355  Plura PCL PCIe L: Timecode Reader Board
+		10b5 3415  Plura PCIe TS: Time Synchronisation Board
+		10b5 3493  Plura PCL PCIe 3G: Timecode Reader Board
 		10b5 3565  Cambridge Pixel HPx Radar Output Card
 		1369 c001  LX6464ES
 		1369 c201  LX1616ES
@@ -9231,10 +9397,8 @@
 		103c 0024  Pavilion ze4400 builtin USB
 		103c 0025  XE4500 Notebook
 		104d 810f  VAIO PCG-U1 USB/OHCI Revision 1.0
-		10b9 5237  ASRock 939Dual-SATA2 Motherboard
 		1849 5237  ASRock 939Dual-SATA2 Motherboard
 	5239  USB 2.0 Controller
-		10b9 5239  ASRock 939Dual-SATA2 Motherboard
 		1849 5239  ASRock 939Dual-SATA2 Motherboard
 	5243  M1541 PCI to AGP Controller
 	5246  AGP8X Controller
@@ -9676,6 +9840,7 @@
 	0091  G70 [GeForce 7800 GTX]
 	0092  G70 [GeForce 7800 GT]
 	0093  G70 [GeForce 7800 GS]
+	0094  High Definition Audio
 	0095  G70 [GeForce 7800 SLI]
 	0097  G70 [GeForce GTS 250]
 	0098  G70M [GeForce Go 7800]
@@ -11009,6 +11174,7 @@
 	086d  C79 [GeForce 9200]
 	086e  C79 [GeForce 9100M G]
 	086f  MCP79 [GeForce 8200M G]
+		1043 16b2  F5GL Notebook
 	0870  C79 [GeForce 9400M]
 	0871  C79 [GeForce 9200]
 	0872  C79 [GeForce G102M]
@@ -11135,21 +11301,28 @@
 	0a88  MCP79 Memory Controller
 	0a89  MCP79 Memory Controller
 	0a98  MCP79 Memory Controller
+		1043 1a87  F5GL Notebook
 		10de cb79  iMac 9,1
 	0aa0  MCP79 PCI Express Bridge
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 	0aa2  MCP79 SMBus
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 		19da a123  IONITX-F-E
 	0aa3  MCP79 Co-processor
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 		19da a123  IONITX-F-E
 	0aa4  MCP79 Memory Controller
+		1043 1a87  F5GL Notebook
 		19da a123  IONITX-F-E
 	0aa5  MCP79 OHCI USB 1.1 Controller
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 		19da a123  IONITX-F-E
 	0aa6  MCP79 EHCI USB 2.0 Controller
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 		19da a123  IONITX-F-E
 	0aa7  MCP79 OHCI USB 1.1 Controller
@@ -11161,14 +11334,17 @@
 		19da a123  IONITX-F-E
 	0aaa  MCP79 EHCI USB 2.0 Controller
 	0aab  MCP79 PCI Bridge
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 	0aac  MCP79 LPC Bridge
 	0aad  MCP79 LPC Bridge
 		19da a123  IONITX-F-E
 	0aae  MCP79 LPC Bridge
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 	0aaf  MCP79 LPC Bridge
 	0ab0  MCP79 Ethernet
+		1043 1215  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 		19da a123  IONITX-F-E
 	0ab1  MCP79 Ethernet
@@ -11180,6 +11356,7 @@
 	0ab6  MCP79 SATA Controller
 	0ab7  MCP79 SATA Controller
 	0ab8  MCP79 AHCI Controller
+		1043 1a87  F5GL Notebook
 	0ab9  MCP79 AHCI Controller
 		10de cb79  Apple iMac 9,1
 	0aba  MCP79 AHCI Controller
@@ -11189,6 +11366,7 @@
 	0abe  MCP79 RAID Controller
 	0abf  MCP79 RAID Controller
 	0ac0  MCP79 High Definition Audio
+		1043 1903  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 	0ac1  MCP79 High Definition Audio
 	0ac2  MCP79 High Definition Audio
@@ -11197,8 +11375,10 @@
 		10de cb79  Apple iMac 9,1
 	0ac5  MCP79 PCI Express Bridge
 	0ac6  MCP79 PCI Express Bridge
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 	0ac7  MCP79 PCI Express Bridge
+		1043 1a87  F5GL Notebook
 		10de cb79  Apple iMac 9,1
 	0ac8  MCP79 PCI Express Bridge
 	0ad0  MCP78S [GeForce 8200] SATA Controller (non-AHCI mode)
@@ -11391,7 +11571,7 @@
 # GRID K1 USM
 	0fe7  GK107GL [GRID K100 vGPU]
 		10de 101e  GRID K100
-	0fe8  GK107M
+	0fe8  GK107M [N14P-GS]
 	0fe9  GK107M [GeForce GT 750M Mac Edition]
 	0fea  GK107M [GeForce GT 755M Mac Edition]
 	0fec  GK107M [GeForce 710A]
@@ -11918,6 +12098,7 @@
 	11a3  GK104M [GeForce GTX 680MX]
 		106b 010d  iMac 13,2
 	11a7  GK104M [GeForce GTX 675MX]
+	11a8  GK104GLM [Quadro K5100M]
 	11a9  GK104M [GeForce GTX 870M]
 	11af  GK104GLM [GRID IceCube]
 	11b0  GK104GL [GRID K240Q / K260Q vGPU]
@@ -12112,7 +12293,7 @@
 	13c2  GM204 [GeForce GTX 970]
 	13c3  GM204
 	13d7  GM204M [GeForce GTX 980M]
-	13d8  GM204M [GeForce GTX 970M]
+	13d8  GM204M [GeForce GTX 960 OEM / 970M]
 	13d9  GM204M [GeForce GTX 965M]
 	13da  GM204M [GeForce GTX 980 Mobile]
 	13e7  GM204GL [GeForce GTX 980 Engineering Sample]
@@ -12180,6 +12361,7 @@
 	1aec  TU116 USB 3.1 Host Controller
 	1aed  TU116 USB Type-C UCSI Controller
 	1aef  GA102 High Definition Audio Controller
+	1af1  GA100 [A100 NVSwitch]
 	1b00  GP102 [TITAN X]
 	1b01  GP102 [GeForce GTX 1080 Ti 10GB]
 	1b02  GP102 [TITAN Xp]
@@ -12311,11 +12493,13 @@
 		10de 131d  Tesla V100-SXM3-32GB-H
 	1dba  GV100GL [Quadro GV100]
 		10de 12eb  TITAN V CEO Edition
+	1dbe  GV100 Engineering Sample
 	1df0  GV100GL [Tesla PG500-216]
 	1df2  GV100GL [Tesla PG503-216]
 	1df5  GV100GL [Tesla V100 SXM2 16GB]
 	1df6  GV100GL [Tesla V100S PCIe 32GB]
 	1e02  TU102 [TITAN RTX]
+	1e03  TU102 [GeForce RTX 2080 Ti 12GB]
 	1e04  TU102 [GeForce RTX 2080 Ti]
 	1e07  TU102 [GeForce RTX 2080 Ti Rev. A]
 		1462 3715  RTX 2080 Ti GAMING X TRIO
@@ -12326,11 +12510,14 @@
 		10de 129e  Quadro RTX 8000
 		10de 12ba  Quadro RTX 6000
 	1e36  TU102GL [Quadro RTX 6000]
-	1e37  TU102GL [GRID RTX T10-4/T10-8/T10-16]
+	1e37  TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8]
+		10de 1304  Tesla T10 16GB
 		10de 1347  GRID RTX T10-8
 		10de 1348  GRID RTX T10-4
-		10de 1370  GRID RTX T10-16
-	1e38  TU102GL
+		10de 1349  GRID RTX T10-2
+		10de 1370  Tesla T10 16GB
+		10de 13a5  GRID RTX T10-8
+	1e38  TU102GL [Tesla T10 24GB]
 	1e3c  TU102GL
 	1e3d  TU102GL
 	1e3e  TU102GL
@@ -12346,7 +12533,7 @@
 	1e91  TU104M [GeForce RTX 2070 SUPER Mobile / Max-Q]
 	1e93  TU104M [GeForce RTX 2080 SUPER Mobile / Max-Q]
 	1eab  TU104M
-	1eae  TU104M
+	1eae  TU104M [GeForce GTX 2080 Engineering Sample]
 	1eb0  TU104GL [Quadro RTX 5000]
 	1eb1  TU104GL [Quadro RTX 4000]
 	1eb4  TU104GL [T4G]
@@ -12354,6 +12541,7 @@
 	1eb6  TU104GLM [Quadro RTX 4000 Mobile / Max-Q]
 	1eb8  TU104GL [Tesla T4]
 	1eb9  TU104GL
+	1eba  TU104GL [PG189 SKU600]
 	1ebe  TU104GL
 	1ec2  TU104 [GeForce RTX 2070 SUPER]
 	1ec7  TU104 [GeForce RTX 2070 SUPER]
@@ -12387,6 +12575,7 @@
 	1f76  TU106GLM [Quadro RTX 3000 Mobile Refresh]
 	1f81  TU117
 	1f82  TU117 [GeForce GTX 1650]
+	1f83  TU117 [GeForce GTX 1630]
 	1f91  TU117M [GeForce GTX 1650 Mobile / Max-Q]
 	1f92  TU117M [GeForce GTX 1650 Mobile]
 	1f94  TU117M [GeForce GTX 1650 Mobile]
@@ -12400,11 +12589,13 @@
 # via Lenovo 496.90
 	1f9f  TU117M [GeForce MX550]
 	1fa0  TU117M [GeForce MX550]
+	1fa1  TU117M
 	1fae  TU117GL
 	1fb0  TU117GLM [Quadro T1000 Mobile]
 	1fb1  TU117GL [T600]
 	1fb2  TU117GLM [Quadro T400 Mobile]
 	1fb6  TU117GLM [T600 Laptop GPU]
+		1028 0b10  Precision 3571
 	1fb7  TU117GLM [T550 Laptop GPU]
 	1fb8  TU117GLM [Quadro T2000 Mobile / Max-Q]
 	1fb9  TU117GLM [Quadro T1000 Mobile]
@@ -12421,8 +12612,7 @@
 	20b0  GA100 [A100 SXM4 40GB]
 	20b1  GA100 [A100 PCIe 40GB]
 	20b2  GA100 [A100 SXM4 80GB]
-# 20B3 14A7 10DE PG506-242 / 20B3 14A8 10DE PG506-243
-	20b3  GA100 [PG506-242/243]
+	20b3  GA100 [A100-SXM-64GB]
 	20b5  GA100 [A100 PCIe 80GB]
 	20b6  GA100GL [PG506-232]
 	20b7  GA100GL [A30 PCIe]
@@ -12435,6 +12625,9 @@
 	20f0  GA100 [A100-PG506-207]
 	20f1  GA100 [A100 PCIe 40GB]
 	20f2  GA100 [A100-PG506-217]
+	20f3  GA100 [A800-SXM4-80GB]
+	20f5  GA100 [A800 80GB PCIe]
+	20f6  GA100 [A800 40GB PCIe]
 	2182  TU116 [GeForce GTX 1660 Ti]
 	2183  TU116
 	2184  TU116 [GeForce GTX 1660]
@@ -12457,6 +12650,7 @@
 		10de 1467  GA102 [GeForce RTX 3080]
 		10de 146d  GA102 [GeForce RTX 3080 20GB]
 		1462 3892  RTX 3080 10GB GAMING X TRIO
+	2207  GA102 [GeForce RTX 3070 Ti]
 	2208  GA102 [GeForce RTX 3080 Ti]
 	220a  GA102 [GeForce RTX 3080 12GB]
 	220d  GA102 [CMP 90HX]
@@ -12473,9 +12667,16 @@
 	2238  GA102GL [A10M]
 	223f  GA102GL
 	228b  GA104 High Definition Audio Controller
+	228e  GA106 High Definition Audio Controller
 	2296  Tegra PCIe Endpoint Virtual Network
-	2302  GA103
-	2321  GA103
+	22ba  AD102 High Definition Audio Controller
+	2302  GH100
+	2313  GH100 [H100 CNX]
+	2321  GH100
+	2322  GH100 [H800]
+	2330  GH100[H100 SXM5 80GB]
+	2331  GH100 [H100 PCIe]
+	2336  GH100 [H100]
 	2414  GA103 [GeForce RTX 3060 Ti]
 	2420  GA103M [GeForce RTX 3080 Ti Mobile]
 	2438  GA103GLM [RTX A5500 Laptop GPU]
@@ -12486,6 +12687,7 @@
 		10de 146b  GA104 [GeForce RTX 3070]
 		10de 14ae  GA104 [GeForce RTX 3070 16GB]
 	2486  GA104 [GeForce RTX 3060 Ti]
+		19da 6630  ZT-A30610H-10M [RTX 3060 Ti Twin Edge OC]
 	2487  GA104 [GeForce RTX 3060]
 	2488  GA104 [GeForce RTX 3070 Lite Hash Rate]
 	2489  GA104 [GeForce RTX 3060 Ti Lite Hash Rate]
@@ -12494,6 +12696,7 @@
 	249d  GA104M [GeForce RTX 3070 Mobile / Max-Q]
 	249f  GA104M
 	24a0  GA104 [Geforce RTX 3070 Ti Laptop GPU]
+	24a4  GA104M
 	24ac  GA104 [GeForce RTX 30x0 Engineering Sample]
 	24ad  GA104 [GeForce RTX 3060 Engineering Sample]
 	24af  GA104 [GeForce RTX 3070 Engineering Sample]
@@ -12506,8 +12709,10 @@
 	24ba  GA104GLM [RTX A4500 Laptop GPU]
 	24bb  GA104GLM [RTX A3000 Laptop GPU]
 	24bf  GA104 [GeForce RTX 3070 Engineering Sample]
+	24c9  GA104 [GeForce RTX 3060 Ti]
 	24dc  GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
 	24dd  GA104M [GeForce RTX 3070 Mobile / Max-Q]
+	24df  GA104M
 	24e0  GA104M [Geforce RTX 3070 Ti Laptop GPU]
 	24fa  GA104 [RTX A4500 Embedded GPU ]
 	2501  GA106 [GeForce RTX 3060]
@@ -12515,14 +12720,20 @@
 	2504  GA106 [GeForce RTX 3060 Lite Hash Rate]
 	2505  GA106
 	2507  GA106 [Geforce RTX 3050]
+	2508  GA106 [GeForce RTX 3050 OEM]
+	2509  GA106 [GeForce RTX 3060 12GB Rev. 2]
 	2520  GA106M [GeForce RTX 3060 Mobile / Max-Q]
+	2521  GA106M [GeForce RTX 3060 Laptop GPU]
 	2523  GA106M [GeForce RTX 3050 Ti Mobile / Max-Q]
 	252f  GA106 [GeForce RTX 3060 Engineering Sample]
 	2531  GA106 [RTX A2000]
+	2544  GA106 [GeForce RTX 3060]
 	2560  GA106M [GeForce RTX 3060 Mobile / Max-Q]
+	2561  GA106M [GeForce RTX 3060 Laptop GPU]
 	2563  GA106M [GeForce RTX 3050 Ti Mobile / Max-Q]
 	2571  GA106 [RTX A2000 12GB]
-	2583  GA107 [GeForce RTX 3050]
+	2582  GA107 [GeForce RTX 3050 8GB]
+	2583  GA107 [GeForce RTX 3050 4GB]
 	25a0  GA107M [GeForce RTX 3050 Ti Mobile]
 	25a2  GA107M [GeForce RTX 3050 Mobile]
 	25a3  GA107
@@ -12532,6 +12743,9 @@
 	25a7  GA107M [GeForce MX570]
 	25a9  GA107M [GeForce RTX 2050]
 	25aa  GA107M [GeForce MX570 A]
+	25ab  GA107M [GeForce RTX 3050 4GB Laptop GPU]
+	25ac  GN20-P0-R-K2 [GeForce RTX 3050 6GB Laptop GPU]
+	25ad  GA107 [GeForce RTX 2050]
 	25af  GA107 [GeForce RTX 3050 Engineering Sample]
 	25b5  GA107GLM [RTX A4 Mobile]
 # A16 - 25B6 10DE 14A9 / A2 - 25B6 10DE 157E
@@ -12539,11 +12753,42 @@
 	25b8  GA107GLM [RTX A2000 Mobile]
 	25b9  GA107GLM [RTX A1000 Laptop GPU]
 	25ba  GA107GLM [RTX A2000 8GB Laptop GPU]
+	25bb  GA107GLM [RTX A500 Laptop GPU]
+	25bc  GA107
 	25e0  GA107BM [GeForce RTX 3050 Ti Mobile]
 	25e2  GA107BM [GeForce RTX 3050 Mobile]
 	25e5  GA107BM [GeForce RTX 3050 Mobile]
+	25ec  GN20-P0-R-K2 [GeForce RTX 3050 6GB Laptop GPU]
+	25ed  GA107 [GeForce RTX 2050]
 	25f9  GA107 [RTX A1000 Embedded GPU ]
 	25fa  GA107 [RTX A2000 Embedded GPU]
+	25fb  GA107 [RTX A500 Embedded GPU]
+	2681  AD102 [RTX TITAN Ada]
+	2684  AD102 [GeForce RTX 4090]
+	26b1  AD102GL [L6000 / RTX 6000 Ada Generation]
+	26b5  AD102GL [L40]
+	26b8  AD102GL [L40G]
+	26f5  AD102GL [L40 CNX]
+	2704  AD103 [GeForce RTX 4080]
+	2717  GN21-X11 [GeForce RTX 4090 Laptop GPU]
+	2730  AD103GLM [RTX 5000 Ada Generation Laptop GPU]
+	2757  GN21-X11
+	2782  AD104 [GeForce RTX 4070 Ti]
+	2785  AD104
+	2786  AD104 [GeForce RTX 4070]
+	27a0  GN21-X9
+	27b8  AD104GL [L4]
+	27ba  AD104
+	27bb  AD104GLM [RTX 3500 Ada Generation Laptop GPU]
+	27e0  GN21-X9
+	2820  GN21-X6
+	2838  AD106GLM [RTX 3000 Ada Generation Laptop GPU]
+	2860  GN21-X6
+	28a0  GN21-X4
+	28a1  GN21-X2
+	28b8  AD107GLM [RTX 2000 Ada Generation Laptop GPU]
+	28e0  GN21-X4
+	28e1  GN21-X2
 10df  Emulex Corporation
 	0720  OneConnect NIC (Skyhawk)
 		103c 1934  FlexFabric 20Gb 2-port 650M Adapter
@@ -12777,6 +13022,7 @@
 		1028 06e4  XPS 15 9550
 		1028 06e6  Latitude 11 5175 2-in-1
 		1028 09be  Latitude 7410
+		1028 0b10  Precision 3571
 		17aa 224f  ThinkPad X1 Carbon 5th Gen
 	5260  RTS5260 PCI Express Card Reader
 	5261  RTS5261 PCI Express Card Reader
@@ -12881,8 +13127,10 @@
 		103c 2a6f  Asus IPIBL-LB Motherboard
 		103c 825b  OMEN-17-w001nv
 		103c 8615  Pavilion Laptop 15-cw1xxx
+		103c 86d4  Pavilion Laptop 15-ec0xxx
 # Rev 29, uses r8169 Driver on Linux
 		103c 8882  HP ProDesk 405 G8 Desktop Mini PC
+		103c 8b17  ProBook 445 G9/455 G9 [RTL8111HSH-CG GbE Controller]
 		1043 11f5  Notebook motherboard (one of many models)
 		1043 16d5  U6V/U31J laptop
 		1043 81aa  P5B
@@ -12971,7 +13219,7 @@
 		10ec 8739  Dell Wireless 1801
 		17aa b736  Z50-75
 	b822  RTL8822BE 802.11a/b/g/n/ac WiFi adapter
-		103c 831b  Realtek RTL8822BE 802.11ac 2 × 2 Wi-Fi + Bluetooth 4.2 Combo Adapter (MU-MIMO supported)
+		103c 831b  Realtek RTL8822BE 802.11ac 2 Ã— 2 Wi-Fi + Bluetooth 4.2 Combo Adapter (MU-MIMO supported)
 		17aa 5124  ThinkPad E595
 		17aa b023  ThinkPad E595
 	c821  RTL8821CE 802.11ac PCIe Wireless Network Adapter
@@ -12998,13 +13246,37 @@
 	3fc4  RME Digi9652 (Hammerfall)
 	3fc5  RME Hammerfall DSP
 	3fc6  RME Hammerfall DSP MADI
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	5000  Alveo U200 XDMA Platform
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	5004  Alveo U250 XDMA Platform
 	5005  Alveo U250
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	500c  Alveo U280 XDMA Platform
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	5020  Alveo U50 XMDA Platform
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	505c  Alveo U55C
+	6987  SmartSSD
+	6988  SmartSSD
+	7011  7-Series FPGA Hard PCIe block (AXI/debug)
 	7038  FPGA Card XC7VX690T
 		17aa 402f  FPGA XC7VX690T-3FFG1157E
 	8019  Memory controller
 		1eec 0201  VSEC10232X Dual-port 100Gb/s Etherent PCIe
 	8380  Ellips ProfiXpress Profibus Master
 	8381  Ellips Santos Frame Grabber
+	9134  SmartSSD
+	9234  SmartSSD
+	9434  SmartSSD
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	d000  Alveo U200 Golden Image
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	d004  Alveo U250 Golden Image
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	d00c  Alveo U280 Golden Image
+# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
+	d020  Alveo U50 Golden Image
 	d154  Copley Controls CAN card (PCI-CAN-02)
 # SED is assigned Xilinx PCI device IDs ebf0 through ebff
 	ebf0  SED Systems Modulator/Demodulator
@@ -13167,8 +13439,9 @@
 	000b  EMU20k2 [Sound Blaster X-Fi Titanium Series]
 		1102 0041  SB0880 [SoundBlaster X-Fi Titanium PCI-e]
 		1102 0062  SB1270 [SoundBlaster X-Fi Titanium HD]
-	0012  Sound Core3D [Sound Blaster Recon3D / Z-Series]
+	0012  CA0132 Sound Core3D [Sound Blaster Recon3D / Z-Series / Sound BlasterX AE-5 Plus]
 		1102 0010  SB1570 SB Audigy Fx
+		1102 0191  CA0132 Sound Core3D - CA0113 [ Sound BlasterX AE-5 Plus]
 	4001  SB Audigy FireWire Port
 		1102 0010  SB Audigy FireWire Port
 	7002  SB Live! Game Port
@@ -13241,6 +13514,7 @@
 	3320  RocketRAID 3320
 	4310  RocketRaid 4310
 	7505  SSD7505 PCIe Gen4 x16 4-Port M.2 NVMe RAID Controller
+	7540  SSD7540 PCIe Gen4 x16 8-Port M.2 NVMe RAID Controller
 1104  RasterOps Corp.
 1105  Sigma Designs, Inc.
 	1105  REALmagic Xcard MPEG 1/2/3/4 DVD Decoder
@@ -13510,6 +13784,7 @@
 		1462 7181  K8MM3-V mainboard
 		147b 1407  KV8-MAX3 motherboard
 		1695 300c  Realtek ALC655 audio on EP-8KRA series mainboard
+		16f3 4170  J7F2 motherboard
 		1849 0850  ASRock 775Dual-880 Pro onboard audio (Realtek ALC850)
 		1849 9739  P4VT8 Mainboard (C-Media CMI9739A codec)
 # probably all K7VT2/4*/6
@@ -13638,9 +13913,9 @@
 	3208  PT890 Host Bridge
 	3213  VPX/VPX2 PCI to PCI Bridge Controller
 	3218  K8T800M Host Bridge
-	3227  VT8237 ISA bridge [KT600/K8T800/K8T890 South]
+	3227  VT8237 ISA bridge [KT600/K8T800/K8T890/CN700 South]
 		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard
-		1106 3227  DFI KT600-AL / Soltek SL-B9D-FGR Motherboard
+		1106 3227  VT8237 ISA bridge
 		1458 5001  GA-7VT600 Motherboard
 		147b 1407  KV8-MAX3 motherboard
 		1849 3227  K7VT4 motherboard
@@ -14127,7 +14402,8 @@
 1129  Firmworks
 112a  Hermes Electronics Company, Ltd.
 # nee Linotype - Hell AG
-112b  Heidelberger Druckmaschinen AGHeidelberger Druckmaschinen AG
+112b  Heidelberger Druckmaschinen AG
+	0001  SCU5
 112c  Zenith Data Systems
 112d  Ravicad
 112e  Infomedia Microelectronics Inc.
@@ -14975,6 +15251,8 @@
 	0113  BG3 NVMe SSD Controller
 		1179 0001  Toshiba KBG30ZMS128G 128GB NVMe SSD
 	0115  XG4 NVMe SSD Controller
+	0116  XG5 NVMe SSD Controller
+		1179 0001  XG5 NVMe SSD Controller
 	011a  XG6 NVMe SSD Controller
 	0404  DVD Decoder card
 	0406  Tecra Video Capture device
@@ -16701,6 +16979,7 @@
 1299  Knowledge Technology Lab.
 129a  VMetro, inc.
 	0615  PBT-615 PCI-X Bus Analyzer
+	0715  cPCI Bus Analyzer
 	1100  PMC-FPGA05
 	1106  XMC-FPGA05F, PCI interface
 	1107  XMC-FPGA05F, PCIe interface
@@ -17209,8 +17488,64 @@
 	5190  9200 ECO NVMe SSD
 	5191  9200 PRO NVMe SSD
 	5192  9200 MAX NVMe SSD
-	51a2  9300 PRO NVMe SSD
-	51a3  9300 MAX NVMe SSD
+	51a2  7300 PRO NVMe SSD
+		1344 2000  960GB U.2
+		1344 3000  1920GB U.2
+		1344 4000  3480GB U.2
+		1344 5000  7680GB U.2
+	51a3  7300 MAX NVMe SSD
+		1344 1100  400GB M.2
+		1344 2000  800GB U.2
+		1344 2100  800GB M.2
+		1344 3000  1600GB U.2
+		1344 4000  3200GB U.2
+		1344 5000  6400GB U.2
+	51b1  9300 PRO NVMe SSD
+		1344 4000  3.84TB U.2
+		1344 5000  7.68TB U.2
+		1344 6000  15.36TB U.2
+	51b2  9300 MAX NVMe SSD
+		1344 4000  3.2TB U.2
+		1344 5000  6.4 TB U.2
+		1344 6000  12.8TB U.2
+	51c0  7400 PRO NVMe SSD
+		1028 2162  EC NVMe OPAL 7400 RI M.2 480GB
+		1028 2163  EC NVMe OPAL 7400 RI M.2 960GB
+		1028 2164  EC NVMe ISE 7400 RI M.2 480GB
+		1028 2165  EC NVMe ISE 7400 RI M.2 960GB
+		1028 216c  EC NVMe ISE 7400 RI M.2 110 1.92TB
+		1028 216d  EC NVMe ISE 7400 RI M.2 110 3.84TB
+		1028 216e  EC NVMe OPAL 7400 RI M.2 110 1.92TB
+		1028 216f  EC NVMe OPAL 7400 RI M.2 110 3.84TB
+		1028 2197  EC NVMe OPAL 7400 RI M.2 110 960GB
+		1028 224d  EC NVMe ISE 7400 RI M.2 110 960GB
+		1344 1100  M.2 480GB
+		1344 2000  U.3 960GB
+		1344 2100  M.2 960GB
+		1344 2600  E1.S 960GB
+		1344 2b00  M.2 1920GB
+		1344 2d00  E1.2 1920GB
+		1344 3000  U.3 1920GB
+		1344 3e00  M.2 3840GB
+		1344 3f00  E1.S 3840GB
+		1344 4000  U.3 3840GB
+		1344 5000  U.3 7680GB
+	51c1  7400 MAX NVMe SSD
+		1028 216a  EC NVMe ISE 7400 MU M.2 80 800GB
+		1028 216b  EC NVMe OPAL 7400 MU M.2 80 800GB
+		1344 1100  M.2 400GB
+		1344 2000  U.3 800GB
+		1344 2100  M.2 800GB
+		1344 2600  E1.S 800GB
+		1344 2b00  M.2 1600GB
+		1344 2d00  E1.S 1600GB
+		1344 3000  U.3 1600GB
+		1344 3e00  M.2 3200GB
+		1344 3f00  E1.S 3200GB
+		1344 4000  U.3 3200GB
+		1344 5000  U.3 6400GB
+	51c3  7450 PRO NVMe SSD
+	51c4  7450 MAX NVMe SSD
 1345  Arescom Inc
 1347  Odetics
 1349  Sumitomo Electric Industries, Ltd.
@@ -17956,6 +18291,7 @@
 	0002  MN-130 (ADMtek Centaur-P based)
 # Virtual Video Card Device for Windows Remote Desktop (RDP)
 	008c  Basic Render Driver
+	008e  Basic Render Driver
 	5353  Hyper-V virtual VGA
 	5801  XMA Decoder (Xenon)
 	5802  SATA Controller - CdRom (Xenon)
@@ -18727,6 +19063,8 @@
 	6088  T62100-6088 Unified Wire Ethernet Controller
 	6089  T62100-6089 Unified Wire Ethernet Controller
 	608a  T62100-608a Unified Wire Ethernet Controller
+	6092  T62100-KR Unified Wire Ethernet Controller
+		01de fff9  Gimlet Baseboard
 	6401  T6225-CR Unified Wire Ethernet Controller
 	6402  T6225-SO-CR Unified Wire Ethernet Controller
 	6403  T6425-CR Unified Wire Ethernet Controller
@@ -18751,6 +19089,8 @@
 	6488  T62100-6088 Unified Wire Ethernet Controller
 	6489  T62100-6089 Unified Wire Ethernet Controller
 	648a  T62100-608a Unified Wire Ethernet Controller
+	6492  T62100-KR Unified Wire Ethernet Controller
+		01de fff9  Gimlet Baseboard
 	6501  T6225-CR Unified Wire Storage Controller
 	6502  T6225-SO-CR Unified Wire Storage Controller
 	6503  T6425-CR Unified Wire Storage Controller
@@ -18775,6 +19115,7 @@
 	6588  T62100-6088 Unified Wire Storage Controller
 	6589  T62100-6089 Unified Wire Storage Controller
 	658a  T62100-608a Unified Wire Storage Controller
+	6592  T62100-KR Unified Wire Storage Controller
 	6601  T6225-CR Unified Wire Storage Controller
 	6602  T6225-SO-CR Unified Wire Storage Controller
 	6603  T6425-CR Unified Wire Storage Controller
@@ -18799,6 +19140,7 @@
 	6688  T62100-6088 Unified Wire Storage Controller
 	6689  T62100-6089 Unified Wire Storage Controller
 	668a  T62100-608a Unified Wire Storage Controller
+	6692  T62100-KR Unified Wire Storage Controller
 	6801  T6225-CR Unified Wire Ethernet Controller [VF]
 	6802  T6225-SO-CR Unified Wire Ethernet Controller [VF]
 	6803  T6425-CR Unified Wire Ethernet Controller [VF]
@@ -18894,13 +19236,15 @@
 144d  Samsung Electronics Co Ltd
 	1600  Apple PCIe SSD
 	a544  Exynos 8890 PCIe Root Complex
+	a575  Exynos 7420 PCIe Root Complex
+	a5e3  Exynos 5433 PCIe Root Complex
 	a800  XP941 PCIe SSD
 	a802  NVMe SSD Controller SM951/PM951
 		144d a801  PM963 2.5" NVMe PCIe SSD
 	a804  NVMe SSD Controller SM961/PM961/SM963
 		144d a801  SM963 2.5" NVMe PCIe SSD
 	a808  NVMe SSD Controller SM981/PM981/PM983
-		144d a801  SSD 970 EVO Plus 1TB
+		144d a801  SSD 970 EVO
 		1d49 403b  Thinksystem U.2 PM983 NVMe SSD
 	a809  NVMe SSD Controller 980
 	a80a  NVMe SSD Controller PM9A1/PM9A3/980PRO
@@ -18913,6 +19257,7 @@
 		0128 2168  DC NVMe PM9A3 RI 80M.2 480GB
 		0128 2169  DC NVMe PM9A3 RI 80M.2 960GB
 		144d a813  General DC NVMe PM9A3
+	a80b  NVMe SSD Controller PM9B1
 	a820  NVMe SSD Controller 171X
 		1028 1f95  Express Flash NVMe XS1715 SSD 400GB
 		1028 1f96  Express Flash NVMe XS1715 SSD 800GB
@@ -19076,6 +19421,7 @@
 148b  INNOMEDIALOGIC Inc.
 148c  Tul Corporation / PowerColor
 	2391  Radeon RX 590 [Red Devil]
+	2398  AXRX 5700 XT 8GBD6-3DHE/OC [PowerColor Red Devil Radeon RX 5700 XT]
 148d  DIGICOM Systems, Inc.
 	1003  HCF 56k Data/Fax Modem
 148e  OSI Plus Corporation
@@ -19178,7 +19524,7 @@
 		103c 1240  Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM)
 14c2  DTK Computer
 14c3  MEDIATEK Corp.
-	0608  RZ608 Wi-Fi 6E 80MHz
+	0608  MT7921K (RZ608) Wi-Fi 6E 80MHz
 	0616  MT7922 802.11ax PCI Express Wireless Network Adapter
 	7612  MT7612E 802.11acbgn PCI Express Wireless Network Adapter
 	7615  MT7615E 802.11ac PCI Express Wireless Network Adapter
@@ -19290,6 +19636,8 @@
 	1609  BCM5745X NetXtreme-E Ethernet Virtual Function
 	1612  BCM70012 Video Decoder [Crystal HD]
 	1614  BCM57454 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet
+		14e4 d140  NetXtreme-E Quad-port 10GBASE-T Ethernet PCIe Adapter (BCM957454-P410SDBT)
+		14e4 d340  NetXtreme-E Quad-port 10GBASE-T Ethernet OCP 3.0 Adapter (BCM957454-N410SDBT)
 	1615  BCM70015 Video Decoder [Crystal HD]
 	1639  NetXtreme II BCM5709 Gigabit Ethernet
 		1028 0235  PowerEdge R710 BCM5709 Gigabit Ethernet
@@ -19428,6 +19776,8 @@
 		103c 22be  Ethernet 1Gb 4-port 331i Adapter
 		103c 3383  Ethernet 1Gb 4-port 331T Adapter
 		14e4 1904  4-port 1Gb Ethernet Adapter
+		14e4 1909  Broadcom NetXtreme 5719 Quad Port Gigabit NIC
+		193d 1025  NIC-ETH330T-LP-4P
 	1659  NetXtreme BCM5721 Gigabit Ethernet PCI Express
 		1014 02c6  eServer xSeries server mainboard
 		1028 01e6  PowerEdge 860
@@ -19699,6 +20049,7 @@
 	16d4  BCM57402 NetXtreme-E Ethernet Partition
 	16d5  BCM57407 NetXtreme-E 10GBase-T Ethernet Controller
 	16d6  BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller
+		117c 00cd  FastFrame N4S2 Dual-port 10Gb Ethernet Adapter
 		14e4 1202  BCM957412M4122C OCP 1x25G Type1 wRoCE
 		14e4 4120  NetXtreme E-Series Advanced Dual-port 10Gb SFP+ Ethernet Network Daughter Card
 		14e4 4126  NetXtreme-E Dual-port 10G SFP+ Ethernet OCP 3.0 Adapter (BCM957412N4120C)
@@ -19707,6 +20058,7 @@
 # NIC-ETH531F-LP-2P BCM57412 2 x 10G SFP+ Ethernet PCIe Card
 		193d 1024  NIC-ETH531F-LP-2P
 	16d7  BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller
+		117c 00cc  FastFrame N422 Dual-port 25Gb Ethernet Adapter
 		14e4 1402  BCM957414A4142CC 10Gb/25Gb Ethernet PCIe
 		14e4 1404  BCM957414M4142C OCP 2x25G Type1 wRoCE
 		14e4 4140  NetXtreme E-Series Advanced Dual-port 25Gb SFP28 Network Daughter Card
@@ -19715,9 +20067,15 @@
 		14e4 4146  NetXtreme-E Dual-port 25G SFP28 Ethernet OCP 3.0 Adapter (BCM957414N4140C)
 		1590 020e  Ethernet 25Gb 2-port 631SFP28 Adapter
 		1590 0211  Ethernet 25Gb 2-port 631FLR-SFP28 Adapter
-		1eec 0101  VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
+# NIC-ETH630F-LP-2P SFP28 2x25GbE PCIe Network Adapter
+		193d 1033  NIC-ETH630F-LP-2P
+		1bd4 008e  ENFB2251-SP2
+		1bd4 008f  ENPB2251-SP2
+# VSE-225-31S Dual-port 10Gb/25Gb Ethernet PCIe
+		1eec 0101  VSE-225-31S Dual-port 10Gb/25Gb Ethernet PCIe
 	16d8  BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller
 		1028 1feb  NetXtreme-E 10Gb SFP+ Adapter
+		117c 00ce  FastFrame N4T2 Dual-port 10GBASE-T Ethernet Adapter
 		14e4 4163  NetXtreme-E Dual-port 10GBASE-T Ethernet OCP 2.0 Adapter (BCM957416M4163C)
 		14e4 4166  NetXtreme-E Dual-port 10GBASE-T Ethernet OCP 3.0 Adapter (BCM957416N4160C)
 		1590 020c  Ethernet 10Gb 2-port 535T Adapter
@@ -19769,13 +20127,16 @@
 		103c 30c0  Compaq 6710b
 		17aa 3a23  IdeaPad S10e
 	1750  BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
+		117c 00cf  FastFrame N412 Dual-port 100Gb Ethernet Adapter
 		14e4 2100  NetXtreme-E Dual-port 100G QSFP56 Ethernet PCIe4.0 x16 Adapter (BCM957508-P2100G)
 		14e4 5208  NetXtreme-E Dual-port 100G QSFP56 Ethernet OCP 3.0 Adapter (BCM957508-N2100G)
 		14e4 d124  NetXtreme-E P2100D BCM57508 2x100G QSFP PCIE
-		14e4 df24  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet
+		14e4 df24  NetXtreme-E NGM2100D BCM57508 2x100G KR Mezz Ethernet
 	1751  BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
 		1028 09d4  PowerEdge XR11/XR12 LOM
 		14e4 5045  NetXtreme-E BCM57504 4x25G OCP3.0
+		14e4 5100  NetXtreme-E Single-port 100G QSFP56 Ethernet OCP 3.0 Adapter (BCM957504-N1100G)
+		14e4 5105  NetXtreme-E Single-port 100G DSFP Ethernet OCP 3.0 Adapter (BCM957504-N1100GD)
 		14e4 5250  NetXtreme-E BCM57504 4x25G KR Mezz
 		14e4 d142  NetXtreme-E P425D BCM57504 4x25G SFP28 PCIE
 	1752  BCM57502 NetXtreme-E 10Gb/25Gb/40Gb/50Gb Ethernet
@@ -20054,6 +20415,12 @@
 	5850  BCM5850 Crypto Accelerator
 	5e87  Valkyrie offload engine
 	5e88  Viper Offload Engine
+# bluetooth PCI function of the BRCM4378 Wireless Network Adapter
+	5f69  BRCM4378 Bluetooth Controller
+# Bluetooth PCI function of the BRCM4387 Wireless Network Adapter
+	5f71  BRCM4387 Bluetooth Controller
+# Bluetooth PCI function of the BRCM4377 Wireless Network Adapter
+	5fa0  BRCM4377 Bluetooth Controller
 	8602  BCM7400/BCM7405 Serial ATA Controller
 	9026  CN99xx [ThunderX2] Integrated USB 3.0 xHCI Host Controller
 	9027  CN99xx [ThunderX2] Integrated AHCI/SATA 3 Host Controller
@@ -20095,6 +20462,8 @@
 		14e4 8028  Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w8GB DRAM (Part No BCM958802A8048C)
 		1bb0 0021  HPE SimpliVity Accelerator
 	d804  BCM58804 Stingray 100Gb Ethernet SoC
+# Trident5-X12 Switch ASIC
+	f800  BCM78800 switch ASIC for f800
 14e5  Pixelfusion Ltd
 14e6  SHINING Technology Inc
 14e7  3CX
@@ -20756,6 +21125,7 @@
 15b0  Zoltrix International Ltd
 15b1  Source Technology Inc
 15b2  Mosaid Technologies Inc
+# now NVIDIA
 15b3  Mellanox Technologies
 	0191  MT25408 [ConnectX IB Flash Recovery]
 	01f6  MT27500 Family [ConnectX-3 Flash Recovery]
@@ -20795,6 +21165,10 @@
 	0257  Quantum-2 in Flash Recovery Mode
 	0258  Quantum-2 RMA
 	0259  Abir Chiplet
+	025b  Quantum-3 in Flash Recovery Mode
+	025c  Quantum-3 RMA
+	025d  Quantum-3CPO in Flash Recovery Mode
+	025e  Quantum-3CPO RMA
 	0262  MT27710 [ConnectX-4 Lx Programmable] EN
 	0263  MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN
 	0264  Innova-2 Flex Burn image
@@ -20804,6 +21178,8 @@
 	0275  Spectrum-4C RMA
 	0277  Spectrum-4TOR RMA
 	0281  NPS-600 Flash Recovery
+	0282  ArcusE Flash recovery
+	0283  ArcusE RMA
 	1002  MT25400 Family [ConnectX-2 Virtual Function]
 	1003  MT27500 Family [ConnectX-3]
 		1014 04b5  PCIe3 40GbE RoCE Converged Host Bus Adapter for Power
@@ -20815,6 +21191,7 @@
 		15b3 0025  ConnectX-3 IB QDR Dual Port Mezzanine Card
 		15b3 0026  ConnectX-3 IB FDR Dual Port Mezzanine Card
 		15b3 0028  ConnectX-3 VPI Dual QSFP+ Port QDR Infiniband 40Gb/s or 10Gb Ethernet
+		15b3 0055  ConnectX-3 10 GbE Single Port SFP+ Adapter
 		15b3 0059  ConnectX-3 VPI IB FDR/40 GbE Single Port QSFP+ Mezzanine Card
 		15b3 0064  ConnectX-3 EN 10/40 GbE Single Port QSFP+ Adapter (MCX313A-BCBT)
 		15b3 0065  ConnectX-3 VPI IB FDR/40 GbE Dual Port QSFP+ Adapter
@@ -20839,6 +21216,7 @@
 		117c 0092  FastFrame NQ11
 		117c 0093  FastFrame NQ12
 		15b3 0006  Mellanox Technologies ConnectX-3 Pro Stand-up dual-port 40GbE MCX314A-BCCT
+		15b3 000c  ConnectX-3 Pro 10 GbE Dual Port SFP+ Adapter revision A1
 		15b3 0078  ConnectX-3 Pro 10 GbE Dual Port KR Mezzanine Card
 		15b3 0079  ConnectX-3 Pro 40 GbE Dual Port QSFP+ Adapter
 		15b3 0080  ConnectX-3 Pro 10 GbE Dual Port SFP+ Adapter
@@ -20882,10 +21260,10 @@
 		193d 1084  NIC-ETH540F-3S-2P
 	1016  MT27710 Family [ConnectX-4 Lx Virtual Function]
 	1017  MT27800 Family [ConnectX-5]
-		15b3 0006  ConnectX®-5 EN network interface card, 100GbE single-port QSFP28, PCIe3.0 x16, tall bracket; MCX515A-CCAT
-		15b3 0007  Mellanox ConnectX®-5 MCX516A-CCAT
-		15b3 0020  ConnectX®-5 EN network interface card, 10/25GbE dual-port SFP28, PCIe3.0 x8, tall bracket ; MCX512A-ACAT
-		15b3 0068  ConnectX®-5 EN network interface card for OCP2.0, Type 1, with host management, 25GbE dual-port SFP28, PCIe3.0 x8, no bracket Halogen free ; MCX542B-ACAN
+		15b3 0006  ConnectXÂ®-5 EN network interface card, 100GbE single-port QSFP28, PCIe3.0 x16, tall bracket; MCX515A-CCAT
+		15b3 0007  Mellanox ConnectXÂ®-5 MCX516A-CCAT
+		15b3 0020  ConnectXÂ®-5 EN network interface card, 10/25GbE dual-port SFP28, PCIe3.0 x8, tall bracket ; MCX512A-ACAT
+		15b3 0068  ConnectXÂ®-5 EN network interface card for OCP2.0, Type 1, with host management, 25GbE dual-port SFP28, PCIe3.0 x8, no bracket Halogen free ; MCX542B-ACAN
 		193d 1051  NIC-IB1040i-Mb-2P
 	1018  MT27800 Family [ConnectX-5 Virtual Function]
 	1019  MT28800 Family [ConnectX-5 Ex]
@@ -20977,6 +21355,7 @@
 	a2dd  BF4 Family Crypto enabled [BlueField-4 SoC Crypto enabled]
 	a2de  BF4 Family Crypto disabled [BlueField-4 SoC Crypto disabled]
 	a2df  BF4 Family integrated network controller [BlueField-4 integrated network controller]
+	b200  ArcusE
 	c2d2  MT416842 BlueField SoC management interfac
 	c2d3  MT42822 BlueField-2 SoC Management Interface
 	c2d4  MT43162 BlueField-3 Lx SoC Management Interface
@@ -20998,6 +21377,8 @@
 	cf84  Spectrum-4C
 	d2f0  Quantum HDR (200Gbps) switch
 	d2f2  Quantum-2 NDR (400Gbps) switch
+	d2f4  Quantum-3
+	d2f6  Quantum-3CPO
 15b4  CCI/TRIAD
 15b5  Cimetrics Inc
 15b6  Texas Memory Systems Inc
@@ -21078,7 +21459,7 @@
 15cd  Dreamtech Co Ltd
 15ce  Genrad Inc
 # https://www.hilscher.com/imprint/
-15cf  Hilscher Gesellschaft für Systemautomation mbH
+15cf  Hilscher Gesellschaft fÃ¼r Systemautomation mbH
 	0000  CIFX PCI/PCIe
 15d1  Infineon Technologies AG
 15d2  FIC (First International Computer Inc)
@@ -21089,6 +21470,7 @@
 15d7  Rockwell-Collins Inc
 15d8  Cybernetics Technology Co Ltd
 15d9  Super Micro Computer Inc
+	1b67  AOC-S3916L-H16iR-32DD
 15da  Cyberfirm Inc
 15db  Applied Computing Systems Inc
 15dc  Litronic Inc
@@ -21548,14 +21930,14 @@
 	002e  AR9287 Wireless Network Adapter (PCI-Express)
 		105b e034  T77H167.00
 	0030  AR93xx Wireless Network Adapter
-		103c 1627  AR9380/HB112 802.11abgn 3×3 Wi-Fi Adapter
+		103c 1627  AR9380/HB112 802.11abgn 3Ã—3 Wi-Fi Adapter
 		106b 009a  AirPort Extreme
 		1186 3a7e  DWA-566 Wireless N 300 Dual Band PCIe Desktop Adapter
 		1a56 2000  Killer Wireless-N 1102 Half-size Mini PCIe Card [AR9382]
 		1a56 2001  Killer Wireless-N 1103 Half-size Mini PCIe Card [AR9380]
 	0032  AR9485 Wireless Network Adapter
 		1028 0208  Wireless 1506 WLAN Half Mini-Card
-		103c 1838  AR9485/HB125 802.11bgn 1×1 Wi-Fi Adapter
+		103c 1838  AR9485/HB125 802.11bgn 1Ã—1 Wi-Fi Adapter
 		105b e044  Unex DHXA-225
 		144d 410e  AR9485WB-EG 802.11b/g/n mini-PCIe card on a series 3 laptop
 		1a3b 1186  AW-NE186H
@@ -21742,7 +22124,67 @@
 16da  Advantech Co., Ltd.
 	0011  INES GPIB-PCI
 16df  PIKA Technologies Inc.
-16e2  Geotest-MTS
+# nee Geotest-MTS
+16e2  Marvin Test Solutions
+	1034  GX1034 Certification and Verification Module PXI Board
+	1100  GX1100 Arbitrary Waveform and Function Generator PXI Board
+	1120  GX1120 Arbitrary Waveform and Function Generator PXI Board
+	1164  GX1164 Multi-Channel Programmable Resistor PXI Board
+	1632  GX1632e 32-Channel Arbitrary Analog Output PXIe Board
+	1648  GX1648 64-Channel Analog Output PXI Board
+	1649  GX1649 64-Channel Arbitrary Analog Output PXI Board
+	1838  GX1838 Precision DC Source PXI Board
+	2065  GX2065 Digital Multimeter PXI Board
+	2200  GTX2200 High Resolution Universal Time Interval Counter PXI Board
+	2201  GC2200 High Resolution Universal Time Interval Counter PCI Board
+	3104  GX3104 4-Channel 20V, 250mA Per Channel SMU PXI Board
+	3108  GX3108 4-Channel Source Measure Unit PXI Board
+	3116  GX3116e 16-Channel DUT Power Supply PXIe Board
+	3348  GX3348 Multi-Channel DC Source and Switch Matrix Board
+	3500  GX3500 Digital I/O FLEX FPGA Board
+	3700  GX3700e Digital I/O FLEX FPGA PXIe Board
+	3701  GX3700 Digital I/O FLEX FPGA PXI Board
+	3800  GX3800e Digital I/O FLEX FPGA PXIe Board
+	4943  GX4943 HellFire/Longbow Serial Communication Board
+	5050  GC5050 Dynamic Digital I/O with Algorithmic Sequencer PCI Board
+	5055  GX5055 Dynamic Digital I/O with Pin Electronics PXI Board
+	5083  GX5083 Dynamic Digital I/O with Algorithmic Sequencer PXI Board
+	5106  GX5106 High-Speed Digital I/O Cycle Timing (Master) Module PXI Board
+	5151  GX5150/1 High Speed Digital I/O (50/100MHz) PXI Board
+	5152  GX5152/3 DSR High Speed Digital Stimulus/Response PXI Board
+	5250  GX5250 Digital I/O Streaming PXI Board
+	5280  GX5280 High-Speed Digital I/O PXI Board
+	5290  GX5290 High-Speed Dynamic Digital I/O PXI Board
+	5294  GX5294 High-Speed Digital I/O PXI Board
+	5295  GX5295 Digital I/O with Pin Electronics and PMU PXI Board
+	5296  GX5296 Digital I/O with Pin Electronics and PMU PXI Board
+	5550  GX5050 Dynamic Digital I/O with Algorithmic Sequencer PXI Board
+	5641  GX5641/2 Bi-directional Differential-TTL I/O PXI Board
+	5731  GX5731 Digital I/O with 128 TTL Channels and 3x32 Customizable Channels PXI Board
+	5732  GX5732 224-Channel Static Digital I/O PXI Board
+	5733  GX5733 Digital I/O with 96 TTL Channels and 32 Customizable Channels PXI Board
+	5960  GX5961/4 Digital I/O Timing/Sync with Pin Electronics and PMU PXI Board
+	6021  GX6021 20-Channel RF Multiplexer PXI Board
+	6062  GX6062 60-Channel RF Multiplexer PXI Board
+	6115  GX6115 15-Channel High Current SPDT Form-C Relay PXI Board
+	6125  GX6125 25-Channel High-Density SPDT Form-C Relay PXI Board
+	6138  GX6138 38-Channel SPST Form-A Relay PXI Board
+	6188  GX6188 104-Channel 8x8 Multiplexer/Matrix PXI Board
+	6192  GX6192 16, 16x2 High Frequency, High Density Multiplexer PXI Board
+	6196  GX6196 96-Channel DPST Form-A Relay Carrier PXI Board
+	6256  GX6256 16, 16x2 Low Frequency, High Density Multiplexer PXI Board
+	6264  GX6264 128-Channel Scanner/Multiplexer Board
+	6315  GX6315 45-Channel High Current SPDT Form-C Relay Board
+	6325  GX6325 75-Channel High-Density SPDT Form-C Relay Board
+	6338  GX6338 114-Channel SPST Form-A Relay PXI Board
+	6377  GX6377 Multifunction Switching PXI Board
+	6384  GX6384 Configurable High-Density Switch Matrix PXI Board
+	6616  GX6616 6x2:16 Switch Matrix PXI Board
+	6864  GX6864 Video Switching PXI Board
+	7400  GX7400 Dual-Output Programmable Power Supply PXI Board
+	7404  GX7404 Prototyping and Power Interface PXI Board
+	7777  GX7777 Generic Interface PXI Board
+	7779  GX7779 Backplane Tester PXI Board
 16e3  European Space Agency
 	1e0f  LEON2FT Processor
 16e5  Intellon Corp.
@@ -22049,6 +22491,8 @@
 	9755  GL9755 SD Host Controller
 	e763  GL9763E eMMC Controller
 17aa  Lenovo
+# 250GB nvme ssd from lenovo, can be found in Thinkpad x380 yoga
+	0005  LENSE30256GMSP34MEAT3TA
 	3181  ThinkCentre M75n IoT
 	402b  Intel 82599ES 10Gb 2-port Server Adapter X520-2
 17ab  Phillips Components
@@ -22063,8 +22507,9 @@
 	0017  StorSecure 300 GZIP Compression and AES Encryption Card
 17c0  Wistron Corp.
 17c2  Newisys, Inc.
+17c3  Protogate, Inc.
 # nee Airgo Networks, Inc.
-17cb  Qualcomm
+17cb  Qualcomm Technologies, Inc
 	0001  AGN100 802.11 a/b/g True MIMO Wireless Card
 		1385 5c00  WGM511 Pre-N 802.11g Wireless CardBus Adapter
 		1737 0045  WMP54GX v1 802.11g Wireless-G PCI Adapter with SRX
@@ -22126,6 +22571,10 @@
 		17d3 1883  ARC-1883 8/12/16/24 Port PCIe 3.0 to SAS/SATA 12Gb RAID Controller
 	1884  ARC-1884 series PCIe 3.0 to SAS/SATA 12/6Gb RAID Controller
 	188a  ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller
+		17d3 1217  ARC-1217 4-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller
+		17d3 1227  ARC-1227 8-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller
+		17d3 1686  ARC-1686 PCIe 4.0 to SAS/SATA 12/6Gb Tape drive Controller
+		17d3 1886  ARC-1886 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller
 # nee Neterion Inc., previously S2io Inc.
 17d5  Exar Corp.
 	5731  Xframe 10-Gigabit Ethernet PCI-X
@@ -22568,6 +23017,7 @@
 	01c5  NT200A02 Network Adapter
 	01d5  NT50B01 Network Adapter
 	01e5  NT100A01 Network Adapter
+	0225  NT40A11 Network Adapter
 18f6  NextIO
 	1000  [Nexsis] Switch Virtual P2P PCIe Bridge
 	1001  [Texsis] Switch Virtual P2P PCIe Bridge
@@ -22773,7 +23223,7 @@
 	000c  Qualcomm MSM6275 UMTS chip
 1932  DiBcom
 193c  MAXIM Integrated Products
-193d  Hangzhou H3C Technologies Co., Ltd.
+193d  New H3C Technologies Co., Ltd.
 193f  AHA Products Group
 	0001  AHA36x-PCIX
 	0360  AHA360-PCIe
@@ -23111,6 +23561,10 @@
 	0212  Hi1822 Family (2*8G FC)
 		19e5 d303  Hi1822 SP522 (2*8G FC)
 		19e5 d306  Hi1822 SP523 (2*8G FC)
+	0222  Hi1822 Family
+		19e5 0051  Hi1822 SP681 (2*25/10GE)
+		19e5 0052  Hi1822 SP680 (4*25/10GE)
+		19e5 00a1  Hi1822 SP670 (2*100GE)
 	1710  iBMA Virtual Network Adapter
 	1711  Hi171x Series [iBMC Intelligent Management system chip w/VGA support]
 	1822  Hi1822 Family (4*25GE)
@@ -23132,7 +23586,9 @@
 		19e5 6214  NVMe SSD ES3500P V6 7680GB 2.5" U.2
 		19e5 6215  NVMe SSD ES3500P V6 15360GB 2.5" U.2
 	375e  Hi1822 Family Virtual Function
+	375f  Hi1822 Family Virtual Function
 	379e  Hi1822 Family Virtual Function
+	379f  Hi1822 Family Virtual Function
 	a120  HiSilicon PCIe Root Port with Gen4
 	a121  HiSilicon PCI-PCI Bridge
 	a122  HiSilicon Embedded DMA Engine
@@ -23295,7 +23751,11 @@
 	000d  SEL-3390S8 Serial Adapter
 	000e  SEL-3390E4 Ethernet Adapter
 	0014  SEL-3390T Time and Ethernet Adapter
+	0015  SEL-3350 Mainboard
+	0016  SEL-3350 Serial Expansion Board
+	0017  SEL-3350 GPIO Expansion Board
 	0018  SEL-3390E4 Ethernet Adapter
+	001c  SEL-3390E4 Ethernet Adapter
 1aae  Global Velocity, Inc.
 1ab4  Distributed Management Task Force, Inc. (DMTF)
 1ab6  CalDigit, Inc.
@@ -23319,6 +23779,8 @@
 		13c2 3016  TT-budget S2-4200 Twin
 		4254 0552  S952 v3
 1ae0  Google, Inc.
+# NVMe drive in GCP
+	001f  NVMe device
 	0042  Compute Engine Virtual Ethernet [gVNIC]
 	abcd  Airbrush Combined Paintbox IPU/Oscar Edge TPU [Pixel Neural Core]
 1ae3  SANBlaze Technology, Inc.
@@ -23420,7 +23882,9 @@
 # nee Qumranet, Inc.
 1af4  Red Hat, Inc.
 	1000  Virtio network device
+		01de fffb  Propolis Virtio network device
 	1001  Virtio block device
+		01de fffa  Propolis Virtio block device
 	1002  Virtio memory balloon
 	1003  Virtio console
 	1004  Virtio SCSI
@@ -23451,6 +23915,7 @@
 		1af4 1100  QEMU Virtual Machine
 1af5  Netezza Corp.
 1afa  J & W Electronics Co., Ltd.
+1b00  Montage Technology Co., Ltd.
 1b03  Magnum Semiconductor, Inc,
 	6100  DXT/DXTPro Multiformat Broadcast HD/SD Encoder/Decoder/Transcoder
 	7000  D7 Multiformat Broadcast HD/SD Encoder/Decoder/Transcoder
@@ -23464,6 +23929,7 @@
 	0611  ASM1061 SATA IDE Controller
 	0612  ASM1062 Serial ATA Controller
 		1849 0612  Motherboard
+	0625  106x SATA/RAID Controller
 	1040  ASM1040 XHCI Controller
 	1042  ASM1042 SuperSpeed USB Host Controller
 		1043 1059  K53SM motherboard
@@ -23481,7 +23947,7 @@
 	1242  ASM1142 USB 3.1 Host Controller
 	1343  ASM1143 USB 3.1 Host Controller
 	1812  ASM1812 6-Port PCIe x4 Gen2 Packet Switch
-	2142  ASM2142 USB 3.1 Host Controller
+	2142  ASM2142/ASM3142 USB 3.1 Host Controller
 		1462 7a72  H270 PC MATE
 	2824  ASM2824 PCIe Gen3 Packet Switch
 	3242  ASM3242 USB 3.2 Host Controller
@@ -23558,6 +24024,7 @@
 		1028 2113  BOSS-N1 Modular
 		1028 2151  BOSS-N1 Modular ET
 		1028 2196  ROR-N100
+		1b4b 2241  Santa Cruz NVMe Host Adapter
 		1d49 0306  ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit
 		1d49 0307  ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit
 	9120  88SE9120 SATA 6Gb/s Controller
@@ -23583,6 +24050,8 @@
 		1028 1fdf  BOSS-S1 Modular
 		1028 1fe2  BOSS-S1 Adapter
 		1028 2010  BOSS-S2 Adapter
+		1028 2260  BOSS-S1 Modular
+		1028 2261  BOSS-S2 Adapter
 # RS0200L6R2iM2
 		1bd4 0073  RS0200L6R2iM2
 		1d49 0300  ThinkSystem M.2 with Mirroring Enablement Kit
@@ -23782,6 +24251,8 @@
 	1007  AB3000 Series Rugged Computer (Series N)
 	1008  ME1000 mPCIe Avionics Interface Card
 	100a  NG1 Series Avionics Converter
+	100b  LE5 429 Databus Interface Card
+	100c  LE5 1553 Databus Interface Card
 	1101  OmniBus II PCIe Multi-Protocol Interface Card
 	1102  OmniBusBox II Multi-Protocol Interface Core
 	1103  OmniBus II cPCIe/PXIe Multi-Protocol Interface Card
@@ -23822,6 +24293,7 @@
 	001c  FD922
 	001d  Vega
 	001f  FD940
+	0020  FD2110
 1c28  Lite-On IT Corp. / Plextor
 	0122  M6e PCI Express SSD [Marvell 88SS9183]
 # previously Fiberblaze
@@ -23844,6 +24316,8 @@
 	00e5  PacketMover 2x10Gb [Corfu]
 	1000  SmartNIC N5010 4x100Gb
 	1001  SmartNIC N5011 w/2xE810 4x100Gb
+	1002  SmartNIC N5013 4x100Gb
+	1003  SmartNIC N5014 w/2xE810 4x100Gb
 	a000  FBC2CGG3 Capture 2x40Gb [Mango_02]
 	a001  FBC2CGG3 Capture 2x100Gb [Mango_02]
 	a003  FBC2CGG3 Capture 16x10Gb [Mango]
@@ -23885,9 +24359,11 @@
 	1285  PC300 NVMe Solid State Drive 1TB
 	1327  BC501 NVMe Solid State Drive
 	1339  BC511
-	1504  SC300 512GB M.2 2280 SATA Solid State Drive
+	1504  PC400 NVMe SSD
 	1527  PC401 NVMe Solid State Drive 256GB
-	174a  Gold P31 SSD
+	174a  Gold P31/PC711 NVMe Solid State Drive
+	1959  Platinum P41 NVMe Solid State Drive 2TB
+	2204  960GB TLC PCIe Gen3 x4 NVMe M.2 22110
 	243b  PE6110 NVMe Solid State Drive
 		1c5c 0100  PE6110 NVMe Solid State Drive
 	2839  PE8000 Series NVMe Solid State Drive
@@ -23901,27 +24377,71 @@
 		1028 214a  DC NVMe PE8010 RI U.2 7.68TB
 		1c5c 0100  PE8000 Series NVMe Solid State Drive
 	2849  PE81x0 U.2/3 NVMe Solid State Drive
+		1c5c 0101  PE81x0 U.2/3 NVMe Solid State Drive
 1c5f  Beijing Memblaze Technology Co. Ltd.
 	000d  PBlaze5 520/526
+		1c5f 0220  NVMe SSD PBlaze5 520 1920G AIC
+		1c5f 0221  NVMe SSD PBlaze5 520 1920G 2.5" U.2
+		1c5f 0230  NVMe SSD PBlaze5 520 3840G AIC
+		1c5f 0231  NVMe SSD PBlaze5 520 3840G 2.5" U.2
+		1c5f 4220  NVMe SSD PBlaze5 526 1600G AIC
+		1c5f 4221  NVMe SSD PBlaze5 526 1600G 2.5" U.2
+		1c5f 4230  NVMe SSD PBlaze5 526 3200G AIC
+		1c5f 4231  NVMe SSD PBlaze5 526 3200G 2.5" U.2
 	000e  PBlaze6 6530
 		1c5f 0b20  NVMe SSD PBlaze6 6530 1920G AIC
 		1c5f 0b21  NVMe SSD PBlaze6 6530 1920G 2.5" U.2
+		1c5f 0b25  NVMe SSD PBlaze6 6530 1920G E1.S
+		1c5f 0b27  NVMe SSD PBlaze6 6630 1920G 2.5" U.2
 		1c5f 0b30  NVMe SSD PBlaze6 6530 3840G AIC
 		1c5f 0b31  NVMe SSD PBlaze6 6530 3840G 2.5" U.2
+		1c5f 0b35  NVMe SSD PBlaze6 6530 3840G E1.S
+		1c5f 0b37  NVMe SSD PBlaze6 6630 3840G 2.5" U.2
 		1c5f 0b40  NVMe SSD PBlaze6 6530 7680G AIC
 		1c5f 0b41  NVMe SSD PBlaze6 6530 7680G 2.5" U.2
-		1c5f 4b20  NVMe SSD PBlaze6 6530 1600G AIC
-		1c5f 4b21  NVMe SSD PBlaze6 6530 1600G 2.5" U.2
-		1c5f 4b30  NVMe SSD PBlaze6 6530 3200G AIC
-		1c5f 4b31  NVMe SSD PBlaze6 6530 3200G 2.5" U.2
-		1c5f 4b40  NVMe SSD PBlaze6 6530 6400G AIC
-		1c5f 4b41  NVMe SSD PBlaze6 6530 6400G 2.5" U.2
+		1c5f 0b47  NVMe SSD PBlaze6 6630 7680G 2.5" U.2
+		1c5f 1331  NVMe SSD PBlaze6 6531 3840G 2.5" U.2
+		1c5f 1341  NVMe SSD PBlaze6 6531 7680G 2.5" U.2
+		1c5f 1431  NVMe SSD PBlaze6 6541 3840G 2.5" U.2
+		1c5f 1441  NVMe SSD PBlaze6 6541 7680G 2.5" U.2
+		1c5f 4b20  NVMe SSD PBlaze6 6536 1600G AIC
+		1c5f 4b21  NVMe SSD PBlaze6 6536 1600G 2.5" U.2
+		1c5f 4b25  NVMe SSD PBlaze6 6536 1600G E1.S
+		1c5f 4b27  NVMe SSD PBlaze6 6636 1600G 2.5" U.2
+		1c5f 4b30  NVMe SSD PBlaze6 6536 3200G AIC
+		1c5f 4b31  NVMe SSD PBlaze6 6536 3200G 2.5" U.2
+		1c5f 4b35  NVMe SSD PBlaze6 6536 3200G E1.S
+		1c5f 4b37  NVMe SSD PBlaze6 6636 3200G 2.5" U.2
+		1c5f 4b40  NVMe SSD PBlaze6 6536 6400G AIC
+		1c5f 4b41  NVMe SSD PBlaze6 6536 6400G 2.5" U.2
+		1c5f 4b47  NVMe SSD PBlaze6 6636 6400G 2.5" U.2
+		1c5f 5331  NVMe SSD PBlaze6 6537 3200G 2.5" U.2
+		1c5f 5341  NVMe SSD PBlaze6 6537 6400G 2.5" U.2
+		1c5f 5431  NVMe SSD PBlaze6 6547 3200G 2.5" U.2
+		1c5f 5441  NVMe SSD PBlaze6 6547 6400G 2.5" U.2
 	003d  PBlaze5 920/926
-	003e  PBlaze6 6920
+		1c5f 0a30  NVMe SSD PBlaze5 920 3840G AIC
+		1c5f 0a31  NVMe SSD PBlaze5 920 3840G 2.5" U.2
+		1c5f 0a40  NVMe SSD PBlaze5 920 7680G AIC
+		1c5f 0a41  NVMe SSD PBlaze5 920 7680G 2.5" U.2
+		1c5f 4a30  NVMe SSD PBlaze5 926 3200G AIC
+		1c5f 4a31  NVMe SSD PBlaze5 926 3200G 2.5" U.2
+		1c5f 4a40  NVMe SSD PBlaze5 926 6400G AIC
+		1c5f 4a41  NVMe SSD PBlaze5 926 6400G 2.5" U.2
+	003e  PBlaze6 6920/6930
 		1c5f 0a31  NVMe SSD PBlaze6 6920 3840GB 2.5" U.2
 		1c5f 0a41  NVMe SSD PBlaze6 6920 7680GB 2.5" U.2
+		1c5f 0b31  NVMe SSD PBlaze6 6930 3840GB 2.5" U.3
+		1c5f 0b41  NVMe SSD PBlaze6 6930 7680GB 2.5" U.3
+		1c5f 0b51  NVMe SSD PBlaze6 6930 15360GB 2.5" U.3
+		1c5f 0b61  NVMe SSD PBlaze6 6930 30720GB 2.5" U.3
 		1c5f 4a31  NVMe SSD PBlaze6 6920 3200GB 2.5" U.2
 		1c5f 4a41  NVMe SSD PBlaze6 6920 6400GB 2.5" U.2
+		1c5f 4b41  NVMe SSD PBlaze6 6936 6400GB 2.5" U.3
+		1c5f 4b51  NVMe SSD PBlaze6 6936 12800GB 2.5" U.3
+		1c5f 4b61  NVMe SSD PBlaze6 6936 25600GB 2.5" U.3
+# Gen5 NVMe SSD
+	003f  PBlaze7 7940/7946
 	0540  PBlaze4 NVMe SSD
 	0550  PBlaze5 700/900
 	0555  PBlaze5 510/516
@@ -23964,10 +24484,12 @@
 	0002  Clarett
 1cb8  Dawning Information Industry Co., Ltd.
 1cc1  ADATA Technology Co., Ltd.
+	33f8  IM2P33F8ABR1 NVMe SSD
+	5350  XPG GAMMIX S50 NVMe SSD
 # 256GB NVMe SSD
 	5766  ADATA XPG GAMMIXS1 1L Media
 	8201  XPG SX8200 Pro PCIe Gen3x4 M.2 2280 Solid State Drive
-1cc4  Union Memory (Shenzhen)
+1cc4  Shenzhen Unionmemory Information System Ltd.
 	1203  NVMe SSD Controller UHXXXa series
 		1cc4 a121  NVMe SSD UHXXXa series U.2 960GB
 		1cc4 a122  NVMe SSD UHXXXa series U.2 1920GB
@@ -23978,10 +24500,14 @@
 		1cc4 a212  NVMe SSD UHXXXa series U.2 1600GB
 		1cc4 a213  NVMe SSD UHXXXa series U.2 3200GB
 		1cc4 a214  NVMe SSD UHXXXa series U.2 6400GB
+		1cc4 e122  NVMe SSD UH711a series U.2 1920GB
+		1cc4 e123  NVMe SSD UH711a series U.2 3840GB
+		1cc4 e124  NVMe SSD UH711a series U.2 7680GB
 	17ab  NVMe 256G SSD device
 	6303  AM630 PCIe 4.0 x4 NVMe SSD Controller
 1cc5  Embedded Intelligence, Inc.
-	0100  CAN-PCIe-02
+	0100  PCIe-CAN-02 Dual CAN bus (9-pin male). PCI Express x1.
+	0101  PCIe-CAN-01 Single CAN bus (9-pin male). PCI Express x1.
 1cc7  Radian Memory Systems Inc.
 	0200  RMS-200
 	0250  RMS-250
@@ -24025,11 +24551,16 @@
 1d00  Pure Storage
 1d05  Tongfang Hongkong Limited
 1d0f  Amazon.com, Inc.
+	7064  NeuronDevice (Inferentia)
+	7164  NeuronDevice (Trainium)
+		1d0f 0000  Trainium
+	7264  NeuronDevice (Inferentia2)
 	8061  NVMe EBS Controller
 	cd01  NVMe SSD Controller
 	ec20  Elastic Network Adapter (ENA)
 	efa0  Elastic Fabric Adapter (EFA)
 	efa1  Elastic Fabric Adapter (EFA)
+	efa2  Elastic Fabric Adapter (EFA)
 1d17  Zhaoxin
 	070f  ZX-100 PCI Express Root Port
 	0710  ZX-100/ZX-200 PCI Express Root Port
@@ -24039,14 +24570,14 @@
 	0714  ZX-100/ZX-200 PCI Express Root Port
 	0715  ZX-100/ZX-200 PCI Express Root Port
 	0716  ZX-D PCI Express Root Port
-	0717  ZX-D/ZX-E PCI Express Root Port
-	0718  ZX-D/ZX-E PCI Express Root Port
-	0719  ZX-D/ZX-E PCI Express Root Port
-	071a  ZX-D/ZX-E PCI Express Root Port
-	071b  ZX-D/ZX-E PCI Express Root Port
-	071c  ZX-D/ZX-E PCI Express Root Port
-	071d  ZX-D/ZX-E PCI Express Root Port
-	071e  ZX-D/ZX-E PCI Express Root Port
+	0717  KX-5000/KX-6000/KX-6000G Express Root Port
+	0718  KX-5000/KX-6000/KX-6000G Express Root Port
+	0719  KX-5000/KX-6000/KX-6000G Express Root Port
+	071a  KX-5000/KX-6000/KX-6000G Express Root Port
+	071b  KX-5000/KX-6000/KX-6000G Express Root Port
+	071c  KX-5000/KX-6000/KX-6000G Express Root Port
+	071d  KX-5000/KX-6000/KX-6000G Express Root Port
+	071e  KX-5000/KX-6000/KX-6000G Express Root Port
 	071f  ZX-200 Upstream Port of PCI Express Switch
 	0720  ZX-200 PCIE RC6 controller
 	0721  ZX-200 Downstream Port of PCI Express Switch
@@ -24054,42 +24585,47 @@
 	1000  ZX-D Standard Host Bridge
 	1001  ZX-D/ZX-E Miscellaneous Bus
 	1003  ZX-E Standard Host Bridge
+	1006  KX-6000G Standard Host Bridge
 	3001  ZX-100 Standard Host Bridge
 	300a  ZX-100 Miscellaneous Bus
-	3038  ZX-100/ZX-200/ZX-E Standard Universal PCI to USB Host Controller
-	3104  ZX-100/ZX-200/ZX-E Standard Enhanced PCI to USB Host Controller
-	31b0  ZX-100/ZX-D Standard Host Bridge
-	31b1  ZX-100/ZX-D Standard Host Bridge
-	31b2  ZX-100/ZX-D DRAM Controller
-	31b3  ZX-100/ZX-D Power Management Controller
-	31b4  ZX-100/ZX-D I/O APIC
-	31b5  ZX-100/ZX-D Scratch Device
-	31b7  ZX-100/ZX-D/ZX-E Standard Host Bridge
+	3038  ZX-100/ZX-200/KX-6000/KX-6000G Standard Universal PCI to USB Host Controller
+	3104  ZX-100/ZX-200/KX-6000/KX-6000G Standard Enhanced PCI to USB Host Controller
+	31b0  ZX-100/KX-5000/KX-6000/KX-6000G Standard Host Bridge
+	31b1  ZX-100/KX-5000/KX-6000/KX-6000G Standard Host Bridge
+	31b2  ZX-100/KX-5000/KX-6000/KX-6000G DRAM Controller
+	31b3  ZX-100/KX-5000/KX-6000/KX-6000G Power Management Controller
+	31b4  ZX-100/KX-5000/KX-6000/KX-6000G I/O APIC
+	31b5  ZX-100/KX-5000/KX-6000/KX-6000G Scratch Device
+	31b7  ZX-100/KX-5000/KX-6000/KX-6000G Standard Host Bridge
 	31b8  ZX-100/ZX-D PCI to PCI Bridge
-	3288  ZX-100/ZX-D/ZX-E High Definition Audio Controller
-	345b  ZX-100/ZX-D/ZX-E Miscellaneous Bus
+	3288  ZX-100/KX-5000/KX-6000/KX-6000G High Definition Audio Controller
+	345b  ZX-100/KX-5000/KX-6000/KX-6000G Miscellaneous Bus
 	3a02  ZX-100 C-320 GPU
 	3a03  ZX-D C-860 GPU
 	3a04  ZX-E C-960 GPU
+	3c02  KX-6000G DRAM Controller
+	3d01  KX-6000G C-1080 GPU
 	9002  ZX-100/ZX-200 EIDE Controller
-	9003  ZX-100/ZX-E EIDE Controller
+	9003  ZX-100/KX-6000/KX-6000G EIDE Controller
+	9043  KX-6000G RAID Controller
 	9045  ZX-100/ZX-D/ZX-E RAID Accelerator 0
 	9046  ZX-D/ZX-E RAID Accelerator 1
-	9083  ZX-100/ZX-200/ZX-E StorX AHCI Controller
+	9083  ZX-100/ZX-200/KX-6000/KX-6000G StorX AHCI Controller
 	9084  ZX-100 StorX AHCI Controller
 	9100  ZX-200 Cross bus
 	9101  ZX-200 Traffic Controller
 	9141  ZX-100 High Definition Audio Controller
 	9142  ZX-D High Definition Audio Controller
 	9144  ZX-E High Definition Audio Controller
+	9145  KX-6000G High Definition Audio Controller
 	9180  ZX-200 Networking Gigabit Ethernet Adapter
 	9202  ZX-100 USB eXtensible Host Controller
 	9203  ZX-200 USB eXtensible Host Controller
-	9204  ZX-E USB eXtensible Host Controller
+	9204  KX-6000/KX-6000G USB eXtensible Host Controller
 	9286  ZX-D eMMC Host Controller
-	9300  ZX-D/ZX-E eSPI Host Controller
+	9300  ZX-100/KX-5000/KX-6000/KX-6000G eSPI Host Controller
 	95d0  ZX-100 Universal SD Host Controller
-	f410  ZX-100/ZX-D/ZX-E PCI Com Port
+	f410  ZX-100/KX-5000/KX-6000/KX-6000G PCI Com Port
 1d18  RME
 	0001  Fireface UFX+
 # acquired by Intel
@@ -24182,6 +24718,10 @@
 	101d  AR-ARK-NIC [Arkville ArkNIC Kernel Path Device]
 	101e  AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex R-Tile]
 	101f  AR-TK242 [2x100GbE Packet Capture Device]
+	1020  AR-GP-PF [General-Purpose Physical Function]
+	1021  AR-MGMT-PF [Board-Generic Management Physical Function]
+	1022  AR-ARKA-FX2 [Arkville 128B DPDK Data Mover for Agilex]
+	1023  AR-BD-FX1 [BufferDirect Zero-Bounce Data Motion Endpoint]
 	4200  A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
 1d72  Xiaomi
 1d78  DERA Storage
@@ -24198,6 +24738,55 @@
 		1d78 3103  D5457 U.2 1.6TB NVMe SSD
 		1d78 3105  D5457 U.2 3.2TB NVMe SSD
 		1d78 3107  D5457 U.2 6.4TB NVMe SSD
+		1d78 3108  D5437 U.2 7.68TB NVMe SSD
+		1d78 5003  D5447 HHHL 1.6TB NVMe SSD
+		1d78 5004  D5427 HHHL 1.92TB NVMe SSD
+		1d78 5005  D5447 HHHL 3.2TB NVMe SSD
+		1d78 5006  D5427 HHHL 3.84TB NVMe SSD
+		1d78 5007  D5447 HHHL 6.4TB NVMe SSD
+		1d78 5008  D5427 HHHL 7.68TB NVMe SSD
+		1d78 5103  D5447 U.2 1.6TB NVMe SSD
+		1d78 5105  D5447 U.2 3.2TB NVMe SSD
+		1d78 5106  AF3UP34DTCUN3T8B SSD
+		1d78 5107  D5447 U.2 6.4TB NVMe SSD
+		1d78 5114  D5427 U.2 1.92TB NVMe SSD
+		1d78 5116  D5427 U.2 3.84TB NVMe SSD
+		1d78 5118  D5427 U.2 7.68TB NVMe SSD
+		1d78 8107  D5457 U.2 6.4TB NVMe SSD
+	1513  DERA MENG NVMe Controller
+		1d78 6015  D6456 HHHL 3.2TB NVMe SSD
+		1d78 6016  D6436 HHHL 3.84TB NVMe SSD
+		1d78 6017  D6456 HHHL 6.4TB NVMe SSD
+		1d78 6018  D6436 HHHL 7.68TB NVMe SSD
+		1d78 6105  D6457 U.2 3.2TB NVMe SSD
+		1d78 6106  D6437 U.2 3.84TB NVMe SSD
+		1d78 6107  D6457 U.2 6.4TB NVMe SSD
+		1d78 6108  D6437 U.2 7.68TB NVMe SSD
+		1d78 6115  D6456 U.2 3.2TB NVMe SSD
+		1d78 6116  D6436 U.2 3.84TB NVMe SSD
+		1d78 6117  D6456 U.2 6.4TB NVMe SSD
+		1d78 6118  D6436 U.2 7.68TB NVMe SSD
+	1515  DERA EMEI NVMe Controller
+		1d78 7002  D7436 HHHL 1.92TB NVMe SSD
+		1d78 7003  D7456 HHHL 1.6TB NVMe SSD
+		1d78 7004  D7436 HHHL 3.84TB NVMe SSD
+		1d78 7005  D7456 HHHL 3.2TB NVMe SSD
+		1d78 7007  D7456 HHHL 6.4TB NVMe SSD
+		1d78 7008  D7436 HHHL 7.68TB NVMe SSD
+		1d78 7009  D7456 HHHL 12.8TB NVMe SSD
+		1d78 700a  D7436 HHHL 15.36TB NVMe SSD
+		1d78 7102  D7436 U.2 15mm 1.92TB NVMe SSD
+		1d78 7103  D7456 U.2 15mm 1.6TB NVMe SSD
+		1d78 7104  D7436 U.2 15mm 3.84TB NVMe SSD
+		1d78 7105  D7456 U.2 15mm 3.2TB NVMe SSD
+		1d78 7107  D7456 U.2 15mm 6.4TB NVMe SSD
+		1d78 7108  D7436 U.2 15mm 7.68TB NVMe SSD
+		1d78 7109  D7456 U.2 15mm 12.8TB NVMe SSD
+		1d78 710a  D7436 U.2 15mm 15.36TB NVMe SSD
+		1d78 7202  Aliflash V2 U.2 15mm 1.92TB NVMe SSD
+		1d78 7204  Aliflash V2 U.2 15mm 3.84TB NVMe SSD
+		1d78 7208  Aliflash V2 U.2 15mm 7.68TB NVMe SSD
+1d79  Transcend Information, Inc.
 1d7c  Aerotech, Inc.
 # Fiber-optic HyperWire motion control bus from Aerotech.
 	0001  HyperWire Adapter
@@ -24205,11 +24794,14 @@
 	0101  Codensity D400 SSD
 	0102  Codensity D408 PCIe Gen4 NVMe SSD
 	0202  Codensity T408 Video Encoding-Decoding Accelerator
+	0401  Quadra Video Processing Unit (VPU)
 # nee Fuzhou Rockchip Electronics Co., Ltd
 1d87  Rockchip Electronics Co., Ltd
 	0100  RK3399 PCI Express Root Port
 	1808  RK1808 Neural Network Processor Card
+	3528  RK3528 PCI Express Root Port
 	3566  RK3568 Remote Signal Processor
+	3588  RK3588
 1d89  YEESTOR Microelectronics Co., Ltd
 	0280  PCIe NVMe SSD
 1d8f  Enyx
@@ -24250,18 +24842,25 @@
 	0002  Colossus GC1 [S1]
 1d97  Shenzhen Longsys Electronics Co., Ltd.
 	2263  SM2263EN/SM2263XT-based OEM SSD
-1d9b  Facebook, Inc.
+# nee Facebook, Inc.
+1d9b  Meta Platforms, Inc.
 	0010  Networking DOM Engine
 	0011  IO Bridge
 1da1  Teko Telecom S.r.l.
 1da2  Sapphire Technology Limited
 	e26a  Radeon R7 250
+	e445  Sapphire Radeon RX 6700
 1da3  Habana Labs Ltd.
 	0001  HL-1000 AI Inference Accelerator [Goya]
+# PCIe accelerator card for Deep Learning inference tasks
+	0030  Greco AI Inference Accelerator
 # PCIe accelerator card for Deep Learning training tasks
 	1000  HL-2000 AI Training Accelerator [Gaudi]
 # PCIe accelerator card for Deep Learning training tasks with secured firmware
 	1010  HL-2000 AI Training Accelerator [Gaudi secured]
+# PCIe accelerator card for Deep Learning training tasks
+	1020  Gaudi2 AI Training Accelerator
+1da8  Corigine, Inc.
 1dad  Fungible
 1db2  ATP ELECTRONICS INC
 1db7  Phytium Technology Co., Ltd.
@@ -24269,6 +24868,7 @@
 	dc21  VPU Controller [X100 Series]
 	dc22  DC Controller [X100 Series]
 	dc23  I2S/DMA Controller [X100 Series]
+	dc24  NPU Controller [X100 Series]
 	dc26  SATA Controller [X100 Series]
 	dc27  USB Controller [X100 Series]
 	dc29  NANDFLASH Controller [X100 Series]
@@ -24287,16 +24887,27 @@
 	dc3a  SWITCH Controller [X100 Series]
 	dc3c  GPU_DMA Controller [X100 Series]
 1dbb  NGD Systems, Inc.
+1dbe  INNOGRIT Corporation
+	5636  NVMe DC SSD IG5636
+		1dbe 0001  DONGTING-N1 DC SSD U.2
+		1dbe 1001  DONGHU-Z1 DC ZNS SSD U.2
+	5638  NVMe DC SSD IG5638
+		1dbe 2001  DONGTING-N1 DC SSD U.2
+		1dbe 3001  DONGHU-Z1 DC ZNS SSD U.2
 1dbf  Guizhou Huaxintong Semiconductor Technology Co., Ltd
 	0401  StarDragon4800 PCI Express Root Port
+1dc2  Alco Digital Devices Limited
 1dc5  FADU Inc.
 1dcd  Liqid Inc.
 1dcf  Beijing Sinead Technology Co., Ltd.
 1dd3  Sage Microelectronics Corp.
-1dd8  Pensando Systems
+1dd4  Swissbit AG
+1dd8  AMD Pensando Systems
 	0002  DSC2 Elba Upstream Port
 		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
 		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
 	1000  DSC Capri Upstream Port
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
@@ -24321,6 +24932,8 @@
 		1dd8 4014  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
 		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
 	1002  DSC Ethernet Controller
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
@@ -24334,6 +24947,8 @@
 		1dd8 4014  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
 		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
 	1003  DSC Ethernet Controller VF
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
@@ -24347,6 +24962,8 @@
 		1dd8 4014  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
 		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
 	1004  DSC Management Controller
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
@@ -24360,12 +24977,18 @@
 		1dd8 4014  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
 		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
 	1005  DSC NVMe Controller
 		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
 		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
 	1006  DSC NVMe Controller VF
 		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
 		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
 	1007  DSC Storage Accelerator
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
@@ -24379,10 +25002,40 @@
 		1dd8 4014  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
 		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
+	1009  DSC Ethernet Controller UPT
+		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
+	100a  DSC Serial Port Controller
+		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
+	100b  DSC vDPA Network Device VF
+		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
+	100c  DSC PDS Core Management
+		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
+	100d  DSC Virtio Network Device VF
+		1dd8 5001  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 5003  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card
+		1dd8 500a  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2
+		1dd8 500b  DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU
 1ddd  Thorlabs
 1de0  Groq
-# rename due to conflict with a term in use by another company for an entirely different product.
-	0000  TSP100 Tensor Streaming Processor
+	0000  TSP [GroqChip]
+		1de0 0000  GC1-010X-ES [GroqCard]
+		1de0 c005  GC1-010B [GroqCard]
+		1de0 c006  GC1-0109 [GroqCard]
+		1de0 c007  GC1-0100 [GroqCard]
 1de1  Tekram Technology Co.,Ltd.
 	0391  TRM-S1040 [DC-315 / DC-395 series]
 	2020  DC-390 Series SCSI Adapter [AMD Am53C974]
@@ -24480,9 +25133,17 @@
 	0001  ml605
 	0002  alst4
 	0003  alst4x
+1df8  V&G Information System Co.,Ltd
+	c000  DC NVMe SSD
+		1df8 c600  Enterprise U.2 NVMe SSD
+	d000  PC NVMe SSD
+		1df8 d100  M.2 NVMe SSD
+		1df8 d201  M.2 NVMe SSD
+		1df8 d600  M.2 NVMe SSD
 1dfc  JSC NT-COM
 	1181  TDM 8 Port E1/T1/J1 Adapter
 1e0f  KIOXIA Corporation
+	0001  NVMe SSD Controller BG4
 	0007  NVMe SSD Controller Cx6
 		1028 2078  DC NVMe CD6 RI 960GB
 		1028 2079  DC NVMe CD6 RI 1.92TB
@@ -24517,6 +25178,9 @@
 		1028 2190  DC NVMe CD7 RI 7.68TB
 		1028 2191  DC NVMe SED CD7 RI 15.36TB
 		1028 2192  DC NVMe CD7 RI 15.36TB
+		1028 2193  NVMe CD7 E3.S 1.92TB
+		1028 2194  NVMe CD7 E3.S 3.84TB
+		1028 2195  NVMe CD7 E3.S 7.68TB
 1e17  Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
 1e24  Squirrels Research Labs
 	0101  Acorn CLE-101
@@ -24547,7 +25211,9 @@
 # https://www.medion.com/
 1e39  MEDION AG
 1e3b  DapuStor Corporation
-	0600  NVMe SSD Controller DPU600
+	0600  NVMe SSD Controller DP600
+		1e3b 0010  Enterprise NVMe SSD U.2 3.84TB (R5102)
+		1e3b 0013  Enterprise NVMe SSD U.2 3.20TB (R5302)
 		1e3b 0030  Enterprise NVMe SSD U.2 3.84TB (J5100)
 		1e3b 0031  Enterprise NVMe SSD U.2 7.68TB (J5100)
 		1e3b 0032  Enterprise NVMe SSD U.2 15.36TB (J5100)
@@ -24556,8 +25222,14 @@
 		1e3b 0035  Enterprise NVMe SSD U.2 12.80TB (J5300)
 		1e3b 0036  Enterprise NVMe SSD AIC 7.68TB (J5110)
 		1e3b 0037  Enterprise NVMe SSD AIC 6.40TB (J5310)
+		1e3b 0038  Enterprise NVMe SSD U.2 3.84TB (J5100D)
+		1e3b 0039  Enterprise NVMe SSD U.2 7.68TB (J5100D)
+		1e3b 003b  Enterprise NVMe SSD U.2 3.20TB (J5300D)
+		1e3b 003c  Enterprise NVMe SSD U.2 6.40TB (J5300D)
 		1e3b 003e  Enterprise NVMe SSD AIC 3.84TB (J5110)
 		1e3b 003f  Enterprise NVMe SSD AIC 3.20TB (J5310)
+		1e3b 004c  Enterprise NVMe SSD U.2 QDP 1.92TB (J5100)
+		1e3b 004d  Enterprise NVMe SSD U.2 QDP 1.60TB (J5300)
 		1e3b 0050  Enterprise NVMe SSD U.2 3.84TB (R5100)
 		1e3b 0051  Enterprise NVMe SSD U.2 7.68TB (R5100)
 		1e3b 0052  Enterprise NVMe SSD U.2 15.36TB (R5100)
@@ -24570,13 +25242,17 @@
 		1e3b 0061  Enterprise NVMe SSD U.2 7.68TB (R5100D)
 		1e3b 0063  Enterprise NVMe SSD U.2 3.20TB (R5300D)
 		1e3b 0064  Enterprise NVMe SSD U.2 6.40TB (R5300D)
+		1e3b 0066  Enterprise NVMe SSD U.2 3.84TB (R5101D)
+		1e3b 0069  Enterprise NVMe SSD U.2 3.20TB (R5301D)
+		1e3b 006c  Enterprise NVMe SSD U.2 1.92TB (R5101)
+		1e3b 006d  Enterprise NVMe SSD U.2 1.60TB (J5301)
 		1e3b 00f0  Enterprise NVMe SSD U.2 0.40TB (X2900)
 		1e3b 00f1  Enterprise NVMe SSD U.2 0.80TB (X2900)
 		1e3b 00f2  Enterprise NVMe SSD U.2 1.60TB (X2900)
 		1e3b 00f3  Enterprise NVMe SSD U.2 3.20TB (X2900)
 		1e3b 00f5  Enterprise NVMe SSD U.2 0.40TB (X2900P)
 		1e3b 00f6  Enterprise NVMe SSD U.2 0.80TB (X2900P)
-	1098  Haishen NVMe SSD
+	1098  Haishen3 NVMe SSD
 		1e3b 0001  Enterprise NVMe SSD U.2 0.8TB (H2100)
 		1e3b 0002  Enterprise NVMe SSD U.2 0.96TB (H2200)
 		1e3b 0004  Enterprise NVMe SSD U.2 1.6TB (H2100)
@@ -24607,8 +25283,11 @@
 		1e3b 008a  Enterprise NVMe SSD HHHL 0.8TB (H3900)
 		1e3b 008b  Enterprise NVMe SSD HHHL 1.6TB (H3900)
 		1e3b 0091  Enterprise NVMe SSD HHHL 0.75TB (H3900)
+	1333  Haishen5 NVMe SSD
 1e3d  Burlywood, Inc
+1e44  Valve Software
 1e49  Yangtze Memory Technologies Co.,Ltd
+	0021  ZHITAI TiPro5000 NVMe SSD
 	0041  ZHITAI TiPro7000
 # YMTC PCIe/NVMe SSD
 	1013  PC210
@@ -24623,6 +25302,7 @@
 # Associative Processing Unit (APU)
 	0010  APU [Leda]
 		1e4c 0120  SE120
+1e50  IP3 Tech (HK) Limited
 1e57  Beijing Panyi Technology Co., Ltd
 	0100  The device has already been deleted.
 		0000 0100  PY8800 64GB Accelerator
@@ -24633,35 +25313,45 @@
 	7010  AI controller A7010
 1e60  Hailo Technologies Ltd.
 	2864  Hailo-8 AI Processor
+1e67  Untether AI
+	0002  runAI200 AI Inference Accelerator
 1e68  Jiangsu Xinsheng Intelligent Technology Co., Ltd
 1e6b  Axiado Corp.
 1e7b  Dataland
 1e7c  Brainchip Inc
 	bca1  AKD1000 Neural Network Coprocessor [Akida]
+1e7e  Pliops
+	9034  Pliops Extreme Data Processor [XDP1.0]
+1e7f  Jiangsu Huacun Elec. Tech. Co., Ltd.
 1e81  Ramaxel Technology(Shenzhen) Limited
 	1203  NVMe SSD Controller UHXXXa series
 		1e81 a121  NVMe SSD UHXXXa series U.2 960GB
 		1e81 a122  NVMe SSD UHXXXa series U.2 1920GB
-		1e81 a123  NVMe SSD UHXXXa series U.2 3840GB 
-		1e81 a124  NVMe SSD UHXXXa series U.2 7680GB 
+		1e81 a123  NVMe SSD UHXXXa series U.2 3840GBÂ 
+		1e81 a124  NVMe SSD UHXXXa series U.2 7680GBÂ 
 		1e81 a125  NVMe SSD UHXXXa series U.2 15360GB
-		1e81 a211  NVMe SSD UHXXXa series U.2 800GBÂ 
-		1e81 a212  NVMe SSD UHXXXa series U.2 1600GB 
-		1e81 a213  NVMe SSD UHXXXa series U.2 3200GB 
-		1e81 a214  NVMe SSD UHXXXa series U.2 6400GB 
+		1e81 a211  NVMe SSD UHXXXa series U.2 800GBÃ‚Â 
+		1e81 a212  NVMe SSD UHXXXa series U.2 1600GBÂ 
+		1e81 a213  NVMe SSD UHXXXa series U.2 3200GBÂ 
+		1e81 a214  NVMe SSD UHXXXa series U.2 6400GBÂ 
+		1e81 f123  NVMe SSD TP6500 series U.2 3840GB
+1e83  Huaqin Technology Co.Ltd
 1e85  Heitec AG
 1e89  ID Quantique SA
 	0002  Quantis-PCIe-40M
 	0003  Quantis-PCIe-240M
+1e93  Beijing Bytedance Network Technology Co., Ltd.
 # aka SED Systems
 1e94  Calian SED
 1e95  Solid State Storage Technology Corporation
-	1002  NVMe Datacenter LJ1 SSD [3DNAND, Rainier Controller]
+	1002  NVMe SSD [3DNAND] 2.5" U.2 (LJ1)
+		1e95 1101  NVMe SSD [3DNAND] 2.5" U.2 (LJ1)
 		1ea0 5636  TP1500 Series U.2 NVMe Datacenter SSD
 1e9f  Lynxi Technologies Co., Ltd.
 1ea0  Tencent Technology (Shenzhen) Company Limited
 	2a16  Cloud Intelligent Inference Controller
 	2a18  Video Transcode Controller
+	2a20  Cloud Intelligent Inference and Training Controller
 1ea7  Intelliprop, Inc
 	223a  Typhon+ PCIe to Gen-Z Bridge
 	224a  IPA-PE224A CXL to Gen-Z Bridge [Sphinx]
@@ -24678,6 +25368,18 @@
 	3401  SSD Contoller
 1ebd  EMERGETECH Company Ltd.
 	0101  Seirios 2063 Video Codec
+1ec8  Innosilicon Co Ltd
+	8800  Fantasy I
+		1ec8 12a2  Fantasy I Device
+	9800  Fantasy II
+		1ec8 12a2  Fantasy II Device
+	9802  Fantasy II
+		1ec8 12a2  Fantasy II Device
+	9804  Fantasy II
+		1ec8 12a2  Fantasy II Device
+1ec9  Wingtech Group(HongKong)Limited
+1eca  Lightmatter
+	0000  Envise-B
 1ed2  FuriosaAI, Inc.
 	0000  Warboy
 1ed3  Yeston
@@ -24691,16 +25393,48 @@
 	0121  MTT S1000M
 	0122  MTT S1000
 	0123  MTT S2000
+	01ff  MTT HDMI/DP Audio
+	0200  MTT S80 Engineering Sample
+	0201  MTT S80
+	0202  MTT S70
+	0203  MTT S60
+	0211  G2D40
+	0221  G2S80
+	0222  MTT S3000
+	0223  G2S4
+	0251  G2N10
+	02ff  MTT HDMI/DP Audio
 1ed8  Digiteq Automotive
 	0101  FG4 PCIe Frame Grabber
 1ed9  Myrtle.ai
+1ee1  Suzhou Kuhan Information Technologies
+	0050  Aurora NVMe SSD Controller
+		1ee1 0009  Airglow A430 NVMe SSD U.2 1.6TB
+		1ee1 000a  Airglow A430 NVMe SSD U.2 3.2TB
+		1ee1 000b  Airglow A430 NVMe SSD U.2 4.8TB
+1ee4  PETAIO INC
+	1180  P8118 U.2 Single Port SSD
 1ee9  SUSE LLC
 1eec  Viscore Technologies Ltd
 	0102  VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
 	1eec  VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
-1eed  Xiangdixian Computing Technology (Chongqing) Ltd.
-	0100  XDX P100 VGA controller
-	0101  XDX P101 High Definition Audio Controller
+1eed  XDX Computing Technology Ltd.
+	10a0  XDX110 Graphic/VGA Controller
+	10a1  XDX110 Audio Controller
+	1140  XDX120 Graphic/VGA Controller
+	1141  XDX120 Audio Controller
+	1320  XDX150 Graphic/VGA Controller
+	1321  XDX150 Audio Controller
+	13c0  XDX160 Graphic/VGA Controller
+	13c1  XDX160 Audio Controller
+	13d0  XDX161 Graphic/VGA Controller
+	13d1  XDX161 Audio Controller
+	1500  XDX180 Graphic/VGA Controller
+	1501  XDX180 Audio Controller
+	15a0  XDX190 Graphic/VGA Controller
+	15a1  XDX190 Audio Controller
+1ef6  GrAI Matter Labs
+1ef7  Shenzhen Gunnir Technology Development Co., Ltd
 1efb  Flexxon Pte Ltd
 1f02  Beijing Dayu Technology
 1f03  Shenzhen Shichuangyi Electronics Co., Ltd
@@ -24711,6 +25445,23 @@
 	5220  IG5220-Based NVMe SSD
 	5236  IG5236-Based NVMe SSD
 	5636  IG5636-Based NVMe SSD
+1f0f  NebulaMatrix Technology
+	1041  D1055AS vDPA Ethernet Controller
+		1f0f 0001  D1055AS vDPA Ethernet Controller
+	1042  D1055AS vDPA Storage Controller
+		1f0f 0001  D1055AS vDPA Storage Controller
+	1220  D1055AS Ethernet Controller
+	1221  D1055AS Ethernet Controller
+	1222  D1055AS Ethernet Controller
+	1223  D1055AS Ethernet Controller
+	1600  M16104 Family
+	1601  M16104 Family Virtual Function
+	2022  D1055AS PCI Express Switch Upstream Port
+	9088  D1055AS PCI Express Switch Downstream Port
+1f24  xFusion Digital Technologies Co., Ltd.
+	1058  EP500/EP600 NVMe SSD
+		1f24 1114  EP500 NVMe SSD(RI)
+		1f24 1115  EP600 NVMe SSD(MU)
 1f2f  China Mobile (Hangzhou) Information Technology Co.Ltd.
 	1513  DERA MENG NVMe Controller
 		1f2f 6113  KM660 U.2 1.6TB NVMe SSD
@@ -24718,8 +25469,57 @@
 		1f2f 6115  KM660 U.2 3.2TB NVMe SSD
 		1f2f 6116  KM560 U.2 3.84TB NVMe SSD
 		1f2f 6118  KM560 U.2 7.68TB NVMe SSD
+1f3f  3SNIC Ltd
+	2100  SSSHBA SAS/SATA HBA
+		1f3f 0120  HBA 32 Ports
+		1f3f 0125  HBA 40 Ports
+		1f3f 0180  HBA 16 Ports
+		1f3f 0185  HBA 8 Ports
+	2200  SSSRAID RAID controller
+		1f3f 0185  RAID Controller 16 Ports with 2G Cache
+		1f3f 01a1  RAID Controller 40 Ports with 2G Cache
+		1f3f 01a4  RAID Controller 16 Ports with 4G Cache
+		1f3f 01a8  RAID Controller 32 Ports with 4G Cache
+		1f3f 01ad  RAID Controller 40 Ports with 4G Cache
+	9001  SSSNIC Ethernet VF
+		1f3f 1000  Ethernet VF
+	9002  SSSNIC Ethernet VF Hyper-V
+		1f3f 1000  Ethernet VF Hyper-V
+	9003  SSSNIC Ethernet SDI VF
+		1f3f 1000  Ethernet SDI VF
+	9004  SSSNIC Ethernet SDI VF Hyper-V
+		1f3f 1000  Ethernet SDI VF Hyper-V
+	9008  SSSFC VF
+		1f3f 1000  3SFC VF
+	9009  SSSFC VF Hyper-V
+		1f3f 1000  3SFC VF Hyper-V
+	9010  SSSFC FC Controller
+		1f3f 0041  Dual Port 16GE FC to PCIe Gen4 x16 Adapter
+		1f3f 0061  Dual Port 32GE FC to PCIe Gen4 x16 Adapter
+	9020  SSSNIC Ethernet Network Adapter
+		1f3f 0051  Dual Port 25GE Ethernet Network Adapter
+		1f3f 0052  Quad Port 25GE Ethernet Network Adapter
+		1f3f 00a1  Dual Port 100GE Ethernet Network Adapter
+	9030  SSSNIC IPU
+		1f3f 0051  Dual Port 25GE IPU
+	9031  SSSNIC SDI5.0
+		1f3f 0051  Dual Port 25GE SDI5.0lite
+		1f3f 00a1  Dual Port 100GE SDI5.0
+	9032  SSSNIC SDI5.1
+		1f3f 00a1  Dual Port 100GE SDI5.1
+1f40  Netac Technology Co.,Ltd
+1f44  VVDN Technologies Private Limited
+1f4b  Axera Semiconductor Co., Ltd
+1f52  MangoBoost Inc.
+1f60  Accelecom
+	0001  XELE-NIC 25K5
+	0054  XELE-NIC 25K5
+1faa  Hexaflake (Shanghai) Information Technology Co., Ltd.
+	0c10  Compass C10 PF
+	0c11  Compass C10 VF
 1fab  Unifabrix Ltd.
 	0000  Nexus Alpha IVPU
+	0100  NoX Gamma
 # nee Tumsan Oy
 1fc0  Ascom (Finland) Oy
 	0300  E2200 Dual E1/Rawpipe Card
@@ -24808,9 +25608,11 @@
 	5008  U-SNS8154P3 NVMe SSD
 	500d  OM3PDP3 NVMe SSD
 	500e  SNVS2000G [NV1 NVMe PCIe SSD 2TB]
+	5012  DC1500M U.2 Enterprise SSD
 270b  Xantel Corporation
 270f  Chaintech Computer Co. Ltd
 2711  AVID Technology Inc.
+2782  Emdoor Digital Technology Co., Ltd
 2955  Connectix Virtual PC
 	6e61  OHCI USB 1.1 controller
 2a15  3D Vision(???)
@@ -25465,9 +26267,11 @@
 	1800  CooVOX TDM BRI Module
 6766  Glenfly Tech Co., Ltd.
 	3d00  Arise-GT-10C0
-	3d02  Arise 1020
+	3d02  Arise1020
+	3d03  Arise-GT-1040
+	3d04  Arise1010
 	3d40  Arise-GT-10C0 High Definition Audio Controller
-	3d41  Arise 1020 High Definition Audio Controller
+	3d41  Arise1020 High Definition Audio Controller
 6899  ZT Systems
 # nee Qumranet
 6900  Red Hat, Inc.
@@ -25478,6 +26282,7 @@
 7284  HT OMEGA Inc.
 7357  IOxOS Technologies SA
 	7910  7910 [Althea]
+7377  Shenzhen Colorful Yugong Technology and Development Co.
 7401  EndRun Technologies
 	e100  PTP3100 PCIe PTP Slave Clock
 7470  TP-LINK Technologies Co., Ltd.
@@ -25485,6 +26290,7 @@
 	0082  HQ SSD 1TB
 	0083  HQ SSD 2TB M.2 NVMe
 7604  O.N. Electronic Co Ltd.
+78c0  Herrick Technology Laboratories, Inc. [HTL]
 7bde  MIDAC Corporation
 7fed  PowerTV
 8008  Quancom Electronic GmbH
@@ -25779,6 +26585,7 @@
 # uninitialized SRCU32 RAID Controller
 	061f  80303 I/O Processor
 	0684  H470 Chipset LPC/eSPI Controller
+	0685  Z490 Chipset LPC/eSPI Controller
 	0687  Q470 Chipset LPC/eSPI Controller
 	068d  Comet Lake LPC Controller
 	06a3  Comet Lake PCH SMBus Controller
@@ -25789,6 +26596,8 @@
 	06ab  Comet Lake PCH Serial IO SPI Controller #1
 	06ac  Comet Lake PCI Express Root Port #21
 	06b0  Comet Lake PCI Express Root Port #9
+	06ba  Comet Lake PCI Express Root Port #1
+	06bb  Comet Lake PCI Express Root Port #4
 	06bd  Comet Lake PCIe Port #6
 	06c0  Comet Lake PCI Express Root Port #17
 	06c8  Comet Lake PCH cAVS
@@ -26208,6 +27017,14 @@
 	0960  80960RP (i960RP) Microprocessor/Bridge
 	0962  80960RM (i960RM) Bridge
 	0964  80960RP (i960RP) Microprocessor/Bridge
+	0998  Ice Lake IEH
+	09a2  Ice Lake Memory Map/VT-d
+	09a3  Ice Lake RAS
+	09a4  Ice Lake Mesh 2 PCIe
+	09a6  Ice Lake MSM
+	09a7  Ice Lake PMON MSM
+	09ab  RST VMD Managed Controller
+	09c4  PAC with Intel Arria 10 GX FPGA
 	0a03  Haswell-ULT Thermal Subsystem
 	0a04  Haswell-ULT DRAM Controller
 		17aa 2214  ThinkPad X240
@@ -26281,8 +27098,10 @@
 		1028 1fe7  Express Flash NVMe 3.2TB 2.5" U.2 (P4600)
 		1028 1fe8  Express Flash NVMe 2.0TB HHHL AIC (P4600)
 		1028 1fe9  Express Flash NVMe 4.0TB HHHL AIC (P4600)
+	0b00  Ice Lake CBDMA [QuickData Technology]
 	0b26  Thunderbolt 4 Bridge [Goshen Ridge 2020]
 	0b27  Thunderbolt 4 USB Controller [Goshen Ridge 2020]
+	0b2b  PAC with Intel Stratix 10 SX FPGA [FPGA PAC D5005]
 	0b60  NVMe DC SSD [3DNAND, Sentinel Rock Controller]
 		1028 2060  NVMe SED MU U.2 1.6TB (P5600)
 		1028 2061  NVMe SED MU U.2 3.2TB (P5600)
@@ -26306,8 +27125,14 @@
 		8086 8d08  NVMe Datacenter SSD [3DNAND] VE 2.5" U.2 (P5316)
 		8086 8d1d  NVMe Datacenter SSD [3DNAND] VE E1.L 9.5/18mm (P5316)
 		8086 c008  NVMe Datacenter SSD [3DNAND] SE U.2 15mm (P5530)
-	0bd0  Ponte Vecchio 2T
-	0bd5  Ponte Vecchio 1T
+	0bd0  Ponte Vecchio XL (2 Tile)
+	0bd5  Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1550]
+	0bd6  Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1550]
+	0bd7  Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1350]
+	0bd8  Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1350]
+	0bd9  Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100]
+	0bda  Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100]
+	0bdb  Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100]
 	0be0  Atom Processor D2xxx/N2xxx Integrated Graphics Controller
 	0be1  Atom Processor D2xxx/N2xxx Integrated Graphics Controller
 		105b 0d7c  D270S/D250S Motherboard
@@ -26401,6 +27226,7 @@
 	0d36  Crystal Well Integrated Graphics Controller
 	0d4c  Ethernet Connection (11) I219-LM
 	0d4d  Ethernet Connection (11) I219-V
+		8086 0d4d  Ethernet Connection (11) I219-V
 	0d4e  Ethernet Connection (10) I219-LM
 	0d4f  Ethernet Connection (10) I219-V
 	0d53  Ethernet Connection (12) I219-LM
@@ -26409,6 +27235,7 @@
 		8086 0000  Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
 		8086 0001  Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
 	0d9f  Ethernet Controller (2) I225-IT
+	0dcd  Ethernet Connection C825-X
 	0dd2  Ethernet Network Adapter I710
 		1137 0000  I710T4LG 4x1 GbE RJ45 PCIe NIC
 		1137 02e3  I710T4LG 4x1 GbE RJ45 PCIe NIC
@@ -26420,6 +27247,7 @@
 	0dd5  Ethernet Adaptive Virtual Function
 	0dda  Ethernet Connection X722 for 10GbE SFP+
 		1bd4 0076  Ethernet Connection F102IX722 for 10GbE SFP
+		1bd4 0082  Ethernet Connection F102IX722 for 10GbE SFP
 	0e00  Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
 		1028 04f7  Xeon E5 v2 on PowerEdge R320 server
 		15d9 066b  X9SRL-F
@@ -27127,7 +27955,7 @@
 	1107  PRO/1000 MF Server Adapter (LX)
 	1130  82815 815 Chipset Host Bridge and Memory Controller Hub
 		1025 1016  Travelmate 612 TX
-		1043 8027  TUSL2-C Mainboard
+		1043 8027  CUSL2-C/TUSL2-C Mainboard
 		104d 80df  Vaio PCG-FX403
 		8086 4532  Desktop Board D815EEA2/D815EFV
 		8086 4557  D815EGEW Mainboard
@@ -27343,6 +28171,7 @@
 	1234  430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)
 	1235  430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP)
 	1237  440FX - 82441FX PMC [Natoma]
+		01de fffe  Propolis Virtual 440FX
 		1af4 1100  Qemu virtual machine
 	1239  82371FB PIIX IDE Interface
 	123b  82380PB PCI to PCI Docking Bridge
@@ -27357,6 +28186,8 @@
 	124e  Ethernet Connection E823-L/X557-AT 10GBASE-T
 	124f  Ethernet Connection E823-L 1GbE
 	1250  430HX - 82439HX TXC [Triton II]
+	125b  Ethernet Controller I226-LM
+	125c  Ethernet Controller I226-V
 	1360  82806AA PCI64 Hub PCI Bridge
 	1361  82806AA PCI64 Hub Controller (HRes)
 		8086 1361  82806AA PCI64 Hub Controller (HRes)
@@ -27449,6 +28280,8 @@
 		1bd4 001d  1G base-T QP EP014Ti1 Adapter
 		1bd4 0035  1G base-T QP EP014Ti1 Adapter
 		1bd4 0066  F014I350
+		1bd4 008a  F012I350
+		1bd4 008d  ENFI1100-T4
 		8086 0001  Ethernet Server Adapter I350-T4
 		8086 0002  Ethernet Server Adapter I350-T2
 		8086 0003  Ethernet Network Adapter I350-T4 for OCP NIC 3.0
@@ -27522,7 +28355,10 @@
 		1093 7706  Compact Vision System Ethernet Adapter
 		10a9 802c  UV300 BaseIO single-port GbE
 		10a9 802d  UV3000 BaseIO GbE Network
+		17aa 1059  I210 Gigabit Network Connection
 		17aa 1100  ThinkServer Ethernet Server Adapter
+		17aa 1509  I210 Gigabit Network Connection
+		17aa 404d  I210 PCIe 1Gb 1-Port RJ45 LOM
 		8086 0001  Ethernet Server Adapter I210-T1
 		8086 0002  Ethernet Server Adapter I210-T1
 	1536  I210 Gigabit Fiber Network Connection
@@ -27569,7 +28405,7 @@
 		8086 0001  Ethernet Server Bypass Adapter X520-SR2
 		8086 0002  Ethernet Server Bypass Adapter X520-LR2
 	1560  Ethernet Controller X540
-	1563  Ethernet Controller 10G X550T
+	1563  Ethernet Controller X550
 		1028 1fa8  Ethernet 10G 4P X550/I350 rNDC
 		1028 1fa9  Ethernet 10G 4P X550 rNDC
 		1137 02b2  X550-TX 10 Gig LOM
@@ -27629,6 +28465,7 @@
 		1bd4 0056  Ethernet Network Adapter X710-BM2 for OCP NIC 3.0
 		1bd4 0065  F102IX710
 		1bd4 0074  Ethernet Network Adapter X710-BM2 for lldp
+		1bd4 008b  F102IX710
 		8086 0000  Ethernet Converged Network Adapter X710
 		8086 0001  Ethernet Converged Network Adapter X710-4
 		8086 0002  Ethernet Converged Network Adapter X710-4
@@ -27754,8 +28591,11 @@
 		8086 0008  Ethernet Network Adapter OCP XXV710-1
 		8086 0009  Ethernet 25G 2P XXV710 Adapter
 		8086 000a  Ethernet 25G 2P XXV710 OCP
+		8086 000c  Ethernet Network Adapter XXV710-DA2 for OCP 3.0
+		8086 000d  Ethernet 25G 2P XXV710 OCP
 		8086 4001  Ethernet Network Adapter XXV710-2
 	1591  Ethernet Controller E810-C for backplane
+		8086 bcce  Ethernet Controller E810-C for Intel(R) Open FPGA Stack
 	1592  Ethernet Controller E810-C for QSFP
 		1137 02bf  E810CQDA2 2x100 GbE QSFP28 PCIe NIC
 		193d 1050  NIC-ETH1060F-LP-2P 2x100GbE Ethernet PCIe Card
@@ -27773,6 +28613,7 @@
 		8086 000f  Ethernet Network Adapter E810-C-Q2T
 		8086 0010  Ethernet 100G 2P E810-C-stg Adapter
 		8086 0011  Ethernet Network Adapter E810-C-Q1 for OCP3.0
+		8086 0012  Ethernet 100G 2P E810-C-st Adapter
 	1593  Ethernet Controller E810-C for SFP
 		1137 02c3  E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC
 		1137 02e9  E810XXVDA4TG 4x25/10 GbE SFP28 PCIe NIC
@@ -27796,10 +28637,13 @@
 	159a  Ethernet Controller E810-XXV for QSFP
 	159b  Ethernet Controller E810-XXV for SFP
 		1137 02be  E810XXVDA2 2x25/10 GbE SFP28 PCIe NIC
+# NIC-ETH660F-3S-2P 2x25GbE SFP28 Network Adapter for OCP 3.0
+		193d 1085  NIC-ETH660F-3S-2P
 		1bd4 0057  Ethernet Network Adapter E810-XXVAM2
 		1bd4 0058  Ethernet Network Adapter E810-XXVAM2 for OCP 3.0
 		1bd4 006e  Ethernet Network Adapter E810-XXVAM2 for BD
-		1eec 0102  VSE250241E Dual-port 10Gb/25Gb Ethernet PCIe
+		1bd4 0083  Ethernet Network Adapter E810-XXVAM2 for lldp
+		1eec 0102  VSE-225-41E Dual-port 10Gb/25Gb Etherent PCIe
 		8086 0001  Ethernet 25G 2P E810-XXV OCP
 		8086 0002  Ethernet 25G 2P E810-XXV Adapter
 		8086 0003  Ethernet Network Adapter E810-XXV-2
@@ -27920,6 +28764,7 @@
 		8086 000a  Ethernet Network Adapter X710-T4L for OCP 3.0
 		8086 000b  Ethernet Network Adapter X710-T2L for OCP 3.0
 		8086 000c  Ethernet Network Adapter X710-T2L for OCP 3.0
+		8086 000d  Ethernet 10G 2P X710-T2L-t OCP
 		8086 000f  Ethernet Network Adapter X710-T2L for OCP 3.0
 		8086 4009  Ethernet Network Adapter X710-T2L
 		8086 4012  Ethernet Network Adapter X710-T4L for OCP 3.0
@@ -27964,6 +28809,12 @@
 	163d  Broadwell-U Integrated Graphics
 	163e  Broadwell-U Integrated Graphics
 	1889  Ethernet Adaptive Virtual Function
+	188a  Ethernet Connection E823-C for backplane
+	188b  Ethernet Connection E823-C for QSFP
+	188c  Ethernet Connection E823-C for SFP
+		1028 0abd  Ethernet Connection 25G 4P E823-C LOM
+	188d  Ethernet Connection E823-C/X557-AT 10GBASE-T
+	188e  Ethernet Connection E823-C 1GbE
 	1890  Ethernet Connection E822-C for backplane
 	1891  Ethernet Connection E822-C for QSFP
 	1892  Ethernet Connection E822-C for SFP
@@ -27999,6 +28850,7 @@
 		17aa 382a  B51-80 Laptop
 	1908  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 	1909  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x4)
+	190b  HD Graphics 510
 	190c  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 		1028 06d6  Latitude 7275 tablet
 		1028 06e6  Latitude 11 5175 2-in-1
@@ -28032,6 +28884,7 @@
 		1028 06e6  Latitude 11 5175 2-in-1
 	191f  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 	1921  HD Graphics 520
+	1923  HD Graphics 535
 	1926  Iris Graphics 540
 	1927  Iris Graphics 550
 	192b  Iris Graphics 555
@@ -28119,6 +28972,7 @@
 	1a1c  Ethernet Connection (17) I219-LM
 	1a1d  Ethernet Connection (17) I219-V
 	1a1e  Ethernet Connection (16) I219-LM
+		1028 0b10  Precision 3571
 	1a1f  Ethernet Connection (16) I219-V
 	1a21  82840 840 [Carmel] Chipset Host Bridge (Hub A)
 	1a23  82840 840 [Carmel] Chipset AGP Bridge
@@ -28634,6 +29488,8 @@
 	2088  Sky Lake-E DDRIO Registers
 	208d  Sky Lake-E CHA Registers
 	208e  Sky Lake-E CHA Registers
+# Engineering sample GPU
+	2240  Larrabee
 	2241  Larrabee
 	2250  Xeon Phi coprocessor 5100 series
 	225c  Xeon Phi coprocessor SE10/7120 series
@@ -28742,7 +29598,7 @@
 		1028 00d8  Precision 530
 		1028 010e  Optiplex GX240
 		103c 126f  e-pc 40
-		1043 8027  TUSL2-C Mainboard
+		1043 8027  CUSL2-C/TUSL2-C Mainboard
 		104d 80df  Vaio PCG-FX403
 		147b 0505  BL7 motherboard
 		147b 0507  TH7II-RAID
@@ -28757,7 +29613,7 @@
 		1028 00d8  Precision 530
 		1028 010e  Optiplex GX240
 		103c 126f  e-pc 40
-		1043 8027  TUSL2-C Mainboard
+		1043 8027  CUSL2-C/TUSL2-C Mainboard
 		104d 80df  Vaio PCG-FX403
 		147b 0505  BL7 motherboard
 		147b 0507  TH7II-RAID
@@ -28771,7 +29627,7 @@
 		1028 00d8  Precision 530
 		1028 010e  Optiplex GX240
 		103c 126f  e-pc 40
-		1043 8027  TUSL2-C Mainboard
+		1043 8027  CUSL2-C/TUSL2-C Mainboard
 		104d 80df  Vaio PCG-FX403
 		147b 0505  BL7 motherboard
 		147b 0507  TH7II-RAID
@@ -28785,6 +29641,7 @@
 		1028 00d8  Precision 530
 		103c 126f  e-pc 40
 		104d 80df  Vaio PCG-FX403
+		11d4 5340  AD1885 AC97 codec
 		1462 3370  STAC9721 AC
 		147b 0505  BL7 motherboard
 		147b 0507  TH7II-RAID
@@ -28859,7 +29716,7 @@
 		1028 00d8  Precision 530
 		1028 010e  Optiplex GX240
 		103c 126f  e-pc 40
-		1043 8027  TUSL2-C Mainboard
+		1043 8027  CUSL2-C/TUSL2-C Mainboard
 		147b 0505  BL7 motherboard
 		147b 0507  TH7II-RAID
 		15d9 3280  Supermicro P4SBE Mainboard
@@ -29585,6 +30442,7 @@
 	25d4  5000V Chipset Memory Controller Hub
 		15d9 8680  X7DVL-E-O motherboard
 	25d8  5000P Chipset Memory Controller Hub
+		103c 31fd  ProLiant DL360 G5
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	25e2  5000 Series Chipset PCI Express x4 Port 2
@@ -29595,27 +30453,27 @@
 	25e7  5000 Series Chipset PCI Express x4 Port 7
 	25f0  5000 Series Chipset FSB Registers
 		1028 01bb  PowerEdge 1955 FSB Registers
-		103c 31fd  ProLiant DL140 G3
+		103c 31fd  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	25f1  5000 Series Chipset Reserved Registers
-		103c 31fd  ProLiant DL140 G3
+		103c 31fd  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	25f3  5000 Series Chipset Reserved Registers
-		103c 31fd  ProLiant DL140 G3
+		103c 31fd  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	25f5  5000 Series Chipset FBD Registers
-		103c 31fd  ProLiant DL140 G3
+		103c 31fd  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	25f6  5000 Series Chipset FBD Registers
-		103c 31fd  ProLiant DL140 G3
+		103c 31fd  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
@@ -29849,31 +30707,32 @@
 	2688  631xESB/632xESB/3100 Chipset UHCI USB Controller #1
 		1028 01bb  PowerEdge 1955 onboard USB
 		1028 01f0  PowerEdge R900 onboard USB
-		103c 31fe  ProLiant DL140 G3
+		103c 31fe  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	2689  631xESB/632xESB/3100 Chipset UHCI USB Controller #2
 		1028 01bb  PowerEdge 1955 onboard USB
 		1028 01f0  PowerEdge R900 onboard USB
-		103c 31fe  ProLiant DL140 G3
+		103c 31fe  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	268a  631xESB/632xESB/3100 Chipset UHCI USB Controller #3
 		1028 01f0  PowerEdge R900 onboard USB
-		103c 31fe  ProLiant DL140 G3
+		103c 31fe  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	268b  631xESB/632xESB/3100 Chipset UHCI USB Controller #4
 		1028 01f0  PowerEdge R900 onboard USB
+		103c 31fe  ProLiant DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		8086 3476  S5000PSLSATA Server Board
 	268c  631xESB/632xESB/3100 Chipset EHCI USB2 Controller
 		1028 01bb  PowerEdge 1955 onboard USB
 		1028 01f0  PowerEdge R900 onboard USB
-		103c 31fe  ProLiant DL140 G3
+		103c 31fe  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
@@ -29893,7 +30752,7 @@
 		15d9 9680  X7DBN Motherboard
 		8086 3476  S5000PSLSATA Server Board
 	269e  631xESB/632xESB IDE Controller
-		103c 31fe  ProLiant DL140 G3
+		103c 31fe  ProLiant DL140 G3, DL360 G5
 		15d9 8680  X7DVL-E-O motherboard
 		15d9 9680  X7DBN Motherboard
 	2700  Optane SSD 900P Series
@@ -29907,7 +30766,7 @@
 		8086 3904  NVMe Datacenter SSD [Optane] x4 AIC (P4800X)
 		8086 3905  NVMe Datacenter SSD [Optane] 15mm 2.5" U.2 (P4800X)
 	2723  Wi-Fi 6 AX200
-		1a56 1654  Killer™ Wi-Fi 6 AX1650x (AX200NGW)
+		1a56 1654  Killerâ„¢ Wi-Fi 6 AX1650x (AX200NGW)
 		8086 0084  Wi-Fi 6 AX200NGW
 	2725  Wi-Fi 6 AX210/AX211/AX411 160MHz
 		8086 0020  Wi-Fi 6 AX210 160MHz
@@ -31404,8 +32263,14 @@
 	31a2  Celeron/Pentium Silver Processor Integrated Sensor Solution
 	31a8  Celeron/Pentium Silver Processor USB 3.0 xHCI Controller
 		1849 31a8  Celeron/Pentium Silver Processor USB 3.0 xHCI Controller
-	31ac  Celeron/Pentium Silver Processor Serial IO I2C Host Controller
-	31ae  Celeron/Pentium Silver Processor Serial IO I2C Host Controller
+	31ac  Celeron/Pentium Silver Processor I2C 0
+	31ae  Celeron/Pentium Silver Processor I2C 1
+	31b0  Celeron/Pentium Silver Processor I2C 2
+	31b2  Celeron/Pentium Silver Processor I2C 3
+	31b4  Celeron/Pentium Silver Processor I2C 4
+	31b6  Celeron/Pentium Silver Processor I2C 5
+	31b8  Celeron/Pentium Silver Processor I2C 6
+	31ba  Celeron/Pentium Silver Processor I2C 7
 	31bc  Celeron/Pentium Silver Processor Serial IO UART Host Controller
 	31be  Celeron/Pentium Silver Processor Serial IO UART Host Controller
 	31c0  Celeron/Pentium Silver Processor Serial IO UART Host Controller
@@ -31502,6 +32367,9 @@
 	3432  5520/5500/X58 Chipset QuickData Technology Device
 	3433  5520/5500/X58 Chipset QuickData Technology Device
 	3438  7500/5520/5500/X58 I/O Hub Throttle Registers
+	3440  Ice Lake UPI Misc
+	3441  Ice Lake UPI Link/Phy0
+	3456  Ice Lake NorthPeak
 	347e  Ice Lake Xeon Non-Transparent Bridge
 	3482  Ice Lake-LP LPC Controller
 	34a3  Ice Lake-LP SMBus Controller
@@ -32154,12 +33022,19 @@
 	3e92  CoffeeLake-S GT2 [UHD Graphics 630]
 		1028 0869  Vostro 3470
 	3e93  CoffeeLake-S GT1 [UHD Graphics 610]
+	3e94  Coffee Lake-S GT2 [UHD Graphics P630]
 	3e96  CoffeeLake-S GT2 [UHD Graphics P630]
 	3e98  CoffeeLake-S GT2 [UHD Graphics 630]
+	3e9a  Coffee Lake-S GT2 [UHD Graphics P630]
 	3e9b  CoffeeLake-H GT2 [UHD Graphics 630]
+	3e9c  Coffee Lake-S GT1 [UHD Graphics 610]
 	3ea0  WhiskeyLake-U GT2 [UHD Graphics 620]
 		1028 089e  Inspiron 5482
+	3ea1  Whiskey Lake-U GT1 [UHD Graphics 610]
 	3ea5  CoffeeLake-U GT3e [Iris Plus Graphics 655]
+	3ea6  Coffee Lake-U GT3 [Iris Plus Graphics 645]
+	3ea8  Coffee Lake-U GT3 [Iris Plus Graphics 655]
+	3ea9  Coffee Lake-U GT2 [UHD Graphics 620]
 	3ec2  8th Gen Core Processor Host Bridge/DRAM Registers
 		1028 0869  Vostro 3470
 		1043 8694  PRIME H310M-D
@@ -32305,6 +33180,7 @@
 	43c8  Tiger Lake-H HD Audio Controller
 	43e0  Tiger Lake-H Management Engine Interface
 	43e8  Tiger Lake-H Serial IO I2C Controller #0
+	43e9  Tiger Lake-H Serial IO I2C Controller #1
 	43ed  Tiger Lake-H USB 3.2 Gen 2x1 xHCI Host Controller
 	43ef  Tiger Lake-H Shared SRAM
 	43f0  Tiger Lake PCH CNVi WiFi
@@ -32312,36 +33188,84 @@
 		8086 0074  Wi-Fi 6 AX201 160MHz
 		8086 0264  Wireless-AC 9461
 		8086 02a4  Wireless-AC 9462
+	43fc  Tiger Lake-H Integrated Sensor Hub
 	444e  Turbo Memory Controller
+	4511  Elkhart Lake Gaussian and Neural Accelerator
+	4538  Elkhart Lake PCI-e Root Complex
+	4555  Elkhart Lake [UHD Graphics Gen11 16EU]
+	4571  Elkhart Lake [UHD Graphics Gen11 32EU]
 	460d  12th Gen Core Processor PCI Express x16 Controller #1
 	461d  Alder Lake Innovation Platform Framework Processor Participant
+		1028 0b10  Precision 3571
 	461e  Alder Lake-P Thunderbolt 4 USB Controller
+		1028 0b10  Precision 3571
 	461f  Alder Lake-P Thunderbolt 4 PCI Express Root Port #3
 	4626  Alder Lake-P Integrated Graphics Controller
+	4628  Alder Lake-UP3 GT2 [UHD Graphics]
 	4629  12th Gen Core Processor Host Bridge/DRAM Registers
+	462a  AlderLake-P [UHD Graphics]
 	462f  Alder Lake-P Thunderbolt 4 PCI Express Root Port #2
+	4636  AlderLake-P [UHD Graphics]
+	4638  AlderLake-P [UHD Graphics]
+	463a  AlderLake-P [UHD Graphics]
 	463d  12th Gen Core Processor PCI Express x4 Controller #2
 	463e  Alder Lake-P Thunderbolt 4 NHI #0
+		1028 0b10  Precision 3571
 	463f  Alder Lake-P Thunderbolt 4 PCI Express Root Port #1
 	4641  12th Gen Core Processor Host Bridge/DRAM Registers
+		1028 0b10  Precision 3571
 	464d  12th Gen Core Processor PCI Express x4 Controller #0
 	464f  12th Gen Core Processor Gaussian & Neural Accelerator
+		1028 0b10  Precision 3571
 	4660  12th Gen Core Processor Host Bridge/DRAM Registers
+	4668  12th Gen Core Processor Host Bridge/DRAM Registers
 	466d  Alder Lake-P Thunderbolt 4 NHI #1
 	466e  Alder Lake-P Thunderbolt 4 PCI Express Root Port #0
 	467d  Platform Monitoring Technology
 	467f  Volume Management Device NVMe RAID Controller
 	4680  AlderLake-S GT1
+	4682  Alder Lake-S GT1 [UHD Graphics 730]
+	4688  Alder Lake-HX GT1 [UHD Graphics 770]
+	468a  Alder Lake-S [UHD Graphics]
+	468b  Alder Lake-S [UHD Graphics]
+	4690  Alder Lake-S GT1 [UHD Graphics 770]
+	4692  Alder Lake-S GT1 [UHD Graphics 730]
+	4693  Alder Lake-S GT1 [UHD Graphics 710]
 	46a0  AlderLake-P GT2
 	46a1  UHD Graphics
 	46a3  Alder Lake-P GT1 [UHD Graphics]
 	46a6  Alder Lake-P Integrated Graphics Controller
+	46a8  Alder Lake-UP3 GT2 [Iris Xe Graphics]
+	46aa  Alder Lake-UP4 GT2 [Iris Xe Graphics]
+	46b0  AlderLake-P [Iris Xe Graphics]
+	46b1  AlderLake-P [Iris Xe Graphics]
+	46b3  Alder Lake-UP3 GT1 [UHD Graphics]
+	46b6  AlderLake-P [Iris Xe Graphics]
+	46b8  AlderLake-P [Iris Xe Graphics]
+	46ba  AlderLake-P [Iris Xe Graphics]
 	46c0  AlderLake-M GT1
+	46c1  AlderLake-M [Iris Xe Graphics]
+	46c3  Alder Lake-UP4 GT1 [UHD Graphics]
+	46d0  Alder Lake-N [UHD Graphics]
+	46d1  Alder Lake-N [UHD Graphics]
+	46d2  Alder Lake-N [UHD Graphics]
 	4905  DG1 [Iris Xe MAX Graphics]
 	4906  DG1 [Iris Xe Pod]
 	4907  SG1 [Server GPU SG-18M]
 		193d 4000  UN-GPU-XG310-32GB-FHFL
 	4908  DG1 [Iris Xe Graphics]
+	4909  DG1 [Iris Xe MAX 100]
+	4b00  Elkhart Lake eSPI Controller
+	4b23  Elkhart Lake SMBus Controller
+	4b24  Elkhart Lake SPI (Flash) Controller
+	4b38  Elkhart Lake PCH PCI Express Root Port #0
+	4b39  Elkhart Lake PCH PCI Express Root Port #1
+	4b3e  Elkhart Lake PCH PCI Express Root Port #6
+	4b58  Elkhart Lake High Density Audio bus interface
+	4b63  Elkhart Lake SATA AHCI
+	4b70  Elkhart Lake Management Engine Interface
+	4b7d  Elkhart Lake USB 3.10 XHCI
+	4b7f  Elkhart Lake PMC SRAM
 	4c3d  Volume Management Device NVMe RAID Controller
 	4c8a  RocketLake-S GT1 [UHD Graphics 750]
 	4c8b  RocketLake-S GT1 [UHD Graphics 730]
@@ -32362,6 +33286,9 @@
 	4f80  DG2
 	4f81  DG2
 	4f82  DG2
+	4f90  DG2 Audio Controller
+	4f91  DG2 Audio Controller
+	4f92  DG2 Audio Controller
 	5001  LE80578
 	5002  LE80578 Graphics Processor Unit
 	5009  LE80578 Video Display Controller
@@ -32411,33 +33338,72 @@
 	504c  EP80579 Integrated Processor with QuickAssist TDM
 	5181  Alder Lake PCH-P LPC/eSPI Controller
 	5182  Alder Lake PCH eSPI Controller
+		1028 0b10  Precision 3571
 	51a3  Alder Lake PCH-P SMBus Host Controller
+		1028 0b10  Precision 3571
 	51a4  Alder Lake-P PCH SPI Controller
+		1028 0b10  Precision 3571
 	51a8  Alder Lake PCH UART #0
 	51a9  Alder Lake PCH UART #1
+	51b1  Alder Lake PCI Express x1 Root Port #10
 	51bf  Alder Lake PCH-P PCI Express Root Port #9
 	51c5  Alder Lake-P Serial IO I2C Controller #0
 	51c6  Alder Lake-P Serial IO I2C Controller #1
 	51c8  Alder Lake PCH-P High Definition Audio Controller
+		1028 0b10  Precision 3571
 	51d3  Alder Lake-P SATA AHCI Controller
+		1028 0b10  Precision 3571
+	51d8  Alder Lake-P Serial IO I2C Controller #2
+	51d9  Alder Lake-P Serial IO I2C Controller #3
 	51e0  Alder Lake PCH HECI Controller
+		1028 0b10  Precision 3571
+	51e3  Alder Lake AMT SOL Redirection
+		1028 0b10  Precision 3571
 	51e8  Alder Lake PCH Serial IO I2C Controller #0
+		1028 0b10  Precision 3571
 	51e9  Alder Lake PCH Serial IO I2C Controller #1
+		1028 0b10  Precision 3571
 	51ea  Alder Lake PCH Serial IO I2C Controller #2
 	51eb  Alder Lake PCH Serial IO I2C Controller #3
 	51ed  Alder Lake PCH USB 3.2 xHCI Host Controller
+		1028 0b10  Precision 3571
 	51ef  Alder Lake PCH Shared SRAM
+		1028 0b10  Precision 3571
 	51f0  Alder Lake-P PCH CNVi WiFi
 		8086 0034  Wireless-AC 9560 160MHz
 		8086 0070  Wi-Fi 6 AX201 160MHz
 		8086 0074  Wi-Fi 6 AX201 160MHz
+		8086 0094  Wi-Fi 6E AX211 160MHz
 		8086 4070  Wi-Fi 6 AX201 160MHz
+		8086 4090  Wi-Fi 6E AX211 160MHz
+	51fc  Alder Lake-P Integrated Sensor Hub
+		1028 0b10  Precision 3571
 	5200  EtherExpress PRO/100 Intelligent Server PCI Bridge
 	5201  EtherExpress PRO/100 Intelligent Server Fast Ethernet Controller
 		8086 0001  EtherExpress PRO/100 Server Ethernet Adapter
 	530d  80310 (IOP) IO Processor
 	5502  Ethernet Controller (2) I225-LMvP
-	5504  Ethernet Controller I226-K
+		1ab6 0225  TS4 On-Board 2.5GbE Ethernet Adaptor
+	5690  DG2 [Arc A770M]
+	5691  DG2 [Arc A730M]
+	5692  DG2 [Arc A550M]
+	5693  DG2 [Arc A370M]
+	5694  DG2 [Arc A350M]
+	5695  DG2 [Iris Xe MAX A200M]
+	56a0  DG2 [Arc A770]
+	56a1  DG2 [Arc A750]
+	56a2  DG2 [Arc A580]
+	56a5  DG2 [Arc A380]
+	56a6  DG2 [Arc A310]
+	56b0  DG2 [Arc Pro A30M]
+	56b1  DG2 [Arc Pro A40/A50]
+	56c0  Data Center GPU Flex 170
+	56c1  Data Center GPU Flex 140
+	579c  Ethernet Connection E825-C for backplane
+	579d  Ethernet Connection E825-C for QSFP
+	579e  Ethernet Connection E825-C for SFP
+	57b1  Ethernet Controller E610 1GBASE T
+		8086 0000  Ethernet Converged Network Adapter E610
 	5845  QEMU NVM Express Controller
 		1af4 1100  QEMU Virtual Machine
 	5900  Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
@@ -32448,7 +33414,9 @@
 		17aa 2247  ThinkPad T570
 		17aa 224f  ThinkPad X1 Carbon 5th Gen
 	5905  Xeon E3-1200 v6/7th Gen Core Processor PCIe Controller (x8)
+	5906  HD Graphics 610
 	5909  Xeon E3-1200 v6/7th Gen Core Processor PCIe Controller (x4)
+	590b  HD Graphics 610
 	590c  Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
 	590f  Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
 		1462 7a68  B250 KRAIT GAMING (MS-7A68)
@@ -32471,10 +33439,11 @@
 	591d  HD Graphics P630
 	591e  HD Graphics 615
 	591f  Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
+	5921  HD Graphics 620
 	5923  HD Graphics 635
 	5926  Iris Plus Graphics 640
 	5927  Iris Plus Graphics 650
-	5a84  Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller
+	5a84  Apollo Lake [HD Graphics 505]
 	5a85  HD Graphics 500
 	5a88  Celeron N3350/Pentium N4200/Atom E3900 Series Imaging Unit
 	5a98  Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster
@@ -32711,6 +33680,7 @@
 	6ffd  Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent
 	6ffe  Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent
 	7000  82371SB PIIX3 ISA [Natoma/Triton II]
+		01de fffd  Propolis Virtual PIIX3 ISA Controller
 		1af4 1100  Qemu virtual machine
 	7010  82371SB PIIX3 IDE [Natoma/Triton II]
 		1af4 1100  Qemu virtual machine
@@ -32728,6 +33698,7 @@
 		15ad 1976  Virtual Machine Chipset
 		1af4 1100  QEMU Virtual Machine
 	7113  82371AB/EB/MB PIIX4 ACPI
+		01de fffc  Propolis Virtual PIIX4 PM Controller
 		15ad 1976  Virtual Machine Chipset
 		1af4 1100  Qemu virtual machine
 	7120  82810 GMCH (Graphics Memory Controller Hub)
@@ -32784,6 +33755,7 @@
 	71a2  440GX - 82443GX Host bridge (AGP disabled)
 		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard
 	7360  XMM7360 LTE Advanced Modem
+	7560  XMM7560 LTE Advanced Pro Modem
 	7600  82372FB PIIX5 ISA
 	7601  82372FB PIIX5 IDE
 	7602  82372FB PIIX5 USB
@@ -32801,15 +33773,58 @@
 	7aa3  Alder Lake-S PCH SMBus Controller
 	7aa4  Alder Lake-S PCH SPI Controller
 	7aa7  Alder Lake-S PCH Shared SRAM
+	7aa8  Alder Lake-S PCH Serial IO UART #0
+	7aab  Alder Lake-S PCH Serial IO SPI Controller #1
+	7ab0  Alder Lake-S PCH PCI Express Root Port #9
 	7ab4  Alder Lake-S PCH PCI Express Root Port #13
+	7ab8  Alder Lake-S PCH PCI Express Root Port #1
+	7ab9  Alder Lake-S PCH PCI Express Root Port #2
+	7abc  Alder Lake-S PCH PCI Express Root Port #5
 	7abd  Alder Lake-S PCH PCI Express Root Port #6
-	7acc  Alder Lake-S PCH I2C Controller #0
+	7abf  Alder Lake-S PCH PCI Express Root Port #8
+# As documented in Chipset datasheet
+	7ac8  Alder Lake-S PCH PCI Express Root Port #25
+	7acc  Alder Lake-S PCH Serial IO I2C Controller #0
+	7acd  Alder Lake-S PCH Serial IO I2C Controller #1
+	7ace  Alder Lake-S PCH Serial IO I2C Controller #2
+	7acf  Alder Lake-S PCH Serial IO I2C Controller #3
 	7ad0  Alder Lake-S HD Audio Controller
 	7ae0  Alder Lake-S PCH USB 3.2 Gen 2x2 XHCI Controller
 	7ae2  Alder Lake-S PCH SATA Controller [AHCI Mode]
 	7ae8  Alder Lake-S PCH HECI Controller #1
 	7af0  Alder Lake-S PCH CNVi WiFi
+		8086 0034  Wireless-AC 9560
+		8086 0070  Wi-Fi 6 AX201 160MHz
 		8086 0094  Wi-Fi 6 AX201 160MHz
+	7afc  Alder Lake-S PCH Serial IO I2C Controller #4
+	7afd  Alder Lake-S PCH Serial IO I2C Controller #5
+	7d0b  Volume Management Device NVMe RAID Controller Intel Corporation
+	7e01  Meteor Lake-P LPC/eSPI Controller
+	7e22  Meteor Lake-P SMBus Controller
+	7e23  Meteor Lake-P SPI Controller
+	7e24  Meteor Lake-P Trace Hub
+	7e25  Meteor Lake-P Serial IO UART Controller #0
+	7e26  Meteor Lake-P Serial IO UART Controller #1
+	7e27  Meteor Lake-P Serial IO SPI Controller #0
+	7e28  Meteor Lake-P HD Audio Controller
+	7e30  Meteor Lake-P Serial IO SPI Controller #1
+	7e46  Meteor Lake-P Serial IO SPI Controller #2
+	7e50  Meteor Lake-P Serial IO I2C Controller #4
+	7e51  Meteor Lake-P Serial IO I2C Controller #5
+	7e52  Meteor Lake-P Serial IO UART Controller #2
+	7e78  Meteor Lake-P Serial IO I2C Controller #0
+	7e79  Meteor Lake-P Serial IO I2C Controller #1
+	7e7a  Meteor Lake-P Serial IO I2C Controller #2
+	7e7b  Meteor Lake-P Serial IO I2C Controller #3
+	7e7d  Meteor Lake-P USB 3.2 Gen 2x1 xHCI Host Controller
+	7e7e  Meteor Lake-P USB Device Controller
+	7ec0  Meteor Lake-P Thunderbolt 4 USB Controller
+	7ec2  Meteor Lake-P Thunderbolt 4 NHI #0
+	7ec3  Meteor Lake-P Thunderbolt 4 NHI #1
+	7ec4  Meteor Lake-P Thunderbolt 4 PCI Express Root Port #0
+	7ec5  Meteor Lake-P Thunderbolt 4 PCI Express Root Port #1
+	7ec6  Meteor Lake-P Thunderbolt 4 PCI Express Root Port #2
+	7ec7  Meteor Lake-P Thunderbolt 4 PCI Express Root Port #3
 	8002  Trusted Execution Technology Registers
 	8003  Trusted Execution Technology Registers
 	8100  US15W/US15X SCH [Poulsbo] Host Bridge
@@ -32853,6 +33868,7 @@
 		1993 0def  mGuard-PCI AV#0
 	8603  Ice Lake-LP Dynamic Tuning Processor Participant
 	87c0  UHD Graphics 617
+	87ca  UHD Graphics 617
 	8800  Platform Controller Hub EG20T PCI Express Port
 	8801  Platform Controller Hub EG20T Packet Hub
 	8802  Platform Controller Hub EG20T Gigabit Ethernet Controller
@@ -32879,7 +33895,9 @@
 	8817  Platform Controller Hub EG20T I2C Controller
 	8818  Platform Controller Hub EG20T Controller Area Network (CAN) Controller
 	8819  Platform Controller Hub EG20T IEEE 1588 Hardware Assist
+	8a03  Processor Power and Thermal Controller
 	8a0d  Ice Lake Thunderbolt 3 NHI #1
+	8a11  GNA Scoring Accelerator Module
 	8a12  Ice Lake-LP Processor Host Bridge/DRAM Registers
 	8a13  Ice Lake Thunderbolt 3 USB Controller
 	8a14  Ice Lake Processor Host Bridge/DRAM Registers
@@ -32893,6 +33911,7 @@
 	8a52  Iris Plus Graphics G7
 	8a53  Iris Plus Graphics G7
 	8a56  Iris Plus Graphics G1 (Ice Lake)
+	8a58  Ice Lake-Y GT1 [UHD Graphics G1]
 	8a5a  Iris Plus Graphics G4 (Ice Lake)
 	8a5c  Iris Plus Graphics G4 (Ice Lake)
 	8c00  8 Series/C220 Series Chipset Family 4-port SATA Controller 1 [IDE mode]
@@ -33141,6 +34160,8 @@
 	9622  Integrated RAID
 	9641  Integrated RAID
 	96a1  Integrated RAID
+	9840  Lakefield GT2 [UHD Graphics]
+	9841  Lakefield GT1.5 [UHD Graphics]
 	9a01  11th Gen Core Processor PCIe Controller #1
 	9a03  TigerLake-LP Dynamic Tuning Processor Participant
 	9a09  11th Gen Core Processor PCIe Controller
@@ -33166,13 +34187,18 @@
 	9a31  Tiger Lake-H Thunderbolt 4 PCI Express Root Port #3
 	9a33  Tiger Lake Trace Hub
 	9a36  11th Gen Core Processor Host Bridge/DRAM Registers
+	9a40  Tiger Lake-UP4 GT2 [Iris Xe Graphics]
 	9a49  TigerLake-LP GT2 [Iris Xe Graphics]
 	9a60  TigerLake-H GT1 [UHD Graphics]
 	9a68  TigerLake-H GT1 [UHD Graphics]
+	9a70  Tiger Lake-H GT1 [UHD Graphics]
+	9a78  Tiger Lake-LP GT2 [UHD Graphics G4]
+	9b21  Comet Lake-U GT2 [UHD Graphics 620]
 	9b33  Comet Lake-S 6c Host Bridge/DRAM Controller
 	9b41  CometLake-U GT2 [UHD Graphics]
 		1028 09bd  Latitude 7310
 		1028 09be  Latitude 7410
+	9b43  10th Gen Core Processor Host Bridge/DRAM Registers
 	9b44  10th Gen Core Processor Host Bridge/DRAM Registers
 	9b53  Comet Lake-S 6c Host Bridge/DRAM Controller
 	9b54  10th Gen Core Processor Host Bridge/DRAM Registers
@@ -33180,11 +34206,18 @@
 		1028 09be  Latitude 7410
 	9b63  10th Gen Core Processor Host Bridge/DRAM Registers
 	9b64  10th Gen Core Processor Host Bridge/DRAM Registers
+	9ba4  Comet Lake-H GT1 [UHD Graphics 610]
 	9ba8  CometLake-S GT1 [UHD Graphics 610]
+	9baa  Comet Lake UHD Graphics
+	9bac  Comet Lake UHD Graphics
 	9bc4  CometLake-H GT2 [UHD Graphics]
 	9bc5  CometLake-S GT2 [UHD Graphics 630]
+	9bc6  Comet Lake-S GT2 [UHD Graphics P630]
 	9bc8  CometLake-S GT2 [UHD Graphics 630]
 	9bca  Comet Lake UHD Graphics
+	9bcc  Comet Lake UHD Graphics
+	9be6  Comet Lake-S GT2 [UHD Graphics P630]
+	9bf6  Coffee Lake-S GT2 [UHD Graphics P630]
 	9c00  8 Series SATA Controller 1 [IDE mode]
 	9c01  8 Series SATA Controller 1 [IDE mode]
 	9c02  8 Series SATA Controller 1 [AHCI mode]
@@ -33497,6 +34530,8 @@
 	a0c5  Tiger Lake-LP Serial IO I2C Controller #4
 	a0c6  Tiger Lake-LP Serial IO I2C Controller #5
 	a0c8  Tiger Lake-LP Smart Sound Technology Audio Controller
+# SATA controller on Intel Tiger Lake based mobile platforms in AHCI mode. Could be found on Panasonic Let's Note CF-SV2.
+	a0d3  Tiger Lake-LP SATA Controller
 	a0e0  Tiger Lake-LP Management Engine Interface
 	a0e3  Tiger Lake-LP Active Management Technology - SOL
 	a0e8  Tiger Lake-LP Serial IO I2C Controller #0
@@ -33821,7 +34856,23 @@
 	a3eb  Comet Lake PCI Express Root Port #21
 	a3f0  Comet Lake PCH-V cAVS
 	a620  6400/6402 Advanced Memory Buffer (AMB)
+	a720  Raptor Lake-P [UHD Graphics]
+	a721  Raptor Lake-P [UHD Graphics]
+	a77f  Volume Management Device NVMe RAID Controller Intel Corporation
+	a780  Raptor Lake-S GT1 [UHD Graphics 770]
+	a781  Raptor Lake-S UHD Graphics
+	a782  Raptor Lake-S UHD Graphics
+	a783  Raptor Lake-S UHD Graphics
+	a788  Raptor Lake-S UHD Graphics
+	a789  Raptor Lake-S UHD Graphics
+	a78a  Raptor Lake-S UHD Graphics
+	a78b  Raptor Lake-S UHD Graphics
+	a7a0  Raptor Lake-P [Iris Xe Graphics]
+	a7a1  Raptor Lake-P [Iris Xe Graphics]
+	a7a8  Raptor Lake-P [UHD Graphics]
+	a7a9  Raptor Lake-P [UHD Graphics]
 	abc0  Omni-Path Fabric Switch Silicon 100 Series
+	ad0b  Volume Management Device NVMe RAID Controller Intel Corporation
 	b152  21152 PCI-to-PCI Bridge
 		8086 b152  21152 PCI-to-PCI Bridge
 # observed, and documented in Intel revision note; new mask of 1011:0026
@@ -33912,6 +34963,8 @@
 	011b  WX1860AL1 Gigabit Ethernet Controller Virtual Function
 	1000  Ethernet Controller RP1000 Virtual Function for 10GbE SFP+
 	1001  Ethernet Controller RP1000 for 10GbE SFP+
+		1bd4 0084  Ethernet Controller RP1000 for 10GbE SFP+(lldp)
+		1bd4 0085  Ethernet Controller SP1000A for 10GBASE-T
 		8088 0000  Ethernet Network Adaptor RP1000 for 10GbE SFP+
 	2000  Ethernet Controller RP2000 Virtual Function for 10GbE SFP+
 	2001  Ethernet Controller RP2000 for 10GbE SFP+
@@ -33930,7 +34983,15 @@
 	2008  Video assistant component
 8820  Stryker Corporation
 	2724  Mako Front Side Motor Controller [cPCI]
-8848  Wuxi Micro Innovation Integrated Circuit Design Co.,Ltd
+# Wuxi Micro Innovation Integrated Circuit Design Co.,Ltd.
+8848  MUCSE
+	1000  Ethernet Controller N10 Series for 10GbE or 40GbE (Dual-port)
+	1001  Ethernet Controller N400 Series for 1GbE (Dual-port)
+	1020  Ethernet Controller N10 Series for 10GbE (Quad-port)
+	1021  Ethernet Controller N400 Series for 1GbE (Quad-port)
+	1060  Ethernet Controller N10 Series for 10GbE (8-port)
+	1080  Ethernet Controller N10 Series Virtual Function
+	1081  Ethernet Controller N400 Series Virtual Function
 8866  T-Square Design Inc.
 8888  Silicon Magic
 8912  TRX
@@ -34307,6 +35368,10 @@
 		1bd4 0078  RS0800M5E24iM
 		1bd4 0079  RS0800M5H24iM
 		1bd4 0080  RS0804M5R16iM
+		1bd4 0086  RT0800M7E
+		1bd4 0087  RT0800M7H
+		1bd4 0088  RT0804M7R
+		1bd4 0089  RT0808M7R
 		1cc4 0101  Ramaxel FBGF-RAD PM8204
 		1cc4 0201  Ramaxel FBGF-RAD PM8222
 		1d49 0220  ThinkSystem 4350-8i SAS/SATA 12Gb HBA
@@ -34357,11 +35422,17 @@
 		9005 1462  HBA 1200-8i
 		9005 1471  SmartRAID 3254-16i /e
 		9005 1472  SmartRAID 3258-16i /e
+		9005 1475  SmartRAID 3254-16e /e
 		9005 14a0  SmartRAID 3254-8i
 		9005 14a1  SmartRAID 3204-8i
 		9005 14a2  SmartRAID 3252-8i
+		9005 14a4  SmartRAID 3254-8i /e
+		9005 14a5  SmartRAID 3252-8i /e
+		9005 14a6  SmartRAID 3204-8i /e
 		9005 14c0  SmartHBA 2200-16i
 		9005 14c1  HBA 1200-16i
+		9005 14c3  HBA 1200-16e
+		9005 14c4  HBA 1200-8e
 	0410  AIC-9410W SAS (Razor HBA RAID)
 		9005 0410  ASC-48300(Spirit RAID)
 		9005 0411  ASC-58300 (Oakmont RAID)
@@ -34469,7 +35540,7 @@
 # 2-port Serial 1-port Parallel Adaptor
 	9912  PCIe 9912 Multi-I/O Controller
 	9922  MCS9922 PCIe Multi-I/O Controller
-	9990  MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
+	9990  MCS9990 PCIe to 4â€Port USB 2.0 Host Controller
 # Subsystem ID on a 3c985B-SX network card
 9850  3Com (wrong ID)
 9902  Stargen Inc.
@@ -34484,6 +35555,11 @@
 	1202  STAR1200I NVMe SSD
 	1203  STAR1200L NVMe SSD
 	1204  STAR1200E NVMe SSD
+	1500  STAR1500 PCIe NVMe SSD Controller
+	1501  STAR1500C NVMe SSD
+	1502  STAR1500E NVMe SSD
+	2000  STAR2000 NVMe Controller
+	2001  STAR2000E NVMe SSD
 a000  Asix Electronics Corporation (Wrong ID)
 a0a0  AOPEN Inc.
 a0f1  UNISYS Corporation
@@ -34573,6 +35649,7 @@
 c001  TSI Telsys
 c0a9  Micron/Crucial Technology
 	2263  P1 NVMe PCIe SSD
+	5407  P5 Plus NVMe PCIe SSD
 	540a  P2 NVMe PCIe SSD
 c0de  Motorola
 c0fe  Motion Engineering, Inc.
@@ -34597,6 +35674,7 @@
 ceba  KEBA AG
 cf86  Spectrum-4TOR
 	0276  Spectrum-4TOR in Flash Recovery Mode
+d063  SolidRun
 d161  Digium, Inc.
 	0120  Wildcard TE120P single-span T1/E1/J1 card
 	0205  Wildcard TE205P/TE207P dual-span T1/E1/J1 card 5.0V
diff --git a/hwdb.d/pnp_id_registry.html b/hwdb.d/pnp_id_registry.html
index ac15190..60c19a5 100644
--- a/hwdb.d/pnp_id_registry.html
+++ b/hwdb.d/pnp_id_registry.html
@@ -2502,6 +2502,29 @@
  <tr class="even"><td>Shiftall Inc.</td><td>SFL</td><td>12/31/2021</td> </tr>
  <tr class="odd"><td>AudioControl</td><td>AUD</td><td>12/31/2021</td> </tr>
  <tr class="even"><td>Schneider Consumer Group</td><td>SCA</td><td>02/08/2022</td> </tr>
+ <tr class="odd"><td>NOLO CO., LTD.</td><td>NVR</td><td>04/08/2022</td> </tr>
+ <tr class="even"><td>Riedel Communications Canada Inc.</td><td>RDL</td><td>04/08/2022</td> </tr>
+ <tr class="odd"><td>arpara Technology Co., Ltd.</td><td>IMX</td><td>04/08/2022</td> </tr>
+ <tr class="even"><td>Nreal</td><td>MRG</td><td>04/08/2022</td> </tr>
+ <tr class="odd"><td>Venetex Corporation</td><td>VNX</td><td>04/08/2022</td> </tr>
+ <tr class="even"><td>G.VISION</td><td>GVS</td><td>06/17/2022</td> </tr>
+ <tr class="odd"><td>Galaxy Microsystems Ltd.</td><td>GXL</td><td>06/17/2022</td> </tr>
+ <tr class="even"><td>OZO Co.Ltd</td><td>OZD</td><td>06/17/2022</td> </tr>
+ <tr class="odd"><td>GoUp Co.,Ltd</td><td>GUP</td><td>06/24/2022</td> </tr>
+ <tr class="even"><td>Eizo Technologies GmbH</td><td>ETG</td><td>06/24/2022</td> </tr>
+ <tr class="odd"><td>Steelseries ApS</td><td>SSG</td><td>09/23/2022</td> </tr>
+ <tr class="even"><td>Weidmuller Interface GmbH &amp; Co. KG</td><td>WMI</td><td>09/23/2022</td> </tr>
+ <tr class="odd"><td>Bigscreen, Inc.</td><td>BIG</td><td>09/23/2022</td> </tr>
+ <tr class="even"><td>Jiangxi Jinghao Optical Co., Ltd.</td><td>OFI</td><td>09/23/2022</td> </tr>
+ <tr class="odd"><td>EverPro Technologies Company Limited</td><td>EVP</td><td>09/30/2022</td> </tr>
+ <tr class="even"><td>NewCoSemi (Beijing) Technology CO.,Ltd.</td><td>NCV</td><td>09/30/2022</td> </tr>
+ <tr class="odd"><td>LG Display</td><td>LGD</td><td>09/30/2022</td> </tr>
+ <tr class="even"><td>Tianma Microelectronics Ltd.</td><td>TMA</td><td>10/20/2022</td> </tr>
+ <tr class="odd"><td>Printronix LLC</td><td>PTX</td><td>10/20/2022</td> </tr>
+ <tr class="even"><td>Colorlight</td><td>KLT</td><td>10/20/2022</td> </tr>
+ <tr class="odd"><td>Beck GmbH &amp; Co. Elektronik Bauelemente KG</td><td>BCK</td><td>10/20/2022</td> </tr>
+ <tr class="even"><td>Shenzhen Soogeen Electronics Co., LTD.</td><td>SGN</td><td>11/29/2022</td> </tr>
+ <tr class="odd"><td>Emotiva Audio Corp. </td><td>EAC</td><td>02/02/2023</td> </tr>
       </tbody>
     </table>
   </body>
diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids
index 8e19aff..9a03f0f 100644
--- a/hwdb.d/usb.ids
+++ b/hwdb.d/usb.ids
@@ -9,8 +9,8 @@
 #	The latest version can be obtained from
 #		http://www.linux-usb.org/usb.ids
 #
-# Version: 2022.04.13
-# Date:    2022-04-13 20:34:10
+# Version: 2023.01.16
+# Date:    2023-01-16 20:34:10
 #
 
 # Vendors, devices and interfaces. Please keep sorted.
@@ -24,10 +24,14 @@
 	7778  Counterfeit flash drive [Kingston]
 0002  Ingram
 	0002  passport00
+	7007  HPRT XT300
 0003  Club Mac
 0004  Nebraska Furniture Mart
 0011  Unknown
 	7788  counterfeit flash drive
+0040  Anyware Corporation
+	073d  Mini Multimedia 2.4GHz Wireless Keyboard with Touch Pad
+0042  DMT
 0053  Planex
 	5301  GW-US54ZGL 802.11bg
 0078  Microntek
@@ -60,6 +64,7 @@
 	6026  CBM1180 Flash drive controller
 0218  Hangzhou Worlde
 	0301  MIDI Port
+0231  Sonuus Limited
 02ad  HUMAX Co., Ltd.
 	138c  PVR Mass Storage
 0303  Mini Automation Controller
@@ -72,6 +77,8 @@
 	0001  PSX for USB Converter
 03c3  ZWO
 	120e  ASI120MC-S Planetary Camera
+	1f10  EFF
+	294f  ASI294MC Pro
 03d9  Shenzhen Sinote Tech-Electron Co., Ltd
 	0499  SE340D PC Remote Control
 03da  Bernd Walter Computer Technology
@@ -227,7 +234,7 @@
 	0218  APOLLO P2500/2600
 	0221  StreamSmart 400 [F2235AA]
 	0223  Digital Drive Flash Reader
-	022a  Laserjet CP1525nw
+	022a  LaserJet CP1525nw/x
 	0241  Link-5 micro dongle
 	0304  DeskJet 810c/812c
 	0305  ScanJet 4300c
@@ -277,6 +284,7 @@
 	0805  HP4470C
 	0811  OfficeJet K80xi
 	0817  LaserJet 3300
+	0853  ENVY 5000 series
 	0901  ScanJet 2300c
 	0904  DeskJet 845c
 	0912  Printing Support
@@ -457,6 +465,7 @@
 	2d05  Scanjet 7000
 	2d11  OfficeJet 6110
 	2d17  Printing Support
+	2d2a  LaserJet Pro MFP M225dw
 	2e11  PSC 1000
 	2e17  LaserJet 2600n
 	2e24  LP2275w Monitor Hub
@@ -522,6 +531,7 @@
 	3d11  OfficeJet 4215
 	3d17  LaserJet P1005
 	3e02  PhotoSmart 7550
+	3e07  x755w Flash Drive
 	3e17  LaserJet P1006
 	3f02  PhotoSmart 7550~
 	3f11  PSC-1315/PSC-1317
@@ -552,6 +562,7 @@
 	4611  PhotoSmart 2700
 	4717  Color LaserJet CP1215
 	4811  PSC 1600
+	484a  Elite Dock G4
 	4911  PSC 2350
 	4b11  OfficeJet 6200
 	4c11  PSC 1500 series
@@ -805,7 +816,8 @@
 	6011  FT4232H Quad HS USB-UART/FIFO IC
 	6014  FT232H Single HS USB-UART/FIFO IC
 	6015  Bridge(I2C/SPI/UART/FIFO)
-	601f  Myriad-RF LimeSDR-Mini
+	601e  FT600 16-bit FIFO IC
+	601f  FT601 32-bit FIFO IC
 	6ee0  EZO Carrier Board
 	6f70  HB-RF-USB
 	7be8  FT232R
@@ -895,6 +907,7 @@
 	d38f  Xsens serial converter
 	d491  Zolix Omni 1509 monochromator
 	d578  Accesio USB-COM-4SM
+	d678  GammaScout
 	d6f8  UNI Black BOX
 	d738  Propox JTAGcable II
 	d739  Propox ISPcable III
@@ -1204,7 +1217,9 @@
 040c  VTech Computers, Ltd
 040d  VIA Technologies, Inc.
 	3184  VNT VT6656 USB-802.11 Wireless LAN Adapter
+	340b  FX-Audio DAC-X6
 	340f  Audinst HUD-mx2
+	6204  Vectro VT6204 IDE bridge
 	6205  USB 2.0 Card Reader
 040e  MCCI
 040f  Echo Speech Corp.
@@ -1341,7 +1356,7 @@
 	7721  Memory Stick Reader/Writer
 	7722  Memory Stick Reader/Writer
 	7723  SD Card Reader
-	b23c  KT108 keyboard
+	b23c  Gaming Keyboard
 	c141  Barcode Scanner
 0417  Symbios Logic
 0418  AST Research
@@ -1382,6 +1397,7 @@
 	3020  SoundBlaster Audigy 2 NX
 	3030  SB External Composite Device
 	3040  SoundBlaster Live! 24-bit External SB0490
+	3042  Sound Blaster X-Fi Surround 5.1
 	3060  Sound Blaster Audigy 2 ZS External
 	3061  SoundBlaster Audigy 2 ZS Video Editor
 	3090  Sound Blaster Digital Music SX
@@ -1398,6 +1414,7 @@
 	3f02  E-Mu 0202
 	3f04  E-Mu 0404
 	3f07  E-Mu Xmidi 1x1
+	3f0a  E-Mu Tracker Pre
 	3f0e  Xmidi 1x1 Tab
 	4003  VideoBlaster Webcam Go Plus [W9967CF]
 	4004  Nomad II MG
@@ -1459,7 +1476,7 @@
 	4087  Live! Cam Socialize HD 1080 [VF0680]
 	4088  Live! Cam Chat HD [VF0700]
 	4095  Live! Cam Sync HD [VF0770]
-	4097  Live! Cam Chat HD [VF0700]
+	4097  Live! Cam Chat HD [VF0700/VF0790]
 	4099  Creative VF0800 [RealSense Camera SR300]
 	4100  Nomad Jukebox 2
 	4101  Nomad Jukebox 3
@@ -1667,6 +1684,7 @@
 	1237  Andromeda Hub
 0424  Microchip Technology, Inc. (formerly SMSC)
 	0001  Integrated Hub
+	0007  ULPI Transciever [USB3320]
 	0140  LPC47M14x hub
 	0acd  Sitecom Internal Multi Memory reader/writer MD-005
 	0fdc  Floppy
@@ -1758,6 +1776,7 @@
 	0083  109 Japanese Keyboard
 	00a2  Type 7 Keyboard
 	0100  3-button Mouse
+	0406  KVM Switch
 	0502  Panasonic CF-19 HID Touch Panel
 	100e  24.1" LCD Monitor v4 / FID-638 Mouse
 	36ba  Bus Powered Hub
@@ -1932,6 +1951,7 @@
 	010f  6500 series
 	0142  X3650 (Printer, Scanner, Copier)
 	01fa  S310 series
+	020e  RICOH Aficio SP 4410SF
 	4303  Xerox WorkCentre Pro 412
 043e  LG Electronics USA, Inc.
 	3001  AN-WF100 802.11abgn Wireless Adapter [Broadcom BCM4323]
@@ -2095,6 +2115,9 @@
 0454  Vobis Microcomputer AG
 0455  Telematics International, Inc.
 0456  Analog Devices, Inc.
+	7031  FX2 SPI/I2C Interface
+	b672  Libiio based instrument [ADALM2000]
+	b673  LibIIO based AD9363 Software Defined Radio [ADALM-PLUTO]
 	f000  FT2232 JTAG ICE [gnICE]
 	f001  FT2232H Hi-Speed JTAG ICE [gnICE+]
 0457  Silicon Integrated Systems Corp.
@@ -2196,6 +2219,7 @@
 	7020  Sim 321C
 	7025  Eye 311Q Camera
 	7029  Genius Look 320s (SN9C201 + HV7131R)
+	702c  Trek 320R Camera
 	702f  Genius Slim 322
 	7035  i-Look 325T Camera
 	7045  Genius Look 1320 V2
@@ -2340,7 +2364,7 @@
 	028b  Xbox360 DVD Emulator
 	028d  Xbox360 Memory Unit 64MB
 	028e  Xbox360 Controller
-	028f  Xbox360 Wireless Controller
+	028f  Xbox360 Wireless Controller via Plug & Charge Cable
 	0290  Xbox360 Performance Pipe (PIX)
 	0291  Xbox 360 Wireless Receiver for Windows
 	0292  Xbox360 Wireless Networking Adapter
@@ -2361,10 +2385,13 @@
 	02d1  Xbox One Controller
 	02d5  Xbox One Digital TV Tuner
 	02dd  Xbox One Controller (Firmware 2015)
+	02e0  Xbox One Wireless Controller
 	02e3  Xbox One Elite Controller
 	02e6  Wireless XBox Controller Dongle
 	02ea  Xbox One S Controller
 	02fd  Xbox One S Controller [Bluetooth]
+	02fe  Xbox Wireless Adapter for Windows
+	02ff  Xbox One S Controller [Bluetooth]
 	0400  Windows Powered Pocket PC 2002
 	0401  Windows Powered Pocket PC 2002
 	0402  Windows Powered Pocket PC 2002
@@ -2553,9 +2580,15 @@
 	0927  RTL8153B GigE [Surface Ethernet Adapter]
 	0955  Hub
 	0957  Hub
+	097a  Generic Superspeed Hub [Azure Kinect]
+	097b  Generic Hub [Azure Kinect]
+	097c  Azure Kinect Depth Camera
+	097d  Azure Kinect 4K Camera
+	097e  Azure Kinect Microphone Array
 	09a0  RTL8153B GigE [Surface Ethernet Adapter]
 	09c0  Surface Type Cover
-	0a00  Lumia 950 Dual SIM (RM-1118)
+	0a00  Lumia 950 (RM-1104/RM-1118)
+	0b00  Xbox Elite Series 2 Controller (model 1797)
 	0b12  Xbox Wireless Controller (model 1914)
 	930a  ISOUSB.SYS Intel 82930 Isochronous IO Test Board
 	ffca  Catalina
@@ -2621,6 +2654,7 @@
 	4d2e  Optical Mobile Mouse (HID)
 	4d51  0Y357C PMX-MMOCZUL (B) [Dell Laser Mouse]
 	4d62  HP Laser Mobile Mini Mouse
+	4d64  Asus wired optical mouse - Model MOEWUO
 	4d75  Rocketfish RF-FLBTAD Bluetooth Adapter
 	4d81  Dell N889 Optical Mouse
 	4d8a  HP Multimedia Keyboard
@@ -2631,6 +2665,7 @@
 	4de7  webcam
 	4e04  Lenovo Keyboard KB1021
 	4e22  Dell Mouse, 2 Buttons, Modell: MS111-P
+	4e26  Asus wired keyboard - model KB73211
 	4e6f  Acer Wired Keyboard Model KBAY211
 	4e72  Acer Wired Keyboard Model KBAY211
 0463  MGE UPS Systems
@@ -2656,14 +2691,42 @@
 	003d  Raptor Gaming Keyboard Integrated Hub
 	003e  SmartTerminal ST-2xxx
 	0041  G86 6240 Keyboard
+	0076  MX-Board 3.0 G80-3850
+	0077  MX BOARD 3.0S FL NBL Keyboard
+	0079  MX BOARD 3.0S FL RGB Keyboard
 	0080  eHealth Terminal ST 1503
 	0081  eHealth Keyboard G87 1504
+	0083  MX BOARD 3.0S FL RGB (KOREAN) Keyboard
+	0084  eHealth Terminal ST1506
+	0085  eHealth PIN-Pad PP1516
 	00a1  SmartCard Reader Keyboard KC 1000 SC
+	00ab  MX 1.0 FL BL Keyboard
+	00ac  MX BOARD 1.0 TKL RGB Keyboard
+	00b7  MX BOARD 8.0 TKL RGB Keyboard
+	00bb  MX BOARD 10.0 FL RGB Keyboard
+	00c3  G80 3000 TKL NBL Keyboard
+	00c4  MX BOARD 2.0S FL RGB Keyboard
+	00c5  G80 3000 TKL RGB Keyboard
+	00c7  MV BOARD 3.0 FL RGB
+	00c9  CCF MX 8.0 TKL BL Keyboard
+	00ca  CCF MX 1.0 TKL BL Keyboard
+	00cb  CCF MX 1.0 TKL NBL Keyboard
+	00cd  G80 3000 TKL NBL (KOREAN) Keyboard
+	00ce  MX BOARD 2.0S FL NBL Keyboard
+	00d2  MX 1.0 FL NBL Keyboard
+	00d3  MX 1.0 FL RGB Keyboard
+	00dd  G80-3000N RGB TKL Keyboard
+	00de  G80-3000N FL RGB Keyboard
+	00df  MX BOARD 10.0N FL RGB Keyboard
 	0106  R-300 Wireless Mouse Receiver
 	010d  MX-Board 3.0 Keyboard
 	0180  Strait 3.0
+	01a4  MC 2.1 Mouse
+	01a6  MX BOARD 2.0S FL RGB DE Keyboard
 	b090  Keyboard
 	b091  Mouse
+	c099  Stream Keyboard TKL
+	c110  KC 4500 Ergo Keyboard
 046b  American Megatrends, Inc.
 	0001  Keyboard
 	0101  PS/2 Keyboard, Mouse & Joystick Ports
@@ -2707,6 +2770,8 @@
 	0830  QuickClip
 	0836  B525 HD Webcam
 	0837  BCC950 ConferenceCam
+	0838  BCC950 ConferenceCam audio
+	0839  BCC950 ConferenceCam integated hub
 	0840  QuickCam Express
 	0843  Webcam C930e
 	0845  ConferenceCam CC3000e Camera
@@ -2718,6 +2783,7 @@
 	0857  Logi Group Speakerphone
 	085c  C922 Pro Stream Webcam
 	085e  BRIO Ultra HD Webcam
+	086b  BRIO 4K Stream Edition
 	0870  QuickCam Express
 	0882  Logi Group Speakerphone
 	0890  QuickCam Traveler
@@ -2829,10 +2895,12 @@
 	0a44  Headset H390
 	0a45  960 Headset
 	0a4d  G430 Surround Sound Gaming Headset
+	0a4f  MINI BOOM
 	0a5b  G933 Wireless Headset Dongle
 	0a5d  G933 Headset Battery Charger
 	0a66  [G533 Wireless Headset Dongle]
 	0a8f  H390 headset with microphone
+	0a90  Zone Receiver
 	0aaa  Logitech G PRO X Gaming Headset
 	0b02  C-UV35 [Bluetooth Mini-Receiver] (HID proxy mode)
 	8801  Video Camera
@@ -2912,6 +2980,7 @@
 	c080  G303 Gaming Mouse
 	c083  G403 Prodigy Gaming Mouse
 	c084  G203 Gaming Mouse
+	c088  G Pro Wireless gaming mouse (wired mode)
 	c08b  G502 SE HERO Gaming Mouse
 	c092  G102/G203 LIGHTSYNC Gaming Mouse
 	c101  UltraX Media Remote
@@ -3062,9 +3131,11 @@
 	c532  Unifying Receiver
 	c534  Unifying Receiver
 	c537  Cordless Mouse Receiver
-	c539  Cordless Mouse Receiver
+	c539  Lightspeed Receiver
 	c53a  PowerPlay Wireless Charging System
 	c53d  G631 Keyboard
+	c542  M185 compact wireless mouse
+	c548  Logi Bolt Receiver
 	c603  3Dconnexion Spacemouse Plus XT
 	c605  3Dconnexion CADman
 	c606  3Dconnexion Spacemouse Classic
@@ -3363,10 +3434,12 @@
 	aa05  DA45
 	ac01  Savi 7xx
 	ad01  GameCom 777 5.1 Headset
+	af00  DA70
 	af01  DA80
 	c008  Audio 655 DSP
 	c00e  Blackwire C310 headset
 	c03b  HD1
+	c053  Blackwire C5220 headset (remote control and 3.5mm audio adapter)
 	ca01  Calisto 800 Series
 	da60  DA60
 0480  Toshiba America Inc
@@ -3457,6 +3530,7 @@
 	91d1  Sensor Hub
 	a171  ThermaData WiFi
 	a2e0  BMeasure instrument
+	a43f  inbed.io - Unified Controller (Gen 2)
 	df11  STM Device in DFU Mode
 	ff10  Swann ST56 Modem
 0484  Specialix
@@ -3481,6 +3555,9 @@
 	e042  Broadcom BCM20702 Bluetooth
 	e04d  Atheros AR3012 Bluetooth
 	e055  BCM43142A0 broadcom bluetooth
+	e07a  Broadcom BCM20702A1 Bluetooth
+	e0c8  MediaTek MT7921 Bluetooth
+	e0cd  MediaTek Bluetooth Adapter
 048a  S-MOS Systems, Inc.
 048c  Alps Electric Ireland, Ltd
 048d  Integrated Technology Express, Inc.
@@ -3489,6 +3566,8 @@
 	1234  Chipsbank CBM2199 Flash Drive
 	1336  SD/MMC Cardreader
 	1345  Multi Cardreader
+	5702  RGB LED Controller
+	6008  8291 RGB keyboard backlight controller
 	8297  IT8297 RGB LED Controller
 	9006  IT9135 BDA Afatech DVB-T HDTV Dongle
 	9009  Zolid HD DVD Maker
@@ -3697,6 +3776,7 @@
 	0180  Hub Type P
 	0181  HID Monitor Controls
 04a7  Visioneer
+	0063  Visioneer DocuMate 152i
 	0100  StrobePro
 	0101  Strobe Pro Scanner (1.01)
 	0102  StrobePro Scanner
@@ -4435,6 +4515,7 @@
 	32d4  Powershot ELPH 185 / IXUS 185 / IXY 200
 	32d5  PowerShot SX430 IS
 	32db  SELPHY CP1300
+	3302  SELPHY CP1500
 04aa  DaeWoo Telecom, Ltd
 04ab  Chromatic Research
 04ac  Micro Audiometrics Corp.
@@ -4514,6 +4595,7 @@
 	0429  D5100
 	042a  D800 (ptp)
 	0430  D7100
+	0434  D610
 	0436  D810
 	043f  D5600
 	0f03  PD-10 Wireless Printer Adapter
@@ -4530,6 +4612,7 @@
 	301a  2-port low-power hub
 	301b  SK-8815 Keyboard
 	301c  Enhanced Performance Keyboard
+	301e  Keyboard with UltraNav (SK-8845RC)
 	3020  Enhanced Performance Keyboard
 	3025  NetVista Full Width Keyboard
 	3100  NetVista Mouse
@@ -4803,6 +4886,7 @@
 	0893  EP-774A
 	0e03  Thermal Receipt Printer [TM-T20]
 	1114  XP-440 [Expression Home Small-in-One Printer]
+	1115  ES-0133 [Expression Home XP-342]
 	1129  ET-4750 [WorkForce ET-4750 EcoTank All-in-One]
 	1168  Workforce WF-7820/7840 Series
 04b9  Rainbow Technologies, Inc.
@@ -4943,6 +5027,7 @@
 	004b  Keyboard
 	004f  SK-9020 keyboard
 	008a  Acer Wired Mouse Model SM-9023
+	00f9  Multimedia Keyboard
 	1766  HID Monitor Controls
 	2004  Bluetooth 4.0 [Broadcom BCM20702A0]
 	2006  Broadcom BCM43142A0 Bluetooth Device
@@ -4957,6 +5042,7 @@
 	7025  HP HD Webcam
 	7046  TOSHIBA Web Camera - HD
 	7054  HP HD Webcam
+	705a  HD Webcam (960×540)
 	9304  Hub
 	f01c  TT1280DA DVB-T TV Tuner
 04cb  Fuji Photo Film Co., Ltd
@@ -5092,6 +5178,8 @@
 04d4  LSI Logic, Inc.
 04d5  Forte Technologies, Inc.
 04d6  Mentor Graphics
+	e301  Bio-Key TouchLock XL All Weather Keyless Bio-Lock with Fingerprint Recognition
+	e302  ZC3202 [4GB Green Book Digital Quran Reading Pen For Home Teaching Quran]
 04d7  Oki Semiconductor
 	1be4  Bluetooth Device
 04d8  Microchip Technology, Inc.
@@ -5102,6 +5190,7 @@
 	0032  PICkit1
 	0033  PICkit2
 	0036  PICkit Serial Analyzer
+	00dd  MCP2221(a) UART/I2C Bridge
 	00e0  PIC32 Starter Board
 	04cd  28Cxxx EEPROM Programmer
 	0a04  AGP LIN Serial Analyzer
@@ -5117,6 +5206,9 @@
 	9015  ICD 4 In-Circuit Debugger
 	c001  PicoLCD 20x4
 	e11c  TL866CS EEPROM Programmer [MiniPRO]
+	e72e  YuanCon
+	e7ee  travisgeis.com Bike Light
+	ec72  Joystick with Rotary Switch Creative Electronics Ltd
 	ed16  BeamiRC 2.0 CNC remote controller analoge
 	edb4  micro PLC (ATSAMD51G19A) [Black Brix ECU II]
 	edb5  ATMEGA32U4 [Black Brix ECU]
@@ -5142,6 +5234,8 @@
 	0006  Wired Keyboard (78/79 key) [RPI Wired Keyboard 5]
 	0022  Portable Keyboard
 	0129  Keyboard [KBPV8000]
+	0169  Keyboard
+	0198  Keyboard
 	0348  Keyboard
 	0407  Keyboard [TEX Shinobi]
 	048e  Optical Mouse
@@ -5565,7 +5659,7 @@
 	685c  GT-I9250 Phone [Galaxy Nexus] (Mass storage mode)
 	685d  GT-I9100 Phone [Galaxy S II] (Download mode)
 	685e  GT-I9100 / GT-C3350 Phones (USB Debugging mode)
-	6860  Galaxy A5 (MTP)
+	6860  Galaxy series, misc. (MTP mode)
 	6863  Galaxy series, misc. (tethering mode)
 	6864  GT-I9070 (network tethering, USB debugging enabled)
 	6865  Galaxy (PTP mode)
@@ -5723,6 +5817,8 @@
 	b5db  HP Webcam
 	b604  Integrated Camera (1280x720@30)
 	b681  ThinkPad T490 Webcam
+	b71a  Integrated IR Camera
+	b76b  SunplusIT Inc [HP HD Camera]
 04f3  Elan Microelectronics Corp.
 	000a  Touchscreen
 	0103  ActiveJet K-2024 Multimedia Keyboard
@@ -5740,6 +5836,7 @@
 	0381  Touchscreen
 	04a0  Dream Cheeky Stress/Panic Button
 	0c28  fingerprint sensor [FeinTech FPS00200]
+	0c3d  Elan:Fingerprint
 	2234  Touchscreen
 04f4  Harting Elektronik, Inc.
 04f5  Fujitsu-ICL Systems, Inc.
@@ -6004,6 +6101,7 @@
 	0240  MFC-J950DN
 	0245  MFC-9560CDW
 	0248  DCP-7055 scanner/printer
+	024a  DCP-7065DN
 	024e  MFC-7460DN
 	0253  DCP-J125
 	0254  DCP-J315W
@@ -6280,6 +6378,7 @@
 	2043  QL-710W Label Printer
 	2044  QL-720NW Label Printer
 	204d  QL-720NW Label Printer (mass storage mode)
+	2060  PT-E550W P-touch Label Printer
 	2061  PT-P700 P-touch Label Printer
 	2064  PT-P700 P-touch Label Printer RemovableDisk
 	2074  PT-D600 P-touch Label Printer
@@ -6603,6 +6702,7 @@
 0535  LIH TZU Electric Co., Ltd
 0536  Hand Held Products (Welch Allyn, Inc.)
 	01a0  PDT
+	01ca  IT4800 Area Imager
 0537  Inventec Corp.
 0538  Caldera International, Inc. (SCO)
 0539  Shyh Shiun Terminals Co., Ltd
@@ -6876,7 +6976,9 @@
 	0485  MHS-PM5 HD camcorder
 	04cb  WALKMAN NWZ-E354
 	0541  DSC-HX100V [Cybershot Digital Still Camera]
+	0568  DSC-H100 in Mass Storage mode
 	05c4  DualShock 4 [CUH-ZCT1x]
+	0643  DSC-H100 in PTP/MTP mode
 	0689  Walkman NWZ-B173F
 	06bb  WALKMAN NWZ-F805
 	06c3  RC-S380
@@ -6890,7 +6992,9 @@
 	088c  Portable Headphone Amplifier
 	08b7  ILCE-6000 (aka Alpha-6000) in MTP mode
 	094e  ILCE-6000 (aka Alpha-6000) in PC Remote mode
+	098d  Walkman NWZ-B183F
 	0994  ILCE-6000 (aka Alpha-6000) in charging mode
+	09c2  D33021 Storage
 	09cc  DualShock 4 [CUH-ZCT2x]
 	0ba0  Dualshock4 Wireless Adaptor
 	0bb5  Headset MDR-1000X
@@ -7261,8 +7365,12 @@
 	039d  DTH-W1320 [MobileStudio Pro 16] internal hub
 	03aa  DTH-W1620 [MobileStudio Pro 16] tablet
 	03ac  DTH-W1620 [MobileStudio Pro 16] touchscreen
+	03b2  DTH167 [Cintiq Pro 16] tablet
+	03b3  DTH167 [Cintiq Pro 16] touchscreen
 	03c5  CTL-4100WL [Intuos BT (S)]
 	03c7  CTL-6100WL [Intuos BT (M)]
+	03dc  PTH-460 [Intuos Pro (S)] tablet
+	03dd  PTH-460 [Intuos Pro BT (S)] tablet
 	0400  PenPartner 4x5
 	4001  TPC4001
 	4004  TPC4004
@@ -7436,6 +7544,7 @@
 	1300  SoftK56 Data Fax Voice CARP
 	1301  Modem Enumerator
 	1328  TrendNet TFM-561 modem
+	1340  CX93010 ACF Modem
 	1804  HP Dock Audio
 	2000  SoftGate 802.11 Adapter
 	2002  SoftGate 802.11 Adapter
@@ -7564,9 +7673,10 @@
 057e  Nintendo Co., Ltd
 	0300  USB-EXI Adapter (GCP-2000)
 	0304  RVT-H Reader
-	0305  Broadcom BCM2045A Bluetooth Radio [Nintendo Wii]
+	0305  Broadcom BCM2045A Bluetooth Radio [Nintendo Wii/Wii U]
 	0306  Wii Remote Controller RVL-003
 	0337  Wii U GameCube Controller Adapter
+	0341  DRH GamePad Host [Nintendo Wii U]
 	2000  Switch
 	2006  Joy-Con L
 	2007  Joy-Con R
@@ -7816,6 +7926,7 @@
 	0304  U2SCX-LVD (SCSI Converter)
 	b000  REX-USB60
 	b020  REX-USB60F
+	b022  RTX-USB60F
 0585  FlashPoint Technology, Inc.
 	0001  Digital Camera
 	0002  Digital Camera
@@ -8049,6 +8160,7 @@
 	106b  Rugged Mini HDD
 	106d  Porsche Design Mobile Drive
 	106e  Porsche Design Desktop Drive
+	1093  Rugged
 	1094  Rugged THB
 	1095  Rugged
 	a601  HardDrive
@@ -8081,6 +8193,7 @@
 	0003  CVA124E Cable Voice Adapter (WDM)
 	0004  CVA122E Cable Voice Adapter (WDM)
 	0008  STA1520 Tuning Adapter
+	0009  Console
 	0a00  Integrated Management Controller Hub
 	0a01  Virtual Keyboard/Mouse
 	0a02  Virtual Mass Storage
@@ -8091,7 +8204,7 @@
 	4002  Bluetooth Headset Series 2
 	4003  Bluetooth Headset Series 2 in DFU mode
 	400d  SoundLink Color II speaker in DFU mode
-	40fe  SoundLink Color II speaker
+	40fe  SoundLink Color II / Flex
 	bc50  SoundLink Wireless Mobile speaker
 	bc51  SoundLink Wireless Mobile speaker in DFU mode
 05a8  Spacetec IMC Corp.
@@ -8208,6 +8321,8 @@
 	1003  Hub in Pro Keyboard [Mitsumi, A1048]
 	1006  Hub in Aluminum Keyboard
 	1008  Mini DisplayPort to Dual-Link DVI Adapter
+	1009  iBus Hub
+	100c  Nova Hub
 	1101  Speakers
 	1105  Audio in LED Cinema Display
 	1107  Thunderbolt Display Audio
@@ -8251,18 +8366,24 @@
 	1299  iPod Touch 3.Gen
 	129a  iPad
 	129c  iPhone 4(CDMA)
+	129d  iPhone
 	129e  iPod Touch 4.Gen
 	129f  iPad 2
 	12a0  iPhone 4S
+	12a1  iPhone
 	12a2  iPad 2 (3G; 64GB)
 	12a3  iPad 2 (CDMA)
 	12a4  iPad 3 (wifi)
 	12a5  iPad 3 (CDMA)
 	12a6  iPad 3 (3G, 16 GB)
-	12a8  iPhone 5/5C/5S/6/SE
+	12a7  TV Device
+	12a8  iPhone 5/5C/5S/6/SE/7/8/X
 	12a9  iPad 2
 	12aa  iPod Touch 5.Gen [A1421]
 	12ab  iPad 4/Mini1
+	12ac  iPhone
+	12af  Watch
+	12b0  HomePod
 	1300  iPod Shuffle
 	1301  iPod Shuffle 2.Gen
 	1302  iPod Shuffle 3.Gen
@@ -8273,7 +8394,12 @@
 	1398  Smart Battery Case
 	1401  Modem
 	1402  Ethernet Adapter [A1277]
+	1460  Digital AV Multiport Adapter
+	1461  VGA Multiport Adapter
+	1463  HDMI Adapter
 	1500  SuperDrive [A1379]
+	1624  Nova
+	1625  iBus
 	8005  OHCI Root Hub Simulation
 	8006  EHCI Root Hub Simulation
 	8007  XHCI Root Hub USB 2.0 Simulation
@@ -8301,6 +8427,7 @@
 	8286  Bluetooth Host Controller
 	8289  Bluetooth Host Controller
 	828c  Bluetooth Host Controller
+	828d  Bluetooth Host Controller
 	8290  Bluetooth Host Controller
 	8300  Built-in iSight (no firmware loaded)
 	8403  Internal Memory Card Reader
@@ -8440,6 +8567,7 @@
 	03b1  Webcam
 	03bc  HP Wide Vision HD Integrated Webcam
 	03cb  HP Wide Vision HD Integrated Webcam
+	03d2  HP TrueVision HD Camera
 	0403  Webcam
 	041b  HP 2.0MP High Definition Webcam
 05c9  Semtech Corp.
@@ -8730,6 +8858,7 @@
 	b018  Multi-Card Reader
 	b047  SDHC Reader [RW047-7000]
 	b051  microSD RDR UHS-I Card Reader [LRWM03U-7000]
+	b054  Dual-Slot Reader [LRW400U]
 	ba02  Workflow CFR1
 	ba0a  Workflow DD512
 	c753  JumpDrive TwistTurn
@@ -8936,7 +9065,7 @@
 	00f2  Keyboard (Labtec Ultra Flat Keyboard)
 	1002  Mobius actioncam (webcam mode)
 	6871  Mouse
-	8611  NTK96550 based camera
+	8611  NTK96550-based camera (mass storage mode)
 0604  Jean Co., Ltd
 0605  Anchor C&C Co., Ltd
 0606  Royal Information Electronics Co., Ltd
@@ -17301,7 +17430,7 @@
 	a001  Bandit Action Camera Batt-Stick
 1391  IdealTEK, Inc.
 	1000  URTC-1000
-1395  Sennheiser Communications
+1395  DSEA A/S
 	0025  Headset [PC 8]
 	0026  SC230
 	0027  SC260
@@ -17343,7 +17472,7 @@
 	0065  MB 660
 	0066  SP 20 D UC
 	0067  SP 20 D MS
-	006b  SC5x5 MS
+	006b  SC6x5
 	0072  Headset
 	3556  USB Headset
 1397  BEHRINGER International GmbH
@@ -17502,7 +17631,7 @@
 	3940  external DVD burner ECD819-SU3
 	3960  INIC-3639
 	3e40  ZALMAN ZM-VE350
-13fe  Kingston Technology Company Inc.
+13fe  Phison Electronics Corp.
 	1a00  512MB/1GB Flash Drive
 	1a23  512MB Flash Drive
 	1d00  DataTraveler 2.0 1GB/4GB Flash Drive / Patriot Xporter 4GB Flash Drive
@@ -21558,6 +21687,12 @@
 	061d  PCTV Deluxe (NTSC) Device
 	061e  PCTV Deluxe (PAL) Device
 	2304  1689
+2309  TimeLink Technology Co., Ltd
+	1001  Touch Device(hid)
+	1005  Touch Device
+	1006  Touch Device(2)
+	1007  MulTouch Device(hid)
+	1009  Touch Device(hid)
 230d  Teracom
 	0103  Huwaii 3g wireless modem
 2314  INQ Mobile
@@ -22333,13 +22468,15 @@
 	5440  TimVideos' HDMI2USB Opsis (FX2) - Unconfigured device
 	5441  TimVideos' HDMI2USB Opsis (FX2) - Firmware load/upgrade
 	5442  TimVideos' HDMI2USB Opsis (FX2) - HDMI/DVI Capture Device
-2a1d  Oxford Nanopore Technologies, Ltd
+2a1d  Oxford Nanopore Technologies plc
 	0000  MinION
 	0001  MinION
 	0010  VolTRAX
 	0011  VolTRAX
 	0020  GridION
 	0021  GridION
+	0120  GridION Mk1 Bay
+	0121  GridION Mk1 Bay
 2a37  RTD Embedded Technologies, Inc.
 	5110  UPS35110/UPS25110
 2a39  RME
@@ -23064,10 +23201,11 @@
 	0832  UT2000/UT3000 Digital Storage Oscilloscope
 595a  IRTOUCHSYSTEMS Co. Ltd.
 	0001  Touchscreen
-5986  Acer, Inc
-	0100  Orbicam
+5986  Bison Electronics Inc.
+	0100  Acer Orbicam
 	0101  USB2.0 Camera
-	0102  Crystal Eye Webcam
+	0102  Acer Crystal Eye Webcam
+	0105  Acer Crystal Eye Webcam
 	0137  HP Webcam
 	0141  BisonCam, NB Pro
 	0149  HP Webcam-101
@@ -23075,7 +23213,7 @@
 	01a6  Lenovo Integrated Webcam
 	01a7  Lenovo Integrated Webcam
 	01a9  Lenovo Integrated Webcam
-	0200  OrbiCam
+	0200  Acer OrbiCam
 	0202  Fujitsu Webcam
 	0203  BisonCam NB Pro 1300
 	0205  Lenovo EasyCamera
diff --git a/man/50-xdg-data-dirs.sh b/man/50-xdg-data-dirs.sh
index ce062e3..0a180ff 100755
--- a/man/50-xdg-data-dirs.sh
+++ b/man/50-xdg-data-dirs.sh
@@ -1,10 +1,11 @@
-#!/bin/bash
+#!/bin/sh
+# SPDX-License-Identifier: MIT-0
 
 # set the default value
 XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}"
 
 # add a directory if it exists
-if [[ -d /opt/foo/share ]]; then
+if [ -d /opt/foo/share ]; then
     XDG_DATA_DIRS="/opt/foo/share:${XDG_DATA_DIRS}"
 fi
 
diff --git a/man/90-rearrange-path.py b/man/90-rearrange-path.py
index 70ee982..5c727e4 100755
--- a/man/90-rearrange-path.py
+++ b/man/90-rearrange-path.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python3
+# SPDX-License-Identifier: MIT-0
 
 """
 
diff --git a/man/binfmt.d.xml b/man/binfmt.d.xml
index 6134b27..ab56460 100644
--- a/man/binfmt.d.xml
+++ b/man/binfmt.d.xml
@@ -41,12 +41,12 @@
     <title>Configuration Format</title>
 
     <para>Each file contains a list of binfmt_misc kernel binary format rules. Consult the kernel's <ulink
-    url="https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html">binfmt-misc.rst</ulink> documentation
-    file for more information on registration of additional binary formats and how to write rules.</para>
+    url="https://docs.kernel.org/admin-guide/binfmt-misc.html">Kernel Support for
+    miscellaneous Binary Formats (binfmt_misc)</ulink> documentation file for more information on
+    registration of additional binary formats and how to write rules.</para>
 
-    <para>Empty lines and lines beginning with ; and # are ignored.
-    Note that this means you may not use ; and # as delimiter in
-    binary format rules.</para>
+    <para>Empty lines and lines beginning with <literal>;</literal> and <literal>#</literal> are ignored.
+    Note that this means you may not use those symbols as the delimiter in binary format rules.</para>
   </refsect1>
 
   <xi:include href="standard-conf.xml" xpointer="confd" />
diff --git a/man/bootctl.xml b/man/bootctl.xml
index d05c3f3..42c4b9a 100644
--- a/man/bootctl.xml
+++ b/man/bootctl.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="bootctl" conditional='ENABLE_EFI'
+<refentry id="bootctl" conditional='HAVE_GNU_EFI'
     xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>bootctl</title>
@@ -46,76 +46,140 @@
       <varlistentry>
         <term><option>status</option></term>
 
-        <listitem><para>Shows brief information about the system firmware, the boot loader that was used to boot the
-        system, the boot loaders currently available in the ESP, the boot loaders listed in the firmware's list of boot
-        loaders and the current default boot loader entry. If no command is specified, this is the implied
-        default.</para></listitem>
+        <listitem><para>Shows brief information about the system firmware, the boot loader that was used to
+        boot the system, the boot loaders currently available in the ESP, the boot loaders listed in the
+        firmware's list of boot loaders and the current default boot loader entry. If no command is
+        specified, this is the implied default.</para>
+
+        <para>See the example below for details of the output.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>reboot-to-firmware</option> <optional><replaceable>BOOL</replaceable></optional></term>
+
+        <listitem><para>Query or set the "Reboot-Into-Firmware-Setup" flag of the EFI firmware. Takes a
+        boolean argument which controls whether to show the firmware setup on next system reboot. If the
+        argument is omitted shows the current status of the flag, or whether the flag is supported. This
+        controls the same flag as <command>systemctl reboot --firmware-setup</command>, but is more low-level
+        and allows setting the flag independently from actually requesting a reboot.</para>
+
+        <para>Hint: use <command>systemctl reboot --firmware-setup</command> to reboot into firmware setup
+        once. See
+        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        for details.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>systemd-efi-options</option> <optional><replaceable>STRING</replaceable></optional></term>
+
+        <listitem><para>When called without the optional argument, prints the current value of the
+        <literal>SystemdOptions</literal> EFI variable. When called with an argument, sets the variable to
+        that value. See
+        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> for the
+        meaning of that variable.</para></listitem>
       </varlistentry>
     </variablelist>
-
-    <varlistentry>
-      <term><option>reboot-to-firmware</option> <optional><replaceable>BOOL</replaceable></optional></term>
-
-      <listitem><para>Query or set the "Reboot-Into-Firmware-Setup" flag of the EFI firmware. Takes a
-      boolean argument which controls whether to show the firmware setup on next system reboot. If the
-      argument is omitted shows the current status of the flag, or whether the flag is supported. This
-      controls the same flag as <command>systemctl reboot --firmware-setup</command>, but is more
-      low-level and allows setting the flag independently from actually requesting a
-      reboot.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-      <term><option>systemd-efi-options</option> <optional><replaceable>STRING</replaceable></optional></term>
-
-      <listitem><para>When called without the optional argument, prints the current value of the
-      <literal>SystemdOptions</literal> EFI variable. When called with an argument, sets the
-      variable to that value. See
-      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-      for the meaning of that variable.</para></listitem>
-    </varlistentry>
   </refsect1>
 
   <refsect1>
     <title>Boot Loader Specification Commands</title>
 
-    <para>These commands are available for all boot loaders that implement the <ulink
-    url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> and/or the <ulink
-    url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>, such as
+    <para>These commands are available for all boot loaders that
+    implement the <ulink
+    url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot
+    Loader Specification</ulink>, such as
     <command>systemd-boot</command>.</para>
 
     <variablelist>
-
       <varlistentry>
         <term><option>list</option></term>
 
         <listitem><para>Shows all available boot loader entries implementing the <ulink
-        url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>, as well as any
+        url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>, as well as any
         other entries discovered or automatically generated by a boot loader implementing the <ulink
-        url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader
-        Interface</ulink>.</para></listitem>
+        url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>.
+        JSON output may be requested with <option>--json=</option>.</para>
+
+        <para>See the example below for details of the output.</para>
+        </listitem>
       </varlistentry>
 
       <varlistentry>
+        <term><option>unlink</option> <replaceable>ID</replaceable></term>
+
+        <listitem><para>Removes a boot loader entry including the files it refers to. Takes a single boot
+        loader entry ID string or a glob pattern as argument. Referenced files such as kernel or initrd are
+        only removed if no other entry refers to them.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>cleanup</option></term>
+
+        <listitem><para>Removes files from the ESP and XBOOTLDR partitions that belong to the entry token but
+        are not referenced in any boot loader entries.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Boot Loader Interface Commands</title>
+
+    <para>These commands are available for all boot loaders that implement the <ulink
+    url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink> and the <ulink
+    url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>, such as
+    <command>systemd-boot</command>.</para>
+
+    <variablelist>
+      <varlistentry>
         <term><option>set-default</option> <replaceable>ID</replaceable></term>
         <term><option>set-oneshot</option> <replaceable>ID</replaceable></term>
 
-        <listitem><para>Sets the default boot loader entry. Takes a single boot loader entry ID string as
-        argument. The <option>set-oneshot</option> command will set the default entry only for the next boot,
-        the <option>set-default</option> will set it persistently for all future boots.</para></listitem>
+        <listitem><para>Sets the default boot loader entry. Takes a single boot loader entry ID string or a glob
+        pattern as argument. The <option>set-oneshot</option> command will set the default entry only for the next boot,
+        the <option>set-default</option> will set it persistently for all future boots.</para>
 
-        <listitem><para>Optionally, the boot loader entry ID may be specified as one of: <option>@default</option>,
+        <para><command>bootctl list</command> can be used to list available boot loader entries and their
+        IDs.</para>
+
+        <para>In addition, the boot loader entry ID may be specified as one of: <option>@default</option>,
         <option>@oneshot</option> or <option>@current</option>, which correspond to the current default boot loader
         entry for all future boots, the current default boot loader entry for the next boot, and the currently booted
         boot loader entry. These special IDs are resolved to the current values of the EFI variables
         <varname>LoaderEntryDefault</varname>, <varname>LoaderEntryOneShot</varname> and <varname>LoaderEntrySelected</varname>,
-        see <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> for details.
+        see <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink> for details.
         These special IDs are primarily useful as a quick way to persistently make the currently booted boot loader
         entry the default choice, or to upgrade the default boot loader entry for the next boot to the default boot
-        loader entry for all future boots, but may be used for other operations too.
-        When an empty string ("") is specified as an ID, then the corresponding EFI variable will be unset.
-        </para></listitem>
+        loader entry for all future boots, but may be used for other operations too.</para>
+
+        <para>If set to <option>@saved</option> the chosen entry will be saved as an EFI variable
+        on every boot and automatically selected the next time the boot loader starts.</para>
+
+        <para>When an empty string ("") is specified as the ID, then the corresponding EFI variable will be
+        unset.</para>
+
+        <para>Hint: use <command>systemctl reboot --boot-loader-entry=<replaceable>ID</replaceable></command>
+        to reboot into a specific boot entry and
+        <command>systemctl reboot --boot-loader-menu=<replaceable>timeout</replaceable></command>
+        to reboot into the boot loader menu once. See
+        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        for details.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>set-timeout</option> <replaceable>TIMEOUT</replaceable></term>
+        <term><option>set-timeout-oneshot</option> <replaceable>TIMEOUT</replaceable></term>
+
+        <listitem><para>Sets the boot loader menu timeout in seconds. The <option>set-timeout-oneshot</option>
+        command will set the timeout only for the next boot. See
+        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+        for details about the syntax of time spans.</para>
+
+        <para>If this is set to <option>menu-hidden</option> or <option>0</option> no menu is shown and
+        the default entry will be booted immediately, while setting this to <option>menu-force</option>
+        disables the timeout while always showing the menu. When an empty string ("") is specified the
+        bootloader will revert to its default menu timeout.</para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -171,7 +235,7 @@
         OS and a new seed to store in the ESP from the combination of both. The random seed passed to the OS
         is credited to the kernel's entropy pool by the system manager during early boot, and permits
         userspace to boot up with an entropy pool fully initialized very early on. Also see
-        <citerefentry><refentrytitle>systemd-boot-system-token.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+        <citerefentry><refentrytitle>systemd-boot-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
 
         <para>See <ulink url="https://systemd.io/RANDOM_SEEDS">Random Seeds</ulink> for further
         information.</para></listitem>
@@ -181,6 +245,26 @@
   </refsect1>
 
   <refsect1>
+    <title>Kernel Image Commands</title>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>kernel-identify</option> <replaceable>kernel</replaceable></term>
+
+        <listitem><para>Takes a kernel image as argument. Checks what kind of kernel the image is. Returns
+        one of <literal>uki</literal>, <literal>pe</literal>, and <literal>unknown</literal>.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>kernel-inspect</option> <replaceable>kernel</replaceable></term>
+
+        <listitem><para>Takes a kernel image as argument. Prints details about the image.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
     <title>Options</title>
     <para>The following options are understood:</para>
 
@@ -195,12 +279,43 @@
       <varlistentry>
         <term><option>--boot-path=</option></term>
         <listitem><para>Path to the Extended Boot Loader partition, as defined in the <ulink
-        url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>. If not
+        url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>. If not
         specified, <filename>/boot/</filename> is checked.  It is recommended to mount the Extended Boot
         Loader partition to <filename>/boot/</filename>, if possible.</para></listitem>
       </varlistentry>
 
       <varlistentry>
+        <term><option>--root=<replaceable>root</replaceable></option></term>
+        <listitem><para>Takes a directory path as an argument. All
+        paths will be prefixed with the given alternate
+        <replaceable>root</replaceable> path, including config search
+        paths. </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--image=<replaceable>image</replaceable></option></term>
+
+        <listitem><para>Takes a path to a disk image file or block device node. If specified, all operations
+        are applied to file system in the indicated disk image. This option is similar to
+        <option>--root=</option>, but operates on file systems stored in disk images or block devices. The
+        disk image should either contain just a file system or a set of file systems within a GPT partition
+        table, following the <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
+        Specification</ulink>. For further information on supported disk images, see
+        <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+        switch of the same name.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--install-source=</option></term>
+        <listitem><para>When installing binaries with <option>--root=</option> or
+        <option>--image=</option>, selects where to source them from. Takes one of <literal>auto</literal>
+        (the default), <literal>image</literal> or <literal>host</literal>. With <literal>auto</literal>
+        binaries will be picked from the specified directory or image, and if not found they will be picked
+        from the host. With <literal>image</literal> or <literal>host</literal> no fallback search will be
+        performed if the binaries are not found in the selected source.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>-p</option></term>
         <term><option>--print-esp-path</option></term>
         <listitem><para>This option modifies the behaviour of <command>status</command>. Only prints the path
@@ -221,7 +336,7 @@
         Specification Type #2 entries should be placed in the directory <literal>$(bootctl
         -x)/EFI/Linux/</literal>.</para>
 
-        <para>Note that this option (similar to the <option>--print-booth-path</option> option mentioned
+        <para>Note that this option (similarly to the <option>--print-booth-path</option> option mentioned
         above), is available independently from the boot loader used, i.e. also without
         <command>systemd-boot</command> being installed.</para></listitem>
       </varlistentry>
@@ -233,40 +348,119 @@
 
       <varlistentry>
         <term><option>--graceful</option></term>
-        <listitem><para>Ignore failure when the EFI System Partition cannot be found, or when EFI variables
-        cannot be written. Currently only applies to random seed operations.</para></listitem>
+        <listitem><para>Ignore failure when the EFI System Partition cannot be found, when EFI variables
+        cannot be written, or a different or newer boot loader is already installed. Currently only applies
+        to <command>is-installed</command>, <command>update</command>, and <command>random-seed</command>
+        verbs.</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><option>--make-machine-id-directory=yes|no|auto</option></term>
-        <listitem><para>Control creation and deletion of the top-level machine ID directory on the file
-        system containing boot loader entries (i.e. beneath the file system returned by the
-        <option>--print-boot-path</option> option, see above) during <option>install</option> and
-        <option>remove</option>, respectively.  <literal>auto</literal> is equivalent to
-        <literal>yes</literal> if <filename>/etc/machine-id</filename> resides on a filesystem other than
-        tmpfs and <literal>no</literal> otherwise (in the latter case the machine ID is likely transient and
-        hence should not be used persistently in the ESP). Defaults to <literal>auto</literal>. See
+        <term><option>-q</option></term>
+        <term><option>--quiet</option></term>
+
+        <listitem><para>Suppress printing of the results of various commands and also the hints about ESP
+        being unavailable.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--make-entry-directory=yes|no</option></term>
+        <listitem><para>Controls creation and deletion of the <ulink
+        url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink> Type #1 entry
+        directory on the file system containing resources such as kernel and initrd images during
+        <option>install</option> and <option>remove</option>, respectively. The directory is named after the
+        entry token, as specified with <option>--entry-token=</option> parameter described below, and is
+        placed immediately below the <varname>$BOOT</varname> root directory (i.e. beneath the file system
+        returned by the <option>--print-boot-path</option> option, see above). Defaults to
+        <literal>no</literal>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--entry-token=</option></term>
+
+        <listitem><para>Controls how to name and identify boot loader entries for this OS
+        installation. Accepted during <option>install</option>, and takes one of <literal>auto</literal>,
+        <literal>machine-id</literal>, <literal>os-id</literal>, <literal>os-image-id</literal> or an
+        arbitrary string prefixed by <literal>literal:</literal> as argument.</para>
+
+        <para>If set to <option>machine-id</option> the entries are named after the machine ID of the running
+        system (e.g. <literal>b0e793a9baf14b5fa13ecbe84ff637ac</literal>). See
         <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
         details about the machine ID concept and file.</para>
 
-        <para>Overriding this may be desirable to hide the machine ID from the (unencrypted) ESP, configure a
-        <citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-        script, or, conversely, commit a transient machine ID.</para>
+        <para>If set to <option>os-id</option> the entries are named after the OS ID of the running system,
+        i.e. the <varname>ID=</varname> field of
+        <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> (e.g.
+        <literal>fedora</literal>). Similarly, if set to <option>os-image-id</option> the entries are named
+        after the OS image ID of the running system, i.e. the <varname>IMAGE_ID=</varname> field of
+        <filename>os-release</filename> (e.g. <literal>vendorx-cashier-system</literal>).</para>
 
-        <para>The top-level machine ID directory is useful to allow smooth multi-boot installations: each
-        installed OS instance will have a different machine ID and thus a separate directory to place its
-        boot-time resources in. If this feature is turned off with this option, care needs to be taken that
-        multiple OS instances do not place conflicting files on the shared ESP and Extended Boot Loader
-        Partitions, or that multiple OS instances are not possible.</para></listitem>
+        <para>If set to <option>auto</option> (the default), the <filename>/etc/kernel/entry-token</filename>
+        file will be read if it exists, and the stored value used.  Otherwise if the local machine ID is
+        initialized it is used. Otherwise <varname>IMAGE_ID=</varname> from <filename>os-release</filename>
+        will be used, if set.  Otherwise, <varname>ID=</varname> from <filename>os-release</filename> will be
+        used, if set.</para>
+
+        <para>Unless set to <literal>machine-id</literal>, or when
+        <option>--make-entry-directory=yes</option> is used the selected token string is written to a file
+        <filename>/etc/kernel/entry-token</filename>, to ensure it will be used for future entries. This file
+        is also read by
+        <citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+        in order to identify under which name to generate boot loader entries for newly installed kernels, or
+        to determine the entry names for removing old ones.</para>
+
+        <para>Using the machine ID for naming the entries is generally preferable, however there are cases
+        where using the other identifiers is a good option. Specifically: if the identification data that the
+        machine ID entails shall not be stored on the (unencrypted) <varname>$BOOT</varname> partition, or if
+        the ID shall be generated on first boot and is not known when the entries are prepared. Note that
+        using the machine ID has the benefit that multiple parallel installations of the same OS can coexist
+        on the same medium, and they can update their boot loader entries independently. When using another
+        identifier (such as the OS ID or the OS image ID), parallel installations of the same OS would try to
+        use the same entry name. To support parallel installations, the installer must use a different entry
+        token when adding a second installation.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--all-architectures</option></term>
+        <listitem><para>Install binaries for all supported EFI architectures (this implies <option>--no-variables</option>).</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--efi-boot-option-description=</option></term>
+        <listitem><para>Description of the entry added to the firmware's boot option list. Defaults to <literal>Linux
+        Boot Manager</literal>.</para>
+
+        <para>Using the default entry name <literal>Linux Boot Manager</literal> is generally preferable as only
+        one bootloader installed to a single ESP partition should be used to boot any number of OS installations
+        found on the various disks installed in the system. Specifically distributions should not use this flag
+        to install a branded entry in the boot option list. However in situations with multiple disks, each with
+        their own ESP partition, it can be beneficial to make it easier to identify the bootloader being used in
+        the firmware's boot option menu.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--dry-run</option></term>
+        <listitem><para>Dry run for <option>--unlink</option> and <option>--cleanup</option>.</para>
+
+        <para>In dry run mode, the unlink and cleanup operations only print the files that would get deleted
+        without actually deleting them.</para></listitem>
       </varlistentry>
 
       <xi:include href="standard-options.xml" xpointer="no-pager"/>
+      <xi:include href="standard-options.xml" xpointer="json" />
       <xi:include href="standard-options.xml" xpointer="help"/>
       <xi:include href="standard-options.xml" xpointer="version"/>
     </variablelist>
   </refsect1>
 
   <refsect1>
+    <title>Signed .efi files</title>
+    <para><command>bootctl</command> <option>install</option> and <option>update</option> will look for a
+    <command>systemd-boot</command> file ending with the <literal>.efi.signed</literal> suffix first, and copy
+    that instead of the normal <literal>.efi</literal> file. This allows distributions or end-users to provide
+    signed images for UEFI SecureBoot.</para>
+  </refsect1>
+
+  <refsect1>
     <title>Exit status</title>
     <para>On success, 0 is returned, a non-zero failure code otherwise.</para>
   </refsect1>
@@ -282,12 +476,117 @@
   </refsect1>
 
   <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>Output from <command>status</command> and <command>list</command></title>
+
+      <programlisting>$ <command>bootctl status</command>
+System:
+     Firmware: UEFI 2.40 (<replaceable>firmware-version</replaceable>)  ← firmware vendor and version
+  Secure Boot: disabled (setup)              ← Secure Boot status
+ TPM2 Support: yes
+ Boot into FW: supported                     ← does the firmware support booting into itself
+
+Current Boot Loader:                         ← details about sd-boot or another boot loader
+      Product: systemd-boot <replaceable>version</replaceable>            implementing the <ulink
+    url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>
+     Features: ✓ Boot counting
+               ✓ Menu timeout control
+               ✓ One-shot menu timeout control
+               ✓ Default entry control
+               ✓ One-shot entry control
+               ✓ Support for XBOOTLDR partition
+               ✓ Support for passing random seed to OS
+               ✓ Load drop-in drivers
+               ✓ Boot loader sets ESP information
+          ESP: /dev/disk/by-partuuid/01234567-89ab-cdef-dead-beef00000000
+         File: └─/EFI/systemd/systemd-bootx64.efi
+
+Random Seed:                                 ← random seed used for entropy in early boot
+ Passed to OS: yes
+ System Token: set
+       Exists: yes
+
+Available Boot Loaders on ESP:
+          ESP: /boot/efi (/dev/disk/by-partuuid/01234567-89ab-cdef-dead-beef00000000)
+         File: └─/EFI/systemd/systemd-bootx64.efi (systemd-boot 251
+         File: └─/EFI/BOOT/BOOTX64.EFI (systemd-boot 251
+
+Boot Loaders Listed in EFI Variables:
+        Title: Linux Boot Manager
+           ID: 0x0001
+       Status: active, boot-order
+    Partition: /dev/disk/by-partuuid/…
+         File: └─/EFI/systemd/systemd-bootx64.efi
+
+        Title: Fedora
+           ID: 0x0000
+       Status: active, boot-order
+    Partition: /dev/disk/by-partuuid/…
+         File: └─/EFI/fedora/shimx64.efi
+
+        Title: Linux-Firmware-Updater
+           ID: 0x0002
+       Status: active, boot-order
+    Partition: /dev/disk/by-partuuid/…
+         File: └─/EFI/fedora/fwupdx64.efi
+
+Boot Loader Entries:
+        $BOOT: /boot/efi (/dev/disk/by-partuuid/01234567-89ab-cdef-dead-beef00000000)
+
+Default Boot Loader Entry:
+         type: Boot Loader Specification Type #1 (.conf)
+        title: Fedora Linux 36 (Workstation Edition)
+           id: …
+       source: /boot/efi/loader/entries/<replaceable>entry-token</replaceable>-<replaceable>kernel-version</replaceable>.conf
+      version: <replaceable>kernel-version</replaceable>
+   machine-id: …
+        linux: /<replaceable>entry-token</replaceable>/<replaceable>kernel-version</replaceable>/linux
+       initrd: /<replaceable>entry-token</replaceable>/<replaceable>kernel-version</replaceable>/initrd
+      options: root=…
+</programlisting>
+
+      <programlisting>$ <command>bootctl list</command>
+Boot Loader Entries:
+         type: Boot Loader Specification Type #1 (.conf)
+        title: Fedora Linux 36 (Workstation Edition) (default) (selected)
+           id: …
+       source: /boot/efi/loader/entries/<replaceable>entry-token</replaceable>-<replaceable>kernel-version</replaceable>.conf
+      version: <replaceable>kernel-version</replaceable>
+   machine-id: …
+        linux: /<replaceable>entry-token</replaceable>/<replaceable>kernel-version</replaceable>/linux
+       initrd: /<replaceable>entry-token</replaceable>/<replaceable>kernel-version</replaceable>/initrd
+      options: root=…
+
+         type: Boot Loader Specification Type #2 (.efi)
+        title: Fedora Linux 35 (Workstation Edition)
+           id: …
+       source: /boot/efi/EFI/Linux/fedora-<replaceable>kernel-version</replaceable>.efi
+      version: <replaceable>kernel-version</replaceable>
+   machine-id: …
+        linux: /EFI/Linux/fedora-<replaceable>kernel-version</replaceable>.efi
+      options: root=…
+
+         type: Automatic
+        title: Reboot Into Firmware Interface
+           id: auto-reboot-to-firmware-setup
+       source: /sys/firmware/efi/efivars/LoaderEntries-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+</programlisting>
+
+       <para>In the listing, <literal>(default)</literal> specifies the entry that will be
+       used by default, and <literal>(selected)</literal> specifies the entry that was
+       selected the last time (i.e. is currently running).</para>
+    </example>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
-      <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>,
+      <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>,
       <ulink url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>,
-      <citerefentry><refentrytitle>systemd-boot-system-token.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>systemd-boot-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
 </refentry>
diff --git a/man/bootup.xml b/man/bootup.xml
index 431d19a..31f7a31 100644
--- a/man/bootup.xml
+++ b/man/bootup.xml
@@ -31,15 +31,15 @@
     boot loader will then invoke an OS kernel from disk (or the network). On systems using EFI or other types
     of firmware, this firmware may also load the kernel directly.</para>
 
-    <para>The kernel (optionally) mounts an in-memory file system, often generated by
-    <citerefentry project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-    which looks for the root file system. Nowadays this is usually implemented as an initramfs — a compressed
-    archive which is extracted when the kernel boots up into a lightweight in-memory file system based on
-    tmpfs, but in the past normal file systems using an in-memory block device (ramdisk) were used, and the
-    name "initrd" is still used to describe both concepts. It's the boot loader or the firmware that loads
-    both the kernel and initrd/initramfs images into memory, but the kernel which interprets it as a file
-    system. <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> may
-    be used to manage services in the initrd, similarly to the real system.</para>
+    <para>The kernel (optionally) mounts an in-memory file system, often generated by <citerefentry
+    project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>, which
+    looks for the root file system. Nowadays this is implemented as an "initramfs" — a compressed CPIO
+    archive that the kernel extracts into a tmpfs. In the past normal file systems using an in-memory block
+    device (ramdisk) were used, and the name "initrd" is still used to describe both concepts. It's the boot
+    loader or the firmware that loads both the kernel and initrd/initramfs images into memory, but the kernel
+    which interprets it as a file system.
+    <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> may be used
+    to manage services in the initrd, similarly to the real system.</para>
 
     <para>After the root file system is found and mounted, the initrd hands over control to the host's system
     manager (such as
@@ -106,21 +106,21 @@
  |  swap.target                       |           |    v     v                 |
  |    |                               v           |  remote-cryptsetup.target  |
  |    |  (various low-level  (various mounts and  |  remote-veritysetup.target |
- |    |   services: udevd,    fsck services...)   |             |    remote-fs.target
- |    |   tmpfiles, random            |           |             |             /
- |    |   seed, sysctl, ...)          v           |             |            /
- |    |      |                 local-fs.target    |             |           /
- |    |      |                        |           |             |          /
- \____|______|_______________   ______|___________/             |         /
-                             \ /                                |        /
-                              v                                 |       /
-                       sysinit.target                           |      /
-                              |                                 |     /
-       ______________________/|\_____________________           |    /
-      /              |        |      |               \          |   /
-      |              |        |      |               |          |  /
-      v              v        |      v               |          | /
- (various       (various      |  (various            |          |/
+ |    |   services: udevd,    fsck services...)   |             |              |
+ |    |   tmpfiles, random            |           |             |    remote-fs.target
+ |    |   seed, sysctl, ...)          v           |             |              |
+ |    |      |                 local-fs.target    |             | _____________/
+ |    |      |                        |           |             |/
+ \____|______|_______________   ______|___________/             |
+                             \ /                                |
+                              v                                 |
+                       sysinit.target                           |
+                              |                                 |
+       ______________________/|\_____________________           |
+      /              |        |      |               \          |
+      |              |        |      |               |          |
+      v              v        |      v               |          |
+ (various       (various      |  (various            |          |
   timers...)      paths...)   |   sockets...)        |          |
       |              |        |      |               |          |
       v              v        |      v               |          |
@@ -174,50 +174,44 @@
     available to the user.</para>
 
 <programlisting>
-    (various           (various         (various
-     timers...)         paths...)        sockets...)    (sound devices)
-         |                  |                 |               |
-         v                  v                 v               v
-   timers.target      paths.target     sockets.target    sound.target
-         |                  |                 |
-         \______________   _|_________________/         (bluetooth devices)
-                        \ /                                   |
-                         V                                    v
-                   basic.target                          bluetooth.target
-                         |
-              __________/ \_______                      (smartcard devices)
-             /                    \                           |
-             |                    |                           v
-             |                    v                      smartcard.target
-             v            graphical-session-pre.target
- (various user services)          |                       (printers)
-             |                    v                           |
-             |       (services for the graphical session)     v
-             |                    |                       printer.target
-             v                    v
-      <emphasis>default.target</emphasis>      graphical-session.target</programlisting>
+   (various           (various         (various
+    timers...)         paths...)        sockets...)    (sound devices)
+        |                  |                 |               |
+        v                  v                 v               v
+  timers.target      paths.target     sockets.target    sound.target
+        |                  |                 |
+        \______________   _|_________________/         (bluetooth devices)
+                       \ /                                   |
+                        V                                    v
+                  basic.target                          bluetooth.target
+                        |
+             __________/ \_______                      (smartcard devices)
+            /                    \                           |
+            |                    |                           v
+            |                    v                      smartcard.target
+            v            graphical-session-pre.target
+(various user services)          |                       (printers)
+            |                    v                           |
+            |       (services for the graphical session)     v
+            |                    |                       printer.target
+            v                    v
+     <emphasis>default.target</emphasis>      graphical-session.target</programlisting>
 
-  </refsect1>
+ </refsect1>
 
   <refsect1>
-    <title>Bootup in the Initial RAM Disk (initrd)</title>
-    <para>The initial RAM disk implementation (initrd) can be set up
-    using systemd as well. In this case, boot up inside the initrd
-    follows the following structure.</para>
+    <title>Bootup in the initrd</title>
 
-    <para>systemd detects that it is run within an initrd by checking
-    for the file <filename>/etc/initrd-release</filename>.
-    The default target in the initrd is
-    <filename>initrd.target</filename>. The bootup process begins
-    identical to the system manager bootup (see above) until it
-    reaches <filename>basic.target</filename>. From there, systemd
-    approaches the special target <filename>initrd.target</filename>.
+    <para>Systemd can be used in the initrd as well. It detects the initrd environment by checking for the
+    <filename>/etc/initrd-release</filename> file. The default target in the initrd is
+    <filename>initrd.target</filename>. The bootup process is identical to the system manager bootup until
+    the target <filename>basic.target</filename>. After that, systemd executes the special target
+    <filename>initrd.target</filename>.
 
-    Before any file systems are mounted, it must be determined whether
-    the system will resume from hibernation or proceed with normal boot.
-    This is accomplished by <filename>systemd-hibernate-resume@.service</filename>
-    which must be finished before <filename>local-fs-pre.target</filename>,
-    so no filesystems can be mounted before the check is complete.
+    Before any file systems are mounted, the manager will determine whether the system shall resume from
+    hibernation or proceed with normal boot. This is accomplished by
+    <filename>systemd-hibernate-resume@.service</filename> which must be finished before
+    <filename>local-fs-pre.target</filename>, so no filesystems can be mounted before the check is complete.
 
     When the root device becomes available,
     <filename>initrd-root-device.target</filename> is reached.
@@ -239,59 +233,59 @@
     <filename>/sysroot</filename>.
     </para>
 
-<programlisting>                                               : (beginning identical to above)
-                                               :
-                                               v
-                                         basic.target
-                                               |                                 emergency.service
-                        ______________________/|                                         |
-                       /                       |                                         v
-                       |            initrd-root-device.target                    <emphasis>emergency.target</emphasis>
-                       |                       |
-                       |                       v
-                       |                  sysroot.mount
-                       |                       |
-                       |                       v
-                       |             initrd-root-fs.target
-                       |                       |
-                       |                       v
-                       v            initrd-parse-etc.service
-                (custom initrd                 |
-                 services...)                  v
-                       |            (sysroot-usr.mount and
-                       |             various mounts marked
-                       |               with fstab option
-                       |              x-initrd.mount...)
-                       |                       |
-                       |                       v
-                       |                initrd-fs.target
-                       \______________________ |
-                                              \|
-                                               v
-                                          initrd.target
-                                               |
-                                               v
-                                     initrd-cleanup.service
-                                          isolates to
-                                    initrd-switch-root.target
-                                               |
-                                               v
-                        ______________________/|
-                       /                       v
-                       |        initrd-udevadm-cleanup-db.service
-                       v                       |
-                (custom initrd                 |
-                 services...)                  |
-                       \______________________ |
-                                              \|
-                                               v
-                                   initrd-switch-root.target
-                                               |
-                                               v
-                                   initrd-switch-root.service
-                                               |
-                                               v
-                                     Transition to Host OS</programlisting>
+<programlisting>                               : (beginning identical to above)
+                               :
+                               v
+                         basic.target
+                               |                       emergency.service
+        ______________________/|                               |
+       /                       |                               v
+       |            initrd-root-device.target          <emphasis>emergency.target</emphasis>
+       |                       |
+       |                       v
+       |                  sysroot.mount
+       |                       |
+       |                       v
+       |             initrd-root-fs.target
+       |                       |
+       |                       v
+       v            initrd-parse-etc.service
+(custom initrd                 |
+ services...)                  v
+       |            (sysroot-usr.mount and
+       |             various mounts marked
+       |               with fstab option
+       |              x-initrd.mount...)
+       |                       |
+       |                       v
+       |                initrd-fs.target
+       \______________________ |
+                              \|
+                               v
+                          initrd.target
+                               |
+                               v
+                     initrd-cleanup.service
+                          isolates to
+                    initrd-switch-root.target
+                               |
+                               v
+        ______________________/|
+       /                       v
+       |        initrd-udevadm-cleanup-db.service
+       v                       |
+(custom initrd                 |
+ services...)                  |
+       \______________________ |
+                              \|
+                               v
+                   initrd-switch-root.target
+                               |
+                               v
+                   initrd-switch-root.service
+                               |
+                               v
+                     Transition to Host OS</programlisting>
   </refsect1>
 
   <refsect1>
@@ -300,33 +294,40 @@
     <para>System shutdown with systemd also consists of various target
     units with some minimal ordering structure applied:</para>
 
-<programlisting>                                  (conflicts with  (conflicts with
-                                    all system     all file system
-                                     services)     mounts, swaps,
-                                         |           cryptsetup/
-                                         |           veritysetup
-                                         |          devices, ...)
-                                         |                |
-                                         v                v
-                                  shutdown.target    umount.target
-                                         |                |
-                                         \_______   ______/
-                                                 \ /
-                                                  v
-                                         (various low-level
-                                              services)
-                                                  |
-                                                  v
-                                            final.target
-                                                  |
-            _____________________________________/ \_________________________________
-           /                         |                        |                      \
-           |                         |                        |                      |
-           v                         v                        v                      v
-systemd-reboot.service   systemd-poweroff.service   systemd-halt.service   systemd-kexec.service
-           |                         |                        |                      |
-           v                         v                        v                      v
-    <emphasis>reboot.target</emphasis>             <emphasis>poweroff.target</emphasis>            <emphasis>halt.target</emphasis>           <emphasis>kexec.target</emphasis></programlisting>
+<programlisting>                       (conflicts with  (conflicts with
+                          all system     all file system
+                           services)     mounts, swaps,
+                               |           cryptsetup/
+                               |           veritysetup
+                               |          devices, ...)
+                               |                |
+                               v                v
+                        shutdown.target    umount.target
+                               |                |
+                               \_______   ______/
+                                       \ /
+                                        v
+                               (various low-level
+                                    services)
+                                        |
+                                        v
+                                  final.target
+                                        |
+            ___________________________/ \_________________
+           /               |               |               \
+           |               |               |               |
+           v               |               |               |
+systemd-reboot.service     |               |               |
+           |               v               |               |
+           |    systemd-poweroff.service   |               |
+           v               |               v               |
+     <emphasis>reboot.target</emphasis>         |      systemd-halt.service     |
+                           v               |               v
+                   <emphasis>poweroff.target</emphasis>         |    systemd-kexec.service
+                                           v               |
+                                      <emphasis>halt.target</emphasis>          |
+                                                           v
+                                                     <emphasis>kexec.target</emphasis></programlisting>
 
     <para>Commonly used system shutdown targets are <emphasis>emphasized</emphasis>.</para>
 
diff --git a/man/busctl.xml b/man/busctl.xml
index cc5a650..294ef5d 100644
--- a/man/busctl.xml
+++ b/man/busctl.xml
@@ -78,10 +78,10 @@
         <term><command>capture</command> <arg choice="opt" rep="repeat"><replaceable>SERVICE</replaceable></arg></term>
 
         <listitem><para>Similar to <command>monitor</command> but
-        writes the output in pcap format (for details, see the <ulink
-        url="https://wiki.wireshark.org/Development/LibpcapFileFormat">Libpcap
-        File Format</ulink> description). Make sure to redirect
-        standard output to a file. Tools like
+        writes the output in pcapng format (for details, see
+        <ulink url="https://github.com/pcapng/pcapng/">
+        PCAP Next Generation (pcapng) Capture File Format</ulink>).
+        Make sure to redirect standard output to a file or pipe. Tools like
         <citerefentry project='die-net'><refentrytitle>wireshark</refentrytitle><manvolnum>1</manvolnum></citerefentry>
         may be used to dissect and view the resulting
         files.</para></listitem>
@@ -411,7 +411,7 @@
     <command>set-property</command> commands take a signature string
     followed by a list of parameters formatted as string (for details
     on D-Bus signature strings, see the <ulink
-    url="http://dbus.freedesktop.org/doc/dbus-specification.html#type-system">Type
+    url="https://dbus.freedesktop.org/doc/dbus-specification.html#type-system">Type
     system chapter of the D-Bus specification</ulink>). For simple
     types, each parameter following the signature should simply be the
     parameter's value formatted as string. Positive boolean values may
diff --git a/man/cgroup-sandboxing.xml b/man/cgroup-sandboxing.xml
new file mode 100644
index 0000000..56f7c40
--- /dev/null
+++ b/man/cgroup-sandboxing.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
+<!--
+  SPDX-License-Identifier: LGPL-2.1-or-later
+-->
+
+<refsect1>
+
+<para id="singular">This option cannot be bypassed by prefixing <literal>+</literal> to the executable path
+in the service unit, as it applies to the whole control group.</para>
+
+<para id="plural">These options cannot be bypassed by prefixing <literal>+</literal> to the executable path
+in the service unit, as it applies to the whole control group.</para>
+
+</refsect1>
diff --git a/man/check-os-release-simple.py b/man/check-os-release-simple.py
index 738b1fd..ce73c77 100644
--- a/man/check-os-release-simple.py
+++ b/man/check-os-release-simple.py
@@ -1,5 +1,5 @@
 #!/usr/bin/python
-# SPDX-License-Identifier: CC0-1.0
+# SPDX-License-Identifier: MIT-0
 
 import platform
 os_release = platform.freedesktop_os_release()
diff --git a/man/check-os-release.py b/man/check-os-release.py
index 68c8f9d..19b193e 100644
--- a/man/check-os-release.py
+++ b/man/check-os-release.py
@@ -1,4 +1,5 @@
 #!/usr/bin/python
+# SPDX-License-Identifier: MIT-0
 
 import ast
 import re
@@ -12,17 +13,18 @@
         filename = '/usr/lib/os-release'
         f = open(filename)
 
-    for line_number, line in enumerate(f):
+    for line_number, line in enumerate(f, start=1):
         line = line.rstrip()
         if not line or line.startswith('#'):
             continue
-        if m := re.match(r'([A-Z][A-Z_0-9]+)=(.*)', line):
+        m = re.match(r'([A-Z][A-Z_0-9]+)=(.*)', line)
+        if m:
             name, val = m.groups()
             if val and val[0] in '"\'':
                 val = ast.literal_eval(val)
             yield name, val
         else:
-            print(f'{filename}:{line_number + 1}: bad line {line!r}',
+            print(f'{filename}:{line_number}: bad line {line!r}',
                   file=sys.stderr)
 
 os_release = dict(read_os_release())
diff --git a/man/check-os-release.sh b/man/check-os-release.sh
index d00c0f9..12f7ee1 100644
--- a/man/check-os-release.sh
+++ b/man/check-os-release.sh
@@ -1,4 +1,5 @@
 #!/bin/sh -eu
+# SPDX-License-Identifier: MIT-0
 
 test -e /etc/os-release && os_release='/etc/os-release' || os_release='/usr/lib/os-release'
 . "${os_release}"
diff --git a/man/common-variables.xml b/man/common-variables.xml
index 2f478cb..0e220b3 100644
--- a/man/common-variables.xml
+++ b/man/common-variables.xml
@@ -90,7 +90,10 @@
       <citerefentry project='man-pages'><refentrytitle>less</refentrytitle><manvolnum>1</manvolnum></citerefentry> and
       <citerefentry project='man-pages'><refentrytitle>more</refentrytitle><manvolnum>1</manvolnum></citerefentry>, until one is found. If
       no pager implementation is discovered no pager is invoked. Setting this environment variable to an empty string
-      or the value <literal>cat</literal> is equivalent to passing <option>--no-pager</option>.</para></listitem>
+      or the value <literal>cat</literal> is equivalent to passing <option>--no-pager</option>.</para>
+
+      <para>Note: if <varname>$SYSTEMD_PAGERSECURE</varname> is not set, <varname>$SYSTEMD_PAGER</varname>
+      (as well as <varname>$PAGER</varname>) will be silently ignored.</para></listitem>
     </varlistentry>
 
     <varlistentry id='less'>
diff --git a/man/coredump.conf.xml b/man/coredump.conf.xml
index 1751191..7cb71f8 100644
--- a/man/coredump.conf.xml
+++ b/man/coredump.conf.xml
@@ -85,7 +85,8 @@
 
         <listitem><para>The maximum size in bytes of a core which will be processed. Core dumps exceeding
         this size may be stored, but the backtrace will not be generated.  Like other sizes in this same
-        config file, the usual suffixes to the base of 1024 are allowed (B, K, M, G, T, P, and E).</para>
+        config file, the usual suffixes to the base of 1024 are allowed (B, K, M, G, T, P, and E). Defaults
+        to 1G on 32bit systems, 32G on 64bit systems.</para>
 
         <para>Setting <varname>Storage=none</varname> and <varname>ProcessSizeMax=0</varname>
         disables all coredump handling except for a log entry.</para>
@@ -96,8 +97,11 @@
         <term><varname>ExternalSizeMax=</varname></term>
         <term><varname>JournalSizeMax=</varname></term>
 
-        <listitem><para>The maximum (compressed or uncompressed) size in bytes of a core to be saved. Unit
-        suffixes are allowed just as in <option>ProcessSizeMax=</option>.</para></listitem>
+        <listitem><para>The maximum (compressed or uncompressed) size in bytes of a core to be saved in
+        separate files on disk (default: 1G on 32bit, 32G on 64bit systems) or in the journal (default:
+        10M). Unit suffixes are allowed just as in <option>ProcessSizeMax=</option>.</para></listitem>
+
+        <para><varname>ExternalSizeMax=infinity</varname> sets the core size to unlimited.</para>
       </varlistentry>
 
       <varlistentry>
diff --git a/man/coredumpctl.xml b/man/coredumpctl.xml
index d45ed75..79632eb 100644
--- a/man/coredumpctl.xml
+++ b/man/coredumpctl.xml
@@ -249,6 +249,26 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--root=<replaceable>ROOT</replaceable></option></term>
+
+        <listitem><para>Use root directory <option>ROOT</option> when searching for coredumps.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--image=<replaceable>image</replaceable></option></term>
+
+        <listitem><para>Takes a path to a disk image file or block device node. If specified, all operations
+        are applied to file system in the indicated disk image. This option is similar to
+        <option>--root=</option>, but operates on file systems stored in disk images or block devices. The
+        disk image should either contain just a file system or a set of file systems within a GPT partition
+        table, following the <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
+        Specification</ulink>. For further information on supported disk images, see
+        <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+        switch of the same name.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>-q</option></term>
         <term><option>--quiet</option></term>
 
@@ -256,6 +276,13 @@
         of access to journal files and possible in-flight coredumps.
         </para></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><option>--all</option></term>
+
+        <listitem><para>Look at all available journal files in <filename>/var/log/journal/</filename>
+        (excluding journal namespaces) instead of only local ones.</para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -327,9 +354,9 @@
       <title>List all the core dumps of a program</title>
 
       <programlisting>$ coredumpctl list /usr/lib64/firefox/firefox
-TIME     PID  UID  GID SIG     COREFILE EXE                         SIZE
-Tue …   8018 1000 1000 SIGSEGV missing  /usr/lib64/firefox/firefox   n/a
-Wed … 251609 1000 1000 SIGTRAP missing  /usr/lib64/firefox/firefox   n/a
+TIME       PID  UID  GID SIG     COREFILE EXE                         SIZE
+Tue …   8018 1000 1000 SIGSEGV missing  /usr/lib64/firefox/firefox     -
+Wed … 251609 1000 1000 SIGTRAP missing  /usr/lib64/firefox/firefox     -
 Fri … 552351 1000 1000 SIGSEGV present  /usr/lib64/firefox/firefox 28.7M
 </programlisting>
 
@@ -373,7 +400,7 @@
     Machine ID: …
       Hostname: …
        Storage: /var/lib/systemd/coredump/core.bash.1000.….zst (present)
-     Disk Size: 51.7K
+  Size on Disk: 51.7K
        Message: Process 130414 (bash) of user 1000 dumped core.
 
                 Stack trace of thread 130414:
diff --git a/man/crypttab.xml b/man/crypttab.xml
index e8c538c..d587f85 100644
--- a/man/crypttab.xml
+++ b/man/crypttab.xml
@@ -94,7 +94,7 @@
     <orderedlist>
 
       <listitem><para>Most prominently, the user may be queried interactively during volume activation
-      (i.e. typically at boot), asking them to type in the necessary passphrase(s).</para></listitem>
+      (i.e. typically at boot), asking them to type in the necessary passphrases.</para></listitem>
 
       <listitem><para>The (unencrypted) key may be read from a file on disk, possibly on removable media. The third field
       of each line encodes the location, for details see above.</para></listitem>
@@ -109,15 +109,15 @@
       then decrypted by the PKCS#11 token with an RSA key stored on it, and then used to unlock the encrypted
       volume. Use the <option>pkcs11-uri=</option> option described below to use this mechanism.</para></listitem>
 
-      <listitem><para>Similar, the key may be acquired via a FIDO2 compatible hardware security token (which
-      must implement the "hmac-secret" extension). In this case a (during enrollment) randomly generated key
-      is stored on disk/removable media, acquired via <constant>AF_UNIX</constant>, or stored in the LUKS2
-      JSON token metadata header. The random key is hashed via a keyed hash function (HMAC) on the FIDO2
-      token, using a secret key stored on the token that never leaves it. The resulting hash value is then
-      used as key to unlock the encrypted volume. Use the <option>fido2-device=</option> option described
-      below to use this mechanism.</para></listitem>
+      <listitem><para>Similarly, the key may be acquired via a FIDO2 compatible hardware security token
+      (which must implement the "hmac-secret" extension). In this case a key generated randomly during
+      enrollment is stored on disk/removable media, acquired via <constant>AF_UNIX</constant>, or stored in
+      the LUKS2 JSON token metadata header. The random key is hashed via a keyed hash function (HMAC) on the
+      FIDO2 token, using a secret key stored on the token that never leaves it. The resulting hash value is
+      then used as key to unlock the encrypted volume. Use the <option>fido2-device=</option> option
+      described below to use this mechanism.</para></listitem>
 
-      <listitem><para>Similar, the key may be acquired via a TPM2 security chip. In this case a (during
+      <listitem><para>Similarly, the key may be acquired via a TPM2 security chip. In this case a (during
       enrollment) randomly generated key — encrypted by an asymmetric key derived from the TPM2 chip's seed
       key — is stored on disk/removable media, acquired via <constant>AF_UNIX</constant>, or stored in the
       LUKS2 JSON token metadata header. Use the <option>tpm2-device=</option> option described below to use
@@ -232,8 +232,8 @@
         <term><option>keyfile-timeout=</option></term>
 
         <listitem><para> Specifies the timeout for the device on
-        which the key file resides and falls back to a password if
-        it could not be mounted. See
+        which the key file resides or the device used as the key file,
+        and falls back to a password if it could not be accessed. See
         <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
         for key files on external devices.
         </para></listitem>
@@ -678,6 +678,63 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>tpm2-pin=</option></term>
+
+        <listitem><para>Takes a boolean argument, defaults to <literal>false</literal>. Controls whether
+        TPM2 volume unlocking is bound to a PIN in addition to PCRs. Similarly, this option is only useful
+        when TPM2 enrollment metadata is not available.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>tpm2-signature=</option></term>
+
+        <listitem><para>Takes an absolute path to a TPM2 PCR JSON signature file, as produced by the
+        <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        tool. This permits locking LUKS2 volumes to any PCR values for which a valid signature matching a
+        public key specified at key enrollment time can be provided. See
+        <citerefentry><refentrytitle>systemd-cryptenroll</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        for details on enrolling TPM2 PCR public keys. If this option is not specified but it is attempted to
+        unlock a LUKS2 volume with a signed TPM2 PCR enrollment a suitable signature file
+        <filename>tpm2-pcr-signature.json</filename> is searched for in <filename>/etc/systemd/</filename>,
+        <filename>/run/systemd/</filename>, <filename>/usr/lib/systemd/</filename> (in this
+        order).</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>tpm2-measure-pcr=</option></term>
+
+        <listitem><para>Controls whether to measure the volume key of the encrypted volume to a TPM2 PCR. If
+        set to "no" (which is the default) no PCR extension is done. If set to "yes" the volume key is
+        measured into PCR 15. If set to a decimal integer in the range 0…23 the volume key is measured into
+        the specified PCR. The volume key is measured along with the activated volume name and its UUID. This
+        functionality is particularly useful for the encrypted volume backing the root file system, as it
+        then allows later TPM objects to be securely bound to the root file system and hence the specific
+        installation.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>tpm2-measure-bank=</option></term>
+
+        <listitem><para>Selects one or more TPM2 PCR banks to measure the volume key into, as configured with
+        <option>tpm2-measure-pcr=</option> above. Multiple banks may be specified, separated by a colon
+        character. If not specified automatically determines available and used banks. Expects a message
+        digest name (e.g. <literal>sha1</literal>, <literal>sha256</literal>, …) as argument, to identify the
+        bank.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>token-timeout=</option></term>
+
+        <listitem><para>Specifies how long to wait at most for configured security devices (i.e. FIDO2,
+        PKCS#11, TPM2) to show up. Takes a time value in seconds (but other time units may be specified too,
+        see <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+        for supported formats). Defaults to 30s. Once the specified timeout elapsed authentication via
+        password is attempted. Note that this timeout applies to waiting for the security device to show up —
+        it does not apply to the PIN prompt for the device (should one be needed) or similar. Pass 0 to turn
+        off the time-out and wait forever.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>try-empty-password=</option></term>
 
         <listitem><para>Takes a boolean argument. If enabled, right before asking the user for a password it
@@ -689,20 +746,16 @@
       <varlistentry>
         <term><option>x-systemd.device-timeout=</option></term>
 
-        <listitem><para>Specifies how long systemd should wait for a device to show up
-        before giving up on the entry. The argument is a time in seconds or explicitly
-        specified units of
-        <literal>s</literal>,
-        <literal>min</literal>,
-        <literal>h</literal>,
-        <literal>ms</literal>.
+        <listitem><para>Specifies how long systemd should wait for a block device to show up before
+        giving up on the entry. The argument is a time in seconds or explicitly specified units of
+        <literal>s</literal>, <literal>min</literal>, <literal>h</literal>, <literal>ms</literal>.
         </para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>x-initrd.attach</option></term>
 
-        <listitem><para>Setup this encrypted block device in the initramfs, similarly to
+        <listitem><para>Setup this encrypted block device in the initrd, similarly to
         <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
         units marked with <option>x-initrd.mount</option>.</para>
 
@@ -713,8 +766,8 @@
         use. With this option the device will still be detached but later after the root file
         system is unmounted.</para>
 
-        <para>All other encrypted block devices that contain file systems mounted in the initramfs
-        should use this option.</para>
+        <para>All other encrypted block devices that contain file systems mounted in the initrd should use
+        this option.</para>
         </listitem>
       </varlistentry>
 
@@ -735,24 +788,25 @@
     project='man-pages'><refentrytitle>unix</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
     details. The source socket name is chosen according the following format:</para>
 
-    <programlisting><constant>NUL</constant> <replaceable>RANDOM</replaceable> <literal>/cryptsetup/</literal> <replaceable>VOLUME</replaceable></programlisting>
+    <programlisting><constant>NUL</constant> <replaceable>RANDOM</replaceable> /cryptsetup/ <replaceable>VOLUME</replaceable></programlisting>
 
     <para>In other words: a <constant>NUL</constant> byte (as required for abstract namespace sockets),
     followed by a random string (consisting of alphanumeric characters only), followed by the literal
     string <literal>/cryptsetup/</literal>, followed by the name of the volume to acquire they key
-    for. Example (for a volume <literal>myvol</literal>):</para>
+    for. For example, for the volume <literal>myvol</literal>:</para>
 
-    <example><programlisting>\0d7067f78d9827418/cryptsetup/myvol</programlisting></example>
+    <programlisting>\0d7067f78d9827418/cryptsetup/myvol</programlisting>
 
     <para>Services listening on the <constant>AF_UNIX</constant> stream socket may query the source socket
     name with <citerefentry
     project='man-pages'><refentrytitle>getpeername</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
-    and use it to determine which key to send, allowing a single listening socket to serve keys for a
-    multitude of volumes. If the PKCS#11 logic is used (see above) the socket source name is picked in
-    identical fashion, except that the literal string <literal>/cryptsetup-pkcs11/</literal> is used (similar
-    for FIDO2: <literal>/cryptsetup-fido2/</literal> and TPM2: <literal>/cryptsetup-tpm2/</literal>). This is
-    done so that services providing key material know that not a secret key is requested but an encrypted key
-    that will be decrypted via the PKCS#11/FIDO2/TPM2 logic to acquire the final secret key.</para>
+    and use this to determine which key to send, allowing a single listening socket to serve keys for
+    multiple volumes. If the PKCS#11 logic is used (see above), the socket source name is picked in similar
+    fashion, except that the literal string <literal>/cryptsetup-pkcs11/</literal> is used. And similarly for
+    FIDO2 (<literal>/cryptsetup-fido2/</literal>) and TPM2 (<literal>/cryptsetup-tpm2/</literal>). A different
+    path component is used so that services providing key material know that the secret key was not requested
+    directly, but instead an encrypted key that will be decrypted via the PKCS#11/FIDO2/TPM2 logic to acquire
+    the final secret key.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/custom-entities.ent.in b/man/custom-entities.ent.in
index 0e9a1b8..0376e0f 100644
--- a/man/custom-entities.ent.in
+++ b/man/custom-entities.ent.in
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" ?>
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 <!ENTITY MOUNT_PATH "{{MOUNT_PATH}}">
 <!ENTITY UMOUNT_PATH "{{UMOUNT_PATH}}">
 <!ENTITY SYSTEM_GENERATOR_DIR "{{SYSTEM_GENERATOR_DIR}}">
@@ -14,5 +15,7 @@
 <!ENTITY HIGH_RLIMIT_NOFILE "{{HIGH_RLIMIT_NOFILE}}">
 <!ENTITY DEFAULT_DNSSEC_MODE "{{DEFAULT_DNSSEC_MODE_STR}}">
 <!ENTITY DEFAULT_DNS_OVER_TLS_MODE "{{DEFAULT_DNS_OVER_TLS_MODE_STR}}">
-<!ENTITY fedora_latest_version "35">
-<!ENTITY fedora_cloud_release "1.2">
+<!ENTITY DEFAULT_TIMEOUT "{{DEFAULT_TIMEOUT_SEC}} s">
+<!ENTITY DEFAULT_USER_TIMEOUT "{{DEFAULT_USER_TIMEOUT_SEC}} s">
+<!ENTITY fedora_latest_version "36">
+<!ENTITY fedora_cloud_release "1.5">
diff --git a/man/custom-html.xsl b/man/custom-html.xsl
index 6e4dc27..8b21e15 100644
--- a/man/custom-html.xsl
+++ b/man/custom-html.xsl
@@ -30,7 +30,7 @@
 <xsl:template match="citerefentry[@project='man-pages'] | citerefentry[manvolnum='2'] | citerefentry[manvolnum='4']">
   <a>
     <xsl:attribute name="href">
-      <xsl:text>http://man7.org/linux/man-pages/man</xsl:text>
+      <xsl:text>https://man7.org/linux/man-pages/man</xsl:text>
       <xsl:value-of select="manvolnum"/>
       <xsl:text>/</xsl:text>
       <xsl:value-of select="refentrytitle"/>
@@ -124,7 +124,7 @@
 <xsl:template match="citerefentry[@project='dbus']">
   <a>
     <xsl:attribute name="href">
-      <xsl:text>http://dbus.freedesktop.org/doc/</xsl:text>
+      <xsl:text>https://dbus.freedesktop.org/doc/</xsl:text>
       <xsl:value-of select="refentrytitle"/>
       <xsl:text>.</xsl:text>
       <xsl:value-of select="manvolnum"/>
diff --git a/man/dnssec-trust-anchors.d.xml b/man/dnssec-trust-anchors.d.xml
index b0e95ce..39b9515 100644
--- a/man/dnssec-trust-anchors.d.xml
+++ b/man/dnssec-trust-anchors.d.xml
@@ -66,7 +66,7 @@
     <ulink url="https://tools.ietf.org/html/rfc1035#section-5">RFC 1035, Section 5</ulink>. One <constant
     class='dns'>DS</constant> or <constant class='dns'>DNSKEY</constant> resource record may be listed per
     line. Empty lines and lines starting with <literal>#</literal> or <literal>;</literal> are ignored, which
-    may be used for commenting. A <consant class='dns'>DS</consant> resource record is specified like in the
+    may be used for commenting. A <constant class='dns'>DS</constant> resource record is specified like in the
     following example:</para>
 
     <programlisting>. IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5</programlisting>
diff --git a/man/event-quick-child.c b/man/event-quick-child.c
new file mode 100644
index 0000000..8195efb
--- /dev/null
+++ b/man/event-quick-child.c
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <assert.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sd-event.h>
+
+int main(int argc, char **argv) {
+  pid_t pid = fork();
+  assert(pid >= 0);
+
+  /* SIGCHLD signal must be blocked for sd_event_add_child to work */
+  sigset_t ss;
+  sigemptyset(&ss);
+  sigaddset(&ss, SIGCHLD);
+  sigprocmask(SIG_BLOCK, &ss, NULL);
+
+  if (pid == 0)  /* child */
+    sleep(1);
+
+  else {         /* parent */
+    sd_event *e = NULL;
+    int r;
+
+    /* Create the default event loop */
+    sd_event_default(&e);
+    assert(e);
+
+    /* We create a floating child event source (attached to 'e').
+     * The default handler will be called with 666 as userdata, which
+     * will become the exit value of the loop. */
+    r = sd_event_add_child(e, NULL, pid, WEXITED, NULL, (void*) 666);
+    assert(r >= 0);
+
+    r = sd_event_loop(e);
+    assert(r == 666);
+
+    sd_event_unref(e);
+  }
+
+  return 0;
+}
diff --git a/man/fido2-crypttab.sh b/man/fido2-crypttab.sh
index 49e536c..b584a13 100644
--- a/man/fido2-crypttab.sh
+++ b/man/fido2-crypttab.sh
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: MIT-0
+
 # Enroll the security token in the LUKS2 volume. Replace /dev/sdXn by the
 # partition to use (e.g. /dev/sda1).
 sudo systemd-cryptenroll --fido2-device=auto /dev/sdXn
@@ -7,4 +9,4 @@
 
 # If that worked, let's now add the same line persistently to /etc/crypttab,
 # for the future.
-sudo bash -c 'echo "mytest /dev/sdXn - fido2-device=auto" >> /etc/crypttab'
+sudo bash -c 'echo "mytest /dev/sdXn - fido2-device=auto" >>/etc/crypttab'
diff --git a/man/file-hierarchy.xml b/man/file-hierarchy.xml
index c352212..4961f01 100644
--- a/man/file-hierarchy.xml
+++ b/man/file-hierarchy.xml
@@ -30,8 +30,8 @@
     specification and <citerefentry
     project='man-pages'><refentrytitle>hier</refentrytitle><manvolnum>7</manvolnum></citerefentry>, with various
     extensions, partially documented in the <ulink
-    url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG Base Directory
-    Specification</ulink> and <ulink url="https://www.freedesktop.org/wiki/Software/xdg-user-dirs/">XDG User
+    url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG Base Directory
+    Specification</ulink> and <ulink url="https://www.freedesktop.org/wiki/Software/xdg-user-dirs">XDG User
     Directories</ulink>. This manual page describes a more generalized, though minimal and modernized subset of these
     specifications that defines more strictly the suggestions and restrictions systemd makes on the file system
     hierarchy.</para>
@@ -155,9 +155,8 @@
     <variablelist>
       <varlistentry>
         <term><filename>/run/</filename></term>
-        <listitem><para>A <literal>tmpfs</literal> file system for
-        system packages to place runtime data in. This directory is
-        flushed on boot, and generally writable for privileged
+        <listitem><para>A <literal>tmpfs</literal> file system for system packages to place runtime data,
+        socket files, and similar. This directory is flushed on boot, and generally writable for privileged
         programs only. Always writable.</para></listitem>
       </varlistentry>
 
@@ -178,7 +177,7 @@
         directory directly, but via the
         <varname>$XDG_RUNTIME_DIR</varname> environment variable, as
         documented in the <ulink
-        url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
+        url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
         Base Directory Specification</ulink>.</para></listitem>
       </varlistentry>
     </variablelist>
@@ -288,17 +287,13 @@
     <variablelist>
       <varlistentry>
         <term><filename>/var/</filename></term>
-        <listitem><para>Persistent, variable system data. Must be
-        writable. This directory might be pre-populated with
-        vendor-supplied data, but applications should be able to
-        reconstruct necessary files and directories in this
-        subhierarchy should they be missing, as the system might start
-        up without this directory being populated. Persistency is
-        recommended, but optional, to support ephemeral systems. This
-        directory might become available or writable only very late
-        during boot. Components that are required to operate during
-        early boot hence shall not unconditionally rely on this
-        directory.</para></listitem>
+        <listitem><para>Persistent, variable system data. Writable during normal system operation. This
+        directory might be pre-populated with vendor-supplied data, but applications should be able to
+        reconstruct necessary files and directories in this subhierarchy should they be missing, as the
+        system might start up without this directory being populated. Persistency is recommended, but
+        optional, to support ephemeral systems. This directory might become available or writable only very
+        late during boot. Components that are required to operate during early boot hence shall not
+        unconditionally rely on this directory.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -501,10 +496,10 @@
     the user's home directory. They should follow the following basic
     structure. Note that some of these directories are also
     standardized (though more weakly) by the <ulink
-    url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
+    url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
     Base Directory Specification</ulink>. Additional locations for
     high-level user resources are defined by <ulink
-    url="https://www.freedesktop.org/wiki/Software/xdg-user-dirs/">xdg-user-dirs</ulink>.</para>
+    url="https://www.freedesktop.org/wiki/Software/xdg-user-dirs">xdg-user-dirs</ulink>.</para>
 
     <variablelist>
       <varlistentry>
@@ -579,48 +574,69 @@
   </refsect1>
 
   <refsect1>
-    <title>Unprivileged Write Access</title>
+    <title>Write Access</title>
 
-    <para>Unprivileged processes generally lack write access to most
-    of the hierarchy.</para>
+    <refsect2>
+      <title>Unprivileged Write Access</title>
 
-    <para>The exceptions for normal users are
-    <filename>/tmp/</filename>,
-    <filename>/var/tmp/</filename>,
-    <filename>/dev/shm/</filename>, as well as the home directory
-    <varname>$HOME</varname> (usually found below
-    <filename>/home/</filename>) and the runtime directory
-    <varname>$XDG_RUNTIME_DIR</varname> (found below
-    <filename>/run/user/</filename>) of the user, which are all
-    writable.</para>
+      <para>Unprivileged processes generally lack write access to most of the hierarchy.</para>
 
-    <para>For unprivileged system processes, only
-    <filename>/tmp/</filename>,
-    <filename>/var/tmp/</filename> and
-    <filename>/dev/shm/</filename> are writable. If an
-    unprivileged system process needs a private writable directory in
-    <filename>/var/</filename> or <filename>/run/</filename>, it is
-    recommended to either create it before dropping privileges in the
-    daemon code, to create it via
-    <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    fragments during boot, or via the
-    <varname>StateDirectory=</varname> and <varname>RuntimeDirectory=</varname>
-    directives of service units (see
-    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    for details).</para>
+      <para>The exceptions for normal users are
+      <filename>/tmp/</filename>,
+      <filename>/var/tmp/</filename>,
+      <filename>/dev/shm/</filename>, as well as the home directory
+      <varname>$HOME</varname> (usually found below
+      <filename>/home/</filename>) and the runtime directory
+      <varname>$XDG_RUNTIME_DIR</varname> (found below
+      <filename>/run/user/</filename>) of the user, which are all
+      writable.</para>
 
-    <para><filename>/tmp/</filename>, <filename>/var/tmp/</filename> and <filename>/dev/shm/</filename>
-    should be mounted <option>nosuid</option> and <option>nodev</option>, which means that set-user-id mode
-    and character or block special devices are not interpreted on those file systems. In general it is not
-    possible to mount them <option>noexec</option>, because various programs use those directories for
-    dynamically generated or optimized code, and with that flag those use cases would break. Using this flag
-    is OK on special-purpose installations or systems where all software that may be installed is known and
-    doesn't require such functionality. See the discussion of
-    <option>nosuid</option>/<option>nodev</option>/<option>noexec</option> in <citerefentry
-    project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> and
-    <constant>PROT_EXEC</constant> in <citerefentry
-    project='man-pages'><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
-    </para>
+      <para>For unprivileged system processes, only
+      <filename>/tmp/</filename>,
+      <filename>/var/tmp/</filename> and
+      <filename>/dev/shm/</filename> are writable. If an
+      unprivileged system process needs a private writable directory in
+      <filename>/var/</filename> or <filename>/run/</filename>, it is
+      recommended to either create it before dropping privileges in the
+      daemon code, to create it via
+      <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+      fragments during boot, or via the
+      <varname>StateDirectory=</varname> and <varname>RuntimeDirectory=</varname>
+      directives of service units (see
+      <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+      for details).</para>
+
+      <para><filename>/tmp/</filename>, <filename>/var/tmp/</filename> and <filename>/dev/shm/</filename>
+      should be mounted <option>nosuid</option> and <option>nodev</option>, which means that set-user-id mode
+      and character or block special devices are not interpreted on those file systems. In general it is not
+      possible to mount them <option>noexec</option>, because various programs use those directories for
+      dynamically generated or optimized code, and with that flag those use cases would break. Using this
+      flag is OK on special-purpose installations or systems where all software that may be installed is
+      known and doesn't require such functionality. See the discussion of
+      <option>nosuid</option>/<option>nodev</option>/<option>noexec</option> in <citerefentry
+      project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> and
+      <constant>PROT_EXEC</constant> in <citerefentry
+      project='man-pages'><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
+      </para>
+    </refsect2>
+
+    <refsect2>
+      <title>Lack of Write Access on Read-Only Systems and during System Recovery</title>
+
+      <para>As noted above, some systems operate with the <filename>/usr</filename> and
+      <filename>/etc</filename> hierarchies mounted read-only, possibly only allowing write access during
+      package upgrades. Other part of the hierarchy are generally mounted read-write (in particular
+      <filename>/var</filename> and <filename>/var/tmp</filename>), but may be read-only when the kernel
+      remounts the file system read-only in response to errors, or when the system is booted read-only for
+      recovery purposes. To the extent reasonable, applications should be prepared to execute without write
+      access, so that for example, failure to save non-essential data to <filename>/var/cache/</filename> or
+      failure to create a custom log file under <filename>/var/log</filename> does not prevent the
+      application from running.</para>
+
+      <para>The <filename>/run/</filename> directory is available since the earliest boot and is always
+      writable. It should be used for any runtime data and sockets, so that write access to e.g.
+      <filename>/etc</filename> or <filename>/var</filename> is not needed.</para>
+    </refsect2>
   </refsect1>
 
   <refsect1>
diff --git a/man/glib-event-glue.c b/man/glib-event-glue.c
index 5201234..61e8bf6 100644
--- a/man/glib-event-glue.c
+++ b/man/glib-event-glue.c
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: MIT */
+/* SPDX-License-Identifier: MIT-0 */
 
 #include <stdlib.h>
 #include <glib.h>
diff --git a/man/halt.xml b/man/halt.xml
deleted file mode 100644
index 4b3beb8..0000000
--- a/man/halt.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version='1.0'?> <!--*-nxml-*-->
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
-
-<refentry id="halt"
-    xmlns:xi="http://www.w3.org/2001/XInclude">
-
-  <refentryinfo>
-    <title>halt</title>
-    <productname>systemd</productname>
-  </refentryinfo>
-
-  <refmeta>
-    <refentrytitle>halt</refentrytitle>
-    <manvolnum>8</manvolnum>
-  </refmeta>
-
-  <refnamediv>
-    <refname>halt</refname>
-    <refname>poweroff</refname>
-    <refname>reboot</refname>
-    <refpurpose>Halt, power-off or reboot the machine</refpurpose>
-  </refnamediv>
-
-  <refsynopsisdiv>
-    <cmdsynopsis>
-      <command>halt</command>
-      <arg choice="opt" rep="repeat">OPTIONS</arg>
-    </cmdsynopsis>
-    <cmdsynopsis>
-      <command>poweroff</command>
-      <arg choice="opt" rep="repeat">OPTIONS</arg>
-    </cmdsynopsis>
-    <cmdsynopsis>
-      <command>reboot</command>
-      <arg choice="opt" rep="repeat">OPTIONS</arg>
-    </cmdsynopsis>
-  </refsynopsisdiv>
-
-  <refsect1>
-    <title>Description</title>
-
-    <para><command>halt</command>, <command>poweroff</command>, <command>reboot</command> may be used to
-    halt, power-off, or reboot the machine. All three commands take the same options.</para>
-
-  </refsect1>
-
-  <refsect1>
-    <title>Options</title>
-
-    <para>The following options are understood:</para>
-
-    <variablelist>
-      <varlistentry>
-        <term><option>--help</option></term>
-
-        <xi:include href="standard-options.xml" xpointer="help-text" />
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--halt</option></term>
-
-        <listitem><para>Halt the machine, regardless of which one of
-        the three commands is invoked.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-p</option></term>
-        <term><option>--poweroff</option></term>
-
-        <listitem><para>Power-off the machine, regardless of which one
-        of the three commands is invoked.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--reboot</option></term>
-
-        <listitem><para>Reboot the machine, regardless of which one of
-        the three commands is invoked.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-f</option></term>
-        <term><option>--force</option></term>
-
-        <listitem><para>Force immediate halt, power-off, or reboot. When
-        specified once, this results in an immediate but clean shutdown
-        by the system manager. When specified twice, this results in an
-        immediate shutdown without contacting the system manager. See the
-        description of <option>--force</option> in
-        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-        for more details.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-w</option></term>
-        <term><option>--wtmp-only</option></term>
-
-        <listitem><para>Only write wtmp shutdown entry, do not
-        actually halt, power-off, reboot.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-d</option></term>
-        <term><option>--no-wtmp</option></term>
-
-        <listitem><para>Do not write wtmp shutdown
-        entry.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-n</option></term>
-        <term><option>--no-sync</option></term>
-
-        <listitem><para>Don't sync hard disks/storage media before
-        halt, power-off, reboot.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--no-wall</option></term>
-
-        <listitem><para>Do not send wall message before halt,
-        power-off, reboot.</para></listitem>
-      </varlistentry>
-    </variablelist>
-  </refsect1>
-
-  <refsect1>
-    <title>Exit status</title>
-
-    <para>On success, 0 is returned, a non-zero failure code
-    otherwise.</para>
-  </refsect1>
-
-  <refsect1>
-    <title>Notes</title>
-
-    <para>These commands are implemented in a way that preserves basic compatibility with the original SysV
-    commands.  <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    verbs <command>halt</command>, <command>poweroff</command>, <command>reboot</command> provide the same
-    functionality with some additional features.</para>
-
-    <para>Note that on many SysV systems <command>halt</command> used to be synonymous to
-    <command>poweroff</command>, i.e. both commands would equally result in powering the machine off. systemd
-    is more accurate here, and <command>halt</command> results in halting the machine only (leaving power
-    on), and <command>poweroff</command> is required to actually power it off.</para>
-  </refsect1>
-
-  <refsect1>
-    <title>See Also</title>
-    <para>
-      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-      <citerefentry project='man-pages'><refentrytitle>wall</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    </para>
-  </refsect1>
-
-</refentry>
diff --git a/man/homectl.xml b/man/homectl.xml
index f617205..634b95a 100644
--- a/man/homectl.xml
+++ b/man/homectl.xml
@@ -288,12 +288,16 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>--setenv=</option><replaceable>VARIABLE</replaceable>=<replaceable>VALUE</replaceable></term>
+        <term><option>--setenv=</option><replaceable>VARIABLE</replaceable>[=<replaceable>VALUE</replaceable>]</term>
 
-        <listitem><para>Takes an environment variable assignment to set for all user processes. Note that a
-        number of other settings also result in environment variables to be set for the user, including
-        <option>--email=</option>, <option>--timezone=</option> and <option>--language=</option>. May be used
-        multiple times to set multiple environment variables.</para></listitem>
+        <listitem><para>Takes an environment variable assignment to set for all user processes. May be used
+        multiple times to set multiple environment variables. When <literal>=</literal> and
+        <replaceable>VALUE</replaceable> are omitted, the value of the variable with the same name in the
+        program environment will be used.</para>
+
+        <para>Note that a number of other settings also result in environment variables to be set for the
+        user, including <option>--email=</option>, <option>--timezone=</option> and
+        <option>--language=</option>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -353,6 +357,19 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--fido2-credential-algorithm=</option><replaceable>STRING</replaceable></term>
+        <listitem><para>Specify COSE algorithm used in credential generation. The default value is
+        <literal>es256</literal>. Supported values are <literal>es256</literal>, <literal>rs256</literal>
+        and <literal>eddsa</literal>.</para>
+
+        <para><literal>es256</literal> denotes ECDSA over NIST P-256 with SHA-256. <literal>rs256</literal>
+        denotes 2048-bit RSA with PKCS#1.5 padding and SHA-256. <literal>eddsa</literal> denotes
+        EDDSA over Curve25519 with SHA-512.</para>
+
+        <para>Note that your authenticator may not support some algorithms.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--fido2-device=</option><replaceable>PATH</replaceable></term>
 
         <listitem><para>Takes a path to a Linux <literal>hidraw</literal> device
@@ -372,8 +389,8 @@
         <para>Note that FIDO2 devices suitable for this option must implement the
         <literal>hmac-secret</literal> extension. Most current devices (such as the YubiKey 5 series) do. If
         the extension is not implemented the device cannot be used for unlocking home directories.</para>
-          
-        <para>The FIDO2 device may be subsequently removed by setting the device path to an empty string 
+
+        <para>The FIDO2 device may be subsequently removed by setting the device path to an empty string
         (e.g. <command>homectl update $USER --fido2-device=""</command>).</para>
 
         <para>Note that many hardware security tokens implement both FIDO2 and PKCS#11/PIV (and thus may be
@@ -500,10 +517,13 @@
       <varlistentry>
         <term><option>--disk-size=</option><replaceable>BYTES</replaceable></term>
         <listitem><para>Either takes a size in bytes as argument (possibly using the usual K, M, G, …
-        suffixes for 1024 base values), or a percentage value and configures the disk space to assign to the
-        user. If a percentage value is specified (i.e. the argument suffixed with <literal>%</literal>) it is
-        taken relative to the available disk space of the backing file system. If the LUKS2 backend is used
-        this configures the size of the loopback file and file system contained therein. For the other
+        suffixes for 1024 base values), a percentage value, or the special strings <literal>min</literal> or
+        <literal>max</literal>, and configures the disk space to assign to the user. If a percentage value is
+        specified (i.e. the argument suffixed with <literal>%</literal>) it is taken relative to the
+        available disk space of the backing file system. If specified as <literal>min</literal> assigns the
+        minimal disk space permitted by the constraints of the backing file system and other limits, when
+        specified as <literal>max</literal> assigns the maximum disk space available. If the LUKS2 backend is
+        used this configures the size of the loopback file and file system contained therein. For the other
         storage backends configures disk quota using the filesystem's native quota logic, if available. If
         not specified, defaults to 85% of the available disk space for the LUKS2 backend and to no quota for
         the others.</para></listitem>
@@ -610,6 +630,17 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--drop-caches=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>Automatically flush OS file system caches on logout. This is useful in combination
+        with the fscrypt storage backend to ensure the OS does not keep decrypted versions of the files and
+        directories in memory (and accessible) after logout. This option is also supported on other backends,
+        but should not bring any benefit there. Defaults to off, except if the selected storage backend is
+        fscrypt, where it defaults to on. Note that flushing OS caches will negatively influence performance
+        of the OS shortly after logout.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--fs-type=</option><replaceable>TYPE</replaceable></term>
 
         <listitem><para>When LUKS2 storage is used configures the file system type to use inside the home
@@ -645,19 +676,72 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--luks-extra-mount-options=</option><replaceable>OPTIONS</replaceable></term>
+
+        <listitem><para>Takes a string containing additional mount options to use when mounting the LUKS
+        volume. If specified, this string will be appended to the default, built-in mount
+        options.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--luks-cipher=</option><replaceable>CIPHER</replaceable></term>
         <term><option>--luks-cipher-mode=</option><replaceable>MODE</replaceable></term>
-        <term><option>--luks-volume-key-size=</option><replaceable>BITS</replaceable></term>
+        <term><option>--luks-volume-key-size=</option><replaceable>BYTES</replaceable></term>
         <term><option>--luks-pbkdf-type=</option><replaceable>TYPE</replaceable></term>
         <term><option>--luks-pbkdf-hash-algorithm=</option><replaceable>ALGORITHM</replaceable></term>
+        <term><option>--luks-pbkdf-force-iterations=</option><replaceable>ITERATIONS</replaceable></term>
         <term><option>--luks-pbkdf-time-cost=</option><replaceable>SECONDS</replaceable></term>
         <term><option>--luks-pbkdf-memory-cost=</option><replaceable>BYTES</replaceable></term>
         <term><option>--luks-pbkdf-parallel-threads=</option><replaceable>THREADS</replaceable></term>
+        <term><option>--luks-sector-size=</option><replaceable>BYTES</replaceable></term>
 
         <listitem><para>Configures various cryptographic parameters for the LUKS2 storage mechanism. See
         <citerefentry
         project='man-pages'><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-        for details on the specific attributes.</para></listitem>
+        for details on the specific attributes.</para>
+
+        <para>Note that <command>homectl</command> uses bytes for key size, like
+        <filename>/proc/crypto</filename>, but <citerefentry
+        project='man-pages'><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        uses bits.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--auto-resize-mode=</option></term>
+
+        <listitem><para>Configures whether to automatically grow and/or shrink the backing file system on
+        login and logout. Takes one of the strings <literal>off</literal>, <literal>grow</literal>,
+        <literal>shrink-and-grow</literal>. Only applies to the LUKS2 backend currently, and if the btrfs
+        file system is used inside it (since only then online growing/shrinking of the file system is
+        supported). Defaults to <literal>shrink-and-grow</literal>, if LUKS2/btrfs is used, otherwise is
+        off. If set to <literal>off</literal> no automatic shrinking/growing during login or logout is
+        done. If set to <literal>grow</literal> the home area is grown to the size configured via
+        <option>--disk-size=</option> should it currently be smaller. If it already matches the configured
+        size or is larger no operation is executed. If set to <literal>shrink-and-grow</literal> the home
+        area is also resized during logout to the minimal size the used disk space and file system
+        constraints permit. This mode thus ensures that while a home area is activated it is sized to the
+        configured size, but while deactivated it is compacted taking up only the minimal space possible.
+        Note that if the system is powered off abnormally or if the user otherwise not logged out cleanly the
+        shrinking operation will not take place, and the user has to re-login/logout again before it is
+        executed again.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--rebalance-weight=</option></term>
+
+        <listitem><para>Configures the weight parameter for the free disk space rebalancing logic. Only
+        applies to the LUKS2 backend (since for the LUKS2 backend disk space is allocated from a per-user
+        loopback file system instead of immediately from a common pool like the other backends do it). In
+        regular intervals free disk space in the active home areas and their backing storage is redistributed
+        among them, taking the weight value configured here into account. Expects an integer in the range
+        1…10000, or the special string <literal>off</literal>. If not specified defaults to 100. The weight
+        is used to scale free space made available to the home areas: a home area with a weight of 200 will
+        get twice the free space as one with a weight of 100; a home area with a weight of 50 will get half
+        of that. The backing file system will be assigned space for a weight of 20. If set to
+        <literal>off</literal> no automatic free space distribution is done for this home area. Note that
+        resizing the home area explicitly (with <command>homectl resize</command> see below) will implicitly
+        turn off the automatic rebalancing. To reenable the automatic rebalancing use
+        <option>--rebalance-weight=</option> with an empty parameter.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -676,10 +760,17 @@
         <term><option>--cifs-domain=</option><replaceable>DOMAIN</replaceable></term>
         <term><option>--cifs-user-name=</option><replaceable>USER</replaceable></term>
         <term><option>--cifs-service=</option><replaceable>SERVICE</replaceable></term>
+        <term><option>--cifs-extra-mount-options=</option><replaceable>OPTIONS</replaceable></term>
 
         <listitem><para>Configures the Windows File Sharing (CIFS) domain and user to associate with the home
-        directory/user account, as well as the file share ("service") to mount as directory. The latter is used when
-        <literal>cifs</literal> storage is selected.</para></listitem>
+        directory/user account, as well as the file share ("service") to mount as directory. The latter is
+        used when <literal>cifs</literal> storage is selected. The file share should be specified in format
+        <literal>//<replaceable>host</replaceable>/<replaceable>share</replaceable>/<replaceable>directory/…</replaceable></literal>. The
+        directory part is optional — if not specified the home directory will be placed in the top-level
+        directory of the share. The <option>--cifs-extra-mount-options=</option> setting allows specifying
+        additional mount options when mounting the share, see <citerefentry
+        project='man-pages'><refentrytitle>mount.cifs</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        for details.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -822,7 +913,11 @@
         <literal>xfs</literal> and <literal>btrfs</literal> the home directory may be grown while the user is
         logged in, and on the latter also shrunk while the user is logged in. If the
         <literal>subvolume</literal>, <literal>directory</literal>, <literal>fscrypt</literal> storage
-        mechanisms are used, resizing will change file system quota.</para></listitem>
+        mechanisms are used, resizing will change file system quota. The size parameter may make use of the
+        usual suffixes B, K, M, G, T (to the base of 1024). The special strings <literal>min</literal> and
+        <literal>max</literal> may be specified in place of a numeric size value, for minimizing or
+        maximizing disk space assigned to the home area, taking constraints of the file system, disk usage inside
+        the home area and on the backing storage into account.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -871,6 +966,18 @@
         scripts and such, but requires authentication with the user's credentials in order to be able to
         unlock the user's home directory.</para></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><command>rebalance</command></term>
+
+        <listitem><para>Rebalance free disk space between active home areas and the backing storage. See
+        <option>--rebalance-weight=</option> above. This executes no operation unless there's at least one
+        active LUKS2 home area that has disk space rebalancing enabled. This operation is synchronous: it
+        will only complete once disk space is rebalanced according to the rebalancing weights. Note that
+        rebalancing also takes place automatically in the background in regular intervals. Use this command
+        to synchronously ensure disk space is properly redistributed before initiating an operation requiring
+        large amounts of disk space.</para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
index 51f83d1..49bad01 100644
--- a/man/hostnamectl.xml
+++ b/man/hostnamectl.xml
@@ -95,7 +95,7 @@
         icon name to <replaceable>NAME</replaceable>. The icon name is used by some
         graphical applications to visualize this host. The icon name
         should follow the <ulink
-        url="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">Icon
+        url="https://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">Icon
         Naming Specification</ulink>.</para></listitem>
       </varlistentry>
 
@@ -175,7 +175,7 @@
         <listitem><para>If <command>status</command> is invoked (or no explicit command is given) and one of these
         switches is specified, <command>hostnamectl</command> will print out just this selected hostname.</para>
 
-        <para>If used with <command>set-hostname</command>, only the selected hostname(s) will be updated. When more
+        <para>If used with <command>hostname</command>, only the selected hostnames will be updated. When more
         than one of these switches are specified, all the specified hostnames will be updated. </para></listitem>
       </varlistentry>
 
diff --git a/man/html.in b/man/html.in
index 3ae02bd..5e545b7 100755
--- a/man/html.in
+++ b/man/html.in
@@ -1,4 +1,5 @@
 #!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
 set -e
 
 if [ -z "$1" ]; then
diff --git a/man/hwdb-usb-device.c b/man/hwdb-usb-device.c
index 8a4b86e..19a5db8 100644
--- a/man/hwdb-usb-device.c
+++ b/man/hwdb-usb-device.c
@@ -1,15 +1,17 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <stdio.h>
 #include <stdint.h>
 #include <sd-hwdb.h>
 
 int print_usb_properties(uint16_t vid, uint16_t pid) {
-  char match[15];
+  char match[STRLEN("usb:vp") + DECIMAL_STR_MAX(uint16_t) * 2];
   sd_hwdb *hwdb;
   const char *key, *value;
   int r;
 
   /* Match this USB vendor and product ID combination */
-  snprintf(match, sizeof match, "usb:v%04Xp%04X", vid, pid);
+  xsprintf(match, "usb:v%04Xp%04X", vid, pid);
 
   r = sd_hwdb_new(&hwdb);
   if (r < 0)
diff --git a/man/id128-app-specific.c b/man/id128-app-specific.c
index b81e50f..b8982c7 100644
--- a/man/id128-app-specific.c
+++ b/man/id128-app-specific.c
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <stdio.h>
 #include <systemd/sd-id128.h>
 
diff --git a/man/inotify-watch-tmp.c b/man/inotify-watch-tmp.c
index ca790f0..07ee8f6 100644
--- a/man/inotify-watch-tmp.c
+++ b/man/inotify-watch-tmp.c
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <stdio.h>
 #include <string.h>
 #include <sys/inotify.h>
diff --git a/man/integritytab.xml b/man/integritytab.xml
new file mode 100644
index 0000000..44f0a55
--- /dev/null
+++ b/man/integritytab.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!--
+  SPDX-License-Identifier: LGPL-2.1-or-later
+
+-->
+<refentry id="integritytab" conditional='HAVE_LIBCRYPTSETUP' xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>integritytab</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>integritytab</refentrytitle>
+    <manvolnum>5</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>integritytab</refname>
+    <refpurpose>Configuration for integrity block devices</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>/etc/integritytab</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para>The <filename>/etc/integritytab</filename> file describes
+    integrity protected block devices that are set up during
+    system boot.</para>
+
+    <para>Empty lines and lines starting with the <literal>#</literal>
+    character are ignored. Each of the remaining lines describes one
+    verity integrity protected block device. Fields are delimited by
+    white space.</para>
+
+    <para>Each line is in the form<programlisting><replaceable>volume-name</replaceable> <replaceable>block-device</replaceable>
+    <replaceable>[keyfile|-]</replaceable> <replaceable>[options|-]</replaceable></programlisting>
+    The first two fields are mandatory, the remaining two are optional and only required if user specified non-default options during integrity format.</para>
+
+    <para>The first field contains the name of the resulting integrity volume; its block device is set up
+    below <filename>/dev/mapper/</filename>.</para>
+
+    <para>The second field contains a path to the underlying block device, or a specification of a block device via
+    <literal>UUID=</literal> followed by the UUID,
+    <literal>PARTUUID=</literal> followed by the partition UUID,
+    <literal>LABEL=</literal> followed by the label,
+    <literal>PARTLABEL=</literal> followed by the partition label.
+    </para>
+
+    <para>The third field if present contains an absolute filename path to a key file or a <literal>-</literal>
+    to specify none.  When the filename is present, the "integrity-algorithm" defaults to <literal>hmac-sha256</literal>
+    with the key length derived from the number of bytes in the key file.  At this time the only supported integrity algorithm
+    when using key file is hmac-sha256.  The maximum size of the key file is 4096 bytes.
+    </para>
+
+     <para>The fourth field, if present, is a comma-delimited list of options or a <literal>-</literal> to specify none. The following options are
+    recognized:</para>
+      <variablelist>
+
+      <varlistentry>
+        <term><option>allow-discards</option></term>
+
+        <listitem><para>
+        Allow the use of discard (TRIM) requests for the device.
+        This option is available since the Linux kernel version 5.7.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>journal-watermark=[0..100]%</option></term>
+
+        <listitem><para>
+        Journal watermark in percent. When the journal percentage exceeds this watermark, the journal flush will be started.  Setting a value of
+        "0%" uses default value.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>journal-commit-time=[0..N]</option></term>
+
+        <listitem><para>
+        Commit time in milliseconds. When this time passes (and no explicit flush operation was issued), the journal is written.  Setting a value of
+        zero uses default value.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>data-device=/dev/disk/by-...</option></term>
+
+        <listitem><para>
+        Specify a separate block device that contains existing data. The second field specified in the
+        integritytab for block device then will contain calculated integrity tags and journal for data-device,
+        but not the end user data.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>integrity-algorithm=[crc32c|crc32|sha1|sha256|hmac-sha256]</option></term>
+
+        <listitem><para>
+        The algorithm used for integrity checking.  The default is crc32c. Must match option used during format.
+        </para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>At early boot and when the system manager configuration is
+    reloaded, this file is translated into native systemd units by
+    <citerefentry><refentrytitle>systemd-integritysetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Examples</title>
+    <example>
+      <title>/etc/integritytab</title>
+      <para>Set up two integrity protected block devices. </para>
+
+      <programlisting>home PARTUUID=4973d0b8-1b15-c449-96ec-94bab7f6a7b8 - journal-commit-time=10,allow-discards,journal-watermark=55%
+data PARTUUID=5d4b1808-be76-774d-88af-03c4c3a41761 - allow-discards
+</programlisting>
+    </example>
+
+    <example>
+      <title>/etc/integritytab</title>
+      <para>Set up 1 integrity protected block device using defaults </para>
+
+      <programlisting>home PARTUUID=4973d0b8-1b15-c449-96ec-94bab7f6a7b8</programlisting>
+    </example>
+
+    <example>
+      <title>/etc/integritytab</title>
+      <para>Set up 1 integrity device using existing data block device which contains user data </para>
+
+      <programlisting>home PARTUUID=4973d0b8-1b15-c449-96ec-94bab7f6a7b8 - data-device=/dev/disk/by-uuid/9276d9c0-d4e3-4297-b4ff-3307cd0d092f</programlisting>
+    </example>
+
+    <example>
+      <title>/etc/integritytab</title>
+      <para>Set up 1 integrity device using a HMAC key file using defaults </para>
+
+      <programlisting>home PARTUUID=4973d0b8-1b15-c449-96ec-94bab7f6a7b8 /etc/hmac.key</programlisting>
+    </example>
+
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-integritysetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-integritysetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry project='die-net'><refentrytitle>integritysetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/journal-enumerate-fields.c b/man/journal-enumerate-fields.c
new file mode 100644
index 0000000..bb09319
--- /dev/null
+++ b/man/journal-enumerate-fields.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <errno.h>
+#include <stdio.h>
+#include <systemd/sd-journal.h>
+
+int main(int argc, char *argv[]) {
+  sd_journal *j;
+  const char *field;
+  int r;
+
+  r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
+  if (r < 0) {
+    errno = -r;
+    fprintf(stderr, "Failed to open journal: %m\n");
+    return 1;
+  }
+  SD_JOURNAL_FOREACH_FIELD(j, field)
+    printf("%s\n", field);
+  sd_journal_close(j);
+  return 0;
+}
diff --git a/man/journal-iterate-foreach.c b/man/journal-iterate-foreach.c
new file mode 100644
index 0000000..381b50f
--- /dev/null
+++ b/man/journal-iterate-foreach.c
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <errno.h>
+#include <stdio.h>
+#include <systemd/sd-journal.h>
+
+int main(int argc, char *argv[]) {
+  int r;
+  sd_journal *j;
+  r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
+  if (r < 0) {
+    errno = -r;
+    fprintf(stderr, "Failed to open journal: %m\n");
+    return 1;
+  }
+  SD_JOURNAL_FOREACH(j) {
+    const char *d;
+    size_t l;
+
+    r = sd_journal_get_data(j, "MESSAGE", (const void **)&d, &l);
+    if (r < 0) {
+      errno = -r;
+      fprintf(stderr, "Failed to read message field: %m\n");
+      continue;
+    }
+
+    printf("%.*s\n", (int) l, d);
+  }
+  sd_journal_close(j);
+  return 0;
+}
diff --git a/man/journal-iterate-poll.c b/man/journal-iterate-poll.c
index 100d07e..d377324 100644
--- a/man/journal-iterate-poll.c
+++ b/man/journal-iterate-poll.c
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <poll.h>
 #include <time.h>
 #include <systemd/sd-journal.h>
diff --git a/man/journal-iterate-unique.c b/man/journal-iterate-unique.c
index fcf92e7..5fe98b3 100644
--- a/man/journal-iterate-unique.c
+++ b/man/journal-iterate-unique.c
@@ -1,5 +1,7 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <errno.h>
 #include <stdio.h>
-#include <string.h>
 #include <systemd/sd-journal.h>
 
 int main(int argc, char *argv[]) {
@@ -10,12 +12,14 @@
 
   r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
   if (r < 0) {
-    fprintf(stderr, "Failed to open journal: %s\n", strerror(-r));
+    errno = -r;
+    fprintf(stderr, "Failed to open journal: %m\n");
     return 1;
   }
   r = sd_journal_query_unique(j, "_SYSTEMD_UNIT");
   if (r < 0) {
-    fprintf(stderr, "Failed to query journal: %s\n", strerror(-r));
+    errno = -r;
+    fprintf(stderr, "Failed to query journal: %m\n");
     return 1;
   }
   SD_JOURNAL_FOREACH_UNIQUE(j, d, l)
diff --git a/man/journal-iterate-wait.c b/man/journal-iterate-wait.c
index 0a23569..ac4b60b 100644
--- a/man/journal-iterate-wait.c
+++ b/man/journal-iterate-wait.c
@@ -1,5 +1,7 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <errno.h>
 #include <stdio.h>
-#include <string.h>
 #include <systemd/sd-journal.h>
 
 int main(int argc, char *argv[]) {
@@ -7,7 +9,8 @@
   sd_journal *j;
   r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
   if (r < 0) {
-    fprintf(stderr, "Failed to open journal: %s\n", strerror(-r));
+    errno = -r;
+    fprintf(stderr, "Failed to open journal: %m\n");
     return 1;
   }
   for (;;)  {
@@ -15,21 +18,24 @@
     size_t l;
     r = sd_journal_next(j);
     if (r < 0) {
-      fprintf(stderr, "Failed to iterate to next entry: %s\n", strerror(-r));
+      errno = -r;
+      fprintf(stderr, "Failed to iterate to next entry: %m\n");
       break;
     }
     if (r == 0) {
       /* Reached the end, let's wait for changes, and try again */
       r = sd_journal_wait(j, (uint64_t) -1);
       if (r < 0) {
-        fprintf(stderr, "Failed to wait for changes: %s\n", strerror(-r));
+        errno = -r;
+        fprintf(stderr, "Failed to wait for changes: %m\n");
         break;
       }
       continue;
     }
     r = sd_journal_get_data(j, "MESSAGE", &d, &l);
     if (r < 0) {
-      fprintf(stderr, "Failed to read message field: %s\n", strerror(-r));
+      errno = -r;
+      fprintf(stderr, "Failed to read message field: %m\n");
       continue;
     }
     printf("%.*s\n", (int) l, (const char*) d);
diff --git a/man/journal-remote.conf.xml b/man/journal-remote.conf.xml
index 3f69f30..5699236 100644
--- a/man/journal-remote.conf.xml
+++ b/man/journal-remote.conf.xml
@@ -84,6 +84,33 @@
         <listitem><para>SSL CA certificate.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>MaxUse=</varname></term>
+        <term><varname>KeepFree=</varname></term>
+        <term><varname>MaxFileSize=</varname></term>
+        <term><varname>MaxFiles=</varname></term>
+
+        <listitem><para>These are analogous to <varname>SystemMaxUse=</varname>,
+        <varname>SystemKeepFree=</varname>, <varname>SystemMaxFileSize=</varname>
+        and <varname>SystemMaxFiles=</varname> in
+        <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+
+        <para><varname>MaxUse=</varname> controls how much disk space
+        the <command>systemd-journal-remote</command> may use up at most.
+        <varname>KeepFree=</varname> controls how much disk
+        space <command>systemd-journal-remote</command> shall leave free for other uses.
+        <command>systemd-journal-remote</command> will respect both limits
+        and use the smaller of the two values.</para>
+
+        <para><varname>MaxFiles=</varname> controls how many
+        individual journal files to keep at most. Note that only
+        archived files are deleted to reduce the number of files until
+        this limit is reached; active files will stay around. This
+        means that, in effect, there might still be more journal files
+        around in total than this limit after a vacuuming operation is
+        complete.</para></listitem>
+      </varlistentry>
+
     </variablelist>
 
   </refsect1>
@@ -91,8 +118,9 @@
   <refsect1>
       <title>See Also</title>
       <para>
-        <citerefentry><refentrytitle>systemd-journal-remote.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+        <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+        <citerefentry><refentrytitle>systemd-journal-remote.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
       </para>
   </refsect1>
diff --git a/man/journal-stream-fd.c b/man/journal-stream-fd.c
new file mode 100644
index 0000000..8aad5ff
--- /dev/null
+++ b/man/journal-stream-fd.c
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <errno.h>
+#include <syslog.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <systemd/sd-journal.h>
+#include <systemd/sd-daemon.h>
+
+int main(int argc, char *argv[]) {
+  int fd;
+  FILE *log;
+  fd = sd_journal_stream_fd("test", LOG_INFO, 1);
+  if (fd < 0) {
+    errno = -fd;
+    fprintf(stderr, "Failed to create stream fd: %m\n");
+    return 1;
+  }
+  log = fdopen(fd, "w");
+  if (!log) {
+    fprintf(stderr, "Failed to create file object: %m\n");
+    close(fd);
+    return 1;
+  }
+  fprintf(log, "Hello World!\n");
+  fprintf(log, SD_WARNING "This is a warning!\n");
+  fclose(log);
+  return 0;
+}
diff --git a/man/journalctl.xml b/man/journalctl.xml
index 424acc9..ae86c50 100644
--- a/man/journalctl.xml
+++ b/man/journalctl.xml
@@ -3,753 +3,156 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-  <refentry id="journalctl"
-            xmlns:xi="http://www.w3.org/2001/XInclude">
+<refentry id="journalctl"
+          xmlns:xi="http://www.w3.org/2001/XInclude">
 
-    <refentryinfo>
-      <title>journalctl</title>
-      <productname>systemd</productname>
-    </refentryinfo>
+  <refentryinfo>
+    <title>journalctl</title>
+    <productname>systemd</productname>
+  </refentryinfo>
 
-    <refmeta>
-      <refentrytitle>journalctl</refentrytitle>
-      <manvolnum>1</manvolnum>
-    </refmeta>
+  <refmeta>
+    <refentrytitle>journalctl</refentrytitle>
+    <manvolnum>1</manvolnum>
+  </refmeta>
 
-    <refnamediv>
-      <refname>journalctl</refname>
-      <refpurpose>Query the systemd journal</refpurpose>
-    </refnamediv>
+  <refnamediv>
+    <refname>journalctl</refname>
+    <refpurpose>Print log entries from the systemd journal</refpurpose>
+  </refnamediv>
 
-    <refsynopsisdiv>
-      <cmdsynopsis>
-        <command>journalctl</command>
-        <arg choice="opt" rep="repeat">OPTIONS</arg>
-        <arg choice="opt" rep="repeat">MATCHES</arg>
-      </cmdsynopsis>
-    </refsynopsisdiv>
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>journalctl</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+      <arg choice="opt" rep="repeat">MATCHES</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
 
-    <refsect1>
-      <title>Description</title>
+  <refsect1>
+    <title>Description</title>
 
-      <para><command>journalctl</command> may be used to query the
-      contents of the
-      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-      journal as written by
-      <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+    <para><command>journalctl</command> is used to print the log entries stored in the journal by
+    <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    and
+    <citerefentry><refentrytitle>systemd-journal-remote.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+    </para>
 
-      <para>If called without parameters, it will show the full
-      contents of the journal, starting with the oldest entry
-      collected.</para>
+    <para>If called without parameters, it will show the contents of the journal accessible to the calling
+    user, starting with the oldest entry collected.</para>
 
-      <para>If one or more match arguments are passed, the output is
-      filtered accordingly. A match is in the format
-      <literal>FIELD=VALUE</literal>,
-      e.g. <literal>_SYSTEMD_UNIT=httpd.service</literal>, referring
-      to the components of a structured journal entry. See
-      <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-      for a list of well-known fields. If multiple matches are
-      specified matching different fields, the log entries are
-      filtered by both, i.e. the resulting output will show only
-      entries matching all the specified matches of this kind. If two
-      matches apply to the same field, then they are automatically
-      matched as alternatives, i.e. the resulting output will show
-      entries matching any of the specified matches for the same
-      field. Finally, the character <literal>+</literal> may appear
-      as a separate word between other terms on the command line. This
-      causes all matches before and after to be combined in a
-      disjunction (i.e. logical OR).</para>
+    <para>If one or more match arguments are passed, the output is filtered accordingly. A match is in the
+    format <literal>FIELD=VALUE</literal>, e.g. <literal>_SYSTEMD_UNIT=httpd.service</literal>, referring to
+    the components of a structured journal entry. See
+    <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    for a list of well-known fields. If multiple matches are specified matching different fields, the log
+    entries are filtered by both, i.e. the resulting output will show only entries matching all the specified
+    matches of this kind. If two matches apply to the same field, then they are automatically matched as
+    alternatives, i.e. the resulting output will show entries matching any of the specified matches for the
+    same field. Finally, the character <literal>+</literal> may appear as a separate word between other terms
+    on the command line. This causes all matches before and after to be combined in a disjunction
+    (i.e. logical OR).</para>
 
-      <para>It is also possible to filter the entries by specifying an
-      absolute file path as an argument. The file path may be a file or
-      a symbolic link and the file must exist at the time of the query. If a
-      file path refers to an executable binary, an <literal>_EXE=</literal>
-      match for the canonicalized binary path is added to the query. If a
-      file path refers to an executable script, a <literal>_COMM=</literal>
-      match for the script name is added to the query. If a file path
-      refers to a device node, <literal>_KERNEL_DEVICE=</literal> matches for
-      the kernel name of the device and for each of its ancestor devices is
-      added to the query. Symbolic links are dereferenced, kernel names are
-      synthesized, and parent devices are identified from the environment at
-      the time of the query. In general, a device node is the best proxy for
-      an actual device, as log entries do not usually contain fields that
-      identify an actual device. For the resulting log entries to be correct
-      for the actual device, the relevant parts of the environment at the time
-      the entry was logged, in particular the actual device corresponding to
-      the device node, must have been the same as those at the time of the
-      query. Because device nodes generally change their corresponding devices
-      across reboots, specifying a device node path causes the resulting
-      entries to be restricted to those from the current boot.</para>
+    <para>It is also possible to filter the entries by specifying an absolute file path as an argument. The
+    file path may be a file or a symbolic link and the file must exist at the time of the query. If a file
+    path refers to an executable binary, an <literal>_EXE=</literal> match for the canonicalized binary path
+    is added to the query. If a file path refers to an executable script, a <literal>_COMM=</literal> match
+    for the script name is added to the query. If a file path refers to a device node,
+    <literal>_KERNEL_DEVICE=</literal> matches for the kernel name of the device and for each of its ancestor
+    devices is added to the query. Symbolic links are dereferenced, kernel names are synthesized, and parent
+    devices are identified from the environment at the time of the query. In general, a device node is the
+    best proxy for an actual device, as log entries do not usually contain fields that identify an actual
+    device. For the resulting log entries to be correct for the actual device, the relevant parts of the
+    environment at the time the entry was logged, in particular the actual device corresponding to the device
+    node, must have been the same as those at the time of the query. Because device nodes generally change
+    their corresponding devices across reboots, specifying a device node path causes the resulting entries to
+    be restricted to those from the current boot.</para>
 
-      <para>Additional constraints may be added using options
-      <option>--boot</option>, <option>--unit=</option>, etc., to
-      further limit what entries will be shown (logical AND).</para>
+    <para>Additional constraints may be added using options <option>--boot</option>,
+    <option>--unit=</option>, etc., to further limit what entries will be shown (logical AND).</para>
 
-      <para>Output is interleaved from all accessible journal files, whether they are rotated or currently
-      being written, and regardless of whether they belong to the system itself or are accessible user
-      journals. The <option>--header</option> option can be used to identify which files
-      <emphasis>are</emphasis> being shown.</para>
+    <para>Output is interleaved from all accessible journal files, whether they are rotated or currently
+    being written, and regardless of whether they belong to the system itself or are accessible user
+    journals. The <option>--header</option> option can be used to identify which files
+    <emphasis>are</emphasis> being shown.</para>
 
-      <para>The set of journal files which will be used can be
-      modified using the <option>--user</option>,
-      <option>--system</option>, <option>--directory</option>, and
-      <option>--file</option> options, see below.</para>
+    <para>The set of journal files which will be used can be modified using the <option>--user</option>,
+    <option>--system</option>, <option>--directory</option>, and <option>--file</option> options, see
+    below.</para>
 
-      <para>All users are granted access to their private per-user
-      journals. However, by default, only root and users who are
-      members of a few special groups are granted access to the system
-      journal and the journals of other users. Members of the groups
-      <literal>systemd-journal</literal>, <literal>adm</literal>, and
-      <literal>wheel</literal> can read all journal files. Note
-      that the two latter groups traditionally have additional
-      privileges specified by the distribution. Members of the
-      <literal>wheel</literal> group can often perform administrative
-      tasks.</para>
+    <para>All users are granted access to their private per-user journals. However, by default, only root and
+    users who are members of a few special groups are granted access to the system journal and the journals
+    of other users. Members of the groups <literal>systemd-journal</literal>, <literal>adm</literal>, and
+    <literal>wheel</literal> can read all journal files. Note that the two latter groups traditionally have
+    additional privileges specified by the distribution. Members of the <literal>wheel</literal> group can
+    often perform administrative tasks.</para>
 
-      <para>The output is paged through <command>less</command> by
-      default, and long lines are "truncated" to screen width. The
-      hidden part can be viewed by using the left-arrow and
-      right-arrow keys. Paging can be disabled; see the
-      <option>--no-pager</option> option and the "Environment" section
-      below.</para>
+    <para>The output is paged through <command>less</command> by default, and long lines are "truncated" to
+    screen width. The hidden part can be viewed by using the left-arrow and right-arrow keys. Paging can be
+    disabled; see the <option>--no-pager</option> option and the "Environment" section below.</para>
 
-      <para>When outputting to a tty, lines are colored according to
-      priority: lines of level ERROR and higher are colored red; lines
-      of level NOTICE and higher are highlighted; lines of level DEBUG
-      are colored lighter grey; other lines are displayed normally.</para>
-    </refsect1>
+    <para>When outputting to a tty, lines are colored according to priority: lines of level ERROR and higher
+    are colored red; lines of level NOTICE and higher are highlighted; lines of level DEBUG are colored
+    lighter grey; other lines are displayed normally.</para>
 
-    <refsect1>
-      <title>Options</title>
+    <para>To write entries <emphasis>to</emphasis> the journal, a few methods may be used. In general, output
+    from systemd units is automatically connected to the journal, see
+    <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+    In addition,
+    <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    may be used to send messages to the journal directly.</para>
+  </refsect1>
 
-      <para>The following options are understood:</para>
+  <refsect1>
+    <title>Source Options</title>
 
-      <variablelist>
-        <varlistentry>
-          <term><option>--no-full</option></term>
-          <term><option>--full</option></term>
-          <term><option>-l</option></term>
+    <para>The following options control where to read journal records from:</para>
 
-          <listitem><para>Ellipsize fields when they do not fit in
-          available columns.  The default is to show full fields,
-          allowing them to wrap or be truncated by the pager, if one
-          is used.</para>
-
-          <para>The old options
-          <option>-l</option>/<option>--full</option> are not useful
-          anymore, except to undo <option>--no-full</option>.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><option>-a</option></term>
-          <term><option>--all</option></term>
-
-          <listitem><para>Show all fields in full, even if they include unprintable characters or are very long. By
-          default, fields with unprintable characters are abbreviated as "blob data". (Note that the pager may escape
-          unprintable characters again.)</para></listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><option>-f</option></term>
-          <term><option>--follow</option></term>
-
-          <listitem><para>Show only the most recent journal entries,
-          and continuously print new entries as they are appended to
-          the journal.</para></listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><option>-e</option></term>
-          <term><option>--pager-end</option></term>
-
-          <listitem><para>Immediately jump to the end of the journal
-          inside the implied pager tool. This implies
-          <option>-n1000</option> to guarantee that the pager will not
-          buffer logs of unbounded size. This may be overridden with
-          an explicit <option>-n</option> with some other numeric
-          value, while <option>-nall</option> will disable this cap.
-          Note that this option is only supported for the
-          <citerefentry project='man-pages'><refentrytitle>less</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-          pager.</para></listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><option>-n</option></term>
-          <term><option>--lines=</option></term>
-
-          <listitem><para>Show the most recent journal events and
-          limit the number of events shown. If
-          <option>--follow</option> is used, this option is
-          implied. The argument is a positive integer or
-          <literal>all</literal> to disable line limiting. The default
-          value is 10 if no argument is given.</para></listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><option>--no-tail</option></term>
-
-          <listitem><para>Show all stored output lines, even in follow
-          mode. Undoes the effect of <option>--lines=</option>.
-          </para></listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><option>-r</option></term>
-          <term><option>--reverse</option></term>
-
-          <listitem><para>Reverse output so that the newest entries
-          are displayed first.</para></listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><option>-o</option></term>
-          <term><option>--output=</option></term>
-
-          <listitem><para>Controls the formatting of the journal
-          entries that are shown. Takes one of the following
-          options:</para>
-          <variablelist>
-            <varlistentry>
-              <term>
-                <option>short</option>
-              </term>
-              <listitem>
-                <para>is the default and generates an output that is
-                mostly identical to the formatting of classic syslog
-                files, showing one line per journal entry.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>short-full</option>
-              </term>
-              <listitem>
-                <para>is very similar, but shows timestamps in the format the <option>--since=</option> and
-                <option>--until=</option> options accept. Unlike the timestamp information shown in
-                <option>short</option> output mode this mode includes weekday, year and timezone information in the
-                output, and is locale-independent.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>short-iso</option>
-              </term>
-              <listitem>
-                <para>is very similar, but shows ISO 8601 wallclock
-                timestamps.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>short-iso-precise</option>
-              </term>
-              <listitem>
-                <para>as for <option>short-iso</option> but includes full
-                microsecond precision.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>short-precise</option>
-              </term>
-              <listitem>
-                <para>is very similar, but shows classic syslog timestamps
-                with full microsecond precision.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>short-monotonic</option>
-              </term>
-              <listitem>
-                <para>is very similar, but shows monotonic timestamps
-                instead of wallclock timestamps.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>short-unix</option>
-              </term>
-              <listitem>
-                <para>is very similar, but shows seconds passed since January 1st 1970 UTC instead of wallclock
-                timestamps ("UNIX time"). The time is shown with microsecond accuracy.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>verbose</option>
-              </term>
-              <listitem>
-                <para>shows the full-structured entry items with all
-                fields.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>export</option>
-              </term>
-              <listitem>
-                <para>serializes the journal into a binary (but mostly
-                text-based) stream suitable for backups and network
-                transfer (see
-                <ulink url="https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-export-format">Journal Export Format</ulink>
-                for more information). To import the binary stream back
-                into native journald format use
-                <citerefentry><refentrytitle>systemd-journal-remote</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>json</option>
-              </term>
-              <listitem>
-                <para>formats entries as JSON objects, separated by newline characters (see <ulink
-                url="https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-json-format">Journal JSON Format</ulink> for more
-                information). Field values are generally encoded as JSON strings, with three exceptions:
-                <orderedlist>
-                  <listitem><para>Fields larger than 4096 bytes are encoded as <constant>null</constant> values. (This
-                  may be turned off by passing <option>--all</option>, but be aware that this may allocate overly long
-                  JSON objects.) </para></listitem>
-
-                  <listitem><para>Journal entries permit non-unique fields within the same log entry. JSON does not allow
-                  non-unique fields within objects. Due to this, if a non-unique field is encountered a JSON array is
-                  used as field value, listing all field values as elements.</para></listitem>
-
-                  <listitem><para>Fields containing non-printable or non-UTF8 bytes are encoded as arrays containing
-                  the raw bytes individually formatted as unsigned numbers.</para></listitem>
-                </orderedlist>
-
-                Note that this encoding is reversible (with the exception of the size limit).</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>json-pretty</option>
-              </term>
-              <listitem>
-                <para>formats entries as JSON data structures, but
-                formats them in multiple lines in order to make them
-                more readable by humans.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>json-sse</option>
-              </term>
-              <listitem>
-                <para>formats entries as JSON data structures, but wraps
-                them in a format suitable for
-                <ulink url="https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events">Server-Sent Events</ulink>.
-                </para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>json-seq</option>
-              </term>
-              <listitem>
-                <para>formats entries as JSON data structures, but prefixes them with an ASCII Record Separator
-                character (0x1E) and suffixes them with an ASCII Line Feed character (0x0A), in accordance with <ulink
-                url="https://tools.ietf.org/html/rfc7464">JavaScript Object Notation (JSON) Text Sequences </ulink>
-                (<literal>application/json-seq</literal>).
-                </para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>cat</option>
-              </term>
-              <listitem>
-                <para>generates a very terse output, only showing the actual message of each journal entry
-                with no metadata, not even a timestamp. If combined with the
-                <option>--output-fields=</option> option will output the listed fields for each log record,
-                instead of the message.</para>
-              </listitem>
-            </varlistentry>
-
-            <varlistentry>
-              <term>
-                <option>with-unit</option>
-              </term>
-              <listitem>
-                <para>similar to short-full, but prefixes the unit and
-                user unit names instead of the traditional syslog
-                identifier. Useful when using templated instances, as it
-                will include the arguments in the unit names.</para>
-              </listitem>
-            </varlistentry>
-          </variablelist>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--output-fields=</option></term>
-
-        <listitem><para>A comma separated list of the fields which should be included in the output. This has
-        an effect only for the output modes which would normally show all fields (<option>verbose</option>,
-        <option>export</option>, <option>json</option>, <option>json-pretty</option>,
-        <option>json-sse</option> and <option>json-seq</option>), as well as on <option>cat</option>. For the
-        former, the <literal>__CURSOR</literal>, <literal>__REALTIME_TIMESTAMP</literal>,
-        <literal>__MONOTONIC_TIMESTAMP</literal>, and <literal>_BOOT_ID</literal> fields are always
-        printed.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--utc</option></term>
-
-        <listitem><para>Express time in Coordinated Universal Time
-        (UTC).</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--no-hostname</option></term>
-
-        <listitem><para>Don't show the hostname field of log messages originating from the local host. This
-        switch has an effect only on the <option>short</option> family of output modes (see above).
-        </para>
-
-        <para>Note: this option does not remove occurrences of the hostname from log entries themselves, so
-        it does not prevent the hostname from being visible in the logs.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-x</option></term>
-        <term><option>--catalog</option></term>
-
-        <listitem><para>Augment log lines with explanation texts from
-        the message catalog. This will add explanatory help texts to
-        log messages in the output where this is available. These
-        short help texts will explain the context of an error or log
-        event, possible solutions, as well as pointers to support
-        forums, developer documentation, and any other relevant
-        manuals. Note that help texts are not available for all
-        messages, but only for selected ones. For more information on
-        the message catalog, please refer to the
-        <ulink url="https://www.freedesktop.org/wiki/Software/systemd/catalog">Message Catalog Developer Documentation</ulink>.</para>
-
-        <para>Note: when attaching <command>journalctl</command>
-        output to bug reports, please do <emphasis>not</emphasis> use
-        <option>-x</option>.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-q</option></term>
-        <term><option>--quiet</option></term>
-
-        <listitem><para>Suppresses all informational messages
-        (i.e. "-- Journal begins at …", "-- Reboot --"),
-        any warning messages regarding
-        inaccessible system journals when run as a normal
-        user.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-m</option></term>
-        <term><option>--merge</option></term>
-
-        <listitem><para>Show entries interleaved from all available
-        journals, including remote ones.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-b <optional><optional><replaceable>ID</replaceable></optional><optional><replaceable>±offset</replaceable></optional>|<constant>all</constant></optional></option></term>
-        <term><option>--boot<optional>=<optional><replaceable>ID</replaceable></optional><optional><replaceable>±offset</replaceable></optional>|<constant>all</constant></optional></option></term>
-
-        <listitem><para>Show messages from a specific boot. This will
-        add a match for <literal>_BOOT_ID=</literal>.</para>
-
-        <para>The argument may be empty, in which case logs for the
-        current boot will be shown.</para>
-
-        <para>If the boot ID is omitted, a positive
-        <replaceable>offset</replaceable> will look up the boots
-        starting from the beginning of the journal, and an
-        equal-or-less-than zero <replaceable>offset</replaceable> will
-        look up boots starting from the end of the journal. Thus,
-        <constant>1</constant> means the first boot found in the
-        journal in chronological order, <constant>2</constant> the
-        second and so on; while <constant>-0</constant> is the last
-        boot, <constant>-1</constant> the boot before last, and so
-        on. An empty <replaceable>offset</replaceable> is equivalent
-        to specifying <constant>-0</constant>, except when the current
-        boot is not the last boot (e.g. because
-        <option>--directory</option> was specified to look at logs
-        from a different machine).</para>
-
-        <para>If the 32-character <replaceable>ID</replaceable> is
-        specified, it may optionally be followed by
-        <replaceable>offset</replaceable> which identifies the boot
-        relative to the one given by boot
-        <replaceable>ID</replaceable>. Negative values mean earlier
-        boots and positive values mean later boots. If
-        <replaceable>offset</replaceable> is not specified, a value of
-        zero is assumed, and the logs for the boot given by
-        <replaceable>ID</replaceable> are shown.</para>
-
-        <para>The special argument <constant>all</constant> can be
-        used to negate the effect of an earlier use of
-        <option>-b</option>.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--list-boots</option></term>
-
-        <listitem><para>Show a tabular list of boot numbers (relative to
-        the current boot), their IDs, and the timestamps of the first
-        and last message pertaining to the boot.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-k</option></term>
-        <term><option>--dmesg</option></term>
-
-        <listitem><para>Show only kernel messages. This implies
-        <option>-b</option> and adds the match
-        <literal>_TRANSPORT=kernel</literal>.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-t</option></term>
-        <term><option>--identifier=<replaceable>SYSLOG_IDENTIFIER</replaceable></option></term>
-
-        <listitem><para>Show messages for the specified syslog
-        identifier
-        <replaceable>SYSLOG_IDENTIFIER</replaceable>.</para>
-
-        <para>This parameter can be specified multiple
-        times.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-u</option></term>
-        <term><option>--unit=<replaceable>UNIT</replaceable>|<replaceable>PATTERN</replaceable></option></term>
-
-        <listitem><para>Show messages for the specified systemd unit
-        <replaceable>UNIT</replaceable> (such as a service unit), or
-        for any of the units matched by
-        <replaceable>PATTERN</replaceable>.  If a pattern is
-        specified, a list of unit names found in the journal is
-        compared with the specified pattern and all that match are
-        used. For each unit name, a match is added for messages from
-        the unit
-        (<literal>_SYSTEMD_UNIT=<replaceable>UNIT</replaceable></literal>),
-        along with additional matches for messages from systemd and
-        messages about coredumps for the specified unit. A match
-        is also added for <literal>_SYSTEMD_SLICE=<replaceable>UNIT</replaceable></literal>,
-        such that if the provided <replaceable>UNIT</replaceable> is a
-        <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-        unit, all logs of children of the slice will be shown.
-       </para>
-
-        <para>This parameter can be specified multiple times.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--user-unit=</option></term>
-
-        <listitem><para>Show messages for the specified user session
-        unit. This will add a match for messages from the unit
-        (<literal>_SYSTEMD_USER_UNIT=</literal> and
-        <literal>_UID=</literal>) and additional matches for messages
-        from session systemd and messages about coredumps for the
-        specified unit. A match
-        is also added for <literal>_SYSTEMD_USER_SLICE=<replaceable>UNIT</replaceable></literal>,
-        such that if the provided <replaceable>UNIT</replaceable> is a
-        <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-        unit, all logs of children of the unit will be shown.</para>
-
-        <para>This parameter can be specified multiple times.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-p</option></term>
-        <term><option>--priority=</option></term>
-
-        <listitem><para>Filter output by message priorities or
-        priority ranges. Takes either a single numeric or textual log
-        level (i.e. between 0/<literal>emerg</literal> and
-        7/<literal>debug</literal>), or a range of numeric/text log
-        levels in the form FROM..TO. The log levels are the usual
-        syslog log levels as documented in
-        <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-        i.e. <literal>emerg</literal> (0),
-        <literal>alert</literal> (1), <literal>crit</literal> (2),
-        <literal>err</literal> (3), <literal>warning</literal> (4),
-        <literal>notice</literal> (5), <literal>info</literal> (6),
-        <literal>debug</literal> (7). If a single log level is
-        specified, all messages with this log level or a lower (hence
-        more important) log level are shown. If a range is specified,
-        all messages within the range are shown, including both the
-        start and the end value of the range. This will add
-        <literal>PRIORITY=</literal> matches for the specified
-        priorities.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--facility=</option></term>
-
-        <listitem><para>Filter output by syslog facility. Takes a comma-separated list of numbers or facility
-        names. The names are the usual syslog facilities as documented in
-        <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-        <option>--facility=help</option> may be used to display a list of known facility names and exit.
-        </para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-g</option></term>
-        <term><option>--grep=</option></term>
-
-        <listitem><para>Filter output to entries where the <varname>MESSAGE=</varname>
-        field matches the specified regular expression. PERL-compatible regular expressions
-        are used, see
-        <citerefentry project='url'><refentrytitle url='http://pcre.org/current/doc/html/pcre2pattern.html'>pcre2pattern</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-        for a detailed description of the syntax.</para>
-
-        <para>If the pattern is all lowercase, matching is case insensitive.
-        Otherwise, matching is case sensitive. This can be overridden with the
-        <option>--case-sensitive</option> option, see below.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--case-sensitive<optional>=BOOLEAN</optional></option></term>
-
-        <listitem><para>Make pattern matching case sensitive or case insensitive.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-c</option></term>
-        <term><option>--cursor=</option></term>
-
-        <listitem><para>Start showing entries from the location in the
-        journal specified by the passed cursor.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--cursor-file=<replaceable>FILE</replaceable></option></term>
-
-        <listitem><para>If <replaceable>FILE</replaceable> exists and contains a
-        cursor, start showing entries <emphasis>after</emphasis> this location.
-        Otherwise the show entries according the other given options. At the end,
-        write the cursor of the last entry to <replaceable>FILE</replaceable>. Use
-        this option to continually read the journal by sequentially calling
-        <command>journalctl</command>.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--after-cursor=</option></term>
-
-        <listitem><para>Start showing entries from the location in the
-        journal <emphasis>after</emphasis> the location specified by
-        the passed cursor.  The cursor is shown when the
-        <option>--show-cursor</option> option is used.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--show-cursor</option></term>
-
-        <listitem><para>The cursor is shown after the last entry after
-        two dashes:</para>
-        <programlisting>-- cursor: s=0639…</programlisting>
-        <para>The format of the cursor is private
-        and subject to change.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-S</option></term>
-        <term><option>--since=</option></term>
-        <term><option>-U</option></term>
-        <term><option>--until=</option></term>
-
-        <listitem><para>Start showing entries on or newer than the specified date, or on or older than the specified
-        date, respectively. Date specifications should be of the format <literal>2012-10-30 18:17:16</literal>.  If the
-        time part is omitted, <literal>00:00:00</literal> is assumed.  If only the seconds component is omitted,
-        <literal>:00</literal> is assumed. If the date component is omitted, the current day is assumed. Alternatively
-        the strings <literal>yesterday</literal>, <literal>today</literal>, <literal>tomorrow</literal> are understood,
-        which refer to 00:00:00 of the day before the current day, the current day, or the day after the current day,
-        respectively. <literal>now</literal> refers to the current time. Finally, relative times may be specified,
-        prefixed with <literal>-</literal> or <literal>+</literal>, referring to times before or after the current
-        time, respectively. For complete time and date specification, see
-        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>. Note that
-        <option>--output=short-full</option> prints timestamps that follow precisely this format.
-        </para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-F</option></term>
-        <term><option>--field=</option></term>
-
-        <listitem><para>Print all possible data values the specified
-        field can take in all entries of the journal.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>-N</option></term>
-        <term><option>--fields</option></term>
-
-        <listitem><para>Print all field names currently used in all entries of the journal.</para></listitem>
-      </varlistentry>
-
+    <variablelist>
       <varlistentry>
         <term><option>--system</option></term>
         <term><option>--user</option></term>
 
-        <listitem><para>Show messages from system services and the
-        kernel (with <option>--system</option>). Show messages from
-        service of current user (with <option>--user</option>).  If
-        neither is specified, show all messages that the user can see.
-        </para></listitem>
+        <listitem><para>Show messages from system services and the kernel (with
+        <option>--system</option>). Show messages from service of current user (with
+        <option>--user</option>).  If neither is specified, show all messages that the user can see.
+        </para>
+
+        <para>The <option>--user</option> option affects how <option>--unit</option> arguments are
+        treated. See <option>--unit</option>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>-M</option></term>
         <term><option>--machine=</option></term>
 
-        <listitem><para>Show messages from a running, local
-        container. Specify a container name to connect to.</para>
-        </listitem>
+        <listitem><para>Show messages from a running, local container. Specify a container name to connect
+        to.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-m</option></term>
+        <term><option>--merge</option></term>
+
+        <listitem><para>Show entries interleaved from all available journals, including remote
+        ones.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>-D <replaceable>DIR</replaceable></option></term>
         <term><option>--directory=<replaceable>DIR</replaceable></option></term>
 
-        <listitem><para>Takes a directory path as argument. If
-        specified, journalctl will operate on the specified journal
-        directory <replaceable>DIR</replaceable> instead of the
-        default runtime and system journal paths.</para></listitem>
+        <listitem><para>Takes a directory path as argument. If specified, journalctl will operate on the
+        specified journal directory <replaceable>DIR</replaceable> instead of the default runtime and system
+        journal paths.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>--file=<replaceable>GLOB</replaceable></option></term>
 
-        <listitem><para>Takes a file glob as an argument. If
-        specified, journalctl will operate on the specified journal
-        files matching <replaceable>GLOB</replaceable> instead of the
-        default runtime and system journal paths. May be specified
-        multiple times, in which case files will be suitably
+        <listitem><para>Takes a file glob as an argument. If specified, journalctl will operate on the
+        specified journal files matching <replaceable>GLOB</replaceable> instead of the default runtime and
+        system journal paths. May be specified multiple times, in which case files will be suitably
         interleaved.</para></listitem>
       </varlistentry>
 
@@ -769,11 +172,11 @@
         <term><option>--image=<replaceable>IMAGE</replaceable></option></term>
 
         <listitem><para>Takes a path to a disk image file or block device node. If specified,
-        <command>journalctl</command> will operate on the file system in the indicated disk image. This is
-        similar to <option>--root=</option> but operates on file systems stored in disk images or block
-        devices, thus providing an easy way to extract log data from disk images. The disk image should
+        <command>journalctl</command> will operate on the file system in the indicated disk image. This
+        option is similar to <option>--root=</option>, but operates on file systems stored in disk images or
+        block devices, thus providing an easy way to extract log data from disk images. The disk image should
         either contain just a file system or a set of file systems within a GPT partition table, following
-        the <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+        the <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
         Specification</ulink>. For further information on supported disk images, see
         <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
         switch of the same name.</para></listitem>
@@ -790,23 +193,542 @@
         journal namespaces see
         <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para></listitem>
       </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Filtering Options</title>
+
+    <para>The following options control how to filter journal records:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>-S</option></term>
+        <term><option>--since=</option></term>
+        <term><option>-U</option></term>
+        <term><option>--until=</option></term>
+
+        <listitem><para>Start showing entries on or newer than the specified date, or on or older than the
+        specified date, respectively. Date specifications should be of the format <literal>2012-10-30
+        18:17:16</literal>.  If the time part is omitted, <literal>00:00:00</literal> is assumed.  If only
+        the seconds component is omitted, <literal>:00</literal> is assumed. If the date component is
+        omitted, the current day is assumed. Alternatively the strings <literal>yesterday</literal>,
+        <literal>today</literal>, <literal>tomorrow</literal> are understood, which refer to 00:00:00 of the
+        day before the current day, the current day, or the day after the current day,
+        respectively. <literal>now</literal> refers to the current time. Finally, relative times may be
+        specified, prefixed with <literal>-</literal> or <literal>+</literal>, referring to times before or
+        after the current time, respectively. For complete time and date specification, see
+        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>. Note
+        that <option>--output=short-full</option> prints timestamps that follow precisely this format.
+        </para></listitem>
+      </varlistentry>
 
       <varlistentry>
-        <term><option>--header</option></term>
+        <term><option>-c</option></term>
+        <term><option>--cursor=</option></term>
 
-        <listitem><para>Instead of showing journal contents, show internal header information of the journal
-        fields accessed.</para>
+        <listitem><para>Start showing entries from the location in the journal specified by the passed
+        cursor.</para></listitem>
+      </varlistentry>
 
-        <para>This option is particularly useful when trying to identify out-of-order journal entries, as
-        happens for example when the machine is booted with the wrong system time.</para></listitem>
+      <varlistentry>
+        <term><option>--after-cursor=</option></term>
+
+        <listitem><para>Start showing entries from the location in the journal <emphasis>after</emphasis>
+        the location specified by the passed cursor.  The cursor is shown when the
+        <option>--show-cursor</option> option is used.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--cursor-file=<replaceable>FILE</replaceable></option></term>
+
+        <listitem><para>If <replaceable>FILE</replaceable> exists and contains a cursor, start showing
+        entries <emphasis>after</emphasis> this location.  Otherwise show entries according to the other
+        given options. At the end, write the cursor of the last entry to
+        <replaceable>FILE</replaceable>. Use this option to continually read the journal by sequentially
+        calling <command>journalctl</command>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-b <optional><optional><replaceable>ID</replaceable></optional><optional><replaceable>±offset</replaceable></optional>|<constant>all</constant></optional></option></term>
+        <term><option>--boot<optional>=<optional><replaceable>ID</replaceable></optional><optional><replaceable>±offset</replaceable></optional>|<constant>all</constant></optional></option></term>
+
+        <listitem><para>Show messages from a specific boot. This will add a match for
+        <literal>_BOOT_ID=</literal>.</para>
+
+        <para>The argument may be empty, in which case logs for the current boot will be shown.</para>
+
+        <para>If the boot ID is omitted, a positive <replaceable>offset</replaceable> will look up the boots
+        starting from the beginning of the journal, and an equal-or-less-than zero
+        <replaceable>offset</replaceable> will look up boots starting from the end of the journal. Thus,
+        <constant>1</constant> means the first boot found in the journal in chronological order,
+        <constant>2</constant> the second and so on; while <constant>-0</constant> is the last boot,
+        <constant>-1</constant> the boot before last, and so on. An empty <replaceable>offset</replaceable>
+        is equivalent to specifying <constant>-0</constant>, except when the current boot is not the last
+        boot (e.g. because <option>--directory</option> was specified to look at logs from a different
+        machine).</para>
+
+        <para>If the 32-character <replaceable>ID</replaceable> is specified, it may optionally be followed
+        by <replaceable>offset</replaceable> which identifies the boot relative to the one given by boot
+        <replaceable>ID</replaceable>. Negative values mean earlier boots and positive values mean later
+        boots. If <replaceable>offset</replaceable> is not specified, a value of zero is assumed, and the
+        logs for the boot given by <replaceable>ID</replaceable> are shown.</para>
+
+        <para>The special argument <constant>all</constant> can be used to negate the effect of an earlier
+        use of <option>-b</option>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-u</option></term>
+        <term><option>--unit=<replaceable>UNIT</replaceable>|<replaceable>PATTERN</replaceable></option></term>
+
+        <listitem><para>Show messages for the specified systemd unit <replaceable>UNIT</replaceable> (such as
+        a service unit), or for any of the units matched by <replaceable>PATTERN</replaceable>.  If a pattern
+        is specified, a list of unit names found in the journal is compared with the specified pattern and
+        all that match are used. For each unit name, a match is added for messages from the unit
+        (<literal>_SYSTEMD_UNIT=<replaceable>UNIT</replaceable></literal>), along with additional matches for
+        messages from systemd and messages about coredumps for the specified unit. A match is also added for
+        <literal>_SYSTEMD_SLICE=<replaceable>UNIT</replaceable></literal>, such that if the provided
+        <replaceable>UNIT</replaceable> is a
+        <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        unit, all logs of children of the slice will be shown.</para>
+
+        <para>With <option>--user</option>, all <option>--unit</option> arguments will be converted to match
+        user messages as if specified with <option>--user-unit</option>.</para>
+
+        <para>This parameter can be specified multiple times.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--user-unit=</option></term>
+
+        <listitem><para>Show messages for the specified user session unit. This will add a match for messages
+        from the unit (<literal>_SYSTEMD_USER_UNIT=</literal> and <literal>_UID=</literal>) and additional
+        matches for messages from session systemd and messages about coredumps for the specified unit. A
+        match is also added for <literal>_SYSTEMD_USER_SLICE=<replaceable>UNIT</replaceable></literal>, such
+        that if the provided <replaceable>UNIT</replaceable> is a
+        <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        unit, all logs of children of the unit will be shown.</para>
+
+        <para>This parameter can be specified multiple times.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-t</option></term>
+        <term><option>--identifier=<replaceable>SYSLOG_IDENTIFIER</replaceable></option></term>
+
+        <listitem><para>Show messages for the specified syslog identifier
+        <replaceable>SYSLOG_IDENTIFIER</replaceable>.</para>
+
+        <para>This parameter can be specified multiple times.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-p</option></term>
+        <term><option>--priority=</option></term>
+
+        <listitem><para>Filter output by message priorities or priority ranges. Takes either a single numeric
+        or textual log level (i.e. between 0/<literal>emerg</literal> and 7/<literal>debug</literal>), or a
+        range of numeric/text log levels in the form FROM..TO. The log levels are the usual syslog log levels
+        as documented in <citerefentry
+        project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+        i.e. <literal>emerg</literal> (0), <literal>alert</literal> (1), <literal>crit</literal> (2),
+        <literal>err</literal> (3), <literal>warning</literal> (4), <literal>notice</literal> (5),
+        <literal>info</literal> (6), <literal>debug</literal> (7). If a single log level is specified, all
+        messages with this log level or a lower (hence more important) log level are shown. If a range is
+        specified, all messages within the range are shown, including both the start and the end value of the
+        range. This will add <literal>PRIORITY=</literal> matches for the specified
+        priorities.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--facility=</option></term>
+
+        <listitem><para>Filter output by syslog facility. Takes a comma-separated list of numbers or
+        facility names. The names are the usual syslog facilities as documented in <citerefentry
+        project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+        <option>--facility=help</option> may be used to display a list of known facility names and exit.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-g</option></term>
+        <term><option>--grep=</option></term>
+
+        <listitem><para>Filter output to entries where the <varname>MESSAGE=</varname> field matches the
+        specified regular expression. PERL-compatible regular expressions are used, see <citerefentry
+        project='url'><refentrytitle
+        url='http://pcre.org/current/doc/html/pcre2pattern.html'>pcre2pattern</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+        for a detailed description of the syntax.</para>
+
+        <para>If the pattern is all lowercase, matching is case insensitive.  Otherwise, matching is case
+        sensitive. This can be overridden with the <option>--case-sensitive</option> option, see
+        below.</para>
+
+        <para>When used with <option>--lines=</option>, <option>--reverse</option> is implied.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--case-sensitive<optional>=BOOLEAN</optional></option></term>
+
+        <listitem><para>Make pattern matching case sensitive or case insensitive.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-k</option></term>
+        <term><option>--dmesg</option></term>
+
+        <listitem><para>Show only kernel messages. This implies <option>-b</option> and adds the match
+        <literal>_TRANSPORT=kernel</literal>.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Output Options</title>
+
+    <para>The following options control how journal records are printed:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>-o</option></term>
+        <term><option>--output=</option></term>
+
+        <listitem><para>Controls the formatting of the journal entries that are shown. Takes one of the
+        following options:</para>
+
+        <variablelist>
+          <varlistentry>
+            <term><option>short</option></term>
+            <listitem><para>is the default and generates an output that is mostly identical to the
+            formatting of classic syslog files, showing one line per journal entry.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>short-full</option></term>
+            <listitem><para>is very similar, but shows timestamps in the format the
+            <option>--since=</option> and <option>--until=</option> options accept. Unlike the timestamp
+            information shown in <option>short</option> output mode this mode includes weekday, year and
+            timezone information in the output, and is locale-independent.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>short-iso</option></term>
+            <listitem><para>is very similar, but shows ISO 8601 wallclock timestamps.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>short-iso-precise</option></term>
+            <listitem><para>as for <option>short-iso</option> but includes full microsecond
+            precision.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>short-precise</option></term>
+            <listitem><para>is very similar, but shows classic syslog timestamps with full microsecond
+            precision.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>short-monotonic</option></term>
+            <listitem><para>is very similar, but shows monotonic timestamps instead of wallclock
+            timestamps.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>short-delta</option></term>
+            <listitem><para>as for <option>short-monotonic</option> but includes the time difference
+            to the previous entry.
+            Maybe unreliable time differences are marked by a <literal>*</literal>.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>short-unix</option></term>
+            <listitem><para>is very similar, but shows seconds passed since January 1st 1970 UTC instead of
+            wallclock timestamps ("UNIX time"). The time is shown with microsecond accuracy.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>verbose</option></term>
+            <listitem><para>shows the full-structured entry items with all fields.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>export</option></term>
+            <listitem><para>serializes the journal into a binary (but mostly text-based) stream suitable
+            for backups and network transfer (see <ulink
+            url="https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-export-format">Journal Export
+            Format</ulink> for more information). To import the binary stream back into native journald
+            format use
+            <citerefentry><refentrytitle>systemd-journal-remote</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>json</option></term>
+            <listitem><para>formats entries as JSON objects, separated by newline characters (see <ulink
+            url="https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-json-format">Journal JSON Format</ulink>
+            for more information). Field values are generally encoded as JSON strings, with three exceptions:
+            <orderedlist>
+              <listitem><para>Fields larger than 4096 bytes are encoded as <constant>null</constant>
+              values. (This may be turned off by passing <option>--all</option>, but be aware that this may
+              allocate overly long JSON objects.)</para></listitem>
+
+              <listitem><para>Journal entries permit non-unique fields within the same log entry. JSON does
+              not allow non-unique fields within objects. Due to this, if a non-unique field is encountered a
+              JSON array is used as field value, listing all field values as elements.</para></listitem>
+
+              <listitem><para>Fields containing non-printable or non-UTF8 bytes are encoded as arrays
+              containing the raw bytes individually formatted as unsigned numbers.</para></listitem>
+            </orderedlist>
+
+            Note that this encoding is reversible (with the exception of the size limit).</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>json-pretty</option></term>
+            <listitem><para>formats entries as JSON data structures, but formats them in multiple lines in
+            order to make them more readable by humans.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>json-sse</option></term>
+            <listitem><para>formats entries as JSON data structures, but wraps them in a format suitable for
+            <ulink
+            url="https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events">Server-Sent
+            Events</ulink>.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>json-seq</option></term>
+            <listitem><para>formats entries as JSON data structures, but prefixes them with an ASCII Record
+            Separator character (0x1E) and suffixes them with an ASCII Line Feed character (0x0A), in
+            accordance with <ulink url="https://tools.ietf.org/html/rfc7464">JavaScript Object Notation
+            (JSON) Text Sequences </ulink> (<literal>application/json-seq</literal>).</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>cat</option></term>
+            <listitem><para>generates a very terse output, only showing the actual message of each journal
+            entry with no metadata, not even a timestamp. If combined with the
+            <option>--output-fields=</option> option will output the listed fields for each log record,
+            instead of the message.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>with-unit</option></term>
+            <listitem><para>similar to <option>short-full</option>, but prefixes the unit and user unit names
+            instead of the traditional syslog identifier. Useful when using templated instances, as it will
+            include the arguments in the unit names.</para></listitem>
+          </varlistentry>
+        </variablelist></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--output-fields=</option></term>
+
+        <listitem><para>A comma separated list of the fields which should be included in the output. This
+        has an effect only for the output modes which would normally show all fields
+        (<option>verbose</option>, <option>export</option>, <option>json</option>,
+        <option>json-pretty</option>, <option>json-sse</option> and <option>json-seq</option>), as well as
+        on <option>cat</option>. For the former, the <literal>__CURSOR</literal>,
+        <literal>__REALTIME_TIMESTAMP</literal>, <literal>__MONOTONIC_TIMESTAMP</literal>, and
+        <literal>_BOOT_ID</literal> fields are always printed.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-n</option></term>
+        <term><option>--lines=</option></term>
+
+        <listitem><para>Show the most recent journal events and limit the number of events shown. If
+        <option>--follow</option> is used, this option is implied. The argument is a positive integer or
+        <literal>all</literal> to disable line limiting. The default value is 10 if no argument is
+        given.</para>
+
+        <para>When used with <option>--grep=</option>, <option>--reverse</option> is implied.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-r</option></term>
+        <term><option>--reverse</option></term>
+
+        <listitem><para>Reverse output so that the newest entries are displayed first.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--show-cursor</option></term>
+
+        <listitem><para>The cursor is shown after the last entry after two dashes:</para>
+        <programlisting>-- cursor: s=0639…</programlisting>
+        <para>The format of the cursor is private and subject to change.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--utc</option></term>
+
+        <listitem><para>Express time in Coordinated Universal Time (UTC).</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-x</option></term>
+        <term><option>--catalog</option></term>
+
+        <listitem><para>Augment log lines with explanation texts from the message catalog. This will add
+        explanatory help texts to log messages in the output where this is available. These short help texts
+        will explain the context of an error or log event, possible solutions, as well as pointers to support
+        forums, developer documentation, and any other relevant manuals. Note that help texts are not
+        available for all messages, but only for selected ones. For more information on the message catalog,
+        please refer to the <ulink url="https://www.freedesktop.org/wiki/Software/systemd/catalog">Message
+        Catalog Developer Documentation</ulink>.</para>
+
+        <para>Note: when attaching <command>journalctl</command> output to bug reports, please do
+        <emphasis>not</emphasis> use <option>-x</option>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--no-hostname</option></term>
+
+        <listitem><para>Don't show the hostname field of log messages originating from the local host. This
+        switch has an effect only on the <option>short</option> family of output modes (see above).</para>
+
+        <para>Note: this option does not remove occurrences of the hostname from log entries themselves, so
+        it does not prevent the hostname from being visible in the logs.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--no-full</option></term>
+        <term><option>--full</option></term>
+        <term><option>-l</option></term>
+
+        <listitem><para>Ellipsize fields when they do not fit in available columns.  The default is to show
+        full fields, allowing them to wrap or be truncated by the pager, if one is used.</para>
+
+        <para>The old options <option>-l</option>/<option>--full</option> are not useful anymore, except to
+        undo <option>--no-full</option>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-a</option></term>
+        <term><option>--all</option></term>
+
+        <listitem><para>Show all fields in full, even if they include unprintable characters or are very
+        long. By default, fields with unprintable characters are abbreviated as "blob data". (Note that the
+        pager may escape unprintable characters again.)</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-f</option></term>
+        <term><option>--follow</option></term>
+
+        <listitem><para>Show only the most recent journal entries, and continuously print new entries as
+        they are appended to the journal.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--no-tail</option></term>
+
+        <listitem><para>Show all stored output lines, even in follow mode. Undoes the effect of
+        <option>--lines=</option>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-q</option></term>
+        <term><option>--quiet</option></term>
+
+        <listitem><para>Suppresses all informational messages (i.e. "-- Journal begins at …", "-- Reboot
+        --"), any warning messages regarding inaccessible system journals when run as a normal
+        user.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Pager Control Options</title>
+
+    <para>The following options control page support:</para>
+
+    <variablelist>
+
+      <xi:include href="standard-options.xml" xpointer="no-pager" />
+
+      <varlistentry>
+        <term><option>-e</option></term>
+        <term><option>--pager-end</option></term>
+
+        <listitem><para>Immediately jump to the end of the journal inside the implied pager tool. This
+        implies <option>-n1000</option> to guarantee that the pager will not buffer logs of unbounded
+        size. This may be overridden with an explicit <option>-n</option> with some other numeric value,
+        while <option>-nall</option> will disable this cap.  Note that this option is only supported for
+        the <citerefentry
+        project='man-pages'><refentrytitle>less</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        pager.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Forward Secure Sealing (FSS) Options</title>
+
+    <para>The following options may be used together with the <option>--setup-keys</option> command described
+    below:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>--interval=</option></term>
+
+        <listitem><para>Specifies the change interval for the sealing key when generating an FSS key pair
+        with <option>--setup-keys</option>. Shorter intervals increase CPU consumption but shorten the time
+        range of undetectable journal alterations. Defaults to 15min.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--verify-key=</option></term>
+
+        <listitem><para>Specifies the FSS verification key to use for the <option>--verify</option>
+        operation.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--force</option></term>
+
+        <listitem><para>When <option>--setup-keys</option> is passed and Forward Secure Sealing (FSS) has
+        already been configured, recreate FSS keys.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Commands</title>
+
+    <para>The following commands are understood. If none is specified the default is to display journal records.</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>-N</option></term>
+        <term><option>--fields</option></term>
+
+        <listitem><para>Print all field names currently used in all entries of the journal.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-F</option></term>
+        <term><option>--field=</option></term>
+
+        <listitem><para>Print all possible data values the specified field can take in all entries of the
+        journal.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--list-boots</option></term>
+
+        <listitem><para>Show a tabular list of boot numbers (relative to the current boot), their IDs, and
+        the timestamps of the first and last message pertaining to the boot.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>--disk-usage</option></term>
 
-        <listitem><para>Shows the current disk usage of all journal
-        files. This shows the sum of the disk usage of all archived
-        and active journal files.</para></listitem>
+        <listitem><para>Shows the current disk usage of all journal files. This shows the sum of the disk
+        usage of all archived and active journal files.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -814,130 +736,69 @@
         <term><option>--vacuum-time=</option></term>
         <term><option>--vacuum-files=</option></term>
 
-        <listitem><para>Removes the oldest archived journal files until the disk space they use falls below the
-        specified size (specified with the usual <literal>K</literal>, <literal>M</literal>, <literal>G</literal> and
-        <literal>T</literal> suffixes), or all archived journal files contain no data older than the specified timespan
-        (specified with the usual <literal>s</literal>, <literal>m</literal>, <literal>h</literal>,
-        <literal>days</literal>, <literal>months</literal>, <literal>weeks</literal> and <literal>years</literal>
-        suffixes), or no more than the specified number of separate journal files remain. Note that running
-        <option>--vacuum-size=</option> has only an indirect effect on the output shown by
-        <option>--disk-usage</option>, as the latter includes active journal files, while the vacuuming operation only
-        operates on archived journal files. Similarly, <option>--vacuum-files=</option> might not actually reduce the
-        number of journal files to below the specified number, as it will not remove active journal
-        files.</para>
+        <listitem><para>Removes the oldest archived journal files until the disk space they use falls below
+        the specified size (specified with the usual <literal>K</literal>, <literal>M</literal>,
+        <literal>G</literal> and <literal>T</literal> suffixes), or all archived journal files contain no
+        data older than the specified timespan (specified with the usual <literal>s</literal>,
+        <literal>m</literal>, <literal>h</literal>, <literal>days</literal>, <literal>months</literal>,
+        <literal>weeks</literal> and <literal>years</literal> suffixes), or no more than the specified
+        number of separate journal files remain. Note that running <option>--vacuum-size=</option> has only
+        an indirect effect on the output shown by <option>--disk-usage</option>, as the latter includes
+        active journal files, while the vacuuming operation only operates on archived journal
+        files. Similarly, <option>--vacuum-files=</option> might not actually reduce the number of journal
+        files to below the specified number, as it will not remove active journal files.</para>
 
-        <para><option>--vacuum-size=</option>, <option>--vacuum-time=</option> and <option>--vacuum-files=</option>
-        may be combined in a single invocation to enforce any combination of a size, a time and a number of files limit
-        on the archived journal files. Specifying any of these three parameters as zero is equivalent to not enforcing
-        the specific limit, and is thus redundant.</para>
+        <para><option>--vacuum-size=</option>, <option>--vacuum-time=</option> and
+        <option>--vacuum-files=</option> may be combined in a single invocation to enforce any combination
+        of a size, a time and a number of files limit on the archived journal files. Specifying any of
+        these three parameters as zero is equivalent to not enforcing the specific limit, and is thus
+        redundant.</para>
 
-        <para>These three switches may also be combined with <option>--rotate</option> into one command. If so, all
-        active files are rotated first, and the requested vacuuming operation is executed right after. The rotation has
-        the effect that all currently active files are archived (and potentially new, empty journal files opened as
-        replacement), and hence the vacuuming operation has the greatest effect as it can take all log data written so
-        far into account.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--list-catalog
-        <optional><replaceable>128-bit-ID…</replaceable></optional>
-        </option></term>
-
-        <listitem><para>List the contents of the message catalog as a
-        table of message IDs, plus their short description strings.
-        </para>
-
-        <para>If any <replaceable>128-bit-ID</replaceable>s are
-        specified, only those entries are shown.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--dump-catalog
-        <optional><replaceable>128-bit-ID…</replaceable></optional>
-        </option></term>
-
-        <listitem><para>Show the contents of the message catalog, with
-        entries separated by a line consisting of two dashes and the
-        ID (the format is the same as <filename>.catalog</filename>
-        files).</para>
-
-        <para>If any <replaceable>128-bit-ID</replaceable>s are
-        specified, only those entries are shown.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--update-catalog</option></term>
-
-        <listitem><para>Update the message catalog index. This command
-        needs to be executed each time new catalog files are
-        installed, removed, or updated to rebuild the binary catalog
-        index.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--setup-keys</option></term>
-
-        <listitem><para>Instead of showing journal contents, generate
-        a new key pair for Forward Secure Sealing (FSS). This will
-        generate a sealing key and a verification key. The sealing key
-        is stored in the journal data directory and shall remain on
-        the host. The verification key should be stored
-        externally. Refer to the <option>Seal=</option> option in
-        <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-        for information on Forward Secure Sealing and for a link to a
-        refereed scholarly paper detailing the cryptographic theory it
-        is based on.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--force</option></term>
-
-        <listitem><para>When <option>--setup-keys</option> is passed
-        and Forward Secure Sealing (FSS) has already been configured,
-        recreate FSS keys.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--interval=</option></term>
-
-        <listitem><para>Specifies the change interval for the sealing
-        key when generating an FSS key pair with
-        <option>--setup-keys</option>. Shorter intervals increase CPU
-        consumption but shorten the time range of undetectable journal
-        alterations. Defaults to 15min.</para></listitem>
+        <para>These three switches may also be combined with <option>--rotate</option> into one command. If
+        so, all active files are rotated first, and the requested vacuuming operation is executed right
+        after. The rotation has the effect that all currently active files are archived (and potentially new,
+        empty journal files opened as replacement), and hence the vacuuming operation has the greatest effect
+        as it can take all log data written so far into account.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>--verify</option></term>
 
-        <listitem><para>Check the journal file for internal
-        consistency. If the file has been generated with FSS enabled and
-        the FSS verification key has been specified with
-        <option>--verify-key=</option>, authenticity of the journal file
-        is verified.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--verify-key=</option></term>
-
-        <listitem><para>Specifies the FSS verification key to use for
-        the <option>--verify</option> operation.</para></listitem>
+        <listitem><para>Check the journal file for internal consistency. If the file has been generated
+        with FSS enabled and the FSS verification key has been specified with
+        <option>--verify-key=</option>, authenticity of the journal file is verified.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>--sync</option></term>
 
-        <listitem><para>Asks the journal daemon to write all yet
-        unwritten journal data to the backing file system and
-        synchronize all journals. This call does not return until the
-        synchronization operation is complete. This command guarantees
-        that any log messages written before its invocation are safely
+        <listitem><para>Asks the journal daemon to write all yet unwritten journal data to the backing file
+        system and synchronize all journals. This call does not return until the synchronization operation
+        is complete. This command guarantees that any log messages written before its invocation are safely
         stored on disk at the time it returns.</para></listitem>
       </varlistentry>
 
       <varlistentry>
+        <term><option>--relinquish-var</option></term>
+
+        <listitem><para>Asks the journal daemon for the reverse operation to <option>--flush</option>: if
+        requested the daemon will write further log data to <filename>/run/log/journal/</filename> and
+        stops writing to <filename>/var/log/journal/</filename>. A subsequent call to
+        <option>--flush</option> causes the log output to switch back to
+        <filename>/var/log/journal/</filename>, see above.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--smart-relinquish-var</option></term>
+
+        <listitem><para>Similar to <option>--relinquish-var</option>, but executes no operation if the root
+        file system and <filename>/var/lib/journal/</filename> reside on the same mount point. This operation
+        is used during system shutdown in order to make the journal daemon stop writing data to
+        <filename>/var/log/journal/</filename> in case that directory is located on a mount point that needs
+        to be unmounted.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--flush</option></term>
 
         <listitem><para>Asks the journal daemon to flush any log data stored in
@@ -951,47 +812,76 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>--relinquish-var</option></term>
-
-        <listitem><para>Asks the journal daemon for the reverse operation to <option>--flush</option>: if
-        requested the daemon will write further log data to <filename>/run/log/journal/</filename> and stops
-        writing to <filename>/var/log/journal/</filename>. A subsequent call to <option>--flush</option>
-        causes the log output to switch back to <filename>/var/log/journal/</filename>, see
-        above.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><option>--smart-relinquish-var</option></term>
-
-        <listitem><para>Similar to <option>--relinquish-var</option> but executes no operation if the root file
-        system and <filename>/var/lib/journal/</filename> reside on the same mount point. This operation is
-        used during system shutdown in order to make the journal daemon stop writing data to
-        <filename>/var/log/journal/</filename> in case that directory is located on a mount point that needs
-        to be unmounted.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
         <term><option>--rotate</option></term>
 
-        <listitem><para>Asks the journal daemon to rotate journal files. This call does not return until the rotation
-        operation is complete. Journal file rotation has the effect that all currently active journal files are marked
-        as archived and renamed, so that they are never written to in future. New (empty) journal files are then
-        created in their place. This operation may be combined with <option>--vacuum-size=</option>,
-        <option>--vacuum-time=</option> and <option>--vacuum-file=</option> into a single command, see
-        above.</para></listitem>
+        <listitem><para>Asks the journal daemon to rotate journal files. This call does not return until
+        the rotation operation is complete. Journal file rotation has the effect that all currently active
+        journal files are marked as archived and renamed, so that they are never written to in future. New
+        (empty) journal files are then created in their place. This operation may be combined with
+        <option>--vacuum-size=</option>, <option>--vacuum-time=</option> and
+        <option>--vacuum-file=</option> into a single command, see above.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--header</option></term>
+
+        <listitem><para>Instead of showing journal contents, show internal header information of the
+        journal fields accessed.</para>
+
+        <para>This option is particularly useful when trying to identify out-of-order journal entries, as
+        happens for example when the machine is booted with the wrong system time.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--list-catalog <optional><replaceable>128-bit-ID…</replaceable></optional></option></term>
+
+        <listitem><para>List the contents of the message catalog as a table of message IDs, plus their
+        short description strings.</para>
+
+        <para>If any <replaceable>128-bit-ID</replaceable>s are specified, only those entries are
+        shown.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--dump-catalog <optional><replaceable>128-bit-ID…</replaceable></optional></option></term>
+
+        <listitem><para>Show the contents of the message catalog, with entries separated by a line
+        consisting of two dashes and the ID (the format is the same as <filename>.catalog</filename>
+        files).</para>
+
+        <para>If any <replaceable>128-bit-ID</replaceable>s are specified, only those entries are
+        shown.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--update-catalog</option></term>
+
+        <listitem><para>Update the message catalog index. This command needs to be executed each time new
+        catalog files are installed, removed, or updated to rebuild the binary catalog
+        index.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--setup-keys</option></term>
+
+        <listitem><para>Instead of showing journal contents, generate a new key pair for Forward Secure
+        Sealing (FSS). This will generate a sealing key and a verification key. The sealing key is stored in
+        the journal data directory and shall remain on the host. The verification key should be stored
+        externally. Refer to the <option>Seal=</option> option in
+        <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
+        information on Forward Secure Sealing and for a link to a refereed scholarly paper detailing the
+        cryptographic theory it is based on.</para></listitem>
       </varlistentry>
 
       <xi:include href="standard-options.xml" xpointer="help" />
       <xi:include href="standard-options.xml" xpointer="version" />
-      <xi:include href="standard-options.xml" xpointer="no-pager" />
     </variablelist>
   </refsect1>
 
   <refsect1>
     <title>Exit status</title>
 
-    <para>On success, 0 is returned; otherwise, a non-zero failure
-    code is returned.</para>
+    <para>On success, 0 is returned; otherwise, a non-zero failure code is returned.</para>
   </refsect1>
 
   <xi:include href="common-variables.xml" />
@@ -999,47 +889,42 @@
   <refsect1>
     <title>Examples</title>
 
-    <para>Without arguments, all collected logs are shown
-    unfiltered:</para>
+    <para>Without arguments, all collected logs are shown unfiltered:</para>
 
     <programlisting>journalctl</programlisting>
 
-    <para>With one match specified, all entries with a field matching
-    the expression are shown:</para>
+    <para>With one match specified, all entries with a field matching the expression are shown:</para>
 
     <programlisting>journalctl _SYSTEMD_UNIT=avahi-daemon.service
 journalctl _SYSTEMD_CGROUP=/user.slice/user-42.slice/session-c1.scope</programlisting>
 
-    <para>If two different fields are matched, only entries matching
-    both expressions at the same time are shown:</para>
+    <para>If two different fields are matched, only entries matching both expressions at the same time are
+    shown:</para>
 
     <programlisting>journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097</programlisting>
 
-    <para>If two matches refer to the same field, all entries matching
-    either expression are shown:</para>
+    <para>If two matches refer to the same field, all entries matching either expression are shown:</para>
 
     <programlisting>journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service</programlisting>
 
-    <para>If the separator <literal>+</literal> is used, two
-    expressions may be combined in a logical OR. The following will
-    show all messages from the Avahi service process with the PID
-    28097 plus all messages from the D-Bus service (from any of its
-    processes):</para>
+    <para>If the separator <literal>+</literal> is used, two expressions may be combined in a logical OR. The
+    following will show all messages from the Avahi service process with the PID 28097 plus all messages from
+    the D-Bus service (from any of its processes):</para>
 
     <programlisting>journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service</programlisting>
 
-    <para>To show all fields emitted <emphasis>by</emphasis> a unit and <emphasis>about</emphasis>
-    the unit, option <option>-u</option>/<option>--unit=</option> should be used.
-    <command>journalctl -u <replaceable>name</replaceable></command>
-    expands to a complex filter similar to
+    <para>To show all fields emitted <emphasis>by</emphasis> a unit and <emphasis>about</emphasis> the unit,
+    option <option>-u</option>/<option>--unit=</option> should be used. <command>journalctl -u
+    <replaceable>name</replaceable></command> expands to a complex filter similar to
+
     <programlisting>_SYSTEMD_UNIT=<replaceable>name</replaceable>.service
   + UNIT=<replaceable>name</replaceable>.service _PID=1
   + OBJECT_SYSTEMD_UNIT=<replaceable>name</replaceable>.service _UID=0
-  + COREDUMP_UNIT=<replaceable>name</replaceable>.service _UID=0 MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1
-    </programlisting>
-    (see <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-    for an explanation of those patterns).
-    </para>
+  + COREDUMP_UNIT=<replaceable>name</replaceable>.service _UID=0 MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1</programlisting>
+
+    (see
+    <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    for an explanation of those patterns).</para>
 
     <para>Show all logs generated by the D-Bus executable:</para>
 
@@ -1049,17 +934,16 @@
 
     <programlisting>journalctl -k -b -1</programlisting>
 
-    <para>Show a live log display from a system service
-    <filename>apache.service</filename>:</para>
+    <para>Show a live log display from a system service <filename>apache.service</filename>:</para>
 
     <programlisting>journalctl -f -u apache</programlisting>
-
   </refsect1>
 
   <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/journald.conf.xml b/man/journald.conf.xml
index 4b0dd90..50c33e4 100644
--- a/man/journald.conf.xml
+++ b/man/journald.conf.xml
@@ -87,6 +87,14 @@
         is not removed. In the other direction,
         <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> with
         the <option>--flush</option> option may be used to move volatile data to persistent storage.</para>
+
+        <para>When journal namespacing (see <varname>LogNamespace=</varname> in
+        <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>) is
+        used, setting <varname>Storage=</varname> to <literal>volatile</literal> or <literal>auto</literal>
+        will not have an effect on the creation of the per-namespace logs directory in
+        <filename>/var/log/journal/</filename>, as the <filename>systemd-journald@.service</filename> service
+        file by default carries <varname>LogsDirectory=</varname>. To turn that off, add a unit file drop-in
+        file that sets <varname>LogsDirectory=</varname> to an empty string.</para>
         </listitem>
       </varlistentry>
 
@@ -265,21 +273,16 @@
         <varname>RuntimeMaxUse=</varname> limit after a vacuuming operation is
         complete.</para>
 
-        <para><varname>SystemMaxFileSize=</varname> and
-        <varname>RuntimeMaxFileSize=</varname> control how large
-        individual journal files may grow at most. This influences
-        the granularity in which disk space is made available through
-        rotation, i.e. deletion of historic data. Defaults to one
-        eighth of the values configured with
-        <varname>SystemMaxUse=</varname> and
-        <varname>RuntimeMaxUse=</varname>, so that usually seven
-        rotated journal files are kept as history.</para>
+        <para><varname>SystemMaxFileSize=</varname> and <varname>RuntimeMaxFileSize=</varname> control how
+        large individual journal files may grow at most. This influences the granularity in which disk space
+        is made available through rotation, i.e. deletion of historic data. Defaults to one eighth of the
+        values configured with <varname>SystemMaxUse=</varname> and <varname>RuntimeMaxUse=</varname>, so
+        that usually seven rotated journal files are kept as history. If the journal compact mode is enabled
+        (enabled by default), the maximum file size is capped to 4G.</para>
 
-        <para>Specify values in bytes or use K, M, G, T, P, E as
-        units for the specified sizes (equal to 1024, 1024², … bytes).
-        Note that size limits are enforced synchronously when journal
-        files are extended, and no explicit rotation step triggered by
-        time is needed.</para>
+        <para>Specify values in bytes or use K, M, G, T, P, E as units for the specified sizes (equal to
+        1024, 1024², … bytes). Note that size limits are enforced synchronously when journal files are
+        extended, and no explicit rotation step triggered by time is needed.</para>
 
         <para><varname>SystemMaxFiles=</varname> and
         <varname>RuntimeMaxFiles=</varname> control how many
@@ -420,13 +423,18 @@
       <varlistentry>
         <term><varname>Audit=</varname></term>
 
-        <listitem><para>Takes a boolean value. If enabled <command>systemd-journal</command> will turn on
+        <listitem><para>Takes a boolean value. If enabled <command>systemd-journald</command> will turn on
         kernel auditing on start-up. If disabled it will turn it off. If unset it will neither enable nor
-        disable it, leaving the previous state unchanged. Note that this option does not control whether
-        <command>systemd-journald</command> collects generated audit records, it just controls whether it
-        tells the kernel to generate them. This means if another tool turns on auditing even if
-        <command>systemd-journald</command> left it off, it will still collect the generated
-        messages. Defaults to on.</para></listitem>
+        disable it, leaving the previous state unchanged.  This means if another tool turns on auditing even
+        if <command>systemd-journald</command> left it off, it will still collect the generated
+        messages. Defaults to on.</para>
+
+        <para>Note that this option does not control whether <command>systemd-journald</command> collects
+        generated audit records, it just controls whether it tells the kernel to generate them. If you need
+        to prevent <command>systemd-journald</command> from collecting the generated messages, the socket
+        unit <literal>systemd-journald-audit.socket</literal> can be disabled and in this case this setting
+        is without effect.</para>
+        </listitem>
       </varlistentry>
 
       <varlistentry>
diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
index f546a11..0528c4b 100644
--- a/man/kernel-command-line.xml
+++ b/man/kernel-command-line.xml
@@ -27,8 +27,8 @@
   <refsect1>
     <title>Description</title>
 
-    <para>The kernel, the initial RAM disk (initrd) and basic userspace functionality may be configured at
-    boot via kernel command line arguments. In addition, various systemd tools look at the EFI variable
+    <para>The kernel, the programs running in the initrd and in the host system may be configured at boot via
+    kernel command line arguments. In addition, various systemd tools look at the EFI variable
     <literal>SystemdOptions</literal> (if available). Both sources are combined, but the kernel command line
     has higher priority. Please note that <emphasis>the EFI variable is only used by systemd tools, and is
     ignored by the kernel and other user space tools</emphasis>, so it is not a replacement for the kernel
@@ -36,12 +36,11 @@
 
     <para>For command line parameters understood by the kernel, please
     see
-    <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html"><filename>kernel-parameters.html</filename></ulink>
+    <ulink url="https://docs.kernel.org/admin-guide/kernel-parameters.html"><filename>kernel-parameters.html</filename></ulink>
     and
     <citerefentry project='man-pages'><refentrytitle>bootparam</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
 
-    <para>For command line parameters understood by the initial RAM
-    disk, please see
+    <para>For command line parameters understood by the initrd, see
     <citerefentry project='man-pages'><refentrytitle>dracut.cmdline</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
     or the documentation of the specific initrd implementation of your
     installation.</para>
@@ -71,8 +70,10 @@
         <term><varname>systemd.default_standard_error=</varname></term>
         <term><varname>systemd.setenv=</varname></term>
         <term><varname>systemd.machine_id=</varname></term>
-        <term><varname>systemd.unified_cgroup_hierarchy</varname></term>
-        <term><varname>systemd.legacy_systemd_cgroup_controller</varname></term>
+        <term><varname>systemd.set_credential=</varname></term>
+        <term><varname>systemd.import_credentials=</varname></term>
+        <term><varname>systemd.reload_limit_interval_sec=</varname></term>
+        <term><varname>systemd.reload_limit_burst=</varname></term>
         <listitem>
           <para>Parameters understood by the system and service
           manager to control system behavior. For details, see
@@ -335,11 +336,16 @@
         <term><varname>rw</varname></term>
 
         <listitem>
-          <para>Configures the root file system and its file system
-          type and mount options, as well as whether it shall be
-          mounted read-only or read-write initially. For details,
-          see
+          <para>Configures the root file system and its file system type and mount options, as well as
+          whether it shall be mounted read-only or read-write initially. For details, see
           <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+
+          <para>If <varname>root=</varname> is not set (or set to <literal>gpt-auto</literal>) the automatic
+          root partition discovery implemented by
+          <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+          will be in effect. In this case <varname>rootfstype=</varname>, <varname>rootflags=</varname>,
+          <varname>ro</varname>, <varname>rw</varname> will be interpreted by
+          <command>systemd-gpt-auto-generator</command>.</para>
         </listitem>
       </varlistentry>
 
@@ -364,14 +370,28 @@
         <term><varname>systemd.verity_root_data=</varname></term>
         <term><varname>systemd.verity_root_hash=</varname></term>
         <term><varname>systemd.verity.root_options=</varname></term>
+        <term><varname>usrhash=</varname></term>
+        <term><varname>systemd.verity_usr_data=</varname></term>
+        <term><varname>systemd.verity_usr_hash=</varname></term>
+        <term><varname>systemd.verity_usr_options=</varname></term>
         <listitem>
-          <para>Configures the integrity protection root hash for the root file system, and other related
+          <para>Configures the integrity protection root hash for the root and <filename>/usr</filename> file systems, and other related
           parameters. For details, see
           <citerefentry><refentrytitle>systemd-veritysetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
         </listitem>
       </varlistentry>
 
       <varlistentry>
+        <term><varname>systemd.getty_auto=</varname></term>
+
+        <listitem>
+          <para>Configures whether the <filename>serial-getty@.service</filename> will run.
+          For details, see
+          <citerefentry><refentrytitle>systemd-getty-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>systemd.gpt_auto=</varname></term>
         <term><varname>rd.systemd.gpt_auto=</varname></term>
 
@@ -386,8 +406,9 @@
         <term><varname>systemd.default_timeout_start_sec=</varname></term>
 
         <listitem>
-          <para>Overwrites the default start job timeout <varname>DefaultTimeoutStartSec=</varname> at boot. For details,
-          see <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+          <para>Overrides the default start job timeout <varname>DefaultTimeoutStartSec=</varname> at
+          boot. For details, see
+          <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
         </listitem>
       </varlistentry>
 
@@ -395,7 +416,42 @@
         <term><varname>systemd.watchdog_device=</varname></term>
 
         <listitem>
-          <para>Overwrites the watchdog device path <varname>WatchdogDevice=</varname>. For details, see
+          <para>Overrides the watchdog device path <varname>WatchdogDevice=</varname>. For details, see
+          <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>systemd.watchdog_sec=</varname></term>
+
+        <listitem>
+          <para>Overrides the watchdog timeout settings otherwise configured with
+          <varname>RuntimeWatchdog=</varname>, <varname>RebootWatchdog=</varname> and
+          <varname>KExecWatchdogSec=</varname>. Takes a time value (if no unit is specified, seconds is the
+          implicitly assumed time unit) or the special strings <literal>off</literal> or
+          <literal>default</literal>. For details, see
+          <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>systemd.watchdog_pre_sec=</varname></term>
+
+        <listitem>
+          <para>Overrides the watchdog pre-timeout settings otherwise configured with
+          <varname>RuntimeWatchdogPreSec=</varname>. Takes a time value (if no unit is specified, seconds is the
+          implicitly assumed time unit) or the special strings <literal>off</literal> or
+          <literal>default</literal>. For details, see
+          <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>systemd.watchdog_pretimeout_governor=</varname></term>
+
+        <listitem>
+          <para>Overrides the watchdog pre-timeout settings otherwise configured with
+          <varname>RuntimeWatchdogPreGovernor=</varname>. Takes a string value. For details, see
           <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
         </listitem>
       </varlistentry>
@@ -423,6 +479,15 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>nameserver=</varname></term>
+        <term><varname>domain=</varname></term>
+
+        <listitem><para>Configures DNS server information and search domains, see
+        <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        for details.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>resume=</varname></term>
         <term><varname>resumeflags=</varname></term>
 
@@ -507,7 +572,19 @@
         the hostname, it simply controls the initial hostname set during early boot.</para></listitem>
       </varlistentry>
     </variablelist>
+  </refsect1>
 
+  <refsect1>
+      <title>History</title>
+
+      <variablelist>
+        <varlistentry>
+          <term>systemd 252</term>
+          <listitem><para>Kernel command-line arguments <varname>systemd.unified_cgroup_hierarchy</varname>
+          and <varname>systemd.legacy_systemd_cgroup_controller</varname> were deprecated. Please switch to
+          the unified cgroup hierarchy.</para></listitem>
+        </varlistentry>
+      </variablelist>
   </refsect1>
 
   <refsect1>
@@ -527,6 +604,7 @@
         <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemd-veritysetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+        <citerefentry><refentrytitle>systemd-getty-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemd-volatile-root.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemd-modules-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
diff --git a/man/kernel-install.xml b/man/kernel-install.xml
index 37eefe2..e50aeee 100644
--- a/man/kernel-install.xml
+++ b/man/kernel-install.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="kernel-install"
+<refentry id="kernel-install" conditional='ENABLE_KERNEL_INSTALL'
           xmlns:xi="http://www.w3.org/2001/XInclude">
 
   <refentryinfo>
@@ -18,14 +18,14 @@
 
   <refnamediv>
     <refname>kernel-install</refname>
-    <refpurpose>Add and remove kernel and initramfs images to and from /boot</refpurpose>
+    <refpurpose>Add and remove kernel and initrd images to and from /boot</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <cmdsynopsis>
       <command>kernel-install</command>
-      <arg choice="plain">COMMAND</arg>
       <arg choice="opt" rep="repeat">OPTIONS</arg>
+      <arg choice="plain">COMMAND</arg>
       <arg choice="plain"><replaceable>KERNEL-VERSION</replaceable></arg>
       <arg choice="plain"><replaceable>KERNEL-IMAGE</replaceable></arg>
       <arg choice="opt" rep="repeat"><replaceable>INITRD-FILE</replaceable></arg>
@@ -34,26 +34,31 @@
 
   <refsect1>
     <title>Description</title>
-    <para><command>kernel-install</command> is used to install and remove kernel and initramfs images to and
-    from the boot loader partition, referred to as <varname>$BOOT</varname> here. It will usually be one of
-    <filename>/boot/</filename>, <filename>/efi/</filename>, or <filename>/boot/efi/</filename>, see below.
-    </para>
+    <para><command>kernel-install</command> is used to install and remove kernel and initrd images
+    <footnote>
+      <para>Nowadays actually CPIO archives used as an "initramfs", rather than "initrd". See
+      <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry> for an
+      explanation.</para>
+    </footnote>
+    to and from the boot loader partition, referred to as <varname>$BOOT</varname> here. It will usually be
+    one of <filename>/boot/</filename>, <filename>/efi/</filename>, or <filename>/boot/efi/</filename>, see
+    below.</para>
 
-    <para><command>kernel-install</command> will execute the files
-    located in the directory <filename>/usr/lib/kernel/install.d/</filename>
-    and the local administration directory <filename>/etc/kernel/install.d/</filename>.
-    All files are collectively sorted and executed in lexical order, regardless of the directory in
-    which they live. However, files with identical filenames replace each other.
-    Files in <filename>/etc/kernel/install.d/</filename> take precedence over files with the same name
-    in <filename>/usr/lib/kernel/install.d/</filename>. This can be used to override a system-supplied
-    executables with a local file if needed; a symbolic link in <filename>/etc/kernel/install.d/</filename>
-    with the same name as an executable in <filename>/usr/lib/kernel/install.d/</filename>,
-    pointing to <filename>/dev/null</filename>, disables the executable entirely. Executables must have the
-    extension <literal>.install</literal>; other extensions are ignored.</para>
+    <para><command>kernel-install</command> will run the executable files ("plugins") located in the
+    directory <filename>/usr/lib/kernel/install.d/</filename> and the local administration directory
+    <filename>/etc/kernel/install.d/</filename>.  All files are collectively sorted and executed in lexical
+    order, regardless of the directory in which they live. However, files with identical filenames replace
+    each other.  Files in <filename>/etc/kernel/install.d/</filename> take precedence over files with the
+    same name in <filename>/usr/lib/kernel/install.d/</filename>. This can be used to override a
+    system-supplied executables with a local file if needed; a symbolic link in
+    <filename>/etc/kernel/install.d/</filename> with the same name as an executable in
+    <filename>/usr/lib/kernel/install.d/</filename>, pointing to <filename>/dev/null</filename>, disables the
+    executable entirely. Executables must have the extension <literal>.install</literal>; other extensions
+    are ignored.</para>
 
-    <para>An executable should return <constant>0</constant> on success. It may also
-    return <constant>77</constant> to cause the whole operation to terminate
-    (executables later in lexical order will be skipped).</para>
+    <para>An executable placed in these directories should return <constant>0</constant> on success. It may
+    also return <constant>77</constant> to cause the whole operation to terminate (executables later in
+    lexical order will be skipped).</para>
   </refsect1>
 
   <refsect1>
@@ -63,42 +68,54 @@
       <varlistentry>
         <term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable> ...]</command></term>
         <listitem>
-          <para>This command expects a kernel version string and a path to a kernel image file as
-          arguments. <command>kernel-install</command> calls the executables from
+          <para>This command expects a kernel version string and a path to a kernel image file as arguments.
+          Optionally, one or more initrd images may be specified as well (note that plugins might generate
+          additional ones). <command>kernel-install</command> calls the executable files from
           <filename>/usr/lib/kernel/install.d/*.install</filename> and
-          <filename>/etc/kernel/install.d/*.install</filename> with the following arguments:
+          <filename>/etc/kernel/install.d/*.install</filename> (i.e. the plugins) with the following
+          arguments:</para>
 
-          <programlisting>add <replaceable>KERNEL-VERSION</replaceable> <filename>$BOOT/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable> ...]</programlisting>
-          </para>
+          <programlisting>add <replaceable>KERNEL-VERSION</replaceable> <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable> ...]</programlisting>
 
-          <para>Three default plugins execute the following operations in this case:</para>
+          <para>The third argument directly refers to the path where to place kernel images, initrd
+          images and other resources for <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot
+          Loader Specification</ulink> Type #1 entries (the "entry directory"). If other boot loader schemes
+          are used the parameter may be ignored. The <replaceable>ENTRY-TOKEN</replaceable> string is
+          typically the machine ID and is supposed to identify the local installation on the system. For
+          details see below.</para>
+
+          <para>Two default plugins execute the following operations in this case:</para>
 
           <itemizedlist>
-            <listitem><para><filename>00-entry-directory.install</filename> creates the directory
-            <filename>$BOOT/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename>
-            if <filename>$BOOT/<replaceable>MACHINE-ID</replaceable>/</filename> already exists.
-            </para></listitem>
+            <listitem><para><command>kernel-install</command> creates
+            <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable>/<replaceable>KERNEL-VERSION</replaceable></filename>,
+            if enabled (see <varname>$KERNEL_INSTALL_LAYOUT</varname>).</para></listitem>
 
             <listitem><para><filename>50-depmod.install</filename> runs
             <citerefentry project='man-pages'><refentrytitle>depmod</refentrytitle><manvolnum>8</manvolnum></citerefentry> for the
             <replaceable>KERNEL-VERSION</replaceable>.</para></listitem>
 
-            <listitem><para><filename>90-loaderentry.install</filename> copies <replaceable>KERNEL-IMAGE</replaceable>
-            to
-            <filename>$BOOT/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/linux</filename>.
-            If an <replaceable>INITRD-FILE</replaceable> is provided, it also copies <replaceable>INITRD-FILE</replaceable>
-            to
-            <filename>$BOOT/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL_VERSION</replaceable>/<replaceable>INITRD-FILE</replaceable></filename>.
+            <listitem><para><filename>90-loaderentry.install</filename> copies
+            <replaceable>KERNEL-IMAGE</replaceable> to
+            <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/linux</filename>.
+            If <replaceable>INITRD-FILE</replaceable>s are provided, it also copies them to
+            <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable>/<replaceable>KERNEL_VERSION</replaceable>/<replaceable>INITRD-FILE</replaceable></filename>.
             It also creates a boot loader entry according to the <ulink
-            url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> in
-            <filename>$BOOT/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.
+            url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink> (Type #1) in
+            <filename>$BOOT/loader/entries/<replaceable>ENTRY-TOKEN</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.
             The title of the entry is the <replaceable>PRETTY_NAME</replaceable> parameter specified in
-            <filename>/etc/os-release</filename> or <filename>/usr/lib/os-release</filename> (if the former is
-            missing), or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset.</para>
+            <filename>/etc/os-release</filename> or <filename>/usr/lib/os-release</filename> (if the former
+            is missing), or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset.</para>
 
-            <para>If the entry directory
-            <filename>$BOOT/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename>
-            does not exist, this plugin does nothing.</para></listitem>
+            <para>If <varname>$KERNEL_INSTALL_LAYOUT</varname> is not "bls", this plugin does nothing.</para></listitem>
+
+            <listitem><para><filename>90-uki-copy.install</filename> copies a file
+            <filename>uki.efi</filename> from <varname>$KERNEL_INSTALL_STAGING_AREA</varname> or if it does
+            not exist the <replaceable>KERNEL-IMAGE</replaceable> argument, iff it has a
+            <literal>.efi</literal> extension, to
+            <filename>$BOOT/EFI/Linux/<replaceable>ENTRY-TOKEN</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.efi</filename>.</para>
+
+            <para>If <varname>$KERNEL_INSTALL_LAYOUT</varname> is not "uki", this plugin does nothing.</para></listitem>
           </itemizedlist>
         </listitem>
       </varlistentry>
@@ -108,24 +125,33 @@
           <para>This command expects a kernel version string as single argument. This calls executables from
           <filename>/usr/lib/kernel/install.d/*.install</filename> and
           <filename>/etc/kernel/install.d/*.install</filename> with the following arguments:
-
-          <programlisting>remove <replaceable>KERNEL-VERSION</replaceable> <filename>$BOOT/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename></programlisting>
           </para>
 
-          <para>Afterwards, <command>kernel-install</command> removes the directory
-          <filename>$BOOT/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename>
-          and its contents.</para>
+          <programlisting>remove <replaceable>KERNEL-VERSION</replaceable> <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename></programlisting>
+
+          <para>Afterwards, <command>kernel-install</command> removes the entry directory
+          <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename>
+          and its contents, if it exists.</para>
 
           <para>Two default plugins execute the following operations in this case:</para>
 
           <itemizedlist>
-
             <listitem><para><filename>50-depmod.install</filename> removes the files generated by <command>depmod</command> for this kernel again.</para></listitem>
 
             <listitem><para><filename>90-loaderentry.install</filename> removes the file
-            <filename>$BOOT/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.</para></listitem>
-          </itemizedlist>
+            <filename>$BOOT/loader/entries/<replaceable>ENTRY-TOKEN</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.</para></listitem>
 
+            <listitem><para><filename>90-uki-copy.install</filename> removes the file
+            <filename>$BOOT/EFI/Linux/<replaceable>ENTRY-TOKEN</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.efi</filename>.</para></listitem>
+          </itemizedlist>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><command>inspect</command></term>
+        <listitem>
+          <para>Shows the various paths and parameters configured or auto-detected. In particular shows the
+          values of the various <varname>$KERNEL_INSTALL_*</varname> environment variables listed
+          below.</para>
         </listitem>
       </varlistentry>
 
@@ -134,12 +160,13 @@
 
   <refsect1>
     <title>The <varname>$BOOT</varname> partition</title>
-    <para>The partition where the kernels and <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot
+
+    <para>The partition where the kernels and <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot
     Loader Specification</ulink> snippets are located is called <varname>$BOOT</varname>.
     <command>kernel-install</command> determines the location of this partition by checking
-    <filename>/efi/</filename>, <filename>/boot/</filename>, and <filename>/boot/efi/</filename>
-    in turn. The first location where <filename>$BOOT/loader/entries/</filename> or
-    <filename>$BOOT/$MACHINE_ID/</filename> exists is used.</para>
+    <filename>/efi/</filename>, <filename>/boot/</filename>, and <filename>/boot/efi/</filename> in turn. The
+    first location where <filename>$BOOT/loader/entries/</filename> or
+    <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable>/</filename> exists is used.</para>
   </refsect1>
 
   <refsect1>
@@ -156,13 +183,120 @@
       </varlistentry>
 
       <xi:include href="standard-options.xml" xpointer="help" />
+      <xi:include href="standard-options.xml" xpointer="version" />
     </variablelist>
   </refsect1>
 
   <refsect1>
     <title>Environment variables</title>
-    <para>If <option>--verbose</option> is used, <varname>$KERNEL_INSTALL_VERBOSE=1</varname> will be set for
-    the plugins. They may output additional logs in this case.</para>
+
+    <refsect2>
+      <title>Environment variables exported for plugins</title>
+
+      <para>If <option>--verbose</option> is used, <varname>$KERNEL_INSTALL_VERBOSE=1</varname> will be
+      exported for plugins. They may output additional logs in this case.</para>
+
+      <para><varname>$KERNEL_INSTALL_MACHINE_ID</varname> is set for the plugins to the desired machine-id to
+      use. It's always a 128-bit ID. Normally it's read from <filename>/etc/machine-id</filename>, but it can
+      also be overridden via <varname>$MACHINE_ID</varname> (see below). If not specified via these methods,
+      a fallback value will generated by <command>kernel-install</command> and used only for a single
+      invocation.</para>
+
+      <para><varname>$KERNEL_INSTALL_ENTRY_TOKEN</varname> is set for the plugins to the desired entry
+      "token" to use. It's an identifier that shall be used to identify the local installation, and is often
+      the machine ID, i.e. same as <varname>$KERNEL_INSTALL_MACHINE_ID</varname>, but might also be a
+      different type of identifier, for example a fixed string or the <varname>ID=</varname>,
+      <varname>IMAGE_ID=</varname> values from <filename>/etc/os-release</filename>. The string passed here
+      will be used to name Boot Loader Specification entries, or the directories the kernel image and initial
+      RAM disk images are placed into.</para>
+
+      <para>Note that while <varname>$KERNEL_INSTALL_ENTRY_TOKEN</varname> and
+      <varname>$KERNEL_INSTALL_MACHINE_ID</varname> are often set to the same value, the latter is guaranteed
+      to be a valid 32 character ID in lowercase hexadecimals while the former can be any short string. The
+      entry token to use is read from <filename>/etc/kernel/entry-token</filename>, if it exists. Otherwise a
+      few possible candidates below <varname>$BOOT</varname> are checked for Boot Loader Specification Type 1
+      entry directories, and if found the entry token is derived from that. If that is not successful,
+      <varname>$KERNEL_INSTALL_MACHINE_ID</varname> is used as fallback.</para>
+
+      <para><varname>$KERNEL_INSTALL_BOOT_ROOT</varname> is set for the plugins to the absolute path of the
+      root directory (mount point, usually) of the hierarchy where boot loader entries, kernel images, and
+      associated resources should be placed. This usually is the path where the XBOOTLDR partition or the ESP
+      (EFI System Partition) are mounted, and also conceptually referred to as <varname>$BOOT</varname>. Can
+      be overridden by setting <varname>$BOOT_ROOT</varname> (see below).</para>
+
+      <para><varname>$KERNEL_INSTALL_LAYOUT=bls|uki|other|...</varname> is set for the plugins to specify the
+      installation layout. Defaults to <option>bls</option> if
+      <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable></filename> exists, or <option>other</option>
+      otherwise. Additional layout names may be defined by convention. If a plugin uses a special layout,
+      it's encouraged to declare its own layout name and configure <varname>layout=</varname> in
+      <filename>install.conf</filename> upon initial installation. The following values are currently
+      understood:</para>
+
+      <variablelist>
+        <varlistentry>
+          <term>bls</term>
+          <listitem>
+            <para>Standard <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader
+            Specification</ulink> Type #1 layout, compatible with
+            <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>:
+            entries in
+            <filename>$BOOT/loader/entries/<replaceable>ENTRY-TOKEN</replaceable>-<replaceable>KERNEL-VERSION</replaceable>[+<replaceable>TRIES</replaceable>].conf</filename>,
+            kernel and initrds under
+            <filename>$BOOT/<replaceable>ENTRY-TOKEN</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename></para>
+            <para>Implemented by <filename>90-loaderentry.install</filename>.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term>uki</term>
+          <listitem>
+            <para>Standard <ulink
+            url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader
+            Specification</ulink> Type #2 layout, compatible with
+            <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>:
+            unified kernel images under <filename>$BOOT/EFI/Linux</filename> as
+            <filename>$BOOT/EFI/Linux/<replaceable>ENTRY-TOKEN</replaceable>-<replaceable>KERNEL-VERSION</replaceable>[+<replaceable>TRIES</replaceable>].efi</filename>.</para>
+            <para>Implemented by <filename>90-uki-copy.install</filename>.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term>other</term>
+          <listitem>
+            <para>Some other layout not understood natively by <command>kernel-install</command>.</para>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+
+      <para><varname>$KERNEL_INSTALL_INITRD_GENERATOR</varname> is set for plugins to select the initrd
+      generator. This may be configured as <varname>initrd_generator=</varname> in
+      <filename>install.conf</filename>, see below.</para>
+
+      <para><varname>$KERNEL_INSTALL_STAGING_AREA</varname> is set for plugins to a path to a directory.
+      Plugins may drop files in that directory, and they will be installed as part of the loader entry, based
+      on the file name and extension.</para>
+    </refsect2>
+
+    <refsect2>
+      <title>Environment variables understood by <command>kernel-install</command></title>
+
+      <para><varname>$KERNEL_INSTALL_CONF_ROOT</varname> can be set to override the location of the
+      configuration files read by <command>kernel-install</command>. When set,
+      <filename>install.conf</filename>, <filename>entry-token</filename>, and other files will be
+      read from this directory.</para>
+
+      <para><varname>$KERNEL_INSTALL_PLUGINS</varname> can be set to override the list of plugins executed by
+      <command>kernel-install</command>. The argument is a whitespace-separated list of paths.
+      <literal>KERNEL_INSTALL_PLUGINS=:</literal> may be used to prevent any plugins from running.
+      </para>
+
+      <para><varname>$MACHINE_ID</varname> can be set for <command>kernel-install</command> to override
+      <varname>$KERNEL_INSTALL_MACHINE_ID</varname>, the machine ID.</para>
+
+      <para><varname>$BOOT_ROOT</varname> can be set for <command>kernel-install</command> to override
+      <varname>$KERNEL_INSTALL_BOOT_ROOT</varname>, the installation location for boot entries.</para>
+
+      <para>The last two variables may also be set in <filename>install.conf</filename>. Variables set in the
+      environment take precedence over the values specified in the config file.</para>
+    </refsect2>
   </refsect1>
 
   <refsect1>
@@ -184,13 +318,16 @@
       </varlistentry>
       <varlistentry>
         <term>
+          <filename>/usr/lib/kernel/cmdline</filename>
           <filename>/etc/kernel/cmdline</filename>
           <filename>/proc/cmdline</filename>
         </term>
           <listitem>
             <para>Read by <filename>90-loaderentry.install</filename>. The content of the file
-            <filename>/etc/kernel/cmdline</filename> specifies the kernel command line to use.  If that file does not
-            exist, <filename>/proc/cmdline</filename> is used.</para>
+            <filename>/etc/kernel/cmdline</filename> specifies the kernel command line to use. If that file
+            does not exist, <filename>/usr/lib/kernel/cmdline</filename> is used. If that also does not
+            exist, <filename>/proc/cmdline</filename> is used. <varname>$KERNEL_INSTALL_CONF_ROOT</varname>
+            may be used to override the path.</para>
           </listitem>
       </varlistentry>
       <varlistentry>
@@ -198,12 +335,27 @@
           <filename>/etc/kernel/tries</filename>
         </term>
           <listitem>
-            <para>Read by <filename>90-loaderentry.install</filename>. If this file exists a numeric value is read from
-            it and the naming of the generated entry file is slightly altered to include it as
-            <filename>$BOOT/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>+<replaceable>TRIES</replaceable>.conf</filename>. This
+            <para>Read by <filename>90-loaderentry.install</filename> and
+            <filename>90-uki-copy.install</filename>. If this file exists a numeric value is read from it
+            and the naming of the generated entry file or UKI is slightly altered to include it as
+            <filename>$BOOT/loader/entries/<replaceable>ENTRY-TOKEN</replaceable>-<replaceable>KERNEL-VERSION</replaceable>+<replaceable>TRIES</replaceable>.conf</filename>
+            or
+            <filename>$BOOT/EFI/Linux/<replaceable>ENTRY-TOKEN</replaceable>-<replaceable>KERNEL-VERSION</replaceable>+<replaceable>TRIES</replaceable>.conf</filename>, respectively. This
             is useful for boot loaders such as
-            <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> which
-            implement boot attempt counting with a counter embedded in the entry file name.</para>
+            <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+            which implement boot attempt counting with a counter embedded in the entry file name.
+            <varname>$KERNEL_INSTALL_CONF_ROOT</varname> may be used to override the path.</para>
+          </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
+          <filename>/etc/kernel/entry-token</filename>
+        </term>
+          <listitem>
+            <para>If this file exists it is read and used as "entry token" for this system, i.e. is used for
+            naming Boot Loader Specification entries, see <varname>$KERNEL_INSTALL_ENTRY_TOKEN</varname>
+            above for details. <varname>$KERNEL_INSTALL_CONF_ROOT</varname> may be used to override the
+            path.</para>
           </listitem>
       </varlistentry>
       <varlistentry>
@@ -212,8 +364,7 @@
         </term>
           <listitem>
             <para>The content of this file specifies the machine identification
-            <replaceable>MACHINE-ID</replaceable>. If it cannot read <filename>/etc/machine-id</filename>,
-            kernel-install will use "Linux" as the machine ID instead.</para>
+            <replaceable>MACHINE-ID</replaceable>.</para>
           </listitem>
       </varlistentry>
       <varlistentry>
@@ -221,8 +372,33 @@
           <filename>/etc/os-release</filename>
           <filename>/usr/lib/os-release</filename>
         </term>
+        <listitem>
+            <para>Read by <filename>90-loaderentry.install</filename>.
+            If available, <varname>PRETTY_NAME=</varname> is read from these files and used as the title of the boot menu entry.
+            Otherwise, <literal>Linux <replaceable>KERNEL-VERSION</replaceable></literal> will be used.</para>
+          </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
+          <filename>/usr/lib/kernel/install.conf</filename>
+          <filename>/etc/kernel/install.conf</filename>
+        </term>
           <listitem>
-            <para>The content of the file specifies the operating system title <replaceable>PRETTY_NAME</replaceable>.</para>
+            <para>Configuration options for <command>kernel-install</command>, as a series of
+            <varname>KEY=</varname><replaceable>VALUE</replaceable> assignments, compatible with shell
+            syntax, following the same rules as described in
+            <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+            <filename>/etc/kernel/install.conf</filename> will be read if present, and
+            <filename>/usr/lib/kernel/install.conf</filename> otherwise. This file is optional.
+            <varname>$KERNEL_INSTALL_CONF_ROOT</varname> may be used to override the path.
+            </para>
+
+            <para>Currently, the following keys are supported:
+            <varname>MACHINE_ID=</varname>,
+            <varname>BOOT_ROOT=</varname>,
+            <varname>layout=</varname>,
+            <varname>initrd_generator=</varname>.
+            See the Environment variables section above for details.</para>
           </listitem>
       </varlistentry>
     </variablelist>
@@ -235,7 +411,7 @@
       <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>depmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
-      <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>
+      <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>
     </para>
   </refsect1>
 
diff --git a/man/libudev.xml b/man/libudev.xml
index 4b87962..c2a42cb 100644
--- a/man/libudev.xml
+++ b/man/libudev.xml
@@ -37,11 +37,13 @@
   <refsect1>
     <title>Description</title>
 
-    <para><filename>libudev.h</filename> provides APIs to introspect
-    and enumerate devices on the local system.</para>
+    <para><filename>libudev.h</filename> provides an API to introspect and enumerate devices on the local
+    system. This library is supported, but should not be used in new projects. Please see
+    <citerefentry><refentrytitle>sd-device</refentrytitle><manvolnum>3</manvolnum></citerefentry> for an
+    equivalent replacement with a more modern API.</para>
 
     <para>All functions require a libudev context to operate. This
-    context can be create via
+    context can be created via
     <citerefentry><refentrytitle>udev_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
     It is used to track library state and link objects together. No
     global state is used by libudev, everything is always linked to
diff --git a/man/loader.conf.xml b/man/loader.conf.xml
index 29315ce..b002227 100644
--- a/man/loader.conf.xml
+++ b/man/loader.conf.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="loader.conf" conditional='ENABLE_EFI'
+<refentry id="loader.conf" conditional='HAVE_GNU_EFI'
     xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>loader.conf</title>
@@ -23,6 +23,7 @@
   <refsynopsisdiv>
     <para><filename><replaceable>ESP</replaceable>/loader/loader.conf</filename>,
     <filename><replaceable>ESP</replaceable>/loader/entries/*.conf</filename>
+    <filename><replaceable>XBOOTLDR</replaceable>/loader/entries/*.conf</filename>
     </para>
   </refsynopsisdiv>
 
@@ -30,26 +31,37 @@
     <title>Description</title>
 
     <para>
-    <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-    will read <filename><replaceable>ESP</replaceable>/loader/loader.conf</filename> and any files with the
+    <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> will
+    read <filename><replaceable>ESP</replaceable>/loader/loader.conf</filename>, and any files with the
     <literal>.conf</literal> extension under
-    <filename><replaceable>ESP</replaceable>/loader/entries/</filename> on the EFI system partition (ESP).
+    <filename><replaceable>ESP</replaceable>/loader/entries/</filename> on the EFI system partition (ESP),
+    and <filename><replaceable>XBOOTLDR</replaceable>/loader/entries/</filename> on the extended boot loader
+    partition (XBOOTLDR) as defined by <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader
+    Specification</ulink>.
     </para>
 
-    <para>Each configuration file must consist of an option name, followed by
-    whitespace, and the option value. <literal>#</literal> may be used to start
-    a comment line. Empty and comment lines are ignored.</para>
+    <para>Each of these configuration files must consist of series of newline (i.e. ASCII code 10) separated
+    lines, each consisting of an option name, followed by whitespace, and the option
+    value. <literal>#</literal> may be used to start a comment line. Empty and comment lines are ignored. The
+    files use UTF-8 encoding.</para>
 
     <para>Boolean arguments may be written as
-    <literal>yes</literal>/<literal>y</literal>/<literal>true</literal>/<literal>1</literal> or
-    <literal>no</literal>/<literal>n</literal>/<literal>false</literal>/<literal>0</literal>.
+    <literal>yes</literal>/<literal>y</literal>/<literal>true</literal>/<literal>t</literal>/<literal>on</literal>/<literal>1</literal> or
+    <literal>no</literal>/<literal>n</literal>/<literal>false</literal>/<literal>f</literal>/<literal>off</literal>/<literal>0</literal>.
     </para>
   </refsect1>
 
   <refsect1>
     <title>Options</title>
 
-    <para>The following configuration options in <filename>loader.conf</filename> are understood:</para>
+    <para>The configuration options supported by
+    <filename><replaceable>ESP</replaceable>/loader/entries/*.conf</filename> and
+    <filename><replaceable>XBOOTLDR</replaceable>/loader/entries/*.conf</filename> files are defined as part
+    of the <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader
+    Specification</ulink>.</para>
+
+    <para>The following configuration are supported by the <filename>loader.conf</filename> configuration
+    file:</para>
 
     <variablelist>
       <varlistentry>
@@ -58,7 +70,54 @@
         <listitem><para>A glob pattern to select the default entry. The default entry
         may be changed in the boot menu itself, in which case the name of the
         selected entry will be stored as an EFI variable, overriding this option.
-        </para></listitem>
+        </para>
+
+        <para>If set to <literal>@saved</literal> the chosen entry will be saved as an EFI variable
+        on every boot and automatically selected the next time the boot loader starts.</para>
+
+        <table>
+          <title>Automatically detected entries will use the following names:</title>
+
+          <tgroup cols='2'>
+            <colspec colname='name' />
+            <colspec colname='expl' />
+            <thead>
+              <row>
+                <entry>Name</entry>
+                <entry>Description</entry>
+              </row>
+            </thead>
+            <tbody>
+              <row>
+                <entry>auto-efi-default</entry>
+                <entry>EFI Default Loader</entry>
+              </row>
+              <row>
+                <entry>auto-efi-shell</entry>
+                <entry>EFI Shell</entry>
+              </row>
+              <row>
+                <entry>auto-osx</entry>
+                <entry>macOS</entry>
+              </row>
+              <row>
+                <entry>auto-reboot-to-firmware-setup</entry>
+                <entry>Reboot Into Firmware Interface</entry>
+              </row>
+              <row>
+                <entry>auto-windows</entry>
+                <entry>Windows Boot Manager</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </table>
+
+        <para>Supported glob wildcard patterns are <literal>?</literal>, <literal>*</literal>, and
+        <literal>[…]</literal> (including ranges). Note that these patterns use the same syntax as
+        <citerefentry project='man-pages'><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+        but do not support all features. In particular, set negation and named character classes are not
+        supported. The matching is done case-insensitively on the entry ID (as shown by <command>bootctl
+        list</command>).</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -69,9 +128,10 @@
         will be stored as an EFI variable in that case, overriding this option.
         </para>
 
-        <para>If the timeout is disabled, the default entry will be booted
-        immediately. The menu can be shown by pressing and holding a key before
-        systemd-boot is launched.</para>
+        <para>If set to <literal>menu-hidden</literal> or <literal>0</literal> (the default) no menu
+        is shown and the default entry will be booted immediately. The menu can be shown
+        by pressing and holding a key before systemd-boot is launched. Setting this to
+        <literal>menu-force</literal> disables the timeout while always showing the menu.</para>
         </listitem>
       </varlistentry>
 
@@ -150,27 +210,129 @@
       <varlistentry>
         <term>auto-firmware</term>
 
-        <listitem><para>Takes a boolean argument. Enable (the default) or disable
-        the "Reboot into firmware" entry.</para></listitem>
+        <listitem><para>A boolean controlling the presence of the "Reboot into firmware" entry
+        (enabled by default). If this is disabled, the firmware interface may still be reached
+        by using the <keycap>f</keycap> key.</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term>random-seed-mode</term>
+        <term>beep</term>
 
-        <listitem><para>Takes one of <literal>off</literal>, <literal>with-system-token</literal> and
-        <literal>always</literal>. If <literal>off</literal> no random seed data is read off the ESP, nor
-        passed to the OS. If <literal>with-system-token</literal> (the default)
-        <command>systemd-boot</command> will read a random seed from the ESP (from the file
-        <filename>/loader/random-seed</filename>) only if the <varname>LoaderSystemToken</varname> EFI
-        variable is set, and then derive the random seed to pass to the OS from the combination. If
-        <literal>always</literal> the boot loader will do so even if <varname>LoaderSystemToken</varname> is
-        not set. This mode is useful in environments where protection against OS image reuse is not a
-        concern, and the random seed shall be used even with no further setup in place. Use <command>bootctl
-        random-seed</command> to initialize both the random seed file in the ESP and the system token EFI
-        variable.</para>
+        <listitem><para>Takes a boolean argument. If timeout enabled beep every second, otherwise beep n times when n-th entry in boot menu is selected (default disabled).
+        Currently, only x86 is supported, where it uses the PC speaker.</para></listitem>
+      </varlistentry>
 
-        <para>See <ulink url="https://systemd.io/RANDOM_SEEDS">Random Seeds</ulink> for further
-        information.</para></listitem>
+      <varlistentry>
+        <term>secure-boot-enroll</term>
+
+        <listitem><para>Danger: this feature might soft-brick your device if used improperly.</para>
+
+        <para>Controls enrollment of secure boot keys found on the ESP if the system is in setup mode:
+        <variablelist>
+          <varlistentry>
+            <term><option>off</option></term>
+            <listitem><para>No action is taken.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>manual</option></term>
+            <listitem><para>Boot entries for found secure boot keys are created that allow manual
+            enrollment.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>if-safe</option></term>
+            <listitem><para>Same behavior as <option>manual</option>, but will try to automatically
+            enroll the key <literal>auto</literal> if it is considered to be safe. Currently, this is only
+            the case if the system is running inside a virtual machine.</para></listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><option>force</option></term>
+            <listitem><para>Always enroll the <literal>auto</literal> key if found. Note that a warning
+            message with a timeout will still be shown if this operation is unknown to be safe.</para></listitem>
+          </varlistentry>
+        </variablelist>
+        </para>
+
+        <para>The different sets of variables can be set up under
+        <filename>/loader/keys/<replaceable>NAME</replaceable></filename> where
+        <replaceable>NAME</replaceable> is the name that is going to be used as the name of the entry. This
+        allows one to ship multiple sets of Secure Boot variables and choose which one to enroll at runtime.
+        </para>
+
+        <para>Supported Secure Boot variables are one database for authorized images, one key exchange key
+        (KEK) and one platform key (PK). For more information, refer to the <ulink
+        url="https://uefi.org/specifications">UEFI specification</ulink>, under Secure Boot and Driver
+        Signing. Another resource that describe the interplay of the different variables is the
+        <ulink url="https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/secure_boot_chain_in_uefi/uefi_secure_boot">
+        EDK2 documentation</ulink>.</para>
+
+        <para>A complete set of UEFI variable includes <filename>db.auth</filename>, <filename>KEK.auth</filename>
+        and <filename>PK.auth</filename>. Note that these files need to be authenticated UEFI variables. See
+        below for an example of how to generate them from regular X.509 keys.</para>
+
+        <programlisting>uuid=$(systemd-id128 new --uuid)
+for key in PK KEK db; do
+  openssl req -new -x509 -subj "/CN=${key}/" -keyout "${key}.key" -out "${key}.crt"
+  openssl x509 -outform DER -in "${key}.crt" -out "${key}.der"
+  sbsiglist --owner "${uuid}" --type x509 --output "${key}.esl" "${key}.der"
+done
+
+for key in MicWinProPCA2011_2011-10-19.crt MicCorUEFCA2011_2011-06-27.crt MicCorKEKCA2011_2011-06-24.crt; do
+  curl "https://www.microsoft.com/pkiops/certs/${key}" --output "${key}"
+  sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output "${key%crt}esl" "${key}"
+done
+
+# Optionally add Microsoft Windows Production CA 2011 (needed to boot into Windows).
+cat MicWinProPCA2011_2011-10-19.esl >>db.esl
+
+# Optionally add Microsoft Corporation UEFI CA 2011 for firmware drivers / option ROMs
+# and third-party boot loaders (including shim). This is highly recommended on real
+# hardware as not including this may soft-brick your device (see next paragraph).
+cat MicCorUEFCA2011_2011-06-27.esl >>db.esl
+
+# Optionally add Microsoft Corporation KEK CA 2011. Recommended if either of the
+# Microsoft keys is used as the official UEFI revocation database is signed with this
+# key. The revocation database can be updated with <citerefentry project='man-pages'><refentrytitle>fwupdmgr</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+cat MicCorKEKCA2011_2011-06-24.esl >>KEK.esl
+
+attr=NON_VOLATILE,RUNTIME_ACCESS,BOOTSERVICE_ACCESS,TIME_BASED_AUTHENTICATED_WRITE_ACCESS
+sbvarsign --attr ${attr} --key PK.key --cert PK.crt --output PK.auth PK PK.esl
+sbvarsign --attr ${attr} --key PK.key --cert PK.crt --output KEK.auth KEK KEK.esl
+sbvarsign --attr ${attr} --key KEK.key --cert KEK.crt --output db.auth db db.esl
+        </programlisting>
+
+        <para>This feature is considered dangerous because even if all the required files are signed with the
+        keys being loaded, some files necessary for the system to function properly still won't be. This
+        is especially the case with Option ROMs (e.g. for storage controllers or graphics cards). See
+        <ulink url="https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom">Secure Boot and Option ROMs</ulink>
+        for more details.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>reboot-for-bitlocker</term>
+
+        <listitem><para>Caveat: This feature is experimental, and is likely to be changed (or removed in its
+        current form) in a future version of systemd.</para>
+
+        <para>Work around BitLocker requiring a recovery key when the boot loader was
+        updated (disabled by default).</para>
+
+        <para>Try to detect BitLocker encrypted drives along with an active TPM. If both are found and
+        Windows Boot Manager is selected in the boot menu, set the <literal>BootNext</literal> EFI variable
+        and restart the system. The firmware will then start Windows Boot Manager directly, leaving the TPM
+        PCRs in expected states so that Windows can unseal the encryption key. This allows
+        <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> to
+        be updated without having to provide the recovery key for BitLocker drive unlocking.</para>
+
+        <para>Note that the PCRs that Windows uses can be configured with the
+        <literal>Configure TPM platform validation profile for native UEFI firmware configurations</literal>
+        group policy under <literal>Computer Configuration\Administrative Templates\Windows Components\BitLocker Drive Encryption</literal>.
+        When Secure Boot is enabled, changing this to PCRs <literal>0,2,7,11</literal> should be safe.
+        The TPM key protector needs to be removed and then added back for the PCRs on an already
+        encrypted drive to change. If PCR 4 is not measured, this setting can be disabled to speed
+        up booting into Windows.</para></listitem>
       </varlistentry>
     </variablelist>
   </refsect1>
diff --git a/man/locale.conf.xml b/man/locale.conf.xml
index b24ad9c..24be105 100644
--- a/man/locale.conf.xml
+++ b/man/locale.conf.xml
@@ -30,13 +30,13 @@
     system-wide locale settings. It is read at early boot by
     <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
 
-    <para>The basic file format of <filename>locale.conf</filename> is
-    a newline-separated list of environment-like shell-compatible
-    variable assignments. It is possible to source the configuration
-    from shell scripts, however, beyond mere variable assignments, no
-    shell features are supported, allowing applications to read the
-    file without implementing a shell compatible execution
-    engine.</para>
+    <para>The format of <filename>locale.conf</filename> is a newline-separated list of environment-like
+    shell-compatible variable assignments, ignoring comments and empty lines. It is possible to source the
+    configuration from shell scripts, however, beyond mere variable assignments, no shell features are
+    supported, allowing applications to read the file without implementing a shell compatible execution
+    engine. See
+    <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> for a
+    detailed description of the format.</para>
 
     <para>Note that the kernel command line options
     <varname>locale.LANG=</varname>,
@@ -58,20 +58,20 @@
     <para>The locale settings configured in
     <filename>/etc/locale.conf</filename> are system-wide and are
     inherited by every service or user, unless overridden or unset by
-    individual programs or individual users.</para>
+    individual programs or users.</para>
 
     <para>Depending on the operating system, other configuration files
     might be checked for locale configuration as well, however only as
     fallback.</para>
 
-    <para><filename>/etc/locale.conf</filename> is usually created and updated
+    <para><filename>/etc/locale.conf</filename> can be updated
     using
     <citerefentry><refentrytitle>systemd-localed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
     <citerefentry project='man-pages'><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
     may be used to alter the settings in this file during runtime from
     the command line. Use
     <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    to initialize them on mounted (but not booted) system images.</para>
+    to customize them on mounted (but not booted) system images.</para>
   </refsect1>
 
   <refsect1>
@@ -107,7 +107,9 @@
 
       <para><filename>/etc/locale.conf</filename>:</para>
 
-      <programlisting>LANG=de_DE.UTF-8
+      <programlisting># Custom settings
+
+LANG=de_DE.UTF-8
 LC_MESSAGES=en_US.UTF-8</programlisting>
     </example>
 
@@ -123,5 +125,4 @@
         <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
       </para>
   </refsect1>
-
 </refentry>
diff --git a/man/localectl.xml b/man/localectl.xml
index 9fa3485..617922e 100644
--- a/man/localectl.xml
+++ b/man/localectl.xml
@@ -48,9 +48,11 @@
     such as the display manager, as well as the default for users
     after login.</para>
 
-    <para>Note that the changes performed using this tool might require
-    the initramfs to be rebuilt to take effect during early system boot.
-    The initramfs is not rebuilt automatically by <filename>localectl</filename>.
+    <para>Note that the changes performed using this tool might require the initrd to be rebuilt to take
+    effect during early system boot.  The initrd is not rebuilt automatically by
+    <filename>localectl</filename>, this task has to be performed manually, usually using a tool like
+    <citerefentry
+    project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
     </para>
 
     <para>Note that
@@ -202,7 +204,7 @@
       <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-localed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry project='die-net'><refentrytitle>mkinitrd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      <citerefentry project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/loginctl.xml b/man/loginctl.xml
index bef3be7..7921663 100644
--- a/man/loginctl.xml
+++ b/man/loginctl.xml
@@ -122,7 +122,7 @@
         <term><command>kill-session</command> <replaceable>ID</replaceable>…</term>
 
         <listitem><para>Send a signal to one or more processes of the session. Use
-        <option>--kill-who=</option> to select which process to kill. Use <option>--signal=</option> to
+        <option>--kill-whom=</option> to select which process to kill. Use <option>--signal=</option> to
         select the signal to send. If the argument is specified as empty string the signal is sent to the
         session invoking the command.</para></listitem>
       </varlistentry>
@@ -320,7 +320,7 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>--kill-who=</option></term>
+        <term><option>--kill-whom=</option></term>
 
         <listitem><para>When used with
         <command>kill-session</command>, choose which processes to
diff --git a/man/logind.conf.xml b/man/logind.conf.xml
index be62b6b..9682add 100644
--- a/man/logind.conf.xml
+++ b/man/logind.conf.xml
@@ -194,56 +194,51 @@
 
       <varlistentry>
         <term><varname>HandlePowerKey=</varname></term>
+        <term><varname>HandlePowerKeyLongPress=</varname></term>
+        <term><varname>HandleRebootKey=</varname></term>
+        <term><varname>HandleRebootKeyLongPress=</varname></term>
         <term><varname>HandleSuspendKey=</varname></term>
+        <term><varname>HandleSuspendKeyLongPress=</varname></term>
         <term><varname>HandleHibernateKey=</varname></term>
+        <term><varname>HandleHibernateKeyLongPress=</varname></term>
         <term><varname>HandleLidSwitch=</varname></term>
         <term><varname>HandleLidSwitchExternalPower=</varname></term>
         <term><varname>HandleLidSwitchDocked=</varname></term>
-        <term><varname>HandleRebootKey=</varname></term>
 
-        <listitem><para>Controls how logind shall handle the
-        system power, reboot and sleep keys and the lid switch to trigger
-        actions such as system power-off, reboot or suspend. Can be one of
-        <literal>ignore</literal>,
-        <literal>poweroff</literal>,
-        <literal>reboot</literal>,
-        <literal>halt</literal>,
-        <literal>kexec</literal>,
-        <literal>suspend</literal>,
-        <literal>hibernate</literal>,
-        <literal>hybrid-sleep</literal>,
-        <literal>suspend-then-hibernate</literal>, and
-        <literal>lock</literal>.
-        If <literal>ignore</literal>, logind will never handle these
-        keys. If <literal>lock</literal>, all running sessions will be
-        screen-locked; otherwise, the specified action will be taken
-        in the respective event. Only input devices with the
-        <literal>power-switch</literal> udev tag will be watched for
-        key/lid switch events. <varname>HandlePowerKey=</varname>
-        defaults to <literal>poweroff</literal>, <varname>HandleRebootKey=</varname>
-        defaults to <literal>reboot</literal>.
-        <varname>HandleSuspendKey=</varname> and
-        <varname>HandleLidSwitch=</varname> default to
-        <literal>suspend</literal>.
-        <varname>HandleLidSwitchExternalPower=</varname> is completely
-        ignored by default (for backwards compatibility) — an explicit
-        value must be set before it will be used to determine
-        behaviour. <varname>HandleLidSwitchDocked=</varname> defaults
-        to <literal>ignore</literal>.
-        <varname>HandleHibernateKey=</varname> defaults to
-        <literal>hibernate</literal>. If the system is inserted in a
-        docking station, or if more than one display is connected, the
-        action specified by <varname>HandleLidSwitchDocked=</varname>
-        occurs; if the system is on external power the action (if any)
-        specified by <varname>HandleLidSwitchExternalPower=</varname>
-        occurs; otherwise the <varname>HandleLidSwitch=</varname>
-        action occurs.</para>
+        <listitem><para>Controls how logind shall handle the system power, reboot and sleep keys and the lid
+        switch to trigger actions such as system power-off, reboot or suspend. Can be one of
+        <literal>ignore</literal>, <literal>poweroff</literal>, <literal>reboot</literal>,
+        <literal>halt</literal>, <literal>kexec</literal>, <literal>suspend</literal>,
+        <literal>hibernate</literal>, <literal>hybrid-sleep</literal>,
+        <literal>suspend-then-hibernate</literal>, <literal>lock</literal>, and
+        <literal>factory-reset</literal>.  If <literal>ignore</literal>, <command>systemd-logind</command>
+        will never handle these keys. If <literal>lock</literal>, all running sessions will be screen-locked;
+        otherwise, the specified action will be taken in the respective event. Only input devices with the
+        <literal>power-switch</literal> udev tag will be watched for key/lid switch
+        events.</para>
+
+        <para><varname>HandlePowerKey=</varname> defaults to <literal>poweroff</literal>,
+        <varname>HandleRebootKey=</varname> defaults to <literal>reboot</literal>,
+        <varname>HandleSuspendKey=</varname> defaults to <literal>suspend</literal>,
+        <varname>HandleHibernateKey=</varname> defaults to <literal>hibernate</literal>,
+        <varname>HandlePowerKeyLongPress=</varname> defaults to <literal>ignore</literal>,
+        <varname>HandleRebootKeyLongPress=</varname> defaults to <literal>poweroff</literal>,
+        <varname>HandleSuspendKeyLongPress=</varname> defaults to <literal>hibernate</literal>,
+        <varname>HandleHibernateKeyLongPress=</varname> defaults to <literal>ignore</literal>.
+        <varname>HandleLidSwitch=</varname> defaults to <literal>suspend</literal>.
+        <varname>HandleLidSwitchExternalPower=</varname> is completely ignored by default (for backwards
+        compatibility) — an explicit value must be set before it will be used to determine
+        behaviour. <varname>HandleLidSwitchDocked=</varname> defaults to <literal>ignore</literal>. If the
+        system is inserted in a docking station, or if more than one display is connected, the action
+        specified by <varname>HandleLidSwitchDocked=</varname> occurs; if the system is on external power the
+        action (if any) specified by <varname>HandleLidSwitchExternalPower=</varname> occurs; otherwise the
+        <varname>HandleLidSwitch=</varname> action occurs.</para>
 
         <para>A different application may disable logind's handling of system power and
         sleep keys and the lid switch by taking a low-level inhibitor lock
         (<literal>handle-power-key</literal>, <literal>handle-suspend-key</literal>,
         <literal>handle-hibernate-key</literal>, <literal>handle-lid-switch</literal>,
-        <literal>handle-reboot-switch</literal>).
+        <literal>handle-reboot-key</literal>).
         This is most commonly used by graphical desktop environments
         to take over suspend and hibernation handling, and to use their own configuration
         mechanisms. If a low-level inhibitor lock is taken, logind will not take any
@@ -349,6 +344,17 @@
         are excluded from the effect of this setting. Defaults to <literal>yes</literal>.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>StopIdleSessionSec=</varname></term>
+
+        <listitem><para>Specifies a timeout in seconds, or a time span value after which
+        <filename>systemd-logind</filename> checks the idle state of all sessions. Every session that is idle for
+        longer then the timeout will be stopped. Defaults to <literal>infinity</literal>
+        (<filename>systemd-logind</filename> is not checking the idle state of sessions). For details about the syntax
+        of time spans, see
+        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+        </para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
diff --git a/man/machine-id.xml b/man/machine-id.xml
index d5d3a1a..ec1ab64 100644
--- a/man/machine-id.xml
+++ b/man/machine-id.xml
@@ -80,13 +80,13 @@
     <filename>/etc/machine-id</filename> may also be written using any other means.
     </para>
 
-    <para>For operating system images which are created once and used on multiple
-    machines, for example for containers or in the cloud,
-    <filename>/etc/machine-id</filename> should be either missing or an empty file in the generic file
-    system image (the difference between the two options is described under "First Boot Semantics" below). An
-    ID will be generated during boot and saved to this file if possible. Having an empty file in place is
-    useful because it allows a temporary file to be bind-mounted over the real file, in case the image is
-    used read-only.</para>
+    <para>For operating system images which are created once and used on multiple machines, for example for
+    containers or in the cloud, <filename>/etc/machine-id</filename> should be either missing or an empty
+    file in the generic file system image (the difference between the two options is described under "First
+    Boot Semantics" below). An ID will be generated during boot and saved to this file if possible. Having an
+    empty file in place is useful because it allows a temporary file to be bind-mounted over the real file,
+    in case the image is used read-only. Also see <ulink url="https://systemd.io/BUILDING_IMAGES">Safely
+    Building Images</ulink>.</para>
 
     <para><citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
     may be used to initialize <filename>/etc/machine-id</filename> on mounted (but not
@@ -119,20 +119,26 @@
   <refsect1>
     <title>First Boot Semantics</title>
 
-    <para><filename>/etc/machine-id</filename> is used to decide whether a boot is the first one.  The rules
+    <para><filename>/etc/machine-id</filename> is used to decide whether a boot is the first one. The rules
     are as follows:</para>
 
     <orderedlist>
-      <listitem><para>If <filename>/etc/machine-id</filename> does not exist, this is a first boot.  During
-      early boot, <command>systemd</command> will write <literal>uninitialized\n</literal> to this file and overmount
-      a temporary file which contains the actual machine ID.  Later (after <filename>first-boot-complete.target</filename>
-      has been reached), the real machine ID will be written to disk.</para></listitem>
+      <listitem><para>The kernel command argument <varname>systemd.condition-first-boot=</varname> may be
+      used to override the autodetection logic, see
+      <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+      </para></listitem>
+
+      <listitem><para>Otherwise, if <filename>/etc/machine-id</filename> does not exist, this is a first
+      boot. During early boot, <command>systemd</command> will write <literal>uninitialized\n</literal> to
+      this file and overmount a temporary file which contains the actual machine ID. Later (after
+      <filename>first-boot-complete.target</filename> has been reached), the real machine ID will be written
+      to disk.</para></listitem>
 
       <listitem><para>If <filename>/etc/machine-id</filename> contains the string <literal>uninitialized</literal>,
-      a boot is also considered the first boot.  The same mechanism as above applies.</para></listitem>
+      a boot is also considered the first boot. The same mechanism as above applies.</para></listitem>
 
       <listitem><para>If <filename>/etc/machine-id</filename> exists and is empty, a boot is
-      <emphasis>not</emphasis> considered the first boot.  <command>systemd</command> will still bind-mount a file
+      <emphasis>not</emphasis> considered the first boot. <command>systemd</command> will still bind-mount a file
       containing the actual machine-id over it and later try to commit it to disk (if <filename>/etc/</filename> is
       writable).</para></listitem>
 
@@ -140,8 +146,9 @@
       not a first boot.</para></listitem>
     </orderedlist>
 
-    <para>If by any of the above rules, a first boot is detected, units with <varname>ConditionFirstBoot=yes</varname>
-    will be run.</para>
+    <para>If according to the above rules a first boot is detected, units with
+    <varname>ConditionFirstBoot=yes</varname> will be run and <command>systemd</command> will perform
+    additional initialization steps, in particular presetting units.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/machine-info.xml b/man/machine-info.xml
index 3de6810..781208b 100644
--- a/man/machine-info.xml
+++ b/man/machine-info.xml
@@ -29,13 +29,13 @@
     <para>The <filename>/etc/machine-info</filename> file contains
     machine metadata.</para>
 
-    <para>The basic file format of <filename>machine-info</filename>
-    is a newline-separated list of environment-like shell-compatible
-    variable assignments. It is possible to source the configuration
-    from shell scripts, however, beyond mere variable assignments no
-    shell features are supported, allowing applications to read the
-    file without implementing a shell compatible execution
-    engine.</para>
+    <para>The format of <filename>machine-info</filename> is a newline-separated list of environment-like
+    shell-compatible variable assignments, ignoring comments and empty lines. It is possible to source the
+    configuration from shell scripts, however, beyond mere variable assignments no shell features are
+    supported, allowing applications to read the file without implementing a shell compatible execution
+    engine. See
+    <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> for a
+    detailed description of the format.</para>
 
     <para><filename>/etc/machine-info</filename> contains metadata about the machine that is set by the user
     or administrator. The settings configured here have the highest precedence. When not set, appropriate
@@ -77,7 +77,7 @@
 
         <listitem><para>An icon identifying this machine according to
         the <ulink
-        url="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">XDG
+        url="https://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">XDG
         Icon Naming Specification</ulink>. If this parameter is not
         set, an application should fall back to
         <literal>computer</literal> or a similar icon
@@ -128,6 +128,22 @@
         specific as <literal>Left Rack, 2nd Shelf</literal>.
         </para></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>HARDWARE_VENDOR=</varname></term>
+
+        <listitem><para>Specifies the hardware vendor. If unspecified, the hardware vendor set in DMI or
+        <citerefentry><refentrytitle>hwdb</refentrytitle><manvolnum>7</manvolnum></citerefentry> will be
+        used.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>HARDWARE_MODEL=</varname></term>
+
+        <listitem><para>Specifies the hardware model. If unspecified, the hardware model set in DMI or
+        <citerefentry><refentrytitle>hwdb</refentrytitle><manvolnum>7</manvolnum></citerefentry> will be
+        used.</para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
diff --git a/man/machinectl.xml b/man/machinectl.xml
index ad47b61..2ecbe0f 100644
--- a/man/machinectl.xml
+++ b/man/machinectl.xml
@@ -192,7 +192,7 @@
         the machine name is specified as the empty string, or the
         special machine name <literal>.host</literal> (see below) is
         specified, the connection is made to the local host
-        instead. This works similar to <command>login</command> but
+        instead. This works similarly to <command>login</command>, but
         immediately invokes a user process. This command runs the
         specified executable with the specified arguments, or the
         default shell for the user if none is specified, or
@@ -205,41 +205,40 @@
         <para>Note that <command>machinectl shell</command> does not propagate the exit code/status of the invoked
         shell process. Use <command>systemd-run</command> instead if that information is required (see below).</para>
 
-        <para>When using the <command>shell</command> command without
-        arguments, (thus invoking the executed shell or command on the
-        local host), it is in many ways similar to a <citerefentry
-        project='die-net'><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-        session, but, unlike <command>su</command>, completely isolates
-        the new session from the originating session, so that it
-        shares no process or session properties, and is in a clean and
-        well-defined state. It will be tracked in a new utmp, login,
-        audit, security and keyring session, and will not inherit any
-        environment variables or resource limits, among other
-        properties.</para>
+        <para>Using the <command>shell</command> command without arguments (thus invoking the executed shell
+        or command on the local host), is in many ways similar to a <citerefentry
+        project='die-net'><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry> session,
+        but, unlike <command>su</command>, completely isolates the new session from the originating session,
+        so that it shares no process or session properties and is in a clean well-defined state. It will be
+        tracked in a new utmp, login, audit, security, and keyring sessions, and will not inherit any
+        environment variables or resource limits, among other properties.</para>
 
-        <para>Note that <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-        with its <option>--machine=</option> switch may be used in place of the <command>machinectl shell</command>
-        command, and allows non-interactive operation, more detailed and low-level configuration of the invoked unit,
-        as well as access to runtime and exit code/status information of the invoked shell process. In particular, use
-        <command>systemd-run</command>'s <option>--wait</option> switch to propagate exit status information of the
-        invoked process. Use <command>systemd-run</command>'s <option>--pty</option> switch for acquiring an
-        interactive shell, similar to <command>machinectl shell</command>. In general, <command>systemd-run</command>
-        is preferable for scripting purposes. However, note that <command>systemd-run</command> might require higher
-        privileges than <command>machinectl shell</command>.</para></listitem>
+        <para>Note that
+        <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry> with
+        its <option>--machine=</option> switch may be used in place of the <command>machinectl
+        shell</command> command, and allows non-interactive operation, more detailed and low-level
+        configuration of the invoked unit, as well as access to runtime and exit code/status information of
+        the invoked shell process. In particular, use <command>systemd-run</command>'s
+        <option>--wait</option> switch to propagate exit status information of the invoked process. Use
+        <command>systemd-run</command>'s <option>--pty</option> switch to acquire an interactive shell,
+        similarly to <command>machinectl shell</command>. In general, <command>systemd-run</command> is
+        preferable for scripting purposes. However, note that <command>systemd-run</command> might require
+        higher privileges than <command>machinectl shell</command>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><command>enable</command> <replaceable>NAME</replaceable>…</term>
         <term><command>disable</command> <replaceable>NAME</replaceable>…</term>
 
-        <listitem><para>Enable or disable a container as a system
-        service to start at system boot, using
+        <listitem><para>Enable or disable a container as a system service to start at system boot, using
         <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
-        This enables or disables
-        <filename>systemd-nspawn@.service</filename>, instantiated for
-        the specified machine name, similar to the effect of
-        <command>systemctl enable</command> or <command>systemctl
-        disable</command> on the service name.</para></listitem>
+        This enables or disables <filename>systemd-nspawn@.service</filename>, instantiated for the specified
+        machine name, similarly to the effect of <command>systemctl enable</command> or <command>systemctl
+        disable</command> on the service name.</para>
+
+        <para>This command implicitly reloads the system manager configuration after completing the operation.
+        Note that this command does not implicitly start or power off the containers that are being operated on.
+        If this is desired, combine the command with the <option>--now</option> switch.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -284,7 +283,7 @@
         <listitem><para>Send a signal to one or more processes of the
         virtual machine or container. This means processes as seen by
         the host, not the processes inside the virtual machine or
-        container. Use <option>--kill-who=</option> to select which
+        container. Use <option>--kill-whom=</option> to select which
         process to kill. Use <option>--signal=</option> to select the
         signal to send.</para></listitem>
       </varlistentry>
@@ -305,7 +304,7 @@
       </varlistentry>
 
       <varlistentry>
-        <term><command>copy-to</command> <replaceable>NAME</replaceable> <replaceable>PATH</replaceable> [<replaceable>PATH</replaceable>]</term>
+        <term><command>copy-to</command> <replaceable>NAME</replaceable> <replaceable>PATH</replaceable> [<replaceable>PATH</replaceable>] <option>--force</option></term>
 
         <listitem><para>Copies files or directories from the host
         system into a running container. Takes a container name,
@@ -319,7 +318,7 @@
       </varlistentry>
 
       <varlistentry>
-        <term><command>copy-from</command> <replaceable>NAME</replaceable> <replaceable>PATH</replaceable> [<replaceable>PATH</replaceable>]</term>
+        <term><command>copy-from</command> <replaceable>NAME</replaceable> <replaceable>PATH</replaceable> [<replaceable>PATH</replaceable>] <option>--force</option></term>
 
         <listitem><para>Copies files or directories from a container
         into the host system. Takes a container name, followed by the
@@ -544,11 +543,9 @@
         machine name. To omit creation of the local, writable copy
         pass <literal>-</literal> as local machine name.</para>
 
-        <para>Similar to the behavior of <command>pull-tar</command>,
-        the read-only image is prefixed with
-        <filename>.raw-</filename>, and thus not shown by
-        <command>list-images</command>, unless <option>--all</option>
-        is passed.</para>
+        <para>Similarly to the behavior of <command>pull-tar</command>, the read-only image is prefixed with
+        <filename>.raw-</filename>, and thus not shown by <command>list-images</command>, unless
+        <option>--all</option> is passed.</para>
 
         <para>Note that pressing C-c during execution of this command
         will not abort the download. Use
@@ -586,9 +583,9 @@
         <term><command>import-fs</command> <replaceable>DIRECTORY</replaceable> [<replaceable>NAME</replaceable>]</term>
 
         <listitem><para>Imports a container image stored in a local directory into
-        <filename>/var/lib/machines/</filename>, operates similar to <command>import-tar</command> or
-        <command>import-raw</command>, but the first argument is the source directory. If supported, this command will
-        create btrfs snapshot or subvolume for the new image.</para></listitem>
+        <filename>/var/lib/machines/</filename>, operates similarly to <command>import-tar</command> or
+        <command>import-raw</command>, but the first argument is the source directory. If supported, this
+        command will create a btrfs snapshot or subvolume for the new image.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -689,7 +686,7 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>--kill-who=</option></term>
+        <term><option>--kill-whom=</option></term>
 
         <listitem><para>When used with <command>kill</command>, choose
         which processes to kill. Must be one of
@@ -712,14 +709,16 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>-E <replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
-        <term><option>--setenv=<replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
+        <term><option>-E <replaceable>NAME</replaceable>[=<replaceable>VALUE</replaceable>]</option></term>
+        <term><option>--setenv=<replaceable>NAME</replaceable>[=<replaceable>VALUE</replaceable>]</option></term>
 
-         <listitem><para>When used with the <command>shell</command> command, sets an environment
-         variable to pass to the executed shell. Takes an environment variable name and value,
-         separated by <literal>=</literal>. This switch may be used multiple times to set multiple
-         environment variables. Note that this switch is not supported for the
-         <command>login</command> command (see below).</para></listitem>
+        <listitem><para>When used with the <command>shell</command> command, sets an environment variable for
+        the executed shell. This option may be used more than once to set multiple variables. When
+        <literal>=</literal> and <replaceable>VALUE</replaceable> are omitted, the value of the variable with
+        the same name in the program environment will be used.</para>
+
+        <para>Note that this option is not supported for the <command>login</command> command.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -782,6 +781,17 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--now</option></term>
+
+        <listitem>
+          <para>When used with <command>enable</command> or <command>disable</command>,
+          the containers will also be started or powered off. The start or poweroff
+          operation is only carried out when the respective enable or disable
+          operation has been successful.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--force</option></term>
 
         <listitem><para>When downloading a container or VM image, and
@@ -805,11 +815,10 @@
       <varlistentry>
         <term><option>--max-addresses=</option></term>
 
-        <listitem><para>When used with the <option>list-machines</option> command, limits the number of ip
-        addresses output for every machine.  Defaults to 1. All addresses can be requested with
-        <literal>all</literal> as argument to <option>--max-addresses=</option>. If the argument to
-        <option>--max-addresses=</option> is less than the actual number of addresses,
-        <literal>…</literal>follows the last address.</para></listitem>
+        <listitem><para>When used with the <option>list-machines</option> command, limits the number of IP
+        addresses shown for every machine. Defaults to 1. All addresses can be requested with
+        <literal>all</literal>. If the limit is 0, the address column is not shown. Otherwise, if the machine
+        has more addresses than shown, <literal>…</literal> follows the last address.</para></listitem>
       </varlistentry>
 
       <varlistentry>
diff --git a/man/man.in b/man/man.in
index 40b7476..201c32d 100755
--- a/man/man.in
+++ b/man/man.in
@@ -1,4 +1,6 @@
 #!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
 set -e
 
 if [ -z "$1" ]; then
diff --git a/man/meson.build b/man/meson.build
index 900bb2a..b7725ce 100644
--- a/man/meson.build
+++ b/man/meson.build
@@ -30,14 +30,13 @@
         'custom-entities.ent',
         input : 'custom-entities.ent.in',
         output : 'custom-entities.ent',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true)
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'])
 
 man_pages = []
 html_pages = []
 source_xml_files = []
 dbus_docs = []
-foreach tuple : xsltproc.found() ? manpages : []
+foreach tuple : manpages
         stem = tuple[0]
         section = tuple[1]
         aliases = tuple[2]
@@ -54,49 +53,51 @@
                 htmlaliases += alias + '.html'
         endforeach
 
-        mandirn = join_paths(get_option('mandir'), 'man' + section)
+        mandirn = get_option('mandir') / ('man' + section)
 
         if condition == '' or conf.get(condition) == 1
-                p1 = custom_target(
-                        man,
-                        input : xml,
-                        output : [man] + manaliases,
-                        command : xslt_cmd + [custom_man_xsl, '@INPUT@'],
-                        depends : custom_entities_ent,
-                        install : want_man,
-                        install_dir : mandirn)
-                man_pages += p1
-
-                p2 = []
-                foreach htmlalias : htmlaliases
-                        link = custom_target(
-                                htmlalias,
-                                output : htmlalias,
-                                command : [ln, '-fs', html, '@OUTPUT@'])
-                        if want_html
-                                dst = join_paths(docdir, 'html', htmlalias)
-                                cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
-                                meson.add_install_script('sh', '-c', cmd)
-                                p2 += link
-                        endif
-                        html_pages += link
-                endforeach
-
-                p3 = custom_target(
-                        html,
-                        input : xml,
-                        output : html,
-                        command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
-                        depends : [custom_entities_ent, p2],
-                        install : want_html,
-                        install_dir : join_paths(docdir, 'html'))
-                html_pages += p3
-
                 file = files(tuple[0] + '.xml')
                 source_xml_files += file
                 if tuple[0].startswith('org.freedesktop.')
                         dbus_docs += file
                 endif
+
+                if xsltproc.found()
+                        p1 = custom_target(
+                                man,
+                                input : xml,
+                                output : [man] + manaliases,
+                                command : xslt_cmd + [custom_man_xsl, '@INPUT@'],
+                                depends : custom_entities_ent,
+                                install : want_man,
+                                install_dir : mandirn)
+                        man_pages += p1
+
+                        p2 = []
+                        foreach htmlalias : htmlaliases
+                                link = custom_target(
+                                        htmlalias,
+                                        output : htmlalias,
+                                        command : [ln, '-fs', html, '@OUTPUT@'])
+                                if want_html
+                                        dst = docdir / 'html' / htmlalias
+                                        cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
+                                        meson.add_install_script('sh', '-c', cmd)
+                                        p2 += link
+                                endif
+                                html_pages += link
+                        endforeach
+
+                        p3 = custom_target(
+                                html,
+                                input : xml,
+                                output : html,
+                                command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
+                                depends : [custom_entities_ent, p2],
+                                install : want_html,
+                                install_dir : docdir / 'html')
+                        html_pages += p3
+                endif
         else
                 message('Skipping @0@.@1@ because @2@ is false'.format(stem, section, condition))
         endif
@@ -104,7 +105,7 @@
 
 ############################################################
 
-have_lxml = run_command(xml_helper_py).returncode() == 0
+have_lxml = run_command(xml_helper_py, check: false).returncode() == 0
 if not have_lxml
         message('python-lxml not available, not making man page indices')
 endif
@@ -132,7 +133,7 @@
         html = stem + '.html'
         man = stem + '.' + section
 
-        mandirn = join_paths(get_option('mandir'), 'man' + section)
+        mandirn = get_option('mandir') / ('man' + section)
 
         p1 = custom_target(
                 man,
@@ -152,7 +153,7 @@
                         output : htmlalias,
                         command : [ln, '-fs', html, '@OUTPUT@'])
                 if want_html
-                        dst = join_paths(docdir, 'html', htmlalias)
+                        dst = docdir / 'html' / htmlalias
                         cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
                         meson.add_install_script('sh', '-c', cmd)
                         p2 += link
@@ -167,7 +168,7 @@
                 command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
                 depends : [custom_entities_ent, p2],
                 install : want_html and have_lxml,
-                install_dir : join_paths(docdir, 'html'))
+                install_dir : docdir / 'html')
         html_pages += p3
 endforeach
 
@@ -213,3 +214,27 @@
         input : 'html.in',
         output : 'html',
         configuration : buildroot_substs)
+
+############################################################
+
+update_dbus_docs = custom_target(
+        'update-dbus-docs',
+        output : 'update-dbus-docs',
+        command : [update_dbus_docs_py, '--build-dir', project_build_root, '@INPUT@'],
+        input : dbus_docs)
+
+if conf.get('BUILD_MODE_DEVELOPER') == 1
+        test('dbus-docs-fresh',
+             update_dbus_docs_py,
+             suite : 'dist-check',
+             args : ['--build-dir', project_build_root, '--test', dbus_docs],
+             depends : dbus_programs)
+endif
+
+update_man_rules = custom_target(
+        'update-man-rules',
+        output : 'update-man-rules',
+        command : [update_man_rules_py,
+                   '@0@/man/*.xml'.format(project_source_root),
+                   '@0@/rules/meson.build'.format(meson.current_source_dir())],
+        depends : custom_entities_ent)
diff --git a/man/networkctl.xml b/man/networkctl.xml
index 2f7e9d7..f67ad99 100644
--- a/man/networkctl.xml
+++ b/man/networkctl.xml
@@ -54,7 +54,7 @@
         </term>
 
         <listitem>
-          <para>Show a list of existing links and their status. If one ore more
+          <para>Show a list of existing links and their status. If one or more
           <replaceable>PATTERN</replaceable>s are specified, only links matching one of them are shown.
           If no further arguments are specified shows all links,
           otherwise just the specified links. Produces output similar to:
@@ -137,9 +137,9 @@
                 </listitem>
               </varlistentry>
               <varlistentry>
-                <term>failed</term>
+                <term>initialized</term>
                 <listitem>
-                  <para>networkd failed to manage the link</para>
+                  <para>udev has processed the link, but we don't yet know if we will manage it</para>
                 </listitem>
               </varlistentry>
               <varlistentry>
@@ -161,6 +161,12 @@
                 </listitem>
               </varlistentry>
               <varlistentry>
+                <term>failed</term>
+                <listitem>
+                  <para>networkd failed to manage the link</para>
+                </listitem>
+              </varlistentry>
+              <varlistentry>
                 <term>linger</term>
                 <listitem>
                   <para>the link is gone, but has not yet been dropped by networkd</para>
@@ -179,7 +185,7 @@
 
         <listitem>
           <para>Show information about the specified links: type, state, kernel module driver, hardware and
-          IP address, configured DNS servers, etc. If one ore more <replaceable>PATTERN</replaceable>s are
+          IP address, configured DNS servers, etc. If one or more <replaceable>PATTERN</replaceable>s are
           specified, only links matching one of them are shown.</para>
 
           <para>When no links are specified, an overall network status is shown. Also see the option
diff --git a/man/nss-myhostname.xml b/man/nss-myhostname.xml
index f9d0ff4..19e7aa2 100644
--- a/man/nss-myhostname.xml
+++ b/man/nss-myhostname.xml
@@ -80,7 +80,7 @@
     <filename>/etc/hosts</filename>.</para>
 
     <para>Please keep in mind that <command>nss-myhostname</command> (and <command>nss-resolve</command>) also resolve
-    in the other direction — from locally attached IP adresses to
+    in the other direction — from locally attached IP addresses to
     hostnames. If you rely on that lookup being provided by DNS, you might
     want to order things differently.
     </para>
@@ -109,7 +109,9 @@
 
 netgroup:       nis</programlisting>
 
-    <para>To test, use <command>glibc</command>'s <command>getent</command> tool:</para>
+    <para>To test, use <command>glibc</command>'s
+    <citerefentry project='man-pages'><refentrytitle>getent</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    tool:</para>
 
     <programlisting>$ getent ahosts `hostname`
 ::1       STREAM omega
diff --git a/man/nss-resolve.xml b/man/nss-resolve.xml
index 7436387..b72b1ba 100644
--- a/man/nss-resolve.xml
+++ b/man/nss-resolve.xml
@@ -54,7 +54,7 @@
     <command>systemd-resolved</command> is not running.</para>
 
     <para>Please keep in mind that <command>nss-myhostname</command> (and <command>nss-resolve</command>) also resolve
-    in the other direction — from locally attached IP adresses to
+    in the other direction — from locally attached IP addresses to
     hostnames. If you rely on that lookup being provided by DNS, you might
     want to order things differently.
     </para>
@@ -76,13 +76,62 @@
         unreliable.</para></listitem>
       </varlistentry>
     </variablelist>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$SYSTEMD_NSS_RESOLVE_SYNTHESIZE</varname></term>
+
+        <listitem><para>Takes a boolean argument. When false, synthetic records, e.g. for the local host
+        name, will not be returned. See section SYNTHETIC RECORDS in
+        <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        for more information. This may be useful to query the "public" resource records, independent of the
+        configuration of the local machine.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$SYSTEMD_NSS_RESOLVE_CACHE</varname></term>
+
+        <listitem><para>Takes a boolean argument. When false, the cache of previously queried records will
+        not be used by <command>systemd-resolved</command>.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$SYSTEMD_NSS_RESOLVE_ZONE</varname></term>
+
+        <listitem><para>Takes a boolean argument. When false, answers using locally registered public
+        LLMNR/mDNS resource records will not be returned.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$SYSTEMD_NSS_RESOLVE_TRUST_ANCHOR</varname></term>
+
+        <listitem><para>Takes a boolean argument. When false, answers using locally configured trust anchors
+        will not be used.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$SYSTEMD_NSS_RESOLVE_NETWORK</varname></term>
+
+        <listitem><para>Takes a boolean argument. When false, answers will be returned without using the
+        network, i.e. either from local sources or the cache in <command>systemd-resolved</command>.
+        </para></listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
   <refsect1>
     <title>Example</title>
 
-    <para>Here is an example <filename>/etc/nsswitch.conf</filename> file that enables <command>nss-resolve</command>
-    correctly:</para>
+    <para>Here is an example <filename>/etc/nsswitch.conf</filename> file that enables
+    <command>nss-resolve</command> correctly:</para>
 
     <!-- synchronize with other nss-* man pages and factory/etc/nsswitch.conf -->
 <programlisting>passwd:         compat systemd
diff --git a/man/oomctl.xml b/man/oomctl.xml
index b5e8a44..950e79d 100644
--- a/man/oomctl.xml
+++ b/man/oomctl.xml
@@ -48,7 +48,7 @@
       <varlistentry>
         <term><command>dump</command></term>
 
-        <listitem><para>Show the current state of the cgroup(s) and system context(s) stored by
+        <listitem><para>Show the current state of the cgroups and system contexts stored by
         <command>systemd-oomd</command>.</para></listitem>
       </varlistentry>
 
diff --git a/man/org.freedesktop.home1.xml b/man/org.freedesktop.home1.xml
index b977e1b..2ca97ef 100644
--- a/man/org.freedesktop.home1.xml
+++ b/man/org.freedesktop.home1.xml
@@ -63,8 +63,10 @@
                          out b incomplete,
                          out o bus_path);
       ListHomes(out a(susussso) home_areas);
+      @org.freedesktop.systemd1.Privileged("true")
       ActivateHome(in  s user_name,
                    in  s secret);
+      @org.freedesktop.systemd1.Privileged("true")
       DeactivateHome(in  s user_name);
       RegisterHome(in  s user_record);
       UnregisterHome(in  s user_name);
@@ -72,6 +74,7 @@
       RealizeHome(in  s user_name,
                   in  s secret);
       RemoveHome(in  s user_name);
+      @org.freedesktop.systemd1.Privileged("true")
       FixateHome(in  s user_name,
                  in  s secret);
       AuthenticateHome(in  s user_name,
@@ -83,19 +86,27 @@
       ChangePasswordHome(in  s user_name,
                          in  s new_secret,
                          in  s old_secret);
+      @org.freedesktop.systemd1.Privileged("true")
       LockHome(in  s user_name);
+      @org.freedesktop.systemd1.Privileged("true")
       UnlockHome(in  s user_name,
                  in  s secret);
       AcquireHome(in  s user_name,
                   in  s secret,
                   in  b please_suspend,
                   out h send_fd);
+      @org.freedesktop.systemd1.Privileged("true")
       RefHome(in  s user_name,
               in  b please_suspend,
               out h send_fd);
+      @org.freedesktop.systemd1.Privileged("true")
       ReleaseHome(in  s user_name);
+      @org.freedesktop.systemd1.Privileged("true")
       LockAllHomes();
+      @org.freedesktop.systemd1.Privileged("true")
       DeactivateAllHomes();
+      @org.freedesktop.systemd1.Privileged("true")
+      Rebalance();
     properties:
       readonly a(sso) AutoLogin = [...];
   };
@@ -159,6 +170,8 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="DeactivateAllHomes()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="Rebalance()"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="AutoLogin"/>
 
     <!--End of Autogenerated section-->
@@ -346,6 +359,10 @@
 
       <para><function>DeactivateAllHomes()</function> deactivates all home areas that are currently
       active. This is usually invoked automatically shortly before system shutdown.</para>
+
+      <para><function>Rebalance()</function> synchronously rebalances free disk space between home
+      areas. This only executes an operation if at least one home area using the LUKS2 backend is active and
+      has rebalancing enabled, and is otherwise a NOP.</para>
     </refsect2>
 
     <refsect2>
@@ -366,11 +383,14 @@
 node /org/freedesktop/home1/home {
   interface org.freedesktop.home1.Home {
     methods:
+      @org.freedesktop.systemd1.Privileged("true")
       Activate(in  s secret);
+      @org.freedesktop.systemd1.Privileged("true")
       Deactivate();
       Unregister();
       Realize(in  s secret);
       Remove();
+      @org.freedesktop.systemd1.Privileged("true")
       Fixate(in  s secret);
       Authenticate(in  s secret);
       Update(in  s user_record);
@@ -378,13 +398,18 @@
              in  s secret);
       ChangePassword(in  s new_secret,
                      in  s old_secret);
+      @org.freedesktop.systemd1.Privileged("true")
       Lock();
+      @org.freedesktop.systemd1.Privileged("true")
       Unlock(in  s secret);
+      @org.freedesktop.systemd1.Privileged("true")
       Acquire(in  s secret,
               in  b please_suspend,
               out h send_fd);
+      @org.freedesktop.systemd1.Privileged("true")
       Ref(in  b please_suspend,
           out h send_fd);
+      @org.freedesktop.systemd1.Privileged("true")
       Release();
     properties:
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -489,12 +514,7 @@
     </refsect2>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 
   <refsect1>
     <title>See Also</title>
diff --git a/man/org.freedesktop.hostname1.xml b/man/org.freedesktop.hostname1.xml
index 4f51cd5..c5abd25 100644
--- a/man/org.freedesktop.hostname1.xml
+++ b/man/org.freedesktop.hostname1.xml
@@ -58,6 +58,7 @@
                   in  b interactive);
       GetProductUUID(in  b interactive,
                      out ay uuid);
+      GetHardwareSerial(out s serial);
       Describe(out s json);
     properties:
       readonly s Hostname = '...';
@@ -81,11 +82,19 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s OperatingSystemCPEName = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t OperatingSystemSupportEnd = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s HomeURL = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s HardwareVendor = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s HardwareModel = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s FirmwareVersion = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s FirmwareVendor = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t FirmwareDate = ...;
   };
   interface org.freedesktop.DBus.Peer { ... };
   interface org.freedesktop.DBus.Introspectable { ... };
@@ -93,10 +102,20 @@
 };
     </programlisting>
 
+    <!--method GetHardwareSerial is not documented!-->
+
+    <!--property OperatingSystemSupportEnd is not documented!-->
+
     <!--property HardwareVendor is not documented!-->
 
     <!--property HardwareModel is not documented!-->
 
+    <!--property FirmwareVersion is not documented!-->
+
+    <!--property FirmwareVendor is not documented!-->
+
+    <!--property FirmwareDate is not documented!-->
+
     <!--Autogenerated cross-references for systemd.directives, do not edit-->
 
     <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.hostname1"/>
@@ -119,6 +138,8 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="GetProductUUID()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="GetHardwareSerial()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="Describe()"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="Hostname"/>
@@ -149,12 +170,20 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="OperatingSystemCPEName"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="OperatingSystemSupportEnd"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="HomeURL"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="HardwareVendor"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="HardwareModel"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="FirmwareVersion"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="FirmwareVendor"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="FirmwareDate"/>
+
     <!--End of Autogenerated section-->
 
     <para>Whenever the hostname or other metadata is changed via the daemon,
@@ -341,7 +370,7 @@
       as-is to <filename>systemd-hostnamed</filename> in which case it will automatically use a suitable
       fallback.</para></listitem>
 
-      <listitem><para>Uppercase charaacters should be replaced with their lowercase equivalents.
+      <listitem><para>Uppercase characters should be replaced with their lowercase equivalents.
       </para></listitem>
     </itemizedlist></para>
 
@@ -368,12 +397,7 @@
     name.</para>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 
   <refsect1>
     <title>Examples</title>
diff --git a/man/org.freedesktop.import1.xml b/man/org.freedesktop.import1.xml
index 9558ee1..62d753e 100644
--- a/man/org.freedesktop.import1.xml
+++ b/man/org.freedesktop.import1.xml
@@ -183,14 +183,14 @@
       specified file descriptor will be a tar file in case of <function>ExportTar()</function> or a raw disk
       image in case of <function>ExportRaw()</function>. Note that currently raw disk images may not be
       exported as tar files, and vice versa. This restriction might be lifted eventually. The method
-      returns a transfer identifier and object path for cancelling or tracking the export operation, similar
+      returns a transfer identifier and object path for cancelling or tracking the export operation, similarly
       to <function>ImportTar()</function> or <function>ImportRaw()</function> as described above.</para>
 
       <para><function>PullTar()</function> and <function>PullRaw()</function> may be used to download, verify
       and import a system image from a URL. They take an URL argument which should point to a tar or
       raw file on the <literal>http://</literal> or <literal>https://</literal> protocols, possibly
       compressed with xz, bzip2 or gzip. The second argument is a local name for the image. It should be
-      suitable as a hostname, similar to the matching argument of the <function>ImportTar()</function> and
+      suitable as a hostname, similarly to the matching argument of the <function>ImportTar()</function> and
       <function>ImportRaw()</function> methods above. The third argument indicates the verification mode for
       the image. It may be one of <literal>no</literal>, <literal>checksum</literal>,
       <literal>signature</literal>. <literal>no</literal> turns off any kind of verification of the image;
@@ -339,10 +339,5 @@
     </example>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 </refentry>
diff --git a/man/org.freedesktop.locale1.xml b/man/org.freedesktop.locale1.xml
index 1da386d..8e2ca81 100644
--- a/man/org.freedesktop.locale1.xml
+++ b/man/org.freedesktop.locale1.xml
@@ -179,7 +179,7 @@
     </example>
   </refsect1>
 
-  <refsect1>
+  <refsect1 id="versioning">
     <title>Versioning</title>
 
     <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
diff --git a/man/org.freedesktop.login1.xml b/man/org.freedesktop.login1.xml
index 3153775..6781e1d 100644
--- a/man/org.freedesktop.login1.xml
+++ b/man/org.freedesktop.login1.xml
@@ -56,6 +56,7 @@
       ListUsers(out a(uso) users);
       ListSeats(out a(so) seats);
       ListInhibitors(out a(ssssuu) inhibitors);
+      @org.freedesktop.systemd1.Privileged("true")
       CreateSession(in  u uid,
                     in  u pid,
                     in  s service,
@@ -78,6 +79,7 @@
                     out s seat_id,
                     out u vtnr,
                     out b existing);
+      @org.freedesktop.systemd1.Privileged("true")
       ReleaseSession(in  s session_id);
       ActivateSession(in  s session_id);
       ActivateSessionOnSeat(in  s session_id,
@@ -192,10 +194,20 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s HandlePowerKey = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s HandlePowerKeyLongPress = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s HandleRebootKey = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s HandleRebootKeyLongPress = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s HandleSuspendKey = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s HandleSuspendKeyLongPress = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s HandleHibernateKey = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s HandleHibernateKeyLongPress = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s HandleLidSwitch = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s HandleLidSwitchExternalPower = '...';
@@ -233,6 +245,8 @@
       readonly t SessionsMax = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t NCurrentSessions = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t StopIdleSessionUSec = ...;
   };
   interface org.freedesktop.DBus.Peer { ... };
   interface org.freedesktop.DBus.Introspectable { ... };
@@ -240,6 +254,18 @@
 };
     </programlisting>
 
+    <!--property HandlePowerKeyLongPress is not documented!-->
+
+    <!--property HandleRebootKey is not documented!-->
+
+    <!--property HandleRebootKeyLongPress is not documented!-->
+
+    <!--property HandleSuspendKeyLongPress is not documented!-->
+
+    <!--property HandleHibernateKeyLongPress is not documented!-->
+
+    <!--property StopIdleSessionUSec is not documented!-->
+
     <!--Autogenerated cross-references for systemd.directives, do not edit-->
 
     <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.login1.Manager"/>
@@ -416,10 +442,20 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="HandlePowerKey"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="HandlePowerKeyLongPress"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="HandleRebootKey"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="HandleRebootKeyLongPress"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="HandleSuspendKey"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="HandleSuspendKeyLongPress"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="HandleHibernateKey"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="HandleHibernateKeyLongPress"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="HandleLidSwitch"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="HandleLidSwitchExternalPower"/>
@@ -458,6 +494,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="NCurrentSessions"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StopIdleSessionUSec"/>
+
     <!--End of Autogenerated section-->
 
     <refsect2>
@@ -841,8 +879,9 @@
     <refsect2>
       <title>Methods</title>
 
-      <para><function>Terminate()</function> and <function>ActivateSession()</function> work similar to
-      TerminateSeat(), ActivationSessionOnSeat() on the Manager object.</para>
+      <para><function>Terminate()</function> and <function>ActivateSession()</function> work similarly to
+      <function>TerminateSeat()</function> and <function>ActivationSessionOnSeat()</function> on the Manager
+      object.</para>
 
       <para><function>SwitchTo()</function> switches to the session on the virtual terminal
       <varname>vtnr</varname>. <function>SwitchToNext()</function> and
@@ -875,8 +914,8 @@
       encoded in a structure consisting of the ID and the object path.</para>
 
       <para>The <varname>IdleHint</varname>, <varname>IdleSinceHint</varname>, and
-      <varname>IdleSinceHintMonotonic</varname> properties encode the idle state, similar to the ones exposed
-      on the <interfacename>Manager</interfacename> object, but specific for this seat.</para>
+      <varname>IdleSinceHintMonotonic</varname> properties encode the idle state, similarly to the ones
+      exposed on the <interfacename>Manager</interfacename> object, but specific for this seat.</para>
     </refsect2>
   </refsect1>
 
@@ -968,7 +1007,7 @@
     <refsect2>
       <title>Methods</title>
 
-      <para><function>Terminate()</function> and <function>Kill()</function> work similar to the
+      <para><function>Terminate()</function> and <function>Kill()</function> work similarly to the
       <function>TerminateUser()</function> and <function>KillUser()</function> methods on the manager
       object.</para>
     </refsect2>
@@ -1018,8 +1057,8 @@
       user. Each structure consists of the ID and object path.</para>
 
       <para>The <varname>IdleHint</varname>, <varname>IdleSinceHint</varname>, and
-      <varname>IdleSinceHintMonotonic</varname> properties encode the idle hint state of the user, similar to
-      the <interfacename>Manager</interfacename>'s properties, but specific for this user.</para>
+      <varname>IdleSinceHintMonotonic</varname> properties encode the idle hint state of the user, similarly
+      to the <interfacename>Manager</interfacename>'s properties, but specific for this user.</para>
 
       <para>The <varname>Linger</varname> property shows whether lingering is enabled for this user.</para>
     </refsect2>
@@ -1043,6 +1082,7 @@
       TakeControl(in  b force);
       ReleaseControl();
       SetType(in  s type);
+      SetDisplay(in  s display);
       TakeDevice(in  u major,
                  in  u minor,
                  out h fd,
@@ -1140,6 +1180,8 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="SetType()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="SetDisplay()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="TakeDevice()"/>
 
     <variablelist class="dbus-method" generated="True" extra-ref="ReleaseDevice()"/>
@@ -1236,6 +1278,11 @@
       connection. This should help prevent a session from entering an inconsistent state, for example if the
       controller crashes. The only argument <varname>type</varname> is the new session type.</para>
 
+      <para><function>SetDisplay()</function> allows the display name of the graphical session to be changed. This is
+      useful if the display server is started as part of the session. It can only be called by session's current
+      controller. If <function>TakeControl()</function> has not been called, this method will fail. The only argument
+      <varname>display</varname> is the new display name.</para>
+
       <para><function>TakeDevice()</function> allows a session controller to get a file descriptor for a
       specific device. Pass in the major and minor numbers of the character device and
       <filename>systemd-logind</filename> will return a file descriptor for the device. Only a limited set of
@@ -1383,27 +1430,46 @@
     <title>Examples</title>
 
     <example>
-      <title>Introspect <interfacename>org.freedesktop.login1.Manager</interfacename> on the bus</title>
+      <title>Introspect the logind manager on the bus</title>
 
       <programlisting>$ gdbus introspect --system --dest org.freedesktop.login1 \
   --object-path /org/freedesktop/login1
       </programlisting>
-    </example>
 
-    <example>
-      <title>Introspect <interfacename>org.freedesktop.login1.Seat</interfacename> on the bus</title>
+      <para>or</para>
 
-      <programlisting>$ gdbus introspect --system --dest org.freedesktop.login1 \
- --object-path /org/freedesktop/login1/seat/seat0
+      <programlisting>$ busctl introspect org.freedesktop.login1 /org/freedesktop/login1
       </programlisting>
     </example>
 
     <example>
-      <title>Introspect <interfacename>org.freedesktop.login1.User</interfacename> on the bus</title>
+      <title>Introspect the default seat on the bus</title>
+
+      <programlisting>$ gdbus introspect --system --dest org.freedesktop.login1 \
+ --object-path /org/freedesktop/login1/seat/seat0
+      </programlisting>
+
+      <para>or</para>
+
+      <programlisting>$ busctl introspect org.freedesktop.login1 /org/freedesktop/login1/seat/seat0
+      </programlisting>
+
+      <para>Seat <literal>seat0</literal> is the default seat, so it'll be present unless local configuration
+      is made to reassign all devices to a different seat. The list of seats and users can be acquired with
+      <command>loginctl list-sessions</command>.</para>
+    </example>
+
+    <example>
+      <title>Introspect a single user on the bus</title>
 
       <programlisting>$ gdbus introspect --system --dest org.freedesktop.login1 \
   --object-path /org/freedesktop/login1/user/_1000
       </programlisting>
+
+      <para>or</para>
+
+      <programlisting>$ busctl introspect org.freedesktop.login1 /org/freedesktop/login1/user/_1000
+      </programlisting>
     </example>
 
     <example>
@@ -1412,13 +1478,13 @@
       <programlisting>$ gdbus introspect --system --dest org.freedesktop.login1 \
   --object-path /org/freedesktop/login1/session/45
       </programlisting>
+
+      <para>or</para>
+
+      <programlisting>$ busctl introspect org.freedesktop.login1 /org/freedesktop/login1/session/45
+      </programlisting>
     </example>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 </refentry>
diff --git a/man/org.freedesktop.machine1.xml b/man/org.freedesktop.machine1.xml
index 284c3d6..c366c1b 100644
--- a/man/org.freedesktop.machine1.xml
+++ b/man/org.freedesktop.machine1.xml
@@ -46,6 +46,7 @@
                       out o machine);
       ListMachines(out a(ssso) machines);
       ListImages(out a(ssbttto) images);
+      @org.freedesktop.systemd1.Privileged("true")
       CreateMachine(in  s name,
                     in  ay id,
                     in  s service,
@@ -54,6 +55,7 @@
                     in  s root_directory,
                     in  a(sv) scope_properties,
                     out o path);
+      @org.freedesktop.systemd1.Privileged("true")
       CreateMachineWithNetwork(in  s name,
                                in  ay id,
                                in  s service,
@@ -63,6 +65,7 @@
                                in  ai ifindices,
                                in  a(sv) scope_properties,
                                out o path);
+      @org.freedesktop.systemd1.Privileged("true")
       RegisterMachine(in  s name,
                       in  ay id,
                       in  s service,
@@ -70,6 +73,7 @@
                       in  u leader,
                       in  s root_directory,
                       out o path);
+      @org.freedesktop.systemd1.Privileged("true")
       RegisterMachineWithNetwork(in  s name,
                                  in  ay id,
                                  in  s service,
@@ -87,6 +91,7 @@
                           out a(iay) addresses);
       GetMachineOSRelease(in  s name,
                           out a{ss} fields);
+      @org.freedesktop.systemd1.Privileged("true")
       OpenMachinePTY(in  s name,
                      out h pty,
                      out s pty_path);
@@ -111,6 +116,14 @@
       CopyToMachine(in  s name,
                     in  s source,
                     in  s destination);
+      CopyFromMachineWithFlags(in  s name,
+                               in  s source,
+                               in  s destination,
+                               in  t flags);
+      CopyToMachineWithFlags(in  s name,
+                             in  s source,
+                             in  s destination,
+                             in  t flags);
       OpenMachineRootDirectory(in  s name,
                                out h fd);
       GetMachineUIDShift(in  s name,
@@ -171,6 +184,8 @@
 
     <!--method UnregisterMachine is not documented!-->
 
+    <!--method CopyToMachineWithFlags is not documented!-->
+
     <!--method OpenMachineRootDirectory is not documented!-->
 
     <!--method GetMachineUIDShift is not documented!-->
@@ -231,6 +246,10 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="CopyToMachine()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="CopyFromMachineWithFlags()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="CopyToMachineWithFlags()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="OpenMachineRootDirectory()"/>
 
     <variablelist class="dbus-method" generated="True" extra-ref="GetMachineUIDShift()"/>
@@ -325,7 +344,7 @@
       unit for the calling client (utilizing the passed scope_properties) and move the leader PID into
       it. The method returns an object path for the registered machine object that implements the
       <interfacename>org.freedesktop.machine1.Machine</interfacename> interface (see below). Also see the
-      <ulink url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New Control Group
+      <ulink url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface">New Control Group
       Interfaces</ulink> for details about scope units and how to alter resource control settings on the
       created machine at runtime.</para>
 
@@ -389,8 +408,10 @@
 
       <para><function>CopyFromMachine()</function> copies files or directories from a container into the
       host. It takes a container name, a source directory in the container and a destination directory on the
-      host as arguments. <function>CopyToMachine()</function> does the opposite and copies files from a source
-      directory on the host into a destination directory in the container.</para>
+      host as arguments.
+      <function>CopyToMachine()</function> does the opposite and copies files from a source
+      directory on the host into a destination directory in the container.
+      <function>CopyFromMachineWithFlags()</function> and <function>CopyToMachineWithFlags</function> do the same but take an additional flags argument.</para>
 
       <para><function>RemoveImage()</function> removes the image with the specified name.</para>
 
@@ -460,6 +481,12 @@
                in  s destination);
       CopyTo(in  s source,
              in  s destination);
+      CopyFromWithFlags(in  s source,
+                        in  s destination,
+                        in  t flags);
+      CopyToWithFlags(in  s source,
+                      in  s destination,
+                      in  t flags);
       OpenRootDirectory(out h fd);
     properties:
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -505,6 +532,10 @@
 
     <!--method CopyTo is not documented!-->
 
+    <!--method CopyFromWithFlags is not documented!-->
+
+    <!--method CopyToWithFlags is not documented!-->
+
     <!--method OpenRootDirectory is not documented!-->
 
     <!--Autogenerated cross-references for systemd.directives, do not edit-->
@@ -535,6 +566,10 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="CopyTo()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="CopyFromWithFlags()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="CopyToWithFlags()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="OpenRootDirectory()"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="Name"/>
@@ -634,10 +669,5 @@
     </example>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 </refentry>
diff --git a/man/org.freedesktop.network1.xml b/man/org.freedesktop.network1.xml
new file mode 100644
index 0000000..a4b5385
--- /dev/null
+++ b/man/org.freedesktop.network1.xml
@@ -0,0 +1,502 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
+<!ENTITY % entities SYSTEM "custom-entities.ent" >
+%entities;
+]>
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="org.freedesktop.network1" conditional='ENABLE_NETWORKD'
+    xmlns:xi="http://www.w3.org/2001/XInclude">
+  <refentryinfo>
+    <title>org.freedesktop.network1</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>org.freedesktop.network1</refentrytitle>
+    <manvolnum>5</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>org.freedesktop.network1</refname>
+    <refpurpose>The D-Bus interface of systemd-networkd</refpurpose>
+  </refnamediv>
+
+  <refsect1>
+    <title>Introduction</title>
+
+    <para>
+    <citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    is a system service that manages and configures network interfaces. This page describes the D-Bus
+    interface.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>The Manager Object</title>
+
+    <para>The service exposes the following interfaces on the Manager object on the bus:</para>
+
+    <programlisting executable="systemd-networkd" node="/org/freedesktop/network1" interface="org.freedesktop.network1.Manager">
+node /org/freedesktop/network1 {
+  interface org.freedesktop.network1.Manager {
+    methods:
+      ListLinks(out a(iso) links);
+      GetLinkByName(in  s name,
+                    out i ifindex,
+                    out o path);
+      GetLinkByIndex(in  i ifindex,
+                     out s name,
+                     out o path);
+      SetLinkNTP(in  i ifindex,
+                 in  as servers);
+      SetLinkDNS(in  i ifindex,
+                 in  a(iay) addresses);
+      SetLinkDNSEx(in  i ifindex,
+                   in  a(iayqs) addresses);
+      SetLinkDomains(in  i ifindex,
+                     in  a(sb) domains);
+      SetLinkDefaultRoute(in  i ifindex,
+                          in  b enable);
+      SetLinkLLMNR(in  i ifindex,
+                   in  s mode);
+      SetLinkMulticastDNS(in  i ifindex,
+                          in  s mode);
+      SetLinkDNSOverTLS(in  i ifindex,
+                        in  s mode);
+      SetLinkDNSSEC(in  i ifindex,
+                    in  s mode);
+      SetLinkDNSSECNegativeTrustAnchors(in  i ifindex,
+                                        in  as names);
+      RevertLinkNTP(in  i ifindex);
+      RevertLinkDNS(in  i ifindex);
+      RenewLink(in  i ifindex);
+      ForceRenewLink(in  i ifindex);
+      ReconfigureLink(in  i ifindex);
+      Reload();
+      DescribeLink(in  i ifindex,
+                   out s json);
+      Describe(out s json);
+    properties:
+      readonly s OperationalState = '...';
+      readonly s CarrierState = '...';
+      readonly s AddressState = '...';
+      readonly s IPv4AddressState = '...';
+      readonly s IPv6AddressState = '...';
+      readonly s OnlineState = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t NamespaceId = ...;
+  };
+  interface org.freedesktop.DBus.Peer { ... };
+  interface org.freedesktop.DBus.Introspectable { ... };
+  interface org.freedesktop.DBus.Properties { ... };
+};
+    </programlisting>
+
+    <!--method ListLinks is not documented!-->
+
+    <!--method GetLinkByName is not documented!-->
+
+    <!--method GetLinkByIndex is not documented!-->
+
+    <!--method SetLinkNTP is not documented!-->
+
+    <!--method SetLinkDNS is not documented!-->
+
+    <!--method SetLinkDNSEx is not documented!-->
+
+    <!--method SetLinkDomains is not documented!-->
+
+    <!--method SetLinkDefaultRoute is not documented!-->
+
+    <!--method SetLinkLLMNR is not documented!-->
+
+    <!--method SetLinkMulticastDNS is not documented!-->
+
+    <!--method SetLinkDNSOverTLS is not documented!-->
+
+    <!--method SetLinkDNSSEC is not documented!-->
+
+    <!--method SetLinkDNSSECNegativeTrustAnchors is not documented!-->
+
+    <!--method RevertLinkNTP is not documented!-->
+
+    <!--method RevertLinkDNS is not documented!-->
+
+    <!--method RenewLink is not documented!-->
+
+    <!--method ForceRenewLink is not documented!-->
+
+    <!--method ReconfigureLink is not documented!-->
+
+    <!--method Reload is not documented!-->
+
+    <!--method DescribeLink is not documented!-->
+
+    <!--method Describe is not documented!-->
+
+    <!--property OperationalState is not documented!-->
+
+    <!--property CarrierState is not documented!-->
+
+    <!--property AddressState is not documented!-->
+
+    <!--property IPv4AddressState is not documented!-->
+
+    <!--property IPv6AddressState is not documented!-->
+
+    <!--property OnlineState is not documented!-->
+
+    <!--property NamespaceId is not documented!-->
+
+    <!--Autogenerated cross-references for systemd.directives, do not edit-->
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.Manager"/>
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.Manager"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="ListLinks()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="GetLinkByName()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="GetLinkByIndex()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkNTP()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkDNS()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkDNSEx()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkDomains()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkDefaultRoute()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkLLMNR()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkMulticastDNS()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkDNSOverTLS()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkDNSSEC()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLinkDNSSECNegativeTrustAnchors()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="RevertLinkNTP()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="RevertLinkDNS()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="RenewLink()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="ForceRenewLink()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="ReconfigureLink()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="Reload()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="DescribeLink()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="Describe()"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="OperationalState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="CarrierState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="AddressState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="IPv4AddressState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="IPv6AddressState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="OnlineState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="NamespaceId"/>
+
+    <!--End of Autogenerated section-->
+
+    <para>
+      Provides information about the manager.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>Link Object</title>
+
+    <programlisting executable="systemd-networkd" node="/org/freedesktop/network1/link/_1" interface="org.freedesktop.network1.Link">
+node /org/freedesktop/network1/link/_1 {
+  interface org.freedesktop.network1.Link {
+    methods:
+      SetNTP(in  as servers);
+      SetDNS(in  a(iay) addresses);
+      SetDNSEx(in  a(iayqs) addresses);
+      SetDomains(in  a(sb) domains);
+      SetDefaultRoute(in  b enable);
+      SetLLMNR(in  s mode);
+      SetMulticastDNS(in  s mode);
+      SetDNSOverTLS(in  s mode);
+      SetDNSSEC(in  s mode);
+      SetDNSSECNegativeTrustAnchors(in  as names);
+      RevertNTP();
+      RevertDNS();
+      Renew();
+      ForceRenew();
+      Reconfigure();
+      Describe(out s json);
+    properties:
+      readonly s OperationalState = '...';
+      readonly s CarrierState = '...';
+      readonly s AddressState = '...';
+      readonly s IPv4AddressState = '...';
+      readonly s IPv6AddressState = '...';
+      readonly s OnlineState = '...';
+      readonly s AdministrativeState = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly (tt) BitRates = ...;
+  };
+  interface org.freedesktop.DBus.Peer { ... };
+  interface org.freedesktop.DBus.Introspectable { ... };
+  interface org.freedesktop.DBus.Properties { ... };
+  interface org.freedesktop.network1.DHCPServer { ... };
+};
+    </programlisting>
+
+    <!--method SetNTP is not documented!-->
+
+    <!--method SetDNS is not documented!-->
+
+    <!--method SetDNSEx is not documented!-->
+
+    <!--method SetDomains is not documented!-->
+
+    <!--method SetDefaultRoute is not documented!-->
+
+    <!--method SetLLMNR is not documented!-->
+
+    <!--method SetMulticastDNS is not documented!-->
+
+    <!--method SetDNSOverTLS is not documented!-->
+
+    <!--method SetDNSSEC is not documented!-->
+
+    <!--method SetDNSSECNegativeTrustAnchors is not documented!-->
+
+    <!--method RevertNTP is not documented!-->
+
+    <!--method RevertDNS is not documented!-->
+
+    <!--method Renew is not documented!-->
+
+    <!--method ForceRenew is not documented!-->
+
+    <!--method Reconfigure is not documented!-->
+
+    <!--method Describe is not documented!-->
+
+    <!--property OperationalState is not documented!-->
+
+    <!--property CarrierState is not documented!-->
+
+    <!--property AddressState is not documented!-->
+
+    <!--property IPv4AddressState is not documented!-->
+
+    <!--property IPv6AddressState is not documented!-->
+
+    <!--property OnlineState is not documented!-->
+
+    <!--property AdministrativeState is not documented!-->
+
+    <!--property BitRates is not documented!-->
+
+    <!--Autogenerated cross-references for systemd.directives, do not edit-->
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.DHCPServer"/>
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.Link"/>
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.DHCPServer"/>
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.Link"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetNTP()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetDNS()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetDNSEx()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetDomains()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetDefaultRoute()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetLLMNR()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetMulticastDNS()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetDNSOverTLS()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetDNSSEC()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="SetDNSSECNegativeTrustAnchors()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="RevertNTP()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="RevertDNS()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="Renew()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="ForceRenew()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="Reconfigure()"/>
+
+    <variablelist class="dbus-method" generated="True" extra-ref="Describe()"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="OperationalState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="CarrierState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="AddressState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="IPv4AddressState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="IPv6AddressState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="OnlineState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="AdministrativeState"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="BitRates"/>
+
+    <!--End of Autogenerated section-->
+
+    <para>
+      Provides information about interfaces.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>Network Object</title>
+
+    <programlisting executable="systemd-networkd" node="/org/freedesktop/network1/network/_1" interface="org.freedesktop.network1.Network">
+node /org/freedesktop/network1/network/_1 {
+  interface org.freedesktop.network1.Network {
+    properties:
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s Description = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s SourcePath = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as MatchMAC = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as MatchPath = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as MatchDriver = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as MatchType = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as MatchName = ['...', ...];
+  };
+  interface org.freedesktop.DBus.Peer { ... };
+  interface org.freedesktop.DBus.Introspectable { ... };
+  interface org.freedesktop.DBus.Properties { ... };
+};
+    </programlisting>
+
+    <!--property Description is not documented!-->
+
+    <!--property SourcePath is not documented!-->
+
+    <!--property MatchMAC is not documented!-->
+
+    <!--property MatchPath is not documented!-->
+
+    <!--property MatchDriver is not documented!-->
+
+    <!--property MatchType is not documented!-->
+
+    <!--property MatchName is not documented!-->
+
+    <!--Autogenerated cross-references for systemd.directives, do not edit-->
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.Network"/>
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.Network"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="Description"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="SourcePath"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="MatchMAC"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="MatchPath"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="MatchDriver"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="MatchType"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="MatchName"/>
+
+    <!--End of Autogenerated section-->
+
+    <para>
+      Provides information about .network files.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>DHCP Server Object</title>
+
+    <programlisting executable="systemd-networkd" node="/org/freedesktop/network1/link/_1" interface="org.freedesktop.network1.DHCPServer">
+node /org/freedesktop/network1/link/_1 {
+  interface org.freedesktop.network1.DHCPServer {
+    properties:
+      readonly a(uayayayayt) Leases = [...];
+  };
+  interface org.freedesktop.DBus.Peer { ... };
+  interface org.freedesktop.DBus.Introspectable { ... };
+  interface org.freedesktop.DBus.Properties { ... };
+};
+    </programlisting>
+
+    <!--property Leases is not documented!-->
+
+    <!--Autogenerated cross-references for systemd.directives, do not edit-->
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.DHCPServer"/>
+
+    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.network1.DHCPServer"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="Leases"/>
+
+    <!--End of Autogenerated section-->
+
+    <para>
+      Provides information about leases.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>Introspect <interfacename>org.freedesktop.network1.Manager</interfacename> on the bus</title>
+
+      <programlisting>
+$ gdbus introspect --system \
+  --dest org.freedesktop.network1 \
+  --object-path /org/freedesktop/network1
+      </programlisting>
+    </example>
+
+    <example>
+      <title>Introspect <interfacename>org.freedesktop.network1.Link</interfacename> on the bus</title>
+
+      <programlisting>
+$ gdbus introspect --system \
+  --dest org.freedesktop.network1 \
+  --object-path /org/freedesktop/network1/link/_11
+      </programlisting>
+    </example>
+  </refsect1>
+
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
+</refentry>
diff --git a/man/org.freedesktop.oom1.xml b/man/org.freedesktop.oom1.xml
index ab0725e..c6b8c7f 100644
--- a/man/org.freedesktop.oom1.xml
+++ b/man/org.freedesktop.oom1.xml
@@ -39,6 +39,9 @@
   interface org.freedesktop.oom1.Manager {
     methods:
       DumpByFileDescriptor(out h fd);
+    signals:
+      Killed(s cgroup,
+             s reason);
   };
   interface org.freedesktop.DBus.Peer { ... };
   interface org.freedesktop.DBus.Introspectable { ... };
@@ -56,19 +59,40 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="DumpByFileDescriptor()"/>
 
+    <variablelist class="dbus-signal" generated="True" extra-ref="Killed"/>
+
     <!--End of Autogenerated section-->
 
     <refsect2>
       <title>Methods</title>
 
-      <para>...</para>
+      <para><function>Killed</function> signal is sent when any cgroup is killed by oomd.</para>
+      <para>Note that more reasons will be added in the future, and the table below will be expanded accordingly.</para>
+      <table>
+        <title>Killing reasons</title>
+        <tgroup cols="2" align="left" colsep="1" rowsep="1">
+        <colspec colname="reason"/>
+        <colspec colname="description"/>
+        <thead>
+          <row>
+            <entry>Reason</entry>
+            <entry>Description</entry>
+          </row>
+        </thead>
+        <tbody>
+          <row>
+            <entry>memory-used</entry>
+            <entry>Application took too much memory and swap.</entry>
+          </row>
+          <row>
+            <entry>memory-pressure</entry>
+            <entry>Application took enough memory and swap to cause sufficient slowdown of other applications.</entry>
+          </row>
+        </tbody>
+        </tgroup>
+      </table>
     </refsect2>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 </refentry>
diff --git a/man/org.freedesktop.portable1.xml b/man/org.freedesktop.portable1.xml
index 8f960cc..50bbc98 100644
--- a/man/org.freedesktop.portable1.xml
+++ b/man/org.freedesktop.portable1.xml
@@ -58,6 +58,10 @@
                                      out a{say} units);
       GetImageState(in  s image,
                     out s state);
+      GetImageStateWithExtensions(in  s image,
+                                  in  as extensions,
+                                  in  t flags,
+                                  out s state);
       AttachImage(in  s image,
                   in  as matches,
                   in  s profile,
@@ -133,6 +137,8 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="GetImageState()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="GetImageStateWithExtensions()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="AttachImage()"/>
 
     <variablelist class="dbus-method" generated="True" extra-ref="AttachImageWithExtensions()"/>
@@ -209,6 +215,12 @@
         <listitem><para>running-runtime</para></listitem>
       </itemizedlist></para>
 
+      <para><function>GetImageStateWithExtensions()</function> is a superset of
+      <function>GetImageState()</function>, with additional support for a list of extensions
+      as input parameters, which is necessary to query the state in case the image was attached
+      in that particular way. The <varname>flag</varname> parameter is currently unused and
+      reserved for future purposes.</para>
+
       <para><function>AttachImage()</function> attaches a portable image to the system.
       This method takes an image path or name, a list of strings that will be used to search for
       unit files inside the image (partial or complete matches), a string indicating which
@@ -295,10 +307,16 @@
       <para>The <function>AttachImageWithExtensions()</function>,
       <function>DetachImageWithExtensions()</function> and
       <function>ReattachImageWithExtensions()</function> methods take in options as flags instead of
-      booleans to allow for extendability, defined as follows:</para>
+      booleans to allow for extendability. <varname>SD_SYSTEMD_PORTABLE_FORCE_ATTACH</varname> will cause
+      safety checks that ensure the units are not running while the new image is attached or detached
+      to be skipped. <varname>SD_SYSTEMD_PORTABLE_FORCE_SYSEXT</varname> will cause the check that the
+      <filename>extension-release.<replaceable>NAME</replaceable></filename> file in the extension image
+      matches the image name to be skipped. They are defined as follows:</para>
 
       <programlisting>
-#define SD_SYSTEMD_PORTABLE_RUNTIME  (UINT64_C(1) &lt;&lt; 0)
+#define SD_SYSTEMD_PORTABLE_RUNTIME         (UINT64_C(1) &lt;&lt; 0)
+#define SD_SYSTEMD_PORTABLE_FORCE_ATTACH    (UINT64_C(1) &lt;&lt; 1)
+#define SD_SYSTEMD_PORTABLE_FORCE_SYSEXT    (UINT64_C(1) &lt;&lt; 2)
       </programlisting>
     </refsect2>
 
@@ -337,6 +355,9 @@
                                 out a{say} extensions,
                                 out a{say} units);
       GetState(out s state);
+      GetStateWithExtensions(in  as extensions,
+                             in  t flags,
+                             out s state);
       Attach(in  as matches,
              in  s profile,
              in  b runtime,
@@ -405,6 +426,8 @@
 
     <!--method GetState is not documented!-->
 
+    <!--method GetStateWithExtensions is not documented!-->
+
     <!--method Attach is not documented!-->
 
     <!--method AttachWithExtensions is not documented!-->
@@ -437,6 +460,8 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="GetState()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="GetStateWithExtensions()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="Attach()"/>
 
     <variablelist class="dbus-method" generated="True" extra-ref="AttachWithExtensions()"/>
@@ -540,10 +565,5 @@
     </refsect2>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 </refentry>
diff --git a/man/org.freedesktop.resolve1.xml b/man/org.freedesktop.resolve1.xml
index b8fff5a..54f0a18 100644
--- a/man/org.freedesktop.resolve1.xml
+++ b/man/org.freedesktop.resolve1.xml
@@ -506,7 +506,7 @@
         <filename>/etc/hosts</filename>. Moreover, it is set for all LLMNR or mDNS RRs which originate from
         the local host. Applications that require authenticated RR data for operation should check this flag
         before trusting the data. Note that <filename>systemd-resolved</filename> will never return
-        invalidated data, hence this flag simply allows to discern the cases where data is known to be
+        invalidated data, hence this flag simply allows one to discern the cases where data is known to be
         trusted, or where there is proof that the data is "rightfully" unauthenticated (which includes cases
         where the underlying protocol or server does not support authenticating data).</para>
 
@@ -606,7 +606,7 @@
       <para>The <varname>DNSSECStatistics</varname> property contains information about the DNSSEC
       validations executed so far. It contains four 64-bit counters: the number of secure, insecure, bogus,
       and indeterminate DNSSEC validations so far. The counters are increased for each validated RRset, and
-      each non-existance proof. The secure counter is increased for each operation that successfully verified
+      each non-existence proof. The secure counter is increased for each operation that successfully verified
       a signed reply, the insecure counter is increased for each operation that successfully verified that an
       unsigned reply is rightfully unsigned. The bogus counter is increased for each operation where the
       validation did not check out and the data is likely to have been tempered with. Finally the
@@ -891,10 +891,5 @@
     </example>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 </refentry>
diff --git a/man/org.freedesktop.systemd1.xml b/man/org.freedesktop.systemd1.xml
index 572d959..bbb6b14 100644
--- a/man/org.freedesktop.systemd1.xml
+++ b/man/org.freedesktop.systemd1.xml
@@ -65,11 +65,19 @@
                             out o unit);
       GetUnitByControlGroup(in  s cgroup,
                             out o unit);
+      GetUnitByPIDFD(in  h pidfd,
+                     out o unit,
+                     out s unit_id,
+                     out ay invocation_id);
       LoadUnit(in  s name,
                out o unit);
       StartUnit(in  s name,
                 in  s mode,
                 out o job);
+      StartUnitWithFlags(in  s name,
+                         in  s mode,
+                         in  t flags,
+                         out o job);
       StartUnitReplace(in  s old_unit,
                        in  s new_unit,
                        in  s mode,
@@ -158,14 +166,25 @@
       Subscribe();
       Unsubscribe();
       Dump(out s output);
+      DumpUnitsMatchingPatterns(in  as patterns,
+                                out s output);
       DumpByFileDescriptor(out h fd);
+      DumpUnitsMatchingPatternsByFileDescriptor(in  as patterns,
+                                                out h fd);
       Reload();
+      @org.freedesktop.DBus.Method.NoReply("true")
       Reexecute();
+      @org.freedesktop.systemd1.Privileged("true")
       Exit();
+      @org.freedesktop.systemd1.Privileged("true")
       Reboot();
+      @org.freedesktop.systemd1.Privileged("true")
       PowerOff();
+      @org.freedesktop.systemd1.Privileged("true")
       Halt();
+      @org.freedesktop.systemd1.Privileged("true")
       KExec();
+      @org.freedesktop.systemd1.Privileged("true")
       SwitchRoot(in  s new_root,
                  in  s init);
       SetEnvironment(in  as assignments);
@@ -194,6 +213,10 @@
       DisableUnitFilesWithFlags(in  as files,
                                 in  t flags,
                                 out a(sss) changes);
+      DisableUnitFilesWithFlagsAndInstallInfo(in  as files,
+                                              in  t flags,
+                                              out b carries_install_info,
+                                              out a(sss) changes);
       ReenableUnitFiles(in  as files,
                         in  b runtime,
                         in  b force,
@@ -326,6 +349,10 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t UnitsLoadFinishTimestampMonotonic = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t UnitsLoadTimestamp = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t UnitsLoadTimestampMonotonic = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t InitRDSecurityStartTimestamp = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t InitRDSecurityStartTimestampMonotonic = ...;
@@ -378,11 +405,23 @@
       readonly s DefaultStandardOutput = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s DefaultStandardError = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s WatchdogDevice = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t WatchdogLastPingTimestamp = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t WatchdogLastPingTimestampMonotonic = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       @org.freedesktop.systemd1.Privileged("true")
       readwrite t RuntimeWatchdogUSec = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       @org.freedesktop.systemd1.Privileged("true")
+      readwrite t RuntimeWatchdogPreUSec = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      @org.freedesktop.systemd1.Privileged("true")
+      readwrite s RuntimeWatchdogPreGovernor = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      @org.freedesktop.systemd1.Privileged("true")
       readwrite t RebootWatchdogUSec = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       @org.freedesktop.systemd1.Privileged("true")
@@ -405,6 +444,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t DefaultTimeoutAbortUSec = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t DefaultDeviceTimeoutUSec = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t DefaultRestartUSec = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t DefaultStartLimitIntervalUSec = ...;
@@ -489,6 +530,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s DefaultOOMPolicy = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly i DefaultOOMScoreAdjust = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s CtrlAltDelBurstAction = '...';
   };
   interface org.freedesktop.DBus.Peer { ... };
@@ -531,10 +574,6 @@
 
     <!--method ListUnitsByNames is not documented!-->
 
-    <!--method Dump is not documented!-->
-
-    <!--method DumpByFileDescriptor is not documented!-->
-
     <!--method ListUnitFilesByPatterns is not documented!-->
 
     <!--method PresetUnitFilesWithMode is not documented!-->
@@ -627,8 +666,18 @@
 
     <!--property DefaultStandardError is not documented!-->
 
+    <!--property WatchdogDevice is not documented!-->
+
+    <!--property WatchdogLastPingTimestamp is not documented!-->
+
+    <!--property WatchdogLastPingTimestampMonotonic is not documented!-->
+
     <!--property RuntimeWatchdogUSec is not documented!-->
 
+    <!--property RuntimeWatchdogPreUSec is not documented!-->
+
+    <!--property RuntimeWatchdogPreGovernor is not documented!-->
+
     <!--property RebootWatchdogUSec is not documented!-->
 
     <!--property KExecWatchdogUSec is not documented!-->
@@ -647,6 +696,8 @@
 
     <!--property DefaultTimeoutAbortUSec is not documented!-->
 
+    <!--property DefaultDeviceTimeoutUSec is not documented!-->
+
     <!--property DefaultRestartUSec is not documented!-->
 
     <!--property DefaultStartLimitIntervalUSec is not documented!-->
@@ -731,6 +782,8 @@
 
     <!--property DefaultOOMPolicy is not documented!-->
 
+    <!--property DefaultOOMScoreAdjust is not documented!-->
+
     <!--property CtrlAltDelBurstAction is not documented!-->
 
     <!--Autogenerated cross-references for systemd.directives, do not edit-->
@@ -747,10 +800,14 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="GetUnitByControlGroup()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="GetUnitByPIDFD()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="LoadUnit()"/>
 
     <variablelist class="dbus-method" generated="True" extra-ref="StartUnit()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="StartUnitWithFlags()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="StartUnitReplace()"/>
 
     <variablelist class="dbus-method" generated="True" extra-ref="StopUnit()"/>
@@ -825,8 +882,12 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="Dump()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="DumpUnitsMatchingPatterns()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="DumpByFileDescriptor()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="DumpUnitsMatchingPatternsByFileDescriptor()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="Reload()"/>
 
     <variablelist class="dbus-method" generated="True" extra-ref="Reexecute()"/>
@@ -865,6 +926,8 @@
 
     <variablelist class="dbus-method" generated="True" extra-ref="DisableUnitFilesWithFlags()"/>
 
+    <variablelist class="dbus-method" generated="True" extra-ref="DisableUnitFilesWithFlagsAndInstallInfo()"/>
+
     <variablelist class="dbus-method" generated="True" extra-ref="ReenableUnitFiles()"/>
 
     <variablelist class="dbus-method" generated="True" extra-ref="LinkUnitFiles()"/>
@@ -969,6 +1032,10 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="UnitsLoadFinishTimestampMonotonic"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="UnitsLoadTimestamp"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="UnitsLoadTimestampMonotonic"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="InitRDSecurityStartTimestamp"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="InitRDSecurityStartTimestampMonotonic"/>
@@ -1021,8 +1088,18 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="DefaultStandardError"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="WatchdogDevice"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="WatchdogLastPingTimestamp"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="WatchdogLastPingTimestampMonotonic"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeWatchdogUSec"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RuntimeWatchdogPreUSec"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="RuntimeWatchdogPreGovernor"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="RebootWatchdogUSec"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="KExecWatchdogUSec"/>
@@ -1043,6 +1120,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="DefaultTimeoutAbortUSec"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="DefaultDeviceTimeoutUSec"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="DefaultRestartUSec"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="DefaultStartLimitIntervalUSec"/>
@@ -1127,6 +1206,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="DefaultOOMPolicy"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="DefaultOOMScoreAdjust"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="CtrlAltDelBurstAction"/>
 
     <!--End of Autogenerated section-->
@@ -1144,7 +1225,11 @@
       will fail.</para>
 
       <para><function>GetUnitByPID()</function> may be used to get the unit object path of the unit a process
-      ID belongs to. It takes a UNIX PID and returns the object path. The PID must refer to an existing system process.</para>
+      ID belongs to. It takes a UNIX PID and returns the object path. The PID must refer to an existing system process.
+      <function>GetUnitByPIDFD()</function> may be used to query with a Linux PIDFD (see:
+      <citerefentry><refentrytitle>pidfd_open</refentrytitle><manvolnum>2</manvolnum></citerefentry>) instead
+      of a PID, which is safer as UNIX PIDs can be recycled. The latter method returns the unit id and the
+      invocation id together with the unit object path.</para>
 
       <para><function>LoadUnit()</function> is similar to <function>GetUnit()</function> but will load the
       unit from disk if possible.</para>
@@ -1164,6 +1249,10 @@
       <para><function>StartUnitReplace()</function> is similar to <function>StartUnit()</function> but
       replaces a job that is queued for one unit by a job for another unit.</para>
 
+      <para><function>StartUnitWithFlags()</function> is similar to <function>StartUnit()</function> but
+      allows the caller to pass an extra <varname>flags</varname> parameter, which does not support any
+      flags for now, and is reserved for future extensions.</para>
+
       <para><function>StopUnit()</function> is similar to <function>StartUnit()</function> but stops the
       specified unit rather than starting it. Note that the <literal>isolate</literal> mode is invalid for this
       method.</para>
@@ -1177,7 +1266,7 @@
       "ReloadOrRestart" flavors attempt a reload if the unit supports it and use a restart otherwise.</para>
 
       <para><function>EnqueueMarkedJobs()</function> creates reload/restart jobs for units which have been
-      appropriately marked, see <varname>Marks</varname> property above. This is equivalent to calling
+      appropriately marked, see <varname>Markers</varname> property above. This is equivalent to calling
       <function>TryRestartUnit()</function> or <function>ReloadOrTryRestartUnit()</function> for the marked
       units.</para>
 
@@ -1267,6 +1356,25 @@
       all clients which previously asked for <function>Subscribe()</function> either closed their connection
       to the bus or invoked <function>Unsubscribe()</function>.</para>
 
+      <para><function>Dump()</function> returns a text dump of the internal service manager state. This is a
+      privileged, low-level debugging interface only. The returned string is supposed to be readable
+      exclusively by developers, and not programmatically. There's no interface stability on the returned
+      string guaranteed, and new fields may be added any time, and old fields removed. The general structure
+      may be rearranged drastically between releases. This is exposed by
+      <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+      <command>dump</command> command. Similarly, <function>DumpUnitsMatchingPatterns()</function> returns
+      the internal state of units whose names match the glob expressions specified in the
+      <varname>patterns</varname> argument. The
+      <function>DumpByFileDescriptor()</function>/<function>DumpUnitsMatchingPatternsByFileDescriptor()</function>
+      methods are identical to <function>Dump()</function>/<function>DumpUnitsMatchingPatterns()</function>,
+      but return data serialized into a file descriptor (the client should read the text data from it until
+      hitting EOF). Given the size limits on D-Bus messages and the possibly large size of the returned
+      strings,
+      <function>DumpByFileDescriptor()</function>/<function>DumpUnitsMatchingPatternsByFileDescriptor()</function>
+      are usually the preferred interface, since it ensures the data can be passed reliably from the service
+      manager to the client. Note though that they cannot work when communicating with the service manager
+      remotely, as file descriptors are strictly local to a system.</para>
+
       <para><function>Reload()</function> may be invoked to reload all unit files.</para>
 
       <para><function>Reexecute()</function> may be invoked to reexecute the main manager process. It will
@@ -1287,11 +1395,11 @@
       for more information.</para>
 
       <para><function>SwitchRoot()</function> may be used to transition to a new root directory. This is
-      intended to be used by initial RAM disks. The method takes two arguments: the new root directory (which
-      needs to be specified) and an init binary path (which may be left empty, in which case it is
-      automatically searched for). The state of the system manager will be serialized before the
-      transition. After the transition, the manager binary on the main system is invoked and replaces the old
-      PID 1. All state will then be deserialized.</para>
+      intended to be used in the initrd, and also to transition from the host system into a shutdown initrd.
+      The method takes two arguments: the new root directory (which needs to be specified) and an init binary
+      path (which may be left empty, in which case it is automatically searched for). The state of the system
+      manager will be serialized before the transition. After the transition, the manager binary on the main
+      system is invoked and replaces the old PID 1. All state will then be deserialized.</para>
 
       <para><function>SetEnvironment()</function> may be used to alter the environment block that is passed
       to all spawned processes. It takes a string array of environment variable assignments. Any previously set
@@ -1325,7 +1433,7 @@
       enabled for runtime only (true, <filename>/run/</filename>), or persistently (false,
       <filename>/etc/</filename>). The second one controls whether symlinks pointing to other units shall be
       replaced if necessary. This method returns one boolean and an array of the changes made. The boolean
-      signals whether the unit files contained any enablement information (i.e. an [Install]) section. The
+      signals whether the unit files contained any enablement information (i.e. an [Install] section). The
       changes array consists of structures with three strings: the type of the change (one of
       <literal>symlink</literal> or <literal>unlink</literal>), the file name of the symlink and the
       destination of the symlink. Note that most of the following calls return a changes list in the same
@@ -1348,6 +1456,11 @@
       replaced if necessary. <varname>SD_SYSTEMD_UNIT_PORTABLE</varname> will add or remove the symlinks in
       <filename>/etc/systemd/system.attached</filename> and <filename>/run/systemd/system.attached</filename>.</para>
 
+      <para><function>DisableUnitFilesWithFlagsAndInstallInfo()</function> is similar to
+      <function>DisableUnitFilesWithFlags()</function> and takes the same arguments, but returns
+      a boolean to indicate whether the unit files contain any enablement information, like
+      <function>EnableUnitFiles()</function>. The changes made are still returned in an array.</para>
+
       <para>Similarly, <function>ReenableUnitFiles()</function> applies the changes to one or more units that
       would result from disabling and enabling the unit quickly one after the other in an atomic
       fashion. This is useful to apply updated [Install] information contained in unit files.</para>
@@ -1389,7 +1502,7 @@
       <varname>properties</varname> contains properties of the unit, specified like in
       <function>SetUnitProperties()</function>. <varname>aux</varname> is currently unused and should be
       passed as an empty array. See the
-      <ulink url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New Control Group
+      <ulink url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface">New Control Group
       Interface</ulink> for more information how to make use of this functionality for resource control
       purposes.</para>
     </refsect2>
@@ -1449,21 +1562,96 @@
       it is not part of the public API.</para>
 
       <para><varname>Features</varname> encodes the features that have been enabled and disabled for this
-      build. Enabled options are prefixed with +, disabled options with -.</para>
+      build. Enabled options are prefixed with <literal>+</literal>, disabled options with
+      <literal>-</literal>.</para>
 
-      <para><varname>Tainted</varname> encodes a couple of taint flags as a colon-separated list. When
-      systemd detects it is running on a system with certain problems, it will set an appropriate taint
-      flag. Taints may be used to lower the chance of bogus bug reports. The following taints are currently
-      known: <literal>split-usr</literal>, <literal>mtab-not-symlink</literal>,
-      <literal>cgroups-missing</literal>, <literal>local-hwclock</literal>. <literal>split-usr</literal> is
-      set if <filename>/usr/</filename> is not pre-mounted when systemd is first invoked. See
-      <ulink url="http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken">
-      Booting Without /usr is Broken</ulink>
-      for details why this is bad. <literal>mtab-not-symlink</literal> indicates that
-      <filename>/etc/mtab</filename> is not a symlink to <filename>/proc/self/mounts</filename> as
-      required. <literal>cgroups-missing</literal> indicates that control groups have not been enabled in the
-      kernel. <literal>local-hwclock</literal> indicates that the local RTC is configured to be in local time
-      rather than UTC.</para>
+      <para><varname>Tainted</varname> encodes taint flags as a colon-separated list. When systemd detects it
+      is running on a system with a certain problem, it will set an appropriate taint flag. Taints may be
+      used to lower the chance of bogus bug reports. The following taints are currently known:</para>
+
+      <variablelist>
+        <varlistentry>
+          <term><literal>split-usr</literal></term>
+
+          <listitem><para><filename>/usr/</filename> was not available when systemd was first invoked. It
+          must either be part of the root file system, or it must be mounted before
+          <command>systemd</command> is invoked. See
+          <ulink url="https://www.freedesktop.org/wiki/Software/systemd/separate-usr-is-broken">
+          Booting Without /usr is Broken</ulink> for details why this is bad.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>unmerged-usr</literal></term>
+
+          <listitem><para><filename>/bin</filename>, <filename>/sbin</filename> and
+          <filename>/lib*</filename> are not symlinks to their counterparts under <filename>/usr/</filename>.
+          For more information on this issue consult
+          <ulink url="https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge">
+            The Case for the /usr Merge
+          </ulink>.</para></listitem>
+
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>cgroups-missing</literal></term>
+
+          <listitem><para>Support for cgroups is unavailable.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>cgroupsv1</literal></term>
+
+          <listitem><para>The system is using the old cgroup hierarchy.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>local-hwclock</literal></term>
+
+          <listitem><para>The local hardware clock (RTC) is configured to be in local time rather than
+          UTC.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>support-ended</literal></term>
+
+          <listitem><para>The system is running past the end of support declared by the vendor. See the
+          description of <varname>SUPPORT_END=</varname> in
+          <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          </para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>old-kernel</literal></term>
+
+          <listitem><para>The system is running a kernel version that is older than the minimum supported by
+          this version of systemd.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>var-run-bad</literal></term>
+
+          <listitem><para><filename>/run/</filename> does not exist or <filename>/var/run</filename> is not a
+          symlink to <filename>/run/</filename>.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>overflowuid-not-65534</literal></term>
+          <term><literal>overflowgid-not-65534</literal></term>
+
+          <listitem><para>The kernel overflow UID or GID have a value other than 65534.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><literal>short-uid-range</literal></term>
+          <term><literal>short-gid-range</literal></term>
+
+          <listitem><para>The UID or GID range assigned to the running systemd instance covers less than
+          0…65534.</para></listitem>
+        </varlistentry>
+
+        <!-- mtab-not-symlink was removed in b492ce8a22d4527c1372b2d3fbd580627d70c917 -->
+      </variablelist>
 
       <para><varname>FirmwareTimestamp</varname>, <varname>FirmwareTimestampMonotonic</varname>,
       <varname>LoaderTimestamp</varname>, <varname>LoaderTimestampMonotonic</varname>,
@@ -1482,6 +1670,11 @@
       boot loader or initrd implementation. In these cases the respective pairs of timestamps are both 0,
       indicating that no data is available.</para>
 
+      <para><varname>UnitsLoadTimestamp</varname> and <varname>UnitsLoadTimestampMonotonic</varname> encode
+      <constant>CLOCK_REALTIME</constant> and <constant>CLOCK_MONOTONIC</constant> microseconds timestamps
+      (as described above). The timestamps are taken every time when the manager starts loading unit files.
+      </para>
+
       <para>Similarly, the <varname>SecurityStartTimestamp</varname>,
       <varname>GeneratorsStartTimestamp</varname> and <varname>LoadUnitTimestamp</varname> (as well as their
       monotonic and stop counterparts) expose performance data for uploading the security policies to the
@@ -1525,6 +1718,11 @@
       that the root path is encoded as the empty string here (not as <literal>/</literal>!), so that it can be
       appended to <filename>/sys/fs/cgroup/systemd</filename> easily. This value will be set to the empty
       string for the host instance and some other string for container instances.</para>
+
+      <para><varname>AccessSELinuxContext</varname> contains the SELinux context that is used to control
+      access to the unit. It's read from the unit file when it is loaded and cached until the service manager
+      is reloaded. This property contains an empty string if SELinux is not used or if no label could be read
+      (for example because the unit is not backed by a file on disk).</para>
     </refsect2>
 
     <refsect2>
@@ -1606,6 +1804,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as PartOf = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as Upholds = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as RequiredBy = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as RequisiteOf = ['...', ...];
@@ -1614,6 +1814,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as BoundBy = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as UpheldBy = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as ConsistsOf = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Conflicts = ['...', ...];
@@ -1624,14 +1826,14 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as After = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
-      readonly as OnFailure = ['...', ...];
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
-      readonly as OnFailureOf = ['...', ...];
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as OnSuccess = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as OnSuccessOf = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as OnFailure = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as OnFailureOf = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Triggers = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as TriggeredBy = ['...', ...];
@@ -1654,6 +1856,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s Description = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s AccessSELinuxContext = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s LoadState = '...';
       readonly s ActiveState = '...';
       readonly s FreezerState = '...';
@@ -1756,6 +1960,7 @@
       readonly s CollectMode = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly as Refs = ['...', ...];
+      readonly a(ss) ActivationDetails = [...];
   };
   interface org.freedesktop.DBus.Peer { ... };
   interface org.freedesktop.DBus.Introspectable { ... };
@@ -1777,16 +1982,20 @@
 
     <!--property PartOf is not documented!-->
 
+    <!--property Upholds is not documented!-->
+
     <!--property RequisiteOf is not documented!-->
 
-    <!--property ConsistsOf is not documented!-->
+    <!--property UpheldBy is not documented!-->
 
-    <!--property OnFailureOf is not documented!-->
+    <!--property ConsistsOf is not documented!-->
 
     <!--property OnSuccess is not documented!-->
 
     <!--property OnSuccessOf is not documented!-->
 
+    <!--property OnFailureOf is not documented!-->
+
     <!--property ReloadPropagatedFrom is not documented!-->
 
     <!--property PropagatesStopTo is not documented!-->
@@ -1905,6 +2114,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="PartOf"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="Upholds"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="RequiredBy"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RequisiteOf"/>
@@ -1913,6 +2124,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="BoundBy"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="UpheldBy"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="ConsistsOf"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="Conflicts"/>
@@ -1923,14 +2136,14 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="After"/>
 
-    <variablelist class="dbus-property" generated="True" extra-ref="OnFailure"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="OnFailureOf"/>
-
     <variablelist class="dbus-property" generated="True" extra-ref="OnSuccess"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="OnSuccessOf"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="OnFailure"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="OnFailureOf"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Triggers"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="TriggeredBy"/>
@@ -1953,6 +2166,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="Description"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="AccessSELinuxContext"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LoadState"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="ActiveState"/>
@@ -2077,6 +2292,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="Refs"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ActivationDetails"/>
+
     <!--End of Autogenerated section-->
 
     <refsect2>
@@ -2225,7 +2442,7 @@
       <literal>needs-reload</literal>. Package scripts may use the first to mark units for later restart when
       a new version of the package is installed. Configuration management scripts may use the second to mark
       units for a later reload when the configuration is adjusted. Those flags are not set by the manager,
-      except to unset as appropriate when when the unit is stopped, restarted, or reloaded.</para>
+      except to unset as appropriate when the unit is stopped, restarted, or reloaded.</para>
 
       <para><varname>JobTimeoutUSec</varname> maps directly to the corresponding configuration setting in the
       unit file.</para>
@@ -2253,7 +2470,19 @@
       will be a pair of empty strings.</para>
 
       <para><varname>Transient</varname> contains a boolean that indicates whether the unit was created as a
-      transient unit (i.e. via <function>CreateTransientUnit()</function> on the manager object).</para>
+      transient unit (i.e. via <function>StartTransientUnit()</function> on the manager object).</para>
+
+      <para><varname>ActivationDetails</varname> contains a list of string pairs, key and value, that
+      describe the event that caused the unit to be activated, if any. The key describes the information
+      (e.g.: <varname>trigger_unit</varname>, with value <varname>foo.service</varname>). This is only filled
+      in if the unit was triggered by a <varname>Path</varname> or <varname>Timer</varname> unit, and it is
+      only provided in a best effort fashion: it is not guaranteed to be set, and it is not guaranteed to be
+      the only trigger. It is only guaranteed to be a valid trigger that caused the activation job to be
+      enqueued and complete successfully. The key value pairs correspond (in lowercase) to the environment
+      variables described in the <literal>Environment Variables Set on Triggered Units</literal> section in
+      <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+      Note that new key value pair may be added at any time in future versions. Existing entries will not be
+      removed.</para>
     </refsect2>
 
     <refsect2>
@@ -2294,6 +2523,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s Type = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s ExitType = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s Restart = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s PIDFile = '...';
@@ -2313,6 +2544,8 @@
       readonly s TimeoutStopFailureMode = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t RuntimeMaxUSec = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t RuntimeRandomizedExtraUSec = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t WatchdogUSec = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
@@ -2353,6 +2586,10 @@
       readonly u NRestarts = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s OOMPolicy = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) OpenFile = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly i ReloadSignal = ...;
       readonly t ExecMainStartTimestamp = ...;
       readonly t ExecMainStartTimestampMonotonic = ...;
       readonly t ExecMainExitTimestamp = ...;
@@ -2393,6 +2630,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s ControlGroup = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t ControlGroupId = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryCurrent = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryAvailable = ...;
@@ -2441,8 +2680,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedCPUs = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedCPUs = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedMemoryNodes = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedMemoryNodes = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b IOAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t IOWeight = ...;
@@ -2489,6 +2732,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemorySwapMax = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t MemoryZSwapMax = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLimit = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s DevicePolicy = '...';
@@ -2524,6 +2769,8 @@
       readonly a(iiqq) SocketBindAllow = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly a(iiqq) SocketBindDeny = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly (bas) RestrictNetworkInterfaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Environment = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -2617,6 +2864,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s RootVerity = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as ExtensionDirectories = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(sba(ss)) ExtensionImages = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssba(ss)) MountImages = [...];
@@ -2671,6 +2920,10 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly b TTYVTDisallocate = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly q TTYRows = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly q TTYColumns = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly i SyslogPriority = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s SyslogIdentifier = '...';
@@ -2689,6 +2942,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly aay LogExtraFields = [[...], ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(bs) LogFilterPatterns = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s LogNamespace = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly i SecureBits = ...;
@@ -2707,8 +2962,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(say) SetCredential = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(say) SetCredentialEncrypted = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ss) LoadCredential = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(ss) LoadCredentialEncrypted = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as SupplementaryGroups = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s PAMName = '...';
@@ -2723,6 +2982,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as NoExecPaths = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as ExecSearchPath = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t MountFlags = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly b PrivateTmp = ...;
@@ -2781,20 +3042,28 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly (bas) RestrictAddressFamilies = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) RuntimeDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s RuntimeDirectoryPreserve = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u RuntimeDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as RuntimeDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) StateDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u StateDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as StateDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) CacheDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u CacheDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as CacheDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) LogsDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u LogsDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as LogsDirectory = ['...', ...];
@@ -2813,6 +3082,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t RestrictNamespaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly (bas) RestrictFileSystems = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssbt) BindPaths = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssbt) BindReadOnlyPaths = [...];
@@ -2860,6 +3131,8 @@
 
     <!--property Type is not documented!-->
 
+    <!--property ExitType is not documented!-->
+
     <!--property Restart is not documented!-->
 
     <!--property PIDFile is not documented!-->
@@ -2874,6 +3147,8 @@
 
     <!--property RuntimeMaxUSec is not documented!-->
 
+    <!--property RuntimeRandomizedExtraUSec is not documented!-->
+
     <!--property WatchdogUSec is not documented!-->
 
     <!--property RootDirectoryStartOnly is not documented!-->
@@ -2912,6 +3187,10 @@
 
     <!--property OOMPolicy is not documented!-->
 
+    <!--property OpenFile is not documented!-->
+
+    <!--property ReloadSignal is not documented!-->
+
     <!--property ExecCondition is not documented!-->
 
     <!--property ExecConditionEx is not documented!-->
@@ -2932,6 +3211,8 @@
 
     <!--property Slice is not documented!-->
 
+    <!--property ControlGroupId is not documented!-->
+
     <!--property MemoryCurrent is not documented!-->
 
     <!--property CPUUsageNSec is not documented!-->
@@ -2978,8 +3259,12 @@
 
     <!--property AllowedCPUs is not documented!-->
 
+    <!--property StartupAllowedCPUs is not documented!-->
+
     <!--property AllowedMemoryNodes is not documented!-->
 
+    <!--property StartupAllowedMemoryNodes is not documented!-->
+
     <!--property IOAccounting is not documented!-->
 
     <!--property IOWeight is not documented!-->
@@ -3026,6 +3311,8 @@
 
     <!--property MemorySwapMax is not documented!-->
 
+    <!--property MemoryZSwapMax is not documented!-->
+
     <!--property MemoryLimit is not documented!-->
 
     <!--property DevicePolicy is not documented!-->
@@ -3062,6 +3349,8 @@
 
     <!--property SocketBindDeny is not documented!-->
 
+    <!--property RestrictNetworkInterfaces is not documented!-->
+
     <!--property EnvironmentFiles is not documented!-->
 
     <!--property PassEnvironment is not documented!-->
@@ -3188,6 +3477,10 @@
 
     <!--property TTYVTDisallocate is not documented!-->
 
+    <!--property TTYRows is not documented!-->
+
+    <!--property TTYColumns is not documented!-->
+
     <!--property SyslogPriority is not documented!-->
 
     <!--property SyslogIdentifier is not documented!-->
@@ -3206,6 +3499,8 @@
 
     <!--property LogExtraFields is not documented!-->
 
+    <!--property LogFilterPatterns is not documented!-->
+
     <!--property LogNamespace is not documented!-->
 
     <!--property AmbientCapabilities is not documented!-->
@@ -3220,8 +3515,12 @@
 
     <!--property SetCredential is not documented!-->
 
+    <!--property SetCredentialEncrypted is not documented!-->
+
     <!--property LoadCredential is not documented!-->
 
+    <!--property LoadCredentialEncrypted is not documented!-->
+
     <!--property SupplementaryGroups is not documented!-->
 
     <!--property PAMName is not documented!-->
@@ -3236,6 +3535,8 @@
 
     <!--property NoExecPaths is not documented!-->
 
+    <!--property ExecSearchPath is not documented!-->
+
     <!--property PrivateTmp is not documented!-->
 
     <!--property PrivateDevices is not documented!-->
@@ -3296,20 +3597,12 @@
 
     <!--property RuntimeDirectoryMode is not documented!-->
 
-    <!--property RuntimeDirectory is not documented!-->
-
     <!--property StateDirectoryMode is not documented!-->
 
-    <!--property StateDirectory is not documented!-->
-
     <!--property CacheDirectoryMode is not documented!-->
 
-    <!--property CacheDirectory is not documented!-->
-
     <!--property LogsDirectoryMode is not documented!-->
 
-    <!--property LogsDirectory is not documented!-->
-
     <!--property ConfigurationDirectoryMode is not documented!-->
 
     <!--property ConfigurationDirectory is not documented!-->
@@ -3324,6 +3617,8 @@
 
     <!--property RestrictNamespaces is not documented!-->
 
+    <!--property RestrictFileSystems is not documented!-->
+
     <!--property BindPaths is not documented!-->
 
     <!--property BindReadOnlyPaths is not documented!-->
@@ -3378,6 +3673,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="Type"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExitType"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Restart"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PIDFile"/>
@@ -3398,6 +3695,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeMaxUSec"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RuntimeRandomizedExtraUSec"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="WatchdogUSec"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="WatchdogTimestamp"/>
@@ -3448,6 +3747,10 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="OOMPolicy"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="OpenFile"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="ReloadSignal"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="ExecMainStartTimestamp"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="ExecMainStartTimestampMonotonic"/>
@@ -3494,6 +3797,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="ControlGroup"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ControlGroupId"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryCurrent"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAvailable"/>
@@ -3542,8 +3847,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedCPUs"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedCPUs"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedMemoryNodes"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedMemoryNodes"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="IOAccounting"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="IOWeight"/>
@@ -3590,6 +3899,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemorySwapMax"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="MemoryZSwapMax"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLimit"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="DevicePolicy"/>
@@ -3626,6 +3937,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SocketBindDeny"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictNetworkInterfaces"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Environment"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="EnvironmentFiles"/>
@@ -3718,6 +4031,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RootVerity"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExtensionDirectories"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="ExtensionImages"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MountImages"/>
@@ -3772,6 +4087,10 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="TTYVTDisallocate"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="TTYRows"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="TTYColumns"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="SyslogPriority"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="SyslogIdentifier"/>
@@ -3790,6 +4109,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="LogExtraFields"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LogFilterPatterns"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LogNamespace"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="SecureBits"/>
@@ -3808,8 +4129,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SetCredential"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="SetCredentialEncrypted"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LoadCredential"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LoadCredentialEncrypted"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="SupplementaryGroups"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PAMName"/>
@@ -3824,6 +4149,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="NoExecPaths"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExecSearchPath"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MountFlags"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PrivateTmp"/>
@@ -3882,20 +4209,28 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RestrictAddressFamilies"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectoryPreserve"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StateDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="StateDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="StateDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectory"/>
@@ -3914,6 +4249,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RestrictNamespaces"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictFileSystems"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="BindPaths"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="BindReadOnlyPaths"/>
@@ -4056,12 +4393,20 @@
       <varname>RootHashSignature</varname>
       <varname>MountImages</varname>
       <varname>ExtensionImages</varname>
+      <varname>ExtensionDirectories</varname>
       see systemd.exec(5) for their meaning.</para>
 
       <para><varname>MemoryAvailable</varname> indicates how much unused memory is available to the unit before
       the <literal>MemoryMax</literal> or <literal>MemoryHigh</literal> (whichever is lower) limit set by the cgroup
       memory controller is reached. It will take into consideration limits on all parent slices, other than the
       limits set on the unit itself.</para>
+
+      <para><varname>RuntimeDirectorySymlink</varname>, <varname>StateDirectorySymlink</varname>,
+      <varname>CacheDirectorySymlink</varname> and  <varname>LogsDirectorySymlink</varname> respectively
+      implement the destination parameter of the unit files settings <varname>RuntimeDirectory</varname>,
+      <varname>StateDirectory</varname>, <varname>CacheDirectory</varname> and <varname>LogsDirectory</varname>,
+      which will create a symlink of the given name to the respective directory. The messages take an unused
+      <varname>flags</varname> parameter, reserved for future backward-compatible changes.</para>
     </refsect2>
   </refsect1>
 
@@ -4193,6 +4538,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s ControlGroup = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t ControlGroupId = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryCurrent = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryAvailable = ...;
@@ -4241,8 +4588,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedCPUs = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedCPUs = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedMemoryNodes = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedMemoryNodes = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b IOAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t IOWeight = ...;
@@ -4289,6 +4640,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemorySwapMax = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t MemoryZSwapMax = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLimit = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s DevicePolicy = '...';
@@ -4324,6 +4677,8 @@
       readonly a(iiqq) SocketBindAllow = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly a(iiqq) SocketBindDeny = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly (bas) RestrictNetworkInterfaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Environment = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -4417,6 +4772,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s RootVerity = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as ExtensionDirectories = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(sba(ss)) ExtensionImages = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssba(ss)) MountImages = [...];
@@ -4471,6 +4828,10 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly b TTYVTDisallocate = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly q TTYRows = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly q TTYColumns = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly i SyslogPriority = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s SyslogIdentifier = '...';
@@ -4489,6 +4850,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly aay LogExtraFields = [[...], ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(bs) LogFilterPatterns = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s LogNamespace = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly i SecureBits = ...;
@@ -4507,8 +4870,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(say) SetCredential = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(say) SetCredentialEncrypted = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ss) LoadCredential = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(ss) LoadCredentialEncrypted = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as SupplementaryGroups = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s PAMName = '...';
@@ -4523,6 +4890,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as NoExecPaths = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as ExecSearchPath = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t MountFlags = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly b PrivateTmp = ...;
@@ -4581,20 +4950,28 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly (bas) RestrictAddressFamilies = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) RuntimeDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s RuntimeDirectoryPreserve = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u RuntimeDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as RuntimeDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) StateDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u StateDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as StateDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) CacheDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u CacheDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as CacheDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) LogsDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u LogsDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as LogsDirectory = ['...', ...];
@@ -4613,6 +4990,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t RestrictNamespaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly (bas) RestrictFileSystems = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssbt) BindPaths = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssbt) BindReadOnlyPaths = [...];
@@ -4760,6 +5139,8 @@
 
     <!--property Slice is not documented!-->
 
+    <!--property ControlGroupId is not documented!-->
+
     <!--property MemoryCurrent is not documented!-->
 
     <!--property CPUUsageNSec is not documented!-->
@@ -4806,8 +5187,12 @@
 
     <!--property AllowedCPUs is not documented!-->
 
+    <!--property StartupAllowedCPUs is not documented!-->
+
     <!--property AllowedMemoryNodes is not documented!-->
 
+    <!--property StartupAllowedMemoryNodes is not documented!-->
+
     <!--property IOAccounting is not documented!-->
 
     <!--property IOWeight is not documented!-->
@@ -4854,6 +5239,8 @@
 
     <!--property MemorySwapMax is not documented!-->
 
+    <!--property MemoryZSwapMax is not documented!-->
+
     <!--property MemoryLimit is not documented!-->
 
     <!--property DevicePolicy is not documented!-->
@@ -4890,6 +5277,8 @@
 
     <!--property SocketBindDeny is not documented!-->
 
+    <!--property RestrictNetworkInterfaces is not documented!-->
+
     <!--property EnvironmentFiles is not documented!-->
 
     <!--property PassEnvironment is not documented!-->
@@ -5016,6 +5405,10 @@
 
     <!--property TTYVTDisallocate is not documented!-->
 
+    <!--property TTYRows is not documented!-->
+
+    <!--property TTYColumns is not documented!-->
+
     <!--property SyslogPriority is not documented!-->
 
     <!--property SyslogIdentifier is not documented!-->
@@ -5034,6 +5427,8 @@
 
     <!--property LogExtraFields is not documented!-->
 
+    <!--property LogFilterPatterns is not documented!-->
+
     <!--property LogNamespace is not documented!-->
 
     <!--property AmbientCapabilities is not documented!-->
@@ -5048,8 +5443,12 @@
 
     <!--property SetCredential is not documented!-->
 
+    <!--property SetCredentialEncrypted is not documented!-->
+
     <!--property LoadCredential is not documented!-->
 
+    <!--property LoadCredentialEncrypted is not documented!-->
+
     <!--property SupplementaryGroups is not documented!-->
 
     <!--property PAMName is not documented!-->
@@ -5064,6 +5463,8 @@
 
     <!--property NoExecPaths is not documented!-->
 
+    <!--property ExecSearchPath is not documented!-->
+
     <!--property PrivateTmp is not documented!-->
 
     <!--property PrivateDevices is not documented!-->
@@ -5124,20 +5525,12 @@
 
     <!--property RuntimeDirectoryMode is not documented!-->
 
-    <!--property RuntimeDirectory is not documented!-->
-
     <!--property StateDirectoryMode is not documented!-->
 
-    <!--property StateDirectory is not documented!-->
-
     <!--property CacheDirectoryMode is not documented!-->
 
-    <!--property CacheDirectory is not documented!-->
-
     <!--property LogsDirectoryMode is not documented!-->
 
-    <!--property LogsDirectory is not documented!-->
-
     <!--property ConfigurationDirectoryMode is not documented!-->
 
     <!--property ConfigurationDirectory is not documented!-->
@@ -5152,6 +5545,8 @@
 
     <!--property RestrictNamespaces is not documented!-->
 
+    <!--property RestrictFileSystems is not documented!-->
+
     <!--property BindPaths is not documented!-->
 
     <!--property BindReadOnlyPaths is not documented!-->
@@ -5320,6 +5715,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="ControlGroup"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ControlGroupId"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryCurrent"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAvailable"/>
@@ -5368,8 +5765,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedCPUs"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedCPUs"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedMemoryNodes"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedMemoryNodes"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="IOAccounting"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="IOWeight"/>
@@ -5416,6 +5817,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemorySwapMax"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="MemoryZSwapMax"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLimit"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="DevicePolicy"/>
@@ -5452,6 +5855,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SocketBindDeny"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictNetworkInterfaces"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Environment"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="EnvironmentFiles"/>
@@ -5544,6 +5949,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RootVerity"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExtensionDirectories"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="ExtensionImages"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MountImages"/>
@@ -5598,6 +6005,10 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="TTYVTDisallocate"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="TTYRows"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="TTYColumns"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="SyslogPriority"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="SyslogIdentifier"/>
@@ -5616,6 +6027,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="LogExtraFields"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LogFilterPatterns"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LogNamespace"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="SecureBits"/>
@@ -5634,8 +6047,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SetCredential"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="SetCredentialEncrypted"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LoadCredential"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LoadCredentialEncrypted"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="SupplementaryGroups"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PAMName"/>
@@ -5650,6 +6067,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="NoExecPaths"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExecSearchPath"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MountFlags"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PrivateTmp"/>
@@ -5708,20 +6127,28 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RestrictAddressFamilies"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectoryPreserve"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StateDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="StateDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="StateDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectory"/>
@@ -5740,6 +6167,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RestrictNamespaces"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictFileSystems"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="BindPaths"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="BindReadOnlyPaths"/>
@@ -5916,6 +6345,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s ControlGroup = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t ControlGroupId = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryCurrent = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryAvailable = ...;
@@ -5964,8 +6395,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedCPUs = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedCPUs = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedMemoryNodes = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedMemoryNodes = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b IOAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t IOWeight = ...;
@@ -6012,6 +6447,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemorySwapMax = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t MemoryZSwapMax = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLimit = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s DevicePolicy = '...';
@@ -6047,6 +6484,8 @@
       readonly a(iiqq) SocketBindAllow = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly a(iiqq) SocketBindDeny = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly (bas) RestrictNetworkInterfaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Environment = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -6140,6 +6579,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s RootVerity = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as ExtensionDirectories = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(sba(ss)) ExtensionImages = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssba(ss)) MountImages = [...];
@@ -6194,6 +6635,10 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly b TTYVTDisallocate = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly q TTYRows = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly q TTYColumns = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly i SyslogPriority = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s SyslogIdentifier = '...';
@@ -6212,6 +6657,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly aay LogExtraFields = [[...], ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(bs) LogFilterPatterns = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s LogNamespace = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly i SecureBits = ...;
@@ -6230,8 +6677,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(say) SetCredential = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(say) SetCredentialEncrypted = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ss) LoadCredential = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(ss) LoadCredentialEncrypted = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as SupplementaryGroups = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s PAMName = '...';
@@ -6246,6 +6697,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as NoExecPaths = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as ExecSearchPath = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t MountFlags = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly b PrivateTmp = ...;
@@ -6304,20 +6757,28 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly (bas) RestrictAddressFamilies = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) RuntimeDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s RuntimeDirectoryPreserve = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u RuntimeDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as RuntimeDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) StateDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u StateDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as StateDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) CacheDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u CacheDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as CacheDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) LogsDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u LogsDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as LogsDirectory = ['...', ...];
@@ -6336,6 +6797,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t RestrictNamespaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly (bas) RestrictFileSystems = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssbt) BindPaths = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssbt) BindReadOnlyPaths = [...];
@@ -6411,6 +6874,8 @@
 
     <!--property Slice is not documented!-->
 
+    <!--property ControlGroupId is not documented!-->
+
     <!--property MemoryCurrent is not documented!-->
 
     <!--property CPUUsageNSec is not documented!-->
@@ -6457,8 +6922,12 @@
 
     <!--property AllowedCPUs is not documented!-->
 
+    <!--property StartupAllowedCPUs is not documented!-->
+
     <!--property AllowedMemoryNodes is not documented!-->
 
+    <!--property StartupAllowedMemoryNodes is not documented!-->
+
     <!--property IOAccounting is not documented!-->
 
     <!--property IOWeight is not documented!-->
@@ -6505,6 +6974,8 @@
 
     <!--property MemorySwapMax is not documented!-->
 
+    <!--property MemoryZSwapMax is not documented!-->
+
     <!--property MemoryLimit is not documented!-->
 
     <!--property DevicePolicy is not documented!-->
@@ -6541,6 +7012,8 @@
 
     <!--property SocketBindDeny is not documented!-->
 
+    <!--property RestrictNetworkInterfaces is not documented!-->
+
     <!--property EnvironmentFiles is not documented!-->
 
     <!--property PassEnvironment is not documented!-->
@@ -6667,6 +7140,10 @@
 
     <!--property TTYVTDisallocate is not documented!-->
 
+    <!--property TTYRows is not documented!-->
+
+    <!--property TTYColumns is not documented!-->
+
     <!--property SyslogPriority is not documented!-->
 
     <!--property SyslogIdentifier is not documented!-->
@@ -6685,6 +7162,8 @@
 
     <!--property LogExtraFields is not documented!-->
 
+    <!--property LogFilterPatterns is not documented!-->
+
     <!--property LogNamespace is not documented!-->
 
     <!--property AmbientCapabilities is not documented!-->
@@ -6699,8 +7178,12 @@
 
     <!--property SetCredential is not documented!-->
 
+    <!--property SetCredentialEncrypted is not documented!-->
+
     <!--property LoadCredential is not documented!-->
 
+    <!--property LoadCredentialEncrypted is not documented!-->
+
     <!--property SupplementaryGroups is not documented!-->
 
     <!--property PAMName is not documented!-->
@@ -6715,6 +7198,8 @@
 
     <!--property NoExecPaths is not documented!-->
 
+    <!--property ExecSearchPath is not documented!-->
+
     <!--property PrivateTmp is not documented!-->
 
     <!--property PrivateDevices is not documented!-->
@@ -6775,20 +7260,12 @@
 
     <!--property RuntimeDirectoryMode is not documented!-->
 
-    <!--property RuntimeDirectory is not documented!-->
-
     <!--property StateDirectoryMode is not documented!-->
 
-    <!--property StateDirectory is not documented!-->
-
     <!--property CacheDirectoryMode is not documented!-->
 
-    <!--property CacheDirectory is not documented!-->
-
     <!--property LogsDirectoryMode is not documented!-->
 
-    <!--property LogsDirectory is not documented!-->
-
     <!--property ConfigurationDirectoryMode is not documented!-->
 
     <!--property ConfigurationDirectory is not documented!-->
@@ -6803,6 +7280,8 @@
 
     <!--property RestrictNamespaces is not documented!-->
 
+    <!--property RestrictFileSystems is not documented!-->
+
     <!--property BindPaths is not documented!-->
 
     <!--property BindReadOnlyPaths is not documented!-->
@@ -6889,6 +7368,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="ControlGroup"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ControlGroupId"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryCurrent"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAvailable"/>
@@ -6937,8 +7418,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedCPUs"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedCPUs"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedMemoryNodes"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedMemoryNodes"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="IOAccounting"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="IOWeight"/>
@@ -6985,6 +7470,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemorySwapMax"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="MemoryZSwapMax"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLimit"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="DevicePolicy"/>
@@ -7021,6 +7508,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SocketBindDeny"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictNetworkInterfaces"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Environment"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="EnvironmentFiles"/>
@@ -7113,6 +7602,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RootVerity"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExtensionDirectories"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="ExtensionImages"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MountImages"/>
@@ -7167,6 +7658,10 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="TTYVTDisallocate"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="TTYRows"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="TTYColumns"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="SyslogPriority"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="SyslogIdentifier"/>
@@ -7185,6 +7680,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="LogExtraFields"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LogFilterPatterns"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LogNamespace"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="SecureBits"/>
@@ -7203,8 +7700,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SetCredential"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="SetCredentialEncrypted"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LoadCredential"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LoadCredentialEncrypted"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="SupplementaryGroups"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PAMName"/>
@@ -7219,6 +7720,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="NoExecPaths"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExecSearchPath"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MountFlags"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PrivateTmp"/>
@@ -7277,20 +7780,28 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RestrictAddressFamilies"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectoryPreserve"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StateDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="StateDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="StateDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectory"/>
@@ -7309,6 +7820,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RestrictNamespaces"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictFileSystems"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="BindPaths"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="BindReadOnlyPaths"/>
@@ -7380,6 +7893,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s Where = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s ExtraOptions = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u DirectoryMode = ...;
       readonly s Result = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -7394,6 +7909,8 @@
 
     <!--property Where is not documented!-->
 
+    <!--property ExtraOptions is not documented!-->
+
     <!--property DirectoryMode is not documented!-->
 
     <!--property TimeoutIdleUSec is not documented!-->
@@ -7410,6 +7927,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="Where"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExtraOptions"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="DirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="Result"/>
@@ -7606,6 +8125,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s ControlGroup = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t ControlGroupId = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryCurrent = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryAvailable = ...;
@@ -7654,8 +8175,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedCPUs = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedCPUs = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedMemoryNodes = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedMemoryNodes = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b IOAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t IOWeight = ...;
@@ -7702,6 +8227,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemorySwapMax = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t MemoryZSwapMax = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLimit = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s DevicePolicy = '...';
@@ -7737,6 +8264,8 @@
       readonly a(iiqq) SocketBindAllow = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly a(iiqq) SocketBindDeny = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly (bas) RestrictNetworkInterfaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Environment = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -7830,6 +8359,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s RootVerity = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as ExtensionDirectories = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(sba(ss)) ExtensionImages = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssba(ss)) MountImages = [...];
@@ -7884,6 +8415,10 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly b TTYVTDisallocate = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly q TTYRows = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly q TTYColumns = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly i SyslogPriority = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s SyslogIdentifier = '...';
@@ -7902,6 +8437,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly aay LogExtraFields = [[...], ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(bs) LogFilterPatterns = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s LogNamespace = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly i SecureBits = ...;
@@ -7920,8 +8457,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(say) SetCredential = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(say) SetCredentialEncrypted = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ss) LoadCredential = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(ss) LoadCredentialEncrypted = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as SupplementaryGroups = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s PAMName = '...';
@@ -7936,6 +8477,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as NoExecPaths = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as ExecSearchPath = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t MountFlags = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly b PrivateTmp = ...;
@@ -7994,20 +8537,28 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly (bas) RestrictAddressFamilies = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) RuntimeDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s RuntimeDirectoryPreserve = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u RuntimeDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as RuntimeDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) StateDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u StateDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as StateDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) CacheDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u CacheDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as CacheDirectory = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(sst) LogsDirectorySymlink = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u LogsDirectoryMode = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as LogsDirectory = ['...', ...];
@@ -8026,6 +8577,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t RestrictNamespaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly (bas) RestrictFileSystems = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssbt) BindPaths = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly a(ssbt) BindReadOnlyPaths = [...];
@@ -8087,6 +8640,8 @@
 
     <!--property Slice is not documented!-->
 
+    <!--property ControlGroupId is not documented!-->
+
     <!--property MemoryCurrent is not documented!-->
 
     <!--property CPUUsageNSec is not documented!-->
@@ -8133,8 +8688,12 @@
 
     <!--property AllowedCPUs is not documented!-->
 
+    <!--property StartupAllowedCPUs is not documented!-->
+
     <!--property AllowedMemoryNodes is not documented!-->
 
+    <!--property StartupAllowedMemoryNodes is not documented!-->
+
     <!--property IOAccounting is not documented!-->
 
     <!--property IOWeight is not documented!-->
@@ -8181,6 +8740,8 @@
 
     <!--property MemorySwapMax is not documented!-->
 
+    <!--property MemoryZSwapMax is not documented!-->
+
     <!--property MemoryLimit is not documented!-->
 
     <!--property DevicePolicy is not documented!-->
@@ -8217,6 +8778,8 @@
 
     <!--property SocketBindDeny is not documented!-->
 
+    <!--property RestrictNetworkInterfaces is not documented!-->
+
     <!--property EnvironmentFiles is not documented!-->
 
     <!--property PassEnvironment is not documented!-->
@@ -8343,6 +8906,10 @@
 
     <!--property TTYVTDisallocate is not documented!-->
 
+    <!--property TTYRows is not documented!-->
+
+    <!--property TTYColumns is not documented!-->
+
     <!--property SyslogPriority is not documented!-->
 
     <!--property SyslogIdentifier is not documented!-->
@@ -8361,6 +8928,8 @@
 
     <!--property LogExtraFields is not documented!-->
 
+    <!--property LogFilterPatterns is not documented!-->
+
     <!--property LogNamespace is not documented!-->
 
     <!--property AmbientCapabilities is not documented!-->
@@ -8375,8 +8944,12 @@
 
     <!--property SetCredential is not documented!-->
 
+    <!--property SetCredentialEncrypted is not documented!-->
+
     <!--property LoadCredential is not documented!-->
 
+    <!--property LoadCredentialEncrypted is not documented!-->
+
     <!--property SupplementaryGroups is not documented!-->
 
     <!--property PAMName is not documented!-->
@@ -8391,6 +8964,8 @@
 
     <!--property NoExecPaths is not documented!-->
 
+    <!--property ExecSearchPath is not documented!-->
+
     <!--property PrivateTmp is not documented!-->
 
     <!--property PrivateDevices is not documented!-->
@@ -8451,20 +9026,12 @@
 
     <!--property RuntimeDirectoryMode is not documented!-->
 
-    <!--property RuntimeDirectory is not documented!-->
-
     <!--property StateDirectoryMode is not documented!-->
 
-    <!--property StateDirectory is not documented!-->
-
     <!--property CacheDirectoryMode is not documented!-->
 
-    <!--property CacheDirectory is not documented!-->
-
     <!--property LogsDirectoryMode is not documented!-->
 
-    <!--property LogsDirectory is not documented!-->
-
     <!--property ConfigurationDirectoryMode is not documented!-->
 
     <!--property ConfigurationDirectory is not documented!-->
@@ -8479,6 +9046,8 @@
 
     <!--property RestrictNamespaces is not documented!-->
 
+    <!--property RestrictFileSystems is not documented!-->
+
     <!--property BindPaths is not documented!-->
 
     <!--property BindReadOnlyPaths is not documented!-->
@@ -8551,6 +9120,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="ControlGroup"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ControlGroupId"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryCurrent"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAvailable"/>
@@ -8599,8 +9170,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedCPUs"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedCPUs"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedMemoryNodes"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedMemoryNodes"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="IOAccounting"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="IOWeight"/>
@@ -8647,6 +9222,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemorySwapMax"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="MemoryZSwapMax"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLimit"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="DevicePolicy"/>
@@ -8683,6 +9260,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SocketBindDeny"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictNetworkInterfaces"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Environment"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="EnvironmentFiles"/>
@@ -8775,6 +9354,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RootVerity"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExtensionDirectories"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="ExtensionImages"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MountImages"/>
@@ -8829,6 +9410,10 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="TTYVTDisallocate"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="TTYRows"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="TTYColumns"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="SyslogPriority"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="SyslogIdentifier"/>
@@ -8847,6 +9432,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="LogExtraFields"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LogFilterPatterns"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LogNamespace"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="SecureBits"/>
@@ -8865,8 +9452,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SetCredential"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="SetCredentialEncrypted"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LoadCredential"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LoadCredentialEncrypted"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="SupplementaryGroups"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PAMName"/>
@@ -8881,6 +9472,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="NoExecPaths"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ExecSearchPath"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MountFlags"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="PrivateTmp"/>
@@ -8939,20 +9532,28 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RestrictAddressFamilies"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectoryPreserve"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StateDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="StateDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="StateDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="CacheDirectory"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectorySymlink"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectoryMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="LogsDirectory"/>
@@ -8971,6 +9572,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RestrictNamespaces"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictFileSystems"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="BindPaths"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="BindReadOnlyPaths"/>
@@ -9048,6 +9651,10 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly u DirectoryMode = ...;
       readonly s Result = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t TriggerLimitIntervalUSec = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly u TriggerLimitBurst = ...;
   };
   interface org.freedesktop.DBus.Peer { ... };
   interface org.freedesktop.DBus.Introspectable { ... };
@@ -9060,6 +9667,10 @@
 
     <!--property DirectoryMode is not documented!-->
 
+    <!--property TriggerLimitIntervalUSec is not documented!-->
+
+    <!--property TriggerLimitBurst is not documented!-->
+
     <!--Autogenerated cross-references for systemd.directives, do not edit-->
 
     <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.systemd1.Unit"/>
@@ -9080,6 +9691,10 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="Result"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="TriggerLimitIntervalUSec"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="TriggerLimitBurst"/>
+
     <!--End of Autogenerated section-->
 
     <refsect2>
@@ -9121,6 +9736,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s ControlGroup = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t ControlGroupId = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryCurrent = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryAvailable = ...;
@@ -9169,8 +9786,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedCPUs = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedCPUs = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedMemoryNodes = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedMemoryNodes = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b IOAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t IOWeight = ...;
@@ -9217,6 +9838,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemorySwapMax = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t MemoryZSwapMax = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLimit = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s DevicePolicy = '...';
@@ -9252,6 +9875,8 @@
       readonly a(iiqq) SocketBindAllow = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly a(iiqq) SocketBindDeny = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly (bas) RestrictNetworkInterfaces = ...;
   };
   interface org.freedesktop.DBus.Peer { ... };
   interface org.freedesktop.DBus.Introspectable { ... };
@@ -9266,6 +9891,8 @@
 
     <!--property Slice is not documented!-->
 
+    <!--property ControlGroupId is not documented!-->
+
     <!--property MemoryCurrent is not documented!-->
 
     <!--property CPUUsageNSec is not documented!-->
@@ -9312,8 +9939,12 @@
 
     <!--property AllowedCPUs is not documented!-->
 
+    <!--property StartupAllowedCPUs is not documented!-->
+
     <!--property AllowedMemoryNodes is not documented!-->
 
+    <!--property StartupAllowedMemoryNodes is not documented!-->
+
     <!--property IOAccounting is not documented!-->
 
     <!--property IOWeight is not documented!-->
@@ -9360,6 +9991,8 @@
 
     <!--property MemorySwapMax is not documented!-->
 
+    <!--property MemoryZSwapMax is not documented!-->
+
     <!--property MemoryLimit is not documented!-->
 
     <!--property DevicePolicy is not documented!-->
@@ -9396,6 +10029,8 @@
 
     <!--property SocketBindDeny is not documented!-->
 
+    <!--property RestrictNetworkInterfaces is not documented!-->
+
     <!--Autogenerated cross-references for systemd.directives, do not edit-->
 
     <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.systemd1.Unit"/>
@@ -9414,6 +10049,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="ControlGroup"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ControlGroupId"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryCurrent"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAvailable"/>
@@ -9462,8 +10099,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedCPUs"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedCPUs"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedMemoryNodes"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedMemoryNodes"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="IOAccounting"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="IOWeight"/>
@@ -9510,6 +10151,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemorySwapMax"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="MemoryZSwapMax"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLimit"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="DevicePolicy"/>
@@ -9546,6 +10189,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SocketBindDeny"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictNetworkInterfaces"/>
+
     <!--End of Autogenerated section-->
 
     <refsect2>
@@ -9579,11 +10224,17 @@
       readonly s Result = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly t RuntimeMaxUSec = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly t RuntimeRandomizedExtraUSec = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly s OOMPolicy = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s Slice = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s ControlGroup = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t ControlGroupId = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryCurrent = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryAvailable = ...;
@@ -9632,8 +10283,12 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedCPUs = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedCPUs = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly ay AllowedMemoryNodes = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly ay StartupAllowedMemoryNodes = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b IOAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t IOWeight = ...;
@@ -9680,6 +10335,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemorySwapMax = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly t MemoryZSwapMax = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLimit = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly s DevicePolicy = '...';
@@ -9715,6 +10372,8 @@
       readonly a(iiqq) SocketBindAllow = [...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly a(iiqq) SocketBindDeny = [...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly (bas) RestrictNetworkInterfaces = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s KillMode = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -9743,8 +10402,14 @@
 
     <!--property RuntimeMaxUSec is not documented!-->
 
+    <!--property RuntimeRandomizedExtraUSec is not documented!-->
+
+    <!--property OOMPolicy is not documented!-->
+
     <!--property Slice is not documented!-->
 
+    <!--property ControlGroupId is not documented!-->
+
     <!--property MemoryCurrent is not documented!-->
 
     <!--property CPUUsageNSec is not documented!-->
@@ -9791,8 +10456,12 @@
 
     <!--property AllowedCPUs is not documented!-->
 
+    <!--property StartupAllowedCPUs is not documented!-->
+
     <!--property AllowedMemoryNodes is not documented!-->
 
+    <!--property StartupAllowedMemoryNodes is not documented!-->
+
     <!--property IOAccounting is not documented!-->
 
     <!--property IOWeight is not documented!-->
@@ -9839,6 +10508,8 @@
 
     <!--property MemorySwapMax is not documented!-->
 
+    <!--property MemoryZSwapMax is not documented!-->
+
     <!--property MemoryLimit is not documented!-->
 
     <!--property DevicePolicy is not documented!-->
@@ -9875,6 +10546,8 @@
 
     <!--property SocketBindDeny is not documented!-->
 
+    <!--property RestrictNetworkInterfaces is not documented!-->
+
     <!--property KillMode is not documented!-->
 
     <!--property KillSignal is not documented!-->
@@ -9915,10 +10588,16 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="RuntimeMaxUSec"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RuntimeRandomizedExtraUSec"/>
+
+    <variablelist class="dbus-property" generated="True" extra-ref="OOMPolicy"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Slice"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="ControlGroup"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ControlGroupId"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryCurrent"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAvailable"/>
@@ -9967,8 +10646,12 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedCPUs"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedCPUs"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="AllowedMemoryNodes"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="StartupAllowedMemoryNodes"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="IOAccounting"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="IOWeight"/>
@@ -10015,6 +10698,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemorySwapMax"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="MemoryZSwapMax"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLimit"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="DevicePolicy"/>
@@ -10051,6 +10736,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="SocketBindDeny"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="RestrictNetworkInterfaces"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="KillMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="KillSignal"/>
@@ -10118,6 +10805,8 @@
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s JobType = '...';
       readonly s State = '...';
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly a(ss) ActivationDetails = [...];
   };
   interface org.freedesktop.DBus.Peer { ... };
   interface org.freedesktop.DBus.Introspectable { ... };
@@ -10149,6 +10838,8 @@
 
     <variablelist class="dbus-property" generated="True" extra-ref="State"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ActivationDetails"/>
+
     <!--End of Autogenerated section-->
 
     <refsect2>
@@ -10177,6 +10868,9 @@
       <para><varname>State</varname> refers to the job's state and is one of <literal>waiting</literal> and
       <literal>running</literal>. The former indicates that a job is currently queued but has not begun to
       execute yet. The latter indicates that a job is currently being executed.</para>
+
+      <para><varname>ActivationDetails</varname> has the same content as the property of the same name under
+      the <varname>org.freedesktop.systemd1.Unit</varname> interface.</para>
     </refsect2>
   </refsect1>
 
@@ -10215,10 +10909,5 @@
     </example>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 </refentry>
diff --git a/man/org.freedesktop.timedate1.xml b/man/org.freedesktop.timedate1.xml
index 52efa68..54f4018 100644
--- a/man/org.freedesktop.timedate1.xml
+++ b/man/org.freedesktop.timedate1.xml
@@ -190,12 +190,7 @@
     </example>
   </refsect1>
 
-  <refsect1>
-    <title>Versioning</title>
-
-    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
-    the usual interface versioning guidelines</ulink>.</para>
-  </refsect1>
+  <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/>
 
   <refsect1>
     <title>See also</title>
diff --git a/man/os-release.xml b/man/os-release.xml
index adec3e7..113ef9f 100644
--- a/man/os-release.xml
+++ b/man/os-release.xml
@@ -17,6 +17,7 @@
   <refnamediv>
     <refname>os-release</refname>
     <refname>initrd-release</refname>
+    <refname>extension-release</refname>
     <refpurpose>Operating system identification</refpurpose>
   </refnamediv>
 
@@ -24,6 +25,7 @@
     <para><filename>/etc/os-release</filename></para>
     <para><filename>/usr/lib/os-release</filename></para>
     <para><filename>/etc/initrd-release</filename></para>
+    <para><filename>/usr/lib/extension-release.d/extension-release.<replaceable>IMAGE</replaceable></filename></para>
   </refsynopsisdiv>
 
   <refsect1>
@@ -33,22 +35,17 @@
     <filename>/usr/lib/os-release</filename> files contain operating
     system identification data.</para>
 
-    <para>The basic file format of <filename>os-release</filename> is
-    a newline-separated list of environment-like shell-compatible
-    variable assignments. It is possible to source the configuration
-    from shell scripts, however, beyond mere variable assignments, no
-    shell features are supported (this means variable expansion is
-    explicitly not supported), allowing applications to read the file
-    without implementing a shell compatible execution engine. Variable
-    assignment values must be enclosed in double or single quotes if
-    they include spaces, semicolons or other special characters
-    outside of A–Z, a–z, 0–9. Shell special characters ("$", quotes,
-    backslash, backtick) must be escaped with backslashes, following
-    shell style. All strings should be in UTF-8 format, and
-    non-printable characters should not be used. It is not supported
-    to concatenate multiple individually quoted strings. Lines
-    beginning with "#" shall be ignored as comments. Blank lines are
-    permitted and ignored.</para>
+    <para>The format of <filename>os-release</filename> is a newline-separated list of
+    environment-like shell-compatible variable assignments. It is possible to source the configuration from
+    Bourne shell scripts, however, beyond mere variable assignments, no shell features are supported (this
+    means variable expansion is explicitly not supported), allowing applications to read the file without
+    implementing a shell compatible execution engine. Variable assignment values must be enclosed in double
+    or single quotes if they include spaces, semicolons or other special characters outside of A–Z, a–z,
+    0–9. (Assignments that do not include these special characters may be enclosed in quotes too, but this is
+    optional.) Shell special characters ("$", quotes, backslash, backtick) must be escaped with backslashes,
+    following shell style. All strings should be in UTF-8 encoding, and non-printable characters should not
+    be used. Concatenation of multiple individually quoted strings is not supported. Lines beginning with "#"
+    are treated as comments. Blank lines are permitted and ignored.</para>
 
     <para>The file <filename>/etc/os-release</filename> takes
     precedence over <filename>/usr/lib/os-release</filename>.
@@ -78,6 +75,10 @@
     from earliest boot on, and hence must be located on the root file
     system.</para>
 
+    <para><filename>os-release</filename> must not contain repeating keys. Nevertheless, readers should pick
+    the entries later in the file in case of repeats, similarly to how a shell sourcing the file would. A
+    reader may warn about repeating entries.</para>
+
     <para>For a longer rationale for <filename>os-release</filename>
     please refer to the <ulink
     url="http://0pointer.de/blog/projects/os-release">Announcement of <filename>/etc/os-release</filename></ulink>.</para>
@@ -86,13 +87,41 @@
       <title><filename>/etc/initrd-release</filename></title>
 
       <para>In the <ulink
-      url="https://www.kernel.org/doc/html/latest/admin-guide/initrd.html">initrd</ulink>,
+      url="https://docs.kernel.org/admin-guide/initrd.html">initrd</ulink>,
       <filename>/etc/initrd-release</filename> plays the same role as <filename>os-release</filename> in the
       main system. Additionally, the presence of that file means that the system is in the initrd phase.
       <filename>/etc/os-release</filename> should be symlinked to <filename>/etc/initrd-release</filename>
       (or vice versa), so programs that only look for <filename>/etc/os-release</filename> (as described
-      above) work correctly. The rest of this document that talks about <filename>os-release</filename>
-      should be understood to apply to <filename>initrd-release</filename> too.</para>
+      above) work correctly.</para>
+
+      <para>The rest of this document that talks about <filename>os-release</filename> should be understood
+      to apply to <filename>initrd-release</filename> too.</para>
+    </refsect2>
+
+    <refsect2>
+      <title><filename>/usr/lib/extension-release.d/extension-release.<replaceable>IMAGE</replaceable></filename></title>
+
+      <para><filename>/usr/lib/extension-release.d/extension-release.<replaceable>IMAGE</replaceable></filename>
+      plays the same role for extension images as <filename>os-release</filename> for the main system, and
+      follows the syntax and rules as described in the <ulink
+      url="https://systemd.io/PORTABLE_SERVICES">Portable Services Documentation</ulink>. The purpose of this
+      file is to identify the extension and to allow the operating system to verify that the extension image
+      matches the base OS. This is typically implemented by checking that the <varname>ID=</varname> options
+      match, and either <varname>SYSEXT_LEVEL=</varname> exists and matches too, or if it is not present,
+      <varname>VERSION_ID=</varname> exists and matches. This ensures ABI/API compatibility between the
+      layers and prevents merging of an incompatible image in an overlay.</para>
+
+      <para>In the <filename>extension-release.<replaceable>IMAGE</replaceable></filename> filename, the
+      <replaceable>IMAGE</replaceable> part must exactly match the file name of the containing image with the
+      suffix removed. In case it is not possible to guarantee that an image file name is stable and doesn't
+      change between the build and the deployment phases, it is possible to relax this check: if exactly one
+      file whose name matches <literal><filename>extension-release.*</filename></literal> is present in this
+      directory, and the file is tagged with a <varname>user.extension-release.strict</varname>
+      <citerefentry project='man-pages'><refentrytitle>xattr</refentrytitle><manvolnum>7</manvolnum></citerefentry> set to the
+      string <literal>0</literal>, it will be used instead.</para>
+
+      <para>The rest of this document that talks about <filename>os-release</filename> should be understood
+      to apply to <filename>extension-release</filename> too.</para>
     </refsect2>
   </refsect1>
 
@@ -123,7 +152,8 @@
           <listitem><para>A lower-case string (no spaces or other characters outside of 0–9, a–z, ".", "_"
           and "-") identifying the operating system, excluding any version information and suitable for
           processing by scripts or usage in generated filenames. If not set, a default of
-          <literal>ID=linux</literal> may be used.</para>
+          <literal>ID=linux</literal> may be used. Note that even though this string may not include
+          characters that require shell quoting, quoting may nevertheless be used.</para>
 
           <para>Examples: <literal>ID=fedora</literal>, <literal>ID=debian</literal>.</para></listitem>
         </varlistentry>
@@ -321,10 +351,23 @@
         </varlistentry>
 
         <varlistentry>
+          <term><varname>SUPPORT_END=</varname></term>
+
+          <listitem><para>The date at which support for this version of the OS ends. (What exactly "lack of
+          support" means varies between vendors, but generally users should assume that updates, including
+          security fixes, will not be provided.) The value is a date in the ISO 8601 format
+          <literal>YYYY-MM-DD</literal>, and specifies the first day on which support <emphasis>is
+          not</emphasis> provided.</para>
+
+          <para>For example, <literal>SUPPORT_END=2001-01-01</literal> means that the system was supported
+          until the end of the last day of the previous millennium.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
           <term><varname>LOGO=</varname></term>
 
           <listitem><para>A string, specifying the name of an icon as defined by <ulink
-          url="http://standards.freedesktop.org/icon-theme-spec/latest">freedesktop.org Icon Theme
+          url="https://standards.freedesktop.org/icon-theme-spec/latest">freedesktop.org Icon Theme
           Specification</ulink>. This can be used by graphical applications to display an operating system's
           or distributor's logo. This field is optional and may not necessarily be implemented on all
           systems.</para>
@@ -369,17 +412,52 @@
         </varlistentry>
 
         <varlistentry>
+          <term><varname>ARCHITECTURE=</varname></term>
+          <listitem><para>A string that specifies which CPU architecture the userspace binaries require.
+          The architecture identifiers are the same as for <varname>ConditionArchitecture=</varname>
+          described in <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          The field is optional and should only be used when just single architecture is supported.
+          It may provide redundant information when used in a GPT partition with a GUID type that already
+          encodes the architecture. If this is not the case, the architecture should be specified in
+          e.g., an extension image, to prevent an incompatible host from loading it.
+          </para></listitem>
+        </varlistentry>
+
+        <varlistentry>
           <term><varname>SYSEXT_LEVEL=</varname></term>
 
           <listitem><para>A lower-case string (mostly numeric, no spaces or other characters outside of 0–9,
           a–z, ".", "_" and "-") identifying the operating system extensions support level, to indicate which
-          extension images are supported. See
+          extension images are supported. See <filename>/usr/lib/extension-release.d/extension-release.<replaceable>IMAGE</replaceable></filename>,
+          <ulink url="https://docs.kernel.org/admin-guide/initrd.html">initrd</ulink> and
           <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry>)
           for more information.</para>
 
           <para>Examples: <literal>SYSEXT_LEVEL=2</literal>, <literal>SYSEXT_LEVEL=15.14</literal>.
           </para></listitem>
         </varlistentry>
+
+        <varlistentry>
+          <term><varname>SYSEXT_SCOPE=</varname></term>
+          <listitem><para>Takes a space-separated list of one or more of the strings
+          <literal>system</literal>, <literal>initrd</literal> and <literal>portable</literal>. This field is
+          only supported in <filename>extension-release.d/</filename> files and indicates what environments
+          the system extension is applicable to: i.e. to regular systems, to initrds, or to portable service
+          images. If unspecified, <literal>SYSEXT_SCOPE=system portable</literal> is implied, i.e. any system
+          extension without this field is applicable to regular systems and to portable service environments,
+          but not to initrd environments.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><varname>PORTABLE_PREFIXES=</varname></term>
+          <listitem><para>Takes a space-separated list of one or more valid prefix match strings for the
+          <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services Documentation</ulink> logic.
+          This field serves two purposes: it is informational, identifying portable service images as such
+          (and thus allowing them to be distinguished from other OS images, such as bootable system images).
+          It is also used when a portable service image is attached: the specified or implied portable
+          service prefix is checked against the list specified here, to enforce restrictions how images may
+          be attached to a system.</para></listitem>
+        </varlistentry>
       </variablelist>
     </refsect2>
 
@@ -437,15 +515,22 @@
     </example>
 
     <example>
+      <title><filename>extension-release</filename> file for an extension for Fedora Workstation 32</title>
+
+      <programlisting>ID=fedora
+VERSION_ID=32</programlisting>
+    </example>
+
+    <example>
       <title>Reading <filename>os-release</filename> in
-      <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry></title>
+      <citerefentry project='man-pages'><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry></title>
 
       <programlisting><xi:include href="check-os-release.sh" parse="text" /></programlisting>
     </example>
 
     <example>
       <title>Reading <filename>os-release</filename> in
-      <citerefentry><refentrytitle>python</refentrytitle><manvolnum>1</manvolnum></citerefentry> (versions &gt;= 3.10)</title>
+      <citerefentry project='die-net'><refentrytitle>python</refentrytitle><manvolnum>1</manvolnum></citerefentry> (versions &gt;= 3.10)</title>
 
       <programlisting><xi:include href="check-os-release-simple.py" parse="text" /></programlisting>
 
@@ -456,7 +541,7 @@
 
     <example>
       <title>Reading <filename>os-release</filename> in
-      <citerefentry><refentrytitle>python</refentrytitle><manvolnum>1</manvolnum></citerefentry> (any version)</title>
+      <citerefentry project='die-net'><refentrytitle>python</refentrytitle><manvolnum>1</manvolnum></citerefentry> (any version)</title>
 
       <programlisting><xi:include href="check-os-release.py" parse="text" /></programlisting>
 
diff --git a/man/pam_systemd.xml b/man/pam_systemd.xml
index 5e3761a..60b8577 100644
--- a/man/pam_systemd.xml
+++ b/man/pam_systemd.xml
@@ -115,7 +115,7 @@
         indicate the session desktop used, where this applies and if this information is available. For example:
         <literal>GNOME</literal>, or <literal>KDE</literal>. It is recommended to use the same identifiers and
         capitalization as for <varname>$XDG_CURRENT_DESKTOP</varname>, as defined by the <ulink
-        url="http://standards.freedesktop.org/desktop-entry-spec/latest/">Desktop Entry
+        url="https://standards.freedesktop.org/desktop-entry-spec/latest/">Desktop Entry
         Specification</ulink>. (However, note that the option only takes a single item, and not a colon-separated list
         like <varname>$XDG_CURRENT_DESKTOP</varname>.) See
         <citerefentry><refentrytitle>sd_session_get_desktop</refentrytitle><manvolnum>3</manvolnum></citerefentry> for
@@ -176,7 +176,7 @@
         similar. It is guaranteed that this directory is local and
         offers the greatest possible file system feature set the
         operating system provides. For further details, see the <ulink
-        url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
+        url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
         Base Directory Specification</ulink>. <varname>$XDG_RUNTIME_DIR</varname>
         is not set if the current user is not the original user of the session.</para></listitem>
       </varlistentry>
diff --git a/man/pam_systemd_home.xml b/man/pam_systemd_home.xml
index 906d1c1..9d07aa9 100644
--- a/man/pam_systemd_home.xml
+++ b/man/pam_systemd_home.xml
@@ -17,8 +17,8 @@
 
   <refnamediv>
     <refname>pam_systemd_home</refname>
-    <refpurpose>Automatically mount home directories managed by <filename>systemd-homed.service</filename> on
-    login, and unmount them on logout</refpurpose>
+    <refpurpose>Authenticate users and mount home directories via <filename>systemd-homed.service</filename>
+    </refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
@@ -31,7 +31,11 @@
     <para><command>pam_systemd_home</command> ensures that home directories managed by
     <citerefentry><refentrytitle>systemd-homed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     are automatically activated (mounted) on user login, and are deactivated (unmounted) when the last
-    session of the user ends.</para>
+    session of the user ends. For such users, it also provides authentication (when per-user disk encryption
+    is used, the disk encryption key is derived from the authentication credential supplied at login time),
+    account management (the <ulink url="https://systemd.io/USER_RECORD/">JSON user record</ulink> embedded in
+    the home store contains account details), and implements the updating of the encryption password (which
+    is also used for user authentication).</para>
   </refsect1>
 
   <refsect1>
@@ -93,8 +97,14 @@
   <refsect1>
     <title>Module Types Provided</title>
 
-    <para>The module provides all four management operations: <option>auth</option>, <option>account</option>,
-    <option>session</option>, <option>password</option>.</para>
+    <para>The module implements all four PAM operations: <option>auth</option> (to allow authentication using
+    the encrypted data), <option>account</option> (because users with
+    <filename>systemd-homed.service</filename> user accounts are described in a <ulink
+    url="https://systemd.io/USER_RECORD/">JSON user record</ulink> and may be configured in more detail than
+    in the traditional Linux user database), <option>session</option> (because user sessions must be tracked
+    in order to implement automatic release when the last session of the user is gone),
+    <option>password</option> (to change the encryption password — also used for user authentication —
+    through PAM).</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/path-documents.c b/man/path-documents.c
index 082d6c2..a357dd6 100644
--- a/man/path-documents.c
+++ b/man/path-documents.c
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <sd-path.h>
diff --git a/man/portablectl.xml b/man/portablectl.xml
index d798219..162db76 100644
--- a/man/portablectl.xml
+++ b/man/portablectl.xml
@@ -47,7 +47,8 @@
     <para>Portable service images are an efficient way to bundle multiple related services and other units together,
     and transfer them as a whole between systems. When these images are attached the local system the contained units
     may run in most ways like regular system-provided units, either with full privileges or inside strict sandboxing,
-    depending on the selected configuration.</para>
+    depending on the selected configuration. For more details, see
+    <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services Documentation</ulink>.</para>
 
     <para>Specifically portable service images may be of the following kind:</para>
 
@@ -98,7 +99,7 @@
           indicated unit file name prefix are copied from the image to the host's
           <filename>/etc/systemd/system.attached/</filename> directory (or
           <filename>/run/systemd/system.attached/</filename> — depending whether <option>--runtime</option> is
-          specified, see above), which is included in the built-in unit search path of the system service
+          specified, see below), which is included in the built-in unit search path of the system service
           manager.</para></listitem>
 
           <listitem><para>For unit files of type <filename>.service</filename> a drop-in is added to these copies that
@@ -131,10 +132,10 @@
         logic where the prefix is derived from the image file name.</para>
 
         <para>By default, after the unit files are attached the service manager's configuration is reloaded, except
-        when <option>--no-reload</option> is specified (see above). This ensures that the new units made available to
+        when <option>--no-reload</option> is specified (see below). This ensures that the new units made available to
         the service manager are seen by it.</para>
 
-        <para>If <option>--now</option> and/or <option>--enable</option> are passed, the portable service(s) are
+        <para>If <option>--now</option> and/or <option>--enable</option> are passed, the portable services are
         immediately started (blocking operation unless <option>--no-block</option> is passed) and/or enabled after
         attaching the image.</para>
         </listitem>
@@ -150,7 +151,7 @@
         files. This is a convenience feature to allow all arguments passed as <command>attach</command> also to
         <command>detach</command>.</para></listitem>
 
-        <para>If <option>--now</option> and/or <option>--enable</option> are passed, the portable service(s) are
+        <para>If <option>--now</option> and/or <option>--enable</option> are passed, the portable services are
         immediately stopped (blocking operation) and/or disabled before detaching the image. Prefix(es) are also accepted,
         to be used in case the unit names do not match the image name as described in the <command>attach</command>.</para>
       </varlistentry>
@@ -164,7 +165,7 @@
         character has to match. If the new image doesn't exist, the existing one will not be detached. The parameters
         follow the same syntax as the <command>attach</command> command.</para></listitem>
 
-        <para>If <option>--now</option> and/or <option>--enable</option> are passed, the portable service(s) are
+        <para>If <option>--now</option> and/or <option>--enable</option> are passed, the portable services are
         immediately stopped if removed, started and/or enabled if added, or restarted if updated. Prefixes are also
         accepted, in the same way as described in the <command>attach</command> case.</para>
       </varlistentry>
@@ -359,12 +360,29 @@
         top of <replaceable>IMAGE</replaceable> when attaching/detaching. This argument can be specified
         multiple times, in which case the order in which images are laid down follows the rules specified in
         <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-        for the <varname>ExtensionImages=</varname> directive.</para>
+        for the <varname>ExtensionImages=</varname> directive and for the
+        <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry> tool.
+        The images must contain an <filename>extension-release</filename> file with metadata that matches
+        what is defined in the <filename>os-release</filename> of <replaceable>IMAGE</replaceable>. See:
+        <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+        Images can be block images, btrfs subvolumes or directories. For more information on portable
+        services with extensions, see the <literal>Extension Images</literal> paragraph on
+        <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services Documentation</ulink>.
+        </para>
 
         <para>Note that the same extensions have to be specified, in the same order, when attaching
         and detaching.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--force</option></term>
+
+        <listitem><para>Skip safety checks and attach or detach images (with extensions) without first ensuring
+        that the units are not running, and do not insist that the
+        <filename>extension-release.<replaceable>NAME</replaceable></filename> file in the extension image has
+        to match the image filename.</para></listitem>
+      </varlistentry>
+
       <xi:include href="user-system-options.xml" xpointer="host" />
       <xi:include href="user-system-options.xml" xpointer="machine" />
 
@@ -447,6 +465,7 @@
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>org.freedesktop.portable1</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-portabled.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
diff --git a/man/poweroff.xml b/man/poweroff.xml
new file mode 100644
index 0000000..2841dc7
--- /dev/null
+++ b/man/poweroff.xml
@@ -0,0 +1,158 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="poweroff"
+    xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>poweroff</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>poweroff</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>poweroff</refname>
+    <refname>reboot</refname>
+    <refname>halt</refname>
+    <refpurpose>Power off, reboot, or halt the machine</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>poweroff</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>reboot</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>halt</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><command>poweroff</command>, <command>reboot</command>, and <command>halt</command> may be used to
+    power off, reboot, or halt the machine. All three commands take the same options.</para>
+
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <para>The following options are understood:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>--help</option></term>
+
+        <xi:include href="standard-options.xml" xpointer="help-text" />
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--halt</option></term>
+
+        <listitem><para>Halt the machine, regardless of which one of
+        the three commands is invoked.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-p</option></term>
+        <term><option>--poweroff</option></term>
+
+        <listitem><para>Power off the machine, when either <command>halt</command>
+        or <command>poweroff</command> is invoked. This option is ignored when
+        <command>reboot</command> is invoked.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--reboot</option></term>
+
+        <listitem><para>Reboot the machine, regardless of which one of
+        the three commands is invoked.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-f</option></term>
+        <term><option>--force</option></term>
+
+        <listitem>
+          <para>Force immediate power-off, halt, or reboot. If specified, the command does not contact the
+          init system. In most cases, filesystems are not properly unmounted before shutdown. For example,
+          the command <command>reboot -f</command> is mostly equivalent to
+          <command>systemctl reboot -ff</command>, instead of <command>systemctl reboot -f</command>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-w</option></term>
+        <term><option>--wtmp-only</option></term>
+
+        <listitem><para>Only write wtmp shutdown entry, do not actually power off, reboot, or halt.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-d</option></term>
+        <term><option>--no-wtmp</option></term>
+
+        <listitem><para>Do not write wtmp shutdown entry.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-n</option></term>
+        <term><option>--no-sync</option></term>
+
+        <listitem><para>Don't sync hard disks/storage media before power-off, reboot, or halt.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--no-wall</option></term>
+
+        <listitem><para>Do not send wall message before power-off, reboot, or halt.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Exit status</title>
+
+    <para>On success, 0 is returned, a non-zero failure code otherwise.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para>These commands are implemented in a way that preserves basic compatibility with the original SysV
+    commands. <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    verbs <command>poweroff</command>, <command>reboot</command>, <command>halt</command> provide the same
+    functionality with some additional features.</para>
+
+    <para>Note that on many SysV systems <command>halt</command> used to be synonymous to
+    <command>poweroff</command>, i.e. both commands would equally result in powering the machine off. systemd
+    is more accurate here, and <command>halt</command> results in halting the machine only (leaving power
+    on), and <command>poweroff</command> is required to actually power it off.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>wall</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/print-unit-path.c b/man/print-unit-path.c
index 23b58a2..44c8271 100644
--- a/man/print-unit-path.c
+++ b/man/print-unit-path.c
@@ -1,5 +1,7 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <errno.h>
 #include <stdio.h>
-#include <string.h>
 #include <unistd.h>
 #include <sys/types.h>
 
@@ -19,7 +21,8 @@
 #define MEMBER      "GetUnitByPID"
 
 static int log_error(int error, const char *message) {
-  fprintf(stderr, "%s: %s\n", message, strerror(-error));
+  errno = -error;
+  fprintf(stderr, "%s: %m\n", message);
   return error;
 }
 
diff --git a/man/pstore.conf.xml b/man/pstore.conf.xml
index ef3226c..64e453b 100644
--- a/man/pstore.conf.xml
+++ b/man/pstore.conf.xml
@@ -34,7 +34,7 @@
     <para>This file configures the behavior of
     <citerefentry><refentrytitle>systemd-pstore</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
     a tool for archiving the contents of the persistent storage filesystem,
-    <ulink url="https://www.kernel.org/doc/Documentation/ABI/testing/pstore">pstore</ulink>.
+    <ulink url="https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-fs-pstore">pstore</ulink>.
     </para>
   </refsect1>
 
diff --git a/man/repart.d.xml b/man/repart.d.xml
index dfc0915..0303a7f 100644
--- a/man/repart.d.xml
+++ b/man/repart.d.xml
@@ -1,6 +1,8 @@
 <?xml version='1.0'?>
 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
 <refentry id="repart.d" conditional='ENABLE_REPART'
           xmlns:xi="http://www.w3.org/2001/XInclude">
 
@@ -72,8 +74,17 @@
         <term><varname>Type=</varname></term>
 
         <listitem><para>The GPT partition type UUID to match. This may be a GPT partition type UUID such as
-        <constant>4f68bce3-e8cd-4db1-96e7-fbcaf984b709</constant>, or one of the following special
-        identifiers:</para>
+        <constant>4f68bce3-e8cd-4db1-96e7-fbcaf984b709</constant>, or an identifier.
+        Architecture specific partition types can use one of these architecture identifiers:
+        <constant>alpha</constant>, <constant>arc</constant>, <constant>arm</constant> (32bit),
+        <constant>arm64</constant> (64bit, aka aarch64), <constant>ia64</constant>,
+        <constant>loongarch64</constant>, <constant>mips-le</constant>, <constant>mips64-le</constant>,
+        <constant>parisc</constant>, <constant>ppc</constant>, <constant>ppc64</constant>,
+        <constant>ppc64-le</constant>, <constant>riscv32</constant>, <constant>riscv64</constant>,
+        <constant>s390</constant>, <constant>s390x</constant>, <constant>tilegx</constant>,
+        <constant>x86</constant> (32bit, aka i386) and <constant>x86-64</constant> (64bit, aka amd64).
+
+        The supported identifiers are:</para>
 
         <table>
           <title>GPT partition type identifiers</title>
@@ -141,6 +152,11 @@
               </row>
 
               <row>
+                <entry><constant>root-verity-sig</constant></entry>
+                <entry>Verity signature data for the root file system partition for the local architecture</entry>
+              </row>
+
+              <row>
                 <entry><constant>root-secondary</constant></entry>
                 <entry>Root file system partition of the secondary architecture of the local architecture (usually the matching 32bit architecture for the local 64bit architecture)</entry>
               </row>
@@ -151,73 +167,23 @@
               </row>
 
               <row>
-                <entry><constant>root-x86</constant></entry>
-                <entry>Root file system partition for the x86 (32bit, aka i386) architecture</entry>
+                <entry><constant>root-secondary-verity-sig</constant></entry>
+                <entry>Verity signature data for the root file system partition of the secondary architecture</entry>
               </row>
 
               <row>
-                <entry><constant>root-x86-verity</constant></entry>
-                <entry>Verity data for the x86 (32bit) root file system partition</entry>
+                <entry><constant>root-{arch}</constant></entry>
+                <entry>Root file system partition of the given architecture (such as <constant>root-x86-64</constant> or <constant>root-riscv64</constant>)</entry>
               </row>
 
               <row>
-                <entry><constant>root-x86-64</constant></entry>
-                <entry>Root file system partition for the x86_64 (64bit, aka amd64) architecture</entry>
+                <entry><constant>root-{arch}-verity</constant></entry>
+                <entry>Verity data for the root file system partition of the given architecture</entry>
               </row>
 
               <row>
-                <entry><constant>root-x86-64-verity</constant></entry>
-                <entry>Verity data for the x86_64 (64bit) root file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-arm</constant></entry>
-                <entry>Root file system partition for the ARM (32bit) architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-arm-verity</constant></entry>
-                <entry>Verity data for the ARM (32bit) root file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-arm64</constant></entry>
-                <entry>Root file system partition for the ARM (64bit, aka aarch64) architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-arm64-verity</constant></entry>
-                <entry>Verity data for the ARM (64bit, aka aarch64) root file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-ia64</constant></entry>
-                <entry>Root file system partition for the ia64 architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-ia64-verity</constant></entry>
-                <entry>Verity data for the ia64 root file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-riscv32</constant></entry>
-                <entry>Root file system partition for the RISC-V 32-bit architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-riscv32-verity</constant></entry>
-                <entry>Verity data for the RISC-V 32-bit root file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-riscv64</constant></entry>
-                <entry>Root file system partition for the RISC-V 64-bit architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>root-riscv64-verity</constant></entry>
-                <entry>Verity data for the RISC-V 64-bit root file system partition</entry>
+                <entry><constant>root-{arch}-verity-sig</constant></entry>
+                <entry>Verity signature data for the root file system partition of the given architecture</entry>
               </row>
 
               <row>
@@ -231,6 +197,11 @@
               </row>
 
               <row>
+                <entry><constant>usr-verity-sig</constant></entry>
+                <entry>Verity signature data for the <filename>/usr/</filename> file system partition for the local architecture</entry>
+              </row>
+
+              <row>
                 <entry><constant>usr-secondary</constant></entry>
                 <entry><filename>/usr/</filename> file system partition of the secondary architecture of the local architecture (usually the matching 32bit architecture for the local 64bit architecture)</entry>
               </row>
@@ -241,76 +212,24 @@
               </row>
 
               <row>
-                <entry><constant>usr-x86</constant></entry>
-                <entry><filename>/usr/</filename> file system partition for the x86 (32bit, aka i386) architecture</entry>
+                <entry><constant>usr-secondary-verity-sig</constant></entry>
+                <entry>Verity signature data for the <filename>/usr/</filename> file system partition of the secondary architecture</entry>
               </row>
 
               <row>
-                <entry><constant>usr-x86-verity</constant></entry>
-                <entry>Verity data for the x86 (32bit) <filename>/usr/</filename> file system partition</entry>
+                <entry><constant>usr-{arch}</constant></entry>
+                <entry><filename>/usr/</filename> file system partition of the given architecture</entry>
               </row>
 
               <row>
-                <entry><constant>usr-x86-64</constant></entry>
-                <entry><filename>/usr/</filename> file system partition for the x86_64 (64bit, aka amd64) architecture</entry>
+                <entry><constant>usr-{arch}-verity</constant></entry>
+                <entry>Verity data for the <filename>/usr/</filename> file system partition of the given architecture</entry>
               </row>
 
               <row>
-                <entry><constant>usr-x86-64-verity</constant></entry>
-                <entry>Verity data for the x86_64 (64bit) <filename>/usr/</filename> file system partition</entry>
+                <entry><constant>usr-{arch}-verity-sig</constant></entry>
+                <entry>Verity signature data for the <filename>/usr/</filename> file system partition of the given architecture</entry>
               </row>
-
-              <row>
-                <entry><constant>usr-arm</constant></entry>
-                <entry><filename>/usr/</filename> file system partition for the ARM (32bit) architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-arm-verity</constant></entry>
-                <entry>Verity data for the ARM (32bit) <filename>/usr/</filename> file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-arm64</constant></entry>
-                <entry><filename>/usr/</filename> file system partition for the ARM (64bit, aka aarch64) architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-arm64-verity</constant></entry>
-                <entry>Verity data for the ARM (64bit, aka aarch64) <filename>/usr/</filename> file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-ia64</constant></entry>
-                <entry><filename>/usr/</filename> file system partition for the ia64 architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-ia64-verity</constant></entry>
-                <entry>Verity data for the ia64 <filename>/usr/</filename> file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-riscv32</constant></entry>
-                <entry><filename>/usr/</filename> file system partition for the RISC-V 32-bit architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-riscv32-verity</constant></entry>
-                <entry>Verity data for the RISC-V 32-bit <filename>/usr/</filename> file system partition</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-riscv64</constant></entry>
-                <entry><filename>/usr/</filename> file system partition for the RISC-V 64-bit architecture</entry>
-              </row>
-
-              <row>
-                <entry><constant>usr-riscv64-verity</constant></entry>
-                <entry>Verity data for the RISC-V 64-bit <filename>/usr/</filename> file system partition</entry>
-              </row>
-
-
             </tbody>
           </tgroup>
         </table>
@@ -318,7 +237,7 @@
         <para>This setting defaults to <constant>linux-generic</constant>.</para>
 
         <para>Most of the partition type UUIDs listed above are defined in the <ulink
-        url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+        url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
         Specification</ulink>.</para></listitem>
       </varlistentry>
 
@@ -338,8 +257,8 @@
         <listitem><para>The UUID to assign to the partition if none is assigned yet. Note that this
         setting is not used for matching. It is also not used when a UUID is already set for an existing
         partition. It is thus only used when a partition is newly created or when an existing one had a
-        all-zero UUID set. If not specified a UUID derived from the partition type is automatically
-        used.</para></listitem>
+        all-zero UUID set. If set to <literal>null</literal>, the UUID is set to all zeroes. If not specified
+        a UUID derived from the partition type is automatically used.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -379,7 +298,7 @@
       <varlistentry>
         <term><varname>PaddingWeight=</varname></term>
 
-        <listitem><para>Similar to <varname>Weight=</varname> but sets a weight for the free space after the
+        <listitem><para>Similar to <varname>Weight=</varname>, but sets a weight for the free space after the
         partition (the "padding"). When distributing available space the weights of all partitions and all
         defined padding is summed, and then each partition and padding gets the fraction defined by its
         weight. Defaults to 0, i.e. by default no padding is applied.</para>
@@ -396,7 +315,7 @@
         …  suffixes (to the base of 1024). If <varname>SizeMinBytes=</varname> is specified the partition is
         created at or grown to at least the specified size. If <varname>SizeMaxBytes=</varname> is specified
         the partition is created at or grown to at most the specified size. The precise size is determined
-        through the weight value value configured with <varname>Weight=</varname>, see above. When
+        through the weight value configured with <varname>Weight=</varname>, see above. When
         <varname>SizeMinBytes=</varname> is set equal to <varname>SizeMaxBytes=</varname> the configured
         weight has no effect as the partition is explicitly sized to the specified fixed value. Note that
         partitions are never created smaller than 4096 bytes, and since partitions are never shrunk the
@@ -464,18 +383,19 @@
         <term><varname>Format=</varname></term>
 
         <listitem><para>Takes a file system name, such as <literal>ext4</literal>, <literal>btrfs</literal>,
-        <literal>xfs</literal> or <literal>vfat</literal>, or the special value <literal>swap</literal>. If
-        specified and the partition is newly created it is formatted with the specified file system (or as
-        swap device). The file system UUID and label are automatically derived from the partition UUID and
-        label. If this option is used, the size allocation algorithm is slightly altered: the partition is
-        created as least as big as required for the minimal file system of the specified type (or 4KiB if the
-        minimal size is not known).</para>
+        <literal>xfs</literal>, <literal>vfat</literal>, <literal>erofs</literal>,
+        <literal>squashfs</literal> or the special value <literal>swap</literal>. If specified and the partition
+        is newly created it is formatted with the specified file system (or as swap device). The file system
+        UUID and label are automatically derived from the partition UUID and label. If this option is used,
+        the size allocation algorithm is slightly altered: the partition is created as least as big as
+        required for the minimal file system of the specified type (or 4KiB if the minimal size is not
+        known).</para>
 
         <para>This option has no effect if the partition already exists.</para>
 
-        <para>Similar to the behaviour of <varname>CopyBlocks=</varname> the file system is formatted before
-        the partition is created, ensuring that the partition only ever exists with a fully initialized
-        file system.</para>
+        <para>Similarly to the behaviour of <varname>CopyBlocks=</varname>, the file system is formatted
+        before the partition is created, ensuring that the partition only ever exists with a fully
+        initialized file system.</para>
 
         <para>This option cannot be combined with <varname>CopyBlocks=</varname>.</para></listitem>
       </varlistentry>
@@ -501,11 +421,27 @@
         <para>The copy operation is executed before the file system is registered in the partition table,
         thus ensuring that a file system populated this way only ever exists fully initialized.</para>
 
+        <para>Note that <varname>CopyFiles=</varname> will skip copying files that aren't supported by the
+        target filesystem (e.g symlinks, fifos, sockets and devices on vfat). When an unsupported file type
+        is encountered, repart will skip copying this file and write a log message about it.</para>
+
+        <para>Note that <command>systemd-repart</command> does not change the UIDs/GIDs of any copied files
+        and directories. When running <command>systemd-repart</command> as an unprivileged user to build an
+        image of files and directories owned by the same user, you can run <command>systemd-repart</command>
+        in a user namespace with the current user mapped to the root user to make sure the files and
+        directories in the image are owned by the root user.</para>
+
+        <para>Note that when populating XFS filesystems with <command>systemd-repart</command> and loop
+        devices are not available, populating XFS filesystems with files containing spaces, tabs or newlines
+        will fail due to limitations of mkfs.xfs's protofile format.</para>
+
         <para>This option cannot be combined with <varname>CopyBlocks=</varname>.</para>
 
-        <para>When <command>systemd-repart</command> is invoked with the <option>--image=</option> or
-        <option>--root=</option> command line switches the source paths specified are taken relative to the
-        specified root directory or disk image root.</para></listitem>
+        <para>When
+        <citerefentry><refentrytitle>systemd-repart</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        is invoked with the <option>--image=</option> or <option>--root=</option> command line switches the
+        source paths specified are taken relative to the specified root directory or disk image root.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -561,6 +497,42 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>Verity=</varname></term>
+
+        <listitem><para>Takes one of <literal>off</literal>, <literal>data</literal>,
+        <literal>hash</literal> or <literal>signature</literal>. Defaults to <literal>off</literal>. If set
+        to <literal>off</literal> or <literal>data</literal>, the partition is populated with content as
+        specified by <varname>CopyBlocks=</varname> or <varname>CopyFiles=</varname>. If set to
+        <literal>hash</literal>, the partition will be populated with verity hashes from the matching verity
+        data partition. If set to <literal>signature</literal>, the partition will be populated with a JSON
+        object containing a signature of the verity root hash of the matching verity hash partition.</para>
+
+        <para>A matching verity partition is a partition with the same verity match key (as configured with
+        <varname>VerityMatchKey=</varname>).</para>
+
+        <para>If not explicitly configured, the data partition's UUID will be set to the first 128
+        bits of the verity root hash. Similarly, if not configured, the hash partition's UUID will be set to
+        the final 128 bits of the verity root hash. The verity root hash itself will be included in the
+        output of <command>systemd-repart</command>.</para>
+
+        <para>This option has no effect if the partition already exists.</para>
+
+        <para>Usage of this option in combination with <varname>Encrypt=</varname> is not supported.</para>
+
+        <para>For each unique <varname>VerityMatchKey=</varname> value, a single verity data partition
+        (<literal>Verity=data</literal>) and a single verity hash partition (<literal>Verity=hash</literal>)
+        must be defined.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>VerityMatchKey=</varname></term>
+
+        <listitem><para>Takes a short, user-chosen identifier string. This setting is used to find sibling
+        verity partitions for the current verity partition. See the description for
+        <varname>Verity=</varname>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>FactoryReset=</varname></term>
 
         <listitem><para>Takes a boolean argument. If specified the partition is marked for removal during a
@@ -587,7 +559,7 @@
 
         <listitem><para>Configures the No-Auto, Read-Only and Grow-File-System partition flags (bit 63, 60
         and 59) of the partition table entry, as defined by the <ulink
-        url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>. Only
+        url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>. Only
         available for partition types supported by the specification. This option is a friendly way to set
         bits 63, 60 and 59 of the partition flags value without setting any of the other bits, and may be set
         via <varname>Flags=</varname> too, see above.</para>
@@ -617,6 +589,31 @@
         all partition types that support it, except if the partition is marked read-only (and thus
         effectively, defaults to off for Verity partitions).</para></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>SplitName=</varname></term>
+
+        <listitem><para>Configures the suffix to append to split artifacts when the <option>--split</option>
+        option of <command>systemd-repart</command> is used. Simple specifier expansion is supported, see
+        below. Defaults to <literal>%t</literal>. To disable split artifact generation for a partition, set
+        <varname>SplitName=</varname> to <literal>-</literal>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Minimize=</varname></term>
+
+        <listitem><para>Takes one of <literal>off</literal>, <literal>best</literal>, and
+        <literal>guess</literal> (alternatively, also accepts a boolean value, which is mapped to
+        <literal>off</literal> when false, and <literal>best</literal> when true). Defaults to
+        <literal>off</literal>. If set to <literal>best</literal>, the partition will have the minimal size
+        required to store the sources configured with <varname>CopyFiles=</varname>. <literal>best</literal>
+        is currently only supported for read-only filesystems. If set to <literal>guess</literal>, the
+        partition is created at least as big as required to store the sources configured with
+        <varname>CopyFiles=</varname>. Note that unless the filesystem is a read-only filesystem,
+        <command>systemd-repart</command> will have to populate the filesystem twice to guess the minimal
+        required size, so enabling this option might slow down repart when populating large partitions.
+        </para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -624,8 +621,8 @@
     <title>Specifiers</title>
 
     <para>Specifiers may be used in the <varname>Label=</varname>, <varname>CopyBlocks=</varname>,
-    <varname>CopyFiles=</varname>, <varname>MakeDirectories=</varname> settings. The following expansions are
-    understood:</para>
+    <varname>CopyFiles=</varname>, <varname>MakeDirectories=</varname>, <varname>SplitName=</varname>
+    settings. The following expansions are understood:</para>
       <table class='specifiers'>
         <title>Specifiers available</title>
         <tgroup cols='3' align='left' colsep='1' rowsep='1'>
@@ -658,6 +655,46 @@
           </tbody>
         </tgroup>
       </table>
+
+    <para>Additionally, for the <varname>SplitName=</varname> setting, the following specifiers are also
+    understood:</para>
+      <table class='specifiers'>
+        <title>Specifiers available</title>
+        <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+          <colspec colname="spec" />
+          <colspec colname="mean" />
+          <colspec colname="detail" />
+          <thead>
+            <row>
+              <entry>Specifier</entry>
+              <entry>Meaning</entry>
+              <entry>Details</entry>
+            </row>
+          </thead>
+          <tbody>
+            <row id='T'>
+              <entry><literal>%T</literal></entry>
+              <entry>Partition Type UUID</entry>
+              <entry>The partition type UUID, as configured with <varname>Type=</varname></entry>
+            </row>
+            <row id='t'>
+              <entry><literal>%t</literal></entry>
+              <entry>Partition Type Identifier</entry>
+              <entry>The partition type identifier corresponding to the partition type UUID</entry>
+            </row>
+            <row id='U'>
+              <entry><literal>%U</literal></entry>
+              <entry>Partition UUID</entry>
+              <entry>The partition UUID, as configured with <varname>UUID=</varname></entry>
+            </row>
+            <row id='n'>
+              <entry><literal>%n</literal></entry>
+              <entry>Partition Number</entry>
+              <entry>The partition number assigned to the partition</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
   </refsect1>
 
   <refsect1>
@@ -729,6 +766,28 @@
 </programlisting></para>
     </example>
 
+     <example>
+      <title>Create a data and verity partition from a OS tree</title>
+
+      <para>Assuming we have an OS tree at /var/tmp/os-tree that we want to package in a root partition
+      together with a matching verity partition, we can do so as follows:</para>
+
+      <para><programlisting># 50-root.conf
+[Partition]
+Type=root
+CopyFiles=/var/tmp/os-tree
+Verity=data
+VerityMatchKey=root
+</programlisting></para>
+
+      <para><programlisting># 60-root-verity.conf
+[Partition]
+Type=root-verity
+Verity=hash
+VerityMatchKey=root
+</programlisting></para>
+    </example>
+
   </refsect1>
 
   <refsect1>
diff --git a/man/resolvectl.xml b/man/resolvectl.xml
index 3ef2e51..c966ca6 100644
--- a/man/resolvectl.xml
+++ b/man/resolvectl.xml
@@ -38,7 +38,7 @@
     records and services with the
     <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     resolver service. By default, the specified list of parameters will be resolved as hostnames, retrieving their IPv4
-    and IPv6 addresses. If the parameters specified are formatted as IPv4 or IPv6 operation the reverse operation is
+    and IPv6 addresses. If the parameters specified are formatted as IPv4 or IPv6 addresses the reverse operation is
     done, and a hostname is retrieved for the specified addresses.</para>
 
     <para>The program's output contains information about the protocol used for the look-up and on which network
@@ -199,6 +199,19 @@
         automatically, an explicit reverting is not necessary in that case.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><command>monitor</command></term>
+
+        <listitem><para>Show a continuous stream of local client resolution queries and their
+        responses. Whenever a local query is completed the query's DNS resource lookup key and resource
+        records are shown. Note that this displays queries issued locally only, and does not immediately
+        relate to DNS requests submitted to configured DNS servers or the LLMNR or MulticastDNS zones, as
+        lookups may be answered from the local cache, or might result in multiple DNS transactions (for
+        example to validate DNSSEC information). If CNAME/CNAME redirection chains are followed, a separate
+        query will be displayed for each element of the chain. Use <option>--json=</option> to enable JSON
+        output.</para></listitem>
+      </varlistentry>
+
       <xi:include href="systemctl.xml" xpointer="log-level" />
     </variablelist>
   </refsect1>
@@ -310,11 +323,12 @@
 
         <listitem><para>Takes a boolean parameter; used in conjunction with <command>query</command>. If true
         (the default), select domains are resolved on the local system, among them
-        <literal>localhost</literal>, <literal>_gateway</literal> and <literal>_outbound</literal>, or
-        entries from <filename>/etc/hosts</filename>. If false these domains are not resolved locally, and
-        either fail (in case of <literal>localhost</literal>, <literal>_gateway</literal> or
-        <literal>_outbound</literal> and suchlike) or go to the network via regular DNS/mDNS/LLMNR lookups
-        (in case of <filename>/etc/hosts</filename> entries).</para></listitem>
+        <literal>localhost</literal>, <literal>_gateway</literal>, <literal>_outbound</literal>,
+        <literal>_localdnsstub</literal> and <literal>_localdnsproxy</literal> or entries from
+        <filename>/etc/hosts</filename>. If false these domains are not resolved locally, and either fail (in
+        case of <literal>localhost</literal>, <literal>_gateway</literal> or <literal>_outbound</literal> and
+        suchlike) or go to the network via regular DNS/mDNS/LLMNR lookups (in case of
+        <filename>/etc/hosts</filename> entries).</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -379,9 +393,17 @@
         query response are shown. Otherwise, this output is suppressed.</para></listitem>
       </varlistentry>
 
+      <xi:include href="standard-options.xml" xpointer="json" />
+
+      <varlistentry>
+        <term><option>-j</option></term>
+
+        <listitem><para>Short for <option>--json=auto</option></para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="no-pager" />
       <xi:include href="standard-options.xml" xpointer="help" />
       <xi:include href="standard-options.xml" xpointer="version" />
-      <xi:include href="standard-options.xml" xpointer="no-pager" />
     </variablelist>
   </refsect1>
 
diff --git a/man/resolved.conf.xml b/man/resolved.conf.xml
index 57ced03..2b9f482 100644
--- a/man/resolved.conf.xml
+++ b/man/resolved.conf.xml
@@ -75,7 +75,7 @@
 
       <varlistentry>
         <term><varname>Domains=</varname></term>
-        <listitem><para>A space-separated list of domains optionally prefixed with <literal>~</literal>,
+        <listitem><para>A space-separated list of domains, optionally prefixed with <literal>~</literal>,
         used for two distinct purposes described below. Defaults to the empty list.</para>
 
         <para>Any domains <emphasis>not</emphasis> prefixed with <literal>~</literal> are used as search
@@ -86,17 +86,23 @@
         <filename>/etc/resolv.conf</filename> with the <varname>search</varname> keyword are used instead, if
         that file exists and any domains are configured in it.</para>
 
-        <para>The domains prefixed with <literal>~</literal> are called "routing domains". All domains listed
-        here (both search domains and routing domains after removing the <literal>~</literal> prefix) define
-        a search path that preferably directs DNS queries to this interface. This search path has an effect
-        only when suitable per-link DNS servers are known. Such servers may be defined through the
-        <varname>DNS=</varname> setting (see above) and dynamically at run time, for example from DHCP
-        leases. If no per-link DNS servers are known, routing domains have no effect.</para>
+        <para>The domains prefixed with <literal>~</literal> are called "route-only domains". All domains
+        listed here (<emphasis>both search domains and route-only domains</emphasis> after removing the
+        <literal>~</literal> prefix) define a search path that preferably directs DNS queries to this
+        interface. This search path has an effect only when suitable per-link DNS servers are known. Such
+        servers may be defined through the <varname>DNS=</varname> setting (see above) and dynamically at run
+        time, for example from DHCP leases. If no per-link DNS servers are known, route-only domains have no
+        effect.</para>
 
         <para>Use the construct <literal>~.</literal> (which is composed from <literal>~</literal> to
-        indicate a routing domain and <literal>.</literal> to indicate the DNS root domain that is the
+        indicate a route-only domain and <literal>.</literal> to indicate the DNS root domain that is the
         implied suffix of all DNS domains) to use the DNS servers defined for this link preferably for all
-        domains.</para></listitem>
+        domains.</para>
+
+        <para>See "Protocols and Routing" in
+        <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        for details of how search and route-only domains are used.</para>
+        </listitem>
       </varlistentry>
 
       <varlistentry>
@@ -213,7 +219,7 @@
         true all connections to the server will be encrypted. Note that this
         mode requires a DNS server that supports DNS-over-TLS and has a valid
         certificate. If the hostname was specified in <varname>DNS=</varname>
-        by using the format format <literal>address#server_name</literal> it
+        by using the format <literal>address#server_name</literal> it
         is used to validate its certificate and also to enable Server Name
         Indication (SNI) when opening a TLS connection. Otherwise
         the certificate is checked against the server's IP.
@@ -268,11 +274,13 @@
 
       <varlistentry>
         <term><varname>DNSStubListener=</varname></term>
-        <listitem><para>Takes a boolean argument or one of <literal>udp</literal> and <literal>tcp</literal>. If
-        <literal>udp</literal>, a DNS stub resolver will listen for UDP requests on address 127.0.0.53
-        port 53. If <literal>tcp</literal>, the stub will listen for TCP requests on the same address and port. If
-        <literal>yes</literal> (the default), the stub listens for both UDP and TCP requests.  If <literal>no</literal>, the stub
-        listener is disabled.</para>
+        <listitem><para>Takes a boolean argument or one of <literal>udp</literal> and
+        <literal>tcp</literal>. If <literal>udp</literal>, a DNS stub resolver will listen for UDP requests
+        on addresses 127.0.0.53 and 127.0.0.54, port 53. If <literal>tcp</literal>, the stub will listen for
+        TCP requests on the same addresses and port. If <literal>yes</literal> (the default), the stub listens
+        for both UDP and TCP requests. If <literal>no</literal>, the stub listener is disabled.</para>
+
+        <xi:include href="systemd-resolved.service.xml" xpointer="proxy-stub" />
 
         <para>Note that the DNS stub listener is turned off implicitly when its listening address and port are already
         in use.</para></listitem>
diff --git a/man/rules/meson.build b/man/rules/meson.build
index 70fbbd0..479d123 100644
--- a/man/rules/meson.build
+++ b/man/rules/meson.build
@@ -5,7 +5,7 @@
 #     ninja -C build update-man-rules
 manpages = [
 ['binfmt.d', '5', [], 'ENABLE_BINFMT'],
- ['bootctl', '1', [], 'ENABLE_EFI'],
+ ['bootctl', '1', [], 'HAVE_GNU_EFI'],
  ['bootup', '7', [], ''],
  ['busctl', '1', [], ''],
  ['coredump.conf', '5', ['coredump.conf.d'], 'ENABLE_COREDUMP'],
@@ -18,20 +18,20 @@
   'ENABLE_RESOLVE'],
  ['environment.d', '5', [], 'ENABLE_ENVIRONMENT_D'],
  ['file-hierarchy', '7', [], ''],
- ['halt', '8', ['poweroff', 'reboot'], ''],
  ['homectl', '1', [], 'ENABLE_HOMED'],
  ['homed.conf', '5', ['homed.conf.d'], 'ENABLE_HOMED'],
  ['hostname', '5', [], ''],
  ['hostnamectl', '1', [], 'ENABLE_HOSTNAMED'],
  ['hwdb', '7', [], 'ENABLE_HWDB'],
+ ['integritytab', '5', [], 'HAVE_LIBCRYPTSETUP'],
  ['journal-remote.conf', '5', ['journal-remote.conf.d'], 'HAVE_MICROHTTPD'],
  ['journal-upload.conf', '5', ['journal-upload.conf.d'], 'HAVE_MICROHTTPD'],
  ['journalctl', '1', [], ''],
  ['journald.conf', '5', ['journald.conf.d', 'journald@.conf'], ''],
  ['kernel-command-line', '7', [], ''],
- ['kernel-install', '8', [], ''],
+ ['kernel-install', '8', [], 'ENABLE_KERNEL_INSTALL'],
  ['libudev', '3', [], ''],
- ['loader.conf', '5', [], 'ENABLE_EFI'],
+ ['loader.conf', '5', [], 'HAVE_GNU_EFI'],
  ['locale.conf', '5', [], ''],
  ['localectl', '1', [], 'ENABLE_LOCALED'],
  ['localtime', '5', [], ''],
@@ -56,15 +56,17 @@
  ['org.freedesktop.locale1', '5', [], 'ENABLE_LOCALED'],
  ['org.freedesktop.login1', '5', [], 'ENABLE_LOGIND'],
  ['org.freedesktop.machine1', '5', [], 'ENABLE_MACHINED'],
+ ['org.freedesktop.network1', '5', [], 'ENABLE_NETWORKD'],
  ['org.freedesktop.oom1', '5', [], 'ENABLE_OOMD'],
  ['org.freedesktop.portable1', '5', [], 'ENABLE_PORTABLED'],
  ['org.freedesktop.resolve1', '5', [], 'ENABLE_RESOLVE'],
  ['org.freedesktop.systemd1', '5', [], ''],
  ['org.freedesktop.timedate1', '5', [], 'ENABLE_TIMEDATED'],
- ['os-release', '5', ['initrd-release'], ''],
+ ['os-release', '5', ['extension-release', 'initrd-release'], ''],
  ['pam_systemd', '8', [], 'HAVE_PAM'],
  ['pam_systemd_home', '8', [], 'ENABLE_PAM_HOME'],
  ['portablectl', '1', [], 'ENABLE_PORTABLED'],
+ ['poweroff', '8', ['halt', 'reboot'], ''],
  ['pstore.conf', '5', ['pstore.conf.d'], 'ENABLE_PSTORE'],
  ['repart.d', '5', [], 'ENABLE_REPART'],
  ['resolvectl', '1', ['resolvconf'], 'ENABLE_RESOLVE'],
@@ -115,6 +117,7 @@
    'SD_NOTICE',
    'SD_WARNING'],
   ''],
+ ['sd-device', '3', [], ''],
  ['sd-event', '3', [], ''],
  ['sd-hwdb', '3', [], ''],
  ['sd-id128',
@@ -134,6 +137,7 @@
    'sd_id128_in_setv',
    'sd_id128_is_allf',
    'sd_id128_is_null',
+   'sd_id128_string_equal',
    'sd_id128_t'],
   ''],
  ['sd-journal', '3', [], ''],
@@ -244,6 +248,8 @@
    'sd_bus_emit_object_removed',
    'sd_bus_emit_properties_changed',
    'sd_bus_emit_properties_changed_strv',
+   'sd_bus_emit_signal_to',
+   'sd_bus_emit_signal_tov',
    'sd_bus_emit_signalv'],
   ''],
  ['sd_bus_enqueue_for_read', '3', [], ''],
@@ -264,7 +270,8 @@
    'sd_bus_error_set_errno',
    'sd_bus_error_set_errnof',
    'sd_bus_error_set_errnofv',
-   'sd_bus_error_setf'],
+   'sd_bus_error_setf',
+   'sd_bus_error_setfv'],
   ''],
  ['sd_bus_error_add_map',
   '3',
@@ -343,7 +350,7 @@
    'sd_bus_message_new_method_errnof',
    'sd_bus_message_new_method_errorf'],
   ''],
- ['sd_bus_message_new_signal', '3', [], ''],
+ ['sd_bus_message_new_signal', '3', ['sd_bus_message_new_signal_to'], ''],
  ['sd_bus_message_open_container',
   '3',
   ['sd_bus_message_close_container',
@@ -356,7 +363,7 @@
   ''],
  ['sd_bus_message_read_array', '3', [], ''],
  ['sd_bus_message_read_basic', '3', [], ''],
- ['sd_bus_message_read_strv', '3', [], ''],
+ ['sd_bus_message_read_strv', '3', ['sd_bus_message_read_strv_extend'], ''],
  ['sd_bus_message_rewind', '3', [], ''],
  ['sd_bus_message_seal', '3', [], ''],
  ['sd_bus_message_sensitive', '3', [], ''],
@@ -500,6 +507,20 @@
    'sd_bus_track_unrefp'],
   ''],
  ['sd_bus_wait', '3', [], ''],
+ ['sd_device_get_syspath',
+  '3',
+  ['sd_device_get_devname',
+   'sd_device_get_devnum',
+   'sd_device_get_devpath',
+   'sd_device_get_devtype',
+   'sd_device_get_diskseq',
+   'sd_device_get_driver',
+   'sd_device_get_ifindex',
+   'sd_device_get_subsystem',
+   'sd_device_get_sysname',
+   'sd_device_get_sysnum'],
+  ''],
+ ['sd_device_ref', '3', ['sd_device_unref', 'sd_device_unrefp'], ''],
  ['sd_event_add_child',
   '3',
   ['sd_event_add_child_pidfd',
@@ -518,7 +539,9 @@
   ''],
  ['sd_event_add_inotify',
   '3',
-  ['sd_event_inotify_handler_t', 'sd_event_source_get_inotify_mask'],
+  ['sd_event_add_inotify_fd',
+   'sd_event_inotify_handler_t',
+   'sd_event_source_get_inotify_mask'],
   ''],
  ['sd_event_add_io',
   '3',
@@ -534,7 +557,9 @@
   ''],
  ['sd_event_add_signal',
   '3',
-  ['sd_event_signal_handler_t', 'sd_event_source_get_signal'],
+  ['SD_EVENT_SIGNAL_PROCMASK',
+   'sd_event_signal_handler_t',
+   'sd_event_source_get_signal'],
   ''],
  ['sd_event_add_time',
   '3',
@@ -560,6 +585,7 @@
   ''],
  ['sd_event_now', '3', [], ''],
  ['sd_event_run', '3', ['sd_event_loop'], ''],
+ ['sd_event_set_signal_exit', '3', [], ''],
  ['sd_event_set_watchdog', '3', ['sd_event_get_watchdog'], ''],
  ['sd_event_source_get_event', '3', [], ''],
  ['sd_event_source_get_pending', '3', [], ''],
@@ -593,7 +619,9 @@
   ''],
  ['sd_event_source_set_ratelimit',
   '3',
-  ['sd_event_source_get_ratelimit', 'sd_event_source_is_ratelimited'],
+  ['sd_event_source_get_ratelimit',
+   'sd_event_source_is_ratelimited',
+   'sd_event_source_set_ratelimit_expire_callback'],
   ''],
  ['sd_event_source_set_userdata', '3', ['sd_event_source_get_userdata'], ''],
  ['sd_event_source_unref',
@@ -625,7 +653,10 @@
   '3',
   ['SD_HWDB_FOREACH_PROPERTY', 'sd_hwdb_enumerate', 'sd_hwdb_seek'],
   ''],
- ['sd_hwdb_new', '3', ['sd_hwdb_ref', 'sd_hwdb_unref'], ''],
+ ['sd_hwdb_new',
+  '3',
+  ['sd_hwdb_new_from_path', 'sd_hwdb_ref', 'sd_hwdb_unref'],
+  ''],
  ['sd_id128_get_machine',
   '3',
   ['sd_id128_get_boot',
@@ -634,7 +665,15 @@
    'sd_id128_get_machine_app_specific'],
   ''],
  ['sd_id128_randomize', '3', [], ''],
- ['sd_id128_to_string', '3', ['sd_id128_from_string'], ''],
+ ['sd_id128_to_string',
+  '3',
+  ['SD_ID128_STRING_MAX',
+   'SD_ID128_TO_STRING',
+   'SD_ID128_TO_UUID_STRING',
+   'SD_ID128_UUID_STRING_MAX',
+   'sd_id128_from_string',
+   'sd_id128_to_uuid_string'],
+  ''],
  ['sd_is_fifo',
   '3',
   ['sd_is_mq',
@@ -776,7 +815,15 @@
    'sd_pid_get_slice',
    'sd_pid_get_unit',
    'sd_pid_get_user_slice',
-   'sd_pid_get_user_unit'],
+   'sd_pid_get_user_unit',
+   'sd_pidfd_get_cgroup',
+   'sd_pidfd_get_machine_name',
+   'sd_pidfd_get_owner_uid',
+   'sd_pidfd_get_session',
+   'sd_pidfd_get_slice',
+   'sd_pidfd_get_unit',
+   'sd_pidfd_get_user_slice',
+   'sd_pidfd_get_user_unit'],
   'HAVE_PAM'],
  ['sd_seat_get_active',
   '3',
@@ -809,6 +856,7 @@
  ['shutdown', '8', [], ''],
  ['sysctl.d', '5', [], ''],
  ['systemctl', '1', [], ''],
+ ['systemd-ac-power', '1', [], ''],
  ['systemd-analyze', '1', [], 'ENABLE_ANALYZE'],
  ['systemd-ask-password-console.service',
   '8',
@@ -819,14 +867,14 @@
  ['systemd-ask-password', '1', [], ''],
  ['systemd-backlight@.service', '8', ['systemd-backlight'], 'ENABLE_BACKLIGHT'],
  ['systemd-binfmt.service', '8', ['systemd-binfmt'], 'ENABLE_BINFMT'],
- ['systemd-bless-boot-generator', '8', [], 'ENABLE_EFI'],
- ['systemd-bless-boot.service', '8', ['systemd-bless-boot'], 'ENABLE_EFI'],
+ ['systemd-bless-boot-generator', '8', [], 'HAVE_GNU_EFI'],
+ ['systemd-bless-boot.service', '8', ['systemd-bless-boot'], 'HAVE_GNU_EFI'],
  ['systemd-boot-check-no-failures.service',
   '8',
   ['systemd-boot-check-no-failures'],
   ''],
- ['systemd-boot-system-token.service', '8', [], 'ENABLE_EFI'],
- ['systemd-boot', '7', ['sd-boot'], 'ENABLE_EFI'],
+ ['systemd-boot-random-seed.service', '8', [], 'HAVE_GNU_EFI'],
+ ['systemd-boot', '7', ['sd-boot'], 'HAVE_GNU_EFI'],
  ['systemd-cat', '1', [], ''],
  ['systemd-cgls', '1', [], ''],
  ['systemd-cgtop', '1', [], ''],
@@ -834,6 +882,7 @@
   '8',
   ['systemd-coredump.socket', 'systemd-coredump@.service'],
   'ENABLE_COREDUMP'],
+ ['systemd-creds', '1', [], ''],
  ['systemd-cryptenroll', '1', [], 'HAVE_LIBCRYPTSETUP'],
  ['systemd-cryptsetup-generator', '8', [], 'HAVE_LIBCRYPTSETUP'],
  ['systemd-cryptsetup@.service',
@@ -852,18 +901,11 @@
  ['systemd-firstboot', '1', ['systemd-firstboot.service'], 'ENABLE_FIRSTBOOT'],
  ['systemd-fsck@.service',
   '8',
-  ['systemd-fsck', 'systemd-fsck-root.service'],
+  ['systemd-fsck', 'systemd-fsck-root.service', 'systemd-fsck-usr.service'],
   ''],
  ['systemd-fstab-generator', '8', [], ''],
  ['systemd-getty-generator', '8', [], ''],
  ['systemd-gpt-auto-generator', '8', [], 'HAVE_BLKID'],
- ['systemd-halt.service',
-  '8',
-  ['systemd-kexec.service',
-   'systemd-poweroff.service',
-   'systemd-reboot.service',
-   'systemd-shutdown'],
-  ''],
  ['systemd-hibernate-resume-generator', '8', [], 'ENABLE_HIBERNATE'],
  ['systemd-hibernate-resume@.service',
   '8',
@@ -879,6 +921,11 @@
   '8',
   ['systemd-initctl', 'systemd-initctl.socket'],
   'HAVE_SYSV_COMPAT'],
+ ['systemd-integritysetup-generator', '8', [], 'HAVE_LIBCRYPTSETUP'],
+ ['systemd-integritysetup@.service',
+  '8',
+  ['systemd-integritysetup'],
+  'HAVE_LIBCRYPTSETUP'],
  ['systemd-journal-gatewayd.service',
   '8',
   ['systemd-journal-gatewayd', 'systemd-journal-gatewayd.socket'],
@@ -909,23 +956,41 @@
  ['systemd-makefs@.service',
   '8',
   ['systemd-growfs',
+   'systemd-growfs-root.service',
    'systemd-growfs@.service',
    'systemd-makefs',
    'systemd-mkswap@.service'],
   ''],
+ ['systemd-measure', '1', [], 'HAVE_GNU_EFI'],
  ['systemd-modules-load.service', '8', ['systemd-modules-load'], 'HAVE_KMOD'],
  ['systemd-mount', '1', ['systemd-umount'], ''],
  ['systemd-network-generator.service', '8', ['systemd-network-generator'], ''],
  ['systemd-networkd-wait-online.service',
   '8',
-  ['systemd-networkd-wait-online'],
+  ['systemd-networkd-wait-online', 'systemd-networkd-wait-online@.service'],
   'ENABLE_NETWORKD'],
  ['systemd-networkd.service', '8', ['systemd-networkd'], 'ENABLE_NETWORKD'],
  ['systemd-notify', '1', [], ''],
  ['systemd-nspawn', '1', [], ''],
  ['systemd-oomd.service', '8', ['systemd-oomd'], 'ENABLE_OOMD'],
  ['systemd-path', '1', [], ''],
+ ['systemd-pcrphase.service',
+  '8',
+  ['systemd-pcrfs-root.service',
+   'systemd-pcrfs@.service',
+   'systemd-pcrmachine.service',
+   'systemd-pcrphase',
+   'systemd-pcrphase-initrd.service',
+   'systemd-pcrphase-sysinit.service'],
+  'HAVE_GNU_EFI'],
  ['systemd-portabled.service', '8', ['systemd-portabled'], 'ENABLE_PORTABLED'],
+ ['systemd-poweroff.service',
+  '8',
+  ['systemd-halt.service',
+   'systemd-kexec.service',
+   'systemd-reboot.service',
+   'systemd-shutdown'],
+  ''],
  ['systemd-pstore.service', '8', ['systemd-pstore'], 'ENABLE_PSTORE'],
  ['systemd-quotacheck.service',
   '8',
@@ -948,6 +1013,11 @@
  ['systemd-sleep.conf', '5', ['sleep.conf.d'], ''],
  ['systemd-socket-activate', '1', [], ''],
  ['systemd-socket-proxyd', '8', [], ''],
+ ['systemd-stdio-bridge', '1', [], ''],
+ ['systemd-stub',
+  '7',
+  ['linuxaa64.efi.stub', 'linuxia32.efi.stub', 'linuxx64.efi.stub', 'sd-stub'],
+  'HAVE_GNU_EFI'],
  ['systemd-suspend.service',
   '8',
   ['systemd-hibernate.service',
@@ -962,6 +1032,13 @@
   '5',
   ['system.conf.d', 'systemd-user.conf', 'user.conf.d'],
   ''],
+ ['systemd-sysupdate',
+  '8',
+  ['systemd-sysupdate-reboot.service',
+   'systemd-sysupdate-reboot.timer',
+   'systemd-sysupdate.service',
+   'systemd-sysupdate.timer'],
+  'ENABLE_SYSUPDATE'],
  ['systemd-sysusers', '8', ['systemd-sysusers.service'], ''],
  ['systemd-sysv-generator', '8', [], 'HAVE_SYSV_COMPAT'],
  ['systemd-time-wait-sync.service',
@@ -1029,10 +1106,12 @@
  ['systemd.special', '7', [], ''],
  ['systemd.swap', '5', [], ''],
  ['systemd.syntax', '7', [], ''],
+ ['systemd.system-credentials', '7', [], ''],
  ['systemd.target', '5', [], ''],
  ['systemd.time', '7', [], ''],
  ['systemd.timer', '5', [], ''],
  ['systemd.unit', '5', [], ''],
+ ['sysupdate.d', '5', [], 'ENABLE_SYSUPDATE'],
  ['sysusers.d', '5', [], 'ENABLE_SYSUSERS'],
  ['telinit', '8', [], 'HAVE_SYSV_COMPAT'],
  ['timedatectl', '1', [], 'ENABLE_TIMEDATECTL'],
@@ -1125,6 +1204,7 @@
   ''],
  ['udev_new', '3', ['udev_ref', 'udev_unref'], ''],
  ['udevadm', '8', [], ''],
+ ['ukify', '1', [], 'ENABLE_UKIFY'],
  ['user@.service',
   '5',
   ['systemd-user-runtime-dir', 'user-runtime-dir@.service'],
diff --git a/man/sd-bus-container-append.c b/man/sd-bus-container-append.c
index e350ea0..8bb4f33 100644
--- a/man/sd-bus-container-append.c
+++ b/man/sd-bus-container-append.c
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <systemd/sd-bus.h>
 
 int append_strings_to_message(sd_bus_message *m, const char *const *arr) {
diff --git a/man/sd-bus-container-read.c b/man/sd-bus-container-read.c
index b6c95f4..5ede316 100644
--- a/man/sd-bus-container-read.c
+++ b/man/sd-bus-container-read.c
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <stdio.h>
 
 #include <systemd/sd-bus.h>
diff --git a/man/sd-bus-errors.xml b/man/sd-bus-errors.xml
index a69efe0..f3b1515 100644
--- a/man/sd-bus-errors.xml
+++ b/man/sd-bus-errors.xml
@@ -268,7 +268,7 @@
       <citerefentry><refentrytitle>sd_bus_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_message_set_allow_interactive_authorization</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-      <citerefentry project='die-net'><refentrytitle>strerror</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+      <citerefentry project='man-pages'><refentrytitle>strerror_r</refentrytitle><manvolnum>3</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/sd-bus.xml b/man/sd-bus.xml
index f43af89..36925ba 100644
--- a/man/sd-bus.xml
+++ b/man/sd-bus.xml
@@ -68,6 +68,8 @@
 <citerefentry><refentrytitle>sd_bus_emit_properties_changed_strv</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_emit_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_emit_signalv</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>sd_bus_emit_signal_to</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>sd_bus_emit_signal_tov</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd-bus-errors</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_error_add_map</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
@@ -122,6 +124,7 @@
 <citerefentry><refentrytitle>sd_bus_message_new_method_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_message_new_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>sd_bus_message_new_signal_to</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_message_open_container</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_message_peek_type</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 <citerefentry><refentrytitle>sd_bus_message_read</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
diff --git a/man/sd-device.xml b/man/sd-device.xml
new file mode 100644
index 0000000..7af839b
--- /dev/null
+++ b/man/sd-device.xml
@@ -0,0 +1,62 @@
+<?xml version='1.0'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="sd-device" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sd-device</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd-device</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd-device</refname>
+    <refpurpose>API for enumerating and introspecting local devices</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-device.h&gt;</funcsynopsisinfo>
+    </funcsynopsis>
+
+    <cmdsynopsis>
+      <command>pkg-config --cflags --libs libsystemd</command>
+    </cmdsynopsis>
+
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><filename>sd-device.h</filename> provides an API to introspect and enumerate devices on the local
+    system. It provides a programmatic interface to the database of devices and their properties mananaged by
+    <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+    This API is a replacement for
+    <citerefentry><refentrytitle>libudev</refentrytitle><manvolnum>3</manvolnum></citerefentry> and
+    <filename>libudev.h</filename>.</para>
+
+    <para>See
+    <literallayout><citerefentry><refentrytitle>sd_device_get_syspath</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>sd_device_ref</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+</literallayout>
+    for more information about the functions available.</para>
+  </refsect1>
+
+  <xi:include href="libsystemd-pkgconfig.xml" />
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd-id128.xml b/man/sd-id128.xml
index 891a458..c869943 100644
--- a/man/sd-id128.xml
+++ b/man/sd-id128.xml
@@ -28,6 +28,7 @@
     <refname>SD_ID128_NULL</refname>
     <refname>SD_ID128_UUID_FORMAT_STR</refname>
     <refname>sd_id128_equal</refname>
+    <refname>sd_id128_string_equal</refname>
     <refname>sd_id128_in_set</refname>
     <refname>sd_id128_in_set_sentinel</refname>
     <refname>sd_id128_in_setv</refname>
@@ -40,6 +41,75 @@
   <refsynopsisdiv>
     <funcsynopsis>
       <funcsynopsisinfo>#include &lt;systemd/sd-id128.h&gt;</funcsynopsisinfo>
+
+      <para>
+        <constant>SD_ID128_ALLF</constant>
+      </para>
+      <para>
+        <constant>SD_ID128_NULL</constant>
+      </para>
+      <para>
+        <constant>SD_ID128_CONST_STR(<replaceable>id</replaceable>)</constant>
+      </para>
+      <para>
+        <constant>SD_ID128_FORMAT_STR</constant>
+      </para>
+      <para>
+        <constant>SD_ID128_FORMAT_VAL(<replaceable>id</replaceable>)</constant>
+      </para>
+      <para>
+        <constant>SD_ID128_MAKE(<replaceable>v0</replaceable>, <replaceable>v1</replaceable>, <replaceable>v2</replaceable>, <replaceable>v3</replaceable>, <replaceable>v4</replaceable>, <replaceable>v5</replaceable>, <replaceable>v6</replaceable>, <replaceable>v7</replaceable>, <replaceable>v8</replaceable>, <replaceable>v9</replaceable>, <replaceable>vA</replaceable>, <replaceable>vB</replaceable>, <replaceable>vC</replaceable>, <replaceable>vD</replaceable>, <replaceable>vE</replaceable>, <replaceable>vF</replaceable>)</constant>
+      </para>
+      <para>
+        <constant>SD_ID128_MAKE_STR(<replaceable>v0</replaceable>, <replaceable>v1</replaceable>, <replaceable>v2</replaceable>, <replaceable>v3</replaceable>, <replaceable>v4</replaceable>, <replaceable>v5</replaceable>, <replaceable>v6</replaceable>, <replaceable>v7</replaceable>, <replaceable>v8</replaceable>, <replaceable>v9</replaceable>, <replaceable>vA</replaceable>, <replaceable>vB</replaceable>, <replaceable>vC</replaceable>, <replaceable>vD</replaceable>, <replaceable>vE</replaceable>, <replaceable>vF</replaceable>)</constant>
+      </para>
+      <para>
+        <constant>SD_ID128_MAKE_UUID_STR(<replaceable>v0</replaceable>, <replaceable>v1</replaceable>, <replaceable>v2</replaceable>, <replaceable>v3</replaceable>, <replaceable>v4</replaceable>, <replaceable>v5</replaceable>, <replaceable>v6</replaceable>, <replaceable>v7</replaceable>, <replaceable>v8</replaceable>, <replaceable>v9</replaceable>, <replaceable>vA</replaceable>, <replaceable>vB</replaceable>, <replaceable>vC</replaceable>, <replaceable>vD</replaceable>, <replaceable>vE</replaceable>, <replaceable>vF</replaceable>)</constant>
+      </para>
+      <para>
+        <constant>SD_ID128_UUID_FORMAT_STR</constant>
+      </para>
+
+      <funcprototype>
+        <funcdef>int <function>sd_id128_equal</function></funcdef>
+        <paramdef>sd_id128_t <parameter>a</parameter></paramdef>
+        <paramdef>sd_id128_t <parameter>b</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_id128_string_equal</function></funcdef>
+        <paramdef>const char *<parameter>a</parameter></paramdef>
+        <paramdef>sd_id128_t <parameter>b</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_id128_is_null</function></funcdef>
+        <paramdef>sd_id128_t <parameter>id</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_id128_is_allf</function></funcdef>
+        <paramdef>sd_id128_t <parameter>id</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_id128_in_setv</function></funcdef>
+        <paramdef>sd_id128_t <parameter>id</parameter></paramdef>
+        <paramdef>va_list <parameter>ap</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_id128_in_set_sentinel</function></funcdef>
+        <paramdef>sd_id128_t <parameter>id</parameter></paramdef>
+        <paramdef>…</paramdef>
+        <paramdef><constant>SD_ID128_NULL</constant></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_id128_in_set</function></funcdef>
+        <paramdef>sd_id128_t <parameter>id</parameter></paramdef>
+        <paramdef>…</paramdef>
+      </funcprototype>
     </funcsynopsis>
 
     <cmdsynopsis>
@@ -51,20 +121,13 @@
   <refsect1>
     <title>Description</title>
 
-    <para><filename>sd-id128.h</filename> provides APIs to process and generate 128-bit ID values. The
-    128-bit ID values processed and generated by these APIs are a generalization of OSF UUIDs as defined by
-    <ulink url="https://tools.ietf.org/html/rfc4122">RFC 4122</ulink> but use a simpler string format. These
-    functions impose no structure on the used IDs, much unlike OSF UUIDs or Microsoft GUIDs, but are mostly
-    compatible with those types of IDs.
+    <para><filename>sd-id128.h</filename> provides APIs to generate, convert, and compare 128-bit ID values.
+    The 128-bit ID values processed and generated by these APIs are a generalization of OSF UUIDs as defined
+    by <ulink url="https://tools.ietf.org/html/rfc4122">RFC 4122</ulink> but use a simpler string format.
+    These functions impose no structure on the used IDs, much unlike OSF UUIDs or Microsoft GUIDs, but are
+    mostly compatible with those types of IDs.
     </para>
 
-    <para>See
-    <citerefentry><refentrytitle>sd_id128_to_string</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-    <citerefentry><refentrytitle>sd_id128_randomize</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-    and
-    <citerefentry><refentrytitle>sd_id128_get_machine</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-    for more information about the implemented functions.</para>
-
     <para>A 128-bit ID is implemented as the following
     union type:</para>
 
@@ -73,27 +136,28 @@
   uint64_t qwords[2];
 } sd_id128_t;</programlisting>
 
-    <para>This union type allows accessing the 128-bit ID as 16
-    separate bytes or two 64-bit words. It is generally safer to
-    access the ID components by their 8-bit array to avoid endianness
-    issues. This union is intended to be passed call-by-value (as
-    opposed to call-by-reference) and may be directly manipulated by
+    <para>This union type allows accessing the 128-bit ID as 16 separate bytes or two 64-bit words. It is
+    generally safer to access the ID components by their 8-bit array to avoid endianness issues. This union
+    is intended to be passed by value (as opposed to pass-by-reference) and may be directly manipulated by
     clients.</para>
 
     <para>A couple of macros are defined to denote and decode 128-bit
     IDs:</para>
 
-    <para><function>SD_ID128_MAKE()</function> may be used to denote a
-    constant 128-bit ID in source code. A commonly used idiom is to
-    assign a name to a 128-bit ID using this macro:</para>
+    <para><function>SD_ID128_MAKE()</function> is used to write a constant ID in source code. A commonly used
+    idiom is to assign a name to an ID using this macro:</para>
 
     <programlisting>#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</programlisting>
 
-    <para><constant>SD_ID128_NULL</constant> may be used to refer to the 128-bit ID consisting of only
-    <constant>NUL</constant> bytes.</para>
+    <para><constant>SD_ID128_NULL</constant> defines an ID consisting of only <constant>NUL</constant> bytes
+    (i.e. all bits off).</para>
 
-    <para><function>SD_ID128_MAKE_STR()</function> is similar to <function>SD_ID128_MAKE()</function>, but creates a
-    <type>const char*</type> expression that can be conveniently used in message formats and such:</para>
+    <para><constant>SD_ID128_ALLF</constant> defines an ID consisting of only <constant>0xFF</constant> bytes
+    (i.e. all bits on).</para>
+
+    <para><function>SD_ID128_MAKE_STR()</function> is similar to <function>SD_ID128_MAKE()</function>, but
+    creates a <type>const char*</type> expression that can be conveniently used in message formats and
+    such:</para>
 
     <programlisting>#include &lt;stdio.h&gt;
 #define SD_MESSAGE_COREDUMP_STR SD_ID128_MAKE_STR(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)
@@ -102,18 +166,16 @@
   puts("Match for coredumps: MESSAGE_ID=" SD_MESSAGE_COREDUMP_STR);
 }</programlisting>
 
-    <para><function>SD_ID128_CONST_STR()</function> may be used to
-    convert constant 128-bit IDs into constant strings for output. The
-    following example code will output the string
-    "fc2e22bc6ee647b6b90729ab34a250b1":</para>
+    <para><function>SD_ID128_CONST_STR()</function> converts constant IDs into constant strings for
+    output. The following example code will output the string "fc2e22bc6ee647b6b90729ab34a250b1":</para>
     <programlisting>int main(int argc, char *argv[]) {
   puts("Match for coredumps: %s", SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
 }</programlisting>
 
-    <para><constant>SD_ID128_FORMAT_STR</constant> and <function>SD_ID128_FORMAT_VAL()</function> may
-    be used to format a 128-bit ID in a
-    <citerefentry project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-    format string, as shown in the following example:</para>
+    <para><constant>SD_ID128_FORMAT_STR</constant> and <function>SD_ID128_FORMAT_VAL()</function> is used to
+    format an ID in a <citerefentry
+    project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry> format
+    string, as shown in the following example:</para>
 
     <programlisting>int main(int argc, char *argv[]) {
   sd_id128_t id;
@@ -133,7 +195,7 @@
     best to avoid UUIDs of other variants, in order to avoid unnecessary ambiguities. All 128-bit IDs
     generated by the sd-id128 APIs strictly conform to Variant 1 Version 4 UUIDs, as per RFC 4122.</para>
 
-    <para>Use <function>sd_id128_equal()</function> to compare two 128-bit IDs:</para>
+    <para><function>sd_id128_equal()</function> compares two 128-bit IDs:</para>
 
     <programlisting>int main(int argc, char *argv[]) {
   sd_id128_t a, b, c;
@@ -145,18 +207,26 @@
   return 0;
 }</programlisting>
 
-    <para>Use <function>sd_id128_is_null()</function> to check if an 128-bit ID consists of only
-    <constant>NUL</constant> bytes:</para>
+    <para><function>sd_id128_string_equal()</function> is similar to <function>sd_id128_equal()</function>,
+    but the first ID is formatted as <type>const char*</type>. The same restrictions apply as to the first
+    argument of <function>sd_id128_from_string()</function>.</para>
+
+    <para><function>sd_id128_is_null()</function> checks if an ID consists of only <constant>NUL</constant>
+    bytes:</para>
 
     <programlisting>assert(sd_id128_is_null(SD_ID128_NULL));</programlisting>
 
-    <para>Similarly, use <function>sd_id128_is_allf()</function> to check if an 128-bit ID consists of only
+    <para>Similarly, <function>sd_id128_is_allf()</function> checks if an ID consists of only
     <constant>0xFF</constant> bytes (all bits on):</para>
 
     <programlisting>assert(sd_id128_is_allf(SD_ID128_ALLF));</programlisting>
 
-    <para>For convenience, <function>sd_id128_in_set()</function> takes a list of IDs and
-    returns true if any are equal to the first argument:</para>
+    <para><function>sd_id128_in_set_sentinel()</function> takes a list of IDs and returns true if the first
+    argument is equal to any of the subsequent arguments. The argument list is terminated by an
+    <constant>SD_ID128_NULL</constant> sentinel, which must be present.</para>
+
+    <para><function>sd_id128_in_set()</function> is a convenience function that takes a list of IDs and
+    returns true if the first argument is equal to any of the subsequent arguments:</para>
 
     <programlisting>int main(int argc, char *argv[]) {
   sd_id12_t a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
@@ -172,18 +242,25 @@
 </programlisting>
 
     <para><function>sd_id128_in_set()</function> is defined as a macro over
-    <function>sd_id128_in_set_sentinel()</function>, adding the <constant>SD_ID128_NULL</constant>
-    sentinel. Since <function>sd_id128_in_set_sentinel()</function> uses <constant>SD_ID128_NULL</constant>
-    as the sentinel, <constant>SD_ID128_NULL</constant> cannot be otherwise placed in the argument list.
-    </para>
+    <function>sd_id128_in_set_sentinel()</function>, adding the <constant>SD_ID128_NULL</constant> sentinel
+    automatically. Since <function>sd_id128_in_set_sentinel()</function> uses
+    <constant>SD_ID128_NULL</constant> as the sentinel, <constant>SD_ID128_NULL</constant> cannot be
+    otherwise placed in the argument list.</para>
 
     <para><function>sd_id128_in_setv()</function> is similar to
     <function>sd_id128_in_set_sentinel()</function>, but takes a <structname>struct varargs</structname>
     argument.</para>
 
-    <para>Note that new, randomized IDs may be generated with
+    <para>New randomized IDs may be generated with
     <citerefentry><refentrytitle>systemd-id128</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
     <command>new</command> command.</para>
+
+    <para>See
+    <citerefentry><refentrytitle>sd_id128_to_string</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+    <citerefentry><refentrytitle>sd_id128_randomize</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    and
+    <citerefentry><refentrytitle>sd_id128_get_machine</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    for information about other implemented functions.</para>
   </refsect1>
 
   <xi:include href="libsystemd-pkgconfig.xml" />
diff --git a/man/sd_bus_add_match.xml b/man/sd_bus_add_match.xml
index 3de7a6a..429a2fd 100644
--- a/man/sd_bus_add_match.xml
+++ b/man/sd_bus_add_match.xml
@@ -99,7 +99,7 @@
     synchronously when connected to a bus broker, i.e. the call sends a control message requested the match to be added
     to the broker and waits until the broker confirms the match has been installed successfully.</para>
 
-    <para><function>sd_bus_add_match_async()</function> operates very similar to
+    <para><function>sd_bus_add_match_async()</function> operates very similarly to
     <function>sd_bus_add_match()</function>, however it installs the match asynchronously, in a non-blocking
     fashion: a request is sent to the broker, but the call does not wait for a response. The
     <parameter>install_callback</parameter> function is called when the response is later received, with the response
diff --git a/man/sd_bus_creds_get_pid.xml b/man/sd_bus_creds_get_pid.xml
index 8f5b94e..56cfa4e 100644
--- a/man/sd_bus_creds_get_pid.xml
+++ b/man/sd_bus_creds_get_pid.xml
@@ -340,9 +340,8 @@
     that kernel threads do not have a command line, in which case
     -ENXIO is returned.</para>
 
-    <para><function>sd_bus_creds_get_cgroup()</function> will retrieve
-    the control group path. See <ulink
-    url="https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt">cgroups.txt</ulink>.
+    <para><function>sd_bus_creds_get_cgroup()</function> will retrieve the control group path. See <ulink
+    url="https://docs.kernel.org/admin-guide/cgroup-v2.html">Control Groups v2</ulink>.
     </para>
 
     <para><function>sd_bus_creds_get_unit()</function> will retrieve
@@ -422,12 +421,12 @@
 
     <para><function>sd_bus_creds_get_unique_name()</function> will
     retrieve the D-Bus unique name. See <ulink
-    url="http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus">The
+    url="https://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus">The
     D-Bus specification</ulink>.</para>
 
     <para><function>sd_bus_creds_get_well_known_names()</function> will
     retrieve the set of D-Bus well-known names. See <ulink
-    url="http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus">The
+    url="https://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus">The
     D-Bus specification</ulink>.</para>
 
     <para><function>sd_bus_creds_get_description()</function> will
diff --git a/man/sd_bus_default.xml b/man/sd_bus_default.xml
index f4b1d6a..48d9c9a 100644
--- a/man/sd_bus_default.xml
+++ b/man/sd_bus_default.xml
@@ -182,7 +182,7 @@
 
     <para><function>sd_bus_open_system_remote()</function> connects to the system bus on
     the specified host using
-    <citerefentry project='die-net'><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+    <citerefentry project='man-pages'><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
     <parameter>host</parameter> consists of an optional user name followed by the
     <literal>@</literal> symbol, and the hostname, optionally followed by a
     <literal>:</literal> and a port, optionally followed by a
@@ -339,7 +339,7 @@
       <citerefentry><refentrytitle>sd_bus_ref</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_close</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-      <citerefentry project='die-net'><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
     </para>
diff --git a/man/sd_bus_emit_signal.xml b/man/sd_bus_emit_signal.xml
index 08d5be4..52d08b7 100644
--- a/man/sd_bus_emit_signal.xml
+++ b/man/sd_bus_emit_signal.xml
@@ -19,6 +19,8 @@
   <refnamediv>
     <refname>sd_bus_emit_signal</refname>
     <refname>sd_bus_emit_signalv</refname>
+    <refname>sd_bus_emit_signal_to</refname>
+    <refname>sd_bus_emit_signal_tov</refname>
     <refname>sd_bus_emit_interfaces_added</refname>
     <refname>sd_bus_emit_interfaces_added_strv</refname>
     <refname>sd_bus_emit_interfaces_removed</refname>
@@ -56,6 +58,28 @@
       </funcprototype>
 
       <funcprototype>
+        <funcdef>int <function>sd_bus_emit_signal_to</function></funcdef>
+        <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
+        <paramdef>const char *<parameter>destination</parameter></paramdef>
+        <paramdef>const char *<parameter>path</parameter></paramdef>
+        <paramdef>const char *<parameter>interface</parameter></paramdef>
+        <paramdef>const char *<parameter>member</parameter></paramdef>
+        <paramdef>const char *<parameter>types</parameter></paramdef>
+        <paramdef>...</paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_bus_emit_signal_tov</function></funcdef>
+        <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
+        <paramdef>const char *<parameter>destination</parameter></paramdef>
+        <paramdef>const char *<parameter>path</parameter></paramdef>
+        <paramdef>const char *<parameter>interface</parameter></paramdef>
+        <paramdef>const char *<parameter>member</parameter></paramdef>
+        <paramdef>const char *<parameter>types</parameter></paramdef>
+        <paramdef>va_list <parameter>ap</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
         <funcdef>int <function>sd_bus_emit_interfaces_added</function></funcdef>
         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
         <paramdef>const char *<parameter>path</parameter></paramdef>
@@ -128,6 +152,11 @@
     equivalent to <function>sd_bus_message_append()</function>, except that it is called with a
     <literal>va_list</literal> instead of a variable number of arguments.</para>
 
+    <para><function>sd_bus_emit_signal_to()</function> and <function>sd_bus_emit_signal_tov()</function> are
+    identical to <function>sd_bus_emit_signal()</function> and <function>sd_bus_emit_signalv()</function>, except
+    that they can emit the signal to a single destination. Give <parameter>destination</parameter> as
+    <constant>NULL</constant> to broadcast the signal.</para>
+
     <para><function>sd_bus_emit_interfaces_added()</function> and
     <function>sd_bus_emit_interfaces_removed()</function> are used to implement the
     <function>InterfacesAdded</function> and <function>InterfacesRemoved</function> signals of the
diff --git a/man/sd_bus_enqueue_for_read.xml b/man/sd_bus_enqueue_for_read.xml
index 82b91cb..9bdf498 100644
--- a/man/sd_bus_enqueue_for_read.xml
+++ b/man/sd_bus_enqueue_for_read.xml
@@ -39,7 +39,7 @@
     <title>Description</title>
 
     <para><function>sd_bus_enqueue_for_read()</function> may be used to re-enqueue an incoming bus message on
-    the local read queue, so that it is processed and dispatched locally again, similar to how an incoming
+    the local read queue, so that it is processed and dispatched locally again, similarly to how an incoming
     message from the peer is processed. Takes a bus connection object and the message to enqueue. A reference
     is taken of the message and the caller's reference thus remains in possession of the caller. The message
     is enqueued at the end of the queue, thus will be dispatched after all other already queued messages are
diff --git a/man/sd_bus_error-example.c b/man/sd_bus_error-example.c
new file mode 100644
index 0000000..9b162eb
--- /dev/null
+++ b/man/sd_bus_error-example.c
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <sd-bus.h>
+
+int writer_with_negative_errno_return(int fd, sd_bus_error *error) {
+  const char *message = "Hello, World!\n";
+
+  ssize_t n = write(fd, message, strlen(message));
+  if (n >= 0)
+    return n; /* On success, return the number of bytes written, possibly 0. */
+
+  /* On error, initialize the error structure, and also propagate the errno
+   * value that write(2) set for us. */
+  return sd_bus_error_set_errnof(error, errno, "Failed to write to fd %i: %m", fd);
+}
diff --git a/man/sd_bus_error.xml b/man/sd_bus_error.xml
index 5697ce7..b2f62f2 100644
--- a/man/sd_bus_error.xml
+++ b/man/sd_bus_error.xml
@@ -22,6 +22,7 @@
     <refname>sd_bus_error_free</refname>
     <refname>sd_bus_error_set</refname>
     <refname>sd_bus_error_setf</refname>
+    <refname>sd_bus_error_setfv</refname>
     <refname>sd_bus_error_set_const</refname>
     <refname>sd_bus_error_set_errno</refname>
     <refname>sd_bus_error_set_errnof</refname>
@@ -75,6 +76,14 @@
       </funcprototype>
 
       <funcprototype>
+        <funcdef>int <function>sd_bus_error_setfv</function></funcdef>
+        <paramdef>sd_bus_error *<parameter>e</parameter></paramdef>
+        <paramdef>const char *<parameter>name</parameter></paramdef>
+        <paramdef>const char *<parameter>format</parameter></paramdef>
+        <paramdef>va_list <parameter>ap</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
         <funcdef>int <function>sd_bus_error_set_const</function></funcdef>
         <paramdef>sd_bus_error *<parameter>e</parameter></paramdef>
         <paramdef>const char *<parameter>name</parameter></paramdef>
@@ -153,7 +162,7 @@
     <itemizedlist>
       <listitem><para>The <structfield>name</structfield> field contains a short identifier of an error. It
       should follow the rules for error names described in the D-Bus specification, subsection <ulink
-      url="http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names">Valid
+      url="https://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names">Valid
       Names</ulink>. A number of common, standardized error names are described in
       <citerefentry><refentrytitle>sd-bus-errors</refentrytitle><manvolnum>3</manvolnum></citerefentry>, but
       additional domain-specific errors may be defined by applications.</para></listitem>
@@ -196,11 +205,15 @@
     which case an <constant>SD_BUS_ERROR_NO_MEMORY</constant> error will be set instead and
     <constant>-ENOMEM</constant> returned. </para>
 
-    <para><function>sd_bus_error_setf()</function> is similar to
-    <function>sd_bus_error_set()</function>, but takes a <citerefentry
-    project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-    format string and corresponding arguments to generate the
-    <structfield>message</structfield> field.</para>
+    <para><function>sd_bus_error_setf()</function> and <function>sd_bus_error_setfv()</function> are similar
+    to <function>sd_bus_error_set()</function>, but take a <citerefentry
+    project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry> format
+    string and corresponding arguments to generate the <structfield>message</structfield> field.
+    <function>sd_bus_error_setf()</function> uses variadic arguments, and
+    <function>sd_bus_error_setfv()</function> accepts the arguments as a
+    <citerefentry
+    project='man-pages'><refentrytitle>va_arg</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    parameter list.</para>
 
     <para><function>sd_bus_error_set_const()</function> is similar to
     <function>sd_bus_error_set()</function>, but the string parameters are not copied internally, and must
@@ -223,17 +236,15 @@
     due to lack of memory, in which case an <constant>SD_BUS_ERROR_NO_MEMORY</constant> error is set instead,
     and <constant>-ENOMEM</constant> is returned.</para>
 
-    <para><function>sd_bus_error_set_errnof()</function> is similar to
-    <function>sd_bus_error_set_errno()</function>, but in addition to
-    <parameter>error</parameter>, takes a <citerefentry
-    project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-    format string and corresponding arguments.  The
-    <structfield>message</structfield> field will be generated from
-    <parameter>format</parameter> and the arguments.</para>
-
-    <para><function>sd_bus_error_set_errnofv()</function> is similar to
-    <function>sd_bus_error_set_errnof()</function>, but takes the
-    format string parameters as <citerefentry
+    <para><function>sd_bus_error_set_errnof()</function> and <function>sd_bus_error_set_errnof()</function>
+    are similar to <function>sd_bus_error_set_errno()</function>, but in addition to
+    <parameter>error</parameter>, take a <citerefentry
+    project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry> format
+    string and corresponding arguments. The <structfield>message</structfield> field will be generated from
+    <parameter>format</parameter> and the arguments.
+    <function>sd_bus_error_set_errnof()</function> uses variadic arguments, and
+    <function>sd_bus_error_set_errnofv()</function> accepts the arguments as a
+    <citerefentry
     project='man-pages'><refentrytitle>va_arg</refentrytitle><manvolnum>3</manvolnum></citerefentry>
     parameter list.</para>
 
@@ -246,10 +257,15 @@
     values in <parameter>e</parameter>, if <parameter>e</parameter> has been set with an error value before.
     Otherwise, it will return immediately. If the strings in <parameter>e</parameter> were set using
     <function>sd_bus_error_set_const()</function>, they will be shared. Otherwise, they will be
-    copied. Returns a converted <varname>errno</varname>-like, negative error code or <constant>0</constant>.
-    Before this call, <parameter>dst</parameter> must be unset, i.e. either freshly initialized with
+    copied. Before this call, <parameter>dst</parameter> must be unset, i.e. either freshly initialized with
     <constant>NULL</constant> or reset using <function>sd_bus_error_free()</function>.</para>
 
+    <para><function>sd_bus_error_copy()</function> generally returns <constant>0</constant> or a negative
+    <varname>errno</varname>-like value based on the input parameter <parameter>e</parameter>:
+    <constant>0</constant> if it was unset and a negative integer if it was set to some error, similarly to
+    <function>sd_bus_error_set()</function>. It may however also return an error generated internally, for
+    example <constant>-ENOMEM</constant> if a memory allocation fails.</para>
+
     <para><function>sd_bus_error_move()</function> is similar to <function>sd_bus_error_copy()</function>,
     but will move any error information from <parameter>e</parameter> into <parameter>dst</parameter>,
     resetting the former. This function cannot fail, as no new memory is allocated. Note that if
@@ -287,6 +303,18 @@
   </refsect1>
 
   <refsect1>
+    <title>Reference ownership</title>
+
+    <para><structname>sd_bus_error</structname> is not reference-counted. Users should destroy resources held
+    by it by calling <function>sd_bus_error_free()</function>. Usually, error structures are allocated on the
+    stack or passed in as function parameters, but they may also be allocated dynamically, in which case it
+    is the duty of the caller to <citerefentry
+    project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry> the memory
+    held by the structure itself after freeing its contents with
+    <function>sd_bus_error_free()</function>.</para>
+  </refsect1>
+
+  <refsect1>
     <title>Return Value</title>
 
     <para>The functions <function>sd_bus_error_set()</function>, <function>sd_bus_error_setf()</function>,
@@ -297,7 +325,8 @@
     <function>sd_bus_error_set_errnofv()</function>, return <constant>0</constant> when the specified error
     value is <constant>0</constant>, and a negative errno-like value corresponding to the
     <parameter>error</parameter> parameter otherwise. If an error occurs internally, one of the negative
-    error values listed below will be returned.</para>
+    error values listed below will be returned. This allows those functions to be conveniently used in a
+    <constant>return</constant> statement, see the example below.</para>
 
     <para><function>sd_bus_error_get_errno()</function> returns
     <constant>false</constant> when <parameter>e</parameter> is
@@ -305,7 +334,9 @@
     <parameter>e-&gt;name</parameter> otherwise.</para>
 
     <para><function>sd_bus_error_copy()</function> and <function>sd_bus_error_move()</function> return a
-    negative error value converted from the source error, and zero if the error has not been set.</para>
+    negative error value converted from the source error, and zero if the error has not been set.  This
+    allows those functions to be conveniently used in a <constant>return</constant> statement, see the
+    example below.</para>
 
     <para><function>sd_bus_error_is_set()</function> returns a
     non-zero value when <parameter>e</parameter> and the
@@ -316,32 +347,18 @@
     <function>sd_bus_error_has_names_sentinel()</function> return a non-zero value when <parameter>e</parameter> is
     non-<constant>NULL</constant> and the <structfield>name</structfield> field is equal to one of the given
     names, zero otherwise.</para>
-  </refsect1>
-
-  <refsect1>
-    <title>Reference ownership</title>
-    <para><structname>sd_bus_error</structname> is not reference
-    counted. Users should destroy resources held by it by calling
-    <function>sd_bus_error_free()</function>. Usually, error structures
-    are allocated on the stack or passed in as function parameters,
-    but they may also be allocated dynamically, in which case it is
-    the duty of the caller to <citerefentry
-    project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-    the memory held by the structure itself after freeing its contents
-    with <function>sd_bus_error_free()</function>.</para>
 
     <refsect2>
       <title>Errors</title>
 
-      <para>Returned errors may indicate the following problems:</para>
+      <para>Return value may indicate the following problems in the invocation of the function itself:</para>
 
       <variablelist>
-
         <varlistentry>
           <term><constant>-EINVAL</constant></term>
 
-          <listitem><para>Error was already set in <structname>sd_bus_error</structname> structure when one
-          the error-setting functions was called.</para></listitem>
+          <listitem><para>Error was already set in the <structname>sd_bus_error</structname> structure when
+          one the error-setting functions was called.</para></listitem>
         </varlistentry>
 
         <varlistentry>
@@ -350,9 +367,29 @@
           <listitem><para>Memory allocation failed.</para></listitem>
         </varlistentry>
       </variablelist>
+
+      <para>On success, <function>sd_bus_error_set()</function>, <function>sd_bus_error_setf()</function>,
+      <function>sd_bus_error_set_const()</function>, <function>sd_bus_error_set_errno()</function>,
+      <function>sd_bus_error_set_errnof()</function>, <function>sd_bus_error_set_errnofv()</function>,
+      <function>sd_bus_error_copy()</function>, and <function>sd_bus_error_move()</function> will return a
+      negative converted <varname>errno</varname>-style value, or <constant>0</constant> if the error
+      parameter is <constant>NULL</constant> or unset. D-Bus errors are converted to the integral
+      <varname>errno</varname>-style value, and the mapping mechanism is extensible, see the discussion
+      above. This effectively means that almost any negative <varname>errno</varname>-style value can be
+      returned.</para>
     </refsect2>
   </refsect1>
 
+  <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>Using the negative return value to propagate an error</title>
+
+      <programlisting><xi:include href="sd_bus_error-example.c" parse="text" /></programlisting>
+    </example>
+  </refsect1>
+
   <xi:include href="libsystemd-pkgconfig.xml" />
 
   <refsect1>
@@ -364,7 +401,7 @@
       <citerefentry><refentrytitle>sd-bus-errors</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_error_add_map</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-      <citerefentry project='die-net'><refentrytitle>strerror_r</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+      <citerefentry project='man-pages'><refentrytitle>strerror_r</refentrytitle><manvolnum>3</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/sd_bus_error_add_map.xml b/man/sd_bus_error_add_map.xml
index 2976233..a49b554 100644
--- a/man/sd_bus_error_add_map.xml
+++ b/man/sd_bus_error_add_map.xml
@@ -132,7 +132,7 @@
       <citerefentry><refentrytitle>sd_bus_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd-bus-errors</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-      <citerefentry project='die-net'><refentrytitle>strerror_r</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+      <citerefentry project='man-pages'><refentrytitle>strerror_r</refentrytitle><manvolnum>3</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/sd_bus_get_fd.xml b/man/sd_bus_get_fd.xml
index a8a1615..a738f85 100644
--- a/man/sd_bus_get_fd.xml
+++ b/man/sd_bus_get_fd.xml
@@ -66,23 +66,21 @@
     <constant>POLLIN</constant>, <constant>POLLOUT</constant>, … events, or negative on error.
     </para>
 
-    <para><function>sd_bus_get_timeout()</function> returns the timeout in µs to pass to
-    <function>poll()</function> or a similar call when waiting for events on the specified bus
-    connection. The returned timeout may be zero, in which case a subsequent I/O polling call
-    should be invoked in non-blocking mode. The returned timeout may be
-    <constant>UINT64_MAX</constant> in which case the I/O polling call may block indefinitely,
-    without any applied timeout. Note that the returned timeout should be considered only a
-    maximum sleeping time. It is permissible (and even expected) that shorter timeouts are used by
-    the calling program, in case other event sources are polled in the same event loop. Note that
-    the returned time-value is absolute, based of <constant>CLOCK_MONOTONIC</constant> and specified 
-    in microseconds. When converting this value in order to pass it as third argument to 
-    <function>poll()</function> (which expects relative milliseconds), care should be taken to convert
-    to a relative time and use a division that rounds up to ensure the I/O polling operation
-    doesn't sleep for shorter than necessary, which might result in unintended busy looping
-    (alternatively, use
-    <citerefentry project='man-pages'><refentrytitle>ppoll</refentrytitle><manvolnum>2</manvolnum></citerefentry>
-    instead of plain <function>poll()</function>, which understands timeouts with nano-second
-    granularity).</para>
+    <para><function>sd_bus_get_timeout()</function> returns the <emphasis>absolute</emphasis> time-out in µs,
+    from which the relative time-out to pass to <function>poll()</function> (or a similar call) can be
+    derived, when waiting for events on the specified bus connection. The returned timeout may be zero, in
+    which case a subsequent I/O polling call should be invoked in non-blocking mode. The returned timeout may
+    be <constant>UINT64_MAX</constant> in which case the I/O polling call may block indefinitely, without any
+    applied timeout. Note that the returned timeout should be considered only a maximum sleeping time. It is
+    permissible (and even expected) that shorter timeouts are used by the calling program, in case other
+    event sources are polled in the same event loop. Note that the returned time-value is absolute, based of
+    <constant>CLOCK_MONOTONIC</constant> and specified in microseconds. When converting this value in order
+    to pass it as third argument to <function>poll()</function> (which expects relative milliseconds), care
+    should be taken to convert to a relative time and use a division that rounds up to ensure the I/O polling
+    operation doesn't sleep for shorter than necessary, which might result in unintended busy looping
+    (alternatively, use <citerefentry
+    project='man-pages'><refentrytitle>ppoll</refentrytitle><manvolnum>2</manvolnum></citerefentry> instead
+    of plain <function>poll()</function>, which understands timeouts with nano-second granularity).</para>
 
     <para>These three functions are useful to hook up a bus connection object with an external or
     manual event loop involving <function>poll()</function> or a similar I/O polling call. Before
diff --git a/man/sd_bus_message_append.xml b/man/sd_bus_message_append.xml
index a1c8736..98667ad 100644
--- a/man/sd_bus_message_append.xml
+++ b/man/sd_bus_message_append.xml
@@ -88,7 +88,7 @@
     the call.</para>
 
     <para>For further details on the D-Bus type system, please consult the
-    <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html#type-system">D-Bus Specification</ulink>.
+    <ulink url="https://dbus.freedesktop.org/doc/dbus-specification.html#type-system">D-Bus Specification</ulink>.
     </para>
 
     <table>
diff --git a/man/sd_bus_message_append_array.xml b/man/sd_bus_message_append_array.xml
index cc8e0db..da72b78 100644
--- a/man/sd_bus_message_append_array.xml
+++ b/man/sd_bus_message_append_array.xml
@@ -79,7 +79,7 @@
     <literal>i</literal>, <literal>u</literal>, <literal>x</literal>,
     <literal>t</literal>, <literal>d</literal> (but not
     <literal>b</literal>), as defined by the <ulink
-    url="http://dbus.freedesktop.org/doc/dbus-specification.html#basic-types">Basic
+    url="https://dbus.freedesktop.org/doc/dbus-specification.html#basic-types">Basic
     Types</ulink> section of the D-Bus specification, and listed in
     <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
     Pointer <parameter>p</parameter> must point to an array of size
@@ -172,7 +172,7 @@
       <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>memfd_create</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
-      <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
+      <ulink url="https://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
     </para>
   </refsect1>
 
diff --git a/man/sd_bus_message_append_basic.xml b/man/sd_bus_message_append_basic.xml
index aca4d1f..3509095 100644
--- a/man/sd_bus_message_append_basic.xml
+++ b/man/sd_bus_message_append_basic.xml
@@ -43,7 +43,7 @@
     <parameter>p</parameter> is interpreted.
     <parameter>type</parameter> must be one of the basic types as
     defined by the <ulink
-    url="http://dbus.freedesktop.org/doc/dbus-specification.html#basic-types">Basic
+    url="https://dbus.freedesktop.org/doc/dbus-specification.html#basic-types">Basic
     Types</ulink> section of the D-Bus specification, and listed in
     the table below.
     </para>
@@ -254,7 +254,7 @@
       <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_message_read_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-      <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
+      <ulink url="https://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
     </para>
   </refsect1>
 
diff --git a/man/sd_bus_message_append_string_memfd.xml b/man/sd_bus_message_append_string_memfd.xml
index 8559c60..5a4db0d 100644
--- a/man/sd_bus_message_append_string_memfd.xml
+++ b/man/sd_bus_message_append_string_memfd.xml
@@ -112,7 +112,7 @@
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-      <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
+      <ulink url="https://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
     </para>
   </refsect1>
 
diff --git a/man/sd_bus_message_append_strv.xml b/man/sd_bus_message_append_strv.xml
index 67ba404..8bf78dd 100644
--- a/man/sd_bus_message_append_strv.xml
+++ b/man/sd_bus_message_append_strv.xml
@@ -74,7 +74,7 @@
       <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_message_append_array</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-      <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
+      <ulink url="https://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
     </para>
   </refsect1>
 
diff --git a/man/sd_bus_message_dump.xml b/man/sd_bus_message_dump.xml
index eac0541..83a4a4e 100644
--- a/man/sd_bus_message_dump.xml
+++ b/man/sd_bus_message_dump.xml
@@ -44,9 +44,10 @@
     <title>Description</title>
 
     <para>The <function>sd_bus_message_dump()</function> function writes a textual representation of the
-    message <parameter>m</parameter> to the stream <parameter>f</parameter>. This function is intended to be
-    used for debugging purposes, and the output is neither stable nor designed to be machine readable.
-    </para>
+    message <parameter>m</parameter> to the stream <parameter>f</parameter>. If <parameter>f</parameter> is
+    <constant>NULL</constant>, standard output (<constant>stdio</constant>) will be used. This function is
+    intended to be used for debugging purposes, and the output is neither stable nor designed to be machine
+    readable.</para>
 
     <para>The <parameter>flags</parameter> parameter may be used to modify the output. With
     <constant>SD_BUS_MESSAGE_DUMP_WITH_HEADER</constant>, a header that specifies the message type and flags
diff --git a/man/sd_bus_message_new.xml b/man/sd_bus_message_new.xml
index 4907c5a..c56df61 100644
--- a/man/sd_bus_message_new.xml
+++ b/man/sd_bus_message_new.xml
@@ -99,14 +99,13 @@
     <citerefentry><refentrytitle>sd_bus_message_set_allow_interactive_authorization</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
     </para>
 
-    <para><function>sd_bus_message_ref()</function> increases the reference counter of
+    <para><function>sd_bus_message_ref()</function> increases the internal reference counter of
     <parameter>m</parameter> by one.</para>
 
-    <para><function>sd_bus_message_unref()</function> decreases the reference counter of
+    <para><function>sd_bus_message_unref()</function> decreases the internal reference counter of
     <parameter>m</parameter> by one. Once the reference count has dropped to zero, message object is
-    destroyed and cannot be used anymore, so further calls to
-    <function>sd_bus_message_ref()</function> or <function>sd_bus_message_unref()</function> are
-    illegal.</para>
+    destroyed and cannot be used anymore, so further calls to <function>sd_bus_message_ref()</function> or
+    <function>sd_bus_message_unref()</function> are illegal.</para>
 
     <para><function>sd_bus_message_unrefp()</function> is similar to
     <function>sd_bus_message_unref()</function> but takes a pointer to a
diff --git a/man/sd_bus_message_new_signal.xml b/man/sd_bus_message_new_signal.xml
index 17862de..3f13889 100644
--- a/man/sd_bus_message_new_signal.xml
+++ b/man/sd_bus_message_new_signal.xml
@@ -18,6 +18,7 @@
 
   <refnamediv>
     <refname>sd_bus_message_new_signal</refname>
+    <refname>sd_bus_message_new_signal_to</refname>
 
     <refpurpose>Create a signal message</refpurpose>
   </refnamediv>
@@ -34,6 +35,16 @@
         <paramdef>const char *<parameter>interface</parameter></paramdef>
         <paramdef>const char *<parameter>member</parameter></paramdef>
       </funcprototype>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_new_signal_to</funcdef>
+        <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
+        <paramdef>sd_bus_message **<parameter>m</parameter></paramdef>
+        <paramdef>const char *<parameter>destination</parameter></paramdef>
+        <paramdef>const char *<parameter>path</parameter></paramdef>
+        <paramdef>const char *<parameter>interface</parameter></paramdef>
+        <paramdef>const char *<parameter>member</parameter></paramdef>
+      </funcprototype>
     </funcsynopsis>
   </refsynopsisdiv>
 
@@ -49,6 +60,12 @@
     for a short description of the meaning of the <parameter>path</parameter>,
     <parameter>interface</parameter>, and <parameter>member</parameter> parameters.
     </para>
+
+    <para><function>sd_bus_message_new_signal_to()</function> is a shorthand for creating a new bus message
+    to a specific destination. It's behavior is similar to calling
+    <function>sd_bus_message_new_signal()</function> followed by calling
+    <citerefentry><refentrytitle>sd_bus_message_set_destination</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+    </para>
   </refsect1>
 
   <refsect1>
@@ -115,6 +132,7 @@
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_bus_emit_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>sd_bus_message_set_destination</refentrytitle><manvolnum>3</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/sd_bus_message_read.xml b/man/sd_bus_message_read.xml
index 0b92125..aa325f3 100644
--- a/man/sd_bus_message_read.xml
+++ b/man/sd_bus_message_read.xml
@@ -172,7 +172,23 @@
     <para>On success, these functions return a non-negative integer. On failure, they return a negative
     errno-style error code.</para>
 
-    <xi:include href="sd_bus_message_read_basic.xml" xpointer="errors" />
+    <refsect2 id='errors'>
+      <title>Errors</title>
+
+      <para>Returned errors may indicate the following problems:</para>
+
+      <variablelist>
+        <xi:include href="sd_bus_message_read_basic.xml" xpointer="errors-einval"/>
+        <xi:include href="sd_bus_message_read_basic.xml" xpointer="errors-enxio"/>
+        <xi:include href="sd_bus_message_read_basic.xml" xpointer="errors-ebadmsg"/>
+        <varlistentry>
+          <term><constant>-EBUSY</constant></term>
+
+          <listitem><para>When reading from a container, this error will be returned if unread elements
+          are left in the container.</para></listitem>
+        </varlistentry>
+      </variablelist>
+    </refsect2>
   </refsect1>
 
   <xi:include href="libsystemd-pkgconfig.xml" />
diff --git a/man/sd_bus_message_read_basic.xml b/man/sd_bus_message_read_basic.xml
index bd5a149..5595143 100644
--- a/man/sd_bus_message_read_basic.xml
+++ b/man/sd_bus_message_read_basic.xml
@@ -199,21 +199,21 @@
       <para>Returned errors may indicate the following problems:</para>
 
       <variablelist>
-        <varlistentry>
+        <varlistentry id="errors-einval">
           <term><constant>-EINVAL</constant></term>
 
           <listitem><para>Specified type string is invalid or the message parameter is
           <constant>NULL</constant>.</para></listitem>
         </varlistentry>
 
-        <varlistentry>
+        <varlistentry id="errors-enxio">
           <term><constant>-ENXIO</constant></term>
 
           <listitem><para>The message does not contain the specified type at current position.
           </para></listitem>
         </varlistentry>
 
-        <varlistentry>
+        <varlistentry id="errors-ebadmsg">
           <term><constant>-EBADMSG</constant></term>
 
           <listitem><para>The message cannot be parsed.</para></listitem>
diff --git a/man/sd_bus_message_read_strv.xml b/man/sd_bus_message_read_strv.xml
index 50580d8..6f46c18 100644
--- a/man/sd_bus_message_read_strv.xml
+++ b/man/sd_bus_message_read_strv.xml
@@ -17,6 +17,7 @@
 
   <refnamediv>
     <refname>sd_bus_message_read_strv</refname>
+    <refname>sd_bus_message_read_strv_extend</refname>
 
     <refpurpose>Access an array of strings in a message</refpurpose>
   </refnamediv>
@@ -30,26 +31,39 @@
         <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
         <paramdef>char ***<parameter>l</parameter></paramdef>
       </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_bus_message_read_strv_extend</function></funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>char ***<parameter>l</parameter></paramdef>
+      </funcprototype>
     </funcsynopsis>
   </refsynopsisdiv>
 
   <refsect1>
     <title>Description</title>
 
-    <para><function>sd_bus_message_read_strv()</function> gives access to an array of string-like items in
+    <para><function>sd_bus_message_read_strv()</function> reads an array of string-like items from the
     message <parameter>m</parameter>. The "read pointer" in the message must be right before an array of
     strings (D-Bus type <literal>as</literal>), object paths (D-Bus type <literal>ao</literal>), or
     signatures (D-Bus type <literal>ag</literal>). On success, a pointer to a
-    <constant>NULL</constant>-terminated array of strings is returned in the output parameter
+    <constant>NULL</constant>-terminated array of strings (strv) is returned in the output parameter
     <parameter>l</parameter>. Note that ownership of this array is transferred to the caller. Hence, the
     caller is responsible for freeing this array and its contents.</para>
+
+    <para><function>sd_bus_message_read_strv_extend()</function> is similar, but the second parameter is an
+    input-output parameter. If <parameter>*l</parameter> is <constant>NULL</constant>, if behaves identically
+    to <function>sd_bus_message_read_strv()</function>. Otherwise, <parameter>*l</parameter> must point to a
+    strv, which will be reallocated and extended with additional strings. This function is particularly
+    useful when combining multiple lists of strings in a message or messages into a single array of strings.
+    </para>
   </refsect1>
 
   <refsect1>
     <title>Return Value</title>
 
-    <para>On success, <function>sd_bus_message_read_strv()</function> returns a non-negative integer. On
-    failure, it returns a negative errno-style error code.</para>
+    <para>On success, these functions return a non-negative integer. On failure, they return a negative
+    errno-style error code.</para>
 
     <refsect2>
       <title>Errors</title>
diff --git a/man/sd_bus_new.xml b/man/sd_bus_new.xml
index 355b34b..b451061 100644
--- a/man/sd_bus_new.xml
+++ b/man/sd_bus_new.xml
@@ -109,7 +109,7 @@
     pointer to an <type>sd_bus</type> object. This call is useful in
     conjunction with GCC's and LLVM's <ulink
     url="https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html">Clean-up
-    Variable Attribute</ulink>. Note that this function is defined as
+    Variable Attribute</ulink>. Note that this function is defined as an
     inline function. Use a declaration like the following, in order to
     allocate a bus object that is freed automatically as the code
     block is left:</para>
@@ -119,17 +119,17 @@
   int r;
   …
   r = sd_bus_default(&amp;bus);
-  if (r &lt; 0)
-    fprintf(stderr, "Failed to allocate bus: %s\n", strerror(-r));
+  if (r &lt; 0) {
+    errno = -r;
+    fprintf(stderr, "Failed to allocate bus: %m\n");
+  }
   …
 }</programlisting>
 
-    <para><function>sd_bus_ref()</function> and <function>sd_bus_unref()</function>
-    execute no operation if the passed in bus object address is
-    <constant>NULL</constant>. <function>sd_bus_unrefp()</function> will first
-    dereference its argument, which must not be <constant>NULL</constant>, and will
-    execute no operation if <emphasis>that</emphasis> is <constant>NULL</constant>.
-    </para>
+    <para><function>sd_bus_ref()</function> and <function>sd_bus_unref()</function> execute no operation if
+    the argument is <constant>NULL</constant>. <function>sd_bus_unrefp()</function> will first dereference
+    its argument, which must not be <constant>NULL</constant>, and will execute no operation if
+    <emphasis>that</emphasis> is <constant>NULL</constant>.</para>
 
     <para><function>sd_bus_close_unref()</function> is similar to <function>sd_bus_unref()</function>, but
     first executes
diff --git a/man/sd_bus_slot_ref.xml b/man/sd_bus_slot_ref.xml
index c200bc4..8ada3cb 100644
--- a/man/sd_bus_slot_ref.xml
+++ b/man/sd_bus_slot_ref.xml
@@ -46,10 +46,10 @@
   <refsect1>
     <title>Description</title>
 
-    <para><function>sd_bus_slot_ref()</function> increases the reference counter of
+    <para><function>sd_bus_slot_ref()</function> increases the internal reference counter of
     <parameter>slot</parameter> by one.</para>
 
-    <para><function>sd_bus_slot_unref()</function> decreases the reference counter of
+    <para><function>sd_bus_slot_unref()</function> decreases the internal reference counter of
     <parameter>slot</parameter> by one. Once the reference count has dropped to zero, slot object is
     destroyed and cannot be used anymore, so further calls to <function>sd_bus_slot_ref()</function>
     or <function>sd_bus_slot_unref()</function> are illegal.</para>
diff --git a/man/sd_bus_wait.xml b/man/sd_bus_wait.xml
index 5858be1..eaad91f 100644
--- a/man/sd_bus_wait.xml
+++ b/man/sd_bus_wait.xml
@@ -46,7 +46,7 @@
     <citerefentry><refentrytitle>sd_bus_process</refentrytitle><manvolnum>3</manvolnum></citerefentry> returns zero,
     indicating that no work is pending on the connection. Internally, this call invokes <citerefentry
     project='man-pages'><refentrytitle>ppoll</refentrytitle><manvolnum>2</manvolnum></citerefentry>, to wait for I/O on
-    the bus connection. If the <parameter>timeout_sec</parameter> parameter is specified, the call will block at most
+    the bus connection. If the <parameter>timeout_usec</parameter> parameter is specified, the call will block at most
     for the specified amount of time in µs. Pass <constant>UINT64_MAX</constant> to permit it to sleep
     indefinitely.</para>
 
diff --git a/man/sd_device_get_syspath.xml b/man/sd_device_get_syspath.xml
new file mode 100644
index 0000000..54cb87a
--- /dev/null
+++ b/man/sd_device_get_syspath.xml
@@ -0,0 +1,200 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="sd_device_get_syspath"
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sd_device_get_syspath</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_device_get_syspath</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_device_get_syspath</refname>
+    <refname>sd_device_get_devpath</refname>
+    <refname>sd_device_get_sysname</refname>
+    <refname>sd_device_get_sysnum</refname>
+    <refname>sd_device_get_subsystem</refname>
+    <refname>sd_device_get_devtype</refname>
+    <refname>sd_device_get_devname</refname>
+    <refname>sd_device_get_devnum</refname>
+    <refname>sd_device_get_ifindex</refname>
+    <refname>sd_device_get_driver</refname>
+    <refname>sd_device_get_diskseq</refname>
+
+    <refpurpose>Returns various fields of device objects</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-device.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_syspath</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>const char **<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_devpath</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>const char **<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_sysname</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>const char **<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_sysnum</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>const char **<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_subsystem</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>const char **<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_devtype</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>const char **<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_devname</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>const char **<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_devnum</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>dev_t *<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_ifindex</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>int *<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_driver</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>const char **<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_device_get_diskseq</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+        <paramdef>uint64_t *<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_device_get_syspath()</function> returns the sysfs path of the specified device record,
+    including the <filename>/sys</filename> prefix. Example: <filename>/sys/devices/virtual/tty/tty7</filename></para>
+
+    <para><function>sd_device_get_devpath()</function> returns the sysfs path of the specified device record,
+    excluding the <filename>/sys</filename> prefix. Example: <filename>/devices/virtual/tty/tty7</filename></para>
+
+    <para><function>sd_device_get_sysname()</function> returns the sysfs name of the specified device record,
+    i.e. the last component of the sysfs path. Example: <literal>tty7</literal> for the device
+    <filename>/sys/devices/virtual/tty/tty7</filename></para>
+
+    <para><function>sd_device_get_sysnum()</function> returns the sysfs device number of the specified device
+    record, i.e. the numeric suffix of the last component of the sysfs path. Example: <literal>7</literal>
+    for the device <filename>/sys/devices/virtual/tty/tty7</filename></para>
+
+    <para><function>sd_device_get_subsystem()</function> returns the kernel subsystem of the specified device
+    record. This is a short string fitting into a filename, and thus does not contain a slash and cannot be
+    empty. Example: <literal>tty</literal>, <literal>block</literal> or <literal>net</literal>.</para>
+
+    <para><function>sd_device_get_devtype()</function> returns the device type of the specified device
+    record, if the subsystem manages multiple types of devices. Example: for devices of the
+    <literal>block</literal> subsystem this can be <literal>disk</literal> or <literal>partition</literal>
+    </para>
+
+    <para><function>sd_device_get_devname()</function> returns the device node path of the specified device
+    record if the device has a device node. Example: for <filename>/sys/devices/virtual/tty/tty7</filename>
+    the string <filename>/dev/tty7</filename> is typically returned.</para>
+
+    <para><function>sd_device_get_devnum()</function> returns the device node major/minor
+    (i.e. <type>dev_t</type>) of the specified device record if the device has a device node (i.e. the one
+    returned by <function>sd_device_get_devname()</function>). For devices belonging to the
+    <literal>block</literal> subsystem this refers to a block device node, in all other cases to a character
+    device node. Example: for the <filename>/sys/devices/virtual/tty/tty7</filename> device this typically
+    returns the device number with major/minor <literal>4:7</literal>.</para>
+
+    <para><function>sd_device_get_ifindex()</function> returns the network interface index of the specified
+    device record, if the device encapsulates a network interface device, i.e. belongs to the
+    <literal>net</literal> subsystem. Example: the <literal>lo</literal> interface typically has interface
+    index 1.</para>
+
+    <para><function>sd_device_get_driver()</function> returns the kernel driver name attached to the
+    device. Note that the driver field is set on the devices consumed by the driver, not on the device
+    created by it. Example: a PCI device <filename>/sys/bus/pci/devices/0000:00:1f.6</filename> might be
+    attached to a driver <literal>e1000e</literal>.</para>
+
+    <para><function>sd_device_get_diskseq()</function> returns the kernel disk sequence number of the block
+    device. This number monotonically increases whenever a backing medium of a block device changes without
+    the device name changing, and is relevant for block devices encapsulating devices with changing media
+    (e.g. floppy or CD-ROM), or loopback block devices. Only defined for block devices, i.e. those of
+    subsystem <literal>block</literal>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, these calls return 0 or a positive integer. On failure, they return a negative
+    errno-style error code.</para>
+
+    <refsect2>
+      <title>Errors</title>
+
+      <para>Returned errors may indicate the following problems:</para>
+
+      <variablelist>
+        <varlistentry>
+          <term><constant>-EINVAL</constant></term>
+
+          <listitem><para>A specified parameter is invalid.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><constant>-ENOENT</constant></term>
+
+          <listitem><para>The requested field is not present in the device record.</para></listitem>
+        </varlistentry>
+
+      </variablelist>
+    </refsect2>
+  </refsect1>
+
+  <xi:include href="libsystemd-pkgconfig.xml" />
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_device_ref.xml b/man/sd_device_ref.xml
new file mode 100644
index 0000000..2b8512a
--- /dev/null
+++ b/man/sd_device_ref.xml
@@ -0,0 +1,85 @@
+<?xml version='1.0'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="sd_device_ref" xmlns:xi="http://www.w3.org/2001/XInclude">
+  <refentryinfo>
+    <title>sd_device_ref</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_device_ref</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_device_ref</refname>
+    <refname>sd_device_unref</refname>
+    <refname>sd_device_unrefp</refname>
+
+    <refpurpose>Create or destroy references to a device object</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-device.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>sd_device* <function>sd_device_ref</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>sd_device* <function>sd_device_unref</function></funcdef>
+        <paramdef>sd_device *<parameter>device</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>void <function>sd_device_unrefp</function></funcdef>
+        <paramdef>sd_device **<parameter>device</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+
+    <para><function>sd_device_ref()</function> increases the internal reference counter of
+    <parameter>device</parameter> by one.</para>
+
+    <para><function>sd_device_unref()</function> decreases the internal reference counter of
+    <parameter>device</parameter> by one. Once the reference count has dropped to zero,
+    <parameter>device</parameter> is destroyed and cannot be used anymore, so further calls to
+    <function>sd_device_ref()</function> or <function>sd_device_unref()</function> are illegal.</para>
+
+    <para><function>sd_device_unrefp()</function> is similar to <function>sd_device_unref()</function> but
+    takes a pointer to a pointer to an <type>sd_device</type> object. This call is useful in conjunction with
+    GCC's and LLVM's <ulink url="https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html">Clean-up
+    Variable Attribute</ulink>. Note that this function is defined as an inline function. Use a declaration
+    like the following, in order to allocate a device object that is freed automatically as the code block is
+    left:</para>
+
+    <programlisting>{
+  __attribute__((cleanup(sd_device_unrefp))) sd_device *device = NULL;
+  int r;
+  …
+  r = sd_device_new_from_syspath(&amp;device, "…");
+  if (r &lt; 0) {
+    errno = -r;
+    fprintf(stderr, "Failed to allocate device: %m\n");
+  }
+  …
+}</programlisting>
+
+    <para><function>sd_device_ref()</function> and <function>sd_device_unref()</function> execute no
+    operation if the argument is <constant>NULL</constant>. <function>sd_device_unrefp()</function> will
+    first dereference its argument, which must not be <constant>NULL</constant>, and will execute no
+    operation if <emphasis>that</emphasis> is <constant>NULL</constant>.</para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para><function>sd_device_ref()</function> always returns the argument, and
+    <function>sd_device_unref()</function> always returns <constant>NULL</constant>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/sd_event_add_child.xml b/man/sd_event_add_child.xml
index 2961b3e..fec754d 100644
--- a/man/sd_event_add_child.xml
+++ b/man/sd_event_add_child.xml
@@ -114,25 +114,29 @@
     event loop. The event loop object is specified in the <parameter>event</parameter> parameter, the event
     source object is returned in the <parameter>source</parameter> parameter. The <parameter>pid</parameter>
     parameter specifies the PID of the process to watch, which must be a direct child process of the invoking
-    process. The <parameter>handler</parameter> must reference a function to call when the process changes
-    state. The handler function will be passed the <parameter>userdata</parameter> pointer, which may be
-    chosen freely by the caller. The handler also receives a pointer to a <structname>siginfo_t</structname>
-    structure containing information about the child process event. The <parameter>options</parameter>
-    parameter determines which state changes will be watched for. It must contain an OR-ed mask of
-    <constant>WEXITED</constant> (watch for the child process terminating), <constant>WSTOPPED</constant>
-    (watch for the child process being stopped by a signal), and <constant>WCONTINUED</constant> (watch for
-    the child process being resumed by a signal). See <citerefentry
-    project='man-pages'><refentrytitle>waitid</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
-    further information.</para>
+    process. The <parameter>options</parameter> parameter determines which state changes will be watched for.
+    It must contain an OR-ed mask of <constant>WEXITED</constant> (watch for the child process terminating),
+    <constant>WSTOPPED</constant> (watch for the child process being stopped by a signal), and
+    <constant>WCONTINUED</constant> (watch for the child process being resumed by a signal). See
+    <citerefentry project='man-pages'><refentrytitle>waitid</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+    for further information.</para>
 
-    <para>Only a single handler may be installed for a specific
-    child process. The handler is enabled for a single event
-    (<constant>SD_EVENT_ONESHOT</constant>), but this may be changed
-    with
+    <para>The <parameter>handler</parameter> must be a function to call when the process changes state or
+    <constant>NULL</constant>. The handler function will be passed the <parameter>userdata</parameter>
+    pointer, which may be chosen freely by the caller. The handler also receives a pointer to a
+    <structname>siginfo_t</structname> structure containing information about the child process event. The
+    handler may return negative to signal an error (see below), other return values are ignored. If
+    <parameter>handler</parameter> is <constant>NULL</constant>, a default handler that calls
+    <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry> will be
+    used.</para>
+
+    <para>Only a single handler may be installed for a specific child process. The handler is enabled for a
+    single event (<constant>SD_EVENT_ONESHOT</constant>), but this may be changed with
     <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-    If the handler function returns a negative error code, it will be
-    disabled after the invocation, even if the
-    <constant>SD_EVENT_ON</constant> mode was requested before.
+    If the handler function returns a negative error code, it will either be disabled after the invocation,
+    even if the <constant>SD_EVENT_ON</constant> mode was requested before, or it will cause the loop to
+    terminate, see
+    <citerefentry><refentrytitle>sd_event_source_set_exit_on_failure</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
     </para>
 
     <para>To destroy an event source object use
@@ -308,6 +312,16 @@
   <xi:include href="libsystemd-pkgconfig.xml" />
 
   <refsect1>
+    <title>Example</title>
+
+    <example>
+      <title>Exit loop when the child terminates</title>
+
+      <programlisting><xi:include href="event-quick-child.c" parse="text" /></programlisting>
+    </example>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
 
     <para>
diff --git a/man/sd_event_add_defer.xml b/man/sd_event_add_defer.xml
index 54e8823..e56e16a 100644
--- a/man/sd_event_add_defer.xml
+++ b/man/sd_event_add_defer.xml
@@ -66,14 +66,17 @@
   <refsect1>
     <title>Description</title>
 
-    <para>These three functions add new static event sources to an
-    event loop. The event loop object is specified in the
-    <parameter>event</parameter> parameter, the event source object is
-    returned in the <parameter>source</parameter> parameter. The event
-    sources are enabled statically and will "fire" when the event loop
-    is run and the conditions described below are met. The handler
-    function will be passed the <parameter>userdata</parameter>
-    pointer, which may be chosen freely by the caller.</para>
+    <para>These three functions add new static event sources to an event loop. The event loop object is
+    specified in the <parameter>event</parameter> parameter, the event source object is returned in the
+    <parameter>source</parameter> parameter. The event sources are enabled statically and will "fire" when
+    the event loop is run and the conditions described below are met.</para>
+
+    <para>The <parameter>handler</parameter> is a function to call or <constant>NULL</constant>. The handler
+    function will be passed the <parameter>userdata</parameter> pointer, which may be chosen freely by the
+    caller. The handler may return negative to signal an error (see below), other return values are
+    ignored. If <parameter>handler</parameter> is <constant>NULL</constant>, a default handler that calls
+    <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry> will be
+    used.</para>
 
     <para><function>sd_event_add_defer()</function> adds a new event
     source that will be dispatched instantly, before the event loop
@@ -103,9 +106,11 @@
     (<constant>SD_EVENT_ON</constant>) or to make it fire just once
     (<constant>SD_EVENT_ONESHOT</constant>).</para>
 
-    <para>If the handler function returns a negative error code, it
-    will be disabled after the invocation, even if the
-    <constant>SD_EVENT_ON</constant> mode was requested before.</para>
+    <para>If the handler function returns a negative error code, it will either be disabled after the
+    invocation, even if the <constant>SD_EVENT_ON</constant> mode was requested before, or it will cause the
+    loop to terminate, see
+    <citerefentry><refentrytitle>sd_event_source_set_exit_on_failure</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+    </para>
 
     <para>To destroy an event source object use
     <citerefentry><refentrytitle>sd_event_source_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
diff --git a/man/sd_event_add_inotify.xml b/man/sd_event_add_inotify.xml
index 1681143..c7af7bd 100644
--- a/man/sd_event_add_inotify.xml
+++ b/man/sd_event_add_inotify.xml
@@ -17,6 +17,7 @@
 
   <refnamediv>
     <refname>sd_event_add_inotify</refname>
+    <refname>sd_event_add_inotify_fd</refname>
     <refname>sd_event_source_get_inotify_mask</refname>
     <refname>sd_event_inotify_handler_t</refname>
 
@@ -47,6 +48,16 @@
       </funcprototype>
 
       <funcprototype>
+        <funcdef>int <function>sd_event_add_inotify_fd</function></funcdef>
+        <paramdef>sd_event *<parameter>event</parameter></paramdef>
+        <paramdef>sd_event_source **<parameter>source</parameter></paramdef>
+        <paramdef>int <parameter>fd</parameter></paramdef>
+        <paramdef>uint32_t <parameter>mask</parameter></paramdef>
+        <paramdef>sd_event_inotify_handler_t <parameter>handler</parameter></paramdef>
+        <paramdef>void *<parameter>userdata</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
         <funcdef>int <function>sd_event_source_get_inotify_mask</function></funcdef>
         <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
         <paramdef>uint32_t *<parameter>mask</parameter></paramdef>
@@ -59,28 +70,40 @@
     <title>Description</title>
 
     <para><function>sd_event_add_inotify()</function> adds a new <citerefentry
-    project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry> file system inode
-    event source to an event loop. The event loop object is specified in the <parameter>event</parameter> parameter,
-    the event source object is returned in the <parameter>source</parameter> parameter. The <parameter>path</parameter>
-    parameter specifies the path of the file system inode to watch. The <parameter>handler</parameter> must reference a
-    function to call when the inode changes. The handler function will be passed the <parameter>userdata</parameter>
-    pointer, which may be chosen freely by the caller. The handler also receives a pointer to a <structname>struct
-    inotify_event</structname> structure containing information about the inode event. The <parameter>mask</parameter>
-    parameter specifies which types of inode events to watch specifically. It must contain an OR-ed combination of
-    <constant>IN_ACCESS</constant>, <constant>IN_ATTRIB</constant>, <constant>IN_CLOSE_WRITE</constant>, … flags. See
-    <citerefentry project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
+    project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry> file
+    system inode event source to an event loop. The event loop object is specified in the
+    <parameter>event</parameter> parameter, the event source object is returned in the
+    <parameter>source</parameter> parameter. The <parameter>path</parameter> parameter specifies the path of
+    the file system inode to watch. The <parameter>mask</parameter> parameter specifies which types of inode
+    events to watch specifically. It must contain an OR-ed combination of <constant>IN_ACCESS</constant>,
+    <constant>IN_ATTRIB</constant>, <constant>IN_CLOSE_WRITE</constant>, … flags. See <citerefentry
+    project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
     further information.</para>
 
+    <para>The <parameter>handler</parameter> must reference a function to call when the inode changes or
+    <constant>NULL</constant>. The handler function will be passed the <parameter>userdata</parameter> pointer,
+    which may be chosen freely by the caller. The handler also receives a pointer to a <structname>struct
+    inotify_event</structname> structure containing information about the inode event. The handler may return
+    negative to signal an error (see below), other return values are ignored. If
+    <parameter>handler</parameter> is <constant>NULL</constant>, a default handler that calls
+    <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry> will be
+    used.</para>
+
+    <para><function>sd_event_add_inotify_fd()</function> is identical to
+    <function>sd_event_add_inotify()</function>, except that it takes a file descriptor to an inode (possibly
+    an <constant>O_PATH</constant> one, but any other will do too) instead of a path in the file system.
+    </para>
+
     <para>If multiple event sources are installed for the same inode the backing inotify watch descriptor is
     automatically shared. The mask parameter may contain any flag defined by the inotify API, with the exception of
     <constant>IN_MASK_ADD</constant>.</para>
 
     <para>The handler is enabled continuously (<constant>SD_EVENT_ON</constant>), but this may be changed with
-    <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>. Alternatively,
-    the <constant>IN_ONESHOT</constant> mask flag may be used to request <constant>SD_EVENT_ONESHOT</constant> mode.
-    If the handler function returns a negative error code, it will be disabled after the invocation, even if the
-    <constant>SD_EVENT_ON</constant> mode was requested before.
-    </para>
+    <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+    Alternatively, the <constant>IN_ONESHOT</constant> mask flag may be used to request
+    <constant>SD_EVENT_ONESHOT</constant> mode. If the handler function returns a negative error code, it
+    will be disabled after the invocation, even if the <constant>SD_EVENT_ON</constant> mode was requested
+    before.</para>
 
     <para>As a special limitation the priority of inotify event sources may only be altered (see
     <citerefentry><refentrytitle>sd_event_source_set_priority</refentrytitle><manvolnum>3</manvolnum></citerefentry>)
@@ -157,6 +180,19 @@
           <listitem><para>The passed event source is not an inotify process event source.</para></listitem>
         </varlistentry>
 
+        <varlistentry>
+          <term><constant>-EBADF</constant></term>
+
+          <listitem><para>The passed file descriptor is not valid.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><constant>-ENOSYS</constant></term>
+
+          <listitem><para><function>sd_event_add_inotify_fd()</function> was called without
+          <filename>/proc/</filename> mounted.</para></listitem>
+        </varlistentry>
+
       </variablelist>
     </refsect2>
   </refsect1>
diff --git a/man/sd_event_add_io.xml b/man/sd_event_add_io.xml
index 323e57c..383a58a 100644
--- a/man/sd_event_add_io.xml
+++ b/man/sd_event_add_io.xml
@@ -115,27 +115,27 @@
     <constant>EPOLLRDHUP</constant>, <constant>EPOLLPRI</constant>,
     and <constant>EPOLLET</constant>, see
     <citerefentry project='man-pages'><refentrytitle>epoll_ctl</refentrytitle><manvolnum>2</manvolnum></citerefentry>
-    for details. The <parameter>handler</parameter> shall reference a
-    function to call when the event source is triggered. The
-    <parameter>userdata</parameter> pointer will be passed to the
-    handler function, and may be chosen freely by the caller. The
-    handler will also be passed the file descriptor the event was seen
-    on, as well as the actual event flags. It's generally a subset of
-    the events watched, however may additionally include
-    <constant>EPOLLERR</constant> and <constant>EPOLLHUP</constant>.
-    </para>
+    for details.</para>
 
-    <para>By default, an event source will stay enabled
-    continuously (<constant>SD_EVENT_ON</constant>), but this may be
-    changed with
+    <para>The <parameter>handler</parameter> is a function to call when the event source is triggered or
+    <constant>NULL</constant>. The <parameter>userdata</parameter> pointer will be passed to the handler
+    function, and may be chosen freely by the caller. The handler will also be passed the file descriptor the
+    event was seen on, as well as the actual event flags. It's generally a subset of the events watched,
+    however may additionally include <constant>EPOLLERR</constant> and <constant>EPOLLHUP</constant>. The
+    handler may return negative to signal an error (see below), other return values are ignored. If
+    <parameter>handler</parameter> is <constant>NULL</constant>, a default handler that calls
+    <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry> will be
+    used.</para>
+
+    <para>By default, an event source will stay enabled continuously (<constant>SD_EVENT_ON</constant>), but
+    this may be changed with
     <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-    If the handler function returns a negative error code, it will be
-    disabled after the invocation, even if the
-    <constant>SD_EVENT_ON</constant> mode was requested before. Note
-    that an event source set to <constant>SD_EVENT_ON</constant> will
-    fire continuously unless data is read from or written to the file
-    descriptor to reset the mask of events seen.
-    </para>
+    If the handler function returns a negative error code, it will either be disabled after the invocation,
+    even if the <constant>SD_EVENT_ON</constant> mode was requested before, or it will cause the loop to
+    terminate, see
+    <citerefentry><refentrytitle>sd_event_source_set_exit_on_failure</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+    Note that an event source set to <constant>SD_EVENT_ON</constant> will fire continuously unless data is
+    read from or written to the file descriptor to reset the mask of events seen.</para>
 
     <para>Setting the I/O event mask to watch for to 0 does not mean
     that the event source won't be triggered anymore, as
diff --git a/man/sd_event_add_signal.xml b/man/sd_event_add_signal.xml
index 1f0854f..3e8536e 100644
--- a/man/sd_event_add_signal.xml
+++ b/man/sd_event_add_signal.xml
@@ -19,6 +19,7 @@
     <refname>sd_event_add_signal</refname>
     <refname>sd_event_source_get_signal</refname>
     <refname>sd_event_signal_handler_t</refname>
+    <refname>SD_EVENT_SIGNAL_PROCMASK</refname>
 
     <refpurpose>Add a UNIX process signal event source to an event
     loop</refpurpose>
@@ -30,6 +31,8 @@
 
       <funcsynopsisinfo><token>typedef</token> struct sd_event_source sd_event_source;</funcsynopsisinfo>
 
+      <funcsynopsisinfo><constant>SD_EVENT_SIGNAL_PROCMASK</constant></funcsynopsisinfo>
+
       <funcprototype>
         <funcdef>typedef int (*<function>sd_event_signal_handler_t</function>)</funcdef>
         <paramdef>sd_event_source *<parameter>s</parameter></paramdef>
@@ -50,43 +53,46 @@
         <funcdef>int <function>sd_event_source_get_signal</function></funcdef>
         <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
       </funcprototype>
-
     </funcsynopsis>
   </refsynopsisdiv>
 
   <refsect1>
     <title>Description</title>
 
-    <para><function>sd_event_add_signal()</function> adds a new UNIX
-    process signal event source to an event loop. The event loop
-    object is specified in the <parameter>event</parameter> parameter,
-    and the event source object is returned in the
-    <parameter>source</parameter> parameter. The
-    <parameter>signal</parameter> parameter specifies the numeric
-    signal to be handled (see <citerefentry
-    project='man-pages'><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>).
-    The <parameter>handler</parameter> parameter must reference a
-    function to call when the signal is received or be
-    <constant>NULL</constant>.  The handler function will be passed
-    the <parameter>userdata</parameter> pointer, which may be chosen
-    freely by the caller. The handler also receives a pointer to a
-    <structname>signalfd_siginfo</structname> structure containing
-    information about the received signal. See <citerefentry
-    project='man-pages'><refentrytitle>signalfd</refentrytitle><manvolnum>2</manvolnum></citerefentry>
-    for further information.</para>
+    <para><function>sd_event_add_signal()</function> adds a new UNIX process signal event source to an event
+    loop. The event loop object is specified in the <parameter>event</parameter> parameter, and the event
+    source object is returned in the <parameter>source</parameter> parameter. The
+    <parameter>signal</parameter> parameter specifies the numeric signal to be handled (see <citerefentry
+    project='man-pages'><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>).</para>
+
+    <para>The <parameter>handler</parameter> parameter is a function to call when the signal is received or
+    <constant>NULL</constant>. The handler function will be passed the <parameter>userdata</parameter>
+    pointer, which may be chosen freely by the caller. The handler also receives a pointer to a
+    <structname>signalfd_siginfo</structname> structure containing information about the received signal. See
+    <citerefentry
+    project='man-pages'><refentrytitle>signalfd</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
+    further information. The handler may return negative to signal an error (see below), other return values
+    are ignored. If <parameter>handler</parameter> is <constant>NULL</constant>, a default handler that calls
+    <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry> will be
+    used.</para>
 
     <para>Only a single handler may be installed for a specific signal. The signal must be blocked in all
     threads before this function is called (using <citerefentry
     project='man-pages'><refentrytitle>sigprocmask</refentrytitle><manvolnum>2</manvolnum></citerefentry> or
     <citerefentry
-    project='man-pages'><refentrytitle>pthread_sigmask</refentrytitle><manvolnum>3</manvolnum></citerefentry>).</para>
+    project='man-pages'><refentrytitle>pthread_sigmask</refentrytitle><manvolnum>3</manvolnum></citerefentry>). For
+    convenience, if the special flag <constant>SD_EVENT_SIGNAL_PROCMASK</constant> is ORed into the specified
+    signal the signal will be automatically masked as necessary, for the calling thread. Note that this only
+    works reliably if the signal is already masked in all other threads of the process, or if there are no
+    other threads at the moment of invocation.</para>
 
-    <para>By default, the event source is enabled permanently
-    (<constant>SD_EVENT_ON</constant>), but this may be changed with
+    <para>By default, the event source is enabled permanently (<constant>SD_EVENT_ON</constant>), but this
+    may be changed with
     <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-    If the handler function returns a negative error code, it will be
-    disabled after the invocation, even if the
-    <constant>SD_EVENT_ON</constant> mode was requested before.
+    If the handler function returns a negative error code, it will either be disabled after the invocation,
+    even if the <constant>SD_EVENT_ON</constant> mode was requested before, or it will cause the loop to
+    terminate, see
+    <citerefentry><refentrytitle>sd_event_source_set_exit_on_failure</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
     </para>
 
     <para>To destroy an event source object use
diff --git a/man/sd_event_add_time.xml b/man/sd_event_add_time.xml
index 3e8927f..19f112b 100644
--- a/man/sd_event_add_time.xml
+++ b/man/sd_event_add_time.xml
@@ -122,25 +122,30 @@
     timer event may be delayed. Use <constant>0</constant> to select the default accuracy (250ms). Use 1µs for maximum
     accuracy. Consider specifying 60000000µs (1min) or larger for long-running events that may be delayed
     substantially. Picking higher accuracy values allows the system to coalesce timer events more aggressively,
-    improving power efficiency. The <parameter>handler</parameter> parameter shall reference a function to call when
-    the timer elapses. The handler function will be passed the <parameter>userdata</parameter> pointer, which may be
-    chosen freely by the caller. The handler is also passed the configured trigger time, even if it is actually called
-    slightly later, subject to the specified accuracy value, the kernel timer slack (see
-    <citerefentry><refentrytitle>prctl</refentrytitle><manvolnum>2</manvolnum></citerefentry>), and additional
-    scheduling latencies. To query the actual time the handler was called use
-    <citerefentry><refentrytitle>sd_event_now</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+    improving power efficiency.</para>
 
-    <para>By default, the timer will elapse once
-    (<constant>SD_EVENT_ONESHOT</constant>), but this may be changed
-    with
+    <para>The <parameter>handler</parameter> is a function to call when the timer elapses or
+    <constant>NULL</constant>. The <parameter>userdata</parameter> pointer will be passed to the handler
+    function, and may be chosen freely by the caller. The configured trigger time is also passed to the
+    handler, even if the call actually happens slightly later, subject to the specified accuracy value, the
+    kernel timer slack (see
+    <citerefentry><refentrytitle>prctl</refentrytitle><manvolnum>2</manvolnum></citerefentry>), and
+    additional scheduling latencies. To query the actual time the handler was called use
+    <citerefentry><refentrytitle>sd_event_now</refentrytitle><manvolnum>3</manvolnum></citerefentry>. The
+    handler may return negative to signal an error (see below), other return values are ignored. If
+    <parameter>handler</parameter> is <constant>NULL</constant>, a default handler that calls
+    <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry> will be
+    used.</para>
+
+    <para>By default, the timer will elapse once (<constant>SD_EVENT_ONESHOT</constant>), but this may be
+    changed with
     <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-    If the handler function returns a negative error code, it will be
-    disabled after the invocation, even if the
-    <constant>SD_EVENT_ON</constant> mode was requested before. Note
-    that a timer event set to <constant>SD_EVENT_ON</constant> will
-    fire continuously unless its configured time is updated using
-    <function>sd_event_source_set_time()</function>.
-    </para>
+    If the handler function returns a negative error code, it will either be disabled after the invocation,
+    even if the <constant>SD_EVENT_ON</constant> mode was requested before, or it will cause the loop to
+    terminate, see
+    <citerefentry><refentrytitle>sd_event_source_set_exit_on_failure</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+    Note that a timer event set to <constant>SD_EVENT_ON</constant> will fire continuously unless its
+    configured time is updated using <function>sd_event_source_set_time()</function>.</para>
 
     <para><function>sd_event_add_time_relative()</function> is like <function>sd_event_add_time()</function>,
     but takes a relative time specification. It's relative to the current time of the event loop iteration,
diff --git a/man/sd_event_new.xml b/man/sd_event_new.xml
index 352137e..8a105a7 100644
--- a/man/sd_event_new.xml
+++ b/man/sd_event_new.xml
@@ -135,8 +135,10 @@
         int r;
         …
         r = sd_event_default(&amp;event);
-        if (r &lt; 0)
-                fprintf(stderr, "Failed to allocate event loop: %s\n", strerror(-r));
+        if (r &lt; 0) {
+          errno = -r;
+          fprintf(stderr, "Failed to allocate event loop: %m\n");
+        }
         …
 }</programlisting>
 
diff --git a/man/sd_event_set_signal_exit.xml b/man/sd_event_set_signal_exit.xml
new file mode 100644
index 0000000..e5e675b
--- /dev/null
+++ b/man/sd_event_set_signal_exit.xml
@@ -0,0 +1,101 @@
+<?xml version='1.0'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="sd_event_set_signal_exit" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sd_event_set_signal_exit</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_event_set_signal_exit</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_event_set_signal_exit</refname>
+
+    <refpurpose>Automatically leave event loop on <constant>SIGINT</constant> and <constant>SIGTERM</constant></refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-event.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_event_set_signal_exit</function></funcdef>
+        <paramdef>sd_event *<parameter>event</parameter></paramdef>
+        <paramdef>int b</paramdef>
+      </funcprototype>
+
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_event_set_signal_exit()</function> may be used to ensure the event loop terminates
+    once a <constant>SIGINT</constant> or <constant>SIGTERM</constant> signal is received. It is a
+    convencience wrapper around invocations of
+    <citerefentry><refentrytitle>sd_event_add_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    for both signals. The two signals are automatically added to the calling thread's signal mask (if a
+    program is multi-threaded care should be taken to either invoke this function before the first thread is
+    started or to manually block the two signals process-wide first).</para>
+
+    <para>If the parameter <parameter>b</parameter> is specified as true, the event loop will terminate on
+    <constant>SIGINT</constant> and <constant>SIGTERM</constant>. If specified as false, it will no
+    longer. When this functionality is turned off the calling thread's signal mask is restored to match the
+    state before it was turned on, for the two signals. By default the two signals are not handled by the
+    event loop, and Linux' default signal handling for them is in effect.</para>
+
+    <para>It's customary for UNIX programs to exit on either of these two signals, hence it's typically a
+    good idea to enable this functionality for the main event loop of a program.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para><function>sd_event_set_signal_exit()</function> returns a positive non-zero value when the setting
+    was successfully changed. It returns a zero when the specified setting was already in effect. On failure,
+    it returns a negative errno-style error code.</para>
+
+    <refsect2>
+      <title>Errors</title>
+
+      <para>Returned errors may indicate the following problems:</para>
+
+      <variablelist>
+
+        <varlistentry>
+          <term><constant>-ECHILD</constant></term>
+
+          <listitem><para>The event loop has been created in a different process.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><constant>-EINVAL</constant></term>
+
+          <listitem><para>The passed event loop object was invalid.</para></listitem>
+        </varlistentry>
+
+      </variablelist>
+    </refsect2>
+  </refsect1>
+
+  <xi:include href="libsystemd-pkgconfig.xml" />
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_event_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_event_add_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_event_source_set_enabled.xml b/man/sd_event_source_set_enabled.xml
index c8ae169..5f13fc1 100644
--- a/man/sd_event_source_set_enabled.xml
+++ b/man/sd_event_source_set_enabled.xml
@@ -53,28 +53,29 @@
   <refsect1>
     <title>Description</title>
 
-    <para><function>sd_event_source_set_enabled()</function> may be
-    used to enable or disable the event source object specified as
-    <parameter>source</parameter>. The <parameter>enabled</parameter>
-    parameter takes one of <constant>SD_EVENT_ON</constant> (to
-    enable), <constant>SD_EVENT_OFF</constant> (to disable) or
-    <constant>SD_EVENT_ONESHOT</constant>. If invoked with
-    <constant>SD_EVENT_ONESHOT</constant> the event source will be
-    enabled but automatically reset to
-    <constant>SD_EVENT_OFF</constant> after the event source was
-    dispatched once.</para>
+    <para><function>sd_event_source_set_enabled()</function> may be used to enable or disable the event
+    source object specified as <parameter>source</parameter>. The <parameter>enabled</parameter> parameter
+    takes one of <constant>SD_EVENT_ON</constant> (to enable), <constant>SD_EVENT_OFF</constant> (to disable)
+    or <constant>SD_EVENT_ONESHOT</constant>. If invoked with <constant>SD_EVENT_ONESHOT</constant> the event
+    source will be enabled but automatically reset to <constant>SD_EVENT_OFF</constant> after one dispatch.
+    For <constant>SD_EVENT_OFF</constant>, the event source <parameter>source</parameter> may be
+    <constant>NULL</constant>, in which case the function does nothing. Otherwise,
+    <parameter>source</parameter> must be a valid pointer to an <structname>sd_event_source</structname>
+    object.</para>
 
     <para>Event sources that are disabled will not result in event
     loop wakeups and will not be dispatched, until they are enabled
     again.</para>
 
-    <para><function>sd_event_source_get_enabled()</function> may be
-    used to query whether the event source object
-    <parameter>source</parameter> is currently enabled or not. It
-    returns the enablement state (one of <constant>SD_EVENT_ON</constant>,
-    <constant>SD_EVENT_OFF</constant>, <constant>SD_EVENT_ONESHOT</constant>)
-    in <parameter>enabled</parameter>, if it is not <constant>NULL</constant>.
-    It also returns true if the event source is not disabled.</para>
+    <para><function>sd_event_source_get_enabled()</function> may be used to query whether the event source
+    object <parameter>source</parameter> is currently enabled or not. If both the
+    <parameter>source</parameter> and the output parameter <parameter>enabled</parameter> are
+    <constant>NULL</constant>, this function returns false. Otherwise, <parameter>source</parameter> must be
+    a valid pointer to an <structname>sd_event_source</structname> object. If the output parameter
+    <parameter>enabled</parameter> is not <constant>NULL</constant>, it is set to the enablement state (one
+    of <constant>SD_EVENT_ON</constant>, <constant>SD_EVENT_OFF</constant>,
+    <constant>SD_EVENT_ONESHOT</constant>). The function also returns true if the event source is not
+    disabled.</para>
 
     <para>Event source objects are enabled when they are first created
     with calls such as
diff --git a/man/sd_event_source_set_ratelimit.xml b/man/sd_event_source_set_ratelimit.xml
index ac85290..b8e6380 100644
--- a/man/sd_event_source_set_ratelimit.xml
+++ b/man/sd_event_source_set_ratelimit.xml
@@ -19,6 +19,7 @@
     <refname>sd_event_source_set_ratelimit</refname>
     <refname>sd_event_source_get_ratelimit</refname>
     <refname>sd_event_source_is_ratelimited</refname>
+    <refname>sd_event_source_set_ratelimit_expire_callback</refname>
 
     <refpurpose>Configure rate limiting on event sources</refpurpose>
   </refnamediv>
@@ -46,6 +47,12 @@
         <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
       </funcprototype>
 
+      <funcprototype>
+        <funcdef>int <function>sd_event_source_set_ratelimit_expire_callback</function></funcdef>
+        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
+        <paramdef>sd_event_handler_t<parameter>callback</parameter></paramdef>
+      </funcprototype>
+
     </funcsynopsis>
   </refsynopsisdiv>
 
@@ -78,6 +85,10 @@
     is currently affected by rate limiting, i.e. it has recently hit the rate limit and is currently
     temporarily disabled due to that.</para>
 
+    <para><function>sd_event_source_set_ratelimit_expire_callback</function> may be used to set a callback
+    function that is invoked every time the event source leaves rate limited state. Note that function is
+    called in the same event loop iteration in which state transition occurred.</para>
+
     <para>Rate limiting is currently implemented for I/O, timer, signal, defer and inotify event
     sources.</para>
   </refsect1>
@@ -85,11 +96,12 @@
   <refsect1>
     <title>Return Value</title>
 
-    <para>On success, <function>sd_event_source_set_ratelimit()</function> and
-    <function>sd_event_source_get_ratelimit()</function> return a non-negative integer. On failure, they
-    return a negative errno-style error code. <function>sd_event_source_is_ratelimited</function> returns
-    zero if rate limiting is currently not in effect and greater than zero if it is in effect; it returns a
-    negative errno-style error code on failure.</para>
+    <para>On success, <function>sd_event_source_set_ratelimit()</function>,
+    <function>sd_event_source_set_ratelimit_expire_callback</function> and
+    <function>sd_event_source_get_ratelimit()</function> return a non-negative integer. On failure, they return
+    a negative errno-style error code. <function>sd_event_source_is_ratelimited</function> returns zero if rate
+    limiting is currently not in effect and greater than zero if it is in effect; it returns a negative
+    errno-style error code on failure.</para>
 
     <refsect2>
       <title>Errors</title>
diff --git a/man/sd_event_source_unref.xml b/man/sd_event_source_unref.xml
index a7699e3..b626e4c 100644
--- a/man/sd_event_source_unref.xml
+++ b/man/sd_event_source_unref.xml
@@ -59,16 +59,13 @@
   <refsect1>
     <title>Description</title>
 
-    <para><function>sd_event_source_unref()</function> may be used to
-    decrement by one the reference counter of the event source object
-    specified as <parameter>source</parameter>. The reference counter
-    is initially set to one, when the event source is created with calls
-    such as
-    <citerefentry><refentrytitle>sd_event_add_io</refentrytitle><manvolnum>3</manvolnum></citerefentry>
-    or
+    <para><function>sd_event_source_unref()</function> may be used to decrement by one the internal reference
+    counter of the event source object specified as <parameter>source</parameter>. The reference counter is
+    initially set to one, when the event source is created with calls such as
+    <citerefentry><refentrytitle>sd_event_add_io</refentrytitle><manvolnum>3</manvolnum></citerefentry> or
     <citerefentry><refentrytitle>sd_event_add_time</refentrytitle><manvolnum>3</manvolnum></citerefentry>. When
-    the reference counter reaches zero it is removed from its event loop
-    object and destroyed.</para>
+    the reference counter reaches zero, the object is detached from the event loop object and destroyed.
+    </para>
 
     <para><function>sd_event_source_unrefp()</function> is similar to
     <function>sd_event_source_unref()</function> but takes a pointer to a
@@ -78,9 +75,8 @@
     Variable Attribute</ulink>. Note that this function is defined as
     inline function.</para>
 
-    <para><function>sd_event_source_ref()</function> may be used
-    to increase by one the reference counter of the event source object
-    specified as <parameter>source</parameter>.</para>
+    <para><function>sd_event_source_ref()</function> may be used to increase by one the internal reference
+    counter of the event source object specified as <parameter>source</parameter>.</para>
 
     <para><function>sd_event_source_unref()</function>,
     <function>sd_bus_creds_unrefp()</function> and
diff --git a/man/sd_hwdb_new.xml b/man/sd_hwdb_new.xml
index c071599..0584add 100644
--- a/man/sd_hwdb_new.xml
+++ b/man/sd_hwdb_new.xml
@@ -16,6 +16,7 @@
 
   <refnamediv>
     <refname>sd_hwdb_new</refname>
+    <refname>sd_hwdb_new_from_path</refname>
     <refname>sd_hwdb_ref</refname>
     <refname>sd_hwdb_unref</refname>
 
@@ -32,6 +33,12 @@
       </funcprototype>
 
       <funcprototype>
+        <funcdef>int <function>sd_hwdb_new_from_path</function></funcdef>
+        <paramdef>const char *<parameter>path</parameter></paramdef>
+        <paramdef>sd_hwdb **<parameter>hwdb</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
         <funcdef>sd_hwdb* <function>sd_hwdb_ref</function></funcdef>
         <paramdef>sd_hwdb *<parameter>hwdb</parameter></paramdef>
       </funcprototype>
@@ -50,6 +57,9 @@
     database. Upon initialization, the file containing the binary representation of the hardware database is
     located and opened. The new object is returned in <parameter>hwdb</parameter>.</para>
 
+    <para><function>sd_hwdb_new_from_path()</function> may be used to specify the path from which the binary
+    hardware database should be opened.</para>
+
     <para>The <parameter>hwdb</parameter> object is reference counted. <function>sd_hwdb_ref()</function> and
     <function>sd_hwdb_unref()</function> may be used to get a new reference or destroy an existing reference
     to an object. The caller must dispose of the reference acquired with <function>sd_hwdb_new()</function>
@@ -65,8 +75,8 @@
   <refsect1>
     <title>Return Value</title>
 
-    <para>On success, <function>sd_hwdb_new()</function> returns a non-negative integer. On
-    failure, it returns a negative errno-style error code.</para>
+    <para>On success, <function>sd_hwdb_new()</function> and <function>sd_hwdb_new_from_path()</function>
+    return a non-negative integer. On failure, a negative errno-style error code is returned.</para>
 
     <para><function>sd_hwdb_ref()</function> always returns the argument.
     </para>
diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml
index a778f8a..cdab87a 100644
--- a/man/sd_id128_get_machine.xml
+++ b/man/sd_id128_get_machine.xml
@@ -94,10 +94,20 @@
     has properties similar to the machine ID during that time.</para>
 
     <para><function>sd_id128_get_invocation()</function> returns the invocation ID of the currently executed
-    service. In its current implementation, this reads and parses the <varname>$INVOCATION_ID</varname> environment
-    variable that the service manager sets when activating a service, see
-    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details. The
-    ID is cached internally. In future a different mechanism to determine the invocation ID may be added.</para>
+    service. In its current implementation, this tries to read and parse the following:
+    <itemizedlist>
+      <listitem>
+        <para>The <varname>$INVOCATION_ID</varname> environment variable that the service manager sets when
+        activating a service.</para>
+      </listitem>
+      <listitem>
+        <para>An entry in the kernel keyring that the system service manager sets when activating a service.
+        </para>
+      </listitem>
+    </itemizedlist>
+    See <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+    for details. The ID is cached internally. In future a different mechanism to determine the invocation ID
+    may be added.</para>
 
     <para>Note that <function>sd_id128_get_machine_app_specific()</function>,
     <function>sd_id128_get_boot()</function>, <function>sd_id128_get_boot_app_specific()</function>, and
@@ -129,19 +139,34 @@
         <varlistentry>
           <term><constant>-ENOENT</constant></term>
 
-          <listitem><para>Returned by <function>sd_id128_get_machine()</function>,
-          <function>sd_id128_get_machine_app_specific()</function>, and
-          <function>sd_id128_get_boot_app_specific()</function> when <filename>/etc/machine-id</filename> is
-          missing.</para></listitem>
+          <listitem><para>Returned by <function>sd_id128_get_machine()</function> and
+          <function>sd_id128_get_machine_app_specific()</function> when <filename>/etc/machine-id</filename>
+          is missing.</para></listitem>
         </varlistentry>
 
         <varlistentry>
           <term><constant>-ENOMEDIUM</constant></term>
 
-          <listitem><para>Returned by <function>sd_id128_get_machine()</function>,
-          <function>sd_id128_get_machine_app_specific()</function>, and
-          <function>sd_id128_get_boot_app_specific()</function> when <filename>/etc/machine-id</filename> is
-          empty or all zeros.</para></listitem>
+          <listitem><para>Returned by <function>sd_id128_get_machine()</function> and
+          <function>sd_id128_get_machine_app_specific()</function> when <filename>/etc/machine-id</filename>
+          is empty or all zeros. Also returned by <function>sd_id128_get_invocation()</function> when the
+          invocation ID is all zeros.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><constant>-ENOPKG</constant></term>
+
+          <listitem><para>Returned by <function>sd_id128_get_machine()</function> and
+          <function>sd_id128_get_machine_app_specific()</function> when the content of
+          <filename>/etc/machine-id</filename> is <literal>uninitialized</literal>.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><constant>-ENOSYS</constant></term>
+
+          <listitem><para>Returned by <function>sd_id128_get_boot()</function> and
+          <function>sd_id128_get_boot_app_specific()</function> when <filename>/proc/</filename> is not
+          mounted.</para></listitem>
         </varlistentry>
 
         <varlistentry>
@@ -152,7 +177,7 @@
         </varlistentry>
 
         <varlistentry>
-          <term><constant>-EIO</constant></term>
+          <term><constant>-EUCLEAN</constant></term>
 
           <listitem><para>Returned by any of the functions described here when the configured value has
           invalid format.</para></listitem>
diff --git a/man/sd_id128_randomize.xml b/man/sd_id128_randomize.xml
index 52fa089..2df3547 100644
--- a/man/sd_id128_randomize.xml
+++ b/man/sd_id128_randomize.xml
@@ -35,12 +35,11 @@
   <refsect1>
     <title>Description</title>
 
-    <para><function>sd_id128_randomize()</function> generates a new
-    randomized 128-bit ID and returns it in
-    <parameter>ret</parameter>. Every invocation returns a new
-    randomly generated ID. This uses the
-    <filename>/dev/urandom</filename> kernel random number
-    generator.</para>
+    <para><function>sd_id128_randomize()</function> generates a new randomized 128-bit ID and returns it in
+    <parameter>ret</parameter>. Every invocation returns a new randomly generated ID. This uses the
+    <citerefentry
+    project='man-pages'><refentrytitle>getrandom</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+    kernel random number generator.</para>
 
     <para>Note that <function>sd_id128_randomize()</function> always returns a UUID Variant 1 Version 4
     compatible ID. It is hence guaranteed that this function will never return the ID consisting of all zero
@@ -72,7 +71,8 @@
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>getrandom</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_id128_get_machine</refentrytitle><manvolnum>3</manvolnum></citerefentry>
     </para>
   </refsect1>
diff --git a/man/sd_id128_to_string.xml b/man/sd_id128_to_string.xml
index 4697680..e0338ba 100644
--- a/man/sd_id128_to_string.xml
+++ b/man/sd_id128_to_string.xml
@@ -17,6 +17,11 @@
 
   <refnamediv>
     <refname>sd_id128_to_string</refname>
+    <refname>SD_ID128_TO_STRING</refname>
+    <refname>SD_ID128_STRING_MAX</refname>
+    <refname>sd_id128_to_uuid_string</refname>
+    <refname>SD_ID128_TO_UUID_STRING</refname>
+    <refname>SD_ID128_UUID_STRING_MAX</refname>
     <refname>sd_id128_from_string</refname>
     <refpurpose>Format or parse 128-bit IDs as strings</refpurpose>
   </refnamediv>
@@ -25,9 +30,22 @@
     <funcsynopsis>
       <funcsynopsisinfo>#include &lt;systemd/sd-id128.h&gt;</funcsynopsisinfo>
 
+      <funcsynopsisinfo>#define SD_ID128_STRING_MAX 33U</funcsynopsisinfo>
+
+      <funcsynopsisinfo>#define SD_ID128_UUID_STRING_MAX 37U</funcsynopsisinfo>
+
+      <funcsynopsisinfo>#define SD_ID128_TO_STRING(id) …</funcsynopsisinfo>
+
+      <funcsynopsisinfo>#define SD_ID128_TO_UUID_STRING(id) …</funcsynopsisinfo>
+
       <funcprototype>
         <funcdef>char *<function>sd_id128_to_string</function></funcdef>
-        <paramdef>sd_id128_t <parameter>id</parameter>, char <parameter>s</parameter>[33]</paramdef>
+        <paramdef>sd_id128_t <parameter>id</parameter>, char <parameter>s</parameter>[static SD_ID128_STRING_MAX]</paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>char *<function>sd_id128_uuid_string</function></funcdef>
+        <paramdef>sd_id128_t <parameter>id</parameter>, char <parameter>s</parameter>[static SD_ID128_UUID_STRING_MAX]</paramdef>
       </funcprototype>
 
       <funcprototype>
@@ -41,47 +59,52 @@
   <refsect1>
     <title>Description</title>
 
-    <para><function>sd_id128_to_string()</function> formats a 128-bit
-    ID as a character string. It expects the ID and a string array
-    capable of storing 33 characters. The ID will be formatted as 32
-    lowercase hexadecimal digits and be terminated by a
-    <constant>NUL</constant> byte.</para>
+    <para><function>sd_id128_to_string()</function> formats a 128-bit ID as a character string. It expects
+    the ID and a string array capable of storing 33 characters
+    (<constant>SD_ID128_STRING_MAX</constant>). The ID will be formatted as 32 lowercase hexadecimal digits
+    and be terminated by a <constant>NUL</constant> byte.</para>
 
-    <para><function>sd_id128_from_string()</function> implements the reverse operation: it takes a 33 character string
-    with 32 hexadecimal digits (either lowercase or uppercase, terminated by <constant>NUL</constant>) and parses them
-    back into a 128-bit ID returned in <parameter>ret</parameter>. Alternatively, this call can also parse a
-    37-character string with a 128-bit ID formatted as RFC UUID. If <parameter>ret</parameter> is passed as
-    <constant>NULL</constant> the function will validate the passed ID string, but not actually return it in parsed
-    form.</para>
+    <para><function>SD_ID128_TO_STRING()</function> is a macro that wraps
+    <function>sd_id128_to_string()</function> and passes an appropriately sized buffer as second argument,
+    allocated as C99 compound literal. Each use will thus implicitly acquire a suitable buffer on the stack
+    which remains valid until the end of the current code block. This is usually the simplest way to acquire
+    a string representation of a 128-bit ID in a buffer that is valid in the current code block.</para>
 
-    <para>Note that when parsing 37 character UUIDs this is done strictly in Big Endian byte order,
-    i.e. according to <ulink url="https://tools.ietf.org/html/rfc4122">RFC4122</ulink> Variant 1
-    rules, even if the UUID encodes a different variant. This matches behaviour in various other Linux
-    userspace tools. It's probably wise to avoid UUIDs of other variant types.</para>
+    <para><function>sd_id128_to_uuid_string()</function> and <function>SD_ID128_TO_UUID_STRING()</function>
+    are similar to these two functions/macros, but format the 128bit values as RFC4122 UUIDs, i.e. a series
+    of 36 lowercase hexadeciaml digits and dashes, terminated by a <constant>NUL</constant> byte.</para>
 
-    <para>For more information about the <literal>sd_id128_t</literal>
-    type see
-    <citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-    Note that these calls operate the same way on all architectures,
-    i.e. the results do not depend on endianness.</para>
+    <para><function>sd_id128_from_string()</function> implements the reverse operation: it takes a 33
+    character string with 32 hexadecimal digits (either lowercase or uppercase, terminated by
+    <constant>NUL</constant>) and parses them back into a 128-bit ID returned in
+    <parameter>ret</parameter>. Alternatively, this call can also parse a 37-character string with a 128-bit
+    ID formatted as RFC UUID. If <parameter>ret</parameter> is passed as <constant>NULL</constant> the
+    function will validate the passed ID string, but not actually return it in parsed form.</para>
 
-    <para>When formatting a 128-bit ID into a string, it is often
-    easier to use a format string for
-    <citerefentry project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-    This is easily done using the
-    <constant>SD_ID128_FORMAT_STR</constant> and <function>SD_ID128_FORMAT_VAL()</function> macros. For
-    more information see
+    <para>Note that when formatting and parsing 36 character UUIDs this is done strictly in Big Endian byte order,
+    i.e. according to <ulink url="https://tools.ietf.org/html/rfc4122">RFC4122</ulink> Variant 1 rules, even
+    if the UUID encodes a different variant. This matches behaviour in various other Linux userspace
+    tools. It's probably wise to avoid UUIDs of other variant types.</para>
+
+    <para>For more information about the <literal>sd_id128_t</literal> type see
+    <citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>.  Note that
+    these calls operate the same way on all architectures, i.e. the results do not depend on
+    endianness.</para>
+
+    <para>When formatting a 128-bit ID into a string, it is often easier to use a format string for
+    <citerefentry
+    project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>.  This
+    is easily done using the <constant>SD_ID128_FORMAT_STR</constant> and
+    <function>SD_ID128_FORMAT_VAL()</function> macros. For more information see
     <citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
   </refsect1>
 
   <refsect1>
     <title>Return Value</title>
 
-    <para><function>sd_id128_to_string()</function> always succeeds
-    and returns a pointer to the string array passed in.
-    <function>sd_id128_from_string()</function> returns 0 on success, in
-    which case <parameter>ret</parameter> is filled in, or a negative
-    errno-style error code.</para>
+    <para><function>sd_id128_to_string()</function> always succeeds and returns a pointer to the string array
+    passed in.  <function>sd_id128_from_string()</function> returns 0 on success, in which case
+    <parameter>ret</parameter> is filled in, or a negative errno-style error code.</para>
   </refsect1>
 
   <xi:include href="libsystemd-pkgconfig.xml" />
diff --git a/man/sd_journal_enumerate_fields.xml b/man/sd_journal_enumerate_fields.xml
index e074906..2d8055e 100644
--- a/man/sd_journal_enumerate_fields.xml
+++ b/man/sd_journal_enumerate_fields.xml
@@ -94,26 +94,7 @@
     <para>Use the <function>SD_JOURNAL_FOREACH_FIELD()</function> macro to iterate through all field names in use in the
     current journal.</para>
 
-    <programlisting>#include &lt;stdio.h&gt;
-#include &lt;string.h&gt;
-#include &lt;systemd/sd-journal.h&gt;
-
-int main(int argc, char *argv[]) {
-        sd_journal *j;
-        const char *field;
-        int r;
-
-        r = sd_journal_open(&amp;j, SD_JOURNAL_LOCAL_ONLY);
-        if (r &lt; 0) {
-                fprintf(stderr, "Failed to open journal: %s\n", strerror(-r));
-                return 1;
-        }
-        SD_JOURNAL_FOREACH_FIELD(j, field)
-                printf("%s\n", field);
-        sd_journal_close(j);
-        return 0;
-}</programlisting>
-
+    <programlisting><xi:include href="journal-enumerate-fields.c" parse="text" /></programlisting>
   </refsect1>
 
   <refsect1>
diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml
index 5608331..628abb2 100644
--- a/man/sd_journal_next.xml
+++ b/man/sd_journal_next.xml
@@ -80,7 +80,7 @@
     <para><function>sd_journal_next_skip()</function> and
     <function>sd_journal_previous_skip()</function> advance/set back the read pointer by multiple
     entries at once, as specified in the <varname>skip</varname> parameter. The <varname>skip</varname>
-    parameter must be less than or equal to 2147483647 (2^31-1).</para>
+    parameter must be less than or equal to 2147483647 (2³¹-1).</para>
 
     <para>The journal is strictly ordered by reception time, and hence
     advancing to the next entry guarantees that the entry then
@@ -129,34 +129,7 @@
 
     <para>Iterating through the journal:</para>
 
-    <programlisting>#include &lt;stdio.h&gt;
-#include &lt;string.h&gt;
-#include &lt;systemd/sd-journal.h&gt;
-
-int main(int argc, char *argv[]) {
-  int r;
-  sd_journal *j;
-  r = sd_journal_open(&amp;j, SD_JOURNAL_LOCAL_ONLY);
-  if (r &lt; 0) {
-    fprintf(stderr, "Failed to open journal: %s\n", strerror(-r));
-    return 1;
-  }
-  SD_JOURNAL_FOREACH(j) {
-    const char *d;
-    size_t l;
-
-    r = sd_journal_get_data(j, "MESSAGE", (const void **)&amp;d, &amp;l);
-    if (r &lt; 0) {
-      fprintf(stderr, "Failed to read message field: %s\n", strerror(-r));
-      continue;
-    }
-
-    printf("%.*s\n", (int) l, d);
-  }
-  sd_journal_close(j);
-  return 0;
-}</programlisting>
-
+    <programlisting><xi:include href="journal-iterate-foreach.c" parse="text" /></programlisting>
   </refsect1>
 
   <refsect1>
diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml
index f7a70e9..503bf9e 100644
--- a/man/sd_journal_print.xml
+++ b/man/sd_journal_print.xml
@@ -68,10 +68,10 @@
 
       <funcprototype>
         <funcdef>int <function>sd_journal_print_with_location</function></funcdef>
+        <paramdef>int <parameter>priority</parameter></paramdef>
         <paramdef>const char *<parameter>file</parameter></paramdef>
         <paramdef>const char *<parameter>line</parameter></paramdef>
         <paramdef>const char *<parameter>func</parameter></paramdef>
-        <paramdef>int <parameter>priority</parameter></paramdef>
         <paramdef>const char *<parameter>format</parameter></paramdef>
         <paramdef>…</paramdef>
       </funcprototype>
diff --git a/man/sd_journal_stream_fd.xml b/man/sd_journal_stream_fd.xml
index af2234e..40d2804 100644
--- a/man/sd_journal_stream_fd.xml
+++ b/man/sd_journal_stream_fd.xml
@@ -100,33 +100,7 @@
     <para>Creating a log stream suitable for
     <citerefentry project='man-pages'><refentrytitle>fprintf</refentrytitle><manvolnum>3</manvolnum></citerefentry>:</para>
 
-    <programlisting>#include &lt;syslog.h&gt;
-#include &lt;stdio.h&gt;
-#include &lt;string.h&gt;
-#include &lt;unistd.h&gt;
-#include &lt;systemd/sd-journal.h&gt;
-#include &lt;systemd/sd-daemon.h&gt;
-
-int main(int argc, char *argv[]) {
-  int fd;
-  FILE *log;
-  fd = sd_journal_stream_fd("test", LOG_INFO, 1);
-  if (fd &lt; 0) {
-    fprintf(stderr, "Failed to create stream fd: %s\n", strerror(-fd));
-    return 1;
-  }
-  log = fdopen(fd, "w");
-  if (!log) {
-    fprintf(stderr, "Failed to create file object: %m\n");
-    close(fd);
-    return 1;
-  }
-  fprintf(log, "Hello World!\n");
-  fprintf(log, SD_WARNING "This is a warning!\n");
-  fclose(log);
-  return 0;
-}</programlisting>
-
+    <programlisting><xi:include href="journal-stream-fd.c" parse="text" /></programlisting>
   </refsect1>
 
   <refsect1>
diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml
index a71c291..9e0be7f 100644
--- a/man/sd_listen_fds.xml
+++ b/man/sd_listen_fds.xml
@@ -55,14 +55,14 @@
     to the processes themselves to close them after use or whether to leave them open until the process exits
     (in which case the kernel closes them automatically). Note that the file descriptors received by daemons
     are duplicates of the file descriptors the service manager originally allocated and bound and of which it
-    continously keeps a copy (except if <varname>Accept=yes</varname> is used). This means any socket option
-    changes and other changes made to the sockets will visible to the service manager too. Most importanly
-    this means it's generally not a good idea to invoke <citerefentry
+    continuously keeps a copy (except if <varname>Accept=yes</varname> is used). This means any socket option
+    changes and other changes made to the sockets will be visible to the service manager too. Most
+    importantly this means it's generally not a good idea to invoke <citerefentry
     project='man-pages'><refentrytitle>shutdown</refentrytitle><manvolnum>2</manvolnum></citerefentry> on
     such sockets, since it will shut down communication on the file descriptor the service manager holds for
-    the same socket, too. Also note that if a daemon is restarted (and its associated sockets are not) it
-    will receive file descriptors to the very same sockets as the earlier invocations, thus all socket
-    options applied then will still apply.</para>
+    the same socket too. Also note that if a daemon is restarted (and its associated sockets are not) it will
+    receive file descriptors to the very same sockets as the earlier invocations, thus all socket options
+    applied then will still apply.</para>
 
     <para>If a daemon receives more than one file descriptor, they will be passed in the same order as
     configured in the systemd socket unit file (see
diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
index 0817962..8118121 100644
--- a/man/sd_login_monitor_new.xml
+++ b/man/sd_login_monitor_new.xml
@@ -116,8 +116,10 @@
   int r;
   …
   r = sd_login_monitor_new(NULL, &amp;m);
-  if (r &lt; 0)
-    fprintf(stderr, "Failed to allocate login monitor object: %s\n", strerror(-r));
+  if (r &lt; 0) {
+    errno = -r;
+    fprintf(stderr, "Failed to allocate login monitor object: %m\n");
+  }
   …
 }</programlisting>
 
diff --git a/man/sd_notify.xml b/man/sd_notify.xml
index 69e1b02..8ef1c50 100644
--- a/man/sd_notify.xml
+++ b/man/sd_notify.xml
@@ -102,23 +102,35 @@
       <varlistentry>
         <term>READY=1</term>
 
-        <listitem><para>Tells the service manager that service startup is finished, or the service finished loading its
-        configuration. This is only used by systemd if the service definition file has <varname>Type=notify</varname>
-        set. Since there is little value in signaling non-readiness, the only value services should send is
-        <literal>READY=1</literal> (i.e.  <literal>READY=0</literal> is not defined).</para></listitem>
+        <listitem><para>Tells the service manager that service startup is finished, or the service finished
+        re-loading its configuration. This is only used by systemd if the service definition file has
+        <varname>Type=notify</varname> or <varname>Type=notify-reload</varname> set. Since there is little
+        value in signaling non-readiness, the only value services should send is <literal>READY=1</literal>
+        (i.e.  <literal>READY=0</literal> is not defined).</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term>RELOADING=1</term>
 
-        <listitem><para>Tells the service manager that the service is
-        reloading its configuration. This is useful to allow the
-        service manager to track the service's internal state, and
-        present it to the user. Note that a service that sends this
-        notification must also send a <literal>READY=1</literal>
-        notification when it completed reloading its
-        configuration. Reloads are propagated in the same way as they
-        are when initiated by the user.</para></listitem>
+        <listitem><para>Tells the service manager that the service is beginning to reload its
+        configuration. This is useful to allow the service manager to track the service's internal state, and
+        present it to the user. Note that a service that sends this notification must also send a
+        <literal>READY=1</literal> notification when it completed reloading its configuration. Reloads the
+        service manager is notified about with this mechanisms are propagated in the same way as they are
+        when originally initiated through the service manager. This message is particularly relevant for
+        <varname>Type=notify-reload</varname> services, to inform the service manager that the request to
+        reload the service has been received and is now being processed.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>MONOTONIC_USEC=…</term>
+
+        <listitem><para>A field carrying the monotonic timestamp (as per
+        <constant>CLOCK_MONOTONIC</constant>) formatted in decimal in µs, when the notification message was
+        generated by the client. This is typically used in combination with <literal>RELOADING=1</literal>,
+        to allow the service manager to properly synchronize reload cycles. See
+        <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        for details, specifically <literal>Type=notify-reload</literal>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -218,7 +230,7 @@
 
         <listitem><para>Stores additional file descriptors in the service manager. File descriptors sent this way will
         be maintained per-service by the service manager and will later be handed back using the usual file descriptor
-        passing logic at the next invocation of the service, see
+        passing logic at the next invocation of the service (e.g. when it is restarted), see
         <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>.  This is
         useful for implementing services that can restart after an explicit request or a crash without losing
         state. Any open sockets and other file descriptors which should not be closed during the restart may be stored
@@ -232,7 +244,8 @@
         <constant>EPOLLHUP</constant> or <constant>EPOLLERR</constant> event seen on them will result in their
         automatic removal from the store. Multiple arrays of file descriptors may be sent in separate messages, in
         which case the arrays are combined. Note that the service manager removes duplicate (pointing to the same
-        object) file descriptors before passing them to the service. Use <function>sd_pid_notify_with_fds()</function>
+        object) file descriptors before passing them to the service. When a service is stopped, its file descriptor
+        store is discarded and all file descriptors in it are closed. Use <function>sd_pid_notify_with_fds()</function>
         to send messages with <literal>FDSTORE=1</literal>, see below.</para></listitem>
       </varlistentry>
 
@@ -271,13 +284,14 @@
       <varlistentry>
         <term>BARRIER=1</term>
 
-        <listitem><para>Tells the service manager that the client is explicitly requesting synchronization by means of
-        closing the file descriptor sent with this command. The service manager guarantees that the processing of a <varname>
-        BARRIER=1</varname> command will only happen after all previous notification messages sent before this command
-        have been processed. Hence, this command accompanied with a single file descriptor can be used to synchronize
-        against reception of all previous status messages. Note that this command cannot be mixed with other notifications,
-        and has to be sent in a separate message to the service manager, otherwise all assignments will be ignored. Note that
-        sending 0 or more than 1 file descriptor with this command is a violation of the protocol.</para></listitem>
+        <listitem><para>Tells the service manager that the client is explicitly requesting synchronization by
+        means of closing the file descriptor sent with this command. The service manager guarantees that the
+        processing of a <varname>BARRIER=1</varname> command will only happen after all previous notification
+        messages sent before this command have been processed. Hence, this command accompanied with a single
+        file descriptor can be used to synchronize against reception of all previous status messages. Note
+        that this command cannot be mixed with other notifications, and has to be sent in a separate message
+        to the service manager, otherwise all assignments will be ignored. Note that sending 0 or more than 1
+        file descriptor with this command is a violation of the protocol.</para></listitem>
       </varlistentry>
     </variablelist>
 
@@ -340,7 +354,7 @@
 
     <para><function>sd_notify_barrier()</function> allows the caller to
     synchronize against reception of previously sent notification messages
-    and uses the <literal>BARRIER=1</literal> command. It takes a relative
+    and uses the <varname>BARRIER=1</varname> command. It takes a relative
     <varname>timeout</varname> value in microseconds which is passed to
     <citerefentry><refentrytitle>ppoll</refentrytitle><manvolnum>2</manvolnum>
     </citerefentry>. A value of UINT64_MAX is interpreted as infinite timeout.
@@ -366,13 +380,26 @@
     <xi:include href="libsystemd-pkgconfig.xml" xpointer="pkgconfig-text"/>
 
     <para>These functions send a single datagram with the
-    state string as payload to the <constant>AF_UNIX</constant> socket
-    referenced in the <varname>$NOTIFY_SOCKET</varname> environment
-    variable. If the first character of
-    <varname>$NOTIFY_SOCKET</varname> is <literal>@</literal>, the
-    string is understood as Linux abstract namespace socket. The
-    datagram is accompanied by the process credentials of the sending
-    service, using SCM_CREDENTIALS.</para>
+    state string as payload to the socket referenced in the
+    <varname>$NOTIFY_SOCKET</varname> environment variable. If the
+    first character of <varname>$NOTIFY_SOCKET</varname> is
+    <literal>/</literal> or <literal>@</literal>, the string is understood
+    as an <constant>AF_UNIX</constant> or Linux abstract namespace socket
+    (respectively), and in both cases the datagram is accompanied by the
+    process credentials of the sending service, using SCM_CREDENTIALS. If
+    the string starts with <literal>vsock:</literal> then the string is
+    understood as an <constant>AF_VSOCK</constant> address, which is useful
+    for hypervisors/VMMs or other processes on the host to receive a
+    notification when a virtual machine has finished booting. Note that in
+    case the hypervisor does not support <constant>SOCK_DGRAM</constant>
+    over <constant>AF_VSOCK</constant>, <constant>SOCK_SEQPACKET</constant>
+    will be used instead. The address should be in the form:
+    <literal>vsock:CID:PORT</literal>. Note that unlike other uses of vsock,
+    the CID is mandatory and cannot be <literal>VMADDR_CID_ANY</literal>.
+    Note that PID1 will send the VSOCK packets from a privileged port
+    (i.e.: lower than 1024), as an attempt to address concerns that unprivileged
+    processes in the guest might try to send malicious notifications to the
+    host, driving it to make destructive decisions based on them.</para>
   </refsect1>
 
   <refsect1>
@@ -409,10 +436,11 @@
       <para>A service could send the following after completing
       initialization:</para>
 
-      <programlisting>sd_notifyf(0, "READY=1\n"
-        "STATUS=Processing requests…\n"
-        "MAINPID=%lu",
-        (unsigned long) getpid());</programlisting>
+      <programlisting>
+sd_notifyf(0, "READY=1\n"
+           "STATUS=Processing requests…\n"
+           "MAINPID=%lu",
+           (unsigned long) getpid());</programlisting>
     </example>
 
     <example>
@@ -420,10 +448,11 @@
 
       <para>A service could send the following shortly before exiting, on failure:</para>
 
-      <programlisting>sd_notifyf(0, "STATUS=Failed to start up: %s\n"
-        "ERRNO=%i",
-        strerror(errno),
-        errno);</programlisting>
+      <programlisting>
+sd_notifyf(0, "STATUS=Failed to start up: %s\n"
+           "ERRNO=%i",
+           strerror_r(errnum, (char[1024]){}, 1024),
+           errnum);</programlisting>
     </example>
 
     <example>
@@ -446,9 +475,10 @@
       to synchronize against reception of all notifications sent before
       this call is made.</para>
 
-      <programlisting>sd_notify(0, "READY=1");
-      /* set timeout to 5 seconds */
-      sd_notify_barrier(0, 5 * 1000000);
+      <programlisting>
+sd_notify(0, "READY=1");
+/* set timeout to 5 seconds */
+sd_notify_barrier(0, 5 * 1000000);
       </programlisting>
     </example>
   </refsect1>
diff --git a/man/sd_path_lookup.xml b/man/sd_path_lookup.xml
index 01fb1ed..eda4396 100644
--- a/man/sd_path_lookup.xml
+++ b/man/sd_path_lookup.xml
@@ -100,6 +100,11 @@
         <constant>SD_PATH_CATALOG</constant>,
 
         <constant>SD_PATH_SYSTEMD_SEARCH_NETWORK</constant>,
+
+        <constant>SD_PATH_SYSTEMD_SYSTEM_ENVIRONMENT_GENERATOR</constant>,
+        <constant>SD_PATH_SYSTEMD_USER_ENVIRONMENT_GENERATOR</constant>,
+        <constant>SD_PATH_SYSTEMD_SEARCH_SYSTEM_ENVIRONMENT_GENERATOR</constant>,
+        <constant>SD_PATH_SYSTEMD_SEARCH_USER_ENVIRONMENT_GENERATOR</constant>,
 };</funcsynopsisinfo>
 
       <funcprototype>
diff --git a/man/sd_pid_get_owner_uid.xml b/man/sd_pid_get_owner_uid.xml
index 3e30aca..5ce5a19 100644
--- a/man/sd_pid_get_owner_uid.xml
+++ b/man/sd_pid_get_owner_uid.xml
@@ -25,6 +25,14 @@
     <refname>sd_pid_get_slice</refname>
     <refname>sd_pid_get_user_slice</refname>
     <refname>sd_pid_get_cgroup</refname>
+    <refname>sd_pidfd_get_owner_uid</refname>
+    <refname>sd_pidfd_get_session</refname>
+    <refname>sd_pidfd_get_user_unit</refname>
+    <refname>sd_pidfd_get_unit</refname>
+    <refname>sd_pidfd_get_machine_name</refname>
+    <refname>sd_pidfd_get_slice</refname>
+    <refname>sd_pidfd_get_user_slice</refname>
+    <refname>sd_pidfd_get_cgroup</refname>
     <refname>sd_peer_get_owner_uid</refname>
     <refname>sd_peer_get_session</refname>
     <refname>sd_peer_get_user_unit</refname>
@@ -91,6 +99,54 @@
       </funcprototype>
 
       <funcprototype>
+        <funcdef>int <function>sd_pidfd_get_owner_uid</function></funcdef>
+        <paramdef>int <parameter>pidfd</parameter></paramdef>
+        <paramdef>uid_t *<parameter>uid</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pidfd_get_session</function></funcdef>
+        <paramdef>int <parameter>pidfd</parameter></paramdef>
+        <paramdef>char **<parameter>session</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pidfd_get_user_unit</function></funcdef>
+        <paramdef>int <parameter>pidfd</parameter></paramdef>
+        <paramdef>char **<parameter>unit</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pidfd_get_unit</function></funcdef>
+        <paramdef>int <parameter>pidfd</parameter></paramdef>
+        <paramdef>char **<parameter>unit</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pidfd_get_machine_name</function></funcdef>
+        <paramdef>int <parameter>pidfd</parameter></paramdef>
+        <paramdef>char **<parameter>name</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pidfd_get_slice</function></funcdef>
+        <paramdef>int <parameter>pidfd</parameter></paramdef>
+        <paramdef>char **<parameter>slice</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pidfd_get_user_slice</function></funcdef>
+        <paramdef>int <parameter>pidfd</parameter></paramdef>
+        <paramdef>char **<parameter>slice</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pidfd_get_cgroup</function></funcdef>
+        <paramdef>int <parameter>pidfd</parameter></paramdef>
+        <paramdef>char **<parameter>cgroup</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
         <funcdef>int <function>sd_peer_get_owner_uid</function></funcdef>
         <paramdef>int <parameter>fd</parameter></paramdef>
         <paramdef>uid_t *<parameter>uid</parameter></paramdef>
@@ -222,6 +278,20 @@
     functions is passed as 0, the operation is executed for the
     calling process.</para>
 
+    <para>The <function>sd_pidfd_get_owner_uid()</function>,
+    <function>sd_pidfd_get_session()</function>,
+    <function>sd_pidfd_get_user_unit()</function>,
+    <function>sd_pidfd_get_unit()</function>,
+    <function>sd_pidfd_get_machine_name()</function>,
+    <function>sd_pidfd_get_slice()</function>,
+    <function>sd_pidfd_get_user_slice()</function> and
+    <function>sd_pidfd_get_cgroup()</function> calls operate similarly to their PID counterparts, but accept a
+    <constant>PIDFD</constant> instead of a <constant>PID</constant>, which means they are not subject to recycle
+    race conditions as the process is pinned by the file descriptor during the whole duration of the invocation.
+    Note that these require a kernel that supports <constant>PIDFD</constant>. A suitable file descriptor may be
+    acquired via
+    <citerefentry project='man-pages'><refentrytitle>pidfd_open</refentrytitle><manvolnum>2</manvolnum></citerefentry>.</para>
+
     <para>The <function>sd_peer_get_owner_uid()</function>,
     <function>sd_peer_get_session()</function>,
     <function>sd_peer_get_user_unit()</function>,
@@ -229,12 +299,10 @@
     <function>sd_peer_get_machine_name()</function>,
     <function>sd_peer_get_slice()</function>,
     <function>sd_peer_get_user_slice()</function> and
-    <function>sd_peer_get_cgroup()</function> calls operate similar to
-    their PID counterparts, but operate on a connected AF_UNIX socket
-    and retrieve information about the connected peer process. Note
-    that these fields are retrieved via <filename>/proc/</filename>,
-    and hence are not suitable for authorization purposes, as they are
-    subject to races.</para>
+    <function>sd_peer_get_cgroup()</function> calls operate similarly to their PID counterparts, but accept a
+    connected <constant>AF_UNIX</constant> socket and retrieve information about the connected peer process.
+    Note that these fields are retrieved via <filename>/proc/</filename>, and hence are not suitable for
+    authorization purposes, as they are subject to races.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
index 9941a05..b69fa13 100644
--- a/man/sd_session_is_active.xml
+++ b/man/sd_session_is_active.xml
@@ -197,7 +197,7 @@
     formatting. However, desktops are strongly recommended to use the
     same identifiers and capitalization as for
     <varname>$XDG_CURRENT_DESKTOP</varname>, as defined by the <ulink
-    url="http://standards.freedesktop.org/desktop-entry-spec/latest/">Desktop
+    url="https://standards.freedesktop.org/desktop-entry-spec/latest/">Desktop
     Entry Specification</ulink>. The returned string needs to be freed
     with the libc
     <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
diff --git a/man/send-unit-files-changed.c b/man/send-unit-files-changed.c
index aecfbcb..dfd38a1 100644
--- a/man/send-unit-files-changed.c
+++ b/man/send-unit-files-changed.c
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <systemd/sd-bus.h>
 #define _cleanup_(f) __attribute__((cleanup(f)))
 
diff --git a/man/shutdown.xml b/man/shutdown.xml
index f29010f..24a934f 100644
--- a/man/shutdown.xml
+++ b/man/shutdown.xml
@@ -18,7 +18,7 @@
 
   <refnamediv>
     <refname>shutdown</refname>
-    <refpurpose>Halt, power-off or reboot the machine</refpurpose>
+    <refpurpose>Halt, power off or reboot the machine</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
@@ -33,8 +33,7 @@
   <refsect1>
     <title>Description</title>
 
-    <para><command>shutdown</command> may be used to halt, power-off
-    or reboot the machine.</para>
+    <para><command>shutdown</command> may be used to halt, power off, or reboot the machine.</para>
 
     <para>The first argument may be a time string (which is usually
     <literal>now</literal>). Optionally, this may be followed by a
@@ -81,50 +80,51 @@
         <term><option>-P</option></term>
         <term><option>--poweroff</option></term>
 
-        <listitem><para>Power-off the machine (the
-        default).</para></listitem>
+        <listitem><para>Power the machine off (the default).</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>-r</option></term>
         <term><option>--reboot</option></term>
 
-        <listitem><para>Reboot the
-        machine.</para></listitem>
+        <listitem><para>Reboot the machine.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>-h</option></term>
 
-        <listitem><para>Equivalent to <option>--poweroff</option>,
-        unless <option>--halt</option> is specified.</para></listitem>
+        <listitem><para>The same as <option>--poweroff</option>, but does not override the action to take if
+        it is "halt". E.g. <command>shutdown --reboot -h</command> means "poweroff", but <command>shutdown
+        --halt -h</command> means "halt".</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>-k</option></term>
 
-        <listitem><para>Do not halt, power-off, reboot, just write
-        wall message.</para></listitem>
+        <listitem><para>Do not halt, power off, or reboot, but just write the wall message.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>--no-wall</option></term>
 
-        <listitem><para>Do not send wall
-        message before
-        halt, power-off, reboot.</para></listitem>
+        <listitem><para>Do not send wall message before halt, power off, or reboot.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>-c</option></term>
 
-        <listitem><para>Cancel a pending shutdown. This may be used
-        to cancel the effect of an invocation of
-        <command>shutdown</command> with a time argument that is not
-        <literal>+0</literal> or
+        <listitem><para>Cancel a pending shutdown. This may be used to cancel the effect of an invocation of
+        <command>shutdown</command> with a time argument that is not <literal>+0</literal> or
         <literal>now</literal>.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--show</option></term>
+
+        <listitem><para>Show a pending shutdown action and time if
+        there is any.</para></listitem>
+      </varlistentry>
+
     </variablelist>
   </refsect1>
 
@@ -136,6 +136,14 @@
   </refsect1>
 
   <refsect1>
+    <title>Compatibility</title>
+
+    <para>The <command> shutdown</command> command in previous init systems (including sysvinit) defaulted to
+    single-user mode instead of powering off the machine. To change into single-user mode, use
+    <command>systemctl rescue</command> instead.</para>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/standard-specifiers.xml b/man/standard-specifiers.xml
index f166636..7aa7aca 100644
--- a/man/standard-specifiers.xml
+++ b/man/standard-specifiers.xml
@@ -4,6 +4,9 @@
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
 <tbody>
+  <!-- note: units also use the following deprecated specifiers that are not documented:
+       %c, %r, %R. Do not reuse. -->
+
   <row id='a'>
     <entry><literal>%a</literal></entry>
     <entry>Architecture</entry>
@@ -49,6 +52,11 @@
     <entry>Operating system ID</entry>
     <entry>The operating system identifier of the running system, as read from the <varname>ID=</varname> field of <filename>/etc/os-release</filename>. See <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry>
   </row>
+  <row id='q'>
+    <entry><literal>%q</literal></entry>
+    <entry>Pretty host name</entry>
+    <entry>The pretty hostname of the running system, as read from the <varname>PRETTY_HOSTNAME=</varname> field of <filename>/etc/machine-info</filename>. If not set, resolves to the short hostname. See <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry>
+  </row>
   <row id='T'>
     <entry><literal>%T</literal></entry>
     <entry>Directory for temporary files</entry>
diff --git a/man/system-or-user-ns.xml b/man/system-or-user-ns.xml
new file mode 100644
index 0000000..7a302d5
--- /dev/null
+++ b/man/system-or-user-ns.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
+<!--
+  SPDX-License-Identifier: LGPL-2.1-or-later
+-->
+
+<refsect1>
+
+<para id="singular">This option is only available for system services, or for services running in per-user
+ instances of the service manager when <varname>PrivateUsers=</varname> is enabled.</para>
+
+<para id="plural">These options are only available for system services, or for services running in per-user
+ instances of the service manager when <varname>PrivateUsers=</varname> is enabled.</para>
+
+</refsect1>
diff --git a/man/systemctl.xml b/man/systemctl.xml
index 1c14909..04b2e98 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -109,6 +109,25 @@
         </varlistentry>
 
         <varlistentry>
+          <term><command>list-automounts</command> <optional><replaceable>PATTERN</replaceable>…</optional></term>
+
+          <listitem>
+            <para>List automount units currently in memory, ordered by mount path.  If one or more
+            <replaceable>PATTERN</replaceable>s are specified, only automount units matching one of them are shown.
+            Produces output similar to
+            <programlisting>
+WHAT        WHERE                    MOUNTED IDLE TIMEOUT UNIT
+/dev/sdb1   /mnt/test                no      120s         mnt-test.automount
+binfmt_misc /proc/sys/fs/binfmt_misc yes     0            proc-sys-fs-binfmt_misc.automount
+
+2 automounts listed.</programlisting>
+            </para>
+
+            <para>Also see <option>--show-types</option>, <option>--all</option>, and <option>--state=</option>.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
           <term><command>list-sockets</command> <optional><replaceable>PATTERN</replaceable>…</optional></term>
 
           <listitem>
@@ -140,7 +159,7 @@
             Produces output similar to
             <programlisting>
 NEXT                         LEFT          LAST                         PASSED     UNIT                         ACTIVATES
-n/a                          n/a           Thu 2017-02-23 13:40:29 EST  3 days ago ureadahead-stop.timer        ureadahead-stop.service
+-                            -             Thu 2017-02-23 13:40:29 EST  3 days ago ureadahead-stop.timer        ureadahead-stop.service
 Sun 2017-02-26 18:55:42 EST  1min 14s left Thu 2017-02-23 13:54:44 EST  3 days ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
 Sun 2017-02-26 20:37:16 EST  1h 42min left Sun 2017-02-26 11:56:36 EST  6h ago     apt-daily.timer              apt-daily.service
 Sun 2017-02-26 20:57:49 EST  2h 3min left  Sun 2017-02-26 11:56:36 EST  6h ago     snapd.refresh.timer          snapd.refresh.service
@@ -188,40 +207,41 @@
           <term><command>status</command> <optional><replaceable>PATTERN</replaceable>…|<replaceable>PID</replaceable>…]</optional></term>
 
           <listitem>
-            <para>Show terse runtime status information about one or
-            more units, followed by most recent log data from the
-            journal. If no units are specified, show system status. If
-            combined with <option>--all</option>, also show the status of
-            all units (subject to limitations specified with
-            <option>-t</option>). If a PID is passed, show information
-            about the unit the process belongs to.</para>
+            <para>Show runtime status information about the whole system or about one or more units followed
+            by most recent log data from the journal. If no positional arguments are specified, and no unit
+            filter is given with <option>--type=</option>, <option>--state=</option>, or
+            <option>--failed</option>, shows the status of the whole system. If combined with
+            <option>--all</option>, follows that with the status of all units. If positional arguments are
+            specified, each positional argument is treated as either a unit name to show, or a glob pattern
+            to show units whose names match that pattern, or a PID to show the unit containing that PID. When
+            <option>--type=</option>, <option>--state=</option>, or <option>--failed</option> are used, units
+            are additionally filtered by the TYPE and ACTIVE state.</para>
 
-            <para>This function is intended to generate human-readable
-            output. If you are looking for computer-parsable output,
-            use <command>show</command> instead. By default, this
-            function only shows 10 lines of output and ellipsizes
-            lines to fit in the terminal window. This can be changed
-            with <option>--lines</option> and <option>--full</option>,
-            see above. In addition, <command>journalctl
-            --unit=<replaceable>NAME</replaceable></command> or
-            <command>journalctl
-            --user-unit=<replaceable>NAME</replaceable></command> use
-            a similar filter for messages and might be more
-            convenient.
-            </para>
+            <para>This function is intended to generate human-readable output. If you are looking for
+            computer-parsable output, use <command>show</command> instead. By default, this function only
+            shows 10 lines of output and ellipsizes lines to fit in the terminal window. This can be changed
+            with <option>--lines</option> and <option>--full</option>, see above. In addition,
+            <command>journalctl --unit=<replaceable>NAME</replaceable></command> or <command>journalctl
+            --user-unit=<replaceable>NAME</replaceable></command> use a similar filter for messages and might
+            be more convenient.</para>
 
-            <para>systemd implicitly loads units as necessary, so just running the <command>status</command> will
-            attempt to load a file. The command is thus not useful for determining if something was already loaded or
-            not.  The units may possibly also be quickly unloaded after the operation is completed if there's no reason
-            to keep it in memory thereafter.
-            </para>
+            <para>Note that this operation only displays <emphasis>runtime</emphasis> status, i.e. information about
+            the current invocation of the unit (if it is running) or the most recent invocation (if it is not
+            running anymore, and has not been released from memory). Information about earlier invocations,
+            invocations from previous system boots, or prior invocations that have already been released from
+            memory may be retrieved via <command>journalctl --unit=</command>.</para>
+
+            <para>systemd implicitly loads units as necessary, so just running the <command>status</command>
+            will attempt to load a file. The command is thus not useful for determining if something was
+            already loaded or not.  The units may possibly also be quickly unloaded after the operation is
+            completed if there's no reason to keep it in memory thereafter.</para>
 
             <example>
               <title>Example output from systemctl status </title>
 
               <programlisting>$ systemctl status bluetooth
 ● bluetooth.service - Bluetooth service
-   Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
+   Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; preset: enabled)
    Active: active (running) since Wed 2017-01-04 13:54:04 EST; 1 weeks 0 days ago
      Docs: man:bluetoothd(8)
  Main PID: 930 (bluetoothd)
@@ -237,29 +257,31 @@
 Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output error (5)
 </programlisting>
 
-            <para>The dot ("●") uses color on supported terminals to summarize the unit state at a glance. Along with
-            its color, its shape varies according to its state: <literal>inactive</literal> or
-            <literal>maintenance</literal> is a white circle ("○"), <literal>active</literal> is a green dot ("●"),
-            <literal>deactivating</literal> is a white dot, <literal>failed</literal> or <literal>error</literal> is
-            a red cross ("×"), and <literal>reloading</literal> is a green clockwise circle arrow ("↻").
-            </para>
+            <para>The dot ("●") uses color on supported terminals to summarize the unit state at a
+            glance. Along with its color, its shape varies according to its state:
+            <literal>inactive</literal> or <literal>maintenance</literal> is a white circle ("○"),
+            <literal>active</literal> is a green dot ("●"), <literal>deactivating</literal> is a white dot,
+            <literal>failed</literal> or <literal>error</literal> is a red cross ("×"), and
+            <literal>reloading</literal> is a green clockwise circle arrow ("↻").</para>
 
-            <para>The "Loaded:" line in the output will show <literal>loaded</literal> if the unit has been loaded into
-            memory. Other possible values for "Loaded:" include: <literal>error</literal> if there was a problem
-            loading it, <literal>not-found</literal> if no unit file was found for this unit,
-            <literal>bad-setting</literal> if an essential unit file setting could not be parsed and
-            <literal>masked</literal> if the unit file has been masked. Along with showing the path to the unit file,
-            this line will also show the enablement state.  Enabled commands start at boot.  See the full table of
-            possible enablement states — including the definition of <literal>masked</literal> — in the documentation
-            for the <command>is-enabled</command> command.
+            <para>The "Loaded:" line in the output will show <literal>loaded</literal> if the unit has been
+            loaded into memory. Other possible values for "Loaded:" include: <literal>error</literal> if
+            there was a problem loading it, <literal>not-found</literal> if no unit file was found for this
+            unit, <literal>bad-setting</literal> if an essential unit file setting could not be parsed and
+            <literal>masked</literal> if the unit file has been masked. Along with showing the path to the
+            unit file, this line will also show the enablement state.  Enabled units are included in the
+            dependency network between units, and thus are started at boot or via some other form of
+            activation.  See the full table of possible enablement states — including the definition of
+            <literal>masked</literal> — in the documentation for the <command>is-enabled</command> command.
             </para>
 
             <para>The "Active:" line shows active state.  The value is usually <literal>active</literal> or
-            <literal>inactive</literal>. Active could mean started, bound, plugged in, etc depending on the unit type.
-            The unit could also be in process of changing states, reporting a state of <literal>activating</literal> or
-            <literal>deactivating</literal>. A special <literal>failed</literal> state is entered when the service
-            failed in some way, such as a crash, exiting with an error code or timing out. If the failed state is
-            entered the cause will be logged for later reference.</para>
+            <literal>inactive</literal>. Active could mean started, bound, plugged in, etc depending on the
+            unit type.  The unit could also be in process of changing states, reporting a state of
+            <literal>activating</literal> or <literal>deactivating</literal>. A special
+            <literal>failed</literal> state is entered when the service failed in some way, such as a crash,
+            exiting with an error code or timing out. If the failed state is entered the cause will be logged
+            for later reference.</para>
             </example>
 
           </listitem>
@@ -332,6 +354,10 @@
             dependencies. If no units are specified,
             <filename>default.target</filename> is implied.</para>
 
+            <para>The units that are shown are additionally filtered by <option>--type=</option> and
+            <option>--state=</option> if those options are specified. Note that we won't be able to
+            use a tree structure in this case, so <option>--plain</option> is implied.</para>
+
             <para>By default, only target units are recursively
             expanded. When <option>--all</option> is passed, all other
             units are recursively expanded as well.</para>
@@ -465,7 +491,7 @@
             the new target, possibly including the graphical environment or terminal you are currently using.
             </para>
 
-            <para>Note that this is allowed only on units where
+            <para>Note that this operation is allowed only on units where
             <option>AllowIsolate=</option> is enabled. See
             <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
             for details.</para>
@@ -476,7 +502,7 @@
 
           <listitem>
             <para>Send a signal to one or more processes of the
-            unit. Use <option>--kill-who=</option> to select which
+            unit. Use <option>--kill-whom=</option> to select which
             process to kill. Use <option>--signal=</option> to select
             the signal to send.</para>
           </listitem>
@@ -749,6 +775,9 @@
             account.
             </para>
 
+            <para>When using this operation on units without install information, a warning about it is shown.
+            <option>--no-warn</option> can be used to suppress the warning.</para>
+
             <para>Enabling units should not be confused with starting (activating) units, as done by the
             <command>start</command> command. Enabling and starting units is orthogonal: units may be enabled without
             being started and started without being enabled. Enabling simply hooks the unit into various suggested
@@ -792,8 +821,8 @@
             executed. This output may be suppressed by passing <option>--quiet</option>.
             </para>
 
-            <para>This command honors <option>--system</option>, <option>--user</option>, <option>--runtime</option>
-            and <option>--global</option> in a similar way as <command>enable</command>.</para>
+            <para>This command honors <option>--system</option>, <option>--user</option>, <option>--runtime</option>,
+            <option>--global</option> and <option>--no-warn</option> in a similar way as <command>enable</command>.</para>
           </listitem>
         </varlistentry>
 
@@ -929,6 +958,11 @@
                     <entry>The unit file is invalid or another error occurred. Note that <command>is-enabled</command> will not actually return this state, but print an error message instead. However the unit file listing printed by <command>list-unit-files</command> might show it.</entry>
                     <entry>&gt; 0</entry>
                   </row>
+                  <row>
+                    <entry><literal>not-found</literal></entry>
+                    <entry>The unit file doesn't exist.</entry>
+                    <entry>4</entry>
+                  </row>
                 </tbody>
               </tgroup>
             </table>
@@ -964,7 +998,7 @@
           <term><command>link <replaceable>PATH</replaceable>…</command></term>
 
           <listitem>
-            <para>Link a unit file that is not in the unit file search paths into the unit file search path. This
+            <para>Link a unit file that is not in the unit file search path into the unit file search path. This
             command expects an absolute path to a unit file. The effect of this may be undone with
             <command>disable</command>. The effect of this command is that a unit file is made available for commands
             such as <command>start</command>, even though it is not installed directly in the unit search path. The
@@ -1031,6 +1065,9 @@
             temporary files which will be written to the real location if the
             editor exits successfully.</para>
 
+            <para>If <option>--drop-in=</option> is specified, the given drop-in file name
+            will be used instead of the default <filename>override.conf</filename>.</para>
+
             <para>If <option>--full</option> is specified, this will copy the
             original units instead of creating drop-in files.</para>
 
@@ -1145,7 +1182,7 @@
           <listitem>
             <para>Dump the systemd manager environment block. This is the environment
             block that is passed to all processes the manager spawns. The environment
-            block will be dumped in straight-forward form suitable for sourcing into
+            block will be dumped in straightforward form suitable for sourcing into
             most shells. If no special characters or whitespace is present in the variable
             values, no escaping is performed, and the assignments have the form
             <literal>VARIABLE=value</literal>. If whitespace or characters which have
@@ -1447,10 +1484,12 @@
           <term><command>reboot</command></term>
 
           <listitem>
-            <para>Shut down and reboot the system. This is mostly equivalent to <command>systemctl start reboot.target
-            --job-mode=replace-irreversibly --no-block</command>, but also prints a wall message to all users. This
-            command is asynchronous; it will return after the reboot operation is enqueued, without waiting for it to
-            complete.</para>
+            <para>Shut down and reboot the system.</para>
+
+            <para>This command mostly equivalent to <command>systemctl start reboot.target
+            --job-mode=replace-irreversibly --no-block</command>, but also prints a wall message to all
+            users. This command is asynchronous; it will return after the reboot operation is enqueued,
+            without waiting for it to complete.</para>
 
             <para>If combined with <option>--force</option>, shutdown of all running services is skipped, however all
             processes are killed and all file systems are unmounted or mounted read-only, immediately followed by the
@@ -1463,6 +1502,10 @@
             <para>If the switch <option>--reboot-argument=</option> is given, it will be passed as the optional
             argument to the <citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry>
             system call.</para>
+
+            <para>Options <option>--boot-loader-entry=</option>, <option>--boot-loader-menu=</option>, and
+            <option>--firmware-setup</option> can be used to select what to do <emphasis>after</emphasis> the
+            reboot. See the descriptions of those options for details.</para>
           </listitem>
         </varlistentry>
 
@@ -1499,15 +1542,16 @@
           <term><command>switch-root</command> <replaceable>ROOT</replaceable> <optional><replaceable>INIT</replaceable></optional></term>
 
           <listitem>
-            <para>Switches to a different root directory and executes a new system manager process below it. This is
-            intended for usage in initial RAM disks ("initrd"), and will transition from the initrd's system manager
-            process (a.k.a. "init" process) to the main system manager process which is loaded from the actual host
-            volume. This call takes two arguments: the directory that is to become the new root directory, and the path
-            to the new system manager binary below it to execute as PID 1. If the latter is omitted or the empty
-            string, a systemd binary will automatically be searched for and used as init. If the system manager path is
-            omitted, equal to the empty string or identical to the path to the systemd binary, the state of the
-            initrd's system manager process is passed to the main system manager, which allows later introspection of
-            the state of the services involved in the initrd boot phase.</para>
+            <para>Switches to a different root directory and executes a new system manager process below it.
+            This is intended for use in the initrd, and will transition from the initrd's system manager
+            process (a.k.a. "init" process) to the main system manager process which is loaded from the
+            actual host root files system. This call takes two arguments: the directory that is to become the
+            new root directory, and the path to the new system manager binary below it to execute as PID 1.
+            If the latter is omitted or the empty string, a systemd binary will automatically be searched for
+            and used as init. If the system manager path is omitted, equal to the empty string or identical
+            to the path to the systemd binary, the state of the initrd's system manager process is passed to
+            the main system manager, which allows later introspection of the state of the services involved
+            in the initrd boot phase.</para>
           </listitem>
         </varlistentry>
 
@@ -1615,18 +1659,13 @@
         <term><option>--type=</option></term>
 
         <listitem>
-          <para>The argument should be a comma-separated list of unit
-          types such as <option>service</option> and
-          <option>socket</option>.
-          </para>
+          <para>The argument is a comma-separated list of unit types such as <option>service</option> and
+          <option>socket</option>. When units are listed with <command>list-units</command>,
+          <command>list-dependencies</command>, <command>show</command>, or <command>status</command>,
+          only units of the specified types will be shown. By default, units of all types are shown.</para>
 
-          <para>If one of the arguments is a unit type, when listing
-          units, limit display to certain unit types. Otherwise, units
-          of all types will be shown.</para>
-
-          <para>As a special case, if one of the arguments is
-          <option>help</option>, a list of allowed values will be
-          printed and the program will exit.</para>
+          <para>As a special case, if one of the arguments is <option>help</option>, a list of allowed values
+          will be printed and the program will exit.</para>
         </listitem>
       </varlistentry>
 
@@ -1634,14 +1673,13 @@
         <term><option>--state=</option></term>
 
         <listitem>
-          <para>The argument should be a comma-separated list of unit
-          LOAD, SUB, or ACTIVE states. When listing units, show only
-          those in the specified states. Use <option>--state=failed</option>
-          to show only failed units.</para>
+          <para>The argument is a comma-separated list of unit LOAD, SUB, or ACTIVE states. When listing
+          units with <command>list-units</command>, <command>list-dependencies</command>, <command>show</command>
+          or <command>status</command>, show only those in the specified states. Use <option>--state=failed</option>
+          or <option>--failed</option> to show only failed units.</para>
 
-          <para>As a special case, if one of the arguments is
-          <option>help</option>, a list of allowed values will be
-          printed and the program will exit.</para>
+          <para>As a special case, if one of the arguments is <option>help</option>, a list of allowed values
+          will be printed and the program will exit.</para>
         </listitem>
       </varlistentry>
 
@@ -1922,23 +1960,21 @@
         <term><option>--check-inhibitors=</option></term>
 
         <listitem>
-          <para>When system shutdown or sleep state is request, this option controls how to deal with
-          inhibitor locks. It takes one of <literal>auto</literal>, <literal>yes</literal> or
+          <para>When system shutdown or sleep state is requested, this option controls checking of inhibitor
+          locks. It takes one of <literal>auto</literal>, <literal>yes</literal> or
           <literal>no</literal>. Defaults to <literal>auto</literal>, which will behave like
-          <literal>yes</literal> for interactive invocations (i.e. from a TTY) and <literal>no</literal>
-          for non-interactive invocations.
-          <literal>yes</literal> will let the request respect inhibitor locks.
-          <literal>no</literal> will let the request ignore inhibitor locks.
-          </para>
-          <para>Applications can establish inhibitor locks to avoid that certain important operations
-          (such as CD burning or suchlike) are interrupted by system shutdown or a sleep state. Any user may
-          take these locks and privileged users may override these locks.
-          If any locks are taken, shutdown and sleep state requests will normally fail (unless privileged)
-          and a list of active locks is printed.
-          However, if <literal>no</literal> is specified or <literal>auto</literal> is specified on a
-          non-interactive requests, the established locks are ignored and not shown, and the operation
-          attempted anyway, possibly requiring additional privileges.
-          May be overridden by <option>--force</option>.</para>
+          <literal>yes</literal> for interactive invocations (i.e. from a TTY) and <literal>no</literal> for
+          non-interactive invocations. <literal>yes</literal> lets the request respect inhibitor locks.
+          <literal>no</literal> lets the request ignore inhibitor locks.</para>
+
+          <para>Applications can establish inhibitor locks to prevent certain important operations (such as
+          CD burning) from being interrupted by system shutdown or sleep. Any user may take these locks and
+          privileged users may override these locks. If any locks are taken, shutdown and sleep state
+          requests will normally fail (unless privileged). However, if <literal>no</literal> is specified or
+          <literal>auto</literal> is specified on a non-interactive requests, the operation will be
+          attempted. If locks are present, the operation may require additional privileges.</para>
+
+          <para>Option <option>--force</option> provides another way to override inhibitors.</para>
         </listitem>
       </varlistentry>
 
@@ -1977,6 +2013,25 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--no-warn</option></term>
+
+        <listitem>
+          <para>Don't generate the warnings shown by default in the following cases:
+          <itemizedlist>
+            <listitem>
+              <para>when <command>systemctl</command> is invoked without procfs mounted on
+              <filename>/proc/</filename>,</para>
+            </listitem>
+            <listitem>
+              <para>when using <command>enable</command> or <command>disable</command> on units without
+              install information (i.e. don't have or have an empty [Install] section).</para>
+            </listitem>
+          </itemizedlist>
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--no-block</option></term>
 
         <listitem>
@@ -2066,7 +2121,7 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>--kill-who=</option></term>
+        <term><option>--kill-whom=</option></term>
 
         <listitem>
           <para>When used with <command>kill</command>, choose which
@@ -2181,6 +2236,19 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--image=<replaceable>image</replaceable></option></term>
+
+        <listitem><para>Takes a path to a disk image file or block device node. If specified, all operations
+        are applied to file system in the indicated disk image. This option is similar to
+        <option>--root=</option>, but operates on file systems stored in disk images or block devices. The
+        disk image should either contain just a file system or a set of file systems within a GPT partition
+        table, following the <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
+        Specification</ulink>. For further information on supported disk images, see
+        <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+        switch of the same name.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--runtime</option></term>
 
         <listitem>
@@ -2249,7 +2317,7 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>--boot-loader-menu=</option></term>
+        <term><option>--boot-loader-menu=<replaceable>timeout</replaceable></option></term>
 
         <listitem>
           <para>When used with the <command>reboot</command> command, indicate to the system's boot loader to
@@ -2260,7 +2328,7 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>--boot-loader-entry=</option></term>
+        <term><option>--boot-loader-entry=<replaceable>ID</replaceable></option></term>
 
         <listitem>
           <para>When used with the <command>reboot</command> command, indicate to the system's boot loader to
@@ -2307,6 +2375,13 @@
 
           <variablelist>
             <varlistentry>
+              <term><option>unix</option></term>
+              <listitem><para><literal>@seconds-since-the-epoch</literal></para></listitem>
+            </varlistentry>
+          </variablelist>
+
+          <variablelist>
+            <varlistentry>
               <term><option>us</option></term>
               <term><option>µs</option></term>
               <listitem><para><literal>Day YYYY-MM-DD HH:MM:SS.UUUUUU TZ</literal></para></listitem>
@@ -2345,7 +2420,7 @@
         <listitem><para>Only allowed with <command>reload-or-restart</command>. Enqueues restart jobs for all
         units that have the <literal>needs-restart</literal> mark, and reload jobs for units that have the
         <literal>needs-reload</literal> mark. When a unit marked for reload does not support reload, restart
-        will be queued. Those properties can be set using <command>set-property Marks</command>.</para>
+        will be queued. Those properties can be set using <command>set-property Markers=…</command>.</para>
 
         <para>Unless <option>--no-block</option> is used, <command>systemctl</command> will wait for the
         queued jobs to finish.</para></listitem>
@@ -2357,6 +2432,15 @@
         <listitem><para>When used with <command>bind</command>, creates a read-only bind mount.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--drop-in=</option></term>
+
+        <listitem>
+          <para>When used with <command>edit</command>, use the given drop-in file name instead of
+          <filename>override.conf</filename>.</para>
+        </listitem>
+      </varlistentry>
+
       <xi:include href="user-system-options.xml" xpointer="host" />
       <xi:include href="user-system-options.xml" xpointer="machine" />
 
diff --git a/man/systemd-ac-power.xml b/man/systemd-ac-power.xml
new file mode 100644
index 0000000..a4c9378
--- /dev/null
+++ b/man/systemd-ac-power.xml
@@ -0,0 +1,71 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd-ac-power" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>systemd-ac-power</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-ac-power</refentrytitle>
+    <manvolnum>1</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-ac-power</refname>
+    <refpurpose>Report whether we are connected to an external power source</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>systemd-ac-power</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><command>systemd-ac-power</command> may be used to check whether the system
+    is running on AC power or not. By default it will simply return success (if we
+    can detect that we are running on AC power) or failure, with no output.
+    This can be useful for example to debug <varname>ConditionACPower=</varname> (see
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>).</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <para>The following options are understood:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>-v</option></term>
+        <term><option>--verbose</option></term>
+
+        <listitem><para>Show result as text instead of just returning success or failure.</para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="help" />
+      <xi:include href="standard-options.xml" xpointer="version" />
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Exit status</title>
+
+    <para>On success (running on AC power), 0 is returned, a non-zero failure code otherwise.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml
index 4da066e..03e0552 100644
--- a/man/systemd-analyze.xml
+++ b/man/systemd-analyze.xml
@@ -43,6 +43,7 @@
       <command>systemd-analyze</command>
       <arg choice="opt" rep="repeat">OPTIONS</arg>
       <arg choice="plain">dump</arg>
+      <arg choice="opt" rep="repeat"><replaceable>PATTERN</replaceable></arg>
     </cmdsynopsis>
 
     <cmdsynopsis>
@@ -62,6 +63,11 @@
     <cmdsynopsis>
       <command>systemd-analyze</command>
       <arg choice="opt" rep="repeat">OPTIONS</arg>
+      <arg choice="plain">unit-files</arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>systemd-analyze</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
       <arg choice="plain">unit-paths</arg>
     </cmdsynopsis>
     <cmdsynopsis>
@@ -91,6 +97,12 @@
     <cmdsynopsis>
       <command>systemd-analyze</command>
       <arg choice="opt" rep="repeat">OPTIONS</arg>
+      <arg choice="plain">filesystems</arg>
+      <arg choice="opt"><replaceable>SET</replaceable>…</arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>systemd-analyze</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
       <arg choice="plain">calendar</arg>
       <arg choice="plain" rep="repeat"><replaceable>SPEC</replaceable></arg>
     </cmdsynopsis>
@@ -115,6 +127,14 @@
     <cmdsynopsis>
       <command>systemd-analyze</command>
       <arg choice="opt" rep="repeat">OPTIONS</arg>
+      <arg choice="plain">compare-versions</arg>
+      <arg choice="plain"><replaceable>VERSION1</replaceable></arg>
+      <arg choice="opt"><replaceable>OP</replaceable></arg>
+      <arg choice="plain"><replaceable>VERSION2</replaceable></arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>systemd-analyze</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
       <arg choice="plain">verify</arg>
       <arg choice="opt" rep="repeat"><replaceable>FILE</replaceable></arg>
     </cmdsynopsis>
@@ -124,6 +144,12 @@
       <arg choice="plain">security</arg>
       <arg choice="plain" rep="repeat"><replaceable>UNIT</replaceable></arg>
     </cmdsynopsis>
+    <cmdsynopsis>
+      <command>systemd-analyze</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+      <arg choice="plain">inspect-elf</arg>
+      <arg choice="plain" rep="repeat"><replaceable>FILE</replaceable></arg>
+    </cmdsynopsis>
   </refsynopsisdiv>
 
   <refsect1>
@@ -142,10 +168,10 @@
       <title><command>systemd-analyze time</command></title>
 
       <para>This command prints the time spent in the kernel before userspace has been reached, the time
-      spent in the initial RAM disk (initrd) before normal system userspace has been reached, and the time
-      normal system userspace took to initialize. Note that these measurements simply measure the time passed
-      up to the point where all system services have been spawned, but not necessarily until they fully
-      finished initialization or the disk is idle.</para>
+      spent in the initrd before normal system userspace has been reached, and the time normal system
+      userspace took to initialize. Note that these measurements simply measure the time passed up to the
+      point where all system services have been spawned, but not necessarily until they fully finished
+      initialization or the disk is idle.</para>
 
       <example>
         <title><command>Show how long the boot took</command></title>
@@ -201,7 +227,7 @@
       <replaceable>UNIT</replaceable>s or for the default target otherwise). The time after the unit is
       active or started is printed after the "@" character. The time the unit takes to start is printed after
       the "+" character. Note that the output might be misleading as the initialization of services might
-      depend on socket activation and because of the parallel execution of units. Also, similar to the
+      depend on socket activation and because of the parallel execution of units. Also, similarly to the
       <command>blame</command> command, this only takes into account the time units spent in
       <literal>activating</literal> state, and hence does not cover units that never went through an
       <literal>activating</literal> state (such as device units that transition directly from
@@ -229,10 +255,12 @@
     </refsect2>
 
     <refsect2>
-      <title><command>systemd-analyze dump</command></title>
+      <title><command>systemd-analyze dump [<replaceable>pattern</replaceable>…]</command></title>
 
-      <para>This command outputs a (usually very long) human-readable serialization of the complete server
-      state. Its format is subject to change without notice and should not be parsed by applications.</para>
+      <para>Without any parameter, this command outputs a (usually very long) human-readable serialization of
+      the complete service manager state. Optional glob pattern may be specified, causing the output to be
+      limited to units whose names match one of the patterns. The output format is subject to change without
+      notice and should not be parsed by applications.</para>
 
       <example>
         <title>Show the internal state of user manager</title>
@@ -257,8 +285,8 @@
     <refsect2>
       <title><command>systemd-analyze plot</command></title>
 
-      <para>This command prints an SVG graphic detailing which system services have been started at what
-      time, highlighting the time they spent on initialization.</para>
+      <para>This command prints either an SVG graphic, detailing which system services have been started at what
+      time, highlighting the time they spent on initialization, or the raw time data in JSON or table format.</para>
 
       <example>
         <title><command>Plot a bootchart</command></title>
@@ -267,6 +295,13 @@
 $ eog bootup.svg&amp;
 </programlisting>
       </example>
+
+      <para>Note that this plot is based on the most recent per-unit timing data of loaded units. This means
+      that if a unit gets started, then stopped and then started again the information shown will cover the
+      most recent start cycle, not the first one. Thus it's recommended to consult this information only
+      shortly after boot, so that this distinction doesn't matter. Moreover, units that are not referenced by
+      any other unit through a dependency might be unloaded by the service manager once they terminate (and
+      did not fail). Such units will not show up in the plot.</para>
     </refsect2>
 
     <refsect2>
@@ -411,6 +446,14 @@
     </refsect2>
 
     <refsect2>
+      <title><command>systemd-analyze filesystems <optional><replaceable>SET</replaceable>...</optional></command></title>
+
+      <para>This command will list filesystems in the specified filesystem set
+      <replaceable>SET</replaceable>, or all known sets if no sets are specified. Argument
+      <replaceable>SET</replaceable> must include the <literal>@</literal> prefix.</para>
+    </refsect2>
+
+    <refsect2>
       <title><command>systemd-analyze calendar <replaceable>EXPRESSION</replaceable>...</command></title>
 
       <para>This command will parse and normalize repetitive calendar time events, and will calculate when
@@ -534,10 +577,57 @@
     </refsect2>
 
     <refsect2>
+      <title><command>systemd-analyze compare-versions
+      <replaceable>VERSION1</replaceable>
+      <optional><replaceable>OP</replaceable></optional>
+      <replaceable>VERSION2</replaceable></command></title>
+
+      <para>This command has two distinct modes of operation, depending on whether the operator
+      <replaceable>OP</replaceable> is specified.</para>
+
+      <para>In the first mode — when <replaceable>OP</replaceable> is not specified — it will compare the two
+      version strings and print either <literal><replaceable>VERSION1</replaceable> &lt;
+      <replaceable>VERSION2</replaceable></literal>, or <literal><replaceable>VERSION1</replaceable> ==
+      <replaceable>VERSION2</replaceable></literal>, or <literal><replaceable>VERSION1</replaceable> &gt;
+      <replaceable>VERSION2</replaceable></literal> as appropriate.</para>
+
+      <para>The exit status is <constant>0</constant> if the versions are equal, <constant>11</constant> if
+      the version of the right is smaller, and <constant>12</constant> if the version of the left is
+      smaller. (This matches the convention used by <command>rpmdev-vercmp</command>.)</para>
+
+      <para>In the second mode — when <replaceable>OP</replaceable> is specified — it will compare the two
+      version strings using the operation <replaceable>OP</replaceable> and return <constant>0</constant>
+      (success) if they condition is satisfied, and <constant>1</constant> (failure)
+      otherwise. <constant>OP</constant> may be <command>lt</command>, <command>le</command>,
+      <command>eq</command>, <command>ne</command>, <command>ge</command>, <command>gt</command>. In this
+      mode, no output is printed.
+      (This matches the convention used by
+      <citerefentry project='die-net'><refentrytitle>dpkg</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+      <option>--compare-versions</option>.)</para>
+
+      <example>
+        <title>Compare versions of a package</title>
+
+        <programlisting>
+$ systemd-analyze compare-versions systemd-250~rc1.fc36.aarch64 systemd-251.fc36.aarch64
+systemd-250~rc1.fc36.aarch64 &lt; systemd-251.fc36.aarch64
+$ echo $?
+12
+
+$ systemd-analyze compare-versions 1 lt 2; echo $?
+0
+$ systemd-analyze compare-versions 1 ge 2; echo $?
+1
+        </programlisting>
+      </example>
+    </refsect2>
+
+    <refsect2>
       <title><command>systemd-analyze verify <replaceable>FILE</replaceable>...</command></title>
 
       <para>This command will load unit files and print warnings if any errors are detected. Files specified
-      on the command line will be loaded, but also any other units referenced by them. The full unit search
+      on the command line will be loaded, but also any other units referenced by them. A unit's name on disk
+      can be overridden by specifying an alias after a colon; see below for an example. The full unit search
       path is formed by combining the directories for all command line arguments, and the usual unit load
       paths. The variable <varname>$SYSTEMD_UNIT_PATH</varname> is supported, and may be used to replace or
       augment the compiled in set of unit load paths; see
@@ -599,6 +689,27 @@
 Service b@0.service not loaded, b.socket cannot be started.
         </programlisting>
       </example>
+
+      <example>
+        <title>Aliasing a unit</title>
+
+        <programlisting>$ cat /tmp/source
+[Unit]
+Description=Hostname printer
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/echo %H
+MysteryKey=true
+
+$ systemd-analyze verify /tmp/source
+Failed to prepare filename /tmp/source: Invalid argument
+
+$ systemd-analyze verify /tmp/source:alias.service
+/tmp/systemd-analyze-XXXXXX/alias.service:7: Unknown key name 'MysteryKey' in section 'Service', ignoring.
+        </programlisting>
+      </example>
+
     </refsect2>
 
     <refsect2>
@@ -645,6 +756,39 @@
 </programlisting>
       </example>
     </refsect2>
+
+    <refsect2>
+      <title><command>systemd-analyze inspect-elf <replaceable>FILE</replaceable>...</command></title>
+
+      <para>This command will load the specified files, and if they are ELF objects (executables,
+      libraries, core files, etc.) it will parse the embedded packaging metadata, if any, and print
+      it in a table or json format. See the <ulink url="https://systemd.io/COREDUMP_PACKAGE_METADATA/">
+      Packaging Metadata</ulink> documentation for more information.</para>
+
+      <example>
+        <title>Table output</title>
+
+        <programlisting>$ systemd-analyze inspect-elf --json=pretty /tmp/core.fsverity.1000.f77dac5dc161402aa44e15b7dd9dcf97.58561.1637106137000000
+{
+        "elfType" : "coredump",
+        "elfArchitecture" : "AMD x86-64",
+        "/home/bluca/git/fsverity-utils/fsverity" : {
+                "type" : "deb",
+                "name" : "fsverity-utils",
+                "version" : "1.3-1",
+                "buildId" : "7c895ecd2a271f93e96268f479fdc3c64a2ec4ee"
+        },
+        "/home/bluca/git/fsverity-utils/libfsverity.so.0" : {
+                "type" : "deb",
+                "name" : "fsverity-utils",
+                "version" : "1.3-1",
+                "buildId" : "b5e428254abf14237b0ae70ed85fffbb98a78f88"
+        }
+}
+        </programlisting>
+      </example>
+
+    </refsect2>
   </refsect1>
 
   <refsect1>
@@ -745,10 +889,350 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--recursive-errors=<replaceable>MODE</replaceable></option></term>
+
+        <listitem><para>Control verification of units and their dependencies and whether
+        <command>systemd-analyze verify</command> exits with a non-zero process exit status or not. With
+        <command>yes</command>, return a non-zero process exit status when warnings arise during verification
+        of either the specified unit or any of its associated dependencies. With <command>no</command>,
+        return a non-zero process exit status when warnings arise during verification of only the specified
+        unit. With <command>one</command>, return a non-zero process exit status when warnings arise during
+        verification of either the specified unit or its immediate dependencies. If this option is not
+        specified, zero is returned as the exit status regardless whether warnings arise during verification
+        or not.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--root=<replaceable>PATH</replaceable></option></term>
 
-        <listitem><para>With <command>cat-files</command>, show config files underneath
-        the specified root path <replaceable>PATH</replaceable>.</para></listitem>
+        <listitem><para>With <command>cat-files</command> and <command>verify</command>,
+        operate on files underneath the specified root path <replaceable>PATH</replaceable>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--image=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>With <command>cat-files</command> and <command>verify</command>,
+        operate on files inside the specified image path <replaceable>PATH</replaceable>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--offline=<replaceable>BOOL</replaceable></option></term>
+
+        <listitem><para>With <command>security</command>, perform an offline security review
+        of the specified unit files, i.e. does not have to rely on PID 1 to acquire security
+        information for the files like the <command>security</command> verb when used by itself does.
+        This means that <option>--offline=</option> can be used with <option>--root=</option> and
+        <option>--image=</option> as well. If a unit's overall exposure level is above that set by
+        <option>--threshold=</option> (default value is 100), <option>--offline=</option> will return
+        an error.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--profile=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>With <command>security</command> <option>--offline=</option>, takes into
+        consideration the specified portable profile when assessing unit settings.
+        The profile can be passed by name, in which case the well-known system locations will
+        be searched, or it can be the full path to a specific drop-in file.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--threshold=<replaceable>NUMBER</replaceable></option></term>
+
+        <listitem><para>With <command>security</command>, allow the user to set a custom value
+        to compare the overall exposure level with, for the specified unit files. If a unit's
+        overall exposure level, is greater than that set by the user, <command>security</command>
+        will return an error. <option>--threshold=</option> can be used with <option>--offline=</option>
+        as well and its default value is 100.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--security-policy=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>With <command>security</command>, allow the user to define a custom set of
+        requirements formatted as a JSON file against which to compare the specified unit file(s)
+        and determine their overall exposure level to security threats.</para>
+
+        <table>
+          <title>Accepted Assessment Test Identifiers</title>
+
+          <tgroup cols='1'>
+            <colspec colname='directive' />
+            <thead>
+              <row>
+                <entry>Assessment Test Identifier</entry>
+              </row>
+            </thead>
+            <tbody>
+              <row>
+                <entry>UserOrDynamicUser</entry>
+              </row>
+              <row>
+                <entry>SupplementaryGroups</entry>
+              </row>
+              <row>
+                <entry>PrivateMounts</entry>
+              </row>
+              <row>
+                <entry>PrivateDevices</entry>
+              </row>
+              <row>
+                <entry>PrivateTmp</entry>
+              </row>
+              <row>
+                <entry>PrivateNetwork</entry>
+              </row>
+              <row>
+                <entry>PrivateUsers</entry>
+              </row>
+              <row>
+                <entry>ProtectControlGroups</entry>
+              </row>
+              <row>
+                <entry>ProtectKernelModules</entry>
+              </row>
+              <row>
+                <entry>ProtectKernelTunables</entry>
+              </row>
+              <row>
+                <entry>ProtectKernelLogs</entry>
+              </row>
+              <row>
+                <entry>ProtectClock</entry>
+              </row>
+              <row>
+                <entry>ProtectHome</entry>
+              </row>
+              <row>
+                <entry>ProtectHostname</entry>
+              </row>
+              <row>
+                <entry>ProtectSystem</entry>
+              </row>
+              <row>
+                <entry>RootDirectoryOrRootImage</entry>
+              </row>
+              <row>
+                <entry>LockPersonality</entry>
+              </row>
+              <row>
+                <entry>MemoryDenyWriteExecute</entry>
+              </row>
+              <row>
+                <entry>NoNewPrivileges</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_ADMIN</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SET_UID_GID_PCAP</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_PTRACE</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_TIME</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_NET_ADMIN</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_RAWIO</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_MODULE</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_AUDIT</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYSLOG</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_NICE_RESOURCE</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_MKNOD</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_CHOWN_FSETID_SETFCAP</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_DAC_FOWNER_IPC_OWNER</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_KILL</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_NET_BIND_SERVICE_BROADCAST_RAW</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_BOOT</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_MAC</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_LINUX_IMMUTABLE</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_IPC_LOCK</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_CHROOT</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_BLOCK_SUSPEND</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_WAKE_ALARM</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_LEASE</entry>
+              </row>
+              <row>
+                <entry>CapabilityBoundingSet_CAP_SYS_TTY_CONFIG</entry>
+              </row>
+              <row>
+                <entry>UMask</entry>
+              </row>
+              <row>
+                <entry>KeyringMode</entry>
+              </row>
+              <row>
+                <entry>ProtectProc</entry>
+              </row>
+              <row>
+                <entry>ProcSubset</entry>
+              </row>
+              <row>
+                <entry>NotifyAccess</entry>
+              </row>
+              <row>
+                <entry>RemoveIPC</entry>
+              </row>
+              <row>
+                <entry>Delegate</entry>
+              </row>
+              <row>
+                <entry>RestrictRealtime</entry>
+              </row>
+              <row>
+                <entry>RestrictSUIDSGID</entry>
+              </row>
+              <row>
+                <entry>RestrictNamespaces_user</entry>
+              </row>
+              <row>
+                <entry>RestrictNamespaces_mnt</entry>
+              </row>
+              <row>
+                <entry>RestrictNamespaces_ipc</entry>
+              </row>
+              <row>
+                <entry>RestrictNamespaces_pid</entry>
+              </row>
+              <row>
+                <entry>RestrictNamespaces_cgroup</entry>
+              </row>
+              <row>
+                <entry>RestrictNamespaces_uts</entry>
+              </row>
+              <row>
+                <entry>RestrictNamespaces_net</entry>
+              </row>
+              <row>
+                <entry>RestrictAddressFamilies_AF_INET_INET6</entry>
+              </row>
+              <row>
+                <entry>RestrictAddressFamilies_AF_UNIX</entry>
+              </row>
+              <row>
+                <entry>RestrictAddressFamilies_AF_NETLINK</entry>
+              </row>
+              <row>
+                <entry>RestrictAddressFamilies_AF_PACKET</entry>
+              </row>
+              <row>
+                <entry>RestrictAddressFamilies_OTHER</entry>
+              </row>
+              <row>
+                <entry>SystemCallArchitectures</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_swap</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_obsolete</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_clock</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_cpu_emulation</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_debug</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_mount</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_module</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_raw_io</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_reboot</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_privileged</entry>
+              </row>
+              <row>
+                <entry>SystemCallFilter_resources</entry>
+              </row>
+              <row>
+                <entry>IPAddressDeny</entry>
+              </row>
+              <row>
+                <entry>DeviceAllow</entry>
+              </row>
+              <row>
+                <entry>AmbientCapabilities</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </table>
+
+        <para>See example "JSON Policy" below.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--json=<replaceable>MODE</replaceable></option></term>
+
+        <listitem><para>With the <command>security</command> command, generate a JSON formatted
+        output of the security analysis table. The format is a JSON array with objects
+        containing the following fields: <varname>set</varname> which indicates if the setting has
+        been enabled or not, <varname>name</varname> which is what is used to refer to the setting,
+        <varname>json_field</varname> which is the JSON compatible identifier of the setting,
+        <varname>description</varname> which is an outline of the setting state, and
+        <varname>exposure</varname> which is a number in the range 0.0…10.0, where a higher value
+        corresponds to a higher security threat. The JSON version of the table is printed to standard
+        output. The <replaceable>MODE</replaceable> passed to the option can be one of three:
+        <option>off</option> which is the default, <option>pretty</option> and <option>short</option>
+        which respectively output a prettified or shorted JSON version of the security table.
+
+        With the <command>plot</command> command, generate a JSON formatted output of the raw time data.
+        The format is a JSON array with objects containing the following fields: <varname>name</varname>
+        which is the unit name, <varname>activated</varname> which is the time after startup the
+        service was activated, <varname>activating</varname> which is how long after startup the service
+        was initially started, <varname>time</varname> which is how long the service took to activate
+        from when it was initially started, <varname>deactivated</varname> which is the time after startup
+        that the service was deactivated, <varname>deactivating</varname> which is the time after startup
+        that the service was initially told to deactivate.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -765,9 +1249,44 @@
         to the specified point in time. If not specified defaults to the current time.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--unit=<replaceable>UNIT</replaceable></option></term>
+
+        <listitem><para>When used with the <command>condition</command> command, evaluate all the
+        <varname index="false">Condition*=...</varname> and <varname index="false">Assert*=...</varname>
+        assignments in the specified unit file. The full unit search path is formed by combining the
+        directories for the specified unit with the usual unit load paths. The variable
+        <varname>$SYSTEMD_UNIT_PATH</varname> is supported, and may be used to replace or augment the
+        compiled in set of unit load paths; see
+        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. All
+        units files present in the directory containing the specified unit will be used in preference to the
+        other paths.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--table</option></term>
+
+        <listitem><para>When used with the <command>plot</command> command, the raw time data is output in a table.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--no-legend</option></term>
+
+        <listitem><para>When used with the <command>plot</command> command in combination with either
+        <option>--table</option> or <option>--json=</option>, no legends or hints are included in the output.
+        </para></listitem>
+      </varlistentry>
+
       <xi:include href="user-system-options.xml" xpointer="host" />
       <xi:include href="user-system-options.xml" xpointer="machine" />
 
+      <varlistentry>
+        <term><option>--quiet</option></term>
+
+        <listitem><para>Suppress hints and other non-essential output.</para></listitem>
+      </varlistentry>
+
       <xi:include href="standard-options.xml" xpointer="help" />
       <xi:include href="standard-options.xml" xpointer="version" />
       <xi:include href="standard-options.xml" xpointer="no-pager" />
@@ -778,13 +1297,81 @@
   <refsect1>
     <title>Exit status</title>
 
-    <para>On success, 0 is returned, a non-zero failure code
-    otherwise.</para>
+    <para>For most commands, 0 is returned on success, and a non-zero failure code otherwise.</para>
+
+    <para>With the verb <command>compare-versions</command>, in the two-argument form,
+    <constant>12</constant>, <constant>0</constant>, <constant>11</constant> is returned if the second
+    version string is respectively larger, equal, or smaller to the first. In the three-argument form,
+    <constant>0</constant> or <constant>1</constant> if the condition is respectively true or false.</para>
   </refsect1>
 
   <xi:include href="common-variables.xml" />
 
   <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>JSON Policy</title>
+
+      <para>The JSON file passed as a path parameter to <option>--security-policy=</option> has a top-level
+      JSON object, with keys being the assessment test identifiers mentioned above. The values in the file
+      should be JSON objects with one or more of the following fields: <option>description_na</option>
+      (string), <option>description_good</option> (string), <option>description_bad</option> (string),
+      <option>weight</option> (unsigned integer), and <option>range</option> (unsigned integer). If any of
+      these fields corresponding to a specific id of the unit file is missing from the JSON object, the
+      default built-in field value corresponding to that same id is used for security analysis as default.
+      The weight and range fields are used in determining the overall exposure level of the unit files: the
+      value of each setting is assigned a badness score, which is multiplied by the policy weight and divided
+      by the policy range to determine the overall exposure that the setting implies. The computed badness is
+      summed across all settings in the unit file, normalized to the 1…100 range, and used to determine the
+      overall exposure level of the unit.  By allowing users to manipulate these fields, the 'security' verb
+      gives them the option to decide for themself which ids are more important and hence should have a
+      greater effect on the exposure level. A weight of <literal>0</literal> means the setting will not be
+      checked.</para>
+
+      <programlisting>
+{
+  "PrivateDevices":
+    {
+    "description_good": "Service has no access to hardware devices",
+    "description_bad": "Service potentially has access to hardware devices",
+    "weight": 1000,
+    "range": 1
+    },
+  "PrivateMounts":
+    {
+    "description_good": "Service cannot install system mounts",
+    "description_bad": "Service may install system mounts",
+    "weight": 1000,
+    "range": 1
+    },
+  "PrivateNetwork":
+    {
+    "description_good": "Service has no access to the host's network",
+    "description_bad": "Service has access to the host's network",
+    "weight": 2500,
+    "range": 1
+    },
+  "PrivateTmp":
+    {
+    "description_good": "Service has no access to other software's temporary files",
+    "description_bad": "Service has access to other software's temporary files",
+    "weight": 1000,
+    "range": 1
+    },
+  "PrivateUsers":
+    {
+    "description_good": "Service does not have access to other users",
+    "description_bad": "Service has access to other users",
+    "weight": 1000,
+    "range": 1
+    }
+}
+      </programlisting>
+    </example>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml
index c3c9f57..27f7775 100644
--- a/man/systemd-ask-password.xml
+++ b/man/systemd-ask-password.xml
@@ -102,7 +102,7 @@
         <listitem><para>Specify an icon name alongside the password
         query, which may be used in all agents supporting graphical
         display. The icon name should follow the <ulink
-        url="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">XDG
+        url="https://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">XDG
         Icon Naming Specification</ulink>.</para></listitem>
       </varlistentry>
 
@@ -218,9 +218,9 @@
       <varlistentry>
         <term><option>-n</option></term>
 
-        <listitem><para>By default, when writing the acquired password to standard output it is suffixed by a
-        newline character. This may be turned off with the <option>-n</option> switch, similar to the switch
-        of the same name of the <citerefentry
+        <listitem><para>By default, when the acquired password is written to standard output it is suffixed
+        by a newline character. This may be turned off with the <option>-n</option> switch, similarly to the
+        switch of the same name of the <citerefentry
         project='man-pages'><refentrytitle>echo</refentrytitle><manvolnum>1</manvolnum></citerefentry>
         command.</para></listitem>
       </varlistentry>
diff --git a/man/systemd-bless-boot-generator.xml b/man/systemd-bless-boot-generator.xml
index e945ee8..992e0e9 100644
--- a/man/systemd-bless-boot-generator.xml
+++ b/man/systemd-bless-boot-generator.xml
@@ -3,7 +3,7 @@
 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
-<refentry id="systemd-bless-boot-generator" conditional='ENABLE_EFI'>
+<refentry id="systemd-bless-boot-generator" conditional='HAVE_GNU_EFI'>
 
   <refentryinfo>
     <title>systemd-bless-boot-generator</title>
diff --git a/man/systemd-bless-boot.service.xml b/man/systemd-bless-boot.service.xml
index 53d7e4a..93229cc 100644
--- a/man/systemd-bless-boot.service.xml
+++ b/man/systemd-bless-boot.service.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd-bless-boot.service" conditional='ENABLE_EFI'
+<refentry id="systemd-bless-boot.service" conditional='HAVE_GNU_EFI'
           xmlns:xi="http://www.w3.org/2001/XInclude">
 
   <refentryinfo>
@@ -24,7 +24,7 @@
 
   <refsynopsisdiv>
     <para><filename>systemd-bless-boot.service</filename></para>
-    <para><filename>/usr/lib/systemd/system-bless-boot</filename></para>
+    <para><filename>/usr/lib/systemd/systemd-bless-boot</filename></para>
   </refsynopsisdiv>
 
   <refsect1>
@@ -39,7 +39,7 @@
     <para>Internally, the service operates based on the <varname>LoaderBootCountPath</varname> EFI variable (of the
     vendor UUID <constant>4a67b082-0a4c-41cf-b6c7-440b29bb8c4</constant>), which is passed from the boot loader to the
     OS. It contains a file system path (relative to the EFI system partition) of the <ulink
-    url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> compliant boot loader entry
+    url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink> compliant boot loader entry
     file or unified kernel image file that was used to boot up the
     system. <command>systemd-bless-boot.service</command> removes the two 'tries done' and 'tries left' numeric boot
     counters from the filename, which indicates to future invocations of the boot loader that the entry has completed
@@ -50,7 +50,7 @@
   <refsect1>
     <title>Options</title>
 
-    <para>The <filename>/usr/lib/systemd/system-bless-boot</filename> executable may also be invoked from the
+    <para>The <filename>/usr/lib/systemd/systemd-bless-boot</filename> executable may also be invoked from the
     command line, taking one of the following command arguments:</para>
 
     <variablelist>
diff --git a/man/systemd-boot-random-seed.service.xml b/man/systemd-boot-random-seed.service.xml
new file mode 100644
index 0000000..49f3366
--- /dev/null
+++ b/man/systemd-boot-random-seed.service.xml
@@ -0,0 +1,99 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd-boot-random-seed.service" conditional='HAVE_GNU_EFI'
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>systemd-boot-random-seed.service</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-boot-random-seed.service</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-boot-random-seed.service</refname>
+    <refpurpose>Refresh boot loader random seed at boot</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>systemd-boot-random-seed.service</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><filename>systemd-boot-random-seed.service</filename> is a system service that automatically
+    refreshes the boot loader random seed stored in the EFI System Partition (ESP), from the Linux kernel
+    entropy pool. The boot loader random seed is primarily consumed and updated by
+    <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> from the
+    UEFI environment (or
+    <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry> if the
+    former is not used, but the latter is), and passed as initial RNG seed to the OS. It is an effective way
+    to ensure the OS comes up with a random pool that is fully initialized.</para>
+
+    <para>The service also automatically generates a 'system token' to store in an EFI variable in the
+    system's NVRAM. The boot loader may then combine the on-disk random seed and the system token by
+    cryptographic hashing, and pass it to the OS it boots as initialization seed for its entropy pool. Note:
+    the random seed stored in the ESP is refreshed on <emphasis>every</emphasis> reboot ensuring that
+    multiple subsequent boots will boot with different seeds. On the other hand, the system token is
+    generated randomly <emphasis>once</emphasis>, and then persistently stored in the system's EFI variable
+    storage, ensuring the same disk image won't result in the same series of boot loader seed values if used
+    on multiple systems in parallel.</para>
+
+    <para>The <filename>systemd-boot-random-seed.service</filename> unit invokes the <command>bootctl
+    random-seed</command> command, which updates the random seed in the ESP, and initializes the system
+    token if it's not initialized yet. The service is conditionalized so that it is run only when a boot
+    loader is used that implements the <ulink url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader
+    Interface</ulink>.</para> <para>For further details see
+    <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, regarding
+    the command this service invokes.</para>
+
+    <para>Note the relationship between <filename>systemd-boot-random-seed.service</filename> and
+    <citerefentry><refentrytitle>systemd-random-seed</refentrytitle><manvolnum>8</manvolnum></citerefentry>. The
+    former maintains the random seed consumed and updated by the boot environment (i.e. by
+    <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> or
+    <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>), the
+    latter maintains a random seed consumed and updated by the OS itself. The former ensures that the OS has
+    a filled entropy pool already during earliest boot when regular disk access is not available yet
+    (i.e. when the OS random seed cannot be loaded yet). The latter is processed much later, once writable
+    disk access is available. Thus it cannot be used to seed the initial boot phase, but typically has much
+    higher quality of entropy. Both files are consumed and updated at boot, but at different
+    times. Specifically:</para>
+
+    <orderedlist>
+      <listitem><para>In UEFI mode, the <filename>systemd-boot</filename> or
+      <filename>systemd-stub</filename> components load the boot loader random seed off the ESP, hash it with
+      available entropy and the system token, and then update it on disk. A derived seed is passed to the
+      kernel which writes it to its entropy pool.</para></listitem>
+
+      <listitem><para>In userspace the <filename>systemd-random-seed.service</filename> service loads the OS
+      random seed, writes it to the kernel entropy pool, and then updates it on disk with a new value derived
+      from the kernel entropy pool.</para></listitem>
+
+      <listitem><para>In userspace the <filename>systemd-boot-random-seed.service</filename> service updates
+      the boot loader random seed with a new value derived from the kernel entropy pool.</para></listitem>
+    </orderedlist>
+
+    <para>This logic should ensure that the kernel's entropy pool is seeded during earliest bool already, if
+    possible, but the highest quality entropy is propagated back to both on-disk seeds.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-boot-system-token.service.xml b/man/systemd-boot-system-token.service.xml
deleted file mode 100644
index b94665b..0000000
--- a/man/systemd-boot-system-token.service.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version='1.0'?> <!--*-nxml-*-->
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
-
-<refentry id="systemd-boot-system-token.service" conditional='ENABLE_EFI'
-          xmlns:xi="http://www.w3.org/2001/XInclude">
-
-  <refentryinfo>
-    <title>systemd-boot-system-token.service</title>
-    <productname>systemd</productname>
-  </refentryinfo>
-
-  <refmeta>
-    <refentrytitle>systemd-boot-system-token.service</refentrytitle>
-    <manvolnum>8</manvolnum>
-  </refmeta>
-
-  <refnamediv>
-    <refname>systemd-boot-system-token.service</refname>
-    <refpurpose>Generate an initial boot loader system token and random seed</refpurpose>
-  </refnamediv>
-
-  <refsynopsisdiv>
-    <para><filename>systemd-boot-system-token.service</filename></para>
-  </refsynopsisdiv>
-
-  <refsect1>
-    <title>Description</title>
-
-    <para><filename>systemd-boot-system-token.service</filename> is a system service that automatically
-    generates a 'system token' to store in an EFI variable in the system's NVRAM and a random seed to store
-    on the EFI System Partition ESP on disk. The boot loader may then combine these two randomized data
-    fields by cryptographic hashing, and pass it to the OS it boots as initialization seed for its entropy
-    pool. The random seed stored in the ESP is refreshed on each reboot ensuring that multiple subsequent
-    boots will boot with different seeds. The 'system token' is generated randomly once, and then
-    persistently stored in the system's EFI variable storage.</para>
-
-    <para>The <filename>systemd-boot-system-token.service</filename> unit invokes the <command>bootctl
-    random-seed</command> command, which updates the random seed in the ESP, and initializes the 'system
-    token' if it's not initialized yet. The service is conditionalized so that it is run only when all of the
-    below apply:</para>
-
-    <itemizedlist>
-      <listitem><para>A boot loader is used that implements the <ulink
-      url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink> (which defines the 'system
-      token' concept).</para></listitem>
-
-      <listitem><para>Either a 'system token' was not set yet, or the boot loader has not passed the OS a
-      random seed yet (and thus most likely has been missing the random seed file in the
-      ESP).</para></listitem>
-
-      <listitem><para>The system is not running in a VM environment. This case is explicitly excluded since
-      on VM environments the ESP backing storage and EFI variable storage is typically not physically
-      separated and hence booting the same OS image in multiple instances would replicate both, thus reusing
-      the same random seed and 'system token' among all instances, which defeats its purpose. Note that it's
-      still possible to use boot loader random seed provisioning in this mode, but the automatic logic
-      implemented by this service has no effect then, and the user instead has to manually invoke the
-      <command>bootctl random-seed</command> acknowledging these restrictions.</para></listitem>
-    </itemizedlist>
-
-    <para>For further details see
-    <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, regarding
-    the command this service invokes.</para>
-  </refsect1>
-
-  <refsect1>
-    <title>See Also</title>
-    <para>
-      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-    </para>
-  </refsect1>
-
-</refentry>
diff --git a/man/systemd-boot.xml b/man/systemd-boot.xml
index 5169bbb..64ded05 100644
--- a/man/systemd-boot.xml
+++ b/man/systemd-boot.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd-boot" conditional='ENABLE_EFI'
+<refentry id="systemd-boot" conditional='HAVE_GNU_EFI'
     xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>systemd-boot</title>
@@ -25,37 +25,39 @@
     <title>Description</title>
 
     <para><command>systemd-boot</command> (short: <command>sd-boot</command>) is a simple UEFI boot
-    manager. It provides a graphical menu to select the entry to boot and an editor for the kernel command
+    manager. It provides a textual menu to select the entry to boot and an editor for the kernel command
     line. <command>systemd-boot</command> supports systems with UEFI firmware only.</para>
 
     <para><command>systemd-boot</command> loads boot entry information from the EFI system partition (ESP),
     usually mounted at <filename>/efi/</filename>, <filename>/boot/</filename>, or
-    <filename>/boot/efi/</filename> during OS runtime, as well as from the Extended Boot Loader partition if
-    it exists (usually mounted to <filename>/boot/</filename>). Configuration file fragments, kernels,
-    initrds and other EFI images to boot generally need to reside on the ESP or the Extended Boot Loader
-    partition. Linux kernels must be built with <option>CONFIG_EFI_STUB</option> to be able to be directly
-    executed as an EFI image. During boot <command>systemd-boot</command> automatically assembles a list of
-    boot entries from the following sources:</para>
+    <filename>/boot/efi/</filename> during OS runtime, as well as from the Extended Boot Loader partition
+    (XBOOTLDR) if it exists (usually mounted to <filename>/boot/</filename>). Configuration file fragments,
+    kernels, initrds and other EFI images to boot generally need to reside on the ESP or the Extended Boot
+    Loader partition. Linux kernels must be built with <option>CONFIG_EFI_STUB</option> to be able to be
+    directly executed as an EFI image. During boot <command>systemd-boot</command> automatically assembles a
+    list of boot entries from the following sources:</para>
 
     <itemizedlist>
       <listitem><para>Boot entries defined with <ulink
-      url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> description files
-      located in <filename>/loader/entries/</filename> on the ESP and the Extended Boot Loader
-      Partition. These usually describe Linux kernel images with associated initrd images, but alternatively
-      may also describe arbitrary other EFI executables.</para></listitem>
+      url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink> Type #1
+      description files located in <filename>/loader/entries/</filename> on the ESP and the Extended Boot
+      Loader Partition. These usually describe Linux kernel images with associated initrd images, but
+      alternatively may also describe other arbitrary EFI executables.</para></listitem>
 
-      <listitem><para>Unified kernel images following the <ulink
-      url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>, as executable EFI
-      binaries in <filename>/EFI/Linux/</filename> on the ESP and the Extended Boot Loader Partition.
-      </para></listitem>
+      <listitem><para>Unified kernel images, <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot
+      Loader Specification</ulink> Type #2, which are executable EFI binaries in
+      <filename>/EFI/Linux/</filename> on the ESP and the Extended Boot Loader Partition.</para></listitem>
 
-      <listitem><para>The Microsoft Windows EFI boot manager, if installed</para></listitem>
+      <listitem><para>The Microsoft Windows EFI boot manager, if installed.</para></listitem>
 
-      <listitem><para>The Apple macOS boot manager, if installed</para></listitem>
+      <listitem><para>The Apple macOS boot manager, if installed.</para></listitem>
 
-      <listitem><para>The EFI Shell binary, if installed</para></listitem>
+      <listitem><para>The EFI Shell binary, if installed.</para></listitem>
 
-      <listitem><para>A reboot into the UEFI firmware setup option, if supported by the firmware</para></listitem>
+      <listitem><para>A reboot into the UEFI firmware setup option, if supported by the firmware.</para></listitem>
+
+      <listitem><para>Secure Boot variables enrollment if the UEFI firmware is in setup-mode and files are provided
+      on the ESP.</para></listitem>
     </itemizedlist>
 
     <para><command>systemd-boot</command> supports the following features:</para>
@@ -92,6 +94,9 @@
       <listitem><para>The boot manager optionally reads a random seed from the ESP partition, combines it
       with a 'system token' stored in a persistent EFI variable and derives a random seed to use by the OS as
       entropy pool initialization, providing a full entropy pool during early boot.</para></listitem>
+
+      <listitem><para>The boot manager allows for Secure Boot variables to be enrolled if the UEFI firmware is
+      in setup-mode. Additionally, variables can be automatically enrolled if configured.</para></listitem>
     </itemizedlist>
 
     <para><citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
@@ -102,12 +107,20 @@
     may be used to copy kernel images onto the ESP or the Extended Boot Loader Partition and to generate
     description files compliant with the Boot Loader
     Specification.</para>
+
+    <para><citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    may be used as UEFI boot stub for executed kernels, which is useful to show graphical boot splashes
+    before transitioning into the Linux world. It is also capable of automatically picking up auxiliary
+    credential files (for boot parameterization) and system extension images, as companion files to the
+    booted kernel images.</para>
   </refsect1>
 
   <refsect1>
     <title>Key bindings</title>
     <para>The following keys may be used in the boot menu:</para>
 
+    <!-- Developer commands Q/v/Ctrl+l deliberately not advertised. -->
+
     <variablelist>
       <varlistentry>
         <term><keycap>↑</keycap> (Up)</term>
@@ -150,21 +163,21 @@
       </varlistentry>
 
       <varlistentry>
-        <term><keycap>v</keycap></term>
-        <listitem><para>Show systemd-boot, UEFI, and firmware versions</para></listitem>
+        <term><keycap>r</keycap></term>
+        <listitem><para>Change screen resolution, skipping any unsupported modes.</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><keycap>P</keycap></term>
+        <term><keycap>R</keycap></term>
+        <listitem><para>Reset screen resolution to firmware or configuration file default.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><keycap>p</keycap></term>
         <listitem><para>Print status</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><keycap>Q</keycap></term>
-        <listitem><para>Quit</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
         <term><keycap>h</keycap></term>
         <term><keycap>?</keycap></term>
         <term><keycap>F1</keycap></term>
@@ -172,8 +185,12 @@
       </varlistentry>
 
       <varlistentry>
-        <term><keycombo><keycap>Ctrl</keycap><keycap>l</keycap></keycombo></term>
-        <listitem><para>Reprint the screen</para></listitem>
+        <term><keycap>f</keycap></term>
+        <listitem><para>Reboot into firmware interface.</para>
+
+        <para>For compatibility with the keybindings of several firmware implementations this operation
+        may also be reached with <keycap>F2</keycap>, <keycap>F10</keycap>, <keycap>Del</keycap> and
+        <keycap>Esc</keycap>.</para></listitem>
       </varlistentry>
     </variablelist>
 
@@ -240,12 +257,13 @@
 
       <varlistentry>
         <term><keycap>Esc</keycap></term>
+        <term><keycombo><keycap>Ctrl</keycap><keycap>c</keycap></keycombo></term>
         <listitem><para>Abort the edit and quit the editor</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><keycombo><keycap>Ctrl</keycap><keycap>k</keycap></keycombo></term>
-        <listitem><para>Clear the command line</para></listitem>
+        <listitem><para>Clear the command line forwards</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -255,6 +273,7 @@
       </varlistentry>
 
       <varlistentry>
+        <term><keycombo><keycap>Ctrl</keycap><keycap>Del</keycap></keycombo></term>
         <term><keycombo><keycap>Alt</keycap><keycap>d</keycap></keycombo></term>
         <listitem><para>Delete word forwards</para></listitem>
       </varlistentry>
@@ -277,25 +296,43 @@
     usually mounted to <filename>/efi/</filename>, <filename>/boot/</filename> or
     <filename>/boot/efi/</filename> during OS runtime. It also processes files on the Extended Boot Loader
     partition which is typically mounted to <filename>/boot/</filename>, if it
-    exists. <command>systemd-boot</command> reads runtime configuration such as the boot timeout and default
+    exists.</para>
+
+    <para><command>systemd-boot</command> reads runtime configuration such as the boot timeout and default
     entry from <filename>/loader/loader.conf</filename> on the ESP (in combination with data read from EFI
     variables). See
-    <citerefentry><refentrytitle>loader.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Boot
-    entry description files following the <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot
-    Loader Specification</ulink> are read from <filename>/loader/entries/</filename> on the ESP and the
-    Extended Boot Loader partition. Unified kernel boot entries following the <ulink
-    url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> are read from
-    <filename>/EFI/Linux/</filename> on the ESP and the Extended Boot Loader partition. Optionally, a random
-    seed for early boot entropy pool provisioning is stored in <filename>/loader/random-seed</filename> in
-    the ESP.</para>
+    <citerefentry><refentrytitle>loader.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+
+    <para>Boot entry description files following the <ulink
+    url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink> are read from
+    <filename>/loader/entries/</filename> on the ESP and the Extended Boot Loader partition.</para>
+
+    <para>Unified kernel boot entries following the <ulink
+    url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink> are read from
+    <filename>/EFI/Linux/</filename> on the ESP and the Extended Boot Loader partition.</para>
+
+    <para>Optionally, a random seed for early boot entropy pool provisioning is stored in
+    <filename>/loader/random-seed</filename> in the ESP.</para>
+
+    <para>During initialization, <command>sd-boot</command> automatically loads all driver files placed in
+    the <filename>/EFI/systemd/drivers/</filename> directory of the ESP. The files placed there must have an
+    extension of the EFI architecture ID followed by <filename>.efi</filename> (e.g. for x86-64 this means a
+    suffix of <filename>x64.efi</filename>). This may be used to automatically load file system drivers and
+    similar, to extend the native firmware support.</para>
+
+    <para>Enrollment of Secure Boot variables can be performed manually or automatically if files are available
+    under <filename>/loader/keys/<replaceable>NAME</replaceable>/{db,KEK,PK}.auth</filename>, <replaceable>NAME</replaceable>
+    being the display name for the set of variables in the menu. If one of the sets is named <filename>auto</filename>
+    then it might be enrolled automatically depending on whether <literal>secure-boot-enroll</literal> is set
+    to force or not.</para>
   </refsect1>
 
   <refsect1>
     <title>EFI Variables</title>
 
-    <para>The following EFI variables are defined, set and read by <command>systemd-boot</command>, under the vendor
-    UUID <literal>4a67b082-0a4c-41cf-b6c7-440b29bb8c4f</literal>, for communication between the OS and the boot
-    loader:</para>
+    <para>The following EFI variables are defined, set and read by <command>systemd-boot</command>, under the
+    vendor UUID <literal>4a67b082-0a4c-41cf-b6c7-440b29bb8c4f</literal>, for communication between the boot
+    loader and the OS:</para>
 
     <variablelist class='efi-variables'>
       <varlistentry>
@@ -399,28 +436,6 @@
       </varlistentry>
 
       <varlistentry>
-        <term><varname>LoaderRandomSeed</varname></term>
-
-        <listitem><para>A binary random seed <command>systemd-boot</command> may optionally pass to the
-        OS. This is a volatile EFI variable that is hashed at boot from the combination of a random seed
-        stored in the ESP (in <filename>/loader/random-seed</filename>) and a "system token" persistently
-        stored in the EFI variable <varname>LoaderSystemToken</varname> (see below). During early OS boot the
-        system manager reads this variable and passes it to the OS kernel's random pool, crediting the full
-        entropy it contains. This is an efficient way to ensure the system starts up with a fully initialized
-        kernel random pool — as early as the initial RAM disk phase. <command>systemd-boot</command> reads
-        the random seed from the ESP, combines it with the "system token", and both derives a new random seed
-        to update in-place the seed stored in the ESP, and the random seed to pass to the OS from it via
-        SHA256 hashing in counter mode. This ensures that different physical systems that boot the same
-        "golden" OS image — i.e. containing the same random seed file in the ESP — will still pass a
-        different random seed to the OS. It is made sure the random seed stored in the ESP is fully
-        overwritten before the OS is booted, to ensure different random seed data is used between subsequent
-        boots.</para>
-
-        <para>See <ulink url="https://systemd.io/RANDOM_SEEDS">Random Seeds</ulink> for
-        further information.</para></listitem>
-      </varlistentry>
-
-      <varlistentry>
         <term><varname>LoaderSystemToken</varname></term>
 
         <listitem><para>A binary random data field, that is used for generating the random seed to pass to
@@ -437,7 +452,7 @@
     <title>Boot Counting</title>
 
     <para><command>systemd-boot</command> implements a simple boot counting mechanism on top of the <ulink
-    url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>, for automatic and unattended
+    url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>, for automatic and unattended
     fallback to older kernel versions/boot loader entries when a specific entry continuously fails. Any boot loader
     entry file and unified kernel image file that contains a <literal>+</literal> followed by one or two numbers (if
     two they need to be separated by a <literal>-</literal>), before the <filename>.conf</filename> or
@@ -489,14 +504,32 @@
   </refsect1>
 
   <refsect1>
+    <title>Using systemd-boot in virtual machines.</title>
+
+    <para>When using qemu with OVMF (UEFI Firmware for virtual machines) the <option>-kernel</option> switch
+    works not only for linux kernels, but for any EFI binary, including sd-boot and unified linux
+    kernels.  Example command line for loading sd-boot on x64:</para>
+
+    <para>
+      <command>qemu-system-x86_64 <replaceable>[ ... ]</replaceable>
+      -kernel /usr/lib/systemd/boot/efi/systemd-bootx64.efi</command>
+    </para>
+
+    <para>systemd-boot will detect that it was started directly instead of being loaded from ESP and will
+    search for the ESP in that case, taking into account boot order information from the hypervisor (if
+    available).</para>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>loader.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-bless-boot.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemd-boot-system-token.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-boot-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-      <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>,
+      <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>,
       <ulink url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>
     </para>
   </refsect1>
diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml
index aff295b..a4b6139 100644
--- a/man/systemd-cat.xml
+++ b/man/systemd-cat.xml
@@ -115,12 +115,10 @@
       <varlistentry>
         <term><option>--level-prefix=</option></term>
 
-        <listitem><para>Controls whether lines read are parsed for
-        syslog priority level prefixes. If enabled (the default), a
-        line prefixed with a priority prefix such as
-        <literal>&lt;5&gt;</literal> is logged at priority 5
-        (<literal>notice</literal>), and similar for the other
-        priority levels. Takes a boolean argument.</para></listitem>
+        <listitem><para>Controls whether lines read are parsed for syslog priority level prefixes. If enabled
+        (the default), a line prefixed with a priority prefix such as <literal>&lt;5&gt;</literal> is logged
+        at priority 5 (<literal>notice</literal>), and similarly for the other priority levels. Takes a
+        boolean argument.</para></listitem>
       </varlistentry>
 
     </variablelist>
@@ -156,10 +154,9 @@
       <programlisting># ls | systemd-cat</programlisting>
     </example>
 
-    <para>Even though the two examples have very similar effects the
-    first is preferable since only one process is running at a time,
-    and both stdout and stderr are captured while in the second
-    example, only stdout is captured.</para>
+    <para>Even though the two examples have very similar effects, the first is preferable, since only one
+    process is running at a time and both stdout and stderr are captured, while in the second example, only
+    stdout is captured.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml
index da853ec..3fa0a35 100644
--- a/man/systemd-cgls.xml
+++ b/man/systemd-cgls.xml
@@ -105,6 +105,20 @@
         <replaceable>MACHINE</replaceable>.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--xattr=</option></term>
+
+        <listitem><para>Controls whether to include information about extended attributes of the listed
+        control groups in the output. Expects a boolean value, defaults to yes.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--cgroup-id=</option></term>
+
+        <listitem><para>Controls whether to include the numeric ID of the listed control groups in the
+        output. Expects a boolean value, defaults to yes.</para></listitem>
+      </varlistentry>
+
       <xi:include href="standard-options.xml" xpointer="help" />
       <xi:include href="standard-options.xml" xpointer="version" />
       <xi:include href="standard-options.xml" xpointer="no-pager" />
diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml
index a6d9671..f08304d 100644
--- a/man/systemd-cgtop.xml
+++ b/man/systemd-cgtop.xml
@@ -45,16 +45,12 @@
     one iteration. The <option>--iterations=</option> argument, if
     given, is honored. This mode is suitable for scripting.</para>
 
-    <para>Resource usage is only accounted for control groups in the
-    relevant hierarchy, i.e. CPU usage is only accounted for control
-    groups in the <literal>cpuacct</literal> hierarchy, memory usage
-    only for those in <literal>memory</literal> and disk I/O usage for
-    those in <literal>blkio</literal>. If resource monitoring for
-    these resources is required, it is recommended to add the
-    <varname>CPUAccounting=1</varname>,
-    <varname>MemoryAccounting=1</varname> and
-    <varname>BlockIOAccounting=1</varname> settings in the unit files
-    in question. See
+    <para>Resource usage is only accounted for control groups with the appropriate controllers turned on:
+    <literal>cpu</literal> controller for CPU usage, <literal>memory</literal> controller for memory usage,
+    and <literal>io</literal> controller for disk I/O consumption. If resource monitoring for these resources
+    is required, it is recommended to add the <varname>CPUAccounting=1</varname>,
+    <varname>MemoryAccounting=1</varname> and <varname>IOAccounting=1</varname> settings in the unit files in
+    question. See
     <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
     for details.</para>
 
@@ -63,13 +59,10 @@
     the CPU load value is going to be between 0% and 800%. The number of
     processors can be found in <literal>/proc/cpuinfo</literal>.</para>
 
-    <para>To emphasize this: unless
-    <literal>CPUAccounting=1</literal>,
-    <literal>MemoryAccounting=1</literal> and
-    <literal>BlockIOAccounting=1</literal> are enabled for the
-    services in question, no resource accounting will be available for
-    system services and the data shown by
-    <command>systemd-cgtop</command> will be incomplete.</para>
+    <para>To emphasize: unless <literal>CPUAccounting=1</literal>, <literal>MemoryAccounting=1</literal>, and
+    <literal>IOAccounting=1</literal> are enabled for the services in question, no resource accounting will
+    be available for system services and the data shown by <command>systemd-cgtop</command> will be
+    incomplete.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd-coredump.xml b/man/systemd-coredump.xml
index cb9f477..7044548 100644
--- a/man/systemd-coredump.xml
+++ b/man/systemd-coredump.xml
@@ -134,7 +134,8 @@
       <title>Disabling coredump processing</title>
 
       <para>To disable potentially resource-intensive processing by <command>systemd-coredump</command>, set
-      <programlisting>Storage=none ProcessSizeMax=0</programlisting> in
+      <programlisting>Storage=none
+ProcessSizeMax=0</programlisting> in
       <citerefentry><refentrytitle>coredump.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
       </para>
     </refsect2>
diff --git a/man/systemd-creds.xml b/man/systemd-creds.xml
new file mode 100644
index 0000000..b16ee09
--- /dev/null
+++ b/man/systemd-creds.xml
@@ -0,0 +1,454 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd-creds"
+    xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>systemd-creds</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-creds</refentrytitle>
+    <manvolnum>1</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-creds</refname>
+    <refpurpose>Lists, shows, encrypts and decrypts service credentials</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>systemd-creds</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+      <arg choice="plain">COMMAND</arg>
+      <arg choice="opt" rep="repeat">ARGS</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><command>systemd-creds</command> is a tool for listing, showing, encrypting and decrypting unit
+    credentials. Credentials are limited-size binary or textual objects that may be passed to unit
+    processes. They are primarily used for passing cryptographic keys (both public and private) or
+    certificates, user account information or identity information from the host to services.</para>
+
+    <para>Credentials are configured in unit files via the <varname>LoadCredential=</varname>,
+    <varname>SetCredential=</varname>, <varname>LoadCredentialEncrypted=</varname> and
+    <varname>SetCredentialEncrypted=</varname> settings, see
+    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
+    details.</para>
+
+    <para>For further information see <ulink url="https://systemd.io/CREDENTIALS">System and Service
+    Credentials</ulink> documentation.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Commands</title>
+
+    <para>The following commands are understood:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><command>list</command></term>
+
+        <listitem><para>Show a list of credentials passed into the current execution context. This command
+        shows the files in the directory referenced by the <varname>$CREDENTIALS_DIRECTORY</varname>
+        environment variable, and is intended to be executed from within service context.</para>
+
+        <para>Along with each credential name, the size and security state is shown. The latter is one of
+        <literal>secure</literal> (in case the credential is backed by unswappable memory,
+        i.e. <literal>ramfs</literal>), <literal>weak</literal> (in case it is backed by any other type of
+        memory), or <literal>insecure</literal> (if having any access mode that is not 0400, i.e. if readable
+        by anyone but the owner).</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>cat</command> <replaceable>credential...</replaceable></term>
+
+        <listitem><para>Show contents of specified credentials passed into the current execution
+        context. Takes one or more credential names, whose contents shall be written to standard
+        output.</para>
+
+        <para>When combined with <option>--json=</option> or <option>--transcode=</option> the output is
+        transcoded in simple ways before outputting.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>setup</command></term>
+
+        <listitem><para>Generates a host encryption key for credentials, if one has not been generated
+        already. This ensures the <filename>/var/lib/systemd/credential.secret</filename> file is initialized
+        with a random secret key if it doesn't exist yet. This secret key is used when encrypting/decrypting
+        credentials with <command>encrypt</command> or <command>decrypt</command>, and is only accessible to
+        the root user. Note that there's typically no need to invoke this command explicitly as it is
+        implicitly called when <command>encrypt</command> is invoked, and credential host key encryption
+        selected.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>encrypt</command> <replaceable>input|-</replaceable> <replaceable>output|-</replaceable></term>
+
+        <listitem><para>Loads the specified (unencrypted plaintext) input credential file, encrypts it and
+        writes the (encrypted ciphertext) output to the specified target credential file. The resulting file
+        may be referenced in the <varname>LoadCredentialEncrypted=</varname> setting in unit files, or its
+        contents used literally in <varname>SetCredentialEncrypted=</varname> settings.</para>
+
+        <para>Takes two file system paths. The file name part of the output path is embedded as name in the
+        encrypted credential, to ensure encrypted credentials cannot be renamed and reused for different
+        purposes without this being noticed. The credential name to embed may be overridden with the
+        <option>--name=</option> setting. The input or output paths may be specified as <literal>-</literal>,
+        in which case the credential data is read from/written to standard input and standard output. If the
+        output path is specified as <literal>-</literal> the credential name cannot be derived from the file
+        system path, and thus should be specified explicitly via the <option>--name=</option> switch.</para>
+
+        <para>The credential data is encrypted and authenticated symmetrically with one of the following
+        encryption keys:</para>
+
+        <orderedlist>
+          <listitem><para>A secret key automatically derived from the system's TPM2 chip. This encryption key
+          is not stored on the host system and thus decryption is only possible with access to the original
+          TPM2 chip. Or in other words, the credential secured in this way can only be decrypted again by the
+          local machine.</para></listitem>
+
+          <listitem><para>A secret key stored in the <filename>/var/lib/systemd/credential.secret</filename>
+          file which is only accessible to the root user. This "host" encryption key is stored on the host
+          file system, and thus decryption is possible with access to the host file system and sufficient
+          privileges. The key is automatically generated when needed, but can also be created explicitly with
+          the <command>setup</command> command, see above.</para></listitem>
+
+          <listitem><para>A combination of the above: an encryption key derived from both the TPM2 chip and
+          the host file system. This means decryption requires both access to the original TPM2 chip and the
+          OS installation. This is the default mode of operation if a TPM2 chip is available and
+          <filename>/var/lib/systemd/</filename> resides on persistent media.</para></listitem>
+        </orderedlist>
+
+        <para>Which of the three keys shall be used for encryption may be configured with the
+        <option>--with-key=</option> switch. Depending on the use-case for the encrypted credential the key
+        to use may differ. For example, for credentials that shall be accessible from the initrd, encryption
+        with the host key is not appropriate, since access to the host key is typically not available from
+        the initrd. Thus, for such credentials only the TPM2 key should be used.</para>
+
+        <para>Encrypted credentials are always encoded in Base64.</para>
+
+        <para>Use <command>decrypt</command> (see below) to undo the encryption operation, and acquire the
+        decrypted plaintext credential from the encrypted ciphertext credential.</para>
+
+        <para>The credential data is encrypted using AES256-GCM, i.e. providing both confidentiality and
+        integrity, keyed by a SHA256 hash of one or both of the secret keys described above.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>decrypt</command> <replaceable>input|-</replaceable>
+        <optional><replaceable>output|-</replaceable></optional></term>
+
+        <listitem><para>Undoes the effect of the <command>encrypt</command> operation: loads the specified
+        (encrypted ciphertext) input credential file, decrypts and authenticates it and writes the (decrypted
+        plaintext) output to the specified target credential file.</para>
+
+        <para>Takes one or two file system paths. The file name part of the input path is compared with the
+        credential name embedded in the encrypted file. If it does not match decryption fails. This is done
+        in order to ensure that encrypted credentials are not re-purposed without this being detected. The
+        credential name to compare with the embedded credential name may also be overridden with the
+        <option>--name=</option> switch. If the input path is specified as <literal>-</literal>, the
+        encrypted credential is read from standard input. If only one path is specified or the output path
+        specified as <literal>-</literal>, the decrypted credential is written to standard output. In this
+        mode, the expected name embedded in the credential cannot be derived from the path and should be
+        specified explicitly with <option>--name=</option>.</para>
+
+        <para>Decrypting credentials requires access to the original TPM2 chip and/or credentials host key,
+        see above. Information about which keys are required is embedded in the encrypted credential data,
+        and thus decryption is entirely automatic.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>has-tpm2</command></term>
+
+        <listitem><para>Reports whether the system is equipped with a TPM2 device usable for protecting
+        credentials. If a TPM2 device has been discovered, is supported, and is being used by firmware,
+        by the OS kernel drivers and by userspace (i.e. systemd) this prints <literal>yes</literal> and exits
+        with exit status zero. If no such device is discovered/supported/used, prints
+        <literal>no</literal>. Otherwise prints <literal>partial</literal>. In either of these two cases
+        exits with non-zero exit status. It also shows four lines indicating separately whether firmware,
+        drivers, the system and the kernel discovered/support/use TPM2.</para>
+
+        <para>Combine with <option>--quiet</option> to suppress the output.</para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="help" />
+      <xi:include href="standard-options.xml" xpointer="version" />
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <variablelist>
+
+      <varlistentry>
+        <term><option>--system</option></term>
+
+        <listitem><para>When specified with the <command>list</command> and <command>cat</command> commands
+        operates on the credentials passed to system as a whole instead of on those passed to the current
+        execution context. This is useful in container environments where credentials may be passed in from
+        the container manager.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--transcode=</option></term>
+
+        <listitem><para>When specified with the <command>cat</command> or <command>decrypt</command>
+        commands, transcodes the output before showing it. Takes one of <literal>base64</literal>,
+        <literal>unbase64</literal>, <literal>hex</literal> or <literal>unhex</literal> as argument, in order
+        to encode/decode the credential data with Base64 or as series of hexadecimal values.</para>
+
+        <para>Note that this has no effect on the <command>encrypt</command> command, as encrypted
+        credentials are unconditionally encoded in Base64.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--newline=</option></term>
+
+        <listitem><para>When specified with <command>cat</command> or <command>decrypt</command> controls
+        whether to add a trailing newline character to the end of the output if it doesn't end in one,
+        anyway. Takes one of <literal>auto</literal>, <literal>yes</literal> or <literal>no</literal>. The
+        default mode of <literal>auto</literal> will suffix the output with a single newline character only
+        when writing credential data to a TTY.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--pretty</option></term>
+        <term><option>-p</option></term>
+
+        <listitem><para>When specified with <command>encrypt</command> controls whether to show the encrypted
+        credential as <varname>SetCredentialEncrypted=</varname> setting that may be pasted directly into a
+        unit file.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--name=</option><replaceable>name</replaceable></term>
+
+        <listitem><para>When specified with the <command>encrypt</command> command controls the credential
+        name to embed in the encrypted credential data. If not specified the name is chosen automatically
+        from the filename component of the specified output path. If specified as empty string no
+        credential name is embedded in the encrypted credential, and no verification of credential name is
+        done when the credential is decrypted.</para>
+
+        <para>When specified with the <command>decrypt</command> command control the credential name to
+        validate the credential name embedded in the encrypted credential with. If not specified the name is
+        chosen automatically from the filename component of the specified input path. If no credential name
+        is embedded in the encrypted credential file (i.e. the <option>--name=</option> with an empty string
+        was used when encrypted) the specified name has no effect as no credential name validation is
+        done.</para>
+
+        <para>Embedding the credential name in the encrypted credential is done in order to protect against
+        reuse of credentials for purposes they weren't originally intended for, under the assumption the
+        credential name is chosen carefully to encode its intended purpose.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--timestamp=</option><replaceable>timestamp</replaceable></term>
+
+        <listitem><para>When specified with the <command>encrypt</command> command controls the timestamp to
+        embed into the encrypted credential. Defaults to the current time. Takes a timestamp specification in
+        the format described in
+        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
+
+        <para>When specified with the <command>decrypt</command> command controls the timestamp to use to
+        validate the "not-after" timestamp that was configured with <option>--not-after=</option> during
+        encryption. If not specified defaults to the current system time.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--not-after=</option><replaceable>timestamp</replaceable></term>
+
+        <listitem><para>When specified with the <command>encrypt</command> command controls the time when the
+        credential shall not be used anymore. This embeds the specified timestamp in the encrypted
+        credential. During decryption the timestamp is checked against the current system clock, and if the
+        timestamp is in the past the decryption will fail. By default no such timestamp is set. Takes a
+        timestamp specification in the format described in
+        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--with-key=</option></term>
+        <term><option>-H</option></term>
+        <term><option>-T</option></term>
+
+        <listitem><para>When specified with the <command>encrypt</command> command controls the
+        encryption/signature key to use. Takes one of <literal>host</literal>, <literal>tpm2</literal>,
+        <literal>host+tpm2</literal>, <literal>tpm2-absent</literal>, <literal>auto</literal>,
+        <literal>auto-initrd</literal>. See above for details on the three key types. If set to
+        <literal>auto</literal> (which is the default) the TPM2 key is used if a TPM2 device is found and not
+        running in a container. The host key is used if <filename>/var/lib/systemd/</filename> is on
+        persistent media. This means on typical systems the encryption is by default bound to both the TPM2
+        chip and the OS installation, and both need to be available to decrypt the credential again. If
+        <literal>auto</literal> is selected but neither TPM2 is available (or running in container) nor
+        <filename>/var/lib/systemd/</filename> is on persistent media, encryption will fail. If set to
+        <literal>tpm2-absent</literal> a fixed zero length key is used (thus, in this mode no confidentiality
+        nor authenticity are provided!). This logic is useful to cover for systems that lack a TPM2 chip but
+        where credentials shall be generated. Note that decryption of such credentials is refused on systems
+        that have a TPM2 chip and where UEFI SecureBoot is enabled (this is done so that such a locked down
+        system cannot be tricked into loading a credential generated this way that lacks authentication
+        information). If set to <literal>auto-initrd</literal> a TPM2 key is used if a TPM2 is found. If not
+        a fixed zero length key is used, equivalent to <literal>tpm2-absent</literal> mode. This option is
+        particularly useful to generate credentials files that are encrypted/authenticated against TPM2 where
+        available but still work on systems lacking support for this.</para>
+
+        <para>The <option>-H</option> switch is a shortcut for <option>--with-key=host</option>. Similar,
+        <option>-T</option> is a shortcut for <option>--with-key=tpm2</option>.</para>
+
+        <para>When encrypting credentials that shall be used in the initrd (where
+        <filename>/var/lib/systemd/</filename> is typically not available) make sure to use
+        <option>--with-key=auto-initrd</option> mode, to disable binding against the host secret.</para>
+
+        <para>This switch has no effect on the <command>decrypt</command> command, as information on which
+        key to use for decryption is included in the encrypted credential already.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tpm2-device=</option><replaceable>PATH</replaceable></term>
+
+        <listitem><para>Controls the TPM2 device to use. Expects a device node path referring to the TPM2
+        chip (e.g. <filename>/dev/tpmrm0</filename>). Alternatively the special value <literal>auto</literal>
+        may be specified, in order to automatically determine the device node of a suitable TPM2 device (of
+        which there must be exactly one). The special value <literal>list</literal> may be used to enumerate
+        all suitable TPM2 devices currently discovered.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tpm2-pcrs=</option><arg rep="repeat">PCR</arg></term>
+
+        <listitem><para>Configures the TPM2 PCRs (Platform Configuration Registers) to bind the encryption
+        key to. Takes a <literal>+</literal> separated list of numeric PCR indexes in the range 0…23. If not
+        used, defaults to PCR 7 only. If an empty string is specified, binds the encryption key to no PCRs at
+        all. For details about the PCRs available, see the documentation of the switch of the same name for
+        <citerefentry><refentrytitle>systemd-cryptenroll</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tpm2-public-key=</option><arg>PATH</arg></term>
+        <term><option>--tpm2-public-key-pcrs=</option><arg rep="repeat">PCR</arg></term>
+
+        <listitem><para>Configures a TPM2 signed PCR policy to bind encryption to, for use with the
+        <command>encrypt</command> command. The <option>--tpm2-public-key=</option> option accepts a path to
+        a PEM encoded RSA public key, to bind the encryption to. If this is not specified explicitly, but a
+        file <filename>tpm2-pcr-public-key.pem</filename> exists in one of the directories
+        <filename>/etc/systemd/</filename>, <filename>/run/systemd/</filename>,
+        <filename>/usr/lib/systemd/</filename> (searched in this order), it is automatically used. The
+        <option>--tpm2-public-key-pcrs=</option> option takes a list of TPM2 PCR indexes to bind to (same
+        syntax as <option>--tpm2-pcrs=</option> described above). If not specified defaults to 11 (i.e. this
+        binds the policy to any unified kernel image for which a PCR signature can be provided).</para>
+
+        <para>Note the difference between <option>--tpm2-pcrs=</option> and
+        <option>--tpm2-public-key-pcrs=</option>: the former binds decryption to the current, specific PCR
+        values; the latter binds decryption to any set of PCR values for which a signature by the specified
+        public key can be provided. The latter is hence more useful in scenarios where software updates shall
+        be possible without losing access to all previously encrypted secrets.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tpm2-signature=</option><arg>PATH</arg></term>
+
+        <listitem><para>Takes a path to a TPM2 PCR signature file as generated by the
+        <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        tool and that may be used to allow the <command>decrypt</command> command to decrypt credentials that
+        are bound to specific signed PCR values. If this is not specified explicitly, and a credential
+        with a signed PCR policy is attempted to be decrypted, a suitable signature file
+        <filename>tpm2-pcr-signature.json</filename> is searched for in <filename>/etc/systemd/</filename>,
+        <filename>/run/systemd/</filename>, <filename>/usr/lib/systemd/</filename> (in this order) and
+        used.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--quiet</option></term>
+        <term><option>-q</option></term>
+
+        <listitem><para>When used with <command>has-tpm2</command> suppresses the output, and only returns an
+        exit status indicating support for TPM2.</para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="no-pager" />
+      <xi:include href="standard-options.xml" xpointer="no-legend" />
+      <xi:include href="standard-options.xml" xpointer="json" />
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Exit status</title>
+
+    <para>On success, 0 is returned.</para>
+
+    <para>In case of the <command>has-tpm2</command> command returns 0 if a TPM2 device is discovered,
+    supported and used by firmware, driver, and userspace (i.e. systemd). Otherwise returns the OR
+    combination of the value 1 (in case firmware support is missing), 2 (in case driver support is missing)
+    and 4 (in case userspace support is missing). If no TPM2 support is available at all, value 7 is hence
+    returned.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>Encrypt a password for use as credential</title>
+
+      <para>The following command line encrypts the specified password <literal>hunter2</literal>, writing the result
+      to a file <filename>password.cred</filename>.</para>
+
+      <programlisting># echo -n hunter2 | systemd-creds encrypt - password.cred</programlisting>
+
+      <para>This decrypts the file <filename>password.cred</filename> again, revealing the literal password:</para>
+
+      <programlisting># systemd-creds decrypt password.cred
+hunter2</programlisting>
+    </example>
+
+    <example>
+      <title>Encrypt a password and include it in a unit file</title>
+
+      <para>The following command line prompts the user for a password and generates a
+      <varname>SetCredentialEncrypted=</varname> line from it for a credential named
+      <literal>mysql-password</literal>, suitable for inclusion in a unit file.</para>
+
+      <programlisting># systemd-ask-password -n | systemd-creds encrypt --name=mysql-password -p - -
+🔐 Password: ****
+SetCredentialEncrypted=mysql-password: \
+        k6iUCUh0RJCQyvL8k8q1UyAAAAABAAAADAAAABAAAAASfFsBoPLIm/dlDoGAAAAAAAAAA \
+        NAAAAAgAAAAAH4AILIOZ3w6rTzYsBy9G7liaCAd4i+Kpvs8mAgArzwuKxd0ABDjgSeO5k \
+        mKQc58zM94ZffyRmuNeX1lVHE+9e2YD87KfRFNoDLS7F3YmCb347gCiSk2an9egZ7Y0Xs \
+        700Kr6heqQswQEemNEc62k9RJnEl2q7SbcEYguegnPQUATgAIAAsAAAASACA/B90W7E+6 \
+        yAR9NgiIJvxr9bpElztwzB5lUJAxtMBHIgAQACCaSV9DradOZz4EvO/LSaRyRSq2Hj0ym \
+        gVJk/dVzE8Uxj8H3RbsT7rIBH02CIgm/Gv1ukSXO3DMHmVQkDG0wEciyageTfrVEer8z5 \
+        9cUQfM5ynSaV2UjeUWEHuz4fwDsXGLB9eELXLztzUU9nsAyLvs3ZRR+eEK/A==</programlisting>
+
+      <para>The generated line can be pasted 1:1 into a unit file, and will ensure the acquired password will
+      be made available in the <varname>$CREDENTIALS_DIRECTORY</varname><filename>/mysql-password</filename>
+      credential file for the started service.</para>
+
+      <para>Utilizing the unit file drop-in logic this can be used to securely pass a password credential to
+      a unit. A similar, more comprehensive set of commands to insert a password into a service
+      <filename>xyz.service</filename>:</para>
+
+      <programlisting># mkdir -p /etc/systemd/system/xyz.service.d
+# systemd-ask-password -n | systemd-creds encrypt --name=mysql-password -p - - >/etc/systemd/system/xyz.service.d/50-password.conf
+# systemctl daemon-reload
+# systemctl restart xyz.service</programlisting>
+    </example>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-cryptenroll.xml b/man/systemd-cryptenroll.xml
index 01c8a71..8af75d1 100644
--- a/man/systemd-cryptenroll.xml
+++ b/man/systemd-cryptenroll.xml
@@ -29,25 +29,27 @@
   <refsect1>
     <title>Description</title>
 
-    <para><command>systemd-cryptenroll</command> is a tool for enrolling hardware security tokens and devices into a
-    LUKS2 encrypted volume, which may then be used to unlock the volume during boot. Specifically, it supports
-    tokens and credentials of the following kind to be enrolled:</para>
+    <para><command>systemd-cryptenroll</command> is a tool for enrolling hardware security tokens and devices
+    into a LUKS2 encrypted volume, which may then be used to unlock the volume during boot. Specifically, it
+    supports tokens and credentials of the following kind to be enrolled:</para>
 
     <orderedlist>
-      <listitem><para>PKCS#11 security tokens and smartcards that may carry an RSA key pair (e.g. various YubiKeys)</para></listitem>
+      <listitem><para>PKCS#11 security tokens and smartcards that may carry an RSA key pair (e.g. various
+      YubiKeys)</para></listitem>
 
-      <listitem><para>FIDO2 security tokens that implement the <literal>hmac-secret</literal> extension (most FIDO2 keys, including YubiKeys)</para></listitem>
+      <listitem><para>FIDO2 security tokens that implement the <literal>hmac-secret</literal> extension (most
+      FIDO2 keys, including YubiKeys)</para></listitem>
 
       <listitem><para>TPM2 security devices</para></listitem>
 
+      <listitem><para>Regular passphrases</para></listitem>
+
       <listitem><para>Recovery keys. These are similar to regular passphrases, however are randomly generated
-      on the computer and thus generally have higher entropy than user chosen passphrases. Their character
+      on the computer and thus generally have higher entropy than user-chosen passphrases. Their character
       set has been designed to ensure they are easy to type in, while having high entropy. They may also be
       scanned off screen using QR codes. Recovery keys may be used for unlocking LUKS2 volumes wherever
       passphrases are accepted. They are intended to be used in combination with an enrolled hardware
       security token, as a recovery option when the token is lost.</para></listitem>
-
-      <listitem><para>Regular passphrases</para></listitem>
     </orderedlist>
 
     <para>In addition, the tool may be used to enumerate currently enrolled security tokens and wipe a subset
@@ -62,17 +64,17 @@
     <title>Limitations</title>
 
     <para>Note that currently when enrolling a new key of one of the five supported types listed above, it is
-    required to first provide a passphrase or recovery key (i.e. one of the latter two key types). For
-    example, it's currently not possible to unlock a device with a FIDO2 key in order to enroll a new FIDO2
-    key. Instead, in order to enroll a new FIDO2 key, it is necessary to provide an already enrolled regular
-    passphrase or recovery key. Thus, if in future key roll-over is desired it's generally recommended to
-    combine TPM2, FIDO2, PKCS#11 key enrollment with enrolling a regular passphrase or recovery key.</para>
+    required to first provide a passphrase, a recovery key or a FIDO2 token. It's currently not supported to
+    unlock a device with a TPM2/PKCS#11 key in order to enroll a new TPM2/PKCS#11 key. Thus, if in future key
+    roll-over is desired it's generally recommended to ensure a passphrase, a recovery key or a FIDO2 token
+    is always enrolled.</para>
 
-    <para>Also note that support for enrolling multiple FIDO2 tokens is currently not too useful, as while
-    unlocking <command>systemd-cryptsetup</command> cannot identify which token is currently plugged in and
-    thus does not know which authentication request to send to the device. This limitation does not apply to
-    tokens enrolled via PKCS#11 — because tokens of this type may be identified immediately, before
-    authentication.</para>
+    <para>Also note that support for enrolling multiple FIDO2 tokens is currently limited. When multiple FIDO2
+    tokens are enrolled, <command>systemd-cryptseup</command> will perform pre-flight requests to attempt to
+    identify which of the enrolled tokens are currently plugged in. However, this is not possible for FIDO2
+    tokens with user verification (UV, usually via biometrics), in which case it will fall back to attempting
+    each enrolled token one by one. This will result in multiple prompts for PIN and user verification. This
+    limitation does not apply to PKCS#11 tokens.</para>
   </refsect1>
 
   <refsect1>
@@ -92,9 +94,30 @@
       <varlistentry>
         <term><option>--recovery-key</option></term>
 
-        <listitem><para>Enroll a recovery key. Recovery keys are most identical to passphrases, but are
-        computer generated instead of human chosen, and thus have a guaranteed high entropy. The key uses a
-        character set that is easy to type in, and may be scanned off screen via a QR code.</para></listitem>
+        <listitem><para>Enroll a recovery key. Recovery keys are mostly identical to passphrases, but are
+        computer-generated instead of being chosen by a human, and thus have a guaranteed high entropy. The
+        key uses a character set that is easy to type in, and may be scanned off screen via a QR code.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--unlock-key-file=</option><replaceable>PATH</replaceable></term>
+
+        <listitem><para>Use a file instead of a password/passphrase read from stdin to unlock the volume.
+        Expects the PATH to the file containing your key to unlock the volume. Currently there is nothing like
+        <option>--key-file-offset=</option> or <option>--key-file-size=</option> so this file has to only
+        contain the full key.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--unlock-fido2-device=</option><replaceable>PATH</replaceable></term>
+
+        <listitem><para>Use a FIDO2 device instead of a password/passphrase read from stdin to unlock the
+        volume. Expects a <filename>hidraw</filename> device referring to the FIDO2 device (e.g.
+        <filename>/dev/hidraw1</filename>). Alternatively the special value <literal>auto</literal> may be
+        specified, in order to automatically determine the device node of a currently plugged in security
+        token (of which there must be exactly one). This automatic discovery is unsupported if
+        <option>--fido2-device=</option> option is also specified.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -120,13 +143,27 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--fido2-credential-algorithm=</option><replaceable>STRING</replaceable></term>
+        <listitem><para>Specify COSE algorithm used in credential generation. The default value is
+        <literal>es256</literal>. Supported values are <literal>es256</literal>, <literal>rs256</literal>
+        and <literal>eddsa</literal>.</para>
+
+        <para><literal>es256</literal> denotes ECDSA over NIST P-256 with SHA-256. <literal>rs256</literal>
+        denotes 2048-bit RSA with PKCS#1.5 padding and SHA-256. <literal>eddsa</literal> denotes
+        EDDSA over Curve25519 with SHA-512.</para>
+
+        <para>Note that your authenticator may not support some algorithms.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--fido2-device=</option><replaceable>PATH</replaceable></term>
 
         <listitem><para>Enroll a FIDO2 security token that implements the <literal>hmac-secret</literal>
         extension (e.g. a YubiKey). Expects a <filename>hidraw</filename> device referring to the FIDO2
         device (e.g. <filename>/dev/hidraw1</filename>). Alternatively the special value
         <literal>auto</literal> may be specified, in order to automatically determine the device node of a
-        currently plugged in security token (of which there must be exactly one). The special value
+        currently plugged in security token (of which there must be exactly one). This automatic discovery
+        is unsupported if <option>--unlock-fido2-device=</option> option is also specified. The special value
         <literal>list</literal> may be used to enumerate all suitable FIDO2 tokens currently plugged in. Note
         that many hardware security tokens that implement FIDO2 also implement the older PKCS#11
         standard. Typically FIDO2 is preferable, given it's simpler to use and more modern.</para>
@@ -202,11 +239,18 @@
         numeric PCR indexes in the range 0…23. If not used, defaults to PCR 7 only. If an empty string is
         specified, binds the enrollment to no PCRs at all. PCRs allow binding the enrollment to specific
         software versions and system state, so that the enrolled unlocking key is only accessible (may be
-        "unsealed") if specific trusted software and/or configuration is used.</para></listitem>
+        "unsealed") if specific trusted software and/or configuration is used.</para>
 
         <table>
           <title>Well-known PCR Definitions</title>
 
+          <!-- See: https://trustedcomputinggroup.org/resource/pc-client-specific-platform-firmware-profile-specification/ -->
+          <!-- See: https://github.com/rhboot/shim/blob/main/README.tpm -->
+          <!-- See: https://www.gnu.org/software/grub/manual/grub/html_node/Measured-Boot.html -->
+          <!-- See: https://sourceforge.net/p/linux-ima/wiki/Home/ -->
+          <!-- See: https://github.com/tianocore-docs/edk2-TrustedBootChain/blob/main/4_Other_Trusted_Boot_Chains.md -->
+          <!-- See: https://wiki.archlinux.org/title/Trusted_Platform_Module#Accessing_PCR_registers -->
+
           <tgroup cols='2' align='left' colsep='1' rowsep='1'>
             <colspec colname="pcr" />
             <colspec colname="definition" />
@@ -241,7 +285,7 @@
 
               <row>
                 <entry>4</entry>
-                <entry>Boot loader; changes on boot loader updates</entry>
+                <entry>Boot loader and additional drivers; changes on boot loader updates. The shim project will measure the PE binary it chain loads into this PCR. If the Linux kernel is invoked as UEFI PE binary, it is measured here, too. <citerefentry><refentrytitle>sd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry> measures system extension images read from the ESP here too (see <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry>).</entry>
               </row>
 
               <row>
@@ -256,17 +300,114 @@
 
               <row>
                 <entry>7</entry>
-                <entry>Secure boot state; changes when UEFI SecureBoot mode is enabled/disabled</entry>
+                <entry>Secure Boot state; changes when UEFI SecureBoot mode is enabled/disabled, or firmware certificates (PK, KEK, db, dbx, …) changes. The shim project will measure most of its (non-MOK) certificates and SBAT data into this PCR.</entry>
+              </row>
+
+              <!-- Grub measures all its commands and the kernel command line into PCR 8… -->
+              <!-- Grub measures all files it reads (including kernel image, initrd, …) into PCR 9… -->
+
+              <row>
+                <entry>9</entry>
+                <entry>The Linux kernel measures all initrds it receives into this PCR.</entry>
+                <!-- Strictly speaking only Linux >= 5.17 using the LOAD_FILE2 protocol, see https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f046fff8bc4c4d8f8a478022e76e40b818f692df -->
               </row>
 
               <row>
-                <entry>8</entry>
-                <entry><citerefentry><refentrytitle>sd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> measures the kernel command line in this PCR.</entry>
+                <entry>10</entry>
+                <entry>The IMA project measures its runtime state into this PCR.</entry>
+              </row>
+
+              <row>
+                <entry>11</entry>
+                <entry><citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry> measures the ELF kernel image, embedded initrd and other payload of the PE image it is placed in into this PCR. Unlike PCR 4 (where the same data should be measured into), this PCR value should be easy to pre-calculate, as this only contains static parts of the PE binary. Use this PCR to bind TPM policies to a specific kernel image, possibly with an embedded initrd. <citerefentry><refentrytitle>systemd-pcrphase.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> measures boot phase strings into this PCR at various milestones of the boot process.</entry>
+              </row>
+
+              <row>
+                <entry>12</entry>
+                <entry><citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> measures the kernel command line into this PCR. <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry> measures any manually specified kernel command line (i.e. a kernel command line that overrides the one embedded in the unified PE image) and loaded credentials into this PCR. (Note that if <command>systemd-boot</command> and <command>systemd-stub</command> are used in combination the command line might be measured twice!)</entry>
+              </row>
+
+              <row>
+                <entry>13</entry>
+                <entry><citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry> measures any <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry> images it loads and passed to the booted kernel into this PCR.</entry>
+              </row>
+
+              <row>
+                <entry>14</entry>
+                <entry>The shim project measures its "MOK" certificates and hashes into this PCR.</entry>
+              </row>
+
+              <row>
+                <entry>15</entry>
+                <entry><citerefentry><refentrytitle>systemd-cryptsetup</refentrytitle><manvolnum>7</manvolnum></citerefentry> optionally measures the volume key of activated LUKS volumes into this PCR.</entry>
               </row>
             </tbody>
           </tgroup>
         </table>
 
+        <para>For most applications it should be sufficient to bind against PCR 7 (and possibly PCR 14, if
+        shim/MOK is desired), as this includes measurements of the trusted certificates (and possibly hashes)
+        that are used to validate all components of the boot process up to and including the OS kernel. In
+        order to simplify firmware and OS version updates it's typically not advisable to include PCRs such
+        as 0 and 2 in the binding of the enrollment, since the program code they cover should already be
+        protected indirectly through the certificates measured into PCR 7. Validation through these
+        certificates is typically preferable over validation through direct measurements as it is less
+        brittle in context of OS/firmware updates: the measurements will change on every update, but code
+        signatures likely will validate against pre-existing certificates.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tpm2-with-pin=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>When enrolling a TPM2 device, controls whether to require the user to enter a PIN
+        when unlocking the volume in addition to PCR binding, based on TPM2 policy authentication. Defaults
+        to <literal>no</literal>. Despite being called PIN, any character can be used, not just numbers.
+        </para>
+
+        <para>Note that incorrect PIN entry when unlocking increments the TPM dictionary attack lockout
+        mechanism, and may lock out users for a prolonged time, depending on its configuration. The lockout
+        mechanism is a global property of the TPM, <command>systemd-cryptenroll</command> does not control or
+        configure the lockout mechanism. You may use tpm2-tss tools to inspect or configure the dictionary
+        attack lockout, with <citerefentry
+        project='mankier'><refentrytitle>tpm2_getcap</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        and <citerefentry
+        project='mankier'><refentrytitle>tpm2_dictionarylockout</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        commands, respectively.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tpm2-public-key=</option><arg>PATH</arg></term>
+        <term><option>--tpm2-public-key-pcrs=</option><arg rep="repeat">PCR</arg></term>
+        <term><option>--tpm2-signature=</option><arg>PATH</arg></term>
+
+        <listitem><para>Configures a TPM2 signed PCR policy to bind encryption to. The
+        <option>--tpm2-public-key=</option> option accepts a path to a PEM encoded RSA public key, to bind
+        the encryption to. If this is not specified explicitly, but a file
+        <filename>tpm2-pcr-public-key.pem</filename> exists in one of the directories
+        <filename>/etc/systemd/</filename>, <filename>/run/systemd/</filename>,
+        <filename>/usr/lib/systemd/</filename> (searched in this order), it is automatically used. The
+        <option>--tpm2-public-key-pcrs=</option> option takes a list of TPM2 PCR indexes to bind to (same
+        syntax as <option>--tpm2-pcrs=</option> described above). If not specified defaults to 11 (i.e. this
+        binds the policy to any unified kernel image for which a PCR signature can be provided).</para>
+
+        <para>Note the difference between <option>--tpm2-pcrs=</option> and
+        <option>--tpm2-public-key-pcrs=</option>: the former binds decryption to the current, specific PCR
+        values; the latter binds decryption to any set of PCR values for which a signature by the specified
+        public key can be provided. The latter is hence more useful in scenarios where software updates shell
+        be possible without losing access to all previously encrypted LUKS2 volumes.</para>
+
+        <para>The <option>--tpm2-signature=</option> option takes a path to a TPM2 PCR signature file
+        as generated by the
+        <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        tool. If this is not specified explicitly a suitable signature file
+        <filename>tpm2-pcr-signature.json</filename> is searched for in <filename>/etc/systemd/</filename>,
+        <filename>/run/systemd/</filename>, <filename>/usr/lib/systemd/</filename> (in this order) and
+        used. If a signature file is specified or found it is used to verify if the volume can be unlocked
+        with it given the current PCR state, before the new slot is written to disk. This is intended as
+        safety net to ensure that access to a volume is not lost if a public key is enrolled for which no
+        valid signature for the current PCR state is available. If the supplied signature does not unlock the
+        current PCR state and public key combination, no slot is enrolled and the operation will fail. If no
+        signature file is specified or found no such safety verification is done.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -323,7 +464,8 @@
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-      <citerefentry project='die-net'><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      <citerefentry project='die-net'><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry>
      </para>
   </refsect1>
 
diff --git a/man/systemd-cryptsetup-generator.xml b/man/systemd-cryptsetup-generator.xml
index e5c193f..feaf64b 100644
--- a/man/systemd-cryptsetup-generator.xml
+++ b/man/systemd-cryptsetup-generator.xml
@@ -49,48 +49,40 @@
         <term><varname>luks=</varname></term>
         <term><varname>rd.luks=</varname></term>
 
-        <listitem><para>Takes a boolean argument. Defaults to
-        <literal>yes</literal>. If <literal>no</literal>, disables the
-        generator entirely. <varname>rd.luks=</varname> is honored
-        only by initial RAM disk (initrd) while
-        <varname>luks=</varname> is honored by both the main system
-        and the initrd. </para></listitem>
+        <listitem><para>Takes a boolean argument. Defaults to <literal>yes</literal>. If
+        <literal>no</literal>, disables the generator entirely. <varname>rd.luks=</varname> is honored only
+        in the initrd while <varname>luks=</varname> is honored by both the main system and in the initrd.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><varname>luks.crypttab=</varname></term>
         <term><varname>rd.luks.crypttab=</varname></term>
 
-        <listitem><para>Takes a boolean argument. Defaults to
-        <literal>yes</literal>. If <literal>no</literal>, causes the
-        generator to ignore any devices configured in
-        <filename>/etc/crypttab</filename>
-        (<varname>luks.uuid=</varname> will still work however).
-        <varname>rd.luks.crypttab=</varname> is honored only by
-        initial RAM disk (initrd) while
-        <varname>luks.crypttab=</varname> is honored by both the main
-        system and the initrd. </para></listitem>
+        <listitem><para>Takes a boolean argument. Defaults to <literal>yes</literal>. If
+        <literal>no</literal>, causes the generator to ignore any devices configured in
+        <filename>/etc/crypttab</filename> (<varname>luks.uuid=</varname> will still work however).
+        <varname>rd.luks.crypttab=</varname> is honored only in initrd while
+        <varname>luks.crypttab=</varname> is honored by both the main system and in the initrd.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><varname>luks.uuid=</varname></term>
         <term><varname>rd.luks.uuid=</varname></term>
 
-        <listitem><para>Takes a LUKS superblock UUID as argument. This
-        will activate the specified device as part of the boot process
-        as if it was listed in <filename>/etc/crypttab</filename>.
-        This option may be specified more than once in order to set up
-        multiple devices. <varname>rd.luks.uuid=</varname> is honored
-        only by initial RAM disk (initrd) while
-        <varname>luks.uuid=</varname> is honored by both the main
-        system and the initrd.</para>
-        <para>If /etc/crypttab contains entries with the same UUID,
-        then the name, keyfile and options specified there will be
-        used. Otherwise, the device will have the name
+        <listitem><para>Takes a LUKS superblock UUID as argument. This will activate the specified device as
+        part of the boot process as if it was listed in <filename>/etc/crypttab</filename>. This option may
+        be specified more than once in order to set up multiple devices. <varname>rd.luks.uuid=</varname> is
+        honored only in the initrd, while <varname>luks.uuid=</varname> is honored by both the main system
+        and in the initrd.</para>
+
+        <para>If <filename>/etc/crypttab</filename> contains entries with the same UUID, then the name,
+        keyfile and options specified there will be used. Otherwise, the device will have the name
         <literal>luks-UUID</literal>.</para>
-        <para>If /etc/crypttab exists, only those UUIDs
-        specified on the kernel command line
-        will be activated in the initrd or the real root.</para>
+
+        <para>If <filename>/etc/crypttab</filename> exists, only those UUIDs specified on the kernel command
+        line will be activated in the initrd or the real root.</para>
         </listitem>
       </varlistentry>
 
@@ -108,9 +100,8 @@
         <para>This parameter is the analogue of the first <citerefentry><refentrytitle>crypttab</refentrytitle>
         <manvolnum>5</manvolnum></citerefentry> field <replaceable>volume-name</replaceable>.</para>
 
-        <para><varname>rd.luks.name=</varname> is honored only by
-        initial RAM disk (initrd) while <varname>luks.name=</varname>
-        is honored by both the main system and the initrd.</para>
+        <para><varname>rd.luks.name=</varname> is honored only in the initrd, while
+        <varname>luks.name=</varname> is honored by both the main system and in the initrd.</para>
         </listitem>
       </varlistentry>
 
@@ -137,8 +128,8 @@
         <para>This parameter is the analogue of the second <citerefentry><refentrytitle>crypttab</refentrytitle>
         <manvolnum>5</manvolnum></citerefentry> field <replaceable>encrypted-device</replaceable>.</para>
 
-        <para><varname>rd.luks.data=</varname> is honored only by initial RAM disk (initrd) while
-        <varname>luks.data=</varname> is honored by both the main system and the initrd.</para>
+        <para><varname>rd.luks.data=</varname> is honored only in the initrd, while
+        <varname>luks.data=</varname> is honored by both the main system and in the initrd.</para>
         </listitem>
       </varlistentry>
 
@@ -173,12 +164,8 @@
         <para>This parameter is the analogue of the third <citerefentry><refentrytitle>crypttab</refentrytitle>
         <manvolnum>5</manvolnum></citerefentry> field <replaceable>key-file</replaceable>.</para>
 
-        <para><varname>rd.luks.key=</varname>
-        is honored only by initial RAM disk
-        (initrd) while
-        <varname>luks.key=</varname> is
-        honored by both the main system and
-        the initrd.</para>
+        <para><varname>rd.luks.key=</varname> is honored only in the initrd, while
+        <varname>luks.key=</varname> is honored by both the main system and in the initrd.</para>
         </listitem>
       </varlistentry>
 
@@ -216,7 +203,7 @@
 
         <para><varname>rd.luks.options=</varname> is honored only by initial
         RAM disk (initrd) while <varname>luks.options=</varname> is
-        honored by both the main system and the initrd.</para>
+        honored by both the main system and in the initrd.</para>
         </listitem>
       </varlistentry>
     </variablelist>
diff --git a/man/systemd-debug-generator.xml b/man/systemd-debug-generator.xml
index 531209b..65de9ca 100644
--- a/man/systemd-debug-generator.xml
+++ b/man/systemd-debug-generator.xml
@@ -37,7 +37,7 @@
 
     <para>If the <option>systemd.mask=</option> or <option>rd.systemd.mask=</option>
     option is specified and followed by a unit name, this unit is
-    masked for the runtime, similar to the effect of
+    masked for the runtime (i.e. for this session — from boot to shutdown), similarly to the effect of
     <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
     <command>mask</command> command. This is useful to boot with
     certain units removed from the initial boot transaction for
diff --git a/man/systemd-detect-virt.xml b/man/systemd-detect-virt.xml
index 14bfd19..a92d83f 100644
--- a/man/systemd-detect-virt.xml
+++ b/man/systemd-detect-virt.xml
@@ -62,7 +62,7 @@
         </thead>
         <tbody>
           <row>
-            <entry valign="top" morerows="13">VM</entry>
+            <entry valign="top" morerows="16">VM</entry>
             <entry><varname>qemu</varname></entry>
             <entry>QEMU software virtualization, without KVM</entry>
           </row>
@@ -138,6 +138,16 @@
           </row>
 
           <row>
+            <entry><varname>apple</varname></entry>
+            <entry><ulink url="https://developer.apple.com/documentation/virtualization">Apple Virtualization.framework</ulink></entry>
+          </row>
+
+          <row>
+            <entry><varname>sre</varname></entry>
+            <entry><ulink url="https://www.lockheedmartin.com/en-us/products/Hardened-Security-for-Intel-Processors.html">LMHS SRE hypervisor</ulink></entry>
+          </row>
+
+          <row>
             <entry valign="top" morerows="9">Container</entry>
             <entry><varname>openvz</varname></entry>
             <entry>OpenVZ/Virtuozzo</entry>
diff --git a/man/systemd-dissect.xml b/man/systemd-dissect.xml
index 4cdac2b..8dd1305 100644
--- a/man/systemd-dissect.xml
+++ b/man/systemd-dissect.xml
@@ -18,7 +18,7 @@
 
   <refnamediv>
     <refname>systemd-dissect</refname>
-    <refpurpose>Dissect file system OS images</refpurpose>
+    <refpurpose>Dissect Discoverable Disk Images (DDIs)</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
@@ -29,6 +29,18 @@
       <command>systemd-dissect <arg choice="opt" rep="repeat">OPTIONS</arg> <option>--mount</option> <arg choice="plain"><replaceable>IMAGE</replaceable></arg> <arg choice="plain"><replaceable>PATH</replaceable></arg></command>
     </cmdsynopsis>
     <cmdsynopsis>
+      <command>systemd-dissect <arg choice="opt" rep="repeat">OPTIONS</arg> <option>--umount</option> <arg choice="plain"><replaceable>PATH</replaceable></arg></command>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>systemd-dissect <arg choice="opt" rep="repeat">OPTIONS</arg> <option>--list</option> <arg choice="plain"><replaceable>IMAGE</replaceable></arg></command>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>systemd-dissect <arg choice="opt" rep="repeat">OPTIONS</arg> <option>--mtree</option> <arg choice="plain"><replaceable>IMAGE</replaceable></arg></command>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>systemd-dissect <arg choice="opt" rep="repeat">OPTIONS</arg> <option>--with</option> <arg choice="plain"><replaceable>IMAGE</replaceable></arg> <arg choice="opt" rep="repeat"><replaceable>COMMAND</replaceable></arg></command>
+    </cmdsynopsis>
+    <cmdsynopsis>
       <command>systemd-dissect <arg choice="opt" rep="repeat">OPTIONS</arg> <option>--copy-from</option> <arg choice="plain"><replaceable>IMAGE</replaceable></arg> <arg choice="plain"><replaceable>PATH</replaceable></arg> <arg choice="opt"><replaceable>TARGET</replaceable></arg></command>
     </cmdsynopsis>
     <cmdsynopsis>
@@ -40,7 +52,7 @@
     <title>Description</title>
 
     <para><command>systemd-dissect</command> is a tool for introspecting and interacting with file system OS
-    disk images. It supports four different operations:</para>
+    disk images, specifically Discoverable Disk Images (DDIs). It supports four different operations:</para>
 
     <orderedlist>
       <listitem><para>Show general OS image information, including the image's
@@ -51,6 +63,10 @@
       mount the included partitions according to their designation onto a directory and possibly
       sub-directories.</para></listitem>
 
+      <listitem><para>Unmount an OS image from a local directory. In this mode it will recursively unmount
+      the mounted partitions and remove the underlying loop device, including all the partition sub-devices.
+      </para></listitem>
+
       <listitem><para>Copy files and directories in and out of an OS image.</para></listitem>
     </orderedlist>
 
@@ -58,7 +74,7 @@
 
     <orderedlist>
       <listitem><para>OS disk images containing a GPT partition table envelope, with partitions marked
-      according to the <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+      according to the <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
       Specification</ulink>.</para></listitem>
 
       <listitem><para>OS disk images containing just a plain file-system without an enveloping partition
@@ -99,14 +115,11 @@
         <listitem><para>Mount the specified OS image to the specified directory. This will dissect the image,
         determine the OS root file system — as well as possibly other partitions — and mount them to the
         specified directory. If the OS image contains multiple partitions marked with the <ulink
-        url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>
+        url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>
         multiple nested mounts are established. This command expects two arguments: a path to an image file
         and a path to a directory where to mount the image.</para>
 
-        <para>To unmount an OS image mounted like this use <citerefentry
-        project='man-pages'><refentrytitle>umount</refentrytitle><manvolnum>8</manvolnum></citerefentry>'s
-        <option>-R</option> switch (for recursive operation), so that the OS image and all nested partition
-        mounts are unmounted.</para>
+        <para>To unmount an OS image mounted like this use the <option>--umount</option> operation.</para>
 
         <para>When the OS image contains LUKS encrypted or Verity integrity protected file systems
         appropriate volumes are automatically set up and marked for automatic disassembly when the image is
@@ -129,6 +142,61 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--umount</option></term>
+        <term><option>-u</option></term>
+
+        <listitem><para>Unmount an OS image from the specified directory. This command expects one argument:
+        a directory where an OS image was mounted.</para>
+
+        <para>All mounted partitions will be recursively unmounted, and the underlying loop device will be
+        removed, along with all its partition sub-devices.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-U</option></term>
+
+        <listitem><para>This is a shortcut for <option>--umount --rmdir</option>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--list</option></term>
+        <term><option>-l</option></term>
+
+        <listitem><para>Prints the paths of all the files and directories in the specified OS image to
+        standard output.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--mtree</option></term>
+        <term><option>-l</option></term>
+
+        <listitem><para>Generates a BSD <citerefentry
+        project='die-net'><refentrytitle>mtree</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        compatible file manifest of the specified disk image. This is useful for comparing disk image
+        contents in detail, including inode information and other metadata. While the generated manifest will
+        contain detailed inode information, it currently excludes extended attributes, file system
+        capabilities, MAC labels, <citerefentry
+        project='man-pages'><refentrytitle>chattr</refentrytitle><manvolnum>1</manvolnum></citerefentry> file
+        flags, btrfs subvolume information, and various other file metadata. File content information is
+        shown via a SHA256 digest. Additional fields might be added in future. Note that inode information
+        such as link counts, inode numbers and timestamps is excluded from the output on purpose, as it
+        typically complicates reproducibility.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--with</option></term>
+
+        <listitem><para>Runs the specified command with the specified OS image mounted. This will mount the
+        image to a temporary directory, switch the current working directory to it, and invoke the specified
+        command line as child process. Once the process ends it will unmount the image again, and remove the
+        temporary directory. If no command is specified a shell is invoked. The image is mounted writable,
+        use <option>--read-only</option> to switch to read-only operation. The invoked process will have the
+        <varname>$SYSTEMD_DISSECT_ROOT</varname> environment variable set, containing the absolute path name
+        of the temporary mount point, i.e. the same directory that is set as the current working
+        directory.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--copy-from</option></term>
         <term><option>-x</option></term>
 
@@ -162,6 +230,17 @@
         operation begins.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--discover</option></term>
+
+        <listitem><para>Show a list of DDIs in well-known directories. This will show machine, portable
+        service and system extension disk images in the usual directories
+        <filename>/usr/lib/machines/</filename>, <filename>/usr/lib/portables/</filename>,
+        <filename>/usr/lib/extensions/</filename>, <filename>/var/lib/machines/</filename>,
+        <filename>/var/lib/portables/</filename>, <filename>/var/lib/extensions/</filename> and so
+        on.</para></listitem>
+      </varlistentry>
+
       <xi:include href="standard-options.xml" xpointer="help" />
       <xi:include href="standard-options.xml" xpointer="version" />
     </variablelist>
@@ -202,7 +281,7 @@
         <option>--mount</option> or <option>--copy-to</option>) the file systems contained in the OS image
         are automatically grown to their partition sizes, if bit 59 in the GPT partition flags is set for
         partition types that are defined by the <ulink
-        url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>. This
+        url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>. This
         behavior may be switched off using <option>--growfs=no</option>. File systems are grown automatically
         on access if all of the following conditions are met:</para>
         <orderedlist>
@@ -225,6 +304,13 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--rmdir</option></term>
+
+        <listitem><para>If combined with <option>--umount</option> the specified directory where the OS image
+        is mounted is removed after unmounting the OS image.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--discard=</option></term>
 
         <listitem><para>Takes one of <literal>disabled</literal>, <literal>loop</literal>,
@@ -235,6 +321,15 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--in-memory</option></term>
+
+        <listitem><para>If specified an in-memory copy of the specified disk image is used. This may be used
+        to operate with write-access on a (possibly read-only) image, without actually modifying the original
+        file. This may also be used in order to operate on a disk image without keeping the originating file
+        system busy, in order to allow it to be unmounted.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--root-hash=</option></term>
         <term><option>--root-hash-sig=</option></term>
         <term><option>--verity-data=</option></term>
@@ -247,7 +342,7 @@
         <option>--verity-data=</option> specifies a path to a file with the Verity data to use for the OS
         image, in case it is stored in a detached file. It is recommended to embed the Verity data directly
         in the image, using the Verity mechanisms in the <ulink
-        url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>.
+        url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>.
         </para></listitem>
       </varlistentry>
 
@@ -255,14 +350,24 @@
       <xi:include href="standard-options.xml" xpointer="no-legend" />
       <xi:include href="standard-options.xml" xpointer="json" />
     </variablelist>
-
   </refsect1>
 
   <refsect1>
     <title>Exit status</title>
 
-    <para>On success, 0 is returned, a non-zero failure code
-    otherwise.</para>
+    <para>On success, 0 is returned, a non-zero failure code otherwise. If the <option>--with</option>
+    command is used the exit status of the invoked command is propagated.</para>
+  </refsect1>
+
+
+  <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>Generate a tarball from an OS disk image</title>
+
+      <programlisting>$ systemd-dissect --with foo.raw tar cz . >foo.tar.gz</programlisting>
+    </example>
   </refsect1>
 
   <refsect1>
@@ -271,7 +376,7 @@
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-      <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>,
+      <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>,
       <citerefentry project='man-pages'><refentrytitle>umount</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>fdisk</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
diff --git a/man/systemd-firstboot.xml b/man/systemd-firstboot.xml
index 66d8299..cfce8a4 100644
--- a/man/systemd-firstboot.xml
+++ b/man/systemd-firstboot.xml
@@ -104,7 +104,7 @@
         are applied to file system in the indicated disk image. This is similar to <option>--root=</option>
         but operates on file systems stored in disk images or block devices. The disk image should either
         contain just a file system or a set of file systems within a GPT partition table, following the
-        <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+        <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
         Specification</ulink>. For further information on supported disk images, see
         <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
         switch of the same name.</para></listitem>
@@ -325,7 +325,15 @@
         <term><literal>firstboot.keymap</literal></term>
 
         <listitem><para>This credential specifies the keyboard setting to set during first boot, in place of
-        prompting the user.</para></listitem>
+        prompting the user.</para>
+
+        <para>Note the relationship to the <literal>vconsole.keymap</literal> credential understood by
+        <citerefentry><refentrytitle>systemd-vconsole-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>:
+        both ultimately affect the same setting, but <varname>firstboot.keymap</varname> is written into
+        <filename>/etc/vconsole.conf</filename> on first boot (if not already configured), and then read from
+        there by <command>systemd-vconsole-setup</command>, while <varname>vconsole.keymap</varname> is read
+        on every boot, and is not persisted to disk (but any configuration in
+        <filename>vconsole.conf</filename> will take precedence if present).</para></listitem>
       </varlistentry>
 
       <varlistentry>
diff --git a/man/systemd-fsck__at__.service.xml b/man/systemd-fsck__at__.service.xml
index 0353829..e928aeb 100644
--- a/man/systemd-fsck__at__.service.xml
+++ b/man/systemd-fsck__at__.service.xml
@@ -18,6 +18,7 @@
   <refnamediv>
     <refname>systemd-fsck@.service</refname>
     <refname>systemd-fsck-root.service</refname>
+    <refname>systemd-fsck-usr.service</refname>
     <refname>systemd-fsck</refname>
     <refpurpose>File system checker logic</refpurpose>
   </refnamediv>
@@ -25,21 +26,20 @@
   <refsynopsisdiv>
     <para><filename>systemd-fsck@.service</filename></para>
     <para><filename>systemd-fsck-root.service</filename></para>
+    <para><filename>systemd-fsck-usr.service</filename></para>
     <para><filename>/usr/lib/systemd/systemd-fsck</filename></para>
   </refsynopsisdiv>
 
   <refsect1>
     <title>Description</title>
 
-    <para><filename>systemd-fsck@.service</filename> and
-    <filename>systemd-fsck-root.service</filename> are services
-    responsible for file system checks. They are instantiated for each
-    device that is configured for file system checking.
-    <filename>systemd-fsck-root.service</filename> is responsible for
-    file system checks on the root file system, but only if the
-    root filesystem was not checked in the initramfs.
-    <filename>systemd-fsck@.service</filename> is used for all other
-    file systems and for the root file system in the initramfs.</para>
+    <para><filename>systemd-fsck@.service</filename>, <filename>systemd-fsck-root.service</filename>, and
+    <filename>systemd-fsck-usr.service</filename> are services responsible for file system checks. They are
+    instantiated for each device that is configured for file system checking.
+    <filename>systemd-fsck-root.service</filename> and <filename>systemd-fsck-usr.service</filename> are
+    responsible for file system checks on the root and /usr file system, respectively, but only if the root
+    filesystem was not checked in the initrd. <filename>systemd-fsck@.service</filename> is used for all
+    other file systems and for the root file system in the initrd.</para>
 
     <para>These services are started at boot if
     <option>passno</option> in <filename>/etc/fstab</filename> for the
@@ -55,9 +55,17 @@
     the filesystem should actually be checked based on the time since
     last check, number of mounts, unclean unmount, etc.</para>
 
-    <para>If a file system check fails for a service without
-    <option>nofail</option>, emergency mode is activated, by isolating
-    to <filename>emergency.target</filename>.</para>
+    <para><filename>systemd-fsck-root.service</filename> and <filename>systemd-fsck-usr.service</filename>
+    will activate <filename>reboot.target</filename> if <filename>/sbin/fsck</filename> returns the "System
+    should reboot" condition, or <filename>emergency.target</filename> if <filename>/sbin/fsck</filename>
+    returns the "Filesystem errors left uncorrected" condition.</para>
+
+    <para><filename>systemd-fsck@.service</filename> will fail if
+    <filename>/sbin/fsck</filename> returns with either "System should reboot"
+    or "Filesystem errors left uncorrected" conditions. For filesystems
+    listed in <filename>/etc/fstab</filename> without <literal>nofail</literal>
+    or <literal>noauto</literal> options, <literal>local-fs.target</literal>
+    will then activate <filename>emergency.target</filename>.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml
index 3c5a5cc..b790837 100644
--- a/man/systemd-fstab-generator.xml
+++ b/man/systemd-fstab-generator.xml
@@ -46,7 +46,7 @@
     for more information about special <filename>/etc/fstab</filename>
     mount options this generator understands.</para>
 
-    <para>One special topic is handling of symbolic links.  Historical init
+    <para>One special topic is handling of symbolic links. Historical init
     implementations supported symlinks in <filename>/etc/fstab</filename>.
     Because mount units will refuse mounts where the target is a symbolic link,
     this generator will resolve any symlinks as far as possible when processing
@@ -70,13 +70,10 @@
         <term><varname>fstab=</varname></term>
         <term><varname>rd.fstab=</varname></term>
 
-        <listitem><para>Takes a boolean argument. Defaults to
-        <literal>yes</literal>. If <literal>no</literal>, causes the
-        generator to ignore any mounts or swap devices configured in
-        <filename>/etc/fstab</filename>. <varname>rd.fstab=</varname>
-        is honored only by the initial RAM disk (initrd) while
-        <varname>fstab=</varname> is honored by both the main system
-        and the initrd.</para></listitem>
+        <listitem><para>Takes a boolean argument. Defaults to <literal>yes</literal>. If
+        <literal>no</literal>, causes the generator to ignore any mounts or swap devices configured in
+        <filename>/etc/fstab</filename>. <varname>rd.fstab=</varname> is honored only in the initrd, while
+        <varname>fstab=</varname> is honored by both the main system and the initrd.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -172,6 +169,18 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>roothash=</varname></term>
+        <term><varname>usrhash=</varname></term>
+
+        <listitem><para>These options are primarily read by
+        <citerefentry><refentrytitle>systemd-veritysetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>. When
+        set this indicates that the root file system (or <filename>/usr/</filename>) shall be mounted from
+        Verity volumes with the specified hashes. If these kernel command line options are set the root (or
+        <filename>/usr/</filename>) file system is thus mounted from a device mapper volume
+        <filename>/dev/mapper/root</filename> (or <filename>/dev/mapper/usr</filename>).</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>systemd.volatile=</varname></term>
 
         <listitem><para>Controls whether the system shall boot up in volatile mode. Takes a boolean argument or the
@@ -182,12 +191,12 @@
 
         <para>If true the generator ensures
         <citerefentry><refentrytitle>systemd-volatile-root.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-        is run as part of the initial RAM disk ("initrd"). This service changes the mount table before transitioning to
-        the host system, so that a volatile memory file system (<literal>tmpfs</literal>) is used as root directory,
-        with only <filename>/usr/</filename> mounted into it from the configured root file system, in read-only
-        mode. This way the system operates in fully stateless mode, with all configuration and state reset at boot and
-        lost at shutdown, as <filename>/etc/</filename> and <filename>/var/</filename> will be served from the (initially
-        unpopulated) volatile memory file system.</para>
+        is run in the initrd. This service changes the mount table before transitioning to the host system,
+        so that a volatile memory file system (<literal>tmpfs</literal>) is used as root directory, with only
+        <filename>/usr/</filename> mounted into it from the configured root file system, in read-only mode.
+        This way the system operates in fully stateless mode, with all configuration and state reset at boot
+        and lost at shutdown, as <filename>/etc/</filename> and <filename>/var/</filename> will be served
+        from the (initially unpopulated) volatile memory file system.</para>
 
         <para>If set to <option>state</option> the generator will leave the root directory mount point unaltered,
         however will mount a <literal>tmpfs</literal> file system to <filename>/var/</filename>. In this mode the normal
@@ -239,8 +248,8 @@
       <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <ulink url="https://systemd.io/ENVIRONMENT/">Known Environment Variables</ulink>
     </para>
   </refsect1>
-
 </refentry>
diff --git a/man/systemd-getty-generator.xml b/man/systemd-getty-generator.xml
index 507a001..def3852 100644
--- a/man/systemd-getty-generator.xml
+++ b/man/systemd-getty-generator.xml
@@ -29,7 +29,7 @@
     <title>Description</title>
 
     <para><filename>systemd-getty-generator</filename> is a generator that automatically instantiates
-    <filename>serial-getty@.service</filename> on the kernel console(s), if they can function as ttys and are
+    <filename>serial-getty@.service</filename> on the kernel consoles, if they can function as ttys and are
     not provided by the virtual console subsystem. It will also instantiate
     <filename>serial-getty@.service</filename> instances for virtualizer consoles, if execution in a
     virtualized environment is detected. If execution in a container environment is detected, it will instead
@@ -40,8 +40,8 @@
     place, regardless of which environment the system is started in. For example, it is sufficient to
     redirect the kernel console with a kernel command line argument such as <varname>console=</varname> to
     get both kernel messages and a getty prompt on a serial TTY. See <ulink
-    url="https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt"><filename>kernel-parameters.txt</filename></ulink>
-    for more information on the <varname>console=</varname> kernel parameter.</para>
+    url="https://docs.kernel.org/admin-guide/kernel-parameters.html">The kernel's command-line
+    parameters</ulink> for more information on the <varname>console=</varname> kernel parameter.</para>
 
     <para><filename>systemd-getty-generator</filename> implements
     <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
@@ -54,9 +54,42 @@
   </refsect1>
 
   <refsect1>
+    <title>Kernel Command Line</title>
+
+    <para><filename>systemd-getty-generator</filename> understands the following
+    <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    parameters:</para>
+
+    <variablelist class='kernel-commandline-options'>
+      <varlistentry>
+        <term><varname>systemd.getty_auto=</varname></term>
+
+        <listitem><para>this options take an optional boolean argument, and default to yes.
+        The generator is enabled by default, and a false value may be used to disable it.
+        </para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Environment</title>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$SYSTEMD_GETTY_AUTO</varname></term>
+
+        <listitem><para>This variable takes an optional boolean argument, and default to yes.
+        The generator is enabled by default, and a false value may be used to disable it.
+        </para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>agetty</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
diff --git a/man/systemd-gpt-auto-generator.xml b/man/systemd-gpt-auto-generator.xml
index 4a21540..bd542cb 100644
--- a/man/systemd-gpt-auto-generator.xml
+++ b/man/systemd-gpt-auto-generator.xml
@@ -34,7 +34,7 @@
     <filename>/var/tmp/</filename>, the EFI System Partition, the Extended Boot Loader Partition and swap
     partitions and creates mount and swap units for them, based on the partition type GUIDs of GUID partition
     tables (GPT), see <ulink url="https://uefi.org/specifications">UEFI Specification</ulink>, chapter 5. It
-    implements the <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+    implements the <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
     Specification</ulink>. Note that this generator has no effect on non-GPT systems, and on specific mount
     points that are directories already containing files. Also, on systems where the units are explicitly
     configured (for example, listed in <citerefentry
@@ -42,8 +42,8 @@
     units this generator creates are overridden, but additional implicit dependencies might be
     created.</para>
 
-    <para>This generator will only look for the root partition on the same physical disk the EFI System
-    Partition (ESP) is located on. Note that support from the boot loader is required: the EFI variable
+    <para>This generator will only look for the root partition on the same physical disk where the EFI System
+    Partition (ESP) is located. Note that support from the boot loader is required: the EFI variable
     <varname>LoaderDevicePartUUID</varname> of the <constant>4a67b082-0a4c-41cf-b6c7-440b29bb8c4f</constant>
     vendor UUID is used to determine from which partition, and hence the disk from which the system was
     booted. If the boot loader does not set this variable, this generator will not be able to autodetect the
@@ -80,88 +80,66 @@
         </thead>
         <tbody>
           <row>
-            <entry>44479540-f297-41b2-9af7-d131d5f0458a</entry>
-            <entry><filename>Root Partition (x86)</filename></entry>
-            <entry><filename>/</filename></entry>
-            <entry>On 32-bit x86 systems, the first x86 root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
-          </row>
-          <row>
-            <entry>4f68bce3-e8cd-4db1-96e7-fbcaf984b709</entry>
+            <entry><constant>SD_GPT_ROOT_X86_64</constant> <constant>4f68bce3-e8cd-4db1-96e7-fbcaf984b709</constant></entry>
             <entry><filename>Root Partition (x86-64)</filename></entry>
             <entry><filename>/</filename></entry>
-            <entry>On 64-bit x86 systems, the first x86-64 root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
+            <entry>The first partition with this type UUID, located on the same disk as the ESP, is used as the root file system <filename>/</filename> on AMD64 / 64-bit x86 systems.</entry>
           </row>
           <row>
-            <entry>69dad710-2ce4-4e3c-b16c-21a1d49abed3</entry>
-            <entry><filename>Root Partition (32-bit ARM)</filename></entry>
-            <entry><filename>/</filename></entry>
-            <entry>On 32-bit ARM systems, the first ARM root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
-          </row>
-          <row>
-            <entry>b921b045-1df0-41c3-af44-4c6f280d3fae</entry>
+            <entry><constant>SD_GPT_ROOT_ARM64</constant> <constant>b921b045-1df0-41c3-af44-4c6f280d3fae</constant></entry>
             <entry><filename>Root Partition (64-bit ARM)</filename></entry>
             <entry><filename>/</filename></entry>
-            <entry>On 64-bit ARM systems, the first ARM root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
+            <entry>The first partition with this type UUID, located on the same disk as the ESP, is used as the root file system <filename>/</filename> on AArch64 / 64-bit ARM systems.</entry>
           </row>
           <row>
-            <entry>993d8d3d-f80e-4225-855a-9daf8ed7ea97</entry>
-            <entry><filename>Root Partition (Itanium/IA-64)</filename></entry>
+            <entry>
+              <constant>SD_GPT_ROOT_ALPHA</constant> <constant>SD_GPT_ROOT_ARC</constant> <constant>SD_GPT_ROOT_ARM</constant> <constant>SD_GPT_ROOT_ARM64</constant> <constant>SD_GPT_ROOT_IA64</constant> <constant>SD_GPT_ROOT_LOONGARCH64</constant> <constant>SD_GPT_ROOT_MIPS_LE</constant> <constant>SD_GPT_ROOT_MIPS64_LE</constant> <constant>SD_GPT_ROOT_PARISC</constant> <constant>SD_GPT_ROOT_PPC</constant> <constant>SD_GPT_ROOT_PPC64</constant> <constant>SD_GPT_ROOT_PPC64_LE</constant> <constant>SD_GPT_ROOT_RISCV32</constant> <constant>SD_GPT_ROOT_RISCV64</constant> <constant>SD_GPT_ROOT_S390</constant> <constant>SD_GPT_ROOT_S390X</constant> <constant>SD_GPT_ROOT_TILEGX</constant> <constant>SD_GPT_ROOT_X86</constant> <constant>SD_GPT_ROOT_X86_64</constant> <constant>SD_GPT_USR_ALPHA</constant> <constant>SD_GPT_USR_ARC</constant> <constant>SD_GPT_USR_ARM</constant> <constant>SD_GPT_USR_IA64</constant> <constant>SD_GPT_USR_LOONGARCH64</constant> <constant>SD_GPT_USR_MIPS_LE</constant> <constant>SD_GPT_USR_MIPS64_LE</constant> <constant>SD_GPT_USR_PARISC</constant> <constant>SD_GPT_USR_PPC</constant> <constant>SD_GPT_USR_PPC64</constant> <constant>SD_GPT_USR_PPC64_LE</constant> <constant>SD_GPT_USR_RISCV32</constant> <constant>SD_GPT_USR_RISCV64</constant> <constant>SD_GPT_USR_S390</constant> <constant>SD_GPT_USR_S390X</constant> <constant>SD_GPT_USR_TILEGX</constant> <constant>SD_GPT_USR_X86</constant>
+            </entry>
+            <entry>root partitions for other architectures</entry>
             <entry><filename>/</filename></entry>
-            <entry>On Itanium systems, the first Itanium root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
+            <entry>The first partition with the type UUID matching the architecture, located on the same disk as the ESP, is used as the root file system <filename>/</filename>. For the full list and constant values, see <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>.</entry>
           </row>
           <row>
-            <entry>60d5a7fe-8e7d-435c-b714-3dd8162144e1</entry>
-            <entry><filename>Root Partition (RISCV-V 32)</filename></entry>
-            <entry><filename>/</filename></entry>
-            <entry>On RISC-V 32-bit systems, the first RISCV-V 32-bit root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
-          </row>
-          <row>
-            <entry>72ec70a6-cf74-40e6-bd49-4bda08e8f224</entry>
-            <entry><filename>Root Partition (RISCV-V 64)</filename></entry>
-            <entry><filename>/</filename></entry>
-            <entry>On RISC-V 64-bit systems, the first RISCV-V 64-bit root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
-          </row>
-          <row>
-            <entry>933ac7e1-2eb4-4f13-b844-0e14e2aef915</entry>
+            <entry><constant>SD_GPT_HOME</constant> <constant>933ac7e1-2eb4-4f13-b844-0e14e2aef915</constant></entry>
             <entry>Home Partition</entry>
             <entry><filename>/home/</filename></entry>
-            <entry>The first home partition on the disk the root partition is located on is mounted to <filename>/home/</filename>.</entry>
+            <entry>The first partition with this type UUID on the same disk as the ESP is mounted to <filename>/home/</filename>.</entry>
           </row>
           <row>
-            <entry>3b8f8425-20e0-4f3b-907f-1a25a76f98e8</entry>
+            <entry><constant>SD_GPT_SRV</constant> <constant>3b8f8425-20e0-4f3b-907f-1a25a76f98e8</constant></entry>
             <entry>Server Data Partition</entry>
             <entry><filename>/srv/</filename></entry>
-            <entry>The first server data partition on the disk the root partition is located on is mounted to <filename>/srv/</filename>.</entry>
+            <entry>The first partition with this type UUID on the same disk as the ESP is mounted to <filename>/srv/</filename>.</entry>
           </row>
           <row>
-            <entry>4d21b016-b534-45c2-a9fb-5c16e091fd2d</entry>
+            <entry><constant>SD_GPT_VAR</constant> <constant>4d21b016-b534-45c2-a9fb-5c16e091fd2d</constant></entry>
             <entry>Variable Data Partition</entry>
             <entry><filename>/var/</filename></entry>
-            <entry>The first variable data partition on the disk the root partition is located on is mounted to <filename>/var/</filename> — under the condition its partition UUID matches the first 128 bit of the HMAC-SHA256 of the GPT type uuid of this partition keyed by the machine ID of the installation stored in <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</entry>
+            <entry>The first partition with this type UUID on the same disk as the ESP is mounted to <filename>/var/</filename> — under the condition its partition UUID matches the first 128 bit of the HMAC-SHA256 of the GPT type uuid of this partition keyed by the machine ID of the installation stored in <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</entry>
           </row>
           <row>
-            <entry>7ec6f557-3bc5-4aca-b293-16ef5df639d1</entry>
+            <entry><constant>SD_GPT_TMP</constant> <constant>7ec6f557-3bc5-4aca-b293-16ef5df639d1</constant></entry>
             <entry>Temporary Data Partition</entry>
             <entry><filename>/var/tmp/</filename></entry>
-            <entry>The first temporary data partition on the disk the root partition is located on is mounted to <filename>/var/tmp/</filename>.</entry>
+            <entry>The first partition with this type UUID on the same disk as the ESP is mounted to <filename>/var/tmp/</filename>.</entry>
           </row>
           <row>
-            <entry>0657fd6d-a4ab-43c4-84e5-0933c84b4f4f</entry>
+            <entry><constant>SD_GPT_SWAP</constant> <constant>0657fd6d-a4ab-43c4-84e5-0933c84b4f4f</constant></entry>
             <entry>Swap</entry>
             <entry>n/a</entry>
-            <entry>All swap partitions located on the disk the root partition is located on are enabled.</entry>
+            <entry>All partitions with this type UUID on the same disk as the ESP are used as swap.</entry>
           </row>
           <row>
-            <entry>c12a7328-f81f-11d2-ba4b-00a0c93ec93b</entry>
+            <entry><constant>SD_GPT_ESP</constant> <constant>c12a7328-f81f-11d2-ba4b-00a0c93ec93b</constant></entry>
             <entry>EFI System Partition (ESP)</entry>
             <entry><filename>/efi/</filename> or <filename>/boot/</filename></entry>
-            <entry>The first ESP located on the disk the root partition is located on is mounted to <filename>/boot/</filename> or <filename>/efi/</filename>, see below.</entry>
+            <entry>The first partition with this type UUID located on the same disk as the root partition is mounted to <filename>/boot/</filename> or <filename>/efi/</filename>, see below.</entry>
           </row>
           <row>
-            <entry>bc13c2ff-59e6-4262-a352-b275fd6f7172</entry>
+            <entry><constant>SD_GPT_XBOOTLDR</constant> <constant>bc13c2ff-59e6-4262-a352-b275fd6f7172</constant></entry>
             <entry>Extended Boot Loader Partition</entry>
             <entry><filename>/boot/</filename></entry>
-            <entry>The first Extended Boot Loader Partition is mounted to <filename>/boot/</filename>, see below.</entry>
+            <entry>The first partition with this type UUID located on the same disk as the root partition is mounted to <filename>/boot/</filename>, see below.</entry>
           </row>
         </tbody>
       </tgroup>
@@ -170,38 +148,33 @@
     <para>This generator understands the following attribute flags for partitions:</para>
 
     <table>
-      <title>Partition Attributes</title>
-      <tgroup cols='4' align='left' colsep='1' rowsep='1'>
-        <colspec colname="attribute" />
-        <colspec colname="value" />
+      <title>Partition Attribute Flags</title>
+      <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+        <colspec colname="flag" />
         <colspec colname="where" />
         <colspec colname="explanation" />
         <thead>
           <row>
-            <entry>Name</entry>
-            <entry>Value</entry>
+            <entry>Flag</entry>
             <entry>Applicable to</entry>
             <entry>Explanation</entry>
           </row>
         </thead>
         <tbody>
           <row>
-            <entry><constant>GPT_FLAG_READ_ONLY</constant></entry>
-            <entry>0x1000000000000000</entry>
+            <entry><constant>SD_GPT_FLAG_READ_ONLY</constant> <constant>0x1000000000000000</constant></entry>
             <entry><filename>/</filename>, <filename>/home/</filename>, <filename>/srv/</filename>, <filename>/var/</filename>, <filename>/var/tmp/</filename>, Extended Boot Loader Partition</entry>
             <entry>Partition is mounted read-only</entry>
           </row>
 
           <row>
-            <entry><constant>GPT_FLAG_NO_AUTO</constant></entry>
-            <entry>0x8000000000000000</entry>
+            <entry><constant>SD_GPT_FLAG_NO_AUTO</constant> <constant>0x8000000000000000</constant></entry>
             <entry><filename>/</filename>, <filename>/home/</filename>, <filename>/srv/</filename>, <filename>/var/</filename>, <filename>/var/tmp/</filename>, Extended Boot Loader Partition</entry>
             <entry>Partition is not mounted automatically</entry>
           </row>
 
           <row>
-            <entry><constant>GPT_FLAG_NO_BLOCK_IO_PROTOCOL</constant></entry>
-            <entry>0x0000000000000002</entry>
+            <entry><constant>SD_GPT_FLAG_NO_BLOCK_IO_PROTOCOL</constant> <constant>0x0000000000000002</constant></entry>
             <entry>EFI System Partition (ESP)</entry>
             <entry>Partition is not mounted automatically</entry>
           </row>
@@ -222,6 +195,11 @@
       For more information, see <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
     </para>
 
+    <para>The root partition can be specified by symlinking <filename>/run/systemd/volatile-root</filename>
+    to <filename>/dev/block/$major:$minor</filename>. This is especially useful if the root mount has been
+    replaced by some form of volatile file system (overlayfs).
+    </para>
+
     <para>Mount and automount units for the EFI System Partition (ESP) are generated on EFI systems. The ESP
     is mounted to <filename>/boot/</filename> (except if an Extended Boot Loader partition exists, see
     below), unless a mount point directory <filename>/efi/</filename> exists, in which case it is mounted
@@ -233,7 +211,7 @@
     are generated.</para>
 
     <para>If the disk contains an Extended Boot Loader partition, as defined in the <ulink
-    url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>, it is made
+    url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>, it is made
     available at <filename>/boot/</filename> (by means of an automount point, similar to the ESP, see
     above). If both an EFI System Partition and an Extended Boot Loader partition exist the latter is
     preferably mounted to <filename>/boot/</filename>. Make sure to create both <filename>/efi/</filename>
@@ -243,6 +221,13 @@
     systems, make sure to set the correct default subvolumes on them,
     using <command>btrfs subvolume set-default</command>.</para>
 
+    <para>If the system was booted via
+    <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry> and the
+    stub reported to userspace that the kernel image was measured to a TPM2 PCR, then any discovered root and
+    <filename>/var/</filename> volume identifiers (and volume encryption key in case it is encrypted) will be
+    automatically measured into PCR 15 on activation, via
+    <citerefentry><refentrytitle>systemd-pcrfs@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+
     <para><filename>systemd-gpt-auto-generator</filename> implements
     <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
   </refsect1>
@@ -266,10 +251,16 @@
 
       <varlistentry>
         <term><varname>root=</varname></term>
+        <term><varname>rootfstype=</varname></term>
+        <term><varname>rootflags=</varname></term>
 
-        <listitem><para>When used with the special value <literal>gpt-auto</literal>, automatic discovery of
-        the root partition based on the GPT partition type is enabled.  Any other value disables this
-        generator.</para></listitem>
+        <listitem><para>When <varname>root=</varname> is used with the special value
+        <literal>gpt-auto</literal> (or if the parameter is not used at all), automatic discovery of the root
+        partition based on the GPT partition type is enabled. Any other value disables this
+        logic.</para>
+
+        <para>The <varname>rootfstype=</varname> and <varname>rootflags=</varname> are used to select the
+        file system type and options when the root file system is automatically discovered.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -294,6 +285,7 @@
       <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-pcrfs@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry project='die-net'><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
deleted file mode 100644
index 96072ae..0000000
--- a/man/systemd-halt.service.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version='1.0'?> <!--*-nxml-*-->
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
-
-<refentry id="systemd-halt.service">
-
-  <refentryinfo>
-    <title>systemd-halt.service</title>
-    <productname>systemd</productname>
-  </refentryinfo>
-
-  <refmeta>
-    <refentrytitle>systemd-halt.service</refentrytitle>
-    <manvolnum>8</manvolnum>
-  </refmeta>
-
-  <refnamediv>
-    <refname>systemd-halt.service</refname>
-    <refname>systemd-poweroff.service</refname>
-    <refname>systemd-reboot.service</refname>
-    <refname>systemd-kexec.service</refname>
-    <refname>systemd-shutdown</refname>
-    <refpurpose>System shutdown logic</refpurpose>
-  </refnamediv>
-
-  <refsynopsisdiv>
-    <para><filename>systemd-halt.service</filename></para>
-    <para><filename>systemd-poweroff.service</filename></para>
-    <para><filename>systemd-reboot.service</filename></para>
-    <para><filename>systemd-kexec.service</filename></para>
-    <para><filename>/usr/lib/systemd/systemd-shutdown</filename></para>
-    <para><filename>/usr/lib/systemd/system-shutdown/</filename></para>
-  </refsynopsisdiv>
-
-  <refsect1>
-    <title>Description</title>
-
-    <para><filename>systemd-halt.service</filename> is a system
-    service that is pulled in by <filename>halt.target</filename> and
-    is responsible for the actual system halt. Similarly,
-    <filename>systemd-poweroff.service</filename> is pulled in by
-    <filename>poweroff.target</filename>,
-    <filename>systemd-reboot.service</filename> by
-    <filename>reboot.target</filename> and
-    <filename>systemd-kexec.service</filename> by
-    <filename>kexec.target</filename> to execute the respective
-    actions.</para>
-
-    <para>When these services are run, they ensure that PID 1 is
-    replaced by the
-    <filename>/usr/lib/systemd/systemd-shutdown</filename> tool which
-    is then responsible for the actual shutdown. Before shutting down,
-    this binary will try to unmount all remaining file systems,
-    disable all remaining swap devices, detach all remaining storage
-    devices and kill all remaining processes.</para>
-
-    <para>It is necessary to have this code in a separate binary
-    because otherwise rebooting after an upgrade might be broken — the
-    running PID 1 could still depend on libraries which are not
-    available any more, thus keeping the file system busy, which then
-    cannot be re-mounted read-only.</para>
-
-    <para>Immediately before executing the actual system
-    halt/poweroff/reboot/kexec <filename>systemd-shutdown</filename>
-    will run all executables in
-    <filename>/usr/lib/systemd/system-shutdown/</filename> and pass
-    one arguments to them: either <literal>halt</literal>,
-    <literal>poweroff</literal>, <literal>reboot</literal> or
-    <literal>kexec</literal>, depending on the chosen action. All
-    executables in this directory are executed in parallel, and
-    execution of the action is not continued before all executables
-    finished.</para>
-
-    <para>Note that <filename>systemd-halt.service</filename> (and the
-    related units) should never be executed directly. Instead, trigger
-    system shutdown with a command such as <literal>systemctl
-    halt</literal> or suchlike.</para>
-  </refsect1>
-
-  <refsect1>
-    <title>See Also</title>
-    <para>
-      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-    </para>
-  </refsect1>
-
-</refentry>
diff --git a/man/systemd-hibernate-resume__at__.service.xml b/man/systemd-hibernate-resume__at__.service.xml
index c460393..b6ae1f9 100644
--- a/man/systemd-hibernate-resume__at__.service.xml
+++ b/man/systemd-hibernate-resume__at__.service.xml
@@ -34,8 +34,8 @@
     device to resume from as the template argument.</para>
 
     <para><filename>systemd-hibernate-resume</filename> only supports
-    the in-kernel hibernation implementation, known as
-    <ulink url="https://www.kernel.org/doc/Documentation/power/swsusp.txt">swsusp</ulink>.
+    the in-kernel hibernation implementation, see
+    <ulink url="https://docs.kernel.org/power/swsusp.html">Swap suspend</ulink>.
     Internally, it works by writing the major:minor of specified
     device node to <filename>/sys/power/resume</filename>.</para>
 
diff --git a/man/systemd-id128.xml b/man/systemd-id128.xml
index 21cbf16..5fc78a4 100644
--- a/man/systemd-id128.xml
+++ b/man/systemd-id128.xml
@@ -74,9 +74,11 @@
     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
     </para>
 
-    <para>With <command>show</command>, well-known UUIDs are printed. When no arguments are specified, all
-    known UUIDs are shown. When arguments are specified, they must be the names or values of one or more
-    known UUIDs, which are then printed.</para>
+    <para>With <command>show</command>, well-known IDs are printed (for now, only GPT partition type UUIDs),
+    along with brief identifier strings. When no arguments are specified, all known IDs are shown. When
+    arguments are specified, they must be the identifiers or ID values of one or more known IDs, which are
+    then printed. Combine with <option>--uuid</option> to list the IDs in UUID style, i.e. the way GPT
+    partition type UUIDs are usually shown.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd-integritysetup-generator.xml b/man/systemd-integritysetup-generator.xml
new file mode 100644
index 0000000..3e788f1
--- /dev/null
+++ b/man/systemd-integritysetup-generator.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+<refentry id="systemd-integritysetup-generator" conditional='HAVE_LIBCRYPTSETUP'>
+
+  <refentryinfo>
+    <title>systemd-integritysetup-generator</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-integritysetup-generator</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-integritysetup-generator</refname>
+    <refpurpose>Unit generator for integrity protected block devices</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>/usr/lib/systemd/system-generators/systemd-integritysetup-generator</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><command>systemd-integritysetup-generator</command> is a generator that translates
+    <filename>/etc/integritytab</filename> entries into native systemd units early at boot. This will create
+    <citerefentry><refentrytitle>systemd-integritysetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    units as necessary.</para>
+
+    <para><command>systemd-integritysetup-generator</command> implements
+    <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-integritysetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry project='die-net'><refentrytitle>integritysetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-integritysetup@.service.xml b/man/systemd-integritysetup@.service.xml
new file mode 100644
index 0000000..3dca2c3
--- /dev/null
+++ b/man/systemd-integritysetup@.service.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+<refentry id="systemd-integritysetup@.service" conditional='HAVE_LIBCRYPTSETUP'>
+
+  <refentryinfo>
+    <title>systemd-integritysetup@.service</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-integritysetup@.service</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-integritysetup@.service</refname>
+    <refname>systemd-integritysetup</refname>
+    <refpurpose>Disk integrity protection logic</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>systemd-integritysetup@.service</filename></para>
+    <para><filename>/usr/lib/systemd/systemd-integritysetup</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><filename>systemd-integritysetup@.service</filename> is a service responsible for setting up integrity
+    protected block devices. It should be instantiated for each device that requires integrity
+    protection.</para>
+
+    <para>At early boot and when the system manager configuration is reloaded, entries from
+    <citerefentry><refentrytitle>integritytab</refentrytitle><manvolnum>5</manvolnum></citerefentry> are
+    converted into <filename>systemd-integritysetup@.service</filename> units by
+    <citerefentry><refentrytitle>systemd-integritysetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+
+    <para><filename>systemd-integritysetup@.service</filename> calls <command>systemd-integritysetup</command>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Commands</title>
+
+    <para>The following commands are understood by <command>systemd-integritysetup</command>:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term>
+          <option>attach</option>
+          <replaceable>volume</replaceable>
+          <replaceable>device</replaceable>
+          [<replaceable>key-file|-</replaceable>]
+          [<replaceable>option(s)|-</replaceable>]
+        </term>
+
+        <listitem><para>Create a block device <replaceable>volume</replaceable> using
+        <replaceable>device</replaceable>. See
+        <citerefentry><refentrytitle>integritytab</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        and
+        <ulink url="https://docs.kernel.org/admin-guide/device-mapper/dm-integrity.html">
+          Kernel dm-integrity</ulink> documentation for details.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
+          <option>detach</option>
+          <replaceable>volume</replaceable>
+        </term>
+
+        <listitem><para>Detach (destroy) the block device
+        <replaceable>volume</replaceable>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
+          <option>help</option>
+        </term>
+
+        <listitem><para>Print short information about command syntax.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>integritytab</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-integritysetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry project='die-net'><refentrytitle>integritysetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+     </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-journal-upload.service.xml b/man/systemd-journal-upload.service.xml
index e2b39bf..ce9bbdf 100644
--- a/man/systemd-journal-upload.service.xml
+++ b/man/systemd-journal-upload.service.xml
@@ -45,7 +45,10 @@
     Unless limited by one of the options specified below, all journal entries accessible to the user
     the program is running as will be uploaded, and then the program will wait and send new entries
     as they become available.</para>
-
+    
+    <para><command>systemd-journal-upload</command> transfers the raw content of journal file and
+    uses HTTP as a transport protocol.</para> 
+    
     <para><filename>systemd-journal-upload.service</filename> is a system service that uses
     <command>systemd-journal-upload</command> to upload journal entries to a server. It uses the
     configuration in
diff --git a/man/systemd-journald.service.xml b/man/systemd-journald.service.xml
index e797ca6..6b0fb31 100644
--- a/man/systemd-journald.service.xml
+++ b/man/systemd-journald.service.xml
@@ -71,7 +71,7 @@
     </para>
 
     <para>Log data collected by the journal is primarily text-based but can also include binary data where
-    necessary. Individual fields making up a log record stored in the journal may be up to 2^64-1 bytes in size.</para>
+    necessary. Individual fields making up a log record stored in the journal may be up to 2⁶⁴-1 bytes in size.</para>
 
     <para>The journal service stores log data either persistently below <filename>/var/log/journal</filename> or in a
     volatile way below <filename>/run/log/journal/</filename> (in the latter case it is lost at reboot). By default, log
@@ -332,7 +332,9 @@
         <listitem><para>Sockets and other file node paths that <command>systemd-journald</command> will
         listen on and are visible in the file system. In addition to these,
         <command>systemd-journald</command> can listen for audit events using <citerefentry
-        project='man-pages'><refentrytitle>netlink</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para></listitem>
+        project='man-pages'><refentrytitle>netlink</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+        depending on whether <literal>systemd-journald-audit.socket</literal> is enabled or
+        not.</para></listitem>
       </varlistentry>
     </variablelist>
 
diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
index 177fe89..f1695b6 100644
--- a/man/systemd-machine-id-setup.xml
+++ b/man/systemd-machine-id-setup.xml
@@ -39,7 +39,7 @@
 
     <para>If the tool is invoked without the <option>--commit</option>
     switch, <filename>/etc/machine-id</filename> is initialized with a
-    valid, new machined ID if it is missing or empty. The new machine
+    valid, new machine ID if it is missing or empty. The new machine
     ID will be acquired in the following fashion:</para>
 
     <orderedlist>
diff --git a/man/systemd-machined.service.xml b/man/systemd-machined.service.xml
index 1b4318f..48bf6c5 100644
--- a/man/systemd-machined.service.xml
+++ b/man/systemd-machined.service.xml
@@ -95,7 +95,7 @@
     <para>If you are interested in writing a VM or container manager that makes use of machined, please have
     look at <ulink url="https://www.freedesktop.org/wiki/Software/systemd/writing-vm-managers">Writing
     Virtual Machine or Container Managers</ulink>. Also see the <ulink
-    url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New Control Group
+    url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface">New Control Group
     Interfaces</ulink>.</para>
 
     <para>The daemon provides both a C library interface
diff --git a/man/systemd-makefs__at__.service.xml b/man/systemd-makefs__at__.service.xml
index 5ea200c..1eedb77 100644
--- a/man/systemd-makefs__at__.service.xml
+++ b/man/systemd-makefs__at__.service.xml
@@ -19,6 +19,7 @@
     <refname>systemd-makefs@.service</refname>
     <refname>systemd-mkswap@.service</refname>
     <refname>systemd-growfs@.service</refname>
+    <refname>systemd-growfs-root.service</refname>
     <refname>systemd-makefs</refname>
     <refname>systemd-growfs</refname>
     <refpurpose>Creating and growing file systems on demand</refpurpose>
@@ -28,6 +29,7 @@
     <para><filename>systemd-makefs@<replaceable>device</replaceable>.service</filename></para>
     <para><filename>systemd-mkswap@<replaceable>device</replaceable>.service</filename></para>
     <para><filename>systemd-growfs@<replaceable>mountpoint</replaceable>.service</filename></para>
+    <para><filename>systemd-growfs-root.service</filename></para>
     <para><filename>/usr/lib/systemd/systemd-makefs</filename></para>
     <para><filename>/usr/lib/systemd/systemd-growfs</filename></para>
   </refsynopsisdiv>
@@ -36,8 +38,9 @@
     <title>Description</title>
 
     <para><filename>systemd-makefs@.service</filename>,
-    <filename>systemd-mkswap@.service</filename>, and
-    <filename>systemd-growfs@.service</filename> are used to implement the
+    <filename>systemd-mkswap@.service</filename>,
+    <filename>systemd-growfs@.service</filename>, and
+    <filename>systemd-growfs-root.service</filename> are used to implement the
     <option>x-systemd.makefs</option> and <option>x-systemd.growfs</option> options
     in <citerefentry project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
     see <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
@@ -52,7 +55,12 @@
     systems and swap devices, and after checking that the block device does not already
     contain a file system or other content, it will execute binaries specific to
     each filesystem type (<filename>/sbin/mkfs.<replaceable>type</replaceable></filename>
-    or <filename>/sbin/mkswap</filename>).</para>
+    or <filename>/sbin/mkswap</filename>). For certain file system types (currently
+    ext2/ext3/<citerefentry project='man-pages'><refentrytitle>ext4</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+    <citerefentry project='url'><refentrytitle url='https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs(5)'>btrfs</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+    <citerefentry project='man-pages'><refentrytitle>xfs</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+    f2fs, vfat) and for swap devices, it will configure reasonable defaults and set
+    the file system label and UUID based on the device name.</para>
 
     <para><filename>systemd-growfs</filename> knows very little about specific file
     systems and swap devices, and will instruct the kernel to grow the mounted
diff --git a/man/systemd-measure.xml b/man/systemd-measure.xml
new file mode 100644
index 0000000..7a10a6d
--- /dev/null
+++ b/man/systemd-measure.xml
@@ -0,0 +1,344 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+<refentry id="systemd-measure" xmlns:xi="http://www.w3.org/2001/XInclude" conditional='HAVE_GNU_EFI'>
+
+  <refentryinfo>
+    <title>systemd-measure</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-measure</refentrytitle>
+    <manvolnum>1</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-measure</refname>
+    <refpurpose>Pre-calculate and sign expected TPM2 PCR values for booted unified kernel images</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>/usr/lib/systemd/systemd-measure <arg choice="opt" rep="repeat">OPTIONS</arg></command>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para>Note: this command is experimental for now. While it is likely to become a regular component of
+    systemd, it might still change in behaviour and interface.</para>
+
+    <para><command>systemd-measure</command> is a tool that may be used to pre-calculate and sign the
+    expected TPM2 PCR 11 values that should be seen when a unified Linux kernel image based on
+    <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry> is
+    booted up. It accepts paths to the ELF kernel image file, initrd image file, devicetree file, kernel
+    command line file,
+    <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> file, boot
+    splash file, and TPM2 PCR PEM public key file that make up the unified kernel image, and determines the
+    PCR values expected to be in place after booting the image. Calculation starts with a zero-initialized
+    PCR 11, and is executed in a fashion compatible with what <filename>systemd-stub</filename> does at
+    boot. The result may optionally be signed cryptographically, to allow TPM2 policies that can only be
+    unlocked if a certain set of kernels is booted, for which such a PCR signature can be provided.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Commands</title>
+
+    <para>The following commands are understood:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><command>status</command></term>
+
+        <listitem><para>This is the default command if none is specified. This queries the local system's
+        TPM2 PCR 11+12+13 values and displays them. The data is written in a similar format as the
+        <command>calculate</command> command below, and may be used to quickly compare expectation with
+        reality.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>calculate</command></term>
+
+        <listitem><para>Pre-calculate the expected values seen in PCR register 11 after boot-up of a unified
+        kernel image consisting of the components specified with <option>--linux=</option>,
+        <option>--osrel=</option>, <option>--cmdline=</option>, <option>--initrd=</option>,
+        <option>--splash=</option>, <option>--dtb=</option>, <option>--pcrpkey=</option> see below. Only
+        <option>--linux=</option> is mandatory. (Alternatively, specify <option>--current</option> to use the
+        current values of PCR register 11 instead.)</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>sign</command></term>
+
+        <listitem><para>As with the <command>calculate</command> command, pre-calculate the expected value
+        seen in TPM2 PCR register 11 after boot-up of a unified kernel image. Then, cryptographically sign
+        the resulting values with the private/public key pair (RSA) configured via
+        <option>--private-key=</option> and <option>--public-key=</option>. This will write a JSON object to
+        standard output that contains signatures for all specified PCR banks (see the
+        <option>--pcr-bank=</option> option below), which may be used to unlock encrypted credentials (see
+        <citerefentry><refentrytitle>systemd-creds</refentrytitle><manvolnum>1</manvolnum></citerefentry>) or
+        LUKS volumes (see
+        <citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>).
+        This allows binding secrets to a set of kernels for which such PCR 11 signatures can be
+        provided.</para>
+
+        <para>Note that a TPM2 device must be available for this signing to take place, even though the
+        result is not tied to any TPM2 device or its state.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <para>The following options are understood:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>--linux=<replaceable>PATH</replaceable></option></term>
+        <term><option>--osrel=<replaceable>PATH</replaceable></option></term>
+        <term><option>--cmdline=<replaceable>PATH</replaceable></option></term>
+        <term><option>--initrd=<replaceable>PATH</replaceable></option></term>
+        <term><option>--splash=<replaceable>PATH</replaceable></option></term>
+        <term><option>--dtb=<replaceable>PATH</replaceable></option></term>
+        <term><option>--pcrpkey=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>When used with the <command>calculate</command> or <command>sign</command> verb,
+        configures the files to read the unified kernel image components from. Each option corresponds with
+        the equally named section in the unified kernel PE file. The <option>--linux=</option> switch expects
+        the path to the ELF kernel file that the unified PE kernel will wrap. All switches except
+        <option>--linux=</option> are optional. Each option may be used at most once.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--current</option></term>
+        <listitem><para>When used with the <command>calculate</command> or <command>sign</command> verb,
+        takes the PCR 11 values currently in effect for the system (which should typically reflect the hashes
+        of the currently booted kernel). This can be used in place of <option>--linux=</option> and the other
+        switches listed above.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--bank=<replaceable>DIGEST</replaceable></option></term>
+
+        <listitem><para>Controls the PCR banks to pre-calculate the PCR values for – in case
+        <command>calculate</command> or <command>sign</command> is invoked –, or the banks to show in the
+        <command>status</command> output. May be used more then once to specify multiple banks. If not
+        specified, defaults to the four banks <literal>sha1</literal>, <literal>sha256</literal>,
+        <literal>sha384</literal>, <literal>sha512</literal>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--private-key=<replaceable>PATH</replaceable></option></term>
+        <term><option>--public-key=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>These switches take paths to a pair of PEM encoded RSA key files, for use with
+        the <command>sign</command> command.</para>
+
+        <para>Note the difference between the <option>--pcrpkey=</option> and <option>--public-key=</option>
+        switches. The former selects the data to include in the <literal>.pcrpkey</literal> PE section of the
+        unified kernel image, the latter picks the public key of the key pair used to sign the resulting PCR
+        11 values. The former is the key that the booted system will likely use to lock disk and credential
+        encryption to, the latter is the key used for unlocking such resources again. Hence, typically the
+        same PEM key should be supplied in both cases.</para>
+
+        <para>If the <option>--public-key=</option> is not specified but <option>--private-key=</option> is
+        specified the public key is automatically derived from the private key.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tpm2-device=</option><replaceable>PATH</replaceable></term>
+
+        <listitem><para>Controls which TPM2 device to use. Expects a device node path referring to the TPM2
+        chip (e.g. <filename>/dev/tpmrm0</filename>). Alternatively the special value <literal>auto</literal>
+        may be specified, in order to automatically determine the device node of a suitable TPM2 device (of
+        which there must be exactly one). The special value <literal>list</literal> may be used to enumerate
+        all suitable TPM2 devices currently discovered.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--phase=</option><replaceable>PHASE</replaceable></term>
+
+        <listitem><para>Controls which boot phases to calculate expected PCR 11 values for. This takes a
+        series of colon-separated strings that encode boot "paths" for entering a specific phase of the boot
+        process. Each of the specified strings is measured by the
+        <filename>systemd-pcrphase-initrd.service</filename> and
+        <citerefentry><refentrytitle>systemd-pcrphase.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        into PCR 11 during different milestones of the boot process. This switch may be specified multiple
+        times to calculate PCR values for multiple boot phases at once. If not used defaults to
+        <literal>enter-initrd</literal>, <literal>enter-initrd:leave-initrd</literal>,
+        <literal>enter-initrd:leave-initrd:sysinit</literal>,
+        <literal>enter-initrd:leave-initrd:sysinit:ready</literal>, i.e. calculates expected PCR values for
+        the boot phase in the initrd, during early boot, during later boot, and during system runtime, but
+        excluding the phases before the initrd or when shutting down. This setting is honoured both by
+        <command>calculate</command> and <command>sign</command>. When used with the latter it's particularly
+        useful for generating PCR signatures that can only be used for unlocking resources during specific
+        parts of the boot process.</para>
+
+        <para>For further details about PCR boot phases, see
+        <citerefentry><refentrytitle>systemd-pcrphase.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--append=</option><replaceable>PATH</replaceable></term>
+
+        <listitem><para>When generating a PCR JSON signature (via the <command>sign</command> command),
+        combine it with a previously generated PCR JSON signature, and output it as one. The specified path
+        must refer to a regular file that contains a valid JSON PCR signature object. The specified file is
+        not modified. It will be read first, then the newly generated signature appended to it, and the
+        resulting object is written to standard output. Use this to generate a single JSON object consisting
+        from signatures made with a number of signing keys (for example, to have one key per boot phase). The
+        command will suppress duplicates: if a specific signature is already included in a JSON signature
+        object it is not added a second time.</para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="json" />
+      <xi:include href="standard-options.xml" xpointer="no-pager" />
+      <xi:include href="standard-options.xml" xpointer="help" />
+      <xi:include href="standard-options.xml" xpointer="version" />
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>Generate a unified kernel image, and calculate the expected TPM PCR 11 value</title>
+
+      <programlisting># ukify --output foo.efi \
+     --os-release @os-release.txt \
+     --cmdline @cmdline.txt \
+     --splash splash.bmp \
+     --devicetree devicetree.dtb \
+     --measure \
+     vmlinux initrd.cpio
+11:sha1=d775a7b4482450ac77e03ee19bda90bd792d6ec7
+11:sha256=bc6170f9ce28eb051ab465cd62be8cf63985276766cf9faf527ffefb66f45651
+11:sha384=1cf67dff4757e61e5a73d2a21a6694d668629bbc3761747d493f7f49ad720be02fd07263e1f93061243aec599d1ee4b4
+11:sha512=8e79acd3ddbbc8282e98091849c3530f996303c8ac8e87a3b2378b71c8b3a6e86d5c4f41ecea9e1517090c3e8ec0c714821032038f525f744960bcd082d937da
+</programlisting>
+    </example>
+
+    <example>
+      <title>Generate a private/public key pair, and a unified kernel image, and a TPM PCR 11 signature for
+      it, and embed the signature and the public key in the image</title>
+
+      <programlisting># openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out tpm2-pcr-private.pem
+# openssl rsa -pubout -in tpm2-pcr-private.pem -out tpm2-pcr-public.pem
+# systemd-measure sign \
+     --linux=vmlinux \
+     --osrel=os-release.txt \
+     --cmdline=cmdline.txt \
+     --initrd=initrd.cpio \
+     --splash=splash.bmp \
+     --dtb=devicetree.dtb \
+     --pcrpkey=tpm2-pcr-public.pem \
+     --bank=sha1 \
+     --bank=sha256 \
+     --private-key=tpm2-pcr-private.pem \
+     --public-key=tpm2-pcr-public.pem >tpm2-pcr-signature.json
+# ukify --output foo.efi \
+     --os-release @os-release.txt \
+     --cmdline @cmdline.txt \
+     --splash splash.bmp \
+     --devicetree devicetree.dtb \
+     --pcr-private-key tpm2-pcr-private.pem \
+     --pcr-public-key tpm2-pcr-public.pem \
+     --pcr-banks sha1,sha256 \
+     vmlinux initrd.cpio</programlisting>
+
+     <para>Later on, enroll the signed PCR policy on a LUKS volume:</para>
+
+     <programlisting># systemd-cryptenroll --tpm2-device=auto --tpm2-public-key=tpm2-pcr-public.pem --tpm2-signature=tpm2-pcr-signature.json /dev/sda5</programlisting>
+
+     <para>And then unlock the device with the signature:</para>
+
+     <programlisting># /usr/lib/systemd/systemd-cryptsetup attach myvolume /dev/sda5 - tpm2-device=auto,tpm2-signature=/path/to/tpm2-pcr-signature.json</programlisting>
+
+     <para>Note that when the generated unified kernel image <filename>foo.efi</filename> is booted the
+     signature and public key files will be placed at locations <command>systemd-cryptenroll</command> and
+     <command>systemd-cryptsetup</command> will look for anyway, and thus these paths do not actually need to
+     be specified.</para>
+    </example>
+
+    <example>
+      <title>Introduce a second public key, signing the same kernel PCR measurements, but only for the initrd boot phase</title>
+
+      <para>This example extends the previous one, but we now introduce a second signing key that is only
+      used to sign PCR policies restricted to the initrd boot phase. This can be used to lock down root
+      volumes in a way that they can only be unlocked before the transition to the host system. Thus we have
+      two classes of secrets or credentials: one that can be unlocked during the entire runtime, and the
+      other that can only be used in the initrd.</para>
+
+      <programlisting># openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out tpm2-pcr-private.pem
+# openssl rsa -pubout -in tpm2-pcr-private.pem -out tpm2-pcr-public.pem
+# systemd-measure sign \
+     --linux=vmlinux \
+     --osrel=os-release.txt \
+     --cmdline=cmdline.txt \
+     --initrd=initrd.cpio \
+     --splash=splash.bmp \
+     --dtb=devicetree.dtb \
+     --pcrpkey=tpm2-pcr-public.pem \
+     --bank=sha1 \
+     --bank=sha256 \
+     --private-key=tpm2-pcr-private.pem \
+     --public-key=tpm2-pcr-public.pem >tpm2-pcr-signature.json.tmp
+# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out tpm2-pcr-initrd-private.pem
+# openssl rsa -pubout -in tpm2-pcr-initrd-private.pem -out tpm2-pcr-initrd-public.pem
+# systemd-measure sign \
+     --linux=vmlinux \
+     --osrel=os-release.txt \
+     --cmdline=cmdline.txt \
+     --initrd=initrd.cpio \
+     --splash=splash.bmp \
+     --dtb=devicetree.dtb \
+     --pcrpkey=tpm2-pcr-public.pem \
+     --bank=sha1 \
+     --bank=sha256 \
+     --private-key=tpm2-pcr-initrd-private.pem \
+     --public-key=tpm2-pcr-initrd-public.pem \
+     --phase=enter-initrd \
+     --append=tpm2-pcr-signature.json.tmp >tpm2-pcr-signature.json
+# ukify --output foo.efi \
+     --os-release @os-release.txt \
+     --cmdline @cmdline.txt \
+     --splash splash.bmp \
+     --devicetree devicetree.dtb \
+     --pcr-private-key tpm2-pcr-initrd-private.pem \
+     --pcr-public-key tpm2-pcr-initrd-public.pem \
+     --section .pcrsig=@tpm2-pcr-signature.json \
+     --section .pcrpkey=@tpm2-pcr-public.pem \
+     vmlinux initrd.cpio</programlisting>
+    </example>
+
+    <para>Note that in this example the <literal>.pcrpkey</literal> PE section contains the key covering all
+    boot phases. The <literal>.pcrpkey</literal> is used in the default policies of
+    <command>systemd-cryptenroll</command> and <command>systemd-creds</command>. To use the stricter
+    <filename>tpm-pcr-initrd-public.pem</filename>-bound policy, specify <option>--tpm2-public-key=</option>
+    on the command line of those tools.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Exit status</title>
+
+    <para>On success, 0 is returned, a non-zero failure code otherwise.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>ukify</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-creds</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-pcrphase.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+     </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-modules-load.service.xml b/man/systemd-modules-load.service.xml
index 0144650..6911948 100644
--- a/man/systemd-modules-load.service.xml
+++ b/man/systemd-modules-load.service.xml
@@ -52,10 +52,8 @@
         <term><varname>modules_load=</varname></term>
         <term><varname>rd.modules_load=</varname></term>
 
-        <listitem><para>Takes a comma-separated list of kernel modules
-        to statically load during early boot. The option prefixed with
-        <literal>rd.</literal> is read by the initial RAM disk
-        only.</para></listitem>
+        <listitem><para>Takes a comma-separated list of kernel modules to statically load during early boot.
+        The option prefixed with <literal>rd.</literal> is read in the initrd only.</para></listitem>
       </varlistentry>
 
     </variablelist>
diff --git a/man/systemd-network-generator.service.xml b/man/systemd-network-generator.service.xml
index 99a0321..13f0936 100644
--- a/man/systemd-network-generator.service.xml
+++ b/man/systemd-network-generator.service.xml
@@ -41,10 +41,17 @@
     </para>
 
     <para>Files are generated in <filename>/run/systemd/network/</filename>.</para>
+
+    <para>Note: despite the name, this generator executes as a normal systemd service and is
+    <emphasis>not</emphasis> an implementation of the
+    <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    concept.</para>
   </refsect1>
 
-  <refsect1><title>Kernel command line options</title>
-  <para>This tool understands the following options:</para>
+  <refsect1>
+    <title>Kernel command line options</title>
+
+    <para>This tool understands the following options:</para>
 
     <variablelist class='kernel-commandline-options'>
       <varlistentry>
@@ -59,6 +66,7 @@
 
       <varlistentry>
         <term><varname>ifname=</varname></term>
+        <term><varname>net.ifname-policy=</varname></term>
         <listitem>
           <para>— translated into
           <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry> files.</para>
@@ -87,7 +95,9 @@
     </variablelist>
 
     <para>See
-    <citerefentry project='man-pages'><refentrytitle>dracut.kernel</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    <citerefentry project='man-pages'><refentrytitle>dracut.cmdline</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    and
+    <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     for option syntax and details.</para>
   </refsect1>
 
diff --git a/man/systemd-networkd-wait-online.service.xml b/man/systemd-networkd-wait-online.service.xml
index 31aa022..a3a70db 100644
--- a/man/systemd-networkd-wait-online.service.xml
+++ b/man/systemd-networkd-wait-online.service.xml
@@ -18,12 +18,14 @@
 
   <refnamediv>
     <refname>systemd-networkd-wait-online.service</refname>
+    <refname>systemd-networkd-wait-online@.service</refname>
     <refname>systemd-networkd-wait-online</refname>
     <refpurpose>Wait for network to come online</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <para><filename>systemd-networkd-wait-online.service</filename></para>
+    <para><filename>systemd-networkd-wait-online@.service</filename></para>
     <para><filename>/usr/lib/systemd/systemd-networkd-wait-online</filename></para>
   </refsynopsisdiv>
 
@@ -38,6 +40,17 @@
     to be fully configured or failed, and for at least one link to be online. Here, online means that
     the link's operational state is equal or higher than <literal>degraded</literal>. The threshold
     can be configured by <option>--operational-state=</option> option.</para>
+
+    <para>The service <filename>systemd-networkd-wait-online.service</filename> invokes
+    <command>systemd-networkd-wait-online</command> without any options. Thus, it waits for all managed
+    interfaces to be configured or failed, and for at least one to be online.</para>
+
+    <para>The service <filename>systemd-networkd-wait-online@.service</filename> takes an interface
+    name, and invokes <command>systemd-networkd-wait-online</command> with <option>-i</option> and the
+    specified interface name. Thus, wait for the specified interface to be configured and online. For
+    example, <filename>systemd-networkd-wait-online@eth0.service</filename> waits for
+    <filename>eth0</filename> to be configured by <command>systemd-networkd</command> and online.
+    </para>
   </refsect1>
 
   <refsect1>
@@ -92,8 +105,12 @@
         <listitem><para>Waiting for an IPv4 address of each network interface to be configured. If this
         option is specified with <option>--any</option>, then
         <command>systemd-networkd-wait-online</command> exits with success when at least one interface
-        becomes online and has an IPv4 address. The option is applied only for the operational state
-        <literal>degraded</literal> or above. If neither <option>--ipv4</option> nor
+        becomes online and has an IPv4 address. If the required minimum operational state is
+        below <literal>routable</literal>, then each link (or at least one link with
+        <option>--any</option>) must have an IPv4 link-local or routable address. If the required
+        minimum operational state is <literal>routable</literal>, then each link must have an IPv4
+        routable address.</para>
+        <para>If neither <option>--ipv4</option> nor
         <option>--ipv6</option> is specified, then the value from
         <varname>RequiredFamilyForOnline=</varname> in the corresponding <filename>.network</filename>
         file is used if present.</para></listitem>
@@ -106,8 +123,12 @@
         <listitem><para>Waiting for an IPv6 address of each network interface to be configured. If this
         option is specified with <option>--any</option>, then
         <command>systemd-networkd-wait-online</command> exits with success when at least one interface
-        becomes online and has an IPv6 address. The option is applied only for the operational state
-        <literal>degraded</literal> or above. If neither <option>--ipv4</option> nor
+        becomes online and has an IPv6 address. If the required minimum operational state is
+        below <literal>routable</literal>, then each link (or at least one link with
+        <option>--any</option>) must have an IPv6 link-local or routable address. If the required
+        minimum operational state is <literal>routable</literal>, then each link must have an IPv6
+        routable address.</para>
+        <para>If neither <option>--ipv4</option> nor
         <option>--ipv6</option> is specified, then the value from
         <varname>RequiredFamilyForOnline=</varname> in the corresponding <filename>.network</filename>
         file is used if present.</para></listitem>
diff --git a/man/systemd-networkd.service.xml b/man/systemd-networkd.service.xml
index df6e180..12cd4c3 100644
--- a/man/systemd-networkd.service.xml
+++ b/man/systemd-networkd.service.xml
@@ -54,13 +54,11 @@
     <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
     </para>
 
-    <para>When <filename>systemd-networkd</filename> exits, it generally leaves
-    existing network devices and configuration intact. This makes it possible to
-    transition from the initramfs and to restart the service without breaking
-    connectivity. This also means that when configuration is updated and
-    <filename>systemd-networkd</filename> is restarted, netdev interfaces for
-    which configuration was removed will not be dropped, and may need to be
-    cleaned up manually.</para>
+    <para>When <filename>systemd-networkd</filename> exits, it generally leaves existing network devices and
+    configuration intact. This makes it possible to transition from the initrd and to restart the service
+    without breaking connectivity. This also means that when configuration is updated and
+    <filename>systemd-networkd</filename> is restarted, netdev interfaces for which configuration was removed
+    will not be dropped, and may need to be cleaned up manually.</para>
 
     <para><command>systemd-networkd</command> may be introspected and controlled at runtime using
     <citerefentry><refentrytitle>networkctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml
index 3fed92e..dd76cc0 100644
--- a/man/systemd-notify.xml
+++ b/man/systemd-notify.xml
@@ -30,43 +30,47 @@
   <refsect1>
     <title>Description</title>
 
-    <para><command>systemd-notify</command> may be called by daemon
-    scripts to notify the init system about status changes. It can be
-    used to send arbitrary information, encoded in an
-    environment-block-like list of strings. Most importantly, it can be
-    used for start-up completion notification.</para>
+    <para><command>systemd-notify</command> may be called by service scripts to notify the invoking service
+    manager about status changes. It can be used to send arbitrary information, encoded in an
+    environment-block-like list of strings. Most importantly, it can be used for start-up completion
+    notification.</para>
 
-    <para>This is mostly just a wrapper around
-    <function>sd_notify()</function> and makes this functionality
+    <para>This is mostly just a wrapper around <function>sd_notify()</function> and makes this functionality
     available to shell scripts. For details see
     <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
     </para>
 
-    <para>The command line may carry a list of environment variables
-    to send as part of the status update.</para>
+    <para>The command line may carry a list of environment variables to send as part of the status
+    update.</para>
 
     <para>Note that systemd will refuse reception of status updates from this command unless
-    <varname>NotifyAccess=</varname> is set for the service unit this command is called from.</para>
+    <varname>NotifyAccess=</varname> is appropriately set for the service unit this command is called
+    from. See
+    <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
+    details.</para>
 
-    <para>Note that <function>sd_notify()</function> notifications may be attributed to units correctly only if either
-    the sending process is still around at the time PID 1 processes the message, or if the sending process is
-    explicitly runtime-tracked by the service manager. The latter is the case if the service manager originally forked
-    off the process, i.e. on all processes that match <varname>NotifyAccess=</varname><option>main</option> or
-    <varname>NotifyAccess=</varname><option>exec</option>. Conversely, if an auxiliary process of the unit sends an
-    <function>sd_notify()</function> message and immediately exits, the service manager might not be able to properly
-    attribute the message to the unit, and thus will ignore it, even if <varname>NotifyAccess=</varname><option>all
-    </option> is set for it. When <option>--no-block</option> is used, all synchronization for reception of notifications
-    is disabled, and hence the aforementioned race may occur if the invoking process is not the service manager or spawned
-    by the service manager.</para>
+    <para>Note that <function>sd_notify()</function> notifications may be attributed to units correctly only
+    if either the sending process is still around at the time the service manager processes the message, or
+    if the sending process is explicitly runtime-tracked by the service manager. The latter is the case if
+    the service manager originally forked off the process, i.e. on all processes that match
+    <varname>NotifyAccess=</varname><option>main</option> or
+    <varname>NotifyAccess=</varname><option>exec</option>. Conversely, if an auxiliary process of the unit
+    sends an <function>sd_notify()</function> message and immediately exits, the service manager might not be
+    able to properly attribute the message to the unit, and thus will ignore it, even if
+    <varname>NotifyAccess=</varname><option>all</option> is set for it. To address this
+    <command>systemd-notify</command> will wait until the notification message has been processed by the
+    service manager. When <option>--no-block</option> is used, this synchronization for reception of
+    notifications is disabled, and hence the aforementioned race may occur if the invoking process is not the
+    service manager or spawned by the service manager.</para>
 
-    <para>Hence, <command>systemd-notify</command> will first attempt to invoke <function>sd_notify()</function>
-    pretending to have the PID of the invoking process. This will only succeed when invoked with sufficient privileges.
-    On failure, it will then fall back to invoking it under its own PID. This behaviour is useful in order that when
-    the tool is invoked from a shell script the shell process — and not the <command>systemd-notify</command> process
-    — appears as sender of the message, which in turn is helpful if the shell process is the main process of a service,
-    due to the limitations of <varname>NotifyAccess=</varname><option>all</option>. Use the <option>--pid=</option>
-    switch to tweak this behaviour.</para>
-
+    <para><command>systemd-notify</command> will first attempt to invoke <function>sd_notify()</function>
+    pretending to have the PID of the parent process of <command>systemd-notify</command> (i.e. the invoking
+    process). This will only succeed when invoked with sufficient privileges.  On failure, it will then fall
+    back to invoking it under its own PID. This behaviour is useful in order that when the tool is invoked
+    from a shell script the shell process — and not the <command>systemd-notify</command> process — appears
+    as sender of the message, which in turn is helpful if the shell process is the main process of a service,
+    due to the limitations of <varname>NotifyAccess=</varname><option>all</option>. Use the
+    <option>--pid=</option> switch to tweak this behaviour.</para>
   </refsect1>
 
   <refsect1>
@@ -78,24 +82,52 @@
       <varlistentry>
         <term><option>--ready</option></term>
 
-        <listitem><para>Inform the init system about service start-up
-        completion. This is equivalent to <command>systemd-notify
-        READY=1</command>. For details about the semantics of this
-        option see
+        <listitem><para>Inform the invoking service manager about service start-up or configuration reload
+        completion. This is equivalent to <command>systemd-notify READY=1</command>. For details about the
+        semantics of this option see
+        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--reloading</option></term>
+
+        <listitem><para>Inform the invoking service manager about the beginning of a configuration reload
+        cycle. This is equivalent to <command>systemd-notify RELOADING=1</command> (but implicitly also sets
+        a <varname>MONOTONIC_USEC=</varname> field as required for <varname>Type=notify-reload</varname>
+        services, see
+        <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+        for details). For details about the semantics of this option see
+        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--stopping</option></term>
+
+        <listitem><para>Inform the invoking service manager about the beginning of the shutdown phase of the
+        service. This is equivalent to <command>systemd-notify STOPPING=1</command>. For details about the
+        semantics of this option see
         <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>--pid=</option></term>
 
-        <listitem><para>Inform the service manager about the main PID of the daemon. Takes a PID as
+        <listitem><para>Inform the service manager about the main PID of the service. Takes a PID as
         argument. If the argument is specified as <literal>auto</literal> or omitted, the PID of the process
         that invoked <command>systemd-notify</command> is used, except if that's the service manager. If the
         argument is specified as <literal>self</literal>, the PID of the <command>systemd-notify</command>
         command itself is used, and if <literal>parent</literal> is specified the calling process' PID is
-        used — even if it is the service manager. This is equivalent to <command>systemd-notify
+        used — even if it is the service manager. The latter is equivalent to <command>systemd-notify
         MAINPID=$PID</command>. For details about the semantics of this option see
-        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
+        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+        <para>If this switch is used in an <command>systemd-notify</command> invocation from a process that
+        shall become the new main process of a service — and which is not the process forked off by the
+        service manager (or the current main process) —, then it is essential to set
+        <varname>NotifyAccess=all</varname> in the service unit file, or otherwise the notification will be
+        ignored for security reasons. See
+        <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        for details.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -110,27 +142,26 @@
       <varlistentry>
         <term><option>--status=</option></term>
 
-        <listitem><para>Send a free-form status string for the daemon
-        to the init systemd. This option takes the status string as
-        argument. This is equivalent to <command>systemd-notify
-        STATUS=…</command>. For details about the semantics of this
-        option see
-        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
+        <listitem><para>Send a free-form human readable status string for the daemon to the service
+        manager. This option takes the status string as argument. This is equivalent to
+        <command>systemd-notify STATUS=…</command>. For details about the semantics of this option see
+        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>. This
+        information is shown in
+        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+        <command>status</command> output, among other places.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><option>--booted</option></term>
 
-        <listitem><para>Returns 0 if the system was booted up with
-        systemd, non-zero otherwise. If this option is passed, no
-        message is sent. This option is hence unrelated to the other
-        options. For details about the semantics of this option, see
+        <listitem><para>Returns 0 if the system was booted up with systemd, non-zero otherwise. If this
+        option is passed, no message is sent. This option is hence unrelated to the other options. For
+        details about the semantics of this option, see
         <citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>. An
         alternate way to check for this state is to call
-        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-        with the <command>is-system-running</command> command. It will
-        return <literal>offline</literal> if the system was not booted
-        with systemd.  </para></listitem>
+        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> with
+        the <command>is-system-running</command> command. It will return <literal>offline</literal> if the
+        system was not booted with systemd.  </para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -162,17 +193,16 @@
     <example>
       <title>Start-up Notification and Status Updates</title>
 
-      <para>A simple shell daemon that sends start-up notifications
-      after having set up its communication channel. During runtime it
-      sends further status updates to the init system:</para>
+      <para>A simple shell daemon that sends start-up notifications after having set up its communication
+      channel. During runtime it sends further status updates to the init system:</para>
 
-      <programlisting>#!/bin/bash
+      <programlisting>#!/bin/sh
 
 mkfifo /tmp/waldo
 systemd-notify --ready --status="Waiting for data…"
 
 while : ; do
-        read a &lt; /tmp/waldo
+        read -r a &lt; /tmp/waldo
         systemd-notify --status="Processing $a"
 
         # Do something with $a …
@@ -188,9 +218,9 @@
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>
     </para>
   </refsect1>
-
 </refentry>
diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
index b22aba9..e2c7516 100644
--- a/man/systemd-nspawn.xml
+++ b/man/systemd-nspawn.xml
@@ -74,7 +74,7 @@
 
     <para>As a safety check <command>systemd-nspawn</command> will verify the existence of
     <filename>/usr/lib/os-release</filename> or <filename>/etc/os-release</filename> in the container tree before
-    starting the container (see
+    booting a container (see
     <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>).  It might be
     necessary to add this file to the container tree manually if the OS of the container is too old to contain this
     file out-of-the-box.</para>
@@ -84,8 +84,8 @@
     template unit file <filename>systemd-nspawn@.service</filename> is provided to make this easy, taking the container
     name as instance identifier. Note that different default options apply when <command>systemd-nspawn</command> is
     invoked by the template unit file than interactively on the command line. Most importantly the template unit file
-    makes use of the <option>--boot</option> which is not the default in case <command>systemd-nspawn</command> is
-    invoked from the interactive command line. Further differences with the defaults are documented along with the
+    makes use of the <option>--boot</option> option which is not the default in case <command>systemd-nspawn</command>
+    is invoked from the interactive command line. Further differences with the defaults are documented along with the
     various supported options below.</para>
 
     <para>The <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> tool may
@@ -105,7 +105,7 @@
 
     <para>Note that running two <command>systemd-nspawn</command> containers from the same directory tree will not make
     processes in them see each other. The PID namespace separation of the two containers is complete and the containers
-    will share very few runtime objects except for the underlying file system. Use
+    will share very few runtime objects except for the underlying file system. Rather use
     <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
     <command>login</command> or <command>shell</command> commands to request an additional login session in a running
     container.</para>
@@ -121,7 +121,7 @@
   <refsect1>
     <title>Options</title>
 
-    <para>If option <option>-b</option> is specified, the arguments
+    <para>If option <option>--boot</option> is specified, the arguments
     are used as arguments for the init program. Otherwise,
     <replaceable>COMMAND</replaceable> specifies the program to launch
     in the container, and the remaining arguments are used as
@@ -288,7 +288,7 @@
           a server data partition which are mounted to the appropriate
           places in the container. All these partitions must be
           identified by the partition types defined by the <ulink
-          url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable
+          url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable
           Partitions Specification</ulink>.</para></listitem>
 
           <listitem><para>No partition table, and a single file system spanning the whole image.</para></listitem>
@@ -425,7 +425,7 @@
         <term><option>--verity-data=</option></term>
 
         <listitem><para>Takes the path to a data integrity (dm-verity) file. This option enables data integrity checks
-        using dm-verity, if a root-hash is passed and if the used image itself does not contains the integrity data.
+        using dm-verity, if a root-hash is passed and if the used image itself does not contain the integrity data.
         The integrity data must be matched by the root hash. If this option is not specified, but a file with the
         <filename>.verity</filename> suffix is found next to the image file, bearing otherwise the same name (except if
         the image has the <filename>.raw</filename> suffix, in which case the verity data file must not have it in its name),
@@ -443,9 +443,9 @@
         in the container's file system namespace.</para>
 
         <para>This is for containers which have several bootable directories in them; for example, several
-        <ulink url="https://ostree.readthedocs.io/en/latest/">OSTree</ulink> deployments. It emulates the behavior of
-        the boot loader and initial RAM disk which normally select which directory to mount as the root and start the
-        container's PID 1 in.</para></listitem>
+        <ulink url="https://ostree.readthedocs.io/en/latest/">OSTree</ulink> deployments. It emulates the
+        behavior of the boot loader and the initrd which normally select which directory to mount as the root
+        and start the container's PID 1 in.</para></listitem>
       </varlistentry>
     </variablelist>
 
@@ -527,14 +527,14 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>-E <replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
-        <term><option>--setenv=<replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
+        <term><option>-E <replaceable>NAME</replaceable>[=<replaceable>VALUE</replaceable>]</option></term>
+        <term><option>--setenv=<replaceable>NAME</replaceable>[=<replaceable>VALUE</replaceable>]</option></term>
 
-        <listitem><para>Specifies an environment variable assignment
-        to pass to the init process in the container, in the format
-        <literal>NAME=VALUE</literal>. This may be used to override
-        the default variables or to set additional variables. This
-        parameter may be used more than once.</para></listitem>
+        <listitem><para>Specifies an environment variable to pass to the init process in the container. This
+        may be used to override the default variables or to set additional variables. It may be used more
+        than once to set multiple variables. When <literal>=</literal> and <replaceable>VALUE</replaceable>
+        are omitted, the value of the variable with the same name in the program environment will be used.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -570,6 +570,24 @@
         before sending its own to systemd. For more details about notifications
         see <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><option>--suppress-sync=</option></term>
+
+        <listitem><para>Expects a boolean argument. If true, turns off any form of on-disk file system
+        synchronization for the container payload. This means all system calls such as <citerefentry
+        project='man-pages'><refentrytitle>sync</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
+        <function>fsync()</function>, <function>syncfs()</function>, … will execute no operation, and the
+        <constant>O_SYNC</constant>/<constant>O_DSYNC</constant> flags to <citerefentry
+        project='man-pages'><refentrytitle>open</refentrytitle><manvolnum>2</manvolnum></citerefentry> and
+        related calls will be made unavailable. This is potentially dangerous, as assumed data integrity
+        guarantees to the container payload are not actually enforced (i.e. data assumed to have been written
+        to disk might be lost if the system is shut down abnormally). However, this can dramatically improve
+        container runtime performance – as long as these guarantees are not required or desirable, for
+        example because any data written by the container is of temporary, redundant nature, or just an
+        intermediary artifact that will be further processed and finalized by a later step in a
+        pipeline. Defaults to false.</para></listitem>
+      </varlistentry>
     </variablelist>
 
     </refsect2><refsect2>
@@ -642,7 +660,7 @@
         <listitem><para>Set a unit property on the scope unit to register for the machine. This applies only if the
         machine is run in its own scope unit, i.e. if <option>--keep-unit</option> isn't used. Takes unit property
         assignments in the same format as <command>systemctl set-property</command>. This is useful to set memory
-        limits and similar for container.</para>
+        limits and similar for the container.</para>
         </listitem>
       </varlistentry>
 
@@ -719,9 +737,9 @@
           the UID/GID range is automatically chosen. As first step, the file owner UID/GID of the root
           directory of the container's directory tree is read, and it is checked that no other container is
           currently using it. If this check is successful, the UID/GID range determined this way is used,
-          similar to the behavior if <literal>yes</literal> is specified. If the check is not successful (and
-          thus the UID/GID range indicated in the root directory's file owner is already used elsewhere) a
-          new – currently unused – UID/GID range of 65536 UIDs/GIDs is randomly chosen between the host
+          similarly to the behavior if <literal>yes</literal> is specified. If the check is not successful
+          (and thus the UID/GID range indicated in the root directory's file owner is already used elsewhere)
+          a new – currently unused – UID/GID range of 65536 UIDs/GIDs is randomly chosen between the host
           UID/GIDs of 524288 and 1878982656, always starting at a multiple of 65536, and, if possible,
           consistently hashed from the machine name. This setting implies
           <option>--private-users-ownership=auto</option> (see below), which possibly has the effect that the
@@ -1217,8 +1235,8 @@
 
         <para>If set to <literal>copy-host</literal>, the <filename>/etc/resolv.conf</filename> file from the
         host is copied into the container, unless the file exists already and is not a regular file (e.g. a
-        symlink). Similar, if <literal>replace-host</literal> is used the file is copied, replacing any
-        existing inode, including symlinks. Similar, if <literal>bind-host</literal> is used, the file is
+        symlink). Similarly, if <literal>replace-host</literal> is used the file is copied, replacing any
+        existing inode, including symlinks. Similarly, if <literal>bind-host</literal> is used, the file is
         bind mounted from the host into the container.</para>
 
         <para>If set to <literal>copy-static</literal>, <literal>replace-static</literal> or
@@ -1339,17 +1357,43 @@
         source path is taken relative to the image's root directory. This permits setting up bind mounts within the
         container image. The source path may be specified as empty string, in which case a temporary directory below
         the host's <filename>/var/tmp/</filename> directory is used. It is automatically removed when the container is
-        shut down. Mount options are comma-separated and currently, only <option>rbind</option> and
-        <option>norbind</option> are allowed, controlling whether to create a recursive or a regular bind
-        mount. Defaults to "rbind". Backslash escapes are interpreted, so <literal>\:</literal> may be used to embed
-        colons in either path.  This option may be specified multiple times for creating multiple independent bind
-        mount points. The <option>--bind-ro=</option> option creates read-only bind mounts.</para>
+        shut down. If the source path is not absolute, it is resolved relative to the current working directory.
+        The <option>--bind-ro=</option> option creates read-only bind mounts. Backslash escapes are interpreted,
+        so <literal>\:</literal> may be used to embed colons in either path. This option may be specified
+        multiple times for creating multiple independent bind mount points.</para>
+
+        <para>Mount options are comma-separated. <option>rbind</option> and <option>norbind</option> control whether
+        to create a recursive or a regular bind mount. Defaults to "rbind". <option>noidmap</option>,
+        <option>idmap</option>, and <option>rootidmap</option> control ID mapping.</para>
+
+        <para>Using <option>idmap</option> or <option>rootidmap</option> requires support by the source filesystem
+        for user/group ID mapped mounts. Defaults to "noidmap". With <option>x</option> being the container's UID range
+        offset, <option>y</option> being the length of the container's UID range, and <option>p</option> being the
+        owner UID of the bind mount source inode on the host:
+
+        <itemizedlist>
+          <listitem><para>If <option>noidmap</option> is used, any user <option>z</option> in the range
+          <option>0 … y</option> seen from inside of the container is mapped to <option>x + z</option> in the
+          <option>x … x + y</option> range on the host. Other host users are mapped to
+          <option>nobody</option> inside the container.</para></listitem>
+          <listitem><para>If <option>idmap</option> is used, any user <option>z</option> in the UID range
+          <option>0 … y</option> as seen from inside the container is mapped to the same <option>z</option>
+          in the same <option>0 … y</option> range on the host. All host users outside of that range are
+          mapped to <option>nobody</option> inside the container.</para></listitem>
+          <listitem><para>If <option>rootidmap</option> is used, the user <option>0</option> seen from inside
+          of the container is mapped to <option>p</option> on the host. All host users outside of that range
+          are mapped to <option>nobody</option> inside the container.</para></listitem>
+        </itemizedlist></para>
+
+        <para>Whichever ID mapping option is used, the same mapping will be used for users and groups IDs. If
+        <option>rootidmap</option> is used, the group owning the bind mounted directory will have no effect.</para>
 
         <para>Note that when this option is used in combination with <option>--private-users</option>, the resulting
         mount points will be owned by the <constant>nobody</constant> user. That's because the mount and its files and
         directories continue to be owned by the relevant host users and groups, which do not exist in the container,
         and thus show up under the wildcard UID 65534 (nobody). If such bind mounts are created, it is recommended to
-        make them read-only, using <option>--bind-ro=</option>.</para></listitem>
+        make them read-only, using <option>--bind-ro=</option>. Alternatively you can use the "idmap" mount option to
+        map the filesystem IDs.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1361,7 +1405,7 @@
 
         <orderedlist>
           <listitem><para>The user's home directory is bind mounted from the host into
-          <filename>/run/hosts/home/</filename>.</para></listitem>
+          <filename>/run/host/home/</filename>.</para></listitem>
 
           <listitem><para>An additional UID/GID mapping is added that maps the host user's UID/GID to a
           container UID/GID, allocated from the 60514…60577 range.</para></listitem>
@@ -1433,33 +1477,25 @@
         <term><option>--overlay=</option></term>
         <term><option>--overlay-ro=</option></term>
 
-        <listitem><para>Combine multiple directory trees into one
-        overlay file system and mount it into the container. Takes a
-        list of colon-separated paths to the directory trees to
-        combine and the destination mount point.</para>
+        <listitem><para>Combine multiple directory trees into one overlay file system and mount it into the
+        container. Takes a list of colon-separated paths to the directory trees to combine and the
+        destination mount point.</para>
 
-        <para>Backslash escapes are interpreted in the paths, so
-        <literal>\:</literal> may be used to embed colons in the paths.
+        <para>Backslash escapes are interpreted in the paths, so <literal>\:</literal> may be used to embed
+        colons in the paths.</para>
+
+        <para>If three or more paths are specified, then the last specified path is the destination mount
+        point in the container, all paths specified before refer to directory trees on the host and are
+        combined in the specified order into one overlay file system. The left-most path is hence the lowest
+        directory tree, the second-to-last path the highest directory tree in the stacking order. If
+        <option>--overlay-ro=</option> is used instead of <option>--overlay=</option>, a read-only overlay
+        file system is created. If a writable overlay file system is created, all changes made to it are
+        written to the highest directory tree in the stacking order, i.e. the second-to-last specified.
         </para>
 
-        <para>If three or more paths are specified, then the last
-        specified path is the destination mount point in the
-        container, all paths specified before refer to directory trees
-        on the host and are combined in the specified order into one
-        overlay file system. The left-most path is hence the lowest
-        directory tree, the second-to-last path the highest directory
-        tree in the stacking order. If <option>--overlay-ro=</option>
-        is used instead of <option>--overlay=</option>, a read-only
-        overlay file system is created. If a writable overlay file
-        system is created, all changes made to it are written to the
-        highest directory tree in the stacking order, i.e. the
-        second-to-last specified.</para>
-
-        <para>If only two paths are specified, then the second
-        specified path is used both as the top-level directory tree in
-        the stacking order as seen from the host, as well as the mount
-        point for the overlay file system in the container. At least
-        two paths have to be specified.</para>
+        <para>If only two paths are specified, then the second specified path is used both as the top-level
+        directory tree in the stacking order as seen from the host, as well as the mount point for the
+        overlay file system in the container. At least two paths have to be specified.</para>
 
         <para>The source paths may optionally be prefixed with <literal>+</literal> character. If so they are
         taken relative to the image's root directory. The uppermost source path may also be specified as an
@@ -1467,24 +1503,20 @@
         used. The directory is removed automatically when the container is shut down. This behaviour is
         useful in order to make read-only container directories writable while the container is running. For
         example, use <literal>--overlay=+/var::/var</literal> in order to automatically overlay a writable
-        temporary directory on a read-only <filename>/var/</filename> directory.</para>
+        temporary directory on a read-only <filename>/var/</filename> directory. If a source path is not
+        absolute, it is resolved relative to the current working directory.</para>
 
         <para>For details about overlay file systems, see <ulink
-        url="https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt">overlayfs.txt</ulink>. Note
-        that the semantics of overlay file systems are substantially
-        different from normal file systems, in particular regarding
-        reported device and inode information. Device and inode
-        information may change for a file while it is being written
-        to, and processes might see out-of-date versions of files at
-        times. Note that this switch automatically derives the
-        <literal>workdir=</literal> mount option for the overlay file
-        system from the top-level directory tree, making it a sibling
-        of it. It is hence essential that the top-level directory tree
-        is not a mount point itself (since the working directory must
-        be on the same file system as the top-most directory
-        tree). Also note that the <literal>lowerdir=</literal> mount
-        option receives the paths to stack in the opposite order of
-        this switch.</para>
+        url="https://docs.kernel.org/filesystems/overlayfs.html">Overlay Filesystem</ulink>.
+        Note that the semantics of overlay file systems are substantially different from normal file systems,
+        in particular regarding reported device and inode information. Device and inode information may
+        change for a file while it is being written to, and processes might see out-of-date versions of files
+        at times. Note that this switch automatically derives the <literal>workdir=</literal> mount option
+        for the overlay file system from the top-level directory tree, making it a sibling of it. It is hence
+        essential that the top-level directory tree is not a mount point itself (since the working directory
+        must be on the same file system as the top-most directory tree). Also note that the
+        <literal>lowerdir=</literal> mount option receives the paths to stack in the opposite order of this
+        switch.</para>
 
         <para>Note that this option cannot be used to replace the root file system of the container with an overlay
         file system. However, the <option>--volatile=</option> option described above provides similar functionality,
diff --git a/man/systemd-oomd.service.xml b/man/systemd-oomd.service.xml
index e87a753..45c791b 100644
--- a/man/systemd-oomd.service.xml
+++ b/man/systemd-oomd.service.xml
@@ -3,7 +3,8 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd-oomd.service" conditional='ENABLE_OOMD'>
+<refentry id="systemd-oomd.service" conditional='ENABLE_OOMD'
+    xmlns:xi="http://www.w3.org/2001/XInclude">
 
   <refentryinfo>
     <title>systemd-oomd.service</title>
@@ -29,23 +30,37 @@
   <refsect1>
     <title>Description</title>
 
-    <para><command>systemd-oomd</command> is a system service that uses cgroups-v2 and pressure stall information (PSI)
-    to monitor and take action on processes before an OOM occurs in kernel space.</para>
+    <para><command>systemd-oomd</command> is a system service that uses cgroups-v2 and pressure stall
+    information (PSI) to monitor and take corrective action before an OOM occurs in the kernel space.</para>
 
-    <para>You can enable monitoring and actions on units by setting <varname>ManagedOOMSwap=</varname> and/or
-    <varname>ManagedOOMMemoryPressure=</varname> to the appropriate value. <command>systemd-oomd</command> will
-    periodically poll enabled units' cgroup data to detect when corrective action needs to occur. When an action needs
-    to happen, it will only be performed on the descendant cgroups of the enabled units. More precisely, only cgroups with
-    <filename>memory.oom.group</filename> set to <constant>1</constant> and leaf cgroup nodes are eligible candidates.
-    Action will be taken recursively on all of the processes under the chosen candidate.</para>
+    <para>You can enable monitoring and actions on units by setting <varname>ManagedOOMSwap=</varname> and
+    <varname>ManagedOOMMemoryPressure=</varname> in the unit configuration, see
+    <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    <command>systemd-oomd</command> retrieves information about such units from
+    <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    when it starts and watches for subsequent changes.</para>
 
-    <para>See
-    <citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+    <para>Cgroups of units with <varname>ManagedOOMSwap=</varname> or
+    <varname>ManagedOOMMemoryPressure=</varname> set to <option>kill</option> will be monitored.
+    <command>systemd-oomd</command> periodically polls PSI statistics for the system and those cgroups to
+    decide when to take action. If the configured limits are exceeded, <command>systemd-oomd</command> will
+    select a cgroup to terminate, and send <constant>SIGKILL</constant> to all processes in it. Note that
+    only descendant cgroups are eligible candidates for killing; the unit with its property set to
+    <option>kill</option> is not a candidate (unless one of its ancestors set their property to
+    <option>kill</option>). Also only leaf cgroups and cgroups with <filename>memory.oom.group</filename> set
+    to <constant>1</constant> are eligible candidates; see <varname>OOMPolicy=</varname> in
+    <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
+    <para><citerefentry><refentrytitle>oomctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> can
+    be used to list monitored cgroups and pressure information.</para>
+
+    <para>See <citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
     for more information about the configuration of this service.</para>
   </refsect1>
 
   <refsect1>
-    <title>Setup Information</title>
+    <title>System requirements and configuration</title>
 
     <para>The system must be running systemd with a full unified cgroup hierarchy for the expected cgroups-v2 features.
     Furthermore, memory accounting must be turned on for all units monitored by <command>systemd-oomd</command>.
@@ -53,23 +68,25 @@
     is set to <constant>true</constant> in
     <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
 
-    <para>You will need a kernel compiled with PSI support. This is available in Linux 4.20 and above.</para>
+    <para>The kernel must be compiled with PSI support. This is available in Linux 4.20 and above.</para>
 
-    <para>It is highly recommended for the system to have swap enabled for <command>systemd-oomd</command> to function
-    optimally. With swap enabled, the system spends enough time swapping pages to let <command>systemd-oomd</command> react.
-    Without swap, the system enters a livelocked state much more quickly and may prevent <command>systemd-oomd</command>
-    from responding in a reasonable amount of time. See
-    <ulink url="https://chrisdown.name/2018/01/02/in-defence-of-swap.html">"In defence of swap: common misconceptions"</ulink>
-    for more details on swap. Any swap-based actions on systems without swap will be ignored. While
-    <command>systemd-oomd</command> can perform pressure-based actions on a system without swap, the pressure increases
-    will be more abrupt and may require more tuning to get the desired thresholds and behavior.</para>
+    <para>It is highly recommended for the system to have swap enabled for <command>systemd-oomd</command> to
+    function optimally. With swap enabled, the system spends enough time swapping pages to let
+    <command>systemd-oomd</command> react.  Without swap, the system enters a livelocked state much more
+    quickly and may prevent <command>systemd-oomd</command> from responding in a reasonable amount of
+    time. See <ulink url="https://chrisdown.name/2018/01/02/in-defence-of-swap.html">"In defence of swap:
+    common misconceptions"</ulink> for more details on swap. Any swap-based actions on systems without swap
+    will be ignored. While <command>systemd-oomd</command> can perform pressure-based actions on such a
+    system, the pressure increases will be more abrupt and may require more tuning to get the desired
+    thresholds and behavior.</para>
 
     <para>Be aware that if you intend to enable monitoring and actions on <filename>user.slice</filename>,
-    <filename>user-$UID.slice</filename>, or their ancestor cgroups, it is highly recommended that your programs be
-    managed by the systemd user manager to prevent running too many processes under the same session scope (and thus
-    avoid a situation where memory intensive tasks trigger <command>systemd-oomd</command> to kill everything under the
-    cgroup). If you're using a desktop environment like GNOME, it already spawns many session components with the
-    systemd user manager.</para>
+    <filename>user-$UID.slice</filename>, or their ancestor cgroups, it is highly recommended that your
+    programs be managed by the systemd user manager to prevent running too many processes under the same
+    session scope (and thus avoid a situation where memory intensive tasks trigger
+    <command>systemd-oomd</command> to kill everything under the cgroup). If you're using a desktop
+    environment like GNOME or KDE, it already spawns many session components with the systemd user manager.
+    </para>
   </refsect1>
 
   <refsect1>
@@ -79,11 +96,27 @@
     <filename>-.slice</filename>, and allowing all descendant cgroups to be eligible candidates may make the most
     sense.</para>
 
-    <para><varname>ManagedOOMMemoryPressure=</varname> tends to work better on the cgroups below the root slice
-    <filename>-.slice</filename>. For units which tend to have processes that are less latency sensitive (e.g.
-    <filename>system.slice</filename>), a higher limit like the default of 60% may be acceptable, as those processes
-    can usually ride out slowdowns caused by lack of memory without serious consequences. However, something like
-    <filename>user@$UID.service</filename> may prefer a much lower value like 40%.</para>
+    <para><varname>ManagedOOMMemoryPressure=</varname> tends to work better on the cgroups below the root
+    slice. For units which tend to have processes that are less latency sensitive (e.g.
+    <filename>system.slice</filename>), a higher limit like the default of 60% may be acceptable, as those
+    processes can usually ride out slowdowns caused by lack of memory without serious consequences. However,
+    something like <filename>user@$UID.service</filename> may prefer a much lower value like 40%.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>--dry-run</option></term>
+
+        <listitem><para>Do a dry run of <command>systemd-oomd</command>: when a kill is triggered, print it
+        to the log instead of killing the cgroup.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <xi:include href="standard-options.xml" xpointer="help" />
+    <xi:include href="standard-options.xml" xpointer="version" />
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd-pcrphase.service.xml b/man/systemd-pcrphase.service.xml
new file mode 100644
index 0000000..643dbe6
--- /dev/null
+++ b/man/systemd-pcrphase.service.xml
@@ -0,0 +1,196 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd-pcrphase.service" conditional='HAVE_GNU_EFI'
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>systemd-pcrphase.service</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-pcrphase.service</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-pcrphase.service</refname>
+    <refname>systemd-pcrphase-sysinit.service</refname>
+    <refname>systemd-pcrphase-initrd.service</refname>
+    <refname>systemd-pcrmachine.service</refname>
+    <refname>systemd-pcrfs-root.service</refname>
+    <refname>systemd-pcrfs@.service</refname>
+    <refname>systemd-pcrphase</refname>
+    <refpurpose>Measure boot phase into TPM2 PCR 11, machine ID and file system identity into PCR 15</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>systemd-pcrphase.service</filename></para>
+    <para><filename>systemd-pcrphase-sysinit.service</filename></para>
+    <para><filename>systemd-pcrphase-initrd.service</filename></para>
+    <para><filename>systemd-pcrmachine.service</filename></para>
+    <para><filename>systemd-pcrfs-root.service</filename></para>
+    <para><filename>systemd-pcrfs@.service</filename></para>
+    <para><filename>/usr/lib/systemd/systemd-pcrphase</filename> <optional><replaceable>STRING</replaceable></optional></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><filename>systemd-pcrphase.service</filename>,
+    <filename>systemd-pcrphase-sysinit.service</filename>, and
+    <filename>systemd-pcrphase-initrd.service</filename> are system services that measure specific strings
+    into TPM2 PCR 11 during boot at various milestones of the boot process.</para>
+
+    <para><filename>systemd-pcrmachine.service</filename> is a system service that measures the machine ID
+    (see <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>) into
+    PCR 15.</para>
+
+    <para><filename>systemd-pcrfs-root.service</filename> and <filename>systemd-pcrfs@.service</filename> are
+    services that measure file system identity information (i.e. mount point, file system type, label and
+    UUID, partition label and UUID) into PCR 15. <filename>systemd-pcrfs-root.service</filename> does so for
+    the root file system, <filename>systemd-pcrfs@.service</filename> is a template unit that measures the
+    file system indicated by its instance identifier instead.</para>
+
+    <para>These services require
+    <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry> to be
+    used in a unified kernel image (UKI). They execute no operation when the stub has not been used to invoke
+    the kernel. The stub will measure the invoked kernel and associated vendor resources into PCR 11 before
+    handing control to it; once userspace is invoked these services then will extend TPM2 PCR 11 with certain
+    literal strings indicating phases of the boot process. During a regular boot process PCR 11 is extended
+    with the following strings:</para>
+
+    <orderedlist>
+      <listitem><para><literal>enter-initrd</literal> — early when the initrd initializes, before activating
+      system extension images for the initrd. It acts as a barrier between the time where the kernel
+      initializes and where the initrd starts operating and enables system extension images, i.e. code
+      shipped outside of the UKI. (This extension happens when
+      <filename>systemd-pcrphase-initrd.service</filename> is started.)</para></listitem>
+
+      <listitem><para><literal>leave-initrd</literal> — when the initrd is about to transition into the host
+      file system. It acts as barrier between initrd code and host OS code. (This extension happens when
+      <filename>systemd-pcrphase-initrd.service</filename> is stopped.)</para></listitem>
+
+      <listitem><para><literal>sysinit</literal> — when basic system initialization is complete (which
+      includes local file systems having been mounted), and the system begins starting regular system
+      services. (This extension happens when <filename>systemd-pcrphase-sysinit.service</filename> is
+      started.)</para></listitem>
+
+      <listitem><para><literal>ready</literal> — during later boot-up, after remote file systems have been
+      activated (i.e. after <filename>remote-fs.target</filename>), but before users are permitted to log in
+      (i.e. before <filename>systemd-user-sessions.service</filename>). It acts as barrier between the time
+      where unprivileged regular users are still prohibited to log in and where they are allowed to log in.
+      (This extension happens when <filename>systemd-pcrphase.service</filename> is started.)
+      </para></listitem>
+
+      <listitem><para><literal>shutdown</literal> — when the system shutdown begins. It acts as barrier
+      between the time the system is fully up and running and where it is about to shut down. (This extension
+      happens when <filename>systemd-pcrphase.service</filename> is stopped.)</para></listitem>
+
+      <listitem><para><literal>final</literal> — at the end of system shutdown. It acts as barrier between
+      the time the service manager still runs and when it transitions into the final shutdown phase where
+      service management is not available anymore. (This extension happens when
+      <filename>systemd-pcrphase-sysinit.service</filename> is stopped.)</para></listitem>
+    </orderedlist>
+
+    <para>During a regular system lifecycle, PCR 11 is extended with the strings
+    <literal>enter-initrd</literal>, <literal>leave-initrd</literal>, <literal>sysinit</literal>,
+    <literal>ready</literal>, <literal>shutdown</literal>, and <literal>final</literal>.</para>
+
+    <para>Specific phases of the boot process may be referenced via the series of strings measured, separated
+    by colons (the "phase path"). For example, the phase path for the regular system runtime is
+    <literal>enter-initrd:leave-initrd:sysinit:ready</literal>, while the one for the initrd is just
+    <literal>enter-initrd</literal>. The phase path for the boot phase before the initrd is an empty string;
+    because that's hard to pass around a single colon (<literal>:</literal>) may be used instead. Note that
+    the aforementioned six strings are just the default strings and individual systems might measure other
+    strings at other times, and thus implement different and more fine-grained boot phases to bind policy
+    to.</para>
+
+    <para>By binding policy of TPM2 objects to a specific phase path it is possible to restrict access to
+    them to specific phases of the boot process, for example making it impossible to access the root file
+    system's encryption key after the system transitioned from the initrd into the host root file system.
+    </para>
+
+    <para>Use
+    <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry> to
+    pre-calculate expected PCR 11 values for specific boot phases (via the <option>--phase=</option> switch).
+    </para>
+
+    <para><filename>systemd-pcrfs-root.service</filename> and <filename>systemd-pcrfs@.service</filename> are
+    automatically pulled into the initial transaction by
+    <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    for the root and <filename>/var/</filename> file
+    systems. <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    will do this for all mounts with the <option>x-systemd.pcrfs</option> mount option in
+    <filename>/etc/fstab</filename>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <para>The <filename>/usr/lib/systemd/system-pcrphase</filename> executable may also be invoked from the
+    command line, where it expects the word to extend into PCR 11, as well as the following switches:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>--bank=</option></term>
+
+        <listitem><para>Takes the PCR banks to extend the specified word into. If not specified the tool
+        automatically determines all enabled PCR banks and measures the word into all of
+        them.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tpm2-device=</option><replaceable>PATH</replaceable></term>
+
+        <listitem><para>Controls which TPM2 device to use. Expects a device node path referring to the TPM2
+        chip (e.g. <filename>/dev/tpmrm0</filename>). Alternatively the special value <literal>auto</literal>
+        may be specified, in order to automatically determine the device node of a suitable TPM2 device (of
+        which there must be exactly one). The special value <literal>list</literal> may be used to enumerate
+        all suitable TPM2 devices currently discovered.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--graceful</option></term>
+
+        <listitem><para>If no TPM2 firmware, kernel subsystem, kernel driver or device support is found, exit
+        with exit status 0 (i.e. indicate success). If this is not specified any attempt to measure without a
+        TPM2 device will cause the invocation to fail.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--machine-id</option></term>
+
+        <listitem><para>Instead of measuring a word specified on the command line into PCR 11, measure the
+        host's machine ID into PCR 15.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--file-system=</option></term>
+
+        <listitem><para>Instead of measuring a word specified on the command line into PCR 11, measure
+        identity information of the specified file system into PCR 15. The parameter must be the path to the
+        established mount point of the file system to measure.</para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="help" />
+      <xi:include href="standard-options.xml" xpointer="version" />
+
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-portabled.service.xml b/man/systemd-portabled.service.xml
index 61f2c5c..6dacea5 100644
--- a/man/systemd-portabled.service.xml
+++ b/man/systemd-portabled.service.xml
@@ -35,8 +35,8 @@
     <para>Most of <command>systemd-portabled</command>'s functionality is accessible through the
     <citerefentry><refentrytitle>portablectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> command.</para>
 
-    <para>See <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services</ulink> for details about
-    the concepts this service implements.</para>
+    <para>See the <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services Documentation</ulink>
+    for details about the concepts this service implements.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd-poweroff.service.xml b/man/systemd-poweroff.service.xml
new file mode 100644
index 0000000..9adfcc5
--- /dev/null
+++ b/man/systemd-poweroff.service.xml
@@ -0,0 +1,92 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd-poweroff.service">
+
+  <refentryinfo>
+    <title>systemd-poweroff.service</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-poweroff.service</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-poweroff.service</refname>
+    <refname>systemd-halt.service</refname>
+    <refname>systemd-reboot.service</refname>
+    <refname>systemd-kexec.service</refname>
+    <refname>systemd-shutdown</refname>
+    <refpurpose>System shutdown logic</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>systemd-poweroff.service</filename></para>
+    <para><filename>systemd-halt.service</filename></para>
+    <para><filename>systemd-reboot.service</filename></para>
+    <para><filename>systemd-kexec.service</filename></para>
+    <para><filename>/usr/lib/systemd/systemd-shutdown</filename></para>
+    <para><filename>/usr/lib/systemd/system-shutdown/</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><filename>systemd-poweroff.service</filename> is a system
+    service that is pulled in by <filename>poweroff.target</filename> and
+    is responsible for the actual system power-off operation. Similarly,
+    <filename>systemd-halt.service</filename> is pulled in by
+    <filename>halt.target</filename>,
+    <filename>systemd-reboot.service</filename> by
+    <filename>reboot.target</filename> and
+    <filename>systemd-kexec.service</filename> by
+    <filename>kexec.target</filename> to execute the respective
+    actions.</para>
+
+    <para>When these services are run, they ensure that PID 1 is
+    replaced by the
+    <filename>/usr/lib/systemd/systemd-shutdown</filename> tool which
+    is then responsible for the actual shutdown. Before shutting down,
+    this binary will try to unmount all remaining file systems,
+    disable all remaining swap devices, detach all remaining storage
+    devices and kill all remaining processes.</para>
+
+    <para>It is necessary to have this code in a separate binary
+    because otherwise rebooting after an upgrade might be broken — the
+    running PID 1 could still depend on libraries which are not
+    available any more, thus keeping the file system busy, which then
+    cannot be re-mounted read-only.</para>
+
+    <para>Immediately before executing the actual system
+    power-off/halt/reboot/kexec <filename>systemd-shutdown</filename>
+    will run all executables in
+    <filename>/usr/lib/systemd/system-shutdown/</filename> and pass
+    one arguments to them: either <literal>poweroff</literal>,
+    <literal>halt</literal>, <literal>reboot</literal>, or
+    <literal>kexec</literal>, depending on the chosen action. All
+    executables in this directory are executed in parallel, and
+    execution of the action is not continued before all executables
+    finished.</para>
+
+    <para>Note that <filename>systemd-poweroff.service</filename> (and the related units) should never be
+    executed directly. Instead, trigger system shutdown with a command such as <literal>systemctl
+    poweroff</literal>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-random-seed.service.xml b/man/systemd-random-seed.service.xml
index 3137ed0..bc8cf50 100644
--- a/man/systemd-random-seed.service.xml
+++ b/man/systemd-random-seed.service.xml
@@ -18,7 +18,7 @@
   <refnamediv>
     <refname>systemd-random-seed.service</refname>
     <refname>systemd-random-seed</refname>
-    <refpurpose>Load and save the system random seed at boot and shutdown</refpurpose>
+    <refpurpose>Load and save the OS system random seed at boot and shutdown</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
@@ -33,14 +33,14 @@
     into the kernel entropy pool during boot and saves it at shutdown. See
     <citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry> for
     details. By default, no entropy is credited when the random seed is written into the kernel entropy pool,
-    but this may be changed with <varname>$SYSTEMD_RANDOM_SEED_CREDIT</varname>, see below.  On disk the random
+    but this may be changed with <varname>$SYSTEMD_RANDOM_SEED_CREDIT</varname>, see below. On disk the random
     seed is stored in <filename>/var/lib/systemd/random-seed</filename>.</para>
 
     <para>Note that this service runs relatively late during the early boot phase, i.e. generally after the
-    initial RAM disk (initrd) completed its work, and the <filename>/var/</filename> file system has been
-    mounted writable. Many system services require entropy much earlier than this — this service is hence of
-    limited use for complex system. It is recommended to use a boot loader that can pass an initial random
-    seed to the kernel to ensure that entropy is available from earliest boot on, for example
+    initrd phase has finished and the <filename>/var/</filename> file system has been mounted. Many system
+    services require entropy much earlier than this — this service is hence of limited use for complex
+    system. It is recommended to use a boot loader that can pass an initial random seed to the kernel to
+    ensure that entropy is available from earliest boot on, for example
     <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>, with
     its <command>bootctl random-seed</command> functionality.</para>
 
@@ -57,7 +57,8 @@
     thus — if otherwise entropy-starved — generate the same or at least guessable random seed streams. As a
     safety precaution crediting entropy is thus disabled by default. It is recommended to remove the random
     seed from OS images intended for replication on multiple systems, in which case it is safe to enable
-    entropy crediting, see below.</para>
+    entropy crediting, see below. Also see <ulink url="https://systemd.io/BUILDING_IMAGES">Safely Building
+    Images</ulink>.</para>
 
     <para>See <ulink url="https://systemd.io/RANDOM_SEEDS">Random Seeds</ulink> for further
     information.</para>
@@ -85,7 +86,9 @@
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>4</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>4</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-boot-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/systemd-remount-fs.service.xml b/man/systemd-remount-fs.service.xml
index be74307..266db88 100644
--- a/man/systemd-remount-fs.service.xml
+++ b/man/systemd-remount-fs.service.xml
@@ -36,7 +36,7 @@
     <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     is active) to the root file system, the <filename>/usr/</filename> file system, and the kernel API file
     systems. This is required so that the mount options of these file systems — which are pre-mounted by the
-    kernel, the initial RAM disk, container environments or system manager code — are updated to those
+    kernel, the initrd, container environments or system manager code — are updated to those
     configured in <filename>/etc/fstab</filename> and the other sources. This service ignores normal file
     systems and only changes the root file system (i.e.  <filename>/</filename>), <filename>/usr/</filename>,
     and the virtual kernel API file systems such as <filename>/proc/</filename>, <filename>/sys/</filename> or
diff --git a/man/systemd-repart.xml b/man/systemd-repart.xml
index 380ba57..9033ef7 100644
--- a/man/systemd-repart.xml
+++ b/man/systemd-repart.xml
@@ -43,14 +43,14 @@
     <para>If invoked with no arguments, it operates on the block device backing the root file system
     partition of the running OS, thus growing and adding partitions of the booted OS image itself. If
     <varname>--image=</varname> is used it will operate on the specified image file. When called in the
-    <literal>initrd</literal> it operates on the block device backing <filename>/sysroot/</filename> instead,
-    i.e. on the block device the system will soon transition into. The
-    <filename>systemd-repart.service</filename> service is generally run at boot in the initial RAM disk, in
-    order to augment the partition table of the OS before its partitions are
-    mounted. <command>systemd-repart</command> (mostly) operates in a purely incremental mode: it only grows
-    existing and adds new partitions; it does not shrink, delete or move existing partitions. The service is
-    intended to be run on every boot, but when it detects that the partition table already matches the
-    installed <filename>repart.d/*.conf</filename> configuration files, it executes no operation.</para>
+    initrd it operates on the block device backing <filename>/sysroot/</filename> instead, i.e. on the block
+    device the system will soon transition into. The <filename>systemd-repart.service</filename> service is
+    generally run at boot in the initrd, in order to augment the partition table of the OS before its
+    partitions are mounted. <command>systemd-repart</command> (mostly) operates in a purely incremental mode:
+    it only grows existing and adds new partitions; it does not shrink, delete or move existing partitions.
+    The service is intended to be run on every boot, but when it detects that the partition table already
+    matches the installed <filename>repart.d/*.conf</filename> configuration files, it executes no
+    operation.</para>
 
     <para><command>systemd-repart</command> is intended to be used when deploying OS images, to automatically
     adjust them to the system they are running on, during first boot. This way the deployed image can be
@@ -71,7 +71,9 @@
 
     <orderedlist>
       <listitem><para>The <filename>repart.d/*.conf</filename> configuration files are loaded and parsed,
-      and ordered by filename (without the directory prefix).</para></listitem>
+      and ordered by filename (without the directory prefix). For each configuration file,
+      drop-in files are looked for in directories with same name as the configuration file
+      with a suffix ".d" added.</para></listitem>
 
       <listitem><para>The partition table already existing on the block device is loaded and
       parsed.</para></listitem>
@@ -87,34 +89,34 @@
 
       <listitem><para>Taking the size constraints and weights declared in the configuration files into
       account, all partitions that shall be created are now allocated to the disk, taking up all free space,
-      always respecting the size and padding requests. Similar, existing partitions that are determined to
-      grow are grown. New partitions are always appended to the end of the existing partition table, taking
-      the first partition table slot whose index is greater than the indexes of all existing
-      partitions. Partition table slots are never reordered and thus partition numbers are ensured to remain
-      stable. Note that this allocation happens in RAM only, the partition table on disk is not updated
-      yet.</para></listitem>
+      always respecting the size and padding requests. Similarly, existing partitions that should be grown
+      are grown. New partitions are always appended to the end of the partition table, taking the first
+      partition table slot whose index is greater than the indexes of all existing partitions. Partition
+      table slots are never reordered and thus partition numbers are ensured to remain stable. Note that this
+      allocation happens in memory only, the partition table on disk is not updated yet.</para></listitem>
 
       <listitem><para>All existing partitions for which configuration files exist and which currently have no
       GPT partition label set will be assigned a label, either explicitly configured in the configuration or
-      (if that's missing) derived automatically from the partition type. The same is done for all partitions
-      that are newly created. These assignments are done in RAM only, too, the disk is not updated
-      yet.</para></listitem>
+      — if that's missing — derived automatically from the partition type. The same is done for all
+      partitions that are newly created. These assignments are done in memory only, too, the disk is not
+      updated yet.</para></listitem>
 
       <listitem><para>Similarly, all existing partitions for which configuration files exist and which
       currently have an all-zero identifying UUID will be assigned a new UUID. This UUID is cryptographically
       hashed from a common seed value together with the partition type UUID (and a counter in case multiple
       partitions of the same type are defined), see below. The same is done for all partitions that are
-      created anew. These assignments are done in RAM only, too, the disk is not updated
-      yet.</para></listitem>
+      created anew. These assignments are done in memory only, too, the disk is not updated yet.
+      </para></listitem>
 
       <listitem><para>Similarly, if the disk's volume UUID is all zeroes it is also initialized, also
-      cryptographically hashed from the same common seed value. Also, in RAM only, too.</para></listitem>
+      cryptographically hashed from the same common seed value. This is done in memory only too.
+      </para></listitem>
 
-      <listitem><para>The disk space assigned to new partitions (i.e. what was previously considered free
-      space but is no longer) is now erased. Specifically, all file system signatures are removed, and if the
-      device supports it the <constant>BLKDISCARD</constant> I/O control command is issued to inform the
-      hardware that the space is empty now. In addition any "padding" between partitions and at the end of
-      the device is similarly erased.</para></listitem>
+      <listitem><para>The disk space assigned to new partitions (i.e. what was previously free space) is now
+      erased. Specifically, all file system signatures are removed, and if the device supports it, the
+      <constant>BLKDISCARD</constant> I/O control command is issued to inform the hardware that the space is
+      now empty. In addition any "padding" between partitions and at the end of the device is similarly
+      erased.</para></listitem>
 
       <listitem><para>The new partition table is finally written to disk. The kernel is asked to reread the
       partition table.</para></listitem>
@@ -255,9 +257,9 @@
         <filename>repart.d/*.conf</filename> files, for the machine ID file to use as seed and for the
         <varname>CopyFiles=</varname> and <varname>CopyBlocks=</varname> source files and directories. By
         default when invoked on the regular system this defaults to the host's root file system
-        <filename>/</filename>. If invoked from the initial RAM disk this defaults to
-        <filename>/sysroot/</filename>, so that the tool operates on the configuration and machine ID stored
-        in the root file system later transitioned into itself.</para></listitem>
+        <filename>/</filename>. If invoked from the initrd this defaults to <filename>/sysroot/</filename>,
+        so that the tool operates on the configuration and machine ID stored in the root file system later
+        transitioned into itself.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -293,7 +295,9 @@
         <listitem><para>Takes a file system path. If specified the <filename>*.conf</filename> files are read
         from the specified directory instead of searching in <filename>/usr/lib/repart.d/*.conf</filename>,
         <filename>/etc/repart.d/*.conf</filename>,
-        <filename>/run/repart.d/*.conf</filename>.</para></listitem>
+        <filename>/run/repart.d/*.conf</filename>.</para>
+
+        <para>This parameter can be specified multiple times.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -309,6 +313,22 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--private-key=</option></term>
+
+        <listitem><para>Takes a file system path. Configures the signing key to use when creating verity
+        signature partitions with the <varname>Verity=signature</varname> setting in partition files.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--certificate=</option></term>
+
+        <listitem><para>Takes a file system path. Configures the PEM encoded X.509 certificate to use when
+        creating verity signature partitions with the <varname>Verity=signature</varname> setting in
+        partition files.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--tpm2-device=</option></term>
         <term><option>--tpm2-pcrs=</option></term>
 
@@ -319,6 +339,63 @@
         and have the same effect on partitions where TPM2 enrollment is requested.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--tpm2-public-key=</option><arg>PATH</arg></term>
+        <term><option>--tpm2-public-key-pcrs=</option><arg rep="repeat">PCR</arg></term>
+
+        <listitem><para>Configures a TPM2 signed PCR policy to bind encryption to. See
+        <citerefentry><refentrytitle>systemd-cryptenroll</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        for details on these two options.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--split=</option><arg>BOOL</arg></term>
+
+        <listitem><para>Enables generation of split artifacts from partitions configured with
+        <varname>SplitName=</varname>. If enabled, for each partition with <varname>SplitName=</varname> set,
+        a separate output file containing just the contents of that partition is generated. The output
+        filename consists of the loopback filename suffixed with the name configured with
+        <varname>SplitName=</varname>. If the loopback filename ends with <literal>.raw</literal>, the suffix
+        is inserted before the <literal>.raw</literal> extension instead.</para>
+
+        <para>Note that <option>--split</option> is independent from <option>--dry-run</option>. Even if
+        <option>--dry-run</option> is enabled, split artifacts will still be generated from an existing image
+        if <option>--split</option> is enabled.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--include-partitions=</option><arg rep="repeat">PARTITION</arg></term>
+        <term><option>--exclude-partitions=</option><arg rep="repeat">PARTITION</arg></term>
+
+        <listitem><para>These options specify which partition types <command>systemd-repart</command> should
+        operate on. If <option>--include-partitions=</option> is used, all partitions that aren't specified
+        are excluded. If <option>--exclude-partitions=</option> is used, all partitions that are specified
+        are excluded. Both options take a comma separated list of GPT partition type UUIDs or identifiers
+        (see <varname>Type=</varname> in
+        <citerefentry><refentrytitle>repart.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--defer-partitions=</option><arg rep="repeat">PARTITION</arg></term>
+
+        <listitem><para>This option specifies for which partition types <command>systemd-repart</command>
+        should defer. All partitions that are deferred using this option are still taken into account when
+        calculating the sizes and offsets of other partitions, but aren't actually written to the disk image.
+        The net effect of this option is that if you run <command>systemd-repart</command> again without
+        these options, the missing partitions will be added as if they had not been deferred the first time
+        <command>systemd-repart</command> was executed.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--sector-size=</option><arg>BYTES</arg></term>
+
+        <listitem><para>This option allows configuring the sector size of the image produced by
+        <command>systemd-repart</command>. It takes a value that is a power of <literal>2</literal> between
+        <literal>512</literal> and <literal>4096</literal>. This option is useful when building images for
+        disks that use a different sector size as the disk on which the image is produced.</para></listitem>.
+      </varlistentry>
+
       <xi:include href="standard-options.xml" xpointer="help" />
       <xi:include href="standard-options.xml" xpointer="version" />
       <xi:include href="standard-options.xml" xpointer="no-pager" />
diff --git a/man/systemd-resolved.service.xml b/man/systemd-resolved.service.xml
index 34c1257..7003c36 100644
--- a/man/systemd-resolved.service.xml
+++ b/man/systemd-resolved.service.xml
@@ -59,12 +59,19 @@
       <command>systemd-resolved</command>.</para></listitem>
 
       <listitem><para>Additionally, <command>systemd-resolved</command> provides a local DNS stub listener on
-      IP address 127.0.0.53 on the local loopback interface. Programs issuing DNS requests directly,
-      bypassing any local API may be directed to this stub, in order to connect them to
+      the IP addresses 127.0.0.53 and 127.0.0.54 on the local loopback interface. Programs issuing DNS
+      requests directly, bypassing any local API may be directed to this stub, in order to connect them to
       <command>systemd-resolved</command>. Note however that it is strongly recommended that local programs
       use the glibc NSS or bus APIs instead (as described above), as various network resolution concepts
       (such as link-local addressing, or LLMNR Unicode domains) cannot be mapped to the unicast DNS
-      protocol.</para></listitem>
+      protocol.</para>
+
+      <para id="proxy-stub">The DNS stub resolver on 127.0.0.53 provides the full feature set of the local
+      resolver, which includes offering LLMNR/MulticastDNS resolution. The DNS stub resolver on 127.0.0.54
+      provides a more limited resolver, that operates in "proxy" mode only, i.e. it will pass most DNS
+      messages relatively unmodified to the current upstream DNS servers and back, but not try to process the
+      messages locally, and hence does not validate DNSSEC, or offer up LLMNR/MulticastDNS. (It will
+      translate to DNS-over-TLS communication if needed however.)</para></listitem>
     </itemizedlist>
 
     <para>The DNS servers contacted are determined from the global settings in
@@ -111,6 +118,12 @@
       local default gateway configured. This assigns a stable hostname to the local outbound IP addresses,
       useful for referencing them independently of the current network configuration state.</para></listitem>
 
+      <listitem><para>The hostname <literal>_localdnsstub</literal> is resolved to the IP address 127.0.0.53,
+      i.e. the address the local DNS stub (see above) is listening on.</para></listitem>
+
+      <listitem><para>The hostname <literal>_localdnsproxy</literal> is resolved to the IP address 127.0.0.54,
+      i.e. the address the local DNS proxy (see above) is listening on.</para></listitem>
+
       <listitem><para>The mappings defined in <filename>/etc/hosts</filename> are resolved to their
       configured addresses and back, but they will not affect lookups for non-address types (like MX).
       Support for <filename>/etc/hosts</filename> may be disabled with <varname>ReadEtcHosts=no</varname>,
@@ -308,11 +321,11 @@
     <itemizedlist>
       <listitem><para><command>systemd-resolved</command> maintains the
       <filename>/run/systemd/resolve/stub-resolv.conf</filename> file for compatibility with traditional
-      Linux programs. This file may be symlinked from <filename>/etc/resolv.conf</filename>. This file lists
-      the 127.0.0.53 DNS stub (see above) as the only DNS server. It also contains a list of search domains
-      that are in use by systemd-resolved. The list of search domains is always kept up-to-date. Note that
-      <filename>/run/systemd/resolve/stub-resolv.conf</filename> should not be used directly by applications,
-      but only through a symlink from <filename>/etc/resolv.conf</filename>. This file may be symlinked from
+      Linux programs. This file lists the 127.0.0.53 DNS stub (see above) as the only DNS server. It also
+      contains a list of search domains that are in use by systemd-resolved. The list of search domains is
+      always kept up-to-date. Note that <filename>/run/systemd/resolve/stub-resolv.conf</filename> should not
+      be used directly by applications, but only through a symlink from
+      <filename>/etc/resolv.conf</filename>. This file may be symlinked from
       <filename>/etc/resolv.conf</filename> in order to connect all local clients that bypass local DNS APIs
       to <command>systemd-resolved</command> with correct search domains settings. This mode of operation is
       recommended.</para></listitem>
@@ -387,6 +400,49 @@
   </refsect1>
 
   <refsect1>
+    <title>Credentials</title>
+
+    <para><command>systemd-resolved</command> supports the service credentials logic as implemented by
+    <varname>LoadCredential=</varname>/<varname>SetCredential=</varname> (see
+    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>1</manvolnum></citerefentry> for
+    details). The following credentials are used when passed in:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><varname>network.dns</varname></term>
+        <term><varname>network.search_domains</varname></term>
+
+        <listitem><para>May contain a space separated list of DNS server IP addresses and DNS search
+        domains. This information is only used when no explicit configuration via
+        <filename>/etc/systemd/resolved.conf</filename>, <filename>/etc/resolv.conf</filename> or the kernel
+        command line has been provided.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Kernel Command Line</title>
+
+    <para><command>systemd-resolved</command> also honours two kernel command line options:</para>
+
+    <variablelist class='kernel-commandline-options'>
+      <varlistentry>
+        <term><varname>nameserver=</varname></term>
+        <term><varname>domain=</varname></term>
+
+        <listitem><para>Takes the IP address of a DNS server (in case of <varname>nameserver=</varname>), and
+        a DNS search domain (in case of <varname>domain=</varname>). May be used multiple times, to define
+        multiple DNS servers/search domains. If either of these options are specified
+        <filename>/etc/resolv.conf</filename> will not be read and the <varname>DNS=</varname> and
+        <varname>Domains=</varname> settings of
+        <citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        will be ignored. These two kernel command line options hence override system
+        configuration.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd-run.xml b/man/systemd-run.xml
index fc8716e..cd9e50d 100644
--- a/man/systemd-run.xml
+++ b/man/systemd-run.xml
@@ -67,11 +67,12 @@
     command has begun execution (unless <option>--no-block</option> or <option>--wait</option> are specified, see
     below).</para>
 
-    <para>If a command is run as transient scope unit, it will be executed by <command>systemd-run</command> itself as
-    parent process and will thus inherit the execution environment of the caller. However, the processes of the command
-    are managed by the service manager similar to normal services, and will show up in the output of <command>systemctl
-    list-units</command>. Execution in this case is synchronous, and will return only when the command finishes. This
-    mode is enabled via the <option>--scope</option> switch (see below). </para>
+    <para>If a command is run as transient scope unit, it will be executed by <command>systemd-run</command>
+    itself as parent process and will thus inherit the execution environment of the caller. However, the
+    processes of the command are managed by the service manager similarly to normal services, and will show
+    up in the output of <command>systemctl list-units</command>. Execution in this case is synchronous, and
+    will return only when the command finishes. This mode is enabled via the <option>--scope</option> switch
+    (see below).</para>
 
     <para>If a command is run with path, socket, or timer options such as <option>--on-calendar=</option> (see below),
     a transient path, socket, or timer unit is created alongside the service unit for the specified command. Only the
@@ -81,15 +82,16 @@
     <filename>.path</filename>, <filename>.socket</filename>, or <filename>.timer</filename> unit that triggers the
     specified unit.</para>
 
-    <para>By default, services created with <command>systemd-run</command> default to the <option>simple</option> type,
-    see the description of <varname>Type=</varname> in
+    <para>By default, services created with <command>systemd-run</command> default to the
+    <option>simple</option> type, see the description of <varname>Type=</varname> in
     <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
-    details. Note that when this type is used the service manager (and thus the <command>systemd-run</command> command)
-    considers service start-up successful as soon as the <function>fork()</function> for the main service process
-    succeeded, i.e. before the <function>execve()</function> is invoked, and thus even if the specified command cannot
-    be started. Consider using the <option>exec</option> service type (i.e. <option>--property=Type=exec</option>) to
-    ensure that <command>systemd-run</command> returns successfully only if the specified command line has been
-    successfully started.</para>
+    details. Note that when this type is used, the service manager (and thus the
+    <command>systemd-run</command> command) considers service start-up successful as soon as the
+    <function>fork()</function> for the main service process succeeded, i.e. before the
+    <function>execve()</function> is invoked, and thus even if the specified command cannot be started.
+    Consider using the <option>exec</option> service type (i.e. <option>--property=Type=exec</option>) to
+    ensure that <command>systemd-run</command> returns successfully only if the specified command line has
+    been successfully started.</para>
   </refsect1>
 
   <refsect1>
@@ -234,16 +236,20 @@
         <term><option>--same-dir</option></term>
         <term><option>-d</option></term>
 
-        <listitem><para>Similar to <option>--working-directory=</option> but uses the current working directory of the
-        caller for the service to execute.</para></listitem>
+        <listitem><para>Similar to <option>--working-directory=</option>, but uses the current working
+        directory of the caller for the service to execute.</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><option>-E <replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
-        <term><option>--setenv=<replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
+        <term><option>-E <replaceable>NAME</replaceable>[=<replaceable>VALUE</replaceable>]</option></term>
+        <term><option>--setenv=<replaceable>NAME</replaceable>[=<replaceable>VALUE</replaceable>]</option></term>
 
-        <listitem><para>Runs the service process with the specified environment variable set.
-        Also see <varname>Environment=</varname> in
+        <listitem><para>Runs the service process with the specified environment variable set. This parameter
+        may be used more than once to set multiple variables. When <literal>=</literal> and
+        <replaceable>VALUE</replaceable> are omitted, the value of the variable with the same name in the
+        program environment will be used.</para>
+
+        <para>Also see <varname>Environment=</varname> in
         <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
         </listitem>
       </varlistentry>
@@ -283,7 +289,7 @@
         to the service processes as-is. If the service runs with different privileges than
         <command>systemd-run</command>, this means the service might not be able to re-open the passed file
         descriptors, due to normal file descriptor access restrictions. If the invoked process is a shell script that
-        uses the <command>echo "hello" > /dev/stderr</command> construct for writing messages to stderr, this might
+        uses the <command>echo "hello" >/dev/stderr</command> construct for writing messages to stderr, this might
         cause problems, as this only works if stderr can be re-opened. To mitigate this use the construct <command>echo
         "hello" >&amp;2</command> instead, which is mostly equivalent and avoids this pitfall.</para></listitem>
       </varlistentry>
@@ -350,9 +356,9 @@
         <term><option>--socket-property=</option></term>
         <term><option>--timer-property=</option></term>
 
-        <listitem><para>Sets a property on the path, socket, or timer unit that is created. This option is similar to
-        <option>--property=</option> but applies to the transient path, socket, or timer unit rather than the
-        transient service unit created. This option takes an assignment in the same format as
+        <listitem><para>Sets a property on the path, socket, or timer unit that is created. This option is
+        similar to <option>--property=</option>, but applies to the transient path, socket, or timer unit
+        rather than the transient service unit created. This option takes an assignment in the same format as
         <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
         <command>set-property</command> command. These options may not be combined with
         <option>--scope</option> or <option>--pty</option>.</para>
@@ -406,10 +412,8 @@
       <xi:include href="standard-options.xml" xpointer="version" />
     </variablelist>
 
-    <para>All command line arguments after the first non-option
-    argument become part of the command line of the launched
-    process. If a command is run as service unit, the first argument
-    needs to be an absolute program path.</para>
+    <para>All command line arguments after the first non-option argument become part of the command line of
+    the launched process.</para>
   </refsect1>
 
   <refsect1>
@@ -443,14 +447,13 @@
     <example>
       <title>Limiting resources available to a command</title>
 
-      <programlisting># systemd-run -p BlockIOWeight=10 updatedb</programlisting>
+      <programlisting># systemd-run -p IOWeight=10 updatedb</programlisting>
 
-      <para>This command invokes the
-      <citerefentry project='man-pages'><refentrytitle>updatedb</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      <para>This command invokes the <citerefentry
+      project='man-pages'><refentrytitle>updatedb</refentrytitle><manvolnum>8</manvolnum></citerefentry>
       tool, but lowers the block I/O weight for it to 10. See
       <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-      for more information on the <varname>BlockIOWeight=</varname>
-      property.</para>
+      for more information on the <varname>IOWeight=</varname> property.</para>
     </example>
 
     <example>
@@ -475,10 +478,10 @@
     <example>
       <title>Allowing access to the tty</title>
 
-      <para>The following command invokes <filename>/bin/bash</filename> as a service
-      passing its standard input, output and error to the calling TTY.</para>
+      <para>The following command invokes <citerefentry project='man-pages'><refentrytitle>bash</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+      as a service passing its standard input, output and error to the calling TTY.</para>
 
-      <programlisting># systemd-run -t --send-sighup /bin/bash</programlisting>
+      <programlisting># systemd-run -t --send-sighup bash</programlisting>
     </example>
 
     <example>
diff --git a/man/systemd-sleep.conf.xml b/man/systemd-sleep.conf.xml
index 0c01ecf..f8f1694 100644
--- a/man/systemd-sleep.conf.xml
+++ b/man/systemd-sleep.conf.xml
@@ -77,11 +77,16 @@
       <varlistentry>
         <term>suspend-then-hibernate</term>
 
-        <listitem><para>A low power state where the system is initially suspended
-        (the state is stored in RAM). If not interrupted within the delay specified by
-        <command>HibernateDelaySec=</command>, the system will be woken using an RTC
-        alarm and hibernated (the state is then stored on disk).
-        </para></listitem>
+        <listitem>
+          <para>A low power state where the system is initially suspended (the state is stored in
+          RAM). If the system supports low-battery alarms (ACPI _BTP), then the system will be woken up by
+          the ACPI low-battery signal and hibernated (the state is then stored on disk). Also, if not
+          interrupted within the timespan specified by <varname>HibernateDelaySec=</varname> or the estimated
+          timespan until the system battery charge level goes down to 5%, then the system will be woken up by the
+          RTC alarm and hibernated. The estimated timespan is calculated from the change of the battery
+          capacity level after the time specified by <varname>SuspendEstimationSec=</varname> or when
+          the system is woken up from the suspend.</para>
+        </listitem>
       </varlistentry>
 
     </variablelist>
@@ -171,13 +176,28 @@
         uses the value of <varname>SuspendState=</varname> when suspending and the value of <varname>HibernateState=</varname> when hibernating.
         </para></listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>HibernateDelaySec=</varname></term>
 
-        <listitem><para>The amount of time the system spends in suspend mode before the system is
-        automatically put into hibernate mode, when using
-        <citerefentry><refentrytitle>systemd-suspend-then-hibernate.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>. Defaults
-        to 2h.</para></listitem>
+        <listitem>
+          <para>The amount of time the system spends in suspend mode before the system is
+          automatically put into hibernate mode. Only used by
+          <citerefentry><refentrytitle>systemd-suspend-then-hibernate.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          If the system has a battery, then defaults to the estimated timespan until the system battery charge level goes down to 5%.
+          If the system has no battery, then defaults to 2h.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>SuspendEstimationSec=</varname></term>
+
+        <listitem>
+          <para>The RTC alarm will wake the system after the specified timespan to measure the system battery
+          capacity level and estimate battery discharging rate, which is used for estimating timespan until the system battery charge
+          level goes down to 5%. Only used by
+          <citerefentry><refentrytitle>systemd-suspend-then-hibernate.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          Defaults to 1h.</para></listitem>
       </varlistentry>
     </variablelist>
   </refsect1>
diff --git a/man/systemd-stdio-bridge.xml b/man/systemd-stdio-bridge.xml
new file mode 100644
index 0000000..0dce565
--- /dev/null
+++ b/man/systemd-stdio-bridge.xml
@@ -0,0 +1,91 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd-stdio-bridge"
+  xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>systemd-stdio-bridge</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-stdio-bridge</refentrytitle>
+    <manvolnum>1</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-stdio-bridge</refname>
+    <refpurpose>D-Bus proxy</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>systemd-stdio-bridge</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><command>systemd-stdio-bridge</command> implements a proxy between STDIN/STDOUT and a D-Bus bus. It
+    expects to receive an open connection via STDIN/STDOUT when started, and will create a new connection to
+    the specified bus. It will then forward messages between the two connections. This program is suitable
+    for socket activation: the first connection may be a pipe or a socket and must be passed as either
+    standard input, or as an open file descriptor according to the protocol described in
+    <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>. The
+    second connection will be made by default to the local system bus, but this can be influenced by the
+    <option>--user</option>, <option>--system</option>, <option>--machine=</option>, and
+    <option>--bus-path=</option> options described below.</para>
+
+    <para><citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry> uses
+    <command>systemd-stdio-bridge</command> to forward D-Bus connections over
+    <citerefentry project='die-net'><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+    or to connect to the bus of a different user, see
+    <citerefentry><refentrytitle>sd_bus_set_address</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <para>The following options are understood:</para>
+
+    <variablelist>
+      <xi:include href="user-system-options.xml" xpointer="user" />
+      <xi:include href="user-system-options.xml" xpointer="system" />
+      <xi:include href="user-system-options.xml" xpointer="machine" />
+
+      <varlistentry>
+          <term><option>-p <replaceable>PATH</replaceable></option></term>
+          <term><option>--bus-path=<replaceable>PATH</replaceable></option></term>
+
+          <listitem><para>Path to the bus address. Default: <literal>unix:path=/run/dbus/system_bus_socket</literal>
+          </para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="help" />
+      <xi:include href="standard-options.xml" xpointer="version" />
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Exit status</title>
+
+    <para>On success, 0 is returned, a non-zero failure code otherwise.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry project='dbus'><refentrytitle>dbus-daemon</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry project='dbus'><refentrytitle>dbus-broker</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <ulink url="https://www.freedesktop.org/wiki/Software/dbus">D-Bus</ulink>,
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-stub.xml b/man/systemd-stub.xml
new file mode 100644
index 0000000..c230168
--- /dev/null
+++ b/man/systemd-stub.xml
@@ -0,0 +1,402 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd-stub" conditional='HAVE_GNU_EFI'
+    xmlns:xi="http://www.w3.org/2001/XInclude">
+  <refentryinfo>
+    <title>systemd-stub</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-stub</refentrytitle>
+    <manvolnum>7</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-stub</refname>
+    <refname>sd-stub</refname>
+    <refname>linuxx64.efi.stub</refname>
+    <refname>linuxia32.efi.stub</refname>
+    <refname>linuxaa64.efi.stub</refname>
+    <refpurpose>A simple UEFI kernel boot stub</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>/usr/lib/systemd/boot/efi/linuxx64.efi.stub</filename></para>
+    <para><filename>/usr/lib/systemd/boot/efi/linuxia32.efi.stub</filename></para>
+    <para><filename>/usr/lib/systemd/boot/efi/linuxaa64.efi.stub</filename></para>
+    <para><filename><replaceable>ESP</replaceable>/.../<replaceable>foo</replaceable>.efi.extra.d/*.cred</filename></para>
+    <para><filename><replaceable>ESP</replaceable>/.../<replaceable>foo</replaceable>.efi.extra.d/*.raw</filename></para>
+    <para><filename><replaceable>ESP</replaceable>/loader/credentials/*.cred</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><command>systemd-stub</command> (stored in per-architecture files
+    <filename>linuxx64.efi.stub</filename>, <filename>linuxia32.efi.stub</filename>,
+    <filename>linuxaa64.efi.stub</filename> on disk) is a simple UEFI boot stub. An UEFI boot stub is
+    attached to a Linux kernel binary image, and is a piece of code that runs in the UEFI firmware
+    environment before transitioning into the Linux kernel environment. The UEFI boot stub ensures a Linux
+    kernel is executable as regular UEFI binary, and is able to do various preparations before switching the
+    system into the Linux world.</para>
+
+    <para>The UEFI boot stub looks for various resources for the kernel invocation inside the UEFI PE binary
+    itself. This allows combining various resources inside a single PE binary image (usually called "Unified
+    Kernel Image", or "UKI" for short), which may then be signed via UEFI SecureBoot as a whole, covering all
+    individual resources at once. Specifically it may include:</para>
+
+    <itemizedlist>
+      <listitem><para>The ELF Linux kernel images will be looked for in the <literal>.linux</literal> PE
+      section of the executed image.</para></listitem>
+
+      <listitem><para>OS release information, i.e. the
+      <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> file of
+      the OS the kernel belongs to, in the <literal>.osrel</literal> PE section.</para></listitem>
+
+      <listitem><para>The initrd will be loaded from the <literal>.initrd</literal> PE section.
+      </para></listitem>
+
+      <listitem><para>A compiled binary DeviceTree will be looked for in the <literal>.dtb</literal> PE
+      section.</para></listitem>
+
+      <listitem><para>The kernel command line to pass to the invoked kernel will be looked for in the
+      <literal>.cmdline</literal> PE section.</para></listitem>
+
+      <listitem><para>A boot splash (in Windows <filename>.BMP</filename> format) to show on screen before
+      invoking the kernel will be looked for in the <literal>.splash</literal> PE section.</para></listitem>
+
+      <listitem><para>A set of cryptographic signatures for expected TPM2 PCR values when this kernel is
+      booted, in JSON format, in the <literal>.pcrsig</literal> section. This is useful for implementing TPM2
+      policies that bind disk encryption and similar to kernels that are signed by a specific
+      key.</para></listitem>
+
+      <listitem><para>A public key in PEM format matching this TPM2 PCR signature data in the
+      <literal>.pcrpkey</literal> section.</para></listitem>
+    </itemizedlist>
+
+    <para>If UEFI SecureBoot is enabled and the <literal>.cmdline</literal> section is present in the executed
+    image, any attempts to override the kernel command line by passing one as invocation parameters to the
+    EFI binary are ignored. Thus, in order to allow overriding the kernel command line, either disable UEFI
+    SecureBoot, or don't include a kernel command line PE section in the kernel image file. If a command line
+    is accepted via EFI invocation parameters to the EFI binary it is measured into TPM PCR 12 (if a TPM is
+    present).</para>
+
+    <para>If a DeviceTree is embedded in the <literal>.dtb</literal> section, it replaces an existing
+    DeviceTree in the corresponding EFI configuration table. systemd-stub will ask the firmware via the
+    <literal>EFI_DT_FIXUP_PROTOCOL</literal> for hardware specific fixups to the DeviceTree.</para>
+
+    <para>The contents of seven of these eight PE sections are measured into TPM PCR 11, that is otherwise
+    not used. Thus, it can be pre-calculated without too much effort. The <literal>.pcrsig</literal> section
+    is not included in this PCR measurement, since it's supposed to contain signatures for the expected
+    results for these measurements, i.e. of the outputs of the measurement operation, and thus cannot also be
+    input to it.</para>
+
+    <para>When <literal>.pcrsig</literal> and/or <literal>.pcrpkey</literal> are present in a unified kernel
+    image their contents are passed to the booted kernel in an synthetic initrd cpio archive that places them in the
+    <filename>/.extra/tpm2-pcr-signature.json</filename> and
+    <filename>/.extra/tpm2-pcr-public-key.pem</filename> files. Typically, a
+    <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> line then
+    ensures they are copied into <filename>/run/systemd/tpm2-pcr-signature.json</filename> and
+    <filename>/run/systemd/tpm2-pcr-public-key.pem</filename> where they remain accessible even after the
+    system transitions out of the initrd environment into the host file system. Tools such
+    <citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+    <citerefentry><refentrytitle>systemd-cryptenroll</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    and <citerefentry><refentrytitle>systemd-creds</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    will automatically use files present under these paths to unlock protected resources (encrypted storage
+    or credentials) or bind encryption to booted kernels.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Companion Files</title>
+
+    <para>The <command>systemd-stub</command> UEFI boot stub automatically collects two types of auxiliary
+    companion files optionally placed in drop-in directories on the same partition as the EFI binary,
+    dynamically generates <command>cpio</command> initrd archives from them, and passes them to the kernel.
+    Specifically:</para>
+
+    <itemizedlist>
+      <listitem><para>For a kernel binary called <filename><replaceable>foo</replaceable>.efi</filename>, it
+      will look for files with the <filename>.cred</filename> suffix in a directory named
+      <filename><replaceable>foo</replaceable>.efi.extra.d/</filename> next to it. A <command>cpio</command>
+      archive is generated from all files found that way, placing them in the
+      <filename>/.extra/credentials/</filename> directory of the initrd file hierarchy. The main initrd may
+      then access them in this directory. This is supposed to be used to store auxiliary, encrypted,
+      authenticated credentials for use with <varname>LoadCredentialEncrypted=</varname> in the UEFI System
+      Partition. See
+      <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+      and
+      <citerefentry><refentrytitle>systemd-creds</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+      for
+      details on encrypted credentials. The generated <command>cpio</command> archive is measured into TPM
+      PCR 12 (if a TPM is present).</para></listitem>
+
+      <listitem><para>Similarly, files <filename><replaceable>foo</replaceable>.efi.extra.d/*.raw</filename>
+      are packed up in a <command>cpio</command> archive and placed in the <filename>/.extra/sysext/</filename>
+      directory in the initrd file hierarchy. This is supposed to be used to pass additional system extension
+      images to the initrd. See
+      <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry> for
+      details on system extension images. The generated <command>cpio</command> archive containing these
+      system extension images is measured into TPM PCR 13 (if a TPM is present).</para></listitem>
+
+      <listitem><para>Files <filename>/loader/credentials/*.cred</filename> are packed up in a
+      <command>cpio</command> archive and placed in the <filename>/.extra/global_credentials/</filename>
+      directory of the initrd file hierarchy. This is supposed to be used to pass additional credentials to
+      the initrd, regardless of the kernel being booted. The generated <command>cpio</command> archive is
+      measured into TPM PCR 12 (if a TPM is present)</para></listitem>
+    </itemizedlist>
+
+    <para>These mechanisms may be used to parameterize and extend trusted (i.e. signed), immutable initrd
+    images in a reasonably safe way: all data they contain is measured into TPM PCRs. On access they should be
+    further validated: in case of the credentials case by encrypting/authenticating them via TPM, as exposed
+    by <command>systemd-creds encrypt -T</command> (see
+    <citerefentry><refentrytitle>systemd-creds</refentrytitle><manvolnum>1</manvolnum></citerefentry> for
+    details); in case of the system extension images by using signed Verity images.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>TPM PCR Notes</title>
+
+    <para>Note that when a unified kernel using <command>systemd-stub</command> is invoked the firmware will
+    measure it as a whole to TPM PCR 4, covering all embedded resources, such as the stub code itself, the
+    core kernel, the embedded initrd and kernel command line (see above for a full list).</para>
+
+    <para>Also note that the Linux kernel will measure all initrds it receives into TPM PCR 9. This means
+    every type of initrd will be measured two or three times: the initrd embedded in the kernel image will be
+    measured to PCR 4, PCR 9 and PCR 11; the initrd synthesized from credentials will be measured to both PCR
+    9 and PCR 12; the initrd synthesized from system extensions will be measured to both PCR 4 and PCR
+    9. Let's summarize the OS resources and the PCRs they are measured to:</para>
+
+    <table>
+      <title>OS Resource PCR Summary</title>
+
+      <tgroup cols='2' align='left' colsep='1' rowsep='1'>
+        <colspec colname="pcr" />
+        <colspec colname="definition" />
+
+        <thead>
+          <row>
+            <entry>OS Resource</entry>
+            <entry>Measurement PCR</entry>
+          </row>
+        </thead>
+
+        <tbody>
+          <row>
+            <entry><command>systemd-stub</command> code (the entry point of the unified PE binary)</entry>
+            <entry>4</entry>
+          </row>
+
+          <row>
+            <entry>Core kernel code (embedded in unified PE binary)</entry>
+            <entry>4 + 11</entry>
+          </row>
+
+          <row>
+            <entry>OS release information (embedded in the unified PE binary)</entry>
+            <entry>4 + 11</entry>
+          </row>
+
+          <row>
+            <entry>Main initrd (embedded in unified PE binary)</entry>
+            <entry>4 + 9 + 11</entry>
+          </row>
+
+          <row>
+            <entry>Default kernel command line (embedded in unified PE binary)</entry>
+            <entry>4 + 11</entry>
+          </row>
+
+          <row>
+            <entry>Overridden kernel command line</entry>
+            <entry>12</entry>
+          </row>
+
+          <row>
+            <entry>Boot splash (embedded in the unified PE binary)</entry>
+            <entry>4 + 11</entry>
+          </row>
+
+          <row>
+            <entry>TPM2 PCR signature JSON (embedded in unified PE binary, synthesized into initrd)</entry>
+            <entry>4 + 9</entry>
+          </row>
+
+          <row>
+            <entry>TPM2 PCR PEM public key (embedded in unified PE binary, synthesized into initrd)</entry>
+            <entry>4 + 9 + 11</entry>
+          </row>
+
+          <row>
+            <entry>Credentials (synthesized initrd from companion files)</entry>
+            <entry>9 + 12</entry>
+          </row>
+
+          <row>
+            <entry>System Extensions (synthesized initrd from companion files)</entry>
+            <entry>9 + 13</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </table>
+  </refsect1>
+
+  <refsect1>
+    <title>EFI Variables</title>
+
+    <para>The following EFI variables are defined, set and read by <command>systemd-stub</command>, under the
+    vendor UUID <literal>4a67b082-0a4c-41cf-b6c7-440b29bb8c4f</literal>, for communication between the boot
+    stub and the OS:</para>
+
+    <variablelist class='efi-variables'>
+      <varlistentry>
+        <term><varname>LoaderDevicePartUUID</varname></term>
+
+        <listitem><para>Contains the partition UUID of the EFI System Partition the EFI image was run
+        from. <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        uses this information to automatically find the disk booted from, in order to discover various other
+        partitions on the same disk automatically.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>LoaderFirmwareInfo</varname></term>
+        <term><varname>LoaderFirmwareType</varname></term>
+
+        <listitem><para>Brief firmware information. Use
+        <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> to view this
+        data.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>LoaderImageIdentifier</varname></term>
+
+        <listitem><para>The path of EFI executable, relative to the EFI System Partition's root
+        directory. Use
+        <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> to view
+        this data.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>StubInfo</varname></term>
+
+        <listitem><para>Brief stub information. Use
+        <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> to view
+        this data.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>StubPcrKernelImage</varname></term>
+
+        <listitem><para>The PCR register index the kernel image, initrd image, boot splash, devicetree
+        database, and the embedded command line are measured into, formatted as decimal ASCII string (e.g.
+        <literal>11</literal>). This variable is set if a measurement was successfully completed, and remains
+        unset otherwise.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>StubPcrKernelParameters</varname></term>
+
+        <listitem><para>The PCR register index the kernel command line and credentials are measured into,
+        formatted as decimal ASCII string (e.g. <literal>12</literal>). This variable is set if a measurement
+        was successfully completed, and remains unset otherwise.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>StubPcrInitRDSysExts</varname></term>
+
+        <listitem><para>The PCR register index the systemd extensions for the initrd, which are picked up
+        from the file system the kernel image is located on. Formatted as decimal ASCII string (e.g.
+        <literal>13</literal>). This variable is set if a measurement was successfully completed, and remains
+        unset otherwise.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>Note that some of the variables above may also be set by the boot loader. The stub will only set
+    them if they aren't set already. Some of these variables are defined by the <ulink
+    url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>initrd Resources</title>
+
+    <para>The following resources are passed as initrd cpio archives to the booted kernel, and thus make up
+    the initial file system hierarchy in the initrd execution environment:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><filename>/</filename></term>
+
+        <listitem><para>The main initrd from the <literal>.initrd</literal> PE section of the unified kernel image.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><filename>/.extra/credentials/*.cred</filename></term>
+        <listitem><para>Credential files (suffix <literal>.cred</literal>) that are placed next to the
+        unified kernel image (as described above) are copied into the
+        <filename>/.extra/credentials/</filename> directory in the initrd execution
+        environment.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><filename>/.extra/global_credentials/*.cred</filename></term>
+        <listitem><para>Similar, credential files in the <filename>/loader/credentials/</filename> directory
+        in the file system the unified kernel image is placed in are copied into the
+        <filename>/.extra/global_credentials/</filename> directory in the initrd execution
+        environment.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><filename>/.extra/sysext/*.raw</filename></term>
+        <listitem><para>System extension image files (suffix <literal>.raw</literal>) that are placed next to
+        the unified kernel image (as described above) are copied into the
+        <filename>/.extra/sysext/</filename> directory in the initrd execution environment.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><filename>/.extra/tpm2-pcr-signature.json</filename></term>
+        <listitem><para>The TPM2 PCR signature JSON object included in the <literal>.pcrsig</literal> PE
+        section of the unified kernel image is copied into the
+        <filename>/.extra/tpm2-pcr-signature.json</filename> file in the initrd execution
+        environment.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><filename>/.extra/tpm2-pcr-pkey.pem</filename></term>
+        <listitem><para>The PEM public key included in the <literal>.pcrpkey</literal> PE section of the
+        unified kernel image is copied into the <filename>/.extra/tpm2-pcr-public-key.pem</filename> file in
+        the initrd execution environment.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>Note that all these files are located in the <literal>tmpfs</literal> file system the kernel sets
+    up for the initrd file hierarchy and are thus lost when the system transitions from the initrd execution
+    environment into the host file system. If these resources shall be kept around over this transition they
+    need to be copied to a place that survives the transition first, for example via a suitable
+    <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> line. By
+    default, this is done for the TPM2 PCR signature and public key files.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Assembling Kernel Images</title>
+
+    <para>In order to assemble a bootable Unified Kernel Image from various components as described above, use
+    <citerefentry><refentrytitle>ukify</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-creds</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>,
+      <ulink url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>,
+      <citerefentry><refentrytitle>ukify</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/systemd-sysctl.service.xml b/man/systemd-sysctl.service.xml
index 751aa2b..fede8b0 100644
--- a/man/systemd-sysctl.service.xml
+++ b/man/systemd-sysctl.service.xml
@@ -64,6 +64,14 @@
           <para>Only apply rules with the specified prefix.</para>
         </listitem>
       </varlistentry>
+      <varlistentry id='strict'>
+        <term><option>--strict=</option></term>
+        <listitem>
+          <para>Always return non-zero exit code on failure (including invalid sysctl variable
+          name and insufficient permissions), unless the sysctl variable name is prefixed with a "-"
+          character.</para>
+        </listitem>
+      </varlistentry>
 
       <xi:include href="standard-options.xml" xpointer="cat-config" />
       <xi:include href="standard-options.xml" xpointer="no-pager" />
@@ -74,6 +82,30 @@
   </refsect1>
 
   <refsect1>
+    <title>Credentials</title>
+
+    <para><command>systemd-sysctl</command> supports the service credentials logic as implemented by
+    <varname>LoadCredential=</varname>/<varname>SetCredential=</varname> (see
+    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>1</manvolnum></citerefentry> for
+    details). The following credentials are used when passed in:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><literal>sysctl.extra</literal></term>
+
+        <listitem><para>The contents of this credential may contain additional lines to operate on. The
+        credential contents should follow the same format as any other <filename>sysctl.d/</filename> drop-in
+        configuration file. If this credential is passed it is processed after all of the drop-in files read
+        from the file system. The settings configured in the credential hence take precedence over those in
+        the file system.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>Note that by default the <filename>systemd-sysctl.service</filename> unit file is set up to inherit
+    the <literal>sysctl.extra</literal> credential from the service manager.</para>
+  </refsect1>
+
+  <refsect1>
     <title>Examples</title>
 
     <example>
@@ -122,7 +154,7 @@
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-      <citerefentry project='man-pages'><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/systemd-sysext.xml b/man/systemd-sysext.xml
index f8a9f47..39a16d8 100644
--- a/man/systemd-sysext.xml
+++ b/man/systemd-sysext.xml
@@ -26,6 +26,7 @@
     <cmdsynopsis>
       <command>systemd-sysext</command>
       <arg choice="opt" rep="repeat">OPTIONS</arg>
+      <arg choice="plain">COMMAND</arg>
     </cmdsynopsis>
 
     <para><literallayout><filename>systemd-sysext.service</filename></literallayout></para>
@@ -64,20 +65,21 @@
 
     <para>System extensions are supposed to be purely additive, i.e. they are supposed to include only files
     that do not exist in the underlying basic OS image. However, the underlying mechanism (overlayfs) also
-    allows removing files, but it is recommended not to make use of this.</para>
+    allows overlaying or removing files, but it is recommended not to make use of this.</para>
 
     <para>System extension images may be provided in the following formats:</para>
 
     <orderedlist>
       <listitem><para>Plain directories or btrfs subvolumes containing the OS tree</para></listitem>
       <listitem><para>Disk images with a GPT disk label, following the <ulink
-      url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink></para></listitem>
-      <listitem><para>Disk images lacking a partition table, with a naked Linux file system (e.g. squashfs or ext4)</para></listitem>
+      url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink></para></listitem>
+      <listitem><para>Disk images lacking a partition table, with a naked Linux file system (e.g. erofs,
+      squashfs or ext4)</para></listitem>
     </orderedlist>
 
     <para>These image formats are the same ones that
     <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    supports via it's <option>--directory=</option>/<option>--image=</option> switches and those that the
+    supports via its <option>--directory=</option>/<option>--image=</option> switches and those that the
     service manager supports via <option>RootDirectory=</option>/<option>RootImage=</option>. Similar to
     them they may optionally carry Verity authentication information.</para>
 
@@ -92,33 +94,40 @@
 
     <para>During boot OS extension images are activated automatically, if the
     <filename>systemd-sysext.service</filename> is enabled. Note that this service runs only after the
-    underlying file systems where system extensions are searched are mounted. This means they are not
+    underlying file systems where system extensions may be located have been mounted. This means they are not
     suitable for shipping resources that are processed by subsystems running in earliest boot. Specifically,
     OS extension images are not suitable for shipping system services or
     <citerefentry><refentrytitle>systemd-sysusers</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-    definitions. See <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services</ulink> for a simple
-    mechanism for shipping system services in disk images, in a similar fashion to OS extensions. Note the
-    different isolation on these two mechanisms: while system extension directly extend the underlying OS
-    image with additional files that appear in a way very similar to as if they were shipped in the OS image
-    itself and thus imply no security isolation, portable services imply service level sandboxing in one way
-    or another. The <filename>systemd-sysext.service</filename> service is guaranteed to finish start-up
-    before <filename>basic.target</filename> is reached; i.e. at the time regular services initialize (those
-    which do not use <varname>DefaultDependencies=no</varname>), the files and directories system extensions
-    provide are available in <filename>/usr/</filename> and <filename>/opt/</filename> and may be
-    accessed.</para>
+    definitions. See the <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services Documentation</ulink>
+    for a simple mechanism for shipping system services in disk images, in a similar fashion to OS
+    extensions. Note the different isolation on these two mechanisms: while system extension directly extend
+    the underlying OS image with additional files that appear in a way very similar to as if they were
+    shipped in the OS image itself and thus imply no security isolation, portable services imply service
+    level sandboxing in one way or another. The <filename>systemd-sysext.service</filename> service is
+    guaranteed to finish start-up before <filename>basic.target</filename> is reached; i.e. at the time
+    regular services initialize (those which do not use <varname>DefaultDependencies=no</varname>), the files
+    and directories system extensions provide are available in <filename>/usr/</filename> and
+    <filename>/opt/</filename> and may be accessed.</para>
 
     <para>Note that there is no concept of enabling/disabling installed system extension images: all
-    installed extension images are automatically activated at boot.</para>
+    installed extension images are automatically activated at boot. However, you can place an empty directory
+    named like the extension (no <filename>.raw</filename>) in <filename>/etc/extensions/</filename> to "mask"
+    an extension with the same name in a system folder with lower precedence.</para>
 
     <para>A simple mechanism for version compatibility is enforced: a system extension image must carry a
     <filename>/usr/lib/extension-release.d/extension-release.<replaceable>$name</replaceable></filename>
     file, which must match its image name, that is compared with the host <filename>os-release</filename>
-    file: the contained <varname>ID=</varname> fields have to match, as well as the
-    <varname>SYSEXT_LEVEL=</varname> field (if defined). If the latter is not defined, the
-    <varname>VERSION_ID=</varname> field has to match instead. System extensions should not ship a
-    <filename>/usr/lib/os-release</filename> file (as that would be merged into the host
-    <filename>/usr/</filename> tree, overriding the host OS version data, which is not desirable). The
-    <filename>extension-release</filename> file follows the same format and semantics, and carries the same
+    file: the contained <varname>ID=</varname> fields have to match unless <literal>_any</literal> is set
+    for the extension. If the extension <varname>ID=</varname> is not <literal>_any</literal>, the
+    <varname>SYSEXT_LEVEL=</varname> field (if defined) has to match. If the latter is not defined, the
+    <varname>VERSION_ID=</varname> field has to match instead. If the extension defines the
+    <varname>ARCHITECTURE=</varname> field and the value is not <literal>_any</literal> it has to match the kernel's
+    architecture reported by <citerefentry><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+    but the used architecture identifiers are the same as for <varname>ConditionArchitecture=</varname>
+    described in <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    System extensions should not ship a <filename>/usr/lib/os-release</filename> file (as that would be merged
+    into the host <filename>/usr/</filename> tree, overriding the host OS version data, which is not desirable).
+    The <filename>extension-release</filename> file follows the same format and semantics, and carries the same
     content, as the <filename>os-release</filename> file of the OS, but it describes the resources carried
     in the extension image.</para>
   </refsect1>
diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
index 5824e01..0ceda1e 100644
--- a/man/systemd-system.conf.xml
+++ b/man/systemd-system.conf.xml
@@ -133,33 +133,92 @@
         <term><varname>RebootWatchdogSec=</varname></term>
         <term><varname>KExecWatchdogSec=</varname></term>
 
-        <listitem><para>Configure the hardware watchdog at runtime and at reboot. Takes a timeout value in seconds (or
-        in other time units if suffixed with <literal>ms</literal>, <literal>min</literal>, <literal>h</literal>,
-        <literal>d</literal>, <literal>w</literal>). If <varname>RuntimeWatchdogSec=</varname> is set to a non-zero
-        value, the watchdog hardware (<filename>/dev/watchdog</filename> or the path specified with
-        <varname>WatchdogDevice=</varname> or the kernel option <varname>systemd.watchdog-device=</varname>) will be
-        programmed to automatically reboot the system if it is not contacted within the specified timeout interval. The
-        system manager will ensure to contact it at least once in half the specified timeout interval. This feature
-        requires a hardware watchdog device to be present, as it is commonly the case in embedded and server
-        systems. Not all hardware watchdogs allow configuration of all possible reboot timeout values, in which case
-        the closest available timeout is picked. <varname>RebootWatchdogSec=</varname> may be used to configure the
-        hardware watchdog when the system is asked to reboot. It works as a safety net to ensure that the reboot takes
-        place even if a clean reboot attempt times out. Note that the <varname>RebootWatchdogSec=</varname> timeout
-        applies only to the second phase of the reboot, i.e. after all regular services are already terminated, and
-        after the system and service manager process (PID 1) got replaced by the <filename>systemd-shutdown</filename>
-        binary, see system <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-        for details. During the first phase of the shutdown operation the system and service manager remains running
-        and hence <varname>RuntimeWatchdogSec=</varname> is still honoured. In order to define a timeout on this first
-        phase of system shutdown, configure <varname>JobTimeoutSec=</varname> and <varname>JobTimeoutAction=</varname>
-        in the [Unit] section of the <filename>shutdown.target</filename> unit. By default
-        <varname>RuntimeWatchdogSec=</varname> defaults to 0 (off), and <varname>RebootWatchdogSec=</varname> to
-        10min. <varname>KExecWatchdogSec=</varname> may be used to additionally enable the watchdog when kexec
-        is being executed rather than when rebooting. Note that if the kernel does not reset the watchdog on kexec (depending
-        on the specific hardware and/or driver), in this case the watchdog might not get disabled after kexec succeeds
-        and thus the system might get rebooted, unless <varname>RuntimeWatchdogSec=</varname> is also enabled at the same time.
-        For this reason it is recommended to enable <varname>KExecWatchdogSec=</varname> only if
-        <varname>RuntimeWatchdogSec=</varname> is also enabled.
-        These settings have no effect if a hardware watchdog is not available.</para></listitem>
+        <listitem><para>Configure the hardware watchdog at runtime and at reboot. Takes a timeout value in
+        seconds (or in other time units if suffixed with <literal>ms</literal>, <literal>min</literal>,
+        <literal>h</literal>, <literal>d</literal>, <literal>w</literal>), or the special strings
+        <literal>off</literal> or <literal>default</literal>. If set to <literal>off</literal>
+        (alternatively: <literal>0</literal>) the watchdog logic is disabled: no watchdog device is opened,
+        configured, or pinged. If set to the special string <literal>default</literal> the watchdog is opened
+        and pinged in regular intervals, but the timeout is not changed from the default. If set to any other
+        time value the watchdog timeout is configured to the specified value (or a value close to it,
+        depending on hardware capabilities).</para>
+
+        <para>If <varname>RuntimeWatchdogSec=</varname> is set to a non-zero value, the watchdog hardware
+        (<filename>/dev/watchdog0</filename> or the path specified with <varname>WatchdogDevice=</varname> or
+        the kernel option <varname>systemd.watchdog-device=</varname>) will be programmed to automatically
+        reboot the system if it is not contacted within the specified timeout interval. The system manager
+        will ensure to contact it at least once in half the specified timeout interval. This feature requires
+        a hardware watchdog device to be present, as it is commonly the case in embedded and server
+        systems. Not all hardware watchdogs allow configuration of all possible reboot timeout values, in
+        which case the closest available timeout is picked.</para>
+
+        <para><varname>RebootWatchdogSec=</varname> may be used to configure the hardware watchdog when the
+        system is asked to reboot. It works as a safety net to ensure that the reboot takes place even if a
+        clean reboot attempt times out. Note that the <varname>RebootWatchdogSec=</varname> timeout applies
+        only to the second phase of the reboot, i.e. after all regular services are already terminated, and
+        after the system and service manager process (PID 1) got replaced by the
+        <filename>systemd-shutdown</filename> binary, see system
+        <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
+        details. During the first phase of the shutdown operation the system and service manager remains
+        running and hence <varname>RuntimeWatchdogSec=</varname> is still honoured. In order to define a
+        timeout on this first phase of system shutdown, configure <varname>JobTimeoutSec=</varname> and
+        <varname>JobTimeoutAction=</varname> in the [Unit] section of the
+        <filename>shutdown.target</filename> unit. By default <varname>RuntimeWatchdogSec=</varname> defaults
+        to 0 (off), and <varname>RebootWatchdogSec=</varname> to 10min.</para>
+
+        <para><varname>KExecWatchdogSec=</varname> may be used to additionally enable the watchdog when kexec
+        is being executed rather than when rebooting. Note that if the kernel does not reset the watchdog on
+        kexec (depending on the specific hardware and/or driver), in this case the watchdog might not get
+        disabled after kexec succeeds and thus the system might get rebooted, unless
+        <varname>RuntimeWatchdogSec=</varname> is also enabled at the same time.  For this reason it is
+        recommended to enable <varname>KExecWatchdogSec=</varname> only if
+        <varname>RuntimeWatchdogSec=</varname> is also enabled.</para>
+
+        <para>These settings have no effect if a hardware watchdog is not available.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RuntimeWatchdogPreSec=</varname></term>
+
+        <listitem><para>Configure the hardware watchdog device pre-timeout value.
+        Takes a timeout value in seconds (or in other time units similar to
+        <varname>RuntimeWatchdogSec=</varname>). A watchdog pre-timeout is a
+        notification generated by the watchdog before the watchdog reset might
+        occur in the event the watchdog has not been serviced. This notification
+        is handled by the kernel and can be configured to take an action (i.e.
+        generate a kernel panic) using <varname>RuntimeWatchdogPreGovernor=</varname>.
+        Not all watchdog hardware or drivers support generating a pre-timeout and
+        depending on the state of the system, the kernel may be unable to take the
+        configured action before the watchdog reboot. The watchdog will be configured
+        to generate the pre-timeout event at the amount of time specified by
+        <varname>RuntimeWatchdogPreSec=</varname> before the runtime watchdog timeout
+        (set by <varname>RuntimeWatchdogSec=</varname>). For example, if the we have
+        <varname>RuntimeWatchdogSec=30</varname> and
+        <varname>RuntimeWatchdogPreSec=10</varname>, then the pre-timeout event
+        will occur if the watchdog has not pinged for 20s (10s before the
+        watchdog would fire). By default, <varname>RuntimeWatchdogPreSec=</varname>
+        defaults to 0 (off). The value set for <varname>RuntimeWatchdogPreSec=</varname>
+        must be smaller than the timeout value for <varname>RuntimeWatchdogSec=</varname>.
+        This setting has no effect if a hardware watchdog is not available or the
+        hardware watchdog does not support a pre-timeout and will be ignored by the
+        kernel if the setting is greater than the actual watchdog timeout.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RuntimeWatchdogPreGovernor=</varname></term>
+
+        <listitem><para>Configure the action taken by the hardware watchdog device
+        when the pre-timeout expires. The default action for the pre-timeout event
+        depends on the kernel configuration, but it is usually to log a kernel
+        message. For a list of valid actions available for a given watchdog device,
+        check the content of the
+        <filename>/sys/class/watchdog/watchdog<replaceable>X</replaceable>/pretimeout_available_governors</filename>
+        file. Typically, available governor types are <varname>noop</varname> and <varname>panic</varname>.
+        Availability, names and functionality might vary depending on the specific device driver
+        in use. If the <filename>pretimeout_available_governors</filename> sysfs file is empty,
+        the governor might be built as a kernel module and might need to be manually loaded
+        (e.g. <varname>pretimeout_noop.ko</varname>), or the watchdog device might not support
+        pre-timeouts.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -167,7 +226,7 @@
 
         <listitem><para>Configure the hardware watchdog device that the
         runtime and shutdown watchdog timers will open and use. Defaults
-        to <filename>/dev/watchdog</filename>. This setting has no
+        to <filename>/dev/watchdog0</filename>. This setting has no
         effect if a hardware watchdog is not available.</para></listitem>
       </varlistentry>
 
@@ -204,7 +263,7 @@
         on executables with setuid or setgid bits and will thus not
         function properly with this option enabled. Individual units
         cannot disable this option.
-        Also see <ulink url="https://www.kernel.org/doc/html/latest/userspace-api/no_new_privs.html">No New Privileges Flag</ulink>.
+        Also see <ulink url="https://docs.kernel.org/userspace-api/no_new_privs.html">No New Privileges Flag</ulink>.
         </para></listitem>
       </varlistentry>
 
@@ -290,25 +349,32 @@
         <term><varname>DefaultTimeoutAbortSec=</varname></term>
         <term><varname>DefaultRestartSec=</varname></term>
 
-        <listitem><para>Configures the default timeouts for starting,
-        stopping and aborting of units, as well as the default time to sleep
-        between automatic restarts of units, as configured per-unit in
-        <varname>TimeoutStartSec=</varname>,
-        <varname>TimeoutStopSec=</varname>,
-        <varname>TimeoutAbortSec=</varname> and
-        <varname>RestartSec=</varname> (for services, see
+        <listitem><para>Configures the default timeouts for starting, stopping and aborting of units, as well
+        as the default time to sleep between automatic restarts of units, as configured per-unit in
+        <varname>TimeoutStartSec=</varname>, <varname>TimeoutStopSec=</varname>,
+        <varname>TimeoutAbortSec=</varname> and <varname>RestartSec=</varname> (for services, see
         <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-        for details on the per-unit settings). Disabled by default, when
-        service with <varname>Type=oneshot</varname> is used.
-        For non-service units,
-        <varname>DefaultTimeoutStartSec=</varname> sets the default
-        <varname>TimeoutSec=</varname>
-        value. <varname>DefaultTimeoutStartSec=</varname> and
-        <varname>DefaultTimeoutStopSec=</varname> default to
-        90s. <varname>DefaultTimeoutAbortSec=</varname> is not set by default
-        so that all units fall back to <varname>TimeoutStopSec=</varname>.
-        <varname>DefaultRestartSec=</varname> defaults to
-        100ms.</para></listitem>
+        for details on the per-unit settings). For non-service units,
+        <varname>DefaultTimeoutStartSec=</varname> sets the default <varname>TimeoutSec=</varname> value.
+        </para>
+
+        <para><varname>DefaultTimeoutStartSec=</varname> and <varname>DefaultTimeoutStopSec=</varname>
+        default to &DEFAULT_TIMEOUT; in the system manager and &DEFAULT_USER_TIMEOUT; in the user manager.
+        <varname>DefaultTimeoutAbortSec=</varname> is not set by default so that all units fall back to
+        <varname>TimeoutStopSec=</varname>. <varname>DefaultRestartSec=</varname> defaults to 100 ms.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DefaultDeviceTimeoutSec=</varname></term>
+
+        <listitem><para>Configures the default timeout for waiting for devices. It can be changed per
+        device via the <varname>x-systemd.device-timeout=</varname> option in <filename>/etc/fstab</filename>
+        and <filename>/etc/crypttab</filename> (see
+        <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+        <citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+        Defaults to &DEFAULT_TIMEOUT; in the system manager and &DEFAULT_USER_TIMEOUT; in the user manager.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -367,20 +433,22 @@
 
       <varlistentry>
         <term><varname>DefaultCPUAccounting=</varname></term>
-        <term><varname>DefaultBlockIOAccounting=</varname></term>
         <term><varname>DefaultMemoryAccounting=</varname></term>
         <term><varname>DefaultTasksAccounting=</varname></term>
         <term><varname>DefaultIOAccounting=</varname></term>
         <term><varname>DefaultIPAccounting=</varname></term>
 
         <listitem><para>Configure the default resource accounting settings, as configured per-unit by
-        <varname>CPUAccounting=</varname>, <varname>BlockIOAccounting=</varname>, <varname>MemoryAccounting=</varname>,
-        <varname>TasksAccounting=</varname>, <varname>IOAccounting=</varname> and <varname>IPAccounting=</varname>. See
+        <varname>CPUAccounting=</varname>, <varname>MemoryAccounting=</varname>,
+        <varname>TasksAccounting=</varname>, <varname>IOAccounting=</varname> and
+        <varname>IPAccounting=</varname>. See
         <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
         for details on the per-unit settings. <varname>DefaultTasksAccounting=</varname> defaults to yes,
-        <varname>DefaultMemoryAccounting=</varname> to &MEMORY_ACCOUNTING_DEFAULT;. <varname>DefaultCPUAccounting=</varname>
-        defaults to yes if enabling CPU accounting doesn't require the CPU controller to be enabled (Linux 4.15+ using the
-        unified hierarchy for resource control), otherwise it defaults to no. The other three settings default to no.</para></listitem>
+        <varname>DefaultMemoryAccounting=</varname> to &MEMORY_ACCOUNTING_DEFAULT;.
+        <varname>DefaultCPUAccounting=</varname> defaults to yes, but really has no effect if enabling CPU
+        accounting doesn't require the <option>cpu</option> controller to be enabled (Linux 4.15+ using the
+        unified hierarchy for resource control), otherwise it defaults to no. The other three settings
+        default to no.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -392,7 +460,7 @@
         of slice units. Defaults to 15% of the minimum of <varname>kernel.pid_max=</varname>, <varname>kernel.threads-max=</varname>
         and root cgroup <varname>pids.max</varname>.
         Kernel has a default value for <varname>kernel.pid_max=</varname> and an algorithm of counting in case of more than 32 cores.
-        For example with the default <varname>kernel.pid_max=</varname>, <varname>DefaultTasksMax=</varname> defaults to 4915,
+        For example, with the default <varname>kernel.pid_max=</varname>, <varname>DefaultTasksMax=</varname> defaults to 4915,
         but might be greater in other systems or smaller in OS containers.</para></listitem>
       </varlistentry>
 
@@ -426,17 +494,19 @@
         <para>Most of these settings are unset, which means the resource limits are inherited from the kernel or, if
         invoked in a container, from the container manager. However, the following have defaults:</para>
         <itemizedlist>
-          <listitem><para><varname>DefaultLimitNOFILE=</varname> defaults to <literal>1024:&HIGH_RLIMIT_NOFILE;</literal>.
+          <listitem><para><varname>DefaultLimitNOFILE=</varname> defaults to 1024:&HIGH_RLIMIT_NOFILE;.
           </para></listitem>
 
+          <listitem><para><varname>DefaultLimitMEMLOCK=</varname> defaults to 8M.</para></listitem>
+
           <listitem><para><varname>DefaultLimitCORE=</varname> does not have a default but it is worth mentioning that
           <varname>RLIMIT_CORE</varname> is set to <literal>infinity</literal> by PID 1 which is inherited by its
           children.</para></listitem>
-
-          <listitem><para>Note that the service manager internally increases <varname>RLIMIT_MEMLOCK</varname> for
-          itself, however the limit is reverted to the original value for child processes forked off.</para></listitem>
         </itemizedlist>
 
+        <para>Note that the service manager internally in PID 1 bumps <varname>RLIMIT_NOFILE</varname> and
+        <varname>RLIMIT_MEMLOCK</varname> to higher values, however the limit is reverted to the mentioned
+        defaults for all child processes forked off.</para>
       </listitem>
       </varlistentry>
 
@@ -444,12 +514,48 @@
         <term><varname>DefaultOOMPolicy=</varname></term>
 
         <listitem><para>Configure the default policy for reacting to processes being killed by the Linux
-        Out-Of-Memory (OOM) killer. This may be used to pick a global default for the per-unit
+        Out-Of-Memory (OOM) killer or <command>systemd-oomd</command>. This may be used to pick a global default for the per-unit
         <varname>OOMPolicy=</varname> setting. See
         <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
         for details. Note that this default is not used for services that have <varname>Delegate=</varname>
         turned on.</para></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>DefaultOOMScoreAdjust=</varname></term>
+
+        <listitem><para>Configures the default OOM score adjustments of processes run by the service
+        manager. This defaults to unset (meaning the forked off processes inherit the service manager's OOM
+        score adjustment value), except if the service manager is run for an unprivileged user, in which case
+        this defaults to the service manager's OOM adjustment value plus 100 (this makes service processes
+        slightly more likely to be killed under memory pressure than the manager itself). This may be used to
+        pick a global default for the per-unit <varname>OOMScoreAdjust=</varname> setting. See
+        <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
+        details. Note that this setting has no effect on the OOM score adjustment value of the service
+        manager process itself, it retains the original value set during its invocation.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DefaultSmackProcessLabel=</varname></term>
+
+        <listitem><para>Takes a <option>SMACK64</option> security label as the argument. The process executed
+        by a unit will be started under this label if <varname>SmackProcessLabel=</varname> is not set in the
+        unit. See <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        for the details.</para>
+
+        <para>If the value is <literal>/</literal>, only labels specified with <varname>SmackProcessLabel=</varname>
+        are assigned and the compile-time default is ignored.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>ReloadLimitIntervalSec=</varname></term>
+        <term><varname>ReloadLimitBurst=</varname></term>
+
+        <listitem><para>Rate limiting for daemon-reload requests. Default to unset, and any number of daemon-reload
+        operations can be requested at any time. <varname>ReloadLimitIntervalSec=</varname> takes a value in seconds
+        to configure the rate limit window, and <varname>ReloadLimitBurst=</varname> takes a positive integer to
+        configure the maximum allowed number of reloads within the configured time window.</para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -493,6 +599,18 @@
   </refsect1>
 
   <refsect1>
+      <title>History</title>
+
+      <variablelist>
+        <varlistentry>
+          <term>systemd 252</term>
+          <listitem><para>Option <varname>DefaultBlockIOAccounting=</varname> was deprecated. Please switch
+          to the unified cgroup hierarchy.</para></listitem>
+        </varlistentry>
+      </variablelist>
+  </refsect1>
+
+  <refsect1>
       <title>See Also</title>
       <para>
         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd-sysupdate.xml b/man/systemd-sysupdate.xml
new file mode 100644
index 0000000..77c1635
--- /dev/null
+++ b/man/systemd-sysupdate.xml
@@ -0,0 +1,287 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd-sysupdate" conditional='ENABLE_SYSUPDATE'
+    xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>systemd-sysupdate</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-sysupdate</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-sysupdate</refname>
+    <refname>systemd-sysupdate.service</refname>
+    <refname>systemd-sysupdate.timer</refname>
+    <refname>systemd-sysupdate-reboot.service</refname>
+    <refname>systemd-sysupdate-reboot.timer</refname>
+    <refpurpose>Automatically Update OS or Other Resources</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>systemd-sysupdate</command>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+    </cmdsynopsis>
+
+    <para><filename>systemd-sysupdate.service</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><command>systemd-sysupdate</command> atomically updates the host OS, container images, portable
+    service images or other sources, based on the transfer configuration files described in
+    <citerefentry><refentrytitle>sysupdate.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+
+    <para>This tool implements file, directory, or partition based update schemes, supporting multiple
+    parallel installed versions of specific resources in an A/B (or even: A/B/C, A/B/C/D/, …) style. A/B
+    updating means that when one version of a resource is currently being used, the next version can be
+    downloaded, unpacked, and prepared in an entirely separate location, independently of the first, and — once
+    complete — be activated, swapping the roles so that it becomes the used one and the previously used one
+    becomes the one that is replaced by the next update, and so on. The resources to update are defined
+    in transfer files, one for each resource to be updated. For example, resources that may be updated with
+    this tool could be: a root file system partition, a matching Verity partition plus one kernel image. The
+    combination of the three would be considered a complete OS update.</para>
+
+    <para>The tool updates partitions, files or directory trees always in whole, and operates with at least
+    two versions of each of these resources: the <emphasis>current</emphasis> version, plus the
+    <emphasis>next</emphasis> version: the one that is being updated to, and which is initially incomplete as
+    the downloaded data is written to it; plus optionally more versions. Once the download of a newer version
+    is complete it becomes the current version, releasing the version previously considered current for
+    deletion/replacement/updating.</para>
+
+    <para>When installing new versions the tool will directly download, decompress, unpack and write the new
+    version into the destination. This is done in a robust fashion so that an incomplete download can be
+    recognized on next invocation, and flushed out before a new attempt is initiated.</para>
+
+    <para>Note that when writing updates to a partition, the partition has to exist already, as
+    <command>systemd-sysupdate</command> will not automatically create new partitions. Use a tool such as
+    <citerefentry><refentrytitle>systemd-repart</refentrytitle><manvolnum>8</manvolnum></citerefentry> to
+    automatically create additional partitions to be used with <command>systemd-sysupdate</command> on
+    boot.</para>
+
+    <para>The tool can both be used on the running OS, to update the OS in "online" state from within itself,
+    and on "offline" disk images, to update them from the outside based on transfer files
+    embedded in the disk images. For the latter, see <option>--image=</option> below. The latter is
+    particularly interesting to update container images or portable service images.</para>
+
+    <para>The <filename>systemd-sysupdate.service</filename> system service will automatically update the
+    host OS based on the installed transfer files. It is triggered in regular intervals via
+    <filename>systemd-sysupdate.timer</filename>. The <filename>systemd-sysupdate-reboot.service</filename>
+    will automatically reboot the system after a new version is installed. It is triggered via
+    <filename>systemd-sysupdate-reboot.timer</filename>. The two services are separate from each other as it
+    is typically advisable to download updates regularly while the system is up, but delay reboots until the
+    appropriate time (i.e. typically at night). The two sets of service/timer units may be enabled
+    separately.</para>
+
+    <para>For details about transfer files and examples see
+    <citerefentry><refentrytitle>sysupdate.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Command</title>
+
+    <para>The following commands are understood:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>list</option> <optional><replaceable>VERSION</replaceable></optional></term>
+
+        <listitem><para>If invoked without an argument, enumerates downloadable and installed versions, and
+        shows a summarizing table with the discovered versions and their properties, including whether
+        there's a newer candidate version to update to. If a version argument is specified, shows details
+        about the specific version, including the individual files that need to be transferred to acquire the
+        version.</para>
+
+        <para>If no command is explicitly specified this command is implied.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>check-new</option></term>
+
+        <listitem><para>Checks if there's a new version available. This internally enumerates downloadable and
+        installed versions and returns exit status 0 if there's a new version to update to, non-zero
+        otherwise. If there is a new version to update to, its version identifier is written to standard
+        output.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>update</option> <optional><replaceable>VERSION</replaceable></optional></term>
+
+        <listitem><para>Installs (updates to) the specified version, or if none is specified to the newest
+        version available. If the version is already installed or no newer version available, no operation is
+        executed.</para>
+
+        <para>If a new version to install/update to is found, old installed versions are deleted until at
+        least one new version can be installed, as configured via <varname>InstanceMax=</varname> in
+        <citerefentry><refentrytitle>sysupdate.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, or
+        via the available partition slots of the right type. This implicit operation can also be invoked
+        explicitly via the <command>vacuum</command> command described below.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>vacuum</option></term>
+
+        <listitem><para>Deletes old installed versions until the limits configured via
+        <varname>InstanceMax=</varname> in
+        <citerefentry><refentrytitle>sysupdate.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> are
+        met again. Normally, it should not be necessary to invoke this command explicitly, since it is
+        implicitly invoked whenever a new update is initiated.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>pending</option></term>
+
+        <listitem><para>Checks whether a newer version of the OS is installed than the one currently
+        running. Returns zero if so, non-zero otherwise. This compares the newest installed version's
+        identifier with the OS image version as reported by the <varname>IMAGE_VERSION=</varname> field in
+        <filename>/etc/os-release</filename>. If the former is newer than the latter, an update was
+        apparently completed but not activated (i.e. rebooted into) yet.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>reboot</option></term>
+
+        <listitem><para>Similar to the <option>pending</option> command but immediately reboots in case a
+        newer version of the OS has been installed than the one currently running. This operation can be done
+        implicitly together with the <command>update</command> command, after a completed update via the
+        <option>--reboot</option> switch, see below. This command will execute no operation (and return
+        success) if no update has been installed, and thus the system was not rebooted.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>components</option></term>
+
+        <listitem><para>Lists components that can be updated. This enumerates the
+        <filename>/etc/sysupdate.*.d/</filename>, <filename>/run/sysupdate.*.d/</filename> and
+        <filename>/usr/lib/sysupdate.*.d/</filename> directories that contain transfer files. This command is
+        useful to list possible parameters for <option>--component=</option> (see below).</para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="help" />
+      <xi:include href="standard-options.xml" xpointer="version" />
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <para>The following options are understood:</para>
+
+    <variablelist>
+
+      <varlistentry>
+        <term><option>--component=</option></term>
+        <term><option>-C</option></term>
+
+        <listitem><para>Selects the component to update. Takes a component name as argument. This has the
+        effect of slightly altering the search logic for transfer files. If this switch is not used, the
+        transfer files are loaded from <filename>/etc/sysupdate.d/*.conf</filename>,
+        <filename>/run/sysupdate.d/*.conf</filename> and <filename>/usr/lib/sysupdate.d/*.conf</filename>. If
+        this switch is used, the specified component name is used to alter the directories to look in to be
+        <filename>/etc/sysupdate.<replaceable>component</replaceable>.d/*.conf</filename>,
+        <filename>/run/sysupdate.<replaceable>component</replaceable>.d/*.conf</filename> and
+        <filename>/usr/lib/sysupdate.<replaceable>component</replaceable>.d/*.conf</filename>, each time with
+        the <filename><replaceable>component</replaceable></filename> string replaced with the specified
+        component name.</para>
+
+        <para>Use the <command>components</command> command to list available components to update. This enumerates
+        the directories matching this naming rule.</para>
+
+        <para>Components may be used to define a separate set of transfer files for different components of
+        the OS that shall be updated separately. Do not use this concept for resources that shall always be
+        updated together in a synchronous fashion. Simply define multiple transfer files within the same
+        <filename>sysupdate.d/</filename> directory for these cases.</para>
+
+        <para>This option may not be combined with <option>--definitions=</option>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--definitions=</option></term>
+
+        <listitem><para>A path to a directory. If specified, the transfer <filename>*.conf</filename> files
+        are read from this directory instead of <filename>/usr/lib/sysupdate.d/*.conf</filename>,
+        <filename>/etc/sysupdate.d/*.conf</filename>, and <filename>/run/sysupdate.d/*.conf</filename>.</para>
+
+        <para>This option may not be combined with <option>--component=</option>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--root=</option></term>
+
+        <listitem><para>Takes a path to a directory to use as root file system when searching for
+        <filename>sysupdate.d/*.conf</filename> files.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--image=</option></term>
+
+        <listitem><para>Takes a path to a disk image file or device to mount and use in a similar fashion to
+        <option>--root=</option>, see above. If this is used and partition resources are updated this is done
+        inside the specified disk image.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--instances-max=</option></term>
+        <term><option>-m</option></term>
+
+        <listitem><para>Takes a decimal integer greater than or equal to 2. Controls how many versions to
+        keep at any time. This option may also be configured inside the transfer files, via the
+        <varname>InstancesMax=</varname> setting, see
+        <citerefentry><refentrytitle>sysupdate.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
+        details.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--sync=</option></term>
+
+        <listitem><para>Takes a boolean argument, defaults to yes. This may be used to specify whether the
+        newly updated resource versions shall be synchronized to disk when appropriate (i.e. after the
+        download is complete, before it is finalized, and again after finalization). This should not be
+        turned off, except to improve runtime performance in testing environments.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--verify=</option></term>
+
+        <listitem><para>Takes a boolean argument, defaults to yes. Controls whether to cryptographically
+        verify downloads. Do not turn this off, except in testing environments.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--reboot</option></term>
+
+        <listitem><para>When used in combination with the <command>update</command> command and a new version is
+        installed, automatically reboots the system immediately afterwards.</para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="no-pager" />
+      <xi:include href="standard-options.xml" xpointer="no-legend" />
+      <xi:include href="standard-options.xml" xpointer="json" />
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Exit status</title>
+
+    <para>On success, 0 is returned, a non-zero failure code otherwise.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sysupdate.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-repart</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd-sysusers.xml b/man/systemd-sysusers.xml
index b4500d1..aba2750 100644
--- a/man/systemd-sysusers.xml
+++ b/man/systemd-sysusers.xml
@@ -35,23 +35,22 @@
   <refsect1>
     <title>Description</title>
 
-    <para><command>systemd-sysusers</command> creates system users and
-    groups, based on the file format and location specified in
+    <para><command>systemd-sysusers</command> creates system users and groups, based on files in the format
+    described in
     <citerefentry><refentrytitle>sysusers.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
     </para>
 
-    <para>If invoked with no arguments, it applies all directives from all files
-    found in the directories specified by
-    <citerefentry><refentrytitle>sysusers.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
-    When invoked with positional arguments, if option
-    <option>--replace=<replaceable>PATH</replaceable></option> is specified, arguments
-    specified on the command line are used instead of the configuration file
-    <replaceable>PATH</replaceable>. Otherwise, just the configuration specified by
-    the command line arguments is executed. The string <literal>-</literal> may be
-    specified instead of a filename to instruct <command>systemd-sysusers</command>
-    to read the configuration from standard input. If only the basename of a file is
-    specified, all configuration directories are searched for a matching file and
-    the file found that has the highest priority is executed.</para>
+    <para>If invoked with no arguments, it applies all directives from all files found in the directories
+    specified by
+    <citerefentry><refentrytitle>sysusers.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>. When
+    invoked with positional arguments, if option <option>--replace=<replaceable>PATH</replaceable></option>
+    is specified, arguments specified on the command line are used instead of the configuration file
+    <replaceable>PATH</replaceable>. Otherwise, just the configuration specified by the command line
+    arguments is executed. The string <literal>-</literal> may be specified instead of a filename to instruct
+    <command>systemd-sysusers</command> to read the configuration from standard input. If the argument is a
+    relative path, all configuration directories are searched for a matching file and the file found that has
+    the highest priority is executed. If the argument is an absolute path, that file is used directly without
+    searching of the configuration directories.</para>
   </refsect1>
 
   <refsect1>
@@ -75,7 +74,7 @@
         are applied to file system in the indicated disk image. This is similar to <option>--root=</option>
         but operates on file systems stored in disk images or block devices. The disk image should either
         contain just a file system or a set of file systems within a GPT partition table, following the
-        <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+        <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
         Specification</ulink>. For further information on supported disk images, see
         <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
         switch of the same name.</para></listitem>
@@ -83,7 +82,7 @@
 
       <varlistentry>
         <term><option>--replace=<replaceable>PATH</replaceable></option></term>
-        <listitem><para>When this option is given, one ore more positional arguments
+        <listitem><para>When this option is given, one or more positional arguments
         must be specified. All configuration files found in the directories listed in
         <citerefentry><refentrytitle>sysusers.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
         will be read, and the configuration given on the command line will be
@@ -116,6 +115,12 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--dry-run</option></term>
+        <listitem><para>Process the configuration and figure out what entries would be created, but don't
+        actually write anything.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--inline</option></term>
         <listitem><para>Treat each positional argument as a separate configuration
         line instead of a file name.</para></listitem>
@@ -163,22 +168,31 @@
 
         <listitem><para>Specifies the shell binary to use for the specified account when creating it.</para></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><literal>sysusers.extra</literal></term>
+
+        <listitem><para>The contents of this credential may contain additional lines to operate on. The
+        credential contents should follow the same format as any other <filename>sysusers.d/</filename>
+        drop-in. If this credential is passed it is processed after all of the drop-in files read from the
+        file system.</para></listitem>
+      </varlistentry>
     </variablelist>
 
     <para>Note that by default the <filename>systemd-sysusers.service</filename> unit file is set up to
     inherit the <literal>passwd.hashed-password.root</literal>,
-    <literal>passwd.plaintext-password.root</literal> and <literal>passwd.shell.root</literal> credentials
-    from the service manager. Thus, when invoking a container with an unpopulated <filename>/etc/</filename>
-    for the first time it is possible to configure the root user's password to be <literal>systemd</literal>
-    like this:</para>
+    <literal>passwd.plaintext-password.root</literal>, <literal>passwd.shell.root</literal> and
+    <literal>sysusers.extra</literal> credentials from the service manager. Thus, when invoking a container
+    with an unpopulated <filename>/etc/</filename> for the first time it is possible to configure the root
+    user's password to be <literal>systemd</literal> like this:</para>
 
-    <para><programlisting># systemd-nspawn --image=… --set-credential=password.hashed-password.root:'$y$j9T$yAuRJu1o5HioZAGDYPU5d.$F64ni6J2y2nNQve90M/p0ZP0ECP/qqzipNyaY9fjGpC' …</programlisting></para>
+    <para><programlisting># systemd-nspawn --image=… --set-credential=passwd.hashed-password.root:'$y$j9T$yAuRJu1o5HioZAGDYPU5d.$F64ni6J2y2nNQve90M/p0ZP0ECP/qqzipNyaY9fjGpC' …</programlisting></para>
 
-    <para>Note again that the data specified in these credentials is consulted only when creating an account
+    <para>Note again that the data specified in this credential is consulted only when creating an account
     for the first time, it may not be used for changing the password or shell of an account that already
     exists.</para>
 
-    <para>Use <citerefentry><refentrytitle>mkpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    <para>Use <citerefentry project='man-pages'><refentrytitle>mkpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
     for generating UNIX password hashes from the command line.</para>
   </refsect1>
 
@@ -196,7 +210,7 @@
       <citerefentry><refentrytitle>sysusers.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <ulink url="https://systemd.io/UIDS-GIDS">Users, Groups, UIDs and GIDs on systemd systems</ulink>,
       <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>mkpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+      <citerefentry project='man-pages'><refentrytitle>mkpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/systemd-sysv-generator.xml b/man/systemd-sysv-generator.xml
index 14ab932..e9f318b 100644
--- a/man/systemd-sysv-generator.xml
+++ b/man/systemd-sysv-generator.xml
@@ -31,7 +31,7 @@
     that creates wrapper .service units for
     <ulink url="https://savannah.nongnu.org/projects/sysvinit">SysV init</ulink>
     scripts in <filename>/etc/init.d/*</filename> at boot and when
-    configuration of the system manager is reloaded. This will allow
+    configuration of the system manager is reloaded. This allows
     <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
     to support them similarly to native units.</para>
 
@@ -46,6 +46,10 @@
     <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
     for more details.</para>
 
+    <para>Note that compatibility is quite comprehensive but not 100%, for more details see <ulink
+    url="https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities">Incompatibilities with
+    SysV</ulink>.</para>
+
     <para>SysV runlevels have corresponding systemd targets
     (<filename>runlevel<replaceable>X</replaceable>.target</filename>).
     The wrapper unit that is generated will be wanted by those targets
diff --git a/man/systemd-timesyncd.service.xml b/man/systemd-timesyncd.service.xml
index 9ab4af9..34e0a67 100644
--- a/man/systemd-timesyncd.service.xml
+++ b/man/systemd-timesyncd.service.xml
@@ -75,10 +75,11 @@
         <term><filename>/var/lib/systemd/timesync/clock</filename></term>
 
         <listitem>
-          <para>The modification time ("mtime") of this file indicates the timestamp of the last successful
-          synchronization (or at least the systemd build date, in case synchronization was not possible). It
-          is used to ensure that the system clock remains roughly monotonic across reboots, in case no local
-          RTC is available.</para>
+          <para>The modification time ("mtime") of this file is updated on each successful NTP synchronization
+          or after each <varname>SaveIntervalSec=</varname> time interval, as specified in
+          <citerefentry><refentrytitle>timesyncd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          At the minimum, it will be set to the systemd build date. It is used to ensure that the system clock
+          remains roughly monotonic across reboots, in case no local RTC is available.</para>
         </listitem>
       </varlistentry>
 
diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
index 15bc1ea..c2e32f9 100644
--- a/man/systemd-tmpfiles.xml
+++ b/man/systemd-tmpfiles.xml
@@ -192,7 +192,7 @@
         are applied to file system in the indicated disk image. This is similar to <option>--root=</option>
         but operates on file systems stored in disk images or block devices. The disk image should either
         contain just a file system or a set of file systems within a GPT partition table, following the
-        <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+        <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
         Specification</ulink>. For further information on supported disk images, see
         <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
         switch of the same name.</para>
@@ -202,7 +202,7 @@
 
       <varlistentry>
         <term><option>--replace=<replaceable>PATH</replaceable></option></term>
-        <listitem><para>When this option is given, one ore more positional arguments
+        <listitem><para>When this option is given, one or more positional arguments
         must be specified. All configuration files found in the directories listed in
         <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
         will be read, and the configuration given on the command line will be
@@ -231,6 +231,31 @@
   </refsect1>
 
   <refsect1>
+    <title>Credentials</title>
+
+    <para><command>systemd-tmpfiles</command> supports the service credentials logic as implemented by
+    <varname>LoadCredential=</varname>/<varname>SetCredential=</varname> (see
+    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>1</manvolnum></citerefentry> for
+    details). The following credentials are used when passed in:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><literal>tmpfiles.extra</literal></term>
+
+        <listitem><para> The contents of this credential may contain additional lines to operate on. The
+        credential contents should follow the same format as any other <filename>tmpfiles.d/</filename>
+        drop-in configuration file. If this credential is passed it is processed after all of the drop-in
+        files read from the file system. The lines in the credential can hence augment existing lines of the
+        OS, but not override them.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>Note that by default the <filename>systemd-tmpfiles-setup.service</filename> unit file (and related
+    unit files) is set up to inherit the <literal>tmpfiles.extra</literal> credential from the service
+    manager.</para>
+  </refsect1>
+
+  <refsect1>
     <title>Environment</title>
 
     <variablelist class='environment-variables'>
diff --git a/man/systemd-udevd.service.xml b/man/systemd-udevd.service.xml
index 32cb82b..3107fb7 100644
--- a/man/systemd-udevd.service.xml
+++ b/man/systemd-udevd.service.xml
@@ -224,6 +224,46 @@
           appear, which affects older name derivation algorithms, too.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>net.ifname-policy=<replaceable>policy1</replaceable>[,<replaceable>policy2</replaceable>,…][,<replaceable>MAC</replaceable>]</varname></term>
+        <listitem>
+          <para>Specifies naming policies applied when renaming network interfaces. Takes a list of
+          policies and an optional MAC address separated with comma. Each policy value must be one of
+          the policies understood by the <varname>NamePolicy=</varname> setting in .link files, e.g.
+          <literal>onboard</literal> or <literal>path</literal>. See
+          <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          for more details. When the MAC address is specified, the policies are applied to the
+          interface which has the address. When no MAC address is specified, the policies are applied
+          to all interfaces. This kernel command line argument can be specified multiple times.</para>
+
+          <para>This argument is not directly read by <command>systemd-udevd</command>, but is instead
+          converted to a .link file by
+          <citerefentry><refentrytitle>systemd-network-generator.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          For this argument to take effect, <filename>systemd-network-generator.service</filename> must be
+          enabled.</para>
+
+          <para>Example:
+          <programlisting>net.ifname-policy=keep,kernel,path,slot,onboard,01:23:45:67:89:ab
+net.ifname-policy=keep,kernel,path,slot,onboard,mac</programlisting>
+          This is mostly equivalent to creating the following .link files:
+          <programlisting># 91-name-policy-with-mac.link
+[Match]
+MACAddress=01:23:45:67:89:ab
+
+[Link]
+NamePolicy=keep kernel path slot onboard
+AlternativeNamePolicy=path slot onboard</programlisting>
+          and
+          <programlisting># 92-name-policy-for-all.link
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=keep kernel path slot onboard mac
+AlternativeNamePolicy=path slot onboard mac</programlisting>
+          </para>
+        </listitem>
+      </varlistentry>
     </variablelist>
     <!-- when adding entries here, consider also adding them in kernel-command-line.xml -->
   </refsect1>
diff --git a/man/systemd-userdbd.service.xml b/man/systemd-userdbd.service.xml
index 9d8b62c..63673d9 100644
--- a/man/systemd-userdbd.service.xml
+++ b/man/systemd-userdbd.service.xml
@@ -57,7 +57,7 @@
     records as acquired with APIs such as <citerefentry
     project='man-pages'><refentrytitle>getpwnam</refentrytitle><manvolnum>1</manvolnum></citerefentry> to
     JSON user/group records, thus hiding the differences between the services as much as
-    possible. <constant>io.systemd.Dropin</constant> makes JSON user/group records from the aforementioned
+    possible. <constant>io.systemd.DropIn</constant> makes JSON user/group records from the aforementioned
     drop-in directories available.</para>
   </refsect1>
 
diff --git a/man/systemd-vconsole-setup.service.xml b/man/systemd-vconsole-setup.service.xml
index 80577ed..98d9e2a 100644
--- a/man/systemd-vconsole-setup.service.xml
+++ b/man/systemd-vconsole-setup.service.xml
@@ -50,6 +50,44 @@
   </refsect1>
 
   <refsect1>
+    <title>Credentials</title>
+
+    <para><command>systemd-vconsole-setup</command> supports the service credentials logic as implemented by
+    <varname>LoadCredential=</varname>/<varname>SetCredential=</varname> (see
+    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>1</manvolnum></citerefentry> for
+    details). The following credentials are used when passed in:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><varname>vconsole.keymap</varname></term>
+        <term><varname>vconsole.keymap_toggle</varname></term>
+
+        <listitem><para>The keymap (and toggle keymap) to apply. The matching options in
+        <filename>vconsole.conf</filename> and on the kernel command line take precedence over these
+        credentials.</para>
+
+        <para>Note the relationship to the <varname>firstboot.keymap</varname> credential understood by
+        <citerefentry><refentrytitle>systemd-firstboot.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>:
+        both ultimately affect the same setting, but <varname>firstboot.keymap</varname> is written into
+        <filename>/etc/vconsole.conf</filename> on first boot (if not already configured), and then read from
+        there by <command>systemd-vconsole-setup</command>, while <varname>vconsole.keymap</varname> is read
+        on every boot, and is not persisted to disk (but any configuration in
+        <filename>vconsole.conf</filename> will take precedence if present).</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>vconsole.font</varname></term>
+        <term><varname>vconsole.font_map</varname></term>
+        <term><varname>vconsole.font_unimap</varname></term>
+
+        <listitem><para>The console font settings to apply. The matching options in
+        <filename>vconsole.conf</filename> and on the kernel command line take precedence over these
+        credentials.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd-veritysetup-generator.xml b/man/systemd-veritysetup-generator.xml
index 3c9ee67..37ded91 100644
--- a/man/systemd-veritysetup-generator.xml
+++ b/man/systemd-veritysetup-generator.xml
@@ -27,23 +27,23 @@
   <refsect1>
     <title>Description</title>
 
-    <para><filename>systemd-veritysetup-generator</filename> is a generator that translates kernel command line options
-    configuring verity protected block devices into native systemd units early at boot and when
+    <para><command>systemd-veritysetup-generator</command> is a generator that translates kernel command line
+    options configuring verity protected block devices into native systemd units early at boot and when
     configuration of the system manager is reloaded. This will create
     <citerefentry><refentrytitle>systemd-veritysetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     units as necessary.</para>
 
-    <para>Currently, only a single verity device may be set up with this generator, backing the root file system of the
+    <para>Currently, only two verity devices may be set up with this generator, backing the root and <filename>/usr</filename> file systems of the
     OS.</para>
 
-    <para><filename>systemd-veritysetup-generator</filename> implements
+    <para><command>systemd-veritysetup-generator</command> implements
     <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
   </refsect1>
 
   <refsect1>
     <title>Kernel Command Line</title>
 
-    <para><filename>systemd-veritysetup-generator</filename>
+    <para><command>systemd-veritysetup-generator</command>
     understands the following kernel command line parameters:</para>
 
     <variablelist class='kernel-commandline-options'>
@@ -51,10 +51,10 @@
         <term><varname>systemd.verity=</varname></term>
         <term><varname>rd.systemd.verity=</varname></term>
 
-        <listitem><para>Takes a boolean argument. Defaults to <literal>yes</literal>. If <literal>no</literal>,
-        disables the generator entirely. <varname>rd.systemd.verity=</varname> is honored only by the initial RAM disk
-        (initrd) while <varname>systemd.verity=</varname> is honored by both the host system and the
-        initrd.</para></listitem>
+        <listitem><para>Takes a boolean argument. Defaults to <literal>yes</literal>. If
+        <literal>no</literal>, disables the generator entirely. <varname>rd.systemd.verity=</varname> is
+        honored only by the initrd while <varname>systemd.verity=</varname> is honored by both the host
+        system and the initrd.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -87,11 +87,20 @@
         <listitem><para>Takes a comma-separated list of dm-verity options. Expects the following options
         <option>ignore-corruption</option>, <option>restart-on-corruption</option>, <option>ignore-zero-blocks</option>,
         <option>check-at-most-once</option>, <option>panic-on-corruption</option> and
-        <option>root-hash-signature</option>. See
+        <option>root-hash-signature=<replaceable>PATH</replaceable>|base64:<replaceable>HEX</replaceable></option>. See
         <citerefentry project='die-net'><refentrytitle>veritysetup</refentrytitle><manvolnum>8</manvolnum></citerefentry> for more
         details.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>usrhash=</varname></term>
+        <term><varname>systemd.verity_usr_data=</varname></term>
+        <term><varname>systemd.verity_usr_hash=</varname></term>
+        <term><varname>systemd.verity_usr_options=</varname></term>
+
+        <listitem><para>Equivalent to their counterparts for the root file system as described above, but
+        apply to the <filename>/usr/</filename> file system instead.</para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
diff --git a/man/systemd-veritysetup__at__.service.xml b/man/systemd-veritysetup__at__.service.xml
index 0f21c2f..423db91 100644
--- a/man/systemd-veritysetup__at__.service.xml
+++ b/man/systemd-veritysetup__at__.service.xml
@@ -60,7 +60,7 @@
         <replaceable>datadevice</replaceable> and <replaceable>hashdevice</replaceable> as the backing
         devices. <replaceable>roothash</replaceable> forms the root of the tree of hashes stored on
         <replaceable>hashdevice</replaceable>. See
-        <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html">
+        <ulink url="https://docs.kernel.org/admin-guide/device-mapper/verity.html">
           Kernel dm-verity</ulink> documentation for details.
         </para></listitem>
       </varlistentry>
diff --git a/man/systemd-volatile-root.service.xml b/man/systemd-volatile-root.service.xml
index d591da2..0d3b402 100644
--- a/man/systemd-volatile-root.service.xml
+++ b/man/systemd-volatile-root.service.xml
@@ -37,9 +37,10 @@
     stateless systems.</para>
 
     <para>This service is only enabled if full volatile mode is selected, for example by specifying
-    <literal>systemd.volatile=yes</literal> on the kernel command line. This service runs only in the initial RAM disk
-    ("initrd"), before the system transitions to the host's root directory. Note that this service is not used if
-    <literal>systemd.volatile=state</literal> is used, as in that mode the root directory is non-volatile.</para>
+    <literal>systemd.volatile=yes</literal> on the kernel command line. This service runs only in the initrd,
+    before the system transitions to the host's root directory. Note that this service is not used if
+    <literal>systemd.volatile=state</literal> is used, as in that mode the root directory is non-volatile.
+    </para>
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd-xdg-autostart-generator.xml b/man/systemd-xdg-autostart-generator.xml
index 4d153c3..bafe6e9 100644
--- a/man/systemd-xdg-autostart-generator.xml
+++ b/man/systemd-xdg-autostart-generator.xml
@@ -41,6 +41,55 @@
     <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
     for more details.</para>
 
+    <para>XDG autostart may be conditionalized using both standardized and non-standardized keys.
+    In order to handle these, the generator may create one or more <varname>ExecCondition=</varname> entries.
+    For non-standardized keys, well-known helper binaries provided by Desktop Environments are used.
+    All external helpers <emphasis>must</emphasis> detect their corresponding desktop environment and
+    <emphasis>must</emphasis> return success when run in a different environment.
+    This is important as all <varname>ExecCondition=</varname> directives must succeed for an application to be started.</para>
+
+    <table>
+      <title>
+        Special XDG desktop file entries that are processed
+      </title>
+      <tgroup cols='2'>
+        <colspec colname='entry' />
+        <colspec colname='handling' />
+        <thead>
+          <row>
+            <entry>Entry</entry>
+            <entry>Handling</entry>
+          </row>
+        </thead>
+        <tbody>
+          <row>
+            <entry><varname>Hidden=</varname>, <varname>X-systemd-skip=</varname></entry>
+            <entry>No service will be generated if set to true</entry>
+          </row>
+          <row>
+            <entry><varname>OnlyShowIn=</varname>, <varname>NotShowIn=</varname></entry>
+            <entry><varname>ExecCondition=</varname> using <filename>systemd-xdg-autostart-condition</filename></entry>
+          </row>
+          <row>
+            <entry><varname>TryExec=</varname></entry>
+            <entry>No service will be generated if the binary does not exist or cannot be executed</entry>
+          </row>
+          <row>
+            <entry><varname>AutostartCondition=</varname> (GNOME extension)</entry>
+            <entry><varname>ExecCondition=</varname> using <filename>gnome-systemd-autostart-condition</filename></entry>
+          </row>
+          <row>
+            <entry><varname>X-GNOME-Autostart-Phase=</varname></entry>
+            <entry>No service will be generated if set to any value</entry>
+          </row>
+          <row>
+            <entry><varname>X-KDE-autostart-condition=</varname></entry>
+            <entry><varname>ExecCondition=</varname> using <filename>kde-systemd-start-condition</filename></entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </table>
+
     <para><filename>systemd-xdg-autostart-generator</filename> implements
     <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
   </refsect1>
diff --git a/man/systemd.automount.xml b/man/systemd.automount.xml
index a6bc81e..67c59e1 100644
--- a/man/systemd.automount.xml
+++ b/man/systemd.automount.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd.automount">
+<refentry id="systemd.automount" xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>systemd.automount</title>
     <productname>systemd</productname>
@@ -26,10 +26,9 @@
   <refsect1>
     <title>Description</title>
 
-    <para>A unit configuration file whose name ends in
-    <literal>.automount</literal> encodes information about a file
-    system automount point controlled and supervised by
-    systemd.</para>
+    <para>A unit configuration file whose name ends in <literal>.automount</literal> encodes information
+    about a file system automount point controlled and supervised by systemd. Automount units may be used to
+    implement on-demand mounting as well as parallelized mounting of file systems.</para>
 
     <para>This man page lists the configuration options specific to
     this unit type. See
@@ -39,13 +38,13 @@
     [Install] sections. The automount specific configuration options
     are configured in the [Automount] section.</para>
 
-    <para>Automount units must be named after the automount directories they control. Example: the automount point
-    <filename index="false">/home/lennart</filename> must be configured in a unit file
-    <filename>home-lennart.automount</filename>. For details about the escaping logic used to convert a file system
-    path to a unit name see
-    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note that
-    automount units cannot be templated, nor is it possible to add multiple names to an automount unit by creating
-    additional symlinks to its unit file.</para>
+    <para>Automount units must be named after the automount directories they control. Example: the automount
+    point <filename index="false">/home/lennart</filename> must be configured in a unit file
+    <filename>home-lennart.automount</filename>. For details about the escaping logic used to convert a file
+    system path to a unit name see
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note
+    that automount units cannot be templated, nor is it possible to add multiple names to an automount unit
+    by creating symlinks to its unit file.</para>
 
     <para>For each automount unit file a matching mount unit file (see
     <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
@@ -55,9 +54,6 @@
     accesses <filename>/home/lennart</filename> the mount unit
     <filename>home-lennart.mount</filename> will be activated.</para>
 
-    <para>Automount units may be used to implement on-demand mounting
-    as well as parallelized mounting of file systems.</para>
-
     <para>Note that automount units are separate from the mount itself, so you
     should not set <varname>After=</varname> or <varname>Requires=</varname>
     for mount dependencies here. For example, you should not set
@@ -65,8 +61,11 @@
     filesystems. Doing so may result in an ordering cycle.</para>
 
     <para>Note that automount support on Linux is privileged, automount units are hence only available in the
-    system service manager (and root's user service manager), but not in unprivileged user's service
-    manager.</para>
+    system service manager (and root's user service manager), but not in unprivileged users' service
+    managers.</para>
+
+    <para>Note that automount units should not be nested. (The establishment of the inner automount point
+    would unconditionally pin the outer mount point, defeating its purpose.)</para>
   </refsect1>
 
   <refsect1>
@@ -78,12 +77,12 @@
       <para>The following dependencies are implicitly added:</para>
 
       <itemizedlist>
-        <listitem><para>If an automount unit is beneath another mount unit in the
-        file system hierarchy, both a requirement and an ordering
-        dependency between both units are created automatically.</para></listitem>
+        <listitem><para>If an automount unit is beneath another mount unit in the file system hierarchy, a
+        requirement and ordering dependencies are created to the on the unit higher in the hierarchy.
+        </para></listitem>
 
-        <listitem><para>An implicit <varname>Before=</varname> dependency is created
-        between an automount unit and the mount unit it activates.</para></listitem>
+        <listitem><para>An implicit <varname>Before=</varname> dependency is created between an automount
+        unit and the mount unit it activates.</para></listitem>
       </itemizedlist>
     </refsect2>
 
@@ -124,7 +123,11 @@
   <refsect1>
     <title>Options</title>
 
-    <para>Automount files must include an [Automount] section, which
+    <para>Automount unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
+    <para>Automount unit files must include an [Automount] section, which
     carries information about the file system automount points it
     supervises. The options specific to the [Automount] section of
     automount units are the following:</para>
@@ -141,6 +144,15 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>ExtraOptions=</varname></term>
+        <listitem><para>Extra mount options to use when creating the autofs
+        mountpoint. This takes a comma-separated list of options. This setting
+        is optional. Note that the usual specifier expansion is applied to this
+        setting, literal percent characters should hence be written as
+        <literal class='specifiers'>%%</literal>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>DirectoryMode=</varname></term>
         <listitem><para>Directories of automount points (and any
         parent directories) are automatically created if needed. This
@@ -148,6 +160,7 @@
         creating these directories. Takes an access mode in octal
         notation. Defaults to 0755.</para></listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>TimeoutIdleSec=</varname></term>
         <listitem><para>Configures an idle timeout. Once the mount has been
@@ -157,6 +170,8 @@
         default.</para></listitem>
       </varlistentry>
     </variablelist>
+
+    <xi:include href="systemd.service.xml" xpointer="shared-unit-options" />
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd.device.xml b/man/systemd.device.xml
index 596d334..529552e 100644
--- a/man/systemd.device.xml
+++ b/man/systemd.device.xml
@@ -41,7 +41,7 @@
 
     <para>systemd will dynamically create device units for all kernel devices that are marked with the
     <literal>systemd</literal> udev tag (by default all block and network devices, and a few others). Note
-    that <emphasis>if <filename>systemd-udev.service</filename> is not running, no device units will be
+    that <emphasis>if <filename>systemd-udevd.service</filename> is not running, no device units will be
     available (for example in a typical container)</emphasis>.</para>
 
     <para>Device units are named after the <filename>/sys/</filename>
@@ -147,7 +147,14 @@
       </varlistentry>
 
     </variablelist>
+  </refsect1>
 
+  <refsect1>
+    <title>Options</title>
+
+    <para>Device unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. No
+    options specific to this file type are supported.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
index 3333618..bad21ce 100644
--- a/man/systemd.exec.xml
+++ b/man/systemd.exec.xml
@@ -58,7 +58,7 @@
       <varname>CacheDirectory=</varname>, <varname>LogsDirectory=</varname> or
       <varname>ConfigurationDirectory=</varname> set automatically gain dependencies of type
       <varname>Requires=</varname> and <varname>After=</varname> on all mount units required to access the specified
-      paths.  This is equivalent to having them listed explicitly in
+      paths. This is equivalent to having them listed explicitly in
       <varname>RequiresMountsFor=</varname>.</para></listitem>
 
       <listitem><para>Similarly, units with <varname>PrivateTmp=</varname> enabled automatically get mount
@@ -90,6 +90,20 @@
     <variablelist class='unit-directives'>
 
       <varlistentry>
+        <term><varname>ExecSearchPath=</varname></term>
+
+        <listitem><para>Takes a colon separated list of absolute paths relative to which the executable
+        used by the <varname>Exec*=</varname> (e.g. <varname>ExecStart=</varname>,
+        <varname>ExecStop=</varname>, etc.) properties can be found. <varname>ExecSearchPath=</varname>
+        overrides <varname>$PATH</varname> if <varname>$PATH</varname> is not supplied by the user through
+        <varname>Environment=</varname>, <varname>EnvironmentFile=</varname> or
+        <varname>PassEnvironment=</varname>. Assigning an empty string removes previous assignments
+        and setting <varname>ExecSearchPath=</varname> to a value multiple times will append
+        to the previous setting.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>WorkingDirectory=</varname></term>
 
         <listitem><para>Takes a directory path relative to the service's root directory specified by
@@ -99,7 +113,7 @@
         system instance and the respective user's home directory if run as user. If the setting is prefixed with the
         <literal>-</literal> character, a missing working directory is not considered fatal. If
         <varname>RootDirectory=</varname>/<varname>RootImage=</varname> is not set, then
-        <varname>WorkingDirectory=</varname> is relative to the root of the system running the service manager.  Note
+        <varname>WorkingDirectory=</varname> is relative to the root of the system running the service manager. Note
         that setting this parameter might result in additional dependencies to be added to the unit (see
         above).</para></listitem>
       </varlistentry>
@@ -131,7 +145,7 @@
           <programlisting>BindReadOnlyPaths=/dev/log /run/systemd/journal/socket /run/systemd/journal/stdout</programlisting>
         </example>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -142,7 +156,7 @@
         or loopback file instead of a directory. The device node or file system image file needs to contain a
         file system without a partition table, or a file system within an MBR/MS-DOS or GPT partition table
         with only a single Linux-compatible partition, or a set of file systems within a GPT partition table
-        that follows the <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+        that follows the <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
         Specification</ulink>.</para>
 
         <para>When <varname>DevicePolicy=</varname> is set to <literal>closed</literal> or
@@ -174,7 +188,7 @@
         </para>
 
         <para>Valid partition names follow the <ulink
-        url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>:
+        url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>:
         <constant>root</constant>, <constant>usr</constant>, <constant>home</constant>, <constant>srv</constant>,
         <constant>esp</constant>, <constant>xbootldr</constant>, <constant>tmp</constant>,
         <constant>var</constant>.</para>
@@ -233,7 +247,7 @@
 
         <listitem><para>Takes the path to a data integrity (dm-verity) file. This option enables data integrity checks
         using dm-verity, if <varname>RootImage=</varname> is used and a root-hash is passed and if the used image itself
-        does not contains the integrity data. The integrity data must be matched by the root hash. If this option is not
+        does not contain the integrity data. The integrity data must be matched by the root hash. If this option is not
         specified, but a file with the <filename>.verity</filename> suffix is found next to the image file, bearing otherwise
         the same name (except if the image has the <filename>.raw</filename> suffix, in which case the verity data file must
         not have it in its name), the verity data is read from it and automatically used.</para>
@@ -241,7 +255,7 @@
         <para>This option is supported only for disk images that contain a single file system, without an
         enveloping partition table. Images that contain a GPT partition table should instead include both
         root file system and matching Verity data in the same image, implementing the <ulink
-        url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>.</para>
+        url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>.</para>
 
         <xi:include href="system-only.xml" xpointer="singular"/></listitem>
       </varlistentry>
@@ -262,9 +276,7 @@
 
         <para>In order to allow propagating mounts at runtime in a safe manner, <filename>/run/systemd/propagate</filename>
         on the host will be used to set up new mounts, and <filename>/run/host/incoming/</filename> in the private namespace
-        will be used as an intermediate step to store them before being moved to the final mount point.</para>
-
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        will be used as an intermediate step to store them before being moved to the final mount point.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -281,7 +293,7 @@
         <filename>/proc/</filename>. If <literal>ptraceable</literal> all processes that cannot be
         <function>ptrace()</function>'ed by a process are hidden to it. If <literal>default</literal> no
         restrictions on <filename>/proc/</filename> access or visibility are made. For further details see
-        <ulink url="https://www.kernel.org/doc/html/latest/filesystems/proc.html#mount-options">The /proc
+        <ulink url="https://docs.kernel.org/filesystems/proc.html#mount-options">The /proc
         Filesystem</ulink>. It is generally recommended to run most system services with this option set to
         <literal>invisible</literal>. This option is implemented via file system namespacing, and thus cannot
         be used with services that shall be able to install mount points in the host file system
@@ -306,7 +318,7 @@
         introspection are made invisible in the <filename>/proc/</filename> file system configured for the
         unit's processes. This controls the <literal>subset=</literal> mount option of the
         <literal>procfs</literal> instance for the unit. For further details see <ulink
-        url="https://www.kernel.org/doc/html/latest/filesystems/proc.html#mount-options">The /proc
+        url="https://docs.kernel.org/filesystems/proc.html#mount-options">The /proc
         Filesystem</ulink>. Note that Linux exposes various kernel APIs via <filename>/proc/</filename>,
         which are made unavailable with this setting. Since these APIs are used frequently this option is
         useful only in a few, specific cases, and is not suitable for most non-trivial programs.</para>
@@ -345,14 +357,12 @@
         is used. In this case the source path refers to a path on the host file system, while the destination path
         refers to a path below the root directory of the unit.</para>
 
-        <para>Note that the destination directory must exist or systemd must be able to create it.  Thus, it
+        <para>Note that the destination directory must exist or systemd must be able to create it. Thus, it
         is not possible to use those options for mount points nested underneath paths specified in
         <varname>InaccessiblePaths=</varname>, or under <filename>/home/</filename> and other protected
         directories if <varname>ProtectHome=yes</varname> is
         specified. <varname>TemporaryFileSystem=</varname> with <literal>:ro</literal> or
-        <varname>ProtectHome=tmpfs</varname> should be used instead.</para>
-
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <varname>ProtectHome=tmpfs</varname> should be used instead.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -380,7 +390,7 @@
         paths. If the empty string is assigned, the entire list of mount paths defined prior to this is
         reset.</para>
 
-        <para>Note that the destination directory must exist or systemd must be able to create it.  Thus, it
+        <para>Note that the destination directory must exist or systemd must be able to create it. Thus, it
         is not possible to use those options for mount points nested underneath paths specified in
         <varname>InaccessiblePaths=</varname>, or under <filename>/home/</filename> and other protected
         directories if <varname>ProtectHome=yes</varname> is specified.</para>
@@ -428,6 +438,13 @@
         paths. If the empty string is assigned, the entire list of mount paths defined prior to this is
         reset.</para>
 
+        <para>Each image must carry a <filename>/usr/lib/extension-release.d/extension-release.IMAGE</filename>
+        file, with the appropriate metadata which matches <varname>RootImage=</varname>/<varname>RootDirectory=</varname>
+        or the host. See:
+        <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+        To disable the safety check that the extension-release file name matches the image file name, the
+        <varname>x-systemd.relax-extension-release-check</varname> mount option may be appended.</para>
+
         <para>When <varname>DevicePolicy=</varname> is set to <literal>closed</literal> or
         <literal>strict</literal>, or set to <literal>auto</literal> and <varname>DeviceAllow=</varname> is
         set, then this setting adds <filename>/dev/loop-control</filename> with <constant>rw</constant> mode,
@@ -440,6 +457,37 @@
 
         <xi:include href="system-only.xml" xpointer="singular"/></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>ExtensionDirectories=</varname></term>
+
+        <listitem><para>This setting is similar to <varname>BindReadOnlyPaths=</varname> in that it mounts a file
+        system hierarchy from a directory, but instead of providing a destination path, an overlay will be set
+        up. This option expects a whitespace separated list of source directories.</para>
+
+        <para>A read-only OverlayFS will be set up on top of <filename>/usr/</filename> and
+        <filename>/opt/</filename> hierarchies. The order in which the directories are listed will determine
+        the order in which the overlay is laid down: directories specified first to last will result in overlayfs
+        layers bottom to top.</para>
+
+        <para>Each directory listed in <varname>ExtensionDirectories=</varname> may be prefixed with <literal>-</literal>,
+        in which case it will be ignored when its source path does not exist. Any mounts created with this option are
+        specific to the unit, and are not visible in the host's mount table.</para>
+
+        <para>These settings may be used more than once, each usage appends to the unit's list of directories
+        paths. If the empty string is assigned, the entire list of mount paths defined prior to this is
+        reset.</para>
+
+        <para>Each directory must contain a <filename>/usr/lib/extension-release.d/extension-release.IMAGE</filename>
+        file, with the appropriate metadata which matches <varname>RootImage=</varname>/<varname>RootDirectory=</varname>
+        or the host. See:
+        <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+
+        <para>Note that usage from user units requires overlayfs support in unprivileged user namespaces,
+        which was first introduced in kernel v5.11.</para>
+
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -507,7 +555,7 @@
         that the static user with the name already exists. Similarly, if <varname>Group=</varname> is
         specified and the static user with the name exists, then it is required that the static group with
         the name already exists. Dynamic users/groups are allocated from the UID/GID range 61184…65519. It is
-        recommended to avoid this range for regular system or login users.  At any point in time each UID/GID
+        recommended to avoid this range for regular system or login users. At any point in time each UID/GID
         from this range is only assigned to zero or one dynamically allocated users/groups in use. However,
         UID/GIDs are recycled after a unit is terminated. Care should be taken that any processes running as
         part of a unit for which dynamic users/groups are enabled do not leave files or directories owned by
@@ -536,7 +584,9 @@
         <varname>BindPaths=</varname> and be careful with <constant>AF_UNIX</constant> file descriptor
         passing for directory file descriptors, as this would permit processes to create files or directories
         owned by the dynamic user/group that are not subject to the lifecycle and access guarantees of the
-        service. Defaults to off.</para></listitem>
+        service. Note that this option is currently incompatible with D-Bus policies, thus a service using
+        this option may currently not allocate a D-Bus service name (note that this does not affect calling
+        into other D-Bus services). Defaults to off.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -583,7 +633,7 @@
   <refsect1>
     <title>Capabilities</title>
 
-    <xi:include href="system-only.xml" xpointer="plural"/>
+    <xi:include href="system-or-user-ns.xml" xpointer="plural"/>
 
     <variablelist class='unit-directives'>
 
@@ -604,7 +654,7 @@
         once, in which case the bounding sets are merged by <constant>OR</constant>, or by
         <constant>AND</constant> if the lines are prefixed with <literal>~</literal> (see below). If the
         empty string is assigned to this option, the bounding set is reset to the empty capability set, and
-        all prior settings have no effect.  If set to <literal>~</literal> (without any further argument),
+        all prior settings have no effect. If set to <literal>~</literal> (without any further argument),
         the bounding set is reset to the full set of available capabilities, also undoing any previous
         settings. This does not affect commands prefixed with <literal>+</literal>.</para>
 
@@ -617,7 +667,7 @@
         <programlisting>CapabilityBoundingSet=CAP_A CAP_B
 CapabilityBoundingSet=CAP_B CAP_C</programlisting>
         then <constant index='false'>CAP_A</constant>, <constant index='false'>CAP_B</constant>, and
-        <constant index='false'>CAP_C</constant> are set.  If the second line is prefixed with
+        <constant index='false'>CAP_C</constant> are set. If the second line is prefixed with
         <literal>~</literal>, e.g.,
         <programlisting>CapabilityBoundingSet=CAP_A CAP_B
 CapabilityBoundingSet=~CAP_B CAP_C</programlisting>
@@ -630,15 +680,15 @@
         <listitem><para>Controls which capabilities to include in the ambient capability set for the executed
         process. Takes a whitespace-separated list of capability names, e.g. <constant>CAP_SYS_ADMIN</constant>,
         <constant>CAP_DAC_OVERRIDE</constant>, <constant>CAP_SYS_PTRACE</constant>. This option may appear more than
-        once in which case the ambient capability sets are merged (see the above examples in
+        once, in which case the ambient capability sets are merged (see the above examples in
         <varname>CapabilityBoundingSet=</varname>). If the list of capabilities is prefixed with <literal>~</literal>,
         all but the listed capabilities will be included, the effect of the assignment inverted. If the empty string is
         assigned to this option, the ambient capability set is reset to the empty capability set, and all prior
-        settings have no effect.  If set to <literal>~</literal> (without any further argument), the ambient capability
+        settings have no effect. If set to <literal>~</literal> (without any further argument), the ambient capability
         set is reset to the full set of available capabilities, also undoing any previous settings. Note that adding
-        capabilities to ambient capability set adds them to the process's inherited capability set.  </para><para>
+        capabilities to the ambient capability set adds them to the process's inherited capability set. </para><para>
         Ambient capability sets are useful if you want to execute a process as a non-privileged user but still want to
-        give it some capabilities.  Note that in this case option <constant>keep-caps</constant> is automatically added
+        give it some capabilities. Note that in this case option <constant>keep-caps</constant> is automatically added
         to <varname>SecureBits=</varname> to retain the capabilities over the user
         change. <varname>AmbientCapabilities=</varname> does not affect commands prefixed with
         <literal>+</literal>.</para></listitem>
@@ -659,28 +709,29 @@
         children can never gain new privileges through <function>execve()</function> (e.g. via setuid or
         setgid bits, or filesystem capabilities). This is the simplest and most effective way to ensure that
         a process and its children can never elevate privileges again. Defaults to false, but certain
-        settings override this and ignore the value of this setting.  This is the case when
-        <varname>DynamicUser=</varname>,
-        <varname>LockPersonality=</varname>,
-        <varname>MemoryDenyWriteExecute=</varname>,
-        <varname>PrivateDevices=</varname>,
-        <varname>ProtectClock=</varname>,
-        <varname>ProtectHostname=</varname>,
-        <varname>ProtectKernelLogs=</varname>,
-        <varname>ProtectKernelModules=</varname>,
-        <varname>ProtectKernelTunables=</varname>,
-        <varname>RestrictAddressFamilies=</varname>,
-        <varname>RestrictNamespaces=</varname>,
-        <varname>RestrictRealtime=</varname>,
-        <varname>RestrictSUIDSGID=</varname>,
-        <varname>SystemCallArchitectures=</varname>,
-        <varname>SystemCallFilter=</varname>, or
-        <varname>SystemCallLog=</varname> are specified. Note that even if this setting is overridden
-        by them, <command>systemctl show</command> shows the original value of this setting. In case the
-        service will be run in a new mount namespace anyway and SELinux is disabled, all file systems
-        are mounted with <constant>MS_NOSUID</constant> flag. Also see
-        <ulink url="https://www.kernel.org/doc/html/latest/userspace-api/no_new_privs.html">No New
-        Privileges Flag</ulink>.</para></listitem>
+        settings override this and ignore the value of this setting. This is the case when
+        <varname>DynamicUser=</varname>, <varname>LockPersonality=</varname>,
+        <varname>MemoryDenyWriteExecute=</varname>, <varname>PrivateDevices=</varname>,
+        <varname>ProtectClock=</varname>, <varname>ProtectHostname=</varname>,
+        <varname>ProtectKernelLogs=</varname>, <varname>ProtectKernelModules=</varname>,
+        <varname>ProtectKernelTunables=</varname>, <varname>RestrictAddressFamilies=</varname>,
+        <varname>RestrictNamespaces=</varname>, <varname>RestrictRealtime=</varname>,
+        <varname>RestrictSUIDSGID=</varname>, <varname>SystemCallArchitectures=</varname>,
+        <varname>SystemCallFilter=</varname>, or <varname>SystemCallLog=</varname> are specified. Note that
+        even if this setting is overridden by them, <command>systemctl show</command> shows the original
+        value of this setting. In case the service will be run in a new mount namespace anyway and SELinux is
+        disabled, all file systems are mounted with <constant>MS_NOSUID</constant> flag. Also see <ulink
+        url="https://docs.kernel.org/userspace-api/no_new_privs.html">No New Privileges
+        Flag</ulink>.</para>
+
+        <para>Note that this setting only has an effect on the unit's processes themselves (or any processes
+        directly or indirectly forked off them). It has no effect on processes potentially invoked on request
+        of them through tools such as <citerefentry
+        project='man-pages'><refentrytitle>at</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+        <citerefentry
+        project='man-pages'><refentrytitle>crontab</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+        <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>, or
+        arbitrary IPC services.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -689,9 +740,9 @@
         <listitem><para>Controls the secure bits set for the executed process. Takes a space-separated combination of
         options from the following list: <option>keep-caps</option>, <option>keep-caps-locked</option>,
         <option>no-setuid-fixup</option>, <option>no-setuid-fixup-locked</option>, <option>noroot</option>, and
-        <option>noroot-locked</option>.  This option may appear more than once, in which case the secure bits are
+        <option>noroot-locked</option>. This option may appear more than once, in which case the secure bits are
         ORed. If the empty string is assigned to this option, the bits are reset to 0. This does not affect commands
-        prefixed with <literal>+</literal>.  See <citerefentry
+        prefixed with <literal>+</literal>. See <citerefentry
         project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
         details.</para></listitem>
       </varlistentry>
@@ -711,10 +762,13 @@
 
         <listitem><para>Set the SELinux security context of the executed process. If set, this will override the
         automated domain transition. However, the policy still needs to authorize the transition. This directive is
-        ignored if SELinux is disabled. If prefixed by <literal>-</literal>, all errors will be ignored. This does not
-        affect commands prefixed with <literal>+</literal>.  See <citerefentry
-        project='die-net'><refentrytitle>setexeccon</refentrytitle><manvolnum>3</manvolnum></citerefentry> for
-        details.</para></listitem>
+        ignored if SELinux is disabled. If prefixed by <literal>-</literal>, failing to set the SELinux
+        security context will be ignored, but it's still possible that the subsequent
+        <function>execve()</function> may fail if the policy doesn't allow the transition for the
+        non-overridden context. This does not affect commands prefixed with <literal>+</literal>. See
+        <citerefentry
+        project='die-net'><refentrytitle>setexeccon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+        for details.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -770,13 +824,13 @@
 
         <listitem><para>Set soft and hard limits on various resources for executed processes. See
         <citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
-        details on the resource limit concept. Resource limits may be specified in two formats: either as
-        single value to set a specific soft and hard limit to the same value, or as colon-separated pair
-        <option>soft:hard</option> to set both limits individually (e.g. <literal>LimitAS=4G:16G</literal>).
-        Use the string <option>infinity</option> to configure no limit on a specific resource. The
-        multiplicative suffixes K, M, G, T, P and E (to the base 1024) may be used for resource limits
-        measured in bytes (e.g. <literal>LimitAS=16G</literal>). For the limits referring to time values, the
-        usual time units ms, s, min, h and so on may be used (see
+        details on the process resource limit concept. Process resource limits may be specified in two formats:
+        either as single value to set a specific soft and hard limit to the same value, or as colon-separated
+        pair <option>soft:hard</option> to set both limits individually
+        (e.g. <literal>LimitAS=4G:16G</literal>).  Use the string <option>infinity</option> to configure no
+        limit on a specific resource. The multiplicative suffixes K, M, G, T, P and E (to the base 1024) may
+        be used for resource limits measured in bytes (e.g. <literal>LimitAS=16G</literal>). For the limits
+        referring to time values, the usual time units ms, s, min, h and so on may be used (see
         <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
         details). Note that if no time unit is specified for <varname>LimitCPU=</varname> the default unit of
         seconds is implied, while for <varname>LimitRTTIME=</varname> the default unit of microseconds is
@@ -797,6 +851,14 @@
         runtime, and are generally more expressive. For example, <varname>MemoryMax=</varname> is a more
         powerful (and working) replacement for <varname>LimitRSS=</varname>.</para>
 
+        <para>Note that <varname>LimitNPROC=</varname> will limit the number of processes from one (real) UID and
+        not the number of processes started (forked) by the service. Therefore the limit is cumulative for all
+        processes running under the same UID. Please also note that the <varname>LimitNPROC=</varname> will not be
+        enforced if the service is running as root (and not dropping privileges). Due to these limitations,
+        <varname>TasksMax=</varname> (see <citerefentry><refentrytitle>systemd.resource-control</refentrytitle>
+        <manvolnum>5</manvolnum></citerefentry>) is typically a better choice than <varname>LimitNPROC=</varname>.
+        </para>
+
         <para>Resource limits not configured explicitly for a unit default to the value configured in the various
         <varname>DefaultLimitCPU=</varname>, <varname>DefaultLimitFSIZE=</varname>, … options available in
         <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, and –
@@ -818,15 +880,17 @@
         <table>
           <title>Resource limit directives, their equivalent <command>ulimit</command> shell commands and the unit used</title>
 
-          <tgroup cols='3'>
+          <tgroup cols='4'>
             <colspec colname='directive' />
             <colspec colname='equivalent' />
             <colspec colname='unit' />
+            <colspec colname='notes' />
             <thead>
               <row>
                 <entry>Directive</entry>
                 <entry><command>ulimit</command> equivalent</entry>
                 <entry>Unit</entry>
+                <entry>Notes</entry>
               </row>
             </thead>
             <tbody>
@@ -834,81 +898,97 @@
                 <entry>LimitCPU=</entry>
                 <entry>ulimit -t</entry>
                 <entry>Seconds</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitFSIZE=</entry>
                 <entry>ulimit -f</entry>
                 <entry>Bytes</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitDATA=</entry>
                 <entry>ulimit -d</entry>
                 <entry>Bytes</entry>
+                <entry>Don't use. This limits the allowed address range, not memory use! Defaults to unlimited and should not be lowered. To limit memory use, see <varname>MemoryMax=</varname> in <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</entry>
               </row>
               <row>
                 <entry>LimitSTACK=</entry>
                 <entry>ulimit -s</entry>
                 <entry>Bytes</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitCORE=</entry>
                 <entry>ulimit -c</entry>
                 <entry>Bytes</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitRSS=</entry>
                 <entry>ulimit -m</entry>
                 <entry>Bytes</entry>
+                <entry>Don't use. No effect on Linux.</entry>
               </row>
               <row>
                 <entry>LimitNOFILE=</entry>
                 <entry>ulimit -n</entry>
                 <entry>Number of File Descriptors</entry>
+                <entry>Don't use. Be careful when raising the soft limit above 1024, since <citerefentry project='man-pages'><refentrytitle>select</refentrytitle><manvolnum>2</manvolnum></citerefentry> cannot function with file descriptors above 1023 on Linux. Nowadays, the hard limit defaults to 524288, a very high value compared to historical defaults. Typically applications should increase their soft limit to the hard limit on their own, if they are OK with working with file descriptors above 1023, i.e. do not use <citerefentry project='man-pages'><refentrytitle>select</refentrytitle><manvolnum>2</manvolnum></citerefentry>. Note that file descriptors are nowadays accounted like any other form of memory, thus there should not be any need to lower the hard limit. Use <varname>MemoryMax=</varname> to control overall service memory use, including file descriptor memory.</entry>
               </row>
               <row>
                 <entry>LimitAS=</entry>
                 <entry>ulimit -v</entry>
                 <entry>Bytes</entry>
+                <entry>Don't use. This limits the allowed address range, not memory use! Defaults to unlimited and should not be lowered. To limit memory use, see <varname>MemoryMax=</varname> in <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</entry>
               </row>
               <row>
                 <entry>LimitNPROC=</entry>
                 <entry>ulimit -u</entry>
                 <entry>Number of Processes</entry>
+                <entry>This limit is enforced based on the number of processes belonging to the user. Typically it's better to track processes per service, i.e. use <varname>TasksMax=</varname>, see <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</entry>
               </row>
               <row>
                 <entry>LimitMEMLOCK=</entry>
                 <entry>ulimit -l</entry>
                 <entry>Bytes</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitLOCKS=</entry>
                 <entry>ulimit -x</entry>
                 <entry>Number of Locks</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitSIGPENDING=</entry>
                 <entry>ulimit -i</entry>
                 <entry>Number of Queued Signals</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitMSGQUEUE=</entry>
                 <entry>ulimit -q</entry>
                 <entry>Bytes</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitNICE=</entry>
                 <entry>ulimit -e</entry>
                 <entry>Nice Level</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitRTPRIO=</entry>
                 <entry>ulimit -r</entry>
                 <entry>Realtime Priority</entry>
+                <entry>-</entry>
               </row>
               <row>
                 <entry>LimitRTTIME=</entry>
-                <entry>No equivalent</entry>
+                <entry>ulimit -R</entry>
                 <entry>Microseconds</entry>
+                <entry>-</entry>
               </row>
             </tbody>
           </tgroup>
@@ -985,12 +1065,12 @@
         <listitem><para>Sets the adjustment value for the Linux kernel's Out-Of-Memory (OOM) killer score for
         executed processes. Takes an integer between -1000 (to disable OOM killing of processes of this unit)
         and 1000 (to make killing of processes of this unit under memory pressure very likely). See <ulink
-        url="https://www.kernel.org/doc/Documentation/filesystems/proc.txt">proc.txt</ulink> for details. If
-        not specified defaults to the OOM score adjustment level of the service manager itself, which is
-        normally at 0.</para>
+        url="https://docs.kernel.org/filesystems/proc.html">The /proc Filesystem</ulink> for
+        details. If not specified defaults to the OOM score adjustment level of the service manager itself,
+        which is normally at 0.</para>
 
         <para>Use the <varname>OOMPolicy=</varname> setting of service units to configure how the service
-        manager shall react to the kernel OOM killer terminating a process of the service.  See
+        manager shall react to the kernel OOM killer or <command>systemd-oomd</command> terminating a process of the service. See
         <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
         for details.</para></listitem>
       </varlistentry>
@@ -1008,16 +1088,20 @@
         <term><varname>Personality=</varname></term>
 
         <listitem><para>Controls which kernel architecture <citerefentry
-        project='man-pages'><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry> shall report,
-        when invoked by unit processes. Takes one of the architecture identifiers <constant>x86</constant>,
-        <constant>x86-64</constant>, <constant>ppc</constant>, <constant>ppc-le</constant>, <constant>ppc64</constant>,
-        <constant>ppc64-le</constant>, <constant>s390</constant> or <constant>s390x</constant>. Which personality
-        architectures are supported depends on the system architecture. Usually the 64bit versions of the various
-        system architectures support their immediate 32bit personality architecture counterpart, but no others. For
-        example, <constant>x86-64</constant> systems support the <constant>x86-64</constant> and
-        <constant>x86</constant> personalities but no others. The personality feature is useful when running 32-bit
-        services on a 64-bit host system. If not specified, the personality is left unmodified and thus reflects the
-        personality of the host system's kernel.</para></listitem>
+        project='man-pages'><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry> shall
+        report, when invoked by unit processes. Takes one of the architecture identifiers
+        <constant>arm64</constant>, <constant>arm64-be</constant>, <constant>arm</constant>,
+        <constant>arm-be</constant>, <constant>x86</constant>, <constant>x86-64</constant>,
+        <constant>ppc</constant>, <constant>ppc-le</constant>, <constant>ppc64</constant>,
+        <constant>ppc64-le</constant>, <constant>s390</constant> or <constant>s390x</constant>. Which
+        personality architectures are supported depends on the kernel's native architecture. Usually the
+        64bit versions of the various system architectures support their immediate 32bit personality
+        architecture counterpart, but no others. For example, <constant>x86-64</constant> systems support the
+        <constant>x86-64</constant> and <constant>x86</constant> personalities but no others. The personality
+        feature is useful when running 32-bit services on a 64-bit host system. If not specified, the
+        personality is left unmodified and thus reflects the personality of the host system's kernel. This
+        option is not useful on architectures for which only one native word width was ever available, such
+        as <constant>m68k</constant> (32bit only) or <constant>alpha</constant> (64bit only).</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1118,10 +1202,11 @@
       <varlistentry>
         <term><varname>IOSchedulingClass=</varname></term>
 
-        <listitem><para>Sets the I/O scheduling class for executed processes. Takes an integer between 0 and 3 or one
-        of the strings <option>none</option>, <option>realtime</option>, <option>best-effort</option> or
-        <option>idle</option>. If the empty string is assigned to this option, all prior assignments to both
-        <varname>IOSchedulingClass=</varname> and <varname>IOSchedulingPriority=</varname> have no effect. See
+        <listitem><para>Sets the I/O scheduling class for executed processes. Takes one of the strings
+        <option>realtime</option>, <option>best-effort</option> or <option>idle</option>. The kernel's
+        default scheduling class is <option>best-effort</option> at a priority of 4. If the empty string is
+        assigned to this option, all prior assignments to both <varname>IOSchedulingClass=</varname> and
+        <varname>IOSchedulingPriority=</varname> have no effect. See
         <citerefentry><refentrytitle>ioprio_set</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
         details.</para></listitem>
       </varlistentry>
@@ -1134,7 +1219,8 @@
         bandwidth is made available to the unit's processes, larger values mean less bandwidth. The available
         priorities depend on the selected I/O scheduling class (see above). If the empty string is assigned
         to this option, all prior assignments to both <varname>IOSchedulingClass=</varname> and
-        <varname>IOSchedulingPriority=</varname> have no effect.  See
+        <varname>IOSchedulingPriority=</varname> have no effect. For the kernel's default scheduling class
+        (<option>best-effort</option>) this defaults to 4. See
         <citerefentry><refentrytitle>ioprio_set</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
         details.</para></listitem>
       </varlistentry>
@@ -1150,7 +1236,7 @@
     affecting the process' ability to operate. Note that many of these sandboxing features are gracefully turned off on
     systems where the underlying security mechanism is not available. For example, <varname>ProtectSystem=</varname>
     has no effect if the kernel is built without file system namespacing or if the service manager runs in a container
-    manager that makes file system namespacing unavailable to its payload. Similar,
+    manager that makes file system namespacing unavailable to its payload. Similarly,
     <varname>RestrictRealtime=</varname> has no effect on systems that lack support for SECCOMP system call filtering,
     or in containers where support for this is turned off.</para>
 
@@ -1174,7 +1260,7 @@
         <filename>/proc/</filename> and <filename>/sys/</filename> (protect these directories using
         <varname>PrivateDevices=</varname>, <varname>ProtectKernelTunables=</varname>,
         <varname>ProtectControlGroups=</varname>). This setting ensures that any modification of the vendor-supplied
-        operating system (and optionally its configuration, and local mounts) is prohibited for the service.  It is
+        operating system (and optionally its configuration, and local mounts) is prohibited for the service. It is
         recommended to enable this setting for all long-running services, unless they are involved with system updates
         or need to modify the operating system in other ways. If this option is used,
         <varname>ReadWritePaths=</varname> may be used to exclude specific directories from being made read-only. This
@@ -1196,7 +1282,7 @@
         directories to be made visible when listed in <varname>BindPaths=</varname> or
         <varname>BindReadOnlyPaths=</varname>.</para>
 
-        <para>Setting this to <literal>yes</literal> is mostly equivalent to set the three directories in
+        <para>Setting this to <literal>yes</literal> is mostly equivalent to setting the three directories in
         <varname>InaccessiblePaths=</varname>. Similarly, <literal>read-only</literal> is mostly equivalent to
         <varname>ReadOnlyPaths=</varname>, and <literal>tmpfs</literal> is mostly equivalent to
         <varname>TemporaryFileSystem=</varname> with <literal>:ro</literal>.</para>
@@ -1207,7 +1293,7 @@
         <varname>DynamicUser=</varname> is set. This setting cannot ensure protection in all cases. In
         general it has the same limitations as <varname>ReadOnlyPaths=</varname>, see below.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1308,6 +1394,13 @@
         configuration or lifetime guarantees, please consider using
         <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
 
+        <para><varname>RuntimeDirectory=</varname>, <varname>StateDirectory=</varname>, <varname>CacheDirectory=</varname>
+        and <varname>LogsDirectory=</varname>  optionally support a second parameter, separated by <literal>:</literal>.
+        The second parameter will be interpreted as a destination path that will be created as a symlink to the directory.
+        The symlinks will be created after any <varname>BindPaths=</varname> or <varname>TemporaryFileSystem=</varname>
+        options have been set up, to make ephemeral symlinking possible. The same source can have multiple symlinks, by
+        using the same first parameter, but a different second parameter.</para></listitem>
+
         <para>The directories defined by these options are always created under the standard paths used by systemd
         (<filename>/var/</filename>, <filename>/run/</filename>, <filename>/etc/</filename>, …). If the service needs
         directories in a different location, a different mechanism has to be used to create them.</para>
@@ -1336,7 +1429,13 @@
         <programlisting>RuntimeDirectory=foo/bar
 StateDirectory=aaa/bbb ccc</programlisting>
         then the environment variable <literal>RUNTIME_DIRECTORY</literal> is set with <literal>/run/foo/bar</literal>, and
-        <literal>STATE_DIRECTORY</literal> is set with <literal>/var/lib/aaa/bbb:/var/lib/ccc</literal>.</para></listitem>
+        <literal>STATE_DIRECTORY</literal> is set with <literal>/var/lib/aaa/bbb:/var/lib/ccc</literal>.</para>
+
+        <para>Example: if a system service unit has the following,
+        <programlisting>RuntimeDirectory=foo:bar foo:baz</programlisting>
+        the service manager creates <filename index='false'>/run/foo</filename> (if it does not exist), and
+        <filename index='false'>/run/bar</filename> plus <filename index='false'>/run/baz</filename> as symlinks to
+        <filename index='false'>/run/foo</filename>.</para>
       </varlistentry>
 
       <varlistentry>
@@ -1348,7 +1447,7 @@
 
         <listitem><para>Specifies the access mode of the directories specified in <varname>RuntimeDirectory=</varname>,
         <varname>StateDirectory=</varname>, <varname>CacheDirectory=</varname>, <varname>LogsDirectory=</varname>, or
-        <varname>ConfigurationDirectory=</varname>, respectively, as an octal number.  Defaults to
+        <varname>ConfigurationDirectory=</varname>, respectively, as an octal number. Defaults to
         <constant>0755</constant>. See "Permissions" in <citerefentry
         project='man-pages'><refentrytitle>path_resolution</refentrytitle><manvolnum>7</manvolnum></citerefentry> for a
         discussion of the meaning of permission bits.</para></listitem>
@@ -1357,7 +1456,7 @@
       <varlistentry>
         <term><varname>RuntimeDirectoryPreserve=</varname></term>
 
-        <listitem><para>Takes a boolean argument or <option>restart</option>.  If set to <option>no</option> (the
+        <listitem><para>Takes a boolean argument or <option>restart</option>. If set to <option>no</option> (the
         default), the directories specified in <varname>RuntimeDirectory=</varname> are always removed when the service
         stops. If set to <option>restart</option> the directories are preserved when the service is both automatically
         and manually restarted. Here, the automatic restart means the operation specified in
@@ -1425,7 +1524,7 @@
 
         <para>Note that these settings will disconnect propagation of mounts from the unit's processes to the
         host. This means that this setting may not be used for services which shall be able to install mount points in
-        the main mount namespace. For <varname>ReadWritePaths=</varname> and <varname>ReadOnlyPaths=</varname>
+        the main mount namespace. For <varname>ReadWritePaths=</varname> and <varname>ReadOnlyPaths=</varname>,
         propagation in the other direction is not affected, i.e. mounts created on the host generally appear in the
         unit processes' namespace, and mounts removed on the host also disappear there too. In particular, note that
         mount propagation from host to unit will result in unmodified mounts to be created in the unit's namespace,
@@ -1448,7 +1547,7 @@
 ExecPaths=/usr/sbin/my_daemon /usr/lib /usr/lib64
 </programlisting></para>
 
-        <xi:include href="system-only.xml" xpointer="plural"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="plural"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1473,7 +1572,7 @@
         then the invoked processes by the unit cannot see any files or directories under <filename>/var/</filename> except for
         <filename>/var/lib/systemd</filename> or its contents.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1488,7 +1587,7 @@
         false. It is possible to run two or more units within the same private <filename>/tmp/</filename> and
         <filename>/var/tmp/</filename> namespace by using the <varname>JoinsNamespaceOf=</varname> directive,
         see <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-        for details. This setting is implied if <varname>DynamicUser=</varname> is set. For this setting the
+        for details. This setting is implied if <varname>DynamicUser=</varname> is set. For this setting, the
         same restrictions regarding mount propagation and privileges apply as for
         <varname>ReadOnlyPaths=</varname> and related calls, see above. Enabling this setting has the side
         effect of adding <varname>Requires=</varname> and <varname>After=</varname> dependencies on all mount
@@ -1501,39 +1600,46 @@
         available), and the unit should be written in a way that does not solely rely on this setting for
         security.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><varname>PrivateDevices=</varname></term>
 
-        <listitem><para>Takes a boolean argument. If true, sets up a new <filename>/dev/</filename> mount for the
-        executed processes and only adds API pseudo devices such as <filename>/dev/null</filename>,
-        <filename>/dev/zero</filename> or <filename>/dev/random</filename> (as well as the pseudo TTY subsystem) to it,
-        but no physical devices such as <filename>/dev/sda</filename>, system memory <filename>/dev/mem</filename>,
-        system ports <filename>/dev/port</filename> and others. This is useful to securely turn off physical device
-        access by the executed process. Defaults to false. Enabling this option will install a system call filter to
-        block low-level I/O system calls that are grouped in the <varname>@raw-io</varname> set, will also remove
-        <constant>CAP_MKNOD</constant> and <constant>CAP_SYS_RAWIO</constant> from the capability bounding set for the
-        unit (see above), and set <varname>DevicePolicy=closed</varname> (see
+        <listitem><para>Takes a boolean argument. If true, sets up a new <filename>/dev/</filename> mount for
+        the executed processes and only adds API pseudo devices such as <filename>/dev/null</filename>,
+        <filename>/dev/zero</filename> or <filename>/dev/random</filename> (as well as the pseudo TTY
+        subsystem) to it, but no physical devices such as <filename>/dev/sda</filename>, system memory
+        <filename>/dev/mem</filename>, system ports <filename>/dev/port</filename> and others. This is useful
+        to turn off physical device access by the executed process. Defaults to false.</para>
+
+        <para>Enabling this option will install a system call filter to block low-level I/O system calls that
+        are grouped in the <varname>@raw-io</varname> set, remove <constant>CAP_MKNOD</constant> and
+        <constant>CAP_SYS_RAWIO</constant> from the capability bounding set for the unit, and set
+        <varname>DevicePolicy=closed</varname> (see
         <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-        for details). Note that using this setting will disconnect propagation of mounts from the service to the host
-        (propagation in the opposite direction continues to work). This means that this setting may not be used for
-        services which shall be able to install mount points in the main mount namespace. The new
-        <filename>/dev/</filename> will be mounted read-only and 'noexec'. The latter may break old programs which try
-        to set up executable memory by using
+        for details). Note that using this setting will disconnect propagation of mounts from the service to
+        the host (propagation in the opposite direction continues to work). This means that this setting may
+        not be used for services which shall be able to install mount points in the main mount namespace. The
+        new <filename>/dev/</filename> will be mounted read-only and 'noexec'. The latter may break old
+        programs which try to set up executable memory by using
         <citerefentry><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry> of
-        <filename>/dev/zero</filename> instead of using <constant>MAP_ANON</constant>. For this setting the same
-        restrictions regarding mount propagation and privileges apply as for <varname>ReadOnlyPaths=</varname> and
-        related calls, see above. If turned on and if running in user mode, or in system mode, but without the
-        <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting <varname>User=</varname>),
-        <varname>NoNewPrivileges=yes</varname> is implied.</para>
+        <filename>/dev/zero</filename> instead of using <constant>MAP_ANON</constant>. For this setting the
+        same restrictions regarding mount propagation and privileges apply as for
+        <varname>ReadOnlyPaths=</varname> and related calls, see above. If turned on and if running in user
+        mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting
+        <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname> is implied.</para>
 
-        <para>Note that the implementation of this setting might be impossible (for example if mount namespaces are not
-        available), and the unit should be written in a way that does not solely rely on this setting for
-        security.</para>
+        <para>Note that the implementation of this setting might be impossible (for example if mount
+        namespaces are not available), and the unit should be written in a way that does not solely rely on
+        this setting for security.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/>
+
+        <para>When access to some but not all devices must be possible, the <varname>DeviceAllow=</varname>
+        setting might be used instead. See
+        <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1562,7 +1668,7 @@
         <varname>JoinsNamespaceOf=</varname> to listen on sockets inside of network namespaces of other
         services.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1581,7 +1687,7 @@
         <para>When this option is used on a socket unit any sockets bound on behalf of this unit will be
         bound within the specified network namespace.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1612,7 +1718,7 @@
         not available), and the unit should be written in a way that does not solely rely on this setting for
         security.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1628,7 +1734,7 @@
         <varname>IPCNamespacePath=</varname> configured, as otherwise the network namespace of those
         units is reused.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1682,7 +1788,7 @@
         capability (e.g. services for which <varname>User=</varname> is set),
         <varname>NoNewPrivileges=yes</varname> is implied.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1699,7 +1805,7 @@
         doesn't have the <constant>CAP_SYS_ADMIN</constant> capability (e.g. services for which
         <varname>User=</varname> is set), <varname>NoNewPrivileges=yes</varname> is implied.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1723,7 +1829,7 @@
         inaccessible. If <varname>ProtectKernelTunables=</varname> is set,
         <varname>MountAPIVFS=yes</varname> is implied.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1735,7 +1841,7 @@
         removes <constant>CAP_SYS_MODULE</constant> from the capability bounding set for the unit, and installs a
         system call filter to block module system calls, also <filename>/usr/lib/modules</filename> is made
         inaccessible. For this setting the same restrictions regarding mount propagation and privileges apply as for
-        <varname>ReadOnlyPaths=</varname> and related calls, see above.  Note that limited automatic module loading due
+        <varname>ReadOnlyPaths=</varname> and related calls, see above. Note that limited automatic module loading due
         to user configuration or kernel mapping tables might still happen as side effect of requested user operations,
         both privileged and unprivileged. To disable module auto-load feature please see
         <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
@@ -1744,7 +1850,7 @@
         but the unit doesn't have the <constant>CAP_SYS_ADMIN</constant> capability (e.g. services for
         which <varname>User=</varname> is set), <varname>NoNewPrivileges=yes</varname> is implied.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1763,7 +1869,7 @@
         capability (e.g. services for which <varname>User=</varname> is set),
         <varname>NoNewPrivileges=yes</varname> is implied.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1817,6 +1923,100 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>RestrictFileSystems=</varname></term>
+
+        <listitem><para>Restricts the set of filesystems processes of this unit can open files on. Takes a space-separated
+        list of filesystem names. Any filesystem listed is made accessible to the unit's processes, access to filesystem
+        types not listed is prohibited (allow-listing). If the first character of the list is <literal>~</literal>, the
+        effect is inverted: access to the filesystems listed is prohibited (deny-listing). If the empty string is assigned,
+        access to filesystems is not restricted.</para>
+
+        <para>If you specify both types of this option (i.e. allow-listing and deny-listing), the first encountered will take
+        precedence and will dictate the default action (allow access to the filesystem or deny it). Then the next occurrences
+        of this option will add or delete the listed filesystems from the set of the restricted filesystems, depending on its
+        type and the default action.</para>
+
+        <para>Example: if a unit has the following,
+        <programlisting>RestrictFileSystems=ext4 tmpfs
+RestrictFileSystems=ext2 ext4</programlisting>
+        then access to <constant>ext4</constant>, <constant>tmpfs</constant>, and <constant>ext2</constant> is allowed
+        and access to other filesystems is denied.</para>
+
+        <para>Example: if a unit has the following,
+        <programlisting>RestrictFileSystems=ext4 tmpfs
+RestrictFileSystems=~ext4</programlisting>
+        then only access <constant>tmpfs</constant> is allowed.</para>
+
+        <para>Example: if a unit has the following,
+        <programlisting>RestrictFileSystems=~ext4 tmpfs
+RestrictFileSystems=ext4</programlisting>
+        then only access to <constant>tmpfs</constant> is denied.</para>
+
+        <para>As the number of possible filesystems is large, predefined sets of filesystems are provided. A set
+        starts with <literal>@</literal> character, followed by name of the set.</para>
+
+        <table>
+          <title>Currently predefined filesystem sets</title>
+
+          <tgroup cols='2'>
+            <colspec colname='set' />
+            <colspec colname='description' />
+            <thead>
+              <row>
+                <entry>Set</entry>
+                <entry>Description</entry>
+              </row>
+            </thead>
+            <tbody>
+              <row>
+                <entry>@basic-api</entry>
+                <entry>Basic filesystem API.</entry>
+              </row>
+              <row>
+                <entry>@auxiliary-api</entry>
+                <entry>Auxiliary filesystem API.</entry>
+              </row>
+              <row>
+                <entry>@common-block</entry>
+                <entry>Common block device filesystems.</entry>
+              </row>
+              <row>
+                <entry>@historical-block</entry>
+                <entry>Historical block device filesystems.</entry>
+              </row>
+              <row>
+                <entry>@network</entry>
+                <entry>Well-known network filesystems.</entry>
+              </row>
+              <row>
+                <entry>@privileged-api</entry>
+                <entry>Privileged filesystem API.</entry>
+              </row>
+              <row>
+                <entry>@temporary</entry>
+                <entry>Temporary filesystems: tmpfs, ramfs.</entry>
+              </row>
+              <row>
+                <entry>@known</entry>
+                <entry>All known filesystems defined by the kernel. This list is defined statically in systemd based on a kernel version that was available when this systemd version was released. It will become progressively more out-of-date as the kernel is updated.</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </table>
+
+        <para>Use
+        <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+        <command>filesystems</command> command to retrieve a list of filesystems defined on the local
+        system.</para>
+
+        <para>Note that this setting might not be supported on some systems (for example if the LSM eBPF hook is
+        not enabled in the underlying kernel or if not using the unified control group hierarchy). In that case this setting
+        has no effect.</para>
+
+        <xi:include href="cgroup-sandboxing.xml" xpointer="singular"/></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>RestrictNamespaces=</varname></term>
 
         <listitem><para>Restricts access to Linux namespace functionality for the processes of this unit. For details
@@ -1839,7 +2039,7 @@
         <citerefentry><refentrytitle>setns</refentrytitle><manvolnum>2</manvolnum></citerefentry> system calls, taking
         the specified flags parameters into account. Note that — if this option is used — in addition to restricting
         creation and switching of the specified types of namespaces (or all of them, if true) access to the
-        <function>setns()</function> system call with a zero flags parameter is prohibited.  This setting is only
+        <function>setns()</function> system call with a zero flags parameter is prohibited. This setting is only
         supported on x86, x86-64, mips, mips-le, mips64, mips64-le, mips64-n32, mips64-le-n32, ppc64, ppc64-le, s390
         and s390x, and enforces no restrictions on other architectures. If running in user mode, or in system mode, but
         without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting <varname>User=</varname>),
@@ -1872,7 +2072,7 @@
 
         <listitem><para>Takes a boolean argument. If set, attempts to create memory mappings that are writable and
         executable at the same time, or to change existing memory mappings to become executable, or mapping shared
-        memory segments as executable are prohibited.  Specifically, a system call filter is added that rejects
+        memory segments as executable, are prohibited. Specifically, a system call filter is added that rejects
         <citerefentry><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry> system calls with both
         <constant>PROT_EXEC</constant> and <constant>PROT_WRITE</constant> set,
         <citerefentry><refentrytitle>mprotect</refentrytitle><manvolnum>2</manvolnum></citerefentry> or
@@ -1884,7 +2084,7 @@
         "trampoline" feature of various C compilers. This option improves service security, as it makes harder for
         software exploits to change running code dynamically. However, the protection can be circumvented, if
         the service can write to a filesystem, which is not mounted with <constant>noexec</constant> (such as
-        <filename>/dev/shm</filename>), or it can use <function>memfd_create()</function>.  This can be
+        <filename>/dev/shm</filename>), or it can use <function>memfd_create()</function>. This can be
         prevented by making such file systems inaccessible to the service
         (e.g. <varname>InaccessiblePaths=/dev/shm</varname>) and installing further system call filters
         (<varname>SystemCallFilter=~memfd_create</varname>). Note that this feature is fully available on
@@ -1921,7 +2121,7 @@
         project='man-pages'><refentrytitle>inode</refentrytitle><manvolnum>7</manvolnum></citerefentry>). If
         running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
         capability (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname> is
-        implied. As the SUID/SGID bits are mechanisms to elevate privileges, and allows users to acquire the
+        implied. As the SUID/SGID bits are mechanisms to elevate privileges, and allow users to acquire the
         identity of other users, it is recommended to restrict creation of SUID/SGID files to the few
         programs that actually require them. Note that this restricts marking of any type of file system
         object with these bits, including both regular files and directories (where the SGID is a different
@@ -1975,7 +2175,7 @@
         option. Hence it is primarily useful to explicitly request this behaviour if none of the other settings are
         used.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -2005,7 +2205,7 @@
         <para>Usually, it is best to leave this setting unmodified, and use higher level file system namespacing
         options instead, in particular <varname>PrivateMounts=</varname>, see above.</para>
 
-        <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+        <xi:include href="system-or-user-ns.xml" xpointer="singular"/></listitem>
       </varlistentry>
 
     </variablelist>
@@ -2031,7 +2231,7 @@
         full list). This value will be returned when a deny-listed system call is triggered, instead of
         terminating the processes immediately. Special setting <literal>kill</literal> can be used to
         explicitly specify killing. This value takes precedence over the one given in
-        <varname>SystemCallErrorNumber=</varname>, see below.  If running in user mode, or in system mode,
+        <varname>SystemCallErrorNumber=</varname>, see below. If running in user mode, or in system mode,
         but without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting
         <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname> is implied. This feature
         makes use of the Secure Computing Mode 2 interfaces of the kernel ('seccomp filtering') and is useful
@@ -2056,7 +2256,7 @@
         might be necessary to temporarily disable system call filters in order to simplify debugging of such
         failures.</para>
 
-        <para>If you specify both types of this option (i.e.  allow-listing and deny-listing), the first
+        <para>If you specify both types of this option (i.e. allow-listing and deny-listing), the first
         encountered will take precedence and will dictate the default action (termination or approval of a
         system call). Then the next occurrences of this option will add or delete the listed system calls
         from the set of the filtered system calls, depending of its type and the default action. (For
@@ -2064,7 +2264,7 @@
         <function>write()</function>, and right after it add a deny list rule for <function>write()</function>,
         then <function>write()</function> will be removed from the set.)</para>
 
-        <para>As the number of possible system calls is large, predefined sets of system calls are provided.  A set
+        <para>As the number of possible system calls is large, predefined sets of system calls are provided. A set
         starts with <literal>@</literal> character, followed by name of the set.
 
         <table>
@@ -2252,7 +2452,7 @@
         filter. The known architecture identifiers are the same as for <varname>ConditionArchitecture=</varname>
         described in <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
         as well as <constant>x32</constant>, <constant>mips64-n32</constant>, <constant>mips64-le-n32</constant>, and
-        the special identifier <constant>native</constant>.  The special identifier <constant>native</constant>
+        the special identifier <constant>native</constant>. The special identifier <constant>native</constant>
         implicitly maps to the native architecture of the system (or more precisely: to the architecture the system
         manager is compiled for). If running in user mode, or in system mode, but without the
         <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting <varname>User=</varname>),
@@ -2339,25 +2539,48 @@
         clients via D-Bus IPC, and generally not understood as being data that requires protection. Moreover,
         environment variables are propagated down the process tree, including across security boundaries
         (such as setuid/setgid executables), and hence might leak to processes that should not have access to
-        the secret data. Use <varname>LoadCredential=</varname> (see below) to pass data to unit processes
+        the secret data. Use <varname>LoadCredential=</varname>, <varname>LoadCredentialEncrypted=</varname>
+        or <varname>SetCredentialEncrypted=</varname> (see below) to pass data to unit processes
         securely.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><varname>EnvironmentFile=</varname></term>
 
-        <listitem><para>Similar to <varname>Environment=</varname> but reads the environment variables from a text
-        file. The text file should contain new-line-separated variable assignments.  Empty lines, lines without an
-        <literal>=</literal> separator, or lines starting with ; or # will be ignored, which may be used for
-        commenting. A line ending with a backslash will be concatenated with the following one, allowing multiline
-        variable definitions. The parser strips leading and trailing whitespace from the values of assignments, unless
-        you use double quotes (").</para>
+        <listitem><para>Similar to <varname>Environment=</varname>, but reads the environment variables from
+        a text file. The text file should contain newline-separated variable assignments. Empty lines, lines
+        without an <literal>=</literal> separator, or lines starting with <literal>;</literal> or
+        <literal>#</literal> will be ignored, which may be used for commenting. The file must be UTF-8
+        encoded. Valid characters are <ulink
+        url="https://www.unicode.org/glossary/#unicode_scalar_value">unicode scalar values</ulink> other than
+        <ulink url="https://www.unicode.org/glossary/#noncharacter">noncharacters</ulink>, U+0000 NUL, and
+        U+FEFF <ulink url="https://www.unicode.org/glossary/#byte_order_mark">byte order mark</ulink>.
+        Control codes other than NUL are allowed.</para>
 
-        <para><ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C escapes</ulink>
-        are supported, but not
-        <ulink url="https://en.wikipedia.org/wiki/Control_character#In_ASCII">most control characters</ulink>.
-        <literal>\t</literal> and <literal>\n</literal> can be used to insert tabs and newlines within
-        <varname>EnvironmentFile=</varname>.</para>
+        <para>In the file, an unquoted value after the <literal>=</literal> is parsed with the same backslash-escape
+        rules as <ulink
+        url="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_01">unquoted
+        text</ulink> in a POSIX shell, but unlike in a shell, interior whitespace is preserved and quotes after the
+        first non-whitespace character are preserved. Leading and trailing whitespace (space, tab, carriage return) is
+        discarded, but interior whitespace within the line is preserved verbatim. A line ending with a backslash will be
+        continued to the following one, with the newline itself discarded. A backslash
+        <literal>\</literal> followed by any character other than newline will preserve the following character, so that
+        <literal>\\</literal> will become the value <literal>\</literal>.</para>
+
+        <para>In the file, a <literal>'</literal>-quoted value after the <literal>=</literal> can span multiple lines
+        and contain any character verbatim other than single quote, like <ulink
+        url="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_02">single-quoted
+        text</ulink> in a POSIX shell. No backslash-escape sequences are recognized. Leading and trailing whitespace
+        outside of the single quotes is discarded.</para>
+
+        <para>In the file, a <literal>"</literal>-quoted value after the <literal>=</literal> can span multiple lines,
+        and the same escape sequences are recognized as in <ulink
+        url="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_03">double-quoted
+        text</ulink> of a POSIX shell. Backslash (<literal>\</literal>) followed by any of <literal>"\`$</literal> will
+        preserve that character. A backslash followed by newline is a line continuation, and the newline itself is
+        discarded. A backslash followed by any other character is ignored; both the backslash and the following
+        character are preserved verbatim. Leading and trailing whitespace outside of the double quotes is
+        discarded.</para>
 
         <para>The argument passed should be an absolute filename or wildcard expression, optionally prefixed with
         <literal>-</literal>, which indicates that if the file does not exist, it will not be read and no error or
@@ -2366,8 +2589,8 @@
         have no effect.</para>
 
         <para>The files listed with this directive will be read shortly before the process is executed (more
-        specifically, after all processes from a previous unit state terminated.  This means you can generate these
-        files in one unit state, and read it with this option in the next.  The files are read from the file
+        specifically, after all processes from a previous unit state terminated. This means you can generate these
+        files in one unit state, and read it with this option in the next. The files are read from the file
         system of the service manager, before any file system changes like bind mounts take place).</para>
 
         <para>Settings from these files override settings made with <varname>Environment=</varname>. If the same
@@ -2390,12 +2613,6 @@
         <para>Variables set for invoked processes due to this setting are subject to being overridden by those
         configured with <varname>Environment=</varname> or <varname>EnvironmentFile=</varname>.</para>
 
-        <para><ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C escapes</ulink>
-        are supported, but not
-        <ulink url="https://en.wikipedia.org/wiki/Control_character#In_ASCII">most control characters</ulink>.
-        <literal>\t</literal> and <literal>\n</literal> can be used to insert tabs and newlines within
-        <varname>EnvironmentFile=</varname>.</para>
-
         <para>Example:
         <programlisting>PassEnvironment=VAR1 VAR2 VAR3</programlisting>
         passes three variables <literal>VAR1</literal>,
@@ -2486,12 +2703,12 @@
         daemon.</para>
 
         <para>The <option>fd:<replaceable>name</replaceable></option> option connects standard input to a specific,
-        named file descriptor provided by a socket unit.  The name may be specified as part of this option, following a
-        <literal>:</literal> character (e.g. <literal>fd:foobar</literal>).  If no name is specified, the name
+        named file descriptor provided by a socket unit. The name may be specified as part of this option, following a
+        <literal>:</literal> character (e.g. <literal>fd:foobar</literal>). If no name is specified, the name
         <literal>stdin</literal> is implied (i.e. <literal>fd</literal> is equivalent to <literal>fd:stdin</literal>).
         At least one socket unit defining the specified name must be provided via the <varname>Sockets=</varname>
-        option, and the file descriptor name may differ from the name of its containing socket unit.  If multiple
-        matches are found, the first one will be used.  See <varname>FileDescriptorName=</varname> in
+        option, and the file descriptor name may differ from the name of its containing socket unit. If multiple
+        matches are found, the first one will be used. See <varname>FileDescriptorName=</varname> in
         <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more
         details about named file descriptors and their ordering.</para>
 
@@ -2539,8 +2756,8 @@
         <varname>StandardInput=</varname>, see above. If <replaceable>path</replaceable> refers to a regular file
         on the filesystem, it is opened (created if it doesn't exist yet) for writing at the beginning of the file,
         but without truncating it.
-        If standard input and output are directed to the same file path, it is opened only once, for reading as well
-        as writing and duplicated. This is particularly useful when the specified path refers to an
+        If standard input and output are directed to the same file path, it is opened only once — for reading as well
+        as writing — and duplicated. This is particularly useful when the specified path refers to an
         <constant>AF_UNIX</constant> socket in the file system, as in that case only a
         single stream connection is created for both input and output.</para>
 
@@ -2566,16 +2783,17 @@
         <para><option>socket</option> connects standard output to a socket acquired via socket activation. The
         semantics are similar to the same option of <varname>StandardInput=</varname>, see above.</para>
 
-        <para>The <option>fd:<replaceable>name</replaceable></option> option connects standard output to a specific,
-        named file descriptor provided by a socket unit.  A name may be specified as part of this option, following a
-        <literal>:</literal> character (e.g. <literal>fd:foobar</literal>).  If no name is specified, the name
+        <para>The <option>fd:<replaceable>name</replaceable></option> option connects standard output to a
+        specific, named file descriptor provided by a socket unit. A name may be specified as part of this
+        option, following a <literal>:</literal> character
+        (e.g. <literal>fd:<replaceable>foobar</replaceable></literal>). If no name is specified, the name
         <literal>stdout</literal> is implied (i.e. <literal>fd</literal> is equivalent to
-        <literal>fd:stdout</literal>).  At least one socket unit defining the specified name must be provided via the
-        <varname>Sockets=</varname> option, and the file descriptor name may differ from the name of its containing
-        socket unit.  If multiple matches are found, the first one will be used.  See
+        <literal>fd:stdout</literal>). At least one socket unit defining the specified name must be provided
+        via the <varname>Sockets=</varname> option, and the file descriptor name may differ from the name of
+        its containing socket unit. If multiple matches are found, the first one will be used. See
         <varname>FileDescriptorName=</varname> in
-        <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more
-        details about named descriptors and their ordering.</para>
+        <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        for more details about named descriptors and their ordering.</para>
 
         <para>If the standard output (or error output, see below) of a unit is connected to the journal or
         the kernel log buffer, the unit will implicitly gain a dependency of type <varname>After=</varname>
@@ -2586,7 +2804,11 @@
         writing text to stderr will not work. To mitigate this use the construct <command>echo "hello"
         >&amp;2</command> instead, which is mostly equivalent and avoids this pitfall.</para>
 
-        <para>This setting defaults to the value set with <varname>DefaultStandardOutput=</varname> in
+        <para>If <varname>StandardInput=</varname> is set to one of <option>tty</option>, <option>tty-force</option>,
+        <option>tty-fail</option>, <option>socket</option>, or <option>fd:<replaceable>name</replaceable></option>, this
+        setting defaults to <option>inherit</option>.</para>
+
+        <para>In other cases, this setting defaults to the value set with <varname>DefaultStandardOutput=</varname> in
         <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, which
         defaults to <option>journal</option>. Note that setting this parameter might result in additional dependencies
         to be added to the unit (see above).</para></listitem>
@@ -2640,11 +2862,13 @@
 
         <programlisting>…
 StandardInput=data
-StandardInputData=SWNrIHNpdHplIGRhIHVuJyBlc3NlIEtsb3BzLAp1ZmYgZWVtYWwga2xvcHAncy4KSWNrIGtpZWtl \
-                  LCBzdGF1bmUsIHd1bmRyZSBtaXIsCnVmZiBlZW1hbCBqZWh0IHNlIHVmZiBkaWUgVMO8ci4KTmFu \
-                  dSwgZGVuayBpY2ssIGljayBkZW5rIG5hbnUhCkpldHogaXNzZSB1ZmYsIGVyc2NodCB3YXIgc2Ug \
-                  enUhCkljayBqZWhlIHJhdXMgdW5kIGJsaWNrZSDigJQKdW5kIHdlciBzdGVodCBkcmF1w59lbj8g \
-                  SWNrZSEK
+StandardInputData=V2XigLJyZSBubyBzdHJhbmdlcnMgdG8gbG92ZQpZb3Uga25vdyB0aGUgcnVsZXMgYW5kIHNvIGRv \
+                  IEkKQSBmdWxsIGNvbW1pdG1lbnQncyB3aGF0IEnigLJtIHRoaW5raW5nIG9mCllvdSB3b3VsZG4n \
+                  dCBnZXQgdGhpcyBmcm9tIGFueSBvdGhlciBndXkKSSBqdXN0IHdhbm5hIHRlbGwgeW91IGhvdyBJ \
+                  J20gZmVlbGluZwpHb3R0YSBtYWtlIHlvdSB1bmRlcnN0YW5kCgpOZXZlciBnb25uYSBnaXZlIHlv \
+                  dSB1cApOZXZlciBnb25uYSBsZXQgeW91IGRvd24KTmV2ZXIgZ29ubmEgcnVuIGFyb3VuZCBhbmQg \
+                  ZGVzZXJ0IHlvdQpOZXZlciBnb25uYSBtYWtlIHlvdSBjcnkKTmV2ZXIgZ29ubmEgc2F5IGdvb2Ri \
+                  eWUKTmV2ZXIgZ29ubmEgdGVsbCBhIGxpZSBhbmQgaHVydCB5b3UK
 …</programlisting></listitem>
       </varlistentry>
 
@@ -2691,16 +2915,49 @@
         <term><varname>LogRateLimitIntervalSec=</varname></term>
         <term><varname>LogRateLimitBurst=</varname></term>
 
-        <listitem><para>Configures the rate limiting that is applied to messages generated by this unit. If, in the
-        time interval defined by <varname>LogRateLimitIntervalSec=</varname>, more messages than specified in
-        <varname>LogRateLimitBurst=</varname> are logged by a service, all further messages within the interval are
-        dropped until the interval is over. A message about the number of dropped messages is generated. The time
-        specification for <varname>LogRateLimitIntervalSec=</varname> may be specified in the following units: "s",
-        "min", "h", "ms", "us" (see
-        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details).
-        The default settings are set by <varname>RateLimitIntervalSec=</varname> and <varname>RateLimitBurst=</varname>
-        configured in <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
-        </para></listitem>
+        <listitem><para>Configures the rate limiting that is applied to log messages generated by this
+        unit. If, in the time interval defined by <varname>LogRateLimitIntervalSec=</varname>, more messages
+        than specified in <varname>LogRateLimitBurst=</varname> are logged by a service, all further messages
+        within the interval are dropped until the interval is over. A message about the number of dropped
+        messages is generated. The time specification for <varname>LogRateLimitIntervalSec=</varname> may be
+        specified in the following units: "s", "min", "h", "ms", "us" (see
+        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
+        details).  The default settings are set by <varname>RateLimitIntervalSec=</varname> and
+        <varname>RateLimitBurst=</varname> configured in
+        <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note
+        that this only applies to log messages that are processed by the logging subsystem, i.e. by
+        <filename>systemd-journald.service</filename>. This means, if you connect a service's stderr directly
+        to a file via <varname>StandardOutput=file:…</varname> or a similar setting the rate limiting will
+        not be applied to messages written that way (but they will be enforced for messages generated via
+        <function>syslog()</function> or similar).</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>LogFilterPatterns=</varname></term>
+
+        <listitem><para>Define an extended regular expression to filter log messages based on the
+        <varname>MESSAGE=</varname> field of the structured message. If the first character of the pattern is
+        <literal>~</literal>, log entries matching the pattern should be discarded. This option takes a single
+        pattern as an argument but can be used multiple times to create a list of allowed and denied patterns.
+        If the empty string is assigned, the filter is reset, and all prior assignments will have no effect.</para>
+
+        <para>Because the <literal>~</literal> character is used to define denied patterns, it must be replaced
+        with <literal>\x7e</literal> to allow a message starting with <literal>~</literal>. For example,
+        <literal>~foobar</literal> would add a pattern matching <literal>foobar</literal> to the deny list, while
+        <literal>\x7efoobar</literal> would add a pattern matching <literal>~foobar</literal> to the allow list.</para>
+
+        <para>Log messages are tested against denied patterns (if any), then against allowed patterns
+        (if any). If a log message matches any of the denied patterns, it will be discarded, whatever the
+        allowed patterns. Then, remaining log messages are tested against allowed patterns. Messages matching
+        against none of the allowed pattern are discarded. If no allowed patterns are defined, then all
+        messages are processed directly after going through denied filters.</para>
+
+        <para>Filtering is based on the unit for which <varname>LogFilterPatterns=</varname> is defined, meaning log
+        messages coming from
+        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> about the
+        unit are not taken into account. Filtered log messages won't be forwarded to traditional syslog daemons,
+        the kernel log buffer (kmsg), the systemd console, or sent as wall messages to all logged-in
+        users.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -2721,8 +2978,8 @@
         <para>Internally, journal namespaces are implemented through Linux mount namespacing and
         over-mounting the directory that contains the relevant <constant>AF_UNIX</constant> sockets used for
         logging in the unit's mount namespace. Since mount namespaces are used this setting disconnects
-        propagation of mounts from the unit's processes to the host, similar to how
-        <varname>ReadOnlyPaths=</varname> and similar settings (see above) work. Journal namespaces may hence
+        propagation of mounts from the unit's processes to the host, similarly to how
+        <varname>ReadOnlyPaths=</varname> and similar settings describe above work. Journal namespaces may hence
         not be used for services that need to establish mount points on the host.</para>
 
         <para>When this option is used the unit will automatically gain ordering and requirement dependencies
@@ -2740,7 +2997,7 @@
 
         <listitem><para>Sets the process name ("<command>syslog</command> tag") to prefix log lines sent to
         the logging system or the kernel log buffer with. If not set, defaults to the process name of the
-        executed process.  This option is only useful when <varname>StandardOutput=</varname> or
+        executed process. This option is only useful when <varname>StandardOutput=</varname> or
         <varname>StandardError=</varname> are set to <option>journal</option> or <option>kmsg</option> (or to
         the same settings in combination with <option>+console</option>) and only applies to log messages
         written to stdout or stderr.</para></listitem>
@@ -2806,7 +3063,7 @@
         <term><varname>TTYReset=</varname></term>
 
         <listitem><para>Reset the terminal device specified with <varname>TTYPath=</varname> before and after
-        execution.  Defaults to <literal>no</literal>.</para></listitem>
+        execution. Defaults to <literal>no</literal>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -2817,6 +3074,14 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>TTYRows=</varname></term>
+        <term><varname>TTYColumns=</varname></term>
+
+        <listitem><para>Configure the size of the TTY specified with <varname>TTYPath=</varname>. If unset or
+        set to the empty string, the kernel default is used.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>TTYVTDisallocate=</varname></term>
 
         <listitem><para>If the terminal device specified with <varname>TTYPath=</varname> is a virtual console
@@ -2833,6 +3098,7 @@
 
       <varlistentry>
         <term><varname>LoadCredential=</varname><replaceable>ID</replaceable><optional>:<replaceable>PATH</replaceable></optional></term>
+        <term><varname>LoadCredentialEncrypted=</varname><replaceable>ID</replaceable><optional>:<replaceable>PATH</replaceable></optional></term>
 
         <listitem><para>Pass a credential to the unit. Credentials are limited-size binary or textual objects
         that may be passed to unit processes. They are primarily used for passing cryptographic keys (both
@@ -2850,16 +3116,51 @@
         is absolute it is opened as regular file and the credential data is read from it. If the absolute
         path refers to an <constant>AF_UNIX</constant> stream socket in the file system a connection is made
         to it (only once at unit start-up) and the credential data read from the connection, providing an
-        easy IPC integration point for dynamically providing credentials from other services. If the
-        specified path is not absolute and itself qualifies as valid credential identifier it is understood
-        to refer to a credential that the service manager itself received via the
-        <varname>$CREDENTIALS_DIRECTORY</varname> environment variable, which may be used to propagate
-        credentials from an invoking environment (e.g. a container manager that invoked the service manager)
-        into a service. The contents of the file/socket may be arbitrary binary or textual data, including
-        newline characters and <constant>NUL</constant> bytes. If the file system path is omitted it is
-        chosen identical to the credential name, i.e. this is a terse way do declare credentials to inherit
-        from the service manager into a service. This option may be used multiple times, each time defining
-        an additional credential to pass to the unit.</para>
+        easy IPC integration point for dynamically transferring credentials from other services.</para>
+
+        <para>If the specified path is not absolute and itself qualifies as valid credential identifier it is
+        attempted to find a credential that the service manager itself received under the specified name —
+        which may be used to propagate credentials from an invoking environment (e.g. a container manager
+        that invoked the service manager) into a service. If no matching system credential is found, the
+        directories <filename>/etc/credstore/</filename>, <filename>/run/credstore/</filename> and
+        <filename>/usr/lib/credstore/</filename> are searched for files under the credential's name — which
+        hence are recommended locations for credential data on disk. If
+        <varname>LoadCredentialEncrypted=</varname> is used <filename>/run/credstore.encrypted/</filename>,
+        <filename>/etc/credstore.encrypted/</filename>, and
+        <filename>/usr/lib/credstore.encrypted/</filename> are searched as well.</para>
+
+        <para>If the file system path is omitted it is chosen identical to the credential name, i.e. this is
+        a terse way to declare credentials to inherit from the service manager into a service. This option
+        may be used multiple times, each time defining an additional credential to pass to the unit.</para>
+
+        <para>If an absolute path referring to a directory is specified, every file in that directory
+        (recursively) will be loaded as a separate credential. The ID for each credential will be the
+        provided ID suffixed with <literal>_$FILENAME</literal> (e.g., <literal>Key_file1</literal>). When
+        loading from a directory, symlinks will be ignored.</para>
+
+        <para>The contents of the file/socket may be arbitrary binary or textual data, including newline
+        characters and <constant>NUL</constant> bytes.</para>
+
+        <para>The <varname>LoadCredentialEncrypted=</varname> setting is identical to
+        <varname>LoadCredential=</varname>, except that the credential data is decrypted and authenticated
+        before being passed on to the executed processes. Specifically, the referenced path should refer to a
+        file or socket with an encrypted credential, as implemented by
+        <citerefentry><refentrytitle>systemd-creds</refentrytitle><manvolnum>1</manvolnum></citerefentry>. This
+        credential is loaded, decrypted, authenticated and then passed to the application in plaintext form,
+        in the same way a regular credential specified via <varname>LoadCredential=</varname> would be. A
+        credential configured this way may be symmetrically encrypted/authenticated with a secret key derived
+        from the system's TPM2 security chip, or with a secret key stored in
+        <filename>/var/lib/systemd/credentials.secret</filename>, or with both. Using encrypted and
+        authenticated credentials improves security as credentials are not stored in plaintext and only
+        authenticated and decrypted into plaintext the moment a service requiring them is started. Moreover,
+        credentials may be bound to the local hardware and installations, so that they cannot easily be
+        analyzed offline, or be generated externally. When <varname>DevicePolicy=</varname> is set to
+        <literal>closed</literal> or <literal>strict</literal>, or set to <literal>auto</literal> and
+        <varname>DeviceAllow=</varname> is set, or <varname>PrivateDevices=</varname> is set, then this
+        setting adds <filename>/dev/tpmrm0</filename> with <constant>rw</constant> mode to
+        <varname>DeviceAllow=</varname>. See
+        <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        for the details about <varname>DevicePolicy=</varname> or <varname>DeviceAllow=</varname>.</para>
 
         <para>The credential files/IPC sockets must be accessible to the service manager, but don't have to
         be directly accessible to the unit's processes: the credential data is read and copied into separate,
@@ -2870,10 +3171,33 @@
 
         <para>In order to reference the path a credential may be read from within a
         <varname>ExecStart=</varname> command line use <literal>${CREDENTIALS_DIRECTORY}/mycred</literal>,
-        e.g. <literal>ExecStart=cat ${CREDENTIALS_DIRECTORY}/mycred</literal>.</para>
+        e.g. <literal>ExecStart=cat ${CREDENTIALS_DIRECTORY}/mycred</literal>. In order to reference the path
+        a credential may be read from within a <varname>Environment=</varname> line use
+        <literal>%d/mycred</literal>, e.g. <literal>Environment=MYCREDPATH=%d/mycred</literal>.</para>
 
         <para>Currently, an accumulated credential size limit of 1 MB per unit is enforced.</para>
 
+        <para>The service manager itself may receive system credentials that can be propagated to services
+        from a hosting container manager or VM hypervisor. See the <ulink
+        url="https://systemd.io/CONTAINER_INTERFACE">Container Interface</ulink> documentation for details
+        about the former. For the latter, pass <ulink
+        url="https://www.dmtf.org/standards/smbios">DMI/SMBIOS</ulink> OEM string table entries (field type
+        11) with a prefix of <literal>io.systemd.credential:</literal> or
+        <literal>io.systemd.credential.binary:</literal>. In both cases a key/value pair separated by
+        <literal>=</literal> is expected, in the latter case the right-hand side is Base64 decoded when
+        parsed (thus permitting binary data to be passed in). Example
+        <ulink url="https://www.qemu.org/docs/master/system/index.html">qemu</ulink>
+        switch: <literal>-smbios
+        type=11,value=io.systemd.credential:xx=yy</literal>, or <literal>-smbios
+        type=11,value=io.systemd.credential.binary:rick=TmV2ZXIgR29ubmEgR2l2ZSBZb3UgVXA=</literal>. Alternatively,
+        use the <command>qemu</command> <literal>fw_cfg</literal> node
+        <literal>opt/io.systemd.credentials/</literal>. Example <command>qemu</command> switch: <literal>-fw_cfg
+        name=opt/io.systemd.credentials/mycred,string=supersecret</literal>. They may also be specified on
+        the kernel command line using the <literal>systemd.set_credential=</literal> switch (see
+        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>) and from
+        the UEFI firmware environment via
+        <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
+
         <para>If referencing an <constant>AF_UNIX</constant> stream socket to connect to, the connection will
         originate from an abstract namespace socket, that includes information about the unit and the
         credential ID in its socket name. Use <citerefentry
@@ -2887,11 +3211,15 @@
         ID requested. Example: <literal>\0adf9d86b6eda275e/unit/foobar.service/credx</literal> in case the
         credential <literal>credx</literal> is requested for a unit <literal>foobar.service</literal>. This
         functionality is useful for using a single listening socket to serve credentials to multiple
-        consumers.</para></listitem>
+        consumers.</para>
+
+        <para>For further information see <ulink url="https://systemd.io/CREDENTIALS">System and Service
+        Credentials</ulink> documentation.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><varname>SetCredential=</varname><replaceable>ID</replaceable>:<replaceable>VALUE</replaceable></term>
+        <term><varname>SetCredentialEncrypted=</varname><replaceable>ID</replaceable>:<replaceable>VALUE</replaceable></term>
 
         <listitem><para>The <varname>SetCredential=</varname> setting is similar to
         <varname>LoadCredential=</varname> but accepts a literal value to use as data for the credential,
@@ -2902,6 +3230,14 @@
         C-style escaping (i.e. <literal>\n</literal> to embed a newline, or <literal>\x00</literal> to embed
         a <constant>NUL</constant> byte).</para>
 
+        <para>The <varname>SetCredentialEncrypted=</varname> setting is identical to
+        <varname>SetCredential=</varname> but expects an encrypted credential in literal form as value. This
+        allows embedding confidential credentials securely directly in unit files. Use
+        <citerefentry><refentrytitle>systemd-creds</refentrytitle><manvolnum>1</manvolnum></citerefentry>'
+        <option>-p</option> switch to generate suitable <varname>SetCredentialEncrypted=</varname> lines
+        directly from plaintext credentials. For further details see
+        <varname>LoadCredentialEncrypted=</varname> above.</para>
+
         <para>If a credential of the same ID is listed in both <varname>LoadCredential=</varname> and
         <varname>SetCredential=</varname>, the latter will act as default if the former cannot be
         retrieved. In this case not being able to retrieve the credential from the path specified in
@@ -2997,7 +3333,7 @@
     configuration, with just a few environment variables. The user manager inherits environment variables as
     any other system service, but in addition may receive additional environment variables from PAM, and,
     typically, additional imported variables when the user starts a graphical session. It is recommended to
-    keep the environment blocks in both the system and user managers managers lean. Importing all variables
+    keep the environment blocks in both the system and user managers lean. Importing all variables
     inherited by the graphical session or by one of the user shells is strongly discouraged.</para>
 
     <para>Hint: <command>systemd-run -P env</command> and <command>systemd-run --user -P env</command> print
@@ -3098,14 +3434,14 @@
 
           <listitem><para>The PID of the unit's main process if it is
           known. This is only set for control processes as invoked by
-          <varname>ExecReload=</varname> and similar. </para></listitem>
+          <varname>ExecReload=</varname> and similar.</para></listitem>
         </varlistentry>
 
         <varlistentry>
           <term><varname>$MANAGERPID</varname></term>
 
           <listitem><para>The PID of the user <command>systemd</command>
-          instance, set for processes spawned by it. </para></listitem>
+          instance, set for processes spawned by it.</para></listitem>
         </varlistentry>
 
         <varlistentry>
@@ -3143,7 +3479,7 @@
           <listitem><para>The PID of the unit process (e.g. process invoked by
           <varname>ExecStart=</varname>). The child process can use this information to determine
           whether the process is directly invoked by the service manager or indirectly as a child of
-          another process by comparing this value with the current PID (as similar to the scheme used in
+          another process by comparing this value with the current PID (similarly to the scheme used in
           <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
           with <varname>$LISTEN_PID</varname> and <varname>$LISTEN_FDS</varname>).</para></listitem>
         </varlistentry>
@@ -3195,7 +3531,7 @@
         <varlistentry>
           <term><varname>$SERVICE_RESULT</varname></term>
 
-          <listitem><para>Only defined for the service unit type, this environment variable is passed to all
+          <listitem><para>Only used for the service unit type. This environment variable is passed to all
           <varname>ExecStop=</varname> and <varname>ExecStopPost=</varname> processes, and encodes the service
           "result". Currently, the following values are defined:</para>
 
@@ -3263,7 +3599,7 @@
           <term><varname>$EXIT_CODE</varname></term>
           <term><varname>$EXIT_STATUS</varname></term>
 
-          <listitem><para>Only defined for the service unit type, these environment variables are passed to all
+          <listitem><para>Only defined for the service unit type. These environment variables are passed to all
           <varname>ExecStop=</varname>, <varname>ExecStopPost=</varname> processes and contain exit status/code
           information of the main process of the service. For the precise definition of the exit code and status, see
           <citerefentry><refentrytitle>wait</refentrytitle><manvolnum>2</manvolnum></citerefentry>. <varname>$EXIT_CODE</varname>
@@ -3376,6 +3712,31 @@
         </varlistentry>
 
         <varlistentry>
+          <term><varname>$MONITOR_SERVICE_RESULT</varname></term>
+          <term><varname>$MONITOR_EXIT_CODE</varname></term>
+          <term><varname>$MONITOR_EXIT_STATUS</varname></term>
+          <term><varname>$MONITOR_INVOCATION_ID</varname></term>
+          <term><varname>$MONITOR_UNIT</varname></term>
+
+          <listitem><para>Only defined for the service unit type. Those environment variables are passed to
+          all <varname>ExecStart=</varname> and <varname>ExecStartPre=</varname> processes which run in
+          services triggered by <varname>OnFailure=</varname> or <varname>OnSuccess=</varname> dependencies.
+          </para>
+
+          <para>Variables <varname>$MONITOR_SERVICE_RESULT</varname>, <varname>$MONITOR_EXIT_CODE</varname>
+          and <varname>$MONITOR_EXIT_STATUS</varname> take the same values as for
+          <varname>ExecStop=</varname> and <varname>ExecStopPost=</varname> processes. Variables
+          <varname>$MONITOR_INVOCATION_ID</varname> and <varname>$MONITOR_UNIT</varname> are set to the
+          invocation id and unit name of the service which triggered the dependency.</para>
+
+          <para>Note that when multiple services trigger the same unit, those variables will be
+          <emphasis>not</emphasis> be passed. Consider using a template handler unit for that case instead:
+          <literal>OnFailure=<replaceable>handler</replaceable>@%n.service</literal> for non-templated units,
+          or <literal>OnFailure=<replaceable>handler</replaceable>@%p-%i.service</literal> for templated
+          units.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
           <term><varname>$PIDFILE</varname></term>
 
           <listitem><para>The path to the configured PID file, in case the process is forked off on behalf of
@@ -3386,6 +3747,21 @@
           system.</para></listitem>
         </varlistentry>
 
+        <varlistentry>
+          <term><varname>$TRIGGER_UNIT</varname></term>
+          <term><varname>$TRIGGER_PATH</varname></term>
+          <term><varname>$TRIGGER_TIMER_REALTIME_USEC</varname></term>
+          <term><varname>$TRIGGER_TIMER_MONOTONIC_USEC</varname></term>
+
+          <listitem><para>If the unit was activated dynamically (e.g.: a corresponding path unit or timer unit), the
+          unit that triggered it and other type-dependent information will be passed via these variables. Note that
+          this information is provided in a best-effort way. For example, multiple triggers happening one after
+          another will be coalesced and only one will be reported, with no guarantee as to which one it will be.
+          Because of this, in most cases this variable will be primarily informational, i.e. useful for debugging
+          purposes, is lossy, and should not be relied upon to propagate a comprehensive reason for activation.
+          </para></listitem>
+        </varlistentry>
+
       </variablelist>
 
       <para>For system services, when <varname>PAMName=</varname> is enabled and <command>pam_systemd</command> is part
@@ -3710,6 +4086,11 @@
             <entry><constant>EXIT_CREDENTIALS</constant></entry>
             <entry>Failed to set up unit's credentials. See <varname>LoadCredential=</varname> and <varname>SetCredential=</varname> above.</entry>
           </row>
+          <row>
+            <entry>245</entry>
+            <entry><constant>EXIT_BPF</constant></entry>
+            <entry>Failed to apply BPF restrictions. See <varname>RestrictFileSystems=</varname> above.</entry>
+          </row>
         </tbody>
       </tgroup>
     </table>
@@ -3808,6 +4189,75 @@
   </refsect1>
 
   <refsect1>
+    <title>Examples</title>
+
+      <example>
+        <title><varname>$MONITOR_<replaceable>*</replaceable></varname> usage</title>
+
+        <para>A service <filename index="false">myfailer.service</filename> which can trigger an
+        <varname>OnFailure=</varname> dependency.</para>
+
+        <programlisting>
+[Unit]
+Description=Service which can trigger an OnFailure= dependency
+OnFailure=myhandler.service
+
+[Service]
+ExecStart=/bin/myprogram
+        </programlisting>
+
+        <para>A service <filename index="false">mysuccess.service</filename> which can trigger an
+        <varname>OnSuccess=</varname> dependency.</para>
+
+        <programlisting>
+[Unit]
+Description=Service which can trigger an OnSuccess= dependency
+OnSuccess=myhandler.service
+
+[Service]
+ExecStart=/bin/mysecondprogram
+        </programlisting>
+
+        <para>A service <filename index="false">myhandler.service</filename> which can be triggered
+        by any of the above services.</para>
+
+        <programlisting>
+[Unit]
+Description=Acts on service failing or succeeding
+
+[Service]
+ExecStart=/bin/bash -c "echo $MONITOR_SERVICE_RESULT $MONITOR_EXIT_CODE $MONITOR_EXIT_STATUS $MONITOR_INVOCATION_ID $MONITOR_UNIT"
+        </programlisting>
+
+        <para>If <filename index="false">myfailer.service</filename> were to run and exit in failure,
+        then <filename index="false">myhandler.service</filename> would be triggered and the
+        monitor variables would be set as follows:</para>
+
+        <programlisting>
+MONITOR_SERVICE_RESULT=exit-code
+MONITOR_EXIT_CODE=exited
+MONITOR_EXIT_STATUS=1
+MONITOR_INVOCATION_ID=cc8fdc149b2b4ca698d4f259f4054236
+MONITOR_UNIT=myfailer.service
+        </programlisting>
+
+        <para>If <filename index="false">mysuccess.service</filename> were to run and exit in success,
+        then <filename index="false">myhandler.service</filename> would be triggered and the
+        monitor variables would be set as follows:</para>
+
+        <programlisting>
+MONITOR_SERVICE_RESULT=success
+MONITOR_EXIT_CODE=exited
+MONITOR_EXIT_STATUS=0
+MONITOR_INVOCATION_ID=6ab9af147b8c4a3ebe36e7a5f8611697
+MONITOR_UNIT=mysuccess.service
+        </programlisting>
+
+    </example>
+
+  </refsect1>
+
+  <refsect1>
       <title>See Also</title>
       <para>
         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd.generator.xml b/man/systemd.generator.xml
index fb52172..a68cddb 100644
--- a/man/systemd.generator.xml
+++ b/man/systemd.generator.xml
@@ -26,8 +26,8 @@
     <cmdsynopsis>
       <command index='false'>/path/to/generator</command>
       <arg choice="plain"><replaceable>normal-dir</replaceable></arg>
-      <arg choice="plain"><replaceable>early-dir</replaceable></arg>
-      <arg choice="plain"><replaceable>late-dir</replaceable></arg>
+      <arg choice="option"><replaceable>early-dir</replaceable></arg>
+      <arg choice="option"><replaceable>late-dir</replaceable></arg>
     </cmdsynopsis>
 
     <para>
@@ -51,97 +51,146 @@
     directories listed above.
     <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> will execute
     these binaries very early at bootup and at configuration reload time — before unit files are
-    loaded. Their main purpose is to convert configuration that is not native to the service manager into
-    dynamically generated unit files, symlinks or unit file drop-ins, so that they can extend the unit file
-    hierarchy the service manager subsequently loads and operates on.</para>
+    loaded. Their main purpose is to convert configuration and execution context parameters that are not
+    native to the service manager into dynamically generated unit files, symlinks or unit file drop-ins, so
+    that they can extend the unit file hierarchy the service manager subsequently loads and operates
+    on.</para>
 
-    <para>Each generator is called with three directory paths that are to be used for
-    generator output. In these three directories, generators may dynamically generate
-    unit files (regular ones, instances, as well as templates), unit file
-    <filename>.d/</filename> drop-ins, and create symbolic links to unit files to add
-    additional dependencies, create aliases, or instantiate existing templates. Those
-    directories are included in the unit load path of
-    <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-    allowing generated configuration to extend or override existing
-    definitions.</para>
+    <para><command>systemd</command> will call each generator with three directory paths that are to be used
+    for generator output. In these three directories, generators may dynamically generate unit files (regular
+    ones, instances, as well as templates), unit file <filename>.d/</filename> drop-ins, and create symbolic
+    links to unit files to add additional dependencies, create aliases, or instantiate existing templates.
+    Those directories are included in the unit load path, allowing generated configuration to extend or
+    override existing definitions. For tests, generators may be called with just one argument; the generator
+    should assume that all three paths are the same in that case.</para>
 
-    <para>Directory paths for generator output differ by priority:
-    <filename>…/generator.early</filename> has priority higher than the admin
-    configuration in <filename>/etc/</filename>, while
-    <filename>…/generator</filename> has lower priority than
-    <filename>/etc/</filename> but higher than vendor configuration in
-    <filename>/usr/</filename>, and <filename>…/generator.late</filename> has priority
-    lower than all other configuration. See the next section and the discussion of
-    unit load paths and unit overriding in
+    <para>Directory paths for generator output differ by priority: <filename>…/generator.early</filename> has
+    priority higher than the admin configuration in <filename>/etc/</filename>, while
+    <filename>…/generator</filename> has lower priority than <filename>/etc/</filename> but higher than
+    vendor configuration in <filename>/usr/</filename>, and <filename>…/generator.late</filename> has
+    priority lower than all other configuration. See the next section and the discussion of unit load paths
+    and unit overriding in
     <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
     </para>
 
-    <para>Generators are loaded from a set of paths determined during
-    compilation, as listed above. System and user generators are loaded
-    from directories with names ending in
-    <filename>system-generators/</filename> and
-    <filename>user-generators/</filename>, respectively. Generators
-    found in directories listed earlier override the ones with the
-    same name in directories lower in the list. A symlink to
-    <filename>/dev/null</filename> or an empty file can be used to
-    mask a generator, thereby preventing it from running. Please note
-    that the order of the two directories with the highest priority is
-    reversed with respect to the unit load path, and generators in
-    <filename>/run/</filename> overwrite those in
-    <filename>/etc/</filename>.</para>
+    <para>Generators are loaded from a set of paths determined during compilation, as listed above. System
+    and user generators are loaded from directories with names ending in
+    <filename>system-generators/</filename> and <filename>user-generators/</filename>,
+    respectively. Generators found in directories listed earlier override the ones with the same name in
+    directories lower in the list. A symlink to <filename>/dev/null</filename> or an empty file can be used
+    to mask a generator, thereby preventing it from running. Please note that the order of the two
+    directories with the highest priority is reversed with respect to the unit load path, and generators in
+    <filename>/run/</filename> overwrite those in <filename>/etc/</filename>.</para>
 
-    <para>After installing new generators or updating the
-    configuration, <command>systemctl daemon-reload</command> may be
-    executed. This will delete the previous configuration created by
-    generators, re-run all generators, and cause
-    <command>systemd</command> to reload units from disk. See
-    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    for more information.
+    <para>After installing new generators or updating the configuration, <command>systemctl
+    daemon-reload</command> may be executed. This will delete the previous configuration created by
+    generators, re-run all generators, and cause <command>systemd</command> to reload units from disk. See
+    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> for more
+    information.
     </para>
   </refsect1>
 
   <refsect1>
     <title>Output directories</title>
 
-    <para>Generators are invoked with three arguments: paths to directories where
-    generators can place their generated unit files or symlinks. By default those
-    paths are runtime directories that are included in the search path of
-    <command>systemd</command>, but a generator may be called with different paths
-    for debugging purposes.</para>
+    <para>Generators are invoked with three arguments: paths to directories where generators can place their
+    generated unit files or symlinks. By default those paths are runtime directories that are included in the
+    search path of <command>systemd</command>, but a generator may be called with different paths for
+    debugging purposes. If only one argument is provided, the generator should use the same directory as the
+    the three output paths.</para>
 
     <orderedlist>
       <listitem>
         <para><parameter>normal-dir</parameter></para>
-        <para>In normal use this is <filename>/run/systemd/generator</filename> in
-        case of the system generators and
-        <filename>$XDG_RUNTIME_DIR/generator</filename> in case of the user
-        generators. Unit files placed in this directory take precedence over vendor
-        unit configuration but not over native user/administrator unit configuration.
+        <para>In normal use this is <filename>/run/systemd/generator</filename> in case of the system
+        generators and <filename>$XDG_RUNTIME_DIR/systemd/generator</filename> in case of the user
+        generators. Unit files placed in this directory take precedence over vendor unit configuration but
+        not over native user/administrator unit configuration.
         </para>
       </listitem>
 
       <listitem>
         <para><parameter>early-dir</parameter></para>
-        <para>In normal use this is <filename>/run/systemd/generator.early</filename>
-        in case of the system generators and
-        <filename>$XDG_RUNTIME_DIR/generator.early</filename> in case of the user
-        generators. Unit files placed in this directory override unit files in
-        <filename>/usr/</filename>, <filename>/run/</filename> and
-        <filename>/etc/</filename>. This means that unit files placed in this
-        directory take precedence over all normal configuration, both vendor and
-        user/administrator.</para>
+        <para>In normal use this is <filename>/run/systemd/generator.early</filename> in case of the system
+        generators and <filename>$XDG_RUNTIME_DIR/systemd/generator.early</filename> in case of the user
+        generators. Unit files placed in this directory override unit files in <filename>/usr/</filename>,
+        <filename>/run/</filename> and <filename>/etc/</filename>. This means that unit files placed in this
+        directory take precedence over all normal configuration, both vendor and user/administrator.</para>
       </listitem>
 
       <listitem>
         <para><parameter>late-dir</parameter></para>
-        <para>In normal use this is <filename>/run/systemd/generator.late</filename>
-        in case of the system generators and
-        <filename>$XDG_RUNTIME_DIR/generator.late</filename> in case of the user
-        generators. This directory may be used to extend the unit file tree without
-        overriding any other unit files. Any native configuration files supplied by
-        the vendor or user/administrator take precedence.</para>
+        <para>In normal use this is <filename>/run/systemd/generator.late</filename> in case of the system
+        generators and <filename>$XDG_RUNTIME_DIR/systemd/generator.late</filename> in case of the user
+        generators. This directory may be used to extend the unit file tree without overriding any other unit
+        files. Any native configuration files supplied by the vendor or user/administrator take
+        precedence.</para>
       </listitem>
     </orderedlist>
+
+    <para>Note: generators <emphasis>must not</emphasis> write to other locations or otherwise make changes
+    to system state. Generator output is supposed to last only until the next
+    <command>daemon-reload</command> or <command>daemon-reexec</command>; if the generator is replaced
+    or masked, its effects should vanish.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Environment</title>
+
+    <para>The service manager sets a number of environment variables when invoking generator
+    executables. They carry information about the execution context of the generator, in order to simplify
+    conditionalizing generators to specific environments. The following environment variables are set:</para>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$SYSTEMD_SCOPE</varname></term>
+
+        <listitem><para>If the generator is invoked from the system service manager this variable is set to
+        <literal>system</literal>; if invoked from the per-user service manager it is set to
+        <literal>user</literal>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$SYSTEMD_IN_INITRD</varname></term>
+
+        <listitem><para>If the generator is run as part of an initrd this is set to <literal>1</literal>. If
+        it is run from the regular host (i.e. after the transition from initrd to host) it is set to
+        <literal>0</literal>. This environment variable is only set for system generators.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$SYSTEMD_FIRST_BOOT</varname></term>
+
+        <listitem><para>If this boot-up cycle is considered a "first boot", this is set to
+        <literal>1</literal>; if it is a subsequent, regular boot it is set to <literal>0</literal>. For
+        details see the documentation of <varname>ConditionFirstBoot=</varname> in
+        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. This
+        environment variable is only set for system generators.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$SYSTEMD_VIRTUALIZATION</varname></term>
+
+        <listitem><para>If the service manager is run in a virtualized environment,
+        <varname>$SYSTEMD_VIRTUALIZATION</varname> is set to a pair of strings, separated by a colon. The
+        first string is either <literal>vm</literal> or <literal>container</literal>, categorizing the type
+        of virtualization. The second string identifies the implementation of the virtualization
+        technology. If no virtualization is detected this variable will not be set. This data is identical to
+        what
+        <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        detects and reports, and uses the same vocabulary of virtualization implementation
+        identifiers.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$SYSTEMD_ARCHITECTURE</varname></term>
+
+        <listitem><para>This variable is set to a short identifier of the reported architecture of the
+        system. For details about defined values, see documentation of
+        <varname>ConditionArchitecture=</varname> in
+        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
   <refsect1>
@@ -149,9 +198,8 @@
 
     <itemizedlist>
       <listitem>
-        <para>All generators are executed in parallel. That means all executables are
-        started at the very same time and need to be able to cope with this
-        parallelism.
+        <para>All generators are executed in parallel. That means all executables are started at the very
+        same time and need to be able to cope with this parallelism.
         </para>
       </listitem>
 
@@ -169,9 +217,9 @@
       </listitem>
 
       <listitem>
-        <para>Units written by generators are removed when the configuration is
-        reloaded. That means the lifetime of the generated units is closely bound to
-        the reload cycles of <command>systemd</command> itself.</para>
+        <para>Units written by generators are removed when the configuration is reloaded. That means the
+        lifetime of the generated units is closely bound to the reload cycles of <command>systemd</command>
+        itself.</para>
       </listitem>
 
       <listitem>
@@ -193,8 +241,8 @@
         <para>Since
         <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
 
-        is not available (see above), log messages have to be written to
-        <filename>/dev/kmsg</filename> instead.</para>
+        is not available (see above), log messages have to be written to <filename>/dev/kmsg</filename>
+        instead.</para>
       </listitem>
 
       <listitem>
@@ -210,48 +258,44 @@
       </listitem>
 
       <listitem>
-        <para>Generators may write out dynamic unit files or just hook unit files
-        into other units with the usual <filename>.wants/</filename> or
-        <filename>.requires/</filename> symlinks. Often, it is nicer to simply
-        instantiate a template unit file from <filename>/usr/</filename> with a
-        generator instead of writing out entirely dynamic unit files. Of course, this
-        works only if a single parameter is to be used.</para>
+        <para>Generators may write out dynamic unit files or just hook unit files into other units with the
+        usual <filename>.wants/</filename> or <filename>.requires/</filename> symlinks. Often, it is nicer to
+        simply instantiate a template unit file from <filename>/usr/</filename> with a generator instead of
+        writing out entirely dynamic unit files. Of course, this works only if a single parameter is to be
+        used.</para>
       </listitem>
 
       <listitem>
-        <para>If you are careful, you can implement generators in shell scripts. We
-        do recommend C code however, since generators are executed synchronously and
-        hence delay the entire boot if they are slow.</para>
+        <para>If you are careful, you can implement generators in shell scripts. We do recommend C code
+        however, since generators are executed synchronously and hence delay the entire boot if they are
+        slow.</para>
       </listitem>
 
       <listitem>
-        <para>Regarding overriding semantics: there are two rules we try to follow
-        when thinking about the overriding semantics:</para>
+        <para>Regarding overriding semantics: there are two rules we try to follow when thinking about the
+        overriding semantics:</para>
 
         <orderedlist numeration="lowerroman">
           <listitem>
-            <para>User configuration should override vendor configuration. This
-            (mostly) means that stuff from <filename>/etc/</filename> should override
-            stuff from <filename>/usr/</filename>.</para>
+            <para>User configuration should override vendor configuration. This (mostly) means that stuff
+            from <filename>/etc/</filename> should override stuff from <filename>/usr/</filename>.</para>
           </listitem>
 
           <listitem>
-            <para>Native configuration should override non-native configuration. This
-            (mostly) means that stuff you generate should never override native unit
-            files for the same purpose.</para>
+            <para>Native configuration should override non-native configuration. This (mostly) means that
+            stuff you generate should never override native unit files for the same purpose.</para>
           </listitem>
         </orderedlist>
 
-        <para>Of these two rules the first rule is probably the more important one
-        and breaks the second one sometimes. Hence, when deciding whether to use
-        argv[1], argv[2], or argv[3], your default choice should probably be
-        argv[1].</para>
+        <para>Of these two rules the first rule is probably the more important one and breaks the second one
+        sometimes. Hence, when deciding whether to use argv[1], argv[2], or argv[3], your default choice
+        should probably be argv[1].</para>
       </listitem>
 
       <listitem>
-        <para>Instead of heading off now and writing all kind of generators for
-        legacy configuration file formats, please think twice! It is often a better
-        idea to just deprecate old stuff instead of keeping it artificially alive.
+        <para>Instead of heading off now and writing all kind of generators for legacy configuration file
+        formats, please think twice! It is often a better idea to just deprecate old stuff instead of keeping
+        it artificially alive.
         </para>
       </listitem>
     </itemizedlist>
@@ -263,17 +307,15 @@
       <title>systemd-fstab-generator</title>
 
       <para><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-      converts <filename>/etc/fstab</filename> into native mount units. It uses
-      argv[1] as location to place the generated unit files in order to allow the
-      user to override <filename>/etc/fstab</filename> with their own native unit
-      files, but also to ensure that <filename>/etc/fstab</filename> overrides any
+      converts <filename>/etc/fstab</filename> into native mount units. It uses argv[1] as location to place
+      the generated unit files in order to allow the user to override <filename>/etc/fstab</filename> with
+      their own native unit files, but also to ensure that <filename>/etc/fstab</filename> overrides any
       vendor default from <filename>/usr/</filename>.</para>
 
-      <para>After editing <filename>/etc/fstab</filename>, the user should invoke
-      <command>systemctl daemon-reload</command>. This will re-run all generators and
-      cause <command>systemd</command> to reload units from disk. To actually mount
-      new directories added to <filename>fstab</filename>, <command>systemctl start
-      <replaceable>/path/to/mountpoint</replaceable></command> or <command>systemctl
+      <para>After editing <filename>/etc/fstab</filename>, the user should invoke <command>systemctl
+      daemon-reload</command>. This will re-run all generators and cause <command>systemd</command> to reload
+      units from disk. To actually mount new directories added to <filename>fstab</filename>,
+      <command>systemctl start <replaceable>/path/to/mountpoint</replaceable></command> or <command>systemctl
       start local-fs.target</command> may be used.</para>
     </example>
 
@@ -281,11 +323,9 @@
       <title>systemd-system-update-generator</title>
 
       <para><citerefentry><refentrytitle>systemd-system-update-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-      temporarily redirects <filename>default.target</filename> to
-      <filename>system-update.target</filename>, if a system update is
-      scheduled. Since this needs to override the default user configuration for
-      <filename>default.target</filename>, it uses argv[2]. For details about this
-      logic, see
+      temporarily redirects <filename>default.target</filename> to <filename>system-update.target</filename>,
+      if a system update is scheduled. Since this needs to override the default user configuration for
+      <filename>default.target</filename>, it uses argv[2]. For details about this logic, see
       <citerefentry><refentrytitle>systemd.offline-updates</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
       </para>
     </example>
diff --git a/man/systemd.journal-fields.xml b/man/systemd.journal-fields.xml
index 31515c5..d9e3d57 100644
--- a/man/systemd.journal-fields.xml
+++ b/man/systemd.journal-fields.xml
@@ -25,11 +25,15 @@
 
     <para>Entries in the journal (as written by
     <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>)
-    resemble a UNIX process environment block in syntax but with fields that may include binary data.
-    Primarily, fields are formatted UTF-8 text strings, and binary encoding is used only where formatting as
-    UTF-8 text strings makes little sense. New fields may freely be defined by applications, but a few fields
-    have special meanings. All fields with special meanings are optional. In some cases, fields may appear
-    more than once per entry.</para>
+    resemble a UNIX process environment block in syntax but with field values that may include binary data,
+    and with non-unique field names permitted. Primarily, field values are formatted UTF-8 text strings —
+    binary encoding is used only where formatting as UTF-8 text strings makes little sense. New fields may
+    freely be defined by applications, but a few fields have special meanings, which are listed
+    below. Typically, fields may only appear once per log entry, however there are special exceptions: some
+    fields may appear more than once per entry, in which case this is explicitly mentioned below. Even though
+    the logging subsystem makes no restrictions on which fields to accept non-unique values for, it is
+    strongly recommended to avoid relying on this for the fields listed below (except where listed otherwise,
+    as mentioned) in order to avoid unnecessary incompatibilities with other applications.</para>
   </refsect1>
 
   <refsect1>
@@ -42,10 +46,13 @@
       <varlistentry>
         <term><varname>MESSAGE=</varname></term>
         <listitem>
-          <para>The human-readable message string for this entry. This
-          is supposed to be the primary text shown to the user. It is
-          usually not translated (but might be in some cases), and is
-          not supposed to be parsed for metadata.</para>
+          <para>The human-readable message string for this entry. This is supposed to be the primary text
+          shown to the user. It is usually not translated (but might be in some cases), and is not supposed
+          to be parsed for metadata. In order to encode multiple lines in a single log entry, separate them
+          by newline characters (ASCII code 10), but encode them as a single <varname>MESSAGE=</varname>
+          field. Do not add multiple values of this field type to the same entry (also see above), as
+          consuming applications generally do not expect this and are unlikely to show all values in that
+          case.</para>
         </listitem>
       </varlistentry>
 
@@ -128,7 +135,7 @@
           datagram. This field is only included if the <varname>MESSAGE=</varname>
           field was modified compared to the original payload or the timestamp could
           not be located properly and is not included in
-          <varname>SYSLOG_TIMESTAMP=</varname>. Message truncation occurs when when
+          <varname>SYSLOG_TIMESTAMP=</varname>. Message truncation occurs when
           the message contains leading or trailing whitespace (trailing and leading
           whitespace is stripped), or it contains an embedded
           <constant>NUL</constant> byte (the <constant>NUL</constant> byte and
@@ -398,6 +405,14 @@
         for details about journal namespaces.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>_RUNTIME_SCOPE=</varname></term>
+
+        <listitem><para>A string field that specifies the runtime scope in which the message was logged. If
+        <literal>initrd</literal>, the log message was processed while the system was running inside the
+        initrd. If <literal>system</literal>, the log message was generated after the system switched
+        execution to the host root filesystem.</para></listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
diff --git a/man/systemd.kill.xml b/man/systemd.kill.xml
index 57eb640..91de22f 100644
--- a/man/systemd.kill.xml
+++ b/man/systemd.kill.xml
@@ -84,9 +84,16 @@
         <para>Processes will first be terminated via <constant>SIGTERM</constant> (unless the signal to send
         is changed via <varname>KillSignal=</varname> or <varname>RestartKillSignal=</varname>). Optionally,
         this is immediately followed by a <constant>SIGHUP</constant> (if enabled with
-        <varname>SendSIGHUP=</varname>). If processes still remain after the main process of a unit has
-        exited or the delay configured via the <varname>TimeoutStopSec=</varname> has passed, the termination
-        request is repeated with the <constant>SIGKILL</constant> signal or the signal specified via
+        <varname>SendSIGHUP=</varname>). If processes still remain after:
+        <itemizedlist>
+          <listitem><para>the main process of a unit has exited (applies to <varname>KillMode=</varname>:
+              <option>mixed</option>)</para></listitem>
+          <listitem><para>the delay configured via the <varname>TimeoutStopSec=</varname> has passed
+              (applies to <varname>KillMode=</varname>: <option>control-group</option>, <option>mixed</option>,
+              <option>process</option>)</para></listitem>
+        </itemizedlist>
+
+        the termination request is repeated with the <constant>SIGKILL</constant> signal or the signal specified via
         <varname>FinalKillSignal=</varname> (unless this is disabled via the <varname>SendSIGKILL=</varname>
         option). See <citerefentry><refentrytitle>kill</refentrytitle><manvolnum>2</manvolnum></citerefentry>
         for more information.</para>
diff --git a/man/systemd.link.xml b/man/systemd.link.xml
index 1c18f35..aad3736 100644
--- a/man/systemd.link.xml
+++ b/man/systemd.link.xml
@@ -32,15 +32,19 @@
     <citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>7</manvolnum></citerefentry> for a
     general description of the syntax.</para>
 
-    <para>The link files are read from the files located in the system network directory
-    <filename>/usr/lib/systemd/network</filename>, the volatile runtime network directory
+    <para>The <filename>.link</filename> files are read from the files located in the system network
+    directory <filename>/usr/lib/systemd/network</filename> and
+    <filename>/usr/local/lib/systemd/network</filename>, the volatile runtime network directory
     <filename>/run/systemd/network</filename>, and the local administration network directory
-    <filename>/etc/systemd/network</filename>. Link files must have the extension
-    <filename>.link</filename>; other extensions are ignored. All link files are collectively sorted
-    and processed in lexical order, regardless of the directories in which they live. However, files
-    with identical filenames replace each other. Files in <filename>/etc/</filename> have the highest
-    priority, files in <filename>/run/</filename> take precedence over files with the same name in
-    <filename>/usr/lib/</filename>. This can be used to override a system-supplied link file with a
+    <filename>/etc/systemd/network</filename>. All configuration files are collectively sorted and
+    processed in alphanumeric order, regardless of the directories in which they live. However, files
+    with identical filenames replace each other. It is recommended that each filename is prefixed with
+    a number (e.g. <filename>10-eth0.link</filename>). Otherwise, the default
+    <filename>.link</filename> files or those generated by
+    <citerefentry><refentrytitle>systemd-network-generator.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    may take precedence over user configured files. Files in <filename>/etc/</filename> have the
+    highest priority, files in <filename>/run/</filename> take precedence over files with the same name
+    in <filename>/usr/lib/</filename>. This can be used to override a system-supplied link file with a
     local file if needed. As a special case, an empty file (file size 0) or symlink with the same name
     pointing to <filename>/dev/null</filename> disables the configuration file entirely (it is
     "masked").</para>
@@ -71,13 +75,13 @@
   <refsect1>
     <title>[Match] Section Options</title>
 
-    <para>A link file is said to match a device if all matches specified by the
-    [Match] section are satisfied. When a link file does not contain valid settings
-    in [Match] section, then the file will match all devices and
-    <command>systemd-udevd</command> warns about that. Hint: to avoid the warning and to make it clear
-    that all interfaces shall be matched, add the following:
+    <para>A link file is said to match an interface if all matches specified by the [Match] section are
+    satisfied. When a link file does not contain valid settings in [Match] section, then the file will
+    match all interfaces and <command>systemd-udevd</command> warns about that. Hint: to avoid the
+    warning and to make it clear that all interfaces shall be matched, add the following:
     <programlisting>OriginalName=*</programlisting>
-    The following keys are accepted:</para>
+    The first (in alphanumeric order) of the link files that matches a given interface is applied, all
+    later files are ignored, even if they match as well. The following keys are accepted:</para>
 
     <variablelist class='network-directives'>
       <!-- This list is reused in systemd.network(3), hence maintain a specific order:
@@ -89,12 +93,48 @@
       <varlistentry id='mac-address'>
         <term><varname>MACAddress=</varname></term>
         <listitem>
-          <para>A whitespace-separated list of hardware addresses. Use full colon-, hyphen- or dot-delimited hexadecimal. See the example below.
-          This option may appear more than once, in which case the lists are merged. If the empty string is assigned to this option, the list
-          of hardware addresses defined prior to this is reset.</para>
+          <para>A whitespace-separated list of hardware addresses. The acceptable formats are:</para>
 
-          <para>Example:
-          <programlisting>MACAddress=01:23:45:67:89:ab 00-11-22-33-44-55 AABB.CCDD.EEFF</programlisting></para>
+          <variablelist>
+            <varlistentry>
+              <term><option>colon-delimited hexadecimal</option></term>
+              <listitem><para>
+                Each field must be one byte.
+                E.g. <literal>12:34:56:78:90:ab</literal> or <literal>AA:BB:CC:DD:EE:FF</literal>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>hyphen-delimited hexadecimal</option></term>
+              <listitem><para>
+                Each field must be one byte.
+                E.g. <literal>12-34-56-78-90-ab</literal> or <literal>AA-BB-CC-DD-EE-FF</literal>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>dot-delimited hexadecimal</option></term>
+              <listitem><para>
+                Each field must be two bytes.
+                E.g. <literal>1234.5678.90ab</literal> or <literal>AABB.CCDD.EEFF</literal>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>IPv4 address format</option></term>
+              <listitem><para>
+                E.g. <literal>127.0.0.1</literal> or <literal>192.168.0.1</literal>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>IPv6 address format</option></term>
+              <listitem><para>
+                E.g. <literal>2001:0db8:85a3::8a2e:0370:7334</literal> or <literal>::1</literal>.
+              </para></listitem>
+            </varlistentry>
+          </variablelist>
+
+          <para>The total length of each MAC address must be 4 (for IPv4 tunnel), 6 (for Ethernet), 16
+          (for IPv6 tunnel), or 20 (for InfiniBand). This option may appear more than once, in which
+          case the lists are merged. If the empty string is assigned to this option, the list of
+          hardware addresses defined prior to this is reset. Defaults to unset.</para>
         </listitem>
       </varlistentry>
 
@@ -104,9 +144,10 @@
           <para>A whitespace-separated list of hardware's permanent addresses. While
           <varname>MACAddress=</varname> matches the device's current MAC address, this matches the
           device's permanent MAC address, which may be different from the current one. Use full
-          colon-, hyphen- or dot-delimited hexadecimal. This option may appear more than once, in
-          which case the lists are merged. If the empty string is assigned to this option, the list
-          of hardware addresses defined prior to this is reset.</para>
+          colon-, hyphen- or dot-delimited hexadecimal, or IPv4 or IPv6 address format. This option may
+          appear more than once, in which case the lists are merged. If the empty string is assigned to
+          this option, the list of hardware addresses defined prior to this is reset. Defaults to
+          unset.</para>
         </listitem>
       </varlistentry>
 
@@ -141,6 +182,20 @@
         </listitem>
       </varlistentry>
 
+      <varlistentry id='kind'>
+        <term><varname>Kind=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of shell-style globs matching the device kind, as exposed by
+          <command>networkctl status <replaceable>INTERFACE</replaceable></command> or
+          <command>ip -d link show <replaceable>INTERFACE</replaceable></command>. If the list is
+          prefixed with a "!", the test is inverted. Some valid values are <literal>bond</literal>,
+          <literal>bridge</literal>, <literal>gre</literal>, <literal>tun</literal>,
+          <literal>veth</literal>. Valid kinds are given by netlink's <literal>IFLA_INFO_KIND</literal>
+          attribute, so this is not comprehensive.
+          </para>
+        </listitem>
+      </varlistentry>
+
       <varlistentry id='property'>
         <term><varname>Property=</varname></term>
         <listitem>
@@ -173,7 +228,7 @@
           <para>Matches against the hostname or machine ID of the host. See <varname>ConditionHost=</varname> in
           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
           for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
+          If an empty string is assigned, the previously assigned value is cleared.
           </para>
         </listitem>
       </varlistentry>
@@ -185,7 +240,7 @@
           whether it is a specific implementation. See <varname>ConditionVirtualization=</varname> in
           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
           for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
+          If an empty string is assigned, the previously assigned value is cleared.
           </para>
         </listitem>
       </varlistentry>
@@ -197,7 +252,7 @@
           <varname>ConditionKernelCommandLine=</varname> in
           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
           for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
+          If an empty string is assigned, the previously assigned value is cleared.
           </para>
         </listitem>
       </varlistentry>
@@ -209,7 +264,19 @@
           expression. See <varname>ConditionKernelVersion=</varname> in
           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
           details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
+          If an empty string is assigned, the previously assigned value is cleared.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry id='credential'>
+        <term><varname>Credential=</varname></term>
+        <listitem>
+          <para>Checks whether the specified credential was passed to the
+          <filename>systemd-udevd.service</filename> service. See <ulink
+          url="https://systemd.io/CREDENTIALS">System and Service Credentials</ulink> for details. When
+          prefixed with an exclamation mark (<literal>!</literal>), the result is negated.  If an empty
+          string is assigned, the previously assigned value is cleared.
           </para>
         </listitem>
       </varlistentry>
@@ -221,7 +288,7 @@
           <varname>ConditionArchitecture=</varname> in
           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
           for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
+          If an empty string is assigned, the previously assigned value is cleared.
           </para>
         </listitem>
       </varlistentry>
@@ -233,7 +300,7 @@
           <varname>ConditionFirmware=</varname> in
           <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
           for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
+          If an empty string is assigned, the previously assigned value is cleared.
           </para>
         </listitem>
       </varlistentry>
@@ -401,15 +468,22 @@
           must either be unset, empty, disabled, or all policies configured there must fail. Also see the
           example below with <literal>Name=dmz0</literal>.</para>
 
-          <para>Note that specifying a name that the kernel might use for another
-          interface (for example <literal>eth0</literal>) is dangerous because the
-          name assignment done by udev will race with the assignment done by the
-          kernel, and only one interface may use the name. Depending on the order of
-          operations, either udev or the kernel will win, making the naming
-          unpredictable. It is best to use some different prefix, for example
-          <literal>internal0</literal>/<literal>external0</literal> or
-          <literal>lan0</literal>/<literal>lan1</literal>/<literal>lan3</literal>.
-          </para>
+          <para>Note that specifying a name that the kernel might use for another interface (for example
+          <literal>eth0</literal>) is dangerous because the name assignment done by udev will race with the
+          assignment done by the kernel, and only one interface may use the name. Depending on the order of
+          operations, either udev or the kernel will win, making the naming unpredictable. It is best to use
+          some different prefix, for example <literal>internal0</literal>/<literal>external0</literal> or
+          <literal>lan0</literal>/<literal>lan1</literal>/<literal>lan3</literal>.</para>
+
+          <para>Interface names must have a minimum length of 1 character and a maximum length of 15
+          characters, and may contain any 7bit ASCII character, with the exception of control characters,
+          <literal>:</literal>, <literal>/</literal> and <literal>%</literal>. While <literal>.</literal> is
+          an allowed character, it's recommended to avoid it when naming interfaces as various tools (such as
+          <citerefentry><refentrytitle>resolvconf</refentrytitle><manvolnum>1</manvolnum></citerefentry>) use
+          it as separator character. Also, fully numeric interface names are not allowed (in order to avoid
+          ambiguity with interface specification by numeric indexes), as are the special strings
+          <literal>.</literal>, <literal>..</literal>, <literal>all</literal> and
+          <literal>default</literal>.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
@@ -430,6 +504,12 @@
           If the empty string is assigned to this option, the list is reset, and all prior assignments
           have no effect. If the kernel does not support the alternative names, then this setting will
           be ignored.</para>
+
+          <para>Alternative interface names may be used to identify interfaces in various tools. In contrast
+          to the primary name (as configured with <varname>Name=</varname> above) there may be multiple
+          alternative names referring to the same interface. Alternative names may have a maximum length of
+          127 characters, in contrast to the 15 allowed for the primary interface name, but otherwise are
+          subject to the same naming constraints.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
@@ -537,8 +617,17 @@
             <varlistentry>
               <term><option>secureon</option></term>
               <listitem>
-                <para>Enable secureon(tm) password for MagicPacket(tm).
-                </para>
+                <para>Enable SecureOn password for MagicPacket. Implied when
+                <varname>WakeOnLanPassword=</varname> is specified. If specified without
+                <varname>WakeOnLanPassword=</varname> option, then the password is read from the
+                credential <literal><replaceable>LINK</replaceable>.link.wol.password</literal> (e.g.,
+                <literal>60-foo.link.wol.password</literal>), and if the credential not found, then
+                read from <literal>wol.password</literal>. See
+                <varname>LoadCredential=</varname>/<varname>SetCredential=</varname> in
+                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                for details. The password in the credential, must be 6 bytes in hex format with each
+                byte separated by a colon (<literal>:</literal>) like an Ethernet MAC address, e.g.,
+                <literal>aa:bb:cc:dd:ee:ff</literal>.</para>
               </listitem>
             </varlistentry>
           </variablelist>
@@ -549,6 +638,19 @@
         </listitem>
       </varlistentry>
       <varlistentry>
+        <term><varname>WakeOnLanPassword=</varname></term>
+        <listitem>
+          <para>Specifies the SecureOn password for MagicPacket. Takes an absolute path to a regular
+          file or an <constant>AF_UNIX</constant> stream socket, or the plain password. When a path to
+          a regular file is specified, the password is read from it. When an
+          <constant>AF_UNIX</constant> stream socket is specified, a connection is made to it and the
+          password is read from it. The password must be 6 bytes in hex format with each byte separated
+          by a colon (<literal>:</literal>) like an Ethernet MAC address, e.g.,
+          <literal>aa:bb:cc:dd:ee:ff</literal>. This implies <varname>WakeOnLan=secureon</varname>.
+          Defaults to unset, and the current value will not be changed.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
         <term><varname>Port=</varname></term>
         <listitem>
           <para>The port option is used to select the device port. The
@@ -702,6 +804,13 @@
         </listitem>
       </varlistentry>
       <varlistentry>
+        <term><varname>GenericReceiveOffloadHardware=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, hardware accelerated Generic Receive Offload (GRO) is
+          enabled. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
         <term><varname>LargeReceiveOffload=</varname></term>
         <listitem>
           <para>Takes a boolean. If set to true, Large Receive Offload (LRO) is enabled.
@@ -709,55 +818,63 @@
         </listitem>
       </varlistentry>
       <varlistentry>
+        <term><varname>ReceiveVLANCTAGHardwareAcceleration=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, receive VLAN CTAG hardware acceleration is enabled.
+          When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>TransmitVLANCTAGHardwareAcceleration=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, transmit VLAN CTAG hardware acceleration is enabled.
+          When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>ReceiveVLANCTAGFilter=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, receive filtering on VLAN CTAGs is enabled.
+          When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>TransmitVLANSTAGHardwareAcceleration=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, transmit VLAN STAG hardware acceleration is enabled.
+          When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>NTupleFilter=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, receive N-tuple filters and actions are enabled.
+          When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
         <term><varname>RxChannels=</varname></term>
-        <listitem>
-          <para>Sets the number of receive channels (a number between 1 and 4294967295) .</para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
         <term><varname>TxChannels=</varname></term>
-        <listitem>
-          <para>Sets the number of transmit channels (a number between 1 and 4294967295).</para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
         <term><varname>OtherChannels=</varname></term>
-        <listitem>
-          <para>Sets the number of other channels (a number between 1 and 4294967295).</para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
         <term><varname>CombinedChannels=</varname></term>
         <listitem>
-          <para>Sets the number of combined set channels (a number between 1 and 4294967295).</para>
+          <para>Specifies the number of receive, transmit, other, or combined channels, respectively.
+          Takes an unsigned integer in the range 1…4294967295 or <literal>max</literal>. If set to
+          <literal>max</literal>, the advertised maximum value of the hardware will be used. When
+          unset, the number will not be changed. Defaults to unset.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
         <term><varname>RxBufferSize=</varname></term>
-        <listitem>
-          <para>Takes an integer. Specifies the maximum number of pending packets in the NIC receive buffer.
-          When unset, the kernel's default will be used.</para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
         <term><varname>RxMiniBufferSize=</varname></term>
-        <listitem>
-          <para>Takes an integer. Specifies the maximum number of pending packets in the NIC mini receive buffer.
-          When unset, the kernel's default will be used.</para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
         <term><varname>RxJumboBufferSize=</varname></term>
-        <listitem>
-          <para>Takes an integer. Specifies the maximum number of pending packets in the NIC jumbo receive buffer.
-          When unset, the kernel's default will be used.</para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
         <term><varname>TxBufferSize=</varname></term>
         <listitem>
-          <para>Takes an integer. Specifies the maximum number of pending packets in the NIC transmit buffer.
-          When unset, the kernel's default will be used.</para>
+          <para>Specifies the maximum number of pending packets in the NIC receive buffer, mini receive
+          buffer, jumbo receive buffer, or transmit buffer, respectively. Takes an unsigned integer in
+          the range 1…4294967295 or <literal>max</literal>. If set to <literal>max</literal>, the
+          advertised maximum value of the hardware will be used. When unset, the number will not be
+          changed. Defaults to unset.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
@@ -800,7 +917,191 @@
           accept. An unsigned integer in the range 1…65535. Defaults to unset.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>UseAdaptiveRxCoalesce=</varname></term>
+        <term><varname>UseAdaptiveTxCoalesce=</varname></term>
+        <listitem>
+          <para>Boolean properties that, when set, enable/disable adaptive Rx/Tx coalescing if the hardware
+          supports it. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>RxCoalesceSec=</varname></term>
+        <term><varname>RxCoalesceIrqSec=</varname></term>
+        <term><varname>RxCoalesceLowSec=</varname></term>
+        <term><varname>RxCoalesceHighSec=</varname></term>
+        <term><varname>TxCoalesceSec=</varname></term>
+        <term><varname>TxCoalesceIrqSec=</varname></term>
+        <term><varname>TxCoalesceLowSec=</varname></term>
+        <term><varname>TxCoalesceHighSec=</varname></term>
+        <listitem>
+          <para>These properties configure the delay before Rx/Tx interrupts are generated after a packet is
+          sent/received. The <literal>Irq</literal> properties come into effect when the host is servicing an
+          IRQ. The <literal>Low</literal> and <literal>High</literal> properties come into effect when the
+          packet rate drops below the low packet rate threshold or exceeds the high packet rate threshold
+          respectively if adaptive Rx/Tx coalescing is enabled. When unset, the kernel's defaults will be
+          used.</para>
+        </listitem>
+      </varlistentry>
+        <varlistentry>
+        <term><varname>RxMaxCoalescedFrames=</varname></term>
+        <term><varname>RxMaxCoalescedIrqFrames=</varname></term>
+        <term><varname>RxMaxCoalescedLowFrames=</varname></term>
+        <term><varname>RxMaxCoalescedHighFrames=</varname></term>
+        <term><varname>TxMaxCoalescedFrames=</varname></term>
+        <term><varname>TxMaxCoalescedIrqFrames=</varname></term>
+        <term><varname>TxMaxCoalescedLowFrames=</varname></term>
+        <term><varname>TxMaxCoalescedHighFrames=</varname></term>
+        <listitem>
+          <para>These properties configure the maximum number of frames that are sent/received before a Rx/Tx
+          interrupt is generated. The <literal>Irq</literal> properties come into effect when the host is
+          servicing an IRQ. The <literal>Low</literal> and <literal>High</literal> properties come into
+          effect when the packet rate drops below the low packet rate threshold or exceeds the high packet
+          rate threshold respectively if adaptive Rx/Tx coalescing is enabled. When unset, the kernel's
+          defaults will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>CoalescePacketRateLow=</varname></term>
+        <term><varname>CoalescePacketRateHigh=</varname></term>
+        <listitem>
+          <para>These properties configure the low and high packet rate (expressed in packets per second)
+          threshold respectively and are used to determine when the corresponding coalescing settings for low
+          and high packet rates come into effect if adaptive Rx/Tx coalescing is enabled. If unset, the
+          kernel's defaults will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>CoalescePacketRateSampleIntervalSec=</varname></term>
+        <listitem>
+          <para>Configures how often to sample the packet rate used for adaptive Rx/Tx coalescing. This
+          property cannot be zero. This lowest time granularity supported by this property is seconds.
+          Partial seconds will be rounded up before being passed to the kernel. If unset, the kernel's
+          default will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>StatisticsBlockCoalesceSec=</varname></term>
+        <listitem>
+          <para>How long to delay driver in-memory statistics block updates. If the driver does not have an
+          in-memory statistic block, this property is ignored. This property cannot be zero. If unset, the
+          kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
 
+      <varlistentry>
+        <term><varname>MDI=</varname></term>
+        <listitem>
+          <para>Specifies the medium dependent interface (MDI) mode for the interface. A MDI describes
+          the interface from a physical layer implementation to the physical medium used to carry the
+          transmission. Takes one of the following words: <literal>straight</literal> (or equivalently:
+          <literal>mdi</literal>), <literal>crossover</literal> (or equivalently:
+          <literal>mdi-x</literal>, <literal>mdix</literal>), and <literal>auto</literal>. When
+          <literal>straight</literal>, the MDI straight through mode will be used. When
+          <literal>crossover</literal>, the MDI crossover (MDI-X) mode will be used. When
+          <literal>auto</literal>, the MDI status is automatically detected. Defaults to unset, and the
+          kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>SR-IOVVirtualFunctions=</varname></term>
+        <listitem>
+          <para>Specifies the number of SR-IOV virtual functions. Takes an integer in the range
+          0…2147483647. Defaults to unset, and automatically determined from the values specified in
+          the <varname>VirtualFunction=</varname> settings in the [SR-IOV] sections.</para>
+        </listitem>
+      </varlistentry>
+
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='sr-iov'>
+    <title>[SR-IOV] Section Options</title>
+    <para>The [SR-IOV] section accepts the following keys. Specify several [SR-IOV] sections to
+    configure several SR-IOVs. SR-IOV provides the ability to partition a single physical PCI resource
+    into virtual PCI functions which can then be injected into a VM. In the case of network VFs, SR-IOV
+    improves north-south network performance (that is, traffic with endpoints outside the host machine)
+    by allowing traffic to bypass the host machine’s network stack.</para>
+
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>VirtualFunction=</varname></term>
+        <listitem>
+          <para>Specifies a Virtual Function (VF), lightweight PCIe function designed solely to move
+          data in and out. Takes an integer in the range 0…2147483646. This option is compulsory.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>VLANId=</varname></term>
+        <listitem>
+          <para>Specifies VLAN ID of the virtual function. Takes an integer in the range 1…4095.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>QualityOfService=</varname></term>
+        <listitem>
+          <para>Specifies quality of service of the virtual function. Takes an integer in the range
+          1…4294967294.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>VLANProtocol=</varname></term>
+        <listitem>
+          <para>Specifies VLAN protocol of the virtual function. Takes <literal>802.1Q</literal> or
+          <literal>802.1ad</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>MACSpoofCheck=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Controls the MAC spoof checking. When unset, the kernel's default will
+          be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>QueryReceiveSideScaling=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Toggle the ability of querying the receive side scaling (RSS)
+          configuration of the virtual function (VF). The VF RSS information like RSS hash key may be
+          considered sensitive on some devices where this information is shared between VF and the
+          physical function (PF). When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Trust=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Allows one to set trust mode of the virtual function (VF). When set,
+          VF users can set a specific feature which may impact security and/or performance. When unset,
+          the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>LinkState=</varname></term>
+        <listitem>
+          <para>Allows one to set the link state of the virtual function (VF). Takes a boolean or a
+          special value <literal>auto</literal>. Setting to <literal>auto</literal> means a
+          reflection of the physical function (PF) link state, <literal>yes</literal> lets the VF to
+          communicate with other VFs on this host even if the PF link state is down,
+          <literal>no</literal> causes the hardware to drop any packets sent by the VF. When unset,
+          the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>MACAddress=</varname></term>
+        <listitem>
+          <para>Specifies the MAC address for the virtual function.</para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -815,7 +1116,7 @@
       links.</para>
 
       <programlisting>[Link]
-NamePolicy=kernel database onboard slot path
+NamePolicy=kernel database on-board slot path
 MACAddressPolicy=persistent</programlisting>
     </example>
 
@@ -939,6 +1240,9 @@
       </citerefentry>,
       <citerefentry>
         <refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+        <refentrytitle>systemd-network-generator.service</refentrytitle><manvolnum>8</manvolnum>
       </citerefentry>
     </para>
   </refsect1>
diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
index ae59e6a..550f006 100644
--- a/man/systemd.mount.xml
+++ b/man/systemd.mount.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd.mount">
+<refentry id="systemd.mount" xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>systemd.mount</title>
     <productname>systemd</productname>
@@ -59,12 +59,13 @@
     does not read any options from <filename>/etc/fstab</filename>, and
     must be run as UID 0.</para>
 
-    <para>Mount units must be named after the mount point directories they control. Example: the mount point <filename
-    index="false">/home/lennart</filename> must be configured in a unit file <filename>home-lennart.mount</filename>.
-    For details about the escaping logic used to convert a file system path to a unit name, see
-    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.  Note that mount
-    units cannot be templated, nor is possible to add multiple names to a mount unit by creating additional symlinks to
-    it.</para>
+    <para>Mount units must be named after the mount point directories they control. Example: the mount point
+    <filename index="false">/home/lennart</filename> must be configured in a unit file
+    <filename>home-lennart.mount</filename>.  For details about the escaping logic used to convert a file
+    system path to a unit name, see
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note
+    that mount units cannot be templated, nor is possible to add multiple names to a mount unit by creating
+    symlinks to its unit file.</para>
 
     <para>Optionally, a mount unit may be accompanied by an automount
     unit, to allow on-demand or parallelized mounting. See
@@ -155,16 +156,14 @@
   <refsect1>
     <title><filename>fstab</filename></title>
 
-    <para>Mount units may either be configured via unit files, or via
-    <filename>/etc/fstab</filename> (see
+    <para>Mount units may either be configured via unit files, or via <filename>/etc/fstab</filename> (see
     <citerefentry project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    for details). Mounts listed in <filename>/etc/fstab</filename>
-    will be converted into native units dynamically at boot and when
-    the configuration of the system manager is reloaded. In general,
-    configuring mount points through <filename>/etc/fstab</filename>
-    is the preferred approach. See
-    <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-    for details about the conversion.</para>
+    for details). Mounts listed in <filename>/etc/fstab</filename> will be converted into native units
+    dynamically at boot and when the configuration of the system manager is reloaded. In general, configuring
+    mount points through <filename>/etc/fstab</filename> is the preferred approach to manage mounts for
+    humans. For tooling, writing mount units should be preferred over editing <filename>/etc/fstab</filename>.
+    See <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    for details about the conversion from <filename>/etc/fstab</filename> to mount units.</para>
 
     <para>The NFS mount option <option>bg</option> for NFS background mounts
     as documented in <citerefentry project='man-pages'><refentrytitle>nfs</refentrytitle><manvolnum>5</manvolnum></citerefentry>
@@ -368,6 +367,20 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>x-systemd.pcrfs</option></term>
+
+        <listitem><para>Measures file system identity information (mount point, type, label, UUID, partition
+        label, partition UUID) into PCR 15 after the file system has been mounted. This ensures the
+        <citerefentry><refentrytitle>systemd-pcrfs@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+        or <filename>systemd-pcrfs-root.service</filename> services are pulled in by the mount unit.</para>
+
+        <para>Note that this option can only be used in <filename>/etc/fstab</filename>, and will be ignored
+        when part of the <varname>Options=</varname> setting in a unit file. It is also implied for the root
+        and <filename>/usr/</filename> partitions discovered by
+        <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>x-systemd.rw-only</option></term>
 
         <listitem><para>If a mount operation fails to mount the file system
@@ -422,9 +435,8 @@
       <varlistentry>
         <term><option>x-initrd.mount</option></term>
 
-        <listitem><para>An additional filesystem to be mounted in the
-        initramfs. See <filename>initrd-fs.target</filename>
-        description in
+        <listitem><para>An additional filesystem to be mounted in the initrd. See
+        <filename>initrd-fs.target</filename> description in
         <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
         </para></listitem>
       </varlistentry>
@@ -444,7 +456,11 @@
   <refsect1>
     <title>Options</title>
 
-    <para>Mount files must include a [Mount] section, which carries
+    <para>Mount unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
+    <para>Mount unit files must include a [Mount] section, which carries
     information about the file system mount points it supervises. A
     number of options that may be used in this section are shared with
     other unit types. These options are documented in
@@ -474,7 +490,9 @@
         <term><varname>Where=</varname></term>
         <listitem><para>Takes an absolute path of a file or directory for the mount point; in particular, the
         destination cannot be a symbolic link.  If the mount point does not exist at the time of mounting, it
-        is created as directory. This string must be reflected in the unit filename. (See above.) This option
+        is created as either a directory or a file. The former is the usual case; the latter is done only if this mount
+        is a bind mount and the source (<varname>What=</varname>) is not a directory.
+        This string must be reflected in the unit filename. (See above.) This option
         is mandatory.</para></listitem>
       </varlistentry>
 
@@ -569,11 +587,7 @@
       </varlistentry>
     </variablelist>
 
-    <para>Check
-    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    and
-    <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    for more settings.</para>
+    <xi:include href="systemd.service.xml" xpointer="shared-unit-options" />
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml
index 6c14810..1e2295b 100644
--- a/man/systemd.net-naming-scheme.xml
+++ b/man/systemd.net-naming-scheme.xml
@@ -98,10 +98,36 @@
     <variablelist>
         <varlistentry>
           <term><varname>ID_NET_NAME_ONBOARD=<replaceable>prefix</replaceable><constant>o</constant><replaceable>number</replaceable></varname></term>
+          <term><varname>ID_NET_NAME_ONBOARD=<replaceable>prefix</replaceable><constant>d</constant><replaceable>number</replaceable></varname></term>
 
           <listitem><para>This name is set based on the numeric ordering information given by the firmware
-          for on-board devices. The name consists of the prefix, letter <constant>o</constant>, and a number
-          specified by the firmware. This is only available for PCI devices.</para>
+          for on-board devices. Different schemes are used depending on the firmware type, as described in the table below.</para>
+
+            <table>
+              <title>Onboard naming schemes</title>
+
+              <tgroup cols='2'>
+                <thead>
+                  <row>
+                    <entry>Format</entry>
+                    <entry>Description</entry>
+                  </row>
+                </thead>
+
+                <tbody>
+                  <row>
+                    <entry><replaceable>prefix</replaceable><constant>o</constant><replaceable>number</replaceable></entry>
+                    <entry>PCI onboard index</entry>
+                  </row>
+
+                  <row>
+                    <entry><replaceable>prefix</replaceable><constant>d</constant><replaceable>number</replaceable></entry>
+                    <entry>Devicetree alias index</entry>
+                  </row>
+
+                </tbody>
+              </tgroup>
+            </table>
           </listitem>
         </varlistentry>
 
@@ -128,6 +154,7 @@
         <varlistentry>
           <term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]</varname></term>
           <term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable><constant>v</constant><replaceable>slot</replaceable></varname></term>
+          <term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable><constant>x</constant><replaceable>slot</replaceable></varname></term>
           <term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>b</constant><replaceable>number</replaceable></varname></term>
           <term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>u</constant><replaceable>port</replaceable>…[<constant>c</constant><replaceable>config</replaceable>][<constant>i</constant><replaceable>interface</replaceable>]</varname></term>
           <term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>v</constant><replaceable>slot</replaceable></varname></term>
@@ -160,6 +187,11 @@
                 </row>
 
                 <row>
+                  <entry><replaceable>prefix</replaceable> <constant>X</constant><replaceable>number</replaceable></entry>
+                  <entry>VIF interface number (Xen)</entry>
+                </row>
+
+                <row>
                   <entry>… <constant>b</constant><replaceable>number</replaceable></entry>
                   <entry>Broadcom bus (BCMA) core number</entry>
                 </row>
@@ -202,6 +234,7 @@
           <term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable><constant>c</constant><replaceable>bus_id</replaceable></varname></term>
           <term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable><constant>a</constant><replaceable>vendor</replaceable><replaceable>model</replaceable><constant>i</constant><replaceable>instance</replaceable></varname></term>
           <term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable><constant>i</constant><replaceable>address</replaceable><constant>n</constant><replaceable>port_name</replaceable></varname></term>
+          <term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable><constant>u</constant><replaceable>port</replaceable>…</varname></term>
           <term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>p</constant><replaceable>bus</replaceable><constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>phys_port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]</varname></term>
           <term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>p</constant><replaceable>bus</replaceable><constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>phys_port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>b</constant><replaceable>number</replaceable></varname></term>
           <term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>p</constant><replaceable>bus</replaceable><constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>phys_port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>u</constant><replaceable>port</replaceable>…[<constant>c</constant><replaceable>config</replaceable>][<constant>i</constant><replaceable>interface</replaceable>]</varname></term>
@@ -378,10 +411,10 @@
           numbers, which could either result in an incorrect value of the <varname>ID_NET_NAME_SLOT</varname>
           property or none at all.</para>
 
-          <para>Some firmware and hypervisor implementations report unreasonable high numbers for the onboard
+          <para>Some firmware and hypervisor implementations report unreasonably high numbers for the onboard
           index. To prevent the generation of bogus onbard interface names, index numbers greater than 16381
-          (2^14-1) were ignored. For s390 PCI devices index values up to 65535 (2^16-1) are valid. To account
-          for that, the limit is increased to now 65535.</para>
+          (2¹⁴-1) were ignored. For s390 PCI devices index values up to 65535 (2¹⁶-1) are valid. To account
+          for that, the limit was increased to 65535.</para>
 
           <para>The udev rule <varname>NAME=</varname> replaces <literal>:</literal>,
           <literal>/</literal>, and <literal>%</literal> with an underscore (<literal>_</literal>), and
@@ -389,6 +422,40 @@
           </listitem>
         </varlistentry>
 
+        <varlistentry>
+          <term><constant>v250</constant></term>
+
+          <listitem><para>Added naming scheme for Xen netfront "vif" interfaces based on the guest side
+          VIF number set from the Xen config (or the interface index in AWS EC2).</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><constant>v251</constant></term>
+
+          <listitem><para>Since version <constant>v247</constant> we no longer set
+          <varname>ID_NET_NAME_SLOT</varname> if we detect that a PCI device associated with a slot is a PCI
+          bridge as that would create naming conflict when there are more child devices on that bridge. Now,
+          this is relaxed and we will use slot information to generate the name based on it but only if
+          the PCI device has multiple functions. This is safe because distinct function number is a part of
+          the device name for multifunction devices.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><constant>v252</constant></term>
+
+          <listitem><para>Added naming scheme for platform devices with devicetree aliases.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><constant>v253</constant></term>
+
+          <listitem><para>Set <varname>ID_NET_NAME_PATH</varname> for usb devices not connected via a PCI bus.</para>
+          </listitem>
+        </varlistentry>
+
       </variablelist>
 
     <para>Note that <constant>latest</constant> may be used to denote the latest scheme known (to this
diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
index 0aaba2f..266ad52 100644
--- a/man/systemd.netdev.xml
+++ b/man/systemd.netdev.xml
@@ -3,7 +3,8 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd.netdev" conditional='ENABLE_NETWORKD'>
+<refentry id="systemd.netdev" conditional='ENABLE_NETWORKD'
+          xmlns:xi="http://www.w3.org/2001/XInclude">
 
   <refentryinfo>
     <title>systemd.network</title>
@@ -38,17 +39,22 @@
     than create its own. Note that the settings of the pre-existing netdev will not be changed by
     networkd.</para>
 
-    <para>The <filename>.netdev</filename> files are read from the files located in the system
-    network directory <filename>/usr/lib/systemd/network</filename>, the volatile runtime network
-    directory <filename>/run/systemd/network</filename> and the local administration network
-    directory <filename>/etc/systemd/network</filename>. All configuration files are collectively
-    sorted and processed in lexical order, regardless of the directories in which they live.
-    However, files with identical filenames replace each other. Files in <filename>/etc/</filename>
-    have the highest priority, files in <filename>/run/</filename> take precedence over files with
-    the same name in <filename>/usr/lib/</filename>. This can be used to override a system-supplied
-    configuration file with a local file if needed. As a special case, an empty file (file size 0)
-    or symlink with the same name pointing to <filename>/dev/null</filename> disables the
-    configuration file entirely (it is "masked").</para>
+    <para>The <filename>.netdev</filename> files are read from the files located in the system network
+    directory <filename>/usr/lib/systemd/network</filename> and
+    <filename>/usr/local/lib/systemd/network</filename>, the volatile runtime network directory
+    <filename>/run/systemd/network</filename> and the local administration network directory
+    <filename>/etc/systemd/network</filename>. All configuration files are collectively sorted and
+    processed in alphanumeric order, regardless of the directories in which they live. However, files
+    with identical filenames replace each other. It is recommended that each filename is prefixed with
+    a number (e.g. <filename>10-vlan.netdev</filename>). Otherwise, <filename>.netdev</filename> files
+    generated by
+    <citerefentry><refentrytitle>systemd-network-generator.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    may take precedence over user configured files. Files in <filename>/etc/</filename> have the
+    highest priority, files in <filename>/run/</filename> take precedence over files with the same name
+    in <filename>/usr/lib/</filename>. This can be used to override a system-supplied configuration
+    file with a local file if needed. As a special case, an empty file (file size 0) or symlink with
+    the same name pointing to <filename>/dev/null</filename> disables the configuration file entirely
+    (it is "masked").</para>
 
     <para>Along with the netdev file <filename>foo.netdev</filename>, a "drop-in" directory
     <filename>foo.netdev.d/</filename> may exist. All files with the suffix <literal>.conf</literal>
@@ -84,7 +90,7 @@
         </row></thead>
         <tbody>
           <row><entry><varname>bond</varname></entry>
-          <entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">Linux Ethernet Bonding Driver HOWTO</ulink> for details.</entry></row>
+          <entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://docs.kernel.org/networking/bonding.html">Linux Ethernet Bonding Driver HOWTO</ulink> for details.</entry></row>
 
           <row><entry><varname>bridge</varname></entry>
           <entry>A bridge device is a software switch, and each of its slave devices and the bridge itself are ports of the switch.</entry></row>
@@ -93,13 +99,13 @@
           <entry>A dummy device drops all packets sent to it.</entry></row>
 
           <row><entry><varname>gre</varname></entry>
-          <entry>A Level 3 GRE tunnel over IPv4. See <ulink url="https://tools.ietf.org/html/rfc2784">RFC 2784</ulink> for details.</entry></row>
+          <entry>A Level 3 GRE tunnel over IPv4. See <ulink url="https://tools.ietf.org/html/rfc2784">RFC 2784</ulink> for details. Name <literal>gre0</literal> should not be used, as the kernel creates a device with this name when the corresponding kernel module is loaded.</entry></row>
 
           <row><entry><varname>gretap</varname></entry>
-          <entry>A Level 2 GRE tunnel over IPv4.</entry></row>
+          <entry>A Level 2 GRE tunnel over IPv4. Name <literal>gretap0</literal> should not be used, as the kernel creates a device with this name when the corresponding kernel module is loaded.</entry></row>
 
           <row><entry><varname>erspan</varname></entry>
-          <entry>ERSPAN mirrors traffic on one or more source ports and delivers the mirrored traffic to one or more destination ports on another switch. The traffic is encapsulated in generic routing encapsulation (GRE) and is therefore routable across a layer 3 network between the source switch and the destination switch.</entry></row>
+          <entry>ERSPAN mirrors traffic on one or more source ports and delivers the mirrored traffic to one or more destination ports on another switch. The traffic is encapsulated in generic routing encapsulation (GRE) and is therefore routable across a layer 3 network between the source switch and the destination switch. Name <literal>erspan0</literal> should not be used, as the kernel creates a device with this name when the corresponding kernel module is loaded.</entry></row>
 
           <row><entry><varname>ip6gre</varname></entry>
           <entry>A Level 3 GRE tunnel over IPv6.</entry></row>
@@ -159,7 +165,7 @@
           <entry>Media Access Control Security (MACsec) is an 802.1AE IEEE industry-standard security technology that provides secure communication for all traffic on Ethernet links. MACsec provides point-to-point security on Ethernet links between directly connected nodes and is capable of identifying and preventing most security threats.</entry></row>
 
           <row><entry><varname>vrf</varname></entry>
-          <entry>A Virtual Routing and Forwarding (<ulink url="https://www.kernel.org/doc/Documentation/networking/vrf.txt">VRF</ulink>) interface to create separate routing and forwarding domains.</entry></row>
+          <entry>A Virtual Routing and Forwarding (<ulink url="https://docs.kernel.org/networking/vrf.html">VRF</ulink>) interface to create separate routing and forwarding domains.</entry></row>
 
           <row><entry><varname>vcan</varname></entry>
           <entry>The virtual CAN driver (vcan). Similar to the network loopback devices, vcan offers a virtual local CAN interface.</entry></row>
@@ -188,6 +194,12 @@
 
           <row><entry><varname>batadv</varname></entry>
           <entry><ulink url="https://www.open-mesh.org/projects/open-mesh/wiki">B.A.T.M.A.N. Advanced</ulink> is a routing protocol for multi-hop mobile ad-hoc networks which operates on layer 2.</entry></row>
+
+          <row><entry><varname>ipoib</varname></entry>
+          <entry>An IP over Infiniband subinterface.</entry></row>
+
+          <row><entry><varname>wlan</varname></entry>
+          <entry>A virtual wireless network (WLAN) interface.</entry></row>
         </tbody>
       </tgroup>
     </table>
@@ -197,78 +209,17 @@
   <refsect1>
     <title>[Match] Section Options</title>
 
-    <para>A virtual network device is only created if the
-    [Match] section matches the current
-    environment, or if the section is empty. The following keys are
-    accepted:</para>
+    <para>A virtual network device is only created if the [Match] section matches the current
+    environment, or if the section is empty. The following keys are accepted:</para>
 
     <variablelist class='network-directives'>
-      <varlistentry>
-        <term><varname>Host=</varname></term>
-        <listitem>
-          <para>Matches against the hostname or machine ID of the host. See
-          <literal>ConditionHost=</literal> in
-          <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-          for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
-          </para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
-        <term><varname>Virtualization=</varname></term>
-        <listitem>
-          <para>Checks whether the system is executed in a virtualized environment and optionally test
-          whether it is a specific implementation. See <literal>ConditionVirtualization=</literal> in
-          <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-          for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
-          </para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
-        <term><varname>KernelCommandLine=</varname></term>
-        <listitem>
-          <para>Checks whether a specific kernel command line option is set. See
-          <literal>ConditionKernelCommandLine=</literal> in
-          <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-          for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
-          </para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
-        <term><varname>KernelVersion=</varname></term>
-        <listitem>
-          <para>Checks whether the kernel version (as reported by <command>uname -r</command>) matches a
-          certain expression. See <literal>ConditionKernelVersion=</literal> in
-          <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-          for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
-          </para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
-        <term><varname>Architecture=</varname></term>
-        <listitem>
-          <para>Checks whether the system is running on a specific architecture. See
-          <literal>ConditionArchitecture=</literal> in
-          <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-          for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
-          </para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
-        <term><varname>Firmware=</varname></term>
-        <listitem>
-          <para>Checks whether the system is running on a machine with the specified firmware. See
-          <literal>ConditionFirmware=</literal> in
-          <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-          for details. When prefixed with an exclamation mark (<literal>!</literal>), the result is negated.
-          If an empty string is assigned, then previously assigned value is cleared.
-          </para>
-        </listitem>
-      </varlistentry>
+      <xi:include href="systemd.link.xml" xpointer="host" />
+      <xi:include href="systemd.link.xml" xpointer="virtualization" />
+      <xi:include href="systemd.link.xml" xpointer="kernel-command-line" />
+      <xi:include href="systemd.link.xml" xpointer="kernel-version" />
+      <xi:include href="systemd.link.xml" xpointer="credential" />
+      <xi:include href="systemd.link.xml" xpointer="architecture" />
+      <xi:include href="systemd.link.xml" xpointer="firmware" />
     </variablelist>
   </refsect1>
 
@@ -315,15 +266,22 @@
       <varlistentry>
         <term><varname>MACAddress=</varname></term>
         <listitem>
-          <para>The MAC address to use for the device. For <literal>tun</literal> or <literal>tap</literal>
-          devices, setting <varname>MACAddress=</varname> in the [NetDev] section is not
-          supported. Please specify it in [Link] section of the corresponding
+          <para>Specifies the MAC address to use for the device, or takes the special value
+          <literal>none</literal>. When <literal>none</literal>, <command>systemd-networkd</command>
+          does not request the MAC address for the device, and the kernel will assign a random MAC
+          address. For <literal>tun</literal>, <literal>tap</literal>, or <literal>l2tp</literal>
+          devices, the <varname>MACAddress=</varname> setting in the [NetDev] section is not
+          supported and will be ignored. Please specify it in the [Link] section of the corresponding
           <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-          file. If this option is not set, <literal>vlan</literal> devices inherit the MAC address of the
-          physical interface. For other kind of netdevs, if this option is not set, then MAC address is
-          generated based on the interface name and the
+          file. If this option is not set, <literal>vlan</literal> device inherits the MAC address of
+          the master interface. For other kind of netdevs, if this option is not set, then the MAC
+          address is generated based on the interface name and the
           <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
           </para>
+          <para>Note, even if <literal>none</literal> is specified, <command>systemd-udevd</command>
+          will assign the persistent MAC address for the device, as <filename>99-default.link</filename>
+          has <varname>MACAddressPolicy=persistent</varname>. So, it is also necessary to create a
+          custom .link file for the device, if the MAC address assignment is not desired.</para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -507,24 +465,14 @@
       </varlistentry>
       <varlistentry>
         <term><varname>EgressQOSMaps=</varname></term>
-        <listitem>
-          <para>Defines a mapping of Linux internal packet priority (<constant>SO_PRIORITY</constant>) to VLAN header
-          PCP field for outgoing frames. Takes a whitespace-separated list of unsigned integer pairs in the format
-          <literal>from</literal>-<literal>to</literal>, e.g., <literal>21-7 45-5</literal> ranges 1–4294967294.
-          Note that <literal>from</literal> must be greater than or equal to <literal>to</literal>. When unset,
-          the kernel's default will be used.
-          </para>
-        </listitem>
-      </varlistentry>
-      <varlistentry>
         <term><varname>IngressQOSMaps=</varname></term>
         <listitem>
-          <para>Defines a mapping of Linux internal packet priority (<constant>SO_PRIORITY</constant>) to VLAN header
-          PCP field for incoming frames. Takes a whitespace-separated list of unsigned integer pairs in the format
-          <literal>from</literal>-<literal>to</literal>, e.g., <literal>21-7 45-5</literal> ranges 1–4294967294.
-          Note that <literal>from</literal> must be greater than or equal to <literal>to</literal>. When unset,
-          the kernel's default will be used.
-          </para>
+          <para>Defines a mapping of Linux internal packet priority (<constant>SO_PRIORITY</constant>)
+          to VLAN header PCP field for outgoing and incoming frames, respectively. Takes a
+          whitespace-separated list of integer pairs, where each integer must be in the range
+          1…4294967294, in the format <literal>from</literal>-<literal>to</literal>, e.g.,
+          <literal>21-7 45-5</literal>. Note that <literal>from</literal> must be greater than or equal
+          to <literal>to</literal>. When unset, the kernel's default will be used.</para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -634,7 +582,11 @@
       <varlistentry>
         <term><varname>Local=</varname></term>
         <listitem>
-          <para>Configures local IP address.</para>
+          <para>Configures local IP address. It must be an address on the underlying interface of the
+          VXLAN interface, or one of the special values <literal>ipv4_link_local</literal>,
+          <literal>ipv6_link_local</literal>, <literal>dhcp4</literal>, <literal>dhcp6</literal>, and
+          <literal>slaac</literal>. If one of the special values is specified, an address which matches
+          the corresponding type on the underlying interface will be used. Defaults to unset.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
@@ -686,7 +638,7 @@
           endpoint answers ARP requests from the local bridge on behalf
           of remote Distributed Overlay Virtual Ethernet
           <ulink url="https://en.wikipedia.org/wiki/Distributed_Overlay_Virtual_Ethernet">
-          (DVOE)</ulink> clients. Defaults to false.</para>
+          (DOVE)</ulink> clients. Defaults to false.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
@@ -790,6 +742,14 @@
           default will be used.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>Independent=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the vxlan interface is created without any underlying network
+          interface. Defaults to false, which means that a .network file that requests this VXLAN interface
+          using <varname>VXLAN=</varname> is required for the VXLAN to be created.</para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -866,14 +826,6 @@
           <para>Accepts the same key as in [VXLAN] section.</para>
         </listitem>
       </varlistentry>
-      <varlistentry>
-        <term><varname>Independent=</varname></term>
-        <listitem>
-          <para>Takes a boolean. When true, the vxlan interface is created without any underlying network
-          interface. Defaults to false, which means that a .network file that requests this tunnel using
-          <varname>Tunnel=</varname> is required for the tunnel to be created.</para>
-        </listitem>
-      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -935,12 +887,15 @@
       <varlistentry>
         <term><varname>Local=</varname></term>
         <listitem>
-          <para>Specifies the IP address of the local interface. Takes an IP address, or the special values
-          <literal>auto</literal>, <literal>static</literal>, or <literal>dynamic</literal>. When an address
-          is set, then the local interface must have the address. If <literal>auto</literal>, then one of the
-          addresses on the local interface is used. Similarly, if <literal>static</literal> or
-          <literal>dynamic</literal> is set, then one of the static or dynamic addresses on the local
-          interface is used. Defaults to <literal>auto</literal>.</para>
+          <para>Specifies the IP address of a local interface. Takes an IP address, or the special
+          values <literal>auto</literal>, <literal>static</literal>, or <literal>dynamic</literal>.
+          Optionally a name of a local interface can be specified after <literal>@</literal>, e.g.
+          <literal>192.168.0.1@eth0</literal> or <literal>auto@eth0</literal>. When an address is
+          specified, then a local or specified interface must have the address, and the remote address
+          must be accessible through the local address. If <literal>auto</literal>, then one of the
+          addresses on a local or specified interface which is accessible to the remote address will be
+          used. Similarly, if <literal>static</literal> or <literal>dynamic</literal> is set, then one
+          of the static or dynamic addresses will be used. Defaults to <literal>auto</literal>.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
@@ -1207,10 +1162,24 @@
 
     <variablelist class='network-directives'>
       <varlistentry>
+        <term><varname>External=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When true, then the tunnel is externally controlled, which is
+          also known as collect metadata mode, and most settings below like <varname>Local=</varname>
+          or <varname>Remote=</varname> are ignored. This implies <varname>Independent=</varname>.
+          Defaults to false.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
         <term><varname>Local=</varname></term>
         <listitem>
-          <para>A static local address for tunneled packets. It must be an address on another interface of
-          this host, or the special value <literal>any</literal>.</para>
+          <para>A static local address for tunneled packets. It must be an address on another interface
+          of this host, or one of the special values <literal>any</literal>,
+          <literal>ipv4_link_local</literal>, <literal>ipv6_link_local</literal>,
+          <literal>dhcp4</literal>, <literal>dhcp6</literal>, and <literal>slaac</literal>. If one
+          of the special values except for <literal>any</literal> is specified, an address which
+          matches the corresponding type on the underlying interface will be used. Defaults to
+          <literal>any</literal>.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
@@ -1281,7 +1250,7 @@
           value of zero means that a packet carrying that option may not enter
           another tunnel before exiting the current tunnel.
           (see <ulink url="https://tools.ietf.org/html/rfc2473#section-4.1.1"> RFC 2473</ulink>).
-          The valid range is 0–255 and <literal>none</literal>. Defaults to 4.
+          The valid range is 0…255 and <literal>none</literal>. Defaults to 4.
         </para>
         </listitem>
       </varlistentry>
@@ -1293,7 +1262,7 @@
           The <varname>Key=</varname> is either a number or an IPv4 address-like dotted quad.
           It is used as mark-configured SAD/SPD entry as part of the lookup key (both in data
           and control path) in IP XFRM (framework used to implement IPsec protocol).
-          See <ulink url="http://man7.org/linux/man-pages/man8/ip-xfrm.8.html">
+          See <ulink url="https://man7.org/linux/man-pages/man8/ip-xfrm.8.html">
           ip-xfrm — transform configuration</ulink> for details. It is only used for VTI/VTI6,
           GRE, GRETAP, and ERSPAN tunnels.</para>
         </listitem>
@@ -1402,11 +1371,33 @@
         </listitem>
       </varlistentry>
       <varlistentry>
+        <term><varname>ERSPANVersion=</varname></term>
+        <listitem>
+          <para>Specifies the ERSPAN version number. Takes 0 for version 0 (a.k.a. type I), 1 for version 1
+          (a.k.a. type II), or 2 for version 2 (a.k.a. type III). Defaults to 1.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
         <term><varname>ERSPANIndex=</varname></term>
         <listitem>
-          <para>Specifies the ERSPAN index field for the interface, an integer in the range 1…1048575 associated with
-          the ERSPAN traffic's source port and direction. This field is mandatory.
-          </para>
+          <para>Specifies the ERSPAN v1 index field for the interface. Takes an integer in the range
+          0…1048575, which is associated with the ERSPAN traffic's source port and direction. Only used when
+          <varname>ERSPANVersion=1</varname>. Defaults to 0.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>ERSPANDirection=</varname></term>
+        <listitem>
+          <para>Specifies the ERSPAN v2 mirrored traffic's direction. Takes <literal>ingress</literal> or
+          <literal>egress</literal>. Only used when <varname>ERSPANVersion=2</varname>. Defaults to
+          <literal>ingress</literal>.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>ERSPANHardwareId=</varname></term>
+        <listitem>
+          <para>Specifies an unique identifier of the ERSPAN v2 engine. Takes an integer in the range 0…63.
+          Only used when <varname>ERSPANVersion=2</varname>. Defaults to 0.</para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -1567,6 +1558,15 @@
         <filename>/dev/net/tun</filename> device.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>KeepCarrier=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If enabled, to make the interface maintain its carrier status, the file
+          descriptor of the interface is kept open. This may be useful to keep the interface in running
+          state, for example while the backing process is temporarily shutdown. Defaults to
+          <literal>no</literal>.</para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -1623,6 +1623,29 @@
           <para>Sets a firewall mark on outgoing WireGuard packets from this interface. Takes a number between 1 and 4294967295.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>RouteTable=</varname></term>
+        <listitem>
+          <para>The table identifier for the routes to the addresses specified in the
+          <varname>AllowedIPs=</varname>. Takes a negative boolean value, one of the predefined names
+          <literal>default</literal>, <literal>main</literal>, and <literal>local</literal>, names
+          defined in <varname>RouteTable=</varname> in
+          <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+          or a number in the range 1…4294967295. When <literal>off</literal> the routes to the
+          addresses specified in the <varname>AllowedIPs=</varname> setting will not be configured.
+          Defaults to false. This setting will be ignored when the same setting is specified in the
+          [WireGuardPeer] section.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>RouteMetric=</varname></term>
+        <listitem>
+          <para>The priority of the routes to the addresses specified in the
+          <varname>AllowedIPs=</varname>. Takes an integer in the range 0…4294967295. Defaults to 0
+          for IPv4 addresses, and 1024 for IPv6 addresses. This setting will be ignored when the same
+          setting is specified in the [WireGuardPeer] section.</para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -1707,6 +1730,27 @@
           Most users will not need this.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>RouteTable=</varname></term>
+        <listitem>
+          <para>The table identifier for the routes to the addresses specified in the
+          <varname>AllowedIPs=</varname>. Takes a negative boolean value, one of the predefined names
+          <literal>default</literal>, <literal>main</literal>, and <literal>local</literal>, names
+          defined in <varname>RouteTable=</varname> in
+          <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+          or a number in the range 1…4294967295. Defaults to unset, and the value specified in the
+          same setting in the [WireGuard] section will be used.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><varname>RouteMetric=</varname></term>
+        <listitem>
+          <para>The priority of the routes to the addresses specified in the
+          <varname>AllowedIPs=</varname>. Takes an integer in the range 0…4294967295. Defaults to
+          unset, and the value specified in the same setting in the [WireGuard] section will be used.
+          </para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -1776,7 +1820,7 @@
         <listitem>
           <para>Specifies the delay before a link is enabled after a
           link up status has been detected. This value is rounded down
-          to a multiple of MIIMonitorSec. The default value is
+          to a multiple of <varname>MIIMonitorSec=</varname>. The default value is
           0.</para>
         </listitem>
       </varlistentry>
@@ -1786,7 +1830,7 @@
         <listitem>
           <para>Specifies the delay before a link is disabled after a
           link down status has been detected. This value is rounded
-          down to a multiple of MIIMonitorSec. The default value is
+          down to a multiple of <varname>MIIMonitorSec=</varname>. The default value is
           0.</para>
         </listitem>
       </varlistentry>
@@ -1796,7 +1840,7 @@
         <listitem>
           <para>Specifies the number of seconds between instances where the bonding
           driver sends learning packets to each slave peer switch.
-          The valid range is 1–0x7fffffff; the default value is 1. This option
+          The valid range is 1…0x7fffffff; the default value is 1. This option
           has an effect only for the balance-tlb and balance-alb modes.</para>
         </listitem>
       </varlistentry>
@@ -1877,8 +1921,8 @@
         <term><varname>ARPIPTargets=</varname></term>
         <listitem>
           <para>Specifies the IP addresses to use as ARP monitoring peers when
-          ARPIntervalSec is greater than 0. These are the targets of the ARP request
-          sent to determine the health of the link to the targets.
+          <varname>ARPIntervalSec=</varname> is greater than 0. These are the targets of the ARP
+          request sent to determine the health of the link to the targets.
           Specify these values in IPv4 dotted decimal format. At least one IP
           address must be given for ARP monitoring to function. The
           maximum number of targets that can be specified is 16. The
@@ -1890,7 +1934,7 @@
       <varlistentry>
         <term><varname>ARPAllTargets=</varname></term>
         <listitem>
-          <para>Specifies the quantity of ARPIPTargets that must be reachable
+          <para>Specifies the quantity of <varname>ARPIPTargets=</varname> that must be reachable
           in order for the ARP monitor to consider a slave as being up.
           This option affects only active-backup mode for slaves with
           ARPValidate enabled. Possible values are
@@ -1921,7 +1965,7 @@
           <para>Specifies the number of IGMP membership reports to be issued after
           a failover event. One membership report is issued immediately after
           the failover, subsequent packets are sent in each 200ms interval.
-          The valid range is 0–255. Defaults to 1. A value of 0
+          The valid range is 0…255. Defaults to 1. A value of 0
           prevents the IGMP membership report from being issued in response
           to the failover event.
           </para>
@@ -1933,7 +1977,7 @@
         <listitem>
           <para>Specify the number of packets to transmit through a slave before
           moving to the next one. When set to 0, then a slave is chosen at
-          random. The valid range is 0–65535. Defaults to 1. This option
+          random. The valid range is 0…65535. Defaults to 1. This option
           only has effect when in balance-rr mode.
           </para>
         </listitem>
@@ -1948,7 +1992,7 @@
           a peer notification is sent on the  bonding device and each
           VLAN sub-device.  This is repeated at each link monitor interval
           (ARPIntervalSec or MIIMonitorSec, whichever is active) if the number is
-          greater than 1. The valid range is 0–255. The default value is 1.
+          greater than 1. The valid range is 0…255. The default value is 1.
           These options affect only the active-backup mode.
           </para>
         </listitem>
@@ -1987,7 +2031,7 @@
     </variablelist>
 
     <para>For more detail information see
-    <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">
+    <ulink url="https://docs.kernel.org/networking/bonding.html">
     Linux Ethernet Bonding Driver HOWTO</ulink></para>
   </refsect1>
 
@@ -2081,7 +2125,7 @@
       <varlistentry>
         <term><varname>HopPenalty=</varname></term>
         <listitem>
-          <para>The hop penalty setting allows to modify
+          <para>The hop penalty setting allows one to modify
           <citerefentry project='mankier'><refentrytitle>batctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
           preference for multihop routes vs. short routes. This integer value is applied to the
           TQ (Transmit Quality) of each forwarded OGM (Originator Message), thereby propagating the
@@ -2127,7 +2171,7 @@
         <term><varname>RoutingAlgorithm=</varname></term>
         <listitem>
           <para>This can be either <literal>batman-v</literal> or <literal>batman-iv</literal> and describes which routing_algo
-          of <citerefentry><refentrytitle>batctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> to use. The algorithm
+          of <citerefentry project='mankier'><refentrytitle>batctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> to use. The algorithm
           cannot be changed after interface creation. Defaults to <literal>batman-v</literal>.
           </para>
         </listitem>
@@ -2136,6 +2180,85 @@
   </refsect1>
 
   <refsect1>
+    <title>[IPoIB] Section Options</title>
+    <para>The [IPoIB] section only applies for netdevs of kind <literal>ipoib</literal> and accepts the
+    following keys:</para>
+
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>PartitionKey=</varname></term>
+        <listitem>
+          <para>Takes an integer in the range 1…0xffff, except for 0x8000. Defaults to unset, and the
+          kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry id='ipoib_mode'>
+        <term><varname>Mode=</varname></term>
+        <listitem>
+          <para>Takes one of the special values <literal>datagram</literal> or
+          <literal>connected</literal>. Defaults to unset, and the kernel's default is used.</para>
+
+          <para>When <literal>datagram</literal>, the Infiniband unreliable datagram (UD) transport is
+          used, and so the interface MTU is equal to the IB L2 MTU minus the IPoIB encapsulation
+          header (4 bytes). For example, in a typical IB fabric with a 2K MTU, the IPoIB MTU will be
+          2048 - 4 = 2044 bytes.</para>
+
+          <para>When <literal>connected</literal>, the Infiniband reliable connected (RC) transport is
+          used. Connected mode takes advantage of the connected nature of the IB transport and allows
+          an MTU up to the maximal IP packet size of 64K, which reduces the number of IP packets needed
+          for handling large UDP datagrams, TCP segments, etc and increases the performance for large
+          messages.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry id='ipoib_umcast'>
+        <term><varname>IgnoreUserspaceMulticastGroup=</varname></term>
+        <listitem>
+          <para>Takes an boolean value. When true, the kernel ignores multicast groups handled by
+          userspace. Defaults to unset, and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>[WLAN] Section Options</title>
+    <para>The [WLAN] section only applies to WLAN interfaces, and accepts the following keys:</para>
+
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>PhysicalDevice=</varname></term>
+        <listitem>
+          <para>Specifies the name or index of the physical WLAN device (e.g. <literal>0</literal> or
+          <literal>phy0</literal>). The list of the physical WLAN devices that exist on the host can be
+          obtained by <command>iw phy</command> command. This option is mandatory.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Type=</varname></term>
+        <listitem>
+          <para>Specifies the type of the interface. Takes one of the <literal>ad-hoc</literal>,
+          <literal>station</literal>, <literal>ap</literal>, <literal>ap-vlan</literal>,
+          <literal>wds</literal>, <literal>monitor</literal>, <literal>mesh-point</literal>,
+          <literal>p2p-client</literal>, <literal>p2p-go</literal>, <literal>p2p-device</literal>,
+          <literal>ocb</literal>, and <literal>nan</literal>. This option is mandatory.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>WDS=</varname></term>
+        <listitem>
+          <para>Enables the Wireless Distribution System (WDS) mode on the interface. The mode is also
+          known as the <literal>4 address mode</literal>. Takes a boolean value. Defaults to unset, and
+          the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
     <title>Examples</title>
     <example>
       <title>/etc/systemd/network/25-bridge.netdev</title>
@@ -2347,7 +2470,8 @@
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-networkd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-network-generator.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
 
diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index 54c425c..01d8897 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -28,8 +28,8 @@
   <refsect1>
     <title>Description</title>
 
-    <para>A plain ini-style text file that encodes network configuration for matching network interfaces,
-    used by
+    <para>A plain ini-style text file that encodes network configuration for matching network
+    interfaces, used by
     <citerefentry><refentrytitle>systemd-networkd</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
     See <citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>7</manvolnum></citerefentry>
     for a general description of the syntax.</para>
@@ -41,13 +41,18 @@
     directories <filename>/usr/lib/systemd/network</filename> and
     <filename>/usr/local/lib/systemd/network</filename>, the volatile runtime network directory
     <filename>/run/systemd/network</filename> and the local administration network directory
-    <filename>/etc/systemd/network</filename>. All configuration files are collectively sorted and processed
-    in lexical order, regardless of the directories in which they live. However, files with identical
-    filenames replace each other. Files in <filename>/etc/</filename> have the highest priority, files in
-    <filename>/run/</filename> take precedence over files with the same name under
-    <filename>/usr/</filename>. This can be used to override a system-supplied configuration file with a local
-    file if needed. As a special case, an empty file (file size 0) or symlink with the same name pointing to
-    <filename>/dev/null</filename> disables the configuration file entirely (it is "masked").</para>
+    <filename>/etc/systemd/network</filename>. All configuration files are collectively sorted and
+    processed in alphanumeric order, regardless of the directories in which they live. However, files
+    with identical filenames replace each other. It is recommended that each filename is prefixed with
+    a number (e.g. <filename>10-eth0.network</filename>). Otherwise, the default
+    <filename>.network</filename> files or those generated by
+    <citerefentry><refentrytitle>systemd-network-generator.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    may take precedence over user configured files. Files in <filename>/etc/</filename> have the highest
+    priority, files in <filename>/run/</filename> take precedence over files with the same name under
+    <filename>/usr/</filename>. This can be used to override a system-supplied configuration file with
+    a local file if needed. As a special case, an empty file (file size 0) or symlink with the same
+    name pointing to <filename>/dev/null</filename> disables the configuration file entirely (it is
+    "masked").</para>
 
     <para>Along with the network file <filename>foo.network</filename>, a "drop-in" directory
     <filename>foo.network.d/</filename> may exist. All files with the suffix
@@ -67,80 +72,79 @@
   <refsect1>
     <title>[Match] Section Options</title>
 
-      <para>The network file contains a [Match] section, which determines if a given network file may be
-      applied to a given device; and a [Network] section specifying how the device should be configured. The
-      first (in lexical order) of the network files that matches a given device is applied, all later files
-      are ignored, even if they match as well.</para>
+    <para>The network file contains a [Match] section, which determines if a given network file may
+    be applied to a given interface; and a [Network] section specifying how the interface should be
+    configured. The first (in alphanumeric order) of the network files that matches a given interface
+    is applied, all later files are ignored, even if they match as well.</para>
 
-      <para>A network file is said to match a network interface if all matches specified by the [Match]
-      section are satisfied. When a network file does not contain valid settings in [Match] section, then the
-      file will match all interfaces and <command>systemd-networkd</command> warns about that. Hint: to avoid
-      the warning and to make it clear that all interfaces shall be matched, add the following:
-      <programlisting>Name=*</programlisting> The following keys are accepted:</para>
+    <para>A network file is said to match a network interface if all matches specified by the [Match]
+    section are satisfied. When a network file does not contain valid settings in [Match] section, then
+    the file will match all interfaces and <command>systemd-networkd</command> warns about that. Hint:
+    to avoid the warning and to make it clear that all interfaces shall be matched, add the following:
+    <programlisting>Name=*</programlisting> The following keys are accepted:</para>
 
-      <variablelist class='network-directives'>
-        <xi:include href="systemd.link.xml" xpointer="mac-address" />
-        <xi:include href="systemd.link.xml" xpointer="permanent-mac-address" />
-        <xi:include href="systemd.link.xml" xpointer="path" />
-        <xi:include href="systemd.link.xml" xpointer="driver" />
-        <xi:include href="systemd.link.xml" xpointer="type" />
-        <xi:include href="systemd.link.xml" xpointer="property" />
+    <variablelist class='network-directives'>
+      <xi:include href="systemd.link.xml" xpointer="mac-address" />
+      <xi:include href="systemd.link.xml" xpointer="permanent-mac-address" />
+      <xi:include href="systemd.link.xml" xpointer="path" />
+      <xi:include href="systemd.link.xml" xpointer="driver" />
+      <xi:include href="systemd.link.xml" xpointer="type" />
+      <xi:include href="systemd.link.xml" xpointer="kind" />
+      <xi:include href="systemd.link.xml" xpointer="property" />
 
-        <varlistentry>
-          <term><varname>Name=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of shell-style globs matching the device name, as exposed
-            by the udev property <literal>INTERFACE</literal>, or device's alternative names. If the
-            list is prefixed with a "!", the test is inverted.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>Name=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of shell-style globs matching the device name, as exposed
+          by the udev property <literal>INTERFACE</literal>, or device's alternative names. If the
+          list is prefixed with a "!", the test is inverted.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>WLANInterfaceType=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of wireless network type. Supported values are
-            <literal>ad-hoc</literal>, <literal>station</literal>, <literal>ap</literal>,
-            <literal>ap-vlan</literal>, <literal>wds</literal>, <literal>monitor</literal>,
-            <literal>mesh-point</literal>, <literal>p2p-client</literal>, <literal>p2p-go</literal>,
-            <literal>p2p-device</literal>, <literal>ocb</literal>, and <literal>nan</literal>. If the
-            list is prefixed with a "!", the test is inverted.
-            </para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>WLANInterfaceType=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of wireless network type. Supported values are
+          <literal>ad-hoc</literal>, <literal>station</literal>, <literal>ap</literal>,
+          <literal>ap-vlan</literal>, <literal>wds</literal>, <literal>monitor</literal>,
+          <literal>mesh-point</literal>, <literal>p2p-client</literal>, <literal>p2p-go</literal>,
+          <literal>p2p-device</literal>, <literal>ocb</literal>, and <literal>nan</literal>. If the
+          list is prefixed with a "!", the test is inverted. </para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>SSID=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of shell-style globs matching the SSID of the currently
-            connected wireless LAN. If the list is prefixed with a "!", the test is inverted.
-            </para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>SSID=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of shell-style globs matching the SSID of the currently
+          connected wireless LAN. If the list is prefixed with a "!", the test is inverted.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>BSSID=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of hardware address of the currently connected wireless
-            LAN. Use full colon-, hyphen- or dot-delimited hexadecimal. See the example in
-            <varname>MACAddress=</varname>. This option may appear more than once, in which case the
-            lists are merged. If the empty string is assigned to this option, the list is reset.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>BSSID=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of hardware address of the currently connected wireless
+          LAN. Use full colon-, hyphen- or dot-delimited hexadecimal. See the example in
+          <varname>MACAddress=</varname>. This option may appear more than once, in which case the
+          lists are merged. If the empty string is assigned to this option, the list is reset.</para>
+        </listitem>
+      </varlistentry>
 
-        <xi:include href="systemd.link.xml" xpointer="host" />
-        <xi:include href="systemd.link.xml" xpointer="virtualization" />
-        <xi:include href="systemd.link.xml" xpointer="kernel-command-line" />
-        <xi:include href="systemd.link.xml" xpointer="kernel-version" />
-        <xi:include href="systemd.link.xml" xpointer="architecture" />
-        <xi:include href="systemd.link.xml" xpointer="firmware" />
-      </variablelist>
-
+      <xi:include href="systemd.link.xml" xpointer="host" />
+      <xi:include href="systemd.link.xml" xpointer="virtualization" />
+      <xi:include href="systemd.link.xml" xpointer="kernel-command-line" />
+      <xi:include href="systemd.link.xml" xpointer="kernel-version" />
+      <xi:include href="systemd.link.xml" xpointer="credential" />
+      <xi:include href="systemd.link.xml" xpointer="architecture" />
+      <xi:include href="systemd.link.xml" xpointer="firmware" />
+    </variablelist>
   </refsect1>
 
   <refsect1>
     <title>[Link] Section Options</title>
 
-    <para> The [Link] section accepts the following keys:</para>
+    <para>The [Link] section accepts the following keys:</para>
 
     <variablelist class='network-directives'>
       <varlistentry>
@@ -149,16 +153,17 @@
           <para>The hardware address to set for the device.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>MTUBytes=</varname></term>
         <listitem>
-          <para>The maximum transmission unit in bytes to set for the
-          device. The usual suffixes K, M, G, are supported and are
-          understood to the base of 1024.</para>
-          <para>Note that if IPv6 is enabled on the interface, and the MTU is chosen
-          below 1280 (the minimum MTU for IPv6) it will automatically be increased to this value.</para>
+          <para>The maximum transmission unit in bytes to set for the device. The usual suffixes K, M,
+          G, are supported and are understood to the base of 1024.</para>
+          <para>Note that if IPv6 is enabled on the interface, and the MTU is chosen below 1280 (the
+          minimum MTU for IPv6) it will automatically be increased to this value.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>ARP=</varname></term>
         <listitem>
@@ -170,835 +175,803 @@
           the network otherwise. Defaults to unset.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>Multicast=</varname></term>
         <listitem>
-          <para>Takes a boolean. If set to true, the multicast flag on the device is enabled. Defaults to unset.</para>
+          <para>Takes a boolean. If set to true, the multicast flag on the device is enabled. Defaults
+          to unset.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>AllMulticast=</varname></term>
         <listitem>
-          <para>Takes a boolean. If set to true, the driver retrieves all multicast packets from the network.
-          This happens when multicast routing is enabled. Defaults to unset.</para>
+          <para>Takes a boolean. If set to true, the driver retrieves all multicast packets from the
+          network. This happens when multicast routing is enabled. Defaults to unset.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>Promiscuous=</varname></term>
         <listitem>
-          <para>Takes a boolean. If set to true, promiscuous mode of the interface is enabled.
-          Defaults to unset.</para>
+          <para>Takes a boolean. If set to true, promiscuous mode of the interface is enabled. Defaults
+          to unset.</para>
+          <para>If this is set to false for the underlying link of a <literal>passthru</literal> mode
+          MACVLAN/MACVTAP, the virtual interface will be created with the <literal>nopromisc</literal>
+          flag set.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>Unmanaged=</varname></term>
         <listitem>
-          <para>Takes a boolean. When <literal>yes</literal>, no attempts are
-          made to bring up or configure matching links, equivalent to
-          when there are no matching network files. Defaults to
+          <para>Takes a boolean. When <literal>yes</literal>, no attempts are made to bring up or
+          configure matching links, equivalent to when there are no matching network files. Defaults to
           <literal>no</literal>.</para>
-          <para>This is useful for preventing later matching network
-          files from interfering with certain interfaces that are fully
-          controlled by other applications.</para>
+          <para>This is useful for preventing later matching network files from interfering with
+          certain interfaces that are fully controlled by other applications.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>Group=</varname></term>
         <listitem>
-          <para>Link groups are similar to port ranges found in managed switches. When network interfaces
-          are added to a numbered group, operations on all the interfaces from that group can be
-          performed at once. Takes an unsigned integer in the range 0…4294967295. Defaults to unset.
-          </para>
+          <para>Link groups are similar to port ranges found in managed switches. When network
+          interfaces are added to a numbered group, operations on all the interfaces from that group
+          can be performed at once. Takes an unsigned integer in the range 0…2147483647. Defaults to
+          unset.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>RequiredForOnline=</varname></term>
         <listitem>
-          <para>Takes a boolean or a minimum operational state and an optional maximum operational state.
-          Please see <citerefentry><refentrytitle>networkctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-          for possible operational states. When <literal>yes</literal>, the network is deemed required when
-          determining whether the system is online (including when running
-          <command>systemd-networkd-wait-online</command>). When <literal>no</literal>, the network is ignored
-          when determining the online state. When a minimum operational state and an optional maximum operational
-          state are set, <literal>yes</literal> is implied, and this controls the minimum and maximum
-          operational state required for the network interface to be considered online.</para>
+          <para>Takes a boolean or a minimum operational state and an optional maximum operational
+          state. Please see
+          <citerefentry><refentrytitle>networkctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+          for possible operational states. When <literal>yes</literal>, the network is deemed required
+          when determining whether the system is online (including when running
+          <command>systemd-networkd-wait-online</command>). When <literal>no</literal>, the network is
+          ignored when determining the online state. When a minimum operational state and an optional
+          maximum operational state are set, <literal>yes</literal> is implied, and this controls the
+          minimum and maximum operational state required for the network interface to be considered
+          online.</para>
 
-          <para>Defaults to <literal>yes</literal> when <varname>ActivationPolicy=</varname> is not set,
-          or set to <literal>up</literal>, <literal>always-up</literal>, or <literal>bound</literal>.
-          Defaults to <literal>no</literal> when <varname>ActivationPolicy=</varname> is set to
-          <literal>manual</literal> or <literal>down</literal>. This is forced to <literal>no</literal>
-          when <varname>ActivationPolicy=</varname> is set to <literal>always-down</literal>.</para>
+          <para>Defaults to <literal>yes</literal> when <varname>ActivationPolicy=</varname> is not
+          set, or set to <literal>up</literal>, <literal>always-up</literal>, or
+          <literal>bound</literal>. Defaults to <literal>no</literal> when
+          <varname>ActivationPolicy=</varname> is set to <literal>manual</literal> or
+          <literal>down</literal>. This is forced to <literal>no</literal> when
+          <varname>ActivationPolicy=</varname> is set to <literal>always-down</literal>.</para>
 
-          <para>The network will be brought up normally (as configured by <varname>ActivationPolicy=</varname>),
-          but in the event that there is no address being assigned by DHCP or the
-          cable is not plugged in, the link will simply remain offline and be
-          skipped automatically by <command>systemd-networkd-wait-online</command>
-          if <literal>RequiredForOnline=no</literal>.</para>
+          <para>The network will be brought up normally (as configured by
+          <varname>ActivationPolicy=</varname>), but in the event that there is no address being
+          assigned by DHCP or the cable is not plugged in, the link will simply remain offline and be
+          skipped automatically by <command>systemd-networkd-wait-online</command> if
+          <literal>RequiredForOnline=no</literal>.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>RequiredFamilyForOnline=</varname></term>
         <listitem>
-          <para>Takes an address family. When specified, an IP address in the given family is deemed required
-          when determining whether the link is online (including when running
+          <para>Takes an address family. When specified, an IP address in the given family is deemed
+          required when determining whether the link is online (including when running
           <command>systemd-networkd-wait-online</command>). Takes one of <literal>ipv4</literal>,
           <literal>ipv6</literal>, <literal>both</literal>, or <literal>any</literal>. Defaults to
           <literal>any</literal>. Note that this option has no effect if
-          <literal>RequiredForOnline=no</literal>, or if <literal>RequiredForOnline=</literal> specifies a
-          minimum operational state below <literal>degraded</literal>.</para>
+          <literal>RequiredForOnline=no</literal>, or if <literal>RequiredForOnline=</literal>
+          specifies a minimum operational state below <literal>degraded</literal>.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>ActivationPolicy=</varname></term>
         <listitem>
           <para>Specifies the policy for <command>systemd-networkd</command> managing the link
           administrative state. Specifically, this controls how <command>systemd-networkd</command>
           changes the network device's <literal>IFF_UP</literal> flag, which is sometimes
-          controlled by system administrators by running e.g., <command>ip link set dev eth0 up</command>
-          or <command>ip link set dev eth0 down</command>, and can also be changed with
-          <command>networkctl up eth0</command> or <command>networkctl down eth0</command>.</para>
+          controlled by system administrators by running e.g.,
+          <command>ip link set dev eth0 up</command> or <command>ip link set dev eth0 down</command>,
+          and can also be changed with <command>networkctl up eth0</command> or
+          <command>networkctl down eth0</command>.</para>
 
           <para>Takes one of <literal>up</literal>, <literal>always-up</literal>,
           <literal>manual</literal>, <literal>always-down</literal>, <literal>down</literal>,
-          or <literal>bound</literal>. When <literal>manual</literal>, <command>systemd-networkd</command>
-          will not change the link's admin state automatically; the system administrator must bring the
-          interface up or down manually, as desired. When <literal>up</literal> (the default) or
-          <literal>always-up</literal>, or <literal>down</literal> or <literal>always-down</literal>,
-          <command>systemd-networkd</command> will set the link up or down, respectively,
-          when the interface is (re)configured. When <literal>always-up</literal> or
-          <literal>always-down</literal>, <command>systemd-networkd</command> will set the link up
-          or down, respectively, any time <command>systemd-networkd</command> detects a change in
-          the administrative state. When <varname>BindCarrier=</varname> is also set, this is
-          automatically set to <literal>bound</literal> and any other value is ignored.</para>
+          or <literal>bound</literal>. When <literal>manual</literal>,
+          <command>systemd-networkd</command> will not change the link's admin state automatically;
+          the system administrator must bring the interface up or down manually, as desired. When
+          <literal>up</literal> (the default) or <literal>always-up</literal>, or
+          <literal>down</literal> or <literal>always-down</literal>,
+          <command>systemd-networkd</command> will set the link up or down, respectively, when the
+          interface is (re)configured. When <literal>always-up</literal> or
+          <literal>always-down</literal>, <command>systemd-networkd</command> will set the link up or
+          down, respectively, any time <command>systemd-networkd</command> detects a change in the
+          administrative state. When <varname>BindCarrier=</varname> is also set, this is automatically
+          set to <literal>bound</literal> and any other value is ignored.</para>
 
-          <para>When the policy is set to <literal>down</literal> or <literal>manual</literal>,
-          the default value of <varname>RequiredForOnline=</varname> is <literal>no</literal>.
-          When the policy is set to <literal>always-down</literal>, the value of
+          <para>When the policy is set to <literal>down</literal> or <literal>manual</literal>, the
+          default value of <varname>RequiredForOnline=</varname> is <literal>no</literal>. When the
+          policy is set to <literal>always-down</literal>, the value of
           <varname>RequiredForOnline=</varname> forced to <literal>no</literal>.</para>
 
           <para>The administrative state is not the same as the carrier state, so using
-          <literal>always-up</literal> does not mean the link will never lose carrier. The link
-          carrier depends on both the administrative state as well as the network device's physical
-          connection. However, to avoid reconfiguration failures, when using <literal>always-up</literal>,
+          <literal>always-up</literal> does not mean the link will never lose carrier. The link carrier
+          depends on both the administrative state as well as the network device's physical connection.
+          However, to avoid reconfiguration failures, when using <literal>always-up</literal>,
           <varname>IgnoreCarrierLoss=</varname> is forced to true.</para>
         </listitem>
       </varlistentry>
     </variablelist>
   </refsect1>
 
-  <refsect1>
-      <title>[SR-IOV] Section Options</title>
-      <para>The [SR-IOV] section accepts the following keys. Specify several [SR-IOV] sections to configure
-      several SR-IOVs. SR-IOV provides the ability to partition a single physical PCI resource into virtual
-      PCI functions which can then be injected into a VM. In the case of network VFs, SR-IOV improves
-      north-south network performance (that is, traffic with endpoints outside the host machine) by allowing
-      traffic to bypass the host machine’s network stack.</para>
-
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>VirtualFunction=</varname></term>
-          <listitem>
-            <para>Specifies a Virtual Function (VF), lightweight PCIe function designed solely to move data
-            in and out. Takes an unsigned integer in the range 0…2147483646. This option is compulsory.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>VLANId=</varname></term>
-          <listitem>
-            <para>Specifies VLAN ID of the virtual function. Takes an unsigned integer in the range 1…4095.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>QualityOfService=</varname></term>
-          <listitem>
-            <para>Specifies quality of service of the virtual function. Takes an unsigned integer in the range 1…4294967294.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>VLANProtocol=</varname></term>
-          <listitem>
-            <para>Specifies VLAN protocol of the virtual function. Takes <literal>802.1Q</literal> or
-            <literal>802.1ad</literal>.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>MACSpoofCheck=</varname></term>
-          <listitem>
-            <para>Takes a boolean. Controls the MAC spoof checking. When unset, the kernel's default will be used.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>QueryReceiveSideScaling=</varname></term>
-          <listitem>
-            <para>Takes a boolean. Toggle the ability of querying the receive side scaling (RSS)
-            configuration of the virtual function (VF). The VF RSS information like RSS hash key may be
-            considered sensitive on some devices where this information is shared between VF and the
-            physical function (PF). When unset, the kernel's default will be used.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>Trust=</varname></term>
-          <listitem>
-            <para>Takes a boolean. Allows to set trust mode of the virtual function (VF). When set, VF
-            users can set a specific feature which may impact security and/or performance. When unset,
-            the kernel's default will be used.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>LinkState=</varname></term>
-          <listitem>
-            <para>Allows to set the link state of the virtual function (VF). Takes a boolean or a
-            special value <literal>auto</literal>. Setting to <literal>auto</literal> means a
-            reflection of the physical function (PF) link state, <literal>yes</literal> lets the VF to
-            communicate with other VFs on this host even if the PF link state is down,
-            <literal>no</literal> causes the hardware to drop any packets sent by the VF. When unset,
-            the kernel's default will be used.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>MACAddress=</varname></term>
-          <listitem>
-            <para>Specifies the MAC address for the virtual function.</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
-  </refsect1>
+  <xi:include href="systemd.link.xml" xpointer="sr-iov" />
 
   <refsect1>
     <title>[Network] Section Options</title>
 
-      <para>The [Network] section accepts the following keys:</para>
+    <para>The [Network] section accepts the following keys:</para>
 
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>Description=</varname></term>
-          <listitem>
-            <para>A description of the device. This is only used for
-            presentation purposes.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DHCP=</varname></term>
-          <listitem>
-            <para>Enables DHCPv4 and/or DHCPv6 client support. Accepts
-            <literal>yes</literal>, <literal>no</literal>,
-            <literal>ipv4</literal>, or <literal>ipv6</literal>. Defaults
-            to <literal>no</literal>.</para>
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>Description=</varname></term>
+        <listitem>
+          <para>A description of the device. This is only used for presentation purposes.</para>
+        </listitem>
+      </varlistentry>
 
-            <para>Note that DHCPv6 will by default be triggered by Router
-            Advertisement, if that is enabled, regardless of this parameter.
-            By enabling DHCPv6 support explicitly, the DHCPv6 client will
-            be started regardless of the presence of routers on the link,
-            or what flags the routers pass. See
-            <literal>IPv6AcceptRA=</literal>.</para>
-
-            <para>Furthermore, note that by default the domain name
-            specified through DHCP is not used for name resolution.
-            See option <option>UseDomains=</option> below.</para>
-
-            <para>See the [DHCPv4] or [DHCPv6] sections below for further configuration options for the DHCP
-            client support.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DHCPServer=</varname></term>
-          <listitem>
-            <para>Takes a boolean. If set to <literal>yes</literal>, DHCPv4 server will be started. Defaults
-            to <literal>no</literal>. Further settings for the DHCP server may be set in the [DHCPServer]
-            section described below.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>LinkLocalAddressing=</varname></term>
-          <listitem>
-            <para>Enables link-local address autoconfiguration. Accepts <option>yes</option>,
-            <option>no</option>, <option>ipv4</option>, and <option>ipv6</option>. An IPv6 link-local address
-            is configured when <option>yes</option> or <option>ipv6</option>. An IPv4 link-local address is
-            configured when <option>yes</option> or <option>ipv4</option> and when DHCPv4 autoconfiguration
-            has been unsuccessful for some time. (IPv4 link-local address autoconfiguration will usually
-            happen in parallel with repeated attempts to acquire a DHCPv4 lease).</para>
-
-            <para>Defaults to <option>no</option> when <varname>Bridge=yes</varname> is set, and
-            <option>ipv6</option> otherwise.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6LinkLocalAddressGenerationMode=</varname></term>
-          <listitem>
-            <para>Specifies how IPv6 link local address is generated. Takes one of
-            <literal>eui64</literal>, <literal>none</literal>, <literal>stable-privacy</literal> and
-            <literal>random</literal>. When unset, <literal>stable-privacy</literal> is used if
-            <varname>IPv6StableSecretAddress=</varname> is specified, and if not,
-            <literal>eui64</literal> is used. Note that if <varname>LinkLocalAddressing=</varname> is
-            <literal>no</literal> or <literal>ipv4</literal>, then
-            <varname>IPv6LinkLocalAddressGenerationMode=</varname> will be ignored. Also, even if
-            <varname>LinkLocalAddressing=</varname> is <literal>yes</literal> or
-            <literal>ipv6</literal>, setting <varname>IPv6LinkLocalAddressGenerationMode=none</varname>
-            disables to configure an IPv6 link-local address.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6StableSecretAddress=</varname></term>
-          <listitem>
-            <para>Takes an IPv6 address. The specified address will be used as a stable secret for
-            generating IPv6 link-local address. If this setting is specified, and
-            <varname>IPv6LinkLocalAddressGenerationMode=</varname> is unset, then
-            <varname>IPv6LinkLocalAddressGenerationMode=stable-privacy</varname> is implied.
-            If this setting is not specified, and <literal>stable-privacy</literal> is set to
-            <varname>IPv6LinkLocalAddressGenerationMode=</varname>,
-            then a stable secret address will be generated from the local machine ID and the interface
-            name.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv4LLRoute=</varname></term>
-          <listitem>
-            <para>Takes a boolean. If set to true, sets up the route needed for
-            non-IPv4LL hosts to communicate with IPv4LL-only hosts. Defaults
-            to false.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DefaultRouteOnDevice=</varname></term>
-          <listitem>
-            <para>Takes a boolean. If set to true, sets up the default route bound to the interface.
-            Defaults to false. This is useful when creating routes on point-to-point interfaces.
-            This is equivalent to e.g. the following,
-            <programlisting>ip route add default dev veth99</programlisting>
-            or,
-            <programlisting>[Route]
-Gateway=0.0.0.0</programlisting></para>
-            <para>Currently, there are no way to specify e.g., the table for the route configured by
-            this setting. To configure the default route with such an additional property, please use
-            the following instead:
-            <programlisting>[Route]
-Gateway=0.0.0.0
-Table=1234</programlisting></para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6Token=</varname></term>
-          <listitem>
-            <para>Specifies an optional address generation mode for the Stateless Address
-            Autoconfiguration (SLAAC). Supported modes are <literal>prefixstable</literal> and
-            <literal>static</literal>.</para>
-
-            <para>When the mode is set to <literal>static</literal>, an IPv6 address must be
-            specified after a colon (<literal>:</literal>), and the lower bits of the supplied
-            address are combined with the upper bits of a prefix received in a Router Advertisement
-            (RA) message to form a complete address. Note that if multiple prefixes are received in an
-            RA message, or in multiple RA messages, addresses will be formed from each of them using
-            the supplied address. This mode implements SLAAC but uses a static interface identifier
-            instead of an identifier generated by using the EUI-64 algorithm. Because the interface
-            identifier is static, if Duplicate Address Detection detects that the computed address is a
-            duplicate (in use by another node on the link), then this mode will fail to provide an
-            address for that prefix. If an IPv6 address without mode is specified, then
-            <literal>static</literal> mode is assumed.</para>
-
-            <para>When the mode is set to <literal>prefixstable</literal> the
-            <ulink url="https://tools.ietf.org/html/rfc7217">RFC 7217</ulink> algorithm for generating
-            interface identifiers will be used. This mode can optionally take an IPv6 address separated
-            with a colon (<literal>:</literal>). If an IPv6 address is specified, then an interface
-            identifier is generated only when a prefix received in an RA message matches the supplied
-            address.</para>
-
-            <para>If no address generation mode is specified (which is the default), or a received
-            prefix does not match any of the addresses provided in <literal>prefixstable</literal>
-            mode, then the EUI-64 algorithm will be used to form an interface identifier for that
-            prefix. This mode is also SLAAC, but with a potentially stable interface identifier which
-            does not directly map to the interface's hardware address.</para>
-
-            <para>Note that the <literal>prefixstable</literal> algorithm uses both the interface
-            name and MAC address as input to the hash to compute the interface identifier, so if either
-            of those are changed the resulting interface identifier (and address) will change, even if
-            the prefix received in the RA message has not changed.</para>
-
-            <para>This setting can be specified multiple times. If an empty string is assigned, then
-            the all previous assignments are cleared.</para>
-
-            <para>Examples:
-            <programlisting>IPv6Token=::1a:2b:3c:4d
-IPv6Token=static:::1a:2b:3c:4d
-IPv6Token=prefixstable
-IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>LLMNR=</varname></term>
-          <listitem>
-            <para>Takes a boolean or <literal>resolve</literal>. When true,
-            enables <ulink
-            url="https://tools.ietf.org/html/rfc4795">Link-Local
-            Multicast Name Resolution</ulink> on the link. When set to
-            <literal>resolve</literal>, only resolution is enabled,
-            but not host registration and announcement. Defaults to
-            true. This setting is read by
-            <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>MulticastDNS=</varname></term>
-          <listitem>
-            <para>Takes a boolean or <literal>resolve</literal>. When true,
-            enables <ulink
-            url="https://tools.ietf.org/html/rfc6762">Multicast
-            DNS</ulink> support on the link. When set to
-            <literal>resolve</literal>, only resolution is enabled,
-            but not host or service registration and
-            announcement. Defaults to false. This setting is read by
-            <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DNSOverTLS=</varname></term>
-          <listitem>
-            <para>Takes a boolean or <literal>opportunistic</literal>.
-            When true, enables
-            <ulink
-            url="https://tools.ietf.org/html/rfc7858">DNS-over-TLS</ulink>
-            support on the link.
-            When set to <literal>opportunistic</literal>, compatibility with
-            non-DNS-over-TLS servers is increased, by automatically
-            turning off DNS-over-TLS servers in this case.
-            This option defines a per-interface setting for
-            <citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>'s
-            global <varname>DNSOverTLS=</varname> option. Defaults to
-            false. This setting is read by
-            <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DNSSEC=</varname></term>
-          <listitem>
-            <para>Takes a boolean or <literal>allow-downgrade</literal>. When true, enables
-            <ulink url="https://tools.ietf.org/html/rfc4033">DNSSEC</ulink>
-            DNS validation support on the link. When set to
-            <literal>allow-downgrade</literal>, compatibility with
-            non-DNSSEC capable networks is increased, by automatically
-            turning off DNSSEC in this case. This option defines a
-            per-interface setting for
-            <citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>'s
-            global <varname>DNSSEC=</varname> option. Defaults to
-            false. This setting is read by
-            <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DNSSECNegativeTrustAnchors=</varname></term>
-          <listitem><para>A space-separated list of DNSSEC negative
-          trust anchor domains. If specified and DNSSEC is enabled,
-          look-ups done via the interface's DNS server will be subject
-          to the list of negative trust anchors, and not require
-          authentication for the specified domains, or anything below
-          it. Use this to disable DNSSEC authentication for specific
-          private domains, that cannot be proven valid using the
-          Internet DNS hierarchy. Defaults to the empty list. This
-          setting is read by
-          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>LLDP=</varname></term>
-          <listitem>
-            <para>Controls support for Ethernet LLDP packet reception. LLDP is a link-layer protocol commonly
-            implemented on professional routers and bridges which announces which physical port a system is connected
-            to, as well as other related data. Accepts a boolean or the special value
-            <literal>routers-only</literal>. When true, incoming LLDP packets are accepted and a database of all LLDP
-            neighbors maintained. If <literal>routers-only</literal> is set only LLDP data of various types of routers
-            is collected and LLDP data about other types of devices ignored (such as stations, telephones and
-            others). If false, LLDP reception is disabled. Defaults to <literal>routers-only</literal>. Use
-            <citerefentry><refentrytitle>networkctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> to query the
-            collected neighbor data. LLDP is only available on Ethernet links. See <varname>EmitLLDP=</varname> below
-            for enabling LLDP packet emission from the local system.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>EmitLLDP=</varname></term>
-          <listitem>
-            <para>Controls support for Ethernet LLDP packet emission. Accepts a boolean parameter or the special values
-            <literal>nearest-bridge</literal>, <literal>non-tpmr-bridge</literal> and
-            <literal>customer-bridge</literal>.  Defaults to false, which turns off LLDP packet emission. If not false,
-            a short LLDP packet with information about the local system is sent out in regular intervals on the
-            link. The LLDP packet will contain information about the local hostname, the local machine ID (as stored
-            in <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>) and the
-            local interface name, as well as the pretty hostname of the system (as set in
-            <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry>). LLDP
-            emission is only available on Ethernet links. Note that this setting passes data suitable for
-            identification of host to the network and should thus not be enabled on untrusted networks, where such
-            identification data should not be made available. Use this option to permit other systems to identify on
-            which interfaces they are connected to this system. The three special values control propagation of the
-            LLDP packets. The <literal>nearest-bridge</literal> setting permits propagation only to the nearest
-            connected bridge, <literal>non-tpmr-bridge</literal> permits propagation across Two-Port MAC Relays, but
-            not any other bridges, and <literal>customer-bridge</literal> permits propagation until a customer bridge
-            is reached. For details about these concepts, see <ulink
-            url="https://standards.ieee.org/findstds/standard/802.1AB-2016.html">IEEE 802.1AB-2016</ulink>. Note that
-            configuring this setting to true is equivalent to <literal>nearest-bridge</literal>, the recommended and
-            most restricted level of propagation. See <varname>LLDP=</varname> above for an option to enable LLDP
-            reception.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>BindCarrier=</varname></term>
-          <listitem>
-            <para>A link name or a list of link names. When set, controls the behavior of the current
-            link. When all links in the list are in an operational down state, the current link is brought
-            down. When at least one link has carrier, the current interface is brought up.</para>
-
-            <para>This forces <varname>ActivationPolicy=</varname> to be set to <literal>bound</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Address=</varname></term>
-          <listitem>
-            <para>A static IPv4 or IPv6 address and its prefix length,
-            separated by a <literal>/</literal> character. Specify
-            this key more than once to configure several addresses.
-            The format of the address must be as described in
-            <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-            This is a short-hand for an [Address] section only
-            containing an Address key (see below). This option may be
-            specified more than once.
-            </para>
-
-            <para>If the specified address is <literal>0.0.0.0</literal> (for IPv4) or <literal>::</literal>
-            (for IPv6), a new address range of the requested size is automatically allocated from a
-            system-wide pool of unused ranges. Note that the prefix length must be equal or larger than 8 for
-            IPv4, and 64 for IPv6. The allocated range is checked against all current network interfaces and
-            all known network configuration files to avoid address range conflicts. The default system-wide
-            pool consists of 192.168.0.0/16, 172.16.0.0/12 and 10.0.0.0/8 for IPv4, and fd00::/8 for IPv6.
-            This functionality is useful to manage a large number of dynamically created network interfaces
-            with the same network configuration and automatic address range assignment.</para>
-
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Gateway=</varname></term>
-          <listitem>
-            <para>The gateway address, which must be in the format
-            described in
-            <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-            This is a short-hand for a [Route] section only containing
-            a Gateway key. This option may be specified more than
-            once.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DNS=</varname></term>
-          <listitem>
-            <para>A DNS server address, which must be in the format described in
-            <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-            This option may be specified more than once. Each address can optionally take a port number
-            separated with <literal>:</literal>, a network interface name or index separated with
-            <literal>%</literal>, and a Server Name Indication (SNI) separated with <literal>#</literal>.
-            When IPv6 address is specified with a port number, then the address must be in the square
-            brackets. That is, the acceptable full formats are
-            <literal>111.222.333.444:9953%ifname#example.com</literal> for IPv4 and
-            <literal>[1111:2222::3333]:9953%ifname#example.com</literal> for IPv6. If an empty string is
-            assigned, then the all previous assignments are cleared. This setting is read by
-            <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Domains=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of domains which should be resolved using the DNS servers on
-            this link. Each item in the list should be a domain name, optionally prefixed with a tilde
-            (<literal>~</literal>). The domains with the prefix are called "routing-only domains". The
-            domains without the prefix are called "search domains" and are first used as search suffixes for
-            extending single-label hostnames (hostnames containing no dots) to become fully qualified
-            domain names (FQDNs). If a single-label hostname is resolved on this interface, each of the
-            specified search domains are appended to it in turn, converting it into a fully qualified domain
-            name, until one of them may be successfully resolved.</para>
-
-            <para>Both "search" and "routing-only" domains are used for routing of DNS queries: look-ups for hostnames
-            ending in those domains (hence also single label names, if any "search domains" are listed), are routed to
-            the DNS servers configured for this interface. The domain routing logic is particularly useful on
-            multi-homed hosts with DNS servers serving particular private DNS zones on each interface.</para>
-
-            <para>The "routing-only" domain <literal>~.</literal> (the tilde indicating definition of a routing domain,
-            the dot referring to the DNS root domain which is the implied suffix of all valid DNS names) has special
-            effect. It causes all DNS traffic which does not match another configured domain routing entry to be routed
-            to DNS servers specified for this interface. This setting is useful to prefer a certain set of DNS servers
-            if a link on which they are connected is available.</para>
-
-            <para>This setting is read by
-            <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
-            "Search domains" correspond to the <varname>domain</varname> and <varname>search</varname> entries in
-            <citerefentry project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
-            Domain name routing has no equivalent in the traditional glibc API, which has no concept of domain
-            name servers limited to a specific link.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DNSDefaultRoute=</varname></term>
-          <listitem>
-            <para>Takes a boolean argument. If true, this link's configured DNS servers are used for resolving domain
-            names that do not match any link's configured <varname>Domains=</varname> setting. If false, this link's
-            configured DNS servers are never used for such domains, and are exclusively used for resolving names that
-            match at least one of the domains configured on this link. If not specified defaults to an automatic mode:
-            queries not matching any link's configured domains will be routed to this link if it has no routing-only
-            domains configured.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>NTP=</varname></term>
-          <listitem>
-            <para>An NTP server address (either an IP address, or a hostname). This option may be specified more than once. This setting is read by
-            <citerefentry><refentrytitle>systemd-timesyncd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPForward=</varname></term>
-          <listitem><para>Configures IP packet forwarding for the
-          system. If enabled, incoming packets on any network
-          interface will be forwarded to any other interfaces
-          according to the routing table. Takes a boolean,
-          or the values <literal>ipv4</literal> or
-          <literal>ipv6</literal>, which only enable IP packet
-          forwarding for the specified address family.  This controls
-          the <filename>net.ipv4.ip_forward</filename> and
-          <filename>net.ipv6.conf.all.forwarding</filename> sysctl
-          options of the network interface (see <ulink
-          url="https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt">ip-sysctl.txt</ulink>
-          for details about sysctl options). Defaults to
+      <varlistentry>
+        <term><varname>DHCP=</varname></term>
+        <listitem>
+          <para>Enables DHCPv4 and/or DHCPv6 client support. Accepts <literal>yes</literal>,
+          <literal>no</literal>, <literal>ipv4</literal>, or <literal>ipv6</literal>. Defaults to
           <literal>no</literal>.</para>
 
-          <para>Note: this setting controls a global kernel option,
-          and does so one way only: if a network that has this setting
-          enabled is set up the global setting is turned on.  However,
-          it is never turned off again, even after all networks with
-          this setting enabled are shut down again.</para>
+          <para>Note that DHCPv6 will by default be triggered by Router Advertisements, if reception is
+          enabled, regardless of this parameter. By explicitly enabling DHCPv6 support here, the DHCPv6
+          client will be started in the mode specified by the <varname>WithoutRA=</varname> setting in the
+          [DHCPv6] section, regardless of the presence of routers on the link, or what flags the routers
+          pass. See <varname>IPv6AcceptRA=</varname>.</para>
 
-          <para>To allow IP packet forwarding only between specific
-          network interfaces use a firewall.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPMasquerade=</varname></term>
-          <listitem><para>Configures IP masquerading for the network interface. If enabled, packets
-          forwarded from the network interface will be appear as coming from the local host. Takes one
-          of <literal>ipv4</literal>, <literal>ipv6</literal>, <literal>both</literal>, or
+          <para>Furthermore, note that by default the domain name specified through DHCP is not used
+          for name resolution. See option <option>UseDomains=</option> below.</para>
+
+          <para>See the [DHCPv4] or [DHCPv6] sections below for further configuration options for the
+          DHCP client support.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DHCPServer=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to <literal>yes</literal>, DHCPv4 server will be started.
+          Defaults to <literal>no</literal>. Further settings for the DHCP server may be set in the
+          [DHCPServer] section described below.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>LinkLocalAddressing=</varname></term>
+        <listitem>
+          <para>Enables link-local address autoconfiguration. Accepts <option>yes</option>,
+          <option>no</option>, <option>ipv4</option>, and <option>ipv6</option>. An IPv6 link-local
+          address is configured when <option>yes</option> or <option>ipv6</option>. An IPv4 link-local
+          address is configured when <option>yes</option> or <option>ipv4</option> and when DHCPv4
+          autoconfiguration has been unsuccessful for some time. (IPv4 link-local address
+          autoconfiguration will usually happen in parallel with repeated attempts to acquire a DHCPv4
+          lease).</para>
+
+          <para>Defaults to <option>no</option> when <varname>KeepMaster=</varname> or
+          <varname>Bridge=</varname> is set or when the specified
+          <varname>MACVLAN=</varname>/<varname>MACVTAP=</varname> has <varname>Mode=passthru</varname>,
+          or <option>ipv6</option> otherwise.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6LinkLocalAddressGenerationMode=</varname></term>
+        <listitem>
+          <para>Specifies how IPv6 link-local address is generated. Takes one of
+          <literal>eui64</literal>, <literal>none</literal>, <literal>stable-privacy</literal> and
+          <literal>random</literal>. When unset, <literal>stable-privacy</literal> is used if
+          <varname>IPv6StableSecretAddress=</varname> is specified, and if not,
+          <literal>eui64</literal> is used. Note that if <varname>LinkLocalAddressing=</varname> is
+          <literal>no</literal> or <literal>ipv4</literal>, then
+          <varname>IPv6LinkLocalAddressGenerationMode=</varname> will be ignored. Also, even if
+          <varname>LinkLocalAddressing=</varname> is <literal>yes</literal> or <literal>ipv6</literal>,
+          setting <varname>IPv6LinkLocalAddressGenerationMode=none</varname>
+          disables to configure an IPv6 link-local address.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6StableSecretAddress=</varname></term>
+        <listitem>
+          <para>Takes an IPv6 address. The specified address will be used as a stable secret for
+          generating IPv6 link-local address. If this setting is specified, and
+          <varname>IPv6LinkLocalAddressGenerationMode=</varname> is unset, then
+          <varname>IPv6LinkLocalAddressGenerationMode=stable-privacy</varname> is implied.
+          If this setting is not specified, and <literal>stable-privacy</literal> is set to
+          <varname>IPv6LinkLocalAddressGenerationMode=</varname>,
+          then a stable secret address will be generated from the local machine ID and the interface
+          name.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv4LLStartAddress=</varname></term>
+        <listitem>
+          <para>Specifies the first IPv4 link-local address to try. Takes an IPv4 address for example
+          169.254.1.2, from the link-local address range: 169.254.0.0/16 except for 169.254.0.0/24 and
+          169.254.255.0/24. This setting may be useful if the device should always have the same address
+          as long as there is no address conflict. When unset, a random address will be automatically
+          selected. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv4LLRoute=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, sets up the route needed for non-IPv4LL hosts to
+          communicate with IPv4LL-only hosts. Defaults to false.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DefaultRouteOnDevice=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, sets up the IPv4 default route bound to the interface.
+          Defaults to false. This is useful when creating routes on point-to-point interfaces. This is
+          equivalent to e.g. the following,
+          <programlisting>ip route add default dev veth99</programlisting>
+          or,
+          <programlisting>[Route]
+Gateway=0.0.0.0</programlisting></para>
+          <para>Currently, there are no way to specify e.g., the table for the route configured by this
+          setting. To configure the default route with such an additional property, please use the
+          following instead:
+          <programlisting>[Route]
+Gateway=0.0.0.0
+Table=1234</programlisting></para>
+          <para>If you'd like to create an IPv6 default route bound to the interface, please use the
+          following:
+          <programlisting>[Route]
+Gateway=::
+Table=1234</programlisting></para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>LLMNR=</varname></term>
+        <listitem>
+          <para>Takes a boolean or <literal>resolve</literal>. When true, enables
+          <ulink url="https://tools.ietf.org/html/rfc4795">Link-Local Multicast Name Resolution</ulink>
+          on the link. When set to <literal>resolve</literal>, only resolution is enabled, but not host
+          registration and announcement. Defaults to true. This setting is read by
+          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>MulticastDNS=</varname></term>
+        <listitem>
+          <para>Takes a boolean or <literal>resolve</literal>. When true, enables
+          <ulink url="https://tools.ietf.org/html/rfc6762">Multicast DNS</ulink> support on the link.
+          When set to <literal>resolve</literal>, only resolution is enabled, but not host or service
+          registration and announcement. Defaults to false. This setting is read by
+          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DNSOverTLS=</varname></term>
+        <listitem>
+          <para>Takes a boolean or <literal>opportunistic</literal>. When true, enables
+          <ulink url="https://tools.ietf.org/html/rfc7858">DNS-over-TLS</ulink> support on the link.
+          When set to <literal>opportunistic</literal>, compatibility with non-DNS-over-TLS servers is
+          increased, by automatically turning off DNS-over-TLS servers in this case. This option
+          defines a per-interface setting for
+          <citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>'s
+          global <varname>DNSOverTLS=</varname> option. Defaults to unset, and the global setting will
+          be used. This setting is read by
+          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DNSSEC=</varname></term>
+        <listitem>
+          <para>Takes a boolean or <literal>allow-downgrade</literal>. When true, enables
+          <ulink url="https://tools.ietf.org/html/rfc4033">DNSSEC</ulink> DNS validation support on the
+          link. When set to <literal>allow-downgrade</literal>, compatibility with non-DNSSEC capable
+          networks is increased, by automatically turning off DNSSEC in this case. This option defines
+          a per-interface setting for
+          <citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>'s
+          global <varname>DNSSEC=</varname> option. Defaults to unset, and the global setting will be
+          used. This setting is read by
+          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DNSSECNegativeTrustAnchors=</varname></term>
+        <listitem>
+          <para>A space-separated list of DNSSEC negative trust anchor domains. If specified and DNSSEC
+          is enabled, look-ups done via the interface's DNS server will be subject to the list of
+          negative trust anchors, and not require authentication for the specified domains, or anything
+          below it. Use this to disable DNSSEC authentication for specific private domains, that cannot
+          be proven valid using the Internet DNS hierarchy. Defaults to the empty list. This setting is
+          read by
+          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>LLDP=</varname></term>
+        <listitem>
+          <para>Controls support for Ethernet LLDP packet reception. LLDP is a link-layer protocol
+          commonly implemented on professional routers and bridges which announces which physical port
+          a system is connected to, as well as other related data. Accepts a boolean or the special
+          value <literal>routers-only</literal>. When true, incoming LLDP packets are accepted and a
+          database of all LLDP neighbors maintained. If <literal>routers-only</literal> is set only
+          LLDP data of various types of routers is collected and LLDP data about other types of devices
+          ignored (such as stations, telephones and others). If false, LLDP reception is disabled.
+          Defaults to <literal>routers-only</literal>. Use
+          <citerefentry><refentrytitle>networkctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+          to query the collected neighbor data. LLDP is only available on Ethernet links. See
+          <varname>EmitLLDP=</varname> below for enabling LLDP packet emission from the local system.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>EmitLLDP=</varname></term>
+        <listitem>
+          <para>Controls support for Ethernet LLDP packet emission. Accepts a boolean parameter or the
+          special values <literal>nearest-bridge</literal>, <literal>non-tpmr-bridge</literal> and
+          <literal>customer-bridge</literal>. Defaults to false, which turns off LLDP packet emission.
+          If not false, a short LLDP packet with information about the local system is sent out in
+          regular intervals on the link. The LLDP packet will contain information about the local
+          hostname, the local machine ID (as stored in
+          <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
+          and the local interface name, as well as the pretty hostname of the system (as set in
+          <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+          LLDP emission is only available on Ethernet links. Note that this setting passes data
+          suitable for identification of host to the network and should thus not be enabled on
+          untrusted networks, where such identification data should not be made available. Use this
+          option to permit other systems to identify on which interfaces they are connected to this
+          system. The three special values control propagation of the LLDP packets. The
+          <literal>nearest-bridge</literal> setting permits propagation only to the nearest connected
+          bridge, <literal>non-tpmr-bridge</literal> permits propagation across Two-Port MAC Relays,
+          but not any other bridges, and <literal>customer-bridge</literal> permits propagation until
+          a customer bridge is reached. For details about these concepts, see
+          <ulink url="https://standards.ieee.org/findstds/standard/802.1AB-2016.html">IEEE 802.1AB-2016</ulink>.
+          Note that configuring this setting to true is equivalent to
+          <literal>nearest-bridge</literal>, the recommended and most restricted level of propagation.
+          See <varname>LLDP=</varname> above for an option to enable LLDP reception.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>BindCarrier=</varname></term>
+        <listitem>
+          <para>A link name or a list of link names. When set, controls the behavior of the current
+          link. When all links in the list are in an operational down state, the current link is
+          brought down. When at least one link has carrier, the current interface is brought up.</para>
+
+          <para>This forces <varname>ActivationPolicy=</varname> to be set to <literal>bound</literal>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Address=</varname></term>
+        <listitem>
+          <para>A static IPv4 or IPv6 address and its prefix length, separated by a
+          <literal>/</literal> character. Specify this key more than once to configure several
+          addresses. The format of the address must be as described in
+          <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+          This is a short-hand for an [Address] section only containing an Address key (see below).
+          This option may be specified more than once.</para>
+
+          <para>If the specified address is <literal>0.0.0.0</literal> (for IPv4) or
+          <literal>::</literal> (for IPv6), a new address range of the requested size is automatically
+          allocated from a system-wide pool of unused ranges. Note that the prefix length must be equal
+          or larger than 8 for IPv4, and 64 for IPv6. The allocated range is checked against all
+          current network interfaces and all known network configuration files to avoid address range
+          conflicts. The default system-wide pool consists of 192.168.0.0/16, 172.16.0.0/12 and
+          10.0.0.0/8 for IPv4, and fd00::/8 for IPv6. This functionality is useful to manage a large
+          number of dynamically created network interfaces with the same network configuration and
+          automatic address range assignment.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Gateway=</varname></term>
+        <listitem>
+          <para>The gateway address, which must be in the format described in
+          <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+          This is a short-hand for a [Route] section only containing a <varname>Gateway=</varname> key.
+          This option may be specified more than once.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DNS=</varname></term>
+        <listitem>
+          <para>A DNS server address, which must be in the format described in
+          <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+          This option may be specified more than once. Each address can optionally take a port number
+          separated with <literal>:</literal>, a network interface name or index separated with
+          <literal>%</literal>, and a Server Name Indication (SNI) separated with <literal>#</literal>.
+          When IPv6 address is specified with a port number, then the address must be in the square
+          brackets. That is, the acceptable full formats are
+          <literal>111.222.333.444:9953%ifname#example.com</literal> for IPv4 and
+          <literal>[1111:2222::3333]:9953%ifname#example.com</literal> for IPv6. If an empty string is
+          assigned, then the all previous assignments are cleared. This setting is read by
+          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Domains=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of domains which should be resolved using the DNS servers
+          on this link. Each item in the list should be a domain name, optionally prefixed with a tilde
+          (<literal>~</literal>). The domains with the prefix are called "routing-only domains". The
+          domains without the prefix are called "search domains" and are first used as search suffixes
+          for extending single-label hostnames (hostnames containing no dots) to become fully qualified
+          domain names (FQDNs). If a single-label hostname is resolved on this interface, each of the
+          specified search domains are appended to it in turn, converting it into a fully qualified
+          domain name, until one of them may be successfully resolved.</para>
+
+          <para>Both "search" and "routing-only" domains are used for routing of DNS queries: look-ups
+          for hostnames ending in those domains (hence also single label names, if any "search domains"
+          are listed), are routed to the DNS servers configured for this interface. The domain routing
+          logic is particularly useful on multi-homed hosts with DNS servers serving particular private
+          DNS zones on each interface.</para>
+
+          <para>The "routing-only" domain <literal>~.</literal> (the tilde indicating definition of a
+          routing domain, the dot referring to the DNS root domain which is the implied suffix of all
+          valid DNS names) has special effect. It causes all DNS traffic which does not match another
+          configured domain routing entry to be routed to DNS servers specified for this interface.
+          This setting is useful to prefer a certain set of DNS servers if a link on which they are
+          connected is available.</para>
+
+          <para>This setting is read by
+          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          "Search domains" correspond to the <varname>domain</varname> and <varname>search</varname>
+          entries in
+          <citerefentry project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          Domain name routing has no equivalent in the traditional glibc API, which has no concept of
+          domain name servers limited to a specific link.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DNSDefaultRoute=</varname></term>
+        <listitem>
+          <para>Takes a boolean argument. If true, this link's configured DNS servers are used for
+          resolving domain names that do not match any link's configured <varname>Domains=</varname>
+          setting. If false, this link's configured DNS servers are never used for such domains, and
+          are exclusively used for resolving names that match at least one of the domains configured on
+          this link. If not specified defaults to an automatic mode: queries not matching any link's
+          configured domains will be routed to this link if it has no routing-only domains configured.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>NTP=</varname></term>
+        <listitem>
+          <para>An NTP server address (either an IP address, or a hostname). This option may be
+          specified more than once. This setting is read by
+          <citerefentry><refentrytitle>systemd-timesyncd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPForward=</varname></term>
+        <listitem>
+          <para>Configures IP packet forwarding for the system. If enabled, incoming packets on any
+          network interface will be forwarded to any other interfaces according to the routing table.
+          Takes a boolean, or the values <literal>ipv4</literal> or <literal>ipv6</literal>, which only
+          enable IP packet forwarding for the specified address family. This controls the
+          <filename>net.ipv4.ip_forward</filename> and <filename>net.ipv6.conf.all.forwarding</filename>
+          sysctl options of the network interface (see
+          <ulink url="https://docs.kernel.org/networking/ip-sysctl.html">IP Sysctl</ulink>
+          for details about sysctl options). Defaults to <literal>no</literal>.</para>
+
+          <para>Note: this setting controls a global kernel option, and does so one way only: if a
+          network that has this setting enabled is set up the global setting is turned on. However,
+          it is never turned off again, even after all networks with this setting enabled are shut
+          down again.</para>
+
+          <para>To allow IP packet forwarding only between specific network interfaces use a firewall.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPMasquerade=</varname></term>
+        <listitem>
+          <para>Configures IP masquerading for the network interface. If enabled, packets forwarded
+          from the network interface will be appear as coming from the local host. Takes one of
+          <literal>ipv4</literal>, <literal>ipv6</literal>, <literal>both</literal>, or
           <literal>no</literal>. Defaults to <literal>no</literal>. If enabled, this automatically sets
           <varname>IPForward=</varname> to one of <literal>ipv4</literal>, <literal>ipv6</literal> or
           <literal>yes</literal>.</para>
           <para>Note. Any positive boolean values such as <literal>yes</literal> or
           <literal>true</literal> are now deprecated. Please use one of the values in the above.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6PrivacyExtensions=</varname></term>
-          <listitem><para>Configures use of stateless temporary
-          addresses that change over time (see <ulink
-          url="https://tools.ietf.org/html/rfc4941">RFC 4941</ulink>,
-          Privacy Extensions for Stateless Address Autoconfiguration
-          in IPv6). Takes a boolean or the special values
-          <literal>prefer-public</literal> and
-          <literal>kernel</literal>. When true, enables the privacy
-          extensions and prefers temporary addresses over public
-          addresses. When <literal>prefer-public</literal>, enables the
-          privacy extensions, but prefers public addresses over
-          temporary addresses. When false, the privacy extensions
-          remain disabled. When <literal>kernel</literal>, the kernel's
-          default setting will be left in place.  Defaults to
-          <literal>no</literal>.</para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6AcceptRA=</varname></term>
-          <listitem><para>Takes a boolean. Controls IPv6 Router Advertisement (RA) reception support for the
-          interface. If true, RAs are accepted; if false, RAs are ignored. When RAs are accepted, they may
-          trigger the start of the DHCPv6 client if the relevant flags are set in the RA data, or if no
-          routers are found on the link. The default is to disable RA reception for bridge devices or when IP
-          forwarding is enabled, and to enable it otherwise. Cannot be enabled on bond devices and when link
-          local addressing is disabled.</para>
+        </listitem>
+      </varlistentry>
 
-          <para>Further settings for the IPv6 RA support may be configured in the [IPv6AcceptRA] section, see
-          below.</para>
+      <varlistentry>
+        <term><varname>IPv6PrivacyExtensions=</varname></term>
+        <listitem>
+          <para>Configures use of stateless temporary addresses that change over time (see
+          <ulink url="https://tools.ietf.org/html/rfc4941">RFC 4941</ulink>,
+          Privacy Extensions for Stateless Address Autoconfiguration in IPv6). Takes a boolean or the
+          special values <literal>prefer-public</literal> and <literal>kernel</literal>. When true,
+          enables the privacy extensions and prefers temporary addresses over public addresses. When
+          <literal>prefer-public</literal>, enables the privacy extensions, but prefers public
+          addresses over temporary addresses. When false, the privacy extensions remain disabled. When
+          <literal>kernel</literal>, the kernel's default setting will be left in place. Defaults to
+          <literal>no</literal>.</para>
+        </listitem>
+      </varlistentry>
 
-          <para>Also see <ulink
-          url="https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt">ip-sysctl.txt</ulink> in the kernel
-          documentation regarding <literal>accept_ra</literal>, but note that systemd's setting of
-          <constant>1</constant> (i.e. true) corresponds to kernel's setting of <constant>2</constant>.</para>
+      <varlistentry>
+        <term><varname>IPv6AcceptRA=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Controls IPv6 Router Advertisement (RA) reception support for the
+          interface. If true, RAs are accepted; if false, RAs are ignored. When RAs are accepted, they
+          may trigger the start of the DHCPv6 client if the relevant flags are set in the RA data, or
+          if no routers are found on the link. The default is to disable RA reception for bridge
+          devices or when IP forwarding is enabled, and to enable it otherwise. Cannot be enabled on
+          devices aggregated in a bond device or when link-local addressing is disabled.</para>
+
+          <para>Further settings for the IPv6 RA support may be configured in the [IPv6AcceptRA]
+          section, see below.</para>
+
+          <para>Also see
+          <ulink url="https://docs.kernel.org/networking/ip-sysctl.html">IP Sysctl</ulink>
+          in the kernel documentation regarding <literal>accept_ra</literal>, but note that systemd's
+          setting of <constant>1</constant> (i.e. true) corresponds to kernel's setting of
+          <constant>2</constant>.</para>
 
           <para>Note that kernel's implementation of the IPv6 RA protocol is always disabled,
           regardless of this setting. If this option is enabled, a userspace implementation of the IPv6
           RA protocol is used, and the kernel's own implementation remains disabled, since
           <command>systemd-networkd</command> needs to know all details supplied in the advertisements,
-          and these are not available from the kernel if the kernel's own implementation is used.</para>
+          and these are not available from the kernel if the kernel's own implementation is used.
+          </para>
         </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6DuplicateAddressDetection=</varname></term>
-          <listitem><para>Configures the amount of IPv6 Duplicate
-          Address Detection (DAD) probes to send. When unset, the kernel's default will be used.
-        </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6HopLimit=</varname></term>
-          <listitem><para>Configures IPv6 Hop Limit. For each router that
-          forwards the packet, the hop limit is decremented by 1. When the
-          hop limit field reaches zero, the packet is discarded.
-          When unset, the kernel's default will be used.
-        </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv4AcceptLocal=</varname></term>
-          <listitem><para>Takes a boolean. Accept packets with local source addresses. In combination
-          with suitable routing, this can be used to direct packets between two local interfaces over
-          the wire and have them accepted properly. When unset, the kernel's default will be used.
-          </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv4RouteLocalnet=</varname></term>
-          <listitem><para>Takes a boolean. When true, the kernel does not consider loopback addresses as martian source or destination
-          while routing. This enables the use of 127.0.0.0/8 for local routing purposes. When unset, the kernel's default will be used.
-          </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv4ProxyARP=</varname></term>
-          <listitem><para>Takes a boolean. Configures proxy ARP for IPv4. Proxy ARP is the technique in which one host,
-          usually a router, answers ARP requests intended for another machine. By "faking" its identity,
-          the router accepts responsibility for routing packets to the "real" destination. See <ulink
-          url="https://tools.ietf.org/html/rfc1027">RFC 1027</ulink>.
-          When unset, the kernel's default will be used.
-        </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6ProxyNDP=</varname></term>
-          <listitem><para>Takes a boolean. Configures proxy NDP for IPv6. Proxy NDP (Neighbor Discovery
-          Protocol) is a technique for IPv6 to allow routing of addresses to a different
-          destination when peers expect them to be present on a certain physical link.
-          In this case a router answers Neighbour Advertisement messages intended for
-          another machine by offering its own MAC address as destination.
-          Unlike proxy ARP for IPv4, it is not enabled globally, but will only send Neighbour
-          Advertisement messages for addresses in the IPv6 neighbor proxy table,
-          which can also be shown by <command>ip -6 neighbour show proxy</command>.
-          systemd-networkd will control the per-interface `proxy_ndp` switch for each configured
-          interface depending on this option.
-          When unset, the kernel's default will be used.
-        </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6ProxyNDPAddress=</varname></term>
-          <listitem><para>An IPv6 address, for which Neighbour Advertisement messages will be
-          proxied. This option may be specified more than once. systemd-networkd will add the
-          <option>IPv6ProxyNDPAddress=</option> entries to the kernel's IPv6 neighbor proxy table.
-          This option implies <option>IPv6ProxyNDP=yes</option> but has no effect if
-          <option>IPv6ProxyNDP</option> has been set to false. When unset, the kernel's default will be used.
-        </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6SendRA=</varname></term>
-          <listitem><para>Whether to enable or disable Router Advertisement sending on a link. Takes a
-          boolean value. When enabled, prefixes configured in [IPv6Prefix] sections and routes
-          configured in [IPv6RoutePrefix] sections are distributed as defined in the [IPv6SendRA]
-          section. If <varname>DHCPv6PrefixDelegation=</varname> is enabled, then the delegated
-          prefixes are also distributed. See <varname>DHCPv6PrefixDelegation=</varname> setting and the
-          [IPv6SendRA], [IPv6Prefix], [IPv6RoutePrefix], and [DHCPv6PrefixDelegation] sections for more
-          configuration options.</para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DHCPv6PrefixDelegation=</varname></term>
-          <listitem><para>Takes a boolean value. When enabled, requests prefixes using a DHCPv6 client
-          configured on another link. By default, an address within each delegated prefix will be
-          assigned, and the prefixes will be announced through IPv6 Router Advertisement when
-          <varname>IPv6SendRA=</varname> is enabled. Such default settings can be configured in
-          [DHCPv6PrefixDelegation] section. Defaults to disabled.</para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6MTUBytes=</varname></term>
-          <listitem><para>Configures IPv6 maximum transmission unit (MTU).
-          An integer greater than or equal to 1280 bytes. When unset, the kernel's default will be used.
-          </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>BatmanAdvanced=</varname></term>
-          <term><varname>Bond=</varname></term>
-          <term><varname>Bridge=</varname></term>
-          <term><varname>VRF=</varname></term>
-          <listitem>
-            <para>The name of the B.A.T.M.A.N. Advanced, bond, bridge, or VRF interface to add the link
-            to. See
-            <citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPVLAN=</varname></term>
-          <term><varname>IPVTAP=</varname></term>
-          <term><varname>L2TP=</varname></term>
-          <term><varname>MACsec=</varname></term>
-          <term><varname>MACVLAN=</varname></term>
-          <term><varname>MACVTAP=</varname></term>
-          <term><varname>Tunnel=</varname></term>
-          <term><varname>VLAN=</varname></term>
-          <term><varname>VXLAN=</varname></term>
-          <term><varname>Xfrm=</varname></term>
-          <listitem>
-            <para>The name of an IPVLAN, IPVTAP, L2TP, MACsec, MACVLAN, MACVTAP, tunnel, VLAN, VXLAN, or
-            Xfrm to be created on the link. See
-            <citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
-            This option may be specified more than once.</para>
-          </listitem>
-        </varlistentry>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6DuplicateAddressDetection=</varname></term>
+        <listitem>
+          <para>Configures the amount of IPv6 Duplicate Address Detection (DAD) probes to send. When
+          unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6HopLimit=</varname></term>
+        <listitem>
+          <para>Configures IPv6 Hop Limit. For each router that forwards the packet, the hop limit is
+          decremented by 1. When the hop limit field reaches zero, the packet is discarded. When unset,
+          the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv4AcceptLocal=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Accept packets with local source addresses. In combination with
+          suitable routing, this can be used to direct packets between two local interfaces over the
+          wire and have them accepted properly. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv4RouteLocalnet=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the kernel does not consider loopback addresses as martian
+          source or destination while routing. This enables the use of 127.0.0.0/8 for local routing
+          purposes. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv4ProxyARP=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Configures proxy ARP for IPv4. Proxy ARP is the technique in which one
+          host, usually a router, answers ARP requests intended for another machine. By "faking" its
+          identity, the router accepts responsibility for routing packets to the "real" destination.
+          See <ulink url="https://tools.ietf.org/html/rfc1027">RFC 1027</ulink>. When unset, the
+          kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6ProxyNDP=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Configures proxy NDP for IPv6. Proxy NDP (Neighbor Discovery Protocol)
+          is a technique for IPv6 to allow routing of addresses to a different destination when peers
+          expect them to be present on a certain physical link. In this case a router answers Neighbour
+          Advertisement messages intended for another machine by offering its own MAC address as
+          destination. Unlike proxy ARP for IPv4, it is not enabled globally, but will only send
+          Neighbour Advertisement messages for addresses in the IPv6 neighbor proxy table, which can
+          also be shown by <command>ip -6 neighbour show proxy</command>. systemd-networkd will control
+          the per-interface `proxy_ndp` switch for each configured interface depending on this option.
+          When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6ProxyNDPAddress=</varname></term>
+        <listitem>
+          <para>An IPv6 address, for which Neighbour Advertisement messages will be proxied. This
+          option may be specified more than once. systemd-networkd will add the
+          <varname>IPv6ProxyNDPAddress=</varname> entries to the kernel's IPv6 neighbor proxy table.
+          This setting implies <varname>IPv6ProxyNDP=yes</varname> but has no effect if
+          <varname>IPv6ProxyNDP=</varname> has been set to false. When unset, the kernel's default will
+          be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6SendRA=</varname></term>
+        <listitem>
+          <para>Whether to enable or disable Router Advertisement sending on a link. Takes a boolean
+          value. When enabled, prefixes configured in [IPv6Prefix] sections and routes configured in
+          the [IPv6RoutePrefix] sections are distributed as defined in the [IPv6SendRA] section. If
+          <varname>DHCPPrefixDelegation=</varname> is enabled, then the delegated prefixes are also
+          distributed. See <varname>DCHPPrefixDelegation=</varname> setting and the [IPv6SendRA],
+          [IPv6Prefix], [IPv6RoutePrefix], and [DHCPPrefixDelegation] sections for more configuration
+          options.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DHCPPrefixDelegation=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When enabled, requests subnet prefixes on another link via the DHCPv6
+          protocol or via the 6RD option in the DHCPv4 protocol. An address within each delegated prefix will
+          be assigned, and the prefixes will be announced through IPv6 Router Advertisement if
+          <varname>IPv6SendRA=</varname> is enabled. This behaviour can be configured in the
+          [DHCPPrefixDelegation] section. Defaults to disabled.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6MTUBytes=</varname></term>
+        <listitem>
+          <para>Configures IPv6 maximum transmission unit (MTU). An integer greater than or equal to
+          1280 bytes. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>KeepMaster=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When enabled, the current master interface index will not be
+          changed, and <varname>BatmanAdvanced=</varname>, <varname>Bond=</varname>,
+          <varname>Bridge=</varname>, and <varname>VRF=</varname> settings are ignored. This may be
+          useful when a netdev with a master interface is created by another program, e.g.
+          <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+          Defaults to false.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>BatmanAdvanced=</varname></term>
+        <term><varname>Bond=</varname></term>
+        <term><varname>Bridge=</varname></term>
+        <term><varname>VRF=</varname></term>
+        <listitem>
+          <para>The name of the B.A.T.M.A.N. Advanced, bond, bridge, or VRF interface to add the link
+          to. See
+          <citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPoIB=</varname></term>
+        <term><varname>IPVLAN=</varname></term>
+        <term><varname>IPVTAP=</varname></term>
+        <term><varname>MACsec=</varname></term>
+        <term><varname>MACVLAN=</varname></term>
+        <term><varname>MACVTAP=</varname></term>
+        <term><varname>Tunnel=</varname></term>
+        <term><varname>VLAN=</varname></term>
+        <term><varname>VXLAN=</varname></term>
+        <term><varname>Xfrm=</varname></term>
+        <listitem>
+          <para>The name of an IPoIB, IPVLAN, IPVTAP, MACsec, MACVLAN, MACVTAP, tunnel, VLAN,
+          VXLAN, or Xfrm to be created on the link. See
+          <citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          This option may be specified more than once.</para>
+        </listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><varname>ActiveSlave=</varname></term>
         <listitem>
           <para>Takes a boolean. Specifies the new active slave. The <literal>ActiveSlave=</literal>
-          option is only valid for following modes:
-          <literal>active-backup</literal>,
-          <literal>balance-alb</literal> and
-          <literal>balance-tlb</literal>. Defaults to false.
-          </para>
+          option is only valid for following modes: <literal>active-backup</literal>,
+          <literal>balance-alb</literal>, and <literal>balance-tlb</literal>. Defaults to false.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>PrimarySlave=</varname></term>
         <listitem>
-          <para>Takes a boolean. Specifies which slave is the primary device. The specified
-          device will always be the active slave while it is available. Only when the
-          primary is off-line will alternate devices be used.  This is useful when
-          one slave is preferred over another, e.g. when one slave has higher throughput
-          than another. The <literal>PrimarySlave=</literal> option is only valid for
-          following modes:
-          <literal>active-backup</literal>,
-          <literal>balance-alb</literal> and
-          <literal>balance-tlb</literal>. Defaults to false.
-          </para>
+          <para>Takes a boolean. Specifies which slave is the primary device. The specified device will
+          always be the active slave while it is available. Only when the primary is off-line will
+          alternate devices be used.  This is useful when one slave is preferred over another, e.g.
+          when one slave has higher throughput than another. The <literal>PrimarySlave=</literal>
+          option is only valid for following modes: <literal>active-backup</literal>,
+          <literal>balance-alb</literal>, and <literal>balance-tlb</literal>. Defaults to false.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>ConfigureWithoutCarrier=</varname></term>
         <listitem>
-          <para>Takes a boolean. Allows networkd to configure a specific link even if it has no carrier.
-          Defaults to false. If <option>IgnoreCarrierLoss=</option> is not explicitly set, it will
-          default to this value.
-          </para>
+          <para>Takes a boolean. Allows networkd to configure a specific link even if it has no
+          carrier. Defaults to false. If enabled, and the <varname>IgnoreCarrierLoss=</varname> setting
+          is not explicitly set, then it is enabled as well.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>IgnoreCarrierLoss=</varname></term>
         <listitem>
-          <para>Takes a boolean. Allows networkd to retain both the static and dynamic configuration
-          of the interface even if its carrier is lost. When unset, the value specified with
-          <option>ConfigureWithoutCarrier=</option> is used.
+          <para>Takes a boolean or a timespan. When true, <command>systemd-networkd</command> retains
+          both the static and dynamic configuration of the interface even if its carrier is lost. When
+          false, <command>systemd-networkd</command> drops both the static and dynamic configuration of
+          the interface. When a timespan is specified, <command>systemd-networkd</command> waits for
+          the specified timespan, and ignores the carrier loss if the link regain its carrier within
+          the timespan. Setting 0 seconds is equivalent to <literal>no</literal>, and
+          <literal>infinite</literal> is equivalent to <literal>yes</literal>.</para>
+
+          <para>Setting a finite timespan may be useful when e.g. in the following cases:
+          <itemizedlist>
+            <listitem>
+              <para>A wireless interface connecting to a network which has multiple access points with
+              the same SSID.</para>
+            </listitem>
+            <listitem>
+              <para>Enslaving a wireless interface to a bond interface, which may disconnect from the
+              connected access point and causes its carrier to be lost.</para>
+            </listitem>
+            <listitem>
+              <para>The driver of the interface resets when the MTU is changed.</para>
+            </listitem>
+          </itemizedlist>
           </para>
 
-          <para>When <varname>ActivationPolicy=</varname> is set to <literal>always-up</literal>, this
-          is forced to <literal>true</literal>.
-          </para>
+          <para>When <varname>Bond=</varname> is specified to a wireless interface, defaults to 3
+          seconds. When the DHCPv4 client is enabled and <varname>UseMTU=</varname> in the [DHCPv4]
+          section enabled, defaults to 5 seconds. Otherwise, defaults to the value specified with
+          <varname>ConfigureWithoutCarrier=</varname>. When <varname>ActivationPolicy=</varname> is set
+          to <literal>always-up</literal>, this is forced to <literal>yes</literal>, and ignored any
+          user specified values.</para>
         </listitem>
       </varlistentry>
+
       <varlistentry>
         <term><varname>KeepConfiguration=</varname></term>
         <listitem>
@@ -1011,8 +984,10 @@
           lease expires. This is contrary to the DHCP specification, but may be the best choice if,
           e.g., the root filesystem relies on this connection. The setting <literal>dhcp</literal>
           implies <literal>dhcp-on-stop</literal>, and <literal>yes</literal> implies
-          <literal>dhcp</literal> and <literal>static</literal>. Defaults to <literal>no</literal>.
-          </para>
+          <literal>dhcp</literal> and <literal>static</literal>. Defaults to
+          <literal>dhcp-on-stop</literal> when <command>systemd-networkd</command> is running in
+          initrd, <literal>yes</literal> when the root filesystem is a network filesystem, and
+          <literal>no</literal> otherwise.</para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -1021,1125 +996,1347 @@
   <refsect1>
     <title>[Address] Section Options</title>
 
-      <para>An [Address] section accepts the following keys. Specify several [Address]
-      sections to configure several addresses.</para>
+    <para>An [Address] section accepts the following keys. Specify several [Address] sections to
+    configure several addresses.</para>
 
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>Address=</varname></term>
-          <listitem>
-            <para>As in the [Network] section. This key is mandatory. Each [Address] section can contain one
-            <varname>Address=</varname> setting.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Peer=</varname></term>
-          <listitem>
-            <para>The peer address in a point-to-point connection.
-            Accepts the same format as the <varname>Address=</varname>
-            key.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Broadcast=</varname></term>
-          <listitem>
-            <para>Takes an IPv4 address or boolean value. The address must be in the format described in
-            <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
-            If set to true, then the IPv4 broadcast address will be derived from the
-            <varname>Address=</varname> setting. If set to false, then the broadcast address will not
-            be set. Defaults to true, except for wireguard interfaces, where it default to false.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Label=</varname></term>
-          <listitem>
-            <para>An address label.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>PreferredLifetime=</varname></term>
-          <listitem>
-            <para>Allows the default "preferred lifetime" of the address to be overridden. Only three
-            settings are accepted: <literal>forever</literal>, <literal>infinity</literal>, which is the
-            default and means that the address never expires, and <literal>0</literal>, which means that the
-            address is considered immediately "expired" and will not be used, unless explicitly requested. A
-            setting of <option>PreferredLifetime=0</option> is useful for addresses which are added to be
-            used only by a specific application, which is then configured to use them explicitly.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Scope=</varname></term>
-          <listitem>
-            <para>The scope of the address, which can be
-            <literal>global</literal> (valid everywhere on the network, even through a gateway),
-            <literal>link</literal> (only valid on this device, will not traverse a gateway) or
-            <literal>host</literal> (only valid within the device itself, e.g. 127.0.0.1)
-            or an unsigned integer in the range 0…255.
-            Defaults to <literal>global</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>RouteMetric=</varname></term>
-          <listitem>
-            <para>The metric of the prefix route, which is pointing to the subnet of the configured IP
-            address, taking the configured prefix length into account. Takes an unsigned integer in the
-            range 0…4294967295. When unset or set to 0, the kernel's default value is used. This
-            setting will be ignored when <varname>AddPrefixRoute=</varname> is false.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>HomeAddress=</varname></term>
-          <listitem>
-            <para>Takes a boolean. Designates this address the "home address" as defined in
-            <ulink url="https://tools.ietf.org/html/rfc6275">RFC 6275</ulink>.
-            Supported only on IPv6. Defaults to false.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DuplicateAddressDetection=</varname></term>
-          <listitem>
-            <para>Takes one of <literal>ipv4</literal>, <literal>ipv6</literal>,
-            <literal>both</literal>, <literal>none</literal>. When <literal>ipv4</literal>,
-            performs IPv4 Address Conflict Detection. See
-            <ulink url="https://tools.ietf.org/html/rfc5227">RFC 5227</ulink>.
-            When <literal>ipv6</literal>, performs IPv6 Duplicate Address Detection. See
-            <ulink url="https://tools.ietf.org/html/rfc4862">RFC 4862</ulink>.
-            Defaults to <literal>ipv4</literal> for IPv4 link-local addresses, <literal>ipv6</literal> for IPv6
-            addresses, and <literal>none</literal> otherwise.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>ManageTemporaryAddress=</varname></term>
-          <listitem>
-            <para>Takes a boolean. If true the kernel manage temporary addresses created
-            from this one as template on behalf of Privacy Extensions
-            <ulink url="https://tools.ietf.org/html/rfc3041">RFC 3041</ulink>. For this to become
-            active, the use_tempaddr sysctl setting has to be set to a value greater than zero.
-            The given address needs to have a prefix length of 64. This flag allows using privacy
-            extensions in a manually configured network, just like if stateless auto-configuration
-            was active. Defaults to false.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>AddPrefixRoute=</varname></term>
-          <listitem>
-            <para>Takes a boolean. When true, the prefix route for the address is automatically added.
-            Defaults to true.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>AutoJoin=</varname></term>
-          <listitem>
-            <para>Takes a boolean. Joining multicast group on ethernet level via
-            <command>ip maddr</command> command would not work if we have an Ethernet switch that does
-            IGMP snooping since the switch would not replicate multicast packets on  ports that did not
-            have IGMP reports for the multicast addresses. Linux vxlan interfaces created via
-            <command>ip link add vxlan</command> or networkd's netdev kind vxlan have the group option
-            that enables then to do the required join. By extending ip address command with option
-            <literal>autojoin</literal> we can get similar functionality for openvswitch (OVS) vxlan
-            interfaces as well as other tunneling mechanisms that need to receive multicast traffic.
-            Defaults to <literal>no</literal>.</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>Address=</varname></term>
+        <listitem>
+          <para>As in the [Network] section. This setting is mandatory. Each [Address] section can
+          contain one <varname>Address=</varname> setting.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Peer=</varname></term>
+        <listitem>
+          <para>The peer address in a point-to-point connection. Accepts the same format as the
+          <varname>Address=</varname> setting.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Broadcast=</varname></term>
+        <listitem>
+          <para>Takes an IPv4 address or boolean value. The address must be in the format described in
+          <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+          If set to true, then the IPv4 broadcast address will be derived from the
+          <varname>Address=</varname> setting. If set to false, then the broadcast address will not be
+          set. Defaults to true, except for wireguard interfaces, where it default to false.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Label=</varname></term>
+        <listitem>
+          <para>Specifies the label for the IPv4 address. The label must be a 7-bit ASCII string with
+          a length of 1…15 characters. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>PreferredLifetime=</varname></term>
+        <listitem>
+          <para>Allows the default "preferred lifetime" of the address to be overridden. Only three
+          settings are accepted: <literal>forever</literal>, <literal>infinity</literal>, which is the
+          default and means that the address never expires, and <literal>0</literal>, which means that
+          the address is considered immediately "expired" and will not be used, unless explicitly
+          requested. A setting of <option>PreferredLifetime=0</option> is useful for addresses which
+          are added to be used only by a specific application, which is then configured to use them
+          explicitly.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Scope=</varname></term>
+        <listitem>
+          <para>The scope of the address, which can be <literal>global</literal> (valid everywhere on
+          the network, even through a gateway), <literal>link</literal> (only valid on this device,
+          will not traverse a gateway) or <literal>host</literal> (only valid within the device itself,
+          e.g. 127.0.0.1) or an integer in the range 0…255. Defaults to <literal>global</literal>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RouteMetric=</varname></term>
+        <listitem>
+          <para>The metric of the prefix route, which is pointing to the subnet of the configured IP
+          address, taking the configured prefix length into account. Takes an unsigned integer in the
+          range 0…4294967295. When unset or set to 0, the kernel's default value is used. This
+          setting will be ignored when <varname>AddPrefixRoute=</varname> is false.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>HomeAddress=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Designates this address the "home address" as defined in
+          <ulink url="https://tools.ietf.org/html/rfc6275">RFC 6275</ulink>. Supported only on IPv6.
+          Defaults to false.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DuplicateAddressDetection=</varname></term>
+        <listitem>
+          <para>Takes one of <literal>ipv4</literal>, <literal>ipv6</literal>, <literal>both</literal>,
+          or <literal>none</literal>. When <literal>ipv4</literal>, performs IPv4 Address Conflict
+          Detection. See <ulink url="https://tools.ietf.org/html/rfc5227">RFC 5227</ulink>.
+          When <literal>ipv6</literal>, performs IPv6 Duplicate Address Detection. See
+          <ulink url="https://tools.ietf.org/html/rfc4862">RFC 4862</ulink>. Defaults to
+          <literal>ipv4</literal> for IPv4 link-local addresses, <literal>ipv6</literal> for IPv6
+          addresses, and <literal>none</literal> otherwise.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>ManageTemporaryAddress=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If true the kernel manage temporary addresses created from this one as
+          template on behalf of Privacy Extensions
+          <ulink url="https://tools.ietf.org/html/rfc3041">RFC 3041</ulink>. For this to become active,
+          the use_tempaddr sysctl setting has to be set to a value greater than zero. The given address
+          needs to have a prefix length of 64. This flag allows using privacy extensions in a manually
+          configured network, just like if stateless auto-configuration was active. Defaults to false.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>AddPrefixRoute=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the prefix route for the address is automatically added.
+          Defaults to true.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>AutoJoin=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Joining multicast group on ethernet level via
+          <command>ip maddr</command> command would not work if we have an Ethernet switch that does
+          IGMP snooping since the switch would not replicate multicast packets on  ports that did not
+          have IGMP reports for the multicast addresses. Linux vxlan interfaces created via
+          <command>ip link add vxlan</command> or networkd's netdev kind vxlan have the group option
+          that enables them to do the required join. By extending <command>ip address</command> command
+          with option <literal>autojoin</literal> we can get similar functionality for openvswitch (OVS)
+          vxlan interfaces as well as other tunneling mechanisms that need to receive multicast traffic.
+          Defaults to <literal>no</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>NetLabel=</varname><replaceable>label</replaceable></term>
+        <listitem>
+
+          <para>This setting provides a method for integrating static and dynamic network configuration into
+          Linux <ulink url="https://docs.kernel.org/netlabel/index.html">NetLabel</ulink> subsystem rules,
+          used by <ulink url="https://en.wikipedia.org/wiki/Linux_Security_Modules">Linux Security Modules
+          (LSMs)</ulink> for network access control. The label, with suitable LSM rules, can be used to
+          control connectivity of (for example) a service with peers in the local network. At least with
+          SELinux, only the ingress can be controlled but not egress. The benefit of using this setting is
+          that it may be possible to apply interface independent part of NetLabel configuration at very early
+          stage of system boot sequence, at the time when the network interfaces are not available yet, with
+          <citerefentry
+          project='man-pages'><refentrytitle>netlabelctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+          and the per-interface configuration with <command>systemd-networkd</command> once the interfaces
+          appear later. Currently this feature is only implemented for SELinux.</para>
+
+          <para>The option expects a single NetLabel label. The label must conform to lexical restrictions of
+          LSM labels. When an interface is configured with IP addresses, the addresses and subnetwork masks
+          will be appended to the <ulink
+          url="https://github.com/SELinuxProject/selinux-notebook/blob/main/src/network_support.md">NetLabel
+          Fallback Peer Labeling</ulink> rules. They will be removed when the interface is
+          deconfigured. Failures to manage the labels will be ignored.</para>
+
+          <para>Warning: Once labeling is enabled for network traffic, a lot of LSM access control points in
+          Linux networking stack go from dormant to active. Care should be taken to avoid getting into a
+          situation where for example remote connectivity is broken, when the security policy hasn't been
+          updated to consider LSM per-packet access controls and no rules would allow any network
+          traffic. Also note that additional configuration with <citerefentry
+          project='man-pages'><refentrytitle>netlabelctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+          is needed.</para>
+
+          <para>Example:
+          <programlisting>[Address]
+NetLabel=system_u:object_r:localnet_peer_t:s0</programlisting>
+
+          With the example rules applying for interface <literal>eth0</literal>, when the interface is
+          configured with an IPv4 address of 10.0.0.123/8, <command>systemd-networkd</command> performs the
+          equivalent of <command>netlabelctl</command> operation
+
+          <programlisting>netlabelctl unlbl add interface eth0 address:10.0.0.0/8 label:system_u:object_r:localnet_peer_t:s0</programlisting>
+
+          and the reverse operation when the IPv4 address is deconfigured. The configuration can be used with
+          LSM rules; in case of SELinux to allow a SELinux domain to receive data from objects of SELinux
+          <literal>peer</literal> class. For example:
+
+          <programlisting>type localnet_peer_t;
+allow my_server_t localnet_peer_t:peer recv;</programlisting>
+
+          The effect of the above configuration and rules (in absence of other rules as may be the case) is
+          to only allow <literal>my_server_t</literal> (and nothing else) to receive data from local subnet
+          10.0.0.0/8 of interface <literal>eth0</literal>.
+          </para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
   <refsect1>
     <title>[Neighbor] Section Options</title>
-      <para>A [Neighbor] section accepts the following keys. The neighbor section adds a permanent, static
-      entry to the neighbor table (IPv6) or ARP table (IPv4) for the given hardware address on the links
-      matched for the network. Specify several [Neighbor] sections to configure several static neighbors.
-      </para>
 
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>Address=</varname></term>
-          <listitem>
-            <para>The IP address of the neighbor.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>LinkLayerAddress=</varname></term>
-          <listitem>
-            <para>The link layer address (MAC address or IP address) of the neighbor.</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
+    <para>A [Neighbor] section accepts the following keys. The neighbor section adds a permanent,
+    static entry to the neighbor table (IPv6) or ARP table (IPv4) for the given hardware address on the
+    links matched for the network. Specify several [Neighbor] sections to configure several static
+    neighbors.</para>
+
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>Address=</varname></term>
+        <listitem>
+          <para>The IP address of the neighbor.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>LinkLayerAddress=</varname></term>
+        <listitem>
+          <para>The link layer address (MAC address or IP address) of the neighbor.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
-    <refsect1>
+  <refsect1>
     <title>[IPv6AddressLabel] Section Options</title>
 
-      <para>An [IPv6AddressLabel] section accepts the following keys. Specify several [IPv6AddressLabel]
-      sections to configure several address labels. IPv6 address labels are used for address selection. See
-      <ulink url="https://tools.ietf.org/html/rfc3484">RFC 3484</ulink>. Precedence is managed by userspace,
-      and only the label itself is stored in the kernel.</para>
+    <para>An [IPv6AddressLabel] section accepts the following keys. Specify several [IPv6AddressLabel]
+    sections to configure several address labels. IPv6 address labels are used for address selection.
+    See <ulink url="https://tools.ietf.org/html/rfc3484">RFC 3484</ulink>. Precedence is managed by
+    userspace, and only the label itself is stored in the kernel.</para>
 
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>Label=</varname></term>
-          <listitem>
-            <para>The label for the prefix, an unsigned integer in the range 0–4294967294.
-            0xffffffff is reserved. This setting is mandatory.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Prefix=</varname></term>
-          <listitem>
-            <para>IPv6 prefix is an address with a prefix length, separated by a slash <literal>/</literal> character.
-            This key is mandatory. </para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>Label=</varname></term>
+        <listitem>
+          <para>The label for the prefix, an unsigned integer in the range 0…4294967294. 0xffffffff is
+          reserved. This setting is mandatory.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Prefix=</varname></term>
+        <listitem>
+          <para>IPv6 prefix is an address with a prefix length, separated by a slash
+          <literal>/</literal> character. This setting is mandatory. </para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
- <refsect1>
+  <refsect1>
     <title>[RoutingPolicyRule] Section Options</title>
 
-      <para>An [RoutingPolicyRule] section accepts the following keys. Specify several [RoutingPolicyRule]
-      sections to configure several rules.</para>
+    <para>An [RoutingPolicyRule] section accepts the following settings. Specify several
+    [RoutingPolicyRule] sections to configure several rules.</para>
 
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>TypeOfService=</varname></term>
-          <listitem>
-            <para>Takes a number between 0 and 255 that specifies the type of service to match.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>From=</varname></term>
-          <listitem>
-            <para>Specifies the source address prefix to match. Possibly followed by a slash and the prefix length.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>To=</varname></term>
-          <listitem>
-            <para>Specifies the destination address prefix to match. Possibly followed by a slash and the prefix length.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>FirewallMark=</varname></term>
-          <listitem>
-            <para>Specifies the iptables firewall mark value to match (a number between 1 and
-            4294967295). Optionally, the firewall mask (also a number between 1 and 4294967295) can be
-            suffixed with a slash (<literal>/</literal>), e.g., <literal>7/255</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Table=</varname></term>
-          <listitem>
-            <para>Specifies the routing table identifier to lookup if the rule selector matches. Takes one of predefined names
-            <literal>default</literal>, <literal>main</literal>, and <literal>local</literal>, and names defined in <varname>RouteTable=</varname>
-            in <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-            or a number between 1 and 4294967295. Defaults to <literal>main</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Priority=</varname></term>
-          <listitem>
-            <para>Specifies the priority of this rule. <varname>Priority=</varname> is an unsigned
-            integer in the range 0…4294967295. Higher number means lower priority, and rules get
-            processed in order of increasing number. Defaults to unset, and the kernel will pick
-            a value dynamically.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IncomingInterface=</varname></term>
-          <listitem>
-            <para>Specifies incoming device to match. If the interface is loopback, the rule only matches packets originating from this host.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>OutgoingInterface=</varname></term>
-          <listitem>
-            <para>Specifies the outgoing device to match. The outgoing interface is only available for packets originating from local sockets that are bound to a device.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>SourcePort=</varname></term>
-          <listitem>
-            <para>Specifies the source IP port or IP port range match in forwarding information base (FIB) rules.
-            A port range is specified by the lower and upper port separated by a dash. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>DestinationPort=</varname></term>
-          <listitem>
-            <para>Specifies the destination IP port or IP port range match in forwarding information base (FIB) rules.
-            A port range is specified by the lower and upper port separated by a dash. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPProtocol=</varname></term>
-          <listitem>
-            <para>Specifies the IP protocol to match in forwarding information base (FIB) rules. Takes IP protocol name such as <literal>tcp</literal>,
-            <literal>udp</literal> or <literal>sctp</literal>, or IP protocol number such as <literal>6</literal> for <literal>tcp</literal> or
-            <literal>17</literal> for <literal>udp</literal>.
-            Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>InvertRule=</varname></term>
-          <listitem>
-            <para>A boolean. Specifies whether the rule is to be inverted. Defaults to false.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Family=</varname></term>
-          <listitem>
-            <para>Takes a special value <literal>ipv4</literal>, <literal>ipv6</literal>, or
-            <literal>both</literal>. By default, the address family is determined by the address
-            specified in <varname>To=</varname> or <varname>From=</varname>. If neither
-            <varname>To=</varname> nor <varname>From=</varname> are specified, then defaults to
-            <literal>ipv4</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>User=</varname></term>
-          <listitem>
-            <para>Takes a username, a user ID, or a range of user IDs separated by a dash. Defaults to
-            unset.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>SuppressPrefixLength=</varname></term>
-          <listitem>
-            <para>Takes a number <replaceable>N</replaceable> in the range 0…128 and rejects routing
-            decisions that have a prefix length of <replaceable>N</replaceable> or less. Defaults to
-            unset.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Type=</varname></term>
-          <listitem>
-            <para>Specifies Routing Policy Database (RPDB) rule type. Takes one of <literal>blackhole</literal>,
-            <literal>unreachable</literal> or <literal>prohibit</literal>.
-            </para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
-    </refsect1>
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>TypeOfService=</varname></term>
+        <listitem>
+          <para>Takes a number between 0 and 255 that specifies the type of service to match.</para>
+        </listitem>
+      </varlistentry>
 
-    <refsect1>
-      <title>[NextHop] Section Options</title>
-      <para>The [NextHop] section is used to manipulate entries in the kernel's "nexthop" tables.  The
-      [NextHop] section accepts the following keys. Specify several [NextHop] sections to configure several
-      hops.</para>
+      <varlistentry>
+        <term><varname>From=</varname></term>
+        <listitem>
+          <para>Specifies the source address prefix to match. Possibly followed by a slash and the
+          prefix length.</para>
+        </listitem>
+      </varlistentry>
 
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>Id=</varname></term>
-          <listitem>
-            <para>The id of the next hop. Takes an unsigned integer in the range 1…4294967295. If left
-            unspecified, then automatically chosen by kernel.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Gateway=</varname></term>
-          <listitem>
-            <para>As in the [Network] section.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Family=</varname></term>
-          <listitem>
-            <para>Takes one of the special values <literal>ipv4</literal> or <literal>ipv6</literal>.
-            By default, the family is determined by the address specified in
-            <varname>Gateway=</varname>. If <varname>Gateway=</varname> is not specified, then defaults
-            to <literal>ipv4</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>OnLink=</varname></term>
-          <listitem>
-            <para>Takes a boolean. If set to true, the kernel does not have to check if the gateway is
-            reachable directly by the current machine (i.e., attached to the local network), so that we
-            can insert the nexthop in the kernel table without it being complained about. Defaults to
-            <literal>no</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Blackhole=</varname></term>
-          <listitem>
-            <para>Takes a boolean. If enabled, packets to the corresponding routes are discarded
-            silently, and <varname>Gateway=</varname> cannot be specified. Defaults to
-            <literal>no</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Group=</varname></term>
-          <listitem>
-            <para>Takes a whitespace separated list of nexthop IDs. Each ID must be in the range
-            1…4294967295. Optionally, each nexthop ID can take a weight after a colon
-            (<literal><replaceable>id</replaceable><optional>:<replaceable>weight</replaceable></optional></literal>).
-            The weight must be in the range 1…255. If the weight is not specified, then it is assumed
-            that the weight is 1. This setting cannot be specified with <varname>Gateway=</varname>,
-            <varname>Family=</varname>, <varname>Blackhole=</varname>. This setting can be specified
-            multiple times. If an empty string is assigned, then the all previous assignments are
-            cleared. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
+      <varlistentry>
+        <term><varname>To=</varname></term>
+        <listitem>
+          <para>Specifies the destination address prefix to match. Possibly followed by a slash and the
+          prefix length.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>FirewallMark=</varname></term>
+        <listitem>
+          <para>Specifies the iptables firewall mark value to match (a number in the range
+          1…4294967295). Optionally, the firewall mask (also a number between 1…4294967295) can be
+          suffixed with a slash (<literal>/</literal>), e.g., <literal>7/255</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Table=</varname></term>
+        <listitem>
+          <para>Specifies the routing table identifier to look up if the rule selector matches. Takes
+          one of predefined names <literal>default</literal>, <literal>main</literal>, and
+          <literal>local</literal>, and names defined in <varname>RouteTable=</varname> in
+          <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+          or a number between 1 and 4294967295. Defaults to <literal>main</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Priority=</varname></term>
+        <listitem>
+          <para>Specifies the priority of this rule. <varname>Priority=</varname> is an integer in the
+          range 0…4294967295. Higher number means lower priority, and rules get processed in order of
+          increasing number. Defaults to unset, and the kernel will pick a value dynamically.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IncomingInterface=</varname></term>
+        <listitem>
+          <para>Specifies incoming device to match. If the interface is loopback, the rule only matches
+          packets originating from this host.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>OutgoingInterface=</varname></term>
+        <listitem>
+          <para>Specifies the outgoing device to match. The outgoing interface is only available for
+          packets originating from local sockets that are bound to a device.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>SourcePort=</varname></term>
+        <listitem>
+          <para>Specifies the source IP port or IP port range match in forwarding information base
+          (FIB) rules. A port range is specified by the lower and upper port separated by a dash.
+          Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DestinationPort=</varname></term>
+        <listitem>
+          <para>Specifies the destination IP port or IP port range match in forwarding information base
+          (FIB) rules. A port range is specified by the lower and upper port separated by a dash.
+          Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPProtocol=</varname></term>
+        <listitem>
+          <para>Specifies the IP protocol to match in forwarding information base (FIB) rules. Takes IP
+          protocol name such as <literal>tcp</literal>, <literal>udp</literal> or
+          <literal>sctp</literal>, or IP protocol number such as <literal>6</literal> for
+          <literal>tcp</literal> or <literal>17</literal> for <literal>udp</literal>. Defaults to unset.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>InvertRule=</varname></term>
+        <listitem>
+          <para>A boolean. Specifies whether the rule is to be inverted. Defaults to false.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Family=</varname></term>
+        <listitem>
+          <para>Takes a special value <literal>ipv4</literal>, <literal>ipv6</literal>, or
+          <literal>both</literal>. By default, the address family is determined by the address
+          specified in <varname>To=</varname> or <varname>From=</varname>. If neither
+          <varname>To=</varname> nor <varname>From=</varname> are specified, then defaults to
+          <literal>ipv4</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>User=</varname></term>
+        <listitem>
+          <para>Takes a username, a user ID, or a range of user IDs separated by a dash. Defaults to
+          unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>SuppressPrefixLength=</varname></term>
+        <listitem>
+          <para>Takes a number <replaceable>N</replaceable> in the range 0…128 and rejects routing
+          decisions that have a prefix length of <replaceable>N</replaceable> or less. Defaults to
+          unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>SuppressInterfaceGroup=</varname></term>
+        <listitem>
+          <para>Takes an integer in the range 0…2147483647 and rejects routing decisions that have
+          an interface with the same group id. It has the same meaning as
+          <option>suppress_ifgroup</option> in <command>ip rule</command>. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Type=</varname></term>
+        <listitem>
+          <para>Specifies Routing Policy Database (RPDB) rule type. Takes one of
+          <literal>blackhole</literal>, <literal>unreachable</literal> or <literal>prohibit</literal>.
+          </para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>[NextHop] Section Options</title>
+
+    <para>The [NextHop] section is used to manipulate entries in the kernel's "nexthop" tables. The
+    [NextHop] section accepts the following settings. Specify several [NextHop] sections to configure
+    several hops.</para>
+
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>Id=</varname></term>
+        <listitem>
+          <para>The id of the next hop. Takes an integer in the range 1…4294967295. If unspecified,
+          then automatically chosen by kernel.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Gateway=</varname></term>
+        <listitem>
+          <para>As in the [Network] section.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Family=</varname></term>
+        <listitem>
+          <para>Takes one of the special values <literal>ipv4</literal> or <literal>ipv6</literal>.
+          By default, the family is determined by the address specified in
+          <varname>Gateway=</varname>. If <varname>Gateway=</varname> is not specified, then defaults
+          to <literal>ipv4</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>OnLink=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, the kernel does not have to check if the gateway is
+          reachable directly by the current machine (i.e., attached to the local network), so that we
+          can insert the nexthop in the kernel table without it being complained about. Defaults to
+          <literal>no</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Blackhole=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If enabled, packets to the corresponding routes are discarded
+          silently, and <varname>Gateway=</varname> cannot be specified. Defaults to
+          <literal>no</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Group=</varname></term>
+        <listitem>
+          <para>Takes a whitespace separated list of nexthop IDs. Each ID must be in the range
+          1…4294967295. Optionally, each nexthop ID can take a weight after a colon
+          (<literal><replaceable>id</replaceable><optional>:<replaceable>weight</replaceable></optional></literal>).
+          The weight must be in the range 1…255. If the weight is not specified, then it is assumed
+          that the weight is 1. This setting cannot be specified with <varname>Gateway=</varname>,
+          <varname>Family=</varname>, <varname>Blackhole=</varname>. This setting can be specified
+          multiple times. If an empty string is assigned, then the all previous assignments are
+          cleared. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
   <refsect1>
     <title>[Route] Section Options</title>
-      <para>The [Route] section accepts the following keys. Specify several [Route] sections to configure
-      several routes.</para>
 
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>Gateway=</varname></term>
-          <listitem>
-            <para>Takes the gateway address or the special values <literal>_dhcp4</literal> and
-            <literal>_ipv6ra</literal>. If <literal>_dhcp4</literal> or <literal>_ipv6ra</literal> is
-            set, then the gateway address provided by DHCPv4 or IPv6 RA is used.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>GatewayOnLink=</varname></term>
-          <listitem>
-            <para>Takes a boolean. If set to true, the kernel does not have to check if the gateway is
-            reachable directly by the current machine (i.e., attached to the local network), so that we
-            can insert the route in the kernel table without it being complained about. Defaults to
-            <literal>no</literal>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Destination=</varname></term>
-          <listitem>
-            <para>The destination prefix of the route. Possibly
-            followed by a slash and the prefix length. If omitted, a
-            full-length host route is assumed.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Source=</varname></term>
-          <listitem>
-            <para>The source prefix of the route. Possibly followed by
-            a slash and the prefix length. If omitted, a full-length
-            host route is assumed.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Metric=</varname></term>
-          <listitem>
-            <para>The metric of the route. Takes an unsigned integer in the range 0…4294967295.
-            Defaults to unset, and the kernel's default will be used.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPv6Preference=</varname></term>
-          <listitem>
-            <para>Specifies the route preference as defined in <ulink
-            url="https://tools.ietf.org/html/rfc4191">RFC 4191</ulink> for Router Discovery messages.  Which
-            can be one of <literal>low</literal> the route has a lowest priority, <literal>medium</literal>
-            the route has a default priority or <literal>high</literal> the route has a highest priority.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Scope=</varname></term>
-          <listitem>
-            <para>The scope of the IPv4 route, which can be <literal>global</literal>, <literal>site</literal>,
-            <literal>link</literal>, <literal>host</literal>, or
-            <literal>nowhere</literal>:</para>
-            <itemizedlist>
-              <listitem><para><literal>global</literal> means the route can reach
-              hosts more than one hop away.</para></listitem>
+    <para>The [Route] section accepts the following settings. Specify several [Route] sections to
+    configure several routes.</para>
 
-              <listitem><para><literal>site</literal> means an interior route in
-              the local autonomous system.</para></listitem>
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>Gateway=</varname></term>
+        <listitem>
+          <para>Takes the gateway address or the special values <literal>_dhcp4</literal> and
+          <literal>_ipv6ra</literal>. If <literal>_dhcp4</literal> or <literal>_ipv6ra</literal> is
+          set, then the gateway address provided by DHCPv4 or IPv6 RA is used.</para>
+        </listitem>
+      </varlistentry>
 
-              <listitem><para><literal>link</literal> means the route can only
-              reach hosts on the local network (one hop away).</para></listitem>
+      <varlistentry>
+        <term><varname>GatewayOnLink=</varname></term>
+        <listitem>
+          <para>Takes a boolean. If set to true, the kernel does not have to check if the gateway is
+          reachable directly by the current machine (i.e., attached to the local network), so that we
+          can insert the route in the kernel table without it being complained about. Defaults to
+          <literal>no</literal>.</para>
+        </listitem>
+      </varlistentry>
 
-              <listitem><para><literal>host</literal> means the route will not
-              leave the local machine (used for internal addresses like
-              127.0.0.1).</para></listitem>
+      <varlistentry>
+        <term><varname>Destination=</varname></term>
+        <listitem>
+          <para>The destination prefix of the route. Possibly followed by a slash and the prefix
+          length. If omitted, a full-length host route is assumed.</para>
+        </listitem>
+      </varlistentry>
 
-              <listitem><para><literal>nowhere</literal> means the destination
-              doesn't exist.</para></listitem>
-            </itemizedlist>
-            <para>For IPv4 route, defaults to <literal>host</literal> if <varname>Type=</varname> is
-            <literal>local</literal> or <literal>nat</literal>,
-            and <literal>link</literal> if <varname>Type=</varname> is
-            <literal>broadcast</literal>, <literal>multicast</literal>, or <literal>anycast</literal>.
-            In other cases, defaults to <literal>global</literal>.  The value is
-            not used for IPv6.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>PreferredSource=</varname></term>
-          <listitem>
-            <para>The preferred source address of the route. The address
-            must be in the format described in
-            <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Table=</varname></term>
-          <listitem>
-            <para>The table identifier for the route. Takes one of predefined names <literal>default</literal>, <literal>main</literal>,
-            and <literal>local</literal>, and names defined in <varname>RouteTable=</varname> in <citerefentry><refentrytitle>networkd.conf</refentrytitle>
-            <manvolnum>5</manvolnum></citerefentry>, or a number between 1 and 4294967295. The table can be retrieved using
-            <command>ip route show table <replaceable>num</replaceable></command>. If unset and <varname>Type=</varname> is <literal>local</literal>,
-            <literal>broadcast</literal>, <literal>anycast</literal>, or <literal>nat</literal>, then <literal>local</literal> is used.
-            In other cases, defaults to <literal>main</literal>.
+      <varlistentry>
+        <term><varname>Source=</varname></term>
+        <listitem>
+          <para>The source prefix of the route. Possibly followed by a slash and the prefix length. If
+          omitted, a full-length host route is assumed.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Metric=</varname></term>
+        <listitem>
+          <para>The metric of the route. Takes an unsigned integer in the range 0…4294967295. Defaults
+          to unset, and the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>IPv6Preference=</varname></term>
+        <listitem>
+          <para>Specifies the route preference as defined in
+          <ulink url="https://tools.ietf.org/html/rfc4191">RFC 4191</ulink> for Router Discovery
+          messages. Which can be one of <literal>low</literal> the route has a lowest priority,
+          <literal>medium</literal> the route has a default priority or <literal>high</literal> the
+          route has a highest priority.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Scope=</varname></term>
+        <listitem>
+          <para>The scope of the IPv4 route, which can be <literal>global</literal>,
+          <literal>site</literal>, <literal>link</literal>, <literal>host</literal>, or
+          <literal>nowhere</literal>:</para>
+          <itemizedlist>
+            <listitem>
+              <para><literal>global</literal> means the route can reach hosts more than one hop away.
+              </para>
+            </listitem>
+
+            <listitem>
+              <para><literal>site</literal> means an interior route in the local autonomous system.
+              </para>
+            </listitem>
+
+            <listitem>
+              <para><literal>link</literal> means the route can only reach hosts on the local network
+              (one hop away).</para>
+            </listitem>
+
+            <listitem>
+              <para><literal>host</literal> means the route will not leave the local machine (used for
+              internal addresses like 127.0.0.1).</para>
+            </listitem>
+
+            <listitem>
+              <para><literal>nowhere</literal> means the destination doesn't exist.</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>For IPv4 route, defaults to <literal>host</literal> if <varname>Type=</varname> is
+          <literal>local</literal> or <literal>nat</literal>, and <literal>link</literal> if
+          <varname>Type=</varname> is <literal>broadcast</literal>, <literal>multicast</literal>,
+          <literal>anycast</literal>, or <literal>unicast</literal>. In other cases,
+          defaults to <literal>global</literal>. The value is not used for IPv6.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>PreferredSource=</varname></term>
+        <listitem>
+          <para>The preferred source address of the route. The address must be in the format described
+          in
+          <citerefentry project='man-pages'><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
           </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Protocol=</varname></term>
-          <listitem>
-            <para>The protocol identifier for the route. Takes a number between 0 and 255 or the special values
-            <literal>kernel</literal>, <literal>boot</literal>, <literal>static</literal>,
-            <literal>ra</literal> and <literal>dhcp</literal>. Defaults to <literal>static</literal>.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>Type=</varname></term>
-          <listitem>
-            <para>Specifies the type for the route. Takes one of <literal>unicast</literal>,
-            <literal>local</literal>, <literal>broadcast</literal>, <literal>anycast</literal>,
-            <literal>multicast</literal>, <literal>blackhole</literal>, <literal>unreachable</literal>,
-            <literal>prohibit</literal>, <literal>throw</literal>, <literal>nat</literal>, and
-            <literal>xresolve</literal>. If <literal>unicast</literal>, a regular route is defined, i.e. a
-            route indicating the path to take to a destination network address. If <literal>blackhole</literal>, packets
-            to the defined route are discarded silently. If <literal>unreachable</literal>, packets to the defined route
-            are discarded and the ICMP message "Host Unreachable" is generated. If <literal>prohibit</literal>, packets
-            to the defined route are discarded and the ICMP message "Communication Administratively Prohibited" is
-            generated. If <literal>throw</literal>, route lookup in the current routing table will fail and the route
-            selection process will return to Routing Policy Database (RPDB). Defaults to <literal>unicast</literal>.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>InitialCongestionWindow=</varname></term>
-          <listitem>
-            <para>The TCP initial congestion window is used during the start of a TCP connection.
-            During the start of a TCP session, when a client requests a resource, the server's initial
-            congestion window determines how many packets will be sent during the initial burst of data
-            without waiting for acknowledgement. Takes a number between 1 and 1023. Note that 100 is
-            considered an extremely large value for this option. When unset, the kernel's default
-            (typically 10) will be used.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>InitialAdvertisedReceiveWindow=</varname></term>
-          <listitem>
-            <para>The TCP initial advertised receive window is the amount of receive data (in bytes)
-            that can initially be buffered at one time on a connection. The sending host can send only
-            that amount of data before waiting for an acknowledgment and window update from the
-            receiving host. Takes a number between 1 and 1023. Note that 100 is considered an extremely
-            large value for this option. When unset, the kernel's default will be used.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>QuickAck=</varname></term>
-          <listitem>
-            <para>Takes a boolean. When true enables TCP quick ack mode for the route. When unset, the kernel's default will be used.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>FastOpenNoCookie=</varname></term>
-          <listitem>
-            <para>Takes a boolean. When true enables TCP fastopen without a cookie on a per-route basis.
-            When unset, the kernel's default will be used.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>TTLPropagate=</varname></term>
-          <listitem>
-            <para>Takes a boolean. When true enables TTL propagation at Label Switched Path (LSP) egress.
-            When unset, the kernel's default will be used.
-            </para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Table=</varname></term>
+        <listitem>
+          <para>The table identifier for the route. Takes one of predefined names
+          <literal>default</literal>, <literal>main</literal>, and <literal>local</literal>, and names
+          defined in <varname>RouteTable=</varname> in
+          <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+          or a number between 1 and 4294967295. The table can be retrieved using
+          <command>ip route show table <replaceable>num</replaceable></command>. If unset and
+          <varname>Type=</varname> is <literal>local</literal>, <literal>broadcast</literal>,
+          <literal>anycast</literal>, or <literal>nat</literal>, then <literal>local</literal> is used.
+          In other cases, defaults to <literal>main</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Protocol=</varname></term>
+        <listitem>
+          <para>The protocol identifier for the route. Takes a number between 0 and 255 or the special
+          values <literal>kernel</literal>, <literal>boot</literal>, <literal>static</literal>,
+          <literal>ra</literal> and <literal>dhcp</literal>. Defaults to <literal>static</literal>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Type=</varname></term>
+        <listitem>
+          <para>Specifies the type for the route. Takes one of <literal>unicast</literal>,
+          <literal>local</literal>, <literal>broadcast</literal>, <literal>anycast</literal>,
+          <literal>multicast</literal>, <literal>blackhole</literal>, <literal>unreachable</literal>,
+          <literal>prohibit</literal>, <literal>throw</literal>, <literal>nat</literal>, and
+          <literal>xresolve</literal>. If <literal>unicast</literal>, a regular route is defined, i.e.
+          a route indicating the path to take to a destination network address. If
+          <literal>blackhole</literal>, packets to the defined route are discarded silently. If
+          <literal>unreachable</literal>, packets to the defined route are discarded and the ICMP
+          message "Host Unreachable" is generated. If <literal>prohibit</literal>, packets to the
+          defined route are discarded and the ICMP message "Communication Administratively Prohibited"
+          is generated. If <literal>throw</literal>, route lookup in the current routing table will
+          fail and the route selection process will return to Routing Policy Database (RPDB). Defaults
+          to <literal>unicast</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>InitialCongestionWindow=</varname></term>
+        <listitem>
+          <para>The TCP initial congestion window is used during the start of a TCP connection.
+          During the start of a TCP session, when a client requests a resource, the server's initial
+          congestion window determines how many packets will be sent during the initial burst of data
+          without waiting for acknowledgement. Takes a number between 1 and 1023. Note that 100 is
+          considered an extremely large value for this option. When unset, the kernel's default
+          (typically 10) will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>InitialAdvertisedReceiveWindow=</varname></term>
+        <listitem>
+          <para>The TCP initial advertised receive window is the amount of receive data (in bytes)
+          that can initially be buffered at one time on a connection. The sending host can send only
+          that amount of data before waiting for an acknowledgment and window update from the
+          receiving host. Takes a number between 1 and 1023. Note that 100 is considered an extremely
+          large value for this option. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>QuickAck=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the TCP quick ACK mode for the route is enabled. When unset,
+          the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>FastOpenNoCookie=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true enables TCP fastopen without a cookie on a per-route basis.
+          When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>TTLPropagate=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true enables TTL propagation at Label Switched Path (LSP) egress.
+          When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>MTUBytes=</varname></term>
         <listitem>
-          <para>The maximum transmission unit in bytes to set for the
-          route. The usual suffixes K, M, G, are supported and are
-          understood to the base of 1024.</para>
-          <para>Note that if IPv6 is enabled on the interface, and the MTU is chosen
-          below 1280 (the minimum MTU for IPv6) it will automatically be increased to this value.</para>
+          <para>The maximum transmission unit in bytes to set for the route. The usual suffixes K, M,
+          G, are supported and are understood to the base of 1024.</para>
         </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>IPServiceType=</varname></term>
-          <listitem>
-            <para>Takes string; <literal>CS6</literal> or <literal>CS4</literal>. Used to set IP
-            service type to CS6 (network control) or CS4 (Realtime). Defaults to CS6.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>TCPAdvertisedMaximumSegmentSize=</varname></term>
-          <listitem>
-            <para>Specifies the Path MSS (in bytes) hints given on TCP layer. The usual suffixes K, M, G, are
-            supported and are understood to the base of 1024. An unsigned integer in the range 1–4294967294.
-            When unset, the kernel's default will be used.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>MultiPathRoute=<replaceable>address</replaceable>[@<replaceable>name</replaceable>] [<replaceable>weight</replaceable>]</varname></term>
-          <listitem>
-            <para>Configures multipath route. Multipath routing is the technique of using multiple
-            alternative paths through a network. Takes gateway address. Optionally, takes a network
-            interface name or index separated with <literal>@</literal>, and a weight in 1..256 for
-            this multipath route separated with whitespace. This setting can be specified multiple
-            times. If an empty string is assigned, then the all previous assignments are cleared.</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><varname>NextHop=</varname></term>
-          <listitem>
-            <para>Specifies the nexthop id. Takes an unsigned integer in the range 1…4294967295.
-            If set, the corresponding [NextHop] section must be configured. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>TCPAdvertisedMaximumSegmentSize=</varname></term>
+        <listitem>
+          <para>Specifies the Path MSS (in bytes) hints given on TCP layer. The usual suffixes K, M, G,
+          are supported and are understood to the base of 1024. An unsigned integer in the range
+          1…4294967294. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>TCPCongestionControlAlgorithm=</varname></term>
+        <listitem>
+          <para>Specifies the TCP congestion control algorithm for the route. Takes a name of the algorithm,
+          e.g. <literal>bbr</literal>, <literal>dctcp</literal>, or <literal>vegas</literal>. When unset,
+          the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>MultiPathRoute=<replaceable>address</replaceable>[@<replaceable>name</replaceable>] [<replaceable>weight</replaceable>]</varname></term>
+        <listitem>
+          <para>Configures multipath route. Multipath routing is the technique of using multiple
+          alternative paths through a network. Takes gateway address. Optionally, takes a network
+          interface name or index separated with <literal>@</literal>, and a weight in 1..256 for this
+          multipath route separated with whitespace. This setting can be specified multiple times. If
+          an empty string is assigned, then the all previous assignments are cleared.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>NextHop=</varname></term>
+        <listitem>
+          <para>Specifies the nexthop id. Takes an unsigned integer in the range 1…4294967295. If set,
+          the corresponding [NextHop] section must be configured. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
   <refsect1>
     <title>[DHCPv4] Section Options</title>
-      <para>The [DHCPv4] section configures the DHCPv4 client, if it is enabled with the
-      <varname>DHCP=</varname> setting described above:</para>
 
-      <variablelist class='network-directives'>
+    <para>The [DHCPv4] section configures the DHCPv4 client, if it is enabled with the
+    <varname>DHCP=</varname> setting described above:</para>
 
-        <!-- DHCP packet contents -->
+    <variablelist class='network-directives'>
 
-        <varlistentry>
-          <term><varname>SendHostname=</varname></term>
-          <listitem>
-            <para>When true (the default), the machine's hostname (or the value specified with
-            <varname>Hostname=</varname>, described below) will be sent to the DHCP server. Note that the
-            hostname must consist only of 7-bit ASCII lower-case characters and no spaces or dots, and be
-            formatted as a valid DNS domain name. Otherwise, the hostname is not sent even if this option is
-            true.</para>
-          </listitem>
-        </varlistentry>
+      <!-- DHCP packet contents -->
 
-        <varlistentry>
-          <term><varname>Hostname=</varname></term>
-          <listitem>
-            <para>Use this value for the hostname which is sent to the DHCP server, instead of machine's hostname.
-            Note that the specified hostname must consist only of 7-bit ASCII lower-case characters and
-            no spaces or dots, and be formatted as a valid DNS domain name.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>SendHostname=</varname></term>
+        <listitem>
+          <para>When true (the default), the machine's hostname (or the value specified with
+          <varname>Hostname=</varname>, described below) will be sent to the DHCP server. Note that the
+          hostname must consist only of 7-bit ASCII lower-case characters and no spaces or dots, and be
+          formatted as a valid DNS domain name. Otherwise, the hostname is not sent even if this option
+          is true.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>MUDURL=</varname></term>
-          <listitem>
-            <para>When configured, the specified Manufacturer Usage Description (MUD) URL will be sent to the
-            DHCPv4 server. Takes a URL of length up to 255 characters. A superficial verification that the
-            string is a valid URL will be performed. DHCPv4 clients are intended to have at most one MUD URL
-            associated with them. See <ulink url="https://tools.ietf.org/html/rfc8520">RFC 8520</ulink>.
-            </para>
+      <varlistentry>
+        <term><varname>Hostname=</varname></term>
+        <listitem>
+          <para>Use this value for the hostname which is sent to the DHCP server, instead of machine's
+          hostname. Note that the specified hostname must consist only of 7-bit ASCII lower-case
+          characters and no spaces or dots, and be formatted as a valid DNS domain name.</para>
+        </listitem>
+      </varlistentry>
 
-            <para>MUD is an embedded software standard defined by the IETF that allows IoT device makers to
-            advertise device specifications, including the intended communication patterns for their device
-            when it connects to the network. The network can then use this to author a context-specific
-            access policy, so the device functions only within those parameters.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>MUDURL=</varname></term>
+        <listitem>
+          <para>When configured, the specified Manufacturer Usage Description (MUD) URL will be sent
+          to the DHCPv4 server. Takes a URL of length up to 255 characters. A superficial verification
+          that the string is a valid URL will be performed. DHCPv4 clients are intended to have at most
+          one MUD URL associated with them. See
+          <ulink url="https://tools.ietf.org/html/rfc8520">RFC 8520</ulink>.</para>
 
-        <varlistentry>
-          <term><varname>ClientIdentifier=</varname></term>
-          <listitem>
-            <para>The DHCPv4 client identifier to use. Takes one of <option>mac</option>,
-            <option>duid</option> or <option>duid-only</option>. If set to <option>mac</option>, the
-            MAC address of the link is used. If set to <option>duid</option>, an RFC4361-compliant Client
-            ID, which is the combination of IAID and DUID (see below), is used. If set to
-            <option>duid-only</option>, only DUID is used, this may not be RFC compliant, but some setups
-            may require to use this.  Defaults to <option>duid</option>.</para>
-          </listitem>
-        </varlistentry>
+          <para>MUD is an embedded software standard defined by the IETF that allows IoT device makers
+          to advertise device specifications, including the intended communication patterns for their
+          device when it connects to the network. The network can then use this to author a
+          context-specific access policy, so the device functions only within those parameters.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>VendorClassIdentifier=</varname></term>
-          <listitem>
-            <para>The vendor class identifier used to identify vendor
-            type and configuration.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>ClientIdentifier=</varname></term>
+        <listitem>
+          <para>The DHCPv4 client identifier to use. Takes one of <option>mac</option>,
+          <option>duid</option> or <option>duid-only</option>. If set to <option>mac</option>, the
+          MAC address of the link is used. If set to <option>duid</option>, an RFC4361-compliant Client
+          ID, which is the combination of IAID and DUID (see below), is used. If set to
+          <option>duid-only</option>, only DUID is used, this may not be RFC compliant, but some setups
+          may require to use this. Defaults to <option>duid</option>.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>UserClass=</varname></term>
-          <listitem>
-            <para>A DHCPv4 client can use UserClass option to identify the type or category of user or
-            applications it represents. The information contained in this option is a string that represents
-            the user class of which the client is a member. Each class sets an identifying string of
-            information to be used by the DHCP service to classify clients. Takes a whitespace-separated list
-            of strings.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>VendorClassIdentifier=</varname></term>
+        <listitem>
+          <para>The vendor class identifier used to identify vendor type and configuration.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>DUIDType=</varname></term>
-          <listitem>
-            <para>Override the global <varname>DUIDType=</varname> setting for this network. See
-            <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-            for a description of possible values.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UserClass=</varname></term>
+        <listitem>
+          <para>A DHCPv4 client can use UserClass option to identify the type or category of user or
+          applications it represents. The information contained in this option is a string that
+          represents the user class of which the client is a member. Each class sets an identifying
+          string of information to be used by the DHCP service to classify clients. Takes a
+          whitespace-separated list of strings.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>DUIDRawData=</varname></term>
-          <listitem>
-            <para>Override the global <varname>DUIDRawData=</varname> setting for this network. See
-            <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-            for a description of possible values.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>DUIDType=</varname></term>
+        <listitem>
+          <para>Override the global <varname>DUIDType=</varname> setting for this network. See
+          <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          for a description of possible values.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>IAID=</varname></term>
-          <listitem>
-            <para>The DHCP Identity Association Identifier (IAID) for the interface, a 32-bit unsigned
-            integer.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>DUIDRawData=</varname></term>
+        <listitem>
+          <para>Override the global <varname>DUIDRawData=</varname> setting for this network. See
+          <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          for a description of possible values.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>Anonymize=</varname></term>
-          <listitem>
-            <para>Takes a boolean. When true, the options sent to the DHCP server will follow the
-            <ulink url="https://tools.ietf.org/html/rfc7844">RFC 7844</ulink> (Anonymity Profiles for
-            DHCP Clients) to minimize disclosure of identifying information. Defaults to false.</para>
+      <varlistentry>
+        <term><varname>IAID=</varname></term>
+        <listitem>
+          <para>The DHCP Identity Association Identifier (IAID) for the interface, a 32-bit unsigned
+          integer.</para>
+        </listitem>
+      </varlistentry>
 
-            <para>This option should only be set to true when <varname>MACAddressPolicy=</varname> is
-            set to <option>random</option> (see
-            <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
-            </para>
+      <varlistentry>
+        <term><varname>Anonymize=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the options sent to the DHCP server will follow the
+          <ulink url="https://tools.ietf.org/html/rfc7844">RFC 7844</ulink> (Anonymity Profiles for
+          DHCP Clients) to minimize disclosure of identifying information. Defaults to false.</para>
 
-            <para>When true, <varname>SendHostname=</varname>, <varname>ClientIdentifier=</varname>,
-            <varname>VendorClassIdentifier=</varname>, <varname>UserClass=</varname>,
-            <varname>RequestOptions=</varname>, <varname>SendOption=</varname>,
-            <varname>SendVendorOption=</varname>, and <varname>MUDURL=</varname> are ignored.</para>
+          <para>This option should only be set to true when <varname>MACAddressPolicy=</varname> is set
+          to <option>random</option> (see
+          <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+          </para>
 
-            <para>With this option enabled DHCP requests will mimic those generated by Microsoft
-            Windows, in order to reduce the ability to fingerprint and recognize installations. This
-            means DHCP request sizes will grow and lease data will be more comprehensive than normally,
-            though most of the requested data is not actually used.</para>
-          </listitem>
-        </varlistentry>
+          <para>When true, <varname>SendHostname=</varname>, <varname>ClientIdentifier=</varname>,
+          <varname>VendorClassIdentifier=</varname>, <varname>UserClass=</varname>,
+          <varname>RequestOptions=</varname>, <varname>SendOption=</varname>,
+          <varname>SendVendorOption=</varname>, and <varname>MUDURL=</varname> are ignored.</para>
 
-        <varlistentry>
-          <term><varname>RequestOptions=</varname></term>
-          <listitem>
-            <para>Sets request options to be sent to the server in the DHCPv4 request options list. A
-            whitespace-separated list of integers in the range 1…254. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
+          <para>With this option enabled DHCP requests will mimic those generated by Microsoft
+          Windows, in order to reduce the ability to fingerprint and recognize installations. This
+          means DHCP request sizes will grow and lease data will be more comprehensive than normally,
+          though most of the requested data is not actually used.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>SendOption=</varname></term>
-          <listitem>
-            <para>Send an arbitrary raw option in the DHCPv4 request. Takes a DHCP option number, data type
-            and data separated with a colon
-            (<literal><replaceable>option</replaceable>:<replaceable>type</replaceable>:<replaceable>value</replaceable></literal>).
-            The option number must be an integer in the range 1…254. The type takes one of
-            <literal>uint8</literal>, <literal>uint16</literal>, <literal>uint32</literal>,
-            <literal>ipv4address</literal>, or <literal>string</literal>. Special characters in the data
-            string may be escaped using <ulink
-            url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
-            escapes</ulink>. This setting can be specified multiple times. If an empty string is specified,
-            then all options specified earlier are cleared. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>RequestOptions=</varname></term>
+        <listitem>
+          <para>Sets request options to be sent to the server in the DHCPv4 request options list. A
+          whitespace-separated list of integers in the range 1…254. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>SendVendorOption=</varname></term>
-          <listitem>
-            <para>Send an arbitrary vendor option in the DHCPv4 request. Takes a DHCP option number, data
-            type and data separated with a colon
-            (<literal><replaceable>option</replaceable>:<replaceable>type</replaceable>:<replaceable>value</replaceable></literal>).
-            The option number must be an integer in the range 1…254. The type takes one of
-            <literal>uint8</literal>, <literal>uint16</literal>, <literal>uint32</literal>,
-            <literal>ipv4address</literal>, or <literal>string</literal>. Special characters in the data
-            string may be escaped using <ulink
-            url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
-            escapes</ulink>. This setting can be specified multiple times. If an empty string is specified,
-            then all options specified earlier are cleared. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>SendOption=</varname></term>
+        <listitem>
+          <para>Send an arbitrary raw option in the DHCPv4 request. Takes a DHCP option number, data
+          type and data separated with a colon
+          (<literal><replaceable>option</replaceable>:<replaceable>type</replaceable>:<replaceable>value</replaceable></literal>).
+          The option number must be an integer in the range 1…254. The type takes one of
+          <literal>uint8</literal>, <literal>uint16</literal>, <literal>uint32</literal>,
+          <literal>ipv4address</literal>, or <literal>string</literal>. Special characters in the data
+          string may be escaped using
+          <ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
+          escapes</ulink>. This setting can be specified multiple times. If an empty string is
+          specified, then all options specified earlier are cleared. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
 
-        <!-- How to use the DHCP lease -->
+      <varlistentry>
+        <term><varname>SendVendorOption=</varname></term>
+        <listitem>
+          <para>Send an arbitrary vendor option in the DHCPv4 request. Takes a DHCP option number, data
+          type and data separated with a colon
+          (<literal><replaceable>option</replaceable>:<replaceable>type</replaceable>:<replaceable>value</replaceable></literal>).
+          The option number must be an integer in the range 1…254. The type takes one of
+          <literal>uint8</literal>, <literal>uint16</literal>, <literal>uint32</literal>,
+          <literal>ipv4address</literal>, or <literal>string</literal>. Special characters in the data
+          string may be escaped using
+          <ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
+          escapes</ulink>. This setting can be specified multiple times. If an empty string is specified,
+          then all options specified earlier are cleared. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>UseDNS=</varname></term>
-          <listitem>
-            <para>When true (the default), the DNS servers received from the DHCP server will be used.</para>
+      <varlistentry>
+        <term><varname>IPServiceType=</varname></term>
+        <listitem>
+          <para>Takes one of the special values <literal>none</literal>, <literal>CS6</literal>, or
+          <literal>CS4</literal>. When <literal>none</literal> no IP service type is set to the packet
+          sent from the DHCPv4 client. When <literal>CS6</literal> (network control) or
+          <literal>CS4</literal> (realtime), the corresponding service type will be set. Defaults to
+          <literal>CS6</literal>.</para>
+        </listitem>
+      </varlistentry>
 
-            <para>This corresponds to the <option>nameserver</option>
-            option in <citerefentry
-            project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>SocketPriority=</varname></term>
+        <listitem>
+          <para>The Linux socket option <constant>SO_PRIORITY</constant> applied to the raw IP socket used for
+          initial DHCPv4 messages. Unset by default. Usual values range from 0 to 6.
+          More details about <constant>SO_PRIORITY</constant> socket option in
+          <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+          Can be used in conjunction with [VLAN] section <varname>EgressQOSMaps=</varname> setting of .netdev
+          file to set the 802.1Q VLAN ethernet tagged header priority, see
+          <citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>RoutesToDNS=</varname></term>
-          <listitem>
-            <para>When true, the routes to the DNS servers received from the DHCP server will be
-            configured. When <varname>UseDNS=</varname> is disabled, this setting is ignored.
-            Defaults to true.</para>
-          </listitem>
-        </varlistentry>
+      <!-- How to use the DHCP lease -->
 
-        <varlistentry>
-          <term><varname>UseNTP=</varname></term>
-          <listitem>
-            <para>When true (the default), the NTP servers received from the DHCP server will be used by
-            <filename>systemd-timesyncd.service</filename>.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>Label=</varname></term>
+        <listitem>
+          <para>Specifies the label for the IPv4 address received from the DHCP server. The label must
+          be a 7-bit ASCII string with a length of 1…15 characters. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>RoutesToNTP=</varname></term>
-          <listitem>
-            <para>When true, the routes to the NTP servers received from the DHCP server will be
-            configured. When <varname>UseNTP=</varname> is disabled, this setting is ignored.
-            Defaults to true.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseDNS=</varname></term>
+        <listitem>
+          <para>When true (the default), the DNS servers received from the DHCP server will be used.
+          </para>
 
-        <varlistentry>
-          <term><varname>UseSIP=</varname></term>
-          <listitem>
-            <para>When true (the default), the SIP servers received from the DHCP server will be collected
-            and made available to client programs.</para>
-          </listitem>
-        </varlistentry>
+          <para>This corresponds to the <option>nameserver</option> option in
+          <citerefentry project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>UseMTU=</varname></term>
-          <listitem>
-            <para>When true, the interface maximum transmission unit from the DHCP server will be used on the
-            current link. If <varname>MTUBytes=</varname> is set, then this setting is ignored. Defaults to
-            false.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>RoutesToDNS=</varname></term>
+        <listitem>
+          <para>When true, the routes to the DNS servers received from the DHCP server will be
+          configured. When <varname>UseDNS=</varname> is disabled, this setting is ignored. Defaults to
+          true.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>UseHostname=</varname></term>
-          <listitem>
-            <para>When true (the default), the hostname received from the DHCP server will be set as the
-            transient hostname of the system.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseNTP=</varname></term>
+        <listitem>
+          <para>When true (the default), the NTP servers received from the DHCP server will be used by
+          <filename>systemd-timesyncd.service</filename>.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>UseDomains=</varname></term>
-          <listitem>
-            <para>Takes a boolean, or the special value <option>route</option>. When true, the domain name
-            received from the DHCP server will be used as DNS search domain over this link, similar to the
-            effect of the <option>Domains=</option> setting. If set to <option>route</option>, the domain
-            name received from the DHCP server will be used for routing DNS queries only, but not for
-            searching, similar to the effect of the <option>Domains=</option> setting when the argument is
-            prefixed with <literal>~</literal>. Defaults to false.</para>
+      <varlistentry>
+        <term><varname>RoutesToNTP=</varname></term>
+        <listitem>
+          <para>When true, the routes to the NTP servers received from the DHCP server will be
+          configured. When <varname>UseNTP=</varname> is disabled, this setting is ignored. Defaults to
+          true.</para>
+        </listitem>
+      </varlistentry>
 
-            <para>It is recommended to enable this option only on trusted networks, as setting this affects
-            resolution of all hostnames, in particular of single-label names. It is generally safer to use
-            the supplied domain only as routing domain, rather than as search domain, in order to not have it
-            affect local resolution of single-label names.</para>
+      <varlistentry>
+        <term><varname>UseSIP=</varname></term>
+        <listitem>
+          <para>When true (the default), the SIP servers received from the DHCP server will be collected
+          and made available to client programs.</para>
+        </listitem>
+      </varlistentry>
 
-            <para>When set to true, this setting corresponds to the <option>domain</option> option in
-            <citerefentry project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
-            </para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseMTU=</varname></term>
+        <listitem>
+          <para>When true, the interface maximum transmission unit from the DHCP server will be used on
+          the current link. If <varname>MTUBytes=</varname> is set, then this setting is ignored.
+          Defaults to false.</para>
 
-        <varlistentry>
-          <term><varname>UseRoutes=</varname></term>
-          <listitem>
-            <para>When true (the default), the static routes will be requested from the DHCP server and added
-            to the routing table with a metric of 1024, and a scope of <option>global</option>,
-            <option>link</option> or <option>host</option>, depending on the route's destination and
-            gateway. If the destination is on the local host, e.g., 127.x.x.x, or the same as the link's own
-            address, the scope will be set to <option>host</option>. Otherwise if the gateway is null (a
-            direct route), a <option>link</option> scope will be used. For anything else, scope defaults to
-            <option>global</option>.</para>
-          </listitem>
-        </varlistentry>
+          <para>Note, some drivers will reset the interfaces if the MTU is changed. For such
+          interfaces, please try to use <varname>IgnoreCarrierLoss=</varname> with a short timespan,
+          e.g. <literal>3 seconds</literal>.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>RouteMetric=</varname></term>
-          <listitem>
-            <para>Set the routing metric for routes specified by the DHCP server. Takes an unsigned
-            integer in the range 0…4294967295. Defaults to 1024.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseHostname=</varname></term>
+        <listitem>
+          <para>When true (the default), the hostname received from the DHCP server will be set as the
+          transient hostname of the system.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>RouteTable=<replaceable>num</replaceable></varname></term>
-          <listitem>
-            <para>The table identifier for DHCP routes (a number between 1 and 4294967295, or 0 to unset).
-            The table can be retrieved using <command>ip route show table <replaceable>num</replaceable></command>.
-            </para>
-            <para>When used in combination with <varname>VRF=</varname>, the
-            VRF's routing table is used when this parameter is not specified.
-            </para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseDomains=</varname></term>
+        <listitem>
+          <para>Takes a boolean, or the special value <option>route</option>. When true, the domain name
+          received from the DHCP server will be used as DNS search domain over this link, similarly to the
+          effect of the <option>Domains=</option> setting. If set to <option>route</option>, the domain name
+          received from the DHCP server will be used for routing DNS queries only, but not for searching,
+          similarly to the effect of the <option>Domains=</option> setting when the argument is prefixed with
+          <literal>~</literal>. Defaults to false.</para>
 
-        <varlistentry>
-          <term><varname>RouteMTUBytes=</varname></term>
-          <listitem>
-            <para>Specifies the MTU for the DHCP routes. Please see the [Route] section for further details.</para>
-          </listitem>
-        </varlistentry>
+          <para>It is recommended to enable this option only on trusted networks, as setting this
+          affects resolution of all hostnames, in particular of single-label names. It is generally
+          safer to use the supplied domain only as routing domain, rather than as search domain, in
+          order to not have it affect local resolution of single-label names.</para>
 
-        <varlistentry>
-          <term><varname>UseGateway=</varname></term>
-          <listitem>
-            <para>When true, the gateway will be requested from the DHCP server and added to the routing
-            table with a metric of 1024, and a scope of <option>link</option>. When unset, the value specified
-            with <varname>UseRoutes=</varname> is used.</para>
-          </listitem>
-        </varlistentry>
+          <para>When set to true, this setting corresponds to the <option>domain</option> option in
+          <citerefentry project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>UseTimezone=</varname></term>
-          <listitem><para>When true, the timezone received from the DHCP server will be set as timezone of
-          the local system. Defaults to false.</para></listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseRoutes=</varname></term>
+        <listitem>
+          <para>When true (the default), the static routes will be requested from the DHCP server and
+          added to the routing table with a metric of 1024, and a scope of <option>global</option>,
+          <option>link</option> or <option>host</option>, depending on the route's destination and
+          gateway. If the destination is on the local host, e.g., 127.x.x.x, or the same as the link's
+          own address, the scope will be set to <option>host</option>. Otherwise if the gateway is null
+          (a direct route), a <option>link</option> scope will be used. For anything else, scope
+          defaults to <option>global</option>.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>FallbackLeaseLifetimeSec=</varname></term>
-          <listitem>
-            <para>Allows to set DHCPv4 lease lifetime when DHCPv4 server does not send the lease lifetime.
-            Takes one of <literal>forever</literal> or <literal>infinity</literal>. The latter means that the
-            address never expires. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>RouteMetric=</varname></term>
+        <listitem>
+          <para>Set the routing metric for routes specified by the DHCP server (including the prefix
+          route added for the specified prefix). Takes an unsigned integer in the range 0…4294967295.
+          Defaults to 1024.</para>
+        </listitem>
+      </varlistentry>
 
-        <!-- How to communicate with the server -->
+      <varlistentry>
+        <term><varname>RouteTable=<replaceable>num</replaceable></varname></term>
+        <listitem>
+          <para>The table identifier for DHCP routes. Takes one of predefined names
+          <literal>default</literal>, <literal>main</literal>, and <literal>local</literal>, and names
+          defined in <varname>RouteTable=</varname> in
+          <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+          or a number between 1…4294967295.</para>
 
-        <varlistentry>
-          <term><varname>RequestBroadcast=</varname></term>
-          <listitem>
-            <para>Request the server to use broadcast messages before the IP address has been configured.
-            This is necessary for devices that cannot receive RAW packets, or that cannot receive packets at
-            all before an IP address has been configured. On the other hand, this must not be enabled on
-            networks where broadcasts are filtered out.</para>
-          </listitem>
-        </varlistentry>
+          <para>When used in combination with <varname>VRF=</varname>, the VRF's routing table is
+          used when this parameter is not specified.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>MaxAttempts=</varname></term>
-          <listitem>
-            <para>Specifies how many times the DHCPv4 client configuration should be attempted. Takes a
-            number or <literal>infinity</literal>. Defaults to <literal>infinity</literal>. Note that the
-            time between retries is increased exponentially, up to approximately one per minute, so the
-            network will not be overloaded even if this number is high. The default is suitable in most
-            circumstances.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>RouteMTUBytes=</varname></term>
+        <listitem>
+          <para>Specifies the MTU for the DHCP routes. Please see the [Route] section for further
+          details.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>ListenPort=</varname></term>
-          <listitem>
-            <para>Set the port from which the DHCP client packets originate.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>QuickAck=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the TCP quick ACK mode is enabled for the routes configured by
+          the acquired DHCPv4 lease. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>DenyList=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of IPv4 addresses. DHCP offers from servers in the list are
-            rejected. Note that if <varname>AllowList=</varname> is configured then
-            <varname>DenyList=</varname> is ignored.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseGateway=</varname></term>
+        <listitem>
+          <para>When true, the gateway will be requested from the DHCP server and added to the routing
+          table with a metric of 1024, and a scope of <option>link</option>. When unset, the value
+          specified with <varname>UseRoutes=</varname> is used.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>AllowList=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of IPv4 addresses. DHCP offers from servers in the list are
-            accepted.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseTimezone=</varname></term>
+        <listitem><para>When true, the timezone received from the DHCP server will be set as timezone
+        of the local system. Defaults to false.</para></listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>SendRelease=</varname></term>
-          <listitem>
-            <para>When true, the DHCPv4 client sends a DHCP release packet when it stops. Defaults to
-            true.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>Use6RD=</varname></term>
+        <listitem>
+          <para>When true, subnets of the received IPv6 prefix are assigned to downstream interfaces
+          which enables <varname>DHCPPrefixDelegation=</varname>. See also
+          <varname>DHCPPrefixDelegation=</varname> in the [Network] section, the [DHCPPrefixDelegation]
+          section, and <ulink url="https://tools.ietf.org/html/rfc5969">RFC 5969</ulink>. Defaults to
+          false.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>SendDecline=</varname></term>
-          <listitem>
-            <para>A boolean. When <literal>true</literal>, the DHCPv4 client receives the IP address from the
-            DHCP server. After a new IP is received, the DHCPv4 client performs IPv4 Duplicate Address
-            Detection. If duplicate use is detected, the DHCPv4 client rejects the IP by sending a
-            <constant>DHCPDECLINE</constant> packet and tries to obtain an IP address again. See <ulink
-            url="https://tools.ietf.org/html/rfc5227">RFC 5224</ulink>. Defaults to
-            <literal>unset</literal>.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>FallbackLeaseLifetimeSec=</varname></term>
+        <listitem>
+          <para>Allows one to set DHCPv4 lease lifetime when DHCPv4 server does not send the lease
+          lifetime. Takes one of <literal>forever</literal> or <literal>infinity</literal>. If
+          specified, the acquired address never expires. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
 
-      </variablelist>
-   </refsect1>
+      <!-- How to communicate with the server -->
 
-  <refsect1>
-    <title>[DHCPv6] Section Options</title>
-      <para>The [DHCPv6] section configures the DHCPv6 client, if it is enabled with the
-      <varname>DHCP=</varname> setting described above, or invoked by the IPv6 Router Advertisement:</para>
+      <varlistentry>
+        <term><varname>RequestBroadcast=</varname></term>
+        <listitem>
+          <para>Request the server to use broadcast messages before the IP address has been configured.
+          This is necessary for devices that cannot receive RAW packets, or that cannot receive packets
+          at all before an IP address has been configured. On the other hand, this must not be enabled
+          on networks where broadcasts are filtered out.</para>
+        </listitem>
+      </varlistentry>
 
-      <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>MaxAttempts=</varname></term>
+        <listitem>
+          <para>Specifies how many times the DHCPv4 client configuration should be attempted. Takes a
+          number or <literal>infinity</literal>. Defaults to <literal>infinity</literal>. Note that the
+          time between retries is increased exponentially, up to approximately one per minute, so the
+          network will not be overloaded even if this number is high. The default is suitable in most
+          circumstances.</para>
+        </listitem>
+      </varlistentry>
 
-        <!-- DHCP packet contents -->
+      <varlistentry>
+        <term><varname>ListenPort=</varname></term>
+        <listitem>
+          <para>Set the port from which the DHCP client packets originate.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>MUDURL=</varname></term>
-          <term><varname>IAID=</varname></term>
-          <term><varname>DUIDType=</varname></term>
-          <term><varname>DUIDRawData=</varname></term>
-          <term><varname>RequestOptions=</varname></term>
-          <listitem>
-            <para>As in the [DHCPv4] section.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>DenyList=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of IPv4 addresses. Each address can optionally take a
+          prefix length after <literal>/</literal>. DHCP offers from servers in the list are rejected.
+          Note that if <varname>AllowList=</varname> is configured then <varname>DenyList=</varname> is
+          ignored.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>SendOption=</varname></term>
-          <listitem>
-            <para>As in the [DHCPv4] section, however because DHCPv6 uses 16-bit fields to store option
-            numbers, the option number is an integer in the range 1…65536.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>AllowList=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of IPv4 addresses. Each address can optionally take a
+          prefix length after <literal>/</literal>. DHCP offers from servers in the list are accepted.
+          </para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>SendVendorOption=</varname></term>
-          <listitem>
-            <para>Send an arbitrary vendor option in the DHCPv6 request. Takes an enterprise identifier, DHCP
-            option number, data type, and data separated with a colon (<literal><replaceable>enterprise
-            identifier</replaceable>:<replaceable>option</replaceable>:<replaceable>type</replaceable>:<replaceable>value</replaceable></literal>).
-            Enterprise identifier is an unsigned integer in the range 1…4294967294. The option number must be
-            an integer in the range 1…254. Data type takes one of <literal>uint8</literal>,
-            <literal>uint16</literal>, <literal>uint32</literal>, <literal>ipv4address</literal>,
-            <literal>ipv6address</literal>, or <literal>string</literal>. Special characters in the data
-            string may be escaped using <ulink
-            url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
-            escapes</ulink>. This setting can be specified multiple times. If an empty string is specified,
-            then all options specified earlier are cleared. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>SendRelease=</varname></term>
+        <listitem>
+          <para>When true, the DHCPv4 client sends a DHCP release packet when it stops. Defaults to
+          true.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>UserClass=</varname></term>
-          <listitem>
-            <para>A DHCPv6 client can use User Class option to identify the type or category of user or
-            applications it represents. The information contained in this option is a string that represents
-            the user class of which the client is a member. Each class sets an identifying string of
-            information to be used by the DHCP service to classify clients. Special characters in the data
-            string may be escaped using <ulink
-            url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
-            escapes</ulink>. This setting can be specified multiple times. If an empty string is specified,
-            then all options specified earlier are cleared. Takes a whitespace-separated list of
-            strings. Note that currently <constant>NUL</constant> bytes are not allowed.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>SendDecline=</varname></term>
+        <listitem>
+          <para>A boolean. When true, <command>systemd-networkd</command> performs IPv4 Duplicate
+          Address Detection to the acquired address by the DHCPv4 client. If duplicate is detected,
+          the DHCPv4 client rejects the address by sending a <constant>DHCPDECLINE</constant> packet to
+          the DHCP server, and tries to obtain an IP address again. See
+          <ulink url="https://tools.ietf.org/html/rfc5227">RFC 5227</ulink>. Defaults to false.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>VendorClass=</varname></term>
-          <listitem>
-            <para>A DHCPv6 client can use VendorClass option to identify the vendor that manufactured the
-            hardware on which the client is running. The information contained in the data area of this
-            option is contained in one or more opaque fields that identify details of the hardware
-            configuration. Takes a whitespace-separated list of strings.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>PrefixDelegationHint=</varname></term>
-          <listitem>
-            <para>Takes an IPv6 address with prefix length in the same format as the
-            <varname>Address=</varname> in the [Network] section. The DHCPv6 client will include a prefix
-            hint in the DHCPv6 solicitation sent to the server. The prefix length must be in the range
-            1–128. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
-
-        <!-- How to use the DHCP lease -->
-
-        <varlistentry>
-          <term><varname>UseAddress=</varname></term>
-          <listitem>
-            <para>When true (the default), the IP addresses provided by the DHCPv6 server will be
-            assigned.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>UseDNS=</varname></term>
-          <term><varname>UseNTP=</varname></term>
-          <term><varname>UseHostname=</varname></term>
-          <term><varname>UseDomains=</varname></term>
-          <listitem>
-            <para>As in the [DHCPv4] section.</para>
-          </listitem>
-        </varlistentry>
-
-        <!-- How to communicate with the server -->
-
-        <varlistentry>
-          <term><varname>ForceDHCPv6PDOtherInformation=</varname></term>
-          <listitem>
-            <para>Takes a boolean that enforces DHCPv6 stateful mode when the 'Other information' bit is set in
-            Router Advertisement messages. By default setting only the 'O' bit in Router Advertisements
-            makes DHCPv6 request network information in a stateless manner using a two-message Information
-            Request and Information Reply message exchange.
-            <ulink url="https://tools.ietf.org/html/rfc7084">RFC 7084</ulink>, requirement WPD-4, updates
-            this behavior for a Customer Edge router so that stateful DHCPv6 Prefix Delegation is also
-            requested when only the 'O' bit is set in Router Advertisements. This option enables such a CE
-            behavior as it is impossible to automatically distinguish the intention of the 'O' bit otherwise.
-            By default this option is set to false, enable it if no prefixes are delegated when the device
-            should be acting as a CE router.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>WithoutRA=</varname></term>
-          <listitem>
-            <para>Allows DHCPv6 client to start without router advertisements's managed or other address
-            configuration flag. Takes one of <literal>solicit</literal> or
-            <literal>information-request</literal>. Defaults to unset.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><varname>RapidCommit=</varname></term>
-          <listitem>
-            <para>Takes a boolean. The DHCPv6 client can obtain configuration parameters from a DHCPv6 server through
-            a rapid two-message exchange (solicit and reply). When the rapid commit option is enabled by both
-            the DHCPv6 client and the DHCPv6 server, the two-message exchange is used, rather than the default
-            four-message exchange (solicit, advertise, request, and reply). The two-message exchange provides
-            faster client configuration and is beneficial in environments in which networks are under a heavy load.
-            See <ulink url="https://tools.ietf.org/html/rfc3315#section-17.2.1">RFC 3315</ulink> for details.
-            Defaults to true.</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
+      <varlistentry>
+        <term><varname>NetLabel=</varname></term>
+        <listitem>
+          <para>This applies the NetLabel for the addresses received with DHCP, like
+          <varname>NetLabel=</varname> in [Address] section applies it to statically configured
+          addresses. See <varname>NetLabel=</varname> in [Address] section for more details.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
   <refsect1>
-    <title>[DHCPv6PrefixDelegation] Section Options</title>
-    <para>The [DHCPv6PrefixDelegation] section configures delegated prefixes assigned by DHCPv6 server.
-    The settings in this section are used only when <varname>DHCPv6PrefixDelegation=</varname> setting
-    is enabled.</para>
+    <title>[DHCPv6] Section Options</title>
+
+    <para>The [DHCPv6] section configures the DHCPv6 client, if it is enabled with the
+    <varname>DHCP=</varname> setting described above, or invoked by the IPv6 Router Advertisement:
+    </para>
 
     <variablelist class='network-directives'>
+
+      <!-- DHCP packet contents -->
+
+      <varlistentry>
+        <term><varname>MUDURL=</varname></term>
+        <term><varname>IAID=</varname></term>
+        <term><varname>DUIDType=</varname></term>
+        <term><varname>DUIDRawData=</varname></term>
+        <term><varname>RequestOptions=</varname></term>
+        <listitem>
+          <para>As in the [DHCPv4] section.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>SendOption=</varname></term>
+        <listitem>
+          <para>As in the [DHCPv4] section, however because DHCPv6 uses 16-bit fields to store option
+          numbers, the option number is an integer in the range 1…65536.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>SendVendorOption=</varname></term>
+        <listitem>
+          <para>Send an arbitrary vendor option in the DHCPv6 request. Takes an enterprise identifier,
+          DHCP option number, data type, and data separated with a colon
+          (<literal><replaceable>enterprise identifier</replaceable>:<replaceable>option</replaceable>:<replaceable>type</replaceable>:<replaceable>value</replaceable></literal>).
+          Enterprise identifier is an unsigned integer in the range 1…4294967294. The option number
+          must be an integer in the range 1…254. Data type takes one of <literal>uint8</literal>,
+          <literal>uint16</literal>, <literal>uint32</literal>, <literal>ipv4address</literal>,
+          <literal>ipv6address</literal>, or <literal>string</literal>. Special characters in the data
+          string may be escaped using
+          <ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
+          escapes</ulink>. This setting can be specified multiple times. If an empty string is
+          specified, then all options specified earlier are cleared. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>UserClass=</varname></term>
+        <listitem>
+          <para>A DHCPv6 client can use User Class option to identify the type or category of user or
+          applications it represents. The information contained in this option is a string that
+          represents the user class of which the client is a member. Each class sets an identifying
+          string of information to be used by the DHCP service to classify clients. Special characters
+          in the data string may be escaped using
+          <ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
+          escapes</ulink>. This setting can be specified multiple times. If an empty string is
+          specified, then all options specified earlier are cleared. Takes a whitespace-separated list
+          of strings. Note that currently <constant>NUL</constant> bytes are not allowed.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>VendorClass=</varname></term>
+        <listitem>
+          <para>A DHCPv6 client can use VendorClass option to identify the vendor that manufactured the
+          hardware on which the client is running. The information contained in the data area of this
+          option is contained in one or more opaque fields that identify details of the hardware
+          configuration. Takes a whitespace-separated list of strings.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>PrefixDelegationHint=</varname></term>
+        <listitem>
+          <para>Takes an IPv6 address with prefix length in the same format as the
+          <varname>Address=</varname> in the [Network] section. The DHCPv6 client will include a prefix
+          hint in the DHCPv6 solicitation sent to the server. The prefix length must be in the range
+          1…128. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RapidCommit=</varname></term>
+        <listitem>
+          <para>Takes a boolean. The DHCPv6 client can obtain configuration parameters from a DHCPv6 server
+          through a rapid two-message exchange (solicit and reply). When the rapid commit option is set by
+          both the DHCPv6 client and the DHCPv6 server, the two-message exchange is used. Otherwise, the
+          four-message exchange (solicit, advertise, request, and reply) is used. The two-message exchange
+          provides faster client configuration. See
+          <ulink url="https://tools.ietf.org/html/rfc3315#section-17.2.1">RFC 3315</ulink> for details.
+          Defaults to true, and the two-message exchange will be used if the server support it.</para>
+        </listitem>
+      </varlistentry>
+
+      <!-- How to use the DHCP lease -->
+
+      <varlistentry>
+        <term><varname>UseAddress=</varname></term>
+        <listitem>
+          <para>When true (the default), the IP addresses provided by the DHCPv6 server will be
+          assigned.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>UseDelegatedPrefix=</varname></term>
+        <listitem>
+          <para>When true (the default), the client will request the DHCPv6 server to delegate
+          prefixes. If the server provides prefixes to be delegated, then subnets of the prefixes are
+          assigned to the interfaces that have <varname>DHCPPrefixDelegation=yes</varname>.
+          See also the <varname>DHCPPrefixDelegation=</varname> setting in the [Network] section,
+          settings in the [DHCPPrefixDelegation] section, and
+          <ulink url="https://www.rfc-editor.org/rfc/rfc8415.html#section-6.3">RFC 8415</ulink>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>UseDNS=</varname></term>
+        <term><varname>UseNTP=</varname></term>
+        <term><varname>UseHostname=</varname></term>
+        <term><varname>UseDomains=</varname></term>
+        <term><varname>NetLabel=</varname></term>
+        <term><varname>SendRelease=</varname></term>
+        <listitem>
+          <para>As in the [DHCPv4] section.</para>
+        </listitem>
+      </varlistentry>
+
+      <!-- How to communicate with the server -->
+
+      <varlistentry>
+        <term><varname>WithoutRA=</varname></term>
+        <listitem>
+          <para>Allows DHCPv6 client to start without router advertisements's
+          <literal>managed</literal> or <literal>other configuration</literal> flag. Takes one of
+          <literal>no</literal>, <literal>solicit</literal>, or
+          <literal>information-request</literal>. If this is not specified,
+          <literal>solicit</literal> is used when <varname>DHCPPrefixDelegation=</varname> is enabled
+          and <varname>UplinkInterface=:self</varname> is specified in the [DHCPPrefixDelegation]
+          section. Otherwise, defaults to <literal>no</literal>, and the DHCPv6 client will be started
+          when an RA is received. See also the <varname>DHCPv6Client=</varname> setting in the
+          [IPv6AcceptRA] section.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>[DHCPPrefixDelegation] Section Options</title>
+    <para>The [DHCPPrefixDelegation] section configures subnet prefixes of the delegated prefixes
+    acquired by a DHCPv6 client or by a DHCPv4 client through the 6RD option on another interface.
+    The settings in this section are used only when the <varname>DHCPPrefixDelegation=</varname>
+    setting in the [Network] section is enabled.</para>
+
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>UplinkInterface=</varname></term>
+        <listitem>
+          <para>Specifies the name or the index of the uplink interface, or one of the special values
+          <literal>:self</literal> and <literal>:auto</literal>. When <literal>:self</literal>, the
+          interface itself is considered the uplink interface, and
+          <varname>WithoutRA=solicit</varname> is implied if the setting is not explicitly specified.
+          When <literal>:auto</literal>, the first link which acquired prefixes to be delegated from
+          the DHCPv6 or DHCPv4 server is selected. Defaults to <literal>:auto</literal>.</para>
+        </listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><varname>SubnetId=</varname></term>
         <listitem>
@@ -2156,7 +2353,8 @@
         <listitem>
           <para>Takes a boolean. When enabled, and <varname>IPv6SendRA=</varname> in [Network] section
           is enabled, the delegated prefixes are distributed through the IPv6 Router Advertisement.
-          Defaults to yes.</para>
+          This setting will be ignored when the <varname>DHCPPrefixDelegation=</varname> setting is
+          enabled on the upstream interface. Defaults to yes.</para>
         </listitem>
       </varlistentry>
 
@@ -2165,7 +2363,7 @@
         <listitem>
           <para>Takes a boolean. Specifies whether to add an address from the delegated prefixes which
           are received from the WAN interface by the DHCPv6 Prefix Delegation. When true (on LAN
-          interfce), the EUI-64 algorithm will be used by default to form an interface identifier from
+          interface), the EUI-64 algorithm will be used by default to form an interface identifier from
           the delegated prefixes. See also <varname>Token=</varname> setting below. Defaults to yes.
           </para>
         </listitem>
@@ -2175,11 +2373,9 @@
         <term><varname>Token=</varname></term>
         <listitem>
           <para>Specifies an optional address generation mode for assigning an address in each
-          delegated prefix. Takes an IPv6 address. When set, the lower bits of the supplied address is
-          combined with the upper bits of each delegatad prefix received from the WAN interface by the
-          DHCPv6 Prefix Delegation to form a complete address. When <varname>Assign=</varname> is
-          disabled, this setting is ignored. When unset, the EUI-64 algorithm will be used to form
-          addresses. Defaults to unset.</para>
+          delegated prefix. This accepts the same syntax as <varname>Token=</varname> in the
+          [IPv6AcceptRA] section. If <varname>Assign=</varname> is set to false, then this setting will
+          be ignored. Defaults to unset, which means the EUI-64 algorithm will be used.</para>
         </listitem>
       </varlistentry>
 
@@ -2194,7 +2390,17 @@
         <term><varname>RouteMetric=</varname></term>
         <listitem>
           <para>The metric of the route to the delegated prefix subnet. Takes an unsigned integer in
-          the range 0…4294967295. When unset or set to 0, the kernel's default value is used.</para>
+          the range 0…4294967295. When set to 0, the kernel's default value is used. Defaults to 256.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>NetLabel=</varname></term>
+        <listitem>
+          <para>This applies the NetLabel for the addresses received with DHCP, like
+          <varname>NetLabel=</varname> in [Address] section applies it to statically configured
+          addresses. See <varname>NetLabel=</varname> in [Address] section for more details.</para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -2202,136 +2408,284 @@
 
   <refsect1>
     <title>[IPv6AcceptRA] Section Options</title>
-      <para>The [IPv6AcceptRA] section configures the IPv6 Router Advertisement (RA) client, if it is enabled
-      with the <varname>IPv6AcceptRA=</varname> setting described above:</para>
+    <para>The [IPv6AcceptRA] section configures the IPv6 Router Advertisement (RA) client, if it is enabled
+    with the <varname>IPv6AcceptRA=</varname> setting described above:</para>
 
-      <variablelist class='network-directives'>
-        <varlistentry>
-          <term><varname>UseDNS=</varname></term>
-          <listitem>
-            <para>When true (the default), the DNS servers received in the Router Advertisement will be used.</para>
+    <variablelist class='network-directives'>
+      <varlistentry>
+        <term><varname>Token=</varname></term>
+        <listitem>
+          <para>Specifies an optional address generation mode for the Stateless Address
+          Autoconfiguration (SLAAC). The following values are supported:</para>
 
-            <para>This corresponds to the <option>nameserver</option> option in <citerefentry
-            project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
+          <variablelist>
+            <varlistentry>
+              <term><option>eui64</option></term>
+              <listitem>
+                <para>
+                  The EUI-64 algorithm will be used to generate an address for that prefix. Only
+                  supported by Ethernet or InfiniBand interfaces.
+                </para>
+              </listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>static:<replaceable>ADDRESS</replaceable></option></term>
+              <listitem>
+                <para>
+                  An IPv6 address must be specified after a colon (<literal>:</literal>), and the
+                  lower bits of the supplied address are combined with the upper bits of a prefix
+                  received in a Router Advertisement (RA) message to form a complete address. Note
+                  that if multiple prefixes are received in an RA message, or in multiple RA messages,
+                  addresses will be formed from each of them using the supplied address. This mode
+                  implements SLAAC but uses a static interface identifier instead of an identifier
+                  generated by using the EUI-64 algorithm. Because the interface identifier is static,
+                  if Duplicate Address Detection detects that the computed address is a duplicate
+                  (in use by another node on the link), then this mode will fail to provide an address
+                  for that prefix. If an IPv6 address without mode is specified, then
+                  <literal>static</literal> mode is assumed.
+                </para>
+              </listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>prefixstable[:<replaceable>ADDRESS</replaceable>][,<replaceable>UUID</replaceable>]</option></term>
+              <listitem>
+                <para>
+                  The algorithm specified in
+                  <ulink url="https://tools.ietf.org/html/rfc7217">RFC 7217</ulink> will be used to
+                  generate interface identifiers. This mode can optionally take an IPv6 address
+                  separated with a colon (<literal>:</literal>). If an IPv6 address is specified,
+                  then an interface identifier is generated only when a prefix received in an RA
+                  message matches the supplied address.
+                </para>
+                <para>
+                  This mode can also optionally take a non-null UUID in the format which
+                  <function>sd_id128_from_string()</function> accepts, e.g.
+                  <literal>86b123b969ba4b7eb8b3d8605123525a</literal> or
+                  <literal>86b123b9-69ba-4b7e-b8b3-d8605123525a</literal>. If a UUID is specified, the
+                  value is used as the secret key to generate interface identifiers. If not specified,
+                  then an application specific ID generated with the system's machine-ID will be used
+                  as the secret key. See
+                  <citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+                  <citerefentry><refentrytitle>sd_id128_from_string</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+                  and
+                  <citerefentry><refentrytitle>sd_id128_get_machine</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+                </para>
+                <para>
+                  Note that the <literal>prefixstable</literal> algorithm uses both the interface
+                  name and MAC address as input to the hash to compute the interface identifier, so
+                  if either of those are changed the resulting interface identifier (and address)
+                  will be changed, even if the prefix received in the RA message has not been
+                  changed.
+                </para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
 
-        <varlistentry>
-          <term><varname>UseDomains=</varname></term>
-          <listitem>
-            <para>Takes a boolean, or the special value <literal>route</literal>. When true, the domain name
-            received via IPv6 Router Advertisement (RA) will be used as DNS search domain over this link, similar to
-            the effect of the <option>Domains=</option> setting. If set to <literal>route</literal>, the domain name
-            received via IPv6 RA will be used for routing DNS queries only, but not for searching, similar to the
-            effect of the <option>Domains=</option> setting when the argument is prefixed with
-            <literal>~</literal>. Defaults to false.</para>
+          <para>If no address generation mode is specified (which is the default), or a received
+          prefix does not match any of the addresses provided in <literal>prefixstable</literal>
+          mode, then the EUI-64 algorithm will be used for Ethernet or InfiniBand interfaces,
+          otherwise <literal>prefixstable</literal> will be used to form an interface identifier for
+          that prefix.</para>
 
-            <para>It is recommended to enable this option only on trusted networks, as setting this affects resolution
-            of all hostnames, in particular of single-label names. It is generally safer to use the supplied domain
-            only as routing domain, rather than as search domain, in order to not have it affect local resolution of
-            single-label names.</para>
+          <para>This setting can be specified multiple times. If an empty string is assigned, then
+          the all previous assignments are cleared.</para>
 
-            <para>When set to true, this setting corresponds to the <option>domain</option> option in <citerefentry
-            project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
-          </listitem>
-        </varlistentry>
+          <para>Examples:
+          <programlisting>Token=eui64
+Token=::1a:2b:3c:4d
+Token=static:::1a:2b:3c:4d
+Token=prefixstable
+Token=prefixstable:2002:da8:1::</programlisting></para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>RouteTable=<replaceable>num</replaceable></varname></term>
-          <listitem>
-            <para>The table identifier for the routes received in the Router Advertisement
-            (a number between 1 and 4294967295, or 0 to unset).
-            The table can be retrieved using <command>ip route show table <replaceable>num</replaceable></command>.
-            </para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseDNS=</varname></term>
+        <listitem>
+          <para>When true (the default), the DNS servers received in the Router Advertisement will be used.</para>
 
-        <varlistentry>
-          <term><varname>RouteMetric=</varname></term>
-          <listitem>
-            <para>Set the routing metric for the routes received in the Router Advertisement. Takes an
-            unsigned integer in the range 0…4294967295. Defaults to 1024.</para>
-          </listitem>
-        </varlistentry>
+          <para>This corresponds to the <option>nameserver</option> option in <citerefentry
+          project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>UseAutonomousPrefix=</varname></term>
-          <listitem>
-            <para>When true (the default), the autonomous prefix received in the Router Advertisement will be used and take
-            precedence over any statically configured ones.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseDomains=</varname></term>
+        <listitem>
+          <para>Takes a boolean, or the special value <literal>route</literal>. When true, the domain name
+          received via IPv6 Router Advertisement (RA) will be used as DNS search domain over this link,
+          similarly to the effect of the <option>Domains=</option> setting. If set to
+          <literal>route</literal>, the domain name received via IPv6 RA will be used for routing DNS queries
+          only, but not for searching, similarly to the effect of the <option>Domains=</option> setting when
+          the argument is prefixed with <literal>~</literal>. Defaults to false.</para>
 
-        <varlistentry>
-          <term><varname>UseOnLinkPrefix=</varname></term>
-          <listitem>
-            <para>When true (the default), the onlink prefix received in the Router Advertisement will be
-            used and takes precedence over any statically configured ones.</para>
-          </listitem>
-        </varlistentry>
+          <para>It is recommended to enable this option only on trusted networks, as setting this affects resolution
+          of all hostnames, in particular of single-label names. It is generally safer to use the supplied domain
+          only as routing domain, rather than as search domain, in order to not have it affect local resolution of
+          single-label names.</para>
 
-        <varlistentry>
-          <term><varname>RouterDenyList=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of IPv6 router addresses. Any information advertised by
-            the listed router is ignored.</para>
-          </listitem>
-        </varlistentry>
+          <para>When set to true, this setting corresponds to the <option>domain</option> option in <citerefentry
+          project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>RouterAllowList=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of IPv6 router addresses. Only information advertised by
-            the listed router is accepted. Note that if <varname>RouterAllowList=</varname> is
-            configured then <varname>RouterDenyList=</varname> is ignored.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>RouteTable=<replaceable>num</replaceable></varname></term>
+        <listitem>
+          <para>The table identifier for the routes received in the Router Advertisement. Takes one of
+          predefined names <literal>default</literal>, <literal>main</literal>, and <literal>local</literal>,
+          and names defined in <varname>RouteTable=</varname> in
+          <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+          or a number between 1…4294967295.</para>
 
-        <varlistentry>
-          <term><varname>PrefixDenyList=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of IPv6 prefixes. IPv6 prefixes supplied via router
-            advertisements in the list are ignored.</para>
-          </listitem>
-        </varlistentry>
+          <para>When used in combination with <varname>VRF=</varname>, the VRF's routing table is
+          used when this parameter is not specified.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>PrefixAllowList=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of IPv6 prefixes. IPv6 prefixes supplied via router
-            advertisements in the list are allowed. Note that if <varname>PrefixAllowList=</varname> is
-            configured then <varname>PrefixDenyList=</varname> is ignored.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>RouteMetric=</varname></term>
+        <listitem>
+          <para>Set the routing metric for the routes received in the Router Advertisement. Takes an unsigned
+          integer in the range 0…4294967295, or three unsigned integer separated with <literal>:</literal>,
+          in that case the first one is used when the router preference is high, the second is for medium
+          preference, and the last is for low preference
+          (<literal><replaceable>high</replaceable>:<replaceable>medium</replaceable>:<replaceable>low</replaceable></literal>).
+          Defaults to <literal>512:1024:2048</literal>.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>RouteDenyList=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of IPv6 route prefixes. IPv6 route prefixes supplied via
-            router advertisements in the list are ignored.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>QuickAck=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the TCP quick ACK mode is enabled for the routes configured by
+          the received RAs. When unset, the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>RouteAllowList=</varname></term>
-          <listitem>
-            <para>A whitespace-separated list of IPv6 route prefixes. IPv6 route prefixes supplied via
-            router advertisements in the list are allowed. Note that if <varname>RouteAllowList=</varname> is
-            configured then <varname>RouteDenyList=</varname> is ignored.</para>
-          </listitem>
-        </varlistentry>
+      <varlistentry>
+        <term><varname>UseMTU=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the MTU received in the Router Advertisement will be
+          used. Defaults to true.</para>
+        </listitem>
+      </varlistentry>
 
-        <varlistentry>
-          <term><varname>DHCPv6Client=</varname></term>
-          <listitem>
-            <para>Takes a boolean, or the special value <literal>always</literal>. When true or
-            <literal>always</literal>, the DHCPv6 client will be started when the RA has the managed or
-            other information flag. If set to <literal>always</literal>, the DHCPv6 client will also be
-            started in managed mode when neither managed nor other information flag is set in the RA.
-            Defaults to true.</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
+      <varlistentry>
+        <term><varname>UseGateway=</varname></term>
+        <listitem>
+          <para>When true (the default), the router address will be configured as the default gateway.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>UseRoutePrefix=</varname></term>
+        <listitem>
+          <para>When true (the default), the routes corresponding to the route prefixes received in
+          the Router Advertisement will be configured.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>UseAutonomousPrefix=</varname></term>
+        <listitem>
+          <para>When true (the default), the autonomous prefix received in the Router Advertisement will be used and take
+          precedence over any statically configured ones.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>UseOnLinkPrefix=</varname></term>
+        <listitem>
+          <para>When true (the default), the onlink prefix received in the Router Advertisement will be
+          used and takes precedence over any statically configured ones.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RouterDenyList=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of IPv6 router addresses. Each address can optionally
+          take a prefix length after <literal>/</literal>. Any information advertised by the listed
+          router is ignored.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RouterAllowList=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of IPv6 router addresses. Each address can optionally
+          take a prefix length after <literal>/</literal>. Only information advertised by the listed
+          router is accepted. Note that if <varname>RouterAllowList=</varname> is configured then
+          <varname>RouterDenyList=</varname> is ignored.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>PrefixDenyList=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of IPv6 prefixes. Each prefix can optionally take its
+          prefix length after <literal>/</literal>. IPv6 prefixes supplied via router advertisements
+          in the list are ignored.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>PrefixAllowList=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of IPv6 prefixes. Each prefix can optionally take its
+          prefix length after <literal>/</literal>. IPv6 prefixes supplied via router advertisements
+          in the list are allowed. Note that if <varname>PrefixAllowList=</varname> is configured
+          then <varname>PrefixDenyList=</varname> is ignored.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RouteDenyList=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of IPv6 route prefixes. Each prefix can optionally take
+          its prefix length after <literal>/</literal>. IPv6 route prefixes supplied via router
+          advertisements in the list are ignored.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RouteAllowList=</varname></term>
+        <listitem>
+          <para>A whitespace-separated list of IPv6 route prefixes. Each prefix can optionally take
+          its prefix length after <literal>/</literal>. IPv6 route prefixes supplied via router
+          advertisements in the list are allowed. Note that if <varname>RouteAllowList=</varname> is
+          configured then <varname>RouteDenyList=</varname> is ignored.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>DHCPv6Client=</varname></term>
+        <listitem>
+          <para>Takes a boolean, or the special value <literal>always</literal>. When true, the
+          DHCPv6 client will be started in <literal>solicit</literal> mode if the RA has the
+          <literal>managed</literal> flag or <literal>information-request</literal> mode if the RA
+          lacks the <literal>managed</literal> flag but has the
+          <literal>other configuration</literal> flag. If set to <literal>always</literal>, the
+          DHCPv6 client will be started in <literal>solicit</literal> mode when an RA is received,
+          even if neither the <literal>managed</literal> nor the
+          <literal>other configuration</literal> flag is set in the RA. This will be ignored when
+          <varname>WithoutRA=</varname> in the [DHCPv6] section is enabled, or
+          <varname>UplinkInterface=:self</varname> in the [DHCPPrefixDelegation] section is
+          specified. Defaults to true.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>NetLabel=</varname></term>
+        <listitem>
+          <para>This applies the NetLabel for the addresses received with RA, like
+          <varname>NetLabel=</varname> in [Address] section applies it to statically configured
+          addresses. See <varname>NetLabel=</varname> in [Address] section for more details.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
   </refsect1>
 
   <refsect1>
@@ -2344,7 +2698,7 @@
       <varlistentry>
         <term><varname>ServerAddress=</varname></term>
         <listitem><para>Specifies server address for the DHCP server. Takes an IPv4 address with prefix
-        length, for example <literal>192.168.0.1/24</literal>. This setting may be useful when the link on
+        length, for example 192.168.0.1/24. This setting may be useful when the link on
         which the DHCP server is running has multiple static addresses. When unset, one of static addresses
         in the link will be automatically selected. Defaults to unset.</para></listitem>
       </varlistentry>
@@ -2386,12 +2740,12 @@
 
       <varlistentry>
         <term><varname>UplinkInterface=</varname></term>
-        <listitem><para>Specifies name or index of uplink interface, or one of the special values
-        <literal>:none</literal> and <literal>:auto</literal>. When emitting DNS, NTP, or SIP servers
-        are enabled but no servers are specified, the servers configured in the uplink interface will
-        be emitted. When <literal>:auto</literal>, the link which has default gateway with higher
-        priority will be automatically selected. When <literal>:none</literal>, no uplink interface
-        will be selected. Defaults to <literal>:auto</literal>.</para></listitem>
+        <listitem><para>Specifies the name or the index of the uplink interface, or one of the special
+        values <literal>:none</literal> and <literal>:auto</literal>. When emitting DNS, NTP, or SIP
+        servers is enabled but no servers are specified, the servers configured in the uplink interface
+        will be emitted. When <literal>:auto</literal>, the link which has a default gateway with the
+        highest priority will be automatically selected. When <literal>:none</literal>, no uplink
+        interface will be selected. Defaults to <literal>:auto</literal>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -2399,18 +2753,24 @@
         <term><varname>DNS=</varname></term>
 
         <listitem><para><varname>EmitDNS=</varname> takes a boolean. Configures whether the DHCP leases
-        handed out to clients shall contain DNS server information. Defaults to <literal>yes</literal>.  The
-        DNS servers to pass to clients may be configured with the <varname>DNS=</varname> option, which takes
-        a list of IPv4 addresses. If the <varname>EmitDNS=</varname> option is enabled but no servers
-        configured, the servers are automatically propagated from an "uplink" interface that has appropriate
-        servers set. The "uplink" interface is determined by the default route of the system with the highest
-        priority. Note that this information is acquired at the time the lease is handed out, and does not
-        take uplink interfaces into account that acquire DNS server information at a later point. If no
-        suitable uplink interface is found the DNS server data from <filename>/etc/resolv.conf</filename> is
-        used. Also, note that the leases are not refreshed if the uplink network configuration changes. To
-        ensure clients regularly acquire the most current uplink DNS server information, it is thus advisable
-        to shorten the DHCP lease time via <varname>MaxLeaseTimeSec=</varname> described
-        above.</para></listitem>
+        handed out to clients shall contain DNS server information. Defaults to <literal>yes</literal>.
+        The DNS servers to pass to clients may be configured with the <varname>DNS=</varname> option,
+        which takes a list of IPv4 addresses, or special value <literal>_server_address</literal> which
+        will be converted to the address used by the DHCP server.</para>
+
+        <para>If the <varname>EmitDNS=</varname> option is enabled but no servers configured, the
+        servers are automatically propagated from an "uplink" interface that has appropriate servers
+        set. The "uplink" interface is determined by the default route of the system with the highest
+        priority. Note that this information is acquired at the time the lease is handed out, and does
+        not take uplink interfaces into account that acquire DNS server information at a later point.
+        If no suitable uplink interface is found the DNS server data from
+        <filename>/etc/resolv.conf</filename> is used. Also, note that the leases are not refreshed if
+        the uplink network configuration changes. To ensure clients regularly acquire the most current
+        uplink DNS server information, it is thus advisable to shorten the DHCP lease time via
+        <varname>MaxLeaseTimeSec=</varname> described above.</para>
+
+        <para>This setting can be specified multiple times. If an empty string is specified, then all
+        DNS servers specified earlier are cleared.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -2433,12 +2793,16 @@
 
       <varlistentry>
         <term><varname>EmitRouter=</varname></term>
+        <term><varname>Router=</varname></term>
 
-        <listitem><para>Similar to the <varname>EmitDNS=</varname>
-        setting described above, this setting configures whether the
-        DHCP lease should contain the router option. The same syntax,
-        propagation semantics and defaults apply as for
-        <varname>EmitDNS=</varname>.</para></listitem>
+        <listitem><para>The <varname>EmitRouter=</varname> setting takes a boolean value, and configures
+        whether the DHCP lease should contain the router option. The <varname>Router=</varname> setting
+        takes an IPv4 address, and configures the router address to be emitted. When the
+        <varname>Router=</varname> setting is not specified, then the server address will be used for
+        the router option. When the <varname>EmitRouter=</varname> setting is disabled, the
+        <varname>Router=</varname> setting will be ignored. The <varname>EmitRouter=</varname> setting
+        defaults to true, and the <varname>Router=</varname> setting defaults to unset.
+        </para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -2456,6 +2820,42 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>BootServerAddress=</varname></term>
+
+        <listitem>
+          <para>Takes an IPv4 address of the boot server used by e.g. PXE boot systems. When specified, this
+          address is sent in the <option>siaddr</option> field of the DHCP message header. See <ulink
+          url="https://www.rfc-editor.org/rfc/rfc2131.html">RFC 2131</ulink> for more details. Defaults to
+          unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>BootServerName=</varname></term>
+
+        <listitem>
+          <para>Takes a name of the boot server used by e.g. PXE boot systems. When specified, this name is
+          sent in the DHCP option 66 ("TFTP server name"). See <ulink
+          url="https://www.rfc-editor.org/rfc/rfc2132.html">RFC 2132</ulink> for more details. Defaults to
+          unset.</para>
+
+          <para>Note that typically setting one of <varname>BootServerName=</varname> or
+          <varname>BootServerAddress=</varname> is sufficient, but both can be set too, if desired.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>BootFilename=</varname></term>
+
+        <listitem>
+          <para>Takes a path or URL to a file loaded by e.g. a PXE boot loader. When specified, this path is
+          sent in the DHCP option 67 ("Bootfile name"). See <ulink
+          url="https://www.rfc-editor.org/rfc/rfc2132.html">RFC 2132</ulink> for more details. Defaults to
+          unset.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>SendOption=</varname></term>
         <listitem>
           <para>Send a raw option with value via DHCPv4 server. Takes a DHCP option number, data type
@@ -2488,7 +2888,7 @@
           <para>Takes a boolean value. When <literal>yes</literal>, DHCP server socket will be bound
           to its network interface and all socket communication will be restricted to this interface.
           Defaults to <literal>yes</literal>, except if <varname>RelayTarget=</varname> is used (see below),
-          in which case it defaults defaults to <literal>no</literal>.</para>
+          in which case it defaults to <literal>no</literal>.</para>
         </listitem>
       </varlistentry>
       <varlistentry>
@@ -2572,8 +2972,9 @@
       <varlistentry>
         <term><varname>RouterLifetimeSec=</varname></term>
 
-        <listitem><para>Takes a timespan. Configures the IPv6 router lifetime in seconds. When set to
-        0, the host is not acting as a router. Defaults to 30 minutes.</para>
+        <listitem><para>Takes a timespan. Configures the IPv6 router lifetime in seconds. The value must be 0
+        seconds, or between 4 seconds and 9000 seconds. When set to 0, the host is not acting as a router.
+        Defaults to 1800 seconds (30 minutes).</para>
         </listitem>
       </varlistentry>
 
@@ -2591,17 +2992,29 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>UplinkInterface=</varname></term>
+        <listitem><para>Specifies the name or the index of the uplink interface, or one of the special
+        values <literal>:none</literal> and <literal>:auto</literal>. When emitting DNS servers or
+        search domains is enabled but no servers are specified, the servers configured in the uplink
+        interface will be emitted. When <literal>:auto</literal>, the value specified to the same
+        setting in the [DHCPPrefixDelegation] section will be used if
+        <varname>DHCPPrefixDelegation=</varname> is enabled, otherwise the link which has a default
+        gateway with the highest priority will be automatically selected. When <literal>:none</literal>,
+        no uplink interface will be selected. Defaults to <literal>:auto</literal>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>EmitDNS=</varname></term>
         <term><varname>DNS=</varname></term>
 
-        <listitem><para><varname>DNS=</varname> specifies a list of recursive DNS server IPv6 addresses that
-        are distributed via Router Advertisement messages when <varname>EmitDNS=</varname> is
-        true. <varname>DNS=</varname> also takes special value <literal>_link_local</literal>; in that case
-        the IPv6 link local address is distributed. If <varname>DNS=</varname> is empty, DNS servers are read
-        from the [Network] section. If the [Network] section does not contain any DNS servers either, DNS
-        servers from the uplink with the highest priority default route are used. When
-        <varname>EmitDNS=</varname> is false, no DNS server information is sent in Router Advertisement
-        messages. <varname>EmitDNS=</varname> defaults to true.</para></listitem>
+        <listitem><para><varname>DNS=</varname> specifies a list of recursive DNS server IPv6 addresses
+        that are distributed via Router Advertisement messages when <varname>EmitDNS=</varname> is true.
+        <varname>DNS=</varname> also takes special value <literal>_link_local</literal>; in that case
+        the IPv6 link-local address is distributed. If <varname>DNS=</varname> is empty, DNS servers are
+        read from the [Network] section. If the [Network] section does not contain any DNS servers
+        either, DNS servers from the uplink interface specified in <varname>UplinkInterface=</varname>
+        will be used. When <varname>EmitDNS=</varname> is false, no DNS server information is sent in
+        Router Advertisement messages. <varname>EmitDNS=</varname> defaults to true.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -2609,19 +3022,20 @@
         <term><varname>Domains=</varname></term>
 
         <listitem><para>A list of DNS search domains distributed via Router Advertisement messages when
-        <varname>EmitDomains=</varname> is true. If <varname>Domains=</varname> is empty, DNS search domains
-        are read from the [Network] section. If the [Network] section does not contain any DNS search domains
-        either, DNS search domains from the uplink with the highest priority default route are used. When
-        <varname>EmitDomains=</varname> is false, no DNS search domain information is sent in Router
-        Advertisement messages. <varname>EmitDomains=</varname> defaults to true.</para></listitem>
+        <varname>EmitDomains=</varname> is true. If <varname>Domains=</varname> is empty, DNS search
+        domains are read from the [Network] section. If the [Network] section does not contain any DNS
+        search domains either, DNS search domains from the uplink interface specified in
+        <varname>UplinkInterface=</varname> will be used. When <varname>EmitDomains=</varname> is false,
+        no DNS search domain information is sent in Router Advertisement messages.
+        <varname>EmitDomains=</varname> defaults to true.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><varname>DNSLifetimeSec=</varname></term>
 
-        <listitem><para>Lifetime in seconds for the DNS server addresses listed
-        in <varname>DNS=</varname> and search domains listed in
-        <varname>Domains=</varname>.</para></listitem>
+        <listitem><para>Lifetime in seconds for the DNS server addresses listed in
+        <varname>DNS=</varname> and search domains listed in <varname>Domains=</varname>. Defaults to
+        3600 seconds (one hour).</para></listitem>
       </varlistentry>
 
     </variablelist>
@@ -2649,7 +3063,7 @@
       <varlistentry>
         <term><varname>Prefix=</varname></term>
 
-        <listitem><para>The IPv6 prefix that is to be distributed to hosts.  Similarly to configuring static
+        <listitem><para>The IPv6 prefix that is to be distributed to hosts. Similarly to configuring static
         IPv6 addresses, the setting is configured as an IPv6 prefix and its prefix length, separated by a
         <literal>/</literal> character. Use multiple [IPv6Prefix] sections to configure multiple IPv6
         prefixes since prefix lifetimes, address autoconfiguration and onlink status may differ from one
@@ -2660,10 +3074,9 @@
         <term><varname>PreferredLifetimeSec=</varname></term>
         <term><varname>ValidLifetimeSec=</varname></term>
 
-        <listitem><para>Preferred and valid lifetimes for the prefix measured in
-        seconds. <varname>PreferredLifetimeSec=</varname> defaults to 604800
-        seconds (one week) and <varname>ValidLifetimeSec=</varname> defaults
-        to 2592000 seconds (30 days).</para></listitem>
+        <listitem><para>Preferred and valid lifetimes for the prefix measured in seconds.
+        <varname>PreferredLifetimeSec=</varname> defaults to 1800 seconds (30 minutes) and
+        <varname>ValidLifetimeSec=</varname> defaults to 3600 seconds (one hour).</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -2673,6 +3086,16 @@
       </varlistentry>
 
       <varlistentry>
+        <term><varname>Token=</varname></term>
+        <listitem>
+          <para>Specifies an optional address generation mode for assigning an address in each
+          prefix. This accepts the same syntax as <varname>Token=</varname> in the [IPv6AcceptRA]
+          section. If <varname>Assign=</varname> is set to false, then this setting will be ignored.
+          Defaults to unset, which means the EUI-64 algorithm will be used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>RouteMetric=</varname></term>
         <listitem>
           <para>The metric of the prefix route. Takes an unsigned integer in the range 0…4294967295.
@@ -2695,18 +3118,17 @@
       <varlistentry>
         <term><varname>Route=</varname></term>
 
-        <listitem><para>The IPv6 route that is to be distributed to hosts.  Similarly to configuring static
+        <listitem><para>The IPv6 route that is to be distributed to hosts. Similarly to configuring static
         IPv6 routes, the setting is configured as an IPv6 prefix routes and its prefix route length,
-        separated by a <literal>/</literal> character. Use multiple [IPv6PrefixRoutes] sections to configure
+        separated by a <literal>/</literal> character. Use multiple [IPv6RoutePrefix] sections to configure
         multiple IPv6 prefix routes.</para></listitem>
       </varlistentry>
 
       <varlistentry>
         <term><varname>LifetimeSec=</varname></term>
 
-        <listitem><para>Lifetime for the route prefix measured in
-        seconds. <varname>LifetimeSec=</varname> defaults to 604800 seconds (one week).
-        </para></listitem>
+        <listitem><para>Lifetime for the route prefix measured in seconds.
+        <varname>LifetimeSec=</varname> defaults to 3600 seconds (one hour).</para></listitem>
       </varlistentry>
 
     </variablelist>
@@ -2768,6 +3190,15 @@
           </listitem>
         </varlistentry>
         <varlistentry>
+          <term><varname>Isolated=</varname></term>
+          <listitem>
+            <para>Takes a boolean. Configures whether this port is isolated or not. Within a bridge,
+            isolated ports can only communicate with non-isolated ports. When set to true, this port can only
+            communicate with other ports whose Isolated setting is false.  When set to false, this port
+            can communicate with any other ports. When unset, the kernel's default will be used.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
           <term><varname>UseBPDU=</varname></term>
           <listitem>
             <para>Takes a boolean. Configures whether STP Bridge Protocol Data Units will be
@@ -2950,7 +3381,27 @@
           <term><varname>SamplePoint=</varname></term>
           <listitem>
             <para>Optional sample point in percent with one decimal (e.g. <literal>75%</literal>,
-            <literal>87.5%</literal>) or permille (e.g. <literal>875‰</literal>).</para>
+            <literal>87.5%</literal>) or permille (e.g. <literal>875‰</literal>). This will be ignored when
+            <varname>BitRate=</varname> is unspecified.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><varname>TimeQuantaNSec=</varname></term>
+          <term><varname>PropagationSegment=</varname></term>
+          <term><varname>PhaseBufferSegment1=</varname></term>
+          <term><varname>PhaseBufferSegment2=</varname></term>
+          <term><varname>SyncJumpWidth=</varname></term>
+          <listitem>
+            <para>Specifies the time quanta, propagation segment, phase buffer segment 1 and 2, and the
+            synchronization jump width, which allow one to define the CAN bit-timing in a hardware
+            independent format as proposed by the Bosch CAN 2.0 Specification.
+            <varname>TimeQuantaNSec=</varname> takes a timespan in nanoseconds.
+            <varname>PropagationSegment=</varname>, <varname>PhaseBufferSegment1=</varname>,
+            <varname>PhaseBufferSegment2=</varname>, and <varname>SyncJumpWidth=</varname> take number
+            of time quantum specified in <varname>TimeQuantaNSec=</varname> and must be an unsigned
+            integer in the range 0…4294967295. These settings except for
+            <varname>SyncJumpWidth=</varname> will be ignored when <varname>BitRate=</varname> is
+            specified.</para>
           </listitem>
         </varlistentry>
         <varlistentry>
@@ -2962,11 +3413,24 @@
           </listitem>
         </varlistentry>
         <varlistentry>
+          <term><varname>DataTimeQuantaNSec=</varname></term>
+          <term><varname>DataPropagationSegment=</varname></term>
+          <term><varname>DataPhaseBufferSegment1=</varname></term>
+          <term><varname>DataPhaseBufferSegment2=</varname></term>
+          <term><varname>DataSyncJumpWidth=</varname></term>
+          <listitem>
+            <para>Specifies the time quanta, propagation segment, phase buffer segment 1 and 2, and the
+            synchronization jump width for the data phase, if CAN-FD is used. These settings are
+            analogous to the <varname>TimeQuantaNSec=</varname> or related settings.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
           <term><varname>FDMode=</varname></term>
           <listitem>
             <para>Takes a boolean. When <literal>yes</literal>, CAN-FD mode is enabled for the interface.
             Note, that a bitrate and optional sample point should also be set for the CAN-FD data phase using
-            the <varname>DataBitRate=</varname> and <varname>DataSamplePoint=</varname> keys.</para>
+            the <varname>DataBitRate=</varname> and <varname>DataSamplePoint=</varname> keys, or
+            <varname>DataTimeQuanta=</varname> and related settings.</para>
           </listitem>
         </varlistentry>
         <varlistentry>
@@ -2989,8 +3453,10 @@
         <varlistentry>
           <term><varname>Termination=</varname></term>
           <listitem>
-            <para>Takes a boolean. When <literal>yes</literal>, the termination resistor will be selected for
-            the bias network. When unset, the kernel's default will be used.</para>
+            <para>Takes a boolean or a termination resistor value in ohm in the range 0…65535. When
+            <literal>yes</literal>, the termination resistor is set to 120 ohm. When
+            <literal>no</literal> or <literal>0</literal> is set, the termination resistor is disabled.
+            When unset, the kernel's default will be used.</para>
           </listitem>
         </varlistentry>
         <varlistentry>
@@ -3020,6 +3486,45 @@
             </para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><varname>Loopback=</varname></term>
+          <listitem>
+            <para>Takes a boolean. When <literal>yes</literal>, loopback mode is enabled. When the
+            loopback mode is enabled, the interface treats messages transmitted by itself as received
+            messages. The loopback mode is important to debug CAN networks. When unset, the kernel's
+            default will be used.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><varname>OneShot=</varname></term>
+          <listitem>
+            <para>Takes a boolean. When <literal>yes</literal>, one-shot mode is enabled. When unset,
+            the kernel's default will be used.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><varname>PresumeAck=</varname></term>
+          <listitem>
+            <para>Takes a boolean. When <literal>yes</literal>, the interface will ignore missing CAN
+            ACKs. When unset, the kernel's default will be used.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><varname>ClassicDataLengthCode=</varname></term>
+          <listitem>
+            <para>Takes a boolean. When <literal>yes</literal>, the interface will handle the 4bit data
+            length code (DLC). When unset, the kernel's default will be used.</para>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>[IPoIB] Section Options</title>
+      <para>The [IPoIB] section manages the IP over Infiniband and accepts the following keys:</para>
+      <variablelist class='network-directives'>
+        <xi:include href="systemd.netdev.xml" xpointer="ipoib_mode" />
+        <xi:include href="systemd.netdev.xml" xpointer="ipoib_umcast" />
       </variablelist>
   </refsect1>
 
@@ -3071,7 +3576,7 @@
         <term><varname>PacketLimit=</varname></term>
         <listitem>
           <para>Specifies the maximum number of packets the qdisc may hold queued at a time.
-          An unsigned integer in the range 0–4294967294. Defaults to 1000.</para>
+          An unsigned integer in the range 0…4294967294. Defaults to 1000.</para>
         </listitem>
       </varlistentry>
 
@@ -3220,7 +3725,7 @@
         <term><varname>PacketLimit=</varname></term>
         <listitem>
           <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached,
-          incoming packets are dropped. An unsigned integer in the range 0–4294967294. Defaults to unset and
+          incoming packets are dropped. An unsigned integer in the range 0…4294967294. Defaults to unset and
           kernel's default is used.</para>
         </listitem>
       </varlistentry>
@@ -3282,7 +3787,7 @@
           <para>Specifies the hard limit on the number of packets in the FIFO queue. The size limit prevents
           overflow in case the kernel is unable to dequeue packets as quickly as it receives them. When this
           limit is reached, incoming packets are dropped. An unsigned integer in the range
-          0–4294967294. Defaults to unset and kernel's default is used.</para>
+          0…4294967294. Defaults to unset and kernel's default is used.</para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -3326,14 +3831,6 @@
       <xi:include href="tc.xml" xpointer="qdisc-handle" />
 
       <varlistentry>
-        <term><varname>OverheadBytes=</varname></term>
-        <listitem>
-          <para>Specifies that bytes to be addeded to the size of each packet. Bytes may be negative. Takes
-          an integer in the range from -64 to 256. Defaults to unset and kernel's default is used.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
         <term><varname>Bandwidth=</varname></term>
         <listitem>
           <para>Specifies the shaper bandwidth. When suffixed with K, M, or G, the specified size is
@@ -3341,6 +3838,251 @@
           unset and kernel's default is used.</para>
         </listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>AutoRateIngress=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. Enables automatic capacity estimation based on traffic arriving
+          at this qdisc. This is most likely to be useful with cellular links, which tend to change
+          quality randomly. If this setting is enabled, the <varname>Bandwidth=</varname> setting is
+          used as an initial estimate. Defaults to unset, and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>OverheadBytes=</varname></term>
+        <listitem>
+          <para>Specifies that bytes to be addeded to the size of each packet. Bytes may be negative.
+          Takes an integer in the range -64…256. Defaults to unset and kernel's default is used.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>MPUBytes=</varname></term>
+        <listitem>
+          <para>Rounds each packet (including overhead) up to the specified bytes. Takes an integer in
+          the range 1…256. Defaults to unset and kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>CompensationMode=</varname></term>
+        <listitem>
+          <para>Takes one of <literal>none</literal>, <literal>atm</literal>, or <literal>ptm</literal>.
+          Specifies the compensation mode for overhead calculation. When <literal>none</literal>, no
+          compensation is taken into account. When <literal>atm</literal>, enables the compensation for
+          ATM cell framing, which is normally found on ADSL links. When <literal>ptm</literal>, enables
+          the compensation for PTM encoding, which is normally found on VDSL2 links and uses a 64b/65b
+          encoding scheme. Defaults to unset and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>UseRawPacketSize=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When true, the packet size reported by the Linux kernel will be
+          used, instead of the underlying IP packet size. Defaults to unset, and the kernel's default
+          is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>FlowIsolationMode=</varname></term>
+        <listitem>
+          <para>CAKE places packets from different flows into different queues, then packets from each
+          queue are delivered fairly. This specifies whether the fairness is based on source address,
+          destination address, individual flows, or any combination of those. The available values are:
+          </para>
+
+          <variablelist>
+            <varlistentry>
+              <term><option>none</option></term>
+              <listitem><para>
+                The flow isolation is disabled, and all traffic passes through a single queue.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>src-host</option></term>
+              <listitem><para>
+                Flows are defined only by source address. Equivalent to the <literal>srchost</literal>
+                option for <command>tc qdisc</command> command. See also
+                <citerefentry project='man-pages'><refentrytitle>tc-cake</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>dst-host</option></term>
+              <listitem><para>
+                Flows are defined only by destination address. Equivalent to the
+                <literal>dsthost</literal> option for <command>tc qdisc</command> command. See also
+                <citerefentry project='man-pages'><refentrytitle>tc-cake</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>hosts</option></term>
+              <listitem><para>
+                Flows are defined by source-destination host pairs. Equivalent to the same option for
+                <command>tc qdisc</command> command. See also
+                <citerefentry project='man-pages'><refentrytitle>tc-cake</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>flows</option></term>
+              <listitem><para>
+                Flows are defined by the entire 5-tuple of source address, destination address,
+                transport protocol, source port and destination port. Equivalent to the same option for
+                <command>tc qdisc</command> command. See also
+                <citerefentry project='man-pages'><refentrytitle>tc-cake</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>dual-src-host</option></term>
+              <listitem><para>
+                Flows are defined by the 5-tuple (see <literal>flows</literal> in the above), and
+                fairness is applied first over source addresses, then over individual flows. Equivalent
+                to the <literal>dual-srchost</literal> option for <command>tc qdisc</command> command.
+                See also
+                <citerefentry project='man-pages'><refentrytitle>tc-cake</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>dual-dst-host</option></term>
+              <listitem><para>
+                Flows are defined by the 5-tuple (see <literal>flows</literal> in the above), and
+                fairness is applied first over destination addresses, then over individual flows.
+                Equivalent to the <literal>dual-dsthost</literal> option for
+                <command>tc qdisc</command> command. See also
+                <citerefentry project='man-pages'><refentrytitle>tc-cake</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>triple</option></term>
+              <listitem><para>
+                Flows are defined by the 5-tuple (see <literal>flows</literal>), and fairness is
+                applied over source and destination addresses, and also over individual flows.
+                Equivalent to the <literal>triple-isolate</literal> option for
+                <command>tc qdisc</command> command. See also
+                <citerefentry project='man-pages'><refentrytitle>tc-cake</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+              </para></listitem>
+            </varlistentry>
+          </variablelist>
+
+          <para>Defaults to unset and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>NAT=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When true, CAKE performs a NAT lookup before applying
+          flow-isolation rules, to determine the true addresses and port numbers of the packet, to
+          improve fairness between hosts inside the NAT. This has no practical effect when
+          <varname>FlowIsolationMode=</varname> is <literal>none</literal> or <literal>flows</literal>,
+          or if NAT is performed on a different host. Defaults to unset, and the kernel's default is
+          used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>PriorityQueueingPreset=</varname></term>
+        <listitem>
+          <para>CAKE divides traffic into <literal>tins</literal>, and each tin has its own independent
+          set of flow-isolation queues, bandwidth threshold, and priority. This specifies the preset of
+          tin profiles. The available values are:</para>
+
+          <variablelist>
+            <varlistentry>
+              <term><option>besteffort</option></term>
+              <listitem><para>
+                Disables priority queueing by placing all traffic in one tin.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>precedence</option></term>
+              <listitem><para>
+                Enables priority queueing based on the legacy interpretation of TOS
+                <literal>Precedence</literal> field. Use of this preset on the modern Internet is
+                firmly discouraged.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>diffserv8</option></term>
+              <listitem><para>
+                Enables priority queueing based on the Differentiated Service
+                (<literal>DiffServ</literal>) field with eight tins: Background Traffic, High
+                Throughput, Best Effort, Video Streaming, Low Latency Transactions, Interactive Shell,
+                Minimum Latency, and Network Control.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>diffserv4</option></term>
+              <listitem><para>
+                Enables priority queueing based on the Differentiated Service
+                (<literal>DiffServ</literal>) field with four tins: Background Traffic, Best Effort,
+                Streaming Media, and Latency Sensitive.
+              </para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>diffserv3</option></term>
+              <listitem><para>
+                Enables priority queueing based on the Differentiated Service
+                (<literal>DiffServ</literal>) field with three tins: Background Traffic, Best Effort,
+                and Latency Sensitive.
+              </para></listitem>
+            </varlistentry>
+          </variablelist>
+
+          <para>Defaults to unset, and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>FirewallMark=</varname></term>
+        <listitem>
+          <para>Takes an integer in the range 1…4294967295. When specified, firewall-mark-based
+          overriding of CAKE's tin selection is enabled. Defaults to unset, and the kernel's default is
+          used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Wash=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When true, CAKE clears the DSCP fields, except for ECN bits, of
+          any packet passing through CAKE. Defaults to unset, and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>SplitGSO=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When true, CAKE will split General Segmentation Offload (GSO)
+          super-packets into their on-the-wire components and dequeue them individually. Defaults to
+          unset, and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RTTSec=</varname></term>
+        <listitem>
+          <para>Specifies the RTT for the filter. Takes a timespan. Typical values are e.g. 100us for
+          extremely high-performance 10GigE+ networks like datacentre, 1ms for non-WiFi LAN connections,
+          100ms for typical internet connections. Defaults to unset, and the kernel's default will be used.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>AckFilter=</varname></term>
+        <listitem>
+          <para>Takes a boolean value, or special value <literal>aggressive</literal>. If enabled, ACKs in
+          each flow are queued and redundant ACKs to the upstream are dropped. If yes, the filter will always
+          keep at least two redundant ACKs in the queue, while in <literal>aggressive</literal> mode, it will
+          filter down to a single ACK. This may improve download throughput on links with very asymmetrical
+          rate limits. Defaults to unset, and the kernel's default will be used.</para>
+        </listitem>
+      </varlistentry>
+
     </variablelist>
   </refsect1>
 
@@ -3357,7 +4099,7 @@
         <term><varname>PacketLimit=</varname></term>
         <listitem>
           <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached,
-          incoming packets are dropped. An unsigned integer in the range 0–4294967294. Defaults to unset and
+          incoming packets are dropped. An unsigned integer in the range 0…4294967294. Defaults to unset and
           kernel's default is used.</para>
         </listitem>
       </varlistentry>
@@ -3441,7 +4183,7 @@
       <varlistentry>
         <term><varname>Bands=</varname></term>
         <listitem>
-          <para>Specifies the number of bands. An unsigned integer in the range 1–16. This value has to be at
+          <para>Specifies the number of bands. An unsigned integer in the range 1…16. This value has to be at
           least large enough to cover the strict bands specified through the <varname>StrictBands=</varname>
           and bandwidth-sharing bands specified in <varname>QuantumBytes=</varname>.</para>
         </listitem>
@@ -3451,7 +4193,7 @@
         <term><varname>StrictBands=</varname></term>
         <listitem>
           <para>Specifies the number of bands that should be created in strict mode. An unsigned integer in
-          the range 1–16.</para>
+          the range 1…16.</para>
         </listitem>
       </varlistentry>
 
@@ -3823,7 +4565,7 @@
         <term><varname>PacketLimit=</varname></term>
         <listitem>
           <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached,
-          incoming packets are dropped. An unsigned integer in the range 0–4294967294. Defaults to unset and
+          incoming packets are dropped. An unsigned integer in the range 0…4294967294. Defaults to unset and
           kernel's default is used.</para>
         </listitem>
       </varlistentry>
@@ -3880,8 +4622,8 @@
         <varlistentry>
           <term><varname>VLAN=</varname></term>
           <listitem>
-            <para>The VLAN ID allowed on the port. This can be either a single ID or a range M-N. VLAN IDs are valid
-            from 1 to 4094.</para>
+            <para>The VLAN ID allowed on the port. This can be either a single ID or a range M-N. Takes
+            an integer in the range 1…4094.</para>
           </listitem>
         </varlistentry>
         <varlistentry>
@@ -3935,22 +4677,48 @@
     </example>
 
     <example>
-      <title>IPv6 Prefix Delegation</title>
+      <title>IPv6 Prefix Delegation (DHCPv6 PD)</title>
 
-      <programlisting># /etc/systemd/network/55-ipv6-pd-upstream.network
+      <programlisting># /etc/systemd/network/55-dhcpv6-pd-upstream.network
 [Match]
 Name=enp1s0
 
 [Network]
-DHCP=ipv6</programlisting>
+DHCP=ipv6
 
-      <programlisting># /etc/systemd/network/56-ipv6-pd-downstream.network
+# The below setting is optional, to also assign an address in the delegated prefix
+# to the upstream interface. If not necessary, then comment out the line below and
+# the [DHCPPrefixDelegation] section.
+DHCPPrefixDelegation=yes
+
+# If the upstream network provides Router Advertisement with Managed bit set,
+# then comment out the line below and WithoutRA= setting in the [DHCPv6] section.
+IPv6AcceptRA=no
+
+[DHCPv6]
+WithoutRA=solicit
+
+[DHCPPrefixDelegation]
+UplinkInterface=:self
+SubnetId=0
+Announce=no</programlisting>
+
+      <programlisting># /etc/systemd/network/55-dhcpv6-pd-downstream.network
 [Match]
 Name=enp2s0
 
 [Network]
+DHCPPrefixDelegation=yes
 IPv6SendRA=yes
-DHCPv6PrefixDelegation=yes</programlisting>
+
+# It is expected that the host is acting as a router. So, usually it is not
+# necessary to receive Router Advertisement from other hosts in the downstream network.
+IPv6AcceptRA=no
+
+[DHCPPrefixDelegation]
+UplinkInterface=enp1s0
+SubnetId=1
+Announce=yes</programlisting>
 
       <para>This will enable DHCPv6-PD on the interface enp1s0 as an upstream interface where the
       DHCPv6 client is running and enp2s0 as a downstream interface where the prefix is delegated to.
@@ -3959,8 +4727,53 @@
     </example>
 
     <example>
+      <title>IPv6 Prefix Delegation (DHCPv4 6RD)</title>
+
+      <programlisting># /etc/systemd/network/55-dhcpv4-6rd-upstream.network
+[Match]
+Name=enp1s0
+
+[Network]
+DHCP=ipv4
+
+# When DHCPv4-6RD is used, the upstream network does not support IPv6.
+# Hence, it is not necessary to wait for Router Advertisement, which is enabled by default.
+IPv6AcceptRA=no
+
+[DHCPv4]
+Use6RD=yes</programlisting>
+
+      <programlisting># /etc/systemd/network/55-dhcpv4-6rd-downstream.network
+[Match]
+Name=enp2s0
+
+[Network]
+DHCPPrefixDelegation=yes
+IPv6SendRA=yes
+
+# It is expected that the host is acting as a router. So, usually it is not
+# necessary to receive Router Advertisement from other hosts in the downstream network.
+IPv6AcceptRA=no
+
+[DHCPPrefixDelegation]
+UplinkInterface=enp1s0
+SubnetId=1
+Announce=yes</programlisting>
+
+      <para>This will enable DHCPv4-6RD on the interface enp1s0 as an upstream interface where the
+      DHCPv4 client is running and enp2s0 as a downstream interface where the prefix is delegated to.
+      The delegated prefixes are distributed by IPv6 Router Advertisement on the downstream network.
+      </para>
+    </example>
+
+    <example>
       <title>A bridge with two enslaved links</title>
 
+      <programlisting># /etc/systemd/network/25-bridge-static.netdev
+[NetDev]
+Name=bridge0
+Kind=bridge</programlisting>
+
       <programlisting># /etc/systemd/network/25-bridge-static.network
 [Match]
 Name=bridge0
@@ -4161,6 +4974,7 @@
       <citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-network-generator.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
diff --git a/man/systemd.nspawn.xml b/man/systemd.nspawn.xml
index dc0e2f9..c1eef78 100644
--- a/man/systemd.nspawn.xml
+++ b/man/systemd.nspawn.xml
@@ -33,7 +33,7 @@
     <title>Description</title>
 
     <para>An nspawn container settings file (suffix <filename>.nspawn</filename>) contains runtime
-    configuration for a local container, and is used used by
+    configuration for a local container, and is used by
     <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
     Files of this type are named after the containers they define settings for. They are optional, and only
     required for containers whose execution environment shall differ from the defaults. Files of this type
@@ -202,7 +202,7 @@
         capabilities (see
         <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
         for details). The <varname>AmbientCapability=</varname> setting
-        specifies capability which will be passed to the started program
+        specifies capabilities which will be passed to the started program
         in the inheritable and ambient capability sets. This will grant
         these capabilities to this process. This setting correspond to
         the <option>--ambient-capability=</option> command line switch.
@@ -365,6 +365,16 @@
         details.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>SuppressSync=</varname></term>
+
+        <listitem><para>Configures whether to suppress disk synchronization for the container payload. This
+        is equivalent to the <option>--suppress-sync=</option> command line switch, and takes the same
+        parameter. See
+        <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        for details.</para></listitem>
+      </varlistentry>
+
     </variablelist>
   </refsect1>
 
diff --git a/man/systemd.path.xml b/man/systemd.path.xml
index bca1514..834f480 100644
--- a/man/systemd.path.xml
+++ b/man/systemd.path.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd.path">
+<refentry id="systemd.path" xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>systemd.path</title>
     <productname>systemd</productname>
@@ -103,9 +103,12 @@
   <refsect1>
     <title>Options</title>
 
-    <para>Path files must include a [Path] section, which carries
-    information about the path(s) it monitors. The options specific to
-    the [Path] section of path units are the following:</para>
+    <para>Path unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
+    <para>Path unit files must include a [Path] section, which carries information about the path or paths it
+    monitors. The options specific to the [Path] section of path units are the following:</para>
 
     <variablelist class='unit-directives'>
       <varlistentry>
@@ -119,7 +122,7 @@
         <varname>PathExists=</varname> may be used to watch the mere
         existence of a file or directory. If the file specified
         exists, the configured unit is activated.
-        <varname>PathExistsGlob=</varname> works similar, but checks
+        <varname>PathExistsGlob=</varname> works similarly, but checks
         for the existence of at least one file matching the globbing
         pattern specified. <varname>PathChanged=</varname> may be used
         to watch a file or directory and activate the configured unit
@@ -183,11 +186,32 @@
         in question. Takes an access mode in octal notation. Defaults
         to <option>0755</option>.</para></listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>TriggerLimitIntervalSec=</varname></term>
+        <term><varname>TriggerLimitBurst=</varname></term>
+
+        <listitem><para>Configures a limit on how often this path unit may be activated within a specific
+        time interval. The <varname>TriggerLimitIntervalSec=</varname> may be used to configure the length of
+        the time interval in the usual time units <literal>us</literal>, <literal>ms</literal>,
+        <literal>s</literal>, <literal>min</literal>, <literal>h</literal>, … and defaults to 2s. See
+        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
+        details on the various time units understood. The <varname>TriggerLimitBurst=</varname> setting takes
+        a positive integer value and specifies the number of permitted activations per time interval, and
+        defaults to 200. Set either to 0 to disable any form of trigger rate limiting. If the limit is hit,
+        the unit is placed into a failure mode, and will not watch the paths anymore until restarted. Note
+        that this limit is enforced before the service activation is enqueued.</para></listitem>
+      </varlistentry>
     </variablelist>
+
+    <xi:include href="systemd.service.xml" xpointer="shared-unit-options" />
   </refsect1>
 
   <refsect1>
       <title>See Also</title>
+      <para>Environment variables with details on the trigger will be set for triggered units. See the
+      <literal>Environment Variables Set on Triggered Units</literal> section in
+      <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+      for more details.</para>
       <para>
         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd.preset.xml b/man/systemd.preset.xml
index 9e6db28..ab730d2 100644
--- a/man/systemd.preset.xml
+++ b/man/systemd.preset.xml
@@ -47,12 +47,16 @@
     units, but rather centralize them in a distribution or spin default policy, which can be amended by
     administrator policy, see below.</para>
 
-    <para>If no preset files exist, <command>systemctl
-    preset</command> will enable all units that are installed by
-    default. If this is not desired and all units shall rather be
-    disabled, it is necessary to ship a preset file with a single,
-    catchall "<filename>disable *</filename>" line. (See example 1,
-    below.)</para>
+    <para>If no preset files exist, preset operations will enable all units that are installed by default. If
+    this is not desired and all units shall rather be disabled, it is necessary to ship a preset file with a
+    single, catchall "<filename>disable *</filename>" line. (See example 1, below.)</para>
+
+    <para>When the machine is booted for the first time,
+    <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> will
+    enable/disable all units according to preset policy, similarly to <command>systemctl
+    preset-all</command>. Also see "First Boot Semantics" in
+    <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml
index 8c0575f..52c20d6 100644
--- a/man/systemd.resource-control.xml
+++ b/man/systemd.resource-control.xml
@@ -59,10 +59,78 @@
     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
     Those options complement options listed here.</para>
 
-    <para>See the <ulink
-    url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New
-    Control Group Interfaces</ulink> for an introduction on how to make
-    use of resource control APIs from programs.</para>
+    <refsect2>
+      <title>Enabling and disabling controllers</title>
+
+      <para>Controllers in the cgroup hierarchy are hierarchical, and resource control is realized by
+      distributing resource assignments between siblings in branches of the cgroup hierarchy. There is no
+      need to explicitly <emphasis>enable</emphasis> a cgroup controller for a unit.
+      <command>systemd</command> will instruct the kernel to enable a controller for a given unit when this
+      unit has configuration for a given controller. For example, when <varname>CPUWeight=</varname> is set,
+      the <option>cpu</option> controller will be enabled, and when <varname>TasksMax=</varname> are set, the
+      <option>pids</option> controller will be enabled. In addition, various controllers may be also be
+      enabled explicitly via the
+      <varname>MemoryAccounting=</varname>/<varname>TasksAccounting=</varname>/<varname>IOAccounting=</varname>
+      settings. Because of how the cgroup hierarchy works, controllers will be automatically enabled for all
+      parent units and for any sibling units starting with the lowest level at which a controller is enabled.
+      Units for which a controller is enabled may be subject to resource control even if they don't have any
+      explicit configuration.</para>
+
+      <para>Setting <varname>Delegate=</varname> enables any delegated controllers for that unit (see below).
+      The delegatee may then enable controllers for its children as appropriate. In particular, if the
+      delegatee is <command>systemd</command> (in the <filename>user@.service</filename> unit), it will
+      repeat the same logic as the system instance and enable controllers for user units which have resource
+      limits configured, and their siblings and parents and parents' siblings.</para>
+
+      <para>Controllers may be <emphasis>disabled</emphasis> for parts of the cgroup hierarchy with
+      <varname>DisableControllers=</varname> (see below).</para>
+
+      <example>
+        <title>Enabling and disabling controllers</title>
+
+        <programlisting>
+                      -.slice
+                     /       \
+              /-----/         \--------------\
+             /                                \
+      system.slice                       user.slice
+        /       \                          /      \
+       /         \                        /        \
+      /           \              user@42.service  user@1000.service
+     /             \             Delegate=        Delegate=yes
+a.service       b.slice                             /        \
+CPUWeight=20   DisableControllers=cpu              /          \
+                 /  \                      app.slice      session.slice
+                /    \                     CPUWeight=100  CPUWeight=100
+               /      \
+       b1.service   b2.service
+                    CPUWeight=1000
+        </programlisting>
+
+        <para>In this hierarchy, the <option>cpu</option> controller is enabled for all units shown except
+        <filename>b1.service</filename> and <filename>b2.service</filename>. Because there is no explicit
+        configuration for <filename>system.slice</filename> and <filename>user.slice</filename>, CPU
+        resources will be split equally between them. Similarly, resources are allocated equally between
+        children of <filename>user.slice</filename> and between the child slices beneath
+        <filename>user@1000.service</filename>. Assuming that there is no futher configuration of resources
+        or delegation below slices <filename>app.slice</filename> or <filename>session.slice</filename>, the
+        <option>cpu</option> controller would not be enabled for units in those slices and CPU resources
+        would be further allocated using other mechanisms, e.g. based on nice levels. The manager for user
+        42 has delegation enabled without any controllers, i.e. it can manipulate its subtree of the cgroup
+        hierarchy, but without resource control.</para>
+
+        <para>In the slice <filename>system.slice</filename>, CPU resources are split 1:6 for service
+        <filename>a.service</filename>, and 5:6 for slice <filename>b.slice</filename>, because slice
+        <filename>b.slice</filename> gets the default value of 100 for <filename>cpu.weight</filename> when
+        <varname>CPUWeight=</varname> is not set.</para>
+
+        <para><varname>CPUWeight=</varname> setting in service <filename>b2.service</filename> is neutralized
+        by <varname>DisableControllers=</varname> in slice <filename>b.slice</filename>, so the
+        <option>cpu</option> controller would not be enabled for services <filename>b1.service</filename> and
+        <filename>b2.service</filename>, and CPU resources would be further allocated using other mechanisms,
+        e.g. based on nice levels.</para>
+      </example>
+    </refsect2>
 
     <refsect2>
       <title>Setting resource controls for a group of related units</title>
@@ -82,6 +150,11 @@
       <filename index="false">/etc/systemd/system/user-.slice.d/*.conf</filename>. This last directory
       applies to all user slices.</para>
     </refsect2>
+
+    <para>See the <ulink
+    url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface">New
+    Control Group Interfaces</ulink> for an introduction on how to make
+    use of resource control APIs from programs.</para>
   </refsect1>
 
   <refsect1>
@@ -99,60 +172,6 @@
   <!-- We don't have any default dependency here. -->
 
   <refsect1>
-    <title>Unified and Legacy Control Group Hierarchies</title>
-
-    <para>The unified control group hierarchy is the new version of kernel control group interface, see
-    <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html">Control Groups v2</ulink>.
-    Depending on the resource type, there are differences in resource control capabilities. Also, because of
-    interface changes, some resource types have separate set of options on the unified hierarchy.</para>
-
-    <para>
-      <variablelist>
-
-        <varlistentry>
-          <term>CPU</term>
-          <listitem>
-            <para><varname>CPUWeight=</varname> and <varname>StartupCPUWeight=</varname> replace
-            <varname>CPUShares=</varname> and <varname>StartupCPUShares=</varname>, respectively.</para>
-
-            <para>The <literal>cpuacct</literal> controller does not exist separately on the unified hierarchy.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>Memory</term>
-          <listitem>
-            <para><varname>MemoryMax=</varname> replaces <varname>MemoryLimit=</varname>. <varname>MemoryLow=</varname>
-            and <varname>MemoryHigh=</varname> are effective only on unified hierarchy.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>IO</term>
-          <listitem>
-            <para><literal>IO</literal>-prefixed settings are a superset of and replace
-            <literal>BlockIO</literal>-prefixed ones. On unified hierarchy, IO resource control also applies
-            to buffered writes.</para>
-          </listitem>
-        </varlistentry>
-
-      </variablelist>
-    </para>
-
-    <para>To ease the transition, there is best-effort translation between the two versions of settings. For each
-    controller, if any of the settings for the unified hierarchy are present, all settings for the legacy hierarchy are
-    ignored. If the resulting settings are for the other type of hierarchy, the configurations are translated before
-    application.</para>
-
-    <para>Legacy control group hierarchy (see <ulink
-    url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/">Control Groups version 1</ulink>),
-    also called cgroup-v1, doesn't allow safe delegation of controllers to unprivileged processes. If the
-    system uses the legacy control group hierarchy, resource control is disabled for the systemd user
-    instance, see
-    <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
-  </refsect1>
-
-  <refsect1>
     <title>Options</title>
 
     <para>Units of the types listed above can have settings
@@ -172,6 +191,9 @@
           setting may be controlled with
           <varname>DefaultCPUAccounting=</varname> in
           <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+
+          <para>Under the unified cgroup hierarchy, CPU accounting is available for all units and this
+          setting has no effect.</para>
         </listitem>
       </varlistentry>
 
@@ -180,21 +202,41 @@
         <term><varname>StartupCPUWeight=<replaceable>weight</replaceable></varname></term>
 
         <listitem>
-          <para>Assign the specified CPU time weight to the processes executed, if the unified control group
-          hierarchy is used on the system. These options take an integer value and control the
-          <literal>cpu.weight</literal> control group attribute. The allowed range is 1 to 10000. Defaults to
-          100. For details about this control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html">Control Groups v2</ulink>
-          and <ulink url="https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html">CFS
-          Scheduler</ulink>.  The available CPU time is split up among all units within one slice relative to
-          their CPU time weight. A higher weight means more CPU time, a lower weight means less.</para>
+          <para>These settings control the <option>cpu</option> controller in the unified hierarchy.</para>
 
-          <para>While <varname>StartupCPUWeight=</varname> only applies to the startup phase of the system,
+          <para>These options accept an integer value or a the special string "idle":</para>
+            <itemizedlist>
+              <listitem>
+                <para>If set to an integer value, assign the specified CPU time weight to the processes
+                executed, if the unified control group hierarchy is used on the system. These options control
+                the <literal>cpu.weight</literal> control group attribute. The allowed range is 1 to 10000.
+                Defaults to unset, but the kernel default is 100. For details about this control group
+                attribute, see <ulink url="https://docs.kernel.org/admin-guide/cgroup-v2.html">Control Groups
+                v2</ulink> and <ulink url="https://docs.kernel.org/scheduler/sched-design-CFS.html">CFS
+                Scheduler</ulink>. The available CPU time is split up among all units within one slice
+                relative to their CPU time weight. A higher weight means more CPU time, a lower weight means
+                less.</para>
+              </listitem>
+              <listitem>
+                <para>If set to the special string "idle", mark the cgroup for "idle scheduling", which means
+                that it will get CPU resources only when there are no processes not marked in this way to execute in this
+                cgroup or its siblings. This setting corresponds to the <literal>cpu.idle</literal> cgroup attribute.</para>
+
+                <para>Note that this value only has an effect on cgroup-v2, for cgroup-v1 it is equivalent to the minimum weight.</para>
+              </listitem>
+            </itemizedlist>
+
+          <para>While <varname>StartupCPUWeight=</varname> applies to the startup and shutdown phases of the system,
           <varname>CPUWeight=</varname> applies to normal runtime of the system, and if the former is not set also to
-          the startup phase. Using <varname>StartupCPUWeight=</varname> allows prioritizing specific services at
-          boot-up differently than during normal runtime.</para>
+          the startup and shutdown phases. Using <varname>StartupCPUWeight=</varname> allows prioritizing specific services at
+          boot-up and shutdown differently than during normal runtime.</para>
 
-          <para>These settings replace <varname>CPUShares=</varname> and <varname>StartupCPUShares=</varname>.</para>
+          <para>In addition to the resource allocation performed by the <option>cpu</option> controller, the
+          kernel may automatically divide resources based on session-id grouping, see "The autogroup feature"
+          in <citerefentry
+          project='man-pages'><refentrytitle>sched</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+          The effect of this feature is similar to the <option>cpu</option> controller with no explicit
+          configuration, so users should be careful to not mistake one for the other.</para>
         </listitem>
       </varlistentry>
 
@@ -202,13 +244,15 @@
         <term><varname>CPUQuota=</varname></term>
 
         <listitem>
+          <para>This setting controls the <option>cpu</option> controller in the unified hierarchy.</para>
+
           <para>Assign the specified CPU time quota to the processes executed. Takes a percentage value, suffixed with
           "%". The percentage specifies how much CPU time the unit shall get at maximum, relative to the total CPU time
           available on one CPU. Use values &gt; 100% for allotting CPU time on more than one CPU. This controls the
           <literal>cpu.max</literal> attribute on the unified control group hierarchy and
           <literal>cpu.cfs_quota_us</literal> on legacy. For details about these control group attributes, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html">Control Groups v2</ulink> and <ulink
-          url="https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt">sched-bwc.txt</ulink>.
+          url="https://docs.kernel.org/admin-guide/cgroup-v2.html">Control Groups v2</ulink> and <ulink
+          url="https://docs.kernel.org/scheduler/sched-bwc.html">CFS Bandwidth Control</ulink>.
           Setting <varname>CPUQuota=</varname> to an empty value unsets the quota.</para>
 
           <para>Example: <varname>CPUQuota=20%</varname> ensures that the executed processes will never get more than
@@ -221,6 +265,8 @@
         <term><varname>CPUQuotaPeriodSec=</varname></term>
 
         <listitem>
+          <para>This setting controls the <option>cpu</option> controller in the unified hierarchy.</para>
+
           <para>Assign the duration over which the CPU time quota specified by <varname>CPUQuota=</varname> is measured.
           Takes a time duration value in seconds, with an optional suffix such as "ms" for milliseconds (or "s" for seconds.)
           The default setting is 100ms. The period is clamped to the range supported by the kernel, which is [1ms, 1000ms].
@@ -229,8 +275,8 @@
 
           <para>This controls the second field of <literal>cpu.max</literal> attribute on the unified control group hierarchy
           and <literal>cpu.cfs_period_us</literal> on legacy. For details about these control group attributes, see
-          <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html">Control Groups v2</ulink> and
-          <ulink url="https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html">CFS Scheduler</ulink>.</para>
+          <ulink url="https://docs.kernel.org/admin-guide/cgroup-v2.html">Control Groups v2</ulink> and
+          <ulink url="https://docs.kernel.org/scheduler/sched-design-CFS.html">CFS Scheduler</ulink>.</para>
 
           <para>Example: <varname>CPUQuotaPeriodSec=10ms</varname> to request that the CPU quota is measured in periods of 10ms.</para>
         </listitem>
@@ -238,13 +284,22 @@
 
       <varlistentry>
         <term><varname>AllowedCPUs=</varname></term>
+        <term><varname>StartupAllowedCPUs=</varname></term>
 
         <listitem>
+          <para>This setting controls the <option>cpuset</option> controller in the unified hierarchy.</para>
+
           <para>Restrict processes to be executed on specific CPUs. Takes a list of CPU indices or ranges separated by either
           whitespace or commas. CPU ranges are specified by the lower and upper CPU indices separated by a dash.</para>
 
-          <para>Setting <varname>AllowedCPUs=</varname> doesn't guarantee that all of the CPUs will be used by the processes
-          as it may be limited by parent units. The effective configuration is reported as <varname>EffectiveCPUs=</varname>.</para>
+          <para>Setting <varname>AllowedCPUs=</varname> or <varname>StartupAllowedCPUs=</varname> doesn't guarantee that all
+          of the CPUs will be used by the processes as it may be limited by parent units. The effective configuration is
+          reported as <varname>EffectiveCPUs=</varname>.</para>
+
+          <para>While <varname>StartupAllowedCPUs=</varname> applies to the startup and shutdown phases of the system,
+          <varname>AllowedCPUs=</varname> applies to normal runtime of the system, and if the former is not set also to
+          the startup and shutdown phases. Using <varname>StartupAllowedCPUs=</varname> allows prioritizing specific services at
+          boot-up and shutdown differently than during normal runtime.</para>
 
           <para>This setting is supported only with the unified control group hierarchy.</para>
         </listitem>
@@ -252,15 +307,23 @@
 
       <varlistentry>
         <term><varname>AllowedMemoryNodes=</varname></term>
+        <term><varname>StartupAllowedMemoryNodes=</varname></term>
 
         <listitem>
+          <para>These settings control the <option>cpuset</option> controller in the unified hierarchy.</para>
+
           <para>Restrict processes to be executed on specific memory NUMA nodes. Takes a list of memory NUMA nodes indices
           or ranges separated by either whitespace or commas. Memory NUMA nodes ranges are specified by the lower and upper
           NUMA nodes indices separated by a dash.</para>
 
-          <para>Setting <varname>AllowedMemoryNodes=</varname> doesn't guarantee that all of the memory NUMA nodes will
-          be used by the processes as it may be limited by parent units. The effective configuration is reported as
-          <varname>EffectiveMemoryNodes=</varname>.</para>
+          <para>Setting <varname>AllowedMemoryNodes=</varname> or <varname>StartupAllowedMemoryNodes=</varname> doesn't
+          guarantee that all of the memory NUMA nodes will be used by the processes as it may be limited by parent units.
+          The effective configuration is reported as <varname>EffectiveMemoryNodes=</varname>.</para>
+
+          <para>While <varname>StartupAllowedMemoryNodes=</varname> applies to the startup and shutdown phases of the system,
+          <varname>AllowedMemoryNodes=</varname> applies to normal runtime of the system, and if the former is not set also to
+          the startup and shutdown phases. Using <varname>StartupAllowedMemoryNodes=</varname> allows prioritizing specific services at
+          boot-up and shutdown differently than during normal runtime.</para>
 
           <para>This setting is supported only with the unified control group hierarchy.</para>
         </listitem>
@@ -270,6 +333,8 @@
         <term><varname>MemoryAccounting=</varname></term>
 
         <listitem>
+          <para>This setting controls the <option>memory</option> controller in the unified hierarchy.</para>
+
           <para>Turn on process and kernel memory accounting for this
           unit. Takes a boolean argument. Note that turning on memory
           accounting for one unit will also implicitly turn it on for
@@ -285,6 +350,8 @@
         <term><varname>MemoryMin=<replaceable>bytes</replaceable></varname>, <varname>MemoryLow=<replaceable>bytes</replaceable></varname></term>
 
         <listitem>
+          <para>These settings control the <option>memory</option> controller in the unified hierarchy.</para>
+
           <para>Specify the memory usage protection of the executed processes in this unit.
           When reclaiming memory, the unit is treated as if it was using less memory resulting in memory
           to be preferentially reclaimed from unprotected units.
@@ -305,10 +372,7 @@
           useful in order to always inherit all of the protection afforded by ancestors.
           This controls the <literal>memory.min</literal> or <literal>memory.low</literal> control group attribute.
           For details about this control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
-
-          <para>This setting is supported only if the unified control group hierarchy is used and disables
-          <varname>MemoryLimit=</varname>.</para>
+          url="https://docs.kernel.org/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
 
           <para>Units may have their children use a default <literal>memory.min</literal> or
           <literal>memory.low</literal> value by specifying <varname>DefaultMemoryMin=</varname> or
@@ -325,6 +389,8 @@
         <term><varname>MemoryHigh=<replaceable>bytes</replaceable></varname></term>
 
         <listitem>
+          <para>These settings control the <option>memory</option> controller in the unified hierarchy.</para>
+
           <para>Specify the throttling limit on memory usage of the executed processes in this unit. Memory usage may go
           above the limit if unavoidable, but the processes are heavily slowed down and memory is taken away
           aggressively in such cases. This is the main mechanism to control memory usage of a unit.</para>
@@ -335,10 +401,7 @@
           system. If assigned the
           special value <literal>infinity</literal>, no memory throttling is applied. This controls the
           <literal>memory.high</literal> control group attribute. For details about this control group attribute, see
-          <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
-
-          <para>This setting is supported only if the unified control group hierarchy is used and disables
-          <varname>MemoryLimit=</varname>.</para>
+          <ulink url="https://docs.kernel.org/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
         </listitem>
       </varlistentry>
 
@@ -346,6 +409,8 @@
         <term><varname>MemoryMax=<replaceable>bytes</replaceable></varname></term>
 
         <listitem>
+          <para>These settings control the <option>memory</option> controller in the unified hierarchy.</para>
+
           <para>Specify the absolute limit on memory usage of the executed processes in this unit. If memory usage
           cannot be contained under the limit, out-of-memory killer is invoked inside the unit. It is recommended to
           use <varname>MemoryHigh=</varname> as the main control mechanism and use <varname>MemoryMax=</varname> as the
@@ -356,9 +421,7 @@
           percentage value may be specified, which is taken relative to the installed physical memory on the system. If
           assigned the special value <literal>infinity</literal>, no memory limit is applied. This controls the
           <literal>memory.max</literal> control group attribute. For details about this control group attribute, see
-          <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
-
-          <para>This setting replaces <varname>MemoryLimit=</varname>.</para>
+          <ulink url="https://docs.kernel.org/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
         </listitem>
       </varlistentry>
 
@@ -366,16 +429,35 @@
         <term><varname>MemorySwapMax=<replaceable>bytes</replaceable></varname></term>
 
         <listitem>
+          <para>These settings control the <option>memory</option> controller in the unified hierarchy.</para>
+
           <para>Specify the absolute limit on swap usage of the executed processes in this unit.</para>
 
           <para>Takes a swap size in bytes. If the value is suffixed with K, M, G or T, the specified swap size is
           parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. If assigned the
-          special value <literal>infinity</literal>, no swap limit is applied. This controls the
+          special value <literal>infinity</literal>, no swap limit is applied. These settings control the
           <literal>memory.swap.max</literal> control group attribute. For details about this control group attribute,
-          see <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
+          see <ulink url="https://docs.kernel.org/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
+        </listitem>
+      </varlistentry>
 
-          <para>This setting is supported only if the unified control group hierarchy is used and disables
-          <varname>MemoryLimit=</varname>.</para>
+      <varlistentry>
+        <term><varname>MemoryZSwapMax=<replaceable>bytes</replaceable></varname></term>
+
+        <listitem>
+          <para>These settings control the <option>memory</option> controller in the unified hierarchy.</para>
+
+          <para>Specify the absolute limit on zswap usage of the processes in this unit. Zswap is a lightweight compressed
+          cache for swap pages. It takes pages that are in the process of being swapped out and attempts to compress them into a
+          dynamically allocated RAM-based memory pool. If the limit specified is hit, no entries from this unit will be
+          stored in the pool until existing entries are faulted back or written out to disk. See the kernel's
+          <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/mm/zswap.html">Zswap</ulink> documentation for more details.</para>
+
+          <para>Takes a size in bytes. If the value is suffixed with K, M, G or T, the specified size is
+          parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. If assigned the
+          special value <literal>infinity</literal>, no limit is applied. These settings control the
+          <literal>memory.zswap.max</literal> control group attribute. For details about this control group attribute,
+          see <ulink url="https://docs.kernel.org/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
         </listitem>
       </varlistentry>
 
@@ -383,17 +465,14 @@
         <term><varname>TasksAccounting=</varname></term>
 
         <listitem>
-          <para>Turn on task accounting for this unit. Takes a
-          boolean argument. If enabled, the system manager will keep
-          track of the number of tasks in the unit. The number of
-          tasks accounted this way includes both kernel threads and
-          userspace processes, with each thread counting
-          individually. Note that turning on tasks accounting for one
-          unit will also implicitly turn it on for all units contained
-          in the same slice and for all its parent slices and the
-          units contained therein. The system default for this setting
-          may be controlled with
-          <varname>DefaultTasksAccounting=</varname> in
+          <para>This setting controls the <option>pids</option> controller in the unified hierarchy.</para>
+
+          <para>Turn on task accounting for this unit. Takes a boolean argument. If enabled, the kernel will
+          keep track of the total number of tasks in the unit and its children. This number includes both
+          kernel threads and userspace processes, with each thread counted individually. Note that turning on
+          tasks accounting for one unit will also implicitly turn it on for all units contained in the same
+          slice and for all its parent slices and the units contained therein. The system default for this
+          setting may be controlled with <varname>DefaultTasksAccounting=</varname> in
           <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
         </listitem>
       </varlistentry>
@@ -402,13 +481,16 @@
         <term><varname>TasksMax=<replaceable>N</replaceable></varname></term>
 
         <listitem>
-          <para>Specify the maximum number of tasks that may be created in the unit. This ensures that the number of
-          tasks accounted for the unit (see above) stays below a specific limit. This either takes an absolute number
-          of tasks or a percentage value that is taken relative to the configured maximum number of tasks on the
-          system.  If assigned the special value <literal>infinity</literal>, no tasks limit is applied. This controls
-          the <literal>pids.max</literal> control group attribute. For details about this control group attribute, see
-          <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/pids.html">Process Number Controller</ulink>.
-          </para>
+          <para>This setting controls the <option>pids</option> controller in the unified hierarchy.</para>
+
+          <para>Specify the maximum number of tasks that may be created in the unit. This ensures that the
+          number of tasks accounted for the unit (see above) stays below a specific limit. This either takes
+          an absolute number of tasks or a percentage value that is taken relative to the configured maximum
+          number of tasks on the system. If assigned the special value <literal>infinity</literal>, no tasks
+          limit is applied. This controls the <literal>pids.max</literal> control group attribute. For
+          details about this control group attribute, the
+          <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#pid">pids controller
+          </ulink>.</para>
 
           <para>The system default for this setting may be controlled with
           <varname>DefaultTasksMax=</varname> in
@@ -420,15 +502,14 @@
         <term><varname>IOAccounting=</varname></term>
 
         <listitem>
+          <para>This setting controls the <option>io</option> controller in the unified hierarchy.</para>
+
           <para>Turn on Block I/O accounting for this unit, if the unified control group hierarchy is used on the
           system. Takes a boolean argument. Note that turning on block I/O accounting for one unit will also implicitly
           turn it on for all units contained in the same slice and all for its parent slices and the units contained
           therein. The system default for this setting may be controlled with <varname>DefaultIOAccounting=</varname>
           in
           <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
-
-          <para>This setting replaces <varname>BlockIOAccounting=</varname> and disables settings prefixed with
-          <varname>BlockIO</varname> or <varname>StartupBlockIO</varname>.</para>
         </listitem>
       </varlistentry>
 
@@ -437,24 +518,23 @@
         <term><varname>StartupIOWeight=<replaceable>weight</replaceable></varname></term>
 
         <listitem>
+          <para>These settings control the <option>io</option> controller in the unified hierarchy.</para>
+
           <para>Set the default overall block I/O weight for the executed processes, if the unified control
           group hierarchy is used on the system. Takes a single weight value (between 1 and 10000) to set the
           default block I/O weight. This controls the <literal>io.weight</literal> control group attribute,
           which defaults to 100. For details about this control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files">IO
+          url="https://docs.kernel.org/admin-guide/cgroup-v2.html#io-interface-files">IO
           Interface Files</ulink>.  The available I/O bandwidth is split up among all units within one slice
           relative to their block I/O weight. A higher weight means more I/O bandwidth, a lower weight means
           less.</para>
 
-          <para>While <varname>StartupIOWeight=</varname> only applies
-          to the startup phase of the system,
+          <para>While <varname>StartupIOWeight=</varname> applies
+          to the startup and shutdown phases of the system,
           <varname>IOWeight=</varname> applies to the later runtime of
           the system, and if the former is not set also to the startup
-          phase. This allows prioritizing specific services at boot-up
-          differently than during runtime.</para>
-
-          <para>These settings replace <varname>BlockIOWeight=</varname> and <varname>StartupBlockIOWeight=</varname>
-          and disable settings prefixed with <varname>BlockIO</varname> or <varname>StartupBlockIO</varname>.</para>
+          and shutdown phases. This allows prioritizing specific services at boot-up
+          and shutdown differently than during runtime.</para>
         </listitem>
       </varlistentry>
 
@@ -462,6 +542,8 @@
         <term><varname>IODeviceWeight=<replaceable>device</replaceable> <replaceable>weight</replaceable></varname></term>
 
         <listitem>
+          <para>This setting controls the <option>io</option> controller in the unified hierarchy.</para>
+
           <para>Set the per-device overall block I/O weight for the executed processes, if the unified control group
           hierarchy is used on the system. Takes a space-separated pair of a file path and a weight value to specify
           the device specific weight value, between 1 and 10000. (Example: <literal>/dev/sda 1000</literal>). The file
@@ -469,10 +551,7 @@
           device of the file system of the file is determined. This controls the <literal>io.weight</literal> control
           group attribute, which defaults to 100. Use this option multiple times to set weights for multiple devices.
           For details about this control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files">IO Interface Files</ulink>.</para>
-
-          <para>This setting replaces <varname>BlockIODeviceWeight=</varname> and disables settings prefixed with
-          <varname>BlockIO</varname> or <varname>StartupBlockIO</varname>.</para>
+          url="https://docs.kernel.org/admin-guide/cgroup-v2.html#io-interface-files">IO Interface Files</ulink>.</para>
 
           <para>The specified device node should reference a block device that has an I/O scheduler
           associated, i.e. should not refer to partition or loopback block devices, but to the originating,
@@ -489,6 +568,8 @@
         <term><varname>IOWriteBandwidthMax=<replaceable>device</replaceable> <replaceable>bytes</replaceable></varname></term>
 
         <listitem>
+          <para>These settings control the <option>io</option> controller in the unified hierarchy.</para>
+
           <para>Set the per-device overall block I/O bandwidth maximum limit for the executed processes, if the unified
           control group hierarchy is used on the system. This limit is not work-conserving and the executed processes
           are not allowed to use more even if the device has idle capacity.  Takes a space-separated pair of a file
@@ -499,13 +580,9 @@
           "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 5M"). This controls the <literal>io.max</literal> control
           group attributes. Use this option multiple times to set bandwidth limits for multiple devices. For details
           about this control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files">IO Interface Files</ulink>.
+          url="https://docs.kernel.org/admin-guide/cgroup-v2.html#io-interface-files">IO Interface Files</ulink>.
           </para>
 
-          <para>These settings replace <varname>BlockIOReadBandwidth=</varname> and
-          <varname>BlockIOWriteBandwidth=</varname> and disable settings prefixed with <varname>BlockIO</varname> or
-          <varname>StartupBlockIO</varname>.</para>
-
           <para>Similar restrictions on block device discovery as for <varname>IODeviceWeight=</varname> apply, see above.</para>
         </listitem>
       </varlistentry>
@@ -515,6 +592,8 @@
         <term><varname>IOWriteIOPSMax=<replaceable>device</replaceable> <replaceable>IOPS</replaceable></varname></term>
 
         <listitem>
+          <para>These settings control the <option>io</option> controller in the unified hierarchy.</para>
+
           <para>Set the per-device overall block I/O IOs-Per-Second maximum limit for the executed processes, if the
           unified control group hierarchy is used on the system. This limit is not work-conserving and the executed
           processes are not allowed to use more even if the device has idle capacity.  Takes a space-separated pair of
@@ -525,12 +604,9 @@
           "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 1K"). This controls the <literal>io.max</literal> control
           group attributes. Use this option multiple times to set IOPS limits for multiple devices. For details about
           this control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files">IO Interface Files</ulink>.
+          url="https://docs.kernel.org/admin-guide/cgroup-v2.html#io-interface-files">IO Interface Files</ulink>.
           </para>
 
-          <para>These settings are supported only if the unified control group hierarchy is used and disable settings
-          prefixed with <varname>BlockIO</varname> or <varname>StartupBlockIO</varname>.</para>
-
           <para>Similar restrictions on block device discovery as for <varname>IODeviceWeight=</varname> apply, see above.</para>
         </listitem>
       </varlistentry>
@@ -539,6 +615,8 @@
         <term><varname>IODeviceLatencyTargetSec=<replaceable>device</replaceable> <replaceable>target</replaceable></varname></term>
 
         <listitem>
+          <para>This setting controls the <option>io</option> controller in the unified hierarchy.</para>
+
           <para>Set the per-device average target I/O latency for the executed processes, if the unified control group
           hierarchy is used on the system. Takes a file path and a timespan separated by a space to specify
           the device specific latency target. (Example: "/dev/sda 25ms"). The file path may be specified
@@ -546,7 +624,7 @@
           system of the file is determined. This controls the <literal>io.latency</literal> control group
           attribute. Use this option multiple times to set latency target for multiple devices. For details about this
           control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files">IO Interface Files</ulink>.</para>
+          url="https://docs.kernel.org/admin-guide/cgroup-v2.html#io-interface-files">IO Interface Files</ulink>.</para>
 
           <para>Implies <literal>IOAccounting=yes</literal>.</para>
 
@@ -677,6 +755,8 @@
           support is not enabled in the underlying kernel or container manager). These settings will have no effect in
           that case. If compatibility with such systems is desired it is hence recommended to not exclusively rely on
           them for IP security.</para>
+
+          <xi:include href="cgroup-sandboxing.xml" xpointer="singular"/>
         </listitem>
       </varlistentry>
 
@@ -730,7 +810,7 @@
           Cgroup-bpf hooks in the form of BPF programs loaded to the BPF filesystem are attached with cgroup-bpf attach
           flags determined by the unit. For details about attachment types and flags see <ulink
           url="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/include/uapi/linux/bpf.h"/>.
-          For general BPF documentation please refer to <ulink url="https://www.kernel.org/doc/html/latest/bpf/index.html"/>.</para>
+          For general BPF documentation please refer to <ulink url="https://docs.kernel.org/bpf/index.html"/>.</para>
 
           <para>The specification of BPF program consists of a <replaceable>type</replaceable> followed by a
           <replaceable>program-path</replaceable> with <literal>:</literal> as the separator:
@@ -853,6 +933,56 @@
 SocketBindAllow=ipv4:udp:10000-65535
 SocketBindDeny=any
 …</programlisting></para>
+
+          <xi:include href="cgroup-sandboxing.xml" xpointer="singular"/>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RestrictNetworkInterfaces=</varname></term>
+
+        <listitem>
+          <para>Takes a list of space-separated network interface names. This option restricts the network
+          interfaces that processes of this unit can use. By default processes can only use the network interfaces
+          listed (allow-list). If the first character of the rule is <literal>~</literal>, the effect is inverted:
+          the processes can only use network interfaces not listed (deny-list).
+          </para>
+
+          <para>This option can appear multiple times, in which case the network interface names are merged. If the
+          empty string is assigned the set is reset, all prior assignments will have not effect.
+          </para>
+
+          <para>If you specify both types of this option (i.e. allow-listing and deny-listing), the first encountered
+          will take precedence and will dictate the default action (allow vs deny). Then the next occurrences of this
+          option will add or delete the listed network interface names from the set, depending of its type and the
+          default action.
+          </para>
+
+          <para>The loopback interface ("lo") is not treated in any special way, you have to configure it explicitly
+          in the unit file.
+          </para>
+          <para>Example 1: allow-list
+          <programlisting>
+RestrictNetworkInterfaces=eth1
+RestrictNetworkInterfaces=eth2</programlisting>
+          Programs in the unit will be only able to use the eth1 and eth2 network
+          interfaces.
+          </para>
+
+          <para>Example 2: deny-list
+          <programlisting>
+RestrictNetworkInterfaces=~eth1 eth2</programlisting>
+          Programs in the unit will be able to use any network interface but eth1 and eth2.
+          </para>
+
+          <para>Example 3: mixed
+          <programlisting>
+RestrictNetworkInterfaces=eth1 eth2
+RestrictNetworkInterfaces=~eth1</programlisting>
+          Programs in the unit will be only able to use the eth2 network interface.
+          </para>
+
+          <xi:include href="cgroup-sandboxing.xml" xpointer="singular"/>
         </listitem>
       </varlistentry>
 
@@ -863,12 +993,14 @@
           <para>Control access to specific device nodes by the executed processes. Takes two space-separated
           strings: a device node specifier followed by a combination of <constant>r</constant>,
           <constant>w</constant>, <constant>m</constant> to control <emphasis>r</emphasis>eading,
-          <emphasis>w</emphasis>riting, or creation of the specific device node(s) by the unit
-          (<emphasis>m</emphasis>knod), respectively. On cgroup-v1 this controls the
-          <literal>devices.allow</literal> control group attribute. For details about this control group
-          attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/devices.html">Device Whitelist Controller</ulink>.
-          In the unified cgroup hierarchy this functionality is implemented using eBPF filtering.</para>
+          <emphasis>w</emphasis>riting, or creation of the specific device nodes by the unit
+          (<emphasis>m</emphasis>knod), respectively. This functionality is implemented using eBPF
+          filtering.</para>
+
+          <para>When access to <emphasis>all</emphasis> physical devices should be disallowed,
+          <varname>PrivateDevices=</varname> may be used instead. See
+          <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+          </para>
 
           <para>The device node specifier is either a path to a device node in the file system, starting with
           <filename>/dev/</filename>, or a string starting with either <literal>char-</literal> or
@@ -903,6 +1035,7 @@
 DeviceAllow=/dev/loop-control
 …</programlisting></para>
 
+          <xi:include href="cgroup-sandboxing.xml" xpointer="singular"/>
         </listitem>
       </varlistentry>
 
@@ -947,6 +1080,8 @@
               </listitem>
             </varlistentry>
           </variablelist>
+
+          <xi:include href="cgroup-sandboxing.xml" xpointer="singular"/>
         </listitem>
       </varlistentry>
 
@@ -985,29 +1120,37 @@
           <para>Turns on delegation of further resource control partitioning to processes of the unit. Units where this
           is enabled may create and manage their own private subhierarchy of control groups below the control group of
           the unit itself. For unprivileged services (i.e. those using the <varname>User=</varname> setting) the unit's
-          control group will be made accessible to the relevant user. When enabled the service manager will refrain
-          from manipulating control groups or moving processes below the unit's control group, so that a clear concept
-          of ownership is established: the control group tree above the unit's control group (i.e. towards the root
-          control group) is owned and managed by the service manager of the host, while the control group tree below
-          the unit's control group is owned and managed by the unit itself. Takes either a boolean argument or a list
-          of control group controller names. If true, delegation is turned on, and all supported controllers are
-          enabled for the unit, making them available to the unit's processes for management. If false, delegation is
-          turned off entirely (and no additional controllers are enabled). If set to a list of controllers, delegation
-          is turned on, and the specified controllers are enabled for the unit. Note that additional controllers than
-          the ones specified might be made available as well, depending on configuration of the containing slice unit
-          or other units contained in it. Note that assigning the empty string will enable delegation, but reset the
-          list of controllers, all assignments prior to this will have no effect.  Defaults to false.</para>
+          control group will be made accessible to the relevant user.</para>
 
-          <para>Note that controller delegation to less privileged code is only safe on the unified control group
-          hierarchy. Accordingly, access to the specified controllers will not be granted to unprivileged services on
-          the legacy hierarchy, even when requested.</para>
+          <para>When enabled the service manager will refrain from manipulating control groups or moving
+          processes below the unit's control group, so that a clear concept of ownership is established: the
+          control group tree at the level of the unit's control group and above (i.e. towards the root
+          control group) is owned and managed by the service manager of the host, while the control group
+          tree below the unit's control group is owned and managed by the unit itself.</para>
+
+          <para>Takes either a boolean argument or a (possibly empty) list of control group controller names.
+          If true, delegation is turned on, and all supported controllers are enabled for the unit, making
+          them available to the unit's processes for management. If false, delegation is turned off entirely
+          (and no additional controllers are enabled). If set to a list of controllers, delegation is turned
+          on, and the specified controllers are enabled for the unit. Assigning the empty string will enable
+          delegation, but reset the list of controllers, and all assignments prior to this will have no
+          effect. Note that additional controllers other than the ones specified might be made available as
+          well, depending on configuration of the containing slice unit or other units contained in it.
+          Defaults to false.</para>
+
+          <para>Note that controller delegation to less privileged code is only safe on the unified control
+          group hierarchy. Accordingly, access to the specified controllers will not be granted to
+          unprivileged services on the legacy hierarchy, even when requested.</para>
 
           <xi:include href="supported-controllers.xml"  xpointer="controllers-text" />
 
-          <para>Not all of these controllers are available on all kernels however, and some are
-          specific to the unified hierarchy while others are specific to the legacy hierarchy. Also note that the
-          kernel might support further controllers, which aren't covered here yet as delegation is either not supported
-          at all for them or not defined cleanly.</para>
+          <para>Not all of these controllers are available on all kernels however, and some are specific to
+          the unified hierarchy while others are specific to the legacy hierarchy. Also note that the kernel
+          might support further controllers, which aren't covered here yet as delegation is either not
+          supported at all for them or not defined cleanly.</para>
+
+          <para>Note that because of the hierarchical nature of cgroup hierarchy, any controllers that are
+          delegated will be enabled for the parent and sibling units of the unit with delegation.</para>
 
           <para>For further details on the delegation model consult <ulink
           url="https://systemd.io/CGROUP_DELEGATION">Control Group APIs and Delegation</ulink>.</para>
@@ -1018,19 +1161,20 @@
         <term><varname>DisableControllers=</varname></term>
 
         <listitem>
-          <para>Disables controllers from being enabled for a unit's children. If a controller listed is already in use
-          in its subtree, the controller will be removed from the subtree. This can be used to avoid child units being
-          able to implicitly or explicitly enable a controller. Defaults to not disabling any controllers.</para>
-
-          <para>It may not be possible to successfully disable a controller if the unit or any child of the unit in
-          question delegates controllers to its children, as any delegated subtree of the cgroup hierarchy is unmanaged
-          by systemd.</para>
+          <para>Disables controllers from being enabled for a unit's children. If a controller listed is
+          already in use in its subtree, the controller will be removed from the subtree. This can be used to
+          avoid configuration in child units from being able to implicitly or explicitly enable a controller.
+          Defaults to empty.</para>
 
           <para>Multiple controllers may be specified, separated by spaces. You may also pass
           <varname>DisableControllers=</varname> multiple times, in which case each new instance adds another controller
           to disable. Passing <varname>DisableControllers=</varname> by itself with no controller name present resets
           the disabled controller list.</para>
 
+          <para>It may not be possible to disable a controller after units have been started, if the unit or
+          any child of the unit in question delegates controllers to its children, as any delegated subtree
+          of the cgroup hierarchy is unmanaged by systemd.</para>
+
           <xi:include href="supported-controllers.xml"  xpointer="controllers-text" />
         </listitem>
       </varlistentry>
@@ -1044,24 +1188,24 @@
           <citerefentry><refentrytitle>systemd-oomd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
           will act on this unit's cgroups. Defaults to <option>auto</option>.</para>
 
-          <para>When set to <option>kill</option>, <command>systemd-oomd</command> will actively monitor this unit's
-          cgroup metrics to decide whether it needs to act. If the cgroup passes the limits set by
-          <citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> or its
-          overrides, <command>systemd-oomd</command> will send a <constant>SIGKILL</constant> to all of the processes
-          under the chosen candidate cgroup. Note that only descendant cgroups can be eligible candidates for killing;
-          the unit that set its property to <option>kill</option> is not a candidate (unless one of its ancestors set
-          their property to <option>kill</option>). You can find more details on candidates and kill behavior at
+          <para>When set to <option>kill</option>, the unit becomes a candidate for monitoring by
+          <command>systemd-oomd</command>. If the cgroup passes the limits set by
+          <citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> or
+          the unit configuration, <command>systemd-oomd</command> will select a descendant cgroup and send
+          <constant>SIGKILL</constant> to all of the processes under it. You can find more details on
+          candidates and kill behavior at
           <citerefentry><refentrytitle>systemd-oomd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-          and <citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Setting
-          either of these properties to <option>kill</option> will also automatically acquire
-          <varname>After=</varname> and <varname>Wants=</varname> dependencies on
-          <filename>systemd-oomd.service</filename> unless <varname>DefaultDependencies=no</varname>.
-        </para>
+          and
+          <citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
 
-          <para>When set to <option>auto</option>, <command>systemd-oomd</command> will not actively use this cgroup's
-          data for monitoring and detection. However, if an ancestor cgroup has one of these properties set to
-          <option>kill</option>, a unit with <option>auto</option> can still be an eligible candidate for
-          <command>systemd-oomd</command> to act on.</para>
+          <para>Setting either of these properties to <option>kill</option> will also result in
+          <varname>After=</varname> and <varname>Wants=</varname> dependencies on
+          <filename>systemd-oomd.service</filename> unless <varname>DefaultDependencies=no</varname>.</para>
+
+          <para>When set to <option>auto</option>, <command>systemd-oomd</command> will not actively use this
+          cgroup's data for monitoring and detection. However, if an ancestor cgroup has one of these
+          properties set to <option>kill</option>, a unit with <option>auto</option> can still be a candidate
+          for <command>systemd-oomd</command> to terminate.</para>
         </listitem>
       </varlistentry>
 
@@ -1086,9 +1230,20 @@
           <para>Allows deprioritizing or omitting this unit's cgroup as a candidate when
           <command>systemd-oomd</command> needs to act. Requires support for extended attributes (see
           <citerefentry project='man-pages'><refentrytitle>xattr</refentrytitle><manvolnum>7</manvolnum></citerefentry>)
-          in order to use <option>avoid</option> or <option>omit</option>. Additionally,
-          <command>systemd-oomd</command> will ignore these extended attributes if the unit's cgroup is not
-          owned by the root user.</para>
+          in order to use <option>avoid</option> or <option>omit</option>.</para>
+
+          <para>When calculating candidates to relieve swap usage, <command>systemd-oomd</command> will
+          only respect these extended attributes if the unit's cgroup is owned by root.</para>
+
+          <para>When calculating candidates to relieve memory pressure, <command>systemd-oomd</command>
+          will only respect these extended attributes if the unit's cgroup is owned by root, or if the
+          unit's cgroup owner, and the owner of the monitored ancestor cgroup are the same. For example,
+          if <command>systemd-oomd</command> is calculating candidates for <filename>-.slice</filename>,
+          then extended attributes set on descendants of <filename>/user.slice/user-1000.slice/user@1000.service/</filename>
+          will be ignored because the descendants are owned by UID 1000, and <filename>-.slice</filename>
+          is owned by UID 0. But, if calculating candidates for
+          <filename>/user.slice/user-1000.slice/user@1000.service/</filename>, then extended attributes set
+          on the descendants would be respected.</para>
 
           <para>If this property is set to <option>avoid</option>, the service manager will convey this to
           <command>systemd-oomd</command>, which will only select this cgroup if there are no other viable
@@ -1113,146 +1268,28 @@
   </refsect1>
 
   <refsect1>
-    <title>Deprecated Options</title>
+      <title>History</title>
 
-    <para>The following options are deprecated. Use the indicated superseding options instead:</para>
-
-    <variablelist class='unit-directives'>
-
-      <varlistentry>
-        <term><varname>CPUShares=<replaceable>weight</replaceable></varname></term>
-        <term><varname>StartupCPUShares=<replaceable>weight</replaceable></varname></term>
-
-        <listitem>
-          <para>Assign the specified CPU time share weight to the processes executed. These options take an integer
-          value and control the <literal>cpu.shares</literal> control group attribute. The allowed range is 2 to
-          262144. Defaults to 1024. For details about this control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html">CFS Scheduler</ulink>.
-          The available CPU time is split up among all units within one slice relative to their CPU time share
-          weight.</para>
-
-          <para>While <varname>StartupCPUShares=</varname> only applies to the startup phase of the system,
-          <varname>CPUShares=</varname> applies to normal runtime of the system, and if the former is not set also to
-          the startup phase. Using <varname>StartupCPUShares=</varname> allows prioritizing specific services at
-          boot-up differently than during normal runtime.</para>
-
-          <para>Implies <literal>CPUAccounting=yes</literal>.</para>
-
-          <para>These settings are deprecated. Use <varname>CPUWeight=</varname> and
-          <varname>StartupCPUWeight=</varname> instead.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><varname>MemoryLimit=<replaceable>bytes</replaceable></varname></term>
-
-        <listitem>
-          <para>Specify the limit on maximum memory usage of the executed processes. The limit specifies how much
-          process and kernel memory can be used by tasks in this unit. Takes a memory size in bytes. If the value is
-          suffixed with K, M, G or T, the specified memory size is parsed as Kilobytes, Megabytes, Gigabytes, or
-          Terabytes (with the base 1024), respectively. Alternatively, a percentage value may be specified, which is
-          taken relative to the installed physical memory on the system. If assigned the special value
-          <literal>infinity</literal>, no memory limit is applied. This controls the
-          <literal>memory.limit_in_bytes</literal> control group attribute. For details about this control group
-          attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/memory.html">Memory Resource Controller</ulink>.</para>
-
-          <para>Implies <literal>MemoryAccounting=yes</literal>.</para>
-
-          <para>This setting is deprecated. Use <varname>MemoryMax=</varname> instead.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><varname>BlockIOAccounting=</varname></term>
-
-        <listitem>
-          <para>Turn on Block I/O accounting for this unit, if the legacy control group hierarchy is used on the
-          system. Takes a boolean argument. Note that turning on block I/O accounting for one unit will also implicitly
-          turn it on for all units contained in the same slice and all for its parent slices and the units contained
-          therein. The system default for this setting may be controlled with
-          <varname>DefaultBlockIOAccounting=</varname> in
-          <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
-
-          <para>This setting is deprecated. Use <varname>IOAccounting=</varname> instead.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><varname>BlockIOWeight=<replaceable>weight</replaceable></varname></term>
-        <term><varname>StartupBlockIOWeight=<replaceable>weight</replaceable></varname></term>
-
-        <listitem><para>Set the default overall block I/O weight for the executed processes, if the legacy control
-        group hierarchy is used on the system. Takes a single weight value (between 10 and 1000) to set the default
-        block I/O weight. This controls the <literal>blkio.weight</literal> control group attribute, which defaults to
-        500. For details about this control group attribute, see <ulink
-        url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html">Block IO Controller</ulink>.
-        The available I/O bandwidth is split up among all units within one slice relative to their block I/O
-        weight.</para>
-
-        <para>While <varname>StartupBlockIOWeight=</varname> only
-        applies to the startup phase of the system,
-        <varname>BlockIOWeight=</varname> applies to the later runtime
-        of the system, and if the former is not set also to the
-        startup phase. This allows prioritizing specific services at
-        boot-up differently than during runtime.</para>
-
-        <para>Implies
-        <literal>BlockIOAccounting=yes</literal>.</para>
-
-        <para>These settings are deprecated. Use <varname>IOWeight=</varname> and <varname>StartupIOWeight=</varname>
-        instead.</para>
-
-      </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><varname>BlockIODeviceWeight=<replaceable>device</replaceable> <replaceable>weight</replaceable></varname></term>
-
-        <listitem>
-          <para>Set the per-device overall block I/O weight for the executed processes, if the legacy control group
-          hierarchy is used on the system. Takes a space-separated pair of a file path and a weight value to specify
-          the device specific weight value, between 10 and 1000. (Example: "/dev/sda 500"). The file path may be
-          specified as path to a block device node or as any other file, in which case the backing block device of the
-          file system of the file is determined. This controls the <literal>blkio.weight_device</literal> control group
-          attribute, which defaults to 1000. Use this option multiple times to set weights for multiple devices. For
-          details about this control group attribute, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html">Block IO Controller</ulink>.</para>
-
-          <para>Implies
-          <literal>BlockIOAccounting=yes</literal>.</para>
-
-          <para>This setting is deprecated. Use <varname>IODeviceWeight=</varname> instead.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term><varname>BlockIOReadBandwidth=<replaceable>device</replaceable> <replaceable>bytes</replaceable></varname></term>
-        <term><varname>BlockIOWriteBandwidth=<replaceable>device</replaceable> <replaceable>bytes</replaceable></varname></term>
-
-        <listitem>
-          <para>Set the per-device overall block I/O bandwidth limit for the executed processes, if the legacy control
-          group hierarchy is used on the system. Takes a space-separated pair of a file path and a bandwidth value (in
-          bytes per second) to specify the device specific bandwidth. The file path may be a path to a block device
-          node, or as any other file in which case the backing block device of the file system of the file is used. If
-          the bandwidth is suffixed with K, M, G, or T, the specified bandwidth is parsed as Kilobytes, Megabytes,
-          Gigabytes, or Terabytes, respectively, to the base of 1000. (Example:
-          "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 5M"). This controls the
-          <literal>blkio.throttle.read_bps_device</literal> and <literal>blkio.throttle.write_bps_device</literal>
-          control group attributes. Use this option multiple times to set bandwidth limits for multiple devices. For
-          details about these control group attributes, see <ulink
-          url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html">Block IO Controller</ulink>.
-          </para>
-
-          <para>Implies
-          <literal>BlockIOAccounting=yes</literal>.</para>
-
-          <para>These settings are deprecated. Use <varname>IOReadBandwidthMax=</varname> and
-          <varname>IOWriteBandwidthMax=</varname> instead.</para>
-        </listitem>
-      </varlistentry>
-
-    </variablelist>
+      <variablelist>
+        <varlistentry>
+          <term>systemd 252</term>
+          <listitem><para> Options for controlling the Legacy Control Group Hierarchy (<ulink
+          url="https://docs.kernel.org/admin-guide/cgroup-v1/index.html">Control Groups version 1</ulink>)
+          are now fully deprecated:
+          <varname>CPUShares=<replaceable>weight</replaceable></varname>,
+          <varname>StartupCPUShares=<replaceable>weight</replaceable></varname>,
+          <varname>MemoryLimit=<replaceable>bytes</replaceable></varname>,
+          <varname>BlockIOAccounting=</varname>,
+          <varname>BlockIOWeight=<replaceable>weight</replaceable></varname>,
+          <varname>StartupBlockIOWeight=<replaceable>weight</replaceable></varname>,
+          <varname>BlockIODeviceWeight=<replaceable>device</replaceable>
+          <replaceable>weight</replaceable></varname>,
+          <varname>BlockIOReadBandwidth=<replaceable>device</replaceable>
+          <replaceable>bytes</replaceable></varname>,
+          <varname>BlockIOWriteBandwidth=<replaceable>device</replaceable> <replaceable>bytes</replaceable></varname>.
+          Please switch to the unified cgroup hierarchy.</para></listitem>
+        </varlistentry>
+      </variablelist>
   </refsect1>
 
   <refsect1>
@@ -1272,7 +1309,7 @@
       <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd-oomd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
       The documentation for control groups and specific controllers in the Linux kernel:
-      <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html">Control Groups v2</ulink>.
+      <ulink url="https://docs.kernel.org/admin-guide/cgroup-v2.html">Control Groups v2</ulink>.
     </para>
   </refsect1>
 </refentry>
diff --git a/man/systemd.scope.xml b/man/systemd.scope.xml
index 7d7b32d..95969bf 100644
--- a/man/systemd.scope.xml
+++ b/man/systemd.scope.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd.scope">
+<refentry id="systemd.scope" xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>systemd.scope</title>
     <productname>systemd</productname>
@@ -42,7 +42,7 @@
     command line.</para>
 
     <para>See the <ulink
-    url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New
+    url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface">New
     Control Group Interfaces</ulink> for an introduction on how to make
     use of scope units from programs.</para>
 
@@ -89,6 +89,10 @@
   <refsect1>
     <title>Options</title>
 
+    <para>Scope files may include a [Unit] section, which is described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
     <para>Scope files may include a [Scope]
     section, which carries information about the scope and the
     units it contains. A number of options that may be used in
@@ -101,6 +105,8 @@
     of scope units are the following:</para>
 
     <variablelist class='unit-directives'>
+      <xi:include href="systemd.service.xml" xpointer="oom-policy" />
+
       <varlistentry>
         <term><varname>RuntimeMaxSec=</varname></term>
 
@@ -108,7 +114,18 @@
         active for longer than the specified time it is terminated and put into a failure state. Pass
         <literal>infinity</literal> (the default) to configure no runtime limit.</para></listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>RuntimeRandomizedExtraSec=</varname></term>
+
+        <listitem><para>This option modifies <varname>RuntimeMaxSec=</varname> by increasing the maximum runtime by an
+        evenly distributed duration between 0 and the specified value (in seconds). If <varname>RuntimeMaxSec=</varname> is
+        unspecified, then this feature will be disabled.
+        </para></listitem>
+      </varlistentry>
     </variablelist>
+
+    <xi:include href="systemd.service.xml" xpointer="shared-unit-options" />
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index 884260a..a1a32e8 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -50,15 +50,11 @@
     which configure resource control settings for the processes of the
     service.</para>
 
-    <para>If a service is requested under a certain name but no unit
-    configuration file is found, systemd looks for a SysV init script
-    by the same name (with the <filename>.service</filename> suffix
-    removed) and dynamically creates a service unit from that script.
-    This is useful for compatibility with SysV. Note that this
-    compatibility is quite comprehensive but not 100%. For details
-    about the incompatibilities, see the <ulink
-    url="https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities">Incompatibilities
-    with SysV</ulink> document.</para>
+    <para>If SysV init compat is enabled, systemd automatically creates service units that wrap SysV init
+    scripts (the service name is the same as the name of the script, with a <literal>.service</literal>
+    suffix added); see
+    <citerefentry><refentrytitle>systemd-sysv-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+    </para>
 
     <para>The <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>
     command allows creating <filename>.service</filename> and <filename>.scope</filename> units dynamically
@@ -138,7 +134,11 @@
   <refsect1>
     <title>Options</title>
 
-    <para>Service files must include a [Service]
+    <para>Service unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
+    <para>Service unit files must include a [Service]
     section, which carries information about the service and the
     process it supervises. A number of options that may be used in
     this section are shared with other unit types. These options are
@@ -157,7 +157,7 @@
         <listitem>
           <para>Configures the process start-up type for this service unit. One of <option>simple</option>,
           <option>exec</option>, <option>forking</option>, <option>oneshot</option>, <option>dbus</option>,
-          <option>notify</option> or <option>idle</option>:</para>
+          <option>notify</option>, <option>notify-reload</option> or <option>idle</option>:</para>
 
           <itemizedlist>
             <listitem><para>If set to <option>simple</option> (the default if <varname>ExecStart=</varname> is
@@ -216,14 +216,30 @@
             logic thus should be prepared to receive a <constant>SIGTERM</constant> (or whichever signal is
             configured in <varname>KillSignal=</varname>) as result.</para></listitem>
 
-            <listitem><para>Behavior of <option>notify</option> is similar to <option>exec</option>; however, it is
-            expected that the service sends a notification message via
-            <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry> or an
-            equivalent call when it has finished starting up. systemd will proceed with starting follow-up units after
-            this notification message has been sent. If this option is used, <varname>NotifyAccess=</varname> (see
-            below) should be set to open access to the notification socket provided by systemd. If
-            <varname>NotifyAccess=</varname> is missing or set to <option>none</option>, it will be forcibly set to
-            <option>main</option>.</para></listitem>
+            <listitem><para>Behavior of <option>notify</option> is similar to <option>exec</option>; however,
+            it is expected that the service sends a <literal>READY=1</literal> notification message via
+            <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry> or
+            an equivalent call when it has finished starting up. systemd will proceed with starting follow-up
+            units after this notification message has been sent. If this option is used,
+            <varname>NotifyAccess=</varname> (see below) should be set to open access to the notification
+            socket provided by systemd. If <varname>NotifyAccess=</varname> is missing or set to
+            <option>none</option>, it will be forcibly set to <option>main</option>.</para></listitem>
+
+            <listitem><para>Behavior of <option>notify-reload</option> is identical to
+            <option>notify</option>. However, it extends the logic in one way: the
+            <constant>SIGHUP</constant> UNIX process signal is sent to the service's main process when the
+            service is asked to reload. (The signal to send can be tweaked via
+            <varname>ReloadSignal=</varname>, see below.). When
+            initiating the reload process the service is then expected to reply with a notification message
+            via <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+            that contains the <literal>RELOADING=1</literal> field in combination with
+            <literal>MONOTONIC_USEC=</literal> set to the current monotonic time
+            (i.e. <constant>CLOCK_MONOTONIC</constant> in
+            <citerefentry><refentrytitle>clock_gettime</refentrytitle><manvolnum>2</manvolnum></citerefentry>)
+            in µs, formatted as decimal string. Once reloading is complete another notification message must
+            be sent, containing <literal>READY=1</literal>. Using this service type and implementing this
+            reload protocol is an efficient alternative to providing an <varname>ExecReload=</varname>
+            command for reloading of the service's configuration.</para></listitem>
 
             <listitem><para>Behavior of <option>idle</option> is very similar to <option>simple</option>; however,
             actual execution of the service program is delayed until all active jobs are dispatched. This may be used
@@ -233,25 +249,52 @@
             anyway.</para></listitem>
           </itemizedlist>
 
-          <para>It is generally recommended to use <varname>Type=</varname><option>simple</option> for long-running
-          services whenever possible, as it is the simplest and fastest option. However, as this service type won't
-          propagate service start-up failures and doesn't allow ordering of other units against completion of
-          initialization of the service (which for example is useful if clients need to connect to the service through
-          some form of IPC, and the IPC channel is only established by the service itself — in contrast to doing this
-          ahead of time through socket or bus activation or similar), it might not be sufficient for many cases. If so,
-          <option>notify</option> or <option>dbus</option> (the latter only in case the service provides a D-Bus
-          interface) are the preferred options as they allow service program code to precisely schedule when to
-          consider the service started up successfully and when to proceed with follow-up units. The
-          <option>notify</option> service type requires explicit support in the service codebase (as
-          <function>sd_notify()</function> or an equivalent API needs to be invoked by the service at the appropriate
-          time) — if it's not supported, then <option>forking</option> is an alternative: it supports the traditional
-          UNIX service start-up protocol. Finally, <option>exec</option> might be an option for cases where it is
-          enough to ensure the service binary is invoked, and where the service binary itself executes no or little
-          initialization on its own (and its initialization is unlikely to fail). Note that using any type other than
-          <option>simple</option> possibly delays the boot process, as the service manager needs to wait for service
-          initialization to complete. It is hence recommended not to needlessly use any types other than
-          <option>simple</option>. (Also note it is generally not recommended to use <option>idle</option> or
-          <option>oneshot</option> for long-running services.)</para>
+          <para>It is generally recommended to use <varname>Type=</varname><option>simple</option> for
+          long-running services whenever possible, as it is the simplest and fastest option. However, as this
+          service type won't propagate service start-up failures and doesn't allow ordering of other units
+          against completion of initialization of the service (which for example is useful if clients need to
+          connect to the service through some form of IPC, and the IPC channel is only established by the
+          service itself — in contrast to doing this ahead of time through socket or bus activation or
+          similar), it might not be sufficient for many cases. If so, <option>notify</option>,
+          <option>notify-reload</option> or <option>dbus</option> (the latter only in case the service
+          provides a D-Bus interface) are the preferred options as they allow service program code to
+          precisely schedule when to consider the service started up successfully and when to proceed with
+          follow-up units. The <option>notify</option>/<option>notify-reload</option> service types require
+          explicit support in the service codebase (as <function>sd_notify()</function> or an equivalent API
+          needs to be invoked by the service at the appropriate time) — if it's not supported, then
+          <option>forking</option> is an alternative: it supports the traditional UNIX service start-up
+          protocol. Finally, <option>exec</option> might be an option for cases where it is enough to ensure
+          the service binary is invoked, and where the service binary itself executes no or little
+          initialization on its own (and its initialization is unlikely to fail). Note that using any type
+          other than <option>simple</option> possibly delays the boot process, as the service manager needs
+          to wait for service initialization to complete. It is hence recommended not to needlessly use any
+          types other than <option>simple</option>. (Also note it is generally not recommended to use
+          <option>idle</option> or <option>oneshot</option> for long-running services.)</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>ExitType=</varname></term>
+
+        <listitem>
+          <para>Specifies when the manager should consider the service to be finished. One of <option>main</option> or
+          <option>cgroup</option>:</para>
+
+          <itemizedlist>
+            <listitem><para>If set to <option>main</option> (the default), the service manager
+            will consider the unit stopped when the main process, which is determined according to the
+            <varname>Type=</varname>, exits. Consequently, it cannot be used with
+            <varname>Type=</varname><option>oneshot</option>.</para></listitem>
+
+            <listitem><para>If set to <option>cgroup</option>, the service will be considered running as long as at
+            least one process in the cgroup has not exited.</para></listitem>
+          </itemizedlist>
+
+          <para>It is generally recommended to use <varname>ExitType=</varname><option>main</option> when a service has
+          a known forking model and a main process can reliably be determined. <varname>ExitType=</varname>
+          <option>cgroup</option> is meant for applications whose forking model is not known ahead of time and which
+          might not have a specific main process. It is well suited for transient or automatically generated services,
+          such as graphical applications inside of a desktop environment.</para>
         </listitem>
       </varlistentry>
 
@@ -294,9 +337,10 @@
         the file may not be a symlink to a file owned by a different user (neither directly nor indirectly), and the
         PID file must refer to a process already belonging to the service.</para>
 
-        <para>Note that PID files should be avoided in modern projects. Use <option>Type=notify</option> or
-        <option>Type=simple</option> where possible, which does not require use of PID files to determine the
-        main process of a service and avoids needless forking.</para></listitem>
+        <para>Note that PID files should be avoided in modern projects. Use <option>Type=notify</option>,
+        <option>Type=notify-reload</option> or <option>Type=simple</option> where possible, which does not
+        require use of PID files to determine the main process of a service and avoids needless
+        forking.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -362,7 +406,7 @@
 
               <row>
                 <entry><literal>+</literal></entry>
-                <entry>If the executable path is prefixed with <literal>+</literal> then the process is executed with full privileges. In this mode privilege restrictions configured with <varname>User=</varname>, <varname>Group=</varname>, <varname>CapabilityBoundingSet=</varname> or the various file system namespacing options (such as <varname>PrivateDevices=</varname>, <varname>PrivateTmp=</varname>) are not applied to the invoked command line (but still affect any other <varname>ExecStart=</varname>, <varname>ExecStop=</varname>, … lines).</entry>
+                <entry>If the executable path is prefixed with <literal>+</literal> then the process is executed with full privileges. In this mode privilege restrictions configured with <varname>User=</varname>, <varname>Group=</varname>, <varname>CapabilityBoundingSet=</varname> or the various file system namespacing options (such as <varname>PrivateDevices=</varname>, <varname>PrivateTmp=</varname>) are not applied to the invoked command line (but still affect any other <varname>ExecStart=</varname>, <varname>ExecStop=</varname>, … lines). However, note that this will not bypass options that apply to the whole control group, such as <varname>DevicePolicy=</varname>, see <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry> for the full list.</entry>
               </row>
 
               <row>
@@ -418,12 +462,13 @@
         with a <literal>-</literal> exit successfully.</para>
 
         <para><varname>ExecStartPost=</varname> commands are only run after the commands specified in
-        <varname>ExecStart=</varname> have been invoked successfully, as determined by <varname>Type=</varname>
-        (i.e. the process has been started for <varname>Type=simple</varname> or <varname>Type=idle</varname>, the last
-        <varname>ExecStart=</varname> process exited successfully for <varname>Type=oneshot</varname>, the initial
-        process exited successfully for <varname>Type=forking</varname>, <literal>READY=1</literal> is sent for
-        <varname>Type=notify</varname>, or the <varname>BusName=</varname> has been taken for
-        <varname>Type=dbus</varname>).</para>
+        <varname>ExecStart=</varname> have been invoked successfully, as determined by
+        <varname>Type=</varname> (i.e. the process has been started for <varname>Type=simple</varname> or
+        <varname>Type=idle</varname>, the last <varname>ExecStart=</varname> process exited successfully for
+        <varname>Type=oneshot</varname>, the initial process exited successfully for
+        <varname>Type=forking</varname>, <literal>READY=1</literal> is sent for
+        <varname>Type=notify</varname>/<varname>Type=notify-reload</varname>, or the
+        <varname>BusName=</varname> has been taken for <varname>Type=dbus</varname>).</para>
 
         <para>Note that <varname>ExecStartPre=</varname> may not be
         used to start long-running processes. All processes forked
@@ -442,7 +487,7 @@
 
       <varlistentry>
         <term><varname>ExecCondition=</varname></term>
-        <listitem><para>Optional commands that are executed before the command(s) in <varname>ExecStartPre=</varname>.
+        <listitem><para>Optional commands that are executed before the commands in <varname>ExecStartPre=</varname>.
         Syntax is the same as for <varname>ExecStart=</varname>, except that multiple command lines are allowed and the
         commands are executed one after the other, serially.</para>
 
@@ -451,7 +496,7 @@
         commands are skipped and the unit is <emphasis>not</emphasis> marked as failed. However, if an
         <varname>ExecCondition=</varname> command exits with 255 or abnormally (e.g. timeout, killed by a
         signal, etc.), the unit will be considered failed (and remaining commands will be skipped). Exit code of 0 or
-        those matching <varname>SuccessExitStatus=</varname> will continue execution to the next command(s).</para>
+        those matching <varname>SuccessExitStatus=</varname> will continue execution to the next commands.</para>
 
         <para>The same recommendations about not running long-running processes in <varname>ExecStartPre=</varname>
         also applies to <varname>ExecCondition=</varname>. <varname>ExecCondition=</varname> will also run the commands
@@ -462,30 +507,26 @@
 
       <varlistentry>
         <term><varname>ExecReload=</varname></term>
-        <listitem><para>Commands to execute to trigger a configuration
-        reload in the service. This argument takes multiple command
-        lines, following the same scheme as described for
-        <varname>ExecStart=</varname> above. Use of this setting is
-        optional. Specifier and environment variable substitution is
-        supported here following the same scheme as for
+
+        <listitem><para>Commands to execute to trigger a configuration reload in the service. This argument
+        takes multiple command lines, following the same scheme as described for
+        <varname>ExecStart=</varname> above. Use of this setting is optional. Specifier and environment
+        variable substitution is supported here following the same scheme as for
         <varname>ExecStart=</varname>.</para>
 
-        <para>One additional, special environment variable is set: if
-        known, <varname>$MAINPID</varname> is set to the main process
-        of the daemon, and may be used for command lines like the
-        following:</para>
+        <para>One additional, special environment variable is set: if known, <varname>$MAINPID</varname> is
+        set to the main process of the daemon, and may be used for command lines like the following:</para>
 
         <programlisting>ExecReload=kill -HUP $MAINPID</programlisting>
 
-        <para>Note however that reloading a daemon by sending a signal
-        (as with the example line above) is usually not a good choice,
-        because this is an asynchronous operation and hence not
-        suitable to order reloads of multiple services against each
-        other. It is strongly recommended to set
-        <varname>ExecReload=</varname> to a command that not only
-        triggers a configuration reload of the daemon, but also
-        synchronously waits for it to complete. For example,
-        <citerefentry project='mankier'><refentrytitle>dbus-broker</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        <para>Note however that reloading a daemon by enqueuing a signal (as with the example line above) is
+        usually not a good choice, because this is an asynchronous operation and hence not suitable when
+        ordering reloads of multiple services against each other. It is thus strongly recommended to either
+        use <varname>Type=</varname><option>notify-reload</option> in place of
+        <varname>ExecReload=</varname>, or to set <varname>ExecReload=</varname> to a command that not only
+        triggers a configuration reload of the daemon, but also synchronously waits for it to complete. For
+        example, <citerefentry
+        project='mankier'><refentrytitle>dbus-broker</refentrytitle><manvolnum>1</manvolnum></citerefentry>
         uses the following:</para>
 
         <programlisting>ExecReload=busctl call org.freedesktop.DBus \
@@ -571,21 +612,23 @@
 
       <varlistentry>
         <term><varname>TimeoutStartSec=</varname></term>
-        <listitem><para>Configures the time to wait for start-up. If a daemon service does not signal start-up
-        completion within the configured time, the service will be considered failed and will be shut down again. The
-        precise action depends on the <varname>TimeoutStartFailureMode=</varname> option. Takes a unit-less value in
-        seconds, or a time span value such as "5min 20s". Pass <literal>infinity</literal> to disable the timeout logic.
-        Defaults to <varname>DefaultTimeoutStartSec=</varname> from the manager configuration file, except when
+        <listitem><para>Configures the time to wait for start-up. If a daemon service does not signal
+        start-up completion within the configured time, the service will be considered failed and will be
+        shut down again. The precise action depends on the <varname>TimeoutStartFailureMode=</varname>
+        option. Takes a unit-less value in seconds, or a time span value such as "5min 20s". Pass
+        <literal>infinity</literal> to disable the timeout logic. Defaults to
+        <varname>DefaultTimeoutStartSec=</varname> set in the manager, except when
         <varname>Type=oneshot</varname> is used, in which case the timeout is disabled by default (see
         <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
         </para>
 
-        <para>If a service of <varname>Type=notify</varname> sends <literal>EXTEND_TIMEOUT_USEC=…</literal>, this may cause
-        the start time to be extended beyond <varname>TimeoutStartSec=</varname>. The first receipt of this message
-        must occur before <varname>TimeoutStartSec=</varname> is exceeded, and once the start time has extended beyond
-        <varname>TimeoutStartSec=</varname>, the service manager will allow the service to continue to start, provided
-        the service repeats <literal>EXTEND_TIMEOUT_USEC=…</literal> within the interval specified until the service
-        startup status is finished by <literal>READY=1</literal>. (see
+        <para>If a service of <varname>Type=notify</varname>/<varname>Type=notify-reload</varname> sends
+        <literal>EXTEND_TIMEOUT_USEC=…</literal>, this may cause the start time to be extended beyond
+        <varname>TimeoutStartSec=</varname>. The first receipt of this message must occur before
+        <varname>TimeoutStartSec=</varname> is exceeded, and once the start time has extended beyond
+        <varname>TimeoutStartSec=</varname>, the service manager will allow the service to continue to start,
+        provided the service repeats <literal>EXTEND_TIMEOUT_USEC=…</literal> within the interval specified
+        until the service startup status is finished by <literal>READY=1</literal>. (see
         <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>).
         </para></listitem>
       </varlistentry>
@@ -608,12 +651,14 @@
         <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
         </para>
 
-        <para>If a service of <varname>Type=notify</varname> sends <literal>EXTEND_TIMEOUT_USEC=…</literal>, this may cause
-        the stop time to be extended beyond <varname>TimeoutStopSec=</varname>. The first receipt of this message
-        must occur before <varname>TimeoutStopSec=</varname> is exceeded, and once the stop time has extended beyond
-        <varname>TimeoutStopSec=</varname>, the service manager will allow the service to continue to stop, provided
-        the service repeats <literal>EXTEND_TIMEOUT_USEC=…</literal> within the interval specified, or terminates itself
-        (see <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>).
+        <para>If a service of <varname>Type=notify</varname>/<varname>Type=notify-reload</varname> sends
+        <literal>EXTEND_TIMEOUT_USEC=…</literal>, this may cause the stop time to be extended beyond
+        <varname>TimeoutStopSec=</varname>. The first receipt of this message must occur before
+        <varname>TimeoutStopSec=</varname> is exceeded, and once the stop time has extended beyond
+        <varname>TimeoutStopSec=</varname>, the service manager will allow the service to continue to stop,
+        provided the service repeats <literal>EXTEND_TIMEOUT_USEC=…</literal> within the interval specified,
+        or terminates itself (see
+        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>).
         </para></listitem>
       </varlistentry>
 
@@ -636,13 +681,15 @@
         <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
         </para>
 
-        <para>If a service of <varname>Type=notify</varname> handles <constant>SIGABRT</constant> itself (instead of relying
-        on the kernel to write a core dump) it can send <literal>EXTEND_TIMEOUT_USEC=…</literal> to
-        extended the abort time beyond <varname>TimeoutAbortSec=</varname>. The first receipt of this message
-        must occur before <varname>TimeoutAbortSec=</varname> is exceeded, and once the abort time has extended beyond
-        <varname>TimeoutAbortSec=</varname>, the service manager will allow the service to continue to abort, provided
-        the service repeats <literal>EXTEND_TIMEOUT_USEC=…</literal> within the interval specified, or terminates itself
-        (see <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>).
+        <para>If a service of <varname>Type=notify</varname>/<varname>Type=notify-reload</varname> handles
+        <constant>SIGABRT</constant> itself (instead of relying on the kernel to write a core dump) it can
+        send <literal>EXTEND_TIMEOUT_USEC=…</literal> to extended the abort time beyond
+        <varname>TimeoutAbortSec=</varname>. The first receipt of this message must occur before
+        <varname>TimeoutAbortSec=</varname> is exceeded, and once the abort time has extended beyond
+        <varname>TimeoutAbortSec=</varname>, the service manager will allow the service to continue to abort,
+        provided the service repeats <literal>EXTEND_TIMEOUT_USEC=…</literal> within the interval specified,
+        or terminates itself (see
+        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>).
         </para></listitem>
       </varlistentry>
 
@@ -685,17 +732,27 @@
         activation completed. Pass <literal>infinity</literal> (the default) to configure no runtime
         limit.</para>
 
-        <para>If a service of <varname>Type=notify</varname> sends <literal>EXTEND_TIMEOUT_USEC=…</literal>, this may cause
-        the runtime to be extended beyond <varname>RuntimeMaxSec=</varname>. The first receipt of this message
-        must occur before <varname>RuntimeMaxSec=</varname> is exceeded, and once the runtime has extended beyond
-        <varname>RuntimeMaxSec=</varname>, the service manager will allow the service to continue to run, provided
-        the service repeats <literal>EXTEND_TIMEOUT_USEC=…</literal> within the interval specified until the service
-        shutdown is achieved by <literal>STOPPING=1</literal> (or termination). (see
+        <para>If a service of <varname>Type=notify</varname>/<varname>Type=notify-reload</varname> sends
+        <literal>EXTEND_TIMEOUT_USEC=…</literal>, this may cause the runtime to be extended beyond
+        <varname>RuntimeMaxSec=</varname>. The first receipt of this message must occur before
+        <varname>RuntimeMaxSec=</varname> is exceeded, and once the runtime has extended beyond
+        <varname>RuntimeMaxSec=</varname>, the service manager will allow the service to continue to run,
+        provided the service repeats <literal>EXTEND_TIMEOUT_USEC=…</literal> within the interval specified
+        until the service shutdown is achieved by <literal>STOPPING=1</literal> (or termination). (see
         <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>).
         </para></listitem>
       </varlistentry>
 
       <varlistentry>
+        <term><varname>RuntimeRandomizedExtraSec=</varname></term>
+
+        <listitem><para>This option modifies <varname>RuntimeMaxSec=</varname> by increasing the maximum runtime by an
+        evenly distributed duration between 0 and the specified value (in seconds). If <varname>RuntimeMaxSec=</varname> is
+        unspecified, then this feature will be disabled.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><varname>WatchdogSec=</varname></term>
         <listitem><para>Configures the watchdog timeout for a service.
         The watchdog is activated when the start-up is completed. The
@@ -989,16 +1046,19 @@
       <varlistentry>
         <term><varname>NotifyAccess=</varname></term>
         <listitem><para>Controls access to the service status notification socket, as accessible via the
-        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry> call. Takes one
-        of <option>none</option> (the default), <option>main</option>, <option>exec</option> or
-        <option>all</option>. If <option>none</option>, no daemon status updates are accepted from the service
-        processes, all status update messages are ignored. If <option>main</option>, only service updates sent from the
-        main process of the service are accepted. If <option>exec</option>, only service updates sent from any of the
-        main or control processes originating from one of the <varname>Exec*=</varname> commands are accepted. If
-        <option>all</option>, all services updates from all members of the service's control group are accepted. This
-        option should be set to open access to the notification socket when using <varname>Type=notify</varname> or
-        <varname>WatchdogSec=</varname> (see above). If those options are used but <varname>NotifyAccess=</varname> is
-        not configured, it will be implicitly set to <option>main</option>.</para>
+        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+        call. Takes one of <option>none</option> (the default), <option>main</option>, <option>exec</option>
+        or <option>all</option>. If <option>none</option>, no daemon status updates are accepted from the
+        service processes, all status update messages are ignored. If <option>main</option>, only service
+        updates sent from the main process of the service are accepted. If <option>exec</option>, only
+        service updates sent from any of the main or control processes originating from one of the
+        <varname>Exec*=</varname> commands are accepted. If <option>all</option>, all services updates from
+        all members of the service's control group are accepted. This option should be set to open access to
+        the notification socket when using
+        <varname>Type=notify</varname>/<varname>Type=notify-reload</varname> or
+        <varname>WatchdogSec=</varname> (see above). If those options are used but
+        <varname>NotifyAccess=</varname> is not configured, it will be implicitly set to
+        <option>main</option>.</para>
 
         <para>Note that <function>sd_notify()</function> notifications may be attributed to units correctly only if
         either the sending process is still around at the time PID 1 processes the message, or if the sending process
@@ -1069,7 +1129,7 @@
         <term><varname>USBFunctionDescriptors=</varname></term>
         <listitem><para>Configure the location of a file containing
         <ulink
-        url="https://www.kernel.org/doc/Documentation/usb/functionfs.txt">USB
+        url="https://docs.kernel.org/usb/functionfs.html">USB
         FunctionFS</ulink> descriptors, for implementation of USB
         gadget functions. This is used only in conjunction with a
         socket unit with <varname>ListenUSBFunction=</varname>
@@ -1086,33 +1146,87 @@
         above.</para></listitem>
       </varlistentry>
 
-      <varlistentry>
+      <varlistentry id='oom-policy'>
         <term><varname>OOMPolicy=</varname></term>
 
-        <listitem><para>Configure the Out-Of-Memory (OOM) killer policy. On Linux, when memory becomes scarce
-        the kernel might decide to kill a running process in order to free up memory and reduce memory
-        pressure. This setting takes one of <constant>continue</constant>, <constant>stop</constant> or
-        <constant>kill</constant>. If set to <constant>continue</constant> and a process of the service is
-        killed by the kernel's OOM killer this is logged but the service continues running. If set to
-        <constant>stop</constant> the event is logged but the service is terminated cleanly by the service
-        manager. If set to <constant>kill</constant> and one of the service's processes is killed by the OOM
-        killer the kernel is instructed to kill all remaining processes of the service, too. Defaults to the
-        setting <varname>DefaultOOMPolicy=</varname> in
+        <listitem><para>Configure the out-of-memory (OOM) killing policy for the kernel and the userspace OOM
+        killer
+        <citerefentry><refentrytitle>systemd-oomd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+        On Linux, when memory becomes scarce to the point that the kernel has trouble allocating memory for
+        itself, it might decide to kill a running process in order to free up memory and reduce memory
+        pressure. Note that <filename>systemd-oomd.service</filename> is a more flexible solution that aims
+        to prevent out-of-memory situations for the userspace too, not just the kernel, by attempting to
+        terminate services earlier, before the kernel would have to act.</para>
+
+        <para>This setting takes one of <constant>continue</constant>, <constant>stop</constant> or
+        <constant>kill</constant>. If set to <constant>continue</constant> and a process in the unit is
+        killed by the OOM killer, this is logged but the unit continues running. If set to
+        <constant>stop</constant> the event is logged but the unit is terminated cleanly by the service
+        manager. If set to <constant>kill</constant> and one of the unit's processes is killed by the OOM
+        killer the kernel is instructed to kill all remaining processes of the unit too, by setting the
+        <filename>memory.oom.group</filename> attribute to <constant>1</constant>; also see <ulink
+        url="https://docs.kernel.org/admin-guide/cgroup-v2.html">kernel documentation</ulink>.</para>
+
+        <para>Defaults to the setting <varname>DefaultOOMPolicy=</varname> in
         <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-        is set to, except for services where <varname>Delegate=</varname> is turned on, where it defaults to
+        is set to, except for units where <varname>Delegate=</varname> is turned on, where it defaults to
         <constant>continue</constant>.</para>
 
         <para>Use the <varname>OOMScoreAdjust=</varname> setting to configure whether processes of the unit
         shall be considered preferred or less preferred candidates for process termination by the Linux OOM
         killer logic. See
         <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
-        details.</para></listitem>
+        details.</para>
+
+        <para>This setting also applies to <command>systemd-oomd</command>. Similarly to the kernel OOM
+        kills, this setting determines the state of the unit after <command>systemd-oomd</command> kills a
+        cgroup associated with it.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>OpenFile=</varname></term>
+        <listitem><para>Takes an argument of the form <literal>path<optional><replaceable>:fd-name:options</replaceable></optional></literal>,
+        where:
+        <itemizedlist>
+            <listitem><simpara><literal>path</literal> is a path to a file or an <constant>AF_UNIX</constant> socket in the file system;</simpara></listitem>
+            <listitem><simpara><literal>fd-name</literal> is a name that will be associated with the file descriptor;
+            the name may contain any ASCII character, but must exclude control characters and ":", and must be at most 255 characters in length;
+            it is optional and, if not provided, defaults to the file name;</simpara></listitem>
+            <listitem><simpara><literal>options</literal> is a comma-separated list of access options;
+            possible values are
+            <literal>read-only</literal>,
+            <literal>append</literal>,
+            <literal>truncate</literal>,
+            <literal>graceful</literal>;
+            if not specified, files will be opened in <constant>rw</constant> mode;
+            if <literal>graceful</literal> is specified, errors during file/socket opening are ignored.
+            Specifying the same option several times is treated as an error.</simpara></listitem>
+        </itemizedlist>
+        The file or socket is opened by the service manager and the file descriptor is passed to the service.
+        If the path is a socket, we call <function>connect()</function> on it.
+        See <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+        for more details on how to retrieve these file descriptors.</para>
+
+        <para>This setting is useful to allow services to access files/sockets that they can't access themselves
+        (due to running in a separate mount namespace, not having privileges, ...).</para>
+
+        <para>This setting can be specified multiple times, in which case all the specified paths are opened and the file descriptors passed to the service.
+        If the empty string is assigned, the entire list of open files defined prior to this is reset.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>ReloadSignal=</varname></term>
+        <listitem><para>Configures the UNIX process signal to send to the service's main process when asked
+        to reload the service's configuration. Defaults to <constant>SIGHUP</constant>. This option has no
+        effect unless <varname>Type=</varname><option>notify-reload</option> is used, see
+        above.</para></listitem>
       </varlistentry>
 
     </variablelist>
 
-    <para>Check
-    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> and
+    <para id='shared-unit-options'>Check
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, and
     <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more
     settings.</para>
   </refsect1>
@@ -1271,16 +1385,13 @@
       <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
       for details.</para>
 
-      <para>Note that this unit type does not include any type of
-      notification when a service has completed initialization. For
-      this, you should use other unit types, such as
-      <varname>Type=</varname><option>notify</option> if the service
-      understands systemd's notification protocol,
-      <varname>Type=</varname><option>forking</option> if the service
-      can background itself or
-      <varname>Type=</varname><option>dbus</option> if the unit
-      acquires a DBus name once initialization is complete. See
-      below.</para>
+      <para>Note that this unit type does not include any type of notification when a service has completed
+      initialization. For this, you should use other unit types, such as
+      <varname>Type=</varname><option>notify</option>/<varname>Type=</varname><option>notify-reload</option>
+      if the service understands systemd's notification protocol,
+      <varname>Type=</varname><option>forking</option> if the service can background itself or
+      <varname>Type=</varname><option>dbus</option> if the unit acquires a DBus name once initialization is
+      complete. See below.</para>
     </example>
 
     <example>
@@ -1457,15 +1568,12 @@
     <example>
       <title>Services that notify systemd about their initialization</title>
 
-      <para><varname>Type=</varname><option>simple</option> services
-      are really easy to write, but have the major disadvantage of
-      systemd not being able to tell when initialization of the given
-      service is complete. For this reason, systemd supports a simple
-      notification protocol that allows daemons to make systemd aware
-      that they are done initializing. Use
-      <varname>Type=</varname><option>notify</option> for this. A
-      typical service file for such a daemon would look like
-      this:</para>
+      <para><varname>Type=</varname><option>simple</option> services are really easy to write, but have the
+      major disadvantage of systemd not being able to tell when initialization of the given service is
+      complete. For this reason, systemd supports a simple notification protocol that allows daemons to make
+      systemd aware that they are done initializing. Use <varname>Type=</varname><option>notify</option> or
+      <varname>Type=</varname><option>notify-reload</option> for this. A typical service file for such a
+      daemon would look like this:</para>
 
       <programlisting>[Unit]
 Description=Simple notifying service
diff --git a/man/systemd.slice.xml b/man/systemd.slice.xml
index 0d3616f..5e61199 100644
--- a/man/systemd.slice.xml
+++ b/man/systemd.slice.xml
@@ -63,7 +63,7 @@
     </para>
 
     <para>See the <ulink
-    url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New
+    url="https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface">New
     Control Group Interfaces</ulink> for an introduction on how to make
     use of slice units from programs.</para>
   </refsect1>
@@ -99,6 +99,14 @@
   </refsect1>
 
   <refsect1>
+    <title>Options</title>
+
+    <para>Slice unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    No options specific to this file type are supported.</para>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
index 1600656..1f1f998 100644
--- a/man/systemd.socket.xml
+++ b/man/systemd.socket.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd.socket">
+<refentry id="systemd.socket" xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>systemd.socket</title>
     <productname>systemd</productname>
@@ -159,7 +159,11 @@
   <refsect1>
     <title>Options</title>
 
-    <para>Socket files must include a [Socket] section, which carries
+    <para>Socket unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
+    <para>Socket unit files must include a [Socket] section, which carries
     information about the socket or FIFO it supervises. A number of
     options that may be used in this section are shared with other
     unit types. These options are documented in
@@ -295,7 +299,7 @@
       <varlistentry>
         <term><varname>ListenUSBFunction=</varname></term>
         <listitem><para>Specifies a <ulink
-        url="https://www.kernel.org/doc/Documentation/usb/functionfs.txt">USB
+        url="https://docs.kernel.org/usb/functionfs.html">USB
         FunctionFS</ulink> endpoints location to listen on, for
         implementation of USB gadget functions. This expects an
         absolute file system path of a FunctionFS mount point as the argument.
@@ -388,36 +392,32 @@
 
       <varlistentry>
         <term><varname>Accept=</varname></term>
-        <listitem><para>Takes a boolean argument. If yes, a service
-        instance is spawned for each incoming connection and only the
-        connection socket is passed to it. If no, all listening
-        sockets themselves are passed to the started service unit, and
-        only one service unit is spawned for all connections (also see
-        above). This value is ignored for datagram sockets and FIFOs
-        where a single service unit unconditionally handles all
-        incoming traffic. Defaults to <option>no</option>. For
-        performance reasons, it is recommended to write new daemons
-        only in a way that is suitable for
-        <option>Accept=no</option>. A daemon listening on an
-        <constant>AF_UNIX</constant> socket may, but does not need to,
-        call
-        <citerefentry><refentrytitle>close</refentrytitle><manvolnum>2</manvolnum></citerefentry>
-        on the received socket before exiting. However, it must not
-        unlink the socket from a file system. It should not invoke
-        <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>2</manvolnum></citerefentry>
-        on sockets it got with <varname>Accept=no</varname>, but it
-        may do so for sockets it got with
-        <varname>Accept=yes</varname> set. Setting
-        <varname>Accept=yes</varname> is mostly useful to allow
-        daemons designed for usage with
-        <citerefentry project='freebsd'><refentrytitle>inetd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-        to work unmodified with systemd socket
-        activation.</para>
+        <listitem><para>Takes a boolean argument. If yes, a service instance is spawned for each incoming
+        connection and only the connection socket is passed to it. If no, all listening sockets themselves
+        are passed to the started service unit, and only one service unit is spawned for all connections
+        (also see above). This value is ignored for datagram sockets and FIFOs where a single service unit
+        unconditionally handles all incoming traffic. Defaults to <option>no</option>. For performance
+        reasons, it is recommended to write new daemons only in a way that is suitable for
+        <option>Accept=no</option>. A daemon listening on an <constant>AF_UNIX</constant> socket may, but
+        does not need to, call
+        <citerefentry><refentrytitle>close</refentrytitle><manvolnum>2</manvolnum></citerefentry> on the
+        received socket before exiting. However, it must not unlink the socket from a file system. It should
+        not invoke
+        <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>2</manvolnum></citerefentry> on
+        sockets it got with <varname>Accept=no</varname>, but it may do so for sockets it got with
+        <varname>Accept=yes</varname> set. Setting <varname>Accept=yes</varname> is mostly useful to allow
+        daemons designed for usage with <citerefentry
+        project='freebsd'><refentrytitle>inetd</refentrytitle><manvolnum>8</manvolnum></citerefentry> to work
+        unmodified with systemd socket activation.</para>
 
         <para>For IPv4 and IPv6 connections, the <varname>REMOTE_ADDR</varname> environment variable will
         contain the remote IP address, and <varname>REMOTE_PORT</varname> will contain the remote port. This
         is the same as the format used by CGI. For <constant>SOCK_RAW</constant>, the port is the IP
-        protocol.</para></listitem>
+        protocol.</para>
+
+        <para>It is recommended to set <varname>CollectMode=inactive-or-failed</varname> for service
+        instances activated via <varname>Accept=yes</varname>, to ensure that failed connection services are
+        cleaned up and released from memory, and do not accumulate.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -615,7 +615,7 @@
         the security label of the FIFO, or the security label for the
         incoming or outgoing connections of the socket, respectively.
         See <ulink
-        url="https://www.kernel.org/doc/Documentation/security/Smack.txt">Smack.txt</ulink>
+        url="https://docs.kernel.org/admin-guide/LSM/Smack.html">Smack</ulink>
         for details.</para></listitem>
       </varlistentry>
 
@@ -824,7 +824,7 @@
         <term><varname>TriggerLimitIntervalSec=</varname></term>
         <term><varname>TriggerLimitBurst=</varname></term>
 
-        <listitem><para>Configures a limit on how often this socket unit my be activated within a specific time
+        <listitem><para>Configures a limit on how often this socket unit may be activated within a specific time
         interval. The <varname>TriggerLimitIntervalSec=</varname> may be used to configure the length of the time
         interval in the usual time units <literal>us</literal>, <literal>ms</literal>, <literal>s</literal>,
         <literal>min</literal>, <literal>h</literal>, … and defaults to 2s (See
@@ -839,12 +839,7 @@
 
     </variablelist>
 
-    <para>Check
-    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    and
-    <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    for more settings.</para>
-
+    <xi:include href="systemd.service.xml" xpointer="shared-unit-options" />
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index b09c4e9..85eb8ad 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -33,6 +33,7 @@
     <filename>default.target</filename>,
     <filename>emergency.target</filename>,
     <filename>exit.target</filename>,
+    <filename>factory-reset.target</filename>,
     <filename>final.target</filename>,
     <filename>first-boot-complete.target</filename>,
     <filename>getty.target</filename>,
@@ -47,6 +48,8 @@
     <filename>initrd-root-device.target</filename>,
     <filename>initrd-root-fs.target</filename>,
     <filename>initrd-usr-fs.target</filename>,
+    <filename>integritysetup-pre.target</filename>,
+    <filename>integritysetup.target</filename>,
     <filename>kbrequest.target</filename>,
     <filename>kexec.target</filename>,
     <filename>local-fs-pre.target</filename>,
@@ -280,6 +283,12 @@
           </listitem>
         </varlistentry>
         <varlistentry>
+          <term><filename>factory-reset.target</filename></term>
+          <listitem>
+            <para>A special target to trigger a factory reset.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
           <term><filename>final.target</filename></term>
           <listitem>
             <para>A special target unit that is used during the shutdown
@@ -363,8 +372,8 @@
         <varlistentry>
           <term><filename>initrd.target</filename></term>
           <listitem>
-            <para>This is the default target in the initramfs, similar to <filename>default.target</filename>
-            in the main system. It is used to mount the real root and transition to it. See
+            <para>This is the default target in the initrd, similar to <filename>default.target</filename> in
+            the main system. It is used to mount the real root and transition to it. See
             <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
             more discussion.</para>
           </listitem>
@@ -491,21 +500,15 @@
             sufficiently set up. What precisely this requires is left to
             the implementation of the network managing service.</para>
 
-            <para>Note the distinction between this unit and
-            <filename>network.target</filename>. This unit is an active
-            unit (i.e. pulled in by the consumer rather than the
-            provider of this functionality) and pulls in a service which
-            possibly adds substantial delays to further execution. In
-            contrast, <filename>network.target</filename> is a passive
-            unit (i.e. pulled in by the provider of the functionality,
-            rather than the consumer) that usually does not delay
-            execution much. Usually, <filename>network.target</filename>
-            is part of the boot of most systems, while
-            <filename>network-online.target</filename> is not, except
-            when at least one unit requires it. Also see <ulink
-            url="https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget">Running
-            Services After the Network is up</ulink> for more
-            information.</para>
+            <para>Note the distinction between this unit and <filename>network.target</filename>. This unit
+            is an active unit (i.e. pulled in by the consumer rather than the provider of this functionality)
+            and pulls in a service which possibly adds substantial delays to further execution. In contrast,
+            <filename>network.target</filename> is a passive unit (i.e. pulled in by the provider of the
+            functionality, rather than the consumer) that usually does not delay execution much. Usually,
+            <filename>network.target</filename> is part of the boot of most systems, while
+            <filename>network-online.target</filename> is not, except when at least one unit requires
+            it. Also see <ulink url="https://systemd.io/NETWORK_ONLINE">Running Services After the Network Is
+            Up</ulink> for more information.</para>
 
             <para>All mount units for remote network file systems automatically pull in this unit, and order
             themselves after it. Note that networking daemons that simply <emphasis>provide</emphasis>
@@ -982,8 +985,8 @@
               will be stopped before the network — to whatever level it might be set up by then — is shut
               down. It is hence useful when writing service files that require network access on shutdown,
               which should order themselves after this target, but not pull it in. Also see <ulink
-              url="https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget">Running Services After
-              the Network is up</ulink> for more information.</para></listitem>
+              url="https://systemd.io/NETWORK_ONLINE">Running Services After the Network Is Up</ulink> for
+              more information.</para></listitem>
             </itemizedlist>
 
             <para>It must emphasized that at start-up there's no guarantee that hardware-based devices have
@@ -994,11 +997,11 @@
         <varlistentry>
           <term><filename>network-pre.target</filename></term>
           <listitem>
-            <para>This passive target unit may be pulled in by services
-            that want to run before any network is set up, for example
-            for the purpose of setting up a firewall. All network
-            management software orders itself after this target, but
-            does not pull it in.</para>
+            <para>This passive target unit may be pulled in by services that want to run before any network
+            is set up, for example for the purpose of setting up a firewall. All network management software
+            orders itself after this target, but does not pull it in. Also see <ulink
+            url="https://systemd.io/NETWORK_ONLINE">Running Services After the Network Is Up</ulink> for more
+            information.</para>
           </listitem>
         </varlistentry>
         <varlistentry>
diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
index 2a867f9..8287382 100644
--- a/man/systemd.swap.xml
+++ b/man/systemd.swap.xml
@@ -3,9 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd.swap"
-          xmlns:xi="http://www.w3.org/2001/XInclude">
-
+<refentry id="systemd.swap" xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>systemd.swap</title>
     <productname>systemd</productname>
@@ -169,6 +167,10 @@
   <refsect1>
     <title>Options</title>
 
+    <para>Swap unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
     <para>Swap unit files must include a [Swap] section, which carries
     information about the swap device it supervises. A number of
     options that may be used in this section are shared with other
@@ -235,11 +237,7 @@
       </varlistentry>
     </variablelist>
 
-    <para>Check
-    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    and
-    <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-    for more settings.</para>
+    <xi:include href="systemd.service.xml" xpointer="shared-unit-options" />
   </refsect1>
 
   <refsect1>
diff --git a/man/systemd.syntax.xml b/man/systemd.syntax.xml
index e900747..2fc2288 100644
--- a/man/systemd.syntax.xml
+++ b/man/systemd.syntax.xml
@@ -42,8 +42,7 @@
       <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemd.nspawn</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>
       </para></listitem>
 
       <listitem><para>link files, see
@@ -65,11 +64,15 @@
       <citerefentry><refentrytitle>systemd-sleep.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>timesyncd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
       </para></listitem>
+
+      <listitem><para>nspawn files, see
+        <citerefentry><refentrytitle>systemd.nspawn</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+      </para></listitem>
     </itemizedlist>
     </para>
 
     <para>The syntax is inspired by
-    <ulink url="http://standards.freedesktop.org/desktop-entry-spec/latest/">XDG Desktop Entry Specification</ulink>
+    <ulink url="https://standards.freedesktop.org/desktop-entry-spec/latest/">XDG Desktop Entry Specification</ulink>
     <filename>.desktop</filename> files, which are in turn inspired by Microsoft Windows
     <filename>.ini</filename> files.
     </para>
diff --git a/man/systemd.system-credentials.xml b/man/systemd.system-credentials.xml
new file mode 100644
index 0000000..b473a58
--- /dev/null
+++ b/man/systemd.system-credentials.xml
@@ -0,0 +1,228 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="systemd.system-credentials">
+
+  <refentryinfo>
+    <title>systemd.system-credentials</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd.system-credentials</refentrytitle>
+    <manvolnum>7</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd.system-credentials</refname>
+    <refpurpose>System Credentials</refpurpose>
+  </refnamediv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><ulink url="https://systemd.io/CREDENTIALS">System and Service Credentials</ulink> are data objects
+    that may be passed into booted systems or system services as they are invoked. They can be acquired from
+    various external sources, and propagated into the system and from there into system services. Credentials
+    may optionally be encrypted with a machine-specific key and/or locked to the local TPM2 device, and are
+    only decrypted when the consuming service is invoked.</para>
+
+    <para>System credentials may be used to provision and configure various aspects of the system. Depending
+    on the consuming component credentials are only used on initial invocations or are needed for all
+    invocations.</para>
+
+    <para>Credentials may be used for any kind of data, binary or text, and may carry passwords, secrets,
+    certificates, cryptographic key material, identity information, configuration, and more.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Well known system credentials</title>
+
+    <variablelist>
+      <varlistentry>
+        <term><varname>firstboot.keymap</varname></term>
+        <listitem>
+          <para>The console key mapping to set (e.g. <literal>de</literal>).  Read by
+          <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+          and only honoured if no console keymap has been configured before.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>firstboot.locale</varname></term>
+        <term><varname>firstboot.locale-message</varname></term>
+        <listitem>
+          <para>The system locale to set (e.g. <literal>de_DE.UTF-8</literal>). Read by
+          <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+          and only honoured if no locale has been configured before. <varname>firstboot.locale</varname> sets
+          <literal>LANG</literal>, while <varname>firstboot.locale-message</varname> sets
+          <literal>LC_MESSAGES</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>firstboot.timezone</varname></term>
+        <listitem>
+          <para>The system timezone to set (e.g. <literal>Europe/Berlin</literal>).  Read by
+          <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+          and only honoured if no system timezone has been configured before.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>login.issue</varname></term>
+        <listitem>
+          <para>The data of this credential is written to
+          <filename>/etc/issue.d/50-provision.conf</filename>, if the file doesn't exist yet.
+          <citerefentry project='man-pages'><refentrytitle>agetty</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+          reads this file and shows its contents at the login prompt of terminal logins. See
+          <citerefentry project='man-pages'><refentrytitle>issue</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          for details.</para>
+
+          <para>Consumed by <filename>/usr/lib/tmpfiles.d/provision.conf</filename>, see
+          <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>login.motd</varname></term>
+        <listitem>
+          <para>The data of this credential is written to <filename>/etc/motd.d/50-provision.conf</filename>,
+          if the file doesn't exist yet.
+          <citerefentry project='man-pages'><refentrytitle>pam_motd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+          reads this file and shows its contents as "message of the day" during terminal logins. See
+          <citerefentry project='man-pages'><refentrytitle>motd</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          for details.</para>
+
+          <para>Consumed by <filename>/usr/lib/tmpfiles.d/provision.conf</filename>, see
+          <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>network.hosts</varname></term>
+        <listitem>
+          <para>The data of this credential is written to <filename>/etc/hosts</filename>, if the file
+          doesn't exist yet. See
+          <citerefentry project='man-pages'><refentrytitle>hosts</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          for details.</para>
+
+          <para>Consumed by <filename>/usr/lib/tmpfiles.d/provision.conf</filename>, see
+          <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>network.dns</varname></term>
+        <term><varname>network.search_domains</varname></term>
+        <listitem>
+          <para>DNS server information and search domains. Read by
+          <citerefentry><refentrytitle>systemd-resolved.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>passwd.hashed-password.root</varname></term>
+        <term><varname>passwd.plaintext-password.root</varname></term>
+        <listitem>
+          <para>May contain the password (either in UNIX hashed format, or in plaintext) for the root users.
+          Read by both
+          <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+          and
+          <citerefentry><refentrytitle>systemd-sysusers</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+          and only honoured if no root password has been configured before.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>passwd.shell.root</varname></term>
+        <listitem>
+          <para>The path to the shell program (e.g. <literal>/bin/bash</literal>) for the root user.  Read by
+          both
+          <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+          and
+          <citerefentry><refentrytitle>systemd-sysusers</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+          and only honoured if no root shell has been configured before.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>ssh.authorized_keys.root</varname></term>
+        <listitem>
+          <para>The data of this credential is written to <filename>/root/.ssh/authorized_keys</filename>, if
+          the file doesn't exist yet. This allows provisioning SSH access for the system's root user.</para>
+
+          <para>Consumed by <filename>/usr/lib/tmpfiles.d/provision.conf</filename>, see
+          <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>sysusers.extra</varname></term>
+        <listitem>
+          <para>Additional
+          <citerefentry><refentrytitle>sysusers.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          lines to process during boot.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>sysctl.extra</varname></term>
+        <listitem>
+          <para>Additional
+          <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> lines
+          to process during boot.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>tmpfiles.extra</varname></term>
+        <listitem>
+          <para>Additional
+          <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          lines to process during boot.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>vconsole.keymap</varname></term>
+        <term><varname>vconsole.keymap_toggle</varname></term>
+        <term><varname>vconsole.font</varname></term>
+        <term><varname>vconsole.font_map</varname></term>
+        <term><varname>vconsole.font_unimap</varname></term>
+        <listitem>
+          <para>Console settings to apply, see
+          <citerefentry><refentrytitle>systemd-vconsole-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> for details.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>vmm.notify_socket</varname></term>
+        <listitem>
+          <para>This credential is parsed looking for an <constant>AF_VSOCK</constant> or
+          <constant>AF_UNIX</constant> address where to send a <constant>READY=1</constant>
+          notification datagram when the system has finished booting. See:
+          <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+          This is useful for hypervisors/VMMs or other processes on the host
+          to receive a notification via VSOCK when a virtual machine has finished booting.
+          Note that in case the hypervisor does not support <constant>SOCK_DGRAM</constant>
+          over <constant>AF_VSOCK</constant>, <constant>SOCK_SEQPACKET</constant> will be
+          tried instead. The credential payload for <constant>AF_VSOCK</constant> should be
+          in the form: <literal>vsock:CID:PORT</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+      <title>See Also</title>
+      <para>
+        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+        <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+      </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/systemd.target.xml b/man/systemd.target.xml
index bd618d8..604b14e 100644
--- a/man/systemd.target.xml
+++ b/man/systemd.target.xml
@@ -85,6 +85,14 @@
   </refsect1>
 
   <refsect1>
+    <title>Options</title>
+
+    <para>Target unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    No options specific to this file type are supported.</para>
+  </refsect1>
+
+  <refsect1>
     <title>Example</title>
 
     <example>
diff --git a/man/systemd.time.xml b/man/systemd.time.xml
index a759707..643ff7d 100644
--- a/man/systemd.time.xml
+++ b/man/systemd.time.xml
@@ -220,9 +220,8 @@
     times starting with the start value, and continuing with all multiples of the repetition value relative
     to the start value, ending at the end value the latest.</para>
 
-    <para>A date specification may use <literal>~</literal> to indicate the
-    last day(s) in a month. For example, <literal>*-02~03</literal> means
-    "the third last day in February," and <literal>Mon *-05~07/1</literal>
+    <para>A date specification may use <literal>~</literal> to indicate the last day in a month. For example,
+    <literal>*-02~03</literal> means "the third last day in February," and <literal>Mon *-05~07/1</literal>
     means "the last Monday in May."</para>
 
     <para>The seconds component may contain decimal fractions both in
diff --git a/man/systemd.timer.xml b/man/systemd.timer.xml
index 84c5bb5..a8c8241 100644
--- a/man/systemd.timer.xml
+++ b/man/systemd.timer.xml
@@ -3,7 +3,7 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
-<refentry id="systemd.timer">
+<refentry id="systemd.timer" xmlns:xi="http://www.w3.org/2001/XInclude">
   <refentryinfo>
     <title>systemd.timer</title>
     <productname>systemd</productname>
@@ -94,7 +94,11 @@
   <refsect1>
     <title>Options</title>
 
-    <para>Timer files must include a [Timer] section, which carries
+    <para>Timer unit files may include [Unit] and [Install] sections, which are described in
+    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+    </para>
+
+    <para>Timer unit files must include a [Timer] section, which carries
     information about the timer it defines. The options specific to
     the [Timer] section of timer units are the following:</para>
 
@@ -178,7 +182,6 @@
         precise time configured with these settings, as they are
         subject to the <varname>AccuracySec=</varname> setting
         below.</para></listitem>
-
       </varlistentry>
 
       <varlistentry>
@@ -357,10 +360,16 @@
         <option>true</option>.</para></listitem>
       </varlistentry>
     </variablelist>
+
+    <xi:include href="systemd.service.xml" xpointer="shared-unit-options" />
   </refsect1>
 
   <refsect1>
       <title>See Also</title>
+      <para>Environment variables with details on the trigger will be set for triggered units. See the
+      <literal>Environment Variables Set on Triggered Units</literal> section in
+      <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+      for more details.</para>
       <para>
         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
         <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index 7df73e1..9411ea2 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -110,19 +110,19 @@
     <para>Unit files are loaded from a set of paths determined during compilation, described in the next
     section.</para>
 
-    <para>Valid unit names consist of a "name prefix" and a dot and a suffix specifying the unit type. The
-    "unit prefix" must consist of one or more valid characters (ASCII letters, digits, <literal>:</literal>,
-    <literal>-</literal>, <literal>_</literal>, <literal>.</literal>, and <literal>\</literal>). The total
-    length of the unit name including the suffix must not exceed 256 characters. The type suffix must be one
-    of <literal>.service</literal>, <literal>.socket</literal>, <literal>.device</literal>,
-    <literal>.mount</literal>, <literal>.automount</literal>, <literal>.swap</literal>,
-    <literal>.target</literal>, <literal>.path</literal>, <literal>.timer</literal>,
-    <literal>.slice</literal>, or <literal>.scope</literal>.</para>
+    <para>Valid unit names consist of a "unit name prefix", and a suffix specifying the unit type which
+    begins with a dot. The "unit name prefix" must consist of one or more valid characters (ASCII letters,
+    digits, <literal>:</literal>, <literal>-</literal>, <literal>_</literal>, <literal>.</literal>, and
+    <literal>\</literal>). The total length of the unit name including the suffix must not exceed 255
+    characters. The unit type suffix must be one of <literal>.service</literal>, <literal>.socket</literal>,
+    <literal>.device</literal>, <literal>.mount</literal>, <literal>.automount</literal>,
+    <literal>.swap</literal>, <literal>.target</literal>, <literal>.path</literal>,
+    <literal>.timer</literal>, <literal>.slice</literal>, or <literal>.scope</literal>.</para>
 
-    <para>Units names can be parameterized by a single argument called the "instance name". The unit is then
+    <para>Unit names can be parameterized by a single argument called the "instance name". The unit is then
     constructed based on a "template file" which serves as the definition of multiple services or other
-    units. A template unit must have a single <literal>@</literal> at the end of the name (right before the
-    type suffix). The name of the full unit is formed by inserting the instance name between
+    units. A template unit must have a single <literal>@</literal> at the end of the unit name prefix (right
+    before the type suffix). The name of the full unit is formed by inserting the instance name between
     <literal>@</literal> and the unit type suffix. In the unit file itself, the instance parameter may be
     referred to using <literal>%i</literal> and other specifiers, see below.</para>
 
@@ -138,7 +138,7 @@
     a symlink, so when <command>systemd</command> is asked through D-Bus to load
     <filename>dbus-org.freedesktop.network1.service</filename>, it'll load
     <filename>systemd-networkd.service</filename>. As another example, <filename>default.target</filename> —
-    the default system target started at boot — is commonly symlinked (aliased) to either
+    the default system target started at boot — is commonly aliased to either
     <filename>multi-user.target</filename> or <filename>graphical.target</filename> to select what is started
     by default. Alias names may be used in commands like <command>disable</command>,
     <command>start</command>, <command>stop</command>, <command>status</command>, and similar, and in all
@@ -154,8 +154,12 @@
     template instance (e.g. <literal>alias@inst.service</literal>) may be a symlink to different template
     (e.g. <literal>template@inst.service</literal>). In that case, just this specific instance is aliased,
     while other instances of the template (e.g. <literal>alias@foo.service</literal>,
-    <literal>alias@bar.service</literal>) are not aliased. Those rule preserve the requirement that the
-    instance (if any) is always uniquely defined for a given unit and all its aliases.</para>
+    <literal>alias@bar.service</literal>) are not aliased. Those rules preserve the requirement that the
+    instance (if any) is always uniquely defined for a given unit and all its aliases. The target of alias
+    symlink must point to a valid unit file location, i.e. the symlink target name must match the symlink
+    source name as described, and the destination path must be in one of the unit search paths, see UNIT FILE
+    LOAD PATH section below for more details. Note that the target file may not exist, i.e. the symlink may
+    be dangling.</para>
 
     <para>Unit files may specify aliases through the <varname>Alias=</varname> directive in the [Install]
     section. When the unit is enabled, symlinks will be created for those names, and removed when the unit is
@@ -175,11 +179,18 @@
     exists for <varname>Requires=</varname> type dependencies as well, the directory suffix is
     <filename>.requires/</filename> in this case. This functionality is useful to hook units into the
     start-up of other units, without having to modify their unit files. For details about the semantics of
-    <varname>Wants=</varname>, see below. The preferred way to create symlinks in the
-    <filename>.wants/</filename> or <filename>.requires/</filename> directory of a unit file is by embedding
-    the dependency in [Install] section of the target unit, and creating the symlink in the file system with
-    the <command>enable</command> or <command>preset</command> commands of
-    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
+    <varname>Wants=</varname> and <varname>Requires=</varname>, see below. The preferred way to create
+    symlinks in the <filename>.wants/</filename> or <filename>.requires/</filename> directories is by
+    specifying the dependency in [Install] section of the target unit, and creating the symlink in the file
+    system with the <command>enable</command> or <command>preset</command> commands of
+    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.  The
+    target can be a normal unit (either plain or a specific instance of a template unit). In case when the
+    source unit is a template, the target can also be a template, in which case the instance will be
+    "propagated" to the target unit to form a valid unit instance. The target of symlinks in
+    <filename>.wants/</filename> or <filename>.requires/</filename> must thus point to a valid unit file
+    location, i.e. the symlink target name must satisfy the described requirements, and the destination path
+    must be in one of the unit search paths, see UNIT FILE LOAD PATH section below for more details. Note
+    that the target file may not exist, i.e. the symlink may be dangling.</para>
 
     <para>Along with a unit file <filename>foo.service</filename>, a "drop-in" directory
     <filename>foo.service.d/</filename> may exist. All files with the suffix
@@ -320,11 +331,11 @@
 
       <para>For example, target units will complement all configured dependencies of type
       <varname>Wants=</varname> or <varname>Requires=</varname> with dependencies of type
-      <varname>After=</varname> unless <varname>DefaultDependencies=no</varname> is set in the
-      specified units. See
+      <varname>After=</varname>. See
       <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-      for details. Note that this behavior can be turned off by setting
-      <varname>DefaultDependencies=no</varname>.</para>
+      for details. Note that this behavior can be opted out by setting
+      <varname>DefaultDependencies=no</varname> in the specified units, or it can be selectively
+      overridden via an explicit <varname>Before=</varname> dependency.</para>
     </refsect2>
   </refsect1>
 
@@ -427,11 +438,11 @@
             <entry><filename>$XDG_RUNTIME_DIR/systemd/user.control</filename></entry>
           </row>
           <row>
-            <entry><filename>/run/systemd/transient</filename></entry>
+            <entry><filename>$XDG_RUNTIME_DIR/systemd/transient</filename></entry>
             <entry>Dynamic configuration for transient units</entry>
           </row>
           <row>
-            <entry><filename>/run/systemd/generator.early</filename></entry>
+            <entry><filename>$XDG_RUNTIME_DIR/systemd/generator.early</filename></entry>
             <entry>Generated units with high priority (see <replaceable>early-dir</replaceable> in <citerefentry
             ><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>)</entry>
           </row>
@@ -501,13 +512,30 @@
     <programlisting>systemd-analyze --user unit-paths</programlisting>
     </para>
 
-    <para>Moreover, additional units might be loaded into systemd from
-    directories not on the unit load path by creating a symlink pointing to a
-    unit file in the directories. You can use <command>systemctl link</command>
-    for this operation. See
-    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    for its usage and precaution.
-    </para>
+    <para>Moreover, additional units might be loaded into systemd from directories not on the unit load path
+    by creating a symlink pointing to a unit file in the directories. You can use <command>systemctl
+    link</command> for this; see
+    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>. The file
+    system where the linked unit files are located must be accessible when systemd is started (e.g. anything
+    underneath <filename>/home/</filename> or <filename>/var/</filename> is not allowed, unless those
+    directories are located on the root file system).</para>
+
+    <para>It is important to distinguish "linked unit files" from "unit file aliases": any symlink where the
+    symlink <emphasis>target</emphasis> is within the unit load path becomes an alias: the source name and
+    the target file name must satisfy specific constraints listed above in the discussion of aliases, but the
+    symlink target doesn't have to exist, and in fact the symlink target path is not used, except to check
+    whether the target is within the unit load path. In contrast, a symlink which goes outside of the unit
+    load path signifies a linked unit file. The symlink is followed when loading the file, but the
+    destination name is otherwise unused (and may even not be a valid unit file name). For example, symlinks
+    <filename index='false'>/etc/systemd/system/alias1.service</filename> → <filename index='false'>service1.service</filename>,
+    <filename index='false'>/etc/systemd/system/alias2.service</filename> → <filename index='false'>/usr/lib/systemd/service1.service</filename>,
+    <filename index='false'>/etc/systemd/system/alias3.service</filename> → <filename index='false'>/etc/systemd/system/service1.service</filename>
+    are all valid aliases and <filename index='false'>service1.service</filename> will have
+    four names, even if the unit file is located at
+    <filename index='false'>/run/systemd/system/service1.service</filename>. In contrast,
+    a symlink <filename index='false'>/etc/systemd/system/link1.service</filename> → <filename index='false'>../link1_service_file</filename>
+    means that <filename index='false'>link1.service</filename> is a "linked unit" and the contents of
+    <filename index='false'>/etc/systemd/link1_service_file</filename> provide its configuration.</para>
   </refsect1>
 
   <refsect1>
@@ -628,8 +656,8 @@
         <para>If this unit gets activated, the units listed will be activated as well. If one of
         the other units fails to activate, and an ordering dependency <varname>After=</varname> on the
         failing unit is set, this unit will not be started. Besides, with or without specifying
-        <varname>After=</varname>, this unit will be stopped if one of the other units is explicitly
-        stopped.</para>
+        <varname>After=</varname>, this unit will be stopped (or restarted) if one of the other units is
+        explicitly stopped (or restarted).</para>
 
         <para>Often, it is a better choice to use <varname>Wants=</varname> instead of
         <varname>Requires=</varname> in order to achieve a system that is more robust when dealing with
@@ -677,7 +705,7 @@
         <para>When used in conjunction with <varname>After=</varname> on the same unit the behaviour of
         <varname>BindsTo=</varname> is even stronger. In this case, the unit bound to strictly has to be in active
         state for this unit to also be in active state. This not only means a unit bound to another unit that suddenly
-        enters inactive state, but also one that is bound to another unit that gets skipped due to a failed condition
+        enters inactive state, but also one that is bound to another unit that gets skipped due to an unmet condition
         check (such as <varname>ConditionPathExists=</varname>, <varname>ConditionPathIsSymbolicLink=</varname>, … —
         see below) will be stopped, should it be running. Hence, in many cases it is best to combine
         <varname>BindsTo=</varname> with <varname>After=</varname>.</para>
@@ -711,7 +739,7 @@
       <varlistentry>
         <term><varname>Upholds=</varname></term>
 
-        <listitem><para>Configures dependencies similar to <varname>Wants=</varname>, but as long a this unit
+        <listitem><para>Configures dependencies similar to <varname>Wants=</varname>, but as long as this unit
         is up, all units listed in <varname>Upholds=</varname> are started whenever found to be inactive or
         failed, and no job is queued for them. While a <varname>Wants=</varname> dependency on another unit
         has a one-time effect when this units started, a <varname>Upholds=</varname> dependency on it has a
@@ -1142,7 +1170,7 @@
 
       <para>The <varname>AssertArchitecture=</varname>, <varname>AssertVirtualization=</varname>, … options
       are similar to conditions but cause the start job to fail (instead of being skipped). The failed check
-      is logged. Units with failed conditions are considered to be in a clean state and will be garbage
+      is logged. Units with unmet conditions are considered to be in a clean state and will be garbage
       collected if they are not referenced. This means that when queried, the condition failure may or may
       not show up in the state of the unit.</para>
 
@@ -1207,11 +1235,32 @@
         <varlistentry>
           <term><varname>ConditionFirmware=</varname></term>
 
-          <listitem><para>Check whether the system's firmware is of a certain type. Possible values are:
-          <literal>uefi</literal> (for systems with EFI),
-          <literal>device-tree</literal> (for systems with a device tree) and
-          <literal>device-tree-compatible(xyz)</literal> (for systems with a device tree that is compatible to <literal>xyz</literal>).</para>
-          </listitem>
+          <listitem><para>Check whether the system's firmware is of a certain type. The following values are
+          possible:</para>
+
+          <itemizedlist>
+            <listitem><para><literal>uefi</literal> matches systems with EFI.</para></listitem>
+
+            <listitem><para><literal>device-tree</literal> matches systems with a device tree.
+            </para></listitem>
+
+            <listitem><para><literal>device-tree-compatible(<replaceable>value</replaceable>)</literal>
+            matches systems with a device tree that are compatible with <literal>value</literal>.
+            </para></listitem>
+
+            <listitem><para><literal>smbios-field(<replaceable>field</replaceable>
+            <replaceable>operator</replaceable> <replaceable>value</replaceable>)</literal> matches systems
+            with a SMBIOS field containing a certain value. <replaceable>field</replaceable> is the name of
+            the SMBIOS field exposed as <literal>sysfs</literal> attribute file below
+            <filename>/sys/class/dmi/id/</filename>. <replaceable>operator</replaceable> is one of
+            <literal>&lt;</literal>, <literal>&lt;=</literal>, <literal>&gt;=</literal>,
+            <literal>&gt;</literal>, <literal>==</literal>, <literal>&lt;&gt;</literal> for version
+            comparisons, <literal>=</literal> and <literal>!=</literal> for literal string comparisons, or
+            <literal>$=</literal>, <literal>!$=</literal> for shell-style glob comparisons.
+            <replaceable>value</replaceable> is the expected value of the SMBIOS field value (possibly
+            containing shell style globs in case <literal>$=</literal>/<literal>!$=</literal> is used).
+            </para></listitem>
+          </itemizedlist></listitem>
         </varlistentry>
 
         <varlistentry>
@@ -1235,6 +1284,8 @@
           <literal>uml</literal>,
           <literal>bhyve</literal>,
           <literal>qnx</literal>,
+          <literal>apple</literal>,
+          <literal>sre</literal>,
           <literal>openvz</literal>,
           <literal>lxc</literal>,
           <literal>lxc-libvirt</literal>,
@@ -1287,12 +1338,13 @@
           <term><varname>ConditionKernelVersion=</varname></term>
 
           <listitem><para><varname>ConditionKernelVersion=</varname> may be used to check whether the kernel
-          version (as reported by <command>uname -r</command>) matches a certain expression (or if prefixed
-          with the exclamation mark does not match it). The argument must be a list of (potentially quoted)
-          expressions.  For each of the expressions, if it starts with one of <literal>&lt;</literal>,
-          <literal>&lt;=</literal>, <literal>=</literal>, <literal>!=</literal>, <literal>&gt;=</literal>,
-          <literal>&gt;</literal> a relative version comparison is done, otherwise the specified string is
-          matched with shell-style globs.</para>
+          version (as reported by <command>uname -r</command>) matches a certain expression, or if prefixed
+          with the exclamation mark, does not match. The argument must be a list of (potentially quoted)
+          expressions. Each expression starts with one of <literal>=</literal> or <literal>!=</literal> for
+          string comparisons, <literal>&lt;</literal>, <literal>&lt;=</literal>, <literal>==</literal>,
+          <literal>&lt;&gt;</literal>, <literal>&gt;=</literal>, <literal>&gt;</literal> for version
+          comparisons, or <literal>$=</literal>, <literal>!$=</literal> for a shell-style glob match. If no
+          operator is specified, <literal>$=</literal> is implied.</para>
 
           <para>Note that using the kernel version string is an unreliable way to determine which features
           are supported by a kernel, because of the widespread practice of backporting drivers, features, and
@@ -1303,6 +1355,19 @@
         </varlistentry>
 
         <varlistentry>
+          <term><varname>ConditionCredential=</varname></term>
+
+          <listitem><para><varname>ConditionCredential=</varname> may be used to check whether a credential
+          by the specified name was passed into the service manager. See <ulink
+          url="https://systemd.io/CREDENTIALS">System and Service Credentials</ulink> for details about
+          credentials. If used in services for the system service manager this may be used to conditionalize
+          services based on system credentials passed in. If used in services for the per-user service
+          manager this may be used to conditionalize services based on credentials passed into the
+          <filename>unit@.service</filename> service instance belonging to the user. The argument must be a
+          valid credential name.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
           <term><varname>ConditionEnvironment=</varname></term>
 
           <listitem><para><varname>ConditionEnvironment=</varname> may be used to check whether a specific
@@ -1396,15 +1461,18 @@
           <term><varname>ConditionFirstBoot=</varname></term>
 
           <listitem><para>Takes a boolean argument. This condition may be used to conditionalize units on
-          whether the system is booting up for the first time.  This roughly means that <filename>/etc/</filename>
-          is unpopulated (for details, see "First Boot Semantics" in
+          whether the system is booting up for the first time. This roughly means that <filename>/etc/</filename>
+          was unpopulated when the system started booting (for details, see "First Boot Semantics" in
           <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
-          This may be used to populate <filename>/etc/</filename> on the first boot after factory reset, or
-          when a new system instance boots up for the first time.</para>
+          First boot is considered finished (this condition will evaluate as false) after the manager
+          has finished the startup phase.</para>
+
+          <para>This condition may be used to populate <filename>/etc/</filename> on the first boot after
+          factory reset, or when a new system instance boots up for the first time.</para>
 
           <para>For robustness, units with <varname>ConditionFirstBoot=yes</varname> should order themselves
           before <filename>first-boot-complete.target</filename> and pull in this passive target with
-          <varname>Wants=</varname>.  This ensures that in a case of an aborted first boot, these units will
+          <varname>Wants=</varname>. This ensures that in a case of an aborted first boot, these units will
           be re-run during the next system startup.</para>
 
           <para>If the <varname>systemd.condition-first-boot=</varname> option is specified on the kernel
@@ -1534,25 +1602,14 @@
           <term><varname>ConditionControlGroupController=</varname></term>
 
           <listitem><para>Check whether given cgroup controllers (e.g. <literal>cpu</literal>) are available
-          for use on the system or whether the legacy v1 cgroup or the modern v2 cgroup hierarchy is used.
-          </para>
+          for use on the system.</para>
 
           <para>Multiple controllers may be passed with a space separating them; in this case the condition
           will only pass if all listed controllers are available for use. Controllers unknown to systemd are
-          ignored. Valid controllers are <literal>cpu</literal>, <literal>cpuacct</literal>,
-          <literal>io</literal>, <literal>blkio</literal>, <literal>memory</literal>,
-          <literal>devices</literal>, and <literal>pids</literal>. Even if available in the kernel, a
-          particular controller may not be available if it was disabled on the kernel command line with
-          <varname>cgroup_disable=controller</varname>.</para>
-
-          <para>Alternatively, two special strings <literal>v1</literal> and <literal>v2</literal> may be
-          specified (without any controller names). <literal>v2</literal> will pass if the unified v2 cgroup
-          hierarchy is used, and <literal>v1</literal> will pass if the legacy v1 hierarchy or the hybrid
-          hierarchy are used (see the discussion of <varname>systemd.unified_cgroup_hierarchy</varname> and
-          <varname>systemd.legacy_systemd_cgroup_controller</varname> in
-          <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-          for more information).</para>
-          </listitem>
+          ignored. Valid controllers are <literal>cpu</literal>, <literal>cpuset</literal>,
+          <literal>io</literal>, <literal>memory</literal>, and <literal>pids</literal>. Even if available in
+          the kernel, a particular controller may not be available if it was disabled on the kernel command
+          line with <varname>cgroup_disable=controller</varname>.</para></listitem>
         </varlistentry>
 
         <varlistentry>
@@ -1560,10 +1617,11 @@
 
           <listitem><para>Verify that the specified amount of system memory is available to the current
           system. Takes a memory size in bytes as argument, optionally prefixed with a comparison operator
-          <literal>&lt;</literal>, <literal>&lt;=</literal>, <literal>=</literal>, <literal>!=</literal>,
-          <literal>&gt;=</literal>, <literal>&gt;</literal>. On bare-metal systems compares the amount of
-          physical memory in the system with the specified size, adhering to the specified comparison
-          operator. In containers compares the amount of memory assigned to the container instead.</para>
+          <literal>&lt;</literal>, <literal>&lt;=</literal>, <literal>=</literal> (or <literal>==</literal>),
+          <literal>!=</literal> (or <literal>&lt;&gt;</literal>), <literal>&gt;=</literal>,
+          <literal>&gt;</literal>. On bare-metal systems compares the amount of physical memory in the system
+          with the specified size, adhering to the specified comparison operator. In containers compares the
+          amount of memory assigned to the container instead.</para>
           </listitem>
         </varlistentry>
 
@@ -1572,13 +1630,14 @@
 
           <listitem><para>Verify that the specified number of CPUs is available to the current system. Takes
           a number of CPUs as argument, optionally prefixed with a comparison operator
-          <literal>&lt;</literal>, <literal>&lt;=</literal>, <literal>=</literal>, <literal>!=</literal>,
-          <literal>&gt;=</literal>, <literal>&gt;</literal>. Compares the number of CPUs in the CPU affinity
-          mask configured of the service manager itself with the specified number, adhering to the specified
-          comparison operator. On physical systems the number of CPUs in the affinity mask of the service
-          manager usually matches the number of physical CPUs, but in special and virtual environments might
-          differ. In particular, in containers the affinity mask usually matches the number of CPUs assigned
-          to the container and not the physically available ones.</para></listitem>
+          <literal>&lt;</literal>, <literal>&lt;=</literal>, <literal>=</literal> (or <literal>==</literal>),
+          <literal>!=</literal> (or <literal>&lt;&gt;</literal>), <literal>&gt;=</literal>,
+          <literal>&gt;</literal>. Compares the number of CPUs in the CPU affinity mask configured of the
+          service manager itself with the specified number, adhering to the specified comparison operator. On
+          physical systems the number of CPUs in the affinity mask of the service manager usually matches the
+          number of physical CPUs, but in special and virtual environments might differ. In particular, in
+          containers the affinity mask usually matches the number of CPUs assigned to the container and not
+          the physically available ones.</para></listitem>
         </varlistentry>
 
         <varlistentry>
@@ -1649,10 +1708,35 @@
           <listitem><para>Verify that a specific <literal>key=value</literal> pair is set in the host's
           <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
 
-          <para>Other than exact matching with <literal>=</literal>, and <literal>!=</literal>, relative
-          comparisons are supported for versioned parameters (e.g. <literal>VERSION_ID</literal>). The
-          comparator can be one of <literal>&lt;</literal>, <literal>&lt;=</literal>, <literal>=</literal>,
-          <literal>!=</literal>, <literal>&gt;=</literal> and <literal>&gt;</literal>.</para>
+          <para>Other than exact string matching (with <literal>=</literal> and <literal>!=</literal>),
+          relative comparisons are supported for versioned parameters (e.g. <literal>VERSION_ID</literal>;
+          with <literal>&lt;</literal>, <literal>&lt;=</literal>, <literal>==</literal>,
+          <literal>&lt;&gt;</literal>, <literal>&gt;=</literal>, <literal>&gt;</literal>), and shell-style
+          wildcard comparisons (<literal>*</literal>, <literal>?</literal>, <literal>[]</literal>) are
+          supported with the <literal>$=</literal> (match) and <literal>!$=</literal> (non-match).</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><varname>ConditionMemoryPressure=</varname></term>
+          <term><varname>ConditionCPUPressure=</varname></term>
+          <term><varname>ConditionIOPressure=</varname></term>
+
+          <listitem><para>Verify that the overall system (memory, CPU or IO) pressure is below or equal to a threshold.
+          This setting takes a threshold value as argument. It can be specified as a simple percentage value,
+          suffixed with <literal>%</literal>, in which case the pressure will be measured as an average over the last
+          five minutes before the attempt to start the unit is performed.
+          Alternatively, the average timespan can also be specified using <literal>/</literal> as a separator, for
+          example: <literal>10%/1min</literal>. The supported timespans match what the kernel provides, and are
+          limited to <literal>10sec</literal>, <literal>1min</literal> and <literal>5min</literal>. The
+          <literal>full</literal> PSI will be checked first, and if not found <literal>some</literal> will be
+          checked. For more details, see the documentation on <ulink
+          url="https://docs.kernel.org/accounting/psi.html">PSI (Pressure Stall Information)
+          </ulink>.</para>
+
+          <para>Optionally, the threshold value can be prefixed with the slice unit under which the pressure will be checked,
+          followed by a <literal>:</literal>. If the slice unit is not specified, the overall system pressure will be measured,
+          instead of a particular cgroup's.</para>
           </listitem>
         </varlistentry>
 
@@ -1662,6 +1746,7 @@
           <term><varname>AssertHost=</varname></term>
           <term><varname>AssertKernelCommandLine=</varname></term>
           <term><varname>AssertKernelVersion=</varname></term>
+          <term><varname>AssertCredential=</varname></term>
           <term><varname>AssertEnvironment=</varname></term>
           <term><varname>AssertSecurity=</varname></term>
           <term><varname>AssertCapability=</varname></term>
@@ -1683,7 +1768,11 @@
           <term><varname>AssertControlGroupController=</varname></term>
           <term><varname>AssertMemory=</varname></term>
           <term><varname>AssertCPUs=</varname></term>
+          <term><varname>AssertCPUFeature=</varname></term>
           <term><varname>AssertOSRelease=</varname></term>
+          <term><varname>AssertMemoryPressure=</varname></term>
+          <term><varname>AssertCPUPressure=</varname></term>
+          <term><varname>AssertIOPressure=</varname></term>
 
           <listitem><para>Similar to the <varname>ConditionArchitecture=</varname>,
           <varname>ConditionVirtualization=</varname>, …, condition settings described above, these settings
@@ -1850,34 +1939,31 @@
         <term><varname>WantedBy=</varname></term>
         <term><varname>RequiredBy=</varname></term>
 
-        <listitem><para>This option may be used more than once, or a
-        space-separated list of unit names may be given. A symbolic
-        link is created in the <filename>.wants/</filename> or
-        <filename>.requires/</filename> directory of each of the
-        listed units when this unit is installed by <command>systemctl
-        enable</command>. This has the effect that a dependency of
-        type <varname>Wants=</varname> or <varname>Requires=</varname>
-        is added from the listed unit to the current unit. The primary
-        result is that the current unit will be started when the
-        listed unit is started. See the description of
-        <varname>Wants=</varname> and <varname>Requires=</varname> in
-        the [Unit] section for details.</para>
+        <listitem><para>This option may be used more than once, or a space-separated list of unit names may
+        be given. A symbolic link is created in the <filename>.wants/</filename> or
+        <filename>.requires/</filename> directory of each of the listed units when this unit is installed by
+        <command>systemctl enable</command>. This has the effect of a dependency of type
+        <varname>Wants=</varname> or <varname>Requires=</varname> being added from the listed unit to the
+        current unit. The primary result is that the current unit will be started when the listed unit is
+        started, see the description of <varname>Wants=</varname> and <varname>Requires=</varname> in the
+        [Unit] section for details.</para>
 
-        <para><command>WantedBy=foo.service</command> in a service
-        <filename>bar.service</filename> is mostly equivalent to
-        <command>Alias=foo.service.wants/bar.service</command> in the
-        same file. In case of template units, <command>systemctl
-        enable</command> must be called with an instance name, and
-        this instance will be added to the
-        <filename>.wants/</filename> or
-        <filename>.requires/</filename> list of the listed unit. E.g.
-        <command>WantedBy=getty.target</command> in a service
-        <filename>getty@.service</filename> will result in
-        <command>systemctl enable getty@tty2.service</command>
-        creating a
-        <filename>getty.target.wants/getty@tty2.service</filename>
-        link to <filename>getty@.service</filename>.
-        </para></listitem>
+        <para>In case of template units listing non template units, the listing unit must have
+        <varname>DefaultInstance=</varname> set, or <command>systemctl enable</command> must be called with
+        an instance name. The instance (default or specified) will be added to the
+        <filename>.wants/</filename> or <filename>.requires/</filename> list of the listed unit. For example,
+        <command>WantedBy=getty.target</command> in a service <filename>getty@.service</filename> will result
+        in <command>systemctl enable getty@tty2.service</command> creating a
+        <filename>getty.target.wants/getty@tty2.service</filename> link to
+        <filename>getty@.service</filename>. This also applies to listing specific instances of templated
+        units: this specific instance will gain the dependency. A template unit may also list a template
+        unit, in which case a generic dependency will be added where each instance of the listing unit will
+        have a dependency on an instance of the listed template with the same instance value. For example,
+        <command>WantedBy=container@.target</command> in a service <filename>monitor@.service</filename> will
+        result in <command>systemctl enable monitor@.service</command> creating a
+        <filename>container@.target.wants/monitor@.service</filename> link to
+        <filename>monitor@.service</filename>, which applies to all instances of
+        <filename>container@.target</filename>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1950,6 +2036,11 @@
             <entry>This is either <filename>/var/cache</filename> (for the system manager) or the path <literal>$XDG_CACHE_HOME</literal> resolves to (for user managers).</entry>
           </row>
           <row>
+            <entry><literal>%d</literal></entry>
+            <entry>Credentials directory</entry>
+            <entry>This is the value of the <literal>$CREDENTIALS_DIRECTORY</literal> environment variable if available. See section "Credentials" in <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry>
+          </row>
+          <row>
             <entry><literal>%E</literal></entry>
             <entry>Configuration directory root</entry>
             <entry>This is either <filename>/etc/</filename> (for the system manager) or the path <literal>$XDG_CONFIG_HOME</literal> resolves to (for user managers).</entry>
@@ -2005,6 +2096,8 @@
           </row>
           <row>
             <entry><literal>%l</literal></entry>
+            <!-- We do not use the common definition from standard-specifiers.xml here since we want a
+                 slightly more verbose explanation here, referring to the reload cycle. -->
             <entry>Short host name</entry>
             <entry>The hostname of the running system at the point in time the unit configuration is loaded, truncated at the first dot to remove any domain component.</entry>
           </row>
@@ -2037,9 +2130,16 @@
             <entry>Same as <literal>%p</literal>, but with escaping undone.</entry>
           </row>
           <row>
+            <!-- We do not use the common definition from standard-specifiers.xml here since we want a
+                 slightly more verbose explanation here, referring to the reload cycle. -->
+            <entry><literal>%q</literal></entry>
+            <entry>Pretty host name</entry>
+            <entry>The pretty hostname of the running system at the point in time the unit configuration is loaded, as read from the <varname>PRETTY_HOSTNAME=</varname> field of <filename>/etc/machine-info</filename>. If not set, resolves to the short hostname. See <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry>
+          </row>
+          <row>
             <entry><literal>%s</literal></entry>
             <entry>User shell</entry>
-            <entry>This is the shell of the user running the service manager instance. In case of the system manager this resolves to <literal>/bin/sh</literal>.</entry>
+            <entry>This is the shell of the user running the service manager instance.</entry>
           </row>
           <row>
             <entry><literal>%S</literal></entry>
@@ -2070,6 +2170,16 @@
           <xi:include href="standard-specifiers.xml" xpointer="V"/>
           <xi:include href="standard-specifiers.xml" xpointer="w"/>
           <xi:include href="standard-specifiers.xml" xpointer="W"/>
+          <row>
+            <entry><literal>%y</literal></entry>
+            <entry>The path to the fragment</entry>
+            <entry>This is the path where the main part of the unit file is located. For linked unit files, the real path outside of the unit search directories is used. For units that don't have a fragment file, this specifier will raise an error.</entry>
+          </row>
+          <row>
+            <entry><literal>%Y</literal></entry>
+            <entry>The directory of the fragment</entry>
+            <entry>This is the directory part of <literal>%y</literal>.</entry>
+          </row>
           <xi:include href="standard-specifiers.xml" xpointer="percent"/>
         </tbody>
       </tgroup>
@@ -2219,7 +2329,7 @@
       <title>Top level drop-ins with template units</title>
 
       <para>Top level per-type drop-ins can be used to change some aspect of
-      all units of a particular type. For example by creating the
+      all units of a particular type. For example, by creating the
       <filename index='false'>/etc/systemd/system/service.d/</filename>
       directory with a drop-in file, the contents of the drop-in file can be
       applied to all service units. We can take this further by having the
@@ -2254,8 +2364,12 @@
     services will have acquired an <varname>OnFailure=</varname> dependency on
     <filename index='false'>failure-handler@%N.service</filename>. The
     template instance units will also have gained the dependency which results
-    in the creation of a recursive dependency chain. We can break the chain by
-    disabling the drop-in for the template instance units via a symlink to
+    in the creation of a recursive dependency chain. systemd will try to detect
+    these recursive dependency chains where a template unit directly and
+    recursively depends on itself and will remove such dependencies
+    automatically if it finds them. If systemd doesn't detect the recursive
+    dependency chain, we can break the chain ourselves by disabling the drop-in
+    for the template instance units via a symlink to
     <filename index='false'>/dev/null</filename>:</para>
 
     <programlisting>
diff --git a/man/systemd.xml b/man/systemd.xml
index fe1719f..1a68301 100644
--- a/man/systemd.xml
+++ b/man/systemd.xml
@@ -188,8 +188,13 @@
     <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
     for details about these target units.</para>
 
-    <para>systemd only keeps a minimal set of units loaded into memory. Specifically, the only units that are kept
-    loaded into memory are those for which at least one of the following conditions is true:</para>
+    <para>On first boot, <command>systemd</command> will enable or disable units according to preset policy.
+    See <citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+    and "First Boot Semantics" in
+    <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+
+    <para>systemd only keeps a minimal set of units loaded into memory. Specifically, the only units that are
+    kept loaded into memory are those for which at least one of the following conditions is true:</para>
 
     <orderedlist>
       <listitem><para>It is in an active, activating, deactivating or failed state (i.e. in any unit state except for <literal>inactive</literal>)</para></listitem>
@@ -207,21 +212,17 @@
     memory its accounting data is flushed out too. However, this data is generally not lost, as a journal log record
     is generated declaring the consumed resources whenever a unit shuts down.</para>
 
-    <para>Processes systemd spawns are placed in individual Linux
-    control groups named after the unit which they belong to in the
-    private systemd hierarchy. (see <ulink
-    url="https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt">cgroups.txt</ulink>
-    for more information about control groups, or short "cgroups").
-    systemd uses this to effectively keep track of processes. Control
-    group information is maintained in the kernel, and is accessible
-    via the file system hierarchy (beneath
-    <filename>/sys/fs/cgroup/systemd/</filename>), or in tools such as
-    <citerefentry project='man-pages'><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    or
-    <citerefentry project='man-pages'><refentrytitle>ps</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    (<command>ps xawf -eo pid,user,cgroup,args</command> is
-    particularly useful to list all processes and the systemd units
-    they belong to.).</para>
+    <para>Processes systemd spawns are placed in individual Linux control groups named after the unit which
+    they belong to in the private systemd hierarchy. (see <ulink
+    url="https://docs.kernel.org/admin-guide/cgroup-v2.html">Control Groups v2</ulink> for more information
+    about control groups, or short "cgroups").  systemd uses this to effectively keep track of
+    processes. Control group information is maintained in the kernel, and is accessible via the file system
+    hierarchy (beneath <filename>/sys/fs/cgroup/</filename>), or in tools such as <citerefentry
+    project='man-pages'><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry> or
+    <citerefentry
+    project='man-pages'><refentrytitle>ps</refentrytitle><manvolnum>1</manvolnum></citerefentry> (<command>ps
+    xawf -eo pid,user,cgroup,args</command> is particularly useful to list all processes and the systemd
+    units they belong to.).</para>
 
     <para>systemd is compatible with the SysV init system to a large
     degree: SysV init scripts are supported and simply read as an
@@ -323,7 +324,7 @@
 
         <listitem><para>Similar rules apply for the user unit
         directories. However, here the
-        <ulink url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
+        <ulink url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
         Base Directory specification</ulink> is followed to find
         units. Applications should place their unit files in the
         directory returned by <command>pkg-config systemd
@@ -586,6 +587,17 @@
       </varlistentry>
 
       <varlistentry>
+        <term><constant>SIGRTMIN+25</constant></term>
+
+        <listitem><para>Upon receiving this signal the systemd manager will reexecute itself. This
+        is mostly equivalent to <command>systemctl daemon-reexec</command> except that it will be
+        done asynchronously.</para>
+
+        <para>The systemd system manager treats this signal the same way as
+        <constant>SIGTERM</constant>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><constant>SIGRTMIN+26</constant></term>
 
         <listitem><para>Restores the log target to its configured value. The configured value is derived from – in
@@ -610,7 +622,7 @@
     <title>Environment</title>
 
     <para>The environment block for the system manager is initially set by the kernel. (In particular,
-    <literal>key=value</literal> assignments on the kernel command line are returned into environment
+    <literal>key=value</literal> assignments on the kernel command line are turned into environment
     variables for PID 1). For the user manager, the system manager sets the environment as described in the
     "Environment Variables in Spawned Processes" section of
     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>. The
@@ -676,7 +688,7 @@
 
         <listitem><para>The systemd user manager uses these variables
         in accordance to the <ulink
-        url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
+        url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
         Base Directory specification</ulink> to find its
         configuration.</para></listitem>
       </varlistentry>
@@ -731,29 +743,26 @@
   <refsect1>
     <title>Kernel Command Line</title>
 
-    <para>When run as the system instance systemd parses a number of options listed below. They can be
-    specified as kernel command line arguments<footnote><para>If run inside a Linux container these arguments
-    may be passed as command line arguments to systemd itself, next to any of the command line options listed
-    in the Options section above. If run outside of Linux containers, these arguments are parsed from
-    <filename>/proc/cmdline</filename> instead.</para></footnote>, or through the
-    <literal>SystemdOptions</literal> EFI variable (on EFI systems). The kernel command line has higher
-    priority. Following variables are understood:</para>
+    <para>When run as the system instance, systemd parses a number of options listed below. They can be
+    specified as kernel command line arguments which are parsed from a number of sources depending on the
+    environment in which systemd is executed. If run inside a Linux container, these options are parsed from
+    the command line arguments passed to systemd itself, next to any of the command line options listed in
+    the Options section above. If run outside of Linux containers, these arguments are parsed from
+    <filename>/proc/cmdline</filename> and from the <literal>SystemdOptions</literal> EFI variable
+    (on EFI systems) instead. Options from <filename>/proc/cmdline</filename> have higher priority. The
+    following variables are understood:</para>
 
     <variablelist class='kernel-commandline-options'>
       <varlistentry>
         <term><varname>systemd.unit=</varname></term>
         <term><varname>rd.systemd.unit=</varname></term>
 
-        <listitem><para>Overrides the unit to activate on boot.
-        Defaults to <filename>default.target</filename>. This may be
-        used to temporarily boot into a different boot unit, for
-        example <filename>rescue.target</filename> or
-        <filename>emergency.service</filename>. See
+        <listitem><para>Overrides the unit to activate on boot.  Defaults to
+        <filename>default.target</filename>. This may be used to temporarily boot into a different boot unit,
+        for example <filename>rescue.target</filename> or <filename>emergency.service</filename>. See
         <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
-        for details about these units. The option prefixed with
-        <literal>rd.</literal> is honored only in the initial RAM disk
-        (initrd), while the one that is not prefixed only in the main
-        system.</para></listitem>
+        for details about these units. The option prefixed with <literal>rd.</literal> is honored only in the
+        initrd, while the one that is not prefixed only in the main system.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -899,38 +908,27 @@
       </varlistentry>
 
       <varlistentry>
-        <term><varname>systemd.unified_cgroup_hierarchy</varname></term>
+        <term><varname>systemd.set_credential=</varname></term>
 
-        <listitem><para>When specified without an argument or with a true argument,
-        enables the usage of
-        <ulink url="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html">unified cgroup hierarchy</ulink>
-        (a.k.a. cgroups-v2). When specified with a false argument, fall back to
-        hybrid or full legacy cgroup hierarchy.</para>
+        <listitem><para>Sets a system credential, which can then be propagated to system services using the
+        <varname>LoadCredential=</varname> setting, see
+        <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
+        details. Takes a pair of credential name and value, separated by a colon. Note that the kernel
+        command line is typically accessible by unprivileged programs in
+        <filename>/proc/cmdline</filename>. Thus, this mechanism is not suitable for transferring sensitive
+        data. Use it only for data that is not sensitive (e.g. public keys/certificates, rather than private
+        keys), or in testing/debugging environments.</para>
 
-        <para>If this option is not specified, the default behaviour is determined
-        during compilation (the <option>-Ddefault-hierarchy=</option> meson
-        option). If the kernel does not support unified cgroup hierarchy, the legacy
-        hierarchy will be used even if this option is specified.</para>
-        </listitem>
+        <para>For further information see <ulink url="https://systemd.io/CREDENTIALS">System and Service
+        Credentials</ulink> documentation.</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><varname>systemd.legacy_systemd_cgroup_controller</varname></term>
+        <term><varname>systemd.import_credentials=</varname></term>
 
-        <listitem><para>Takes effect if the full unified cgroup hierarchy is not used
-        (see previous option). When specified without an argument or with a true
-        argument, disables the use of "hybrid" cgroup hierarchy (i.e. a cgroups-v2
-        tree used for systemd, and
-        <ulink url="https://www.kernel.org/doc/Documentation/cgroup-v1/">legacy
-        cgroup hierarchy</ulink>, a.k.a. cgroups-v1, for other controllers), and
-        forces a full "legacy" mode. When specified with a false argument, enables
-        the use of "hybrid" hierarchy.</para>
-
-        <para>If this option is not specified, the default behaviour is determined
-        during compilation (the <option>-Ddefault-hierarchy=</option> meson
-        option). If the kernel does not support unified cgroup hierarchy, the legacy
-        hierarchy will be used  even if this option is specified.</para>
-        </listitem>
+        <listitem><para>Takes a boolean argument. If false disables importing credentials from the kernel
+        command line, the DMI/SMBIOS OEM string table, the qemu_fw_cfg subsystem or the EFI kernel
+        stub.</para></listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1255,9 +1253,22 @@
   </refsect1>
 
   <refsect1>
+      <title>History</title>
+
+      <variablelist>
+        <varlistentry>
+          <term>systemd 252</term>
+          <listitem><para>Kernel command-line arguments <varname>systemd.unified_cgroup_hierarchy</varname>
+          and <varname>systemd.legacy_systemd_cgroup_controller</varname> were deprecated. Please switch to
+          the unified cgroup hierarchy.</para></listitem>
+        </varlistentry>
+      </variablelist>
+  </refsect1>
+
+  <refsect1>
     <title>See Also</title>
     <para>
-      The <ulink url="https://www.freedesktop.org/wiki/Software/systemd/">systemd Homepage</ulink>,
+      The <ulink url="https://systemd.io/">systemd Homepage</ulink>,
       <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/sysupdate.d.xml b/man/sysupdate.d.xml
new file mode 100644
index 0000000..bdf4bcb
--- /dev/null
+++ b/man/sysupdate.d.xml
@@ -0,0 +1,886 @@
+<?xml version='1.0'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="sysupdate.d" conditional='ENABLE_SYSUPDATE'
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sysupdate.d</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sysupdate.d</refentrytitle>
+    <manvolnum>5</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sysupdate.d</refname>
+    <refpurpose>Transfer Definition Files for Automatic Updates</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><literallayout><filename>/etc/sysupdate.d/*.conf</filename>
+<filename>/run/sysupdate.d/*.conf</filename>
+<filename>/usr/lib/sysupdate.d/*.conf</filename>
+    </literallayout></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><filename>sysupdate.d/*.conf</filename> files describe how specific resources on the local system
+    shall be updated from a remote source. Each such file defines one such transfer: typically a remote
+    HTTP/HTTPS resource as source; and a local file, directory or partition as target. This may be used as a
+    simple, automatic, atomic update mechanism for the OS itself, for containers, portable services or system
+    extension images — but in fact may be used to update any kind of file from a remote source.</para>
+
+    <para>The
+    <citerefentry><refentrytitle>systemd-sysupdate</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    command reads these files and uses them to determine which local resources should be updated, and then
+    executes the update.</para>
+
+    <para>Both the remote HTTP/HTTPS source and the local target typically exist in multiple, concurrent
+    versions, in order to implement flexible update schemes, e.g. A/B updating (or a superset thereof,
+    e.g. A/B/C, A/B/C/D, …).</para>
+
+    <para>Each <filename>*.conf</filename> file defines one transfer, i.e. describes one resource to
+    update. Typically, multiple of these files (i.e. multiple of such transfers) are defined together, and
+    are bound together by a common version identifier in order to update multiple resources at once on each
+    update operation, for example to update a kernel, a root file system and a Verity partition in a single,
+    combined, synchronized operation, so that only a combined update of all three together constitutes a
+    complete update.</para>
+
+    <para>Each <filename>*.conf</filename> file contains three sections: [Transfer], [Source] and [Target].</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Basic Mode of Operation</title>
+
+    <para>Disk-image based OS updates typically consist of multiple different resources that need to be
+    updated together, for example a secure OS update might consist of a root file system image to drop into a
+    partition, a matching Verity integrity data partition image, and a kernel image prepared to boot into the
+    combination of the two partitions. The first two resources are files that are downloaded and placed in a
+    disk partition, the latter is a file that is downloaded and placed in a regular file in the boot file
+    system (e.g. EFI system partition). Hence, during an update of a hypothetical operating system "foobarOS"
+    to a hypothetical version 47 the following operations should take place:</para>
+
+    <orderedlist>
+      <listitem><para>A file <literal>https://download.example.com/foobarOS_47.root.xz</literal> should be
+      downloaded, decompressed and written to a previously unused partition with GPT partition type UUID
+      4f68bce3-e8cd-4db1-96e7-fbcaf984b709 for x86-64, as per <ulink
+      url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
+      Specification</ulink>.</para></listitem>
+
+      <listitem><para>Similarly, a file <literal>https://download.example.com/foobarOS_47.verity.xz</literal>
+      should be downloaded, decompressed and written to a previously empty partition with GPT partition type
+      UUID of 2c7357ed-ebd2-46d9-aec1-23d437ec2bf5 (i.e. the partition type for Verity integrity information
+      for x86-64 root file systems).</para></listitem>
+
+      <listitem><para>Finally, a file <literal>https://download.example.com/foobarOS_47.efi.xz</literal> (a
+      unified kernel, as per <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader
+      Specification</ulink> Type #2) should be downloaded, decompressed and written to the ESP file system,
+      i.e. to <filename>EFI/Linux/foobarOS_47.efi</filename> in the ESP.</para></listitem>
+    </orderedlist>
+
+    <para>The version-independent generalization of this would be (using the special marker
+    <literal>@v</literal> as wildcard for the version identifier):</para>
+
+    <orderedlist>
+      <listitem><para>A transfer of a file <literal>https://download.example.com/foobarOS_@v.root.xz</literal>
+      → a local, previously empty GPT partition of type 4f68bce3-e8cd-4db1-96e7-fbcaf984b709, with the label to
+      be set to <literal>foobarOS_@v</literal>.</para></listitem>
+
+      <listitem><para>A transfer of a file <literal>https://download.example.com/foobarOS_@v.verity.xz</literal>
+      → a local, previously empty GPT partition of type 2c7357ed-ebd2-46d9-aec1-23d437ec2bf5, with the label to be
+      set to <literal>foobarOS_@v_verity</literal>.</para></listitem>
+
+      <listitem><para>A transfer of a file <literal>https://download.example.com/foobarOS_@v.efi.xz</literal>
+      → a local file <filename>/efi/EFI/Linux/foobarOS_@v.efi</filename>.</para></listitem>
+    </orderedlist>
+
+    <para>An update can only complete if the relevant URLs provide their resources for the same version,
+    i.e. for the same value of <literal>@v</literal>.</para>
+
+    <para>The above may be translated into three <filename>*.conf</filename> files in
+    <filename>sysupdate.d/</filename>, one for each resource to transfer. The <filename>*.conf</filename>
+    files configure the type of download, and what place to write the download to (i.e. whether to a
+    partition or a file in the file system). Most importantly these files contain the URL, partition name and
+    filename patterns shown above that describe how these resources are called on the source and how they
+    shall be called on the target.</para>
+
+    <para>In order to enumerate available versions and figuring out candidates to update to, a mechanism is
+    necessary to list suitable files:</para>
+
+    <itemizedlist>
+      <listitem><para>For partitions: the surrounding GPT partition table contains a list of defined
+      partitions, including a partition type UUID and a partition label (in this scheme the partition label
+      plays a role for the partition similar to the filename for a regular file).</para></listitem>
+
+      <listitem><para>For regular files: the directory listing of the directory the files are contained in
+      provides a list of existing files in a straightforward way.</para></listitem>
+
+      <listitem><para>For HTTP/HTTPS sources a simple scheme is used: a manifest file
+      <filename>SHA256SUMS</filename>, following the format defined by <citerefentry
+      project='man-pages'><refentrytitle>sha256sum</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      lists file names and their SHA256 hashes.</para></listitem>
+    </itemizedlist>
+
+    <para>Transfers are done in the alphabetical order of the <filename>.conf</filename> file names they are
+    defined in. First, the resource data is downloaded directly into a target file/directory/partition. Once
+    this is completed for all defined transfers, in a second step the files/directories/partitions are
+    renamed to their final names as defined by the target <varname>MatchPattern=</varname>, again in the
+    order the <filename>.conf</filename> transfer file names dictate. This step is not atomic, however it is
+    guaranteed to be executed strictly in order with suitable disk synchronization in place. Typically, when
+    updating an OS one of the transfers defines the entry point when booting. Thus it is generally a good idea
+    to order the resources via the transfer configuration file names so that the entry point is written
+    last, ensuring that any abnormal termination does not leave an entry point around whose backing is not
+    established yet. In the example above it would hence make sense to establish the EFI kernel image last
+    and thus give its transfer configuration file the alphabetically last name.</para>
+
+    <para>See below for an extended, more specific example based on the above.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Resource Types</title>
+
+    <para>Each transfer file defines one source resource to transfer to one target resource. The following
+    resource types are supported:</para>
+
+    <orderedlist>
+
+      <listitem><para>Resources of type <literal>url-file</literal> encapsulate a file on a web server,
+      referenced via a HTTP or HTTPS URL. When an update takes place, the file is downloaded and decompressed
+      and then written to the target file or partition. This resource type is only available for sources, not
+      for targets. The list of available versions of resources of this type is encoded in
+      <filename>SHA256SUMS</filename> manifest files, accompanied by
+      <filename>SHA256SUMS.gpg</filename> detached signatures.</para></listitem>
+
+      <listitem><para>The <literal>url-tar</literal> resource type is similar, but the file must be a
+      <filename>.tar</filename> archive. When an update takes place, the file is decompressed and unpacked
+      into a directory or btrfs subvolume. This resource type is only available for sources, not for
+      targets. Just like <literal>url-file</literal>, <literal>url-tar</literal> version enumeration makes
+      use of <filename>SHA256SUMS</filename> files, authenticated via
+      <filename>SHA256SUMS.gpg</filename>.</para></listitem>
+
+      <listitem><para>The <literal>regular-file</literal> resource type encapsulates a local regular file on
+      disk. During updates the file is uncompressed and written to the target file or partition. This
+      resource type is available both as source and as target. When updating no integrity or authentication
+      verification is done for resources of this type.</para></listitem>
+
+      <listitem><para>The <literal>partition</literal> resource type is similar to
+      <literal>regular-file</literal>, and encapsulates a GPT partition on disk. When updating, the partition
+      must exist already, and have the correct GPT partition type. A partition whose GPT partition label is
+      set to <literal>_empty</literal> is considered empty, and a candidate to place a newly downloaded
+      resource in. The GPT partition label is used to store version information, once a partition is
+      updated. This resource type is only available for target resources.</para></listitem>
+
+      <listitem><para>The <literal>tar</literal> resource type encapsulates local <filename>.tar</filename>
+      archive files. When an update takes place, the files are uncompressed and unpacked into a target
+      directory or btrfs subvolume. Behaviour of <literal>tar</literal> and <literal>url-tar</literal> is
+      generally similar, but the latter downloads from remote sources, and does integrity and authentication
+      checks while the former does not. The <literal>tar</literal> resource type is only available for source
+      resources.</para></listitem>
+
+      <listitem><para>The <literal>directory</literal> resource type encapsulates local directory trees. This
+      type is available both for source and target resources. If an update takes place on a source resource
+      of this type, a recursive copy of the directory is done.</para></listitem>
+
+      <listitem><para>The <literal>subvolume</literal> resource type is identical to
+      <literal>directory</literal>, except when used as the target, in which case the file tree is placed in
+      a btrfs subvolume instead of a plain directory, if the backing file system supports it (i.e. is
+      btrfs).</para></listitem>
+    </orderedlist>
+
+    <para>As already indicated, only a subset of source and target resource type combinations are
+    supported:</para>
+
+    <table>
+      <title>Resource Types</title>
+
+      <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+        <colspec colname="name" />
+        <colspec colname="explanation" />
+
+        <thead>
+          <row>
+            <entry>Identifier</entry>
+            <entry>Description</entry>
+            <entry>Usable as Source</entry>
+            <entry>When Used as Source: Compatible Targets</entry>
+            <entry>When Used as Source: Integrity + Authentication</entry>
+            <entry>When Used as Source: Decompression</entry>
+            <entry>Usable as Target</entry>
+            <entry>When Used as Target: Compatible Sources</entry>
+          </row>
+        </thead>
+
+        <tbody>
+          <row>
+            <entry><constant>url-file</constant></entry>
+            <entry>HTTP/HTTPS files</entry>
+            <entry>yes</entry>
+            <entry><constant>regular-file</constant>, <constant>partition</constant></entry>
+            <entry>yes</entry>
+            <entry>yes</entry>
+            <entry>no</entry>
+            <entry>-</entry>
+          </row>
+
+          <row>
+            <entry><constant>url-tar</constant></entry>
+            <entry>HTTP/HTTPS <filename>.tar</filename> archives</entry>
+            <entry>yes</entry>
+            <entry><constant>directory</constant>, <constant>subvolume</constant></entry>
+            <entry>yes</entry>
+            <entry>yes</entry>
+            <entry>no</entry>
+            <entry>-</entry>
+          </row>
+
+          <row>
+            <entry><constant>regular-file</constant></entry>
+            <entry>Local files</entry>
+            <entry>yes</entry>
+            <entry><constant>regular-file</constant>, <constant>partition</constant></entry>
+            <entry>no</entry>
+            <entry>yes</entry>
+            <entry>yes</entry>
+            <entry><constant>url-file</constant>, <constant>regular-file</constant></entry>
+          </row>
+
+          <row>
+            <entry><constant>partition</constant></entry>
+            <entry>Local GPT partitions</entry>
+            <entry>no</entry>
+            <entry>-</entry>
+            <entry>-</entry>
+            <entry>-</entry>
+            <entry>yes</entry>
+            <entry><constant>url-file</constant>, <constant>regular-file</constant></entry>
+          </row>
+
+          <row>
+            <entry><constant>tar</constant></entry>
+            <entry>Local <filename>.tar</filename> archives</entry>
+            <entry>yes</entry>
+            <entry><constant>directory</constant>, <constant>subvolume</constant></entry>
+            <entry>no</entry>
+            <entry>yes</entry>
+            <entry>no</entry>
+            <entry>-</entry>
+          </row>
+
+          <row>
+            <entry><constant>directory</constant></entry>
+            <entry>Local directories</entry>
+            <entry>yes</entry>
+            <entry><constant>directory</constant>, <constant>subvolume</constant></entry>
+            <entry>no</entry>
+            <entry>no</entry>
+            <entry>yes</entry>
+            <entry><constant>url-tar</constant>, <constant>tar</constant>, <constant>directory</constant>, <constant>subvolume</constant></entry>
+          </row>
+
+          <row>
+            <entry><constant>subvolume</constant></entry>
+            <entry>Local btrfs subvolumes</entry>
+            <entry>yes</entry>
+            <entry><constant>directory</constant>, <constant>subvolume</constant></entry>
+            <entry>no</entry>
+            <entry>no</entry>
+            <entry>yes</entry>
+            <entry><constant>url-tar</constant>, <constant>tar</constant>, <constant>directory</constant>, <constant>subvolume</constant></entry>
+          </row>
+
+        </tbody>
+      </tgroup>
+    </table>
+  </refsect1>
+
+  <refsect1>
+    <title>Match Patterns</title>
+
+    <para>Both the source and target resources typically exist in multiple versions concurrently. An update
+    operation is done whenever the newest of the source versions is newer than the newest of the target
+    versions. To determine the newest version of the resources a directory listing, partition listing or
+    manifest listing is used, a subset of qualifying entries selected from that, and the version identifier
+    extracted from the file names or partition labels of these selected entries. Subset selection and
+    extraction of the version identifier (plus potentially other metadata) is done via match patterns,
+    configured in <varname>MatchPattern=</varname> in the [Source] and [Target] sections. These patterns are
+    strings that describe how files or partitions are named, with named wildcards for specific fields such as
+    the version identifier. The following wildcards are defined:</para>
+
+    <table>
+      <title>Match Pattern Wildcards</title>
+
+      <tgroup cols='2' align='left' colsep='1' rowsep='1'>
+        <colspec colname="name" />
+        <colspec colname="explanation" />
+
+        <thead>
+          <row>
+            <entry>Wildcard</entry>
+            <entry>Description</entry>
+            <entry>Format</entry>
+            <entry>Notes</entry>
+          </row>
+        </thead>
+
+        <tbody>
+          <row>
+            <entry><literal>@v</literal></entry>
+            <entry>Version identifier</entry>
+            <entry>Valid version string</entry>
+            <entry>Mandatory</entry>
+          </row>
+
+          <row>
+            <entry><literal>@u</literal></entry>
+            <entry>GPT partition UUID</entry>
+            <entry>Valid 128-Bit UUID string</entry>
+            <entry>Only relevant if target resource type chosen as <constant>partition</constant></entry>
+          </row>
+
+          <row>
+            <entry><literal>@f</literal></entry>
+            <entry>GPT partition flags</entry>
+            <entry>Formatted hexadecimal integer</entry>
+            <entry>Only relevant if target resource type chosen as <constant>partition</constant></entry>
+          </row>
+
+          <row>
+            <entry><literal>@a</literal></entry>
+            <entry>GPT partition flag NoAuto</entry>
+            <entry>Either <literal>0</literal> or <literal>1</literal></entry>
+            <entry>Controls NoAuto bit of the GPT partition flags, as per <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>; only relevant if target resource type chosen as <constant>partition</constant></entry>
+          </row>
+
+          <row>
+            <entry><literal>@g</literal></entry>
+            <entry>GPT partition flag GrowFileSystem</entry>
+            <entry>Either <literal>0</literal> or <literal>1</literal></entry>
+            <entry>Controls GrowFileSystem bit of the GPT partition flags, as per <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink>; only relevant if target resource type chosen as <constant>partition</constant></entry>
+          </row>
+
+          <row>
+            <entry><literal>@r</literal></entry>
+            <entry>Read-only flag</entry>
+            <entry>Either <literal>0</literal> or <literal>1</literal></entry>
+            <entry>Controls ReadOnly bit of the GPT partition flags, as per <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions Specification</ulink> and other output read-only flags, see <varname>ReadOnly=</varname> below</entry>
+          </row>
+
+          <row>
+            <entry><literal>@t</literal></entry>
+            <entry>File modification time</entry>
+            <entry>Formatted decimal integer, µs since UNIX epoch Jan 1st 1970</entry>
+            <entry>Only relevant if target resource type chosen as <constant>regular-file</constant></entry>
+          </row>
+
+          <row>
+            <entry><literal>@m</literal></entry>
+            <entry>File access mode</entry>
+            <entry>Formatted octal integer, in UNIX fashion</entry>
+            <entry>Only relevant if target resource type chosen as <constant>regular-file</constant></entry>
+          </row>
+
+          <row>
+            <entry><literal>@s</literal></entry>
+            <entry>File size after decompression</entry>
+            <entry>Formatted decimal integer</entry>
+            <entry>Useful for measuring progress and to improve partition allocation logic</entry>
+          </row>
+
+          <row>
+            <entry><literal>@d</literal></entry>
+            <entry>Tries done</entry>
+            <entry>Formatted decimal integer</entry>
+            <entry>Useful when operating with kernel image files, as per <ulink url="https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT">Automatic Boot Assessment</ulink></entry>
+          </row>
+
+          <row>
+            <entry><literal>@l</literal></entry>
+            <entry>Tries left</entry>
+            <entry>Formatted decimal integer</entry>
+            <entry>Useful when operating with kernel image files, as per <ulink url="https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT">Automatic Boot Assessment</ulink></entry>
+          </row>
+
+          <row>
+            <entry><literal>@h</literal></entry>
+            <entry>SHA256 hash of compressed file</entry>
+            <entry>64 hexadecimal characters</entry>
+            <entry>The SHA256 hash of the compressed file; not useful for <constant>url-file</constant> or <constant>url-tar</constant> where the SHA256 hash is already included in the manifest file anyway</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </table>
+
+    <para>Of these wildcards only <literal>@v</literal> must be present in a valid pattern, all other
+    wildcards are optional. Each wildcard may be used at most once in each pattern. A typical wildcard
+    matching a file system source image could be <literal>MatchPattern=foobar_@v.raw.xz</literal>, i.e. any file
+    whose name begins with <literal>foobar_</literal>, followed by a version ID and suffixed by
+    <literal>.raw.xz</literal>.</para>
+
+    <para>Do not confuse the <literal>@</literal> pattern matching wildcard prefix with the
+    <literal>%</literal> specifier expansion prefix. The former encapsulate a variable part of a match
+    pattern string, the latter are simple shortcuts that are expanded while the drop-in files are
+    parsed. For details about specifiers, see below.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>[Transfer] Section Options</title>
+
+    <para>This section defines general properties of this transfer.</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><varname>MinVersion=</varname></term>
+
+        <listitem><para>Specifies the minimum version to require for this transfer to take place. If the
+        source or target patterns in this transfer definition match files older than this version they will
+        be considered obsolete, and never be considered for the update operation.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>ProtectVersion=</varname></term>
+
+        <listitem><para>Takes one or more version strings to mark as "protected". Protected versions are
+        never removed while making room for new, updated versions. This is useful to ensure that the
+        currently booted OS version (or auxiliary resources associated with it) is not replaced/overwritten
+        during updates, in order to avoid runtime file system corruptions.</para>
+
+        <para>Like many of the settings in these configuration files this setting supports specifier
+        expansion. It's particularly useful to set this setting to one of the <literal>%A</literal>,
+        <literal>%B</literal> or <literal>%w</literal> specifiers to automatically refer to the current OS
+        version of the running system. See below for details on supported specifiers.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Verify=</varname></term>
+
+        <listitem><para>Takes a boolean, defaults to yes. Controls whether to cryptographically verify
+        downloaded resources (specifically: validate the GPG signatures for downloaded
+        <filename>SHA256SUMS</filename> manifest files, via their detached signature files
+        <filename>SHA256SUMS.gpg</filename> in combination with the system keyring
+        <filename>/usr/lib/systemd/import-pubring.gpg</filename> or
+        <filename>/etc/systemd/import-pubring.gpg</filename>).</para>
+
+        <para>This option is essential to provide integrity guarantees for downloaded resources and thus
+        should be left enabled, outside of test environments.</para>
+
+        <para>Note that the downloaded payload files are unconditionally checked against the SHA256 hashes
+        listed in the manifest. This option only controls whether the signatures of these manifests are
+        verified.</para>
+
+        <para>This option only has an effect if the source resource type is selected as
+        <constant>url-file</constant> or <constant>url-tar</constant>, as integrity and authentication
+        checking is only available for transfers from remote sources.</para></listitem>
+      </varlistentry>
+
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>[Source] Section Options</title>
+
+    <para>This section defines properties of the transfer source.</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><varname>Type=</varname></term>
+
+        <listitem><para>Specifies the resource type of the source for the transfer. Takes one of
+        <constant>url-file</constant>, <constant>url-tar</constant>, <constant>tar</constant>,
+        <constant>regular-file</constant>, <constant>directory</constant> or
+        <constant>subvolume</constant>. For details about the resource types, see above. This option is
+        mandatory.</para>
+
+        <para>Note that only some combinations of source and target resource types are supported, see
+        above.</para></listitem>
+      </varlistentry>
+    </variablelist>
+
+    <variablelist>
+      <varlistentry>
+        <term><varname>Path=</varname></term>
+
+        <listitem><para>Specifies where to find source versions of this resource.</para>
+
+        <para>If the source type is selected as <constant>url-file</constant> or
+        <constant>url-tar</constant> this must be a HTTP/HTTPS URL. The URL is suffixed with
+        <filename>/SHA256SUMS</filename> to acquire the manifest file, with
+        <filename>/SHA256SUMS.gpg</filename> to acquire the detached signature file for it, and with the file
+        names listed in the manifest file in case an update is executed and a resource shall be
+        downloaded.</para>
+
+        <para>For all other source resource types this must be a local path in the file system, referring to
+        a local directory to find the versions of this resource in.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>MatchPattern=</varname></term>
+
+        <listitem><para>Specifies one or more file name match patterns that select the subset of files that
+        are update candidates as source for this transfer. See above for details on match patterns.</para>
+
+        <para>This option is mandatory. Any pattern listed must contain at least the <literal>@v</literal>
+        wildcard, so that a version identifier may be extracted from the filename. All other wildcards are
+        optional.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>[Target] Section Options</title>
+
+    <para>This section defines properties of the transfer target.</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><varname>Type=</varname></term>
+
+        <listitem><para>Specifies the resource type of the target for the transfer. Takes one of
+        <constant>partition</constant>, <constant>regular-file</constant>, <constant>directory</constant> or
+        <constant>subvolume</constant>. For details about the resource types, see above. This option is
+        mandatory.</para>
+
+        <para>Note that only certain combinations of source and target resource types are supported, see
+        above.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Path=</varname></term>
+
+        <listitem><para>Specifies a file system path where to look for already installed versions or place
+        newly downloaded versions of this configured resource. If <varname>Type=</varname> is set to
+        <constant>partition</constant>, expects a path to a (whole) block device node, or the special string
+        <literal>auto</literal> in which case the block device which contains the root file system of the
+        currently booted system is automatically determined and used. If <varname>Type=</varname> is set to
+        <constant>regular-file</constant>, <constant>directory</constant> or <constant>subvolume</constant>,
+        must refer to a path in the local file system referencing the directory to find or place the version
+        files or directories under.</para>
+
+        <para>Note that this mechanism cannot be used to create or remove partitions, in case
+        <varname>Type=</varname> is set to <constant>partition</constant>. Partitions must exist already, and
+        a special partition label <literal>_empty</literal> is used to indicate empty partitions. To
+        automatically generate suitable partitions on first boot, use a tool such as
+        <citerefentry><refentrytitle>systemd-repart</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>MatchPattern=</varname></term>
+
+        <listitem><para>Specifies one or more file name or partition label match patterns that select the
+        subset of files or partitions that are update candidates as targets for this transfer. See above for
+        details on match patterns.</para>
+
+        <para>This option is mandatory. Any pattern listed must contain at least the <literal>@v</literal>
+        wildcard, so that a version identifier may be extracted from the filename. All other wildcards are
+        optional.</para>
+
+        <para>This pattern is both used for matching existing installed versions and for determining the name
+        of new versions to install. If multiple patterns are specified, the first specified is used for
+        naming newly installed versions.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>MatchPartitionType=</varname></term>
+
+        <listitem><para>When the target <varname>Type=</varname> is chosen as <constant>partition</constant>,
+        specifies the GPT partition type to look for. Only partitions of this type are considered, all other
+        partitions are ignored. If not specified, the GPT partition type <constant>linux-generic</constant>
+        is used. Accepts either a literal type UUID or a symbolic type identifier. For a list of supported
+        type identifiers, see the <varname>Type=</varname> setting in
+        <citerefentry><refentrytitle>repart.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>PartitionUUID=</varname></term>
+        <term><varname>PartitionFlags=</varname></term>
+        <term><varname>PartitionNoAuto=</varname></term>
+        <term><varname>PartitionGrowFileSystem=</varname></term>
+
+        <listitem><para>When the target <varname>Type=</varname> is picked as <constant>partition</constant>,
+        selects the GPT partition UUID and partition flags to use for the updated partition. Expects a valid
+        UUID string, a hexadecimal integer, or booleans, respectively. If not set, but the source match
+        pattern includes wildcards for these fields (i.e. <literal>@u</literal>, <literal>@f</literal>,
+        <literal>@a</literal>, or <literal>@g</literal>), the values from the patterns are used. If neither
+        configured with wildcards or these explicit settings, the values are left untouched. If both the
+        overall <varname>PartitionFlags=</varname> flags setting and the individual flag settings
+        <varname>PartitionNoAuto=</varname> and <varname>PartitionGrowFileSystem=</varname> are used (or the
+        wildcards for them), then the latter override the former, i.e. the individual flag bit overrides the
+        overall flags value. See <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable
+        Partitions Specification</ulink> for details about these flags.</para>
+
+        <para>Note that these settings are not used for matching, they only have effect on newly written
+        partitions in case a transfer takes place.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>ReadOnly=</varname></term>
+
+        <listitem><para>Controls whether to mark the resulting file, subvolume or partition read-only. If the
+        target type is <constant>partition</constant> this controls the ReadOnly partition flag, as per
+        <ulink url="https://uapi-group.org/specifications/specs/discoverable_partitions_specification">Discoverable Partitions
+        Specification</ulink>, similar to the <varname>PartitionNoAuto=</varname> and
+        <varname>PartitionGrowFileSystem=</varname> flags described above. If the target type is
+        <constant>regular-file</constant>, the writable bit is removed from the access mode. If the
+        target type is <constant>subvolume</constant>, the subvolume will be marked read-only as a
+        whole. Finally, if the target <varname>Type=</varname> is selected as <constant>directory</constant>,
+        the "immutable" file attribute is set, see <citerefentry
+        project='man-pages'><refentrytitle>chattr</refentrytitle><manvolnum>1</manvolnum></citerefentry> for
+        details.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Mode=</varname></term>
+
+        <listitem><para>The UNIX file access mode to use for newly created files in case the target resource
+        type is picked as <constant>regular-file</constant>. Expects an octal integer, in typical UNIX
+        fashion. If not set, but the source match pattern includes a wildcard for this field
+        (i.e. <literal>@t</literal>), the value from the pattern is used.</para>
+
+        <para>Note that this setting is not used for matching, it only has an effect on newly written
+        files when a transfer takes place.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>TriesDone=</varname></term>
+        <term><varname>TriesLeft=</varname></term>
+
+        <listitem><para>These options take positive, decimal integers, and control the number of attempts
+        done and left for this file. These settings are useful for managing kernel images, following the
+        scheme defined in <ulink url="https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT">Automatic Boot
+        Assessment</ulink>, and only have an effect if the target pattern includes the <literal>@d</literal>
+        or <literal>@l</literal> wildcards.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>InstancesMax=</varname></term>
+
+        <listitem><para>Takes a decimal integer equal to or greater than 2. This configures how many concurrent
+        versions of the resource to keep. Whenever a new update is initiated it is made sure that no more
+        than the number of versions specified here minus one exist in the target. Any excess versions are
+        deleted (in case the target <varname>Type=</varname> of <constant>regular-file</constant>,
+        <constant>directory</constant>, <constant>subvolume</constant> is used) or emptied (in case the
+        target <varname>Type=</varname> of <constant>partition</constant> is used; emptying in this case
+        simply means to set the partition label to the special string <literal>_empty</literal>; note that no
+        partitions are actually removed). After an update is completed the number of concurrent versions of
+        the target resources is equal to or below the number specified here.</para>
+
+        <para>Note that this setting may be set differently for each transfer. However, it generally is
+        advisable to keep this setting the same for all transfers, since otherwise incomplete combinations of
+        files or partitions will be left installed.</para>
+
+        <para>If the target <varname>Type=</varname> is selected as <constant>partition</constant>, the number
+        of concurrent versions to keep is additionally restricted by the number of partition slots of the
+        right type in the partition table. I.e. if there are only 2 partition slots for the selected
+        partition type, setting this value larger than 2 is without effect, since no more than 2 concurrent
+        versions could be stored in the image anyway.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>RemoveTemporary=</varname></term>
+
+        <listitem><para>Takes a boolean argument. If this option is enabled (which is the default) before
+        initiating an update, all left-over, incomplete updates from a previous attempt are removed from the
+        target directory. This only has an effect if the target resource <varname>Type=</varname> is selected
+        as <constant>regular-file</constant>, <constant>directory</constant> or
+        <constant>subvolume</constant>.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>CurrentSymlink=</varname></term>
+
+        <listitem><para>Takes a symlink name as argument. If this option is used, as the last step of the
+        update a symlink under the specified name is created/updated pointing to the completed update. This
+        is useful in to provide a stable name always pointing to the newest version of the resource. This is
+        only supported if the target resource <varname>Type=</varname> is selected as
+        <constant>regular-file</constant>, <constant>directory</constant> or
+        <constant>subvolume</constant>.</para></listitem>
+      </varlistentry>
+
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Specifiers</title>
+
+    <para>Specifiers may be used in the <varname>MinVersion=</varname>, <varname>ProtectVersion=</varname>,
+    <varname>Path=</varname>, <varname>MatchPattern=</varname> and <varname>CurrentSymlink=</varname>
+    settings. The following expansions are understood:</para>
+      <table class='specifiers'>
+        <title>Specifiers available</title>
+        <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+          <colspec colname="spec" />
+          <colspec colname="mean" />
+          <colspec colname="detail" />
+          <thead>
+            <row>
+              <entry>Specifier</entry>
+              <entry>Meaning</entry>
+              <entry>Details</entry>
+            </row>
+          </thead>
+          <tbody>
+            <xi:include href="standard-specifiers.xml" xpointer="a"/>
+            <xi:include href="standard-specifiers.xml" xpointer="A"/>
+            <xi:include href="standard-specifiers.xml" xpointer="b"/>
+            <xi:include href="standard-specifiers.xml" xpointer="B"/>
+            <xi:include href="standard-specifiers.xml" xpointer="H"/>
+            <xi:include href="standard-specifiers.xml" xpointer="l"/>
+            <xi:include href="standard-specifiers.xml" xpointer="m"/>
+            <xi:include href="standard-specifiers.xml" xpointer="M"/>
+            <xi:include href="standard-specifiers.xml" xpointer="o"/>
+            <xi:include href="standard-specifiers.xml" xpointer="v"/>
+            <xi:include href="standard-specifiers.xml" xpointer="w"/>
+            <xi:include href="standard-specifiers.xml" xpointer="W"/>
+            <xi:include href="standard-specifiers.xml" xpointer="T"/>
+            <xi:include href="standard-specifiers.xml" xpointer="V"/>
+            <xi:include href="standard-specifiers.xml" xpointer="percent"/>
+          </tbody>
+        </tgroup>
+      </table>
+
+    <para>Do not confuse the <literal>%</literal> specifier expansion prefix with the <literal>@</literal>
+    pattern matching wildcard prefix. The former are simple shortcuts that are expanded while the drop-in
+    files are parsed, the latter encapsulate a variable part of a match pattern string. For details about
+    pattern matching wildcards, see above.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>Updates for a Verity Enabled Secure OS</title>
+
+      <para>With the following three files we define a root file system partition, a matching Verity
+      partition, and a unified kernel image to update as one. This example is an extension of the example
+      discussed earlier in this man page.</para>
+
+      <para><programlisting># /usr/lib/sysupdate.d/50-verity.conf
+[Transfer]
+ProtectVersion=%A
+
+[Source]
+Type=url-file
+Path=https://download.example.com/
+MatchPattern=foobarOS_@v_@u.verity.xz
+
+[Target]
+Type=partition
+Path=auto
+MatchPattern=foobarOS_@v_verity
+MatchPartitionType=root-verity
+PartitionFlags=0
+PartitionReadOnly=1</programlisting></para>
+
+      <para>The above defines the update mechanism for the Verity partition of the root file system. Verity
+      partition images are downloaded from
+      <literal>https://download.example.com/foobarOS_@v_@u.verity.xz</literal> and written to a suitable
+      local partition, which is marked read-only. Under the assumption this update is run from the image
+      itself the current image version (i.e. the <literal>%A</literal> specifier) is marked as protected, to
+      ensure it is not corrupted while booted. Note that the partition UUID for the target partition is
+      encoded in the source file name. Fixating the partition UUID can be useful to ensure that
+      <literal>roothash=</literal> on the kernel command line is sufficient to pinpoint both the Verity and
+      root file system partition, and also encode the Verity root level hash (under the assumption the UUID
+      in the file names match their top-level hash, the way
+      <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      suggests).</para>
+
+      <para><programlisting># /usr/lib/sysupdate.d/60-root.conf
+[Transfer]
+ProtectVersion=%A
+
+[Source]
+Type=url-file
+Path=https://download.example.com/
+MatchPattern=foobarOS_@v_@u.root.xz
+
+[Target]
+Type=partition
+Path=auto
+MatchPattern=foobarOS_@v
+MatchPartitionType=root
+PartitionFlags=0
+PartitionReadOnly=1</programlisting></para>
+
+      <para>The above defines a matching transfer definition for the root file system.</para>
+
+      <para><programlisting># /usr/lib/sysupdate.d/70-kernel.conf
+[Transfer]
+ProtectVersion=%A
+
+[Source]
+Type=url-file
+Path=https://download.example.com/
+MatchPattern=foobarOS_@v.efi.xz
+
+[Target]
+Type=regular-file
+Path=/efi/EFI/Linux
+MatchPattern=foobarOS_@v+@l-@d.efi \
+             foobarOS_@v+@l.efi \
+             foobarOS_@v.efi
+Mode=0444
+TriesLeft=3
+TriesDone=0
+InstancesMax=2</programlisting></para>
+
+        <para>The above installs a unified kernel image into the ESP (which is mounted to
+        <filename>/efi/</filename>), as per <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot
+        Loader Specification</ulink> Type #2. This defines three possible patterns for the names of the
+        kernel images, as per <ulink url="https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT">Automatic Boot
+        Assessment</ulink>, and ensures when installing new kernels, they are set up with 3 tries left. No
+        more than two parallel kernels are kept.</para>
+
+        <para>With this setup the web server would serve the following files, for a hypothetical version 7 of
+        the OS:</para>
+
+        <itemizedlist>
+          <listitem><para><filename>SHA256SUMS</filename> – The manifest file, containing available files and their SHA256 hashes</para></listitem>
+          <listitem><para><filename>SHA256SUMS.gpg</filename> – The detached cryptographic signature for the manifest file</para></listitem>
+          <listitem><para><filename>foobarOS_7_8b8186b1-2b4e-4eb6-ad39-8d4d18d2a8fb.verity.xz</filename> – The Verity image for version 7</para></listitem>
+          <listitem><para><filename>foobarOS_7_f4d1234f-3ebf-47c4-b31d-4052982f9a2f.root.xz</filename> – The root file system image for version 7</para></listitem>
+          <listitem><para><filename>foobarOS_7_efi.xz</filename> – The unified kernel image for version 7</para></listitem>
+        </itemizedlist>
+
+        <para>For each new OS release a new set of the latter three files would be added, each time with an
+        updated version. The <filename>SHA256SUMS</filename> manifest should then be updated accordingly,
+        listing all files for all versions that shall be offered for download.</para>
+    </example>
+
+    <example>
+      <title>Updates for Plain Directory Container Image</title>
+
+      <para><programlisting>
+[Source]
+Type=url-tar
+Path=https://download.example.com/
+MatchPattern=myContainer_@v.tar.gz
+
+[Target]
+Type=subvolume
+Path=/var/lib/machines
+MatchPattern=myContainer_@v
+CurrentSymlink=myContainer</programlisting></para>
+
+      <para>On updates this downloads <literal>https://download.example.com/myContainer_@v.tar.gz</literal>
+      and decompresses/unpacks it to <filename>/var/lib/machines/myContainer_@v</filename>. After each update
+      a symlink <filename>/var/lib/machines/myContainer</filename> is created/updated always pointing to the
+      most recent update.</para>
+    </example>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-sysupdate</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-repart</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/tc.xml b/man/tc.xml
index e5c70d4..8d39be3 100644
--- a/man/tc.xml
+++ b/man/tc.xml
@@ -12,7 +12,7 @@
       <listitem>
         <para>Configures the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
         <literal>clsact</literal>, <literal>ingress</literal> or a class identifier. The class identifier is
-        specified as the major and minor numbers in hexadecimal in the range 0x1–Oxffff separated with a
+        specified as the major and minor numbers in hexadecimal in the range 0x1–0xffff separated with a
         colon (<literal>major:minor</literal>). Defaults to <literal>root</literal>.</para>
       </listitem>
     </varlistentry>
@@ -30,7 +30,7 @@
       <listitem>
         <para>Configures the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>, or a
         qdisc identifier. The qdisc identifier is specified as the major and minor numbers in hexadecimal in
-        the range 0x1–Oxffff separated with a colon (<literal>major:minor</literal>). Defaults to
+        the range 0x1–0xffff separated with a colon (<literal>major:minor</literal>). Defaults to
         <literal>root</literal>.
         </para>
       </listitem>
@@ -40,7 +40,7 @@
       <term><varname>ClassId=</varname></term>
       <listitem>
         <para>Configures the unique identifier of the class. It is specified as the major and minor numbers in
-        hexadecimal in the range 0x1–Oxffff separated with a colon (<literal>major:minor</literal>).
+        hexadecimal in the range 0x1–0xffff separated with a colon (<literal>major:minor</literal>).
         Defaults to unset.</para>
       </listitem>
     </varlistentry>
diff --git a/man/timesyncd.conf.xml b/man/timesyncd.conf.xml
index 3fd11ce..07472cd 100644
--- a/man/timesyncd.conf.xml
+++ b/man/timesyncd.conf.xml
@@ -103,6 +103,18 @@
         Defaults to 30 seconds and must not be smaller than 1 second.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>SaveIntervalSec=</varname></term>
+        <listitem><para>The interval at which the current time is periodically saved to disk, in the absence
+        of any recent synchronisation from an NTP server. This is especially useful for offline systems
+        with no local RTC, as it will guarantee that the system clock remains roughly monotonic across
+        reboots.</para>
+
+        <para>Takes a time interval value. The default unit is seconds, but other units may be specified, see
+        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+        Defaults to 60 seconds.</para></listitem>
+      </varlistentry>
+
     </variablelist>
   </refsect1>
 
diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
index 305033b..b50423d 100644
--- a/man/tmpfiles.d.xml
+++ b/man/tmpfiles.d.xml
@@ -43,12 +43,12 @@
 f+    /file/to/create-or-truncate              mode user group -           content
 w     /file/to/write-to                        -    -    -     -           content
 w+    /file/to/append-to                       -    -    -     -           content
-d     /directory/to/create-and-cleanup         mode user group cleanup-age -
+d     /directory/to/create-and-clean-up        mode user group cleanup-age -
 D     /directory/to/create-and-remove          mode user group cleanup-age -
-e     /directory/to/cleanup                    mode user group cleanup-age -
-v     /subvolume-or-directory/to/create        mode user group -           -
-q     /subvolume-or-directory/to/create        mode user group -           -
-Q     /subvolume-or-directory/to/create        mode user group -           -
+e     /directory/to/clean-up                   mode user group cleanup-age -
+v     /subvolume-or-directory/to/create        mode user group cleanup-age -
+q     /subvolume-or-directory/to/create        mode user group cleanup-age -
+Q     /subvolume-or-directory/to/create        mode user group cleanup-age -
 p     /fifo/to/create                          mode user group -           -
 p+    /fifo/to/[re]create                      mode user group -           -
 L     /symlink/to/create                       -    -    -     -           symlink/target/path
@@ -57,11 +57,11 @@
 c+    /dev/char-device-to-[re]create           mode user group -           major:minor
 b     /dev/block-device-to-create              mode user group -           major:minor
 b+    /dev/block-device-to-[re]create          mode user group -           major:minor
-C     /target/to/create                        -    -    -     -           /source/to/copy
-x     /path-or-glob/to/ignore/recursively      -    -    -     -           -
-X     /path-or-glob/to/ignore                  -    -    -     -           -
-r     /empty/dir/to/remove                     -    -    -     -           -
-R     /dir/to/remove/recursively               -    -    -     -           -
+C     /target/to/create                        -    -    -     cleanup-age /source/to/copy
+x     /path-or-glob/to/ignore/recursively      -    -    -     cleanup-age -
+X     /path-or-glob/to/ignore                  -    -    -     cleanup-age -
+r     /path-or-glob/to/remove                  -    -    -     -           -
+R     /path-or-glob/to/remove/recursively      -    -    -     -           -
 z     /path-or-glob/to/adjust/mode             mode user group -           -
 Z     /path-or-glob/to/adjust/mode/recursively mode user group -           -
 t     /path-or-glob/to/set/xattrs              -    -    -     -           xattrs
@@ -88,9 +88,10 @@
     <filename>/sys/</filename> or <filename>/proc/</filename>, as well as some other directories below
     <filename>/var/</filename>).</para>
 
-    <para><command>systemd-tmpfiles</command> uses this configuration to create volatile files and
-    directories during boot and to do periodic cleanup afterwards. See
-    <citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
+    <para><citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    uses this configuration to create volatile files and directories during boot and to do periodic cleanup
+    afterwards. See
+    <citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry> for
     the description of <filename>systemd-tmpfiles-setup.service</filename>,
     <filename>systemd-tmpfiles-clean.service</filename>, and associated units.</para>
 
@@ -160,8 +161,10 @@
     <refsect2>
       <title>Type</title>
 
-      <para>The type consists of a single letter and optionally an exclamation mark (<literal>!</literal>)
-      minus sign (<literal>-</literal>), and/or equals sign (<literal>=</literal>).</para>
+      <para>The type consists of a single letter and optionally one or more modifier characters: a plus sign
+      (<literal>+</literal>), exclamation mark (<literal>!</literal>), minus sign (<literal>-</literal>),
+      equals sign (<literal>=</literal>), tilde character (<literal>~</literal>) and/or caret
+      (<literal>^</literal>).</para>
 
       <para>The following line types are understood:</para>
 
@@ -189,7 +192,7 @@
         <varlistentry>
           <term><varname>d</varname></term>
           <listitem><para>Create a directory. The mode and ownership will be adjusted if specified. Contents
-          of this directory are subject to time based cleanup if the age argument is specified.
+          of this directory are subject to time-based cleanup if the age argument is specified.
           </para></listitem>
         </varlistentry>
 
@@ -204,7 +207,7 @@
           <listitem><para>Adjust the mode and ownership of existing directories and remove their contents
           based on age.
           Lines of this type accept shell-style globs in place of normal path names. Contents of the
-          directories are subject to time based cleanup if the age argument is specified. If the age argument
+          directories are subject to time-based cleanup if the age argument is specified. If the age argument
           is <literal>0</literal>, contents will be unconditionally deleted every time
           <command>systemd-tmpfiles --clean</command> is run.</para>
 
@@ -330,7 +333,9 @@
           exists and is not empty. Instead, the entire copy operation is
           skipped. If the argument is omitted, files from the source directory
           <filename>/usr/share/factory/</filename> with the same name
-          are copied. Does not follow symlinks.</para></listitem>
+          are copied. Does not follow symlinks. Contents of the directories
+          are subject to time-based cleanup if the age argument is specified.
+          </para></listitem>
         </varlistentry>
 
         <varlistentry>
@@ -414,8 +419,8 @@
           place of normal path names.</para>
 
           <para>The format of the argument field is <varname>[+-=][aAcCdDeijPsStTu]</varname>. The prefix
-          <varname>+</varname> (the default one) causes the attribute(s) to be added; <varname>-</varname>
-          causes the attribute(s) to be removed; <varname>=</varname> causes the attributes to be set exactly
+          <varname>+</varname> (the default one) causes the attributes to be added; <varname>-</varname>
+          causes the attributes to be removed; <varname>=</varname> causes the attributes to be set exactly
           as the following letters. The letters <literal>aAcCdDeijPsStTu</literal> select the new attributes
           for the files, see <citerefentry project='man-pages'><refentrytitle>chattr</refentrytitle>
           <manvolnum>1</manvolnum></citerefentry> for further information.
@@ -458,6 +463,10 @@
           symlinks.</para></listitem>
         </varlistentry>
       </variablelist>
+    </refsect2>
+
+    <refsect2>
+      <title>Type Modifiers</title>
 
       <para>If the exclamation mark (<literal>!</literal>) is used, this line is only safe to execute during
       boot, and can break a running system. Lines without the exclamation mark are presumed to be safe to
@@ -487,6 +496,23 @@
       be either directories or directory symlinks). For example, if there is a FIFO in place of one of the parent path
       components it will be replaced with a directory.</para>
 
+      <para>If the tilde character (<literal>~</literal>) is used, the argument (i.e. 6th) column is <ulink
+      url="https://www.rfc-editor.org/rfc/rfc4648.html">Base64 decoded</ulink> before use. This modifier is
+      only supported on line types that can write file contents, i.e. <varname>f</varname>,
+      <varname>f+</varname>, <varname>w</varname>, <varname>+</varname>. This is useful for writing arbitrary
+      binary data (including newlines and NUL bytes) to files. Note that if this switch is used, the argument
+      is not subject to specifier expansion, neither before nor after Base64 decoding.</para>
+
+      <para>If the caret character (<literal>^</literal>) is used, the argument (i.e. 6th) column takes a
+      service credential name to read the argument data from. See <ulink
+      url="https://systemd.io/CREDENTIALS">System and Service Credentials</ulink> for details about the
+      credentials concept. This modifier is only supported on line types that can write file contents,
+      i.e. <varname>f</varname>, <varname>f+</varname>, <varname>w</varname>, <varname>w+</varname>. This is
+      useful for writing arbitrary files with contents sourced from elsewhere, including from VM or container
+      managers further up. If the specified credential is not set for the <command>systemd-tmpfiles</command>
+      service, the line is silently skipped. If <literal>^</literal> and <literal>~</literal> are combined
+      Base64 decoding is applied to the credential contents.</para>
+
       <para>Note that for all line types that result in creation of any kind of file node
       (i.e. <varname>f</varname>/<varname>F</varname>,
       <varname>d</varname>/<varname>D</varname>/<varname>v</varname>/<varname>q</varname>/<varname>Q</varname>,
@@ -506,27 +532,24 @@
     <refsect2>
       <title>Mode</title>
 
-      <para>The file access mode to use when creating this file or
-      directory. If omitted or when set to <literal>-</literal>, the
-      default is used: 0755 for directories, 0644 for all other file
-      objects.  For <varname>z</varname>, <varname>Z</varname> lines,
-      if omitted or when set to <literal>-</literal>, the file access
-      mode will not be modified. This parameter is ignored for
-      <varname>x</varname>, <varname>r</varname>,
-      <varname>R</varname>, <varname>L</varname>, <varname>t</varname>,
-      and <varname>a</varname> lines.</para>
+      <para>The file access mode to use when creating this file or directory. If omitted or when set to
+      <literal>-</literal>, the default is used: 0755 for directories, 0644 for all other file objects. For
+      <varname>z</varname>, <varname>Z</varname> lines, if omitted or when set to <literal>-</literal>, the
+      file access mode will not be modified. This parameter is ignored for <varname>x</varname>,
+      <varname>r</varname>, <varname>R</varname>, <varname>L</varname>, <varname>t</varname>, and
+      <varname>a</varname> lines.</para>
 
-      <para>Optionally, if prefixed with <literal>~</literal>, the
-      access mode is masked based on the already set access bits for
-      existing file or directories: if the existing file has all
-      executable bits unset, all executable bits are removed from the
-      new access mode, too. Similarly, if all read bits are removed
-      from the old access mode, they will be removed from the new
-      access mode too, and if all write bits are removed, they will be
-      removed from the new access mode too. In addition, the
-      sticky/SUID/SGID bit is removed unless applied to a
-      directory. This functionality is particularly useful in
-      conjunction with <varname>Z</varname>.</para>
+      <para>Optionally, if prefixed with <literal>~</literal>, the access mode is masked based on the already
+      set access bits for existing file or directories: if the existing file has all executable bits unset,
+      all executable bits are removed from the new access mode, too. Similarly, if all read bits are removed
+      from the old access mode, they will be removed from the new access mode too, and if all write bits are
+      removed, they will be removed from the new access mode too. In addition, the sticky/SUID/SGID bit is
+      removed unless applied to a directory. This functionality is particularly useful in conjunction with
+      <varname>Z</varname>.</para>
+
+      <para>Optionally, if prefixed with <literal>:</literal>, the configured access mode is only used when
+      creating new inodes. If the inode the line refers to already exists, its access mode is left in place
+      unmodified.</para>
     </refsect2>
 
     <refsect2>
@@ -546,6 +569,10 @@
       url="https://systemd.io/UIDS-GIDS/#notes-on-resolvability-of-user-and-group-names">Notes on
       Resolvability of User and Group Names</ulink> for more information on requirements on system user/group
       definitions.</para>
+
+      <para>Optionally, if prefixed with <literal>:</literal>, the configured user/group information is only
+      used when creating new inodes. If the inode the line refers to already exists, its user/group is left
+      in place unmodified.</para>
     </refsect2>
 
     <refsect2>
@@ -754,7 +781,7 @@
       </programlisting>
 
       <para>The directory will be owned by root and have default mode. Its contents are
-      not subject to time based cleanup, but will be obliterated when
+      not subject to time-based cleanup, but will be obliterated when
       <command>systemd-tmpfiles --remove</command> runs.</para>
     </example>
 
@@ -801,6 +828,19 @@
       will be removed on boot. The directory will not be created.
       </para>
     </example>
+
+    <example>
+      <title>Provision SSH public key access for root user via Credentials in QEMU</title>
+
+      <programlisting>-smbios type=11,value=io.systemd.credential.binary:tmpfiles.extra=$(echo "f~ /root/.ssh/authorized_keys 700 root root - $(ssh-add -L | base64 -w 0)" | base64 -w 0)
+</programlisting>
+
+      <para>By passing this line to QEMU, the public key of the current user will be encoded in
+      base64, added to a tmpfiles.d line that tells systemd-tmpfiles to decode it into
+      <filename>/root/.ssh/authorized_keys</filename>, encode that line itself in base64 and
+      pass it as a Credential that will be picked up by systemd from SMBIOS on boot.
+      </para>
+    </example>
   </refsect1>
 
   <refsect1>
diff --git a/man/tpm2-crypttab.sh b/man/tpm2-crypttab.sh
index 41db2ae..c2c7405 100644
--- a/man/tpm2-crypttab.sh
+++ b/man/tpm2-crypttab.sh
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: MIT-0
+
 # Enroll the TPM2 security chip in the LUKS2 volume, and bind it to PCR 7
 # only. Replace /dev/sdXn by the partition to use (e.g. /dev/sda1).
 sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/sdXn
@@ -7,4 +9,4 @@
 
 # If that worked, let's now add the same line persistently to /etc/crypttab,
 # for the future.
-sudo bash -c 'echo "mytest /dev/sdXn - tpm2-device=auto" >> /etc/crypttab'
+sudo bash -c 'echo "mytest /dev/sdXn - tpm2-device=auto" >>/etc/crypttab'
diff --git a/man/udev.xml b/man/udev.xml
index f6ea2ab..142f295 100644
--- a/man/udev.xml
+++ b/man/udev.xml
@@ -647,13 +647,11 @@
                 <varlistentry>
                   <term><option>db_persist</option></term>
                   <listitem>
-                    <para>Set the flag (sticky bit) on the udev database entry
-                    of the event device. Device properties are then kept in the
-                    database even when
-                    <command>udevadm info --cleanup-db</command> is called.
-                    This option can be useful in certain cases
-                    (e.g. Device Mapper devices) for persisting device state
-                    on the transition from initramfs.</para>
+                    <para>Set the flag (sticky bit) on the udev database entry of the event device. Device
+                    properties are then kept in the database even when <command>udevadm info
+                    --cleanup-db</command> is called.  This option can be useful in certain cases
+                    (e.g. Device Mapper devices) for persisting device state on the transition from
+                    initrd.</para>
                   </listitem>
                 </varlistentry>
                 <varlistentry>
@@ -669,7 +667,7 @@
                     log level is applied when the line including this rule is processed. So, for
                     debugging, it is recommended that this is specified at earlier place, e.g., the
                     first line of <filename>00-debug.rules</filename>.</para>
-                    <para>Example for debugging uevent processing for network interfaces.
+                    <para>Example for debugging uevent processing for network interfaces:
                     <programlisting># /etc/udev/rules.d/00-debug-net.rules
 SUBSYSTEM=="net", OPTIONS="log_level=debug"</programlisting></para>
                   </listitem>
diff --git a/man/udev_enumerate_new.xml b/man/udev_enumerate_new.xml
index 3360cf0..4a96168 100644
--- a/man/udev_enumerate_new.xml
+++ b/man/udev_enumerate_new.xml
@@ -59,7 +59,7 @@
     <title>Return Value</title>
 
     <para>On success, <function>udev_enumerate_new()</function> returns a
-    pointer to the allocated udev monitor. On failure,
+    pointer to the allocated enumeration object. On failure,
     <constant>NULL</constant> is returned.
     <function>udev_enumerate_ref()</function> returns the argument
     that it was passed, unmodified.
diff --git a/man/udevadm.xml b/man/udevadm.xml
index 90adc64..0298123 100644
--- a/man/udevadm.xml
+++ b/man/udevadm.xml
@@ -48,6 +48,12 @@
     <cmdsynopsis>
       <command>udevadm test-builtin <optional>options</optional> <replaceable>command</replaceable> <replaceable>devpath</replaceable></command>
     </cmdsynopsis>
+    <cmdsynopsis>
+      <command>udevadm wait <optional>options</optional> <replaceable>device|syspath</replaceable></command>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>udevadm lock <optional>options</optional> <replaceable>command</replaceable></command>
+    </cmdsynopsis>
   </refsynopsisdiv>
 
   <refsect1><title>Description</title>
@@ -99,6 +105,24 @@
         </varlistentry>
 
         <varlistentry>
+          <term><option>--property=<replaceable>NAME</replaceable></option></term>
+          <listitem>
+            <para>When showing device properties using the <option>--query=property</option>
+            option, limit display to properties specified in the argument. The argument should
+            be a comma-separated list of property names. If not specified, all known properties
+            are shown.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><option>--value</option></term>
+          <listitem>
+            <para>When showing device properties using the <option>--query=property</option>
+            option, print only their values, and skip the property name and <literal>=</literal>.</para>
+            <para>Cannot be used together with <option>-x/--export</option> or
+            <option>-P/--export-prefix</option>.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
           <term><option>-p</option></term>
           <term><option>--path=<replaceable>DEVPATH</replaceable></option></term>
           <listitem>
@@ -137,6 +161,15 @@
           </listitem>
         </varlistentry>
         <varlistentry>
+          <term><option>-t</option></term>
+          <term><option>--tree</option></term>
+          <listitem>
+            <para>Display a sysfs tree. This recursively iterates through the sysfs hierarchy and displays it
+            in a tree structure. If a path is specified only the subtree below and its parent directories are
+            shown. This will show both device and subsystem items.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
           <term><option>-x</option></term>
           <term><option>--export</option></term>
           <listitem>
@@ -185,6 +218,7 @@
         </varlistentry>
 
         <xi:include href="standard-options.xml" xpointer="help" />
+        <xi:include href="standard-options.xml" xpointer="no-pager" />
       </variablelist>
 
       <para>The generated output shows the current device database entry in a terse format. Each line shown
@@ -207,6 +241,30 @@
               <entry>Device path in <filename>/sys/</filename></entry>
             </row>
             <row>
+              <entry><literal>M:</literal></entry>
+              <entry>Device name in <filename>/sys/</filename> (i.e. the last component of <literal>P:</literal>)</entry>
+            </row>
+            <row>
+              <entry><literal>R:</literal></entry>
+              <entry>Device number in <filename>/sys/</filename> (i.e. the numeric suffix of the last component of <literal>P:</literal>)</entry>
+            </row>
+            <row>
+              <entry><literal>U:</literal></entry>
+              <entry>Kernel subsystem</entry>
+            </row>
+            <row>
+              <entry><literal>T:</literal></entry>
+              <entry>Kernel device type within subsystem</entry>
+            </row>
+            <row>
+              <entry><literal>D:</literal></entry>
+              <entry>Kernel device node major/minor</entry>
+            </row>
+            <row>
+              <entry><literal>I:</literal></entry>
+              <entry>Network interface index</entry>
+            </row>
+            <row>
               <entry><literal>N:</literal></entry>
               <entry>Kernel device node name</entry>
             </row>
@@ -219,6 +277,14 @@
               <entry>Device node symlink</entry>
             </row>
             <row>
+              <entry><literal>Q:</literal></entry>
+              <entry>Block device sequence number (DISKSEQ)</entry>
+            </row>
+            <row>
+              <entry><literal>V:</literal></entry>
+              <entry>Attached driver</entry>
+            </row>
+            <row>
               <entry><literal>E:</literal></entry>
               <entry>Device property</entry>
             </row>
@@ -262,9 +328,9 @@
           <term><option>-t</option></term>
           <term><option>--type=<replaceable>TYPE</replaceable></option></term>
           <listitem>
-            <para>Trigger a specific type of devices. Valid types are:
-            <command>devices</command>, <command>subsystems</command>.
-            The default value is <command>devices</command>.</para>
+            <para>Trigger a specific type of devices. Valid types are <literal>all</literal>,
+            <literal>devices</literal>, and <literal>subsystems</literal>. The default value is
+            <literal>devices</literal>.</para>
           </listitem>
         </varlistentry>
         <varlistentry>
@@ -280,6 +346,19 @@
           </listitem>
         </varlistentry>
         <varlistentry>
+          <term><option>--prioritized-subsystem=<replaceable>SUBSYSTEM<optional>,<replaceable>SUBSYSTEM</replaceable>…</optional></replaceable></option></term>
+          <listitem>
+            <para>Takes a comma separated list of subsystems. When triggering events for devices, the
+            devices from the specified subsystems and their parents are triggered first. For example,
+            if <option>--prioritized-subsystem=block,net</option>, then firstly all block devices and
+            their parents are triggered, in the next all network devices and their parents are
+            triggered, and lastly the other devices are triggered. This option can be specified
+            multiple times, and in that case the lists of the subsystems will be merged. That is,
+            <option>--prioritized-subsystem=block --prioritized-subsystem=net</option> is equivalent to
+            <option>--prioritized-subsystem=block,net</option>.</para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
           <term><option>-s</option></term>
           <term><option>--subsystem-match=<replaceable>SUBSYSTEM</replaceable></option></term>
           <listitem>
@@ -365,6 +444,29 @@
           </listitem>
         </varlistentry>
         <varlistentry>
+          <term><option>--initialized-match</option></term>
+          <term><option>--initialized-nomatch</option></term>
+          <listitem>
+            <para>When <option>--initialized-match</option> is specified, trigger events for devices
+            that are already initialized by <command>systemd-udevd</command>, and skip devices that
+            are not initialized yet.</para>
+            <para>When <option>--initialized-nomatch</option> is specified, trigger events for devices
+            that are not initialized by <command>systemd-udevd</command> yet, and skip devices that
+            are already initialized.</para>
+            <para>Typically, it is essential that applications which intend to use such a match, make
+            sure a suitable udev rule is installed that sets at least one property on devices that
+            shall be matched. See also Initialized Devices section below for more details.</para>
+            <para>WARNING: <option>--initialized-nomatch</option> can potentially save a significant
+            amount of time compared to re-triggering all devices in the system and e.g. can be used to
+            optimize boot time. However, this is not safe to be used in a boot sequence in general.
+            Especially, when udev rules for a device depend on its parent devices (e.g.
+            <literal>ATTRS</literal> or <literal>IMPORT{parent}</literal> keys, see
+            <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+            for more details), the final state of the device becomes easily unstable with this option.
+            </para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
           <term><option>-w</option></term>
           <term><option>--settle</option></term>
           <listitem>
@@ -577,7 +679,7 @@
 
     <refsect2><title>udevadm test
       <arg choice="opt"><replaceable>options</replaceable></arg>
-      <arg><replaceable>devpath</replaceable></arg>
+      <arg choice="opt"><replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable></arg>
     </title>
       <para>Simulate a udev event run for the given device, and print debug output.</para>
       <variablelist>
@@ -613,15 +715,208 @@
     <refsect2><title>udevadm test-builtin
       <arg choice="opt"><replaceable>options</replaceable></arg>
       <arg><replaceable>command</replaceable></arg>
-      <arg><replaceable>devpath</replaceable></arg>
+      <arg choice="opt"><replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable></arg>
     </title>
       <para>Run a built-in command <replaceable>COMMAND</replaceable>
       for device <replaceable>DEVPATH</replaceable>, and print debug
       output.</para>
       <variablelist>
+        <varlistentry>
+          <term><option>-a</option></term>
+          <term><option>--action=<replaceable>ACTION</replaceable></option></term>
+          <listitem>
+            <para>Type of event to be simulated. Possible actions are <literal>add</literal>,
+            <literal>remove</literal>, <literal>change</literal>, <literal>move</literal>,
+            <literal>online</literal>, <literal>offline</literal>, <literal>bind</literal>,
+            and <literal>unbind</literal>. Also, the special value <literal>help</literal> can be used
+            to list the possible actions. The default value is <literal>add</literal>.</para>
+          </listitem>
+        </varlistentry>
+
         <xi:include href="standard-options.xml" xpointer="help" />
       </variablelist>
     </refsect2>
+
+    <refsect2>
+      <title>udevadm wait
+      <arg choice="opt"><replaceable>options</replaceable></arg>
+      <arg choice="opt"><replaceable>device|syspath</replaceable></arg>
+      …
+      </title>
+
+      <para>Wait for devices or device symlinks being created and initialized by
+      <command>systemd-udevd</command>. Each device path must start with
+      <literal>/dev/</literal> or <literal>/sys/</literal>, e.g. <literal>/dev/sda</literal>,
+      <literal>/dev/disk/by-path/pci-0000:3c:00.0-nvme-1-part1</literal>,
+      <literal>/sys/devices/pci0000:00/0000:00:1f.6/net/eth0</literal>, or
+      <literal>/sys/class/net/eth0</literal>. This can take multiple devices. This may be useful for
+      waiting for devices being processed by <command>systemd-udevd</command> after e.g. partitioning
+      or formatting the devices.</para>
+
+      <variablelist>
+        <varlistentry>
+          <term><option>-t</option></term>
+          <term><option>--timeout=<replaceable>SECONDS</replaceable></option></term>
+          <listitem>
+            <para>Maximum number of seconds to wait for the specified devices or device symlinks being
+            created, initialized, or removed. The default value is <literal>infinity</literal>.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--initialized=<replaceable>BOOL</replaceable></option></term>
+          <listitem>
+            <para>Check if <command>systemd-udevd</command> initialized devices. Defaults to true. When
+            false, the command only checks if the specified devices exist. Set false to this setting if
+            there is no udev rules for the specified devices, as the devices will never be considered
+            as initialized in that case. See Initialized Devices section below for more details.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--removed</option></term>
+          <listitem>
+            <para>When specified, the command wait for devices being removed instead of created or
+            initialized. If this is specified, <option>--initialized=</option> will be ignored.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--settle</option></term>
+          <listitem>
+            <para>When specified, also watches the udev event queue, and wait for all queued events
+            being processed by <command>systemd-udevd</command>.</para>
+          </listitem>
+        </varlistentry>
+
+        <xi:include href="standard-options.xml" xpointer="help" />
+      </variablelist>
+    </refsect2>
+
+    <refsect2>
+      <title>udevadm lock
+      <arg choice="opt"><replaceable>options</replaceable></arg>
+      <arg choice="opt"><replaceable>command</replaceable></arg>
+      …
+      </title>
+
+      <para><command>udevadm lock</command> takes an (advisory) exclusive lock on a block device (or all
+      specified devices), as per <ulink url="https://systemd.io/BLOCK_DEVICE_LOCKING">Locking Block Device
+      Access</ulink> and invokes a program with the locks taken. When the invoked program exits the locks
+      are automatically released and its return value is propagated as exit code of <command>udevadm
+      lock</command>.</para>
+
+      <para>This tool is in particular useful to ensure that
+      <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      does not probe a block device while changes are made to it, for example partitions created or file
+      systems formatted. Note that many tools that interface with block devices natively support taking
+      relevant locks, see for example
+      <citerefentry project='man-pages'><refentrytitle>sfdisk</refentrytitle><manvolnum>8</manvolnum></citerefentry>'s
+      <option>--lock</option> switch.</para>
+
+      <para>The command expects at least one block device specified via <option>--device=</option> or
+      <option>--backing=</option>, and a command line to execute as arguments.</para>
+
+      <variablelist>
+        <varlistentry>
+          <term><option>--device=<replaceable>DEVICE</replaceable></option></term>
+          <term><option>-d <replaceable>DEVICE</replaceable></option></term>
+
+          <listitem><para>Takes a path to a device node of the device to lock. This switch may be used
+          multiple times (and in combination with <option>--backing=</option>) in order to lock multiple
+          devices. If a partition block device node is specified the containing "whole" block device is
+          automatically determined and used for the lock, as per the specification. If multiple devices are
+          specified, they are deduplicated, sorted by the major/minor of their device nodes and then locked
+          in order.</para>
+
+          <para>This switch must be used at least once, to specify at least one device to
+          lock. (Alternatively, use <option>--backing=</option>, see below.)</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--backing=<replaceable>PATH</replaceable></option></term>
+          <term><option>-b <replaceable>PATH</replaceable></option></term>
+
+          <listitem><para>If a path to a device node is specified, identical to
+          <option>--device=</option>. However, this switch alternatively accepts a path to a regular file or
+          directory, in which case the block device of the file system the file/directory resides on is
+          automatically determined and used as if it was specified with
+          <option>--device=</option>.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--timeout=<replaceable>SECS</replaceable></option></term>
+          <term><option>-t <replaceable>SECS</replaceable></option></term>
+
+          <listitem><para>Specifies how long to wait at most until all locks can be taken. Takes a value in
+          seconds, or in the usual supported time units, see
+          <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>. If
+          specified as zero the lock is attempted and if not successful the invocation will immediately
+          fail. If passed as <literal>infinity</literal> (the default) the invocation will wait indefinitely
+          until the lock can be acquired. If the lock cannot be taken in the specified time the specified
+          command will not be executed and the invocation will fail.</para></listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--print</option></term>
+          <term><option>-p</option></term>
+
+          <listitem><para>Instead of locking the specified devices and executing a command, just print the
+          device paths that would be locked, and execute no command. This command is useful to determine
+          the "whole" block device in case a partition block device is specified. The devices will be sorted
+          by their device node major number as primary ordering key and the minor number as secondary
+          ordering key (i.e. they are shown in the order they'd be locked). Note that the number of lines
+          printed here can be less than the number of <option>--device=</option> and
+          <option>--backing=</option> switches specified in case these resolve to the same "whole"
+          devices.</para></listitem>
+        </varlistentry>
+
+        <xi:include href="standard-options.xml" xpointer="help" />
+      </variablelist>
+    </refsect2>
+  </refsect1>
+
+  <refsect1>
+    <title>Initialized Devices</title>
+
+    <para>Initialized devices are those for which at least one udev rule already completed execution
+    – for any action but <literal>remove</literal> — that set a property or other device setting (and
+    thus has an entry in the udev device database). Devices are no longer considered initialized if a
+    <literal>remove</literal> action is seen for them (which removes their entry in the udev device
+    database). Note that devices that have no udev rules are never considered initialized, but might
+    still be announced via the sd-device API (or similar).</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Example</title>
+
+    <example>
+      <title>Format a File System</title>
+
+      <para>Take a lock on the backing block device while creating a file system, to ensure that
+      <command>systemd-udevd</command> doesn't probe or announce the new superblock before it is
+      comprehensively written:</para>
+
+      <programlisting># udevadm lock --device=/dev/sda1 mkfs.ext4 /dev/sda1</programlisting>
+    </example>
+
+    <example>
+      <title>Format a RAID File System</title>
+
+      <para>Similar, but take locks on multiple devices at once:</para>
+
+      <programlisting># udevadm lock --device=/dev/sda1 --device=/dev/sdb1 mkfs.btrfs /dev/sda1 /dev/sdb1</programlisting>
+    </example>
+
+    <example>
+      <title>Copy in a File System</title>
+
+      <para>Take a lock on the backing block device while copying in a prepared file system image, to ensure
+      that <command>systemd-udevd</command> doesn't probe or announce the new superblock before it is fully
+      written:</para>
+
+      <programlisting># udevadm lock -d /dev/sda1 dd if=fs.raw of=/dev/sda1</programlisting>
+    </example>
   </refsect1>
 
   <refsect1>
diff --git a/man/ukify.xml b/man/ukify.xml
new file mode 100644
index 0000000..0cf74da
--- /dev/null
+++ b/man/ukify.xml
@@ -0,0 +1,312 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+<refentry id="ukify" xmlns:xi="http://www.w3.org/2001/XInclude" conditional='ENABLE_UKIFY'>
+
+  <refentryinfo>
+    <title>ukify</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>ukify</refentrytitle>
+    <manvolnum>1</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>ukify</refname>
+    <refpurpose>Combine kernel and initrd into a signed Unified Kernel Image</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>/usr/lib/systemd/ukify</command>
+      <arg choice="plain"><replaceable>LINUX</replaceable></arg>
+      <arg choice="plain" rep="repeat"><replaceable>INITRD</replaceable></arg>
+      <arg choice="opt" rep="repeat">OPTIONS</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para>Note: this command is experimental for now. While it is intended to become a regular component of
+    systemd, it might still change in behaviour and interface.</para>
+
+    <para><command>ukify</command> is a tool that combines a kernel and an initrd with
+    a UEFI boot stub to create a
+    <ulink url="https://uapi-group.org/specifications/specs/unified_kernel_image/">Unified Kernel Image (UKI)</ulink>
+    — a PE binary that can be executed by the firmware to start the embedded linux kernel.
+    See <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    for details about the stub.</para>
+
+    <para>Additional sections will be inserted into the UKI, either automatically or only if a specific
+    option is provided. See the discussions of
+    <option>--cmdline=</option>,
+    <option>--os-release=</option>,
+    <option>--devicetree=</option>,
+    <option>--splash=</option>,
+    <option>--pcrpkey=</option>,
+    <option>--uname=</option>,
+    and <option>--section=</option>
+    below.</para>
+
+    <para>If PCR signing keys are provided via the <option>--pcr-public-key=</option> and
+    <option>--pcr-private-key=</option> options, PCR values that will be seen after booting with the given
+    kernel, initrd, and other sections, will be calculated, signed, and embedded in the UKI.
+    <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry> is
+    used to perform this calculation and signing.</para>
+
+    <para>The calculation of PCR values is done for specific boot phase paths. Those can be specified with
+    <option>--phases=</option> option. If not specified, the default provided by
+    <command>systemd-measure</command> is used. It is also possible to specify the
+    <option>--pcr-private-key=</option>, <option>--pcr-public-key=</option>, and <option>--phases=</option>
+    arguments more than once. Signatures will be then performed with each of the specified keys. When both
+    <option>--phases=</option> and <option>--pcr-private-key=</option> are used, they must be specified the
+    same number of times, and then the n-th boot phase path set will be signed by the n-th key. This can be
+    used to build different trust policies for different phases of the boot.</para>
+
+    <para>If a SecureBoot signing key is provided via the <option>--secureboot-private-key=</option> option,
+    the resulting PE binary will be signed as a whole, allowing the resulting UKI to be trusted by
+    SecureBoot. Also see the discussion of automatic enrollment in
+    <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <para>Note that the <replaceable>LINUX</replaceable> positional argument is mandatory. The
+    <replaceable>INITRD</replaceable> positional arguments are optional. If more than one is specified, they
+    will all be combined into a single PE section. This is useful to for example prepend microcode before the
+    actual initrd.</para>
+
+    <para>The following options are understood:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>--cmdline=<replaceable>TEXT</replaceable>|<replaceable>@PATH</replaceable></option></term>
+
+        <listitem><para>Specify the kernel command line (the <literal>.cmdline</literal> section). The
+        argument may be a literal string, or <literal>@</literal> followed by a path name. If not specified,
+        no command line will be embedded.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--os-release=<replaceable>TEXT</replaceable>|<replaceable>@PATH</replaceable></option></term>
+
+        <listitem><para>Specify the os-release description (the <literal>.osrel</literal> section). The
+        argument may be a literal string, or <literal>@</literal> followed by a path name. If not specified,
+        the <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+        file will be picked up from the host system.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--devicetree=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>Specify the devicetree description (the <literal>.dtb</literal> section). The
+        argument is a path to a compiled binary DeviceTree file. If not specified, the section will not be
+        present.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--splash=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>Specify a picture to display during boot (the <literal>.splash</literal> section).
+        The argument is a path to a BMP file. If not specified, the section will not be present.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--pcrpkey=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>Specify a path to a public key to embed in the <literal>.pcrpkey</literal> section.
+        If not specified, and there's exactly one <option>--pcr-public-key=</option> argument, that key will
+        be used. Otherwise, the section will not be present.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--uname=<replaceable>VERSION</replaceable></option></term>
+
+        <listitem><para>Specify the kernel version (as in <command>uname -r</command>, the
+        <literal>.uname</literal> section). If not specified, an attempt will be made to extract the version
+        string from the kernel image. It is recommended to pass this explicitly if known, because the
+        extraction is based on heuristics and not very reliable. If not specified and extraction fails, the
+        section will not be present.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--section=<replaceable>NAME</replaceable>:<replaceable>TEXT</replaceable>|<replaceable>@PATH</replaceable></option></term>
+
+        <listitem><para>Specify an arbitrary additional section
+        <literal><replaceable>NAME</replaceable></literal>. Note that the name is used as-is, and if the
+        section name should start with a dot, it must be included in <replaceable>NAME</replaceable>. The
+        argument may be a literal string, or <literal>@</literal> followed by a path name. This option may be
+        specified more than once. Any sections specified in this fashion will be inserted (in order) before
+        the <literal>.linux</literal> section which is always last.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--pcr-private-key=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>Specify a private key to use for signing PCR policies. This option may be specified
+        more than once, in which case multiple signatures will be made.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--pcr-public-key=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>Specify a public key to use for signing PCR policies. This option may be specified
+        more than once, similarly to the <option>--pcr-private-key=</option> option. If not present, the
+        public keys will be extracted from the private keys. If present, the this option must be specified
+        the same number of times as the <option>--pcr-private-key=</option> option.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--phases=<replaceable>LIST</replaceable></option></term>
+
+        <listitem><para>A comma or space-separated list of colon-separated phase paths to sign a policy for.
+        If not present, the default of
+        <citerefentry><refentrytitle>systemd-measure</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+        will be used. When this argument is present, it must appear the same number of times as the
+        <option>--pcr-private-key=</option> option. Each set of boot phase paths will be signed with the
+        corresponding private key.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--pcr-banks=<replaceable>PATH</replaceable></option></term>
+
+        <listitem><para>A comma or space-separated list of PCR banks to sign a policy for. If not present,
+        all known banks will be used (<literal>sha1</literal>, <literal>sha256</literal>,
+        <literal>sha384</literal>, <literal>sha512</literal>), which will fail if not supported by the
+        system.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--secureboot-private-key=<replaceable>SB_KEY</replaceable></option></term>
+
+        <listitem><para>A path to a private key to use for signing of the resulting binary. If the
+        <option>--signing-engine=</option> option is used, this may also be an engine-specific
+        designation.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--secureboot-certificate=<replaceable>SB_CERT</replaceable></option></term>
+
+        <listitem><para>A path to a certificate to use for signing of the resulting binary. If the
+        <option>--signing-engine=</option> option is used, this may also be an engine-specific
+        designation.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--signing-engine=<replaceable>ENGINE</replaceable></option></term>
+
+        <listitem><para>An "engine" to for signing of the resulting binary. This option is currently passed
+        verbatim to the <option>--engine=</option> option of
+        <citerefentry project='archlinux'><refentrytitle>sbsign</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--sign-kernel</option></term>
+        <term><option>--no-sign-kernel</option></term>
+
+        <listitem><para>Override the detection of whether to sign the Linux binary itself before it is
+        embedded in the combined image. If not specified, it will be signed if a SecureBoot signing key is
+        provided via the <option>--secureboot-private-key=</option> option and the binary has not already
+        been signed. If <option>--sign-kernel</option> is specified, and the binary has already been signed,
+        the signature will be appended anyway.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--tools=<replaceable>DIRS</replaceable></option></term>
+
+        <listitem><para>Specify one or more directories with helper tools. <command>ukify</command> will look
+        for helper tools in those directories first, and if not found, try to load them from
+        <varname>$PATH</varname> in the usual fashion.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--measure</option></term>
+        <term><option>--no-measure</option></term>
+
+        <listitem><para>Enable or disable a call to <command>systemd-measure</command> to print
+        pre-calculated PCR values. Defaults to false.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--output=<replaceable>FILENAME</replaceable></option></term>
+
+        <listitem><para>The output filename. If not specified, the name of the
+        <replaceable>LINUX</replaceable> argument, with the suffix <literal>.unsigned.efi</literal> or
+        <literal>.signed.efi</literal> will be used, depending on whether signing for SecureBoot was
+        performed.</para></listitem>
+      </varlistentry>
+
+      <xi:include href="standard-options.xml" xpointer="help" />
+      <xi:include href="standard-options.xml" xpointer="version" />
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Examples</title>
+
+    <example>
+      <title>Minimal invocation</title>
+
+      <programlisting>ukify \
+      /lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \
+      /some/path/initramfs-6.0.9-300.fc37.x86_64.img \
+      --cmdline='quiet rw'
+      </programlisting>
+
+      <para>This creates an unsigned UKI <filename>./vmlinuz.unsigned.efi</filename>.</para>
+    </example>
+
+    <example>
+      <title>All the bells and whistles</title>
+
+      <programlisting>/usr/lib/systemd/ukify \
+      /lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \
+      early_cpio \
+      /some/path/initramfs-6.0.9-300.fc37.x86_64.img \
+      --pcr-private-key=pcr-private-initrd-key.pem \
+      --pcr-public-key=pcr-public-initrd-key.pem \
+      --phases='enter-initrd' \
+      --pcr-private-key=pcr-private-system-key.pem \
+      --pcr-public-key=pcr-public-system-key.pem \
+      --phases='enter-initrd:leave-initrd enter-initrd:leave-initrd:sysinit \
+                enter-initrd:leave-initrd:sysinit:ready' \
+      --pcr-banks=sha384,sha512 \
+      --secureboot-private-key=sb.key \
+      --secureboot-certificate=sb.cert \
+      --sign-kernel \
+      --cmdline='quiet rw rhgb'
+      </programlisting>
+
+      <para>This creates a signed UKI <filename index='false'>./vmlinuz.signed.efi</filename>.
+      The initrd section contains two concatenated parts, <filename index='false'>early_cpio</filename>
+      and <filename index='false'>initramfs-6.0.9-300.fc37.x86_64.img</filename>.
+      The policy embedded in the <literal>.pcrsig</literal> section will be signed for the initrd (the
+      <constant>enter-initrd</constant> phase) with the key
+      <filename index='false'>pcr-private-initrd-key.pem</filename>, and for the main system (phases
+      <constant>leave-initrd</constant>, <constant>sysinit</constant>, <constant>ready</constant>) with the
+      key <filename index='false'>pcr-private-system-key.pem</filename>. The Linux binary and the resulting
+      combined image will be signed with the SecureBoot key <filename index='false'>sb.key</filename>.</para>
+    </example>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-stub</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>objcopy</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-pcrphase.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+     </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/userdbctl.xml b/man/userdbctl.xml
index 611c425..fbab810 100644
--- a/man/userdbctl.xml
+++ b/man/userdbctl.xml
@@ -72,6 +72,16 @@
       </varlistentry>
 
       <varlistentry>
+        <term><option>--json=</option><replaceable>FORMAT</replaceable></term>
+
+        <listitem><para>Selects JSON output mode (like <option>--output=json</option>) and selects the
+        precise display mode. Takes one of <literal>pretty</literal> or <literal>short</literal>. If
+        <literal>pretty</literal>, human-friendly whitespace and newlines are inserted in the output to make
+        the JSON data more readable. If <literal>short</literal>, all superfluous whitespace is
+        suppressed.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--service=</option><replaceable>SERVICE</replaceable><optional>:<replaceable>SERVICE…</replaceable></optional></term>
         <term><option>-s</option> <replaceable>SERVICE</replaceable>:<replaceable>SERVICE…</replaceable></term>
 
@@ -128,6 +138,22 @@
         off.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--multiplexer=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>Controls whether to do lookups via the multiplexer service (if specified as true, the
+        default) or do lookups in the client (if specified as false). Using the multiplexer service is
+        typically preferable, since it runs in a locked down sandbox.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--chain</option></term>
+
+        <listitem><para>When used with the <command>ssh-authorized-keys</command> command, this will allow
+        passing an additional command line after the user name that is chain executed after the lookup
+        completed. This allows chaining multiple tools that show SSH authorized keys.</para></listitem>
+      </varlistentry>
+
       <xi:include href="standard-options.xml" xpointer="no-pager" />
       <xi:include href="standard-options.xml" xpointer="no-legend" />
       <xi:include href="standard-options.xml" xpointer="help" />
@@ -183,8 +209,8 @@
       <varlistentry>
         <term><command>ssh-authorized-keys</command></term>
 
-        <listitem><para>This operation is not a public, user-facing interface. It is used to allow the SSH daemon to pick
-        up authorized keys from user records, see below.</para></listitem>
+        <listitem><para>Show SSH authorized keys for this account. This command is intended to be used to
+        allow the SSH daemon to pick up authorized keys from user records, see below.</para></listitem>
       </varlistentry>
     </variablelist>
   </refsect1>
@@ -283,6 +309,19 @@
 AuthorizedKeysCommand /usr/bin/userdbctl ssh-authorized-keys %u
 AuthorizedKeysCommandUser root
 …</programlisting>
+
+    <para>Sometimes it's useful to allow chain invocation of another program to list SSH authorized keys. By
+    using the <option>--chain</option> such a tool may be chain executed by <command>userdbctl
+    ssh-authorized-keys</command> once a lookup completes (regardless if an SSH key was found or
+    not). Example:</para>
+
+    <programlisting>…
+AuthorizedKeysCommand /usr/bin/userdbctl ssh-authorized-keys %u --chain /usr/bin/othertool %u
+AuthorizedKeysCommandUser root
+…</programlisting>
+
+    <para>The above will first query the userdb database for SSH keys, and then chain execute
+    <command>/usr/bin/othertool</command> to also be queried.</para>
   </refsect1>
 
   <refsect1>
diff --git a/man/vconsole.conf.xml b/man/vconsole.conf.xml
index 378812b..e4e2864 100644
--- a/man/vconsole.conf.xml
+++ b/man/vconsole.conf.xml
@@ -32,13 +32,13 @@
     You can safely mask this file if you want to avoid this kind of initialization.
     </para>
 
-    <para>The basic file format of the
-    <filename>vconsole.conf</filename> is a newline-separated list of
-    environment-like shell-compatible variable assignments. It is
-    possible to source the configuration from shell scripts, however,
-    beyond mere variable assignments no shell features are supported,
-    allowing applications to read the file without implementing a
-    shell compatible execution engine.</para>
+    <para>The format of <filename>vconsole.conf</filename> is a newline-separated list of environment-like
+    shell-compatible variable assignments, ignoring comments and empty lines. It is possible to source the
+    configuration from shell scripts, however, beyond mere variable assignments no shell features are
+    supported, allowing applications to read the file without implementing a shell compatible execution
+    engine. See
+    <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> for a
+    detailed description of the format.</para>
 
     <para>Note that the kernel command line options
     <varname>vconsole.keymap=</varname>,
diff --git a/man/veritytab.xml b/man/veritytab.xml
index 28dce1f..dc2f11c 100644
--- a/man/veritytab.xml
+++ b/man/veritytab.xml
@@ -95,7 +95,7 @@
       </varlistentry>
 
       <varlistentry>
-        <term><option>root-hash-signature=</option></term>
+        <term><option>root-hash-signature=<replaceable>PATH</replaceable>|base64:<replaceable>HEX</replaceable></option></term>
 
         <listitem><para>A base64 string encoding the root hash signature prefixed by <literal>base64:</literal> or a
         path to roothash signature file used to verify the root hash (in kernel). This feature requires Linux kernel
@@ -149,7 +149,7 @@
       <varlistentry>
         <term><option>x-initrd.attach</option></term>
 
-        <listitem><para>Setup this verity protected block device in the initramfs, similarly to
+        <listitem><para>Setup this verity protected block device in the initrd, similarly to
         <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
         units marked with <option>x-initrd.mount</option>.</para>
 
@@ -160,8 +160,8 @@
         use. With this option the device will still be detached but later after the root file
         system is unmounted.</para>
 
-        <para>All other verity protected block devices that contain file systems mounted in the
-        initramfs should use this option.</para>
+        <para>All other verity protected block devices that contain file systems mounted in the initrd should
+        use this option.</para>
         </listitem>
       </varlistentry>
 
diff --git a/man/vtable-example.c b/man/vtable-example.c
index dede12b..e3346a8 100644
--- a/man/vtable-example.c
+++ b/man/vtable-example.c
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT-0 */
+
 #include <errno.h>
 #include <stdbool.h>
 #include <stddef.h>
@@ -7,6 +9,14 @@
 
 #define _cleanup_(f) __attribute__((cleanup(f)))
 
+#define check(x) ({                             \
+  int r = (x);                                  \
+  errno = r < 0 ? -r : 0;                       \
+  printf(#x ": %m\n");                          \
+  if (r < 0)                                    \
+    return EXIT_FAILURE;                        \
+  })
+
 typedef struct object {
   char *name;
   uint32_t number;
@@ -14,6 +24,16 @@
 
 static int method(sd_bus_message *m, void *userdata, sd_bus_error *error) {
   printf("Got called with userdata=%p\n", userdata);
+
+  if (sd_bus_message_is_method_call(m,
+                                    "org.freedesktop.systemd.VtableExample",
+                                    "Method4"))
+    return 1;
+
+  const char *string;
+  check(sd_bus_message_read(m, "s", &string));
+  check(sd_bus_reply_method_return(m, "s", string));
+
   return 1;
 }
 
@@ -62,14 +82,6 @@
         SD_BUS_VTABLE_END
 };
 
-#define check(x) ({                             \
-  int r = x;                                    \
-  errno = r < 0 ? -r : 0;                       \
-  printf(#x ": %m\n");                          \
-  if (r < 0)                                    \
-    return EXIT_FAILURE;                        \
-  })
-
 int main(int argc, char **argv) {
   _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
 
@@ -78,16 +90,22 @@
   object object = { .number = 666 };
   check((object.name = strdup("name")) != NULL);
 
-  check(sd_bus_add_object_vtable(bus, NULL, "/object",
+  check(sd_bus_add_object_vtable(bus, NULL,
+                                 "/org/freedesktop/systemd/VtableExample",
                                  "org.freedesktop.systemd.VtableExample",
                                  vtable,
                                  &object));
 
+  check(sd_bus_request_name(bus,
+                            "org.freedesktop.systemd.VtableExample",
+                            0));
+
   for (;;) {
     check(sd_bus_wait(bus, UINT64_MAX));
     check(sd_bus_process(bus, NULL));
   }
 
+  check(sd_bus_release_name(bus, "org.freedesktop.systemd.VtableExample"));
   free(object.name);
 
   return 0;
diff --git a/man/vtable-example.xml b/man/vtable-example.xml
index 571876e..a195777 100644
--- a/man/vtable-example.xml
+++ b/man/vtable-example.xml
@@ -1,5 +1,6 @@
 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 <node>
  <interface name="org.freedesktop.DBus.Peer">
   <method name="Ping"/>
diff --git a/man/yubikey-crypttab.sh b/man/yubikey-crypttab.sh
index 05e581b..d74dfa5 100644
--- a/man/yubikey-crypttab.sh
+++ b/man/yubikey-crypttab.sh
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: MIT-0
+
 # Destroy any old key on the Yubikey (careful!)
 ykman piv reset
 
@@ -23,4 +25,4 @@
 
 # If that worked, let's now add the same line persistently to /etc/crypttab,
 # for the future.
-sudo bash -c 'echo "mytest /dev/sdXn - pkcs11-uri=auto" >> /etc/crypttab'
+sudo bash -c 'echo "mytest /dev/sdXn - pkcs11-uri=auto" >>/etc/crypttab'
diff --git a/meson.build b/meson.build
index d88ade1..b1f5477 100644
--- a/meson.build
+++ b/meson.build
@@ -1,23 +1,23 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 project('systemd', 'c',
-        version : '249',
+        version : '253',
         license : 'LGPLv2+',
         default_options: [
-                'c_std=gnu99',
+                'c_std=gnu11',
                 'prefix=/usr',
                 'sysconfdir=/etc',
                 'localstatedir=/var',
                 'warning_level=2',
         ],
-        meson_version : '>= 0.46',
+        meson_version : '>= 0.53.2',
        )
 
-libsystemd_version = '0.32.0'
-libudev_version = '1.7.2'
+libsystemd_version = '0.36.0'
+libudev_version = '1.7.6'
 
 conf = configuration_data()
-conf.set_quoted('PROJECT_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
+conf.set_quoted('PROJECT_URL', 'https://systemd.io/')
 conf.set('PROJECT_VERSION',    meson.project_version(),
          description : 'Numerical project version (used where a simple number is expected)')
 
@@ -27,11 +27,19 @@
 project_build_root = meson.current_build_dir()
 relative_source_path = run_command('realpath',
                                    '--relative-to=@0@'.format(project_build_root),
-                                   project_source_root).stdout().strip()
+                                   project_source_root,
+                                   check : true).stdout().strip()
 conf.set_quoted('RELATIVE_SOURCE_PATH', relative_source_path)
 
 conf.set10('BUILD_MODE_DEVELOPER', get_option('mode') == 'developer',
            description : 'tailor build to development or release builds')
+verification = get_option('log-message-verification')
+if verification == 'auto'
+        verification = conf.get('BUILD_MODE_DEVELOPER') == 1
+else
+        verification = verification == 'true'
+endif
+conf.set10('LOG_MESSAGE_VERIFICATION', verification)
 
 want_ossfuzz = get_option('oss-fuzz')
 want_libfuzzer = get_option('llvm-fuzz')
@@ -39,15 +47,27 @@
         error('only one of oss-fuzz or llvm-fuzz can be specified')
 endif
 
-skip_deps = want_ossfuzz or want_libfuzzer
+skip_deps = want_ossfuzz or get_option('skip-deps')
 fuzzer_build = want_ossfuzz or want_libfuzzer
 
+# If we're building *not* for actual fuzzing, allow input samples of any size
+# (for testing and for reproduction of issues discovered with previously-higher
+# limits).
+conf.set10('FUZZ_USE_SIZE_LIMIT', fuzzer_build)
+
+# We'll set this to '1' for EFI builds in a different place.
+conf.set10('SD_BOOT', false)
+
+# Create a title-less summary section early, so it ends up first in the output.
+# More items are added later after they have been detected.
+summary({'build mode' : get_option('mode')})
+
 #####################################################################
 
 # Try to install the git pre-commit hook
 add_git_hook_sh = find_program('tools/add-git-hook.sh', required : false)
 if add_git_hook_sh.found()
-        git_hook = run_command(add_git_hook_sh)
+        git_hook = run_command(add_git_hook_sh, check : false)
         if git_hook.returncode() == 0
                 message(git_hook.stdout().strip())
         endif
@@ -55,8 +75,9 @@
 
 #####################################################################
 
+fs = import('fs')
 if get_option('split-usr') == 'auto'
-        split_usr = run_command('test', '-L', '/bin').returncode() != 0
+        split_usr = not fs.is_symlink('/bin')
 else
         split_usr = get_option('split-usr') == 'true'
 endif
@@ -69,7 +90,7 @@
            description : '/usr/bin and /bin directories are separate')
 
 if get_option('split-bin') == 'auto'
-        split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
+        split_bin = not fs.is_symlink('/usr/sbin')
 else
         split_bin = get_option('split-bin') == 'true'
 endif
@@ -91,6 +112,7 @@
 sysvrcnd_path = get_option('sysvrcnd-path')
 conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
            description : 'SysV init scripts and rcN.d links are supported')
+conf.set10('CREATE_LOG_DIRS', get_option('create-log-dirs'))
 
 if get_option('hibernate') and not get_option('initrd')
         error('hibernate depends on initrd')
@@ -100,9 +122,9 @@
 conf.set10('BUMP_PROC_SYS_FS_NR_OPEN',  get_option('bump-proc-sys-fs-nr-open'))
 conf.set('HIGH_RLIMIT_NOFILE',          512*1024)
 
-# join_paths ignores the preceding arguments if an absolute component is
-# encountered, so this should canonicalize various paths when they are
-# absolute or relative.
+# Meson ignores the preceding arguments when joining paths if an absolute
+# component is encountered, so this should canonicalize various paths when they
+# are absolute or relative.
 prefixdir = get_option('prefix')
 if not prefixdir.startswith('/')
         error('Prefix is not absolute: "@0@"'.format(prefixdir))
@@ -112,119 +134,120 @@
                 rootprefixdir, prefixdir))
 endif
 
-bindir = join_paths(prefixdir, get_option('bindir'))
-libdir = join_paths(prefixdir, get_option('libdir'))
-sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
-includedir = join_paths(prefixdir, get_option('includedir'))
-datadir = join_paths(prefixdir, get_option('datadir'))
-localstatedir = join_paths('/', get_option('localstatedir'))
+bindir = prefixdir / get_option('bindir')
+libdir = prefixdir / get_option('libdir')
+sysconfdir = prefixdir / get_option('sysconfdir')
+includedir = prefixdir / get_option('includedir')
+datadir = prefixdir / get_option('datadir')
+localstatedir = '/' / get_option('localstatedir')
 
-rootbindir = join_paths(rootprefixdir, 'bin')
-rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
-rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
+rootbindir = rootprefixdir / 'bin'
+rootsbindir = rootprefixdir / (split_bin ? 'sbin' : 'bin')
+rootlibexecdir = rootprefixdir / 'lib/systemd'
 
 rootlibdir = get_option('rootlibdir')
 if rootlibdir == ''
-        rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
+        # This will be a relative path if libdir is in prefix.
+        rootlibdir = get_option('libdir')
 endif
+if not rootlibdir.startswith('/')
+        # If we have a relative path, add rootprefixdir to the front.
+        rootlibdir = rootprefixdir / rootlibdir
+endif
+rootpkglibdir = rootlibdir / 'systemd'
 
 install_sysconfdir = get_option('install-sysconfdir') != 'false'
 install_sysconfdir_samples = get_option('install-sysconfdir') == 'true'
 # Dirs of external packages
-pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
-pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
-polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
-polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
-polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
-xinitrcdir = get_option('xinitrcdir') == '' ? join_paths(sysconfdir, 'X11/xinit/xinitrc.d') : get_option('xinitrcdir')
+pkgconfigdatadir = get_option('pkgconfigdatadir') != '' ? get_option('pkgconfigdatadir') : datadir / 'pkgconfig'
+pkgconfiglibdir = get_option('pkgconfiglibdir') != '' ? get_option('pkgconfiglibdir') : libdir / 'pkgconfig'
+polkitpolicydir = datadir / 'polkit-1/actions'
+polkitrulesdir = datadir / 'polkit-1/rules.d'
+polkitpkladir = localstatedir / 'lib/polkit-1/localauthority/10-vendor.d'
+xinitrcdir = get_option('xinitrcdir') != '' ? get_option('xinitrcdir') : sysconfdir / 'X11/xinit/xinitrc.d'
 rpmmacrosdir = get_option('rpmmacrosdir')
 if rpmmacrosdir != 'no'
-        rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
+        rpmmacrosdir = prefixdir / rpmmacrosdir
 endif
-modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
+modprobedir = rootprefixdir / 'lib/modprobe.d'
 
 # Our own paths
-pkgdatadir = join_paths(datadir, 'systemd')
-environmentdir = join_paths(prefixdir, 'lib/environment.d')
-pkgsysconfdir = join_paths(sysconfdir, 'systemd')
-userunitdir = join_paths(prefixdir, 'lib/systemd/user')
-userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
-tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
-sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
-sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
-binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
-modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
-networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
-pkgincludedir = join_paths(includedir, 'systemd')
-systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
-usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
-systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
-userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
-systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
-systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
-systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
-systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
-udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
-udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
-udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
-catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
-kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
-factorydir = join_paths(datadir, 'factory')
-bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
-testsdir = join_paths(prefixdir, 'lib/systemd/tests')
-systemdstatedir = join_paths(localstatedir, 'lib/systemd')
-catalogstatedir = join_paths(systemdstatedir, 'catalog')
-randomseeddir = join_paths(localstatedir, 'lib/systemd')
-profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
-ntpservicelistdir = join_paths(rootprefixdir, 'lib/systemd/ntp-units.d')
+pkgdatadir = datadir / 'systemd'
+environmentdir = prefixdir / 'lib/environment.d'
+pkgsysconfdir = sysconfdir / 'systemd'
+userunitdir = prefixdir / 'lib/systemd/user'
+userpresetdir = prefixdir / 'lib/systemd/user-preset'
+tmpfilesdir = prefixdir / 'lib/tmpfiles.d'
+usertmpfilesdir = prefixdir / 'share/user-tmpfiles.d'
+sysusersdir = prefixdir / 'lib/sysusers.d'
+sysctldir = prefixdir / 'lib/sysctl.d'
+binfmtdir = prefixdir / 'lib/binfmt.d'
+modulesloaddir = prefixdir / 'lib/modules-load.d'
+networkdir = rootprefixdir / 'lib/systemd/network'
+systemgeneratordir = rootlibexecdir / 'system-generators'
+usergeneratordir = prefixdir / 'lib/systemd/user-generators'
+systemenvgeneratordir = prefixdir / 'lib/systemd/system-environment-generators'
+userenvgeneratordir = prefixdir / 'lib/systemd/user-environment-generators'
+systemshutdowndir = rootlibexecdir / 'system-shutdown'
+systemsleepdir = rootlibexecdir / 'system-sleep'
+systemunitdir = rootprefixdir / 'lib/systemd/system'
+systempresetdir = rootprefixdir / 'lib/systemd/system-preset'
+udevlibexecdir = rootprefixdir / 'lib/udev'
+udevrulesdir = udevlibexecdir / 'rules.d'
+udevhwdbdir = udevlibexecdir / 'hwdb.d'
+catalogdir = prefixdir / 'lib/systemd/catalog'
+kerneldir = prefixdir / 'lib/kernel'
+kernelinstalldir = kerneldir / 'install.d'
+factorydir = datadir / 'factory'
+bootlibdir = prefixdir / 'lib/systemd/boot/efi'
+testsdir = prefixdir / 'lib/systemd/tests'
+systemdstatedir = localstatedir / 'lib/systemd'
+catalogstatedir = systemdstatedir / 'catalog'
+randomseeddir = localstatedir / 'lib/systemd'
+profiledir = rootlibexecdir / 'portable' / 'profile'
+ntpservicelistdir = rootprefixdir / 'lib/systemd/ntp-units.d'
 
 docdir = get_option('docdir')
 if docdir == ''
-        docdir = join_paths(datadir, 'doc/systemd')
-endif
-
-dbuspolicydir = get_option('dbuspolicydir')
-if dbuspolicydir == ''
-        dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
-endif
-
-dbussessionservicedir = get_option('dbussessionservicedir')
-if dbussessionservicedir == ''
-        dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
-endif
-
-dbussystemservicedir = get_option('dbussystemservicedir')
-if dbussystemservicedir == ''
-        dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
+        docdir = datadir / 'doc/systemd'
 endif
 
 pamlibdir = get_option('pamlibdir')
 if pamlibdir == ''
-        pamlibdir = join_paths(rootlibdir, 'security')
+        pamlibdir = rootlibdir / 'security'
 endif
 
 pamconfdir = get_option('pamconfdir')
 if pamconfdir == ''
-        pamconfdir = join_paths(prefixdir, 'lib/pam.d')
+        pamconfdir = prefixdir / 'lib/pam.d'
+endif
+
+libcryptsetup_plugins_dir = get_option('libcryptsetup-plugins-dir')
+if libcryptsetup_plugins_dir == ''
+        libcryptsetup_plugins_dir = rootlibdir / 'cryptsetup'
 endif
 
 memory_accounting_default = get_option('memory-accounting-default')
 status_unit_format_default = get_option('status-unit-format-default')
+if status_unit_format_default == 'auto'
+        status_unit_format_default = conf.get('BUILD_MODE_DEVELOPER') == 1 ? 'name' : 'description'
+endif
 
 conf.set_quoted('BINFMT_DIR',                                 binfmtdir)
 conf.set_quoted('BOOTLIBDIR',                                 bootlibdir)
-conf.set_quoted('CATALOG_DATABASE',                           join_paths(catalogstatedir, 'database'))
+conf.set_quoted('CATALOG_DATABASE',                           catalogstatedir / 'database')
 conf.set_quoted('CERTIFICATE_ROOT',                           get_option('certificate-root'))
-conf.set_quoted('DOCUMENT_ROOT',                              join_paths(pkgdatadir, 'gatewayd'))
+conf.set_quoted('DOC_DIR',                                    docdir)
+conf.set_quoted('DOCUMENT_ROOT',                              pkgdatadir / 'gatewayd')
 conf.set_quoted('ENVIRONMENT_DIR',                            environmentdir)
 conf.set_quoted('INCLUDE_DIR',                                includedir)
 conf.set_quoted('LIBDIR',                                     libdir)
 conf.set_quoted('MODPROBE_DIR',                               modprobedir)
 conf.set_quoted('MODULESLOAD_DIR',                            modulesloaddir)
 conf.set_quoted('PKGSYSCONFDIR',                              pkgsysconfdir)
-conf.set_quoted('POLKIT_AGENT_BINARY_PATH',                   join_paths(bindir, 'pkttyagent'))
+conf.set_quoted('POLKIT_AGENT_BINARY_PATH',                   bindir / 'pkttyagent')
 conf.set_quoted('PREFIX',                                     prefixdir)
-conf.set_quoted('RANDOM_SEED',                                join_paths(randomseeddir, 'random-seed'))
+conf.set_quoted('RANDOM_SEED',                                randomseeddir / 'random-seed')
 conf.set_quoted('RANDOM_SEED_DIR',                            randomseeddir)
 conf.set_quoted('RC_LOCAL_PATH',                              get_option('rc-local'))
 conf.set_quoted('ROOTBINDIR',                                 rootbindir)
@@ -234,28 +257,29 @@
 conf.set_quoted('ROOTPREFIX_NOSLASH',                         rootprefixdir_noslash)
 conf.set_quoted('SYSCONF_DIR',                                sysconfdir)
 conf.set_quoted('SYSCTL_DIR',                                 sysctldir)
-conf.set_quoted('SYSTEMCTL_BINARY_PATH',                      join_paths(rootbindir, 'systemctl'))
-conf.set_quoted('SYSTEMD_BINARY_PATH',                        join_paths(rootlibexecdir, 'systemd'))
+conf.set_quoted('SYSTEMCTL_BINARY_PATH',                      rootbindir / 'systemctl')
+conf.set_quoted('SYSTEMD_BINARY_PATH',                        rootlibexecdir / 'systemd')
 conf.set_quoted('SYSTEMD_CATALOG_DIR',                        catalogdir)
-conf.set_quoted('SYSTEMD_CGROUPS_AGENT_PATH',                 join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
-conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH',                    join_paths(rootlibexecdir, 'systemd-cryptsetup'))
-conf.set_quoted('SYSTEMD_EXPORT_PATH',                        join_paths(rootlibexecdir, 'systemd-export'))
-conf.set_quoted('SYSTEMD_FSCK_PATH',                          join_paths(rootlibexecdir, 'systemd-fsck'))
-conf.set_quoted('SYSTEMD_GROWFS_PATH',                        join_paths(rootlibexecdir, 'systemd-growfs'))
-conf.set_quoted('SYSTEMD_HOMEWORK_PATH',                      join_paths(rootlibexecdir, 'systemd-homework'))
-conf.set_quoted('SYSTEMD_IMPORT_FS_PATH',                     join_paths(rootlibexecdir, 'systemd-import-fs'))
-conf.set_quoted('SYSTEMD_IMPORT_PATH',                        join_paths(rootlibexecdir, 'systemd-import'))
-conf.set_quoted('SYSTEMD_KBD_MODEL_MAP',                      join_paths(pkgdatadir, 'kbd-model-map'))
-conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP',              join_paths(pkgdatadir, 'language-fallback-map'))
-conf.set_quoted('SYSTEMD_MAKEFS_PATH',                        join_paths(rootlibexecdir, 'systemd-makefs'))
-conf.set_quoted('SYSTEMD_PULL_PATH',                          join_paths(rootlibexecdir, 'systemd-pull'))
-conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH',               join_paths(rootlibexecdir, 'systemd-shutdown'))
-conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH',           join_paths(bindir, 'systemd-stdio-bridge'))
-conf.set_quoted('SYSTEMD_TEST_DATA',                          join_paths(testsdir, 'testdata'))
-conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
-conf.set_quoted('SYSTEMD_USERWORK_PATH',                      join_paths(rootlibexecdir, 'systemd-userwork'))
-conf.set_quoted('SYSTEMD_VERITYSETUP_PATH',                   join_paths(rootlibexecdir, 'systemd-veritysetup'))
-conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR',                     join_paths(pkgsysconfdir, 'system'))
+conf.set_quoted('SYSTEMD_CGROUPS_AGENT_PATH',                 rootlibexecdir / 'systemd-cgroups-agent')
+conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH',                    rootlibexecdir / 'systemd-cryptsetup')
+conf.set_quoted('SYSTEMD_EXPORT_PATH',                        rootlibexecdir / 'systemd-export')
+conf.set_quoted('SYSTEMD_FSCK_PATH',                          rootlibexecdir / 'systemd-fsck')
+conf.set_quoted('SYSTEMD_GROWFS_PATH',                        rootlibexecdir / 'systemd-growfs')
+conf.set_quoted('SYSTEMD_HOMEWORK_PATH',                      rootlibexecdir / 'systemd-homework')
+conf.set_quoted('SYSTEMD_IMPORT_FS_PATH',                     rootlibexecdir / 'systemd-import-fs')
+conf.set_quoted('SYSTEMD_IMPORT_PATH',                        rootlibexecdir / 'systemd-import')
+conf.set_quoted('SYSTEMD_INTEGRITYSETUP_PATH',                rootlibexecdir / 'systemd-integritysetup')
+conf.set_quoted('SYSTEMD_KBD_MODEL_MAP',                      pkgdatadir / 'kbd-model-map')
+conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP',              pkgdatadir / 'language-fallback-map')
+conf.set_quoted('SYSTEMD_MAKEFS_PATH',                        rootlibexecdir / 'systemd-makefs')
+conf.set_quoted('SYSTEMD_PULL_PATH',                          rootlibexecdir / 'systemd-pull')
+conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH',               rootlibexecdir / 'systemd-shutdown')
+conf.set_quoted('SYSTEMD_TEST_DATA',                          testsdir / 'testdata')
+conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', rootbindir / 'systemd-tty-ask-password-agent')
+conf.set_quoted('SYSTEMD_UPDATE_HELPER_PATH',                 rootlibexecdir / 'systemd-update-helper')
+conf.set_quoted('SYSTEMD_USERWORK_PATH',                      rootlibexecdir / 'systemd-userwork')
+conf.set_quoted('SYSTEMD_VERITYSETUP_PATH',                   rootlibexecdir / 'systemd-veritysetup')
+conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR',                     pkgsysconfdir / 'system')
 conf.set_quoted('SYSTEM_DATA_UNIT_DIR',                       systemunitdir)
 conf.set_quoted('SYSTEM_ENV_GENERATOR_DIR',                   systemenvgeneratordir)
 conf.set_quoted('SYSTEM_GENERATOR_DIR',                       systemgeneratordir)
@@ -266,28 +290,34 @@
 conf.set_quoted('SYSTEM_SYSVRCND_PATH',                       sysvrcnd_path)
 conf.set_quoted('SYSUSERS_DIR',                               sysusersdir)
 conf.set_quoted('TMPFILES_DIR',                               tmpfilesdir)
+conf.set_quoted('USER_TMPFILES_DIR',                          usertmpfilesdir)
 conf.set_quoted('UDEVLIBEXECDIR',                             udevlibexecdir)
 conf.set_quoted('UDEV_HWDB_DIR',                              udevhwdbdir)
 conf.set_quoted('UDEV_RULES_DIR',                             udevrulesdir)
-conf.set_quoted('USER_CONFIG_UNIT_DIR',                       join_paths(pkgsysconfdir, 'user'))
+conf.set_quoted('USER_CONFIG_UNIT_DIR',                       pkgsysconfdir / 'user')
 conf.set_quoted('USER_DATA_UNIT_DIR',                         userunitdir)
 conf.set_quoted('USER_ENV_GENERATOR_DIR',                     userenvgeneratordir)
 conf.set_quoted('USER_GENERATOR_DIR',                         usergeneratordir)
-conf.set_quoted('USER_KEYRING_PATH',                          join_paths(pkgsysconfdir, 'import-pubring.gpg'))
+conf.set_quoted('USER_KEYRING_PATH',                          pkgsysconfdir / 'import-pubring.gpg')
 conf.set_quoted('USER_PRESET_DIR',                            userpresetdir)
-conf.set_quoted('VENDOR_KEYRING_PATH',                        join_paths(rootlibexecdir, 'import-pubring.gpg'))
+conf.set_quoted('VENDOR_KEYRING_PATH',                        rootlibexecdir / 'import-pubring.gpg')
 
 conf.set('ANSI_OK_COLOR',                                     'ANSI_' + get_option('ok-color').underscorify().to_upper())
+conf.set10('ENABLE_URLIFY',                                   get_option('urlify'))
 conf.set10('ENABLE_FEXECVE',                                  get_option('fexecve'))
 conf.set10('MEMORY_ACCOUNTING_DEFAULT',                       memory_accounting_default)
 conf.set('STATUS_UNIT_FORMAT_DEFAULT',                        'STATUS_UNIT_FORMAT_' + status_unit_format_default.to_upper())
 conf.set_quoted('STATUS_UNIT_FORMAT_DEFAULT_STR',             status_unit_format_default)
 
+conf.set('DEFAULT_TIMEOUT_SEC',                               get_option('default-timeout-sec'))
+conf.set('DEFAULT_USER_TIMEOUT_SEC',                          get_option('default-user-timeout-sec'))
+conf.set('UPDATE_HELPER_USER_TIMEOUT_SEC',                    get_option('update-helper-user-timeout-sec'))
+
+conf.set10('FIRST_BOOT_FULL_PRESET',                          get_option('first-boot-full-preset'))
+
 #####################################################################
 
 cc = meson.get_compiler('c')
-pkgconfig = import('pkgconfig')
-check_compilation_sh = find_program('tools/check-compilation.sh')
 meson_build_sh = find_program('tools/meson-build.sh')
 
 want_tests = get_option('tests')
@@ -319,24 +349,31 @@
 # Those generate many false positives, and we do not want to change the code to
 # avoid them.
 basic_disabled_warnings = [
-        '-Wno-format-signedness',
         '-Wno-missing-field-initializers',
         '-Wno-unused-parameter',
-        '-Wno-unused-result',
 ]
 
 possible_common_cc_flags = [
+        '-Warray-bounds',     # clang
+        '-Warray-bounds=2',
         '-Wdate-time',
         '-Wendif-labels',
         '-Werror=format=2',
+        '-Werror=format-signedness',
         '-Werror=implicit-function-declaration',
+        '-Werror=implicit-int',
         '-Werror=incompatible-pointer-types',
+        '-Werror=int-conversion',
         '-Werror=overflow',
+        '-Werror=override-init',
         '-Werror=return-type',
         '-Werror=shift-count-overflow',
         '-Werror=shift-overflow=2',
         '-Werror=undef',
         '-Wfloat-equal',
+        # gperf prevents us from enabling this because it does not emit fallthrough
+        # attribute with clang.
+        #'-Wimplicit-fallthrough',
         '-Wimplicit-fallthrough=5',
         '-Winit-self',
         '-Wlogical-op',
@@ -350,15 +387,24 @@
         '-Wstrict-aliasing=2',
         '-Wstrict-prototypes',
         '-Wsuggest-attribute=noreturn',
+        '-Wunused-function',
         '-Wwrite-strings',
+        '-Wzero-length-bounds',
 
         # negative arguments are correctly detected starting with meson 0.46.
         '-Wno-error=#warnings',  # clang
         '-Wno-string-plus-int',  # clang
+
+        '-fstrict-flex-arrays',
 ]
 
 c_args = get_option('c_args')
 
+# Our json library does not support -ffinite-math-only, which is enabled by -Ofast or -ffast-math.
+if (('-Ofast' in c_args or '-ffast-math' in c_args or '-ffinite-math-only' in c_args) and '-fno-finite-math-only' not in c_args)
+        error('-Ofast, -ffast-math, or -ffinite-math-only is specified in c_args.')
+endif
+
 # Disable -Wmaybe-uninitialized when compiling with -Os/-O1/-O3/etc. There are
 # too many false positives with gcc >= 8. Effectively, we only test with -O0
 # and -O2; this should be enough to catch most important cases without too much
@@ -372,14 +418,25 @@
         possible_common_cc_flags += '-Wno-maybe-uninitialized'
 endif
 
+# Disable -Wno-unused-result with gcc, see
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425.
+if cc.get_id() == 'gcc'
+        possible_common_cc_flags += '-Wno-unused-result'
+endif
+
 # --as-needed and --no-undefined are provided by meson by default,
-# run mesonconf to see what is enabled
+# run 'meson configure' to see what is enabled
 possible_link_flags = [
-        '-Wl,-z,relro',
+        '-Wl,--fatal-warnings',
         '-Wl,-z,now',
+        '-Wl,-z,relro',
         '-fstack-protector',
 ]
 
+if get_option('b_sanitize') == 'none'
+        possible_link_flags += '-Wl,--warn-common'
+endif
+
 if cc.get_id() == 'clang'
         possible_common_cc_flags += [
                 '-Wno-typedef-redefinition',
@@ -387,15 +444,22 @@
         ]
 endif
 
+if get_option('mode') == 'release'
+        # We could enable 'pattern' for developer mode, but that can interfere with
+        # valgrind and sanitizer builds. Also, clang does not zero-initialize unions,
+        # breaking some of our code (https://reviews.llvm.org/D68115).
+        possible_common_cc_flags += '-ftrivial-auto-var-init=zero'
+endif
+
 possible_cc_flags = possible_common_cc_flags + [
         '-Werror=missing-declarations',
         '-Werror=missing-prototypes',
         '-fdiagnostics-show-option',
-        '-ffast-math',
         '-fno-common',
         '-fno-strict-aliasing',
         '-fstack-protector',
         '-fstack-protector-strong',
+        '-fstrict-flex-arrays=1',
         '-fvisibility=hidden',
         '--param=ssp-buffer-size=4',
 ]
@@ -409,6 +473,10 @@
         possible_link_flags += '-Wl,--gc-sections'
 endif
 
+if get_option('mode') == 'developer'
+        possible_cc_flags += '-fno-omit-frame-pointer'
+endif
+
 add_project_arguments(cc.get_supported_arguments(basic_disabled_warnings), language : 'c')
 add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
 add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
@@ -450,11 +518,18 @@
 conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
 conf.set('SIZEOF_TIMEX_MEMBER', cc.sizeof('typeof(((struct timex *)0)->freq)', prefix : '#include <sys/timex.h>'))
 
+long_max = cc.compute_int(
+        'LONG_MAX',
+        prefix : '#include <limits.h>',
+        guess : 0x7FFFFFFFFFFFFFFF,
+        high : 0x7FFFFFFFFFFFFFFF)
+assert(long_max > 100000)
+conf.set_quoted('LONG_MAX_STR', '@0@'.format(long_max))
+
 decl_headers = '''
 #include <uchar.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
-#include <linux/fs.h>
 '''
 
 foreach decl : ['char16_t',
@@ -466,6 +541,17 @@
         # We get -1 if the size cannot be determined
         have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
 
+        if decl == 'struct mount_attr'
+                if have
+                        want_linux_fs_h = false
+                else
+                        have = cc.sizeof(decl,
+                                         prefix : decl_headers + '#include <linux/fs.h>',
+                                         args : '-D_GNU_SOURCE') > 0
+                        want_linux_fs_h = have
+                endif
+        endif
+
         if decl == 'struct statx'
                 if have
                         want_linux_stat_h = false
@@ -481,6 +567,7 @@
 endforeach
 
 conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
+conf.set10('WANT_LINUX_FS_H', want_linux_fs_h)
 
 foreach ident : ['secure_getenv', '__secure_getenv']
         conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
@@ -492,6 +579,8 @@
                                  #include <unistd.h>'''],
         ['pivot_root',        '''#include <stdlib.h>
                                  #include <unistd.h>'''],     # no known header declares pivot_root
+        ['ioprio_get',        '''#include <sched.h>'''],      # no known header declares ioprio_get
+        ['ioprio_set',        '''#include <sched.h>'''],      # no known header declares ioprio_set
         ['name_to_handle_at', '''#include <sys/types.h>
                                  #include <sys/stat.h>
                                  #include <fcntl.h>'''],
@@ -526,6 +615,10 @@
                                  #include <unistd.h>
                                  #include <signal.h>
                                  #include <sys/wait.h>'''],
+        ['rt_tgsigqueueinfo', '''#include <stdlib.h>
+                                 #include <unistd.h>
+                                 #include <signal.h>
+                                 #include <sys/wait.h>'''],
         ['mallinfo',          '''#include <malloc.h>'''],
         ['mallinfo2',         '''#include <malloc.h>'''],
         ['execveat',          '''#include <unistd.h>'''],
@@ -534,6 +627,9 @@
         ['mount_setattr',     '''#include <sys/mount.h>'''],
         ['move_mount',        '''#include <sys/mount.h>'''],
         ['open_tree',         '''#include <sys/mount.h>'''],
+        ['fsopen',            '''#include <sys/mount.h>'''],
+        ['fsconfig',          '''#include <sys/mount.h>'''],
+        ['getdents64',        '''#include <dirent.h>'''],
 ]
 
         have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
@@ -572,9 +668,13 @@
 
 versiondep = declare_dependency(sources: version_h)
 
+shared_lib_tag = get_option('shared-lib-tag')
+if shared_lib_tag == ''
+        shared_lib_tag = meson.project_version()
+endif
+
 sh = find_program('sh')
 echo = find_program('echo')
-test = find_program('test')
 sed = find_program('sed')
 awk = find_program('awk')
 stat = find_program('stat')
@@ -584,12 +684,10 @@
 perl = find_program('perl', required : false)
 rsync = find_program('rsync', required : false)
 meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
-test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
 
 mkdir_p = 'mkdir -p $DESTDIR/@0@'
-splash_bmp = files('test/splash.bmp')
 
-# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
+# If -Dxxx-path option is found, use that. Otherwise, check in $PATH,
 # /usr/sbin, /sbin, and fall back to the default from middle column.
 progs = [['quotaon',    '/usr/sbin/quotaon'    ],
          ['quotacheck', '/usr/sbin/quotacheck' ],
@@ -619,18 +717,12 @@
 
 conf.set_quoted('TELINIT', get_option('telinit-path'))
 
-if run_command(ln, '--relative', '--help').returncode() != 0
+if run_command(ln, '--relative', '--help', check : false).returncode() != 0
         error('ln does not support --relative (added in coreutils 8.16)')
 endif
 
 ############################################################
 
-if run_command('python3', '-c', 'import jinja2').returncode() != 0
-        error('python3 jinja2 missing')
-endif
-
-############################################################
-
 gperf = find_program('gperf')
 
 gperf_test_format = '''
@@ -638,8 +730,8 @@
 const char * in_word_set(const char *, @0@);
 @1@
 '''
-gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
-gperf_snippet = run_command(sh, '-c', gperf_snippet_format.format(gperf.path()))
+gperf_snippet = run_command(sh, '-c', 'echo foo,bar | "$1" -L ANSI-C', '_', gperf,
+                            check : true)
 gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
 if cc.compiles(gperf_test)
         gperf_len_type = 'size_t'
@@ -664,6 +756,7 @@
                   'linux/memfd.h',
                   'linux/vm_sockets.h',
                   'sys/auxv.h',
+                  'threads.h',
                   'valgrind/memcheck.h',
                   'valgrind/valgrind.h',
                   'linux/time_types.h',
@@ -695,35 +788,71 @@
         conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
 endif
 
+extra_net_naming_schemes = []
+extra_net_naming_map = []
+foreach scheme: get_option('extra-net-naming-schemes').split(',')
+        if scheme != ''
+                name = scheme.split('=')[0]
+                value = scheme.split('=')[1]
+                NAME = name.underscorify().to_upper()
+                VALUE = []
+                foreach field: value.split('+')
+                        VALUE += 'NAMING_' + field.underscorify().to_upper()
+                endforeach
+                extra_net_naming_schemes += 'NAMING_@0@ = @1@,'.format(NAME, '|'.join(VALUE))
+                extra_net_naming_map += '{ "@0@", NAMING_@1@ },'.format(name, NAME)
+        endif
+endforeach
+conf.set('EXTRA_NET_NAMING_SCHEMES', ' '.join(extra_net_naming_schemes))
+conf.set('EXTRA_NET_NAMING_MAP', ' '.join(extra_net_naming_map))
+
 default_net_naming_scheme = get_option('default-net-naming-scheme')
 conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
+if default_net_naming_scheme != 'latest'
+        conf.set('_DEFAULT_NET_NAMING_SCHEME_TEST',
+                 'NAMING_' + default_net_naming_scheme.underscorify().to_upper())
+endif
 
 time_epoch = get_option('time-epoch')
-if time_epoch == -1
-        time_epoch = run_command(sh, '-c', 'echo "$SOURCE_DATE_EPOCH"').stdout().strip()
-        if time_epoch == '' and git.found() and run_command('test', '-e', '.git').returncode() == 0
+if time_epoch <= 0
+        time_epoch = run_command(sh, '-c', 'echo "$SOURCE_DATE_EPOCH"', check : true).stdout().strip()
+        if time_epoch == '' and git.found() and fs.exists('.git')
                 # If we're in a git repository, use the creation time of the latest git tag.
-                latest_tag = run_command(git, 'describe', '--abbrev=0', '--tags').stdout().strip()
-                time_epoch = run_command(git, 'log', '--no-show-signature', '-1', '--format=%at', latest_tag).stdout()
+                latest_tag = run_command(git, 'describe', '--abbrev=0', '--tags',
+                                         check : false)
+                if latest_tag.returncode() == 0
+                        time_epoch = run_command(
+                                git, 'log', '--no-show-signature', '-1', '--format=%at',
+                                     latest_tag.stdout().strip(),
+                                check : false).stdout()
+                endif
         endif
         if time_epoch == ''
                 NEWS = files('NEWS')
-                time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
+                time_epoch = run_command(stat, '-c', '%Y', NEWS,
+                                         check : true).stdout()
         endif
-        time_epoch = time_epoch.to_int()
+        time_epoch = time_epoch.strip().to_int()
 endif
 conf.set('TIME_EPOCH', time_epoch)
 
+conf.set('CLOCK_VALID_RANGE_USEC_MAX', get_option('clock-valid-range-usec-max'))
+
+default_user_shell = get_option('default-user-shell')
+conf.set_quoted('DEFAULT_USER_SHELL',      default_user_shell)
+conf.set_quoted('DEFAULT_USER_SHELL_NAME', fs.name(default_user_shell))
+
 foreach tuple : [['system-alloc-uid-min', 'SYS_UID_MIN', 1],  # Also see login.defs(5).
                  ['system-uid-max',       'SYS_UID_MAX', 999],
                  ['system-alloc-gid-min', 'SYS_GID_MIN', 1],
                  ['system-gid-max',       'SYS_GID_MAX', 999]]
         v = get_option(tuple[0])
-        if v == -1
+        if v <= 0
                 v = run_command(
                         awk,
                         '/^\s*@0@\s+/ { uid=$2 } END { print uid }'.format(tuple[1]),
-                        '/etc/login.defs').stdout().strip()
+                        '/etc/login.defs',
+                        check : false).stdout().strip()
                 if v == ''
                         v = tuple[2]
                 else
@@ -753,7 +882,7 @@
 nobody_group = get_option('nobody-group')
 
 if not meson.is_cross_build()
-        getent_result = run_command('getent', 'passwd', '65534')
+        getent_result = run_command('getent', 'passwd', '65534', check : false)
         if getent_result.returncode() == 0
                 name = getent_result.stdout().split(':')[0]
                 if name != nobody_user
@@ -762,9 +891,9 @@
                                 'Your build will result in an user table setup that is incompatible with the local system.')
                 endif
         endif
-        id_result = run_command('id', '-u', nobody_user)
+        id_result = run_command('id', '-u', nobody_user, check : false)
         if id_result.returncode() == 0
-                id = id_result.stdout().to_int()
+                id = id_result.stdout().strip().to_int()
                 if id != 65534
                         warning('\n' +
                                 'The local user with the configured user name "@0@" of the nobody user does not have UID 65534 (it has @1@).\n'.format(nobody_user, id) +
@@ -772,7 +901,7 @@
                 endif
         endif
 
-        getent_result = run_command('getent', 'group', '65534')
+        getent_result = run_command('getent', 'group', '65534', check : false)
         if getent_result.returncode() == 0
                 name = getent_result.stdout().split(':')[0]
                 if name != nobody_group
@@ -781,9 +910,9 @@
                                 'Your build will result in an group table setup that is incompatible with the local system.')
                 endif
         endif
-        id_result = run_command('id', '-g', nobody_group)
+        id_result = run_command('id', '-g', nobody_group, check : false)
         if id_result.returncode() == 0
-                id = id_result.stdout().to_int()
+                id = id_result.stdout().strip().to_int()
                 if id != 65534
                         warning('\n' +
                                 'The local group with the configured group name "@0@" of the nobody group does not have GID 65534 (it has @1@).\n'.format(nobody_group, id) +
@@ -826,8 +955,8 @@
         val = get_option(option)
 
         # Ensure provided GID argument is numeric, otherwise fall back to default assignment
-        conf.set(name, val >= 0 ? val : '-')
-        if val >= 0
+        conf.set(name, val > 0 ? val : '-')
+        if val > 0
                 static_ugids += '@0@:@1@'.format(option, val)
         endif
 endforeach
@@ -852,16 +981,11 @@
 conf.set_quoted('NTP_SERVERS', ntp_servers)
 
 default_locale = get_option('default-locale')
-if default_locale == ''
-        if not meson.is_cross_build()
-                choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
-                default_locale = run_command(choose_default_locale_sh).stdout().strip()
-        else
-                default_locale = 'C.UTF-8'
-        endif
-endif
 conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
 
+nspawn_locale = get_option('nspawn-locale')
+conf.set_quoted('SYSTEMD_NSPAWN_LOCALE', nspawn_locale)
+
 localegen_path = get_option('localegen-path')
 if localegen_path != ''
         conf.set_quoted('LOCALEGEN_PATH', localegen_path)
@@ -901,10 +1025,6 @@
 default_user_path = get_option('user-path')
 if default_user_path != ''
         conf.set_quoted('DEFAULT_USER_PATH', default_user_path)
-        default_user_path_display = default_user_path
-else
-        # meson 0.49 fails when ?: is used in .format()
-        default_user_path_display = '(same as system services)'
 endif
 
 
@@ -916,6 +1036,17 @@
 libdl = cc.find_library('dl')
 libcrypt = cc.find_library('crypt')
 
+# On some architectures, libatomic is required. But on some installations,
+# it is found, but actual linking fails. So let's try to use it opportunistically.
+# If it is installed, but not needed, it will be dropped because of --as-needed.
+if cc.links('''int main(int argc, char **argv) { return 0; }''',
+            args : '-latomic',
+            name : 'libatomic')
+        libatomic = declare_dependency(link_args : '-latomic')
+else
+        libatomic = []
+endif
+
 crypt_header = conf.get('HAVE_CRYPT_H') == 1 ? '''#include <crypt.h>''' : '''#include <unistd.h>'''
 foreach ident : [
         ['crypt_ra',               crypt_header],
@@ -934,24 +1065,92 @@
 endif
 
 want_bpf_framework = get_option('bpf-framework')
+bpf_compiler = get_option('bpf-compiler')
 bpf_framework_required = want_bpf_framework == 'true'
 
-libbpf = dependency('libbpf', required : bpf_framework_required, version : '>= 0.2')
+libbpf_version_requirement = '>= 0.1.0'
+if bpf_compiler == 'gcc'
+        libbpf_version_requirement = '>= 1.0.0'
+endif
+libbpf = dependency('libbpf', required : bpf_framework_required, version : libbpf_version_requirement)
 conf.set10('HAVE_LIBBPF', libbpf.found())
 
-if want_bpf_framework == 'false'
-        conf.set10('BPF_FRAMEWORK', 0)
+bpftool_strip_version_requirement = '>= 5.13.0'
+if bpf_compiler == 'gcc'
+        bpftool_strip_version_requirement = '>= 7.0.0'
+endif
+
+if want_bpf_framework == 'false' or not libbpf.found() or skip_deps
+        conf.set10('BPF_FRAMEWORK', false)
 else
-        clang = find_program('clang', required : bpf_framework_required)
-        llvm_strip = find_program('llvm-strip', required : bpf_framework_required)
-        # Debian installs this in /usr/sbin/ which is not in $PATH
-        # FIXME: use the 'dirs' parameter once we bump Meson version to >= 0.53
-        bpftool = find_program('bpftool', '/usr/sbin/bpftool', required : bpf_framework_required)
-        bpf_arches = ['x86_64']
-        deps_found = libbpf.found() and clang.found() and llvm_strip.found() and bpftool.found()
+        clang_found = false
+        clang_supports_bpf = false
+        bpf_gcc_found = false
+        bpftool_strip = false
+        deps_found = false
+
+        if bpf_compiler == 'clang'
+                # Support 'versioned' clang/llvm-strip binaries, as seen on Debian/Ubuntu
+                # (like clang-10/llvm-strip-10)
+                if meson.is_cross_build() or cc.get_id() != 'clang' or cc.cmd_array()[0].contains('afl-clang') or cc.cmd_array()[0].contains('hfuzz-clang')
+                        r = find_program('clang', required : bpf_framework_required, version : '>= 10.0.0')
+                        clang_found = r.found()
+                        if clang_found
+                                clang = r.path()
+                        endif
+                else
+                        clang_found = true
+                        clang = cc.cmd_array()
+                endif
+
+                if clang_found
+                        # Check if 'clang -target bpf' is supported.
+                        clang_supports_bpf = run_command(clang, '-target', 'bpf', '--print-supported-cpus', check : false).returncode() == 0
+                endif
+        elif bpf_compiler == 'gcc'
+                warning('GCC BPF Compiler support is experimental and not recommended.')
+                bpf_gcc = find_program('bpf-gcc',
+                                       required : true,
+                                       version : '>= 12.1.0')
+                bpf_gcc_found = bpf_gcc.found()
+        endif
+
+        if clang_supports_bpf or bpf_gcc_found
+                # Debian installs this in /usr/sbin/ which is not in $PATH.
+                # We check for 'bpftool' first, honouring $PATH, and in /usr/sbin/ for Debian.
+                # We use 'bpftool gen object' subcommand for bpftool strip, it was added by d80b2fcbe0a023619e0fc73112f2a02c2662f6ab (v5.13).
+                bpftool_strip_required = bpf_framework_required and bpf_compiler == 'gcc'
+                bpftool = find_program('bpftool',
+                                       '/usr/sbin/bpftool',
+                                       required : bpftool_strip_required,
+                                       version : bpftool_strip_version_requirement)
+
+                if bpftool.found()
+                        bpftool_strip = true
+                        deps_found = true
+                elif bpf_compiler == 'clang'
+                        # We require the 'bpftool gen skeleton' subcommand, it was added by 985ead416df39d6fe8e89580cc1db6aa273e0175 (v5.6).
+                        bpftool = find_program('bpftool',
+                                               '/usr/sbin/bpftool',
+                                               required : bpf_framework_required,
+                                               version : '>= 5.6.0')
+                endif
+
+                # We use `llvm-strip` as a fallback if `bpftool gen object` strip support is not available.
+                if not bpftool_strip and bpftool.found() and clang_supports_bpf
+                        if not meson.is_cross_build()
+                                llvm_strip_bin = run_command(clang, '--print-prog-name', 'llvm-strip',
+                                                             check : true).stdout().strip()
+                        else
+                                llvm_strip_bin = 'llvm-strip'
+                        endif
+                        llvm_strip = find_program(llvm_strip_bin, required : bpf_framework_required, version : '>= 10.0.0')
+                        deps_found = llvm_strip.found()
+                endif
+        endif
+
         # Can build BPF program from source code in restricted C
-        conf.set10('BPF_FRAMEWORK',
-                bpf_arches.contains(host_machine.cpu_family()) and deps_found)
+        conf.set10('BPF_FRAMEWORK', deps_found)
 endif
 
 libmount = dependency('mount',
@@ -1015,8 +1214,16 @@
 endif
 conf.set10('HAVE_APPARMOR', have)
 
-conf.set10('HAVE_SMACK_RUN_LABEL', get_option('smack-run-label') != '')
-conf.set_quoted('SMACK_RUN_LABEL', get_option('smack-run-label'))
+have = get_option('smack') and get_option('smack-run-label') != ''
+conf.set10('HAVE_SMACK_RUN_LABEL', have)
+if have
+        conf.set_quoted('SMACK_RUN_LABEL', get_option('smack-run-label'))
+endif
+
+have = get_option('smack') and get_option('smack-default-process-label') != ''
+if have
+        conf.set_quoted('SMACK_DEFAULT_PROCESS_LABEL', get_option('smack-default-process-label'))
+endif
 
 want_polkit = get_option('polkit')
 install_polkit = false
@@ -1078,6 +1285,18 @@
 endif
 conf.set10('HAVE_KMOD', have)
 
+want_xenctrl = get_option('xenctrl')
+if want_xenctrl != 'false' and not skip_deps
+        libxenctrl = dependency('xencontrol',
+                                version : '>= 4.9',
+                                required : want_xenctrl == 'true')
+        have = libxenctrl.found()
+else
+        have = false
+        libxenctrl = []
+endif
+conf.set10('HAVE_XENCTRL', have)
+
 want_pam = get_option('pam')
 if want_pam != 'false' and not skip_deps
         libpam = cc.find_library('pam', required : want_pam == 'true')
@@ -1103,24 +1322,50 @@
 conf.set10('HAVE_MICROHTTPD', have)
 
 want_libcryptsetup = get_option('libcryptsetup')
+want_libcryptsetup_plugins = get_option('libcryptsetup-plugins')
+
+if want_libcryptsetup_plugins == 'true' and want_libcryptsetup == 'false'
+        error('libcryptsetup-plugins can not be requested without libcryptsetup')
+endif
+
 if want_libcryptsetup != 'false' and not skip_deps
         libcryptsetup = dependency('libcryptsetup',
-                                   version : '>= 2.0.1',
-                                   required : want_libcryptsetup == 'true')
+                                   version : want_libcryptsetup_plugins == 'true' ? '>= 2.4.0' : '>= 2.0.1',
+                                   required : want_libcryptsetup == 'true' or want_libcryptsetup_plugins == 'true')
         have = libcryptsetup.found()
 
-        conf.set10('HAVE_CRYPT_SET_METADATA_SIZE',
-                   have and cc.has_function('crypt_set_metadata_size', dependencies : libcryptsetup))
-        conf.set10('HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY',
-                   have and cc.has_function('crypt_activate_by_signed_key', dependencies : libcryptsetup))
-        conf.set10('HAVE_CRYPT_TOKEN_MAX',
-                   have and cc.has_function('crypt_token_max', dependencies : libcryptsetup))
+        foreach ident : ['crypt_set_metadata_size',
+                         'crypt_activate_by_signed_key',
+                         'crypt_token_max',
+                         'crypt_reencrypt_init_by_passphrase',
+                         'crypt_reencrypt',
+                         'crypt_set_data_offset']
+                have_ident = have and cc.has_function(
+                        ident,
+                        prefix : '#include <libcryptsetup.h>',
+                        dependencies : libcryptsetup)
+                conf.set10('HAVE_' + ident.to_upper(), have_ident)
+        endforeach
 else
         have = false
         libcryptsetup = []
 endif
 conf.set10('HAVE_LIBCRYPTSETUP', have)
 
+if want_libcryptsetup_plugins != 'false' and not skip_deps
+        have = (cc.has_function(
+                        'crypt_activate_by_token_pin',
+                        prefix : '#include <libcryptsetup.h>',
+                        dependencies : libcryptsetup) and
+                cc.has_function(
+                        'crypt_token_external_path',
+                        prefix : '#include <libcryptsetup.h>',
+                        dependencies : libcryptsetup))
+else
+        have = false
+endif
+conf.set10('HAVE_LIBCRYPTSETUP_PLUGINS', have)
+
 want_libcurl = get_option('libcurl')
 if want_libcurl != 'false' and not skip_deps
         libcurl = dependency('libcurl',
@@ -1173,7 +1418,7 @@
 want_qrencode = get_option('qrencode')
 if want_qrencode != 'false' and not skip_deps
         libqrencode = dependency('libqrencode',
-                                 version : '>= 4',
+                                 version : '>= 3',
                                  required : want_qrencode == 'true')
         have = libqrencode.found()
 else
@@ -1227,17 +1472,26 @@
                                version : '>= 0.23.3',
                                required : want_p11kit == 'true')
         have = libp11kit.found()
+        libp11kit_cflags = libp11kit.partial_dependency(includes: true, compile_args: true)
 else
         have = false
+        libp11kit_cflags = []
         libp11kit = []
 endif
 conf.set10('HAVE_P11KIT', have)
 
 want_libfido2 = get_option('libfido2')
 if want_libfido2 != 'false' and not skip_deps
-        libfido2 = dependency('libfido2',
-                              required : want_libfido2 == 'true')
-        have = libfido2.found()
+        if conf.get('HAVE_OPENSSL') == 1
+                libfido2 = dependency('libfido2',
+                                      required : want_libfido2 == 'true')
+                have = libfido2.found()
+        elif want_libfido2 == 'true'
+                error('libfido2=true requires openssl')
+        else
+                have = false
+                libfido2 = []
+        endif
 else
         have = false
         libfido2 = []
@@ -1249,17 +1503,24 @@
         tpm2 = dependency('tss2-esys tss2-rc tss2-mu',
                           required : want_tpm2 == 'true')
         have = tpm2.found()
+        have_esys3 = tpm2.version().version_compare('>= 3.0.0')
 else
         have = false
+        have_esys3 = false
         tpm2 = []
 endif
 conf.set10('HAVE_TPM2', have)
+conf.set10('HAVE_TSS2_ESYS3', have_esys3)
 
 want_elfutils = get_option('elfutils')
 if want_elfutils != 'false' and not skip_deps
         libdw = dependency('libdw',
                            required : want_elfutils == 'true')
         have = libdw.found()
+
+        # New in elfutils 0.177
+        conf.set10('HAVE_DWELF_ELF_E_MACHINE_STRING',
+                   have and cc.has_function('dwelf_elf_e_machine_string', dependencies : libdw))
 else
         have = false
         libdw = []
@@ -1325,6 +1586,26 @@
 
 conf.set10('HAVE_COMPRESSION', have_xz or have_lz4 or have_zstd)
 
+compression = get_option('default-compression')
+if compression == 'auto'
+        if have_zstd
+                compression = 'zstd'
+        elif have_lz4
+                compression = 'lz4'
+        elif have_xz
+                compression = 'xz'
+        else
+                compression = 'none'
+        endif
+elif compression == 'zstd' and not have_zstd
+        error('default-compression=zstd requires zstd')
+elif compression == 'lz4' and not have_lz4
+        error('default-compression=lz4 requires lz4')
+elif compression == 'xz' and not have_xz
+        error('default-compression=xz requires xz')
+endif
+conf.set('DEFAULT_COMPRESSION', 'COMPRESSION_@0@'.format(compression.to_upper()))
+
 want_xkbcommon = get_option('xkbcommon')
 if want_xkbcommon != 'false' and not skip_deps
         libxkbcommon = dependency('xkbcommon',
@@ -1338,7 +1619,7 @@
 conf.set10('HAVE_XKBCOMMON', have)
 
 want_pcre2 = get_option('pcre2')
-if want_pcre2 != 'false'
+if want_pcre2 != 'false' and not skip_deps
         libpcre2 = dependency('libpcre2-8',
                               required : want_pcre2 == 'true')
         have = libpcre2.found()
@@ -1379,34 +1660,77 @@
 endif
 conf.set10('HAVE_DBUS', have)
 
-default_dnssec = get_option('default-dnssec')
-if skip_deps
-        default_dnssec = 'no'
+dbusdatadir = datadir / 'dbus-1'
+if conf.get('HAVE_DBUS') == 1
+        dbusdatadir = libdbus.get_variable(pkgconfig: 'datadir', default_value: datadir) / 'dbus-1'
 endif
-if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
-        message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
-        default_dnssec = 'no'
+
+dbuspolicydir = get_option('dbuspolicydir')
+if dbuspolicydir == ''
+        dbuspolicydir = dbusdatadir / 'system.d'
 endif
-conf.set('DEFAULT_DNSSEC_MODE',
-         'DNSSEC_' + default_dnssec.underscorify().to_upper())
-conf.set_quoted('DEFAULT_DNSSEC_MODE_STR', default_dnssec)
+
+dbussessionservicedir = get_option('dbussessionservicedir')
+if dbussessionservicedir == ''
+        dbussessionservicedir = dbusdatadir / 'services'
+        if conf.get('HAVE_DBUS') == 1
+                dbussessionservicedir = libdbus.get_variable(pkgconfig: 'session_bus_services_dir', default_value: dbussessionservicedir)
+        endif
+endif
+
+dbussystemservicedir = get_option('dbussystemservicedir')
+if dbussystemservicedir == ''
+        dbussystemservicedir = dbusdatadir / 'system-services'
+        if conf.get('HAVE_DBUS') == 1
+                dbussystemservicedir = libdbus.get_variable(pkgconfig: 'system_bus_services_dir', default_value: dbussystemservicedir)
+        endif
+endif
+
+dbus_interfaces_dir = get_option('dbus-interfaces-dir')
+if dbus_interfaces_dir == '' or dbus_interfaces_dir == 'yes'
+        if meson.is_cross_build() and dbus_interfaces_dir != 'yes'
+                dbus_interfaces_dir = 'no'
+                warning('Exporting D-Bus interface XML files is disabled during cross build. Pass path or "yes" to force enable.')
+        else
+                dbus_interfaces_dir = dbusdatadir / 'interfaces'
+                if conf.get('HAVE_DBUS') == 1
+                        dbus_interfaces_dir = libdbus.get_variable(pkgconfig: 'interfaces_dir', default_value: dbus_interfaces_dir)
+                endif
+        endif
+endif
+
+# We support one or the other. If gcrypt is available, we assume it's there to
+# be used, and use it in preference.
+opt = get_option('cryptolib')
+if opt == 'openssl' and conf.get('HAVE_OPENSSL') == 0
+        error('openssl requested as the default cryptolib, but not available')
+endif
+conf.set10('PREFER_OPENSSL',
+           opt == 'openssl' or (opt == 'auto' and conf.get('HAVE_OPENSSL') == 1 and conf.get('HAVE_GCRYPT') == 0))
+conf.set10('HAVE_OPENSSL_OR_GCRYPT',
+           conf.get('HAVE_OPENSSL') == 1 or conf.get('HAVE_GCRYPT') == 1)
+lib_openssl_or_gcrypt = conf.get('PREFER_OPENSSL') == 1 ? [libopenssl] : [libgcrypt, libgpg_error]
 
 dns_over_tls = get_option('dns-over-tls')
 if dns_over_tls != 'false'
-        if dns_over_tls == 'openssl'
-                have_gnutls = false
-        else
-                have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.6.0'))
-                if dns_over_tls == 'gnutls' and not have_gnutls
-                        error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
-                endif
+        if dns_over_tls == 'gnutls' and conf.get('PREFER_OPENSSL') == 1
+                error('Sorry, -Ddns-over-tls=gnutls is not supported when openssl is used as the cryptolib')
         endif
-        if dns_over_tls == 'gnutls' or have_gnutls
+
+        if dns_over_tls == 'gnutls'
                 have_openssl = false
         else
                 have_openssl = conf.get('HAVE_OPENSSL') == 1
-                if dns_over_tls != 'auto' and not have_openssl
-                        str = dns_over_tls == 'openssl' ? ' with openssl' : ''
+                if dns_over_tls == 'openssl' and not have_openssl
+                        error('DNS-over-TLS support was requested with openssl, but dependencies are not available')
+                endif
+        endif
+        if dns_over_tls == 'openssl' or have_openssl
+                have_gnutls = false
+        else
+                have_gnutls = conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.6.0')
+                if dns_over_tls != 'auto' and not have_gnutls
+                        str = dns_over_tls == 'gnutls' ? ' with gnutls' : ''
                         error('DNS-over-TLS support was requested@0@, but dependencies are not available'.format(str))
                 endif
         endif
@@ -1444,8 +1768,7 @@
 
 want_repart = get_option('repart')
 if want_repart != 'false'
-        have = (conf.get('HAVE_OPENSSL') == 1 and
-                conf.get('HAVE_LIBFDISK') == 1)
+        have = conf.get('HAVE_LIBFDISK') == 1
         if want_repart == 'true' and not have
                 error('repart support was requested, but dependencies are not available')
         endif
@@ -1454,12 +1777,36 @@
 endif
 conf.set10('ENABLE_REPART', have)
 
+default_dnssec = get_option('default-dnssec')
+if skip_deps
+        default_dnssec = 'no'
+endif
+if default_dnssec != 'no' and conf.get('HAVE_OPENSSL_OR_GCRYPT') == 0
+        message('default-dnssec cannot be set to yes or allow-downgrade openssl and gcrypt are disabled. Setting default-dnssec to no.')
+        default_dnssec = 'no'
+endif
+conf.set('DEFAULT_DNSSEC_MODE',
+         'DNSSEC_' + default_dnssec.underscorify().to_upper())
+conf.set_quoted('DEFAULT_DNSSEC_MODE_STR', default_dnssec)
+
+want_sysupdate = get_option('sysupdate')
+if want_sysupdate != 'false'
+        have = (conf.get('HAVE_OPENSSL') == 1 and
+                conf.get('HAVE_LIBFDISK') == 1)
+        if want_sysupdate == 'true' and not have
+                error('sysupdate support was requested, but dependencies are not available')
+        endif
+else
+        have = false
+endif
+conf.set10('ENABLE_SYSUPDATE', have)
+
 want_importd = get_option('importd')
 if want_importd != 'false'
         have = (conf.get('HAVE_LIBCURL') == 1 and
+                conf.get('HAVE_OPENSSL_OR_GCRYPT') == 1 and
                 conf.get('HAVE_ZLIB') == 1 and
-                conf.get('HAVE_XZ') == 1 and
-                conf.get('HAVE_GCRYPT') == 1)
+                conf.get('HAVE_XZ') == 1)
         if want_importd == 'true' and not have
                 error('importd support was requested, but dependencies are not available')
         endif
@@ -1468,6 +1815,9 @@
 endif
 conf.set10('ENABLE_IMPORTD', have)
 
+want_kernel_install = get_option('kernel-install')
+conf.set10('ENABLE_KERNEL_INSTALL', want_kernel_install)
+
 want_homed = get_option('homed')
 if want_homed != 'false'
         have = (conf.get('HAVE_OPENSSL') == 1 and
@@ -1581,55 +1931,55 @@
 
 conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
 
-#####################################################################
+############################################################
 
-if get_option('efi')
-        efi_arch = host_machine.cpu_family()
-
-        if efi_arch == 'x86'
-                EFI_MACHINE_TYPE_NAME = 'ia32'
-                gnu_efi_arch = 'ia32'
-        elif efi_arch == 'x86_64'
-                EFI_MACHINE_TYPE_NAME = 'x64'
-                gnu_efi_arch = 'x86_64'
-        elif efi_arch == 'arm'
-                EFI_MACHINE_TYPE_NAME = 'arm'
-                gnu_efi_arch = 'arm'
-        elif efi_arch == 'aarch64'
-                EFI_MACHINE_TYPE_NAME = 'aa64'
-                gnu_efi_arch = 'aarch64'
-        elif efi_arch == 'riscv64'
-                EFI_MACHINE_TYPE_NAME = 'riscv64'
-                gnu_efi_arch = 'riscv64'
-        else
-                EFI_MACHINE_TYPE_NAME = ''
-                gnu_efi_arch = ''
-        endif
-
-        have = true
-        conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
-
-        conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
-else
-        have = false
-endif
-conf.set10('ENABLE_EFI', have)
+tests = []
+fuzzers = []
+catalogs = []
 
 ############################################################
 
-build_bpf_skel_py = find_program('tools/build-bpf-skel.py')
+# Include these now as they provide gnu-efi detection.
+subdir('src/fundamental')
+subdir('src/boot/efi')
+
+############################################################
+
+pymod = import('python')
+python = pymod.find_installation('python3', required : true, modules : ['jinja2'])
+python_39 = python.language_version().version_compare('>=3.9')
+
+if get_option('ukify') == 'auto'
+    want_ukify = python_39  and conf.get('HAVE_GNU_EFI') == 1
+elif get_option('ukify') == 'true' and (not python_39 or conf.get('HAVE_GNU_EFI') != 1)
+    error('ukify requires Python >= 3.9 and GNU EFI')
+else
+    want_ukify = get_option('ukify') == 'true'
+endif
+conf.set10('ENABLE_UKIFY', want_ukify)
+
+############################################################
+#
 generate_gperfs = find_program('tools/generate-gperfs.py')
 make_autosuspend_rules_py = find_program('tools/make-autosuspend-rules.py')
 make_directive_index_py = find_program('tools/make-directive-index.py')
 make_man_index_py = find_program('tools/make-man-index.py')
 meson_render_jinja2 = find_program('tools/meson-render-jinja2.py')
 update_dbus_docs_py = find_program('tools/update-dbus-docs.py')
+update_man_rules_py = find_program('tools/update-man-rules.py')
 update_hwdb_sh = find_program('tools/update-hwdb.sh')
 update_hwdb_autosuspend_sh = find_program('tools/update-hwdb-autosuspend.sh')
 update_syscall_tables_sh = find_program('tools/update-syscall-tables.sh')
 xml_helper_py = find_program('tools/xml_helper.py')
+export_dbus_interfaces_py = find_program('tools/dbus_exporter.py')
 
-#####################################################################
+############################################################
+
+if get_option('b_coverage')
+        add_project_arguments('-include', 'src/basic/coverage.h', language : 'c')
+endif
+
+############################################################
 
 config_h = configure_file(
         output : 'config.h',
@@ -1637,14 +1987,16 @@
 
 add_project_arguments('-include', 'config.h', language : 'c')
 
+jinja2_cmdline = [meson_render_jinja2, config_h, version_h]
+
 ############################################################
 
 # binaries that have --help and are intended for use by humans,
 # usually, but not always, installed in /bin.
 public_programs = []
 
-tests = []
-fuzzers = []
+# D-Bus introspection XML export
+dbus_programs = []
 
 basic_includes = include_directories(
         'src/basic',
@@ -1667,42 +2019,45 @@
 
 subdir('po')
 subdir('catalog')
-subdir('src/fundamental')
 subdir('src/basic')
 subdir('src/libsystemd')
 subdir('src/shared')
 subdir('src/udev')
 subdir('src/libudev')
+subdir('src/cryptsetup/cryptsetup-tokens')
+
+alias_target('devel', libsystemd_pc, libudev_pc)
 
 libsystemd = shared_library(
         'systemd',
-        disable_mempool_c,
         version : libsystemd_version,
         include_directories : libsystemd_includes,
         link_args : ['-shared',
                      '-Wl,--version-script=' + libsystemd_sym_path],
         link_with : [libbasic,
-                     libbasic_gcrypt],
+                     libbasic_gcrypt,
+                     libbasic_compress],
         link_whole : [libsystemd_static],
         dependencies : [threads,
-                        librt,
-                        libxz,
-                        libzstd,
-                        liblz4],
+                        librt],
         link_depends : libsystemd_sym,
         install : true,
+        install_tag: 'libsystemd',
         install_dir : rootlibdir)
 
+alias_target('libsystemd', libsystemd)
+
 install_libsystemd_static = static_library(
         'systemd',
         libsystemd_sources,
         basic_sources,
         basic_gcrypt_sources,
+        basic_compress_sources,
         fundamental_sources,
-        disable_mempool_c,
         include_directories : libsystemd_includes,
         build_by_default : static_libsystemd != 'false',
         install : static_libsystemd != 'false',
+        install_tag: 'libsystemd',
         install_dir : rootlibdir,
         pic : static_libsystemd_pic,
         dependencies : [threads,
@@ -1714,12 +2069,13 @@
                         libcap,
                         libblkid,
                         libmount,
-                        libgcrypt],
+                        libgcrypt,
+                        libopenssl,
+                        versiondep],
         c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
 
 libudev = shared_library(
         'udev',
-        disable_mempool_c,
         version : libudev_version,
         include_directories : includes,
         link_args : ['-shared',
@@ -1729,8 +2085,11 @@
         dependencies : [threads],
         link_depends : libudev_sym,
         install : true,
+        install_tag: 'libudev',
         install_dir : rootlibdir)
 
+alias_target('libudev', libudev)
+
 install_libudev_static = static_library(
         'udev',
         basic_sources,
@@ -1738,16 +2097,74 @@
         shared_sources,
         libsystemd_sources,
         libudev_sources,
-        disable_mempool_c,
         include_directories : includes,
         build_by_default : static_libudev != 'false',
         install : static_libudev != 'false',
+        install_tag: 'libudev',
         install_dir : rootlibdir,
         link_depends : libudev_sym,
-        dependencies : libshared_deps + [libmount],
+        dependencies : [libshared_deps,
+                        libmount,
+                        versiondep],
         c_args : static_libudev_pic ? [] : ['-fno-PIC'],
         pic : static_libudev_pic)
 
+if conf.get('HAVE_LIBCRYPTSETUP_PLUGINS') == 1
+        if conf.get('HAVE_TPM2') == 1
+                shared_library(
+                        'cryptsetup-token-systemd-tpm2',
+                        cryptsetup_token_systemd_tpm2_sources,
+                        include_directories : includes,
+                        link_args : ['-shared',
+                                     '-Wl,--version-script=' + cryptsetup_token_sym_path],
+                        link_with : [lib_cryptsetup_token_common,
+                                     libshared],
+                        dependencies : [libcryptsetup,
+                                        tpm2,
+                                        versiondep],
+                        link_depends : cryptsetup_token_sym,
+                        install_rpath : rootpkglibdir,
+                        install : true,
+                        install_dir : libcryptsetup_plugins_dir)
+        endif
+
+        if conf.get('HAVE_LIBFIDO2') == 1
+                shared_library(
+                        'cryptsetup-token-systemd-fido2',
+                        cryptsetup_token_systemd_fido2_sources,
+                        include_directories : includes,
+                        link_args : ['-shared',
+                                     '-Wl,--version-script=' + cryptsetup_token_sym_path],
+                        link_with : [lib_cryptsetup_token_common,
+                                     libshared],
+                        dependencies : [libcryptsetup,
+                                        libfido2,
+                                        versiondep],
+                        link_depends : cryptsetup_token_sym,
+                        install_rpath : rootpkglibdir,
+                        install : true,
+                        install_dir : libcryptsetup_plugins_dir)
+        endif
+
+        if conf.get('HAVE_P11KIT') == 1
+                shared_library(
+                        'cryptsetup-token-systemd-pkcs11',
+                        cryptsetup_token_systemd_pkcs11_sources,
+                        include_directories : includes,
+                        link_args : ['-shared',
+                                     '-Wl,--version-script=' + cryptsetup_token_sym_path],
+                        link_with : [lib_cryptsetup_token_common,
+                                     libshared],
+                        dependencies : [libcryptsetup,
+                                        libp11kit,
+                                        versiondep],
+                        link_depends : cryptsetup_token_sym,
+                        install_rpath : rootpkglibdir,
+                        install : true,
+                        install_dir : libcryptsetup_plugins_dir)
+        endif
+endif
+
 ############################################################
 
 # systemd-analyze requires 'libcore'
@@ -1758,7 +2175,7 @@
 subdir('src/libsystemd-network')
 
 subdir('src/analyze')
-subdir('src/boot/efi')
+subdir('src/boot')
 subdir('src/busctl')
 subdir('src/coredump')
 subdir('src/cryptenroll')
@@ -1782,11 +2199,11 @@
 subdir('src/shutdown')
 subdir('src/sysext')
 subdir('src/systemctl')
+subdir('src/sysupdate')
 subdir('src/timedate')
 subdir('src/timesync')
 subdir('src/tmpfiles')
 subdir('src/userdb')
-subdir('src/vconsole')
 subdir('src/xdg-autostart-generator')
 
 subdir('src/systemd')
@@ -1795,6 +2212,7 @@
 subdir('src/fuzz')
 subdir('rules.d')
 subdir('test')
+subdir('src/ukify/test')  # needs to be last for test_env variable
 
 ############################################################
 
@@ -1803,7 +2221,6 @@
 test_dlopen = executable(
         'test-dlopen',
         test_dlopen_c,
-        disable_mempool_c,
         include_directories : includes,
         link_with : [libbasic],
         dependencies : [libdl],
@@ -1819,7 +2236,7 @@
                 module = tuple[0]
 
                 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
-                version_script_arg = join_paths(project_source_root, sym)
+                version_script_arg = project_source_root / sym
 
                 sources = ['src/nss-@0@/nss-@0@.c'.format(module)]
                 if tuple.length() > 2
@@ -1833,7 +2250,6 @@
                 nss = shared_library(
                         'nss_' + module,
                         sources,
-                        disable_mempool_c,
                         version : '2',
                         include_directories : incs,
                         # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
@@ -1847,61 +2263,64 @@
                                         librt],
                         link_depends : sym,
                         install : true,
+                        install_tag : 'nss',
                         install_dir : rootlibdir)
 
                 # We cannot use shared_module because it does not support version suffix.
                 # Unfortunately shared_library insists on creating the symlink…
                 meson.add_install_script('sh', '-c',
                                          'rm $DESTDIR@0@/libnss_@1@.so'
-                                         .format(rootlibdir, module))
+                                         .format(rootlibdir, module),
+                                         install_tag : 'nss'
+                                         )
 
                 if want_tests != 'false'
                         test('dlopen-nss_' + module,
                              test_dlopen,
                              # path to dlopen must include a slash
-                             args : nss.full_path())
+                             args : nss.full_path(),
+                             depends : nss)
                 endif
         endif
 endforeach
 
 ############################################################
 
-executable(
+exe = executable(
         'systemd',
         systemd_sources,
         include_directories : includes,
         link_with : [libcore,
                      libshared],
-        dependencies : [versiondep,
-                        threads,
-                        librt,
-                        libseccomp,
-                        libselinux,
-                        libmount,
-                        libblkid],
-        install_rpath : rootlibexecdir,
+        dependencies : [libseccomp,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
+dbus_programs += exe
+public_programs += exe
 
 meson.add_install_script(meson_make_symlink,
-                         join_paths(rootlibexecdir, 'systemd'),
-                         join_paths(rootsbindir, 'init'))
+                         rootlibexecdir / 'systemd',
+                         rootsbindir / 'init')
 
-public_programs += executable(
+exe = executable(
         'systemd-analyze',
         systemd_analyze_sources,
         include_directories : core_includes,
         link_with : [libcore,
                      libshared],
-        dependencies : [versiondep,
-                        threads,
-                        librt,
-                        libseccomp,
-                        libselinux,
-                        libmount,
-                        libblkid],
-        install_rpath : rootlibexecdir,
-        install : conf.get('ENABLE_ANALYZE'))
+        dependencies : [libseccomp,
+                        versiondep],
+        install_rpath : rootpkglibdir,
+        install : conf.get('ENABLE_ANALYZE') == 1)
+public_programs += exe
+
+if want_tests != 'false'
+        test('test-compare-versions',
+             test_compare_versions_sh,
+             args : exe.full_path())
+endif
 
 executable(
         'systemd-journald',
@@ -1913,8 +2332,9 @@
                         libxz,
                         liblz4,
                         libselinux,
-                        libzstd],
-        install_rpath : rootlibexecdir,
+                        libzstd,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
@@ -1924,22 +2344,32 @@
         include_directories : includes,
         link_with : [libjournal_core,
                      libshared],
-        dependencies : [threads],
-        install_rpath : rootlibexecdir,
+        dependencies : [threads,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
+if get_option('link-journalctl-shared')
+        journalctl_link_with = [libshared]
+else
+        journalctl_link_with = [libsystemd_static,
+                                libshared_static,
+                                libbasic_gcrypt]
+endif
+
 public_programs += executable(
         'journalctl',
         journalctl_sources,
         include_directories : includes,
-        link_with : [libshared],
+        link_with : [journalctl_link_with],
         dependencies : [threads,
                         libdl,
                         libxz,
                         liblz4,
                         libzstd,
-                        libdl],
-        install_rpath : rootlibexecdir,
+                        libdl,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootbindir)
 
@@ -1948,7 +2378,7 @@
         'src/getty-generator/getty-generator.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : systemgeneratordir)
 
@@ -1957,7 +2387,7 @@
         'src/debug-generator/debug-generator.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : systemgeneratordir)
 
@@ -1966,32 +2396,44 @@
         'src/run-generator/run-generator.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : systemgeneratordir)
 
-executable(
+exe = executable(
         'systemd-fstab-generator',
         'src/fstab-generator/fstab-generator.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : systemgeneratordir)
 
+meson.add_install_script(meson_make_symlink,
+                         systemgeneratordir / 'systemd-fstab-generator',
+                         rootlibexecdir / 'systemd-sysroot-fstab-check')
+
+if want_tests != 'false'
+        test('test-fstab-generator',
+             test_fstab_generator_sh,
+             # https://github.com/mesonbuild/meson/issues/2681
+             args : exe.full_path(),
+             depends : exe)
+endif
+
 if conf.get('ENABLE_ENVIRONMENT_D') == 1
         executable(
                 '30-systemd-environment-d-generator',
                 'src/environment-d-generator/environment-d-generator.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : userenvgeneratordir)
 
         meson.add_install_script(meson_make_symlink,
-                                 join_paths(sysconfdir, 'environment'),
-                                 join_paths(environmentdir, '99-environment.conf'))
+                                 sysconfdir / 'environment',
+                                 environmentdir / '99-environment.conf')
 endif
 
 if conf.get('ENABLE_HIBERNATE') == 1
@@ -2000,7 +2442,7 @@
                 'src/hibernate-resume/hibernate-resume-generator.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : systemgeneratordir)
 
@@ -2009,7 +2451,7 @@
                 'src/hibernate-resume/hibernate-resume.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -2021,7 +2463,7 @@
                 include_directories : includes,
                 link_with : [libshared],
                 dependencies : libblkid,
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : systemgeneratordir)
 
@@ -2030,12 +2472,13 @@
                 'src/dissect/dissect.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true)
 endif
 
 if conf.get('ENABLE_RESOLVE') == 1
-        executable(
+        dbus_programs += executable(
                 'systemd-resolved',
                 systemd_resolved_sources,
                 include_directories : resolve_includes,
@@ -2043,7 +2486,7 @@
                              libbasic_gcrypt,
                              libsystemd_resolve_core],
                 dependencies : systemd_resolved_dependencies,
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2055,31 +2498,33 @@
                              libbasic_gcrypt,
                              libsystemd_resolve_core],
                 dependencies : [threads,
-                                libgpg_error,
+                                lib_openssl_or_gcrypt,
                                 libm,
-                                libidn],
-                install_rpath : rootlibexecdir,
+                                libidn,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true)
 
         meson.add_install_script(meson_make_symlink,
-                                 join_paths(bindir, 'resolvectl'),
-                                 join_paths(rootsbindir, 'resolvconf'))
+                                 bindir / 'resolvectl',
+                                 rootsbindir / 'resolvconf')
 
         meson.add_install_script(meson_make_symlink,
-                                 join_paths(bindir, 'resolvectl'),
-                                 join_paths(bindir, 'systemd-resolve'))
+                                 bindir / 'resolvectl',
+                                 bindir / 'systemd-resolve')
 endif
 
 if conf.get('ENABLE_LOGIND') == 1
-        executable(
+        dbus_programs += executable(
                 'systemd-logind',
                 systemd_logind_sources,
                 include_directories : includes,
                 link_with : [liblogind_core,
                              libshared],
                 dependencies : [threads,
-                                libacl],
-                install_rpath : rootlibexecdir,
+                                libacl,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2091,8 +2536,9 @@
                 dependencies : [threads,
                                 liblz4,
                                 libxz,
-                                libzstd],
-                install_rpath : rootlibexecdir,
+                                libzstd,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
 
@@ -2101,12 +2547,13 @@
                 'src/login/inhibit.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
 
         if conf.get('HAVE_PAM') == 1
-                version_script_arg = join_paths(project_source_root, pam_systemd_sym)
+                version_script_arg = project_source_root / pam_systemd_sym
                 pam_systemd = shared_library(
                         'pam_systemd',
                         pam_systemd_c,
@@ -2118,16 +2565,19 @@
                                      libshared_static],
                         dependencies : [threads,
                                         libpam,
-                                        libpam_misc],
+                                        libpam_misc,
+                                        versiondep],
                         link_depends : pam_systemd_sym,
                         install : true,
+                        install_tag : 'pam',
                         install_dir : pamlibdir)
 
                 if want_tests != 'false'
                         test('dlopen-pam_systemd',
                              test_dlopen,
                              # path to dlopen must include a slash
-                             args : pam_systemd.full_path())
+                             args : pam_systemd.full_path(),
+                             depends : pam_systemd)
                 endif
         endif
 
@@ -2136,7 +2586,7 @@
                 user_runtime_dir_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -2147,28 +2597,44 @@
                 'src/user-sessions/user-sessions.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
 
-if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
-        public_programs += executable(
+if conf.get('HAVE_BLKID') == 1 and conf.get('HAVE_GNU_EFI') == 1
+        if get_option('link-boot-shared')
+                boot_link_with = [libshared]
+        else
+                boot_link_with = [libsystemd_static, libshared_static]
+        endif
+
+        exe = executable(
                 'bootctl',
-                'src/boot/bootctl.c',
+                bootctl_sources,
                 include_directories : includes,
-                link_with : [libshared],
-                dependencies : [libblkid],
-                install_rpath : rootlibexecdir,
+                link_with : [boot_link_with],
+                dependencies : [libblkid,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true)
+        public_programs += exe
+
+        if want_tests != 'false'
+                test('test-bootctl-json',
+                     test_bootctl_json_sh,
+                     args : exe.full_path(),
+                     depends : exe)
+        endif
 
         public_programs += executable(
                 'systemd-bless-boot',
                 'src/boot/bless-boot.c',
                 include_directories : includes,
-                link_with : [libshared],
-                dependencies : [libblkid],
-                install_rpath : rootlibexecdir,
+                link_with : [boot_link_with],
+                dependencies : [libblkid,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2176,10 +2642,35 @@
                 'systemd-bless-boot-generator',
                 'src/boot/bless-boot-generator.c',
                 include_directories : includes,
-                link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                link_with : [boot_link_with],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : systemgeneratordir)
+
+        if conf.get('HAVE_OPENSSL') == 1 and conf.get('HAVE_TPM2') == 1
+                executable(
+                        'systemd-measure',
+                        'src/boot/measure.c',
+                        include_directories : includes,
+                        link_with : [libshared],
+                        dependencies : [libopenssl,
+                                        versiondep],
+                        install_rpath : rootpkglibdir,
+                        install : true,
+                        install_dir : rootlibexecdir)
+                executable(
+                        'systemd-pcrphase',
+                        'src/boot/pcrphase.c',
+                        include_directories : includes,
+                        link_with : [libshared],
+                        dependencies : [libopenssl,
+                                        tpm2,
+                                        libblkid,
+                                        versiondep],
+                        install_rpath : rootpkglibdir,
+                        install : true,
+                        install_dir : rootlibexecdir)
+        endif
 endif
 
 executable(
@@ -2187,8 +2678,9 @@
         'src/boot/boot-check-no-failures.c',
         include_directories : includes,
         link_with : [libshared],
-        dependencies : [libblkid],
-        install_rpath : rootlibexecdir,
+        dependencies : [libblkid,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
@@ -2197,11 +2689,12 @@
         'src/activate/activate.c',
         include_directories : includes,
         link_with : [libshared],
-        dependencies : [threads],
-        install_rpath : rootlibexecdir,
+        dependencies : [threads,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
-public_programs += executable(
+systemctl = executable(
         'systemctl',
         systemctl_sources,
         include_directories : includes,
@@ -2211,19 +2704,23 @@
                         libselinux,
                         libxz,
                         liblz4,
-                        libzstd],
-        install_rpath : rootlibexecdir,
+                        libzstd,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootbindir)
+public_programs += systemctl
 
 if conf.get('ENABLE_PORTABLED') == 1
-        executable(
+        dbus_programs += executable(
                 'systemd-portabled',
                 systemd_portabled_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [threads],
-                install_rpath : rootlibexecdir,
+                dependencies : [threads,
+                                libselinux,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2232,8 +2729,9 @@
                 'src/portable/portablectl.c',
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [threads],
-                install_rpath : rootlibexecdir,
+                dependencies : [threads,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
 endif
@@ -2244,7 +2742,8 @@
                 systemd_sysext_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
 endif
@@ -2255,8 +2754,9 @@
                 systemd_userwork_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [threads],
-                install_rpath : rootlibexecdir,
+                dependencies : [threads,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2265,8 +2765,9 @@
                 systemd_userdbd_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [threads],
-                install_rpath : rootlibexecdir,
+                dependencies : [threads,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2275,10 +2776,10 @@
                 userdbctl_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [threads],
-                install_rpath : rootlibexecdir,
-                install : true,
-                install_dir : rootbindir)
+                dependencies : [threads,
+                                versiondep],
+                install_rpath : rootpkglibdir,
+                install : true)
 endif
 
 if conf.get('ENABLE_HOMED') == 1
@@ -2286,26 +2787,30 @@
                 'systemd-homework',
                 systemd_homework_sources,
                 include_directories : includes,
-                link_with : [libshared],
+                link_with : [libshared,
+                             libshared_fdisk],
                 dependencies : [threads,
                                 libblkid,
                                 libcrypt,
                                 libopenssl,
                                 libfdisk,
-                                libp11kit],
-                install_rpath : rootlibexecdir,
+                                libp11kit,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
-        executable(
+        dbus_programs += executable(
                 'systemd-homed',
                 systemd_homed_sources,
                 include_directories : home_includes,
                 link_with : [libshared],
                 dependencies : [threads,
                                 libcrypt,
-                                libopenssl],
-                install_rpath : rootlibexecdir,
+                                libopenssl,
+                                libm,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2318,14 +2823,14 @@
                                 libcrypt,
                                 libopenssl,
                                 libp11kit,
-                                libdl],
-                install_rpath : rootlibexecdir,
-                install : true,
-                install_dir : rootbindir)
+                                libdl,
+                                versiondep],
+                install_rpath : rootpkglibdir,
+                install : true)
 
         if conf.get('HAVE_PAM') == 1
-                version_script_arg = join_paths(project_source_root, pam_systemd_home_sym)
-                pam_systemd = shared_library(
+                version_script_arg = project_source_root / pam_systemd_home_sym
+                pam_systemd_home = shared_library(
                         'pam_systemd_home',
                         pam_systemd_home_c,
                         name_prefix : '',
@@ -2337,23 +2842,33 @@
                         dependencies : [threads,
                                         libpam,
                                         libpam_misc,
-                                        libcrypt],
+                                        libcrypt,
+                                        versiondep],
                         link_depends : pam_systemd_home_sym,
                         install : true,
+                        install_tag : 'pam',
                         install_dir : pamlibdir)
+
+                if want_tests != 'false'
+                        test('dlopen-pam_systemd_home',
+                             test_dlopen,
+                             # path to dlopen must include a slash
+                             args : pam_systemd_home.full_path(),
+                             depends : pam_systemd_home)
+                endif
         endif
 endif
 
 foreach alias : (['halt', 'poweroff', 'reboot', 'shutdown'] +
                  (conf.get('HAVE_SYSV_COMPAT') == 1 ? ['runlevel', 'telinit'] : []))
         meson.add_install_script(meson_make_symlink,
-                                 join_paths(rootbindir, 'systemctl'),
-                                 join_paths(rootsbindir, alias))
+                                 rootbindir / 'systemctl',
+                                 rootsbindir / alias)
 endforeach
 
 meson.add_install_script(meson_make_symlink,
-                         join_paths(rootbindir, 'udevadm'),
-                         join_paths(rootlibexecdir, 'systemd-udevd'))
+                         rootbindir / 'udevadm',
+                         rootlibexecdir / 'systemd-udevd')
 
 if conf.get('ENABLE_BACKLIGHT') == 1
         executable(
@@ -2361,7 +2876,7 @@
                 'src/backlight/backlight.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -2372,7 +2887,7 @@
                 'src/rfkill/rfkill.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -2382,7 +2897,7 @@
         'src/system-update-generator/system-update-generator.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : systemgeneratordir)
 
@@ -2393,8 +2908,10 @@
                 include_directories : includes,
                 link_with : [libshared],
                 dependencies : [libcryptsetup,
-                                libp11kit],
-                install_rpath : rootlibexecdir,
+                                libp11kit,
+                                versiondep,
+                                libopenssl],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2403,7 +2920,7 @@
                 'src/cryptsetup/cryptsetup-generator.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : systemgeneratordir)
 
@@ -2412,8 +2929,9 @@
                 'src/veritysetup/veritysetup.c',
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [libcryptsetup],
-                install_rpath : rootlibexecdir,
+                dependencies : [libcryptsetup,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2422,11 +2940,12 @@
                 'src/veritysetup/veritysetup-generator.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : systemgeneratordir)
 
-        executable(
+        public_programs += executable(
                 'systemd-cryptenroll',
                 systemd_cryptenroll_sources,
                 include_directories : includes,
@@ -2434,27 +2953,55 @@
                 dependencies : [libcryptsetup,
                                 libdl,
                                 libopenssl,
-                                libp11kit],
-                install_rpath : rootlibexecdir,
+                                libp11kit,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true)
+
+        executable(
+                'systemd-integritysetup',
+                ['src/integritysetup/integritysetup.c', 'src/integritysetup/integrity-util.c'],
+                include_directories : includes,
+                link_with : [libshared],
+                dependencies : [libcryptsetup,
+                                versiondep],
+                install_rpath : rootpkglibdir,
+                install : true,
+                install_dir : rootlibexecdir)
+
+        executable(
+                'systemd-integritysetup-generator',
+                ['src/integritysetup/integritysetup-generator.c', 'src/integritysetup/integrity-util.c'],
+                include_directories : includes,
+                link_with : [libshared],
+                install_rpath : rootpkglibdir,
+                install : true,
+                install_dir : systemgeneratordir)
 endif
 
 if conf.get('HAVE_SYSV_COMPAT') == 1
-        executable(
+        exe = executable(
                 'systemd-sysv-generator',
                 'src/sysv-generator/sysv-generator.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : systemgeneratordir)
 
+        sysv_generator_test_py = find_program('test/sysv-generator-test.py')
+        if want_tests != 'false'
+                test('sysv-generator-test',
+                     sysv_generator_test_py,
+                     depends : exe)
+        endif
+
         executable(
                 'systemd-rc-local-generator',
                 'src/rc-local-generator/rc-local-generator.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : systemgeneratordir)
 endif
@@ -2465,7 +3012,7 @@
                 systemd_xdg_autostart_generator_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : usergeneratordir)
 
@@ -2474,18 +3021,18 @@
                 'src/xdg-autostart-generator/xdg-autostart-condition.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
 
 if conf.get('ENABLE_HOSTNAMED') == 1
-        executable(
+        dbus_programs += executable(
                 'systemd-hostnamed',
                 'src/hostname/hostnamed.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2494,7 +3041,8 @@
                 'src/hostname/hostnamectl.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true)
 endif
 
@@ -2502,18 +3050,20 @@
         if conf.get('HAVE_XKBCOMMON') == 1
                 # logind will load libxkbcommon.so dynamically on its own, but we still
                 # need to specify where the headers are
-                deps = [libdl, libxkbcommon.partial_dependency(compile_args: true)]
+                deps = [libdl,
+                        libxkbcommon.partial_dependency(compile_args: true),
+                        versiondep]
         else
-                deps = []
+                deps = [versiondep]
         endif
 
-        executable(
+        dbus_programs += executable(
                 'systemd-localed',
                 systemd_localed_sources,
                 include_directories : includes,
                 link_with : [libshared],
                 dependencies : deps,
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2522,17 +3072,18 @@
                 localectl_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true)
 endif
 
 if conf.get('ENABLE_TIMEDATED') == 1
-        executable(
+        dbus_programs += executable(
                 'systemd-timedated',
                 'src/timedate/timedated.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -2542,9 +3093,10 @@
                 'timedatectl',
                 'src/timedate/timedatectl.c',
                 include_directories : includes,
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 link_with : [libshared],
-                dependencies : [libm],
+                dependencies : [libm,
+                                versiondep],
                 install : true)
 endif
 
@@ -2555,8 +3107,9 @@
                 include_directories : includes,
                 link_with : [libtimesyncd_core],
                 dependencies : [threads,
-                                libm],
-                install_rpath : rootlibexecdir,
+                                libm,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2565,19 +3118,19 @@
                 'src/timesync/wait-sync.c',
                 include_directories : includes,
                 link_with : [libtimesyncd_core],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
 
 if conf.get('ENABLE_MACHINED') == 1
-        executable(
+        dbus_programs += executable(
                 'systemd-machined',
                 systemd_machined_sources,
                 include_directories : includes,
                 link_with : [libmachine_core,
                              libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2589,20 +3142,22 @@
                 dependencies : [threads,
                                 libxz,
                                 liblz4,
-                                libzstd],
-                install_rpath : rootlibexecdir,
+                                libzstd,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
 endif
 
 if conf.get('ENABLE_IMPORTD') == 1
-        executable(
+        dbus_programs += executable(
                 'systemd-importd',
                 systemd_importd_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [threads],
-                install_rpath : rootlibexecdir,
+                dependencies : [threads,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2610,14 +3165,15 @@
                 'systemd-pull',
                 systemd_pull_sources,
                 include_directories : includes,
-                link_with : [libshared],
-                dependencies : [versiondep,
-                                libcurl,
+                link_with : [libshared,
+                             lib_import_common],
+                dependencies : [libcurl,
+                                lib_openssl_or_gcrypt,
                                 libz,
                                 libbzip2,
                                 libxz,
-                                libgcrypt],
-                install_rpath : rootlibexecdir,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2625,12 +3181,14 @@
                 'systemd-import',
                 systemd_import_sources,
                 include_directories : includes,
-                link_with : [libshared],
+                link_with : [libshared,
+                             lib_import_common],
                 dependencies : [libcurl,
                                 libz,
                                 libbzip2,
-                                libxz],
-                install_rpath : rootlibexecdir,
+                                libxz,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2638,8 +3196,10 @@
                 'systemd-import-fs',
                 systemd_import_fs_sources,
                 include_directories : includes,
-                link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                link_with : [libshared,
+                             lib_import_common],
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2647,12 +3207,14 @@
                 'systemd-export',
                 systemd_export_sources,
                 include_directories : includes,
-                link_with : [libshared],
+                link_with : [libshared,
+                             lib_import_common],
                 dependencies : [libcurl,
                                 libz,
                                 libbzip2,
-                                libxz],
-                install_rpath : rootlibexecdir,
+                                libxz,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2665,14 +3227,14 @@
                 systemd_journal_upload_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [versiondep,
-                                threads,
+                dependencies : [threads,
                                 libcurl,
                                 libgnutls,
                                 libxz,
                                 liblz4,
-                                libzstd],
-                install_rpath : rootlibexecdir,
+                                libzstd,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -2681,7 +3243,7 @@
         public_programs += executable(
                 'systemd-journal-remote',
                 systemd_journal_remote_sources,
-                include_directories : includes,
+                include_directories : journal_includes,
                 link_with : [libshared,
                              libsystemd_journal_remote],
                 dependencies : [threads,
@@ -2689,23 +3251,25 @@
                                 libgnutls,
                                 libxz,
                                 liblz4,
-                                libzstd],
-                install_rpath : rootlibexecdir,
+                                libzstd,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
         public_programs += executable(
                 'systemd-journal-gatewayd',
                 systemd_journal_gatewayd_sources,
-                include_directories : includes,
+                include_directories : journal_includes,
                 link_with : [libshared],
                 dependencies : [threads,
                                 libmicrohttpd,
                                 libgnutls,
                                 libxz,
                                 liblz4,
-                                libzstd],
-                install_rpath : rootlibexecdir,
+                                libzstd,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -2715,14 +3279,15 @@
                 'systemd-coredump',
                 systemd_coredump_sources,
                 include_directories : includes,
-                link_with : [libshared],
+                link_with : [libshared,
+                             libbasic_compress],
                 dependencies : [threads,
                                 libacl,
-                                libdw,
                                 libxz,
                                 liblz4,
-                                libzstd],
-                install_rpath : rootlibexecdir,
+                                libzstd,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2730,12 +3295,14 @@
                 'coredumpctl',
                 coredumpctl_sources,
                 include_directories : includes,
-                link_with : [libshared],
+                link_with : [libshared,
+                             libbasic_compress],
                 dependencies : [threads,
                                 libxz,
                                 liblz4,
-                                libzstd],
-                install_rpath : rootlibexecdir,
+                                libzstd,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true)
 endif
 
@@ -2747,22 +3314,23 @@
                 link_with : [libshared],
                 dependencies : [threads,
                                 libacl,
-                                libdw,
                                 libxz,
                                 liblz4,
-                                libzstd],
-                install_rpath : rootlibexecdir,
+                                libzstd,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
 
 if conf.get('ENABLE_OOMD') == 1
-        executable('systemd-oomd',
+        dbus_programs += executable('systemd-oomd',
                    systemd_oomd_sources,
                    include_directories : includes,
                    link_with : [libshared],
-                   dependencies : [],
-                   install_rpath : rootlibexecdir,
+                   dependencies : [libatomic,
+                                   versiondep],
+                   install_rpath : rootpkglibdir,
                    install : true,
                    install_dir : rootlibexecdir)
 
@@ -2771,10 +3339,9 @@
                 oomctl_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [],
-                install_rpath : rootlibexecdir,
-                install : true,
-                install_dir : rootbindir)
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
+                install : true)
 endif
 
 if conf.get('ENABLE_BINFMT') == 1
@@ -2783,7 +3350,8 @@
                 'src/binfmt/binfmt.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -2791,30 +3359,26 @@
                                  mkdir_p.format(binfmtdir))
         if install_sysconfdir
                 meson.add_install_script('sh', '-c',
-                                         mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
+                                         mkdir_p.format(sysconfdir / 'binfmt.d'))
         endif
 endif
 
-if conf.get('ENABLE_REPART') == 1
+if conf.get('ENABLE_SYSUPDATE') == 1
         exe = executable(
-                'systemd-repart',
-                systemd_repart_sources,
+                'systemd-sysupdate',
+                systemd_sysupdate_sources,
                 include_directories : includes,
-                link_with : [libshared],
+                link_with : [libshared,
+                             libshared_fdisk],
                 dependencies : [threads,
                                 libblkid,
                                 libfdisk,
-                                libopenssl],
-                install_rpath : rootlibexecdir,
+                                libopenssl,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
-                install_dir : rootbindir)
+                install_dir : rootlibexecdir)
         public_programs += exe
-
-        if want_tests != 'false'
-                test('test-repart',
-                     test_repart_sh,
-                     args : exe.full_path())
-        endif
 endif
 
 if conf.get('ENABLE_VCONSOLE') == 1
@@ -2823,7 +3387,7 @@
                 'src/vconsole/vconsole-setup.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -2834,19 +3398,21 @@
                 'src/random-seed/random-seed.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
 
 if conf.get('ENABLE_FIRSTBOOT') == 1
-        executable(
+        public_programs += executable(
                 'systemd-firstboot',
                 'src/firstboot/firstboot.c',
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [libcrypt],
-                install_rpath : rootlibexecdir,
+                dependencies : [libcrypt,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
 endif
@@ -2856,7 +3422,8 @@
         'src/remount-fs/remount-fs.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
@@ -2865,7 +3432,8 @@
         'src/machine-id-setup/machine-id-setup-main.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootbindir)
 
@@ -2874,24 +3442,28 @@
         'src/fsck/fsck.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
-executable('systemd-growfs',
-           'src/partition/growfs.c',
-           include_directories : includes,
-           link_with : [libshared],
-           install_rpath : rootlibexecdir,
-           install : true,
-           install_dir : rootlibexecdir)
+executable(
+        'systemd-growfs',
+        'src/partition/growfs.c',
+        include_directories : includes,
+        link_with : [libshared],
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
+        install : true,
+        install_dir : rootlibexecdir)
 
 executable(
         'systemd-makefs',
         'src/partition/makefs.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
@@ -2900,7 +3472,8 @@
         'src/sleep/sleep.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
@@ -2914,25 +3487,27 @@
         'src/sysctl/sysctl.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
-executable(
+public_programs += executable(
         'systemd-ac-power',
         'src/ac-power/ac-power.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
-        install : true,
-        install_dir : rootlibexecdir)
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
+        install : true)
 
 public_programs += executable(
         'systemd-detect-virt',
         'src/detect-virt/detect-virt.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 public_programs += executable(
@@ -2940,7 +3515,8 @@
         'src/delta/delta.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 public_programs += executable(
@@ -2948,7 +3524,8 @@
         'src/escape/escape.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootbindir)
 
@@ -2957,7 +3534,20 @@
         'src/notify/notify.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
+        install : true,
+        install_dir : rootbindir)
+
+public_programs += executable(
+        'systemd-creds',
+        'src/creds/creds.c',
+        include_directories : includes,
+        link_with : [libshared],
+        dependencies : [threads,
+                        libopenssl,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootbindir)
 
@@ -2966,7 +3556,7 @@
         'src/volatile-root/volatile-root.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : conf.get('ENABLE_INITRD') == 1,
         install_dir : rootlibexecdir)
 
@@ -2975,24 +3565,35 @@
         'src/cgroups-agent/cgroups-agent.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
-public_programs += executable(
+systemd_id128 = executable(
         'systemd-id128',
         'src/id128/id128.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
+public_programs += systemd_id128
+
+if want_tests != 'false'
+        test('test-systemctl-enable',
+             test_systemctl_enable_sh,
+             # https://github.com/mesonbuild/meson/issues/2681
+             args : [systemctl.full_path(),
+                     systemd_id128.full_path()])
+endif
 
 public_programs += executable(
         'systemd-path',
         'src/path/path.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 public_programs += executable(
@@ -3000,7 +3601,8 @@
         'src/ask-password/ask-password.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootbindir)
 
@@ -3009,7 +3611,7 @@
         'src/reply-password/reply-password.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
@@ -3018,7 +3620,8 @@
         'src/tty-ask-password-agent/tty-ask-password-agent.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootbindir)
 
@@ -3027,7 +3630,8 @@
         'src/cgls/cgls.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 public_programs += executable(
@@ -3035,7 +3639,8 @@
         'src/cgtop/cgtop.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 executable(
@@ -3043,7 +3648,7 @@
         'src/initctl/initctl.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        install_rpath : rootpkglibdir,
         install : (conf.get('HAVE_SYSV_COMPAT') == 1),
         install_dir : rootlibexecdir)
 
@@ -3052,19 +3657,21 @@
         'src/mount/mount-tool.c',
         include_directories : includes,
         link_with : [libshared],
-        dependencies: [libmount],
-        install_rpath : rootlibexecdir,
+        dependencies: [libmount,
+                       versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 meson.add_install_script(meson_make_symlink,
-                         'systemd-mount', join_paths(bindir, 'systemd-umount'))
+                         'systemd-mount', bindir / 'systemd-umount')
 
 public_programs += executable(
         'systemd-run',
         'src/run/run.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 public_programs += executable(
@@ -3072,8 +3679,9 @@
         'src/stdio-bridge/stdio-bridge.c',
         include_directories : includes,
         link_with : [libshared],
-        dependencies : [versiondep],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 public_programs += executable(
@@ -3081,7 +3689,8 @@
         busctl_sources,
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 if enable_sysusers
@@ -3090,7 +3699,8 @@
                 'src/sysusers/sysusers.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
         public_programs += exe
@@ -3112,6 +3722,7 @@
                                      libbasic,
                                      libbasic_gcrypt,
                                      libsystemd_static],
+                        dependencies : [versiondep],
                         install : true,
                         install_dir : rootbindir)
                 public_programs += exe
@@ -3131,8 +3742,9 @@
                 systemd_tmpfiles_sources,
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [libacl],
-                install_rpath : rootlibexecdir,
+                dependencies : [libacl,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
         public_programs += exe
@@ -3145,7 +3757,7 @@
         endif
 
         if have_standalone_binaries
-                public_programs += executable(
+                exe = executable(
                         'systemd-tmpfiles.standalone',
                         systemd_tmpfiles_sources,
                         include_directories : includes,
@@ -3154,9 +3766,18 @@
                                      libbasic,
                                      libbasic_gcrypt,
                                      libsystemd_static],
-                        dependencies : [libacl],
+                        dependencies : [libacl,
+                                        versiondep],
                         install : true,
                         install_dir : rootbindir)
+                public_programs += exe
+
+                if want_tests != 'false'
+                        test('test-systemd-tmpfiles.standalone',
+                             test_systemd_tmpfiles_py,
+                             # https://github.com/mesonbuild/meson/issues/2681
+                             args : exe.full_path())
+                endif
         endif
 endif
 
@@ -3166,6 +3787,7 @@
                 'src/hwdb/hwdb.c',
                 include_directories : includes,
                 link_with : udev_link_with,
+                dependencies : [versiondep],
                 install_rpath : udev_rpath,
                 install : true,
                 install_dir : rootbindir)
@@ -3174,6 +3796,7 @@
         if want_tests != 'false'
                 test('hwdb-test',
                      hwdb_test_sh,
+                     suite : 'dist-check',
                      args : [systemd_hwdb.full_path()],
                      timeout : 90)
         endif
@@ -3185,7 +3808,7 @@
                 'src/quotacheck/quotacheck.c',
                 include_directories : includes,
                 link_with : [libshared],
-                install_rpath : rootlibexecdir,
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 endif
@@ -3195,42 +3818,102 @@
         'src/socket-proxy/socket-proxyd.c',
         include_directories : includes,
         link_with : [libshared],
-        dependencies : [threads],
-        install_rpath : rootlibexecdir,
+        dependencies : [threads,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
-public_programs += executable(
+udevadm = executable(
         'udevadm',
         udevadm_sources,
         include_directories : includes,
         link_with : [libudevd_core],
-        dependencies : [versiondep,
-                        threads,
+        dependencies : [threads,
                         libkmod,
                         libidn,
                         libacl,
-                        libblkid],
+                        libblkid,
+                        versiondep],
         install_rpath : udev_rpath,
         install : true,
         install_dir : rootbindir)
+public_programs += udevadm
+
+if conf.get('ENABLE_REPART') == 1
+        exe = executable(
+                'systemd-repart',
+                systemd_repart_sources,
+                include_directories : includes,
+                link_with : [libshared,
+                             libshared_fdisk],
+                dependencies : [threads,
+                                libblkid,
+                                libfdisk,
+                                libopenssl,
+                                versiondep],
+                install_rpath : rootpkglibdir,
+                install : true,
+                install_dir : rootbindir)
+        public_programs += exe
+
+        if have_standalone_binaries
+                exe = executable(
+                        'systemd-repart.standalone',
+                        systemd_repart_sources,
+                        include_directories : includes,
+                        c_args : '-DSTANDALONE',
+                        link_with : [libshared_static,
+                                     libbasic,
+                                     libbasic_gcrypt,
+                                     libsystemd_static,
+                                     libshared_fdisk],
+                        dependencies : [threads,
+                                        libblkid,
+                                        libfdisk,
+                                        libopenssl,
+                                        versiondep],
+                        install_rpath : rootpkglibdir,
+                        install : true,
+                        install_dir : rootbindir)
+                public_programs += exe
+        endif
+endif
 
 executable(
         'systemd-shutdown',
         systemd_shutdown_sources,
         include_directories : includes,
         link_with : [libshared],
-        dependencies : [libmount],
-        install_rpath : rootlibexecdir,
+        dependencies : [libmount,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
+if have_standalone_binaries
+        executable(
+                'systemd-shutdown.standalone',
+                systemd_shutdown_sources,
+                include_directories : includes,
+                c_args : '-DSTANDALONE',
+                link_with : [libshared_static,
+                             libbasic,
+                             libsystemd_static],
+                dependencies : [libmount,
+                                versiondep],
+                install_rpath : rootpkglibdir,
+                install : true,
+                install_dir : rootlibexecdir)
+endif
+
 executable(
         'systemd-update-done',
         'src/update-done/update-done.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
@@ -3239,8 +3922,9 @@
         'src/update-utmp/update-utmp.c',
         include_directories : includes,
         link_with : [libshared],
-        dependencies : [libaudit],
-        install_rpath : rootlibexecdir,
+        dependencies : [libaudit,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : (conf.get('ENABLE_UTMP') == 1),
         install_dir : rootlibexecdir)
 
@@ -3250,8 +3934,9 @@
                 'src/modules-load/modules-load.c',
                 include_directories : includes,
                 link_with : [libshared],
-                dependencies : [libkmod],
-                install_rpath : rootlibexecdir,
+                dependencies : [libkmod,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -3259,7 +3944,7 @@
                                  mkdir_p.format(modulesloaddir))
         if install_sysconfdir
                 meson.add_install_script('sh', '-c',
-                                         mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
+                                         mkdir_p.format(sysconfdir / 'modules-load.d'))
         endif
 endif
 
@@ -3270,29 +3955,32 @@
         link_with : [libnspawn_core,
                      libshared],
         dependencies : [libblkid,
-                        libseccomp],
-        install_rpath : rootlibexecdir,
+                        libseccomp,
+                        versiondep],
+        install_rpath : rootpkglibdir,
         install : true)
 
 if conf.get('ENABLE_NETWORKD') == 1
-        executable(
+        dbus_programs += executable(
                 'systemd-networkd',
                 systemd_networkd_sources,
                 include_directories : network_includes,
                 link_with : [libnetworkd_core,
                              libsystemd_network,
                              networkd_link_with],
-                dependencies : [threads],
-                install_rpath : rootlibexecdir,
+                dependencies : [threads,
+                                versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
-        executable(
+        public_programs += executable(
                 'systemd-networkd-wait-online',
                 systemd_networkd_wait_online_sources,
                 include_directories : includes,
                 link_with : [networkd_link_with],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootlibexecdir)
 
@@ -3302,7 +3990,8 @@
                 include_directories : libsystemd_network_includes,
                 link_with : [libsystemd_network,
                              networkd_link_with],
-                install_rpath : rootlibexecdir,
+                dependencies : [versiondep],
+                install_rpath : rootpkglibdir,
                 install : true,
                 install_dir : rootbindir)
 endif
@@ -3312,7 +4001,8 @@
         network_generator_sources,
         include_directories : includes,
         link_with : [networkd_link_with],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
@@ -3320,7 +4010,8 @@
         test('test-network-generator-conversion',
              test_network_generator_conversion_sh,
              # https://github.com/mesonbuild/meson/issues/2681
-             args : exe.full_path())
+             args : exe.full_path(),
+             depends : exe)
 endif
 
 executable(
@@ -3328,19 +4019,50 @@
         'src/sulogin-shell/sulogin-shell.c',
         include_directories : includes,
         link_with : [libshared],
-        install_rpath : rootlibexecdir,
+        dependencies : [versiondep],
+        install_rpath : rootpkglibdir,
         install : true,
         install_dir : rootlibexecdir)
 
+exe = custom_target(
+        'kernel-install',
+        input : kernel_install_in,
+        output : 'kernel-install',
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
+        install : want_kernel_install,
+        install_mode : 'rwxr-xr-x',
+        install_dir : bindir)
+public_programs += exe
+
+if want_tests != 'false' and want_kernel_install
+        test('test-kernel-install',
+             test_kernel_install_sh,
+             env : test_env,
+             args : [exe.full_path(), loaderentry_install])
+endif
+
+if want_ukify
+   exe = custom_target(
+        'ukify',
+        input : 'src/ukify/ukify.py',
+        output : 'ukify',
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
+        install : true,
+        install_mode : 'rwxr-xr-x',
+        install_dir : rootlibexecdir)
+   public_programs += exe
+endif
+
 ############################################################
 
-custom_target(
+runtest_env = custom_target(
         'systemd-runtest.env',
         output : 'systemd-runtest.env',
         command : [sh, '-c',
                    '{ echo SYSTEMD_TEST_DATA=@0@; echo SYSTEMD_CATALOG_DIR=@1@; } >@OUTPUT@'.format(
-                           join_paths(project_source_root, 'test'),
-                           join_paths(project_build_root, 'catalog'))],
+                           project_source_root / 'test',
+                           project_build_root / 'catalog')],
+        depends : catalogs,
         build_by_default : true)
 
 test_cflags = ['-DTEST_CODE=1']
@@ -3364,12 +4086,17 @@
         parallel = tuple.length() > 7 ? tuple[7] : true
         timeout = 30
 
-        name = sources[0].split('/')[-1].split('.')[0]
+        # FIXME: Use fs.stem() with meson >= 0.54.0
+        name = '@0@'.format(sources[0]).split('/')[-1].split('.')[0]
         if type.startswith('timeout=')
                 timeout = type.split('=')[1].to_int()
                 type = ''
         endif
 
+        suite = fs.name(fs.parent('@0@'.format(sources[0])))
+        # FIXME: Use str.replace() with meson >= 0.58.0
+        suite = suite.split('sd-')[-1]
+
         if condition == '' or conf.get(condition) == 1
                 exe = executable(
                         name,
@@ -3380,9 +4107,10 @@
                                         dependencies],
                         c_args : defs,
                         build_by_default : want_tests != 'false',
-                        install_rpath : rootlibexecdir,
+                        install_rpath : rootpkglibdir,
                         install : install_tests,
-                        install_dir : join_paths(testsdir, type))
+                        install_dir : testsdir / type,
+                        link_depends : runtest_env)
 
                 if type == 'manual'
                         message('@0@ is a manual test'.format(name))
@@ -3391,7 +4119,9 @@
                 elif want_tests != 'false'
                         test(name, exe,
                              env : test_env,
-                             timeout : timeout)
+                             timeout : timeout,
+                             suite : suite,
+                             is_parallel : parallel)
                 endif
         else
                 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
@@ -3473,60 +4203,60 @@
         else
                 sources += 'src/fuzz/fuzz-main.c'
         endif
+        sources += fuzz_generated_directives
 
-        name = sources[0].split('/')[-1].split('.')[0]
+        # FIXME: Use fs.stem() with meson >= 0.54.0
+        name = '@0@'.format(sources[0]).split('/')[-1].split('.')[0]
 
         exe = executable(
                 name,
                 sources,
                 include_directories : [incs, include_directories('src/fuzz')],
                 link_with : link_with,
-                dependencies : dependencies,
+                dependencies : [dependencies,
+                                versiondep],
                 c_args : defs + test_cflags,
                 link_args: link_args,
                 install : false,
                 build_by_default : fuzzer_build)
         fuzzer_exes += exe
 
-        if want_tests != 'false'
+        if want_tests != 'false' and name in fuzz_regression_tests
                 # Run the fuzz regression tests without any sanitizers enabled.
                 # Additional invocations with sanitizers may be added below.
-                foreach p : fuzz_regression_tests
-                        b = p.split('/')[-2]
-                        c = p.split('/')[-1]
-
-                        if b == name
-                                test('@0@_@1@'.format(b, c),
-                                     exe,
-                                     args : [join_paths(project_source_root, p)])
-                        endif
+                foreach tuple : fuzz_regression_tests[name]
+                        fuzz_dir = tuple[0]
+                        fuzz_in = tuple[1]
+                        test('@0@_@1@'.format(name, fuzz_in),
+                             exe,
+                             suite : 'fuzzers',
+                             args : [fuzz_dir != '' ? project_source_root / fuzz_dir / name / fuzz_in
+                                                    : fuzz_generated_in_dir / '@0@_@1@'.format(name, fuzz_in)])
                 endforeach
         endif
 endforeach
 
-run_target(
-        'fuzzers',
-        depends : fuzzer_exes,
-        command : ['true'])
+alias_target('fuzzers', fuzzer_exes)
 
 ############################################################
 
+subdir('docs/sysvinit')
+subdir('docs/var-log')
+subdir('hwdb.d')
+subdir('man')
 subdir('modprobe.d')
+subdir('network')
+subdir('presets')
+subdir('shell-completion/bash')
+subdir('shell-completion/zsh')
 subdir('sysctl.d')
 subdir('sysusers.d')
 subdir('tmpfiles.d')
-subdir('hwdb.d')
 subdir('units')
-subdir('presets')
-subdir('network')
-subdir('man')
-subdir('shell-completion/bash')
-subdir('shell-completion/zsh')
-subdir('docs/sysvinit')
-subdir('docs/var-log')
 
 install_subdir('factory/etc',
                install_dir : factorydir)
+subdir('factory/templates')
 
 if install_sysconfdir
         install_data('xorg/50-systemd-user.sh',
@@ -3543,9 +4273,11 @@
              'docs/TRANSIENT-SETTINGS.md',
              'docs/TRANSLATORS.md',
              'docs/UIDS-GIDS.md',
-             'docs/GVARIANT-SERIALIZATION.md',
              install_dir : docdir)
 
+install_subdir('LICENSES',
+               install_dir : docdir)
+
 meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
 meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
 
@@ -3559,75 +4291,73 @@
 if get_option('mode') == 'developer' and want_tests != 'false' and jekyll.found()
         test('github-pages',
              jekyll,
+             suite : 'dist-check',
              args : ['build',
-                     '--source', join_paths(project_source_root, 'docs'),
-                     '--destination', join_paths(project_build_root, '_site')])
+                     '--source', project_source_root / 'docs',
+                     '--destination', project_build_root / '_site'])
 endif
 
 ############################################################
 
 check_help = find_program('tools/check-help.sh')
+check_version = find_program('tools/check-version.sh')
 
 foreach exec : public_programs
         name = exec.full_path().split('/')[-1]
         if want_tests != 'false'
                 test('check-help-' + name,
                      check_help,
-                     args : exec.full_path())
+                     suite : 'dist-check',
+                     args : exec.full_path(),
+                     depends: exec)
+
+                test('check-version-' + name,
+                     check_version,
+                     suite : 'dist-check',
+                     args : [exec.full_path(),
+                             meson.project_version()],
+                     depends: exec)
         endif
 endforeach
 
-############################################################
-
-check_directives_sh = find_program('tools/check-directives.sh')
-
-if want_tests != 'false'
-        test('check-directives',
-             check_directives_sh,
-             args : [project_source_root, project_build_root])
-endif
-
-############################################################
-
 # Enable tests for all supported sanitizers
-foreach tuple : sanitizers
+foreach tuple : fuzz_sanitizers
         sanitizer = tuple[0]
         build = tuple[1]
 
         if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
-                prev = ''
-                foreach p : fuzz_regression_tests
-                        b = p.split('/')[-2]
-                        c = p.split('/')[-1]
-
-                        name = '@0@:@1@'.format(b, sanitizer)
-
-                        if name != prev
-                                if want_tests == 'false'
-                                        message('Not compiling @0@ because tests is set to false'.format(name))
-                                elif fuzz_tests
-                                        exe = custom_target(
-                                                name,
-                                                output : name,
-                                                depends : build,
-                                                command : [ln, '-fs',
-                                                           join_paths(build.full_path(), b),
-                                                           '@OUTPUT@'],
-                                                build_by_default : true)
-                                else
-                                        message('Not compiling @0@ because fuzz-tests is set to false'.format(name))
-                                endif
+                foreach fuzzer, fuzz_ins : fuzz_regression_tests
+                        name = '@0@:@1@'.format(fuzzer, sanitizer)
+                        if want_tests == 'false'
+                                message('Not compiling @0@ because tests is set to false'.format(name))
+                                continue
                         endif
-                        prev = name
+                        if not fuzz_tests
+                                message('Not compiling @0@ because fuzz-tests is set to false'.format(name))
+                                continue
+                        endif
+                        exe = custom_target(
+                                name,
+                                output : name,
+                                depends : [build] + fuzz_generated_directives,
+                                command : [ln, '-fs',
+                                           build.full_path() / fuzzer,
+                                           '@OUTPUT@'],
+                                build_by_default : true)
 
-                        if fuzz_tests
-                                test('@0@_@1@_@2@'.format(b, c, sanitizer),
+                        foreach tuple : fuzz_ins
+                                fuzz_dir = tuple[0]
+                                fuzz_in = tuple[1]
+
+                                test('@0@_@1@_@2@'.format(fuzzer, fuzz_in, sanitizer),
                                      env,
+                                     suite : 'fuzz+san',
                                      env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'],
                                      timeout : 60,
                                      args : [exe.full_path(),
-                                             join_paths(project_source_root, p)])
-                        endif
+                                             fuzz_dir != '' ? project_source_root / fuzz_dir / fuzzer / fuzz_in
+                                                            : fuzz_generated_in_dir / '@0@_@1@'.format(fuzzer, fuzz_in)])
+                        endforeach
                 endforeach
         endif
 endforeach
@@ -3639,17 +4369,19 @@
         all_files = run_command(
                 env, '-u', 'GIT_WORK_TREE',
                 git, '--git-dir=@0@/.git'.format(project_source_root),
-                'ls-files', ':/*.[ch]')
+                     'ls-files', ':/*.[ch]',
+                check : false)
+        if all_files.returncode() == 0
+                all_files = files(all_files.stdout().split())
 
-        all_files = files(all_files.stdout().split())
-
-        custom_target(
-                'tags',
-                output : 'tags',
-                command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
-        run_target(
-                'ctags',
-                command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
+                custom_target(
+                        'tags',
+                        output : 'tags',
+                        command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
+                run_target(
+                        'ctags',
+                        command : [env, 'ctags', '--tag-relative=never', '-o', '@0@/tags'.format(project_source_root)] + all_files)
+        endif
 endif
 
 if git.found()
@@ -3661,13 +4393,13 @@
 
 if git.found()
         git_head = run_command(
-                git,
-                '--git-dir=@0@/.git'.format(project_source_root),
-                'rev-parse', 'HEAD').stdout().strip()
+                git, '--git-dir=@0@/.git'.format(project_source_root),
+                     'rev-parse', 'HEAD',
+                check : false).stdout().strip()
         git_head_short = run_command(
-                git,
-                '--git-dir=@0@/.git'.format(project_source_root),
-                'rev-parse', '--short=7', 'HEAD').stdout().strip()
+                git, '--git-dir=@0@/.git'.format(project_source_root),
+                     'rev-parse', '--short=7', 'HEAD',
+                check : false).stdout().strip()
 
         run_target(
                 'git-snapshot',
@@ -3686,118 +4418,86 @@
         depends : [man, libsystemd, libudev],
         command : [check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
 
-############################################################
+alias_target('update-dbus-docs', update_dbus_docs)
+alias_target('update-man-rules', update_man_rules)
 
-if dbus_docs.length() > 0
+if not meson.is_cross_build()
         custom_target(
-                'update-dbus-docs',
-                output : 'update-dbus-docs',
-                command : [update_dbus_docs_py,
-                           '--build-dir=@0@'.format(project_build_root),
-                           '@INPUT@'],
-                input : dbus_docs)
-
-        if conf.get('BUILD_MODE_DEVELOPER') == 1
-                test('dbus-docs-fresh',
-                     update_dbus_docs_py,
-                     args : ['--build-dir=@0@'.format(project_build_root),
-                             '--test'] + dbus_docs)
-        endif
+                'export-dbus-interfaces',
+                output : fs.name(dbus_interfaces_dir),
+                install : dbus_interfaces_dir != 'no',
+                install_dir : fs.parent(dbus_interfaces_dir),
+                command : [export_dbus_interfaces_py, '@OUTPUT@', dbus_programs])
 endif
 
-custom_target(
-        'update-man-rules',
-        output : 'update-man-rules',
-        command : [sh, '-c',
-                   'cd @0@ && '.format(meson.build_root()) +
-                   'python3 @0@/tools/update-man-rules.py $(find @0@ -wholename "*/man/*.xml") >t && '.format(project_source_root) +
-                   'mv t @0@/man/rules/meson.build'.format(meson.current_source_dir())],
-        depends : custom_entities_ent)
-
 ############################################################
-watchdog_opt = service_watchdog == '' ? 'disabled' : service_watchdog
 
-status = [
-        '@0@ @1@'.format(meson.project_name(), meson.project_version()),
+alt_time_epoch = run_command('date', '-Is', '-u', '-d', '@@0@'.format(time_epoch),
+                             check : true).stdout().strip()
 
-        'build mode:                        @0@'.format(get_option('mode')),
-        'split /usr:                        @0@'.format(split_usr),
-        'split bin-sbin:                    @0@'.format(split_bin),
-        'prefix directory:                  @0@'.format(prefixdir),
-        'rootprefix directory:              @0@'.format(rootprefixdir),
-        'sysconf directory:                 @0@'.format(sysconfdir),
-        'include directory:                 @0@'.format(includedir),
-        'lib directory:                     @0@'.format(libdir),
-        'rootlib directory:                 @0@'.format(rootlibdir),
-        'SysV init scripts:                 @0@'.format(sysvinit_path),
-        'SysV rc?.d directories:            @0@'.format(sysvrcnd_path),
-        'PAM modules directory:             @0@'.format(pamlibdir),
-        'PAM configuration directory:       @0@'.format(pamconfdir),
-        'RPM macros directory:              @0@'.format(rpmmacrosdir),
-        'modprobe.d directory:              @0@'.format(modprobedir),
-        'D-Bus policy directory:            @0@'.format(dbuspolicydir),
-        'D-Bus session directory:           @0@'.format(dbussessionservicedir),
-        'D-Bus system directory:            @0@'.format(dbussystemservicedir),
-        'bash completions directory:        @0@'.format(bashcompletiondir),
-        'zsh completions directory:         @0@'.format(zshcompletiondir),
-        'extra start script:                @0@'.format(get_option('rc-local')),
-        'debug shell:                       @0@ @ @1@'.format(get_option('debug-shell'),
-                                                              get_option('debug-tty')),
-        'system UIDs:                       <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_UID_MAX'),
-                                                                        conf.get('SYSTEM_ALLOC_UID_MIN')),
-        'system GIDs:                       <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_GID_MAX'),
-                                                                        conf.get('SYSTEM_ALLOC_GID_MIN')),
-        'dynamic UIDs:                      @0@…@1@'.format(dynamic_uid_min, dynamic_uid_max),
-        'container UID bases:               @0@…@1@'.format(container_uid_base_min, container_uid_base_max),
-        'static UID/GID allocations:        @0@'.format(' '.join(static_ugids)),
-        '/dev/kvm access mode:              @0@'.format(get_option('dev-kvm-mode')),
-        'render group access mode:          @0@'.format(get_option('group-render-mode')),
-        'certificate root directory:        @0@'.format(get_option('certificate-root')),
-        'support URL:                       @0@'.format(support_url),
-        'nobody user name:                  @0@'.format(nobody_user),
-        'nobody group name:                 @0@'.format(nobody_group),
-        'fallback hostname:                 @0@'.format(get_option('fallback-hostname')),
-
-        'default DNSSEC mode:               @0@'.format(default_dnssec),
-        'default DNS-over-TLS mode:         @0@'.format(default_dns_over_tls),
-        'default mDNS mode:                 @0@'.format(default_mdns),
-        'default LLMNR mode:                @0@'.format(default_llmnr),
-        'default cgroup hierarchy:          @0@'.format(default_hierarchy),
-        'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
-        'default KillUserProcesses setting: @0@'.format(kill_user_processes),
-        'default locale:                    @0@'.format(default_locale),
-        'default user $PATH:                @0@'.format(default_user_path_display),
-        'systemd service watchdog:          @0@'.format(watchdog_opt)]
-
-alt_dns_servers = '\n                                            '.join(dns_servers.split(' '))
-alt_ntp_servers = '\n                                            '.join(ntp_servers.split(' '))
-status += [
-        'default DNS servers:               @0@'.format(alt_dns_servers),
-        'default NTP servers:               @0@'.format(alt_ntp_servers)]
-
-alt_time_epoch = run_command('date', '-Is', '-u', '-d',
-                             '@@0@'.format(time_epoch)).stdout().strip()
-status += [
-        'time epoch:                        @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
+summary({
+        'split /usr' :                      split_usr,
+        'split bin-sbin' :                  split_bin,
+        'prefix directory' :                prefixdir,
+        'rootprefix directory' :            rootprefixdir,
+        'sysconf directory' :               sysconfdir,
+        'include directory' :               includedir,
+        'lib directory' :                   libdir,
+        'rootlib directory' :               rootlibdir,
+        'SysV init scripts' :               sysvinit_path,
+        'SysV rc?.d directories' :          sysvrcnd_path,
+        'PAM modules directory' :           pamlibdir,
+        'PAM configuration directory' :     pamconfdir,
+        'libcryptsetup plugins directory' : libcryptsetup_plugins_dir,
+        'RPM macros directory' :            rpmmacrosdir,
+        'modprobe.d directory' :            modprobedir,
+        'D-Bus policy directory' :          dbuspolicydir,
+        'D-Bus session directory' :         dbussessionservicedir,
+        'D-Bus system directory' :          dbussystemservicedir,
+        'D-Bus interfaces directory' :      dbus_interfaces_dir,
+        'bash completions directory' :      bashcompletiondir,
+        'zsh completions directory' :       zshcompletiondir,
+        'private shared lib version tag' :  shared_lib_tag,
+        'extra start script' :              get_option('rc-local'),
+        'debug shell' :                     '@0@ @ @1@'.format(get_option('debug-shell'),
+                                                               get_option('debug-tty')),
+        'system UIDs' :                     '<=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_UID_MAX'),
+                                                                         conf.get('SYSTEM_ALLOC_UID_MIN')),
+        'system GIDs' :                     '<=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_GID_MAX'),
+                                                                         conf.get('SYSTEM_ALLOC_GID_MIN')),
+        'dynamic UIDs' :                    '@0@…@1@'.format(dynamic_uid_min, dynamic_uid_max),
+        'container UID bases' :             '@0@…@1@'.format(container_uid_base_min, container_uid_base_max),
+        'static UID/GID allocations' :      ' '.join(static_ugids),
+        '/dev/kvm access mode' :            get_option('dev-kvm-mode'),
+        'render group access mode' :        get_option('group-render-mode'),
+        'certificate root directory' :      get_option('certificate-root'),
+        'support URL' :                     support_url,
+        'nobody user name' :                nobody_user,
+        'nobody group name' :               nobody_group,
+        'fallback hostname' :               get_option('fallback-hostname'),
+        'default compression method' :      compression,
+        'default DNSSEC mode' :             default_dnssec,
+        'default DNS-over-TLS mode' :       default_dns_over_tls,
+        'default mDNS mode' :               default_mdns,
+        'default LLMNR mode' :              default_llmnr,
+        'default DNS servers' :             dns_servers.split(' '),
+        'default NTP servers' :             ntp_servers.split(' '),
+        'default cgroup hierarchy' :        default_hierarchy,
+        'default net.naming-scheme value' : default_net_naming_scheme,
+        'default KillUserProcesses value' : kill_user_processes,
+        'default locale' :                  default_locale,
+        'default nspawn locale' :           nspawn_locale,
+        'default status unit format' :      status_unit_format_default,
+        'default user $PATH' :
+                default_user_path != '' ? default_user_path : '(same as system services)',
+        'systemd service watchdog' :        service_watchdog == '' ? 'disabled' : service_watchdog,
+        'time epoch' :                      '@0@ (@1@)'.format(time_epoch, alt_time_epoch)})
 
 # TODO:
 # CFLAGS:   ${OUR_CFLAGS} ${CFLAGS}
 # CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
 # LDFLAGS:  ${OUR_LDFLAGS} ${LDFLAGS}
 
-if conf.get('ENABLE_EFI') == 1
-        status += 'efi arch:                          @0@'.format(efi_arch)
-
-        if have_gnu_efi
-                status += [
-                        'EFI machine type:                  @0@'.format(EFI_MACHINE_TYPE_NAME),
-                        'EFI CC                             @0@'.format(' '.join(efi_cc)),
-                        'EFI lds:                           @0@'.format(efi_lds),
-                        'EFI crt0:                          @0@'.format(efi_crt0),
-                        'EFI include directory:             @0@'.format(efi_incdir)]
-        endif
-endif
-
 found = []
 missing = []
 
@@ -3817,6 +4517,7 @@
         ['gnutls'],
         ['libbpf'],
         ['libcryptsetup'],
+        ['libcryptsetup-plugins'],
         ['libcurl'],
         ['libfdisk'],
         ['libfido2'],
@@ -3842,11 +4543,11 @@
         # components
         ['backlight'],
         ['binfmt'],
-        ['bpf-framework',         conf.get('BPF_FRAMEWORK') == 1],
+        ['bpf-framework',          conf.get('BPF_FRAMEWORK') == 1],
         ['coredump'],
         ['environment.d'],
         ['efi'],
-        ['gnu-efi',               have_gnu_efi],
+        ['gnu-efi'],
         ['firstboot'],
         ['hibernate'],
         ['homed'],
@@ -3854,7 +4555,7 @@
         ['hwdb'],
         ['importd'],
         ['initrd'],
-        ['kernel-install',        get_option('kernel-install')],
+        ['kernel-install'],
         ['localed'],
         ['logind'],
         ['machined'],
@@ -3872,7 +4573,8 @@
         ['resolve'],
         ['rfkill'],
         ['sysext'],
-        ['systemd-analyze',       conf.get('ENABLE_ANALYZE') == 1],
+        ['systemd-analyze',        conf.get('ENABLE_ANALYZE') == 1],
+        ['sysupdate'],
         ['sysusers'],
         ['timedated'],
         ['timesyncd'],
@@ -3885,33 +4587,38 @@
         ['idn'],
         ['polkit'],
         ['nscd'],
-        ['legacy-pkla',           install_polkit_pkla],
+        ['legacy-pkla',            install_polkit_pkla],
         ['kmod'],
+        ['xenctrl'],
         ['dbus'],
         ['glib'],
         ['tpm'],
-        ['man pages',             want_man],
-        ['html pages',            want_html],
-        ['man page indices',      want_man and have_lxml],
+        ['man pages',              want_man],
+        ['html pages',             want_html],
+        ['man page indices',       want_man and have_lxml],
         ['SysV compat'],
         ['compat-mutable-uid-boundaries'],
         ['utmp'],
         ['ldconfig'],
-        ['adm group',             get_option('adm-group')],
-        ['wheel group',           get_option('wheel-group')],
+        ['adm group',              get_option('adm-group')],
+        ['wheel group',            get_option('wheel-group')],
         ['gshadow'],
         ['debug hashmap'],
         ['debug mmap cache'],
         ['debug siphash'],
-        ['valgrind',              conf.get('VALGRIND') == 1],
-        ['trace logging',         conf.get('LOG_TRACE') == 1],
-        ['install tests',         install_tests],
-        ['link-udev-shared',      get_option('link-udev-shared')],
-        ['link-systemctl-shared', get_option('link-systemctl-shared')],
-        ['link-networkd-shared',  get_option('link-networkd-shared')],
-        ['link-timesyncd-shared', get_option('link-timesyncd-shared')],
+        ['valgrind',               conf.get('VALGRIND') == 1],
+        ['trace logging',          conf.get('LOG_TRACE') == 1],
+        ['install tests',          install_tests],
+        ['link-udev-shared',       get_option('link-udev-shared')],
+        ['link-systemctl-shared',  get_option('link-systemctl-shared')],
+        ['link-networkd-shared',   get_option('link-networkd-shared')],
+        ['link-timesyncd-shared',  get_option('link-timesyncd-shared')],
+        ['link-journalctl-shared', get_option('link-journalctl-shared')],
+        ['link-boot-shared',       get_option('link-boot-shared')],
+        ['first-boot-full-preset'],
         ['fexecve'],
-        ['standalone-binaries',   get_option('standalone-binaries')],
+        ['standalone-binaries',    get_option('standalone-binaries')],
+        ['coverage',               get_option('b_coverage')],
 ]
 
         if tuple.length() >= 2
@@ -3940,6 +4647,14 @@
         found += 'static-libudev(@0@)'.format(static_libudev)
 endif
 
+if conf.get('HAVE_OPENSSL_OR_GCRYPT') == 1 and conf.get('PREFER_OPENSSL') == 1
+        found += 'cryptolib(openssl)'
+elif conf.get('HAVE_OPENSSL_OR_GCRYPT') == 1
+        found += 'cryptolib(gcrypt)'
+else
+        missing += 'cryptolib'
+endif
+
 if conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1
         found += 'DNS-over-TLS(gnutls)'
 elif conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1
@@ -3948,13 +4663,10 @@
         missing += 'DNS-over-TLS'
 endif
 
-status += [
-        '',
-        'enabled features: @0@'.format(', '.join(found)),
-        '',
-        'disabled features: @0@'.format(', '.join(missing)),
-        '']
-message('\n         '.join(status))
+summary({
+        'enabled' :  ', '.join(found),
+        'disabled' : ', '.join(missing)},
+        section : 'Features')
 
 if rootprefixdir != rootprefix_default
         warning('\n' +
diff --git a/meson_options.txt b/meson_options.txt
index 2f0f4e7..17c88e2 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -3,6 +3,8 @@
 
 option('version-tag', type : 'string',
        description : 'override the git version string')
+option('shared-lib-tag', type : 'string',
+       description : 'override the private shared library version tag (defaults to project version)')
 
 option('mode', type : 'combo', choices : ['developer', 'release'],
        description : 'autoenable features suitable for systemd development/release builds')
@@ -23,13 +25,20 @@
        description : 'link systemd-networkd and its helpers to libsystemd-shared.so')
 option('link-timesyncd-shared', type: 'boolean',
        description : 'link systemd-timesyncd and its helpers to libsystemd-shared.so')
+option('link-journalctl-shared', type: 'boolean',
+       description : 'link journalctl against libsystemd-shared.so')
+option('link-boot-shared', type: 'boolean',
+       description : 'link bootctl and systemd-bless-boot against libsystemd-shared.so')
+option('first-boot-full-preset', type: 'boolean', value: false,
+       description : 'during first boot, do full preset-all (default will be changed to true later)')
+
 option('static-libsystemd', type : 'combo',
        choices : ['false', 'true', 'pic', 'no-pic'],
        description : '''install a static library for libsystemd''')
 option('static-libudev', type : 'combo',
        choices : ['false', 'true', 'pic', 'no-pic'],
        description : 'install a static library for libudev')
-option('standalone-binaries', type : 'boolean', value : 'false',
+option('standalone-binaries', type : 'boolean', value : false,
        description : 'also build standalone versions of supported binaries')
 
 option('sysvinit-path', type : 'string', value : '/etc/init.d',
@@ -42,7 +51,7 @@
        value : '/etc/rc.local')
 option('initrd', type : 'boolean',
        description : 'install services for use when running systemd in initrd')
-option('compat-mutable-uid-boundaries', type : 'boolean', value : 'false',
+option('compat-mutable-uid-boundaries', type : 'boolean', value : false,
        description : 'look at uid boundaries in /etc/login.defs for compatibility')
 option('nscd', type : 'boolean',
        description : 'build support for flushing of the nscd caches')
@@ -95,6 +104,8 @@
        description : 'support for custom binary formats')
 option('repart', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'install the systemd-repart tool')
+option('sysupdate', type : 'combo', choices : ['auto', 'true', 'false'],
+       description : 'install the systemd-sysupdate tool')
 option('coredump', type : 'boolean',
        description : 'install the coredump handler')
 option('pstore', type : 'boolean',
@@ -174,6 +185,12 @@
        description : 'D-Bus session service directory')
 option('dbussystemservicedir', type : 'string',
        description : 'D-Bus system service directory')
+option('dbus-interfaces-dir', type : 'string',
+       description : 'export D-Bus introspection XML as standalone files')
+option('default-timeout-sec', type : 'integer', value : 90,
+       description : 'default timeout for system unit start/stop')
+option('default-user-timeout-sec', type : 'integer', value : 90,
+       description : 'default timeout for user unit start/stop')
 option('pkgconfigdatadir', type : 'string', value : '',
        description : 'directory for arch-independent pkg-config files')
 option('pkgconfiglibdir', type : 'string', value : '',
@@ -182,10 +199,14 @@
        description : 'directory for xinitrc files')
 option('rpmmacrosdir', type : 'string', value : 'lib/rpm/macros.d',
        description : 'directory for rpm macros ["no" disables]')
+option('update-helper-user-timeout-sec', type : 'integer', value : 15,
+       description : 'timeout for user manager package operations')
 option('pamlibdir', type : 'string',
        description : 'directory for PAM modules')
 option('pamconfdir', type : 'string',
        description : 'directory for PAM configuration ["no" disables]')
+option('libcryptsetup-plugins-dir', type : 'string',
+       description : 'directory for libcryptsetup plugins')
 option('docdir', type : 'string',
        description : 'documentation directory')
 option('install-sysconfdir', type : 'combo', choices : ['true', 'no-samples', 'false'], value : 'true',
@@ -196,22 +217,27 @@
 option('default-hierarchy', type : 'combo',
        choices : ['legacy', 'hybrid', 'unified'], value : 'unified',
        description : 'default cgroup hierarchy')
-option('default-net-naming-scheme', type : 'combo',
-       choices : ['latest', 'v238', 'v239', 'v240', 'v241', 'v243', 'v245', 'v247', 'v249'],
+option('extra-net-naming-schemes', type : 'string',
+       description : 'comma-separated list of extra net.naming-scheme= definitions')
+option('default-net-naming-scheme', type : 'string', value : 'latest',
        description : 'default net.naming-scheme= value')
 option('status-unit-format-default', type : 'combo',
-       choices : ['description', 'name', 'combined'],
+       choices : ['auto', 'description', 'name', 'combined'],
        description : 'use unit name or description in messages by default')
-option('time-epoch', type : 'integer', value : '-1',
+option('time-epoch', type : 'integer', value : 0,
        description : 'time epoch for time clients')
+option('clock-valid-range-usec-max', type : 'integer', value : 473364000000000, # 15 years
+       description : 'maximum value in microseconds for the difference between RTC and epoch, exceeding which is considered an RTC error ["0" disables]')
+option('default-user-shell', type : 'string', value : '/bin/bash',
+       description : 'default interactive shell')
 
-option('system-alloc-uid-min', type : 'integer', value : '-1',
+option('system-alloc-uid-min', type : 'integer', value : 0,
        description : 'minimum system UID used when allocating')
-option('system-alloc-gid-min', type : 'integer', value : '-1',
+option('system-alloc-gid-min', type : 'integer', value : 0,
        description : 'minimum system GID used when allocating')
-option('system-uid-max', type : 'integer', value : '-1',
+option('system-uid-max', type : 'integer', value : 0,
        description : 'maximum system UID')
-option('system-gid-max', type : 'integer', value : '-1',
+option('system-gid-max', type : 'integer', value : 0,
        description : 'maximum system GID')
 option('dynamic-uid-min', type : 'integer', value : 0x0000EF00,
        description : 'minimum dynamic UID')
@@ -231,47 +257,47 @@
 option('nobody-group', type : 'string',
        description : 'The name of the nobody group (the one with GID 65534)',
        value : 'nobody')
-option('adm-gid', type : 'integer', value : '-1',
+option('adm-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "adm" group')
-option('audio-gid', type : 'integer', value : '-1',
+option('audio-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "audio" group')
-option('cdrom-gid', type : 'integer', value : '-1',
+option('cdrom-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "cdrom" group')
-option('dialout-gid', type : 'integer', value : '-1',
+option('dialout-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "dialout" group')
-option('disk-gid', type : 'integer', value : '-1',
+option('disk-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "disk" group')
-option('input-gid', type : 'integer', value : '-1',
+option('input-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "input" group')
-option('kmem-gid', type : 'integer', value : '-1',
+option('kmem-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "kmem" group')
-option('kvm-gid', type : 'integer', value : '-1',
+option('kvm-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "kvm" group')
-option('lp-gid', type : 'integer', value : '-1',
+option('lp-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "lp" group')
-option('render-gid', type : 'integer', value : '-1',
+option('render-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "render" group')
-option('sgx-gid', type : 'integer', value : '-1',
+option('sgx-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "sgx" group')
-option('tape-gid', type : 'integer', value : '-1',
+option('tape-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "tape" group')
 option('tty-gid', type : 'integer', value : 5,
        description : 'the numeric GID of the "tty" group')
-option('users-gid', type : 'integer', value : '-1',
+option('users-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "users" group')
-option('utmp-gid', type : 'integer', value : '-1',
+option('utmp-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "utmp" group')
-option('video-gid', type : 'integer', value : '-1',
+option('video-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "video" group')
-option('wheel-gid', type : 'integer', value : '-1',
+option('wheel-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the "wheel" group')
-option('systemd-journal-gid', type : 'integer', value : '-1',
+option('systemd-journal-gid', type : 'integer', value : 0,
        description : 'soft-static allocation for the systemd-journal group')
-option('systemd-network-uid', type : 'integer', value : '-1',
+option('systemd-network-uid', type : 'integer', value : 0,
        description : 'soft-static allocation for the systemd-network user')
-option('systemd-resolve-uid', type : 'integer', value : '-1',
+option('systemd-resolve-uid', type : 'integer', value : 0,
        description : 'soft-static allocation for the systemd-resolve user')
-option('systemd-timesync-uid', type : 'integer', value : '-1',
+option('systemd-timesync-uid', type : 'integer', value : 0,
        description : 'soft-static allocation for the systemd-timesync user')
 
 option('dev-kvm-mode', type : 'string', value : '0666',
@@ -282,8 +308,10 @@
        description : 'the default value for KillUserProcesses= setting')
 option('gshadow', type : 'boolean',
        description : 'support for shadow group')
-option('default-locale', type : 'string', value : '',
+option('default-locale', type : 'string', value : 'C.UTF-8',
        description : 'default locale used when /etc/locale.conf does not exist')
+option('nspawn-locale', type : 'string', value : 'C.UTF-8',
+       description : 'default locale used by systemd-nspawn when executing commands in a container')
 option('localegen-path', type : 'string', value : '',
        description : 'absolute path to the locale-gen binary in case the system is using locale-gen')
 option('service-watchdog', type : 'string', value : '3min',
@@ -330,6 +358,8 @@
        description : 'SMACK support')
 option('smack-run-label', type : 'string',
        description : 'run systemd --system itself with a specific SMACK label')
+option('smack-default-process-label', type : 'string',
+       description : 'default SMACK label for executed processes')
 option('polkit', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'polkit support')
 option('ima', type : 'boolean',
@@ -345,6 +375,8 @@
        description : 'libfdisk support')
 option('kmod', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'support for loadable modules')
+option('xenctrl', type : 'combo', choices : ['auto', 'true', 'false'],
+       description : 'support for Xen kexec')
 option('pam', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'PAM support')
 option('pwquality', type : 'combo', choices : ['auto', 'true', 'false'],
@@ -353,6 +385,8 @@
        description : 'libµhttpd support')
 option('libcryptsetup', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'libcryptsetup support')
+option('libcryptsetup-plugins', type : 'combo', choices : ['auto', 'true', 'false'],
+       description : 'libcryptsetup LUKS2 external token handlers support (plugins)')
 option('libcurl', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'libcurl support')
 option('idn', type : 'boolean',
@@ -371,6 +405,8 @@
        description : 'gnutls support')
 option('openssl', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'openssl support')
+option('cryptolib', type : 'combo', choices : ['auto', 'openssl', 'gcrypt'],
+       description : 'whether to use openssl or gcrypt where both are supported')
 option('p11kit', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'p11kit support')
 option('libfido2', type : 'combo', choices : ['auto', 'true', 'false'],
@@ -389,6 +425,8 @@
        description : 'lz4 compression support')
 option('zstd', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'zstd compression support')
+option('default-compression', type : 'combo', choices : ['auto', 'zstd', 'lz4', 'xz'], value: 'auto',
+       description : 'default compression algorithm')
 option('xkbcommon', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'xkbcommon keymap support')
 option('pcre2', type : 'combo', choices : ['auto', 'true', 'false'],
@@ -400,17 +438,17 @@
 
 option('gnu-efi', type : 'combo', choices : ['auto', 'true', 'false'],
        description : 'gnu-efi support for sd-boot')
-option('efi-cc', type : 'array',
-       description : 'the compiler to use for EFI modules')
-option('efi-ld', type : 'string', value : 'ld',
+option('efi-cflags', type : 'array',
+       description : 'additional flags for EFI compiler')
+# Note that LLD does not support PE/COFF relocations
+# https://lists.llvm.org/pipermail/llvm-dev/2021-March/149234.html
+option('efi-ld', type : 'combo', choices : ['auto', 'bfd', 'gold'],
        description : 'the linker to use for EFI modules')
 option('efi-libdir', type : 'string',
        description : 'path to the EFI lib directory')
 option('efi-includedir', type : 'string', value : '/usr/include/efi',
        description : 'path to the EFI header directory')
-option('tpm-pcrindex', type : 'integer', value : 8,
-       description : 'TPM PCR register number to use')
-option('sbat-distro', type : 'string',
+option('sbat-distro', type : 'string', value : 'auto',
        description : 'SBAT distribution ID, e.g. fedora, or auto for autodetection')
 option('sbat-distro-generation', type : 'integer', value : 1,
        description : 'SBAT distribution generation')
@@ -422,6 +460,14 @@
        description : 'SBAT distribution package version, e.g. 248-7.fc34')
 option('sbat-distro-url', type : 'string',
        description : 'SBAT distribution URL, e.g. https://src.fedoraproject.org/rpms/systemd')
+option('efi-color-normal', type : 'string', value : 'lightgray,black',
+       description : 'general boot loader color in "foreground,background" form, see constants from eficon.h')
+option('efi-color-entry', type : 'string', value : 'lightgray,black',
+       description : 'boot loader color for entries')
+option('efi-color-highlight', type : 'string', value : 'black,lightgray',
+       description : 'boot loader color for selected entries')
+option('efi-color-edit', type : 'string', value : 'black,lightgray',
+       description : 'boot loader color for option line edit')
 
 option('bashcompletiondir', type : 'string',
        description : 'directory for bash completion scripts ["no" disables]')
@@ -430,12 +476,14 @@
 
 option('tests', type : 'combo', choices : ['true', 'unsafe', 'false'],
        description : 'enable extra tests with =unsafe')
-option('slow-tests', type : 'boolean', value : 'false',
+option('slow-tests', type : 'boolean', value : false,
        description : 'run the slow tests by default')
-option('fuzz-tests', type : 'boolean', value : 'false',
+option('fuzz-tests', type : 'boolean', value : false,
        description : 'run the fuzzer regression tests by default (with sanitizers)')
-option('install-tests', type : 'boolean', value : 'false',
+option('install-tests', type : 'boolean', value : false,
        description : 'install test executables')
+option('log-message-verification', type : 'combo', choices : ['auto', 'true', 'false'],
+       description : 'do fake printf() calls to verify format strings')
 
 option('ok-color', type : 'combo',
        choices : ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan',
@@ -444,17 +492,26 @@
                   'highlight-cyan', 'highlight-white'],
        value : 'green',
        description: 'color of the "OK" status message')
-option('fexecve', type : 'boolean', value : 'false',
+option('urlify', type : 'boolean', value : true,
+       description : 'enable pager Hyperlink ANSI sequence support')
+option('fexecve', type : 'boolean', value : false,
        description : 'use fexecve() to spawn children')
 
-option('oss-fuzz', type : 'boolean', value : 'false',
+option('oss-fuzz', type : 'boolean', value : false,
        description : 'build against oss-fuzz')
-option('llvm-fuzz', type : 'boolean', value : 'false',
+option('llvm-fuzz', type : 'boolean', value : false,
        description : 'build against LLVM libFuzzer')
-option('kernel-install', type: 'boolean', value: 'true',
+option('kernel-install', type: 'boolean', value: true,
        description : 'install kernel-install and associated files')
-option('analyze', type: 'boolean', value: 'true',
+option('ukify', type : 'combo', choices : ['auto', 'true', 'false'],
+       description : 'install ukify')
+option('analyze', type: 'boolean', value: true,
        description : 'install systemd-analyze')
 
+option('bpf-compiler', type : 'combo', choices : ['clang', 'gcc'],
+    description: 'compiler used to build BPF programs, note: gcc is experimental')
 option('bpf-framework', type : 'combo', choices : ['auto', 'true', 'false'],
     description: 'build BPF programs from source code in restricted C')
+
+option('skip-deps', type : 'boolean', value : false,
+       description : 'skip optional dependencies')
diff --git a/mkosi.build b/mkosi.build
index 201b188..b9ee0f1 100755
--- a/mkosi.build
+++ b/mkosi.build
@@ -1,18 +1,12 @@
 #!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
 set -e
 
 # This is a build script for OS image generation using mkosi (https://github.com/systemd/mkosi).
 # Simply invoke "mkosi" in the project directory to build an OS image.
 
-# Reset the permissions of the tree. Since Meson keeps the permissions
-# all the way to the installed files, reset them to one of 0644 or 0755
-# so the files keep those permissions, otherwise details of what umask
-# was set at the time the git tree was cloned will leak all the way
-# through. Also set umask explicitly during the build.
-if ! mountpoint -q "$SRCDIR"; then
-        chmod -R u+w,go-w,a+rX .
-        umask 022
-fi
+ASAN_OPTIONS=strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1:disable_coredump=0:use_madv_dontdump=1
+UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1
 
 # On Fedora "ld" is (unfortunately — if you ask me) managed via
 # "alternatives". Since we'd like to support building images in environments
@@ -20,7 +14,7 @@
 # that /usr/bin/ld is a symlink that points to a non-existing file in
 # /etc/alternative/ in this mode. Let's work around this for now by manually
 # redirect "ld" to "ld.bfd", i.e. circumventing the /usr/bin/ld symlink.
-if [ ! -x /usr/bin/ld -a -x /usr/bin/ld.bfd ] ; then
+if [ ! -x /usr/bin/ld ] && [ -x /usr/bin/ld.bfd ]; then
         mkdir -p "$HOME"/bin
         ln -s /usr/bin/ld.bfd "$HOME"/bin/ld
         PATH="$HOME/bin:$PATH"
@@ -28,14 +22,18 @@
 
 # If mkosi.builddir/ exists mkosi will set $BUILDDIR to it, let's then use it
 # as out-of-tree build dir. Otherwise, let's make up our own builddir.
-[ -z "$BUILDDIR" ] && BUILDDIR=build
+[ -z "$BUILDDIR" ] && BUILDDIR="$PWD"/build
+
+# Let's make sure we're using stuff from the build directory first if available there.
+PATH="$BUILDDIR:$PATH"
+export PATH
 
 # Meson uses Python 3 and requires a locale with an UTF-8 character map.
 # Not running under UTF-8 makes the `ninja test` step break with a CodecError.
 # So let's ensure we're running under UTF-8.
 #
 # If our current locale already is UTF-8, then we don't need to do anything:
-if [ "$(locale charmap 2> /dev/null)" != "UTF-8" ] ; then
+if [ "$(locale charmap 2>/dev/null)" != "UTF-8" ] ; then
         # Try using C.UTF-8 locale, if available. This locale is not shipped
         # by upstream glibc, so it's not available in all distros.
         # (In particular, it's not available in Arch Linux.)
@@ -53,114 +51,259 @@
         fi
 fi
 
+# The bpftool script shipped by Ubuntu tries to find the actual program to run via querying `uname -r` and
+# using the current kernel version. This obviously doesn't work in containers. As a workaround, we override
+# the ubuntu script with a symlink to the first bpftool program we can find.
+for bpftool in /usr/lib/linux-tools/*/bpftool; do
+        [ -x "$bpftool" ] || continue
+        ln -sf "$bpftool" "$BUILDDIR"/bpftool
+        break
+done
+
+# CentOS Stream 8 includes bpftool 4.18.0 which is lower than what we need. However, they've backported the
+# specific feature we need ("gen skeleton") to this version, so we replace bpftool with a script that reports
+# version 5.6.0 to satisfy meson which makes bpf work on CentOS Stream 8 as well.
+if [ "$(grep '^ID=' /etc/os-release)" = "ID=\"centos\"" ] && [ "$(grep '^VERSION=' /etc/os-release)" = "VERSION=\"8\"" ]; then
+        cat >"$BUILDDIR"/bpftool <<EOF
+#!/bin/sh
+if [ "\$1" = --version ]; then
+        echo 5.6.0
+else
+        exec /usr/sbin/bpftool \$@
+fi
+EOF
+        chmod +x "$BUILDDIR"/bpftool
+fi
+
 if [ ! -f "$BUILDDIR"/build.ninja ] ; then
-        sysvinit_path=`realpath /etc/init.d`
+        sysvinit_path=$(realpath /etc/init.d)
 
-        init_path=`realpath /sbin/init 2>/dev/null`
+        init_path=$(realpath /sbin/init 2>/dev/null)
         if [ -z "$init_path" ] ; then
-            rootprefix=""
+                rootprefix=""
         else
-            rootprefix=${init_path%/lib/systemd/systemd}
-            rootprefix=/${rootprefix#/}
+                rootprefix=${init_path%/lib/systemd/systemd}
+                rootprefix=/${rootprefix#/}
         fi
 
-        nobody_user=`id -u -n 65534 2> /dev/null`
-        if [ "$nobody_user" != "" ] ; then
-                # Validate that we can translate forth and back
-                if [ "`id -u $nobody_user`" != 65534 ] ; then
-                        nobody_user=""
-                fi
-        fi
-        if [ "$nobody_user" = "" ] ; then
-                if id -u nobody 2> /dev/null ; then
-                        # The "nobody" user is defined already for something else, pick the Fedora name
-                        nobody_user=nfsnobody
-                else
-                        # The "nobody" user name is free, use it
-                        nobody_user=nobody
-                fi
+        # On debian-like systems the library directory is not /usr/lib64 but /usr/lib/<arch-triplet>/.
+        # It is important to use the right one especially for cryptsetup plugins, otherwise they will be
+        # installed in the wrong directory and not be found by cryptsetup. Assume native build.
+        if grep -q -e "ID=debian" -e "ID_LIKE=debian" /etc/os-release && command -v dpkg 2>/dev/null; then
+                LIBDIR="-Drootlibdir=/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
+                PAMDIR="-Dpamlibdir=/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/security"
         fi
 
-        nobody_group=`id -g -n 65534 2> /dev/null`
-        if [ "$nobody_group" != "" ] ; then
-                # Validate that we can translate forth and back
-                if [ "`id -g $nobody_group`" != 65534 ] ; then
-                        nobody_group=""
-                fi
-        fi
-        if [ "$nobody_group" = "" ] ; then
-                if id -u nobody 2> /dev/null ; then
-                        # The "nobody" group is defined already for something else, pick the Fedora name
-                        nobody_group=nfsnobody
-                else
-                        # The "nobody" group name is free, use it
-                        nobody_group=nobody
-                fi
-        fi
-
-        meson "$BUILDDIR" \
+        # Cannot quote $LIBDIR and $PAMDIR, because they may be empty, and meson will fail.
+        # shellcheck disable=SC2086
+        meson setup "$BUILDDIR" \
+                ${LIBDIR:-} \
+                ${PAMDIR:-} \
                 -D "sysvinit-path=$sysvinit_path" \
                 -D "rootprefix=$rootprefix" \
                 -D man=false \
-                -D "nobody-user=$nobody_user" \
-                -D "nobody-group=$nobody_group" \
                 -D translations=false \
-                -D version-tag="${VERSION_TAG}"
+                -D version-tag="${VERSION_TAG}" \
+                -D mode=developer \
+                -D b_sanitize="${SANITIZERS:-none}" \
+                -D install-tests=true \
+                -D tests=unsafe \
+                -D slow-tests=true \
+                -D utmp=true \
+                -D hibernate=true \
+                -D ldconfig=true \
+                -D resolve=true \
+                -D efi=true \
+                -D tpm=true \
+                -D environment-d=true \
+                -D binfmt=true \
+                -D repart=true \
+                -D sysupdate=true \
+                -D coredump=true \
+                -D pstore=true \
+                -D oomd=true \
+                -D logind=true \
+                -D hostnamed=true \
+                -D localed=true \
+                -D machined=true \
+                -D portabled=true \
+                -D sysext=true \
+                -D userdb=true \
+                -D homed=true \
+                -D networkd=true \
+                -D timedated=true \
+                -D timesyncd=true \
+                -D remote=true \
+                -D nss-myhostname=true \
+                -D nss-mymachines=true \
+                -D nss-resolve=true \
+                -D nss-systemd=true \
+                -D firstboot=true \
+                -D randomseed=true \
+                -D backlight=true \
+                -D vconsole=true \
+                -D quotacheck=true \
+                -D sysusers=true \
+                -D tmpfiles=true \
+                -D importd=true \
+                -D hwdb=true \
+                -D rfkill=true \
+                -D xdg-autostart=true \
+                -D translations=true \
+                -D polkit=true \
+                -D acl=true \
+                -D audit=true \
+                -D blkid=true \
+                -D fdisk=true \
+                -D kmod=true  \
+                -D pam=true \
+                -D pwquality=true \
+                -D microhttpd=true \
+                -D libcryptsetup=true \
+                -D libcurl=true \
+                -D idn=true \
+                -D libidn2=true \
+                -D qrencode=true \
+                -D gcrypt=true \
+                -D gnutls=true \
+                -D openssl=true \
+                -D cryptolib=openssl \
+                -D p11kit=true \
+                -D libfido2=true \
+                -D tpm2=true \
+                -D elfutils=true \
+                -D zstd=true \
+                -D xkbcommon=true \
+                -D pcre2=true \
+                -D glib=true \
+                -D dbus=true \
+                -D gnu-efi=true \
+                -D kernel-install=true \
+                -D analyze=true \
+                -D bpf-framework=true \
+                -D ukify=true
 fi
 
 cd "$BUILDDIR"
 ninja "$@"
 if [ "$WITH_TESTS" = 1 ] ; then
-        for id in 1 2 3; do
-                getent group $id > /dev/null || groupadd -g $id testgroup$id
-        done
+        if [ -n "$SANITIZERS" ]; then
+                export ASAN_OPTIONS="$ASAN_OPTIONS"
+                export UBSAN_OPTIONS="$UBSAN_OPTIONS"
+                TIMEOUT_MULTIPLIER=3
+        else
+                TIMEOUT_MULTIPLIER=1
+        fi
 
-        ninja test
+        meson test --print-errorlogs --timeout-multiplier=$TIMEOUT_MULTIPLIER
 fi
 cd "$SRCDIR"
 
-# Ubuntu Focal is stuck with meson 0.53.0.
-if [ "$(meson -v | cut -d . -f 2)" -gt 53 ] ; then
-        meson install -C "$BUILDDIR" --quiet --no-rebuild --only-changed
-else
-        meson install -C "$BUILDDIR" --no-rebuild --only-changed
-fi
+meson install -C "$BUILDDIR" --quiet --no-rebuild --only-changed
 
 mkdir -p "$DESTDIR"/etc
 
-cat > "$DESTDIR"/etc/issue <<EOF
+cat >"$DESTDIR"/etc/issue <<EOF
 \S (built from systemd tree)
 Kernel \r on an \m (\l)
 
 EOF
 
 if [ -n "$IMAGE_ID" ] ; then
-    mkdir -p "$DESTDIR"/usr/lib
-    sed -n \
-        -e '/^IMAGE_ID=/!p' \
-        -e '$aIMAGE_ID='$IMAGE_ID < /usr/lib/os-release > "$DESTDIR"/usr/lib/os-release
+        mkdir -p "$DESTDIR"/usr/lib
+        sed -n \
+                -e '/^IMAGE_ID=/!p' \
+                -e "\$aIMAGE_ID=$IMAGE_ID" <"/usr/lib/os-release" >"${DESTDIR}/usr/lib/os-release"
 
-    OSRELEASEFILE="$DESTDIR"/usr/lib/os-release
+        OSRELEASEFILE="$DESTDIR"/usr/lib/os-release
 else
-    OSRELEASEFILE=/usr/lib/os-release
+        OSRELEASEFILE=/usr/lib/os-release
 fi
 
 
 if [ -n "$IMAGE_VERSION" ] ; then
-    mkdir -p "$DESTDIR"/usr/lib
-    sed -n \
-        -e '/^IMAGE_VERSION=/!p' \
-        -e '$aIMAGE_VERSION='$IMAGE_VERSION < $OSRELEASEFILE > /tmp/os-release.tmp
+        mkdir -p "$DESTDIR"/usr/lib
+        sed -n \
+                -e '/^IMAGE_VERSION=/!p' \
+                -e "\$aIMAGE_VERSION=$IMAGE_VERSION" <$OSRELEASEFILE >"/tmp/os-release.tmp"
 
-    cat /tmp/os-release.tmp > "$DESTDIR"/usr/lib/os-release
-    rm /tmp/os-release.tmp
+        cat /tmp/os-release.tmp >"$DESTDIR"/usr/lib/os-release
+        rm /tmp/os-release.tmp
 fi
 
-# Manually update the boot loader from the one we just built
-mkdir -p "$DESTDIR"/boot/efi/EFI/systemd "$DESTDIR"/boot/efi/EFI/BOOT
-cp "$DESTDIR"/usr/lib/systemd/boot/efi/systemd-bootx64.efi "$DESTDIR"/boot/efi/EFI/systemd/systemd-bootx64.efi
-cp "$DESTDIR"/usr/lib/systemd/boot/efi/systemd-bootx64.efi "$DESTDIR"/boot/efi/EFI/BOOT/bootx64.efi
+# If $CI_BUILD is set, copy over the CI service which executes a service check
+# after boot and then shuts down the machine
+if [ -n "$CI_BUILD" ]; then
+        mkdir -p "$DESTDIR/usr/lib/systemd/system"
+        cp -v "$SRCDIR/test/mkosi-check-and-shutdown.service" "$DESTDIR/usr/lib/systemd/system/mkosi-check-and-shutdown.service"
+        cp -v "$SRCDIR/test/mkosi-check-and-shutdown.sh" "$DESTDIR/usr/lib/systemd/mkosi-check-and-shutdown.sh"
+        chmod +x "$DESTDIR/usr/lib/systemd/mkosi-check-and-shutdown.sh"
+fi
 
-mkdir -p "$DESTDIR"/efi/EFI/systemd "$DESTDIR"/efi/EFI/BOOT
-cp "$DESTDIR"/usr/lib/systemd/boot/efi/systemd-bootx64.efi "$DESTDIR"/efi/EFI/systemd/systemd-bootx64.efi
-cp "$DESTDIR"/usr/lib/systemd/boot/efi/systemd-bootx64.efi "$DESTDIR"/efi/EFI/BOOT/bootx64.efi
+if [ -n "$SANITIZERS" ]; then
+        LD_PRELOAD=$(ldd "$BUILDDIR"/systemd | grep libasan.so | awk '{print $3}')
+
+        mkdir -p "$DESTDIR/etc/systemd/system.conf.d"
+
+        cat >"$DESTDIR/etc/systemd/system.conf.d/10-asan.conf" <<EOF
+[Manager]
+ManagerEnvironment=ASAN_OPTIONS=$ASAN_OPTIONS\\
+                   UBSAN_OPTIONS=$UBSAN_OPTIONS\\
+                   LD_PRELOAD=$LD_PRELOAD
+DefaultEnvironment=ASAN_OPTIONS=$ASAN_OPTIONS\\
+                   UBSAN_OPTIONS=$UBSAN_OPTIONS\\
+                   LD_PRELOAD=$LD_PRELOAD
+EOF
+
+        # ASAN logs to stderr by default. However, journald's stderr is connected to /dev/null, so we lose
+        # all the ASAN logs. To rectify that, let's connect journald's stdout to the console so that any
+        # sanitizer failures appear directly on the user's console.
+        mkdir -p "$DESTDIR/etc/systemd/system/systemd-journald.service.d"
+
+        cat >"$DESTDIR/etc/systemd/system/systemd-journald.service.d/10-stdout-tty.conf" <<EOF
+[Service]
+StandardOutput=tty
+EOF
+
+        # Both systemd and util-linux's login call vhangup() on /dev/console which disconnects all users.
+        # This means systemd-journald can't log to /dev/console even if we configure `StandardOutput=tty`. As
+        # a workaround, we modify console-getty.service to disable systemd's vhangup() and disallow login
+        # from calling vhangup() so that journald's ASAN logs correctly end up in the console.
+
+        mkdir -p "$DESTDIR/etc/systemd/system/console-getty.service.d"
+
+        cat >"$DESTDIR/etc/systemd/system/console-getty.service.d/10-no-vhangup.conf" <<EOF
+[Service]
+TTYVHangup=no
+CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG
+EOF
+fi
+
+# Make sure services aren't enabled by default on Debian/Ubuntu.
+mkdir -p "$DESTDIR/etc/systemd/system-preset"
+echo "disable *" >"$DESTDIR/etc/systemd/system-preset/99-mkosi.preset"
+
+if [ -d mkosi.kernel/ ]; then
+        cd "$SRCDIR/mkosi.kernel"
+        mkdir -p "$BUILDDIR/mkosi.kernel"
+
+        # Ensure fast incremental builds by fixating these values which usually change for each build.
+        export KBUILD_BUILD_TIMESTAMP="Fri Jun  5 15:58:00 CEST 2015"
+        export KBUILD_BUILD_HOST="mkosi"
+
+        scripts/kconfig/merge_config.sh -O "$BUILDDIR/mkosi.kernel" \
+                ../mkosi.kernel.config \
+                tools/testing/selftests/bpf/config.x86_64 \
+                tools/testing/selftests/bpf/config
+
+        make O="$BUILDDIR/mkosi.kernel" -j "$(nproc)"
+
+        KERNEL_RELEASE=$(make O="$BUILDDIR"/mkosi.kernel -s kernelrelease)
+        mkdir -p "$DESTDIR/usr/lib/modules/$KERNEL_RELEASE"
+        make O="$BUILDDIR/mkosi.kernel" INSTALL_MOD_PATH="$DESTDIR/usr" modules_install
+        make O="$BUILDDIR/mkosi.kernel" INSTALL_PATH="$DESTDIR/usr/lib/modules/$KERNEL_RELEASE" install
+        mkdir -p "$DESTDIR/usr/lib/kernel/selftests"
+        make -C tools/testing/selftests -j "$(nproc)" O="$BUILDDIR/mkosi.kernel" KSFT_INSTALL_PATH="$DESTDIR/usr/lib/kernel/selftests" SKIP_TARGETS="" install
+
+        ln -sf /usr/lib/kernel/selftests/bpf/bpftool "$DESTDIR/usr/bin/bpftool"
+fi
diff --git a/mkosi.conf.d/10-systemd.conf b/mkosi.conf.d/10-systemd.conf
new file mode 100644
index 0000000..57db7ec
--- /dev/null
+++ b/mkosi.conf.d/10-systemd.conf
@@ -0,0 +1,74 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# This is a settings file for OS image generation using mkosi (https://github.com/systemd/mkosi).
+
+[Output]
+Bootable=yes
+# Prevent ASAN warnings when building the image
+Environment=ASAN_OPTIONS=verify_asan_link_order=false
+OutputDirectory=mkosi.output
+
+[Content]
+BuildDirectory=mkosi.builddir
+Cache=mkosi.cache
+Packages=
+        acl
+        bash-completion
+        coreutils
+        diffutils
+        dnsmasq
+        dosfstools
+        e2fsprogs
+        findutils
+        gcc # For sanitizer libraries
+        gdb
+        grep
+        kbd
+        kexec-tools
+        kmod
+        less
+        mtools
+        nano
+        nftables
+        openssl
+        python3
+        qrencode
+        sed
+        strace
+        tree
+        util-linux
+        valgrind
+        wireguard-tools
+        xfsprogs
+        zsh
+
+BuildPackages=
+        bc
+        binutils
+        bison
+        clang
+        flex
+        gcc
+        gettext
+        git
+        gnu-efi
+        gperf
+        lld
+        llvm
+        make
+        meson
+        pkgconf
+        rpm
+        rsync
+        tar
+        zstd
+
+[Host]
+QemuHeadless=yes
+Netdev=yes
+QemuMem=2G
+ExtraSearchPaths=build/
+
+[Validation]
+Password=
+Autologin=yes
diff --git a/mkosi.conf.d/arch/10-arch.conf b/mkosi.conf.d/arch/10-arch.conf
new file mode 100644
index 0000000..ee51396
--- /dev/null
+++ b/mkosi.conf.d/arch/10-arch.conf
@@ -0,0 +1,48 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# Copyright © 2016 Zeal Jagannatha
+
+# This is a settings file for OS image generation using mkosi (https://github.com/systemd/mkosi).
+# Symlink this file to mkosi.default in the project root directory and invoke "mkosi" to build an OS image.
+
+[Distribution]
+Distribution=arch
+
+[Content]
+Packages=
+        alsa-lib
+        btrfs-progs
+        compsize
+        dhcp
+        f2fs-tools
+        fuse2
+        gnutls
+        iproute
+        libbpf
+        libcap-ng
+        libfido2
+        libmicrohttpd
+        libmnl
+        libpwquality
+        libxkbcommon
+        man-db
+        numactl
+        openbsd-netcat
+        polkit
+        popt
+        python-pefile
+        quota-tools
+        tpm2-tss
+        vim
+
+BuildPackages=
+        bpf
+        docbook-xsl
+        libxslt
+        linux-api-headers
+        pahole
+        perl
+        python-docutils
+        python-jinja
+        python-lxml
+        python-pytest
diff --git a/mkosi.conf.d/centos/10-centos.conf b/mkosi.conf.d/centos/10-centos.conf
new file mode 100644
index 0000000..f3a47a9
--- /dev/null
+++ b/mkosi.conf.d/centos/10-centos.conf
@@ -0,0 +1,104 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# This is a settings file for OS image generation using mkosi (https://github.com/systemd/mkosi).
+# Symlink this file to mkosi.default in the project root directory and invoke "mkosi" to build an OS image.
+
+# We use python3*dist() throughout this file because we need to make sure the python3.9dis() packages are
+# installed on CentOS Stream 8. mkosi doesn't support release specific configuration yet so we use the globs
+# to get the necessary packages on both CentOS Stream 8 and CentOS Stream 9.
+
+[Distribution]
+Distribution=centos
+Repositories=epel
+RepositoryDirectory=mkosi.conf.d/centos/mkosi.reposdir
+
+[Content]
+Packages=
+        alsa-lib
+        audit
+        cryptsetup
+        dhcp-server
+        fuse
+        glib2
+        glibc-minimal-langpack
+        glibc.i686
+        gnutls
+        iproute
+        iproute-tc
+        kernel-modules-extra
+        libasan
+        libbpf
+        libcap-ng
+        libfido2
+        libmicrohttpd
+        libmnl
+        libubsan
+        libxcrypt
+        libxkbcommon
+        netcat
+        numactl-libs
+        p11-kit
+        pam
+        polkit
+        popt
+        procps-ng
+        python3[.][9]dist(pefile)
+        python3[.][9]dist(pluggy) # python39-pluggy is a pytest dependency that's not installed for some reason.
+        python3[.][9]dist(pytest)
+        python39
+        quota
+        tpm2-tss
+        vim-common
+
+BuildPackages=
+        bpftool
+        docbook-xsl
+        dwarves
+        glibc-devel.i686
+        glibc-static
+        glibc-static.i686
+        gnu-efi-devel
+        libgcrypt-devel # CentOS Stream 8 libgcrypt-devel doesn't ship a pkg-config file.
+        libxslt
+        pam-devel
+        perl-interpreter
+        pkgconfig(alsa)
+        pkgconfig(audit)
+        pkgconfig(blkid)
+        pkgconfig(bzip2)
+        pkgconfig(dbus-1)
+        pkgconfig(fdisk)
+        pkgconfig(fuse)
+        pkgconfig(glib-2.0)
+        pkgconfig(gnutls)
+        pkgconfig(libacl)
+        pkgconfig(libbpf)
+        pkgconfig(libcap-ng)
+        pkgconfig(libcap)
+        pkgconfig(libcryptsetup)
+        pkgconfig(libcurl)
+        pkgconfig(libdw)
+        pkgconfig(libfido2)
+        pkgconfig(libidn2)
+        pkgconfig(libkmod)
+        pkgconfig(libmicrohttpd)
+        pkgconfig(libmnl)
+        pkgconfig(libpcre2-8)
+        pkgconfig(libqrencode)
+        pkgconfig(libseccomp)
+        pkgconfig(libselinux)
+        pkgconfig(libzstd)
+        pkgconfig(mount)
+        pkgconfig(numa)
+        pkgconfig(openssl)
+        pkgconfig(p11-kit-1)
+        pkgconfig(popt)
+        pkgconfig(pwquality)
+        pkgconfig(tss2-esys)
+        pkgconfig(tss2-mu)
+        pkgconfig(tss2-rc)
+        pkgconfig(valgrind)
+        pkgconfig(xkbcommon)
+        python3*dist(docutils)
+        python3*dist(jinja2)
+        python3*dist(lxml)
diff --git a/mkosi.conf.d/centos/mkosi.reposdir/powertools.repo b/mkosi.conf.d/centos/mkosi.reposdir/powertools.repo
new file mode 100644
index 0000000..5c7149a
--- /dev/null
+++ b/mkosi.conf.d/centos/mkosi.reposdir/powertools.repo
@@ -0,0 +1,8 @@
+[powertools-hotfixes]
+name=powertools-hotfixes
+mirrorlist=http://mirrorlist.centos.org/?release=$stream&arch=$basearch&repo=PowerTools
+gpgkey=https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official
+gpgcheck=1
+enabled=1
+module_hotfixes=1
+skip_if_unavailable=1
diff --git a/mkosi.conf.d/debian/10-debian.conf b/mkosi.conf.d/debian/10-debian.conf
new file mode 100644
index 0000000..905378a
--- /dev/null
+++ b/mkosi.conf.d/debian/10-debian.conf
@@ -0,0 +1,93 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# This is a settings file for OS image generation using mkosi (https://github.com/systemd/mkosi).
+# Symlink this file to mkosi.default in the project root directory and invoke "mkosi" to build an OS image.
+
+[Distribution]
+Distribution=debian
+Release=testing
+
+[Content]
+Packages=
+        btrfs-progs
+        cryptsetup-bin
+        f2fs-tools
+        fdisk
+        fuse
+        gcc # Provides libasan/libubsan
+        iproute2
+        isc-dhcp-server
+        libasound2
+        libbpf1
+        libc6-i386
+        libcap-ng0
+        libfido2-1
+        libglib2.0-0
+        libgnutls30
+        libidn2-0
+        libmicrohttpd12
+        libmnl0
+        libnuma1
+        libp11-kit0
+        libpam0g
+        libpopt0
+        libpwquality1
+        libqrencode4
+        libtss2-dev # Use the -dev package to avoid churn in updating version numbers
+        netcat-openbsd
+        policykit-1
+        procps
+        python3-pefile
+        quota
+        xxd
+
+BuildPackages=
+        bpftool
+        docbook-xsl
+        dpkg-dev
+        g++
+        gcc-multilib
+        libacl1-dev
+        libasound-dev
+        libaudit-dev
+        libblkid-dev
+        libbpf-dev
+        libbz2-dev
+        libc6-dev
+        libc6-dev-i386
+        libcap-dev
+        libcap-ng-dev
+        libcryptsetup-dev
+        libcurl4-openssl-dev
+        libdbus-1-dev
+        libdw-dev
+        libfdisk-dev
+        libfido2-dev
+        libfuse-dev
+        libgcrypt20-dev
+        libglib2.0-dev
+        libgnutls28-dev
+        libidn2-dev
+        libiptc-dev
+        libkmod-dev
+        libmicrohttpd-dev
+        libmnl-dev
+        libmount-dev
+        libnuma-dev
+        libp11-kit-dev
+        libpam0g-dev
+        libpopt-dev
+        libpwquality-dev
+        libqrencode-dev
+        libseccomp-dev
+        libsmartcols-dev
+        libssl-dev
+        libxen-dev
+        libxkbcommon-dev
+        libzstd-dev
+        pahole
+        python3-docutils
+        python3-jinja2
+        python3-lxml
+        python3-pytest
+        xsltproc
diff --git a/mkosi.conf.d/fedora/10-fedora.conf b/mkosi.conf.d/fedora/10-fedora.conf
new file mode 100644
index 0000000..5d4959b
--- /dev/null
+++ b/mkosi.conf.d/fedora/10-fedora.conf
@@ -0,0 +1,94 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# This is a settings file for OS image generation using mkosi (https://github.com/systemd/mkosi).
+# Symlink this file to mkosi.default in the project root directory and invoke "mkosi" to build an OS image.
+
+[Distribution]
+Distribution=fedora
+Release=37
+
+[Content]
+Packages=
+        alsa-lib
+        btrfs-progs
+        compsize
+        cryptsetup
+        dhcp-server
+        f2fs-tools
+        fuse
+        glib2
+        glibc-minimal-langpack
+        gnutls
+        iproute
+        iproute-tc
+        libasan
+        libbpf
+        libcap-ng
+        libfido2
+        libgcrypt
+        libmicrohttpd
+        libmnl
+        libubsan
+        libxcrypt
+        libxkbcommon
+        netcat
+        numactl-libs
+        pam
+        polkit
+        popt
+        procps-ng
+        python3dist(pefile)
+        quota
+        tpm2-tss
+        vim-common
+
+BuildPackages=
+        bpftool
+        docbook-xsl
+        dwarves
+        glibc-static
+        gnu-efi-devel
+        libcap-static
+        pam-devel
+        pkgconfig # pkgconf shim to provide /usr/bin/pkg-config
+        pkgconfig(alsa)
+        pkgconfig(audit)
+        pkgconfig(blkid)
+        pkgconfig(dbus-1)
+        pkgconfig(fdisk)
+        pkgconfig(fuse)
+        pkgconfig(glib-2.0)
+        pkgconfig(libacl)
+        pkgconfig(libbpf)
+        pkgconfig(libcap-ng)
+        pkgconfig(libcap)
+        pkgconfig(libcryptsetup)
+        pkgconfig(libcurl)
+        pkgconfig(libdw)
+        pkgconfig(libfido2)
+        pkgconfig(libgcrypt)
+        pkgconfig(libidn2)
+        pkgconfig(libkmod)
+        pkgconfig(libmicrohttpd)
+        pkgconfig(libmnl)
+        pkgconfig(libpcre2-8)
+        pkgconfig(libqrencode)
+        pkgconfig(libseccomp)
+        pkgconfig(libselinux)
+        pkgconfig(libzstd)
+        pkgconfig(mount)
+        pkgconfig(numa)
+        pkgconfig(openssl)
+        pkgconfig(p11-kit-1)
+        pkgconfig(popt)
+        pkgconfig(pwquality)
+        pkgconfig(tss2-esys)
+        pkgconfig(tss2-mu)
+        pkgconfig(tss2-rc)
+        pkgconfig(valgrind)
+        pkgconfig(xencontrol)
+        pkgconfig(xkbcommon)
+        python3dist(docutils)
+        python3dist(jinja2)
+        python3dist(lxml)
+        python3dist(pytest)
diff --git a/mkosi.conf.d/opensuse/10-opensuse.conf b/mkosi.conf.d/opensuse/10-opensuse.conf
new file mode 100644
index 0000000..6034b8a
--- /dev/null
+++ b/mkosi.conf.d/opensuse/10-opensuse.conf
@@ -0,0 +1,107 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# This is a settings file for OS image generation using mkosi (https://github.com/systemd/mkosi).
+# Symlink this file to mkosi.default in the project root directory and invoke "mkosi" to build an OS image.
+
+[Distribution]
+Distribution=opensuse
+Release=tumbleweed
+
+[Content]
+Packages=
+        btrfs-progs
+        dbus-1
+        f2fs-tools
+        fuse
+        gcc # Provides libasan/libubsan
+        glibc-32bit
+        glibc-locale-base
+        libasound2
+        libbpf1
+        libcap-ng0
+        libcrypt1
+        libcryptsetup12
+        libdw1
+        libelf1
+        libfido2
+        libgcrypt20
+        libglib-2_0-0
+        libkmod2
+        liblz4-1
+        libmnl0
+        libmount1
+        libnuma1
+        libp11-kit0
+        libpopt0
+        libqrencode4
+        libseccomp2
+        libxkbcommon0
+        pam
+        python3-pefile
+        tpm2-0-tss
+        vim
+
+BuildPackages=
+        alsa-devel
+        audit-devel
+        bpftool
+        dbus-1-devel
+        docbook-xsl-stylesheets
+        dwarves
+        fdupes
+        fuse-devel
+        gcc-32bit
+        gcc-c++
+        glib2-devel
+        glibc-devel-32bit
+        glibc-devel-static-32bit
+        glibc-locale
+        glibc-static
+        intltool
+        libacl-devel
+        libapparmor-devel
+        libblkid-devel
+        libbpf-devel
+        libbz2-devel
+        libcap-devel
+        libcap-ng-devel
+        libcryptsetup-devel
+        libcurl-devel
+        libdw-devel
+        libelf-devel
+        libfdisk-devel
+        libfido2-devel
+        libgcrypt-devel
+        libgnutls-devel
+        libkmod-devel
+        liblz4-devel
+        libmicrohttpd-devel
+        libmnl-devel
+        libmount-devel
+        libnuma-devel
+        libpwquality-devel
+        libseccomp-devel
+        libselinux-devel
+        libxkbcommon-devel
+        libxslt-tools
+        openssl-devel
+        pam-devel
+        pciutils-devel
+        pcre-devel
+        popt-devel
+        python3-docutils
+        python3-Jinja2
+        python3-lxml
+        python3-pytest
+        qrencode-devel
+        shadow
+        system-group-obsolete
+        system-user-bin
+        system-user-daemon
+        system-user-nobody
+        system-user-root
+        systemd-sysvinit
+        timezone
+        tpm2-0-tss-devel
+        xen-devel
+        zlib-devel
diff --git a/mkosi.conf.d/ubuntu/10-ubuntu.conf b/mkosi.conf.d/ubuntu/10-ubuntu.conf
new file mode 100644
index 0000000..647a718
--- /dev/null
+++ b/mkosi.conf.d/ubuntu/10-ubuntu.conf
@@ -0,0 +1,94 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# This is a settings file for OS image generation using mkosi (https://github.com/systemd/mkosi).
+# Symlink this file to mkosi.default in the project root directory and invoke "mkosi" to build an OS image.
+
+[Distribution]
+Distribution=ubuntu
+Release=jammy
+Repositories=main,universe
+
+[Content]
+Packages=
+        btrfs-progs
+        cryptsetup-bin
+        f2fs-tools
+        fdisk
+        fuse
+        gcc # Provides libasan/libubsan
+        iproute2
+        isc-dhcp-server
+        libasound2
+        libbpf0
+        libc6-i386
+        libcap-ng0
+        libfdisk1
+        libfido2-1
+        libglib2.0-0
+        libidn2-0
+        libmicrohttpd12
+        libmnl0
+        libnuma1
+        libp11-kit0
+        libpopt0
+        libpwquality1
+        libqrencode4
+        libtss2-dev # Use the -dev package to avoid churn in updating version numbers
+        linux-tools-common
+        linux-tools-generic
+        netcat-openbsd
+        policykit-1
+        procps
+        python3-pefile
+        quota
+        xxd
+
+BuildPackages=
+        docbook-xsl
+        dpkg-dev
+        g++
+        gcc-multilib
+        libacl1-dev
+        libasound-dev
+        libaudit-dev
+        libblkid-dev
+        libbpf-dev
+        libbz2-dev
+        libc6-dev
+        libc6-dev-i386
+        libcap-dev
+        libcap-ng-dev
+        libcryptsetup-dev
+        libcurl4-openssl-dev
+        libdbus-1-dev
+        libdw-dev
+        libfdisk-dev
+        libfido2-dev
+        libfuse-dev
+        libgcrypt20-dev
+        libglib2.0-dev
+        libgnutls28-dev
+        libidn2-dev
+        libiptc-dev
+        libkmod-dev
+        libmicrohttpd-dev
+        libmnl-dev
+        libmount-dev
+        libnuma-dev
+        libp11-kit-dev
+        libpam0g-dev
+        libpopt-dev
+        libpwquality-dev
+        libqrencode-dev
+        libseccomp-dev
+        libsmartcols-dev
+        libssl-dev
+        libxen-dev
+        libxkbcommon-dev
+        libzstd-dev
+        pahole
+        python3-docutils
+        python3-jinja2
+        python3-lxml
+        python3-pytest
+        xsltproc
diff --git a/mkosi.default.d/10-systemd.conf b/mkosi.default.d/10-systemd.conf
deleted file mode 100644
index 08a03f4..0000000
--- a/mkosi.default.d/10-systemd.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-
-# This is a settings file for OS image generation using mkosi (https://github.com/systemd/mkosi).
-
-[Output]
-Format=gpt_btrfs
-Bootable=yes
-HostonlyInitrd=yes
-
-[Packages]
-BuildDirectory=mkosi.builddir
-Cache=mkosi.cache
-InstallDirectory=mkosi.installdir
-SourceFileTransferFinal=copy-git-others
-
-[Host]
-QemuHeadless=yes
-NetworkVeth=yes
-
-[Validation]
-Password=
-Autologin=yes
diff --git a/mkosi.kernel.config b/mkosi.kernel.config
new file mode 100644
index 0000000..d12074d
--- /dev/null
+++ b/mkosi.kernel.config
@@ -0,0 +1,201 @@
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_ATA=y
+CONFIG_AUTOFS4_FS=y
+CONFIG_BINFMT_MISC=y
+CONFIG_BLK_CGROUP_IOCOST=y
+CONFIG_BLK_CGROUP_IOLATENCY=y
+CONFIG_BLK_CGROUP_IOPRIO=y
+CONFIG_BLK_CGROUP=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_BLK_DEV_SR=y
+CONFIG_BPF_EVENTS=y
+CONFIG_BPF_JIT=y
+CONFIG_BPF_LSM=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BTRFS_FS_POSIX_ACL=y
+CONFIG_BTRFS_FS=y
+CONFIG_CFG80211=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_CGROUP_BPF=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_HUGETLB=y
+CONFIG_CGROUP_MISC=y
+CONFIG_CGROUP_NET_PRIO=y
+CONFIG_CGROUP_PERF=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_RDMA=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CGROUPS=y
+CONFIG_CONNECTOR=y
+CONFIG_CPUSETS=y
+CONFIG_CRASH_DUMP=y
+CONFIG_DEBUG_INFO_BTF=y
+CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_DEVTMPFS=y
+CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING=y
+CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y
+CONFIG_DM_VERITY=y
+CONFIG_EFI_MIXED=y
+CONFIG_EFI_STUB=y
+CONFIG_EFI_ZBOOT=y
+CONFIG_EFI=y
+CONFIG_EXPERT=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_HIBERNATION=y
+CONFIG_HIDRAW=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HPET=y
+CONFIG_HUGETLBFS=y
+CONFIG_HW_RANDOM=y
+CONFIG_HYPERVISOR_GUEST=y
+CONFIG_IMA_APPRAISE=y
+CONFIG_IMA_ARCH_POLICY=y
+CONFIG_IMA=y
+CONFIG_INET=y
+CONFIG_INET6_AH=y
+CONFIG_INET6_ESP=y
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_MISC=y
+CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
+CONFIG_INTEGRITY_MACHINE_KEYRING=y
+CONFIG_INTEGRITY_PLATFORM_KEYRING=y
+CONFIG_INTEGRITY_SIGNATURE=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_IP6_NF_MANGLE=y
+CONFIG_IP6_NF_TARGET_REJECT=y
+CONFIG_ISO9660_FS=y
+CONFIG_KEXEC=y
+CONFIG_KPROBES=y
+CONFIG_LOAD_UEFI_KEYS=y
+CONFIG_MAC80211=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_MD=y
+CONFIG_MEMCG_KMEM=y
+CONFIG_MEMCG=y
+CONFIG_MICROCODE_AMD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULES=y
+CONFIG_MSDOS_FS=y
+CONFIG_NAMESPACES=y
+CONFIG_NET_9P_VIRTIO=y
+CONFIG_NET_9P=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_CLS_CGROUP=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_SCHED=y
+CONFIG_NET=y
+CONFIG_NETCONSOLE=y
+CONFIG_NETDEVICES=y
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_POLICY=y
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y
+CONFIG_NETFILTER_XT_TARGET_NFLOG=y
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
+CONFIG_NETFILTER=y
+CONFIG_NETLABEL=y
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_IRC=y
+CONFIG_NF_CONNTRACK_SIP=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NF_NAT=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_UTF8=y
+CONFIG_NO_HZ_FULL=y
+CONFIG_NUMA=y
+CONFIG_NVRAM=y
+CONFIG_PACKET=y
+CONFIG_PARAVIRT=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PERF_EVENTS=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_TRACE_RTC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_PRINTK_TIME=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROFILING=y
+CONFIG_PSI=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+CONFIG_QUOTA=y
+CONFIG_RFKILL=y
+CONFIG_RTC_CLASS=y
+CONFIG_SATA_AHCI=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_SPI_ATTRS=y
+CONFIG_SCSI_VIRTIO=y
+CONFIG_SCSI=y
+CONFIG_SECONDARY_TRUSTED_KEYRING=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RSA=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_NONSTANDARD=y
+CONFIG_SMP=y
+CONFIG_SWAP=y
+CONFIG_SYSTEM_BLACKLIST_KEYRING=y
+CONFIG_SYSVIPC=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_TMPFS_XATTR=y
+CONFIG_TMPFS=y
+CONFIG_UNIX=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_MON=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_UHCI_HCD=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB=y
+CONFIG_USER_NS=y
+CONFIG_VFAT_FS=y
+CONFIG_VIRTIO_BLK=y
+CONFIG_VIRTIO_CONSOLE=y
+CONFIG_VIRTIO_INPUT=y
+CONFIG_VIRTIO_NET=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_WATCHDOG=y
+CONFIG_X86_ACPI_CPUFREQ=y
+CONFIG_X86_CPUID=y
+CONFIG_X86_MSR=y
+CONFIG_XFRM_USER=y
+CONFIG_XFS_FS=y
+CONFIG_XFS_POSIX_ACL=y
diff --git a/mkosi.postinst b/mkosi.postinst
new file mode 100755
index 0000000..cebbf29
--- /dev/null
+++ b/mkosi.postinst
@@ -0,0 +1,34 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+if [ "$1" = "final" ]; then
+    if command -v bootctl >/dev/null && [ -d "/efi" ]; then
+        bootctl install
+    fi
+
+    cat >>/root/.gdbinit <<EOF
+set debuginfod enabled off
+set build-id-verbose 0
+EOF
+
+    if [ -n "$SANITIZERS" ]; then
+        # ASAN and syscall filters aren't compatible with each other.
+        find / -name '*.service' -type f -exec sed -i 's/^\(MemoryDeny\|SystemCall\)/# \1/' {} +
+
+        # `systemd-hwdb update` takes > 50s when built with sanitizers so let's not run it by default.
+        systemctl mask systemd-hwdb-update.service
+    fi
+
+    # Make sure dnsmasq.service doesn't start on boot on Debian/Ubuntu.
+    rm -f /etc/systemd/system/multi-user.target.wants/dnsmasq.service
+fi
+
+# Temporary workaround until https://github.com/openSUSE/suse-module-tools/commit/158643414ddb8d8208016a5f03a4484d58944d7a
+# gets into OpenSUSE repos
+if [ "$1" = "final" ] && grep -q openSUSE /etc/os-release; then
+    if [ -e "/usr/lib/systemd/system/boot-sysctl.service" ] && \
+       ! grep -F -q 'ConditionPathExists=/boot/sysctl.conf' "/usr/lib/systemd/system/boot-sysctl.service"; then
+        mkdir -p "/etc/systemd/system/boot-sysctl.service.d/"
+        printf '[Unit]\nConditionPathExists=/boot/sysctl.conf-%%v' >"/etc/systemd/system/boot-sysctl.service.d/99-temporary-workaround.conf"
+    fi
+fi
diff --git a/mkosi.prepare b/mkosi.prepare
new file mode 100755
index 0000000..7e00df0
--- /dev/null
+++ b/mkosi.prepare
@@ -0,0 +1,16 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -e
+
+if [ "$(grep '^ID=' /etc/os-release)" = "ID=\"centos\"" ] && [ "$(grep '^VERSION=' /etc/os-release)" = "VERSION=\"8\"" ]; then
+    alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1
+    alternatives --set python3 /usr/bin/python3.9
+fi
+
+# Make sure the necessary test users are available in the build image. We do this here because the build
+# script does not run as root.
+if [ "$1" = "build" ]; then
+    for id in 1 2 3; do
+        getent group $id >/dev/null || echo "g testgroup$id $id -" | systemd-sysusers -
+    done
+fi
diff --git a/network/80-6rd-tunnel.network b/network/80-6rd-tunnel.network
new file mode 100644
index 0000000..fb163e7
--- /dev/null
+++ b/network/80-6rd-tunnel.network
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: MIT-0
+#
+# This config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
+#
+# To make local modifications, one of the following methods may be used:
+# 1. add a drop-in file that extends this file by creating the
+#    /etc/systemd/network/80-6rd-tunnel.network.d/ directory and creating a
+#    new .conf file there.
+# 2. copy this file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
+
+# This network file matches 6rd-* SIT devices which is automatically created by
+# systemd-networkd when DHCPv4 6RD option is received.
+
+[Match]
+Name=6rd-*
+Type=sit
+
+[Network]
+DHCPPrefixDelegation=yes
diff --git a/network/80-container-host0.network b/network/80-container-host0.network
index a8e6834..3047667 100644
--- a/network/80-container-host0.network
+++ b/network/80-container-host0.network
@@ -1,11 +1,15 @@
-#  SPDX-License-Identifier: LGPL-2.1-or-later
+# SPDX-License-Identifier: MIT-0
 #
-#  This file is part of systemd.
+# This config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
 #
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
+# To make local modifications, one of the following methods may be used:
+# 1. add a drop-in file that extends this file by creating the
+#    /etc/systemd/network/80-container-host0.network.d/ directory and creating a
+#    new .conf file there.
+# 2. copy this file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
 
 # This network file matches the container-side of the virtual Ethernet link
 # created by systemd-nspawn's --network-veth switch. See systemd-nspawn(1) for
diff --git a/network/80-container-vb.network b/network/80-container-vb.network
new file mode 100644
index 0000000..3a99ab8
--- /dev/null
+++ b/network/80-container-vb.network
@@ -0,0 +1,26 @@
+# SPDX-License-Identifier: MIT-0
+#
+# This config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
+#
+# To make local modifications, one of the following methods may be used:
+# 1. add a drop-in file that extends this file by creating the
+#    /etc/systemd/network/80-container-vb.network.d/ directory and creating a
+#    new .conf file there.
+# 2. copy this file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
+
+# This network file matches the host-side of the virtual Ethernet link
+# created by systemd-nspawn's --network-veth switch with --network-bridge or
+# --network-zone switch. See systemd-nspawn(1) for details.
+
+[Match]
+Name=vb-*
+Driver=veth
+
+[Network]
+KeepMaster=yes
+LinkLocalAddressing=no
+LLDP=yes
+EmitLLDP=nearest-bridge
diff --git a/network/80-container-ve.network b/network/80-container-ve.network
index 0c233bc..d295d13 100644
--- a/network/80-container-ve.network
+++ b/network/80-container-ve.network
@@ -1,11 +1,15 @@
-#  SPDX-License-Identifier: LGPL-2.1-or-later
+# SPDX-License-Identifier: MIT-0
 #
-#  This file is part of systemd.
+# This config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
 #
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
+# To make local modifications, one of the following methods may be used:
+# 1. add a drop-in file that extends this file by creating the
+#    /etc/systemd/network/80-container-ve.network.d/ directory and creating a
+#    new .conf file there.
+# 2. copy this file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
 
 # This network file matches the host-side of the virtual Ethernet link
 # created by systemd-nspawn's --network-veth switch. See systemd-nspawn(1) for
diff --git a/network/80-container-vz.network b/network/80-container-vz.network
index 1c58f7d..7d902e7 100644
--- a/network/80-container-vz.network
+++ b/network/80-container-vz.network
@@ -1,11 +1,15 @@
-#  SPDX-License-Identifier: LGPL-2.1-or-later
+# SPDX-License-Identifier: MIT-0
 #
-#  This file is part of systemd.
+# This config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
 #
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
+# To make local modifications, one of the following methods may be used:
+# 1. add a drop-in file that extends this file by creating the
+#    /etc/systemd/network/80-container-vz.network.d/ directory and creating a
+#    new .conf file there.
+# 2. copy this file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
 
 # This network file matches the bridge interface created by systemd-nspawn's
 # --network-zone= switch. See systemd-nspawn(1) for details.
diff --git a/network/80-ethernet.network.example b/network/80-ethernet.network.example
new file mode 100644
index 0000000..ce82b25
--- /dev/null
+++ b/network/80-ethernet.network.example
@@ -0,0 +1,17 @@
+# SPDX-License-Identifier: MIT-0
+#
+# This example config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
+#
+# To use the file, one of the following methods may be used:
+# 1. add a symlink from /etc/systemd/network to the current location of this file,
+# 2. copy the file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
+
+# Enable DHCPv4 and DHCPv6 on all ethernet links
+[Match]
+Type=ether
+
+[Network]
+DHCP=yes
diff --git a/network/80-vm-vt.network b/network/80-vm-vt.network
index e8365df..7979871 100644
--- a/network/80-vm-vt.network
+++ b/network/80-vm-vt.network
@@ -1,11 +1,15 @@
-#  SPDX-License-Identifier: LGPL-2.1-or-later
+# SPDX-License-Identifier: MIT-0
 #
-#  This file is part of systemd.
+# This config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
 #
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
+# To make local modifications, one of the following methods may be used:
+# 1. add a drop-in file that extends this file by creating the
+#    /etc/systemd/network/80-vm-vt.network.d/ directory and creating a
+#    new .conf file there.
+# 2. copy this file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
 
 # This network file matches vt-* TUN/TAP devices and applies a similar
 # configuration as ve-* to provide NAT/DHCP to VMs.
diff --git a/network/80-wifi-adhoc.network b/network/80-wifi-adhoc.network
index 8ca59de..d7a341d 100644
--- a/network/80-wifi-adhoc.network
+++ b/network/80-wifi-adhoc.network
@@ -1,3 +1,16 @@
+# SPDX-License-Identifier: MIT-0
+#
+# This config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
+#
+# To make local modifications, one of the following methods may be used:
+# 1. add a drop-in file that extends this file by creating the
+#    /etc/systemd/network/80-wifi-adhoc.network.d/ directory and creating a
+#    new .conf file there.
+# 2. copy this file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
+
 [Match]
 Type=wlan
 WLANInterfaceType=ad-hoc
diff --git a/network/80-wifi-ap.network.example b/network/80-wifi-ap.network.example
index 8549387..6ea1024 100644
--- a/network/80-wifi-ap.network.example
+++ b/network/80-wifi-ap.network.example
@@ -1,3 +1,14 @@
+# SPDX-License-Identifier: MIT-0
+#
+# This example config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
+#
+# To use the file, one of the following methods may be used:
+# 1. add a symlink from /etc/systemd/network to the current location of this file,
+# 2. copy the file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
+
 [Match]
 Type=wlan
 WLANInterfaceType=ap
diff --git a/network/80-wifi-station.network.example b/network/80-wifi-station.network.example
index 1fb28a1..160b4eb 100644
--- a/network/80-wifi-station.network.example
+++ b/network/80-wifi-station.network.example
@@ -1,3 +1,14 @@
+# SPDX-License-Identifier: MIT-0
+#
+# This example config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
+#
+# To use the file, one of the following methods may be used:
+# 1. add a symlink from /etc/systemd/network to the current location of this file,
+# 2. copy the file into /etc/systemd/network or one of the other paths checked
+#    by systemd-networkd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
+
 [Match]
 Type=wlan
 WLANInterfaceType=station
diff --git a/network/99-default.link b/network/99-default.link
index bca660a..429ac31 100644
--- a/network/99-default.link
+++ b/network/99-default.link
@@ -1,11 +1,15 @@
-#  SPDX-License-Identifier: LGPL-2.1-or-later
+# SPDX-License-Identifier: MIT-0
 #
-#  This file is part of systemd.
+# This config file is installed as part of systemd.
+# It may be freely copied and edited (following the MIT No Attribution license).
 #
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
+# To make local modifications, one of the following methods may be used:
+# 1. add a drop-in file that extends this file by creating the
+#    /etc/systemd/network/99-default.link.d/ directory and creating a
+#    new .conf file there.
+# 2. copy this file into /etc/systemd/network or one of the other paths checked
+#    by systemd-udevd and edit it there.
+# This file should not be edited in place, because it'll be overwritten on upgrades.
 
 [Match]
 OriginalName=*
diff --git a/network/meson.build b/network/meson.build
index b0e60f7..5e10c86 100644
--- a/network/meson.build
+++ b/network/meson.build
@@ -1,9 +1,12 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 if conf.get('ENABLE_NETWORKD') == 1
-        install_data('80-container-host0.network',
+        install_data('80-6rd-tunnel.network',
+                     '80-container-host0.network',
+                     '80-container-vb.network',
                      '80-container-ve.network',
                      '80-container-vz.network',
+                     '80-ethernet.network.example',
                      '80-vm-vt.network',
                      '80-wifi-adhoc.network',
                      '80-wifi-ap.network.example',
@@ -12,7 +15,7 @@
 
         if install_sysconfdir
                 meson.add_install_script('sh', '-c',
-                                         mkdir_p.format(join_paths(sysconfdir, 'systemd/network')))
+                                         mkdir_p.format(sysconfdir / 'systemd/network'))
         endif
 endif
 
diff --git a/po/LINGUAS b/po/LINGUAS
index b5b60ef..b317e23 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -7,6 +7,8 @@
 de
 el
 es
+et
+fi
 fr
 gl
 hr
@@ -14,12 +16,18 @@
 id
 it
 ja
+ka
+kab
 ko
 lt
+nl
+pa
 pl
+pt
 pt_BR
 ro
 ru
+si
 sk
 sr
 sv
@@ -27,7 +35,3 @@
 uk
 zh_CN
 zh_TW
-pa
-kab
-si
-nl
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 0346a19..e045852 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
 src/core/org.freedesktop.systemd1.policy.in
 src/home/org.freedesktop.home1.policy
 src/hostname/org.freedesktop.hostname1.policy
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 599445b..bef8f84 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,3 +1,7 @@
+src/basic/parse-util.c
+src/boot/efi/boot.c
+src/boot/efi/secure-boot.c
+src/boot/efi/stub.c
 src/core/dbus-automount.c
 src/core/dbus-device.c
 src/core/dbus-job.c
@@ -18,4 +22,5 @@
 src/timedate/timedated.c
 units/debug-shell.service.in
 units/systemd-journald.service.in
+units/systemd-timesyncd.service.in
 units/user@.service.in
diff --git a/po/be.po b/po/be.po
index f34c0f8..e6b8951 100644
--- a/po/be.po
+++ b/po/be.po
@@ -7,9 +7,8 @@
 # Zmicer Turok <nashtlumach@gmail.com>, 2020, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2021-01-10 18:36+0000\n"
 "Last-Translator: Zmicer Turok <nashtlumach@gmail.com>\n"
 "Language-Team: Belarusian <https://translate.fedoraproject.org/projects/"
@@ -158,6 +157,25 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Для атрымання UUID прадукту патрабуецца аўтэнтыфікацыя."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Для наладкі сістэмнага часу патрабуецца аўтэнтыфікацыя."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Наладзіць часавы пояс"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Для наладкі часавога пояса патрабуецца аўтэнтыфікацыя."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Імпартаваць вобраз віртуальнай машыны або кантэйнера"
@@ -924,7 +942,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Для перазапуску \"$(unit)\" патрабуецца аўтэнтыфікацыя."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -932,17 +950,17 @@
 "Для адпраўкі сігналу UNIX працэсам адзінкі \"$(unit)\" патрабуецца "
 "аўтэнтыфікацыя."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Для таго, каб скінуць стан \"failed\" у \"$(unit)\", патрабуецца "
 "аўтэнтыфікацыя."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Для змены ўласцівасцей \"$(unit)\" патрабуецца аўтэнтыфікацыя."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -950,7 +968,7 @@
 "Для выдалення файлаў і каталогаў, якія звязаныя з \"$(unit)\", патрабуецца "
 "аўтэнтыфікацыя."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/be__at__latin.po b/po/be__at__latin.po
index 2865488..71575fa 100644
--- a/po/be__at__latin.po
+++ b/po/be__at__latin.po
@@ -6,9 +6,8 @@
 # Viktar Vaŭčkievič <victorenator@gmail.com>, 2015, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2016-06-09 19:50+0300\n"
 "Last-Translator: Viktar Vaŭčkievič <victorenator@gmail.com>\n"
 "Language-Team: \n"
@@ -75,7 +74,6 @@
 
 #: src/home/org.freedesktop.home1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
 msgstr "Nieabchodna aŭtentyfikacyja dlia pieračytannia stanu systemd."
 
@@ -85,7 +83,6 @@
 
 #: src/home/org.freedesktop.home1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
 msgstr "Nieabchodna aŭtentyfikacyja dlia pieračytannia stanu systemd."
 
@@ -95,8 +92,6 @@
 
 #: src/home/org.freedesktop.home1.policy:34
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
@@ -109,7 +104,6 @@
 
 #: src/home/org.freedesktop.home1.policy:44
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia dalučennia prylad da pracoŭnych miescaŭ."
@@ -120,7 +114,6 @@
 
 #: src/home/org.freedesktop.home1.policy:54
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia ŭsieahuĺnaha paviedamliennia"
@@ -131,8 +124,6 @@
 
 #: src/home/org.freedesktop.home1.policy:64
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
@@ -175,10 +166,29 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
 #, fuzzy
-#| msgid "Authentication is required to reload '$(unit)'."
 msgid "Authentication is required to get product UUID."
 msgstr "Nieabchodna aŭtentyfikacyja dlia pieračytannia stanu '$(unit)'."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnaha času."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Ustaliavać sistemny časavy pojas"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr ""
+"Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnaha časavoha pojasu."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Impartavać vobraz VM abo kantejniera"
@@ -327,16 +337,12 @@
 
 #: src/login/org.freedesktop.login1.policy:117
 #, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
 "Dazvolić prahramam pieraškadžać sistemie apracoŭvać klavišu vykliučennia"
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
@@ -450,27 +456,21 @@
 
 #: src/login/org.freedesktop.login1.policy:235
 #, fuzzy
-#| msgid "Hibernate the system"
 msgid "Halt the system"
 msgstr "Hibiernavać sistemu"
 
 #: src/login/org.freedesktop.login1.policy:236
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to halt the system."
 msgstr "Nieabchodna aŭtentyfikacyja dlia hibiernacyi sistemy."
 
 #: src/login/org.freedesktop.login1.policy:246
 #, fuzzy
-#| msgid "Hibernate the system while other users are logged in"
 msgid "Halt the system while other users are logged in"
 msgstr "Hibiernavać sistemu pry prysutnasci inšych karystaĺnikaŭ"
 
 #: src/login/org.freedesktop.login1.policy:247
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while other users are "
-#| "logged in."
 msgid ""
 "Authentication is required to halt the system while other users are logged "
 "in."
@@ -480,15 +480,11 @@
 
 #: src/login/org.freedesktop.login1.policy:257
 #, fuzzy
-#| msgid "Hibernate the system while an application is inhibiting this"
 msgid "Halt the system while an application is inhibiting this"
 msgstr "Hibiernavać sistemu, kali prahramy pieraškadžajuć hetamu"
 
 #: src/login/org.freedesktop.login1.policy:258
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
@@ -586,14 +582,12 @@
 
 #: src/login/org.freedesktop.login1.policy:353
 #, fuzzy
-#| msgid "Authentication is required to set the system timezone."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnaha časavoha pojasu."
 
 #: src/login/org.freedesktop.login1.policy:363
 #, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
 msgstr "Dazvolić ukazannie prašyŭcy na zahruzku interfiejsu nalad"
 
@@ -611,9 +605,6 @@
 
 #: src/login/org.freedesktop.login1.policy:375
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
@@ -627,9 +618,6 @@
 
 #: src/login/org.freedesktop.login1.policy:386
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
@@ -652,7 +640,6 @@
 
 #: src/login/org.freedesktop.login1.policy:407
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to change the virtual terminal."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia imia vuzla."
 
@@ -739,7 +726,6 @@
 
 #: src/network/org.freedesktop.network1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnaha času."
 
@@ -751,7 +737,6 @@
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set DNS servers."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnaha času."
 
@@ -763,7 +748,6 @@
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
 #, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
 msgstr "Nieabchodna aŭtentyfikacyja dlia spyniennia '$(unit)'."
 
@@ -775,7 +759,6 @@
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia imia vuzla."
 
@@ -787,7 +770,6 @@
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
 msgstr "Nieabchodna aŭtentyfikacyja dlia hibiernacyi sistemy."
 
@@ -799,7 +781,6 @@
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
 #, fuzzy
-#| msgid "Authentication is required to log into the local host."
 msgid "Authentication is required to enable or disable multicast DNS."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭvachodu ŭ lakaĺny vuziel."
 
@@ -811,7 +792,6 @@
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable DNS over TLS."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia imia vuzla."
 
@@ -823,7 +803,6 @@
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
 msgstr "Nieabchodna aŭtentyfikacyja dlia hibiernacyi sistemy."
 
@@ -835,7 +814,6 @@
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnaj lakali."
 
@@ -845,7 +823,6 @@
 
 #: src/network/org.freedesktop.network1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnaha času."
 
@@ -855,7 +832,6 @@
 
 #: src/network/org.freedesktop.network1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
 msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnaha času."
 
@@ -865,7 +841,6 @@
 
 #: src/network/org.freedesktop.network1.policy:144
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia ŭsieahuĺnaha paviedamliennia"
@@ -876,7 +851,6 @@
 
 #: src/network/org.freedesktop.network1.policy:155
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia ŭsieahuĺnaha paviedamliennia"
@@ -887,7 +861,6 @@
 
 #: src/network/org.freedesktop.network1.policy:166
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
 msgstr "Nieabchodna aŭtentyfikacyja dlia pieračytannia stanu systemd."
 
@@ -897,7 +870,6 @@
 
 #: src/network/org.freedesktop.network1.policy:177
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
 msgstr "Nieabchodna aŭtentyfikacyja dlia pierazahruzki sistemy."
 
@@ -907,7 +879,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to import a VM or container image"
 msgid "Authentication is required to inspect a portable service image."
 msgstr "Nieabchodna aŭtentyfikacyja dlia impartu vobraza VM abo kantejniera"
 
@@ -917,7 +888,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr ""
@@ -929,7 +899,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:35
 #, fuzzy
-#| msgid "Authentication is required to download a VM or container image"
 msgid ""
 "Authentication is required to delete or modify a portable service image."
 msgstr "Nieabchodna aŭtentyfikacyja dlia spampoŭki vobraza VM abo kantejniera"
@@ -940,7 +909,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to register a DNS-SD service"
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia ŭsieahuĺnaha paviedamliennia"
@@ -951,7 +919,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:34
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to unregister a DNS-SD service"
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia ŭsieahuĺnaha paviedamliennia"
@@ -962,7 +929,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia sistemnych nalad klavijatury."
@@ -1024,39 +990,34 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Nieabchodna aŭtentyfikacyja dlia pierazapusku '$(unit)'."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 #, fuzzy
-#| msgid "Authentication is required to set properties on '$(unit)'."
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia ŭlascivasciej '$(unit)'."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia anuliavannia pamylkovaha stanu '$(unit)'."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia ŭlascivasciej '$(unit)'."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 "Nieabchodna aŭtentyfikacyja dlia anuliavannia pamylkovaha stanu '$(unit)'."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/bg.po b/po/bg.po
index 3ab13ff..e77b118 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -1,15 +1,15 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 #
 # Bulgarian translation of systemd po-file.
-# Copyright © 2016 Alexander Shopov <ash@kambanaria.org>
-# Alexander Shopov <ash@kambanaria.org>, 2016.
+# Copyright © 2016, 2022 Alexander Shopov <ash@kambanaria.org>
+# Alexander Shopov <ash@kambanaria.org>, 2016, 2022.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2016-05-14 13:28+0300\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-05-31 13:09+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@ludost.net>\n"
 "Language: bg\n"
@@ -70,73 +70,56 @@
 
 #: src/home/org.freedesktop.home1.policy:13
 msgid "Create a home area"
-msgstr ""
+msgstr "Създаване на място за потребител"
 
 #: src/home/org.freedesktop.home1.policy:14
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
-msgstr "За презареждане на състоянието на systemd е необходима идентификация."
+msgstr "За създаване на място за потребител е необходима идентификация."
 
 #: src/home/org.freedesktop.home1.policy:23
 msgid "Remove a home area"
-msgstr ""
+msgstr "Изтриване на място за потребител"
 
 #: src/home/org.freedesktop.home1.policy:24
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
-msgstr "За презареждане на състоянието на systemd е необходима идентификация."
+msgstr "За изтриване на място за потребител е необходима идентификация."
 
 #: src/home/org.freedesktop.home1.policy:33
 msgid "Check credentials of a home area"
-msgstr ""
+msgstr "Проверка на идентификация на място за потребител"
 
 #: src/home/org.freedesktop.home1.policy:34
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
-"За управление на работещите сесии, потребители и работни места е необходима "
+"За проверка на идентификация на място за потребител е необходима "
 "идентификация."
 
 #: src/home/org.freedesktop.home1.policy:43
 msgid "Update a home area"
-msgstr ""
+msgstr "Обновяване на място за потребител"
 
 #: src/home/org.freedesktop.home1.policy:44
-#, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
-msgstr ""
-"За позволяване на закачане на устройства към работните места е необходима "
-"идентификация."
+msgstr "За обновяване на място за потребител е необходима идентификация."
 
 #: src/home/org.freedesktop.home1.policy:53
 msgid "Resize a home area"
-msgstr ""
+msgstr "Преоразмеряване на място за потребител"
 
 #: src/home/org.freedesktop.home1.policy:54
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
-msgstr "За задаване на системно съобщение „wall“ е необходима идентификация."
+msgstr "За преоразмеряване на място за потребител е необходима идентификация."
 
 #: src/home/org.freedesktop.home1.policy:63
 msgid "Change password of a home area"
-msgstr ""
+msgstr "Промяна на парола на място за потребител"
 
 #: src/home/org.freedesktop.home1.policy:64
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
-"За управление на работещите сесии, потребители и работни места е необходима "
-"идентификация."
+"За промяна на парола на място за потребител е необходима идентификация."
 
 #: src/hostname/org.freedesktop.hostname1.policy:20
 msgid "Set hostname"
@@ -144,37 +127,54 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:21
 msgid "Authentication is required to set the local hostname."
-msgstr "За задаване на име на локалната машина е необходима идентификация."
+msgstr "За задаване на име на локална машина е необходима идентификация."
 
 #: src/hostname/org.freedesktop.hostname1.policy:30
 msgid "Set static hostname"
-msgstr "Задаване на статично име на машината"
+msgstr "Задаване на статично име на машина"
 
 #: src/hostname/org.freedesktop.hostname1.policy:31
 msgid ""
 "Authentication is required to set the statically configured local hostname, "
 "as well as the pretty hostname."
 msgstr ""
-"За задаване на статично име на локалната машина е необходима идентификация."
+"За задаване на статично име на локална машина е необходима идентификация."
 
 #: src/hostname/org.freedesktop.hostname1.policy:41
 msgid "Set machine information"
-msgstr "Задаване на информация за машината"
+msgstr "Задаване на информация за машина"
 
 #: src/hostname/org.freedesktop.hostname1.policy:42
 msgid "Authentication is required to set local machine information."
 msgstr ""
-"За задаване на информация за локалната машина е необходима идентификация."
+"За задаване на информация за локална машина е необходима идентификация."
 
 #: src/hostname/org.freedesktop.hostname1.policy:51
 msgid "Get product UUID"
-msgstr ""
+msgstr "UUID на продукт"
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
-#, fuzzy
-#| msgid "Authentication is required to reload '$(unit)'."
 msgid "Authentication is required to get product UUID."
-msgstr "За презареждане на „$(unit)“ е необходима идентификация."
+msgstr "За получаването на UUID на продукт е необходима идентификация."
+
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "За задаване на времето на системата е необходима идентификация."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Задаване на часовия пояс на системата"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "За задаване на часовия пояс на системата е необходима идентификация."
 
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
@@ -212,146 +212,139 @@
 
 #: src/locale/org.freedesktop.locale1.policy:23
 msgid "Authentication is required to set the system locale."
-msgstr "За задаване на локала на системата е необходима идентификация."
+msgstr "За задаване на локала на система е необходима идентификация."
 
 #: src/locale/org.freedesktop.locale1.policy:33
 msgid "Set system keyboard settings"
-msgstr "Задаване на настройките на клавиатурата"
+msgstr "Задаване на настройки на клавиатурата"
 
 #: src/locale/org.freedesktop.locale1.policy:34
 msgid "Authentication is required to set the system keyboard settings."
-msgstr "За задаване на настройките на клавиатурата е необходима идентификация."
+msgstr "За задаване на настройки на клавиатурата е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:22
 msgid "Allow applications to inhibit system shutdown"
-msgstr "Позволяване на програмите да предотвратяват спирането на системата"
+msgstr "Позволяване на програми да предотвратяват спирането на системата"
 
 #: src/login/org.freedesktop.login1.policy:23
 msgid ""
 "Authentication is required for an application to inhibit system shutdown."
 msgstr ""
-"За позволяване на програмите да предотвратяват спирането на системата е "
+"За позволяване на програми да предотвратяват спиране на системата е "
 "необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:33
 msgid "Allow applications to delay system shutdown"
-msgstr "Позволяване на програмите да забавят спирането на системата"
+msgstr "Позволяване на програми да забавят спиране на системата"
 
 #: src/login/org.freedesktop.login1.policy:34
 msgid "Authentication is required for an application to delay system shutdown."
 msgstr ""
-"За позволяване на програмите да забавят спирането на системата е необходима "
+"За позволяване на програми да забавят спиране на системата е необходима "
 "идентификация."
 
 #: src/login/org.freedesktop.login1.policy:44
 msgid "Allow applications to inhibit system sleep"
-msgstr "Позволяване на програмите да предотвратяват приспиването на системата"
+msgstr "Позволяване на програми да предотвратяват приспиване на системата"
 
 #: src/login/org.freedesktop.login1.policy:45
 msgid "Authentication is required for an application to inhibit system sleep."
 msgstr ""
-"За позволяване на програмите да предотвратяват приспиването на системата е "
+"За позволяване на програми да предотвратяват приспиване на системата е "
 "необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:55
 msgid "Allow applications to delay system sleep"
-msgstr "Позволяване на програмите да забавят приспиването на системата"
+msgstr "Позволяване на програми да забавят приспиване на системата"
 
 #: src/login/org.freedesktop.login1.policy:56
 msgid "Authentication is required for an application to delay system sleep."
 msgstr ""
-"За позволяване на програмите да забавят приспиването на системата е "
-"необходима идентификация."
+"За позволяване на програми да забавят приспиване на системата е необходима "
+"идентификация."
 
 #: src/login/org.freedesktop.login1.policy:65
 msgid "Allow applications to inhibit automatic system suspend"
 msgstr ""
-"Позволяване на програмите да предотвратяват автоматичното приспиване на "
-"системата"
+"Позволяване на програми да предотвратяват автоматично приспиване на системата"
 
 #: src/login/org.freedesktop.login1.policy:66
 msgid ""
 "Authentication is required for an application to inhibit automatic system "
 "suspend."
 msgstr ""
-"За позволяване на програмите да предотвратяват автоматичното приспиване на "
+"За позволяване на програми да предотвратяват автоматично приспиване на "
 "системата е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:75
 msgid "Allow applications to inhibit system handling of the power key"
 msgstr ""
-"Позволяване на програмите да предотвратяват реакцията на системата при "
-"натискане на клавиша за захранване"
+"Позволяване на програми да предотвратяват реакцията на система при натискане "
+"на клавиш за захранване"
 
 #: src/login/org.freedesktop.login1.policy:76
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the power key."
 msgstr ""
-"За позволяване на програмите да предотвратяват реакцията на системата при "
-"натискане на клавиша за захранване е необходима идентификация."
+"За позволяване на програми да предотвратяват реакцията на системата при "
+"натискане на клавиш за захранване е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:86
 msgid "Allow applications to inhibit system handling of the suspend key"
 msgstr ""
-"Позволяване на програмите да предотвратяват реакцията на системата при "
-"натискане на клавиша за приспиване"
+"Позволяване на програми да предотвратяват реакцията на системата при "
+"натискане на клавиш за приспиване"
 
 #: src/login/org.freedesktop.login1.policy:87
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the suspend key."
 msgstr ""
-"За позволяване на програмите да предотвратяват реакцията на системата при "
-"натискане на клавиша за приспиване е необходима идентификация."
+"За позволяване на програми да предотвратяват реакция на системата при "
+"натискане на клавиш за приспиване е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:97
 msgid "Allow applications to inhibit system handling of the hibernate key"
 msgstr ""
-"Позволяване на програмите да предотвратяват реакцията на системата при "
-"натискане на клавиша за дълбоко приспиване"
+"Позволяване на програми да предотвратяват реакция на системата при натискане "
+"на клавиш за дълбоко приспиване"
 
 #: src/login/org.freedesktop.login1.policy:98
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the hibernate key."
 msgstr ""
-"За позволяване на програмите да предотвратяват реакцията на системата при "
-"натискане на клавиша за дълбоко приспиване е необходима идентификация."
+"За позволяване на програми да предотвратяват реакция на системата при "
+"натискане на клавиш за дълбоко приспиване е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:107
 msgid "Allow applications to inhibit system handling of the lid switch"
 msgstr ""
-"Позволяване на програмите да предотвратяват реакцията на системата при "
-"затваряне на екрана"
+"Позволяване на програми да предотвратяват реакция на системата при затваряне "
+"на екран"
 
 #: src/login/org.freedesktop.login1.policy:108
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the lid switch."
 msgstr ""
-"За позволяване на програмите да предотвратяват реакцията на системата при "
-"затваряне на екрана е необходима идентификация."
+"За позволяване на програми да предотвратяват реакция на системата при "
+"затваряне на екран е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:117
-#, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
-"Позволяване на програмите да предотвратяват реакцията на системата при "
-"натискане на клавиша за захранване"
+"Позволяване на програми да предотвратяват реакция на системата при натискане "
+"на клавиш за рестартиране"
 
 #: src/login/org.freedesktop.login1.policy:118
-#, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
 msgstr ""
-"За позволяване на програмите да предотвратяват реакцията на системата при "
-"натискане на клавиша за захранване е необходима идентификация."
+"За позволяване на програми предотвратяват реакция на системата при натискане "
+"на клавиш за рестартиране е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:128
 msgid "Allow non-logged-in user to run programs"
@@ -389,12 +382,12 @@
 
 #: src/login/org.freedesktop.login1.policy:159
 msgid "Flush device to seat attachments"
-msgstr "Изчистване на връзките между устройствата и работните места"
+msgstr "Изчистване на връзките между устройства и работни места"
 
 #: src/login/org.freedesktop.login1.policy:160
 msgid "Authentication is required to reset how devices are attached to seats."
 msgstr ""
-"За изчистване на връзките между устройствата и работните места е необходима "
+"За изчистване на връзки между устройства и работни места е необходима "
 "идентификация."
 
 #: src/login/org.freedesktop.login1.policy:169
@@ -463,55 +456,36 @@
 "е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:235
-#, fuzzy
-#| msgid "Hibernate the system"
 msgid "Halt the system"
-msgstr "Дълбоко приспиване на системата"
+msgstr "Спиране на системата"
 
 #: src/login/org.freedesktop.login1.policy:236
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to halt the system."
-msgstr "За дълбоко приспиване на системата е необходима идентификация."
+msgstr "За спиране на системата е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:246
-#, fuzzy
-#| msgid "Hibernate the system while other users are logged in"
 msgid "Halt the system while other users are logged in"
-msgstr ""
-"Дълбоко приспиване на системата, дори когато има други вписани потребители"
+msgstr "Спиране на системата, дори когато има други вписани потребители"
 
 #: src/login/org.freedesktop.login1.policy:247
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while other users are "
-#| "logged in."
 msgid ""
 "Authentication is required to halt the system while other users are logged "
 "in."
 msgstr ""
-"За дълбоко приспиване на системата, дори когато има други вписани "
-"потребители, е необходима идентификация."
+"За спиране на системата, дори когато има други вписани потребители, е "
+"необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:257
-#, fuzzy
-#| msgid "Hibernate the system while an application is inhibiting this"
 msgid "Halt the system while an application is inhibiting this"
-msgstr ""
-"Дълбоко приспиване на системата, дори когато програма иска да предотврати "
-"това"
+msgstr "Спиране на системата, дори когато програма иска да предотврати това"
 
 #: src/login/org.freedesktop.login1.policy:258
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
 msgstr ""
-"За дълбоко приспиване на системата, дори когато програма иска да предотврати "
-"това, е необходима идентификация."
+"За спиране на системата, дори когато програма иска да предотврати това, е "
+"необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:268
 msgid "Suspend the system"
@@ -592,69 +566,58 @@
 
 #: src/login/org.freedesktop.login1.policy:342
 msgid "Lock or unlock active sessions"
-msgstr "Заключване или отключване на работещите сесии"
+msgstr "Заключване или отключване на работещи сесии"
 
 #: src/login/org.freedesktop.login1.policy:343
 msgid "Authentication is required to lock or unlock active sessions."
 msgstr ""
-"За заключване или отключване на работещите сесии е необходима идентификация."
+"За заключване или отключване на работещи сесии е необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:352
 msgid "Set the reboot \"reason\" in the kernel"
-msgstr ""
+msgstr "Задаване на причина за рестартиране (reason) в ядрото"
 
 #: src/login/org.freedesktop.login1.policy:353
-#, fuzzy
-#| msgid "Authentication is required to set the system timezone."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
-msgstr "За задаване на часовия пояс на системата е необходима идентификация."
+msgstr ""
+"За задаване на причина за рестартиране (reason) в ядрото е необходима "
+"идентификация."
 
 #: src/login/org.freedesktop.login1.policy:363
-#, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
-msgstr ""
-"Позволяване на заявки към фърмуера да стартира с интерфейса за управление"
+msgstr "Задаване на фърмуера да стартира с интерфейса за управление"
 
 #: src/login/org.freedesktop.login1.policy:364
 msgid ""
 "Authentication is required to indicate to the firmware to boot to setup "
 "interface."
 msgstr ""
-"За позволяване на заявки към фърмуера да стартира с интерфейса за управление "
-"е необходима идентификация."
+"За задаване на фърмуера да стартира с интерфейса за управление е необходима "
+"идентификация."
 
 #: src/login/org.freedesktop.login1.policy:374
 msgid "Indicate to the boot loader to boot to the boot loader menu"
-msgstr ""
+msgstr "Задаване на фърмуера да стартира в програмата за начално зареждане"
 
 #: src/login/org.freedesktop.login1.policy:375
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
 msgstr ""
-"За позволяване на заявки към фърмуера да стартира с интерфейса за управление "
-"е необходима идентификация."
+"За задаване на фърмуера да стартира в програмата за начално зареждане е "
+"необходима идентификация."
 
 #: src/login/org.freedesktop.login1.policy:385
 msgid "Indicate to the boot loader to boot a specific entry"
-msgstr ""
+msgstr "Задаване на фърмуера да стартира в определен вариант"
 
 #: src/login/org.freedesktop.login1.policy:386
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
 msgstr ""
-"За позволяване на заявки към фърмуера да стартира с интерфейса за управление "
-"е необходима идентификация."
+"За задаване на фърмуера да стартира в определен вариант е необходима "
+"идентификация."
 
 #: src/login/org.freedesktop.login1.policy:396
 msgid "Set a wall message"
@@ -666,13 +629,11 @@
 
 #: src/login/org.freedesktop.login1.policy:406
 msgid "Change Session"
-msgstr ""
+msgstr "Смяна на сесия"
 
 #: src/login/org.freedesktop.login1.policy:407
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to change the virtual terminal."
-msgstr "За задаване на име на локалната машина е необходима идентификация."
+msgstr "За смяна на виртуален терминал е необходима идентификация."
 
 #: src/machine/org.freedesktop.machine1.policy:22
 msgid "Log into a local container"
@@ -729,13 +690,13 @@
 
 #: src/machine/org.freedesktop.machine1.policy:84
 msgid "Manage local virtual machines and containers"
-msgstr "Управление на локалните виртуални машини и контейнери"
+msgstr "Управление на локални виртуални машини и контейнери"
 
 #: src/machine/org.freedesktop.machine1.policy:85
 msgid ""
 "Authentication is required to manage local virtual machines and containers."
 msgstr ""
-"За управление на локалните виртуални машини и контейнери е необходима "
+"За управление на локални виртуални машини и контейнери е необходима "
 "идентификация."
 
 #: src/machine/org.freedesktop.machine1.policy:95
@@ -752,237 +713,200 @@
 
 #: src/network/org.freedesktop.network1.policy:22
 msgid "Set NTP servers"
-msgstr ""
+msgstr "Задаване на сървъри за точно време (NTP)"
 
 #: src/network/org.freedesktop.network1.policy:23
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
-msgstr "За задаване на времето на системата е необходима идентификация."
+msgstr ""
+"За задаване на сървъри за точно време (NTP) е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:33
 #: src/resolve/org.freedesktop.resolve1.policy:44
 msgid "Set DNS servers"
-msgstr ""
+msgstr "Задаване на сървъри за имена (DNS)"
 
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set DNS servers."
-msgstr "За задаване на времето на системата е необходима идентификация."
+msgstr "За задаване на сървъри за имена (DNS) е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:44
 #: src/resolve/org.freedesktop.resolve1.policy:55
 msgid "Set domains"
-msgstr ""
+msgstr "Задаване на домейни"
 
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
-#, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
-msgstr "За спиране на „$(unit)“ е необходима идентификация."
+msgstr "За задаване на домейни е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:55
 #: src/resolve/org.freedesktop.resolve1.policy:66
 msgid "Set default route"
-msgstr ""
+msgstr "Задаване на стандартен маршрут"
 
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
-msgstr "За задаване на име на локалната машина е необходима идентификация."
+msgstr "За задаване на стандартен маршрут е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:66
 #: src/resolve/org.freedesktop.resolve1.policy:77
 msgid "Enable/disable LLMNR"
-msgstr ""
+msgstr "Откриване на имена в локалната мрежа (LLMNR)"
 
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
-msgstr "За дълбоко приспиване на системата е необходима идентификация."
+msgstr ""
+"За откриване на имена в локалната мрежа (LLMNR) е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:77
 #: src/resolve/org.freedesktop.resolve1.policy:88
 msgid "Enable/disable multicast DNS"
-msgstr ""
+msgstr "Огласяване по DNS"
 
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
-#, fuzzy
-#| msgid "Authentication is required to log into the local host."
 msgid "Authentication is required to enable or disable multicast DNS."
-msgstr "За вписване в локалната машина е необходима идентификация."
+msgstr "За огласяване по DNS е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:88
 #: src/resolve/org.freedesktop.resolve1.policy:99
 msgid "Enable/disable DNS over TLS"
-msgstr ""
+msgstr "DNS по TLS"
 
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable DNS over TLS."
-msgstr "За задаване на име на локалната машина е необходима идентификация."
+msgstr "За задаване DNS по TLS е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:99
 #: src/resolve/org.freedesktop.resolve1.policy:110
 msgid "Enable/disable DNSSEC"
-msgstr ""
+msgstr "DNSSEC"
 
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
-msgstr "За дълбоко приспиване на системата е необходима идентификация."
+msgstr "За задаване на DNSSEC е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:110
 #: src/resolve/org.freedesktop.resolve1.policy:121
 msgid "Set DNSSEC Negative Trust Anchors"
-msgstr ""
+msgstr "Изрично доверяване на домейни DNSSEC (Negative Trust Anchors)"
 
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
-msgstr "За задаване на локала на системата е необходима идентификация."
+msgstr ""
+"За изрично доверяване на домейни DNSSEC (Negative Trust Anchors) е "
+"необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:121
 msgid "Revert NTP settings"
-msgstr ""
+msgstr "Възстановяване на настройките за NTP"
 
 #: src/network/org.freedesktop.network1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
-msgstr "За задаване на времето на системата е необходима идентификация."
+msgstr "За възстановяване на настройките за NTP е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:132
 msgid "Revert DNS settings"
-msgstr ""
+msgstr "Възстановяване на настройките за DNS"
 
 #: src/network/org.freedesktop.network1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
-msgstr "За задаване на времето на системата е необходима идентификация."
+msgstr "За възстановяване на настройките за DNS е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:143
 msgid "DHCP server sends force renew message"
-msgstr ""
+msgstr "Съобщение за обновяване на DHCP"
 
 #: src/network/org.freedesktop.network1.policy:144
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
-msgstr "За задаване на системно съобщение „wall“ е необходима идентификация."
+msgstr "За съобщение за обновяване на DHCP е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:154
 msgid "Renew dynamic addresses"
-msgstr ""
+msgstr "Обновяване на динамични адреси"
 
 #: src/network/org.freedesktop.network1.policy:155
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
-msgstr "За задаване на системно съобщение „wall“ е необходима идентификация."
+msgstr "За обновяване на динамични адреси е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:165
 msgid "Reload network settings"
-msgstr ""
+msgstr "Презареждане на настройки на мрежата"
 
 #: src/network/org.freedesktop.network1.policy:166
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
-msgstr "За презареждане на състоянието на systemd е необходима идентификация."
+msgstr "За презареждане на настройки на мрежата е необходима идентификация."
 
 #: src/network/org.freedesktop.network1.policy:176
 msgid "Reconfigure network interface"
-msgstr ""
+msgstr "Настройване на мрежови интерфейси"
 
 #: src/network/org.freedesktop.network1.policy:177
-#, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
-msgstr "За рестартиране на системата е необходима идентификация."
+msgstr "За настройване на мрежови интерфейси е необходима идентификация."
 
 #: src/portable/org.freedesktop.portable1.policy:13
 msgid "Inspect a portable service image"
-msgstr ""
+msgstr "Преглед на преносимо изображение на система"
 
 #: src/portable/org.freedesktop.portable1.policy:14
-#, fuzzy
-#| msgid "Authentication is required to import a VM or container image"
 msgid "Authentication is required to inspect a portable service image."
 msgstr ""
-"За внасяне на изображение на виртуална машина или контейнер е необходима "
-"идентификация."
+"За преглед на преносимо изображение на система е необходима идентификация."
 
 #: src/portable/org.freedesktop.portable1.policy:23
 msgid "Attach or detach a portable service image"
-msgstr ""
+msgstr "Превключване на преносимо изображение на система"
 
 #: src/portable/org.freedesktop.portable1.policy:24
-#, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr ""
-"За позволяване на закачане на устройства към работните места е необходима "
+"За превключване на преносимо изображение на система е необходима "
 "идентификация."
 
 #: src/portable/org.freedesktop.portable1.policy:34
 msgid "Delete or modify portable service image"
-msgstr ""
+msgstr "Изтриване/промяна на преносимо изображение на система"
 
 #: src/portable/org.freedesktop.portable1.policy:35
-#, fuzzy
-#| msgid "Authentication is required to download a VM or container image"
 msgid ""
 "Authentication is required to delete or modify a portable service image."
 msgstr ""
-"За изтегляне на изображение на виртуална машина или контейнер е необходима "
+"За изтриване/промяна на преносимо изображение на система е необходима "
 "идентификация."
 
 #: src/resolve/org.freedesktop.resolve1.policy:22
 msgid "Register a DNS-SD service"
-msgstr ""
+msgstr "Регистриране на услуга по DNS-SD"
 
 #: src/resolve/org.freedesktop.resolve1.policy:23
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to register a DNS-SD service"
-msgstr "За задаване на системно съобщение „wall“ е необходима идентификация."
+msgstr "За регистриране на услуга по DNS-SD е необходима идентификация."
 
 #: src/resolve/org.freedesktop.resolve1.policy:33
 msgid "Unregister a DNS-SD service"
-msgstr ""
+msgstr "Дерегистриране на услуга по DNS-SD"
 
 #: src/resolve/org.freedesktop.resolve1.policy:34
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to unregister a DNS-SD service"
-msgstr "За задаване на системно съобщение „wall“ е необходима идентификация."
+msgstr "За дерегистриране на услуга по DNS-SD е необходима идентификация."
 
 #: src/resolve/org.freedesktop.resolve1.policy:132
 msgid "Revert name resolution settings"
-msgstr ""
+msgstr "Възстановяване на настройките за откриване на имената"
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
-msgstr "За задаване на настройките на клавиатурата е необходима идентификация."
+msgstr ""
+"За възстановяване на настройките за откриване на имената е необходима "
+"идентификация."
 
 #: src/timedate/org.freedesktop.timedate1.policy:22
 msgid "Set system time"
@@ -1040,44 +964,35 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "За рестартиране на „$(unit)“ е необходима идентификация."
 
-#: src/core/dbus-unit.c:535
-#, fuzzy
-#| msgid "Authentication is required to set properties on '$(unit)'."
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
-msgstr "За задаване на свойствата на „$(unit)“ е необходима идентификация."
+msgstr ""
+"За изпращането на сигнал на UNIX на процесите на „$(unit)“ е необходима "
+"идентификация."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "За премахване на състоянието за неуспех на „$(unit)“ е необходима "
 "идентификация."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "За задаване на свойствата на „$(unit)“ е необходима идентификация."
 
-#: src/core/dbus-unit.c:708
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
-"За премахване на състоянието за неуспех на „$(unit)“ е необходима "
+"За изтриването на файловете и директориите на „$(unit)“ е необходима "
 "идентификация."
 
-#: src/core/dbus-unit.c:757
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
-"За премахване на състоянието за неуспех на „$(unit)“ е необходима "
+"За замразяване/размразяване на процесите на „$(unit)“ е необходима "
 "идентификация."
-
-#~ msgid "Authentication is required to kill '$(unit)'."
-#~ msgstr "За убиване на „$(unit)“ е необходима идентификация."
diff --git a/po/ca.po b/po/ca.po
index 0cb2e49..e2ca4da 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -5,9 +5,8 @@
 # Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2018. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2018-02-27 04:18-0500\n"
 "Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n"
 "Language-Team: Català <ubuntu-l10n-ca@lists.ubuntu.com>\n"
@@ -76,7 +75,6 @@
 
 #: src/home/org.freedesktop.home1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
 msgstr "Es requereix autenticació per tornar a carregar l'estat de systemd."
 
@@ -86,7 +84,6 @@
 
 #: src/home/org.freedesktop.home1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
 msgstr "Es requereix autenticació per tornar a carregar l'estat de systemd."
 
@@ -96,8 +93,6 @@
 
 #: src/home/org.freedesktop.home1.policy:34
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
@@ -110,7 +105,6 @@
 
 #: src/home/org.freedesktop.home1.policy:44
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
 msgstr ""
 "Es requereix autenticació per annexar un dispositiu a un lloc de treball."
@@ -121,7 +115,6 @@
 
 #: src/home/org.freedesktop.home1.policy:54
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
 msgstr "Es requereix autenticació per establir un missatge de mur"
 
@@ -131,8 +124,6 @@
 
 #: src/home/org.freedesktop.home1.policy:64
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
@@ -174,10 +165,28 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
 #, fuzzy
-#| msgid "Authentication is required to reload '$(unit)'."
 msgid "Authentication is required to get product UUID."
 msgstr "Es requereix autenticació per tornar a carregar «$(unit)»."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Es requereix autenticació per establir l'hora del sistema."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Estableix la zona horària del sistema"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Es requereix autenticació per establir la zona horària del sistema."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importa una màquina virtual o una imatge de contenidor"
@@ -336,7 +345,6 @@
 
 #: src/login/org.freedesktop.login1.policy:117
 #, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
 "Permet a les aplicacions inhibir la gestió de la tecla d'encesa per part del "
@@ -344,9 +352,6 @@
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
@@ -485,9 +490,6 @@
 
 #: src/login/org.freedesktop.login1.policy:258
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
@@ -586,13 +588,11 @@
 
 #: src/login/org.freedesktop.login1.policy:353
 #, fuzzy
-#| msgid "Authentication is required to set the system timezone."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
 msgstr "Es requereix autenticació per establir la zona horària del sistema."
 
 #: src/login/org.freedesktop.login1.policy:363
 #, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
 msgstr ""
 "Permet la indicació al microprogramari en l'arrencada perquè prepari la "
@@ -612,9 +612,6 @@
 
 #: src/login/org.freedesktop.login1.policy:375
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
@@ -628,9 +625,6 @@
 
 #: src/login/org.freedesktop.login1.policy:386
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
@@ -652,7 +646,6 @@
 
 #: src/login/org.freedesktop.login1.policy:407
 #, fuzzy
-#| msgid "Authentication is required to halt the system."
 msgid "Authentication is required to change the virtual terminal."
 msgstr "Es requereix autenticació per aturar el sistema."
 
@@ -737,21 +730,18 @@
 
 #: src/network/org.freedesktop.network1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
 msgstr "Es requereix autenticació per establir l'hora del sistema."
 
 #: src/network/org.freedesktop.network1.policy:33
 #: src/resolve/org.freedesktop.resolve1.policy:44
 #, fuzzy
-#| msgid "Register a DNS-SD service"
 msgid "Set DNS servers"
 msgstr "Registra un servei DNS-SD"
 
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
 #, fuzzy
-#| msgid "Authentication is required to register a DNS-SD service"
 msgid "Authentication is required to set DNS servers."
 msgstr "Es requereix autenticació per registrar un servei DNS-SD"
 
@@ -763,7 +753,6 @@
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
 #, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
 msgstr "Es requereix autenticació per aturar «$(unit)»."
 
@@ -775,7 +764,6 @@
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
 msgstr "Es requereix autenticació per establir el nom d'amfitrió local."
 
@@ -787,7 +775,6 @@
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
 msgstr "Es requereix autenticació per hibernar el sistema."
 
@@ -799,7 +786,6 @@
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
 #, fuzzy
-#| msgid "Authentication is required to log into the local host."
 msgid "Authentication is required to enable or disable multicast DNS."
 msgstr "Es requereix autenticació per iniciar la sessió a l'amfitrió local."
 
@@ -811,7 +797,6 @@
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
 #, fuzzy
-#| msgid "Authentication is required to register a DNS-SD service"
 msgid "Authentication is required to enable or disable DNS over TLS."
 msgstr "Es requereix autenticació per registrar un servei DNS-SD"
 
@@ -823,7 +808,6 @@
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
 msgstr "Es requereix autenticació per hibernar el sistema."
 
@@ -835,7 +819,6 @@
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
 msgstr ""
 "Es requereix autenticació per establir la configuració regional del sistema."
@@ -846,7 +829,6 @@
 
 #: src/network/org.freedesktop.network1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
 msgstr "Es requereix autenticació per establir l'hora del sistema."
 
@@ -856,7 +838,6 @@
 
 #: src/network/org.freedesktop.network1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
 msgstr "Es requereix autenticació per establir l'hora del sistema."
 
@@ -866,7 +847,6 @@
 
 #: src/network/org.freedesktop.network1.policy:144
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
 msgstr "Es requereix autenticació per establir un missatge de mur"
 
@@ -876,7 +856,6 @@
 
 #: src/network/org.freedesktop.network1.policy:155
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
 msgstr "Es requereix autenticació per establir un missatge de mur"
 
@@ -886,7 +865,6 @@
 
 #: src/network/org.freedesktop.network1.policy:166
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
 msgstr "Es requereix autenticació per tornar a carregar l'estat de systemd."
 
@@ -896,7 +874,6 @@
 
 #: src/network/org.freedesktop.network1.policy:177
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
 msgstr "Es requereix autenticació per reiniciar el sistema."
 
@@ -906,7 +883,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to import a VM or container image"
 msgid "Authentication is required to inspect a portable service image."
 msgstr ""
 "Es requereix autenticació per importar una màquina virtual o una imatge de "
@@ -918,7 +894,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr ""
@@ -930,7 +905,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:35
 #, fuzzy
-#| msgid "Authentication is required to download a VM or container image"
 msgid ""
 "Authentication is required to delete or modify a portable service image."
 msgstr ""
@@ -959,7 +933,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
 msgstr ""
 "Es requereix autenticació per establir els ajusts del teclat del sistema."
@@ -1020,35 +993,30 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Es requereix autenticació per reiniciar «$(unit)»."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 #, fuzzy
-#| msgid "Authentication is required to set properties on '$(unit)'."
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "Es requereix autenticació per establir les propietats a «$(unit)»."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr "Es requereix autenticació per restablir l'estat «failed» de «$(unit)»."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Es requereix autenticació per establir les propietats a «$(unit)»."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr "Es requereix autenticació per restablir l'estat «failed» de «$(unit)»."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr "Es requereix autenticació per restablir l'estat «failed» de «$(unit)»."
diff --git a/po/cs.po b/po/cs.po
index f296766..756b0df 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -1,23 +1,23 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 #
 # Czech translation for systemd.
-# Daniel Maixner <xskipy@gmail.com>, 2016.
 #
+# Daniel Rusek <mail@asciiwolf.com>, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2020-10-26 22:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-22 17:19+0000\n"
 "Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
-"Language-Team: Czech\n"
+"Language-Team: Czech <https://translate.fedoraproject.org/projects/systemd/"
+"master/cs/>\n"
 "Language: cs\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 2.4.1\n"
+"X-Generator: Weblate 4.14.1\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -155,6 +155,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Pro získání UUID produktu je vyžadováno ověření."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Získat sériové číslo hardwaru"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Pro získání sériového čísla hardwaru je vyžadováno ověření."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Získat popis systému"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Pro získání popisu systému je vyžadováno ověření."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importovat obraz virtuální stroje nebo kontejneru"
@@ -891,21 +907,21 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Pro restart „$(unit)” je vyžadováno ověření."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "Pro odeslání UNIX signálu procesům „$(unit)” je vyžadováno ověření."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr "Pro resetování chybného stavu „$(unit)” je vyžadováno ověření."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Pro nastavení vlastností na „$(unit)” je vyžadováno ověření."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -913,7 +929,7 @@
 "Pro odstranění souborů nebo adresářů souvisejících s „$(unit)” je vyžadováno "
 "ověření."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/da.po b/po/da.po
index 7941c6b..d43ff39 100644
--- a/po/da.po
+++ b/po/da.po
@@ -5,9 +5,8 @@
 # scootergrisen <scootergrisen@gmail.com>, 2020, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2021-06-02 16:03+0000\n"
 "Last-Translator: scootergrisen <scootergrisen@gmail.com>\n"
 "Language-Team: Danish <https://translate.fedoraproject.org/projects/systemd/"
@@ -160,6 +159,25 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Der kræves godkendelse for at hente produktets UUID."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Der kræves godkendelse for at indstille tiden for systemet."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Indstil tidszone for systemet"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Der kræves godkendelse for at indstille tidszonen for systemet."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importér et VM- eller beholderaftryk"
@@ -915,29 +933,29 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Der kræves godkendelse for at genstarte '$(unit)'."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "Der kræves godkendelse for at indstille egenskaber på '$(unit)'."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Der kræves godkendelse for at nulstille \"fejl\"-tilstanden på '$(unit)'."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Der kræves godkendelse for at indstille egenskaber på '$(unit)'."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 "Der kræves godkendelse for at nulstille \"fejl\"-tilstanden på '$(unit)'."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/de.po b/po/de.po
index 8a4de65..3d4fa64 100644
--- a/po/de.po
+++ b/po/de.po
@@ -5,13 +5,14 @@
 # Benjamin Steinwender <b@stbe.at>, 2014.
 # Bernd Homuth <dev@hmt.im>, 2015.
 # Fabian Affolter <mail@fabian-affolter.ch>, 2020.
+# Ettore Atalan <atalanttore@googlemail.com>, 2021.
+# Christian Wehrli <christian@chw.onl>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2020-12-13 14:36+0000\n"
-"Last-Translator: Fabian Affolter <mail@fabian-affolter.ch>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2021-11-08 00:49+0000\n"
+"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
 "Language-Team: German <https://translate.fedoraproject.org/projects/systemd/"
 "master/de/>\n"
 "Language: de\n"
@@ -19,7 +20,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.8\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -77,7 +78,6 @@
 
 #: src/home/org.freedesktop.home1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
 msgstr "Legitimierung ist zum erneuten Laden des systemd-Zustands notwendig."
 
@@ -87,7 +87,6 @@
 
 #: src/home/org.freedesktop.home1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
 msgstr "Legitimierung ist zum erneuten Laden des systemd-Zustands notwendig."
 
@@ -98,8 +97,6 @@
 # https://www.freedesktop.org/software/systemd/man/sd-login.html
 #: src/home/org.freedesktop.home1.policy:34
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
@@ -113,7 +110,6 @@
 # https://www.freedesktop.org/software/systemd/man/sd-login.html
 #: src/home/org.freedesktop.home1.policy:44
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
 msgstr ""
 "Legitimierung ist zum Anschließen eines Geräts an eine Arbeitsstation "
@@ -125,7 +121,6 @@
 
 #: src/home/org.freedesktop.home1.policy:54
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
 msgstr "Legitimierung ist zum Einstellen einer Nachricht an alle notwendig"
 
@@ -136,8 +131,6 @@
 # https://www.freedesktop.org/software/systemd/man/sd-login.html
 #: src/home/org.freedesktop.home1.policy:64
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
@@ -176,14 +169,32 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:51
 msgid "Get product UUID"
-msgstr ""
+msgstr "Die Produkte-UUID erhalten"
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
 #, fuzzy
-#| msgid "Authentication is required to reload '$(unit)'."
 msgid "Authentication is required to get product UUID."
 msgstr "Legitimierung ist zum erneuten Laden von »$(unit)« notwendig."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Legitimierung ist zum Festlegen der Systemzeit notwendig."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Die Systemzeitzone festlegen"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Legitimierung ist zum Festlegen der Systemzeitzone notwendig."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Abbild einer VM oder eines Containers importieren"
@@ -343,7 +354,6 @@
 
 #: src/login/org.freedesktop.login1.policy:117
 #, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
 "Anwendungen dürfen das Auswerten des Ein-/Ausschaltknopfs des Systems "
@@ -351,25 +361,19 @@
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
 msgstr ""
-"Legitmierung ist erforderlich, um Anwendungen das Unterbinden der Auswertung "
-"der Ein-/Ausschaltknopfs des Systems zu erlauben."
+"Legitimierung ist erforderlich, um Anwendungen das Unterbinden der "
+"Auswertung der Ein-/Ausschaltknopfs des Systems zu erlauben."
 
 #: src/login/org.freedesktop.login1.policy:128
-#, fuzzy
-#| msgid "Allow non-logged-in users to run programs"
 msgid "Allow non-logged-in user to run programs"
-msgstr "Nicht angemeldete Benutzer dürfen Programme ausführen"
+msgstr "Nicht angemeldetem Benutzer die Ausführung von Programmen erlauben"
 
 #: src/login/org.freedesktop.login1.policy:129
 #, fuzzy
-#| msgid "Authentication is required to run programs as a non-logged-in user."
 msgid "Explicit request is required to run programs as a non-logged-in user."
 msgstr ""
 "Legitimierung ist erforderlich, damit nicht angemeldete Benutzer Programme "
@@ -476,21 +480,17 @@
 "anforderte es zu unterbinden."
 
 #: src/login/org.freedesktop.login1.policy:235
-#, fuzzy
-#| msgid "Hibernate the system"
 msgid "Halt the system"
-msgstr "Den Ruhezustand des Systems aktivieren"
+msgstr "Das System anhalten"
 
 #: src/login/org.freedesktop.login1.policy:236
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to halt the system."
 msgstr ""
 "Legitimierung ist zum Aktivieren des Ruhezustands des Systems notwendig."
 
 #: src/login/org.freedesktop.login1.policy:246
 #, fuzzy
-#| msgid "Hibernate the system while other users are logged in"
 msgid "Halt the system while other users are logged in"
 msgstr ""
 "Den Ruhezustand des Systems aktivieren, während andere Benutzer angemeldet "
@@ -498,9 +498,6 @@
 
 #: src/login/org.freedesktop.login1.policy:247
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while other users are "
-#| "logged in."
 msgid ""
 "Authentication is required to halt the system while other users are logged "
 "in."
@@ -510,7 +507,6 @@
 
 #: src/login/org.freedesktop.login1.policy:257
 #, fuzzy
-#| msgid "Hibernate the system while an application is inhibiting this"
 msgid "Halt the system while an application is inhibiting this"
 msgstr ""
 "Das System in den Ruhezustand versetzen, während eine Anwendung wünscht dies "
@@ -518,9 +514,6 @@
 
 #: src/login/org.freedesktop.login1.policy:258
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
@@ -623,17 +616,15 @@
 
 #: src/login/org.freedesktop.login1.policy:352
 msgid "Set the reboot \"reason\" in the kernel"
-msgstr ""
+msgstr "Den Reboot-\"Grund\" im Kernel festlegen"
 
 #: src/login/org.freedesktop.login1.policy:353
 #, fuzzy
-#| msgid "Authentication is required to set the system timezone."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
 msgstr "Legitimierung ist zum Festlegen der Systemzeitzone notwendig."
 
 #: src/login/org.freedesktop.login1.policy:363
 #, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
 msgstr ""
 "Mitteilungen an die Firmware zum Starten in die Einrichtungsoberfläche "
@@ -653,9 +644,6 @@
 
 #: src/login/org.freedesktop.login1.policy:375
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
@@ -669,9 +657,6 @@
 
 #: src/login/org.freedesktop.login1.policy:386
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
@@ -689,13 +674,11 @@
 
 #: src/login/org.freedesktop.login1.policy:406
 msgid "Change Session"
-msgstr ""
+msgstr "Sitzung ändern"
 
 #: src/login/org.freedesktop.login1.policy:407
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to change the virtual terminal."
-msgstr "Legitimierung ist zum Festlegen des lokalen Rechnernamens notwendig"
+msgstr "Legitimierung ist zum Ändern des virtuellen Terminals notwendig."
 
 #: src/machine/org.freedesktop.machine1.policy:22
 msgid "Log into a local container"
@@ -778,25 +761,21 @@
 
 #: src/network/org.freedesktop.network1.policy:22
 msgid "Set NTP servers"
-msgstr ""
+msgstr "NTP-Server festlegen"
 
 #: src/network/org.freedesktop.network1.policy:23
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
-msgstr "Legitimierung ist zum Festlegen der Systemzeit notwendig."
+msgstr "Legitimierung ist zum Festlegen von NTP-Servern notwendig."
 
 #: src/network/org.freedesktop.network1.policy:33
 #: src/resolve/org.freedesktop.resolve1.policy:44
 msgid "Set DNS servers"
-msgstr ""
+msgstr "DNS-Server festlegen"
 
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set DNS servers."
-msgstr "Legitimierung ist zum Festlegen der Systemzeit notwendig."
+msgstr "Legitimierung ist zum Festlegen von DNS-Servern notwendig."
 
 #: src/network/org.freedesktop.network1.policy:44
 #: src/resolve/org.freedesktop.resolve1.policy:55
@@ -806,105 +785,98 @@
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
 #, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
-msgstr "Legitimierung ist zum Stoppen von »$(unit)« notwendig."
+msgstr "Legitimierung ist zum Festlegen von Domains notwendig."
 
 #: src/network/org.freedesktop.network1.policy:55
 #: src/resolve/org.freedesktop.resolve1.policy:66
 msgid "Set default route"
-msgstr ""
+msgstr "Standardroute festlegen"
 
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
-msgstr "Legitimierung ist zum Festlegen des lokalen Rechnernamens notwendig"
+msgstr "Legitimierung ist zum Festlegen der Standardroute notwendig."
 
 #: src/network/org.freedesktop.network1.policy:66
 #: src/resolve/org.freedesktop.resolve1.policy:77
 msgid "Enable/disable LLMNR"
-msgstr ""
+msgstr "LLMNR aktivieren/deaktivieren"
 
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
 msgstr ""
-"Legitimierung ist zum Aktivieren des Ruhezustands des Systems notwendig."
+"Legitimierung ist zum Aktivieren oder Deaktivieren von  LLMNR notwendig."
 
 #: src/network/org.freedesktop.network1.policy:77
 #: src/resolve/org.freedesktop.resolve1.policy:88
 msgid "Enable/disable multicast DNS"
-msgstr ""
+msgstr "Multicast-DNS aktivieren/deaktivieren"
 
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
 #, fuzzy
-#| msgid "Authentication is required to log into the local host."
 msgid "Authentication is required to enable or disable multicast DNS."
-msgstr "Legitimierung ist zum Anmelden am lokalen Rechner notwendig."
+msgstr ""
+"Legitimierung ist zum Aktivieren oder Deaktivieren von Multicast-DNS "
+"notwendig."
 
 #: src/network/org.freedesktop.network1.policy:88
 #: src/resolve/org.freedesktop.resolve1.policy:99
 msgid "Enable/disable DNS over TLS"
-msgstr ""
+msgstr "DNS over TLS aktivieren/deaktivieren"
 
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable DNS over TLS."
-msgstr "Legitimierung ist zum Festlegen des lokalen Rechnernamens notwendig"
+msgstr ""
+"Legitimierung ist zum Aktivieren oder Deaktivieren von DNS over TLS "
+"notwendig."
 
 #: src/network/org.freedesktop.network1.policy:99
 #: src/resolve/org.freedesktop.resolve1.policy:110
 msgid "Enable/disable DNSSEC"
-msgstr ""
+msgstr "DNSSEC aktivieren/deaktivieren"
 
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
 msgstr ""
-"Legitimierung ist zum Aktivieren des Ruhezustands des Systems notwendig."
+"Legitimierung ist zum Aktivieren oder Deaktivieren von DNSSEC notwendig."
 
 #: src/network/org.freedesktop.network1.policy:110
 #: src/resolve/org.freedesktop.resolve1.policy:121
 msgid "Set DNSSEC Negative Trust Anchors"
-msgstr ""
+msgstr "Negative Vertrauensanker für DNSSEC festlegen"
 
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
 msgstr ""
-"Legitimierung ist zum Festlegen der systemweiten Spracheinstellungen "
+"Legitimierung ist zum Festlegen von negativen Vertrauensankern für DNSSEC "
 "erforderlich."
 
 #: src/network/org.freedesktop.network1.policy:121
 msgid "Revert NTP settings"
-msgstr ""
+msgstr "NTP-Einstellungen zurücksetzen"
 
 #: src/network/org.freedesktop.network1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
-msgstr "Legitimierung ist zum Festlegen der Systemzeit notwendig."
+msgstr "Legitimierung ist zum Zurücksetzen der NTP-Einstellungen notwendig."
 
 #: src/network/org.freedesktop.network1.policy:132
 msgid "Revert DNS settings"
-msgstr ""
+msgstr "DNS-Einstellungen zurücksetzen"
 
 #: src/network/org.freedesktop.network1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
-msgstr "Legitimierung ist zum Festlegen der Systemzeit notwendig."
+msgstr "Legitimierung ist zum Zurücksetzen der DNS-Einstellungen notwendig."
 
 #: src/network/org.freedesktop.network1.policy:143
 msgid "DHCP server sends force renew message"
@@ -912,39 +884,34 @@
 
 #: src/network/org.freedesktop.network1.policy:144
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
 msgstr "Legitimierung ist zum Einstellen einer Nachricht an alle notwendig"
 
 #: src/network/org.freedesktop.network1.policy:154
 msgid "Renew dynamic addresses"
-msgstr ""
+msgstr "Dynamische Adressen erneuern"
 
 #: src/network/org.freedesktop.network1.policy:155
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
-msgstr "Legitimierung ist zum Einstellen einer Nachricht an alle notwendig"
+msgstr "Legitimierung ist für die Erneuerung dynamischer Adressen notwendig."
 
 #: src/network/org.freedesktop.network1.policy:165
 msgid "Reload network settings"
-msgstr ""
+msgstr "Netzwerkeinstellungen neu laden"
 
 #: src/network/org.freedesktop.network1.policy:166
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
-msgstr "Legitimierung ist zum erneuten Laden des systemd-Zustands notwendig."
+msgstr ""
+"Legitimierung ist zum erneuten Laden der Netzwerkeinstellungen notwendig."
 
 #: src/network/org.freedesktop.network1.policy:176
 msgid "Reconfigure network interface"
-msgstr ""
+msgstr "Netzwerkschnittstelle neu konfigurieren"
 
 #: src/network/org.freedesktop.network1.policy:177
-#, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
-msgstr "Legitimierung ist zum Neustart des Systems notwendig."
+msgstr ""
+"Legitimierung ist zur Neukonfiguration der Netzwerkschnittstelle notwendig."
 
 #: src/portable/org.freedesktop.portable1.policy:13
 msgid "Inspect a portable service image"
@@ -952,7 +919,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to import a VM or container image"
 msgid "Authentication is required to inspect a portable service image."
 msgstr ""
 "Legitimierung ist zum Importieren eines VM- oder Containerabbilds "
@@ -965,7 +931,6 @@
 # https://www.freedesktop.org/software/systemd/man/sd-login.html
 #: src/portable/org.freedesktop.portable1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr ""
@@ -978,7 +943,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:35
 #, fuzzy
-#| msgid "Authentication is required to download a VM or container image"
 msgid ""
 "Authentication is required to delete or modify a portable service image."
 msgstr ""
@@ -987,34 +951,30 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:22
 msgid "Register a DNS-SD service"
-msgstr ""
+msgstr "Einen DNS-SD-Dienst registrieren"
 
 #: src/resolve/org.freedesktop.resolve1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to register a DNS-SD service"
 msgstr "Legitimierung ist zum Einstellen einer Nachricht an alle notwendig"
 
 #: src/resolve/org.freedesktop.resolve1.policy:33
 msgid "Unregister a DNS-SD service"
-msgstr ""
+msgstr "Einen DNS-SD-Dienst deregistrieren"
 
 #: src/resolve/org.freedesktop.resolve1.policy:34
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to unregister a DNS-SD service"
 msgstr "Legitimierung ist zum Einstellen einer Nachricht an alle notwendig"
 
 #: src/resolve/org.freedesktop.resolve1.policy:132
 msgid "Revert name resolution settings"
-msgstr ""
+msgstr "Namensauflösungseinstellungen zurücksetzen"
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
 msgstr ""
-"Legitimierung ist zum Festlegen der Tastatureinstellungen des Systems "
+"Legitimierung ist zum Zurücksetzen der Namensauflösungseinstellungen "
 "erforderlich."
 
 #: src/timedate/org.freedesktop.timedate1.policy:22
@@ -1073,41 +1033,35 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Legitimierung ist zum Neustarten von »$(unit)« notwendig."
 
-#: src/core/dbus-unit.c:535
-#, fuzzy
-#| msgid "Authentication is required to set properties on '$(unit)'."
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
-"Legitimierung ist zum Festlegen der Eigenschaften von »$(unit)« notwendig."
+"Legitimierung ist zum Senden eines UNIX-Signals an die Prozesse von "
+"»$(unit)« notwendig."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Legitimierung ist zum Zurücksetzen des Status »fehlgeschlagen« von »$(unit)« "
 "notwendig"
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "Legitimierung ist zum Festlegen der Eigenschaften von »$(unit)« notwendig."
 
-#: src/core/dbus-unit.c:708
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
-"Legitimierung ist zum Zurücksetzen des Status »fehlgeschlagen« von »$(unit)« "
-"notwendig"
+"Legitimierung ist zum Löschen von Dateien und Verzeichnissen, die zu "
+"»$(unit)« gehören, erforderlich."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/el.po b/po/el.po
index 7d99288..02e1e90 100644
--- a/po/el.po
+++ b/po/el.po
@@ -5,9 +5,8 @@
 # Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>, 2014.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2014-04-29 09:17+0300\n"
 "Last-Translator: Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>\n"
 "Language-Team: team@lists.gnome.gr\n"
@@ -110,7 +109,6 @@
 
 #: src/home/org.freedesktop.home1.policy:44
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
 msgstr ""
 "Απαιτείται πιστοποίηση για προσάρτηση μιας συσκευής σε έναν σταθμό εργασίας."
@@ -172,6 +170,25 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Ορισμός ζώνης ώρας συστήματος"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα ζώνης του συστήματος."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr ""
@@ -333,7 +350,6 @@
 
 #: src/login/org.freedesktop.login1.policy:117
 #, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
 "Να επιτρέπεται στις εφαρμογές να αποτρέπουν τη διαχείριση του πλήκτρου "
@@ -341,9 +357,6 @@
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
@@ -353,13 +366,11 @@
 
 #: src/login/org.freedesktop.login1.policy:128
 #, fuzzy
-#| msgid "Allow non-logged-in users to run programs"
 msgid "Allow non-logged-in user to run programs"
 msgstr "Να επιτρέπεται σε μη συνδεμένους χρήστες να εκτελούν προγράμματα"
 
 #: src/login/org.freedesktop.login1.policy:129
 #, fuzzy
-#| msgid "Authentication is required to run programs as a non-logged-in user."
 msgid "Explicit request is required to run programs as a non-logged-in user."
 msgstr ""
 "Απαιτείται πιστοποίηση για να επιτρέπεται σε μη συνδεμένους χρήστες να "
@@ -460,27 +471,21 @@
 
 #: src/login/org.freedesktop.login1.policy:235
 #, fuzzy
-#| msgid "Hibernate the system"
 msgid "Halt the system"
 msgstr "Αδρανοποίηση του συτήματος"
 
 #: src/login/org.freedesktop.login1.policy:236
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to halt the system."
 msgstr "Απαιτείται πιστοποίηση για αδρανοποίηση του συστήματος."
 
 #: src/login/org.freedesktop.login1.policy:246
 #, fuzzy
-#| msgid "Hibernate the system while other users are logged in"
 msgid "Halt the system while other users are logged in"
 msgstr "Αδρανοποίηση του συστήματος ενώ άλλοι χρήστες είναι συνδεμένοι"
 
 #: src/login/org.freedesktop.login1.policy:247
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while other users are "
-#| "logged in."
 msgid ""
 "Authentication is required to halt the system while other users are logged "
 "in."
@@ -490,15 +495,11 @@
 
 #: src/login/org.freedesktop.login1.policy:257
 #, fuzzy
-#| msgid "Hibernate the system while an application is inhibiting this"
 msgid "Halt the system while an application is inhibiting this"
 msgstr "Αδρανοποίηση του συστήματος ενώ μια εφαρμογή ζήτησε να αποτραπεί"
 
 #: src/login/org.freedesktop.login1.policy:258
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
@@ -595,7 +596,6 @@
 
 #: src/login/org.freedesktop.login1.policy:353
 #, fuzzy
-#| msgid "Authentication is required to set the system timezone."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα ζώνης του συστήματος."
 
@@ -648,7 +648,6 @@
 
 #: src/login/org.freedesktop.login1.policy:407
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to change the virtual terminal."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε τοπικά όνομα οικοδεσπότη."
 
@@ -736,7 +735,6 @@
 
 #: src/network/org.freedesktop.network1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
 
@@ -748,7 +746,6 @@
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set DNS servers."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
 
@@ -771,7 +768,6 @@
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε τοπικά όνομα οικοδεσπότη."
 
@@ -783,7 +779,6 @@
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
 msgstr "Απαιτείται πιστοποίηση για αδρανοποίηση του συστήματος."
 
@@ -806,7 +801,6 @@
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable DNS over TLS."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε τοπικά όνομα οικοδεσπότη."
 
@@ -818,7 +812,6 @@
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
 msgstr "Απαιτείται πιστοποίηση για αδρανοποίηση του συστήματος."
 
@@ -830,7 +823,6 @@
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
 msgstr ""
 "Απαιτείται πιστοποίηση για να ορίσετε τις τοπικές ρυθμίσεις του συστήματος."
@@ -841,7 +833,6 @@
 
 #: src/network/org.freedesktop.network1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
 
@@ -851,7 +842,6 @@
 
 #: src/network/org.freedesktop.network1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
 
@@ -888,7 +878,6 @@
 
 #: src/network/org.freedesktop.network1.policy:177
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
 msgstr "Απαιτείται πιστοποίηση για επανεκκίνηση του συστήματος."
 
@@ -907,7 +896,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr ""
@@ -947,7 +935,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
 msgstr ""
 "Απαιτείται πιστοποίηση για να ορίσετε τις ρυθμίσεις πληκτρολογίου του "
@@ -1013,31 +1000,31 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 #, fuzzy
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 #, fuzzy
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε τοπικά όνομα οικοδεσπότη."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 #, fuzzy
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 #, fuzzy
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr "Απαιτείται πιστοποίηση για να ορίσετε τοπικά όνομα οικοδεσπότη."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
diff --git a/po/es.po b/po/es.po
index 9406cea..4b62389 100644
--- a/po/es.po
+++ b/po/es.po
@@ -4,15 +4,14 @@
 # Alex Puchades <alex94puchades@gmail.com>, 2015.
 # Daniel Mustieles <daniel.mustieles@gmail.com>, 2015.
 # Álex Puchades <alex94puchades@gmail.com>, 2015.
-# Adolfo Jayme Barrientos <fitoschido@gmail.com>, 2020.
+# Adolfo Jayme Barrientos <fitoschido@gmail.com>, 2020, 2021.
 # Emilio Herrera <ehespinosa57@gmail.com>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-06-08 09:04+0000\n"
-"Last-Translator: Emilio Herrera <ehespinosa57@gmail.com>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2021-08-26 18:05+0000\n"
+"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
 "Language-Team: Spanish <https://translate.fedoraproject.org/projects/systemd/"
 "master/es/>\n"
 "Language: es\n"
@@ -20,7 +19,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.6.2\n"
+"X-Generator: Weblate 4.8\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -96,40 +95,37 @@
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
-"Se requiere autenticación para comprobar las credenciales contra un área "
-"home de usuario."
+"Necesita autenticarse para comprobar las credenciales del espacio personal "
+"de un usuario."
 
 #: src/home/org.freedesktop.home1.policy:43
 msgid "Update a home area"
-msgstr "Actualizar un área home"
+msgstr "Actualizar un espacio personal"
 
 #: src/home/org.freedesktop.home1.policy:44
 msgid "Authentication is required to update a user's home area."
-msgstr "Se requiere autenticación para actualizar un área home de usuario."
+msgstr ""
+"Necesita autenticarse para actualizar el espacio personal de un usuario."
 
 #: src/home/org.freedesktop.home1.policy:53
 msgid "Resize a home area"
-msgstr ""
+msgstr "Redimensionar un espacio personal"
 
 #: src/home/org.freedesktop.home1.policy:54
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
-msgstr "Se requiere autenticación para establecer un muro de texto"
+msgstr ""
+"Necesita autenticarse para redimensionar el espacio personal de un usuario."
 
 #: src/home/org.freedesktop.home1.policy:63
 msgid "Change password of a home area"
-msgstr ""
+msgstr "Cambiar contraseña de un espacio personal"
 
 #: src/home/org.freedesktop.home1.policy:64
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
-"Se requiere autenticación para administrar las sesiones activas, usuarios y "
-"puestos de trabajo."
+"Necesita autenticarse para cambiar la contraseña del espacio personal de un "
+"usuario."
 
 #: src/hostname/org.freedesktop.hostname1.policy:20
 msgid "Set hostname"
@@ -161,13 +157,30 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:51
 msgid "Get product UUID"
-msgstr ""
+msgstr "Obtener UUID del producto"
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
-#, fuzzy
-#| msgid "Authentication is required to reload '$(unit)'."
 msgid "Authentication is required to get product UUID."
-msgstr "Se requiere autenticación para recargar '$(unit)'."
+msgstr "Necesita autenticarse para obtener el UUID de un producto."
+
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Necesita autenticarse para establecer la fecha y hora del sistema."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Establecer la zona horaria del sistema"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Necesita autenticarse para establecer la zona horaria del sistema."
 
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
@@ -325,7 +338,6 @@
 
 #: src/login/org.freedesktop.login1.policy:117
 #, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
 "Permitir a las aplicaciones impedir el manejo de la tecla de encendido/"
@@ -333,9 +345,6 @@
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
@@ -345,13 +354,11 @@
 
 #: src/login/org.freedesktop.login1.policy:128
 #, fuzzy
-#| msgid "Allow non-logged-in users to run programs"
 msgid "Allow non-logged-in user to run programs"
 msgstr "Permitir la ejecución de programas a usuarios no conectados"
 
 #: src/login/org.freedesktop.login1.policy:129
 #, fuzzy
-#| msgid "Authentication is required to run programs as a non-logged-in user."
 msgid "Explicit request is required to run programs as a non-logged-in user."
 msgstr ""
 "Se requiere autenticación para la ejecución de programas por usuarios no "
@@ -452,27 +459,21 @@
 
 #: src/login/org.freedesktop.login1.policy:235
 #, fuzzy
-#| msgid "Hibernate the system"
 msgid "Halt the system"
 msgstr "Hibernar el sistema"
 
 #: src/login/org.freedesktop.login1.policy:236
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to halt the system."
 msgstr "Se requiere autenticación para hibernar el sistema."
 
 #: src/login/org.freedesktop.login1.policy:246
 #, fuzzy
-#| msgid "Hibernate the system while other users are logged in"
 msgid "Halt the system while other users are logged in"
 msgstr "Hibernar el sistema mientras todavía hay usuarios conectados"
 
 #: src/login/org.freedesktop.login1.policy:247
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while other users are "
-#| "logged in."
 msgid ""
 "Authentication is required to halt the system while other users are logged "
 "in."
@@ -482,15 +483,11 @@
 
 #: src/login/org.freedesktop.login1.policy:257
 #, fuzzy
-#| msgid "Hibernate the system while an application is inhibiting this"
 msgid "Halt the system while an application is inhibiting this"
 msgstr "Hibernar el sistema a pesar de que una aplicación lo impide"
 
 #: src/login/org.freedesktop.login1.policy:258
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
@@ -582,17 +579,15 @@
 
 #: src/login/org.freedesktop.login1.policy:352
 msgid "Set the reboot \"reason\" in the kernel"
-msgstr ""
+msgstr "Establecer la «razón» de reinicio en el núcleo"
 
 #: src/login/org.freedesktop.login1.policy:353
-#, fuzzy
-#| msgid "Authentication is required to set the system timezone."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
-msgstr "Se requiere autenticación para establecer la zona horaria del sistema."
+msgstr ""
+"Necesita autenticarse para establecer la «razón» de reinicio en el núcleo."
 
 #: src/login/org.freedesktop.login1.policy:363
 #, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
 msgstr ""
 "Permitir indicación al firmware para arrancar la interfaz de configuración"
@@ -607,35 +602,27 @@
 
 #: src/login/org.freedesktop.login1.policy:374
 msgid "Indicate to the boot loader to boot to the boot loader menu"
-msgstr ""
+msgstr "Indicar al cargador de arranque que inicie el menú de selección"
 
 #: src/login/org.freedesktop.login1.policy:375
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
 msgstr ""
-"Se requiere autenticación para indicar al firmware que arranque la interfaz "
-"de configuración."
+"Necesita autenticarse para indicar al cargador de arranque que inicie el "
+"menú de selección."
 
 #: src/login/org.freedesktop.login1.policy:385
 msgid "Indicate to the boot loader to boot a specific entry"
-msgstr ""
+msgstr "Indicar al cargador de arranque que inicie una entrada concreta"
 
 #: src/login/org.freedesktop.login1.policy:386
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
 msgstr ""
-"Se requiere autenticación para indicar al firmware que arranque la interfaz "
-"de configuración."
+"Necesita autenticarse para indicar al cargador de arranque que inicie una "
+"entrada concreta."
 
 #: src/login/org.freedesktop.login1.policy:396
 msgid "Set a wall message"
@@ -647,13 +634,11 @@
 
 #: src/login/org.freedesktop.login1.policy:406
 msgid "Change Session"
-msgstr ""
+msgstr "Cambiar sesión"
 
 #: src/login/org.freedesktop.login1.policy:407
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to change the virtual terminal."
-msgstr "Se requiere autenticación para establecer el nombre del equipo local."
+msgstr "Necesita autenticarse para cambiar la terminal virtual."
 
 #: src/machine/org.freedesktop.machine1.policy:22
 msgid "Log into a local container"
@@ -665,11 +650,11 @@
 
 #: src/machine/org.freedesktop.machine1.policy:32
 msgid "Log into the local host"
-msgstr "Conectarse al equipo local"
+msgstr "Acceder al anfitrión local"
 
 #: src/machine/org.freedesktop.machine1.policy:33
 msgid "Authentication is required to log into the local host."
-msgstr "Necesita autenticarse para conectarse al equipo local."
+msgstr "Necesita autenticarse para acceder al anfitrión local."
 
 #: src/machine/org.freedesktop.machine1.policy:42
 msgid "Acquire a shell in a local container"
@@ -734,177 +719,148 @@
 
 #: src/network/org.freedesktop.network1.policy:22
 msgid "Set NTP servers"
-msgstr ""
+msgstr "Establecer servidores NTP"
 
 #: src/network/org.freedesktop.network1.policy:23
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
-msgstr "Se requiere autenticación para establecer la fecha y hora del sistema."
+msgstr "Necesita autenticarse para establecer servidores NTP."
 
 #: src/network/org.freedesktop.network1.policy:33
 #: src/resolve/org.freedesktop.resolve1.policy:44
 msgid "Set DNS servers"
-msgstr ""
+msgstr "Establecer servidores DNS"
 
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set DNS servers."
-msgstr "Se requiere autenticación para establecer la fecha y hora del sistema."
+msgstr "Necesita autenticarse para establecer servidores DNS."
 
 #: src/network/org.freedesktop.network1.policy:44
 #: src/resolve/org.freedesktop.resolve1.policy:55
 msgid "Set domains"
-msgstr ""
+msgstr "Establecer dominios"
 
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
-#, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
-msgstr "Se requiere autenticación para detener '$(unit)'."
+msgstr "Necesita autenticarse para establecer dominios."
 
 #: src/network/org.freedesktop.network1.policy:55
 #: src/resolve/org.freedesktop.resolve1.policy:66
 msgid "Set default route"
-msgstr ""
+msgstr "Establecer ruta predeterminada"
 
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
-msgstr "Se requiere autenticación para establecer el nombre del equipo local."
+msgstr "Necesita autenticarse para establecer la ruta predeterminada."
 
 #: src/network/org.freedesktop.network1.policy:66
 #: src/resolve/org.freedesktop.resolve1.policy:77
 msgid "Enable/disable LLMNR"
-msgstr ""
+msgstr "Activar/desactivar LLMNR"
 
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
-msgstr "Se requiere autenticación para hibernar el sistema."
+msgstr "Necesita autenticarse para activar o desactivar LLMNR."
 
 #: src/network/org.freedesktop.network1.policy:77
 #: src/resolve/org.freedesktop.resolve1.policy:88
 msgid "Enable/disable multicast DNS"
-msgstr ""
+msgstr "Activar/desactivar DNS multidifusión"
 
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
-#, fuzzy
-#| msgid "Authentication is required to log into the local host."
 msgid "Authentication is required to enable or disable multicast DNS."
-msgstr "Se requiere autenticación para conectarse al equipo local."
+msgstr "Necesita autenticarse para activar o desactivar DNS multidifusión."
 
 #: src/network/org.freedesktop.network1.policy:88
 #: src/resolve/org.freedesktop.resolve1.policy:99
 msgid "Enable/disable DNS over TLS"
-msgstr ""
+msgstr "Activar/desactivar DNS por TLS"
 
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable DNS over TLS."
-msgstr "Se requiere autenticación para establecer el nombre del equipo local."
+msgstr "Necesita autenticarse para activar o desactivar DNS por TLS."
 
 #: src/network/org.freedesktop.network1.policy:99
 #: src/resolve/org.freedesktop.resolve1.policy:110
 msgid "Enable/disable DNSSEC"
-msgstr ""
+msgstr "Activar/desactivar DNSSEC"
 
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
-msgstr "Se requiere autenticación para hibernar el sistema."
+msgstr "Necesita autenticarse para activar o desactivar DNSSEC."
 
 #: src/network/org.freedesktop.network1.policy:110
 #: src/resolve/org.freedesktop.resolve1.policy:121
 msgid "Set DNSSEC Negative Trust Anchors"
-msgstr ""
+msgstr "Establecer anclas de confianza negativas de DNSSEC"
 
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
-msgstr "Se requiere autenticación para establecer la región del sistema."
+msgstr ""
+"Necesita autenticarse para establecer las anclas de confianza negativas de "
+"DNSSEC."
 
 #: src/network/org.freedesktop.network1.policy:121
 msgid "Revert NTP settings"
-msgstr ""
+msgstr "Revertir configuración de NTP"
 
 #: src/network/org.freedesktop.network1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
-msgstr "Se requiere autenticación para establecer la fecha y hora del sistema."
+msgstr "Necesita autenticarse para restablecer la configuración de NTP."
 
 #: src/network/org.freedesktop.network1.policy:132
 msgid "Revert DNS settings"
-msgstr ""
+msgstr "Revertir configuración de DNS"
 
 #: src/network/org.freedesktop.network1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
-msgstr "Se requiere autenticación para establecer la fecha y hora del sistema."
+msgstr "Necesita autenticarse para restablecer la configuración de DNS."
 
 #: src/network/org.freedesktop.network1.policy:143
 msgid "DHCP server sends force renew message"
-msgstr ""
+msgstr "El servidor DCHP envía un mensaje de renovación forzada"
 
 #: src/network/org.freedesktop.network1.policy:144
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
-msgstr "Se requiere autenticación para establecer un muro de texto"
+msgstr "Necesita autenticarse para enviar el mensaje de renovación forzada."
 
 #: src/network/org.freedesktop.network1.policy:154
 msgid "Renew dynamic addresses"
-msgstr ""
+msgstr "Renovar direcciones dinámicas"
 
 #: src/network/org.freedesktop.network1.policy:155
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
-msgstr "Se requiere autenticación para establecer un muro de texto"
+msgstr "Necesita autenticarse para renovar las direcciones dinámicas."
 
 #: src/network/org.freedesktop.network1.policy:165
 msgid "Reload network settings"
-msgstr ""
+msgstr "Recargar configuración de red"
 
 #: src/network/org.freedesktop.network1.policy:166
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
-msgstr "Se requiere autenticación para recargar el estado de systemd."
+msgstr "Necesita autenticarse para recargar la configuración de red."
 
 #: src/network/org.freedesktop.network1.policy:176
 msgid "Reconfigure network interface"
-msgstr ""
+msgstr "Reconfigurar interfaz de red"
 
 #: src/network/org.freedesktop.network1.policy:177
-#, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
-msgstr "Se requiere autenticación para reiniciar el sistema."
+msgstr "Necesita autenticarse para reconfigurar la interfaz de red."
 
 #: src/portable/org.freedesktop.portable1.policy:13
 msgid "Inspect a portable service image"
-msgstr ""
+msgstr "Inspeccionar una imagen de servicio portátil"
 
 #: src/portable/org.freedesktop.portable1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to import a VM or container image"
 msgid "Authentication is required to inspect a portable service image."
 msgstr ""
 "Se requiere autenticación para importar una imagen de máquina virtual o de "
@@ -912,11 +868,10 @@
 
 #: src/portable/org.freedesktop.portable1.policy:23
 msgid "Attach or detach a portable service image"
-msgstr ""
+msgstr "Adjuntar o desadjuntar una imagen de servicio portátil"
 
 #: src/portable/org.freedesktop.portable1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr ""
@@ -925,11 +880,10 @@
 
 #: src/portable/org.freedesktop.portable1.policy:34
 msgid "Delete or modify portable service image"
-msgstr ""
+msgstr "Eliminar o modificar imagen de servicio portátil"
 
 #: src/portable/org.freedesktop.portable1.policy:35
 #, fuzzy
-#| msgid "Authentication is required to download a VM or container image"
 msgid ""
 "Authentication is required to delete or modify a portable service image."
 msgstr ""
@@ -938,31 +892,28 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:22
 msgid "Register a DNS-SD service"
-msgstr ""
+msgstr "Registrar un servicio DNS-SD"
 
 #: src/resolve/org.freedesktop.resolve1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to register a DNS-SD service"
 msgstr "Se requiere autenticación para establecer un muro de texto"
 
 #: src/resolve/org.freedesktop.resolve1.policy:33
 msgid "Unregister a DNS-SD service"
-msgstr ""
+msgstr "Desregistrar un servicio DNS-SD"
 
 #: src/resolve/org.freedesktop.resolve1.policy:34
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to unregister a DNS-SD service"
 msgstr "Se requiere autenticación para establecer un muro de texto"
 
 #: src/resolve/org.freedesktop.resolve1.policy:132
 msgid "Revert name resolution settings"
-msgstr ""
+msgstr "Revertir configuración de resolución de nombres"
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
 msgstr "Se requiere autenticación para configurar el teclado del sistema."
 
@@ -1022,38 +973,33 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Necesita autenticarse para reiniciar «$(unit)»."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 #, fuzzy
-#| msgid "Authentication is required to set properties on '$(unit)'."
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 "Se requiere autenticación para establecer las propiedades de '$(unit)'."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Necesita autenticarse para reiniciar el estado de «fallido» de «$(unit)»."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Necesita autenticarse para establecer las propiedades de «$(unit)»."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 "Se requiere autenticación para reiniciar el estado de «fallido» de '$(unit)'."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/et.po b/po/et.po
new file mode 100644
index 0000000..e90426f
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,899 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# H A <contact+fedora@hen.ee>, 2022.
+msgid ""
+msgstr ""
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-24 15:23+0000\n"
+"Last-Translator: H A <contact+fedora@hen.ee>\n"
+"Language-Team: Estonian <https://translate.fedoraproject.org/projects/"
+"systemd/master/et/>\n"
+"Language: et\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.14.1\n"
+
+#: src/core/org.freedesktop.systemd1.policy.in:22
+msgid "Send passphrase back to system"
+msgstr ""
+
+#: src/core/org.freedesktop.systemd1.policy.in:23
+msgid ""
+"Authentication is required to send the entered passphrase back to the system."
+msgstr ""
+
+#: src/core/org.freedesktop.systemd1.policy.in:33
+msgid "Manage system services or other units"
+msgstr "Halda süsteemi teenuseid või teisi ühikuid"
+
+#: src/core/org.freedesktop.systemd1.policy.in:34
+msgid "Authentication is required to manage system services or other units."
+msgstr ""
+"Autentimine on vajalik, et hallata süsteemi teenuseid või teisi ühikuid."
+
+#: src/core/org.freedesktop.systemd1.policy.in:43
+msgid "Manage system service or unit files"
+msgstr "Halda süsteemi teenuseid või ühikfaile"
+
+#: src/core/org.freedesktop.systemd1.policy.in:44
+msgid "Authentication is required to manage system service or unit files."
+msgstr "Autentimine on vajalik, et hallata süsteemi teenuseid või ühikfaile."
+
+#: src/core/org.freedesktop.systemd1.policy.in:54
+msgid "Set or unset system and service manager environment variables"
+msgstr ""
+
+#: src/core/org.freedesktop.systemd1.policy.in:55
+msgid ""
+"Authentication is required to set or unset system and service manager "
+"environment variables."
+msgstr ""
+"Autentimine on vajalik, et määrata või kustutada süsteemi- või "
+"teenusehalduri keskkonnamuutujaid."
+
+#: src/core/org.freedesktop.systemd1.policy.in:64
+msgid "Reload the systemd state"
+msgstr "Lae systemd olek uuesti"
+
+#: src/core/org.freedesktop.systemd1.policy.in:65
+msgid "Authentication is required to reload the systemd state."
+msgstr "Autentimine on vajalik, et laadida systemd olekut uuesti."
+
+#: src/home/org.freedesktop.home1.policy:13
+msgid "Create a home area"
+msgstr "Loo koduala"
+
+#: src/home/org.freedesktop.home1.policy:14
+msgid "Authentication is required to create a user's home area."
+msgstr "Autentimine on vajalik, et luua kasutaja koduala."
+
+#: src/home/org.freedesktop.home1.policy:23
+msgid "Remove a home area"
+msgstr "Eemalda koduala"
+
+#: src/home/org.freedesktop.home1.policy:24
+msgid "Authentication is required to remove a user's home area."
+msgstr "Autentmine on vajalik, et eemaldada kasutaja koduala."
+
+#: src/home/org.freedesktop.home1.policy:33
+msgid "Check credentials of a home area"
+msgstr ""
+
+#: src/home/org.freedesktop.home1.policy:34
+msgid ""
+"Authentication is required to check credentials against a user's home area."
+msgstr ""
+
+#: src/home/org.freedesktop.home1.policy:43
+msgid "Update a home area"
+msgstr "Uuenda koduala"
+
+#: src/home/org.freedesktop.home1.policy:44
+msgid "Authentication is required to update a user's home area."
+msgstr "Autentmine on vajalik, et uuendada kasutaja koduala."
+
+#: src/home/org.freedesktop.home1.policy:53
+msgid "Resize a home area"
+msgstr "Muuda koduala suurust"
+
+#: src/home/org.freedesktop.home1.policy:54
+msgid "Authentication is required to resize a user's home area."
+msgstr "Autentmine on vajalik, et muuta kasutaja koduala suurust."
+
+#: src/home/org.freedesktop.home1.policy:63
+msgid "Change password of a home area"
+msgstr "Muuda koduala parooli"
+
+#: src/home/org.freedesktop.home1.policy:64
+msgid ""
+"Authentication is required to change the password of a user's home area."
+msgstr "Autentimine on vajalik, et muuta kasutaja koduala parooli."
+
+#: src/hostname/org.freedesktop.hostname1.policy:20
+msgid "Set hostname"
+msgstr "Säti hostinimi"
+
+#: src/hostname/org.freedesktop.hostname1.policy:21
+msgid "Authentication is required to set the local hostname."
+msgstr "Autentmine on vajalik, et sättida kohaliku hostinime."
+
+#: src/hostname/org.freedesktop.hostname1.policy:30
+msgid "Set static hostname"
+msgstr "Säti staatiline hostinimi"
+
+#: src/hostname/org.freedesktop.hostname1.policy:31
+msgid ""
+"Authentication is required to set the statically configured local hostname, "
+"as well as the pretty hostname."
+msgstr ""
+"Autentmine on vajalik, et sättida staatiline konfigureeritud kohalikku "
+"hostinime ja ka kena hostinime."
+
+#: src/hostname/org.freedesktop.hostname1.policy:41
+msgid "Set machine information"
+msgstr "Määra süsteemi informatsiooni"
+
+#: src/hostname/org.freedesktop.hostname1.policy:42
+msgid "Authentication is required to set local machine information."
+msgstr "Autentimine on vajalik, et määrata kohaliku süsteemi informatsiooni."
+
+#: src/hostname/org.freedesktop.hostname1.policy:51
+msgid "Get product UUID"
+msgstr "Saa toote UUID"
+
+#: src/hostname/org.freedesktop.hostname1.policy:52
+msgid "Authentication is required to get product UUID."
+msgstr "Autentmine on vajalik, et saada toote UUID."
+
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Hangi riistvara seerianumber"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Autentimine on vajalik, et hankida riistvara seerianumber."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Hangi süsteemi kirjeldus"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Autentimine on vajalik, et hankida süsteemi kirjeldust."
+
+#: src/import/org.freedesktop.import1.policy:22
+msgid "Import a VM or container image"
+msgstr "Impordi VM või konteinerpilti"
+
+#: src/import/org.freedesktop.import1.policy:23
+msgid "Authentication is required to import a VM or container image"
+msgstr "Autentmine on vajalik, et importida VM või konteinerpilti"
+
+#: src/import/org.freedesktop.import1.policy:32
+msgid "Export a VM or container image"
+msgstr "Ekspordi VM või konteinerpilti"
+
+#: src/import/org.freedesktop.import1.policy:33
+msgid "Authentication is required to export a VM or container image"
+msgstr "Autentmine on vajalik, et eksportida VM või konteinerpilti"
+
+#: src/import/org.freedesktop.import1.policy:42
+msgid "Download a VM or container image"
+msgstr "Lae alla VM või konteinerpildi"
+
+#: src/import/org.freedesktop.import1.policy:43
+msgid "Authentication is required to download a VM or container image"
+msgstr "Autentmine on vajalik, et laadida alla VM või konteinerpildi"
+
+#: src/locale/org.freedesktop.locale1.policy:22
+msgid "Set system locale"
+msgstr "Määra süsteemi lokaali"
+
+#: src/locale/org.freedesktop.locale1.policy:23
+msgid "Authentication is required to set the system locale."
+msgstr "Autentimine on vajalik, et määrata süsteemi lokaali."
+
+#: src/locale/org.freedesktop.locale1.policy:33
+msgid "Set system keyboard settings"
+msgstr "Määra süsteemi klaviatuuriseadeid"
+
+#: src/locale/org.freedesktop.locale1.policy:34
+msgid "Authentication is required to set the system keyboard settings."
+msgstr "Autentimine on vajalik, et määrata süsteemi klaviatuurisätteid."
+
+#: src/login/org.freedesktop.login1.policy:22
+msgid "Allow applications to inhibit system shutdown"
+msgstr "Luba rakendustel takistada süsteemi välja lülitamist"
+
+#: src/login/org.freedesktop.login1.policy:23
+msgid ""
+"Authentication is required for an application to inhibit system shutdown."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:33
+msgid "Allow applications to delay system shutdown"
+msgstr "Luba rakendustel viivitada süsteemi välja lülitamist"
+
+#: src/login/org.freedesktop.login1.policy:34
+msgid "Authentication is required for an application to delay system shutdown."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:44
+msgid "Allow applications to inhibit system sleep"
+msgstr "Luba rakendustel takistada süsteemi unerežiimi"
+
+#: src/login/org.freedesktop.login1.policy:45
+msgid "Authentication is required for an application to inhibit system sleep."
+msgstr "Autentimine on vajalik, et rakendus takistaks süsteemi unerežiimi."
+
+#: src/login/org.freedesktop.login1.policy:55
+msgid "Allow applications to delay system sleep"
+msgstr "Luba rakendustel viivitada süsteemi unerežiimi"
+
+#: src/login/org.freedesktop.login1.policy:56
+msgid "Authentication is required for an application to delay system sleep."
+msgstr "Autentimine on vajalik, et rakendus viivitaks süsteemi unerežiimi."
+
+#: src/login/org.freedesktop.login1.policy:65
+msgid "Allow applications to inhibit automatic system suspend"
+msgstr "Luba rakendustel takistada automaatset süsteemiuinakut"
+
+#: src/login/org.freedesktop.login1.policy:66
+msgid ""
+"Authentication is required for an application to inhibit automatic system "
+"suspend."
+msgstr ""
+"Autentimine on vajalik, et rakendus takistaks automaatset süsteemiuinakut."
+
+#: src/login/org.freedesktop.login1.policy:75
+msgid "Allow applications to inhibit system handling of the power key"
+msgstr "Luba rakendustel blokeerida süsteemi toitenuppu"
+
+#: src/login/org.freedesktop.login1.policy:76
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the power key."
+msgstr "Autentimine on vajalik, et rakendus blokeeriks süsteemi toitenuppu."
+
+#: src/login/org.freedesktop.login1.policy:86
+msgid "Allow applications to inhibit system handling of the suspend key"
+msgstr "Luba rakendustel blokeerida süsteemi uinakunuppu"
+
+#: src/login/org.freedesktop.login1.policy:87
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the suspend key."
+msgstr "Autentimine on vajalik, et rakendus blokeeriks süsteemi uinakunuppu."
+
+#: src/login/org.freedesktop.login1.policy:97
+msgid "Allow applications to inhibit system handling of the hibernate key"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:98
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the hibernate key."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:107
+msgid "Allow applications to inhibit system handling of the lid switch"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:108
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the lid switch."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:117
+msgid "Allow applications to inhibit system handling of the reboot key"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:118
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the reboot key."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:128
+msgid "Allow non-logged-in user to run programs"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:129
+msgid "Explicit request is required to run programs as a non-logged-in user."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:138
+msgid "Allow non-logged-in users to run programs"
+msgstr "Luba mitte sisse logitud kasutajadel programme käivitada"
+
+#: src/login/org.freedesktop.login1.policy:139
+msgid "Authentication is required to run programs as a non-logged-in user."
+msgstr ""
+"Autentimine on vajalik, et käivitada programme mitte sisse logitud "
+"kasutajana."
+
+#: src/login/org.freedesktop.login1.policy:148
+msgid "Allow attaching devices to seats"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:149
+msgid "Authentication is required to attach a device to a seat."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:159
+msgid "Flush device to seat attachments"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:160
+msgid "Authentication is required to reset how devices are attached to seats."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:169
+msgid "Power off the system"
+msgstr "Lülita välja süsteem"
+
+#: src/login/org.freedesktop.login1.policy:170
+msgid "Authentication is required to power off the system."
+msgstr "Autentimine on vajalik, et lülitada süsteemi välja."
+
+#: src/login/org.freedesktop.login1.policy:180
+msgid "Power off the system while other users are logged in"
+msgstr "Lülita välja süsteem, isegi kui teised kasutajad on sisse logitud"
+
+#: src/login/org.freedesktop.login1.policy:181
+msgid ""
+"Authentication is required to power off the system while other users are "
+"logged in."
+msgstr ""
+"Autentimine on vajalik, et lülitada süsteemi välja, kui teised kasutajad on "
+"sisse logitud."
+
+#: src/login/org.freedesktop.login1.policy:191
+msgid "Power off the system while an application is inhibiting this"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:192
+msgid ""
+"Authentication is required to power off the system while an application is "
+"inhibiting this."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:202
+msgid "Reboot the system"
+msgstr "Taaskäivita süsteem"
+
+#: src/login/org.freedesktop.login1.policy:203
+msgid "Authentication is required to reboot the system."
+msgstr "Autentimine on vajalik, et taaskäivitada süsteemi."
+
+#: src/login/org.freedesktop.login1.policy:213
+msgid "Reboot the system while other users are logged in"
+msgstr "Taaskäivita süsteem, isegi kui teised kasutajad on sisse logitud"
+
+#: src/login/org.freedesktop.login1.policy:214
+msgid ""
+"Authentication is required to reboot the system while other users are logged "
+"in."
+msgstr ""
+"Autentimine on vajalik, et taaskäivitada süsteemi, kui teised kasutajad on "
+"sisse logitud."
+
+#: src/login/org.freedesktop.login1.policy:224
+msgid "Reboot the system while an application is inhibiting this"
+msgstr "Taaskäivita süsteem, kui üks rakendus takistab seda"
+
+#: src/login/org.freedesktop.login1.policy:225
+msgid ""
+"Authentication is required to reboot the system while an application is "
+"inhibiting this."
+msgstr ""
+"Autentimine on vajalik, et taaskäivitada süsteemi, kui rakendus takistab "
+"seda."
+
+#: src/login/org.freedesktop.login1.policy:235
+msgid "Halt the system"
+msgstr "Peata süsteem"
+
+#: src/login/org.freedesktop.login1.policy:236
+msgid "Authentication is required to halt the system."
+msgstr "Autentimine on vajalik, et peatada süsteemi."
+
+#: src/login/org.freedesktop.login1.policy:246
+msgid "Halt the system while other users are logged in"
+msgstr "Peata süsteem, isegi kui teised kasutajad on sisse logitud"
+
+#: src/login/org.freedesktop.login1.policy:247
+msgid ""
+"Authentication is required to halt the system while other users are logged "
+"in."
+msgstr ""
+"Autentimine on vajalik, et peatada süsteemi, kui teised kasutajad on sisse "
+"logitud."
+
+#: src/login/org.freedesktop.login1.policy:257
+msgid "Halt the system while an application is inhibiting this"
+msgstr "Peata süsteem, kui üks rakendus takistab seda"
+
+#: src/login/org.freedesktop.login1.policy:258
+msgid ""
+"Authentication is required to halt the system while an application is "
+"inhibiting this."
+msgstr ""
+"Autentimine on vajalik, et peatada süsteemi, kui üks rakendus takistab seda."
+
+#: src/login/org.freedesktop.login1.policy:268
+msgid "Suspend the system"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:269
+msgid "Authentication is required to suspend the system."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:278
+msgid "Suspend the system while other users are logged in"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:279
+msgid ""
+"Authentication is required to suspend the system while other users are "
+"logged in."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:289
+msgid "Suspend the system while an application is inhibiting this"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:290
+msgid ""
+"Authentication is required to suspend the system while an application is "
+"inhibiting this."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:300
+msgid "Hibernate the system"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:301
+msgid "Authentication is required to hibernate the system."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:310
+msgid "Hibernate the system while other users are logged in"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:311
+msgid ""
+"Authentication is required to hibernate the system while other users are "
+"logged in."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:321
+msgid "Hibernate the system while an application is inhibiting this"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:322
+msgid ""
+"Authentication is required to hibernate the system while an application is "
+"inhibiting this."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:332
+msgid "Manage active sessions, users and seats"
+msgstr "Halda aktiivseid seansse, kasutajaid ja kohti"
+
+#: src/login/org.freedesktop.login1.policy:333
+msgid "Authentication is required to manage active sessions, users and seats."
+msgstr ""
+"Autentimine on vajalik, et hallata aktiivseid seansse, kasutajaid ning kohti."
+
+#: src/login/org.freedesktop.login1.policy:342
+msgid "Lock or unlock active sessions"
+msgstr "Lukusta või ava aktiivseid seansse"
+
+#: src/login/org.freedesktop.login1.policy:343
+msgid "Authentication is required to lock or unlock active sessions."
+msgstr "Autentimine on vajalik, et lukustada või avada aktiivseid seansse."
+
+#: src/login/org.freedesktop.login1.policy:352
+msgid "Set the reboot \"reason\" in the kernel"
+msgstr "Määra taaskäivitamise \"põhjus\" kernelis"
+
+#: src/login/org.freedesktop.login1.policy:353
+msgid "Authentication is required to set the reboot \"reason\" in the kernel."
+msgstr ""
+"Autentimine on vajalik, et määrata taaskäivitamise \"põhjuse\" kernelis."
+
+#: src/login/org.freedesktop.login1.policy:363
+msgid "Indicate to the firmware to boot to setup interface"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:364
+msgid ""
+"Authentication is required to indicate to the firmware to boot to setup "
+"interface."
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:374
+msgid "Indicate to the boot loader to boot to the boot loader menu"
+msgstr "Viita buudilaadurile, et buutida buudilaaduri menüüsse"
+
+#: src/login/org.freedesktop.login1.policy:375
+msgid ""
+"Authentication is required to indicate to the boot loader to boot to the "
+"boot loader menu."
+msgstr ""
+"Autentimine on vajalik, et viitata buudilaadurile, et buutida buudilaaduri "
+"menüüsse."
+
+#: src/login/org.freedesktop.login1.policy:385
+msgid "Indicate to the boot loader to boot a specific entry"
+msgstr "Viita buudilaadurile, et buutida spetsiifiline valik"
+
+#: src/login/org.freedesktop.login1.policy:386
+msgid ""
+"Authentication is required to indicate to the boot loader to boot into a "
+"specific boot loader entry."
+msgstr ""
+"Autentimine on vajalik, et viitata buudilaadurile, et buutida spetsiifilist "
+"buudilaaduri valikut."
+
+#: src/login/org.freedesktop.login1.policy:396
+msgid "Set a wall message"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:397
+msgid "Authentication is required to set a wall message"
+msgstr ""
+
+#: src/login/org.freedesktop.login1.policy:406
+msgid "Change Session"
+msgstr "Vaheta sessiooni"
+
+#: src/login/org.freedesktop.login1.policy:407
+msgid "Authentication is required to change the virtual terminal."
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:22
+msgid "Log into a local container"
+msgstr "Logi sisse kohalikku konteinerisse"
+
+#: src/machine/org.freedesktop.machine1.policy:23
+msgid "Authentication is required to log into a local container."
+msgstr "Autentimine on vajalik, et logida sisse kohalikku konteinerisse."
+
+#: src/machine/org.freedesktop.machine1.policy:32
+msgid "Log into the local host"
+msgstr "Logi sisse kohalikku hosti"
+
+#: src/machine/org.freedesktop.machine1.policy:33
+msgid "Authentication is required to log into the local host."
+msgstr "Autentimine on vajalik, et logida sisse kohalikku hosti."
+
+#: src/machine/org.freedesktop.machine1.policy:42
+msgid "Acquire a shell in a local container"
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:43
+msgid "Authentication is required to acquire a shell in a local container."
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:53
+msgid "Acquire a shell on the local host"
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:54
+msgid "Authentication is required to acquire a shell on the local host."
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:64
+msgid "Acquire a pseudo TTY in a local container"
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:65
+msgid ""
+"Authentication is required to acquire a pseudo TTY in a local container."
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:74
+msgid "Acquire a pseudo TTY on the local host"
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:75
+msgid "Authentication is required to acquire a pseudo TTY on the local host."
+msgstr ""
+
+#: src/machine/org.freedesktop.machine1.policy:84
+msgid "Manage local virtual machines and containers"
+msgstr "Halda kohalikke virtuaalsüsteeme ja konteinereid"
+
+#: src/machine/org.freedesktop.machine1.policy:85
+msgid ""
+"Authentication is required to manage local virtual machines and containers."
+msgstr ""
+"Autentimine on vajalik, et hallata kohalikke virtuaalsüsteeme ja "
+"konteinereid."
+
+#: src/machine/org.freedesktop.machine1.policy:95
+msgid "Manage local virtual machine and container images"
+msgstr "Halda kohalikke virtuaalmasinaid ja konteinerpilte"
+
+#: src/machine/org.freedesktop.machine1.policy:96
+msgid ""
+"Authentication is required to manage local virtual machine and container "
+"images."
+msgstr ""
+"Autentimine on vajalik, et hallata kohalikke virtuaalmasinaid ja "
+"konteinerpilte."
+
+#: src/network/org.freedesktop.network1.policy:22
+msgid "Set NTP servers"
+msgstr "Säti NTP servereid"
+
+#: src/network/org.freedesktop.network1.policy:23
+msgid "Authentication is required to set NTP servers."
+msgstr "Autentimine on vajalik, et seadistada NTP servereid."
+
+#: src/network/org.freedesktop.network1.policy:33
+#: src/resolve/org.freedesktop.resolve1.policy:44
+msgid "Set DNS servers"
+msgstr "Säti DNS serverid"
+
+#: src/network/org.freedesktop.network1.policy:34
+#: src/resolve/org.freedesktop.resolve1.policy:45
+msgid "Authentication is required to set DNS servers."
+msgstr "Autentimine on vajalik, et seadistada DNS servereid."
+
+#: src/network/org.freedesktop.network1.policy:44
+#: src/resolve/org.freedesktop.resolve1.policy:55
+msgid "Set domains"
+msgstr "Säti domeenid"
+
+#: src/network/org.freedesktop.network1.policy:45
+#: src/resolve/org.freedesktop.resolve1.policy:56
+msgid "Authentication is required to set domains."
+msgstr "Autentimine on vajalik, et seadistada domeene."
+
+#: src/network/org.freedesktop.network1.policy:55
+#: src/resolve/org.freedesktop.resolve1.policy:66
+msgid "Set default route"
+msgstr "Säti default route"
+
+#: src/network/org.freedesktop.network1.policy:56
+#: src/resolve/org.freedesktop.resolve1.policy:67
+msgid "Authentication is required to set default route."
+msgstr "Autentimine on vajalik, et seadistada default route."
+
+#: src/network/org.freedesktop.network1.policy:66
+#: src/resolve/org.freedesktop.resolve1.policy:77
+msgid "Enable/disable LLMNR"
+msgstr "Lülita LLMNR sisse/välja"
+
+#: src/network/org.freedesktop.network1.policy:67
+#: src/resolve/org.freedesktop.resolve1.policy:78
+msgid "Authentication is required to enable or disable LLMNR."
+msgstr "Autentimine on vajalik, et LLMNR lülitada sisse või välja."
+
+#: src/network/org.freedesktop.network1.policy:77
+#: src/resolve/org.freedesktop.resolve1.policy:88
+msgid "Enable/disable multicast DNS"
+msgstr "Lülita multicast DNS sisse/välja"
+
+#: src/network/org.freedesktop.network1.policy:78
+#: src/resolve/org.freedesktop.resolve1.policy:89
+msgid "Authentication is required to enable or disable multicast DNS."
+msgstr "Autentimine on vajalik, et multicast DNS lülitada sisse või välja."
+
+#: src/network/org.freedesktop.network1.policy:88
+#: src/resolve/org.freedesktop.resolve1.policy:99
+msgid "Enable/disable DNS over TLS"
+msgstr "Lülita DNS üle TLS sisse/välja"
+
+#: src/network/org.freedesktop.network1.policy:89
+#: src/resolve/org.freedesktop.resolve1.policy:100
+msgid "Authentication is required to enable or disable DNS over TLS."
+msgstr "Autentimine on vajalik, et DNS üle TLS'i lülitada sisse või välja."
+
+#: src/network/org.freedesktop.network1.policy:99
+#: src/resolve/org.freedesktop.resolve1.policy:110
+msgid "Enable/disable DNSSEC"
+msgstr "Lülita DNSSEC sisse/välja"
+
+#: src/network/org.freedesktop.network1.policy:100
+#: src/resolve/org.freedesktop.resolve1.policy:111
+msgid "Authentication is required to enable or disable DNSSEC."
+msgstr "Autentimine on vajalik, et DNSSEC lülitada sisse või välja."
+
+#: src/network/org.freedesktop.network1.policy:110
+#: src/resolve/org.freedesktop.resolve1.policy:121
+msgid "Set DNSSEC Negative Trust Anchors"
+msgstr "Säti DNSSEC negatiivsed usaldusankrud"
+
+#: src/network/org.freedesktop.network1.policy:111
+#: src/resolve/org.freedesktop.resolve1.policy:122
+msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
+msgstr ""
+"Autentimine on vajalik, et seadistada DNSSEC negatiivsed usaldusankrud."
+
+#: src/network/org.freedesktop.network1.policy:121
+msgid "Revert NTP settings"
+msgstr "Taasta NTP sätted"
+
+#: src/network/org.freedesktop.network1.policy:122
+msgid "Authentication is required to reset NTP settings."
+msgstr "Autentimine on vajalik, et taastada NTP sätted."
+
+#: src/network/org.freedesktop.network1.policy:132
+msgid "Revert DNS settings"
+msgstr "Taasta DNS sätted"
+
+#: src/network/org.freedesktop.network1.policy:133
+msgid "Authentication is required to reset DNS settings."
+msgstr "Autentimine on vajalik, et lähtestada DNS sätted."
+
+#: src/network/org.freedesktop.network1.policy:143
+msgid "DHCP server sends force renew message"
+msgstr "DHCP server saadab sunduuendamise sõnumi"
+
+#: src/network/org.freedesktop.network1.policy:144
+msgid "Authentication is required to send force renew message."
+msgstr "Autentimine on vajalik, et saata sunduuendamis sõnumi."
+
+#: src/network/org.freedesktop.network1.policy:154
+msgid "Renew dynamic addresses"
+msgstr "Uuenda dünaamilist aadressit"
+
+#: src/network/org.freedesktop.network1.policy:155
+msgid "Authentication is required to renew dynamic addresses."
+msgstr "Autentimine on vajalik, et uuendada dünaamilist aadressit."
+
+#: src/network/org.freedesktop.network1.policy:165
+msgid "Reload network settings"
+msgstr "Lae võrgu seaded uuesti"
+
+#: src/network/org.freedesktop.network1.policy:166
+msgid "Authentication is required to reload network settings."
+msgstr "Autentimine on vajalik, et laadida võrgu seaded uuesti."
+
+#: src/network/org.freedesktop.network1.policy:176
+msgid "Reconfigure network interface"
+msgstr "Määra võrguliides"
+
+#: src/network/org.freedesktop.network1.policy:177
+msgid "Authentication is required to reconfigure network interface."
+msgstr "Autentimine on vajalik, et määrata võrguliidese."
+
+#: src/portable/org.freedesktop.portable1.policy:13
+msgid "Inspect a portable service image"
+msgstr ""
+
+#: src/portable/org.freedesktop.portable1.policy:14
+msgid "Authentication is required to inspect a portable service image."
+msgstr ""
+
+#: src/portable/org.freedesktop.portable1.policy:23
+msgid "Attach or detach a portable service image"
+msgstr ""
+
+#: src/portable/org.freedesktop.portable1.policy:24
+msgid ""
+"Authentication is required to attach or detach a portable service image."
+msgstr ""
+
+#: src/portable/org.freedesktop.portable1.policy:34
+msgid "Delete or modify portable service image"
+msgstr ""
+
+#: src/portable/org.freedesktop.portable1.policy:35
+msgid ""
+"Authentication is required to delete or modify a portable service image."
+msgstr ""
+
+#: src/resolve/org.freedesktop.resolve1.policy:22
+msgid "Register a DNS-SD service"
+msgstr "Registeeri DNS-SD teenust"
+
+#: src/resolve/org.freedesktop.resolve1.policy:23
+msgid "Authentication is required to register a DNS-SD service"
+msgstr "Autentimine on vajalik, et registeerida DNS-SD teenust"
+
+#: src/resolve/org.freedesktop.resolve1.policy:33
+msgid "Unregister a DNS-SD service"
+msgstr ""
+
+#: src/resolve/org.freedesktop.resolve1.policy:34
+msgid "Authentication is required to unregister a DNS-SD service"
+msgstr ""
+
+#: src/resolve/org.freedesktop.resolve1.policy:132
+msgid "Revert name resolution settings"
+msgstr "Lähtesta nimeteenuse seadeid"
+
+#: src/resolve/org.freedesktop.resolve1.policy:133
+msgid "Authentication is required to reset name resolution settings."
+msgstr "Autentimine on vajalik, et lähtestada nimeteenuse seadeid."
+
+#: src/timedate/org.freedesktop.timedate1.policy:22
+msgid "Set system time"
+msgstr "Määra süsteemi aeg"
+
+#: src/timedate/org.freedesktop.timedate1.policy:23
+msgid "Authentication is required to set the system time."
+msgstr "Autentimine on vajalik, et määrata süsteemi aega."
+
+#: src/timedate/org.freedesktop.timedate1.policy:33
+msgid "Set system timezone"
+msgstr "Määra süsteemi ajavööndit"
+
+#: src/timedate/org.freedesktop.timedate1.policy:34
+msgid "Authentication is required to set the system timezone."
+msgstr "Autentimine on vajalik, et määrata süsteemi ajavööndit."
+
+#: src/timedate/org.freedesktop.timedate1.policy:43
+msgid "Set RTC to local timezone or UTC"
+msgstr "Määra RTC (reaalaja kella) kohaliku ajavööndina või UTC'na"
+
+#: src/timedate/org.freedesktop.timedate1.policy:44
+msgid ""
+"Authentication is required to control whether the RTC stores the local or "
+"UTC time."
+msgstr ""
+"Autentimine on vajalik, et kontrollida kas RTC hoiab kohalikku või UTC aega."
+
+#: src/timedate/org.freedesktop.timedate1.policy:53
+msgid "Turn network time synchronization on or off"
+msgstr "Lülita võrgu ajasünkroneerimine sisse või välja"
+
+#: src/timedate/org.freedesktop.timedate1.policy:54
+msgid ""
+"Authentication is required to control whether network time synchronization "
+"shall be enabled."
+msgstr ""
+"Autentimine on vajalik, et kontrollida kas võrgu ajasünkroneerimine peaks "
+"olema lubatud."
+
+#: src/core/dbus-unit.c:359
+msgid "Authentication is required to start '$(unit)'."
+msgstr "Autentimine on vajalik, et käivitada '$(unit)'."
+
+#: src/core/dbus-unit.c:360
+msgid "Authentication is required to stop '$(unit)'."
+msgstr "Autentimine on vajalik, et peatada '$(unit)'."
+
+#: src/core/dbus-unit.c:361
+msgid "Authentication is required to reload '$(unit)'."
+msgstr "Autentimine on vajalik, et laadida '$(unit)' uuesti."
+
+#: src/core/dbus-unit.c:362 src/core/dbus-unit.c:363
+msgid "Authentication is required to restart '$(unit)'."
+msgstr "Autentimine on vajalik, et restartida '$(unit)'."
+
+#: src/core/dbus-unit.c:546
+msgid ""
+"Authentication is required to send a UNIX signal to the processes of "
+"'$(unit)'."
+msgstr ""
+"Autentimine on vajalik, et saata UNIX signaali '$(unit)' protsessidele."
+
+#: src/core/dbus-unit.c:576
+msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
+msgstr ""
+"Autentimine on vajalik, et lähtestada '$(unit)' \"ebaõnnestunud\" olekut."
+
+#: src/core/dbus-unit.c:608
+msgid "Authentication is required to set properties on '$(unit)'."
+msgstr "Autentimine on vajalik, et määrata '$(unit)' omadusi."
+
+#: src/core/dbus-unit.c:714
+msgid ""
+"Authentication is required to delete files and directories associated with "
+"'$(unit)'."
+msgstr "Autentimine on vajalik, et kustutada '$(unit)' faile ja kauste."
+
+#: src/core/dbus-unit.c:762
+msgid ""
+"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
+msgstr ""
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..4cf9c48
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,955 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# Finnish translation of systemd.
+# Jan Kuparinen <copper_fin@hotmail.com>, 2021, 2022.
+# Ricky Tigg <ricky.tigg@gmail.com>, 2022.
+msgid ""
+msgstr ""
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-11-10 19:19+0000\n"
+"Last-Translator: Ricky Tigg <ricky.tigg@gmail.com>\n"
+"Language-Team: Finnish <https://translate.fedoraproject.org/projects/systemd/"
+"master/fi/>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.14.2\n"
+
+#: src/core/org.freedesktop.systemd1.policy.in:22
+msgid "Send passphrase back to system"
+msgstr "Lähetä tunnuslause takaisin järjestelmään"
+
+#: src/core/org.freedesktop.systemd1.policy.in:23
+msgid ""
+"Authentication is required to send the entered passphrase back to the system."
+msgstr ""
+"Todennus vaaditaan jotta syötetty tunnuslause lähetetään takaisin "
+"järjestelmään."
+
+#: src/core/org.freedesktop.systemd1.policy.in:33
+msgid "Manage system services or other units"
+msgstr "Hallinnoi järjestelmäpalveluja tai muita yksiköitä"
+
+#: src/core/org.freedesktop.systemd1.policy.in:34
+msgid "Authentication is required to manage system services or other units."
+msgstr ""
+"Todennus vaaditaan järjestelmäpalvelujen tai muiden yksiköiden hallintaan."
+
+#: src/core/org.freedesktop.systemd1.policy.in:43
+msgid "Manage system service or unit files"
+msgstr "Hallitse järjestelmäpalvelu- tai yksikkötiedostoja"
+
+#: src/core/org.freedesktop.systemd1.policy.in:44
+msgid "Authentication is required to manage system service or unit files."
+msgstr ""
+"Todennus vaaditaan järjestelmän palvelu- tai yksikkötiedostojen hallintaan."
+
+#: src/core/org.freedesktop.systemd1.policy.in:54
+msgid "Set or unset system and service manager environment variables"
+msgstr "Aseta tai poista järjestelmän ja palvelunhallinnan ympäristömuuttujia"
+
+#: src/core/org.freedesktop.systemd1.policy.in:55
+msgid ""
+"Authentication is required to set or unset system and service manager "
+"environment variables."
+msgstr ""
+"Todennus vaaditaan järjestelmän ja palvelunhallinnan ympäristömuuttujien "
+"asettamiseen tai poistamiseen."
+
+#: src/core/org.freedesktop.systemd1.policy.in:64
+msgid "Reload the systemd state"
+msgstr "Lataa järjestelmätila uudelleen"
+
+#: src/core/org.freedesktop.systemd1.policy.in:65
+msgid "Authentication is required to reload the systemd state."
+msgstr "Todennus vaaditaan, jotta järjestelmätila voidaan ladata uudelleen."
+
+#: src/home/org.freedesktop.home1.policy:13
+msgid "Create a home area"
+msgstr "Luo kotialue"
+
+#: src/home/org.freedesktop.home1.policy:14
+msgid "Authentication is required to create a user's home area."
+msgstr "Todennus vaaditaan käyttäjän kotialueen luomiseksi."
+
+#: src/home/org.freedesktop.home1.policy:23
+msgid "Remove a home area"
+msgstr "Poista kotialue"
+
+#: src/home/org.freedesktop.home1.policy:24
+msgid "Authentication is required to remove a user's home area."
+msgstr "Todennus vaaditaan käyttäjän kotialueen poistamiseksi."
+
+#: src/home/org.freedesktop.home1.policy:33
+msgid "Check credentials of a home area"
+msgstr "Tarkista kotialueen valtuudet"
+
+#: src/home/org.freedesktop.home1.policy:34
+msgid ""
+"Authentication is required to check credentials against a user's home area."
+msgstr ""
+"Todennus vaaditaan, jotta käyttäjän kotialueen valtuuksia voi tarkistaa."
+
+#: src/home/org.freedesktop.home1.policy:43
+msgid "Update a home area"
+msgstr "Päivitä kotialue"
+
+#: src/home/org.freedesktop.home1.policy:44
+msgid "Authentication is required to update a user's home area."
+msgstr "Todennus vaaditaan käyttäjän kotialueen päivittämiseksi."
+
+#: src/home/org.freedesktop.home1.policy:53
+msgid "Resize a home area"
+msgstr "Muuta kotialueen kokoa"
+
+#: src/home/org.freedesktop.home1.policy:54
+msgid "Authentication is required to resize a user's home area."
+msgstr "Todennus vaaditaan käyttäjän kotialueen koon muuttamiseksi."
+
+#: src/home/org.freedesktop.home1.policy:63
+msgid "Change password of a home area"
+msgstr "Muuta kotialueen salasana"
+
+#: src/home/org.freedesktop.home1.policy:64
+msgid ""
+"Authentication is required to change the password of a user's home area."
+msgstr "Todennus vaaditaan käyttäjän kotialueen salasanan vaihtamiseksi."
+
+#: src/hostname/org.freedesktop.hostname1.policy:20
+msgid "Set hostname"
+msgstr "Määritä konenimi"
+
+#: src/hostname/org.freedesktop.hostname1.policy:21
+msgid "Authentication is required to set the local hostname."
+msgstr "Todennus vaaditaan paikallisen koneennimen asettamiseksi."
+
+#: src/hostname/org.freedesktop.hostname1.policy:30
+msgid "Set static hostname"
+msgstr "Aseta staattinen koneen nimi"
+
+#: src/hostname/org.freedesktop.hostname1.policy:31
+msgid ""
+"Authentication is required to set the statically configured local hostname, "
+"as well as the pretty hostname."
+msgstr ""
+"Todennus vaaditaan staattisesti määritetyn paikallisen konenimen ja kauniin "
+"konenimen asettamiseksi."
+
+#: src/hostname/org.freedesktop.hostname1.policy:41
+msgid "Set machine information"
+msgstr "Aseta koneen tiedot"
+
+#: src/hostname/org.freedesktop.hostname1.policy:42
+msgid "Authentication is required to set local machine information."
+msgstr "Todennus vaaditaan paikallisten konetietojen asettamiseksi."
+
+#: src/hostname/org.freedesktop.hostname1.policy:51
+msgid "Get product UUID"
+msgstr "Hae tuotteen UUID"
+
+#: src/hostname/org.freedesktop.hostname1.policy:52
+msgid "Authentication is required to get product UUID."
+msgstr "Todennus vaaditaan tuotteen UUID-tunnuksen hakemiseksi."
+
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Hanki laitteiston sarjanumero"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Laitteiston sarjanumeron saamiseksi vaaditaan todennus."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Hanki järjestelmän kuvaus"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Järjestelmän kuvauksen saamiseksi vaaditaan todennus."
+
+#: src/import/org.freedesktop.import1.policy:22
+msgid "Import a VM or container image"
+msgstr "Tuo virtuaalikoneen tai kontin levykuva"
+
+#: src/import/org.freedesktop.import1.policy:23
+msgid "Authentication is required to import a VM or container image"
+msgstr ""
+"Todennus vaaditaan, jos haluat tuoda virtuaalikoneen tai kontin levykuvan"
+
+#: src/import/org.freedesktop.import1.policy:32
+msgid "Export a VM or container image"
+msgstr "Vie virtuaalikoneen tai kontin levykuva"
+
+#: src/import/org.freedesktop.import1.policy:33
+msgid "Authentication is required to export a VM or container image"
+msgstr ""
+"Todennus vaaditaan, jos haluat viedä virtuaalikoneen tai kontin levykuvan"
+
+#: src/import/org.freedesktop.import1.policy:42
+msgid "Download a VM or container image"
+msgstr "Lataa virtuaalikoneen tai kontin levykuva"
+
+#: src/import/org.freedesktop.import1.policy:43
+msgid "Authentication is required to download a VM or container image"
+msgstr ""
+"Todennus vaaditaan, jos haluat ladata virtuaalikoneen tai kontin levykuvan"
+
+#: src/locale/org.freedesktop.locale1.policy:22
+msgid "Set system locale"
+msgstr "Aseta järjestelmän alue"
+
+#: src/locale/org.freedesktop.locale1.policy:23
+msgid "Authentication is required to set the system locale."
+msgstr "Todennus vaaditaan järjestelmän alueasetuksen asettamiseksi."
+
+#: src/locale/org.freedesktop.locale1.policy:33
+msgid "Set system keyboard settings"
+msgstr "Määritä järjestelmän näppäimistöasetukset"
+
+#: src/locale/org.freedesktop.locale1.policy:34
+msgid "Authentication is required to set the system keyboard settings."
+msgstr "Todennus vaaditaan järjestelmän näppäimistöasetusten määrittämiseksi."
+
+#: src/login/org.freedesktop.login1.policy:22
+msgid "Allow applications to inhibit system shutdown"
+msgstr "Salli sovellusten estää järjestelmän sammuttaminen"
+
+#: src/login/org.freedesktop.login1.policy:23
+msgid ""
+"Authentication is required for an application to inhibit system shutdown."
+msgstr "Todennus vaaditaan, jotta sovellus estää järjestelmän sammutuksen."
+
+#: src/login/org.freedesktop.login1.policy:33
+msgid "Allow applications to delay system shutdown"
+msgstr "Salli sovellusten viivyttää järjestelmän sammuttaminen"
+
+#: src/login/org.freedesktop.login1.policy:34
+msgid "Authentication is required for an application to delay system shutdown."
+msgstr ""
+"Todennus vaaditaan, jotta sovellus viivyttäisi järjestelmän sammutuksen."
+
+#: src/login/org.freedesktop.login1.policy:44
+msgid "Allow applications to inhibit system sleep"
+msgstr "Salli sovellusten estää järjestelmän unitila"
+
+#: src/login/org.freedesktop.login1.policy:45
+msgid "Authentication is required for an application to inhibit system sleep."
+msgstr "Todennus vaaditaan, jotta sovellus estää järjestelmän unitilan."
+
+#: src/login/org.freedesktop.login1.policy:55
+msgid "Allow applications to delay system sleep"
+msgstr "Salli sovellusten viivyttää järjestelmän unitilan"
+
+#: src/login/org.freedesktop.login1.policy:56
+msgid "Authentication is required for an application to delay system sleep."
+msgstr "Todennus vaaditaan, jotta sovellus viivyttäisi järjestelmän unitilan."
+
+#: src/login/org.freedesktop.login1.policy:65
+msgid "Allow applications to inhibit automatic system suspend"
+msgstr "Salli sovellusten estää järjestelmän automaattinen pysäyttäminen"
+
+#: src/login/org.freedesktop.login1.policy:66
+msgid ""
+"Authentication is required for an application to inhibit automatic system "
+"suspend."
+msgstr "Todennus vaaditaan, jotta sovellus estää järjestelmän pysäyttämisen."
+
+#: src/login/org.freedesktop.login1.policy:75
+msgid "Allow applications to inhibit system handling of the power key"
+msgstr "Salli sovellusten estää järjestelmän virtapainikkeen käyttö"
+
+#: src/login/org.freedesktop.login1.policy:76
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the power key."
+msgstr ""
+"Todennus vaaditaan, jotta sovellus estää järjestelmän virtapainikkeen käytön."
+
+#: src/login/org.freedesktop.login1.policy:86
+msgid "Allow applications to inhibit system handling of the suspend key"
+msgstr "Salli sovellusten estää järjestelmän pysäytyspainikkeen käyttö"
+
+#: src/login/org.freedesktop.login1.policy:87
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the suspend key."
+msgstr ""
+"Todennus vaaditaan, jotta sovellus estää järjestelmän pysäytyspainikkeen "
+"käytön."
+
+#: src/login/org.freedesktop.login1.policy:97
+msgid "Allow applications to inhibit system handling of the hibernate key"
+msgstr "Salli sovellusten estää järjestelmän horrostilapainikkeen käyttö"
+
+#: src/login/org.freedesktop.login1.policy:98
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the hibernate key."
+msgstr ""
+"Todennus vaaditaan, jotta sovellus estää järjestelmän horrostilapainikkeen "
+"käytön."
+
+#: src/login/org.freedesktop.login1.policy:107
+msgid "Allow applications to inhibit system handling of the lid switch"
+msgstr "Salli sovellusten estää järjestelmän kansikytkimen käyttö"
+
+#: src/login/org.freedesktop.login1.policy:108
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the lid switch."
+msgstr ""
+"Todennus vaaditaan, jotta sovellus estää järjestelmän kansikytkimen käytön."
+
+#: src/login/org.freedesktop.login1.policy:117
+msgid "Allow applications to inhibit system handling of the reboot key"
+msgstr ""
+"Salli sovellusten estää järjestelmän uudelleenkäynnistyspainikkeen käyttö"
+
+#: src/login/org.freedesktop.login1.policy:118
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the reboot key."
+msgstr ""
+"Todennus vaaditaan, jotta sovellus estää järjestelmän "
+"uudelleenkäynnistyspainikkeen käytön."
+
+#: src/login/org.freedesktop.login1.policy:128
+msgid "Allow non-logged-in user to run programs"
+msgstr "Salli sisäänkirjautumattomien käyttäjien suorittaa ohjelmia"
+
+#: src/login/org.freedesktop.login1.policy:129
+msgid "Explicit request is required to run programs as a non-logged-in user."
+msgstr ""
+"Ohjelmien suorittamiseen sisäänkirjautumattomana käyttäjänä tarvitaan "
+"nimenomainen pyyntö."
+
+#: src/login/org.freedesktop.login1.policy:138
+msgid "Allow non-logged-in users to run programs"
+msgstr "Salli sisäänkirjautumattomien käyttäjien suorittaa ohjelmia"
+
+#: src/login/org.freedesktop.login1.policy:139
+msgid "Authentication is required to run programs as a non-logged-in user."
+msgstr ""
+"Todennus vaaditaan ohjelmien suorittamiseen sisäänkirjautumattomana "
+"käyttäjänä."
+
+#: src/login/org.freedesktop.login1.policy:148
+msgid "Allow attaching devices to seats"
+msgstr "Salli laitteiden kiinnittäminen paikkoihin"
+
+#: src/login/org.freedesktop.login1.policy:149
+msgid "Authentication is required to attach a device to a seat."
+msgstr "Laitteiden kiinnittäminen paikkoihin edellyttää todennusta."
+
+#: src/login/org.freedesktop.login1.policy:159
+msgid "Flush device to seat attachments"
+msgstr "Poista laitteen ja paikan liitokset"
+
+#: src/login/org.freedesktop.login1.policy:160
+msgid "Authentication is required to reset how devices are attached to seats."
+msgstr ""
+"Todennus vaaditaan nollaamaan, miten laitteet on yhdistetty paikkoihin."
+
+#: src/login/org.freedesktop.login1.policy:169
+msgid "Power off the system"
+msgstr "Sammuta järjestelmä"
+
+#: src/login/org.freedesktop.login1.policy:170
+msgid "Authentication is required to power off the system."
+msgstr "Todennus vaaditaan järjestelmän sammuttamiseksi."
+
+#: src/login/org.freedesktop.login1.policy:180
+msgid "Power off the system while other users are logged in"
+msgstr "Sammuta järjestelmä, vaikka muita käyttäjiä on kirjautuneena sisään"
+
+#: src/login/org.freedesktop.login1.policy:181
+msgid ""
+"Authentication is required to power off the system while other users are "
+"logged in."
+msgstr ""
+"Todennus vaaditaan järjestelmän sammuttamiseksi, kun muita käyttäjiä on "
+"kirjautuneena sisään."
+
+#: src/login/org.freedesktop.login1.policy:191
+msgid "Power off the system while an application is inhibiting this"
+msgstr "Sammuta järjestelmä, vaikka joku sovellus estää sen"
+
+#: src/login/org.freedesktop.login1.policy:192
+msgid ""
+"Authentication is required to power off the system while an application is "
+"inhibiting this."
+msgstr ""
+"Todennus vaaditaan järjestelmän sammuttamiseksi, kun joku sovellus estää "
+"tämän."
+
+#: src/login/org.freedesktop.login1.policy:202
+msgid "Reboot the system"
+msgstr "Käynnistä järjestelmä uudelleen"
+
+#: src/login/org.freedesktop.login1.policy:203
+msgid "Authentication is required to reboot the system."
+msgstr "Todennus vaaditaan järjestelmän uudelleen käynnistämiseksi."
+
+#: src/login/org.freedesktop.login1.policy:213
+msgid "Reboot the system while other users are logged in"
+msgstr ""
+"Käynnistä järjestelmä uudelleen, vaikka muita käyttäjiä on kirjautuneena "
+"sisään"
+
+#: src/login/org.freedesktop.login1.policy:214
+msgid ""
+"Authentication is required to reboot the system while other users are logged "
+"in."
+msgstr ""
+"Todennus vaaditaan järjestelmän uudelleen käynnistämiseksi, kun muita "
+"käyttäjiä on kirjautuneena sisään."
+
+#: src/login/org.freedesktop.login1.policy:224
+msgid "Reboot the system while an application is inhibiting this"
+msgstr "Käynnistä järjestelmä uudelleen, vaikka joku sovellus estää sen"
+
+#: src/login/org.freedesktop.login1.policy:225
+msgid ""
+"Authentication is required to reboot the system while an application is "
+"inhibiting this."
+msgstr ""
+"Todennus vaaditaan järjestelmän uudelleen käynnistämisksi, kun joku sovellus "
+"estää tämän."
+
+#: src/login/org.freedesktop.login1.policy:235
+msgid "Halt the system"
+msgstr "Pysäytä järjestelmä"
+
+#: src/login/org.freedesktop.login1.policy:236
+msgid "Authentication is required to halt the system."
+msgstr "Todennus vaaditaan järjestelmän pysäyttämiseksi."
+
+#: src/login/org.freedesktop.login1.policy:246
+msgid "Halt the system while other users are logged in"
+msgstr "Pysäytä järjestelmä, vaikka muita käyttäjiä on kirjautuneena sisään"
+
+#: src/login/org.freedesktop.login1.policy:247
+msgid ""
+"Authentication is required to halt the system while other users are logged "
+"in."
+msgstr ""
+"Todennus vaaditaan järjestelmän pysäyttämiseksi, kun muita käyttäjiä on "
+"kirjautuneena sisään."
+
+#: src/login/org.freedesktop.login1.policy:257
+msgid "Halt the system while an application is inhibiting this"
+msgstr "Pysäytä järjestelmä, vaikka joku sovellus estää sen"
+
+#: src/login/org.freedesktop.login1.policy:258
+msgid ""
+"Authentication is required to halt the system while an application is "
+"inhibiting this."
+msgstr ""
+"Todennus vaaditaan järjestelmän pysäyttämiseksi, kun joku sovellus estää "
+"tämän."
+
+#: src/login/org.freedesktop.login1.policy:268
+msgid "Suspend the system"
+msgstr "Pysäytä järjestelmä väliaikaisesti"
+
+#: src/login/org.freedesktop.login1.policy:269
+msgid "Authentication is required to suspend the system."
+msgstr "Todennus vaaditaan järjestelmän pysäyttämiseksi väliaikaisesti."
+
+#: src/login/org.freedesktop.login1.policy:278
+msgid "Suspend the system while other users are logged in"
+msgstr ""
+"Pysäytä järjestelmä väliaikaisesti, vaikka muita käyttäjiä on kirjautuneena "
+"sisään"
+
+#: src/login/org.freedesktop.login1.policy:279
+msgid ""
+"Authentication is required to suspend the system while other users are "
+"logged in."
+msgstr ""
+"Todennus vaaditaan järjestelmän väliaikaiseksi pysäyttämiseksi, kun muita "
+"käyttäjiä on kirjautuneena sisään."
+
+#: src/login/org.freedesktop.login1.policy:289
+msgid "Suspend the system while an application is inhibiting this"
+msgstr "Pysäytä järjestelmä väliaikaisesti, vaikka joku sovellus estää sen"
+
+#: src/login/org.freedesktop.login1.policy:290
+msgid ""
+"Authentication is required to suspend the system while an application is "
+"inhibiting this."
+msgstr ""
+"Todennus vaaditaan järjestelmän väliaikaiseksi pysäyttämiseksi, kun joku "
+"sovellus estää tämän."
+
+#: src/login/org.freedesktop.login1.policy:300
+msgid "Hibernate the system"
+msgstr "Horrosta järjestelmä"
+
+#: src/login/org.freedesktop.login1.policy:301
+msgid "Authentication is required to hibernate the system."
+msgstr "Todennus vaaditaan järjestelmän horrostamiseksi."
+
+#: src/login/org.freedesktop.login1.policy:310
+msgid "Hibernate the system while other users are logged in"
+msgstr "Horrosta järjestelmä, vaikka muita käyttäjiä on kirjautuneena sisään"
+
+#: src/login/org.freedesktop.login1.policy:311
+msgid ""
+"Authentication is required to hibernate the system while other users are "
+"logged in."
+msgstr ""
+"Todennus vaaditaan järjestelmän horrostamiseksi, kun muita käyttäjiä on "
+"kirjautuneena sisään."
+
+#: src/login/org.freedesktop.login1.policy:321
+msgid "Hibernate the system while an application is inhibiting this"
+msgstr "Horrosta järjestelmä, vaikka joku sovellus estää sen"
+
+#: src/login/org.freedesktop.login1.policy:322
+msgid ""
+"Authentication is required to hibernate the system while an application is "
+"inhibiting this."
+msgstr ""
+"Todennus vaaditaan järjestelmän horrostamiseksi, kun joku sovellus estää "
+"tämän."
+
+#: src/login/org.freedesktop.login1.policy:332
+msgid "Manage active sessions, users and seats"
+msgstr "Hallinnoi aktiivisia istuntoja, käyttäjiä ja paikkoja"
+
+#: src/login/org.freedesktop.login1.policy:333
+msgid "Authentication is required to manage active sessions, users and seats."
+msgstr ""
+"Todennus vaaditaan aktiivisten istuntojen, käyttäjien ja paikkojen "
+"hallintaan."
+
+#: src/login/org.freedesktop.login1.policy:342
+msgid "Lock or unlock active sessions"
+msgstr "Lukitse tai avaa aktiiviset istunnot"
+
+#: src/login/org.freedesktop.login1.policy:343
+msgid "Authentication is required to lock or unlock active sessions."
+msgstr ""
+"Todennus vaaditaan aktiivisten istuntojen lukitsemiseksi tai avaamiseksi."
+
+#: src/login/org.freedesktop.login1.policy:352
+msgid "Set the reboot \"reason\" in the kernel"
+msgstr "Aseta uudelleenkäynnistyksen \"syy\" ytimeen"
+
+#: src/login/org.freedesktop.login1.policy:353
+msgid "Authentication is required to set the reboot \"reason\" in the kernel."
+msgstr ""
+"Todennus vaaditaan, jotta ytimen uudelleenkäynnistyksen \"syy\" voidaan "
+"asettaa."
+
+#: src/login/org.freedesktop.login1.policy:363
+msgid "Indicate to the firmware to boot to setup interface"
+msgstr "Ilmoita laiteohjelmistolle, että käynnistyy asennusliittymään"
+
+#: src/login/org.freedesktop.login1.policy:364
+msgid ""
+"Authentication is required to indicate to the firmware to boot to setup "
+"interface."
+msgstr ""
+"Todennus vaaditaan ilmoittamaan laiteohjelmistolle, että se käynnistyy "
+"asennusliittymään."
+
+#: src/login/org.freedesktop.login1.policy:374
+msgid "Indicate to the boot loader to boot to the boot loader menu"
+msgstr ""
+"Ilmoita käynnistyslataimelle, että se käynnistyy käynnistyslatausvalikkoon"
+
+#: src/login/org.freedesktop.login1.policy:375
+msgid ""
+"Authentication is required to indicate to the boot loader to boot to the "
+"boot loader menu."
+msgstr ""
+"Todennus vaaditaan ilmoittamaan käynnistyslataajalle, että se käynnistyy "
+"käynnistyslatausvalikkoon."
+
+#: src/login/org.freedesktop.login1.policy:385
+msgid "Indicate to the boot loader to boot a specific entry"
+msgstr "Ilmoita käynnistyslataimelle, että käynnistää tietyn vaihtoehdon"
+
+#: src/login/org.freedesktop.login1.policy:386
+msgid ""
+"Authentication is required to indicate to the boot loader to boot into a "
+"specific boot loader entry."
+msgstr ""
+"Todennus vaaditaan ilmoittamaan käynnistyslataajalle, että käynnistää tietyn "
+"vaihtoehdon."
+
+#: src/login/org.freedesktop.login1.policy:396
+msgid "Set a wall message"
+msgstr "Aseta seinäviesti"
+
+#: src/login/org.freedesktop.login1.policy:397
+msgid "Authentication is required to set a wall message"
+msgstr "Seinäviestin asettaminen edellyttää todennusta"
+
+#: src/login/org.freedesktop.login1.policy:406
+msgid "Change Session"
+msgstr "Vaihda istunto"
+
+#: src/login/org.freedesktop.login1.policy:407
+msgid "Authentication is required to change the virtual terminal."
+msgstr "Todennus vaaditaan virtuaalipäätteen vaihtamiseksi."
+
+#: src/machine/org.freedesktop.machine1.policy:22
+msgid "Log into a local container"
+msgstr "Kirjaudu paikalliseen konttiin"
+
+#: src/machine/org.freedesktop.machine1.policy:23
+msgid "Authentication is required to log into a local container."
+msgstr "Paikalliseen konttiin kirjautumiseen vaaditaan todennus."
+
+#: src/machine/org.freedesktop.machine1.policy:32
+msgid "Log into the local host"
+msgstr "Kirjaudu sisään paikalliseen koneeseen"
+
+#: src/machine/org.freedesktop.machine1.policy:33
+msgid "Authentication is required to log into the local host."
+msgstr "Paikalliseen koneeseen kirjautumiseen vaaditaan todennus."
+
+#: src/machine/org.freedesktop.machine1.policy:42
+msgid "Acquire a shell in a local container"
+msgstr "Hanki komentotulkki paikallisesta kontista"
+
+#: src/machine/org.freedesktop.machine1.policy:43
+msgid "Authentication is required to acquire a shell in a local container."
+msgstr "Paikallisen kontin komentotulkin saaminen vaatii todentamisen."
+
+#: src/machine/org.freedesktop.machine1.policy:53
+msgid "Acquire a shell on the local host"
+msgstr "Hanki komentotulkki paikallisesta koneesta"
+
+#: src/machine/org.freedesktop.machine1.policy:54
+msgid "Authentication is required to acquire a shell on the local host."
+msgstr "Paikalliseen koneen komentotulkin saamiseen vaaditaan todennus."
+
+#: src/machine/org.freedesktop.machine1.policy:64
+msgid "Acquire a pseudo TTY in a local container"
+msgstr "Hanki pseudo TTY paikallisesta kontista"
+
+#: src/machine/org.freedesktop.machine1.policy:65
+msgid ""
+"Authentication is required to acquire a pseudo TTY in a local container."
+msgstr "Paikallisen kontin pseudo TTY:n saaminen vaatii todentamisen."
+
+#: src/machine/org.freedesktop.machine1.policy:74
+msgid "Acquire a pseudo TTY on the local host"
+msgstr "Hanki pseudo TTY paikallisesta koneesta"
+
+#: src/machine/org.freedesktop.machine1.policy:75
+msgid "Authentication is required to acquire a pseudo TTY on the local host."
+msgstr "Paikalliseen koneen pseudo TTY:n saamiseen vaaditaan todennus."
+
+#: src/machine/org.freedesktop.machine1.policy:84
+msgid "Manage local virtual machines and containers"
+msgstr "Hallitse paikallisia virtuaalikoneita ja kontteja"
+
+#: src/machine/org.freedesktop.machine1.policy:85
+msgid ""
+"Authentication is required to manage local virtual machines and containers."
+msgstr ""
+"Todennus vaaditaan paikallisten virtuaalikoneiden ja konttien hallintaan."
+
+#: src/machine/org.freedesktop.machine1.policy:95
+msgid "Manage local virtual machine and container images"
+msgstr "Hallitse paikallisia virtuaalikoneita ja konttilevykuvia"
+
+#: src/machine/org.freedesktop.machine1.policy:96
+msgid ""
+"Authentication is required to manage local virtual machine and container "
+"images."
+msgstr ""
+"Todennus vaaditaan paikallisten virtuaalikoneiden ja konttilevykuvien "
+"hallintaan."
+
+#: src/network/org.freedesktop.network1.policy:22
+msgid "Set NTP servers"
+msgstr "Aseta NTP-palvelimet"
+
+#: src/network/org.freedesktop.network1.policy:23
+msgid "Authentication is required to set NTP servers."
+msgstr "Todennus vaaditaan NTP-palvelimien asettamiseen."
+
+#: src/network/org.freedesktop.network1.policy:33
+#: src/resolve/org.freedesktop.resolve1.policy:44
+msgid "Set DNS servers"
+msgstr "Aseta DNS-palvelimet"
+
+#: src/network/org.freedesktop.network1.policy:34
+#: src/resolve/org.freedesktop.resolve1.policy:45
+msgid "Authentication is required to set DNS servers."
+msgstr "Todennus vaaditaan DNS-palvelimien asettamiseen."
+
+#: src/network/org.freedesktop.network1.policy:44
+#: src/resolve/org.freedesktop.resolve1.policy:55
+msgid "Set domains"
+msgstr "Aseta toimialueet"
+
+#: src/network/org.freedesktop.network1.policy:45
+#: src/resolve/org.freedesktop.resolve1.policy:56
+msgid "Authentication is required to set domains."
+msgstr "Todennus vaaditaan toimialueiden asettamiseen."
+
+#: src/network/org.freedesktop.network1.policy:55
+#: src/resolve/org.freedesktop.resolve1.policy:66
+msgid "Set default route"
+msgstr "Aseta oletusreitti"
+
+#: src/network/org.freedesktop.network1.policy:56
+#: src/resolve/org.freedesktop.resolve1.policy:67
+msgid "Authentication is required to set default route."
+msgstr "Todennus vaaditaan oletusreitin asettamiseksi."
+
+#: src/network/org.freedesktop.network1.policy:66
+#: src/resolve/org.freedesktop.resolve1.policy:77
+msgid "Enable/disable LLMNR"
+msgstr "Ota LLMNR käyttöön tai poista se käytöstä"
+
+#: src/network/org.freedesktop.network1.policy:67
+#: src/resolve/org.freedesktop.resolve1.policy:78
+msgid "Authentication is required to enable or disable LLMNR."
+msgstr ""
+"Todennus vaaditaan LLMNR:n ottamiseksi käyttöön tai poistamiseksi käytöstä."
+
+#: src/network/org.freedesktop.network1.policy:77
+#: src/resolve/org.freedesktop.resolve1.policy:88
+msgid "Enable/disable multicast DNS"
+msgstr "Ota monilähetyksen DNS käyttöön tai poista se käytöstä"
+
+#: src/network/org.freedesktop.network1.policy:78
+#: src/resolve/org.freedesktop.resolve1.policy:89
+msgid "Authentication is required to enable or disable multicast DNS."
+msgstr ""
+"Todennus vaaditaan, jotta monilähetys-DNS voidaan ottaa käyttöön tai poistaa "
+"käytöstä."
+
+#: src/network/org.freedesktop.network1.policy:88
+#: src/resolve/org.freedesktop.resolve1.policy:99
+msgid "Enable/disable DNS over TLS"
+msgstr "Ota käyttöön/poista käytöstä DNS TLS:n kautta"
+
+#: src/network/org.freedesktop.network1.policy:89
+#: src/resolve/org.freedesktop.resolve1.policy:100
+msgid "Authentication is required to enable or disable DNS over TLS."
+msgstr ""
+"Todennus vaaditaan DNS:n käyttöön ottamiseksi tai poistamiseksi käytöstä TLS:"
+"n kautta."
+
+#: src/network/org.freedesktop.network1.policy:99
+#: src/resolve/org.freedesktop.resolve1.policy:110
+msgid "Enable/disable DNSSEC"
+msgstr "Ota DNSSEC käyttöön tai poista se käytöstä"
+
+#: src/network/org.freedesktop.network1.policy:100
+#: src/resolve/org.freedesktop.resolve1.policy:111
+msgid "Authentication is required to enable or disable DNSSEC."
+msgstr ""
+"Todennus vaaditaan, jotta DNSSEC voidaan ottaa käyttöön tai poistaa käytöstä."
+
+#: src/network/org.freedesktop.network1.policy:110
+#: src/resolve/org.freedesktop.resolve1.policy:121
+msgid "Set DNSSEC Negative Trust Anchors"
+msgstr "Aseta DNSSEC-negatiiviset luottamusankkurit"
+
+#: src/network/org.freedesktop.network1.policy:111
+#: src/resolve/org.freedesktop.resolve1.policy:122
+msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
+msgstr ""
+"Todennus vaaditaan DNSSEC-negatiivisten luottamusankkureiden asettamiseksi."
+
+#: src/network/org.freedesktop.network1.policy:121
+msgid "Revert NTP settings"
+msgstr "Palauta aiemmat NTP-asetukset"
+
+#: src/network/org.freedesktop.network1.policy:122
+msgid "Authentication is required to reset NTP settings."
+msgstr "Todennus vaaditaan aiempien NTP-asetusten palauttamiseksi."
+
+#: src/network/org.freedesktop.network1.policy:132
+msgid "Revert DNS settings"
+msgstr "Palauta aiemmat DNS-asetukset"
+
+#: src/network/org.freedesktop.network1.policy:133
+msgid "Authentication is required to reset DNS settings."
+msgstr "Todennus vaaditaan aiempien DNS-asetusten palauttamiseksi."
+
+#: src/network/org.freedesktop.network1.policy:143
+msgid "DHCP server sends force renew message"
+msgstr "DHCP-palvelin lähettää pakota uusiminen-viestin"
+
+#: src/network/org.freedesktop.network1.policy:144
+msgid "Authentication is required to send force renew message."
+msgstr "Todennus vaaditaan pakota uusiminen-viestin lähettämiseksi."
+
+#: src/network/org.freedesktop.network1.policy:154
+msgid "Renew dynamic addresses"
+msgstr "Uusi dynaamiset osoitteet"
+
+#: src/network/org.freedesktop.network1.policy:155
+msgid "Authentication is required to renew dynamic addresses."
+msgstr "Todennus vaaditaan dynaamisten osoitteiden uusimiseksi."
+
+#: src/network/org.freedesktop.network1.policy:165
+msgid "Reload network settings"
+msgstr "Lataa verkkoasetukset uudelleen"
+
+#: src/network/org.freedesktop.network1.policy:166
+msgid "Authentication is required to reload network settings."
+msgstr "Todennus vaaditaan verkkoasetusten lataamiseksi uudelleen."
+
+#: src/network/org.freedesktop.network1.policy:176
+msgid "Reconfigure network interface"
+msgstr "Määritä verkkokäyttöliittymä uudelleen"
+
+#: src/network/org.freedesktop.network1.policy:177
+msgid "Authentication is required to reconfigure network interface."
+msgstr "Todennus vaaditaan verkkokäyttöliittymän määrittämiseksi uudelleen."
+
+#: src/portable/org.freedesktop.portable1.policy:13
+msgid "Inspect a portable service image"
+msgstr "Tarkista kannettava palvelulevykuva"
+
+#: src/portable/org.freedesktop.portable1.policy:14
+msgid "Authentication is required to inspect a portable service image."
+msgstr "Todennus vaaditaan kannettavan palvelulevykuvan tarkistamiseksi."
+
+#: src/portable/org.freedesktop.portable1.policy:23
+msgid "Attach or detach a portable service image"
+msgstr "Liitä tai irrota kannettava palvelulevykuva"
+
+#: src/portable/org.freedesktop.portable1.policy:24
+msgid ""
+"Authentication is required to attach or detach a portable service image."
+msgstr ""
+"Todennus vaaditaan kannettavan palvelulevykuvan liittämiseen tai "
+"irrottamiseen."
+
+#: src/portable/org.freedesktop.portable1.policy:34
+msgid "Delete or modify portable service image"
+msgstr "Poista tai muokkaa kannettavaa palvelulevykuvaa"
+
+#: src/portable/org.freedesktop.portable1.policy:35
+msgid ""
+"Authentication is required to delete or modify a portable service image."
+msgstr ""
+"Todennus vaaditaan, jos haluat poistaa tai muokata kannettavaa "
+"palvelulevykuvaa."
+
+#: src/resolve/org.freedesktop.resolve1.policy:22
+msgid "Register a DNS-SD service"
+msgstr "Rekisteröi DNS-SD-palvelu"
+
+#: src/resolve/org.freedesktop.resolve1.policy:23
+msgid "Authentication is required to register a DNS-SD service"
+msgstr "Todennus vaaditaan DNS-SD-palvelun rekisteröimiseksi"
+
+#: src/resolve/org.freedesktop.resolve1.policy:33
+msgid "Unregister a DNS-SD service"
+msgstr "Poista DNS-SD-palvelun rekisteröinti"
+
+#: src/resolve/org.freedesktop.resolve1.policy:34
+msgid "Authentication is required to unregister a DNS-SD service"
+msgstr "Todennus vaaditaan DNS-SD-palvelun rekisteröinnin poistamiseksi"
+
+#: src/resolve/org.freedesktop.resolve1.policy:132
+msgid "Revert name resolution settings"
+msgstr "Palauta aiemmat nimipalveluasetukset"
+
+#: src/resolve/org.freedesktop.resolve1.policy:133
+msgid "Authentication is required to reset name resolution settings."
+msgstr "Todennus vaaditaan aiempien nimipalveluasetusten palauttamiseksi."
+
+#: src/timedate/org.freedesktop.timedate1.policy:22
+msgid "Set system time"
+msgstr "Aseta järjestelmän aika"
+
+#: src/timedate/org.freedesktop.timedate1.policy:23
+msgid "Authentication is required to set the system time."
+msgstr "Todennus vaaditaan järjestelmän ajan asettamiseksi."
+
+#: src/timedate/org.freedesktop.timedate1.policy:33
+msgid "Set system timezone"
+msgstr "Aseta järjestelmän aikavyöhyke"
+
+#: src/timedate/org.freedesktop.timedate1.policy:34
+msgid "Authentication is required to set the system timezone."
+msgstr "Todennus vaaditaan järjestelmän aikavyöhykkeen asettamiseksi."
+
+#: src/timedate/org.freedesktop.timedate1.policy:43
+msgid "Set RTC to local timezone or UTC"
+msgstr ""
+"Aseta RTC(reaaliaikainen kello) paikalliseksi aikavyöhykkeeksi tai UTC:ksi"
+
+#: src/timedate/org.freedesktop.timedate1.policy:44
+msgid ""
+"Authentication is required to control whether the RTC stores the local or "
+"UTC time."
+msgstr ""
+"Todennus vaaditaan sen säätämiseksi, tallentaako RTC paikallisen vai UTC-"
+"ajan."
+
+#: src/timedate/org.freedesktop.timedate1.policy:53
+msgid "Turn network time synchronization on or off"
+msgstr "Ota verkon ajan synkronointi käyttöön tai poista se käytöstä"
+
+#: src/timedate/org.freedesktop.timedate1.policy:54
+msgid ""
+"Authentication is required to control whether network time synchronization "
+"shall be enabled."
+msgstr ""
+"Todennus vaaditaan sen hallitsemiseksi, onko verkkoajan synkronointi "
+"käytössä."
+
+#: src/core/dbus-unit.c:359
+msgid "Authentication is required to start '$(unit)'."
+msgstr "Todennus vaaditaan $(unit):n aloittamiseksi."
+
+#: src/core/dbus-unit.c:360
+msgid "Authentication is required to stop '$(unit)'."
+msgstr "Todennus vaaditaan $(unit):n lopettamiseksi."
+
+#: src/core/dbus-unit.c:361
+msgid "Authentication is required to reload '$(unit)'."
+msgstr "Todennus vaaditaan $(unit):n uudelleen lataamiseksi."
+
+#: src/core/dbus-unit.c:362 src/core/dbus-unit.c:363
+msgid "Authentication is required to restart '$(unit)'."
+msgstr "Todennus vaaditaan $(unit):n uudelleen käynnistämiseksi."
+
+#: src/core/dbus-unit.c:546
+msgid ""
+"Authentication is required to send a UNIX signal to the processes of "
+"'$(unit)'."
+msgstr ""
+"Todennus vaaditaan UNIX-signaalin lähettämiseen '$(unit)'-prosesseihin."
+
+#: src/core/dbus-unit.c:576
+msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
+msgstr "Todennus vaaditaan \"epäonnistuneen\" tilan \"$(unit)\" nollaamiseksi."
+
+#: src/core/dbus-unit.c:608
+msgid "Authentication is required to set properties on '$(unit)'."
+msgstr "Todennus vaaditaan, jotta ominaisuudet asetetaan arvoon '$(unit)'."
+
+#: src/core/dbus-unit.c:714
+msgid ""
+"Authentication is required to delete files and directories associated with "
+"'$(unit)'."
+msgstr ""
+"Todennus vaaditaan tiedostojen ja hakemistojen poistamiseen, jotka liittyvät "
+"'$(unit)':iin."
+
+#: src/core/dbus-unit.c:762
+msgid ""
+"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
+msgstr ""
+"Todennus vaaditaan '$(unit)'-yksikön prosessien jäädyttämiseksi tai "
+"sulattamiseksi."
diff --git a/po/fr.po b/po/fr.po
index 0e791fc..6a02d88 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -5,13 +5,13 @@
 #
 # Julien Humbert <julroy67@gmail.com>, 2020, 2021.
 # Arnaud T. <listes.00@gmail.com>, 2021.
+# blutch112 <vincent.lefebvre59@gmail.com>, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-01-14 06:37+0000\n"
-"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-11-07 08:19+0000\n"
+"Last-Translator: blutch112 <vincent.lefebvre59@gmail.com>\n"
 "Language-Team: French <https://translate.fedoraproject.org/projects/systemd/"
 "master/fr/>\n"
 "Language: fr\n"
@@ -19,7 +19,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.4.1\n"
+"X-Generator: Weblate 4.14.2\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -166,6 +166,23 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Authentification requise pour obtenir l’UUID du produit."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Obtenir le numéro de série du matériel"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr ""
+"L'authentification est requise pour obtenir le numéro de série du matériel."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Obtenir la description du système"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "L'authentification est requise pour obtenir la description du système."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importer une image de machine virtuelle (VM) ou de conteneur"
@@ -956,7 +973,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Authentification requise pour redémarrer « $(unit) »."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -964,17 +981,17 @@
 "Authentification requise pour envoyer un signal UNIX aux processus de "
 "« $(unit) »."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Authentification requise pour réinitialiser l’état d’« échec » de "
 "« $(unit) »."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Authentification requise pour définir des propriétés de « $(unit) »."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -982,7 +999,7 @@
 "Authentification requise pour supprimer les fichiers et les dossiers "
 "associés à « $(unit) »."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/gl.po b/po/gl.po
index babdfd2..096777c 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -3,9 +3,8 @@
 # Fran Dieguez <frandieguez@gnome.org>, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2019-12-29 22:30+0100\n"
 "Last-Translator: Fran Diéguez <frandieguez@gnome.org>\n"
 "Language-Team: gnome-l10n-gl@gnome.org\n"
@@ -75,7 +74,6 @@
 
 #: src/home/org.freedesktop.home1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to set NTP servers."
 msgid "Authentication is required to create a user's home area."
 msgstr "Requírese autenticación para estabelecer os servidores NTP."
 
@@ -85,7 +83,6 @@
 
 #: src/home/org.freedesktop.home1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to set NTP servers."
 msgid "Authentication is required to remove a user's home area."
 msgstr "Requírese autenticación para estabelecer os servidores NTP."
 
@@ -95,8 +92,6 @@
 
 #: src/home/org.freedesktop.home1.policy:34
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to attach or detach a portable service image."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
@@ -109,7 +104,6 @@
 
 #: src/home/org.freedesktop.home1.policy:44
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
 msgstr "Requírese autenticación para anexar un dispositivo a un asento."
 
@@ -119,7 +113,6 @@
 
 #: src/home/org.freedesktop.home1.policy:54
 #, fuzzy
-#| msgid "Authentication is required to set NTP servers."
 msgid "Authentication is required to resize a user's home area."
 msgstr "Requírese autenticación para estabelecer os servidores NTP."
 
@@ -129,8 +122,6 @@
 
 #: src/home/org.freedesktop.home1.policy:64
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
@@ -175,6 +166,25 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Requírese autenticación para obter o UUID de produto."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Requírese autenticación para estabelecer a hora do sistema."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Estabelecer o fuso horario"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Requírese autenticación para estabelecer o fuso horario do sistema."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importar unha imaxe de MV ou contenedor"
@@ -325,16 +335,12 @@
 
 #: src/login/org.freedesktop.login1.policy:117
 #, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
 "Permitir ás aplicacións inhibir a xestión do sistema da tecla de acendido"
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
@@ -470,9 +476,6 @@
 
 #: src/login/org.freedesktop.login1.policy:258
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
@@ -624,7 +627,6 @@
 
 #: src/login/org.freedesktop.login1.policy:407
 #, fuzzy
-#| msgid "Authentication is required to halt the system."
 msgid "Authentication is required to change the virtual terminal."
 msgstr "Requírese autenticación para deter o sistema."
 
@@ -815,7 +817,6 @@
 
 #: src/network/org.freedesktop.network1.policy:144
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
 msgstr "Requírese autenticación para estabelecer unha mensaxe de muro"
 
@@ -956,7 +957,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Requírese autenticación para reiniciar '$(unit)'."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -964,16 +965,16 @@
 "Requírese autenticación para enviarlle un sinal UNIX aos procesos de "
 "'$(unit)'."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Requírese autenticación para reinicair o estado «fallido» de '$(unit)'."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Requírese autenticación para estabelecer as propiedades en '$(unit)'."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -981,11 +982,8 @@
 "Requírese autenticación para eliminar ficheiros ou directorios asociados con "
 "'$(unit)'."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to send a UNIX signal to the processes of "
-#| "'$(unit)'."
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/hr.po b/po/hr.po
index c9e3d23..80c85be 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -3,13 +3,12 @@
 # SOME DESCRIPTIVE TITLE.
 # This file is distributed under the same license as the PACKAGE package.
 # gogo <trebelnik2@gmail.com>, 2016.
-# Gogo Gogsi <linux.hr@protonmail.com>, 2020.
+# Gogo Gogsi <linux.hr@protonmail.com>, 2020, 2021, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2020-08-29 11:29+0000\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-31 11:19+0000\n"
 "Last-Translator: Gogo Gogsi <linux.hr@protonmail.com>\n"
 "Language-Team: Croatian <https://translate.fedoraproject.org/projects/"
 "systemd/master/hr/>\n"
@@ -19,7 +18,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.2.1\n"
+"X-Generator: Weblate 4.14.1\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -154,6 +153,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Potrebna je ovjera za prikaz UUID-a proizvoda."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Prikaži serijski broj hardvera"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Potrebna je ovjera za prikaz serijskog broja hardvera."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Prikaži informacije sustava"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Potrebna je ovjera za prikaz informacija sustava."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Uvezi VM ili spremnik slike"
@@ -176,7 +191,7 @@
 
 #: src/import/org.freedesktop.import1.policy:43
 msgid "Authentication is required to download a VM or container image"
-msgstr "Potrebna je ovjera za preuzimanje VM ili spremnika slike."
+msgstr "Potrebna je ovjera za preuzimanje VM ili spremnika slike"
 
 #: src/locale/org.freedesktop.locale1.policy:22
 msgid "Set system locale"
@@ -196,13 +211,13 @@
 
 #: src/login/org.freedesktop.login1.policy:22
 msgid "Allow applications to inhibit system shutdown"
-msgstr "Dopusti aplikacijama spriječavanje isključivanja sustava"
+msgstr "Dopusti aplikacijama sprječavanje isključivanja sustava"
 
 #: src/login/org.freedesktop.login1.policy:23
 msgid ""
 "Authentication is required for an application to inhibit system shutdown."
 msgstr ""
-"Potrebna je ovjera za dopuštanje aplikacijama u spriječavanju isključivanja "
+"Potrebna je ovjera za dopuštanje aplikacijama u sprječavanju isključivanja "
 "sustava."
 
 #: src/login/org.freedesktop.login1.policy:33
@@ -216,12 +231,12 @@
 
 #: src/login/org.freedesktop.login1.policy:44
 msgid "Allow applications to inhibit system sleep"
-msgstr "Dopusti aplikacijama spriječavanje spavanja sustava"
+msgstr "Dopusti aplikacijama sprječavanje spavanja sustava"
 
 #: src/login/org.freedesktop.login1.policy:45
 msgid "Authentication is required for an application to inhibit system sleep."
 msgstr ""
-"Potrebna je ovjera za dopuštanje aplikacijama u spriječavanju spavanja "
+"Potrebna je ovjera za dopuštanje aplikacijama u sprječavanju spavanja "
 "sustava."
 
 #: src/login/org.freedesktop.login1.policy:55
@@ -234,83 +249,76 @@
 
 #: src/login/org.freedesktop.login1.policy:65
 msgid "Allow applications to inhibit automatic system suspend"
-msgstr "Dopusti aplikacijama spriječavanje automatskog suspendiranja sustava"
+msgstr "Dopusti aplikacijama sprječavanje automatskog suspendiranja sustava"
 
 #: src/login/org.freedesktop.login1.policy:66
 msgid ""
 "Authentication is required for an application to inhibit automatic system "
 "suspend."
 msgstr ""
-"Potrebna je ovjera za dopuštanje aplikacijama u spriječavanju automatskog "
+"Potrebna je ovjera za dopuštanje aplikacijama u sprječavanju automatskog "
 "suspendiranja sustava."
 
 #: src/login/org.freedesktop.login1.policy:75
 msgid "Allow applications to inhibit system handling of the power key"
 msgstr ""
-"Dopusti aplikacijama spriječavanje rukovanja sustava tipkom isključivanja"
+"Dopusti aplikacijama sprječavanje rukovanja sustava tipkom isključivanja"
 
 #: src/login/org.freedesktop.login1.policy:76
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the power key."
 msgstr ""
-"Potrebna je ovjera za dopuštanje aplikacijama u spriječavanju rukovanja "
+"Potrebna je ovjera za dopuštanje aplikacijama u sprječavanju rukovanja "
 "sustava tipkom isključivanja."
 
 #: src/login/org.freedesktop.login1.policy:86
 msgid "Allow applications to inhibit system handling of the suspend key"
-msgstr "Dopusti aplikacijama spriječavanje rukovanja sustava tipkom suspenzije"
+msgstr "Dopusti aplikacijama sprječavanje rukovanja sustava tipkom suspenzije"
 
 #: src/login/org.freedesktop.login1.policy:87
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the suspend key."
 msgstr ""
-"Potrebna je ovjera za dopuštanje aplikacijama u spriječavanju rukovanja "
+"Potrebna je ovjera za dopuštanje aplikacijama u sprječavanju rukovanja "
 "sustava tipkom suspenzije."
 
 #: src/login/org.freedesktop.login1.policy:97
 msgid "Allow applications to inhibit system handling of the hibernate key"
-msgstr ""
-"Dopusti aplikacijama spriječavanje rukovanja sustava tipkom hibernacije"
+msgstr "Dopusti aplikacijama sprječavanje rukovanja sustava tipkom hibernacije"
 
 #: src/login/org.freedesktop.login1.policy:98
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the hibernate key."
 msgstr ""
-"Potrebna je ovjera za dopuštanje aplikacijama u spriječavanju rukovanja "
+"Potrebna je ovjera za dopuštanje aplikacijama u sprječavanju rukovanja "
 "sustava tipkom hibernacije."
 
 #: src/login/org.freedesktop.login1.policy:107
 msgid "Allow applications to inhibit system handling of the lid switch"
-msgstr "Dopusti aplikacijama spriječavanje rukovanja sustava preklopnicama"
+msgstr "Dopusti aplikacijama sprječavanje rukovanja sustava preklopnicama"
 
 #: src/login/org.freedesktop.login1.policy:108
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the lid switch."
 msgstr ""
-"Potrebna je ovjera za dopuštanje spriječavanja rukovanja sustava "
+"Potrebna je ovjera za dopuštanje sprječavanja rukovanja sustava "
 "preklopnicama."
 
 #: src/login/org.freedesktop.login1.policy:117
-#, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
-"Dopusti aplikacijama spriječavanje rukovanja sustava tipkom isključivanja"
+"Dopusti aplikacijama sprječavanje rukovanja sustava tipkom isključivanja"
 
 #: src/login/org.freedesktop.login1.policy:118
-#, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
 msgstr ""
-"Potrebna je ovjera za dopuštanje aplikacijama u spriječavanju rukovanja "
+"Potrebna je ovjera za dopuštanje aplikacijama u sprječavanju rukovanja "
 "sustava tipkom isključivanja."
 
 #: src/login/org.freedesktop.login1.policy:128
@@ -373,7 +381,7 @@
 #: src/login/org.freedesktop.login1.policy:191
 msgid "Power off the system while an application is inhibiting this"
 msgstr ""
-"Isključi sustav kada je aplikacija zatražila spriječavanje isključivanja"
+"Isključi sustav kada je aplikacija zatražila sprječavanje isključivanja"
 
 #: src/login/org.freedesktop.login1.policy:192
 msgid ""
@@ -381,7 +389,7 @@
 "inhibiting this."
 msgstr ""
 "Potrebna je ovjera za isključivanje sustava kada je aplikacija zatražila "
-"spriječavanje isključivanja."
+"sprječavanje isključivanja."
 
 #: src/login/org.freedesktop.login1.policy:202
 msgid "Reboot the system"
@@ -406,7 +414,7 @@
 #: src/login/org.freedesktop.login1.policy:224
 msgid "Reboot the system while an application is inhibiting this"
 msgstr ""
-"Ponovno pokreni sustav kada je aplikacija zatražila spriječavanje ponovnog "
+"Ponovno pokreni sustav kada je aplikacija zatražila sprječavanje ponovnog "
 "pokretanja"
 
 #: src/login/org.freedesktop.login1.policy:225
@@ -415,7 +423,7 @@
 "inhibiting this."
 msgstr ""
 "Potrebna je ovjera za ponovno pokretanje sustava kada je aplikacija "
-"zatražila spriječavanje ponovnog pokretanja."
+"zatražila sprječavanje ponovnog pokretanja."
 
 #: src/login/org.freedesktop.login1.policy:235
 msgid "Halt the system"
@@ -440,7 +448,7 @@
 #: src/login/org.freedesktop.login1.policy:257
 msgid "Halt the system while an application is inhibiting this"
 msgstr ""
-"Zaustavi sustav kada je aplikacija zatražila spriječavanje zaustavljanja"
+"Zaustavi sustav kada je aplikacija zatražila sprječavanje zaustavljanja"
 
 #: src/login/org.freedesktop.login1.policy:258
 msgid ""
@@ -448,7 +456,7 @@
 "inhibiting this."
 msgstr ""
 "Potrebna je ovjera za zaustavljanje sustava kada je aplikacija zatražila "
-"spriječavanje hibernacije."
+"sprječavanje hibernacije."
 
 #: src/login/org.freedesktop.login1.policy:268
 msgid "Suspend the system"
@@ -473,7 +481,7 @@
 #: src/login/org.freedesktop.login1.policy:289
 msgid "Suspend the system while an application is inhibiting this"
 msgstr ""
-"Suspendiraj sustav kada je aplikacija zatražila spriječavanje suspendiranja"
+"Suspendiraj sustav kada je aplikacija zatražila sprječavanje suspendiranja"
 
 #: src/login/org.freedesktop.login1.policy:290
 msgid ""
@@ -481,7 +489,7 @@
 "inhibiting this."
 msgstr ""
 "Potrebna je ovjera za suspendiranje sustava kada je aplikacija zatražila "
-"spriječavanje suspendiranja."
+"sprječavanje suspendiranja."
 
 #: src/login/org.freedesktop.login1.policy:300
 msgid "Hibernate the system"
@@ -506,7 +514,7 @@
 #: src/login/org.freedesktop.login1.policy:321
 msgid "Hibernate the system while an application is inhibiting this"
 msgstr ""
-"Hiberniraj sustav kada je aplikacija zatražila spriječavanje hibernacije"
+"Hiberniraj sustav kada je aplikacija zatražila sprječavanje hibernacije"
 
 #: src/login/org.freedesktop.login1.policy:322
 msgid ""
@@ -514,7 +522,7 @@
 "inhibiting this."
 msgstr ""
 "Potrebna je ovjera za hibernaciju sustava kada je aplikacija zatražila "
-"spriječavanje hibernacije."
+"sprječavanje hibernacije."
 
 #: src/login/org.freedesktop.login1.policy:332
 msgid "Manage active sessions, users and seats"
@@ -583,7 +591,7 @@
 
 #: src/login/org.freedesktop.login1.policy:397
 msgid "Authentication is required to set a wall message"
-msgstr "Potrebna je ovjera za postavljanje zaslonske poruke."
+msgstr "Potrebna je ovjera za postavljanje zaslonske poruke"
 
 #: src/login/org.freedesktop.login1.policy:406
 msgid "Change Session"
@@ -836,7 +844,7 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:23
 msgid "Authentication is required to register a DNS-SD service"
-msgstr "Potrebna je ovjera za registriranje DNS-SD usluge."
+msgstr "Potrebna je ovjera za registriranje DNS-SD usluge"
 
 #: src/resolve/org.freedesktop.resolve1.policy:33
 msgid "Unregister a DNS-SD service"
@@ -844,7 +852,7 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:34
 msgid "Authentication is required to unregister a DNS-SD service"
-msgstr "Potrebna je ovjera za uklanjanje registracije DNS-SD usluge."
+msgstr "Potrebna je ovjera za uklanjanje registracije DNS-SD usluge"
 
 #: src/resolve/org.freedesktop.resolve1.policy:132
 msgid "Revert name resolution settings"
@@ -909,21 +917,21 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Potrebna je ovjera za ponovno pokretanje'$(unit)'."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "Potrebna je ovjera za slanje UNIX signala u procese '$(unit)'."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr "Potrebna je ovjera za vraćanje \"neuspjelog\" stanja '$(unit)'."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Potrebna je ovjera za postavljanje svojstava na '$(unit)'."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -931,7 +939,7 @@
 "Potrebna je ovjera za brisanje datoteka i direktorija pridruženih sa "
 "'$(unit)'."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/hu.po b/po/hu.po
index 3a1d36d..d67681e 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -5,20 +5,21 @@
 #
 # Gabor Kelemen <kelemeng at gnome dot hu>, 2015, 2016.
 # Balázs Úr <urbalazs at gmail dot com>, 2016.
+# Balázs Meskó <meskobalazs@mailbox.org>, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2016-08-23 18:03+0100\n"
-"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
-"Language-Team: Hungarian <openscope at googlegroups dot com>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-08-09 20:19+0000\n"
+"Last-Translator: Balázs Meskó <meskobalazs@mailbox.org>\n"
+"Language-Team: Hungarian <https://translate.fedoraproject.org/projects/"
+"systemd/master/hu/>\n"
 "Language: hu\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.13\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -72,73 +73,57 @@
 
 #: src/home/org.freedesktop.home1.policy:13
 msgid "Create a home area"
-msgstr ""
+msgstr "Saját terület létrehozása"
 
 #: src/home/org.freedesktop.home1.policy:14
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
-msgstr "Hitelesítés szükséges a systemd állapotának újratöltéséhez."
+msgstr "Hitelesítés szükséges a felhasználó saját területének létrehozásához."
 
 #: src/home/org.freedesktop.home1.policy:23
 msgid "Remove a home area"
-msgstr ""
+msgstr "Saját terület eltávolítása"
 
 #: src/home/org.freedesktop.home1.policy:24
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
-msgstr "Hitelesítés szükséges a systemd állapotának újratöltéséhez."
+msgstr "Hitelesítés szükséges a felhasználó saját területének eltávolításához."
 
 #: src/home/org.freedesktop.home1.policy:33
 msgid "Check credentials of a home area"
-msgstr ""
+msgstr "Saját terület hitelesítő adatainak ellenőrzése"
 
 #: src/home/org.freedesktop.home1.policy:34
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
-"Hitelesítés szükséges az aktív munkamenetek, felhasználók és munkaállomások "
-"kezeléséhez."
+"Hitelesítés szükséges a hitelesítő adatok a felhasználó saját területével "
+"való összevetéséhez."
 
 #: src/home/org.freedesktop.home1.policy:43
 msgid "Update a home area"
-msgstr ""
+msgstr "Saját terület frissítése"
 
 #: src/home/org.freedesktop.home1.policy:44
-#, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
-msgstr ""
-"Hitelesítés szükséges eszköz csatolásának engedélyezéséhez egy "
-"munkaállomáshoz"
+msgstr "Hitelesítés szükséges a felhasználó saját területének frissítéséhez."
 
 #: src/home/org.freedesktop.home1.policy:53
 msgid "Resize a home area"
-msgstr ""
+msgstr "Saját terület átméretezése"
 
 #: src/home/org.freedesktop.home1.policy:54
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
-msgstr "Hitelesítés szükséges a falüzenet beállításához"
+msgstr "Hitelesítés szükséges a felhasználó saját területének átméretezéséhez."
 
 #: src/home/org.freedesktop.home1.policy:63
 msgid "Change password of a home area"
-msgstr ""
+msgstr "Saját terület hitelesítő adatainak módosítása"
 
 #: src/home/org.freedesktop.home1.policy:64
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
-"Hitelesítés szükséges az aktív munkamenetek, felhasználók és munkaállomások "
-"kezeléséhez."
+"Hitelesítés szükséges a felhasználó saját területének jelszavának "
+"módosításához."
 
 #: src/hostname/org.freedesktop.hostname1.policy:20
 msgid "Set hostname"
@@ -166,45 +151,62 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:42
 msgid "Authentication is required to set local machine information."
-msgstr "Hitelesítés szükséges a helyi gép információinak beállításához."
+msgstr "Hitelesítés szükséges a helyi gépinformációk beállításához."
 
 #: src/hostname/org.freedesktop.hostname1.policy:51
 msgid "Get product UUID"
-msgstr ""
+msgstr "Termék UUID-jának lekérése"
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
-#, fuzzy
-#| msgid "Authentication is required to reload '$(unit)'."
 msgid "Authentication is required to get product UUID."
-msgstr "Hitelesítés szükséges a következő újratöltéséhez: „$(unit)”."
+msgstr "Hitelesítés szükséges a termék UUID-jának lekéréséhez."
+
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Hitelesítés szükséges a rendszeridő beállításához."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Rendszer időzónájának beállítása"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Hitelesítés szükséges a rendszer időzónájának beállításához."
 
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
-msgstr "VM vagy konténer lemezkép importálása"
+msgstr "VM vagy konténer lemezképének importálása"
 
 #: src/import/org.freedesktop.import1.policy:23
 msgid "Authentication is required to import a VM or container image"
-msgstr "Hitelesítés szükséges a VM vagy konténer lemezkép importálásához."
+msgstr "Hitelesítés szükséges a VM vagy konténer lemezképének importálásához"
 
 #: src/import/org.freedesktop.import1.policy:32
 msgid "Export a VM or container image"
-msgstr "VM vagy konténer lemezkép exportálása"
+msgstr "VM vagy konténer lemezképének exportálása"
 
 #: src/import/org.freedesktop.import1.policy:33
 msgid "Authentication is required to export a VM or container image"
-msgstr "Hitelesítés szükséges a VM vagy konténer lemezkép exportálásához."
+msgstr "Hitelesítés szükséges a VM vagy konténer lemezképének exportálásához"
 
 #: src/import/org.freedesktop.import1.policy:42
 msgid "Download a VM or container image"
-msgstr "VM vagy konténer lemezkép letöltése"
+msgstr "VM vagy konténer lemezképének letöltése"
 
 #: src/import/org.freedesktop.import1.policy:43
 msgid "Authentication is required to download a VM or container image"
-msgstr "Hitelesítés szükséges a VM vagy konténer lemezkép letöltéséhez."
+msgstr "Hitelesítés szükséges a VM vagy konténer lemezképének letöltéséhez"
 
 #: src/locale/org.freedesktop.locale1.policy:22
 msgid "Set system locale"
-msgstr "Területi beállítás megadása"
+msgstr "Rendszer területi beállításának megadása"
 
 #: src/locale/org.freedesktop.locale1.policy:23
 msgid "Authentication is required to set the system locale."
@@ -212,7 +214,7 @@
 
 #: src/locale/org.freedesktop.locale1.policy:33
 msgid "Set system keyboard settings"
-msgstr "Rendszer billentyűzetbeállítások megadása"
+msgstr "Rendszer billentyűzetbeállításainak megadása"
 
 #: src/locale/org.freedesktop.locale1.policy:34
 msgid "Authentication is required to set the system keyboard settings."
@@ -221,7 +223,7 @@
 
 #: src/login/org.freedesktop.login1.policy:22
 msgid "Allow applications to inhibit system shutdown"
-msgstr "Alkalmazások meggátolhatják a rendszer leállítását"
+msgstr "Az alkalmazások meggátolhatják a rendszer leállítását"
 
 #: src/login/org.freedesktop.login1.policy:23
 msgid ""
@@ -232,7 +234,7 @@
 
 #: src/login/org.freedesktop.login1.policy:33
 msgid "Allow applications to delay system shutdown"
-msgstr "Alkalmazások késleltethetik a rendszer leállítását"
+msgstr "Az alkalmazások késleltethetik a rendszer leállítását"
 
 #: src/login/org.freedesktop.login1.policy:34
 msgid "Authentication is required for an application to delay system shutdown."
@@ -242,7 +244,7 @@
 
 #: src/login/org.freedesktop.login1.policy:44
 msgid "Allow applications to inhibit system sleep"
-msgstr "Alkalmazások meggátolhatják a rendszer altatását"
+msgstr "Az alkalmazások meggátolhatják a rendszer altatását"
 
 #: src/login/org.freedesktop.login1.policy:45
 msgid "Authentication is required for an application to inhibit system sleep."
@@ -251,7 +253,7 @@
 
 #: src/login/org.freedesktop.login1.policy:55
 msgid "Allow applications to delay system sleep"
-msgstr "Alkalmazások késleltethetik a rendszer altatását"
+msgstr "Az alkalmazások késleltethetik a rendszer altatását"
 
 #: src/login/org.freedesktop.login1.policy:56
 msgid "Authentication is required for an application to delay system sleep."
@@ -261,7 +263,7 @@
 
 #: src/login/org.freedesktop.login1.policy:65
 msgid "Allow applications to inhibit automatic system suspend"
-msgstr "Alkalmazások meggátolhatják a rendszer automatikus felfüggesztését"
+msgstr "Az alkalmazások meggátolhatják a rendszer automatikus felfüggesztését"
 
 #: src/login/org.freedesktop.login1.policy:66
 msgid ""
@@ -274,7 +276,7 @@
 #: src/login/org.freedesktop.login1.policy:75
 msgid "Allow applications to inhibit system handling of the power key"
 msgstr ""
-"Alkalmazások meggátolhatják a bekapcsoló gomb rendszer általi kezelését"
+"Az alkalmazások meggátolhatják a bekapcsoló gomb rendszer általi kezelését"
 
 #: src/login/org.freedesktop.login1.policy:76
 msgid ""
@@ -287,7 +289,7 @@
 #: src/login/org.freedesktop.login1.policy:86
 msgid "Allow applications to inhibit system handling of the suspend key"
 msgstr ""
-"Alkalmazások meggátolhatják a felfüggesztés gomb rendszer általi kezelését"
+"Az alkalmazások meggátolhatják a felfüggesztés gomb rendszer általi kezelését"
 
 #: src/login/org.freedesktop.login1.policy:87
 msgid ""
@@ -300,7 +302,7 @@
 #: src/login/org.freedesktop.login1.policy:97
 msgid "Allow applications to inhibit system handling of the hibernate key"
 msgstr ""
-"Alkalmazások meggátolhatják a hibernálás gomb rendszer általi kezelését"
+"Az alkalmazások meggátolhatják a hibernálás gomb rendszer általi kezelését"
 
 #: src/login/org.freedesktop.login1.policy:98
 msgid ""
@@ -312,7 +314,8 @@
 
 #: src/login/org.freedesktop.login1.policy:107
 msgid "Allow applications to inhibit system handling of the lid switch"
-msgstr "Alkalmazások meggátolhatják a fedélkapcsoló rendszer általi kezelését"
+msgstr ""
+"Az alkalmazások meggátolhatják a fedélkapcsoló rendszer általi kezelését"
 
 #: src/login/org.freedesktop.login1.policy:108
 msgid ""
@@ -323,22 +326,16 @@
 "kezelésének meggátlásához."
 
 #: src/login/org.freedesktop.login1.policy:117
-#, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
-"Alkalmazások meggátolhatják a bekapcsoló gomb rendszer általi kezelését"
+"Az alkalmazások meggátolhatják az újraindítás gomb rendszer általi kezelését"
 
 #: src/login/org.freedesktop.login1.policy:118
-#, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
 msgstr ""
-"Hitelesítés szükséges egy alkalmazás számára a bekapcsoló gomb rendszer "
+"Hitelesítés szükséges egy alkalmazás számára az újraindítás gomb rendszer "
 "általi kezelésének meggátlásához."
 
 #: src/login/org.freedesktop.login1.policy:128
@@ -348,8 +345,8 @@
 #: src/login/org.freedesktop.login1.policy:129
 msgid "Explicit request is required to run programs as a non-logged-in user."
 msgstr ""
-"Határozott kérés szükséges a programfuttatáshoz be nem jelentkezett "
-"felhasználóként."
+"Határozott kérés szükséges a be nem jelentkezett felhasználókénti "
+"programfuttatáshoz."
 
 #: src/login/org.freedesktop.login1.policy:138
 msgid "Allow non-logged-in users to run programs"
@@ -358,18 +355,18 @@
 #: src/login/org.freedesktop.login1.policy:139
 msgid "Authentication is required to run programs as a non-logged-in user."
 msgstr ""
-"Hitelesítés szükséges a programfuttatáshoz be nem jelentkezett "
-"felhasználóként."
+"Hitelesítés szükséges a be nem jelentkezett felhasználókénti "
+"programfuttatáshoz."
 
 #: src/login/org.freedesktop.login1.policy:148
 msgid "Allow attaching devices to seats"
-msgstr "Eszközök csatolásának engedélyezése munkaállomásokhoz"
+msgstr "Eszközök munkaállomásokhoz csatolásának engedélyezése"
 
 #: src/login/org.freedesktop.login1.policy:149
 msgid "Authentication is required to attach a device to a seat."
 msgstr ""
-"Hitelesítés szükséges eszköz csatolásának engedélyezéséhez egy "
-"munkaállomáshoz"
+"Hitelesítés szükséges az eszköz munkaállomáshoz csatolásának "
+"engedélyezéséhez."
 
 #: src/login/org.freedesktop.login1.policy:159
 msgid "Flush device to seat attachments"
@@ -425,7 +422,8 @@
 
 #: src/login/org.freedesktop.login1.policy:213
 msgid "Reboot the system while other users are logged in"
-msgstr "A rendszer újraindítása mialatt be vannak jelentkezve más felhasználók"
+msgstr ""
+"A rendszer újraindítása miközben be vannak jelentkezve más felhasználók"
 
 #: src/login/org.freedesktop.login1.policy:214
 msgid ""
@@ -449,52 +447,36 @@
 "ennek meggátlását kérte."
 
 #: src/login/org.freedesktop.login1.policy:235
-#, fuzzy
-#| msgid "Hibernate the system"
 msgid "Halt the system"
-msgstr "A rendszer hibernálása"
+msgstr "A rendszer leállítása"
 
 #: src/login/org.freedesktop.login1.policy:236
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to halt the system."
-msgstr "Hitelesítés szükséges a rendszer hibernálásához."
+msgstr "Hitelesítés szükséges a rendszer leállításához."
 
 #: src/login/org.freedesktop.login1.policy:246
-#, fuzzy
-#| msgid "Hibernate the system while other users are logged in"
 msgid "Halt the system while other users are logged in"
-msgstr "A rendszer hibernálása mialatt be vannak jelentkezve más felhasználók"
+msgstr "A rendszer leállítása miközben más felhasználók be vannak jelentkezve"
 
 #: src/login/org.freedesktop.login1.policy:247
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while other users are "
-#| "logged in."
 msgid ""
 "Authentication is required to halt the system while other users are logged "
 "in."
 msgstr ""
-"Hitelesítés szükséges a rendszer hibernálásához miközben be vannak "
-"jelentkezve más felhasználók."
+"Hitelesítés szükséges a rendszer leállításához miközben más felhasználók be "
+"vannak jelentkezve."
 
 #: src/login/org.freedesktop.login1.policy:257
-#, fuzzy
-#| msgid "Hibernate the system while an application is inhibiting this"
 msgid "Halt the system while an application is inhibiting this"
-msgstr "A rendszer hibernálása miközben egy alkalmazás ennek meggátlását kérte"
+msgstr "A rendszer leállítása miközben egy alkalmazás ennek meggátlását kérte"
 
 #: src/login/org.freedesktop.login1.policy:258
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
 msgstr ""
-"Hitelesítés szükséges a rendszer hibernálásához miközben egy alkalmazás "
-"ennek meggátlását kérte."
+"Hitelesítés szükséges a rendszer leállításához miközben egy alkalmazás ennek "
+"meggátlását kérte."
 
 #: src/login/org.freedesktop.login1.policy:268
 msgid "Suspend the system"
@@ -540,7 +522,7 @@
 
 #: src/login/org.freedesktop.login1.policy:310
 msgid "Hibernate the system while other users are logged in"
-msgstr "A rendszer hibernálása mialatt be vannak jelentkezve más felhasználók"
+msgstr "A rendszer hibernálása miközben be vannak jelentkezve más felhasználók"
 
 #: src/login/org.freedesktop.login1.policy:311
 msgid ""
@@ -583,59 +565,55 @@
 
 #: src/login/org.freedesktop.login1.policy:352
 msgid "Set the reboot \"reason\" in the kernel"
-msgstr ""
+msgstr "Az újraindítás „okának” beállítása a kernelben"
 
 #: src/login/org.freedesktop.login1.policy:353
-#, fuzzy
-#| msgid "Authentication is required to set the system timezone."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
-msgstr "Hitelesítés szükséges a rendszer időzónájának beállításához."
+msgstr ""
+"Hitelesítés szükséges a rendszer újraindítási „okának” beállításához a "
+"kernelben."
 
 #: src/login/org.freedesktop.login1.policy:363
-#, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
-msgstr "A firmware-nek jelezhető, hogy a beállítófelületet bootolja"
+msgstr ""
+"Jelzés a firmware számára, hogy a beállítófelületet indítsa el "
+"rendszerindításkor"
 
 #: src/login/org.freedesktop.login1.policy:364
 msgid ""
 "Authentication is required to indicate to the firmware to boot to setup "
 "interface."
 msgstr ""
-"Hitelesítés szükséges a firmware-nek jelzéshez, hogy a beállítófelületet "
-"bootolja"
+"Hitelesítés szükséges, hogy a firmware a beállítófelületet indítsa el "
+"rendszerindításkor."
 
 #: src/login/org.freedesktop.login1.policy:374
 msgid "Indicate to the boot loader to boot to the boot loader menu"
 msgstr ""
+"Jelzés a rendszerbetöltő számára, hogy a rendszerbetöltő menüt indítsa el "
+"rendszerindításkor"
 
 #: src/login/org.freedesktop.login1.policy:375
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
 msgstr ""
-"Hitelesítés szükséges a firmware-nek jelzéshez, hogy a beállítófelületet "
-"bootolja"
+"Hitelesítés szükséges, hogy a firmware a rendszerbetöltő menüt indítsa el "
+"rendszerindításkor."
 
 #: src/login/org.freedesktop.login1.policy:385
 msgid "Indicate to the boot loader to boot a specific entry"
 msgstr ""
+"Jelzés a rendszerbetöltő számára, hogy egy adott bejegyzést indítson el "
+"rendszerindításkor"
 
 #: src/login/org.freedesktop.login1.policy:386
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
 msgstr ""
-"Hitelesítés szükséges a firmware-nek jelzéshez, hogy a beállítófelületet "
-"bootolja"
+"Hitelesítés szükséges, hogy a rendszerbetöltő egy adott bejegyzést indítson "
+"el rendszerindításkor."
 
 #: src/login/org.freedesktop.login1.policy:396
 msgid "Set a wall message"
@@ -647,13 +625,11 @@
 
 #: src/login/org.freedesktop.login1.policy:406
 msgid "Change Session"
-msgstr ""
+msgstr "Munkamenet módosítása"
 
 #: src/login/org.freedesktop.login1.policy:407
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to change the virtual terminal."
-msgstr "Hitelesítés szükséges a helyi gépnév beállításához."
+msgstr "Hitelesítés szükséges a virtuális terminál módosításához."
 
 #: src/machine/org.freedesktop.machine1.policy:22
 msgid "Log into a local container"
@@ -661,7 +637,7 @@
 
 #: src/machine/org.freedesktop.machine1.policy:23
 msgid "Authentication is required to log into a local container."
-msgstr "Hitelesítés szükséges a bejelentkezéshez egy helyi konténerbe."
+msgstr "Hitelesítés szükséges a helyi konténerbe történő bejelentkezéshez."
 
 #: src/machine/org.freedesktop.machine1.policy:32
 msgid "Log into the local host"
@@ -669,7 +645,7 @@
 
 #: src/machine/org.freedesktop.machine1.policy:33
 msgid "Authentication is required to log into the local host."
-msgstr "Hitelesítés szükséges a bejelentkezéshez a helyi gépre."
+msgstr "Hitelesítés szükséges a helyi gépre történtő bejelentkezéshez."
 
 #: src/machine/org.freedesktop.machine1.policy:42
 msgid "Acquire a shell in a local container"
@@ -715,246 +691,210 @@
 
 #: src/machine/org.freedesktop.machine1.policy:95
 msgid "Manage local virtual machine and container images"
-msgstr "Helyi virtuális gép és konténer lemezképek kezelése"
+msgstr "Helyi virtuális gépek és konténerek lemezképeinek kezelése"
 
 #: src/machine/org.freedesktop.machine1.policy:96
 msgid ""
 "Authentication is required to manage local virtual machine and container "
 "images."
 msgstr ""
-"Hitelesítés szükséges a helyi virtuális gép és konténer lemezképek "
+"Hitelesítés szükséges a helyi virtuális gépek és konténerek lemezképeinek "
 "kezeléséhez."
 
 #: src/network/org.freedesktop.network1.policy:22
 msgid "Set NTP servers"
-msgstr ""
+msgstr "NTP-kiszolgálók beállítása"
 
 #: src/network/org.freedesktop.network1.policy:23
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
-msgstr "Hitelesítés szükséges a rendszeridő beállításához."
+msgstr "Hitelesítés szükséges az NTP-kiszolgálók beállításához."
 
 #: src/network/org.freedesktop.network1.policy:33
 #: src/resolve/org.freedesktop.resolve1.policy:44
 msgid "Set DNS servers"
-msgstr ""
+msgstr "DNS-kiszolgálók beállítása"
 
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set DNS servers."
-msgstr "Hitelesítés szükséges a rendszeridő beállításához."
+msgstr "Hitelesítés szükséges a DNS-kiszolgálók beállításához."
 
 #: src/network/org.freedesktop.network1.policy:44
 #: src/resolve/org.freedesktop.resolve1.policy:55
 msgid "Set domains"
-msgstr ""
+msgstr "Domainek beállítása"
 
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
-#, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
-msgstr "Hitelesítés szükséges a következő leállításához: „$(unit)”."
+msgstr "Hitelesítés szükséges a domainek beállításához."
 
 #: src/network/org.freedesktop.network1.policy:55
 #: src/resolve/org.freedesktop.resolve1.policy:66
 msgid "Set default route"
-msgstr ""
+msgstr "Alapértelmezett hálózati útvonal beállítása"
 
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
-msgstr "Hitelesítés szükséges a helyi gépnév beállításához."
+msgstr ""
+"Hitelesítés szükséges az alapértelmezett hálózati útvonal beállításához."
 
 #: src/network/org.freedesktop.network1.policy:66
 #: src/resolve/org.freedesktop.resolve1.policy:77
 msgid "Enable/disable LLMNR"
-msgstr ""
+msgstr "LLMNR engedélyezése/letiltása"
 
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
-msgstr "Hitelesítés szükséges a rendszer hibernálásához."
+msgstr "Hitelesítés szükséges az LLMNR engedélyezéséhez vagy kikapcsolásához."
 
 #: src/network/org.freedesktop.network1.policy:77
 #: src/resolve/org.freedesktop.resolve1.policy:88
 msgid "Enable/disable multicast DNS"
-msgstr ""
+msgstr "Multicast DNS engedélyezése/letiltása"
 
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
-#, fuzzy
-#| msgid "Authentication is required to log into the local host."
 msgid "Authentication is required to enable or disable multicast DNS."
-msgstr "Hitelesítés szükséges a bejelentkezéshez a helyi gépre."
+msgstr ""
+"Hitelesítés szükséges a multicast DNS engedélyezéséhez vagy kikapcsolásához."
 
 #: src/network/org.freedesktop.network1.policy:88
 #: src/resolve/org.freedesktop.resolve1.policy:99
 msgid "Enable/disable DNS over TLS"
-msgstr ""
+msgstr "TLS feletti DNS engedélyezése/letiltása"
 
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable DNS over TLS."
-msgstr "Hitelesítés szükséges a helyi gépnév beállításához."
+msgstr ""
+"Hitelesítés szükséges a TLS feletti DNS engedélyezéséhez vagy "
+"kikapcsolásához."
 
 #: src/network/org.freedesktop.network1.policy:99
 #: src/resolve/org.freedesktop.resolve1.policy:110
 msgid "Enable/disable DNSSEC"
-msgstr ""
+msgstr "DNSSEC engedélyezése/letiltása"
 
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
-msgstr "Hitelesítés szükséges a rendszer hibernálásához."
+msgstr "Hitelesítés szükséges a DNSSEC engedélyezéséhez vagy kikapcsolásához."
 
 #: src/network/org.freedesktop.network1.policy:110
 #: src/resolve/org.freedesktop.resolve1.policy:121
 msgid "Set DNSSEC Negative Trust Anchors"
-msgstr ""
+msgstr "DNSSEC Negative Trust Anchor beállítása"
 
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
-msgstr "Hitelesítés szükséges a rendszer területi beállításainak megadásához."
+msgstr "Hitelestés szükséges a DNSSEC Negative Trust Anchor beállításához."
 
 #: src/network/org.freedesktop.network1.policy:121
 msgid "Revert NTP settings"
-msgstr ""
+msgstr "NTP-beállítások visszaállítása"
 
 #: src/network/org.freedesktop.network1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
-msgstr "Hitelesítés szükséges a rendszeridő beállításához."
+msgstr "Hitelesítés szükséges az NTP-beállítások visszaállításához."
 
 #: src/network/org.freedesktop.network1.policy:132
 msgid "Revert DNS settings"
-msgstr ""
+msgstr "DNS-beállítások visszaállítása"
 
 #: src/network/org.freedesktop.network1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
-msgstr "Hitelesítés szükséges a rendszeridő beállításához."
+msgstr "Hitelesítés szükséges a DNS-beállítások visszaállításához."
 
 #: src/network/org.freedesktop.network1.policy:143
 msgid "DHCP server sends force renew message"
-msgstr ""
+msgstr "A DHCP-kiszolgáló kényszerített megújítási üzenetet küld"
 
 #: src/network/org.freedesktop.network1.policy:144
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
-msgstr "Hitelesítés szükséges a falüzenet beállításához"
+msgstr "Hitelesítés szükséges a kényszerített megújítási üzenetet küldéséhez."
 
 #: src/network/org.freedesktop.network1.policy:154
 msgid "Renew dynamic addresses"
-msgstr ""
+msgstr "Dinamikus címke megújítása"
 
 #: src/network/org.freedesktop.network1.policy:155
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
-msgstr "Hitelesítés szükséges a falüzenet beállításához"
+msgstr "Hitelesítés szükséges a dinamikus címke megújításához."
 
 #: src/network/org.freedesktop.network1.policy:165
 msgid "Reload network settings"
-msgstr ""
+msgstr "Hálózati beállítások újratöltése"
 
 #: src/network/org.freedesktop.network1.policy:166
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
-msgstr "Hitelesítés szükséges a systemd állapotának újratöltéséhez."
+msgstr "Hitelesítés szükséges a hálózati beállítások újratöltéséhez."
 
 #: src/network/org.freedesktop.network1.policy:176
 msgid "Reconfigure network interface"
-msgstr ""
+msgstr "Hálózati csatoló újrakonfigurálása"
 
 #: src/network/org.freedesktop.network1.policy:177
-#, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
-msgstr "Hitelesítés szükséges a rendszer újraindításához."
+msgstr "Hitelesítés szükséges a hálózati csatoló újrakonfigurálásához."
 
 #: src/portable/org.freedesktop.portable1.policy:13
 msgid "Inspect a portable service image"
-msgstr ""
+msgstr "Hordozható szolgáltatás lemezképének vizsgálata"
 
 #: src/portable/org.freedesktop.portable1.policy:14
-#, fuzzy
-#| msgid "Authentication is required to import a VM or container image"
 msgid "Authentication is required to inspect a portable service image."
-msgstr "Hitelesítés szükséges a VM vagy konténer lemezkép importálásához."
+msgstr ""
+"Hitelesítés szükséges a hordozható szolgáltatás lemezképének vizsgálatához."
 
 #: src/portable/org.freedesktop.portable1.policy:23
 msgid "Attach or detach a portable service image"
-msgstr ""
+msgstr "Hordozható szolgáltatás lemezképének csatolása vagy leválasztása"
 
 #: src/portable/org.freedesktop.portable1.policy:24
-#, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr ""
-"Hitelesítés szükséges eszköz csatolásának engedélyezéséhez egy "
-"munkaállomáshoz"
+"Hitelesítés szükséges a hordozható szolgáltatás lemezképének csatolásához "
+"vagy leválasztásához."
 
 #: src/portable/org.freedesktop.portable1.policy:34
 msgid "Delete or modify portable service image"
-msgstr ""
+msgstr "Hordozható szolgáltatás lemezképének törlése vagy módosítása"
 
 #: src/portable/org.freedesktop.portable1.policy:35
-#, fuzzy
-#| msgid "Authentication is required to download a VM or container image"
 msgid ""
 "Authentication is required to delete or modify a portable service image."
-msgstr "Hitelesítés szükséges a VM vagy konténer lemezkép letöltéséhez."
+msgstr ""
+"Hitelesítés szükséges a hordozható szolgáltatás lemezképének törléséhez vagy "
+"módosításához."
 
 #: src/resolve/org.freedesktop.resolve1.policy:22
 msgid "Register a DNS-SD service"
-msgstr ""
+msgstr "DNS-SD szolgáltatás regisztrálása"
 
 #: src/resolve/org.freedesktop.resolve1.policy:23
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to register a DNS-SD service"
-msgstr "Hitelesítés szükséges a falüzenet beállításához"
+msgstr "Hitelesítés szükséges a DNS-SD szolgáltatás regisztrálásához"
 
 #: src/resolve/org.freedesktop.resolve1.policy:33
 msgid "Unregister a DNS-SD service"
-msgstr ""
+msgstr "DNS-SD szolgáltatás kiregisztrálása"
 
 #: src/resolve/org.freedesktop.resolve1.policy:34
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to unregister a DNS-SD service"
-msgstr "Hitelesítés szükséges a falüzenet beállításához"
+msgstr "Hitelesítés szükséges a DNS-SD szolgáltatás kiregisztrálásához"
 
 #: src/resolve/org.freedesktop.resolve1.policy:132
 msgid "Revert name resolution settings"
-msgstr ""
+msgstr "Névfeloldási beállítások visszaállítása"
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
-msgstr ""
-"Hitelesítés szükséges a rendszer billentyűzetbeállításainak megadásához."
+msgstr "Hitelesítés szükséges a névfeloldási beállítások visszaállításához."
 
 #: src/timedate/org.freedesktop.timedate1.policy:22
 msgid "Set system time"
@@ -1010,45 +950,38 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Hitelesítés szükséges a következő újraindításához: „$(unit)”."
 
-#: src/core/dbus-unit.c:535
-#, fuzzy
-#| msgid "Authentication is required to set properties on '$(unit)'."
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
-"Hitelesítés szükséges a következő tulajdonságainak beállításához: „$(unit)”."
+"Hitelesítés szükséges a UNIX szignál elküldéséhez a következő folyamatai "
+"számára: „$(unit)”."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Hitelesítés szükséges a következő „sikertelen” állapotának törléséhez: "
 "„$(unit)”."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "Hitelesítés szükséges a következő tulajdonságainak beállításához: „$(unit)”."
 
-#: src/core/dbus-unit.c:708
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
-"Hitelesítés szükséges a következő „sikertelen” állapotának törléséhez: "
-"„$(unit)”."
+"Hitelesítés szükséges a következővel kapcsolatos fájlok és könyvtárak "
+"törléséhez: „$(unit)”."
 
-#: src/core/dbus-unit.c:757
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
-"Hitelesítés szükséges a következő „sikertelen” állapotának törléséhez: "
+"Hitelesítés szükséges a következő egység folyamatainak befagyasztásához: "
 "„$(unit)”."
 
 #~ msgid "Authentication is required to kill '$(unit)'."
diff --git a/po/id.po b/po/id.po
index eb97992..fd63f2b 100644
--- a/po/id.po
+++ b/po/id.po
@@ -1,21 +1,21 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 #
 # Indonesian translation for systemd.
-# Andika Triwidada <andika@gmail.com>, 2014.
-#
+# Andika Triwidada <andika@gmail.com>, 2014, 2021, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2018-03-04 11:12+0700\n"
-"Last-Translator: Andika Triwidada <atriwidada@gnome.org>\n"
-"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-11-25 08:19+0000\n"
+"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
+"Language-Team: Indonesian <https://translate.fedoraproject.org/projects/"
+"systemd/master/id/>\n"
 "Language: id\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.11\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.14.2\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -67,67 +67,57 @@
 
 #: src/home/org.freedesktop.home1.policy:13
 msgid "Create a home area"
-msgstr ""
+msgstr "Menciptakan suatu area rumah"
 
 #: src/home/org.freedesktop.home1.policy:14
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
-msgstr "Otentikasi diperlukan untuk memuat ulang keadaan systemd."
+msgstr "Otentikasi diperlukan untuk mencipta suatu area rumah pengguna."
 
 #: src/home/org.freedesktop.home1.policy:23
 msgid "Remove a home area"
-msgstr ""
+msgstr "Hapus suatu area rumah"
 
 #: src/home/org.freedesktop.home1.policy:24
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
-msgstr "Otentikasi diperlukan untuk memuat ulang keadaan systemd."
+msgstr "Otentikasi diperlukan untuk menghapus area rumah pengguna."
 
 #: src/home/org.freedesktop.home1.policy:33
 msgid "Check credentials of a home area"
-msgstr ""
+msgstr "Memeriksa kredensial dari suatu area rumah"
 
 #: src/home/org.freedesktop.home1.policy:34
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
-msgstr "Otentikasi diperlukan untuk mengelola seat, pengguna, dan sesi aktif."
+msgstr ""
+"Otentikasi diperlukan untuk memeriksa kredensial atas suatu area rumah "
+"pengguna."
 
 #: src/home/org.freedesktop.home1.policy:43
 msgid "Update a home area"
-msgstr ""
+msgstr "Memperbarui suatu area rumah"
 
 #: src/home/org.freedesktop.home1.policy:44
-#, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
-msgstr "Otentikasi diperlukan untuk mencantol suatu perangkat ke sebuah seat."
+msgstr "Otentikasi diperlukan untuk memperbarui suatu area rumah pengguna."
 
 #: src/home/org.freedesktop.home1.policy:53
 msgid "Resize a home area"
-msgstr ""
+msgstr "Mengubah ukuran area rumah"
 
 #: src/home/org.freedesktop.home1.policy:54
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
-msgstr "Otentikasi diperlukan untuk menyetel pesan wall"
+msgstr "Otentikasi diperlukan untuk mengubah ukuran area rumah pengguna."
 
 #: src/home/org.freedesktop.home1.policy:63
 msgid "Change password of a home area"
-msgstr ""
+msgstr "Ubah kata sandi dari suatu area rumah"
 
 #: src/home/org.freedesktop.home1.policy:64
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
-msgstr "Otentikasi diperlukan untuk mengelola seat, pengguna, dan sesi aktif."
+msgstr ""
+"Otentikasi diperlukan untuk mengubah kata sandi dari suatu area rumah "
+"pengguna."
 
 #: src/hostname/org.freedesktop.hostname1.policy:20
 msgid "Set hostname"
@@ -159,13 +149,27 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:51
 msgid "Get product UUID"
-msgstr ""
+msgstr "Dapatkan UUID produk"
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
-#, fuzzy
-#| msgid "Authentication is required to reload '$(unit)'."
 msgid "Authentication is required to get product UUID."
-msgstr "Otentikasi diperlukan untuk memuat ulang '$(unit)'."
+msgstr "Otentikasi diperlukan untuk mendapatkan UUID produk."
+
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Dapatkan nomor seri perangkat keras"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Otentikasi diperlukan untuk mendapatkan nomor seri perangkat keras."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Dapatkan deskripsi sistem"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Otentikasi diperlukan untuk mendapatkan deskripsi sistem."
 
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
@@ -302,22 +306,16 @@
 "atas saklar lid."
 
 #: src/login/org.freedesktop.login1.policy:117
-#, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
-msgstr "Ijinkan aplikasi mencegah penanganan sistem atas tombol daya"
+msgstr "Izinkan aplikasi mencegah penanganan sistem atas tombol reboot"
 
 #: src/login/org.freedesktop.login1.policy:118
-#, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
 msgstr ""
 "Otentikasi diperlukan bagi suatu aplikasi untuk mencegah penanganan sistem "
-"atas tombol daya."
+"atas tombol reboot."
 
 #: src/login/org.freedesktop.login1.policy:128
 msgid "Allow non-logged-in user to run programs"
@@ -445,15 +443,11 @@
 msgstr "Halt sistem ketika sebuah aplikasi meminta untuk mencegahnya"
 
 #: src/login/org.freedesktop.login1.policy:258
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
 msgstr ""
-"Otentikasi diperlukan untuk menghibernasi sistem ketika sebuah aplikasi "
+"Otentikasi diperlukan untuk menghentikan sistem ketika sebuah aplikasi "
 "meminta mencegahnya."
 
 #: src/login/org.freedesktop.login1.policy:268
@@ -498,7 +492,7 @@
 
 #: src/login/org.freedesktop.login1.policy:310
 msgid "Hibernate the system while other users are logged in"
-msgstr "Hibernasikan sistem ketika pengguna lain sedang log masuk."
+msgstr "Hibernasikan sistem ketika pengguna lain sedang log masuk"
 
 #: src/login/org.freedesktop.login1.policy:311
 msgid ""
@@ -510,7 +504,7 @@
 
 #: src/login/org.freedesktop.login1.policy:321
 msgid "Hibernate the system while an application is inhibiting this"
-msgstr "Hibernasikan sistem ketika sebuah aplikasi meminta untuk mencegahnya."
+msgstr "Hibernasikan sistem ketika sebuah aplikasi meminta untuk mencegahnya"
 
 #: src/login/org.freedesktop.login1.policy:322
 msgid ""
@@ -538,19 +532,15 @@
 
 #: src/login/org.freedesktop.login1.policy:352
 msgid "Set the reboot \"reason\" in the kernel"
-msgstr ""
+msgstr "Atur \"alasan\" reboot dalam kernel"
 
 #: src/login/org.freedesktop.login1.policy:353
-#, fuzzy
-#| msgid "Authentication is required to set the system timezone."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
-msgstr "Otentikasi diperlukan untuk menyetel zona waktu sistem."
+msgstr "Otentikasi diperlukan untuk menyetel \"alasan\" reboot dalam kernel."
 
 #: src/login/org.freedesktop.login1.policy:363
-#, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
-msgstr "Ijinkan indikasi ke firmware untuk boot ke antar muka penyiapan"
+msgstr "Indikasikan ke firmware untuk boot ke antar muka penyiapan"
 
 #: src/login/org.freedesktop.login1.policy:364
 msgid ""
@@ -562,35 +552,27 @@
 
 #: src/login/org.freedesktop.login1.policy:374
 msgid "Indicate to the boot loader to boot to the boot loader menu"
-msgstr ""
+msgstr "Indikasikan ke boot loader untuk boot ke menu boot loader"
 
 #: src/login/org.freedesktop.login1.policy:375
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
 msgstr ""
-"Otentikasi diperlukan untuk mengindikasikan ke firmware agar boot ke "
-"antarmuka penyiapan."
+"Otentikasi diperlukan untuk mengindikasikan ke boot loader agar boot ke menu "
+"boot loader."
 
 #: src/login/org.freedesktop.login1.policy:385
 msgid "Indicate to the boot loader to boot a specific entry"
-msgstr ""
+msgstr "Indikasikan ke boot loader untuk boot suatu entri spesifik"
 
 #: src/login/org.freedesktop.login1.policy:386
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
 msgstr ""
-"Otentikasi diperlukan untuk mengindikasikan ke firmware agar boot ke "
-"antarmuka penyiapan."
+"Otentikasi diperlukan untuk mengindikasikan ke boot loader agar boot ke "
+"entri boot loader tertentu."
 
 #: src/login/org.freedesktop.login1.policy:396
 msgid "Set a wall message"
@@ -602,13 +584,11 @@
 
 #: src/login/org.freedesktop.login1.policy:406
 msgid "Change Session"
-msgstr ""
+msgstr "Ubah Sesi"
 
 #: src/login/org.freedesktop.login1.policy:407
-#, fuzzy
-#| msgid "Authentication is required to halt the system."
 msgid "Authentication is required to change the virtual terminal."
-msgstr "Otentikasi diperlukan untuk meng-halt sistem."
+msgstr "Otentikasi diperlukan untuk mengubah terminal virtual."
 
 #: src/machine/org.freedesktop.machine1.policy:22
 msgid "Log into a local container"
@@ -688,203 +668,171 @@
 
 #: src/network/org.freedesktop.network1.policy:22
 msgid "Set NTP servers"
-msgstr ""
+msgstr "Atur server NTP"
 
 #: src/network/org.freedesktop.network1.policy:23
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
-msgstr "Otentikasi diperlukan untuk menyetel waktu sistem."
+msgstr "Otentikasi diperlukan untuk menyetel server NTP."
 
 #: src/network/org.freedesktop.network1.policy:33
 #: src/resolve/org.freedesktop.resolve1.policy:44
-#, fuzzy
-#| msgid "Register a DNS-SD service"
 msgid "Set DNS servers"
-msgstr "Daftarkan suatu layanan DNS-SD"
+msgstr "Atur server DNS"
 
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
-#, fuzzy
-#| msgid "Authentication is required to register a DNS-SD service"
 msgid "Authentication is required to set DNS servers."
-msgstr "Otentikasi diperlukan untuk mendaftarkan suatu layanan DNS-SD"
+msgstr "Otentikasi diperlukan untuk mengatur server DNS."
 
 #: src/network/org.freedesktop.network1.policy:44
 #: src/resolve/org.freedesktop.resolve1.policy:55
 msgid "Set domains"
-msgstr ""
+msgstr "Atur domain"
 
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
-#, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
-msgstr "Otentikasi diperlukan untuk menghentikan '$(unit)'."
+msgstr "Otentikasi diperlukan untuk mengatur domain."
 
 #: src/network/org.freedesktop.network1.policy:55
 #: src/resolve/org.freedesktop.resolve1.policy:66
 msgid "Set default route"
-msgstr ""
+msgstr "Atur rute baku"
 
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
-#, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
-msgstr "Otentikasi diperlukan untuk menata nama host lokal."
+msgstr "Otentikasi diperlukan untuk menata rute baku."
 
 #: src/network/org.freedesktop.network1.policy:66
 #: src/resolve/org.freedesktop.resolve1.policy:77
 msgid "Enable/disable LLMNR"
-msgstr ""
+msgstr "Fungsikan/nonaktifkan LLMNR"
 
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
-msgstr "Otentikasi diperlukan untuk menghibernasi sistem."
+msgstr "Otentikasi diperlukan untuk memfungsikan atau menonaktifkan LLMNR."
 
 #: src/network/org.freedesktop.network1.policy:77
 #: src/resolve/org.freedesktop.resolve1.policy:88
 msgid "Enable/disable multicast DNS"
-msgstr ""
+msgstr "Fungsikan/nonaktifkan DNS multicast"
 
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
-#, fuzzy
-#| msgid "Authentication is required to log into the local host."
 msgid "Authentication is required to enable or disable multicast DNS."
-msgstr "Otentikasi diperlukan untuk log masuk ke dalam host lokal."
+msgstr ""
+"Otentikasi diperlukan untuk memfungsikan atau menonaktifkan DNS multicast."
 
 #: src/network/org.freedesktop.network1.policy:88
 #: src/resolve/org.freedesktop.resolve1.policy:99
 msgid "Enable/disable DNS over TLS"
-msgstr ""
+msgstr "Fungsikan/nonaktifkan DNS over TLS"
 
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
-#, fuzzy
-#| msgid "Authentication is required to register a DNS-SD service"
 msgid "Authentication is required to enable or disable DNS over TLS."
-msgstr "Otentikasi diperlukan untuk mendaftarkan suatu layanan DNS-SD"
+msgstr ""
+"Otentikasi diperlukan untuk memfungsikan atau menonaktifkan DNS over TLS."
 
 #: src/network/org.freedesktop.network1.policy:99
 #: src/resolve/org.freedesktop.resolve1.policy:110
 msgid "Enable/disable DNSSEC"
-msgstr ""
+msgstr "Fungsikan/nonaktifkan DNSSEC"
 
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
-#, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
-msgstr "Otentikasi diperlukan untuk menghibernasi sistem."
+msgstr "Otentikasi diperlukan untuk memfungsikan atau menonaktifkan DNSSEC."
 
 #: src/network/org.freedesktop.network1.policy:110
 #: src/resolve/org.freedesktop.resolve1.policy:121
 msgid "Set DNSSEC Negative Trust Anchors"
-msgstr ""
+msgstr "Atur Negative Trust Anchor DNSSEC"
 
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
-msgstr "Otentikasi diperlukan untuk menyetel locale sistem."
+msgstr "Otentikasi diperlukan untuk mengatur Negative Trust Anchor DNSSEC."
 
 #: src/network/org.freedesktop.network1.policy:121
 msgid "Revert NTP settings"
-msgstr ""
+msgstr "Pulihkan pengaturan NTP"
 
 #: src/network/org.freedesktop.network1.policy:122
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
-msgstr "Otentikasi diperlukan untuk menyetel waktu sistem."
+msgstr "Otentikasi diperlukan untuk mereset pengaturan NTP."
 
 #: src/network/org.freedesktop.network1.policy:132
 msgid "Revert DNS settings"
-msgstr ""
+msgstr "Pulihkan pengaturan DNS"
 
 #: src/network/org.freedesktop.network1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
-msgstr "Otentikasi diperlukan untuk menyetel waktu sistem."
+msgstr "Otentikasi diperlukan untuk me-reset pengaturan DNS."
 
 #: src/network/org.freedesktop.network1.policy:143
 msgid "DHCP server sends force renew message"
-msgstr ""
+msgstr "Server HDCP mengirim pesan paksa pembaruan ulang"
 
 #: src/network/org.freedesktop.network1.policy:144
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
-msgstr "Otentikasi diperlukan untuk menyetel pesan wall"
+msgstr "Otentikasi diperlukan untuk mengirim pesan paksa pembaruan ulang."
 
 #: src/network/org.freedesktop.network1.policy:154
 msgid "Renew dynamic addresses"
-msgstr ""
+msgstr "Perbarui ulang alamat-alamat dinamis"
 
 #: src/network/org.freedesktop.network1.policy:155
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
-msgstr "Otentikasi diperlukan untuk menyetel pesan wall"
+msgstr "Otentikasi diperlukan untuk memperbarui alamat-alamat dinamis."
 
 #: src/network/org.freedesktop.network1.policy:165
 msgid "Reload network settings"
-msgstr ""
+msgstr "Muat ulang pengaturan jaringan"
 
 #: src/network/org.freedesktop.network1.policy:166
-#, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
-msgstr "Otentikasi diperlukan untuk memuat ulang keadaan systemd."
+msgstr "Otentikasi diperlukan untuk memuat ulang pengaturan jaringan."
 
 #: src/network/org.freedesktop.network1.policy:176
 msgid "Reconfigure network interface"
-msgstr ""
+msgstr "Konfigurasi ulang antar muka jaringan"
 
 #: src/network/org.freedesktop.network1.policy:177
-#, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
-msgstr "Otentikasi diperlukan untuk mem-boot ulang sistem."
+msgstr "Otentikasi diperlukan untuk mengonfigurasi ulang antar muka jaringan."
 
 #: src/portable/org.freedesktop.portable1.policy:13
 msgid "Inspect a portable service image"
-msgstr ""
+msgstr "Memeriksa suatu image layanan portabel"
 
 #: src/portable/org.freedesktop.portable1.policy:14
-#, fuzzy
-#| msgid "Authentication is required to import a VM or container image"
 msgid "Authentication is required to inspect a portable service image."
-msgstr "Otentikasi diperlukan untuk mengimpor suatu image kontainer atau VM"
+msgstr "Otentikasi diperlukan untuk memeriksa suatu image layanan portabel."
 
 #: src/portable/org.freedesktop.portable1.policy:23
 msgid "Attach or detach a portable service image"
-msgstr ""
+msgstr "Cantol atau lepaskan suatu image layanan portabel"
 
 #: src/portable/org.freedesktop.portable1.policy:24
-#, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
-msgstr "Otentikasi diperlukan untuk mencantol suatu perangkat ke sebuah seat."
+msgstr ""
+"Otentikasi diperlukan untuk mencantol atau melepas suatu image layanan "
+"portabel."
 
 #: src/portable/org.freedesktop.portable1.policy:34
 msgid "Delete or modify portable service image"
-msgstr ""
+msgstr "Hapus atau ubah image layanan portabel"
 
 #: src/portable/org.freedesktop.portable1.policy:35
-#, fuzzy
-#| msgid "Authentication is required to download a VM or container image"
 msgid ""
 "Authentication is required to delete or modify a portable service image."
-msgstr "Otentikasi diperlukan untuk mengunduh suatu image kontainer atau VM"
+msgstr ""
+"Otentikasi diperlukan untuk menghapus atau mengubah suatu image layanan "
+"portabel."
 
 #: src/resolve/org.freedesktop.resolve1.policy:22
 msgid "Register a DNS-SD service"
@@ -904,13 +852,11 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:132
 msgid "Revert name resolution settings"
-msgstr ""
+msgstr "Pulihkan pengaturan resolusi nama"
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
-#, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
-msgstr "Otentikasi diperlukan untuk menyetel pengaturan papan tik sistem."
+msgstr "Otentikasi diperlukan untuk me-reset pengaturan resolusi nama."
 
 #: src/timedate/org.freedesktop.timedate1.policy:22
 msgid "Set system time"
@@ -968,41 +914,37 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Otentikasi diperlukan untuk memulai ulang '$(unit)'."
 
-#: src/core/dbus-unit.c:535
-#, fuzzy
-#| msgid "Authentication is required to set properties on '$(unit)'."
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
-msgstr "Otentikasi diperlukan untuk menata properti pada '$(unit)'."
+msgstr ""
+"Otentikasi diperlukan untuk megirim suatu sinyal UNIX ke proses dari "
+"'$(unit)'."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Otentikasi diperlukan untuk me-reset keadaan \"failed\" dari '$(unit)'."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Otentikasi diperlukan untuk menata properti pada '$(unit)'."
 
-#: src/core/dbus-unit.c:708
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
-"Otentikasi diperlukan untuk me-reset keadaan \"failed\" dari '$(unit)'."
+"Otentikasi diperlukan untuk menghapus berkas dan direktori yang terkait "
+"dengan '$(unit)'."
 
-#: src/core/dbus-unit.c:757
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
-"Otentikasi diperlukan untuk me-reset keadaan \"failed\" dari '$(unit)'."
+"Otentikasi diperlukan untuk membekukan atau melanjutkan proses dari unit "
+"'$(unit)'."
 
 #~ msgid ""
 #~ "Authentication is required to halt the system while an application asked "
diff --git a/po/it.po b/po/it.po
index 42156d5..edba96c 100644
--- a/po/it.po
+++ b/po/it.po
@@ -2,13 +2,13 @@
 #
 # Italian translation for systemd package
 # Traduzione in italiano per il pacchetto systemd
-# Daniele Medri <dmedri@gmail.com>, 2013-2021.
+# Daniele Medri <dmedri@gmail.com>, 2013-2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-01-08 17:51+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-04-26 15:57+0200\n"
 "Last-Translator: Daniele Medri <dmedri@gmail.com>\n"
 "Language-Team: italian\n"
 "Language: it\n"
@@ -16,7 +16,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 2.2.1\n"
+"X-Generator: Poedit 2.4.2\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -67,7 +67,7 @@
 
 #: src/core/org.freedesktop.systemd1.policy.in:65
 msgid "Authentication is required to reload the systemd state."
-msgstr "Autenticazione richiesta per riavviare lo stato di sistemd."
+msgstr "Autenticazione richiesta per ricaricare lo stato di systemd."
 
 #: src/home/org.freedesktop.home1.policy:13
 msgid "Create a home area"
@@ -161,6 +161,23 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Autenticazione richiesta per ottenere il UUID prodotto."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Ottieni il numero di serie dell'hardware"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr ""
+"L'autenticazione è necessaria per ottenere il numero di serie dell'hardware."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Ottieni la descrizione del sistema"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "L'autenticazione è necessaria per ottenere la descrizione del sistema."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importa un'immagine VM o un container"
@@ -919,46 +936,46 @@
 
 #: src/core/dbus-unit.c:359
 msgid "Authentication is required to start '$(unit)'."
-msgstr "Autenticazione richiesta per avviare '${unit}'."
+msgstr "Autenticazione richiesta per avviare '$(unit)'."
 
 #: src/core/dbus-unit.c:360
 msgid "Authentication is required to stop '$(unit)'."
-msgstr "Autenticazione richiesta per fermare '${unit}'."
+msgstr "Autenticazione richiesta per fermare '$(unit)'."
 
 #: src/core/dbus-unit.c:361
 msgid "Authentication is required to reload '$(unit)'."
-msgstr "Autenticazione richiesta per ricaricare '${unit}'."
+msgstr "Autenticazione richiesta per ricaricare '$(unit)'."
 
 #: src/core/dbus-unit.c:362 src/core/dbus-unit.c:363
 msgid "Authentication is required to restart '$(unit)'."
-msgstr "Autenticazione richiesta per riavviare '${unit}'."
+msgstr "Autenticazione richiesta per riavviare '$(unit)'."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 "Autenticazione richiesta per inviare un segnale UNIX ai processi di "
-"'${unit}'."
+"'$(unit)'."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
-"Autenticazione richiesta per riconfigurare lo stato \"fallito\" di '${unit}'."
+"Autenticazione richiesta per riconfigurare lo stato \"fallito\" di '$(unit)'."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
-msgstr "Autenticazione richiesta per configurare le proprietà di '${unit}'."
+msgstr "Autenticazione richiesta per configurare le proprietà di '$(unit)'."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 "Autenticazione richiesta per eliminare i file e le directory associate a "
-"'${unit}'."
+"'$(unit)'."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/ja.po b/po/ja.po
index 46bcb43..b1037f7 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -2,18 +2,21 @@
 #
 # Japanese translation for systemd.
 #
+# Takuro Onoue <kusanaginoturugi@gmail.com>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2018-10-27 07:41+0900\n"
-"Last-Translator: Yu Watanabe <watanabe.yu+github@gmail.com>\n"
-"Language-Team: \n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2021-09-09 03:04+0000\n"
+"Last-Translator: Takuro Onoue <kusanaginoturugi@gmail.com>\n"
+"Language-Team: Japanese <https://translate.fedoraproject.org/projects/"
+"systemd/master/ja/>\n"
 "Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.8\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -144,13 +147,29 @@
 msgid "Authentication is required to get product UUID."
 msgstr "プロダクトUUIDを取得するには認証が必要です。"
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "ハードウェアのシリアル番号を取得する"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "ハードウェアのシリアル番号を取得するには認証が必要です。"
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "システムの説明を取得"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "システムの説明を取得するには認証が必要です。"
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "仮想マシンもしくはコンテナイメージの読込"
 
 #: src/import/org.freedesktop.import1.policy:23
 msgid "Authentication is required to import a VM or container image"
-msgstr "仮想マシンもしくはコンテナイメージを読込むには認証が必要です。"
+msgstr "仮想マシンもしくはコンテナイメージを読込むには認証が必要です"
 
 #: src/import/org.freedesktop.import1.policy:32
 msgid "Export a VM or container image"
@@ -158,7 +177,7 @@
 
 #: src/import/org.freedesktop.import1.policy:33
 msgid "Authentication is required to export a VM or container image"
-msgstr "仮想マシンもしくはコンテナイメージを書出すには認証が必要です。"
+msgstr "仮想マシンもしくはコンテナイメージを書出すには認証が必要です"
 
 #: src/import/org.freedesktop.import1.policy:42
 msgid "Download a VM or container image"
@@ -166,8 +185,7 @@
 
 #: src/import/org.freedesktop.import1.policy:43
 msgid "Authentication is required to download a VM or container image"
-msgstr ""
-"仮想マシンもしくはコンテナイメージをダウンロードするには認証が必要です。"
+msgstr "仮想マシンもしくはコンテナイメージをダウンロードするには認証が必要です"
 
 #: src/locale/org.freedesktop.locale1.policy:22
 msgid "Set system locale"
@@ -511,7 +529,7 @@
 
 #: src/login/org.freedesktop.login1.policy:374
 msgid "Indicate to the boot loader to boot to the boot loader menu"
-msgstr "ブートローダにブートローダメニューを起動するための項目を表示させる。"
+msgstr "ブートローダにブートローダメニューを起動するための項目を表示させる"
 
 #: src/login/org.freedesktop.login1.policy:375
 msgid ""
@@ -537,7 +555,7 @@
 
 #: src/login/org.freedesktop.login1.policy:397
 msgid "Authentication is required to set a wall message"
-msgstr "全ユーザへのメッセージを設定するには認証が必要です。"
+msgstr "全ユーザへのメッセージを設定するには認証が必要です"
 
 #: src/login/org.freedesktop.login1.policy:406
 msgid "Change Session"
@@ -783,7 +801,7 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:23
 msgid "Authentication is required to register a DNS-SD service"
-msgstr "DNS-SDサービスを登録するには認証が必要です。"
+msgstr "DNS-SDサービスを登録するには認証が必要です"
 
 #: src/resolve/org.freedesktop.resolve1.policy:33
 msgid "Unregister a DNS-SD service"
@@ -791,7 +809,7 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:34
 msgid "Authentication is required to unregister a DNS-SD service"
-msgstr "DNS-SDサービスへの登録を解除するには認証が必要です。"
+msgstr "DNS-SDサービスへの登録を解除するには認証が必要です"
 
 #: src/resolve/org.freedesktop.resolve1.policy:132
 msgid "Revert name resolution settings"
@@ -855,28 +873,28 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "'$(unit)'を再起動するには認証が必要です。"
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "'$(unit)'のプロセスにUNIXシグナルを送るには認証が必要です。"
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr "'$(unit)'の「失敗」状態をリセットするには認証が必要です。"
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "'$(unit)'のプロパティを設定するには認証が必要です。"
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 "'$(unit)'に関連付けられたファイルやディレクトリの削除には認証が必要です。"
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr "'$(unit)'のプロセスを凍結もしくは凍結解除するには認証が必要です。"
diff --git a/po/ka.po b/po/ka.po
new file mode 100644
index 0000000..7ae99a8
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,936 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
+msgid ""
+msgstr ""
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-25 22:19+0000\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
+"Language-Team: Georgian <https://translate.fedoraproject.org/projects/"
+"systemd/master/ka/>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.14.1\n"
+
+#: src/core/org.freedesktop.systemd1.policy.in:22
+msgid "Send passphrase back to system"
+msgstr "საკვანძო ფრაზის სისტემაში გადაგზავნა"
+
+#: src/core/org.freedesktop.systemd1.policy.in:23
+msgid ""
+"Authentication is required to send the entered passphrase back to the system."
+msgstr "საკვანძო ფრაზის სისტემისთვის დასაბრუნებლად საჭიროა ავთენტიკაცია."
+
+#: src/core/org.freedesktop.systemd1.policy.in:33
+msgid "Manage system services or other units"
+msgstr "სისტემური და სხვა სერვისების მართვა"
+
+#: src/core/org.freedesktop.systemd1.policy.in:34
+msgid "Authentication is required to manage system services or other units."
+msgstr "სისტემური და სხვა სერვისების მართვისთვის საჭიროა ავთენტიკაცია."
+
+#: src/core/org.freedesktop.systemd1.policy.in:43
+msgid "Manage system service or unit files"
+msgstr "სისტემური სერვისების ან ფაილების მართვა"
+
+#: src/core/org.freedesktop.systemd1.policy.in:44
+msgid "Authentication is required to manage system service or unit files."
+msgstr "სისტემური სერვისების ან ფაილების მართვისათვის საჭიროა ავთენტიკაცია."
+
+#: src/core/org.freedesktop.systemd1.policy.in:54
+msgid "Set or unset system and service manager environment variables"
+msgstr "სისტემისა და სერვისების მმართველის გარემოს ცვლადების დაყენება და წაშლა"
+
+#: src/core/org.freedesktop.systemd1.policy.in:55
+msgid ""
+"Authentication is required to set or unset system and service manager "
+"environment variables."
+msgstr ""
+"სისტემისა და სერვისის მენეჯერის გარემოს ცვლადების დასაყენებლად ან წასაშლელად "
+"საჭიროა ავთენტიკაცია."
+
+#: src/core/org.freedesktop.systemd1.policy.in:64
+msgid "Reload the systemd state"
+msgstr "systemd-ის მდგომარეობის თავიდან ჩატვირთვა"
+
+#: src/core/org.freedesktop.systemd1.policy.in:65
+msgid "Authentication is required to reload the systemd state."
+msgstr "systemd-ის მდგომარეობის თავიდან ჩატვირთვის საჭიროა ავთენტიკაცია."
+
+#: src/home/org.freedesktop.home1.policy:13
+msgid "Create a home area"
+msgstr "შექმენით სახლის ტერიტორია"
+
+#: src/home/org.freedesktop.home1.policy:14
+msgid "Authentication is required to create a user's home area."
+msgstr "სახლის ტერიტორიის შესაქმნელად საჭიროა ავთენტიკაცია."
+
+#: src/home/org.freedesktop.home1.policy:23
+msgid "Remove a home area"
+msgstr "სახლის ტერიტორიის წაშლა"
+
+#: src/home/org.freedesktop.home1.policy:24
+msgid "Authentication is required to remove a user's home area."
+msgstr "სახლის ტერიტორიის წასაშლელად საჭიროა ავთენტიკაცია."
+
+#: src/home/org.freedesktop.home1.policy:33
+msgid "Check credentials of a home area"
+msgstr "სახლის ტერიტორიის მომხმარებლისა და პაროლის შემოწმება"
+
+#: src/home/org.freedesktop.home1.policy:34
+msgid ""
+"Authentication is required to check credentials against a user's home area."
+msgstr ""
+"სახლის ტერიტორიის მომხმარებლისა და პაროლის შემოწმებისთვის საჭიროა "
+"ავთენტიკაცია."
+
+#: src/home/org.freedesktop.home1.policy:43
+msgid "Update a home area"
+msgstr "სახლის ტერიტორიის განახლება"
+
+#: src/home/org.freedesktop.home1.policy:44
+msgid "Authentication is required to update a user's home area."
+msgstr "სახლის ტერიტორიის განახლებისთვის საჭიროა ავთენტიკაცია."
+
+#: src/home/org.freedesktop.home1.policy:53
+msgid "Resize a home area"
+msgstr "სახლის ტერიტორიის ზომის შეცვლა"
+
+#: src/home/org.freedesktop.home1.policy:54
+msgid "Authentication is required to resize a user's home area."
+msgstr "სახლის ტერიტორიის ზომის შეცვლისთვის საჭიროა ავთენტიკაცია."
+
+#: src/home/org.freedesktop.home1.policy:63
+msgid "Change password of a home area"
+msgstr "სახლის ტერიტორიის პაროლის შეცვლა"
+
+#: src/home/org.freedesktop.home1.policy:64
+msgid ""
+"Authentication is required to change the password of a user's home area."
+msgstr "სახლის ტერიტორიის პაროლის შეცვლისთვის საჭიროა ავთენტიკაცია."
+
+#: src/hostname/org.freedesktop.hostname1.policy:20
+msgid "Set hostname"
+msgstr "ჰოსტის სახელის დაყენება"
+
+#: src/hostname/org.freedesktop.hostname1.policy:21
+msgid "Authentication is required to set the local hostname."
+msgstr "ჰოსტის სახელის დაყენებისთვის საჭიროა ავთენტიკაცია."
+
+#: src/hostname/org.freedesktop.hostname1.policy:30
+msgid "Set static hostname"
+msgstr "ჰოსტის სტატიკური სახელის დაყენება"
+
+#: src/hostname/org.freedesktop.hostname1.policy:31
+msgid ""
+"Authentication is required to set the statically configured local hostname, "
+"as well as the pretty hostname."
+msgstr "ჰოსტის სტატიკური სახელის დაყენებისთვის საჭიროა ავთენტიკაცია."
+
+#: src/hostname/org.freedesktop.hostname1.policy:41
+msgid "Set machine information"
+msgstr "მანქანის ინფორმაციის დაყენება"
+
+#: src/hostname/org.freedesktop.hostname1.policy:42
+msgid "Authentication is required to set local machine information."
+msgstr "მანქანის ინფორმაციის დასაყენებლად საჭიროა ავთენტიკაცია."
+
+#: src/hostname/org.freedesktop.hostname1.policy:51
+msgid "Get product UUID"
+msgstr "პროდუქტის UUID-ის ამოღება"
+
+#: src/hostname/org.freedesktop.hostname1.policy:52
+msgid "Authentication is required to get product UUID."
+msgstr "პროდუქტის UUID-ის ამოსაღებად საჭიროა ავთენტიკაცია."
+
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "აპარატურის სერიული ნომრის მიღება"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "აპარატურის სერიული ნომრის მისაღებად საჭიროა ავთენტიკაცია."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "სისტემის აღწერის მიღება"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "სისტემის აღწერის მისაღებად საჭიროა ავთენტიკაცია."
+
+#: src/import/org.freedesktop.import1.policy:22
+msgid "Import a VM or container image"
+msgstr "VM-ის ან კონტეინერის იმიჯის შემოტანა"
+
+#: src/import/org.freedesktop.import1.policy:23
+msgid "Authentication is required to import a VM or container image"
+msgstr "VM-ის ან კონტეინერის იმიჯის შემოსატანად საჭიროა ავთენტიკაცია"
+
+#: src/import/org.freedesktop.import1.policy:32
+msgid "Export a VM or container image"
+msgstr "VM-ის ან კონტეინერის იმიჯის გატანა"
+
+#: src/import/org.freedesktop.import1.policy:33
+msgid "Authentication is required to export a VM or container image"
+msgstr "VM-ის ან კონტეინერის იმიჯის გასატანად საჭიროა ავთენტიკაცია"
+
+#: src/import/org.freedesktop.import1.policy:42
+msgid "Download a VM or container image"
+msgstr "VM-ის ან კონტეინერის იმიჯის გადმოწერა"
+
+#: src/import/org.freedesktop.import1.policy:43
+msgid "Authentication is required to download a VM or container image"
+msgstr "VM-ის ან კონტეინერის იმიჯის გადმოსაწერად საჭიროა ავთენტიკაცია"
+
+#: src/locale/org.freedesktop.locale1.policy:22
+msgid "Set system locale"
+msgstr "სისტემური მდებარეობის დაყენება"
+
+#: src/locale/org.freedesktop.locale1.policy:23
+msgid "Authentication is required to set the system locale."
+msgstr "სისტემური მდებარეობის დაყენებისთვის საჭიროა ავთენტიკაცია."
+
+#: src/locale/org.freedesktop.locale1.policy:33
+msgid "Set system keyboard settings"
+msgstr "სისტემური კლავიატურის მორგება"
+
+#: src/locale/org.freedesktop.locale1.policy:34
+msgid "Authentication is required to set the system keyboard settings."
+msgstr "სისტემური კლავიატურის მოსარგებად საჭიროა ავთენტიკაცია."
+
+#: src/login/org.freedesktop.login1.policy:22
+msgid "Allow applications to inhibit system shutdown"
+msgstr "აპლიკაციებისთვის სისტემის გათიშვის დაყოვნების უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:23
+msgid ""
+"Authentication is required for an application to inhibit system shutdown."
+msgstr "აპლიკაციას სისტემის გამორთვის დასაყოვნებლად სჭირდება ავთენტიკაცია."
+
+#: src/login/org.freedesktop.login1.policy:33
+msgid "Allow applications to delay system shutdown"
+msgstr "აპლიკაციებისთვის სისტემის გამორთვის დაყოვნების უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:34
+msgid "Authentication is required for an application to delay system shutdown."
+msgstr ""
+"აპლიკაციებისთვის სისტემის გამორთვის დაყოვნების უფლების მიცემისთვის საჭიროა "
+"ავთენტიკაცია."
+
+#: src/login/org.freedesktop.login1.policy:44
+msgid "Allow applications to inhibit system sleep"
+msgstr "აპლიკაციებისთვის სისტემს დაძინების აკრძალვის უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:45
+msgid "Authentication is required for an application to inhibit system sleep."
+msgstr ""
+"აპლიკაციებისთვის სისტემს დაძინების აკრძალვის უფლების მიცემას ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:55
+msgid "Allow applications to delay system sleep"
+msgstr "აპლიკაციებისთვის სისტემს დაძინების გადადების უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:56
+msgid "Authentication is required for an application to delay system sleep."
+msgstr ""
+"აპლიკაციებისთვის სისტემს დაძინების გადადების უფლების მიცემას ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:65
+msgid "Allow applications to inhibit automatic system suspend"
+msgstr "აპლიკაციებისთვის სისტემს შეჩერების აკრძალვის უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:66
+msgid ""
+"Authentication is required for an application to inhibit automatic system "
+"suspend."
+msgstr ""
+"აპლიკაციებისთვის სისტემს შეჩერების აკრძალვის უფლების მიცემას ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:75
+msgid "Allow applications to inhibit system handling of the power key"
+msgstr "აპლიკაციებისთვის ჩართვის ღილაკის უგულებელყოფის უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:76
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the power key."
+msgstr ""
+"აპლიკაციებისთვის ჩართვის ღილაკის უგულებელყოფის უფლების მიცემას ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:86
+msgid "Allow applications to inhibit system handling of the suspend key"
+msgstr "აპლიკაციებისთვის შეჩერების ღილაკის უგულებელყოფის უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:87
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the suspend key."
+msgstr ""
+"აპლიკაციებისთვის შეჩერების ღილაკის უგულებელყოფის უფლების მიცემას "
+"ავთენტიკაცის სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:97
+msgid "Allow applications to inhibit system handling of the hibernate key"
+msgstr "აპლიკაციებისთვის დაყვინთვის ღილაკის უგულებელყოფის უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:98
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the hibernate key."
+msgstr ""
+"აპლიკაციებისთვის დაყვინთვის ღილაკის უგულებელყოფის უფლების მიცემას "
+"ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:107
+msgid "Allow applications to inhibit system handling of the lid switch"
+msgstr ""
+"აპლიკაციებისთვის ნოუთბუქის დახურვის ღილაკის უგულებელყოფის უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:108
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the lid switch."
+msgstr ""
+"აპლიკაციებისთვის ნოუთბუქის დახურვის ღილაკის უგულებელყოფის უფლების მიცემას "
+"ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:117
+msgid "Allow applications to inhibit system handling of the reboot key"
+msgstr "აპლიკაციებისთვის გადატვირთვის ღილაკის უგულებელყოფის უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:118
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the reboot key."
+msgstr ""
+"აპლიკაციებისთვის გადატვირთვის ღილაკის უგულებელყოფის უფლების მიცემას "
+"ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:128
+msgid "Allow non-logged-in user to run programs"
+msgstr "არ-შესული მომხმარებლებისთვის პროგრამების გაშვების უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:129
+msgid "Explicit request is required to run programs as a non-logged-in user."
+msgstr ""
+"არ-შესული მომხმარებლებისთვის პროგრამების გაშვების უფლების მიცემას "
+"სპეციფიკური მოთხოვნა სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:138
+msgid "Allow non-logged-in users to run programs"
+msgstr "არ-შესული მომხმარებლებისთვის პროგრამების გაშვების უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:139
+msgid "Authentication is required to run programs as a non-logged-in user."
+msgstr ""
+"არ-შესული მომხმარებლებისთვის პროგრამების გაშვების უფლების მიცემას "
+"ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:148
+msgid "Allow attaching devices to seats"
+msgstr "სამუშაო მაგიდებისთვის მოწყობილობების მიერთების უფლების მიცემა"
+
+#: src/login/org.freedesktop.login1.policy:149
+msgid "Authentication is required to attach a device to a seat."
+msgstr ""
+"სამუშაო მაგიდებისთვის მოწყობილობების მიერთების უფლების მიცემას ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:159
+msgid "Flush device to seat attachments"
+msgstr "სამუშაო მაგიდებისთვის მოწყობილობების ბმების ჩახსნა"
+
+#: src/login/org.freedesktop.login1.policy:160
+msgid "Authentication is required to reset how devices are attached to seats."
+msgstr ""
+"სამუშაო მაგიდებისთვის მოწყობილობების ბმების წასაშლელად საჭიროა ავთენტიკაცია."
+
+#: src/login/org.freedesktop.login1.policy:169
+msgid "Power off the system"
+msgstr "სისტემის გამორთვა"
+
+#: src/login/org.freedesktop.login1.policy:170
+msgid "Authentication is required to power off the system."
+msgstr "სისტემის გამორთვას ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:180
+msgid "Power off the system while other users are logged in"
+msgstr "სისტემის გამორთვა, როცა სხვა მომხმარებლებიც არიან შესული"
+
+#: src/login/org.freedesktop.login1.policy:181
+msgid ""
+"Authentication is required to power off the system while other users are "
+"logged in."
+msgstr ""
+"სისტემის გამორთვას, როცა სხვა მომხმარებლებიც არიან შესული, ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:191
+msgid "Power off the system while an application is inhibiting this"
+msgstr "სისტემის გამორთვა, როცა აპლიკაციები ბლოკავენ ამას"
+
+#: src/login/org.freedesktop.login1.policy:192
+msgid ""
+"Authentication is required to power off the system while an application is "
+"inhibiting this."
+msgstr ""
+"სისტემის გამორთვას, როცა აპლიკაციები ბლოკავენ ამას, ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:202
+msgid "Reboot the system"
+msgstr "სისტემის გადატვირთვა"
+
+#: src/login/org.freedesktop.login1.policy:203
+msgid "Authentication is required to reboot the system."
+msgstr "სისტემის გადატვირთვას ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:213
+msgid "Reboot the system while other users are logged in"
+msgstr "სისტემის გამორთვა, როცა სხვა მომხმარებლებიც არიან შესული"
+
+#: src/login/org.freedesktop.login1.policy:214
+msgid ""
+"Authentication is required to reboot the system while other users are logged "
+"in."
+msgstr ""
+"სისტემის გამორთვას, როცა სხვა მომხმარებლებიც არიან შესული, ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:224
+msgid "Reboot the system while an application is inhibiting this"
+msgstr "სისტემის გადატვირთვა მაშინაც კი, როცა აპლიკაცია ბლოკავს"
+
+#: src/login/org.freedesktop.login1.policy:225
+msgid ""
+"Authentication is required to reboot the system while an application is "
+"inhibiting this."
+msgstr ""
+"სისტემის გადატვირთვას მაშინაც კი, როცა აპლიკაცია ბლოკავს, ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:235
+msgid "Halt the system"
+msgstr "სისტემის გაჩერება"
+
+#: src/login/org.freedesktop.login1.policy:236
+msgid "Authentication is required to halt the system."
+msgstr "სისტემის გაჩერებას ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:246
+msgid "Halt the system while other users are logged in"
+msgstr "სისტემის გაჩერება მაშინაც კი, როცა სხვა მომხმარებლებიც არიან შესული"
+
+#: src/login/org.freedesktop.login1.policy:247
+msgid ""
+"Authentication is required to halt the system while other users are logged "
+"in."
+msgstr ""
+"სისტემის გაჩერებას მაშინაც კი, როცა სხვა მომხმარებლებიც არიან შესული, "
+"ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:257
+msgid "Halt the system while an application is inhibiting this"
+msgstr "სისტემის გაჩერება აპლიკაციის მიერ აკრძალვის შემთხვევაშიც"
+
+#: src/login/org.freedesktop.login1.policy:258
+msgid ""
+"Authentication is required to halt the system while an application is "
+"inhibiting this."
+msgstr ""
+"სისტემის გაჩერებას აპლიკაციის მიერ აკრძალვის შემთხვევაშიც კი სჭირდება "
+"ავთენტიკაცია."
+
+#: src/login/org.freedesktop.login1.policy:268
+msgid "Suspend the system"
+msgstr "სისტემის შეჩერება"
+
+#: src/login/org.freedesktop.login1.policy:269
+msgid "Authentication is required to suspend the system."
+msgstr "სისტემის შეჩერებას ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:278
+msgid "Suspend the system while other users are logged in"
+msgstr "სისტემის შეჩერება, როცა სხვა მომხმარებლებიც არიან შესული"
+
+#: src/login/org.freedesktop.login1.policy:279
+msgid ""
+"Authentication is required to suspend the system while other users are "
+"logged in."
+msgstr ""
+"სისტემის შეჩერებას, როცა სხვა მომხმარებლებიც არიან შესული, ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:289
+msgid "Suspend the system while an application is inhibiting this"
+msgstr "სისტემის შეჩერება მაშინაც კი, როცა აპლიკაცია კრძალავს ამას"
+
+#: src/login/org.freedesktop.login1.policy:290
+msgid ""
+"Authentication is required to suspend the system while an application is "
+"inhibiting this."
+msgstr ""
+"სისტემის შეჩერებას მაშინაც კი, როცა აპლიკაცია კრძალავს ამას, სჭირდება "
+"ავთენტიკაცია."
+
+#: src/login/org.freedesktop.login1.policy:300
+msgid "Hibernate the system"
+msgstr "სისტემის ჩაყვინთვა"
+
+#: src/login/org.freedesktop.login1.policy:301
+msgid "Authentication is required to hibernate the system."
+msgstr "სისტემის ჩაყვინთვას ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:310
+msgid "Hibernate the system while other users are logged in"
+msgstr "სისტემის მიძინება მაშინაც კი, როცა სხვა მომხმარებლები არიან შესული"
+
+#: src/login/org.freedesktop.login1.policy:311
+msgid ""
+"Authentication is required to hibernate the system while other users are "
+"logged in."
+msgstr ""
+"სისტემის მიძინებას მაშინაც კი, როცა სხვა მომხმარებლები არიან შესული, "
+"ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:321
+msgid "Hibernate the system while an application is inhibiting this"
+msgstr "სისტემის მიძინება მაშინაც კი, როცა აპლიკაცია კრძალავს ამას"
+
+#: src/login/org.freedesktop.login1.policy:322
+msgid ""
+"Authentication is required to hibernate the system while an application is "
+"inhibiting this."
+msgstr ""
+"სისტემის მიძინებას მაშინაც კი, როცა აპლიკაცია კრძალავს ამას, სჭირდება "
+"ავთენტიკაცია."
+
+#: src/login/org.freedesktop.login1.policy:332
+msgid "Manage active sessions, users and seats"
+msgstr "აქტიური სესიების, მომხმარებლებისა და სამუშაო მაგიდების მართვა"
+
+#: src/login/org.freedesktop.login1.policy:333
+msgid "Authentication is required to manage active sessions, users and seats."
+msgstr ""
+"აქტიური სესიების, მომხმარებლებისა და სამუშაო მაგიდების მართვას ავთენტიკაცია "
+"სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:342
+msgid "Lock or unlock active sessions"
+msgstr "აქტიური სესიების დაბლოკვა ან განბლოკვა"
+
+#: src/login/org.freedesktop.login1.policy:343
+msgid "Authentication is required to lock or unlock active sessions."
+msgstr "აქტიური სესიების დაბლოკვა ან განბლოკვას ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:352
+msgid "Set the reboot \"reason\" in the kernel"
+msgstr "გადატვირთვის \"მიზეზი\"-ის დაყენება"
+
+#: src/login/org.freedesktop.login1.policy:353
+msgid "Authentication is required to set the reboot \"reason\" in the kernel."
+msgstr "გადატვირთვის \"მიზეზი\"-ის დაყენებას ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:363
+msgid "Indicate to the firmware to boot to setup interface"
+msgstr "მიკროკოდისთვის დაყენების ინტერფეისში ჩატვირთვის ბრძანების გადაცემა"
+
+#: src/login/org.freedesktop.login1.policy:364
+msgid ""
+"Authentication is required to indicate to the firmware to boot to setup "
+"interface."
+msgstr ""
+"მიკროკოდისთვის დაყენების ინტერფეისში ჩატვირთვის ბრძანების გადაცემას "
+"ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:374
+msgid "Indicate to the boot loader to boot to the boot loader menu"
+msgstr "ბირთვის ჩამტვირთველისთვის მენიუში ჩატვირთვის ბრძანების გადაცემა"
+
+#: src/login/org.freedesktop.login1.policy:375
+msgid ""
+"Authentication is required to indicate to the boot loader to boot to the "
+"boot loader menu."
+msgstr ""
+"ბირთვის ჩამტვირთველისთვის მენიუში ჩატვირთვის ბრძანების გადაცემას "
+"ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:385
+msgid "Indicate to the boot loader to boot a specific entry"
+msgstr ""
+"ბირთვის ჩამტვირთველისთვის მითითებული ელემენტის ჩატვირთვის ბრძანების გადაცემა"
+
+#: src/login/org.freedesktop.login1.policy:386
+msgid ""
+"Authentication is required to indicate to the boot loader to boot into a "
+"specific boot loader entry."
+msgstr ""
+"ბირთვის ჩამტვირთველისთვის მითითებული ელემენტის ჩატვირთვის ბრძანების "
+"გადაცემას ავთენტიკაცია სჭირდება."
+
+#: src/login/org.freedesktop.login1.policy:396
+msgid "Set a wall message"
+msgstr "კედლის შეტყობინების დაყენება"
+
+#: src/login/org.freedesktop.login1.policy:397
+msgid "Authentication is required to set a wall message"
+msgstr "კედლის შეტყობინების დაყენებას ავთენტიკაცია სჭირდება"
+
+#: src/login/org.freedesktop.login1.policy:406
+msgid "Change Session"
+msgstr "სესიის შეცვლა"
+
+#: src/login/org.freedesktop.login1.policy:407
+msgid "Authentication is required to change the virtual terminal."
+msgstr "ვირტუალური ტერმინალის შეცვლას ავთენტიკაცია სჭირდება."
+
+#: src/machine/org.freedesktop.machine1.policy:22
+msgid "Log into a local container"
+msgstr "ლოკალურ კონტეინერში შესვლა"
+
+#: src/machine/org.freedesktop.machine1.policy:23
+msgid "Authentication is required to log into a local container."
+msgstr "ლოკალურ კონტეინერში შესვლას ავთენტიკაცია სჭირდება."
+
+#: src/machine/org.freedesktop.machine1.policy:32
+msgid "Log into the local host"
+msgstr "ლოკალურ ჰოსტზე შესვლა"
+
+#: src/machine/org.freedesktop.machine1.policy:33
+msgid "Authentication is required to log into the local host."
+msgstr "ლოკალურ ჰოსტზე შესვლას ავთენტიკაცია სჭირდება."
+
+#: src/machine/org.freedesktop.machine1.policy:42
+msgid "Acquire a shell in a local container"
+msgstr "ლოკალურ კონტეინერში გარსის მიღება"
+
+#: src/machine/org.freedesktop.machine1.policy:43
+msgid "Authentication is required to acquire a shell in a local container."
+msgstr "ლოკალურ კონტეინერში გარსის მიღებას ავთენტიკაცია სჭირდება."
+
+#: src/machine/org.freedesktop.machine1.policy:53
+msgid "Acquire a shell on the local host"
+msgstr "ლოკალურ ჰოსტზე გარსის მიღება"
+
+#: src/machine/org.freedesktop.machine1.policy:54
+msgid "Authentication is required to acquire a shell on the local host."
+msgstr "ლოკალურ ჰოსტზე გარსის მიღებას ავთენტიკაცია სჭირდება."
+
+#: src/machine/org.freedesktop.machine1.policy:64
+msgid "Acquire a pseudo TTY in a local container"
+msgstr "ლოკალურ კონტეინერში ფსევდოტერმინალის მიღება"
+
+#: src/machine/org.freedesktop.machine1.policy:65
+msgid ""
+"Authentication is required to acquire a pseudo TTY in a local container."
+msgstr "ლოკალურ კონტეინერში ფსევდოტერმინალის მიღებას ავთენტიკაცია სჭირდება."
+
+#: src/machine/org.freedesktop.machine1.policy:74
+msgid "Acquire a pseudo TTY on the local host"
+msgstr "ლოკალურ ჰოსტზე ვირტუალური ტერმინალის მიღება"
+
+#: src/machine/org.freedesktop.machine1.policy:75
+msgid "Authentication is required to acquire a pseudo TTY on the local host."
+msgstr "ლოკალურ ჰოსტზე ვირტუალური ტერმინალის მიღებას ავთენტიკაცია სჭირდება."
+
+#: src/machine/org.freedesktop.machine1.policy:84
+msgid "Manage local virtual machines and containers"
+msgstr "ლოკალური ვირტუალური მანქანებისა და კონტეინერების მართვა"
+
+#: src/machine/org.freedesktop.machine1.policy:85
+msgid ""
+"Authentication is required to manage local virtual machines and containers."
+msgstr ""
+"ლოკალური ვირტუალური მანქანებისა და კონტეინერების მართვას ავთენტიკაცია "
+"სჭირდება."
+
+#: src/machine/org.freedesktop.machine1.policy:95
+msgid "Manage local virtual machine and container images"
+msgstr "ლოკალური ვირტუალური მანქანებისა და კონტეინერების იმიჯების მართვა"
+
+#: src/machine/org.freedesktop.machine1.policy:96
+msgid ""
+"Authentication is required to manage local virtual machine and container "
+"images."
+msgstr ""
+"ლოკალური ვირტუალური მანქანებისა და კონტეინერების იმიჯების მართვას "
+"ავთენტიკაცია სჭირდება."
+
+#: src/network/org.freedesktop.network1.policy:22
+msgid "Set NTP servers"
+msgstr "NTP სერვერის დაყენება"
+
+#: src/network/org.freedesktop.network1.policy:23
+msgid "Authentication is required to set NTP servers."
+msgstr "NTP სერვერის დაყენებას ავთენტიკაცია სჭირდება."
+
+#: src/network/org.freedesktop.network1.policy:33
+#: src/resolve/org.freedesktop.resolve1.policy:44
+msgid "Set DNS servers"
+msgstr "DNS სერვერის დაყენება"
+
+#: src/network/org.freedesktop.network1.policy:34
+#: src/resolve/org.freedesktop.resolve1.policy:45
+msgid "Authentication is required to set DNS servers."
+msgstr "DNS სერვერის დაყენებას ავთენტიკაცია სჭირდება."
+
+#: src/network/org.freedesktop.network1.policy:44
+#: src/resolve/org.freedesktop.resolve1.policy:55
+msgid "Set domains"
+msgstr "დომენის დაყენება"
+
+#: src/network/org.freedesktop.network1.policy:45
+#: src/resolve/org.freedesktop.resolve1.policy:56
+msgid "Authentication is required to set domains."
+msgstr "დომენის დაყენებას ავთენტიკაცია სჭირდება."
+
+#: src/network/org.freedesktop.network1.policy:55
+#: src/resolve/org.freedesktop.resolve1.policy:66
+msgid "Set default route"
+msgstr "ქსელის ნაგულისხმევი მარშრუტის დაყენება"
+
+#: src/network/org.freedesktop.network1.policy:56
+#: src/resolve/org.freedesktop.resolve1.policy:67
+msgid "Authentication is required to set default route."
+msgstr "ქსელის ნაგულისხმევი მარშრუტის დაყენებას ავთენტიკაცია სჭირდება."
+
+#: src/network/org.freedesktop.network1.policy:66
+#: src/resolve/org.freedesktop.resolve1.policy:77
+msgid "Enable/disable LLMNR"
+msgstr "LLMNR-ის ჩართ/გამორთ"
+
+#: src/network/org.freedesktop.network1.policy:67
+#: src/resolve/org.freedesktop.resolve1.policy:78
+msgid "Authentication is required to enable or disable LLMNR."
+msgstr "LLMNR-ის ჩართ/გამორთ-თვის საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:77
+#: src/resolve/org.freedesktop.resolve1.policy:88
+msgid "Enable/disable multicast DNS"
+msgstr "multicast DNS-ის ჩართ/გამორთ"
+
+#: src/network/org.freedesktop.network1.policy:78
+#: src/resolve/org.freedesktop.resolve1.policy:89
+msgid "Authentication is required to enable or disable multicast DNS."
+msgstr "multicast DNS-ის ჩართ/გამორთ-თვის საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:88
+#: src/resolve/org.freedesktop.resolve1.policy:99
+msgid "Enable/disable DNS over TLS"
+msgstr "DNS TLS-ზე-ის ჩართ/გამორთ"
+
+#: src/network/org.freedesktop.network1.policy:89
+#: src/resolve/org.freedesktop.resolve1.policy:100
+msgid "Authentication is required to enable or disable DNS over TLS."
+msgstr "DNS TLS-ზე-ის ჩართ/გამორთ-თვის საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:99
+#: src/resolve/org.freedesktop.resolve1.policy:110
+msgid "Enable/disable DNSSEC"
+msgstr "DNSSEC-ის ჩართ/გამორთ"
+
+#: src/network/org.freedesktop.network1.policy:100
+#: src/resolve/org.freedesktop.resolve1.policy:111
+msgid "Authentication is required to enable or disable DNSSEC."
+msgstr "DNSSEC-ის ჩართ/გამორთ-თვის საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:110
+#: src/resolve/org.freedesktop.resolve1.policy:121
+msgid "Set DNSSEC Negative Trust Anchors"
+msgstr "DNSSEC Negative Trust Anchor-ების დაყენება"
+
+#: src/network/org.freedesktop.network1.policy:111
+#: src/resolve/org.freedesktop.resolve1.policy:122
+msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
+msgstr "DNSSEC Negative Trust Anchor-ების დაყენებისთვის საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:121
+msgid "Revert NTP settings"
+msgstr "NTP პარამეტრების დაბრუნება"
+
+#: src/network/org.freedesktop.network1.policy:122
+msgid "Authentication is required to reset NTP settings."
+msgstr "NTP პარამეტრების დაბრუნებისთვის საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:132
+msgid "Revert DNS settings"
+msgstr "DNS პარამეტრების დაბრუნება"
+
+#: src/network/org.freedesktop.network1.policy:133
+msgid "Authentication is required to reset DNS settings."
+msgstr "DNS პარამეტრების დაბრუნებისთვის საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:143
+msgid "DHCP server sends force renew message"
+msgstr "DHCP სერვერმა ნაძალადევი განახლების შეტყობინება გამოაგზავნა"
+
+#: src/network/org.freedesktop.network1.policy:144
+msgid "Authentication is required to send force renew message."
+msgstr "ნაძალადევი განახლების შეტყობინების გასაგზავნად საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:154
+msgid "Renew dynamic addresses"
+msgstr "დინამიური მისამართების განახლება"
+
+#: src/network/org.freedesktop.network1.policy:155
+msgid "Authentication is required to renew dynamic addresses."
+msgstr "დინამიური მისამართების განახლებისთვის საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:165
+msgid "Reload network settings"
+msgstr "ქსელის პარამეტრების გადატვირთვა"
+
+#: src/network/org.freedesktop.network1.policy:166
+msgid "Authentication is required to reload network settings."
+msgstr "ქსელის პარამეტრების გადასატვირთად საჭიროა ავთენტიკაცია."
+
+#: src/network/org.freedesktop.network1.policy:176
+msgid "Reconfigure network interface"
+msgstr "ქსელური ინტერფეისის თავიდან მორგება"
+
+#: src/network/org.freedesktop.network1.policy:177
+msgid "Authentication is required to reconfigure network interface."
+msgstr "ქსელური ინტერფეისის თავიდან მოსარგებად საჭიროა ავთენტიკაცია."
+
+#: src/portable/org.freedesktop.portable1.policy:13
+msgid "Inspect a portable service image"
+msgstr "გადატანადი სერვისის იმიჯის შემოწმება"
+
+#: src/portable/org.freedesktop.portable1.policy:14
+msgid "Authentication is required to inspect a portable service image."
+msgstr "გადატანადი სერვისის იმიჯის შესამოწმებლად საჭიროა ავთენტიკაცია."
+
+#: src/portable/org.freedesktop.portable1.policy:23
+msgid "Attach or detach a portable service image"
+msgstr "გადატანადი სერვისის იმიჯის მოძრობა ან მიმაგრება"
+
+#: src/portable/org.freedesktop.portable1.policy:24
+msgid ""
+"Authentication is required to attach or detach a portable service image."
+msgstr ""
+"გადატანადი სერვისის იმიჯის მოსაძრობად ან მისამაგრებლად საჭიროა ავთენტიკაცია."
+
+#: src/portable/org.freedesktop.portable1.policy:34
+msgid "Delete or modify portable service image"
+msgstr "გადატანადი სერვისის იმიჯის წაშლა ან შეცვლა"
+
+#: src/portable/org.freedesktop.portable1.policy:35
+msgid ""
+"Authentication is required to delete or modify a portable service image."
+msgstr ""
+"გადატანადი სერვისის იმიჯის წასაშლელად ან შესაცვლელად საჭიროა ავთენტიკაცია."
+
+#: src/resolve/org.freedesktop.resolve1.policy:22
+msgid "Register a DNS-SD service"
+msgstr "DNS-SD სერვისის რეგისტრაცია"
+
+#: src/resolve/org.freedesktop.resolve1.policy:23
+msgid "Authentication is required to register a DNS-SD service"
+msgstr "DNS-SD სერვისის რეგისტრაციისთვის საჭიროა ავთენტიკაცია"
+
+#: src/resolve/org.freedesktop.resolve1.policy:33
+msgid "Unregister a DNS-SD service"
+msgstr "DNS-SD სერვისის მოცილება"
+
+#: src/resolve/org.freedesktop.resolve1.policy:34
+msgid "Authentication is required to unregister a DNS-SD service"
+msgstr "DNS-SD სერვისის მოსაცილებლადს აჭიროა ავთენტიკაცია"
+
+#: src/resolve/org.freedesktop.resolve1.policy:132
+msgid "Revert name resolution settings"
+msgstr "DNS პარამეტრების დაბრუნება"
+
+#: src/resolve/org.freedesktop.resolve1.policy:133
+msgid "Authentication is required to reset name resolution settings."
+msgstr "DNS პარამეტრების დასაბრუნებლად საჭიროა ავთენტიკაცია."
+
+#: src/timedate/org.freedesktop.timedate1.policy:22
+msgid "Set system time"
+msgstr "სისტემური დროის დაყენება"
+
+#: src/timedate/org.freedesktop.timedate1.policy:23
+msgid "Authentication is required to set the system time."
+msgstr "სისტემური დროის დასაყენებლად საჭიროა ავთენტიკაცია."
+
+#: src/timedate/org.freedesktop.timedate1.policy:33
+msgid "Set system timezone"
+msgstr "სისტემური დროის სარტყლის დაყენება"
+
+#: src/timedate/org.freedesktop.timedate1.policy:34
+msgid "Authentication is required to set the system timezone."
+msgstr "სისტემური დროის სარტყლის დასაყენებლად საჭიროა ავთენტიკაცია."
+
+#: src/timedate/org.freedesktop.timedate1.policy:43
+msgid "Set RTC to local timezone or UTC"
+msgstr "RTC-ის ლოკალურ დროის სარტყელზე ან UTC-ზე დაყენება"
+
+#: src/timedate/org.freedesktop.timedate1.policy:44
+msgid ""
+"Authentication is required to control whether the RTC stores the local or "
+"UTC time."
+msgstr ""
+"RTC-ის ლოკალურ დროის სარტყელზე ან UTC-ზე დასაყენებლად საჭიროა ავთენტიკაცია."
+
+#: src/timedate/org.freedesktop.timedate1.policy:53
+msgid "Turn network time synchronization on or off"
+msgstr "დროის ქსელური სინქრონიზაციის ჩართ/გამორთ"
+
+#: src/timedate/org.freedesktop.timedate1.policy:54
+msgid ""
+"Authentication is required to control whether network time synchronization "
+"shall be enabled."
+msgstr "დროის ქსელური სინქრონიზაციის ჩართ/გამორთ-თვის საჭიროა ავთენტიკაცია."
+
+#: src/core/dbus-unit.c:359
+msgid "Authentication is required to start '$(unit)'."
+msgstr "'$(unit)'-ის გასაშვებად საჭიროა ავთენტიკაცია."
+
+#: src/core/dbus-unit.c:360
+msgid "Authentication is required to stop '$(unit)'."
+msgstr "'$(unit)'-ის გასაჩერებლად საჭიროა ავთენტიკაცია."
+
+#: src/core/dbus-unit.c:361
+msgid "Authentication is required to reload '$(unit)'."
+msgstr "'$(unit)'-ის გადასატვირთად საჭიროა ავთენტიკაცია."
+
+#: src/core/dbus-unit.c:362 src/core/dbus-unit.c:363
+msgid "Authentication is required to restart '$(unit)'."
+msgstr "'$(unit)'-ის გადასატვირთად საჭიროა ავთენტიკაცია."
+
+#: src/core/dbus-unit.c:546
+msgid ""
+"Authentication is required to send a UNIX signal to the processes of "
+"'$(unit)'."
+msgstr ""
+"'$(unit)'-ის პროცესებისთვის UNIX სიგნალის გასაგზავნად საჭიროა ავთნტიკაცია."
+
+#: src/core/dbus-unit.c:576
+msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
+msgstr ""
+"'$(unit)'-ის შეცდომით გაშვების მდგომარეობის გასასუფთავებლად საჭიროა "
+"ავთენტიკაცია."
+
+#: src/core/dbus-unit.c:608
+msgid "Authentication is required to set properties on '$(unit)'."
+msgstr "'$(unit)'-ის თვისებების დასაყენებლად საჭიროა ავთენტიკაცია."
+
+#: src/core/dbus-unit.c:714
+msgid ""
+"Authentication is required to delete files and directories associated with "
+"'$(unit)'."
+msgstr ""
+"'$(unit)'-თან ასოცირებული ფაილების და საქაღალდეების წასაშლელად საჭიროა "
+"ავთენტიკაცია."
+
+#: src/core/dbus-unit.c:762
+msgid ""
+"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
+msgstr "'$(unit)'-ის პროცესების გასაყინად საჭიროა ავთენტიკაცია."
diff --git a/po/kab.po b/po/kab.po
index 8f6626a..9a6fc02 100644
--- a/po/kab.po
+++ b/po/kab.po
@@ -1,13 +1,12 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the systemd package.
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# Kabyle translation of systemd.
 # Slimane Selyan Amiri <selyan.kab@gmail.com>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-02-26 19:40+0000\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2021-10-03 16:04+0000\n"
 "Last-Translator: Slimane Selyan Amiri <selyan.kab@gmail.com>\n"
 "Language-Team: Kabyle <https://translate.fedoraproject.org/projects/systemd/"
 "master/kab/>\n"
@@ -16,11 +15,11 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.4.2\n"
+"X-Generator: Weblate 4.8\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
-msgstr ""
+msgstr "Azen awal uɛeddi ɣer unagraw"
 
 #: src/core/org.freedesktop.systemd1.policy.in:23
 msgid ""
@@ -145,6 +144,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr ""
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr ""
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr ""
@@ -826,27 +841,27 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/ko.po b/po/ko.po
index a0d20e9..0d908f8 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -4,13 +4,13 @@
 # Seong-ho Cho <shcho@gnome.org>, 2015, 2021.
 # Dongsu Park <dongsu@endocode.com>, 2015.
 # simmon <simmon@nplob.com>, 2021.
+# 김인수 <simmon@nplob.com>, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-06-22 10:04+0000\n"
-"Last-Translator: simmon <simmon@nplob.com>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-11-04 12:19+0000\n"
+"Last-Translator: 김인수 <simmon@nplob.com>\n"
 "Language-Team: Korean <https://translate.fedoraproject.org/projects/systemd/"
 "master/ko/>\n"
 "Language: ko\n"
@@ -18,7 +18,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.7\n"
+"X-Generator: Weblate 4.14.1\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
@@ -32,19 +32,19 @@
 
 #: src/core/org.freedesktop.systemd1.policy.in:33
 msgid "Manage system services or other units"
-msgstr "시스템 서비스 또는 기타 유닛 관리"
+msgstr "시스템 서비스 또는 기타 단위 관리"
 
 #: src/core/org.freedesktop.systemd1.policy.in:34
 msgid "Authentication is required to manage system services or other units."
-msgstr "시스템 서비스 또는 기타 유닛을 관리하려면 인증이 필요합니다."
+msgstr "시스템 서비스 또는 기타 단위를 관리하려면 인증이 필요합니다."
 
 #: src/core/org.freedesktop.systemd1.policy.in:43
 msgid "Manage system service or unit files"
-msgstr "시스템 서비스 또는 유닛 파일 관리"
+msgstr "시스템 서비스 또는 단위 파일 관리"
 
 #: src/core/org.freedesktop.systemd1.policy.in:44
 msgid "Authentication is required to manage system service or unit files."
-msgstr "시스템 서비스 또는 유닛 파일을 관리하려면 인증이 필요합니다."
+msgstr "시스템 서비스 또는 단위 파일을 관리하려면 인증이 필요합니다."
 
 #: src/core/org.freedesktop.systemd1.policy.in:54
 msgid "Set or unset system and service manager environment variables"
@@ -54,7 +54,9 @@
 msgid ""
 "Authentication is required to set or unset system and service manager "
 "environment variables."
-msgstr "시스템 및 서비스 관리자 환경 변수를 설정하거나 설정 또는 해제하려면 인증이 필요합니다."
+msgstr ""
+"시스템 및 서비스 관리자 환경 변수를 설정하거나 설정 또는 해제하려면 인증이 필"
+"요합니다."
 
 #: src/core/org.freedesktop.systemd1.policy.in:64
 msgid "Reload the systemd state"
@@ -130,7 +132,9 @@
 msgid ""
 "Authentication is required to set the statically configured local hostname, "
 "as well as the pretty hostname."
-msgstr "로컬 호스트 이름을 지정 호스트 이름처럼 정적으로 설정하려면 인증이 필요합니다."
+msgstr ""
+"로컬 호스트 이름을 지정 호스트 이름처럼 정적으로 설정하려면 인증이 필요합니"
+"다."
 
 #: src/hostname/org.freedesktop.hostname1.policy:41
 msgid "Set machine information"
@@ -148,6 +152,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "제품 UUID를 가져오려면 인증이 필요합니다."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "하드웨어 일련 번호 가져오기"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "하드웨어 일련 번호를 가져오는 데 인증이 필요합니다."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "시스템 분석 가져오기"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "시스템 시간대를 가져오려면 인증이 필요합니다."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "VM 또는 컨테이너의 이미지 가져오기"
@@ -174,11 +194,11 @@
 
 #: src/locale/org.freedesktop.locale1.policy:22
 msgid "Set system locale"
-msgstr "시스템 로캘 설정"
+msgstr "시스템 로케일 설정"
 
 #: src/locale/org.freedesktop.locale1.policy:23
 msgid "Authentication is required to set the system locale."
-msgstr "시스템 로캘을 설정하려면 인증이 필요합니다."
+msgstr "시스템 로케일을 설정하려면 인증이 필요합니다."
 
 #: src/locale/org.freedesktop.locale1.policy:33
 msgid "Set system keyboard settings"
@@ -855,28 +875,27 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "'$(unit)' 서비스 유닛을 다시 시작하려면 인증이 필요합니다."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "'$(unit)'의 처리에 유닉스 신호를 전송하려면 인증이 필요합니다."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr "'$(unit)' 서비스 유닛의 \"실패\" 상태를 되돌리려면 인증이 필요합니다."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "'$(unit)' 서비스 유닛 속성을 설정하려면 인증이 필요합니다."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
-msgstr ""
-"'$(unit)'에 해당하는 파일 또는 디렉터리를 삭제하려면 인증이 필요합니다."
+msgstr "인증은 '$(unit)'과 관련된 파일과 디렉토리를 삭제하는데 필요합니다."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr "'$(unit)'단위의 처리를 동결 또는 해제하려면 인증이 필요합니다."
diff --git a/po/lt.po b/po/lt.po
index c8eac85..dba667b 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -3,9 +3,8 @@
 # Moo, 2018. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2019-04-08 22:01+0300\n"
 "Last-Translator: Moo\n"
 "Language-Team: Lithuanian\n"
@@ -75,7 +74,6 @@
 
 #: src/home/org.freedesktop.home1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
 msgstr "Norint iš naujo įkelti systemd būseną, reikia patvirtinti tapatybę."
 
@@ -85,7 +83,6 @@
 
 #: src/home/org.freedesktop.home1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
 msgstr "Norint iš naujo įkelti systemd būseną, reikia patvirtinti tapatybę."
 
@@ -95,8 +92,6 @@
 
 #: src/home/org.freedesktop.home1.policy:34
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to attach or detach a portable service image."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
@@ -109,7 +104,6 @@
 
 #: src/home/org.freedesktop.home1.policy:44
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
 msgstr ""
 "Norint prijungti įrenginį prie darbo vietos, reikia nustatyti tapatybę."
@@ -120,7 +114,6 @@
 
 #: src/home/org.freedesktop.home1.policy:54
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
 msgstr "Norint nustatyti sienos pranešimą, reikia nustatyti tapatybę"
 
@@ -130,8 +123,6 @@
 
 #: src/home/org.freedesktop.home1.policy:64
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
@@ -175,6 +166,25 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Norint gauti produkto UUID, reikia nustatyti tapatybę."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Norint nustatyti sistemos laiką, reikia nustatyti tapatybę."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Nustatyti sistemos laiko juostą"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Norint nustatyti sistemos laiko juostą, reikia nustatyti tapatybę."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importuoti VM ar konteinerio atvaizdį"
@@ -320,15 +330,11 @@
 
 #: src/login/org.freedesktop.login1.policy:117
 #, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr "Leisti programoms sulaikyti maitinimo rakto sisteminį apdorojimą"
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
@@ -465,9 +471,6 @@
 
 #: src/login/org.freedesktop.login1.policy:258
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
@@ -618,7 +621,6 @@
 
 #: src/login/org.freedesktop.login1.policy:407
 #, fuzzy
-#| msgid "Authentication is required to halt the system."
 msgid "Authentication is required to change the virtual terminal."
 msgstr "Norint stabdyti sistemą, reikia nustatyti tapatybę."
 
@@ -705,21 +707,18 @@
 
 #: src/network/org.freedesktop.network1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
 msgstr "Norint nustatyti sistemos laiką, reikia nustatyti tapatybę."
 
 #: src/network/org.freedesktop.network1.policy:33
 #: src/resolve/org.freedesktop.resolve1.policy:44
 #, fuzzy
-#| msgid "Register a DNS-SD service"
 msgid "Set DNS servers"
 msgstr "Registruoti DNS-SD tarnybą"
 
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
 #, fuzzy
-#| msgid "Authentication is required to register a DNS-SD service"
 msgid "Authentication is required to set DNS servers."
 msgstr "Norint registruoti DNS-SD tarnybą, reikia nustatyti tapatybę"
 
@@ -731,7 +730,6 @@
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
 #, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
 msgstr "Norint stabdyti \"$(unit)\", reikia nustatyti tapatybę."
 
@@ -743,7 +741,6 @@
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
 msgstr ""
 "Norint nustatyti vietinio serverio pavadinimą, reikia nustatyti tapatybę."
@@ -756,7 +753,6 @@
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
 msgstr "Norint užmigdyti sistemą, reikia nustatyti tapatybę."
 
@@ -768,7 +764,6 @@
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
 #, fuzzy
-#| msgid "Authentication is required to get product UUID."
 msgid "Authentication is required to enable or disable multicast DNS."
 msgstr "Norint gauti produkto UUID, reikia nustatyti tapatybę."
 
@@ -780,7 +775,6 @@
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
 #, fuzzy
-#| msgid "Authentication is required to register a DNS-SD service"
 msgid "Authentication is required to enable or disable DNS over TLS."
 msgstr "Norint registruoti DNS-SD tarnybą, reikia nustatyti tapatybę"
 
@@ -792,7 +786,6 @@
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
 msgstr "Norint užmigdyti sistemą, reikia nustatyti tapatybę."
 
@@ -804,7 +797,6 @@
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
 msgstr "Norint nustatyti sistemos lokalę, reikia nustatyti tapatybę."
 
@@ -814,7 +806,6 @@
 
 #: src/network/org.freedesktop.network1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
 msgstr "Norint nustatyti sistemos laiką, reikia nustatyti tapatybę."
 
@@ -824,7 +815,6 @@
 
 #: src/network/org.freedesktop.network1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
 msgstr "Norint nustatyti sistemos laiką, reikia nustatyti tapatybę."
 
@@ -834,7 +824,6 @@
 
 #: src/network/org.freedesktop.network1.policy:144
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
 msgstr "Norint nustatyti sienos pranešimą, reikia nustatyti tapatybę"
 
@@ -844,7 +833,6 @@
 
 #: src/network/org.freedesktop.network1.policy:155
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
 msgstr "Norint nustatyti sienos pranešimą, reikia nustatyti tapatybę"
 
@@ -854,7 +842,6 @@
 
 #: src/network/org.freedesktop.network1.policy:166
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
 msgstr "Norint iš naujo įkelti systemd būseną, reikia patvirtinti tapatybę."
 
@@ -864,7 +851,6 @@
 
 #: src/network/org.freedesktop.network1.policy:177
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
 msgstr "Norint paleisti sistemą iš naujo, reikia nustatyti tapatybę."
 
@@ -921,7 +907,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
 msgstr ""
 "Norint nustatyti sistemos klaviatūros nustatymus, reikia nustatyti tapatybę."
@@ -984,27 +969,25 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Norint paleisti \"$(unit)\" iš naujo, reikia nustatyti tapatybę."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 "Norint siųsti UNIX signalą į \"$(unit)\" procesus, reikia nustatyti tapatybę."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Norint atstatyti \"$(unit)\" įtaiso \"failed\" būseną, reikia nustatyti "
 "tapatybę."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Norint nustatyti \"$(unit)\" savybes, reikia nustatyti tapatybę."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -1012,11 +995,8 @@
 "Norint atstatyti \"$(unit)\" įtaiso \"failed\" būseną, reikia nustatyti "
 "tapatybę."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to send a UNIX signal to the processes of "
-#| "'$(unit)'."
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/meson.build b/po/meson.build
index 139f393..0a140b4 100644
--- a/po/meson.build
+++ b/po/meson.build
@@ -1,9 +1,9 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-i18n = import('i18n')
 want_translations = get_option('translations')
 
 if want_translations
+        i18n = import('i18n')
         i18n.gettext(meson.project_name(),
                      preset : 'glib',
                      data_dirs : '.')
diff --git a/po/nl.po b/po/nl.po
index efd7f24..12e2818 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,14 +1,14 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the systemd package.
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# Dutch translation of systemd.
 # Pjotr Vertaalt <pjotrvertaalt@gmail.com>, 2021.
+# Richard E. van der Luit <fedoraproject@veneax.nl>, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-03-24 09:16+0000\n"
-"Last-Translator: Pjotr Vertaalt <pjotrvertaalt@gmail.com>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-11-20 15:19+0000\n"
+"Last-Translator: Richard E. van der Luit <fedoraproject@veneax.nl>\n"
 "Language-Team: Dutch <https://translate.fedoraproject.org/projects/systemd/"
 "master/nl/>\n"
 "Language: nl\n"
@@ -16,7 +16,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5.1\n"
+"X-Generator: Weblate 4.14.2\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -170,6 +170,25 @@
 msgstr ""
 "Authenticatie is vereist voor het verkrijgen van de UUID van het product."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Serienummer hardware verkrijgen"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr ""
+"Authenticatie is vereist voor het verkrijgen van het serienummer van de "
+"hardware."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Systeembeschrijving verkrijgen"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr ""
+"Authenticatie is vereist voor het verkrijgen van de systeembeschrijving."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importeer een VM of een container-schijfkopie"
@@ -837,8 +856,8 @@
 #: src/network/org.freedesktop.network1.policy:144
 msgid "Authentication is required to send force renew message."
 msgstr ""
-"Authenticatie is vereist voor het verzenden van een 'gedwongen "
-"hernieuwing'-boodschap."
+"Authenticatie is vereist voor het verzenden van een 'gedwongen hernieuwing'-"
+"boodschap."
 
 #: src/network/org.freedesktop.network1.policy:154
 msgid "Renew dynamic addresses"
@@ -980,7 +999,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Authenticatie is vereist voor het herstarten van '$(unit)'."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -988,18 +1007,18 @@
 "Authenticatie is vereist voor het zenden van een UNIX-signaal naar de "
 "processen van '$(unit)'."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Authenticatie is vereist voor het terugzetten van de 'mislukt'-status van "
 "'$(unit)'."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "Authenticatie is vereist voor het instellen van eigenschappen op '$(unit)'."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -1007,7 +1026,7 @@
 "Authenticatie is vereist voor het verwijderen van bestanden en mappen die "
 "verbonden zijn aan '$(unit)'."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/pa.po b/po/pa.po
index 892a8e1..07fda12 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -3,9 +3,8 @@
 # A S Alam <amanpreet.alam@gmail.com>, 2020, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2021-01-24 16:38+0000\n"
 "Last-Translator: A S Alam <amanpreet.alam@gmail.com>\n"
 "Language-Team: Punjabi <https://translate.fedoraproject.org/projects/systemd/"
@@ -144,6 +143,24 @@
 msgid "Authentication is required to get product UUID."
 msgstr ""
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "ਸਿਸਟਮ ਸੇਵਾਵਾਂ ਜਾਂ ਯੂਨਿਟ ਫ਼ਾਇਲਾਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰਨ ਲਈ ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਹੈ।"
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "ਸਿਸਟਮ ਸੇਵਾਵਾਂ ਜਾਂ ਯੂਨਿਟ ਫ਼ਾਇਲਾਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰਨ ਲਈ ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਹੈ।"
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr ""
@@ -273,7 +290,6 @@
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid "Authentication is required to manage system services or other units."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
@@ -827,27 +843,27 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/pl.po b/po/pl.po
index a425118..12082bb 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -4,10 +4,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2020-10-18 13:10+0200\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-05-15 13:10+0200\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <trans-pl@lists.fedoraproject.org>\n"
 "Language: pl\n"
@@ -166,6 +165,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Wymagane jest uwierzytelnienie, aby uzyskać UUID produktu."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Uzyskanie numeru seryjnego sprzętu"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Wymagane jest uwierzytelnienie, aby uzyskać numer seryjny sprzętu."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Uzyskanie opisu systemu"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Wymagane jest uwierzytelnienie, aby uzyskać opis systemu."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Import obrazu maszyny wirtualnej lub kontenera"
@@ -937,7 +952,7 @@
 msgstr ""
 "Wymagane jest uwierzytelnienie, aby ponownie uruchomić jednostkę „$(unit)”."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -945,18 +960,18 @@
 "Wymagane jest uwierzytelnienie, aby wysłać sygnał uniksowy do procesów "
 "jednostki „$(unit)”."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Wymagane jest uwierzytelnienie, aby przywrócić stan „failed” (niepowodzenia) "
 "jednostki „$(unit)”."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "Wymagane jest uwierzytelnienie, aby ustawić właściwości jednostki „$(unit)”."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -964,7 +979,7 @@
 "Wymagane jest uwierzytelnienie, aby usunąć pliki i katalogi powiązane "
 "z jednostką „$(unit)”."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..7f2f0ad
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,971 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# Portuguese translation of systemd.
+# Hugo Carvalho <hugokarvalho@hotmail.com>, 2021, 2022.
+msgid ""
+msgstr ""
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-12-10 12:19+0000\n"
+"Last-Translator: Hugo Carvalho <hugokarvalho@hotmail.com>\n"
+"Language-Team: Portuguese <https://translate.fedoraproject.org/projects/"
+"systemd/master/pt/>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.14.2\n"
+
+#: src/core/org.freedesktop.systemd1.policy.in:22
+msgid "Send passphrase back to system"
+msgstr "Enviar a palavra-passe de volta ao sistema"
+
+#: src/core/org.freedesktop.systemd1.policy.in:23
+msgid ""
+"Authentication is required to send the entered passphrase back to the system."
+msgstr ""
+"É necessária autenticação para enviar a palavra-passe introduzida de volta "
+"ao sistema."
+
+#: src/core/org.freedesktop.systemd1.policy.in:33
+msgid "Manage system services or other units"
+msgstr "Gerir serviços do sistema e outras unidades"
+
+#: src/core/org.freedesktop.systemd1.policy.in:34
+msgid "Authentication is required to manage system services or other units."
+msgstr ""
+"É necessária autenticação para gerir serviços do sistema ou outras unidades."
+
+#: src/core/org.freedesktop.systemd1.policy.in:43
+msgid "Manage system service or unit files"
+msgstr "Gerir ficheiros de unidades e serviços do sistema"
+
+#: src/core/org.freedesktop.systemd1.policy.in:44
+msgid "Authentication is required to manage system service or unit files."
+msgstr ""
+"É necessária a autenticação para gerir o serviço do sistema ou ficheiros de "
+"unidades."
+
+#: src/core/org.freedesktop.systemd1.policy.in:54
+msgid "Set or unset system and service manager environment variables"
+msgstr ""
+"Definir ou retirar definição de variáveis do ambiente de gestor de serviço e "
+"sistema"
+
+#: src/core/org.freedesktop.systemd1.policy.in:55
+msgid ""
+"Authentication is required to set or unset system and service manager "
+"environment variables."
+msgstr ""
+"É necessária autenticação para definir ou retirar definição de variáveis do "
+"ambiente de gestor de serviço e sistema."
+
+#: src/core/org.freedesktop.systemd1.policy.in:64
+msgid "Reload the systemd state"
+msgstr "Recarregar o estado do sistema"
+
+#: src/core/org.freedesktop.systemd1.policy.in:65
+msgid "Authentication is required to reload the systemd state."
+msgstr "É necessária autenticação para recarregar o estado do sistema."
+
+#: src/home/org.freedesktop.home1.policy:13
+msgid "Create a home area"
+msgstr "Criar uma área home"
+
+#: src/home/org.freedesktop.home1.policy:14
+msgid "Authentication is required to create a user's home area."
+msgstr "É necessária autenticação para criar a área home de um utilizador."
+
+#: src/home/org.freedesktop.home1.policy:23
+msgid "Remove a home area"
+msgstr "Remover uma área home"
+
+#: src/home/org.freedesktop.home1.policy:24
+msgid "Authentication is required to remove a user's home area."
+msgstr "É necessária autenticação para remover a área home de um utilizador."
+
+#: src/home/org.freedesktop.home1.policy:33
+msgid "Check credentials of a home area"
+msgstr "Verificar credenciais de uma área home"
+
+#: src/home/org.freedesktop.home1.policy:34
+msgid ""
+"Authentication is required to check credentials against a user's home area."
+msgstr ""
+"É necessária autenticação para verificar credenciais da área home de um "
+"utilizador."
+
+#: src/home/org.freedesktop.home1.policy:43
+msgid "Update a home area"
+msgstr "Atualizar uma área home"
+
+#: src/home/org.freedesktop.home1.policy:44
+msgid "Authentication is required to update a user's home area."
+msgstr "É necessária autenticação para atualizar a área home de um utilizador."
+
+#: src/home/org.freedesktop.home1.policy:53
+msgid "Resize a home area"
+msgstr "Redimensionar uma área home"
+
+#: src/home/org.freedesktop.home1.policy:54
+msgid "Authentication is required to resize a user's home area."
+msgstr ""
+"É necessária autenticação para redimensionar a área home de um utilizador."
+
+#: src/home/org.freedesktop.home1.policy:63
+msgid "Change password of a home area"
+msgstr "Alterar palavra-passe de uma área home"
+
+#: src/home/org.freedesktop.home1.policy:64
+msgid ""
+"Authentication is required to change the password of a user's home area."
+msgstr ""
+"É necessária autenticação para alterar a palavra-passe da área home de um "
+"utilizador."
+
+#: src/hostname/org.freedesktop.hostname1.policy:20
+msgid "Set hostname"
+msgstr "Definir nome de máquina"
+
+#: src/hostname/org.freedesktop.hostname1.policy:21
+msgid "Authentication is required to set the local hostname."
+msgstr "É necessária autenticação para definir o nome de máquina local."
+
+#: src/hostname/org.freedesktop.hostname1.policy:30
+msgid "Set static hostname"
+msgstr "Definir nome estático de máquina"
+
+#: src/hostname/org.freedesktop.hostname1.policy:31
+msgid ""
+"Authentication is required to set the statically configured local hostname, "
+"as well as the pretty hostname."
+msgstr ""
+"É necessária autenticação para definir o nome de máquina local configurado "
+"estaticamente, assim como o nome apresentável de máquina."
+
+#: src/hostname/org.freedesktop.hostname1.policy:41
+msgid "Set machine information"
+msgstr "Definir informações da máquina"
+
+#: src/hostname/org.freedesktop.hostname1.policy:42
+msgid "Authentication is required to set local machine information."
+msgstr "É necessária autenticação para definir informações de máquina local."
+
+#: src/hostname/org.freedesktop.hostname1.policy:51
+msgid "Get product UUID"
+msgstr "Obter UUID do produto"
+
+#: src/hostname/org.freedesktop.hostname1.policy:52
+msgid "Authentication is required to get product UUID."
+msgstr "É necessária autenticação para obter a UUID."
+
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Obter o número de série do hardware"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "É necessária autenticação para obter o número de série do hardware."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Obter descrição do sistema"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "É necessária autenticação para obter a descrição do sistema."
+
+#: src/import/org.freedesktop.import1.policy:22
+msgid "Import a VM or container image"
+msgstr "Importar uma VM ou imagem contentor"
+
+#: src/import/org.freedesktop.import1.policy:23
+msgid "Authentication is required to import a VM or container image"
+msgstr "É necessária autenticação para importar uma VM ou imagem contentor"
+
+#: src/import/org.freedesktop.import1.policy:32
+msgid "Export a VM or container image"
+msgstr "Exportar uma VM ou imagem contentor"
+
+#: src/import/org.freedesktop.import1.policy:33
+msgid "Authentication is required to export a VM or container image"
+msgstr "É necessária autenticação para exportar uma VM ou imagem contentor"
+
+#: src/import/org.freedesktop.import1.policy:42
+msgid "Download a VM or container image"
+msgstr "Baixar uma VM ou imagem contentor"
+
+#: src/import/org.freedesktop.import1.policy:43
+msgid "Authentication is required to download a VM or container image"
+msgstr "É necessária autenticação para transferir uma VM ou imagem contentor"
+
+#: src/locale/org.freedesktop.locale1.policy:22
+msgid "Set system locale"
+msgstr "Definir configurações regionais do sistema"
+
+#: src/locale/org.freedesktop.locale1.policy:23
+msgid "Authentication is required to set the system locale."
+msgstr ""
+"É necessária autenticação para definir as configurações regionais do sistema."
+
+#: src/locale/org.freedesktop.locale1.policy:33
+msgid "Set system keyboard settings"
+msgstr "Definir configurações de teclado do sistema"
+
+#: src/locale/org.freedesktop.locale1.policy:34
+msgid "Authentication is required to set the system keyboard settings."
+msgstr ""
+"É necessária autenticação para definir as configurações de teclado do "
+"sistema."
+
+#: src/login/org.freedesktop.login1.policy:22
+msgid "Allow applications to inhibit system shutdown"
+msgstr "Permitir que aplicações inibam o encerramento do sistema"
+
+#: src/login/org.freedesktop.login1.policy:23
+msgid ""
+"Authentication is required for an application to inhibit system shutdown."
+msgstr ""
+"É necessária autenticação para que uma aplicação iniba o encerramento do "
+"sistema."
+
+#: src/login/org.freedesktop.login1.policy:33
+msgid "Allow applications to delay system shutdown"
+msgstr "Permitir que aplicações atrasem o encerramento do sistema"
+
+#: src/login/org.freedesktop.login1.policy:34
+msgid "Authentication is required for an application to delay system shutdown."
+msgstr ""
+"É necessária autenticação para que uma aplicação atrase o encerramento do "
+"sistema."
+
+#: src/login/org.freedesktop.login1.policy:44
+msgid "Allow applications to inhibit system sleep"
+msgstr "Permitir que aplicações inibam a suspensão do sistema"
+
+#: src/login/org.freedesktop.login1.policy:45
+msgid "Authentication is required for an application to inhibit system sleep."
+msgstr ""
+"É necessária autenticação para que uma aplicação iniba a suspensão do "
+"sistema."
+
+#: src/login/org.freedesktop.login1.policy:55
+msgid "Allow applications to delay system sleep"
+msgstr "Permite que aplicações atrasem a suspensão do sistema"
+
+#: src/login/org.freedesktop.login1.policy:56
+msgid "Authentication is required for an application to delay system sleep."
+msgstr ""
+"É necessária autenticação para que uma aplicação atrase a suspensão do "
+"sistema."
+
+#: src/login/org.freedesktop.login1.policy:65
+msgid "Allow applications to inhibit automatic system suspend"
+msgstr "Permitir que aplicações inibam a suspensão automática do sistema"
+
+#: src/login/org.freedesktop.login1.policy:66
+msgid ""
+"Authentication is required for an application to inhibit automatic system "
+"suspend."
+msgstr ""
+"É necessária autenticação para que uma aplicação iniba a suspensão "
+"automática do sistema."
+
+#: src/login/org.freedesktop.login1.policy:75
+msgid "Allow applications to inhibit system handling of the power key"
+msgstr "Permitir que aplicações inibam o sistema de gerir o botão de energia"
+
+#: src/login/org.freedesktop.login1.policy:76
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the power key."
+msgstr ""
+"É necessária autenticação para que uma aplicação iniba a manipulação do "
+"sistema sobre a chave de ligar/desligar."
+
+#: src/login/org.freedesktop.login1.policy:86
+msgid "Allow applications to inhibit system handling of the suspend key"
+msgstr "Permitir que aplicações inibam o sistema de gerir o botão de suspensão"
+
+#: src/login/org.freedesktop.login1.policy:87
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the suspend key."
+msgstr ""
+"É necessária autenticação para que uma aplicação iniba a manipulação do "
+"sistema sobre a chave de suspensão."
+
+#: src/login/org.freedesktop.login1.policy:97
+msgid "Allow applications to inhibit system handling of the hibernate key"
+msgstr ""
+"Permitir que aplicações inibam o sistema de gerir o botão de hibernação"
+
+#: src/login/org.freedesktop.login1.policy:98
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the hibernate key."
+msgstr ""
+"É necessária autenticação para que uma aplicação iniba a manipulação do "
+"sistema sobre a chave de hibernar."
+
+#: src/login/org.freedesktop.login1.policy:107
+msgid "Allow applications to inhibit system handling of the lid switch"
+msgstr ""
+"Permitir que aplicações inibam o sistema de gerir a abertura/fecho da tampa "
+"do dispositivo portátil"
+
+#: src/login/org.freedesktop.login1.policy:108
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the lid switch."
+msgstr ""
+"É necessária autenticação para que uma aplicação iniba a manipulação do "
+"sistema sobre o interruptor da ecrã."
+
+#: src/login/org.freedesktop.login1.policy:117
+msgid "Allow applications to inhibit system handling of the reboot key"
+msgstr ""
+"Permitir que os aplicações inibam a gestão do sistema da tecla de reiniciar"
+
+#: src/login/org.freedesktop.login1.policy:118
+msgid ""
+"Authentication is required for an application to inhibit system handling of "
+"the reboot key."
+msgstr ""
+"A autenticação é necessária para uma aplicação para inibir a gestão do "
+"sistema da tecla de reiniciar."
+
+#: src/login/org.freedesktop.login1.policy:128
+msgid "Allow non-logged-in user to run programs"
+msgstr ""
+"Permitir que programas sejam executados por utilizador que não possui sessão"
+
+#: src/login/org.freedesktop.login1.policy:129
+msgid "Explicit request is required to run programs as a non-logged-in user."
+msgstr ""
+"É necessária requisição explícita para executar programas como utilizador "
+"sem sessão aberta."
+
+#: src/login/org.freedesktop.login1.policy:138
+msgid "Allow non-logged-in users to run programs"
+msgstr ""
+"Permitir que programas sejam executados por utilizadores que não possuem "
+"sessão"
+
+#: src/login/org.freedesktop.login1.policy:139
+msgid "Authentication is required to run programs as a non-logged-in user."
+msgstr ""
+"É necessária autenticação para executar programas como utilizador sem sessão "
+"aberta."
+
+#: src/login/org.freedesktop.login1.policy:148
+msgid "Allow attaching devices to seats"
+msgstr "Permitir ligar dispositivos em estações"
+
+#: src/login/org.freedesktop.login1.policy:149
+msgid "Authentication is required to attach a device to a seat."
+msgstr "É necessária autenticação para ligar um dispositivo em uma estação."
+
+#: src/login/org.freedesktop.login1.policy:159
+msgid "Flush device to seat attachments"
+msgstr "Libertar dispositivo para ligações da estação"
+
+#: src/login/org.freedesktop.login1.policy:160
+msgid "Authentication is required to reset how devices are attached to seats."
+msgstr ""
+"É necessária autenticação para redefinir a quantidade de dispositivos "
+"ligados na estação."
+
+#: src/login/org.freedesktop.login1.policy:169
+msgid "Power off the system"
+msgstr "Desligar o sistema"
+
+#: src/login/org.freedesktop.login1.policy:170
+msgid "Authentication is required to power off the system."
+msgstr "É necessária autenticação para desligar o sistema."
+
+#: src/login/org.freedesktop.login1.policy:180
+msgid "Power off the system while other users are logged in"
+msgstr "Desligar o sistema enquanto outros utilizadores estão ligados"
+
+#: src/login/org.freedesktop.login1.policy:181
+msgid ""
+"Authentication is required to power off the system while other users are "
+"logged in."
+msgstr ""
+"É necessária autenticação para desligar o sistema enquanto outros "
+"utilizadores estão ligados."
+
+#: src/login/org.freedesktop.login1.policy:191
+msgid "Power off the system while an application is inhibiting this"
+msgstr "Desligar o sistema enquanto uma aplicação solicitou inibição"
+
+#: src/login/org.freedesktop.login1.policy:192
+msgid ""
+"Authentication is required to power off the system while an application is "
+"inhibiting this."
+msgstr ""
+"É necessária autenticação para desligar o sistema enquanto uma aplicação "
+"solicitou inibição."
+
+#: src/login/org.freedesktop.login1.policy:202
+msgid "Reboot the system"
+msgstr "Reiniciar o sistema"
+
+#: src/login/org.freedesktop.login1.policy:203
+msgid "Authentication is required to reboot the system."
+msgstr "É necessária autenticação para reiniciar o sistema."
+
+#: src/login/org.freedesktop.login1.policy:213
+msgid "Reboot the system while other users are logged in"
+msgstr "Reiniciar o sistema enquanto outros utilizadores estiverem ligados"
+
+#: src/login/org.freedesktop.login1.policy:214
+msgid ""
+"Authentication is required to reboot the system while other users are logged "
+"in."
+msgstr ""
+"É necessária autenticação para reiniciar o sistema enquanto outros "
+"utilizadores estiverem ligados."
+
+#: src/login/org.freedesktop.login1.policy:224
+msgid "Reboot the system while an application is inhibiting this"
+msgstr "Reiniciar o sistema enquanto uma aplicação solicitou inibição"
+
+#: src/login/org.freedesktop.login1.policy:225
+msgid ""
+"Authentication is required to reboot the system while an application is "
+"inhibiting this."
+msgstr ""
+"É necessária autenticação para reiniciar o sistema enquanto uma aplicação "
+"solicitou inibição."
+
+#: src/login/org.freedesktop.login1.policy:235
+msgid "Halt the system"
+msgstr "Parar o sistema"
+
+#: src/login/org.freedesktop.login1.policy:236
+msgid "Authentication is required to halt the system."
+msgstr "É necessária autenticação para parar o sistema."
+
+#: src/login/org.freedesktop.login1.policy:246
+msgid "Halt the system while other users are logged in"
+msgstr "Parar o sistema enquanto outros utilizadores estão ligados"
+
+#: src/login/org.freedesktop.login1.policy:247
+msgid ""
+"Authentication is required to halt the system while other users are logged "
+"in."
+msgstr ""
+"É necessária autenticação para parar o sistema enquanto outros utilizadores "
+"estejam ligados."
+
+#: src/login/org.freedesktop.login1.policy:257
+msgid "Halt the system while an application is inhibiting this"
+msgstr "Parar o sistema enquanto uma aplicação solicitou inibição"
+
+#: src/login/org.freedesktop.login1.policy:258
+msgid ""
+"Authentication is required to halt the system while an application is "
+"inhibiting this."
+msgstr ""
+"É necessária autenticação para parar o sistema enquanto uma aplicação "
+"solicitou inibição."
+
+#: src/login/org.freedesktop.login1.policy:268
+msgid "Suspend the system"
+msgstr "Suspender o sistema"
+
+#: src/login/org.freedesktop.login1.policy:269
+msgid "Authentication is required to suspend the system."
+msgstr "É necessária autenticação para suspender o sistema."
+
+#: src/login/org.freedesktop.login1.policy:278
+msgid "Suspend the system while other users are logged in"
+msgstr "Suspender o sistema enquanto outros utilizadores estiverem ligados"
+
+#: src/login/org.freedesktop.login1.policy:279
+msgid ""
+"Authentication is required to suspend the system while other users are "
+"logged in."
+msgstr ""
+"É necessária autenticação para suspender o sistema enquanto outros "
+"utilizadores estiverem ligados."
+
+#: src/login/org.freedesktop.login1.policy:289
+msgid "Suspend the system while an application is inhibiting this"
+msgstr "Suspender o sistema enquanto uma aplicação solicitou inibição"
+
+#: src/login/org.freedesktop.login1.policy:290
+msgid ""
+"Authentication is required to suspend the system while an application is "
+"inhibiting this."
+msgstr ""
+"É necessária autenticação para suspender o sistema enquanto uma aplicação "
+"solicitou inibição."
+
+#: src/login/org.freedesktop.login1.policy:300
+msgid "Hibernate the system"
+msgstr "Hibernar o sistema"
+
+#: src/login/org.freedesktop.login1.policy:301
+msgid "Authentication is required to hibernate the system."
+msgstr "É necessária autenticação para hibernar o sistema."
+
+#: src/login/org.freedesktop.login1.policy:310
+msgid "Hibernate the system while other users are logged in"
+msgstr "Hibernar o sistema enquanto outros utilizadores estiverem ligados"
+
+#: src/login/org.freedesktop.login1.policy:311
+msgid ""
+"Authentication is required to hibernate the system while other users are "
+"logged in."
+msgstr ""
+"É necessária autenticação para hibernar o sistema enquanto outros "
+"utilizadores estiverem ligados."
+
+#: src/login/org.freedesktop.login1.policy:321
+msgid "Hibernate the system while an application is inhibiting this"
+msgstr "Hibernar o sistema enquanto uma aplicação solicitou inibição"
+
+#: src/login/org.freedesktop.login1.policy:322
+msgid ""
+"Authentication is required to hibernate the system while an application is "
+"inhibiting this."
+msgstr ""
+"É necessária autenticação para hibernar o sistema enquanto uma aplicação "
+"solicitou inibição."
+
+#: src/login/org.freedesktop.login1.policy:332
+msgid "Manage active sessions, users and seats"
+msgstr "Gerir estações, utilizadores e sessões ativas"
+
+#: src/login/org.freedesktop.login1.policy:333
+msgid "Authentication is required to manage active sessions, users and seats."
+msgstr ""
+"É necessária autenticação para gerir estações, utilizadores e sessões ativas."
+
+#: src/login/org.freedesktop.login1.policy:342
+msgid "Lock or unlock active sessions"
+msgstr "Bloquear ou desbloquear sessões ativas"
+
+#: src/login/org.freedesktop.login1.policy:343
+msgid "Authentication is required to lock or unlock active sessions."
+msgstr "É necessária autenticação para bloquear ou desbloquear sessões ativas."
+
+#: src/login/org.freedesktop.login1.policy:352
+msgid "Set the reboot \"reason\" in the kernel"
+msgstr "Definir o “motivo” de reinício no kernel"
+
+#: src/login/org.freedesktop.login1.policy:353
+msgid "Authentication is required to set the reboot \"reason\" in the kernel."
+msgstr ""
+"É necessária autenticação para definir o “motivo” de reinício no kernel."
+
+#: src/login/org.freedesktop.login1.policy:363
+msgid "Indicate to the firmware to boot to setup interface"
+msgstr "Indicar para o firmware arrancar para a interface de configuração"
+
+#: src/login/org.freedesktop.login1.policy:364
+msgid ""
+"Authentication is required to indicate to the firmware to boot to setup "
+"interface."
+msgstr ""
+"É necessária autenticação para indicar para o firmware arrancar para a "
+"interface de configuração."
+
+#: src/login/org.freedesktop.login1.policy:374
+msgid "Indicate to the boot loader to boot to the boot loader menu"
+msgstr "Indicar para o carregador de arranque iniciar o seu menu"
+
+#: src/login/org.freedesktop.login1.policy:375
+msgid ""
+"Authentication is required to indicate to the boot loader to boot to the "
+"boot loader menu."
+msgstr ""
+"É necessária autenticação para indicar para o carregador de arranque iniciar "
+"o seu menu."
+
+#: src/login/org.freedesktop.login1.policy:385
+msgid "Indicate to the boot loader to boot a specific entry"
+msgstr "Indicar para o carregador de arranque iniciar uma entrada específica"
+
+#: src/login/org.freedesktop.login1.policy:386
+msgid ""
+"Authentication is required to indicate to the boot loader to boot into a "
+"specific boot loader entry."
+msgstr ""
+"É necessária autenticação para indicar para o carregador de arranque iniciar "
+"uma entrada específica."
+
+#: src/login/org.freedesktop.login1.policy:396
+msgid "Set a wall message"
+msgstr "Definir uma mensagem de parede"
+
+#: src/login/org.freedesktop.login1.policy:397
+msgid "Authentication is required to set a wall message"
+msgstr "É necessária autenticação para definir uma mensagem de parede"
+
+#: src/login/org.freedesktop.login1.policy:406
+msgid "Change Session"
+msgstr "Alterar sessão"
+
+#: src/login/org.freedesktop.login1.policy:407
+msgid "Authentication is required to change the virtual terminal."
+msgstr "É necessária autenticação para alterar o terminal virtual."
+
+#: src/machine/org.freedesktop.machine1.policy:22
+msgid "Log into a local container"
+msgstr "Conectar a um contentor local"
+
+#: src/machine/org.freedesktop.machine1.policy:23
+msgid "Authentication is required to log into a local container."
+msgstr "É necessária autenticação para ligar-se a um contentor local."
+
+#: src/machine/org.freedesktop.machine1.policy:32
+msgid "Log into the local host"
+msgstr "Conectar a uma máquina local"
+
+#: src/machine/org.freedesktop.machine1.policy:33
+msgid "Authentication is required to log into the local host."
+msgstr "É necessária autenticação para ligar-se a uma máquina local."
+
+#: src/machine/org.freedesktop.machine1.policy:42
+msgid "Acquire a shell in a local container"
+msgstr "Adquirir uma shell em um contentor local"
+
+#: src/machine/org.freedesktop.machine1.policy:43
+msgid "Authentication is required to acquire a shell in a local container."
+msgstr ""
+"É necessária autenticação para adquirir uma shell em um contentor local."
+
+#: src/machine/org.freedesktop.machine1.policy:53
+msgid "Acquire a shell on the local host"
+msgstr "Adquirir uma shell na máquina local"
+
+#: src/machine/org.freedesktop.machine1.policy:54
+msgid "Authentication is required to acquire a shell on the local host."
+msgstr ""
+"É necessária autenticação para adquirir uma shell em uma máquina local."
+
+#: src/machine/org.freedesktop.machine1.policy:64
+msgid "Acquire a pseudo TTY in a local container"
+msgstr "Adquirir um pseudo TTY em um contentor local"
+
+#: src/machine/org.freedesktop.machine1.policy:65
+msgid ""
+"Authentication is required to acquire a pseudo TTY in a local container."
+msgstr ""
+"É necessária autenticação para adquirir um pseudo TTY em um contentor local."
+
+#: src/machine/org.freedesktop.machine1.policy:74
+msgid "Acquire a pseudo TTY on the local host"
+msgstr "Adquiri um pseudo TTY na máquina local"
+
+#: src/machine/org.freedesktop.machine1.policy:75
+msgid "Authentication is required to acquire a pseudo TTY on the local host."
+msgstr ""
+"É necessária autenticação para adquirir um pseudo TTY em um máquina local."
+
+#: src/machine/org.freedesktop.machine1.policy:84
+msgid "Manage local virtual machines and containers"
+msgstr "Gerir máquinas virtuais locais e contentores"
+
+#: src/machine/org.freedesktop.machine1.policy:85
+msgid ""
+"Authentication is required to manage local virtual machines and containers."
+msgstr ""
+"É necessária autenticação para gerir máquinas virtuais locais e contentores."
+
+#: src/machine/org.freedesktop.machine1.policy:95
+msgid "Manage local virtual machine and container images"
+msgstr "Gerir máquinas virtuais locais e imagens contentores"
+
+#: src/machine/org.freedesktop.machine1.policy:96
+msgid ""
+"Authentication is required to manage local virtual machine and container "
+"images."
+msgstr ""
+"É necessária autenticação para gerir máquinas virtuais locais e imagens "
+"contentores."
+
+#: src/network/org.freedesktop.network1.policy:22
+msgid "Set NTP servers"
+msgstr "Definir servidores NTP"
+
+#: src/network/org.freedesktop.network1.policy:23
+msgid "Authentication is required to set NTP servers."
+msgstr "É necessária autenticação para definir os servidores NTP."
+
+#: src/network/org.freedesktop.network1.policy:33
+#: src/resolve/org.freedesktop.resolve1.policy:44
+msgid "Set DNS servers"
+msgstr "Definir servidores DNS"
+
+#: src/network/org.freedesktop.network1.policy:34
+#: src/resolve/org.freedesktop.resolve1.policy:45
+msgid "Authentication is required to set DNS servers."
+msgstr "É necessária autenticação para definir os servidores DNS."
+
+#: src/network/org.freedesktop.network1.policy:44
+#: src/resolve/org.freedesktop.resolve1.policy:55
+msgid "Set domains"
+msgstr "Definir domínios"
+
+#: src/network/org.freedesktop.network1.policy:45
+#: src/resolve/org.freedesktop.resolve1.policy:56
+msgid "Authentication is required to set domains."
+msgstr "É necessária autenticação para definir domínios."
+
+#: src/network/org.freedesktop.network1.policy:55
+#: src/resolve/org.freedesktop.resolve1.policy:66
+msgid "Set default route"
+msgstr "Definir rota padrão"
+
+#: src/network/org.freedesktop.network1.policy:56
+#: src/resolve/org.freedesktop.resolve1.policy:67
+msgid "Authentication is required to set default route."
+msgstr "É necessária autenticação para definir a rota padrão."
+
+#: src/network/org.freedesktop.network1.policy:66
+#: src/resolve/org.freedesktop.resolve1.policy:77
+msgid "Enable/disable LLMNR"
+msgstr "Ativar/desativar LLMNR"
+
+#: src/network/org.freedesktop.network1.policy:67
+#: src/resolve/org.freedesktop.resolve1.policy:78
+msgid "Authentication is required to enable or disable LLMNR."
+msgstr "É necessária autenticação para definir ativar ou desativar LLMNR."
+
+#: src/network/org.freedesktop.network1.policy:77
+#: src/resolve/org.freedesktop.resolve1.policy:88
+msgid "Enable/disable multicast DNS"
+msgstr "Ativar/desativar DNS multicast"
+
+#: src/network/org.freedesktop.network1.policy:78
+#: src/resolve/org.freedesktop.resolve1.policy:89
+msgid "Authentication is required to enable or disable multicast DNS."
+msgstr "É necessária autenticação para ativar ou desativar DNS multicast."
+
+#: src/network/org.freedesktop.network1.policy:88
+#: src/resolve/org.freedesktop.resolve1.policy:99
+msgid "Enable/disable DNS over TLS"
+msgstr "Ativar/desativar DNS por TLS"
+
+#: src/network/org.freedesktop.network1.policy:89
+#: src/resolve/org.freedesktop.resolve1.policy:100
+msgid "Authentication is required to enable or disable DNS over TLS."
+msgstr "É necessária autenticação para ativar ou desativar DNS por TLS."
+
+#: src/network/org.freedesktop.network1.policy:99
+#: src/resolve/org.freedesktop.resolve1.policy:110
+msgid "Enable/disable DNSSEC"
+msgstr "Ativar/desativar DNSSEC"
+
+#: src/network/org.freedesktop.network1.policy:100
+#: src/resolve/org.freedesktop.resolve1.policy:111
+msgid "Authentication is required to enable or disable DNSSEC."
+msgstr "É necessária autenticação para ativar ou desativar DNSSEC."
+
+#: src/network/org.freedesktop.network1.policy:110
+#: src/resolve/org.freedesktop.resolve1.policy:121
+msgid "Set DNSSEC Negative Trust Anchors"
+msgstr "Definir DNSSEC Negative Trust Anchors"
+
+#: src/network/org.freedesktop.network1.policy:111
+#: src/resolve/org.freedesktop.resolve1.policy:122
+msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
+msgstr "É necessária autenticação para definir DNSSEC Negative Trust Anchors."
+
+#: src/network/org.freedesktop.network1.policy:121
+msgid "Revert NTP settings"
+msgstr "Reverter definições de NTP"
+
+#: src/network/org.freedesktop.network1.policy:122
+msgid "Authentication is required to reset NTP settings."
+msgstr "É necessária autenticação para redefinir as definições de NTP."
+
+#: src/network/org.freedesktop.network1.policy:132
+msgid "Revert DNS settings"
+msgstr "Reverter definições de DNS"
+
+#: src/network/org.freedesktop.network1.policy:133
+msgid "Authentication is required to reset DNS settings."
+msgstr "É necessária autenticação para redefinir as definições de DNS."
+
+#: src/network/org.freedesktop.network1.policy:143
+msgid "DHCP server sends force renew message"
+msgstr "Servidor DHCP envia mensagem de renovação forçada"
+
+#: src/network/org.freedesktop.network1.policy:144
+msgid "Authentication is required to send force renew message."
+msgstr "É necessária autenticação para enviar mensagem de renovação forçada."
+
+#: src/network/org.freedesktop.network1.policy:154
+msgid "Renew dynamic addresses"
+msgstr "Renovar endereços dinâmicos"
+
+#: src/network/org.freedesktop.network1.policy:155
+msgid "Authentication is required to renew dynamic addresses."
+msgstr "É necessária autenticação para renovar endereços dinâmicos."
+
+#: src/network/org.freedesktop.network1.policy:165
+msgid "Reload network settings"
+msgstr "Recarregar definições de rede"
+
+#: src/network/org.freedesktop.network1.policy:166
+msgid "Authentication is required to reload network settings."
+msgstr "É necessária autenticação para recarregar as definições de rede."
+
+#: src/network/org.freedesktop.network1.policy:176
+msgid "Reconfigure network interface"
+msgstr "Reconfigurar interface de rede"
+
+#: src/network/org.freedesktop.network1.policy:177
+msgid "Authentication is required to reconfigure network interface."
+msgstr "É necessária autenticação para reconfigurar a interface de rede."
+
+#: src/portable/org.freedesktop.portable1.policy:13
+msgid "Inspect a portable service image"
+msgstr "Inspecionar uma imagem de serviço portátil"
+
+#: src/portable/org.freedesktop.portable1.policy:14
+msgid "Authentication is required to inspect a portable service image."
+msgstr ""
+"É necessária autenticação para inspecionar uma imagem de serviço portátil."
+
+#: src/portable/org.freedesktop.portable1.policy:23
+msgid "Attach or detach a portable service image"
+msgstr "Ligar ou desligar uma imagem de serviço portátil"
+
+#: src/portable/org.freedesktop.portable1.policy:24
+msgid ""
+"Authentication is required to attach or detach a portable service image."
+msgstr ""
+"É necessária autenticação para ligar ou desligar uma imagem de serviço "
+"portátil."
+
+#: src/portable/org.freedesktop.portable1.policy:34
+msgid "Delete or modify portable service image"
+msgstr "Remover ou modificar imagem de serviço portátil"
+
+#: src/portable/org.freedesktop.portable1.policy:35
+msgid ""
+"Authentication is required to delete or modify a portable service image."
+msgstr ""
+"É necessária autenticação para remover ou modificar imagem de serviço "
+"portátil."
+
+#: src/resolve/org.freedesktop.resolve1.policy:22
+msgid "Register a DNS-SD service"
+msgstr "Registrar um serviço DNS-SD"
+
+#: src/resolve/org.freedesktop.resolve1.policy:23
+msgid "Authentication is required to register a DNS-SD service"
+msgstr "É necessária autenticação para registrar um serviço DNS-SD"
+
+#: src/resolve/org.freedesktop.resolve1.policy:33
+msgid "Unregister a DNS-SD service"
+msgstr "Remover um serviço DNS-SD"
+
+#: src/resolve/org.freedesktop.resolve1.policy:34
+msgid "Authentication is required to unregister a DNS-SD service"
+msgstr "É necessária autenticação para remover um serviço DNS-SD"
+
+#: src/resolve/org.freedesktop.resolve1.policy:132
+msgid "Revert name resolution settings"
+msgstr "Reverter definições de resolução de nome"
+
+#: src/resolve/org.freedesktop.resolve1.policy:133
+msgid "Authentication is required to reset name resolution settings."
+msgstr ""
+"É necessária autenticação para redefinir as definições de resolução de nome."
+
+#: src/timedate/org.freedesktop.timedate1.policy:22
+msgid "Set system time"
+msgstr "Definir horário do sistema"
+
+#: src/timedate/org.freedesktop.timedate1.policy:23
+msgid "Authentication is required to set the system time."
+msgstr "É necessária autenticação para definir o horário do sistema."
+
+#: src/timedate/org.freedesktop.timedate1.policy:33
+msgid "Set system timezone"
+msgstr "Definir fuso horário do sistema"
+
+#: src/timedate/org.freedesktop.timedate1.policy:34
+msgid "Authentication is required to set the system timezone."
+msgstr "É necessária autenticação para definir o fuso horário do sistema."
+
+#: src/timedate/org.freedesktop.timedate1.policy:43
+msgid "Set RTC to local timezone or UTC"
+msgstr "Definir RTC para fuso horário local ou UTC"
+
+#: src/timedate/org.freedesktop.timedate1.policy:44
+msgid ""
+"Authentication is required to control whether the RTC stores the local or "
+"UTC time."
+msgstr ""
+"É necessária autenticação para controlar se o RTC deve, ou não, armazenar o "
+"horário local ou de UTC."
+
+#: src/timedate/org.freedesktop.timedate1.policy:53
+msgid "Turn network time synchronization on or off"
+msgstr "Ligar/desligar a sincronização do horário em rede"
+
+#: src/timedate/org.freedesktop.timedate1.policy:54
+msgid ""
+"Authentication is required to control whether network time synchronization "
+"shall be enabled."
+msgstr ""
+"É necessária autenticação para controlar se deve ser habilitada, ou não, a "
+"sincronização de horário através de rede."
+
+#: src/core/dbus-unit.c:359
+msgid "Authentication is required to start '$(unit)'."
+msgstr "É necessária autenticação para iniciar '$(unit)'."
+
+#: src/core/dbus-unit.c:360
+msgid "Authentication is required to stop '$(unit)'."
+msgstr "É necessária autenticação para parar '$(unit)'."
+
+#: src/core/dbus-unit.c:361
+msgid "Authentication is required to reload '$(unit)'."
+msgstr "É necessária autenticação para recarregar '$(unit)'."
+
+#: src/core/dbus-unit.c:362 src/core/dbus-unit.c:363
+msgid "Authentication is required to restart '$(unit)'."
+msgstr "É necessária autenticação para reiniciar '$(unit)'."
+
+#: src/core/dbus-unit.c:546
+msgid ""
+"Authentication is required to send a UNIX signal to the processes of "
+"'$(unit)'."
+msgstr ""
+"É necessária autenticação para enviar um sinal UNIX para os processos de "
+"'$(unit)'."
+
+#: src/core/dbus-unit.c:576
+msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
+msgstr ""
+"É necessária autenticação para reiniciar o estado “failed” de '$(unit)'."
+
+#: src/core/dbus-unit.c:608
+msgid "Authentication is required to set properties on '$(unit)'."
+msgstr "É necessária autenticação para definir propriedades em '$(unit)'."
+
+#: src/core/dbus-unit.c:714
+msgid ""
+"Authentication is required to delete files and directories associated with "
+"'$(unit)'."
+msgstr ""
+"É necessária autenticação para eliminar ficheiros e diretórios associados "
+"com '$(unit)'."
+
+#: src/core/dbus-unit.c:762
+msgid ""
+"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
+msgstr ""
+"É necessária autenticação para congelar ou descongelar os processos da "
+"unidade '$(unit)'."
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 8cdd49f..519b212 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,10 +7,9 @@
 # Gustavo Costa <xfgusta@gmail.com>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-02-25 18:41+0000\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2021-08-17 07:04+0000\n"
 "Last-Translator: Gustavo Costa <xfgusta@gmail.com>\n"
 "Language-Team: Portuguese (Brazil) <https://translate.fedoraproject.org/"
 "projects/systemd/master/pt_BR/>\n"
@@ -19,7 +18,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.4.2\n"
+"X-Generator: Weblate 4.7.2\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -164,6 +163,25 @@
 msgid "Authentication is required to get product UUID."
 msgstr "É necessária autenticação para obter a UUID."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "É necessária autenticação para definir o horário do sistema."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Definir fuso horário do sistema"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "É necessária autenticação para definir o fuso horário do sistema."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importar uma VM ou imagem contêiner"
@@ -316,7 +334,7 @@
 #: src/login/org.freedesktop.login1.policy:117
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr ""
-"Permitir que aplicativos inibam o sistema de gerenciar o botão de "
+"Permitir que os aplicativos inibam o gerenciamento do sistema da tecla de "
 "reinicialização"
 
 #: src/login/org.freedesktop.login1.policy:118
@@ -324,8 +342,8 @@
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
 msgstr ""
-"É necessária autenticação para que um aplicativo iniba o sistema de "
-"gerenciar o botão de reinicialização."
+"A autenticação é necessária para um aplicativo para inibir o gerenciamento "
+"do sistema da tecla de reinicialização."
 
 #: src/login/org.freedesktop.login1.policy:128
 msgid "Allow non-logged-in user to run programs"
@@ -932,7 +950,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "É necessária autenticação para reiniciar “$(unit)”."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -940,16 +958,16 @@
 "É necessária autenticação para enviar um sinal UNIX para os processos de "
 "“$(unit)”."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "É necessária autenticação para reiniciar o estado “failed” de “$(unit)”."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "É necessária autenticação para definir propriedades em “$(unit)”."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -957,7 +975,7 @@
 "É necessária autenticação para excluir arquivos e diretórios associados com "
 "“$(unit)”."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/ro.po b/po/ro.po
index 1dd04fc..b987c8d 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -6,9 +6,8 @@
 # Vlad <milovlad@outlook.com>, 2020, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2021-01-12 17:36+0000\n"
 "Last-Translator: Vlad <milovlad@outlook.com>\n"
 "Language-Team: Romanian <https://translate.fedoraproject.org/projects/"
@@ -175,6 +174,25 @@
 "Autentificarea este necesară pentru a obține identificatorul unic universal "
 "(UUID) al produsului."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Autentificarea este necesară pentru a seta ora sistemului."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Setează fusul orar al sistemului"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Autentificarea este necesară pentru a seta fusul orar al sistemului."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importă o VM (mașină virtuală) sau o imagine container"
@@ -964,7 +982,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Autentificarea este necesară pentru a reporni „$(unit)”."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -972,17 +990,17 @@
 "Autentificarea este necesară pentru a trimite un semnal UNIX către procesele "
 "unui „$(unit)”."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Autentificarea este necesară pentru a reseta starea „eșuată” a „$(unit)”."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "Autentificarea este necesară pentru a seta proprietățile lui „$(unit)”."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -990,7 +1008,7 @@
 "Autentificarea este necesară pentru a șterge fișierele și directoarele "
 "asociate lui „$(unit)”."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/ru.po b/po/ru.po
index e3cd42a..26b0f95 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -6,13 +6,13 @@
 # Sergey Ptashnick <0comffdiz@inbox.ru>, 2013-2018.
 # Vladimir Yerilov <openmindead@gmail.com>, 2020.
 # Alexey Rubtsov <rushills@gmail.com>, 2021.
+# Olga Smirnova <mistresssilvara@hotmail.com>, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-07-02 09:04+0000\n"
-"Last-Translator: Alexey Rubtsov <rushills@gmail.com>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-27 23:19+0000\n"
+"Last-Translator: Olga Smirnova <mistresssilvara@hotmail.com>\n"
 "Language-Team: Russian <https://translate.fedoraproject.org/projects/systemd/"
 "master/ru/>\n"
 "Language: ru\n"
@@ -21,7 +21,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7.1\n"
+"X-Generator: Weblate 4.14.1\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -173,6 +173,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Чтобы получить UUID продукта, необходимо пройти аутентификацию."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Получить серийный номер оборудования"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Чтобы получить серийный номер, необходимо пройти аутентификацию."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Получить описание системы"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Чтобы получить описание системы, необходимо пройти аутентификацию."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Импортировать образ виртуальной машины или контейнера"
@@ -992,7 +1008,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Чтобы перезапустить «$(unit)», необходимо пройти аутентификацию."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -1000,18 +1016,18 @@
 "Чтобы отправить сигнал UNIX процессам юнита «$(unit)», необходимо пройти "
 "аутентификацию."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Чтобы сбросить состояние «failed» у юнита «$(unit)», необходимо пройти "
 "аутентификацию."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "Чтобы изменить параметры юнита «$(unit)», необходимо пройти аутентификацию."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -1019,7 +1035,7 @@
 "Чтобы удалить файлы и директории, относящиеся к юниту «$(unit)», необходимо "
 "пройти аутентификацию."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/si.po b/po/si.po
index 1d6b64e..3723e7e 100644
--- a/po/si.po
+++ b/po/si.po
@@ -1,19 +1,21 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the systemd package.
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# Sinhala translation of systemd.
 # Hela Basa <r45xveza@pm.me>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2021-08-19 07:04+0000\n"
+"Last-Translator: Hela Basa <r45xveza@pm.me>\n"
+"Language-Team: Sinhala <https://translate.fedoraproject.org/projects/systemd/"
+"master/si/>\n"
 "Language: si\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.7.2\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -142,6 +144,23 @@
 msgid "Authentication is required to get product UUID."
 msgstr ""
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "පද්ධතියේ වේලාව සකසන්න"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr ""
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr ""
@@ -773,7 +792,7 @@
 
 #: src/timedate/org.freedesktop.timedate1.policy:22
 msgid "Set system time"
-msgstr ""
+msgstr "පද්ධතියේ වේලාව සකසන්න"
 
 #: src/timedate/org.freedesktop.timedate1.policy:23
 msgid "Authentication is required to set the system time."
@@ -823,27 +842,27 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/sk.po b/po/sk.po
index da8b57e..7bf681c 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -5,9 +5,8 @@
 # Frantisek Sumsal <frantisek@sumsal.cz>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2021-02-22 20:21+0000\n"
 "Last-Translator: Frantisek Sumsal <frantisek@sumsal.cz>\n"
 "Language-Team: Slovak <https://translate.fedoraproject.org/projects/systemd/"
@@ -78,7 +77,6 @@
 
 #: src/home/org.freedesktop.home1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
 msgstr ""
 "Vyžaduje sa overenie totožnosti na znovu načítanie stavu systému systemd."
@@ -89,7 +87,6 @@
 
 #: src/home/org.freedesktop.home1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
 msgstr ""
 "Vyžaduje sa overenie totožnosti na znovu načítanie stavu systému systemd."
@@ -100,7 +97,6 @@
 
 #: src/home/org.freedesktop.home1.policy:34
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
@@ -111,7 +107,6 @@
 
 #: src/home/org.freedesktop.home1.policy:44
 #, fuzzy
-#| msgid "Authentication is required to suspend the system."
 msgid "Authentication is required to update a user's home area."
 msgstr "Vyžaduje sa overenie totožnosti na uspanie systému."
 
@@ -121,7 +116,6 @@
 
 #: src/home/org.freedesktop.home1.policy:54
 #, fuzzy
-#| msgid "Authentication is required to suspend the system."
 msgid "Authentication is required to resize a user's home area."
 msgstr "Vyžaduje sa overenie totožnosti na uspanie systému."
 
@@ -131,7 +125,6 @@
 
 #: src/home/org.freedesktop.home1.policy:64
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie miestnych nastavení."
@@ -171,10 +164,28 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to get product UUID."
 msgstr "Vyžaduje sa overenie totožnosti na reštartovanie systému."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Nastavenie nastavení systémovej klávesnice"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "Vyžaduje sa overenie totožnosti na nastavenie miestnych nastavení."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr ""
@@ -240,7 +251,8 @@
 
 #: src/login/org.freedesktop.login1.policy:45
 msgid "Authentication is required for an application to inhibit system sleep."
-msgstr "Vyžaduje sa overenie totožnosti na odloženie spánku systému aplikáciou."
+msgstr ""
+"Vyžaduje sa overenie totožnosti na odloženie spánku systému aplikáciou."
 
 #: src/login/org.freedesktop.login1.policy:55
 msgid "Allow applications to delay system sleep"
@@ -303,13 +315,11 @@
 
 #: src/login/org.freedesktop.login1.policy:117
 #, fuzzy
-#| msgid "Allow applications to delay system sleep"
 msgid "Allow applications to inhibit system handling of the reboot key"
 msgstr "Umožnenie aplikáciám odložiť spánok systému"
 
 #: src/login/org.freedesktop.login1.policy:118
 #, fuzzy
-#| msgid "Authentication is required for an application to delay system sleep."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
@@ -414,27 +424,21 @@
 
 #: src/login/org.freedesktop.login1.policy:235
 #, fuzzy
-#| msgid "Reboot the system"
 msgid "Halt the system"
 msgstr "Reštart systému"
 
 #: src/login/org.freedesktop.login1.policy:236
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to halt the system."
 msgstr "Vyžaduje sa overenie totožnosti na reštartovanie systému."
 
 #: src/login/org.freedesktop.login1.policy:246
 #, fuzzy
-#| msgid "Reboot the system while other users are logged in"
 msgid "Halt the system while other users are logged in"
 msgstr "Reštart systému, pokiaľ sú prihlásení iní používatelia"
 
 #: src/login/org.freedesktop.login1.policy:247
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reboot the system while other users are "
-#| "logged in."
 msgid ""
 "Authentication is required to halt the system while other users are logged "
 "in."
@@ -448,7 +452,6 @@
 
 #: src/login/org.freedesktop.login1.policy:258
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
@@ -538,13 +541,11 @@
 
 #: src/login/org.freedesktop.login1.policy:353
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set the reboot \"reason\" in the kernel."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
 
 #: src/login/org.freedesktop.login1.policy:363
 #, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
 msgstr "Umožnenie indikácie spustenia inštalačného rozhrania pre firmvér"
 
@@ -562,9 +563,6 @@
 
 #: src/login/org.freedesktop.login1.policy:375
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
@@ -578,9 +576,6 @@
 
 #: src/login/org.freedesktop.login1.policy:386
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
@@ -602,7 +597,6 @@
 
 #: src/login/org.freedesktop.login1.policy:407
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to change the virtual terminal."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
 
@@ -681,7 +675,6 @@
 
 #: src/network/org.freedesktop.network1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set NTP servers."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie miestnych nastavení."
 
@@ -693,7 +686,6 @@
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNS servers."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie miestnych nastavení."
 
@@ -705,7 +697,6 @@
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set domains."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
 
@@ -717,7 +708,6 @@
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
 
@@ -729,7 +719,6 @@
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable LLMNR."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
 
@@ -741,7 +730,6 @@
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to enable or disable multicast DNS."
 msgstr "Vyžaduje sa overenie totožnosti na reštartovanie systému."
 
@@ -753,7 +741,6 @@
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable DNS over TLS."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
 
@@ -765,7 +752,6 @@
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to enable or disable DNSSEC."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
 
@@ -777,7 +763,6 @@
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie miestnych nastavení."
 
@@ -787,7 +772,6 @@
 
 #: src/network/org.freedesktop.network1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset NTP settings."
 msgstr ""
 "Vyžaduje sa overenie totožnosti na nastavenie nastavení systémovej "
@@ -799,7 +783,6 @@
 
 #: src/network/org.freedesktop.network1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset DNS settings."
 msgstr ""
 "Vyžaduje sa overenie totožnosti na nastavenie nastavení systémovej "
@@ -811,7 +794,6 @@
 
 #: src/network/org.freedesktop.network1.policy:144
 #, fuzzy
-#| msgid "Authentication is required to suspend the system."
 msgid "Authentication is required to send force renew message."
 msgstr "Vyžaduje sa overenie totožnosti na uspanie systému."
 
@@ -821,7 +803,6 @@
 
 #: src/network/org.freedesktop.network1.policy:155
 #, fuzzy
-#| msgid "Authentication is required to suspend the system."
 msgid "Authentication is required to renew dynamic addresses."
 msgstr "Vyžaduje sa overenie totožnosti na uspanie systému."
 
@@ -831,7 +812,6 @@
 
 #: src/network/org.freedesktop.network1.policy:166
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
 msgstr ""
 "Vyžaduje sa overenie totožnosti na znovu načítanie stavu systému systemd."
@@ -842,7 +822,6 @@
 
 #: src/network/org.freedesktop.network1.policy:177
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
 msgstr "Vyžaduje sa overenie totožnosti na reštartovanie systému."
 
@@ -852,7 +831,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to inspect a portable service image."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie miestnych nastavení."
 
@@ -862,7 +840,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
@@ -873,7 +850,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:35
 #, fuzzy
-#| msgid "Authentication is required to power off the system."
 msgid ""
 "Authentication is required to delete or modify a portable service image."
 msgstr "Vyžaduje sa overenie totožnosti na vypnutie systému."
@@ -884,7 +860,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to register a DNS-SD service"
 msgstr "Vyžaduje sa overenie totožnosti na reštartovanie systému."
 
@@ -894,7 +869,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:34
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to unregister a DNS-SD service"
 msgstr "Vyžaduje sa overenie totožnosti na reštartovanie systému."
 
@@ -904,7 +878,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
 msgstr ""
 "Vyžaduje sa overenie totožnosti na nastavenie nastavení systémovej "
@@ -964,34 +937,31 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 #, fuzzy
-#| msgid "Authentication is required to suspend the system."
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "Vyžaduje sa overenie totožnosti na uspanie systému."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 "Vyžaduje sa overenie totožnosti na znovu načítanie stavu systému systemd."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/sr.po b/po/sr.po
index 0f00945..c7d314e 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,13 +1,11 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 #
-# SOME DESCRIPTIVE TITLE.
-# This file is distributed under the same license as the PACKAGE package.
+# Serbian translation of systemd.
 # Frantisek Sumsal <frantisek@sumsal.cz>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: 2021-02-23 22:40+0000\n"
 "Last-Translator: Frantisek Sumsal <frantisek@sumsal.cz>\n"
 "Language-Team: Serbian <https://translate.fedoraproject.org/projects/systemd/"
@@ -77,7 +75,6 @@
 
 #: src/home/org.freedesktop.home1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to create a user's home area."
 msgstr ""
 "Потребно је да се идентификујете да бисте поново учитали стање систем-деа."
@@ -88,7 +85,6 @@
 
 #: src/home/org.freedesktop.home1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to remove a user's home area."
 msgstr ""
 "Потребно је да се идентификујете да бисте поново учитали стање систем-деа."
@@ -99,8 +95,6 @@
 
 #: src/home/org.freedesktop.home1.policy:34
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
 msgstr ""
@@ -113,7 +107,6 @@
 
 #: src/home/org.freedesktop.home1.policy:44
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
 msgstr "Потребно је да се идентификујете да бисте  закачили уређај на седиште."
 
@@ -123,7 +116,6 @@
 
 #: src/home/org.freedesktop.home1.policy:54
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to resize a user's home area."
 msgstr "Потребно је да се идентификујете да бисте поставили зидну поруку"
 
@@ -133,8 +125,6 @@
 
 #: src/home/org.freedesktop.home1.policy:64
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
 msgstr ""
@@ -177,10 +167,29 @@
 
 #: src/hostname/org.freedesktop.hostname1.policy:52
 #, fuzzy
-#| msgid "Authentication is required to reload '$(unit)'."
 msgid "Authentication is required to get product UUID."
 msgstr "Потребно је да се идентификујете да бисте поново учитали „$(unit)“."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "Потребно је да се идентификујете да бисте поставили системско време."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "Постави системску временску зону"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr ""
+"Потребно је да се идентификујете да бисте поставили системску временску зону."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Увези ВМ или слику контејнера"
@@ -576,7 +585,6 @@
 
 #: src/login/org.freedesktop.login1.policy:363
 #, fuzzy
-#| msgid "Allow indication to the firmware to boot to setup interface"
 msgid "Indicate to the firmware to boot to setup interface"
 msgstr "Напомени фирмверу да се подигне у режиму подешавања интерфејса"
 
@@ -594,9 +602,6 @@
 
 #: src/login/org.freedesktop.login1.policy:375
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot to the "
 "boot loader menu."
@@ -610,9 +615,6 @@
 
 #: src/login/org.freedesktop.login1.policy:386
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to indicate to the firmware to boot to setup "
-#| "interface."
 msgid ""
 "Authentication is required to indicate to the boot loader to boot into a "
 "specific boot loader entry."
@@ -634,7 +636,6 @@
 
 #: src/login/org.freedesktop.login1.policy:407
 #, fuzzy
-#| msgid "Authentication is required to halt the system."
 msgid "Authentication is required to change the virtual terminal."
 msgstr "Потребно је да се идентификујете да бисте зауставили систем."
 
@@ -726,21 +727,18 @@
 
 #: src/network/org.freedesktop.network1.policy:23
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to set NTP servers."
 msgstr "Потребно је да се идентификујете да бисте поставили системско време."
 
 #: src/network/org.freedesktop.network1.policy:33
 #: src/resolve/org.freedesktop.resolve1.policy:44
 #, fuzzy
-#| msgid "Register a DNS-SD service"
 msgid "Set DNS servers"
 msgstr "Региструј DNS-SD услугу"
 
 #: src/network/org.freedesktop.network1.policy:34
 #: src/resolve/org.freedesktop.resolve1.policy:45
 #, fuzzy
-#| msgid "Authentication is required to register a DNS-SD service"
 msgid "Authentication is required to set DNS servers."
 msgstr "Потребно је да се идентификујете да бисте регистровали DNS-SD услугу"
 
@@ -752,7 +750,6 @@
 #: src/network/org.freedesktop.network1.policy:45
 #: src/resolve/org.freedesktop.resolve1.policy:56
 #, fuzzy
-#| msgid "Authentication is required to stop '$(unit)'."
 msgid "Authentication is required to set domains."
 msgstr "Потребно је да се идентификујете да бисте зауставили „$(unit)“."
 
@@ -764,7 +761,6 @@
 #: src/network/org.freedesktop.network1.policy:56
 #: src/resolve/org.freedesktop.resolve1.policy:67
 #, fuzzy
-#| msgid "Authentication is required to set the local hostname."
 msgid "Authentication is required to set default route."
 msgstr "Потребно је да се идентификујете да бисте поставили назив машине."
 
@@ -776,7 +772,6 @@
 #: src/network/org.freedesktop.network1.policy:67
 #: src/resolve/org.freedesktop.resolve1.policy:78
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable LLMNR."
 msgstr "Потребно је да се идентификујете да бисте успавали систем."
 
@@ -788,7 +783,6 @@
 #: src/network/org.freedesktop.network1.policy:78
 #: src/resolve/org.freedesktop.resolve1.policy:89
 #, fuzzy
-#| msgid "Authentication is required to log into the local host."
 msgid "Authentication is required to enable or disable multicast DNS."
 msgstr ""
 "Потребно је да се идентификујете да бисте се пријавили у локалног домаћина."
@@ -801,7 +795,6 @@
 #: src/network/org.freedesktop.network1.policy:89
 #: src/resolve/org.freedesktop.resolve1.policy:100
 #, fuzzy
-#| msgid "Authentication is required to register a DNS-SD service"
 msgid "Authentication is required to enable or disable DNS over TLS."
 msgstr "Потребно је да се идентификујете да бисте регистровали DNS-SD услугу"
 
@@ -813,7 +806,6 @@
 #: src/network/org.freedesktop.network1.policy:100
 #: src/resolve/org.freedesktop.resolve1.policy:111
 #, fuzzy
-#| msgid "Authentication is required to hibernate the system."
 msgid "Authentication is required to enable or disable DNSSEC."
 msgstr "Потребно је да се идентификујете да бисте успавали систем."
 
@@ -825,7 +817,6 @@
 #: src/network/org.freedesktop.network1.policy:111
 #: src/resolve/org.freedesktop.resolve1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system locale."
 msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
 msgstr ""
 "Потребно је да се идентификујете да бисте поставили основни језик система."
@@ -836,7 +827,6 @@
 
 #: src/network/org.freedesktop.network1.policy:122
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset NTP settings."
 msgstr "Потребно је да се идентификујете да бисте поставили системско време."
 
@@ -846,7 +836,6 @@
 
 #: src/network/org.freedesktop.network1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system time."
 msgid "Authentication is required to reset DNS settings."
 msgstr "Потребно је да се идентификујете да бисте поставили системско време."
 
@@ -856,7 +845,6 @@
 
 #: src/network/org.freedesktop.network1.policy:144
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
 msgstr "Потребно је да се идентификујете да бисте поставили зидну поруку"
 
@@ -866,7 +854,6 @@
 
 #: src/network/org.freedesktop.network1.policy:155
 #, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to renew dynamic addresses."
 msgstr "Потребно је да се идентификујете да бисте поставили зидну поруку"
 
@@ -876,7 +863,6 @@
 
 #: src/network/org.freedesktop.network1.policy:166
 #, fuzzy
-#| msgid "Authentication is required to reload the systemd state."
 msgid "Authentication is required to reload network settings."
 msgstr ""
 "Потребно је да се идентификујете да бисте поново учитали стање систем-деа."
@@ -887,7 +873,6 @@
 
 #: src/network/org.freedesktop.network1.policy:177
 #, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
 msgstr "Потребно је да се идентификујете да бисте поново покренули систем."
 
@@ -897,7 +882,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:14
 #, fuzzy
-#| msgid "Authentication is required to import a VM or container image"
 msgid "Authentication is required to inspect a portable service image."
 msgstr ""
 "Потребно је да се идентификујете да бисте увезли виртуелну машину или слику "
@@ -909,7 +893,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:24
 #, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid ""
 "Authentication is required to attach or detach a portable service image."
 msgstr "Потребно је да се идентификујете да бисте  закачили уређај на седиште."
@@ -920,7 +903,6 @@
 
 #: src/portable/org.freedesktop.portable1.policy:35
 #, fuzzy
-#| msgid "Authentication is required to download a VM or container image"
 msgid ""
 "Authentication is required to delete or modify a portable service image."
 msgstr ""
@@ -950,7 +932,6 @@
 
 #: src/resolve/org.freedesktop.resolve1.policy:133
 #, fuzzy
-#| msgid "Authentication is required to set the system keyboard settings."
 msgid "Authentication is required to reset name resolution settings."
 msgstr ""
 "Потребно је да се идентификујете да бисте поставили подешавања системске "
@@ -1014,30 +995,27 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Потребно је да се идентификујете да бисте поново покренули „$(unit)“."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 #, fuzzy
-#| msgid "Authentication is required to set properties on '$(unit)'."
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 "Потребно је да се идентификујете да бисте поставили својства за „$(unit)“."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Потребно је да се идентификујете да бисте поново поставили „неуспешно“ стање "
 "за „$(unit)“."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "Потребно је да се идентификујете да бисте поставили својства за „$(unit)“."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -1045,10 +1023,8 @@
 "Потребно је да се идентификујете да бисте поново поставили „неуспешно“ стање "
 "за „$(unit)“."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 #, fuzzy
-#| msgid ""
-#| "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/sv.po b/po/sv.po
index 4ded196..1c77742 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -6,13 +6,13 @@
 # Josef Andersson <l10nl18nsweja@gmail.com>, 2015, 2017.
 # Göran Uddeborg <goeran@uddeborg.se>, 2020, 2021.
 # Luna Jernberg <bittin@reimu.nl>, 2020.
+# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-02-10 15:40+0000\n"
-"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-27 23:19+0000\n"
+"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
 "Language-Team: Swedish <https://translate.fedoraproject.org/projects/systemd/"
 "master/sv/>\n"
 "Language: sv\n"
@@ -20,7 +20,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.4.2\n"
+"X-Generator: Weblate 4.14.1\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -119,7 +119,8 @@
 #: src/home/org.freedesktop.home1.policy:64
 msgid ""
 "Authentication is required to change the password of a user's home area."
-msgstr "Autentisering krävs för att ändra lösenorded för en användares hemarea."
+msgstr ""
+"Autentisering krävs för att ändra lösenorded för en användares hemarea."
 
 #: src/hostname/org.freedesktop.hostname1.policy:20
 msgid "Set hostname"
@@ -157,6 +158,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Autentisering krävs för att hämta produkt-UUID."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Hämta serienummer för hårdvara"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Autentisering krävs för att hämta serienummer för hårdvara."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Hämta systemets beskrivning"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Autentisering krävs för att hämta systemets beskrivning."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Importera en VM eller behållaravbildning"
@@ -752,7 +769,7 @@
 
 #: src/network/org.freedesktop.network1.policy:122
 msgid "Authentication is required to reset NTP settings."
-msgstr "Autentisering krävs för återställa NTP-inställningar."
+msgstr "Autentisering krävs för att återställa NTP-inställningar."
 
 #: src/network/org.freedesktop.network1.policy:132
 msgid "Revert DNS settings"
@@ -905,7 +922,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Autentisering krävs för att starta om \"$(unit)\"."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -913,17 +930,17 @@
 "Autentisering krävs för att skicka en UNIX-signal till processerna i "
 "”$(unit)”."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Autentisering krävs för att återställa det \"fallerade\" tillståndet för "
 "\"$(unit)\"."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Autentisering krävs för att ställa in egenskaper på \"$(unit)\"."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -931,7 +948,7 @@
 "Autentisering krävs för att radera filer och kataloger associerade med "
 "”$(unit)”."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/systemd.pot b/po/systemd.pot
index 1c5ed6f..3f32748 100644
--- a/po/systemd.pot
+++ b/po/systemd.pot
@@ -1,14 +1,11 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the systemd package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# SPDX-License-Identifier: LGPL-2.1-or-later
 #
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -144,6 +141,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr ""
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr ""
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr ""
@@ -825,27 +838,27 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr ""
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/tr.po b/po/tr.po
index df901f1..ca3b14c 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -5,13 +5,13 @@
 # Gökhan Gurbetoğlu <ggurbet@gmail.com>, 2015.
 # Oğuz Ersen <oguzersen@protonmail.com>, 2020.
 # Muhammet Kara <muhammetk@gmail.com>, 2015-2020.
+# Oğuz Ersen <oguz@ersen.moe>, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2020-11-28 13:35+0000\n"
-"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-22 17:19+0000\n"
+"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
 "Language-Team: Turkish <https://translate.fedoraproject.org/projects/systemd/"
 "master/tr/>\n"
 "Language: tr\n"
@@ -19,7 +19,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.14.1\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -162,6 +162,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Ürün UUID'ini almak için kimlik doğrulaması gereklidir."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Donanım seri numarasını al"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Donanım seri numarasını almak kimlik doğrulaması gerektiriyor."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Sistem açıklamasını al"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Sistem açıklamasını almak kimlik doğrulaması gerektiriyor."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Bir SM ya da kapsayıcı kalıbını içe aktar"
@@ -943,7 +959,7 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "'$(unit)' yeniden başlatmak için kimlik doğrulaması gereklidir."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
@@ -951,19 +967,19 @@
 "'$(unit)' süreçlerine bir UNIX sinyali göndermek için kimlik doğrulaması "
 "gereklidir."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "'$(unit)'in \"failed\" (başarısız) durumunu sıfırlamak için kimlik "
 "doğrulaması gereklidir."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr ""
 "'$(unit)' üzerindeki özellikleri ayarlamak için kimlik doğrulaması "
 "gereklidir."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -971,7 +987,7 @@
 "'$(unit)' ile ilişkili dosyaları ve dizinleri silmek için kimlik doğrulaması "
 "gereklidir."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/uk.po b/po/uk.po
index b628f6c..b213336 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -1,14 +1,14 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
+#
 # Ukrainian translation for systemd.
 # Eugene Melnik <jeka7js@gmail.com>, 2014.
 # Daniel Korostil <ted.korostiled@gmail.com>, 2014, 2016, 2018.
-# Yuri Chornoivan <yurchor@ukr.net>, 2019, 2020, 2021.
+# Yuri Chornoivan <yurchor@ukr.net>, 2019, 2020, 2021, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-01-09 10:51+0000\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-22 17:19+0000\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/"
 "systemd/master/uk/>\n"
@@ -18,7 +18,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.4\n"
+"X-Generator: Weblate 4.14.1\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -163,6 +163,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "Для отримання UUID продукту слід пройти розпізнавання."
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "Отримання апаратного серійного номера"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "Для отримання апаратного серійного номера слід пройти розпізнавання."
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "Отримання опису системи"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "Для отримання опису системи слід пройти розпізнавання."
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "Імпортування образу контейнера або віртуальної машини"
@@ -942,23 +958,23 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "Для перезапуску «$(unit)» слід пройти розпізнавання."
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr ""
 "Для надсилання сигналу UNIX до процесів «$(unit)» слід пройти розпізнавання."
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr ""
 "Для скидання «пошкодженого» стану з «$(unit)» слід пройти розпізнавання."
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "Для визначення властивостей на «$(unit)» слід пройти розпізнавання."
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
@@ -966,7 +982,7 @@
 "Для вилучення файлів і каталогів, які пов'язано із «$(unit)», слід пройти "
 "розпізнавання."
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index f568693..8751aa7 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1,18 +1,16 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 #
 # Simplified Chinese translation for systemd.
-#
 # Frank Hill <hxf.prc@gmail.com>, 2014.
 # Boyuan Yang <073plan@gmail.com>, 2015.
 # Jeff Bai <jeffbai@aosc.xyz>, 2016.
-# Charles Lee <lchopn@gmail.com>, 2020, 2021.
+# Charles Lee <lchopn@gmail.com>, 2020, 2021, 2022.
 # Whired Planck <fungdaat31@outlook.com>, 2020.
 msgid ""
 msgstr ""
-"Project-Id-Version: systemd\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2021-03-01 09:40+0000\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2022-10-31 11:19+0000\n"
 "Last-Translator: Charles Lee <lchopn@gmail.com>\n"
 "Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/"
 "projects/systemd/master/zh_CN/>\n"
@@ -21,7 +19,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.4.2\n"
+"X-Generator: Weblate 4.14.1\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -156,6 +154,22 @@
 msgid "Authentication is required to get product UUID."
 msgstr "获取产品 UUID 需要认证。"
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr "获取硬件序列号"
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+msgid "Authentication is required to get hardware serial number."
+msgstr "获取硬件序列号需要认证。"
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+msgid "Get system description"
+msgstr "获得系统描述"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+msgid "Authentication is required to get system description."
+msgstr "获得系统描述需要认证。"
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "导入虚拟机或容器镜像"
@@ -843,30 +857,28 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "重新启动“$(unit)”需要认证。"
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "发送 UNIX 信号给 '$(unit)' 进程需要认证。"
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr "重置“$(unit)”的失败（\"failed\"）状态需要认证。"
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "设置“$(unit)”的属性需要认证。"
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr "删除与 '$(unit)' 关联的文件和目录需要认证。"
 
-#: src/core/dbus-unit.c:757
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
 msgstr "冻结或解冻 '$(unit)' 单元进程需要认证。"
 
-#~ msgid "Authentication is required to kill '$(unit)'."
-#~ msgstr "杀死“$(unit)”需要认证。"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index f47d949..6fb99f4 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -5,10 +5,9 @@
 # pan93412 <pan93412@gmail.com>, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-08 17:48+0100\n"
-"PO-Revision-Date: 2019-10-23 19:19+0800\n"
+"POT-Creation-Date: 2022-10-20 10:35+0200\n"
+"PO-Revision-Date: 2021-08-10 11:36+0800\n"
 "Last-Translator: pan93412 <pan93412@gmail.com>\n"
 "Language-Team: Chinese <chinese-l10n@googlegroups.com>\n"
 "Language: zh_TW\n"
@@ -16,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 19.08.2\n"
+"X-Generator: Poedit 2.2.1\n"
 
 #: src/core/org.freedesktop.systemd1.policy.in:22
 msgid "Send passphrase back to system"
@@ -63,67 +62,53 @@
 
 #: src/home/org.freedesktop.home1.policy:13
 msgid "Create a home area"
-msgstr ""
+msgstr "創建一個家區域"
 
 #: src/home/org.freedesktop.home1.policy:14
-#, fuzzy
-#| msgid "Authentication is required to set NTP servers."
 msgid "Authentication is required to create a user's home area."
-msgstr "設定 NTP 伺服器需要身份驗證。"
+msgstr "創建用戶家區域需要身份驗證。"
 
 #: src/home/org.freedesktop.home1.policy:23
 msgid "Remove a home area"
-msgstr ""
+msgstr "移除一個家區域"
 
 #: src/home/org.freedesktop.home1.policy:24
-#, fuzzy
-#| msgid "Authentication is required to set NTP servers."
 msgid "Authentication is required to remove a user's home area."
-msgstr "設定 NTP 伺服器需要身份驗證。"
+msgstr "移除用戶家區域需要身份驗證。"
 
 #: src/home/org.freedesktop.home1.policy:33
 msgid "Check credentials of a home area"
-msgstr ""
+msgstr "檢查家區域憑證"
 
 #: src/home/org.freedesktop.home1.policy:34
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to attach or detach a portable service image."
 msgid ""
 "Authentication is required to check credentials against a user's home area."
-msgstr "連結或取消連結可攜式服務映像需要身份驗證。"
+msgstr "根據用戶家區域檢查憑證需要認證。"
 
 #: src/home/org.freedesktop.home1.policy:43
 msgid "Update a home area"
-msgstr ""
+msgstr "更新一個家區域"
 
 #: src/home/org.freedesktop.home1.policy:44
-#, fuzzy
-#| msgid "Authentication is required to attach a device to a seat."
 msgid "Authentication is required to update a user's home area."
-msgstr "將設備連接到座位需要驗證。"
+msgstr "更新用戶家區域需要認證。"
 
 #: src/home/org.freedesktop.home1.policy:53
 msgid "Resize a home area"
-msgstr ""
+msgstr "調整家區域大小"
 
 #: src/home/org.freedesktop.home1.policy:54
-#, fuzzy
-#| msgid "Authentication is required to set NTP servers."
 msgid "Authentication is required to resize a user's home area."
-msgstr "設定 NTP 伺服器需要身份驗證。"
+msgstr "調整家區域大小需要認證。"
 
 #: src/home/org.freedesktop.home1.policy:63
 msgid "Change password of a home area"
-msgstr ""
+msgstr "更改家區域的密碼"
 
 #: src/home/org.freedesktop.home1.policy:64
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to manage active sessions, users and seats."
 msgid ""
 "Authentication is required to change the password of a user's home area."
-msgstr "管理活躍的工作階段、使用者與座位需要驗證。"
+msgstr "更改家區域密碼需要認證。"
 
 #: src/hostname/org.freedesktop.hostname1.policy:20
 msgid "Set hostname"
@@ -159,6 +144,25 @@
 msgid "Authentication is required to get product UUID."
 msgstr "取得產品 UUID 需要身份驗證。"
 
+#: src/hostname/org.freedesktop.hostname1.policy:61
+msgid "Get hardware serial number"
+msgstr ""
+
+#: src/hostname/org.freedesktop.hostname1.policy:62
+#, fuzzy
+msgid "Authentication is required to get hardware serial number."
+msgstr "設定系統時間需要驗證。"
+
+#: src/hostname/org.freedesktop.hostname1.policy:71
+#, fuzzy
+msgid "Get system description"
+msgstr "設定系統時區"
+
+#: src/hostname/org.freedesktop.hostname1.policy:72
+#, fuzzy
+msgid "Authentication is required to get system description."
+msgstr "設定系統時區需要驗證。"
+
 #: src/import/org.freedesktop.import1.policy:22
 msgid "Import a VM or container image"
 msgstr "匯入虛擬機器或容器映像"
@@ -283,20 +287,14 @@
 msgstr "要讓應用程式阻止系統處理上蓋開關需要驗證。"
 
 #: src/login/org.freedesktop.login1.policy:117
-#, fuzzy
-#| msgid "Allow applications to inhibit system handling of the power key"
 msgid "Allow applications to inhibit system handling of the reboot key"
-msgstr "允許應用程式阻止系統處理電源鍵"
+msgstr "允許應用程式阻止系統處理重啓鍵"
 
 #: src/login/org.freedesktop.login1.policy:118
-#, fuzzy
-#| msgid ""
-#| "Authentication is required for an application to inhibit system handling "
-#| "of the power key."
 msgid ""
 "Authentication is required for an application to inhibit system handling of "
 "the reboot key."
-msgstr "要讓應用程式阻止系統處理電源鍵需要驗證。"
+msgstr "要讓應用程式阻止系統處理重啓鍵需要驗證。"
 
 #: src/login/org.freedesktop.login1.policy:128
 msgid "Allow non-logged-in user to run programs"
@@ -409,14 +407,10 @@
 msgstr "在應用程式阻止時停止系統"
 
 #: src/login/org.freedesktop.login1.policy:258
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to hibernate the system while an application "
-#| "is inhibiting this."
 msgid ""
 "Authentication is required to halt the system while an application is "
 "inhibiting this."
-msgstr "當應用程式阻止系統冬眠時將系統冬眠需要驗證。"
+msgstr "當應用程式阻止停止系統時需要驗證。"
 
 #: src/login/org.freedesktop.login1.policy:268
 msgid "Suspend the system"
@@ -538,13 +532,11 @@
 
 #: src/login/org.freedesktop.login1.policy:406
 msgid "Change Session"
-msgstr ""
+msgstr "更改會話"
 
 #: src/login/org.freedesktop.login1.policy:407
-#, fuzzy
-#| msgid "Authentication is required to halt the system."
 msgid "Authentication is required to change the virtual terminal."
-msgstr "停止系統需要身份驗證。"
+msgstr "更改虛擬終端需要身份驗證。"
 
 #: src/machine/org.freedesktop.machine1.policy:22
 msgid "Log into a local container"
@@ -720,13 +712,11 @@
 
 #: src/network/org.freedesktop.network1.policy:143
 msgid "DHCP server sends force renew message"
-msgstr ""
+msgstr "DHCP 服務器發送強制更新訊息"
 
 #: src/network/org.freedesktop.network1.policy:144
-#, fuzzy
-#| msgid "Authentication is required to set a wall message"
 msgid "Authentication is required to send force renew message."
-msgstr "設定 wall 訊息需要身份驗證"
+msgstr "發送強制更新訊息需要身份驗證。"
 
 #: src/network/org.freedesktop.network1.policy:154
 msgid "Renew dynamic addresses"
@@ -737,26 +727,20 @@
 msgstr "重新產生動態位址需要身份驗證。"
 
 #: src/network/org.freedesktop.network1.policy:165
-#, fuzzy
-#| msgid "Revert NTP settings"
 msgid "Reload network settings"
-msgstr "還原 NTP 設定"
+msgstr "重新加載網絡設定"
 
 #: src/network/org.freedesktop.network1.policy:166
-#, fuzzy
-#| msgid "Authentication is required to reset NTP settings."
 msgid "Authentication is required to reload network settings."
-msgstr "重設 NTP 設定需要身份驗證。"
+msgstr "重新加載網絡設定需要身份驗證。"
 
 #: src/network/org.freedesktop.network1.policy:176
 msgid "Reconfigure network interface"
-msgstr ""
+msgstr "重新配置網絡接口"
 
 #: src/network/org.freedesktop.network1.policy:177
-#, fuzzy
-#| msgid "Authentication is required to reboot the system."
 msgid "Authentication is required to reconfigure network interface."
-msgstr "重新啟動系統需要驗證。"
+msgstr "重新配置網絡接口需要驗證。"
 
 #: src/portable/org.freedesktop.portable1.policy:13
 msgid "Inspect a portable service image"
@@ -860,34 +844,30 @@
 msgid "Authentication is required to restart '$(unit)'."
 msgstr "重新啟動 '$(unit)' 需要驗證。"
 
-#: src/core/dbus-unit.c:535
+#: src/core/dbus-unit.c:546
 msgid ""
 "Authentication is required to send a UNIX signal to the processes of "
 "'$(unit)'."
 msgstr "傳送 UNIX 信號至「$(unit)」的程序需要身份驗證。"
 
-#: src/core/dbus-unit.c:566
+#: src/core/dbus-unit.c:576
 msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
 msgstr "重置 '$(unit)' 的「失敗」狀態需要驗證。"
 
-#: src/core/dbus-unit.c:599
+#: src/core/dbus-unit.c:608
 msgid "Authentication is required to set properties on '$(unit)'."
 msgstr "在 '$(unit)' 上設定屬性需要驗證。"
 
-#: src/core/dbus-unit.c:708
+#: src/core/dbus-unit.c:714
 msgid ""
 "Authentication is required to delete files and directories associated with "
 "'$(unit)'."
 msgstr "刪除與 '$(unit)' 相關的檔案及目錄需要身份驗證。"
 
-#: src/core/dbus-unit.c:757
-#, fuzzy
-#| msgid ""
-#| "Authentication is required to send a UNIX signal to the processes of "
-#| "'$(unit)'."
+#: src/core/dbus-unit.c:762
 msgid ""
 "Authentication is required to freeze or thaw the processes of '$(unit)' unit."
-msgstr "傳送 UNIX 信號至「$(unit)」的程序需要身份驗證。"
+msgstr "凍結或解凍「$(unit)」的程序需要身份驗證。"
 
 #~ msgid ""
 #~ "Authentication is required to halt the system while an application asked "
diff --git a/presets/90-systemd.preset b/presets/90-systemd.preset
index 58404d3..2b8db9d 100644
--- a/presets/90-systemd.preset
+++ b/presets/90-systemd.preset
@@ -23,6 +23,8 @@
 enable systemd-homed.service
 enable systemd-userdbd.socket
 enable systemd-pstore.service
+enable systemd-boot-update.service
+enable systemd-journald-audit.socket
 
 disable console-getty.service
 disable debug-shell.service
diff --git a/rules.d/50-udev-default.rules.in b/rules.d/50-udev-default.rules.in
index 18a3cf4..843bdaf 100644
--- a/rules.d/50-udev-default.rules.in
+++ b/rules.d/50-udev-default.rules.in
@@ -4,6 +4,10 @@
 ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
 ACTION=="remove", GOTO="default_end"
 
+# The md driver increments diskseq *after* emitting 'change' uevent.
+# Drop the line below if it is fixed on the kernel side.
+SUBSYSTEM=="block", KERNEL=="md*", ENV{ID_IGNORE_DISKSEQ}="1"
+
 SUBSYSTEM=="virtio-ports", KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}"
 
 # select "system RTC" or just use the first one
@@ -40,6 +44,7 @@
 SUBSYSTEM=="kfd", GROUP="render", MODE="{{GROUP_RENDER_MODE}}"
 
 SUBSYSTEM=="misc", KERNEL=="sgx_enclave", GROUP="sgx", MODE="0660"
+SUBSYSTEM=="misc", KERNEL=="sgx_vepc", GROUP="sgx", MODE="0660"
 
 # When using static_node= with non-default permissions, also update
 # tmpfiles.d/static-nodes-permissions.conf.in to keep permissions synchronized.
@@ -104,7 +109,14 @@
 
 SUBSYSTEM=="ptp", ATTR{clock_name}=="hyperv", SYMLINK += "ptp_hyperv"
 
-SUBSYSTEM=="dmi", ENV{ID_SYSFS_ATTRIBUTE_MODEL}=="", ENV{ID_VENDOR}="$attr{sys_vendor}", ENV{ID_MODEL}="$attr{product_name}"
-SUBSYSTEM=="dmi", ENV{ID_SYSFS_ATTRIBUTE_MODEL}=="product_version", ENV{ID_VENDOR}="$attr{sys_vendor}", ENV{ID_MODEL}="$attr{product_version}"
+SUBSYSTEM!="dmi", GOTO="dmi_end"
+ENV{ID_SYS_VENDOR_IS_RUBBISH}!="1", ENV{ID_VENDOR}="$attr{sys_vendor}"
+ENV{ID_SYSFS_ATTRIBUTE_MODEL}=="", ENV{ID_PRODUCT_NAME_IS_RUBBISH}!="1", ENV{ID_MODEL}="$attr{product_name}"
+ENV{ID_SYSFS_ATTRIBUTE_MODEL}=="product_name", ENV{ID_MODEL}="$attr{product_name}"
+ENV{ID_SYSFS_ATTRIBUTE_MODEL}=="product_version", ENV{ID_MODEL}="$attr{product_version}"
+# fallback to board information
+ENV{ID_VENDOR}=="", ENV{ID_VENDOR}="$attr{board_vendor}"
+ENV{ID_MODEL}=="", ENV{ID_MODEL}="$attr{board_name}"
+LABEL="dmi_end"
 
 LABEL="default_end"
diff --git a/rules.d/60-autosuspend.rules b/rules.d/60-autosuspend.rules
index 332d052..ce31a92 100644
--- a/rules.d/60-autosuspend.rules
+++ b/rules.d/60-autosuspend.rules
@@ -15,4 +15,8 @@
 ENV{ID_PERSIST}=="0", TEST=="power/persist", \
   ATTR{power/persist}="0"
 
+# Set up an autosuspend delay if hwdb say so
+ENV{ID_AUTOSUSPEND_DELAY_MS}!="", TEST=="power/control", \
+  ATTR{power/autosuspend_delay_ms}="$env{ID_AUTOSUSPEND_DELAY_MS}"
+
 LABEL="autosuspend_end"
diff --git a/rules.d/60-evdev.rules b/rules.d/60-evdev.rules
index 055a62a..c97cdec 100644
--- a/rules.d/60-evdev.rules
+++ b/rules.d/60-evdev.rules
@@ -3,23 +3,28 @@
 ACTION=="remove", GOTO="evdev_end"
 KERNEL!="event*", GOTO="evdev_end"
 
-# skip later rules when we find something for this input device
+# Execute the match patterns below, from least-to-most specific.
+
+# Device matching the modalias string (bustype, vendor, product, version, other properties)
 IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=evdev:", \
-  IMPORT{builtin}="keyboard", GOTO="evdev_end"
+  ENV{.HAVE_HWDB_PROPERTIES}="1"
 
 # AT keyboard matching by the machine's DMI data
 DRIVERS=="atkbd", \
   IMPORT{builtin}="hwdb 'evdev:atkbd:$attr{[dmi/id]modalias}'", \
-  IMPORT{builtin}="keyboard", GOTO="evdev_end"
+  ENV{.HAVE_HWDB_PROPERTIES}="1"
 
-# device matching the input device name + properties + the machine's DMI data
-KERNELS=="input*", \
-  IMPORT{builtin}="hwdb 'evdev:name:$attr{name}:phys:$attr{phys}:ev:$attr{capabilities/ev}:$attr{[dmi/id]modalias}'", \
-  IMPORT{builtin}="keyboard", GOTO="evdev_end"
-
-# device matching the input device name and the machine's DMI data
+# Device matching the input device name and the machine's DMI data
 KERNELS=="input*", \
   IMPORT{builtin}="hwdb 'evdev:name:$attr{name}:$attr{[dmi/id]modalias}'", \
-  IMPORT{builtin}="keyboard", GOTO="evdev_end"
+  ENV{.HAVE_HWDB_PROPERTIES}="1"
+
+# Device matching the input device name + properties + the machine's DMI data
+KERNELS=="input*", \
+  IMPORT{builtin}="hwdb 'evdev:name:$attr{name}:phys:$attr{phys}:ev:$attr{capabilities/ev}:$attr{[dmi/id]modalias}'", \
+  ENV{.HAVE_HWDB_PROPERTIES}="1"
+
+ENV{.HAVE_HWDB_PROPERTIES}=="1", \
+  IMPORT{builtin}="keyboard"
 
 LABEL="evdev_end"
diff --git a/rules.d/60-infiniband.rules b/rules.d/60-infiniband.rules
new file mode 100644
index 0000000..da3eea6
--- /dev/null
+++ b/rules.d/60-infiniband.rules
@@ -0,0 +1,12 @@
+# do not edit this file, it will be overwritten on update
+
+ACTION=="remove", GOTO="infiniband_end"
+SUBSYSTEM!="infiniband_verbs", GOTO="infiniband_end"
+KERNEL!="uverbs*", GOTO="infiniband_end"
+
+IMPORT{builtin}="path_id"
+
+ENV{ID_PATH}=="?*", SYMLINK+="infiniband/by-path/$env{ID_PATH}"
+ATTR{ibdev}=="?*", SYMLINK+="infiniband/by-ibdev/uverbs-$attr{ibdev}"
+
+LABEL="infiniband_end"
diff --git a/rules.d/60-persistent-storage-tape.rules b/rules.d/60-persistent-storage-tape.rules
index 0136140..607e51a 100644
--- a/rules.d/60-persistent-storage-tape.rules
+++ b/rules.d/60-persistent-storage-tape.rules
@@ -7,7 +7,7 @@
 
 # type 8 devices are "Medium Changers"
 SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \
-  SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}"
+  SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL} tape/by-id/scsi-$env{ID_SERIAL}-changer"
 
 # iSCSI devices from the same host have all the same ID_SERIAL,
 # but additionally a property named ID_SCSI_SERIAL.
@@ -23,7 +23,7 @@
 KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
 KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{.BSG_DEV}="$root/bsg/$id"
 KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --whitelisted --export --device=$env{.BSG_DEV}", ENV{ID_BUS}="scsi"
-KERNEL=="st*[0-9]",  ENV{ID_SERIAL}=="?*",      SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+KERNEL=="st*[0-9]",  ENV{ID_SERIAL}=="?*",      SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}", OPTIONS+="link_priority=10"
 KERNEL=="st*[0-9]",  ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}"
 KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*",      SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst"
 KERNEL=="nst*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}-nst"
diff --git a/rules.d/60-persistent-storage.rules b/rules.d/60-persistent-storage.rules
index 6ac17f2..ad5cca0 100644
--- a/rules.d/60-persistent-storage.rules
+++ b/rules.d/60-persistent-storage.rules
@@ -37,14 +37,22 @@
 KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{wwid}=="?*", ENV{ID_WWN}="$attr{wwid}"
 KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{model}=="?*", ENV{ID_MODEL}="$attr{model}"
 KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{firmware_rev}=="?*", ENV{ID_REVISION}="$attr{firmware_rev}"
+KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{nsid}=="?*", ENV{ID_NSID}="$attr{nsid}"
+# obsolete symlink that might get overridden on adding a new nvme controller, kept for backward compatibility
 KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \
   OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}"
+KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_NSID}=="?*",\
+  OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}_$env{ID_NSID}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}"
 
 KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{serial}=="?*", ENV{ID_SERIAL_SHORT}="$attr{serial}"
 KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{model}=="?*", ENV{ID_MODEL}="$attr{model}"
 KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{firmware_rev}=="?*", ENV{ID_REVISION}="$attr{firmware_rev}"
+KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{nsid}=="?*", ENV{ID_NSID}="$attr{nsid}"
+# obsolete symlink that might get overridden on adding a new nvme controller, kept for backward compatibility
 KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \
   OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}-part%n"
+KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*",  ENV{ID_NSID}=="?*",\
+  OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}_$env{ID_NSID}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}-part%n"
 
 # virtio-blk
 KERNEL=="vd*[!0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/virtio-$env{ID_SERIAL}"
@@ -59,14 +67,20 @@
 # Run ata_id on non-removable USB Mass Storage (SATA/PATA disks in enclosures)
 KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", ATTR{removable}=="0", SUBSYSTEMS=="usb", IMPORT{program}="ata_id --export $devnode"
 
-# Fall back usb_id for USB devices
-KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
+# Also import properties from usb_id for USB devices
+KERNEL=="sd*[!0-9]|sr*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
 
 # SCSI devices
 KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="scsi"
 KERNEL=="cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="cciss"
 KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
 KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
+# Previously, ata_id in the above might not be able to retrieve attributes correctly,
+# and properties from usb_id were used as a fallback. See issue #24921 and PR #24923.
+# To keep backward compatibility, still we need to create symlinks based on USB serial.
+# See issue #25179.
+KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_USB_SERIAL}=="?*", SYMLINK+="disk/by-id/usb-$env{ID_USB_SERIAL}"
+KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_USB_SERIAL}=="?*", SYMLINK+="disk/by-id/usb-$env{ID_USB_SERIAL}-part%n"
 
 # PMEM devices
 KERNEL=="pmem*", ENV{DEVTYPE}=="disk", ATTRS{uuid}=="?*", SYMLINK+="disk/by-id/pmem-$attr{uuid}"
@@ -88,6 +102,7 @@
 
 # by-path
 ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id"
+ENV{DEVTYPE}=="disk", SUBSYSTEMS=="nvme-subsystem", IMPORT{builtin}="path_id"
 KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-boot%n"
 KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}"
 ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n"
@@ -99,6 +114,9 @@
 KERNEL=="vd*[!0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}"
 KERNEL=="vd*[0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}-part%n"
 
+# allow admin to disable probing the filesystem for slow devices like floppy disk drives
+ENV{UDEV_DISABLE_PERSISTENT_STORAGE_BLKID_FLAG}=="1", GOTO="persistent_storage_blkid_probe_end"
+
 # probe filesystem metadata of optical drives which have a media inserted
 KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \
   IMPORT{builtin}="blkid --hint=session_offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}"
@@ -109,6 +127,8 @@
 # probe filesystem metadata of disks
 KERNEL!="sr*|mmcblk[0-9]boot[0-9]", IMPORT{builtin}="blkid"
 
+LABEL="persistent_storage_blkid_probe_end"
+
 # by-label/by-uuid links (filesystem metadata)
 ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
 ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
@@ -121,4 +141,10 @@
 ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}"
 ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}"
 
+# by-diskseq link (if an app is told to open a path like this, they may parse
+# the diskseq number from the path, then issue BLKGETDISKSEQ to verify they really got
+# the right device, to access specific disks in a race-free fashion)
+ENV{DISKSEQ}=="?*", ENV{DEVTYPE}!="partition", ENV{ID_IGNORE_DISKSEQ}!="1", SYMLINK+="disk/by-diskseq/$env{DISKSEQ}"
+ENV{DISKSEQ}=="?*", ENV{DEVTYPE}=="partition", ENV{ID_IGNORE_DISKSEQ}!="1", SYMLINK+="disk/by-diskseq/$env{DISKSEQ}-part%n"
+
 LABEL="persistent_storage_end"
diff --git a/rules.d/60-sensor.rules b/rules.d/60-sensor.rules
index 7b9b7d2..09180b4 100644
--- a/rules.d/60-sensor.rules
+++ b/rules.d/60-sensor.rules
@@ -2,6 +2,22 @@
 
 ACTION=="remove", GOTO="sensor_end"
 
+# device matching the sensor's label, name and the machine's DMI data for IIO devices
+SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c|platform", ATTR{label}!="", \
+  IMPORT{builtin}="hwdb 'sensor:$attr{label}:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \
+  GOTO="sensor_end"
+
+# Before Linux v6.0, cros-ec-accel used a non-standard 'location' sysfs file
+SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="platform", \
+  ATTR{name}=="cros-ec-accel|cros-ec-accel-legacy", ATTR{location}=="base", \
+  IMPORT{builtin}="hwdb 'sensor:accel-base:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \
+  GOTO="sensor_end"
+
+SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="platform", \
+  ATTR{name}=="cros-ec-accel|cros-ec-accel-legacy", ATTR{location}=="lid", \
+  IMPORT{builtin}="hwdb 'sensor:accel-display:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \
+  GOTO="sensor_end"
+
 # device matching the sensor's name and the machine's DMI data for IIO devices
 SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c|platform", \
   IMPORT{builtin}="hwdb 'sensor:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \
diff --git a/rules.d/60-serial.rules b/rules.d/60-serial.rules
index f303e27..a0e6632 100644
--- a/rules.d/60-serial.rules
+++ b/rules.d/60-serial.rules
@@ -3,9 +3,10 @@
 ACTION=="remove", GOTO="serial_end"
 SUBSYSTEM!="tty", GOTO="serial_end"
 
-SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}"
-SUBSYSTEMS=="pci", IMPORT{builtin}="hwdb --subsystem=pci"
 SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
+SUBSYSTEMS=="pci", ENV{ID_BUS}=="", ENV{ID_BUS}="pci", \
+  ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}", \
+  IMPORT{builtin}="hwdb --subsystem=pci"
 
 # /dev/serial/by-path/, /dev/serial/by-id/ for USB devices
 KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="serial_end"
@@ -16,9 +17,8 @@
 ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="", SYMLINK+="serial/by-path/$env{ID_PATH}"
 ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-path/$env{ID_PATH}-port$env{.ID_PORT}"
 
-IMPORT{builtin}="usb_id"
+ENV{ID_BUS}=="", GOTO="serial_end"
 ENV{ID_SERIAL}=="", GOTO="serial_end"
-SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACE_NUM}="$attr{bInterfaceNumber}"
 ENV{ID_USB_INTERFACE_NUM}=="", GOTO="serial_end"
 ENV{.ID_PORT}=="", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}"
 ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}-port$env{.ID_PORT}"
diff --git a/src/login/70-power-switch.rules b/rules.d/70-power-switch.rules
similarity index 100%
rename from src/login/70-power-switch.rules
rename to rules.d/70-power-switch.rules
diff --git a/rules.d/70-uaccess.rules.in b/rules.d/70-uaccess.rules.in
new file mode 100644
index 0000000..b82ce04
--- /dev/null
+++ b/rules.d/70-uaccess.rules.in
@@ -0,0 +1,100 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+ACTION=="remove", GOTO="uaccess_end"
+ENV{MAJOR}=="", GOTO="uaccess_end"
+
+# PTP/MTP protocol devices, cameras, portable media players
+SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:060101:*", TAG+="uaccess"
+
+# Digicams with proprietary protocol
+ENV{ID_GPHOTO2}=="?*", TAG+="uaccess"
+
+# SCSI and USB scanners
+ENV{libsane_matched}=="yes", TAG+="uaccess"
+
+# HPLIP devices (necessary for ink level check and HP tool maintenance)
+ENV{ID_HPLIP}=="1", TAG+="uaccess"
+
+# optical drives
+SUBSYSTEM=="block", ENV{ID_CDROM}=="1", TAG+="uaccess"
+SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", TAG+="uaccess"
+
+# Sound devices
+SUBSYSTEM=="sound", TAG+="uaccess", \
+  OPTIONS+="static_node=snd/timer", OPTIONS+="static_node=snd/seq"
+
+# Webcams, frame grabber, TV cards
+SUBSYSTEM=="video4linux", TAG+="uaccess"
+SUBSYSTEM=="dvb", TAG+="uaccess"
+SUBSYSTEM=="media", TAG+="uaccess"
+
+# industrial cameras, some webcams, camcorders, set-top boxes, TV sets, audio devices, and more
+SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_MIDI}=="1", TAG+="uaccess"
+SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_AUDIO}=="1", TAG+="uaccess"
+SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_VIDEO}=="1", TAG+="uaccess"
+
+# DRI video devices
+SUBSYSTEM=="drm", KERNEL=="card*", TAG+="uaccess"
+{% if GROUP_RENDER_UACCESS %}
+# DRI render nodes
+SUBSYSTEM=="drm", KERNEL=="renderD*", TAG+="uaccess"
+{% endif %}
+{% if DEV_KVM_UACCESS %}
+# KVM
+SUBSYSTEM=="misc", KERNEL=="kvm", TAG+="uaccess"
+{% endif %}
+
+# smart-card readers
+ENV{ID_SMARTCARD_READER}=="?*", TAG+="uaccess"
+
+# (USB) authentication devices
+ENV{ID_SECURITY_TOKEN}=="?*", TAG+="uaccess"
+
+# PDA devices
+ENV{ID_PDA}=="?*", TAG+="uaccess"
+
+# Programmable remote control
+ENV{ID_REMOTE_CONTROL}=="1", TAG+="uaccess"
+
+# joysticks
+SUBSYSTEM=="input", ENV{ID_INPUT_JOYSTICK}=="?*", TAG+="uaccess"
+
+# color measurement devices
+ENV{COLOR_MEASUREMENT_DEVICE}=="?*", TAG+="uaccess"
+
+# DDC/CI device, usually high-end monitors such as the DreamColor
+ENV{DDC_DEVICE}=="?*", TAG+="uaccess"
+
+# media player raw devices (for user-mode drivers, Android SDK, etc.)
+SUBSYSTEM=="usb", ENV{ID_MEDIA_PLAYER}=="?*", TAG+="uaccess"
+
+# software-defined radio communication devices
+ENV{ID_SOFTWARE_RADIO}=="?*", TAG+="uaccess"
+
+# 3D printers, CNC machines, laser cutters, 3D scanners, etc.
+ENV{ID_MAKER_TOOL}=="?*", TAG+="uaccess"
+
+# Protocol analyzers
+ENV{ID_SIGNAL_ANALYZER}=="?*", ENV{DEVTYPE}=="usb_device", TAG+="uaccess"
+ENV{ID_SIGNAL_ANALYZER}=="?*", KERNEL=="ttyACM[0-9]*", TAG+="uaccess"
+
+# rfkill / radio killswitches
+KERNEL=="rfkill", SUBSYSTEM=="misc", TAG+="uaccess"
+
+# AV production controllers
+# Most of these devices use HID for the knobs, faders, buttons, encoders, and jog wheels.
+SUBSYSTEM=="hidraw", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
+
+# Some devices use vendor defined protocols on USB Bulk endpoints for controllers.
+# Other devices transfer graphics to screens on the device through USB Bulk endpoints.
+# This also allows accessing HID devices with the libusb backend of hidapi.
+SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
+
+LABEL="uaccess_end"
diff --git a/src/login/71-seat.rules.in b/rules.d/71-seat.rules.in
similarity index 100%
rename from src/login/71-seat.rules.in
rename to rules.d/71-seat.rules.in
diff --git a/src/login/73-seat-late.rules.in b/rules.d/73-seat-late.rules.in
similarity index 100%
rename from src/login/73-seat-late.rules.in
rename to rules.d/73-seat-late.rules.in
diff --git a/rules.d/80-drivers.rules b/rules.d/80-drivers.rules
index 57d69b8..4bf942f 100644
--- a/rules.d/80-drivers.rules
+++ b/rules.d/80-drivers.rules
@@ -2,7 +2,7 @@
 
 ACTION!="add", GOTO="drivers_end"
 
-ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load '$env{MODALIAS}'"
+ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load"
 SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}+="kmod load tifm_sd"
 SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}+="kmod load tifm_ms"
 SUBSYSTEM=="memstick", RUN{builtin}+="kmod load ms_block mspro_block"
diff --git a/src/vconsole/90-vconsole.rules.in b/rules.d/90-vconsole.rules.in
similarity index 100%
rename from src/vconsole/90-vconsole.rules.in
rename to rules.d/90-vconsole.rules.in
diff --git a/rules.d/99-systemd.rules.in b/rules.d/99-systemd.rules.in
index 25b8a59..3dbba1f 100644
--- a/rules.d/99-systemd.rules.in
+++ b/rules.d/99-systemd.rules.in
@@ -15,12 +15,18 @@
 SUBSYSTEM=="ubi", TAG+="systemd"
 
 SUBSYSTEM=="block", TAG+="systemd"
+
+# We can't make any conclusions about suspended DM devices so let's just import previous SYSTEMD_READY state and skip other rules
+SUBSYSTEM=="block", ENV{DM_SUSPENDED}=="1", IMPORT{db}="SYSTEMD_READY", GOTO="systemd_end"
 SUBSYSTEM=="block", ACTION=="add", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0"
 
 # Ignore encrypted devices with no identified superblock on it, since
 # we are probably still calling mke2fs or mkswap on it.
 SUBSYSTEM=="block", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0"
 
+# Explicitly set SYSTEMD_READY=1 for DM devices that don't have it set yet, so that we always have something to import above
+SUBSYSTEM=="block", ENV{DM_UUID}=="?*", ENV{SYSTEMD_READY}=="", ENV{SYSTEMD_READY}="1"
+
 # add symlink to GPT root disk
 SUBSYSTEM=="block", ENV{ID_PART_GPT_AUTO_ROOT}=="1", ENV{ID_FS_TYPE}!="crypto_LUKS", SYMLINK+="gpt-auto-root"
 SUBSYSTEM=="block", ENV{ID_PART_GPT_AUTO_ROOT}=="1", ENV{ID_FS_TYPE}=="crypto_LUKS", SYMLINK+="gpt-auto-root-luks"
diff --git a/rules.d/README b/rules.d/README
index 294d6ee..08edb4d 100644
--- a/rules.d/README
+++ b/rules.d/README
@@ -1,4 +1,4 @@
-Files in this directory contain configuration for systemd-udev.service, a
+Files in this directory contain configuration for systemd-udevd.service, a
 daemon that manages symlinks to device nodes, permissions of devices nodes,
 emits device events for userspace, and renames network interfaces.
 
diff --git a/rules.d/meson.build b/rules.d/meson.build
index 05c55a6..cba9dd4 100644
--- a/rules.d/meson.build
+++ b/rules.d/meson.build
@@ -4,56 +4,77 @@
         'README',
         install_dir : udevrulesdir)
 
-rules = files('''
-        60-autosuspend.rules
-        60-block.rules
-        60-cdrom_id.rules
-        60-drm.rules
-        60-evdev.rules
-        60-fido-id.rules
-        60-input-id.rules
-        60-persistent-alsa.rules
-        60-persistent-input.rules
-        60-persistent-storage.rules
-        60-persistent-storage-tape.rules
-        60-persistent-v4l.rules
-        60-sensor.rules
-        60-serial.rules
-        70-camera.rules
-        70-joystick.rules
-        70-mouse.rules
-        70-touchpad.rules
-        75-net-description.rules
-        75-probe_mtd.rules
-        78-sound-card.rules
-        80-net-setup-link.rules
-        81-net-dhcp.rules
-'''.split())
+rules = [
+        [files('60-autosuspend.rules',
+               '60-block.rules',
+               '60-cdrom_id.rules',
+               '60-drm.rules',
+               '60-evdev.rules',
+               '60-fido-id.rules',
+               '60-infiniband.rules',
+               '60-input-id.rules',
+               '60-persistent-alsa.rules',
+               '60-persistent-input.rules',
+               '60-persistent-storage.rules',
+               '60-persistent-storage-tape.rules',
+               '60-persistent-v4l.rules',
+               '60-sensor.rules',
+               '60-serial.rules',
+               '70-camera.rules',
+               '70-joystick.rules',
+               '70-mouse.rules',
+               '70-touchpad.rules',
+               '75-net-description.rules',
+               '75-probe_mtd.rules',
+               '78-sound-card.rules',
+               '80-net-setup-link.rules',
+               '81-net-dhcp.rules',
+              )],
 
-if conf.get('HAVE_KMOD') == 1
-        rules += files('80-drivers.rules')
-endif
+        [files('80-drivers.rules'),
+         conf.get('HAVE_KMOD') == 1],
 
-if dmi_arches.contains(host_machine.cpu_family())
-        rules += files('70-memory.rules')
-endif
+        [files('70-memory.rules'),
+         dmi_arches.contains(host_machine.cpu_family())],
 
-install_data(rules,
-             install_dir : udevrulesdir)
+        [files('70-power-switch.rules'),
+         enable_logind],
+]
 
-all_rules = rules
+all_rules = []
 
-rules_in = ['50-udev-default.rules',
-            '64-btrfs.rules',
-            '99-systemd.rules']
+foreach tuple : rules
+        if tuple.length() == 1 or tuple[1]
+                install_data(tuple[0],
+                             install_dir : udevrulesdir)
+                all_rules += tuple[0]
+        endif
+endforeach
 
-foreach file : rules_in
-        all_rules += custom_target(
-                file,
-                input : file + '.in',
-                output: file,
-                command : [meson_render_jinja2, config_h, '@INPUT@'],
-                capture : true,
-                install : true,
+rules_in = [
+        ['50-udev-default.rules'],
+        ['64-btrfs.rules'],
+        ['99-systemd.rules'],
+
+        ['70-uaccess.rules',   enable_logind and conf.get('HAVE_ACL') == 1],
+        ['71-seat.rules',      enable_logind],
+        ['73-seat-late.rules', enable_logind],
+
+        ['90-vconsole.rules',  conf.get('ENABLE_VCONSOLE') == 1],
+]
+
+foreach tuple : rules_in
+        want = tuple.length() == 1 or tuple[1]
+
+        rule = custom_target(
+                tuple[0],
+                input : tuple[0] + '.in',
+                output: tuple[0],
+                command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
+                install : want,
                 install_dir : udevrulesdir)
+
+        if want
+                all_rules += rule
+        endif
 endforeach
diff --git a/shell-completion/bash/bootctl b/shell-completion/bash/bootctl
index e61188f..8d8b507 100644
--- a/shell-completion/bash/bootctl
+++ b/shell-completion/bash/bootctl
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -31,8 +31,8 @@
     local i verb comps
     local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
     local -A OPTS=(
-        [STANDALONE]='-h --help -p --print-esp-path -x --print-boot-path --version --no-variables --no-pager --graceful'
-        [ARG]='--esp-path --boot-path'
+        [STANDALONE]='-h --help -p --print-esp-path -x --print-boot-path --version --no-variables --no-pager --graceful --dry-run'
+        [ARG]='--esp-path --boot-path --make-machine-id-directory --root --image --install-source'
     )
 
     if __contains_word "$prev" ${OPTS[ARG]}; then
@@ -45,6 +45,16 @@
                 fi
                 compopt -o filenames
                 ;;
+            --make-machine-id-directory)
+                comps="yes no auto"
+                ;;
+            --image|--root)
+                compopt -o nospace
+                comps=$( compgen -A file -- "$cur" )
+                ;;
+            --install-source)
+                comps="image host auto"
+                ;;
         esac
         COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
         return 0
@@ -57,8 +67,8 @@
 
     local -A VERBS=(
         # systemd-efi-options takes an argument, but it is free-form, so we cannot complete it
-        [STANDALONE]='help status install update remove is-installed random-seed systemd-efi-options list'
-        [BOOTENTRY]='set-default set-oneshot'
+        [STANDALONE]='help status install update remove is-installed random-seed systemd-efi-options list set-timeout set-timeout-oneshot cleanup'
+        [BOOTENTRY]='set-default set-oneshot unlink'
         [BOOLEAN]='reboot-to-firmware'
     )
 
diff --git a/shell-completion/bash/busctl b/shell-completion/bash/busctl
index 1cc41d4..cebd25a 100644
--- a/shell-completion/bash/busctl
+++ b/shell-completion/bash/busctl
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -25,8 +25,9 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager 2>/dev/null |
-        { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 __get_busnames() {
diff --git a/shell-completion/bash/coredumpctl b/shell-completion/bash/coredumpctl
index 54b8572..5416e9e 100644
--- a/shell-completion/bash/coredumpctl
+++ b/shell-completion/bash/coredumpctl
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -40,7 +40,7 @@
     local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
     local OPTS='-h --help --version --no-pager --no-legend -o --output -F --field -1
                 -r --reverse -S --since -U --until -D --directory -q --quiet --debugger
-                -A --debugger-arguments --json -n'
+                -A --debugger-arguments --json -n --all'
 
     local -A VERBS=(
         [LIST]='list info'
diff --git a/shell-completion/bash/homectl b/shell-completion/bash/homectl
index f738bfb..0a7bd0d 100644
--- a/shell-completion/bash/homectl
+++ b/shell-completion/bash/homectl
@@ -1,4 +1,4 @@
-# hostctl(1) completion                               -*- shell-script -*-
+# homectl(1) completion                               -*- shell-script -*-
 # SPDX-License-Identifier: LGPL-2.1-or-later
 #
 # This file is part of systemd.
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -93,9 +93,11 @@
                         --luks-volume-key-size
                         --luks-pbkdf-type
                         --luks-pbkdf-hash-algorithm
+                        --luks-pbkdf-force-iterations
                         --luks-pbkdf-time-cost
                         --luks-pbkdf-memory-cost
                         --luks-pbkdf-parallel-threads
+                        --luks-sector-size
                         --nosuid
                         --nodev
                         --noexec
diff --git a/shell-completion/bash/hostnamectl b/shell-completion/bash/hostnamectl
index 6f1909b..63edc08 100644
--- a/shell-completion/bash/hostnamectl
+++ b/shell-completion/bash/hostnamectl
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
diff --git a/shell-completion/bash/journalctl b/shell-completion/bash/journalctl
index 9a55c2d..067b053 100644
--- a/shell-completion/bash/journalctl
+++ b/shell-completion/bash/journalctl
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -27,8 +27,9 @@
 
 __get_machines() {
     local a b
-    (machinectl list-images --full --no-legend --no-pager; machinectl list --full --no-legend --no-pager; echo ".host") | \
-        { while read a b; do echo " $a"; done; } | sort -u;
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 __syslog_priorities=(emerg alert crit err warning notice info debug)
diff --git a/shell-completion/bash/kernel-install b/shell-completion/bash/kernel-install
index 35c44ea..4708777 100644
--- a/shell-completion/bash/kernel-install
+++ b/shell-completion/bash/kernel-install
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 _kernel_install() {
     local comps
diff --git a/shell-completion/bash/localectl b/shell-completion/bash/localectl
index 987ae34..b601343 100644
--- a/shell-completion/bash/localectl
+++ b/shell-completion/bash/localectl
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
diff --git a/shell-completion/bash/loginctl b/shell-completion/bash/loginctl
index 2d03fcc..b307e42 100644
--- a/shell-completion/bash/loginctl
+++ b/shell-completion/bash/loginctl
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -31,8 +31,9 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager 2>/dev/null |
-        { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 _loginctl () {
@@ -42,7 +43,7 @@
     local -A OPTS=(
         [STANDALONE]='--all -a --help -h --no-pager --version
                       --no-legend --no-ask-password -l --full --value'
-        [ARG]='--host -H --kill-who --property -p --signal -s -M --machine
+        [ARG]='--host -H --kill-whom --property -p --signal -s -M --machine
                       -n --lines -o --output -P'
     )
 
@@ -52,7 +53,7 @@
                 _signals
                 return
                 ;;
-            --kill-who)
+            --kill-whom|--kill-who)
                 comps='all leader'
                 ;;
             --host|-H)
diff --git a/shell-completion/bash/machinectl b/shell-completion/bash/machinectl
index 0227167..b28769b 100644
--- a/shell-completion/bash/machinectl
+++ b/shell-completion/bash/machinectl
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word() {
     local w word=$1; shift
@@ -25,8 +25,9 @@
 
 __get_machines() {
     local a b
-    (machinectl list-images --full --no-legend --no-pager; machinectl list --full --no-legend --no-pager; echo ".host") | \
-	{ while read a b; do echo " $a"; done; } | sort -u;
+    { machinectl list-images --full --no-legend --no-pager 2>/dev/null; machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 _machinectl() {
@@ -36,7 +37,7 @@
     local -A OPTS=(
         [STANDALONE]='--all -a -l --full --help -h --no-ask-password --no-legend --no-pager --version --value
                       --mkdir --read-only --force -q --quiet'
-        [ARG]='--host -H --kill-who -M --machine --property -p --signal -s --uid -E --setenv -n --lines
+        [ARG]='--host -H --kill-whom -M --machine --property -p --signal -s --uid -E --setenv -n --lines
                       -o --output --verify --format --max-addresses'
     )
 
@@ -64,7 +65,7 @@
                 _signals
                 return
                 ;;
-            --kill-who)
+            --kill-whom|--kill-who)
                 comps='all leader'
                 ;;
             --host|-H)
diff --git a/shell-completion/bash/meson.build b/shell-completion/bash/meson.build
index c26b413..0446be7 100644
--- a/shell-completion/bash/meson.build
+++ b/shell-completion/bash/meson.build
@@ -6,7 +6,7 @@
         if bash_completion.found()
                 bashcompletiondir = bash_completion.get_pkgconfig_variable('completionsdir')
         else
-                bashcompletiondir = join_paths(datadir, 'bash-completion/completions')
+                bashcompletiondir = datadir / 'bash-completion/completions'
         endif
 endif
 
@@ -14,8 +14,7 @@
         'systemctl',
         input : 'systemctl.in',
         output : 'systemctl',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : bashcompletiondir != 'no',
         install_dir : bashcompletiondir)
 
@@ -32,18 +31,22 @@
          ['systemd-path',        ''],
          ['systemd-run',         ''],
          ['udevadm',             ''],
-         ['kernel-install',      ''],
-         ['bootctl',             'ENABLE_EFI'],
+         ['bootctl',             'HAVE_GNU_EFI'],
          ['coredumpctl',         'ENABLE_COREDUMP'],
          ['homectl',             'ENABLE_HOMED'],
          ['hostnamectl',         'ENABLE_HOSTNAMED'],
+         ['kernel-install',      'ENABLE_KERNEL_INSTALL'],
          ['localectl',           'ENABLE_LOCALED'],
          ['loginctl',            'ENABLE_LOGIND'],
          ['machinectl',          'ENABLE_MACHINED'],
          ['networkctl',          'ENABLE_NETWORKD'],
+         ['oomctl',              'ENABLE_OOMD'],
          ['portablectl',         'ENABLE_PORTABLED'],
          ['resolvectl',          'ENABLE_RESOLVE'],
+         ['systemd-cryptenroll', 'HAVE_LIBCRYPTSETUP'],
+         ['systemd-dissect',     'HAVE_BLKID'],
          ['systemd-resolve',     'ENABLE_RESOLVE'],
+         ['systemd-sysext',      'ENABLE_SYSEXT'],
          ['timedatectl',         'ENABLE_TIMEDATED']]
 
 foreach item : items
diff --git a/shell-completion/bash/networkctl b/shell-completion/bash/networkctl
index 40ac13a..db59a9c 100644
--- a/shell-completion/bash/networkctl
+++ b/shell-completion/bash/networkctl
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
diff --git a/shell-completion/bash/oomctl b/shell-completion/bash/oomctl
new file mode 100644
index 0000000..dc45ba5
--- /dev/null
+++ b/shell-completion/bash/oomctl
@@ -0,0 +1,57 @@
+# oomctl(1) completion                               -*- shell-script -*-
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
+
+__contains_word () {
+    local w word=$1; shift
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+    done
+}
+
+_oomctl() {
+    local i verb comps
+    local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
+    local OPTS='-h --help --version --no-pager'
+
+    if [[ "$cur" = -* ]]; then
+        COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+        return 0
+    fi
+
+    local -A VERBS=(
+        [STANDALONE]='help dump'
+    )
+
+    for ((i=0; i < COMP_CWORD; i++)); do
+        if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then
+            verb=${COMP_WORDS[i]}
+            break
+        fi
+    done
+
+    if [[ -z ${verb-} ]]; then
+        comps=${VERBS[*]}
+    elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
+        comps=''
+    fi
+
+    COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+    return 0
+}
+
+complete -F _oomctl oomctl
diff --git a/shell-completion/bash/portablectl b/shell-completion/bash/portablectl
index a0ccc73..7178927 100644
--- a/shell-completion/bash/portablectl
+++ b/shell-completion/bash/portablectl
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -25,8 +25,9 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager 2>/dev/null |
-        { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 _portablectl() {
diff --git a/shell-completion/bash/resolvectl b/shell-completion/bash/resolvectl
index 646a197..21f8014 100644
--- a/shell-completion/bash/resolvectl
+++ b/shell-completion/bash/resolvectl
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -25,7 +25,7 @@
 
 __get_interfaces(){
     local name
-    for name in $(cd /sys/class/net && ls); do
+    for name in $(cd /sys/class/net && command ls); do
         [[ "$name" != "lo" ]] && echo "$name"
     done
 }
@@ -34,16 +34,18 @@
     local i comps verb name
     local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
     local -A OPTS=(
-        [STANDALONE]='-h --help --version --no-pager -4 -6
-                      --service-address=no --service-txt=no
-                      --cname=no --search=no --legend=no'
-        [ARG]='-i --interface -p --protocol -t --type -c --class --raw'
+        [STANDALONE]='-h --help --version -4 -6 --legend=no --cname=no
+                      --validate=no --synthesize=no --cache=no --zone=no
+                      --trust-anchor=no --network=no --service-address=no
+                      --service-txt=no --search=no --no-pager'
+        [ARG]='-t --type -c --class -i --interface -p --protocol --raw'
     )
     local -A VERBS=(
         [DOMAIN]='query service openpgp'
         [FAMILY]='tlsa'
         [STATUS]='status'
         [LINK]='revert dns domain nta'
+        [BOOLEAN]='default-route'
         [RESOLVE]='llmnr mdns'
         [DNSSEC]='dnssec'
         [DNSOVERTLS]='dnsovertls'
@@ -52,6 +54,7 @@
     )
     local -A ARGS=(
         [FAMILY]='tcp udp sctp'
+        [BOOLEAN]='yes no'
         [RESOLVE]='yes no resolve'
         [DNSSEC]='yes no allow-downgrade'
         [DNSOVERTLS]='yes no opportunistic'
@@ -113,7 +116,7 @@
             comps=""
         fi
 
-    elif __contains_word "$verb" ${VERBS[LINK]} ${VERBS[RESOLVE]} ${VERBS[DNSSEC]} ${VERBS[DNSOVERTLS]}; then
+    elif __contains_word "$verb" ${VERBS[LINK]} ${VERBS[BOOLEAN]} ${VERBS[RESOLVE]} ${VERBS[DNSSEC]} ${VERBS[DNSOVERTLS]}; then
         for ((i++; i < COMP_CWORD; i++)); do
             if __contains_word "${COMP_WORDS[i]}" $interfaces &&
                     ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
@@ -141,6 +144,22 @@
                 comps=''
             fi
 
+        elif __contains_word "$verb" ${VERBS[BOOLEAN]}; then
+            name=
+            for ((i++; i < COMP_CWORD; i++)); do
+                if __contains_word "${COMP_WORDS[i]}" ${ARGS[BOOLEAN]} &&
+                        ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
+                    name=${COMP_WORDS[i]}
+                    break;
+                fi
+            done
+
+            if [[ -z $name ]]; then
+                comps=${ARGS[BOOLEAN]}
+            else
+                comps=''
+            fi
+
         elif __contains_word "$verb" ${VERBS[DNSSEC]}; then
             name=
             for ((i++; i < COMP_CWORD; i++)); do
diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in
index b61f88b..3c64467 100644
--- a/shell-completion/bash/systemctl.in
+++ b/shell-completion/bash/systemctl.in
@@ -115,8 +115,9 @@
 
 __get_machines() {
     local a b
-    { machinectl list-images --full --no-legend --no-pager; machinectl list --full --no-legend --no-pager; } | \
-        { while read a b; do echo " $a"; done; }
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 _systemctl () {
@@ -127,8 +128,8 @@
         [STANDALONE]='--all -a --reverse --after --before --defaults --force -f --full -l --global
                              --help -h --no-ask-password --no-block --legend=no --no-pager --no-reload --no-wall --now
                              --quiet -q --system --user --version --runtime --recursive -r --firmware-setup
-                             --show-types --plain --failed --value --fail --dry-run --wait'
-        [ARG]='--host -H --kill-who --property -p --signal -s --type -t --state --job-mode --root
+                             --show-types --plain --failed --value --fail --dry-run --wait --no-warn'
+        [ARG]='--host -H --kill-whom --property -p --signal -s --type -t --state --job-mode --root
                              --preset-mode -n --lines -o --output -M --machine --message --timestamp --check-inhibitors'
     )
 
@@ -156,7 +157,7 @@
                 comps='fail replace replace-irreversibly isolate
                                        ignore-dependencies ignore-requirements flush'
                 ;;
-            --kill-who)
+            --kill-whom|--kill-who)
                 comps='all control main'
                 ;;
             --root)
@@ -215,7 +216,7 @@
                              suspend-then-hibernate kexec list-jobs list-sockets
                              list-timers list-units list-unit-files poweroff
                              reboot rescue show-environment suspend get-default
-                             is-system-running preset-all'
+                             is-system-running preset-all list-automounts'
         [FILE]='link switch-root bind mount-image'
         [TARGETS]='set-default'
         [MACHINES]='list-machines'
diff --git a/shell-completion/bash/systemd-analyze b/shell-completion/bash/systemd-analyze
index 36fcf43..5edba7b 100644
--- a/shell-completion/bash/systemd-analyze
+++ b/shell-completion/bash/systemd-analyze
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -27,7 +27,14 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
+}
+
+__get_units_all() {
+    systemctl list-units --no-legend --no-pager --plain --all | \
+        { while read -r a b c; do echo " $a"; done }
 }
 
 __get_services() {
@@ -50,18 +57,22 @@
 
     local -A OPTS=(
         [STANDALONE]='-h --help --version --system --user --global --order --require --no-pager
-                             --man=no --generators=yes'
+                             --man=no --generators=yes --quiet'
         [ARG]='-H --host -M --machine --fuzz --from-pattern --to-pattern --root'
     )
 
     local -A VERBS=(
-        [STANDALONE]='time blame plot dump unit-paths exit-status condition calendar timestamp timespan'
+        [STANDALONE]='time blame unit-paths exit-status calendar timestamp timespan'
         [CRITICAL_CHAIN]='critical-chain'
         [DOT]='dot'
+        [DUMP]='dump'
         [VERIFY]='verify'
         [SECCOMP_FILTER]='syscall-filter'
         [CAT_CONFIG]='cat-config'
         [SECURITY]='security'
+        [CONDITION]='condition'
+        [INSPECT_ELF]='inspect-elf'
+        [PLOT]='plot'
     )
 
     local CONFIGS='systemd/bootchart.conf systemd/coredump.conf systemd/journald.conf
@@ -109,6 +120,8 @@
     elif __contains_word "$verb" ${VERBS[CRITICAL_CHAIN]}; then
         if [[ $cur = -* ]]; then
             comps='--help --version --system --user --fuzz --no-pager'
+        else
+            comps=$( __get_units_all )
         fi
 
     elif __contains_word "$verb" ${VERBS[DOT]}; then
@@ -116,6 +129,13 @@
             comps='--help --version --system --user --global --from-pattern --to-pattern --order --require'
         fi
 
+    elif __contains_word "$verb" ${VERBS[DUMP]}; then
+        if [[ $cur = -* ]]; then
+            comps='--help --version --system --user --no-pager'
+        else
+            comps=$( __get_units_all )
+        fi
+
     elif __contains_word "$verb" ${VERBS[SECCOMP_FILTER]}; then
         if [[ $cur = -* ]]; then
             comps='--help --version --no-pager'
@@ -125,7 +145,7 @@
 
     elif __contains_word "$verb" ${VERBS[VERIFY]}; then
         if [[ $cur = -* ]]; then
-            comps='--help --version --system --user --global --man=no --generators=yes'
+            comps='--help --version --system --user --global --man=no --generators=yes --root --image --recursive-errors=no --recursive-errors=yes --recursive-errors=one'
         else
             comps=$( compgen -A file -- "$cur" )
             compopt -o filenames
@@ -144,14 +164,42 @@
 
     elif __contains_word "$verb" ${VERBS[SECURITY]}; then
         if [[ $cur = -* ]]; then
-            comps='--help --version --no-pager --system --user -H --host -M --machine'
-        else
+            comps='--help --version --no-pager --system --user -H --host -M --machine --offline --threshold --security-policy --json=off --json=pretty --json=short --root --image --profile=default --profile=nonetwork --profile=strict --profile=trusted'
+        elif ! __contains_word "--offline" ${COMP_WORDS[*]}; then
             if __contains_word "--user" ${COMP_WORDS[*]}; then
                 mode=--user
             else
                 mode=--system
             fi
             comps=$( __get_services $mode )
+        else
+            comps="$CONFIGS $( compgen -A file -- "$cur" )"
+            compopt -o filenames
+        fi
+
+    elif __contains_word "$verb" ${VERBS[CONDITION]}; then
+        if [[ $cur = -* ]]; then
+            comps='--help --version --system --user --global --no-pager --root --image'
+        elif [[ $prev = "-u" ]] || [[ $prev = "--unit" ]]; then
+            if __contains_word "--user" ${COMP_WORDS[*]}; then
+                mode=--user
+            else
+                mode=--system
+            fi
+            comps=$( __get_services $mode )
+        fi
+
+    elif __contains_word "$verb" ${VERBS[INSPECT_ELF]}; then
+        if [[ $cur = -* ]]; then
+            comps='--help --version --json=off --json=pretty --json=short'
+        else
+            comps=$( compgen -A file -- "$cur" )
+            compopt -o filenames
+        fi
+
+    elif __contains_word "$verb" ${VERBS[PLOT]}; then
+        if [[ $cur = -* ]]; then
+            comps='--help --version --system --user --global --no-pager --json=off --json=pretty --json=short --table --no-legend'
         fi
     fi
 
diff --git a/shell-completion/bash/systemd-cat b/shell-completion/bash/systemd-cat
index 737f339..b209140 100644
--- a/shell-completion/bash/systemd-cat
+++ b/shell-completion/bash/systemd-cat
@@ -15,7 +15,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word() {
     local w word=$1; shift
diff --git a/shell-completion/bash/systemd-cgls b/shell-completion/bash/systemd-cgls
index 0b6a8fd..8dda5a8 100644
--- a/shell-completion/bash/systemd-cgls
+++ b/shell-completion/bash/systemd-cgls
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word() {
     local w word=$1; shift
@@ -25,7 +25,9 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 __get_units_have_cgroup() {
@@ -41,7 +43,7 @@
     local i verb comps
 
     local -A OPTS=(
-        [STANDALONE]='-h --help --version --all -l --full -k --no-pager'
+        [STANDALONE]='-h --help --version --all -l --full -k --no-pager --xattr=no --cgroup-id=no'
         [ARG]='-M --machine -u --unit --user-unit'
     )
 
diff --git a/shell-completion/bash/systemd-cgtop b/shell-completion/bash/systemd-cgtop
index 2c59b6c..731d9c9 100644
--- a/shell-completion/bash/systemd-cgtop
+++ b/shell-completion/bash/systemd-cgtop
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word() {
     local w word=$1; shift
@@ -25,7 +25,9 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 _systemd_cgtop() {
@@ -56,6 +58,11 @@
     fi
 
     COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+    if [ -d /sys/fs/cgroup/systemd/ ]; then
+        COMPREPLY+=( $(cd /sys/fs/cgroup/systemd/ && compgen -o nospace -o dirnames "$cur") )
+    elif [ -d /sys/fs/cgroup/ ]; then
+        COMPREPLY+=( $(cd /sys/fs/cgroup/ && compgen -o nospace -o dirnames "$cur") )
+    fi
 }
 
 complete -F _systemd_cgtop systemd-cgtop
diff --git a/shell-completion/bash/systemd-cryptenroll b/shell-completion/bash/systemd-cryptenroll
new file mode 100644
index 0000000..66c6524
--- /dev/null
+++ b/shell-completion/bash/systemd-cryptenroll
@@ -0,0 +1,114 @@
+# systemd-cryptenroll(1) completion                   -*- shell-script -*-
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
+
+__contains_word() {
+    local w word=$1; shift
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+    done
+}
+
+__get_fido2_devices() {
+    local i
+    for i in /dev/hidraw*; do
+        [ -c "$i" ] && printf '%s\n' "$i"
+    done
+}
+
+__get_tpm2_devices() {
+    local i
+    for i in /dev/tpmrm*; do
+        [ -c "$i" ] && printf '%s\n' "$i"
+    done
+}
+
+__get_block_devices() {
+    local i
+    for i in /dev/*; do
+        [ -b "$i" ] && printf '%s\n' "$i"
+    done
+}
+
+_systemd-cryptenroll() {
+    local comps
+    local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
+    local -A OPTS=(
+        [STANDALONE]='-h --help --version
+                     --password --recovery-key'
+        [ARG]='--unlock-key-file
+               --unlock-fido2-device
+               --pkcs11-token-uri
+               --fido2-credential-algorithm
+               --fido2-device
+               --fido2-with-client-pin
+               --fido2-with-user-presence
+               --fido2-with-user-verification
+               --tpm2-device
+               --tpm2-pcrs
+               --tpm2-public-key
+               --tpm2-public-key-pcrs
+               --tpm2-signature
+               --tpm2-with-pin
+               --wipe-slot'
+    )
+
+    _init_completion || return
+
+    if __contains_word "$prev" ${OPTS[ARG]}; then
+        case $prev in
+            --unlock-key-file|--tpm2-public-key|--tpm2-signature)
+                comps=$(compgen -A file -- "$cur")
+                compopt -o filenames
+                ;;
+            --unlock-fido2-device)
+                comps="auto $(__get_fido2_devices)"
+                ;;
+            --pkcs11-token-uri)
+                comps='auto list pkcs11:'
+                ;;
+            --fido2-credential-algorithm)
+                comps='es256 rs256 eddsa'
+                ;;
+            --fido2-device)
+                comps="auto list $(__get_fido2_devices)"
+                ;;
+            --fido2-with-client-pin|--fido2-with-user-presence|--fido2-with-user-verification|--tpm2-with-pin)
+                comps='yes no'
+                ;;
+            --tpm2-device)
+                comps="auto list $(__get_tpm2_devices)"
+                ;;
+            --wipe-slot)
+                comps='all empty password recovery pkcs11 fido2 tpm2'
+                ;;
+        esac
+        COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+        return 0
+    fi
+
+    if [[ "$cur" = -* ]]; then
+        COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+        return 0
+    fi
+
+    comps=$(__get_block_devices)
+    COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+    return 0
+}
+
+complete -F _systemd-cryptenroll systemd-cryptenroll
diff --git a/shell-completion/bash/systemd-delta b/shell-completion/bash/systemd-delta
index f94c128..b148755 100644
--- a/shell-completion/bash/systemd-delta
+++ b/shell-completion/bash/systemd-delta
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word() {
     local w word=$1; shift
diff --git a/shell-completion/bash/systemd-detect-virt b/shell-completion/bash/systemd-detect-virt
index 0c9da3a..05e4490 100644
--- a/shell-completion/bash/systemd-detect-virt
+++ b/shell-completion/bash/systemd-detect-virt
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word() {
     local w word=$1; shift
diff --git a/shell-completion/bash/systemd-dissect b/shell-completion/bash/systemd-dissect
new file mode 100644
index 0000000..275ef6b
--- /dev/null
+++ b/shell-completion/bash/systemd-dissect
@@ -0,0 +1,105 @@
+# systemd-dissect(1) completion                       -*- shell-script -*-
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
+
+__contains_word() {
+    local w word=$1; shift
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+    done
+}
+
+_systemd_dissect() {
+    local comps
+    local cur=${COMP_WORDS[COMP_CWORD]} prev_1=${COMP_WORDS[COMP_CWORD-1]} prev_2=${COMP_WORDS[COMP_CWORD-2]} words cword
+    local -A OPTS=(
+        [STANDALONE]='-h --help --version
+                     --no-pager
+                     --no-legend
+                     -r --read-only
+                     --mkdir
+                     --rmdir'
+        [ARG]='-m --mount -M
+               -u --umount -U
+               -l --list
+               -x --copy-from
+               -a --copy-to
+               --fsck
+               --growfs
+               --discard
+               --root-hash
+               --root-hash-sig
+               --verity-data
+               --json'
+    )
+
+    _init_completion || return
+
+    if __contains_word "$prev_1" ${OPTS[ARG]}; then
+        case $prev_1 in
+            -l|--list|-m|--mount|-M|-x|--copy-from|-a|--copy-to|--verity-data)
+                comps=$(compgen -A file -- "$cur")
+                compopt -o filenames
+                ;;
+            -u|--umount|-U)
+                comps=$(compgen -A directory -- "$cur" )
+                compopt -o dirnames
+                ;;
+            --fsck|--growfs)
+                comps='yes no'
+                ;;
+            --discard)
+                comps='disabled loop all crypto'
+                ;;
+            --root-hash-sig)
+                comps="base64: $(compgen -A file -- "$cur")"
+                compopt -o filenames
+                ;;
+            --json)
+                comps='pretty short off'
+                ;;
+        esac
+        COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+        return 0
+    fi
+
+    if __contains_word "$prev_2" ${OPTS[ARG]}; then
+        case $prev_2 in
+            -m|--mount|-M)
+                comps=$(compgen -A directory -- "$cur" )
+                compopt -o dirnames
+                ;;
+            *)
+                comps=$(compgen -A file -- "$cur" )
+                compopt -o filenames
+                ;;
+        esac
+        COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+        return 0
+    fi
+
+    if [[ "$cur" = -* ]]; then
+        COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+        return 0
+    fi
+
+    COMPREPLY=( $(compgen -A file -- "$cur") )
+    compopt -o filenames
+    return 0
+}
+
+complete -F _systemd_dissect systemd-dissect
diff --git a/shell-completion/bash/systemd-id128 b/shell-completion/bash/systemd-id128
index ad4731d..1c19639 100644
--- a/shell-completion/bash/systemd-id128
+++ b/shell-completion/bash/systemd-id128
@@ -1,4 +1,4 @@
-# networkctl(1) completion                               -*- shell-script -*-
+# systemd-id128(1) completion                         -*- shell-script -*-
 # SPDX-License-Identifier: LGPL-2.1-or-later
 #
 # This file is part of systemd.
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
diff --git a/shell-completion/bash/systemd-nspawn b/shell-completion/bash/systemd-nspawn
index 8c0abd2..cc3d2f6 100644
--- a/shell-completion/bash/systemd-nspawn
+++ b/shell-completion/bash/systemd-nspawn
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word() {
     local w word=$1; shift
@@ -35,7 +35,9 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 __get_env() {
@@ -45,7 +47,7 @@
 
 __get_interfaces(){
     local name
-    for name in $(cd /sys/class/net && ls); do
+    for name in $(cd /sys/class/net && command ls); do
         [[ "$name" != "lo" ]] && echo "$name"
     done
 }
@@ -63,7 +65,7 @@
 
     local -A OPTS=(
         [STANDALONE]='-h --help --version --private-network -b --boot --read-only -q --quiet --share-system
-                      --keep-unit -n --network-veth -j -x --ephemeral -a --as-pid2 -U'
+                      --keep-unit -n --network-veth -j -x --ephemeral -a --as-pid2 -U --suppress-sync=yes'
         [ARG]='-D --directory -u --user --uuid --capability --drop-capability --link-journal --bind --bind-ro
                       -M --machine -S --slice -E --setenv -Z --selinux-context -L --selinux-apifs-context
                       --register --network-interface --network-bridge --personality -i --image --tmpfs
diff --git a/shell-completion/bash/systemd-path b/shell-completion/bash/systemd-path
index 4330c3e..40e2f7e 100644
--- a/shell-completion/bash/systemd-path
+++ b/shell-completion/bash/systemd-path
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
diff --git a/shell-completion/bash/systemd-resolve b/shell-completion/bash/systemd-resolve
index b165010..20d904a 100644
--- a/shell-completion/bash/systemd-resolve
+++ b/shell-completion/bash/systemd-resolve
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -25,7 +25,7 @@
 
 __get_interfaces(){
     local name
-    for name in $(cd /sys/class/net && ls); do
+    for name in $(cd /sys/class/net && command ls); do
         [[ "$name" != "lo" ]] && echo "$name"
     done
 }
diff --git a/shell-completion/bash/systemd-run b/shell-completion/bash/systemd-run
index 76b9700..c18228d 100644
--- a/shell-completion/bash/systemd-run
+++ b/shell-completion/bash/systemd-run
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __systemctl() {
     local mode=$1; shift 1
@@ -26,7 +26,9 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 _systemd_run() {
@@ -78,7 +80,7 @@
         -p|--property)
             local comps='CPUAccounting= MemoryAccounting= BlockIOAccounting= SendSIGHUP=
                          SendSIGKILL= MemoryLimit= CPUShares= BlockIOWeight= User= Group=
-                         DevicePolicy= KillMode= DeviceAllow= BlockIOReadBandwidth=
+                         DevicePolicy= KillMode= ExitType= DeviceAllow= BlockIOReadBandwidth=
                          BlockIOWriteBandwidth= BlockIODeviceWeight= Nice= Environment=
                          KillSignal= RestartKillSignal= FinalKillSignal= LimitCPU= LimitFSIZE= LimitDATA=
                          LimitSTACK= LimitCORE= LimitRSS= LimitNOFILE= LimitAS= LimitNPROC=
diff --git a/shell-completion/bash/systemd-sysext b/shell-completion/bash/systemd-sysext
new file mode 100644
index 0000000..b3f9f32
--- /dev/null
+++ b/shell-completion/bash/systemd-sysext
@@ -0,0 +1,85 @@
+# systemd-sysext(8) completion                        -*- shell-script -*-
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
+
+__contains_word() {
+    local w word=$1; shift
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+    done
+}
+
+_systemd-sysext() {
+    local i verb comps
+    local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
+    local -A OPTS=(
+        [STANDALONE]='-h --help --version
+                     --no-pager
+                     --no-legend
+                     --force'
+        [ARG]='--root
+               --json'
+    )
+
+    local -A VERBS=(
+        [STANDALONE]='status
+                      merge
+                      unmerge
+                      refresh
+                      list'
+    )
+
+    _init_completion || return
+
+    if __contains_word "$prev" ${OPTS[ARG]}; then
+        case $prev in
+            --root)
+                comps=$(compgen -A directory -- "$cur" )
+                compopt -o dirnames
+                ;;
+            --json)
+                comps='pretty short off'
+                ;;
+        esac
+        COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+        return 0
+    fi
+
+    if [[ "$cur" = -* ]]; then
+        COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+        return 0
+    fi
+
+    for ((i=0; i < COMP_CWORD; i++)); do
+        if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
+                ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
+            verb=${COMP_WORDS[i]}
+            break
+        fi
+    done
+
+    if [[ -z ${verb-} ]]; then
+        comps=${VERBS[*]}
+    elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
+        comps=''
+    fi
+
+    COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+    return 0
+}
+
+complete -F _systemd-sysext systemd-sysext
diff --git a/shell-completion/bash/timedatectl b/shell-completion/bash/timedatectl
index 29dc27b..768b4a5 100644
--- a/shell-completion/bash/timedatectl
+++ b/shell-completion/bash/timedatectl
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -27,12 +27,14 @@
 
 __get_machines() {
     local a b
-    machinectl list --full --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo " $a"; done; } | \
+        sort -u
 }
 
 __get_interfaces(){
     local name
-    for name in $(cd /sys/class/net && ls); do
+    for name in $(cd /sys/class/net && command ls); do
         [[ "$name" != "lo" ]] && echo "$name"
     done
 }
diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm
index 81036f3..99d4aa5 100644
--- a/shell-completion/bash/udevadm
+++ b/shell-completion/bash/udevadm
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 __contains_word () {
     local w word=$1; shift
@@ -32,7 +32,7 @@
 
 __get_all_devs() {
     local i
-    for i in /dev/* /dev/*/*; do
+    for i in /dev/* /dev/*/* /dev/*/*/*; do
         echo $i
     done
 }
@@ -49,21 +49,26 @@
         [COMMON]='-h --help -V --version'
         [DEBUG]='-d --debug'
         [INFO_STANDALONE]='-r --root -a --attribute-walk -x --export -e --export-db -c --cleanup-db
-                           -w --wait-for-initialization'
-        [INFO_ARG]='-q --query -p --path -n --name -P --export-prefix -d --device-id-of-file'
-        [TRIGGER_STANDALONE]='-v --verbose -n --dry-run -q --quiet -w --settle --wait-daemon --uuid'
+                           -w --wait-for-initialization --value'
+        [INFO_ARG]='-q --query -p --path -n --name -P --export-prefix -d --device-id-of-file --property'
+        [TRIGGER_STANDALONE]='-v --verbose -n --dry-run -q --quiet -w --settle --wait-daemon --uuid
+                              --initialized-match --initialized-nomatch'
         [TRIGGER_ARG]='-t --type -c --action -s --subsystem-match -S --subsystem-nomatch
                        -a --attr-match -A --attr-nomatch -p --property-match
-                       -g --tag-match -y --sysname-match --name-match -b --parent-match'
+                       -g --tag-match -y --sysname-match --name-match -b --parent-match
+                       --prioritized-subsystem'
         [SETTLE]='-t --timeout -E --exit-if-exists'
         [CONTROL_STANDALONE]='-e --exit -s --stop-exec-queue -S --start-exec-queue -R --reload --ping'
         [CONTROL_ARG]='-l --log-priority -p --property -m --children-max -t --timeout'
         [MONITOR_STANDALONE]='-k --kernel -u --udev -p --property'
         [MONITOR_ARG]='-s --subsystem-match -t --tag-match'
         [TEST]='-a --action -N --resolve-names'
+        [TEST_BUILTIN]='-a --action'
+        [WAIT]='-t --timeout --initialized=no --removed --settle'
+        [LOCK]='-t --timeout -d --device -b --backing -p --print'
     )
 
-    local verbs=(info trigger settle control monitor test-builtin test)
+    local verbs=(info trigger settle control monitor test-builtin test wait lock)
     local builtins=(blkid btrfs hwdb input_id keyboard kmod net_id net_setup_link path_id usb_id uaccess)
 
     for ((i=0; i < COMP_CWORD; i++)); do
@@ -116,7 +121,7 @@
             if __contains_word "$prev" ${OPTS[TRIGGER_ARG]}; then
                 case $prev in
                     -t|--type)
-                        comps='devices subsystems'
+                        comps='all devices subsystems'
                         ;;
                     -c|--action)
                         comps=$( udevadm trigger --action help )
@@ -215,6 +220,16 @@
             ;;
 
         'test-builtin')
+            if __contains_word "$prev" ${OPTS[TEST_BUILTIN]}; then
+                case $prev in
+                    -a|--action)
+                        comps=$( udevadm test-builtin --action help )
+                        ;;
+                esac
+                COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+                return 0
+            fi
+
             for ((i=0; i < COMP_CWORD; i++)); do
                 if __contains_word "${COMP_WORDS[i]}" "${builtins[@]}"; then
                     builtin=${COMP_WORDS[i]}
@@ -225,13 +240,50 @@
             if [[ -z $builtin ]]; then
                 comps="${builtins[@]}"
             elif [[ $cur = -* ]]; then
-                comps="${OPTS[COMMON]}"
+                comps="${OPTS[COMMON]} ${OPTS[TEST_BUILTIN]}"
             else
                 comps=$( __get_all_sysdevs )
                 local IFS=$'\n'
             fi
             ;;
 
+        'wait')
+            if __contains_word "$prev" ${OPTS[WAIT]}; then
+                case $prev in
+                    *)
+                        comps=''
+                        ;;
+                esac
+                COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+                return 0
+            fi
+
+            if [[ $cur = -* ]]; then
+                comps="${OPTS[COMMON]} ${OPTS[WAIT]}"
+            else
+                comps=$( __get_all_devs )
+                local IFS=$'\n'
+            fi
+            ;;
+
+        'lock')
+            if __contains_word "$prev" ${OPTS[LOCK]}; then
+                case $prev in
+                    *)
+                        comps=''
+                        ;;
+                esac
+                COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+                return 0
+            fi
+
+            if [[ $cur = -* ]]; then
+                comps="${OPTS[COMMON]} ${OPTS[LOCK]}"
+            else
+                comps=''
+            fi
+            ;;
+
         *)
             comps=${VERBS[*]}
             ;;
diff --git a/shell-completion/zsh/_bootctl b/shell-completion/zsh/_bootctl
index 2b50f30..83d910c 100644
--- a/shell-completion/zsh/_bootctl
+++ b/shell-completion/zsh/_bootctl
@@ -24,6 +24,10 @@
     _bootctl_comp_ids
 }
 
+_bootctl_unlink() {
+    _bootctl_comp_ids
+}
+
 _bootctl_reboot-to-firmware() {
     local -a _completions
     _completions=( yes no )
@@ -46,6 +50,10 @@
         "list:List boot loader entries"
         "set-default:Set the default boot loader entry"
         "set-oneshot:Set the default boot loader entry only for the next boot"
+        "set-timeout:Set the menu timeout"
+        "set-timeout-oneshot:Set the menu timeout for the next boot only"
+        "unlink:Remove boot loader entry"
+        "cleanup:Remove files in ESP not referenced in any boot entry"
     )
     if (( CURRENT == 1 )); then
         _describe -t commands 'bootctl command' _bootctl_cmds || compadd "$@"
@@ -67,7 +75,12 @@
     '--boot-path=[Path to the $BOOT partition]:path:_directories' \
     {-p,--print-esp-path}'[Print path to the EFI system partition]' \
     {-x,--print-boot-path}'[Print path to the $BOOT partition]' \
+    '--make-machine-id-directory=[Control creation and deletion of the top-level machine ID directory.]:options:(yes no auto)' \
     '--no-variables[Do not touch EFI variables]' \
     '--no-pager[Do not pipe output into a pager]' \
     '--graceful[Do not fail when locating ESP or writing fails]' \
+    '--dry-run[Dry run (unlink and cleanup)]' \
+    '--root=[Operate under the specified directory]:PATH' \
+    '--image=[Operate on the specified image]:PATH' \
+    '--install-source[Where to pick files when using --root=/--image=]:options:(image host auto)' \
     '*::bootctl command:_bootctl_commands'
diff --git a/shell-completion/zsh/_busctl b/shell-completion/zsh/_busctl
index ae87ddc..0cb1c44 100644
--- a/shell-completion/zsh/_busctl
+++ b/shell-completion/zsh/_busctl
@@ -16,7 +16,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 (( $+functions[_busctl_commands] )) || _busctl_commands()
 {
@@ -25,7 +25,7 @@
         "list:List bus names"
         "status:Show bus service, process or bus owner credentials"
         "monitor:Show bus traffic"
-        "capture:Capture bus traffix as pcap"
+        "capture:Capture bus traffic"
         "tree:Show object tree of service"
         "introspect:Introspect object"
         "call:Call a method"
diff --git a/shell-completion/zsh/_coredumpctl b/shell-completion/zsh/_coredumpctl
index ae62e50..dad21a7 100644
--- a/shell-completion/zsh/_coredumpctl
+++ b/shell-completion/zsh/_coredumpctl
@@ -43,4 +43,5 @@
     '--debugger=[Use the given debugger]:debugger: _command_names -e' \
     {-D,--directory=}'[Use the journal files in the specified dir]:directory: _directories' \
     {-q,--quiet}'[Do not show info messages and privilege warning]' \
+    '--all[Look at all journal files instead of local ones]' \
     '*::coredumpctl commands:_coredumpctl_commands'
diff --git a/shell-completion/zsh/_loginctl b/shell-completion/zsh/_loginctl
index 6478a52..5473020 100644
--- a/shell-completion/zsh/_loginctl
+++ b/shell-completion/zsh/_loginctl
@@ -169,7 +169,7 @@
     '--version[Show package version]' \
     \*{-p+,--property=}'[Show only properties by this name]:unit property' \
     {-a,--all}'[Show all properties, including empty ones]' \
-    '--kill-who=[Who to send signal to]:killwho:(main control all)' \
+    '--kill-whom=[Whom to send signal to]:killwhom:(main control all)' \
     {-s+,--signal=}'[Which signal to send]:signal:_signals' \
     {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
     {-M+,--machine=}'[Operate on local container]:machine:_sd_machines' \
diff --git a/shell-completion/zsh/_machinectl b/shell-completion/zsh/_machinectl
index 8f4e57f..2b675bd 100644
--- a/shell-completion/zsh/_machinectl
+++ b/shell-completion/zsh/_machinectl
@@ -1,15 +1,15 @@
 #compdef machinectl
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-(( $+functions[__machinectl_get_machines] )) ||
-    __machinectl_get_machines () {
+(( $+functions[__machinectl_get_images] )) ||
+    __machinectl_get_images () {
         machinectl --no-legend list-images | {while read -r a b; do echo $a; done;}
     }
 
-(( $+functions[_machinectl_machines] )) ||
-    _machinectl_machines() {
+(( $+functions[_machinectl_images] )) ||
+    _machinectl_images() {
         local -a _machines
-        _machines=("${(fo)$(__machinectl_get_machines)}")
+        _machines=("${(fo)$(__machinectl_get_images)}")
         typeset -U _machines
         if [[ -n "$_machines" ]]; then
             _describe 'machines' _machines
@@ -64,9 +64,9 @@
                     list*|cancel-transfer|pull-tar|pull-raw)
                         msg="no options" ;;
                     clone)
-                        _machinectl_machines ;;
+                        _machinectl_images ;;
                     start)
-                        _machinectl_machines ;;
+                        _machinectl_images ;;
                     *)
                         _sd_machines
                 esac
@@ -95,7 +95,7 @@
     {-a,--all}'[Show all properties.]' \
     {-q,--quiet}'[Suppress output.]' \
     {-l,--full}'[Do not ellipsize cgroup members.]' \
-    '--kill-who=[Who to send signal to.]:killwho:(leader all)' \
+    '--kill-whom=[Whom to send signal to.]:killwhom:(leader all)' \
     {-s+,--signal=}'[Which signal to send.]:signal:_signals' \
     '--read-only[Create read-only bind mount.]' \
     '--mkdir[Create directory before bind mounting, if missing.]' \
diff --git a/shell-completion/zsh/_oomctl b/shell-completion/zsh/_oomctl
new file mode 100644
index 0000000..18e1938
--- /dev/null
+++ b/shell-completion/zsh/_oomctl
@@ -0,0 +1,28 @@
+#compdef oomctl
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+(( $+functions[_oomctl_commands] )) || _oomctl_commands()
+{
+    local -a _oomctl_cmds
+    _oomctl_cmds=(
+        "dump:Show the current state of cgroups and system contexts"
+        "help:Prints a short help text and exits."
+    )
+    if (( CURRENT == 1 )); then
+        _describe -t commands 'oomctl command' _oomctl_cmds
+    else
+        local curcontext="$curcontext"
+        cmd="${${_oomctl_cmds[(r)$words[1]:*]%%:*}}"
+        if (( $+functions[_oomctl_$cmd] )); then
+            _oomctl_$cmd
+        else
+            _message "no more options"
+        fi
+    fi
+}
+
+_arguments \
+    {-h,--help}'[Prints a short help text and exits.]' \
+    '--version[Prints a short version string and exits.]' \
+    '--no-pager[Do not pipe output into a pager]' \
+    '*::oomctl command:_oomctl_commands'
diff --git a/shell-completion/zsh/_resolvectl b/shell-completion/zsh/_resolvectl
index eafc1ff..4363ce7 100644
--- a/shell-completion/zsh/_resolvectl
+++ b/shell-completion/zsh/_resolvectl
@@ -14,7 +14,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
 (( $+functions[_resolvectl_protocols] )) ||
     _resolvectl_protocols() {
diff --git a/shell-completion/zsh/_sd_machines b/shell-completion/zsh/_sd_machines
index cc0d1e2..b960745 100644
--- a/shell-completion/zsh/_sd_machines
+++ b/shell-completion/zsh/_sd_machines
@@ -3,7 +3,10 @@
 
 (( $+functions[__sd_machines_get_machines] )) ||
     __sd_machines_get_machines () {
-        machinectl --full --no-legend --no-pager list |  {while read -r a b; do echo $a; done;};
+
+    { machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
+	{ while read a b; do echo "$a"; done; } | \
+        sort -u
     }
 
 local -a _machines
diff --git a/shell-completion/zsh/_sd_outputmodes b/shell-completion/zsh/_sd_outputmodes
index 267a2e7..68b1187 100644
--- a/shell-completion/zsh/_sd_outputmodes
+++ b/shell-completion/zsh/_sd_outputmodes
@@ -2,5 +2,5 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 local -a _output_opts
-_output_opts=(short short-full short-iso short-iso-precise short-precise short-monotonic short-unix verbose export json json-pretty json-sse json-seq cat with-unit)
+_output_opts=(short short-full short-iso short-iso-precise short-precise short-monotonic short-unix short-delta verbose export json json-pretty json-sse json-seq cat with-unit)
 _describe -t output 'output mode' _output_opts || compadd "$@"
diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in
index 6fbe873..2811582 100644
--- a/shell-completion/zsh/_systemctl.in
+++ b/shell-completion/zsh/_systemctl.in
@@ -7,6 +7,7 @@
 
     local -a unit_commands=(
         # Unit Commands
+        "list-automounts:List automounts"
         "list-sockets:List sockets"
         "list-timers:List timers"
         "list-units:List units"
@@ -191,8 +192,8 @@
 
 (( $+functions[_systemctl_get_non_template_names] )) ||
     _systemctl_get_non_template_names() { echo -E - ${^${(R)${(f)"$(
-    __systemctl $mode list-unit-files "$PREFIX*"
-    __systemctl $mode list-units --all "$PREFIX*"
+    __systemctl list-unit-files "$PREFIX*"
+    __systemctl list-units --all "$PREFIX*"
   )"}:#*@.*}%%[[:space:]]*} }
 
 (( $+functions[_systemctl_get_template_names] )) ||
@@ -205,8 +206,8 @@
     _systemctl_startable_units(){
         _sys_startable_units=( $( _filter_units_by_property ActiveState inactive $(
                                       _filter_units_by_property CanStart yes ${${${(f)"$(
-      __systemctl $mode list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient "$PREFIX*"
-      __systemctl $mode list-units --state inactive,failed "$PREFIX*"
+      __systemctl list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient "$PREFIX*"
+      __systemctl list-units --state inactive,failed "$PREFIX*"
     )"}:#*@.*}%%[[:space:]]*}
                                                             )) )
     }
@@ -214,8 +215,8 @@
 (( $+functions[_systemctl_restartable_units] )) ||
     _systemctl_restartable_units(){
         _sys_restartable_units=( $( _filter_units_by_property CanStart yes ${${${(f)"$(
-    __systemctl $mode list-unit-files --state enabled,disabled,static "$PREFIX*"
-    __systemctl $mode list-units "$PREFIX*"
+    __systemctl list-unit-files --state enabled,disabled,static "$PREFIX*"
+    __systemctl list-units "$PREFIX*"
   )"}:#*@.*}%%[[:space:]]*} ) )
     }
 
@@ -479,6 +480,7 @@
     '--show-types[When showing sockets, show socket type]' \
     '--check-inhibitors[Specify if inhibitors should be checked]:mode:_systemctl_check_inhibitors' \
     {-q,--quiet}'[Suppress output]' \
+    '--no-warn[Suppress several warnings shown by default]' \
     '--no-block[Do not wait until operation finished]' \
     '--legend=no[Do not print a legend, i.e. the column headers and the footer with hints]' \
     '--no-pager[Do not pipe output into a pager]' \
@@ -488,7 +490,7 @@
     '--global[Enable/disable/mask default user unit files globally]' \
     "--no-reload[When enabling/disabling unit files, don't reload daemon configuration]" \
     '--no-ask-password[Do not ask for system passwords]' \
-    '--kill-who=[Who to send signal to]:killwho:(main control all)' \
+    '--kill-whom=[Whom to send signal to]:killwhom:(main control all)' \
     {-s+,--signal=}'[Which signal to send]:signal:_signals' \
     {-f,--force}'[When enabling unit files, override existing symlinks. When shutting down, execute action immediately]' \
     '--root=[Enable/disable/mask unit files in the specified root directory]:directory:_directories' \
diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze
index ce8e616..2e046ea 100644
--- a/shell-completion/zsh/_systemd-analyze
+++ b/shell-completion/zsh/_systemd-analyze
@@ -1,42 +1,52 @@
 #compdef systemd-analyze
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-(( $+functions[_systemd-analyze_log-level] )) ||
-    _systemd-analyze_log-level() {
-        local -a _levels
-        _levels=(debug info notice warning err crit alert emerg)
-        _describe -t level 'logging level' _levels || compadd "$@"
-    }
-
-(( $+functions[_systemd-analyze_log-target] )) ||
-    _systemd-analyze_log-target() {
-        local -a _targets
-        _targets=(console journal kmsg journal-or-kmsg null)
-        _describe -t target 'logging target' _targets || compadd "$@"
-    }
-
 (( $+functions[_systemd-analyze_verify] )) ||
     _systemd-analyze_verify() {
         _sd_unit_files
     }
 
-(( $+functions[_systemd-analyze_service-watchdogs] )) ||
-    _systemd-analyze_service-watchdogs() {
-        local -a _states
-        _states=(on off)
-        _describe -t state 'state' _states || compadd "$@"
-    }
-
 (( $+functions[_systemd-analyze_cat-config] )) ||
 	_systemd-analyze_cat-config() {
         _files -W '(/run/systemd/ /etc/systemd/ /usr/lib/systemd/)' -P 'systemd/'
     }
 
+(( $+functions[_systemd-analyze_critical-chain] )) ||
+    _systemd-analyze_critical-chain() {
+        local -a _units
+        systemctl list-units --no-legend --no-pager --plain --all |
+        while read -r a b c; do
+            _units+=($a)
+        done
+        compadd -a _units
+    }
+
 (( $+functions[_systemd-analyze_security] )) ||
     _systemd-analyze_security() {
         _sd_unit_files
     }
 
+(( $+functions[_systemd-analyze_syscall-filter] )) ||
+    _systemd-analyze_syscall-filter() {
+        local -a _groups
+        _groups=( $(systemd-analyze --quiet --no-pager syscall-filter | grep '^@') )
+        _describe -t groups 'syscall groups' _groups || compadd "$@"
+    }
+
+(( $+functions[_systemd-analyze_filesystems] )) ||
+    _systemd-analyze_filesystems() {
+        local -a _groups
+        _groups=( $(systemd-analyze --quiet --no-pager filesystems | grep '^@') )
+        _describe -t groups 'file system groups' _groups || compadd "$@"
+    }
+
+(( $+functions[_systemd-analyze_plot] )) ||
+    _systemd-analyze_plot() {
+        local -a _options
+        _options=( '--json=off' '--json=pretty' '--json=short' '--table' '--no-legend' )
+        _describe 'plot options' _options
+    }
+
 (( $+functions[_systemd-analyze_commands] )) ||
     _systemd-analyze_commands(){
         local -a _systemd_analyze_cmds
@@ -45,23 +55,25 @@
             'time:Print time spent in the kernel before reaching userspace'
             'blame:Print list of running units ordered by time to init'
             'critical-chain:Print a tree of the time critical chain of units'
-            'plot:Output SVG graphic showing service initialization'
+            'plot:Output SVG graphic showing service initialization, or raw time data in
+JSON or table format'
             'dot:Dump dependency graph (in dot(1) format)'
             'dump:Dump server status'
             'cat-config:Cat systemd config files'
             'unit-files:List files and symlinks for units'
             'unit-paths:List unit load paths'
             'exit-status:List known exit statuses'
-            'syscall-filter:List syscalls in seccomp filter'
+            'capability:List capability definitions'
+            'syscall-filter:List syscalls in seccomp filters'
+            'filesystems:List known filesystems'
             'condition:Evaluate Condition*= and Assert*= assignments'
             'verify:Check unit files for correctness'
             'calendar:Validate repetitive calendar time events'
             'timestamp:Parse a systemd syntax timestamp'
             'timespan:Parse a systemd syntax timespan'
             'security:Analyze security settings of a service'
-            # 'log-level:Get/set systemd log threshold'
-            # 'log-target:Get/set systemd log target'
-            # 'service-watchdogs:Get/set service watchdog status'
+            'inspect-elf:Parse and print ELF package metadata'
+            # log-level, log-target, service-watchdogs have been deprecated
         )
 
         if (( CURRENT == 1 )); then
@@ -87,8 +99,19 @@
     '--system[Operate on system systemd instance]' \
     '--user[Operate on user systemd instance]' \
     '--global[Show global user instance config]' \
+    '--root=[Add support for root argument]:PATH' \
+    '--image=[Add support for discrete images]:PATH' \
+    '--recursive-errors=[When verifying a unit, control dependency verification]:MODE' \
+    '--offline=[Perform a security review of the specified unit files]:BOOL:(yes no)' \
+    '--threshold=[Set a value to compare the overall security exposure level with]: NUMBER' \
+    '--security-policy=[Use customized requirements to compare unit files against]: PATH' \
+    "--json=[Generate a JSON output of the security analysis table or plot's raw time data]:MODE:(pretty short off)" \
+    "--table=[Generate a table of plot's raw time data]" \
+    '--profile=[Include the specified profile in the security review of units]: PATH' \
     '--no-pager[Do not pipe output into a pager]' \
-    '--man=[Do (not) check for existence of man pages]:boolean:(1 0)' \
+    "--no-legend[Do not show the headers and footers for plot's raw time data formats]" \
+    '--man=[Do (not) check for existence of man pages]:BOOL:(yes no)' \
+    '--generators=[Do (not) run unit generators]:BOOL:(yes no)' \
     '--order[When generating graph for dot, show only order]' \
     '--require[When generating graph for dot, show only requirement]' \
     '--fuzz=[When printing the tree of the critical chain, print also services, which finished TIMESPAN earlier, than the latest in the branch]:TIMESPAN' \
@@ -96,4 +119,5 @@
     '--to-pattern=[When generating a dependency graph, filter only destinations]:GLOB' \
     {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
     {-M+,--machine=}'[Operate on local container]:machine:_sd_machines' \
+    '--quiet[Do not show hints]' \
     '*::systemd-analyze commands:_systemd-analyze_commands'
diff --git a/shell-completion/zsh/_systemd-nspawn b/shell-completion/zsh/_systemd-nspawn
index 384e3f2..adc5d7c 100644
--- a/shell-completion/zsh/_systemd-nspawn
+++ b/shell-completion/zsh/_systemd-nspawn
@@ -49,4 +49,5 @@
     '--personality=[Control the architecture ("personality") reported by uname(2) in the container.]:architecture:(x86 x86-64)' \
     '--volatile=[Run the system in volatile mode.]:volatile:(no yes state)' \
     "--notify-ready=[Control when the ready notification is sent]:options:(yes no)" \
+    "--suppress-sync=[Control whether to suppress disk synchronization for the container payload]:options:(yes no)" \
     '*:: : _normal'
diff --git a/shell-completion/zsh/_systemd-path b/shell-completion/zsh/_systemd-path
index dd2e720..d1fb24b 100644
--- a/shell-completion/zsh/_systemd-path
+++ b/shell-completion/zsh/_systemd-path
@@ -1,4 +1,5 @@
 #compdef systemd-path
+# SPDX-License-Identifier: LGPL-2.1-or-later
 
 typeset -A sdpath=( ${$(systemd-path)/:/} )
 _arguments -S \
diff --git a/shell-completion/zsh/_systemd-run b/shell-completion/zsh/_systemd-run
index 934834b..7568ed4 100644
--- a/shell-completion/zsh/_systemd-run
+++ b/shell-completion/zsh/_systemd-run
@@ -45,7 +45,7 @@
     {-p+,--property=}'[Set unit property]:NAME=VALUE:(( \
                 CPUAccounting= MemoryAccounting= BlockIOAccounting= SendSIGHUP= \
                 SendSIGKILL= MemoryLimit= CPUShares= BlockIOWeight= User= Group= \
-                DevicePolicy= KillMode= DeviceAllow= BlockIOReadBandwidth= \
+                DevicePolicy= KillMode= ExitType= DeviceAllow= BlockIOReadBandwidth= \
                 BlockIOWriteBandwidth= BlockIODeviceWeight= Nice= Environment= \
                 KillSignal= RestartKillSignal= FinalKillSignal= LimitCPU= LimitFSIZE= LimitDATA= \
                 LimitSTACK= LimitCORE= LimitRSS= LimitNOFILE= LimitAS= LimitNPROC= \
diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm
index 87fdb5e..f7c3384 100644
--- a/shell-completion/zsh/_udevadm
+++ b/shell-completion/zsh/_udevadm
@@ -13,7 +13,9 @@
         '--export-prefix=[Add a prefix to the key name of exported values.]:prefix' \
         '--device-id-of-file=[Print major/minor numbers of the underlying device, where the file lives on.]:files:_udevadm_mounts' \
         '--export-db[Export the content of the udev database.]' \
-        '--cleanup-db[Cleanup the udev database.]'
+        '--cleanup-db[Cleanup the udev database.]' \
+        '--value[When showing properties, print only their values.]' \
+        '--property=[Show only properties by this name.]'
 }
 
 (( $+functions[_udevadm_trigger] )) ||
@@ -22,7 +24,7 @@
         '--verbose[Print the list of devices which will be triggered.]' \
         '--dry-run[Do not actually trigger the event.]' \
         '--quiet[Suppress error logging in triggering events.]' \
-        '--type=[Trigger a specific type of devices.]:types:(devices subsystems failed)' \
+        '--type=[Trigger a specific type of devices.]:types:(all devices subsystems failed)' \
         '--action=[Type of event to be triggered.]:actions:(add change remove move online offline bind unbind)' \
         '--subsystem-match=[Trigger events for devices which belong to a matching subsystem.]' \
         '--subsystem-nomatch=[Do not trigger events for devices which belong to a matching subsystem.]' \
@@ -32,7 +34,10 @@
         '--tag-match=property[Trigger events for devices with a matching tag.]' \
         '--sysname-match=[Trigger events for devices with a matching sys device name.]' \
         '--parent-match=[Trigger events for all children of a given device.]' \
-        '--uuid[Print synthetic uevent UUID.]'
+        '--initialized-match[Trigger events for devices that are already initialized.]' \
+        '--initialized-nomatch[Trigger events for devices that are not initialized yet.]' \
+        '--uuid[Print synthetic uevent UUID.]' \
+        '--prioritized-subsystem=[Trigger events for devices which belong to a matching subsystem earlier.]'
 }
 
 (( $+functions[_udevadm_settle] )) ||
@@ -84,34 +89,58 @@
 _udevadm_test-builtin(){
     if (( CURRENT == 2 )); then
     _arguments \
+        '--action=[The action string.]:actions:(add change remove move online offline bind unbind)' \
         '--help[Print help text]' \
         '*::builtins:(blkid btrfs hwdb input_id net_id net_setup_link kmod path_id usb_id uaccess)'
     elif  (( CURRENT == 3 )); then
         _arguments \
+            '--action=[The action string.]:actions:(add change remove move online offline bind unbind)' \
             '--help[Print help text]' \
             '*::syspath:_files -P /sys -W /sys'
     else
         _arguments \
+            '--action=[The action string.]:actions:(add change remove move online offline bind unbind)' \
             '--help[Print help text]'
     fi
 }
 
+(( $+functions[_udevadm_wait] )) ||
+_udevadm_wait(){
+    _arguments \
+        '--timeout=[Maximum number of seconds to wait for the devices being created.]' \
+        '--initialized=[Wait for devices being initialized by systemd-udevd.]:boolean:(yes no)' \
+        '--removed[Wait for devices being removed.]' \
+        '--settle[Also wait for udev queue being empty.]' \
+        '--help[Print help text.]' \
+        '*::devpath:_files -P /dev/ -W /dev'
+}
+
+(( $+functions[_udevadm_lock] )) ||
+_udevadm_lock(){
+    _arguments \
+        '--timeout=[Maximum number of seconds to wait for the devices being locked.]' \
+        '--device=[Block device to lock.]' \
+        '--backing=[File whose backing block device to lock.]' \
+        '--print[Only show which block device the lock would be taken on.]' \
+        '--help[Print help text.]'
+}
+
 (( $+functions[_udevadm_mounts] )) ||
 _udevadm_mounts(){
-  local dev_tmp dpath_tmp mp_tmp mline
+    local dev_tmp dpath_tmp mp_tmp mline
 
     tmp=( "${(@f)$(< /proc/self/mounts)}" )
     dev_tmp=( "${(@)${(@)tmp%% *}:#none}" )
     mp_tmp=( "${(@)${(@)tmp#* }%% *}" )
 
-  local MATCH
-  mp_tmp=("${(@q)mp_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}")
-  dpath_tmp=( "${(@Mq)dev_tmp:#/*}" )
-  dev_tmp=( "${(@q)dev_tmp:#/*}" )
+    local MATCH
+    mp_tmp=("${(@q)mp_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}")
+    dpath_tmp=( "${(@Mq)dev_tmp:#/*}" )
+    dev_tmp=( "${(@q)dev_tmp:#/*}" )
 
-  _alternative \
-    'device-paths: device path:compadd -a dpath_tmp' \
-    'directories:mount point:compadd -a mp_tmp'
+    _alternative \
+        'device-paths: device path:compadd -a dpath_tmp' \
+        'directories:mount point:compadd -a mp_tmp'
 }
 
 (( $+functions[_udevadm_commands] )) ||
@@ -125,6 +154,8 @@
         'monitor:listen to kernel and udev events'
         'test:test an event run'
         'test-builtin:test a built-in command'
+        'wait:wait for devices or device symlinks being created'
+        'lock:lock a block device and run a comand'
     )
 
     if ((CURRENT == 1)); then
diff --git a/shell-completion/zsh/meson.build b/shell-completion/zsh/meson.build
index f5f9b0f..b39f933 100644
--- a/shell-completion/zsh/meson.build
+++ b/shell-completion/zsh/meson.build
@@ -2,15 +2,14 @@
 
 zshcompletiondir = get_option('zshcompletiondir')
 if zshcompletiondir == ''
-        zshcompletiondir = join_paths(datadir, 'zsh/site-functions')
+        zshcompletiondir = datadir / 'zsh/site-functions'
 endif
 
 custom_target(
         '_systemctl',
         input : '_systemctl.in',
         output : '_systemctl',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : zshcompletiondir != 'no',
         install_dir : zshcompletiondir)
 
@@ -23,18 +22,19 @@
          ['_systemd-path',             ''],
          ['_systemd-run',              ''],
          ['_udevadm',                  ''],
-         ['_kernel-install',           ''],
+         ['_kernel-install',           'ENABLE_KERNEL_INSTALL'],
          ['_sd_hosts_or_user_at_host', ''],
          ['_sd_outputmodes',           ''],
          ['_sd_unit_files',            ''],
          ['_sd_machines',              ''],
-         ['_bootctl',                  'ENABLE_EFI'],
+         ['_bootctl',                  'HAVE_GNU_EFI'],
          ['_coredumpctl',              'ENABLE_COREDUMP'],
          ['_hostnamectl',              'ENABLE_HOSTNAMED'],
          ['_localectl',                'ENABLE_LOCALED'],
          ['_loginctl',                 'ENABLE_LOGIND'],
          ['_machinectl',               'ENABLE_MACHINED'],
          ['_networkctl',               'ENABLE_NETWORKD'],
+         ['_oomctl',                   'ENABLE_OOMD'],
          ['_systemd-inhibit',          'ENABLE_LOGIND'],
          ['_resolvectl',               'ENABLE_RESOLVE'],
          ['_systemd-tmpfiles',         'ENABLE_TMPFILES'],
diff --git a/src/ac-power/ac-power.c b/src/ac-power/ac-power.c
index 905da4a..8536350 100644
--- a/src/ac-power/ac-power.c
+++ b/src/ac-power/ac-power.c
@@ -2,8 +2,9 @@
 
 #include <getopt.h>
 
+#include "build.h"
 #include "main-func.h"
-#include "util.h"
+#include "udev-util.h"
 
 static bool arg_verbose = false;
 
@@ -53,7 +54,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
diff --git a/src/activate/activate.c b/src/activate/activate.c
index 8c61c3c..7ab7cc6 100644
--- a/src/activate/activate.c
+++ b/src/activate/activate.c
@@ -9,6 +9,8 @@
 #include "sd-daemon.h"
 
 #include "alloc-util.h"
+#include "build.h"
+#include "env-util.h"
 #include "errno-util.h"
 #include "escape.h"
 #include "fd-util.h"
@@ -22,7 +24,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static char **arg_listen = NULL;
 static bool arg_accept = false;
@@ -48,8 +49,7 @@
 }
 
 static int open_sockets(int *epoll_fd, bool accept) {
-        char **address;
-        int n, fd, r, count = 0;
+        int n, r, count = 0;
 
         n = sd_listen_fds(true);
         if (n < 0)
@@ -57,7 +57,7 @@
         if (n > 0) {
                 log_info("Received %i descriptors via the environment.", n);
 
-                for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd++) {
+                for (int fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd++) {
                         r = fd_cloexec(fd, arg_accept);
                         if (r < 0)
                                 return r;
@@ -68,17 +68,17 @@
 
         /* Close logging and all other descriptors */
         if (arg_listen) {
-                _cleanup_free_ int *except = NULL;
-                int i;
-
-                except = new(int, n);
+                _cleanup_free_ int *except = new(int, n);
                 if (!except)
                         return log_oom();
 
-                for (i = 0; i < n; i++)
+                for (int i = 0; i < n; i++)
                         except[i] = SD_LISTEN_FDS_START + i;
 
                 log_close();
+                log_set_open_when_needed(true);
+                log_settle_target();
+
                 r = close_all_fds(except, n);
                 if (r < 0)
                         return log_error_errno(r, "Failed to close all file descriptors: %m");
@@ -90,24 +90,24 @@
          */
 
         STRV_FOREACH(address, arg_listen) {
-                fd = make_socket_fd(LOG_DEBUG, *address, arg_socket_type, (arg_accept * SOCK_CLOEXEC));
-                if (fd < 0) {
-                        log_open();
-                        return log_error_errno(fd, "Failed to open '%s': %m", *address);
-                }
+                r = make_socket_fd(LOG_DEBUG, *address, arg_socket_type, (arg_accept * SOCK_CLOEXEC));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to open '%s': %m", *address);
 
-                assert(fd == SD_LISTEN_FDS_START + count);
+                assert(r == SD_LISTEN_FDS_START + count);
                 count++;
         }
 
-        if (arg_listen)
+        if (arg_listen) {
                 log_open();
+                log_set_open_when_needed(false);
+        }
 
         *epoll_fd = epoll_create1(EPOLL_CLOEXEC);
         if (*epoll_fd < 0)
                 return log_error_errno(errno, "Failed to create epoll object: %m");
 
-        for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + count; fd++) {
+        for (int fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + count; fd++) {
                 _cleanup_free_ char *name = NULL;
 
                 getsockname_pretty(fd, &name);
@@ -121,67 +121,24 @@
         return count;
 }
 
-static int exec_process(const char *name, char **argv, char **env, int start_fd, size_t n_fds) {
+static int exec_process(const char *name, char **argv, int start_fd, size_t n_fds) {
         _cleanup_strv_free_ char **envp = NULL;
-        _cleanup_free_ char *joined = NULL;
-        size_t n_env = 0, length;
-        const char *tocopy;
-        char **s;
         int r;
 
         if (arg_inetd && n_fds != 1)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "--inetd only supported for single file descriptors.");
 
-        length = strv_length(arg_setenv);
-
-        /* PATH, TERM, HOME, USER, LISTEN_FDS, LISTEN_PID, LISTEN_FDNAMES, NULL */
-        envp = new0(char *, length + 8);
-        if (!envp)
-                return log_oom();
-
-        STRV_FOREACH(s, arg_setenv) {
-
-                if (strchr(*s, '=')) {
-                        char *k;
-
-                        k = strdup(*s);
-                        if (!k)
-                                return log_oom();
-
-                        envp[n_env++] = k;
-                } else {
-                        _cleanup_free_ char *p = NULL;
-                        const char *n;
-
-                        p = strjoin(*s, "=");
-                        if (!p)
-                                return log_oom();
-
-                        n = strv_find_prefix(env, p);
-                        if (!n)
-                                continue;
-
-                        envp[n_env] = strdup(n);
-                        if (!envp[n_env])
-                                return log_oom();
-
-                        n_env++;
-                }
-        }
-
-        FOREACH_STRING(tocopy, "TERM=", "PATH=", "USER=", "HOME=") {
+        FOREACH_STRING(var, "TERM", "PATH", "USER", "HOME") {
                 const char *n;
 
-                n = strv_find_prefix(env, tocopy);
+                n = strv_find_prefix(environ, var);
                 if (!n)
                         continue;
 
-                envp[n_env] = strdup(n);
-                if (!envp[n_env])
-                        return log_oom();
-
-                n_env++;
+                r = strv_extend(&envp, n);
+                if (r < 0)
+                        return r;
         }
 
         if (arg_inetd) {
@@ -201,16 +158,17 @@
                         safe_close(start_fd);
                 }
 
-                if (asprintf((char **) (envp + n_env++), "LISTEN_FDS=%zu", n_fds) < 0)
-                        return log_oom();
+                r = strv_extendf(&envp, "LISTEN_FDS=%zu", n_fds);
+                if (r < 0)
+                        return r;
 
-                if (asprintf((char **) (envp + n_env++), "LISTEN_PID=" PID_FMT, getpid_cached()) < 0)
-                        return log_oom();
+                r = strv_extendf(&envp, "LISTEN_PID=" PID_FMT, getpid_cached());
+                if (r < 0)
+                        return r;
 
                 if (arg_fdnames) {
                         _cleanup_free_ char *names = NULL;
                         size_t len;
-                        char *e;
 
                         len = strv_length(arg_fdnames);
                         if (len == 1)
@@ -226,15 +184,23 @@
                         if (!names)
                                 return log_oom();
 
-                        e = strjoin("LISTEN_FDNAMES=", names);
-                        if (!e)
+                        char *t = strjoin("LISTEN_FDNAMES=", names);
+                        if (!t)
                                 return log_oom();
 
-                        envp[n_env++] = e;
+                        r = strv_consume(&envp, t);
+                        if (r < 0)
+                                return r;
                 }
         }
 
-        joined = strv_join(argv, " ");
+        STRV_FOREACH(s, arg_setenv) {
+                r = strv_env_replace_strdup(&envp, *s);
+                if (r < 0)
+                        return r;
+        }
+
+        _cleanup_free_ char *joined = strv_join(argv, " ");
         if (!joined)
                 return log_oom();
 
@@ -244,7 +210,7 @@
         return log_error_errno(errno, "Failed to execp %s (%s): %m", name, joined);
 }
 
-static int fork_and_exec_process(const char *child, char **argv, char **env, int fd) {
+static int fork_and_exec_process(const char *child, char **argv, int fd) {
         _cleanup_free_ char *joined = NULL;
         pid_t child_pid;
         int r;
@@ -260,7 +226,7 @@
                 return r;
         if (r == 0) {
                 /* In the child */
-                exec_process(child, argv, env, fd, 1);
+                exec_process(child, argv, fd, 1);
                 _exit(EXIT_FAILURE);
         }
 
@@ -268,9 +234,9 @@
         return 0;
 }
 
-static int do_accept(const char *name, char **argv, char **envp, int fd) {
+static int do_accept(const char *name, char **argv, int fd) {
         _cleanup_free_ char *local = NULL, *peer = NULL;
-        _cleanup_close_ int fd_accepted = -1;
+        _cleanup_close_ int fd_accepted = -EBADF;
 
         fd_accepted = accept4(fd, NULL, NULL, 0);
         if (fd_accepted < 0) {
@@ -284,7 +250,7 @@
         (void) getpeername_pretty(fd_accepted, true, &peer);
         log_info("Connection from %s to %s", strna(peer), strna(local));
 
-        return fork_and_exec_process(name, argv, envp, fd_accepted);
+        return fork_and_exec_process(name, argv, fd_accepted);
 }
 
 /* SIGCHLD handler. */
@@ -414,15 +380,13 @@
                         break;
 
                 case 'E':
-                        r = strv_extend(&arg_setenv, optarg);
+                        r = strv_env_replace_strdup_passthrough(&arg_setenv, optarg);
                         if (r < 0)
-                                return log_oom();
-
+                                return log_error_errno(r, "Cannot assign environment variable %s: %m", optarg);
                         break;
 
                 case ARG_FDNAME: {
                         _cleanup_strv_free_ char **names = NULL;
-                        char **s;
 
                         names = strv_split(optarg, ":");
                         if (!names)
@@ -453,7 +417,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind == argc)
@@ -471,9 +435,9 @@
         return 1 /* work to do */;
 }
 
-int main(int argc, char **argv, char **envp) {
+int main(int argc, char **argv) {
         int r, n;
-        int epoll_fd = -1;
+        int epoll_fd = -EBADF;
 
         log_show_color(true);
         log_parse_environment();
@@ -508,14 +472,14 @@
 
                 log_info("Communication attempt on fd %i.", event.data.fd);
                 if (arg_accept) {
-                        r = do_accept(argv[optind], argv + optind, envp, event.data.fd);
+                        r = do_accept(argv[optind], argv + optind, event.data.fd);
                         if (r < 0)
                                 return EXIT_FAILURE;
                 } else
                         break;
         }
 
-        exec_process(argv[optind], argv + optind, envp, SD_LISTEN_FDS_START, (size_t) n);
+        exec_process(argv[optind], argv + optind, SD_LISTEN_FDS_START, (size_t) n);
 
         return EXIT_SUCCESS;
 }
diff --git a/src/analyze/analyze-blame.c b/src/analyze/analyze-blame.c
new file mode 100644
index 0000000..c911268
--- /dev/null
+++ b/src/analyze/analyze-blame.c
@@ -0,0 +1,69 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-blame.h"
+#include "analyze-time-data.h"
+#include "format-table.h"
+
+int verb_blame(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_(unit_times_free_arrayp) UnitTimes *times = NULL;
+        _cleanup_(table_unrefp) Table *table = NULL;
+        TableCell *cell;
+        int n, r;
+
+        r = acquire_bus(&bus, NULL);
+        if (r < 0)
+                return bus_log_connect_error(r, arg_transport);
+
+        n = acquire_time_data(bus, &times);
+        if (n <= 0)
+                return n;
+
+        table = table_new("time", "unit");
+        if (!table)
+                return log_oom();
+
+        table_set_header(table, false);
+
+        assert_se(cell = table_get_cell(table, 0, 0));
+        r = table_set_ellipsize_percent(table, cell, 100);
+        if (r < 0)
+                return r;
+
+        r = table_set_align_percent(table, cell, 100);
+        if (r < 0)
+                return r;
+
+        assert_se(cell = table_get_cell(table, 0, 1));
+        r = table_set_ellipsize_percent(table, cell, 100);
+        if (r < 0)
+                return r;
+
+        r = table_set_sort(table, (size_t) 0);
+        if (r < 0)
+                return r;
+
+        r = table_set_reverse(table, 0, true);
+        if (r < 0)
+                return r;
+
+        for (UnitTimes *u = times; u->has_data; u++) {
+                if (u->time <= 0)
+                        continue;
+
+                r = table_add_many(table,
+                                   TABLE_TIMESPAN_MSEC, u->time,
+                                   TABLE_STRING, u->name);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        pager_open(arg_pager_flags);
+
+        r = table_print(table, NULL);
+        if (r < 0)
+                return r;
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-blame.h b/src/analyze/analyze-blame.h
new file mode 100644
index 0000000..d9aa985
--- /dev/null
+++ b/src/analyze/analyze-blame.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_blame(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-calendar.c b/src/analyze/analyze-calendar.c
new file mode 100644
index 0000000..6daab08
--- /dev/null
+++ b/src/analyze/analyze-calendar.c
@@ -0,0 +1,140 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-calendar.h"
+#include "calendarspec.h"
+#include "format-table.h"
+#include "terminal-util.h"
+
+static int test_calendar_one(usec_t n, const char *p) {
+        _cleanup_(calendar_spec_freep) CalendarSpec *spec = NULL;
+        _cleanup_(table_unrefp) Table *table = NULL;
+        _cleanup_free_ char *t = NULL;
+        TableCell *cell;
+        int r;
+
+        r = calendar_spec_from_string(p, &spec);
+        if (r < 0) {
+                log_error_errno(r, "Failed to parse calendar specification '%s': %m", p);
+                time_parsing_hint(p, /* calendar= */ false, /* timestamp= */ true, /* timespan= */ true);
+                return r;
+        }
+
+        r = calendar_spec_to_string(spec, &t);
+        if (r < 0)
+                return log_error_errno(r, "Failed to format calendar specification '%s': %m", p);
+
+        table = table_new_vertical();
+        if (!table)
+                return log_oom();
+
+        assert_se(cell = table_get_cell(table, 0, 0));
+        r = table_set_ellipsize_percent(table, cell, 100);
+        if (r < 0)
+                return r;
+
+        assert_se(cell = table_get_cell(table, 0, 1));
+        r = table_set_ellipsize_percent(table, cell, 100);
+        if (r < 0)
+                return r;
+
+        if (!streq(t, p)) {
+                r = table_add_many(table,
+                                   TABLE_FIELD, "Original form",
+                                   TABLE_STRING, p);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        r = table_add_many(table,
+                           TABLE_FIELD, "Normalized form",
+                           TABLE_STRING, t);
+        if (r < 0)
+                return table_log_add_error(r);
+
+        for (unsigned i = 0; i < arg_iterations; i++) {
+                usec_t next;
+
+                r = calendar_spec_next_usec(spec, n, &next);
+                if (r == -ENOENT) {
+                        if (i == 0) {
+                                r = table_add_many(table,
+                                                   TABLE_FIELD, "Next elapse",
+                                                   TABLE_STRING, "never",
+                                                   TABLE_SET_COLOR, ansi_highlight_yellow());
+                                if (r < 0)
+                                        return table_log_add_error(r);
+                        }
+                        break;
+                }
+                if (r < 0)
+                        return log_error_errno(r, "Failed to determine next elapse for '%s': %m", p);
+
+                if (i == 0) {
+                        r = table_add_many(table,
+                                           TABLE_FIELD, "Next elapse",
+                                           TABLE_TIMESTAMP, next,
+                                           TABLE_SET_COLOR, ansi_highlight_blue());
+                        if (r < 0)
+                                return table_log_add_error(r);
+                } else {
+                        int k = DECIMAL_STR_WIDTH(i + 1);
+
+                        if (k < 8)
+                                k = 8 - k;
+                        else
+                                k = 0;
+
+                        r = table_add_cell_stringf_full(table, NULL, TABLE_FIELD, "Iteration #%u", i+1);
+                        if (r < 0)
+                                return table_log_add_error(r);
+
+                        r = table_add_many(table,
+                                           TABLE_TIMESTAMP, next,
+                                           TABLE_SET_COLOR, ansi_highlight_blue());
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
+
+                if (!in_utc_timezone()) {
+                        r = table_add_many(table,
+                                           TABLE_FIELD, "(in UTC)",
+                                           TABLE_TIMESTAMP_UTC, next);
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
+
+                r = table_add_many(table,
+                                   TABLE_FIELD, "From now",
+                                   TABLE_TIMESTAMP_RELATIVE, next);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                n = next;
+        }
+
+        return table_print(table, NULL);
+}
+
+int verb_calendar(int argc, char *argv[], void *userdata) {
+        int r = 0;
+        usec_t n;
+
+        if (arg_base_time != USEC_INFINITY)
+                n = arg_base_time;
+        else
+                n = now(CLOCK_REALTIME); /* We want to use the same "base" for all expressions */
+
+        STRV_FOREACH(p, strv_skip(argv, 1)) {
+                int k;
+
+                k = test_calendar_one(n, *p);
+                if (r == 0 && k < 0)
+                        r = k;
+
+                if (p[1])
+                        putchar('\n');
+        }
+
+        return r;
+}
diff --git a/src/analyze/analyze-calendar.h b/src/analyze/analyze-calendar.h
new file mode 100644
index 0000000..3d6eac2
--- /dev/null
+++ b/src/analyze/analyze-calendar.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_calendar(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-capability.c b/src/analyze/analyze-capability.c
new file mode 100644
index 0000000..8072175
--- /dev/null
+++ b/src/analyze/analyze-capability.c
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-capability.h"
+#include "cap-list.h"
+#include "capability-util.h"
+#include "format-table.h"
+
+int verb_capabilities(int argc, char *argv[], void *userdata) {
+        _cleanup_(table_unrefp) Table *table = NULL;
+        unsigned last_cap;
+        int r;
+
+        table = table_new("name", "number");
+        if (!table)
+                return log_oom();
+
+        (void) table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
+
+        /* Determine the maximum of the last cap known by the kernel and by us */
+        last_cap = MAX((unsigned) CAP_LAST_CAP, cap_last_cap());
+
+        if (strv_isempty(strv_skip(argv, 1)))
+                for (unsigned c = 0; c <= last_cap; c++) {
+                        r = table_add_many(table,
+                                           TABLE_STRING, capability_to_name(c) ?: "cap_???",
+                                           TABLE_UINT, c);
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
+        else {
+                for (int i = 1; i < argc; i++) {
+                        int c;
+
+                        c = capability_from_name(argv[i]);
+                        if (c < 0 || (unsigned) c > last_cap)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Capability \"%s\" not known.", argv[i]);
+
+                        r = table_add_many(table,
+                                           TABLE_STRING, capability_to_name(c) ?: "cap_???",
+                                           TABLE_UINT, (unsigned) c);
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
+
+                (void) table_set_sort(table, (size_t) 1);
+        }
+
+        pager_open(arg_pager_flags);
+
+        r = table_print(table, NULL);
+        if (r < 0)
+                return r;
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-capability.h b/src/analyze/analyze-capability.h
new file mode 100644
index 0000000..07ff088
--- /dev/null
+++ b/src/analyze/analyze-capability.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_capabilities(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-cat-config.c b/src/analyze/analyze-cat-config.c
new file mode 100644
index 0000000..08184ce
--- /dev/null
+++ b/src/analyze/analyze-cat-config.c
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-cat-config.h"
+#include "conf-files.h"
+#include "constants.h"
+#include "nulstr-util.h"
+#include "path-util.h"
+#include "pretty-print.h"
+#include "strv.h"
+
+int verb_cat_config(int argc, char *argv[], void *userdata) {
+        char **list;
+        int r;
+
+        pager_open(arg_pager_flags);
+
+        list = strv_skip(argv, 1);
+        STRV_FOREACH(arg, list) {
+                const char *t = NULL;
+
+                if (arg != list)
+                        print_separator();
+
+                if (path_is_absolute(*arg)) {
+                        NULSTR_FOREACH(dir, CONF_PATHS_NULSTR("")) {
+                                t = path_startswith(*arg, dir);
+                                if (t)
+                                        break;
+                        }
+
+                        if (!t)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Path %s does not start with any known prefix.", *arg);
+                } else
+                        t = *arg;
+
+                r = conf_files_cat(arg_root, t);
+                if (r < 0)
+                        return r;
+        }
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-cat-config.h b/src/analyze/analyze-cat-config.h
new file mode 100644
index 0000000..64e87a3
--- /dev/null
+++ b/src/analyze/analyze-cat-config.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_cat_config(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-compare-versions.c b/src/analyze/analyze-compare-versions.c
new file mode 100644
index 0000000..07b52a5
--- /dev/null
+++ b/src/analyze/analyze-compare-versions.c
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stdio.h>
+
+#include "analyze-compare-versions.h"
+#include "compare-operator.h"
+#include "macro.h"
+#include "string-util.h"
+#include "strv.h"
+
+int verb_compare_versions(int argc, char *argv[], void *userdata) {
+        int r;
+
+        assert(IN_SET(argc, 3, 4));
+        assert(argv);
+
+        if (argc == 3) {
+                r = strverscmp_improved(ASSERT_PTR(argv[1]), ASSERT_PTR(argv[2]));
+                printf("%s %s %s\n",
+                       isempty(argv[1]) ? "''" : argv[1],
+                       comparison_operator(r),
+                       isempty(argv[2]) ? "''" : argv[2]);
+
+                /* This matches the exit convention used by rpmdev-vercmp.
+                 * We don't use named values because 11 and 12 don't have names. */
+                return r < 0 ? 12 : r > 0 ? 11 : 0;
+
+        } else {
+                const char *op = ASSERT_PTR(argv[2]);
+                CompareOperator operator;
+
+                operator = parse_compare_operator(&op, COMPARE_ALLOW_TEXTUAL);
+                if (operator < 0 || !isempty(op))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown operator \"%s\".", op);
+
+                r = version_or_fnmatch_compare(operator, ASSERT_PTR(argv[1]), ASSERT_PTR(argv[3]));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to compare versions: %m");
+
+                return r ? EXIT_SUCCESS : EXIT_FAILURE;
+        }
+}
diff --git a/src/analyze/analyze-compare-versions.h b/src/analyze/analyze-compare-versions.h
new file mode 100644
index 0000000..ac90ede
--- /dev/null
+++ b/src/analyze/analyze-compare-versions.h
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+int verb_compare_versions(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-condition.c b/src/analyze/analyze-condition.c
index 241c188..b29fc0c 100644
--- a/src/analyze/analyze-condition.c
+++ b/src/analyze/analyze-condition.c
@@ -2,7 +2,9 @@
 
 #include <stdlib.h>
 
+#include "analyze.h"
 #include "analyze-condition.h"
+#include "analyze-verify-util.h"
 #include "condition.h"
 #include "conf-parser.h"
 #include "load-fragment.h"
@@ -51,12 +53,10 @@
 
 _printf_(7, 8)
 static int log_helper(void *userdata, int level, int error, const char *file, int line, const char *func, const char *format, ...) {
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         va_list ap;
         int r;
 
-        assert(u);
-
         /* "upgrade" debug messages */
         level = MIN(LOG_INFO, level);
 
@@ -72,29 +72,55 @@
         return r;
 }
 
-int verify_conditions(char **lines, UnitFileScope scope) {
+static int verify_conditions(char **lines, LookupScope scope, const char *unit, const char *root) {
         _cleanup_(manager_freep) Manager *m = NULL;
         Unit *u;
-        char **line;
         int r, q = 1;
 
+        if (unit) {
+                _cleanup_strv_free_ char **filenames = NULL;
+                _cleanup_free_ char *var = NULL;
+
+                filenames = strv_new(unit);
+                if (!filenames)
+                        return log_oom();
+
+                r = verify_generate_path(&var, filenames);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to generate unit load path: %m");
+
+                assert_se(set_unit_path(var) >= 0);
+        }
+
         r = manager_new(scope, MANAGER_TEST_RUN_MINIMAL, &m);
         if (r < 0)
                 return log_error_errno(r, "Failed to initialize manager: %m");
 
         log_debug("Starting manager...");
-        r = manager_startup(m, NULL, NULL);
+        r = manager_startup(m, /* serialization= */ NULL, /* fds= */ NULL, root);
         if (r < 0)
                 return r;
 
-        r = unit_new_for_name(m, sizeof(Service), "test.service", &u);
-        if (r < 0)
-                return log_error_errno(r, "Failed to create test.service: %m");
+        if (unit) {
+                _cleanup_free_ char *prepared = NULL;
 
-        STRV_FOREACH(line, lines) {
-                r = parse_condition(u, *line);
+                r = verify_prepare_filename(unit, &prepared);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to prepare filename %s: %m", unit);
+
+                r = manager_load_startable_unit_or_warn(m, NULL, prepared, &u);
                 if (r < 0)
                         return r;
+        } else {
+                r = unit_new_for_name(m, sizeof(Service), "test.service", &u);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to create test.service: %m");
+
+                STRV_FOREACH(line, lines) {
+                        r = parse_condition(u, *line);
+                        if (r < 0)
+                                return r;
+                }
         }
 
         r = condition_test_list(u->asserts, environ, assert_type_to_string, log_helper, u);
@@ -107,3 +133,13 @@
 
         return r > 0 && q > 0 ? 0 : -EIO;
 }
+
+int verb_condition(int argc, char *argv[], void *userdata) {
+        int r;
+
+        r = verify_conditions(strv_skip(argv, 1), arg_scope, arg_unit, arg_root);
+        if (r < 0)
+                return r;
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-condition.h b/src/analyze/analyze-condition.h
index 7b52669..28ef51a 100644
--- a/src/analyze/analyze-condition.h
+++ b/src/analyze/analyze-condition.h
@@ -1,6 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "install.h"
-
-int verify_conditions(char **lines, UnitFileScope scope);
+int verb_condition(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-critical-chain.c b/src/analyze/analyze-critical-chain.c
new file mode 100644
index 0000000..f782f95
--- /dev/null
+++ b/src/analyze/analyze-critical-chain.c
@@ -0,0 +1,230 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze-critical-chain.h"
+#include "analyze-time-data.h"
+#include "analyze.h"
+#include "bus-error.h"
+#include "copy.h"
+#include "path-util.h"
+#include "sort-util.h"
+#include "special.h"
+#include "static-destruct.h"
+#include "strv.h"
+#include "terminal-util.h"
+
+static Hashmap *unit_times_hashmap = NULL;
+STATIC_DESTRUCTOR_REGISTER(unit_times_hashmap, hashmap_freep);
+
+static int list_dependencies_print(
+                const char *name,
+                unsigned level,
+                unsigned branches,
+                bool last,
+                UnitTimes *times,
+                BootTimes *boot) {
+
+        for (unsigned i = level; i != 0; i--)
+                printf("%s", special_glyph(branches & (1 << (i-1)) ? SPECIAL_GLYPH_TREE_VERTICAL : SPECIAL_GLYPH_TREE_SPACE));
+
+        printf("%s", special_glyph(last ? SPECIAL_GLYPH_TREE_RIGHT : SPECIAL_GLYPH_TREE_BRANCH));
+
+        if (times) {
+                if (times->time > 0)
+                        printf("%s%s @%s +%s%s", ansi_highlight_red(), name,
+                               FORMAT_TIMESPAN(times->activating - boot->userspace_time, USEC_PER_MSEC),
+                               FORMAT_TIMESPAN(times->time, USEC_PER_MSEC), ansi_normal());
+                else if (times->activated > boot->userspace_time)
+                        printf("%s @%s", name, FORMAT_TIMESPAN(times->activated - boot->userspace_time, USEC_PER_MSEC));
+                else
+                        printf("%s", name);
+        } else
+                printf("%s", name);
+        printf("\n");
+
+        return 0;
+}
+
+static int list_dependencies_get_dependencies(sd_bus *bus, const char *name, char ***deps) {
+        _cleanup_free_ char *path = NULL;
+
+        assert(bus);
+        assert(name);
+        assert(deps);
+
+        path = unit_dbus_path_from_name(name);
+        if (!path)
+                return -ENOMEM;
+
+        return bus_get_unit_property_strv(bus, path, "After", deps);
+}
+
+static int list_dependencies_compare(char *const *a, char *const *b) {
+        usec_t usa = 0, usb = 0;
+        UnitTimes *times;
+
+        times = hashmap_get(unit_times_hashmap, *a);
+        if (times)
+                usa = times->activated;
+        times = hashmap_get(unit_times_hashmap, *b);
+        if (times)
+                usb = times->activated;
+
+        return CMP(usb, usa);
+}
+
+static bool times_in_range(const UnitTimes *times, const BootTimes *boot) {
+        return times && times->activated > 0 && times->activated <= boot->finish_time;
+}
+
+static int list_dependencies_one(sd_bus *bus, const char *name, unsigned level, char ***units, unsigned branches) {
+        _cleanup_strv_free_ char **deps = NULL;
+        int r;
+        usec_t service_longest = 0;
+        int to_print = 0;
+        UnitTimes *times;
+        BootTimes *boot;
+
+        if (strv_extend(units, name))
+                return log_oom();
+
+        r = list_dependencies_get_dependencies(bus, name, &deps);
+        if (r < 0)
+                return r;
+
+        typesafe_qsort(deps, strv_length(deps), list_dependencies_compare);
+
+        r = acquire_boot_times(bus, &boot);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(c, deps) {
+                times = hashmap_get(unit_times_hashmap, *c);
+                if (times_in_range(times, boot) && times->activated >= service_longest)
+                        service_longest = times->activated;
+        }
+
+        if (service_longest == 0)
+                return r;
+
+        STRV_FOREACH(c, deps) {
+                times = hashmap_get(unit_times_hashmap, *c);
+                if (times_in_range(times, boot) && service_longest - times->activated <= arg_fuzz)
+                        to_print++;
+        }
+
+        if (!to_print)
+                return r;
+
+        STRV_FOREACH(c, deps) {
+                times = hashmap_get(unit_times_hashmap, *c);
+                if (!times_in_range(times, boot) || service_longest - times->activated > arg_fuzz)
+                        continue;
+
+                to_print--;
+
+                r = list_dependencies_print(*c, level, branches, to_print == 0, times, boot);
+                if (r < 0)
+                        return r;
+
+                if (strv_contains(*units, *c)) {
+                        r = list_dependencies_print("...", level + 1, (branches << 1) | (to_print ? 1 : 0),
+                                                    true, NULL, boot);
+                        if (r < 0)
+                                return r;
+                        continue;
+                }
+
+                r = list_dependencies_one(bus, *c, level + 1, units, (branches << 1) | (to_print ? 1 : 0));
+                if (r < 0)
+                        return r;
+
+                if (to_print == 0)
+                        break;
+        }
+        return 0;
+}
+
+static int list_dependencies(sd_bus *bus, const char *name) {
+        _cleanup_strv_free_ char **units = NULL;
+        UnitTimes *times;
+        int r;
+        const char *id;
+        _cleanup_free_ char *path = NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        BootTimes *boot;
+
+        assert(bus);
+
+        path = unit_dbus_path_from_name(name);
+        if (!path)
+                return -ENOMEM;
+
+        r = sd_bus_get_property(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        path,
+                        "org.freedesktop.systemd1.Unit",
+                        "Id",
+                        &error,
+                        &reply,
+                        "s");
+        if (r < 0)
+                return log_error_errno(r, "Failed to get ID: %s", bus_error_message(&error, r));
+
+        r = sd_bus_message_read(reply, "s", &id);
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        times = hashmap_get(unit_times_hashmap, id);
+
+        r = acquire_boot_times(bus, &boot);
+        if (r < 0)
+                return r;
+
+        if (times) {
+                if (times->time)
+                        printf("%s%s +%s%s\n", ansi_highlight_red(), id,
+                               FORMAT_TIMESPAN(times->time, USEC_PER_MSEC), ansi_normal());
+                else if (times->activated > boot->userspace_time)
+                        printf("%s @%s\n", id,
+                               FORMAT_TIMESPAN(times->activated - boot->userspace_time, USEC_PER_MSEC));
+                else
+                        printf("%s\n", id);
+        }
+
+        return list_dependencies_one(bus, name, 0, &units, 0);
+}
+
+int verb_critical_chain(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_(unit_times_free_arrayp) UnitTimes *times = NULL;
+        int n, r;
+
+        r = acquire_bus(&bus, NULL);
+        if (r < 0)
+                return bus_log_connect_error(r, arg_transport);
+
+        n = acquire_time_data(bus, &times);
+        if (n <= 0)
+                return n;
+
+        for (UnitTimes *u = times; u->has_data; u++) {
+                r = hashmap_ensure_put(&unit_times_hashmap, &string_hash_ops, u->name, u);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to add entry to hashmap: %m");
+        }
+
+        pager_open(arg_pager_flags);
+
+        puts("The time when unit became active or started is printed after the \"@\" character.\n"
+             "The time the unit took to start is printed after the \"+\" character.\n");
+
+        if (argc > 1)
+                STRV_FOREACH(name, strv_skip(argv, 1))
+                        list_dependencies(bus, *name);
+        else
+                list_dependencies(bus, SPECIAL_DEFAULT_TARGET);
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-critical-chain.h b/src/analyze/analyze-critical-chain.h
new file mode 100644
index 0000000..844249c
--- /dev/null
+++ b/src/analyze/analyze-critical-chain.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_critical_chain(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-dot.c b/src/analyze/analyze-dot.c
new file mode 100644
index 0000000..bf8aa81
--- /dev/null
+++ b/src/analyze/analyze-dot.c
@@ -0,0 +1,182 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-dot.h"
+#include "bus-error.h"
+#include "bus-locator.h"
+#include "bus-unit-util.h"
+#include "glob-util.h"
+#include "terminal-util.h"
+
+static int graph_one_property(
+                sd_bus *bus,
+                const UnitInfo *u,
+                const char *prop,
+                const char *color,
+                char *patterns[],
+                char *from_patterns[],
+                char *to_patterns[]) {
+
+        _cleanup_strv_free_ char **units = NULL;
+        bool match_patterns;
+        int r;
+
+        assert(u);
+        assert(prop);
+        assert(color);
+
+        match_patterns = strv_fnmatch(patterns, u->id);
+
+        if (!strv_isempty(from_patterns) && !match_patterns && !strv_fnmatch(from_patterns, u->id))
+                return 0;
+
+        r = bus_get_unit_property_strv(bus, u->unit_path, prop, &units);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(unit, units) {
+                bool match_patterns2;
+
+                match_patterns2 = strv_fnmatch(patterns, *unit);
+
+                if (!strv_isempty(to_patterns) && !match_patterns2 && !strv_fnmatch(to_patterns, *unit))
+                        continue;
+
+                if (!strv_isempty(patterns) && !match_patterns && !match_patterns2)
+                        continue;
+
+                printf("\t\"%s\"->\"%s\" [color=\"%s\"];\n", u->id, *unit, color);
+        }
+
+        return 0;
+}
+
+static int graph_one(sd_bus *bus, const UnitInfo *u, char *patterns[], char *from_patterns[], char *to_patterns[]) {
+        int r;
+
+        assert(bus);
+        assert(u);
+
+        if (IN_SET(arg_dot, DEP_ORDER, DEP_ALL)) {
+                r = graph_one_property(bus, u, "After", "green", patterns, from_patterns, to_patterns);
+                if (r < 0)
+                        return r;
+        }
+
+        if (IN_SET(arg_dot, DEP_REQUIRE, DEP_ALL)) {
+                r = graph_one_property(bus, u, "Requires", "black", patterns, from_patterns, to_patterns);
+                if (r < 0)
+                        return r;
+                r = graph_one_property(bus, u, "Requisite", "darkblue", patterns, from_patterns, to_patterns);
+                if (r < 0)
+                        return r;
+                r = graph_one_property(bus, u, "Wants", "grey66", patterns, from_patterns, to_patterns);
+                if (r < 0)
+                        return r;
+                r = graph_one_property(bus, u, "Conflicts", "red", patterns, from_patterns, to_patterns);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int expand_patterns(sd_bus *bus, char **patterns, char ***ret) {
+        _cleanup_strv_free_ char **expanded_patterns = NULL;
+        int r;
+
+        STRV_FOREACH(pattern, patterns) {
+                _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+                _cleanup_free_ char *unit = NULL, *unit_id = NULL;
+
+                if (strv_extend(&expanded_patterns, *pattern) < 0)
+                        return log_oom();
+
+                if (string_is_glob(*pattern))
+                        continue;
+
+                unit = unit_dbus_path_from_name(*pattern);
+                if (!unit)
+                        return log_oom();
+
+                r = sd_bus_get_property_string(
+                                bus,
+                                "org.freedesktop.systemd1",
+                                unit,
+                                "org.freedesktop.systemd1.Unit",
+                                "Id",
+                                &error,
+                                &unit_id);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get ID: %s", bus_error_message(&error, r));
+
+                if (!streq(*pattern, unit_id)) {
+                        if (strv_extend(&expanded_patterns, unit_id) < 0)
+                                return log_oom();
+                }
+        }
+
+        *ret = TAKE_PTR(expanded_patterns); /* do not free */
+
+        return 0;
+}
+
+int verb_dot(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_strv_free_ char **expanded_patterns = NULL;
+        _cleanup_strv_free_ char **expanded_from_patterns = NULL;
+        _cleanup_strv_free_ char **expanded_to_patterns = NULL;
+        int r;
+        UnitInfo u;
+
+        r = acquire_bus(&bus, NULL);
+        if (r < 0)
+                return bus_log_connect_error(r, arg_transport);
+
+        r = expand_patterns(bus, strv_skip(argv, 1), &expanded_patterns);
+        if (r < 0)
+                return r;
+
+        r = expand_patterns(bus, arg_dot_from_patterns, &expanded_from_patterns);
+        if (r < 0)
+                return r;
+
+        r = expand_patterns(bus, arg_dot_to_patterns, &expanded_to_patterns);
+        if (r < 0)
+                return r;
+
+        r = bus_call_method(bus, bus_systemd_mgr, "ListUnits", &error, &reply, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to list units: %s", bus_error_message(&error, r));
+
+        r = sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "(ssssssouso)");
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        printf("digraph systemd {\n");
+
+        while ((r = bus_parse_unit_info(reply, &u)) > 0) {
+
+                r = graph_one(bus, &u, expanded_patterns, expanded_from_patterns, expanded_to_patterns);
+                if (r < 0)
+                        return r;
+        }
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        printf("}\n");
+
+        log_info("   Color legend: black     = Requires\n"
+                 "                 dark blue = Requisite\n"
+                 "                 dark grey = Wants\n"
+                 "                 red       = Conflicts\n"
+                 "                 green     = After\n");
+
+        if (on_tty() && !arg_quiet)
+                log_notice("-- You probably want to process this output with graphviz' dot tool.\n"
+                           "-- Try a shell pipeline like 'systemd-analyze dot | dot -Tsvg > systemd.svg'!\n");
+
+        return 0;
+}
diff --git a/src/analyze/analyze-dot.h b/src/analyze/analyze-dot.h
new file mode 100644
index 0000000..144b43d
--- /dev/null
+++ b/src/analyze/analyze-dot.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_dot(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-dump.c b/src/analyze/analyze-dump.c
new file mode 100644
index 0000000..2e838c9
--- /dev/null
+++ b/src/analyze/analyze-dump.c
@@ -0,0 +1,160 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "sd-bus.h"
+
+#include "analyze-dump.h"
+#include "analyze.h"
+#include "bus-error.h"
+#include "bus-locator.h"
+#include "bus-util.h"
+#include "copy.h"
+
+static int dump_fallback(sd_bus *bus) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        const char *text;
+        int r;
+
+        assert(bus);
+
+        r = bus_call_method(bus, bus_systemd_mgr, "Dump", &error, &reply, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to call Dump: %s", bus_error_message(&error, r));
+
+        r = sd_bus_message_read(reply, "s", &text);
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        fputs(text, stdout);
+        return 0;
+}
+
+static int dump_fd_reply(sd_bus_message *message) {
+        int fd, r;
+
+        r = sd_bus_message_read(message, "h", &fd);
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        fflush(stdout);
+        r = copy_bytes(fd, STDOUT_FILENO, UINT64_MAX, 0);
+        if (r < 0)
+                return r;
+
+        return 1;  /* Success */
+}
+
+static int dump(sd_bus *bus) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        int r;
+
+        r = bus_call_method(bus, bus_systemd_mgr, "DumpByFileDescriptor", &error, &reply, NULL);
+        if (IN_SET(r, -EACCES, -EBADR))
+                return 0;  /* Fall back to non-fd method. We need to do this even if the bus supports sending
+                            * fds to cater to very old managers which didn't have the fd-based method. */
+        if (r < 0)
+                return log_error_errno(r, "Failed to call DumpByFileDescriptor: %s",
+                                       bus_error_message(&error, r));
+
+        return dump_fd_reply(reply);
+}
+
+static int dump_patterns_fallback(sd_bus *bus, char **patterns) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL, *m = NULL;
+        const char *text;
+        int r;
+
+        r = bus_message_new_method_call(bus, &m, bus_systemd_mgr, "DumpUnitsMatchingPatterns");
+        if (r < 0)
+                return bus_log_create_error(r);
+
+        r = sd_bus_message_append_strv(m, patterns);
+        if (r < 0)
+                return bus_log_create_error(r);
+
+        r = sd_bus_call(bus, m, 0, &error, &reply);
+        if (r < 0)
+                return log_error_errno(r, "Failed to call DumpUnitsMatchingPatterns: %s",
+                                       bus_error_message(&error, r));
+
+        r = sd_bus_message_read(reply, "s", &text);
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        fputs(text, stdout);
+        return 0;
+}
+
+static int dump_patterns(sd_bus *bus, char **patterns) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL, *m = NULL;
+        int r;
+
+        r = bus_message_new_method_call(bus, &m, bus_systemd_mgr, "DumpUnitsMatchingPatternsByFileDescriptor");
+        if (r < 0)
+                return bus_log_create_error(r);
+
+        r = sd_bus_message_append_strv(m, patterns);
+        if (r < 0)
+                return bus_log_create_error(r);
+
+        r = sd_bus_call(bus, m, 0, &error, &reply);
+        if (r < 0)
+                return log_error_errno(r, "Failed to call DumpUnitsMatchingPatternsByFileDescriptor: %s",
+                                       bus_error_message(&error, r));
+
+        return dump_fd_reply(reply);
+}
+
+static int mangle_patterns(char **args, char ***ret) {
+        _cleanup_strv_free_ char **mangled = NULL;
+        int r;
+
+        STRV_FOREACH(arg, args) {
+                char *t;
+
+                r = unit_name_mangle_with_suffix(*arg, NULL, UNIT_NAME_MANGLE_GLOB, ".service", &t);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to mangle name '%s': %m", *arg);
+
+                r = strv_consume(&mangled, t);
+                if (r < 0)
+                        return log_oom();
+        }
+
+        if (strv_isempty(mangled))
+                mangled = strv_free(mangled);
+
+        *ret = TAKE_PTR(mangled);
+        return 0;
+}
+
+int verb_dump(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_strv_free_ char **patterns = NULL;
+        int r;
+
+        r = acquire_bus(&bus, NULL);
+        if (r < 0)
+                return bus_log_connect_error(r, arg_transport);
+
+        pager_open(arg_pager_flags);
+
+        r = mangle_patterns(strv_skip(argv, 1), &patterns);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_can_send(bus, SD_BUS_TYPE_UNIX_FD);
+        if (r < 0)
+                return log_error_errno(r, "Unable to determine if bus connection supports fd passing: %m");
+        if (r > 0)
+                r = patterns ? dump_patterns(bus, patterns) : dump(bus);
+        if (r == 0) /* wasn't supported */
+                r = patterns ? dump_patterns_fallback(bus, patterns) : dump_fallback(bus);
+        if (r < 0)
+                return r;
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-dump.h b/src/analyze/analyze-dump.h
new file mode 100644
index 0000000..5d6107c
--- /dev/null
+++ b/src/analyze/analyze-dump.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_dump(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-exit-status.c b/src/analyze/analyze-exit-status.c
new file mode 100644
index 0000000..3a8d3f4
--- /dev/null
+++ b/src/analyze/analyze-exit-status.c
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-exit-status.h"
+#include "exit-status.h"
+#include "format-table.h"
+
+int verb_exit_status(int argc, char *argv[], void *userdata) {
+        _cleanup_(table_unrefp) Table *table = NULL;
+        int r;
+
+        table = table_new("name", "status", "class");
+        if (!table)
+                return log_oom();
+
+        r = table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
+        if (r < 0)
+                return log_error_errno(r, "Failed to right-align status: %m");
+
+        if (strv_isempty(strv_skip(argv, 1)))
+                for (size_t i = 0; i < ELEMENTSOF(exit_status_mappings); i++) {
+                        if (!exit_status_mappings[i].name)
+                                continue;
+
+                        r = table_add_many(table,
+                                           TABLE_STRING, exit_status_mappings[i].name,
+                                           TABLE_INT, (int) i,
+                                           TABLE_STRING, exit_status_class(i));
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
+        else
+                for (int i = 1; i < argc; i++) {
+                        int status;
+
+                        status = exit_status_from_string(argv[i]);
+                        if (status < 0)
+                                return log_error_errno(status, "Invalid exit status \"%s\".", argv[i]);
+
+                        assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings));
+                        r = table_add_many(table,
+                                           TABLE_STRING, exit_status_mappings[status].name ?: "-",
+                                           TABLE_INT, status,
+                                           TABLE_STRING, exit_status_class(status) ?: "-");
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
+
+        pager_open(arg_pager_flags);
+
+        r = table_print(table, NULL);
+        if (r < 0)
+                return r;
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-exit-status.h b/src/analyze/analyze-exit-status.h
new file mode 100644
index 0000000..ce14cdb
--- /dev/null
+++ b/src/analyze/analyze-exit-status.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_exit_status(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-filesystems.c b/src/analyze/analyze-filesystems.c
new file mode 100644
index 0000000..582e04e
--- /dev/null
+++ b/src/analyze/analyze-filesystems.c
@@ -0,0 +1,221 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-filesystems.h"
+#include "fileio.h"
+#include "filesystems.h"
+#include "set.h"
+#include "strv.h"
+#include "terminal-util.h"
+
+static int load_available_kernel_filesystems(Set **ret) {
+        _cleanup_set_free_ Set *filesystems = NULL;
+        _cleanup_free_ char *t = NULL;
+        int r;
+
+        assert(ret);
+
+        /* Let's read the available filesystems */
+
+        r = read_virtual_file("/proc/filesystems", SIZE_MAX, &t, NULL);
+        if (r < 0)
+                return r;
+
+        for (int i = 0;;) {
+                _cleanup_free_ char *line = NULL;
+                const char *p;
+
+                r = string_extract_line(t, i++, &line);
+                if (r < 0)
+                        return log_oom();
+                if (r == 0)
+                        break;
+
+                if (!line)
+                        line = t;
+
+                p = strchr(line, '\t');
+                if (!p)
+                        continue;
+
+                p += strspn(p, WHITESPACE);
+
+                r = set_put_strdup(&filesystems, p);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to add filesystem to list: %m");
+        }
+
+        *ret = TAKE_PTR(filesystems);
+        return 0;
+}
+
+static void filesystem_set_remove(Set *s, const FilesystemSet *set) {
+        NULSTR_FOREACH(filesystem, set->value) {
+                if (filesystem[0] == '@')
+                        continue;
+
+                free(set_remove(s, filesystem));
+        }
+}
+
+static void dump_filesystem_set(const FilesystemSet *set) {
+        int r;
+
+        if (!set)
+                return;
+
+        printf("%s%s%s\n"
+               "    # %s\n",
+               ansi_highlight(),
+               set->name,
+               ansi_normal(),
+               set->help);
+
+        NULSTR_FOREACH(filesystem, set->value) {
+                const statfs_f_type_t *magic;
+
+                if (filesystem[0] == '@') {
+                        printf("    %s%s%s\n", ansi_underline(), filesystem, ansi_normal());
+                        continue;
+                }
+
+                r = fs_type_from_string(filesystem, &magic);
+                assert_se(r >= 0);
+
+                printf("    %s", filesystem);
+
+                for (size_t i = 0; magic[i] != 0; i++) {
+                        const char *primary;
+                        if (i == 0)
+                                printf(" %s(magic: ", ansi_grey());
+                        else
+                                printf(", ");
+
+                        printf("0x%llx", (unsigned long long) magic[i]);
+
+                        primary = fs_type_to_string(magic[i]);
+                        if (primary && !streq(primary, filesystem))
+                                printf("[%s]", primary);
+
+                        if (magic[i+1] == 0)
+                                printf(")%s", ansi_normal());
+                }
+
+                printf("\n");
+        }
+}
+
+int verb_filesystems(int argc, char *argv[], void *userdata) {
+        bool first = true;
+
+#if ! HAVE_LIBBPF
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Not compiled with libbpf support, sorry.");
+#endif
+
+        pager_open(arg_pager_flags);
+
+        if (strv_isempty(strv_skip(argv, 1))) {
+                _cleanup_set_free_ Set *kernel = NULL, *known = NULL;
+                int k;
+
+                NULSTR_FOREACH(fs, filesystem_sets[FILESYSTEM_SET_KNOWN].value)
+                        if (set_put_strdup(&known, fs) < 0)
+                                return log_oom();
+
+                k = load_available_kernel_filesystems(&kernel);
+
+                for (FilesystemGroups i = 0; i < _FILESYSTEM_SET_MAX; i++) {
+                        const FilesystemSet *set = filesystem_sets + i;
+                        if (!first)
+                                puts("");
+
+                        dump_filesystem_set(set);
+                        filesystem_set_remove(kernel, set);
+                        if (i != FILESYSTEM_SET_KNOWN)
+                                filesystem_set_remove(known, set);
+                        first = false;
+                }
+
+                if (arg_quiet)  /* Let's not show the extra stuff in quiet mode */
+                        return 0;
+
+                if (!set_isempty(known)) {
+                        _cleanup_free_ char **l = NULL;
+
+                        printf("\n"
+                               "# %sUngrouped filesystems%s (known but not included in any of the groups except @known):\n",
+                               ansi_highlight(), ansi_normal());
+
+                        l = set_get_strv(known);
+                        if (!l)
+                                return log_oom();
+
+                        strv_sort(l);
+
+                        STRV_FOREACH(filesystem, l) {
+                                const statfs_f_type_t *magic;
+                                bool is_primary = false;
+
+                                assert_se(fs_type_from_string(*filesystem, &magic) >= 0);
+
+                                for (size_t i = 0; magic[i] != 0; i++) {
+                                        const char *primary;
+
+                                        primary = fs_type_to_string(magic[i]);
+                                        assert(primary);
+
+                                        if (streq(primary, *filesystem))
+                                                is_primary = true;
+                                }
+
+                                if (!is_primary) {
+                                        log_debug("Skipping ungrouped file system '%s', because it's an alias for another one.", *filesystem);
+                                        continue;
+                                }
+
+                                printf("#   %s\n", *filesystem);
+                        }
+                }
+
+                if (k < 0) {
+                        fputc('\n', stdout);
+                        fflush(stdout);
+                        log_notice_errno(k, "# Not showing unlisted filesystems, couldn't retrieve kernel filesystem list: %m");
+                } else if (!set_isempty(kernel)) {
+                        _cleanup_free_ char **l = NULL;
+
+                        printf("\n"
+                               "# %sUnlisted filesystems%s (available to the local kernel, but not included in any of the groups listed above):\n",
+                               ansi_highlight(), ansi_normal());
+
+                        l = set_get_strv(kernel);
+                        if (!l)
+                                return log_oom();
+
+                        strv_sort(l);
+
+                        STRV_FOREACH(filesystem, l)
+                                printf("#   %s\n", *filesystem);
+                }
+        } else
+                STRV_FOREACH(name, strv_skip(argv, 1)) {
+                        const FilesystemSet *set;
+
+                        if (!first)
+                                puts("");
+
+                        set = filesystem_set_find(*name);
+                        if (!set) {
+                                /* make sure the error appears below normal output */
+                                fflush(stdout);
+
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
+                                                       "Filesystem set \"%s\" not found.", *name);
+                        }
+
+                        dump_filesystem_set(set);
+                        first = false;
+                }
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-filesystems.h b/src/analyze/analyze-filesystems.h
new file mode 100644
index 0000000..0904571
--- /dev/null
+++ b/src/analyze/analyze-filesystems.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_filesystems(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-inspect-elf.c b/src/analyze/analyze-inspect-elf.c
new file mode 100644
index 0000000..70226a8
--- /dev/null
+++ b/src/analyze/analyze-inspect-elf.c
@@ -0,0 +1,116 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-inspect-elf.h"
+#include "elf-util.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "format-table.h"
+#include "format-util.h"
+#include "json.h"
+#include "path-util.h"
+#include "strv.h"
+
+static int analyze_elf(char **filenames, JsonFormatFlags json_flags) {
+        int r;
+
+        STRV_FOREACH(filename, filenames) {
+                _cleanup_(json_variant_unrefp) JsonVariant *package_metadata = NULL;
+                _cleanup_(table_unrefp) Table *t = NULL;
+                _cleanup_free_ char *abspath = NULL;
+                _cleanup_close_ int fd = -EBADF;
+
+                r = path_make_absolute_cwd(*filename, &abspath);
+                if (r < 0)
+                        return log_error_errno(r, "Could not make an absolute path out of \"%s\": %m", *filename);
+
+                path_simplify(abspath);
+
+                fd = RET_NERRNO(open(abspath, O_RDONLY|O_CLOEXEC));
+                if (fd < 0)
+                        return log_error_errno(fd, "Could not open \"%s\": %m", abspath);
+
+                r = parse_elf_object(fd, abspath, /* fork_disable_dump= */false, NULL, &package_metadata);
+                if (r < 0)
+                        return log_error_errno(r, "Parsing \"%s\" as ELF object failed: %m", abspath);
+
+                t = table_new_vertical();
+                if (!t)
+                        return log_oom();
+
+                r = table_add_many(
+                                t,
+                                TABLE_FIELD, "path",
+                                TABLE_STRING, abspath);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (package_metadata) {
+                        JsonVariant *module_json;
+                        const char *module_name;
+
+                        JSON_VARIANT_OBJECT_FOREACH(module_name, module_json, package_metadata) {
+                                const char *field_name;
+                                JsonVariant *field;
+
+                                /* The ELF type and architecture are added as top-level objects,
+                                 * since they are only parsed for the file itself, but the packaging
+                                 * metadata is parsed recursively in core files, so there might be
+                                 * multiple modules. */
+                                if (STR_IN_SET(module_name, "elfType", "elfArchitecture")) {
+                                        r = table_add_many(
+                                                        t,
+                                                        TABLE_FIELD, module_name,
+                                                        TABLE_STRING, json_variant_string(module_json));
+                                        if (r < 0)
+                                                return table_log_add_error(r);
+
+                                        continue;
+                                }
+
+                                /* path/elfType/elfArchitecture come first just once per file,
+                                 * then we might have multiple modules, so add a separator between
+                                 * them to make the output more readable. */
+                                r = table_add_many(t, TABLE_EMPTY, TABLE_EMPTY);
+                                if (r < 0)
+                                        return table_log_add_error(r);
+
+                                /* In case of core files the module name will be the executable,
+                                 * but for binaries/libraries it's just the path, so don't print it
+                                 * twice. */
+                                if (!streq(abspath, module_name)) {
+                                        r = table_add_many(
+                                                        t,
+                                                        TABLE_FIELD, "module name",
+                                                        TABLE_STRING, module_name);
+                                        if (r < 0)
+                                                return table_log_add_error(r);
+                                }
+
+                                JSON_VARIANT_OBJECT_FOREACH(field_name, field, module_json)
+                                        if (json_variant_is_string(field)) {
+                                                r = table_add_many(
+                                                                t,
+                                                                TABLE_FIELD, field_name,
+                                                                TABLE_STRING, json_variant_string(field));
+                                                if (r < 0)
+                                                        return table_log_add_error(r);
+                                        }
+                        }
+                }
+                if (json_flags & JSON_FORMAT_OFF) {
+                        r = table_print(t, NULL);
+                        if (r < 0)
+                                return table_log_print_error(r);
+                } else
+                        json_variant_dump(package_metadata, json_flags, stdout, NULL);
+        }
+
+        return 0;
+}
+
+int verb_elf_inspection(int argc, char *argv[], void *userdata) {
+        pager_open(arg_pager_flags);
+
+        return analyze_elf(strv_skip(argv, 1), arg_json_format_flags);
+}
diff --git a/src/analyze/analyze-inspect-elf.h b/src/analyze/analyze-inspect-elf.h
new file mode 100644
index 0000000..a790eae
--- /dev/null
+++ b/src/analyze/analyze-inspect-elf.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_elf_inspection(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-log-control.c b/src/analyze/analyze-log-control.c
new file mode 100644
index 0000000..cead0e8
--- /dev/null
+++ b/src/analyze/analyze-log-control.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-log-control.h"
+#include "verb-log-control.h"
+
+int verb_log_control(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        int r;
+
+        assert(IN_SET(argc, 1, 2));
+
+        r = acquire_bus(&bus, NULL);
+        if (r < 0)
+                return bus_log_connect_error(r, arg_transport);
+
+        r = verb_log_control_common(bus, "org.freedesktop.systemd1", argv[0], argc == 2 ? argv[1] : NULL);
+        if (r < 0)
+                return r;
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-log-control.h b/src/analyze/analyze-log-control.h
new file mode 100644
index 0000000..350c228
--- /dev/null
+++ b/src/analyze/analyze-log-control.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_log_control(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-plot.c b/src/analyze/analyze-plot.c
new file mode 100644
index 0000000..8aca691
--- /dev/null
+++ b/src/analyze/analyze-plot.c
@@ -0,0 +1,470 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-plot.h"
+#include "analyze-time-data.h"
+#include "bus-error.h"
+#include "bus-map-properties.h"
+#include "format-table.h"
+#include "os-util.h"
+#include "sort-util.h"
+#include "version.h"
+
+#define SCALE_X (0.1 / 1000.0) /* pixels per us */
+#define SCALE_Y (20.0)
+
+#define svg(...) printf(__VA_ARGS__)
+
+#define svg_bar(class, x1, x2, y)                                       \
+        svg("  <rect class=\"%s\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n", \
+            (class),                                                    \
+            SCALE_X * (x1), SCALE_Y * (y),                              \
+            SCALE_X * ((x2) - (x1)), SCALE_Y - 1.0)
+
+#define svg_text(b, x, y, format, ...)                                  \
+        do {                                                            \
+                svg("  <text class=\"%s\" x=\"%.03f\" y=\"%.03f\">", (b) ? "left" : "right", SCALE_X * (x) + (b ? 5.0 : -5.0), SCALE_Y * (y) + 14.0); \
+                svg(format, ## __VA_ARGS__);                            \
+                svg("</text>\n");                                       \
+        } while (false)
+
+
+typedef struct HostInfo {
+        char *hostname;
+        char *kernel_name;
+        char *kernel_release;
+        char *kernel_version;
+        char *os_pretty_name;
+        char *virtualization;
+        char *architecture;
+} HostInfo;
+
+static HostInfo *free_host_info(HostInfo *hi) {
+        if (!hi)
+                return NULL;
+
+        free(hi->hostname);
+        free(hi->kernel_name);
+        free(hi->kernel_release);
+        free(hi->kernel_version);
+        free(hi->os_pretty_name);
+        free(hi->virtualization);
+        free(hi->architecture);
+        return mfree(hi);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(HostInfo *, free_host_info);
+
+static int acquire_host_info(sd_bus *bus, HostInfo **hi) {
+        static const struct bus_properties_map hostname_map[] = {
+                { "Hostname",                  "s", NULL, offsetof(HostInfo, hostname)       },
+                { "KernelName",                "s", NULL, offsetof(HostInfo, kernel_name)    },
+                { "KernelRelease",             "s", NULL, offsetof(HostInfo, kernel_release) },
+                { "KernelVersion",             "s", NULL, offsetof(HostInfo, kernel_version) },
+                { "OperatingSystemPrettyName", "s", NULL, offsetof(HostInfo, os_pretty_name) },
+                {}
+        };
+
+        static const struct bus_properties_map manager_map[] = {
+                { "Virtualization", "s", NULL, offsetof(HostInfo, virtualization) },
+                { "Architecture",   "s", NULL, offsetof(HostInfo, architecture)   },
+                {}
+        };
+
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *system_bus = NULL;
+        _cleanup_(free_host_infop) HostInfo *host = NULL;
+        int r;
+
+        host = new0(HostInfo, 1);
+        if (!host)
+                return log_oom();
+
+        if (arg_scope != LOOKUP_SCOPE_SYSTEM) {
+                r = bus_connect_transport(arg_transport, arg_host, false, &system_bus);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to connect to system bus, ignoring: %m");
+                        goto manager;
+                }
+        }
+
+        r = bus_map_all_properties(
+                        system_bus ? : bus,
+                        "org.freedesktop.hostname1",
+                        "/org/freedesktop/hostname1",
+                        hostname_map,
+                        BUS_MAP_STRDUP,
+                        &error,
+                        NULL,
+                        host);
+        if (r < 0) {
+                log_debug_errno(r, "Failed to get host information from systemd-hostnamed, ignoring: %s",
+                                bus_error_message(&error, r));
+                sd_bus_error_free(&error);
+        }
+
+manager:
+        r = bus_map_all_properties(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        "/org/freedesktop/systemd1",
+                        manager_map,
+                        BUS_MAP_STRDUP,
+                        &error,
+                        NULL,
+                        host);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get host information from systemd: %s",
+                                       bus_error_message(&error, r));
+
+        *hi = TAKE_PTR(host);
+        return 0;
+}
+
+static int compare_unit_start(const UnitTimes *a, const UnitTimes *b) {
+        return CMP(a->activating, b->activating);
+}
+
+static void svg_graph_box(double height, double begin, double end) {
+        /* outside box, fill */
+        svg("<rect class=\"box\" x=\"0\" y=\"0\" width=\"%.03f\" height=\"%.03f\" />\n",
+            SCALE_X * (end - begin),
+            SCALE_Y * height);
+
+        for (long long i = ((long long) (begin / 100000)) * 100000; i <= end; i += 100000) {
+                /* lines for each second */
+                if (i % 5000000 == 0)
+                        svg("  <line class=\"sec5\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n"
+                            "  <text class=\"sec\" x=\"%.03f\" y=\"%.03f\" >%.01fs</text>\n",
+                            SCALE_X * i,
+                            SCALE_X * i,
+                            SCALE_Y * height,
+                            SCALE_X * i,
+                            -5.0,
+                            0.000001 * i);
+                else if (i % 1000000 == 0)
+                        svg("  <line class=\"sec1\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n"
+                            "  <text class=\"sec\" x=\"%.03f\" y=\"%.03f\" >%.01fs</text>\n",
+                            SCALE_X * i,
+                            SCALE_X * i,
+                            SCALE_Y * height,
+                            SCALE_X * i,
+                            -5.0,
+                            0.000001 * i);
+                else
+                        svg("  <line class=\"sec01\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n",
+                            SCALE_X * i,
+                            SCALE_X * i,
+                            SCALE_Y * height);
+        }
+}
+static int plot_unit_times(UnitTimes *u, double width, int y) {
+        bool b;
+
+        if (!u->name)
+                return 0;
+
+        svg_bar("activating", u->activating, u->activated, y);
+        svg_bar("active", u->activated, u->deactivating, y);
+        svg_bar("deactivating", u->deactivating, u->deactivated, y);
+
+        /* place the text on the left if we have passed the half of the svg width */
+        b = u->activating * SCALE_X < width / 2;
+        if (u->time)
+                svg_text(b, u->activating, y, "%s (%s)",
+                         u->name, FORMAT_TIMESPAN(u->time, USEC_PER_MSEC));
+        else
+                svg_text(b, u->activating, y, "%s", u->name);
+
+        return 1;
+}
+
+static void limit_times_to_boot(const BootTimes *boot, UnitTimes *u) {
+        if (u->deactivated > u->activating && u->deactivated <= boot->finish_time && u->activated == 0
+            && u->deactivating == 0)
+                u->activated = u->deactivating = u->deactivated;
+        if (u->activated < u->activating || u->activated > boot->finish_time)
+                u->activated = boot->finish_time;
+        if (u->deactivating < u->activated || u->deactivating > boot->finish_time)
+                u->deactivating = boot->finish_time;
+        if (u->deactivated < u->deactivating || u->deactivated > boot->finish_time)
+                u->deactivated = boot->finish_time;
+}
+
+static int produce_plot_as_svg(
+                UnitTimes *times,
+                const HostInfo *host,
+                const BootTimes *boot,
+                const char *pretty_times) {
+        int m = 1, y = 0;
+        UnitTimes *u;
+        double width;
+
+        width = SCALE_X * (boot->firmware_time + boot->finish_time);
+        if (width < 800.0)
+                width = 800.0;
+
+        if (boot->firmware_time > boot->loader_time)
+                m++;
+        if (boot->loader_time > 0) {
+                m++;
+                if (width < 1000.0)
+                        width = 1000.0;
+        }
+        if (boot->initrd_time > 0)
+                m++;
+        if (boot->kernel_done_time > 0)
+                m++;
+
+        for (u = times; u->has_data; u++) {
+                double text_start, text_width;
+
+                if (u->activating > boot->finish_time) {
+                        u->name = mfree(u->name);
+                        continue;
+                }
+
+                /* If the text cannot fit on the left side then
+                 * increase the svg width so it fits on the right.
+                 * TODO: calculate the text width more accurately */
+                text_width = 8.0 * strlen(u->name);
+                text_start = (boot->firmware_time + u->activating) * SCALE_X;
+                if (text_width > text_start && text_width + text_start > width)
+                        width = text_width + text_start;
+
+                limit_times_to_boot(boot, u);
+
+                m++;
+        }
+
+        svg("<?xml version=\"1.0\" standalone=\"no\"?>\n"
+            "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" "
+            "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n");
+
+        svg("<svg width=\"%.0fpx\" height=\"%.0fpx\" version=\"1.1\" "
+            "xmlns=\"http://www.w3.org/2000/svg\">\n\n",
+                        80.0 + width, 150.0 + (m * SCALE_Y) +
+                        5 * SCALE_Y /* legend */);
+
+        /* write some basic info as a comment, including some help */
+        svg("<!-- This file is a systemd-analyze SVG file. It is best rendered in a   -->\n"
+            "<!-- browser such as Chrome, Chromium or Firefox. Other applications     -->\n"
+            "<!-- that render these files properly but much slower are ImageMagick,   -->\n"
+            "<!-- gimp, inkscape, etc. To display the files on your system, just      -->\n"
+            "<!-- point your browser to this file.                                    -->\n\n"
+            "<!-- This plot was generated by systemd-analyze version %-16.16s -->\n\n", GIT_VERSION);
+
+        /* style sheet */
+        svg("<defs>\n  <style type=\"text/css\">\n    <![CDATA[\n"
+            "      rect       { stroke-width: 1; stroke-opacity: 0; }\n"
+            "      rect.background   { fill: rgb(255,255,255); }\n"
+            "      rect.activating   { fill: rgb(255,0,0); fill-opacity: 0.7; }\n"
+            "      rect.active       { fill: rgb(200,150,150); fill-opacity: 0.7; }\n"
+            "      rect.deactivating { fill: rgb(150,100,100); fill-opacity: 0.7; }\n"
+            "      rect.kernel       { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
+            "      rect.initrd       { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
+            "      rect.firmware     { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
+            "      rect.loader       { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
+            "      rect.userspace    { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
+            "      rect.security     { fill: rgb(144,238,144); fill-opacity: 0.7; }\n"
+            "      rect.generators   { fill: rgb(102,204,255); fill-opacity: 0.7; }\n"
+            "      rect.unitsload    { fill: rgb( 82,184,255); fill-opacity: 0.7; }\n"
+            "      rect.box   { fill: rgb(240,240,240); stroke: rgb(192,192,192); }\n"
+            "      line       { stroke: rgb(64,64,64); stroke-width: 1; }\n"
+            "//    line.sec1  { }\n"
+            "      line.sec5  { stroke-width: 2; }\n"
+            "      line.sec01 { stroke: rgb(224,224,224); stroke-width: 1; }\n"
+            "      text       { font-family: Verdana, Helvetica; font-size: 14px; }\n"
+            "      text.left  { font-family: Verdana, Helvetica; font-size: 14px; text-anchor: start; }\n"
+            "      text.right { font-family: Verdana, Helvetica; font-size: 14px; text-anchor: end; }\n"
+            "      text.sec   { font-size: 10px; }\n"
+            "    ]]>\n   </style>\n</defs>\n\n");
+
+        svg("<rect class=\"background\" width=\"100%%\" height=\"100%%\" />\n");
+        svg("<text x=\"20\" y=\"50\">%s</text>", pretty_times);
+        if (host)
+                svg("<text x=\"20\" y=\"30\">%s %s (%s %s %s) %s %s</text>",
+                    os_release_pretty_name(host->os_pretty_name, NULL),
+                    strempty(host->hostname),
+                    strempty(host->kernel_name),
+                    strempty(host->kernel_release),
+                    strempty(host->kernel_version),
+                    strempty(host->architecture),
+                    strempty(host->virtualization));
+
+        svg("<g transform=\"translate(%.3f,100)\">\n", 20.0 + (SCALE_X * boot->firmware_time));
+        svg_graph_box(m, -(double) boot->firmware_time, boot->finish_time);
+
+        if (boot->firmware_time > 0) {
+                svg_bar("firmware", -(double) boot->firmware_time, -(double) boot->loader_time, y);
+                svg_text(true, -(double) boot->firmware_time, y, "firmware");
+                y++;
+        }
+        if (boot->loader_time > 0) {
+                svg_bar("loader", -(double) boot->loader_time, 0, y);
+                svg_text(true, -(double) boot->loader_time, y, "loader");
+                y++;
+        }
+        if (boot->kernel_done_time > 0) {
+                svg_bar("kernel", 0, boot->kernel_done_time, y);
+                svg_text(true, 0, y, "kernel");
+                y++;
+        }
+        if (boot->initrd_time > 0) {
+                svg_bar("initrd", boot->initrd_time, boot->userspace_time, y);
+                if (boot->initrd_security_start_time < boot->initrd_security_finish_time)
+                        svg_bar("security", boot->initrd_security_start_time, boot->initrd_security_finish_time, y);
+                if (boot->initrd_generators_start_time < boot->initrd_generators_finish_time)
+                        svg_bar("generators", boot->initrd_generators_start_time, boot->initrd_generators_finish_time, y);
+                if (boot->initrd_unitsload_start_time < boot->initrd_unitsload_finish_time)
+                        svg_bar("unitsload", boot->initrd_unitsload_start_time, boot->initrd_unitsload_finish_time, y);
+                svg_text(true, boot->initrd_time, y, "initrd");
+                y++;
+        }
+
+        for (u = times; u->has_data; u++) {
+                if (u->activating >= boot->userspace_time)
+                        break;
+
+                y += plot_unit_times(u, width, y);
+        }
+
+        svg_bar("active", boot->userspace_time, boot->finish_time, y);
+        if (boot->security_start_time > 0)
+                svg_bar("security", boot->security_start_time, boot->security_finish_time, y);
+        svg_bar("generators", boot->generators_start_time, boot->generators_finish_time, y);
+        svg_bar("unitsload", boot->unitsload_start_time, boot->unitsload_finish_time, y);
+        svg_text(true, boot->userspace_time, y, "systemd");
+        y++;
+
+        for (; u->has_data; u++)
+                y += plot_unit_times(u, width, y);
+
+        svg("</g>\n");
+
+        /* Legend */
+        svg("<g transform=\"translate(20,100)\">\n");
+        y++;
+        svg_bar("activating", 0, 300000, y);
+        svg_text(true, 400000, y, "Activating");
+        y++;
+        svg_bar("active", 0, 300000, y);
+        svg_text(true, 400000, y, "Active");
+        y++;
+        svg_bar("deactivating", 0, 300000, y);
+        svg_text(true, 400000, y, "Deactivating");
+        y++;
+        if (boot->security_start_time > 0) {
+                svg_bar("security", 0, 300000, y);
+                svg_text(true, 400000, y, "Setting up security module");
+                y++;
+        }
+        svg_bar("generators", 0, 300000, y);
+        svg_text(true, 400000, y, "Generators");
+        y++;
+        svg_bar("unitsload", 0, 300000, y);
+        svg_text(true, 400000, y, "Loading unit files");
+        y++;
+
+        svg("</g>\n\n");
+
+        svg("</svg>\n");
+
+        return 0;
+}
+
+static int show_table(Table *table, const char *word) {
+        int r;
+
+        assert(table);
+        assert(word);
+
+        if (table_get_rows(table) > 1) {
+                table_set_header(table, arg_legend);
+
+                if (!FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
+                        r = table_print_json(table, NULL, arg_json_format_flags | JSON_FORMAT_COLOR_AUTO);
+                else
+                        r = table_print(table, NULL);
+                if (r < 0)
+                        return table_log_print_error(r);
+        }
+
+        if (arg_legend) {
+                if (table_get_rows(table) > 1)
+                        printf("\n%zu %s listed.\n", table_get_rows(table) - 1, word);
+                else
+                        printf("No %s.\n", word);
+        }
+
+        return 0;
+}
+
+static int produce_plot_as_text(UnitTimes *times, const BootTimes *boot) {
+        _cleanup_(table_unrefp) Table *table = NULL;
+        int r;
+
+        table = table_new("name", "activated", "activating", "time", "deactivated", "deactivating");
+        if (!table)
+                return log_oom();
+
+        for (; times->has_data; times++) {
+                limit_times_to_boot(boot, times);
+
+                r = table_add_many(
+                                table,
+                                TABLE_STRING, times->name,
+                                TABLE_TIMESPAN_MSEC, times->activated,
+                                TABLE_TIMESPAN_MSEC, times->activating,
+                                TABLE_TIMESPAN_MSEC, times->time,
+                                TABLE_TIMESPAN_MSEC, times->deactivated,
+                                TABLE_TIMESPAN_MSEC, times->deactivating);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        return show_table(table, "Units");
+}
+
+int verb_plot(int argc, char *argv[], void *userdata) {
+        _cleanup_(free_host_infop) HostInfo *host = NULL;
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_(unit_times_free_arrayp) UnitTimes *times = NULL;
+        _cleanup_free_ char *pretty_times = NULL;
+        bool use_full_bus = arg_scope == LOOKUP_SCOPE_SYSTEM;
+        BootTimes *boot;
+        int n, r;
+
+        r = acquire_bus(&bus, &use_full_bus);
+        if (r < 0)
+                return bus_log_connect_error(r, arg_transport);
+
+        n = acquire_boot_times(bus, &boot);
+        if (n < 0)
+                return n;
+
+        n = pretty_boot_time(bus, &pretty_times);
+        if (n < 0)
+                return n;
+
+        if (use_full_bus || arg_scope != LOOKUP_SCOPE_SYSTEM) {
+                n = acquire_host_info(bus, &host);
+                if (n < 0)
+                        return n;
+        }
+
+        n = acquire_time_data(bus, &times);
+        if (n <= 0)
+                return n;
+
+        typesafe_qsort(times, n, compare_unit_start);
+
+        if (!FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF) || arg_table)
+                r = produce_plot_as_text(times, boot);
+        else
+                r = produce_plot_as_svg(times, host, boot, pretty_times);
+        if (r < 0)
+                return r;
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-plot.h b/src/analyze/analyze-plot.h
new file mode 100644
index 0000000..eb2e398
--- /dev/null
+++ b/src/analyze/analyze-plot.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_plot(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c
index 992b1da..585dd01 100644
--- a/src/analyze/analyze-security.c
+++ b/src/analyze/analyze-security.c
@@ -2,18 +2,27 @@
 
 #include <sys/utsname.h>
 
+#include "af-list.h"
+#include "analyze.h"
 #include "analyze-security.h"
+#include "analyze-verify.h"
 #include "bus-error.h"
+#include "bus-locator.h"
 #include "bus-map-properties.h"
 #include "bus-unit-util.h"
 #include "bus-util.h"
+#include "copy.h"
 #include "env-util.h"
+#include "fd-util.h"
+#include "fileio.h"
 #include "format-table.h"
-#include "in-addr-util.h"
+#include "in-addr-prefix-util.h"
 #include "locale-util.h"
 #include "macro.h"
+#include "manager.h"
 #include "missing_capability.h"
 #include "missing_sched.h"
+#include "mkdir.h"
 #include "nulstr-util.h"
 #include "parse-util.h"
 #include "path-util.h"
@@ -21,14 +30,16 @@
 #if HAVE_SECCOMP
 #  include "seccomp-util.h"
 #endif
+#include "service.h"
 #include "set.h"
 #include "stdio-util.h"
 #include "strv.h"
 #include "terminal-util.h"
 #include "unit-def.h"
 #include "unit-name.h"
+#include "unit-serialize.h"
 
-struct security_info {
+typedef struct SecurityInfo {
         char *id;
         char *type;
         char *load_state;
@@ -81,7 +92,7 @@
         bool restrict_address_family_packet;
         bool restrict_address_family_other;
 
-        uint64_t restrict_namespaces;
+        unsigned long long restrict_namespaces;
         bool restrict_realtime;
         bool restrict_suid_sgid;
 
@@ -90,18 +101,19 @@
 
         bool delegate;
         char *device_policy;
-        bool device_allow_non_empty;
+        char **device_allow;
 
-        char **system_call_architectures;
+        Set *system_call_architectures;
 
         bool system_call_filter_allow_list;
         Set *system_call_filter;
 
-        uint32_t _umask;
-};
+        mode_t _umask;
+} SecurityInfo;
 
 struct security_assessor {
         const char *id;
+        const char *json_field;
         const char *description_good;
         const char *description_bad;
         const char *description_na;
@@ -110,7 +122,7 @@
         uint64_t range;
         int (*assess)(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description);
@@ -119,9 +131,24 @@
         bool default_dependencies_only;
 };
 
-static void security_info_free(struct security_info *i) {
+static SecurityInfo *security_info_new(void) {
+        SecurityInfo *info = new(SecurityInfo, 1);
+        if (!info)
+                return NULL;
+
+        *info = (SecurityInfo) {
+                .default_dependencies = true,
+                .capability_bounding_set = UINT64_MAX,
+                .restrict_namespaces = UINT64_MAX,
+                ._umask = 0002,
+        };
+
+        return info;
+}
+
+static SecurityInfo *security_info_free(SecurityInfo *i) {
         if (!i)
-                return;
+                return NULL;
 
         free(i->id);
         free(i->type);
@@ -142,14 +169,18 @@
         free(i->notify_access);
 
         free(i->device_policy);
+        strv_free(i->device_allow);
 
         strv_free(i->supplementary_groups);
-        strv_free(i->system_call_architectures);
-
+        set_free(i->system_call_architectures);
         set_free(i->system_call_filter);
+
+        return mfree(i);
 }
 
-static bool security_info_runs_privileged(const struct security_info *i)  {
+DEFINE_TRIVIAL_CLEANUP_FUNC(SecurityInfo*, security_info_free);
+
+static bool security_info_runs_privileged(const SecurityInfo *i)  {
         assert(i);
 
         if (STRPTR_IN_SET(i->user, "0", "root"))
@@ -163,14 +194,13 @@
 
 static int assess_bool(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
 
-        const bool *b = data;
+        const bool *b = ASSERT_PTR(data);
 
-        assert(b);
         assert(ret_badness);
         assert(ret_description);
 
@@ -182,7 +212,7 @@
 
 static int assess_user(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -219,7 +249,7 @@
 
 static int assess_protect_home(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -261,7 +291,7 @@
 
 static int assess_protect_system(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -303,7 +333,7 @@
 
 static int assess_root_directory(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -321,7 +351,7 @@
 
 static int assess_capability_bounding_set(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -337,7 +367,7 @@
 
 static int assess_umask(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -378,7 +408,7 @@
 
 static int assess_keyring_mode(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -394,7 +424,7 @@
 
 static int assess_protect_proc(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -416,7 +446,7 @@
 
 static int assess_proc_subset(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -432,7 +462,7 @@
 
 static int assess_notify_access(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -448,7 +478,7 @@
 
 static int assess_remove_ipc(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -467,7 +497,7 @@
 
 static int assess_supplementary_groups(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -486,7 +516,7 @@
 
 static int assess_restrict_namespaces(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -500,9 +530,11 @@
         return 0;
 }
 
+#if HAVE_SECCOMP
+
 static int assess_system_call_architectures(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -513,10 +545,11 @@
         assert(ret_badness);
         assert(ret_description);
 
-        if (strv_isempty(info->system_call_architectures)) {
+        if (set_isempty(info->system_call_architectures)) {
                 b = 10;
                 d = strdup("Service may execute system calls with all ABIs");
-        } else if (strv_equal(info->system_call_architectures, STRV_MAKE("native"))) {
+        } else if (set_contains(info->system_call_architectures, "native") &&
+                   set_size(info->system_call_architectures) == 1) {
                 b = 0;
                 d = strdup("Service may execute system calls only with native ABI");
         } else {
@@ -533,14 +566,8 @@
         return 0;
 }
 
-#if HAVE_SECCOMP
-
 static bool syscall_names_in_filter(Set *s, bool allow_list, const SyscallFilterSet *f, const char **ret_offending_syscall) {
-        const char *syscall;
-
         NULSTR_FOREACH(syscall, f->value) {
-                int id;
-
                 if (syscall[0] == '@') {
                         const SyscallFilterSet *g;
 
@@ -552,11 +579,10 @@
                 }
 
                 /* Let's see if the system call actually exists on this platform, before complaining */
-                id = seccomp_syscall_resolve_name(syscall);
-                if (id < 0)
+                if (seccomp_syscall_resolve_name(syscall) < 0)
                         continue;
 
-                if (set_contains(s, syscall) != allow_list) {
+                if (set_contains(s, syscall) == allow_list) {
                         log_debug("Offending syscall filter item: %s", syscall);
                         if (ret_offending_syscall)
                                 *ret_offending_syscall = syscall;
@@ -570,7 +596,7 @@
 
 static int assess_system_call_filter(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -583,11 +609,12 @@
         assert(a->parameter < _SYSCALL_FILTER_SET_MAX);
         const SyscallFilterSet *f = syscall_filter_sets + a->parameter;
 
-        char *d = NULL;
+        _cleanup_free_ char *d = NULL;
         uint64_t b;
+        int r;
 
         if (!info->system_call_filter_allow_list && set_isempty(info->system_call_filter)) {
-                d = strdup("Service does not filter system calls");
+                r = free_and_strdup(&d, "Service does not filter system calls");
                 b = 10;
         } else {
                 bool bad;
@@ -599,34 +626,33 @@
 
                 if (info->system_call_filter_allow_list) {
                         if (bad) {
-                                (void) asprintf(&d, "System call allow list defined for service, and %s is included "
-                                                "(e.g. %s is allowed)",
-                                                f->name, offender);
+                                r = asprintf(&d, "System call allow list defined for service, and %s is included "
+                                             "(e.g. %s is allowed)",
+                                             f->name, offender);
                                 b = 9;
                         } else {
-                                (void) asprintf(&d, "System call allow list defined for service, and %s is not included",
-                                                f->name);
+                                r = asprintf(&d, "System call allow list defined for service, and %s is not included",
+                                             f->name);
                                 b = 0;
                         }
                 } else {
                         if (bad) {
-                                (void) asprintf(&d, "System call deny list defined for service, and %s is not included "
-                                                "(e.g. %s is allowed)",
-                                                f->name, offender);
+                                r = asprintf(&d, "System call deny list defined for service, and %s is not included "
+                                             "(e.g. %s is allowed)",
+                                             f->name, offender);
                                 b = 10;
                         } else {
-                                (void) asprintf(&d, "System call deny list defined for service, and %s is included",
-                                                f->name);
+                                r = asprintf(&d, "System call deny list defined for service, and %s is included",
+                                             f->name);
                                 b = 0;
                         }
                 }
         }
-
-        if (!d)
+        if (r < 0)
                 return log_oom();
 
         *ret_badness = b;
-        *ret_description = d;
+        *ret_description = TAKE_PTR(d);
 
         return 0;
 }
@@ -635,7 +661,7 @@
 
 static int assess_ip_address_allow(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -675,7 +701,7 @@
 
 static int assess_device_allow(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -689,8 +715,14 @@
 
         if (STRPTR_IN_SET(info->device_policy, "strict", "closed")) {
 
-                if (info->device_allow_non_empty) {
-                        d = strdup("Service has a device ACL with some special devices");
+                if (!strv_isempty(info->device_allow)) {
+                        _cleanup_free_ char *join = NULL;
+
+                        join = strv_join(info->device_allow, " ");
+                        if (!join)
+                                return log_oom();
+
+                        d = strjoin("Service has a device ACL with some special devices: ", join);
                         b = 5;
                 } else {
                         d = strdup("Service has a minimal device ACL");
@@ -712,7 +744,7 @@
 
 static int assess_ambient_capabilities(
                 const struct security_assessor *a,
-                const struct security_info *info,
+                const SecurityInfo *info,
                 const void *data,
                 uint64_t *ret_badness,
                 char **ret_description) {
@@ -729,6 +761,7 @@
 static const struct security_assessor security_assessor_table[] = {
         {
                 .id = "User=/DynamicUser=",
+                .json_field = "UserOrDynamicUser",
                 .description_bad = "Service runs as root user",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#User=",
                 .weight = 2000,
@@ -737,6 +770,7 @@
         },
         {
                 .id = "SupplementaryGroups=",
+                .json_field = "SupplementaryGroups",
                 .description_good = "Service has no supplementary groups",
                 .description_bad = "Service runs with supplementary groups",
                 .description_na = "Service runs as root, option does not matter",
@@ -747,107 +781,118 @@
         },
         {
                 .id = "PrivateDevices=",
+                .json_field = "PrivateDevices",
                 .description_good = "Service has no access to hardware devices",
                 .description_bad = "Service potentially has access to hardware devices",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#PrivateDevices=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, private_devices),
+                .offset = offsetof(SecurityInfo, private_devices),
         },
         {
                 .id = "PrivateMounts=",
+                .json_field = "PrivateMounts",
                 .description_good = "Service cannot install system mounts",
                 .description_bad = "Service may install system mounts",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#PrivateMounts=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, private_mounts),
+                .offset = offsetof(SecurityInfo, private_mounts),
         },
         {
                 .id = "PrivateNetwork=",
+                .json_field = "PrivateNetwork",
                 .description_good = "Service has no access to the host's network",
                 .description_bad = "Service has access to the host's network",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#PrivateNetwork=",
                 .weight = 2500,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, private_network),
+                .offset = offsetof(SecurityInfo, private_network),
         },
         {
                 .id = "PrivateTmp=",
+                .json_field = "PrivateTmp",
                 .description_good = "Service has no access to other software's temporary files",
                 .description_bad = "Service has access to other software's temporary files",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#PrivateTmp=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, private_tmp),
+                .offset = offsetof(SecurityInfo, private_tmp),
                 .default_dependencies_only = true,
         },
         {
                 .id = "PrivateUsers=",
+                .json_field = "PrivateUsers",
                 .description_good = "Service does not have access to other users",
                 .description_bad = "Service has access to other users",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#PrivateUsers=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, private_users),
+                .offset = offsetof(SecurityInfo, private_users),
         },
         {
                 .id = "ProtectControlGroups=",
+                .json_field = "ProtectControlGroups",
                 .description_good = "Service cannot modify the control group file system",
                 .description_bad = "Service may modify the control group file system",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectControlGroups=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, protect_control_groups),
+                .offset = offsetof(SecurityInfo, protect_control_groups),
         },
         {
                 .id = "ProtectKernelModules=",
+                .json_field = "ProtectKernelModules",
                 .description_good = "Service cannot load or read kernel modules",
                 .description_bad = "Service may load or read kernel modules",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectKernelModules=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, protect_kernel_modules),
+                .offset = offsetof(SecurityInfo, protect_kernel_modules),
         },
         {
                 .id = "ProtectKernelTunables=",
+                .json_field = "ProtectKernelTunables",
                 .description_good = "Service cannot alter kernel tunables (/proc/sys, …)",
                 .description_bad = "Service may alter kernel tunables",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectKernelTunables=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, protect_kernel_tunables),
+                .offset = offsetof(SecurityInfo, protect_kernel_tunables),
         },
         {
                 .id = "ProtectKernelLogs=",
+                .json_field = "ProtectKernelLogs",
                 .description_good = "Service cannot read from or write to the kernel log ring buffer",
                 .description_bad = "Service may read from or write to the kernel log ring buffer",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectKernelLogs=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, protect_kernel_logs),
+                .offset = offsetof(SecurityInfo, protect_kernel_logs),
         },
         {
                 .id = "ProtectClock=",
+                .json_field = "ProtectClock",
                 .description_good = "Service cannot write to the hardware clock or system clock",
                 .description_bad = "Service may write to the hardware clock or system clock",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectClock=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, protect_clock),
+                .offset = offsetof(SecurityInfo, protect_clock),
         },
         {
                 .id = "ProtectHome=",
+                .json_field = "ProtectHome",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectHome=",
                 .weight = 1000,
                 .range = 10,
@@ -856,16 +901,18 @@
         },
         {
                 .id = "ProtectHostname=",
+                .json_field = "ProtectHostname",
                 .description_good = "Service cannot change system host/domainname",
                 .description_bad = "Service may change system host/domainname",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectHostname=",
                 .weight = 50,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, protect_hostname),
+                .offset = offsetof(SecurityInfo, protect_hostname),
         },
         {
                 .id = "ProtectSystem=",
+                .json_field = "ProtectSystem",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectSystem=",
                 .weight = 1000,
                 .range = 10,
@@ -874,6 +921,7 @@
         },
         {
                 .id = "RootDirectory=/RootImage=",
+                .json_field = "RootDirectoryOrRootImage",
                 .description_good = "Service has its own root directory/image",
                 .description_bad = "Service runs within the host's root directory",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RootDirectory=",
@@ -884,36 +932,40 @@
         },
         {
                 .id = "LockPersonality=",
+                .json_field = "LockPersonality",
                 .description_good = "Service cannot change ABI personality",
                 .description_bad = "Service may change ABI personality",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#LockPersonality=",
                 .weight = 100,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, lock_personality),
+                .offset = offsetof(SecurityInfo, lock_personality),
         },
         {
                 .id = "MemoryDenyWriteExecute=",
+                .json_field = "MemoryDenyWriteExecute",
                 .description_good = "Service cannot create writable executable memory mappings",
                 .description_bad = "Service may create writable executable memory mappings",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#MemoryDenyWriteExecute=",
                 .weight = 100,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, memory_deny_write_execute),
+                .offset = offsetof(SecurityInfo, memory_deny_write_execute),
         },
         {
                 .id = "NoNewPrivileges=",
+                .json_field = "NoNewPrivileges",
                 .description_good = "Service processes cannot acquire new privileges",
                 .description_bad = "Service processes may acquire new privileges",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#NoNewPrivileges=",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, no_new_privileges),
+                .offset = offsetof(SecurityInfo, no_new_privileges),
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_ADMIN",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_ADMIN",
                 .description_good = "Service has no administrator privileges",
                 .description_bad = "Service has administrator privileges",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -924,6 +976,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SET(UID|GID|PCAP)",
+                .json_field = "CapabilityBoundingSet_CAP_SET_UID_GID_PCAP",
                 .description_good = "Service cannot change UID/GID identities/capabilities",
                 .description_bad = "Service may change UID/GID identities/capabilities",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -936,6 +989,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_PTRACE",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_PTRACE",
                 .description_good = "Service has no ptrace() debugging abilities",
                 .description_bad = "Service has ptrace() debugging abilities",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -946,6 +1000,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_TIME",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_TIME",
                 .description_good = "Service processes cannot change the system clock",
                 .description_bad = "Service processes may change the system clock",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -956,6 +1011,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_NET_ADMIN",
+                .json_field = "CapabilityBoundingSet_CAP_NET_ADMIN",
                 .description_good = "Service has no network configuration privileges",
                 .description_bad = "Service has network configuration privileges",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -966,6 +1022,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_RAWIO",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_RAWIO",
                 .description_good = "Service has no raw I/O access",
                 .description_bad = "Service has raw I/O access",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -976,6 +1033,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_MODULE",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_MODULE",
                 .description_good = "Service cannot load kernel modules",
                 .description_bad = "Service may load kernel modules",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -986,6 +1044,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_AUDIT_*",
+                .json_field = "CapabilityBoundingSet_CAP_AUDIT",
                 .description_good = "Service has no audit subsystem access",
                 .description_bad = "Service has audit subsystem access",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -998,6 +1057,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYSLOG",
+                .json_field = "CapabilityBoundingSet_CAP_SYSLOG",
                 .description_good = "Service has no access to kernel logging",
                 .description_bad = "Service has access to kernel logging",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1008,6 +1068,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_(NICE|RESOURCE)",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_NICE_RESOURCE",
                 .description_good = "Service has no privileges to change resource use parameters",
                 .description_bad = "Service has privileges to change resource use parameters",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1019,6 +1080,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_MKNOD",
+                .json_field = "CapabilityBoundingSet_CAP_MKNOD",
                 .description_good = "Service cannot create device nodes",
                 .description_bad = "Service may create device nodes",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1029,6 +1091,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_(CHOWN|FSETID|SETFCAP)",
+                .json_field = "CapabilityBoundingSet_CAP_CHOWN_FSETID_SETFCAP",
                 .description_good = "Service cannot change file ownership/access mode/capabilities",
                 .description_bad = "Service may change file ownership/access mode/capabilities unrestricted",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1041,6 +1104,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_(DAC_*|FOWNER|IPC_OWNER)",
+                .json_field = "CapabilityBoundingSet_CAP_DAC_FOWNER_IPC_OWNER",
                 .description_good = "Service cannot override UNIX file/IPC permission checks",
                 .description_bad = "Service may override UNIX file/IPC permission checks",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1054,6 +1118,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_KILL",
+                .json_field = "CapabilityBoundingSet_CAP_KILL",
                 .description_good = "Service cannot send UNIX signals to arbitrary processes",
                 .description_bad = "Service may send UNIX signals to arbitrary processes",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1064,6 +1129,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_NET_(BIND_SERVICE|BROADCAST|RAW)",
+                .json_field = "CapabilityBoundingSet_CAP_NET_BIND_SERVICE_BROADCAST_RAW)",
                 .description_good = "Service has no elevated networking privileges",
                 .description_bad = "Service has elevated networking privileges",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1076,6 +1142,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_BOOT",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_BOOT",
                 .description_good = "Service cannot issue reboot()",
                 .description_bad = "Service may issue reboot()",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1086,6 +1153,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_MAC_*",
+                .json_field = "CapabilityBoundingSet_CAP_MAC",
                 .description_good = "Service cannot adjust SMACK MAC",
                 .description_bad = "Service may adjust SMACK MAC",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1097,6 +1165,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_LINUX_IMMUTABLE",
+                .json_field = "CapabilityBoundingSet_CAP_LINUX_IMMUTABLE",
                 .description_good = "Service cannot mark files immutable",
                 .description_bad = "Service may mark files immutable",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1107,6 +1176,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_IPC_LOCK",
+                .json_field = "CapabilityBoundingSet_CAP_IPC_LOCK",
                 .description_good = "Service cannot lock memory into RAM",
                 .description_bad = "Service may lock memory into RAM",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1117,6 +1187,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_CHROOT",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_CHROOT",
                 .description_good = "Service cannot issue chroot()",
                 .description_bad = "Service may issue chroot()",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1127,6 +1198,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_BLOCK_SUSPEND",
+                .json_field = "CapabilityBoundingSet_CAP_BLOCK_SUSPEND",
                 .description_good = "Service cannot establish wake locks",
                 .description_bad = "Service may establish wake locks",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1137,6 +1209,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_WAKE_ALARM",
+                .json_field = "CapabilityBoundingSet_CAP_WAKE_ALARM",
                 .description_good = "Service cannot program timers that wake up the system",
                 .description_bad = "Service may program timers that wake up the system",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1147,6 +1220,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_LEASE",
+                .json_field = "CapabilityBoundingSet_CAP_LEASE",
                 .description_good = "Service cannot create file leases",
                 .description_bad = "Service may create file leases",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1157,6 +1231,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_TTY_CONFIG",
                 .description_good = "Service cannot issue vhangup()",
                 .description_bad = "Service may issue vhangup()",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1167,6 +1242,7 @@
         },
         {
                 .id = "CapabilityBoundingSet=~CAP_SYS_PACCT",
+                .json_field = "CapabilityBoundingSet_CAP_SYS_PACCT",
                 .description_good = "Service cannot use acct()",
                 .description_bad = "Service may use acct()",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#CapabilityBoundingSet=",
@@ -1177,6 +1253,7 @@
         },
         {
                 .id = "UMask=",
+                .json_field = "UMask",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#UMask=",
                 .weight = 100,
                 .range = 10,
@@ -1184,6 +1261,7 @@
         },
         {
                 .id = "KeyringMode=",
+                .json_field = "KeyringMode",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#KeyringMode=",
                 .description_good = "Service doesn't share key material with other services",
                 .description_bad = "Service shares key material with other service",
@@ -1193,6 +1271,7 @@
         },
         {
                 .id = "ProtectProc=",
+                .json_field = "ProtectProc",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectProc=",
                 .description_good = "Service has restricted access to process tree (/proc hidepid=)",
                 .description_bad = "Service has full access to process tree (/proc hidepid=)",
@@ -1202,6 +1281,7 @@
         },
         {
                 .id = "ProcSubset=",
+                .json_field = "ProcSubset",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProcSubset=",
                 .description_good = "Service has no access to non-process /proc files (/proc subset=)",
                 .description_bad = "Service has full access to non-process /proc files (/proc subset=)",
@@ -1211,6 +1291,7 @@
         },
         {
                 .id = "NotifyAccess=",
+                .json_field = "NotifyAccess",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#NotifyAccess=",
                 .description_good = "Service child processes cannot alter service state",
                 .description_bad = "Service child processes may alter service state",
@@ -1220,6 +1301,7 @@
         },
         {
                 .id = "RemoveIPC=",
+                .json_field = "RemoveIPC",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RemoveIPC=",
                 .description_good = "Service user cannot leave SysV IPC objects around",
                 .description_bad = "Service user may leave SysV IPC objects around",
@@ -1227,41 +1309,45 @@
                 .weight = 100,
                 .range = 1,
                 .assess = assess_remove_ipc,
-                .offset = offsetof(struct security_info, remove_ipc),
+                .offset = offsetof(SecurityInfo, remove_ipc),
         },
         {
                 .id = "Delegate=",
+                .json_field = "Delegate",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Delegate=",
                 .description_good = "Service does not maintain its own delegated control group subtree",
                 .description_bad = "Service maintains its own delegated control group subtree",
                 .weight = 100,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, delegate),
+                .offset = offsetof(SecurityInfo, delegate),
                 .parameter = true, /* invert! */
         },
         {
                 .id = "RestrictRealtime=",
+                .json_field = "RestrictRealtime",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictRealtime=",
                 .description_good = "Service realtime scheduling access is restricted",
                 .description_bad = "Service may acquire realtime scheduling",
                 .weight = 500,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, restrict_realtime),
+                .offset = offsetof(SecurityInfo, restrict_realtime),
         },
         {
                 .id = "RestrictSUIDSGID=",
+                .json_field = "RestrictSUIDSGID",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictSUIDSGID=",
                 .description_good = "SUID/SGID file creation by service is restricted",
                 .description_bad = "Service may create SUID/SGID files",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, restrict_suid_sgid),
+                .offset = offsetof(SecurityInfo, restrict_suid_sgid),
         },
         {
-                .id = "RestrictNamespaces=~CLONE_NEWUSER",
+                .id = "RestrictNamespaces=~user",
+                .json_field = "RestrictNamespaces_user",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictNamespaces=",
                 .description_good = "Service cannot create user namespaces",
                 .description_bad = "Service may create user namespaces",
@@ -1271,7 +1357,8 @@
                 .parameter = CLONE_NEWUSER,
         },
         {
-                .id = "RestrictNamespaces=~CLONE_NEWNS",
+                .id = "RestrictNamespaces=~mnt",
+                .json_field = "RestrictNamespaces_mnt",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictNamespaces=",
                 .description_good = "Service cannot create file system namespaces",
                 .description_bad = "Service may create file system namespaces",
@@ -1281,7 +1368,8 @@
                 .parameter = CLONE_NEWNS,
         },
         {
-                .id = "RestrictNamespaces=~CLONE_NEWIPC",
+                .id = "RestrictNamespaces=~ipc",
+                .json_field = "RestrictNamespaces_ipc",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictNamespaces=",
                 .description_good = "Service cannot create IPC namespaces",
                 .description_bad = "Service may create IPC namespaces",
@@ -1291,7 +1379,8 @@
                 .parameter = CLONE_NEWIPC,
         },
         {
-                .id = "RestrictNamespaces=~CLONE_NEWPID",
+                .id = "RestrictNamespaces=~pid",
+                .json_field = "RestrictNamespaces_pid",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictNamespaces=",
                 .description_good = "Service cannot create process namespaces",
                 .description_bad = "Service may create process namespaces",
@@ -1301,7 +1390,8 @@
                 .parameter = CLONE_NEWPID,
         },
         {
-                .id = "RestrictNamespaces=~CLONE_NEWCGROUP",
+                .id = "RestrictNamespaces=~cgroup",
+                .json_field = "RestrictNamespaces_cgroup",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictNamespaces=",
                 .description_good = "Service cannot create cgroup namespaces",
                 .description_bad = "Service may create cgroup namespaces",
@@ -1311,7 +1401,8 @@
                 .parameter = CLONE_NEWCGROUP,
         },
         {
-                .id = "RestrictNamespaces=~CLONE_NEWNET",
+                .id = "RestrictNamespaces=~net",
+                .json_field = "RestrictNamespaces_net",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictNamespaces=",
                 .description_good = "Service cannot create network namespaces",
                 .description_bad = "Service may create network namespaces",
@@ -1321,7 +1412,8 @@
                 .parameter = CLONE_NEWNET,
         },
         {
-                .id = "RestrictNamespaces=~CLONE_NEWUTS",
+                .id = "RestrictNamespaces=~uts",
+                .json_field = "RestrictNamespaces_uts",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictNamespaces=",
                 .description_good = "Service cannot create hostname namespaces",
                 .description_bad = "Service may create hostname namespaces",
@@ -1332,64 +1424,71 @@
         },
         {
                 .id = "RestrictAddressFamilies=~AF_(INET|INET6)",
+                .json_field = "RestrictAddressFamilies_AF_INET_INET6",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictAddressFamilies=",
                 .description_good = "Service cannot allocate Internet sockets",
                 .description_bad = "Service may allocate Internet sockets",
                 .weight = 1500,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, restrict_address_family_inet),
+                .offset = offsetof(SecurityInfo, restrict_address_family_inet),
         },
         {
                 .id = "RestrictAddressFamilies=~AF_UNIX",
+                .json_field = "RestrictAddressFamilies_AF_UNIX",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictAddressFamilies=",
                 .description_good = "Service cannot allocate local sockets",
                 .description_bad = "Service may allocate local sockets",
                 .weight = 25,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, restrict_address_family_unix),
+                .offset = offsetof(SecurityInfo, restrict_address_family_unix),
         },
         {
                 .id = "RestrictAddressFamilies=~AF_NETLINK",
+                .json_field = "RestrictAddressFamilies_AF_NETLINK",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictAddressFamilies=",
                 .description_good = "Service cannot allocate netlink sockets",
                 .description_bad = "Service may allocate netlink sockets",
                 .weight = 200,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, restrict_address_family_netlink),
+                .offset = offsetof(SecurityInfo, restrict_address_family_netlink),
         },
         {
                 .id = "RestrictAddressFamilies=~AF_PACKET",
+                .json_field = "RestrictAddressFamilies_AF_PACKET",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictAddressFamilies=",
                 .description_good = "Service cannot allocate packet sockets",
                 .description_bad = "Service may allocate packet sockets",
                 .weight = 1000,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, restrict_address_family_packet),
+                .offset = offsetof(SecurityInfo, restrict_address_family_packet),
         },
         {
                 .id = "RestrictAddressFamilies=~…",
+                .json_field = "RestrictAddressFamilies_OTHER",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RestrictAddressFamilies=",
                 .description_good = "Service cannot allocate exotic sockets",
                 .description_bad = "Service may allocate exotic sockets",
                 .weight = 1250,
                 .range = 1,
                 .assess = assess_bool,
-                .offset = offsetof(struct security_info, restrict_address_family_other),
+                .offset = offsetof(SecurityInfo, restrict_address_family_other),
         },
+#if HAVE_SECCOMP
         {
                 .id = "SystemCallArchitectures=",
+                .json_field = "SystemCallArchitectures",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallArchitectures=",
                 .weight = 1000,
                 .range = 10,
                 .assess = assess_system_call_architectures,
         },
-#if HAVE_SECCOMP
         {
                 .id = "SystemCallFilter=~@swap",
+                .json_field = "SystemCallFilter_swap",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 1000,
                 .range = 10,
@@ -1398,6 +1497,7 @@
         },
         {
                 .id = "SystemCallFilter=~@obsolete",
+                .json_field = "SystemCallFilter_obsolete",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 250,
                 .range = 10,
@@ -1406,6 +1506,7 @@
         },
         {
                 .id = "SystemCallFilter=~@clock",
+                .json_field = "SystemCallFilter_clock",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 1000,
                 .range = 10,
@@ -1414,6 +1515,7 @@
         },
         {
                 .id = "SystemCallFilter=~@cpu-emulation",
+                .json_field = "SystemCallFilter_cpu_emulation",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 250,
                 .range = 10,
@@ -1422,6 +1524,7 @@
         },
         {
                 .id = "SystemCallFilter=~@debug",
+                .json_field = "SystemCallFilter_debug",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 1000,
                 .range = 10,
@@ -1430,6 +1533,7 @@
         },
         {
                 .id = "SystemCallFilter=~@mount",
+                .json_field = "SystemCallFilter_mount",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 1000,
                 .range = 10,
@@ -1438,6 +1542,7 @@
         },
         {
                 .id = "SystemCallFilter=~@module",
+                .json_field = "SystemCallFilter_module",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 1000,
                 .range = 10,
@@ -1446,6 +1551,7 @@
         },
         {
                 .id = "SystemCallFilter=~@raw-io",
+                .json_field = "SystemCallFilter_raw_io",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 1000,
                 .range = 10,
@@ -1454,6 +1560,7 @@
         },
         {
                 .id = "SystemCallFilter=~@reboot",
+                .json_field = "SystemCallFilter_reboot",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 1000,
                 .range = 10,
@@ -1462,6 +1569,7 @@
         },
         {
                 .id = "SystemCallFilter=~@privileged",
+                .json_field = "SystemCallFilter_privileged",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 700,
                 .range = 10,
@@ -1470,6 +1578,7 @@
         },
         {
                 .id = "SystemCallFilter=~@resources",
+                .json_field = "SystemCallFilter_resources",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#SystemCallFilter=",
                 .weight = 700,
                 .range = 10,
@@ -1479,6 +1588,7 @@
 #endif
         {
                 .id = "IPAddressDeny=",
+                .json_field = "IPAddressDeny",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#IPAddressDeny=",
                 .weight = 1000,
                 .range = 10,
@@ -1486,6 +1596,7 @@
         },
         {
                 .id = "DeviceAllow=",
+                .json_field = "DeviceAllow",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#DeviceAllow=",
                 .weight = 1000,
                 .range = 10,
@@ -1493,6 +1604,7 @@
         },
         {
                 .id = "AmbientCapabilities=",
+                .json_field = "AmbientCapabilities",
                 .url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#AmbientCapabilities=",
                 .description_good = "Service process does not receive ambient capabilities",
                 .description_bad = "Service process receives ambient capabilities",
@@ -1502,7 +1614,111 @@
         },
 };
 
-static int assess(const struct security_info *info, Table *overview_table, AnalyzeSecurityFlags flags) {
+static JsonVariant* security_assessor_find_in_policy(const struct security_assessor *a, JsonVariant *policy, const char *name) {
+        JsonVariant *item;
+        assert(a);
+
+        if (!policy)
+                return NULL;
+        if (!json_variant_is_object(policy)) {
+                log_debug("Specified policy is not a JSON object, ignoring.");
+                return NULL;
+        }
+
+        item = json_variant_by_key(policy, a->json_field);
+        if (!item)
+                return NULL;
+        if (!json_variant_is_object(item)) {
+                log_debug("Item for '%s' in policy JSON object is not an object, ignoring.", a->id);
+                return NULL;
+        }
+
+        return name ? json_variant_by_key(item, name) : item;
+}
+
+static uint64_t access_weight(const struct security_assessor *a, JsonVariant *policy) {
+        JsonVariant *val;
+
+        assert(a);
+
+        val = security_assessor_find_in_policy(a, policy, "weight");
+        if  (val) {
+                if (json_variant_is_unsigned(val))
+                        return json_variant_unsigned(val);
+                log_debug("JSON field 'weight' of policy for %s is not an unsigned integer, ignoring.", a->id);
+        }
+
+        return a->weight;
+}
+
+static uint64_t access_range(const struct security_assessor *a, JsonVariant *policy) {
+        JsonVariant *val;
+
+        assert(a);
+
+        val = security_assessor_find_in_policy(a, policy, "range");
+        if  (val) {
+                if (json_variant_is_unsigned(val))
+                        return json_variant_unsigned(val);
+                log_debug("JSON field 'range' of policy for %s is not an unsigned integer, ignoring.", a->id);
+        }
+
+        return a->range;
+}
+
+static const char *access_description_na(const struct security_assessor *a, JsonVariant *policy) {
+        JsonVariant *val;
+
+        assert(a);
+
+        val = security_assessor_find_in_policy(a, policy, "description_na");
+        if  (val) {
+                if (json_variant_is_string(val))
+                        return json_variant_string(val);
+                log_debug("JSON field 'description_na' of policy for %s is not a string, ignoring.", a->id);
+        }
+
+        return a->description_na;
+}
+
+static const char *access_description_good(const struct security_assessor *a, JsonVariant *policy) {
+        JsonVariant *val;
+
+        assert(a);
+
+        val = security_assessor_find_in_policy(a, policy, "description_good");
+        if  (val) {
+                if (json_variant_is_string(val))
+                        return json_variant_string(val);
+                log_debug("JSON field 'description_good' of policy for %s is not a string, ignoring.", a->id);
+        }
+
+        return a->description_good;
+}
+
+static const char *access_description_bad(const struct security_assessor *a, JsonVariant *policy) {
+        JsonVariant *val;
+
+        assert(a);
+
+        val = security_assessor_find_in_policy(a, policy, "description_bad");
+        if  (val) {
+                if (json_variant_is_string(val))
+                        return json_variant_string(val);
+                log_debug("JSON field 'description_bad' of policy for %s is not a string, ignoring.", a->id);
+        }
+
+        return a->description_bad;
+}
+
+static int assess(const SecurityInfo *info,
+                  Table *overview_table,
+                  AnalyzeSecurityFlags flags,
+                  unsigned threshold,
+                  JsonVariant *policy,
+                  PagerFlags pager_flags,
+                  JsonFormatFlags json_format_flags) {
+
         static const struct {
                 uint64_t exposure;
                 const char *name;
@@ -1524,15 +1740,19 @@
         int r;
 
         if (!FLAGS_SET(flags, ANALYZE_SECURITY_SHORT)) {
-                details_table = table_new(" ", "name", "description", "weight", "badness", "range", "exposure");
+                details_table = table_new(" ", "name", "json_field", "description", "weight", "badness", "range", "exposure");
                 if (!details_table)
                         return log_oom();
 
+                r = table_set_json_field_name(details_table, 0, "set");
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set JSON field name of column 0: %m");
+
                 (void) table_set_sort(details_table, (size_t) 3, (size_t) 1);
                 (void) table_set_reverse(details_table, 3, true);
 
                 if (getenv_bool("SYSTEMD_ANALYZE_DEBUG") <= 0)
-                        (void) table_set_display(details_table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 6);
+                        (void) table_set_display(details_table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 7);
         }
 
         for (i = 0; i < ELEMENTSOF(security_assessor_table); i++) {
@@ -1540,6 +1760,8 @@
                 _cleanup_free_ char *d = NULL;
                 uint64_t badness;
                 void *data;
+                uint64_t weight = access_weight(a, policy);
+                uint64_t range = access_range(a, policy);
 
                 data = (uint8_t *) info + a->offset;
 
@@ -1548,38 +1770,44 @@
                         d = strdup("Service runs in special boot phase, option is not appropriate");
                         if (!d)
                                 return log_oom();
+                } else if (weight == 0) {
+                        badness = UINT64_MAX;
+                        d = strdup("Option excluded by policy, skipping");
+                        if (!d)
+                                return log_oom();
                 } else {
                         r = a->assess(a, info, data, &badness, &d);
                         if (r < 0)
                                 return r;
                 }
 
-                assert(a->range > 0);
+                assert(range > 0);
 
                 if (badness != UINT64_MAX) {
-                        assert(badness <= a->range);
+                        assert(badness <= range);
 
-                        badness_sum += DIV_ROUND_UP(badness * a->weight, a->range);
-                        weight_sum += a->weight;
+                        badness_sum += DIV_ROUND_UP(badness * weight, range);
+                        weight_sum += weight;
                 }
 
                 if (details_table) {
-                        const char *checkmark, *description, *color = NULL;
+                        const char *description, *color = NULL;
+                        int checkmark;
 
                         if (badness == UINT64_MAX) {
-                                checkmark = " ";
-                                description = a->description_na;
+                                checkmark = -1;
+                                description = access_description_na(a, policy);
                                 color = NULL;
                         } else if (badness == a->range) {
-                                checkmark = special_glyph(SPECIAL_GLYPH_CROSS_MARK);
-                                description = a->description_bad;
+                                checkmark = 0;
+                                description = access_description_bad(a, policy);
                                 color = ansi_highlight_red();
                         } else if (badness == 0) {
-                                checkmark = special_glyph(SPECIAL_GLYPH_CHECK_MARK);
-                                description = a->description_good;
+                                checkmark = 1;
+                                description = access_description_good(a, policy);
                                 color = ansi_highlight_green();
                         } else {
-                                checkmark = special_glyph(SPECIAL_GLYPH_CROSS_MARK);
+                                checkmark = 0;
                                 description = NULL;
                                 color = ansi_highlight_red();
                         }
@@ -1587,17 +1815,28 @@
                         if (d)
                                 description = d;
 
+                        if (checkmark < 0) {
+                                r = table_add_many(details_table, TABLE_EMPTY);
+                                if (r < 0)
+                                        return table_log_add_error(r);
+                        } else {
+                                r = table_add_many(details_table,
+                                                   TABLE_BOOLEAN_CHECKMARK, checkmark > 0,
+                                                   TABLE_SET_MINIMUM_WIDTH, 1,
+                                                   TABLE_SET_MAXIMUM_WIDTH, 1,
+                                                   TABLE_SET_ELLIPSIZE_PERCENT, 0,
+                                                   TABLE_SET_COLOR, color);
+                                if (r < 0)
+                                        return table_log_add_error(r);
+                        }
+
                         r = table_add_many(details_table,
-                                           TABLE_STRING, checkmark,
-                                           TABLE_SET_MINIMUM_WIDTH, 1,
-                                           TABLE_SET_MAXIMUM_WIDTH, 1,
-                                           TABLE_SET_ELLIPSIZE_PERCENT, 0,
-                                           TABLE_SET_COLOR, color,
                                            TABLE_STRING, a->id, TABLE_SET_URL, a->url,
+                                           TABLE_STRING, a->json_field,
                                            TABLE_STRING, description,
-                                           TABLE_UINT64, a->weight, TABLE_SET_ALIGN_PERCENT, 100,
+                                           TABLE_UINT64, weight, TABLE_SET_ALIGN_PERCENT, 100,
                                            TABLE_UINT64, badness, TABLE_SET_ALIGN_PERCENT, 100,
-                                           TABLE_UINT64, a->range, TABLE_SET_ALIGN_PERCENT, 100,
+                                           TABLE_UINT64, range, TABLE_SET_ALIGN_PERCENT, 100,
                                            TABLE_EMPTY, TABLE_SET_ALIGN_PERCENT, 100);
                         if (r < 0)
                                 return table_log_add_error(r);
@@ -1615,14 +1854,14 @@
                         TableCell *cell;
                         uint64_t x;
 
-                        assert_se(weight = table_get_at(details_table, row, 3));
-                        assert_se(badness = table_get_at(details_table, row, 4));
-                        assert_se(range = table_get_at(details_table, row, 5));
+                        assert_se(weight = table_get_at(details_table, row, 4));
+                        assert_se(badness = table_get_at(details_table, row, 5));
+                        assert_se(range = table_get_at(details_table, row, 6));
 
                         if (*badness == UINT64_MAX || *badness == 0)
                                 continue;
 
-                        assert_se(cell = table_get_cell(details_table, row, 6));
+                        assert_se(cell = table_get_cell(details_table, row, 7));
 
                         x = DIV_ROUND_UP(DIV_ROUND_UP(*badness * *weight * 100U, *range), weight_sum);
                         xsprintf(buf, "%" PRIu64 ".%" PRIu64, x / 10, x % 10);
@@ -1632,7 +1871,13 @@
                                 return log_error_errno(r, "Failed to update cell in table: %m");
                 }
 
-                r = table_print(details_table, stdout);
+                if (json_format_flags & JSON_FORMAT_OFF) {
+                        r = table_hide_column_from_display(details_table, (size_t) 2);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to set columns to display: %m");
+                }
+
+                r = table_print_with_pager(details_table, json_format_flags, pager_flags, /* show_header= */true);
                 if (r < 0)
                         return log_error_errno(r, "Failed to output table: %m");
         }
@@ -1645,7 +1890,7 @@
 
         assert(i < ELEMENTSOF(badness_table));
 
-        if (details_table) {
+        if (details_table && (json_format_flags & JSON_FORMAT_OFF)) {
                 _cleanup_free_ char *clickable = NULL;
                 const char *name;
 
@@ -1661,7 +1906,7 @@
                         name = info->id;
 
                 printf("\n%s %sOverall exposure level for %s%s: %s%" PRIu64 ".%" PRIu64 " %s%s %s\n",
-                       special_glyph(SPECIAL_GLYPH_ARROW),
+                       special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
                        ansi_highlight(),
                        name,
                        ansi_normal(),
@@ -1698,6 +1943,58 @@
                         return table_log_add_error(r);
         }
 
+        /* Return error when overall exposure level is over threshold */
+        if (exposure > threshold)
+                return -EINVAL;
+
+        return 0;
+}
+
+static int property_read_restrict_namespaces(
+                sd_bus *bus,
+                const char *member,
+                sd_bus_message *m,
+                sd_bus_error *error,
+                void *userdata) {
+
+        SecurityInfo *info = ASSERT_PTR(userdata);
+        int r;
+        uint64_t namespaces;
+
+        assert(bus);
+        assert(member);
+        assert(m);
+
+        r = sd_bus_message_read(m, "t", &namespaces);
+        if (r < 0)
+                return r;
+
+        info->restrict_namespaces = (unsigned long long) namespaces;
+
+        return 0;
+}
+
+static int property_read_umask(
+                sd_bus *bus,
+                const char *member,
+                sd_bus_message *m,
+                sd_bus_error *error,
+                void *userdata) {
+
+        SecurityInfo *info = ASSERT_PTR(userdata);
+        int r;
+        uint32_t umask;
+
+        assert(bus);
+        assert(member);
+        assert(m);
+
+        r = sd_bus_message_read(m, "u", &umask);
+        if (r < 0)
+                return r;
+
+        info->_umask = (mode_t) umask;
+
         return 0;
 }
 
@@ -1708,7 +2005,7 @@
                 sd_bus_error *error,
                 void *userdata) {
 
-        struct security_info *info = userdata;
+        SecurityInfo *info = userdata;
         int allow_list, r;
 
         assert(bus);
@@ -1761,6 +2058,41 @@
         return sd_bus_message_exit_container(m);
 }
 
+static int property_read_syscall_archs(
+                sd_bus *bus,
+                const char *member,
+                sd_bus_message *m,
+                sd_bus_error *error,
+                void *userdata) {
+
+        SecurityInfo *info = ASSERT_PTR(userdata);
+        int r;
+
+        assert(bus);
+        assert(member);
+        assert(m);
+
+        r = sd_bus_message_enter_container(m, 'a', "s");
+        if (r < 0)
+                return r;
+
+        for (;;) {
+                const char *name;
+
+                r = sd_bus_message_read(m, "s", &name);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        break;
+
+                r = set_put_strdup(&info->system_call_architectures, name);
+                if (r < 0)
+                        return r;
+        }
+
+        return sd_bus_message_exit_container(m);
+}
+
 static int property_read_system_call_filter(
                 sd_bus *bus,
                 const char *member,
@@ -1768,7 +2100,7 @@
                 sd_bus_error *error,
                 void *userdata) {
 
-        struct security_info *info = userdata;
+        SecurityInfo *info = userdata;
         int allow_list, r;
 
         assert(bus);
@@ -1798,7 +2130,8 @@
                 if (r == 0)
                         break;
 
-                r = set_put_strdup(&info->system_call_filter, name);
+                /* ignore errno or action after colon */
+                r = set_put_strndup(&info->system_call_filter, name, strchrnul(name, ':') - name);
                 if (r < 0)
                         return r;
         }
@@ -1817,7 +2150,7 @@
                 sd_bus_error *error,
                 void *userdata) {
 
-        struct security_info *info = userdata;
+        SecurityInfo *info = userdata;
         bool deny_ipv4 = false, deny_ipv6 = false;
         int r;
 
@@ -1895,7 +2228,7 @@
                 sd_bus_error *error,
                 void *userdata) {
 
-        struct security_info *info = userdata;
+        SecurityInfo *info = userdata;
         _cleanup_(strv_freep) char **l = NULL;
         int r;
 
@@ -1922,8 +2255,7 @@
                 sd_bus_error *error,
                 void *userdata) {
 
-        struct security_info *info = userdata;
-        size_t n = 0;
+        SecurityInfo *info = userdata;
         int r;
 
         assert(bus);
@@ -1943,64 +2275,64 @@
                 if (r == 0)
                         break;
 
-                n++;
+                r = strv_extendf(&info->device_allow, "%s:%s", name, policy);
+                if (r < 0)
+                        return r;
         }
 
-        info->device_allow_non_empty = n > 0;
-
         return sd_bus_message_exit_container(m);
 }
 
-static int acquire_security_info(sd_bus *bus, const char *name, struct security_info *info, AnalyzeSecurityFlags flags) {
+static int acquire_security_info(sd_bus *bus, const char *name, SecurityInfo *info, AnalyzeSecurityFlags flags) {
 
         static const struct bus_properties_map security_map[] = {
-                { "AmbientCapabilities",     "t",       NULL,                                    offsetof(struct security_info, ambient_capabilities)      },
-                { "CapabilityBoundingSet",   "t",       NULL,                                    offsetof(struct security_info, capability_bounding_set)   },
-                { "DefaultDependencies",     "b",       NULL,                                    offsetof(struct security_info, default_dependencies)      },
-                { "Delegate",                "b",       NULL,                                    offsetof(struct security_info, delegate)                  },
-                { "DeviceAllow",             "a(ss)",   property_read_device_allow,              0                                                         },
-                { "DevicePolicy",            "s",       NULL,                                    offsetof(struct security_info, device_policy)             },
-                { "DynamicUser",             "b",       NULL,                                    offsetof(struct security_info, dynamic_user)              },
-                { "FragmentPath",            "s",       NULL,                                    offsetof(struct security_info, fragment_path)             },
-                { "IPAddressAllow",          "a(iayu)", property_read_ip_address_allow,          0                                                         },
-                { "IPAddressDeny",           "a(iayu)", property_read_ip_address_allow,          0                                                         },
-                { "IPIngressFilterPath",     "as",      property_read_ip_filters,                0                                                         },
-                { "IPEgressFilterPath",      "as",      property_read_ip_filters,                0                                                         },
-                { "Id",                      "s",       NULL,                                    offsetof(struct security_info, id)                        },
-                { "KeyringMode",             "s",       NULL,                                    offsetof(struct security_info, keyring_mode)              },
-                { "ProtectProc",             "s",       NULL,                                    offsetof(struct security_info, protect_proc)              },
-                { "ProcSubset",              "s",       NULL,                                    offsetof(struct security_info, proc_subset)               },
-                { "LoadState",               "s",       NULL,                                    offsetof(struct security_info, load_state)                },
-                { "LockPersonality",         "b",       NULL,                                    offsetof(struct security_info, lock_personality)          },
-                { "MemoryDenyWriteExecute",  "b",       NULL,                                    offsetof(struct security_info, memory_deny_write_execute) },
-                { "NoNewPrivileges",         "b",       NULL,                                    offsetof(struct security_info, no_new_privileges)         },
-                { "NotifyAccess",            "s",       NULL,                                    offsetof(struct security_info, notify_access)             },
-                { "PrivateDevices",          "b",       NULL,                                    offsetof(struct security_info, private_devices)           },
-                { "PrivateMounts",           "b",       NULL,                                    offsetof(struct security_info, private_mounts)            },
-                { "PrivateNetwork",          "b",       NULL,                                    offsetof(struct security_info, private_network)           },
-                { "PrivateTmp",              "b",       NULL,                                    offsetof(struct security_info, private_tmp)               },
-                { "PrivateUsers",            "b",       NULL,                                    offsetof(struct security_info, private_users)             },
-                { "ProtectControlGroups",    "b",       NULL,                                    offsetof(struct security_info, protect_control_groups)    },
-                { "ProtectHome",             "s",       NULL,                                    offsetof(struct security_info, protect_home)              },
-                { "ProtectHostname",         "b",       NULL,                                    offsetof(struct security_info, protect_hostname)          },
-                { "ProtectKernelModules",    "b",       NULL,                                    offsetof(struct security_info, protect_kernel_modules)    },
-                { "ProtectKernelTunables",   "b",       NULL,                                    offsetof(struct security_info, protect_kernel_tunables)   },
-                { "ProtectKernelLogs",       "b",       NULL,                                    offsetof(struct security_info, protect_kernel_logs)       },
-                { "ProtectClock",            "b",       NULL,                                    offsetof(struct security_info, protect_clock)             },
-                { "ProtectSystem",           "s",       NULL,                                    offsetof(struct security_info, protect_system)            },
-                { "RemoveIPC",               "b",       NULL,                                    offsetof(struct security_info, remove_ipc)                },
-                { "RestrictAddressFamilies", "(bas)",   property_read_restrict_address_families, 0                                                         },
-                { "RestrictNamespaces",      "t",       NULL,                                    offsetof(struct security_info, restrict_namespaces)       },
-                { "RestrictRealtime",        "b",       NULL,                                    offsetof(struct security_info, restrict_realtime)         },
-                { "RestrictSUIDSGID",        "b",       NULL,                                    offsetof(struct security_info, restrict_suid_sgid)        },
-                { "RootDirectory",           "s",       NULL,                                    offsetof(struct security_info, root_directory)            },
-                { "RootImage",               "s",       NULL,                                    offsetof(struct security_info, root_image)                },
-                { "SupplementaryGroups",     "as",      NULL,                                    offsetof(struct security_info, supplementary_groups)      },
-                { "SystemCallArchitectures", "as",      NULL,                                    offsetof(struct security_info, system_call_architectures) },
-                { "SystemCallFilter",        "(as)",    property_read_system_call_filter,        0                                                         },
-                { "Type",                    "s",       NULL,                                    offsetof(struct security_info, type)                      },
-                { "UMask",                   "u",       NULL,                                    offsetof(struct security_info, _umask)                    },
-                { "User",                    "s",       NULL,                                    offsetof(struct security_info, user)                      },
+                { "AmbientCapabilities",     "t",       NULL,                                    offsetof(SecurityInfo, ambient_capabilities)      },
+                { "CapabilityBoundingSet",   "t",       NULL,                                    offsetof(SecurityInfo, capability_bounding_set)   },
+                { "DefaultDependencies",     "b",       NULL,                                    offsetof(SecurityInfo, default_dependencies)      },
+                { "Delegate",                "b",       NULL,                                    offsetof(SecurityInfo, delegate)                  },
+                { "DeviceAllow",             "a(ss)",   property_read_device_allow,              0                                                 },
+                { "DevicePolicy",            "s",       NULL,                                    offsetof(SecurityInfo, device_policy)             },
+                { "DynamicUser",             "b",       NULL,                                    offsetof(SecurityInfo, dynamic_user)              },
+                { "FragmentPath",            "s",       NULL,                                    offsetof(SecurityInfo, fragment_path)             },
+                { "IPAddressAllow",          "a(iayu)", property_read_ip_address_allow,          0                                                 },
+                { "IPAddressDeny",           "a(iayu)", property_read_ip_address_allow,          0                                                 },
+                { "IPIngressFilterPath",     "as",      property_read_ip_filters,                0                                                 },
+                { "IPEgressFilterPath",      "as",      property_read_ip_filters,                0                                                 },
+                { "Id",                      "s",       NULL,                                    offsetof(SecurityInfo, id)                        },
+                { "KeyringMode",             "s",       NULL,                                    offsetof(SecurityInfo, keyring_mode)              },
+                { "ProtectProc",             "s",       NULL,                                    offsetof(SecurityInfo, protect_proc)              },
+                { "ProcSubset",              "s",       NULL,                                    offsetof(SecurityInfo, proc_subset)               },
+                { "LoadState",               "s",       NULL,                                    offsetof(SecurityInfo, load_state)                },
+                { "LockPersonality",         "b",       NULL,                                    offsetof(SecurityInfo, lock_personality)          },
+                { "MemoryDenyWriteExecute",  "b",       NULL,                                    offsetof(SecurityInfo, memory_deny_write_execute) },
+                { "NoNewPrivileges",         "b",       NULL,                                    offsetof(SecurityInfo, no_new_privileges)         },
+                { "NotifyAccess",            "s",       NULL,                                    offsetof(SecurityInfo, notify_access)             },
+                { "PrivateDevices",          "b",       NULL,                                    offsetof(SecurityInfo, private_devices)           },
+                { "PrivateMounts",           "b",       NULL,                                    offsetof(SecurityInfo, private_mounts)            },
+                { "PrivateNetwork",          "b",       NULL,                                    offsetof(SecurityInfo, private_network)           },
+                { "PrivateTmp",              "b",       NULL,                                    offsetof(SecurityInfo, private_tmp)               },
+                { "PrivateUsers",            "b",       NULL,                                    offsetof(SecurityInfo, private_users)             },
+                { "ProtectControlGroups",    "b",       NULL,                                    offsetof(SecurityInfo, protect_control_groups)    },
+                { "ProtectHome",             "s",       NULL,                                    offsetof(SecurityInfo, protect_home)              },
+                { "ProtectHostname",         "b",       NULL,                                    offsetof(SecurityInfo, protect_hostname)          },
+                { "ProtectKernelModules",    "b",       NULL,                                    offsetof(SecurityInfo, protect_kernel_modules)    },
+                { "ProtectKernelTunables",   "b",       NULL,                                    offsetof(SecurityInfo, protect_kernel_tunables)   },
+                { "ProtectKernelLogs",       "b",       NULL,                                    offsetof(SecurityInfo, protect_kernel_logs)       },
+                { "ProtectClock",            "b",       NULL,                                    offsetof(SecurityInfo, protect_clock)             },
+                { "ProtectSystem",           "s",       NULL,                                    offsetof(SecurityInfo, protect_system)            },
+                { "RemoveIPC",               "b",       NULL,                                    offsetof(SecurityInfo, remove_ipc)                },
+                { "RestrictAddressFamilies", "(bas)",   property_read_restrict_address_families, 0                                                 },
+                { "RestrictNamespaces",      "t",       property_read_restrict_namespaces,       0                                                 },
+                { "RestrictRealtime",        "b",       NULL,                                    offsetof(SecurityInfo, restrict_realtime)         },
+                { "RestrictSUIDSGID",        "b",       NULL,                                    offsetof(SecurityInfo, restrict_suid_sgid)        },
+                { "RootDirectory",           "s",       NULL,                                    offsetof(SecurityInfo, root_directory)            },
+                { "RootImage",               "s",       NULL,                                    offsetof(SecurityInfo, root_image)                },
+                { "SupplementaryGroups",     "as",      NULL,                                    offsetof(SecurityInfo, supplementary_groups)      },
+                { "SystemCallArchitectures", "as",      property_read_syscall_archs,             0                                                 },
+                { "SystemCallFilter",        "(as)",    property_read_system_call_filter,        0                                                 },
+                { "Type",                    "s",       NULL,                                    offsetof(SecurityInfo, type)                      },
+                { "UMask",                   "u",       property_read_umask,                     0                                                 },
+                { "User",                    "s",       NULL,                                    offsetof(SecurityInfo, user)                      },
                 {}
         };
 
@@ -2075,36 +2407,396 @@
         return 0;
 }
 
-static int analyze_security_one(sd_bus *bus, const char *name, Table *overview_table, AnalyzeSecurityFlags flags) {
-        _cleanup_(security_info_free) struct security_info info = {
-                .default_dependencies = true,
-                .capability_bounding_set = UINT64_MAX,
-                .restrict_namespaces = UINT64_MAX,
-                ._umask = 0002,
-        };
+static int analyze_security_one(sd_bus *bus,
+                                const char *name,
+                                Table *overview_table,
+                                AnalyzeSecurityFlags flags,
+                                unsigned threshold,
+                                JsonVariant *policy,
+                                PagerFlags pager_flags,
+                                JsonFormatFlags json_format_flags) {
+
+        _cleanup_(security_info_freep) SecurityInfo *info = security_info_new();
+        if (!info)
+                return log_oom();
+
         int r;
 
         assert(bus);
         assert(name);
 
-        r = acquire_security_info(bus, name, &info, flags);
+        r = acquire_security_info(bus, name, info, flags);
         if (r == -EMEDIUMTYPE) /* Ignore this one because not loaded or Type is oneshot */
                 return 0;
         if (r < 0)
                 return r;
 
-        r = assess(&info, overview_table, flags);
+        r = assess(info, overview_table, flags, threshold, policy, pager_flags, json_format_flags);
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int analyze_security(sd_bus *bus, char **units, AnalyzeSecurityFlags flags) {
+/* Refactoring SecurityInfo so that it can make use of existing struct variables instead of reading from dbus */
+static int get_security_info(Unit *u, ExecContext *c, CGroupContext *g, SecurityInfo **ret_info) {
+        assert(ret_info);
+
+        _cleanup_(security_info_freep) SecurityInfo *info = security_info_new();
+        if (!info)
+                return log_oom();
+
+        if (u) {
+                if (u->id) {
+                        info->id = strdup(u->id);
+                        if (!info->id)
+                                return log_oom();
+                }
+                if (unit_type_to_string(u->type)) {
+                        info->type = strdup(unit_type_to_string(u->type));
+                        if (!info->type)
+                                return log_oom();
+                }
+                if (unit_load_state_to_string(u->load_state)) {
+                        info->load_state = strdup(unit_load_state_to_string(u->load_state));
+                        if (!info->load_state)
+                                return log_oom();
+                }
+                if (u->fragment_path) {
+                        info->fragment_path = strdup(u->fragment_path);
+                        if (!info->fragment_path)
+                                return log_oom();
+                }
+                info->default_dependencies = u->default_dependencies;
+                if (u->type == UNIT_SERVICE && notify_access_to_string(SERVICE(u)->notify_access)) {
+                        info->notify_access = strdup(notify_access_to_string(SERVICE(u)->notify_access));
+                        if (!info->notify_access)
+                                return log_oom();
+                }
+        }
+
+        if (c) {
+                info->ambient_capabilities = c->capability_ambient_set;
+                info->capability_bounding_set = c->capability_bounding_set;
+                if (c->user) {
+                        info->user = strdup(c->user);
+                        if (!info->user)
+                                return log_oom();
+                }
+                if (c->supplementary_groups) {
+                        info->supplementary_groups = strv_copy(c->supplementary_groups);
+                        if (!info->supplementary_groups)
+                                return log_oom();
+                }
+                info->dynamic_user = c->dynamic_user;
+                if (exec_keyring_mode_to_string(c->keyring_mode)) {
+                        info->keyring_mode = strdup(exec_keyring_mode_to_string(c->keyring_mode));
+                        if (!info->keyring_mode)
+                                return log_oom();
+                }
+                if (protect_proc_to_string(c->protect_proc)) {
+                        info->protect_proc = strdup(protect_proc_to_string(c->protect_proc));
+                        if (!info->protect_proc)
+                                return log_oom();
+                }
+                if (proc_subset_to_string(c->proc_subset)) {
+                        info->proc_subset = strdup(proc_subset_to_string(c->proc_subset));
+                        if (!info->proc_subset)
+                                return log_oom();
+                }
+                info->lock_personality = c->lock_personality;
+                info->memory_deny_write_execute = c->memory_deny_write_execute;
+                info->no_new_privileges = c->no_new_privileges;
+                info->protect_hostname = c->protect_hostname;
+                info->private_devices = c->private_devices;
+                info->private_mounts = c->private_mounts;
+                info->private_network = c->private_network;
+                info->private_tmp = c->private_tmp;
+                info->private_users = c->private_users;
+                info->protect_control_groups = c->protect_control_groups;
+                info->protect_kernel_modules = c->protect_kernel_modules;
+                info->protect_kernel_tunables = c->protect_kernel_tunables;
+                info->protect_kernel_logs = c->protect_kernel_logs;
+                info->protect_clock = c->protect_clock;
+                if (protect_home_to_string(c->protect_home)) {
+                        info->protect_home = strdup(protect_home_to_string(c->protect_home));
+                        if (!info->protect_home)
+                                return log_oom();
+                }
+                if (protect_system_to_string(c->protect_system)) {
+                        info->protect_system = strdup(protect_system_to_string(c->protect_system));
+                        if (!info->protect_system)
+                                return log_oom();
+                }
+                info->remove_ipc = c->remove_ipc;
+                info->restrict_address_family_inet =
+                        info->restrict_address_family_unix =
+                        info->restrict_address_family_netlink =
+                        info->restrict_address_family_packet =
+                        info->restrict_address_family_other =
+                        c->address_families_allow_list;
+
+                void *key;
+                SET_FOREACH(key, c->address_families) {
+                        int family = PTR_TO_INT(key);
+                        if (family == 0)
+                                continue;
+                        if (IN_SET(family, AF_INET, AF_INET6))
+                                info->restrict_address_family_inet = !c->address_families_allow_list;
+                        else if (family == AF_UNIX)
+                                info->restrict_address_family_unix = !c->address_families_allow_list;
+                        else if (family == AF_NETLINK)
+                                info->restrict_address_family_netlink = !c->address_families_allow_list;
+                        else if (family == AF_PACKET)
+                                info->restrict_address_family_packet = !c->address_families_allow_list;
+                        else
+                                info->restrict_address_family_other = !c->address_families_allow_list;
+                }
+
+                info->restrict_namespaces = c->restrict_namespaces;
+                info->restrict_realtime = c->restrict_realtime;
+                info->restrict_suid_sgid = c->restrict_suid_sgid;
+                if (c->root_directory) {
+                        info->root_directory = strdup(c->root_directory);
+                        if (!info->root_directory)
+                                return log_oom();
+                }
+                if (c->root_image) {
+                        info->root_image = strdup(c->root_image);
+                        if (!info->root_image)
+                                return log_oom();
+                }
+                info->_umask = c->umask;
+
+#if HAVE_SECCOMP
+                SET_FOREACH(key, c->syscall_archs) {
+                        const char *name;
+
+                        name = seccomp_arch_to_string(PTR_TO_UINT32(key) - 1);
+                        if (!name)
+                                continue;
+
+                        if (set_put_strdup(&info->system_call_architectures, name) < 0)
+                                return log_oom();
+                }
+
+                info->system_call_filter_allow_list = c->syscall_allow_list;
+
+                void *id, *num;
+                HASHMAP_FOREACH_KEY(num, id, c->syscall_filter) {
+                        _cleanup_free_ char *name = NULL;
+
+                        if (info->system_call_filter_allow_list && PTR_TO_INT(num) >= 0)
+                                continue;
+
+                        name = seccomp_syscall_resolve_num_arch(SCMP_ARCH_NATIVE, PTR_TO_INT(id) - 1);
+                        if (!name)
+                                continue;
+
+                        if (set_ensure_consume(&info->system_call_filter, &string_hash_ops_free, TAKE_PTR(name)) < 0)
+                                return log_oom();
+                }
+#endif
+        }
+
+        if (g) {
+                info->delegate = g->delegate;
+                if (cgroup_device_policy_to_string(g->device_policy)) {
+                        info->device_policy = strdup(cgroup_device_policy_to_string(g->device_policy));
+                        if (!info->device_policy)
+                                return log_oom();
+                }
+
+                struct in_addr_prefix *i;
+                bool deny_ipv4 = false, deny_ipv6 = false;
+
+                SET_FOREACH(i, g->ip_address_deny) {
+                        if (i->family == AF_INET && i->prefixlen == 0)
+                                deny_ipv4 = true;
+                        else if (i->family == AF_INET6 && i->prefixlen == 0)
+                                deny_ipv6 = true;
+                }
+                info->ip_address_deny_all = deny_ipv4 && deny_ipv6;
+
+                info->ip_address_allow_localhost = info->ip_address_allow_other = false;
+                SET_FOREACH(i, g->ip_address_allow) {
+                        if (in_addr_is_localhost(i->family, &i->address))
+                                info->ip_address_allow_localhost = true;
+                        else
+                                info->ip_address_allow_other = true;
+                }
+
+                info->ip_filters_custom_ingress = !strv_isempty(g->ip_filters_ingress);
+                info->ip_filters_custom_egress = !strv_isempty(g->ip_filters_egress);
+
+                LIST_FOREACH(device_allow, a, g->device_allow)
+                        if (strv_extendf(&info->device_allow,
+                                         "%s:%s%s%s",
+                                         a->path,
+                                         a->r ? "r" : "", a->w ? "w" : "", a->m ? "m" : "") < 0)
+                                return log_oom();
+        }
+
+        *ret_info = TAKE_PTR(info);
+
+        return 0;
+}
+
+static int offline_security_check(Unit *u,
+                                  unsigned threshold,
+                                  JsonVariant *policy,
+                                  PagerFlags pager_flags,
+                                  JsonFormatFlags json_format_flags) {
+
+        _cleanup_(table_unrefp) Table *overview_table = NULL;
+        AnalyzeSecurityFlags flags = 0;
+        _cleanup_(security_info_freep) SecurityInfo *info = NULL;
+        int r;
+
+        assert(u);
+
+        if (DEBUG_LOGGING)
+                unit_dump(u, stdout, "\t");
+
+        r = get_security_info(u, unit_get_exec_context(u), unit_get_cgroup_context(u), &info);
+        if (r < 0)
+              return r;
+
+        return assess(info, overview_table, flags, threshold, policy, pager_flags, json_format_flags);
+}
+
+static int offline_security_checks(char **filenames,
+                                   JsonVariant *policy,
+                                   LookupScope scope,
+                                   bool check_man,
+                                   bool run_generators,
+                                   unsigned threshold,
+                                   const char *root,
+                                   const char *profile,
+                                   PagerFlags pager_flags,
+                                   JsonFormatFlags json_format_flags) {
+
+        const ManagerTestRunFlags flags =
+                MANAGER_TEST_RUN_MINIMAL |
+                MANAGER_TEST_RUN_ENV_GENERATORS |
+                MANAGER_TEST_RUN_IGNORE_DEPENDENCIES |
+                run_generators * MANAGER_TEST_RUN_GENERATORS;
+
+        _cleanup_(manager_freep) Manager *m = NULL;
+        Unit *units[strv_length(filenames)];
+        _cleanup_free_ char *var = NULL;
+        int r, k;
+        size_t count = 0;
+
+        if (strv_isempty(filenames))
+                return 0;
+
+        /* set the path */
+        r = verify_generate_path(&var, filenames);
+        if (r < 0)
+                return log_error_errno(r, "Failed to generate unit load path: %m");
+
+        assert_se(set_unit_path(var) >= 0);
+
+        r = manager_new(scope, flags, &m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to initialize manager: %m");
+
+        log_debug("Starting manager...");
+
+        r = manager_startup(m, /* serialization= */ NULL, /* fds= */ NULL, root);
+        if (r < 0)
+                return r;
+
+        if (profile) {
+                /* Ensure the temporary directory is in the search path, so that we can add drop-ins. */
+                r = strv_extend(&m->lookup_paths.search_path, m->lookup_paths.temporary_dir);
+                if (r < 0)
+                        return log_oom();
+        }
+
+        log_debug("Loading remaining units from the command line...");
+
+        STRV_FOREACH(filename, filenames) {
+                _cleanup_free_ char *prepared = NULL;
+
+                log_debug("Handling %s...", *filename);
+
+                k = verify_prepare_filename(*filename, &prepared);
+                if (k < 0) {
+                        log_warning_errno(k, "Failed to prepare filename %s: %m", *filename);
+                        if (r == 0)
+                                r = k;
+                        continue;
+                }
+
+                /* When a portable image is analyzed, the profile is what provides a good chunk of
+                 * the security-related settings, but they are obviously not shipped with the image.
+                 * This allows to take them in consideration. */
+                if (profile) {
+                        _cleanup_free_ char *unit_name = NULL, *dropin = NULL, *profile_path = NULL;
+
+                        r = path_extract_filename(prepared, &unit_name);
+                        if (r < 0)
+                                return log_oom();
+
+                        dropin = strjoin(m->lookup_paths.temporary_dir, "/", unit_name, ".d/profile.conf");
+                        if (!dropin)
+                                return log_oom();
+                        (void) mkdir_parents(dropin, 0755);
+
+                        if (!is_path(profile)) {
+                                r = find_portable_profile(profile, unit_name, &profile_path);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to find portable profile %s: %m", profile);
+                                profile = profile_path;
+                        }
+
+                        r = copy_file(profile, dropin, 0, 0644, 0, 0, 0);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to copy: %m");
+                }
+
+                k = manager_load_startable_unit_or_warn(m, NULL, prepared, &units[count]);
+                if (k < 0) {
+                        if (r == 0)
+                                r = k;
+                        continue;
+                }
+
+                count++;
+        }
+
+        for (size_t i = 0; i < count; i++) {
+                k = offline_security_check(units[i], threshold, policy, pager_flags, json_format_flags);
+                if (k < 0 && r == 0)
+                        r = k;
+        }
+
+        return r;
+}
+
+static int analyze_security(sd_bus *bus,
+                     char **units,
+                     JsonVariant *policy,
+                     LookupScope scope,
+                     bool check_man,
+                     bool run_generators,
+                     bool offline,
+                     unsigned threshold,
+                     const char *root,
+                     const char *profile,
+                     JsonFormatFlags json_format_flags,
+                     PagerFlags pager_flags,
+                     AnalyzeSecurityFlags flags) {
+
         _cleanup_(table_unrefp) Table *overview_table = NULL;
         int ret = 0, r;
 
-        assert(bus);
+        assert(!!bus != offline);
+
+        if (offline)
+                return offline_security_checks(units, policy, scope, check_man, run_generators, threshold, root, profile, pager_flags, json_format_flags);
 
         if (strv_length(units) != 1) {
                 overview_table = table_new("unit", "exposure", "predicate", "happy");
@@ -2117,13 +2809,10 @@
                 _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
                 _cleanup_strv_free_ char **list = NULL;
                 size_t n = 0;
-                char **i;
 
-                r = sd_bus_call_method(
+                r = bus_call_method(
                                 bus,
-                                "org.freedesktop.systemd1",
-                                "/org/freedesktop/systemd1",
-                                "org.freedesktop.systemd1.Manager",
+                                bus_systemd_mgr,
                                 "ListUnits",
                                 &error,
                                 &reply,
@@ -2164,14 +2853,12 @@
                 flags |= ANALYZE_SECURITY_SHORT|ANALYZE_SECURITY_ONLY_LOADED|ANALYZE_SECURITY_ONLY_LONG_RUNNING;
 
                 STRV_FOREACH(i, list) {
-                        r = analyze_security_one(bus, *i, overview_table, flags);
+                        r = analyze_security_one(bus, *i, overview_table, flags, threshold, policy, pager_flags, json_format_flags);
                         if (r < 0 && ret >= 0)
                                 ret = r;
                 }
 
-        } else {
-                char **i;
-
+        } else
                 STRV_FOREACH(i, units) {
                         _cleanup_free_ char *mangled = NULL, *instance = NULL;
                         const char *name;
@@ -2199,11 +2886,10 @@
                         } else
                                 name = mangled;
 
-                        r = analyze_security_one(bus, name, overview_table, flags);
+                        r = analyze_security_one(bus, name, overview_table, flags, threshold, policy, pager_flags, json_format_flags);
                         if (r < 0 && ret >= 0)
                                 ret = r;
                 }
-        }
 
         if (overview_table) {
                 if (!FLAGS_SET(flags, ANALYZE_SECURITY_SHORT)) {
@@ -2211,10 +2897,57 @@
                         fflush(stdout);
                 }
 
-                r = table_print(overview_table, stdout);
+                r = table_print_with_pager(overview_table, json_format_flags, pager_flags, /* show_header= */true);
                 if (r < 0)
                         return log_error_errno(r, "Failed to output table: %m");
         }
-
         return ret;
 }
+
+int verb_security(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *policy = NULL;
+        int r;
+        unsigned line, column;
+
+        if (!arg_offline) {
+                r = acquire_bus(&bus, NULL);
+                if (r < 0)
+                        return bus_log_connect_error(r, arg_transport);
+        }
+
+        pager_open(arg_pager_flags);
+
+        if (arg_security_policy) {
+                r = json_parse_file(/*f=*/ NULL, arg_security_policy, /*flags=*/ 0, &policy, &line, &column);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse '%s' at %u:%u: %m", arg_security_policy, line, column);
+        } else {
+                _cleanup_fclose_ FILE *f = NULL;
+                _cleanup_free_ char *pp = NULL;
+
+                r = search_and_fopen_nulstr("systemd-analyze-security.policy", "re", /*root=*/ NULL, CONF_PATHS_NULSTR("systemd"), &f, &pp);
+                if (r < 0 && r != -ENOENT)
+                        return r;
+
+                if (f) {
+                        r = json_parse_file(f, pp, /*flags=*/ 0, &policy, &line, &column);
+                        if (r < 0)
+                                return log_error_errno(r, "[%s:%u:%u] Failed to parse JSON policy: %m", pp, line, column);
+                }
+        }
+
+        return analyze_security(bus,
+                                strv_skip(argv, 1),
+                                policy,
+                                arg_scope,
+                                arg_man,
+                                arg_generators,
+                                arg_offline,
+                                arg_threshold,
+                                arg_root,
+                                arg_profile,
+                                arg_json_format_flags,
+                                arg_pager_flags,
+                                /*flags=*/ 0);
+}
diff --git a/src/analyze/analyze-security.h b/src/analyze/analyze-security.h
index e8de39f..82f4c7f 100644
--- a/src/analyze/analyze-security.h
+++ b/src/analyze/analyze-security.h
@@ -1,12 +1,10 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "sd-bus.h"
-
 typedef enum AnalyzeSecurityFlags {
         ANALYZE_SECURITY_SHORT             = 1 << 0,
         ANALYZE_SECURITY_ONLY_LOADED       = 1 << 1,
         ANALYZE_SECURITY_ONLY_LONG_RUNNING = 1 << 2,
 } AnalyzeSecurityFlags;
 
-int analyze_security(sd_bus *bus, char **units, AnalyzeSecurityFlags flags);
+int verb_security(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-service-watchdogs.c b/src/analyze/analyze-service-watchdogs.c
new file mode 100644
index 0000000..6535eb1
--- /dev/null
+++ b/src/analyze/analyze-service-watchdogs.c
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-service-watchdogs.h"
+#include "bus-error.h"
+#include "bus-locator.h"
+#include "parse-util.h"
+
+int verb_service_watchdogs(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        int b, r;
+
+        assert(IN_SET(argc, 1, 2));
+        assert(argv);
+
+        r = acquire_bus(&bus, NULL);
+        if (r < 0)
+                return bus_log_connect_error(r, arg_transport);
+
+        if (argc == 1) {
+                /* get ServiceWatchdogs */
+                r = bus_get_property_trivial(bus, bus_systemd_mgr, "ServiceWatchdogs", &error, 'b', &b);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get service-watchdog state: %s", bus_error_message(&error, r));
+
+                printf("%s\n", yes_no(!!b));
+
+        } else {
+                /* set ServiceWatchdogs */
+                b = parse_boolean(argv[1]);
+                if (b < 0)
+                        return log_error_errno(b, "Failed to parse service-watchdogs argument: %m");
+
+                r = bus_set_property(bus, bus_systemd_mgr, "ServiceWatchdogs", &error, "b", b);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set service-watchdog state: %s", bus_error_message(&error, r));
+        }
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-service-watchdogs.h b/src/analyze/analyze-service-watchdogs.h
new file mode 100644
index 0000000..2f59f5a
--- /dev/null
+++ b/src/analyze/analyze-service-watchdogs.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_service_watchdogs(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-syscall-filter.c b/src/analyze/analyze-syscall-filter.c
new file mode 100644
index 0000000..66a52da
--- /dev/null
+++ b/src/analyze/analyze-syscall-filter.c
@@ -0,0 +1,202 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze-syscall-filter.h"
+#include "analyze.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "nulstr-util.h"
+#include "seccomp-util.h"
+#include "set.h"
+#include "strv.h"
+#include "terminal-util.h"
+
+#if HAVE_SECCOMP
+
+static int load_kernel_syscalls(Set **ret) {
+        _cleanup_set_free_ Set *syscalls = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        int r;
+
+        /* Let's read the available system calls from the list of available tracing events. Slightly dirty,
+         * but good enough for analysis purposes. */
+
+        f = fopen("/sys/kernel/tracing/available_events", "re");
+        if (!f) {
+                /* We tried the non-debugfs mount point and that didn't work. If it wasn't mounted, maybe the
+                 * old debugfs mount point works? */
+                f = fopen("/sys/kernel/debug/tracing/available_events", "re");
+                if (!f)
+                        return log_full_errno(IN_SET(errno, EPERM, EACCES, ENOENT) ? LOG_DEBUG : LOG_WARNING, errno,
+                                              "Can't read open tracefs' available_events file: %m");
+        }
+
+        for (;;) {
+                _cleanup_free_ char *line = NULL;
+                const char *e;
+
+                r = read_line(f, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read system call list: %m");
+                if (r == 0)
+                        break;
+
+                e = startswith(line, "syscalls:sys_enter_");
+                if (!e)
+                        continue;
+
+                /* These are named differently inside the kernel than their external name for historical
+                 * reasons. Let's hide them here. */
+                if (STR_IN_SET(e, "newuname", "newfstat", "newstat", "newlstat", "sysctl"))
+                        continue;
+
+                r = set_put_strdup(&syscalls, e);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to add system call to list: %m");
+        }
+
+        *ret = TAKE_PTR(syscalls);
+        return 0;
+}
+
+static int syscall_set_add(Set **s, const SyscallFilterSet *set) {
+        int r;
+
+        assert(s);
+
+        if (!set)
+                return 0;
+
+        NULSTR_FOREACH(sc, set->value) {
+                if (sc[0] == '@')
+                        continue;
+
+                r = set_put_strdup(s, sc);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static void syscall_set_remove(Set *s, const SyscallFilterSet *set) {
+        if (!set)
+                return;
+
+        NULSTR_FOREACH(sc, set->value) {
+                if (sc[0] == '@')
+                        continue;
+
+                free(set_remove(s, sc));
+        }
+}
+
+static void dump_syscall_filter(const SyscallFilterSet *set) {
+        printf("%s%s%s\n"
+               "    # %s\n",
+               ansi_highlight(),
+               set->name,
+               ansi_normal(),
+               set->help);
+
+        NULSTR_FOREACH(syscall, set->value)
+                printf("    %s%s%s\n", syscall[0] == '@' ? ansi_underline() : "", syscall, ansi_normal());
+}
+
+int verb_syscall_filters(int argc, char *argv[], void *userdata) {
+        bool first = true;
+        int r;
+
+        pager_open(arg_pager_flags);
+
+        if (strv_isempty(strv_skip(argv, 1))) {
+                _cleanup_set_free_ Set *kernel = NULL, *known = NULL;
+                int k = 0;  /* explicit initialization to appease gcc */
+
+                r = syscall_set_add(&known, syscall_filter_sets + SYSCALL_FILTER_SET_KNOWN);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to prepare set of known system calls: %m");
+
+                if (!arg_quiet)
+                        k = load_kernel_syscalls(&kernel);
+
+                for (int i = 0; i < _SYSCALL_FILTER_SET_MAX; i++) {
+                        const SyscallFilterSet *set = syscall_filter_sets + i;
+                        if (!first)
+                                puts("");
+
+                        dump_syscall_filter(set);
+                        syscall_set_remove(kernel, set);
+                        if (i != SYSCALL_FILTER_SET_KNOWN)
+                                syscall_set_remove(known, set);
+                        first = false;
+                }
+
+                if (arg_quiet)  /* Let's not show the extra stuff in quiet mode */
+                        return 0;
+
+                if (!set_isempty(known)) {
+                        _cleanup_free_ char **l = NULL;
+
+                        printf("\n"
+                               "# %sUngrouped System Calls%s (known but not included in any of the groups except @known):\n",
+                               ansi_highlight(), ansi_normal());
+
+                        l = set_get_strv(known);
+                        if (!l)
+                                return log_oom();
+
+                        strv_sort(l);
+
+                        STRV_FOREACH(syscall, l)
+                                printf("#   %s\n", *syscall);
+                }
+
+                if (k < 0) {
+                        fputc('\n', stdout);
+                        fflush(stdout);
+                        if (!arg_quiet)
+                                log_notice_errno(k, "# Not showing unlisted system calls, couldn't retrieve kernel system call list: %m");
+                } else if (!set_isempty(kernel)) {
+                        _cleanup_free_ char **l = NULL;
+
+                        printf("\n"
+                               "# %sUnlisted System Calls%s (supported by the local kernel, but not included in any of the groups listed above):\n",
+                               ansi_highlight(), ansi_normal());
+
+                        l = set_get_strv(kernel);
+                        if (!l)
+                                return log_oom();
+
+                        strv_sort(l);
+
+                        STRV_FOREACH(syscall, l)
+                                printf("#   %s\n", *syscall);
+                }
+        } else
+                STRV_FOREACH(name, strv_skip(argv, 1)) {
+                        const SyscallFilterSet *set;
+
+                        if (!first)
+                                puts("");
+
+                        set = syscall_filter_set_find(*name);
+                        if (!set) {
+                                /* make sure the error appears below normal output */
+                                fflush(stdout);
+
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
+                                                       "Filter set \"%s\" not found.", *name);
+                        }
+
+                        dump_syscall_filter(set);
+                        first = false;
+                }
+
+        return EXIT_SUCCESS;
+}
+
+#else
+int verb_syscall_filters(int argc, char *argv[], void *userdata) {
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Not compiled with syscall filters, sorry.");
+}
+#endif
diff --git a/src/analyze/analyze-syscall-filter.h b/src/analyze/analyze-syscall-filter.h
new file mode 100644
index 0000000..3a1af85
--- /dev/null
+++ b/src/analyze/analyze-syscall-filter.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_syscall_filters(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-time-data.c b/src/analyze/analyze-time-data.c
new file mode 100644
index 0000000..aa42d69
--- /dev/null
+++ b/src/analyze/analyze-time-data.c
@@ -0,0 +1,297 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-time-data.h"
+#include "bus-error.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
+#include "bus-unit-util.h"
+#include "special.h"
+
+static void subtract_timestamp(usec_t *a, usec_t b) {
+        assert(a);
+
+        if (*a > 0) {
+                assert(*a >= b);
+                *a -= b;
+        }
+}
+
+int acquire_boot_times(sd_bus *bus, BootTimes **ret) {
+        static const struct bus_properties_map property_map[] = {
+                { "FirmwareTimestampMonotonic",               "t", NULL, offsetof(BootTimes, firmware_time)                 },
+                { "LoaderTimestampMonotonic",                 "t", NULL, offsetof(BootTimes, loader_time)                   },
+                { "KernelTimestamp",                          "t", NULL, offsetof(BootTimes, kernel_time)                   },
+                { "InitRDTimestampMonotonic",                 "t", NULL, offsetof(BootTimes, initrd_time)                   },
+                { "UserspaceTimestampMonotonic",              "t", NULL, offsetof(BootTimes, userspace_time)                },
+                { "FinishTimestampMonotonic",                 "t", NULL, offsetof(BootTimes, finish_time)                   },
+                { "SecurityStartTimestampMonotonic",          "t", NULL, offsetof(BootTimes, security_start_time)           },
+                { "SecurityFinishTimestampMonotonic",         "t", NULL, offsetof(BootTimes, security_finish_time)          },
+                { "GeneratorsStartTimestampMonotonic",        "t", NULL, offsetof(BootTimes, generators_start_time)         },
+                { "GeneratorsFinishTimestampMonotonic",       "t", NULL, offsetof(BootTimes, generators_finish_time)        },
+                { "UnitsLoadStartTimestampMonotonic",         "t", NULL, offsetof(BootTimes, unitsload_start_time)          },
+                { "UnitsLoadFinishTimestampMonotonic",        "t", NULL, offsetof(BootTimes, unitsload_finish_time)         },
+                { "InitRDSecurityStartTimestampMonotonic",    "t", NULL, offsetof(BootTimes, initrd_security_start_time)    },
+                { "InitRDSecurityFinishTimestampMonotonic",   "t", NULL, offsetof(BootTimes, initrd_security_finish_time)   },
+                { "InitRDGeneratorsStartTimestampMonotonic",  "t", NULL, offsetof(BootTimes, initrd_generators_start_time)  },
+                { "InitRDGeneratorsFinishTimestampMonotonic", "t", NULL, offsetof(BootTimes, initrd_generators_finish_time) },
+                { "InitRDUnitsLoadStartTimestampMonotonic",   "t", NULL, offsetof(BootTimes, initrd_unitsload_start_time)   },
+                { "InitRDUnitsLoadFinishTimestampMonotonic",  "t", NULL, offsetof(BootTimes, initrd_unitsload_finish_time)  },
+                {},
+        };
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        static BootTimes times;
+        static bool cached = false;
+        int r;
+
+        if (cached)
+                goto finish;
+
+        assert_cc(sizeof(usec_t) == sizeof(uint64_t));
+
+        r = bus_map_all_properties(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        "/org/freedesktop/systemd1",
+                        property_map,
+                        BUS_MAP_STRDUP,
+                        &error,
+                        NULL,
+                        &times);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get timestamp properties: %s", bus_error_message(&error, r));
+
+        if (times.finish_time <= 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EINPROGRESS),
+                                       "Bootup is not yet finished (org.freedesktop.systemd1.Manager.FinishTimestampMonotonic=%"PRIu64").\n"
+                                       "Please try again later.\n"
+                                       "Hint: Use 'systemctl%s list-jobs' to see active jobs",
+                                       times.finish_time,
+                                       arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user");
+
+        if (arg_scope == LOOKUP_SCOPE_SYSTEM && times.security_start_time > 0) {
+                /* security_start_time is set when systemd is not running under container environment. */
+                if (times.initrd_time > 0)
+                        times.kernel_done_time = times.initrd_time;
+                else
+                        times.kernel_done_time = times.userspace_time;
+        } else {
+                /*
+                 * User-instance-specific or container-system-specific timestamps processing
+                 * (see comment to reverse_offset in BootTimes).
+                 */
+                times.reverse_offset = times.userspace_time;
+
+                times.firmware_time = times.loader_time = times.kernel_time = times.initrd_time =
+                        times.userspace_time = times.security_start_time = times.security_finish_time = 0;
+
+                subtract_timestamp(&times.finish_time, times.reverse_offset);
+
+                subtract_timestamp(&times.generators_start_time, times.reverse_offset);
+                subtract_timestamp(&times.generators_finish_time, times.reverse_offset);
+
+                subtract_timestamp(&times.unitsload_start_time, times.reverse_offset);
+                subtract_timestamp(&times.unitsload_finish_time, times.reverse_offset);
+        }
+
+        cached = true;
+
+finish:
+        *ret = &times;
+        return 0;
+}
+
+static int bus_get_uint64_property(sd_bus *bus, const char *path, const char *interface, const char *property, uint64_t *val) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        int r;
+
+        assert(bus);
+        assert(path);
+        assert(interface);
+        assert(property);
+        assert(val);
+
+        r = sd_bus_get_property_trivial(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        path,
+                        interface,
+                        property,
+                        &error,
+                        't', val);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse reply: %s", bus_error_message(&error, r));
+
+        return 0;
+}
+
+int pretty_boot_time(sd_bus *bus, char **ret) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_free_ char *path = NULL, *unit_id = NULL, *text = NULL;
+        usec_t activated_time = USEC_INFINITY;
+        BootTimes *t;
+        int r;
+
+        r = acquire_boot_times(bus, &t);
+        if (r < 0)
+                return r;
+
+        path = unit_dbus_path_from_name(SPECIAL_DEFAULT_TARGET);
+        if (!path)
+                return log_oom();
+
+        r = sd_bus_get_property_string(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        path,
+                        "org.freedesktop.systemd1.Unit",
+                        "Id",
+                        &error,
+                        &unit_id);
+        if (r < 0)
+                log_warning_errno(r, "default.target doesn't seem to exist, ignoring: %s", bus_error_message(&error, r));
+
+        r = bus_get_uint64_property(bus, path,
+                        "org.freedesktop.systemd1.Unit",
+                        "ActiveEnterTimestampMonotonic",
+                        &activated_time);
+        if (r < 0)
+                log_warning_errno(r, "Could not get time to reach default.target, ignoring: %m");
+
+        text = strdup("Startup finished in ");
+        if (!text)
+                return log_oom();
+
+        if (t->firmware_time > 0 && !strextend(&text, FORMAT_TIMESPAN(t->firmware_time - t->loader_time, USEC_PER_MSEC), " (firmware) + "))
+                return log_oom();
+        if (t->loader_time > 0 && !strextend(&text, FORMAT_TIMESPAN(t->loader_time, USEC_PER_MSEC), " (loader) + "))
+                return log_oom();
+        if (t->kernel_done_time > 0 && !strextend(&text, FORMAT_TIMESPAN(t->kernel_done_time, USEC_PER_MSEC), " (kernel) + "))
+                return log_oom();
+        if (t->initrd_time > 0 && !strextend(&text, FORMAT_TIMESPAN(t->userspace_time - t->initrd_time, USEC_PER_MSEC), " (initrd) + "))
+                return log_oom();
+
+        if (!strextend(&text, FORMAT_TIMESPAN(t->finish_time - t->userspace_time, USEC_PER_MSEC), " (userspace) "))
+                return log_oom();
+
+        if (t->kernel_done_time > 0)
+                if (!strextend(&text, "= ", FORMAT_TIMESPAN(t->firmware_time + t->finish_time, USEC_PER_MSEC),  " "))
+                        return log_oom();
+
+        if (unit_id && timestamp_is_set(activated_time)) {
+                usec_t base = t->userspace_time > 0 ? t->userspace_time : t->reverse_offset;
+
+                if (!strextend(&text, "\n", unit_id, " reached after ", FORMAT_TIMESPAN(activated_time - base, USEC_PER_MSEC), " in userspace."))
+                        return log_oom();
+
+        } else if (unit_id && activated_time == 0) {
+
+                if (!strextend(&text, "\n", unit_id, " was never reached."))
+                        return log_oom();
+
+        } else if (unit_id && activated_time == USEC_INFINITY) {
+
+                if (!strextend(&text, "\nCould not get time to reach ", unit_id, "."))
+                        return log_oom();
+
+        } else if (!unit_id) {
+
+                if (!strextend(&text, "\ncould not find default.target."))
+                        return log_oom();
+        }
+
+        *ret = TAKE_PTR(text);
+        return 0;
+}
+
+UnitTimes* unit_times_free_array(UnitTimes *t) {
+        if (!t)
+                return NULL;
+
+        for (UnitTimes *p = t; p->has_data; p++)
+                free(p->name);
+
+        return mfree(t);
+}
+
+int acquire_time_data(sd_bus *bus, UnitTimes **out) {
+        static const struct bus_properties_map property_map[] = {
+                { "InactiveExitTimestampMonotonic",  "t", NULL, offsetof(UnitTimes, activating)   },
+                { "ActiveEnterTimestampMonotonic",   "t", NULL, offsetof(UnitTimes, activated)    },
+                { "ActiveExitTimestampMonotonic",    "t", NULL, offsetof(UnitTimes, deactivating) },
+                { "InactiveEnterTimestampMonotonic", "t", NULL, offsetof(UnitTimes, deactivated)  },
+                {},
+        };
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(unit_times_free_arrayp) UnitTimes *unit_times = NULL;
+        BootTimes *boot_times = NULL;
+        size_t c = 0;
+        UnitInfo u;
+        int r;
+
+        r = acquire_boot_times(bus, &boot_times);
+        if (r < 0)
+                return r;
+
+        r = bus_call_method(bus, bus_systemd_mgr, "ListUnits", &error, &reply, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to list units: %s", bus_error_message(&error, r));
+
+        r = sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "(ssssssouso)");
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        while ((r = bus_parse_unit_info(reply, &u)) > 0) {
+                UnitTimes *t;
+
+                if (!GREEDY_REALLOC(unit_times, c + 2))
+                        return log_oom();
+
+                unit_times[c + 1].has_data = false;
+                t = &unit_times[c];
+                t->name = NULL;
+
+                assert_cc(sizeof(usec_t) == sizeof(uint64_t));
+
+                r = bus_map_all_properties(
+                                bus,
+                                "org.freedesktop.systemd1",
+                                u.unit_path,
+                                property_map,
+                                BUS_MAP_STRDUP,
+                                &error,
+                                NULL,
+                                t);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get timestamp properties of unit %s: %s",
+                                               u.id, bus_error_message(&error, r));
+
+                subtract_timestamp(&t->activating, boot_times->reverse_offset);
+                subtract_timestamp(&t->activated, boot_times->reverse_offset);
+                subtract_timestamp(&t->deactivating, boot_times->reverse_offset);
+                subtract_timestamp(&t->deactivated, boot_times->reverse_offset);
+
+                if (t->activated >= t->activating)
+                        t->time = t->activated - t->activating;
+                else if (t->deactivated >= t->activating)
+                        t->time = t->deactivated - t->activating;
+                else
+                        t->time = 0;
+
+                if (t->activating == 0)
+                        continue;
+
+                t->name = strdup(u.id);
+                if (!t->name)
+                        return log_oom();
+
+                t->has_data = true;
+                c++;
+        }
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        *out = TAKE_PTR(unit_times);
+        return c;
+}
diff --git a/src/analyze/analyze-time-data.h b/src/analyze/analyze-time-data.h
new file mode 100644
index 0000000..02ee16a
--- /dev/null
+++ b/src/analyze/analyze-time-data.h
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <sd-bus.h>
+
+#include "time-util.h"
+
+typedef struct BootTimes {
+        usec_t firmware_time;
+        usec_t loader_time;
+        usec_t kernel_time;
+        usec_t kernel_done_time;
+        usec_t initrd_time;
+        usec_t userspace_time;
+        usec_t finish_time;
+        usec_t security_start_time;
+        usec_t security_finish_time;
+        usec_t generators_start_time;
+        usec_t generators_finish_time;
+        usec_t unitsload_start_time;
+        usec_t unitsload_finish_time;
+        usec_t initrd_security_start_time;
+        usec_t initrd_security_finish_time;
+        usec_t initrd_generators_start_time;
+        usec_t initrd_generators_finish_time;
+        usec_t initrd_unitsload_start_time;
+        usec_t initrd_unitsload_finish_time;
+
+        /*
+         * If we're analyzing the user instance, all timestamps will be offset by its own start-up timestamp,
+         * which may be arbitrarily big.  With "plot", this causes arbitrarily wide output SVG files which
+         * almost completely consist of empty space. Thus we cancel out this offset.
+         *
+         * This offset is subtracted from times above by acquire_boot_times(), but it still needs to be
+         * subtracted from unit-specific timestamps (so it is stored here for reference).
+         */
+        usec_t reverse_offset;
+} BootTimes;
+
+typedef struct UnitTimes {
+        bool has_data;
+        char *name;
+        usec_t activating;
+        usec_t activated;
+        usec_t deactivated;
+        usec_t deactivating;
+        usec_t time;
+} UnitTimes;
+
+int acquire_boot_times(sd_bus *bus, BootTimes **ret);
+int pretty_boot_time(sd_bus *bus, char **ret);
+
+UnitTimes* unit_times_free_array(UnitTimes *t);
+DEFINE_TRIVIAL_CLEANUP_FUNC(UnitTimes*, unit_times_free_array);
+
+int acquire_time_data(sd_bus *bus, UnitTimes **out);
diff --git a/src/analyze/analyze-time.c b/src/analyze/analyze-time.c
new file mode 100644
index 0000000..c233b1f
--- /dev/null
+++ b/src/analyze/analyze-time.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-time.h"
+#include "analyze-time-data.h"
+
+int verb_time(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_free_ char *buf = NULL;
+        int r;
+
+        r = acquire_bus(&bus, NULL);
+        if (r < 0)
+                return bus_log_connect_error(r, arg_transport);
+
+        r = pretty_boot_time(bus, &buf);
+        if (r < 0)
+                return r;
+
+        puts(buf);
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-time.h b/src/analyze/analyze-time.h
new file mode 100644
index 0000000..a8f8575
--- /dev/null
+++ b/src/analyze/analyze-time.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_time(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-timespan.c b/src/analyze/analyze-timespan.c
new file mode 100644
index 0000000..3fdf0f9
--- /dev/null
+++ b/src/analyze/analyze-timespan.c
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-timespan.h"
+#include "calendarspec.h"
+#include "format-table.h"
+#include "glyph-util.h"
+#include "strv.h"
+#include "terminal-util.h"
+
+int verb_timespan(int argc, char *argv[], void *userdata) {
+        STRV_FOREACH(input_timespan, strv_skip(argv, 1)) {
+                _cleanup_(table_unrefp) Table *table = NULL;
+                usec_t output_usecs;
+                TableCell *cell;
+                int r;
+
+                r = parse_time(*input_timespan, &output_usecs, USEC_PER_SEC);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to parse time span '%s': %m", *input_timespan);
+                        time_parsing_hint(*input_timespan, /* calendar= */ true, /* timestamp= */ true, /* timespan= */ false);
+                        return r;
+                }
+
+                table = table_new_vertical();
+                if (!table)
+                        return log_oom();
+
+                assert_se(cell = table_get_cell(table, 0, 0));
+                r = table_set_ellipsize_percent(table, cell, 100);
+                if (r < 0)
+                        return r;
+
+                assert_se(cell = table_get_cell(table, 0, 1));
+                r = table_set_ellipsize_percent(table, cell, 100);
+                if (r < 0)
+                        return r;
+
+                r = table_add_many(table,
+                                   TABLE_FIELD, "Original",
+                                   TABLE_STRING, *input_timespan);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                r = table_add_cell_stringf_full(table, NULL, TABLE_FIELD, "%ss", special_glyph(SPECIAL_GLYPH_MU));
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                r = table_add_many(table,
+                                   TABLE_UINT64, output_usecs,
+                                   TABLE_FIELD, "Human",
+                                   TABLE_TIMESPAN, output_usecs,
+                                   TABLE_SET_COLOR, ansi_highlight());
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                r = table_print(table, NULL);
+                if (r < 0)
+                        return r;
+
+                if (input_timespan[1])
+                        putchar('\n');
+        }
+
+        return 0;
+}
diff --git a/src/analyze/analyze-timespan.h b/src/analyze/analyze-timespan.h
new file mode 100644
index 0000000..46d2295
--- /dev/null
+++ b/src/analyze/analyze-timespan.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_timespan(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-timestamp.c b/src/analyze/analyze-timestamp.c
new file mode 100644
index 0000000..97de438
--- /dev/null
+++ b/src/analyze/analyze-timestamp.c
@@ -0,0 +1,90 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-timestamp.h"
+#include "format-table.h"
+#include "terminal-util.h"
+
+static int test_timestamp_one(const char *p) {
+        _cleanup_(table_unrefp) Table *table = NULL;
+        TableCell *cell;
+        usec_t usec;
+        int r;
+
+        r = parse_timestamp(p, &usec);
+        if (r < 0) {
+                log_error_errno(r, "Failed to parse \"%s\": %m", p);
+                time_parsing_hint(p, /* calendar= */ true, /* timestamp= */ false, /* timespan= */ true);
+                return r;
+        }
+
+        table = table_new_vertical();
+        if (!table)
+                return log_oom();
+
+        assert_se(cell = table_get_cell(table, 0, 0));
+        r = table_set_ellipsize_percent(table, cell, 100);
+        if (r < 0)
+                return r;
+
+        assert_se(cell = table_get_cell(table, 0, 1));
+        r = table_set_ellipsize_percent(table, cell, 100);
+        if (r < 0)
+                return r;
+
+        r = table_add_many(table,
+                           TABLE_FIELD, "Original form",
+                           TABLE_STRING, p,
+                           TABLE_FIELD, "Normalized form",
+                           TABLE_TIMESTAMP, usec,
+                           TABLE_SET_COLOR, ansi_highlight_blue());
+        if (r < 0)
+                return table_log_add_error(r);
+
+        if (!in_utc_timezone()) {
+                r = table_add_many(table,
+                                   TABLE_FIELD, "(in UTC)",
+                                   TABLE_TIMESTAMP_UTC, usec);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        r = table_add_cell(table, NULL, TABLE_FIELD, "UNIX seconds");
+        if (r < 0)
+                return table_log_add_error(r);
+
+        if (usec % USEC_PER_SEC == 0)
+                r = table_add_cell_stringf(table, NULL, "@%"PRI_USEC,
+                                           usec / USEC_PER_SEC);
+        else
+                r = table_add_cell_stringf(table, NULL, "@%"PRI_USEC".%06"PRI_USEC"",
+                                           usec / USEC_PER_SEC,
+                                           usec % USEC_PER_SEC);
+        if (r < 0)
+                return r;
+
+        r = table_add_many(table,
+                           TABLE_FIELD, "From now",
+                           TABLE_TIMESTAMP_RELATIVE, usec);
+        if (r < 0)
+                return table_log_add_error(r);
+
+        return table_print(table, NULL);
+}
+
+int verb_timestamp(int argc, char *argv[], void *userdata) {
+        int r = 0;
+
+        STRV_FOREACH(p, strv_skip(argv, 1)) {
+                int k;
+
+                k = test_timestamp_one(*p);
+                if (r == 0 && k < 0)
+                        r = k;
+
+                if (p[1])
+                        putchar('\n');
+        }
+
+        return r;
+}
diff --git a/src/analyze/analyze-timestamp.h b/src/analyze/analyze-timestamp.h
new file mode 100644
index 0000000..43e4b57
--- /dev/null
+++ b/src/analyze/analyze-timestamp.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_timestamp(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-unit-files.c b/src/analyze/analyze-unit-files.c
new file mode 100644
index 0000000..ec9be33
--- /dev/null
+++ b/src/analyze/analyze-unit-files.c
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-unit-files.h"
+#include "path-lookup.h"
+#include "strv.h"
+
+static bool strv_fnmatch_strv_or_empty(char* const* patterns, char **strv, int flags) {
+        STRV_FOREACH(s, strv)
+                if (strv_fnmatch_or_empty(patterns, *s, flags))
+                        return true;
+
+        return false;
+}
+
+int verb_unit_files(int argc, char *argv[], void *userdata) {
+        _cleanup_hashmap_free_ Hashmap *unit_ids = NULL, *unit_names = NULL;
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+        char **patterns = strv_skip(argv, 1);
+        const char *k, *dst;
+        char **v;
+        int r;
+
+        r = lookup_paths_init_or_warn(&lp, arg_scope, 0, NULL);
+        if (r < 0)
+                return r;
+
+        r = unit_file_build_name_map(&lp, NULL, &unit_ids, &unit_names, NULL);
+        if (r < 0)
+                return log_error_errno(r, "unit_file_build_name_map() failed: %m");
+
+        HASHMAP_FOREACH_KEY(dst, k, unit_ids) {
+                if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
+                    !strv_fnmatch_or_empty(patterns, dst, FNM_NOESCAPE))
+                        continue;
+
+                printf("ids: %s → %s\n", k, dst);
+        }
+
+        HASHMAP_FOREACH_KEY(v, k, unit_names) {
+                if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
+                    !strv_fnmatch_strv_or_empty(patterns, v, FNM_NOESCAPE))
+                        continue;
+
+                _cleanup_free_ char *j = strv_join(v, ", ");
+                printf("aliases: %s ← %s\n", k, j);
+        }
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-unit-files.h b/src/analyze/analyze-unit-files.h
new file mode 100644
index 0000000..c193fd8
--- /dev/null
+++ b/src/analyze/analyze-unit-files.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_unit_files(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-unit-paths.c b/src/analyze/analyze-unit-paths.c
new file mode 100644
index 0000000..c225461
--- /dev/null
+++ b/src/analyze/analyze-unit-paths.c
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "analyze.h"
+#include "analyze-unit-paths.h"
+#include "path-lookup.h"
+#include "strv.h"
+
+int verb_unit_paths(int argc, char *argv[], void *userdata) {
+        _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        int r;
+
+        r = lookup_paths_init_or_warn(&paths, arg_scope, 0, NULL);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(p, paths.search_path)
+                puts(*p);
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/analyze/analyze-unit-paths.h b/src/analyze/analyze-unit-paths.h
new file mode 100644
index 0000000..b8d46e8
--- /dev/null
+++ b/src/analyze/analyze-unit-paths.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_unit_paths(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze-verify-util.c b/src/analyze/analyze-verify-util.c
new file mode 100644
index 0000000..b9f08b6
--- /dev/null
+++ b/src/analyze/analyze-verify-util.c
@@ -0,0 +1,353 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stdlib.h>
+
+#include "all-units.h"
+#include "alloc-util.h"
+#include "analyze-verify-util.h"
+#include "bus-error.h"
+#include "bus-util.h"
+#include "log.h"
+#include "manager.h"
+#include "pager.h"
+#include "path-util.h"
+#include "string-table.h"
+#include "strv.h"
+#include "unit-name.h"
+#include "unit-serialize.h"
+
+static void log_syntax_callback(const char *unit, int level, void *userdata) {
+        Set **s = ASSERT_PTR(userdata);
+        int r;
+
+        assert(unit);
+
+        if (level > LOG_WARNING)
+                return;
+
+        if (*s == POINTER_MAX)
+                return;
+
+        r = set_put_strdup(s, unit);
+        if (r < 0) {
+                set_free_free(*s);
+                *s = POINTER_MAX;
+        }
+}
+
+int verify_prepare_filename(const char *filename, char **ret) {
+        _cleanup_free_ char *abspath = NULL, *name = NULL, *dir = NULL, *with_instance = NULL;
+        char *c;
+        int r;
+
+        assert(filename);
+        assert(ret);
+
+        r = path_make_absolute_cwd(filename, &abspath);
+        if (r < 0)
+                return r;
+
+        r = path_extract_filename(abspath, &name);
+        if (r < 0)
+                return r;
+
+        if (!unit_name_is_valid(name, UNIT_NAME_ANY))
+                return -EINVAL;
+
+        if (unit_name_is_valid(name, UNIT_NAME_TEMPLATE)) {
+                r = unit_name_replace_instance(name, "i", &with_instance);
+                if (r < 0)
+                        return r;
+        }
+
+        r = path_extract_directory(abspath, &dir);
+        if (r < 0)
+                return r;
+
+        c = path_join(dir, with_instance ?: name);
+        if (!c)
+                return -ENOMEM;
+
+        *ret = c;
+        return 0;
+}
+
+int verify_generate_path(char **ret, char **filenames) {
+        _cleanup_strv_free_ char **ans = NULL;
+        _cleanup_free_ char *joined = NULL;
+        const char *old;
+        int r;
+
+        STRV_FOREACH(filename, filenames) {
+                _cleanup_free_ char *a = NULL;
+                char *t;
+
+                r = path_make_absolute_cwd(*filename, &a);
+                if (r < 0)
+                        return r;
+
+                r = path_extract_directory(a, &t);
+                if (r < 0)
+                        return r;
+
+                r = strv_consume(&ans, t);
+                if (r < 0)
+                        return r;
+        }
+
+        strv_uniq(ans);
+
+        /* First, prepend our directories. Second, if some path was specified, use that, and
+         * otherwise use the defaults. Any duplicates will be filtered out in path-lookup.c.
+         * Treat explicit empty path to mean that nothing should be appended.
+         */
+        old = getenv("SYSTEMD_UNIT_PATH");
+        if (!streq_ptr(old, "")) {
+                if (!old)
+                        old = ":";
+
+                r = strv_extend(&ans, old);
+                if (r < 0)
+                        return r;
+        }
+
+        joined = strv_join(ans, ":");
+        if (!joined)
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(joined);
+        return 0;
+}
+
+static int verify_socket(Unit *u) {
+        Unit *service;
+        int r;
+
+        assert(u);
+
+        if (u->type != UNIT_SOCKET)
+                return 0;
+
+        r = socket_load_service_unit(SOCKET(u), -1, &service);
+        if (r < 0)
+                return log_unit_error_errno(u, r, "service unit for the socket cannot be loaded: %m");
+
+        if (service->load_state != UNIT_LOADED)
+                return log_unit_error_errno(u, SYNTHETIC_ERRNO(ENOENT),
+                                            "service %s not loaded, socket cannot be started.", service->id);
+
+        log_unit_debug(u, "using service unit %s.", service->id);
+        return 0;
+}
+
+int verify_executable(Unit *u, const ExecCommand *exec, const char *root) {
+        int r;
+
+        if (!exec)
+                return 0;
+
+        if (exec->flags & EXEC_COMMAND_IGNORE_FAILURE)
+                return 0;
+
+        r = find_executable_full(exec->path, root, NULL, false, NULL, NULL);
+        if (r < 0)
+                return log_unit_error_errno(u, r, "Command %s is not executable: %m", exec->path);
+
+        return 0;
+}
+
+static int verify_executables(Unit *u, const char *root) {
+        ExecCommand *exec;
+        int r = 0, k;
+        unsigned i;
+
+        assert(u);
+
+        exec =  u->type == UNIT_SOCKET ? SOCKET(u)->control_command :
+                u->type == UNIT_MOUNT ? MOUNT(u)->control_command :
+                u->type == UNIT_SWAP ? SWAP(u)->control_command : NULL;
+        k = verify_executable(u, exec, root);
+        if (k < 0 && r == 0)
+                r = k;
+
+        if (u->type == UNIT_SERVICE)
+                for (i = 0; i < ELEMENTSOF(SERVICE(u)->exec_command); i++) {
+                        k = verify_executable(u, SERVICE(u)->exec_command[i], root);
+                        if (k < 0 && r == 0)
+                                r = k;
+                }
+
+        if (u->type == UNIT_SOCKET)
+                for (i = 0; i < ELEMENTSOF(SOCKET(u)->exec_command); i++) {
+                        k = verify_executable(u, SOCKET(u)->exec_command[i], root);
+                        if (k < 0 && r == 0)
+                                r = k;
+                }
+
+        return r;
+}
+
+static int verify_documentation(Unit *u, bool check_man) {
+        int r = 0, k;
+
+        STRV_FOREACH(p, u->documentation) {
+                log_unit_debug(u, "Found documentation item: %s", *p);
+
+                if (check_man && startswith(*p, "man:")) {
+                        k = show_man_page(*p + 4, true);
+                        if (k != 0) {
+                                if (k < 0)
+                                        log_unit_error_errno(u, k, "Can't show %s: %m", *p + 4);
+                                else {
+                                        log_unit_error(u, "Command 'man %s' failed with code %d", *p + 4, k);
+                                        k = -ENOEXEC;
+                                }
+                                if (r == 0)
+                                        r = k;
+                        }
+                }
+        }
+
+        /* Check remote URLs? */
+
+        return r;
+}
+
+static int verify_unit(Unit *u, bool check_man, const char *root) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        int r, k;
+
+        assert(u);
+
+        if (DEBUG_LOGGING)
+                unit_dump(u, stdout, "\t");
+
+        log_unit_debug(u, "Creating %s/start job", u->id);
+        r = manager_add_job(u->manager, JOB_START, u, JOB_REPLACE, NULL, &error, NULL);
+        if (r < 0)
+                log_unit_error_errno(u, r, "Failed to create %s/start: %s", u->id, bus_error_message(&error, r));
+
+        k = verify_socket(u);
+        if (k < 0 && r == 0)
+                r = k;
+
+        k = verify_executables(u, root);
+        if (k < 0 && r == 0)
+                r = k;
+
+        k = verify_documentation(u, check_man);
+        if (k < 0 && r == 0)
+                r = k;
+
+        return r;
+}
+
+static void set_destroy_ignore_pointer_max(Set** s) {
+        if (*s == POINTER_MAX)
+                return;
+        set_free_free(*s);
+}
+
+int verify_units(char **filenames, LookupScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root) {
+        const ManagerTestRunFlags flags =
+                MANAGER_TEST_RUN_MINIMAL |
+                MANAGER_TEST_RUN_ENV_GENERATORS |
+                (recursive_errors == RECURSIVE_ERRORS_NO) * MANAGER_TEST_RUN_IGNORE_DEPENDENCIES |
+                run_generators * MANAGER_TEST_RUN_GENERATORS;
+
+        _cleanup_(manager_freep) Manager *m = NULL;
+        _cleanup_(set_destroy_ignore_pointer_max) Set *s = NULL;
+        _unused_ _cleanup_(clear_log_syntax_callback) dummy_t dummy;
+        Unit *units[strv_length(filenames)];
+        _cleanup_free_ char *var = NULL;
+        int r, k, i, count = 0;
+
+        if (strv_isempty(filenames))
+                return 0;
+
+        /* Allow systemd-analyze to hook in a callback function so that it can get
+         * all the required log data from the function itself without having to rely
+         * on a global set variable for the same */
+        set_log_syntax_callback(log_syntax_callback, &s);
+
+        /* set the path */
+        r = verify_generate_path(&var, filenames);
+        if (r < 0)
+                return log_error_errno(r, "Failed to generate unit load path: %m");
+
+        assert_se(set_unit_path(var) >= 0);
+
+        r = manager_new(scope, flags, &m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to initialize manager: %m");
+
+        log_debug("Starting manager...");
+
+        r = manager_startup(m, /* serialization= */ NULL, /* fds= */ NULL, root);
+        if (r < 0)
+                return r;
+
+        manager_clear_jobs(m);
+
+        log_debug("Loading remaining units from the command line...");
+
+        STRV_FOREACH(filename, filenames) {
+                _cleanup_free_ char *prepared = NULL;
+
+                log_debug("Handling %s...", *filename);
+
+                k = verify_prepare_filename(*filename, &prepared);
+                if (k < 0) {
+                        log_error_errno(k, "Failed to prepare filename %s: %m", *filename);
+                        if (r == 0)
+                                r = k;
+                        continue;
+                }
+
+                k = manager_load_startable_unit_or_warn(m, NULL, prepared, &units[count]);
+                if (k < 0) {
+                        if (r == 0)
+                                r = k;
+                        continue;
+                }
+
+                count++;
+        }
+
+        for (i = 0; i < count; i++) {
+                k = verify_unit(units[i], check_man, root);
+                if (k < 0 && r == 0)
+                        r = k;
+        }
+
+        if (s == POINTER_MAX)
+                return log_oom();
+
+        if (set_isempty(s) || r != 0)
+                return r;
+
+        /* If all previous verifications succeeded, then either the recursive parsing of all the
+         * associated dependencies with RECURSIVE_ERRORS_YES or the parsing of the specified unit file
+         * with RECURSIVE_ERRORS_NO must have yielded a syntax warning and hence, a non-empty set. */
+        if (IN_SET(recursive_errors, RECURSIVE_ERRORS_YES, RECURSIVE_ERRORS_NO))
+                return -ENOTRECOVERABLE;
+
+        /* If all previous verifications succeeded, then the non-empty set could have resulted from
+         * a syntax warning encountered during the recursive parsing of the specified unit file and
+         * its direct dependencies. Hence, search for any of the filenames in the set and if found,
+         * return a non-zero process exit status. */
+        if (recursive_errors == RECURSIVE_ERRORS_ONE)
+                STRV_FOREACH(filename, filenames)
+                        if (set_contains(s, basename(*filename)))
+                                return -ENOTRECOVERABLE;
+
+        return 0;
+}
+
+static const char* const recursive_errors_table[_RECURSIVE_ERRORS_MAX] = {
+        [RECURSIVE_ERRORS_NO]  = "no",
+        [RECURSIVE_ERRORS_YES] = "yes",
+        [RECURSIVE_ERRORS_ONE] = "one",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(recursive_errors, RecursiveErrors);
diff --git a/src/analyze/analyze-verify-util.h b/src/analyze/analyze-verify-util.h
new file mode 100644
index 0000000..385d635
--- /dev/null
+++ b/src/analyze/analyze-verify-util.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+#include "execute.h"
+#include "path-lookup.h"
+
+typedef enum RecursiveErrors {
+        RECURSIVE_ERRORS_YES,               /* Look for errors in all associated units */
+        RECURSIVE_ERRORS_NO,                /* Don't look for errors in any but the selected unit */
+        RECURSIVE_ERRORS_ONE,               /* Look for errors in the selected unit and its direct dependencies */
+        _RECURSIVE_ERRORS_MAX,
+        _RECURSIVE_ERRORS_INVALID = -EINVAL,
+} RecursiveErrors;
+
+int verify_generate_path(char **var, char **filenames);
+int verify_prepare_filename(const char *filename, char **ret);
+int verify_executable(Unit *u, const ExecCommand *exec, const char *root);
+int verify_units(char **filenames, LookupScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root);
+
+const char* recursive_errors_to_string(RecursiveErrors i) _const_;
+RecursiveErrors recursive_errors_from_string(const char *s) _pure_;
diff --git a/src/analyze/analyze-verify.c b/src/analyze/analyze-verify.c
index bb5bdf9..35e4e1e 100644
--- a/src/analyze/analyze-verify.c
+++ b/src/analyze/analyze-verify.c
@@ -1,287 +1,70 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <stdlib.h>
-
-#include "alloc-util.h"
-#include "all-units.h"
+#include "analyze.h"
 #include "analyze-verify.h"
-#include "bus-error.h"
-#include "bus-util.h"
-#include "log.h"
-#include "manager.h"
-#include "pager.h"
-#include "path-util.h"
-#include "strv.h"
-#include "unit-name.h"
-#include "unit-serialize.h"
+#include "analyze-verify-util.h"
+#include "copy.h"
+#include "rm-rf.h"
+#include "tmpfile-util.h"
 
-static int prepare_filename(const char *filename, char **ret) {
+static int process_aliases(char *argv[], char *tempdir, char ***ret) {
+        _cleanup_strv_free_ char **filenames = NULL;
         int r;
-        const char *name;
-        _cleanup_free_ char *abspath = NULL;
-        _cleanup_free_ char *dir = NULL;
-        _cleanup_free_ char *with_instance = NULL;
-        char *c;
 
-        assert(filename);
+        assert(argv);
+        assert(tempdir);
         assert(ret);
 
-        r = path_make_absolute_cwd(filename, &abspath);
-        if (r < 0)
-                return r;
+        STRV_FOREACH(filename, strv_skip(argv, 1)) {
+                _cleanup_free_ char *src = NULL, *dst = NULL, *base = NULL;
+                const char *parse_arg;
 
-        name = basename(abspath);
-        if (!unit_name_is_valid(name, UNIT_NAME_ANY))
-                return -EINVAL;
-
-        if (unit_name_is_valid(name, UNIT_NAME_TEMPLATE)) {
-                r = unit_name_replace_instance(name, "i", &with_instance);
+                parse_arg = *filename;
+                r = extract_first_word(&parse_arg, &src, ":", EXTRACT_DONT_COALESCE_SEPARATORS|EXTRACT_RETAIN_ESCAPE);
                 if (r < 0)
                         return r;
-        }
 
-        dir = dirname_malloc(abspath);
-        if (!dir)
-                return -ENOMEM;
+                if (!parse_arg) {
+                        r = strv_consume(&filenames, TAKE_PTR(src));
+                        if (r < 0)
+                                return r;
 
-        c = path_join(dir, with_instance ?: name);
-        if (!c)
-                return -ENOMEM;
+                        continue;
+                }
 
-        *ret = c;
-        return 0;
-}
+                r = path_extract_filename(parse_arg, &base);
+                if (r < 0)
+                        return r;
 
-static int generate_path(char **var, char **filenames) {
-        const char *old;
-        char **filename;
-
-        _cleanup_strv_free_ char **ans = NULL;
-        int r;
-
-        STRV_FOREACH(filename, filenames) {
-                char *t;
-
-                t = dirname_malloc(*filename);
-                if (!t)
+                dst = path_join(tempdir, base);
+                if (!dst)
                         return -ENOMEM;
 
-                r = strv_consume(&ans, t);
+                r = copy_file(src, dst, 0, 0644, 0, 0, COPY_REFLINK);
+                if (r < 0)
+                        return r;
+
+                r = strv_consume(&filenames, TAKE_PTR(dst));
                 if (r < 0)
                         return r;
         }
 
-        assert_se(strv_uniq(ans));
-
-        /* First, prepend our directories. Second, if some path was specified, use that, and
-         * otherwise use the defaults. Any duplicates will be filtered out in path-lookup.c.
-         * Treat explicit empty path to mean that nothing should be appended.
-         */
-        old = getenv("SYSTEMD_UNIT_PATH");
-        if (!streq_ptr(old, "")) {
-                if (!old)
-                        old = ":";
-
-                r = strv_extend(&ans, old);
-                if (r < 0)
-                        return r;
-        }
-
-        *var = strv_join(ans, ":");
-        if (!*var)
-                return -ENOMEM;
-
+        *ret = TAKE_PTR(filenames);
         return 0;
 }
 
-static int verify_socket(Unit *u) {
-        Unit *service;
+int verb_verify(int argc, char *argv[], void *userdata) {
+        _cleanup_strv_free_ char **filenames = NULL;
+        _cleanup_(rm_rf_physical_and_freep) char *tempdir = NULL;
         int r;
 
-        assert(u);
-
-        if (u->type != UNIT_SOCKET)
-                return 0;
-
-        r = socket_load_service_unit(SOCKET(u), -1, &service);
+        r = mkdtemp_malloc("/tmp/systemd-analyze-XXXXXX", &tempdir);
         if (r < 0)
-                return log_unit_error_errno(u, r, "service unit for the socket cannot be loaded: %m");
+                return log_error_errno(r, "Failed to setup working directory: %m");
 
-        if (service->load_state != UNIT_LOADED)
-                return log_unit_error_errno(u, SYNTHETIC_ERRNO(ENOENT),
-                                            "service %s not loaded, socket cannot be started.", service->id);
-
-        log_unit_debug(u, "using service unit %s.", service->id);
-        return 0;
-}
-
-int verify_executable(Unit *u, const ExecCommand *exec) {
-        int r;
-
-        if (!exec)
-                return 0;
-
-        if (exec->flags & EXEC_COMMAND_IGNORE_FAILURE)
-                return 0;
-
-        r = find_executable_full(exec->path, false, NULL, NULL);
+        r = process_aliases(argv, tempdir, &filenames);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Command %s is not executable: %m", exec->path);
+                return log_error_errno(r, "Couldn't process aliases: %m");
 
-        return 0;
-}
-
-static int verify_executables(Unit *u) {
-        ExecCommand *exec;
-        int r = 0, k;
-        unsigned i;
-
-        assert(u);
-
-        exec =  u->type == UNIT_SOCKET ? SOCKET(u)->control_command :
-                u->type == UNIT_MOUNT ? MOUNT(u)->control_command :
-                u->type == UNIT_SWAP ? SWAP(u)->control_command : NULL;
-        k = verify_executable(u, exec);
-        if (k < 0 && r == 0)
-                r = k;
-
-        if (u->type == UNIT_SERVICE)
-                for (i = 0; i < ELEMENTSOF(SERVICE(u)->exec_command); i++) {
-                        k = verify_executable(u, SERVICE(u)->exec_command[i]);
-                        if (k < 0 && r == 0)
-                                r = k;
-                }
-
-        if (u->type == UNIT_SOCKET)
-                for (i = 0; i < ELEMENTSOF(SOCKET(u)->exec_command); i++) {
-                        k = verify_executable(u, SOCKET(u)->exec_command[i]);
-                        if (k < 0 && r == 0)
-                                r = k;
-                }
-
-        return r;
-}
-
-static int verify_documentation(Unit *u, bool check_man) {
-        char **p;
-        int r = 0, k;
-
-        STRV_FOREACH(p, u->documentation) {
-                log_unit_debug(u, "Found documentation item: %s", *p);
-
-                if (check_man && startswith(*p, "man:")) {
-                        k = show_man_page(*p + 4, true);
-                        if (k != 0) {
-                                if (k < 0)
-                                        log_unit_error_errno(u, k, "Can't show %s: %m", *p + 4);
-                                else {
-                                        log_unit_error(u, "Command 'man %s' failed with code %d", *p + 4, k);
-                                        k = -ENOEXEC;
-                                }
-                                if (r == 0)
-                                        r = k;
-                        }
-                }
-        }
-
-        /* Check remote URLs? */
-
-        return r;
-}
-
-static int verify_unit(Unit *u, bool check_man) {
-        _cleanup_(sd_bus_error_free) sd_bus_error err = SD_BUS_ERROR_NULL;
-        int r, k;
-
-        assert(u);
-
-        if (DEBUG_LOGGING)
-                unit_dump(u, stdout, "\t");
-
-        log_unit_debug(u, "Creating %s/start job", u->id);
-        r = manager_add_job(u->manager, JOB_START, u, JOB_REPLACE, NULL, &err, NULL);
-        if (r < 0)
-                log_unit_error_errno(u, r, "Failed to create %s/start: %s", u->id, bus_error_message(&err, r));
-
-        k = verify_socket(u);
-        if (k < 0 && r == 0)
-                r = k;
-
-        k = verify_executables(u);
-        if (k < 0 && r == 0)
-                r = k;
-
-        k = verify_documentation(u, check_man);
-        if (k < 0 && r == 0)
-                r = k;
-
-        return r;
-}
-
-int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run_generators) {
-        const ManagerTestRunFlags flags =
-                MANAGER_TEST_RUN_MINIMAL |
-                MANAGER_TEST_RUN_ENV_GENERATORS |
-                run_generators * MANAGER_TEST_RUN_GENERATORS;
-
-        _cleanup_(manager_freep) Manager *m = NULL;
-        Unit *units[strv_length(filenames)];
-        _cleanup_free_ char *var = NULL;
-        int r, k, i, count = 0;
-        char **filename;
-
-        if (strv_isempty(filenames))
-                return 0;
-
-        /* set the path */
-        r = generate_path(&var, filenames);
-        if (r < 0)
-                return log_error_errno(r, "Failed to generate unit load path: %m");
-
-        assert_se(set_unit_path(var) >= 0);
-
-        r = manager_new(scope, flags, &m);
-        if (r < 0)
-                return log_error_errno(r, "Failed to initialize manager: %m");
-
-        log_debug("Starting manager...");
-
-        r = manager_startup(m, NULL, NULL);
-        if (r < 0)
-                return r;
-
-        manager_clear_jobs(m);
-
-        log_debug("Loading remaining units from the command line...");
-
-        STRV_FOREACH(filename, filenames) {
-                _cleanup_free_ char *prepared = NULL;
-
-                log_debug("Handling %s...", *filename);
-
-                k = prepare_filename(*filename, &prepared);
-                if (k < 0) {
-                        log_error_errno(k, "Failed to prepare filename %s: %m", *filename);
-                        if (r == 0)
-                                r = k;
-                        continue;
-                }
-
-                k = manager_load_startable_unit_or_warn(m, NULL, prepared, &units[count]);
-                if (k < 0) {
-                        if (r == 0)
-                                r = k;
-                        continue;
-                }
-
-                count++;
-        }
-
-        for (i = 0; i < count; i++) {
-                k = verify_unit(units[i], check_man);
-                if (k < 0 && r == 0)
-                        r = k;
-        }
-
-        return r;
+        return verify_units(filenames, arg_scope, arg_man, arg_generators, arg_recursive_errors, arg_root);
 }
diff --git a/src/analyze/analyze-verify.h b/src/analyze/analyze-verify.h
index 43bfbcb..4892c9a 100644
--- a/src/analyze/analyze-verify.h
+++ b/src/analyze/analyze-verify.h
@@ -1,10 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <stdbool.h>
-
-#include "execute.h"
-#include "path-lookup.h"
-
-int verify_executable(Unit *u, const ExecCommand *exec);
-int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run_generators);
+int verb_verify(int argc, char *argv[], void *userdata);
diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c
index 62c0ccb..ef2e609 100644
--- a/src/analyze/analyze.c
+++ b/src/analyze/analyze.c
@@ -12,9 +12,32 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "analyze.h"
+#include "analyze-blame.h"
+#include "analyze-calendar.h"
+#include "analyze-capability.h"
+#include "analyze-cat-config.h"
 #include "analyze-condition.h"
+#include "analyze-critical-chain.h"
+#include "analyze-dot.h"
+#include "analyze-dump.h"
+#include "analyze-exit-status.h"
+#include "analyze-filesystems.h"
+#include "analyze-inspect-elf.h"
+#include "analyze-log-control.h"
+#include "analyze-plot.h"
 #include "analyze-security.h"
+#include "analyze-service-watchdogs.h"
+#include "analyze-syscall-filter.h"
+#include "analyze-time.h"
+#include "analyze-time-data.h"
+#include "analyze-timespan.h"
+#include "analyze-timestamp.h"
+#include "analyze-unit-files.h"
+#include "analyze-unit-paths.h"
+#include "analyze-compare-versions.h"
 #include "analyze-verify.h"
+#include "build.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-map-properties.h"
@@ -24,131 +47,77 @@
 #include "capability-util.h"
 #include "conf-files.h"
 #include "copy.h"
-#include "def.h"
+#include "constants.h"
 #include "exit-status.h"
+#include "extract-word.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "filesystems.h"
 #include "format-table.h"
 #include "glob-util.h"
 #include "hashmap.h"
 #include "locale-util.h"
 #include "log.h"
 #include "main-func.h"
+#include "mount-util.h"
 #include "nulstr-util.h"
 #include "pager.h"
 #include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
+#include "rm-rf.h"
 #if HAVE_SECCOMP
 #  include "seccomp-util.h"
 #endif
 #include "sort-util.h"
 #include "special.h"
+#include "stat-util.h"
+#include "string-table.h"
 #include "strv.h"
 #include "strxcpyx.h"
 #include "terminal-util.h"
 #include "time-util.h"
+#include "tmpfile-util.h"
 #include "unit-name.h"
-#include "util.h"
+#include "verb-log-control.h"
 #include "verbs.h"
 #include "version.h"
 
-#define SCALE_X (0.1 / 1000.0) /* pixels per us */
-#define SCALE_Y (20.0)
-
-#define svg(...) printf(__VA_ARGS__)
-
-#define svg_bar(class, x1, x2, y)                                       \
-        svg("  <rect class=\"%s\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n", \
-            (class),                                                    \
-            SCALE_X * (x1), SCALE_Y * (y),                              \
-            SCALE_X * ((x2) - (x1)), SCALE_Y - 1.0)
-
-#define svg_text(b, x, y, format, ...)                                  \
-        do {                                                            \
-                svg("  <text class=\"%s\" x=\"%.03f\" y=\"%.03f\">", (b) ? "left" : "right", SCALE_X * (x) + (b ? 5.0 : -5.0), SCALE_Y * (y) + 14.0); \
-                svg(format, ## __VA_ARGS__);                            \
-                svg("</text>\n");                                       \
-        } while (false)
-
-static enum dot {
-        DEP_ALL,
-        DEP_ORDER,
-        DEP_REQUIRE
-} arg_dot = DEP_ALL;
-static char **arg_dot_from_patterns = NULL;
-static char **arg_dot_to_patterns = NULL;
-static usec_t arg_fuzz = 0;
-static PagerFlags arg_pager_flags = 0;
-static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
-static const char *arg_host = NULL;
-static UnitFileScope arg_scope = UNIT_FILE_SYSTEM;
-static bool arg_man = true;
-static bool arg_generators = false;
-static const char *arg_root = NULL;
-static unsigned arg_iterations = 1;
-static usec_t arg_base_time = USEC_INFINITY;
+DotMode arg_dot = DEP_ALL;
+char **arg_dot_from_patterns = NULL, **arg_dot_to_patterns = NULL;
+usec_t arg_fuzz = 0;
+PagerFlags arg_pager_flags = 0;
+BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
+const char *arg_host = NULL;
+LookupScope arg_scope = LOOKUP_SCOPE_SYSTEM;
+RecursiveErrors arg_recursive_errors = _RECURSIVE_ERRORS_INVALID;
+bool arg_man = true;
+bool arg_generators = false;
+char *arg_root = NULL;
+static char *arg_image = NULL;
+char *arg_security_policy = NULL;
+bool arg_offline = false;
+unsigned arg_threshold = 100;
+unsigned arg_iterations = 1;
+usec_t arg_base_time = USEC_INFINITY;
+char *arg_unit = NULL;
+JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
+bool arg_quiet = false;
+char *arg_profile = NULL;
+bool arg_legend = true;
+bool arg_table = false;
 
 STATIC_DESTRUCTOR_REGISTER(arg_dot_from_patterns, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_dot_to_patterns, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_security_policy, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_unit, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_profile, freep);
 
-typedef struct BootTimes {
-        usec_t firmware_time;
-        usec_t loader_time;
-        usec_t kernel_time;
-        usec_t kernel_done_time;
-        usec_t initrd_time;
-        usec_t userspace_time;
-        usec_t finish_time;
-        usec_t security_start_time;
-        usec_t security_finish_time;
-        usec_t generators_start_time;
-        usec_t generators_finish_time;
-        usec_t unitsload_start_time;
-        usec_t unitsload_finish_time;
-        usec_t initrd_security_start_time;
-        usec_t initrd_security_finish_time;
-        usec_t initrd_generators_start_time;
-        usec_t initrd_generators_finish_time;
-        usec_t initrd_unitsload_start_time;
-        usec_t initrd_unitsload_finish_time;
-
-        /*
-         * If we're analyzing the user instance, all timestamps will be offset
-         * by its own start-up timestamp, which may be arbitrarily big.
-         * With "plot", this causes arbitrarily wide output SVG files which almost
-         * completely consist of empty space. Thus we cancel out this offset.
-         *
-         * This offset is subtracted from times above by acquire_boot_times(),
-         * but it still needs to be subtracted from unit-specific timestamps
-         * (so it is stored here for reference).
-         */
-        usec_t reverse_offset;
-} BootTimes;
-
-typedef struct UnitTimes {
-        bool has_data;
-        char *name;
-        usec_t activating;
-        usec_t activated;
-        usec_t deactivated;
-        usec_t deactivating;
-        usec_t time;
-} UnitTimes;
-
-typedef struct HostInfo {
-        char *hostname;
-        char *kernel_name;
-        char *kernel_release;
-        char *kernel_version;
-        char *os_pretty_name;
-        char *virtualization;
-        char *architecture;
-} HostInfo;
-
-static int acquire_bus(sd_bus **bus, bool *use_full_bus) {
-        bool user = arg_scope != UNIT_FILE_SYSTEM;
+int acquire_bus(sd_bus **bus, bool *use_full_bus) {
+        bool user = arg_scope != LOOKUP_SCOPE_SYSTEM;
         int r;
 
         if (use_full_bus && *use_full_bus) {
@@ -162,32 +131,7 @@
         return bus_connect_transport_systemd(arg_transport, arg_host, user, bus);
 }
 
-static int bus_get_uint64_property(sd_bus *bus, const char *path, const char *interface, const char *property, uint64_t *val) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        int r;
-
-        assert(bus);
-        assert(path);
-        assert(interface);
-        assert(property);
-        assert(val);
-
-        r = sd_bus_get_property_trivial(
-                        bus,
-                        "org.freedesktop.systemd1",
-                        path,
-                        interface,
-                        property,
-                        &error,
-                        't', val);
-
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse reply: %s", bus_error_message(&error, r));
-
-        return 0;
-}
-
-static int bus_get_unit_property_strv(sd_bus *bus, const char *path, const char *property, char ***strv) {
+int bus_get_unit_property_strv(sd_bus *bus, const char *path, const char *property, char ***strv) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         int r;
 
@@ -210,1599 +154,7 @@
         return 0;
 }
 
-static int compare_unit_start(const UnitTimes *a, const UnitTimes *b) {
-        return CMP(a->activating, b->activating);
-}
-
-static UnitTimes* unit_times_free_array(UnitTimes *t) {
-        for (UnitTimes *p = t; p && p->has_data; p++)
-                free(p->name);
-        return mfree(t);
-}
-DEFINE_TRIVIAL_CLEANUP_FUNC(UnitTimes*, unit_times_free_array);
-
-static void subtract_timestamp(usec_t *a, usec_t b) {
-        assert(a);
-
-        if (*a > 0) {
-                assert(*a >= b);
-                *a -= b;
-        }
-}
-
-static int acquire_boot_times(sd_bus *bus, BootTimes **bt) {
-        static const struct bus_properties_map property_map[] = {
-                { "FirmwareTimestampMonotonic",               "t", NULL, offsetof(BootTimes, firmware_time)                 },
-                { "LoaderTimestampMonotonic",                 "t", NULL, offsetof(BootTimes, loader_time)                   },
-                { "KernelTimestamp",                          "t", NULL, offsetof(BootTimes, kernel_time)                   },
-                { "InitRDTimestampMonotonic",                 "t", NULL, offsetof(BootTimes, initrd_time)                   },
-                { "UserspaceTimestampMonotonic",              "t", NULL, offsetof(BootTimes, userspace_time)                },
-                { "FinishTimestampMonotonic",                 "t", NULL, offsetof(BootTimes, finish_time)                   },
-                { "SecurityStartTimestampMonotonic",          "t", NULL, offsetof(BootTimes, security_start_time)           },
-                { "SecurityFinishTimestampMonotonic",         "t", NULL, offsetof(BootTimes, security_finish_time)          },
-                { "GeneratorsStartTimestampMonotonic",        "t", NULL, offsetof(BootTimes, generators_start_time)         },
-                { "GeneratorsFinishTimestampMonotonic",       "t", NULL, offsetof(BootTimes, generators_finish_time)        },
-                { "UnitsLoadStartTimestampMonotonic",         "t", NULL, offsetof(BootTimes, unitsload_start_time)          },
-                { "UnitsLoadFinishTimestampMonotonic",        "t", NULL, offsetof(BootTimes, unitsload_finish_time)         },
-                { "InitRDSecurityStartTimestampMonotonic",    "t", NULL, offsetof(BootTimes, initrd_security_start_time)    },
-                { "InitRDSecurityFinishTimestampMonotonic",   "t", NULL, offsetof(BootTimes, initrd_security_finish_time)   },
-                { "InitRDGeneratorsStartTimestampMonotonic",  "t", NULL, offsetof(BootTimes, initrd_generators_start_time)  },
-                { "InitRDGeneratorsFinishTimestampMonotonic", "t", NULL, offsetof(BootTimes, initrd_generators_finish_time) },
-                { "InitRDUnitsLoadStartTimestampMonotonic",   "t", NULL, offsetof(BootTimes, initrd_unitsload_start_time)   },
-                { "InitRDUnitsLoadFinishTimestampMonotonic",  "t", NULL, offsetof(BootTimes, initrd_unitsload_finish_time)  },
-                {},
-        };
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        static BootTimes times;
-        static bool cached = false;
-        int r;
-
-        if (cached)
-                goto finish;
-
-        assert_cc(sizeof(usec_t) == sizeof(uint64_t));
-
-        r = bus_map_all_properties(
-                        bus,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        property_map,
-                        BUS_MAP_STRDUP,
-                        &error,
-                        NULL,
-                        &times);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get timestamp properties: %s", bus_error_message(&error, r));
-
-        if (times.finish_time <= 0)
-                return log_error_errno(SYNTHETIC_ERRNO(EINPROGRESS),
-                                       "Bootup is not yet finished (org.freedesktop.systemd1.Manager.FinishTimestampMonotonic=%"PRIu64").\n"
-                                       "Please try again later.\n"
-                                       "Hint: Use 'systemctl%s list-jobs' to see active jobs",
-                                       times.finish_time,
-                                       arg_scope == UNIT_FILE_SYSTEM ? "" : " --user");
-
-        if (arg_scope == UNIT_FILE_SYSTEM && times.security_start_time > 0) {
-                /* security_start_time is set when systemd is not running under container environment. */
-                if (times.initrd_time > 0)
-                        times.kernel_done_time = times.initrd_time;
-                else
-                        times.kernel_done_time = times.userspace_time;
-        } else {
-                /*
-                 * User-instance-specific or container-system-specific timestamps processing
-                 * (see comment to reverse_offset in BootTimes).
-                 */
-                times.reverse_offset = times.userspace_time;
-
-                times.firmware_time = times.loader_time = times.kernel_time = times.initrd_time =
-                        times.userspace_time = times.security_start_time = times.security_finish_time = 0;
-
-                subtract_timestamp(&times.finish_time, times.reverse_offset);
-
-                subtract_timestamp(&times.generators_start_time, times.reverse_offset);
-                subtract_timestamp(&times.generators_finish_time, times.reverse_offset);
-
-                subtract_timestamp(&times.unitsload_start_time, times.reverse_offset);
-                subtract_timestamp(&times.unitsload_finish_time, times.reverse_offset);
-        }
-
-        cached = true;
-
-finish:
-        *bt = &times;
-        return 0;
-}
-
-static HostInfo* free_host_info(HostInfo *hi) {
-        if (!hi)
-                return NULL;
-
-        free(hi->hostname);
-        free(hi->kernel_name);
-        free(hi->kernel_release);
-        free(hi->kernel_version);
-        free(hi->os_pretty_name);
-        free(hi->virtualization);
-        free(hi->architecture);
-        return mfree(hi);
-}
-
-DEFINE_TRIVIAL_CLEANUP_FUNC(HostInfo *, free_host_info);
-
-static int acquire_time_data(sd_bus *bus, UnitTimes **out) {
-        static const struct bus_properties_map property_map[] = {
-                { "InactiveExitTimestampMonotonic",  "t", NULL, offsetof(UnitTimes, activating)   },
-                { "ActiveEnterTimestampMonotonic",   "t", NULL, offsetof(UnitTimes, activated)    },
-                { "ActiveExitTimestampMonotonic",    "t", NULL, offsetof(UnitTimes, deactivating) },
-                { "InactiveEnterTimestampMonotonic", "t", NULL, offsetof(UnitTimes, deactivated)  },
-                {},
-        };
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(unit_times_free_arrayp) UnitTimes *unit_times = NULL;
-        BootTimes *boot_times = NULL;
-        size_t c = 0;
-        UnitInfo u;
-        int r;
-
-        r = acquire_boot_times(bus, &boot_times);
-        if (r < 0)
-                return r;
-
-        r = bus_call_method(bus, bus_systemd_mgr, "ListUnits", &error, &reply, NULL);
-        if (r < 0)
-                return log_error_errno(r, "Failed to list units: %s", bus_error_message(&error, r));
-
-        r = sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "(ssssssouso)");
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        while ((r = bus_parse_unit_info(reply, &u)) > 0) {
-                UnitTimes *t;
-
-                if (!GREEDY_REALLOC(unit_times, c + 2))
-                        return log_oom();
-
-                unit_times[c + 1].has_data = false;
-                t = &unit_times[c];
-                t->name = NULL;
-
-                assert_cc(sizeof(usec_t) == sizeof(uint64_t));
-
-                r = bus_map_all_properties(
-                                bus,
-                                "org.freedesktop.systemd1",
-                                u.unit_path,
-                                property_map,
-                                BUS_MAP_STRDUP,
-                                &error,
-                                NULL,
-                                t);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get timestamp properties of unit %s: %s",
-                                               u.id, bus_error_message(&error, r));
-
-                subtract_timestamp(&t->activating, boot_times->reverse_offset);
-                subtract_timestamp(&t->activated, boot_times->reverse_offset);
-                subtract_timestamp(&t->deactivating, boot_times->reverse_offset);
-                subtract_timestamp(&t->deactivated, boot_times->reverse_offset);
-
-                if (t->activated >= t->activating)
-                        t->time = t->activated - t->activating;
-                else if (t->deactivated >= t->activating)
-                        t->time = t->deactivated - t->activating;
-                else
-                        t->time = 0;
-
-                if (t->activating == 0)
-                        continue;
-
-                t->name = strdup(u.id);
-                if (!t->name)
-                        return log_oom();
-
-                t->has_data = true;
-                c++;
-        }
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        *out = TAKE_PTR(unit_times);
-        return c;
-}
-
-static int acquire_host_info(sd_bus *bus, HostInfo **hi) {
-        static const struct bus_properties_map hostname_map[] = {
-                { "Hostname",                  "s", NULL, offsetof(HostInfo, hostname)       },
-                { "KernelName",                "s", NULL, offsetof(HostInfo, kernel_name)    },
-                { "KernelRelease",             "s", NULL, offsetof(HostInfo, kernel_release) },
-                { "KernelVersion",             "s", NULL, offsetof(HostInfo, kernel_version) },
-                { "OperatingSystemPrettyName", "s", NULL, offsetof(HostInfo, os_pretty_name) },
-                {}
-        };
-
-        static const struct bus_properties_map manager_map[] = {
-                { "Virtualization", "s", NULL, offsetof(HostInfo, virtualization) },
-                { "Architecture",   "s", NULL, offsetof(HostInfo, architecture)   },
-                {}
-        };
-
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *system_bus = NULL;
-        _cleanup_(free_host_infop) HostInfo *host = NULL;
-        int r;
-
-        host = new0(HostInfo, 1);
-        if (!host)
-                return log_oom();
-
-        if (arg_scope != UNIT_FILE_SYSTEM) {
-                r = bus_connect_transport(arg_transport, arg_host, false, &system_bus);
-                if (r < 0) {
-                        log_debug_errno(r, "Failed to connect to system bus, ignoring: %m");
-                        goto manager;
-                }
-        }
-
-        r = bus_map_all_properties(
-                        system_bus ?: bus,
-                        "org.freedesktop.hostname1",
-                        "/org/freedesktop/hostname1",
-                        hostname_map,
-                        BUS_MAP_STRDUP,
-                        &error,
-                        NULL,
-                        host);
-        if (r < 0) {
-                log_debug_errno(r, "Failed to get host information from systemd-hostnamed, ignoring: %s",
-                                bus_error_message(&error, r));
-                sd_bus_error_free(&error);
-        }
-
-manager:
-        r = bus_map_all_properties(
-                        bus,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        manager_map,
-                        BUS_MAP_STRDUP,
-                        &error,
-                        NULL,
-                        host);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get host information from systemd: %s",
-                                       bus_error_message(&error, r));
-
-        *hi = TAKE_PTR(host);
-        return 0;
-}
-
-static int pretty_boot_time(sd_bus *bus, char **_buf) {
-        char ts[FORMAT_TIMESPAN_MAX];
-        BootTimes *t;
-        static char buf[4096];
-        size_t size;
-        char *ptr;
-        int r;
-        usec_t activated_time = USEC_INFINITY;
-        _cleanup_free_ char *path = NULL, *unit_id = NULL;
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-
-        r = acquire_boot_times(bus, &t);
-        if (r < 0)
-                return r;
-
-        path = unit_dbus_path_from_name(SPECIAL_DEFAULT_TARGET);
-        if (!path)
-                return log_oom();
-
-        r = sd_bus_get_property_string(
-                        bus,
-                        "org.freedesktop.systemd1",
-                        path,
-                        "org.freedesktop.systemd1.Unit",
-                        "Id",
-                        &error,
-                        &unit_id);
-        if (r < 0) {
-                log_error_errno(r, "default.target doesn't seem to exist: %s", bus_error_message(&error, r));
-                unit_id = NULL;
-        }
-
-        r = bus_get_uint64_property(bus, path,
-                        "org.freedesktop.systemd1.Unit",
-                        "ActiveEnterTimestampMonotonic",
-                        &activated_time);
-        if (r < 0) {
-                log_info_errno(r, "Could not get time to reach default.target, ignoring: %m");
-                activated_time = USEC_INFINITY;
-        }
-
-        ptr = buf;
-        size = sizeof(buf);
-
-        size = strpcpyf(&ptr, size, "Startup finished in ");
-        if (t->firmware_time > 0)
-                size = strpcpyf(&ptr, size, "%s (firmware) + ", format_timespan(ts, sizeof(ts), t->firmware_time - t->loader_time, USEC_PER_MSEC));
-        if (t->loader_time > 0)
-                size = strpcpyf(&ptr, size, "%s (loader) + ", format_timespan(ts, sizeof(ts), t->loader_time, USEC_PER_MSEC));
-        if (t->kernel_done_time > 0)
-                size = strpcpyf(&ptr, size, "%s (kernel) + ", format_timespan(ts, sizeof(ts), t->kernel_done_time, USEC_PER_MSEC));
-        if (t->initrd_time > 0)
-                size = strpcpyf(&ptr, size, "%s (initrd) + ", format_timespan(ts, sizeof(ts), t->userspace_time - t->initrd_time, USEC_PER_MSEC));
-
-        size = strpcpyf(&ptr, size, "%s (userspace) ", format_timespan(ts, sizeof(ts), t->finish_time - t->userspace_time, USEC_PER_MSEC));
-        if (t->kernel_done_time > 0)
-                strpcpyf(&ptr, size, "= %s ", format_timespan(ts, sizeof(ts), t->firmware_time + t->finish_time, USEC_PER_MSEC));
-
-        if (unit_id && timestamp_is_set(activated_time)) {
-                usec_t base = t->userspace_time > 0 ? t->userspace_time : t->reverse_offset;
-
-                size = strpcpyf(&ptr, size, "\n%s reached after %s in userspace", unit_id,
-                                format_timespan(ts, sizeof(ts), activated_time - base, USEC_PER_MSEC));
-        } else if (unit_id && activated_time == 0)
-                size = strpcpyf(&ptr, size, "\n%s was never reached", unit_id);
-        else if (unit_id && activated_time == USEC_INFINITY)
-                size = strpcpyf(&ptr, size, "\nCould not get time to reach %s.", unit_id);
-        else if (!unit_id)
-                size = strpcpyf(&ptr, size, "\ncould not find default.target");
-
-        ptr = strdup(buf);
-        if (!ptr)
-                return log_oom();
-
-        *_buf = ptr;
-        return 0;
-}
-
-static void svg_graph_box(double height, double begin, double end) {
-        /* outside box, fill */
-        svg("<rect class=\"box\" x=\"0\" y=\"0\" width=\"%.03f\" height=\"%.03f\" />\n",
-            SCALE_X * (end - begin),
-            SCALE_Y * height);
-
-        for (long long i = ((long long) (begin / 100000)) * 100000; i <= end; i += 100000) {
-                /* lines for each second */
-                if (i % 5000000 == 0)
-                        svg("  <line class=\"sec5\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n"
-                            "  <text class=\"sec\" x=\"%.03f\" y=\"%.03f\" >%.01fs</text>\n",
-                            SCALE_X * i,
-                            SCALE_X * i,
-                            SCALE_Y * height,
-                            SCALE_X * i,
-                            -5.0,
-                            0.000001 * i);
-                else if (i % 1000000 == 0)
-                        svg("  <line class=\"sec1\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n"
-                            "  <text class=\"sec\" x=\"%.03f\" y=\"%.03f\" >%.01fs</text>\n",
-                            SCALE_X * i,
-                            SCALE_X * i,
-                            SCALE_Y * height,
-                            SCALE_X * i,
-                            -5.0,
-                            0.000001 * i);
-                else
-                        svg("  <line class=\"sec01\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n",
-                            SCALE_X * i,
-                            SCALE_X * i,
-                            SCALE_Y * height);
-        }
-}
-
-static int plot_unit_times(UnitTimes *u, double width, int y) {
-        char ts[FORMAT_TIMESPAN_MAX];
-        bool b;
-
-        if (!u->name)
-                return 0;
-
-        svg_bar("activating",   u->activating, u->activated, y);
-        svg_bar("active",       u->activated, u->deactivating, y);
-        svg_bar("deactivating", u->deactivating, u->deactivated, y);
-
-        /* place the text on the left if we have passed the half of the svg width */
-        b = u->activating * SCALE_X < width / 2;
-        if (u->time)
-                svg_text(b, u->activating, y, "%s (%s)",
-                         u->name, format_timespan(ts, sizeof(ts), u->time, USEC_PER_MSEC));
-        else
-                svg_text(b, u->activating, y, "%s", u->name);
-
-        return 1;
-}
-
-static int analyze_plot(int argc, char *argv[], void *userdata) {
-        _cleanup_(free_host_infop) HostInfo *host = NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_(unit_times_free_arrayp) UnitTimes *times = NULL;
-        _cleanup_free_ char *pretty_times = NULL;
-        bool use_full_bus = arg_scope == UNIT_FILE_SYSTEM;
-        BootTimes *boot;
-        UnitTimes *u;
-        int n, m = 1, y = 0, r;
-        double width;
-
-        r = acquire_bus(&bus, &use_full_bus);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        n = acquire_boot_times(bus, &boot);
-        if (n < 0)
-                return n;
-
-        n = pretty_boot_time(bus, &pretty_times);
-        if (n < 0)
-                return n;
-
-        if (use_full_bus || arg_scope != UNIT_FILE_SYSTEM) {
-                n = acquire_host_info(bus, &host);
-                if (n < 0)
-                        return n;
-        }
-
-        n = acquire_time_data(bus, &times);
-        if (n <= 0)
-                return n;
-
-        typesafe_qsort(times, n, compare_unit_start);
-
-        width = SCALE_X * (boot->firmware_time + boot->finish_time);
-        if (width < 800.0)
-                width = 800.0;
-
-        if (boot->firmware_time > boot->loader_time)
-                m++;
-        if (boot->loader_time > 0) {
-                m++;
-                if (width < 1000.0)
-                        width = 1000.0;
-        }
-        if (boot->initrd_time > 0)
-                m++;
-        if (boot->kernel_done_time > 0)
-                m++;
-
-        for (u = times; u->has_data; u++) {
-                double text_start, text_width;
-
-                if (u->activating > boot->finish_time) {
-                        u->name = mfree(u->name);
-                        continue;
-                }
-
-                /* If the text cannot fit on the left side then
-                 * increase the svg width so it fits on the right.
-                 * TODO: calculate the text width more accurately */
-                text_width = 8.0 * strlen(u->name);
-                text_start = (boot->firmware_time + u->activating) * SCALE_X;
-                if (text_width > text_start && text_width + text_start > width)
-                        width = text_width + text_start;
-
-                if (u->deactivated > u->activating &&
-                    u->deactivated <= boot->finish_time &&
-                    u->activated == 0 && u->deactivating == 0)
-                        u->activated = u->deactivating = u->deactivated;
-                if (u->activated < u->activating || u->activated > boot->finish_time)
-                        u->activated = boot->finish_time;
-                if (u->deactivating < u->activated || u->deactivating > boot->finish_time)
-                        u->deactivating = boot->finish_time;
-                if (u->deactivated < u->deactivating || u->deactivated > boot->finish_time)
-                        u->deactivated = boot->finish_time;
-                m++;
-        }
-
-        svg("<?xml version=\"1.0\" standalone=\"no\"?>\n"
-            "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" "
-            "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n");
-
-        svg("<svg width=\"%.0fpx\" height=\"%.0fpx\" version=\"1.1\" "
-            "xmlns=\"http://www.w3.org/2000/svg\">\n\n",
-                        80.0 + width, 150.0 + (m * SCALE_Y) +
-                        5 * SCALE_Y /* legend */);
-
-        /* write some basic info as a comment, including some help */
-        svg("<!-- This file is a systemd-analyze SVG file. It is best rendered in a   -->\n"
-            "<!-- browser such as Chrome, Chromium or Firefox. Other applications     -->\n"
-            "<!-- that render these files properly but much slower are ImageMagick,   -->\n"
-            "<!-- gimp, inkscape, etc. To display the files on your system, just      -->\n"
-            "<!-- point your browser to this file.                                    -->\n\n"
-            "<!-- This plot was generated by systemd-analyze version %-16.16s -->\n\n", GIT_VERSION);
-
-        /* style sheet */
-        svg("<defs>\n  <style type=\"text/css\">\n    <![CDATA[\n"
-            "      rect       { stroke-width: 1; stroke-opacity: 0; }\n"
-            "      rect.background   { fill: rgb(255,255,255); }\n"
-            "      rect.activating   { fill: rgb(255,0,0); fill-opacity: 0.7; }\n"
-            "      rect.active       { fill: rgb(200,150,150); fill-opacity: 0.7; }\n"
-            "      rect.deactivating { fill: rgb(150,100,100); fill-opacity: 0.7; }\n"
-            "      rect.kernel       { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
-            "      rect.initrd       { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
-            "      rect.firmware     { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
-            "      rect.loader       { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
-            "      rect.userspace    { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
-            "      rect.security     { fill: rgb(144,238,144); fill-opacity: 0.7; }\n"
-            "      rect.generators   { fill: rgb(102,204,255); fill-opacity: 0.7; }\n"
-            "      rect.unitsload    { fill: rgb( 82,184,255); fill-opacity: 0.7; }\n"
-            "      rect.box   { fill: rgb(240,240,240); stroke: rgb(192,192,192); }\n"
-            "      line       { stroke: rgb(64,64,64); stroke-width: 1; }\n"
-            "//    line.sec1  { }\n"
-            "      line.sec5  { stroke-width: 2; }\n"
-            "      line.sec01 { stroke: rgb(224,224,224); stroke-width: 1; }\n"
-            "      text       { font-family: Verdana, Helvetica; font-size: 14px; }\n"
-            "      text.left  { font-family: Verdana, Helvetica; font-size: 14px; text-anchor: start; }\n"
-            "      text.right { font-family: Verdana, Helvetica; font-size: 14px; text-anchor: end; }\n"
-            "      text.sec   { font-size: 10px; }\n"
-            "    ]]>\n   </style>\n</defs>\n\n");
-
-        svg("<rect class=\"background\" width=\"100%%\" height=\"100%%\" />\n");
-        svg("<text x=\"20\" y=\"50\">%s</text>", pretty_times);
-        if (host)
-                svg("<text x=\"20\" y=\"30\">%s %s (%s %s %s) %s %s</text>",
-                    isempty(host->os_pretty_name) ? "Linux" : host->os_pretty_name,
-                    strempty(host->hostname),
-                    strempty(host->kernel_name),
-                    strempty(host->kernel_release),
-                    strempty(host->kernel_version),
-                    strempty(host->architecture),
-                    strempty(host->virtualization));
-
-        svg("<g transform=\"translate(%.3f,100)\">\n", 20.0 + (SCALE_X * boot->firmware_time));
-        svg_graph_box(m, -(double) boot->firmware_time, boot->finish_time);
-
-        if (boot->firmware_time > 0) {
-                svg_bar("firmware", -(double) boot->firmware_time, -(double) boot->loader_time, y);
-                svg_text(true, -(double) boot->firmware_time, y, "firmware");
-                y++;
-        }
-        if (boot->loader_time > 0) {
-                svg_bar("loader", -(double) boot->loader_time, 0, y);
-                svg_text(true, -(double) boot->loader_time, y, "loader");
-                y++;
-        }
-        if (boot->kernel_done_time > 0) {
-                svg_bar("kernel", 0, boot->kernel_done_time, y);
-                svg_text(true, 0, y, "kernel");
-                y++;
-        }
-        if (boot->initrd_time > 0) {
-                svg_bar("initrd", boot->initrd_time, boot->userspace_time, y);
-                if (boot->initrd_security_start_time < boot->initrd_security_finish_time)
-                        svg_bar("security", boot->initrd_security_start_time, boot->initrd_security_finish_time, y);
-                if (boot->initrd_generators_start_time < boot->initrd_generators_finish_time)
-                        svg_bar("generators", boot->initrd_generators_start_time, boot->initrd_generators_finish_time, y);
-                if (boot->initrd_unitsload_start_time < boot->initrd_unitsload_finish_time)
-                        svg_bar("unitsload", boot->initrd_unitsload_start_time, boot->initrd_unitsload_finish_time, y);
-                svg_text(true, boot->initrd_time, y, "initrd");
-                y++;
-        }
-
-        for (u = times; u->has_data; u++) {
-                if (u->activating >= boot->userspace_time)
-                        break;
-
-                y += plot_unit_times(u, width, y);
-        }
-
-        svg_bar("active", boot->userspace_time, boot->finish_time, y);
-        if (boot->security_start_time > 0)
-                svg_bar("security", boot->security_start_time, boot->security_finish_time, y);
-        svg_bar("generators", boot->generators_start_time, boot->generators_finish_time, y);
-        svg_bar("unitsload", boot->unitsload_start_time, boot->unitsload_finish_time, y);
-        svg_text(true, boot->userspace_time, y, "systemd");
-        y++;
-
-        for (; u->has_data; u++)
-                y += plot_unit_times(u, width, y);
-
-        svg("</g>\n");
-
-        /* Legend */
-        svg("<g transform=\"translate(20,100)\">\n");
-        y++;
-        svg_bar("activating", 0, 300000, y);
-        svg_text(true, 400000, y, "Activating");
-        y++;
-        svg_bar("active", 0, 300000, y);
-        svg_text(true, 400000, y, "Active");
-        y++;
-        svg_bar("deactivating", 0, 300000, y);
-        svg_text(true, 400000, y, "Deactivating");
-        y++;
-        if (boot->security_start_time > 0) {
-                svg_bar("security", 0, 300000, y);
-                svg_text(true, 400000, y, "Setting up security module");
-                y++;
-        }
-        svg_bar("generators", 0, 300000, y);
-        svg_text(true, 400000, y, "Generators");
-        y++;
-        svg_bar("unitsload", 0, 300000, y);
-        svg_text(true, 400000, y, "Loading unit files");
-        y++;
-
-        svg("</g>\n\n");
-
-        svg("</svg>\n");
-
-        return 0;
-}
-
-static int list_dependencies_print(
-                const char *name,
-                unsigned level,
-                unsigned branches,
-                bool last,
-                UnitTimes *times,
-                BootTimes *boot) {
-
-        char ts[FORMAT_TIMESPAN_MAX], ts2[FORMAT_TIMESPAN_MAX];
-
-        for (unsigned i = level; i != 0; i--)
-                printf("%s", special_glyph(branches & (1 << (i-1)) ? SPECIAL_GLYPH_TREE_VERTICAL : SPECIAL_GLYPH_TREE_SPACE));
-
-        printf("%s", special_glyph(last ? SPECIAL_GLYPH_TREE_RIGHT : SPECIAL_GLYPH_TREE_BRANCH));
-
-        if (times) {
-                if (times->time > 0)
-                        printf("%s%s @%s +%s%s", ansi_highlight_red(), name,
-                               format_timespan(ts, sizeof(ts), times->activating - boot->userspace_time, USEC_PER_MSEC),
-                               format_timespan(ts2, sizeof(ts2), times->time, USEC_PER_MSEC), ansi_normal());
-                else if (times->activated > boot->userspace_time)
-                        printf("%s @%s", name, format_timespan(ts, sizeof(ts), times->activated - boot->userspace_time, USEC_PER_MSEC));
-                else
-                        printf("%s", name);
-        } else
-                printf("%s", name);
-        printf("\n");
-
-        return 0;
-}
-
-static int list_dependencies_get_dependencies(sd_bus *bus, const char *name, char ***deps) {
-        _cleanup_free_ char *path = NULL;
-
-        assert(bus);
-        assert(name);
-        assert(deps);
-
-        path = unit_dbus_path_from_name(name);
-        if (!path)
-                return -ENOMEM;
-
-        return bus_get_unit_property_strv(bus, path, "After", deps);
-}
-
-static Hashmap *unit_times_hashmap;
-
-static int list_dependencies_compare(char *const *a, char *const *b) {
-        usec_t usa = 0, usb = 0;
-        UnitTimes *times;
-
-        times = hashmap_get(unit_times_hashmap, *a);
-        if (times)
-                usa = times->activated;
-        times = hashmap_get(unit_times_hashmap, *b);
-        if (times)
-                usb = times->activated;
-
-        return CMP(usb, usa);
-}
-
-static bool times_in_range(const UnitTimes *times, const BootTimes *boot) {
-        return times && times->activated > 0 && times->activated <= boot->finish_time;
-}
-
-static int list_dependencies_one(sd_bus *bus, const char *name, unsigned level, char ***units, unsigned branches) {
-        _cleanup_strv_free_ char **deps = NULL;
-        char **c;
-        int r;
-        usec_t service_longest = 0;
-        int to_print = 0;
-        UnitTimes *times;
-        BootTimes *boot;
-
-        if (strv_extend(units, name))
-                return log_oom();
-
-        r = list_dependencies_get_dependencies(bus, name, &deps);
-        if (r < 0)
-                return r;
-
-        typesafe_qsort(deps, strv_length(deps), list_dependencies_compare);
-
-        r = acquire_boot_times(bus, &boot);
-        if (r < 0)
-                return r;
-
-        STRV_FOREACH(c, deps) {
-                times = hashmap_get(unit_times_hashmap, *c);
-                if (times_in_range(times, boot) && times->activated >= service_longest)
-                        service_longest = times->activated;
-        }
-
-        if (service_longest == 0)
-                return r;
-
-        STRV_FOREACH(c, deps) {
-                times = hashmap_get(unit_times_hashmap, *c);
-                if (times_in_range(times, boot) && service_longest - times->activated <= arg_fuzz)
-                        to_print++;
-        }
-
-        if (!to_print)
-                return r;
-
-        STRV_FOREACH(c, deps) {
-                times = hashmap_get(unit_times_hashmap, *c);
-                if (!times_in_range(times, boot) || service_longest - times->activated > arg_fuzz)
-                        continue;
-
-                to_print--;
-
-                r = list_dependencies_print(*c, level, branches, to_print == 0, times, boot);
-                if (r < 0)
-                        return r;
-
-                if (strv_contains(*units, *c)) {
-                        r = list_dependencies_print("...", level + 1, (branches << 1) | (to_print ? 1 : 0),
-                                                    true, NULL, boot);
-                        if (r < 0)
-                                return r;
-                        continue;
-                }
-
-                r = list_dependencies_one(bus, *c, level + 1, units, (branches << 1) | (to_print ? 1 : 0));
-                if (r < 0)
-                        return r;
-
-                if (to_print == 0)
-                        break;
-        }
-        return 0;
-}
-
-static int list_dependencies(sd_bus *bus, const char *name) {
-        _cleanup_strv_free_ char **units = NULL;
-        char ts[FORMAT_TIMESPAN_MAX];
-        UnitTimes *times;
-        int r;
-        const char *id;
-        _cleanup_free_ char *path = NULL;
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        BootTimes *boot;
-
-        assert(bus);
-
-        path = unit_dbus_path_from_name(name);
-        if (!path)
-                return -ENOMEM;
-
-        r = sd_bus_get_property(
-                        bus,
-                        "org.freedesktop.systemd1",
-                        path,
-                        "org.freedesktop.systemd1.Unit",
-                        "Id",
-                        &error,
-                        &reply,
-                        "s");
-        if (r < 0)
-                return log_error_errno(r, "Failed to get ID: %s", bus_error_message(&error, r));
-
-        r = sd_bus_message_read(reply, "s", &id);
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        times = hashmap_get(unit_times_hashmap, id);
-
-        r = acquire_boot_times(bus, &boot);
-        if (r < 0)
-                return r;
-
-        if (times) {
-                if (times->time)
-                        printf("%s%s +%s%s\n", ansi_highlight_red(), id,
-                               format_timespan(ts, sizeof(ts), times->time, USEC_PER_MSEC), ansi_normal());
-                else if (times->activated > boot->userspace_time)
-                        printf("%s @%s\n", id, format_timespan(ts, sizeof(ts), times->activated - boot->userspace_time, USEC_PER_MSEC));
-                else
-                        printf("%s\n", id);
-        }
-
-        return list_dependencies_one(bus, name, 0, &units, 0);
-}
-
-static int analyze_critical_chain(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_(unit_times_free_arrayp) UnitTimes *times = NULL;
-        Hashmap *h;
-        int n, r;
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        n = acquire_time_data(bus, &times);
-        if (n <= 0)
-                return n;
-
-        h = hashmap_new(&string_hash_ops);
-        if (!h)
-                return log_oom();
-
-        for (UnitTimes *u = times; u->has_data; u++) {
-                r = hashmap_put(h, u->name, u);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to add entry to hashmap: %m");
-        }
-        unit_times_hashmap = h;
-
-        (void) pager_open(arg_pager_flags);
-
-        puts("The time when unit became active or started is printed after the \"@\" character.\n"
-             "The time the unit took to start is printed after the \"+\" character.\n");
-
-        if (argc > 1) {
-                char **name;
-                STRV_FOREACH(name, strv_skip(argv, 1))
-                        list_dependencies(bus, *name);
-        } else
-                list_dependencies(bus, SPECIAL_DEFAULT_TARGET);
-
-        h = hashmap_free(h);
-        return 0;
-}
-
-static int analyze_blame(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_(unit_times_free_arrayp) UnitTimes *times = NULL;
-        _cleanup_(table_unrefp) Table *table = NULL;
-        TableCell *cell;
-        int n, r;
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        n = acquire_time_data(bus, &times);
-        if (n <= 0)
-                return n;
-
-        table = table_new("time", "unit");
-        if (!table)
-                return log_oom();
-
-        table_set_header(table, false);
-
-        assert_se(cell = table_get_cell(table, 0, 0));
-        r = table_set_ellipsize_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        r = table_set_align_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        assert_se(cell = table_get_cell(table, 0, 1));
-        r = table_set_ellipsize_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        r = table_set_sort(table, (size_t) 0);
-        if (r < 0)
-                return r;
-
-        r = table_set_reverse(table, 0, true);
-        if (r < 0)
-                return r;
-
-        for (UnitTimes *u = times; u->has_data; u++) {
-                if (u->time <= 0)
-                        continue;
-
-                r = table_add_many(table,
-                                   TABLE_TIMESPAN_MSEC, u->time,
-                                   TABLE_STRING, u->name);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
-
-        (void) pager_open(arg_pager_flags);
-
-        return table_print(table, NULL);
-}
-
-static int analyze_time(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_free_ char *buf = NULL;
-        int r;
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        r = pretty_boot_time(bus, &buf);
-        if (r < 0)
-                return r;
-
-        puts(buf);
-        return 0;
-}
-
-static int graph_one_property(
-                sd_bus *bus,
-                const UnitInfo *u,
-                const char *prop,
-                const char *color,
-                char *patterns[],
-                char *from_patterns[],
-                char *to_patterns[]) {
-
-        _cleanup_strv_free_ char **units = NULL;
-        char **unit;
-        int r;
-        bool match_patterns;
-
-        assert(u);
-        assert(prop);
-        assert(color);
-
-        match_patterns = strv_fnmatch(patterns, u->id);
-
-        if (!strv_isempty(from_patterns) && !match_patterns && !strv_fnmatch(from_patterns, u->id))
-                return 0;
-
-        r = bus_get_unit_property_strv(bus, u->unit_path, prop, &units);
-        if (r < 0)
-                return r;
-
-        STRV_FOREACH(unit, units) {
-                bool match_patterns2;
-
-                match_patterns2 = strv_fnmatch(patterns, *unit);
-
-                if (!strv_isempty(to_patterns) && !match_patterns2 && !strv_fnmatch(to_patterns, *unit))
-                        continue;
-
-                if (!strv_isempty(patterns) && !match_patterns && !match_patterns2)
-                        continue;
-
-                printf("\t\"%s\"->\"%s\" [color=\"%s\"];\n", u->id, *unit, color);
-        }
-
-        return 0;
-}
-
-static int graph_one(sd_bus *bus, const UnitInfo *u, char *patterns[], char *from_patterns[], char *to_patterns[]) {
-        int r;
-
-        assert(bus);
-        assert(u);
-
-        if (IN_SET(arg_dot, DEP_ORDER, DEP_ALL)) {
-                r = graph_one_property(bus, u, "After", "green", patterns, from_patterns, to_patterns);
-                if (r < 0)
-                        return r;
-        }
-
-        if (IN_SET(arg_dot, DEP_REQUIRE, DEP_ALL)) {
-                r = graph_one_property(bus, u, "Requires", "black", patterns, from_patterns, to_patterns);
-                if (r < 0)
-                        return r;
-                r = graph_one_property(bus, u, "Requisite", "darkblue", patterns, from_patterns, to_patterns);
-                if (r < 0)
-                        return r;
-                r = graph_one_property(bus, u, "Wants", "grey66", patterns, from_patterns, to_patterns);
-                if (r < 0)
-                        return r;
-                r = graph_one_property(bus, u, "Conflicts", "red", patterns, from_patterns, to_patterns);
-                if (r < 0)
-                        return r;
-        }
-
-        return 0;
-}
-
-static int expand_patterns(sd_bus *bus, char **patterns, char ***ret) {
-        _cleanup_strv_free_ char **expanded_patterns = NULL;
-        char **pattern;
-        int r;
-
-        STRV_FOREACH(pattern, patterns) {
-                _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-                _cleanup_free_ char *unit = NULL, *unit_id = NULL;
-
-                if (strv_extend(&expanded_patterns, *pattern) < 0)
-                        return log_oom();
-
-                if (string_is_glob(*pattern))
-                        continue;
-
-                unit = unit_dbus_path_from_name(*pattern);
-                if (!unit)
-                        return log_oom();
-
-                r = sd_bus_get_property_string(
-                                bus,
-                                "org.freedesktop.systemd1",
-                                unit,
-                                "org.freedesktop.systemd1.Unit",
-                                "Id",
-                                &error,
-                                &unit_id);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get ID: %s", bus_error_message(&error, r));
-
-                if (!streq(*pattern, unit_id)) {
-                        if (strv_extend(&expanded_patterns, unit_id) < 0)
-                                return log_oom();
-                }
-        }
-
-        *ret = TAKE_PTR(expanded_patterns); /* do not free */
-
-        return 0;
-}
-
-static int dot(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_strv_free_ char **expanded_patterns = NULL;
-        _cleanup_strv_free_ char **expanded_from_patterns = NULL;
-        _cleanup_strv_free_ char **expanded_to_patterns = NULL;
-        int r;
-        UnitInfo u;
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        r = expand_patterns(bus, strv_skip(argv, 1), &expanded_patterns);
-        if (r < 0)
-                return r;
-
-        r = expand_patterns(bus, arg_dot_from_patterns, &expanded_from_patterns);
-        if (r < 0)
-                return r;
-
-        r = expand_patterns(bus, arg_dot_to_patterns, &expanded_to_patterns);
-        if (r < 0)
-                return r;
-
-        r = bus_call_method(bus, bus_systemd_mgr, "ListUnits", &error, &reply, NULL);
-        if (r < 0)
-                log_error_errno(r, "Failed to list units: %s", bus_error_message(&error, r));
-
-        r = sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "(ssssssouso)");
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        printf("digraph systemd {\n");
-
-        while ((r = bus_parse_unit_info(reply, &u)) > 0) {
-
-                r = graph_one(bus, &u, expanded_patterns, expanded_from_patterns, expanded_to_patterns);
-                if (r < 0)
-                        return r;
-        }
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        printf("}\n");
-
-        log_info("   Color legend: black     = Requires\n"
-                 "                 dark blue = Requisite\n"
-                 "                 dark grey = Wants\n"
-                 "                 red       = Conflicts\n"
-                 "                 green     = After\n");
-
-        if (on_tty())
-                log_notice("-- You probably want to process this output with graphviz' dot tool.\n"
-                           "-- Try a shell pipeline like 'systemd-analyze dot | dot -Tsvg > systemd.svg'!\n");
-
-        return 0;
-}
-
-static int dump_fallback(sd_bus *bus) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        const char *text = NULL;
-        int r;
-
-        assert(bus);
-
-        r = bus_call_method(bus, bus_systemd_mgr, "Dump", &error, &reply, NULL);
-        if (r < 0)
-                return log_error_errno(r, "Failed to issue method call Dump: %s", bus_error_message(&error, r));
-
-        r = sd_bus_message_read(reply, "s", &text);
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        fputs(text, stdout);
-        return 0;
-}
-
-static int dump(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        int fd = -1;
-        int r;
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        (void) pager_open(arg_pager_flags);
-
-        if (!sd_bus_can_send(bus, SD_BUS_TYPE_UNIX_FD))
-                return dump_fallback(bus);
-
-        r = bus_call_method(bus, bus_systemd_mgr, "DumpByFileDescriptor", &error, &reply, NULL);
-        if (r < 0) {
-                /* fall back to Dump if DumpByFileDescriptor is not supported */
-                if (!IN_SET(r, -EACCES, -EBADR))
-                        return log_error_errno(r, "Failed to issue method call DumpByFileDescriptor: %s",
-                                               bus_error_message(&error, r));
-
-                return dump_fallback(bus);
-        }
-
-        r = sd_bus_message_read(reply, "h", &fd);
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        fflush(stdout);
-        return copy_bytes(fd, STDOUT_FILENO, UINT64_MAX, 0);
-}
-
-static int cat_config(int argc, char *argv[], void *userdata) {
-        char **arg, **list;
-        int r;
-
-        (void) pager_open(arg_pager_flags);
-
-        list = strv_skip(argv, 1);
-        STRV_FOREACH(arg, list) {
-                const char *t = NULL;
-
-                if (arg != list)
-                        print_separator();
-
-                if (path_is_absolute(*arg)) {
-                        const char *dir;
-
-                        NULSTR_FOREACH(dir, CONF_PATHS_NULSTR("")) {
-                                t = path_startswith(*arg, dir);
-                                if (t)
-                                        break;
-                        }
-
-                        if (!t)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Path %s does not start with any known prefix.", *arg);
-                } else
-                        t = *arg;
-
-                r = conf_files_cat(arg_root, t);
-                if (r < 0)
-                        return r;
-        }
-
-        return 0;
-}
-
-static int set_log_level(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        int r;
-
-        assert(argc == 2);
-        assert(argv);
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        r = bus_set_property(bus, bus_systemd_mgr, "LogLevel", &error, "s", argv[1]);
-        if (r < 0)
-                return log_error_errno(r, "Failed to issue method call: %s", bus_error_message(&error, r));
-
-        return 0;
-}
-
-static int get_log_level(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_free_ char *level = NULL;
-        int r;
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        r = bus_get_property_string(bus, bus_systemd_mgr, "LogLevel", &error, &level);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get log level: %s", bus_error_message(&error, r));
-
-        puts(level);
-        return 0;
-}
-
-static int get_or_set_log_level(int argc, char *argv[], void *userdata) {
-        return (argc == 1) ? get_log_level(argc, argv, userdata) : set_log_level(argc, argv, userdata);
-}
-
-static int set_log_target(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        int r;
-
-        assert(argc == 2);
-        assert(argv);
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        r = bus_set_property(bus, bus_systemd_mgr, "LogTarget", &error, "s", argv[1]);
-        if (r < 0)
-                return log_error_errno(r, "Failed to issue method call: %s", bus_error_message(&error, r));
-
-        return 0;
-}
-
-static int get_log_target(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_free_ char *target = NULL;
-        int r;
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        r = bus_get_property_string(bus, bus_systemd_mgr, "LogTarget", &error, &target);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get log target: %s", bus_error_message(&error, r));
-
-        puts(target);
-        return 0;
-}
-
-static int get_or_set_log_target(int argc, char *argv[], void *userdata) {
-        return (argc == 1) ? get_log_target(argc, argv, userdata) : set_log_target(argc, argv, userdata);
-}
-
-static bool strv_fnmatch_strv_or_empty(char* const* patterns, char **strv, int flags) {
-        char **s;
-        STRV_FOREACH(s, strv)
-                if (strv_fnmatch_or_empty(patterns, *s, flags))
-                        return true;
-
-        return false;
-}
-
-static int do_unit_files(int argc, char *argv[], void *userdata) {
-        _cleanup_(lookup_paths_free) LookupPaths lp = {};
-        _cleanup_hashmap_free_ Hashmap *unit_ids = NULL;
-        _cleanup_hashmap_free_ Hashmap *unit_names = NULL;
-        char **patterns = strv_skip(argv, 1);
-        const char *k, *dst;
-        char **v;
-        int r;
-
-        r = lookup_paths_init(&lp, arg_scope, 0, NULL);
-        if (r < 0)
-                return log_error_errno(r, "lookup_paths_init() failed: %m");
-
-        r = unit_file_build_name_map(&lp, NULL, &unit_ids, &unit_names, NULL);
-        if (r < 0)
-                return log_error_errno(r, "unit_file_build_name_map() failed: %m");
-
-        HASHMAP_FOREACH_KEY(dst, k, unit_ids) {
-                if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
-                    !strv_fnmatch_or_empty(patterns, dst, FNM_NOESCAPE))
-                        continue;
-
-                printf("ids: %s → %s\n", k, dst);
-        }
-
-        HASHMAP_FOREACH_KEY(v, k, unit_names) {
-                if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
-                    !strv_fnmatch_strv_or_empty(patterns, v, FNM_NOESCAPE))
-                        continue;
-
-                _cleanup_free_ char *j = strv_join(v, ", ");
-                printf("aliases: %s ← %s\n", k, j);
-        }
-
-        return 0;
-}
-
-static int dump_unit_paths(int argc, char *argv[], void *userdata) {
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
-        int r;
-        char **p;
-
-        r = lookup_paths_init(&paths, arg_scope, 0, NULL);
-        if (r < 0)
-                return log_error_errno(r, "lookup_paths_init() failed: %m");
-
-        STRV_FOREACH(p, paths.search_path)
-                puts(*p);
-
-        return 0;
-}
-
-static int dump_exit_status(int argc, char *argv[], void *userdata) {
-        _cleanup_(table_unrefp) Table *table = NULL;
-        int r;
-
-        table = table_new("name", "status", "class");
-        if (!table)
-                return log_oom();
-
-        r = table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
-        if (r < 0)
-                return log_error_errno(r, "Failed to right-align status: %m");
-
-        if (strv_isempty(strv_skip(argv, 1)))
-                for (size_t i = 0; i < ELEMENTSOF(exit_status_mappings); i++) {
-                        if (!exit_status_mappings[i].name)
-                                continue;
-
-                        r = table_add_many(table,
-                                           TABLE_STRING, exit_status_mappings[i].name,
-                                           TABLE_INT, (int) i,
-                                           TABLE_STRING, exit_status_class(i));
-                        if (r < 0)
-                                return table_log_add_error(r);
-                }
-        else
-                for (int i = 1; i < argc; i++) {
-                        int status;
-
-                        status = exit_status_from_string(argv[i]);
-                        if (status < 0)
-                                return log_error_errno(status, "Invalid exit status \"%s\".", argv[i]);
-
-                        assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings));
-                        r = table_add_many(table,
-                                           TABLE_STRING, exit_status_mappings[status].name ?: "-",
-                                           TABLE_INT, status,
-                                           TABLE_STRING, exit_status_class(status) ?: "-");
-                        if (r < 0)
-                                return table_log_add_error(r);
-                }
-
-        (void) pager_open(arg_pager_flags);
-
-        return table_print(table, NULL);
-}
-
-static int dump_capabilities(int argc, char *argv[], void *userdata) {
-        _cleanup_(table_unrefp) Table *table = NULL;
-        unsigned last_cap;
-        int r;
-
-        table = table_new("name", "number");
-        if (!table)
-                return log_oom();
-
-        (void) table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
-
-        /* Determine the maximum of the last cap known by the kernel and by us */
-        last_cap = MAX((unsigned) CAP_LAST_CAP, cap_last_cap());
-
-        if (strv_isempty(strv_skip(argv, 1)))
-                for (unsigned c = 0; c <= last_cap; c++) {
-                        r = table_add_many(table,
-                                           TABLE_STRING, capability_to_name(c) ?: "cap_???",
-                                           TABLE_UINT, c);
-                        if (r < 0)
-                                return table_log_add_error(r);
-                }
-        else {
-                for (int i = 1; i < argc; i++) {
-                        int c;
-
-                        c = capability_from_name(argv[i]);
-                        if (c < 0 || (unsigned) c > last_cap)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Capability \"%s\" not known.", argv[i]);
-
-                        r = table_add_many(table,
-                                           TABLE_STRING, capability_to_name(c) ?: "cap_???",
-                                           TABLE_UINT, (unsigned) c);
-                        if (r < 0)
-                                return table_log_add_error(r);
-                }
-
-                (void) table_set_sort(table, (size_t) 1);
-        }
-
-        (void) pager_open(arg_pager_flags);
-
-        return table_print(table, NULL);
-}
-
-#if HAVE_SECCOMP
-
-static int load_kernel_syscalls(Set **ret) {
-        _cleanup_set_free_ Set *syscalls = NULL;
-        _cleanup_fclose_ FILE *f = NULL;
-        int r;
-
-        /* Let's read the available system calls from the list of available tracing events. Slightly dirty,
-         * but good enough for analysis purposes. */
-
-        f = fopen("/sys/kernel/tracing/available_events", "re");
-        if (!f) {
-                /* We tried the non-debugfs mount point and that didn't work. If it wasn't mounted, maybe the
-                 * old debugfs mount point works? */
-                f = fopen("/sys/kernel/debug/tracing/available_events", "re");
-                if (!f)
-                        return log_full_errno(IN_SET(errno, EPERM, EACCES, ENOENT) ? LOG_DEBUG : LOG_WARNING, errno,
-                                              "Can't read open tracefs' available_events file: %m");
-        }
-
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
-                const char *e;
-
-                r = read_line(f, LONG_LINE_MAX, &line);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to read system call list: %m");
-                if (r == 0)
-                        break;
-
-                e = startswith(line, "syscalls:sys_enter_");
-                if (!e)
-                        continue;
-
-                /* These are named differently inside the kernel than their external name for historical
-                 * reasons. Let's hide them here. */
-                if (STR_IN_SET(e, "newuname", "newfstat", "newstat", "newlstat", "sysctl"))
-                        continue;
-
-                r = set_put_strdup(&syscalls, e);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to add system call to list: %m");
-        }
-
-        *ret = TAKE_PTR(syscalls);
-        return 0;
-}
-
-static void syscall_set_remove(Set *s, const SyscallFilterSet *set) {
-        const char *syscall;
-
-        NULSTR_FOREACH(syscall, set->value) {
-                if (syscall[0] == '@')
-                        continue;
-
-                free(set_remove(s, syscall));
-        }
-}
-
-static void dump_syscall_filter(const SyscallFilterSet *set) {
-        const char *syscall;
-
-        printf("%s%s%s\n"
-               "    # %s\n",
-               ansi_highlight(),
-               set->name,
-               ansi_normal(),
-               set->help);
-
-        NULSTR_FOREACH(syscall, set->value)
-                printf("    %s%s%s\n", syscall[0] == '@' ? ansi_underline() : "", syscall, ansi_normal());
-}
-
-static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
-        bool first = true;
-
-        (void) pager_open(arg_pager_flags);
-
-        if (strv_isempty(strv_skip(argv, 1))) {
-                _cleanup_set_free_ Set *kernel = NULL, *known = NULL;
-                const char *sys;
-                int k;
-
-                NULSTR_FOREACH(sys, syscall_filter_sets[SYSCALL_FILTER_SET_KNOWN].value)
-                        if (set_put_strdup(&known, sys) < 0)
-                                return log_oom();
-
-                k = load_kernel_syscalls(&kernel);
-
-                for (int i = 0; i < _SYSCALL_FILTER_SET_MAX; i++) {
-                        const SyscallFilterSet *set = syscall_filter_sets + i;
-                        if (!first)
-                                puts("");
-
-                        dump_syscall_filter(set);
-                        syscall_set_remove(kernel, set);
-                        if (i != SYSCALL_FILTER_SET_KNOWN)
-                                syscall_set_remove(known, set);
-                        first = false;
-                }
-
-                if (!set_isempty(known)) {
-                        _cleanup_free_ char **l = NULL;
-                        char **syscall;
-
-                        printf("\n"
-                               "# %sUngrouped System Calls%s (known but not included in any of the groups except @known):\n",
-                               ansi_highlight(), ansi_normal());
-
-                        l = set_get_strv(known);
-                        if (!l)
-                                return log_oom();
-
-                        strv_sort(l);
-
-                        STRV_FOREACH(syscall, l)
-                                printf("#   %s\n", *syscall);
-                }
-
-                if (k < 0) {
-                        fputc('\n', stdout);
-                        fflush(stdout);
-                        log_notice_errno(k, "# Not showing unlisted system calls, couldn't retrieve kernel system call list: %m");
-                } else if (!set_isempty(kernel)) {
-                        _cleanup_free_ char **l = NULL;
-                        char **syscall;
-
-                        printf("\n"
-                               "# %sUnlisted System Calls%s (supported by the local kernel, but not included in any of the groups listed above):\n",
-                               ansi_highlight(), ansi_normal());
-
-                        l = set_get_strv(kernel);
-                        if (!l)
-                                return log_oom();
-
-                        strv_sort(l);
-
-                        STRV_FOREACH(syscall, l)
-                                printf("#   %s\n", *syscall);
-                }
-        } else {
-                char **name;
-
-                STRV_FOREACH(name, strv_skip(argv, 1)) {
-                        const SyscallFilterSet *set;
-
-                        if (!first)
-                                puts("");
-
-                        set = syscall_filter_set_find(*name);
-                        if (!set) {
-                                /* make sure the error appears below normal output */
-                                fflush(stdout);
-
-                                return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
-                                                       "Filter set \"%s\" not found.", *name);
-                        }
-
-                        dump_syscall_filter(set);
-                        first = false;
-                }
-        }
-
-        return 0;
-}
-
-#else
-static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
-        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Not compiled with syscall filters, sorry.");
-}
-#endif
-
-static void parsing_hint(const char *p, bool calendar, bool timestamp, bool timespan) {
+void time_parsing_hint(const char *p, bool calendar, bool timestamp, bool timespan) {
         if (calendar && calendar_spec_from_string(p, NULL) >= 0)
                 log_notice("Hint: this expression is a valid calendar specification. "
                            "Use 'systemd-analyze calendar \"%s\"' instead?", p);
@@ -1814,358 +166,11 @@
                            "Use 'systemd-analyze timespan \"%s\"' instead?", p);
 }
 
-static int dump_timespan(int argc, char *argv[], void *userdata) {
-        char **input_timespan;
-
-        STRV_FOREACH(input_timespan, strv_skip(argv, 1)) {
-                _cleanup_(table_unrefp) Table *table = NULL;
-                usec_t output_usecs;
-                TableCell *cell;
-                int r;
-
-                r = parse_time(*input_timespan, &output_usecs, USEC_PER_SEC);
-                if (r < 0) {
-                        log_error_errno(r, "Failed to parse time span '%s': %m", *input_timespan);
-                        parsing_hint(*input_timespan, true, true, false);
-                        return r;
-                }
-
-                table = table_new("name", "value");
-                if (!table)
-                        return log_oom();
-
-                table_set_header(table, false);
-
-                assert_se(cell = table_get_cell(table, 0, 0));
-                r = table_set_ellipsize_percent(table, cell, 100);
-                if (r < 0)
-                        return r;
-
-                r = table_set_align_percent(table, cell, 100);
-                if (r < 0)
-                        return r;
-
-                assert_se(cell = table_get_cell(table, 0, 1));
-                r = table_set_ellipsize_percent(table, cell, 100);
-                if (r < 0)
-                        return r;
-
-                r = table_add_many(table,
-                                   TABLE_STRING, "Original:",
-                                   TABLE_STRING, *input_timespan);
-                if (r < 0)
-                        return table_log_add_error(r);
-
-                r = table_add_cell_stringf(table, NULL, "%ss:", special_glyph(SPECIAL_GLYPH_MU));
-                if (r < 0)
-                        return table_log_add_error(r);
-
-                r = table_add_many(table,
-                                   TABLE_UINT64, output_usecs,
-                                   TABLE_STRING, "Human:",
-                                   TABLE_TIMESPAN, output_usecs,
-                                   TABLE_SET_COLOR, ansi_highlight());
-                if (r < 0)
-                        return table_log_add_error(r);
-
-                r = table_print(table, NULL);
-                if (r < 0)
-                        return r;
-
-                if (input_timespan[1])
-                        putchar('\n');
-        }
-
-        return EXIT_SUCCESS;
-}
-
-static int test_timestamp_one(const char *p) {
-        _cleanup_(table_unrefp) Table *table = NULL;
-        TableCell *cell;
-        usec_t usec;
-        int r;
-
-        r = parse_timestamp(p, &usec);
-        if (r < 0) {
-                log_error_errno(r, "Failed to parse \"%s\": %m", p);
-                parsing_hint(p, true, false, true);
-                return r;
-        }
-
-        table = table_new("name", "value");
-        if (!table)
-                return log_oom();
-
-        table_set_header(table, false);
-
-        assert_se(cell = table_get_cell(table, 0, 0));
-        r = table_set_ellipsize_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        r = table_set_align_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        assert_se(cell = table_get_cell(table, 0, 1));
-        r = table_set_ellipsize_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        r = table_add_many(table,
-                           TABLE_STRING, "Original form:",
-                           TABLE_STRING, p,
-                           TABLE_STRING, "Normalized form:",
-                           TABLE_TIMESTAMP, usec,
-                           TABLE_SET_COLOR, ansi_highlight_blue());
-        if (r < 0)
-                return table_log_add_error(r);
-
-        if (!in_utc_timezone()) {
-                r = table_add_many(table,
-                                   TABLE_STRING, "(in UTC):",
-                                   TABLE_TIMESTAMP_UTC, usec);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
-
-        r = table_add_cell(table, NULL, TABLE_STRING, "UNIX seconds:");
-        if (r < 0)
-                return table_log_add_error(r);
-
-        if (usec % USEC_PER_SEC == 0)
-                r = table_add_cell_stringf(table, NULL, "@%"PRI_USEC,
-                                           usec / USEC_PER_SEC);
-        else
-                r = table_add_cell_stringf(table, NULL, "@%"PRI_USEC".%06"PRI_USEC"",
-                                           usec / USEC_PER_SEC,
-                                           usec % USEC_PER_SEC);
-        if (r < 0)
-                return r;
-
-        r = table_add_many(table,
-                           TABLE_STRING, "From now:",
-                           TABLE_TIMESTAMP_RELATIVE, usec);
-        if (r < 0)
-                return table_log_add_error(r);
-
-        return table_print(table, NULL);
-}
-
-static int test_timestamp(int argc, char *argv[], void *userdata) {
-        int ret = 0, r;
-        char **p;
-
-        STRV_FOREACH(p, strv_skip(argv, 1)) {
-                r = test_timestamp_one(*p);
-                if (ret == 0 && r < 0)
-                        ret = r;
-
-                if (*(p + 1))
-                        putchar('\n');
-        }
-
-        return ret;
-}
-
-static int test_calendar_one(usec_t n, const char *p) {
-        _cleanup_(calendar_spec_freep) CalendarSpec *spec = NULL;
-        _cleanup_(table_unrefp) Table *table = NULL;
-        _cleanup_free_ char *t = NULL;
-        TableCell *cell;
-        int r;
-
-        r = calendar_spec_from_string(p, &spec);
-        if (r < 0) {
-                log_error_errno(r, "Failed to parse calendar specification '%s': %m", p);
-                parsing_hint(p, false, true, true);
-                return r;
-        }
-
-        r = calendar_spec_to_string(spec, &t);
-        if (r < 0)
-                return log_error_errno(r, "Failed to format calendar specification '%s': %m", p);
-
-        table = table_new("name", "value");
-        if (!table)
-                return log_oom();
-
-        table_set_header(table, false);
-
-        assert_se(cell = table_get_cell(table, 0, 0));
-        r = table_set_ellipsize_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        r = table_set_align_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        assert_se(cell = table_get_cell(table, 0, 1));
-        r = table_set_ellipsize_percent(table, cell, 100);
-        if (r < 0)
-                return r;
-
-        if (!streq(t, p)) {
-                r = table_add_many(table,
-                                   TABLE_STRING, "Original form:",
-                                   TABLE_STRING, p);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
-
-        r = table_add_many(table,
-                           TABLE_STRING, "Normalized form:",
-                           TABLE_STRING, t);
-        if (r < 0)
-                return table_log_add_error(r);
-
-        for (unsigned i = 0; i < arg_iterations; i++) {
-                usec_t next;
-
-                r = calendar_spec_next_usec(spec, n, &next);
-                if (r == -ENOENT) {
-                        if (i == 0) {
-                                r = table_add_many(table,
-                                                   TABLE_STRING, "Next elapse:",
-                                                   TABLE_STRING, "never",
-                                                   TABLE_SET_COLOR, ansi_highlight_yellow());
-                                if (r < 0)
-                                        return table_log_add_error(r);
-                        }
-                        break;
-                }
-                if (r < 0)
-                        return log_error_errno(r, "Failed to determine next elapse for '%s': %m", p);
-
-                if (i == 0) {
-                        r = table_add_many(table,
-                                           TABLE_STRING, "Next elapse:",
-                                           TABLE_TIMESTAMP, next,
-                                           TABLE_SET_COLOR, ansi_highlight_blue());
-                        if (r < 0)
-                                return table_log_add_error(r);
-                } else {
-                        int k = DECIMAL_STR_WIDTH(i + 1);
-
-                        if (k < 8)
-                                k = 8 - k;
-                        else
-                                k = 0;
-
-                        r = table_add_cell_stringf(table, NULL, "Iter. #%u:", i+1);
-                        if (r < 0)
-                                return table_log_add_error(r);
-
-                        r = table_add_many(table,
-                                           TABLE_TIMESTAMP, next,
-                                           TABLE_SET_COLOR, ansi_highlight_blue());
-                        if (r < 0)
-                                return table_log_add_error(r);
-                }
-
-                if (!in_utc_timezone()) {
-                        r = table_add_many(table,
-                                           TABLE_STRING, "(in UTC):",
-                                           TABLE_TIMESTAMP_UTC, next);
-                        if (r < 0)
-                                return table_log_add_error(r);
-                }
-
-                r = table_add_many(table,
-                                   TABLE_STRING, "From now:",
-                                   TABLE_TIMESTAMP_RELATIVE, next);
-                if (r < 0)
-                        return table_log_add_error(r);
-
-                n = next;
-        }
-
-        return table_print(table, NULL);
-}
-
-static int test_calendar(int argc, char *argv[], void *userdata) {
-        int ret = 0, r;
-        char **p;
-        usec_t n;
-
-        if (arg_base_time != USEC_INFINITY)
-                n = arg_base_time;
-        else
-                n = now(CLOCK_REALTIME); /* We want to use the same "base" for all expressions */
-
-        STRV_FOREACH(p, strv_skip(argv, 1)) {
-                r = test_calendar_one(n, *p);
-                if (ret == 0 && r < 0)
-                        ret = r;
-
-                if (*(p + 1))
-                        putchar('\n');
-        }
-
-        return ret;
-}
-
-static int service_watchdogs(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        int b, r;
-
-        assert(IN_SET(argc, 1, 2));
-        assert(argv);
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        if (argc == 1) {
-                /* get ServiceWatchdogs */
-                r = bus_get_property_trivial(bus, bus_systemd_mgr, "ServiceWatchdogs", &error, 'b', &b);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get service-watchdog state: %s", bus_error_message(&error, r));
-
-                printf("%s\n", yes_no(!!b));
-
-        } else {
-                /* set ServiceWatchdogs */
-                b = parse_boolean(argv[1]);
-                if (b < 0)
-                        return log_error_errno(b, "Failed to parse service-watchdogs argument: %m");
-
-                r = bus_set_property(bus, bus_systemd_mgr, "ServiceWatchdogs", &error, "b", b);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to set service-watchdog state: %s", bus_error_message(&error, r));
-        }
-
-        return 0;
-}
-
-static int do_condition(int argc, char *argv[], void *userdata) {
-        return verify_conditions(strv_skip(argv, 1), arg_scope);
-}
-
-static int do_verify(int argc, char *argv[], void *userdata) {
-        return verify_units(strv_skip(argv, 1), arg_scope, arg_man, arg_generators);
-}
-
-static int do_security(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        int r;
-
-        r = acquire_bus(&bus, NULL);
-        if (r < 0)
-                return bus_log_connect_error(r);
-
-        (void) pager_open(arg_pager_flags);
-
-        return analyze_security(bus, strv_skip(argv, 1), 0);
-}
-
 static int help(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *link = NULL, *dot_link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("systemd-analyze", "1", &link);
         if (r < 0)
@@ -2179,43 +184,70 @@
         printf("%s [OPTIONS...] COMMAND ...\n\n"
                "%sProfile systemd, show unit dependencies, check unit files.%s\n"
                "\nCommands:\n"
-               "  [time]                   Print time required to boot the machine\n"
-               "  blame                    Print list of running units ordered by time to init\n"
-               "  critical-chain [UNIT...] Print a tree of the time critical chain of units\n"
-               "  plot                     Output SVG graphic showing service initialization\n"
-               "  dot [UNIT...]            Output dependency graph in %s format\n"
-               "  dump                     Output state serialization of service manager\n"
-               "  cat-config               Show configuration file and drop-ins\n"
-               "  unit-files               List files and symlinks for units\n"
-               "  unit-paths               List load directories for units\n"
-               "  exit-status [STATUS...]  List exit status definitions\n"
-               "  capability [CAP...]      List capability definitions\n"
-               "  syscall-filter [NAME...] Print list of syscalls in seccomp filter\n"
-               "  condition CONDITION...   Evaluate conditions and asserts\n"
-               "  verify FILE...           Check unit files for correctness\n"
-               "  calendar SPEC...         Validate repetitive calendar time events\n"
-               "  timestamp TIMESTAMP...   Validate a timestamp\n"
-               "  timespan SPAN...         Validate a time span\n"
-               "  security [UNIT...]       Analyze security of unit\n"
+               "  [time]                     Print time required to boot the machine\n"
+               "  blame                      Print list of running units ordered by\n"
+               "                             time to init\n"
+               "  critical-chain [UNIT...]   Print a tree of the time critical chain\n"
+               "                             of units\n"
+               "  plot                       Output SVG graphic showing service\n"
+               "                             initialization\n"
+               "  dot [UNIT...]              Output dependency graph in %s format\n"
+               "  dump [PATTERN...]          Output state serialization of service\n"
+               "                             manager\n"
+               "  cat-config                 Show configuration file and drop-ins\n"
+               "  unit-files                 List files and symlinks for units\n"
+               "  unit-paths                 List load directories for units\n"
+               "  exit-status [STATUS...]    List exit status definitions\n"
+               "  capability [CAP...]        List capability definitions\n"
+               "  syscall-filter [NAME...]   List syscalls in seccomp filters\n"
+               "  filesystems [NAME...]      List known filesystems\n"
+               "  condition CONDITION...     Evaluate conditions and asserts\n"
+               "  compare-versions VERSION1 [OP] VERSION2\n"
+               "                             Compare two version strings\n"
+               "  verify FILE...             Check unit files for correctness\n"
+               "  calendar SPEC...           Validate repetitive calendar time\n"
+               "                             events\n"
+               "  timestamp TIMESTAMP...     Validate a timestamp\n"
+               "  timespan SPAN...           Validate a time span\n"
+               "  security [UNIT...]         Analyze security of unit\n"
+               "  inspect-elf FILE...        Parse and print ELF package metadata\n"
                "\nOptions:\n"
-               "  -h --help                Show this help\n"
-               "     --version             Show package version\n"
-               "     --no-pager            Do not pipe output into a pager\n"
-               "     --system              Operate on system systemd instance\n"
-               "     --user                Operate on user systemd instance\n"
-               "     --global              Operate on global user configuration\n"
-               "  -H --host=[USER@]HOST    Operate on remote host\n"
-               "  -M --machine=CONTAINER   Operate on local container\n"
-               "     --order               Show only order in the graph\n"
-               "     --require             Show only requirement in the graph\n"
-               "     --from-pattern=GLOB   Show only origins in the graph\n"
-               "     --to-pattern=GLOB     Show only destinations in the graph\n"
-               "     --fuzz=SECONDS        Also print services which finished SECONDS earlier\n"
-               "                           than the latest in the branch\n"
-               "     --man[=BOOL]          Do [not] check for existence of man pages\n"
-               "     --generators[=BOOL]   Do [not] run unit generators (requires privileges)\n"
-               "     --iterations=N        Show the specified number of iterations\n"
-               "     --base-time=TIMESTAMP Calculate calendar times relative to specified time\n"
+               "     --recursive-errors=MODE Control which units are verified\n"
+               "     --offline=BOOL          Perform a security review on unit file(s)\n"
+               "     --threshold=N           Exit with a non-zero status when overall\n"
+               "                             exposure level is over threshold value\n"
+               "     --security-policy=PATH  Use custom JSON security policy instead\n"
+               "                             of built-in one\n"
+               "     --json=pretty|short|off Generate JSON output of the security\n"
+               "                             analysis table, or plot's raw time data\n"
+               "     --no-pager              Do not pipe output into a pager\n"
+               "     --no-legend             Disable column headers and hints in plot\n"
+               "                             with either --table or --json=\n"
+               "     --system                Operate on system systemd instance\n"
+               "     --user                  Operate on user systemd instance\n"
+               "     --global                Operate on global user configuration\n"
+               "  -H --host=[USER@]HOST      Operate on remote host\n"
+               "  -M --machine=CONTAINER     Operate on local container\n"
+               "     --order                 Show only order in the graph\n"
+               "     --require               Show only requirement in the graph\n"
+               "     --from-pattern=GLOB     Show only origins in the graph\n"
+               "     --to-pattern=GLOB       Show only destinations in the graph\n"
+               "     --fuzz=SECONDS          Also print services which finished SECONDS\n"
+               "                             earlier than the latest in the branch\n"
+               "     --man[=BOOL]            Do [not] check for existence of man pages\n"
+               "     --generators[=BOOL]     Do [not] run unit generators\n"
+               "                             (requires privileges)\n"
+               "     --iterations=N          Show the specified number of iterations\n"
+               "     --base-time=TIMESTAMP   Calculate calendar times relative to\n"
+               "                             specified time\n"
+               "     --profile=name|PATH     Include the specified profile in the\n"
+               "                             security review of the unit(s)\n"
+               "     --table                 Output plot's raw time data as a table\n"
+               "  -h --help                  Show this help\n"
+               "     --version               Show package version\n"
+               "  -q --quiet                 Do not emit hints\n"
+               "     --root=PATH             Operate on an alternate filesystem root\n"
+               "     --image=PATH            Operate on disk image as filesystem root\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -2235,6 +267,7 @@
                 ARG_ORDER,
                 ARG_REQUIRE,
                 ARG_ROOT,
+                ARG_IMAGE,
                 ARG_SYSTEM,
                 ARG_USER,
                 ARG_GLOBAL,
@@ -2246,27 +279,46 @@
                 ARG_GENERATORS,
                 ARG_ITERATIONS,
                 ARG_BASE_TIME,
+                ARG_RECURSIVE_ERRORS,
+                ARG_OFFLINE,
+                ARG_THRESHOLD,
+                ARG_SECURITY_POLICY,
+                ARG_JSON,
+                ARG_PROFILE,
+                ARG_TABLE,
+                ARG_NO_LEGEND,
         };
 
         static const struct option options[] = {
-                { "help",         no_argument,       NULL, 'h'                  },
-                { "version",      no_argument,       NULL, ARG_VERSION          },
-                { "order",        no_argument,       NULL, ARG_ORDER            },
-                { "require",      no_argument,       NULL, ARG_REQUIRE          },
-                { "root",         required_argument, NULL, ARG_ROOT             },
-                { "system",       no_argument,       NULL, ARG_SYSTEM           },
-                { "user",         no_argument,       NULL, ARG_USER             },
-                { "global",       no_argument,       NULL, ARG_GLOBAL           },
-                { "from-pattern", required_argument, NULL, ARG_DOT_FROM_PATTERN },
-                { "to-pattern",   required_argument, NULL, ARG_DOT_TO_PATTERN   },
-                { "fuzz",         required_argument, NULL, ARG_FUZZ             },
-                { "no-pager",     no_argument,       NULL, ARG_NO_PAGER         },
-                { "man",          optional_argument, NULL, ARG_MAN              },
-                { "generators",   optional_argument, NULL, ARG_GENERATORS       },
-                { "host",         required_argument, NULL, 'H'                  },
-                { "machine",      required_argument, NULL, 'M'                  },
-                { "iterations",   required_argument, NULL, ARG_ITERATIONS       },
-                { "base-time",    required_argument, NULL, ARG_BASE_TIME        },
+                { "help",             no_argument,       NULL, 'h'                  },
+                { "version",          no_argument,       NULL, ARG_VERSION          },
+                { "quiet",            no_argument,       NULL, 'q'                  },
+                { "order",            no_argument,       NULL, ARG_ORDER            },
+                { "require",          no_argument,       NULL, ARG_REQUIRE          },
+                { "root",             required_argument, NULL, ARG_ROOT             },
+                { "image",            required_argument, NULL, ARG_IMAGE            },
+                { "recursive-errors", required_argument, NULL, ARG_RECURSIVE_ERRORS },
+                { "offline",          required_argument, NULL, ARG_OFFLINE          },
+                { "threshold",        required_argument, NULL, ARG_THRESHOLD        },
+                { "security-policy",  required_argument, NULL, ARG_SECURITY_POLICY  },
+                { "system",           no_argument,       NULL, ARG_SYSTEM           },
+                { "user",             no_argument,       NULL, ARG_USER             },
+                { "global",           no_argument,       NULL, ARG_GLOBAL           },
+                { "from-pattern",     required_argument, NULL, ARG_DOT_FROM_PATTERN },
+                { "to-pattern",       required_argument, NULL, ARG_DOT_TO_PATTERN   },
+                { "fuzz",             required_argument, NULL, ARG_FUZZ             },
+                { "no-pager",         no_argument,       NULL, ARG_NO_PAGER         },
+                { "man",              optional_argument, NULL, ARG_MAN              },
+                { "generators",       optional_argument, NULL, ARG_GENERATORS       },
+                { "host",             required_argument, NULL, 'H'                  },
+                { "machine",          required_argument, NULL, 'M'                  },
+                { "iterations",       required_argument, NULL, ARG_ITERATIONS       },
+                { "base-time",        required_argument, NULL, ARG_BASE_TIME        },
+                { "unit",             required_argument, NULL, 'U'                  },
+                { "json",             required_argument, NULL, ARG_JSON             },
+                { "profile",          required_argument, NULL, ARG_PROFILE          },
+                { "table",            optional_argument, NULL, ARG_TABLE            },
+                { "no-legend",        optional_argument, NULL, ARG_NO_LEGEND        },
                 {}
         };
 
@@ -2275,7 +327,7 @@
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0)
+        while ((c = getopt_long(argc, argv, "hH:M:U:", options, NULL)) >= 0)
                 switch (c) {
 
                 case 'h':
@@ -2284,20 +336,44 @@
                 case ARG_VERSION:
                         return version();
 
+                case 'q':
+                        arg_quiet = true;
+                        break;
+
+                case ARG_RECURSIVE_ERRORS:
+                        if (streq(optarg, "help")) {
+                                DUMP_STRING_TABLE(recursive_errors, RecursiveErrors, _RECURSIVE_ERRORS_MAX);
+                                return 0;
+                        }
+                        r = recursive_errors_from_string(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Unknown mode passed to --recursive-errors='%s'.", optarg);
+
+                        arg_recursive_errors = r;
+                        break;
+
                 case ARG_ROOT:
-                        arg_root = optarg;
+                        r = parse_path_argument(optarg, /* suppress_root= */ true, &arg_root);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_IMAGE:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
+                        if (r < 0)
+                                return r;
                         break;
 
                 case ARG_SYSTEM:
-                        arg_scope = UNIT_FILE_SYSTEM;
+                        arg_scope = LOOKUP_SCOPE_SYSTEM;
                         break;
 
                 case ARG_USER:
-                        arg_scope = UNIT_FILE_USER;
+                        arg_scope = LOOKUP_SCOPE_USER;
                         break;
 
                 case ARG_GLOBAL:
-                        arg_scope = UNIT_FILE_GLOBAL;
+                        arg_scope = LOOKUP_SCOPE_GLOBAL;
                         break;
 
                 case ARG_ORDER:
@@ -2352,73 +428,179 @@
                                 return r;
                         break;
 
+                case ARG_OFFLINE:
+                        r = parse_boolean_argument("--offline", optarg, &arg_offline);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_THRESHOLD:
+                        r = safe_atou(optarg, &arg_threshold);
+                        if (r < 0 || arg_threshold > 100)
+                                return log_error_errno(r < 0 ? r : SYNTHETIC_ERRNO(EINVAL), "Failed to parse threshold: %s", optarg);
+
+                        break;
+
+                case ARG_SECURITY_POLICY:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_security_policy);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_JSON:
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
+                        break;
+
                 case ARG_ITERATIONS:
                         r = safe_atou(optarg, &arg_iterations);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to parse iterations: %s", optarg);
-
                         break;
 
                 case ARG_BASE_TIME:
                         r = parse_timestamp(optarg, &arg_base_time);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to parse --base-time= parameter: %s", optarg);
+                        break;
 
+                case ARG_PROFILE:
+                        if (isempty(optarg))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Profile file name is empty");
+
+                        if (is_path(optarg)) {
+                                r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_profile);
+                                if (r < 0)
+                                        return r;
+                                if (!endswith(arg_profile, ".conf"))
+                                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Profile file name must end with .conf: %s", arg_profile);
+                        } else {
+                                r = free_and_strdup(&arg_profile, optarg);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                        break;
+
+                case 'U': {
+                        _cleanup_free_ char *mangled = NULL;
+
+                        r = unit_name_mangle(optarg, UNIT_NAME_MANGLE_WARN, &mangled);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to mangle unit name %s: %m", optarg);
+
+                        free_and_replace(arg_unit, mangled);
+                        break;
+                }
+
+                case ARG_TABLE:
+                        arg_table = true;
+                        break;
+
+                case ARG_NO_LEGEND:
+                        arg_legend = false;
                         break;
 
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option code.");
+                        assert_not_reached();
                 }
 
-        if (arg_scope == UNIT_FILE_GLOBAL &&
+        if (arg_offline && !streq_ptr(argv[optind], "security"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Option --offline= is only supported for security right now.");
+
+        if (arg_json_format_flags != JSON_FORMAT_OFF && !STRPTR_IN_SET(argv[optind], "security", "inspect-elf", "plot"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Option --json= is only supported for security, inspect-elf, and plot right now.");
+
+        if (arg_threshold != 100 && !streq_ptr(argv[optind], "security"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Option --threshold= is only supported for security right now.");
+
+        if (arg_scope == LOOKUP_SCOPE_GLOBAL &&
             !STR_IN_SET(argv[optind] ?: "time", "dot", "unit-paths", "verify"))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Option --global only makes sense with verbs dot, unit-paths, verify.");
 
-        if (streq_ptr(argv[optind], "cat-config") && arg_scope == UNIT_FILE_USER)
+        if (streq_ptr(argv[optind], "cat-config") && arg_scope == LOOKUP_SCOPE_USER)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Option --user is not supported for cat-config right now.");
 
-        if (arg_root && !streq_ptr(argv[optind], "cat-config"))
+        if (arg_security_policy && !streq_ptr(argv[optind], "security"))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Option --root is only supported for cat-config right now.");
+                                       "Option --security-policy= is only supported for security.");
+
+        if ((arg_root || arg_image) && (!STRPTR_IN_SET(argv[optind], "cat-config", "verify", "condition")) &&
+           (!(streq_ptr(argv[optind], "security") && arg_offline)))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Options --root= and --image= are only supported for cat-config, verify, condition and security when used with --offline= right now.");
+
+        /* Having both an image and a root is not supported by the code */
+        if (arg_root && arg_image)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Please specify either --root= or --image=, the combination of both is not supported.");
+
+        if (arg_unit && !streq_ptr(argv[optind], "condition"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Option --unit= is only supported for condition");
+
+        if (streq_ptr(argv[optind], "condition") && !arg_unit && optind >= argc - 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Too few arguments for condition");
+
+        if (streq_ptr(argv[optind], "condition") && arg_unit && optind < argc - 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No conditions can be passed if --unit= is used.");
+
+        if ((!arg_legend && !streq_ptr(argv[optind], "plot")) ||
+           (streq_ptr(argv[optind], "plot") && !arg_legend && !arg_table && FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Option --no-legend is only supported for plot with either --table or --json=.");
+
+        if (arg_table && !streq_ptr(argv[optind], "plot"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Option --table is only supported for plot right now.");
+
+        if (arg_table && !FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--table and --json= are mutually exclusive.");
 
         return 1; /* work to do */
 }
 
 static int run(int argc, char *argv[]) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *unlink_dir = NULL;
 
         static const Verb verbs[] = {
                 { "help",              VERB_ANY, VERB_ANY, 0,            help                   },
-                { "time",              VERB_ANY, 1,        VERB_DEFAULT, analyze_time           },
-                { "blame",             VERB_ANY, 1,        0,            analyze_blame          },
-                { "critical-chain",    VERB_ANY, VERB_ANY, 0,            analyze_critical_chain },
-                { "plot",              VERB_ANY, 1,        0,            analyze_plot           },
-                { "dot",               VERB_ANY, VERB_ANY, 0,            dot                    },
-                /* The following seven verbs are deprecated */
-                { "log-level",         VERB_ANY, 2,        0,            get_or_set_log_level   },
-                { "log-target",        VERB_ANY, 2,        0,            get_or_set_log_target  },
-                { "set-log-level",     2,        2,        0,            set_log_level          },
-                { "get-log-level",     VERB_ANY, 1,        0,            get_log_level          },
-                { "set-log-target",    2,        2,        0,            set_log_target         },
-                { "get-log-target",    VERB_ANY, 1,        0,            get_log_target         },
-                { "service-watchdogs", VERB_ANY, 2,        0,            service_watchdogs      },
-                { "dump",              VERB_ANY, 1,        0,            dump                   },
-                { "cat-config",        2,        VERB_ANY, 0,            cat_config             },
-                { "unit-files",        VERB_ANY, VERB_ANY, 0,            do_unit_files          },
-                { "unit-paths",        1,        1,        0,            dump_unit_paths        },
-                { "exit-status",       VERB_ANY, VERB_ANY, 0,            dump_exit_status       },
-                { "syscall-filter",    VERB_ANY, VERB_ANY, 0,            dump_syscall_filters   },
-                { "capability",        VERB_ANY, VERB_ANY, 0,            dump_capabilities      },
-                { "condition",         2,        VERB_ANY, 0,            do_condition           },
-                { "verify",            2,        VERB_ANY, 0,            do_verify              },
-                { "calendar",          2,        VERB_ANY, 0,            test_calendar          },
-                { "timestamp",         2,        VERB_ANY, 0,            test_timestamp         },
-                { "timespan",          2,        VERB_ANY, 0,            dump_timespan          },
-                { "security",          VERB_ANY, VERB_ANY, 0,            do_security            },
+                { "time",              VERB_ANY, 1,        VERB_DEFAULT, verb_time              },
+                { "blame",             VERB_ANY, 1,        0,            verb_blame             },
+                { "critical-chain",    VERB_ANY, VERB_ANY, 0,            verb_critical_chain    },
+                { "plot",              VERB_ANY, 1,        0,            verb_plot              },
+                { "dot",               VERB_ANY, VERB_ANY, 0,            verb_dot               },
+                /* ↓ The following seven verbs are deprecated, from here … ↓ */
+                { "log-level",         VERB_ANY, 2,        0,            verb_log_control       },
+                { "log-target",        VERB_ANY, 2,        0,            verb_log_control       },
+                { "set-log-level",     2,        2,        0,            verb_log_control       },
+                { "get-log-level",     VERB_ANY, 1,        0,            verb_log_control       },
+                { "set-log-target",    2,        2,        0,            verb_log_control       },
+                { "get-log-target",    VERB_ANY, 1,        0,            verb_log_control       },
+                { "service-watchdogs", VERB_ANY, 2,        0,            verb_service_watchdogs },
+                /* ↑ … until here ↑ */
+                { "dump",              VERB_ANY, VERB_ANY, 0,            verb_dump              },
+                { "cat-config",        2,        VERB_ANY, 0,            verb_cat_config        },
+                { "unit-files",        VERB_ANY, VERB_ANY, 0,            verb_unit_files        },
+                { "unit-paths",        1,        1,        0,            verb_unit_paths        },
+                { "exit-status",       VERB_ANY, VERB_ANY, 0,            verb_exit_status       },
+                { "syscall-filter",    VERB_ANY, VERB_ANY, 0,            verb_syscall_filters   },
+                { "capability",        VERB_ANY, VERB_ANY, 0,            verb_capabilities      },
+                { "filesystems",       VERB_ANY, VERB_ANY, 0,            verb_filesystems       },
+                { "condition",         VERB_ANY, VERB_ANY, 0,            verb_condition         },
+                { "compare-versions",  3,        4,        0,            verb_compare_versions  },
+                { "verify",            2,        VERB_ANY, 0,            verb_verify            },
+                { "calendar",          2,        VERB_ANY, 0,            verb_calendar          },
+                { "timestamp",         2,        VERB_ANY, 0,            verb_timestamp         },
+                { "timespan",          2,        VERB_ANY, 0,            verb_timespan          },
+                { "security",          VERB_ANY, VERB_ANY, 0,            verb_security          },
+                { "inspect-elf",       2,        VERB_ANY, 0,            verb_elf_inspection    },
                 {}
         };
 
@@ -2433,7 +615,26 @@
         if (r <= 0)
                 return r;
 
+        /* Open up and mount the image */
+        if (arg_image) {
+                assert(!arg_root);
+
+                r = mount_image_privately_interactively(
+                                arg_image,
+                                DISSECT_IMAGE_GENERIC_ROOT |
+                                DISSECT_IMAGE_RELAX_VAR_CHECK |
+                                DISSECT_IMAGE_READ_ONLY,
+                                &unlink_dir,
+                                &loop_device);
+                if (r < 0)
+                        return r;
+
+                arg_root = strdup(unlink_dir);
+                if (!arg_root)
+                        return log_oom();
+        }
+
         return dispatch_verb(argc, argv, verbs, NULL);
 }
 
-DEFINE_MAIN_FUNCTION(run);
+DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
diff --git a/src/analyze/analyze.h b/src/analyze/analyze.h
new file mode 100644
index 0000000..e4af7b4
--- /dev/null
+++ b/src/analyze/analyze.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+#include "analyze-verify-util.h"
+#include "bus-util.h"
+#include "json.h"
+#include "pager.h"
+#include "time-util.h"
+#include "unit-file.h"
+
+typedef enum DotMode {
+        DEP_ALL,
+        DEP_ORDER,
+        DEP_REQUIRE,
+} DotMode;
+
+extern DotMode arg_dot;
+extern char **arg_dot_from_patterns, **arg_dot_to_patterns;
+extern usec_t arg_fuzz;
+extern PagerFlags arg_pager_flags;
+extern BusTransport arg_transport;
+extern const char *arg_host;
+extern LookupScope arg_scope;
+extern RecursiveErrors arg_recursive_errors;
+extern bool arg_man;
+extern bool arg_generators;
+extern char *arg_root;
+extern char *arg_security_policy;
+extern bool arg_offline;
+extern unsigned arg_threshold;
+extern unsigned arg_iterations;
+extern usec_t arg_base_time;
+extern char *arg_unit;
+extern JsonFormatFlags arg_json_format_flags;
+extern bool arg_quiet;
+extern char *arg_profile;
+extern bool arg_legend;
+extern bool arg_table;
+
+int acquire_bus(sd_bus **bus, bool *use_full_bus);
+
+int bus_get_unit_property_strv(sd_bus *bus, const char *path, const char *property, char ***strv);
+
+void time_parsing_hint(const char *p, bool calendar, bool timestamp, bool timespan);
diff --git a/src/analyze/meson.build b/src/analyze/meson.build
index f796629..55b805b 100644
--- a/src/analyze/meson.build
+++ b/src/analyze/meson.build
@@ -1,19 +1,38 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_analyze_sources = files('''
-        analyze.c
-        analyze-condition.c
-        analyze-condition.h
-        analyze-verify.c
-        analyze-verify.h
-        analyze-security.c
-        analyze-security.h
-'''.split())
+systemd_analyze_sources = files(
+        'analyze-blame.c',
+        'analyze-calendar.c',
+        'analyze-capability.c',
+        'analyze-cat-config.c',
+        'analyze-compare-versions.c',
+        'analyze-condition.c',
+        'analyze-critical-chain.c',
+        'analyze-dot.c',
+        'analyze-dump.c',
+        'analyze-exit-status.c',
+        'analyze-filesystems.c',
+        'analyze-inspect-elf.c',
+        'analyze-log-control.c',
+        'analyze-plot.c',
+        'analyze-security.c',
+        'analyze-service-watchdogs.c',
+        'analyze-syscall-filter.c',
+        'analyze-time.c',
+        'analyze-time-data.c',
+        'analyze-timespan.c',
+        'analyze-timestamp.c',
+        'analyze-unit-files.c',
+        'analyze-unit-paths.c',
+        'analyze-verify.c',
+        'analyze-verify-util.c',
+        'analyze.c',
+)
 
 tests += [
-        [['src/analyze/test-verify.c',
-          'src/analyze/analyze-verify.c',
-          'src/analyze/analyze-verify.h'],
+        [files('test-verify.c',
+               'analyze-verify-util.c',
+               'analyze-verify-util.h'),
          [libcore,
           libshared],
          [],
diff --git a/src/analyze/test-verify.c b/src/analyze/test-verify.c
index 12c3215..d37e54b 100644
--- a/src/analyze/test-verify.c
+++ b/src/analyze/test-verify.c
@@ -1,19 +1,16 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include "analyze-verify.h"
+
+#include "analyze-verify-util.h"
 #include "tests.h"
 
-static void test_verify_nonexistent(void) {
+TEST(verify_nonexistent) {
         /* Negative cases */
-        assert_se(verify_executable(NULL, &(ExecCommand) {.flags = EXEC_COMMAND_IGNORE_FAILURE, .path = (char*) "/non/existent"}) == 0);
-        assert_se(verify_executable(NULL, &(ExecCommand) {.path = (char*) "/non/existent"}) < 0);
+        assert_se(verify_executable(NULL, &(ExecCommand) {.flags = EXEC_COMMAND_IGNORE_FAILURE, .path = (char*) "/non/existent"}, NULL) == 0);
+        assert_se(verify_executable(NULL, &(ExecCommand) {.path = (char*) "/non/existent"}, NULL) < 0);
 
         /* Ordinary cases */
-        assert_se(verify_executable(NULL, &(ExecCommand) {.path = (char*) "/bin/echo"}) == 0);
-        assert_se(verify_executable(NULL, &(ExecCommand) {.flags = EXEC_COMMAND_IGNORE_FAILURE, .path = (char*) "/bin/echo"}) == 0);
+        assert_se(verify_executable(NULL, &(ExecCommand) {.path = (char*) "/bin/echo"}, NULL) == 0);
+        assert_se(verify_executable(NULL, &(ExecCommand) {.flags = EXEC_COMMAND_IGNORE_FAILURE, .path = (char*) "/bin/echo"}, NULL) == 0);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_verify_nonexistent();
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/ask-password/ask-password.c b/src/ask-password/ask-password.c
index 45305de..f161e65 100644
--- a/src/ask-password/ask-password.c
+++ b/src/ask-password/ask-password.c
@@ -6,7 +6,8 @@
 #include <unistd.h>
 
 #include "ask-password-api.h"
-#include "def.h"
+#include "build.h"
+#include "constants.h"
 #include "log.h"
 #include "macro.h"
 #include "main-func.h"
@@ -188,7 +189,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (isempty(emoji) || streq(emoji, "auto"))
@@ -223,7 +224,6 @@
 static int run(int argc, char *argv[]) {
         _cleanup_strv_free_erase_ char **l = NULL;
         usec_t timeout;
-        char **p;
         int r;
 
         log_show_color(true);
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
index 5aeee0d..e66477f 100644
--- a/src/backlight/backlight.c
+++ b/src/backlight/backlight.c
@@ -14,11 +14,13 @@
 #include "mkdir.h"
 #include "parse-util.h"
 #include "pretty-print.h"
-#include "terminal-util.h"
+#include "process-util.h"
 #include "reboot-util.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
+#include "terminal-util.h"
+
+#define PCI_CLASS_GRAPHICS_CARD 0x30000
 
 static int help(void) {
         _cleanup_free_ char *link = NULL;
@@ -43,6 +45,47 @@
         return 0;
 }
 
+static int has_multiple_graphics_cards(void) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        bool found = false;
+        int r;
+
+        r = sd_device_enumerator_new(&e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_subsystem(e, "pci", /* match = */ true);
+        if (r < 0)
+                return r;
+
+        /* class is an unsigned number, let's validate the value later. */
+        r = sd_device_enumerator_add_match_sysattr(e, "class", NULL, /* match = */ true);
+        if (r < 0)
+                return r;
+
+        FOREACH_DEVICE(e, dev) {
+                const char *s;
+                unsigned long c;
+
+                if (sd_device_get_sysattr_value(dev, "class", &s) < 0)
+                        continue;
+
+                if (safe_atolu(s, &c) < 0)
+                        continue;
+
+                if (c != PCI_CLASS_GRAPHICS_CARD)
+                        continue;
+
+                if (found)
+                        return true; /* This is the second device. */
+
+                found = true; /* Found the first device. */
+        }
+
+        return false;
+}
+
 static int find_pci_or_platform_parent(sd_device *device, sd_device **ret) {
         const char *subsystem, *sysname, *value;
         sd_device *parent;
@@ -71,7 +114,7 @@
                         return -ENODATA;
 
                 c += strspn(c, DIGITS);
-                if (*c == '-' && !STARTSWITH_SET(c, "-LVDS-", "-Embedded DisplayPort-"))
+                if (*c == '-' && !STARTSWITH_SET(c, "-LVDS-", "-Embedded DisplayPort-", "-eDP-"))
                         /* A connector DRM device, let's ignore all but LVDS and eDP! */
                         return -EOPNOTSUPP;
 
@@ -85,7 +128,7 @@
                                                  value, subsystem, sysname);
 
                 /* Graphics card */
-                if (class == 0x30000) {
+                if (class == PCI_CLASS_GRAPHICS_CARD) {
                         *ret = parent;
                         return 0;
                 }
@@ -129,7 +172,7 @@
 
 static int validate_device(sd_device *device) {
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *enumerate = NULL;
-        const char *v, *subsystem;
+        const char *v, *sysname, *subsystem;
         sd_device *parent, *other;
         int r;
 
@@ -144,80 +187,121 @@
          * device to userspace. However, we still need to make sure that we use "raw" only if no
          * "firmware" or "platform" device for the same device exists. */
 
+        r = sd_device_get_sysname(device, &sysname);
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to get sysname: %m");
+
         r = sd_device_get_subsystem(device, &subsystem);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(device, r, "Failed to get subsystem: %m");
         if (!streq(subsystem, "backlight"))
                 return true;
 
         r = sd_device_get_sysattr_value(device, "type", &v);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(device, r, "Failed to read 'type' sysattr: %m");
         if (!streq(v, "raw"))
                 return true;
 
         r = find_pci_or_platform_parent(device, &parent);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(device, r, "Failed to find PCI or platform parent: %m");
 
         r = sd_device_get_subsystem(parent, &subsystem);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(parent, r, "Failed to get subsystem: %m");
+
+        if (DEBUG_LOGGING) {
+                const char *s = NULL;
+
+                (void) sd_device_get_syspath(parent, &s);
+                log_device_debug(device, "Found %s parent device: %s", subsystem, strna(s));
+        }
 
         r = sd_device_enumerator_new(&enumerate);
         if (r < 0)
-                return r;
+                return log_oom_debug();
 
         r = sd_device_enumerator_allow_uninitialized(enumerate);
         if (r < 0)
-                return r;
+                return log_debug_errno(r, "Failed to allow uninitialized devices: %m");
 
-        r = sd_device_enumerator_add_match_subsystem(enumerate, "backlight", true);
+        r = sd_device_enumerator_add_match_subsystem(enumerate, "backlight", /* match = */ true);
         if (r < 0)
-                return r;
+                return log_debug_errno(r, "Failed to add subsystem match: %m");
+
+        r = sd_device_enumerator_add_nomatch_sysname(enumerate, sysname);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to add sysname unmatch: %m");
+
+        r = sd_device_enumerator_add_match_sysattr(enumerate, "type", "platform", /* match = */ true);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to add sysattr match: %m");
+
+        r = sd_device_enumerator_add_match_sysattr(enumerate, "type", "firmware", /* match = */ true);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to add sysattr match: %m");
+
+        if (streq(subsystem, "pci")) {
+                r = has_multiple_graphics_cards();
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to check if the system has multiple graphics cards: %m");
+                if (r > 0) {
+                        /* If the system has multiple graphics cards, then we cannot associate platform
+                         * devices on non-PCI bus (especially WMI bus) with PCI devices. Let's ignore all
+                         * backlight devices that do not have the same parent PCI device. */
+                        log_debug("Found multiple graphics cards on PCI bus. "
+                                  "Skipping to associate platform backlight devices on non-PCI bus.");
+
+                        r = sd_device_enumerator_add_match_parent(enumerate, parent);
+                        if (r < 0)
+                                return log_debug_errno(r, "Failed to add parent match: %m");
+                }
+        }
 
         FOREACH_DEVICE(enumerate, other) {
                 const char *other_subsystem;
                 sd_device *other_parent;
 
-                if (same_device(device, other) > 0)
-                        continue;
-
-                if (sd_device_get_sysattr_value(other, "type", &v) < 0 ||
-                    !STR_IN_SET(v, "platform", "firmware"))
-                        continue;
-
                 /* OK, so there's another backlight device, and it's a platform or firmware device.
                  * Let's see if we can verify it belongs to the same device as ours. */
-                if (find_pci_or_platform_parent(other, &other_parent) < 0)
+                r = find_pci_or_platform_parent(other, &other_parent);
+                if (r < 0) {
+                        log_device_debug_errno(other, r, "Failed to get PCI or platform parent, ignoring: %m");
                         continue;
+                }
 
                 if (same_device(parent, other_parent) > 0) {
-                        const char *device_sysname = NULL, *other_sysname = NULL;
-
                         /* Both have the same PCI parent, that means we are out. */
+                        if (DEBUG_LOGGING) {
+                                const char *other_sysname = NULL, *other_type = NULL;
 
-                        (void) sd_device_get_sysname(device, &device_sysname);
-                        (void) sd_device_get_sysname(other, &other_sysname);
-
-                        log_debug("Skipping backlight device %s, since device %s is on same PCI device and takes precedence.",
-                                  device_sysname, other_sysname);
+                                (void) sd_device_get_sysname(other, &other_sysname);
+                                (void) sd_device_get_sysattr_value(other, "type", &other_type);
+                                log_device_debug(device,
+                                                 "Found another %s backlight device %s on the same PCI, skipping.",
+                                                 strna(other_type), strna(other_sysname));
+                        }
                         return false;
                 }
 
-                if (sd_device_get_subsystem(other_parent, &other_subsystem) < 0)
+                r = sd_device_get_subsystem(other_parent, &other_subsystem);
+                if (r < 0) {
+                        log_device_debug_errno(other_parent, r, "Failed to get subsystem, ignoring: %m");
                         continue;
+                }
 
                 if (streq(other_subsystem, "platform") && streq(subsystem, "pci")) {
-                        const char *device_sysname = NULL, *other_sysname = NULL;
-
                         /* The other is connected to the platform bus and we are a PCI device, that also means we are out. */
+                        if (DEBUG_LOGGING) {
+                                const char *other_sysname = NULL, *other_type = NULL;
 
-                        (void) sd_device_get_sysname(device, &device_sysname);
-                        (void) sd_device_get_sysname(other, &other_sysname);
-
-                        log_debug("Skipping backlight device %s, since device %s is a platform device and takes precedence.",
-                                  device_sysname, other_sysname);
+                                (void) sd_device_get_sysname(other, &other_sysname);
+                                (void) sd_device_get_sysattr_value(other, "type", &other_type);
+                                log_device_debug(device,
+                                                 "Found another %s backlight device %s, which has higher precedence, skipping.",
+                                                 strna(other_type), strna(other_sysname));
+                        }
                         return false;
                 }
         }
@@ -368,7 +452,7 @@
 
         log_setup();
 
-        if (strv_contains(strv_skip(argv, 1), "--help"))
+        if (argv_looks_like_help(argc, argv))
                 return help();
 
         if (argc != 3)
@@ -387,7 +471,7 @@
         if (!sysname)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Requires a subsystem and sysname pair specifying a backlight device.");
 
-        ss = strndupa(argv[2], sysname - argv[2]);
+        ss = strndupa_safe(argv[2], sysname - argv[2]);
 
         sysname++;
 
@@ -503,7 +587,7 @@
                         return log_device_error_errno(device, r, "Failed to write %s: %m", saved);
 
         } else
-                assert_not_reached("Unknown verb.");
+                assert_not_reached();
 
         return 0;
 }
diff --git a/src/basic/alloc-util.c b/src/basic/alloc-util.c
index b030f45..6063943 100644
--- a/src/basic/alloc-util.c
+++ b/src/basic/alloc-util.c
@@ -102,3 +102,7 @@
 
         return q;
 }
+
+void *expand_to_usable(void *ptr, size_t newsize _unused_) {
+        return ptr;
+}
diff --git a/src/basic/alloc-util.h b/src/basic/alloc-util.h
index 833cf45..b0f7e31 100644
--- a/src/basic/alloc-util.h
+++ b/src/basic/alloc-util.h
@@ -2,6 +2,7 @@
 #pragma once
 
 #include <alloca.h>
+#include <malloc.h>
 #include <stddef.h>
 #include <stdlib.h>
 #include <string.h>
@@ -13,6 +14,7 @@
 #endif
 
 typedef void (*free_func_t)(void *p);
+typedef void* (*mfree_func_t)(void *p);
 
 /* If for some reason more than 4M are allocated on the stack, let's abort immediately. It's better than
  * proceeding and smashing the stack limits. Note that by default RLIMIT_STACK is 8M on Linux. */
@@ -22,20 +24,25 @@
 
 #define new0(t, n) ((t*) calloc((n) ?: 1, sizeof(t)))
 
+#define alloca_safe(n)                                                  \
+        ({                                                              \
+                size_t _nn_ = n;                                        \
+                assert(_nn_ <= ALLOCA_MAX);                             \
+                alloca(_nn_ == 0 ? 1 : _nn_);                           \
+        })                                                              \
+
 #define newa(t, n)                                                      \
         ({                                                              \
                 size_t _n_ = n;                                         \
                 assert(!size_multiply_overflow(sizeof(t), _n_));        \
-                assert(sizeof(t)*_n_ <= ALLOCA_MAX);                    \
-                (t*) alloca((sizeof(t)*_n_) ?: 1);                      \
+                (t*) alloca_safe(sizeof(t)*_n_);                        \
         })
 
 #define newa0(t, n)                                                     \
         ({                                                              \
                 size_t _n_ = n;                                         \
                 assert(!size_multiply_overflow(sizeof(t), _n_));        \
-                assert(sizeof(t)*_n_ <= ALLOCA_MAX);                    \
-                (t*) alloca0((sizeof(t)*_n_) ?: 1);                     \
+                (t*) alloca0((sizeof(t)*_n_));                          \
         })
 
 #define newdup(t, p, n) ((t*) memdup_multiply(p, sizeof(t), (n)))
@@ -44,17 +51,28 @@
 
 #define malloc0(n) (calloc(1, (n) ?: 1))
 
-static inline void *mfree(void *memory) {
-        free(memory);
-        return NULL;
-}
+#define free_and_replace_full(a, b, free_func)  \
+        ({                                      \
+                typeof(a)* _a = &(a);           \
+                typeof(b)* _b = &(b);           \
+                free_func(*_a);                 \
+                *_a = *_b;                      \
+                *_b = NULL;                     \
+                0;                              \
+        })
 
 #define free_and_replace(a, b)                  \
-        ({                                      \
-                free(a);                        \
-                (a) = (b);                      \
-                (b) = NULL;                     \
-                0;                              \
+        free_and_replace_full(a, b, free)
+
+/* This is similar to free_and_replace_full(), but NULL is not assigned to 'b', and its reference counter is
+ * increased. */
+#define unref_and_replace_full(a, b, ref_func, unref_func)      \
+        ({                                       \
+                typeof(a)* _a = &(a);            \
+                typeof(b) _b = ref_func(b);      \
+                unref_func(*_a);                 \
+                *_a = _b;                        \
+                0;                               \
         })
 
 void* memdup(const void *p, size_t l) _alloc_(2);
@@ -64,8 +82,7 @@
         ({                                      \
                 void *_q_;                      \
                 size_t _l_ = l;                 \
-                assert(_l_ <= ALLOCA_MAX);      \
-                _q_ = alloca(_l_ ?: 1);         \
+                _q_ = alloca_safe(_l_);         \
                 memcpy_safe(_q_, p, _l_);       \
         })
 
@@ -73,8 +90,7 @@
         ({                                      \
                 void *_q_;                      \
                 size_t _l_ = l;                 \
-                assert(_l_ <= ALLOCA_MAX);      \
-                _q_ = alloca(_l_ + 1);          \
+                _q_ = alloca_safe(_l_ + 1);     \
                 ((uint8_t*) _q_)[_l_] = 0;      \
                 memcpy_safe(_q_, p, _l_);       \
         })
@@ -143,9 +159,8 @@
         ({                                              \
                 char *_new_;                            \
                 size_t _len_ = n;                       \
-                assert(_len_ <= ALLOCA_MAX);            \
-                _new_ = alloca(_len_ ?: 1);             \
-                (void *) memset(_new_, 0, _len_);       \
+                _new_ = alloca_safe(_len_);             \
+                memset(_new_, 0, _len_);                \
         })
 
 /* It's not clear what alignment glibc/gcc alloca() guarantee, hence provide a guaranteed safe version */
@@ -154,8 +169,7 @@
                 void *_ptr_;                                            \
                 size_t _mask_ = (align) - 1;                            \
                 size_t _size_ = size;                                   \
-                assert(_size_ <= ALLOCA_MAX);                           \
-                _ptr_ = alloca((_size_ + _mask_) ?: 1);                 \
+                _ptr_ = alloca_safe(_size_ + _mask_);                   \
                 (void*)(((uintptr_t)_ptr_ + _mask_) & ~_mask_);         \
         })
 
@@ -164,7 +178,7 @@
                 void *_new_;                                            \
                 size_t _xsize_ = (size);                                \
                 _new_ = alloca_align(_xsize_, (align));                 \
-                (void*)memset(_new_, 0, _xsize_);                       \
+                memset(_new_, 0, _xsize_);                              \
         })
 
 #if HAS_FEATURE_MEMORY_SANITIZER
@@ -173,17 +187,35 @@
 #  define msan_unpoison(r, s)
 #endif
 
-/* This returns the number of usable bytes in a malloc()ed region as per malloc_usable_size(), in a way that
- * is compatible with _FORTIFY_SOURCES. If _FORTIFY_SOURCES is used many memory operations will take the
- * object size as returned by __builtin_object_size() into account. Hence, let's return the smaller size of
- * malloc_usable_size() and __builtin_object_size() here, so that we definitely operate in safe territory by
- * both the compiler's and libc's standards. Note that __builtin_object_size() evaluates to SIZE_MAX if the
- * size cannot be determined, hence the MIN() expression should be safe with dynamically sized memory,
- * too. Moreover, when NULL is passed malloc_usable_size() is documented to return zero, and
- * __builtin_object_size() returns SIZE_MAX too, hence we also return a sensible value of 0 in this corner
- * case. */
+/* Dummy allocator to tell the compiler that the new size of p is newsize. The implementation returns the
+ * pointer as is; the only reason for its existence is as a conduit for the _alloc_ attribute.  This must not
+ * be inlined (hence a non-static function with _noinline_ because LTO otherwise tries to inline it) because
+ * gcc then loses the attributes on the function.
+ * See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96503 */
+void *expand_to_usable(void *p, size_t newsize) _alloc_(2) _returns_nonnull_ _noinline_;
+
+static inline size_t malloc_sizeof_safe(void **xp) {
+        if (_unlikely_(!xp || !*xp))
+                return 0;
+
+        size_t sz = malloc_usable_size(*xp);
+        *xp = expand_to_usable(*xp, sz);
+        /* GCC doesn't see the _returns_nonnull_ when built with ubsan, so yet another hint to make it doubly
+         * clear that expand_to_usable won't return NULL.
+         * See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79265 */
+        if (!*xp)
+                assert_not_reached();
+        return sz;
+}
+
+/* This returns the number of usable bytes in a malloc()ed region as per malloc_usable_size(), which may
+ * return a value larger than the size that was actually allocated. Access to that additional memory is
+ * discouraged because it violates the C standard; a compiler cannot see that this as valid. To help the
+ * compiler out, the MALLOC_SIZEOF_SAFE macro 'allocates' the usable size using a dummy allocator function
+ * expand_to_usable. There is a possibility of malloc_usable_size() returning different values during the
+ * lifetime of an object, which may cause problems, but the glibc allocator does not do that at the moment. */
 #define MALLOC_SIZEOF_SAFE(x) \
-        MIN(malloc_usable_size(x), __builtin_object_size(x, 0))
+        malloc_sizeof_safe((void**) &__builtin_choose_expr(__builtin_constant_p(x), (void*) { NULL }, (x)))
 
 /* Inspired by ELEMENTSOF() but operates on malloc()'ed memory areas: typesafely returns the number of items
  * that fit into the specified memory block */
@@ -192,3 +224,19 @@
                 __builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
                 MALLOC_SIZEOF_SAFE(x)/sizeof((x)[0]),                   \
                 VOID_0))
+
+
+/* These are like strdupa()/strndupa(), but honour ALLOCA_MAX */
+#define strdupa_safe(s)                                                 \
+        ({                                                              \
+                const char *_t = (s);                                   \
+                (char*) memdupa_suffix0(_t, strlen(_t));                \
+        })
+
+#define strndupa_safe(s, n)                                             \
+        ({                                                              \
+                const char *_t = (s);                                   \
+                (char*) memdupa_suffix0(_t, strnlen(_t, (n)));          \
+        })
+
+#include "memory-util.h"
diff --git a/src/basic/architecture.c b/src/basic/architecture.c
index 409632c..773ee3c 100644
--- a/src/basic/architecture.c
+++ b/src/basic/architecture.c
@@ -7,172 +7,172 @@
 #include "string-table.h"
 #include "string-util.h"
 
-int uname_architecture(void) {
+Architecture uname_architecture(void) {
 
-        /* Return a sanitized enum identifying the architecture we are
-         * running on. This is based on uname(), and the user may
-         * hence control what this returns by using
-         * personality(). This puts the user in control on systems
-         * that can run binaries of multiple architectures.
+        /* Return a sanitized enum identifying the architecture we are running on. This
+         * is based on uname(), and the user may hence control what this returns by using
+         * personality(). This puts the user in control on systems that can run binaries
+         * of multiple architectures.
          *
-         * We do not translate the string returned by uname()
-         * 1:1. Instead we try to clean it up and break down the
-         * confusion on x86 and arm in particular.
+         * We do not translate the string returned by uname() 1:1. Instead we try to
+         * clean it up and break down the confusion on x86 and arm in particular.
          *
-         * We do not try to distinguish CPUs not CPU features, but
-         * actual architectures, i.e. that have genuinely different
-         * code. */
+         * We try to distinguish CPUs, not CPU features, i.e. actual architectures that
+         * have genuinely different code. */
 
         static const struct {
                 const char *machine;
-                int arch;
+                Architecture arch;
         } arch_map[] = {
-#if defined(__x86_64__) || defined(__i386__)
+#if defined(__aarch64__) || defined(__arm__)
+                { "aarch64",    ARCHITECTURE_ARM64    },
+                { "aarch64_be", ARCHITECTURE_ARM64_BE },
+                { "armv8l",     ARCHITECTURE_ARM      },
+                { "armv8b",     ARCHITECTURE_ARM_BE   },
+                { "armv7ml",    ARCHITECTURE_ARM      },
+                { "armv7mb",    ARCHITECTURE_ARM_BE   },
+                { "armv7l",     ARCHITECTURE_ARM      },
+                { "armv7b",     ARCHITECTURE_ARM_BE   },
+                { "armv6l",     ARCHITECTURE_ARM      },
+                { "armv6b",     ARCHITECTURE_ARM_BE   },
+                { "armv5tl",    ARCHITECTURE_ARM      },
+                { "armv5tel",   ARCHITECTURE_ARM      },
+                { "armv5tejl",  ARCHITECTURE_ARM      },
+                { "armv5tejb",  ARCHITECTURE_ARM_BE   },
+                { "armv5teb",   ARCHITECTURE_ARM_BE   },
+                { "armv5tb",    ARCHITECTURE_ARM_BE   },
+                { "armv4tl",    ARCHITECTURE_ARM      },
+                { "armv4tb",    ARCHITECTURE_ARM_BE   },
+                { "armv4l",     ARCHITECTURE_ARM      },
+                { "armv4b",     ARCHITECTURE_ARM_BE   },
+
+#elif defined(__alpha__)
+                { "alpha" ,     ARCHITECTURE_ALPHA    },
+
+#elif defined(__arc__)
+                { "arc",        ARCHITECTURE_ARC      },
+                { "arceb",      ARCHITECTURE_ARC_BE   },
+
+#elif defined(__cris__)
+                { "crisv32",    ARCHITECTURE_CRIS     },
+
+#elif defined(__i386__) || defined(__x86_64__)
                 { "x86_64",     ARCHITECTURE_X86_64   },
                 { "i686",       ARCHITECTURE_X86      },
                 { "i586",       ARCHITECTURE_X86      },
                 { "i486",       ARCHITECTURE_X86      },
                 { "i386",       ARCHITECTURE_X86      },
-#elif defined(__powerpc__) || defined(__powerpc64__)
-                { "ppc64",      ARCHITECTURE_PPC64    },
-                { "ppc64le",    ARCHITECTURE_PPC64_LE },
-                { "ppc",        ARCHITECTURE_PPC      },
-                { "ppcle",      ARCHITECTURE_PPC_LE   },
+
 #elif defined(__ia64__)
                 { "ia64",       ARCHITECTURE_IA64     },
+
 #elif defined(__hppa__) || defined(__hppa64__)
                 { "parisc64",   ARCHITECTURE_PARISC64 },
                 { "parisc",     ARCHITECTURE_PARISC   },
-#elif defined(__s390__) || defined(__s390x__)
-                { "s390x",      ARCHITECTURE_S390X    },
-                { "s390",       ARCHITECTURE_S390     },
-#elif defined(__sparc__)
-                { "sparc64",    ARCHITECTURE_SPARC64  },
-                { "sparc",      ARCHITECTURE_SPARC    },
+
+#elif defined(__loongarch64)
+                { "loongarch64", ARCHITECTURE_LOONGARCH64 },
+
+#elif defined(__m68k__)
+                { "m68k",       ARCHITECTURE_M68K     },
+
 #elif defined(__mips__) || defined(__mips64__)
                 { "mips64",     ARCHITECTURE_MIPS64   },
                 { "mips",       ARCHITECTURE_MIPS     },
-#elif defined(__alpha__)
-                { "alpha" ,     ARCHITECTURE_ALPHA    },
-#elif defined(__arm__) || defined(__aarch64__)
-                { "aarch64",    ARCHITECTURE_ARM64    },
-                { "aarch64_be", ARCHITECTURE_ARM64_BE },
-                { "armv4l",     ARCHITECTURE_ARM      },
-                { "armv4b",     ARCHITECTURE_ARM_BE   },
-                { "armv4tl",    ARCHITECTURE_ARM      },
-                { "armv4tb",    ARCHITECTURE_ARM_BE   },
-                { "armv5tl",    ARCHITECTURE_ARM      },
-                { "armv5tb",    ARCHITECTURE_ARM_BE   },
-                { "armv5tel",   ARCHITECTURE_ARM      },
-                { "armv5teb" ,  ARCHITECTURE_ARM_BE   },
-                { "armv5tejl",  ARCHITECTURE_ARM      },
-                { "armv5tejb",  ARCHITECTURE_ARM_BE   },
-                { "armv6l",     ARCHITECTURE_ARM      },
-                { "armv6b",     ARCHITECTURE_ARM_BE   },
-                { "armv7l",     ARCHITECTURE_ARM      },
-                { "armv7b",     ARCHITECTURE_ARM_BE   },
-                { "armv7ml",    ARCHITECTURE_ARM      },
-                { "armv7mb",    ARCHITECTURE_ARM_BE   },
-                { "armv4l",     ARCHITECTURE_ARM      },
-                { "armv4b",     ARCHITECTURE_ARM_BE   },
-                { "armv4tl",    ARCHITECTURE_ARM      },
-                { "armv4tb",    ARCHITECTURE_ARM_BE   },
-                { "armv5tl",    ARCHITECTURE_ARM      },
-                { "armv5tb",    ARCHITECTURE_ARM_BE   },
-                { "armv5tel",   ARCHITECTURE_ARM      },
-                { "armv5teb",   ARCHITECTURE_ARM_BE   },
-                { "armv5tejl",  ARCHITECTURE_ARM      },
-                { "armv5tejb",  ARCHITECTURE_ARM_BE   },
-                { "armv6l",     ARCHITECTURE_ARM      },
-                { "armv6b",     ARCHITECTURE_ARM_BE   },
-                { "armv7l",     ARCHITECTURE_ARM      },
-                { "armv7b",     ARCHITECTURE_ARM_BE   },
-                { "armv7ml",    ARCHITECTURE_ARM      },
-                { "armv7mb",    ARCHITECTURE_ARM_BE   },
-                { "armv8l",     ARCHITECTURE_ARM      },
-                { "armv8b",     ARCHITECTURE_ARM_BE   },
-#elif defined(__sh__) || defined(__sh64__)
-                { "sh5",        ARCHITECTURE_SH64     },
-                { "sh2",        ARCHITECTURE_SH       },
-                { "sh2a",       ARCHITECTURE_SH       },
-                { "sh3",        ARCHITECTURE_SH       },
-                { "sh4",        ARCHITECTURE_SH       },
-                { "sh4a",       ARCHITECTURE_SH       },
-#elif defined(__m68k__)
-                { "m68k",       ARCHITECTURE_M68K     },
-#elif defined(__tilegx__)
-                { "tilegx",     ARCHITECTURE_TILEGX   },
-#elif defined(__cris__)
-                { "crisv32",    ARCHITECTURE_CRIS     },
+
 #elif defined(__nios2__)
                 { "nios2",      ARCHITECTURE_NIOS2    },
-#elif defined(__riscv__) || defined(__riscv)
-        /* __riscv__ is obsolete, remove in 2018 */
-                { "riscv32",    ARCHITECTURE_RISCV32  },
+
+#elif defined(__powerpc__) || defined(__powerpc64__)
+                { "ppc64le",    ARCHITECTURE_PPC64_LE },
+                { "ppc64",      ARCHITECTURE_PPC64    },
+                { "ppcle",      ARCHITECTURE_PPC_LE   },
+                { "ppc",        ARCHITECTURE_PPC      },
+
+#elif defined(__riscv)
                 { "riscv64",    ARCHITECTURE_RISCV64  },
+                { "riscv32",    ARCHITECTURE_RISCV32  },
 #  if __SIZEOF_POINTER__ == 4
                 { "riscv",      ARCHITECTURE_RISCV32  },
 #  elif __SIZEOF_POINTER__ == 8
                 { "riscv",      ARCHITECTURE_RISCV64  },
 #  endif
-#elif defined(__arc__)
-                { "arc",        ARCHITECTURE_ARC      },
-                { "arceb",      ARCHITECTURE_ARC_BE   },
+
+#elif defined(__s390__) || defined(__s390x__)
+                { "s390x",      ARCHITECTURE_S390X    },
+                { "s390",       ARCHITECTURE_S390     },
+
+#elif defined(__sh__) || defined(__sh64__)
+                { "sh5",        ARCHITECTURE_SH64     },
+                { "sh4a",       ARCHITECTURE_SH       },
+                { "sh4",        ARCHITECTURE_SH       },
+                { "sh3",        ARCHITECTURE_SH       },
+                { "sh2a",       ARCHITECTURE_SH       },
+                { "sh2",        ARCHITECTURE_SH       },
+
+#elif defined(__sparc__)
+                { "sparc64",    ARCHITECTURE_SPARC64  },
+                { "sparc",      ARCHITECTURE_SPARC    },
+
+#elif defined(__tilegx__)
+                { "tilegx",     ARCHITECTURE_TILEGX   },
+
 #else
-#error "Please register your architecture here!"
+#  error "Please register your architecture here!"
 #endif
         };
 
-        static int cached = _ARCHITECTURE_INVALID;
+        static Architecture cached = _ARCHITECTURE_INVALID;
         struct utsname u;
-        unsigned i;
 
         if (cached != _ARCHITECTURE_INVALID)
                 return cached;
 
         assert_se(uname(&u) >= 0);
 
-        for (i = 0; i < ELEMENTSOF(arch_map); i++)
+        for (size_t i = 0; i < ELEMENTSOF(arch_map); i++)
                 if (streq(arch_map[i].machine, u.machine))
                         return cached = arch_map[i].arch;
 
-        assert_not_reached("Couldn't identify architecture. You need to patch systemd.");
+        assert_not_reached();
         return _ARCHITECTURE_INVALID;
 }
 
+/* Maintain same order as in the table above. */
 static const char *const architecture_table[_ARCHITECTURE_MAX] = {
-        [ARCHITECTURE_X86] = "x86",
-        [ARCHITECTURE_X86_64] = "x86-64",
-        [ARCHITECTURE_PPC] = "ppc",
-        [ARCHITECTURE_PPC_LE] = "ppc-le",
-        [ARCHITECTURE_PPC64] = "ppc64",
-        [ARCHITECTURE_PPC64_LE] = "ppc64-le",
-        [ARCHITECTURE_IA64] = "ia64",
-        [ARCHITECTURE_PARISC] = "parisc",
-        [ARCHITECTURE_PARISC64] = "parisc64",
-        [ARCHITECTURE_S390] = "s390",
-        [ARCHITECTURE_S390X] = "s390x",
-        [ARCHITECTURE_SPARC] = "sparc",
-        [ARCHITECTURE_SPARC64] = "sparc64",
-        [ARCHITECTURE_MIPS] = "mips",
-        [ARCHITECTURE_MIPS_LE] = "mips-le",
-        [ARCHITECTURE_MIPS64] = "mips64",
-        [ARCHITECTURE_MIPS64_LE] = "mips64-le",
-        [ARCHITECTURE_ALPHA] = "alpha",
-        [ARCHITECTURE_ARM] = "arm",
-        [ARCHITECTURE_ARM_BE] = "arm-be",
-        [ARCHITECTURE_ARM64] = "arm64",
-        [ARCHITECTURE_ARM64_BE] = "arm64-be",
-        [ARCHITECTURE_SH] = "sh",
-        [ARCHITECTURE_SH64] = "sh64",
-        [ARCHITECTURE_M68K] = "m68k",
-        [ARCHITECTURE_TILEGX] = "tilegx",
-        [ARCHITECTURE_CRIS] = "cris",
-        [ARCHITECTURE_NIOS2] = "nios2",
-        [ARCHITECTURE_RISCV32] = "riscv32",
-        [ARCHITECTURE_RISCV64] = "riscv64",
-        [ARCHITECTURE_ARC] = "arc",
-        [ARCHITECTURE_ARC_BE] = "arc-be",
+        [ARCHITECTURE_ARM64]       = "arm64",
+        [ARCHITECTURE_ARM64_BE]    = "arm64-be",
+        [ARCHITECTURE_ARM]         = "arm",
+        [ARCHITECTURE_ARM_BE]      = "arm-be",
+        [ARCHITECTURE_ALPHA]       = "alpha",
+        [ARCHITECTURE_ARC]         = "arc",
+        [ARCHITECTURE_ARC_BE]      = "arc-be",
+        [ARCHITECTURE_CRIS]        = "cris",
+        [ARCHITECTURE_X86_64]      = "x86-64",
+        [ARCHITECTURE_X86]         = "x86",
+        [ARCHITECTURE_IA64]        = "ia64",
+        [ARCHITECTURE_LOONGARCH64] = "loongarch64",
+        [ARCHITECTURE_M68K]        = "m68k",
+        [ARCHITECTURE_MIPS64_LE]   = "mips64-le",
+        [ARCHITECTURE_MIPS64]      = "mips64",
+        [ARCHITECTURE_MIPS_LE]     = "mips-le",
+        [ARCHITECTURE_MIPS]        = "mips",
+        [ARCHITECTURE_NIOS2]       = "nios2",
+        [ARCHITECTURE_PARISC64]    = "parisc64",
+        [ARCHITECTURE_PARISC]      = "parisc",
+        [ARCHITECTURE_PPC64_LE]    = "ppc64-le",
+        [ARCHITECTURE_PPC64]       = "ppc64",
+        [ARCHITECTURE_PPC]         = "ppc",
+        [ARCHITECTURE_PPC_LE]      = "ppc-le",
+        [ARCHITECTURE_RISCV32]     = "riscv32",
+        [ARCHITECTURE_RISCV64]     = "riscv64",
+        [ARCHITECTURE_S390X]       = "s390x",
+        [ARCHITECTURE_S390]        = "s390",
+        [ARCHITECTURE_SH64]        = "sh64",
+        [ARCHITECTURE_SH]          = "sh",
+        [ARCHITECTURE_SPARC64]     = "sparc64",
+        [ARCHITECTURE_SPARC]       = "sparc",
+        [ARCHITECTURE_TILEGX]      = "tilegx",
 };
 
-DEFINE_STRING_TABLE_LOOKUP(architecture, int);
+DEFINE_STRING_TABLE_LOOKUP(architecture, Architecture);
diff --git a/src/basic/architecture.h b/src/basic/architecture.h
index 9abc183..096526a 100644
--- a/src/basic/architecture.h
+++ b/src/basic/architecture.h
@@ -4,51 +4,50 @@
 #include <endian.h>
 
 #include "macro.h"
-#include "util.h"
 
 /* A cleaned up architecture definition. We don't want to get lost in
  * processor features, models, generations or even ABIs. Hence we
- * focus on general family, and distinguish word width and
- * endianness. */
+ * focus on general family, and distinguish word width and endianness. */
 
-enum {
-        ARCHITECTURE_X86 = 0,
-        ARCHITECTURE_X86_64,
-        ARCHITECTURE_PPC,
-        ARCHITECTURE_PPC_LE,
-        ARCHITECTURE_PPC64,
-        ARCHITECTURE_PPC64_LE,
-        ARCHITECTURE_IA64,
-        ARCHITECTURE_PARISC,
-        ARCHITECTURE_PARISC64,
-        ARCHITECTURE_S390,
-        ARCHITECTURE_S390X,
-        ARCHITECTURE_SPARC,
-        ARCHITECTURE_SPARC64,
-        ARCHITECTURE_MIPS,
-        ARCHITECTURE_MIPS_LE,
-        ARCHITECTURE_MIPS64,
-        ARCHITECTURE_MIPS64_LE,
+typedef enum {
         ARCHITECTURE_ALPHA,
-        ARCHITECTURE_ARM,
-        ARCHITECTURE_ARM_BE,
-        ARCHITECTURE_ARM64,
-        ARCHITECTURE_ARM64_BE,
-        ARCHITECTURE_SH,
-        ARCHITECTURE_SH64,
-        ARCHITECTURE_M68K,
-        ARCHITECTURE_TILEGX,
-        ARCHITECTURE_CRIS,
-        ARCHITECTURE_NIOS2,
-        ARCHITECTURE_RISCV32,
-        ARCHITECTURE_RISCV64,
         ARCHITECTURE_ARC,
         ARCHITECTURE_ARC_BE,
+        ARCHITECTURE_ARM,
+        ARCHITECTURE_ARM64,
+        ARCHITECTURE_ARM64_BE,
+        ARCHITECTURE_ARM_BE,
+        ARCHITECTURE_CRIS,
+        ARCHITECTURE_IA64,
+        ARCHITECTURE_LOONGARCH64,
+        ARCHITECTURE_M68K,
+        ARCHITECTURE_MIPS,
+        ARCHITECTURE_MIPS64,
+        ARCHITECTURE_MIPS64_LE,
+        ARCHITECTURE_MIPS_LE,
+        ARCHITECTURE_NIOS2,
+        ARCHITECTURE_PARISC,
+        ARCHITECTURE_PARISC64,
+        ARCHITECTURE_PPC,
+        ARCHITECTURE_PPC64,
+        ARCHITECTURE_PPC64_LE,
+        ARCHITECTURE_PPC_LE,
+        ARCHITECTURE_RISCV32,
+        ARCHITECTURE_RISCV64,
+        ARCHITECTURE_S390,
+        ARCHITECTURE_S390X,
+        ARCHITECTURE_SH,
+        ARCHITECTURE_SH64,
+        ARCHITECTURE_SPARC,
+        ARCHITECTURE_SPARC64,
+        ARCHITECTURE_TILEGX,
+        ARCHITECTURE_X86,
+        ARCHITECTURE_X86_64,
         _ARCHITECTURE_MAX,
         _ARCHITECTURE_INVALID = -EINVAL,
-};
+} Architecture;
 
-int uname_architecture(void);
+Architecture uname_architecture(void);
 
 /*
  * LIB_ARCH_TUPLE should resolve to the local library path
@@ -68,7 +67,7 @@
 #  else
 #    define LIB_ARCH_TUPLE "x86_64-linux-gnu"
 #  endif
-#  define SECONDARY_ARCHITECTURE ARCHITECTURE_X86
+#  define ARCHITECTURE_SECONDARY ARCHITECTURE_X86
 #elif defined(__i386__)
 #  define native_architecture() ARCHITECTURE_X86
 #  define LIB_ARCH_TUPLE "i386-linux-gnu"
@@ -76,11 +75,11 @@
 #  if __BYTE_ORDER == __BIG_ENDIAN
 #    define native_architecture() ARCHITECTURE_PPC64
 #    define LIB_ARCH_TUPLE "ppc64-linux-gnu"
-#    define SECONDARY_ARCHITECTURE ARCHITECTURE_PPC
+#    define ARCHITECTURE_SECONDARY ARCHITECTURE_PPC
 #  else
 #    define native_architecture() ARCHITECTURE_PPC64_LE
 #    define LIB_ARCH_TUPLE  "powerpc64le-linux-gnu"
-#    define SECONDARY_ARCHITECTURE ARCHITECTURE_PPC_LE
+#    define ARCHITECTURE_SECONDARY ARCHITECTURE_PPC_LE
 #  endif
 #elif defined(__powerpc__)
 #  if __BYTE_ORDER == __BIG_ENDIAN
@@ -106,7 +105,7 @@
 #elif defined(__s390x__)
 #  define native_architecture() ARCHITECTURE_S390X
 #  define LIB_ARCH_TUPLE "s390x-linux-gnu"
-#  define SECONDARY_ARCHITECTURE ARCHITECTURE_S390
+#  define ARCHITECTURE_SECONDARY ARCHITECTURE_S390
 #elif defined(__s390__)
 #  define native_architecture() ARCHITECTURE_S390
 #  define LIB_ARCH_TUPLE "s390-linux-gnu"
@@ -150,7 +149,7 @@
 #  else
 #    define native_architecture() ARCHITECTURE_ARM64
 #    define LIB_ARCH_TUPLE "aarch64-linux-gnu"
-#    define SECONDARY_ARCHITECTURE ARCHITECTURE_ARM
+#    define ARCHITECTURE_SECONDARY ARCHITECTURE_ARM
 #  endif
 #elif defined(__arm__)
 #  if __BYTE_ORDER == __BIG_ENDIAN
@@ -198,6 +197,17 @@
 #  elif defined(__SH4A__)
 #    define LIB_ARCH_TUPLE "sh4a-linux-gnu"
 #  endif
+#elif defined(__loongarch64)
+#  define native_architecture() ARCHITECTURE_LOONGARCH64
+#  if defined(__loongarch_double_float)
+#    define LIB_ARCH_TUPLE "loongarch64-linux-gnuf64"
+#  elif defined(__loongarch_single_float)
+#    define LIB_ARCH_TUPLE "loongarch64-linux-gnuf32"
+#  elif defined(__loongarch_soft_float)
+#    define LIB_ARCH_TUPLE "loongarch64-linux-gnusf"
+#  else
+#    error "Unrecognized loongarch architecture variant"
+#  endif
 #elif defined(__m68k__)
 #  define native_architecture() ARCHITECTURE_M68K
 #  define LIB_ARCH_TUPLE "m68k-linux-gnu"
@@ -210,8 +220,7 @@
 #elif defined(__nios2__)
 #  define native_architecture() ARCHITECTURE_NIOS2
 #  define LIB_ARCH_TUPLE "nios2-linux-gnu"
-#elif defined(__riscv__) || defined(__riscv)
-        /* __riscv__ is obsolete, remove in 2018 */
+#elif defined(__riscv)
 #  if __SIZEOF_POINTER__ == 4
 #    define native_architecture() ARCHITECTURE_RISCV32
 #    define LIB_ARCH_TUPLE "riscv32-linux-gnu"
@@ -233,5 +242,5 @@
 #  error "Please register your architecture here!"
 #endif
 
-const char *architecture_to_string(int a) _const_;
-int architecture_from_string(const char *s) _pure_;
+const char *architecture_to_string(Architecture a) _const_;
+Architecture architecture_from_string(const char *s) _pure_;
diff --git a/src/basic/argv-util.c b/src/basic/argv-util.c
new file mode 100644
index 0000000..6c88dcc
--- /dev/null
+++ b/src/basic/argv-util.c
@@ -0,0 +1,227 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sched.h>
+#include <sys/mman.h>
+#include <sys/prctl.h>
+#include <unistd.h>
+
+#include "argv-util.h"
+#include "capability-util.h"
+#include "errno-util.h"
+#include "missing_sched.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "process-util.h"
+#include "string-util.h"
+#include "strv.h"
+
+int saved_argc = 0;
+char **saved_argv = NULL;
+
+bool invoked_as(char *argv[], const char *token) {
+        if (!argv || isempty(argv[0]))
+                return false;
+
+        if (isempty(token))
+                return false;
+
+        return strstr(last_path_component(argv[0]), token);
+}
+
+bool invoked_by_systemd(void) {
+        int r;
+
+        /* If the process is directly executed by PID1 (e.g. ExecStart= or generator), systemd-importd,
+         * or systemd-homed, then $SYSTEMD_EXEC_PID= is set, and read the command line. */
+        const char *e = getenv("SYSTEMD_EXEC_PID");
+        if (!e)
+                return false;
+
+        if (streq(e, "*"))
+                /* For testing. */
+                return true;
+
+        pid_t p;
+        r = parse_pid(e, &p);
+        if (r < 0) {
+                /* We know that systemd sets the variable correctly. Something else must have set it. */
+                log_debug_errno(r, "Failed to parse \"SYSTEMD_EXEC_PID=%s\", ignoring: %m", e);
+                return false;
+        }
+
+        return getpid_cached() == p;
+}
+
+bool argv_looks_like_help(int argc, char **argv) {
+        char **l;
+
+        /* Scans the command line for indications the user asks for help. This is supposed to be called by
+         * tools that do not implement getopt() style command line parsing because they are not primarily
+         * user-facing. Detects four ways of asking for help:
+         *
+         * 1. Passing zero arguments
+         * 2. Passing "help" as first argument
+         * 3. Passing --help as any argument
+         * 4. Passing -h as any argument
+         */
+
+        if (argc <= 1)
+                return true;
+
+        if (streq_ptr(argv[1], "help"))
+                return true;
+
+        l = strv_skip(argv, 1);
+
+        return strv_contains(l, "--help") ||
+                strv_contains(l, "-h");
+}
+
+static int update_argv(const char name[], size_t l) {
+        static int can_do = -1;
+        int r;
+
+        if (can_do == 0)
+                return 0;
+        can_do = false; /* We'll set it to true only if the whole process works */
+
+        /* Calling prctl() with PR_SET_MM_ARG_{START,END} requires CAP_SYS_RESOURCE so let's use this as quick bypass
+         * check, to avoid calling mmap() should PR_SET_MM_ARG_{START,END} fail with EPERM later on anyway. */
+        r = have_effective_cap(CAP_SYS_RESOURCE);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to check if we have enough privileges: %m");
+        if (r == 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EPERM),
+                                       "Skipping PR_SET_MM, as we don't have privileges.");
+
+        static size_t mm_size = 0;
+        static char *mm = NULL;
+
+        if (mm_size < l+1) {
+                size_t nn_size;
+                char *nn;
+
+                nn_size = PAGE_ALIGN(l+1);
+                nn = mmap(NULL, nn_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+                if (nn == MAP_FAILED)
+                        return log_debug_errno(errno, "mmap() failed: %m");
+
+                strncpy(nn, name, nn_size);
+
+                /* Now, let's tell the kernel about this new memory */
+                if (prctl(PR_SET_MM, PR_SET_MM_ARG_START, (unsigned long) nn, 0, 0) < 0) {
+                        if (ERRNO_IS_PRIVILEGE(errno))
+                                return log_debug_errno(errno, "PR_SET_MM_ARG_START failed: %m");
+
+                        /* HACK: prctl() API is kind of dumb on this point.  The existing end address may already be
+                         * below the desired start address, in which case the kernel may have kicked this back due
+                         * to a range-check failure (see linux/kernel/sys.c:validate_prctl_map() to see this in
+                         * action).  The proper solution would be to have a prctl() API that could set both start+end
+                         * simultaneously, or at least let us query the existing address to anticipate this condition
+                         * and respond accordingly.  For now, we can only guess at the cause of this failure and try
+                         * a workaround--which will briefly expand the arg space to something potentially huge before
+                         * resizing it to what we want. */
+                        log_debug_errno(errno, "PR_SET_MM_ARG_START failed, attempting PR_SET_MM_ARG_END hack: %m");
+
+                        if (prctl(PR_SET_MM, PR_SET_MM_ARG_END, (unsigned long) nn + l + 1, 0, 0) < 0) {
+                                r = log_debug_errno(errno, "PR_SET_MM_ARG_END hack failed, proceeding without: %m");
+                                (void) munmap(nn, nn_size);
+                                return r;
+                        }
+
+                        if (prctl(PR_SET_MM, PR_SET_MM_ARG_START, (unsigned long) nn, 0, 0) < 0)
+                                return log_debug_errno(errno, "PR_SET_MM_ARG_START still failed, proceeding without: %m");
+                } else {
+                        /* And update the end pointer to the new end, too. If this fails, we don't really know what
+                         * to do, it's pretty unlikely that we can rollback, hence we'll just accept the failure,
+                         * and continue. */
+                        if (prctl(PR_SET_MM, PR_SET_MM_ARG_END, (unsigned long) nn + l + 1, 0, 0) < 0)
+                                log_debug_errno(errno, "PR_SET_MM_ARG_END failed, proceeding without: %m");
+                }
+
+                if (mm)
+                        (void) munmap(mm, mm_size);
+
+                mm = nn;
+                mm_size = nn_size;
+        } else {
+                strncpy(mm, name, mm_size);
+
+                /* Update the end pointer, continuing regardless of any failure. */
+                if (prctl(PR_SET_MM, PR_SET_MM_ARG_END, (unsigned long) mm + l + 1, 0, 0) < 0)
+                        log_debug_errno(errno, "PR_SET_MM_ARG_END failed, proceeding without: %m");
+        }
+
+        can_do = true;
+        return 0;
+}
+
+int rename_process(const char name[]) {
+        bool truncated = false;
+
+        /* This is a like a poor man's setproctitle(). It changes the comm field, argv[0], and also the glibc's
+         * internally used name of the process. For the first one a limit of 16 chars applies; to the second one in
+         * many cases one of 10 (i.e. length of "/sbin/init") — however if we have CAP_SYS_RESOURCES it is unbounded;
+         * to the third one 7 (i.e. the length of "systemd". If you pass a longer string it will likely be
+         * truncated.
+         *
+         * Returns 0 if a name was set but truncated, > 0 if it was set but not truncated. */
+
+        if (isempty(name))
+                return -EINVAL; /* let's not confuse users unnecessarily with an empty name */
+
+        if (!is_main_thread())
+                return -EPERM; /* Let's not allow setting the process name from other threads than the main one, as we
+                                * cache things without locking, and we make assumptions that PR_SET_NAME sets the
+                                * process name that isn't correct on any other threads */
+
+        size_t l = strlen(name);
+
+        /* First step, change the comm field. The main thread's comm is identical to the process comm. This means we
+         * can use PR_SET_NAME, which sets the thread name for the calling thread. */
+        if (prctl(PR_SET_NAME, name) < 0)
+                log_debug_errno(errno, "PR_SET_NAME failed: %m");
+        if (l >= TASK_COMM_LEN) /* Linux userspace process names can be 15 chars at max */
+                truncated = true;
+
+        /* Second step, change glibc's ID of the process name. */
+        if (program_invocation_name) {
+                size_t k;
+
+                k = strlen(program_invocation_name);
+                strncpy(program_invocation_name, name, k);
+                if (l > k)
+                        truncated = true;
+
+                /* Also update the short name. */
+                char *p = strrchr(program_invocation_name, '/');
+                program_invocation_short_name = p ? p + 1 : program_invocation_name;
+        }
+
+        /* Third step, completely replace the argv[] array the kernel maintains for us. This requires privileges, but
+         * has the advantage that the argv[] array is exactly what we want it to be, and not filled up with zeros at
+         * the end. This is the best option for changing /proc/self/cmdline. */
+        (void) update_argv(name, l);
+
+        /* Fourth step: in all cases we'll also update the original argv[], so that our own code gets it right too if
+         * it still looks here */
+        if (saved_argc > 0) {
+                if (saved_argv[0]) {
+                        size_t k;
+
+                        k = strlen(saved_argv[0]);
+                        strncpy(saved_argv[0], name, k);
+                        if (l > k)
+                                truncated = true;
+                }
+
+                for (int i = 1; i < saved_argc; i++) {
+                        if (!saved_argv[i])
+                                break;
+
+                        memzero(saved_argv[i], strlen(saved_argv[i]));
+                }
+        }
+
+        return !truncated;
+}
diff --git a/src/basic/argv-util.h b/src/basic/argv-util.h
new file mode 100644
index 0000000..a20a951
--- /dev/null
+++ b/src/basic/argv-util.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+#include "macro.h"
+
+extern int saved_argc;
+extern char **saved_argv;
+
+static inline void save_argc_argv(int argc, char **argv) {
+        /* Protect against CVE-2021-4034 style attacks */
+        assert_se(argc > 0);
+        assert_se(argv);
+        assert_se(argv[0]);
+
+        saved_argc = argc;
+        saved_argv = argv;
+}
+
+bool invoked_as(char *argv[], const char *token);
+bool invoked_by_systemd(void);
+bool argv_looks_like_help(int argc, char **argv);
+
+int rename_process(const char name[]);
diff --git a/src/basic/arphrd-list.c b/src/basic/arphrd-list.c
deleted file mode 100644
index 99048d2..0000000
--- a/src/basic/arphrd-list.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <linux/if_arp.h>
-#include <string.h>
-
-#include "arphrd-list.h"
-#include "macro.h"
-
-static const struct arphrd_name* lookup_arphrd(register const char *str, register GPERF_LEN_TYPE len);
-
-#include "arphrd-from-name.h"
-#include "arphrd-to-name.h"
-
-int arphrd_from_name(const char *name) {
-        const struct arphrd_name *sc;
-
-        assert(name);
-
-        sc = lookup_arphrd(name, strlen(name));
-        if (!sc)
-                return -EINVAL;
-
-        return sc->id;
-}
diff --git a/src/basic/arphrd-list.h b/src/basic/arphrd-list.h
deleted file mode 100644
index bc95b45..0000000
--- a/src/basic/arphrd-list.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-const char *arphrd_to_name(int id);
-int arphrd_from_name(const char *name);
diff --git a/src/basic/arphrd-to-name.awk b/src/basic/arphrd-to-name.awk
index d25a4e9..302504b 100644
--- a/src/basic/arphrd-to-name.awk
+++ b/src/basic/arphrd-to-name.awk
@@ -2,7 +2,7 @@
 
 BEGIN{
         print "const char *arphrd_to_name(int id) {"
-        print "        switch(id) {"
+        print "        switch (id) {"
 }
 !/^HDLC$/ {
         printf "        case ARPHRD_%s: return \"%s\";\n", $1, $1
diff --git a/src/basic/arphrd-util.c b/src/basic/arphrd-util.c
new file mode 100644
index 0000000..3ea2c9d
--- /dev/null
+++ b/src/basic/arphrd-util.c
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
+#include <linux/if_infiniband.h>
+#include <string.h>
+
+#include "arphrd-util.h"
+#include "macro.h"
+
+static const struct arphrd_name* lookup_arphrd(register const char *str, register GPERF_LEN_TYPE len);
+
+#include "arphrd-from-name.h"
+#include "arphrd-to-name.h"
+
+int arphrd_from_name(const char *name) {
+        const struct arphrd_name *sc;
+
+        assert(name);
+
+        sc = lookup_arphrd(name, strlen(name));
+        if (!sc)
+                return -EINVAL;
+
+        return sc->id;
+}
+
+size_t arphrd_to_hw_addr_len(uint16_t arphrd) {
+        switch (arphrd) {
+        case ARPHRD_ETHER:
+                return ETH_ALEN;
+        case ARPHRD_INFINIBAND:
+                return INFINIBAND_ALEN;
+        case ARPHRD_TUNNEL:
+        case ARPHRD_SIT:
+        case ARPHRD_IPGRE:
+                return sizeof(struct in_addr);
+        case ARPHRD_TUNNEL6:
+        case ARPHRD_IP6GRE:
+                return sizeof(struct in6_addr);
+        default:
+                return 0;
+        }
+}
diff --git a/src/basic/arphrd-util.h b/src/basic/arphrd-util.h
new file mode 100644
index 0000000..33f5694
--- /dev/null
+++ b/src/basic/arphrd-util.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stddef.h>
+
+const char *arphrd_to_name(int id);
+int arphrd_from_name(const char *name);
+
+size_t arphrd_to_hw_addr_len(uint16_t arphrd);
diff --git a/src/basic/async.c b/src/basic/async.c
index 443cfa9..73de889 100644
--- a/src/basic/async.c
+++ b/src/basic/async.c
@@ -12,7 +12,6 @@
 #include "macro.h"
 #include "process-util.h"
 #include "signal-util.h"
-#include "util.h"
 
 int asynchronous_job(void* (*func)(void *p), void *arg) {
         sigset_t ss, saved_ss;
@@ -104,5 +103,5 @@
                          assert_se(close_nointr(fd) != -EBADF);
         }
 
-        return -1;
+        return -EBADF;
 }
diff --git a/src/basic/build.c b/src/basic/build.c
index 4507459..c587ada 100644
--- a/src/basic/build.c
+++ b/src/basic/build.c
@@ -1,6 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <stdio.h>
+
+#include "alloc-util.h"
 #include "build.h"
+#include "extract-word.h"
+#include "macro.h"
+#include "string-util.h"
+#include "terminal-util.h"
+#include "version.h"
 
 const char* const systemd_features =
 
@@ -48,7 +56,7 @@
         " -SECCOMP"
 #endif
 
-        /* crypto libraries */
+        /* cryptographic libraries */
 
 #if HAVE_GCRYPT
         " +GCRYPT"
@@ -160,6 +168,12 @@
         " -QRENCODE"
 #endif
 
+#if HAVE_TPM2
+        " +TPM2"
+#else
+        " -TPM2"
+#endif
+
         /* compressors */
 
 #if HAVE_BZIP2
@@ -194,6 +208,12 @@
 
         /* other stuff that doesn't fit above */
 
+#if BPF_FRAMEWORK
+        " +BPF_FRAMEWORK"
+#else
+        " -BPF_FRAMEWORK"
+#endif
+
 #if HAVE_XKBCOMMON
         " +XKBCOMMON"
 #else
@@ -214,3 +234,50 @@
 
         " default-hierarchy=" DEFAULT_HIERARCHY_NAME
         ;
+
+static char *systemd_features_with_color(void) {
+        const char *p = systemd_features;
+        _cleanup_free_ char *ret = NULL;
+        int r;
+
+        for (;;) {
+                _cleanup_free_ char *word = NULL;
+                char *q;
+
+                r = extract_first_word(&p, &word, NULL, 0);
+                if (r < 0) {
+                        log_warning_errno(r, "Cannot split features string, ignoring: %m");
+                        return NULL;
+                }
+                if (r == 0)
+                        return TAKE_PTR(ret);
+
+                if (ret && !strextend(&ret, " ")) {
+                        log_oom_warning();
+                        return NULL;
+                }
+
+                if (word[0] == '+')
+                        q = strextend(&ret, ANSI_HIGHLIGHT_GREEN, CHAR_TO_STR(word[0]), ANSI_GREEN, word+1, ANSI_NORMAL);
+                else if (word[0] == '-')
+                        q = strextend(&ret, ANSI_HIGHLIGHT_RED, CHAR_TO_STR(word[0]), ANSI_RED, word+1, ANSI_NORMAL);
+                else
+                        q = strextend(&ret, word);
+                if (!q) {
+                        log_oom_warning();
+                        return NULL;
+                }
+        }
+}
+
+int version(void) {
+        _cleanup_free_ char *b = NULL;
+
+        if (colors_enabled())
+                b = systemd_features_with_color();
+
+        printf("%ssystemd " STRINGIFY(PROJECT_VERSION) "%s (" GIT_VERSION ")\n%s\n",
+               ansi_highlight(), ansi_normal(),
+               b ?: systemd_features);
+        return 0;
+}
diff --git a/src/basic/build.h b/src/basic/build.h
index 934626c..052ff75 100644
--- a/src/basic/build.h
+++ b/src/basic/build.h
@@ -6,3 +6,5 @@
 #endif // GOOGLE3_BLAZE_BUILD
 
 extern const char* const systemd_features;
+
+int version(void);
diff --git a/src/basic/bus-label.c b/src/basic/bus-label.c
index cd6c58a..d33fc92 100644
--- a/src/basic/bus-label.c
+++ b/src/basic/bus-label.c
@@ -26,12 +26,10 @@
 
         for (f = s, t = r; *f; f++) {
 
-                /* Escape everything that is not a-zA-Z0-9. We also
-                 * escape 0-9 if it's the first character */
+                /* Escape everything that is not a-zA-Z0-9. We also escape 0-9 if it's the first character */
 
-                if (!(*f >= 'A' && *f <= 'Z') &&
-                    !(*f >= 'a' && *f <= 'z') &&
-                    !(f > s && *f >= '0' && *f <= '9')) {
+                if (!ascii_isalpha(*f) &&
+                    !(f > s && ascii_isdigit(*f))) {
                         *(t++) = '_';
                         *(t++) = hexchar(*f >> 4);
                         *(t++) = hexchar(*f);
diff --git a/src/basic/cap-list.c b/src/basic/cap-list.c
index fdc7948..fb1ad14 100644
--- a/src/basic/cap-list.c
+++ b/src/basic/cap-list.c
@@ -10,7 +10,6 @@
 #include "macro.h"
 #include "parse-util.h"
 #include "stdio-util.h"
-#include "util.h"
 
 static const struct capability_name* lookup_capability(register const char *str, register GPERF_LEN_TYPE len);
 
diff --git a/src/basic/capability-util.c b/src/basic/capability-util.c
index b31a9cb..5dd4c1d 100644
--- a/src/basic/capability-util.c
+++ b/src/basic/capability-util.c
@@ -11,11 +11,12 @@
 #include "cap-list.h"
 #include "fileio.h"
 #include "log.h"
+#include "logarithm.h"
 #include "macro.h"
 #include "missing_prctl.h"
+#include "missing_threads.h"
 #include "parse-util.h"
 #include "user-util.h"
-#include "util.h"
 
 int have_effective_cap(int value) {
         _cleanup_cap_free_ cap_t cap = NULL;
@@ -336,7 +337,7 @@
 
         /* Now upgrade the permitted caps we still kept to effective caps */
         if (keep_capabilities != 0) {
-                cap_value_t bits[u64log2(keep_capabilities) + 1];
+                cap_value_t bits[log2u64(keep_capabilities) + 1];
                 _cleanup_cap_free_ cap_t d = NULL;
                 unsigned i, j = 0;
 
diff --git a/src/basic/capability-util.h b/src/basic/capability-util.h
index dbce545..4d1b052 100644
--- a/src/basic/capability-util.h
+++ b/src/basic/capability-util.h
@@ -8,7 +8,6 @@
 
 #include "macro.h"
 #include "missing_capability.h"
-#include "util.h"
 
 #define CAP_ALL UINT64_MAX
 
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
index 1ff6160..90877c9 100644
--- a/src/basic/cgroup-util.c
+++ b/src/basic/cgroup-util.c
@@ -1,7 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
-#include <ftw.h>
 #include <limits.h>
 #include <signal.h>
 #include <stddef.h>
@@ -13,7 +12,7 @@
 
 #include "alloc-util.h"
 #include "cgroup-util.h"
-#include "def.h"
+#include "constants.h"
 #include "dirent-util.h"
 #include "extract-word.h"
 #include "fd-util.h"
@@ -24,6 +23,7 @@
 #include "login-util.h"
 #include "macro.h"
 #include "missing_magic.h"
+#include "missing_threads.h"
 #include "mkdir.h"
 #include "parse-util.h"
 #include "path-util.h"
@@ -160,6 +160,24 @@
         return supported;
 }
 
+bool cg_kill_supported(void) {
+        static thread_local int supported = -1;
+
+        if (supported >= 0)
+                return supported;
+
+        if (cg_all_unified() <= 0)
+                supported = false;
+        else if (access("/sys/fs/cgroup/init.scope/cgroup.kill", F_OK) < 0) {
+                if (errno != ENOENT)
+                        log_debug_errno(errno, "Failed to check if cgroup.kill is available, assuming not: %m");
+                supported = false;
+        } else
+                supported = true;
+
+        return supported;
+}
+
 int cg_enumerate_subgroups(const char *controller, const char *path, DIR **_d) {
         _cleanup_free_ char *fs = NULL;
         int r;
@@ -182,8 +200,6 @@
 }
 
 int cg_read_subgroup(DIR *d, char **fn) {
-        struct dirent *de;
-
         assert(d);
         assert(fn);
 
@@ -342,20 +358,52 @@
                 Set *s,
                 cg_kill_log_func_t log_kill,
                 void *userdata) {
-        int r;
+
+        int r, ret;
 
         r = cg_kill_items(controller, path, sig, flags, s, log_kill, userdata, "cgroup.procs");
         if (r < 0 || sig != SIGKILL)
                 return r;
 
+        ret = r;
+
         /* Only in case of killing with SIGKILL and when using cgroupsv2, kill remaining threads manually as
            a workaround for kernel bug. It was fixed in 5.2-rc5 (c03cd7738a83), backported to 4.19.66
            (4340d175b898) and 4.14.138 (feb6b123b7dd). */
         r = cg_unified_controller(controller);
-        if (r <= 0)
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return ret;
+
+        r = cg_kill_items(controller, path, sig, flags, s, log_kill, userdata, "cgroup.threads");
+        if (r < 0)
                 return r;
 
-        return cg_kill_items(controller, path, sig, flags, s, log_kill, userdata, "cgroup.threads");
+        return r > 0 || ret > 0;
+}
+
+int cg_kill_kernel_sigkill(const char *controller, const char *path) {
+        /* Kills the cgroup at `path` directly by writing to its cgroup.kill file.
+         * This sends SIGKILL to all processes in the cgroup and has the advantage of
+         * being completely atomic, unlike cg_kill_items. */
+        int r;
+        _cleanup_free_ char *killfile = NULL;
+
+        assert(path);
+
+        if (!cg_kill_supported())
+                return -EOPNOTSUPP;
+
+        r = cg_get_path(controller, path, "cgroup.kill", &killfile);
+        if (r < 0)
+                return r;
+
+        r = write_string_file(killfile, "1", WRITE_STRING_FILE_DISABLE_BUFFER);
+        if (r < 0)
+                return r;
+
+        return 0;
 }
 
 int cg_kill_recursive(
@@ -375,38 +423,46 @@
         assert(path);
         assert(sig >= 0);
 
-        if (!s) {
-                s = allocated_set = set_new(NULL);
-                if (!s)
-                        return -ENOMEM;
-        }
+        if (sig == SIGKILL && cg_kill_supported() &&
+            !FLAGS_SET(flags, CGROUP_IGNORE_SELF) && !s && !log_kill) {
+                /* ignore CGROUP_SIGCONT, since this is a no-op alongside SIGKILL */
+                ret = cg_kill_kernel_sigkill(controller, path);
+                if (ret < 0)
+                        return ret;
+        } else {
+                if (!s) {
+                        s = allocated_set = set_new(NULL);
+                        if (!s)
+                                return -ENOMEM;
+                }
 
-        ret = cg_kill(controller, path, sig, flags, s, log_kill, userdata);
+                ret = cg_kill(controller, path, sig, flags, s, log_kill, userdata);
 
-        r = cg_enumerate_subgroups(controller, path, &d);
-        if (r < 0) {
-                if (ret >= 0 && r != -ENOENT)
-                        return r;
+                r = cg_enumerate_subgroups(controller, path, &d);
+                if (r < 0) {
+                        if (ret >= 0 && r != -ENOENT)
+                                return r;
 
-                return ret;
-        }
+                        return ret;
+                }
 
-        while ((r = cg_read_subgroup(d, &fn)) > 0) {
-                _cleanup_free_ char *p = NULL;
+                while ((r = cg_read_subgroup(d, &fn)) > 0) {
+                        _cleanup_free_ char *p = NULL;
 
-                p = path_join(empty_to_root(path), fn);
-                free(fn);
-                if (!p)
-                        return -ENOMEM;
+                        p = path_join(empty_to_root(path), fn);
+                        free(fn);
+                        if (!p)
+                                return -ENOMEM;
 
-                r = cg_kill_recursive(controller, p, sig, flags, s, log_kill, userdata);
-                if (r != 0 && ret >= 0)
+                        r = cg_kill_recursive(controller, p, sig, flags, s, log_kill, userdata);
+                        if (r != 0 && ret >= 0)
+                                ret = r;
+                }
+                if (ret >= 0 && r < 0)
                         ret = r;
         }
-        if (ret >= 0 && r < 0)
-                ret = r;
 
-        if (flags & CGROUP_REMOVE) {
+        if (FLAGS_SET(flags, CGROUP_REMOVE)) {
                 r = cg_rmdir(controller, path);
                 if (r < 0 && ret >= 0 && !IN_SET(r, -ENOENT, -EBUSY))
                         return r;
@@ -416,14 +472,11 @@
 }
 
 static const char *controller_to_dirname(const char *controller) {
-        const char *e;
-
         assert(controller);
 
-        /* Converts a controller name to the directory name below
-         * /sys/fs/cgroup/ we want to mount it to. Effectively, this
-         * just cuts off the name= prefixed used for named
-         * hierarchies, if it is specified. */
+        /* Converts a controller name to the directory name below /sys/fs/cgroup/ we want to mount it
+         * to. Effectively, this just cuts off the name= prefixed used for named hierarchies, if it is
+         * specified. */
 
         if (streq(controller, SYSTEMD_CGROUP_CONTROLLER)) {
                 if (cg_hybrid_unified() > 0)
@@ -432,18 +485,14 @@
                         controller = SYSTEMD_CGROUP_CONTROLLER_LEGACY;
         }
 
-        e = startswith(controller, "name=");
-        if (e)
-                return e;
-
-        return controller;
+        return startswith(controller, "name=") ?: controller;
 }
 
-static int join_path_legacy(const char *controller, const char *path, const char *suffix, char **fs) {
+static int join_path_legacy(const char *controller, const char *path, const char *suffix, char **ret) {
         const char *dn;
         char *t = NULL;
 
-        assert(fs);
+        assert(ret);
         assert(controller);
 
         dn = controller_to_dirname(controller);
@@ -459,14 +508,14 @@
         if (!t)
                 return -ENOMEM;
 
-        *fs = t;
+        *ret = t;
         return 0;
 }
 
-static int join_path_unified(const char *path, const char *suffix, char **fs) {
+static int join_path_unified(const char *path, const char *suffix, char **ret) {
         char *t;
 
-        assert(fs);
+        assert(ret);
 
         if (isempty(path) && isempty(suffix))
                 t = strdup("/sys/fs/cgroup");
@@ -479,34 +528,34 @@
         if (!t)
                 return -ENOMEM;
 
-        *fs = t;
+        *ret = t;
         return 0;
 }
 
-int cg_get_path(const char *controller, const char *path, const char *suffix, char **fs) {
+int cg_get_path(const char *controller, const char *path, const char *suffix, char **ret) {
         int r;
 
-        assert(fs);
+        assert(ret);
 
         if (!controller) {
                 char *t;
 
-                /* If no controller is specified, we return the path
-                 * *below* the controllers, without any prefix. */
+                /* If no controller is specified, we return the path *below* the controllers, without any
+                 * prefix. */
 
-                if (!path && !suffix)
+                if (isempty(path) && isempty(suffix))
                         return -EINVAL;
 
-                if (!suffix)
+                if (isempty(suffix))
                         t = strdup(path);
-                else if (!path)
+                else if (isempty(path))
                         t = strdup(suffix);
                 else
                         t = path_join(path, suffix);
                 if (!t)
                         return -ENOMEM;
 
-                *fs = path_simplify(t);
+                *ret = path_simplify(t);
                 return 0;
         }
 
@@ -517,13 +566,13 @@
         if (r < 0)
                 return r;
         if (r > 0)
-                r = join_path_unified(path, suffix, fs);
+                r = join_path_unified(path, suffix, ret);
         else
-                r = join_path_legacy(controller, path, suffix, fs);
+                r = join_path_legacy(controller, path, suffix, ret);
         if (r < 0)
                 return r;
 
-        path_simplify(*fs);
+        path_simplify(*ret);
         return 0;
 }
 
@@ -539,10 +588,7 @@
          * - we can modify the hierarchy. */
 
         cpath = strjoina("/sys/fs/cgroup/", dn, root, root ? "/cgroup.procs" : NULL);
-        if (laccess(cpath, root ? W_OK : F_OK) < 0)
-                return -errno;
-
-        return 0;
+        return laccess(cpath, root ? W_OK : F_OK);
 }
 
 int cg_get_path_and_check(const char *controller, const char *path, const char *suffix, char **fs) {
@@ -584,10 +630,7 @@
         if (r < 0)
                 return r;
 
-        if (setxattr(fs, name, value, size, flags) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(setxattr(fs, name, value, size, flags));
 }
 
 int cg_get_xattr(const char *controller, const char *path, const char *name, void *value, size_t size) {
@@ -620,7 +663,7 @@
         if (r < 0)
                 return r;
 
-        r = getxattr_malloc(fs, name, ret, false);
+        r = lgetxattr_malloc(fs, name, ret);
         if (r < 0)
                 return r;
 
@@ -652,10 +695,7 @@
         if (r < 0)
                 return r;
 
-        if (removexattr(fs, name) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(removexattr(fs, name));
 }
 
 int cg_pid_get_path(const char *controller, pid_t pid, char **ret_path) {
@@ -1083,7 +1123,7 @@
         if (n < 3)
                 return -ENXIO;
 
-        c = strndupa(cgroup, n);
+        c = strndupa_safe(cgroup, n);
         c = cg_unescape(c);
 
         if (!unit_name_is_valid(c, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE))
@@ -1159,6 +1199,28 @@
         return 0;
 }
 
+int cg_path_get_unit_path(const char *path, char **ret) {
+        _cleanup_free_ char *path_copy = NULL;
+        char *unit_name;
+
+        assert(path);
+        assert(ret);
+
+        path_copy = strdup(path);
+        if (!path_copy)
+                return -ENOMEM;
+
+        unit_name = (char *)skip_slices(path_copy);
+        unit_name[strcspn(unit_name, "/")] = 0;
+
+        if (!unit_name_is_valid(cg_unescape(unit_name), UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE))
+                return -ENXIO;
+
+        *ret = TAKE_PTR(path_copy);
+
+        return 0;
+}
+
 int cg_pid_get_unit(pid_t pid, char **unit) {
         _cleanup_free_ char *cgroup = NULL;
         int r;
@@ -1199,7 +1261,7 @@
                  * here. */
 
                 if (!session_id_valid(buf))
-                        return false;
+                        return NULL;
 
                 p += n;
                 p += strspn(p, "/");
@@ -1318,6 +1380,22 @@
         return cg_path_get_machine_name(cgroup, machine);
 }
 
+int cg_path_get_cgroupid(const char *path, uint64_t *ret) {
+        cg_file_handle fh = CG_FILE_HANDLE_INIT;
+        int mnt_id = -1;
+
+        assert(path);
+        assert(ret);
+
+        /* This is cgroupfs so we know the size of the handle, thus no need to loop around like
+         * name_to_handle_at_loop() does in mountpoint-util.c */
+        if (name_to_handle_at(AT_FDCWD, path, &fh.file_handle, &mnt_id, 0) < 0)
+                return -errno;
+
+        *ret = CG_FILE_HANDLE_CGROUPID(fh);
+        return 0;
+}
+
 int cg_path_get_session(const char *path, char **session) {
         _cleanup_free_ char *unit = NULL;
         char *start, *end;
@@ -1642,6 +1720,30 @@
         return 0;
 }
 
+int cg_is_threaded(const char *controller, const char *path) {
+        _cleanup_free_ char *fs = NULL, *contents = NULL;
+        _cleanup_strv_free_ char **v = NULL;
+        int r;
+
+        r = cg_get_path(controller, path, "cgroup.type", &fs);
+        if (r < 0)
+                return r;
+
+        r = read_full_virtual_file(fs, &contents, NULL);
+        if (r == -ENOENT)
+                return false; /* Assume no. */
+        if (r < 0)
+                return r;
+
+        v = strv_split(contents, NULL);
+        if (!v)
+                return -ENOMEM;
+
+        /* If the cgroup is in the threaded mode, it contains "threaded".
+         * If one of the parents or siblings is in the threaded mode, it may contain "invalid". */
+        return strv_contains(v, "threaded") || strv_contains(v, "invalid");
+}
+
 int cg_set_attribute(const char *controller, const char *path, const char *attribute, const char *value) {
         _cleanup_free_ char *p = NULL;
         int r;
@@ -1952,7 +2054,7 @@
 }
 
 int cg_kernel_controllers(Set **ret) {
-        _cleanup_set_free_free_ Set *controllers = NULL;
+        _cleanup_set_free_ Set *controllers = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         int r;
 
@@ -1962,10 +2064,6 @@
          * and controllers that aren't currently accessible (because not mounted). This does not include "name="
          * pseudo-controllers. */
 
-        controllers = set_new(&string_hash_ops);
-        if (!controllers)
-                return -ENOMEM;
-
         r = fopen_unlocked("/proc/cgroups", "re", &f);
         if (r == -ENOENT) {
                 *ret = NULL;
@@ -1978,7 +2076,7 @@
         (void) read_line(f, SIZE_MAX, NULL);
 
         for (;;) {
-                char *controller;
+                _cleanup_free_ char *controller = NULL;
                 int enabled = 0;
 
                 errno = 0;
@@ -1993,17 +2091,13 @@
                         return -EBADMSG;
                 }
 
-                if (!enabled) {
-                        free(controller);
+                if (!enabled)
                         continue;
-                }
 
-                if (!cg_controller_is_valid(controller)) {
-                        free(controller);
+                if (!cg_controller_is_valid(controller))
                         return -EBADMSG;
-                }
 
-                r = set_consume(controllers, controller);
+                r = set_ensure_consume(&controllers, &string_hash_ops_free, TAKE_PTR(controller));
                 if (r < 0)
                         return r;
         }
@@ -2165,6 +2259,7 @@
         [CGROUP_CONTROLLER_BPF_DEVICES] = "bpf-devices",
         [CGROUP_CONTROLLER_BPF_FOREIGN] = "bpf-foreign",
         [CGROUP_CONTROLLER_BPF_SOCKET_BIND] = "bpf-socket-bind",
+        [CGROUP_CONTROLLER_BPF_RESTRICT_NETWORK_INTERFACES] = "bpf-restrict-network-interfaces",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(cgroup_controller, CGroupController);
diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h
index ce2f4c6..b69f168 100644
--- a/src/basic/cgroup-util.h
+++ b/src/basic/cgroup-util.h
@@ -2,13 +2,14 @@
 #pragma once
 
 #include <dirent.h>
+#include <fcntl.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <sys/statfs.h>
 #include <sys/types.h>
 
-#include "def.h"
+#include "constants.h"
 #include "set.h"
 
 #define SYSTEMD_CGROUP_CONTROLLER_LEGACY "name=systemd"
@@ -32,6 +33,10 @@
         CGROUP_CONTROLLER_BPF_DEVICES,
         CGROUP_CONTROLLER_BPF_FOREIGN,
         CGROUP_CONTROLLER_BPF_SOCKET_BIND,
+        CGROUP_CONTROLLER_BPF_RESTRICT_NETWORK_INTERFACES,
+        /* The BPF hook implementing RestrictFileSystems= is not defined here.
+         * It's applied as late as possible in exec_child() so we don't block
+         * our own unit setup code. */
 
         _CGROUP_CONTROLLER_MAX,
         _CGROUP_CONTROLLER_INVALID = -EINVAL,
@@ -53,6 +58,7 @@
         CGROUP_MASK_BPF_DEVICES = CGROUP_CONTROLLER_TO_MASK(CGROUP_CONTROLLER_BPF_DEVICES),
         CGROUP_MASK_BPF_FOREIGN = CGROUP_CONTROLLER_TO_MASK(CGROUP_CONTROLLER_BPF_FOREIGN),
         CGROUP_MASK_BPF_SOCKET_BIND = CGROUP_CONTROLLER_TO_MASK(CGROUP_CONTROLLER_BPF_SOCKET_BIND),
+        CGROUP_MASK_BPF_RESTRICT_NETWORK_INTERFACES = CGROUP_CONTROLLER_TO_MASK(CGROUP_CONTROLLER_BPF_RESTRICT_NETWORK_INTERFACES),
 
         /* All real cgroup v1 controllers */
         CGROUP_MASK_V1 = CGROUP_MASK_CPU|CGROUP_MASK_CPUACCT|CGROUP_MASK_BLKIO|CGROUP_MASK_MEMORY|CGROUP_MASK_DEVICES|CGROUP_MASK_PIDS,
@@ -61,7 +67,7 @@
         CGROUP_MASK_V2 = CGROUP_MASK_CPU|CGROUP_MASK_CPUSET|CGROUP_MASK_IO|CGROUP_MASK_MEMORY|CGROUP_MASK_PIDS,
 
         /* All cgroup v2 BPF pseudo-controllers */
-        CGROUP_MASK_BPF = CGROUP_MASK_BPF_FIREWALL|CGROUP_MASK_BPF_DEVICES|CGROUP_MASK_BPF_FOREIGN|CGROUP_MASK_BPF_SOCKET_BIND,
+        CGROUP_MASK_BPF = CGROUP_MASK_BPF_FIREWALL|CGROUP_MASK_BPF_DEVICES|CGROUP_MASK_BPF_FOREIGN|CGROUP_MASK_BPF_SOCKET_BIND|CGROUP_MASK_BPF_RESTRICT_NETWORK_INTERFACES,
 
         _CGROUP_MASK_ALL = CGROUP_CONTROLLER_TO_MASK(_CGROUP_CONTROLLER_MAX) - 1
 } CGroupMask;
@@ -80,6 +86,7 @@
 
 /* Special values for all weight knobs on unified hierarchy */
 #define CGROUP_WEIGHT_INVALID UINT64_MAX
+#define CGROUP_WEIGHT_IDLE UINT64_C(0)
 #define CGROUP_WEIGHT_MIN UINT64_C(1)
 #define CGROUP_WEIGHT_MAX UINT64_C(10000)
 #define CGROUP_WEIGHT_DEFAULT UINT64_C(100)
@@ -121,6 +128,20 @@
             (x >= CGROUP_CPU_SHARES_MIN && x <= CGROUP_CPU_SHARES_MAX);
 }
 
+/* Special values for the special {blkio,io}.bfq.weight attribute */
+#define CGROUP_BFQ_WEIGHT_INVALID UINT64_MAX
+#define CGROUP_BFQ_WEIGHT_MIN UINT64_C(1)
+#define CGROUP_BFQ_WEIGHT_MAX UINT64_C(1000)
+#define CGROUP_BFQ_WEIGHT_DEFAULT UINT64_C(100)
+
+/* Convert the normal io.weight value to io.bfq.weight */
+static inline uint64_t BFQ_WEIGHT(uint64_t io_weight) {
+        return
+            io_weight <= CGROUP_WEIGHT_DEFAULT ?
+            CGROUP_BFQ_WEIGHT_DEFAULT - (CGROUP_WEIGHT_DEFAULT - io_weight) * (CGROUP_BFQ_WEIGHT_DEFAULT - CGROUP_BFQ_WEIGHT_MIN) / (CGROUP_WEIGHT_DEFAULT - CGROUP_WEIGHT_MIN) :
+            CGROUP_BFQ_WEIGHT_DEFAULT + (io_weight - CGROUP_WEIGHT_DEFAULT) * (CGROUP_BFQ_WEIGHT_MAX - CGROUP_BFQ_WEIGHT_DEFAULT) / (CGROUP_WEIGHT_MAX - CGROUP_WEIGHT_DEFAULT);
+}
+
 /* Special values for the blkio.weight attribute */
 #define CGROUP_BLKIO_WEIGHT_INVALID UINT64_MAX
 #define CGROUP_BLKIO_WEIGHT_MIN UINT64_C(10)
@@ -172,6 +193,7 @@
 typedef int (*cg_kill_log_func_t)(pid_t pid, int sig, void *userdata);
 
 int cg_kill(const char *controller, const char *path, int sig, CGroupFlags flags, Set *s, cg_kill_log_func_t kill_log, void *userdata);
+int cg_kill_kernel_sigkill(const char *controller, const char *path);
 int cg_kill_recursive(const char *controller, const char *path, int sig, CGroupFlags flags, Set *s, cg_kill_log_func_t kill_log, void *userdata);
 
 int cg_split_spec(const char *spec, char **ret_controller, char **ret_path);
@@ -184,6 +206,8 @@
 
 int cg_rmdir(const char *controller, const char *path);
 
+int cg_is_threaded(const char *controller, const char *path);
+
 typedef enum  {
         CG_KEY_MODE_GRACEFUL = 1 << 0,
 } CGroupKeyMode;
@@ -233,9 +257,11 @@
 
 int cg_get_root_path(char **path);
 
+int cg_path_get_cgroupid(const char *path, uint64_t *ret);
 int cg_path_get_session(const char *path, char **session);
 int cg_path_get_owner_uid(const char *path, uid_t *uid);
 int cg_path_get_unit(const char *path, char **unit);
+int cg_path_get_unit_path(const char *path, char **unit);
 int cg_path_get_user_unit(const char *path, char **unit);
 int cg_path_get_machine_name(const char *path, char **machine);
 int cg_path_get_slice(const char *path, char **slice);
@@ -272,6 +298,7 @@
 
 bool cg_ns_supported(void);
 bool cg_freezer_supported(void);
+bool cg_kill_supported(void);
 
 int cg_all_unified(void);
 int cg_hybrid_unified(void);
@@ -307,3 +334,12 @@
 
 const char* managed_oom_preference_to_string(ManagedOOMPreference a) _const_;
 ManagedOOMPreference managed_oom_preference_from_string(const char *s) _pure_;
+
+/* The structure to pass to name_to_handle_at() on cgroupfs2 */
+typedef union {
+        struct file_handle file_handle;
+        uint8_t space[offsetof(struct file_handle, f_handle) + sizeof(uint64_t)];
+} cg_file_handle;
+
+#define CG_FILE_HANDLE_INIT { .file_handle.handle_bytes = sizeof(uint64_t) }
+#define CG_FILE_HANDLE_CGROUPID(fh) (*(uint64_t*) (fh).file_handle.f_handle)
diff --git a/src/basic/chase-symlinks.c b/src/basic/chase-symlinks.c
new file mode 100644
index 0000000..af49812
--- /dev/null
+++ b/src/basic/chase-symlinks.c
@@ -0,0 +1,737 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/magic.h>
+
+#include "alloc-util.h"
+#include "chase-symlinks.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "fs-util.h"
+#include "glyph-util.h"
+#include "log.h"
+#include "path-util.h"
+#include "string-util.h"
+#include "user-util.h"
+
+bool unsafe_transition(const struct stat *a, const struct stat *b) {
+        /* Returns true if the transition from a to b is safe, i.e. that we never transition from unprivileged to
+         * privileged files or directories. Why bother? So that unprivileged code can't symlink to privileged files
+         * making us believe we read something safe even though it isn't safe in the specific context we open it in. */
+
+        if (a->st_uid == 0) /* Transitioning from privileged to unprivileged is always fine */
+                return false;
+
+        return a->st_uid != b->st_uid; /* Otherwise we need to stay within the same UID */
+}
+
+static int log_unsafe_transition(int a, int b, const char *path, ChaseSymlinksFlags flags) {
+        _cleanup_free_ char *n1 = NULL, *n2 = NULL, *user_a = NULL, *user_b = NULL;
+        struct stat st;
+
+        if (!FLAGS_SET(flags, CHASE_WARN))
+                return -ENOLINK;
+
+        (void) fd_get_path(a, &n1);
+        (void) fd_get_path(b, &n2);
+
+        if (fstat(a, &st) == 0)
+                user_a = uid_to_name(st.st_uid);
+        if (fstat(b, &st) == 0)
+                user_b = uid_to_name(st.st_uid);
+
+        return log_warning_errno(SYNTHETIC_ERRNO(ENOLINK),
+                                 "Detected unsafe path transition %s (owned by %s) %s %s (owned by %s) during canonicalization of %s.",
+                                 strna(n1), strna(user_a), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), strna(n2), strna(user_b), path);
+}
+
+static int log_autofs_mount_point(int fd, const char *path, ChaseSymlinksFlags flags) {
+        _cleanup_free_ char *n1 = NULL;
+
+        if (!FLAGS_SET(flags, CHASE_WARN))
+                return -EREMOTE;
+
+        (void) fd_get_path(fd, &n1);
+
+        return log_warning_errno(SYNTHETIC_ERRNO(EREMOTE),
+                                 "Detected autofs mount point %s during canonicalization of %s.",
+                                 strna(n1), path);
+}
+
+static int log_prohibited_symlink(int fd, ChaseSymlinksFlags flags) {
+        _cleanup_free_ char *n1 = NULL;
+
+        assert(fd >= 0);
+
+        if (!FLAGS_SET(flags, CHASE_WARN))
+                return -EREMCHG;
+
+        (void) fd_get_path(fd, &n1);
+
+        return log_warning_errno(SYNTHETIC_ERRNO(EREMCHG),
+                                 "Detected symlink where not symlink is allowed at %s, refusing.",
+                                 strna(n1));
+}
+
+int chase_symlinks_at(
+                int dir_fd,
+                const char *path,
+                ChaseSymlinksFlags flags,
+                char **ret_path,
+                int *ret_fd) {
+
+        _cleanup_free_ char *buffer = NULL, *done = NULL;
+        _cleanup_close_ int fd = -EBADF, root_fd = -EBADF;
+        unsigned max_follow = CHASE_SYMLINKS_MAX; /* how many symlinks to follow before giving up and returning ELOOP */
+        bool exists = true, append_trail_slash = false;
+        struct stat previous_stat;
+        const char *todo;
+        int r;
+
+        assert(path);
+        assert(!FLAGS_SET(flags, CHASE_PREFIX_ROOT));
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+
+        /* Either the file may be missing, or we return an fd to the final object, but both make no sense */
+        if ((flags & CHASE_NONEXISTENT) && ret_fd)
+                return -EINVAL;
+
+        if ((flags & CHASE_STEP) && ret_fd)
+                return -EINVAL;
+
+        if (isempty(path))
+                path = ".";
+
+        /* This function resolves symlinks of the path relative to the given directory file descriptor. If
+         * CHASE_SYMLINKS_RESOLVE_IN_ROOT is specified and a directory file descriptor is provided, symlinks
+         * are resolved relative to the given directory file descriptor. Otherwise, they are resolved
+         * relative to the root directory of the host.
+         *
+         * Note that when a positive directory file descriptor is provided and CHASE_AT_RESOLVE_IN_ROOT is
+         * specified and we find an absolute symlink, it is resolved relative to given directory file
+         * descriptor and not the root of the host. Also, when following relative symlinks, this functions
+         * ensures they cannot be used to "escape" the given directory file descriptor. If a positive
+         * directory file descriptor is provided, the "path" parameter is always interpreted relative to the
+         * given directory file descriptor, even if it is absolute. If the given directory file descriptor is
+         * AT_FDCWD and "path" is absolute, it is interpreted relative to the root directory of the host.
+         *
+         * If "dir_fd" is a valid directory fd, "path" is an absolute path and "ret_path" is not NULL, this
+         * functions returns a relative path in "ret_path" because openat() like functions generally ignore
+         * the directory fd if they are provided with an absolute path. On the other hand, if "dir_fd" is
+         * AT_FDCWD and "path" is an absolute path, we return an absolute path in "ret_path" because
+         * otherwise, if the caller passes the returned relative path to another openat() like function, it
+         * would be resolved relative to the current working directory instead of to "/".
+         *
+         * Algorithmically this operates on two path buffers: "done" are the components of the path we
+         * already processed and resolved symlinks, "." and ".." of. "todo" are the components of the path we
+         * still need to process. On each iteration, we move one component from "todo" to "done", processing
+         * its special meaning each time. We always keep an O_PATH fd to the component we are currently
+         * processing, thus keeping lookup races to a minimum.
+         *
+         * Suggested usage: whenever you want to canonicalize a path, use this function. Pass the absolute
+         * path you got as-is: fully qualified and relative to your host's root. Optionally, specify the
+         * "dir_fd" parameter to tell this function what to do when encountering a symlink with an absolute
+         * path as directory: resolve it relative to the given directory file descriptor.
+         *
+         * There are five ways to invoke this function:
+         *
+         * 1. Without CHASE_STEP or ret_fd: in this case the path is resolved and the normalized path is
+         *    returned in `ret_path`. The return value is < 0 on error. If CHASE_NONEXISTENT is also set, 0
+         *    is returned if the file doesn't exist, > 0 otherwise. If CHASE_NONEXISTENT is not set, >= 0 is
+         *    returned if the destination was found, -ENOENT if it wasn't.
+         *
+         * 2. With ret_fd: in this case the destination is opened after chasing it as O_PATH and this file
+         *    descriptor is returned as return value. This is useful to open files relative to some root
+         *    directory. Note that the returned O_PATH file descriptors must be converted into a regular one
+         *    (using fd_reopen() or such) before it can be used for reading/writing. ret_fd may not be
+         *    combined with CHASE_NONEXISTENT.
+         *
+         * 3. With CHASE_STEP: in this case only a single step of the normalization is executed, i.e. only
+         *    the first symlink or ".." component of the path is resolved, and the resulting path is
+         *    returned. This is useful if a caller wants to trace the path through the file system verbosely.
+         *    Returns < 0 on error, > 0 if the path is fully normalized, and == 0 for each normalization
+         *    step. This may be combined with CHASE_NONEXISTENT, in which case 1 is returned when a component
+         *    is not found.
+         *
+         * 4. With CHASE_SAFE: in this case the path must not contain unsafe transitions, i.e. transitions
+         *    from unprivileged to privileged files or directories. In such cases the return value is
+         *    -ENOLINK. If CHASE_WARN is also set, a warning describing the unsafe transition is emitted.
+         *    CHASE_WARN cannot be used in PID 1.
+         *
+         * 5. With CHASE_NO_AUTOFS: in this case if an autofs mount point is encountered, path normalization
+         *    is aborted and -EREMOTE is returned. If CHASE_WARN is also set, a warning showing the path of
+         *    the mount point is emitted. CHASE_WARN cannot be used in PID 1.
+         */
+
+        if (!(flags & (CHASE_AT_RESOLVE_IN_ROOT|CHASE_NONEXISTENT|CHASE_NO_AUTOFS|CHASE_SAFE|CHASE_STEP)) &&
+                !ret_path && ret_fd) {
+
+                /* Shortcut the ret_fd case if the caller isn't interested in the actual path and has no root
+                 * set and doesn't care about any of the other special features we provide either. */
+                r = openat(dir_fd, path, O_PATH|O_CLOEXEC|((flags & CHASE_NOFOLLOW) ? O_NOFOLLOW : 0));
+                if (r < 0)
+                        return -errno;
+
+                *ret_fd = r;
+                return 0;
+        }
+
+        buffer = strdup(path);
+        if (!buffer)
+                return -ENOMEM;
+
+        /* If we receive an absolute path together with AT_FDCWD, we need to return an absolute path, because
+         * a relative path would be interpreted relative to the current working directory. */
+        bool need_absolute = dir_fd == AT_FDCWD && path_is_absolute(path);
+        if (need_absolute) {
+                done = strdup("/");
+                if (!done)
+                        return -ENOMEM;
+        }
+
+        /* If we get AT_FDCWD, we always resolve symlinks relative to the host's root. Only if a positive
+         * directory file descriptor is provided will we look at CHASE_AT_RESOLVE_IN_ROOT to determine
+         * whether to resolve symlinks in it or not. */
+        if (dir_fd >= 0 && FLAGS_SET(flags, CHASE_AT_RESOLVE_IN_ROOT))
+                root_fd = openat(dir_fd, ".", O_CLOEXEC|O_DIRECTORY|O_PATH);
+        else
+                root_fd = open("/", O_CLOEXEC|O_DIRECTORY|O_PATH);
+        if (root_fd < 0)
+                return -errno;
+
+        /* If a positive directory file descriptor is provided, always resolve the given path relative to it,
+         * regardless of whether it is absolute or not. If we get AT_FDCWD, follow regular openat()
+         * semantics, if the path is relative, resolve against the current working directory. Otherwise,
+         * resolve against root. */
+        if (dir_fd >= 0 || !path_is_absolute(path))
+                fd = openat(dir_fd, ".", O_CLOEXEC|O_DIRECTORY|O_PATH);
+        else
+                fd = open("/", O_CLOEXEC|O_DIRECTORY|O_PATH);
+        if (fd < 0)
+                return -errno;
+
+        if (fstat(fd, &previous_stat) < 0)
+                return -errno;
+
+        if (flags & CHASE_TRAIL_SLASH)
+                append_trail_slash = endswith(buffer, "/") || endswith(buffer, "/.");
+
+        for (todo = buffer;;) {
+                _cleanup_free_ char *first = NULL;
+                _cleanup_close_ int child = -EBADF;
+                struct stat st;
+                const char *e;
+
+                r = path_find_first_component(&todo, /* accept_dot_dot= */ true, &e);
+                if (r < 0)
+                        return r;
+                if (r == 0) { /* We reached the end. */
+                        if (append_trail_slash)
+                                if (!strextend(&done, "/"))
+                                        return -ENOMEM;
+                        break;
+                }
+
+                first = strndup(e, r);
+                if (!first)
+                        return -ENOMEM;
+
+                /* Two dots? Then chop off the last bit of what we already found out. */
+                if (path_equal(first, "..")) {
+                        _cleanup_free_ char *parent = NULL;
+                        _cleanup_close_ int fd_parent = -EBADF;
+
+                        /* If we already are at the top, then going up will not change anything. This is
+                         * in-line with how the kernel handles this. */
+                        if (empty_or_root(done) && FLAGS_SET(flags, CHASE_AT_RESOLVE_IN_ROOT))
+                                continue;
+
+                        fd_parent = openat(fd, "..", O_CLOEXEC|O_NOFOLLOW|O_PATH|O_DIRECTORY);
+                        if (fd_parent < 0)
+                                return -errno;
+
+                        if (fstat(fd_parent, &st) < 0)
+                                return -errno;
+
+                        /* If we opened the same directory, that means we're at the host root directory, so
+                         * going up won't change anything. */
+                        if (st.st_dev == previous_stat.st_dev && st.st_ino == previous_stat.st_ino)
+                                continue;
+
+                        r = path_extract_directory(done, &parent);
+                        if (r >= 0 || r == -EDESTADDRREQ)
+                                free_and_replace(done, parent);
+                        else if (IN_SET(r, -EINVAL, -EADDRNOTAVAIL)) {
+                                /* If we're at the top of "dir_fd", start appending ".." to "done". */
+                                if (!path_extend(&done, ".."))
+                                        return -ENOMEM;
+                        } else
+                                return r;
+
+                        if (flags & CHASE_STEP)
+                                goto chased_one;
+
+                        if (flags & CHASE_SAFE) {
+                                if (unsafe_transition(&previous_stat, &st))
+                                        return log_unsafe_transition(fd, fd_parent, path, flags);
+
+                                previous_stat = st;
+                        }
+
+                        close_and_replace(fd, fd_parent);
+
+                        continue;
+                }
+
+                /* Otherwise let's see what this is. */
+                child = openat(fd, first, O_CLOEXEC|O_NOFOLLOW|O_PATH);
+                if (child < 0) {
+                        if (errno == ENOENT &&
+                            (flags & CHASE_NONEXISTENT) &&
+                            (isempty(todo) || path_is_safe(todo))) {
+                                /* If CHASE_NONEXISTENT is set, and the path does not exist, then
+                                 * that's OK, return what we got so far. But don't allow this if the
+                                 * remaining path contains "../" or something else weird. */
+
+                                if (!path_extend(&done, first, todo))
+                                        return -ENOMEM;
+
+                                exists = false;
+                                break;
+                        }
+
+                        return -errno;
+                }
+
+                if (fstat(child, &st) < 0)
+                        return -errno;
+                if ((flags & CHASE_SAFE) &&
+                    unsafe_transition(&previous_stat, &st))
+                        return log_unsafe_transition(fd, child, path, flags);
+
+                previous_stat = st;
+
+                if ((flags & CHASE_NO_AUTOFS) &&
+                    fd_is_fs_type(child, AUTOFS_SUPER_MAGIC) > 0)
+                        return log_autofs_mount_point(child, path, flags);
+
+                if (S_ISLNK(st.st_mode) && !((flags & CHASE_NOFOLLOW) && isempty(todo))) {
+                        _cleanup_free_ char *destination = NULL;
+
+                        if (flags & CHASE_PROHIBIT_SYMLINKS)
+                                return log_prohibited_symlink(child, flags);
+
+                        /* This is a symlink, in this case read the destination. But let's make sure we
+                         * don't follow symlinks without bounds. */
+                        if (--max_follow <= 0)
+                                return -ELOOP;
+
+                        r = readlinkat_malloc(fd, first, &destination);
+                        if (r < 0)
+                                return r;
+                        if (isempty(destination))
+                                return -EINVAL;
+
+                        if (path_is_absolute(destination)) {
+
+                                /* An absolute destination. Start the loop from the beginning, but use the
+                                 * root file descriptor as base. */
+
+                                safe_close(fd);
+                                fd = fd_reopen(root_fd, O_CLOEXEC|O_PATH|O_DIRECTORY);
+                                if (fd < 0)
+                                        return fd;
+
+                                if (flags & CHASE_SAFE) {
+                                        if (fstat(fd, &st) < 0)
+                                                return -errno;
+
+                                        if (unsafe_transition(&previous_stat, &st))
+                                                return log_unsafe_transition(child, fd, path, flags);
+
+                                        previous_stat = st;
+                                }
+
+                                r = free_and_strdup(&done, need_absolute ? "/" : NULL);
+                                if (r < 0)
+                                        return r;
+                        }
+
+                        /* Prefix what's left to do with what we just read, and start the loop again, but
+                         * remain in the current directory. */
+                        if (!path_extend(&destination, todo))
+                                return -ENOMEM;
+
+                        free_and_replace(buffer, destination);
+                        todo = buffer;
+
+                        if (flags & CHASE_STEP)
+                                goto chased_one;
+
+                        continue;
+                }
+
+                /* If this is not a symlink, then let's just add the name we read to what we already verified. */
+                if (!path_extend(&done, first))
+                        return -ENOMEM;
+
+                /* And iterate again, but go one directory further down. */
+                close_and_replace(fd, child);
+        }
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(done);
+
+        if (ret_fd) {
+                /* Return the O_PATH fd we currently are looking to the caller. It can translate it to a
+                 * proper fd by opening /proc/self/fd/xyz. */
+
+                assert(fd >= 0);
+                *ret_fd = TAKE_FD(fd);
+        }
+
+        if (flags & CHASE_STEP)
+                return 1;
+
+        return exists;
+
+chased_one:
+        if (ret_path) {
+                const char *e;
+
+                /* todo may contain slashes at the beginning. */
+                r = path_find_first_component(&todo, /* accept_dot_dot= */ true, &e);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        *ret_path = TAKE_PTR(done);
+                else {
+                        char *c;
+
+                        c = path_join(done, e);
+                        if (!c)
+                                return -ENOMEM;
+
+                        *ret_path = c;
+                }
+        }
+
+        return 0;
+}
+
+int chase_symlinks(
+                const char *path,
+                const char *original_root,
+                ChaseSymlinksFlags flags,
+                char **ret_path,
+                int *ret_fd) {
+
+        _cleanup_free_ char *root = NULL, *absolute = NULL, *p = NULL;
+        _cleanup_close_ int fd = -EBADF, pfd = -EBADF;
+        int r;
+
+        assert(path);
+
+        if (isempty(path))
+                return -EINVAL;
+
+        /* A root directory of "/" or "" is identical to none */
+        if (empty_or_root(original_root))
+                original_root = NULL;
+
+        if (original_root) {
+                r = path_make_absolute_cwd(original_root, &root);
+                if (r < 0)
+                        return r;
+
+                /* Simplify the root directory, so that it has no duplicate slashes and nothing at the
+                 * end. While we won't resolve the root path we still simplify it. Note that dropping the
+                 * trailing slash should not change behaviour, since when opening it we specify O_DIRECTORY
+                 * anyway. Moreover at the end of this function after processing everything we'll always turn
+                 * the empty string back to "/". */
+                delete_trailing_chars(root, "/");
+                path_simplify(root);
+
+                if (flags & CHASE_PREFIX_ROOT) {
+                        absolute = path_join(root, path);
+                        if (!absolute)
+                                return -ENOMEM;
+                }
+        }
+
+        if (!absolute) {
+                r = path_make_absolute_cwd(path, &absolute);
+                if (r < 0)
+                        return r;
+        }
+
+        path = path_startswith(absolute, empty_to_root(root));
+        if (!path)
+                return log_full_errno(flags & CHASE_WARN ? LOG_WARNING : LOG_DEBUG,
+                                        SYNTHETIC_ERRNO(ECHRNG),
+                                        "Specified path '%s' is outside of specified root directory '%s', refusing to resolve.",
+                                        absolute, empty_to_root(root));
+
+        fd = open(empty_to_root(root), O_CLOEXEC|O_DIRECTORY|O_PATH);
+        if (fd < 0)
+                return -errno;
+
+        flags |= CHASE_AT_RESOLVE_IN_ROOT;
+        flags &= ~CHASE_PREFIX_ROOT;
+
+        r = chase_symlinks_at(fd, path, flags, ret_path ? &p : NULL, ret_fd ? &pfd : NULL);
+        if (r < 0)
+                return r;
+
+        if (ret_path) {
+                char *q = path_join(empty_to_root(root), p);
+                if (!q)
+                        return -ENOMEM;
+
+                *ret_path = TAKE_PTR(q);
+        }
+
+        if (ret_fd)
+                *ret_fd = TAKE_FD(pfd);
+
+        return r;
+}
+
+int chase_symlinks_and_open(
+                const char *path,
+                const char *root,
+                ChaseSymlinksFlags chase_flags,
+                int open_flags,
+                char **ret_path) {
+
+        _cleanup_close_ int path_fd = -EBADF;
+        _cleanup_free_ char *p = NULL;
+        int r;
+
+        if (chase_flags & (CHASE_NONEXISTENT|CHASE_STEP))
+                return -EINVAL;
+
+        if (empty_or_root(root) && !ret_path && (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE)) == 0) {
+                /* Shortcut this call if none of the special features of this call are requested */
+                r = open(path, open_flags | (FLAGS_SET(chase_flags, CHASE_NOFOLLOW) ? O_NOFOLLOW : 0));
+                if (r < 0)
+                        return -errno;
+
+                return r;
+        }
+
+        r = chase_symlinks(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
+        if (r < 0)
+                return r;
+        assert(path_fd >= 0);
+
+        r = fd_reopen(path_fd, open_flags);
+        if (r < 0)
+                return r;
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(p);
+
+        return r;
+}
+
+int chase_symlinks_and_opendir(
+                const char *path,
+                const char *root,
+                ChaseSymlinksFlags chase_flags,
+                char **ret_path,
+                DIR **ret_dir) {
+
+        _cleanup_close_ int path_fd = -EBADF;
+        _cleanup_free_ char *p = NULL;
+        DIR *d;
+        int r;
+
+        if (!ret_dir)
+                return -EINVAL;
+        if (chase_flags & (CHASE_NONEXISTENT|CHASE_STEP))
+                return -EINVAL;
+
+        if (empty_or_root(root) && !ret_path && (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE)) == 0) {
+                /* Shortcut this call if none of the special features of this call are requested */
+                d = opendir(path);
+                if (!d)
+                        return -errno;
+
+                *ret_dir = d;
+                return 0;
+        }
+
+        r = chase_symlinks(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
+        if (r < 0)
+                return r;
+        assert(path_fd >= 0);
+
+        d = xopendirat(path_fd, ".", O_NOFOLLOW);
+        if (!d)
+                return -errno;
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(p);
+
+        *ret_dir = d;
+        return 0;
+}
+
+int chase_symlinks_and_stat(
+                const char *path,
+                const char *root,
+                ChaseSymlinksFlags chase_flags,
+                char **ret_path,
+                struct stat *ret_stat,
+                int *ret_fd) {
+
+        _cleanup_close_ int path_fd = -EBADF;
+        _cleanup_free_ char *p = NULL;
+        int r;
+
+        assert(path);
+        assert(ret_stat);
+
+        if (chase_flags & (CHASE_NONEXISTENT|CHASE_STEP))
+                return -EINVAL;
+
+        if (empty_or_root(root) && !ret_path && (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE)) == 0 && !ret_fd) {
+                /* Shortcut this call if none of the special features of this call are requested */
+
+                if (fstatat(AT_FDCWD, path, ret_stat, FLAGS_SET(chase_flags, CHASE_NOFOLLOW) ? AT_SYMLINK_NOFOLLOW : 0) < 0)
+                        return -errno;
+
+                return 1;
+        }
+
+        r = chase_symlinks(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
+        if (r < 0)
+                return r;
+        assert(path_fd >= 0);
+
+        if (fstat(path_fd, ret_stat) < 0)
+                return -errno;
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(p);
+        if (ret_fd)
+                *ret_fd = TAKE_FD(path_fd);
+
+        return 1;
+}
+
+int chase_symlinks_and_access(
+                const char *path,
+                const char *root,
+                ChaseSymlinksFlags chase_flags,
+                int access_mode,
+                char **ret_path,
+                int *ret_fd) {
+
+        _cleanup_close_ int path_fd = -EBADF;
+        _cleanup_free_ char *p = NULL;
+        int r;
+
+        assert(path);
+
+        if (chase_flags & (CHASE_NONEXISTENT|CHASE_STEP))
+                return -EINVAL;
+
+        if (empty_or_root(root) && !ret_path && (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE)) == 0 && !ret_fd) {
+                /* Shortcut this call if none of the special features of this call are requested */
+
+                if (faccessat(AT_FDCWD, path, access_mode, FLAGS_SET(chase_flags, CHASE_NOFOLLOW) ? AT_SYMLINK_NOFOLLOW : 0) < 0)
+                        return -errno;
+
+                return 1;
+        }
+
+        r = chase_symlinks(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
+        if (r < 0)
+                return r;
+        assert(path_fd >= 0);
+
+        r = access_fd(path_fd, access_mode);
+        if (r < 0)
+                return r;
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(p);
+        if (ret_fd)
+                *ret_fd = TAKE_FD(path_fd);
+
+        return 1;
+}
+
+int chase_symlinks_and_fopen_unlocked(
+                const char *path,
+                const char *root,
+                ChaseSymlinksFlags chase_flags,
+                const char *open_flags,
+                char **ret_path,
+                FILE **ret_file) {
+
+        _cleanup_free_ char *final_path = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        int mode_flags, r;
+
+        assert(path);
+        assert(open_flags);
+        assert(ret_file);
+
+        mode_flags = fopen_mode_to_flags(open_flags);
+        if (mode_flags < 0)
+                return mode_flags;
+
+        fd = chase_symlinks_and_open(path, root, chase_flags, mode_flags, ret_path ? &final_path : NULL);
+        if (fd < 0)
+                return fd;
+
+        r = take_fdopen_unlocked(&fd, open_flags, ret_file);
+        if (r < 0)
+                return r;
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(final_path);
+
+        return 0;
+}
+
+int chase_symlinks_and_unlink(
+                const char *path,
+                const char *root,
+                ChaseSymlinksFlags chase_flags,
+                int unlink_flags,
+                char **ret_path) {
+
+        _cleanup_free_ char *p = NULL, *rp = NULL, *dir = NULL, *fname = NULL;
+        _cleanup_close_ int fd = -1;
+        int r;
+
+        assert(path);
+
+        r = path_extract_directory(path, &dir);
+        if (r < 0)
+                return r;
+        r = path_extract_filename(path, &fname);
+        if (r < 0)
+                return r;
+
+        fd = chase_symlinks_and_open(dir, root, chase_flags, O_PATH|O_DIRECTORY|O_CLOEXEC, ret_path ? &p : NULL);
+        if (fd < 0)
+                return fd;
+
+        if (p) {
+                rp = path_join(p, fname);
+                if (!rp)
+                        return -ENOMEM;
+        }
+
+        if (unlinkat(fd, fname, unlink_flags) < 0)
+                return -errno;
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(rp);
+
+        return 0;
+}
diff --git a/src/basic/chase-symlinks.h b/src/basic/chase-symlinks.h
new file mode 100644
index 0000000..be5e2bb
--- /dev/null
+++ b/src/basic/chase-symlinks.h
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <dirent.h>
+#include <stdio.h>
+
+#include "stat-util.h"
+
+typedef enum ChaseSymlinksFlags {
+        CHASE_PREFIX_ROOT        = 1 << 0, /* The specified path will be prefixed by the specified root before beginning the iteration */
+        CHASE_NONEXISTENT        = 1 << 1, /* It's OK if the path doesn't actually exist. */
+        CHASE_NO_AUTOFS          = 1 << 2, /* Return -EREMOTE if autofs mount point found */
+        CHASE_SAFE               = 1 << 3, /* Return -EPERM if we ever traverse from unprivileged to privileged files or directories */
+        CHASE_TRAIL_SLASH        = 1 << 4, /* Any trailing slash will be preserved */
+        CHASE_STEP               = 1 << 5, /* Just execute a single step of the normalization */
+        CHASE_NOFOLLOW           = 1 << 6, /* Do not follow the path's right-most component. With ret_fd, when the path's
+                                            * right-most component refers to symlink, return O_PATH fd of the symlink. */
+        CHASE_WARN               = 1 << 7, /* Emit an appropriate warning when an error is encountered.
+                                            * Note: this may do an NSS lookup, hence this flag cannot be used in PID 1. */
+        CHASE_AT_RESOLVE_IN_ROOT = 1 << 8, /* Same as openat2()'s RESOLVE_IN_ROOT flag, symlinks are resolved
+                                            * relative to the given directory fd instead of root. */
+        CHASE_PROHIBIT_SYMLINKS  = 1 << 9, /* Refuse all symlinks */
+} ChaseSymlinksFlags;
+
+bool unsafe_transition(const struct stat *a, const struct stat *b);
+
+/* How many iterations to execute before returning -ELOOP */
+#define CHASE_SYMLINKS_MAX 32
+
+int chase_symlinks(const char *path_with_prefix, const char *root, ChaseSymlinksFlags chase_flags, char **ret_path, int *ret_fd);
+
+int chase_symlinks_and_open(const char *path, const char *root, ChaseSymlinksFlags chase_flags, int open_flags, char **ret_path);
+int chase_symlinks_and_opendir(const char *path, const char *root, ChaseSymlinksFlags chase_flags, char **ret_path, DIR **ret_dir);
+int chase_symlinks_and_stat(const char *path, const char *root, ChaseSymlinksFlags chase_flags, char **ret_path, struct stat *ret_stat, int *ret_fd);
+int chase_symlinks_and_access(const char *path, const char *root, ChaseSymlinksFlags chase_flags, int access_mode, char **ret_path, int *ret_fd);
+int chase_symlinks_and_fopen_unlocked(const char *path, const char *root, ChaseSymlinksFlags chase_flags, const char *open_flags, char **ret_path, FILE **ret_file);
+int chase_symlinks_and_unlink(const char *path, const char *root, ChaseSymlinksFlags chase_flags, int unlink_flags, char **ret_path);
+
+int chase_symlinks_at(int dir_fd, const char *path, ChaseSymlinksFlags flags, char **ret_path, int *ret_fd);
diff --git a/src/basic/chattr-util.c b/src/basic/chattr-util.c
index 10e5987..3c66a3e 100644
--- a/src/basic/chattr-util.c
+++ b/src/basic/chattr-util.c
@@ -7,12 +7,22 @@
 #include <linux/fs.h>
 
 #include "chattr-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "macro.h"
+#include "string-util.h"
 
-int chattr_full(const char *path, int fd, unsigned value, unsigned mask, unsigned *ret_previous, unsigned *ret_final, bool fallback) {
-        _cleanup_close_ int fd_will_close = -1;
+int chattr_full(const char *path,
+                int fd,
+                unsigned value,
+                unsigned mask,
+                unsigned *ret_previous,
+                unsigned *ret_final,
+                ChattrApplyFlags flags) {
+
+        _cleanup_close_ int fd_will_close = -EBADF;
         unsigned old_attr, new_attr;
+        int set_flags_errno = 0;
         struct stat st;
 
         assert(path || fd >= 0);
@@ -50,19 +60,37 @@
         }
 
         if (ioctl(fd, FS_IOC_SETFLAGS, &new_attr) >= 0) {
-                if (ret_previous)
-                        *ret_previous = old_attr;
-                if (ret_final)
-                        *ret_final = new_attr;
-                return 1;
+                unsigned attr;
+
+                /* Some filesystems (BTRFS) silently fail when a flag cannot be set. Let's make sure our
+                 * changes actually went through by querying the flags again and verifying they're equal to
+                 * the flags we tried to configure. */
+
+                if (ioctl(fd, FS_IOC_GETFLAGS, &attr) < 0)
+                        return -errno;
+
+                if (new_attr == attr) {
+                        if (ret_previous)
+                                *ret_previous = old_attr;
+                        if (ret_final)
+                                *ret_final = new_attr;
+                        return 1;
+                }
+
+                /* Trigger the fallback logic. */
+                errno = EINVAL;
         }
 
-        if (errno != EINVAL || !fallback)
+        if ((errno != EINVAL && !ERRNO_IS_NOT_SUPPORTED(errno)) ||
+            !FLAGS_SET(flags, CHATTR_FALLBACK_BITWISE))
                 return -errno;
 
         /* When -EINVAL is returned, we assume that incompatible attributes are simultaneously
          * specified. E.g., compress(c) and nocow(C) attributes cannot be set to files on btrfs.
-         * As a fallback, let's try to set attributes one by one. */
+         * As a fallback, let's try to set attributes one by one.
+         *
+         * Also, when we get EOPNOTSUPP (or a similar error code) we assume a flag might just not be
+         * supported, and we can ignore it too */
 
         unsigned current_attr = old_attr;
         for (unsigned i = 0; i < sizeof(unsigned) * 8; i++) {
@@ -76,8 +104,18 @@
                         continue;
 
                 if (ioctl(fd, FS_IOC_SETFLAGS, &new_one) < 0) {
-                        if (errno != EINVAL)
+                        if (errno != EINVAL && !ERRNO_IS_NOT_SUPPORTED(errno))
                                 return -errno;
+
+                        log_full_errno(FLAGS_SET(flags, CHATTR_WARN_UNSUPPORTED_FLAGS) ? LOG_WARNING : LOG_DEBUG,
+                                       errno,
+                                       "Unable to set file attribute 0x%x on %s, ignoring: %m", mask_one, strna(path));
+
+                        /* Ensures that we record whether only EOPNOTSUPP&friends are encountered, or if a more serious
+                         * error (thus worth logging at a different level, etc) was seen too. */
+                        if (set_flags_errno == 0 || !ERRNO_IS_NOT_SUPPORTED(errno))
+                                set_flags_errno = -errno;
+
                         continue;
                 }
 
@@ -90,7 +128,10 @@
         if (ret_final)
                 *ret_final = current_attr;
 
-        return current_attr == new_attr ? 1 : -ENOANO; /* -ENOANO indicates that some attributes cannot be set. */
+        /* -ENOANO indicates that some attributes cannot be set. ERRNO_IS_NOT_SUPPORTED indicates that all
+         * encountered failures were due to flags not supported by the FS, so return a specific error in
+         * that case, so callers can handle it properly (e.g.: tmpfiles.d can use debug level logging). */
+        return current_attr == new_attr ? 1 : ERRNO_IS_NOT_SUPPORTED(set_flags_errno) ? set_flags_errno : -ENOANO;
 }
 
 int read_attr_fd(int fd, unsigned *ret) {
@@ -104,14 +145,11 @@
         if (!S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode))
                 return -ENOTTY;
 
-        if (ioctl(fd, FS_IOC_GETFLAGS, ret) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, FS_IOC_GETFLAGS, ret));
 }
 
 int read_attr_path(const char *p, unsigned *ret) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(p);
         assert(ret);
diff --git a/src/basic/chattr-util.h b/src/basic/chattr-util.h
index 3f46367..82f91c6 100644
--- a/src/basic/chattr-util.h
+++ b/src/basic/chattr-util.h
@@ -34,13 +34,28 @@
          FS_NOCOW_FL        |                   \
          FS_PROJINHERIT_FL)
 
-int chattr_full(const char *path, int fd, unsigned value, unsigned mask, unsigned *ret_previous, unsigned *ret_final, bool fallback);
+typedef enum ChattrApplyFlags {
+        CHATTR_FALLBACK_BITWISE       = 1 << 0,
+        CHATTR_WARN_UNSUPPORTED_FLAGS = 1 << 1,
+} ChattrApplyFlags;
+
+int chattr_full(const char *path, int fd, unsigned value, unsigned mask, unsigned *ret_previous, unsigned *ret_final, ChattrApplyFlags flags);
+
 static inline int chattr_fd(int fd, unsigned value, unsigned mask, unsigned *previous) {
-        return chattr_full(NULL, fd, value, mask, previous, NULL, false);
+        return chattr_full(NULL, fd, value, mask, previous, NULL, 0);
 }
 static inline int chattr_path(const char *path, unsigned value, unsigned mask, unsigned *previous) {
-        return chattr_full(path, -1, value, mask, previous, NULL, false);
+        return chattr_full(path, -1, value, mask, previous, NULL, 0);
 }
 
 int read_attr_fd(int fd, unsigned *ret);
 int read_attr_path(const char *p, unsigned *ret);
+
+/* Combination of chattr flags, that should be appropriate for secrets stored on disk: Secure Remove +
+ * Exclusion from Dumping + Synchronous Writing (i.e. not caching in memory) + In-Place Updating (i.e. not
+ * spurious copies). */
+#define CHATTR_SECRET_FLAGS (FS_SECRM_FL|FS_NODUMP_FL|FS_SYNC_FL|FS_NOCOW_FL)
+
+static inline int chattr_secret(int fd, ChattrApplyFlags flags) {
+        return chattr_full(NULL, fd, CHATTR_SECRET_FLAGS, CHATTR_SECRET_FLAGS, NULL, NULL, flags|CHATTR_FALLBACK_BITWISE);
+}
diff --git a/src/basic/check-filesystems.sh b/src/basic/check-filesystems.sh
new file mode 100755
index 0000000..696ef61
--- /dev/null
+++ b/src/basic/check-filesystems.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eu
+set -o pipefail
+
+cpp="$1"
+filesystems_gperf="$2"
+shift 2
+
+includes=""
+for i in "$@"; do
+    includes="$includes -include $i"
+done
+
+error=false
+
+# shellcheck disable=SC2086
+for fs in $($cpp -dM $includes - </dev/null | \
+            grep -E '_MAGIC' | \
+            grep -vE 'LINUX_MAGIC' | \
+            awk '/^#define[ \t]+[A-Z0-9_]+MAGIC[ \t]+/ { print $2; }'); do
+    if ! grep -E "\{.*$fs.*\}" "$filesystems_gperf" >/dev/null; then
+        # STACK_END_MAGIC doesn't refer to a filesystem
+        # mtd_inode was removed in 2015
+        # futexfs was removed in 2018
+        if [[ "$fs" =~ ^(STACK_END_MAGIC|MTD_INODE_FS_MAGIC|FUTEXFS_SUPER_MAGIC)$ ]]; then
+            continue
+        fi
+        echo "Filesystem found in kernel header but not in $(basename "$filesystems_gperf"): $fs";
+        error=true
+    fi
+done
+
+if $error; then
+    exit 1
+fi
diff --git a/src/basic/compress.c b/src/basic/compress.c
new file mode 100644
index 0000000..0a330ec
--- /dev/null
+++ b/src/basic/compress.c
@@ -0,0 +1,1078 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <inttypes.h>
+#include <malloc.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#if HAVE_XZ
+#include <lzma.h>
+#endif
+
+#if HAVE_LZ4
+#include <lz4.h>
+#include <lz4frame.h>
+#endif
+
+#if HAVE_ZSTD
+#include <zstd.h>
+#include <zstd_errors.h>
+#endif
+
+#include "alloc-util.h"
+#include "compress.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "io-util.h"
+#include "macro.h"
+#include "sparse-endian.h"
+#include "string-table.h"
+#include "string-util.h"
+#include "unaligned.h"
+
+#if HAVE_LZ4
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(LZ4F_compressionContext_t, LZ4F_freeCompressionContext, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(LZ4F_decompressionContext_t, LZ4F_freeDecompressionContext, NULL);
+#endif
+
+#if HAVE_ZSTD
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(ZSTD_CCtx*, ZSTD_freeCCtx, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(ZSTD_DCtx*, ZSTD_freeDCtx, NULL);
+
+static int zstd_ret_to_errno(size_t ret) {
+        switch (ZSTD_getErrorCode(ret)) {
+        case ZSTD_error_dstSize_tooSmall:
+                return -ENOBUFS;
+        case ZSTD_error_memory_allocation:
+                return -ENOMEM;
+        default:
+                return -EBADMSG;
+        }
+}
+#endif
+
+#define ALIGN_8(l) ALIGN_TO(l, sizeof(size_t))
+
+static const char* const compression_table[_COMPRESSION_MAX] = {
+        [COMPRESSION_NONE] = "NONE",
+        [COMPRESSION_XZ]   = "XZ",
+        [COMPRESSION_LZ4]  = "LZ4",
+        [COMPRESSION_ZSTD] = "ZSTD",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(compression, Compression);
+
+int compress_blob_xz(const void *src, uint64_t src_size,
+                     void *dst, size_t dst_alloc_size, size_t *dst_size) {
+#if HAVE_XZ
+        static const lzma_options_lzma opt = {
+                1u << 20u, NULL, 0, LZMA_LC_DEFAULT, LZMA_LP_DEFAULT,
+                LZMA_PB_DEFAULT, LZMA_MODE_FAST, 128, LZMA_MF_HC3, 4
+        };
+        static const lzma_filter filters[] = {
+                { LZMA_FILTER_LZMA2, (lzma_options_lzma*) &opt },
+                { LZMA_VLI_UNKNOWN, NULL }
+        };
+        lzma_ret ret;
+        size_t out_pos = 0;
+
+        assert(src);
+        assert(src_size > 0);
+        assert(dst);
+        assert(dst_alloc_size > 0);
+        assert(dst_size);
+
+        /* Returns < 0 if we couldn't compress the data or the
+         * compressed result is longer than the original */
+
+        if (src_size < 80)
+                return -ENOBUFS;
+
+        ret = lzma_stream_buffer_encode((lzma_filter*) filters, LZMA_CHECK_NONE, NULL,
+                                        src, src_size, dst, &out_pos, dst_alloc_size);
+        if (ret != LZMA_OK)
+                return -ENOBUFS;
+
+        *dst_size = out_pos;
+        return COMPRESSION_XZ;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int compress_blob_lz4(const void *src, uint64_t src_size,
+                      void *dst, size_t dst_alloc_size, size_t *dst_size) {
+#if HAVE_LZ4
+        int r;
+
+        assert(src);
+        assert(src_size > 0);
+        assert(dst);
+        assert(dst_alloc_size > 0);
+        assert(dst_size);
+
+        /* Returns < 0 if we couldn't compress the data or the
+         * compressed result is longer than the original */
+
+        if (src_size < 9)
+                return -ENOBUFS;
+
+        r = LZ4_compress_default(src, (char*)dst + 8, src_size, (int) dst_alloc_size - 8);
+        if (r <= 0)
+                return -ENOBUFS;
+
+        unaligned_write_le64(dst, src_size);
+        *dst_size = r + 8;
+
+        return COMPRESSION_LZ4;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int compress_blob_zstd(
+                const void *src, uint64_t src_size,
+                void *dst, size_t dst_alloc_size, size_t *dst_size) {
+#if HAVE_ZSTD
+        size_t k;
+
+        assert(src);
+        assert(src_size > 0);
+        assert(dst);
+        assert(dst_alloc_size > 0);
+        assert(dst_size);
+
+        k = ZSTD_compress(dst, dst_alloc_size, src, src_size, 0);
+        if (ZSTD_isError(k))
+                return zstd_ret_to_errno(k);
+
+        *dst_size = k;
+        return COMPRESSION_ZSTD;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_blob_xz(
+                const void *src,
+                uint64_t src_size,
+                void **dst,
+                size_t* dst_size,
+                size_t dst_max) {
+
+#if HAVE_XZ
+        _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
+        lzma_ret ret;
+        size_t space;
+
+        assert(src);
+        assert(src_size > 0);
+        assert(dst);
+        assert(dst_size);
+
+        ret = lzma_stream_decoder(&s, UINT64_MAX, 0);
+        if (ret != LZMA_OK)
+                return -ENOMEM;
+
+        space = MIN(src_size * 2, dst_max ?: SIZE_MAX);
+        if (!greedy_realloc(dst, space, 1))
+                return -ENOMEM;
+
+        s.next_in = src;
+        s.avail_in = src_size;
+
+        s.next_out = *dst;
+        s.avail_out = space;
+
+        for (;;) {
+                size_t used;
+
+                ret = lzma_code(&s, LZMA_FINISH);
+
+                if (ret == LZMA_STREAM_END)
+                        break;
+                else if (ret != LZMA_OK)
+                        return -ENOMEM;
+
+                if (dst_max > 0 && (space - s.avail_out) >= dst_max)
+                        break;
+                else if (dst_max > 0 && space == dst_max)
+                        return -ENOBUFS;
+
+                used = space - s.avail_out;
+                space = MIN(2 * space, dst_max ?: SIZE_MAX);
+                if (!greedy_realloc(dst, space, 1))
+                        return -ENOMEM;
+
+                s.avail_out = space - used;
+                s.next_out = *(uint8_t**)dst + used;
+        }
+
+        *dst_size = space - s.avail_out;
+        return 0;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_blob_lz4(
+                const void *src,
+                uint64_t src_size,
+                void **dst,
+                size_t* dst_size,
+                size_t dst_max) {
+
+#if HAVE_LZ4
+        char* out;
+        int r, size; /* LZ4 uses int for size */
+
+        assert(src);
+        assert(src_size > 0);
+        assert(dst);
+        assert(dst_size);
+
+        if (src_size <= 8)
+                return -EBADMSG;
+
+        size = unaligned_read_le64(src);
+        if (size < 0 || (unsigned) size != unaligned_read_le64(src))
+                return -EFBIG;
+        out = greedy_realloc(dst, size, 1);
+        if (!out)
+                return -ENOMEM;
+
+        r = LZ4_decompress_safe((char*)src + 8, out, src_size - 8, size);
+        if (r < 0 || r != size)
+                return -EBADMSG;
+
+        *dst_size = size;
+        return 0;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_blob_zstd(
+                const void *src,
+                uint64_t src_size,
+                void **dst,
+                size_t *dst_size,
+                size_t dst_max) {
+
+#if HAVE_ZSTD
+        uint64_t size;
+
+        assert(src);
+        assert(src_size > 0);
+        assert(dst);
+        assert(dst_size);
+
+        size = ZSTD_getFrameContentSize(src, src_size);
+        if (IN_SET(size, ZSTD_CONTENTSIZE_ERROR, ZSTD_CONTENTSIZE_UNKNOWN))
+                return -EBADMSG;
+
+        if (dst_max > 0 && size > dst_max)
+                size = dst_max;
+        if (size > SIZE_MAX)
+                return -E2BIG;
+
+        if (!(greedy_realloc(dst, MAX(ZSTD_DStreamOutSize(), size), 1)))
+                return -ENOMEM;
+
+        _cleanup_(ZSTD_freeDCtxp) ZSTD_DCtx *dctx = ZSTD_createDCtx();
+        if (!dctx)
+                return -ENOMEM;
+
+        ZSTD_inBuffer input = {
+                .src = src,
+                .size = src_size,
+        };
+        ZSTD_outBuffer output = {
+                .dst = *dst,
+                .size = MALLOC_SIZEOF_SAFE(*dst),
+        };
+
+        size_t k = ZSTD_decompressStream(dctx, &output, &input);
+        if (ZSTD_isError(k)) {
+                log_debug("ZSTD decoder failed: %s", ZSTD_getErrorName(k));
+                return zstd_ret_to_errno(k);
+        }
+        assert(output.pos >= size);
+
+        *dst_size = size;
+        return 0;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_blob(
+                Compression compression,
+                const void *src,
+                uint64_t src_size,
+                void **dst,
+                size_t* dst_size,
+                size_t dst_max) {
+
+        if (compression == COMPRESSION_XZ)
+                return decompress_blob_xz(
+                                src, src_size,
+                                dst, dst_size, dst_max);
+        else if (compression == COMPRESSION_LZ4)
+                return decompress_blob_lz4(
+                                src, src_size,
+                                dst, dst_size, dst_max);
+        else if (compression == COMPRESSION_ZSTD)
+                return decompress_blob_zstd(
+                                src, src_size,
+                                dst, dst_size, dst_max);
+        else
+                return -EPROTONOSUPPORT;
+}
+
+int decompress_startswith_xz(
+                const void *src,
+                uint64_t src_size,
+                void **buffer,
+                const void *prefix,
+                size_t prefix_len,
+                uint8_t extra) {
+
+#if HAVE_XZ
+        _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
+        size_t allocated;
+        lzma_ret ret;
+
+        /* Checks whether the decompressed blob starts with the mentioned prefix. The byte extra needs to
+         * follow the prefix */
+
+        assert(src);
+        assert(src_size > 0);
+        assert(buffer);
+        assert(prefix);
+
+        ret = lzma_stream_decoder(&s, UINT64_MAX, 0);
+        if (ret != LZMA_OK)
+                return -EBADMSG;
+
+        if (!(greedy_realloc(buffer, ALIGN_8(prefix_len + 1), 1)))
+                return -ENOMEM;
+
+        allocated = MALLOC_SIZEOF_SAFE(*buffer);
+
+        s.next_in = src;
+        s.avail_in = src_size;
+
+        s.next_out = *buffer;
+        s.avail_out = allocated;
+
+        for (;;) {
+                ret = lzma_code(&s, LZMA_FINISH);
+
+                if (!IN_SET(ret, LZMA_OK, LZMA_STREAM_END))
+                        return -EBADMSG;
+
+                if (allocated - s.avail_out >= prefix_len + 1)
+                        return memcmp(*buffer, prefix, prefix_len) == 0 &&
+                                ((const uint8_t*) *buffer)[prefix_len] == extra;
+
+                if (ret == LZMA_STREAM_END)
+                        return 0;
+
+                s.avail_out += allocated;
+
+                if (!(greedy_realloc(buffer, allocated * 2, 1)))
+                        return -ENOMEM;
+
+                allocated = MALLOC_SIZEOF_SAFE(*buffer);
+                s.next_out = *(uint8_t**)buffer + allocated - s.avail_out;
+        }
+
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_startswith_lz4(
+                const void *src,
+                uint64_t src_size,
+                void **buffer,
+                const void *prefix,
+                size_t prefix_len,
+                uint8_t extra) {
+
+#if HAVE_LZ4
+        /* Checks whether the decompressed blob starts with the mentioned prefix. The byte extra needs to
+         * follow the prefix */
+
+        size_t allocated;
+        int r;
+
+        assert(src);
+        assert(src_size > 0);
+        assert(buffer);
+        assert(prefix);
+
+        if (src_size <= 8)
+                return -EBADMSG;
+
+        if (!(greedy_realloc(buffer, ALIGN_8(prefix_len + 1), 1)))
+                return -ENOMEM;
+        allocated = MALLOC_SIZEOF_SAFE(*buffer);
+
+        r = LZ4_decompress_safe_partial(
+                        (char*)src + 8,
+                        *buffer,
+                        src_size - 8,
+                        prefix_len + 1,
+                        allocated);
+
+        /* One lz4 < 1.8.3, we might get "failure" (r < 0), or "success" where just a part of the buffer is
+         * decompressed. But if we get a smaller amount of bytes than requested, we don't know whether there
+         * isn't enough data to fill the requested size or whether we just got a partial answer.
+         */
+        if (r < 0 || (size_t) r < prefix_len + 1) {
+                size_t size;
+
+                if (LZ4_versionNumber() >= 10803)
+                        /* We trust that the newer lz4 decompresses the number of bytes we
+                         * requested if available in the compressed string. */
+                        return 0;
+
+                if (r > 0)
+                        /* Compare what we have first, in case of mismatch we can
+                         * shortcut the full comparison. */
+                        if (memcmp(*buffer, prefix, r) != 0)
+                                return 0;
+
+                /* Before version 1.8.3, lz4 always tries to decode full a "sequence",
+                 * so in pathological cases might need to decompress the full field. */
+                r = decompress_blob_lz4(src, src_size, buffer, &size, 0);
+                if (r < 0)
+                        return r;
+
+                if (size < prefix_len + 1)
+                        return 0;
+        }
+
+        return memcmp(*buffer, prefix, prefix_len) == 0 &&
+                ((const uint8_t*) *buffer)[prefix_len] == extra;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_startswith_zstd(
+                const void *src,
+                uint64_t src_size,
+                void **buffer,
+                const void *prefix,
+                size_t prefix_len,
+                uint8_t extra) {
+#if HAVE_ZSTD
+        assert(src);
+        assert(src_size > 0);
+        assert(buffer);
+        assert(prefix);
+
+        uint64_t size = ZSTD_getFrameContentSize(src, src_size);
+        if (IN_SET(size, ZSTD_CONTENTSIZE_ERROR, ZSTD_CONTENTSIZE_UNKNOWN))
+                return -EBADMSG;
+
+        if (size < prefix_len + 1)
+                return 0; /* Decompressed text too short to match the prefix and extra */
+
+        _cleanup_(ZSTD_freeDCtxp) ZSTD_DCtx *dctx = ZSTD_createDCtx();
+        if (!dctx)
+                return -ENOMEM;
+
+        if (!(greedy_realloc(buffer, MAX(ZSTD_DStreamOutSize(), prefix_len + 1), 1)))
+                return -ENOMEM;
+
+        ZSTD_inBuffer input = {
+                .src = src,
+                .size = src_size,
+        };
+        ZSTD_outBuffer output = {
+                .dst = *buffer,
+                .size = MALLOC_SIZEOF_SAFE(*buffer),
+        };
+        size_t k;
+
+        k = ZSTD_decompressStream(dctx, &output, &input);
+        if (ZSTD_isError(k)) {
+                log_debug("ZSTD decoder failed: %s", ZSTD_getErrorName(k));
+                return zstd_ret_to_errno(k);
+        }
+        assert(output.pos >= prefix_len + 1);
+
+        return memcmp(*buffer, prefix, prefix_len) == 0 &&
+                ((const uint8_t*) *buffer)[prefix_len] == extra;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_startswith(
+                Compression compression,
+                const void *src,
+                uint64_t src_size,
+                void **buffer,
+                const void *prefix,
+                size_t prefix_len,
+                uint8_t extra) {
+
+        if (compression == COMPRESSION_XZ)
+                return decompress_startswith_xz(
+                                src, src_size,
+                                buffer,
+                                prefix, prefix_len,
+                                extra);
+
+        else if (compression == COMPRESSION_LZ4)
+                return decompress_startswith_lz4(
+                                src, src_size,
+                                buffer,
+                                prefix, prefix_len,
+                                extra);
+        else if (compression == COMPRESSION_ZSTD)
+                return decompress_startswith_zstd(
+                                src, src_size,
+                                buffer,
+                                prefix, prefix_len,
+                                extra);
+        else
+                return -EBADMSG;
+}
+
+int compress_stream_xz(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size) {
+#if HAVE_XZ
+        _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
+        lzma_ret ret;
+        uint8_t buf[BUFSIZ], out[BUFSIZ];
+        lzma_action action = LZMA_RUN;
+
+        assert(fdf >= 0);
+        assert(fdt >= 0);
+
+        ret = lzma_easy_encoder(&s, LZMA_PRESET_DEFAULT, LZMA_CHECK_CRC64);
+        if (ret != LZMA_OK)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Failed to initialize XZ encoder: code %u",
+                                       ret);
+
+        for (;;) {
+                if (s.avail_in == 0 && action == LZMA_RUN) {
+                        size_t m = sizeof(buf);
+                        ssize_t n;
+
+                        if (max_bytes != UINT64_MAX && (uint64_t) m > max_bytes)
+                                m = (size_t) max_bytes;
+
+                        n = read(fdf, buf, m);
+                        if (n < 0)
+                                return -errno;
+                        if (n == 0)
+                                action = LZMA_FINISH;
+                        else {
+                                s.next_in = buf;
+                                s.avail_in = n;
+
+                                if (max_bytes != UINT64_MAX) {
+                                        assert(max_bytes >= (uint64_t) n);
+                                        max_bytes -= n;
+                                }
+                        }
+                }
+
+                if (s.avail_out == 0) {
+                        s.next_out = out;
+                        s.avail_out = sizeof(out);
+                }
+
+                ret = lzma_code(&s, action);
+                if (!IN_SET(ret, LZMA_OK, LZMA_STREAM_END))
+                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                               "Compression failed: code %u",
+                                               ret);
+
+                if (s.avail_out == 0 || ret == LZMA_STREAM_END) {
+                        ssize_t n, k;
+
+                        n = sizeof(out) - s.avail_out;
+
+                        k = loop_write(fdt, out, n, false);
+                        if (k < 0)
+                                return k;
+
+                        if (ret == LZMA_STREAM_END) {
+                                if (ret_uncompressed_size)
+                                        *ret_uncompressed_size = s.total_in;
+
+                                log_debug("XZ compression finished (%"PRIu64" -> %"PRIu64" bytes, %.1f%%)",
+                                          s.total_in, s.total_out,
+                                          (double) s.total_out / s.total_in * 100);
+
+                                return COMPRESSION_XZ;
+                        }
+                }
+        }
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+#define LZ4_BUFSIZE (512*1024u)
+
+int compress_stream_lz4(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size) {
+
+#if HAVE_LZ4
+        LZ4F_errorCode_t c;
+        _cleanup_(LZ4F_freeCompressionContextp) LZ4F_compressionContext_t ctx = NULL;
+        _cleanup_free_ void *in_buff = NULL;
+        _cleanup_free_ char *out_buff = NULL;
+        size_t out_allocsize, n, offset = 0, frame_size;
+        uint64_t total_in = 0, total_out;
+        int r;
+        static const LZ4F_preferences_t preferences = {
+                .frameInfo.blockSizeID = 5,
+        };
+
+        c = LZ4F_createCompressionContext(&ctx, LZ4F_VERSION);
+        if (LZ4F_isError(c))
+                return -ENOMEM;
+
+        frame_size = LZ4F_compressBound(LZ4_BUFSIZE, &preferences);
+        out_allocsize = frame_size + 64*1024; /* add some space for header and trailer */
+        out_buff = malloc(out_allocsize);
+        if (!out_buff)
+                return -ENOMEM;
+
+        in_buff = malloc(LZ4_BUFSIZE);
+        if (!in_buff)
+                return -ENOMEM;
+
+        n = offset = total_out = LZ4F_compressBegin(ctx, out_buff, out_allocsize, &preferences);
+        if (LZ4F_isError(n))
+                return -EINVAL;
+
+        log_debug("Buffer size is %zu bytes, header size %zu bytes.", out_allocsize, n);
+
+        for (;;) {
+                ssize_t k;
+
+                k = loop_read(fdf, in_buff, LZ4_BUFSIZE, true);
+                if (k < 0)
+                        return k;
+                if (k == 0)
+                        break;
+                n = LZ4F_compressUpdate(ctx, out_buff + offset, out_allocsize - offset,
+                                        in_buff, k, NULL);
+                if (LZ4F_isError(n))
+                        return -ENOTRECOVERABLE;
+
+                total_in += k;
+                offset += n;
+                total_out += n;
+
+                if (max_bytes != UINT64_MAX && total_out > (size_t) max_bytes)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EFBIG),
+                                               "Compressed stream longer than %" PRIu64 " bytes", max_bytes);
+
+                if (out_allocsize - offset < frame_size + 4) {
+                        k = loop_write(fdt, out_buff, offset, false);
+                        if (k < 0)
+                                return k;
+                        offset = 0;
+                }
+        }
+
+        n = LZ4F_compressEnd(ctx, out_buff + offset, out_allocsize - offset, NULL);
+        if (LZ4F_isError(n))
+                return -ENOTRECOVERABLE;
+
+        offset += n;
+        total_out += n;
+        r = loop_write(fdt, out_buff, offset, false);
+        if (r < 0)
+                return r;
+
+        if (ret_uncompressed_size)
+                *ret_uncompressed_size = total_in;
+
+        log_debug("LZ4 compression finished (%" PRIu64 " -> %" PRIu64 " bytes, %.1f%%)",
+                  total_in, total_out,
+                  (double) total_out / total_in * 100);
+
+        return COMPRESSION_LZ4;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_stream_xz(int fdf, int fdt, uint64_t max_bytes) {
+
+#if HAVE_XZ
+        _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
+        lzma_ret ret;
+
+        uint8_t buf[BUFSIZ], out[BUFSIZ];
+        lzma_action action = LZMA_RUN;
+
+        assert(fdf >= 0);
+        assert(fdt >= 0);
+
+        ret = lzma_stream_decoder(&s, UINT64_MAX, 0);
+        if (ret != LZMA_OK)
+                return log_debug_errno(SYNTHETIC_ERRNO(ENOMEM),
+                                       "Failed to initialize XZ decoder: code %u",
+                                       ret);
+
+        for (;;) {
+                if (s.avail_in == 0 && action == LZMA_RUN) {
+                        ssize_t n;
+
+                        n = read(fdf, buf, sizeof(buf));
+                        if (n < 0)
+                                return -errno;
+                        if (n == 0)
+                                action = LZMA_FINISH;
+                        else {
+                                s.next_in = buf;
+                                s.avail_in = n;
+                        }
+                }
+
+                if (s.avail_out == 0) {
+                        s.next_out = out;
+                        s.avail_out = sizeof(out);
+                }
+
+                ret = lzma_code(&s, action);
+                if (!IN_SET(ret, LZMA_OK, LZMA_STREAM_END))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                               "Decompression failed: code %u",
+                                               ret);
+
+                if (s.avail_out == 0 || ret == LZMA_STREAM_END) {
+                        ssize_t n, k;
+
+                        n = sizeof(out) - s.avail_out;
+
+                        if (max_bytes != UINT64_MAX) {
+                                if (max_bytes < (uint64_t) n)
+                                        return -EFBIG;
+
+                                max_bytes -= n;
+                        }
+
+                        k = loop_write(fdt, out, n, false);
+                        if (k < 0)
+                                return k;
+
+                        if (ret == LZMA_STREAM_END) {
+                                log_debug("XZ decompression finished (%"PRIu64" -> %"PRIu64" bytes, %.1f%%)",
+                                          s.total_in, s.total_out,
+                                          (double) s.total_out / s.total_in * 100);
+
+                                return 0;
+                        }
+                }
+        }
+#else
+        return log_debug_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT),
+                               "Cannot decompress file. Compiled without XZ support.");
+#endif
+}
+
+int decompress_stream_lz4(int in, int out, uint64_t max_bytes) {
+#if HAVE_LZ4
+        size_t c;
+        _cleanup_(LZ4F_freeDecompressionContextp) LZ4F_decompressionContext_t ctx = NULL;
+        _cleanup_free_ char *buf = NULL;
+        char *src;
+        struct stat st;
+        int r = 0;
+        size_t total_in = 0, total_out = 0;
+
+        c = LZ4F_createDecompressionContext(&ctx, LZ4F_VERSION);
+        if (LZ4F_isError(c))
+                return -ENOMEM;
+
+        if (fstat(in, &st) < 0)
+                return log_debug_errno(errno, "fstat() failed: %m");
+
+        if (file_offset_beyond_memory_size(st.st_size))
+                return -EFBIG;
+
+        buf = malloc(LZ4_BUFSIZE);
+        if (!buf)
+                return -ENOMEM;
+
+        src = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, in, 0);
+        if (src == MAP_FAILED)
+                return -errno;
+
+        while (total_in < (size_t) st.st_size) {
+                size_t produced = LZ4_BUFSIZE;
+                size_t used = st.st_size - total_in;
+
+                c = LZ4F_decompress(ctx, buf, &produced, src + total_in, &used, NULL);
+                if (LZ4F_isError(c)) {
+                        r = -EBADMSG;
+                        goto cleanup;
+                }
+
+                total_in += used;
+                total_out += produced;
+
+                if (max_bytes != UINT64_MAX && total_out > (size_t) max_bytes) {
+                        log_debug("Decompressed stream longer than %"PRIu64" bytes", max_bytes);
+                        r = -EFBIG;
+                        goto cleanup;
+                }
+
+                r = loop_write(out, buf, produced, false);
+                if (r < 0)
+                        goto cleanup;
+        }
+
+        log_debug("LZ4 decompression finished (%zu -> %zu bytes, %.1f%%)",
+                  total_in, total_out,
+                  total_in > 0 ? (double) total_out / total_in * 100 : 0.0);
+ cleanup:
+        munmap(src, st.st_size);
+        return r;
+#else
+        return log_debug_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT),
+                               "Cannot decompress file. Compiled without LZ4 support.");
+#endif
+}
+
+int compress_stream_zstd(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size) {
+#if HAVE_ZSTD
+        _cleanup_(ZSTD_freeCCtxp) ZSTD_CCtx *cctx = NULL;
+        _cleanup_free_ void *in_buff = NULL, *out_buff = NULL;
+        size_t in_allocsize, out_allocsize;
+        size_t z;
+        uint64_t left = max_bytes, in_bytes = 0;
+
+        assert(fdf >= 0);
+        assert(fdt >= 0);
+
+        /* Create the context and buffers */
+        in_allocsize = ZSTD_CStreamInSize();
+        out_allocsize = ZSTD_CStreamOutSize();
+        in_buff = malloc(in_allocsize);
+        out_buff = malloc(out_allocsize);
+        cctx = ZSTD_createCCtx();
+        if (!cctx || !out_buff || !in_buff)
+                return -ENOMEM;
+
+        z = ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1);
+        if (ZSTD_isError(z))
+                log_debug("Failed to enable ZSTD checksum, ignoring: %s", ZSTD_getErrorName(z));
+
+        /* This loop read from the input file, compresses that entire chunk,
+         * and writes all output produced to the output file.
+         */
+        for (;;) {
+                bool is_last_chunk;
+                ZSTD_inBuffer input = {
+                        .src = in_buff,
+                        .size = 0,
+                        .pos = 0
+                };
+                ssize_t red;
+
+                red = loop_read(fdf, in_buff, in_allocsize, true);
+                if (red < 0)
+                        return red;
+                is_last_chunk = red == 0;
+
+                in_bytes += (size_t) red;
+                input.size = (size_t) red;
+
+                for (bool finished = false; !finished;) {
+                        ZSTD_outBuffer output = {
+                                .dst = out_buff,
+                                .size = out_allocsize,
+                                .pos = 0
+                        };
+                        size_t remaining;
+                        ssize_t wrote;
+
+                        /* Compress into the output buffer and write all of the
+                         * output to the file so we can reuse the buffer next
+                         * iteration.
+                         */
+                        remaining = ZSTD_compressStream2(
+                                cctx, &output, &input,
+                                is_last_chunk ? ZSTD_e_end : ZSTD_e_continue);
+
+                        if (ZSTD_isError(remaining)) {
+                                log_debug("ZSTD encoder failed: %s", ZSTD_getErrorName(remaining));
+                                return zstd_ret_to_errno(remaining);
+                        }
+
+                        if (left < output.pos)
+                                return -EFBIG;
+
+                        wrote = loop_write(fdt, output.dst, output.pos, 1);
+                        if (wrote < 0)
+                                return wrote;
+
+                        left -= output.pos;
+
+                        /* If we're on the last chunk we're finished when zstd
+                         * returns 0, which means its consumed all the input AND
+                         * finished the frame. Otherwise, we're finished when
+                         * we've consumed all the input.
+                         */
+                        finished = is_last_chunk ? (remaining == 0) : (input.pos == input.size);
+                }
+
+                /* zstd only returns 0 when the input is completely consumed */
+                assert(input.pos == input.size);
+                if (is_last_chunk)
+                        break;
+        }
+
+        if (ret_uncompressed_size)
+                *ret_uncompressed_size = in_bytes;
+
+        if (in_bytes > 0)
+                log_debug("ZSTD compression finished (%" PRIu64 " -> %" PRIu64 " bytes, %.1f%%)",
+                          in_bytes, max_bytes - left, (double) (max_bytes - left) / in_bytes * 100);
+        else
+                log_debug("ZSTD compression finished (%" PRIu64 " -> %" PRIu64 " bytes)",
+                          in_bytes, max_bytes - left);
+
+        return COMPRESSION_ZSTD;
+#else
+        return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_stream_zstd(int fdf, int fdt, uint64_t max_bytes) {
+#if HAVE_ZSTD
+        _cleanup_(ZSTD_freeDCtxp) ZSTD_DCtx *dctx = NULL;
+        _cleanup_free_ void *in_buff = NULL, *out_buff = NULL;
+        size_t in_allocsize, out_allocsize;
+        size_t last_result = 0;
+        uint64_t left = max_bytes, in_bytes = 0;
+
+        assert(fdf >= 0);
+        assert(fdt >= 0);
+
+        /* Create the context and buffers */
+        in_allocsize = ZSTD_DStreamInSize();
+        out_allocsize = ZSTD_DStreamOutSize();
+        in_buff = malloc(in_allocsize);
+        out_buff = malloc(out_allocsize);
+        dctx = ZSTD_createDCtx();
+        if (!dctx || !out_buff || !in_buff)
+                return -ENOMEM;
+
+        /* This loop assumes that the input file is one or more concatenated
+         * zstd streams. This example won't work if there is trailing non-zstd
+         * data at the end, but streaming decompression in general handles this
+         * case. ZSTD_decompressStream() returns 0 exactly when the frame is
+         * completed, and doesn't consume input after the frame.
+         */
+        for (;;) {
+                bool has_error = false;
+                ZSTD_inBuffer input = {
+                        .src = in_buff,
+                        .size = 0,
+                        .pos = 0
+                };
+                ssize_t red;
+
+                red = loop_read(fdf, in_buff, in_allocsize, true);
+                if (red < 0)
+                        return red;
+                if (red == 0)
+                        break;
+
+                in_bytes += (size_t) red;
+                input.size = (size_t) red;
+                input.pos = 0;
+
+                /* Given a valid frame, zstd won't consume the last byte of the
+                 * frame until it has flushed all of the decompressed data of
+                 * the frame. So input.pos < input.size means frame is not done
+                 * or there is still output available.
+                 */
+                while (input.pos < input.size) {
+                        ZSTD_outBuffer output = {
+                                .dst = out_buff,
+                                .size = out_allocsize,
+                                .pos = 0
+                        };
+                        ssize_t wrote;
+                        /* The return code is zero if the frame is complete, but
+                         * there may be multiple frames concatenated together.
+                         * Zstd will automatically reset the context when a
+                         * frame is complete. Still, calling ZSTD_DCtx_reset()
+                         * can be useful to reset the context to a clean state,
+                         * for instance if the last decompression call returned
+                         * an error.
+                         */
+                        last_result = ZSTD_decompressStream(dctx, &output, &input);
+                        if (ZSTD_isError(last_result)) {
+                                has_error = true;
+                                break;
+                        }
+
+                        if (left < output.pos)
+                                return -EFBIG;
+
+                        wrote = loop_write(fdt, output.dst, output.pos, 1);
+                        if (wrote < 0)
+                                return wrote;
+
+                        left -= output.pos;
+                }
+                if (has_error)
+                        break;
+        }
+
+        if (in_bytes == 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "ZSTD decoder failed: no data read");
+
+        if (last_result != 0) {
+                /* The last return value from ZSTD_decompressStream did not end
+                 * on a frame, but we reached the end of the file! We assume
+                 * this is an error, and the input was truncated.
+                 */
+                log_debug("ZSTD decoder failed: %s", ZSTD_getErrorName(last_result));
+                return zstd_ret_to_errno(last_result);
+        }
+
+        log_debug(
+                "ZSTD decompression finished (%" PRIu64 " -> %" PRIu64 " bytes, %.1f%%)",
+                in_bytes,
+                max_bytes - left,
+                (double) (max_bytes - left) / in_bytes * 100);
+        return 0;
+#else
+        return log_debug_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT),
+                               "Cannot decompress file. Compiled without ZSTD support.");
+#endif
+}
+
+int decompress_stream(const char *filename, int fdf, int fdt, uint64_t max_bytes) {
+
+        if (endswith(filename, ".lz4"))
+                return decompress_stream_lz4(fdf, fdt, max_bytes);
+        else if (endswith(filename, ".xz"))
+                return decompress_stream_xz(fdf, fdt, max_bytes);
+        else if (endswith(filename, ".zst"))
+                return decompress_stream_zstd(fdf, fdt, max_bytes);
+        else
+                return -EPROTONOSUPPORT;
+}
diff --git a/src/basic/compress.h b/src/basic/compress.h
new file mode 100644
index 0000000..583b105
--- /dev/null
+++ b/src/basic/compress.h
@@ -0,0 +1,112 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <errno.h>
+#include <stdint.h>
+#include <unistd.h>
+
+typedef enum Compression {
+        COMPRESSION_NONE,
+        COMPRESSION_XZ,
+        COMPRESSION_LZ4,
+        COMPRESSION_ZSTD,
+        _COMPRESSION_MAX,
+        _COMPRESSION_INVALID = -EINVAL,
+} Compression;
+
+const char* compression_to_string(Compression compression);
+Compression compression_from_string(const char *compression);
+
+int compress_blob_xz(const void *src, uint64_t src_size,
+                     void *dst, size_t dst_alloc_size, size_t *dst_size);
+int compress_blob_lz4(const void *src, uint64_t src_size,
+                      void *dst, size_t dst_alloc_size, size_t *dst_size);
+int compress_blob_zstd(const void *src, uint64_t src_size,
+                       void *dst, size_t dst_alloc_size, size_t *dst_size);
+
+int decompress_blob_xz(const void *src, uint64_t src_size,
+                       void **dst, size_t* dst_size, size_t dst_max);
+int decompress_blob_lz4(const void *src, uint64_t src_size,
+                        void **dst, size_t* dst_size, size_t dst_max);
+int decompress_blob_zstd(const void *src, uint64_t src_size,
+                        void **dst, size_t* dst_size, size_t dst_max);
+int decompress_blob(Compression compression,
+                    const void *src, uint64_t src_size,
+                    void **dst, size_t* dst_size, size_t dst_max);
+
+int decompress_startswith_xz(const void *src, uint64_t src_size,
+                             void **buffer,
+                             const void *prefix, size_t prefix_len,
+                             uint8_t extra);
+int decompress_startswith_lz4(const void *src, uint64_t src_size,
+                              void **buffer,
+                              const void *prefix, size_t prefix_len,
+                              uint8_t extra);
+int decompress_startswith_zstd(const void *src, uint64_t src_size,
+                               void **buffer,
+                               const void *prefix, size_t prefix_len,
+                               uint8_t extra);
+int decompress_startswith(Compression compression,
+                          const void *src, uint64_t src_size,
+                          void **buffer,
+                          const void *prefix, size_t prefix_len,
+                          uint8_t extra);
+
+int compress_stream_xz(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size);
+int compress_stream_lz4(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size);
+int compress_stream_zstd(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size);
+
+int decompress_stream_xz(int fdf, int fdt, uint64_t max_size);
+int decompress_stream_lz4(int fdf, int fdt, uint64_t max_size);
+int decompress_stream_zstd(int fdf, int fdt, uint64_t max_size);
+
+static inline int compress_blob_explicit(
+                Compression compression,
+                const void *src, uint64_t src_size,
+                void *dst, size_t dst_alloc_size, size_t *dst_size) {
+
+        switch (compression) {
+        case COMPRESSION_ZSTD:
+                return compress_blob_zstd(src, src_size, dst, dst_alloc_size, dst_size);
+        case COMPRESSION_LZ4:
+                return compress_blob_lz4(src, src_size, dst, dst_alloc_size, dst_size);
+        case COMPRESSION_XZ:
+                return compress_blob_xz(src, src_size, dst, dst_alloc_size, dst_size);
+        default:
+                return -EOPNOTSUPP;
+        }
+}
+
+#define compress_blob(src, src_size, dst, dst_alloc_size, dst_size) \
+        compress_blob_explicit(                                     \
+                DEFAULT_COMPRESSION,                                \
+                src, src_size,                                      \
+                dst, dst_alloc_size, dst_size)
+
+static inline int compress_stream(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size) {
+        switch (DEFAULT_COMPRESSION) {
+        case COMPRESSION_ZSTD:
+                return compress_stream_zstd(fdf, fdt, max_bytes, ret_uncompressed_size);
+        case COMPRESSION_LZ4:
+                return compress_stream_lz4(fdf, fdt, max_bytes, ret_uncompressed_size);
+        case COMPRESSION_XZ:
+                return compress_stream_xz(fdf, fdt, max_bytes, ret_uncompressed_size);
+        default:
+                return -EOPNOTSUPP;
+        }
+}
+
+static inline const char* default_compression_extension(void) {
+        switch (DEFAULT_COMPRESSION) {
+        case COMPRESSION_ZSTD:
+                return ".zst";
+        case COMPRESSION_LZ4:
+                return ".lz4";
+        case COMPRESSION_XZ:
+                return ".xz";
+        default:
+                return "";
+        }
+}
+
+int decompress_stream(const char *filename, int fdf, int fdt, uint64_t max_bytes);
diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c
index edd73b0..3fbb2cd 100644
--- a/src/basic/conf-files.c
+++ b/src/basic/conf-files.c
@@ -5,13 +5,15 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "chase-symlinks.h"
 #include "conf-files.h"
-#include "def.h"
+#include "constants.h"
 #include "dirent-util.h"
 #include "fd-util.h"
 #include "hashmap.h"
 #include "log.h"
 #include "macro.h"
+#include "nulstr-util.h"
 #include "path-util.h"
 #include "set.h"
 #include "sort-util.h"
@@ -28,24 +30,19 @@
                 unsigned flags,
                 const char *path) {
 
+        _cleanup_free_ char *dirpath = NULL;
         _cleanup_closedir_ DIR *dir = NULL;
-        const char *dirpath;
-        struct dirent *de;
         int r;
 
         assert(h);
         assert((flags & CONF_FILES_FILTER_MASKED) == 0 || masked);
         assert(path);
 
-        dirpath = prefix_roota(root, path);
-
-        dir = opendir(dirpath);
-        if (!dir) {
-                if (errno == ENOENT)
-                        return 0;
-
-                return log_debug_errno(errno, "Failed to open directory '%s': %m", dirpath);
-        }
+        r = chase_symlinks_and_opendir(path, root, CHASE_PREFIX_ROOT, &dirpath, &dir);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_debug_errno(r, "Failed to open directory '%s/%s': %m", empty_or_root(root) ? "" : root, dirpath);
 
         FOREACH_DIRENT(de, dir, return -errno) {
                 struct stat st;
@@ -137,13 +134,19 @@
         return strcmp(basename(*a), basename(*b));
 }
 
-static int conf_files_list_strv_internal(char ***strv, const char *suffix, const char *root, unsigned flags, char **dirs) {
+static int conf_files_list_strv_internal(
+                char ***ret,
+                const char *suffix,
+                const char *root,
+                unsigned flags,
+                char **dirs) {
+
         _cleanup_hashmap_free_ Hashmap *fh = NULL;
         _cleanup_set_free_free_ Set *masked = NULL;
-        char **files, **p;
+        char **files;
         int r;
 
-        assert(strv);
+        assert(ret);
 
         /* This alters the dirs string array */
         if (!path_strv_resolve_uniq(dirs, root))
@@ -172,7 +175,7 @@
                 return -ENOMEM;
 
         typesafe_qsort(files, hashmap_size(fh), base_cmp);
-        *strv = files;
+        *ret = files;
 
         return 0;
 }
@@ -197,11 +200,8 @@
                 int c;
 
                 c = base_cmp((char* const*) *strv + i, (char* const*) &path);
-                if (c == 0) {
-                        char **dir;
-
+                if (c == 0)
                         /* Oh, there already is an entry with a matching name (the last component). */
-
                         STRV_FOREACH(dir, dirs) {
                                 _cleanup_free_ char *rdir = NULL;
                                 char *p1, *p2;
@@ -228,7 +228,7 @@
                                 }
                         }
 
-                } else if (c > 0)
+                else if (c > 0)
                         /* Following files have lower priority, let's go insert our
                          * new entry. */
                         break;
@@ -248,56 +248,56 @@
         return r;
 }
 
-int conf_files_list_strv(char ***strv, const char *suffix, const char *root, unsigned flags, const char* const* dirs) {
+int conf_files_list_strv(char ***ret, const char *suffix, const char *root, unsigned flags, const char* const* dirs) {
         _cleanup_strv_free_ char **copy = NULL;
 
-        assert(strv);
+        assert(ret);
 
         copy = strv_copy((char**) dirs);
         if (!copy)
                 return -ENOMEM;
 
-        return conf_files_list_strv_internal(strv, suffix, root, flags, copy);
+        return conf_files_list_strv_internal(ret, suffix, root, flags, copy);
 }
 
-int conf_files_list(char ***strv, const char *suffix, const char *root, unsigned flags, const char *dir) {
+int conf_files_list(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dir) {
         _cleanup_strv_free_ char **dirs = NULL;
 
-        assert(strv);
+        assert(ret);
 
         dirs = strv_new(dir);
         if (!dirs)
                 return -ENOMEM;
 
-        return conf_files_list_strv_internal(strv, suffix, root, flags, dirs);
+        return conf_files_list_strv_internal(ret, suffix, root, flags, dirs);
 }
 
-int conf_files_list_nulstr(char ***strv, const char *suffix, const char *root, unsigned flags, const char *dirs) {
+int conf_files_list_nulstr(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dirs) {
         _cleanup_strv_free_ char **d = NULL;
 
-        assert(strv);
+        assert(ret);
 
         d = strv_split_nulstr(dirs);
         if (!d)
                 return -ENOMEM;
 
-        return conf_files_list_strv_internal(strv, suffix, root, flags, d);
+        return conf_files_list_strv_internal(ret, suffix, root, flags, d);
 }
 
 int conf_files_list_with_replacement(
                 const char *root,
                 char **config_dirs,
                 const char *replacement,
-                char ***files,
-                char **replace_file) {
+                char ***ret_files,
+                char **ret_replace_file) {
 
         _cleanup_strv_free_ char **f = NULL;
         _cleanup_free_ char *p = NULL;
         int r;
 
         assert(config_dirs);
-        assert(files);
-        assert(replace_file || !replacement);
+        assert(ret_files);
+        assert(ret_replace_file || !replacement);
 
         r = conf_files_list_strv(&f, ".conf", root, 0, (const char* const*) config_dirs);
         if (r < 0)
@@ -313,8 +313,9 @@
                         return log_oom();
         }
 
-        *files = TAKE_PTR(f);
-        if (replace_file)
-                *replace_file = TAKE_PTR(p);
+        *ret_files = TAKE_PTR(f);
+        if (ret_replace_file)
+                *ret_replace_file = TAKE_PTR(p);
+
         return 0;
 }
diff --git a/src/basic/constants.h b/src/basic/constants.h
new file mode 100644
index 0000000..5d68cc6
--- /dev/null
+++ b/src/basic/constants.h
@@ -0,0 +1,111 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#if !defined(HAS_FEATURE_MEMORY_SANITIZER)
+#  if defined(__has_feature)
+#    if __has_feature(memory_sanitizer)
+#      define HAS_FEATURE_MEMORY_SANITIZER 1
+#    endif
+#  endif
+#  if !defined(HAS_FEATURE_MEMORY_SANITIZER)
+#    define HAS_FEATURE_MEMORY_SANITIZER 0
+#  endif
+#endif
+
+#if !defined(HAS_FEATURE_ADDRESS_SANITIZER)
+#  ifdef __SANITIZE_ADDRESS__
+#      define HAS_FEATURE_ADDRESS_SANITIZER 1
+#  elif defined(__has_feature)
+#    if __has_feature(address_sanitizer)
+#      define HAS_FEATURE_ADDRESS_SANITIZER 1
+#    endif
+#  endif
+#  if !defined(HAS_FEATURE_ADDRESS_SANITIZER)
+#    define HAS_FEATURE_ADDRESS_SANITIZER 0
+#  endif
+#endif
+
+#define DEFAULT_RESTART_USEC (100*USEC_PER_MSEC)
+
+/* Many different things, but also system unit start/stop */
+#define DEFAULT_TIMEOUT_USEC (DEFAULT_TIMEOUT_SEC*USEC_PER_SEC)
+/* User unit start/stop */
+#define DEFAULT_USER_TIMEOUT_USEC (DEFAULT_USER_TIMEOUT_SEC*USEC_PER_SEC)
+/* Timeout for user confirmation on the console */
+#define DEFAULT_CONFIRM_USEC (30*USEC_PER_SEC)
+
+/* We use an extra-long timeout for the reload. This is because a reload or reexec means generators are rerun
+ * which are timed out after DEFAULT_TIMEOUT_USEC. Let's use twice that time here, so that the generators can
+ * have their timeout, and for everything else there's the same time budget in place. */
+#define DAEMON_RELOAD_TIMEOUT_SEC (DEFAULT_TIMEOUT_USEC * 2)
+
+#define DEFAULT_START_LIMIT_INTERVAL (10*USEC_PER_SEC)
+#define DEFAULT_START_LIMIT_BURST 5
+
+/* The default time after which exit-on-idle services exit. This
+ * should be kept lower than the watchdog timeout, because otherwise
+ * the watchdog pings will keep the loop busy. */
+#define DEFAULT_EXIT_USEC (30*USEC_PER_SEC)
+
+/* The default value for the net.unix.max_dgram_qlen sysctl */
+#define DEFAULT_UNIX_MAX_DGRAM_QLEN 512
+
+#define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT
+#define SIGNALS_IGNORE SIGPIPE
+
+#define NOTIFY_FD_MAX 768
+#define NOTIFY_BUFFER_MAX PIPE_BUF
+
+#if HAVE_SPLIT_USR
+#  define _CONF_PATHS_SPLIT_USR_NULSTR(n) "/lib/" n "\0"
+#  define _CONF_PATHS_SPLIT_USR(n) , "/lib/" n
+#else
+#  define _CONF_PATHS_SPLIT_USR_NULSTR(n)
+#  define _CONF_PATHS_SPLIT_USR(n)
+#endif
+
+/* Return a nulstr for a standard cascade of configuration paths,
+ * suitable to pass to conf_files_list_nulstr() or config_parse_many_nulstr()
+ * to implement drop-in directories for extending configuration
+ * files. */
+#define CONF_PATHS_NULSTR(n)                    \
+        "/etc/" n "\0"                          \
+        "/run/" n "\0"                          \
+        "/usr/local/lib/" n "\0"                \
+        "/usr/lib/" n "\0"                      \
+        _CONF_PATHS_SPLIT_USR_NULSTR(n)
+
+#define CONF_PATHS_USR(n)                       \
+        "/etc/" n,                              \
+        "/run/" n,                              \
+        "/usr/local/lib/" n,                    \
+        "/usr/lib/" n
+
+#define CONF_PATHS(n)                           \
+        CONF_PATHS_USR(n)                       \
+        _CONF_PATHS_SPLIT_USR(n)
+
+#define CONF_PATHS_USR_STRV(n)                  \
+        STRV_MAKE(CONF_PATHS_USR(n))
+
+#define CONF_PATHS_STRV(n)                      \
+        STRV_MAKE(CONF_PATHS(n))
+
+/* The limit for PID 1 itself (which is not inherited to children) */
+#define HIGH_RLIMIT_MEMLOCK (1024ULL*1024ULL*64ULL)
+
+/* Since kernel 5.16 the kernel default limit was raised to 8M. Let's adjust things on old kernels too, and
+ * in containers so that our children inherit that. */
+#define DEFAULT_RLIMIT_MEMLOCK (1024ULL*1024ULL*8ULL)
+
+#define PLYMOUTH_SOCKET {                                       \
+                .un.sun_family = AF_UNIX,                       \
+                .un.sun_path = "\0/org/freedesktop/plymouthd",  \
+        }
+
+/* Path where PID1 listens for varlink subscriptions from systemd-oomd to notify of changes in ManagedOOM settings. */
+#define VARLINK_ADDR_PATH_MANAGED_OOM_SYSTEM "/run/systemd/io.system.ManagedOOM"
+/* Path where systemd-oomd listens for varlink connections from user managers to report changes in ManagedOOM settings. */
+#define VARLINK_ADDR_PATH_MANAGED_OOM_USER "/run/systemd/oom/io.system.ManagedOOM"
+
+#define KERNEL_BASELINE_VERSION "4.15"
diff --git a/src/basic/coverage.h b/src/basic/coverage.h
new file mode 100644
index 0000000..640bddc
--- /dev/null
+++ b/src/basic/coverage.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+/* When built with --coverage (gcov) we need to explicitly call __gcov_dump()
+ * in places where we use _exit(), since _exit() skips at-exit hooks resulting
+ * in lost coverage.
+ *
+ * To make sure we don't miss any _exit() calls, this header file is included
+ * explicitly on the compiler command line via the -include directive (only
+ * when built with -Db_coverage=true)
+ * */
+extern void _exit(int);
+extern void __gcov_dump(void);
+
+static inline _Noreturn void _coverage__exit(int status) {
+        __gcov_dump();
+        _exit(status);
+}
+#define _exit(x) _coverage__exit(x)
diff --git a/src/basic/creds-util.c b/src/basic/creds-util.c
deleted file mode 100644
index 5807670..0000000
--- a/src/basic/creds-util.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "creds-util.h"
-#include "fd-util.h"
-#include "fileio.h"
-#include "path-util.h"
-
-bool credential_name_valid(const char *s) {
-        /* We want that credential names are both valid in filenames (since that's our primary way to pass
-         * them around) and as fdnames (which is how we might want to pass them around eventually) */
-        return filename_is_valid(s) && fdname_is_valid(s);
-}
-
-int get_credentials_dir(const char **ret) {
-        const char *e;
-
-        assert(ret);
-
-        e = secure_getenv("CREDENTIALS_DIRECTORY");
-        if (!e)
-                return -ENXIO;
-
-        if (!path_is_absolute(e) || !path_is_normalized(e))
-                return -EINVAL;
-
-        *ret = e;
-        return 0;
-}
-
-int read_credential(const char *name, void **ret, size_t *ret_size) {
-        _cleanup_free_ char *fn = NULL;
-        const char *d;
-        int r;
-
-        assert(ret);
-
-        if (!credential_name_valid(name))
-                return -EINVAL;
-
-        r = get_credentials_dir(&d);
-        if (r < 0)
-                return r;
-
-        fn = path_join(d, name);
-        if (!fn)
-                return -ENOMEM;
-
-        return read_full_file_full(
-                        AT_FDCWD, fn,
-                        UINT64_MAX, SIZE_MAX,
-                        READ_FULL_FILE_SECURE,
-                        NULL,
-                        (char**) ret, ret_size);
-}
diff --git a/src/basic/creds-util.h b/src/basic/creds-util.h
deleted file mode 100644
index 7310249..0000000
--- a/src/basic/creds-util.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <inttypes.h>
-#include <stdbool.h>
-#include <sys/types.h>
-
-#include "fd-util.h"
-
-#define CREDENTIAL_NAME_MAX FDNAME_MAX
-
-bool credential_name_valid(const char *s);
-
-int get_credentials_dir(const char **ret);
-
-int read_credential(const char *name, void **ret, size_t *ret_size);
diff --git a/src/basic/def.h b/src/basic/def.h
deleted file mode 100644
index 2e60abb..0000000
--- a/src/basic/def.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#define DEFAULT_TIMEOUT_USEC (90*USEC_PER_SEC)
-#define DEFAULT_RESTART_USEC (100*USEC_PER_MSEC)
-#define DEFAULT_CONFIRM_USEC (30*USEC_PER_SEC)
-
-#define DEFAULT_START_LIMIT_INTERVAL (10*USEC_PER_SEC)
-#define DEFAULT_START_LIMIT_BURST 5
-
-/* The default time after which exit-on-idle services exit. This
- * should be kept lower than the watchdog timeout, because otherwise
- * the watchdog pings will keep the loop busy. */
-#define DEFAULT_EXIT_USEC (30*USEC_PER_SEC)
-
-/* The default value for the net.unix.max_dgram_qlen sysctl */
-#define DEFAULT_UNIX_MAX_DGRAM_QLEN 512UL
-
-#define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT
-#define SIGNALS_IGNORE SIGPIPE
-
-#define NOTIFY_FD_MAX 768
-#define NOTIFY_BUFFER_MAX PIPE_BUF
-
-#if HAVE_SPLIT_USR
-#  define _CONF_PATHS_SPLIT_USR_NULSTR(n) "/lib/" n "\0"
-#  define _CONF_PATHS_SPLIT_USR(n) , "/lib/" n
-#else
-#  define _CONF_PATHS_SPLIT_USR_NULSTR(n)
-#  define _CONF_PATHS_SPLIT_USR(n)
-#endif
-
-/* Return a nulstr for a standard cascade of configuration paths,
- * suitable to pass to conf_files_list_nulstr() or config_parse_many_nulstr()
- * to implement drop-in directories for extending configuration
- * files. */
-#define CONF_PATHS_NULSTR(n)                    \
-        "/etc/" n "\0"                          \
-        "/run/" n "\0"                          \
-        "/usr/local/lib/" n "\0"                \
-        "/usr/lib/" n "\0"                      \
-        _CONF_PATHS_SPLIT_USR_NULSTR(n)
-
-#define CONF_PATHS_USR(n)                       \
-        "/etc/" n,                              \
-        "/run/" n,                              \
-        "/usr/local/lib/" n,                    \
-        "/usr/lib/" n
-
-#define CONF_PATHS(n)                           \
-        CONF_PATHS_USR(n)                       \
-        _CONF_PATHS_SPLIT_USR(n)
-
-#define CONF_PATHS_USR_STRV(n)                  \
-        STRV_MAKE(CONF_PATHS_USR(n))
-
-#define CONF_PATHS_STRV(n)                      \
-        STRV_MAKE(CONF_PATHS(n))
-
-#define HIGH_RLIMIT_MEMLOCK (1024ULL*1024ULL*64ULL)
-
-#define PLYMOUTH_SOCKET {                                       \
-                .un.sun_family = AF_UNIX,                       \
-                .un.sun_path = "\0/org/freedesktop/plymouthd",  \
-        }
-
-#define VARLINK_ADDR_PATH_MANAGED_OOM "/run/systemd/io.system.ManagedOOM"
diff --git a/src/basic/devnum-util.c b/src/basic/devnum-util.c
new file mode 100644
index 0000000..bd1b4d6
--- /dev/null
+++ b/src/basic/devnum-util.c
@@ -0,0 +1,138 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <string.h>
+#include <sys/stat.h>
+
+#include "chase-symlinks.h"
+#include "devnum-util.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "string-util.h"
+
+int parse_devnum(const char *s, dev_t *ret) {
+        const char *major;
+        unsigned x, y;
+        size_t n;
+        int r;
+
+        n = strspn(s, DIGITS);
+        if (n == 0)
+                return -EINVAL;
+        if (n > DECIMAL_STR_MAX(dev_t))
+                return -EINVAL;
+        if (s[n] != ':')
+                return -EINVAL;
+
+        major = strndupa_safe(s, n);
+        r = safe_atou(major, &x);
+        if (r < 0)
+                return r;
+
+        r = safe_atou(s + n + 1, &y);
+        if (r < 0)
+                return r;
+
+        if (!DEVICE_MAJOR_VALID(x) || !DEVICE_MINOR_VALID(y))
+                return -ERANGE;
+
+        *ret = makedev(x, y);
+        return 0;
+}
+
+int device_path_make_major_minor(mode_t mode, dev_t devnum, char **ret) {
+        const char *t;
+
+        /* Generates the /dev/{char|block}/MAJOR:MINOR path for a dev_t */
+
+        if (S_ISCHR(mode))
+                t = "char";
+        else if (S_ISBLK(mode))
+                t = "block";
+        else
+                return -ENODEV;
+
+        if (asprintf(ret, "/dev/%s/" DEVNUM_FORMAT_STR, t, DEVNUM_FORMAT_VAL(devnum)) < 0)
+                return -ENOMEM;
+
+        return 0;
+}
+
+int device_path_make_inaccessible(mode_t mode, char **ret) {
+        char *s;
+
+        assert(ret);
+
+        if (S_ISCHR(mode))
+                s = strdup("/run/systemd/inaccessible/chr");
+        else if (S_ISBLK(mode))
+                s = strdup("/run/systemd/inaccessible/blk");
+        else
+                return -ENODEV;
+        if (!s)
+                return -ENOMEM;
+
+        *ret = s;
+        return 0;
+}
+
+int device_path_make_canonical(mode_t mode, dev_t devnum, char **ret) {
+        _cleanup_free_ char *p = NULL;
+        int r;
+
+        /* Finds the canonical path for a device, i.e. resolves the /dev/{char|block}/MAJOR:MINOR path to the end. */
+
+        assert(ret);
+
+        if (major(devnum) == 0 && minor(devnum) == 0)
+                /* A special hack to make sure our 'inaccessible' device nodes work. They won't have symlinks in
+                 * /dev/block/ and /dev/char/, hence we handle them specially here. */
+                return device_path_make_inaccessible(mode, ret);
+
+        r = device_path_make_major_minor(mode, devnum, &p);
+        if (r < 0)
+                return r;
+
+        return chase_symlinks(p, NULL, 0, ret, NULL);
+}
+
+int device_path_parse_major_minor(const char *path, mode_t *ret_mode, dev_t *ret_devnum) {
+        mode_t mode;
+        dev_t devnum;
+        int r;
+
+        /* Tries to extract the major/minor directly from the device path if we can. Handles /dev/block/ and /dev/char/
+         * paths, as well out synthetic inaccessible device nodes. Never goes to disk. Returns -ENODEV if the device
+         * path cannot be parsed like this.  */
+
+        if (path_equal(path, "/run/systemd/inaccessible/chr")) {
+                mode = S_IFCHR;
+                devnum = makedev(0, 0);
+        } else if (path_equal(path, "/run/systemd/inaccessible/blk")) {
+                mode = S_IFBLK;
+                devnum = makedev(0, 0);
+        } else {
+                const char *w;
+
+                w = path_startswith(path, "/dev/block/");
+                if (w)
+                        mode = S_IFBLK;
+                else {
+                        w = path_startswith(path, "/dev/char/");
+                        if (!w)
+                                return -ENODEV;
+
+                        mode = S_IFCHR;
+                }
+
+                r = parse_devnum(w, &devnum);
+                if (r < 0)
+                        return r;
+        }
+
+        if (ret_mode)
+                *ret_mode = mode;
+        if (ret_devnum)
+                *ret_devnum = devnum;
+
+        return 0;
+}
diff --git a/src/basic/devnum-util.h b/src/basic/devnum-util.h
new file mode 100644
index 0000000..38aa4ef
--- /dev/null
+++ b/src/basic/devnum-util.h
@@ -0,0 +1,52 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "stdio-util.h"
+
+int parse_devnum(const char *s, dev_t *ret);
+
+/* glibc and the Linux kernel have different ideas about the major/minor size. These calls will check whether the
+ * specified major is valid by the Linux kernel's standards, not by glibc's. Linux has 20bits of minor, and 12 bits of
+ * major space. See MINORBITS in linux/kdev_t.h in the kernel sources. (If you wonder why we define _y here, instead of
+ * comparing directly >= 0: it's to trick out -Wtype-limits, which would otherwise complain if the type is unsigned, as
+ * such a test would be pointless in such a case.) */
+
+#define DEVICE_MAJOR_VALID(x)                                           \
+        ({                                                              \
+                typeof(x) _x = (x), _y = 0;                             \
+                _x >= _y && _x < (UINT32_C(1) << 12);                   \
+                                                                        \
+        })
+
+#define DEVICE_MINOR_VALID(x)                                           \
+        ({                                                              \
+                typeof(x) _x = (x), _y = 0;                             \
+                _x >= _y && _x < (UINT32_C(1) << 20);                   \
+        })
+
+int device_path_make_major_minor(mode_t mode, dev_t devnum, char **ret);
+int device_path_make_inaccessible(mode_t mode, char **ret);
+int device_path_make_canonical(mode_t mode, dev_t devnum, char **ret);
+int device_path_parse_major_minor(const char *path, mode_t *ret_mode, dev_t *ret_devnum);
+
+static inline bool devnum_set_and_equal(dev_t a, dev_t b) {
+        /* Returns true if a and b definitely refer to the same device. If either is zero, this means "don't
+         * know" and we'll return false */
+        return a == b && a != 0;
+}
+
+/* Maximum string length for a major:minor string. (Note that DECIMAL_STR_MAX includes space for a trailing NUL) */
+#define DEVNUM_STR_MAX (DECIMAL_STR_MAX(dev_t)-1+1+DECIMAL_STR_MAX(dev_t))
+
+#define DEVNUM_FORMAT_STR "%u:%u"
+#define DEVNUM_FORMAT_VAL(d) major(d), minor(d)
+
+static inline char *format_devnum(dev_t d, char buf[static DEVNUM_STR_MAX]) {
+        return ASSERT_PTR(snprintf_ok(buf, DEVNUM_STR_MAX, DEVNUM_FORMAT_STR, DEVNUM_FORMAT_VAL(d)));
+}
+
+#define FORMAT_DEVNUM(d) format_devnum((d), (char[DEVNUM_STR_MAX]) {})
diff --git a/src/basic/dirent-util.c b/src/basic/dirent-util.c
index f6213a3..17df6a2 100644
--- a/src/basic/dirent-util.c
+++ b/src/basic/dirent-util.c
@@ -5,29 +5,35 @@
 
 #include "dirent-util.h"
 #include "path-util.h"
+#include "stat-util.h"
 #include "string-util.h"
 
-static int dirent_ensure_type(DIR *d, struct dirent *de) {
-        struct stat st;
+int dirent_ensure_type(int dir_fd, struct dirent *de) {
+        STRUCT_STATX_DEFINE(sx);
+        int r;
 
-        assert(d);
+        assert(dir_fd >= 0);
         assert(de);
 
         if (de->d_type != DT_UNKNOWN)
                 return 0;
 
-        if (fstatat(dirfd(d), de->d_name, &st, AT_SYMLINK_NOFOLLOW) < 0)
-                return -errno;
+        if (dot_or_dot_dot(de->d_name)) {
+                de->d_type = DT_DIR;
+                return 0;
+        }
 
-        de->d_type =
-                S_ISREG(st.st_mode)  ? DT_REG  :
-                S_ISDIR(st.st_mode)  ? DT_DIR  :
-                S_ISLNK(st.st_mode)  ? DT_LNK  :
-                S_ISFIFO(st.st_mode) ? DT_FIFO :
-                S_ISSOCK(st.st_mode) ? DT_SOCK :
-                S_ISCHR(st.st_mode)  ? DT_CHR  :
-                S_ISBLK(st.st_mode)  ? DT_BLK  :
-                                       DT_UNKNOWN;
+        /* Let's ask only for the type, nothing else. */
+        r = statx_fallback(dir_fd, de->d_name, AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_TYPE, &sx);
+        if (r < 0)
+                return r;
+
+        assert(FLAGS_SET(sx.stx_mask, STATX_TYPE));
+        de->d_type = IFTODT(sx.stx_mode);
+
+        /* If the inode is passed too, update the field, i.e. report most recent data */
+        if (FLAGS_SET(sx.stx_mask, STATX_INO))
+                de->d_ino = sx.stx_ino;
 
         return 0;
 }
@@ -60,24 +66,40 @@
 }
 
 struct dirent *readdir_ensure_type(DIR *d) {
-        struct dirent *de;
+        int r;
 
         assert(d);
 
-        errno = 0;
-        de = readdir(d);
-        if (de)
-                (void) dirent_ensure_type(d, de);
-        return de;
-}
-
-struct dirent *readdir_no_dot(DIR *dirp) {
-        struct dirent *d;
+        /* Like readdir(), but fills in .d_type if it is DT_UNKNOWN */
 
         for (;;) {
-                d = readdir_ensure_type(dirp);
-                if (d && dot_or_dot_dot(d->d_name))
-                        continue;
-                return d;
+                struct dirent *de;
+
+                errno = 0;
+                de = readdir(d);
+                if (!de)
+                        return NULL;
+
+                r = dirent_ensure_type(dirfd(d), de);
+                if (r >= 0)
+                        return de;
+                if (r != -ENOENT) {
+                        errno = -r; /* We want to be compatible with readdir(), hence propagate error via errno here */
+                        return NULL;
+                }
+
+                /* Vanished by now? Then skip immediately to next */
+        }
+}
+
+struct dirent *readdir_no_dot(DIR *d) {
+        assert(d);
+
+        for (;;) {
+                struct dirent *de;
+
+                de = readdir_ensure_type(d);
+                if (!de || !dot_or_dot_dot(de->d_name))
+                        return de;
         }
 }
diff --git a/src/basic/dirent-util.h b/src/basic/dirent-util.h
index c7956e7..0f1fb23 100644
--- a/src/basic/dirent-util.h
+++ b/src/basic/dirent-util.h
@@ -10,26 +10,51 @@
 
 bool dirent_is_file(const struct dirent *de) _pure_;
 bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) _pure_;
+int dirent_ensure_type(int dir_fd, struct dirent *de);
 
 struct dirent *readdir_ensure_type(DIR *d);
 struct dirent *readdir_no_dot(DIR *dirp);
 
-#define FOREACH_DIRENT(de, d, on_error)                                 \
-        for (de = readdir_ensure_type(d);; de = readdir_ensure_type(d)) \
-                if (!de) {                                              \
-                        if (errno > 0) {                                \
-                                on_error;                               \
-                        }                                               \
-                        break;                                          \
-                } else if (hidden_or_backup_file((de)->d_name))         \
-                        continue;                                       \
-                else
-
 #define FOREACH_DIRENT_ALL(de, d, on_error)                             \
-        for (de = readdir_ensure_type(d);; de = readdir_ensure_type(d)) \
+        for (struct dirent *(de) = readdir_ensure_type(d);; (de) = readdir_ensure_type(d)) \
                 if (!de) {                                              \
                         if (errno > 0) {                                \
                                 on_error;                               \
                         }                                               \
                         break;                                          \
                 } else
+
+#define FOREACH_DIRENT(de, d, on_error)                                 \
+        FOREACH_DIRENT_ALL(de, d, on_error)                             \
+             if (hidden_or_backup_file((de)->d_name))                   \
+                     continue;                                          \
+             else
+
+/* Maximum space one dirent structure might require at most */
+#define DIRENT_SIZE_MAX CONST_MAX(sizeof(struct dirent), offsetof(struct dirent, d_name) + NAME_MAX + 1)
+
+/* Only if 64bit off_t is enabled struct dirent + struct dirent64 are actually the same. We require this, and
+ * we want them to be interchangeable to make getdents64() work, hence verify that. */
+assert_cc(_FILE_OFFSET_BITS == 64);
+assert_cc(sizeof(struct dirent) == sizeof(struct dirent64));
+assert_cc(offsetof(struct dirent, d_ino) == offsetof(struct dirent64, d_ino));
+assert_cc(sizeof_field(struct dirent, d_ino) == sizeof_field(struct dirent64, d_ino));
+assert_cc(offsetof(struct dirent, d_off) == offsetof(struct dirent64, d_off));
+assert_cc(sizeof_field(struct dirent, d_off) == sizeof_field(struct dirent64, d_off));
+assert_cc(offsetof(struct dirent, d_reclen) == offsetof(struct dirent64, d_reclen));
+assert_cc(sizeof_field(struct dirent, d_reclen) == sizeof_field(struct dirent64, d_reclen));
+assert_cc(offsetof(struct dirent, d_type) == offsetof(struct dirent64, d_type));
+assert_cc(sizeof_field(struct dirent, d_type) == sizeof_field(struct dirent64, d_type));
+assert_cc(offsetof(struct dirent, d_name) == offsetof(struct dirent64, d_name));
+assert_cc(sizeof_field(struct dirent, d_name) == sizeof_field(struct dirent64, d_name));
+
+#define FOREACH_DIRENT_IN_BUFFER(de, buf, sz)                           \
+        for (void *_end = (uint8_t*) ({ (de) = (buf); }) + (sz);        \
+             (uint8_t*) (de) < (uint8_t*) _end;                         \
+             (de) = (struct dirent*) ((uint8_t*) (de) + (de)->d_reclen))
+
+#define DEFINE_DIRENT_BUFFER(name, sz)                                  \
+        union {                                                         \
+                struct dirent de;                                       \
+                uint8_t data[(sz) * DIRENT_SIZE_MAX];                   \
+        } name
diff --git a/src/basic/efivars.c b/src/basic/efivars.c
index 032ae6f..e7ece80 100644
--- a/src/basic/efivars.c
+++ b/src/basic/efivars.c
@@ -17,6 +17,7 @@
 #include "fileio.h"
 #include "io-util.h"
 #include "macro.h"
+#include "memory-util.h"
 #include "stdio-util.h"
 #include "strv.h"
 #include "time-util.h"
@@ -36,7 +37,7 @@
                 void **ret_value,
                 size_t *ret_size) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_free_ void *buf = NULL;
         struct stat st;
         usec_t begin = 0; /* Unnecessary initialization to appease gcc */
@@ -120,13 +121,10 @@
                 n = st.st_size - 4;
 
         if (DEBUG_LOGGING) {
-                char ts[FORMAT_TIMESPAN_MAX];
-                usec_t end;
-
-                end = now(CLOCK_MONOTONIC);
+                usec_t end = now(CLOCK_MONOTONIC);
                 if (end > begin + EFI_RETRY_DELAY)
                         log_debug("Detected slow EFI variable read access on %s: %s",
-                                  variable, format_timespan(ts, sizeof(ts), end - begin, 1));
+                                  variable, FORMAT_TIMESPAN(end - begin, 1));
         }
 
         /* Note that efivarfs interestingly doesn't require ftruncate() to update an existing EFI variable
@@ -144,7 +142,7 @@
         return 0;
 }
 
-int efi_get_variable_string(const char *variable, char **p) {
+int efi_get_variable_string(const char *variable, char **ret) {
         _cleanup_free_ void *s = NULL;
         size_t ss = 0;
         int r;
@@ -158,16 +156,33 @@
         if (!x)
                 return -ENOMEM;
 
-        *p = x;
+        *ret = x;
         return 0;
 }
 
+static int efi_verify_variable(const char *variable, uint32_t attr, const void *value, size_t size) {
+        _cleanup_free_ void *buf = NULL;
+        size_t n;
+        uint32_t a;
+        int r;
+
+        assert(variable);
+        assert(value || size == 0);
+
+        r = efi_get_variable(variable, &a, &buf, &n);
+        if (r < 0)
+                return r;
+
+        return a == attr && memcmp_nn(buf, n, value, size) == 0;
+}
+
 int efi_set_variable(const char *variable, const void *value, size_t size) {
         struct var {
                 uint32_t attr;
                 char buf[];
         } _packed_ * _cleanup_free_ buf = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
+        uint32_t attr = EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS;
         bool saved_flags_valid = false;
         unsigned saved_flags;
         int r;
@@ -177,6 +192,12 @@
 
         const char *p = strjoina("/sys/firmware/efi/efivars/", variable);
 
+        /* size 0 means removal, empty variable would not be enough for that */
+        if (size > 0 && efi_verify_variable(variable, attr, value, size) > 0) {
+                log_debug("Variable '%s' is already in wanted state, skipping write.", variable);
+                return 0;
+        }
+
         /* Newer efivarfs protects variables that are not in an allow list with FS_IMMUTABLE_FL by default,
          * to protect them for accidental removal and modification. We are not changing these variables
          * accidentally however, hence let's unset the bit first. */
@@ -208,7 +229,7 @@
                 goto finish;
         }
 
-        buf->attr = EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS;
+        buf->attr = attr;
         memcpy(buf->buf, value, size);
 
         r = loop_write(fd, buf, sizeof(uint32_t) + size, false);
@@ -289,27 +310,51 @@
 
 bool is_efi_secure_boot(void) {
         static int cache = -1;
+        int r;
 
-        if (cache < 0)
-                cache = read_flag(EFI_GLOBAL_VARIABLE(SecureBoot));
+        if (cache < 0) {
+                r = read_flag(EFI_GLOBAL_VARIABLE(SecureBoot));
+                if (r == -ENOENT)
+                        cache = false;
+                else if (r < 0)
+                        log_debug_errno(r, "Error reading SecureBoot EFI variable, assuming not in SecureBoot mode: %m");
+                else
+                        cache = r;
+        }
 
         return cache > 0;
 }
 
-bool is_efi_secure_boot_setup_mode(void) {
-        static int cache = -1;
+SecureBootMode efi_get_secure_boot_mode(void) {
+        static SecureBootMode cache = _SECURE_BOOT_INVALID;
 
-        if (cache < 0)
-                cache = read_flag(EFI_GLOBAL_VARIABLE(SetupMode));
+        if (cache != _SECURE_BOOT_INVALID)
+                return cache;
 
-        return cache > 0;
+        int secure = read_flag(EFI_GLOBAL_VARIABLE(SecureBoot));
+        if (secure < 0) {
+                if (secure != -ENOENT)
+                        log_debug_errno(secure, "Error reading SecureBoot EFI variable, assuming not in SecureBoot mode: %m");
+
+                return (cache = SECURE_BOOT_UNSUPPORTED);
+        }
+
+        /* We can assume false for all these if they are abscent (AuditMode and
+         * DeployedMode may not exist on older firmware). */
+        int audit    = read_flag(EFI_GLOBAL_VARIABLE(AuditMode));
+        int deployed = read_flag(EFI_GLOBAL_VARIABLE(DeployedMode));
+        int setup    = read_flag(EFI_GLOBAL_VARIABLE(SetupMode));
+        log_debug("Secure boot variables: SecureBoot=%d AuditMode=%d DeployedMode=%d SetupMode=%d",
+                  secure, audit, deployed, setup);
+
+        return (cache = decode_secure_boot_mode(secure, audit > 0, deployed > 0, setup > 0));
 }
 
-static int read_efi_options_variable(char **line) {
+static int read_efi_options_variable(char **ret) {
         int r;
 
         /* In SecureBoot mode this is probably not what you want. As your cmdline is cryptographically signed
-         * like when using Type #2 EFI Unified Kernel Images (https://systemd.io/BOOT_LOADER_SPECIFICATION)
+         * like when using Type #2 EFI Unified Kernel Images (https://uapi-group.org/specifications/specs/boot_loader_specification)
          * The user's intention is then that the cmdline should not be modified. You want to make sure that
          * the system starts up as exactly specified in the signed artifact.
          *
@@ -325,7 +370,7 @@
                 return -EPERM;
         }
 
-        r = efi_get_variable_string(EFI_SYSTEMD_VARIABLE(SystemdOptions), line);
+        r = efi_get_variable_string(EFI_SYSTEMD_VARIABLE(SystemdOptions), ret);
         if (r == -ENOENT)
                 return -ENODATA;
         return r;
@@ -343,13 +388,13 @@
                                  WRITE_STRING_FILE_ATOMIC|WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755);
 }
 
-int systemd_efi_options_variable(char **line) {
+int systemd_efi_options_variable(char **ret) {
         const char *e;
         int r;
 
         /* Returns the contents of the variable for current boot from the cache. */
 
-        assert(line);
+        assert(ret);
 
         /* For testing purposes it is sometimes useful to be able to override this */
         e = secure_getenv("SYSTEMD_EFI_OPTIONS");
@@ -360,11 +405,11 @@
                 if (!m)
                         return -ENOMEM;
 
-                *line = m;
+                *ret = m;
                 return 0;
         }
 
-        r = read_one_line_file(EFIVAR_CACHE_PATH(EFI_SYSTEMD_VARIABLE(SystemdOptions)), line);
+        r = read_one_line_file(EFIVAR_CACHE_PATH(EFI_SYSTEMD_VARIABLE(SystemdOptions)), ret);
         if (r == -ENOENT)
                 return -ENODATA;
         return r;
@@ -374,7 +419,7 @@
         return CMP(timespec_load(&a->st_mtim), timespec_load(&b->st_mtim));
 }
 
-int systemd_efi_options_efivarfs_if_newer(char **line) {
+int systemd_efi_options_efivarfs_if_newer(char **ret) {
         struct stat a = {}, b;
         int r;
 
@@ -382,21 +427,20 @@
                 return log_debug_errno(errno, "Failed to stat EFI variable SystemdOptions: %m");
 
         if (stat(EFIVAR_CACHE_PATH(EFI_SYSTEMD_VARIABLE(SystemdOptions)), &b) < 0) {
-                if (errno != -ENOENT)
+                if (errno != ENOENT)
                         log_debug_errno(errno, "Failed to stat "EFIVAR_CACHE_PATH(EFI_SYSTEMD_VARIABLE(SystemdOptions))": %m");
         } else if (compare_stat_mtime(&a, &b) > 0)
                 log_debug("Variable SystemdOptions in evifarfs is newer than in cache.");
         else {
                 log_debug("Variable SystemdOptions in cache is up to date.");
-                *line = NULL;
+                *ret = NULL;
                 return 0;
         }
 
-        r = read_efi_options_variable(line);
+        r = read_efi_options_variable(ret);
         if (r < 0)
-                log_warning_errno(r, "Failed to read SystemdOptions EFI variable: %m");
-        if (r == -ENOENT)
-                return -ENODATA;
-        return r;
+                return log_debug_errno(r, "Failed to read SystemdOptions EFI variable: %m");
+
+        return 0;
 }
 #endif
diff --git a/src/basic/efivars.h b/src/basic/efivars.h
index cb6ad9e..bafe2d3 100644
--- a/src/basic/efivars.h
+++ b/src/basic/efivars.h
@@ -10,6 +10,7 @@
 
 #include "sd-id128.h"
 
+#include "efivars-fundamental.h"
 #include "time-util.h"
 
 #define EFI_VENDOR_LOADER      SD_ID128_MAKE(4a,67,b0,82,0a,4c,41,cf,b6,c7,44,0b,29,bb,8c,4f)
@@ -18,9 +19,10 @@
 #define EFI_VENDOR_GLOBAL_STR  SD_ID128_MAKE_UUID_STR(8b,e4,df,61,93,ca,11,d2,aa,0d,00,e0,98,03,2b,8c)
 #define EFI_VENDOR_SYSTEMD     SD_ID128_MAKE(8c,f2,64,4b,4b,0b,42,8f,93,87,6d,87,60,50,dc,67)
 #define EFI_VENDOR_SYSTEMD_STR SD_ID128_MAKE_UUID_STR(8c,f2,64,4b,4b,0b,42,8f,93,87,6d,87,60,50,dc,67)
-#define EFI_VARIABLE_NON_VOLATILE       0x0000000000000001
-#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002
-#define EFI_VARIABLE_RUNTIME_ACCESS     0x0000000000000004
+
+#define EFI_VARIABLE_NON_VOLATILE       UINT32_C(0x00000001)
+#define EFI_VARIABLE_BOOTSERVICE_ACCESS UINT32_C(0x00000002)
+#define EFI_VARIABLE_RUNTIME_ACCESS     UINT32_C(0x00000004)
 
 /* Note that the <lowercaseuuid>-<varname> naming scheme is an efivarfs convention, i.e. part of the Linux
  * API file system implementation for EFI. EFI itself processes UIDS in binary form.
@@ -41,18 +43,18 @@
 
 #if ENABLE_EFI
 
-int efi_get_variable(const char *variable, uint32_t *attribute, void **value, size_t *size);
-int efi_get_variable_string(const char *variable, char **p);
+int efi_get_variable(const char *variable, uint32_t *attribute, void **ret_value, size_t *ret_size);
+int efi_get_variable_string(const char *variable, char **ret);
 int efi_set_variable(const char *variable, const void *value, size_t size);
 int efi_set_variable_string(const char *variable, const char *p);
 
 bool is_efi_boot(void);
 bool is_efi_secure_boot(void);
-bool is_efi_secure_boot_setup_mode(void);
+SecureBootMode efi_get_secure_boot_mode(void);
 
 int cache_efi_options_variable(void);
-int systemd_efi_options_variable(char **line);
-int systemd_efi_options_efivarfs_if_newer(char **line);
+int systemd_efi_options_variable(char **ret);
+int systemd_efi_options_efivarfs_if_newer(char **ret);
 
 #else
 
@@ -60,7 +62,7 @@
         return -EOPNOTSUPP;
 }
 
-static inline int efi_get_variable_string(const char *variable, char **p) {
+static inline int efi_get_variable_string(const char *variable, char **ret) {
         return -EOPNOTSUPP;
 }
 
@@ -80,8 +82,8 @@
         return false;
 }
 
-static inline bool is_efi_secure_boot_setup_mode(void) {
-        return false;
+static inline SecureBootMode efi_get_secure_boot_mode(void) {
+        return SECURE_BOOT_UNKNOWN;
 }
 
 static inline int cache_efi_options_variable(void) {
diff --git a/src/basic/env-file.c b/src/basic/env-file.c
index 599b73b..45b0d90 100644
--- a/src/basic/env-file.c
+++ b/src/basic/env-file.c
@@ -12,18 +12,22 @@
 #include "tmpfile-util.h"
 #include "utf8.h"
 
+typedef int (*push_env_func_t)(
+                const char *filename,
+                unsigned line,
+                const char *key,
+                char *value,
+                void *userdata);
+
 static int parse_env_file_internal(
                 FILE *f,
                 const char *fname,
-                int (*push) (const char *filename, unsigned line,
-                             const char *key, char *value, void *userdata, int *n_pushed),
-                void *userdata,
-                int *n_pushed) {
+                push_env_func_t push,
+                void *userdata) {
 
         size_t n_key = 0, n_value = 0, last_value_whitespace = SIZE_MAX, last_key_whitespace = SIZE_MAX;
         _cleanup_free_ char *contents = NULL, *key = NULL, *value = NULL;
         unsigned line = 1;
-        char *p;
         int r;
 
         enum {
@@ -39,6 +43,9 @@
                 COMMENT_ESCAPE
         } state = PRE_KEY;
 
+        assert(f || fname);
+        assert(push);
+
         if (f)
                 r = read_full_stream(f, &contents, NULL);
         else
@@ -46,7 +53,7 @@
         if (r < 0)
                 return r;
 
-        for (p = contents; *p; p++) {
+        for (char *p = contents; *p; p++) {
                 char c = *p;
 
                 switch (state) {
@@ -100,7 +107,7 @@
                                 if (last_key_whitespace != SIZE_MAX)
                                         key[last_key_whitespace] = 0;
 
-                                r = push(fname, line, key, value, userdata, n_pushed);
+                                r = push(fname, line, key, value, userdata);
                                 if (r < 0)
                                         return r;
 
@@ -143,7 +150,7 @@
                                 if (last_key_whitespace != SIZE_MAX)
                                         key[last_key_whitespace] = 0;
 
-                                r = push(fname, line, key, value, userdata, n_pushed);
+                                r = push(fname, line, key, value, userdata);
                                 if (r < 0)
                                         return r;
 
@@ -262,7 +269,7 @@
                 if (last_key_whitespace != SIZE_MAX)
                         key[last_key_whitespace] = 0;
 
-                r = push(fname, line, key, value, userdata, n_pushed);
+                r = push(fname, line, key, value, userdata);
                 if (r < 0)
                         return r;
 
@@ -276,6 +283,8 @@
                 const char *filename, unsigned line,
                 const char *key, char *value) {
 
+        assert(key);
+
         if (!utf8_is_valid(key)) {
                 _cleanup_free_ char *p = NULL;
 
@@ -300,13 +309,14 @@
 static int parse_env_file_push(
                 const char *filename, unsigned line,
                 const char *key, char *value,
-                void *userdata,
-                int *n_pushed) {
+                void *userdata) {
 
         const char *k;
         va_list aq, *ap = userdata;
         int r;
 
+        assert(key);
+
         r = check_utf8ness_and_warn(filename, line, key, value);
         if (r < 0)
                 return r;
@@ -323,9 +333,6 @@
                         free(*v);
                         *v = value;
 
-                        if (n_pushed)
-                                (*n_pushed)++;
-
                         return 1;
                 }
         }
@@ -341,16 +348,15 @@
                 const char *fname,
                 va_list ap) {
 
-        int r, n_pushed = 0;
+        int r;
         va_list aq;
 
-        va_copy(aq, ap);
-        r = parse_env_file_internal(f, fname, parse_env_file_push, &aq, &n_pushed);
-        va_end(aq);
-        if (r < 0)
-                return r;
+        assert(f || fname);
 
-        return n_pushed;
+        va_copy(aq, ap);
+        r = parse_env_file_internal(f, fname, parse_env_file_push, &aq);
+        va_end(aq);
+        return r;
 }
 
 int parse_env_file_sentinel(
@@ -361,6 +367,37 @@
         va_list ap;
         int r;
 
+        assert(f || fname);
+
+        va_start(ap, fname);
+        r = parse_env_filev(f, fname, ap);
+        va_end(ap);
+
+        return r;
+}
+
+int parse_env_file_fd_sentinel(
+                int fd,
+                const char *fname, /* only used for logging */
+                ...) {
+
+        _cleanup_close_ int fd_ro = -EBADF;
+        _cleanup_fclose_ FILE *f = NULL;
+        va_list ap;
+        int r;
+
+        assert(fd >= 0);
+
+        fd_ro = fd_reopen(fd, O_CLOEXEC | O_RDONLY);
+        if (fd_ro < 0)
+                return fd_ro;
+
+        f = fdopen(fd_ro, "re");
+        if (!f)
+                return -errno;
+
+        TAKE_FD(fd_ro);
+
         va_start(ap, fname);
         r = parse_env_filev(f, fname, ap);
         va_end(ap);
@@ -371,12 +408,14 @@
 static int load_env_file_push(
                 const char *filename, unsigned line,
                 const char *key, char *value,
-                void *userdata,
-                int *n_pushed) {
+                void *userdata) {
+
         char ***m = userdata;
         char *p;
         int r;
 
+        assert(key);
+
         r = check_utf8ness_and_warn(filename, line, key, value);
         if (r < 0)
                 return r;
@@ -389,83 +428,81 @@
         if (r < 0)
                 return r;
 
-        if (n_pushed)
-                (*n_pushed)++;
-
         free(value);
         return 0;
 }
 
-int load_env_file(FILE *f, const char *fname, char ***rl) {
-        char **m = NULL;
+int load_env_file(FILE *f, const char *fname, char ***ret) {
+        _cleanup_strv_free_ char **m = NULL;
         int r;
 
-        r = parse_env_file_internal(f, fname, load_env_file_push, &m, NULL);
-        if (r < 0) {
-                strv_free(m);
-                return r;
-        }
+        assert(f || fname);
+        assert(ret);
 
-        *rl = m;
+        r = parse_env_file_internal(f, fname, load_env_file_push, &m);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
         return 0;
 }
 
 static int load_env_file_push_pairs(
                 const char *filename, unsigned line,
                 const char *key, char *value,
-                void *userdata,
-                int *n_pushed) {
-        char ***m = userdata;
+                void *userdata) {
+
+        char ***m = ASSERT_PTR(userdata);
         int r;
 
+        assert(key);
+
         r = check_utf8ness_and_warn(filename, line, key, value);
         if (r < 0)
                 return r;
 
+        /* Check if the key is present */
+        for (char **t = *m; t && *t; t += 2)
+                if (streq(t[0], key)) {
+                        if (value)
+                                return free_and_replace(t[1], value);
+                        else
+                                return free_and_strdup(t+1, "");
+                }
+
         r = strv_extend(m, key);
         if (r < 0)
-                return -ENOMEM;
+                return r;
 
-        if (!value) {
-                r = strv_extend(m, "");
-                if (r < 0)
-                        return -ENOMEM;
-        } else {
-                r = strv_push(m, value);
-                if (r < 0)
-                        return r;
-        }
-
-        if (n_pushed)
-                (*n_pushed)++;
-
-        return 0;
+        if (value)
+                return strv_push(m, value);
+        else
+                return strv_extend(m, "");
 }
 
-int load_env_file_pairs(FILE *f, const char *fname, char ***rl) {
-        char **m = NULL;
+int load_env_file_pairs(FILE *f, const char *fname, char ***ret) {
+        _cleanup_strv_free_ char **m = NULL;
         int r;
 
-        r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m, NULL);
-        if (r < 0) {
-                strv_free(m);
-                return r;
-        }
+        assert(f || fname);
 
-        *rl = m;
+        r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
         return 0;
 }
 
 static int merge_env_file_push(
                 const char *filename, unsigned line,
                 const char *key, char *value,
-                void *userdata,
-                int *n_pushed) {
+                void *userdata) {
 
-        char ***env = userdata;
+        char ***env = ASSERT_PTR(userdata);
         char *expanded_value;
 
-        assert(env);
+        assert(key);
 
         if (!value) {
                 log_error("%s:%u: invalid syntax (around \"%s\"), ignoring.", strna(filename), line, key);
@@ -489,7 +526,7 @@
 
         log_debug("%s:%u: setting %s=%s", filename, line, key, value);
 
-        return load_env_file_push(filename, line, key, value, env, n_pushed);
+        return load_env_file_push(filename, line, key, value, env);
 }
 
 int merge_env_file(
@@ -497,16 +534,22 @@
                 FILE *f,
                 const char *fname) {
 
+        assert(env);
+        assert(f || fname);
+
         /* NOTE: this function supports braceful and braceless variable expansions,
          * plus "extended" substitutions, unlike other exported parsing functions.
          */
 
-        return parse_env_file_internal(f, fname, merge_env_file_push, env, NULL);
+        return parse_env_file_internal(f, fname, merge_env_file_push, env);
 }
 
 static void write_env_var(FILE *f, const char *v) {
         const char *p;
 
+        assert(f);
+        assert(v);
+
         p = strchr(v, '=');
         if (!p) {
                 /* Fallback */
@@ -538,7 +581,6 @@
 int write_env_file(const char *fname, char **l) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *p = NULL;
-        char **i;
         int r;
 
         assert(fname);
diff --git a/src/basic/env-file.h b/src/basic/env-file.h
index de47588..2448d94 100644
--- a/src/basic/env-file.h
+++ b/src/basic/env-file.h
@@ -9,8 +9,10 @@
 int parse_env_filev(FILE *f, const char *fname, va_list ap);
 int parse_env_file_sentinel(FILE *f, const char *fname, ...) _sentinel_;
 #define parse_env_file(f, fname, ...) parse_env_file_sentinel(f, fname, __VA_ARGS__, NULL)
-int load_env_file(FILE *f, const char *fname, char ***l);
-int load_env_file_pairs(FILE *f, const char *fname, char ***l);
+int parse_env_file_fd_sentinel(int fd, const char *fname, ...) _sentinel_;
+#define parse_env_file_fd(fd, fname, ...) parse_env_file_fd_sentinel(fd, fname, __VA_ARGS__, NULL)
+int load_env_file(FILE *f, const char *fname, char ***ret);
+int load_env_file_pairs(FILE *f, const char *fname, char ***ret);
 
 int merge_env_file(char ***env, FILE *f, const char *fname);
 
diff --git a/src/basic/env-util.c b/src/basic/env-util.c
index 1ca445d..55ac11a 100644
--- a/src/basic/env-util.c
+++ b/src/basic/env-util.c
@@ -8,6 +8,7 @@
 
 #include "alloc-util.h"
 #include "env-util.h"
+#include "errno-util.h"
 #include "escape.h"
 #include "extract-word.h"
 #include "macro.h"
@@ -31,7 +32,7 @@
         if (n <= 0)
                 return false;
 
-        if (e[0] >= '0' && e[0] <= '9')
+        if (ascii_isdigit(e[0]))
                 return false;
 
         /* POSIX says the overall size of the environment block cannot
@@ -95,8 +96,6 @@
 }
 
 bool strv_env_is_valid(char **e) {
-        char **p, **q;
-
         STRV_FOREACH(p, e) {
                 size_t k;
 
@@ -114,8 +113,6 @@
 }
 
 bool strv_env_name_is_valid(char **l) {
-        char **p;
-
         STRV_FOREACH(p, l) {
                 if (!env_name_is_valid(*p))
                         return false;
@@ -128,8 +125,6 @@
 }
 
 bool strv_env_name_or_assignment_is_valid(char **l) {
-        char **p;
-
         STRV_FOREACH(p, l) {
                 if (!env_assignment_is_valid(*p) && !env_name_is_valid(*p))
                         return false;
@@ -183,39 +178,51 @@
         return 0;
 }
 
-char **strv_env_merge(size_t n_lists, ...) {
-        _cleanup_strv_free_ char **ret = NULL;
-        size_t n = 0;
-        char **l, **k;
+char** _strv_env_merge(char **first, ...) {
+        _cleanup_strv_free_ char **merged = NULL;
+        char **k;
         va_list ap;
 
         /* Merges an arbitrary number of environment sets */
 
-        va_start(ap, n_lists);
-        for (size_t i = 0; i < n_lists; i++) {
+        size_t n = strv_length(first);
+
+        va_start(ap, first);
+        for (;;) {
+                char **l;
+
                 l = va_arg(ap, char**);
+                if (l == POINTER_MAX)
+                        break;
+
                 n += strv_length(l);
         }
         va_end(ap);
 
-        ret = new(char*, n+1);
-        if (!ret)
+        k = merged = new(char*, n + 1);
+        if (!merged)
+                return NULL;
+        merged[0] = NULL;
+
+        if (env_append(merged, &k, first) < 0)
                 return NULL;
 
-        *ret = NULL;
-        k = ret;
+        va_start(ap, first);
+        for (;;) {
+                char **l;
 
-        va_start(ap, n_lists);
-        for (size_t i = 0; i < n_lists; i++) {
                 l = va_arg(ap, char**);
-                if (env_append(ret, &k, l) < 0) {
+                if (l == POINTER_MAX)
+                        break;
+
+                if (env_append(merged, &k, l) < 0) {
                         va_end(ap);
                         return NULL;
                 }
         }
         va_end(ap);
 
-        return TAKE_PTR(ret);
+        return TAKE_PTR(merged);
 }
 
 static bool env_match(const char *t, const char *pattern) {
@@ -259,7 +266,7 @@
 
 char **strv_env_delete(char **x, size_t n_lists, ...) {
         size_t n, i = 0;
-        char **k, **r;
+        char **r;
         va_list ap;
 
         /* Deletes every entry from x that is mentioned in the other
@@ -274,7 +281,7 @@
         STRV_FOREACH(k, x) {
                 va_start(ap, n_lists);
                 for (size_t v = 0; v < n_lists; v++) {
-                        char **l, **j;
+                        char **l;
 
                         l = va_arg(ap, char**);
                         STRV_FOREACH(j, l)
@@ -366,7 +373,6 @@
 
 int strv_env_replace_consume(char ***l, char *p) {
         const char *t, *name;
-        char **f;
         int r;
 
         assert(p);
@@ -382,7 +388,7 @@
                 return -EINVAL;
         }
 
-        name = strndupa(p, t - p);
+        name = strndupa_safe(p, t - p);
 
         STRV_FOREACH(f, *l)
                 if (env_entry_has_name(*f, name)) {
@@ -409,6 +415,32 @@
         return strv_env_replace_consume(l, p);
 }
 
+int strv_env_replace_strdup_passthrough(char ***l, const char *assignment) {
+        /* Like strv_env_replace_strdup(), but pulls the variable from the environment of
+         * the calling program, if a variable name without value is specified.
+         */
+        char *p;
+
+        if (strchr(assignment, '=')) {
+                if (!env_assignment_is_valid(assignment))
+                        return -EINVAL;
+
+                p = strdup(assignment);
+        } else {
+                if (!env_name_is_valid(assignment))
+                        return -EINVAL;
+
+                /* If we can't find the variable in our environment, we will use
+                 * the empty string. This way "passthrough" is equivalent to passing
+                 * --setenv=FOO=$FOO in the shell. */
+                p = strjoin(assignment, "=", secure_getenv(assignment));
+        }
+        if (!p)
+                return -ENOMEM;
+
+        return strv_env_replace_consume(l, p);
+}
+
 int strv_env_assign(char ***l, const char *key, const char *value) {
         if (!env_name_is_valid(key))
                 return -EINVAL;
@@ -428,8 +460,6 @@
 }
 
 char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) {
-        char **i;
-
         assert(name);
 
         if (k <= 0)
@@ -443,7 +473,7 @@
         if (flags & REPLACE_ENV_USE_ENVIRONMENT) {
                 const char *t;
 
-                t = strndupa(name, k);
+                t = strndupa_safe(name, k);
                 return getenv(t);
         };
 
@@ -457,7 +487,7 @@
 }
 
 char *strv_env_pairs_get(char **l, const char *name) {
-        char **key, **value, *result = NULL;
+        char *result = NULL;
 
         assert(name);
 
@@ -469,7 +499,6 @@
 }
 
 char **strv_env_clean_with_callback(char **e, void (*invalid_callback)(const char *p, void *userdata), void *userdata) {
-        char **p, **q;
         int k = 0;
 
         STRV_FOREACH(p, e) {
@@ -663,7 +692,7 @@
 }
 
 char **replace_env_argv(char **argv, char **env) {
-        char **ret, **i;
+        char **ret;
         size_t k = 0, l = 0;
 
         l = strv_length(argv);
@@ -747,16 +776,25 @@
         return parse_boolean(e);
 }
 
+int getenv_uint64_secure(const char *p, uint64_t *ret) {
+        const char *e;
+
+        assert(p);
+
+        e = secure_getenv(p);
+        if (!e)
+                return -ENXIO;
+
+        return safe_atou64(e, ret);
+}
+
 int set_unset_env(const char *name, const char *value, bool overwrite) {
-        int r;
+        assert(name);
 
         if (value)
-                r = setenv(name, value, overwrite);
-        else
-                r = unsetenv(name);
-        if (r < 0)
-                return -errno;
-        return 0;
+                return RET_NERRNO(setenv(name, value, overwrite));
+
+        return RET_NERRNO(unsetenv(name));
 }
 
 int putenv_dup(const char *assignment, bool override) {
@@ -766,12 +804,10 @@
         if (!e)
                 return -EINVAL;
 
-        n = strndupa(assignment, e - assignment);
+        n = strndupa_safe(assignment, e - assignment);
 
         /* This is like putenv(), but uses setenv() so that our memory doesn't become part of environ[]. */
-        if (setenv(n, e + 1, override) < 0)
-                return -errno;
-        return 0;
+        return RET_NERRNO(setenv(n, e + 1, override));
 }
 
 int setenv_systemd_exec_pid(bool update_only) {
@@ -798,7 +834,6 @@
 int getenv_path_list(const char *name, char ***ret_paths) {
         _cleanup_strv_free_ char **l = NULL;
         const char *e;
-        char **p;
         int r;
 
         assert(name);
@@ -833,3 +868,37 @@
         *ret_paths = TAKE_PTR(l);
         return 1;
 }
+
+int getenv_steal_erase(const char *name, char **ret) {
+        _cleanup_(erase_and_freep) char *a = NULL;
+        char *e;
+
+        assert(name);
+
+        /* Reads an environment variable, makes a copy of it, erases its memory in the environment block and removes
+         * it from there. Usecase: reading passwords from the env block (which is a bad idea, but useful for
+         * testing, and given that people are likely going to misuse this, be thorough) */
+
+        e = getenv(name);
+        if (!e) {
+                if (ret)
+                        *ret = NULL;
+                return 0;
+        }
+
+        if (ret) {
+                a = strdup(e);
+                if (!a)
+                        return -ENOMEM;
+        }
+
+        string_erase(e);
+
+        if (unsetenv(name) < 0)
+                return -errno;
+
+        if (ret)
+                *ret = TAKE_PTR(a);
+
+        return 1;
+}
diff --git a/src/basic/env-util.h b/src/basic/env-util.h
index 1fbe7e4..b927ac7 100644
--- a/src/basic/env-util.h
+++ b/src/basic/env-util.h
@@ -39,13 +39,15 @@
 bool strv_env_name_is_valid(char **l);
 bool strv_env_name_or_assignment_is_valid(char **l);
 
-char **strv_env_merge(size_t n_lists, ...);
+char** _strv_env_merge(char **first, ...);
+#define strv_env_merge(first, ...) _strv_env_merge(first, __VA_ARGS__, POINTER_MAX)
 char **strv_env_delete(char **x, size_t n_lists, ...); /* New copy */
 
 char **strv_env_unset(char **l, const char *p); /* In place ... */
 char **strv_env_unset_many(char **l, ...) _sentinel_;
 int strv_env_replace_consume(char ***l, char *p); /* In place ... */
 int strv_env_replace_strdup(char ***l, const char *assignment);
+int strv_env_replace_strdup_passthrough(char ***l, const char *assignment);
 int strv_env_assign(char ***l, const char *key, const char *value);
 
 char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) _pure_;
@@ -55,6 +57,8 @@
 int getenv_bool(const char *p);
 int getenv_bool_secure(const char *p);
 
+int getenv_uint64_secure(const char *p, uint64_t *ret);
+
 /* Like setenv, but calls unsetenv if value == NULL. */
 int set_unset_env(const char *name, const char *value, bool overwrite);
 
@@ -66,3 +70,5 @@
 /* Parses and does sanity checks on an environment variable containing
  * PATH-like colon-separated absolute paths */
 int getenv_path_list(const char *name, char ***ret_paths);
+
+int getenv_steal_erase(const char *name, char **ret);
diff --git a/src/basic/errno-to-name.awk b/src/basic/errno-to-name.awk
index 6b18a90..8442124 100644
--- a/src/basic/errno-to-name.awk
+++ b/src/basic/errno-to-name.awk
@@ -3,7 +3,7 @@
 BEGIN{
         print "static const char* const errno_names[] = { "
 }
-!/EDEADLOCK/ && !/EWOULDBLOCK/ && !/ENOTSUP/ {
+!/(EDEADLOCK|EWOULDBLOCK|ENOTSUP)/ {
         printf "        [%s] = \"%s\",\n", $1, $1
 }
 END{
diff --git a/src/basic/errno-util.h b/src/basic/errno-util.h
index 3f2d0af..091f99c 100644
--- a/src/basic/errno-util.h
+++ b/src/basic/errno-util.h
@@ -6,6 +6,21 @@
 
 #include "macro.h"
 
+/* strerror(3) says that glibc uses a maximum length of 1024 bytes. */
+#define ERRNO_BUF_LEN 1024
+
+/* Note: the lifetime of the compound literal is the immediately surrounding block,
+ * see C11 §6.5.2.5, and
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks
+ *
+ * Note that we use the GNU variant of strerror_r() here. */
+#define STRERROR(errnum) strerror_r(abs(errnum), (char[ERRNO_BUF_LEN]){}, ERRNO_BUF_LEN)
+
+/* A helper to print an error message or message for functions that return 0 on EOF.
+ * Note that we can't use ({ … }) to define a temporary variable, so errnum is
+ * evaluated twice. */
+#define STRERROR_OR_EOF(errnum) ((errnum) != 0 ? STRERROR(errnum) : "Unexpected EOF")
+
 static inline void _reset_errno_(int *saved_errno) {
         if (*saved_errno < 0) /* Invalidated by UNPROTECT_ERRNO? */
                 return;
@@ -13,7 +28,7 @@
         errno = *saved_errno;
 }
 
-#define PROTECT_ERRNO                                                   \
+#define PROTECT_ERRNO                           \
         _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
 
 #define UNPROTECT_ERRNO                         \
@@ -22,6 +37,10 @@
                 _saved_errno_ = -1;             \
         } while (false)
 
+#define LOCAL_ERRNO(value)                      \
+        PROTECT_ERRNO;                          \
+        errno = abs(value)
+
 static inline int negative_errno(void) {
         /* This helper should be used to shut up gcc if you know 'errno' is
          * negative. Instead of "return -errno;", use "return negative_errno();"
@@ -31,9 +50,27 @@
         return -errno;
 }
 
-static inline const char *strerror_safe(int error) {
-        /* 'safe' here does NOT mean thread safety. */
-        return strerror(abs(error)); /* lgtm [cpp/potentially-dangerous-function] */
+static inline int RET_NERRNO(int ret) {
+
+        /* Helper to wrap system calls in to make them return negative errno errors. This brings system call
+         * error handling in sync with how we usually handle errors in our own code, i.e. with immediate
+         * returning of negative errno. Usage is like this:
+         *
+         *     …
+         *     r = RET_NERRNO(unlink(t));
+         *     …
+         *
+         * or
+         *
+         *     …
+         *     fd = RET_NERRNO(open("/etc/fstab", O_RDONLY|O_CLOEXEC));
+         *     …
+         */
+
+        if (ret < 0)
+                return negative_errno();
+
+        return ret;
 }
 
 static inline int errno_or_else(int fallback) {
@@ -47,6 +84,13 @@
         return -abs(fallback);
 }
 
+/* For send()/recv() or read()/write(). */
+static inline bool ERRNO_IS_TRANSIENT(int r) {
+        return IN_SET(abs(r),
+                      EAGAIN,
+                      EINTR);
+}
+
 /* Hint #1: ENETUNREACH happens if we try to connect to "non-existing" special IP addresses, such as ::5.
  *
  * Hint #2: The kernel sends e.g., EHOSTUNREACH or ENONET to userspace in some ICMP error cases.  See the
@@ -77,10 +121,8 @@
  * the accept(2) man page. */
 static inline bool ERRNO_IS_ACCEPT_AGAIN(int r) {
         return ERRNO_IS_DISCONNECT(r) ||
-                IN_SET(abs(r),
-                       EAGAIN,
-                       EINTR,
-                       EOPNOTSUPP);
+                ERRNO_IS_TRANSIENT(r) ||
+                abs(r) == EOPNOTSUPP;
 }
 
 /* Resource exhaustion, could be our fault or general system trouble */
@@ -110,10 +152,25 @@
                       EPERM);
 }
 
-/* Three difference errors for "not enough disk space" */
+/* Three different errors for "not enough disk space" */
 static inline bool ERRNO_IS_DISK_SPACE(int r) {
         return IN_SET(abs(r),
                       ENOSPC,
                       EDQUOT,
                       EFBIG);
 }
+
+/* Three different errors for "this device does not quite exist" */
+static inline bool ERRNO_IS_DEVICE_ABSENT(int r) {
+        return IN_SET(abs(r),
+                      ENODEV,
+                      ENXIO,
+                      ENOENT);
+}
+
+/* Quite often we want to handle cases where the backing FS doesn't support extended attributes at all and
+ * where it simply doesn't have the requested xattr the same way */
+static inline bool ERRNO_IS_XATTR_ABSENT(int r) {
+        return abs(r) == ENODATA ||
+                ERRNO_IS_NOT_SUPPORTED(r);
+}
diff --git a/src/basic/escape.c b/src/basic/escape.c
index fcade5a..d2cb1c7 100644
--- a/src/basic/escape.c
+++ b/src/basic/escape.c
@@ -289,10 +289,12 @@
         return r;
 }
 
-int cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret) {
-        char *r, *t;
+ssize_t cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret) {
+        _cleanup_free_ char *ans = NULL;
+        char *t;
         const char *f;
         size_t pl;
+        int r;
 
         assert(s);
         assert(ret);
@@ -301,18 +303,17 @@
 
         pl = strlen_ptr(prefix);
 
-        r = new(char, pl+length+1);
-        if (!r)
+        ans = new(char, pl+length+1);
+        if (!ans)
                 return -ENOMEM;
 
         if (prefix)
-                memcpy(r, prefix, pl);
+                memcpy(ans, prefix, pl);
 
-        for (f = s, t = r + pl; f < s + length; f++) {
+        for (f = s, t = ans + pl; f < s + length; f++) {
                 size_t remaining;
                 bool eight_bit = false;
                 char32_t u;
-                int k;
 
                 remaining = s + length - f;
                 assert(remaining > 0);
@@ -330,23 +331,21 @@
                                 continue;
                         }
 
-                        free(r);
                         return -EINVAL;
                 }
 
-                k = cunescape_one(f + 1, remaining - 1, &u, &eight_bit, flags & UNESCAPE_ACCEPT_NUL);
-                if (k < 0) {
+                r = cunescape_one(f + 1, remaining - 1, &u, &eight_bit, flags & UNESCAPE_ACCEPT_NUL);
+                if (r < 0) {
                         if (flags & UNESCAPE_RELAX) {
                                 /* Invalid escape code, let's take it literal then */
                                 *(t++) = '\\';
                                 continue;
                         }
 
-                        free(r);
-                        return k;
+                        return r;
                 }
 
-                f += k;
+                f += r;
                 if (eight_bit)
                         /* One byte? Set directly as specified */
                         *(t++) = u;
@@ -357,8 +356,9 @@
 
         *t = 0;
 
-        *ret = r;
-        return t - r;
+        assert(t >= ans); /* Let static analyzers know that the answer is non-negative. */
+        *ret = TAKE_PTR(ans);
+        return t - *ret;
 }
 
 char* xescape_full(const char *s, const char *bad, size_t console_width, XEscapeFlags flags) {
@@ -445,44 +445,51 @@
 }
 
 char* octescape(const char *s, size_t len) {
-        char *r, *t;
-        const char *f;
+        char *buf, *t;
 
-        /* Escapes all chars in bad, in addition to \ and " chars,
-         * in \nnn style escaping. */
+        /* Escapes all chars in bad, in addition to \ and " chars, in \nnn style escaping. */
 
-        r = new(char, len * 4 + 1);
-        if (!r)
+        assert(s || len == 0);
+
+        t = buf = new(char, len * 4 + 1);
+        if (!buf)
                 return NULL;
 
-        for (f = s, t = r; f < s + len; f++) {
+        for (size_t i = 0; i < len; i++) {
+                uint8_t u = (uint8_t) s[i];
 
-                if (*f < ' ' || *f >= 127 || IN_SET(*f, '\\', '"')) {
+                if (u < ' ' || u >= 127 || IN_SET(u, '\\', '"')) {
                         *(t++) = '\\';
-                        *(t++) = '0' + (*f >> 6);
-                        *(t++) = '0' + ((*f >> 3) & 8);
-                        *(t++) = '0' + (*f & 8);
+                        *(t++) = '0' + (u >> 6);
+                        *(t++) = '0' + ((u >> 3) & 7);
+                        *(t++) = '0' + (u & 7);
                 } else
-                        *(t++) = *f;
+                        *(t++) = u;
         }
 
         *t = 0;
-
-        return r;
-
+        return buf;
 }
 
 static char* strcpy_backslash_escaped(char *t, const char *s, const char *bad) {
         assert(bad);
+        assert(t);
+        assert(s);
 
-        for (; *s; s++)
-                if (char_is_cc(*s))
-                        t += cescape_char(*s, t);
-                else {
+        while (*s) {
+                int l = utf8_encoded_valid_unichar(s, SIZE_MAX);
+
+                if (char_is_cc(*s) || l < 0)
+                        t += cescape_char(*(s++), t);
+                else if (l == 1) {
                         if (*s == '\\' || strchr(bad, *s))
                                 *(t++) = '\\';
-                        *(t++) = *s;
+                        *(t++) = *(s++);
+                } else {
+                        t = mempcpy(t, s, l);
+                        s += l;
                 }
+        }
 
         return t;
 }
@@ -511,11 +518,16 @@
         if (FLAGS_SET(flags, SHELL_ESCAPE_EMPTY) && isempty(s))
                 return strdup("\"\""); /* We don't use $'' here in the POSIX mode. "" is fine too. */
 
-        for (p = s; *p; p++)
-                if (char_is_cc(*p) ||
+        for (p = s; *p; ) {
+                int l = utf8_encoded_valid_unichar(p, SIZE_MAX);
+
+                if (char_is_cc(*p) || l < 0 ||
                     strchr(WHITESPACE SHELL_NEED_QUOTES, *p))
                         break;
 
+                p += l;
+        }
+
         if (!*p)
                 return strdup(s);
 
@@ -544,16 +556,15 @@
         return str_realloc(buf);
 }
 
-char* quote_command_line(char **argv) {
+char* quote_command_line(char **argv, ShellEscapeFlags flags) {
         _cleanup_free_ char *result = NULL;
 
         assert(argv);
 
-        char **a;
         STRV_FOREACH(a, argv) {
                 _cleanup_free_ char *t = NULL;
 
-                t = shell_maybe_quote(*a, SHELL_ESCAPE_EMPTY);
+                t = shell_maybe_quote(*a, flags);
                 if (!t)
                         return NULL;
 
@@ -561,5 +572,5 @@
                         return NULL;
         }
 
-        return TAKE_PTR(result);
+        return str_realloc(TAKE_PTR(result));
 }
diff --git a/src/basic/escape.h b/src/basic/escape.h
index e9d48d2..318da6f 100644
--- a/src/basic/escape.h
+++ b/src/basic/escape.h
@@ -45,14 +45,15 @@
 char* cescape_length(const char *s, size_t n);
 int cescape_char(char c, char *buf);
 
-int cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret);
-static inline int cunescape_length(const char *s, size_t length, UnescapeFlags flags, char **ret) {
+int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit, bool accept_nul);
+
+ssize_t cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret);
+static inline ssize_t cunescape_length(const char *s, size_t length, UnescapeFlags flags, char **ret) {
         return cunescape_length_with_prefix(s, length, NULL, flags, ret);
 }
-static inline int cunescape(const char *s, UnescapeFlags flags, char **ret) {
+static inline ssize_t cunescape(const char *s, UnescapeFlags flags, char **ret) {
         return cunescape_length(s, strlen(s), flags, ret);
 }
-int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit, bool accept_nul);
 
 typedef enum XEscapeFlags {
         XESCAPE_8_BIT          = 1 << 0,
@@ -68,4 +69,4 @@
 
 char* shell_escape(const char *s, const char *bad);
 char* shell_maybe_quote(const char *s, ShellEscapeFlags flags);
-char* quote_command_line(char **argv);
+char* quote_command_line(char **argv, ShellEscapeFlags flags);
diff --git a/src/basic/ether-addr-util.c b/src/basic/ether-addr-util.c
index dc5b5b8..0a6a54f 100644
--- a/src/basic/ether-addr-util.c
+++ b/src/basic/ether-addr-util.c
@@ -11,7 +11,11 @@
 #include "macro.h"
 #include "string-util.h"
 
-char* hw_addr_to_string(const struct hw_addr_data *addr, char buffer[HW_ADDR_TO_STRING_MAX]) {
+char *hw_addr_to_string_full(
+                const struct hw_addr_data *addr,
+                HardwareAddressToStringFlags flags,
+                char buffer[static HW_ADDR_TO_STRING_MAX]) {
+
         assert(addr);
         assert(buffer);
         assert(addr->length <= HW_ADDR_MAX_SIZE);
@@ -19,13 +23,25 @@
         for (size_t i = 0, j = 0; i < addr->length; i++) {
                 buffer[j++] = hexchar(addr->bytes[i] >> 4);
                 buffer[j++] = hexchar(addr->bytes[i] & 0x0f);
-                buffer[j++] = ':';
+                if (!FLAGS_SET(flags, HW_ADDR_TO_STRING_NO_COLON))
+                        buffer[j++] = ':';
         }
 
-        buffer[addr->length > 0 ? addr->length * 3 - 1 : 0] = '\0';
+        buffer[addr->length == 0 || FLAGS_SET(flags, HW_ADDR_TO_STRING_NO_COLON) ?
+               addr->length * 2 :
+               addr->length * 3 - 1] = '\0';
         return buffer;
 }
 
+struct hw_addr_data *hw_addr_set(struct hw_addr_data *addr, const uint8_t *bytes, size_t length) {
+        assert(addr);
+        assert(length <= HW_ADDR_MAX_SIZE);
+
+        addr->length = length;
+        memcpy_safe(addr->bytes, bytes, length);
+        return addr;
+}
+
 int hw_addr_compare(const struct hw_addr_data *a, const struct hw_addr_data *b) {
         int r;
 
@@ -39,7 +55,7 @@
         return memcmp(a->bytes, b->bytes, a->length);
 }
 
-static void hw_addr_hash_func(const struct hw_addr_data *p, struct siphash *state) {
+void hw_addr_hash_func(const struct hw_addr_data *p, struct siphash *state) {
         assert(p);
         assert(state);
 
@@ -48,6 +64,7 @@
 }
 
 DEFINE_HASH_OPS(hw_addr_hash_ops, struct hw_addr_data, hw_addr_hash_func, hw_addr_compare);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(hw_addr_hash_ops_free, struct hw_addr_data, hw_addr_hash_func, hw_addr_compare, free);
 
 char* ether_addr_to_string(const struct ether_addr *addr, char buffer[ETHER_ADDR_TO_STRING_MAX]) {
         assert(addr);
@@ -93,75 +110,163 @@
 }
 
 DEFINE_HASH_OPS(ether_addr_hash_ops, struct ether_addr, ether_addr_hash_func, ether_addr_compare);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(ether_addr_hash_ops_free, struct ether_addr, ether_addr_hash_func, ether_addr_compare, free);
 
-int ether_addr_from_string(const char *s, struct ether_addr *ret) {
-        size_t pos = 0, n, field;
-        char sep = '\0';
-        const char *hex = HEXDIGITS, *hexoff;
-        size_t x;
-        bool touched;
+static int parse_hw_addr_one_field(const char **s, char sep, size_t len, uint8_t *buf) {
+        const char *hex = HEXDIGITS, *p;
+        uint16_t data = 0;
+        bool cont;
 
-#define parse_fields(v)                                         \
-        for (field = 0; field < ELEMENTSOF(v); field++) {       \
-                touched = false;                                \
-                for (n = 0; n < (2 * sizeof(v[0])); n++) {      \
-                        if (s[pos] == '\0')                     \
-                                break;                          \
-                        hexoff = strchr(hex, s[pos]);           \
-                        if (!hexoff)                            \
-                                break;                          \
-                        assert(hexoff >= hex);                  \
-                        x = hexoff - hex;                       \
-                        if (x >= 16)                            \
-                                x -= 6; /* A-F */               \
-                        assert(x < 16);                         \
-                        touched = true;                         \
-                        v[field] <<= 4;                         \
-                        v[field] += x;                          \
-                        pos++;                                  \
-                }                                               \
-                if (!touched)                                   \
-                        return -EINVAL;                         \
-                if (field < (ELEMENTSOF(v)-1)) {                \
-                        if (s[pos] != sep)                      \
-                                return -EINVAL;                 \
-                        else                                    \
-                                pos++;                          \
-                }                                               \
+        assert(s);
+        assert(*s);
+        assert(IN_SET(len, 1, 2));
+        assert(buf);
+
+        p = *s;
+
+        for (size_t i = 0; i < len * 2; i++) {
+                const char *hexoff;
+                size_t x;
+
+                if (*p == '\0' || *p == sep) {
+                        if (i == 0)
+                                return -EINVAL;
+                        break;
+                }
+
+                hexoff = strchr(hex, *p);
+                if (!hexoff)
+                        return -EINVAL;
+
+                assert(hexoff >= hex);
+                x = hexoff - hex;
+                if (x >= 16)
+                        x -= 6; /* A-F */
+
+                assert(x < 16);
+                data <<= 4;
+                data += x;
+
+                p++;
         }
 
+        if (*p != '\0' && *p != sep)
+                return -EINVAL;
+
+        switch (len) {
+        case 1:
+                buf[0] = data;
+                break;
+        case 2:
+                buf[0] = (data & 0xff00) >> 8;
+                buf[1] = data & 0xff;
+                break;
+        default:
+                assert_not_reached();
+        }
+
+        cont = *p == sep;
+        *s = p + cont;
+        return cont;
+}
+
+int parse_hw_addr_full(const char *s, size_t expected_len, struct hw_addr_data *ret) {
+        size_t field_size, max_len, len = 0;
+        uint8_t bytes[HW_ADDR_MAX_SIZE];
+        char sep;
+        int r;
+
+        assert(s);
+        assert(expected_len <= HW_ADDR_MAX_SIZE || expected_len == SIZE_MAX);
+        assert(ret);
+
+        /* This accepts the following formats:
+         *
+         * Dot separated 2 bytes format: xxyy.zzaa.bbcc
+         * Colon separated 1 bytes format: xx:yy:zz:aa:bb:cc
+         * Hyphen separated 1 bytes format: xx-yy-zz-aa-bb-cc
+         *
+         * Moreover, if expected_len == 0, 4, or 16, this also accepts:
+         *
+         * IPv4 format: used by IPv4 tunnel, e.g. ipgre
+         * IPv6 format: used by IPv6 tunnel, e.g. ip6gre
+         *
+         * The expected_len argument controls the length of acceptable addresses:
+         *
+         * 0: accepts 4 (AF_INET), 16 (AF_INET6), 6 (ETH_ALEN), or 20 (INFINIBAND_ALEN).
+         * SIZE_MAX: accepts arbitrary length, but at least one separator must be included.
+         * Otherwise: accepts addresses with matching length.
+         */
+
+        if (IN_SET(expected_len, 0, sizeof(struct in_addr), sizeof(struct in6_addr))) {
+                union in_addr_union a;
+                int family;
+
+                if (expected_len == 0)
+                        r = in_addr_from_string_auto(s, &family, &a);
+                else {
+                        family = expected_len == sizeof(struct in_addr) ? AF_INET : AF_INET6;
+                        r = in_addr_from_string(family, s, &a);
+                }
+                if (r >= 0) {
+                        ret->length = FAMILY_ADDRESS_SIZE(family);
+                        memcpy(ret->bytes, a.bytes, ret->length);
+                        return 0;
+                }
+        }
+
+        max_len =
+                expected_len == 0 ? INFINIBAND_ALEN :
+                expected_len == SIZE_MAX ? HW_ADDR_MAX_SIZE : expected_len;
+        sep = s[strspn(s, HEXDIGITS)];
+
+        if (sep == '.')
+                field_size = 2;
+        else if (IN_SET(sep, ':', '-'))
+                field_size = 1;
+        else
+                return -EINVAL;
+
+        if (max_len % field_size != 0)
+                return -EINVAL;
+
+        for (size_t i = 0; i < max_len / field_size; i++) {
+                r = parse_hw_addr_one_field(&s, sep, field_size, bytes + i * field_size);
+                if (r < 0)
+                        return r;
+                if (r == 0) {
+                        len = (i + 1) * field_size;
+                        break;
+                }
+        }
+
+        if (len == 0)
+                return -EINVAL;
+
+        if (expected_len == 0) {
+                if (!IN_SET(len, 4, 16, ETH_ALEN, INFINIBAND_ALEN))
+                        return -EINVAL;
+        } else if (expected_len != SIZE_MAX) {
+                if (len != expected_len)
+                        return -EINVAL;
+        }
+
+        ret->length = len;
+        memcpy(ret->bytes, bytes, ret->length);
+        return 0;
+}
+
+int parse_ether_addr(const char *s, struct ether_addr *ret) {
+        struct hw_addr_data a;
+        int r;
+
         assert(s);
         assert(ret);
 
-        s += strspn(s, WHITESPACE);
-        sep = s[strspn(s, hex)];
+        r = parse_hw_addr_full(s, ETH_ALEN, &a);
+        if (r < 0)
+                return r;
 
-        if (sep == '.') {
-                uint16_t shorts[3] = { 0 };
-
-                parse_fields(shorts);
-
-                if (s[pos] != '\0')
-                        return -EINVAL;
-
-                for (n = 0; n < ELEMENTSOF(shorts); n++) {
-                        ret->ether_addr_octet[2*n] = ((shorts[n] & (uint16_t)0xff00) >> 8);
-                        ret->ether_addr_octet[2*n + 1] = (shorts[n] & (uint16_t)0x00ff);
-                }
-
-        } else if (IN_SET(sep, ':', '-')) {
-                struct ether_addr out = ETHER_ADDR_NULL;
-
-                parse_fields(out.ether_addr_octet);
-
-                if (s[pos] != '\0')
-                        return -EINVAL;
-
-                for (n = 0; n < ELEMENTSOF(out.ether_addr_octet); n++)
-                        ret->ether_addr_octet[n] = out.ether_addr_octet[n];
-
-        } else
-                return -EINVAL;
-
+        *ret = a.ether;
         return 0;
 }
diff --git a/src/basic/ether-addr-util.h b/src/basic/ether-addr-util.h
index 6344791..83ed77d 100644
--- a/src/basic/ether-addr-util.h
+++ b/src/basic/ether-addr-util.h
@@ -6,6 +6,9 @@
 #include <stdbool.h>
 
 #include "hash-funcs.h"
+#include "in-addr-util.h"
+#include "macro.h"
+#include "memory-util.h"
 
 /* This is MAX_ADDR_LEN as defined in linux/netdevice.h, but net/if_arp.h
  * defines a macro of the same name with a much lower size. */
@@ -16,27 +19,53 @@
         union {
                 struct ether_addr ether;
                 uint8_t infiniband[INFINIBAND_ALEN];
+                struct in_addr in;
+                struct in6_addr in6;
                 uint8_t bytes[HW_ADDR_MAX_SIZE];
         };
 };
 
-#define HW_ADDR_TO_STRING_MAX (3*HW_ADDR_MAX_SIZE)
-char* hw_addr_to_string(const struct hw_addr_data *addr, char buffer[HW_ADDR_TO_STRING_MAX]);
+int parse_hw_addr_full(const char *s, size_t expected_len, struct hw_addr_data *ret);
+static inline int parse_hw_addr(const char *s, struct hw_addr_data *ret) {
+        return parse_hw_addr_full(s, 0, ret);
+}
+int parse_ether_addr(const char *s, struct ether_addr *ret);
 
-/* Use only as function argument, never stand-alone! */
-#define HW_ADDR_TO_STR(hw_addr) hw_addr_to_string((hw_addr), (char[HW_ADDR_TO_STRING_MAX]){})
+typedef enum HardwareAddressToStringFlags {
+        HW_ADDR_TO_STRING_NO_COLON = 1 << 0,
+} HardwareAddressToStringFlags;
+
+#define HW_ADDR_TO_STRING_MAX (3*HW_ADDR_MAX_SIZE)
+char *hw_addr_to_string_full(
+                const struct hw_addr_data *addr,
+                HardwareAddressToStringFlags flags,
+                char buffer[static HW_ADDR_TO_STRING_MAX]);
+static inline char *hw_addr_to_string(const struct hw_addr_data *addr, char buffer[static HW_ADDR_TO_STRING_MAX]) {
+        return hw_addr_to_string_full(addr, 0, buffer);
+}
+
+/* Note: the lifetime of the compound literal is the immediately surrounding block,
+ * see C11 §6.5.2.5, and
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
+#define HW_ADDR_TO_STR_FULL(hw_addr, flags) hw_addr_to_string_full((hw_addr), flags, (char[HW_ADDR_TO_STRING_MAX]){})
+#define HW_ADDR_TO_STR(hw_addr) HW_ADDR_TO_STR_FULL(hw_addr, 0)
 
 #define HW_ADDR_NULL ((const struct hw_addr_data){})
 
+struct hw_addr_data *hw_addr_set(struct hw_addr_data *addr, const uint8_t *bytes, size_t length);
+
+void hw_addr_hash_func(const struct hw_addr_data *p, struct siphash *state);
 int hw_addr_compare(const struct hw_addr_data *a, const struct hw_addr_data *b);
 static inline bool hw_addr_equal(const struct hw_addr_data *a, const struct hw_addr_data *b) {
         return hw_addr_compare(a, b) == 0;
 }
 static inline bool hw_addr_is_null(const struct hw_addr_data *addr) {
-        return hw_addr_equal(addr, &HW_ADDR_NULL);
+        assert(addr);
+        return addr->length == 0 || memeqzero(addr->bytes, addr->length);
 }
 
 extern const struct hash_ops hw_addr_hash_ops;
+extern const struct hash_ops hw_addr_hash_ops_free;
 
 #define ETHER_ADDR_FORMAT_STR "%02X%02X%02X%02X%02X%02X"
 #define ETHER_ADDR_FORMAT_VAL(x) (x).ether_addr_octet[0], (x).ether_addr_octet[1], (x).ether_addr_octet[2], (x).ether_addr_octet[3], (x).ether_addr_octet[4], (x).ether_addr_octet[5]
@@ -58,6 +87,29 @@
         return ether_addr_equal(addr, &ETHER_ADDR_NULL);
 }
 
-int ether_addr_from_string(const char *s, struct ether_addr *ret);
+static inline bool ether_addr_is_broadcast(const struct ether_addr *addr) {
+        assert(addr);
+        return memeqbyte(0xff, addr->ether_addr_octet, ETH_ALEN);
+}
+
+static inline bool ether_addr_is_multicast(const struct ether_addr *addr) {
+        assert(addr);
+        return FLAGS_SET(addr->ether_addr_octet[0], 0x01);
+}
+
+static inline bool ether_addr_is_unicast(const struct ether_addr *addr) {
+        return !ether_addr_is_multicast(addr);
+}
+
+static inline bool ether_addr_is_local(const struct ether_addr *addr) {
+        /* Determine if the Ethernet address is locally-assigned one (IEEE 802) */
+        assert(addr);
+        return FLAGS_SET(addr->ether_addr_octet[0], 0x02);
+}
+
+static inline bool ether_addr_is_global(const struct ether_addr *addr) {
+        return !ether_addr_is_local(addr);
+}
 
 extern const struct hash_ops ether_addr_hash_ops;
+extern const struct hash_ops ether_addr_hash_ops_free;
diff --git a/src/basic/fd-util.c b/src/basic/fd-util.c
index 008f474..4d6d01c 100644
--- a/src/basic/fd-util.c
+++ b/src/basic/fd-util.c
@@ -2,7 +2,9 @@
 
 #include <errno.h>
 #include <fcntl.h>
-#include <linux/btrfs.h>
+#if WANT_LINUX_FS_H
+#include <linux/fs.h>
+#endif
 #include <linux/magic.h>
 #include <sys/ioctl.h>
 #include <sys/resource.h>
@@ -17,6 +19,7 @@
 #include "io-util.h"
 #include "macro.h"
 #include "missing_fcntl.h"
+#include "missing_fs.h"
 #include "missing_syscall.h"
 #include "parse-util.h"
 #include "path-util.h"
@@ -26,7 +29,6 @@
 #include "stat-util.h"
 #include "stdio-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 /* The maximum number of iterations in the loop to close descriptors in the fallback case
  * when /proc/self/fd/ is inaccessible. */
@@ -54,11 +56,9 @@
 }
 
 int safe_close(int fd) {
-
         /*
-         * Like close_nointr() but cannot fail. Guarantees errno is
-         * unchanged. Is a NOP with negative fds passed, and returns
-         * -1, so that it can be used in this syntax:
+         * Like close_nointr() but cannot fail. Guarantees errno is unchanged. Is a noop for negative fds,
+         * and returns -EBADF, so that it can be used in this syntax:
          *
          * fd = safe_close(fd);
          */
@@ -74,7 +74,7 @@
                 assert_se(close_nointr(fd) != -EBADF);
         }
 
-        return -1;
+        return -EBADF;
 }
 
 void safe_close_pair(int p[static 2]) {
@@ -152,10 +152,7 @@
         if (nflags == flags)
                 return 0;
 
-        if (fcntl(fd, F_SETFL, nflags) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(fcntl(fd, F_SETFL, nflags));
 }
 
 int fd_cloexec(int fd, bool cloexec) {
@@ -171,23 +168,43 @@
         if (nflags == flags)
                 return 0;
 
-        if (fcntl(fd, F_SETFD, nflags) < 0)
-                return -errno;
+        return RET_NERRNO(fcntl(fd, F_SETFD, nflags));
+}
 
-        return 0;
+int fd_cloexec_many(const int fds[], size_t n_fds, bool cloexec) {
+        int ret = 0, r;
+
+        assert(n_fds == 0 || fds);
+
+        for (size_t i = 0; i < n_fds; i++) {
+                if (fds[i] < 0) /* Skip gracefully over already invalidated fds */
+                        continue;
+
+                r = fd_cloexec(fds[i], cloexec);
+                if (r < 0 && ret >= 0) /* Continue going, but return first error */
+                        ret = r;
+                else
+                        ret = 1; /* report if we did anything */
+        }
+
+        return ret;
 }
 
 _pure_ static bool fd_in_set(int fd, const int fdset[], size_t n_fdset) {
         assert(n_fdset == 0 || fdset);
 
-        for (size_t i = 0; i < n_fdset; i++)
+        for (size_t i = 0; i < n_fdset; i++) {
+                if (fdset[i] < 0)
+                        continue;
+
                 if (fdset[i] == fd)
                         return true;
+        }
 
         return false;
 }
 
-static int get_max_fd(void) {
+int get_max_fd(void) {
         struct rlimit rl;
         rlim_t m;
 
@@ -208,132 +225,195 @@
         return (int) (m - 1);
 }
 
+static int close_all_fds_frugal(const int except[], size_t n_except) {
+        int max_fd, r = 0;
+
+        assert(n_except == 0 || except);
+
+        /* This is the inner fallback core of close_all_fds(). This never calls malloc() or opendir() or so
+         * and hence is safe to be called in signal handler context. Most users should call close_all_fds(),
+         * but when we assume we are called from signal handler context, then use this simpler call
+         * instead. */
+
+        max_fd = get_max_fd();
+        if (max_fd < 0)
+                return max_fd;
+
+        /* Refuse to do the loop over more too many elements. It's better to fail immediately than to
+         * spin the CPU for a long time. */
+        if (max_fd > MAX_FD_LOOP_LIMIT)
+                return log_debug_errno(SYNTHETIC_ERRNO(EPERM),
+                                       "Refusing to loop over %d potential fds.",
+                                       max_fd);
+
+        for (int fd = 3; fd >= 0; fd = fd < max_fd ? fd + 1 : -EBADF) {
+                int q;
+
+                if (fd_in_set(fd, except, n_except))
+                        continue;
+
+                q = close_nointr(fd);
+                if (q < 0 && q != -EBADF && r >= 0)
+                        r = q;
+        }
+
+        return r;
+}
+
+static bool have_close_range = true; /* Assume we live in the future */
+
+static int close_all_fds_special_case(const int except[], size_t n_except) {
+        assert(n_except == 0 || except);
+
+        /* Handles a few common special cases separately, since they are common and can be optimized really
+         * nicely, since we won't need sorting for them. Returns > 0 if the special casing worked, 0
+         * otherwise. */
+
+        if (!have_close_range)
+                return 0;
+
+        if (n_except == 1 && except[0] < 0) /* Minor optimization: if we only got one fd, and it's invalid,
+                                             * we got none */
+                n_except = 0;
+
+        switch (n_except) {
+
+        case 0:
+                /* Close everything. Yay! */
+
+                if (close_range(3, -1, 0) >= 0)
+                        return 1;
+
+                if (ERRNO_IS_NOT_SUPPORTED(errno) || ERRNO_IS_PRIVILEGE(errno)) {
+                        have_close_range = false;
+                        return 0;
+                }
+
+                return -errno;
+
+        case 1:
+                /* Close all but exactly one, then we don't need no sorting. This is a pretty common
+                 * case, hence let's handle it specially. */
+
+                if ((except[0] <= 3 || close_range(3, except[0]-1, 0) >= 0) &&
+                    (except[0] >= INT_MAX || close_range(MAX(3, except[0]+1), -1, 0) >= 0))
+                        return 1;
+
+                if (ERRNO_IS_NOT_SUPPORTED(errno) || ERRNO_IS_PRIVILEGE(errno)) {
+                        have_close_range = false;
+                        return 0;
+                }
+
+                return -errno;
+
+        default:
+                return 0;
+        }
+}
+
+int close_all_fds_without_malloc(const int except[], size_t n_except) {
+        int r;
+
+        assert(n_except == 0 || except);
+
+        r = close_all_fds_special_case(except, n_except);
+        if (r < 0)
+                return r;
+        if (r > 0) /* special case worked! */
+                return 0;
+
+        return close_all_fds_frugal(except, n_except);
+}
+
 int close_all_fds(const int except[], size_t n_except) {
-        static bool have_close_range = true; /* Assume we live in the future */
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0;
 
         assert(n_except == 0 || except);
 
+        r = close_all_fds_special_case(except, n_except);
+        if (r < 0)
+                return r;
+        if (r > 0) /* special case worked! */
+                return 0;
+
         if (have_close_range) {
+                _cleanup_free_ int *sorted_malloc = NULL;
+                size_t n_sorted;
+                int *sorted;
+
                 /* In the best case we have close_range() to close all fds between a start and an end fd,
                  * which we can use on the "inverted" exception array, i.e. all intervals between all
                  * adjacent pairs from the sorted exception array. This changes loop complexity from O(n)
                  * where n is number of open fds to O(m⋅log(m)) where m is the number of fds to keep
                  * open. Given that we assume n ≫ m that's preferable to us. */
 
-                if (n_except == 0) {
-                        /* Close everything. Yay! */
+                assert(n_except < SIZE_MAX);
+                n_sorted = n_except + 1;
 
-                        if (close_range(3, -1, 0) >= 0)
-                                return 1;
+                if (n_sorted > 64) /* Use heap for large numbers of fds, stack otherwise */
+                        sorted = sorted_malloc = new(int, n_sorted);
+                else
+                        sorted = newa(int, n_sorted);
 
-                        if (!ERRNO_IS_NOT_SUPPORTED(errno) && !ERRNO_IS_PRIVILEGE(errno))
-                                return -errno;
+                if (sorted) {
+                        memcpy(sorted, except, n_except * sizeof(int));
 
-                        have_close_range = false;
-                } else {
-                        _cleanup_free_ int *sorted_malloc = NULL;
-                        size_t n_sorted;
-                        int *sorted;
+                        /* Let's add fd 2 to the list of fds, to simplify the loop below, as this
+                         * allows us to cover the head of the array the same way as the body */
+                        sorted[n_sorted-1] = 2;
 
-                        assert(n_except < SIZE_MAX);
-                        n_sorted = n_except + 1;
+                        typesafe_qsort(sorted, n_sorted, cmp_int);
 
-                        if (n_sorted > 64) /* Use heap for large numbers of fds, stack otherwise */
-                                sorted = sorted_malloc = new(int, n_sorted);
-                        else
-                                sorted = newa(int, n_sorted);
+                        for (size_t i = 0; i < n_sorted-1; i++) {
+                                int start, end;
 
-                        if (sorted) {
-                                int c = 0;
+                                start = MAX(sorted[i], 2); /* The first three fds shall always remain open */
+                                end = MAX(sorted[i+1], 2);
 
-                                memcpy(sorted, except, n_except * sizeof(int));
+                                assert(end >= start);
 
-                                /* Let's add fd 2 to the list of fds, to simplify the loop below, as this
-                                 * allows us to cover the head of the array the same way as the body */
-                                sorted[n_sorted-1] = 2;
+                                if (end - start <= 1)
+                                        continue;
 
-                                typesafe_qsort(sorted, n_sorted, cmp_int);
-
-                                for (size_t i = 0; i < n_sorted-1; i++) {
-                                        int start, end;
-
-                                        start = MAX(sorted[i], 2); /* The first three fds shall always remain open */
-                                        end = MAX(sorted[i+1], 2);
-
-                                        assert(end >= start);
-
-                                        if (end - start <= 1)
-                                                continue;
-
-                                        /* Close everything between the start and end fds (both of which shall stay open) */
-                                        if (close_range(start + 1, end - 1, 0) < 0) {
-                                                if (!ERRNO_IS_NOT_SUPPORTED(errno) && !ERRNO_IS_PRIVILEGE(errno))
-                                                        return -errno;
-
-                                                have_close_range = false;
-                                                break;
-                                        }
-
-                                        c += end - start - 1;
-                                }
-
-                                if (have_close_range) {
-                                        /* The loop succeeded. Let's now close everything beyond the end */
-
-                                        if (sorted[n_sorted-1] >= INT_MAX) /* Dont let the addition below overflow */
-                                                return c;
-
-                                        if (close_range(sorted[n_sorted-1] + 1, -1, 0) >= 0)
-                                                return c + 1;
-
+                                /* Close everything between the start and end fds (both of which shall stay open) */
+                                if (close_range(start + 1, end - 1, 0) < 0) {
                                         if (!ERRNO_IS_NOT_SUPPORTED(errno) && !ERRNO_IS_PRIVILEGE(errno))
                                                 return -errno;
 
                                         have_close_range = false;
+                                        break;
                                 }
                         }
+
+                        if (have_close_range) {
+                                /* The loop succeeded. Let's now close everything beyond the end */
+
+                                if (sorted[n_sorted-1] >= INT_MAX) /* Dont let the addition below overflow */
+                                        return 0;
+
+                                if (close_range(sorted[n_sorted-1] + 1, -1, 0) >= 0)
+                                        return 0;
+
+                                if (!ERRNO_IS_NOT_SUPPORTED(errno) && !ERRNO_IS_PRIVILEGE(errno))
+                                        return -errno;
+
+                                have_close_range = false;
+                        }
                 }
 
                 /* Fallback on OOM or if close_range() is not supported */
         }
 
         d = opendir("/proc/self/fd");
-        if (!d) {
-                int fd, max_fd;
-
-                /* When /proc isn't available (for example in chroots) the fallback is brute forcing through
-                 * the fd table */
-
-                max_fd = get_max_fd();
-                if (max_fd < 0)
-                        return max_fd;
-
-                /* Refuse to do the loop over more too many elements. It's better to fail immediately than to
-                 * spin the CPU for a long time. */
-                if (max_fd > MAX_FD_LOOP_LIMIT)
-                        return log_debug_errno(SYNTHETIC_ERRNO(EPERM),
-                                               "/proc/self/fd is inaccessible. Refusing to loop over %d potential fds.",
-                                               max_fd);
-
-                for (fd = 3; fd >= 0; fd = fd < max_fd ? fd + 1 : -1) {
-                        int q;
-
-                        if (fd_in_set(fd, except, n_except))
-                                continue;
-
-                        q = close_nointr(fd);
-                        if (q < 0 && q != -EBADF && r >= 0)
-                                r = q;
-                }
-
-                return r;
-        }
+        if (!d)
+                return close_all_fds_frugal(except, n_except); /* ultimate fallback if /proc/ is not available */
 
         FOREACH_DIRENT(de, d, return -errno) {
-                int fd = -1, q;
+                int fd = -EBADF, q;
+
+                if (!IN_SET(de->d_type, DT_LNK, DT_UNKNOWN))
+                        continue;
 
                 if (safe_atoi(de->d_name, &fd) < 0)
                         /* Let's better ignore this, just in case */
@@ -364,14 +444,11 @@
         assert(a >= 0);
         assert(b >= 0);
 
-        /* Compares two file descriptors. Note that semantics are
-         * quite different depending on whether we have kcmp() or we
-         * don't. If we have kcmp() this will only return true for
-         * dup()ed file descriptors, but not otherwise. If we don't
-         * have kcmp() this will also return true for two fds of the same
-         * file, created by separate open() calls. Since we use this
-         * call mostly for filtering out duplicates in the fd store
-         * this difference hopefully doesn't matter too much. */
+        /* Compares two file descriptors. Note that semantics are quite different depending on whether we
+         * have kcmp() or we don't. If we have kcmp() this will only return true for dup()ed file
+         * descriptors, but not otherwise. If we don't have kcmp() this will also return true for two fds of
+         * the same file, created by separate open() calls. Since we use this call mostly for filtering out
+         * duplicates in the fd store this difference hopefully doesn't matter too much. */
 
         if (a == b)
                 return true;
@@ -383,7 +460,7 @@
                 return true;
         if (r > 0)
                 return false;
-        if (!IN_SET(errno, ENOSYS, EACCES, EPERM))
+        if (!ERRNO_IS_NOT_SUPPORTED(errno) && !ERRNO_IS_PRIVILEGE(errno))
                 return -errno;
 
         /* We don't have kcmp(), use fstat() instead. */
@@ -393,23 +470,17 @@
         if (fstat(b, &stb) < 0)
                 return -errno;
 
-        if ((sta.st_mode & S_IFMT) != (stb.st_mode & S_IFMT))
+        if (!stat_inode_same(&sta, &stb))
                 return false;
 
-        /* We consider all device fds different, since two device fds
-         * might refer to quite different device contexts even though
-         * they share the same inode and backing dev_t. */
+        /* We consider all device fds different, since two device fds might refer to quite different device
+         * contexts even though they share the same inode and backing dev_t. */
 
         if (S_ISCHR(sta.st_mode) || S_ISBLK(sta.st_mode))
                 return false;
 
-        if (sta.st_dev != stb.st_dev || sta.st_ino != stb.st_ino)
-                return false;
-
-        /* The fds refer to the same inode on disk, let's also check
-         * if they have the same fd flags. This is useful to
-         * distinguish the read and write side of a pipe created with
-         * pipe(). */
+        /* The fds refer to the same inode on disk, let's also check if they have the same fd flags. This is
+         * useful to distinguish the read and write side of a pipe created with pipe(). */
         fa = fcntl(a, F_GETFL);
         if (fa < 0)
                 return -errno;
@@ -428,7 +499,8 @@
 
         CMSG_FOREACH(cmsg, mh)
                 if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS)
-                        close_many((int*) CMSG_DATA(cmsg), (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int));
+                        close_many(CMSG_TYPED_DATA(cmsg, int),
+                                   (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int));
 }
 
 bool fdname_is_valid(const char *s) {
@@ -459,11 +531,9 @@
 }
 
 int fd_get_path(int fd, char **ret) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
         int r;
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-        r = readlink_malloc(procfs_path, ret);
+        r = readlink_malloc(FORMAT_PROC_FD_PATH(fd), ret);
         if (r == -ENOENT) {
                 /* ENOENT can mean two things: that the fd does not exist or that /proc is not mounted. Let's make
                  * things debuggable and distinguish the two. */
@@ -559,25 +629,23 @@
 }
 
 int rearrange_stdio(int original_input_fd, int original_output_fd, int original_error_fd) {
-
-        int fd[3] = { /* Put together an array of fds we work on */
-                original_input_fd,
-                original_output_fd,
-                original_error_fd
-        };
-
-        int r, i,
-                null_fd = -1,                /* if we open /dev/null, we store the fd to it here */
-                copy_fd[3] = { -1, -1, -1 }; /* This contains all fds we duplicate here temporarily, and hence need to close at the end */
+        int fd[3] = { original_input_fd,             /* Put together an array of fds we work on */
+                      original_output_fd,
+                      original_error_fd },
+            null_fd = -EBADF,                        /* If we open /dev/null, we store the fd to it here */
+            copy_fd[3] = { -EBADF, -EBADF, -EBADF }, /* This contains all fds we duplicate here
+                                                      * temporarily, and hence need to close at the end. */
+            r;
         bool null_readable, null_writable;
 
-        /* Sets up stdin, stdout, stderr with the three file descriptors passed in. If any of the descriptors is
-         * specified as -1 it will be connected with /dev/null instead. If any of the file descriptors is passed as
-         * itself (e.g. stdin as STDIN_FILENO) it is left unmodified, but the O_CLOEXEC bit is turned off should it be
-         * on.
+        /* Sets up stdin, stdout, stderr with the three file descriptors passed in. If any of the descriptors
+         * is specified as -EBADF it will be connected with /dev/null instead. If any of the file descriptors
+         * is passed as itself (e.g. stdin as STDIN_FILENO) it is left unmodified, but the O_CLOEXEC bit is
+         * turned off should it be on.
          *
-         * Note that if any of the passed file descriptors are > 2 they will be closed — both on success and on
-         * failure! Thus, callers should assume that when this function returns the input fds are invalidated.
+         * Note that if any of the passed file descriptors are > 2 they will be closed — both on success and
+         * on failure! Thus, callers should assume that when this function returns the input fds are
+         * invalidated.
          *
          * Note that when this function fails stdin/stdout/stderr might remain half set up!
          *
@@ -608,12 +676,12 @@
                                 goto finish;
                         }
 
-                        CLOSE_AND_REPLACE(null_fd, copy);
+                        close_and_replace(null_fd, copy);
                 }
         }
 
         /* Let's assemble fd[] with the fds to install in place of stdin/stdout/stderr */
-        for (i = 0; i < 3; i++) {
+        for (int i = 0; i < 3; i++) {
 
                 if (fd[i] < 0)
                         fd[i] = null_fd;        /* A negative parameter means: connect this one to /dev/null */
@@ -629,10 +697,10 @@
                 }
         }
 
-        /* At this point we now have the fds to use in fd[], and they are all above the stdio range, so that we
-         * have freedom to move them around. If the fds already were at the right places then the specific fds are
-         * -1. Let's now move them to the right places. This is the point of no return. */
-        for (i = 0; i < 3; i++) {
+        /* At this point we now have the fds to use in fd[], and they are all above the stdio range, so that
+         * we have freedom to move them around. If the fds already were at the right places then the specific
+         * fds are -EBADF. Let's now move them to the right places. This is the point of no return. */
+        for (int i = 0; i < 3; i++) {
 
                 if (fd[i] == i) {
 
@@ -663,7 +731,7 @@
                 safe_close_above_stdio(original_error_fd);
 
         /* Close the copies we moved > 2 */
-        for (i = 0; i < 3; i++)
+        for (int i = 0; i < 3; i++)
                 safe_close(copy_fd[i]);
 
         /* Close our null fd, if it's > 2 */
@@ -673,8 +741,7 @@
 }
 
 int fd_reopen(int fd, int flags) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-        int new_fd;
+        int new_fd, r;
 
         /* Reopens the specified fd with new flags. This is useful for convert an O_PATH fd into a regular one, or to
          * turn O_RDWR fds into O_RDONLY fds.
@@ -683,21 +750,64 @@
          *
          * This implicitly resets the file read index to 0. */
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-        new_fd = open(procfs_path, flags);
+        if (FLAGS_SET(flags, O_DIRECTORY)) {
+                /* If we shall reopen the fd as directory we can just go via "." and thus bypass the whole
+                 * magic /proc/ directory, and make ourselves independent of that being mounted. */
+                new_fd = openat(fd, ".", flags);
+                if (new_fd < 0)
+                        return -errno;
+
+                return new_fd;
+        }
+
+        new_fd = open(FORMAT_PROC_FD_PATH(fd), flags);
         if (new_fd < 0) {
                 if (errno != ENOENT)
                         return -errno;
 
-                if (proc_mounted() == 0)
+                r = proc_mounted();
+                if (r == 0)
                         return -ENOSYS; /* if we have no /proc/, the concept is not implementable */
 
-                return -ENOENT;
+                return r > 0 ? -EBADF : -ENOENT; /* If /proc/ is definitely around then this means the fd is
+                                                  * not valid, otherwise let's propagate the original
+                                                  * error */
         }
 
         return new_fd;
 }
 
+int fd_reopen_condition(
+                int fd,
+                int flags,
+                int mask,
+                int *ret_new_fd) {
+
+        int r, new_fd;
+
+        assert(fd >= 0);
+
+        /* Invokes fd_reopen(fd, flags), but only if the existing F_GETFL flags don't match the specified
+         * flags (masked by the specified mask). This is useful for converting O_PATH fds into real fds if
+         * needed, but only then. */
+
+        r = fcntl(fd, F_GETFL);
+        if (r < 0)
+                return -errno;
+
+        if ((r & mask) == (flags & mask)) {
+                *ret_new_fd = -EBADF;
+                return fd;
+        }
+
+        new_fd = fd_reopen(fd, flags);
+        if (new_fd < 0)
+                return new_fd;
+
+        *ret_new_fd = new_fd;
+        return new_fd;
+}
+
 int read_nr_open(void) {
         _cleanup_free_ char *nr_open = NULL;
         int r;
@@ -722,19 +832,23 @@
         return 1024 * 1024;
 }
 
-/* This is here because it's fd-related and is called from sd-journal code. Other btrfs-related utilities are
- * in src/shared, but libsystemd must not link to libsystemd-shared, see docs/ARCHITECTURE.md. */
-int btrfs_defrag_fd(int fd) {
-        int r;
+int fd_get_diskseq(int fd, uint64_t *ret) {
+        uint64_t diskseq;
 
         assert(fd >= 0);
+        assert(ret);
 
-        r = fd_verify_regular(fd);
-        if (r < 0)
-                return r;
+        if (ioctl(fd, BLKGETDISKSEQ, &diskseq) < 0) {
+                /* Note that the kernel is weird: non-existing ioctls currently return EINVAL
+                 * rather than ENOTTY on loopback block devices. They should fix that in the kernel,
+                 * but in the meantime we accept both here. */
+                if (!ERRNO_IS_NOT_SUPPORTED(errno) && errno != EINVAL)
+                        return -errno;
 
-        if (ioctl(fd, BTRFS_IOC_DEFRAG, NULL) < 0)
-                return -errno;
+                return -EOPNOTSUPP;
+        }
+
+        *ret = diskseq;
 
         return 0;
 }
diff --git a/src/basic/fd-util.h b/src/basic/fd-util.h
index 9529a47..78c4f94 100644
--- a/src/basic/fd-util.h
+++ b/src/basic/fd-util.h
@@ -7,6 +7,7 @@
 #include <sys/socket.h>
 
 #include "macro.h"
+#include "stdio-util.h"
 
 /* maximum length of fdname */
 #define FDNAME_MAX 255
@@ -14,14 +15,19 @@
 /* Make sure we can distinguish fd 0 and NULL */
 #define FD_TO_PTR(fd) INT_TO_PTR((fd)+1)
 #define PTR_TO_FD(p) (PTR_TO_INT(p)-1)
+#define PIPE_EBADF { -EBADF, -EBADF }
+
+#ifdef GOOGLE3_BLAZE_BUILD // Redefine functions which collide with other third-party libs
+#define get_max_fd systemd_get_max_fd
+#endif // GOOGLE3_BLAZE_BUILD
 
 int close_nointr(int fd);
 int safe_close(int fd);
 void safe_close_pair(int p[static 2]);
 
 static inline int safe_close_above_stdio(int fd) {
-        if (fd < 3) /* Don't close stdin/stdout/stderr, but still invalidate the fd by returning -1 */
-                return -1;
+        if (fd < 3) /* Don't close stdin/stdout/stderr, but still invalidate the fd by returning -EBADF. */
+                return -EBADF;
 
         return safe_close(fd);
 }
@@ -55,8 +61,12 @@
 
 int fd_nonblock(int fd, bool nonblock);
 int fd_cloexec(int fd, bool cloexec);
+int fd_cloexec_many(const int fds[], size_t n_fds, bool cloexec);
+
+int get_max_fd(void);
 
 int close_all_fds(const int except[], size_t n_except);
+int close_all_fds_without_malloc(const int except[], size_t n_except);
 
 int same_fd(int a, int b);
 
@@ -81,19 +91,14 @@
 int rearrange_stdio(int original_input_fd, int original_output_fd, int original_error_fd);
 
 static inline int make_null_stdio(void) {
-        return rearrange_stdio(-1, -1, -1);
+        return rearrange_stdio(-EBADF, -EBADF, -EBADF);
 }
 
-/* Like TAKE_PTR() but for file descriptors, resetting them to -1 */
-#define TAKE_FD(fd)                             \
-        ({                                      \
-                int _fd_ = (fd);                \
-                (fd) = -1;                      \
-                _fd_;                           \
-        })
+/* Like TAKE_PTR() but for file descriptors, resetting them to -EBADF */
+#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
 
 /* Like free_and_replace(), but for file descriptors */
-#define CLOSE_AND_REPLACE(a, b)                 \
+#define close_and_replace(a, b)                 \
         ({                                      \
                 int *_fdp_ = &(a);              \
                 safe_close(*_fdp_);             \
@@ -101,7 +106,21 @@
                 0;                              \
         })
 
-
 int fd_reopen(int fd, int flags);
+int fd_reopen_condition(int fd, int flags, int mask, int *ret_new_fd);
 int read_nr_open(void);
-int btrfs_defrag_fd(int fd);
+int fd_get_diskseq(int fd, uint64_t *ret);
+
+/* The maximum length a buffer for a /proc/self/fd/<fd> path needs */
+#define PROC_FD_PATH_MAX \
+        (STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int))
+
+static inline char *format_proc_fd_path(char buf[static PROC_FD_PATH_MAX], int fd) {
+        assert(buf);
+        assert(fd >= 0);
+        assert_se(snprintf_ok(buf, PROC_FD_PATH_MAX, "/proc/self/fd/%i", fd));
+        return buf;
+}
+
+#define FORMAT_PROC_FD_PATH(fd) \
+        format_proc_fd_path((char[PROC_FD_PATH_MAX]) {}, (fd))
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 6c8ebe6..c802db7 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -13,6 +13,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
@@ -20,11 +21,13 @@
 #include "log.h"
 #include "macro.h"
 #include "mkdir.h"
+#include "nulstr-util.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "socket-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
+#include "sync-util.h"
 #include "tmpfile-util.h"
 
 /* The maximum size of the file we'll read in one go in read_full_file() (64M). */
@@ -41,16 +44,17 @@
  * can detect EOFs. */
 #define READ_VIRTUAL_BYTES_MAX (4U*1024U*1024U - 2U)
 
-int fopen_unlocked(const char *path, const char *options, FILE **ret) {
+int fopen_unlocked_at(int dir_fd, const char *path, const char *options, int flags, FILE **ret) {
+        int r;
+
         assert(ret);
 
-        FILE *f = fopen(path, options);
-        if (!f)
-                return -errno;
+        r = xfopenat(dir_fd, path, options, flags, ret);
+        if (r < 0)
+                return r;
 
-        (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
+        (void) __fsetlocking(*ret, FSETLOCKING_BYCALLER);
 
-        *ret = f;
         return 0;
 }
 
@@ -76,7 +80,7 @@
         if (r < 0)
                 return r;
 
-        *fd = -1;
+        *fd = -EBADF;
 
         return 0;
 }
@@ -88,7 +92,7 @@
         if (!f)
                 return NULL;
 
-        *fd = -1;
+        *fd = -EBADF;
 
         return f;
 }
@@ -100,7 +104,7 @@
         if (!d)
                 return NULL;
 
-        *dfd = -1;
+        *dfd = -EBADF;
 
         return d;
 }
@@ -132,7 +136,7 @@
                 const struct timespec *ts) {
 
         bool needs_nl;
-        int r, fd = -1;
+        int r, fd = -EBADF;
 
         assert(f);
         assert(line);
@@ -148,6 +152,30 @@
                         return -EBADF;
         }
 
+        if (flags & WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL) {
+                _cleanup_free_ char *t = NULL;
+
+                /* If value to be written is same as that of the existing value, then suppress the write. */
+
+                if (fd < 0) {
+                        fd = fileno(f);
+                        if (fd < 0)
+                                return -EBADF;
+                }
+
+                /* Read an additional byte to detect cases where the prefix matches but the rest
+                 * doesn't. Also, 0 returned by read_virtual_file_fd() means the read was truncated and
+                 * it won't be equal to the new value. */
+                if (read_virtual_file_fd(fd, strlen(line)+1, &t, NULL) > 0 &&
+                    streq_skip_trailing_chars(line, t, NEWLINE)) {
+                        log_debug("No change in value '%s', suppressing write", line);
+                        return 0;
+                }
+
+                if (lseek(fd, 0, SEEK_SET) < 0)
+                        return -errno;
+        }
+
         needs_nl = !(flags & WRITE_STRING_FILE_AVOID_NEWLINE) && !endswith(line, "\n");
 
         if (needs_nl && (flags & WRITE_STRING_FILE_DISABLE_BUFFER)) {
@@ -183,7 +211,8 @@
         return 0;
 }
 
-static int write_string_file_atomic(
+static int write_string_file_atomic_at(
+                int dir_fd,
                 const char *fn,
                 const char *line,
                 WriteStringFileFlags flags,
@@ -199,7 +228,7 @@
         /* Note that we'd really like to use O_TMPFILE here, but can't really, since we want replacement
          * semantics here, and O_TMPFILE can't offer that. i.e. rename() replaces but linkat() doesn't. */
 
-        r = fopen_temporary(fn, &f, &p);
+        r = fopen_temporary_at(dir_fd, fn, &f, &p);
         if (r < 0)
                 return r;
 
@@ -211,7 +240,7 @@
         if (r < 0)
                 goto fail;
 
-        if (rename(p, fn) < 0) {
+        if (renameat(dir_fd, p, dir_fd, fn) < 0) {
                 r = -errno;
                 goto fail;
         }
@@ -226,11 +255,12 @@
         return 0;
 
 fail:
-        (void) unlink(p);
+        (void) unlinkat(dir_fd, p, 0);
         return r;
 }
 
-int write_string_file_ts(
+int write_string_file_ts_at(
+                int dir_fd,
                 const char *fn,
                 const char *line,
                 WriteStringFileFlags flags,
@@ -246,7 +276,7 @@
         assert(!((flags & WRITE_STRING_FILE_VERIFY_ON_FAILURE) && (flags & WRITE_STRING_FILE_SYNC)));
 
         if (flags & WRITE_STRING_FILE_MKDIR_0755) {
-                r = mkdir_parents(fn, 0755);
+                r = mkdirat_parents(dir_fd, fn, 0755);
                 if (r < 0)
                         return r;
         }
@@ -254,7 +284,7 @@
         if (flags & WRITE_STRING_FILE_ATOMIC) {
                 assert(flags & WRITE_STRING_FILE_CREATE);
 
-                r = write_string_file_atomic(fn, line, flags, ts);
+                r = write_string_file_atomic_at(dir_fd, fn, line, flags, ts);
                 if (r < 0)
                         goto fail;
 
@@ -263,11 +293,12 @@
                 assert(!ts);
 
         /* We manually build our own version of fopen(..., "we") that works without O_CREAT and with O_NOFOLLOW if needed. */
-        fd = open(fn, O_WRONLY|O_CLOEXEC|O_NOCTTY |
-                  (FLAGS_SET(flags, WRITE_STRING_FILE_NOFOLLOW) ? O_NOFOLLOW : 0) |
-                  (FLAGS_SET(flags, WRITE_STRING_FILE_CREATE) ? O_CREAT : 0) |
-                  (FLAGS_SET(flags, WRITE_STRING_FILE_TRUNCATE) ? O_TRUNC : 0),
-                  (FLAGS_SET(flags, WRITE_STRING_FILE_MODE_0600) ? 0600 : 0666));
+        fd = openat(dir_fd, fn, O_CLOEXEC|O_NOCTTY |
+                    (FLAGS_SET(flags, WRITE_STRING_FILE_NOFOLLOW) ? O_NOFOLLOW : 0) |
+                    (FLAGS_SET(flags, WRITE_STRING_FILE_CREATE) ? O_CREAT : 0) |
+                    (FLAGS_SET(flags, WRITE_STRING_FILE_TRUNCATE) ? O_TRUNC : 0) |
+                    (FLAGS_SET(flags, WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL) ? O_RDWR : O_WRONLY),
+                    (FLAGS_SET(flags, WRITE_STRING_FILE_MODE_0600) ? 0600 : 0666));
         if (fd < 0) {
                 r = -errno;
                 goto fail;
@@ -337,7 +368,7 @@
         return read_line(f, LONG_LINE_MAX, line);
 }
 
-int verify_file(const char *fn, const char *blob, bool accept_extra_nl) {
+int verify_file_at(int dir_fd, const char *fn, const char *blob, bool accept_extra_nl) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *buf = NULL;
         size_t l, k;
@@ -355,7 +386,7 @@
         if (!buf)
                 return -ENOMEM;
 
-        r = fopen_unlocked(fn, "re", &f);
+        r = fopen_unlocked_at(dir_fd, fn, "re", 0, &f);
         if (r < 0)
                 return r;
 
@@ -375,9 +406,8 @@
         return 1;
 }
 
-int read_virtual_file(const char *filename, size_t max_size, char **ret_contents, size_t *ret_size) {
+int read_virtual_file_fd(int fd, size_t max_size, char **ret_contents, size_t *ret_size) {
         _cleanup_free_ char *buf = NULL;
-        _cleanup_close_ int fd = -1;
         size_t n, size;
         int n_retries;
         bool truncated = false;
@@ -395,10 +425,7 @@
          * contents* may be returned. (Though the read is still done using one syscall.) Returns 0 on
          * partial success, 1 if untruncated contents were read. */
 
-        fd = open(filename, O_RDONLY|O_NOCTTY|O_CLOEXEC);
-        if (fd < 0)
-                return -errno;
-
+        assert(fd >= 0);
         assert(max_size <= READ_VIRTUAL_BYTES_MAX || max_size == SIZE_MAX);
 
         /* Limit the number of attempts to read the number of bytes returned by fstat(). */
@@ -434,8 +461,8 @@
 
                         n_retries--;
                 } else if (n_retries > 1) {
-                        /* Files in /proc are generally smaller than the page size so let's start with a page size
-                         * buffer from malloc and only use the max buffer on the final try. */
+                        /* Files in /proc are generally smaller than the page size so let's start with
+                         * a page size buffer from malloc and only use the max buffer on the final try. */
                         size = MIN3(page_size() - 1, READ_VIRTUAL_BYTES_MAX, max_size);
                         n_retries = 1;
                 } else {
@@ -477,7 +504,7 @@
                  * at least one more byte to be able to distinguish EOF from truncation. */
                 if (max_size != SIZE_MAX && n > max_size) {
                         n = size; /* Make sure we never use more than what we sized the buffer for (so that
-                                   * we have one free byte in it for the trailing NUL we add below).*/
+                                   * we have one free byte in it for the trailing NUL we add below). */
                         truncated = true;
                         break;
                 }
@@ -524,6 +551,31 @@
         return !truncated;
 }
 
+int read_virtual_file_at(
+                int dir_fd,
+                const char *filename,
+                size_t max_size,
+                char **ret_contents,
+                size_t *ret_size) {
+
+        _cleanup_close_ int fd = -EBADF;
+
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+
+        if (!filename) {
+                if (dir_fd == AT_FDCWD)
+                        return -EBADF;
+
+                return read_virtual_file_fd(dir_fd, max_size, ret_contents, ret_size);
+        }
+
+        fd = openat(dir_fd, filename, O_RDONLY | O_NOCTTY | O_CLOEXEC);
+        if (fd < 0)
+                return -errno;
+
+        return read_virtual_file_fd(fd, max_size, ret_contents, ret_size);
+}
+
 int read_full_stream_full(
                 FILE *f,
                 const char *filename,
@@ -534,18 +586,17 @@
                 size_t *ret_size) {
 
         _cleanup_free_ char *buf = NULL;
-        size_t n, n_next, l;
+        size_t n, n_next = 0, l;
         int fd, r;
 
         assert(f);
         assert(ret_contents);
         assert(!FLAGS_SET(flags, READ_FULL_FILE_UNBASE64 | READ_FULL_FILE_UNHEX));
+        assert(size != SIZE_MAX || !FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER));
 
-        if (offset != UINT64_MAX && offset > LONG_MAX)
+        if (offset != UINT64_MAX && offset > LONG_MAX) /* fseek() can only deal with "long" offsets */
                 return -ERANGE;
 
-        n_next = size != SIZE_MAX ? size : LINE_MAX; /* Start size */
-
         fd = fileno(f);
         if (fd >= 0) { /* If the FILE* object is backed by an fd (as opposed to memory or such, see
                         * fmemopen()), let's optimize our buffering */
@@ -555,20 +606,20 @@
                         return -errno;
 
                 if (S_ISREG(st.st_mode)) {
-                        if (size == SIZE_MAX) {
+
+                        /* Try to start with the right file size if we shall read the file in full. Note
+                         * that we increase the size to read here by one, so that the first read attempt
+                         * already makes us notice the EOF. If the reported size of the file is zero, we
+                         * avoid this logic however, since quite likely it might be a virtual file in procfs
+                         * that all report a zero file size. */
+
+                        if (st.st_size > 0 &&
+                            (size == SIZE_MAX || FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER))) {
+
                                 uint64_t rsize =
                                         LESS_BY((uint64_t) st.st_size, offset == UINT64_MAX ? 0 : offset);
 
-                                /* Safety check */
-                                if (rsize > READ_FULL_BYTES_MAX)
-                                        return -E2BIG;
-
-                                /* Start with the right file size. Note that we increase the size to read
-                                 * here by one, so that the first read attempt already makes us notice the
-                                 * EOF. If the reported size of the file is zero, we avoid this logic
-                                 * however, since quite likely it might be a virtual file in procfs that all
-                                 * report a zero file size. */
-                                if (st.st_size > 0)
+                                if (rsize < SIZE_MAX) /* overflow check */
                                         n_next = rsize + 1;
                         }
 
@@ -577,6 +628,17 @@
                 }
         }
 
+        /* If we don't know how much to read, figure it out now. If we shall read a part of the file, then
+         * allocate the requested size. If we shall load the full file start with LINE_MAX. Note that if
+         * READ_FULL_FILE_FAIL_WHEN_LARGER we consider the specified size a safety limit, and thus also start
+         * with LINE_MAX, under assumption the file is most likely much shorter. */
+        if (n_next == 0)
+                n_next = size != SIZE_MAX && !FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER) ? size : LINE_MAX;
+
+        /* Never read more than we need to determine that our own limit is hit */
+        if (n_next > READ_FULL_BYTES_MAX)
+                n_next = READ_FULL_BYTES_MAX + 1;
+
         if (offset != UINT64_MAX && fseek(f, offset, SEEK_SET) < 0)
                 return -errno;
 
@@ -585,6 +647,11 @@
                 char *t;
                 size_t k;
 
+                /* If we shall fail when reading overly large data, then read exactly one byte more than the
+                 * specified size at max, since that'll tell us if there's anymore data beyond the limit*/
+                if (FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER) && n_next > size)
+                        n_next = size + 1;
+
                 if (flags & READ_FULL_FILE_SECURE) {
                         t = malloc(n_next + 1);
                         if (!t) {
@@ -618,14 +685,18 @@
                 if (feof(f))
                         break;
 
-                if (size != SIZE_MAX) { /* If we got asked to read some specific size, we already sized the buffer right, hence leave */
+                if (size != SIZE_MAX && !FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER)) { /* If we got asked to read some specific size, we already sized the buffer right, hence leave */
                         assert(l == size);
                         break;
                 }
 
                 assert(k > 0); /* we can't have read zero bytes because that would have been EOF */
 
-                /* Safety check */
+                if (FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER) && l > size) {
+                        r = -E2BIG;
+                        goto finalize;
+                }
+
                 if (n >= READ_FULL_BYTES_MAX) {
                         r = -E2BIG;
                         goto finalize;
@@ -696,8 +767,7 @@
 
         r = xfopenat(dir_fd, filename, "re", 0, &f);
         if (r < 0) {
-                _cleanup_close_ int dfd = -1, sk = -1;
-                union sockaddr_union sa;
+                _cleanup_close_ int sk = -EBADF;
 
                 /* ENXIO is what Linux returns if we open a node that is an AF_UNIX socket */
                 if (r != -ENXIO)
@@ -709,26 +779,7 @@
 
                 /* Seeking is not supported on AF_UNIX sockets */
                 if (offset != UINT64_MAX)
-                        return -ESPIPE;
-
-                if (dir_fd == AT_FDCWD)
-                        r = sockaddr_un_set_path(&sa.un, filename);
-                else {
-                        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-
-                        /* If we shall operate relative to some directory, then let's use O_PATH first to
-                         * open the socket inode, and then connect to it via /proc/self/fd/. We have to do
-                         * this since there's not connectat() that takes a directory fd as first arg. */
-
-                        dfd = openat(dir_fd, filename, O_PATH|O_CLOEXEC);
-                        if (dfd < 0)
-                                return -errno;
-
-                        xsprintf(procfs_path, "/proc/self/fd/%i", dfd);
-                        r = sockaddr_un_set_path(&sa.un, procfs_path);
-                }
-                if (r < 0)
-                        return r;
+                        return -ENXIO;
 
                 sk = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
                 if (sk < 0)
@@ -745,12 +796,14 @@
                                 return r;
 
                         if (bind(sk, &bsa.sa, r) < 0)
-                                return r;
+                                return -errno;
                 }
 
-                if (connect(sk, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0)
-                        return errno == ENOTSOCK ? -ENXIO : -errno; /* propagate original error if this is
-                                                                     * not a socket after all */
+                r = connect_unix_path(sk, dir_fd, filename);
+                if (IN_SET(r, -ENOTSOCK, -EINVAL)) /* propagate original error if this is not a socket after all */
+                        return -ENXIO;
+                if (r < 0)
+                        return r;
 
                 if (shutdown(sk, SHUT_WR) < 0)
                         return -errno;
@@ -809,7 +862,6 @@
 int get_proc_field(const char *filename, const char *pattern, const char *terminator, char **field) {
         _cleanup_free_ char *status = NULL;
         char *t, *f;
-        size_t len;
         int r;
 
         assert(terminator);
@@ -861,9 +913,7 @@
                         t--;
         }
 
-        len = strcspn(t, terminator);
-
-        f = strndup(t, len);
+        f = strdupcspn(t, terminator);
         if (!f)
                 return -ENOMEM;
 
@@ -877,6 +927,9 @@
 
         assert(!(flags & O_CREAT));
 
+        if (fd == AT_FDCWD && flags == 0)
+                return opendir(name);
+
         nfd = openat(fd, name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags, 0);
         if (nfd < 0)
                 return NULL;
@@ -890,10 +943,12 @@
         return d;
 }
 
-static int mode_to_flags(const char *mode) {
+int fopen_mode_to_flags(const char *mode) {
         const char *p;
         int flags;
 
+        assert(mode);
+
         if ((p = startswith(mode, "r+")))
                 flags = O_RDWR;
         else if ((p = startswith(mode, "r")))
@@ -946,7 +1001,7 @@
         } else {
                 int fd, mode_flags;
 
-                mode_flags = mode_to_flags(mode);
+                mode_flags = fopen_mode_to_flags(mode);
                 if (mode_flags < 0)
                         return mode_flags;
 
@@ -973,8 +1028,6 @@
                 FILE **ret,
                 char **ret_path) {
 
-        char **i;
-
         assert(path);
         assert(mode);
         assert(ret);
@@ -1086,39 +1139,6 @@
         return search_and_fopen_internal(filename, mode, root, s, ret, ret_path);
 }
 
-int chase_symlinks_and_fopen_unlocked(
-                const char *path,
-                const char *root,
-                unsigned chase_flags,
-                const char *open_flags,
-                FILE **ret_file,
-                char **ret_path) {
-
-        _cleanup_close_ int fd = -1;
-        _cleanup_free_ char *final_path = NULL;
-        int mode_flags, r;
-
-        assert(path);
-        assert(open_flags);
-        assert(ret_file);
-
-        mode_flags = mode_to_flags(open_flags);
-        if (mode_flags < 0)
-                return mode_flags;
-
-        fd = chase_symlinks_and_open(path, root, chase_flags, mode_flags, ret_path ? &final_path : NULL);
-        if (fd < 0)
-                return fd;
-
-        r = take_fdopen_unlocked(&fd, open_flags, ret_file);
-        if (r < 0)
-                return r;
-
-        if (ret_path)
-                *ret_path = TAKE_PTR(final_path);
-        return 0;
-}
-
 int fflush_and_check(FILE *f) {
         assert(f);
 
@@ -1146,10 +1166,7 @@
         if (fd < 0)
                 return 0;
 
-        if (fsync(fd) < 0)
-                return -errno;
-
-        r = fsync_directory_of_file(fd);
+        r = fsync_full(fd);
         if (r < 0)
                 return r;
 
@@ -1162,7 +1179,7 @@
         /* Creates a "timestamp" file, that contains nothing but a
          * usec_t timestamp, formatted in ASCII. */
 
-        if (n <= 0 || n >= USEC_INFINITY)
+        if (!timestamp_is_set(n))
                 return -ERANGE;
 
         xsprintf(ln, USEC_FMT "\n", n);
@@ -1183,7 +1200,7 @@
         if (r < 0)
                 return r;
 
-        if (t <= 0 || t >= (uint64_t) USEC_INFINITY)
+        if (!timestamp_is_set(t))
                 return -ERANGE;
 
         *ret = (usec_t) t;
@@ -1229,7 +1246,7 @@
 
 static EndOfLineMarker categorize_eol(char c, ReadLineFlags flags) {
 
-        if (!IN_SET(flags, READ_LINE_ONLY_NUL)) {
+        if (!FLAGS_SET(flags, READ_LINE_ONLY_NUL)) {
                 if (c == '\n')
                         return EOL_TEN;
                 if (c == '\r')
@@ -1418,16 +1435,3 @@
                             filename, st->st_mode & 07777);
         return 0;
 }
-
-int rename_and_apply_smack_floor_label(const char *from, const char *to) {
-        int r = 0;
-        if (rename(from, to) < 0)
-                return -errno;
-
-#if HAVE_SMACK_RUN_LABEL
-        r = mac_smack_apply(to, SMACK_ATTR_ACCESS, SMACK_FLOOR_LABEL);
-        if (r < 0)
-                return r;
-#endif
-        return r;
-}
diff --git a/src/basic/fileio.h b/src/basic/fileio.h
index ee356dd..7da3ee3 100644
--- a/src/basic/fileio.h
+++ b/src/basic/fileio.h
@@ -15,17 +15,18 @@
 #define LONG_LINE_MAX (1U*1024U*1024U)
 
 typedef enum {
-        WRITE_STRING_FILE_CREATE                = 1 << 0,
-        WRITE_STRING_FILE_TRUNCATE              = 1 << 1,
-        WRITE_STRING_FILE_ATOMIC                = 1 << 2,
-        WRITE_STRING_FILE_AVOID_NEWLINE         = 1 << 3,
-        WRITE_STRING_FILE_VERIFY_ON_FAILURE     = 1 << 4,
-        WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE = 1 << 5,
-        WRITE_STRING_FILE_SYNC                  = 1 << 6,
-        WRITE_STRING_FILE_DISABLE_BUFFER        = 1 << 7,
-        WRITE_STRING_FILE_NOFOLLOW              = 1 << 8,
-        WRITE_STRING_FILE_MKDIR_0755            = 1 << 9,
-        WRITE_STRING_FILE_MODE_0600             = 1 << 10,
+        WRITE_STRING_FILE_CREATE                     = 1 << 0,
+        WRITE_STRING_FILE_TRUNCATE                   = 1 << 1,
+        WRITE_STRING_FILE_ATOMIC                     = 1 << 2,
+        WRITE_STRING_FILE_AVOID_NEWLINE              = 1 << 3,
+        WRITE_STRING_FILE_VERIFY_ON_FAILURE          = 1 << 4,
+        WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE      = 1 << 5,
+        WRITE_STRING_FILE_SYNC                       = 1 << 6,
+        WRITE_STRING_FILE_DISABLE_BUFFER             = 1 << 7,
+        WRITE_STRING_FILE_NOFOLLOW                   = 1 << 8,
+        WRITE_STRING_FILE_MKDIR_0755                 = 1 << 9,
+        WRITE_STRING_FILE_MODE_0600                  = 1 << 10,
+        WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL = 1 << 11,
 
         /* And before you wonder, why write_string_file_atomic_label_ts() is a separate function instead of just one
            more flag here: it's about linking: we don't want to pull -lselinux into all users of write_string_file()
@@ -39,9 +40,13 @@
         READ_FULL_FILE_UNHEX               = 1 << 2, /* hex decode what we read */
         READ_FULL_FILE_WARN_WORLD_READABLE = 1 << 3, /* if regular file, log at LOG_WARNING level if access mode above 0700 */
         READ_FULL_FILE_CONNECT_SOCKET      = 1 << 4, /* if socket inode, connect to it and read off it */
+        READ_FULL_FILE_FAIL_WHEN_LARGER    = 1 << 5, /* fail loading if file is larger than specified size */
 } ReadFullFileFlags;
 
-int fopen_unlocked(const char *path, const char *options, FILE **ret);
+int fopen_unlocked_at(int dir_fd, const char *path, const char *options, int flags, FILE **ret);
+static inline int fopen_unlocked(const char *path, const char *options, FILE **ret) {
+        return fopen_unlocked_at(AT_FDCWD, path, options, 0, ret);
+}
 int fdopen_unlocked(int fd, const char *options, FILE **ret);
 int take_fdopen_unlocked(int *fd, const char *options, FILE **ret);
 FILE* take_fdopen(int *fd, const char *options);
@@ -53,7 +58,13 @@
 static inline int write_string_stream(FILE *f, const char *line, WriteStringFileFlags flags) {
         return write_string_stream_ts(f, line, flags, NULL);
 }
-int write_string_file_ts(const char *fn, const char *line, WriteStringFileFlags flags, const struct timespec *ts);
+int write_string_file_ts_at(int dir_fd, const char *fn, const char *line, WriteStringFileFlags flags, const struct timespec *ts);
+static inline int write_string_file_ts(const char *fn, const char *line, WriteStringFileFlags flags, const struct timespec *ts) {
+        return write_string_file_ts_at(AT_FDCWD, fn, line, flags, ts);
+}
+static inline int write_string_file_at(int dir_fd, const char *fn, const char *line, WriteStringFileFlags flags) {
+        return write_string_file_ts_at(dir_fd, fn, line, flags, NULL);
+}
 static inline int write_string_file(const char *fn, const char *line, WriteStringFileFlags flags) {
         return write_string_file_ts(fn, line, flags, NULL);
 }
@@ -62,11 +73,18 @@
 
 int read_one_line_file(const char *filename, char **line);
 int read_full_file_full(int dir_fd, const char *filename, uint64_t offset, size_t size, ReadFullFileFlags flags, const char *bind_name, char **ret_contents, size_t *ret_size);
+static inline int read_full_file_at(int dir_fd, const char *filename, char **ret_contents, size_t *ret_size) {
+        return read_full_file_full(dir_fd, filename, UINT64_MAX, SIZE_MAX, 0, NULL, ret_contents, ret_size);
+}
 static inline int read_full_file(const char *filename, char **ret_contents, size_t *ret_size) {
         return read_full_file_full(AT_FDCWD, filename, UINT64_MAX, SIZE_MAX, 0, NULL, ret_contents, ret_size);
 }
 
-int read_virtual_file(const char *filename, size_t max_size, char **ret_contents, size_t *ret_size);
+int read_virtual_file_fd(int fd, size_t max_size, char **ret_contents, size_t *ret_size);
+int read_virtual_file_at(int dir_fd, const char *filename, size_t max_size, char **ret_contents, size_t *ret_size);
+static inline int read_virtual_file(const char *filename, size_t max_size, char **ret_contents, size_t *ret_size) {
+        return read_virtual_file_at(AT_FDCWD, filename, max_size, ret_contents, ret_size);
+}
 static inline int read_full_virtual_file(const char *filename, char **ret_contents, size_t *ret_size) {
         return read_virtual_file(filename, SIZE_MAX, ret_contents, ret_size);
 }
@@ -76,7 +94,10 @@
         return read_full_stream_full(f, NULL, UINT64_MAX, SIZE_MAX, 0, ret_contents, ret_size);
 }
 
-int verify_file(const char *fn, const char *blob, bool accept_extra_nl);
+int verify_file_at(int dir_fd, const char *fn, const char *blob, bool accept_extra_nl);
+static inline int verify_file(const char *fn, const char *blob, bool accept_extra_nl) {
+        return verify_file_at(AT_FDCWD, fn, blob, accept_extra_nl);
+}
 
 int executable_is_script(const char *path, char **interpreter);
 
@@ -88,14 +109,6 @@
 int search_and_fopen(const char *path, const char *mode, const char *root, const char **search, FILE **ret, char **ret_path);
 int search_and_fopen_nulstr(const char *path, const char *mode, const char *root, const char *search, FILE **ret, char **ret_path);
 
-int chase_symlinks_and_fopen_unlocked(
-                const char *path,
-                const char *root,
-                unsigned chase_flags,
-                const char *open_flags,
-                FILE **ret_file,
-                char **ret_path);
-
 int fflush_and_check(FILE *f);
 int fflush_sync_and_check(FILE *f);
 
@@ -130,4 +143,4 @@
 
 int warn_file_is_world_accessible(const char *filename, struct stat *st, const char *unit, unsigned line);
 
-int rename_and_apply_smack_floor_label(const char *temp_path, const char *dest_path);
+int fopen_mode_to_flags(const char *mode);
diff --git a/src/basic/filesystems-gperf.gperf b/src/basic/filesystems-gperf.gperf
new file mode 100644
index 0000000..e8c5357
--- /dev/null
+++ b/src/basic/filesystems-gperf.gperf
@@ -0,0 +1,131 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+%{
+#include <linux/magic.h>
+
+#include "filesystems.h"
+#include "missing_magic.h"
+#include "stat-util.h"
+
+struct FilesystemMagic {
+        const char *name;
+        statfs_f_type_t magic[FILESYSTEM_MAGIC_MAX];
+};
+%}
+struct FilesystemMagic;
+%language=ANSI-C
+%define hash-function-name filesystems_gperf_hash
+%define lookup-function-name filesystems_gperf_lookup
+%define slot-name name
+%readonly-tables
+%omit-struct-type
+%struct-type
+%includes
+%%
+apparmorfs,      {AAFS_MAGIC}
+adfs,            {ADFS_SUPER_MAGIC}
+affs,            {AFFS_SUPER_MAGIC}
+afs,             {AFS_FS_MAGIC, AFS_SUPER_MAGIC}
+anon_inodefs,    {ANON_INODE_FS_MAGIC}
+autofs,          {AUTOFS_SUPER_MAGIC}
+balloon-kvm,     {BALLOON_KVM_MAGIC}
+bdev,            {BDEVFS_MAGIC}
+binder,          {BINDERFS_SUPER_MAGIC}
+binfmt_misc,     {BINFMTFS_MAGIC}
+bpf,             {BPF_FS_MAGIC}
+btrfs,           {BTRFS_SUPER_MAGIC}
+btrfs_test_fs,   {BTRFS_TEST_MAGIC}
+# cpuset's magic got reassigned to cgroupfs
+cpuset,          {CGROUP_SUPER_MAGIC}
+ceph,            {CEPH_SUPER_MAGIC}
+cgroup2,         {CGROUP2_SUPER_MAGIC}
+# note that the cgroupfs magic got reassigned from cpuset
+cgroup,          {CGROUP_SUPER_MAGIC}
+cifs,            {CIFS_SUPER_MAGIC, SMB2_SUPER_MAGIC}
+coda,            {CODA_SUPER_MAGIC}
+configfs,        {CONFIGFS_MAGIC}
+cramfs,          {CRAMFS_MAGIC}
+dax,             {DAXFS_MAGIC}
+debugfs,         {DEBUGFS_MAGIC}
+devmem,          {DEVMEM_MAGIC}
+devpts,          {DEVPTS_SUPER_MAGIC}
+# devtmpfs is just a special instance of tmpfs, hence it reports its magic
+devtmpfs,        {TMPFS_MAGIC}
+dmabuf,          {DMA_BUF_MAGIC}
+ecryptfs,        {ECRYPTFS_SUPER_MAGIC}
+efivarfs,        {EFIVARFS_MAGIC}
+efs,             {EFS_SUPER_MAGIC}
+erofs,           {EROFS_SUPER_MAGIC_V1}
+# ext2 + ext3 + ext4 use the same magic
+ext2,            {EXT2_SUPER_MAGIC}
+ext3,            {EXT3_SUPER_MAGIC}
+ext4,            {EXT4_SUPER_MAGIC}
+exfat,           {EXFAT_SUPER_MAGIC}
+f2fs,            {F2FS_SUPER_MAGIC}
+# fuseblk is so closely related to fuse that it shares the same magic
+fuseblk,         {FUSE_SUPER_MAGIC}
+fuse,            {FUSE_SUPER_MAGIC}
+fusectl,         {FUSE_CTL_SUPER_MAGIC}
+# gfs is an old version of gfs2 and reuses the magic
+gfs,             {GFS2_MAGIC}
+gfs2,            {GFS2_MAGIC}
+hostfs,          {HOSTFS_SUPER_MAGIC}
+hpfs,            {HPFS_SUPER_MAGIC}
+hugetlbfs,       {HUGETLBFS_MAGIC}
+iso9660,         {ISOFS_SUPER_MAGIC}
+jffs2,           {JFFS2_SUPER_MAGIC}
+minix,           {MINIX_SUPER_MAGIC, MINIX_SUPER_MAGIC2, MINIX2_SUPER_MAGIC, MINIX2_SUPER_MAGIC2, MINIX3_SUPER_MAGIC}
+mqueue,          {MQUEUE_MAGIC}
+# msdos is an older legacy version of vfat, shares the magic
+msdos,           {MSDOS_SUPER_MAGIC}
+# ncp/ncpfs have been removed from the kernel, but ncpfs was the official name
+ncp,             {NCP_SUPER_MAGIC}
+ncpfs,           {NCP_SUPER_MAGIC}
+# nfs is the old version of nfs4, and they share the same magic
+nfs,             {NFS_SUPER_MAGIC}
+nfs4,            {NFS_SUPER_MAGIC}
+nilfs2,          {NILFS_SUPER_MAGIC}
+nsfs,            {NSFS_MAGIC}
+ntfs,            {NTFS_SB_MAGIC}
+ntfs3,           {NTFS3_SUPER_MAGIC}
+ocfs2,           {OCFS2_SUPER_MAGIC}
+openpromfs,      {OPENPROM_SUPER_MAGIC}
+orangefs,        {ORANGEFS_DEVREQ_MAGIC}
+overlay,         {OVERLAYFS_SUPER_MAGIC}
+pipefs,          {PIPEFS_MAGIC}
+ppc-cmm,         {PPC_CMM_MAGIC}
+proc,            {PROC_SUPER_MAGIC}
+pstore,          {PSTOREFS_MAGIC}
+# pvfs2 is the old version of orangefs
+pvfs2,           {ORANGEFS_DEVREQ_MAGIC}
+qnx4,            {QNX4_SUPER_MAGIC}
+qnx6,            {QNX6_SUPER_MAGIC}
+ramfs,           {RAMFS_MAGIC}
+resctrl,         {RDTGROUP_SUPER_MAGIC}
+reiserfs,        {REISERFS_SUPER_MAGIC}
+rpc_pipefs,      {RPC_PIPEFS_SUPER_MAGIC}
+secretmem,       {SECRETMEM_MAGIC}
+securityfs,      {SECURITYFS_MAGIC}
+selinuxfs,       {SELINUX_MAGIC}
+shiftfs,         {SHIFTFS_MAGIC}
+smackfs,         {SMACK_MAGIC}
+# smb3 is an alias for cifs
+smb3,            {CIFS_SUPER_MAGIC}
+# smbfs was removed from the kernel in 2010, the magic remains
+smbfs,           {SMB_SUPER_MAGIC}
+sockfs,          {SOCKFS_MAGIC}
+squashfs,        {SQUASHFS_MAGIC}
+sysfs,           {SYSFS_MAGIC}
+# note that devtmpfs shares the same magic with tmpfs, given it is just a special named instance of it.
+tmpfs,           {TMPFS_MAGIC}
+tracefs,         {TRACEFS_MAGIC}
+udf,             {UDF_SUPER_MAGIC}
+usbdevfs,        {USBDEVICE_SUPER_MAGIC}
+vboxsf,          {VBOXSF_SUPER_MAGIC}
+# note that msdos shares the same magic (and is the older version)
+vfat,            {MSDOS_SUPER_MAGIC}
+v9fs,            {V9FS_MAGIC}
+xenfs,           {XENFS_SUPER_MAGIC}
+xfs,             {XFS_SUPER_MAGIC}
+z3fold,          {Z3FOLD_MAGIC}
+zonefs,          {ZONEFS_MAGIC}
+zsmalloc,        {ZSMALLOC_MAGIC}
diff --git a/src/basic/filesystems.c b/src/basic/filesystems.c
new file mode 100644
index 0000000..7d34e4e
--- /dev/null
+++ b/src/basic/filesystems.c
@@ -0,0 +1,175 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "filesystems-gperf.h"
+#include "stat-util.h"
+
+const char *fs_type_to_string(statfs_f_type_t magic) {
+
+        switch (magic) {
+#include "filesystem-switch-case.h"
+        }
+
+        return NULL;
+}
+
+
+int fs_type_from_string(const char *name, const statfs_f_type_t **ret) {
+        const struct FilesystemMagic *fs_magic;
+
+        assert(name);
+        assert(ret);
+
+        fs_magic = filesystems_gperf_lookup(name, strlen(name));
+        if (!fs_magic)
+                return -EINVAL;
+
+        *ret = fs_magic->magic;
+        return 0;
+}
+
+bool fs_in_group(const struct statfs *s, FilesystemGroups fs_group) {
+        int r;
+
+        NULSTR_FOREACH(fs, filesystem_sets[fs_group].value) {
+                const statfs_f_type_t *magic;
+
+                r = fs_type_from_string(fs, &magic);
+                if (r >= 0)
+                        for (size_t i = 0; i < FILESYSTEM_MAGIC_MAX; i++) {
+                                if (magic[i] == 0)
+                                        break;
+
+                                if (is_fs_type(s, magic[i]))
+                                        return true;
+                        }
+        }
+
+        return false;
+}
+
+const FilesystemSet filesystem_sets[_FILESYSTEM_SET_MAX] = {
+        [FILESYSTEM_SET_BASIC_API] = {
+                .name = "@basic-api",
+                .help = "Basic filesystem API",
+                .value =
+                "cgroup\0"
+                "cgroup2\0"
+                "devpts\0"
+                "devtmpfs\0"
+                "mqueue\0"
+                "proc\0"
+                "sysfs\0"
+        },
+        [FILESYSTEM_SET_ANONYMOUS] = {
+                .name = "@anonymous",
+                .help = "Anonymous inodes",
+                .value =
+                "anon_inodefs\0"
+                "pipefs\0"
+                "sockfs\0"
+        },
+        [FILESYSTEM_SET_APPLICATION] = {
+                .name = "@application",
+                .help = "Application virtual filesystems",
+                .value =
+                "autofs\0"
+                "fuse\0"
+                "overlay\0"
+        },
+        [FILESYSTEM_SET_AUXILIARY_API] = {
+                .name = "@auxiliary-api",
+                .help = "Auxiliary filesystem API",
+                .value =
+                "binfmt_misc\0"
+                "configfs\0"
+                "efivarfs\0"
+                "fusectl\0"
+                "hugetlbfs\0"
+                "rpc_pipefs\0"
+                "securityfs\0"
+        },
+        [FILESYSTEM_SET_COMMON_BLOCK] = {
+                .name = "@common-block",
+                .help = "Common block device filesystems",
+                .value =
+                "btrfs\0"
+                "erofs\0"
+                "exfat\0"
+                "ext4\0"
+                "f2fs\0"
+                "iso9660\0"
+                "ntfs3\0"
+                "squashfs\0"
+                "udf\0"
+                "vfat\0"
+                "xfs\0"
+        },
+        [FILESYSTEM_SET_HISTORICAL_BLOCK] = {
+                .name = "@historical-block",
+                .help = "Historical block device filesystems",
+                .value =
+                "ext2\0"
+                "ext3\0"
+                "minix\0"
+        },
+        [FILESYSTEM_SET_NETWORK] = {
+                .name = "@network",
+                .help = "Well-known network filesystems",
+                .value =
+                "afs\0"
+                "ceph\0"
+                "cifs\0"
+                "gfs\0"
+                "gfs2\0"
+                "ncp\0"
+                "ncpfs\0"
+                "nfs\0"
+                "nfs4\0"
+                "ocfs2\0"
+                "orangefs\0"
+                "pvfs2\0"
+                "smb3\0"
+                "smbfs\0"
+        },
+        [FILESYSTEM_SET_PRIVILEGED_API] = {
+                .name = "@privileged-api",
+                .help = "Privileged filesystem API",
+                .value =
+                "bpf\0"
+                "debugfs\0"
+                "pstore\0"
+                "tracefs\0"
+        },
+        [FILESYSTEM_SET_SECURITY] = {
+                .name = "@security",
+                .help = "Security/MAC API VFS",
+                .value =
+                "apparmorfs\0"
+                "selinuxfs\0"
+                "smackfs\0"
+        },
+        [FILESYSTEM_SET_TEMPORARY] = {
+                .name = "@temporary",
+                .help = "Temporary filesystems",
+                .value =
+                "ramfs\0"
+                "tmpfs\0"
+        },
+        [FILESYSTEM_SET_KNOWN] = {
+                .name = "@known",
+                .help = "All known filesystems declared in the kernel",
+                .value =
+#include "filesystem-list.h"
+        },
+};
+
+const FilesystemSet *filesystem_set_find(const char *name) {
+        if (isempty(name) || name[0] != '@')
+                return NULL;
+
+        for (FilesystemGroups i = 0; i < _FILESYSTEM_SET_MAX; i++)
+                if (streq(filesystem_sets[i].name, name))
+                        return filesystem_sets + i;
+
+        return NULL;
+}
diff --git a/src/basic/filesystems.h b/src/basic/filesystems.h
new file mode 100644
index 0000000..f9edbc1
--- /dev/null
+++ b/src/basic/filesystems.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "nulstr-util.h"
+#include "stat-util.h"
+#include "string-util.h"
+
+#define FILESYSTEM_MAGIC_MAX 10
+
+typedef enum FilesystemGroups {
+        /* Please leave BASIC_API first and KNOWN last, but sort the rest alphabetically */
+        FILESYSTEM_SET_BASIC_API,
+        FILESYSTEM_SET_ANONYMOUS,
+        FILESYSTEM_SET_APPLICATION,
+        FILESYSTEM_SET_AUXILIARY_API,
+        FILESYSTEM_SET_COMMON_BLOCK,
+        FILESYSTEM_SET_HISTORICAL_BLOCK,
+        FILESYSTEM_SET_NETWORK,
+        FILESYSTEM_SET_PRIVILEGED_API,
+        FILESYSTEM_SET_SECURITY,
+        FILESYSTEM_SET_TEMPORARY,
+        FILESYSTEM_SET_KNOWN,
+        _FILESYSTEM_SET_MAX,
+        _FILESYSTEM_SET_INVALID = -EINVAL,
+} FilesystemGroups;
+
+typedef struct FilesystemSet {
+        const char *name;
+        const char *help;
+        const char *value;
+} FilesystemSet;
+
+extern const FilesystemSet filesystem_sets[];
+
+const FilesystemSet *filesystem_set_find(const char *name);
+
+const char *fs_type_to_string(statfs_f_type_t magic);
+int fs_type_from_string(const char *name, const statfs_f_type_t **ret);
+bool fs_in_group(const struct statfs *s, enum FilesystemGroups fs_group);
+
+/* gperf prototypes */
+const struct FilesystemMagic* filesystems_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
diff --git a/src/basic/format-util.c b/src/basic/format-util.c
index 9920604..9450185 100644
--- a/src/basic/format-util.c
+++ b/src/basic/format-util.c
@@ -3,23 +3,43 @@
 #include "format-util.h"
 #include "memory-util.h"
 #include "stdio-util.h"
+#include "strxcpyx.h"
 
-assert_cc(DECIMAL_STR_MAX(int) + 1 <= IF_NAMESIZE + 1);
-char *format_ifname_full(int ifindex, char buf[static IF_NAMESIZE + 1], FormatIfnameFlag flag) {
-        /* Buffer is always cleared */
-        memzero(buf, IF_NAMESIZE + 1);
+assert_cc(STRLEN("%") + DECIMAL_STR_MAX(int) <= IF_NAMESIZE);
+int format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]) {
+        if (ifindex <= 0)
+                return -EINVAL;
+
         if (if_indextoname(ifindex, buf))
-                return buf;
+                return 0;
 
         if (!FLAGS_SET(flag, FORMAT_IFNAME_IFINDEX))
-                return NULL;
+                return -errno;
 
         if (FLAGS_SET(flag, FORMAT_IFNAME_IFINDEX_WITH_PERCENT))
-                snprintf(buf, IF_NAMESIZE + 1, "%%%d", ifindex);
+                assert(snprintf_ok(buf, IF_NAMESIZE, "%%%d", ifindex));
         else
-                snprintf(buf, IF_NAMESIZE + 1, "%d", ifindex);
+                assert(snprintf_ok(buf, IF_NAMESIZE, "%d", ifindex));
 
-        return buf;
+        return 0;
+}
+
+int format_ifname_full_alloc(int ifindex, FormatIfnameFlag flag, char **ret) {
+        char buf[IF_NAMESIZE], *copy;
+        int r;
+
+        assert(ret);
+
+        r = format_ifname_full(ifindex, flag, buf);
+        if (r < 0)
+                return r;
+
+        copy = strdup(buf);
+        if (!copy)
+                return -ENOMEM;
+
+        *ret = copy;
+        return 0;
 }
 
 char *format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag) {
@@ -56,23 +76,23 @@
         for (size_t i = 0; i < n; i++)
                 if (t >= table[i].factor) {
                         if (flag & FORMAT_BYTES_BELOW_POINT) {
-                                snprintf(buf, l,
-                                         "%" PRIu64 ".%" PRIu64 "%s",
-                                         t / table[i].factor,
-                                         i != n - 1 ?
-                                         (t / table[i + 1].factor * UINT64_C(10) / table[n - 1].factor) % UINT64_C(10):
-                                         (t * UINT64_C(10) / table[i].factor) % UINT64_C(10),
-                                         table[i].suffix);
+                                (void) snprintf(buf, l,
+                                                "%" PRIu64 ".%" PRIu64 "%s",
+                                                t / table[i].factor,
+                                                i != n - 1 ?
+                                                (t / table[i + 1].factor * UINT64_C(10) / table[n - 1].factor) % UINT64_C(10):
+                                                (t * UINT64_C(10) / table[i].factor) % UINT64_C(10),
+                                                table[i].suffix);
                         } else
-                                snprintf(buf, l,
-                                         "%" PRIu64 "%s",
-                                         t / table[i].factor,
-                                         table[i].suffix);
+                                (void) snprintf(buf, l,
+                                                "%" PRIu64 "%s",
+                                                t / table[i].factor,
+                                                table[i].suffix);
 
                         goto finish;
                 }
 
-        snprintf(buf, l, "%" PRIu64 "%s", t, flag & FORMAT_BYTES_TRAILING_B ? "B" : "");
+        (void) snprintf(buf, l, "%" PRIu64 "%s", t, flag & FORMAT_BYTES_TRAILING_B ? "B" : "");
 
 finish:
         buf[l-1] = 0;
diff --git a/src/basic/format-util.h b/src/basic/format-util.h
index 0272eda..8719df3 100644
--- a/src/basic/format-util.h
+++ b/src/basic/format-util.h
@@ -63,10 +63,23 @@
         FORMAT_IFNAME_IFINDEX_WITH_PERCENT = (1 << 1) | FORMAT_IFNAME_IFINDEX,
 } FormatIfnameFlag;
 
-char *format_ifname_full(int ifindex, char buf[static IF_NAMESIZE + 1], FormatIfnameFlag flag);
-static inline char *format_ifname(int ifindex, char buf[static IF_NAMESIZE + 1]) {
-        return format_ifname_full(ifindex, buf, 0);
+int format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]);
+int format_ifname_full_alloc(int ifindex, FormatIfnameFlag flag, char **ret);
+
+static inline int format_ifname(int ifindex, char buf[static IF_NAMESIZE]) {
+        return format_ifname_full(ifindex, 0, buf);
 }
+static inline int format_ifname_alloc(int ifindex, char **ret) {
+        return format_ifname_full_alloc(ifindex, 0, ret);
+}
+
+static inline char *_format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]) {
+        (void) format_ifname_full(ifindex, flag, buf);
+        return buf;
+}
+
+#define FORMAT_IFNAME_FULL(index, flag) _format_ifname_full(index, flag, (char[IF_NAMESIZE]){})
+#define FORMAT_IFNAME(index) _format_ifname_full(index, 0, (char[IF_NAMESIZE]){})
 
 typedef enum {
         FORMAT_BYTES_USE_IEC     = 1 << 0,
@@ -76,16 +89,17 @@
 
 #define FORMAT_BYTES_MAX 16U
 
-char *format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag);
+char *format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag) _warn_unused_result_;
 
+_warn_unused_result_
 static inline char *format_bytes(char *buf, size_t l, uint64_t t) {
         return format_bytes_full(buf, l, t, FORMAT_BYTES_USE_IEC | FORMAT_BYTES_BELOW_POINT | FORMAT_BYTES_TRAILING_B);
 }
 
-static inline char *format_bytes_cgroup_protection(char *buf, size_t l, uint64_t t) {
-        if (t == CGROUP_LIMIT_MAX) {
-                (void) snprintf(buf, l, "%s", "infinity");
-                return buf;
-        }
-        return format_bytes(buf, l, t);
-}
+/* Note: the lifetime of the compound literal is the immediately surrounding block,
+ * see C11 §6.5.2.5, and
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
+#define FORMAT_BYTES(t) format_bytes((char[FORMAT_BYTES_MAX]){}, FORMAT_BYTES_MAX, t)
+#define FORMAT_BYTES_FULL(t, flag) format_bytes_full((char[FORMAT_BYTES_MAX]){}, FORMAT_BYTES_MAX, t, flag)
+
+#define FORMAT_BYTES_CGROUP_PROTECTION(t) (t == CGROUP_LIMIT_MAX ? "infinity" : FORMAT_BYTES(t))
diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c
index 8f0834f..a895f4f 100644
--- a/src/basic/fs-util.c
+++ b/src/basic/fs-util.c
@@ -12,7 +12,7 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
-#include "locale-util.h"
+#include "hostname-util.h"
 #include "log.h"
 #include "macro.h"
 #include "missing_fcntl.h"
@@ -30,65 +30,48 @@
 #include "strv.h"
 #include "time-util.h"
 #include "tmpfile-util.h"
+#include "umask-util.h"
 #include "user-util.h"
-#include "util.h"
 
 int unlink_noerrno(const char *path) {
         PROTECT_ERRNO;
-        int r;
-
-        r = unlink(path);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(unlink(path));
 }
 
 int rmdir_parents(const char *path, const char *stop) {
-        size_t l;
-        int r = 0;
+        char *p;
+        int r;
 
         assert(path);
         assert(stop);
 
-        l = strlen(path);
+        if (!path_is_safe(path))
+                return -EINVAL;
 
-        /* Skip trailing slashes */
-        while (l > 0 && path[l-1] == '/')
-                l--;
+        if (!path_is_safe(stop))
+                return -EINVAL;
 
-        while (l > 0) {
-                char *t;
+        p = strdupa_safe(path);
 
-                /* Skip last component */
-                while (l > 0 && path[l-1] != '/')
-                        l--;
+        for (;;) {
+                char *slash = NULL;
 
-                /* Skip trailing slashes */
-                while (l > 0 && path[l-1] == '/')
-                        l--;
-
-                if (l <= 0)
-                        break;
-
-                t = strndup(path, l);
-                if (!t)
-                        return -ENOMEM;
-
-                if (path_startswith(stop, t)) {
-                        free(t);
+                /* skip the last component. */
+                r = path_find_last_component(p, /* accept_dot_dot= */ false, (const char **) &slash, NULL);
+                if (r <= 0)
+                        return r;
+                if (slash == p)
                         return 0;
-                }
 
-                r = rmdir(t);
-                free(t);
+                assert(*slash == '/');
+                *slash = '\0';
 
-                if (r < 0)
-                        if (errno != ENOENT)
-                                return -errno;
+                if (path_startswith_full(stop, p, /* accept_dot_dot= */ false))
+                        return 0;
+
+                if (rmdir(p) < 0 && errno != ENOENT)
+                        return -errno;
         }
-
-        return 0;
 }
 
 int rename_noreplace(int olddirfd, const char *oldpath, int newdirfd, const char *newpath) {
@@ -108,8 +91,8 @@
          * want — though not atomic (i.e. for a short period both the new and the old filename will exist). */
         if (linkat(olddirfd, oldpath, newdirfd, newpath, 0) >= 0) {
 
-                if (unlinkat(olddirfd, oldpath, 0) < 0) {
-                        r = -errno; /* Backup errno before the following unlinkat() alters it */
+                r = RET_NERRNO(unlinkat(olddirfd, oldpath, 0));
+                if (r < 0) {
                         (void) unlinkat(newdirfd, newpath, 0);
                         return r;
                 }
@@ -128,17 +111,13 @@
         if (errno != ENOENT)
                 return -errno;
 
-        if (renameat(olddirfd, oldpath, newdirfd, newpath) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(renameat(olddirfd, oldpath, newdirfd, newpath));
 }
 
 int readlinkat_malloc(int fd, const char *p, char **ret) {
         size_t l = PATH_MAX;
 
         assert(p);
-        assert(ret);
 
         for (;;) {
                 _cleanup_free_ char *c = NULL;
@@ -154,7 +133,10 @@
 
                 if ((size_t) n < l) {
                         c[n] = 0;
-                        *ret = TAKE_PTR(c);
+
+                        if (ret)
+                                *ret = TAKE_PTR(c);
+
                         return 0;
                 }
 
@@ -172,58 +154,61 @@
 }
 
 int readlink_value(const char *p, char **ret) {
-        _cleanup_free_ char *link = NULL;
-        char *value;
+        _cleanup_free_ char *link = NULL, *name = NULL;
         int r;
 
+        assert(p);
+        assert(ret);
+
         r = readlink_malloc(p, &link);
         if (r < 0)
                 return r;
 
-        value = basename(link);
-        if (!value)
-                return -ENOENT;
+        r = path_extract_filename(link, &name);
+        if (r < 0)
+                return r;
+        if (r == O_DIRECTORY)
+                return -EINVAL;
 
-        value = strdup(value);
-        if (!value)
-                return -ENOMEM;
-
-        *ret = value;
-
+        *ret = TAKE_PTR(name);
         return 0;
 }
 
-int readlink_and_make_absolute(const char *p, char **r) {
+int readlink_and_make_absolute(const char *p, char **ret) {
         _cleanup_free_ char *target = NULL;
-        char *k;
-        int j;
+        int r;
 
         assert(p);
-        assert(r);
+        assert(ret);
 
-        j = readlink_malloc(p, &target);
-        if (j < 0)
-                return j;
+        r = readlink_malloc(p, &target);
+        if (r < 0)
+                return r;
 
-        k = file_in_same_dir(p, target);
-        if (!k)
-                return -ENOMEM;
-
-        *r = k;
-        return 0;
+        return file_in_same_dir(p, target, ret);
 }
 
-int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid) {
-        _cleanup_close_ int fd = -1;
+int chmod_and_chown_at(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid) {
+        _cleanup_close_ int fd = -EBADF;
 
-        assert(path);
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
 
-        fd = open(path, O_PATH|O_CLOEXEC|O_NOFOLLOW); /* Let's acquire an O_PATH fd, as precaution to change
-                                                       * mode/owner on the same file */
-        if (fd < 0)
-                return -errno;
+        if (path) {
+                /* Let's acquire an O_PATH fd, as precaution to change mode/owner on the same file */
+                fd = openat(dir_fd, path, O_PATH|O_CLOEXEC|O_NOFOLLOW);
+                if (fd < 0)
+                        return -errno;
+                dir_fd = fd;
 
-        return fchmod_and_chown(fd, mode, uid, gid);
+        } else if (dir_fd == AT_FDCWD) {
+                /* Let's acquire an O_PATH fd of the current directory */
+                fd = openat(dir_fd, ".", O_PATH|O_CLOEXEC|O_NOFOLLOW|O_DIRECTORY);
+                if (fd < 0)
+                        return -errno;
+                dir_fd = fd;
+        }
+
+        return fchmod_and_chown(dir_fd, mode, uid, gid);
 }
 
 int fchmod_and_chown_with_fallback(int fd, const char *path, mode_t mode, uid_t uid, gid_t gid) {
@@ -297,25 +282,17 @@
 }
 
 int fchmod_umask(int fd, mode_t m) {
-        mode_t u;
-        int r;
+        _cleanup_umask_ mode_t u = umask(0777);
 
-        u = umask(0777);
-        r = fchmod(fd, m & (~u)) < 0 ? -errno : 0;
-        umask(u);
-
-        return r;
+        return RET_NERRNO(fchmod(fd, m & (~u)));
 }
 
 int fchmod_opath(int fd, mode_t m) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-
         /* This function operates also on fd that might have been opened with
          * O_PATH. Indeed fchmodat() doesn't have the AT_EMPTY_PATH flag like
          * fchownat() does. */
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-        if (chmod(procfs_path, m) < 0) {
+        if (chmod(FORMAT_PROC_FD_PATH(fd), m) < 0) {
                 if (errno != ENOENT)
                         return -errno;
 
@@ -329,12 +306,9 @@
 }
 
 int futimens_opath(int fd, const struct timespec ts[2]) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-
         /* Similar to fchmod_path() but for futimens() */
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-        if (utimensat(AT_FDCWD, procfs_path, ts, 0) < 0) {
+        if (utimensat(AT_FDCWD, FORMAT_PROC_FD_PATH(fd), ts, 0) < 0) {
                 if (errno != ENOENT)
                         return -errno;
 
@@ -380,9 +354,8 @@
 }
 
 int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode) {
-        char fdpath[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-        _cleanup_close_ int fd = -1;
-        int r, ret = 0;
+        _cleanup_close_ int fd = -EBADF;
+        int r, ret;
 
         assert(path);
 
@@ -412,8 +385,6 @@
         /* Let's make a path from the fd, and operate on that. With this logic, we can adjust the access mode,
          * ownership and time of the file node in all cases, even if the fd refers to an O_PATH object — which is
          * something fchown(), fchmod(), futimensat() don't allow. */
-        xsprintf(fdpath, "/proc/self/fd/%i", fd);
-
         ret = fchmod_and_chown(fd, mode, uid, gid);
 
         if (stamp != USEC_INFINITY) {
@@ -421,19 +392,15 @@
 
                 timespec_store(&ts[0], stamp);
                 ts[1] = ts[0];
-                r = utimensat(AT_FDCWD, fdpath, ts, 0);
+                r = futimens_opath(fd, ts);
         } else
-                r = utimensat(AT_FDCWD, fdpath, NULL, 0);
+                r = futimens_opath(fd, NULL);
         if (r < 0 && ret >= 0)
-                return -errno;
+                return r;
 
         return ret;
 }
 
-int touch(const char *path) {
-        return touch_file(path, false, USEC_INFINITY, UID_INVALID, GID_INVALID, MODE_INVALID);
-}
-
 int symlink_idempotent(const char *from, const char *to, bool make_relative) {
         _cleanup_free_ char *relpath = NULL;
         int r;
@@ -442,13 +409,7 @@
         assert(to);
 
         if (make_relative) {
-                _cleanup_free_ char *parent = NULL;
-
-                r = path_extract_directory(to, &parent);
-                if (r < 0)
-                        return r;
-
-                r = path_make_relative(parent, from, &relpath);
+                r = path_make_relative_parent(to, from, &relpath);
                 if (r < 0)
                         return r;
 
@@ -474,29 +435,38 @@
         return 0;
 }
 
-int symlink_atomic(const char *from, const char *to) {
-        _cleanup_free_ char *t = NULL;
+int symlinkat_atomic_full(const char *from, int atfd, const char *to, bool make_relative) {
+        _cleanup_free_ char *relpath = NULL, *t = NULL;
         int r;
 
         assert(from);
         assert(to);
 
+        if (make_relative) {
+                r = path_make_relative_parent(to, from, &relpath);
+                if (r < 0)
+                        return r;
+
+                from = relpath;
+        }
+
         r = tempfn_random(to, NULL, &t);
         if (r < 0)
                 return r;
 
-        if (symlink(from, t) < 0)
+        if (symlinkat(from, atfd, t) < 0)
                 return -errno;
 
-        if (rename(t, to) < 0) {
-                unlink_noerrno(t);
-                return -errno;
+        r = RET_NERRNO(renameat(atfd, t, atfd, to));
+        if (r < 0) {
+                (void) unlinkat(atfd, t, 0);
+                return r;
         }
 
         return 0;
 }
 
-int mknod_atomic(const char *path, mode_t mode, dev_t dev) {
+int mknodat_atomic(int atfd, const char *path, mode_t mode, dev_t dev) {
         _cleanup_free_ char *t = NULL;
         int r;
 
@@ -506,58 +476,36 @@
         if (r < 0)
                 return r;
 
-        if (mknod(t, mode, dev) < 0)
+        if (mknodat(atfd, t, mode, dev) < 0)
                 return -errno;
 
-        if (rename(t, path) < 0) {
-                unlink_noerrno(t);
-                return -errno;
-        }
-
-        return 0;
-}
-
-int mkfifo_atomic(const char *path, mode_t mode) {
-        _cleanup_free_ char *t = NULL;
-        int r;
-
-        assert(path);
-
-        r = tempfn_random(path, NULL, &t);
-        if (r < 0)
+        r = RET_NERRNO(renameat(atfd, t, atfd, path));
+        if (r < 0) {
+                (void) unlinkat(atfd, t, 0);
                 return r;
-
-        if (mkfifo(t, mode) < 0)
-                return -errno;
-
-        if (rename(t, path) < 0) {
-                unlink_noerrno(t);
-                return -errno;
         }
 
         return 0;
 }
 
-int mkfifoat_atomic(int dirfd, const char *path, mode_t mode) {
+int mkfifoat_atomic(int atfd, const char *path, mode_t mode) {
         _cleanup_free_ char *t = NULL;
         int r;
 
         assert(path);
 
-        if (path_is_absolute(path))
-                return mkfifo_atomic(path, mode);
-
         /* We're only interested in the (random) filename.  */
-        r = tempfn_random_child("", NULL, &t);
+        r = tempfn_random(path, NULL, &t);
         if (r < 0)
                 return r;
 
-        if (mkfifoat(dirfd, t, mode) < 0)
+        if (mkfifoat(atfd, t, mode) < 0)
                 return -errno;
 
-        if (renameat(dirfd, t, dirfd, path) < 0) {
-                unlink_noerrno(t);
-                return -errno;
+        r = RET_NERRNO(renameat(atfd, t, atfd, path));
+        if (r < 0) {
+                (void) unlinkat(atfd, t, 0);
+                return r;
         }
 
         return 0;
@@ -566,7 +514,6 @@
 int get_files_in_directory(const char *path, char ***list) {
         _cleanup_strv_free_ char **l = NULL;
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         size_t n = 0;
 
         assert(path);
@@ -604,7 +551,6 @@
 }
 
 static int getenv_tmp_dir(const char **ret_path) {
-        const char *n;
         int r, ret = 0;
 
         assert(ret_path);
@@ -702,547 +648,10 @@
         return 0;
 }
 
-int inotify_add_watch_fd(int fd, int what, uint32_t mask) {
-        char path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
-        int wd;
-
-        /* This is like inotify_add_watch(), except that the file to watch is not referenced by a path, but by an fd */
-        xsprintf(path, "/proc/self/fd/%i", what);
-
-        wd = inotify_add_watch(fd, path, mask);
-        if (wd < 0)
-                return -errno;
-
-        return wd;
-}
-
-int inotify_add_watch_and_warn(int fd, const char *pathname, uint32_t mask) {
-        int wd;
-
-        wd = inotify_add_watch(fd, pathname, mask);
-        if (wd < 0) {
-                if (errno == ENOSPC)
-                        return log_error_errno(errno, "Failed to add a watch for %s: inotify watch limit reached", pathname);
-
-                return log_error_errno(errno, "Failed to add a watch for %s: %m", pathname);
-        }
-
-        return wd;
-}
-
-bool unsafe_transition(const struct stat *a, const struct stat *b) {
-        /* Returns true if the transition from a to b is safe, i.e. that we never transition from unprivileged to
-         * privileged files or directories. Why bother? So that unprivileged code can't symlink to privileged files
-         * making us believe we read something safe even though it isn't safe in the specific context we open it in. */
-
-        if (a->st_uid == 0) /* Transitioning from privileged to unprivileged is always fine */
-                return false;
-
-        return a->st_uid != b->st_uid; /* Otherwise we need to stay within the same UID */
-}
-
-static int log_unsafe_transition(int a, int b, const char *path, unsigned flags) {
-        _cleanup_free_ char *n1 = NULL, *n2 = NULL, *user_a = NULL, *user_b = NULL;
-        struct stat st;
-
-        if (!FLAGS_SET(flags, CHASE_WARN))
-                return -ENOLINK;
-
-        (void) fd_get_path(a, &n1);
-        (void) fd_get_path(b, &n2);
-
-        if (fstat(a, &st) == 0)
-                user_a = uid_to_name(st.st_uid);
-        if (fstat(b, &st) == 0)
-                user_b = uid_to_name(st.st_uid);
-
-        return log_warning_errno(SYNTHETIC_ERRNO(ENOLINK),
-                                 "Detected unsafe path transition %s (owned by %s) %s %s (owned by %s) during canonicalization of %s.",
-                                 strna(n1), strna(user_a), special_glyph(SPECIAL_GLYPH_ARROW), strna(n2), strna(user_b), path);
-}
-
-static int log_autofs_mount_point(int fd, const char *path, unsigned flags) {
-        _cleanup_free_ char *n1 = NULL;
-
-        if (!FLAGS_SET(flags, CHASE_WARN))
-                return -EREMOTE;
-
-        (void) fd_get_path(fd, &n1);
-
-        return log_warning_errno(SYNTHETIC_ERRNO(EREMOTE),
-                                 "Detected autofs mount point %s during canonicalization of %s.",
-                                 strna(n1), path);
-}
-
-int chase_symlinks(const char *path, const char *original_root, unsigned flags, char **ret_path, int *ret_fd) {
-        _cleanup_free_ char *buffer = NULL, *done = NULL, *root = NULL;
-        _cleanup_close_ int fd = -1;
-        unsigned max_follow = CHASE_SYMLINKS_MAX; /* how many symlinks to follow before giving up and returning ELOOP */
-        bool exists = true, append_trail_slash = false;
-        struct stat previous_stat;
-        const char *todo;
-        int r;
-
-        assert(path);
-
-        /* Either the file may be missing, or we return an fd to the final object, but both make no sense */
-        if ((flags & CHASE_NONEXISTENT) && ret_fd)
-                return -EINVAL;
-
-        if ((flags & CHASE_STEP) && ret_fd)
-                return -EINVAL;
-
-        if (isempty(path))
-                return -EINVAL;
-
-        /* This is a lot like canonicalize_file_name(), but takes an additional "root" parameter, that allows following
-         * symlinks relative to a root directory, instead of the root of the host.
-         *
-         * Note that "root" primarily matters if we encounter an absolute symlink. It is also used when following
-         * relative symlinks to ensure they cannot be used to "escape" the root directory. The path parameter passed is
-         * assumed to be already prefixed by it, except if the CHASE_PREFIX_ROOT flag is set, in which case it is first
-         * prefixed accordingly.
-         *
-         * Algorithmically this operates on two path buffers: "done" are the components of the path we already
-         * processed and resolved symlinks, "." and ".." of. "todo" are the components of the path we still need to
-         * process. On each iteration, we move one component from "todo" to "done", processing it's special meaning
-         * each time. The "todo" path always starts with at least one slash, the "done" path always ends in no
-         * slash. We always keep an O_PATH fd to the component we are currently processing, thus keeping lookup races
-         * to a minimum.
-         *
-         * Suggested usage: whenever you want to canonicalize a path, use this function. Pass the absolute path you got
-         * as-is: fully qualified and relative to your host's root. Optionally, specify the root parameter to tell this
-         * function what to do when encountering a symlink with an absolute path as directory: prefix it by the
-         * specified path.
-         *
-         * There are five ways to invoke this function:
-         *
-         * 1. Without CHASE_STEP or ret_fd: in this case the path is resolved and the normalized path is
-         *    returned in `ret_path`. The return value is < 0 on error. If CHASE_NONEXISTENT is also set, 0
-         *    is returned if the file doesn't exist, > 0 otherwise. If CHASE_NONEXISTENT is not set, >= 0 is
-         *    returned if the destination was found, -ENOENT if it wasn't.
-         *
-         * 2. With ret_fd: in this case the destination is opened after chasing it as O_PATH and this file
-         *    descriptor is returned as return value. This is useful to open files relative to some root
-         *    directory. Note that the returned O_PATH file descriptors must be converted into a regular one (using
-         *    fd_reopen() or such) before it can be used for reading/writing. ret_fd may not be combined with
-         *    CHASE_NONEXISTENT.
-         *
-         * 3. With CHASE_STEP: in this case only a single step of the normalization is executed, i.e. only the first
-         *    symlink or ".." component of the path is resolved, and the resulting path is returned. This is useful if
-         *    a caller wants to trace the path through the file system verbosely. Returns < 0 on error, > 0 if the
-         *    path is fully normalized, and == 0 for each normalization step. This may be combined with
-         *    CHASE_NONEXISTENT, in which case 1 is returned when a component is not found.
-         *
-         * 4. With CHASE_SAFE: in this case the path must not contain unsafe transitions, i.e. transitions from
-         *    unprivileged to privileged files or directories. In such cases the return value is -ENOLINK. If
-         *    CHASE_WARN is also set, a warning describing the unsafe transition is emitted.
-         *
-         * 5. With CHASE_NO_AUTOFS: in this case if an autofs mount point is encountered, path normalization
-         *    is aborted and -EREMOTE is returned. If CHASE_WARN is also set, a warning showing the path of
-         *    the mount point is emitted.
-         */
-
-        /* A root directory of "/" or "" is identical to none */
-        if (empty_or_root(original_root))
-                original_root = NULL;
-
-        if (!original_root && !ret_path && !(flags & (CHASE_NONEXISTENT|CHASE_NO_AUTOFS|CHASE_SAFE|CHASE_STEP)) && ret_fd) {
-                /* Shortcut the ret_fd case if the caller isn't interested in the actual path and has no root set
-                 * and doesn't care about any of the other special features we provide either. */
-                r = open(path, O_PATH|O_CLOEXEC|((flags & CHASE_NOFOLLOW) ? O_NOFOLLOW : 0));
-                if (r < 0)
-                        return -errno;
-
-                *ret_fd = r;
-                return 0;
-        }
-
-        if (original_root) {
-                r = path_make_absolute_cwd(original_root, &root);
-                if (r < 0)
-                        return r;
-
-                /* Simplify the root directory, so that it has no duplicate slashes and nothing at the
-                 * end. While we won't resolve the root path we still simplify it. Note that dropping the
-                 * trailing slash should not change behaviour, since when opening it we specify O_DIRECTORY
-                 * anyway. Moreover at the end of this function after processing everything we'll always turn
-                 * the empty string back to "/". */
-                delete_trailing_chars(root, "/");
-                path_simplify(root);
-
-                if (flags & CHASE_PREFIX_ROOT) {
-                        /* We don't support relative paths in combination with a root directory */
-                        if (!path_is_absolute(path))
-                                return -EINVAL;
-
-                        path = prefix_roota(root, path);
-                }
-        }
-
-        r = path_make_absolute_cwd(path, &buffer);
-        if (r < 0)
-                return r;
-
-        fd = open(root ?: "/", O_CLOEXEC|O_DIRECTORY|O_PATH);
-        if (fd < 0)
-                return -errno;
-
-        if (flags & CHASE_SAFE)
-                if (fstat(fd, &previous_stat) < 0)
-                        return -errno;
-
-        if (flags & CHASE_TRAIL_SLASH)
-                append_trail_slash = endswith(buffer, "/") || endswith(buffer, "/.");
-
-        if (root) {
-                /* If we are operating on a root directory, let's take the root directory as it is. */
-
-                todo = path_startswith(buffer, root);
-                if (!todo)
-                        return log_full_errno(flags & CHASE_WARN ? LOG_WARNING : LOG_DEBUG,
-                                              SYNTHETIC_ERRNO(ECHRNG),
-                                              "Specified path '%s' is outside of specified root directory '%s', refusing to resolve.",
-                                              path, root);
-
-                done = strdup(root);
-        } else {
-                todo = buffer;
-                done = strdup("/");
-        }
-
-        for (;;) {
-                _cleanup_free_ char *first = NULL;
-                _cleanup_close_ int child = -1;
-                struct stat st;
-                const char *e;
-
-                r = path_find_first_component(&todo, true, &e);
-                if (r < 0)
-                        return r;
-                if (r == 0) { /* We reached the end. */
-                        if (append_trail_slash)
-                                if (!strextend(&done, "/"))
-                                        return -ENOMEM;
-                        break;
-                }
-
-                first = strndup(e, r);
-                if (!first)
-                        return -ENOMEM;
-
-                /* Two dots? Then chop off the last bit of what we already found out. */
-                if (path_equal(first, "..")) {
-                        _cleanup_free_ char *parent = NULL;
-                        _cleanup_close_ int fd_parent = -1;
-
-                        /* If we already are at the top, then going up will not change anything. This is in-line with
-                         * how the kernel handles this. */
-                        if (empty_or_root(done))
-                                continue;
-
-                        parent = dirname_malloc(done);
-                        if (!parent)
-                                return -ENOMEM;
-
-                        /* Don't allow this to leave the root dir.  */
-                        if (root &&
-                            path_startswith(done, root) &&
-                            !path_startswith(parent, root))
-                                continue;
-
-                        free_and_replace(done, parent);
-
-                        if (flags & CHASE_STEP)
-                                goto chased_one;
-
-                        fd_parent = openat(fd, "..", O_CLOEXEC|O_NOFOLLOW|O_PATH);
-                        if (fd_parent < 0)
-                                return -errno;
-
-                        if (flags & CHASE_SAFE) {
-                                if (fstat(fd_parent, &st) < 0)
-                                        return -errno;
-
-                                if (unsafe_transition(&previous_stat, &st))
-                                        return log_unsafe_transition(fd, fd_parent, path, flags);
-
-                                previous_stat = st;
-                        }
-
-                        safe_close(fd);
-                        fd = TAKE_FD(fd_parent);
-
-                        continue;
-                }
-
-                /* Otherwise let's see what this is. */
-                child = openat(fd, first, O_CLOEXEC|O_NOFOLLOW|O_PATH);
-                if (child < 0) {
-                        if (errno == ENOENT &&
-                            (flags & CHASE_NONEXISTENT) &&
-                            (isempty(todo) || path_is_safe(todo))) {
-                                /* If CHASE_NONEXISTENT is set, and the path does not exist, then
-                                 * that's OK, return what we got so far. But don't allow this if the
-                                 * remaining path contains "../" or something else weird. */
-
-                                if (!path_extend(&done, first, todo))
-                                        return -ENOMEM;
-
-                                exists = false;
-                                break;
-                        }
-
-                        return -errno;
-                }
-
-                if (fstat(child, &st) < 0)
-                        return -errno;
-                if ((flags & CHASE_SAFE) &&
-                    unsafe_transition(&previous_stat, &st))
-                        return log_unsafe_transition(fd, child, path, flags);
-
-                previous_stat = st;
-
-                if ((flags & CHASE_NO_AUTOFS) &&
-                    fd_is_fs_type(child, AUTOFS_SUPER_MAGIC) > 0)
-                        return log_autofs_mount_point(child, path, flags);
-
-                if (S_ISLNK(st.st_mode) && !((flags & CHASE_NOFOLLOW) && isempty(todo))) {
-                        _cleanup_free_ char *destination = NULL;
-
-                        /* This is a symlink, in this case read the destination. But let's make sure we
-                         * don't follow symlinks without bounds. */
-                        if (--max_follow <= 0)
-                                return -ELOOP;
-
-                        r = readlinkat_malloc(fd, first, &destination);
-                        if (r < 0)
-                                return r;
-                        if (isempty(destination))
-                                return -EINVAL;
-
-                        if (path_is_absolute(destination)) {
-
-                                /* An absolute destination. Start the loop from the beginning, but use the root
-                                 * directory as base. */
-
-                                safe_close(fd);
-                                fd = open(root ?: "/", O_CLOEXEC|O_DIRECTORY|O_PATH);
-                                if (fd < 0)
-                                        return -errno;
-
-                                if (flags & CHASE_SAFE) {
-                                        if (fstat(fd, &st) < 0)
-                                                return -errno;
-
-                                        if (unsafe_transition(&previous_stat, &st))
-                                                return log_unsafe_transition(child, fd, path, flags);
-
-                                        previous_stat = st;
-                                }
-
-                                /* Note that we do not revalidate the root, we take it as is. */
-                                r = free_and_strdup(&done, empty_to_root(root));
-                                if (r < 0)
-                                        return r;
-                        }
-
-                        /* Prefix what's left to do with what we just read, and start the loop again, but
-                         * remain in the current directory. */
-                        if (!path_extend(&destination, todo))
-                                return -ENOMEM;
-
-                        free_and_replace(buffer, destination);
-                        todo = buffer;
-
-                        if (flags & CHASE_STEP)
-                                goto chased_one;
-
-                        continue;
-                }
-
-                /* If this is not a symlink, then let's just add the name we read to what we already verified. */
-                if (!path_extend(&done, first))
-                        return -ENOMEM;
-
-                /* And iterate again, but go one directory further down. */
-                safe_close(fd);
-                fd = TAKE_FD(child);
-        }
-
-        if (ret_path)
-                *ret_path = TAKE_PTR(done);
-
-        if (ret_fd) {
-                /* Return the O_PATH fd we currently are looking to the caller. It can translate it to a
-                 * proper fd by opening /proc/self/fd/xyz. */
-
-                assert(fd >= 0);
-                *ret_fd = TAKE_FD(fd);
-        }
-
-        if (flags & CHASE_STEP)
-                return 1;
-
-        return exists;
-
-chased_one:
-        if (ret_path) {
-                const char *e;
-
-                /* todo may contain slashes at the beginning. */
-                r = path_find_first_component(&todo, true, &e);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        *ret_path = TAKE_PTR(done);
-                else {
-                        char *c;
-
-                        c = path_join(done, e);
-                        if (!c)
-                                return -ENOMEM;
-
-                        *ret_path = c;
-                }
-        }
-
-        return 0;
-}
-
-int chase_symlinks_and_open(
-                const char *path,
-                const char *root,
-                unsigned chase_flags,
-                int open_flags,
-                char **ret_path) {
-
-        _cleanup_close_ int path_fd = -1;
-        _cleanup_free_ char *p = NULL;
-        int r;
-
-        if (chase_flags & CHASE_NONEXISTENT)
-                return -EINVAL;
-
-        if (empty_or_root(root) && !ret_path && (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE)) == 0) {
-                /* Shortcut this call if none of the special features of this call are requested */
-                r = open(path, open_flags);
-                if (r < 0)
-                        return -errno;
-
-                return r;
-        }
-
-        r = chase_symlinks(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
-        if (r < 0)
-                return r;
-        assert(path_fd >= 0);
-
-        r = fd_reopen(path_fd, open_flags);
-        if (r < 0)
-                return r;
-
-        if (ret_path)
-                *ret_path = TAKE_PTR(p);
-
-        return r;
-}
-
-int chase_symlinks_and_opendir(
-                const char *path,
-                const char *root,
-                unsigned chase_flags,
-                char **ret_path,
-                DIR **ret_dir) {
-
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-        _cleanup_close_ int path_fd = -1;
-        _cleanup_free_ char *p = NULL;
-        DIR *d;
-        int r;
-
-        if (!ret_dir)
-                return -EINVAL;
-        if (chase_flags & CHASE_NONEXISTENT)
-                return -EINVAL;
-
-        if (empty_or_root(root) && !ret_path && (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE)) == 0) {
-                /* Shortcut this call if none of the special features of this call are requested */
-                d = opendir(path);
-                if (!d)
-                        return -errno;
-
-                *ret_dir = d;
-                return 0;
-        }
-
-        r = chase_symlinks(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
-        if (r < 0)
-                return r;
-        assert(path_fd >= 0);
-
-        xsprintf(procfs_path, "/proc/self/fd/%i", path_fd);
-        d = opendir(procfs_path);
-        if (!d)
-                return -errno;
-
-        if (ret_path)
-                *ret_path = TAKE_PTR(p);
-
-        *ret_dir = d;
-        return 0;
-}
-
-int chase_symlinks_and_stat(
-                const char *path,
-                const char *root,
-                unsigned chase_flags,
-                char **ret_path,
-                struct stat *ret_stat,
-                int *ret_fd) {
-
-        _cleanup_close_ int path_fd = -1;
-        _cleanup_free_ char *p = NULL;
-        int r;
-
-        assert(path);
-        assert(ret_stat);
-
-        if (chase_flags & CHASE_NONEXISTENT)
-                return -EINVAL;
-
-        if (empty_or_root(root) && !ret_path && (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE)) == 0) {
-                /* Shortcut this call if none of the special features of this call are requested */
-                if (stat(path, ret_stat) < 0)
-                        return -errno;
-
-                return 1;
-        }
-
-        r = chase_symlinks(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
-        if (r < 0)
-                return r;
-        assert(path_fd >= 0);
-
-        if (fstat(path_fd, ret_stat) < 0)
-                return -errno;
-
-        if (ret_path)
-                *ret_path = TAKE_PTR(p);
-        if (ret_fd)
-                *ret_fd = TAKE_FD(path_fd);
-
-        return 1;
-}
-
 int access_fd(int fd, int mode) {
-        char p[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(fd) + 1];
-
         /* Like access() but operates on an already open fd */
 
-        xsprintf(p, "/proc/self/fd/%i", fd);
-        if (access(p, mode) < 0) {
+        if (access(FORMAT_PROC_FD_PATH(fd), mode) < 0) {
                 if (errno != ENOENT)
                         return -errno;
 
@@ -1269,7 +678,7 @@
 }
 
 int unlinkat_deallocate(int fd, const char *name, UnlinkDeallocateFlags flags) {
-        _cleanup_close_ int truncate_fd = -1;
+        _cleanup_close_ int truncate_fd = -EBADF;
         struct stat st;
         off_t l, bs;
 
@@ -1377,116 +786,9 @@
         return 0;
 }
 
-int fsync_directory_of_file(int fd) {
-        _cleanup_free_ char *path = NULL;
-        _cleanup_close_ int dfd = -1;
-        struct stat st;
-        int r;
-
-        assert(fd >= 0);
-
-        /* We only reasonably can do this for regular files and directories, hence check for that */
-        if (fstat(fd, &st) < 0)
-                return -errno;
-
-        if (S_ISREG(st.st_mode)) {
-
-                r = fd_get_path(fd, &path);
-                if (r < 0) {
-                        log_debug_errno(r, "Failed to query /proc/self/fd/%d%s: %m",
-                                        fd,
-                                        r == -ENOSYS ? ", ignoring" : "");
-
-                        if (r == -ENOSYS)
-                                /* If /proc is not available, we're most likely running in some
-                                 * chroot environment, and syncing the directory is not very
-                                 * important in that case. Let's just silently do nothing. */
-                                return 0;
-
-                        return r;
-                }
-
-                if (!path_is_absolute(path))
-                        return -EINVAL;
-
-                dfd = open_parent(path, O_CLOEXEC|O_NOFOLLOW, 0);
-                if (dfd < 0)
-                        return dfd;
-
-        } else if (S_ISDIR(st.st_mode)) {
-                dfd = openat(fd, "..", O_RDONLY|O_DIRECTORY|O_CLOEXEC, 0);
-                if (dfd < 0)
-                        return -errno;
-        } else
-                return -ENOTTY;
-
-        if (fsync(dfd) < 0)
-                return -errno;
-
-        return 0;
-}
-
-int fsync_full(int fd) {
-        int r, q;
-
-        /* Sync both the file and the directory */
-
-        r = fsync(fd) < 0 ? -errno : 0;
-
-        q = fsync_directory_of_file(fd);
-        if (r < 0) /* Return earlier error */
-                return r;
-        if (q == -ENOTTY) /* Ignore if the 'fd' refers to a block device or so which doesn't really have a
-                           * parent dir */
-                return 0;
-        return q;
-}
-
-int fsync_path_at(int at_fd, const char *path) {
-        _cleanup_close_ int opened_fd = -1;
-        int fd;
-
-        if (isempty(path)) {
-                if (at_fd == AT_FDCWD) {
-                        opened_fd = open(".", O_RDONLY|O_DIRECTORY|O_CLOEXEC);
-                        if (opened_fd < 0)
-                                return -errno;
-
-                        fd = opened_fd;
-                } else
-                        fd = at_fd;
-        } else {
-                opened_fd = openat(at_fd, path, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
-                if (opened_fd < 0)
-                        return -errno;
-
-                fd = opened_fd;
-        }
-
-        if (fsync(fd) < 0)
-                return -errno;
-
-        return 0;
-}
-
-int syncfs_path(int atfd, const char *path) {
-        _cleanup_close_ int fd = -1;
-
-        assert(path);
-
-        fd = openat(atfd, path, O_CLOEXEC|O_RDONLY|O_NONBLOCK);
-        if (fd < 0)
-                return -errno;
-
-        if (syncfs(fd) < 0)
-                return -errno;
-
-        return 0;
-}
-
 int open_parent(const char *path, int flags, mode_t mode) {
         _cleanup_free_ char *parent = NULL;
-        int fd, r;
+        int r;
 
         r = path_extract_directory(path, &parent);
         if (r < 0)
@@ -1500,18 +802,14 @@
         else if (!FLAGS_SET(flags, O_TMPFILE))
                 flags |= O_DIRECTORY|O_RDONLY;
 
-        fd = open(parent, flags, mode);
-        if (fd < 0)
-                return -errno;
-
-        return fd;
+        return RET_NERRNO(open(parent, flags, mode));
 }
 
 int conservative_renameat(
                 int olddirfd, const char *oldpath,
                 int newdirfd, const char *newpath) {
 
-        _cleanup_close_ int old_fd = -1, new_fd = -1;
+        _cleanup_close_ int old_fd = -EBADF, new_fd = -EBADF;
         struct stat old_stat, new_stat;
 
         /* Renames the old path to thew new path, much like renameat() — except if both are regular files and
@@ -1538,8 +836,7 @@
         if (fstat(new_fd, &new_stat) < 0)
                 goto do_rename;
 
-        if (new_stat.st_ino == old_stat.st_ino &&
-            new_stat.st_dev == old_stat.st_dev)
+        if (stat_inode_same(&new_stat, &old_stat))
                 goto is_same;
 
         if (old_stat.st_mode != new_stat.st_mode ||
@@ -1608,7 +905,7 @@
 
         /* On EINTR try a couple of times more, but protect against busy looping
          * (not more than 16 times per 10s) */
-        rl = (RateLimit) { 10 * USEC_PER_SEC, 16 };
+        rl = (const RateLimit) { 10 * USEC_PER_SEC, 16 };
         while (ratelimit_below(&rl)) {
                 r = posix_fallocate(fd, offset, size);
                 if (r != EINTR)
@@ -1617,3 +914,199 @@
 
         return -EINTR;
 }
+
+int parse_cifs_service(
+                const char *s,
+                char **ret_host,
+                char **ret_service,
+                char **ret_path) {
+
+        _cleanup_free_ char *h = NULL, *ss = NULL, *x = NULL;
+        const char *p, *e, *d;
+        char delimiter;
+
+        /* Parses a CIFS service in form of //host/service/path… and splitting it in three parts. The last
+         * part is optional, in which case NULL is returned there. To maximize compatibility syntax with
+         * backslashes instead of slashes is accepted too. */
+
+        if (!s)
+                return -EINVAL;
+
+        p = startswith(s, "//");
+        if (!p) {
+                p = startswith(s, "\\\\");
+                if (!p)
+                        return -EINVAL;
+        }
+
+        delimiter = s[0];
+        e = strchr(p, delimiter);
+        if (!e)
+                return -EINVAL;
+
+        h = strndup(p, e - p);
+        if (!h)
+                return -ENOMEM;
+
+        if (!hostname_is_valid(h, 0))
+                return -EINVAL;
+
+        e++;
+
+        d = strchrnul(e, delimiter);
+
+        ss = strndup(e, d - e);
+        if (!ss)
+                return -ENOMEM;
+
+        if (!filename_is_valid(ss))
+                return -EINVAL;
+
+        if (!isempty(d)) {
+                x = strdup(skip_leading_chars(d, CHAR_TO_STR(delimiter)));
+                if (!x)
+                        return -EINVAL;
+
+                /* Make sure to convert Windows-style "\" → Unix-style / */
+                for (char *i = x; *i; i++)
+                        if (*i == delimiter)
+                                *i = '/';
+
+                if (!path_is_valid(x))
+                        return -EINVAL;
+
+                path_simplify(x);
+                if (!path_is_normalized(x))
+                        return -EINVAL;
+        }
+
+        if (ret_host)
+                *ret_host = TAKE_PTR(h);
+        if (ret_service)
+                *ret_service = TAKE_PTR(ss);
+        if (ret_path)
+                *ret_path = TAKE_PTR(x);
+
+        return 0;
+}
+
+int open_mkdir_at(int dirfd, const char *path, int flags, mode_t mode) {
+        _cleanup_close_ int fd = -EBADF, parent_fd = -EBADF;
+        _cleanup_free_ char *fname = NULL;
+        bool made;
+        int r;
+
+        /* Creates a directory with mkdirat() and then opens it, in the "most atomic" fashion we can
+         * do. Guarantees that the returned fd refers to a directory. If O_EXCL is specified will fail if the
+         * dir already exists. Otherwise will open an existing dir, but only if it is one.  */
+
+        if (flags & ~(O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_EXCL|O_NOATIME|O_NOFOLLOW|O_PATH))
+                return -EINVAL;
+        if ((flags & O_ACCMODE) != O_RDONLY)
+                return -EINVAL;
+
+        /* Note that O_DIRECTORY|O_NOFOLLOW is implied, but we allow specifying it anyway. The following
+         * flags actually make sense to specify: O_CLOEXEC, O_EXCL, O_NOATIME, O_PATH */
+
+        if (isempty(path))
+                return -EINVAL;
+
+        if (!filename_is_valid(path)) {
+                _cleanup_free_ char *parent = NULL;
+
+                /* If this is not a valid filename, it's a path. Let's open the parent directory then, so
+                 * that we can pin it, and operate below it. */
+
+                r = path_extract_directory(path, &parent);
+                if (r < 0)
+                        return r;
+
+                r = path_extract_filename(path, &fname);
+                if (r < 0)
+                        return r;
+
+                parent_fd = openat(dirfd, parent, O_PATH|O_DIRECTORY|O_CLOEXEC);
+                if (parent_fd < 0)
+                        return -errno;
+
+                dirfd = parent_fd;
+                path = fname;
+        }
+
+        r = RET_NERRNO(mkdirat(dirfd, path, mode));
+        if (r == -EEXIST) {
+                if (FLAGS_SET(flags, O_EXCL))
+                        return -EEXIST;
+
+                made = false;
+        } else if (r < 0)
+                return r;
+        else
+                made = true;
+
+        fd = RET_NERRNO(openat(dirfd, path, (flags & ~O_EXCL)|O_DIRECTORY|O_NOFOLLOW));
+        if (fd < 0) {
+                if (fd == -ENOENT)  /* We got ENOENT? then someone else immediately removed it after we
+                                     * created it. In that case let's return immediately without unlinking
+                                     * anything, because there simply isn't anything to unlink anymore. */
+                        return -ENOENT;
+                if (fd == -ELOOP)   /* is a symlink? exists already → created by someone else, don't unlink */
+                        return -EEXIST;
+                if (fd == -ENOTDIR) /* not a directory? exists already → created by someone else, don't unlink */
+                        return -EEXIST;
+
+                if (made)
+                        (void) unlinkat(dirfd, path, AT_REMOVEDIR);
+
+                return fd;
+        }
+
+        return TAKE_FD(fd);
+}
+
+int openat_report_new(int dirfd, const char *pathname, int flags, mode_t mode, bool *ret_newly_created) {
+        unsigned attempts = 7;
+        int fd;
+
+        /* Just like openat(), but adds one thing: optionally returns whether we created the file anew or if
+         * it already existed before. This is only relevant if O_CREAT is set without O_EXCL, and thus will
+         * shortcut to openat() otherwise */
+
+        if (!ret_newly_created)
+                return RET_NERRNO(openat(dirfd, pathname, flags, mode));
+
+        if (!FLAGS_SET(flags, O_CREAT) || FLAGS_SET(flags, O_EXCL)) {
+                fd = openat(dirfd, pathname, flags, mode);
+                if (fd < 0)
+                        return -errno;
+
+                *ret_newly_created = FLAGS_SET(flags, O_CREAT);
+                return fd;
+        }
+
+        for (;;) {
+                /* First, attempt to open without O_CREAT/O_EXCL, i.e. open existing file */
+                fd = openat(dirfd, pathname, flags & ~(O_CREAT | O_EXCL), mode);
+                if (fd >= 0) {
+                        *ret_newly_created = false;
+                        return fd;
+                }
+                if (errno != ENOENT)
+                        return -errno;
+
+                /* So the file didn't exist yet, hence create it with O_CREAT/O_EXCL. */
+                fd = openat(dirfd, pathname, flags | O_CREAT | O_EXCL, mode);
+                if (fd >= 0) {
+                        *ret_newly_created = true;
+                        return fd;
+                }
+                if (errno != EEXIST)
+                        return -errno;
+
+                /* Hmm, so now we got EEXIST? So it apparently exists now? If so, let's try to open again
+                 * without the two flags. But let's not spin forever, hence put a limit on things */
+
+                if (--attempts == 0) /* Give up eventually, somebody is playing with us */
+                        return -EEXIST;
+        }
+}
diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h
index 7f15b55..932d003 100644
--- a/src/basic/fs-util.h
+++ b/src/basic/fs-util.h
@@ -6,7 +6,6 @@
 #include <limits.h>
 #include <stdbool.h>
 #include <stdint.h>
-#include <sys/inotify.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
@@ -14,6 +13,7 @@
 #include "alloc-util.h"
 #include "errno-util.h"
 #include "time-util.h"
+#include "user-util.h"
 
 #define MODE_INVALID ((mode_t) -1)
 
@@ -33,7 +33,10 @@
 int readlink_value(const char *p, char **ret);
 int readlink_and_make_absolute(const char *p, char **r);
 
-int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid);
+int chmod_and_chown_at(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid);
+static inline int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid) {
+        return chmod_and_chown_at(AT_FDCWD, path, mode, uid, gid);
+}
 int fchmod_and_chown_with_fallback(int fd, const char *path, mode_t mode, uid_t uid, gid_t gid);
 static inline int fchmod_and_chown(int fd, mode_t mode, uid_t uid, gid_t gid) {
         return fchmod_and_chown_with_fallback(fd, NULL, mode, uid, gid); /* no fallback */
@@ -48,17 +51,30 @@
 int stat_warn_permissions(const char *path, const struct stat *st);
 
 #define laccess(path, mode)                                             \
-        (faccessat(AT_FDCWD, (path), (mode), AT_SYMLINK_NOFOLLOW) < 0 ? -errno : 0)
+        RET_NERRNO(faccessat(AT_FDCWD, (path), (mode), AT_SYMLINK_NOFOLLOW))
 
 int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode);
-int touch(const char *path);
+
+static inline int touch(const char *path) {
+        return touch_file(path, false, USEC_INFINITY, UID_INVALID, GID_INVALID, MODE_INVALID);
+}
 
 int symlink_idempotent(const char *from, const char *to, bool make_relative);
 
-int symlink_atomic(const char *from, const char *to);
-int mknod_atomic(const char *path, mode_t mode, dev_t dev);
-int mkfifo_atomic(const char *path, mode_t mode);
+int symlinkat_atomic_full(const char *from, int atfd, const char *to, bool make_relative);
+static inline int symlink_atomic(const char *from, const char *to) {
+        return symlinkat_atomic_full(from, AT_FDCWD, to, false);
+}
+
+int mknodat_atomic(int atfd, const char *path, mode_t mode, dev_t dev);
+static inline int mknod_atomic(const char *path, mode_t mode, dev_t dev) {
+        return mknodat_atomic(AT_FDCWD, path, mode, dev);
+}
+
 int mkfifoat_atomic(int dir_fd, const char *path, mode_t mode);
+static inline int mkfifo_atomic(const char *path, mode_t mode) {
+        return mkfifoat_atomic(AT_FDCWD, path, mode);
+}
 
 int get_files_in_directory(const char *path, char ***list);
 
@@ -67,44 +83,6 @@
 
 int unlink_or_warn(const char *filename);
 
-#define INOTIFY_EVENT_MAX (sizeof(struct inotify_event) + NAME_MAX + 1)
-
-#define FOREACH_INOTIFY_EVENT(e, buffer, sz) \
-        for ((e) = &buffer.ev;                                \
-             (uint8_t*) (e) < (uint8_t*) (buffer.raw) + (sz); \
-             (e) = (struct inotify_event*) ((uint8_t*) (e) + sizeof(struct inotify_event) + (e)->len))
-
-union inotify_event_buffer {
-        struct inotify_event ev;
-        uint8_t raw[INOTIFY_EVENT_MAX];
-};
-
-int inotify_add_watch_fd(int fd, int what, uint32_t mask);
-int inotify_add_watch_and_warn(int fd, const char *pathname, uint32_t mask);
-
-enum {
-        CHASE_PREFIX_ROOT = 1 << 0, /* The specified path will be prefixed by the specified root before beginning the iteration */
-        CHASE_NONEXISTENT = 1 << 1, /* It's OK if the path doesn't actually exist. */
-        CHASE_NO_AUTOFS   = 1 << 2, /* Return -EREMOTE if autofs mount point found */
-        CHASE_SAFE        = 1 << 3, /* Return -EPERM if we ever traverse from unprivileged to privileged files or directories */
-        CHASE_TRAIL_SLASH = 1 << 4, /* Any trailing slash will be preserved */
-        CHASE_STEP        = 1 << 5, /* Just execute a single step of the normalization */
-        CHASE_NOFOLLOW    = 1 << 6, /* Do not follow the path's right-most component. With ret_fd, when the path's
-                                     * right-most component refers to symlink, return O_PATH fd of the symlink. */
-        CHASE_WARN        = 1 << 7, /* Emit an appropriate warning when an error is encountered */
-};
-
-bool unsafe_transition(const struct stat *a, const struct stat *b);
-
-/* How many iterations to execute before returning -ELOOP */
-#define CHASE_SYMLINKS_MAX 32
-
-int chase_symlinks(const char *path_with_prefix, const char *root, unsigned flags, char **ret_path, int *ret_fd);
-
-int chase_symlinks_and_open(const char *path, const char *root, unsigned chase_flags, int open_flags, char **ret_path);
-int chase_symlinks_and_opendir(const char *path, const char *root, unsigned chase_flags, char **ret_path, DIR **ret_dir);
-int chase_symlinks_and_stat(const char *path, const char *root, unsigned chase_flags, char **ret_path, struct stat *ret_stat, int *ret_fd);
-
 /* Useful for usage with _cleanup_(), removes a directory and frees the pointer */
 static inline char *rmdir_and_free(char *p) {
         PROTECT_ERRNO;
@@ -137,12 +115,6 @@
 
 int unlinkat_deallocate(int fd, const char *name, UnlinkDeallocateFlags flags);
 
-int fsync_directory_of_file(int fd);
-int fsync_full(int fd);
-int fsync_path_at(int at_fd, const char *path);
-
-int syncfs_path(int atfd, const char *path);
-
 int open_parent(const char *path, int flags, mode_t mode);
 
 int conservative_renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
@@ -151,3 +123,9 @@
 }
 
 int posix_fallocate_loop(int fd, uint64_t offset, uint64_t size);
+
+int parse_cifs_service(const char *s, char **ret_host, char **ret_service, char **ret_path);
+
+int open_mkdir_at(int dirfd, const char *path, int flags, mode_t mode);
+
+int openat_report_new(int dirfd, const char *pathname, int flags, mode_t mode, bool *ret_newly_created);
diff --git a/src/basic/gcrypt-util.c b/src/basic/gcrypt-util.c
index cdc308a..41c9362 100644
--- a/src/basic/gcrypt-util.c
+++ b/src/basic/gcrypt-util.c
@@ -9,15 +9,18 @@
         if (gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P))
                 return;
 
+        gcry_control(GCRYCTL_SET_PREFERRED_RNG_TYPE, GCRY_RNG_TYPE_SYSTEM);
         assert_se(gcry_check_version("1.4.5"));
 
         /* Turn off "secmem". Clients which wish to make use of this
          * feature should initialize the library manually */
         if (!secmem)
                 gcry_control(GCRYCTL_DISABLE_SECMEM);
+
         gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
 }
 
+#  if !PREFER_OPENSSL
 int string_hashsum(const char *s, size_t len, int md_algorithm, char **out) {
         _cleanup_(gcry_md_closep) gcry_md_hd_t md = NULL;
         gcry_error_t err;
@@ -47,4 +50,5 @@
         *out = enc;
         return 0;
 }
+#  endif
 #endif
diff --git a/src/basic/gcrypt-util.h b/src/basic/gcrypt-util.h
index 27dcc72..4c40cef 100644
--- a/src/basic/gcrypt-util.h
+++ b/src/basic/gcrypt-util.h
@@ -12,23 +12,28 @@
 #include "macro.h"
 
 void initialize_libgcrypt(bool secmem);
-int string_hashsum(const char *s, size_t len, int md_algorithm, char **out);
 
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(gcry_md_hd_t, gcry_md_close, NULL);
 #endif
 
+#if !PREFER_OPENSSL
+#  if HAVE_GCRYPT
+int string_hashsum(const char *s, size_t len, int md_algorithm, char **out);
+#  endif
+
 static inline int string_hashsum_sha224(const char *s, size_t len, char **out) {
-#if HAVE_GCRYPT
+#  if HAVE_GCRYPT
         return string_hashsum(s, len, GCRY_MD_SHA224, out);
-#else
+#  else
         return -EOPNOTSUPP;
-#endif
+#  endif
 }
 
 static inline int string_hashsum_sha256(const char *s, size_t len, char **out) {
-#if HAVE_GCRYPT
+#  if HAVE_GCRYPT
         return string_hashsum(s, len, GCRY_MD_SHA256, out);
-#else
+#  else
         return -EOPNOTSUPP;
-#endif
+#  endif
 }
+#endif
diff --git a/src/basic/generate-errno-list.sh b/src/basic/generate-errno-list.sh
index d2ce51e..f756b2e 100755
--- a/src/basic/generate-errno-list.sh
+++ b/src/basic/generate-errno-list.sh
@@ -3,5 +3,9 @@
 set -eu
 set -o pipefail
 
+# In kernel's arch/parisc/include/uapi/asm/errno.h, ECANCELLED and EREFUSED are defined as aliases of
+# ECANCELED and ECONNREFUSED, respectively. Let's drop them.
+
 ${1:?} -dM -include errno.h - </dev/null | \
+       grep -Ev '^#define[[:space:]]+(ECANCELLED|EREFUSED)' | \
        awk '/^#define[ \t]+E[^ _]+[ \t]+/ { print $2; }'
diff --git a/src/basic/generate-filesystem-list.py b/src/basic/generate-filesystem-list.py
new file mode 100755
index 0000000..52b74f1
--- /dev/null
+++ b/src/basic/generate-filesystem-list.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+import sys
+
+keywords_section = False
+
+for line in open(sys.argv[1]):
+    if line[0] == '#':
+        continue
+
+    if keywords_section:
+        print('"{}\\0"'.format(line.split(',')[0].strip()))
+    elif line.startswith('%%'):
+        keywords_section = True
diff --git a/src/basic/generate-filesystem-switch-case.py b/src/basic/generate-filesystem-switch-case.py
new file mode 100755
index 0000000..bbd0922
--- /dev/null
+++ b/src/basic/generate-filesystem-switch-case.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+import sys
+
+
+def filter_fsname(name):
+    # File system magics are sometimes not unique, because file systems got new
+    # revisions or got renamed. Let's prefer newer over older here, and thus
+    # ignore the old names.
+
+    return name in {
+        "cpuset",    # magic taken over by cgroupfs
+        "devtmpfs",  # not a file system of its own, but just a "named superblock" of tmpfs
+        "ext2",      # ext4 is the newest revision of ext2 + ext3
+        "ext3",
+        "fuseblk",   # closely related to fuse; they share a single magic, but the latter is more common
+        "gfs",       # magic taken over by gfs2
+        "msdos",     # vfat is the newest revision of msdos
+        "ncp",       # ncpfs (not ncp) was the last name of the netware `file_system_type`
+                     # name before it was removed in 2018
+        "nfs",       # nfs4 is the newest revision of nfs
+        "pvfs2",     # orangefs is the new name of pvfs2
+        "smb3",      # smb3 is an alias for cifs
+    }
+
+
+gperf_file = sys.argv[1]
+keywords_section = False
+
+for line in open(gperf_file):
+    if line[0] == "#":
+        continue
+
+    if keywords_section:
+        name, ids = line.split(",", 1)
+
+        name = name.strip()
+        if filter_fsname(name):
+            continue
+
+        ids = ids.strip()
+        assert ids[0] == "{"
+        assert ids[-1] == "}"
+        ids = ids[1:-1]
+
+        for id in ids.split(","):
+            print(f"case (statfs_f_type_t) {id.strip()}:")
+
+        print(f'        return "{name}";')
+
+    if line.startswith("%%"):
+        keywords_section = True
diff --git a/src/basic/glob-util.c b/src/basic/glob-util.c
index e026b29..fd60a6e 100644
--- a/src/basic/glob-util.c
+++ b/src/basic/glob-util.c
@@ -47,17 +47,28 @@
         return 0;
 }
 
-int glob_exists(const char *path) {
+int glob_first(const char *path, char **ret_first) {
         _cleanup_globfree_ glob_t g = {};
         int k;
 
         assert(path);
 
         k = safe_glob(path, GLOB_NOSORT|GLOB_BRACE, &g);
-        if (k == -ENOENT)
+        if (k == -ENOENT) {
+                if (ret_first)
+                        *ret_first = NULL;
                 return false;
+        }
         if (k < 0)
                 return k;
+
+        if (ret_first) {
+                char *first = strdup(g.gl_pathv[0]);
+                if (!first)
+                        return log_oom_debug();
+                *ret_first = first;
+        }
+
         return true;
 }
 
diff --git a/src/basic/glob-util.h b/src/basic/glob-util.h
index fc86e99..7ca26cc 100644
--- a/src/basic/glob-util.h
+++ b/src/basic/glob-util.h
@@ -10,7 +10,9 @@
 /* Note: this function modifies pglob to set various functions. */
 int safe_glob(const char *path, int flags, glob_t *pglob);
 
-int glob_exists(const char *path);
+/* Note: which match is returned depends on the implementation/system and not guaranteed to be stable */
+int glob_first(const char *path, char **ret_first);
+#define glob_exists(path) glob_first(path, NULL)
 int glob_extend(char ***strv, const char *path, int flags);
 
 int glob_non_glob_prefix(const char *path, char **ret);
diff --git a/src/basic/glyph-util.c b/src/basic/glyph-util.c
new file mode 100644
index 0000000..2833125
--- /dev/null
+++ b/src/basic/glyph-util.c
@@ -0,0 +1,141 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "env-util.h"
+#include "glyph-util.h"
+#include "locale-util.h"
+#include "strv.h"
+
+bool emoji_enabled(void) {
+        static int cached_emoji_enabled = -1;
+
+        if (cached_emoji_enabled < 0) {
+                int val = getenv_bool("SYSTEMD_EMOJI");
+                if (val >= 0)
+                        return (cached_emoji_enabled = val);
+
+                const char *term = getenv("TERM");
+                if (!term || STR_IN_SET(term, "dumb", "linux"))
+                        return (cached_emoji_enabled = false);
+
+                cached_emoji_enabled = is_locale_utf8();
+        }
+
+        return cached_emoji_enabled;
+}
+
+const char *special_glyph(SpecialGlyph code) {
+
+        /* A list of a number of interesting unicode glyphs we can use to decorate our output. It's probably wise to be
+         * conservative here, and primarily stick to the glyphs defined in the eurlatgr font, so that display still
+         * works reasonably well on the Linux console. For details see:
+         *
+         * http://git.altlinux.org/people/legion/packages/kbd.git?p=kbd.git;a=blob;f=data/consolefonts/README.eurlatgr
+         */
+
+        static const char* const draw_table[2][_SPECIAL_GLYPH_MAX] = {
+                /* ASCII fallback */
+                [false] = {
+                        [SPECIAL_GLYPH_TREE_VERTICAL]           = "| ",
+                        [SPECIAL_GLYPH_TREE_BRANCH]             = "|-",
+                        [SPECIAL_GLYPH_TREE_RIGHT]              = "`-",
+                        [SPECIAL_GLYPH_TREE_SPACE]              = "  ",
+                        [SPECIAL_GLYPH_TREE_TOP]                = ",-",
+                        [SPECIAL_GLYPH_VERTICAL_DOTTED]         = ":",
+                        [SPECIAL_GLYPH_TRIANGULAR_BULLET]       = ">",
+                        [SPECIAL_GLYPH_BLACK_CIRCLE]            = "*",
+                        [SPECIAL_GLYPH_WHITE_CIRCLE]            = "*",
+                        [SPECIAL_GLYPH_MULTIPLICATION_SIGN]     = "x",
+                        [SPECIAL_GLYPH_CIRCLE_ARROW]            = "*",
+                        [SPECIAL_GLYPH_BULLET]                  = "*",
+                        [SPECIAL_GLYPH_MU]                      = "u",
+                        [SPECIAL_GLYPH_CHECK_MARK]              = "+",
+                        [SPECIAL_GLYPH_CROSS_MARK]              = "-",
+                        [SPECIAL_GLYPH_LIGHT_SHADE]             = "-",
+                        [SPECIAL_GLYPH_DARK_SHADE]              = "X",
+                        [SPECIAL_GLYPH_SIGMA]                   = "S",
+                        [SPECIAL_GLYPH_ARROW_LEFT]              = "<-",
+                        [SPECIAL_GLYPH_ARROW_RIGHT]             = "->",
+                        [SPECIAL_GLYPH_ARROW_UP]                = "^",
+                        [SPECIAL_GLYPH_ARROW_DOWN]              = "v",
+                        [SPECIAL_GLYPH_ELLIPSIS]                = "...",
+                        [SPECIAL_GLYPH_EXTERNAL_LINK]           = "[LNK]",
+                        [SPECIAL_GLYPH_ECSTATIC_SMILEY]         = ":-]",
+                        [SPECIAL_GLYPH_HAPPY_SMILEY]            = ":-}",
+                        [SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY]   = ":-)",
+                        [SPECIAL_GLYPH_NEUTRAL_SMILEY]          = ":-|",
+                        [SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = ":-(",
+                        [SPECIAL_GLYPH_UNHAPPY_SMILEY]          = ":-{",
+                        [SPECIAL_GLYPH_DEPRESSED_SMILEY]        = ":-[",
+                        [SPECIAL_GLYPH_LOCK_AND_KEY]            = "o-,",
+                        [SPECIAL_GLYPH_TOUCH]                   = "O=",    /* Yeah, not very convincing, can you do it better? */
+                        [SPECIAL_GLYPH_RECYCLING]               = "~",
+                        [SPECIAL_GLYPH_DOWNLOAD]                = "\\",
+                        [SPECIAL_GLYPH_SPARKLES]                = "*",
+                        [SPECIAL_GLYPH_WARNING_SIGN]            = "!",
+                },
+
+                /* UTF-8 */
+                [true] = {
+                        /* The following are multiple glyphs in both ASCII and in UNICODE */
+                        [SPECIAL_GLYPH_TREE_VERTICAL]           = u8"│ ",
+                        [SPECIAL_GLYPH_TREE_BRANCH]             = u8"├─",
+                        [SPECIAL_GLYPH_TREE_RIGHT]              = u8"└─",
+                        [SPECIAL_GLYPH_TREE_SPACE]              = u8"  ",
+                        [SPECIAL_GLYPH_TREE_TOP]                = u8"┌─",
+
+                        /* Single glyphs in both cases */
+                        [SPECIAL_GLYPH_VERTICAL_DOTTED]         = u8"┆",
+                        [SPECIAL_GLYPH_TRIANGULAR_BULLET]       = u8"‣",
+                        [SPECIAL_GLYPH_BLACK_CIRCLE]            = u8"●",
+                        [SPECIAL_GLYPH_WHITE_CIRCLE]            = u8"○",
+                        [SPECIAL_GLYPH_MULTIPLICATION_SIGN]     = u8"×",
+                        [SPECIAL_GLYPH_CIRCLE_ARROW]            = u8"↻",
+                        [SPECIAL_GLYPH_BULLET]                  = u8"•",
+                        [SPECIAL_GLYPH_MU]                      = u8"μ",       /* actually called: GREEK SMALL LETTER MU */
+                        [SPECIAL_GLYPH_CHECK_MARK]              = u8"✓",
+                        [SPECIAL_GLYPH_CROSS_MARK]              = u8"✗",        /* actually called: BALLOT X */
+                        [SPECIAL_GLYPH_LIGHT_SHADE]             = u8"░",
+                        [SPECIAL_GLYPH_DARK_SHADE]              = u8"▒",
+                        [SPECIAL_GLYPH_SIGMA]                   = u8"Σ",
+                        [SPECIAL_GLYPH_ARROW_UP]                = u8"↑",       /* actually called: UPWARDS ARROW */
+                        [SPECIAL_GLYPH_ARROW_DOWN]              = u8"↓",       /* actually called: DOWNWARDS ARROW */
+
+                        /* Single glyph in Unicode, two in ASCII */
+                        [SPECIAL_GLYPH_ARROW_LEFT]              = u8"←",       /* actually called: LEFTWARDS ARROW */
+                        [SPECIAL_GLYPH_ARROW_RIGHT]             = u8"→",       /* actually called: RIGHTWARDS ARROW */
+
+                        /* Single glyph in Unicode, three in ASCII */
+                        [SPECIAL_GLYPH_ELLIPSIS]                = u8"…",       /* actually called: HORIZONTAL ELLIPSIS */
+
+                        /* Three glyphs in Unicode, five in ASCII */
+                        [SPECIAL_GLYPH_EXTERNAL_LINK]           = u8"[🡕]",      /* actually called: NORTH EAST SANS-SERIF ARROW, enclosed in [] */
+
+                        /* These smileys are a single glyph in Unicode, and three in ASCII */
+                        [SPECIAL_GLYPH_ECSTATIC_SMILEY]         = u8"😇",       /* actually called: SMILING FACE WITH HALO */
+                        [SPECIAL_GLYPH_HAPPY_SMILEY]            = u8"😀",       /* actually called: GRINNING FACE */
+                        [SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY]   = u8"🙂",       /* actually called: SLIGHTLY SMILING FACE */
+                        [SPECIAL_GLYPH_NEUTRAL_SMILEY]          = u8"😐",       /* actually called: NEUTRAL FACE */
+                        [SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = u8"🙁",       /* actually called: SLIGHTLY FROWNING FACE */
+                        [SPECIAL_GLYPH_UNHAPPY_SMILEY]          = u8"😨",       /* actually called: FEARFUL FACE */
+                        [SPECIAL_GLYPH_DEPRESSED_SMILEY]        = u8"🤢",       /* actually called: NAUSEATED FACE */
+
+                        /* This emoji is a single character cell glyph in Unicode, and three in ASCII */
+                        [SPECIAL_GLYPH_LOCK_AND_KEY]            = u8"🔐",       /* actually called: CLOSED LOCK WITH KEY */
+
+                        /* This emoji is a single character cell glyph in Unicode, and two in ASCII */
+                        [SPECIAL_GLYPH_TOUCH]                   = u8"👆",       /* actually called: BACKHAND INDEX POINTING UP */
+
+                        /* These four emojis are single character cell glyphs in Unicode and also in ASCII. */
+                        [SPECIAL_GLYPH_RECYCLING]               = u8"♻️",        /* actually called: UNIVERSAL RECYCLNG SYMBOL */
+                        [SPECIAL_GLYPH_DOWNLOAD]                = u8"⤵️",        /* actually called: RIGHT ARROW CURVING DOWN */
+                        [SPECIAL_GLYPH_SPARKLES]                = u8"✨",
+                        [SPECIAL_GLYPH_WARNING_SIGN]            = u8"⚠️",
+                },
+        };
+
+        if (code < 0)
+                return NULL;
+
+        assert(code < _SPECIAL_GLYPH_MAX);
+        return draw_table[code >= _SPECIAL_GLYPH_FIRST_EMOJI ? emoji_enabled() : is_locale_utf8()][code];
+}
diff --git a/src/basic/glyph-util.h b/src/basic/glyph-util.h
new file mode 100644
index 0000000..b646396
--- /dev/null
+++ b/src/basic/glyph-util.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <errno.h>
+#include <stdbool.h>
+
+#include "macro.h"
+
+typedef enum SpecialGlyph {
+        SPECIAL_GLYPH_TREE_VERTICAL,
+        SPECIAL_GLYPH_TREE_BRANCH,
+        SPECIAL_GLYPH_TREE_RIGHT,
+        SPECIAL_GLYPH_TREE_SPACE,
+        SPECIAL_GLYPH_TREE_TOP,
+        SPECIAL_GLYPH_VERTICAL_DOTTED,
+        SPECIAL_GLYPH_TRIANGULAR_BULLET,
+        SPECIAL_GLYPH_BLACK_CIRCLE,
+        SPECIAL_GLYPH_WHITE_CIRCLE,
+        SPECIAL_GLYPH_MULTIPLICATION_SIGN,
+        SPECIAL_GLYPH_CIRCLE_ARROW,
+        SPECIAL_GLYPH_BULLET,
+        SPECIAL_GLYPH_MU,
+        SPECIAL_GLYPH_CHECK_MARK,
+        SPECIAL_GLYPH_CROSS_MARK,
+        SPECIAL_GLYPH_ARROW_LEFT,
+        SPECIAL_GLYPH_ARROW_RIGHT,
+        SPECIAL_GLYPH_ARROW_UP,
+        SPECIAL_GLYPH_ARROW_DOWN,
+        SPECIAL_GLYPH_ELLIPSIS,
+        SPECIAL_GLYPH_LIGHT_SHADE,
+        SPECIAL_GLYPH_DARK_SHADE,
+        SPECIAL_GLYPH_SIGMA,
+        SPECIAL_GLYPH_EXTERNAL_LINK,
+        _SPECIAL_GLYPH_FIRST_EMOJI,
+        SPECIAL_GLYPH_ECSTATIC_SMILEY = _SPECIAL_GLYPH_FIRST_EMOJI,
+        SPECIAL_GLYPH_HAPPY_SMILEY,
+        SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY,
+        SPECIAL_GLYPH_NEUTRAL_SMILEY,
+        SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY,
+        SPECIAL_GLYPH_UNHAPPY_SMILEY,
+        SPECIAL_GLYPH_DEPRESSED_SMILEY,
+        SPECIAL_GLYPH_LOCK_AND_KEY,
+        SPECIAL_GLYPH_TOUCH,
+        SPECIAL_GLYPH_RECYCLING,
+        SPECIAL_GLYPH_DOWNLOAD,
+        SPECIAL_GLYPH_SPARKLES,
+        SPECIAL_GLYPH_WARNING_SIGN,
+        _SPECIAL_GLYPH_MAX,
+        _SPECIAL_GLYPH_INVALID = -EINVAL,
+} SpecialGlyph;
+
+const char *special_glyph(SpecialGlyph code) _const_;
+
+bool emoji_enabled(void);
+
+static inline const char *special_glyph_check_mark(bool b) {
+        return b ? special_glyph(SPECIAL_GLYPH_CHECK_MARK) : special_glyph(SPECIAL_GLYPH_CROSS_MARK);
+}
+
+static inline const char *special_glyph_check_mark_space(bool b) {
+        return b ? special_glyph(SPECIAL_GLYPH_CHECK_MARK) : " ";
+}
diff --git a/src/basic/hash-funcs.c b/src/basic/hash-funcs.c
index 084ed0c..5fac467 100644
--- a/src/basic/hash-funcs.c
+++ b/src/basic/hash-funcs.c
@@ -4,6 +4,7 @@
 
 #include "hash-funcs.h"
 #include "path-util.h"
+#include "strv.h"
 
 void string_hash_func(const char *p, struct siphash *state) {
         siphash24_compress(p, strlen(p) + 1, state);
@@ -15,6 +16,9 @@
 DEFINE_HASH_OPS_FULL(string_hash_ops_free_free,
                      char, string_hash_func, string_compare_func, free,
                      void, free);
+DEFINE_HASH_OPS_FULL(string_hash_ops_free_strv_free,
+                     char, string_hash_func, string_compare_func, free,
+                     char*, strv_free);
 
 void path_hash_func(const char *q, struct siphash *state) {
         bool add_slash = false;
@@ -102,10 +106,16 @@
 void devt_hash_func(const dev_t *p, struct siphash *state) {
         siphash24_compress(p, sizeof(dev_t), state);
 }
+#endif
 
 int devt_compare_func(const dev_t *a, const dev_t *b) {
-        return CMP(*a, *b);
+        int r;
+
+        r = CMP(major(*a), major(*b));
+        if (r != 0)
+                return r;
+
+        return CMP(minor(*a), minor(*b));
 }
 
 DEFINE_HASH_OPS(devt_hash_ops, dev_t, devt_hash_func, devt_compare_func);
-#endif
diff --git a/src/basic/hash-funcs.h b/src/basic/hash-funcs.h
index 023cfdf..c14302e 100644
--- a/src/basic/hash-funcs.h
+++ b/src/basic/hash-funcs.h
@@ -78,6 +78,7 @@
 extern const struct hash_ops string_hash_ops;
 extern const struct hash_ops string_hash_ops_free;
 extern const struct hash_ops string_hash_ops_free_free;
+extern const struct hash_ops string_hash_ops_free_strv_free;
 
 void path_hash_func(const char *p, struct siphash *state);
 extern const struct hash_ops path_hash_ops;
@@ -102,10 +103,9 @@
  * 64bit archs. Yuck! */
 #if SIZEOF_DEV_T != 8
 void devt_hash_func(const dev_t *p, struct siphash *state) _pure_;
-int devt_compare_func(const dev_t *a, const dev_t *b) _pure_;
-extern const struct hash_ops devt_hash_ops;
 #else
 #define devt_hash_func uint64_hash_func
-#define devt_compare_func uint64_compare_func
-#define devt_hash_ops uint64_hash_ops
 #endif
+
+int devt_compare_func(const dev_t *a, const dev_t *b) _pure_;
+extern const struct hash_ops devt_hash_ops;
diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c
index 0decbb0..322b148 100644
--- a/src/basic/hashmap.c
+++ b/src/basic/hashmap.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
+#include <fnmatch.h>
 #include <pthread.h>
 #include <stdint.h>
 #include <stdlib.h>
@@ -8,6 +9,7 @@
 #include "alloc-util.h"
 #include "fileio.h"
 #include "hashmap.h"
+#include "logarithm.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "mempool.h"
@@ -162,7 +164,7 @@
         unsigned n_buckets;                /* number of buckets */
 
         unsigned idx_lowest_entry;         /* Index below which all buckets are free.
-                                              Makes "while(hashmap_steal_first())" loops
+                                              Makes "while (hashmap_steal_first())" loops
                                               O(n) instead of O(n^2) for unordered hashmaps. */
         uint8_t  _pad[3];                  /* padding for the whole HashmapBase */
         /* The bitfields in HashmapBase complete the alignment of the whole thing. */
@@ -371,8 +373,9 @@
 }
 
 static struct hashmap_base_entry* bucket_at(HashmapBase *h, unsigned idx) {
-        return (struct hashmap_base_entry*)
-                ((uint8_t*) storage_ptr(h) + idx * hashmap_type_info[h->type].entry_size);
+        return CAST_ALIGN_PTR(
+                        struct hashmap_base_entry,
+                        (uint8_t *) storage_ptr(h) + idx * hashmap_type_info[h->type].entry_size);
 }
 
 static struct plain_hashmap_entry* plain_bucket_at(Hashmap *h, unsigned idx) {
@@ -401,7 +404,7 @@
         if (idx < _IDX_SWAP_END)
                 return &bucket_at_swap(swap, idx)->p.b;
 
-        assert_not_reached("Invalid index");
+        assert_not_reached();
 }
 
 static dib_raw_t* dib_raw_ptr(HashmapBase *h) {
@@ -513,7 +516,7 @@
                 return (void*) e->key;
 
         default:
-                assert_not_reached("Unknown hashmap type");
+                assert_not_reached();
         }
 }
 
@@ -770,16 +773,15 @@
 static struct HashmapBase* hashmap_base_new(const struct hash_ops *hash_ops, enum HashmapType type  HASHMAP_DEBUG_PARAMS) {
         HashmapBase *h;
         const struct hashmap_type_info *hi = &hashmap_type_info[type];
-        bool up;
 
-        up = mempool_enabled();
+        bool use_pool = mempool_enabled && mempool_enabled();  /* mempool_enabled is a weak symbol */
 
-        h = up ? mempool_alloc0_tile(hi->mempool) : malloc0(hi->head_size);
+        h = use_pool ? mempool_alloc0_tile(hi->mempool) : malloc0(hi->head_size);
         if (!h)
                 return NULL;
 
         h->type = type;
-        h->from_pool = up;
+        h->from_pool = use_pool;
         h->hash_ops = hash_ops ?: &trivial_hash_ops;
 
         if (type == HASHMAP_TYPE_ORDERED) {
@@ -1190,7 +1192,7 @@
                 } while (rehash_next);
         }
 
-        assert(n_rehashed == n_entries(h));
+        assert_se(n_rehashed == n_entries(h));
 
         return 1;
 }
@@ -1747,11 +1749,11 @@
                 r = set_merge((Set*)copy, (Set*)h);
                 break;
         default:
-                assert_not_reached("Unknown hashmap type");
+                assert_not_reached();
         }
 
         if (r < 0)
-                return _hashmap_free(copy, false, false);
+                return _hashmap_free(copy, NULL, NULL);
 
         return copy;
 }
@@ -1841,7 +1843,7 @@
         return r;
 }
 
-int _set_put_strdup_full(Set **s, const struct hash_ops *hash_ops, const char *p  HASHMAP_DEBUG_PARAMS) {
+int _set_put_strndup_full(Set **s, const struct hash_ops *hash_ops, const char *p, size_t n  HASHMAP_DEBUG_PARAMS) {
         char *c;
         int r;
 
@@ -1852,10 +1854,13 @@
         if (r < 0)
                 return r;
 
-        if (set_contains(*s, (char*) p))
-                return 0;
+        if (n == SIZE_MAX) {
+                if (set_contains(*s, (char*) p))
+                        return 0;
 
-        c = strdup(p);
+                c = strdup(p);
+        } else
+                c = strndup(p, n);
         if (!c)
                 return -ENOMEM;
 
@@ -1864,12 +1869,11 @@
 
 int _set_put_strdupv_full(Set **s, const struct hash_ops *hash_ops, char **l  HASHMAP_DEBUG_PARAMS) {
         int n = 0, r;
-        char **i;
 
         assert(s);
 
         STRV_FOREACH(i, l) {
-                r = _set_put_strdup_full(s, hash_ops, *i  HASHMAP_DEBUG_PASS_ARGS);
+                r = _set_put_strndup_full(s, hash_ops, *i, SIZE_MAX  HASHMAP_DEBUG_PASS_ARGS);
                 if (r < 0)
                         return r;
 
@@ -1880,11 +1884,10 @@
 }
 
 int set_put_strsplit(Set *s, const char *v, const char *separators, ExtractFlags flags) {
-        const char *p = v;
+        const char *p = ASSERT_PTR(v);
         int r;
 
         assert(s);
-        assert(v);
 
         for (;;) {
                 char *word;
@@ -2071,3 +2074,29 @@
 
         return true;
 }
+
+static bool set_fnmatch_one(Set *patterns, const char *needle) {
+        const char *p;
+
+        assert(needle);
+
+        /* Any failure of fnmatch() is treated as equivalent to FNM_NOMATCH, i.e. as non-matching pattern */
+
+        SET_FOREACH(p, patterns)
+                if (fnmatch(p, needle, 0) == 0)
+                        return true;
+
+        return false;
+}
+
+bool set_fnmatch(Set *include_patterns, Set *exclude_patterns, const char *needle) {
+        assert(needle);
+
+        if (set_fnmatch_one(exclude_patterns, needle))
+                return false;
+
+        if (set_isempty(include_patterns))
+                return true;
+
+        return set_fnmatch_one(include_patterns, needle);
+}
diff --git a/src/basic/hashmap.h b/src/basic/hashmap.h
index eafc08f..ebb5a63 100644
--- a/src/basic/hashmap.h
+++ b/src/basic/hashmap.h
@@ -7,7 +7,6 @@
 
 #include "hash-funcs.h"
 #include "macro.h"
-#include "util.h"
 
 /*
  * A hash table implementation. As a minor optimization a NULL hashmap object
@@ -90,12 +89,7 @@
 #define ordered_hashmap_new(ops) _ordered_hashmap_new(ops  HASHMAP_DEBUG_SRC_ARGS)
 
 #define hashmap_free_and_replace(a, b)          \
-        ({                                      \
-                hashmap_free(a);                \
-                (a) = (b);                      \
-                (b) = NULL;                     \
-                0;                              \
-        })
+        free_and_replace_full(a, b, hashmap_free)
 
 HashmapBase* _hashmap_free(HashmapBase *h, free_func_t default_free_key, free_func_t default_free_value);
 static inline Hashmap* hashmap_free(Hashmap *h) {
diff --git a/src/basic/hexdecoct.c b/src/basic/hexdecoct.c
index da1add7..898ed83 100644
--- a/src/basic/hexdecoct.c
+++ b/src/basic/hexdecoct.c
@@ -59,11 +59,13 @@
         const uint8_t *x;
         char *r, *z;
 
+        assert(p || l == 0);
+
         z = r = new(char, l * 2 + 1);
         if (!r)
                 return NULL;
 
-        for (x = p; x < (const uint8_t*) p + l; x++) {
+        for (x = p; x && x < (const uint8_t*) p + l; x++) {
                 *(z++) = hexchar(*x >> 4);
                 *(z++) = hexchar(*x & 15);
         }
@@ -108,12 +110,17 @@
         return r;
 }
 
-int unhexmem_full(const char *p, size_t l, bool secure, void **ret, size_t *ret_len) {
+int unhexmem_full(
+                const char *p,
+                size_t l,
+                bool secure,
+                void **ret,
+                size_t *ret_len) {
+
         _cleanup_free_ uint8_t *buf = NULL;
         size_t buf_size;
         const char *x;
         uint8_t *z;
-        int r;
 
         assert(p || l == 0);
 
@@ -126,22 +133,20 @@
         if (!buf)
                 return -ENOMEM;
 
+        CLEANUP_ERASE_PTR(secure ? &buf : NULL, buf_size);
+
         for (x = p, z = buf;;) {
                 int a, b;
 
                 a = unhex_next(&x, &l);
                 if (a == -EPIPE) /* End of string */
                         break;
-                if (a < 0) {
-                        r = a;
-                        goto on_failure;
-                }
+                if (a < 0)
+                        return a;
 
                 b = unhex_next(&x, &l);
-                if (b < 0) {
-                        r = b;
-                        goto on_failure;
-                }
+                if (b < 0)
+                        return b;
 
                 *(z++) = (uint8_t) a << 4 | (uint8_t) b;
         }
@@ -154,12 +159,6 @@
                 *ret = TAKE_PTR(buf);
 
         return 0;
-
-on_failure:
-        if (secure)
-                explicit_bzero_safe(buf, buf_size);
-
-        return r;
 }
 
 /* https://tools.ietf.org/html/rfc4648#section-6
@@ -565,101 +564,157 @@
         return -EINVAL;
 }
 
-ssize_t base64mem(const void *p, size_t l, char **out) {
-        char *r, *z;
+static void maybe_line_break(char **x, char *start, size_t line_break) {
+        size_t n;
+
+        assert(x);
+        assert(*x);
+        assert(start);
+        assert(*x >= start);
+
+        if (line_break == SIZE_MAX)
+                return;
+
+        n = *x - start;
+
+        if (n % (line_break + 1) == line_break)
+                *((*x)++) = '\n';
+}
+
+ssize_t base64mem_full(
+                const void *p,
+                size_t l,
+                size_t line_break,
+                char **ret) {
+
         const uint8_t *x;
+        char *b, *z;
+        size_t m;
 
         assert(p || l == 0);
-        assert(out);
+        assert(line_break > 0);
+        assert(ret);
 
         /* three input bytes makes four output bytes, padding is added so we must round up */
-        z = r = malloc(4 * (l + 2) / 3 + 1);
-        if (!r)
+        m = 4 * (l + 2) / 3 + 1;
+        if (line_break != SIZE_MAX)
+                m += m / line_break;
+
+        z = b = malloc(m);
+        if (!b)
                 return -ENOMEM;
 
-        for (x = p; x < (const uint8_t*) p + (l / 3) * 3; x += 3) {
+        for (x = p; x && x < (const uint8_t*) p + (l / 3) * 3; x += 3) {
                 /* x[0] == XXXXXXXX; x[1] == YYYYYYYY; x[2] == ZZZZZZZZ */
+                maybe_line_break(&z, b, line_break);
                 *(z++) = base64char(x[0] >> 2);                    /* 00XXXXXX */
+                maybe_line_break(&z, b, line_break);
                 *(z++) = base64char((x[0] & 3) << 4 | x[1] >> 4);  /* 00XXYYYY */
+                maybe_line_break(&z, b, line_break);
                 *(z++) = base64char((x[1] & 15) << 2 | x[2] >> 6); /* 00YYYYZZ */
+                maybe_line_break(&z, b, line_break);
                 *(z++) = base64char(x[2] & 63);                    /* 00ZZZZZZ */
         }
 
         switch (l % 3) {
         case 2:
+                maybe_line_break(&z, b, line_break);
                 *(z++) = base64char(x[0] >> 2);                   /* 00XXXXXX */
+                maybe_line_break(&z, b, line_break);
                 *(z++) = base64char((x[0] & 3) << 4 | x[1] >> 4); /* 00XXYYYY */
+                maybe_line_break(&z, b, line_break);
                 *(z++) = base64char((x[1] & 15) << 2);            /* 00YYYY00 */
+                maybe_line_break(&z, b, line_break);
                 *(z++) = '=';
-
                 break;
-        case 1:
-                *(z++) = base64char(x[0] >> 2);        /* 00XXXXXX */
-                *(z++) = base64char((x[0] & 3) << 4);  /* 00XX0000 */
-                *(z++) = '=';
-                *(z++) = '=';
 
+        case 1:
+                maybe_line_break(&z, b, line_break);
+                *(z++) = base64char(x[0] >> 2);        /* 00XXXXXX */
+                maybe_line_break(&z, b, line_break);
+                *(z++) = base64char((x[0] & 3) << 4);  /* 00XX0000 */
+                maybe_line_break(&z, b, line_break);
+                *(z++) = '=';
+                maybe_line_break(&z, b, line_break);
+                *(z++) = '=';
                 break;
         }
 
         *z = 0;
-        *out = r;
-        return z - r;
+        *ret = b;
+
+        assert(z >= b); /* Let static analyzers know that the answer is non-negative. */
+        return z - b;
 }
 
-static int base64_append_width(
-                char **prefix, int plen,
-                char sep, int indent,
-                const void *p, size_t l,
-                int width) {
+static ssize_t base64_append_width(
+                char **prefix,
+                size_t plen,
+                char sep,
+                size_t indent,
+                const void *p,
+                size_t l,
+                size_t width) {
 
         _cleanup_free_ char *x = NULL;
         char *t, *s;
-        ssize_t len, avail, line, lines;
+        size_t lines;
+        ssize_t len;
+
+        assert(prefix);
+        assert(*prefix || plen == 0);
+        assert(p || l == 0);
 
         len = base64mem(p, l, &x);
-        if (len <= 0)
+        if (len < 0)
                 return len;
+        if (len == 0)
+                return plen;
 
         lines = DIV_ROUND_UP(len, width);
 
-        if ((size_t) plen >= SSIZE_MAX - 1 - 1 ||
+        if (plen >= SSIZE_MAX - 1 - 1 ||
             lines > (SSIZE_MAX - plen - 1 - 1) / (indent + width + 1))
                 return -ENOMEM;
 
-        t = realloc(*prefix, (ssize_t) plen + 1 + 1 + (indent + width + 1) * lines);
+        t = realloc(*prefix, plen + 1 + 1 + (indent + width + 1) * lines);
         if (!t)
                 return -ENOMEM;
 
-        t[plen] = sep;
+        s = t + plen;
+        for (size_t line = 0; line < lines; line++) {
+                size_t act = MIN(width, (size_t) len);
 
-        for (line = 0, s = t + plen + 1, avail = len; line < lines; line++) {
-                int act = MIN(width, avail);
+                if (line > 0)
+                        sep = '\n';
 
-                if (line > 0 || sep == '\n') {
-                        memset(s, ' ', indent);
-                        s += indent;
+                if (s > t) {
+                        *s++ = sep;
+                        if (sep == '\n')
+                                s = mempset(s, ' ', indent);
                 }
 
-                memcpy(s, x + width * line, act);
-                s += act;
-                *(s++) = line < lines - 1 ? '\n' : '\0';
-                avail -= act;
+                s = mempcpy(s, x + width * line, act);
+                len -= act;
         }
-        assert(avail == 0);
+        assert(len == 0);
 
+        *s = '\0';
         *prefix = t;
-        return 0;
+        return s - t;
 }
 
-int base64_append(
-                char **prefix, int plen,
-                const void *p, size_t l,
-                int indent, int width) {
+ssize_t base64_append(
+                char **prefix,
+                size_t plen,
+                const void *p,
+                size_t l,
+                size_t indent,
+                size_t width) {
 
         if (plen > width / 2 || plen + indent > width)
                 /* leave indent on the left, keep last column free */
-                return base64_append_width(prefix, plen, '\n', indent, p, l, width - indent - 1);
+                return base64_append_width(prefix, plen, '\n', indent, p, l, width - indent);
         else
                 /* leave plen on the left, keep last column free */
                 return base64_append_width(prefix, plen, ' ', plen + 1, p, l, width - plen - 1);
@@ -707,12 +762,17 @@
         return ret;
 }
 
-int unbase64mem_full(const char *p, size_t l, bool secure, void **ret, size_t *ret_size) {
+int unbase64mem_full(
+                const char *p,
+                size_t l,
+                bool secure,
+                void **ret,
+                size_t *ret_size) {
+
         _cleanup_free_ uint8_t *buf = NULL;
         const char *x;
         uint8_t *z;
         size_t len;
-        int r;
 
         assert(p || l == 0);
 
@@ -727,60 +787,44 @@
         if (!buf)
                 return -ENOMEM;
 
+        CLEANUP_ERASE_PTR(secure ? &buf : NULL, len);
+
         for (x = p, z = buf;;) {
                 int a, b, c, d; /* a == 00XXXXXX; b == 00YYYYYY; c == 00ZZZZZZ; d == 00WWWWWW */
 
                 a = unbase64_next(&x, &l);
                 if (a == -EPIPE) /* End of string */
                         break;
-                if (a < 0) {
-                        r = a;
-                        goto on_failure;
-                }
-                if (a == INT_MAX) { /* Padding is not allowed at the beginning of a 4ch block */
-                        r = -EINVAL;
-                        goto on_failure;
-                }
+                if (a < 0)
+                        return a;
+                if (a == INT_MAX) /* Padding is not allowed at the beginning of a 4ch block */
+                        return -EINVAL;
 
                 b = unbase64_next(&x, &l);
-                if (b < 0) {
-                        r = b;
-                        goto on_failure;
-                }
-                if (b == INT_MAX) { /* Padding is not allowed at the second character of a 4ch block either */
-                        r = -EINVAL;
-                        goto on_failure;
-                }
+                if (b < 0)
+                        return b;
+                if (b == INT_MAX) /* Padding is not allowed at the second character of a 4ch block either */
+                        return -EINVAL;
 
                 c = unbase64_next(&x, &l);
-                if (c < 0) {
-                        r = c;
-                        goto on_failure;
-                }
+                if (c < 0)
+                        return c;
 
                 d = unbase64_next(&x, &l);
-                if (d < 0) {
-                        r = d;
-                        goto on_failure;
-                }
+                if (d < 0)
+                        return d;
 
                 if (c == INT_MAX) { /* Padding at the third character */
 
-                        if (d != INT_MAX) { /* If the third character is padding, the fourth must be too */
-                                r = -EINVAL;
-                                goto on_failure;
-                        }
+                        if (d != INT_MAX) /* If the third character is padding, the fourth must be too */
+                                return -EINVAL;
 
                         /* b == 00YY0000 */
-                        if (b & 15) {
-                                r = -EINVAL;
-                                goto on_failure;
-                        }
+                        if (b & 15)
+                                return -EINVAL;
 
-                        if (l > 0) { /* Trailing rubbish? */
-                                r = -ENAMETOOLONG;
-                                goto on_failure;
-                        }
+                        if (l > 0) /* Trailing rubbish? */
+                                return -ENAMETOOLONG;
 
                         *(z++) = (uint8_t) a << 2 | (uint8_t) (b >> 4); /* XXXXXXYY */
                         break;
@@ -788,15 +832,11 @@
 
                 if (d == INT_MAX) {
                         /* c == 00ZZZZ00 */
-                        if (c & 3) {
-                                r = -EINVAL;
-                                goto on_failure;
-                        }
+                        if (c & 3)
+                                return -EINVAL;
 
-                        if (l > 0) { /* Trailing rubbish? */
-                                r = -ENAMETOOLONG;
-                                goto on_failure;
-                        }
+                        if (l > 0) /* Trailing rubbish? */
+                                return -ENAMETOOLONG;
 
                         *(z++) = (uint8_t) a << 2 | (uint8_t) b >> 4; /* XXXXXXYY */
                         *(z++) = (uint8_t) b << 4 | (uint8_t) c >> 2; /* YYYYZZZZ */
@@ -810,18 +850,14 @@
 
         *z = 0;
 
+        assert((size_t) (z - buf) <= len);
+
         if (ret_size)
                 *ret_size = (size_t) (z - buf);
         if (ret)
                 *ret = TAKE_PTR(buf);
 
         return 0;
-
-on_failure:
-        if (secure)
-                explicit_bzero_safe(buf, len);
-
-        return r;
 }
 
 void hexdump(FILE *f, const void *p, size_t s) {
diff --git a/src/basic/hexdecoct.h b/src/basic/hexdecoct.h
index 4ace5b7..319b21a 100644
--- a/src/basic/hexdecoct.h
+++ b/src/basic/hexdecoct.h
@@ -33,10 +33,18 @@
 char *base32hexmem(const void *p, size_t l, bool padding);
 int unbase32hexmem(const char *p, size_t l, bool padding, void **mem, size_t *len);
 
-ssize_t base64mem(const void *p, size_t l, char **out);
-int base64_append(char **prefix, int plen,
-                  const void *p, size_t l,
-                  int margin, int width);
+ssize_t base64mem_full(const void *p, size_t l, size_t line_break, char **ret);
+static inline ssize_t base64mem(const void *p, size_t l, char **ret) {
+        return base64mem_full(p, l, SIZE_MAX, ret);
+}
+
+ssize_t base64_append(
+                char **prefix,
+                size_t plen,
+                const void *p,
+                size_t l,
+                size_t margin,
+                size_t width);
 int unbase64mem_full(const char *p, size_t l, bool secure, void **mem, size_t *len);
 static inline int unbase64mem(const char *p, size_t l, void **mem, size_t *len) {
         return unbase64mem_full(p, l, false, mem, len);
diff --git a/src/basic/hmac.c b/src/basic/hmac.c
new file mode 100644
index 0000000..a5f66d5
--- /dev/null
+++ b/src/basic/hmac.c
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <assert.h>
+#include <string.h>
+
+#include "hmac.h"
+#include "sha256.h"
+
+#define HMAC_BLOCK_SIZE 64
+#define INNER_PADDING_BYTE 0x36
+#define OUTER_PADDING_BYTE 0x5c
+
+void hmac_sha256(const void *key,
+                 size_t key_size,
+                 const void *input,
+                 size_t input_size,
+                 uint8_t res[static SHA256_DIGEST_SIZE]) {
+
+        uint8_t inner_padding[HMAC_BLOCK_SIZE] = { };
+        uint8_t outer_padding[HMAC_BLOCK_SIZE] = { };
+        uint8_t replacement_key[SHA256_DIGEST_SIZE];
+        struct sha256_ctx hash;
+
+        assert(key);
+        assert(key_size > 0);
+        assert(res);
+
+        /* Implement algorithm as described by FIPS 198. */
+
+        /* The key needs to be block size length or less, hash it if it's longer. */
+        if (key_size > HMAC_BLOCK_SIZE) {
+                sha256_direct(key, key_size, replacement_key);
+                key = replacement_key;
+                key_size = SHA256_DIGEST_SIZE;
+        }
+
+        /* First, copy the key into the padding arrays. If it's shorter than
+         * the block size, the arrays are already initialized to 0. */
+        memcpy(inner_padding, key, key_size);
+        memcpy(outer_padding, key, key_size);
+
+        /* Then, XOR the provided key and any padding leftovers with the fixed
+         * padding bytes as defined in FIPS 198. */
+        for (size_t i = 0; i < HMAC_BLOCK_SIZE; i++) {
+                inner_padding[i] ^= INNER_PADDING_BYTE;
+                outer_padding[i] ^= OUTER_PADDING_BYTE;
+        }
+
+        /* First pass: hash the inner padding array and the input. */
+        sha256_init_ctx(&hash);
+        sha256_process_bytes(inner_padding, HMAC_BLOCK_SIZE, &hash);
+        sha256_process_bytes(input, input_size, &hash);
+        sha256_finish_ctx(&hash, res);
+
+        /* Second pass: hash the outer padding array and the result of the first pass. */
+        sha256_init_ctx(&hash);
+        sha256_process_bytes(outer_padding, HMAC_BLOCK_SIZE, &hash);
+        sha256_process_bytes(res, SHA256_DIGEST_SIZE, &hash);
+        sha256_finish_ctx(&hash, res);
+}
diff --git a/src/basic/hmac.h b/src/basic/hmac.h
new file mode 100644
index 0000000..6d70435
--- /dev/null
+++ b/src/basic/hmac.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "sha256.h"
+
+#ifdef GOOGLE3_BLAZE_BUILD // Redefine functions which collide with other third-party libs
+#define hmac_sha256 systemd_hmac_sha256
+#endif // GOOGLE3_BLAZE_BUILD
+
+/* Unoptimized implementation based on FIPS 198. 'res' has to be allocated by
+ * the caller. Prefer external OpenSSL functions, and use this only when
+ * linking to OpenSSL is not desirable (eg: libsystemd.so). */
+void hmac_sha256(const void *key, size_t key_size, const void *input, size_t input_size, uint8_t res[static SHA256_DIGEST_SIZE]);
diff --git a/src/basic/hostname-util.c b/src/basic/hostname-util.c
index 29d6991..e743033 100644
--- a/src/basic/hostname-util.c
+++ b/src/basic/hostname-util.c
@@ -8,6 +8,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "env-file.h"
 #include "hostname-util.h"
 #include "os-util.h"
 #include "string-util.h"
@@ -36,76 +37,46 @@
         return strdup(FALLBACK_HOSTNAME);
 }
 
-char* gethostname_malloc(void) {
+int gethostname_full(GetHostnameFlags flags, char **ret) {
+        _cleanup_free_ char *buf = NULL, *fallback = NULL;
         struct utsname u;
         const char *s;
 
-        /* This call tries to return something useful, either the actual hostname
-         * or it makes something up. The only reason it might fail is OOM.
-         * It might even return "localhost" if that's set. */
+        assert(ret);
 
         assert_se(uname(&u) >= 0);
 
         s = u.nodename;
-        if (isempty(s) || streq(s, "(none)"))
-                return get_default_hostname();
+        if (isempty(s) || streq(s, "(none)") ||
+            (!FLAGS_SET(flags, GET_HOSTNAME_ALLOW_LOCALHOST) && is_localhost(s)) ||
+            (FLAGS_SET(flags, GET_HOSTNAME_SHORT) && s[0] == '.')) {
+                if (!FLAGS_SET(flags, GET_HOSTNAME_FALLBACK_DEFAULT))
+                        return -ENXIO;
 
-        return strdup(s);
-}
-
-char* gethostname_short_malloc(void) {
-        struct utsname u;
-        const char *s;
-        _cleanup_free_ char *f = NULL;
-
-        /* Like above, but kills the FQDN part if present. */
-
-        assert_se(uname(&u) >= 0);
-
-        s = u.nodename;
-        if (isempty(s) || streq(s, "(none)") || s[0] == '.') {
-                s = f = get_default_hostname();
+                s = fallback = get_default_hostname();
                 if (!s)
-                        return NULL;
+                        return -ENOMEM;
 
-                assert(s[0] != '.');
+                if (FLAGS_SET(flags, GET_HOSTNAME_SHORT) && s[0] == '.')
+                        return -ENXIO;
         }
 
-        return strndup(s, strcspn(s, "."));
-}
-
-int gethostname_strict(char **ret) {
-        struct utsname u;
-        char *k;
-
-        /* This call will rather fail than make up a name. It will not return "localhost" either. */
-
-        assert_se(uname(&u) >= 0);
-
-        if (isempty(u.nodename))
-                return -ENXIO;
-
-        if (streq(u.nodename, "(none)"))
-                return -ENXIO;
-
-        if (is_localhost(u.nodename))
-                return -ENXIO;
-
-        k = strdup(u.nodename);
-        if (!k)
+        if (FLAGS_SET(flags, GET_HOSTNAME_SHORT))
+                buf = strdupcspn(s, ".");
+        else
+                buf = strdup(s);
+        if (!buf)
                 return -ENOMEM;
 
-        *ret = k;
+        *ret = TAKE_PTR(buf);
         return 0;
 }
 
 bool valid_ldh_char(char c) {
         /* "LDH" → "Letters, digits, hyphens", as per RFC 5890, Section 2.3.1 */
 
-        return
-                (c >= 'a' && c <= 'z') ||
-                (c >= 'A' && c <= 'Z') ||
-                (c >= '0' && c <= '9') ||
+        return ascii_isalpha(c) ||
+                ascii_isdigit(c) ||
                 c == '-';
 }
 
@@ -219,3 +190,20 @@
                 endswith_no_case(hostname, ".localhost.localdomain") ||
                 endswith_no_case(hostname, ".localhost.localdomain.");
 }
+
+int get_pretty_hostname(char **ret) {
+        _cleanup_free_ char *n = NULL;
+        int r;
+
+        assert(ret);
+
+        r = parse_env_file(NULL, "/etc/machine-info", "PRETTY_HOSTNAME", &n);
+        if (r < 0)
+                return r;
+
+        if (isempty(n))
+                return -ENXIO;
+
+        *ret = TAKE_PTR(n);
+        return 0;
+}
diff --git a/src/basic/hostname-util.h b/src/basic/hostname-util.h
index c3fc675..bcac3d9 100644
--- a/src/basic/hostname-util.h
+++ b/src/basic/hostname-util.h
@@ -7,10 +7,36 @@
 #include "macro.h"
 #include "strv.h"
 
+typedef enum GetHostnameFlags {
+        GET_HOSTNAME_ALLOW_LOCALHOST  = 1 << 0, /* accepts "localhost" or friends. */
+        GET_HOSTNAME_FALLBACK_DEFAULT = 1 << 1, /* use default hostname if no hostname is set. */
+        GET_HOSTNAME_SHORT            = 1 << 2, /* kills the FQDN part if present. */
+} GetHostnameFlags;
+
+int gethostname_full(GetHostnameFlags flags, char **ret);
+static inline int gethostname_strict(char **ret) {
+        return gethostname_full(0, ret);
+}
+
+static inline char* gethostname_malloc(void) {
+        char *s;
+
+        if (gethostname_full(GET_HOSTNAME_ALLOW_LOCALHOST | GET_HOSTNAME_FALLBACK_DEFAULT, &s) < 0)
+                return NULL;
+
+        return s;
+}
+
+static inline char* gethostname_short_malloc(void) {
+        char *s;
+
+        if (gethostname_full(GET_HOSTNAME_ALLOW_LOCALHOST | GET_HOSTNAME_FALLBACK_DEFAULT | GET_HOSTNAME_SHORT, &s) < 0)
+                return NULL;
+
+        return s;
+}
+
 char* get_default_hostname(void);
-char* gethostname_malloc(void);
-char* gethostname_short_malloc(void);
-int gethostname_strict(char **ret);
 
 bool valid_ldh_char(char c) _const_;
 
@@ -33,3 +59,13 @@
         /* This tries to identify the valid syntaxes for the our synthetic "outbound" host. */
         return STRCASE_IN_SET(hostname, "_outbound", "_outbound.");
 }
+
+static inline bool is_dns_stub_hostname(const char *hostname) {
+        return STRCASE_IN_SET(hostname, "_localdnsstub", "_localdnsstub.");
+}
+
+static inline bool is_dns_proxy_stub_hostname(const char *hostname) {
+        return STRCASE_IN_SET(hostname, "_localdnsproxy", "_localdnsproxy.");
+}
+
+int get_pretty_hostname(char **ret);
diff --git a/src/basic/in-addr-util.c b/src/basic/in-addr-util.c
index 9cc92a1..30d90cc 100644
--- a/src/basic/in-addr-util.c
+++ b/src/basic/in-addr-util.c
@@ -11,12 +11,13 @@
 #include "alloc-util.h"
 #include "errno-util.h"
 #include "in-addr-util.h"
+#include "logarithm.h"
 #include "macro.h"
 #include "parse-util.h"
 #include "random-util.h"
+#include "stdio-util.h"
 #include "string-util.h"
 #include "strxcpyx.h"
-#include "util.h"
 
 bool in4_addr_is_null(const struct in_addr *a) {
         assert(a);
@@ -48,10 +49,24 @@
         return (be32toh(a->s_addr) & UINT32_C(0xFFFF0000)) == (UINT32_C(169) << 24 | UINT32_C(254) << 16);
 }
 
+bool in4_addr_is_link_local_dynamic(const struct in_addr *a) {
+        assert(a);
+
+        if (!in4_addr_is_link_local(a))
+                return false;
+
+        /* 169.254.0.0/24 and 169.254.255.0/24 must not be used for the dynamic IPv4LL assignment.
+         * See RFC 3927 Section 2.1:
+         * The IPv4 prefix 169.254/16 is registered with the IANA for this purpose. The first 256 and last
+         * 256 addresses in the 169.254/16 prefix are reserved for future use and MUST NOT be selected by a
+         * host using this dynamic configuration mechanism. */
+        return !IN_SET(be32toh(a->s_addr) & 0x0000FF00U, 0x0000U, 0xFF00U);
+}
+
 bool in6_addr_is_link_local(const struct in6_addr *a) {
         assert(a);
 
-        return IN6_IS_ADDR_LINKLOCAL(a); /* lgtm [cpp/potentially-dangerous-function] */
+        return IN6_IS_ADDR_LINKLOCAL(a);
 }
 
 int in_addr_is_link_local(int family, const union in_addr_union *u) {
@@ -116,7 +131,20 @@
                 return in4_addr_is_localhost(&u->in);
 
         if (family == AF_INET6)
-                return IN6_IS_ADDR_LOOPBACK(&u->in6); /* lgtm [cpp/potentially-dangerous-function] */
+                return IN6_IS_ADDR_LOOPBACK(&u->in6);
+
+        return -EAFNOSUPPORT;
+}
+
+int in_addr_is_localhost_one(int family, const union in_addr_union *u) {
+        assert(u);
+
+        if (family == AF_INET)
+                /* 127.0.0.1 */
+                return be32toh(u->in.s_addr) == UINT32_C(0x7F000001);
+
+        if (family == AF_INET6)
+                return IN6_IS_ADDR_LOOPBACK(&u->in6);
 
         return -EAFNOSUPPORT;
 }
@@ -166,8 +194,7 @@
         assert(a);
         assert(b);
 
-        /* Checks whether there are any addresses that are in both
-         * networks */
+        /* Checks whether there are any addresses that are in both networks */
 
         m = MIN(aprefixlen, bprefixlen);
 
@@ -175,7 +202,7 @@
                 uint32_t x, nm;
 
                 x = be32toh(a->in.s_addr ^ b->in.s_addr);
-                nm = (m == 0) ? 0 : 0xFFFFFFFFUL << (32 - m);
+                nm = m == 0 ? 0 : 0xFFFFFFFFUL << (32 - m);
 
                 return (x & nm) == 0;
         }
@@ -431,44 +458,33 @@
                 return -ENOMEM;
 
         errno = 0;
-        if (!inet_ntop(family, u, x, l))
+        if (!typesafe_inet_ntop(family, u, x, l))
                 return errno_or_else(EINVAL);
 
         *ret = TAKE_PTR(x);
         return 0;
 }
 
-int in_addr_prefix_to_string(int family, const union in_addr_union *u, unsigned prefixlen, char **ret) {
-        _cleanup_free_ char *x = NULL;
-        char *p;
-        size_t l;
+int in_addr_prefix_to_string(
+                int family,
+                const union in_addr_union *u,
+                unsigned prefixlen,
+                char *buf,
+                size_t buf_len) {
 
         assert(u);
-        assert(ret);
+        assert(buf);
 
-        if (family == AF_INET)
-                l = INET_ADDRSTRLEN + 3;
-        else if (family == AF_INET6)
-                l = INET6_ADDRSTRLEN + 4;
-        else
+        if (!IN_SET(family, AF_INET, AF_INET6))
                 return -EAFNOSUPPORT;
 
-        if (prefixlen > FAMILY_ADDRESS_SIZE(family) * 8)
-                return -EINVAL;
-
-        x = new(char, l);
-        if (!x)
-                return -ENOMEM;
-
         errno = 0;
-        if (!inet_ntop(family, u, x, l))
-                return errno_or_else(EINVAL);
+        if (!typesafe_inet_ntop(family, u, buf, buf_len))
+                return errno_or_else(ENOSPC);
 
-        p = x + strlen(x);
-        l -= strlen(x);
-        (void) strpcpyf(&p, l, "/%u", prefixlen);
-
-        *ret = TAKE_PTR(x);
+        size_t l = strlen(buf);
+        if (!snprintf_ok(buf + l, buf_len - l, "/%u", prefixlen))
+                return -ENOSPC;
         return 0;
 }
 
@@ -569,6 +585,7 @@
         return 32U - u32ctz(be32toh(addr->s_addr));
 }
 
+/* Calculate an IPv4 netmask from prefix length, for example /8 -> 255.0.0.0. */
 struct in_addr* in4_addr_prefixlen_to_netmask(struct in_addr *addr, unsigned char prefixlen) {
         assert(addr);
         assert(prefixlen <= 32);
@@ -582,6 +599,47 @@
         return addr;
 }
 
+/* Calculate an IPv6 netmask from prefix length, for example /16 -> ffff::. */
+struct in6_addr* in6_addr_prefixlen_to_netmask(struct in6_addr *addr, unsigned char prefixlen) {
+        assert(addr);
+        assert(prefixlen <= 128);
+
+        for (unsigned i = 0; i < 16; i++) {
+                uint8_t mask;
+
+                if (prefixlen >= 8) {
+                        mask = 0xFF;
+                        prefixlen -= 8;
+                } else if (prefixlen > 0) {
+                        mask = 0xFF << (8 - prefixlen);
+                        prefixlen = 0;
+                } else {
+                        assert(prefixlen == 0);
+                        mask = 0;
+                }
+
+                addr->s6_addr[i] = mask;
+        }
+
+        return addr;
+}
+
+/* Calculate an IPv4 or IPv6 netmask from prefix length, for example /8 -> 255.0.0.0 or /16 -> ffff::. */
+int in_addr_prefixlen_to_netmask(int family, union in_addr_union *addr, unsigned char prefixlen) {
+        assert(addr);
+
+        switch (family) {
+        case AF_INET:
+                in4_addr_prefixlen_to_netmask(&addr->in, prefixlen);
+                return 0;
+        case AF_INET6:
+                in6_addr_prefixlen_to_netmask(&addr->in6, prefixlen);
+                return 0;
+        default:
+                return -EAFNOSUPPORT;
+        }
+}
+
 int in4_addr_default_prefixlen(const struct in_addr *addr, unsigned char *prefixlen) {
         uint8_t msb_octet = *(uint8_t*) addr;
 
@@ -621,64 +679,119 @@
         return 0;
 }
 
+int in4_addr_mask(struct in_addr *addr, unsigned char prefixlen) {
+        struct in_addr mask;
+
+        assert(addr);
+
+        if (!in4_addr_prefixlen_to_netmask(&mask, prefixlen))
+                return -EINVAL;
+
+        addr->s_addr &= mask.s_addr;
+        return 0;
+}
+
+int in6_addr_mask(struct in6_addr *addr, unsigned char prefixlen) {
+        unsigned i;
+
+        for (i = 0; i < 16; i++) {
+                uint8_t mask;
+
+                if (prefixlen >= 8) {
+                        mask = 0xFF;
+                        prefixlen -= 8;
+                } else if (prefixlen > 0) {
+                        mask = 0xFF << (8 - prefixlen);
+                        prefixlen = 0;
+                } else {
+                        assert(prefixlen == 0);
+                        mask = 0;
+                }
+
+                addr->s6_addr[i] &= mask;
+        }
+
+        return 0;
+}
+
 int in_addr_mask(int family, union in_addr_union *addr, unsigned char prefixlen) {
         assert(addr);
 
-        if (family == AF_INET) {
-                struct in_addr mask;
-
-                if (!in4_addr_prefixlen_to_netmask(&mask, prefixlen))
-                        return -EINVAL;
-
-                addr->in.s_addr &= mask.s_addr;
-                return 0;
+        switch (family) {
+        case AF_INET:
+                return in4_addr_mask(&addr->in, prefixlen);
+        case AF_INET6:
+                return in6_addr_mask(&addr->in6, prefixlen);
+        default:
+                return -EAFNOSUPPORT;
         }
-
-        if (family == AF_INET6) {
-                unsigned i;
-
-                for (i = 0; i < 16; i++) {
-                        uint8_t mask;
-
-                        if (prefixlen >= 8) {
-                                mask = 0xFF;
-                                prefixlen -= 8;
-                        } else {
-                                mask = 0xFF << (8 - prefixlen);
-                                prefixlen = 0;
-                        }
-
-                        addr->in6.s6_addr[i] &= mask;
-                }
-
-                return 0;
-        }
-
-        return -EAFNOSUPPORT;
 }
 
-int in_addr_prefix_covers(int family,
-                          const union in_addr_union *prefix,
-                          unsigned char prefixlen,
-                          const union in_addr_union *address) {
+int in4_addr_prefix_covers(
+                const struct in_addr *prefix,
+                unsigned char prefixlen,
+                const struct in_addr *address) {
 
-        union in_addr_union masked_prefix, masked_address;
+        struct in_addr masked_prefix, masked_address;
         int r;
 
         assert(prefix);
         assert(address);
 
         masked_prefix = *prefix;
-        r = in_addr_mask(family, &masked_prefix, prefixlen);
+        r = in4_addr_mask(&masked_prefix, prefixlen);
         if (r < 0)
                 return r;
 
         masked_address = *address;
-        r = in_addr_mask(family, &masked_address, prefixlen);
+        r = in4_addr_mask(&masked_address, prefixlen);
         if (r < 0)
                 return r;
 
-        return in_addr_equal(family, &masked_prefix, &masked_address);
+        return in4_addr_equal(&masked_prefix, &masked_address);
+}
+
+int in6_addr_prefix_covers(
+                const struct in6_addr *prefix,
+                unsigned char prefixlen,
+                const struct in6_addr *address) {
+
+        struct in6_addr masked_prefix, masked_address;
+        int r;
+
+        assert(prefix);
+        assert(address);
+
+        masked_prefix = *prefix;
+        r = in6_addr_mask(&masked_prefix, prefixlen);
+        if (r < 0)
+                return r;
+
+        masked_address = *address;
+        r = in6_addr_mask(&masked_address, prefixlen);
+        if (r < 0)
+                return r;
+
+        return in6_addr_equal(&masked_prefix, &masked_address);
+}
+
+int in_addr_prefix_covers(
+                int family,
+                const union in_addr_union *prefix,
+                unsigned char prefixlen,
+                const union in_addr_union *address) {
+
+        assert(prefix);
+        assert(address);
+
+        switch (family) {
+        case AF_INET:
+                return in4_addr_prefix_covers(&prefix->in, prefixlen, &address->in);
+        case AF_INET6:
+                return in6_addr_prefix_covers(&prefix->in6, prefixlen, &address->in6);
+        default:
+                return -EAFNOSUPPORT;
+        }
 }
 
 int in_addr_parse_prefixlen(int family, const char *p, unsigned char *ret) {
@@ -785,16 +898,8 @@
                         break;
                 case PREFIXLEN_REFUSE:
                         return -ENOANO; /* To distinguish this error from others. */
-                case PREFIXLEN_LEGACY:
-                        if (family == AF_INET) {
-                                r = in4_addr_default_prefixlen(&buffer.in, &k);
-                                if (r < 0)
-                                        return r;
-                        } else
-                                k = 0;
-                        break;
                 default:
-                        assert_not_reached("Invalid prefixlen mode");
+                        assert_not_reached();
                 }
 
         if (ret_family)
@@ -808,7 +913,7 @@
 
 }
 
-static void in_addr_data_hash_func(const struct in_addr_data *a, struct siphash *state) {
+void in_addr_data_hash_func(const struct in_addr_data *a, struct siphash *state) {
         assert(a);
         assert(state);
 
@@ -816,7 +921,7 @@
         siphash24_compress(&a->address, FAMILY_ADDRESS_SIZE(a->family), state);
 }
 
-static int in_addr_data_compare_func(const struct in_addr_data *x, const struct in_addr_data *y) {
+int in_addr_data_compare_func(const struct in_addr_data *x, const struct in_addr_data *y) {
         int r;
 
         assert(x);
@@ -829,36 +934,18 @@
         return memcmp(&x->address, &y->address, FAMILY_ADDRESS_SIZE(x->family));
 }
 
-DEFINE_HASH_OPS(in_addr_data_hash_ops, struct in_addr_data, in_addr_data_hash_func, in_addr_data_compare_func);
+DEFINE_HASH_OPS(
+        in_addr_data_hash_ops,
+        struct in_addr_data,
+        in_addr_data_hash_func,
+        in_addr_data_compare_func);
 
-static void in_addr_prefix_hash_func(const struct in_addr_prefix *a, struct siphash *state) {
-        assert(a);
-        assert(state);
-
-        siphash24_compress(&a->family, sizeof(a->family), state);
-        siphash24_compress(&a->prefixlen, sizeof(a->prefixlen), state);
-        siphash24_compress(&a->address, FAMILY_ADDRESS_SIZE(a->family), state);
-}
-
-static int in_addr_prefix_compare_func(const struct in_addr_prefix *x, const struct in_addr_prefix *y) {
-        int r;
-
-        assert(x);
-        assert(y);
-
-        r = CMP(x->family, y->family);
-        if (r != 0)
-                return r;
-
-        r = CMP(x->prefixlen, y->prefixlen);
-        if (r != 0)
-                return r;
-
-        return memcmp(&x->address, &y->address, FAMILY_ADDRESS_SIZE(x->family));
-}
-
-DEFINE_HASH_OPS(in_addr_prefix_hash_ops, struct in_addr_prefix, in_addr_prefix_hash_func, in_addr_prefix_compare_func);
-DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(in_addr_prefix_hash_ops_free, struct in_addr_prefix, in_addr_prefix_hash_func, in_addr_prefix_compare_func, free);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+        in_addr_data_hash_ops_free,
+        struct in_addr_data,
+        in_addr_data_hash_func,
+        in_addr_data_compare_func,
+        free);
 
 void in6_addr_hash_func(const struct in6_addr *addr, struct siphash *state) {
         assert(addr);
@@ -874,4 +961,15 @@
         return memcmp(a, b, sizeof(*a));
 }
 
-DEFINE_HASH_OPS(in6_addr_hash_ops, struct in6_addr, in6_addr_hash_func, in6_addr_compare_func);
+DEFINE_HASH_OPS(
+        in6_addr_hash_ops,
+        struct in6_addr,
+        in6_addr_hash_func,
+        in6_addr_compare_func);
+
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+        in6_addr_hash_ops_free,
+        struct in6_addr,
+        in6_addr_hash_func,
+        in6_addr_compare_func,
+        free);
diff --git a/src/basic/in-addr-util.h b/src/basic/in-addr-util.h
index f3ead91..200b9eb 100644
--- a/src/basic/in-addr-util.h
+++ b/src/basic/in-addr-util.h
@@ -1,13 +1,13 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <arpa/inet.h>
 #include <netinet/in.h>
 #include <stddef.h>
 #include <sys/socket.h>
 
 #include "hash-funcs.h"
 #include "macro.h"
-#include "util.h"
 
 union in_addr_union {
         struct in_addr in;
@@ -20,12 +20,6 @@
         union in_addr_union address;
 };
 
-struct in_addr_prefix {
-        int family;
-        uint8_t prefixlen;
-        union in_addr_union address;
-};
-
 bool in4_addr_is_null(const struct in_addr *a);
 static inline bool in4_addr_is_set(const struct in_addr *a) {
         return !in4_addr_is_null(a);
@@ -49,12 +43,14 @@
 int in_addr_is_multicast(int family, const union in_addr_union *u);
 
 bool in4_addr_is_link_local(const struct in_addr *a);
+bool in4_addr_is_link_local_dynamic(const struct in_addr *a);
 bool in6_addr_is_link_local(const struct in6_addr *a);
 int in_addr_is_link_local(int family, const union in_addr_union *u);
 bool in6_addr_is_link_local_all_nodes(const struct in6_addr *a);
 
 bool in4_addr_is_localhost(const struct in_addr *a);
 int in_addr_is_localhost(int family, const union in_addr_union *u);
+int in_addr_is_localhost_one(int family, const union in_addr_union *u);
 
 bool in4_addr_is_local_multicast(const struct in_addr *a);
 bool in4_addr_is_non_local(const struct in_addr *a);
@@ -73,14 +69,62 @@
                 unsigned prefixlen,
                 union in_addr_union *ret_start,
                 union in_addr_union *ret_end);
+
 int in_addr_to_string(int family, const union in_addr_union *u, char **ret);
 static inline int in6_addr_to_string(const struct in6_addr *u, char **ret) {
         return in_addr_to_string(AF_INET6, (const union in_addr_union*) u, ret);
 }
-int in_addr_prefix_to_string(int family, const union in_addr_union *u, unsigned prefixlen, char **ret);
-static inline int in6_addr_prefix_to_string(const struct in6_addr *u, unsigned prefixlen, char **ret) {
-        return in_addr_prefix_to_string(AF_INET6, (const union in_addr_union*) u, prefixlen, ret);
+
+static inline const char* typesafe_inet_ntop(int family, const union in_addr_union *a, char *buf, size_t len) {
+        return inet_ntop(family, a, buf, len);
 }
+static inline const char* typesafe_inet_ntop4(const struct in_addr *a, char *buf, size_t len) {
+        return inet_ntop(AF_INET, a, buf, len);
+}
+static inline const char* typesafe_inet_ntop6(const struct in6_addr *a, char *buf, size_t len) {
+        return inet_ntop(AF_INET6, a, buf, len);
+}
+
+/* Note: the lifetime of the compound literal is the immediately surrounding block,
+ * see C11 §6.5.2.5, and
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
+#define IN_ADDR_MAX CONST_MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN)
+#define IN_ADDR_TO_STRING(family, addr) typesafe_inet_ntop(family, addr, (char[IN_ADDR_MAX]){}, IN_ADDR_MAX)
+#define IN4_ADDR_TO_STRING(addr) typesafe_inet_ntop4(addr, (char[INET_ADDRSTRLEN]){}, INET_ADDRSTRLEN)
+#define IN6_ADDR_TO_STRING(addr) typesafe_inet_ntop6(addr, (char[INET6_ADDRSTRLEN]){}, INET6_ADDRSTRLEN)
+
+int in_addr_prefix_to_string(
+                int family,
+                const union in_addr_union *u,
+                unsigned prefixlen,
+                char *buf,
+                size_t buf_len);
+
+static inline const char* _in_addr_prefix_to_string(
+                int family,
+                const union in_addr_union *u,
+                unsigned prefixlen,
+                char *buf,
+                size_t buf_len) {
+        /* We assume that this is called with an appropriately sized buffer and can never fail. */
+        assert_se(in_addr_prefix_to_string(family, u, prefixlen, buf, buf_len) == 0);
+        return buf;
+}
+static inline const char* _in4_addr_prefix_to_string(const struct in_addr *a, unsigned prefixlen, char *buf, size_t buf_len) {
+        return _in_addr_prefix_to_string(AF_INET, (const union in_addr_union *) a, prefixlen, buf, buf_len);
+}
+static inline const char* _in6_addr_prefix_to_string(const struct in6_addr *a, unsigned prefixlen, char *buf, size_t buf_len) {
+        return _in_addr_prefix_to_string(AF_INET6, (const union in_addr_union *) a, prefixlen, buf, buf_len);
+}
+
+#define PREFIX_SUFFIX_MAX (1 + DECIMAL_STR_MAX(unsigned))
+#define IN_ADDR_PREFIX_TO_STRING(family, addr, prefixlen) \
+        _in_addr_prefix_to_string(family, addr, prefixlen, (char[IN_ADDR_MAX + PREFIX_SUFFIX_MAX]){}, IN_ADDR_MAX + PREFIX_SUFFIX_MAX)
+#define IN4_ADDR_PREFIX_TO_STRING(addr, prefixlen) \
+        _in4_addr_prefix_to_string(addr, prefixlen, (char[INET_ADDRSTRLEN + PREFIX_SUFFIX_MAX]){}, INET_ADDRSTRLEN + PREFIX_SUFFIX_MAX)
+#define IN6_ADDR_PREFIX_TO_STRING(addr, prefixlen) \
+        _in6_addr_prefix_to_string(addr, prefixlen, (char[INET6_ADDRSTRLEN + PREFIX_SUFFIX_MAX]){}, INET6_ADDRSTRLEN + PREFIX_SUFFIX_MAX)
+
 int in_addr_port_ifindex_name_to_string(int family, const union in_addr_union *u, uint16_t port, int ifindex, const char *server_name, char **ret);
 static inline int in_addr_ifindex_to_string(int family, const union in_addr_union *u, int ifindex, char **ret) {
         return in_addr_port_ifindex_name_to_string(family, u, 0, ifindex, NULL, ret);
@@ -93,9 +137,15 @@
 
 unsigned char in4_addr_netmask_to_prefixlen(const struct in_addr *addr);
 struct in_addr* in4_addr_prefixlen_to_netmask(struct in_addr *addr, unsigned char prefixlen);
+struct in6_addr* in6_addr_prefixlen_to_netmask(struct in6_addr *addr, unsigned char prefixlen);
+int in_addr_prefixlen_to_netmask(int family, union in_addr_union *addr, unsigned char prefixlen);
 int in4_addr_default_prefixlen(const struct in_addr *addr, unsigned char *prefixlen);
 int in4_addr_default_subnet_mask(const struct in_addr *addr, struct in_addr *mask);
+int in4_addr_mask(struct in_addr *addr, unsigned char prefixlen);
+int in6_addr_mask(struct in6_addr *addr, unsigned char prefixlen);
 int in_addr_mask(int family, union in_addr_union *addr, unsigned char prefixlen);
+int in4_addr_prefix_covers(const struct in_addr *prefix, unsigned char prefixlen, const struct in_addr *address);
+int in6_addr_prefix_covers(const struct in6_addr *prefix, unsigned char prefixlen, const struct in6_addr *address);
 int in_addr_prefix_covers(int family, const union in_addr_union *prefix, unsigned char prefixlen, const union in_addr_union *address);
 int in_addr_parse_prefixlen(int family, const char *p, unsigned char *ret);
 int in_addr_prefix_from_string(const char *p, int family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen);
@@ -103,7 +153,6 @@
 typedef enum InAddrPrefixLenMode {
         PREFIXLEN_FULL,   /* Default to prefixlen of address size, 32 for IPv4 or 128 for IPv6, if not specified. */
         PREFIXLEN_REFUSE, /* Fail with -ENOANO if prefixlen is not specified. */
-        PREFIXLEN_LEGACY, /* Default to legacy default prefixlen calculation from address if not specified. */
 } InAddrPrefixLenMode;
 
 int in_addr_prefix_from_string_auto_internal(const char *p, InAddrPrefixLenMode mode, int *ret_family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen);
@@ -116,17 +165,26 @@
         return family == AF_INET6 ? 16 : 4;
 }
 
+#define FAMILY_ADDRESS_SIZE_SAFE(f)                                     \
+        ({                                                              \
+                int _f = (f);                                           \
+                _f == AF_INET ? sizeof(struct in_addr) :                \
+                _f == AF_INET6 ? sizeof(struct in6_addr) : 0;           \
+        })
+
 /* Workaround for clang, explicitly specify the maximum-size element here.
  * See also oss-fuzz#11344. */
 #define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
 
+void in_addr_data_hash_func(const struct in_addr_data *a, struct siphash *state);
+int in_addr_data_compare_func(const struct in_addr_data *x, const struct in_addr_data *y);
 void in6_addr_hash_func(const struct in6_addr *addr, struct siphash *state);
 int in6_addr_compare_func(const struct in6_addr *a, const struct in6_addr *b);
 
 extern const struct hash_ops in_addr_data_hash_ops;
-extern const struct hash_ops in_addr_prefix_hash_ops;
-extern const struct hash_ops in_addr_prefix_hash_ops_free;
+extern const struct hash_ops in_addr_data_hash_ops_free;
 extern const struct hash_ops in6_addr_hash_ops;
+extern const struct hash_ops in6_addr_hash_ops_free;
 
 #define IPV4_ADDRESS_FMT_STR     "%u.%u.%u.%u"
 #define IPV4_ADDRESS_FMT_VAL(address)              \
diff --git a/src/basic/initrd-util.c b/src/basic/initrd-util.c
new file mode 100644
index 0000000..03ccfbe
--- /dev/null
+++ b/src/basic/initrd-util.c
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <unistd.h>
+
+#include "env-util.h"
+#include "errno-util.h"
+#include "initrd-util.h"
+#include "parse-util.h"
+#include "stat-util.h"
+#include "string-util.h"
+
+static int saved_in_initrd = -1;
+
+bool in_initrd(void) {
+        int r;
+
+        if (saved_in_initrd >= 0)
+                return saved_in_initrd;
+
+        /* If /etc/initrd-release exists, we're in an initrd.
+         * This can be overridden by setting SYSTEMD_IN_INITRD=0|1.
+         */
+
+        r = getenv_bool_secure("SYSTEMD_IN_INITRD");
+        if (r < 0 && r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_IN_INITRD, ignoring: %m");
+
+        if (r >= 0)
+                saved_in_initrd = r > 0;
+        else {
+                r = RET_NERRNO(access("/etc/initrd-release", F_OK));
+                if (r < 0 && r != -ENOENT)
+                        log_debug_errno(r, "Failed to check if /etc/initrd-release exists, assuming it does not: %m");
+                saved_in_initrd = r >= 0;
+        }
+
+        return saved_in_initrd;
+}
+
+void in_initrd_force(bool value) {
+        saved_in_initrd = value;
+}
diff --git a/src/basic/initrd-util.h b/src/basic/initrd-util.h
new file mode 100644
index 0000000..173093c
--- /dev/null
+++ b/src/basic/initrd-util.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+bool in_initrd(void);
+void in_initrd_force(bool value);
diff --git a/src/basic/inotify-util.c b/src/basic/inotify-util.c
new file mode 100644
index 0000000..6da974d
--- /dev/null
+++ b/src/basic/inotify-util.c
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "fd-util.h"
+#include "inotify-util.h"
+#include "stat-util.h"
+
+int inotify_add_watch_fd(int fd, int what, uint32_t mask) {
+        int wd, r;
+
+        /* This is like inotify_add_watch(), except that the file to watch is not referenced by a path, but by an fd */
+        wd = inotify_add_watch(fd, FORMAT_PROC_FD_PATH(what), mask);
+        if (wd < 0) {
+                if (errno != ENOENT)
+                        return -errno;
+
+                /* Didn't work with ENOENT? If so, then either /proc/ isn't mounted, or the fd is bad */
+                r = proc_mounted();
+                if (r == 0)
+                        return -ENOSYS;
+                if (r > 0)
+                        return -EBADF;
+
+                return -ENOENT; /* OK, no clue, let's propagate the original error */
+        }
+
+        return wd;
+}
+
+int inotify_add_watch_and_warn(int fd, const char *pathname, uint32_t mask) {
+        int wd;
+
+        wd = inotify_add_watch(fd, pathname, mask);
+        if (wd < 0) {
+                if (errno == ENOSPC)
+                        return log_error_errno(errno, "Failed to add a watch for %s: inotify watch limit reached", pathname);
+
+                return log_error_errno(errno, "Failed to add a watch for %s: %m", pathname);
+        }
+
+        return wd;
+}
diff --git a/src/basic/inotify-util.h b/src/basic/inotify-util.h
new file mode 100644
index 0000000..61951ff
--- /dev/null
+++ b/src/basic/inotify-util.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <limits.h>
+#include <stddef.h>
+#include <sys/inotify.h>
+
+#include "log.h"
+
+#define INOTIFY_EVENT_MAX (offsetof(struct inotify_event, name) + NAME_MAX + 1)
+
+#define _FOREACH_INOTIFY_EVENT(e, buffer, sz, log_level, start, end)    \
+        for (struct inotify_event                                       \
+                     *start = &((buffer).ev),                           \
+                     *end = (struct inotify_event*) ((uint8_t*) start + (sz)), \
+                     *e = start;                                        \
+             (size_t) ((uint8_t*) end - (uint8_t*) e) >= sizeof(struct inotify_event) && \
+             ((size_t) ((uint8_t*) end - (uint8_t*) e) >= sizeof(struct inotify_event) + e->len || \
+              (log_full(log_level, "Received invalid inotify event, ignoring."), false)); \
+             e = (struct inotify_event*) ((uint8_t*) e + sizeof(struct inotify_event) + e->len))
+
+#define _FOREACH_INOTIFY_EVENT_FULL(e, buffer, sz, log_level)           \
+        _FOREACH_INOTIFY_EVENT(e, buffer, sz, log_level, UNIQ_T(start, UNIQ), UNIQ_T(end, UNIQ))
+
+#define FOREACH_INOTIFY_EVENT(e, buffer, sz)                    \
+        _FOREACH_INOTIFY_EVENT_FULL(e, buffer, sz, LOG_DEBUG)
+
+#define FOREACH_INOTIFY_EVENT_WARN(e, buffer, sz)               \
+        _FOREACH_INOTIFY_EVENT_FULL(e, buffer, sz, LOG_WARNING)
+
+union inotify_event_buffer {
+        struct inotify_event ev;
+        uint8_t raw[INOTIFY_EVENT_MAX];
+};
+
+int inotify_add_watch_fd(int fd, int what, uint32_t mask);
+int inotify_add_watch_and_warn(int fd, const char *pathname, uint32_t mask);
diff --git a/src/basic/io-util.c b/src/basic/io-util.c
index 783ca13..f642bec 100644
--- a/src/basic/io-util.c
+++ b/src/basic/io-util.c
@@ -49,11 +49,10 @@
 }
 
 ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll) {
-        uint8_t *p = buf;
+        uint8_t *p = ASSERT_PTR(buf);
         ssize_t n = 0;
 
         assert(fd >= 0);
-        assert(buf);
 
         /* If called with nbytes == 0, let's call read() at least
          * once, to validate the operation */
@@ -108,10 +107,9 @@
 }
 
 int loop_write(int fd, const void *buf, size_t nbytes, bool do_poll) {
-        const uint8_t *p = buf;
+        const uint8_t *p = ASSERT_PTR(buf);
 
         assert(fd >= 0);
-        assert(buf);
 
         if (_unlikely_(nbytes > (size_t) SSIZE_MAX))
                 return -EINVAL;
@@ -159,15 +157,29 @@
 }
 
 int ppoll_usec(struct pollfd *fds, size_t nfds, usec_t timeout) {
-        struct timespec ts;
         int r;
 
         assert(fds || nfds == 0);
 
+        /* This is a wrapper around ppoll() that does primarily two things:
+         *
+         *  ✅ Takes a usec_t instead of a struct timespec
+         *
+         *  ✅ Guarantees that if an invalid fd is specified we return EBADF (i.e. converts POLLNVAL to
+         *     EBADF). This is done because EBADF is a programming error usually, and hence should bubble up
+         *     as error, and not be eaten up as non-error POLLNVAL event.
+         *
+         *  ⚠️ ⚠️ ⚠️ Note that this function does not add any special handling for EINTR. Don't forget
+         *  poll()/ppoll() will return with EINTR on any received signal always, there is no automatic
+         *  restarting via SA_RESTART available. Thus, typically you want to handle EINTR not as an error,
+         *  but just as reason to restart things, under the assumption you use a more appropriate mechanism
+         *  to handle signals, such as signalfd() or signal handlers. ⚠️ ⚠️ ⚠️
+         */
+
         if (nfds == 0)
                 return 0;
 
-        r = ppoll(fds, nfds, timeout == USEC_INFINITY ? NULL : timespec_store(&ts, timeout), NULL);
+        r = ppoll(fds, nfds, timeout == USEC_INFINITY ? NULL : TIMESPEC_STORE(timeout), NULL);
         if (r < 0)
                 return -errno;
         if (r == 0)
@@ -191,6 +203,9 @@
         };
         int r;
 
+        /* ⚠️ ⚠️ ⚠️ Keep in mind you almost certainly want to handle -EINTR gracefully in the caller, see
+         * ppoll_usec() above! ⚠️ ⚠️ ⚠️ */
+
         r = ppoll_usec(&pollfd, 1, timeout);
         if (r <= 0)
                 return r;
diff --git a/src/basic/io-util.h b/src/basic/io-util.h
index 39728e0..3afb134 100644
--- a/src/basic/io-util.h
+++ b/src/basic/io-util.h
@@ -91,7 +91,16 @@
 struct iovec_wrapper *iovw_free(struct iovec_wrapper *iovw);
 struct iovec_wrapper *iovw_free_free(struct iovec_wrapper *iovw);
 void iovw_free_contents(struct iovec_wrapper *iovw, bool free_vectors);
+
 int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len);
+static inline int iovw_consume(struct iovec_wrapper *iovw, void *data, size_t len) {
+        /* Move data into iovw or free on error */
+        int r = iovw_put(iovw, data, len);
+        if (r < 0)
+                free(data);
+        return r;
+}
+
 int iovw_put_string_field(struct iovec_wrapper *iovw, const char *field, const char *value);
 int iovw_put_string_field_free(struct iovec_wrapper *iovw, const char *field, char *value);
 void iovw_rebase(struct iovec_wrapper *iovw, char *old, char *new);
diff --git a/src/basic/ioprio-util.c b/src/basic/ioprio-util.c
new file mode 100644
index 0000000..b63650b
--- /dev/null
+++ b/src/basic/ioprio-util.c
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "ioprio-util.h"
+#include "parse-util.h"
+#include "string-table.h"
+
+int ioprio_parse_priority(const char *s, int *ret) {
+        int i, r;
+
+        assert(s);
+        assert(ret);
+
+        r = safe_atoi(s, &i);
+        if (r < 0)
+                return r;
+
+        if (!ioprio_priority_is_valid(i))
+                return -EINVAL;
+
+        *ret = i;
+        return 0;
+}
+
+static const char *const ioprio_class_table[] = {
+        [IOPRIO_CLASS_NONE] = "none",
+        [IOPRIO_CLASS_RT] = "realtime",
+        [IOPRIO_CLASS_BE] = "best-effort",
+        [IOPRIO_CLASS_IDLE] = "idle",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ioprio_class, int, IOPRIO_N_CLASSES);
diff --git a/src/basic/ioprio-util.h b/src/basic/ioprio-util.h
new file mode 100644
index 0000000..b8c9b7d
--- /dev/null
+++ b/src/basic/ioprio-util.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "macro.h"
+#include "missing_ioprio.h"
+
+int ioprio_class_to_string_alloc(int i, char **s);
+int ioprio_class_from_string(const char *s);
+
+static inline bool ioprio_class_is_valid(int i) {
+        return IN_SET(i, IOPRIO_CLASS_NONE, IOPRIO_CLASS_RT, IOPRIO_CLASS_BE, IOPRIO_CLASS_IDLE);
+}
+
+static inline bool ioprio_priority_is_valid(int i) {
+        return i >= 0 && i < IOPRIO_BE_NR;
+}
+
+int ioprio_parse_priority(const char *s, int *ret);
+
+/* IOPRIO_CLASS_NONE with any prio value is another way to say IOPRIO_CLASS_BE with level 4. Encode that in a
+ * proper macro. */
+#define IOPRIO_DEFAULT_CLASS_AND_PRIO ioprio_prio_value(IOPRIO_CLASS_BE, 4)
+
+static inline int ioprio_normalize(int v) {
+        /* Converts IOPRIO_CLASS_NONE to what it actually means */
+        return ioprio_prio_class(v) == IOPRIO_CLASS_NONE ? IOPRIO_DEFAULT_CLASS_AND_PRIO : v;
+}
diff --git a/src/basic/ioprio.h b/src/basic/ioprio.h
deleted file mode 100644
index 3fb168d..0000000
--- a/src/basic/ioprio.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef IOPRIO_H
-#define IOPRIO_H
-
-/* This is minimal version of Linux' linux/ioprio.h header file, which
- * is licensed GPL2 */
-
-#include <sys/syscall.h>
-#include <unistd.h>
-
-/*
- * Gives us 8 prio classes with 13-bits of data for each class
- */
-#define IOPRIO_BITS             16
-#define IOPRIO_N_CLASSES        8
-#define IOPRIO_CLASS_SHIFT      13
-#define IOPRIO_PRIO_MASK        ((1UL << IOPRIO_CLASS_SHIFT) - 1)
-
-#define IOPRIO_PRIO_CLASS(mask) ((mask) >> IOPRIO_CLASS_SHIFT)
-#define IOPRIO_PRIO_DATA(mask)  ((mask) & IOPRIO_PRIO_MASK)
-#define IOPRIO_PRIO_VALUE(class, data)  (((class) << IOPRIO_CLASS_SHIFT) | data)
-
-#define ioprio_valid(mask)      (IOPRIO_PRIO_CLASS((mask)) != IOPRIO_CLASS_NONE)
-
-/*
- * These are the io priority groups as implemented by CFQ. RT is the realtime
- * class, it always gets premium service. BE is the best-effort scheduling
- * class, the default for any process. IDLE is the idle scheduling class, it
- * is only served when no one else is using the disk.
- */
-enum {
-        IOPRIO_CLASS_NONE,
-        IOPRIO_CLASS_RT,
-        IOPRIO_CLASS_BE,
-        IOPRIO_CLASS_IDLE,
-};
-
-/*
- * 8 best effort priority levels are supported
- */
-#define IOPRIO_BE_NR    (8)
-
-enum {
-        IOPRIO_WHO_PROCESS = 1,
-        IOPRIO_WHO_PGRP,
-        IOPRIO_WHO_USER,
-};
-
-static inline int ioprio_set(int which, int who, int ioprio) {
-        return syscall(__NR_ioprio_set, which, who, ioprio);
-}
-
-static inline int ioprio_get(int which, int who) {
-        return syscall(__NR_ioprio_get, which, who);
-}
-
-#endif
diff --git a/src/basic/khash.c b/src/basic/khash.c
deleted file mode 100644
index 6a4d1dd..0000000
--- a/src/basic/khash.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <linux/if_alg.h>
-#include <stdbool.h>
-#include <sys/socket.h>
-
-#include "alloc-util.h"
-#include "fd-util.h"
-#include "hexdecoct.h"
-#include "khash.h"
-#include "macro.h"
-#include "missing_socket.h"
-#include "string-util.h"
-#include "util.h"
-
-/* On current kernels the maximum digest (according to "grep digestsize /proc/crypto | sort -u") is actually 32, but
- * let's add some extra room, the few wasted bytes don't really matter... */
-#define LONGEST_DIGEST 128
-
-struct khash {
-        int fd;
-        char *algorithm;
-        uint8_t digest[LONGEST_DIGEST+1];
-        size_t digest_size;
-        bool digest_valid;
-};
-
-int khash_supported(void) {
-        static const union {
-                struct sockaddr sa;
-                struct sockaddr_alg alg;
-        } sa = {
-                .alg.salg_family = AF_ALG,
-                .alg.salg_type = "hash",
-                .alg.salg_name = "sha256", /* a very common algorithm */
-        };
-
-        static int cached = -1;
-
-        if (cached < 0) {
-                _cleanup_close_ int fd1 = -1, fd2 = -1;
-                uint8_t buf[LONGEST_DIGEST+1];
-
-                fd1 = socket(AF_ALG, SOCK_SEQPACKET|SOCK_CLOEXEC, 0);
-                if (fd1 < 0) {
-                        /* The kernel returns EAFNOSUPPORT if AF_ALG is not supported at all */
-                        if (IN_SET(errno, EAFNOSUPPORT, EOPNOTSUPP))
-                                return (cached = false);
-
-                        return -errno;
-                }
-
-                if (bind(fd1, &sa.sa, sizeof(sa)) < 0) {
-                        /* The kernel returns ENOENT if the selected algorithm is not supported at all. We use a check
-                         * for SHA256 as a proxy for whether the whole API is supported at all. After all it's one of
-                         * the most common hash functions, and if it isn't supported, that's ample indication that
-                         * something is really off. */
-
-                        if (IN_SET(errno, ENOENT, EOPNOTSUPP))
-                                return (cached = false);
-
-                        return -errno;
-                }
-
-                fd2 = accept4(fd1, NULL, 0, SOCK_CLOEXEC);
-                if (fd2 < 0) {
-                        if (errno == EOPNOTSUPP)
-                                return (cached = false);
-
-                        return -errno;
-                }
-
-                if (recv(fd2, buf, sizeof(buf), 0) < 0) {
-                        /* On some kernels we get ENOKEY for non-keyed hash functions (such as sha256), let's refuse
-                         * using the API in those cases, since the kernel is
-                         * broken. https://github.com/systemd/systemd/issues/8278 */
-
-                        if (IN_SET(errno, ENOKEY, EOPNOTSUPP))
-                                return (cached = false);
-                }
-
-                cached = true;
-        }
-
-        return cached;
-}
-
-int khash_new_with_key(khash **ret, const char *algorithm, const void *key, size_t key_size) {
-        union {
-                struct sockaddr sa;
-                struct sockaddr_alg alg;
-        } sa = {
-                .alg.salg_family = AF_ALG,
-                .alg.salg_type = "hash",
-        };
-
-        _cleanup_(khash_unrefp) khash *h = NULL;
-        _cleanup_close_ int fd = -1;
-        int supported;
-        ssize_t n;
-
-        assert(ret);
-        assert(key || key_size == 0);
-
-        /* Filter out an empty algorithm early, as we do not support an algorithm by that name. */
-        if (isempty(algorithm))
-                return -EINVAL;
-
-        /* Overly long hash algorithm names we definitely do not support */
-        if (strlen(algorithm) >= sizeof(sa.alg.salg_name))
-                return -EOPNOTSUPP;
-
-        supported = khash_supported();
-        if (supported < 0)
-                return supported;
-        if (supported == 0)
-                return -EOPNOTSUPP;
-
-        fd = socket(AF_ALG, SOCK_SEQPACKET|SOCK_CLOEXEC, 0);
-        if (fd < 0)
-                return -errno;
-
-        strcpy((char*) sa.alg.salg_name, algorithm);
-        if (bind(fd, &sa.sa, sizeof(sa)) < 0) {
-                if (errno == ENOENT)
-                        return -EOPNOTSUPP;
-                return -errno;
-        }
-
-        if (key) {
-                if (setsockopt(fd, SOL_ALG, ALG_SET_KEY, key, key_size) < 0)
-                        return -errno;
-        }
-
-        h = new0(khash, 1);
-        if (!h)
-                return -ENOMEM;
-
-        h->fd = accept4(fd, NULL, 0, SOCK_CLOEXEC);
-        if (h->fd < 0)
-                return -errno;
-
-        h->algorithm = strdup(algorithm);
-        if (!h->algorithm)
-                return -ENOMEM;
-
-        /* Temporary fix for rc kernel bug: https://bugzilla.redhat.com/show_bug.cgi?id=1395896 */
-        (void) send(h->fd, NULL, 0, 0);
-
-        /* Figure out the digest size */
-        n = recv(h->fd, h->digest, sizeof(h->digest), 0);
-        if (n < 0)
-                return -errno;
-        if (n >= LONGEST_DIGEST) /* longer than what we expected? If so, we don't support this */
-                return -EOPNOTSUPP;
-
-        h->digest_size = (size_t) n;
-        h->digest_valid = true;
-
-        /* Temporary fix for rc kernel bug: https://bugzilla.redhat.com/show_bug.cgi?id=1395896 */
-        (void) send(h->fd, NULL, 0, 0);
-
-        *ret = TAKE_PTR(h);
-
-        return 0;
-}
-
-int khash_new(khash **ret, const char *algorithm) {
-        return khash_new_with_key(ret, algorithm, NULL, 0);
-}
-
-khash* khash_unref(khash *h) {
-        if (!h)
-                return NULL;
-
-        safe_close(h->fd);
-        free(h->algorithm);
-        return mfree(h);
-}
-
-int khash_dup(khash *h, khash **ret) {
-        _cleanup_(khash_unrefp) khash *copy = NULL;
-
-        assert(h);
-        assert(ret);
-
-        copy = newdup(khash, h, 1);
-        if (!copy)
-                return -ENOMEM;
-
-        copy->fd = -1;
-        copy->algorithm = strdup(h->algorithm);
-        if (!copy->algorithm)
-                return -ENOMEM;
-
-        copy->fd = accept4(h->fd, NULL, 0, SOCK_CLOEXEC);
-        if (copy->fd < 0)
-                return -errno;
-
-        *ret = TAKE_PTR(copy);
-
-        return 0;
-}
-
-const char *khash_get_algorithm(khash *h) {
-        assert(h);
-
-        return h->algorithm;
-}
-
-size_t khash_get_size(khash *h) {
-        assert(h);
-
-        return h->digest_size;
-}
-
-int khash_reset(khash *h) {
-        ssize_t n;
-
-        assert(h);
-
-        n = send(h->fd, NULL, 0, 0);
-        if (n < 0)
-                return -errno;
-
-        h->digest_valid = false;
-
-        return 0;
-}
-
-int khash_put(khash *h, const void *buffer, size_t size) {
-        ssize_t n;
-
-        assert(h);
-        assert(buffer || size == 0);
-
-        if (size <= 0)
-                return 0;
-
-        n = send(h->fd, buffer, size, MSG_MORE);
-        if (n < 0)
-                return -errno;
-
-        h->digest_valid = false;
-
-        return 0;
-}
-
-int khash_put_iovec(khash *h, const struct iovec *iovec, size_t n) {
-        struct msghdr mh = {
-                .msg_iov = (struct iovec*) iovec,
-                .msg_iovlen = n,
-        };
-        ssize_t k;
-
-        assert(h);
-        assert(iovec || n == 0);
-
-        if (n <= 0)
-                return 0;
-
-        k = sendmsg(h->fd, &mh, MSG_MORE);
-        if (k < 0)
-                return -errno;
-
-        h->digest_valid = false;
-
-        return 0;
-}
-
-static int retrieve_digest(khash *h) {
-        ssize_t n;
-
-        assert(h);
-
-        if (h->digest_valid)
-                return 0;
-
-        n = recv(h->fd, h->digest, h->digest_size, 0);
-        if (n < 0)
-                return n;
-        if ((size_t) n != h->digest_size) /* digest size changed? */
-                return -EIO;
-
-        h->digest_valid = true;
-
-        return 0;
-}
-
-int khash_digest_data(khash *h, const void **ret) {
-        int r;
-
-        assert(h);
-        assert(ret);
-
-        r = retrieve_digest(h);
-        if (r < 0)
-                return r;
-
-        *ret = h->digest;
-        return 0;
-}
-
-int khash_digest_string(khash *h, char **ret) {
-        int r;
-        char *p;
-
-        assert(h);
-        assert(ret);
-
-        r = retrieve_digest(h);
-        if (r < 0)
-                return r;
-
-        p = hexmem(h->digest, h->digest_size);
-        if (!p)
-                return -ENOMEM;
-
-        *ret = p;
-        return 0;
-}
diff --git a/src/basic/khash.h b/src/basic/khash.h
deleted file mode 100644
index a343d30..0000000
--- a/src/basic/khash.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <inttypes.h>
-#include <sys/types.h>
-#include <sys/uio.h>
-
-#include "macro.h"
-
-typedef struct khash khash;
-
-int khash_supported(void);
-
-/* For plain hash functions. Hash functions commonly supported on today's kernels are: crc32c, crct10dif, crc32,
- * sha224, sha256, sha512, sha384, sha1, md5, md4, sha3-224, sha3-256, sha3-384, sha3-512, and more. */
-int khash_new(khash **ret, const char *algorithm);
-
-/* For keyed hash functions. Hash functions commonly supported on today's kernels are: hmac(sha256), cmac(aes),
- * cmac(des3_ede), hmac(sha3-512), hmac(sha3-384), hmac(sha3-256), hmac(sha3-224), hmac(rmd160), hmac(rmd128),
- * hmac(sha224), hmac(sha512), hmac(sha384), hmac(sha1), hmac(md5), and more. */
-int khash_new_with_key(khash **ret, const char *algorithm, const void *key, size_t key_size);
-
-int khash_dup(khash *h, khash **ret);
-khash* khash_unref(khash *h);
-
-const char *khash_get_algorithm(khash *h);
-size_t khash_get_size(khash *h);
-
-int khash_reset(khash *h);
-
-int khash_put(khash *h, const void *buffer, size_t size);
-int khash_put_iovec(khash *h, const struct iovec *iovec, size_t n);
-
-int khash_digest_data(khash *h, const void **ret);
-int khash_digest_string(khash *h, char **ret);
-
-DEFINE_TRIVIAL_CLEANUP_FUNC(khash*, khash_unref);
diff --git a/src/basic/limits-util.c b/src/basic/limits-util.c
index 9f8e26d..b444444 100644
--- a/src/basic/limits-util.c
+++ b/src/basic/limits-util.c
@@ -1,5 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <unistd.h>
+
 #include "alloc-util.h"
 #include "cgroup-util.h"
 #include "limits-util.h"
@@ -109,35 +111,57 @@
 }
 
 uint64_t system_tasks_max(void) {
-        uint64_t a = TASKS_MAX, b = TASKS_MAX;
+        uint64_t a = TASKS_MAX, b = TASKS_MAX, c = TASKS_MAX;
         _cleanup_free_ char *root = NULL;
         int r;
 
-        /* Determine the maximum number of tasks that may run on this system. We check three sources to determine this
-         * limit:
+        /* Determine the maximum number of tasks that may run on this system. We check three sources to
+         * determine this limit:
          *
-         * a) the maximum tasks value the kernel allows on this architecture
-         * b) the cgroups pids_max attribute for the system
-         * c) the kernel's configured maximum PID value
+         * a) kernel.threads-max sysctl: the maximum number of tasks (threads) the kernel allows.
          *
-         * And then pick the smallest of the three */
+         *    This puts a direct limit on the number of concurrent tasks.
+         *
+         * b) kernel.pid_max sysctl: the maximum PID value.
+         *
+         *    This limits the numeric range PIDs can take, and thus indirectly also limits the number of
+         *    concurrent threads. It's primarily a compatibility concept: some crappy old code used a signed
+         *    16bit type for PIDs, hence the kernel provides a way to ensure the PIDs never go beyond
+         *    INT16_MAX by default.
+         *
+         *    Also note the weird definition: PIDs assigned will be kept below this value, which means
+         *    the number of tasks that can be created is one lower, as PID 0 is not a valid process ID.
+         *
+         * c) pids.max on the root cgroup: the kernel's configured maximum number of tasks.
+         *
+         * and then pick the smallest of the three.
+         *
+         * By default pid_max is set to much lower values than threads-max, hence the limit people come into
+         * contact with first, as it's the lowest boundary they need to bump when they want higher number of
+         * processes.
+         */
 
-        r = procfs_tasks_get_limit(&a);
+        r = procfs_get_threads_max(&a);
         if (r < 0)
-                log_debug_errno(r, "Failed to read maximum number of tasks from /proc, ignoring: %m");
+                log_debug_errno(r, "Failed to read kernel.threads-max, ignoring: %m");
+
+        r = procfs_get_pid_max(&b);
+        if (r < 0)
+                log_debug_errno(r, "Failed to read kernel.pid_max, ignoring: %m");
+        else if (b > 0)
+                /* Subtract one from pid_max, since PID 0 is not a valid PID */
+                b--;
 
         r = cg_get_root_path(&root);
         if (r < 0)
                 log_debug_errno(r, "Failed to determine cgroup root path, ignoring: %m");
         else {
-                r = cg_get_attribute_as_uint64("pids", root, "pids.max", &b);
+                r = cg_get_attribute_as_uint64("pids", root, "pids.max", &c);
                 if (r < 0)
-                        log_debug_errno(r, "Failed to read pids.max attribute of cgroup root, ignoring: %m");
+                        log_debug_errno(r, "Failed to read pids.max attribute of root cgroup, ignoring: %m");
         }
 
-        return MIN3(TASKS_MAX,
-                    a <= 0 ? TASKS_MAX : a,
-                    b <= 0 ? TASKS_MAX : b);
+        return MIN3(a, b, c);
 }
 
 uint64_t system_tasks_max_scale(uint64_t v, uint64_t max) {
diff --git a/src/basic/linux/README b/src/basic/linux/README
index 2bb70fd..790b4fe 100644
--- a/src/basic/linux/README
+++ b/src/basic/linux/README
@@ -4,3 +4,5 @@
 modifications are applied:
 - btrfs.h: drop '__user' attributes
 - if.h: drop '#include <linux/compiler.h>' and '__user' attributes
+- stddef.h: drop '#include <linux/compiler_types.h>'
+- guard linux/fs.h include to avoid conflict with glibc 2.36
diff --git a/src/basic/linux/batman_adv.h b/src/basic/linux/batman_adv.h
index d035e4c..35dc016 100644
--- a/src/basic/linux/batman_adv.h
+++ b/src/basic/linux/batman_adv.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: MIT */
-/* Copyright (C) 2016-2020  B.A.T.M.A.N. contributors:
+/* Copyright (C) B.A.T.M.A.N. contributors:
  *
  * Matthias Schiffer
  */
@@ -24,54 +24,54 @@
  * in the TT CRC computation.
  */
 enum batadv_tt_client_flags {
-        /**
-         * @BATADV_TT_CLIENT_DEL: the client has to be deleted from the table
-         */
-        BATADV_TT_CLIENT_DEL     = (1 << 0),
+	/**
+	 * @BATADV_TT_CLIENT_DEL: the client has to be deleted from the table
+	 */
+	BATADV_TT_CLIENT_DEL     = (1 << 0),
 
-        /**
-         * @BATADV_TT_CLIENT_ROAM: the client roamed to/from another node and
-         * the new update telling its new real location has not been
-         * received/sent yet
-         */
-        BATADV_TT_CLIENT_ROAM    = (1 << 1),
+	/**
+	 * @BATADV_TT_CLIENT_ROAM: the client roamed to/from another node and
+	 * the new update telling its new real location has not been
+	 * received/sent yet
+	 */
+	BATADV_TT_CLIENT_ROAM    = (1 << 1),
 
-        /**
-         * @BATADV_TT_CLIENT_WIFI: this client is connected through a wifi
-         * interface. This information is used by the "AP Isolation" feature
-         */
-        BATADV_TT_CLIENT_WIFI    = (1 << 4),
+	/**
+	 * @BATADV_TT_CLIENT_WIFI: this client is connected through a wifi
+	 * interface. This information is used by the "AP Isolation" feature
+	 */
+	BATADV_TT_CLIENT_WIFI    = (1 << 4),
 
-        /**
-         * @BATADV_TT_CLIENT_ISOLA: this client is considered "isolated". This
-         * information is used by the Extended Isolation feature
-         */
-        BATADV_TT_CLIENT_ISOLA	 = (1 << 5),
+	/**
+	 * @BATADV_TT_CLIENT_ISOLA: this client is considered "isolated". This
+	 * information is used by the Extended Isolation feature
+	 */
+	BATADV_TT_CLIENT_ISOLA	 = (1 << 5),
 
-        /**
-         * @BATADV_TT_CLIENT_NOPURGE: this client should never be removed from
-         * the table
-         */
-        BATADV_TT_CLIENT_NOPURGE = (1 << 8),
+	/**
+	 * @BATADV_TT_CLIENT_NOPURGE: this client should never be removed from
+	 * the table
+	 */
+	BATADV_TT_CLIENT_NOPURGE = (1 << 8),
 
-        /**
-         * @BATADV_TT_CLIENT_NEW: this client has been added to the local table
-         * but has not been announced yet
-         */
-        BATADV_TT_CLIENT_NEW     = (1 << 9),
+	/**
+	 * @BATADV_TT_CLIENT_NEW: this client has been added to the local table
+	 * but has not been announced yet
+	 */
+	BATADV_TT_CLIENT_NEW     = (1 << 9),
 
-        /**
-         * @BATADV_TT_CLIENT_PENDING: this client is marked for removal but it
-         * is kept in the table for one more originator interval for consistency
-         * purposes
-         */
-        BATADV_TT_CLIENT_PENDING = (1 << 10),
+	/**
+	 * @BATADV_TT_CLIENT_PENDING: this client is marked for removal but it
+	 * is kept in the table for one more originator interval for consistency
+	 * purposes
+	 */
+	BATADV_TT_CLIENT_PENDING = (1 << 10),
 
-        /**
-         * @BATADV_TT_CLIENT_TEMP: this global client has been detected to be
-         * part of the network but no node has already announced it
-         */
-        BATADV_TT_CLIENT_TEMP	 = (1 << 11),
+	/**
+	 * @BATADV_TT_CLIENT_TEMP: this global client has been detected to be
+	 * part of the network but no node has already announced it
+	 */
+	BATADV_TT_CLIENT_TEMP	 = (1 << 11),
 };
 
 /**
@@ -88,615 +88,615 @@
  * related flags are undefined.
  */
 enum batadv_mcast_flags_priv {
-        /**
-         * @BATADV_MCAST_FLAGS_BRIDGED: There is a bridge on top of the mesh
-         * interface.
-         */
-        BATADV_MCAST_FLAGS_BRIDGED			= (1 << 0),
+	/**
+	 * @BATADV_MCAST_FLAGS_BRIDGED: There is a bridge on top of the mesh
+	 * interface.
+	 */
+	BATADV_MCAST_FLAGS_BRIDGED			= (1 << 0),
 
-        /**
-         * @BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS: Whether an IGMP querier
-         * exists in the mesh
-         */
-        BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS		= (1 << 1),
+	/**
+	 * @BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS: Whether an IGMP querier
+	 * exists in the mesh
+	 */
+	BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS		= (1 << 1),
 
-        /**
-         * @BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS: Whether an MLD querier
-         * exists in the mesh
-         */
-        BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS		= (1 << 2),
+	/**
+	 * @BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS: Whether an MLD querier
+	 * exists in the mesh
+	 */
+	BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS		= (1 << 2),
 
-        /**
-         * @BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING: If an IGMP querier
-         * exists, whether it is potentially shadowing multicast listeners
-         * (i.e. querier is behind our own bridge segment)
-         */
-        BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING	= (1 << 3),
+	/**
+	 * @BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING: If an IGMP querier
+	 * exists, whether it is potentially shadowing multicast listeners
+	 * (i.e. querier is behind our own bridge segment)
+	 */
+	BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING	= (1 << 3),
 
-        /**
-         * @BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING: If an MLD querier
-         * exists, whether it is potentially shadowing multicast listeners
-         * (i.e. querier is behind our own bridge segment)
-         */
-        BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING	= (1 << 4),
+	/**
+	 * @BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING: If an MLD querier
+	 * exists, whether it is potentially shadowing multicast listeners
+	 * (i.e. querier is behind our own bridge segment)
+	 */
+	BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING	= (1 << 4),
 };
 
 /**
  * enum batadv_gw_modes - gateway mode of node
  */
 enum batadv_gw_modes {
-        /** @BATADV_GW_MODE_OFF: gw mode disabled */
-        BATADV_GW_MODE_OFF,
+	/** @BATADV_GW_MODE_OFF: gw mode disabled */
+	BATADV_GW_MODE_OFF,
 
-        /** @BATADV_GW_MODE_CLIENT: send DHCP requests to gw servers */
-        BATADV_GW_MODE_CLIENT,
+	/** @BATADV_GW_MODE_CLIENT: send DHCP requests to gw servers */
+	BATADV_GW_MODE_CLIENT,
 
-        /** @BATADV_GW_MODE_SERVER: announce itself as gateway server */
-        BATADV_GW_MODE_SERVER,
+	/** @BATADV_GW_MODE_SERVER: announce itself as gateway server */
+	BATADV_GW_MODE_SERVER,
 };
 
 /**
  * enum batadv_nl_attrs - batman-adv netlink attributes
  */
 enum batadv_nl_attrs {
-        /**
-         * @BATADV_ATTR_UNSPEC: unspecified attribute to catch errors
-         */
-        BATADV_ATTR_UNSPEC,
+	/**
+	 * @BATADV_ATTR_UNSPEC: unspecified attribute to catch errors
+	 */
+	BATADV_ATTR_UNSPEC,
 
-        /**
-         * @BATADV_ATTR_VERSION: batman-adv version string
-         */
-        BATADV_ATTR_VERSION,
+	/**
+	 * @BATADV_ATTR_VERSION: batman-adv version string
+	 */
+	BATADV_ATTR_VERSION,
 
-        /**
-         * @BATADV_ATTR_ALGO_NAME: name of routing algorithm
-         */
-        BATADV_ATTR_ALGO_NAME,
+	/**
+	 * @BATADV_ATTR_ALGO_NAME: name of routing algorithm
+	 */
+	BATADV_ATTR_ALGO_NAME,
 
-        /**
-         * @BATADV_ATTR_MESH_IFINDEX: index of the batman-adv interface
-         */
-        BATADV_ATTR_MESH_IFINDEX,
+	/**
+	 * @BATADV_ATTR_MESH_IFINDEX: index of the batman-adv interface
+	 */
+	BATADV_ATTR_MESH_IFINDEX,
 
-        /**
-         * @BATADV_ATTR_MESH_IFNAME: name of the batman-adv interface
-         */
-        BATADV_ATTR_MESH_IFNAME,
+	/**
+	 * @BATADV_ATTR_MESH_IFNAME: name of the batman-adv interface
+	 */
+	BATADV_ATTR_MESH_IFNAME,
 
-        /**
-         * @BATADV_ATTR_MESH_ADDRESS: mac address of the batman-adv interface
-         */
-        BATADV_ATTR_MESH_ADDRESS,
+	/**
+	 * @BATADV_ATTR_MESH_ADDRESS: mac address of the batman-adv interface
+	 */
+	BATADV_ATTR_MESH_ADDRESS,
 
-        /**
-         * @BATADV_ATTR_HARD_IFINDEX: index of the non-batman-adv interface
-         */
-        BATADV_ATTR_HARD_IFINDEX,
+	/**
+	 * @BATADV_ATTR_HARD_IFINDEX: index of the non-batman-adv interface
+	 */
+	BATADV_ATTR_HARD_IFINDEX,
 
-        /**
-         * @BATADV_ATTR_HARD_IFNAME: name of the non-batman-adv interface
-         */
-        BATADV_ATTR_HARD_IFNAME,
+	/**
+	 * @BATADV_ATTR_HARD_IFNAME: name of the non-batman-adv interface
+	 */
+	BATADV_ATTR_HARD_IFNAME,
 
-        /**
-         * @BATADV_ATTR_HARD_ADDRESS: mac address of the non-batman-adv
-         * interface
-         */
-        BATADV_ATTR_HARD_ADDRESS,
+	/**
+	 * @BATADV_ATTR_HARD_ADDRESS: mac address of the non-batman-adv
+	 * interface
+	 */
+	BATADV_ATTR_HARD_ADDRESS,
 
-        /**
-         * @BATADV_ATTR_ORIG_ADDRESS: originator mac address
-         */
-        BATADV_ATTR_ORIG_ADDRESS,
+	/**
+	 * @BATADV_ATTR_ORIG_ADDRESS: originator mac address
+	 */
+	BATADV_ATTR_ORIG_ADDRESS,
 
-        /**
-         * @BATADV_ATTR_TPMETER_RESULT: result of run (see
-         * batadv_tp_meter_status)
-         */
-        BATADV_ATTR_TPMETER_RESULT,
+	/**
+	 * @BATADV_ATTR_TPMETER_RESULT: result of run (see
+	 * batadv_tp_meter_status)
+	 */
+	BATADV_ATTR_TPMETER_RESULT,
 
-        /**
-         * @BATADV_ATTR_TPMETER_TEST_TIME: time (msec) the run took
-         */
-        BATADV_ATTR_TPMETER_TEST_TIME,
+	/**
+	 * @BATADV_ATTR_TPMETER_TEST_TIME: time (msec) the run took
+	 */
+	BATADV_ATTR_TPMETER_TEST_TIME,
 
-        /**
-         * @BATADV_ATTR_TPMETER_BYTES: amount of acked bytes during run
-         */
-        BATADV_ATTR_TPMETER_BYTES,
+	/**
+	 * @BATADV_ATTR_TPMETER_BYTES: amount of acked bytes during run
+	 */
+	BATADV_ATTR_TPMETER_BYTES,
 
-        /**
-         * @BATADV_ATTR_TPMETER_COOKIE: session cookie to match tp_meter session
-         */
-        BATADV_ATTR_TPMETER_COOKIE,
+	/**
+	 * @BATADV_ATTR_TPMETER_COOKIE: session cookie to match tp_meter session
+	 */
+	BATADV_ATTR_TPMETER_COOKIE,
 
-        /**
-         * @BATADV_ATTR_PAD: attribute used for padding for 64-bit alignment
-         */
-        BATADV_ATTR_PAD,
+	/**
+	 * @BATADV_ATTR_PAD: attribute used for padding for 64-bit alignment
+	 */
+	BATADV_ATTR_PAD,
 
-        /**
-         * @BATADV_ATTR_ACTIVE: Flag indicating if the hard interface is active
-         */
-        BATADV_ATTR_ACTIVE,
+	/**
+	 * @BATADV_ATTR_ACTIVE: Flag indicating if the hard interface is active
+	 */
+	BATADV_ATTR_ACTIVE,
 
-        /**
-         * @BATADV_ATTR_TT_ADDRESS: Client MAC address
-         */
-        BATADV_ATTR_TT_ADDRESS,
+	/**
+	 * @BATADV_ATTR_TT_ADDRESS: Client MAC address
+	 */
+	BATADV_ATTR_TT_ADDRESS,
 
-        /**
-         * @BATADV_ATTR_TT_TTVN: Translation table version
-         */
-        BATADV_ATTR_TT_TTVN,
+	/**
+	 * @BATADV_ATTR_TT_TTVN: Translation table version
+	 */
+	BATADV_ATTR_TT_TTVN,
 
-        /**
-         * @BATADV_ATTR_TT_LAST_TTVN: Previous translation table version
-         */
-        BATADV_ATTR_TT_LAST_TTVN,
+	/**
+	 * @BATADV_ATTR_TT_LAST_TTVN: Previous translation table version
+	 */
+	BATADV_ATTR_TT_LAST_TTVN,
 
-        /**
-         * @BATADV_ATTR_TT_CRC32: CRC32 over translation table
-         */
-        BATADV_ATTR_TT_CRC32,
+	/**
+	 * @BATADV_ATTR_TT_CRC32: CRC32 over translation table
+	 */
+	BATADV_ATTR_TT_CRC32,
 
-        /**
-         * @BATADV_ATTR_TT_VID: VLAN ID
-         */
-        BATADV_ATTR_TT_VID,
+	/**
+	 * @BATADV_ATTR_TT_VID: VLAN ID
+	 */
+	BATADV_ATTR_TT_VID,
 
-        /**
-         * @BATADV_ATTR_TT_FLAGS: Translation table client flags
-         */
-        BATADV_ATTR_TT_FLAGS,
+	/**
+	 * @BATADV_ATTR_TT_FLAGS: Translation table client flags
+	 */
+	BATADV_ATTR_TT_FLAGS,
 
-        /**
-         * @BATADV_ATTR_FLAG_BEST: Flags indicating entry is the best
-         */
-        BATADV_ATTR_FLAG_BEST,
+	/**
+	 * @BATADV_ATTR_FLAG_BEST: Flags indicating entry is the best
+	 */
+	BATADV_ATTR_FLAG_BEST,
 
-        /**
-         * @BATADV_ATTR_LAST_SEEN_MSECS: Time in milliseconds since last seen
-         */
-        BATADV_ATTR_LAST_SEEN_MSECS,
+	/**
+	 * @BATADV_ATTR_LAST_SEEN_MSECS: Time in milliseconds since last seen
+	 */
+	BATADV_ATTR_LAST_SEEN_MSECS,
 
-        /**
-         * @BATADV_ATTR_NEIGH_ADDRESS: Neighbour MAC address
-         */
-        BATADV_ATTR_NEIGH_ADDRESS,
+	/**
+	 * @BATADV_ATTR_NEIGH_ADDRESS: Neighbour MAC address
+	 */
+	BATADV_ATTR_NEIGH_ADDRESS,
 
-        /**
-         * @BATADV_ATTR_TQ: TQ to neighbour
-         */
-        BATADV_ATTR_TQ,
+	/**
+	 * @BATADV_ATTR_TQ: TQ to neighbour
+	 */
+	BATADV_ATTR_TQ,
 
-        /**
-         * @BATADV_ATTR_THROUGHPUT: Estimated throughput to Neighbour
-         */
-        BATADV_ATTR_THROUGHPUT,
+	/**
+	 * @BATADV_ATTR_THROUGHPUT: Estimated throughput to Neighbour
+	 */
+	BATADV_ATTR_THROUGHPUT,
 
-        /**
-         * @BATADV_ATTR_BANDWIDTH_UP: Reported uplink bandwidth
-         */
-        BATADV_ATTR_BANDWIDTH_UP,
+	/**
+	 * @BATADV_ATTR_BANDWIDTH_UP: Reported uplink bandwidth
+	 */
+	BATADV_ATTR_BANDWIDTH_UP,
 
-        /**
-         * @BATADV_ATTR_BANDWIDTH_DOWN: Reported downlink bandwidth
-         */
-        BATADV_ATTR_BANDWIDTH_DOWN,
+	/**
+	 * @BATADV_ATTR_BANDWIDTH_DOWN: Reported downlink bandwidth
+	 */
+	BATADV_ATTR_BANDWIDTH_DOWN,
 
-        /**
-         * @BATADV_ATTR_ROUTER: Gateway router MAC address
-         */
-        BATADV_ATTR_ROUTER,
+	/**
+	 * @BATADV_ATTR_ROUTER: Gateway router MAC address
+	 */
+	BATADV_ATTR_ROUTER,
 
-        /**
-         * @BATADV_ATTR_BLA_OWN: Flag indicating own originator
-         */
-        BATADV_ATTR_BLA_OWN,
+	/**
+	 * @BATADV_ATTR_BLA_OWN: Flag indicating own originator
+	 */
+	BATADV_ATTR_BLA_OWN,
 
-        /**
-         * @BATADV_ATTR_BLA_ADDRESS: Bridge loop avoidance claim MAC address
-         */
-        BATADV_ATTR_BLA_ADDRESS,
+	/**
+	 * @BATADV_ATTR_BLA_ADDRESS: Bridge loop avoidance claim MAC address
+	 */
+	BATADV_ATTR_BLA_ADDRESS,
 
-        /**
-         * @BATADV_ATTR_BLA_VID: BLA VLAN ID
-         */
-        BATADV_ATTR_BLA_VID,
+	/**
+	 * @BATADV_ATTR_BLA_VID: BLA VLAN ID
+	 */
+	BATADV_ATTR_BLA_VID,
 
-        /**
-         * @BATADV_ATTR_BLA_BACKBONE: BLA gateway originator MAC address
-         */
-        BATADV_ATTR_BLA_BACKBONE,
+	/**
+	 * @BATADV_ATTR_BLA_BACKBONE: BLA gateway originator MAC address
+	 */
+	BATADV_ATTR_BLA_BACKBONE,
 
-        /**
-         * @BATADV_ATTR_BLA_CRC: BLA CRC
-         */
-        BATADV_ATTR_BLA_CRC,
+	/**
+	 * @BATADV_ATTR_BLA_CRC: BLA CRC
+	 */
+	BATADV_ATTR_BLA_CRC,
 
-        /**
-         * @BATADV_ATTR_DAT_CACHE_IP4ADDRESS: Client IPv4 address
-         */
-        BATADV_ATTR_DAT_CACHE_IP4ADDRESS,
+	/**
+	 * @BATADV_ATTR_DAT_CACHE_IP4ADDRESS: Client IPv4 address
+	 */
+	BATADV_ATTR_DAT_CACHE_IP4ADDRESS,
 
-        /**
-         * @BATADV_ATTR_DAT_CACHE_HWADDRESS: Client MAC address
-         */
-        BATADV_ATTR_DAT_CACHE_HWADDRESS,
+	/**
+	 * @BATADV_ATTR_DAT_CACHE_HWADDRESS: Client MAC address
+	 */
+	BATADV_ATTR_DAT_CACHE_HWADDRESS,
 
-        /**
-         * @BATADV_ATTR_DAT_CACHE_VID: VLAN ID
-         */
-        BATADV_ATTR_DAT_CACHE_VID,
+	/**
+	 * @BATADV_ATTR_DAT_CACHE_VID: VLAN ID
+	 */
+	BATADV_ATTR_DAT_CACHE_VID,
 
-        /**
-         * @BATADV_ATTR_MCAST_FLAGS: Per originator multicast flags
-         */
-        BATADV_ATTR_MCAST_FLAGS,
+	/**
+	 * @BATADV_ATTR_MCAST_FLAGS: Per originator multicast flags
+	 */
+	BATADV_ATTR_MCAST_FLAGS,
 
-        /**
-         * @BATADV_ATTR_MCAST_FLAGS_PRIV: Private, own multicast flags
-         */
-        BATADV_ATTR_MCAST_FLAGS_PRIV,
+	/**
+	 * @BATADV_ATTR_MCAST_FLAGS_PRIV: Private, own multicast flags
+	 */
+	BATADV_ATTR_MCAST_FLAGS_PRIV,
 
-        /**
-         * @BATADV_ATTR_VLANID: VLAN id on top of soft interface
-         */
-        BATADV_ATTR_VLANID,
+	/**
+	 * @BATADV_ATTR_VLANID: VLAN id on top of soft interface
+	 */
+	BATADV_ATTR_VLANID,
 
-        /**
-         * @BATADV_ATTR_AGGREGATED_OGMS_ENABLED: whether the batman protocol
-         *  messages of the mesh interface shall be aggregated or not.
-         */
-        BATADV_ATTR_AGGREGATED_OGMS_ENABLED,
+	/**
+	 * @BATADV_ATTR_AGGREGATED_OGMS_ENABLED: whether the batman protocol
+	 *  messages of the mesh interface shall be aggregated or not.
+	 */
+	BATADV_ATTR_AGGREGATED_OGMS_ENABLED,
 
-        /**
-         * @BATADV_ATTR_AP_ISOLATION_ENABLED: whether the data traffic going
-         *  from a wireless client to another wireless client will be silently
-         *  dropped.
-         */
-        BATADV_ATTR_AP_ISOLATION_ENABLED,
+	/**
+	 * @BATADV_ATTR_AP_ISOLATION_ENABLED: whether the data traffic going
+	 *  from a wireless client to another wireless client will be silently
+	 *  dropped.
+	 */
+	BATADV_ATTR_AP_ISOLATION_ENABLED,
 
-        /**
-         * @BATADV_ATTR_ISOLATION_MARK: the isolation mark which is used to
-         *  classify clients as "isolated" by the Extended Isolation feature.
-         */
-        BATADV_ATTR_ISOLATION_MARK,
+	/**
+	 * @BATADV_ATTR_ISOLATION_MARK: the isolation mark which is used to
+	 *  classify clients as "isolated" by the Extended Isolation feature.
+	 */
+	BATADV_ATTR_ISOLATION_MARK,
 
-        /**
-         * @BATADV_ATTR_ISOLATION_MASK: the isolation (bit)mask which is used to
-         *  classify clients as "isolated" by the Extended Isolation feature.
-         */
-        BATADV_ATTR_ISOLATION_MASK,
+	/**
+	 * @BATADV_ATTR_ISOLATION_MASK: the isolation (bit)mask which is used to
+	 *  classify clients as "isolated" by the Extended Isolation feature.
+	 */
+	BATADV_ATTR_ISOLATION_MASK,
 
-        /**
-         * @BATADV_ATTR_BONDING_ENABLED: whether the data traffic going through
-         *  the mesh will be sent using multiple interfaces at the same time.
-         */
-        BATADV_ATTR_BONDING_ENABLED,
+	/**
+	 * @BATADV_ATTR_BONDING_ENABLED: whether the data traffic going through
+	 *  the mesh will be sent using multiple interfaces at the same time.
+	 */
+	BATADV_ATTR_BONDING_ENABLED,
 
-        /**
-         * @BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED: whether the bridge loop
-         *  avoidance feature is enabled. This feature detects and avoids loops
-         *  between the mesh and devices bridged with the soft interface
-         */
-        BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED,
+	/**
+	 * @BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED: whether the bridge loop
+	 *  avoidance feature is enabled. This feature detects and avoids loops
+	 *  between the mesh and devices bridged with the soft interface
+	 */
+	BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED,
 
-        /**
-         * @BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED: whether the distributed
-         *  arp table feature is enabled. This feature uses a distributed hash
-         *  table to answer ARP requests without flooding the request through
-         *  the whole mesh.
-         */
-        BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED,
+	/**
+	 * @BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED: whether the distributed
+	 *  arp table feature is enabled. This feature uses a distributed hash
+	 *  table to answer ARP requests without flooding the request through
+	 *  the whole mesh.
+	 */
+	BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED,
 
-        /**
-         * @BATADV_ATTR_FRAGMENTATION_ENABLED: whether the data traffic going
-         *  through the mesh will be fragmented or silently discarded if the
-         *  packet size exceeds the outgoing interface MTU.
-         */
-        BATADV_ATTR_FRAGMENTATION_ENABLED,
+	/**
+	 * @BATADV_ATTR_FRAGMENTATION_ENABLED: whether the data traffic going
+	 *  through the mesh will be fragmented or silently discarded if the
+	 *  packet size exceeds the outgoing interface MTU.
+	 */
+	BATADV_ATTR_FRAGMENTATION_ENABLED,
 
-        /**
-         * @BATADV_ATTR_GW_BANDWIDTH_DOWN: defines the download bandwidth which
-         *  is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set
-         *  to 'server'.
-         */
-        BATADV_ATTR_GW_BANDWIDTH_DOWN,
+	/**
+	 * @BATADV_ATTR_GW_BANDWIDTH_DOWN: defines the download bandwidth which
+	 *  is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set
+	 *  to 'server'.
+	 */
+	BATADV_ATTR_GW_BANDWIDTH_DOWN,
 
-        /**
-         * @BATADV_ATTR_GW_BANDWIDTH_UP: defines the upload bandwidth which
-         *  is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set
-         *  to 'server'.
-         */
-        BATADV_ATTR_GW_BANDWIDTH_UP,
+	/**
+	 * @BATADV_ATTR_GW_BANDWIDTH_UP: defines the upload bandwidth which
+	 *  is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set
+	 *  to 'server'.
+	 */
+	BATADV_ATTR_GW_BANDWIDTH_UP,
 
-        /**
-         * @BATADV_ATTR_GW_MODE: defines the state of the gateway features.
-         * Possible values are specified in enum batadv_gw_modes
-         */
-        BATADV_ATTR_GW_MODE,
+	/**
+	 * @BATADV_ATTR_GW_MODE: defines the state of the gateway features.
+	 * Possible values are specified in enum batadv_gw_modes
+	 */
+	BATADV_ATTR_GW_MODE,
 
-        /**
-         * @BATADV_ATTR_GW_SEL_CLASS: defines the selection criteria this node
-         *  will use to choose a gateway if gw_mode was set to 'client'.
-         */
-        BATADV_ATTR_GW_SEL_CLASS,
+	/**
+	 * @BATADV_ATTR_GW_SEL_CLASS: defines the selection criteria this node
+	 *  will use to choose a gateway if gw_mode was set to 'client'.
+	 */
+	BATADV_ATTR_GW_SEL_CLASS,
 
-        /**
-         * @BATADV_ATTR_HOP_PENALTY: defines the penalty which will be applied
-         *  to an originator message's tq-field on every hop and/or per
-         *  hard interface
-         */
-        BATADV_ATTR_HOP_PENALTY,
+	/**
+	 * @BATADV_ATTR_HOP_PENALTY: defines the penalty which will be applied
+	 *  to an originator message's tq-field on every hop and/or per
+	 *  hard interface
+	 */
+	BATADV_ATTR_HOP_PENALTY,
 
-        /**
-         * @BATADV_ATTR_LOG_LEVEL: bitmask with to define which debug messages
-         *  should be send to the debug log/trace ring buffer
-         */
-        BATADV_ATTR_LOG_LEVEL,
+	/**
+	 * @BATADV_ATTR_LOG_LEVEL: bitmask with to define which debug messages
+	 *  should be send to the debug log/trace ring buffer
+	 */
+	BATADV_ATTR_LOG_LEVEL,
 
-        /**
-         * @BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED: whether multicast
-         *  optimizations should be replaced by simple broadcast-like flooding
-         *  of multicast packets. If set to non-zero then all nodes in the mesh
-         *  are going to use classic flooding for any multicast packet with no
-         *  optimizations.
-         */
-        BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED,
+	/**
+	 * @BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED: whether multicast
+	 *  optimizations should be replaced by simple broadcast-like flooding
+	 *  of multicast packets. If set to non-zero then all nodes in the mesh
+	 *  are going to use classic flooding for any multicast packet with no
+	 *  optimizations.
+	 */
+	BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED,
 
-        /**
-         * @BATADV_ATTR_NETWORK_CODING_ENABLED: whether Network Coding (using
-         *  some magic to send fewer wifi packets but still the same content) is
-         *  enabled or not.
-         */
-        BATADV_ATTR_NETWORK_CODING_ENABLED,
+	/**
+	 * @BATADV_ATTR_NETWORK_CODING_ENABLED: whether Network Coding (using
+	 *  some magic to send fewer wifi packets but still the same content) is
+	 *  enabled or not.
+	 */
+	BATADV_ATTR_NETWORK_CODING_ENABLED,
 
-        /**
-         * @BATADV_ATTR_ORIG_INTERVAL: defines the interval in milliseconds in
-         *  which batman sends its protocol messages.
-         */
-        BATADV_ATTR_ORIG_INTERVAL,
+	/**
+	 * @BATADV_ATTR_ORIG_INTERVAL: defines the interval in milliseconds in
+	 *  which batman sends its protocol messages.
+	 */
+	BATADV_ATTR_ORIG_INTERVAL,
 
-        /**
-         * @BATADV_ATTR_ELP_INTERVAL: defines the interval in milliseconds in
-         *  which batman emits probing packets for neighbor sensing (ELP).
-         */
-        BATADV_ATTR_ELP_INTERVAL,
+	/**
+	 * @BATADV_ATTR_ELP_INTERVAL: defines the interval in milliseconds in
+	 *  which batman emits probing packets for neighbor sensing (ELP).
+	 */
+	BATADV_ATTR_ELP_INTERVAL,
 
-        /**
-         * @BATADV_ATTR_THROUGHPUT_OVERRIDE: defines the throughput value to be
-         *  used by B.A.T.M.A.N. V when estimating the link throughput using
-         *  this interface. If the value is set to 0 then batman-adv will try to
-         *  estimate the throughput by itself.
-         */
-        BATADV_ATTR_THROUGHPUT_OVERRIDE,
+	/**
+	 * @BATADV_ATTR_THROUGHPUT_OVERRIDE: defines the throughput value to be
+	 *  used by B.A.T.M.A.N. V when estimating the link throughput using
+	 *  this interface. If the value is set to 0 then batman-adv will try to
+	 *  estimate the throughput by itself.
+	 */
+	BATADV_ATTR_THROUGHPUT_OVERRIDE,
 
-        /**
-         * @BATADV_ATTR_MULTICAST_FANOUT: defines the maximum number of packet
-         * copies that may be generated for a multicast-to-unicast conversion.
-         * Once this limit is exceeded distribution will fall back to broadcast.
-         */
-        BATADV_ATTR_MULTICAST_FANOUT,
+	/**
+	 * @BATADV_ATTR_MULTICAST_FANOUT: defines the maximum number of packet
+	 * copies that may be generated for a multicast-to-unicast conversion.
+	 * Once this limit is exceeded distribution will fall back to broadcast.
+	 */
+	BATADV_ATTR_MULTICAST_FANOUT,
 
-        /* add attributes above here, update the policy in netlink.c */
+	/* add attributes above here, update the policy in netlink.c */
 
-        /**
-         * @__BATADV_ATTR_AFTER_LAST: internal use
-         */
-        __BATADV_ATTR_AFTER_LAST,
+	/**
+	 * @__BATADV_ATTR_AFTER_LAST: internal use
+	 */
+	__BATADV_ATTR_AFTER_LAST,
 
-        /**
-         * @NUM_BATADV_ATTR: total number of batadv_nl_attrs available
-         */
-        NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST,
+	/**
+	 * @NUM_BATADV_ATTR: total number of batadv_nl_attrs available
+	 */
+	NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST,
 
-        /**
-         * @BATADV_ATTR_MAX: highest attribute number currently defined
-         */
-        BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1
+	/**
+	 * @BATADV_ATTR_MAX: highest attribute number currently defined
+	 */
+	BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1
 };
 
 /**
  * enum batadv_nl_commands - supported batman-adv netlink commands
  */
 enum batadv_nl_commands {
-        /**
-         * @BATADV_CMD_UNSPEC: unspecified command to catch errors
-         */
-        BATADV_CMD_UNSPEC,
+	/**
+	 * @BATADV_CMD_UNSPEC: unspecified command to catch errors
+	 */
+	BATADV_CMD_UNSPEC,
 
-        /**
-         * @BATADV_CMD_GET_MESH: Get attributes from softif/mesh
-         */
-        BATADV_CMD_GET_MESH,
+	/**
+	 * @BATADV_CMD_GET_MESH: Get attributes from softif/mesh
+	 */
+	BATADV_CMD_GET_MESH,
 
-        /**
-         * @BATADV_CMD_GET_MESH_INFO: Alias for @BATADV_CMD_GET_MESH
-         */
-        BATADV_CMD_GET_MESH_INFO = BATADV_CMD_GET_MESH,
+	/**
+	 * @BATADV_CMD_GET_MESH_INFO: Alias for @BATADV_CMD_GET_MESH
+	 */
+	BATADV_CMD_GET_MESH_INFO = BATADV_CMD_GET_MESH,
 
-        /**
-         * @BATADV_CMD_TP_METER: Start a tp meter session
-         */
-        BATADV_CMD_TP_METER,
+	/**
+	 * @BATADV_CMD_TP_METER: Start a tp meter session
+	 */
+	BATADV_CMD_TP_METER,
 
-        /**
-         * @BATADV_CMD_TP_METER_CANCEL: Cancel a tp meter session
-         */
-        BATADV_CMD_TP_METER_CANCEL,
+	/**
+	 * @BATADV_CMD_TP_METER_CANCEL: Cancel a tp meter session
+	 */
+	BATADV_CMD_TP_METER_CANCEL,
 
-        /**
-         * @BATADV_CMD_GET_ROUTING_ALGOS: Query the list of routing algorithms.
-         */
-        BATADV_CMD_GET_ROUTING_ALGOS,
+	/**
+	 * @BATADV_CMD_GET_ROUTING_ALGOS: Query the list of routing algorithms.
+	 */
+	BATADV_CMD_GET_ROUTING_ALGOS,
 
-        /**
-         * @BATADV_CMD_GET_HARDIF: Get attributes from a hardif of the
-         *  current softif
-         */
-        BATADV_CMD_GET_HARDIF,
+	/**
+	 * @BATADV_CMD_GET_HARDIF: Get attributes from a hardif of the
+	 *  current softif
+	 */
+	BATADV_CMD_GET_HARDIF,
 
-        /**
-         * @BATADV_CMD_GET_HARDIFS: Alias for @BATADV_CMD_GET_HARDIF
-         */
-        BATADV_CMD_GET_HARDIFS = BATADV_CMD_GET_HARDIF,
+	/**
+	 * @BATADV_CMD_GET_HARDIFS: Alias for @BATADV_CMD_GET_HARDIF
+	 */
+	BATADV_CMD_GET_HARDIFS = BATADV_CMD_GET_HARDIF,
 
-        /**
-         * @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations
-         */
-        BATADV_CMD_GET_TRANSTABLE_LOCAL,
+	/**
+	 * @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations
+	 */
+	BATADV_CMD_GET_TRANSTABLE_LOCAL,
 
-        /**
-         * @BATADV_CMD_GET_TRANSTABLE_GLOBAL: Query list of global translations
-         */
-        BATADV_CMD_GET_TRANSTABLE_GLOBAL,
+	/**
+	 * @BATADV_CMD_GET_TRANSTABLE_GLOBAL: Query list of global translations
+	 */
+	BATADV_CMD_GET_TRANSTABLE_GLOBAL,
 
-        /**
-         * @BATADV_CMD_GET_ORIGINATORS: Query list of originators
-         */
-        BATADV_CMD_GET_ORIGINATORS,
+	/**
+	 * @BATADV_CMD_GET_ORIGINATORS: Query list of originators
+	 */
+	BATADV_CMD_GET_ORIGINATORS,
 
-        /**
-         * @BATADV_CMD_GET_NEIGHBORS: Query list of neighbours
-         */
-        BATADV_CMD_GET_NEIGHBORS,
+	/**
+	 * @BATADV_CMD_GET_NEIGHBORS: Query list of neighbours
+	 */
+	BATADV_CMD_GET_NEIGHBORS,
 
-        /**
-         * @BATADV_CMD_GET_GATEWAYS: Query list of gateways
-         */
-        BATADV_CMD_GET_GATEWAYS,
+	/**
+	 * @BATADV_CMD_GET_GATEWAYS: Query list of gateways
+	 */
+	BATADV_CMD_GET_GATEWAYS,
 
-        /**
-         * @BATADV_CMD_GET_BLA_CLAIM: Query list of bridge loop avoidance claims
-         */
-        BATADV_CMD_GET_BLA_CLAIM,
+	/**
+	 * @BATADV_CMD_GET_BLA_CLAIM: Query list of bridge loop avoidance claims
+	 */
+	BATADV_CMD_GET_BLA_CLAIM,
 
-        /**
-         * @BATADV_CMD_GET_BLA_BACKBONE: Query list of bridge loop avoidance
-         * backbones
-         */
-        BATADV_CMD_GET_BLA_BACKBONE,
+	/**
+	 * @BATADV_CMD_GET_BLA_BACKBONE: Query list of bridge loop avoidance
+	 * backbones
+	 */
+	BATADV_CMD_GET_BLA_BACKBONE,
 
-        /**
-         * @BATADV_CMD_GET_DAT_CACHE: Query list of DAT cache entries
-         */
-        BATADV_CMD_GET_DAT_CACHE,
+	/**
+	 * @BATADV_CMD_GET_DAT_CACHE: Query list of DAT cache entries
+	 */
+	BATADV_CMD_GET_DAT_CACHE,
 
-        /**
-         * @BATADV_CMD_GET_MCAST_FLAGS: Query list of multicast flags
-         */
-        BATADV_CMD_GET_MCAST_FLAGS,
+	/**
+	 * @BATADV_CMD_GET_MCAST_FLAGS: Query list of multicast flags
+	 */
+	BATADV_CMD_GET_MCAST_FLAGS,
 
-        /**
-         * @BATADV_CMD_SET_MESH: Set attributes for softif/mesh
-         */
-        BATADV_CMD_SET_MESH,
+	/**
+	 * @BATADV_CMD_SET_MESH: Set attributes for softif/mesh
+	 */
+	BATADV_CMD_SET_MESH,
 
-        /**
-         * @BATADV_CMD_SET_HARDIF: Set attributes for hardif of the
-         *  current softif
-         */
-        BATADV_CMD_SET_HARDIF,
+	/**
+	 * @BATADV_CMD_SET_HARDIF: Set attributes for hardif of the
+	 *  current softif
+	 */
+	BATADV_CMD_SET_HARDIF,
 
-        /**
-         * @BATADV_CMD_GET_VLAN: Get attributes from a VLAN of the
-         *  current softif
-         */
-        BATADV_CMD_GET_VLAN,
+	/**
+	 * @BATADV_CMD_GET_VLAN: Get attributes from a VLAN of the
+	 *  current softif
+	 */
+	BATADV_CMD_GET_VLAN,
 
-        /**
-         * @BATADV_CMD_SET_VLAN: Set attributes for VLAN of the
-         *  current softif
-         */
-        BATADV_CMD_SET_VLAN,
+	/**
+	 * @BATADV_CMD_SET_VLAN: Set attributes for VLAN of the
+	 *  current softif
+	 */
+	BATADV_CMD_SET_VLAN,
 
-        /* add new commands above here */
+	/* add new commands above here */
 
-        /**
-         * @__BATADV_CMD_AFTER_LAST: internal use
-         */
-        __BATADV_CMD_AFTER_LAST,
+	/**
+	 * @__BATADV_CMD_AFTER_LAST: internal use
+	 */
+	__BATADV_CMD_AFTER_LAST,
 
-        /**
-         * @BATADV_CMD_MAX: highest used command number
-         */
-        BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1
+	/**
+	 * @BATADV_CMD_MAX: highest used command number
+	 */
+	BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1
 };
 
 /**
  * enum batadv_tp_meter_reason - reason of a tp meter test run stop
  */
 enum batadv_tp_meter_reason {
-        /**
-         * @BATADV_TP_REASON_COMPLETE: sender finished tp run
-         */
-        BATADV_TP_REASON_COMPLETE		= 3,
+	/**
+	 * @BATADV_TP_REASON_COMPLETE: sender finished tp run
+	 */
+	BATADV_TP_REASON_COMPLETE		= 3,
 
-        /**
-         * @BATADV_TP_REASON_CANCEL: sender was stopped during run
-         */
-        BATADV_TP_REASON_CANCEL			= 4,
+	/**
+	 * @BATADV_TP_REASON_CANCEL: sender was stopped during run
+	 */
+	BATADV_TP_REASON_CANCEL			= 4,
 
-        /* error status >= 128 */
+	/* error status >= 128 */
 
-        /**
-         * @BATADV_TP_REASON_DST_UNREACHABLE: receiver could not be reached or
-         * didn't answer
-         */
-        BATADV_TP_REASON_DST_UNREACHABLE	= 128,
+	/**
+	 * @BATADV_TP_REASON_DST_UNREACHABLE: receiver could not be reached or
+	 * didn't answer
+	 */
+	BATADV_TP_REASON_DST_UNREACHABLE	= 128,
 
-        /**
-         * @BATADV_TP_REASON_RESEND_LIMIT: (unused) sender retry reached limit
-         */
-        BATADV_TP_REASON_RESEND_LIMIT		= 129,
+	/**
+	 * @BATADV_TP_REASON_RESEND_LIMIT: (unused) sender retry reached limit
+	 */
+	BATADV_TP_REASON_RESEND_LIMIT		= 129,
 
-        /**
-         * @BATADV_TP_REASON_ALREADY_ONGOING: test to or from the same node
-         * already ongoing
-         */
-        BATADV_TP_REASON_ALREADY_ONGOING	= 130,
+	/**
+	 * @BATADV_TP_REASON_ALREADY_ONGOING: test to or from the same node
+	 * already ongoing
+	 */
+	BATADV_TP_REASON_ALREADY_ONGOING	= 130,
 
-        /**
-         * @BATADV_TP_REASON_MEMORY_ERROR: test was stopped due to low memory
-         */
-        BATADV_TP_REASON_MEMORY_ERROR		= 131,
+	/**
+	 * @BATADV_TP_REASON_MEMORY_ERROR: test was stopped due to low memory
+	 */
+	BATADV_TP_REASON_MEMORY_ERROR		= 131,
 
-        /**
-         * @BATADV_TP_REASON_CANT_SEND: failed to send via outgoing interface
-         */
-        BATADV_TP_REASON_CANT_SEND		= 132,
+	/**
+	 * @BATADV_TP_REASON_CANT_SEND: failed to send via outgoing interface
+	 */
+	BATADV_TP_REASON_CANT_SEND		= 132,
 
-        /**
-         * @BATADV_TP_REASON_TOO_MANY: too many ongoing sessions
-         */
-        BATADV_TP_REASON_TOO_MANY		= 133,
+	/**
+	 * @BATADV_TP_REASON_TOO_MANY: too many ongoing sessions
+	 */
+	BATADV_TP_REASON_TOO_MANY		= 133,
 };
 
 /**
  * enum batadv_ifla_attrs - batman-adv ifla nested attributes
  */
 enum batadv_ifla_attrs {
-        /**
-         * @IFLA_BATADV_UNSPEC: unspecified attribute which is not parsed by
-         *  rtnetlink
-         */
-        IFLA_BATADV_UNSPEC,
+	/**
+	 * @IFLA_BATADV_UNSPEC: unspecified attribute which is not parsed by
+	 *  rtnetlink
+	 */
+	IFLA_BATADV_UNSPEC,
 
-        /**
-         * @IFLA_BATADV_ALGO_NAME: routing algorithm (name) which should be
-         *  used by the newly registered batadv net_device.
-         */
-        IFLA_BATADV_ALGO_NAME,
+	/**
+	 * @IFLA_BATADV_ALGO_NAME: routing algorithm (name) which should be
+	 *  used by the newly registered batadv net_device.
+	 */
+	IFLA_BATADV_ALGO_NAME,
 
-        /* add attributes above here, update the policy in soft-interface.c */
+	/* add attributes above here, update the policy in soft-interface.c */
 
-        /**
-         * @__IFLA_BATADV_MAX: internal use
-         */
-        __IFLA_BATADV_MAX,
+	/**
+	 * @__IFLA_BATADV_MAX: internal use
+	 */
+	__IFLA_BATADV_MAX,
 };
 
 #define IFLA_BATADV_MAX (__IFLA_BATADV_MAX - 1)
diff --git a/src/basic/linux/btrfs.h b/src/basic/linux/btrfs.h
index d22f197..74ed908 100644
--- a/src/basic/linux/btrfs.h
+++ b/src/basic/linux/btrfs.h
@@ -19,8 +19,16 @@
 
 #ifndef _UAPI_LINUX_BTRFS_H
 #define _UAPI_LINUX_BTRFS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <linux/types.h>
 #include <linux/ioctl.h>
+#if WANT_LINUX_FS_H
+#include <linux/fs.h>
+#endif
 
 #define BTRFS_IOCTL_MAGIC 0x94
 #define BTRFS_VOL_NAME_MAX 255
@@ -93,7 +101,7 @@
 	__u64	num_ref_copies;
 	__u64	num_excl_copies;
 	struct btrfs_qgroup_limit lim;
-	__u64	qgroups[0];
+	__u64	qgroups[];
 };
 
 struct btrfs_ioctl_qgroup_limit_args {
@@ -154,7 +162,7 @@
 	__u64 tree_bytes_scrubbed;	/* # of tree bytes scrubbed */
 	__u64 read_errors;		/* # of read errors encountered (EIO) */
 	__u64 csum_errors;		/* # of failed csum checks */
-	__u64 verify_errors;		/* # of occurences, where the metadata
+	__u64 verify_errors;		/* # of occurrences, where the metadata
 					 * of a tree block did not match the
 					 * expected values, like generation or
 					 * logical */
@@ -174,7 +182,7 @@
 	__u64 last_physical;		/* last physical address scrubbed. In
 					 * case a scrub was aborted, this can
 					 * be used to restart the scrub */
-	__u64 unverified_errors;	/* # of occurences where a read for a
+	__u64 unverified_errors;	/* # of occurrences where a read for a
 					 * full (64k) bio failed, but the re-
 					 * check succeeded for each 4k piece.
 					 * Intermittent error. */
@@ -288,6 +296,13 @@
  * first mount when booting older kernel versions.
  */
 #define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID	(1ULL << 1)
+#define BTRFS_FEATURE_COMPAT_RO_VERITY			(1ULL << 2)
+
+/*
+ * Put all block group items into a dedicated block group tree, greatly
+ * reducing mount time for large filesystem due to better locality.
+ */
+#define BTRFS_FEATURE_COMPAT_RO_BLOCK_GROUP_TREE	(1ULL << 3)
 
 #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF	(1ULL << 0)
 #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL	(1ULL << 1)
@@ -307,6 +322,8 @@
 #define BTRFS_FEATURE_INCOMPAT_NO_HOLES		(1ULL << 9)
 #define BTRFS_FEATURE_INCOMPAT_METADATA_UUID	(1ULL << 10)
 #define BTRFS_FEATURE_INCOMPAT_RAID1C34		(1ULL << 11)
+#define BTRFS_FEATURE_INCOMPAT_ZONED		(1ULL << 12)
+#define BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2	(1ULL << 13)
 
 struct btrfs_ioctl_feature_flags {
 	__u64 compat_flags;
@@ -324,6 +341,12 @@
  */
 struct btrfs_balance_args {
 	__u64 profiles;
+
+	/*
+	 * usage filter
+	 * BTRFS_BALANCE_ARGS_USAGE with a single value means '0..N'
+	 * BTRFS_BALANCE_ARGS_USAGE_RANGE - range syntax, min..max
+	 */
 	union {
 		__u64 usage;
 		struct {
@@ -540,7 +563,7 @@
 	__u64 offset;
 	__u32 type;
 	__u32 len;
-};
+} __attribute__ ((__may_alias__));
 
 #define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
 /*
@@ -553,18 +576,23 @@
 	char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
 };
 
+/*
+ * Extended version of TREE_SEARCH ioctl that can return more than 4k of bytes.
+ * The allocated size of the buffer is set in buf_size.
+ */
 struct btrfs_ioctl_search_args_v2 {
 	struct btrfs_ioctl_search_key key; /* in/out - search parameters */
 	__u64 buf_size;		   /* in - size of buffer
 					    * out - on EOVERFLOW: needed size
 					    *       to store item */
-	__u64 buf[0];                       /* out - found items */
+	__u64 buf[];                       /* out - found items */
 };
 
+/* With a @src_length of zero, the range from @src_offset->EOF is cloned! */
 struct btrfs_ioctl_clone_range_args {
-  __s64 src_fd;
-  __u64 src_offset, src_length;
-  __u64 dest_offset;
+	__s64 src_fd;
+	__u64 src_offset, src_length;
+	__u64 dest_offset;
 };
 
 /*
@@ -629,7 +657,7 @@
 	__u16 dest_count;	/* in - total elements in info array */
 	__u16 reserved1;
 	__u32 reserved2;
-	struct btrfs_ioctl_same_extent_info info[0];
+	struct btrfs_ioctl_same_extent_info info[];
 };
 
 struct btrfs_ioctl_space_info {
@@ -641,7 +669,7 @@
 struct btrfs_ioctl_space_args {
 	__u64 space_slots;
 	__u64 total_spaces;
-	struct btrfs_ioctl_space_info spaces[0];
+	struct btrfs_ioctl_space_info spaces[];
 };
 
 struct btrfs_data_container {
@@ -649,7 +677,7 @@
 	__u32	bytes_missing;	/* out -- additional bytes needed for result */
 	__u32	elem_cnt;	/* out */
 	__u32	elem_missed;	/* out */
-	__u64	val[0];		/* out */
+	__u64	val[];		/* out */
 };
 
 struct btrfs_ioctl_ino_path_args {
@@ -668,8 +696,11 @@
 	/* struct btrfs_data_container	*inodes;	out   */
 	__u64				inodes;
 };
-/* Return every ref to the extent, not just those containing logical block.
- * Requires logical == extent bytenr. */
+
+/*
+ * Return every ref to the extent, not just those containing logical block.
+ * Requires logical == extent bytenr.
+ */
 #define BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET	(1ULL << 0)
 
 enum btrfs_dev_stat_values {
@@ -769,10 +800,24 @@
  */
 #define BTRFS_SEND_FLAG_OMIT_END_CMD		0x4
 
+/*
+ * Read the protocol version in the structure
+ */
+#define BTRFS_SEND_FLAG_VERSION			0x8
+
+/*
+ * Send compressed data using the ENCODED_WRITE command instead of decompressing
+ * the data and sending it with the WRITE command. This requires protocol
+ * version >= 2.
+ */
+#define BTRFS_SEND_FLAG_COMPRESSED		0x10
+
 #define BTRFS_SEND_FLAG_MASK \
 	(BTRFS_SEND_FLAG_NO_FILE_DATA | \
 	 BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | \
-	 BTRFS_SEND_FLAG_OMIT_END_CMD)
+	 BTRFS_SEND_FLAG_OMIT_END_CMD | \
+	 BTRFS_SEND_FLAG_VERSION | \
+	 BTRFS_SEND_FLAG_COMPRESSED)
 
 struct btrfs_ioctl_send_args {
 	__s64 send_fd;			/* in */
@@ -780,7 +825,8 @@
 	__u64 *clone_sources;	/* in */
 	__u64 parent_root;		/* in */
 	__u64 flags;			/* in */
-	__u64 reserved[4];		/* in */
+	__u32 version;			/* in */
+	__u8  reserved[28];		/* in */
 };
 
 /*
@@ -859,6 +905,134 @@
 		__u8 align[7];
 };
 
+/*
+ * Data and metadata for an encoded read or write.
+ *
+ * Encoded I/O bypasses any encoding automatically done by the filesystem (e.g.,
+ * compression). This can be used to read the compressed contents of a file or
+ * write pre-compressed data directly to a file.
+ *
+ * BTRFS_IOC_ENCODED_READ and BTRFS_IOC_ENCODED_WRITE are essentially
+ * preadv/pwritev with additional metadata about how the data is encoded and the
+ * size of the unencoded data.
+ *
+ * BTRFS_IOC_ENCODED_READ fills the given iovecs with the encoded data, fills
+ * the metadata fields, and returns the size of the encoded data. It reads one
+ * extent per call. It can also read data which is not encoded.
+ *
+ * BTRFS_IOC_ENCODED_WRITE uses the metadata fields, writes the encoded data
+ * from the iovecs, and returns the size of the encoded data. Note that the
+ * encoded data is not validated when it is written; if it is not valid (e.g.,
+ * it cannot be decompressed), then a subsequent read may return an error.
+ *
+ * Since the filesystem page cache contains decoded data, encoded I/O bypasses
+ * the page cache. Encoded I/O requires CAP_SYS_ADMIN.
+ */
+struct btrfs_ioctl_encoded_io_args {
+	/* Input parameters for both reads and writes. */
+
+	/*
+	 * iovecs containing encoded data.
+	 *
+	 * For reads, if the size of the encoded data is larger than the sum of
+	 * iov[n].iov_len for 0 <= n < iovcnt, then the ioctl fails with
+	 * ENOBUFS.
+	 *
+	 * For writes, the size of the encoded data is the sum of iov[n].iov_len
+	 * for 0 <= n < iovcnt. This must be less than 128 KiB (this limit may
+	 * increase in the future). This must also be less than or equal to
+	 * unencoded_len.
+	 */
+	const struct iovec *iov;
+	/* Number of iovecs. */
+	unsigned long iovcnt;
+	/*
+	 * Offset in file.
+	 *
+	 * For writes, must be aligned to the sector size of the filesystem.
+	 */
+	__s64 offset;
+	/* Currently must be zero. */
+	__u64 flags;
+
+	/*
+	 * For reads, the following members are output parameters that will
+	 * contain the returned metadata for the encoded data.
+	 * For writes, the following members must be set to the metadata for the
+	 * encoded data.
+	 */
+
+	/*
+	 * Length of the data in the file.
+	 *
+	 * Must be less than or equal to unencoded_len - unencoded_offset. For
+	 * writes, must be aligned to the sector size of the filesystem unless
+	 * the data ends at or beyond the current end of the file.
+	 */
+	__u64 len;
+	/*
+	 * Length of the unencoded (i.e., decrypted and decompressed) data.
+	 *
+	 * For writes, must be no more than 128 KiB (this limit may increase in
+	 * the future). If the unencoded data is actually longer than
+	 * unencoded_len, then it is truncated; if it is shorter, then it is
+	 * extended with zeroes.
+	 */
+	__u64 unencoded_len;
+	/*
+	 * Offset from the first byte of the unencoded data to the first byte of
+	 * logical data in the file.
+	 *
+	 * Must be less than unencoded_len.
+	 */
+	__u64 unencoded_offset;
+	/*
+	 * BTRFS_ENCODED_IO_COMPRESSION_* type.
+	 *
+	 * For writes, must not be BTRFS_ENCODED_IO_COMPRESSION_NONE.
+	 */
+	__u32 compression;
+	/* Currently always BTRFS_ENCODED_IO_ENCRYPTION_NONE. */
+	__u32 encryption;
+	/*
+	 * Reserved for future expansion.
+	 *
+	 * For reads, always returned as zero. Users should check for non-zero
+	 * bytes. If there are any, then the kernel has a newer version of this
+	 * structure with additional information that the user definition is
+	 * missing.
+	 *
+	 * For writes, must be zeroed.
+	 */
+	__u8 reserved[64];
+};
+
+/* Data is not compressed. */
+#define BTRFS_ENCODED_IO_COMPRESSION_NONE 0
+/* Data is compressed as a single zlib stream. */
+#define BTRFS_ENCODED_IO_COMPRESSION_ZLIB 1
+/*
+ * Data is compressed as a single zstd frame with the windowLog compression
+ * parameter set to no more than 17.
+ */
+#define BTRFS_ENCODED_IO_COMPRESSION_ZSTD 2
+/*
+ * Data is compressed sector by sector (using the sector size indicated by the
+ * name of the constant) with LZO1X and wrapped in the format documented in
+ * fs/btrfs/lzo.c. For writes, the compression sector size must match the
+ * filesystem sector size.
+ */
+#define BTRFS_ENCODED_IO_COMPRESSION_LZO_4K 3
+#define BTRFS_ENCODED_IO_COMPRESSION_LZO_8K 4
+#define BTRFS_ENCODED_IO_COMPRESSION_LZO_16K 5
+#define BTRFS_ENCODED_IO_COMPRESSION_LZO_32K 6
+#define BTRFS_ENCODED_IO_COMPRESSION_LZO_64K 7
+#define BTRFS_ENCODED_IO_COMPRESSION_TYPES 8
+
+/* Data is not encrypted. */
+#define BTRFS_ENCODED_IO_ENCRYPTION_NONE 0
+#define BTRFS_ENCODED_IO_ENCRYPTION_TYPES 1
+
 /* Error codes as returned by the kernel */
 enum btrfs_err_code {
 	BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
@@ -987,5 +1161,13 @@
 				struct btrfs_ioctl_ino_lookup_user_args)
 #define BTRFS_IOC_SNAP_DESTROY_V2 _IOW(BTRFS_IOCTL_MAGIC, 63, \
 				struct btrfs_ioctl_vol_args_v2)
+#define BTRFS_IOC_ENCODED_READ _IOR(BTRFS_IOCTL_MAGIC, 64, \
+				    struct btrfs_ioctl_encoded_io_args)
+#define BTRFS_IOC_ENCODED_WRITE _IOW(BTRFS_IOCTL_MAGIC, 64, \
+				     struct btrfs_ioctl_encoded_io_args)
+
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* _UAPI_LINUX_BTRFS_H */
diff --git a/src/basic/linux/btrfs_tree.h b/src/basic/linux/btrfs_tree.h
index 6b88598..ab38d0f 100644
--- a/src/basic/linux/btrfs_tree.h
+++ b/src/basic/linux/btrfs_tree.h
@@ -10,6 +10,23 @@
 #include <stddef.h>
 #endif
 
+/* ASCII for _BHRfS_M, no terminating nul */
+#define BTRFS_MAGIC 0x4D5F53665248425FULL
+
+#define BTRFS_MAX_LEVEL 8
+
+/*
+ * We can actually store much bigger names, but lets not confuse the rest of
+ * linux.
+ */
+#define BTRFS_NAME_LEN 255
+
+/*
+ * Theoretical limit is larger, but we keep this down to a sane value. That
+ * should limit greatly the possibility of collisions on inode ref items.
+ */
+#define BTRFS_LINK_MAX 65535U
+
 /*
  * This header contains the structure definitions and constants used
  * by file system objects that can be retrieved using
@@ -53,13 +70,16 @@
 /* tracks free space in block groups. */
 #define BTRFS_FREE_SPACE_TREE_OBJECTID 10ULL
 
+/* Holds the block group items for extent tree v2. */
+#define BTRFS_BLOCK_GROUP_TREE_OBJECTID 11ULL
+
 /* device stats in the device tree */
 #define BTRFS_DEV_STATS_OBJECTID 0ULL
 
 /* for storing balance parameters in the root tree */
 #define BTRFS_BALANCE_OBJECTID -4ULL
 
-/* orhpan objectid for tracking unlinked/truncated files */
+/* orphan objectid for tracking unlinked/truncated files */
 #define BTRFS_ORPHAN_OBJECTID -5ULL
 
 /* does write ahead logging to speed up fsyncs */
@@ -118,12 +138,37 @@
 #define BTRFS_INODE_REF_KEY		12
 #define BTRFS_INODE_EXTREF_KEY		13
 #define BTRFS_XATTR_ITEM_KEY		24
+
+/*
+ * fs verity items are stored under two different key types on disk.
+ * The descriptor items:
+ * [ inode objectid, BTRFS_VERITY_DESC_ITEM_KEY, offset ]
+ *
+ * At offset 0, we store a btrfs_verity_descriptor_item which tracks the size
+ * of the descriptor item and some extra data for encryption.
+ * Starting at offset 1, these hold the generic fs verity descriptor.  The
+ * latter are opaque to btrfs, we just read and write them as a blob for the
+ * higher level verity code.  The most common descriptor size is 256 bytes.
+ *
+ * The merkle tree items:
+ * [ inode objectid, BTRFS_VERITY_MERKLE_ITEM_KEY, offset ]
+ *
+ * These also start at offset 0, and correspond to the merkle tree bytes.  When
+ * fsverity asks for page 0 of the merkle tree, we pull up one page starting at
+ * offset 0 for this key type.  These are also opaque to btrfs, we're blindly
+ * storing whatever fsverity sends down.
+ */
+#define BTRFS_VERITY_DESC_ITEM_KEY	36
+#define BTRFS_VERITY_MERKLE_ITEM_KEY	37
+
 #define BTRFS_ORPHAN_ITEM_KEY		48
 /* reserve 2-15 close to the inode for later flexibility */
 
 /*
  * dir items are the name -> inode pointers in a directory.  There is one
- * for every name in a directory.
+ * for every name in a directory.  BTRFS_DIR_LOG_ITEM_KEY is no longer used
+ * but it's still defined here for documentation purposes and to help avoid
+ * having its numerical value reused in the future.
  */
 #define BTRFS_DIR_LOG_ITEM_KEY  60
 #define BTRFS_DIR_LOG_INDEX_KEY 72
@@ -275,7 +320,7 @@
 #define BTRFS_PERSISTENT_ITEM_KEY	249
 
 /*
- * Persistantly stores the device replace state in the device tree.
+ * Persistently stores the device replace state in the device tree.
  * The key is built like this: (0, BTRFS_DEV_REPLACE_KEY, 0).
  */
 #define BTRFS_DEV_REPLACE_KEY	250
@@ -299,7 +344,8 @@
  */
 #define BTRFS_STRING_ITEM_KEY	253
 
-
+/* Maximum metadata block size (nodesize) */
+#define BTRFS_MAX_METADATA_BLOCKSIZE			65536
 
 /* 32 bytes in various csum fields */
 #define BTRFS_CSUM_SIZE 32
@@ -330,6 +376,50 @@
 #define BTRFS_FT_SYMLINK	7
 #define BTRFS_FT_XATTR		8
 #define BTRFS_FT_MAX		9
+/* Directory contains encrypted data */
+#define BTRFS_FT_ENCRYPTED	0x80
+
+static inline __u8 btrfs_dir_flags_to_ftype(__u8 flags)
+{
+	return flags & ~BTRFS_FT_ENCRYPTED;
+}
+
+/*
+ * Inode flags
+ */
+#define BTRFS_INODE_NODATASUM		(1U << 0)
+#define BTRFS_INODE_NODATACOW		(1U << 1)
+#define BTRFS_INODE_READONLY		(1U << 2)
+#define BTRFS_INODE_NOCOMPRESS		(1U << 3)
+#define BTRFS_INODE_PREALLOC		(1U << 4)
+#define BTRFS_INODE_SYNC		(1U << 5)
+#define BTRFS_INODE_IMMUTABLE		(1U << 6)
+#define BTRFS_INODE_APPEND		(1U << 7)
+#define BTRFS_INODE_NODUMP		(1U << 8)
+#define BTRFS_INODE_NOATIME		(1U << 9)
+#define BTRFS_INODE_DIRSYNC		(1U << 10)
+#define BTRFS_INODE_COMPRESS		(1U << 11)
+
+#define BTRFS_INODE_ROOT_ITEM_INIT	(1U << 31)
+
+#define BTRFS_INODE_FLAG_MASK						\
+	(BTRFS_INODE_NODATASUM |					\
+	 BTRFS_INODE_NODATACOW |					\
+	 BTRFS_INODE_READONLY |						\
+	 BTRFS_INODE_NOCOMPRESS |					\
+	 BTRFS_INODE_PREALLOC |						\
+	 BTRFS_INODE_SYNC |						\
+	 BTRFS_INODE_IMMUTABLE |					\
+	 BTRFS_INODE_APPEND |						\
+	 BTRFS_INODE_NODUMP |						\
+	 BTRFS_INODE_NOATIME |						\
+	 BTRFS_INODE_DIRSYNC |						\
+	 BTRFS_INODE_COMPRESS |						\
+	 BTRFS_INODE_ROOT_ITEM_INIT)
+
+#define BTRFS_INODE_RO_VERITY		(1U << 0)
+
+#define BTRFS_INODE_RO_FLAG_MASK	(BTRFS_INODE_RO_VERITY)
 
 /*
  * The key defines the order in the tree, and so it also defines (optimal)
@@ -360,6 +450,109 @@
 	__u64 offset;
 } __attribute__ ((__packed__));
 
+/*
+ * Every tree block (leaf or node) starts with this header.
+ */
+struct btrfs_header {
+	/* These first four must match the super block */
+	__u8 csum[BTRFS_CSUM_SIZE];
+	/* FS specific uuid */
+	__u8 fsid[BTRFS_FSID_SIZE];
+	/* Which block this node is supposed to live in */
+	__le64 bytenr;
+	__le64 flags;
+
+	/* Allowed to be different from the super from here on down */
+	__u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
+	__le64 generation;
+	__le64 owner;
+	__le32 nritems;
+	__u8 level;
+} __attribute__ ((__packed__));
+
+/*
+ * This is a very generous portion of the super block, giving us room to
+ * translate 14 chunks with 3 stripes each.
+ */
+#define BTRFS_SYSTEM_CHUNK_ARRAY_SIZE 2048
+
+/*
+ * Just in case we somehow lose the roots and are not able to mount, we store
+ * an array of the roots from previous transactions in the super.
+ */
+#define BTRFS_NUM_BACKUP_ROOTS 4
+struct btrfs_root_backup {
+	__le64 tree_root;
+	__le64 tree_root_gen;
+
+	__le64 chunk_root;
+	__le64 chunk_root_gen;
+
+	__le64 extent_root;
+	__le64 extent_root_gen;
+
+	__le64 fs_root;
+	__le64 fs_root_gen;
+
+	__le64 dev_root;
+	__le64 dev_root_gen;
+
+	__le64 csum_root;
+	__le64 csum_root_gen;
+
+	__le64 total_bytes;
+	__le64 bytes_used;
+	__le64 num_devices;
+	/* future */
+	__le64 unused_64[4];
+
+	__u8 tree_root_level;
+	__u8 chunk_root_level;
+	__u8 extent_root_level;
+	__u8 fs_root_level;
+	__u8 dev_root_level;
+	__u8 csum_root_level;
+	/* future and to align */
+	__u8 unused_8[10];
+} __attribute__ ((__packed__));
+
+/*
+ * A leaf is full of items. offset and size tell us where to find the item in
+ * the leaf (relative to the start of the data area)
+ */
+struct btrfs_item {
+	struct btrfs_disk_key key;
+	__le32 offset;
+	__le32 size;
+} __attribute__ ((__packed__));
+
+/*
+ * Leaves have an item area and a data area:
+ * [item0, item1....itemN] [free space] [dataN...data1, data0]
+ *
+ * The data is separate from the items to get the keys closer together during
+ * searches.
+ */
+struct btrfs_leaf {
+	struct btrfs_header header;
+	struct btrfs_item items[];
+} __attribute__ ((__packed__));
+
+/*
+ * All non-leaf blocks are nodes, they hold only keys and pointers to other
+ * blocks.
+ */
+struct btrfs_key_ptr {
+	struct btrfs_disk_key key;
+	__le64 blockptr;
+	__le64 generation;
+} __attribute__ ((__packed__));
+
+struct btrfs_node {
+	struct btrfs_header header;
+	struct btrfs_key_ptr ptrs[];
+} __attribute__ ((__packed__));
+
 struct btrfs_dev_item {
 	/* the internal btrfs device id */
 	__le64 devid;
@@ -443,6 +636,69 @@
 	/* additional stripes go here */
 } __attribute__ ((__packed__));
 
+/*
+ * The super block basically lists the main trees of the FS.
+ */
+struct btrfs_super_block {
+	/* The first 4 fields must match struct btrfs_header */
+	__u8 csum[BTRFS_CSUM_SIZE];
+	/* FS specific UUID, visible to user */
+	__u8 fsid[BTRFS_FSID_SIZE];
+	/* This block number */
+	__le64 bytenr;
+	__le64 flags;
+
+	/* Allowed to be different from the btrfs_header from here own down */
+	__le64 magic;
+	__le64 generation;
+	__le64 root;
+	__le64 chunk_root;
+	__le64 log_root;
+
+	/*
+	 * This member has never been utilized since the very beginning, thus
+	 * it's always 0 regardless of kernel version.  We always use
+	 * generation + 1 to read log tree root.  So here we mark it deprecated.
+	 */
+	__le64 __unused_log_root_transid;
+	__le64 total_bytes;
+	__le64 bytes_used;
+	__le64 root_dir_objectid;
+	__le64 num_devices;
+	__le32 sectorsize;
+	__le32 nodesize;
+	__le32 __unused_leafsize;
+	__le32 stripesize;
+	__le32 sys_chunk_array_size;
+	__le64 chunk_root_generation;
+	__le64 compat_flags;
+	__le64 compat_ro_flags;
+	__le64 incompat_flags;
+	__le16 csum_type;
+	__u8 root_level;
+	__u8 chunk_root_level;
+	__u8 log_root_level;
+	struct btrfs_dev_item dev_item;
+
+	char label[BTRFS_LABEL_SIZE];
+
+	__le64 cache_generation;
+	__le64 uuid_tree_generation;
+
+	/* The UUID written into btree blocks */
+	__u8 metadata_uuid[BTRFS_FSID_SIZE];
+
+	__u64 nr_global_roots;
+
+	/* Future expansion */
+	__le64 reserved[27];
+	__u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
+	struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS];
+
+	/* Padded to 4096 bytes */
+	__u8 padding[565];
+} __attribute__ ((__packed__));
+
 #define BTRFS_FREE_SPACE_EXTENT	1
 #define BTRFS_FREE_SPACE_BITMAP	2
 
@@ -497,6 +753,14 @@
 /* use full backrefs for extent pointers in the block */
 #define BTRFS_BLOCK_FLAG_FULL_BACKREF	(1ULL << 8)
 
+#define BTRFS_BACKREF_REV_MAX		256
+#define BTRFS_BACKREF_REV_SHIFT		56
+#define BTRFS_BACKREF_REV_MASK		(((u64)BTRFS_BACKREF_REV_MAX - 1) << \
+					 BTRFS_BACKREF_REV_SHIFT)
+
+#define BTRFS_OLD_BACKREF_REV		0
+#define BTRFS_MIXED_BACKREF_REV		1
+
 /*
  * this flag is only used internally by scrub and may be changed at any time
  * it is only declared here to avoid collisions
@@ -546,7 +810,7 @@
 	__le64 parent_objectid;
 	__le64 index;
 	__le16 name_len;
-	__u8   name[0];
+	__u8   name[];
 	/* name goes here */
 } __attribute__ ((__packed__));
 
@@ -851,19 +1115,6 @@
 #define BTRFS_BLOCK_GROUP_RESERVED	(BTRFS_AVAIL_ALLOC_BIT_SINGLE | \
 					 BTRFS_SPACE_INFO_GLOBAL_RSV)
 
-enum btrfs_raid_types {
-	BTRFS_RAID_RAID10,
-	BTRFS_RAID_RAID1,
-	BTRFS_RAID_DUP,
-	BTRFS_RAID_RAID0,
-	BTRFS_RAID_SINGLE,
-	BTRFS_RAID_RAID5,
-	BTRFS_RAID_RAID6,
-	BTRFS_RAID_RAID1C3,
-	BTRFS_RAID_RAID1C4,
-	BTRFS_NR_RAID_TYPES
-};
-
 #define BTRFS_BLOCK_GROUP_TYPE_MASK	(BTRFS_BLOCK_GROUP_DATA |    \
 					 BTRFS_BLOCK_GROUP_SYSTEM |  \
 					 BTRFS_BLOCK_GROUP_METADATA)
@@ -949,6 +1200,10 @@
  */
 #define BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT	(1ULL << 2)
 
+#define BTRFS_QGROUP_STATUS_FLAGS_MASK	(BTRFS_QGROUP_STATUS_FLAG_ON |		\
+					 BTRFS_QGROUP_STATUS_FLAG_RESCAN |	\
+					 BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT)
+
 #define BTRFS_QGROUP_STATUS_VERSION        1
 
 struct btrfs_qgroup_status_item {
@@ -990,4 +1245,16 @@
 	__le64 rsv_excl;
 } __attribute__ ((__packed__));
 
+struct btrfs_verity_descriptor_item {
+	/* Size of the verity descriptor in bytes */
+	__le64 size;
+	/*
+	 * When we implement support for fscrypt, we will need to encrypt the
+	 * Merkle tree for encrypted verity files. These 128 bits are for the
+	 * eventual storage of an fscrypt initialization vector.
+	 */
+	__le64 reserved[2];
+	__u8 encryption;
+} __attribute__ ((__packed__));
+
 #endif /* _BTRFS_CTREE_H_ */
diff --git a/src/basic/linux/can/netlink.h b/src/basic/linux/can/netlink.h
index 6f598b7..02ec32d 100644
--- a/src/basic/linux/can/netlink.h
+++ b/src/basic/linux/can/netlink.h
@@ -100,6 +100,9 @@
 #define CAN_CTRLMODE_FD			0x20	/* CAN FD mode */
 #define CAN_CTRLMODE_PRESUME_ACK	0x40	/* Ignore missing CAN ACKs */
 #define CAN_CTRLMODE_FD_NON_ISO		0x80	/* CAN FD in non-ISO mode */
+#define CAN_CTRLMODE_CC_LEN8_DLC	0x100	/* Classic CAN DLC option */
+#define CAN_CTRLMODE_TDC_AUTO		0x200	/* CAN transiver automatically calculates TDCV */
+#define CAN_CTRLMODE_TDC_MANUAL		0x400	/* TDCV is manually set up by user */
 
 /*
  * CAN device statistics
@@ -133,10 +136,48 @@
 	IFLA_CAN_BITRATE_CONST,
 	IFLA_CAN_DATA_BITRATE_CONST,
 	IFLA_CAN_BITRATE_MAX,
-	__IFLA_CAN_MAX
+	IFLA_CAN_TDC,
+	IFLA_CAN_CTRLMODE_EXT,
+
+	/* add new constants above here */
+	__IFLA_CAN_MAX,
+	IFLA_CAN_MAX = __IFLA_CAN_MAX - 1
 };
 
-#define IFLA_CAN_MAX	(__IFLA_CAN_MAX - 1)
+/*
+ * CAN FD Transmitter Delay Compensation (TDC)
+ *
+ * Please refer to struct can_tdc_const and can_tdc in
+ * include/linux/can/bittiming.h for further details.
+ */
+enum {
+	IFLA_CAN_TDC_UNSPEC,
+	IFLA_CAN_TDC_TDCV_MIN,	/* u32 */
+	IFLA_CAN_TDC_TDCV_MAX,	/* u32 */
+	IFLA_CAN_TDC_TDCO_MIN,	/* u32 */
+	IFLA_CAN_TDC_TDCO_MAX,	/* u32 */
+	IFLA_CAN_TDC_TDCF_MIN,	/* u32 */
+	IFLA_CAN_TDC_TDCF_MAX,	/* u32 */
+	IFLA_CAN_TDC_TDCV,	/* u32 */
+	IFLA_CAN_TDC_TDCO,	/* u32 */
+	IFLA_CAN_TDC_TDCF,	/* u32 */
+
+	/* add new constants above here */
+	__IFLA_CAN_TDC,
+	IFLA_CAN_TDC_MAX = __IFLA_CAN_TDC - 1
+};
+
+/*
+ * IFLA_CAN_CTRLMODE_EXT nest: controller mode extended parameters
+ */
+enum {
+	IFLA_CAN_CTRLMODE_UNSPEC,
+	IFLA_CAN_CTRLMODE_SUPPORTED,	/* u32 */
+
+	/* add new constants above here */
+	__IFLA_CAN_CTRLMODE,
+	IFLA_CAN_CTRLMODE_MAX = __IFLA_CAN_CTRLMODE - 1
+};
 
 /* u16 termination range: 1..65535 Ohms */
 #define CAN_TERMINATION_DISABLED 0
diff --git a/src/basic/linux/cfm_bridge.h b/src/basic/linux/cfm_bridge.h
new file mode 100644
index 0000000..3c1cbd1
--- /dev/null
+++ b/src/basic/linux/cfm_bridge.h
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+
+#ifndef _UAPI_LINUX_CFM_BRIDGE_H_
+#define _UAPI_LINUX_CFM_BRIDGE_H_
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+#define ETHER_HEADER_LENGTH		(6+6+4+2)
+#define CFM_MAID_LENGTH			48
+#define CFM_CCM_PDU_LENGTH		75
+#define CFM_PORT_STATUS_TLV_LENGTH	4
+#define CFM_IF_STATUS_TLV_LENGTH	4
+#define CFM_IF_STATUS_TLV_TYPE		4
+#define CFM_PORT_STATUS_TLV_TYPE	2
+#define CFM_ENDE_TLV_TYPE		0
+#define CFM_CCM_MAX_FRAME_LENGTH	(ETHER_HEADER_LENGTH+\
+					 CFM_CCM_PDU_LENGTH+\
+					 CFM_PORT_STATUS_TLV_LENGTH+\
+					 CFM_IF_STATUS_TLV_LENGTH)
+#define CFM_FRAME_PRIO			7
+#define CFM_CCM_TLV_OFFSET		70
+#define CFM_CCM_PDU_MAID_OFFSET		10
+#define CFM_CCM_PDU_MEPID_OFFSET	8
+#define CFM_CCM_PDU_SEQNR_OFFSET	4
+#define CFM_CCM_PDU_TLV_OFFSET		74
+#define CFM_CCM_ITU_RESERVED_SIZE	16
+
+struct br_cfm_common_hdr {
+	__u8 mdlevel_version;
+	__u8 opcode;
+	__u8 flags;
+	__u8 tlv_offset;
+};
+
+enum br_cfm_opcodes {
+	BR_CFM_OPCODE_CCM = 0x1,
+};
+
+/* MEP domain */
+enum br_cfm_domain {
+	BR_CFM_PORT,
+	BR_CFM_VLAN,
+};
+
+/* MEP direction */
+enum br_cfm_mep_direction {
+	BR_CFM_MEP_DIRECTION_DOWN,
+	BR_CFM_MEP_DIRECTION_UP,
+};
+
+/* CCM interval supported. */
+enum br_cfm_ccm_interval {
+	BR_CFM_CCM_INTERVAL_NONE,
+	BR_CFM_CCM_INTERVAL_3_3_MS,
+	BR_CFM_CCM_INTERVAL_10_MS,
+	BR_CFM_CCM_INTERVAL_100_MS,
+	BR_CFM_CCM_INTERVAL_1_SEC,
+	BR_CFM_CCM_INTERVAL_10_SEC,
+	BR_CFM_CCM_INTERVAL_1_MIN,
+	BR_CFM_CCM_INTERVAL_10_MIN,
+};
+
+#endif
diff --git a/src/basic/linux/genetlink.h b/src/basic/linux/genetlink.h
new file mode 100644
index 0000000..ddba3ca
--- /dev/null
+++ b/src/basic/linux/genetlink.h
@@ -0,0 +1,103 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _UAPI__LINUX_GENERIC_NETLINK_H
+#define _UAPI__LINUX_GENERIC_NETLINK_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+#define GENL_NAMSIZ	16	/* length of family name */
+
+#define GENL_MIN_ID	NLMSG_MIN_TYPE
+#define GENL_MAX_ID	1023
+
+struct genlmsghdr {
+	__u8	cmd;
+	__u8	version;
+	__u16	reserved;
+};
+
+#define GENL_HDRLEN	NLMSG_ALIGN(sizeof(struct genlmsghdr))
+
+#define GENL_ADMIN_PERM		0x01
+#define GENL_CMD_CAP_DO		0x02
+#define GENL_CMD_CAP_DUMP	0x04
+#define GENL_CMD_CAP_HASPOL	0x08
+#define GENL_UNS_ADMIN_PERM	0x10
+
+/*
+ * List of reserved static generic netlink identifiers:
+ */
+#define GENL_ID_CTRL		NLMSG_MIN_TYPE
+#define GENL_ID_VFS_DQUOT	(NLMSG_MIN_TYPE + 1)
+#define GENL_ID_PMCRAID		(NLMSG_MIN_TYPE + 2)
+/* must be last reserved + 1 */
+#define GENL_START_ALLOC	(NLMSG_MIN_TYPE + 3)
+
+/**************************************************************************
+ * Controller
+ **************************************************************************/
+
+enum {
+	CTRL_CMD_UNSPEC,
+	CTRL_CMD_NEWFAMILY,
+	CTRL_CMD_DELFAMILY,
+	CTRL_CMD_GETFAMILY,
+	CTRL_CMD_NEWOPS,
+	CTRL_CMD_DELOPS,
+	CTRL_CMD_GETOPS,
+	CTRL_CMD_NEWMCAST_GRP,
+	CTRL_CMD_DELMCAST_GRP,
+	CTRL_CMD_GETMCAST_GRP, /* unused */
+	CTRL_CMD_GETPOLICY,
+	__CTRL_CMD_MAX,
+};
+
+#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1)
+
+enum {
+	CTRL_ATTR_UNSPEC,
+	CTRL_ATTR_FAMILY_ID,
+	CTRL_ATTR_FAMILY_NAME,
+	CTRL_ATTR_VERSION,
+	CTRL_ATTR_HDRSIZE,
+	CTRL_ATTR_MAXATTR,
+	CTRL_ATTR_OPS,
+	CTRL_ATTR_MCAST_GROUPS,
+	CTRL_ATTR_POLICY,
+	CTRL_ATTR_OP_POLICY,
+	CTRL_ATTR_OP,
+	__CTRL_ATTR_MAX,
+};
+
+#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
+
+enum {
+	CTRL_ATTR_OP_UNSPEC,
+	CTRL_ATTR_OP_ID,
+	CTRL_ATTR_OP_FLAGS,
+	__CTRL_ATTR_OP_MAX,
+};
+
+#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
+
+enum {
+	CTRL_ATTR_MCAST_GRP_UNSPEC,
+	CTRL_ATTR_MCAST_GRP_NAME,
+	CTRL_ATTR_MCAST_GRP_ID,
+	__CTRL_ATTR_MCAST_GRP_MAX,
+};
+
+#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
+
+enum {
+	CTRL_ATTR_POLICY_UNSPEC,
+	CTRL_ATTR_POLICY_DO,
+	CTRL_ATTR_POLICY_DUMP,
+
+	__CTRL_ATTR_POLICY_DUMP_MAX,
+	CTRL_ATTR_POLICY_DUMP_MAX = __CTRL_ATTR_POLICY_DUMP_MAX - 1
+};
+
+#define CTRL_ATTR_POLICY_MAX (__CTRL_ATTR_POLICY_DUMP_MAX - 1)
+
+#endif /* _UAPI__LINUX_GENERIC_NETLINK_H */
diff --git a/src/basic/linux/if_addr.h b/src/basic/linux/if_addr.h
index dfcf3ce..1c392dd 100644
--- a/src/basic/linux/if_addr.h
+++ b/src/basic/linux/if_addr.h
@@ -33,8 +33,9 @@
 	IFA_CACHEINFO,
 	IFA_MULTICAST,
 	IFA_FLAGS,
-	IFA_RT_PRIORITY,  /* u32, priority/metric for prefix route */
+	IFA_RT_PRIORITY,	/* u32, priority/metric for prefix route */
 	IFA_TARGET_NETNSID,
+	IFA_PROTO,		/* u8, address protocol */
 	__IFA_MAX,
 };
 
@@ -69,4 +70,10 @@
 #define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
 #endif
 
+/* ifa_proto */
+#define IFAPROT_UNSPEC		0
+#define IFAPROT_KERNEL_LO	1	/* loopback */
+#define IFAPROT_KERNEL_RA	2	/* set by kernel from router announcement */
+#define IFAPROT_KERNEL_LL	3	/* link-local set by kernel */
+
 #endif
diff --git a/src/basic/linux/if_bonding.h b/src/basic/linux/if_bonding.h
index 45f3750..d174914 100644
--- a/src/basic/linux/if_bonding.h
+++ b/src/basic/linux/if_bonding.h
@@ -94,6 +94,7 @@
 #define BOND_XMIT_POLICY_LAYER23	2 /* layer 2+3 (IP ^ MAC) */
 #define BOND_XMIT_POLICY_ENCAP23	3 /* encapsulated layer 2+3 */
 #define BOND_XMIT_POLICY_ENCAP34	4 /* encapsulated layer 3+4 */
+#define BOND_XMIT_POLICY_VLAN_SRCMAC	5 /* vlan + source MAC */
 
 /* 802.3ad port state definitions (43.4.2.2 in the 802.3ad standard) */
 #define LACP_STATE_LACP_ACTIVITY   0x1
@@ -152,14 +153,3 @@
 #define BOND_3AD_STAT_MAX (__BOND_3AD_STAT_MAX - 1)
 
 #endif /* _LINUX_IF_BONDING_H */
-
-/*
- * Local variables:
- *  version-control: t
- *  kept-new-versions: 5
- *  c-indent-level: 8
- *  c-basic-offset: 8
- *  tab-width: 8
- * End:
- */
-
diff --git a/src/basic/linux/if_bridge.h b/src/basic/linux/if_bridge.h
index 4c68768..d9de241 100644
--- a/src/basic/linux/if_bridge.h
+++ b/src/basic/linux/if_bridge.h
@@ -121,6 +121,8 @@
 	IFLA_BRIDGE_VLAN_INFO,
 	IFLA_BRIDGE_VLAN_TUNNEL_INFO,
 	IFLA_BRIDGE_MRP,
+	IFLA_BRIDGE_CFM,
+	IFLA_BRIDGE_MST,
 	__IFLA_BRIDGE_MAX,
 };
 #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
@@ -328,6 +330,145 @@
 	__u16 in_id;
 };
 
+enum {
+	IFLA_BRIDGE_CFM_UNSPEC,
+	IFLA_BRIDGE_CFM_MEP_CREATE,
+	IFLA_BRIDGE_CFM_MEP_DELETE,
+	IFLA_BRIDGE_CFM_MEP_CONFIG,
+	IFLA_BRIDGE_CFM_CC_CONFIG,
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_ADD,
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_REMOVE,
+	IFLA_BRIDGE_CFM_CC_RDI,
+	IFLA_BRIDGE_CFM_CC_CCM_TX,
+	IFLA_BRIDGE_CFM_MEP_CREATE_INFO,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_INFO,
+	IFLA_BRIDGE_CFM_CC_CONFIG_INFO,
+	IFLA_BRIDGE_CFM_CC_RDI_INFO,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_INFO,
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_INFO,
+	IFLA_BRIDGE_CFM_MEP_STATUS_INFO,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_INFO,
+	__IFLA_BRIDGE_CFM_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_MAX (__IFLA_BRIDGE_CFM_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_MEP_CREATE_UNSPEC,
+	IFLA_BRIDGE_CFM_MEP_CREATE_INSTANCE,
+	IFLA_BRIDGE_CFM_MEP_CREATE_DOMAIN,
+	IFLA_BRIDGE_CFM_MEP_CREATE_DIRECTION,
+	IFLA_BRIDGE_CFM_MEP_CREATE_IFINDEX,
+	__IFLA_BRIDGE_CFM_MEP_CREATE_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_MEP_CREATE_MAX (__IFLA_BRIDGE_CFM_MEP_CREATE_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_MEP_DELETE_UNSPEC,
+	IFLA_BRIDGE_CFM_MEP_DELETE_INSTANCE,
+	__IFLA_BRIDGE_CFM_MEP_DELETE_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_MEP_DELETE_MAX (__IFLA_BRIDGE_CFM_MEP_DELETE_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_MEP_CONFIG_UNSPEC,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_INSTANCE,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_UNICAST_MAC,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_MDLEVEL,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_MEPID,
+	__IFLA_BRIDGE_CFM_MEP_CONFIG_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_MEP_CONFIG_MAX (__IFLA_BRIDGE_CFM_MEP_CONFIG_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_CC_CONFIG_UNSPEC,
+	IFLA_BRIDGE_CFM_CC_CONFIG_INSTANCE,
+	IFLA_BRIDGE_CFM_CC_CONFIG_ENABLE,
+	IFLA_BRIDGE_CFM_CC_CONFIG_EXP_INTERVAL,
+	IFLA_BRIDGE_CFM_CC_CONFIG_EXP_MAID,
+	__IFLA_BRIDGE_CFM_CC_CONFIG_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_CC_CONFIG_MAX (__IFLA_BRIDGE_CFM_CC_CONFIG_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_UNSPEC,
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_INSTANCE,
+	IFLA_BRIDGE_CFM_CC_PEER_MEPID,
+	__IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX (__IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_CC_RDI_UNSPEC,
+	IFLA_BRIDGE_CFM_CC_RDI_INSTANCE,
+	IFLA_BRIDGE_CFM_CC_RDI_RDI,
+	__IFLA_BRIDGE_CFM_CC_RDI_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_CC_RDI_MAX (__IFLA_BRIDGE_CFM_CC_RDI_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_CC_CCM_TX_UNSPEC,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_INSTANCE,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_DMAC,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_SEQ_NO_UPDATE,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_PERIOD,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV_VALUE,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV_VALUE,
+	__IFLA_BRIDGE_CFM_CC_CCM_TX_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_CC_CCM_TX_MAX (__IFLA_BRIDGE_CFM_CC_CCM_TX_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_MEP_STATUS_UNSPEC,
+	IFLA_BRIDGE_CFM_MEP_STATUS_INSTANCE,
+	IFLA_BRIDGE_CFM_MEP_STATUS_OPCODE_UNEXP_SEEN,
+	IFLA_BRIDGE_CFM_MEP_STATUS_VERSION_UNEXP_SEEN,
+	IFLA_BRIDGE_CFM_MEP_STATUS_RX_LEVEL_LOW_SEEN,
+	__IFLA_BRIDGE_CFM_MEP_STATUS_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_MEP_STATUS_MAX (__IFLA_BRIDGE_CFM_MEP_STATUS_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_UNSPEC,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_INSTANCE,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_PEER_MEPID,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_CCM_DEFECT,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_RDI,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_PORT_TLV_VALUE,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_IF_TLV_VALUE,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEEN,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_TLV_SEEN,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEQ_UNEXP_SEEN,
+	__IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX,
+};
+
+#define IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX (__IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_MST_UNSPEC,
+	IFLA_BRIDGE_MST_ENTRY,
+	__IFLA_BRIDGE_MST_MAX,
+};
+#define IFLA_BRIDGE_MST_MAX (__IFLA_BRIDGE_MST_MAX - 1)
+
+enum {
+	IFLA_BRIDGE_MST_ENTRY_UNSPEC,
+	IFLA_BRIDGE_MST_ENTRY_MSTI,
+	IFLA_BRIDGE_MST_ENTRY_STATE,
+	__IFLA_BRIDGE_MST_ENTRY_MAX,
+};
+#define IFLA_BRIDGE_MST_ENTRY_MAX (__IFLA_BRIDGE_MST_ENTRY_MAX - 1)
+
 struct bridge_stp_xstats {
 	__u64 transition_blk;
 	__u64 transition_fwd;
@@ -354,16 +495,22 @@
 
 /* flags used in BRIDGE_VLANDB_DUMP_FLAGS attribute to affect dumps */
 #define BRIDGE_VLANDB_DUMPF_STATS	(1 << 0) /* Include stats in the dump */
+#define BRIDGE_VLANDB_DUMPF_GLOBAL	(1 << 1) /* Dump global vlan options only */
 
 /* Bridge vlan RTM attributes
  * [BRIDGE_VLANDB_ENTRY] = {
  *     [BRIDGE_VLANDB_ENTRY_INFO]
  *     ...
  * }
+ * [BRIDGE_VLANDB_GLOBAL_OPTIONS] = {
+ *     [BRIDGE_VLANDB_GOPTS_ID]
+ *     ...
+ * }
  */
 enum {
 	BRIDGE_VLANDB_UNSPEC,
 	BRIDGE_VLANDB_ENTRY,
+	BRIDGE_VLANDB_GLOBAL_OPTIONS,
 	__BRIDGE_VLANDB_MAX,
 };
 #define BRIDGE_VLANDB_MAX (__BRIDGE_VLANDB_MAX - 1)
@@ -375,6 +522,7 @@
 	BRIDGE_VLANDB_ENTRY_STATE,
 	BRIDGE_VLANDB_ENTRY_TUNNEL_INFO,
 	BRIDGE_VLANDB_ENTRY_STATS,
+	BRIDGE_VLANDB_ENTRY_MCAST_ROUTER,
 	__BRIDGE_VLANDB_ENTRY_MAX,
 };
 #define BRIDGE_VLANDB_ENTRY_MAX (__BRIDGE_VLANDB_ENTRY_MAX - 1)
@@ -413,6 +561,30 @@
 };
 #define BRIDGE_VLANDB_STATS_MAX (__BRIDGE_VLANDB_STATS_MAX - 1)
 
+enum {
+	BRIDGE_VLANDB_GOPTS_UNSPEC,
+	BRIDGE_VLANDB_GOPTS_ID,
+	BRIDGE_VLANDB_GOPTS_RANGE,
+	BRIDGE_VLANDB_GOPTS_MCAST_SNOOPING,
+	BRIDGE_VLANDB_GOPTS_MCAST_IGMP_VERSION,
+	BRIDGE_VLANDB_GOPTS_MCAST_MLD_VERSION,
+	BRIDGE_VLANDB_GOPTS_MCAST_LAST_MEMBER_CNT,
+	BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_CNT,
+	BRIDGE_VLANDB_GOPTS_MCAST_LAST_MEMBER_INTVL,
+	BRIDGE_VLANDB_GOPTS_PAD,
+	BRIDGE_VLANDB_GOPTS_MCAST_MEMBERSHIP_INTVL,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_INTVL,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERY_INTVL,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERY_RESPONSE_INTVL,
+	BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_INTVL,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER,
+	BRIDGE_VLANDB_GOPTS_MCAST_ROUTER_PORTS,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_STATE,
+	BRIDGE_VLANDB_GOPTS_MSTI,
+	__BRIDGE_VLANDB_GOPTS_MAX
+};
+#define BRIDGE_VLANDB_GOPTS_MAX (__BRIDGE_VLANDB_GOPTS_MAX - 1)
+
 /* Bridge multicast database attributes
  * [MDBA_MDB] = {
  *     [MDBA_MDB_ENTRY] = {
@@ -502,6 +674,9 @@
 	MDBA_ROUTER_PATTR_UNSPEC,
 	MDBA_ROUTER_PATTR_TIMER,
 	MDBA_ROUTER_PATTR_TYPE,
+	MDBA_ROUTER_PATTR_INET_TIMER,
+	MDBA_ROUTER_PATTR_INET6_TIMER,
+	MDBA_ROUTER_PATTR_VID,
 	__MDBA_ROUTER_PATTR_MAX
 };
 #define MDBA_ROUTER_PATTR_MAX (__MDBA_ROUTER_PATTR_MAX - 1)
@@ -526,6 +701,7 @@
 		union {
 			__be32	ip4;
 			struct in6_addr ip6;
+			unsigned char mac_addr[ETH_ALEN];
 		} u;
 		__be16		proto;
 	} addr;
@@ -547,10 +723,31 @@
 enum {
 	MDBE_ATTR_UNSPEC,
 	MDBE_ATTR_SOURCE,
+	MDBE_ATTR_SRC_LIST,
+	MDBE_ATTR_GROUP_MODE,
+	MDBE_ATTR_RTPROT,
 	__MDBE_ATTR_MAX,
 };
 #define MDBE_ATTR_MAX (__MDBE_ATTR_MAX - 1)
 
+/* per mdb entry source */
+enum {
+	MDBE_SRC_LIST_UNSPEC,
+	MDBE_SRC_LIST_ENTRY,
+	__MDBE_SRC_LIST_MAX,
+};
+#define MDBE_SRC_LIST_MAX (__MDBE_SRC_LIST_MAX - 1)
+
+/* per mdb entry per source attributes
+ * these are embedded in MDBE_SRC_LIST_ENTRY
+ */
+enum {
+	MDBE_SRCATTR_UNSPEC,
+	MDBE_SRCATTR_ADDRESS,
+	__MDBE_SRCATTR_MAX,
+};
+#define MDBE_SRCATTR_MAX (__MDBE_SRCATTR_MAX - 1)
+
 /* Embedded inside LINK_XSTATS_TYPE_BRIDGE */
 enum {
 	BRIDGE_XSTATS_UNSPEC,
@@ -592,12 +789,15 @@
 
 /* bridge boolean options
  * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets
+ * BR_BOOLOPT_MCAST_VLAN_SNOOPING - control vlan multicast snooping
  *
  * IMPORTANT: if adding a new option do not forget to handle
  *            it in br_boolopt_toggle/get and bridge sysfs
  */
 enum br_boolopt_id {
 	BR_BOOLOPT_NO_LL_LEARN,
+	BR_BOOLOPT_MCAST_VLAN_SNOOPING,
+	BR_BOOLOPT_MST_ENABLE,
 	BR_BOOLOPT_MAX
 };
 
@@ -610,4 +810,17 @@
 	__u32 optval;
 	__u32 optmask;
 };
+
+enum {
+	BRIDGE_QUERIER_UNSPEC,
+	BRIDGE_QUERIER_IP_ADDRESS,
+	BRIDGE_QUERIER_IP_PORT,
+	BRIDGE_QUERIER_IP_OTHER_TIMER,
+	BRIDGE_QUERIER_PAD,
+	BRIDGE_QUERIER_IPV6_ADDRESS,
+	BRIDGE_QUERIER_IPV6_PORT,
+	BRIDGE_QUERIER_IPV6_OTHER_TIMER,
+	__BRIDGE_QUERIER_MAX
+};
+#define BRIDGE_QUERIER_MAX (__BRIDGE_QUERIER_MAX - 1)
 #endif /* _UAPI_LINUX_IF_BRIDGE_H */
diff --git a/src/basic/linux/if_ether.h b/src/basic/linux/if_ether.h
index d6de2b1..69e0457 100644
--- a/src/basic/linux/if_ether.h
+++ b/src/basic/linux/if_ether.h
@@ -86,7 +86,10 @@
 					 * over Ethernet
 					 */
 #define ETH_P_PAE	0x888E		/* Port Access Entity (IEEE 802.1X) */
+#define ETH_P_PROFINET	0x8892		/* PROFINET			*/
+#define ETH_P_REALTEK	0x8899          /* Multiple proprietary protocols */
 #define ETH_P_AOE	0x88A2		/* ATA over Ethernet		*/
+#define ETH_P_ETHERCAT	0x88A4		/* EtherCAT			*/
 #define ETH_P_8021AD	0x88A8          /* 802.1ad Service VLAN		*/
 #define ETH_P_802_EX1	0x88B5		/* 802.1 Local Experimental 1.  */
 #define ETH_P_PREAUTH	0x88C7		/* 802.11 Preauthentication */
@@ -99,6 +102,7 @@
 #define ETH_P_1588	0x88F7		/* IEEE 1588 Timesync */
 #define ETH_P_NCSI	0x88F8		/* NCSI protocol		*/
 #define ETH_P_PRP	0x88FB		/* IEC 62439-3 PRP/HSRv0	*/
+#define ETH_P_CFM	0x8902		/* Connectivity Fault Management */
 #define ETH_P_FCOE	0x8906		/* Fibre Channel over Ethernet  */
 #define ETH_P_IBOE	0x8915		/* Infiniband over Ethernet	*/
 #define ETH_P_TDLS	0x890D          /* TDLS */
@@ -112,10 +116,11 @@
 #define ETH_P_QINQ3	0x9300		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
 #define ETH_P_EDSA	0xDADA		/* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
 #define ETH_P_DSA_8021Q	0xDADB		/* Fake VLAN Header for DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_DSA_A5PSW	0xE001		/* A5PSW Tag Value [ NOT AN OFFICIALLY REGISTERED ID ] */
 #define ETH_P_IFE	0xED3E		/* ForCES inter-FE LFB type */
 #define ETH_P_AF_IUCV   0xFBFB		/* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */
 
-#define ETH_P_802_3_MIN	0x0600		/* If the value in the ethernet type is less than this value
+#define ETH_P_802_3_MIN	0x0600		/* If the value in the ethernet type is more than this value
 					 * then the frame is Ethernet II. Else it is 802.3 */
 
 /*
@@ -133,6 +138,7 @@
 #define ETH_P_LOCALTALK 0x0009		/* Localtalk pseudo type 	*/
 #define ETH_P_CAN	0x000C		/* CAN: Controller Area Network */
 #define ETH_P_CANFD	0x000D		/* CANFD: CAN flexible data rate*/
+#define ETH_P_CANXL	0x000E		/* CANXL: eXtended frame Length */
 #define ETH_P_PPPTALK	0x0010		/* Dummy type for Atalk over PPP*/
 #define ETH_P_TR_802_2	0x0011		/* 802.2 frames 		*/
 #define ETH_P_MOBITEX	0x0015		/* Mobitex (kaz@cafe.net)	*/
@@ -150,6 +156,9 @@
 #define ETH_P_MAP	0x00F9		/* Qualcomm multiplexing and
 					 * aggregation protocol
 					 */
+#define ETH_P_MCTP	0x00FA		/* Management component transport
+					 * protocol packets
+					 */
 
 /*
  *	This is an Ethernet frame header.
diff --git a/src/basic/linux/if_link.h b/src/basic/linux/if_link.h
index 82708c6..1021a7e 100644
--- a/src/basic/linux/if_link.h
+++ b/src/basic/linux/if_link.h
@@ -211,6 +211,9 @@
  * @rx_nohandler: Number of packets received on the interface
  *   but dropped by the networking stack because the device is
  *   not designated to receive packets (e.g. backup link in a bond).
+ *
+ * @rx_otherhost_dropped: Number of packets dropped due to mismatch
+ *   in destination MAC address.
  */
 struct rtnl_link_stats64 {
 	__u64	rx_packets;
@@ -243,6 +246,23 @@
 	__u64	rx_compressed;
 	__u64	tx_compressed;
 	__u64	rx_nohandler;
+
+	__u64	rx_otherhost_dropped;
+};
+
+/* Subset of link stats useful for in-HW collection. Meaning of the fields is as
+ * for struct rtnl_link_stats64.
+ */
+struct rtnl_hw_stats64 {
+	__u64	rx_packets;
+	__u64	tx_packets;
+	__u64	rx_bytes;
+	__u64	tx_bytes;
+	__u64	rx_errors;
+	__u64	tx_errors;
+	__u64	rx_dropped;
+	__u64	tx_dropped;
+	__u64	multicast;
 };
 
 /* The struct should be in sync with struct ifmap */
@@ -341,6 +361,19 @@
 	IFLA_ALT_IFNAME, /* Alternative ifname */
 	IFLA_PERM_ADDRESS,
 	IFLA_PROTO_DOWN_REASON,
+
+	/* device (sysfs) name as parent, used instead
+	 * of IFLA_LINK where there's no parent netdev
+	 */
+	IFLA_PARENT_DEV_NAME,
+	IFLA_PARENT_DEV_BUS_NAME,
+	IFLA_GRO_MAX_SIZE,
+	IFLA_TSO_MAX_SIZE,
+	IFLA_TSO_MAX_SEGS,
+	IFLA_ALLMULTI,		/* Allmulti count: > 0 means acts ALLMULTI */
+
+	IFLA_DEVLINK_PORT,
+
 	__IFLA_MAX
 };
 
@@ -410,6 +443,7 @@
 	IFLA_INET6_ICMP6STATS,	/* statistics (icmpv6)		*/
 	IFLA_INET6_TOKEN,	/* device token			*/
 	IFLA_INET6_ADDR_GEN_MODE, /* implicit address generator mode */
+	IFLA_INET6_RA_MTU,	/* mtu carried in the RA message */
 	__IFLA_INET6_MAX
 };
 
@@ -472,6 +506,7 @@
 	IFLA_BR_MCAST_MLD_VERSION,
 	IFLA_BR_VLAN_STATS_PER_PORT,
 	IFLA_BR_MULTI_BOOLOPT,
+	IFLA_BR_MCAST_QUERIER_STATE,
 	__IFLA_BR_MAX,
 };
 
@@ -525,6 +560,10 @@
 	IFLA_BRPORT_BACKUP_PORT,
 	IFLA_BRPORT_MRP_RING_OPEN,
 	IFLA_BRPORT_MRP_IN_OPEN,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT,
+	IFLA_BRPORT_LOCKED,
+	IFLA_BRPORT_MAB,
 	__IFLA_BRPORT_MAX
 };
 #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
@@ -612,6 +651,7 @@
 };
 
 #define MACVLAN_FLAG_NOPROMISC	1
+#define MACVLAN_FLAG_NODST	2 /* skip dst macvlan if matching src macvlan */
 
 /* VRF section */
 enum {
@@ -658,6 +698,7 @@
 	IFLA_XFRM_UNSPEC,
 	IFLA_XFRM_LINK,
 	IFLA_XFRM_IF_ID,
+	IFLA_XFRM_COLLECT_METADATA,
 	__IFLA_XFRM_MAX
 };
 
@@ -699,7 +740,55 @@
 #define IPVLAN_F_PRIVATE	0x01
 #define IPVLAN_F_VEPA		0x02
 
+/* Tunnel RTM header */
+struct tunnel_msg {
+	__u8 family;
+	__u8 flags;
+	__u16 reserved2;
+	__u32 ifindex;
+};
+
 /* VXLAN section */
+
+/* include statistics in the dump */
+#define TUNNEL_MSG_FLAG_STATS	0x01
+
+#define TUNNEL_MSG_VALID_USER_FLAGS TUNNEL_MSG_FLAG_STATS
+
+/* Embedded inside VXLAN_VNIFILTER_ENTRY_STATS */
+enum {
+	VNIFILTER_ENTRY_STATS_UNSPEC,
+	VNIFILTER_ENTRY_STATS_RX_BYTES,
+	VNIFILTER_ENTRY_STATS_RX_PKTS,
+	VNIFILTER_ENTRY_STATS_RX_DROPS,
+	VNIFILTER_ENTRY_STATS_RX_ERRORS,
+	VNIFILTER_ENTRY_STATS_TX_BYTES,
+	VNIFILTER_ENTRY_STATS_TX_PKTS,
+	VNIFILTER_ENTRY_STATS_TX_DROPS,
+	VNIFILTER_ENTRY_STATS_TX_ERRORS,
+	VNIFILTER_ENTRY_STATS_PAD,
+	__VNIFILTER_ENTRY_STATS_MAX
+};
+#define VNIFILTER_ENTRY_STATS_MAX (__VNIFILTER_ENTRY_STATS_MAX - 1)
+
+enum {
+	VXLAN_VNIFILTER_ENTRY_UNSPEC,
+	VXLAN_VNIFILTER_ENTRY_START,
+	VXLAN_VNIFILTER_ENTRY_END,
+	VXLAN_VNIFILTER_ENTRY_GROUP,
+	VXLAN_VNIFILTER_ENTRY_GROUP6,
+	VXLAN_VNIFILTER_ENTRY_STATS,
+	__VXLAN_VNIFILTER_ENTRY_MAX
+};
+#define VXLAN_VNIFILTER_ENTRY_MAX	(__VXLAN_VNIFILTER_ENTRY_MAX - 1)
+
+enum {
+	VXLAN_VNIFILTER_UNSPEC,
+	VXLAN_VNIFILTER_ENTRY,
+	__VXLAN_VNIFILTER_MAX
+};
+#define VXLAN_VNIFILTER_MAX	(__VXLAN_VNIFILTER_MAX - 1)
+
 enum {
 	IFLA_VXLAN_UNSPEC,
 	IFLA_VXLAN_ID,
@@ -731,6 +820,7 @@
 	IFLA_VXLAN_GPE,
 	IFLA_VXLAN_TTL_INHERIT,
 	IFLA_VXLAN_DF,
+	IFLA_VXLAN_VNIFILTER, /* only applicable with COLLECT_METADATA mode */
 	__IFLA_VXLAN_MAX
 };
 #define IFLA_VXLAN_MAX	(__IFLA_VXLAN_MAX - 1)
@@ -764,6 +854,7 @@
 	IFLA_GENEVE_LABEL,
 	IFLA_GENEVE_TTL_INHERIT,
 	IFLA_GENEVE_DF,
+	IFLA_GENEVE_INNER_PROTO_INHERIT,
 	__IFLA_GENEVE_MAX
 };
 #define IFLA_GENEVE_MAX	(__IFLA_GENEVE_MAX - 1)
@@ -809,6 +900,8 @@
 	IFLA_GTP_FD1,
 	IFLA_GTP_PDP_HASHSIZE,
 	IFLA_GTP_ROLE,
+	IFLA_GTP_CREATE_SOCKETS,
+	IFLA_GTP_RESTART_COUNT,
 	__IFLA_GTP_MAX,
 };
 #define IFLA_GTP_MAX (__IFLA_GTP_MAX - 1)
@@ -845,6 +938,9 @@
 	IFLA_BOND_AD_ACTOR_SYSTEM,
 	IFLA_BOND_TLB_DYNAMIC_LB,
 	IFLA_BOND_PEER_NOTIF_DELAY,
+	IFLA_BOND_AD_LACP_ACTIVE,
+	IFLA_BOND_MISSED_MAX,
+	IFLA_BOND_NS_IP6_TARGET,
 	__IFLA_BOND_MAX,
 };
 
@@ -872,6 +968,7 @@
 	IFLA_BOND_SLAVE_AD_AGGREGATOR_ID,
 	IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE,
 	IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE,
+	IFLA_BOND_SLAVE_PRIO,
 	__IFLA_BOND_SLAVE_MAX,
 };
 
@@ -1141,6 +1238,17 @@
 
 #define IFLA_STATS_FILTER_BIT(ATTR)	(1 << (ATTR - 1))
 
+enum {
+	IFLA_STATS_GETSET_UNSPEC,
+	IFLA_STATS_GET_FILTERS, /* Nest of IFLA_STATS_LINK_xxx, each a u32 with
+				 * a filter mask for the corresponding group.
+				 */
+	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS, /* 0 or 1 as u8 */
+	__IFLA_STATS_GETSET_MAX,
+};
+
+#define IFLA_STATS_GETSET_MAX (__IFLA_STATS_GETSET_MAX - 1)
+
 /* These are embedded into IFLA_STATS_LINK_XSTATS:
  * [IFLA_STATS_LINK_XSTATS]
  * -> [LINK_XSTATS_TYPE_xxx]
@@ -1158,10 +1266,21 @@
 enum {
 	IFLA_OFFLOAD_XSTATS_UNSPEC,
 	IFLA_OFFLOAD_XSTATS_CPU_HIT, /* struct rtnl_link_stats64 */
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO,	/* HW stats info. A nest */
+	IFLA_OFFLOAD_XSTATS_L3_STATS,	/* struct rtnl_hw_stats64 */
 	__IFLA_OFFLOAD_XSTATS_MAX
 };
 #define IFLA_OFFLOAD_XSTATS_MAX (__IFLA_OFFLOAD_XSTATS_MAX - 1)
 
+enum {
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST,		/* u8 */
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED,		/* u8 */
+	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX,
+};
+#define IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX \
+	(__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX - 1)
+
 /* XDP section */
 
 #define XDP_FLAGS_UPDATE_IF_NOEXIST	(1U << 0)
@@ -1233,6 +1352,8 @@
 #define RMNET_FLAGS_INGRESS_MAP_COMMANDS          (1U << 1)
 #define RMNET_FLAGS_INGRESS_MAP_CKSUMV4           (1U << 2)
 #define RMNET_FLAGS_EGRESS_MAP_CKSUMV4            (1U << 3)
+#define RMNET_FLAGS_INGRESS_MAP_CKSUMV5           (1U << 4)
+#define RMNET_FLAGS_EGRESS_MAP_CKSUMV5            (1U << 5)
 
 enum {
 	IFLA_RMNET_UNSPEC,
@@ -1248,4 +1369,24 @@
 	__u32	mask;
 };
 
+/* MCTP section */
+
+enum {
+	IFLA_MCTP_UNSPEC,
+	IFLA_MCTP_NET,
+	__IFLA_MCTP_MAX,
+};
+
+#define IFLA_MCTP_MAX (__IFLA_MCTP_MAX - 1)
+
+/* DSA section */
+
+enum {
+	IFLA_DSA_UNSPEC,
+	IFLA_DSA_MASTER,
+	__IFLA_DSA_MAX,
+};
+
+#define IFLA_DSA_MAX	(__IFLA_DSA_MAX - 1)
+
 #endif /* _UAPI_LINUX_IF_LINK_H */
diff --git a/src/basic/linux/if_macsec.h b/src/basic/linux/if_macsec.h
index 3af2aa0..d5b6d1f 100644
--- a/src/basic/linux/if_macsec.h
+++ b/src/basic/linux/if_macsec.h
@@ -22,6 +22,8 @@
 
 #define MACSEC_KEYID_LEN 16
 
+#define MACSEC_SALT_LEN 12
+
 /* cipher IDs as per IEEE802.1AE-2018 (Table 14-1) */
 #define MACSEC_CIPHER_ID_GCM_AES_128 0x0080C20001000001ULL
 #define MACSEC_CIPHER_ID_GCM_AES_256 0x0080C20001000002ULL
diff --git a/src/basic/linux/if_tun.h b/src/basic/linux/if_tun.h
index 454ae31..287cdc8 100644
--- a/src/basic/linux/if_tun.h
+++ b/src/basic/linux/if_tun.h
@@ -67,6 +67,8 @@
 #define IFF_TAP		0x0002
 #define IFF_NAPI	0x0010
 #define IFF_NAPI_FRAGS	0x0020
+/* Used in TUNSETIFF to bring up tun/tap without carrier */
+#define IFF_NO_CARRIER	0x0040
 #define IFF_NO_PI	0x1000
 /* This flag has no real effect */
 #define IFF_ONE_QUEUE	0x2000
@@ -88,6 +90,8 @@
 #define TUN_F_TSO6	0x04	/* I can handle TSO for IPv6 packets */
 #define TUN_F_TSO_ECN	0x08	/* I can handle TSO with ECN bits. */
 #define TUN_F_UFO	0x10	/* I can handle UFO packets */
+#define TUN_F_USO4	0x20	/* I can handle USO for IPv4 packets */
+#define TUN_F_USO6	0x40	/* I can handle USO for IPv6 packets */
 
 /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */
 #define TUN_PKT_STRIP	0x0001
@@ -108,7 +112,7 @@
 struct tun_filter {
 	__u16  flags; /* TUN_FLT_ flags see above */
 	__u16  count; /* Number of addresses */
-	__u8   addr[0][ETH_ALEN];
+	__u8   addr[][ETH_ALEN];
 };
 
 #endif /* _UAPI__IF_TUN_H */
diff --git a/src/basic/linux/if_tunnel.h b/src/basic/linux/if_tunnel.h
index 7d91055..1021196 100644
--- a/src/basic/linux/if_tunnel.h
+++ b/src/basic/linux/if_tunnel.h
@@ -176,8 +176,10 @@
 #define TUNNEL_VXLAN_OPT	__cpu_to_be16(0x1000)
 #define TUNNEL_NOCACHE		__cpu_to_be16(0x2000)
 #define TUNNEL_ERSPAN_OPT	__cpu_to_be16(0x4000)
+#define TUNNEL_GTP_OPT		__cpu_to_be16(0x8000)
 
 #define TUNNEL_OPTIONS_PRESENT \
-		(TUNNEL_GENEVE_OPT | TUNNEL_VXLAN_OPT | TUNNEL_ERSPAN_OPT)
+		(TUNNEL_GENEVE_OPT | TUNNEL_VXLAN_OPT | TUNNEL_ERSPAN_OPT | \
+		TUNNEL_GTP_OPT)
 
 #endif /* _UAPI_IF_TUNNEL_H_ */
diff --git a/src/basic/linux/in.h b/src/basic/linux/in.h
index 7d66876..07a4cb1 100644
--- a/src/basic/linux/in.h
+++ b/src/basic/linux/in.h
@@ -20,6 +20,7 @@
 #define _UAPI_LINUX_IN_H
 
 #include <linux/types.h>
+#include <linux/stddef.h>
 #include <linux/libc-compat.h>
 #include <linux/socket.h>
 
@@ -68,6 +69,8 @@
 #define IPPROTO_PIM		IPPROTO_PIM
   IPPROTO_COMP = 108,		/* Compression Header Protocol		*/
 #define IPPROTO_COMP		IPPROTO_COMP
+  IPPROTO_L2TP = 115,		/* Layer 2 Tunnelling Protocol		*/
+#define IPPROTO_L2TP		IPPROTO_L2TP
   IPPROTO_SCTP = 132,		/* Stream Control Transport Protocol	*/
 #define IPPROTO_SCTP		IPPROTO_SCTP
   IPPROTO_UDPLITE = 136,	/* UDP-Lite (RFC 3828)			*/
@@ -192,7 +195,10 @@
 	__be32		imsf_interface;
 	__u32		imsf_fmode;
 	__u32		imsf_numsrc;
-	__be32		imsf_slist[1];
+	union {
+		__be32		imsf_slist[1];
+		__DECLARE_FLEX_ARRAY(__be32, imsf_slist_flex);
+	};
 };
 
 #define IP_MSFILTER_SIZE(numsrc) \
@@ -211,11 +217,22 @@
 };
 
 struct group_filter {
-	__u32				 gf_interface;	/* interface index */
-	struct __kernel_sockaddr_storage gf_group;	/* multicast address */
-	__u32				 gf_fmode;	/* filter mode */
-	__u32				 gf_numsrc;	/* number of sources */
-	struct __kernel_sockaddr_storage gf_slist[1];	/* interface index */
+	union {
+		struct {
+			__u32				 gf_interface_aux; /* interface index */
+			struct __kernel_sockaddr_storage gf_group_aux;	   /* multicast address */
+			__u32				 gf_fmode_aux;	   /* filter mode */
+			__u32				 gf_numsrc_aux;	   /* number of sources */
+			struct __kernel_sockaddr_storage gf_slist[1];	   /* interface index */
+		};
+		struct {
+			__u32				 gf_interface;	  /* interface index */
+			struct __kernel_sockaddr_storage gf_group;	  /* multicast address */
+			__u32				 gf_fmode;	  /* filter mode */
+			__u32				 gf_numsrc;	  /* number of sources */
+			struct __kernel_sockaddr_storage gf_slist_flex[]; /* interface index */
+		};
+	};
 };
 
 #define GROUP_FILTER_SIZE(numsrc) \
@@ -289,6 +306,9 @@
 /* Address indicating an error return. */
 #define	INADDR_NONE		((unsigned long int) 0xffffffff)
 
+/* Dummy address for src of ICMP replies if no real address is set (RFC7600). */
+#define	INADDR_DUMMY		((unsigned long int) 0xc0000008)
+
 /* Network number for local host loopback. */
 #define	IN_LOOPBACKNET		127
 
diff --git a/src/basic/linux/in6.h b/src/basic/linux/in6.h
index 5ad396a..c4c53a9 100644
--- a/src/basic/linux/in6.h
+++ b/src/basic/linux/in6.h
@@ -145,6 +145,7 @@
 #define IPV6_TLV_PADN		1
 #define IPV6_TLV_ROUTERALERT	5
 #define IPV6_TLV_CALIPSO	7	/* RFC 5570 */
+#define IPV6_TLV_IOAM		49	/* TEMPORARY IANA allocation for IOAM */
 #define IPV6_TLV_JUMBO		194
 #define IPV6_TLV_HAO		201	/* home address option */
 
diff --git a/src/basic/linux/l2tp.h b/src/basic/linux/l2tp.h
index 30c80d5..7d81c3e 100644
--- a/src/basic/linux/l2tp.h
+++ b/src/basic/linux/l2tp.h
@@ -13,8 +13,6 @@
 #include <linux/in.h>
 #include <linux/in6.h>
 
-#define IPPROTO_L2TP		115
-
 /**
  * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets
  * @l2tp_family:  address family number AF_L2TPIP.
@@ -145,6 +143,7 @@
 	L2TP_ATTR_RX_ERRORS,		/* u64 */
 	L2TP_ATTR_STATS_PAD,
 	L2TP_ATTR_RX_COOKIE_DISCARDS,	/* u64 */
+	L2TP_ATTR_RX_INVALID,		/* u64 */
 	__L2TP_ATTR_STATS_MAX,
 };
 
diff --git a/src/basic/linux/loadavg.h b/src/basic/linux/loadavg.h
deleted file mode 100644
index 83ec54b..0000000
--- a/src/basic/linux/loadavg.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _LINUX_SCHED_LOADAVG_H
-#define _LINUX_SCHED_LOADAVG_H
-
-/*
- * These are the constant used to fake the fixed-point load-average
- * counting. Some notes:
- *  - 11 bit fractions expand to 22 bits by the multiplies: this gives
- *    a load-average precision of 10 bits integer + 11 bits fractional
- *  - if you want to count load-averages more often, you need more
- *    precision, or rounding will get you. With 2-second counting freq,
- *    the EXP_n values would be 1981, 2034 and 2043 if still using only
- *    11 bit fractions.
- */
-extern unsigned long avenrun[];		/* Load averages */
-extern void get_avenrun(unsigned long *loads, unsigned long offset, int shift);
-
-#define FSHIFT		11		/* nr of bits of precision */
-#define FIXED_1		(1<<FSHIFT)	/* 1.0 as fixed-point */
-#define LOAD_FREQ	(5*HZ+1)	/* 5 sec intervals */
-#define EXP_1		1884		/* 1/exp(5sec/1min) as fixed-point */
-#define EXP_5		2014		/* 1/exp(5sec/5min) */
-#define EXP_15		2037		/* 1/exp(5sec/15min) */
-
-/*
- * a1 = a0 * e + a * (1 - e)
- */
-static inline unsigned long
-calc_load(unsigned long load, unsigned long exp, unsigned long active)
-{
-	unsigned long newload;
-
-	newload = load * exp + active * (FIXED_1 - exp);
-	if (active >= load)
-		newload += FIXED_1-1;
-
-	return newload / FIXED_1;
-}
-
-extern unsigned long calc_load_n(unsigned long load, unsigned long exp,
-				 unsigned long active, unsigned int n);
-
-#define LOAD_INT(x) ((x) >> FSHIFT)
-#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
-
-extern void calc_global_load(void);
-
-#endif /* _LINUX_SCHED_LOADAVG_H */
diff --git a/src/basic/linux/mrp_bridge.h b/src/basic/linux/mrp_bridge.h
new file mode 100644
index 0000000..bd4424d
--- /dev/null
+++ b/src/basic/linux/mrp_bridge.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+
+#ifndef _UAPI_LINUX_MRP_BRIDGE_H_
+#define _UAPI_LINUX_MRP_BRIDGE_H_
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+#define MRP_MAX_FRAME_LENGTH		200
+#define MRP_DEFAULT_PRIO		0x8000
+#define MRP_DOMAIN_UUID_LENGTH		16
+#define MRP_VERSION			1
+#define MRP_FRAME_PRIO			7
+#define MRP_OUI_LENGTH			3
+#define MRP_MANUFACTURE_DATA_LENGTH	2
+
+enum br_mrp_ring_role_type {
+	BR_MRP_RING_ROLE_DISABLED,
+	BR_MRP_RING_ROLE_MRC,
+	BR_MRP_RING_ROLE_MRM,
+	BR_MRP_RING_ROLE_MRA,
+};
+
+enum br_mrp_in_role_type {
+	BR_MRP_IN_ROLE_DISABLED,
+	BR_MRP_IN_ROLE_MIC,
+	BR_MRP_IN_ROLE_MIM,
+};
+
+enum br_mrp_ring_state_type {
+	BR_MRP_RING_STATE_OPEN,
+	BR_MRP_RING_STATE_CLOSED,
+};
+
+enum br_mrp_in_state_type {
+	BR_MRP_IN_STATE_OPEN,
+	BR_MRP_IN_STATE_CLOSED,
+};
+
+enum br_mrp_port_state_type {
+	BR_MRP_PORT_STATE_DISABLED,
+	BR_MRP_PORT_STATE_BLOCKED,
+	BR_MRP_PORT_STATE_FORWARDING,
+	BR_MRP_PORT_STATE_NOT_CONNECTED,
+};
+
+enum br_mrp_port_role_type {
+	BR_MRP_PORT_ROLE_PRIMARY,
+	BR_MRP_PORT_ROLE_SECONDARY,
+	BR_MRP_PORT_ROLE_INTER,
+};
+
+enum br_mrp_tlv_header_type {
+	BR_MRP_TLV_HEADER_END = 0x0,
+	BR_MRP_TLV_HEADER_COMMON = 0x1,
+	BR_MRP_TLV_HEADER_RING_TEST = 0x2,
+	BR_MRP_TLV_HEADER_RING_TOPO = 0x3,
+	BR_MRP_TLV_HEADER_RING_LINK_DOWN = 0x4,
+	BR_MRP_TLV_HEADER_RING_LINK_UP = 0x5,
+	BR_MRP_TLV_HEADER_IN_TEST = 0x6,
+	BR_MRP_TLV_HEADER_IN_TOPO = 0x7,
+	BR_MRP_TLV_HEADER_IN_LINK_DOWN = 0x8,
+	BR_MRP_TLV_HEADER_IN_LINK_UP = 0x9,
+	BR_MRP_TLV_HEADER_IN_LINK_STATUS = 0xa,
+	BR_MRP_TLV_HEADER_OPTION = 0x7f,
+};
+
+enum br_mrp_sub_tlv_header_type {
+	BR_MRP_SUB_TLV_HEADER_TEST_MGR_NACK = 0x1,
+	BR_MRP_SUB_TLV_HEADER_TEST_PROPAGATE = 0x2,
+	BR_MRP_SUB_TLV_HEADER_TEST_AUTO_MGR = 0x3,
+};
+
+#endif
diff --git a/src/basic/linux/netfilter/nf_tables.h b/src/basic/linux/netfilter/nf_tables.h
index 4565456..cfa844d 100644
--- a/src/basic/linux/netfilter/nf_tables.h
+++ b/src/basic/linux/netfilter/nf_tables.h
@@ -97,6 +97,7 @@
  * @NFT_MSG_NEWFLOWTABLE: add new flow table (enum nft_flowtable_attributes)
  * @NFT_MSG_GETFLOWTABLE: get flow table (enum nft_flowtable_attributes)
  * @NFT_MSG_DELFLOWTABLE: delete flow table (enum nft_flowtable_attributes)
+ * @NFT_MSG_GETRULE_RESET: get rules and reset stateful expressions (enum nft_obj_attributes)
  */
 enum nf_tables_msg_types {
 	NFT_MSG_NEWTABLE,
@@ -124,6 +125,7 @@
 	NFT_MSG_NEWFLOWTABLE,
 	NFT_MSG_GETFLOWTABLE,
 	NFT_MSG_DELFLOWTABLE,
+	NFT_MSG_GETRULE_RESET,
 	NFT_MSG_MAX,
 };
 
@@ -133,7 +135,7 @@
  * @NFTA_LIST_ELEM: list element (NLA_NESTED)
  */
 enum nft_list_attributes {
-	NFTA_LIST_UNPEC,
+	NFTA_LIST_UNSPEC,
 	NFTA_LIST_ELEM,
 	__NFTA_LIST_MAX
 };
@@ -164,7 +166,10 @@
  */
 enum nft_table_flags {
 	NFT_TABLE_F_DORMANT	= 0x1,
+	NFT_TABLE_F_OWNER	= 0x2,
 };
+#define NFT_TABLE_F_MASK	(NFT_TABLE_F_DORMANT | \
+				 NFT_TABLE_F_OWNER)
 
 /**
  * enum nft_table_attributes - nf_tables table netlink attributes
@@ -172,6 +177,8 @@
  * @NFTA_TABLE_NAME: name of the table (NLA_STRING)
  * @NFTA_TABLE_FLAGS: bitmask of enum nft_table_flags (NLA_U32)
  * @NFTA_TABLE_USE: number of chains in this table (NLA_U32)
+ * @NFTA_TABLE_USERDATA: user data (NLA_BINARY)
+ * @NFTA_TABLE_OWNER: owner of this table through netlink portID (NLA_U32)
  */
 enum nft_table_attributes {
 	NFTA_TABLE_UNSPEC,
@@ -180,10 +187,21 @@
 	NFTA_TABLE_USE,
 	NFTA_TABLE_HANDLE,
 	NFTA_TABLE_PAD,
+	NFTA_TABLE_USERDATA,
+	NFTA_TABLE_OWNER,
 	__NFTA_TABLE_MAX
 };
 #define NFTA_TABLE_MAX		(__NFTA_TABLE_MAX - 1)
 
+enum nft_chain_flags {
+	NFT_CHAIN_BASE		= (1 << 0),
+	NFT_CHAIN_HW_OFFLOAD	= (1 << 1),
+	NFT_CHAIN_BINDING	= (1 << 2),
+};
+#define NFT_CHAIN_FLAGS		(NFT_CHAIN_BASE		| \
+				 NFT_CHAIN_HW_OFFLOAD	| \
+				 NFT_CHAIN_BINDING)
+
 /**
  * enum nft_chain_attributes - nf_tables chain netlink attributes
  *
@@ -196,6 +214,8 @@
  * @NFTA_CHAIN_TYPE: type name of the string (NLA_NUL_STRING)
  * @NFTA_CHAIN_COUNTERS: counter specification of the chain (NLA_NESTED: nft_counter_attributes)
  * @NFTA_CHAIN_FLAGS: chain flags
+ * @NFTA_CHAIN_ID: uniquely identifies a chain in a transaction (NLA_U32)
+ * @NFTA_CHAIN_USERDATA: user data (NLA_BINARY)
  */
 enum nft_chain_attributes {
 	NFTA_CHAIN_UNSPEC,
@@ -209,6 +229,8 @@
 	NFTA_CHAIN_COUNTERS,
 	NFTA_CHAIN_PAD,
 	NFTA_CHAIN_FLAGS,
+	NFTA_CHAIN_ID,
+	NFTA_CHAIN_USERDATA,
 	__NFTA_CHAIN_MAX
 };
 #define NFTA_CHAIN_MAX		(__NFTA_CHAIN_MAX - 1)
@@ -238,6 +260,7 @@
 	NFTA_RULE_PAD,
 	NFTA_RULE_ID,
 	NFTA_RULE_POSITION_ID,
+	NFTA_RULE_CHAIN_ID,
 	__NFTA_RULE_MAX
 };
 #define NFTA_RULE_MAX		(__NFTA_RULE_MAX - 1)
@@ -277,6 +300,7 @@
  * @NFT_SET_EVAL: set can be updated from the evaluation path
  * @NFT_SET_OBJECT: set contains stateful objects
  * @NFT_SET_CONCAT: set contains a concatenation
+ * @NFT_SET_EXPR: set contains expressions
  */
 enum nft_set_flags {
 	NFT_SET_ANONYMOUS		= 0x1,
@@ -287,6 +311,7 @@
 	NFT_SET_EVAL			= 0x20,
 	NFT_SET_OBJECT			= 0x40,
 	NFT_SET_CONCAT			= 0x80,
+	NFT_SET_EXPR			= 0x100,
 };
 
 /**
@@ -345,6 +370,7 @@
  * @NFTA_SET_OBJ_TYPE: stateful object type (NLA_U32: NFT_OBJECT_*)
  * @NFTA_SET_HANDLE: set handle (NLA_U64)
  * @NFTA_SET_EXPR: set expression (NLA_NESTED: nft_expr_attributes)
+ * @NFTA_SET_EXPRESSIONS: list of expressions (NLA_NESTED: nft_list_attributes)
  */
 enum nft_set_attributes {
 	NFTA_SET_UNSPEC,
@@ -365,6 +391,7 @@
 	NFTA_SET_OBJ_TYPE,
 	NFTA_SET_HANDLE,
 	NFTA_SET_EXPR,
+	NFTA_SET_EXPRESSIONS,
 	__NFTA_SET_MAX
 };
 #define NFTA_SET_MAX		(__NFTA_SET_MAX - 1)
@@ -373,9 +400,11 @@
  * enum nft_set_elem_flags - nf_tables set element flags
  *
  * @NFT_SET_ELEM_INTERVAL_END: element ends the previous interval
+ * @NFT_SET_ELEM_CATCHALL: special catch-all element
  */
 enum nft_set_elem_flags {
 	NFT_SET_ELEM_INTERVAL_END	= 0x1,
+	NFT_SET_ELEM_CATCHALL		= 0x2,
 };
 
 /**
@@ -390,6 +419,7 @@
  * @NFTA_SET_ELEM_EXPR: expression (NLA_NESTED: nft_expr_attributes)
  * @NFTA_SET_ELEM_OBJREF: stateful object reference (NLA_STRING)
  * @NFTA_SET_ELEM_KEY_END: closing key value (NLA_NESTED: nft_data)
+ * @NFTA_SET_ELEM_EXPRESSIONS: list of expressions (NLA_NESTED: nft_list_attributes)
  */
 enum nft_set_elem_attributes {
 	NFTA_SET_ELEM_UNSPEC,
@@ -403,6 +433,7 @@
 	NFTA_SET_ELEM_PAD,
 	NFTA_SET_ELEM_OBJREF,
 	NFTA_SET_ELEM_KEY_END,
+	NFTA_SET_ELEM_EXPRESSIONS,
 	__NFTA_SET_ELEM_MAX
 };
 #define NFTA_SET_ELEM_MAX	(__NFTA_SET_ELEM_MAX - 1)
@@ -468,11 +499,13 @@
  *
  * @NFTA_VERDICT_CODE: nf_tables verdict (NLA_U32: enum nft_verdicts)
  * @NFTA_VERDICT_CHAIN: jump target chain name (NLA_STRING)
+ * @NFTA_VERDICT_CHAIN_ID: jump target chain ID (NLA_U32)
  */
 enum nft_verdict_attributes {
 	NFTA_VERDICT_UNSPEC,
 	NFTA_VERDICT_CODE,
 	NFTA_VERDICT_CHAIN,
+	NFTA_VERDICT_CHAIN_ID,
 	__NFTA_VERDICT_MAX
 };
 #define NFTA_VERDICT_MAX	(__NFTA_VERDICT_MAX - 1)
@@ -684,6 +717,7 @@
 
 enum nft_dynset_flags {
 	NFT_DYNSET_F_INV	= (1 << 0),
+	NFT_DYNSET_F_EXPR	= (1 << 1),
 };
 
 /**
@@ -697,6 +731,7 @@
  * @NFTA_DYNSET_TIMEOUT: timeout value for the new element (NLA_U64)
  * @NFTA_DYNSET_EXPR: expression (NLA_NESTED: nft_expr_attributes)
  * @NFTA_DYNSET_FLAGS: flags (NLA_U32)
+ * @NFTA_DYNSET_EXPRESSIONS: list of expressions (NLA_NESTED: nft_list_attributes)
  */
 enum nft_dynset_attributes {
 	NFTA_DYNSET_UNSPEC,
@@ -709,6 +744,7 @@
 	NFTA_DYNSET_EXPR,
 	NFTA_DYNSET_PAD,
 	NFTA_DYNSET_FLAGS,
+	NFTA_DYNSET_EXPRESSIONS,
 	__NFTA_DYNSET_MAX,
 };
 #define NFTA_DYNSET_MAX		(__NFTA_DYNSET_MAX - 1)
@@ -719,11 +755,14 @@
  * @NFT_PAYLOAD_LL_HEADER: link layer header
  * @NFT_PAYLOAD_NETWORK_HEADER: network header
  * @NFT_PAYLOAD_TRANSPORT_HEADER: transport header
+ * @NFT_PAYLOAD_INNER_HEADER: inner header / payload
  */
 enum nft_payload_bases {
 	NFT_PAYLOAD_LL_HEADER,
 	NFT_PAYLOAD_NETWORK_HEADER,
 	NFT_PAYLOAD_TRANSPORT_HEADER,
+	NFT_PAYLOAD_INNER_HEADER,
+	NFT_PAYLOAD_TUN_HEADER,
 };
 
 /**
@@ -731,16 +770,44 @@
  *
  * @NFT_PAYLOAD_CSUM_NONE: no checksumming
  * @NFT_PAYLOAD_CSUM_INET: internet checksum (RFC 791)
+ * @NFT_PAYLOAD_CSUM_SCTP: CRC-32c, for use in SCTP header (RFC 3309)
  */
 enum nft_payload_csum_types {
 	NFT_PAYLOAD_CSUM_NONE,
 	NFT_PAYLOAD_CSUM_INET,
+	NFT_PAYLOAD_CSUM_SCTP,
 };
 
 enum nft_payload_csum_flags {
 	NFT_PAYLOAD_L4CSUM_PSEUDOHDR = (1 << 0),
 };
 
+enum nft_inner_type {
+	NFT_INNER_UNSPEC	= 0,
+	NFT_INNER_VXLAN,
+	NFT_INNER_GENEVE,
+};
+
+enum nft_inner_flags {
+	NFT_INNER_HDRSIZE	= (1 << 0),
+	NFT_INNER_LL		= (1 << 1),
+	NFT_INNER_NH		= (1 << 2),
+	NFT_INNER_TH		= (1 << 3),
+};
+#define NFT_INNER_MASK		(NFT_INNER_HDRSIZE | NFT_INNER_LL | \
+				 NFT_INNER_NH | NFT_INNER_TH)
+
+enum nft_inner_attributes {
+	NFTA_INNER_UNSPEC,
+	NFTA_INNER_NUM,
+	NFTA_INNER_TYPE,
+	NFTA_INNER_FLAGS,
+	NFTA_INNER_HDRSIZE,
+	NFTA_INNER_EXPR,
+	__NFTA_INNER_MAX
+};
+#define NFTA_INNER_MAX	(__NFTA_INNER_MAX - 1)
+
 /**
  * enum nft_payload_attributes - nf_tables payload expression netlink attributes
  *
@@ -777,11 +844,13 @@
  * @NFT_EXTHDR_OP_IPV6: match against ipv6 extension headers
  * @NFT_EXTHDR_OP_TCP: match against tcp options
  * @NFT_EXTHDR_OP_IPV4: match against ipv4 options
+ * @NFT_EXTHDR_OP_SCTP: match against sctp chunks
  */
 enum nft_exthdr_op {
 	NFT_EXTHDR_OP_IPV6,
 	NFT_EXTHDR_OP_TCPOPT,
 	NFT_EXTHDR_OP_IPV4,
+	NFT_EXTHDR_OP_SCTP,
 	__NFT_EXTHDR_OP_MAX
 };
 #define NFT_EXTHDR_OP_MAX	(__NFT_EXTHDR_OP_MAX - 1)
@@ -858,7 +927,8 @@
 	NFT_META_OIF,
 	NFT_META_IIFNAME,
 	NFT_META_OIFNAME,
-	NFT_META_IIFTYPE,
+	NFT_META_IFTYPE,
+#define NFT_META_IIFTYPE	NFT_META_IFTYPE
 	NFT_META_OIFTYPE,
 	NFT_META_SKUID,
 	NFT_META_SKGID,
@@ -885,6 +955,7 @@
 	NFT_META_TIME_HOUR,
 	NFT_META_SDIF,
 	NFT_META_SDIFNAME,
+	__NFT_META_IIFTYPE,
 };
 
 /**
@@ -980,11 +1051,13 @@
  *
  * @NFTA_SOCKET_KEY: socket key to match
  * @NFTA_SOCKET_DREG: destination register
+ * @NFTA_SOCKET_LEVEL: cgroups2 ancestor level (only for cgroupsv2)
  */
 enum nft_socket_attributes {
 	NFTA_SOCKET_UNSPEC,
 	NFTA_SOCKET_KEY,
 	NFTA_SOCKET_DREG,
+	NFTA_SOCKET_LEVEL,
 	__NFTA_SOCKET_MAX
 };
 #define NFTA_SOCKET_MAX		(__NFTA_SOCKET_MAX - 1)
@@ -994,10 +1067,14 @@
  *
  * @NFT_SOCKET_TRANSPARENT: Value of the IP(V6)_TRANSPARENT socket option
  * @NFT_SOCKET_MARK: Value of the socket mark
+ * @NFT_SOCKET_WILDCARD: Whether the socket is zero-bound (e.g. 0.0.0.0 or ::0)
+ * @NFT_SOCKET_CGROUPV2: Match on cgroups version 2
  */
 enum nft_socket_keys {
 	NFT_SOCKET_TRANSPARENT,
 	NFT_SOCKET_MARK,
+	NFT_SOCKET_WILDCARD,
+	NFT_SOCKET_CGROUPV2,
 	__NFT_SOCKET_MAX
 };
 #define NFT_SOCKET_MAX	(__NFT_SOCKET_MAX - 1)
@@ -1152,6 +1229,21 @@
 #define NFTA_COUNTER_MAX	(__NFTA_COUNTER_MAX - 1)
 
 /**
+ * enum nft_last_attributes - nf_tables last expression netlink attributes
+ *
+ * @NFTA_LAST_SET: last update has been set, zero means never updated (NLA_U32)
+ * @NFTA_LAST_MSECS: milliseconds since last update (NLA_U64)
+ */
+enum nft_last_attributes {
+	NFTA_LAST_UNSPEC,
+	NFTA_LAST_SET,
+	NFTA_LAST_MSECS,
+	NFTA_LAST_PAD,
+	__NFTA_LAST_MAX
+};
+#define NFTA_LAST_MAX	(__NFTA_LAST_MAX - 1)
+
+/**
  * enum nft_log_attributes - nf_tables log expression netlink attributes
  *
  * @NFTA_LOG_GROUP: netlink group to send messages to (NLA_U32)
@@ -1541,6 +1633,7 @@
  * @NFTA_OBJ_DATA: stateful object data (NLA_NESTED)
  * @NFTA_OBJ_USE: number of references to this expression (NLA_U32)
  * @NFTA_OBJ_HANDLE: object handle (NLA_U64)
+ * @NFTA_OBJ_USERDATA: user data (NLA_BINARY)
  */
 enum nft_object_attributes {
 	NFTA_OBJ_UNSPEC,
@@ -1551,6 +1644,7 @@
 	NFTA_OBJ_USE,
 	NFTA_OBJ_HANDLE,
 	NFTA_OBJ_PAD,
+	NFTA_OBJ_USERDATA,
 	__NFTA_OBJ_MAX
 };
 #define NFTA_OBJ_MAX		(__NFTA_OBJ_MAX - 1)
diff --git a/src/basic/linux/netfilter/nfnetlink.h b/src/basic/linux/netfilter/nfnetlink.h
index a89f3a5..6cd58cd 100644
--- a/src/basic/linux/netfilter/nfnetlink.h
+++ b/src/basic/linux/netfilter/nfnetlink.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _NFNETLINK_H
-#define _NFNETLINK_H
+#ifndef _UAPI_NFNETLINK_H
+#define _UAPI_NFNETLINK_H
 #include <linux/types.h>
 #include <linux/netfilter/nfnetlink_compat.h>
 
@@ -60,7 +60,8 @@
 #define NFNL_SUBSYS_CTHELPER		9
 #define NFNL_SUBSYS_NFTABLES		10
 #define NFNL_SUBSYS_NFT_COMPAT		11
-#define NFNL_SUBSYS_COUNT		12
+#define NFNL_SUBSYS_HOOK		12
+#define NFNL_SUBSYS_COUNT		13
 
 /* Reserved control nfnetlink messages */
 #define NFNL_MSG_BATCH_BEGIN		NLMSG_MIN_TYPE
@@ -78,4 +79,4 @@
 };
 #define NFNL_BATCH_MAX			(__NFNL_BATCH_MAX - 1)
 
-#endif /* _NFNETLINK_H */
+#endif /* _UAPI_NFNETLINK_H */
diff --git a/src/basic/linux/netlink.h b/src/basic/linux/netlink.h
index c3816ff..e2ae82e 100644
--- a/src/basic/linux/netlink.h
+++ b/src/basic/linux/netlink.h
@@ -2,7 +2,7 @@
 #ifndef _UAPI__LINUX_NETLINK_H
 #define _UAPI__LINUX_NETLINK_H
 
-#include <linux/kernel.h>
+#include <linux/const.h>
 #include <linux/socket.h> /* for __kernel_sa_family_t */
 #include <linux/types.h>
 
@@ -20,7 +20,7 @@
 #define NETLINK_CONNECTOR	11
 #define NETLINK_NETFILTER	12	/* netfilter subsystem */
 #define NETLINK_IP6_FW		13
-#define NETLINK_DNRTMSG		14	/* DECnet routing messages */
+#define NETLINK_DNRTMSG		14	/* DECnet routing messages (obsolete) */
 #define NETLINK_KOBJECT_UEVENT	15	/* Kernel messages to userspace */
 #define NETLINK_GENERIC		16
 /* leave room for NETLINK_DM (DM Events) */
@@ -41,12 +41,20 @@
        	__u32		nl_groups;	/* multicast groups mask */
 };
 
+/**
+ * struct nlmsghdr - fixed format metadata header of Netlink messages
+ * @nlmsg_len:   Length of message including header
+ * @nlmsg_type:  Message content type
+ * @nlmsg_flags: Additional flags
+ * @nlmsg_seq:   Sequence number
+ * @nlmsg_pid:   Sending process port ID
+ */
 struct nlmsghdr {
-	__u32		nlmsg_len;	/* Length of message including header */
-	__u16		nlmsg_type;	/* Message content */
-	__u16		nlmsg_flags;	/* Additional flags */
-	__u32		nlmsg_seq;	/* Sequence number */
-	__u32		nlmsg_pid;	/* Sending process port ID */
+	__u32		nlmsg_len;
+	__u16		nlmsg_type;
+	__u16		nlmsg_flags;
+	__u32		nlmsg_seq;
+	__u32		nlmsg_pid;
 };
 
 /* Flags values */
@@ -54,7 +62,7 @@
 #define NLM_F_REQUEST		0x01	/* It is request message. 	*/
 #define NLM_F_MULTI		0x02	/* Multipart message, terminated by NLMSG_DONE */
 #define NLM_F_ACK		0x04	/* Reply with ack, with zero or error code */
-#define NLM_F_ECHO		0x08	/* Echo this request 		*/
+#define NLM_F_ECHO		0x08	/* Receive resulting notifications */
 #define NLM_F_DUMP_INTR		0x10	/* Dump was inconsistent due to sequence change */
 #define NLM_F_DUMP_FILTERED	0x20	/* Dump was filtered as requested */
 
@@ -72,6 +80,7 @@
 
 /* Modifiers to DELETE request */
 #define NLM_F_NONREC	0x100	/* Do not delete recursively	*/
+#define NLM_F_BULK	0x200	/* Delete multiple objects	*/
 
 /* Flags for ACK message */
 #define NLM_F_CAPPED	0x100	/* request was capped */
@@ -91,9 +100,10 @@
 #define NLMSG_HDRLEN	 ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
 #define NLMSG_LENGTH(len) ((len) + NLMSG_HDRLEN)
 #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
-#define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
+#define NLMSG_DATA(nlh)  ((void *)(((char *)nlh) + NLMSG_HDRLEN))
 #define NLMSG_NEXT(nlh,len)	 ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
-				  (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
+				  (struct nlmsghdr *)(((char *)(nlh)) + \
+				  NLMSG_ALIGN((nlh)->nlmsg_len)))
 #define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
 			   (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
 			   (nlh)->nlmsg_len <= (len))
@@ -130,6 +140,10 @@
  *	be used - in the success case - to identify a created
  *	object or operation or similar (binary)
  * @NLMSGERR_ATTR_POLICY: policy for a rejected attribute
+ * @NLMSGERR_ATTR_MISS_TYPE: type of a missing required attribute,
+ *	%NLMSGERR_ATTR_MISS_NEST will not be present if the attribute was
+ *	missing at the message level
+ * @NLMSGERR_ATTR_MISS_NEST: offset of the nest where attribute was missing
  * @__NLMSGERR_ATTR_MAX: number of attributes
  * @NLMSGERR_ATTR_MAX: highest attribute number
  */
@@ -139,6 +153,8 @@
 	NLMSGERR_ATTR_OFFS,
 	NLMSGERR_ATTR_COOKIE,
 	NLMSGERR_ATTR_POLICY,
+	NLMSGERR_ATTR_MISS_TYPE,
+	NLMSGERR_ATTR_MISS_NEST,
 
 	__NLMSGERR_ATTR_MAX,
 	NLMSGERR_ATTR_MAX = __NLMSGERR_ATTR_MAX - 1
@@ -335,6 +351,9 @@
  *	bitfield32 type (U32)
  * @NL_POLICY_TYPE_ATTR_MASK: mask of valid bits for unsigned integers (U64)
  * @NL_POLICY_TYPE_ATTR_PAD: pad attribute for 64-bit alignment
+ *
+ * @__NL_POLICY_TYPE_ATTR_MAX: number of attributes
+ * @NL_POLICY_TYPE_ATTR_MAX: highest attribute number
  */
 enum netlink_policy_type_attr {
 	NL_POLICY_TYPE_ATTR_UNSPEC,
diff --git a/src/basic/linux/nexthop.h b/src/basic/linux/nexthop.h
index 2d4a1e7..d8ffa8c 100644
--- a/src/basic/linux/nexthop.h
+++ b/src/basic/linux/nexthop.h
@@ -21,7 +21,10 @@
 };
 
 enum {
-	NEXTHOP_GRP_TYPE_MPATH,  /* default type if not specified */
+	NEXTHOP_GRP_TYPE_MPATH,  /* hash-threshold nexthop group
+				  * default type if not specified
+				  */
+	NEXTHOP_GRP_TYPE_RES,    /* resilient nexthop group */
 	__NEXTHOP_GRP_TYPE_MAX,
 };
 
@@ -52,8 +55,50 @@
 	NHA_FDB,	/* flag; nexthop belongs to a bridge fdb */
 	/* if NHA_FDB is added, OIF, BLACKHOLE, ENCAP cannot be set */
 
+	/* nested; resilient nexthop group attributes */
+	NHA_RES_GROUP,
+	/* nested; nexthop bucket attributes */
+	NHA_RES_BUCKET,
+
 	__NHA_MAX,
 };
 
 #define NHA_MAX	(__NHA_MAX - 1)
+
+enum {
+	NHA_RES_GROUP_UNSPEC,
+	/* Pad attribute for 64-bit alignment. */
+	NHA_RES_GROUP_PAD = NHA_RES_GROUP_UNSPEC,
+
+	/* u16; number of nexthop buckets in a resilient nexthop group */
+	NHA_RES_GROUP_BUCKETS,
+	/* clock_t as u32; nexthop bucket idle timer (per-group) */
+	NHA_RES_GROUP_IDLE_TIMER,
+	/* clock_t as u32; nexthop unbalanced timer */
+	NHA_RES_GROUP_UNBALANCED_TIMER,
+	/* clock_t as u64; nexthop unbalanced time */
+	NHA_RES_GROUP_UNBALANCED_TIME,
+
+	__NHA_RES_GROUP_MAX,
+};
+
+#define NHA_RES_GROUP_MAX	(__NHA_RES_GROUP_MAX - 1)
+
+enum {
+	NHA_RES_BUCKET_UNSPEC,
+	/* Pad attribute for 64-bit alignment. */
+	NHA_RES_BUCKET_PAD = NHA_RES_BUCKET_UNSPEC,
+
+	/* u16; nexthop bucket index */
+	NHA_RES_BUCKET_INDEX,
+	/* clock_t as u64; nexthop bucket idle time */
+	NHA_RES_BUCKET_IDLE_TIME,
+	/* u32; nexthop id assigned to the nexthop bucket */
+	NHA_RES_BUCKET_NH_ID,
+
+	__NHA_RES_BUCKET_MAX,
+};
+
+#define NHA_RES_BUCKET_MAX	(__NHA_RES_BUCKET_MAX - 1)
+
 #endif
diff --git a/src/basic/linux/nl80211.h b/src/basic/linux/nl80211.h
index 47700a2..c14a91b 100644
--- a/src/basic/linux/nl80211.h
+++ b/src/basic/linux/nl80211.h
@@ -11,7 +11,7 @@
  * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
  * Copyright 2008 Colin McCabe <colin@cozybit.com>
  * Copyright 2015-2017	Intel Deutschland GmbH
- * Copyright (C) 2018-2020 Intel Corporation
+ * Copyright (C) 2018-2022 Intel Corporation
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -301,6 +301,40 @@
  */
 
 /**
+ * DOC: FILS shared key crypto offload
+ *
+ * This feature is applicable to drivers running in AP mode.
+ *
+ * FILS shared key crypto offload can be advertised by drivers by setting
+ * @NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD flag. The drivers that support
+ * FILS shared key crypto offload should be able to encrypt and decrypt
+ * association frames for FILS shared key authentication as per IEEE 802.11ai.
+ * With this capability, for FILS key derivation, drivers depend on userspace.
+ *
+ * After FILS key derivation, userspace shares the FILS AAD details with the
+ * driver and the driver stores the same to use in decryption of association
+ * request and in encryption of association response. The below parameters
+ * should be given to the driver in %NL80211_CMD_SET_FILS_AAD.
+ *	%NL80211_ATTR_MAC - STA MAC address, used for storing FILS AAD per STA
+ *	%NL80211_ATTR_FILS_KEK - Used for encryption or decryption
+ *	%NL80211_ATTR_FILS_NONCES - Used for encryption or decryption
+ *			(STA Nonce 16 bytes followed by AP Nonce 16 bytes)
+ *
+ * Once the association is done, the driver cleans the FILS AAD data.
+ */
+
+/**
+ * DOC: Multi-Link Operation
+ *
+ * In Multi-Link Operation, a connection between to MLDs utilizes multiple
+ * links. To use this in nl80211, various commands and responses now need
+ * to or will include the new %NL80211_ATTR_MLO_LINKS attribute.
+ * Additionally, various commands that need to operate on a specific link
+ * now need to be given the %NL80211_ATTR_MLO_LINK_ID attribute, e.g. to
+ * use %NL80211_CMD_START_AP or similar functions.
+ */
+
+/**
  * enum nl80211_commands - supported nl80211 commands
  *
  * @NL80211_CMD_UNSPEC: unspecified command to catch errors
@@ -337,17 +371,28 @@
  * @NL80211_CMD_DEL_INTERFACE: Virtual interface was deleted, has attributes
  *	%NL80211_ATTR_IFINDEX and %NL80211_ATTR_WIPHY. Can also be sent from
  *	userspace to request deletion of a virtual interface, then requires
- *	attribute %NL80211_ATTR_IFINDEX.
+ *	attribute %NL80211_ATTR_IFINDEX. If multiple BSSID advertisements are
+ *	enabled using %NL80211_ATTR_MBSSID_CONFIG, %NL80211_ATTR_MBSSID_ELEMS,
+ *	and if this command is used for the transmitting interface, then all
+ *	the non-transmitting interfaces are deleted as well.
  *
  * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
- *	by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
+ *	by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC. %NL80211_ATTR_MAC
+ *	represents peer's MLD address for MLO pairwise key. For MLO group key,
+ *	the link is identified by %NL80211_ATTR_MLO_LINK_ID.
  * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT,
  *	%NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD.
+ *	For MLO connection, the link to set default key is identified by
+ *	%NL80211_ATTR_MLO_LINK_ID.
  * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA,
  *	%NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER,
- *	and %NL80211_ATTR_KEY_SEQ attributes.
+ *	and %NL80211_ATTR_KEY_SEQ attributes. %NL80211_ATTR_MAC represents
+ *	peer's MLD address for MLO pairwise key. The link to add MLO
+ *	group key is identified by %NL80211_ATTR_MLO_LINK_ID.
  * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX
- *	or %NL80211_ATTR_MAC.
+ *	or %NL80211_ATTR_MAC. %NL80211_ATTR_MAC represents peer's MLD address
+ *	for MLO pairwise key. The link to delete group key is identified by
+ *	%NL80211_ATTR_MLO_LINK_ID.
  *
  * @NL80211_CMD_GET_BEACON: (not used)
  * @NL80211_CMD_SET_BEACON: change the beacon on an access point interface
@@ -655,6 +700,9 @@
  *	When a security association was established on an 802.1X network using
  *	fast transition, this event should be followed by an
  *	%NL80211_CMD_PORT_AUTHORIZED event.
+ *	Following a %NL80211_CMD_ROAM event userspace can issue
+ *	%NL80211_CMD_GET_SCAN in order to obtain the scan information for the
+ *	new BSS the card/driver roamed to.
  * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify
  *	userspace that a connection was dropped by the AP or due to other
  *	reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and
@@ -724,6 +772,13 @@
  *	%NL80211_ATTR_CSA_C_OFFSETS_TX is an array of offsets to CSA
  *	counters which will be updated to the current value. This attribute
  *	is used during CSA period.
+ *	For TX on an MLD, the frequency can be omitted and the link ID be
+ *	specified, or if transmitting to a known peer MLD (with MLD addresses
+ *	in the frame) both can be omitted and the link will be selected by
+ *	lower layers.
+ *	For RX notification, %NL80211_ATTR_RX_HW_TIMESTAMP may be included to
+ *	indicate the frame RX timestamp and %NL80211_ATTR_TX_HW_TIMESTAMP may
+ *	be included to indicate the ack TX timestamp.
  * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this
  *	command may be used with the corresponding cookie to cancel the wait
  *	time if it is known that it is no longer necessary.  This command is
@@ -734,7 +789,9 @@
  *	transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies
  *	the TX command and %NL80211_ATTR_FRAME includes the contents of the
  *	frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged
- *	the frame.
+ *	the frame. %NL80211_ATTR_TX_HW_TIMESTAMP may be included to indicate the
+ *	tx timestamp and %NL80211_ATTR_RX_HW_TIMESTAMP may be included to
+ *	indicate the ack RX timestamp.
  * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for
  *	backward compatibility.
  *
@@ -757,7 +814,8 @@
  *	of any other interfaces, and other interfaces will again take
  *	precedence when they are used.
  *
- * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.
+ * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface
+ *	(no longer supported).
  *
  * @NL80211_CMD_SET_MULTICAST_TO_UNICAST: Configure if this AP should perform
  *	multicast to unicast conversion. When enabled, all multicast packets
@@ -1078,6 +1136,12 @@
  *	has been received. %NL80211_ATTR_FRAME is used to specify the
  *	frame contents.  The frame is the raw EAPoL data, without ethernet or
  *	802.11 headers.
+ *	For an MLD transmitter, the %NL80211_ATTR_MLO_LINK_ID may be given and
+ *	its effect will depend on the destination: If the destination is known
+ *	to be an MLD, this will be used as a hint to select the link to transmit
+ *	the frame on. If the destination is not an MLD, this will select both
+ *	the link to transmit on and the source address will be set to the link
+ *	address of that link.
  *	When used as an event indication %NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
  *	%NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT and %NL80211_ATTR_MAC are added
  *	indicating the protocol type of the received frame; whether the frame
@@ -1177,6 +1241,46 @@
  *	includes the contents of the frame. %NL80211_ATTR_ACK flag is included
  *	if the recipient acknowledged the frame.
  *
+ * @NL80211_CMD_SET_SAR_SPECS: SAR power limitation configuration is
+ *	passed using %NL80211_ATTR_SAR_SPEC. %NL80211_ATTR_WIPHY is used to
+ *	specify the wiphy index to be applied to.
+ *
+ * @NL80211_CMD_OBSS_COLOR_COLLISION: This notification is sent out whenever
+ *	mac80211/drv detects a bss color collision.
+ *
+ * @NL80211_CMD_COLOR_CHANGE_REQUEST: This command is used to indicate that
+ *	userspace wants to change the BSS color.
+ *
+ * @NL80211_CMD_COLOR_CHANGE_STARTED: Notify userland, that a color change has
+ *	started
+ *
+ * @NL80211_CMD_COLOR_CHANGE_ABORTED: Notify userland, that the color change has
+ *	been aborted
+ *
+ * @NL80211_CMD_COLOR_CHANGE_COMPLETED: Notify userland that the color change
+ *	has completed
+ *
+ * @NL80211_CMD_SET_FILS_AAD: Set FILS AAD data to the driver using -
+ *	&NL80211_ATTR_MAC - for STA MAC address
+ *	&NL80211_ATTR_FILS_KEK - for KEK
+ *	&NL80211_ATTR_FILS_NONCES - for FILS Nonces
+ *		(STA Nonce 16 bytes followed by AP Nonce 16 bytes)
+ *
+ * @NL80211_CMD_ASSOC_COMEBACK: notification about an association
+ *      temporal rejection with comeback. The event includes %NL80211_ATTR_MAC
+ *      to describe the BSSID address of the AP and %NL80211_ATTR_TIMEOUT to
+ *      specify the timeout value.
+ *
+ * @NL80211_CMD_ADD_LINK: Add a new link to an interface. The
+ *	%NL80211_ATTR_MLO_LINK_ID attribute is used for the new link.
+ * @NL80211_CMD_REMOVE_LINK: Remove a link from an interface. This may come
+ *	without %NL80211_ATTR_MLO_LINK_ID as an easy way to remove all links
+ *	in preparation for e.g. roaming to a regular (non-MLO) AP.
+ *
+ * @NL80211_CMD_ADD_LINK_STA: Add a link to an MLD station
+ * @NL80211_CMD_MODIFY_LINK_STA: Modify a link of an MLD station
+ * @NL80211_CMD_REMOVE_LINK_STA: Remove a link of an MLD station
+ *
  * @NL80211_CMD_MAX: highest used command number
  * @__NL80211_CMD_AFTER_LAST: internal use
  */
@@ -1407,6 +1511,27 @@
 
 	NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS,
 
+	NL80211_CMD_SET_SAR_SPECS,
+
+	NL80211_CMD_OBSS_COLOR_COLLISION,
+
+	NL80211_CMD_COLOR_CHANGE_REQUEST,
+
+	NL80211_CMD_COLOR_CHANGE_STARTED,
+	NL80211_CMD_COLOR_CHANGE_ABORTED,
+	NL80211_CMD_COLOR_CHANGE_COMPLETED,
+
+	NL80211_CMD_SET_FILS_AAD,
+
+	NL80211_CMD_ASSOC_COMEBACK,
+
+	NL80211_CMD_ADD_LINK,
+	NL80211_CMD_REMOVE_LINK,
+
+	NL80211_CMD_ADD_LINK_STA,
+	NL80211_CMD_MODIFY_LINK_STA,
+	NL80211_CMD_REMOVE_LINK_STA,
+
 	/* add new commands above here */
 
 	/* used to define NL80211_CMD_MAX below */
@@ -1750,8 +1875,9 @@
  *	specify just a single bitrate, which is to be used for the beacon.
  *	The driver must also specify support for this with the extended
  *	features NL80211_EXT_FEATURE_BEACON_RATE_LEGACY,
- *	NL80211_EXT_FEATURE_BEACON_RATE_HT and
- *	NL80211_EXT_FEATURE_BEACON_RATE_VHT.
+ *	NL80211_EXT_FEATURE_BEACON_RATE_HT,
+ *	NL80211_EXT_FEATURE_BEACON_RATE_VHT and
+ *	NL80211_EXT_FEATURE_BEACON_RATE_HE.
  *
  * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain
  *	at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME.
@@ -1955,8 +2081,15 @@
  * @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire
  *	probe-response frame. The DA field in the 802.11 header is zero-ed out,
  *	to be filled by the FW.
- * @NL80211_ATTR_DISABLE_HT:  Force HT capable interfaces to disable
- *      this feature.  Currently, only supported in mac80211 drivers.
+ * @NL80211_ATTR_DISABLE_HT: Force HT capable interfaces to disable
+ *      this feature during association. This is a flag attribute.
+ *	Currently only supported in mac80211 drivers.
+ * @NL80211_ATTR_DISABLE_VHT: Force VHT capable interfaces to disable
+ *      this feature during association. This is a flag attribute.
+ *	Currently only supported in mac80211 drivers.
+ * @NL80211_ATTR_DISABLE_HE: Force HE capable interfaces to disable
+ *      this feature during association. This is a flag attribute.
+ *	Currently only supported in mac80211 drivers.
  * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the
  *      ATTR_HT_CAPABILITY to which attention should be paid.
  *      Currently, only mac80211 NICs support this feature.
@@ -2077,7 +2210,8 @@
  *	until the channel switch event.
  * @NL80211_ATTR_CH_SWITCH_BLOCK_TX: flag attribute specifying that transmission
  *	must be blocked on the current channel (before the channel switch
- *	operation).
+ *	operation). Also included in the channel switch started event if quiet
+ *	was requested by the AP.
  * @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information
  *	for the time while performing a channel switch.
  * @NL80211_ATTR_CNTDWN_OFFS_BEACON: An array of offsets (u16) to the channel
@@ -2257,8 +2391,10 @@
  *
  * @NL80211_ATTR_IFTYPE_EXT_CAPA: Nested attribute of the following attributes:
  *	%NL80211_ATTR_IFTYPE, %NL80211_ATTR_EXT_CAPA,
- *	%NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities per
- *	interface type.
+ *	%NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities and
+ *	other interface-type specific capabilities per interface type. For MLO,
+ *	%NL80211_ATTR_EML_CAPABILITY and %NL80211_ATTR_MLD_CAPA_AND_OPS are
+ *	present.
  *
  * @NL80211_ATTR_MU_MIMO_GROUP_DATA: array of 24 bytes that defines a MU-MIMO
  *	groupID for monitor mode.
@@ -2394,7 +2530,9 @@
  *	space supports external authentication. This attribute shall be used
  *	with %NL80211_CMD_CONNECT and %NL80211_CMD_START_AP request. The driver
  *	may offload authentication processing to user space if this capability
- *	is indicated in the respective requests from the user space.
+ *	is indicated in the respective requests from the user space. (This flag
+ *	attribute deprecated for %NL80211_CMD_START_AP, use
+ *	%NL80211_ATTR_AP_SETTINGS_FLAGS)
  *
  * @NL80211_ATTR_NSS: Station's New/updated  RX_NSS value notified using this
  *	u8 attribute. This is used with %NL80211_CMD_STA_OPMODE_CHANGED.
@@ -2527,6 +2665,92 @@
  *	override mask. Used with NL80211_ATTR_S1G_CAPABILITY in
  *	NL80211_CMD_ASSOCIATE or NL80211_CMD_CONNECT.
  *
+ * @NL80211_ATTR_SAE_PWE: Indicates the mechanism(s) allowed for SAE PWE
+ *	derivation in WPA3-Personal networks which are using SAE authentication.
+ *	This is a u8 attribute that encapsulates one of the values from
+ *	&enum nl80211_sae_pwe_mechanism.
+ *
+ * @NL80211_ATTR_SAR_SPEC: SAR power limitation specification when
+ *	used with %NL80211_CMD_SET_SAR_SPECS. The message contains fields
+ *	of %nl80211_sar_attrs which specifies the sar type and related
+ *	sar specs. Sar specs contains array of %nl80211_sar_specs_attrs.
+ *
+ * @NL80211_ATTR_RECONNECT_REQUESTED: flag attribute, used with deauth and
+ *	disassoc events to indicate that an immediate reconnect to the AP
+ *	is desired.
+ *
+ * @NL80211_ATTR_OBSS_COLOR_BITMAP: bitmap of the u64 BSS colors for the
+ *	%NL80211_CMD_OBSS_COLOR_COLLISION event.
+ *
+ * @NL80211_ATTR_COLOR_CHANGE_COUNT: u8 attribute specifying the number of TBTT's
+ *	until the color switch event.
+ * @NL80211_ATTR_COLOR_CHANGE_COLOR: u8 attribute specifying the color that we are
+ *	switching to
+ * @NL80211_ATTR_COLOR_CHANGE_ELEMS: Nested set of attributes containing the IE
+ *	information for the time while performing a color switch.
+ *
+ * @NL80211_ATTR_MBSSID_CONFIG: Nested attribute for multiple BSSID
+ *	advertisements (MBSSID) parameters in AP mode.
+ *	Kernel uses this attribute to indicate the driver's support for MBSSID
+ *	and enhanced multi-BSSID advertisements (EMA AP) to the userspace.
+ *	Userspace should use this attribute to configure per interface MBSSID
+ *	parameters.
+ *	See &enum nl80211_mbssid_config_attributes for details.
+ *
+ * @NL80211_ATTR_MBSSID_ELEMS: Nested parameter to pass multiple BSSID elements.
+ *	Mandatory parameter for the transmitting interface to enable MBSSID.
+ *	Optional for the non-transmitting interfaces.
+ *
+ * @NL80211_ATTR_RADAR_BACKGROUND: Configure dedicated offchannel chain
+ *	available for radar/CAC detection on some hw. This chain can't be used
+ *	to transmit or receive frames and it is bounded to a running wdev.
+ *	Background radar/CAC detection allows to avoid the CAC downtime
+ *	switching on a different channel during CAC detection on the selected
+ *	radar channel.
+ *
+ * @NL80211_ATTR_AP_SETTINGS_FLAGS: u32 attribute contains ap settings flags,
+ *	enumerated in &enum nl80211_ap_settings_flags. This attribute shall be
+ *	used with %NL80211_CMD_START_AP request.
+ *
+ * @NL80211_ATTR_EHT_CAPABILITY: EHT Capability information element (from
+ *	association request when used with NL80211_CMD_NEW_STATION). Can be set
+ *	only if %NL80211_STA_FLAG_WME is set.
+ *
+ * @NL80211_ATTR_MLO_LINK_ID: A (u8) link ID for use with MLO, to be used with
+ *	various commands that need a link ID to operate.
+ * @NL80211_ATTR_MLO_LINKS: A nested array of links, each containing some
+ *	per-link information and a link ID.
+ * @NL80211_ATTR_MLD_ADDR: An MLD address, used with various commands such as
+ *	authenticate/associate.
+ *
+ * @NL80211_ATTR_MLO_SUPPORT: Flag attribute to indicate user space supports MLO
+ *	connection. Used with %NL80211_CMD_CONNECT. If this attribute is not
+ *	included in NL80211_CMD_CONNECT drivers must not perform MLO connection.
+ *
+ * @NL80211_ATTR_MAX_NUM_AKM_SUITES: U16 attribute. Indicates maximum number of
+ *	AKM suites allowed for %NL80211_CMD_CONNECT, %NL80211_CMD_ASSOCIATE and
+ *	%NL80211_CMD_START_AP in %NL80211_CMD_GET_WIPHY response. If this
+ *	attribute is not present userspace shall consider maximum number of AKM
+ *	suites allowed as %NL80211_MAX_NR_AKM_SUITES which is the legacy maximum
+ *	number prior to the introduction of this attribute.
+ *
+ * @NL80211_ATTR_EML_CAPABILITY: EML Capability information (u16)
+ * @NL80211_ATTR_MLD_CAPA_AND_OPS: MLD Capabilities and Operations (u16)
+ *
+ * @NL80211_ATTR_TX_HW_TIMESTAMP: Hardware timestamp for TX operation in
+ *	nanoseconds (u64). This is the device clock timestamp so it will
+ *	probably reset when the device is stopped or the firmware is reset.
+ *	When used with %NL80211_CMD_FRAME_TX_STATUS, indicates the frame TX
+ *	timestamp. When used with %NL80211_CMD_FRAME RX notification, indicates
+ *	the ack TX timestamp.
+ * @NL80211_ATTR_RX_HW_TIMESTAMP: Hardware timestamp for RX operation in
+ *	nanoseconds (u64). This is the device clock timestamp so it will
+ *	probably reset when the device is stopped or the firmware is reset.
+ *	When used with %NL80211_CMD_FRAME_TX_STATUS, indicates the ack RX
+ *	timestamp. When used with %NL80211_CMD_FRAME RX notification, indicates
+ *	the incoming frame RX timestamp.
+ * @NL80211_ATTR_TD_BITMAP: Transition Disable bitmap, for subsequent
+ *	(re)associations.
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -3016,6 +3240,46 @@
 	NL80211_ATTR_S1G_CAPABILITY,
 	NL80211_ATTR_S1G_CAPABILITY_MASK,
 
+	NL80211_ATTR_SAE_PWE,
+
+	NL80211_ATTR_RECONNECT_REQUESTED,
+
+	NL80211_ATTR_SAR_SPEC,
+
+	NL80211_ATTR_DISABLE_HE,
+
+	NL80211_ATTR_OBSS_COLOR_BITMAP,
+
+	NL80211_ATTR_COLOR_CHANGE_COUNT,
+	NL80211_ATTR_COLOR_CHANGE_COLOR,
+	NL80211_ATTR_COLOR_CHANGE_ELEMS,
+
+	NL80211_ATTR_MBSSID_CONFIG,
+	NL80211_ATTR_MBSSID_ELEMS,
+
+	NL80211_ATTR_RADAR_BACKGROUND,
+
+	NL80211_ATTR_AP_SETTINGS_FLAGS,
+
+	NL80211_ATTR_EHT_CAPABILITY,
+
+	NL80211_ATTR_DISABLE_EHT,
+
+	NL80211_ATTR_MLO_LINKS,
+	NL80211_ATTR_MLO_LINK_ID,
+	NL80211_ATTR_MLD_ADDR,
+
+	NL80211_ATTR_MLO_SUPPORT,
+
+	NL80211_ATTR_MAX_NUM_AKM_SUITES,
+
+	NL80211_ATTR_EML_CAPABILITY,
+	NL80211_ATTR_MLD_CAPA_AND_OPS,
+
+	NL80211_ATTR_TX_HW_TIMESTAMP,
+	NL80211_ATTR_RX_HW_TIMESTAMP,
+	NL80211_ATTR_TD_BITMAP,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -3070,7 +3334,14 @@
 #define NL80211_HE_MIN_CAPABILITY_LEN           16
 #define NL80211_HE_MAX_CAPABILITY_LEN           54
 #define NL80211_MAX_NR_CIPHER_SUITES		5
+
+/*
+ * NL80211_MAX_NR_AKM_SUITES is obsolete when %NL80211_ATTR_MAX_NUM_AKM_SUITES
+ * present in %NL80211_CMD_GET_WIPHY response.
+ */
 #define NL80211_MAX_NR_AKM_SUITES		2
+#define NL80211_EHT_MIN_CAPABILITY_LEN          13
+#define NL80211_EHT_MAX_CAPABILITY_LEN          51
 
 #define NL80211_MIN_REMAIN_ON_CHANNEL_TIME	10
 
@@ -3098,7 +3369,7 @@
  *	and therefore can't be created in the normal ways, use the
  *	%NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE
  *	commands to create and destroy one
- * @NL80211_IF_TYPE_OCB: Outside Context of a BSS
+ * @NL80211_IFTYPE_OCB: Outside Context of a BSS
  *	This mode corresponds to the MIB variable dot11OCBActivated=true
  * @NL80211_IFTYPE_NAN: NAN device interface type (not a netdev)
  * @NL80211_IFTYPE_MAX: highest interface type number currently defined
@@ -3240,6 +3511,56 @@
 };
 
 /**
+ * enum nl80211_eht_gi - EHT guard interval
+ * @NL80211_RATE_INFO_EHT_GI_0_8: 0.8 usec
+ * @NL80211_RATE_INFO_EHT_GI_1_6: 1.6 usec
+ * @NL80211_RATE_INFO_EHT_GI_3_2: 3.2 usec
+ */
+enum nl80211_eht_gi {
+	NL80211_RATE_INFO_EHT_GI_0_8,
+	NL80211_RATE_INFO_EHT_GI_1_6,
+	NL80211_RATE_INFO_EHT_GI_3_2,
+};
+
+/**
+ * enum nl80211_eht_ru_alloc - EHT RU allocation values
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_26: 26-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_52: 52-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_52P26: 52+26-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_106: 106-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_106P26: 106+26 tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_242: 242-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_484: 484-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_484P242: 484+242 tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_996: 996-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_996P484: 996+484 tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_996P484P242: 996+484+242 tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_2x996: 2x996-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484: 2x996+484 tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_3x996: 3x996-tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484: 3x996+484 tone RU allocation
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC_4x996: 4x996-tone RU allocation
+ */
+enum nl80211_eht_ru_alloc {
+	NL80211_RATE_INFO_EHT_RU_ALLOC_26,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_52,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_52P26,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_106,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_106P26,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_242,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_484,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_484P242,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_996,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_996P484,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_996P484P242,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_2x996,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_3x996,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484,
+	NL80211_RATE_INFO_EHT_RU_ALLOC_4x996,
+};
+
+/**
  * enum nl80211_rate_info - bitrate information
  *
  * These attribute types are used with %NL80211_STA_INFO_TXRATE
@@ -3278,6 +3599,13 @@
  * @NL80211_RATE_INFO_HE_DCM: HE DCM value (u8, 0/1)
  * @NL80211_RATE_INFO_RU_ALLOC: HE RU allocation, if not present then
  *	non-OFDMA was used (u8, see &enum nl80211_he_ru_alloc)
+ * @NL80211_RATE_INFO_320_MHZ_WIDTH: 320 MHz bitrate
+ * @NL80211_RATE_INFO_EHT_MCS: EHT MCS index (u8, 0-15)
+ * @NL80211_RATE_INFO_EHT_NSS: EHT NSS value (u8, 1-8)
+ * @NL80211_RATE_INFO_EHT_GI: EHT guard interval identifier
+ *	(u8, see &enum nl80211_eht_gi)
+ * @NL80211_RATE_INFO_EHT_RU_ALLOC: EHT RU allocation, if not present then
+ *	non-OFDMA was used (u8, see &enum nl80211_eht_ru_alloc)
  * @__NL80211_RATE_INFO_AFTER_LAST: internal use
  */
 enum nl80211_rate_info {
@@ -3299,6 +3627,11 @@
 	NL80211_RATE_INFO_HE_GI,
 	NL80211_RATE_INFO_HE_DCM,
 	NL80211_RATE_INFO_HE_RU_ALLOC,
+	NL80211_RATE_INFO_320_MHZ_WIDTH,
+	NL80211_RATE_INFO_EHT_MCS,
+	NL80211_RATE_INFO_EHT_NSS,
+	NL80211_RATE_INFO_EHT_GI,
+	NL80211_RATE_INFO_EHT_RU_ALLOC,
 
 	/* keep last */
 	__NL80211_RATE_INFO_AFTER_LAST,
@@ -3609,11 +3942,20 @@
  *     capabilities IE
  * @NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE: HE PPE thresholds information as
  *     defined in HE capabilities IE
- * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band HE capability attribute currently
- *     defined
  * @NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA: HE 6GHz band capabilities (__le16),
  *	given for all 6 GHz band channels
+ * @NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS: vendor element capabilities that are
+ *	advertised on this band/for this iftype (binary)
+ * @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC: EHT MAC capabilities as in EHT
+ *	capabilities element
+ * @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY: EHT PHY capabilities as in EHT
+ *	capabilities element
+ * @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET: EHT supported NSS/MCS as in EHT
+ *	capabilities element
+ * @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE: EHT PPE thresholds information as
+ *	defined in EHT capabilities element
  * @__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST: internal use
+ * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band attribute currently defined
  */
 enum nl80211_band_iftype_attr {
 	__NL80211_BAND_IFTYPE_ATTR_INVALID,
@@ -3624,6 +3966,11 @@
 	NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET,
 	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE,
 	NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA,
+	NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS,
+	NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC,
+	NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY,
+	NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET,
+	NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE,
 
 	/* keep last */
 	__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST,
@@ -3768,6 +4115,10 @@
  *	on this channel in current regulatory domain.
  * @NL80211_FREQUENCY_ATTR_16MHZ: 16 MHz operation is allowed
  *	on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_NO_320MHZ: any 320 MHz channel using this channel
+ *	as the primary or any of the secondary channels isn't possible
+ * @NL80211_FREQUENCY_ATTR_NO_EHT: EHT operation is not allowed on this channel
+ *	in current regulatory domain.
  * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
  *	currently defined
  * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
@@ -3804,6 +4155,8 @@
 	NL80211_FREQUENCY_ATTR_4MHZ,
 	NL80211_FREQUENCY_ATTR_8MHZ,
 	NL80211_FREQUENCY_ATTR_16MHZ,
+	NL80211_FREQUENCY_ATTR_NO_320MHZ,
+	NL80211_FREQUENCY_ATTR_NO_EHT,
 
 	/* keep last */
 	__NL80211_FREQUENCY_ATTR_AFTER_LAST,
@@ -4002,6 +4355,7 @@
  * @NL80211_RRF_NO_80MHZ: 80MHz operation not allowed
  * @NL80211_RRF_NO_160MHZ: 160MHz operation not allowed
  * @NL80211_RRF_NO_HE: HE operation not allowed
+ * @NL80211_RRF_NO_320MHZ: 320MHz operation not allowed
  */
 enum nl80211_reg_rule_flags {
 	NL80211_RRF_NO_OFDM		= 1<<0,
@@ -4020,6 +4374,7 @@
 	NL80211_RRF_NO_80MHZ		= 1<<15,
 	NL80211_RRF_NO_160MHZ		= 1<<16,
 	NL80211_RRF_NO_HE		= 1<<17,
+	NL80211_RRF_NO_320MHZ		= 1<<18,
 };
 
 #define NL80211_RRF_PASSIVE_SCAN	NL80211_RRF_NO_IR
@@ -4517,6 +4872,8 @@
  * @NL80211_CHAN_WIDTH_4: 4 MHz OFDM channel
  * @NL80211_CHAN_WIDTH_8: 8 MHz OFDM channel
  * @NL80211_CHAN_WIDTH_16: 16 MHz OFDM channel
+ * @NL80211_CHAN_WIDTH_320: 320 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *	attribute must be provided as well
  */
 enum nl80211_chan_width {
 	NL80211_CHAN_WIDTH_20_NOHT,
@@ -4532,6 +4889,7 @@
 	NL80211_CHAN_WIDTH_4,
 	NL80211_CHAN_WIDTH_8,
 	NL80211_CHAN_WIDTH_16,
+	NL80211_CHAN_WIDTH_320,
 };
 
 /**
@@ -4603,6 +4961,8 @@
  *	Contains a nested array of signal strength attributes (u8, dBm),
  *	using the nesting index as the antenna number.
  * @NL80211_BSS_FREQUENCY_OFFSET: frequency offset in KHz
+ * @NL80211_BSS_MLO_LINK_ID: MLO link ID of the BSS (u8).
+ * @NL80211_BSS_MLD_ADDR: MLD address of this BSS if connected to it.
  * @__NL80211_BSS_AFTER_LAST: internal
  * @NL80211_BSS_MAX: highest BSS attribute
  */
@@ -4628,6 +4988,8 @@
 	NL80211_BSS_PARENT_BSSID,
 	NL80211_BSS_CHAIN_SIGNAL,
 	NL80211_BSS_FREQUENCY_OFFSET,
+	NL80211_BSS_MLO_LINK_ID,
+	NL80211_BSS_MLD_ADDR,
 
 	/* keep last */
 	__NL80211_BSS_AFTER_LAST,
@@ -4846,6 +5208,7 @@
  * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 69.12 GHz)
  * @NL80211_BAND_6GHZ: around 6 GHz band (5.9 - 7.2 GHz)
  * @NL80211_BAND_S1GHZ: around 900MHz, supported by S1G PHYs
+ * @NL80211_BAND_LC: light communication band (placeholder)
  * @NUM_NL80211_BANDS: number of bands, avoid using this in userspace
  *	since newer kernel versions may support more bands
  */
@@ -4855,6 +5218,7 @@
 	NL80211_BAND_60GHZ,
 	NL80211_BAND_6GHZ,
 	NL80211_BAND_S1GHZ,
+	NL80211_BAND_LC,
 
 	NUM_NL80211_BANDS,
 };
@@ -5421,7 +5785,7 @@
  *	=> allows 8 of AP/GO that can have BI gcd >= min gcd
  *
  *	numbers = [ #{STA} <= 2 ], channels = 2, max = 2
- *	=> allows two STAs on different channels
+ *	=> allows two STAs on the same or on different channels
  *
  *	numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4
  *	=> allows a STA plus three P2P interfaces
@@ -5466,7 +5830,7 @@
  * @NL80211_PLINK_ESTAB: mesh peer link is established
  * @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled
  * @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh
- *	plink are discarded
+ *	plink are discarded, except for authentication frames
  * @NUM_NL80211_PLINK_STATES: number of peer link states
  * @MAX_NL80211_PLINK_STATES: highest numerical value of plink states
  */
@@ -5603,13 +5967,15 @@
 	NL80211_TDLS_DISABLE_LINK,
 };
 
-/*
+/**
  * enum nl80211_ap_sme_features - device-integrated AP features
- * Reserved for future use, no bits are defined in
- * NL80211_ATTR_DEVICE_AP_SME yet.
-enum nl80211_ap_sme_features {
-};
+ * @NL80211_AP_SME_SA_QUERY_OFFLOAD: SA Query procedures offloaded to driver
+ *	when user space indicates support for SA Query procedures offload during
+ *	"start ap" with %NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT.
  */
+enum nl80211_ap_sme_features {
+	NL80211_AP_SME_SA_QUERY_OFFLOAD		= 1 << 0,
+};
 
 /**
  * enum nl80211_feature_flags - device/driver features
@@ -5620,7 +5986,7 @@
  * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up
  *	the connected inactive stations in AP mode.
  * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested
- *	to work properly to suppport receiving regulatory hints from
+ *	to work properly to support receiving regulatory hints from
  *	cellular base stations.
  * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: (no longer available, only
  *	here to reserve the value for API/ABI compatibility)
@@ -5896,6 +6262,38 @@
  * @NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP: Driver/device supports
  *	unsolicited broadcast probe response transmission
  *
+ * @NL80211_EXT_FEATURE_BEACON_RATE_HE: Driver supports beacon rate
+ *	configuration (AP/mesh) with HE rates.
+ *
+ * @NL80211_EXT_FEATURE_SECURE_LTF: Device supports secure LTF measurement
+ *      exchange protocol.
+ *
+ * @NL80211_EXT_FEATURE_SECURE_RTT: Device supports secure RTT measurement
+ *      exchange protocol.
+ *
+ * @NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE: Device supports management
+ *      frame protection for all management frames exchanged during the
+ *      negotiation and range measurement procedure.
+ *
+ * @NL80211_EXT_FEATURE_BSS_COLOR: The driver supports BSS color collision
+ *	detection and change announcemnts.
+ *
+ * @NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD: Driver running in AP mode supports
+ *	FILS encryption and decryption for (Re)Association Request and Response
+ *	frames. Userspace has to share FILS AAD details to the driver by using
+ *	@NL80211_CMD_SET_FILS_AAD.
+ *
+ * @NL80211_EXT_FEATURE_RADAR_BACKGROUND: Device supports background radar/CAC
+ *	detection.
+ *
+ * @NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE: Device can perform a MAC address
+ *	change without having to bring the underlying network device down
+ *	first. For example, in station mode this can be used to vary the
+ *	origin MAC address prior to a connection to a new AP for privacy
+ *	or other reasons. Note that certain driver specific restrictions
+ *	might apply, e.g. no scans in progress, no offchannel operations
+ *	in progress, and no active connections.
+ *
  * @NUM_NL80211_EXT_FEATURES: number of extended features.
  * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
  */
@@ -5956,6 +6354,14 @@
 	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP,
 	NL80211_EXT_FEATURE_FILS_DISCOVERY,
 	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP,
+	NL80211_EXT_FEATURE_BEACON_RATE_HE,
+	NL80211_EXT_FEATURE_SECURE_LTF,
+	NL80211_EXT_FEATURE_SECURE_RTT,
+	NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE,
+	NL80211_EXT_FEATURE_BSS_COLOR,
+	NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD,
+	NL80211_EXT_FEATURE_RADAR_BACKGROUND,
+	NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE,
 
 	/* add new features before the definition below */
 	NUM_NL80211_EXT_FEATURES,
@@ -6253,11 +6659,13 @@
  * @NL80211_TDLS_PEER_HT: TDLS peer is HT capable.
  * @NL80211_TDLS_PEER_VHT: TDLS peer is VHT capable.
  * @NL80211_TDLS_PEER_WMM: TDLS peer is WMM capable.
+ * @NL80211_TDLS_PEER_HE: TDLS peer is HE capable.
  */
 enum nl80211_tdls_peer_capability {
 	NL80211_TDLS_PEER_HT = 1<<0,
 	NL80211_TDLS_PEER_VHT = 1<<1,
 	NL80211_TDLS_PEER_WMM = 1<<2,
+	NL80211_TDLS_PEER_HE = 1<<3,
 };
 
 /**
@@ -6849,6 +7257,12 @@
  *      if neither %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor
  *	%NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based
  *	ranging will be used.
+ * @NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK: negotiate for LMR feedback. Only
+ *	valid if either %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED or
+ *	%NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
+ * @NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR: optional. The BSS color of the
+ *	responder. Only valid if %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED
+ *	or %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED is set.
  *
  * @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
  * @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
@@ -6867,6 +7281,8 @@
 	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC,
 	NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED,
 	NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED,
+	NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK,
+	NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR,
 
 	/* keep last */
 	NUM_NL80211_PMSR_FTM_REQ_ATTR,
@@ -7124,4 +7540,187 @@
 	NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_MAX =
 		__NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_LAST - 1
 };
+
+/**
+ * enum nl80211_sae_pwe_mechanism - The mechanism(s) allowed for SAE PWE
+ *	derivation. Applicable only when WPA3-Personal SAE authentication is
+ *	used.
+ *
+ * @NL80211_SAE_PWE_UNSPECIFIED: not specified, used internally to indicate that
+ *	attribute is not present from userspace.
+ * @NL80211_SAE_PWE_HUNT_AND_PECK: hunting-and-pecking loop only
+ * @NL80211_SAE_PWE_HASH_TO_ELEMENT: hash-to-element only
+ * @NL80211_SAE_PWE_BOTH: both hunting-and-pecking loop and hash-to-element
+ *	can be used.
+ */
+enum nl80211_sae_pwe_mechanism {
+	NL80211_SAE_PWE_UNSPECIFIED,
+	NL80211_SAE_PWE_HUNT_AND_PECK,
+	NL80211_SAE_PWE_HASH_TO_ELEMENT,
+	NL80211_SAE_PWE_BOTH,
+};
+
+/**
+ * enum nl80211_sar_type - type of SAR specs
+ *
+ * @NL80211_SAR_TYPE_POWER: power limitation specified in 0.25dBm unit
+ *
+ */
+enum nl80211_sar_type {
+	NL80211_SAR_TYPE_POWER,
+
+	/* add new type here */
+
+	/* Keep last */
+	NUM_NL80211_SAR_TYPE,
+};
+
+/**
+ * enum nl80211_sar_attrs - Attributes for SAR spec
+ *
+ * @NL80211_SAR_ATTR_TYPE: the SAR type as defined in &enum nl80211_sar_type.
+ *
+ * @NL80211_SAR_ATTR_SPECS: Nested array of SAR power
+ *	limit specifications. Each specification contains a set
+ *	of %nl80211_sar_specs_attrs.
+ *
+ *	For SET operation, it contains array of %NL80211_SAR_ATTR_SPECS_POWER
+ *	and %NL80211_SAR_ATTR_SPECS_RANGE_INDEX.
+ *
+ *	For sar_capa dump, it contains array of
+ *	%NL80211_SAR_ATTR_SPECS_START_FREQ
+ *	and %NL80211_SAR_ATTR_SPECS_END_FREQ.
+ *
+ * @__NL80211_SAR_ATTR_LAST: Internal
+ * @NL80211_SAR_ATTR_MAX: highest sar attribute
+ *
+ * These attributes are used with %NL80211_CMD_SET_SAR_SPEC
+ */
+enum nl80211_sar_attrs {
+	__NL80211_SAR_ATTR_INVALID,
+
+	NL80211_SAR_ATTR_TYPE,
+	NL80211_SAR_ATTR_SPECS,
+
+	__NL80211_SAR_ATTR_LAST,
+	NL80211_SAR_ATTR_MAX = __NL80211_SAR_ATTR_LAST - 1,
+};
+
+/**
+ * enum nl80211_sar_specs_attrs - Attributes for SAR power limit specs
+ *
+ * @NL80211_SAR_ATTR_SPECS_POWER: Required (s32)value to specify the actual
+ *	power limit value in units of 0.25 dBm if type is
+ *	NL80211_SAR_TYPE_POWER. (i.e., a value of 44 represents 11 dBm).
+ *	0 means userspace doesn't have SAR limitation on this associated range.
+ *
+ * @NL80211_SAR_ATTR_SPECS_RANGE_INDEX: Required (u32) value to specify the
+ *	index of exported freq range table and the associated power limitation
+ *	is applied to this range.
+ *
+ *	Userspace isn't required to set all the ranges advertised by WLAN driver,
+ *	and userspace can skip some certain ranges. These skipped ranges don't
+ *	have SAR limitations, and they are same as setting the
+ *	%NL80211_SAR_ATTR_SPECS_POWER to any unreasonable high value because any
+ *	value higher than regulatory allowed value just means SAR power
+ *	limitation is removed, but it's required to set at least one range.
+ *	It's not allowed to set duplicated range in one SET operation.
+ *
+ *	Every SET operation overwrites previous SET operation.
+ *
+ * @NL80211_SAR_ATTR_SPECS_START_FREQ: Required (u32) value to specify the start
+ *	frequency of this range edge when registering SAR capability to wiphy.
+ *	It's not a channel center frequency. The unit is kHz.
+ *
+ * @NL80211_SAR_ATTR_SPECS_END_FREQ: Required (u32) value to specify the end
+ *	frequency of this range edge when registering SAR capability to wiphy.
+ *	It's not a channel center frequency. The unit is kHz.
+ *
+ * @__NL80211_SAR_ATTR_SPECS_LAST: Internal
+ * @NL80211_SAR_ATTR_SPECS_MAX: highest sar specs attribute
+ */
+enum nl80211_sar_specs_attrs {
+	__NL80211_SAR_ATTR_SPECS_INVALID,
+
+	NL80211_SAR_ATTR_SPECS_POWER,
+	NL80211_SAR_ATTR_SPECS_RANGE_INDEX,
+	NL80211_SAR_ATTR_SPECS_START_FREQ,
+	NL80211_SAR_ATTR_SPECS_END_FREQ,
+
+	__NL80211_SAR_ATTR_SPECS_LAST,
+	NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
+};
+
+/**
+ * enum nl80211_mbssid_config_attributes - multiple BSSID (MBSSID) and enhanced
+ * multi-BSSID advertisements (EMA) in AP mode.
+ * Kernel uses some of these attributes to advertise driver's support for
+ * MBSSID and EMA.
+ * Remaining attributes should be used by the userspace to configure the
+ * features.
+ *
+ * @__NL80211_MBSSID_CONFIG_ATTR_INVALID: Invalid
+ *
+ * @NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES: Used by the kernel to advertise
+ *	the maximum number of MBSSID interfaces supported by the driver.
+ *	Driver should indicate MBSSID support by setting
+ *	wiphy->mbssid_max_interfaces to a value more than or equal to 2.
+ *
+ * @NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY: Used by the kernel
+ *	to advertise the maximum profile periodicity supported by the driver
+ *	if EMA is enabled. Driver should indicate EMA support to the userspace
+ *	by setting wiphy->ema_max_profile_periodicity to
+ *	a non-zero value.
+ *
+ * @NL80211_MBSSID_CONFIG_ATTR_INDEX: Mandatory parameter to pass the index of
+ *	this BSS (u8) in the multiple BSSID set.
+ *	Value must be set to 0 for the transmitting interface and non-zero for
+ *	all non-transmitting interfaces. The userspace will be responsible
+ *	for using unique indices for the interfaces.
+ *	Range: 0 to wiphy->mbssid_max_interfaces-1.
+ *
+ * @NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX: Mandatory parameter for
+ *	a non-transmitted profile which provides the interface index (u32) of
+ *	the transmitted profile. The value must match one of the interface
+ *	indices advertised by the kernel. Optional if the interface being set up
+ *	is the transmitting one, however, if provided then the value must match
+ *	the interface index of the same.
+ *
+ * @NL80211_MBSSID_CONFIG_ATTR_EMA: Flag used to enable EMA AP feature.
+ *	Setting this flag is permitted only if the driver advertises EMA support
+ *	by setting wiphy->ema_max_profile_periodicity to non-zero.
+ *
+ * @__NL80211_MBSSID_CONFIG_ATTR_LAST: Internal
+ * @NL80211_MBSSID_CONFIG_ATTR_MAX: highest attribute
+ */
+enum nl80211_mbssid_config_attributes {
+	__NL80211_MBSSID_CONFIG_ATTR_INVALID,
+
+	NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES,
+	NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY,
+	NL80211_MBSSID_CONFIG_ATTR_INDEX,
+	NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX,
+	NL80211_MBSSID_CONFIG_ATTR_EMA,
+
+	/* keep last */
+	__NL80211_MBSSID_CONFIG_ATTR_LAST,
+	NL80211_MBSSID_CONFIG_ATTR_MAX = __NL80211_MBSSID_CONFIG_ATTR_LAST - 1,
+};
+
+/**
+ * enum nl80211_ap_settings_flags - AP settings flags
+ *
+ * @NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT: AP supports external
+ *	authentication.
+ * @NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT: Userspace supports SA Query
+ *	procedures offload to driver. If driver advertises
+ *	%NL80211_AP_SME_SA_QUERY_OFFLOAD in AP SME features, userspace shall
+ *	ignore SA Query procedures and validations when this flag is set by
+ *	userspace.
+ */
+enum nl80211_ap_settings_flags {
+	NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT	= 1 << 0,
+	NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT	= 1 << 1,
+};
+
 #endif /* __LINUX_NL80211_H */
diff --git a/src/basic/linux/pkt_sched.h b/src/basic/linux/pkt_sched.h
index 9e7c2c6..000eec1 100644
--- a/src/basic/linux/pkt_sched.h
+++ b/src/basic/linux/pkt_sched.h
@@ -434,6 +434,7 @@
 	TCA_HTB_RATE64,
 	TCA_HTB_CEIL64,
 	TCA_HTB_PAD,
+	TCA_HTB_OFFLOAD,
 	__TCA_HTB_MAX,
 };
 
@@ -826,6 +827,8 @@
 
 /* FQ_CODEL */
 
+#define FQ_CODEL_QUANTUM_MAX (1 << 20)
+
 enum {
 	TCA_FQ_CODEL_UNSPEC,
 	TCA_FQ_CODEL_TARGET,
@@ -837,6 +840,8 @@
 	TCA_FQ_CODEL_CE_THRESHOLD,
 	TCA_FQ_CODEL_DROP_BATCH_SIZE,
 	TCA_FQ_CODEL_MEMORY_LIMIT,
+	TCA_FQ_CODEL_CE_THRESHOLD_SELECTOR,
+	TCA_FQ_CODEL_CE_THRESHOLD_MASK,
 	__TCA_FQ_CODEL_MAX
 };
 
@@ -1228,6 +1233,16 @@
 #define TCA_TAPRIO_ATTR_FLAG_FULL_OFFLOAD	_BITUL(1)
 
 enum {
+	TCA_TAPRIO_TC_ENTRY_UNSPEC,
+	TCA_TAPRIO_TC_ENTRY_INDEX,		/* u32 */
+	TCA_TAPRIO_TC_ENTRY_MAX_SDU,		/* u32 */
+
+	/* add new constants above here */
+	__TCA_TAPRIO_TC_ENTRY_CNT,
+	TCA_TAPRIO_TC_ENTRY_MAX = (__TCA_TAPRIO_TC_ENTRY_CNT - 1)
+};
+
+enum {
 	TCA_TAPRIO_ATTR_UNSPEC,
 	TCA_TAPRIO_ATTR_PRIOMAP, /* struct tc_mqprio_qopt */
 	TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST, /* nested of entry */
@@ -1240,6 +1255,7 @@
 	TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION, /* s64 */
 	TCA_TAPRIO_ATTR_FLAGS, /* u32 */
 	TCA_TAPRIO_ATTR_TXTIME_DELAY, /* u32 */
+	TCA_TAPRIO_ATTR_TC_ENTRY, /* nest */
 	__TCA_TAPRIO_ATTR_MAX,
 };
 
diff --git a/src/basic/linux/rtnetlink.h b/src/basic/linux/rtnetlink.h
index 9b814c9..eb2747d 100644
--- a/src/basic/linux/rtnetlink.h
+++ b/src/basic/linux/rtnetlink.h
@@ -146,6 +146,8 @@
 #define RTM_NEWSTATS RTM_NEWSTATS
 	RTM_GETSTATS = 94,
 #define RTM_GETSTATS RTM_GETSTATS
+	RTM_SETSTATS,
+#define RTM_SETSTATS RTM_SETSTATS
 
 	RTM_NEWCACHEREPORT = 96,
 #define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
@@ -178,6 +180,20 @@
 	RTM_GETVLAN,
 #define RTM_GETVLAN	RTM_GETVLAN
 
+	RTM_NEWNEXTHOPBUCKET = 116,
+#define RTM_NEWNEXTHOPBUCKET	RTM_NEWNEXTHOPBUCKET
+	RTM_DELNEXTHOPBUCKET,
+#define RTM_DELNEXTHOPBUCKET	RTM_DELNEXTHOPBUCKET
+	RTM_GETNEXTHOPBUCKET,
+#define RTM_GETNEXTHOPBUCKET	RTM_GETNEXTHOPBUCKET
+
+	RTM_NEWTUNNEL = 120,
+#define RTM_NEWTUNNEL	RTM_NEWTUNNEL
+	RTM_DELTUNNEL,
+#define RTM_DELTUNNEL	RTM_DELTUNNEL
+	RTM_GETTUNNEL,
+#define RTM_GETTUNNEL	RTM_GETTUNNEL
+
 	__RTM_MAX,
 #define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
 };
@@ -283,6 +299,7 @@
 #define RTPROT_MROUTED		17	/* Multicast daemon */
 #define RTPROT_KEEPALIVED	18	/* Keepalived daemon */
 #define RTPROT_BABEL		42	/* Babel daemon */
+#define RTPROT_OPENR		99	/* Open Routing (Open/R) Routes */
 #define RTPROT_BGP		186	/* BGP Routes */
 #define RTPROT_ISIS		187	/* ISIS Routes */
 #define RTPROT_OSPF		188	/* OSPF Routes */
@@ -319,6 +336,11 @@
 #define RTM_F_FIB_MATCH	        0x2000	/* return full fib lookup match */
 #define RTM_F_OFFLOAD		0x4000	/* route is offloaded */
 #define RTM_F_TRAP		0x8000	/* route is trapping packets */
+#define RTM_F_OFFLOAD_FAILED	0x20000000 /* route offload failed, this value
+					    * is chosen to avoid conflicts with
+					    * other flags defined in
+					    * include/uapi/linux/ipv6_route.h
+					    */
 
 /* Reserved table identifiers */
 
@@ -396,11 +418,13 @@
 #define RTNH_F_DEAD		1	/* Nexthop is dead (used by multipath)	*/
 #define RTNH_F_PERVASIVE	2	/* Do recursive gateway lookup	*/
 #define RTNH_F_ONLINK		4	/* Gateway is forced on link	*/
-#define RTNH_F_OFFLOAD		8	/* offloaded route */
+#define RTNH_F_OFFLOAD		8	/* Nexthop is offloaded */
 #define RTNH_F_LINKDOWN		16	/* carrier-down on nexthop */
 #define RTNH_F_UNRESOLVED	32	/* The entry is unresolved (ipmr) */
+#define RTNH_F_TRAP		64	/* Nexthop is trapping packets */
 
-#define RTNH_COMPARE_MASK	(RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD)
+#define RTNH_COMPARE_MASK	(RTNH_F_DEAD | RTNH_F_LINKDOWN | \
+				 RTNH_F_OFFLOAD | RTNH_F_TRAP)
 
 /* Macros to handle hexthops */
 
@@ -416,7 +440,7 @@
 /* RTA_VIA */
 struct rtvia {
 	__kernel_sa_family_t	rtvia_family;
-	__u8			rtvia_addr[0];
+	__u8			rtvia_addr[];
 };
 
 /* RTM_CACHEINFO */
@@ -739,6 +763,12 @@
 #define RTNLGRP_NEXTHOP		RTNLGRP_NEXTHOP
 	RTNLGRP_BRVLAN,
 #define RTNLGRP_BRVLAN		RTNLGRP_BRVLAN
+	RTNLGRP_MCTP_IFADDR,
+#define RTNLGRP_MCTP_IFADDR	RTNLGRP_MCTP_IFADDR
+	RTNLGRP_TUNNEL,
+#define RTNLGRP_TUNNEL		RTNLGRP_TUNNEL
+	RTNLGRP_STATS,
+#define RTNLGRP_STATS		RTNLGRP_STATS
 	__RTNLGRP_MAX
 };
 #define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
@@ -766,12 +796,18 @@
 #define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
 /* tcamsg flags stored in attribute TCA_ROOT_FLAGS
  *
- * TCA_FLAG_LARGE_DUMP_ON user->kernel to request for larger than TCA_ACT_MAX_PRIO
- * actions in a dump. All dump responses will contain the number of actions
- * being dumped stored in for user app's consumption in TCA_ROOT_COUNT
+ * TCA_ACT_FLAG_LARGE_DUMP_ON user->kernel to request for larger than
+ * TCA_ACT_MAX_PRIO actions in a dump. All dump responses will contain the
+ * number of actions being dumped stored in for user app's consumption in
+ * TCA_ROOT_COUNT
+ *
+ * TCA_ACT_FLAG_TERSE_DUMP user->kernel to request terse (brief) dump that only
+ * includes essential action info (kind, index, etc.)
  *
  */
 #define TCA_FLAG_LARGE_DUMP_ON		(1 << 0)
+#define TCA_ACT_FLAG_LARGE_DUMP_ON	TCA_FLAG_LARGE_DUMP_ON
+#define TCA_ACT_FLAG_TERSE_DUMP		(1 << 1)
 
 /* New extended info filters for IFLA_EXT_MASK */
 #define RTEXT_FILTER_VF		(1 << 0)
@@ -779,6 +815,9 @@
 #define RTEXT_FILTER_BRVLAN_COMPRESSED	(1 << 2)
 #define	RTEXT_FILTER_SKIP_STATS	(1 << 3)
 #define RTEXT_FILTER_MRP	(1 << 4)
+#define RTEXT_FILTER_CFM_CONFIG	(1 << 5)
+#define RTEXT_FILTER_CFM_STATUS	(1 << 6)
+#define RTEXT_FILTER_MST	(1 << 7)
 
 /* End of information exported to user level */
 
diff --git a/src/basic/linux/stddef.h b/src/basic/linux/stddef.h
new file mode 100644
index 0000000..1a73963
--- /dev/null
+++ b/src/basic/linux/stddef.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _UAPI_LINUX_STDDEF_H
+#define _UAPI_LINUX_STDDEF_H
+
+
+#ifndef __always_inline
+#define __always_inline inline
+#endif
+
+/**
+ * __struct_group() - Create a mirrored named and anonyomous struct
+ *
+ * @TAG: The tag name for the named sub-struct (usually empty)
+ * @NAME: The identifier name of the mirrored sub-struct
+ * @ATTRS: Any struct attributes (usually empty)
+ * @MEMBERS: The member declarations for the mirrored structs
+ *
+ * Used to create an anonymous union of two structs with identical layout
+ * and size: one anonymous and one named. The former's members can be used
+ * normally without sub-struct naming, and the latter can be used to
+ * reason about the start, end, and size of the group of struct members.
+ * The named struct can also be explicitly tagged for layer reuse, as well
+ * as both having struct attributes appended.
+ */
+#define __struct_group(TAG, NAME, ATTRS, MEMBERS...) \
+	union { \
+		struct { MEMBERS } ATTRS; \
+		struct TAG { MEMBERS } ATTRS NAME; \
+	}
+
+/**
+ * __DECLARE_FLEX_ARRAY() - Declare a flexible array usable in a union
+ *
+ * @TYPE: The type of each flexible array element
+ * @NAME: The name of the flexible array member
+ *
+ * In order to have a flexible array member in a union or alone in a
+ * struct, it needs to be wrapped in an anonymous struct with at least 1
+ * named member, but that member can be empty.
+ */
+#define __DECLARE_FLEX_ARRAY(TYPE, NAME)	\
+	struct { \
+		struct { } __empty_ ## NAME; \
+		TYPE NAME[]; \
+	}
+#endif
diff --git a/src/basic/linux/update.sh b/src/basic/linux/update.sh
index 1ada894..6155766 100755
--- a/src/basic/linux/update.sh
+++ b/src/basic/linux/update.sh
@@ -4,11 +4,8 @@
 set -o pipefail
 
 for i in *.h */*.h; do
-    if [[ "$i" == "loadavg.h" ]]; then
-        curl --fail "https://raw.githubusercontent.com/torvalds/linux/master/include/linux/sched/$i" -o "$i"
-    else
-        curl --fail "https://raw.githubusercontent.com/torvalds/linux/master/include/uapi/linux/$i" -o "$i"
-    fi
+    curl --fail "https://raw.githubusercontent.com/torvalds/linux/master/include/uapi/linux/$i" -o "$i"
 
-    sed -i -e 's/__user //g' -e '/^#include <linux\/compiler.h>/ d' "$i"
+    sed -r -i -e 's/__user //g' -e '/^#include <linux\/compiler(_types)?.h>/ d' "$i"
+    sed -r -i 's/^(#include <linux\/fs\.h>)/#if WANT_LINUX_FS_H\n\1\n#endif/' "$i"
 done
diff --git a/src/basic/list.h b/src/basic/list.h
index 256b718..ffc8bd8 100644
--- a/src/basic/list.h
+++ b/src/basic/list.h
@@ -1,8 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "macro.h"
-
 /* The head of the linked list. Use this in the structure that shall
  * contain the head of the linked list */
 #define LIST_HEAD(t,name)                                               \
@@ -28,26 +26,27 @@
 
 /* Prepend an item to the list */
 #define LIST_PREPEND(name,head,item)                                    \
-        do {                                                            \
+        ({                                                              \
                 typeof(*(head)) **_head = &(head), *_item = (item);     \
                 assert(_item);                                          \
                 if ((_item->name##_next = *_head))                      \
                         _item->name##_next->name##_prev = _item;        \
                 _item->name##_prev = NULL;                              \
                 *_head = _item;                                         \
-        } while (false)
+                _item;                                                  \
+        })
 
 /* Append an item to the list */
 #define LIST_APPEND(name,head,item)                                     \
-        do {                                                            \
+        ({                                                              \
                 typeof(*(head)) **_hhead = &(head), *_tail;             \
-                LIST_FIND_TAIL(name, *_hhead, _tail);                   \
+                _tail = LIST_FIND_TAIL(name, *_hhead);                  \
                 LIST_INSERT_AFTER(name, *_hhead, _tail, item);          \
-        } while (false)
+        })
 
 /* Remove an item from the list */
 #define LIST_REMOVE(name,head,item)                                     \
-        do {                                                            \
+        ({                                                            \
                 typeof(*(head)) **_head = &(head), *_item = (item);     \
                 assert(_item);                                          \
                 if (_item->name##_next)                                 \
@@ -59,37 +58,30 @@
                         *_head = _item->name##_next;                    \
                 }                                                       \
                 _item->name##_next = _item->name##_prev = NULL;         \
-        } while (false)
+                _item;                                                  \
+        })
 
 /* Find the head of the list */
-#define LIST_FIND_HEAD(name,item,head)                                  \
-        do {                                                            \
+#define LIST_FIND_HEAD(name,item)                                       \
+        ({                                                              \
                 typeof(*(item)) *_item = (item);                        \
-                if (!_item)                                             \
-                        (head) = NULL;                                  \
-                else {                                                  \
-                        while (_item->name##_prev)                      \
-                                _item = _item->name##_prev;             \
-                        (head) = _item;                                 \
-                }                                                       \
-        } while (false)
+                while (_item && _item->name##_prev)                     \
+                        _item = _item->name##_prev;                     \
+                _item;                                                  \
+        })
 
 /* Find the tail of the list */
-#define LIST_FIND_TAIL(name,item,tail)                                  \
-        do {                                                            \
+#define LIST_FIND_TAIL(name,item)                                       \
+        ({                                                              \
                 typeof(*(item)) *_item = (item);                        \
-                if (!_item)                                             \
-                        (tail) = NULL;                                  \
-                else {                                                  \
-                        while (_item->name##_next)                      \
-                                _item = _item->name##_next;             \
-                        (tail) = _item;                                 \
-                }                                                       \
-        } while (false)
+                while (_item && _item->name##_next)                     \
+                        _item = _item->name##_next;                     \
+                _item;                                                  \
+        })
 
 /* Insert an item after another one (a = where, b = what) */
 #define LIST_INSERT_AFTER(name,head,a,b)                                \
-        do {                                                            \
+        ({                                                              \
                 typeof(*(head)) **_head = &(head), *_a = (a), *_b = (b); \
                 assert(_b);                                             \
                 if (!_a) {                                              \
@@ -103,11 +95,12 @@
                         _b->name##_prev = _a;                           \
                         _a->name##_next = _b;                           \
                 }                                                       \
-        } while (false)
+                _b;                                                     \
+        })
 
 /* Insert an item before another one (a = where, b = what) */
 #define LIST_INSERT_BEFORE(name,head,a,b)                               \
-        do {                                                            \
+        ({                                                              \
                 typeof(*(head)) **_head = &(head), *_a = (a), *_b = (b); \
                 assert(_b);                                             \
                 if (!_a) {                                              \
@@ -131,56 +124,71 @@
                         _b->name##_next = _a;                           \
                         _a->name##_prev = _b;                           \
                 }                                                       \
-        } while (false)
+                _b;                                                     \
+        })
 
 #define LIST_JUST_US(name,item)                                         \
-        (!(item)->name##_prev && !(item)->name##_next)                  \
+        (!(item)->name##_prev && !(item)->name##_next)
+
+/* The type of the iterator 'i' is automatically determined by the type of 'head', and declared in the
+ * loop. Hence, do not declare the same variable in the outer scope. Sometimes, we set 'head' through
+ * hashmap_get(). In that case, you need to explicitly cast the result. */
+#define LIST_FOREACH_WITH_NEXT(name,i,n,head)                           \
+        for (typeof(*(head)) *n, *i = (head); i && (n = i->name##_next, true); i = n)
 
 #define LIST_FOREACH(name,i,head)                                       \
-        for ((i) = (head); (i); (i) = (i)->name##_next)
+        LIST_FOREACH_WITH_NEXT(name, i, UNIQ_T(n, UNIQ), head)
 
-#define LIST_FOREACH_SAFE(name,i,n,head)                                \
-        for ((i) = (head); (i) && (((n) = (i)->name##_next), 1); (i) = (n))
+#define _LIST_FOREACH_WITH_PREV(name,i,p,start)                         \
+        for (typeof(*(start)) *p, *i = (start); i && (p = i->name##_prev, true); i = p)
 
-#define LIST_FOREACH_BEFORE(name,i,p)                                   \
-        for ((i) = (p)->name##_prev; (i); (i) = (i)->name##_prev)
-
-#define LIST_FOREACH_AFTER(name,i,p)                                    \
-        for ((i) = (p)->name##_next; (i); (i) = (i)->name##_next)
+#define LIST_FOREACH_BACKWARDS(name,i,start)                            \
+        _LIST_FOREACH_WITH_PREV(name, i, UNIQ_T(p, UNIQ), start)
 
 /* Iterate through all the members of the list p is included in, but skip over p */
 #define LIST_FOREACH_OTHERS(name,i,p)                                   \
-        for (({                                                         \
-                (i) = (p);                                              \
-                while ((i) && (i)->name##_prev)                         \
-                        (i) = (i)->name##_prev;                         \
-                if ((i) == (p))                                         \
-                        (i) = (p)->name##_next;                         \
-             });                                                        \
-             (i);                                                       \
-             (i) = (i)->name##_next == (p) ? (p)->name##_next : (i)->name##_next)
+        for (typeof(*(p)) *_p = (p), *i = ({                            \
+                                typeof(*_p) *_j = _p;                   \
+                                while (_j && _j->name##_prev)           \
+                                        _j = _j->name##_prev;           \
+                                if (_j == _p)                           \
+                                        _j = _p->name##_next;           \
+                                _j;                                     \
+                        });                                             \
+             i;                                                         \
+             i = i->name##_next == _p ? _p->name##_next : i->name##_next)
 
-/* Loop starting from p->next until p->prev.
-   p can be adjusted meanwhile. */
+/* Loop starting from p->next until p->prev. p can be adjusted meanwhile. */
 #define LIST_LOOP_BUT_ONE(name,i,head,p)                                \
-        for ((i) = (p)->name##_next ? (p)->name##_next : (head);        \
-             (i) != (p);                                                \
-             (i) = (i)->name##_next ? (i)->name##_next : (head))
-
-#define LIST_IS_EMPTY(head)                                             \
-        (!(head))
+        for (typeof(*(p)) *i = (p)->name##_next ? (p)->name##_next : (head); \
+             i != (p);                                                  \
+             i = i->name##_next ? i->name##_next : (head))
 
 /* Join two lists tail to head: a->b, c->d to a->b->c->d and de-initialise second list */
 #define LIST_JOIN(name,a,b)                                             \
-        do {                                                            \
+        ({                                                              \
                 assert(b);                                              \
                 if (!(a))                                               \
                         (a) = (b);                                      \
                 else {                                                  \
                         typeof(*(a)) *_head = (b), *_tail;              \
-                        LIST_FIND_TAIL(name, (a), _tail);               \
+                        _tail = LIST_FIND_TAIL(name, (a));              \
                         _tail->name##_next = _head;                     \
                         _head->name##_prev = _tail;                     \
                 }                                                       \
                 (b) = NULL;                                             \
-        } while (false)
+                a;                                                      \
+        })
+
+#define LIST_POP(name, a)                                               \
+        ({                                                              \
+                typeof(a)* _a = &(a);                                   \
+                typeof(a) _p = *_a;                                     \
+                if (_p)                                                 \
+                        LIST_REMOVE(name, *_a, _p);                     \
+                _p;                                                     \
+        })
+
+/* Now include "macro.h", because we want our definition of assert() which the macros above use. We include
+ * it down here instead of up top, since macro.h pulls in log.h which in turn needs our own definitions. */
+#include "macro.h"
diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c
index b181646..d94fbcf 100644
--- a/src/basic/locale-util.c
+++ b/src/basic/locale-util.c
@@ -2,7 +2,6 @@
 
 #include <errno.h>
 #include <fcntl.h>
-#include <ftw.h>
 #include <langinfo.h>
 #include <libintl.h>
 #include <stddef.h>
@@ -11,7 +10,7 @@
 #include <sys/mman.h>
 #include <sys/stat.h>
 
-#include "def.h"
+#include "constants.h"
 #include "dirent-util.h"
 #include "env-util.h"
 #include "fd-util.h"
@@ -96,7 +95,7 @@
         const struct locarhead *h;
         const struct namehashent *e;
         const void *p = MAP_FAILED;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         size_t sz = 0;
         struct stat st;
         int r;
@@ -161,22 +160,21 @@
         return r;
 }
 
-static int add_locales_from_libdir (Set *locales) {
+static int add_locales_from_libdir(Set *locales) {
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *entry;
         int r;
 
         dir = opendir("/usr/lib/locale");
         if (!dir)
                 return errno == ENOENT ? 0 : -errno;
 
-        FOREACH_DIRENT(entry, dir, return -errno) {
+        FOREACH_DIRENT(de, dir, return -errno) {
                 char *z;
 
-                if (entry->d_type != DT_DIR)
+                if (de->d_type != DT_DIR)
                         continue;
 
-                z = normalize_locale(entry->d_name);
+                z = normalize_locale(de->d_name);
                 if (!z)
                         return -ENOMEM;
 
@@ -189,7 +187,7 @@
 }
 
 int get_locales(char ***ret) {
-        _cleanup_set_free_ Set *locales = NULL;
+        _cleanup_set_free_free_ Set *locales = NULL;
         _cleanup_strv_free_ char **l = NULL;
         int r;
 
@@ -205,10 +203,22 @@
         if (r < 0)
                 return r;
 
+        char *locale;
+        SET_FOREACH(locale, locales) {
+                r = locale_is_installed(locale);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        free(set_remove(locales, locale));
+        }
+
         l = set_get_strv(locales);
         if (!l)
                 return -ENOMEM;
 
+        /* Now, all elements are owned by strv 'l'. Hence, do not call set_free_free(). */
+        locales = set_free(locales);
+
         r = getenv_bool("SYSTEMD_LIST_NON_UTF8_LOCALES");
         if (r == -ENXIO || r == 0) {
                 char **a, **b;
@@ -276,8 +286,9 @@
 }
 
 bool is_locale_utf8(void) {
-        const char *set;
         static int cached_answer = -1;
+        const char *set;
+        int r;
 
         /* Note that we default to 'true' here, since today UTF8 is
          * pretty much supported everywhere. */
@@ -285,6 +296,13 @@
         if (cached_answer >= 0)
                 goto out;
 
+        r = getenv_bool_secure("SYSTEMD_UTF8");
+        if (r >= 0) {
+                cached_answer = r;
+                goto out;
+        } else if (r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_UTF8, ignoring: %m");
+
         if (!setlocale(LC_ALL, "")) {
                 cached_answer = true;
                 goto out;
@@ -321,121 +339,6 @@
         return (bool) cached_answer;
 }
 
-bool emoji_enabled(void) {
-        static int cached_emoji_enabled = -1;
-
-        if (cached_emoji_enabled < 0) {
-                int val;
-
-                val = getenv_bool("SYSTEMD_EMOJI");
-                if (val < 0)
-                        cached_emoji_enabled =
-                                is_locale_utf8() &&
-                                !STRPTR_IN_SET(getenv("TERM"), "dumb", "linux");
-                else
-                        cached_emoji_enabled = val;
-        }
-
-        return cached_emoji_enabled;
-}
-
-const char *special_glyph(SpecialGlyph code) {
-
-        /* A list of a number of interesting unicode glyphs we can use to decorate our output. It's probably wise to be
-         * conservative here, and primarily stick to the glyphs defined in the eurlatgr font, so that display still
-         * works reasonably well on the Linux console. For details see:
-         *
-         * http://git.altlinux.org/people/legion/packages/kbd.git?p=kbd.git;a=blob;f=data/consolefonts/README.eurlatgr
-         */
-
-        static const char* const draw_table[2][_SPECIAL_GLYPH_MAX] = {
-                /* ASCII fallback */
-                [false] = {
-                        [SPECIAL_GLYPH_TREE_VERTICAL]           = "| ",
-                        [SPECIAL_GLYPH_TREE_BRANCH]             = "|-",
-                        [SPECIAL_GLYPH_TREE_RIGHT]              = "`-",
-                        [SPECIAL_GLYPH_TREE_SPACE]              = "  ",
-                        [SPECIAL_GLYPH_TRIANGULAR_BULLET]       = ">",
-                        [SPECIAL_GLYPH_BLACK_CIRCLE]            = "*",
-                        [SPECIAL_GLYPH_WHITE_CIRCLE]            = "*",
-                        [SPECIAL_GLYPH_MULTIPLICATION_SIGN]     = "x",
-                        [SPECIAL_GLYPH_CIRCLE_ARROW]            = "*",
-                        [SPECIAL_GLYPH_BULLET]                  = "*",
-                        [SPECIAL_GLYPH_MU]                      = "u",
-                        [SPECIAL_GLYPH_CHECK_MARK]              = "+",
-                        [SPECIAL_GLYPH_CROSS_MARK]              = "-",
-                        [SPECIAL_GLYPH_LIGHT_SHADE]             = "-",
-                        [SPECIAL_GLYPH_DARK_SHADE]              = "X",
-                        [SPECIAL_GLYPH_SIGMA]                   = "S",
-                        [SPECIAL_GLYPH_ARROW]                   = "->",
-                        [SPECIAL_GLYPH_ELLIPSIS]                = "...",
-                        [SPECIAL_GLYPH_EXTERNAL_LINK]           = "[LNK]",
-                        [SPECIAL_GLYPH_ECSTATIC_SMILEY]         = ":-]",
-                        [SPECIAL_GLYPH_HAPPY_SMILEY]            = ":-}",
-                        [SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY]   = ":-)",
-                        [SPECIAL_GLYPH_NEUTRAL_SMILEY]          = ":-|",
-                        [SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = ":-(",
-                        [SPECIAL_GLYPH_UNHAPPY_SMILEY]          = ":-{",
-                        [SPECIAL_GLYPH_DEPRESSED_SMILEY]        = ":-[",
-                        [SPECIAL_GLYPH_LOCK_AND_KEY]            = "o-,",
-                        [SPECIAL_GLYPH_TOUCH]                   = "O=",    /* Yeah, not very convincing, can you do it better? */
-                },
-
-                /* UTF-8 */
-                [true] = {
-                        /* The following are multiple glyphs in both ASCII and in UNICODE */
-                        [SPECIAL_GLYPH_TREE_VERTICAL]           = "\342\224\202 ",            /* │  */
-                        [SPECIAL_GLYPH_TREE_BRANCH]             = "\342\224\234\342\224\200", /* ├─ */
-                        [SPECIAL_GLYPH_TREE_RIGHT]              = "\342\224\224\342\224\200", /* └─ */
-                        [SPECIAL_GLYPH_TREE_SPACE]              = "  ",                       /*    */
-
-                        /* Single glyphs in both cases */
-                        [SPECIAL_GLYPH_TRIANGULAR_BULLET]       = "\342\200\243",             /* ‣ */
-                        [SPECIAL_GLYPH_BLACK_CIRCLE]            = "\342\227\217",             /* ● */
-                        [SPECIAL_GLYPH_WHITE_CIRCLE]            = "\u25CB",                   /* ○ */
-                        [SPECIAL_GLYPH_MULTIPLICATION_SIGN]     = "\u00D7",                   /* × */
-                        [SPECIAL_GLYPH_CIRCLE_ARROW]            = "\u21BB",                   /* ↻ */
-                        [SPECIAL_GLYPH_BULLET]                  = "\342\200\242",             /* • */
-                        [SPECIAL_GLYPH_MU]                      = "\316\274",                 /* μ (actually called: GREEK SMALL LETTER MU) */
-                        [SPECIAL_GLYPH_CHECK_MARK]              = "\342\234\223",             /* ✓ */
-                        [SPECIAL_GLYPH_CROSS_MARK]              = "\342\234\227",             /* ✗ (actually called: BALLOT X) */
-                        [SPECIAL_GLYPH_LIGHT_SHADE]             = "\342\226\221",             /* ░ */
-                        [SPECIAL_GLYPH_DARK_SHADE]              = "\342\226\223",             /* ▒ */
-                        [SPECIAL_GLYPH_SIGMA]                   = "\316\243",                 /* Σ */
-
-                        /* Single glyph in Unicode, two in ASCII */
-                        [SPECIAL_GLYPH_ARROW]                   = "\342\206\222",             /* → (actually called: RIGHTWARDS ARROW) */
-
-                        /* Single glyph in Unicode, three in ASCII */
-                        [SPECIAL_GLYPH_ELLIPSIS]                = "\342\200\246",             /* … (actually called: HORIZONTAL ELLIPSIS) */
-
-                        /* Three glyphs in Unicode, five in ASCII */
-                        [SPECIAL_GLYPH_EXTERNAL_LINK]           = "[\360\237\241\225]",       /* 🡕 (actually called: NORTH EAST SANS-SERIF ARROW, enclosed in []) */
-
-                        /* These smileys are a single glyph in Unicode, and three in ASCII */
-                        [SPECIAL_GLYPH_ECSTATIC_SMILEY]         = "\360\237\230\207",         /* 😇 (actually called: SMILING FACE WITH HALO) */
-                        [SPECIAL_GLYPH_HAPPY_SMILEY]            = "\360\237\230\200",         /* 😀 (actually called: GRINNING FACE) */
-                        [SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY]   = "\360\237\231\202",         /* 🙂 (actually called: SLIGHTLY SMILING FACE) */
-                        [SPECIAL_GLYPH_NEUTRAL_SMILEY]          = "\360\237\230\220",         /* 😐 (actually called: NEUTRAL FACE) */
-                        [SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = "\360\237\231\201",         /* 🙁 (actually called: SLIGHTLY FROWNING FACE) */
-                        [SPECIAL_GLYPH_UNHAPPY_SMILEY]          = "\360\237\230\250",         /* 😨 (actually called: FEARFUL FACE) */
-                        [SPECIAL_GLYPH_DEPRESSED_SMILEY]        = "\360\237\244\242",         /* 🤢 (actually called: NAUSEATED FACE) */
-
-                        /* This emoji is a single character cell glyph in Unicode, and three in ASCII */
-                        [SPECIAL_GLYPH_LOCK_AND_KEY]            = "\360\237\224\220",         /* 🔐 (actually called: CLOSED LOCK WITH KEY) */
-
-                        /* This emoji is a single character cell glyph in Unicode, and two in ASCII */
-                        [SPECIAL_GLYPH_TOUCH]                   = "\360\237\221\206",         /* 👆 (actually called: BACKHAND INDEX POINTING UP */
-                },
-        };
-
-        if (code < 0)
-                return NULL;
-
-        assert(code < _SPECIAL_GLYPH_MAX);
-        return draw_table[code >= _SPECIAL_GLYPH_FIRST_EMOJI ? emoji_enabled() : is_locale_utf8()][code];
-}
-
 void locale_variables_free(char *l[_VARIABLE_LC_MAX]) {
         if (!l)
                 return;
@@ -444,20 +347,31 @@
                 l[i] = mfree(l[i]);
 }
 
+void locale_variables_simplify(char *l[_VARIABLE_LC_MAX]) {
+        assert(l);
+
+        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
+                if (p == VARIABLE_LANG)
+                        continue;
+                if (isempty(l[p]) || streq_ptr(l[VARIABLE_LANG], l[p]))
+                        l[p] = mfree(l[p]);
+        }
+}
+
 static const char * const locale_variable_table[_VARIABLE_LC_MAX] = {
-        [VARIABLE_LANG] = "LANG",
-        [VARIABLE_LANGUAGE] = "LANGUAGE",
-        [VARIABLE_LC_CTYPE] = "LC_CTYPE",
-        [VARIABLE_LC_NUMERIC] = "LC_NUMERIC",
-        [VARIABLE_LC_TIME] = "LC_TIME",
-        [VARIABLE_LC_COLLATE] = "LC_COLLATE",
-        [VARIABLE_LC_MONETARY] = "LC_MONETARY",
-        [VARIABLE_LC_MESSAGES] = "LC_MESSAGES",
-        [VARIABLE_LC_PAPER] = "LC_PAPER",
-        [VARIABLE_LC_NAME] = "LC_NAME",
-        [VARIABLE_LC_ADDRESS] = "LC_ADDRESS",
-        [VARIABLE_LC_TELEPHONE] = "LC_TELEPHONE",
-        [VARIABLE_LC_MEASUREMENT] = "LC_MEASUREMENT",
+        [VARIABLE_LANG]              = "LANG",
+        [VARIABLE_LANGUAGE]          = "LANGUAGE",
+        [VARIABLE_LC_CTYPE]          = "LC_CTYPE",
+        [VARIABLE_LC_NUMERIC]        = "LC_NUMERIC",
+        [VARIABLE_LC_TIME]           = "LC_TIME",
+        [VARIABLE_LC_COLLATE]        = "LC_COLLATE",
+        [VARIABLE_LC_MONETARY]       = "LC_MONETARY",
+        [VARIABLE_LC_MESSAGES]       = "LC_MESSAGES",
+        [VARIABLE_LC_PAPER]          = "LC_PAPER",
+        [VARIABLE_LC_NAME]           = "LC_NAME",
+        [VARIABLE_LC_ADDRESS]        = "LC_ADDRESS",
+        [VARIABLE_LC_TELEPHONE]      = "LC_TELEPHONE",
+        [VARIABLE_LC_MEASUREMENT]    = "LC_MEASUREMENT",
         [VARIABLE_LC_IDENTIFICATION] = "LC_IDENTIFICATION"
 };
 
diff --git a/src/basic/locale-util.h b/src/basic/locale-util.h
index df259d1..8990cb6 100644
--- a/src/basic/locale-util.h
+++ b/src/basic/locale-util.h
@@ -2,8 +2,8 @@
 #pragma once
 
 #include <libintl.h>
-#include <stdbool.h>
 #include <locale.h>
+#include <stdbool.h>
 
 #include "macro.h"
 
@@ -39,44 +39,6 @@
 
 bool is_locale_utf8(void);
 
-typedef enum SpecialGlyph {
-        SPECIAL_GLYPH_TREE_VERTICAL,
-        SPECIAL_GLYPH_TREE_BRANCH,
-        SPECIAL_GLYPH_TREE_RIGHT,
-        SPECIAL_GLYPH_TREE_SPACE,
-        SPECIAL_GLYPH_TRIANGULAR_BULLET,
-        SPECIAL_GLYPH_BLACK_CIRCLE,
-        SPECIAL_GLYPH_WHITE_CIRCLE,
-        SPECIAL_GLYPH_MULTIPLICATION_SIGN,
-        SPECIAL_GLYPH_CIRCLE_ARROW,
-        SPECIAL_GLYPH_BULLET,
-        SPECIAL_GLYPH_MU,
-        SPECIAL_GLYPH_CHECK_MARK,
-        SPECIAL_GLYPH_CROSS_MARK,
-        SPECIAL_GLYPH_ARROW,
-        SPECIAL_GLYPH_ELLIPSIS,
-        SPECIAL_GLYPH_LIGHT_SHADE,
-        SPECIAL_GLYPH_DARK_SHADE,
-        SPECIAL_GLYPH_SIGMA,
-        SPECIAL_GLYPH_EXTERNAL_LINK,
-        _SPECIAL_GLYPH_FIRST_EMOJI,
-        SPECIAL_GLYPH_ECSTATIC_SMILEY = _SPECIAL_GLYPH_FIRST_EMOJI,
-        SPECIAL_GLYPH_HAPPY_SMILEY,
-        SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY,
-        SPECIAL_GLYPH_NEUTRAL_SMILEY,
-        SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY,
-        SPECIAL_GLYPH_UNHAPPY_SMILEY,
-        SPECIAL_GLYPH_DEPRESSED_SMILEY,
-        SPECIAL_GLYPH_LOCK_AND_KEY,
-        SPECIAL_GLYPH_TOUCH,
-        _SPECIAL_GLYPH_MAX,
-        _SPECIAL_GLYPH_INVALID = -EINVAL,
-} SpecialGlyph;
-
-const char *special_glyph(SpecialGlyph code) _const_;
-
-bool emoji_enabled(void);
-
 const char* locale_variable_to_string(LocaleVariable i) _const_;
 LocaleVariable locale_variable_from_string(const char *s) _pure_;
 
@@ -91,7 +53,4 @@
 static inline void locale_variables_freep(char*(*l)[_VARIABLE_LC_MAX]) {
         locale_variables_free(*l);
 }
-
-static inline const char *special_glyph_check_mark(bool b) {
-        return b ? special_glyph(SPECIAL_GLYPH_CHECK_MARK) : special_glyph(SPECIAL_GLYPH_CROSS_MARK);
-}
+void locale_variables_simplify(char *l[_VARIABLE_LC_MAX]);
diff --git a/src/basic/log.c b/src/basic/log.c
index 1d68b49..6e0eabc 100644
--- a/src/basic/log.c
+++ b/src/basic/log.c
@@ -16,6 +16,8 @@
 #include "sd-messages.h"
 
 #include "alloc-util.h"
+#include "argv-util.h"
+#include "env-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "format-util.h"
@@ -23,6 +25,7 @@
 #include "log.h"
 #include "macro.h"
 #include "missing_syscall.h"
+#include "missing_threads.h"
 #include "parse-util.h"
 #include "proc-cmdline.h"
 #include "process-util.h"
@@ -32,21 +35,26 @@
 #include "stdio-util.h"
 #include "string-table.h"
 #include "string-util.h"
+#include "strv.h"
 #include "syslog-util.h"
 #include "terminal-util.h"
 #include "time-util.h"
 #include "utf8.h"
 
 #define SNDBUF_SIZE (8*1024*1024)
+#define IOVEC_MAX 128U
+
+static log_syntax_callback_t log_syntax_callback = NULL;
+static void *log_syntax_callback_userdata = NULL;
 
 static LogTarget log_target = LOG_TARGET_CONSOLE;
 static int log_max_level = LOG_INFO;
 static int log_facility = LOG_DAEMON;
 
 static int console_fd = STDERR_FILENO;
-static int syslog_fd = -1;
-static int kmsg_fd = -1;
-static int journal_fd = -1;
+static int syslog_fd = -EBADF;
+static int kmsg_fd = -EBADF;
+static int journal_fd = -EBADF;
 
 static bool syslog_is_stream = false;
 
@@ -64,6 +72,21 @@
  * use here. */
 static char *log_abort_msg = NULL;
 
+typedef struct LogContext {
+        /* Depending on which destructor is used (log_context_free() or log_context_detach()) the memory
+         * referenced by this is freed or not */
+        char **fields;
+        bool owned;
+        LIST_FIELDS(struct LogContext, ll);
+} LogContext;
+
+static thread_local LIST_HEAD(LogContext, _log_context) = NULL;
+static thread_local size_t _log_context_num_fields = 0;
+
+#if LOG_MESSAGE_VERIFICATION || defined(__COVERITY__)
+bool _log_message_dummy = false; /* Always false */
+#endif
+
 /* An assert to use in logging functions that does not call recursively
  * into our logging functions (since that might lead to a loop). */
 #define assert_raw(expr)                                                \
@@ -142,12 +165,6 @@
 }
 
 static int log_open_syslog(void) {
-
-        static const union sockaddr_union sa = {
-                .un.sun_family = AF_UNIX,
-                .un.sun_path = "/dev/log",
-        };
-
         int r;
 
         if (syslog_fd >= 0)
@@ -159,22 +176,21 @@
                 goto fail;
         }
 
-        if (connect(syslog_fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0) {
+        r = connect_unix_path(syslog_fd, AT_FDCWD, "/dev/log");
+        if (r < 0) {
                 safe_close(syslog_fd);
 
-                /* Some legacy syslog systems still use stream
-                 * sockets. They really shouldn't. But what can we
-                 * do... */
+                /* Some legacy syslog systems still use stream sockets. They really shouldn't. But what can
+                 * we do... */
                 syslog_fd = create_log_socket(SOCK_STREAM);
                 if (syslog_fd < 0) {
                         r = syslog_fd;
                         goto fail;
                 }
 
-                if (connect(syslog_fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0) {
-                        r = -errno;
+                r = connect_unix_path(syslog_fd, AT_FDCWD, "/dev/log");
+                if (r < 0)
                         goto fail;
-                }
 
                 syslog_is_stream = true;
         } else
@@ -192,12 +208,6 @@
 }
 
 static int log_open_journal(void) {
-
-        static const union sockaddr_union sa = {
-                .un.sun_family = AF_UNIX,
-                .un.sun_path = "/run/systemd/journal/socket",
-        };
-
         int r;
 
         if (journal_fd >= 0)
@@ -209,10 +219,9 @@
                 goto fail;
         }
 
-        if (connect(journal_fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0) {
-                r = -errno;
+        r = connect_unix_path(journal_fd, AT_FDCWD, "/run/systemd/journal/socket");
+        if (r < 0)
                 goto fail;
-        }
 
         return 0;
 
@@ -351,11 +360,11 @@
 void log_forget_fds(void) {
         /* Do not call from library code. */
 
-        console_fd = kmsg_fd = syslog_fd = journal_fd = -1;
+        console_fd = kmsg_fd = syslog_fd = journal_fd = -EBADF;
 }
 
 void log_set_max_level(int level) {
-        assert((level & LOG_PRIMASK) == level);
+        assert(level == LOG_NULL || (level & LOG_PRIMASK) == level);
 
         log_max_level = level;
 }
@@ -476,7 +485,7 @@
                 IOVEC_MAKE_STRING(header_pid),
                 IOVEC_MAKE_STRING(buffer),
         };
-        struct msghdr msghdr = {
+        const struct msghdr msghdr = {
                 .msg_iov = iovec,
                 .msg_iovlen = ELEMENTSOF(iovec),
         };
@@ -595,6 +604,20 @@
         return 0;
 }
 
+static void log_do_context(struct iovec *iovec, size_t iovec_len, size_t *n) {
+        assert(iovec);
+        assert(n);
+
+        LIST_FOREACH(ll, c, _log_context)
+                STRV_FOREACH(s, c->fields) {
+                        if (*n + 2 >= iovec_len)
+                                return;
+
+                        iovec[(*n)++] = IOVEC_MAKE_STRING(*s);
+                        iovec[(*n)++] = IOVEC_MAKE_STRING("\n");
+                }
+}
+
 static int write_to_journal(
                 int level,
                 int error,
@@ -608,23 +631,30 @@
                 const char *buffer) {
 
         char header[LINE_MAX];
-        struct iovec iovec[4] = {};
-        struct msghdr mh = {};
+        size_t n = 0, iovec_len;
+        struct iovec *iovec;
 
         if (journal_fd < 0)
                 return 0;
 
+        iovec_len = MIN(4 + _log_context_num_fields * 2, IOVEC_MAX);
+        iovec = newa(struct iovec, iovec_len);
+
         log_do_header(header, sizeof(header), level, error, file, line, func, object_field, object, extra_field, extra);
 
-        iovec[0] = IOVEC_MAKE_STRING(header);
-        iovec[1] = IOVEC_MAKE_STRING("MESSAGE=");
-        iovec[2] = IOVEC_MAKE_STRING(buffer);
-        iovec[3] = IOVEC_MAKE_STRING("\n");
+        iovec[n++] = IOVEC_MAKE_STRING(header);
+        iovec[n++] = IOVEC_MAKE_STRING("MESSAGE=");
+        iovec[n++] = IOVEC_MAKE_STRING(buffer);
+        iovec[n++] = IOVEC_MAKE_STRING("\n");
 
-        mh.msg_iov = iovec;
-        mh.msg_iovlen = ELEMENTSOF(iovec);
+        log_do_context(iovec, iovec_len, &n);
 
-        if (sendmsg(journal_fd, &mh, MSG_NOSIGNAL) < 0)
+        const struct msghdr msghdr = {
+                .msg_iov = iovec,
+                .msg_iovlen = n,
+        };
+
+        if (sendmsg(journal_fd, &msghdr, MSG_NOSIGNAL) < 0)
                 return -errno;
 
         return 1;
@@ -738,14 +768,12 @@
                 const char *format,
                 va_list ap) {
 
-        char buffer[LINE_MAX];
-        PROTECT_ERRNO;
-
         if (_likely_(LOG_PRI(level) > log_max_level))
                 return -ERRNO_VALUE(error);
 
         /* Make sure that %m maps to the specified error (or "Success"). */
-        errno = ERRNO_VALUE(error);
+        char buffer[LINE_MAX];
+        LOCAL_ERRNO(ERRNO_VALUE(error));
 
         (void) vsnprintf(buffer, sizeof buffer, format, ap);
 
@@ -783,14 +811,13 @@
                 const char *format,
                 va_list ap) {
 
-        PROTECT_ERRNO;
         char *buffer, *b;
 
         if (_likely_(LOG_PRI(level) > log_max_level))
                 return -ERRNO_VALUE(error);
 
         /* Make sure that %m maps to the specified error (or "Success"). */
-        errno = ERRNO_VALUE(error);
+        LOCAL_ERRNO(ERRNO_VALUE(error));
 
         /* Prepend the object name before the message */
         if (object) {
@@ -863,12 +890,11 @@
 }
 
 _noreturn_ void log_assert_failed_unreachable(
-                const char *text,
                 const char *file,
                 int line,
                 const char *func) {
-        log_assert(LOG_CRIT, text, file, line, func,
-                   "Code should not be reached '%s' at %s:%u, function %s(). Aborting.");
+        log_assert(LOG_CRIT, "Code should not be reached", file, line, func,
+                   "%s at %s:%u, function %s(). Aborting. 💥");
         abort();
 }
 
@@ -919,11 +945,8 @@
                 VA_FORMAT_ADVANCE(format, ap);
 
                 iovec[(*n)++] = IOVEC_MAKE_STRING(m);
-
-                if (newline_separator) {
-                        iovec[*n] = IOVEC_MAKE((char *)&nl, 1);
-                        (*n)++;
-                }
+                if (newline_separator)
+                        iovec[(*n)++] = IOVEC_MAKE((char *)&nl, 1);
 
                 format = va_arg(ap, char *);
         }
@@ -960,30 +983,37 @@
 
                 if (journal_fd >= 0) {
                         char header[LINE_MAX];
-                        struct iovec iovec[17] = {};
-                        size_t n = 0;
+                        struct iovec *iovec;
+                        size_t n = 0, m, iovec_len;
                         int r;
-                        struct msghdr mh = {
-                                .msg_iov = iovec,
-                        };
                         bool fallback = false;
 
+                        iovec_len = MIN(17 + _log_context_num_fields * 2, IOVEC_MAX);
+                        iovec = newa(struct iovec, iovec_len);
+
                         /* If the journal is available do structured logging.
                          * Do not report the errno if it is synthetic. */
                         log_do_header(header, sizeof(header), level, error, file, line, func, NULL, NULL, NULL, NULL);
                         iovec[n++] = IOVEC_MAKE_STRING(header);
 
                         va_start(ap, format);
-                        r = log_format_iovec(iovec, ELEMENTSOF(iovec), &n, true, error, format, ap);
+                        r = log_format_iovec(iovec, iovec_len, &n, true, error, format, ap);
+                        m = n;
                         if (r < 0)
                                 fallback = true;
                         else {
-                                mh.msg_iovlen = n;
-                                (void) sendmsg(journal_fd, &mh, MSG_NOSIGNAL);
+                                log_do_context(iovec, iovec_len, &n);
+
+                                const struct msghdr msghdr = {
+                                        .msg_iov = iovec,
+                                        .msg_iovlen = n,
+                                };
+
+                                (void) sendmsg(journal_fd, &msghdr, MSG_NOSIGNAL);
                         }
 
                         va_end(ap);
-                        for (size_t i = 1; i < n; i += 2)
+                        for (size_t i = 1; i < m; i += 2)
                                 free(iovec[i].iov_base);
 
                         if (!fallback) {
@@ -1038,8 +1068,6 @@
                 size_t n_input_iovec) {
 
         PROTECT_ERRNO;
-        size_t i;
-        char *m;
 
         if (_likely_(LOG_PRI(level) > log_max_level) ||
             log_target == LOG_TARGET_NULL)
@@ -1053,36 +1081,44 @@
                                LOG_TARGET_JOURNAL) &&
             journal_fd >= 0) {
 
-                struct iovec iovec[1 + n_input_iovec*2];
                 char header[LINE_MAX];
-                struct msghdr mh = {
-                        .msg_iov = iovec,
-                        .msg_iovlen = 1 + n_input_iovec*2,
-                };
+                struct iovec *iovec;
+                size_t n = 0, iovec_len;
+
+                iovec_len = MIN(1 + n_input_iovec * 2 + _log_context_num_fields * 2, IOVEC_MAX);
+                iovec = newa(struct iovec, iovec_len);
 
                 log_do_header(header, sizeof(header), level, error, file, line, func, NULL, NULL, NULL, NULL);
-                iovec[0] = IOVEC_MAKE_STRING(header);
 
-                for (i = 0; i < n_input_iovec; i++) {
-                        iovec[1+i*2] = input_iovec[i];
-                        iovec[1+i*2+1] = IOVEC_MAKE_STRING("\n");
+                iovec[n++] = IOVEC_MAKE_STRING(header);
+                for (size_t i = 0; i < n_input_iovec; i++) {
+                        iovec[n++] = input_iovec[i];
+                        iovec[n++] = IOVEC_MAKE_STRING("\n");
                 }
 
-                if (sendmsg(journal_fd, &mh, MSG_NOSIGNAL) >= 0)
+                log_do_context(iovec, iovec_len, &n);
+
+                const struct msghdr msghdr = {
+                        .msg_iov = iovec,
+                        .msg_iovlen = n,
+                };
+
+                if (sendmsg(journal_fd, &msghdr, MSG_NOSIGNAL) >= 0)
                         return -ERRNO_VALUE(error);
         }
 
-        for (i = 0; i < n_input_iovec; i++)
-                if (memory_startswith(input_iovec[i].iov_base, input_iovec[i].iov_len, "MESSAGE="))
-                        break;
+        for (size_t i = 0; i < n_input_iovec; i++)
+                if (memory_startswith(input_iovec[i].iov_base, input_iovec[i].iov_len, "MESSAGE=")) {
+                        char *m;
 
-        if (_unlikely_(i >= n_input_iovec)) /* Couldn't find MESSAGE=? */
-                return -ERRNO_VALUE(error);
+                        m = strndupa_safe((char*) input_iovec[i].iov_base + STRLEN("MESSAGE="),
+                                          input_iovec[i].iov_len - STRLEN("MESSAGE="));
 
-        m = strndupa(input_iovec[i].iov_base + STRLEN("MESSAGE="),
-                     input_iovec[i].iov_len - STRLEN("MESSAGE="));
+                        return log_dispatch_internal(level, error, file, line, func, NULL, NULL, NULL, NULL, m);
+                }
 
-        return log_dispatch_internal(level, error, file, line, func, NULL, NULL, NULL, NULL, m);
+        /* Couldn't find MESSAGE=. */
+        return -ERRNO_VALUE(error);
 }
 
 int log_set_target_from_string(const char *e) {
@@ -1163,30 +1199,12 @@
 }
 
 static bool should_parse_proc_cmdline(void) {
-        const char *e;
-        pid_t p;
-
         /* PID1 always reads the kernel command line. */
         if (getpid_cached() == 1)
                 return true;
 
-        /* If the process is directly executed by PID1 (e.g. ExecStart= or generator), systemd-importd,
-         * or systemd-homed, then $SYSTEMD_EXEC_PID= is set, and read the command line. */
-        e = getenv("SYSTEMD_EXEC_PID");
-        if (!e)
-                return false;
-
-        if (streq(e, "*"))
-                /* For testing. */
-                return true;
-
-        if (parse_pid(e, &p) < 0) {
-                /* We know that systemd sets the variable correctly. Something else must have set it. */
-                log_debug("Failed to parse \"$SYSTEMD_EXEC_PID=%s\". Ignoring.", e);
-                return false;
-        }
-
-        return getpid_cached() == p;
+        /* Otherwise, parse the commandline if invoked directly by systemd. */
+        return invoked_by_systemd();
 }
 
 void log_parse_environment_variables(void) {
@@ -1230,6 +1248,24 @@
         return log_target;
 }
 
+void log_settle_target(void) {
+
+        /* If we're using LOG_TARGET_AUTO and opening the log again on every single log call, we'll check if
+         * stderr is attached to the journal every single log call. However, if we then close all file
+         * descriptors later, that will stop working because stderr will be closed as well. To avoid that
+         * problem, this function is used to permanently change the log target depending on whether stderr is
+         * connected to the journal or not. */
+
+        LogTarget t = log_get_target();
+
+        if (t != LOG_TARGET_AUTO)
+                return;
+
+        t = getpid_cached() == 1 || stderr_is_journal() ? (prohibit_ipc ? LOG_TARGET_KMSG : LOG_TARGET_JOURNAL_OR_KMSG)
+                                                        : LOG_TARGET_CONSOLE;
+        log_set_target(t);
+}
+
 int log_get_max_level(void) {
         return log_max_level;
 }
@@ -1350,6 +1386,14 @@
                          signal_to_string(si->ssi_signo));
 }
 
+void set_log_syntax_callback(log_syntax_callback_t cb, void *userdata) {
+        assert(!log_syntax_callback || !cb);
+        assert(!log_syntax_callback_userdata || !userdata);
+
+        log_syntax_callback = cb;
+        log_syntax_callback_userdata = userdata;
+}
+
 int log_syntax_internal(
                 const char *unit,
                 int level,
@@ -1362,14 +1406,18 @@
                 const char *format, ...) {
 
         PROTECT_ERRNO;
-        char buffer[LINE_MAX];
-        va_list ap;
-        const char *unit_fmt = NULL;
+
+        if (log_syntax_callback)
+                log_syntax_callback(unit, level, log_syntax_callback_userdata);
 
         if (_likely_(LOG_PRI(level) > log_max_level) ||
             log_target == LOG_TARGET_NULL)
                 return -ERRNO_VALUE(error);
 
+        char buffer[LINE_MAX];
+        va_list ap;
+        const char *unit_fmt = NULL;
+
         errno = ERRNO_VALUE(error);
 
         va_start(ap, format);
@@ -1477,7 +1525,7 @@
         /* Duplicate the fd we use for fd logging if it's < 3 and use the copy from now on. This call is useful
          * whenever we want to continue logging through the original fd, but want to rearrange stderr. */
 
-        if (console_fd >= 3)
+        if (console_fd < 0 || console_fd >= 3)
                 return 0;
 
         copy = fcntl(console_fd, F_DUPFD_CLOEXEC, 3);
@@ -1495,3 +1543,88 @@
         if (log_on_console() && show_color < 0)
                 log_show_color(true);
 }
+
+static int saved_log_context_enabled = -1;
+
+bool log_context_enabled(void) {
+        int r;
+
+        if (log_get_max_level() == LOG_DEBUG)
+                return true;
+
+        if (saved_log_context_enabled >= 0)
+                return saved_log_context_enabled;
+
+        r = getenv_bool_secure("SYSTEMD_ENABLE_LOG_CONTEXT");
+        if (r < 0 && r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_ENABLE_LOG_CONTEXT, ignoring: %m");
+
+        saved_log_context_enabled = r > 0;
+
+        return saved_log_context_enabled;
+}
+
+LogContext* log_context_attach(LogContext *c) {
+        assert(c);
+
+        _log_context_num_fields += strv_length(c->fields);
+
+        return LIST_PREPEND(ll, _log_context, c);
+}
+
+LogContext* log_context_detach(LogContext *c) {
+        if (!c)
+                return NULL;
+
+        assert(_log_context_num_fields >= strv_length(c->fields));
+        _log_context_num_fields -= strv_length(c->fields);
+
+        LIST_REMOVE(ll, _log_context, c);
+        return NULL;
+}
+
+LogContext* log_context_new(char **fields, bool owned) {
+        LogContext *c = new(LogContext, 1);
+        if (!c)
+                return NULL;
+
+        *c = (LogContext) {
+                .fields = fields,
+                .owned = owned,
+        };
+
+        return log_context_attach(c);
+}
+
+LogContext* log_context_free(LogContext *c) {
+        if (!c)
+                return NULL;
+
+        log_context_detach(c);
+
+        if (c->owned)
+                strv_free(c->fields);
+
+        return mfree(c);
+}
+
+LogContext* log_context_new_consume(char **fields) {
+        LogContext *c = log_context_new(fields, /*owned=*/ true);
+        if (!c)
+                strv_free(fields);
+
+        return c;
+}
+
+size_t log_context_num_contexts(void) {
+        size_t n = 0;
+
+        LIST_FOREACH(ll, c, _log_context)
+                n++;
+
+        return n;
+}
+
+size_t log_context_num_fields(void) {
+        return _log_context_num_fields;
+}
diff --git a/src/basic/log.h b/src/basic/log.h
index 3dbd01a..e56be4e 100644
--- a/src/basic/log.h
+++ b/src/basic/log.h
@@ -7,7 +7,10 @@
 #include <string.h>
 #include <syslog.h>
 
+#include "list.h"
 #include "macro.h"
+#include "ratelimit.h"
+#include "stdio-util.h"
 
 /* Some structures we reference but don't want to pull in headers for */
 struct iovec;
@@ -27,16 +30,30 @@
         _LOG_TARGET_INVALID = -EINVAL,
 } LogTarget;
 
+/* This log level disables logging completely. It can only be passed to log_set_max_level() and cannot be
+ * used a regular log level. */
+#define LOG_NULL (LOG_EMERG - 1)
+
 /* Note to readers: << and >> have lower precedence (are evaluated earlier) than & and | */
 #define SYNTHETIC_ERRNO(num)                (1 << 30 | (num))
 #define IS_SYNTHETIC_ERRNO(val)             ((val) >> 30 & 1)
 #define ERRNO_VALUE(val)                    (abs(val) & ~(1 << 30))
 
+/* The callback function to be invoked when syntax warnings are seen
+ * in the unit files. */
+typedef void (*log_syntax_callback_t)(const char *unit, int level, void *userdata);
+void set_log_syntax_callback(log_syntax_callback_t cb, void *userdata);
+
+static inline void clear_log_syntax_callback(dummy_t *dummy) {
+          set_log_syntax_callback(/* cb= */ NULL, /* userdata= */ NULL);
+}
+
 const char *log_target_to_string(LogTarget target) _const_;
 LogTarget log_target_from_string(const char *s) _pure_;
 void log_set_target(LogTarget target);
 int log_set_target_from_string(const char *e);
 LogTarget log_get_target(void) _pure_;
+void log_settle_target(void);
 
 void log_set_max_level(int level);
 int log_set_max_level_from_string(const char *e);
@@ -175,7 +192,6 @@
                 const char *func);
 
 _noreturn_ void log_assert_failed_unreachable(
-                const char *text,
                 const char *file,
                 int line,
                 const char *func);
@@ -261,9 +277,11 @@
         })
 
 #if LOG_TRACE
-#  define log_trace(...) log_debug(__VA_ARGS__)
+#  define log_trace(...)          log_debug(__VA_ARGS__)
+#  define log_trace_errno(...)    log_debug_errno(__VA_ARGS__)
 #else
-#  define log_trace(...) do {} while (0)
+#  define log_trace(...)          do {} while (0)
+#  define log_trace_errno(e, ...) (-ERRNO_VALUE(e))
 #endif
 
 /* Structured logging */
@@ -281,11 +299,20 @@
 
 #define log_oom() log_oom_internal(LOG_ERR, PROJECT_FILE, __LINE__, __func__)
 #define log_oom_debug() log_oom_internal(LOG_DEBUG, PROJECT_FILE, __LINE__, __func__)
+#define log_oom_warning() log_oom_internal(LOG_WARNING, PROJECT_FILE, __LINE__, __func__)
 
 bool log_on_console(void) _pure_;
 
-/* Helper to prepare various field for structured logging */
-#define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
+/* Helper to wrap the main message in structured logging. The macro doesn't do much,
+ * except to provide visual grouping of the format string and its arguments. */
+#if LOG_MESSAGE_VERIFICATION || defined(__COVERITY__)
+/* Do a fake formatting of the message string to let the scanner verify the arguments against the format
+ * message. The variable will never be set to true, but we don't tell the compiler that :) */
+extern bool _log_message_dummy;
+#  define LOG_MESSAGE(fmt, ...) "MESSAGE=%.0d" fmt, (_log_message_dummy && printf(fmt, ##__VA_ARGS__)), ##__VA_ARGS__
+#else
+#  define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
+#endif
 
 void log_received_signal(int level, const struct signalfd_siginfo *si);
 
@@ -345,3 +372,135 @@
 #define DEBUG_LOGGING _unlikely_(log_get_max_level() >= LOG_DEBUG)
 
 void log_setup(void);
+
+typedef struct LogRateLimit {
+        int error;
+        int level;
+        RateLimit ratelimit;
+} LogRateLimit;
+
+#define log_ratelimit_internal(_level, _error, _ratelimit, _format, _file, _line, _func, ...)        \
+({                                                                              \
+        int _log_ratelimit_error = (_error);                                    \
+        int _log_ratelimit_level = (_level);                                    \
+        static LogRateLimit _log_ratelimit = {                                  \
+                .ratelimit = (_ratelimit),                                      \
+        };                                                                      \
+        unsigned _num_dropped_errors = ratelimit_num_dropped(&_log_ratelimit.ratelimit); \
+        if (_log_ratelimit_error != _log_ratelimit.error || _log_ratelimit_level != _log_ratelimit.level) { \
+                ratelimit_reset(&_log_ratelimit.ratelimit);                     \
+                _log_ratelimit.error = _log_ratelimit_error;                    \
+                _log_ratelimit.level = _log_ratelimit_level;                    \
+        }                                                                       \
+        if (log_get_max_level() == LOG_DEBUG || ratelimit_below(&_log_ratelimit.ratelimit)) \
+                _log_ratelimit_error = _num_dropped_errors > 0                  \
+                ? log_internal(_log_ratelimit_level, _log_ratelimit_error, _file, _line, _func, _format " (Dropped %u similar message(s))", ##__VA_ARGS__, _num_dropped_errors) \
+                : log_internal(_log_ratelimit_level, _log_ratelimit_error, _file, _line, _func, _format, ##__VA_ARGS__); \
+        _log_ratelimit_error;                                                   \
+})
+
+#define log_ratelimit_full_errno(level, error, _ratelimit, format, ...)             \
+        ({                                                              \
+                int _level = (level), _e = (error);                     \
+                _e = (log_get_max_level() >= LOG_PRI(_level))           \
+                        ? log_ratelimit_internal(_level, _e, _ratelimit, format, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__) \
+                        : -ERRNO_VALUE(_e);                             \
+                _e < 0 ? _e : -ESTRPIPE;                                \
+        })
+
+#define log_ratelimit_full(level, _ratelimit, format, ...)                          \
+        log_ratelimit_full_errno(level, 0, _ratelimit, format, ##__VA_ARGS__)
+
+/* Normal logging */
+#define log_ratelimit_info(...)      log_ratelimit_full(LOG_INFO,    __VA_ARGS__)
+#define log_ratelimit_notice(...)    log_ratelimit_full(LOG_NOTICE,  __VA_ARGS__)
+#define log_ratelimit_warning(...)   log_ratelimit_full(LOG_WARNING, __VA_ARGS__)
+#define log_ratelimit_error(...)     log_ratelimit_full(LOG_ERR,     __VA_ARGS__)
+#define log_ratelimit_emergency(...) log_ratelimit_full(log_emergency_level(), __VA_ARGS__)
+
+/* Logging triggered by an errno-like error */
+#define log_ratelimit_info_errno(error, ...)      log_ratelimit_full_errno(LOG_INFO,    error, __VA_ARGS__)
+#define log_ratelimit_notice_errno(error, ...)    log_ratelimit_full_errno(LOG_NOTICE,  error, __VA_ARGS__)
+#define log_ratelimit_warning_errno(error, ...)   log_ratelimit_full_errno(LOG_WARNING, error, __VA_ARGS__)
+#define log_ratelimit_error_errno(error, ...)     log_ratelimit_full_errno(LOG_ERR,     error, __VA_ARGS__)
+#define log_ratelimit_emergency_errno(error, ...) log_ratelimit_full_errno(log_emergency_level(), error, __VA_ARGS__)
+
+/*
+ * The log context allows attaching extra metadata to log messages written to the journal via log.h. We keep
+ * track of a thread local log context onto which we can push extra metadata fields that should be logged.
+ *
+ * LOG_CONTEXT_PUSH() will add the provided field to the log context and will remove it again when the
+ * current block ends. LOG_CONTEXT_PUSH_STRV() will do the same but for all fields in the given strv.
+ * LOG_CONTEXT_PUSHF() is like LOG_CONTEXT_PUSH() but takes a format string and arguments.
+ *
+ * Using the macros is as simple as putting them anywhere inside a block to add a field to all following log
+ * messages logged from inside that block.
+ *
+ * void myfunction(...) {
+ *         ...
+ *
+ *         LOG_CONTEXT_PUSHF("MYMETADATA=%s", "abc");
+ *
+ *         // Every journal message logged will now have the MYMETADATA=abc
+ *         // field included.
+ * }
+ *
+ * One special case to note is async code, where we use callbacks that are invoked to continue processing
+ * when some event occurs. For async code, there's usually an associated "userdata" struct containing all the
+ * information associated with the async operation. In this "userdata" struct, we can store a log context
+ * allocated with log_context_new() and freed with log_context_free(). We can then add and remove fields to
+ * the `fields` member of the log context object and all those fields will be logged along with each log
+ * message.
+ */
+
+typedef struct LogContext LogContext;
+
+bool log_context_enabled(void);
+
+LogContext* log_context_attach(LogContext *c);
+LogContext* log_context_detach(LogContext *c);
+
+LogContext* log_context_new(char **fields, bool owned);
+LogContext* log_context_free(LogContext *c);
+
+/* Same as log_context_new(), but frees the given fields strv on failure. */
+LogContext* log_context_new_consume(char **fields);
+
+/* Returns the number of attached log context objects. */
+size_t log_context_num_contexts(void);
+/* Returns the number of fields in all attached log contexts. */
+size_t log_context_num_fields(void);
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(LogContext*, log_context_detach);
+DEFINE_TRIVIAL_CLEANUP_FUNC(LogContext*, log_context_free);
+
+#define LOG_CONTEXT_PUSH(...) \
+        LOG_CONTEXT_PUSH_STRV(STRV_MAKE(__VA_ARGS__))
+
+#define LOG_CONTEXT_PUSHF(...) \
+        LOG_CONTEXT_PUSH(snprintf_ok((char[LINE_MAX]) {}, LINE_MAX, __VA_ARGS__))
+
+#define _LOG_CONTEXT_PUSH_STRV(strv, c) \
+        _unused_ _cleanup_(log_context_freep) LogContext *c = log_context_new(strv, /*owned=*/ false);
+
+#define LOG_CONTEXT_PUSH_STRV(strv) \
+        _LOG_CONTEXT_PUSH_STRV(strv, UNIQ_T(c, UNIQ))
+
+/* LOG_CONTEXT_CONSUME_STR()/LOG_CONTEXT_CONSUME_STRV() are identical to
+ * LOG_CONTEXT_PUSH_STR()/LOG_CONTEXT_PUSH_STRV() except they take ownership of the given str/strv argument.
+ */
+
+#define _LOG_CONTEXT_CONSUME_STR(s, c, strv) \
+        _unused_ _cleanup_strv_free_ strv = strv_new(s);                                                \
+        if (!strv)                                                                                      \
+                free(s);                                                                                \
+        _unused_ _cleanup_(log_context_freep) LogContext *c = log_context_new_consume(TAKE_PTR(strv))
+
+#define LOG_CONTEXT_CONSUME_STR(s) \
+        _LOG_CONTEXT_CONSUME_STR(s, UNIQ_T(c, UNIQ), UNIQ_T(sv, UNIQ))
+
+#define _LOG_CONTEXT_CONSUME_STRV(strv, c) \
+        _unused_ _cleanup_(log_context_freep) LogContext *c = log_context_new_consume(strv);
+
+#define LOG_CONTEXT_CONSUME_STRV(strv) \
+        _LOG_CONTEXT_CONSUME_STRV(strv, UNIQ_T(c, UNIQ))
diff --git a/src/basic/logarithm.h b/src/basic/logarithm.h
new file mode 100644
index 0000000..646f2d3
--- /dev/null
+++ b/src/basic/logarithm.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdint.h>
+
+#include "macro.h"
+
+/* Note: log2(0) == log2(1) == 0 here and below. */
+
+#define CONST_LOG2ULL(x) ((x) > 1 ? (unsigned) __builtin_clzll(x) ^ 63U : 0)
+#define NONCONST_LOG2ULL(x) ({                                     \
+                unsigned long long _x = (x);                       \
+                _x > 1 ? (unsigned) __builtin_clzll(_x) ^ 63U : 0; \
+        })
+#define LOG2ULL(x) __builtin_choose_expr(__builtin_constant_p(x), CONST_LOG2ULL(x), NONCONST_LOG2ULL(x))
+
+static inline unsigned log2u64(uint64_t x) {
+#if __SIZEOF_LONG_LONG__ == 8
+        return LOG2ULL(x);
+#else
+#  error "Wut?"
+#endif
+}
+
+static inline unsigned u32ctz(uint32_t n) {
+#if __SIZEOF_INT__ == 4
+        return n != 0 ? __builtin_ctz(n) : 32;
+#else
+#  error "Wut?"
+#endif
+}
+
+#define CONST_LOG2U(x) ((x) > 1 ? __SIZEOF_INT__ * 8 - __builtin_clz(x) - 1 : 0)
+#define NONCONST_LOG2U(x) ({                                             \
+                unsigned _x = (x);                                       \
+                _x > 1 ? __SIZEOF_INT__ * 8 - __builtin_clz(_x) - 1 : 0; \
+        })
+#define LOG2U(x) __builtin_choose_expr(__builtin_constant_p(x), CONST_LOG2U(x), NONCONST_LOG2U(x))
+
+static inline unsigned log2i(int x) {
+        return LOG2U(x);
+}
+
+static inline unsigned log2u(unsigned x) {
+        return LOG2U(x);
+}
+
+static inline unsigned log2u_round_up(unsigned x) {
+        if (x <= 1)
+                return 0;
+
+        return log2u(x - 1) + 1;
+}
diff --git a/src/basic/macro.h b/src/basic/macro.h
index 5a3027a..3c03f2a 100644
--- a/src/basic/macro.h
+++ b/src/basic/macro.h
@@ -9,66 +9,9 @@
 #include <sys/sysmacros.h>
 #include <sys/types.h>
 
+#include "constants.h"
 #include "macro-fundamental.h"
 
-#define _printf_(a, b) __attribute__((__format__(printf, a, b)))
-#ifdef __clang__
-#  define _alloc_(...)
-#else
-#  define _alloc_(...) __attribute__((__alloc_size__(__VA_ARGS__)))
-#endif
-#define _sentinel_ __attribute__((__sentinel__))
-#define _destructor_ __attribute__((__destructor__))
-#define _deprecated_ __attribute__((__deprecated__))
-#define _packed_ __attribute__((__packed__))
-#define _malloc_ __attribute__((__malloc__))
-#define _weak_ __attribute__((__weak__))
-#define _likely_(x) (__builtin_expect(!!(x), 1))
-#define _unlikely_(x) (__builtin_expect(!!(x), 0))
-#define _public_ __attribute__((__visibility__("default")))
-#define _hidden_ __attribute__((__visibility__("hidden")))
-#define _weakref_(x) __attribute__((__weakref__(#x)))
-#define _alignas_(x) __attribute__((__aligned__(__alignof(x))))
-#define _alignptr_ __attribute__((__aligned__(sizeof(void*))))
-#if __GNUC__ >= 7
-#define _fallthrough_ __attribute__((__fallthrough__))
-#else
-#define _fallthrough_
-#endif
-/* Define C11 noreturn without <stdnoreturn.h> and even on older gcc
- * compiler versions */
-#ifndef _noreturn_
-#if __STDC_VERSION__ >= 201112L
-#define _noreturn_ _Noreturn
-#else
-#define _noreturn_ __attribute__((__noreturn__))
-#endif
-#endif
-
-#if !defined(HAS_FEATURE_MEMORY_SANITIZER)
-#  if defined(__has_feature)
-#    if __has_feature(memory_sanitizer)
-#      define HAS_FEATURE_MEMORY_SANITIZER 1
-#    endif
-#  endif
-#  if !defined(HAS_FEATURE_MEMORY_SANITIZER)
-#    define HAS_FEATURE_MEMORY_SANITIZER 0
-#  endif
-#endif
-
-#if !defined(HAS_FEATURE_ADDRESS_SANITIZER)
-#  ifdef __SANITIZE_ADDRESS__
-#      define HAS_FEATURE_ADDRESS_SANITIZER 1
-#  elif defined(__has_feature)
-#    if __has_feature(address_sanitizer)
-#      define HAS_FEATURE_ADDRESS_SANITIZER 1
-#    endif
-#  endif
-#  if !defined(HAS_FEATURE_ADDRESS_SANITIZER)
-#    define HAS_FEATURE_ADDRESS_SANITIZER 0
-#  endif
-#endif
-
 /* Note: on GCC "no_sanitize_address" is a function attribute only, on llvm it may also be applied to global
  * variables. We define a specific macro which knows this. Note that on GCC we don't need this decorator so much, since
  * our primary usecase for this attribute is registration structures placed in named ELF sections which shall not be
@@ -121,14 +64,14 @@
         _Pragma("GCC diagnostic push")
 #endif
 
-#define DISABLE_WARNING_FLOAT_EQUAL \
-        _Pragma("GCC diagnostic push");                                 \
-        _Pragma("GCC diagnostic ignored \"-Wfloat-equal\"")
-
-#define DISABLE_WARNING_TYPE_LIMITS \
+#define DISABLE_WARNING_TYPE_LIMITS                                     \
         _Pragma("GCC diagnostic push");                                 \
         _Pragma("GCC diagnostic ignored \"-Wtype-limits\"")
 
+#define DISABLE_WARNING_ADDRESS                                         \
+        _Pragma("GCC diagnostic push");                                 \
+        _Pragma("GCC diagnostic ignored \"-Waddress\"")
+
 #define REENABLE_WARNING                                                \
         _Pragma("GCC diagnostic pop")
 
@@ -144,29 +87,6 @@
 #error "neither int nor long are four bytes long?!?"
 #endif
 
-/* Rounds up */
-
-#define ALIGN4(l) (((l) + 3) & ~3)
-#define ALIGN8(l) (((l) + 7) & ~7)
-
-#if __SIZEOF_POINTER__ == 8
-#define ALIGN(l) ALIGN8(l)
-#elif __SIZEOF_POINTER__ == 4
-#define ALIGN(l) ALIGN4(l)
-#else
-#error "Wut? Pointers are neither 4 nor 8 bytes long?"
-#endif
-
-#define ALIGN_PTR(p) ((void*) ALIGN((unsigned long) (p)))
-#define ALIGN4_PTR(p) ((void*) ALIGN4((unsigned long) (p)))
-#define ALIGN8_PTR(p) ((void*) ALIGN8((unsigned long) (p)))
-
-static inline size_t ALIGN_TO(size_t l, size_t ali) {
-        return ((l + ali - 1) & ~(ali - 1));
-}
-
-#define ALIGN_TO_PTR(p, ali) ((void*) ALIGN_TO((unsigned long) (p), (ali)))
-
 /* align to next higher power-of-2 (except for: 0 => 0, overflow => 0) */
 static inline unsigned long ALIGN_POWER2(unsigned long u) {
 
@@ -209,13 +129,6 @@
 }
 
 /*
- * STRLEN - return the length of a string literal, minus the trailing NUL byte.
- *          Contrary to strlen(), this is a constant expression.
- * @x: a string literal.
- */
-#define STRLEN(x) (sizeof(""x"") - 1)
-
-/*
  * container_of - cast a member of a structure out to the containing structure
  * @ptr: the pointer to the member.
  * @type: the type of the container struct this is embedded in.
@@ -262,12 +175,12 @@
 #define assert_message_se(expr, message)                                \
         do {                                                            \
                 if (_unlikely_(!(expr)))                                \
-                        log_assert_failed(message, PROJECT_FILE, __LINE__, __PRETTY_FUNCTION__); \
+                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
         } while (false)
 
 #define assert_log(expr, message) ((_likely_(expr))                     \
         ? (true)                                                        \
-        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __PRETTY_FUNCTION__), false))
+        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
 
 #endif  /* __COVERITY__ */
 
@@ -281,8 +194,8 @@
 #define assert(expr) assert_message_se(expr, #expr)
 #endif
 
-#define assert_not_reached(t)                                           \
-        log_assert_failed_unreachable(t, PROJECT_FILE, __LINE__, __PRETTY_FUNCTION__)
+#define assert_not_reached()                                            \
+        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
 
 #define assert_return(expr, r)                                          \
         do {                                                            \
@@ -336,32 +249,34 @@
 
 #define sizeof_field(struct_type, member) sizeof(((struct_type *) 0)->member)
 
-/* Returns the number of chars needed to format variables of the
- * specified type as a decimal string. Adds in extra space for a
- * negative '-' prefix (hence works correctly on signed
- * types). Includes space for the trailing NUL. */
+/* Returns the number of chars needed to format variables of the specified type as a decimal string. Adds in
+ * extra space for a negative '-' prefix for signed types. Includes space for the trailing NUL. */
 #define DECIMAL_STR_MAX(type)                                           \
-        (2+(sizeof(type) <= 1 ? 3 :                                     \
-            sizeof(type) <= 2 ? 5 :                                     \
-            sizeof(type) <= 4 ? 10 :                                    \
-            sizeof(type) <= 8 ? 20 : sizeof(int[-2*(sizeof(type) > 8)])))
+        ((size_t) IS_SIGNED_INTEGER_TYPE(type) + 1U +                   \
+            (sizeof(type) <= 1 ? 3U :                                   \
+             sizeof(type) <= 2 ? 5U :                                   \
+             sizeof(type) <= 4 ? 10U :                                  \
+             sizeof(type) <= 8 ? (IS_SIGNED_INTEGER_TYPE(type) ? 19U : 20U) : sizeof(int[-2*(sizeof(type) > 8)])))
 
-#define DECIMAL_STR_WIDTH(x)                            \
-        ({                                              \
-                typeof(x) _x_ = (x);                    \
-                unsigned ans = 2;                       \
-                while ((_x_ /= 10) != 0)                \
-                        ans++;                          \
-                ans;                                    \
+/* Returns the number of chars needed to format the specified integer value. It's hence more specific than
+ * DECIMAL_STR_MAX() which answers the same question for all possible values of the specified type. Does
+ * *not* include space for a trailing NUL. (If you wonder why we special case _x_ == 0 here: it's to trick
+ * out gcc's -Wtype-limits, which would complain on comparing an unsigned type with < 0, otherwise. By
+ * special-casing == 0 here first, we can use <= 0 instead of < 0 to trick out gcc.) */
+#define DECIMAL_STR_WIDTH(x)                                      \
+        ({                                                        \
+                typeof(x) _x_ = (x);                              \
+                size_t ans;                                       \
+                if (_x_ == 0)                                     \
+                        ans = 1;                                  \
+                else {                                            \
+                        ans = _x_ <= 0 ? 2 : 1;                   \
+                        while ((_x_ /= 10) != 0)                  \
+                                ans++;                            \
+                }                                                 \
+                ans;                                              \
         })
 
-#define UPDATE_FLAG(orig, flag, b)                      \
-        ((b) ? ((orig) | (flag)) : ((orig) & ~(flag)))
-#define SET_FLAG(v, flag, b) \
-        (v) = UPDATE_FLAG(v, flag, b)
-#define FLAGS_SET(v, flags) \
-        ((~(v) & (flags)) == 0)
-
 #define SWAP_TWO(x, y) do {                        \
                 typeof(x) _t = (x);                \
                 (x) = (y);                         \
@@ -381,20 +296,6 @@
              p != (typeof(p)) POINTER_MAX;                                               \
              p = *(++_l))
 
-/* Define C11 thread_local attribute even on older gcc compiler
- * version */
-#ifndef thread_local
-/*
- * Don't break on glibc < 2.16 that doesn't define __STDC_NO_THREADS__
- * see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53769
- */
-#if __STDC_VERSION__ >= 201112L && !(defined(__STDC_NO_THREADS__) || (defined(__GNU_LIBRARY__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 16))
-#define thread_local _Thread_local
-#else
-#define thread_local __thread
-#endif
-#endif
-
 #define DEFINE_TRIVIAL_DESTRUCTOR(name, type, func)             \
         static inline void name(type *p) {                      \
                 func(p);                                        \
@@ -407,10 +308,14 @@
                         *p = func(*p);                          \
         }
 
-/* When func() doesn't return the appropriate type, set variable to empty afterwards */
+/* When func() doesn't return the appropriate type, set variable to empty afterwards.
+ * The func() may be provided by a dynamically loaded shared library, hence add an assertion. */
 #define DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(type, func, empty)     \
         static inline void func##p(type *p) {                   \
                 if (*p != (empty)) {                            \
+                        DISABLE_WARNING_ADDRESS;                \
+                        assert(func);                           \
+                        REENABLE_WARNING;                       \
                         func(*p);                               \
                         *p = (empty);                           \
                 }                                               \
@@ -421,8 +326,12 @@
                 if (!p)                                         \
                         return NULL;                            \
                                                                 \
-                assert(p->n_ref > 0);                           \
-                p->n_ref++;                                     \
+                /* For type check. */                           \
+                unsigned *q = &p->n_ref;                        \
+                assert(*q > 0);                                 \
+                assert_se(*q < UINT_MAX);                       \
+                                                                \
+                (*q)++;                                         \
                 return p;                                       \
         }
 
@@ -478,8 +387,37 @@
                 _copy;                                                  \
         })
 
+#define saturate_add(x, y, limit)                                       \
+        ({                                                              \
+                typeof(limit) _x = (x);                                 \
+                typeof(limit) _y = (y);                                 \
+                _x > (limit) || _y >= (limit) - _x ? (limit) : _x + _y; \
+        })
+
 static inline size_t size_add(size_t x, size_t y) {
-        return y >= SIZE_MAX - x ? SIZE_MAX : x + y;
+        return saturate_add(x, y, SIZE_MAX);
 }
 
+typedef struct {
+        int _empty[0];
+} dummy_t;
+
+assert_cc(sizeof(dummy_t) == 0);
+
+/* A little helper for subtracting 1 off a pointer in a safe UB-free way. This is intended to be used for
+ * loops that count down from a high pointer until some base. A naive loop would implement this like this:
+ *
+ * for (p = end-1; p >= base; p--) …
+ *
+ * But this is not safe because p before the base is UB in C. With this macro the loop becomes this instead:
+ *
+ * for (p = PTR_SUB1(end, base); p; p = PTR_SUB1(p, base)) …
+ *
+ * And is free from UB! */
+#define PTR_SUB1(p, base)                                \
+        ({                                               \
+                typeof(p) _q = (p);                      \
+                _q && _q > (base) ? &_q[-1] : NULL;      \
+        })
+
 #include "log.h"
diff --git a/src/basic/math-util.h b/src/basic/math-util.h
new file mode 100644
index 0000000..24023cd
--- /dev/null
+++ b/src/basic/math-util.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <math.h>
+
+#include "macro.h"
+
+/* On some optimization level, iszero(x) is converted to (x == 0.0), and emits warning -Wfloat-equal.
+ * The argument must be a floating point, i.e. one of float, double, or long double. */
+#define iszero_safe(x) (fpclassify(x) == FP_ZERO)
+
+/* To avoid x == y and triggering compile warning -Wfloat-equal. This returns false if one of the argument is
+ * NaN or infinity. One of the argument must be a floating point. */
+#define fp_equal(x, y) iszero_safe((x) - (y))
diff --git a/src/basic/memfd-util.c b/src/basic/memfd-util.c
index 0b8ecea..fb86ac2 100644
--- a/src/basic/memfd-util.c
+++ b/src/basic/memfd-util.c
@@ -10,6 +10,7 @@
 #include <sys/prctl.h>
 
 #include "alloc-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "macro.h"
 #include "memfd-util.h"
@@ -21,7 +22,6 @@
 
 int memfd_new(const char *name) {
         _cleanup_free_ char *g = NULL;
-        int fd;
 
         if (!name) {
                 char pr[17] = {};
@@ -49,11 +49,7 @@
                 }
         }
 
-        fd = memfd_create(name, MFD_ALLOW_SEALING | MFD_CLOEXEC);
-        if (fd < 0)
-                return -errno;
-
-        return fd;
+        return RET_NERRNO(memfd_create(name, MFD_ALLOW_SEALING | MFD_CLOEXEC));
 }
 
 int memfd_map(int fd, uint64_t offset, size_t size, void **p) {
@@ -72,7 +68,6 @@
                 q = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, offset);
         else
                 q = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset);
-
         if (q == MAP_FAILED)
                 return -errno;
 
@@ -81,15 +76,9 @@
 }
 
 int memfd_set_sealed(int fd) {
-        int r;
-
         assert(fd >= 0);
 
-        r = fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_WRITE | F_SEAL_SEAL);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_WRITE | F_SEAL_SEAL));
 }
 
 int memfd_get_sealed(int fd) {
@@ -106,13 +95,11 @@
 
 int memfd_get_size(int fd, uint64_t *sz) {
         struct stat stat;
-        int r;
 
         assert(fd >= 0);
         assert(sz);
 
-        r = fstat(fd, &stat);
-        if (r < 0)
+        if (fstat(fd, &stat) < 0)
                 return -errno;
 
         *sz = stat.st_size;
@@ -120,19 +107,13 @@
 }
 
 int memfd_set_size(int fd, uint64_t sz) {
-        int r;
-
         assert(fd >= 0);
 
-        r = ftruncate(fd, sz);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ftruncate(fd, sz));
 }
 
 int memfd_new_and_map(const char *name, size_t sz, void **p) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(sz > 0);
diff --git a/src/basic/memory-util.c b/src/basic/memory-util.c
index 3338e35..fcedae2 100644
--- a/src/basic/memory-util.c
+++ b/src/basic/memory-util.c
@@ -3,6 +3,7 @@
 #include <unistd.h>
 
 #include "memory-util.h"
+#include "missing_threads.h"
 
 size_t page_size(void) {
         static thread_local size_t pgsz = 0;
@@ -18,42 +19,23 @@
         return pgsz;
 }
 
-bool memeqzero(const void *data, size_t length) {
-        /* Does the buffer consist entirely of NULs?
+bool memeqbyte(uint8_t byte, const void *data, size_t length) {
+        /* Does the buffer consist entirely of the same specific byte value?
          * Copied from https://github.com/systemd/casync/, copied in turn from
          * https://github.com/rustyrussell/ccan/blob/master/ccan/mem/mem.c#L92,
          * which is licensed CC-0.
          */
 
         const uint8_t *p = data;
-        size_t i;
 
         /* Check first 16 bytes manually */
-        for (i = 0; i < 16; i++, length--) {
+        for (size_t i = 0; i < 16; i++, length--) {
                 if (length == 0)
                         return true;
-                if (p[i])
+                if (p[i] != byte)
                         return false;
         }
 
-        /* Now we know first 16 bytes are NUL, memcmp with self.  */
-        return memcmp(data, p + i, length) == 0;
+        /* Now we know first 16 bytes match, memcmp() with self.  */
+        return memcmp(data, p + 16, length) == 0;
 }
-
-#if !HAVE_EXPLICIT_BZERO
-/*
- * The pointer to memset() is volatile so that compiler must de-reference the pointer and can't assume that
- * it points to any function in particular (such as memset(), which it then might further "optimize"). This
- * approach is inspired by openssl's crypto/mem_clr.c.
- */
-typedef void *(*memset_t)(void *,int,size_t);
-
-static volatile memset_t memset_func = memset;
-
-void* explicit_bzero_safe(void *p, size_t l) {
-        if (l > 0)
-                memset_func(p, '\0', l);
-
-        return p;
-}
-#endif
diff --git a/src/basic/memory-util.h b/src/basic/memory-util.h
index 0b04278..428ccc2 100644
--- a/src/basic/memory-util.h
+++ b/src/basic/memory-util.h
@@ -9,13 +9,14 @@
 
 #include "alloc-util.h"
 #include "macro.h"
+#include "memory-util-fundamental.h"
 
 size_t page_size(void) _pure_;
 #define PAGE_ALIGN(l) ALIGN_TO((l), page_size())
 #define PAGE_ALIGN_DOWN(l) ((l) & ~(page_size() - 1))
 #define PAGE_OFFSET(l) ((l) & (page_size() - 1))
 
-/* Normal memcpy requires src to be nonnull. We do nothing if n is 0. */
+/* Normal memcpy() requires src to be nonnull. We do nothing if n is 0. */
 static inline void *memcpy_safe(void *dst, const void *src, size_t n) {
         if (n == 0)
                 return dst;
@@ -23,7 +24,15 @@
         return memcpy(dst, src, n);
 }
 
-/* Normal memcmp requires s1 and s2 to be nonnull. We do nothing if n is 0. */
+/* Normal mempcpy() requires src to be nonnull. We do nothing if n is 0. */
+static inline void *mempcpy_safe(void *dst, const void *src, size_t n) {
+        if (n == 0)
+                return dst;
+        assert(src);
+        return mempcpy(dst, src, n);
+}
+
+/* Normal memcmp() requires s1 and s2 to be nonnull. We do nothing if n is 0. */
 static inline int memcmp_safe(const void *s1, const void *s2, size_t n) {
         if (n == 0)
                 return 0;
@@ -47,7 +56,9 @@
 
 #define zero(x) (memzero(&(x), sizeof(x)))
 
-bool memeqzero(const void *data, size_t length);
+bool memeqbyte(uint8_t byte, const void *data, size_t length);
+
+#define memeqzero(data, length) memeqbyte(0x00, data, length)
 
 #define eqzero(x) memeqzero(x, sizeof(x))
 
@@ -71,16 +82,15 @@
         return memmem(haystack, haystacklen, needle, needlelen);
 }
 
-#if HAVE_EXPLICIT_BZERO
-static inline void* explicit_bzero_safe(void *p, size_t l) {
-        if (l > 0)
-                explicit_bzero(p, l);
+static inline void *mempmem_safe(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
+        const uint8_t *p;
 
-        return p;
+        p = memmem_safe(haystack, haystacklen, needle, needlelen);
+        if (!p)
+                return NULL;
+
+        return (uint8_t*) p + needlelen;
 }
-#else
-void *explicit_bzero_safe(void *p, size_t l);
-#endif
 
 static inline void* erase_and_free(void *p) {
         size_t l;
diff --git a/src/basic/mempool.c b/src/basic/mempool.c
index 7a959df..fff23fd 100644
--- a/src/basic/mempool.c
+++ b/src/basic/mempool.c
@@ -3,12 +3,9 @@
 #include <stdint.h>
 #include <stdlib.h>
 
-#include "env-util.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "mempool.h"
-#include "process-util.h"
-#include "util.h"
 
 struct pool {
         struct pool *next;
@@ -73,25 +70,6 @@
         mp->freelist = p;
 }
 
-bool mempool_enabled(void) {
-        static int b = -1;
-
-        if (!is_main_thread())
-                return false;
-#ifdef GOOGLE3_BLAZE_BUILD
-        // GOOGLE: circular build dependency on libsystemd exists.
-        // just define the mempool_use_allowed here to avoid that issue.
-        static const bool mempool_use_allowed = false;
-#endif // GOOGLE3_BLAZE_BUILD
-
-        if (!mempool_use_allowed)
-                b = false;
-        if (b < 0)
-                b = getenv_bool("SYSTEMD_MEMPOOL") != 0;
-
-        return b;
-}
-
 #if VALGRIND
 void mempool_drop(struct mempool *mp) {
         struct pool *p = mp->first_pool;
diff --git a/src/basic/mempool.h b/src/basic/mempool.h
index 0fe2f27..539ccbd 100644
--- a/src/basic/mempool.h
+++ b/src/basic/mempool.h
@@ -23,8 +23,7 @@
         .at_least = alloc_at_least, \
 }
 
-extern const bool mempool_use_allowed;
-bool mempool_enabled(void);
+__attribute__((weak)) bool mempool_enabled(void);
 
 #if VALGRIND
 void mempool_drop(struct mempool *mp);
diff --git a/src/basic/meson.build b/src/basic/meson.build
index 452b965..7aae031 100644
--- a/src/basic/meson.build
+++ b/src/basic/meson.build
@@ -1,249 +1,101 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-basic_sources = files('''
-        MurmurHash2.c
-        MurmurHash2.h
-        af-list.c
-        af-list.h
-        alloc-util.c
-        alloc-util.h
-        architecture.c
-        architecture.h
-        arphrd-list.c
-        arphrd-list.h
-        async.c
-        async.h
-        audit-util.c
-        audit-util.h
-        build.c
-        build.h
-        bus-label.c
-        bus-label.h
-        cap-list.c
-        cap-list.h
-        capability-util.c
-        capability-util.h
-        cgroup-util.c
-        cgroup-util.h
-        chattr-util.c
-        chattr-util.h
-        conf-files.c
-        conf-files.h
-        creds-util.c
-        creds-util.h
-        def.h
-        dirent-util.c
-        dirent-util.h
-        dns-def.h
-        efivars.c
-        efivars.h
-        env-file.c
-        env-file.h
-        env-util.c
-        env-util.h
-        errno-list.c
-        errno-list.h
-        errno-util.h
-        escape.c
-        escape.h
-        ether-addr-util.c
-        ether-addr-util.h
-        extract-word.c
-        extract-word.h
-        fd-util.c
-        fd-util.h
-        fileio.c
-        fileio.h
-        format-util.c
-        format-util.h
-        fs-util.c
-        fs-util.h
-        glob-util.c
-        glob-util.h
-        gunicode.c
-        gunicode.h
-        hash-funcs.c
-        hash-funcs.h
-        hashmap.c
-        hashmap.h
-        hexdecoct.c
-        hexdecoct.h
-        hostname-util.c
-        hostname-util.h
-        in-addr-util.c
-        in-addr-util.h
-        io-util.c
-        io-util.h
-        ioprio.h
-        khash.c
-        khash.h
-        limits-util.c
-        limits-util.h
-        linux/btrfs.h
-        linux/btrfs_tree.h
-        linux/can/netlink.h
-        linux/can/vxcan.h
-        linux/fib_rules.h
-        linux/fou.h
-        linux/hdlc/ioctl.h
-        linux/if.h
-        linux/if_addr.h
-        linux/if_bonding.h
-        linux/if_bridge.h
-        linux/if_ether.h
-        linux/if_link.h
-        linux/if_macsec.h
-        linux/if_tun.h
-        linux/if_tunnel.h
-        linux/in.h
-        linux/in6.h
-        linux/ipv6_route.h
-        linux/l2tp.h
-        linux/libc-compat.h
-        linux/loadavg.h
-        linux/netdevice.h
-        linux/netfilter/nf_tables.h
-        linux/netfilter/nfnetlink.h
-        linux/netlink.h
-        linux/nexthop.h
-        linux/nl80211.h
-        linux/pkt_sched.h
-        linux/rtnetlink.h
-        linux/wireguard.h
-        list.h
-        locale-util.c
-        locale-util.h
-        log.c
-        log.h
-        login-util.c
-        login-util.h
-        macro.h
-        memfd-util.c
-        memfd-util.h
-        memory-util.c
-        memory-util.h
-        mempool.c
-        mempool.h
-        missing_audit.h
-        missing_capability.h
-        missing_drm.h
-        missing_fcntl.h
-        missing_fs.h
-        missing_input.h
-        missing_keyctl.h
-        missing_magic.h
-        missing_mman.h
-        missing_mount.h
-        missing_network.h
-        missing_prctl.h
-        missing_random.h
-        missing_resource.h
-        missing_sched.h
-        missing_securebits.h
-        missing_socket.h
-        missing_stat.h
-        missing_stdlib.h
-        missing_syscall.h
-        missing_timerfd.h
-        missing_type.h
-        mkdir.c
-        mkdir.h
-        mountpoint-util.c
-        mountpoint-util.h
-        namespace-util.c
-        namespace-util.h
-        nss-util.h
-        nulstr-util.c
-        nulstr-util.h
-        ordered-set.c
-        ordered-set.h
-        os-util.c
-        os-util.h
-        parse-util.c
-        parse-util.h
-        path-lookup.c
-        path-lookup.h
-        path-util.c
-        path-util.h
-        percent-util.c
-        percent-util.h
-        prioq.c
-        prioq.h
-        proc-cmdline.c
-        proc-cmdline.h
-        process-util.c
-        process-util.h
-        procfs-util.c
-        procfs-util.h
-        pthread-util.h
-        random-util.c
-        random-util.h
-        ratelimit.c
-        ratelimit.h
-        raw-clone.h
-        raw-reboot.h
-        recovery-key.c
-        recovery-key.h
-        replace-var.c
-        replace-var.h
-        rlimit-util.c
-        rlimit-util.h
-        set.h
-        sigbus.c
-        sigbus.h
-        signal-util.c
-        signal-util.h
-        siphash24.c
-        siphash24.h
-        socket-util.c
-        socket-util.h
-        sort-util.c
-        sort-util.h
-        sparse-endian.h
-        special.h
-        stat-util.c
-        stat-util.h
-        static-destruct.h
-        stdio-util.h
-        strbuf.c
-        strbuf.h
-        string-table.c
-        string-table.h
-        string-util.c
-        string-util.h
-        strv.c
-        strv.h
-        strxcpyx.c
-        strxcpyx.h
-        sysctl-util.c
-        sysctl-util.h
-        syslog-util.c
-        syslog-util.h
-        terminal-util.c
-        terminal-util.h
-        time-util.c
-        time-util.h
-        tmpfile-util.c
-        tmpfile-util.h
-        umask-util.h
-        unaligned.h
-        unit-def.c
-        unit-def.h
-        unit-file.c
-        unit-file.h
-        unit-name.c
-        unit-name.h
-        user-util.c
-        user-util.h
-        utf8.c
-        utf8.h
-        util.c
-        util.h
-        virt.c
-        virt.h
-        xattr-util.c
-        xattr-util.h
-'''.split())
+basic_sources = files(
+        'MurmurHash2.c',
+        'af-list.c',
+        'alloc-util.c',
+        'architecture.c',
+        'argv-util.c',
+        'arphrd-util.c',
+        'async.c',
+        'audit-util.c',
+        'build.c',
+        'bus-label.c',
+        'cap-list.c',
+        'capability-util.c',
+        'cgroup-util.c',
+        'chase-symlinks.c',
+        'chattr-util.c',
+        'conf-files.c',
+        'devnum-util.c',
+        'dirent-util.c',
+        'efivars.c',
+        'env-file.c',
+        'env-util.c',
+        'errno-list.c',
+        'escape.c',
+        'ether-addr-util.c',
+        'extract-word.c',
+        'fd-util.c',
+        'fileio.c',
+        'filesystems.c',
+        'format-util.c',
+        'fs-util.c',
+        'glob-util.c',
+        'glyph-util.c',
+        'gunicode.c',
+        'hash-funcs.c',
+        'hashmap.c',
+        'hexdecoct.c',
+        'hmac.c',
+        'hostname-util.c',
+        'in-addr-util.c',
+        'initrd-util.c',
+        'inotify-util.c',
+        'io-util.c',
+        'ioprio-util.c',
+        'limits-util.c',
+        'locale-util.c',
+        'log.c',
+        'login-util.c',
+        'memfd-util.c',
+        'memory-util.c',
+        'mempool.c',
+        'mkdir.c',
+        'mountpoint-util.c',
+        'namespace-util.c',
+        'nulstr-util.c',
+        'ordered-set.c',
+        'os-util.c',
+        'parse-util.c',
+        'path-lookup.c',
+        'path-util.c',
+        'percent-util.c',
+        'prioq.c',
+        'proc-cmdline.c',
+        'process-util.c',
+        'procfs-util.c',
+        'random-util.c',
+        'ratelimit.c',
+        'recurse-dir.c',
+        'replace-var.c',
+        'rlimit-util.c',
+        'sigbus.c',
+        'signal-util.c',
+        'siphash24.c',
+        'socket-util.c',
+        'sort-util.c',
+        'stat-util.c',
+        'strbuf.c',
+        'string-table.c',
+        'string-util.c',
+        'strv.c',
+        'strxcpyx.c',
+        'sync-util.c',
+        'sysctl-util.c',
+        'syslog-util.c',
+        'terminal-util.c',
+        'time-util.c',
+        'tmpfile-util.c',
+        'uid-range.c',
+        'unit-def.c',
+        'unit-file.c',
+        'unit-name.c',
+        'user-util.c',
+        'utf8.c',
+        'virt.c',
+        'xattr-util.c',
+)
 
 missing_audit_h = files('missing_audit.h')
 missing_capability_h = files('missing_capability.h')
@@ -330,10 +182,12 @@
         'arm64',
         'i386',
         'ia64',
+        'loongarch64',
         'm68k',
         'mips64',
         'mips64n32',
         'mipso32',
+        'parisc',
         'powerpc',
         'powerpc64',
         'riscv32',
@@ -365,6 +219,43 @@
 
 ############################################################
 
+filesystem_includes = ['linux/magic.h',
+                       'linux/gfs2_ondisk.h']
+
+check_filesystems = find_program('check-filesystems.sh')
+r = run_command([check_filesystems, cpp, files('filesystems-gperf.gperf')] + filesystem_includes, check: false)
+if r.returncode() != 0
+        error('Unknown filesystems defined in kernel headers:\n\n' + r.stdout())
+endif
+
+filesystems_gperf_h = custom_target(
+        'filesystems-gperf.h',
+        input : 'filesystems-gperf.gperf',
+        output : 'filesystems-gperf.h',
+        command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+generate_filesystem_list = find_program('generate-filesystem-list.py')
+fname = 'filesystem-list.h'
+filesystem_list_h = custom_target(
+        fname,
+        input : 'filesystems-gperf.gperf',
+        output : fname,
+        command : [generate_filesystem_list,
+                   '@INPUT@'],
+        capture : true)
+
+generate_filesystem_switch_case_h = find_program('generate-filesystem-switch-case.py')
+fname = 'filesystem-switch-case.h'
+filesystem_switch_case_h = custom_target(
+        fname,
+        input : 'filesystems-gperf.gperf',
+        output : 'filesystem-switch-case.h',
+        command : [generate_filesystem_switch_case_h,
+                   '@INPUT@'],
+        capture : true)
+
+basic_sources += [filesystem_list_h, filesystem_switch_case_h, filesystems_gperf_h]
+
 libbasic = static_library(
         'basic',
         basic_sources,
@@ -375,13 +266,13 @@
                         libcap,
                         libm],
         c_args : ['-fvisibility=default'],
-        install : false)
+        build_by_default : false)
 
 ############################################################
 
 basic_gcrypt_sources = files(
         'gcrypt-util.c',
-        'gcrypt-util.h')
+)
 
 # A convenience library that is separate from libbasic to avoid
 # unnecessary linking to libgcrypt.
@@ -390,4 +281,23 @@
         basic_gcrypt_sources,
         include_directories : basic_includes,
         dependencies : [libgcrypt],
-        c_args : ['-fvisibility=default'])
+        c_args : ['-fvisibility=default'],
+        build_by_default : false)
+
+############################################################
+
+basic_compress_sources = files(
+        'compress.c',
+)
+
+# A convenience library that is separate from libbasic to avoid unnecessary
+# linking to the compression libraries.
+libbasic_compress = static_library(
+        'basic-compress',
+        basic_compress_sources,
+        include_directories : basic_includes,
+        dependencies : [libxz,
+                        libzstd,
+                        liblz4],
+        c_args : ['-fvisibility=default'],
+        build_by_default : false)
diff --git a/src/basic/missing_fs.h b/src/basic/missing_fs.h
index 79c1620..6638d76 100644
--- a/src/basic/missing_fs.h
+++ b/src/basic/missing_fs.h
@@ -6,6 +6,10 @@
 #define RENAME_NOREPLACE (1 << 0)
 #endif
 
+#ifndef BLKGETDISKSEQ
+#define BLKGETDISKSEQ _IOR(0x12,128,__u64)
+#endif
+
 /* linux/fs.h or sys/mount.h */
 #ifndef MS_MOVE
 #define MS_MOVE 8192
@@ -52,11 +56,6 @@
 #define EXT4_IOC_RESIZE_FS _IOW('f', 16, __u64)
 #endif
 
-/* Not exposed yet. Defined at fs/cifs/cifsglob.h */
-#ifndef CIFS_MAGIC_NUMBER
-#define CIFS_MAGIC_NUMBER 0xFF534D42
-#endif
-
 /* linux/nsfs.h */
 #ifndef NS_GET_NSTYPE /* d95fa3c76a66b6d76b1e109ea505c55e66360f3c (4.11) */
 #define NS_GET_NSTYPE _IO(0xb7, 0x3)
@@ -65,3 +64,8 @@
 #ifndef FS_PROJINHERIT_FL
 #define FS_PROJINHERIT_FL 0x20000000
 #endif
+
+/* linux/fscrypt.h */
+#ifndef FS_KEY_DESCRIPTOR_SIZE
+#define FS_KEY_DESCRIPTOR_SIZE 8
+#endif
diff --git a/src/basic/missing_ioprio.h b/src/basic/missing_ioprio.h
new file mode 100644
index 0000000..9cbd172
--- /dev/null
+++ b/src/basic/missing_ioprio.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <sched.h>
+
+/* Match values uses by the kernel internally, as no public header seems to exist. */
+
+#ifndef IOPRIO_N_CLASSES
+#  define IOPRIO_N_CLASSES 8
+#endif
+
+#ifndef IOPRIO_BE_NR
+#  define IOPRIO_BE_NR 8
+#endif
+
+#ifndef IOPRIO_CLASS_NONE
+#  define IOPRIO_CLASS_NONE 0
+#endif
+#ifndef IOPRIO_CLASS_RT
+#  define IOPRIO_CLASS_RT   1
+#endif
+#ifndef IOPRIO_CLASS_BE
+#  define IOPRIO_CLASS_BE   2
+#endif
+#ifndef IOPRIO_CLASS_IDLE
+#  define IOPRIO_CLASS_IDLE 3
+#endif
+
+#ifndef IOPRIO_WHO_PROCESS
+#  define IOPRIO_WHO_PROCESS 1
+#endif
+#ifndef IOPRIO_WHO_PGRP
+#  define IOPRIO_WHO_PGRP    2
+#endif
+#ifndef IOPRIO_WHO_USER
+#  define IOPRIO_WHO_USER    3
+#endif
+
+#ifndef IOPRIO_BITS
+#  define IOPRIO_BITS        16
+#endif
+#ifndef IOPRIO_N_CLASSES
+#  define IOPRIO_N_CLASSES    8
+#endif
+#ifndef IOPRIO_CLASS_SHIFT
+#  define IOPRIO_CLASS_SHIFT 13
+#endif
+
+static inline int ioprio_prio_class(int value) {
+        return value >> IOPRIO_CLASS_SHIFT;
+}
+
+static inline int ioprio_prio_data(int value) {
+        return value & ((1 << IOPRIO_CLASS_SHIFT) - 1);
+}
+
+static inline int ioprio_prio_value(int class, int data) {
+        return (class << IOPRIO_CLASS_SHIFT) | data;
+}
diff --git a/src/basic/missing_keyctl.h b/src/basic/missing_keyctl.h
index 5680483..081003a 100644
--- a/src/basic/missing_keyctl.h
+++ b/src/basic/missing_keyctl.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <inttypes.h>
 #include <linux/keyctl.h>
 
 #ifndef KEYCTL_JOIN_SESSION_KEYRING
diff --git a/src/basic/missing_loop.h b/src/basic/missing_loop.h
index b22ebda..7141544 100644
--- a/src/basic/missing_loop.h
+++ b/src/basic/missing_loop.h
@@ -13,3 +13,12 @@
 
 #define LOOP_CONFIGURE 0x4C0A
 #endif
+
+#ifndef LO_FLAGS_DIRECT_IO
+#define LO_FLAGS_DIRECT_IO 16
+#define LOOP_SET_DIRECT_IO 0x4C08
+#endif
+
+#ifndef LOOP_SET_STATUS_SETTABLE_FLAGS
+#define LOOP_SET_STATUS_SETTABLE_FLAGS (LO_FLAGS_AUTOCLEAR | LO_FLAGS_PARTSCAN | LO_FLAGS_DIRECT_IO)
+#endif
diff --git a/src/basic/missing_magic.h b/src/basic/missing_magic.h
index e7466cb..27a33ad 100644
--- a/src/basic/missing_magic.h
+++ b/src/basic/missing_magic.h
@@ -37,3 +37,158 @@
 #ifndef XFS_SB_MAGIC
 #define XFS_SB_MAGIC 0x58465342
 #endif
+
+/* dea2903719283c156b53741126228c4a1b40440f (5.17) */
+#ifndef CIFS_SUPER_MAGIC
+#define CIFS_SUPER_MAGIC 0xFF534D42
+#endif
+
+/* dea2903719283c156b53741126228c4a1b40440f (5.17) */
+#ifndef SMB2_SUPER_MAGIC
+#define SMB2_SUPER_MAGIC 0xFE534D42
+#endif
+
+/* 257f871993474e2bde6c497b54022c362cf398e1 (4.5) */
+#ifndef OVERLAYFS_SUPER_MAGIC
+#define OVERLAYFS_SUPER_MAGIC 0x794c7630
+#endif
+
+/* 2a28900be20640fcd1e548b1e3bad79e8221fcf9 (4.7) */
+#ifndef UDF_SUPER_MAGIC
+#define UDF_SUPER_MAGIC 0x15013346
+#endif
+
+/* b1123ea6d3b3da25af5c8a9d843bd07ab63213f4 (4.8) */
+#ifndef BALLOON_KVM_MAGIC
+#define BALLOON_KVM_MAGIC 0x13661366
+#endif
+
+/* 48b4800a1c6af2cdda344ea4e2c843dcc1f6afc9 (4.8) */
+#ifndef ZSMALLOC_MAGIC
+#define ZSMALLOC_MAGIC 0x58295829
+#endif
+
+/* 3bc52c45bac26bf7ed1dc8d287ad1aeaed1250b6 (4.9) */
+#ifndef DAXFS_MAGIC
+#define DAXFS_MAGIC 0x64646178
+#endif
+
+/* 5ff193fbde20df5d80fec367cea3e7856c057320 (4.10) */
+#ifndef RDTGROUP_SUPER_MAGIC
+#define RDTGROUP_SUPER_MAGIC 0x7655821
+#endif
+
+/* a481f4d917835cad86701fc0d1e620c74bb5cd5f (4.13) */
+#ifndef AAFS_MAGIC
+#define AAFS_MAGIC 0x5a3c69f0
+#endif
+
+/* f044c8847bb61eff5e1e95b6f6bb950e7f4a73a4 (4.15) */
+#ifndef AFS_FS_MAGIC
+#define AFS_FS_MAGIC 0x6b414653
+#endif
+
+/* dddde68b8f06dd83486124b8d245e7bfb15c185d (4.20) */
+#ifndef XFS_SUPER_MAGIC
+#define XFS_SUPER_MAGIC 0x58465342
+#endif
+
+/* 3ad20fe393b31025bebfc2d76964561f65df48aa (5.0) */
+#ifndef BINDERFS_SUPER_MAGIC
+#define BINDERFS_SUPER_MAGIC 0x6c6f6f70
+#endif
+
+/* ed63bb1d1f8469586006a9ca63c42344401aa2ab (5.3) */
+#ifndef DMA_BUF_MAGIC
+#define DMA_BUF_MAGIC 0x444d4142
+#endif
+
+/* ea8157ab2ae5e914dd427e5cfab533b6da3819cd (5.3) */
+#ifndef Z3FOLD_MAGIC
+#define Z3FOLD_MAGIC 0x33
+#endif
+
+/* 47e4937a4a7ca4184fd282791dfee76c6799966a (5.4) */
+#ifndef EROFS_SUPER_MAGIC_V1
+#define EROFS_SUPER_MAGIC_V1 0xe0f5e1e2
+#endif
+
+/* fe030c9b85e6783bc52fe86449c0a4b8aa16c753 (5.5) */
+#ifndef PPC_CMM_MAGIC
+#define PPC_CMM_MAGIC 0xc7571590
+#endif
+
+/* 8dcc1a9d90c10fa4143e5c17821082e5e60e46a1 (5.6) */
+#ifndef ZONEFS_MAGIC
+#define ZONEFS_MAGIC 0x5a4f4653
+#endif
+
+/* 3234ac664a870e6ea69ae3a57d824cd7edbeacc5 (5.8) */
+#ifndef DEVMEM_MAGIC
+#define DEVMEM_MAGIC 0x454d444d
+#endif
+
+/* Not in mainline but included in Ubuntu */
+#ifndef SHIFTFS_MAGIC
+#define SHIFTFS_MAGIC 0x6a656a62
+#endif
+
+/* 1507f51255c9ff07d75909a84e7c0d7f3c4b2f49 (5.14) */
+#ifndef SECRETMEM_MAGIC
+#define SECRETMEM_MAGIC 0x5345434d
+#endif
+
+/* Not exposed yet. Defined at fs/fuse/inode.c */
+#ifndef FUSE_SUPER_MAGIC
+#define FUSE_SUPER_MAGIC 0x65735546
+#endif
+
+/* Not exposed yet. Defined at fs/fuse/control.c */
+#ifndef FUSE_CTL_SUPER_MAGIC
+#define FUSE_CTL_SUPER_MAGIC 0x65735543
+#endif
+
+/* Not exposed yet. Defined at fs/ceph/super.h */
+#ifndef CEPH_SUPER_MAGIC
+#define CEPH_SUPER_MAGIC 0x00c36400
+#endif
+
+/* Not exposed yet. Defined at fs/orangefs/orangefs-kernel.h */
+#ifndef ORANGEFS_DEVREQ_MAGIC
+#define ORANGEFS_DEVREQ_MAGIC 0x20030529
+#endif
+
+/* linux/gfs2_ondisk.h */
+#ifndef GFS2_MAGIC
+#define GFS2_MAGIC 0x01161970
+#endif
+
+/* Not exposed yet. Defined at fs/configfs/mount.c */
+#ifndef CONFIGFS_MAGIC
+#define CONFIGFS_MAGIC 0x62656570
+#endif
+
+/* Not exposed yet. Defined at fs/vboxsf/super.c */
+#ifndef VBOXSF_SUPER_MAGIC
+#define VBOXSF_SUPER_MAGIC 0x786f4256
+#endif
+
+/* Not exposed yet. Defined at fs/exfat/exfat_fs.h */
+#ifndef EXFAT_SUPER_MAGIC
+#define EXFAT_SUPER_MAGIC 0x2011BAB0UL
+#endif
+
+/* Not exposed yet, internally actually called RPCAUTH_GSSMAGIC. Defined in net/sunrpc/rpc_pipe.c */
+#ifndef RPC_PIPEFS_SUPER_MAGIC
+#define RPC_PIPEFS_SUPER_MAGIC 0x67596969
+#endif
+
+/* Not exposed yet, defined at fs/ntfs/ntfs.h */
+#ifndef NTFS_SB_MAGIC
+#define NTFS_SB_MAGIC 0x5346544e
+#endif
+
+/* Not exposed yet, encoded literally in fs/ntfs3/super.c. */
+#ifndef NTFS3_SUPER_MAGIC
+#define NTFS3_SUPER_MAGIC 0x7366746e
+#endif
diff --git a/src/basic/missing_mount.h b/src/basic/missing_mount.h
index c60acf0..69b0bcf 100644
--- a/src/basic/missing_mount.h
+++ b/src/basic/missing_mount.h
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
 #include <sys/mount.h>
diff --git a/src/basic/missing_network.h b/src/basic/missing_network.h
index f9db690..776c7c8 100644
--- a/src/basic/missing_network.h
+++ b/src/basic/missing_network.h
@@ -34,3 +34,50 @@
 #ifndef ETHERTYPE_LLDP
 #define ETHERTYPE_LLDP 0x88cc
 #endif
+
+/* Not exposed but defined in linux/netdevice.h */
+#ifndef MAX_PHYS_ITEM_ID_LEN
+#define MAX_PHYS_ITEM_ID_LEN 32
+#endif
+
+/* Not exposed but defined in include/net/bonding.h */
+#ifndef BOND_MAX_ARP_TARGETS
+#define BOND_MAX_ARP_TARGETS 16
+#endif
+
+/* Not exposed but defined in include/linux/ieee80211.h */
+#ifndef IEEE80211_MAX_SSID_LEN
+#define IEEE80211_MAX_SSID_LEN 32
+#endif
+
+/* Not exposed but defined in include/net/netlabel.h */
+#ifndef NETLBL_NLTYPE_UNLABELED_NAME
+#define NETLBL_NLTYPE_UNLABELED_NAME "NLBL_UNLBL"
+#endif
+
+/* Not exposed but defined in net/netlabel/netlabel_unlabeled.h */
+enum {
+        NLBL_UNLABEL_C_UNSPEC,
+        NLBL_UNLABEL_C_ACCEPT,
+        NLBL_UNLABEL_C_LIST,
+        NLBL_UNLABEL_C_STATICADD,
+        NLBL_UNLABEL_C_STATICREMOVE,
+        NLBL_UNLABEL_C_STATICLIST,
+        NLBL_UNLABEL_C_STATICADDDEF,
+        NLBL_UNLABEL_C_STATICREMOVEDEF,
+        NLBL_UNLABEL_C_STATICLISTDEF,
+        __NLBL_UNLABEL_C_MAX,
+};
+
+/* Not exposed but defined in net/netlabel/netlabel_unlabeled.h */
+enum {
+        NLBL_UNLABEL_A_UNSPEC,
+        NLBL_UNLABEL_A_ACPTFLG,
+        NLBL_UNLABEL_A_IPV6ADDR,
+        NLBL_UNLABEL_A_IPV6MASK,
+        NLBL_UNLABEL_A_IPV4ADDR,
+        NLBL_UNLABEL_A_IPV4MASK,
+        NLBL_UNLABEL_A_IFACE,
+        NLBL_UNLABEL_A_SECCTX,
+        __NLBL_UNLABEL_A_MAX,
+};
diff --git a/src/basic/missing_sched.h b/src/basic/missing_sched.h
index 6a889f6..bcd5b77 100644
--- a/src/basic/missing_sched.h
+++ b/src/basic/missing_sched.h
@@ -7,6 +7,11 @@
 #define CLONE_NEWCGROUP 0x02000000
 #endif
 
+/* 769071ac9f20b6a447410c7eaa55d1a5233ef40c (5.8) */
+#ifndef CLONE_NEWTIME
+#define CLONE_NEWTIME 0x00000080
+#endif
+
 /* Not exposed yet. Defined at include/linux/sched.h */
 #ifndef PF_KTHREAD
 #define PF_KTHREAD 0x00200000
diff --git a/src/basic/missing_securebits.h b/src/basic/missing_securebits.h
index 40d6ec9..03fad6f 100644
--- a/src/basic/missing_securebits.h
+++ b/src/basic/missing_securebits.h
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
 #include <linux/securebits.h>
diff --git a/src/basic/missing_syscall.h b/src/basic/missing_syscall.h
index fd73930..24c1798 100644
--- a/src/basic/missing_syscall.h
+++ b/src/basic/missing_syscall.h
@@ -20,6 +20,7 @@
 #include <asm/sgidefs.h>
 #endif
 
+#include "macro.h"
 #include "missing_keyctl.h"
 #include "missing_stat.h"
 #include "missing_syscall_def.h"
@@ -41,6 +42,26 @@
 
 /* ======================================================================= */
 
+#if !HAVE_IOPRIO_GET
+static inline int missing_ioprio_get(int which, int who) {
+        return syscall(__NR_ioprio_get, which, who);
+}
+
+#  define ioprio_get missing_ioprio_get
+#endif
+
+/* ======================================================================= */
+
+#if !HAVE_IOPRIO_SET
+static inline int missing_ioprio_set(int which, int who, int ioprio) {
+        return syscall(__NR_ioprio_set, which, who, ioprio);
+}
+
+#  define ioprio_set missing_ioprio_set
+#endif
+
+/* ======================================================================= */
+
 #if !HAVE_MEMFD_CREATE
 static inline int missing_memfd_create(const char *name, unsigned int flags) {
 #  ifdef __NR_memfd_create
@@ -364,6 +385,20 @@
 
 /* ======================================================================= */
 
+#if !HAVE_RT_TGSIGQUEUEINFO
+static inline int missing_rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, siginfo_t *info) {
+#  if defined __NR_rt_tgsigqueueinfo && __NR_rt_tgsigqueueinfo >= 0
+        return syscall(__NR_rt_tgsigqueueinfo, tgid, tid, sig, info);
+#  else
+#    error "__NR_rt_tgsigqueueinfo not defined"
+#  endif
+}
+
+#  define rt_tgsigqueueinfo missing_rt_tgsigqueueinfo
+#endif
+
+/* ======================================================================= */
+
 #if !HAVE_EXECVEAT
 static inline int missing_execveat(int dirfd, const char *pathname,
                                    char *const argv[], char *const envp[],
@@ -413,44 +448,6 @@
 
 /* ======================================================================= */
 
-#if !HAVE_EPOLL_PWAIT2
-
-/* Defined to be equivalent to the kernel's _NSIG_WORDS, i.e. the size of the array of longs that is
- * encapsulated by sigset_t. */
-#define KERNEL_NSIG_WORDS (64 / (sizeof(long) * 8))
-#define KERNEL_NSIG_BYTES (KERNEL_NSIG_WORDS * sizeof(long))
-
-struct epoll_event;
-
-static inline int missing_epoll_pwait2(
-                int fd,
-                struct epoll_event *events,
-                int maxevents,
-                const struct timespec *timeout,
-                const sigset_t *sigset) {
-
-#  if defined(__NR_epoll_pwait2) && HAVE_LINUX_TIME_TYPES_H
-        if (timeout) {
-                /* Convert from userspace timespec to kernel timespec */
-                struct __kernel_timespec ts = {
-                        .tv_sec = timeout->tv_sec,
-                        .tv_nsec = timeout->tv_nsec,
-                };
-
-                return syscall(__NR_epoll_pwait2, fd, events, maxevents, &ts, sigset, sigset ? KERNEL_NSIG_BYTES : 0);
-        } else
-                return syscall(__NR_epoll_pwait2, fd, events, maxevents, NULL, sigset, sigset ? KERNEL_NSIG_BYTES : 0);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define epoll_pwait2 missing_epoll_pwait2
-#endif
-
-/* ======================================================================= */
-
 #if !HAVE_MOUNT_SETATTR
 
 #if !HAVE_STRUCT_MOUNT_ATTR
@@ -464,8 +461,52 @@
 struct mount_attr;
 #endif
 
+#ifndef MOUNT_ATTR_RDONLY
+#define MOUNT_ATTR_RDONLY       0x00000001 /* Mount read-only */
+#endif
+
+#ifndef MOUNT_ATTR_NOSUID
+#define MOUNT_ATTR_NOSUID       0x00000002 /* Ignore suid and sgid bits */
+#endif
+
+#ifndef MOUNT_ATTR_NODEV
+#define MOUNT_ATTR_NODEV        0x00000004 /* Disallow access to device special files */
+#endif
+
+#ifndef MOUNT_ATTR_NOEXEC
+#define MOUNT_ATTR_NOEXEC       0x00000008 /* Disallow program execution */
+#endif
+
+#ifndef MOUNT_ATTR__ATIME
+#define MOUNT_ATTR__ATIME       0x00000070 /* Setting on how atime should be updated */
+#endif
+
+#ifndef MOUNT_ATTR_RELATIME
+#define MOUNT_ATTR_RELATIME     0x00000000 /* - Update atime relative to mtime/ctime. */
+#endif
+
+#ifndef MOUNT_ATTR_NOATIME
+#define MOUNT_ATTR_NOATIME      0x00000010 /* - Do not update access times. */
+#endif
+
+#ifndef MOUNT_ATTR_STRICTATIME
+#define MOUNT_ATTR_STRICTATIME  0x00000020 /* - Always perform atime updates */
+#endif
+
+#ifndef MOUNT_ATTR_NODIRATIME
+#define MOUNT_ATTR_NODIRATIME   0x00000080 /* Do not update directory access times */
+#endif
+
 #ifndef MOUNT_ATTR_IDMAP
-#define MOUNT_ATTR_IDMAP 0x00100000
+#define MOUNT_ATTR_IDMAP        0x00100000 /* Idmap mount to @userns_fd in struct mount_attr. */
+#endif
+
+#ifndef MOUNT_ATTR_NOSYMFOLLOW
+#define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks */
+#endif
+
+#ifndef MOUNT_ATTR_SIZE_VER0
+#define MOUNT_ATTR_SIZE_VER0    32 /* sizeof first published struct */
 #endif
 
 #ifndef AT_RECURSIVE
@@ -547,3 +588,59 @@
 
 #  define move_mount missing_move_mount
 #endif
+
+/* ======================================================================= */
+
+#if !HAVE_FSOPEN
+
+#ifndef FSOPEN_CLOEXEC
+#define FSOPEN_CLOEXEC 0x00000001
+#endif
+
+static inline int missing_fsopen(const char *fsname, unsigned flags) {
+#  if defined __NR_fsopen && __NR_fsopen >= 0
+        return syscall(__NR_fsopen, fsname, flags);
+#  else
+        errno = ENOSYS;
+        return -1;
+#  endif
+}
+
+#  define fsopen missing_fsopen
+#endif
+
+/* ======================================================================= */
+
+#if !HAVE_FSCONFIG
+
+#ifndef FSCONFIG_SET_STRING
+#define FSCONFIG_SET_STRING 1 /* Set parameter, supplying a string value */
+#endif
+
+static inline int missing_fsconfig(int fd, unsigned cmd, const char *key, const void *value, int aux) {
+#  if defined __NR_fsconfig && __NR_fsconfig >= 0
+        return syscall(__NR_fsconfig, fd, cmd, key, value, aux);
+#  else
+        errno = ENOSYS;
+        return -1;
+#  endif
+}
+
+#  define fsconfig missing_fsconfig
+#endif
+
+/* ======================================================================= */
+
+#if !HAVE_GETDENTS64
+
+static inline ssize_t missing_getdents64(int fd, void *buffer, size_t length) {
+#  if defined __NR_getdents64 && __NR_getdents64 >= 0
+        return syscall(__NR_getdents64, fd, buffer, length);
+#  else
+        errno = ENOSYS;
+        return -1;
+#  endif
+}
+
+#  define getdents64 missing_getdents64
+#endif
diff --git a/src/basic/missing_syscall_def.h b/src/basic/missing_syscall_def.h
index 29dfd2e..402fdd0 100644
--- a/src/basic/missing_syscall_def.h
+++ b/src/basic/missing_syscall_def.h
@@ -4,6 +4,7 @@
  * Use 'ninja -C build update-syscall-tables' to download new syscall tables,
  * and 'ninja -C build update-syscall-header' to regenerate this file.
  */
+#pragma once
 
 /* Note: if this code looks strange, this is because it is derived from the same
  * template as the per-syscall blocks below. */
@@ -13,6 +14,7 @@
 #  elif defined(__arm__)
 #  elif defined(__i386__)
 #  elif defined(__ia64__)
+#  elif defined(__loongarch64)
 #  elif defined(__m68k__)
 #  elif defined(_MIPS_SIM)
 #    if _MIPS_SIM == _MIPS_SIM_ABI32
@@ -21,6 +23,7 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
 #  elif defined(__powerpc__)
 #  elif defined(__riscv)
 #    if __riscv_xlen == 32
@@ -52,6 +55,8 @@
 #    define systemd_NR_bpf 357
 #  elif defined(__ia64__)
 #    define systemd_NR_bpf 1341
+#  elif defined(__loongarch64)
+#    define systemd_NR_bpf 280
 #  elif defined(__m68k__)
 #    define systemd_NR_bpf 354
 #  elif defined(_MIPS_SIM)
@@ -64,6 +69,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_bpf 341
 #  elif defined(__powerpc__)
 #    define systemd_NR_bpf 361
 #  elif defined(__riscv)
@@ -116,6 +123,8 @@
 #    define systemd_NR_close_range 436
 #  elif defined(__ia64__)
 #    define systemd_NR_close_range 1460
+#  elif defined(__loongarch64)
+#    define systemd_NR_close_range 436
 #  elif defined(__m68k__)
 #    define systemd_NR_close_range 436
 #  elif defined(_MIPS_SIM)
@@ -128,6 +137,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_close_range 436
 #  elif defined(__powerpc__)
 #    define systemd_NR_close_range 436
 #  elif defined(__riscv)
@@ -180,6 +191,8 @@
 #    define systemd_NR_copy_file_range 377
 #  elif defined(__ia64__)
 #    define systemd_NR_copy_file_range 1347
+#  elif defined(__loongarch64)
+#    define systemd_NR_copy_file_range 285
 #  elif defined(__m68k__)
 #    define systemd_NR_copy_file_range 376
 #  elif defined(_MIPS_SIM)
@@ -192,6 +205,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_copy_file_range 346
 #  elif defined(__powerpc__)
 #    define systemd_NR_copy_file_range 379
 #  elif defined(__riscv)
@@ -231,70 +246,6 @@
 #  endif
 #endif
 
-#ifndef __IGNORE_epoll_pwait2
-#  if defined(__aarch64__)
-#    define systemd_NR_epoll_pwait2 441
-#  elif defined(__alpha__)
-#    define systemd_NR_epoll_pwait2 551
-#  elif defined(__arc__) || defined(__tilegx__)
-#    define systemd_NR_epoll_pwait2 441
-#  elif defined(__arm__)
-#    define systemd_NR_epoll_pwait2 441
-#  elif defined(__i386__)
-#    define systemd_NR_epoll_pwait2 441
-#  elif defined(__ia64__)
-#    define systemd_NR_epoll_pwait2 1465
-#  elif defined(__m68k__)
-#    define systemd_NR_epoll_pwait2 441
-#  elif defined(_MIPS_SIM)
-#    if _MIPS_SIM == _MIPS_SIM_ABI32
-#      define systemd_NR_epoll_pwait2 4441
-#    elif _MIPS_SIM == _MIPS_SIM_NABI32
-#      define systemd_NR_epoll_pwait2 6441
-#    elif _MIPS_SIM == _MIPS_SIM_ABI64
-#      define systemd_NR_epoll_pwait2 5441
-#    else
-#      error "Unknown MIPS ABI"
-#    endif
-#  elif defined(__powerpc__)
-#    define systemd_NR_epoll_pwait2 441
-#  elif defined(__riscv)
-#    if __riscv_xlen == 32
-#      define systemd_NR_epoll_pwait2 441
-#    elif __riscv_xlen == 64
-#      define systemd_NR_epoll_pwait2 441
-#    else
-#      error "Unknown RISC-V ABI"
-#    endif
-#  elif defined(__s390__)
-#    define systemd_NR_epoll_pwait2 441
-#  elif defined(__sparc__)
-#    define systemd_NR_epoll_pwait2 441
-#  elif defined(__x86_64__)
-#    if defined(__ILP32__)
-#      define systemd_NR_epoll_pwait2 (441 | /* __X32_SYSCALL_BIT */ 0x40000000)
-#    else
-#      define systemd_NR_epoll_pwait2 441
-#    endif
-#  elif !defined(missing_arch_template)
-#    warning "epoll_pwait2() syscall number is unknown for your architecture"
-#  endif
-
-/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
-#  if defined __NR_epoll_pwait2 && __NR_epoll_pwait2 >= 0
-#    if defined systemd_NR_epoll_pwait2
-assert_cc(__NR_epoll_pwait2 == systemd_NR_epoll_pwait2);
-#    endif
-#  else
-#    if defined __NR_epoll_pwait2
-#      undef __NR_epoll_pwait2
-#    endif
-#    if defined systemd_NR_epoll_pwait2 && systemd_NR_epoll_pwait2 >= 0
-#      define __NR_epoll_pwait2 systemd_NR_epoll_pwait2
-#    endif
-#  endif
-#endif
-
 #ifndef __IGNORE_getrandom
 #  if defined(__aarch64__)
 #    define systemd_NR_getrandom 278
@@ -308,6 +259,8 @@
 #    define systemd_NR_getrandom 355
 #  elif defined(__ia64__)
 #    define systemd_NR_getrandom 1339
+#  elif defined(__loongarch64)
+#    define systemd_NR_getrandom 278
 #  elif defined(__m68k__)
 #    define systemd_NR_getrandom 352
 #  elif defined(_MIPS_SIM)
@@ -320,6 +273,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_getrandom 339
 #  elif defined(__powerpc__)
 #    define systemd_NR_getrandom 359
 #  elif defined(__riscv)
@@ -372,6 +327,8 @@
 #    define systemd_NR_memfd_create 356
 #  elif defined(__ia64__)
 #    define systemd_NR_memfd_create 1340
+#  elif defined(__loongarch64)
+#    define systemd_NR_memfd_create 279
 #  elif defined(__m68k__)
 #    define systemd_NR_memfd_create 353
 #  elif defined(_MIPS_SIM)
@@ -384,6 +341,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_memfd_create 340
 #  elif defined(__powerpc__)
 #    define systemd_NR_memfd_create 360
 #  elif defined(__riscv)
@@ -436,6 +395,8 @@
 #    define systemd_NR_mount_setattr 442
 #  elif defined(__ia64__)
 #    define systemd_NR_mount_setattr 1466
+#  elif defined(__loongarch64)
+#    define systemd_NR_mount_setattr 442
 #  elif defined(__m68k__)
 #    define systemd_NR_mount_setattr 442
 #  elif defined(_MIPS_SIM)
@@ -448,6 +409,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_mount_setattr 442
 #  elif defined(__powerpc__)
 #    define systemd_NR_mount_setattr 442
 #  elif defined(__riscv)
@@ -500,6 +463,8 @@
 #    define systemd_NR_move_mount 429
 #  elif defined(__ia64__)
 #    define systemd_NR_move_mount 1453
+#  elif defined(__loongarch64)
+#    define systemd_NR_move_mount 429
 #  elif defined(__m68k__)
 #    define systemd_NR_move_mount 429
 #  elif defined(_MIPS_SIM)
@@ -512,6 +477,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_move_mount 429
 #  elif defined(__powerpc__)
 #    define systemd_NR_move_mount 429
 #  elif defined(__riscv)
@@ -564,6 +531,8 @@
 #    define systemd_NR_name_to_handle_at 341
 #  elif defined(__ia64__)
 #    define systemd_NR_name_to_handle_at 1326
+#  elif defined(__loongarch64)
+#    define systemd_NR_name_to_handle_at 264
 #  elif defined(__m68k__)
 #    define systemd_NR_name_to_handle_at 340
 #  elif defined(_MIPS_SIM)
@@ -576,6 +545,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_name_to_handle_at 325
 #  elif defined(__powerpc__)
 #    define systemd_NR_name_to_handle_at 345
 #  elif defined(__riscv)
@@ -628,6 +599,8 @@
 #    define systemd_NR_open_tree 428
 #  elif defined(__ia64__)
 #    define systemd_NR_open_tree 1452
+#  elif defined(__loongarch64)
+#    define systemd_NR_open_tree 428
 #  elif defined(__m68k__)
 #    define systemd_NR_open_tree 428
 #  elif defined(_MIPS_SIM)
@@ -640,6 +613,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_open_tree 428
 #  elif defined(__powerpc__)
 #    define systemd_NR_open_tree 428
 #  elif defined(__riscv)
@@ -706,6 +681,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_openat2 437
 #  elif defined(__powerpc__)
 #    define systemd_NR_openat2 437
 #  elif defined(__riscv)
@@ -758,6 +735,8 @@
 #    define systemd_NR_pidfd_open 434
 #  elif defined(__ia64__)
 #    define systemd_NR_pidfd_open 1458
+#  elif defined(__loongarch64)
+#    define systemd_NR_pidfd_open 434
 #  elif defined(__m68k__)
 #    define systemd_NR_pidfd_open 434
 #  elif defined(_MIPS_SIM)
@@ -770,6 +749,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_pidfd_open 434
 #  elif defined(__powerpc__)
 #    define systemd_NR_pidfd_open 434
 #  elif defined(__riscv)
@@ -822,6 +803,8 @@
 #    define systemd_NR_pidfd_send_signal 424
 #  elif defined(__ia64__)
 #    define systemd_NR_pidfd_send_signal 1448
+#  elif defined(__loongarch64)
+#    define systemd_NR_pidfd_send_signal 424
 #  elif defined(__m68k__)
 #    define systemd_NR_pidfd_send_signal 424
 #  elif defined(_MIPS_SIM)
@@ -834,6 +817,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_pidfd_send_signal 424
 #  elif defined(__powerpc__)
 #    define systemd_NR_pidfd_send_signal 424
 #  elif defined(__riscv)
@@ -886,6 +871,8 @@
 #    define systemd_NR_pkey_mprotect 380
 #  elif defined(__ia64__)
 #    define systemd_NR_pkey_mprotect 1354
+#  elif defined(__loongarch64)
+#    define systemd_NR_pkey_mprotect 288
 #  elif defined(__m68k__)
 #    define systemd_NR_pkey_mprotect 381
 #  elif defined(_MIPS_SIM)
@@ -898,6 +885,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_pkey_mprotect 351
 #  elif defined(__powerpc__)
 #    define systemd_NR_pkey_mprotect 386
 #  elif defined(__riscv)
@@ -950,6 +939,8 @@
 #    define systemd_NR_renameat2 353
 #  elif defined(__ia64__)
 #    define systemd_NR_renameat2 1338
+#  elif defined(__loongarch64)
+#    define systemd_NR_renameat2 276
 #  elif defined(__m68k__)
 #    define systemd_NR_renameat2 351
 #  elif defined(_MIPS_SIM)
@@ -962,6 +953,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_renameat2 337
 #  elif defined(__powerpc__)
 #    define systemd_NR_renameat2 357
 #  elif defined(__riscv)
@@ -1014,6 +1007,8 @@
 #    define systemd_NR_setns 346
 #  elif defined(__ia64__)
 #    define systemd_NR_setns 1330
+#  elif defined(__loongarch64)
+#    define systemd_NR_setns 268
 #  elif defined(__m68k__)
 #    define systemd_NR_setns 344
 #  elif defined(_MIPS_SIM)
@@ -1026,6 +1021,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_setns 328
 #  elif defined(__powerpc__)
 #    define systemd_NR_setns 350
 #  elif defined(__riscv)
@@ -1078,6 +1075,8 @@
 #    define systemd_NR_statx 383
 #  elif defined(__ia64__)
 #    define systemd_NR_statx 1350
+#  elif defined(__loongarch64)
+#    define systemd_NR_statx 291
 #  elif defined(__m68k__)
 #    define systemd_NR_statx 379
 #  elif defined(_MIPS_SIM)
@@ -1090,6 +1089,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_statx 349
 #  elif defined(__powerpc__)
 #    define systemd_NR_statx 383
 #  elif defined(__riscv)
diff --git a/src/basic/missing_syscalls.py b/src/basic/missing_syscalls.py
index dd45899..5ccf02a 100644
--- a/src/basic/missing_syscalls.py
+++ b/src/basic/missing_syscalls.py
@@ -9,7 +9,6 @@
     'bpf',
     'close_range',
     'copy_file_range',
-    'epoll_pwait2',
     'getrandom',
     'memfd_create',
     'mount_setattr',
@@ -60,6 +59,8 @@
 #    define systemd_NR_{syscall} {nr_i386}
 #  elif defined(__ia64__)
 #    define systemd_NR_{syscall} {nr_ia64}
+#  elif defined(__loongarch64)
+#    define systemd_NR_{syscall} {nr_loongarch64}
 #  elif defined(__m68k__)
 #    define systemd_NR_{syscall} {nr_m68k}
 #  elif defined(_MIPS_SIM)
@@ -72,6 +73,8 @@
 #    else
 #      error "Unknown MIPS ABI"
 #    endif
+#  elif defined(__hppa__)
+#    define systemd_NR_{syscall} {nr_parisc}
 #  elif defined(__powerpc__)
 #    define systemd_NR_{syscall} {nr_powerpc}
 #  elif defined(__riscv)
@@ -140,6 +143,7 @@
  * Use 'ninja -C build update-syscall-tables' to download new syscall tables,
  * and 'ninja -C build update-syscall-header' to regenerate this file.
  */
+#pragma once
 ''',
           file=out)
     print(ARCH_CHECK, file=out)
diff --git a/src/basic/missing_threads.h b/src/basic/missing_threads.h
new file mode 100644
index 0000000..fb3b722
--- /dev/null
+++ b/src/basic/missing_threads.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+/* If threads.h doesn't exist, then define our own thread_local to match C11's thread_local. */
+#if HAVE_THREADS_H
+#  include <threads.h>
+#elif !(defined(thread_local))
+/* Don't break on glibc < 2.16 that doesn't define __STDC_NO_THREADS__
+ * see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53769 */
+#  if __STDC_VERSION__ >= 201112L && !(defined(__STDC_NO_THREADS__) || (defined(__GNU_LIBRARY__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 16))
+#    define thread_local _Thread_local
+#  else
+#    define thread_local __thread
+#  endif
+#endif
diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
index f91f8f7..7ad19ee 100644
--- a/src/basic/mkdir.c
+++ b/src/basic/mkdir.c
@@ -5,6 +5,7 @@
 #include <string.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "fd-util.h"
 #include "format-util.h"
 #include "fs-util.h"
@@ -15,49 +16,54 @@
 #include "stdio-util.h"
 #include "user-util.h"
 
-int mkdir_safe_internal(
+int mkdirat_safe_internal(
+                int dir_fd,
                 const char *path,
                 mode_t mode,
-                uid_t uid, gid_t gid,
+                uid_t uid,
+                gid_t gid,
                 MkdirFlags flags,
-                mkdir_func_t _mkdir) {
+                mkdirat_func_t _mkdirat) {
 
         struct stat st;
         int r;
 
         assert(path);
-        assert(_mkdir && _mkdir != mkdir);
+        assert(mode != MODE_INVALID);
+        assert(_mkdirat && _mkdirat != mkdirat);
 
-        if (_mkdir(path, mode) >= 0) {
-                r = chmod_and_chown(path, mode, uid, gid);
+        if (_mkdirat(dir_fd, path, mode) >= 0) {
+                r = chmod_and_chown_at(dir_fd, path, mode, uid, gid);
                 if (r < 0)
                         return r;
         }
 
-        if (lstat(path, &st) < 0)
+        if (fstatat(dir_fd, path, &st, AT_SYMLINK_NOFOLLOW) < 0)
                 return -errno;
 
         if ((flags & MKDIR_FOLLOW_SYMLINK) && S_ISLNK(st.st_mode)) {
                 _cleanup_free_ char *p = NULL;
 
-                r = chase_symlinks(path, NULL, CHASE_NONEXISTENT, &p, NULL);
+                r = chase_symlinks_at(dir_fd, path, CHASE_NONEXISTENT, &p, NULL);
                 if (r < 0)
                         return r;
                 if (r == 0)
-                        return mkdir_safe_internal(p, mode, uid, gid,
-                                                   flags & ~MKDIR_FOLLOW_SYMLINK,
-                                                   _mkdir);
+                        return mkdirat_safe_internal(dir_fd, p, mode, uid, gid,
+                                                     flags & ~MKDIR_FOLLOW_SYMLINK,
+                                                     _mkdirat);
 
-                if (lstat(p, &st) < 0)
+                if (fstatat(dir_fd, p, &st, AT_SYMLINK_NOFOLLOW) < 0)
                         return -errno;
         }
 
+        if (flags & MKDIR_IGNORE_EXISTING)
+                return 0;
+
         if (!S_ISDIR(st.st_mode))
                 return log_full_errno(flags & MKDIR_WARN_MODE ? LOG_WARNING : LOG_DEBUG, SYNTHETIC_ERRNO(ENOTDIR),
                                       "Path \"%s\" already exists and is not a directory, refusing.", path);
-        if ((st.st_mode & 0007) > (mode & 0007) ||
-            (st.st_mode & 0070) > (mode & 0070) ||
-            (st.st_mode & 0700) > (mode & 0700))
+
+        if ((st.st_mode & ~mode & 0777) != 0)
                 return log_full_errno(flags & MKDIR_WARN_MODE ? LOG_WARNING : LOG_DEBUG, SYNTHETIC_ERRNO(EEXIST),
                                       "Directory \"%s\" already exists, but has mode %04o that is too permissive (%04o was requested), refusing.",
                                       path, st.st_mode & 0777, mode);
@@ -78,102 +84,116 @@
         return 0;
 }
 
-int mkdir_errno_wrapper(const char *pathname, mode_t mode) {
-        if (mkdir(pathname, mode) < 0)
-                return -errno;
-        return 0;
-}
-
 int mkdirat_errno_wrapper(int dirfd, const char *pathname, mode_t mode) {
-        if (mkdirat(dirfd, pathname, mode) < 0)
-                return -errno;
-        return 0;
+        return RET_NERRNO(mkdirat(dirfd, pathname, mode));
 }
 
-int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
-        return mkdir_safe_internal(path, mode, uid, gid, flags, mkdir_errno_wrapper);
+int mkdirat_safe(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
+        return mkdirat_safe_internal(dir_fd, path, mode, uid, gid, flags, mkdirat_errno_wrapper);
 }
 
-int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdir_func_t _mkdir) {
-        const char *p, *e;
+int mkdirat_parents_internal(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdirat) {
+        const char *e = NULL;
         int r;
 
         assert(path);
-        assert(_mkdir != mkdir);
+        assert(_mkdirat != mkdirat);
 
-        if (prefix && !path_startswith(path, prefix))
+        if (isempty(path))
+                return 0;
+
+        if (!path_is_safe(path))
                 return -ENOTDIR;
 
         /* return immediately if directory exists */
-        e = strrchr(path, '/');
-        if (!e)
-                return 0;
-
+        r = path_find_last_component(path, /* accept_dot_dot= */ false, &e, NULL);
+        if (r <= 0) /* r == 0 means path is equivalent to prefix. */
+                return r;
         if (e == path)
                 return 0;
 
-        p = strndupa(path, e - path);
-        r = is_dir(p, true);
+        assert(e > path);
+        assert(*e == '/');
+
+        /* drop the last component */
+        path = strndupa_safe(path, e - path);
+        r = is_dir_full(dir_fd, path, true);
         if (r > 0)
                 return 0;
         if (r == 0)
                 return -ENOTDIR;
 
         /* create every parent directory in the path, except the last component */
-        p = path + strspn(path, "/");
-        for (;;) {
-                char t[strlen(path) + 1];
+        for (const char *p = path;;) {
+                char *s;
+                int n;
 
-                e = p + strcspn(p, "/");
-                p = e + strspn(e, "/");
+                n = path_find_first_component(&p, /* accept_dot_dot= */ false, (const char **) &s);
+                if (n <= 0)
+                        return n;
 
-                /* Is this the last component? If so, then we're done */
-                if (*p == 0)
-                        return 0;
+                assert(p);
+                assert(s >= path);
+                assert(IN_SET(s[n], '/', '\0'));
 
-                memcpy(t, path, e - path);
-                t[e-path] = 0;
+                s[n] = '\0';
 
-                if (prefix && path_startswith(prefix, t))
-                        continue;
+                r = mkdirat_safe_internal(dir_fd, path, mode, uid, gid, flags | MKDIR_IGNORE_EXISTING, _mkdirat);
+                if (r < 0 && r != -EEXIST)
+                        return r;
 
-                if (!uid_is_valid(uid) && !gid_is_valid(gid) && flags == 0) {
-                        r = _mkdir(t, mode);
-                        if (r < 0 && r != -EEXIST)
-                                return r;
-                } else {
-                        r = mkdir_safe_internal(t, mode, uid, gid, flags, _mkdir);
-                        if (r < 0 && r != -EEXIST)
-                                return r;
-                }
+                s[n] = *p == '\0' ? '\0' : '/';
         }
 }
 
-int mkdir_parents(const char *path, mode_t mode) {
-        return mkdir_parents_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdir_errno_wrapper);
+int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdirat) {
+        _cleanup_close_ int fd = AT_FDCWD;
+        const char *p;
+
+        assert(path);
+        assert(_mkdirat != mkdirat);
+
+        if (prefix) {
+                p = path_startswith_full(path, prefix, /* accept_dot_dot= */ false);
+                if (!p)
+                        return -ENOTDIR;
+        } else
+                p = path;
+
+        if (prefix) {
+                fd = open(prefix, O_PATH|O_DIRECTORY|O_CLOEXEC);
+                if (fd < 0)
+                        return -errno;
+        }
+
+        return mkdirat_parents_internal(fd, p, mode, uid, gid, flags, _mkdirat);
+}
+
+int mkdirat_parents(int dir_fd, const char *path, mode_t mode) {
+        return mkdirat_parents_internal(dir_fd, path, mode, UID_INVALID, UID_INVALID, 0, mkdirat_errno_wrapper);
 }
 
 int mkdir_parents_safe(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
-        return mkdir_parents_internal(prefix, path, mode, uid, gid, flags, mkdir_errno_wrapper);
+        return mkdir_parents_internal(prefix, path, mode, uid, gid, flags, mkdirat_errno_wrapper);
 }
 
-int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdir_func_t _mkdir) {
+int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdirat) {
         int r;
 
         /* Like mkdir -p */
 
-        assert(_mkdir != mkdir);
+        assert(_mkdirat != mkdirat);
 
-        r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags, _mkdir);
+        r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags | MKDIR_FOLLOW_SYMLINK, _mkdirat);
         if (r < 0)
                 return r;
 
         if (!uid_is_valid(uid) && !gid_is_valid(gid) && flags == 0) {
-                r = _mkdir(path, mode);
+                r = _mkdirat(AT_FDCWD, path, mode);
                 if (r < 0 && (r != -EEXIST || is_dir(path, true) <= 0))
                         return r;
         } else {
-                r = mkdir_safe_internal(path, mode, uid, gid, flags, _mkdir);
+                r = mkdir_safe_internal(path, mode, uid, gid, flags, _mkdirat);
                 if (r < 0 && r != -EEXIST)
                         return r;
         }
@@ -182,42 +202,45 @@
 }
 
 int mkdir_p(const char *path, mode_t mode) {
-        return mkdir_p_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdir_errno_wrapper);
+        return mkdir_p_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdirat_errno_wrapper);
 }
 
 int mkdir_p_safe(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
-        return mkdir_p_internal(prefix, path, mode, uid, gid, flags, mkdir_errno_wrapper);
+        return mkdir_p_internal(prefix, path, mode, uid, gid, flags, mkdirat_errno_wrapper);
 }
 
 int mkdir_p_root(const char *root, const char *p, uid_t uid, gid_t gid, mode_t m) {
-        _cleanup_free_ char *pp = NULL;
-        _cleanup_close_ int dfd = -1;
-        const char *bn;
+        _cleanup_free_ char *pp = NULL, *bn = NULL;
+        _cleanup_close_ int dfd = -EBADF;
         int r;
 
-        pp = dirname_malloc(p);
-        if (!pp)
-                return -ENOMEM;
-
-        /* Not top-level? */
-        if (!(path_equal(pp, "/") || isempty(pp) || path_equal(pp, "."))) {
-
-                /* Recurse up */
+        r = path_extract_directory(p, &pp);
+        if (r == -EDESTADDRREQ) {
+                /* only fname is passed, no prefix to operate on */
+                dfd = open(".", O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+                if (dfd < 0)
+                        return -errno;
+        } else if (r == -EADDRNOTAVAIL)
+                /* only root dir or "." was passed, i.e. there is no parent to extract, in that case there's nothing to do. */
+                return 0;
+        else if (r < 0)
+                return r;
+        else {
+                /* Extracting the parent dir worked, hence we aren't top-level? Recurse up first. */
                 r = mkdir_p_root(root, pp, uid, gid, m);
                 if (r < 0)
                         return r;
+
+                dfd = chase_symlinks_and_open(pp, root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_DIRECTORY, NULL);
+                if (dfd < 0)
+                        return dfd;
         }
 
-        bn = basename(p);
-        if (path_equal(bn, "/") || isempty(bn) || path_equal(bn, "."))
+        r = path_extract_filename(p, &bn);
+        if (r == -EADDRNOTAVAIL) /* Already top-level */
                 return 0;
-
-        if (!filename_is_valid(bn))
-                return -EINVAL;
-
-        dfd = chase_symlinks_and_open(pp, root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_DIRECTORY, NULL);
-        if (dfd < 0)
-                return dfd;
+        if (r < 0)
+                return r;
 
         if (mkdirat(dfd, bn, m) < 0) {
                 if (errno == EEXIST)
@@ -227,9 +250,9 @@
         }
 
         if (uid_is_valid(uid) || gid_is_valid(gid)) {
-                _cleanup_close_ int nfd = -1;
+                _cleanup_close_ int nfd = -EBADF;
 
-                nfd = openat(dfd, bn, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+                nfd = openat(dfd, bn, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
                 if (nfd < 0)
                         return -errno;
 
diff --git a/src/basic/mkdir.h b/src/basic/mkdir.h
index b512ba4..a3ab512 100644
--- a/src/basic/mkdir.h
+++ b/src/basic/mkdir.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <fcntl.h>
 #include <sys/types.h>
 
 #ifdef GOOGLE3_BLAZE_BUILD // Redefine functions which collide with other third-party libs
@@ -8,27 +9,32 @@
 #endif // GOOGLE3_BLAZE_BUILD
 
 typedef enum MkdirFlags {
-        MKDIR_FOLLOW_SYMLINK = 1 << 0,
-        MKDIR_WARN_MODE      = 1 << 1,
+        MKDIR_FOLLOW_SYMLINK  = 1 << 0,
+        MKDIR_IGNORE_EXISTING = 1 << 1,  /* Quietly accept a preexisting directory (or file) */
+        MKDIR_WARN_MODE       = 1 << 2,  /* Log at LOG_WARNING when mode doesn't match */
 } MkdirFlags;
 
-int mkdir_errno_wrapper(const char *pathname, mode_t mode);
 int mkdirat_errno_wrapper(int dirfd, const char *pathname, mode_t mode);
-int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
-int mkdir_parents(const char *path, mode_t mode);
+
+int mkdirat_safe(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
+static inline int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
+        return mkdirat_safe(AT_FDCWD, path, mode, uid, gid, flags);
+}
+int mkdirat_parents(int dir_fd, const char *path, mode_t mode);
+static inline int mkdir_parents(const char *path, mode_t mode) {
+        return mkdirat_parents(AT_FDCWD, path, mode);
+}
 int mkdir_parents_safe(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
 int mkdir_p(const char *path, mode_t mode);
 int mkdir_p_safe(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
-
-/* mandatory access control(MAC) versions */
-int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
-int mkdir_parents_label(const char *path, mode_t mod);
-int mkdir_p_label(const char *path, mode_t mode);
-
-/* internally used */
-typedef int (*mkdir_func_t)(const char *pathname, mode_t mode);
-int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdir_func_t _mkdir);
-int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdir_func_t _mkdir);
-int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdir_func_t _mkdir);
-
 int mkdir_p_root(const char *root, const char *p, uid_t uid, gid_t gid, mode_t m);
+
+/* The following are used to implement the mkdir_xyz_label() calls, don't use otherwise. */
+typedef int (*mkdirat_func_t)(int dir_fd, const char *pathname, mode_t mode);
+int mkdirat_safe_internal(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdir);
+static inline int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdir) {
+        return mkdirat_safe_internal(AT_FDCWD, path, mode, uid, gid, flags, _mkdir);
+}
+int mkdirat_parents_internal(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdirat);
+int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdir);
+int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdir);
diff --git a/src/basic/mountpoint-util.c b/src/basic/mountpoint-util.c
index 7e57d9a..bc74fbe 100644
--- a/src/basic/mountpoint-util.c
+++ b/src/basic/mountpoint-util.c
@@ -5,13 +5,16 @@
 #include <sys/mount.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "filesystems.h"
 #include "fs-util.h"
 #include "missing_stat.h"
 #include "missing_syscall.h"
 #include "mkdir.h"
 #include "mountpoint-util.h"
+#include "nulstr-util.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "stat-util.h"
@@ -34,7 +37,6 @@
                 int *ret_mnt_id,
                 int flags) {
 
-        _cleanup_free_ struct file_handle *h = NULL;
         size_t n = ORIGINAL_MAX_HANDLE_SZ;
 
         assert((flags & ~(AT_SYMLINK_FOLLOW|AT_EMPTY_PATH)) == 0);
@@ -47,6 +49,7 @@
          * as NULL if there's no interest in either. */
 
         for (;;) {
+                _cleanup_free_ struct file_handle *h = NULL;
                 int mnt_id = -1;
 
                 h = malloc0(offsetof(struct file_handle, f_handle) + n);
@@ -88,15 +91,13 @@
                 n = h->handle_bytes;
                 if (offsetof(struct file_handle, f_handle) + n < n) /* check for addition overflow */
                         return -EOVERFLOW;
-
-                h = mfree(h);
         }
 }
 
 static int fd_fdinfo_mnt_id(int fd, const char *filename, int flags, int *ret_mnt_id) {
         char path[STRLEN("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)];
         _cleanup_free_ char *fdinfo = NULL;
-        _cleanup_close_ int subfd = -1;
+        _cleanup_close_ int subfd = -EBADF;
         char *p;
         int r;
 
@@ -153,7 +154,7 @@
         if (slash[strspn(slash, "/")] != 0) /* Check that the suffix consist only of one or more slashes */
                 return false;
 
-        copied = strndupa(s, slash - s);
+        copied = strndupa_safe(s, slash - s);
         return filename_is_valid(copied);
 }
 
@@ -179,12 +180,18 @@
         int r;
 
         assert(fd >= 0);
-        assert(filename);
-        assert((flags & ~(AT_SYMLINK_FOLLOW|AT_EMPTY_PATH)) == 0);
+        assert((flags & ~AT_SYMLINK_FOLLOW) == 0);
 
-        /* Insist that the specified filename is actually a filename, and not a path, i.e. some inode further
-         * up or down the tree then immediately below the specified directory fd. */
-        if (!filename_possibly_with_slash_suffix(filename))
+        if (!filename) {
+                /* If the file name is specified as NULL we'll see if the specified 'fd' is a mount
+                 * point. That's only supported if the kernel supports statx(), or if the inode specified via
+                 * 'fd' refers to a directory. Otherwise, we'll have to fail (ENOTDIR), because we have no
+                 * kernel API to query the information we need. */
+                flags |= AT_EMPTY_PATH;
+                filename = "";
+        } else if (!filename_possibly_with_slash_suffix(filename))
+                /* Insist that the specified filename is actually a filename, and not a path, i.e. some inode further
+                 * up or down the tree then immediately below the specified directory fd. */
                 return -EINVAL;
 
         /* First we will try statx()' STATX_ATTR_MOUNT_ROOT attribute, which is our ideal API, available
@@ -231,7 +238,10 @@
                 nosupp = true;
         }
 
-        r = name_to_handle_at_loop(fd, "", &h_parent, &mount_id_parent, AT_EMPTY_PATH);
+        if (isempty(filename))
+                r = name_to_handle_at_loop(fd, "..", &h_parent, &mount_id_parent, 0); /* can't work for non-directories 😢 */
+        else
+                r = name_to_handle_at_loop(fd, "", &h_parent, &mount_id_parent, AT_EMPTY_PATH);
         if (r < 0) {
                 if (is_name_to_handle_at_fatal_error(r))
                         return r;
@@ -268,7 +278,10 @@
         if (r < 0)
                 return r;
 
-        r = fd_fdinfo_mnt_id(fd, "", AT_EMPTY_PATH, &mount_id_parent);
+        if (isempty(filename))
+                r = fd_fdinfo_mnt_id(fd, "..", 0, &mount_id_parent); /* can't work for non-directories 😢 */
+        else
+                r = fd_fdinfo_mnt_id(fd, "", AT_EMPTY_PATH, &mount_id_parent);
         if (r < 0)
                 return r;
 
@@ -292,13 +305,15 @@
         if (S_ISLNK(a.st_mode)) /* Symlinks are never mount points */
                 return false;
 
-        if (fstatat(fd, "", &b, AT_EMPTY_PATH) < 0)
+        if (isempty(filename))
+                r = fstatat(fd, "..", &b, 0);
+        else
+                r = fstatat(fd, "", &b, AT_EMPTY_PATH);
+        if (r < 0)
                 return -errno;
 
-        /* A directory with same device and inode as its parent? Must
-         * be the root directory */
-        if (a.st_dev == b.st_dev &&
-            a.st_ino == b.st_ino)
+        /* A directory with same device and inode as its parent? Must be the root directory */
+        if (stat_inode_same(&a, &b))
                 return 1;
 
         return check_st_dev && (a.st_dev != b.st_dev);
@@ -307,7 +322,7 @@
 /* flags can be AT_SYMLINK_FOLLOW or 0 */
 int path_is_mount_point(const char *t, const char *root, int flags) {
         _cleanup_free_ char *canonical = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(t);
@@ -365,48 +380,59 @@
         if (x)
                 fstype = x;
 
+        if (nulstr_contains(filesystem_sets[FILESYSTEM_SET_NETWORK].value, fstype))
+                return true;
+
+        /* Filesystems not present in the internal database */
         return STR_IN_SET(fstype,
-                          "afs",
-                          "ceph",
-                          "cifs",
-                          "smb3",
-                          "smbfs",
-                          "sshfs",
-                          "ncpfs",
-                          "ncp",
-                          "nfs",
-                          "nfs4",
-                          "gfs",
-                          "gfs2",
+                          "davfs",
                           "glusterfs",
-                          "pvfs2", /* OrangeFS */
-                          "ocfs2",
                           "lustre",
-                          "davfs");
+                          "sshfs");
+}
+
+bool fstype_needs_quota(const char *fstype) {
+       /* 1. quotacheck needs to be run for some filesystems after they are mounted
+        *    if the filesystem was not unmounted cleanly.
+        * 2. You may need to run quotaon to enable quota usage tracking and/or
+        *    enforcement.
+        * ext2     - needs 1) and 2)
+        * ext3     - needs 2) if configured using usrjquota/grpjquota mount options
+        * ext4     - needs 1) if created without journal, needs 2) if created without QUOTA
+        *            filesystem feature
+        * reiserfs - needs 2).
+        * jfs      - needs 2)
+        * f2fs     - needs 2) if configured using usrjquota/grpjquota/prjjquota mount options
+        * xfs      - nothing needed
+        * gfs2     - nothing needed
+        * ocfs2    - nothing needed
+        * btrfs    - nothing needed
+        * for reference see filesystem and quota manpages */
+        return STR_IN_SET(fstype,
+                          "ext2",
+                          "ext3",
+                          "ext4",
+                          "reiserfs",
+                          "jfs",
+                          "f2fs");
 }
 
 bool fstype_is_api_vfs(const char *fstype) {
+        const FilesystemSet *fs;
+
+        FOREACH_POINTER(fs,
+                filesystem_sets + FILESYSTEM_SET_BASIC_API,
+                filesystem_sets + FILESYSTEM_SET_AUXILIARY_API,
+                filesystem_sets + FILESYSTEM_SET_PRIVILEGED_API,
+                filesystem_sets + FILESYSTEM_SET_TEMPORARY)
+            if (nulstr_contains(fs->value, fstype))
+                    return true;
+
+        /* Filesystems not present in the internal database */
         return STR_IN_SET(fstype,
                           "autofs",
-                          "bpf",
-                          "cgroup",
-                          "cgroup2",
-                          "configfs",
                           "cpuset",
-                          "debugfs",
-                          "devpts",
-                          "devtmpfs",
-                          "efivarfs",
-                          "fusectl",
-                          "hugetlbfs",
-                          "mqueue",
-                          "proc",
-                          "pstore",
-                          "ramfs",
-                          "securityfs",
-                          "sysfs",
-                          "tmpfs",
-                          "tracefs");
+                          "devtmpfs");
 }
 
 bool fstype_is_blockdev_backed(const char *fstype) {
@@ -423,14 +449,16 @@
         /* All Linux file systems that are necessarily read-only */
         return STR_IN_SET(fstype,
                           "DM_verity_hash",
-                          "iso9660",
+                          "cramfs",
                           "erofs",
+                          "iso9660",
                           "squashfs");
 }
 
 bool fstype_can_discard(const char *fstype) {
         return STR_IN_SET(fstype,
                           "btrfs",
+                          "f2fs",
                           "ext4",
                           "vfat",
                           "xfs");
@@ -494,7 +522,53 @@
         return false;
 }
 
-const char *mount_propagation_flags_to_string(unsigned long flags) {
+int mount_fd(const char *source,
+             int target_fd,
+             const char *filesystemtype,
+             unsigned long mountflags,
+             const void *data) {
+
+        if (mount(source, FORMAT_PROC_FD_PATH(target_fd), filesystemtype, mountflags, data) < 0) {
+                if (errno != ENOENT)
+                        return -errno;
+
+                /* ENOENT can mean two things: either that the source is missing, or that /proc/ isn't
+                 * mounted. Check for the latter to generate better error messages. */
+                if (proc_mounted() == 0)
+                        return -ENOSYS;
+
+                return -ENOENT;
+        }
+
+        return 0;
+}
+
+int mount_nofollow(
+                const char *source,
+                const char *target,
+                const char *filesystemtype,
+                unsigned long mountflags,
+                const void *data) {
+
+        _cleanup_close_ int fd = -EBADF;
+
+        /* In almost all cases we want to manipulate the mount table without following symlinks, hence
+         * mount_nofollow() is usually the way to go. The only exceptions are environments where /proc/ is
+         * not available yet, since we need /proc/self/fd/ for this logic to work. i.e. during the early
+         * initialization of namespacing/container stuff where /proc is not yet mounted (and maybe even the
+         * fs to mount) we can only use traditional mount() directly.
+         *
+         * Note that this disables following only for the final component of the target, i.e symlinks within
+         * the path of the target are honoured, as are symlinks in the source path everywhere. */
+
+        fd = open(target, O_PATH|O_CLOEXEC|O_NOFOLLOW);
+        if (fd < 0)
+                return -errno;
+
+        return mount_fd(source, fd, filesystemtype, mountflags, data);
+}
+
+const char *mount_propagation_flag_to_string(unsigned long flags) {
 
         switch (flags & (MS_SHARED|MS_SLAVE|MS_PRIVATE)) {
         case 0:
@@ -510,7 +584,7 @@
         return NULL;
 }
 
-int mount_propagation_flags_from_string(const char *name, unsigned long *ret) {
+int mount_propagation_flag_from_string(const char *name, unsigned long *ret) {
 
         if (isempty(name))
                 *ret = 0;
@@ -524,3 +598,7 @@
                 return -EINVAL;
         return 0;
 }
+
+bool mount_propagation_flag_is_valid(unsigned long flag) {
+        return IN_SET(flag, 0, MS_SHARED, MS_PRIVATE, MS_SLAVE);
+}
diff --git a/src/basic/mountpoint-util.h b/src/basic/mountpoint-util.h
index aadb212..1970919 100644
--- a/src/basic/mountpoint-util.h
+++ b/src/basic/mountpoint-util.h
@@ -5,6 +5,36 @@
 #include <stdbool.h>
 #include <sys/types.h>
 
+/* The limit used for /dev itself. 4MB should be enough since device nodes and symlinks don't
+ * consume any space and udev isn't supposed to create regular file either. There's no limit on the
+ * max number of inodes since such limit is hard to guess especially on large storage array
+ * systems. */
+#define TMPFS_LIMITS_DEV             ",size=4m"
+
+/* The limit used for /dev in private namespaces. 4MB for contents of regular files. The number of
+ * inodes should be relatively low in private namespaces but for now use a 64k limit. */
+#define TMPFS_LIMITS_PRIVATE_DEV     ",size=4m,nr_inodes=64k"
+
+/* Very little, if any use expected */
+#define TMPFS_LIMITS_EMPTY_OR_ALMOST ",size=4m,nr_inodes=1k"
+#define TMPFS_LIMITS_SYS             TMPFS_LIMITS_EMPTY_OR_ALMOST
+#define TMPFS_LIMITS_SYS_FS_CGROUP   TMPFS_LIMITS_EMPTY_OR_ALMOST
+
+/* On an extremely small device with only 256MB of RAM, 20% of RAM should be enough for the re-execution of
+ * PID1 because 16MB of free space is required. */
+#define TMPFS_LIMITS_RUN             ",size=20%,nr_inodes=800k"
+
+/* The limit used for various nested tmpfs mounts, in particular for guests started by systemd-nspawn.
+ * 10% of RAM (using 16GB of RAM as a baseline) translates to 400k inodes (assuming 4k each) and 25%
+ * translates to 1M inodes.
+ * (On the host, /tmp is configured through a .mount unit file.) */
+#define NESTED_TMPFS_LIMITS          ",size=10%,nr_inodes=400k"
+
+/* More space for volatile root and /var */
+#define TMPFS_LIMITS_VAR             ",size=25%,nr_inodes=1m"
+#define TMPFS_LIMITS_ROOTFS          TMPFS_LIMITS_VAR
+#define TMPFS_LIMITS_VOLATILE_STATE  TMPFS_LIMITS_VAR
+
 int name_to_handle_at_loop(int fd, const char *path, struct file_handle **ret_handle, int *ret_mnt_id, int flags);
 
 int path_get_mnt_id(const char *path, int *ret);
@@ -13,6 +43,7 @@
 int path_is_mount_point(const char *path, const char *root, int flags);
 
 bool fstype_is_network(const char *fstype);
+bool fstype_needs_quota(const char *fstype);
 bool fstype_is_api_vfs(const char *fstype);
 bool fstype_is_blockdev_backed(const char *fstype);
 bool fstype_is_ro(const char *fsype);
@@ -21,5 +52,9 @@
 
 int dev_is_devtmpfs(void);
 
-const char *mount_propagation_flags_to_string(unsigned long flags);
-int mount_propagation_flags_from_string(const char *name, unsigned long *ret);
+int mount_fd(const char *source, int target_fd, const char *filesystemtype, unsigned long mountflags, const void *data);
+int mount_nofollow(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);
+
+const char *mount_propagation_flag_to_string(unsigned long flags);
+int mount_propagation_flag_from_string(const char *name, unsigned long *ret);
+bool mount_propagation_flag_is_valid(unsigned long flag);
diff --git a/src/basic/namespace-util.c b/src/basic/namespace-util.c
index a55b76d..f5c0e04 100644
--- a/src/basic/namespace-util.c
+++ b/src/basic/namespace-util.c
@@ -4,25 +4,45 @@
 #include <sys/ioctl.h>
 #include <sys/mount.h>
 
+#include "errno-util.h"
 #include "fd-util.h"
+#include "fileio.h"
 #include "missing_fs.h"
 #include "missing_magic.h"
+#include "missing_sched.h"
 #include "namespace-util.h"
 #include "process-util.h"
 #include "stat-util.h"
 #include "stdio-util.h"
 #include "user-util.h"
 
+const struct namespace_info namespace_info[] = {
+        [NAMESPACE_CGROUP] =  { "cgroup", "ns/cgroup", CLONE_NEWCGROUP,                          },
+        [NAMESPACE_IPC]    =  { "ipc",    "ns/ipc",    CLONE_NEWIPC,                             },
+        [NAMESPACE_NET]    =  { "net",    "ns/net",    CLONE_NEWNET,                             },
+        /* So, the mount namespace flag is called CLONE_NEWNS for historical
+         * reasons. Let's expose it here under a more explanatory name: "mnt".
+         * This is in-line with how the kernel exposes namespaces in /proc/$PID/ns. */
+        [NAMESPACE_MOUNT]  =  { "mnt",    "ns/mnt",    CLONE_NEWNS,                              },
+        [NAMESPACE_PID]    =  { "pid",    "ns/pid",    CLONE_NEWPID,                             },
+        [NAMESPACE_USER]   =  { "user",   "ns/user",   CLONE_NEWUSER,                            },
+        [NAMESPACE_UTS]    =  { "uts",    "ns/uts",    CLONE_NEWUTS,                             },
+        [NAMESPACE_TIME]   =  { "time",   "ns/time",   CLONE_NEWTIME,                            },
+        { /* Allow callers to iterate over the array without using _NAMESPACE_TYPE_MAX. */       },
+};
+
+#define pid_namespace_path(pid, type) procfs_file_alloca(pid, namespace_info[type].proc_path)
+
 int namespace_open(pid_t pid, int *pidns_fd, int *mntns_fd, int *netns_fd, int *userns_fd, int *root_fd) {
-        _cleanup_close_ int pidnsfd = -1, mntnsfd = -1, netnsfd = -1, usernsfd = -1;
-        int rfd = -1;
+        _cleanup_close_ int pidnsfd = -EBADF, mntnsfd = -EBADF, netnsfd = -EBADF, usernsfd = -EBADF;
+        int rfd = -EBADF;
 
         assert(pid >= 0);
 
         if (mntns_fd) {
                 const char *mntns;
 
-                mntns = procfs_file_alloca(pid, "ns/mnt");
+                mntns = pid_namespace_path(pid, NAMESPACE_MOUNT);
                 mntnsfd = open(mntns, O_RDONLY|O_NOCTTY|O_CLOEXEC);
                 if (mntnsfd < 0)
                         return -errno;
@@ -31,7 +51,7 @@
         if (pidns_fd) {
                 const char *pidns;
 
-                pidns = procfs_file_alloca(pid, "ns/pid");
+                pidns = pid_namespace_path(pid, NAMESPACE_PID);
                 pidnsfd = open(pidns, O_RDONLY|O_NOCTTY|O_CLOEXEC);
                 if (pidnsfd < 0)
                         return -errno;
@@ -40,7 +60,7 @@
         if (netns_fd) {
                 const char *netns;
 
-                netns = procfs_file_alloca(pid, "ns/net");
+                netns = pid_namespace_path(pid, NAMESPACE_NET);
                 netnsfd = open(netns, O_RDONLY|O_NOCTTY|O_CLOEXEC);
                 if (netnsfd < 0)
                         return -errno;
@@ -49,7 +69,7 @@
         if (userns_fd) {
                 const char *userns;
 
-                userns = procfs_file_alloca(pid, "ns/user");
+                userns = pid_namespace_path(pid, NAMESPACE_USER);
                 usernsfd = open(userns, O_RDONLY|O_NOCTTY|O_CLOEXEC);
                 if (usernsfd < 0 && errno != ENOENT)
                         return -errno;
@@ -89,13 +109,11 @@
                 /* Can't setns to your own userns, since then you could escalate from non-root to root in
                  * your own namespace, so check if namespaces are equal before attempting to enter. */
 
-                char userns_fd_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-                xsprintf(userns_fd_path, "/proc/self/fd/%d", userns_fd);
-                r = files_same(userns_fd_path, "/proc/self/ns/user", 0);
+                r = files_same(FORMAT_PROC_FD_PATH(userns_fd), "/proc/self/ns/user", 0);
                 if (r < 0)
                         return r;
                 if (r)
-                        userns_fd = -1;
+                        userns_fd = -EBADF;
         }
 
         if (pidns_fd >= 0)
@@ -178,8 +196,67 @@
         if (unshare(CLONE_NEWNS) < 0)
                 return -errno;
 
-        if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) < 0)
+        return RET_NERRNO(mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL));
+}
+
+int userns_acquire(const char *uid_map, const char *gid_map) {
+        char path[STRLEN("/proc//uid_map") + DECIMAL_STR_MAX(pid_t) + 1];
+        _cleanup_(sigkill_waitp) pid_t pid = 0;
+        _cleanup_close_ int userns_fd = -EBADF;
+        int r;
+
+        assert(uid_map);
+        assert(gid_map);
+
+        /* Forks off a process in a new userns, configures the specified uidmap/gidmap, acquires an fd to it,
+         * and then kills the process again. This way we have a userns fd that is not bound to any
+         * process. We can use that for file system mounts and similar. */
+
+        r = safe_fork("(sd-mkuserns)", FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_NEW_USERNS, &pid);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                /* Child. We do nothing here, just freeze until somebody kills us. */
+                freeze();
+
+        xsprintf(path, "/proc/" PID_FMT "/uid_map", pid);
+        r = write_string_file(path, uid_map, WRITE_STRING_FILE_DISABLE_BUFFER);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write UID map: %m");
+
+        xsprintf(path, "/proc/" PID_FMT "/gid_map", pid);
+        r = write_string_file(path, gid_map, WRITE_STRING_FILE_DISABLE_BUFFER);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write GID map: %m");
+
+        r = namespace_open(pid, NULL, NULL, NULL, &userns_fd, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open userns fd: %m");
+
+        return TAKE_FD(userns_fd);
+
+}
+
+int in_same_namespace(pid_t pid1, pid_t pid2, NamespaceType type) {
+        const char *ns_path;
+        struct stat ns_st1, ns_st2;
+
+        if (pid1 == 0)
+                pid1 = getpid_cached();
+
+        if (pid2 == 0)
+                pid2 = getpid_cached();
+
+        if (pid1 == pid2)
+                return 1;
+
+        ns_path = pid_namespace_path(pid1, type);
+        if (stat(ns_path, &ns_st1) < 0)
                 return -errno;
 
-        return 0;
+        ns_path = pid_namespace_path(pid2, type);
+        if (stat(ns_path, &ns_st2) < 0)
+                return -errno;
+
+        return stat_inode_same(&ns_st1, &ns_st2);
 }
diff --git a/src/basic/namespace-util.h b/src/basic/namespace-util.h
index 39a6a46..be5b228 100644
--- a/src/basic/namespace-util.h
+++ b/src/basic/namespace-util.h
@@ -3,6 +3,25 @@
 
 #include <sys/types.h>
 
+typedef enum NamespaceType {
+        NAMESPACE_CGROUP,
+        NAMESPACE_IPC,
+        NAMESPACE_NET,
+        NAMESPACE_MOUNT,
+        NAMESPACE_PID,
+        NAMESPACE_USER,
+        NAMESPACE_UTS,
+        NAMESPACE_TIME,
+        _NAMESPACE_TYPE_MAX,
+        _NAMESPACE_TYPE_INVALID = -EINVAL,
+} NamespaceType;
+
+extern const struct namespace_info {
+        const char *proc_name;
+        const char *proc_path;
+        unsigned int clone_flag;
+} namespace_info[_NAMESPACE_TYPE_MAX + 1];
+
 int namespace_open(pid_t pid, int *pidns_fd, int *mntns_fd, int *netns_fd, int *userns_fd, int *root_fd);
 int namespace_enter(int pidns_fd, int mntns_fd, int netns_fd, int userns_fd, int root_fd);
 
@@ -24,3 +43,6 @@
 
         return true;
 }
+
+int userns_acquire(const char *uid_map, const char *gid_map);
+int in_same_namespace(pid_t pid1, pid_t pid2, NamespaceType type);
diff --git a/src/basic/nulstr-util.c b/src/basic/nulstr-util.c
index 49fcbb0..98d68e0 100644
--- a/src/basic/nulstr-util.c
+++ b/src/basic/nulstr-util.c
@@ -2,16 +2,141 @@
 
 #include "nulstr-util.h"
 #include "string-util.h"
+#include "strv.h"
 
-bool nulstr_contains(const char *nulstr, const char *needle) {
-        const char *i;
+char** strv_parse_nulstr(const char *s, size_t l) {
+        /* l is the length of the input data, which will be split at NULs into elements of the resulting
+         * strv. Hence, the number of items in the resulting strv will be equal to one plus the number of NUL
+         * bytes in the l bytes starting at s, unless s[l-1] is NUL, in which case the final empty string is
+         * not stored in the resulting strv, and length is equal to the number of NUL bytes.
+         *
+         * Note that contrary to a normal nulstr which cannot contain empty strings, because the input data
+         * is terminated by any two consequent NUL bytes, this parser accepts empty strings in s. */
 
+        _cleanup_strv_free_ char **v = NULL;
+        size_t c = 0, i = 0;
+
+        assert(s || l <= 0);
+
+        if (l <= 0)
+                return new0(char*, 1);
+
+        for (const char *p = s; p < s + l; p++)
+                if (*p == 0)
+                        c++;
+
+        if (s[l-1] != 0)
+                c++;
+
+        v = new0(char*, c+1);
+        if (!v)
+                return NULL;
+
+        for (const char *p = s; p < s + l; ) {
+                const char *e;
+
+                e = memchr(p, 0, s + l - p);
+
+                v[i] = memdup_suffix0(p, e ? e - p : s + l - p);
+                if (!v[i])
+                        return NULL;
+
+                i++;
+
+                if (!e)
+                        break;
+
+                p = e + 1;
+        }
+
+        assert(i == c);
+
+        return TAKE_PTR(v);
+}
+
+char** strv_split_nulstr(const char *s) {
+        _cleanup_strv_free_ char **l = NULL;
+
+        /* This parses a nulstr, without specification of size, and stops at an empty string. This cannot
+         * parse nulstrs with embedded empty strings hence, as an empty string is an end marker. Use
+         * strv_parse_nulstr() above to parse a nulstr with embedded empty strings (which however requires a
+         * size to be specified) */
+
+        NULSTR_FOREACH(i, s)
+                if (strv_extend(&l, i) < 0)
+                        return NULL;
+
+        return l ? TAKE_PTR(l) : strv_new(NULL);
+}
+
+int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) {
+        /* Builds a nulstr and returns it together with the size. An extra NUL byte will be appended (⚠️ but
+         * not included in the size! ⚠️). This is done so that the nulstr can be used both in
+         * strv_parse_nulstr() and in NULSTR_FOREACH()/strv_split_nulstr() contexts, i.e. with and without a
+         * size parameter. In the former case we can include empty strings, in the latter case we cannot (as
+         * that is the end marker).
+         *
+         * When NULSTR_FOREACH()/strv_split_nulstr() is used it is often assumed that the nulstr ends in two
+         * NUL bytes (which it will, if not empty). To ensure that this assumption *always* holds, we'll
+         * return a buffer with two NUL bytes in that case, but return a size of zero. */
+
+        _cleanup_free_ char *m = NULL;
+        size_t n = 0;
+
+        assert(ret);
+        assert(ret_size);
+
+        STRV_FOREACH(i, l) {
+                size_t z;
+
+                z = strlen(*i);
+
+                if (!GREEDY_REALLOC(m, n + z + 2))
+                        return -ENOMEM;
+
+                memcpy(m + n, *i, z + 1);
+                n += z + 1;
+        }
+
+        if (!m) {
+                /* return a buffer with an extra NUL, so that the assumption that we always have two trailing NULs holds */
+                m = new0(char, 2);
+                if (!m)
+                        return -ENOMEM;
+
+                n = 0;
+        } else
+                /* Make sure there is a second extra NUL at the end of resulting nulstr (not counted in return size) */
+                m[n] = '\0';
+
+        *ret = TAKE_PTR(m);
+        *ret_size = n;
+
+        return 0;
+}
+
+int set_make_nulstr(Set *s, char **ret, size_t *ret_size) {
+        /* Use _cleanup_free_ instead of _cleanup_strv_free_ because we need to clean the strv only, not
+         * the strings owned by the set. */
+        _cleanup_free_ char **strv = NULL;
+
+        assert(ret);
+        assert(ret_size);
+
+        strv = set_get_strv(s);
+        if (!strv)
+                return -ENOMEM;
+
+        return strv_make_nulstr(strv, ret, ret_size);
+}
+
+const char* nulstr_get(const char *nulstr, const char *needle) {
         if (!nulstr)
-                return false;
+                return NULL;
 
         NULSTR_FOREACH(i, nulstr)
                 if (streq(i, needle))
-                        return true;
+                        return i;
 
-        return false;
+        return NULL;
 }
diff --git a/src/basic/nulstr-util.h b/src/basic/nulstr-util.h
index ee9b632..fd0ed44 100644
--- a/src/basic/nulstr-util.h
+++ b/src/basic/nulstr-util.h
@@ -1,13 +1,39 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <errno.h>
+#include <macro.h>
 #include <stdbool.h>
 #include <string.h>
 
+#include "set.h"
+
 #define NULSTR_FOREACH(i, l)                                    \
-        for ((i) = (l); (i) && *(i); (i) = strchr((i), 0)+1)
+        for (typeof(*(l)) *(i) = (l); (i) && *(i); (i) = strchr((i), 0)+1)
 
 #define NULSTR_FOREACH_PAIR(i, j, l)                             \
-        for ((i) = (l), (j) = strchr((i), 0)+1; (i) && *(i); (i) = strchr((j), 0)+1, (j) = *(i) ? strchr((i), 0)+1 : (i))
+        for (typeof(*(l)) *(i) = (l), *(j) = strchr((i), 0)+1; (i) && *(i); (i) = strchr((j), 0)+1, (j) = *(i) ? strchr((i), 0)+1 : (i))
 
-bool nulstr_contains(const char *nulstr, const char *needle);
+const char* nulstr_get(const char *nulstr, const char *needle);
+
+static inline bool nulstr_contains(const char *nulstr, const char *needle) {
+        return nulstr_get(nulstr, needle);
+}
+
+char** strv_parse_nulstr(const char *s, size_t l);
+char** strv_split_nulstr(const char *s);
+int strv_make_nulstr(char * const *l, char **p, size_t *n);
+int set_make_nulstr(Set *s, char **ret, size_t *ret_size);
+
+static inline int strv_from_nulstr(char ***ret, const char *nulstr) {
+        char **t;
+
+        assert(ret);
+
+        t = strv_split_nulstr(nulstr);
+        if (!t)
+                return -ENOMEM;
+
+        *ret = t;
+        return 0;
+}
diff --git a/src/basic/ordered-set.c b/src/basic/ordered-set.c
index 0a76f04..b4c2588 100644
--- a/src/basic/ordered-set.c
+++ b/src/basic/ordered-set.c
@@ -58,7 +58,6 @@
 
 int _ordered_set_put_strdupv(OrderedSet **s, char **l  HASHMAP_DEBUG_PARAMS) {
         int n = 0, r;
-        char **i;
 
         STRV_FOREACH(i, l) {
                 r = _ordered_set_put_strdup(s, *i  HASHMAP_DEBUG_PASS_ARGS);
diff --git a/src/basic/ordered-set.h b/src/basic/ordered-set.h
index 3ee4735..e73da20 100644
--- a/src/basic/ordered-set.h
+++ b/src/basic/ordered-set.h
@@ -18,6 +18,14 @@
 int _ordered_set_ensure_put(OrderedSet **s, const struct hash_ops *ops, void *p  HASHMAP_DEBUG_PARAMS);
 #define ordered_set_ensure_put(s, hash_ops, key) _ordered_set_ensure_put(s, hash_ops, key  HASHMAP_DEBUG_SRC_ARGS)
 
+static inline void ordered_set_clear(OrderedSet *s) {
+        return ordered_hashmap_clear((OrderedHashmap*) s);
+}
+
+static inline void ordered_set_clear_free(OrderedSet *s) {
+        return ordered_hashmap_clear_free((OrderedHashmap*) s);
+}
+
 static inline OrderedSet* ordered_set_free(OrderedSet *s) {
         return (OrderedSet*) ordered_hashmap_free((OrderedHashmap*) s);
 }
@@ -66,6 +74,10 @@
         return _hashmap_get_strv(HASHMAP_BASE((OrderedHashmap*) s));
 }
 
+static inline int ordered_set_reserve(OrderedSet *s, unsigned entries_add) {
+        return ordered_hashmap_reserve((OrderedHashmap*) s, entries_add);
+}
+
 int ordered_set_consume(OrderedSet *s, void *p);
 int _ordered_set_put_strdup(OrderedSet **s, const char *p  HASHMAP_DEBUG_PARAMS);
 #define ordered_set_put_strdup(s, p) _ordered_set_put_strdup(s, p  HASHMAP_DEBUG_SRC_ARGS)
diff --git a/src/basic/os-util.c b/src/basic/os-util.c
index 51c685b..bf844e5 100644
--- a/src/basic/os-util.c
+++ b/src/basic/os-util.c
@@ -1,17 +1,23 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
+#include "dirent-util.h"
 #include "env-file.h"
 #include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "macro.h"
 #include "os-util.h"
+#include "parse-util.h"
 #include "path-util.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "utf8.h"
+#include "xattr-util.h"
 
 bool image_name_is_valid(const char *s) {
         if (!filename_is_valid(s))
@@ -30,7 +36,7 @@
         return true;
 }
 
-int path_is_extension_tree(const char *path, const char *extension) {
+int path_is_extension_tree(const char *path, const char *extension, bool relax_extension_release_check) {
         int r;
 
         assert(path);
@@ -41,9 +47,9 @@
         if (laccess(path, F_OK) < 0)
                 return -errno;
 
-        /* We use /usr/lib/extension-release.d/extension-release.NAME as flag file if something is a system extension,
-         * and {/etc|/usr/lib}/os-release as flag file if something is an OS (in case extension == NULL) */
-        r = open_extension_release(path, extension, NULL, NULL);
+        /* We use /usr/lib/extension-release.d/extension-release[.NAME] as flag for something being a system extension,
+         * and {/etc|/usr/lib}/os-release as a flag for something being an OS (when not an extension). */
+        r = open_extension_release(path, extension, relax_extension_release_check, NULL, NULL);
         if (r == -ENOENT) /* We got nothing */
                 return 0;
         if (r < 0)
@@ -52,7 +58,45 @@
         return 1;
 }
 
-int open_extension_release(const char *root, const char *extension, char **ret_path, int *ret_fd) {
+static int extension_release_strict_xattr_value(int extension_release_fd, const char *extension_release_dir_path, const char *filename) {
+        int r;
+
+        assert(extension_release_fd >= 0);
+        assert(extension_release_dir_path);
+        assert(filename);
+
+        /* No xattr or cannot parse it? Then skip this. */
+        _cleanup_free_ char *extension_release_xattr = NULL;
+        r = fgetxattr_malloc(extension_release_fd, "user.extension-release.strict", &extension_release_xattr);
+        if (r < 0) {
+                if (!ERRNO_IS_XATTR_ABSENT(r))
+                        return log_debug_errno(r,
+                                               "%s/%s: Failed to read 'user.extension-release.strict' extended attribute from file, ignoring: %m",
+                                               extension_release_dir_path, filename);
+
+                return log_debug_errno(r, "%s/%s does not have user.extension-release.strict xattr, ignoring.", extension_release_dir_path, filename);
+        }
+
+        /* Explicitly set to request strict matching? Skip it. */
+        r = parse_boolean(extension_release_xattr);
+        if (r < 0)
+                return log_debug_errno(r,
+                                       "%s/%s: Failed to parse 'user.extension-release.strict' extended attribute from file, ignoring: %m",
+                                       extension_release_dir_path, filename);
+        if (r > 0) {
+                log_debug("%s/%s: 'user.extension-release.strict' attribute is true, ignoring file.",
+                          extension_release_dir_path, filename);
+                return true;
+        }
+
+        log_debug("%s/%s: 'user.extension-release.strict' attribute is false%s",
+                  extension_release_dir_path, filename,
+                  special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        return false;
+}
+
+int open_extension_release(const char *root, const char *extension, bool relax_extension_release_check, char **ret_path, int *ret_fd) {
         _cleanup_free_ char *q = NULL;
         int r, fd;
 
@@ -67,16 +111,98 @@
                 r = chase_symlinks(extension_full_path, root, CHASE_PREFIX_ROOT,
                                    ret_path ? &q : NULL,
                                    ret_fd ? &fd : NULL);
-        } else {
-                const char *p;
+                log_full_errno_zerook(LOG_DEBUG, MIN(r, 0), "Checking for %s: %m", extension_full_path);
 
-                FOREACH_STRING(p, "/etc/os-release", "/usr/lib/os-release") {
-                        r = chase_symlinks(p, root, CHASE_PREFIX_ROOT,
+                /* Cannot find the expected extension-release file? The image filename might have been
+                 * mangled on deployment, so fallback to checking for any file in the extension-release.d
+                 * directory, and return the first one with a user.extension-release xattr instead.
+                 * The user.extension-release.strict xattr is checked to ensure the author of the image
+                 * considers it OK if names do not match. */
+                if (r == -ENOENT) {
+                        _cleanup_free_ char *extension_release_dir_path = NULL;
+                        _cleanup_closedir_ DIR *extension_release_dir = NULL;
+
+                        r = chase_symlinks_and_opendir("/usr/lib/extension-release.d/", root, CHASE_PREFIX_ROOT,
+                                                       &extension_release_dir_path, &extension_release_dir);
+                        if (r < 0)
+                                return log_debug_errno(r, "Cannot open %s/usr/lib/extension-release.d/, ignoring: %m", root);
+
+                        r = -ENOENT;
+                        FOREACH_DIRENT(de, extension_release_dir, return -errno) {
+                                int k;
+
+                                if (!IN_SET(de->d_type, DT_REG, DT_UNKNOWN))
+                                        continue;
+
+                                const char *image_name = startswith(de->d_name, "extension-release.");
+                                if (!image_name)
+                                        continue;
+
+                                if (!image_name_is_valid(image_name)) {
+                                        log_debug("%s/%s is not a valid extension-release file name, ignoring.",
+                                                  extension_release_dir_path, de->d_name);
+                                        continue;
+                                }
+
+                                /* We already chased the directory, and checked that
+                                 * this is a real file, so we shouldn't fail to open it. */
+                                _cleanup_close_ int extension_release_fd = openat(dirfd(extension_release_dir),
+                                                                                  de->d_name,
+                                                                                  O_PATH|O_CLOEXEC|O_NOFOLLOW);
+                                if (extension_release_fd < 0)
+                                        return log_debug_errno(errno,
+                                                               "Failed to open extension-release file %s/%s: %m",
+                                                               extension_release_dir_path,
+                                                               de->d_name);
+
+                                /* Really ensure it is a regular file after we open it. */
+                                if (fd_verify_regular(extension_release_fd) < 0) {
+                                        log_debug("%s/%s is not a regular file, ignoring.", extension_release_dir_path, de->d_name);
+                                        continue;
+                                }
+
+                                if (!relax_extension_release_check) {
+                                        k = extension_release_strict_xattr_value(extension_release_fd,
+                                                                                 extension_release_dir_path,
+                                                                                 de->d_name);
+                                        if (k != 0)
+                                                continue;
+                                }
+
+                                /* We already found what we were looking for, but there's another candidate?
+                                 * We treat this as an error, as we want to enforce that there are no ambiguities
+                                 * in case we are in the fallback path. */
+                                if (r == 0) {
+                                        r = -ENOTUNIQ;
+                                        break;
+                                }
+
+                                r = 0; /* Found it! */
+
+                                if (ret_fd)
+                                        fd = TAKE_FD(extension_release_fd);
+
+                                if (ret_path) {
+                                        q = path_join(extension_release_dir_path, de->d_name);
+                                        if (!q)
+                                                return -ENOMEM;
+                                }
+                        }
+                }
+        } else {
+                const char *var = secure_getenv("SYSTEMD_OS_RELEASE");
+                if (var)
+                        r = chase_symlinks(var, root, 0,
                                            ret_path ? &q : NULL,
                                            ret_fd ? &fd : NULL);
-                        if (r != -ENOENT)
-                                break;
-                }
+                else
+                        FOREACH_STRING(path, "/etc/os-release", "/usr/lib/os-release") {
+                                r = chase_symlinks(path, root, CHASE_PREFIX_ROOT,
+                                                   ret_path ? &q : NULL,
+                                                   ret_fd ? &fd : NULL);
+                                if (r != -ENOENT)
+                                        break;
+                        }
         }
         if (r < 0)
                 return r;
@@ -99,16 +225,16 @@
         return 0;
 }
 
-int fopen_extension_release(const char *root, const char *extension, char **ret_path, FILE **ret_file) {
+int fopen_extension_release(const char *root, const char *extension, bool relax_extension_release_check, char **ret_path, FILE **ret_file) {
         _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         FILE *f;
         int r;
 
         if (!ret_file)
-                return open_extension_release(root, extension, ret_path, NULL);
+                return open_extension_release(root, extension, relax_extension_release_check, ret_path, NULL);
 
-        r = open_extension_release(root, extension, ret_path ? &p : NULL, &fd);
+        r = open_extension_release(root, extension, relax_extension_release_check, ret_path ? &p : NULL, &fd);
         if (r < 0)
                 return r;
 
@@ -123,24 +249,24 @@
         return 0;
 }
 
-static int parse_release_internal(const char *root, const char *extension, va_list ap) {
+static int parse_release_internal(const char *root, bool relax_extension_release_check, const char *extension, va_list ap) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *p = NULL;
         int r;
 
-        r = fopen_extension_release(root, extension, &p, &f);
+        r = fopen_extension_release(root, extension, relax_extension_release_check, &p, &f);
         if (r < 0)
                 return r;
 
         return parse_env_filev(f, p, ap);
 }
 
-int _parse_extension_release(const char *root, const char *extension, ...) {
+int _parse_extension_release(const char *root, bool relax_extension_release_check, const char *extension, ...) {
         va_list ap;
         int r;
 
         va_start(ap, extension);
-        r = parse_release_internal(root, extension, ap);
+        r = parse_release_internal(root, relax_extension_release_check, extension, ap);
         va_end(ap);
 
         return r;
@@ -151,7 +277,7 @@
         int r;
 
         va_start(ap, root);
-        r = parse_release_internal(root, NULL, ap);
+        r = parse_release_internal(root, /* relax_extension_release_check= */ false, NULL, ap);
         va_end(ap);
 
         return r;
@@ -171,7 +297,6 @@
 
 int load_os_release_pairs_with_prefix(const char *root, const char *prefix, char ***ret) {
         _cleanup_strv_free_ char **os_release_pairs = NULL, **os_release_pairs_prefixed = NULL;
-        char **p, **q;
         int r;
 
         r = load_os_release_pairs(root, &os_release_pairs);
@@ -199,14 +324,60 @@
         return 0;
 }
 
-int load_extension_release_pairs(const char *root, const char *extension, char ***ret) {
+int load_extension_release_pairs(const char *root, const char *extension, bool relax_extension_release_check, char ***ret) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *p = NULL;
         int r;
 
-        r = fopen_extension_release(root, extension, &p, &f);
+        r = fopen_extension_release(root, extension, relax_extension_release_check, &p, &f);
         if (r < 0)
                 return r;
 
         return load_env_file_pairs(f, p, ret);
 }
+
+int os_release_support_ended(const char *support_end, bool quiet, usec_t *ret_eol) {
+        _cleanup_free_ char *_support_end_alloc = NULL;
+        int r;
+
+        if (!support_end) {
+                /* If the caller has the variably handy, they can pass it in. If not, we'll read it
+                 * ourselves. */
+
+                r = parse_os_release(NULL,
+                                     "SUPPORT_END", &_support_end_alloc);
+                if (r < 0 && r != -ENOENT)
+                        return log_full_errno(quiet ? LOG_DEBUG : LOG_WARNING, r,
+                                              "Failed to read os-release file, ignoring: %m");
+
+                support_end = _support_end_alloc;
+        }
+
+        if (isempty(support_end)) /* An empty string is a explicit way to say "no EOL exists" */
+                return false;  /* no end date defined */
+
+        struct tm tm = {};
+        const char *k = strptime(support_end, "%Y-%m-%d", &tm);
+        if (!k || *k)
+                return log_full_errno(quiet ? LOG_DEBUG : LOG_WARNING, SYNTHETIC_ERRNO(EINVAL),
+                                      "Failed to parse SUPPORT_END= in os-release file, ignoring: %m");
+
+        time_t eol = timegm(&tm);
+        if (eol == (time_t) -1)
+                return log_full_errno(quiet ? LOG_DEBUG : LOG_WARNING, SYNTHETIC_ERRNO(EINVAL),
+                                      "Failed to convert SUPPORT_END= in os-release file, ignoring: %m");
+
+        if (ret_eol)
+                *ret_eol = eol * USEC_PER_SEC;
+
+        return DIV_ROUND_UP(now(CLOCK_REALTIME), USEC_PER_SEC) > (usec_t) eol;
+}
+
+const char *os_release_pretty_name(const char *pretty_name, const char *name) {
+        /* Distills a "pretty" name to show from os-release data. First argument is supposed to be the
+         * PRETTY_NAME= field, the second one the NAME= field. This function is trivial, of course, and
+         * exists mostly to ensure we use the same logic wherever possible. */
+
+        return empty_to_null(pretty_name) ?:
+                empty_to_null(name) ?: "Linux";
+}
diff --git a/src/basic/os-util.h b/src/basic/os-util.h
index 271b35f..a6b121e 100644
--- a/src/basic/os-util.h
+++ b/src/basic/os-util.h
@@ -8,26 +8,30 @@
 
 bool image_name_is_valid(const char *s) _pure_;
 
-int path_is_extension_tree(const char *path, const char *extension);
+int path_is_extension_tree(const char *path, const char *extension, bool relax_extension_release_check);
 static inline int path_is_os_tree(const char *path) {
-        return path_is_extension_tree(path, NULL);
+        return path_is_extension_tree(path, NULL, false);
 }
 
-int open_extension_release(const char *root, const char *extension, char **ret_path, int *ret_fd);
+int open_extension_release(const char *root, const char *extension, bool relax_extension_release_check, char **ret_path, int *ret_fd);
 static inline int open_os_release(const char *root, char **ret_path, int *ret_fd) {
-        return open_extension_release(root, NULL, ret_path, ret_fd);
+        return open_extension_release(root, NULL, false, ret_path, ret_fd);
 }
 
-int fopen_extension_release(const char *root, const char *extension, char **ret_path, FILE **ret_file);
+int fopen_extension_release(const char *root, const char *extension, bool relax_extension_release_check, char **ret_path, FILE **ret_file);
 static inline int fopen_os_release(const char *root, char **ret_path, FILE **ret_file) {
-        return fopen_extension_release(root, NULL, ret_path, ret_file);
+        return fopen_extension_release(root, NULL, false, ret_path, ret_file);
 }
 
-int _parse_extension_release(const char *root, const char *extension, ...) _sentinel_;
+int _parse_extension_release(const char *root, bool relax_extension_release_check, const char *extension, ...) _sentinel_;
 int _parse_os_release(const char *root, ...) _sentinel_;
-#define parse_extension_release(root, extension, ...) _parse_extension_release(root, extension, __VA_ARGS__, NULL)
+#define parse_extension_release(root, relax_extension_release_check, extension, ...) _parse_extension_release(root, relax_extension_release_check, extension, __VA_ARGS__, NULL)
 #define parse_os_release(root, ...) _parse_os_release(root, __VA_ARGS__, NULL)
 
-int load_extension_release_pairs(const char *root, const char *extension, char ***ret);
+int load_extension_release_pairs(const char *root, const char *extension, bool relax_extension_release_check, char ***ret);
 int load_os_release_pairs(const char *root, char ***ret);
 int load_os_release_pairs_with_prefix(const char *root, const char *prefix, char ***ret);
+
+int os_release_support_ended(const char *support_end, bool quiet, usec_t *ret_eol);
+
+const char *os_release_pretty_name(const char *pretty_name, const char *name);
diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
index b79c885..3445d31 100644
--- a/src/basic/parse-util.c
+++ b/src/basic/parse-util.c
@@ -2,7 +2,6 @@
 
 #include <errno.h>
 #include <inttypes.h>
-#include <linux/oom.h>
 #include <net/if.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -211,7 +210,7 @@
                         e++;
 
                         /* strtoull() itself would accept space/+/- */
-                        if (*e >= '0' && *e <= '9') {
+                        if (ascii_isdigit(*e)) {
                                 unsigned long long l2;
                                 char *e2;
 
@@ -257,6 +256,26 @@
         return 0;
 }
 
+int parse_sector_size(const char *t, uint64_t *ret) {
+        int r;
+
+        assert(t);
+        assert(ret);
+
+        uint64_t ss;
+
+        r = safe_atou64(t, &ss);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse sector size parameter %s", t);
+        if (ss < 512 || ss > 4096) /* Allow up to 4K due to dm-crypt support and 4K alignment by the homed LUKS backend */
+                return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Sector size not between 512 and 4096: %s", t);
+        if (!ISPOWEROF2(ss))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Sector size not power of 2: %s", t);
+
+        *ret = ss;
+        return 0;
+}
+
 int parse_range(const char *t, unsigned *lower, unsigned *upper) {
         _cleanup_free_ char *word = NULL;
         unsigned l, u;
@@ -416,7 +435,7 @@
         return 0;
 }
 
-int safe_atollu_full(const char *s, unsigned base, long long unsigned *ret_llu) {
+int safe_atollu_full(const char *s, unsigned base, unsigned long long *ret_llu) {
         char *x = NULL;
         unsigned long long l;
 
@@ -477,69 +496,31 @@
         return 0;
 }
 
-int safe_atou8(const char *s, uint8_t *ret) {
-        unsigned base = 0;
-        unsigned long l;
-        char *x = NULL;
+int safe_atou8_full(const char *s, unsigned base, uint8_t *ret) {
+        unsigned u;
+        int r;
 
-        assert(s);
-
-        s += strspn(s, WHITESPACE);
-        s = mangle_base(s, &base);
-
-        errno = 0;
-        l = strtoul(s, &x, base);
-        if (errno > 0)
-                return -errno;
-        if (!x || x == s || *x != 0)
-                return -EINVAL;
-        if (l != 0 && s[0] == '-')
-                return -ERANGE;
-        if ((unsigned long) (uint8_t) l != l)
+        r = safe_atou_full(s, base, &u);
+        if (r < 0)
+                return r;
+        if (u > UINT8_MAX)
                 return -ERANGE;
 
-        if (ret)
-                *ret = (uint8_t) l;
+        *ret = (uint8_t) u;
         return 0;
 }
 
 int safe_atou16_full(const char *s, unsigned base, uint16_t *ret) {
-        char *x = NULL;
-        unsigned long l;
+        unsigned u;
+        int r;
 
-        assert(s);
-        assert(SAFE_ATO_MASK_FLAGS(base) <= 16);
-
-        if (FLAGS_SET(base, SAFE_ATO_REFUSE_LEADING_WHITESPACE) &&
-            strchr(WHITESPACE, s[0]))
-                return -EINVAL;
-
-        s += strspn(s, WHITESPACE);
-
-        if (FLAGS_SET(base, SAFE_ATO_REFUSE_PLUS_MINUS) &&
-            IN_SET(s[0], '+', '-'))
-                return -EINVAL;
-
-        if (FLAGS_SET(base, SAFE_ATO_REFUSE_LEADING_ZERO) &&
-            s[0] == '0' && s[1] != 0)
-                return -EINVAL;
-
-        s = mangle_base(s, &base);
-
-        errno = 0;
-        l = strtoul(s, &x, SAFE_ATO_MASK_FLAGS(base));
-        if (errno > 0)
-                return -errno;
-        if (!x || x == s || *x != 0)
-                return -EINVAL;
-        if (l != 0 && s[0] == '-')
-                return -ERANGE;
-        if ((unsigned long) (uint16_t) l != l)
+        r = safe_atou_full(s, base, &u);
+        if (r < 0)
+                return r;
+        if (u > UINT16_MAX)
                 return -ERANGE;
 
-        if (ret)
-                *ret = (uint16_t) l;
-
+        *ret = (uint16_t) u;
         return 0;
 }
 
@@ -600,7 +581,7 @@
 
         /* accept any number of digits, strtoull is limited to 19 */
         for (size_t i = 0; i < digits; i++,s++) {
-                if (*s < '0' || *s > '9') {
+                if (!ascii_isdigit(*s)) {
                         if (i == 0)
                                 return -EINVAL;
 
@@ -645,7 +626,7 @@
         uint16_t l;
         int r;
 
-        r = safe_atou16(s, &l);
+        r = safe_atou16_full(s, SAFE_ATO_REFUSE_LEADING_WHITESPACE, &l);
         if (r < 0)
                 return r;
 
@@ -693,34 +674,6 @@
         return 0;
 }
 
-int parse_dev(const char *s, dev_t *ret) {
-        const char *major;
-        unsigned x, y;
-        size_t n;
-        int r;
-
-        n = strspn(s, DIGITS);
-        if (n == 0)
-                return -EINVAL;
-        if (s[n] != ':')
-                return -EINVAL;
-
-        major = strndupa(s, n);
-        r = safe_atou(major, &x);
-        if (r < 0)
-                return r;
-
-        r = safe_atou(s + n + 1, &y);
-        if (r < 0)
-                return r;
-
-        if (!DEVICE_MAJOR_VALID(x) || !DEVICE_MINOR_VALID(y))
-                return -ERANGE;
-
-        *ret = makedev(x, y);
-        return 0;
-}
-
 int parse_oom_score_adjust(const char *s, int *ret) {
         int r, v;
 
@@ -731,7 +684,7 @@
         if (r < 0)
                 return r;
 
-        if (v < OOM_SCORE_ADJ_MIN || v > OOM_SCORE_ADJ_MAX)
+        if (!oom_score_adjust_is_valid(v))
                 return -ERANGE;
 
         *ret = v;
@@ -741,13 +694,13 @@
 int store_loadavg_fixed_point(unsigned long i, unsigned long f, loadavg_t *ret) {
         assert(ret);
 
-        if (i >= (~0UL << FSHIFT))
+        if (i >= (~0UL << LOADAVG_PRECISION_BITS))
                 return -ERANGE;
 
-        i = i << FSHIFT;
-        f = DIV_ROUND_UP((f << FSHIFT), 100);
+        i = i << LOADAVG_PRECISION_BITS;
+        f = DIV_ROUND_UP((f << LOADAVG_PRECISION_BITS), 100);
 
-        if (f >= FIXED_1)
+        if (f >= LOADAVG_FIXED_POINT_1_0)
                 return -ERANGE;
 
         *ret = i | f;
@@ -766,7 +719,7 @@
         if (!d)
                 return -EINVAL;
 
-        i_str = strndupa(s, d - s);
+        i_str = strndupa_safe(s, d - s);
         f_str = d + 1;
 
         r = safe_atolu_full(i_str, 10, &i);
diff --git a/src/basic/parse-util.h b/src/basic/parse-util.h
index 908202d..8771995 100644
--- a/src/basic/parse-util.h
+++ b/src/basic/parse-util.h
@@ -3,7 +3,6 @@
 
 #include <inttypes.h>
 #include <limits.h>
-#include <linux/loadavg.h>
 #include <stddef.h>
 #include <stdint.h>
 #include <sys/types.h>
@@ -13,13 +12,13 @@
 typedef unsigned long loadavg_t;
 
 int parse_boolean(const char *v) _pure_;
-int parse_dev(const char *s, dev_t *ret);
 int parse_pid(const char *s, pid_t* ret_pid);
 int parse_mode(const char *s, mode_t *ret);
 int parse_ifindex(const char *s);
 int parse_mtu(int family, const char *s, uint32_t *ret);
 
 int parse_size(const char *t, uint64_t base, uint64_t *size);
+int parse_sector_size(const char *t, uint64_t *ret);
 int parse_range(const char *t, unsigned *lower, unsigned *upper);
 int parse_errno(const char *t);
 
@@ -38,7 +37,11 @@
 int safe_atoi(const char *s, int *ret_i);
 int safe_atolli(const char *s, long long int *ret_i);
 
-int safe_atou8(const char *s, uint8_t *ret);
+int safe_atou8_full(const char *s, unsigned base, uint8_t *ret);
+
+static inline int safe_atou8(const char *s, uint8_t *ret) {
+        return safe_atou8_full(s, 0, ret);
+}
 
 int safe_atou16_full(const char *s, unsigned base, uint16_t *ret);
 
@@ -66,9 +69,9 @@
         return safe_atoi(s, (int*) ret_i);
 }
 
-int safe_atollu_full(const char *s, unsigned base, long long unsigned *ret_llu);
+int safe_atollu_full(const char *s, unsigned base, unsigned long long *ret_llu);
 
-static inline int safe_atollu(const char *s, long long unsigned *ret_llu) {
+static inline int safe_atollu(const char *s, unsigned long long *ret_llu) {
         return safe_atollu_full(s, 0, ret_llu);
 }
 
@@ -83,12 +86,12 @@
 }
 
 static inline int safe_atoux64(const char *s, uint64_t *ret) {
-        assert_cc(sizeof(int64_t) == sizeof(long long unsigned));
-        return safe_atollu_full(s, 16, (long long unsigned*) ret);
+        assert_cc(sizeof(int64_t) == sizeof(unsigned long long));
+        return safe_atollu_full(s, 16, (unsigned long long*) ret);
 }
 
 #if LONG_MAX == INT_MAX
-static inline int safe_atolu_full(const char *s, unsigned base, long unsigned *ret_u) {
+static inline int safe_atolu_full(const char *s, unsigned base, unsigned long *ret_u) {
         assert_cc(sizeof(unsigned long) == sizeof(unsigned));
         return safe_atou_full(s, base, (unsigned*) ret_u);
 }
@@ -118,7 +121,7 @@
 }
 #else
 static inline int safe_atozu(const char *s, size_t *ret_u) {
-        assert_cc(sizeof(size_t) == sizeof(long unsigned));
+        assert_cc(sizeof(size_t) == sizeof(unsigned long));
         return safe_atolu(s, ret_u);
 }
 #endif
@@ -136,6 +139,14 @@
 
 int parse_oom_score_adjust(const char *s, int *ret);
 
+/* Implement floating point using fixed integers, to improve performance when
+ * calculating load averages. These macros can be used to extract the integer
+ * and decimal parts of a value. */
+#define LOADAVG_PRECISION_BITS  11
+#define LOADAVG_FIXED_POINT_1_0 (1 << LOADAVG_PRECISION_BITS)
+#define LOADAVG_INT_SIDE(x)     ((x) >> LOADAVG_PRECISION_BITS)
+#define LOADAVG_DECIMAL_SIDE(x) LOADAVG_INT_SIDE(((x) & (LOADAVG_FIXED_POINT_1_0 - 1)) * 100)
+
 /* Given a Linux load average (e.g. decimal number 34.89 where 34 is passed as i and 89 is passed as f), convert it
  * to a loadavg_t. */
 int store_loadavg_fixed_point(unsigned long i, unsigned long f, loadavg_t *ret);
diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c
index 83adf47..c99e9d8 100644
--- a/src/basic/path-lookup.c
+++ b/src/basic/path-lookup.c
@@ -109,7 +109,7 @@
 int xdg_user_dirs(char ***ret_config_dirs, char ***ret_data_dirs) {
         /* Implement the mechanisms defined in
          *
-         * http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
+         * https://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
          *
          * We look in both the config and the data dirs because we
          * want to encourage that distributors ship their unit files
@@ -232,36 +232,40 @@
 }
 
 static int acquire_generator_dirs(
-                UnitFileScope scope,
+                LookupScope scope,
                 const char *tempdir,
                 char **generator,
                 char **generator_early,
                 char **generator_late) {
 
-        _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL;
+        _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL, *p = NULL;
         const char *prefix;
 
         assert(generator);
         assert(generator_early);
         assert(generator_late);
-        assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER, UNIT_FILE_GLOBAL));
+        assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER, LOOKUP_SCOPE_GLOBAL));
 
-        if (scope == UNIT_FILE_GLOBAL)
+        if (scope == LOOKUP_SCOPE_GLOBAL)
                 return -EOPNOTSUPP;
 
         if (tempdir)
                 prefix = tempdir;
-        else if (scope == UNIT_FILE_SYSTEM)
+        else if (scope == LOOKUP_SCOPE_SYSTEM)
                 prefix = "/run/systemd";
         else {
-                /* UNIT_FILE_USER */
+                /* LOOKUP_SCOPE_USER */
                 const char *e;
 
                 e = getenv("XDG_RUNTIME_DIR");
                 if (!e)
                         return -ENXIO;
 
-                prefix = strjoina(e, "/systemd");
+                p = path_join(e, "/systemd");
+                if (!p)
+                        return -ENOMEM;
+
+                prefix = p;
         }
 
         x = path_join(prefix, "generator");
@@ -284,21 +288,21 @@
 }
 
 static int acquire_transient_dir(
-                UnitFileScope scope,
+                LookupScope scope,
                 const char *tempdir,
                 char **ret) {
 
         char *transient;
 
         assert(ret);
-        assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER, UNIT_FILE_GLOBAL));
+        assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER, LOOKUP_SCOPE_GLOBAL));
 
-        if (scope == UNIT_FILE_GLOBAL)
+        if (scope == LOOKUP_SCOPE_GLOBAL)
                 return -EOPNOTSUPP;
 
         if (tempdir)
                 transient = path_join(tempdir, "transient");
-        else if (scope == UNIT_FILE_SYSTEM)
+        else if (scope == LOOKUP_SCOPE_SYSTEM)
                 transient = strdup("/run/systemd/transient");
         else
                 return xdg_user_runtime_dir(ret, "/systemd/transient");
@@ -309,7 +313,7 @@
         return 0;
 }
 
-static int acquire_config_dirs(UnitFileScope scope, char **persistent, char **runtime) {
+static int acquire_config_dirs(LookupScope scope, char **persistent, char **runtime) {
         _cleanup_free_ char *a = NULL, *b = NULL;
         int r;
 
@@ -318,17 +322,17 @@
 
         switch (scope) {
 
-        case UNIT_FILE_SYSTEM:
+        case LOOKUP_SCOPE_SYSTEM:
                 a = strdup(SYSTEM_CONFIG_UNIT_DIR);
                 b = strdup("/run/systemd/system");
                 break;
 
-        case UNIT_FILE_GLOBAL:
+        case LOOKUP_SCOPE_GLOBAL:
                 a = strdup(USER_CONFIG_UNIT_DIR);
                 b = strdup("/run/systemd/user");
                 break;
 
-        case UNIT_FILE_USER:
+        case LOOKUP_SCOPE_USER:
                 r = xdg_user_config_dir(&a, "/systemd/user");
                 if (r < 0 && r != -ENXIO)
                         return r;
@@ -348,7 +352,7 @@
                 return 0;
 
         default:
-                assert_not_reached("Hmm, unexpected scope value.");
+                assert_not_reached();
         }
 
         if (!a || !b)
@@ -360,7 +364,7 @@
         return 0;
 }
 
-static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **runtime) {
+static int acquire_control_dirs(LookupScope scope, char **persistent, char **runtime) {
         _cleanup_free_ char *a = NULL;
         int r;
 
@@ -369,7 +373,7 @@
 
         switch (scope) {
 
-        case UNIT_FILE_SYSTEM:  {
+        case LOOKUP_SCOPE_SYSTEM:  {
                 _cleanup_free_ char *b = NULL;
 
                 a = strdup("/etc/systemd/system.control");
@@ -385,7 +389,7 @@
                 break;
         }
 
-        case UNIT_FILE_USER:
+        case LOOKUP_SCOPE_USER:
                 r = xdg_user_config_dir(&a, "/systemd/user.control");
                 if (r < 0 && r != -ENXIO)
                         return r;
@@ -402,11 +406,11 @@
 
                 break;
 
-        case UNIT_FILE_GLOBAL:
+        case LOOKUP_SCOPE_GLOBAL:
                 return -EOPNOTSUPP;
 
         default:
-                assert_not_reached("Hmm, unexpected scope value.");
+                assert_not_reached();
         }
 
         *persistent = TAKE_PTR(a);
@@ -415,7 +419,7 @@
 }
 
 static int acquire_attached_dirs(
-                UnitFileScope scope,
+                LookupScope scope,
                 char **ret_persistent,
                 char **ret_runtime) {
 
@@ -425,7 +429,7 @@
         assert(ret_runtime);
 
         /* Portable services are not available to regular users for now. */
-        if (scope != UNIT_FILE_SYSTEM)
+        if (scope != LOOKUP_SCOPE_SYSTEM)
                 return -EOPNOTSUPP;
 
         a = strdup("/etc/systemd/system.attached");
@@ -459,7 +463,6 @@
 }
 
 static int patch_root_prefix_strv(char **l, const char *root_dir) {
-        char **i;
         int r;
 
         if (!root_dir)
@@ -490,7 +493,7 @@
 
                 k = endswith(e, ":");
                 if (k) {
-                        e = strndupa(e, k - e);
+                        e = strndupa_safe(e, k - e);
                         *append = true;
                 }
 
@@ -505,8 +508,8 @@
 }
 
 int lookup_paths_init(
-                LookupPaths *p,
-                UnitFileScope scope,
+                LookupPaths *lp,
+                LookupScope scope,
                 LookupPathsFlags flags,
                 const char *root_dir) {
 
@@ -523,16 +526,16 @@
         _cleanup_strv_free_ char **paths = NULL;
         int r;
 
-        assert(p);
+        assert(lp);
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
 
 #if HAVE_SPLIT_USR
         flags |= LOOKUP_PATHS_SPLIT_USR;
 #endif
 
         if (!empty_or_root(root_dir)) {
-                if (scope == UNIT_FILE_USER)
+                if (scope == LOOKUP_SCOPE_USER)
                         return -EINVAL;
 
                 r = is_dir(root_dir, true);
@@ -557,8 +560,8 @@
         if (r < 0)
                 return r;
 
-        if (scope == UNIT_FILE_USER) {
-                r = acquire_config_dirs(UNIT_FILE_GLOBAL, &global_persistent_config, &global_runtime_config);
+        if (scope == LOOKUP_SCOPE_USER) {
+                r = acquire_config_dirs(LOOKUP_SCOPE_GLOBAL, &global_persistent_config, &global_runtime_config);
                 if (r < 0)
                         return r;
         }
@@ -603,7 +606,7 @@
 
                 switch (scope) {
 
-                case UNIT_FILE_SYSTEM:
+                case LOOKUP_SCOPE_SYSTEM:
                         add = strv_new(
                                         /* If you modify this you also want to modify
                                          * systemdsystemunitpath= in systemd.pc.in! */
@@ -626,7 +629,7 @@
                                         STRV_IFNOTNULL(generator_late));
                         break;
 
-                case UNIT_FILE_GLOBAL:
+                case LOOKUP_SCOPE_GLOBAL:
                         add = strv_new(
                                         /* If you modify this you also want to modify
                                          * systemduserunitpath= in systemd.pc.in, and
@@ -649,7 +652,7 @@
                                         STRV_IFNOTNULL(generator_late));
                         break;
 
-                case UNIT_FILE_USER:
+                case LOOKUP_SCOPE_USER:
                         add = user_dirs(persistent_config, runtime_config,
                                         global_persistent_config, global_runtime_config,
                                         generator, generator_early, generator_late,
@@ -658,7 +661,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Hmm, unexpected scope?");
+                        assert_not_reached();
                 }
 
                 if (!add)
@@ -713,7 +716,7 @@
         if (r < 0)
                 return -ENOMEM;
 
-        *p = (LookupPaths) {
+        *lp = (LookupPaths) {
                 .search_path = strv_uniq(TAKE_PTR(paths)),
 
                 .persistent_config = TAKE_PTR(persistent_config),
@@ -738,46 +741,56 @@
         return 0;
 }
 
-void lookup_paths_free(LookupPaths *p) {
-        if (!p)
-                return;
+int lookup_paths_init_or_warn(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir) {
+        int r;
 
-        p->search_path = strv_free(p->search_path);
-
-        p->persistent_config = mfree(p->persistent_config);
-        p->runtime_config = mfree(p->runtime_config);
-
-        p->persistent_attached = mfree(p->persistent_attached);
-        p->runtime_attached = mfree(p->runtime_attached);
-
-        p->generator = mfree(p->generator);
-        p->generator_early = mfree(p->generator_early);
-        p->generator_late = mfree(p->generator_late);
-
-        p->transient = mfree(p->transient);
-
-        p->persistent_control = mfree(p->persistent_control);
-        p->runtime_control = mfree(p->runtime_control);
-
-        p->root_dir = mfree(p->root_dir);
-        p->temporary_dir = mfree(p->temporary_dir);
+        r = lookup_paths_init(lp, scope, flags, root_dir);
+        if (r < 0)
+                return log_error_errno(r, "Failed to initialize unit search paths%s%s: %m",
+                                       isempty(root_dir) ? "" : " for root directory ", strempty(root_dir));
+        return r;
 }
 
-void lookup_paths_log(LookupPaths *p) {
-        assert(p);
+void lookup_paths_free(LookupPaths *lp) {
+        if (!lp)
+                return;
 
-        if (strv_isempty(p->search_path)) {
+        lp->search_path = strv_free(lp->search_path);
+
+        lp->persistent_config = mfree(lp->persistent_config);
+        lp->runtime_config = mfree(lp->runtime_config);
+
+        lp->persistent_attached = mfree(lp->persistent_attached);
+        lp->runtime_attached = mfree(lp->runtime_attached);
+
+        lp->generator = mfree(lp->generator);
+        lp->generator_early = mfree(lp->generator_early);
+        lp->generator_late = mfree(lp->generator_late);
+
+        lp->transient = mfree(lp->transient);
+
+        lp->persistent_control = mfree(lp->persistent_control);
+        lp->runtime_control = mfree(lp->runtime_control);
+
+        lp->root_dir = mfree(lp->root_dir);
+        lp->temporary_dir = mfree(lp->temporary_dir);
+}
+
+void lookup_paths_log(LookupPaths *lp) {
+        assert(lp);
+
+        if (strv_isempty(lp->search_path)) {
                 log_debug("Ignoring unit files.");
-                p->search_path = strv_free(p->search_path);
+                lp->search_path = strv_free(lp->search_path);
         } else {
                 _cleanup_free_ char *t = NULL;
 
-                t = strv_join(p->search_path, "\n\t");
+                t = strv_join(lp->search_path, "\n\t");
                 log_debug("Looking for unit files in (higher priority first):\n\t%s", strna(t));
         }
 }
 
-char **generator_binary_paths(UnitFileScope scope) {
+char **generator_binary_paths(LookupScope scope) {
         bool append = false; /* Add items from SYSTEMD_GENERATOR_PATH before normal directories */
         _cleanup_strv_free_ char **paths = NULL;
         int r;
@@ -792,15 +805,15 @@
 
                 switch (scope) {
 
-                case UNIT_FILE_SYSTEM:
+                case LOOKUP_SCOPE_SYSTEM:
                         add = strv_new("/run/systemd/system-generators",
                                        "/etc/systemd/system-generators",
                                        "/usr/local/lib/systemd/system-generators",
                                        SYSTEM_GENERATOR_DIR);
                         break;
 
-                case UNIT_FILE_GLOBAL:
-                case UNIT_FILE_USER:
+                case LOOKUP_SCOPE_GLOBAL:
+                case LOOKUP_SCOPE_USER:
                         add = strv_new("/run/systemd/user-generators",
                                        "/etc/systemd/user-generators",
                                        "/usr/local/lib/systemd/user-generators",
@@ -808,7 +821,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Hmm, unexpected scope.");
+                        assert_not_reached();
                 }
 
                 if (!add)
@@ -867,7 +880,7 @@
 }
 
 int find_portable_profile(const char *name, const char *unit, char **ret_path) {
-        const char *p, *dot;
+        const char *dot;
 
         assert(name);
         assert(ret_path);
diff --git a/src/basic/path-lookup.h b/src/basic/path-lookup.h
index af85dc7..46eb32c 100644
--- a/src/basic/path-lookup.h
+++ b/src/basic/path-lookup.h
@@ -3,10 +3,7 @@
 
 #include <stdbool.h>
 
-typedef struct LookupPaths LookupPaths;
-
-#include "def.h"
-#include "unit-file.h"
+#include "constants.h"
 #include "macro.h"
 
 typedef enum LookupPathsFlags {
@@ -15,7 +12,15 @@
         LOOKUP_PATHS_SPLIT_USR           = 1 << 2,
 } LookupPathsFlags;
 
-struct LookupPaths {
+typedef enum LookupScope {
+        LOOKUP_SCOPE_SYSTEM,
+        LOOKUP_SCOPE_GLOBAL,
+        LOOKUP_SCOPE_USER,
+        _LOOKUP_SCOPE_MAX,
+        _LOOKUP_SCOPE_INVALID = -EINVAL,
+} LookupScope;
+
+typedef struct LookupPaths {
         /* Where we look for unit files. This includes the individual special paths below, but also any vendor
          * supplied, static unit file paths. */
         char **search_path;
@@ -52,9 +57,10 @@
 
         /* A temporary directory when running in test mode, to be nuked */
         char *temporary_dir;
-};
+} LookupPaths;
 
-int lookup_paths_init(LookupPaths *p, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir);
+int lookup_paths_init(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir);
+int lookup_paths_init_or_warn(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir);
 
 int xdg_user_dirs(char ***ret_config_dirs, char ***ret_data_dirs);
 int xdg_user_runtime_dir(char **ret, const char *suffix);
@@ -67,7 +73,7 @@
 void lookup_paths_log(LookupPaths *p);
 void lookup_paths_free(LookupPaths *p);
 
-char **generator_binary_paths(UnitFileScope scope);
+char **generator_binary_paths(LookupScope scope);
 char **env_generator_binary_paths(bool is_system);
 
 #define NETWORK_DIRS ((const char* const*) CONF_PATHS_STRV("systemd/network"))
diff --git a/src/basic/path-util.c b/src/basic/path-util.c
index 13d71ed..40a819d 100644
--- a/src/basic/path-util.c
+++ b/src/basic/path-util.c
@@ -1,32 +1,25 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
+#include <fnmatch.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 
-/* When we include libgen.h because we need dirname() we immediately
- * undefine basename() since libgen.h defines it as a macro to the
- * POSIX version which is really broken. We prefer GNU basename(). */
-#include <libgen.h>
-#undef basename
-
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "extract-word.h"
 #include "fd-util.h"
 #include "fs-util.h"
 #include "glob-util.h"
 #include "log.h"
 #include "macro.h"
-#include "nulstr-util.h"
-#include "parse-util.h"
 #include "path-util.h"
 #include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "time-util.h"
-#include "utf8.h"
 
 int path_split_and_make_absolute(const char *p, char ***ret) {
         char **l;
@@ -62,7 +55,7 @@
 }
 
 int safe_getcwd(char **ret) {
-        char *cwd;
+        _cleanup_free_ char *cwd = NULL;
 
         cwd = get_current_dir_name();
         if (!cwd)
@@ -70,12 +63,12 @@
 
         /* Let's make sure the directory is really absolute, to protect us from the logic behind
          * CVE-2018-1000001 */
-        if (cwd[0] != '/') {
-                free(cwd);
+        if (cwd[0] != '/')
                 return -ENOMEDIUM;
-        }
 
-        *ret = cwd;
+        if (ret)
+                *ret = TAKE_PTR(cwd);
+
         return 0;
 }
 
@@ -200,10 +193,38 @@
         return 0;
 }
 
-char* path_startswith_strv(const char *p, char **set) {
-        char **s, *t;
+int path_make_relative_parent(const char *from_child, const char *to, char **ret) {
+        _cleanup_free_ char *from = NULL;
+        int r;
 
+        assert(from_child);
+        assert(to);
+        assert(ret);
+
+        /* Similar to path_make_relative(), but provides the relative path from the parent directory of
+         * 'from_child'. This may be useful when creating relative symlink.
+         *
+         * E.g.
+         * - from = "/path/to/aaa", to = "/path/to/bbb"
+         *      path_make_relative(from, to) = "../bbb"
+         *      path_make_relative_parent(from, to) = "bbb"
+         *
+         * - from = "/path/to/aaa/bbb", to = "/path/to/ccc/ddd"
+         *      path_make_relative(from, to) = "../../ccc/ddd"
+         *      path_make_relative_parent(from, to) = "../ccc/ddd"
+         */
+
+        r = path_extract_directory(from_child, &from);
+        if (r < 0)
+                return r;
+
+        return path_make_relative(from, to, ret);
+}
+
+char* path_startswith_strv(const char *p, char **set) {
         STRV_FOREACH(s, set) {
+                char *t;
+
                 t = path_startswith(p, *s);
                 if (t)
                         return t;
@@ -213,7 +234,6 @@
 }
 
 int path_strv_make_absolute_cwd(char **l) {
-        char **s;
         int r;
 
         /* Goes through every item in the string list and makes it
@@ -235,7 +255,6 @@
 }
 
 char **path_strv_resolve(char **l, const char *root) {
-        char **s;
         unsigned k = 0;
         bool enomem = false;
         int r;
@@ -329,11 +348,9 @@
 
 char *path_simplify(char *path) {
         bool add_slash = false;
-        char *f = path;
+        char *f = ASSERT_PTR(path);
         int r;
 
-        assert(path);
-
         /* Removes redundant inner and trailing slashes. Also removes unnecessary dots.
          * Modifies the passed string in-place.
          *
@@ -377,52 +394,6 @@
         return path;
 }
 
-int path_simplify_and_warn(
-                char *path,
-                unsigned flag,
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *lvalue) {
-
-        bool fatal = flag & PATH_CHECK_FATAL;
-
-        assert(!FLAGS_SET(flag, PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE));
-
-        if (!utf8_is_valid(path))
-                return log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, path);
-
-        if (flag & (PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE)) {
-                bool absolute;
-
-                absolute = path_is_absolute(path);
-
-                if (!absolute && (flag & PATH_CHECK_ABSOLUTE))
-                        return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
-                                          "%s= path is not absolute%s: %s",
-                                          lvalue, fatal ? "" : ", ignoring", path);
-
-                if (absolute && (flag & PATH_CHECK_RELATIVE))
-                        return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
-                                          "%s= path is absolute%s: %s",
-                                          lvalue, fatal ? "" : ", ignoring", path);
-        }
-
-        path_simplify(path);
-
-        if (!path_is_valid(path))
-                return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
-                                  "%s= path has invalid length (%zu bytes)%s.",
-                                  lvalue, strlen(path), fatal ? "" : ", ignoring");
-
-        if (!path_is_normalized(path))
-                return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
-                                  "%s= path is not normalized%s: %s",
-                                  lvalue, fatal ? "" : ", ignoring", path);
-
-        return 0;
-}
-
 char *path_startswith_full(const char *path, const char *prefix, bool accept_dot_dot) {
         assert(path);
         assert(prefix);
@@ -466,8 +437,10 @@
 int path_compare(const char *a, const char *b) {
         int r;
 
-        assert(a);
-        assert(b);
+        /* Order NULL before non-NULL */
+        r = CMP(!!a, !!b);
+        if (r != 0)
+                return r;
 
         /* A relative path and an absolute path must not compare as equal.
          * Which one is sorted before the other does not really matter.
@@ -546,17 +519,17 @@
         va_list ap;
         bool slash;
 
-        /* Joins all listed strings until the sentinel and places a "/" between them unless the strings end/begin
-         * already with one so that it is unnecessary. Note that slashes which are already duplicate won't be
-         * removed. The string returned is hence always equal to or longer than the sum of the lengths of each
-         * individual string.
+        /* Joins all listed strings until the sentinel and places a "/" between them unless the strings
+         * end/begin already with one so that it is unnecessary. Note that slashes which are already
+         * duplicate won't be removed. The string returned is hence always equal to or longer than the sum of
+         * the lengths of the individual strings.
          *
          * The first argument may be an already allocated string that is extended via realloc() if
          * non-NULL. path_extend() and path_join() are macro wrappers around this function, making use of the
          * first parameter to distinguish the two operations.
          *
-         * Note: any listed empty string is simply skipped. This can be useful for concatenating strings of which some
-         * are optional.
+         * Note: any listed empty string is simply skipped. This can be useful for concatenating strings of
+         * which some are optional.
          *
          * Examples:
          *
@@ -614,7 +587,7 @@
 }
 
 static int check_x_access(const char *path, int *ret_fd) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         /* We need to use O_PATH because there may be executables for which we have only exec
@@ -641,30 +614,53 @@
         return 0;
 }
 
-int find_executable_full(const char *name, bool use_path_envvar, char **ret_filename, int *ret_fd) {
-        int last_error, r;
+static int find_executable_impl(const char *name, const char *root, char **ret_filename, int *ret_fd) {
+        _cleanup_close_ int fd = -EBADF;
+        _cleanup_free_ char *path_name = NULL;
+        int r;
+
+        assert(name);
+
+        /* Function chase_symlinks() is invoked only when root is not NULL, as using it regardless of
+         * root value would alter the behavior of existing callers for example: /bin/sleep would become
+         * /usr/bin/sleep when find_executables is called. Hence, this function should be invoked when
+         * needed to avoid unforeseen regression or other complicated changes. */
+        if (root) {
+                r = chase_symlinks(name,
+                                   root,
+                                   CHASE_PREFIX_ROOT,
+                                   &path_name,
+                                   /* ret_fd= */ NULL); /* prefix root to name in case full paths are not specified */
+                if (r < 0)
+                        return r;
+
+                name = path_name;
+        }
+
+        r = check_x_access(name, ret_fd ? &fd : NULL);
+        if (r < 0)
+                return r;
+
+        if (ret_filename) {
+                r = path_make_absolute_cwd(name, ret_filename);
+                if (r < 0)
+                        return r;
+        }
+
+        if (ret_fd)
+                *ret_fd = TAKE_FD(fd);
+
+        return 0;
+}
+
+int find_executable_full(const char *name, const char *root, char **exec_search_path, bool use_path_envvar, char **ret_filename, int *ret_fd) {
+        int last_error = -ENOENT, r = 0;
         const char *p = NULL;
 
         assert(name);
 
-        if (is_path(name)) {
-                _cleanup_close_ int fd = -1;
-
-                r = check_x_access(name, ret_fd ? &fd : NULL);
-                if (r < 0)
-                        return r;
-
-                if (ret_filename) {
-                        r = path_make_absolute_cwd(name, ret_filename);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (ret_fd)
-                        *ret_fd = TAKE_FD(fd);
-
-                return 0;
-        }
+        if (is_path(name))
+                return find_executable_impl(name, root, ret_filename, ret_fd);
 
         if (use_path_envvar)
                 /* Plain getenv, not secure_getenv, because we want to actually allow the user to pick the
@@ -673,12 +669,31 @@
         if (!p)
                 p = DEFAULT_PATH;
 
-        last_error = -ENOENT;
+        if (exec_search_path) {
+                STRV_FOREACH(element, exec_search_path) {
+                        _cleanup_free_ char *full_path = NULL;
+
+                        if (!path_is_absolute(*element))
+                                continue;
+
+                        full_path = path_join(*element, name);
+                        if (!full_path)
+                                return -ENOMEM;
+
+                        r = find_executable_impl(full_path, root, ret_filename, ret_fd);
+                        if (r < 0) {
+                                if (r != -EACCES)
+                                        last_error = r;
+                                continue;
+                        }
+                        return 0;
+                }
+                return last_error;
+        }
 
         /* Resolve a single-component name to a full path */
         for (;;) {
                 _cleanup_free_ char *element = NULL;
-                _cleanup_close_ int fd = -1;
 
                 r = extract_first_word(&p, &element, ":", EXTRACT_RELAX|EXTRACT_DONT_COALESCE_SEPARATORS);
                 if (r < 0)
@@ -692,7 +707,7 @@
                 if (!path_extend(&element, name))
                         return -ENOMEM;
 
-                r = check_x_access(element, ret_fd ? &fd : NULL);
+                r = find_executable_impl(element, root, ret_filename, ret_fd);
                 if (r < 0) {
                         /* PATH entries which we don't have access to are ignored, as per tradition. */
                         if (r != -EACCES)
@@ -701,11 +716,6 @@
                 }
 
                 /* Found it! */
-                if (ret_filename)
-                        *ret_filename = path_simplify(TAKE_PTR(element));
-                if (ret_fd)
-                        *ret_fd = TAKE_FD(fd);
-
                 return 0;
         }
 
@@ -714,7 +724,6 @@
 
 bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool update) {
         bool changed = false, originally_unset;
-        const char* const* i;
 
         assert(timestamp);
 
@@ -773,39 +782,27 @@
                                "/dev/null");
 }
 
-int fsck_exists(const char *fstype) {
+int fsck_exists(void) {
+        return executable_is_good("fsck");
+}
+
+int fsck_exists_for_fstype(const char *fstype) {
         const char *checker;
+        int r;
 
         assert(fstype);
 
         if (streq(fstype, "auto"))
                 return -EINVAL;
 
+        r = fsck_exists();
+        if (r <= 0)
+                return r;
+
         checker = strjoina("fsck.", fstype);
         return executable_is_good(checker);
 }
 
-char* dirname_malloc(const char *path) {
-        char *d, *dir, *dir2;
-
-        assert(path);
-
-        d = strdup(path);
-        if (!d)
-                return NULL;
-
-        dir = dirname(d);
-        assert(dir);
-
-        if (dir == d)
-                return d;
-
-        dir2 = strdup(dir);
-        free(d);
-
-        return dir2;
-}
-
 static const char *skip_slash_or_dot(const char *p) {
         for (; !isempty(p); p++) {
                 if (*p == '/')
@@ -892,8 +889,9 @@
 
 static const char *skip_slash_or_dot_backward(const char *path, const char *q) {
         assert(path);
+        assert(!q || q >= path);
 
-        for (; q >= path; q--) {
+        for (; q; q = PTR_SUB1(q, path)) {
                 if (*q == '/')
                         continue;
                 if (q > path && strneq(q - 1, "/.", 2))
@@ -958,7 +956,7 @@
                 q = path + strlen(path) - 1;
 
         q = skip_slash_or_dot_backward(path, q);
-        if ((q < path) || /* the root directory */
+        if (!q || /* the root directory */
             (q == path && *q == '.')) { /* path is "." or "./" */
                 if (next)
                         *next = path;
@@ -969,10 +967,10 @@
 
         last_end = q + 1;
 
-        while (q >= path && *q != '/')
-                q--;
+        while (q && *q != '/')
+                q = PTR_SUB1(q, path);
 
-        last_begin = q + 1;
+        last_begin = q ? q + 1 : path;
         len = last_end - last_begin;
 
         if (len > NAME_MAX)
@@ -982,10 +980,7 @@
 
         if (next) {
                 q = skip_slash_or_dot_backward(path, q);
-                if (q < path)
-                        *next = path;
-                else
-                        *next = q + 1;
+                *next = q ? q + 1 : path;
         }
 
         if (ret)
@@ -1070,7 +1065,7 @@
                 return -ENOMEM;
 
         *ret = TAKE_PTR(a);
-        return strlen(c) > (size_t)r ? O_DIRECTORY : 0;
+        return strlen(c) > (size_t) r ? O_DIRECTORY : 0;
 }
 
 int path_extract_directory(const char *path, char **ret) {
@@ -1124,7 +1119,7 @@
         if (isempty(p))
                 return false;
 
-        if (dot_or_dot_dot(p))
+        if (dot_or_dot_dot(p)) /* Yes, in this context we consider "." and ".." invalid */
                 return false;
 
         e = strchrnul(p, '/');
@@ -1169,63 +1164,67 @@
         return true;
 }
 
-char *file_in_same_dir(const char *path, const char *filename) {
-        char *e, *ret;
-        size_t k;
+int file_in_same_dir(const char *path, const char *filename, char **ret) {
+        _cleanup_free_ char *b = NULL;
+        int r;
 
         assert(path);
         assert(filename);
+        assert(ret);
 
-        /* This removes the last component of path and appends
-         * filename, unless the latter is absolute anyway or the
-         * former isn't */
+        /* This removes the last component of path and appends filename, unless the latter is absolute anyway
+         * or the former isn't */
 
         if (path_is_absolute(filename))
-                return strdup(filename);
+                b = strdup(filename);
+        else {
+                _cleanup_free_ char *dn = NULL;
 
-        e = strrchr(path, '/');
-        if (!e)
-                return strdup(filename);
+                r = path_extract_directory(path, &dn);
+                if (r == -EDESTADDRREQ) /* no path prefix */
+                        b = strdup(filename);
+                else if (r < 0)
+                        return r;
+                else
+                        b = path_join(dn, filename);
+        }
+        if (!b)
+                return -ENOMEM;
 
-        k = strlen(filename);
-        ret = new(char, (e + 1 - path) + k + 1);
-        if (!ret)
-                return NULL;
-
-        memcpy(mempcpy(ret, path, e + 1 - path), filename, k + 1);
-        return ret;
+        *ret = TAKE_PTR(b);
+        return 0;
 }
 
 bool hidden_or_backup_file(const char *filename) {
-        const char *p;
-
         assert(filename);
 
         if (filename[0] == '.' ||
-            streq(filename, "lost+found") ||
-            streq(filename, "aquota.user") ||
-            streq(filename, "aquota.group") ||
+            STR_IN_SET(filename,
+                       "lost+found",
+                       "aquota.user",
+                       "aquota.group") ||
             endswith(filename, "~"))
                 return true;
 
-        p = strrchr(filename, '.');
-        if (!p)
+        const char *dot = strrchr(filename, '.');
+        if (!dot)
                 return false;
 
-        /* Please, let's not add more entries to the list below. If external projects think it's a good idea to come up
-         * with always new suffixes and that everybody else should just adjust to that, then it really should be on
-         * them. Hence, in future, let's not add any more entries. Instead, let's ask those packages to instead adopt
-         * one of the generic suffixes/prefixes for hidden files or backups, possibly augmented with an additional
-         * string. Specifically: there's now:
+        /* Please, let's not add more entries to the list below. If external projects think it's a good idea
+         * to come up with always new suffixes and that everybody else should just adjust to that, then it
+         * really should be on them. Hence, in future, let's not add any more entries. Instead, let's ask
+         * those packages to instead adopt one of the generic suffixes/prefixes for hidden files or backups,
+         * possibly augmented with an additional string. Specifically: there's now:
          *
          *    The generic suffixes "~" and ".bak" for backup files
          *    The generic prefix "." for hidden files
          *
-         * Thus, if a new package manager "foopkg" wants its own set of ".foopkg-new", ".foopkg-old", ".foopkg-dist"
-         * or so registered, let's refuse that and ask them to use ".foopkg.new", ".foopkg.old" or ".foopkg~" instead.
+         * Thus, if a new package manager "foopkg" wants its own set of ".foopkg-new", ".foopkg-old",
+         * ".foopkg-dist" or so registered, let's refuse that and ask them to use ".foopkg.new",
+         * ".foopkg.old" or ".foopkg~" instead.
          */
 
-        return STR_IN_SET(p + 1,
+        return STR_IN_SET(dot + 1,
                           "rpmnew",
                           "rpmsave",
                           "rpmorig",
@@ -1247,15 +1246,16 @@
 
 bool is_device_path(const char *path) {
 
-        /* Returns true on paths that likely refer to a device, either by path in sysfs or to something in /dev */
+        /* Returns true for paths that likely refer to a device, either by path in sysfs or to something in
+         * /dev. */
 
         return PATH_STARTSWITH_SET(path, "/dev/", "/sys/");
 }
 
 bool valid_device_node_path(const char *path) {
 
-        /* Some superficial checks whether the specified path is a valid device node path, all without looking at the
-         * actual device node. */
+        /* Some superficial checks whether the specified path is a valid device node path, all without
+         * looking at the actual device node. */
 
         if (!PATH_STARTSWITH_SET(path, "/dev/", "/run/systemd/inaccessible/"))
                 return false;
@@ -1269,8 +1269,8 @@
 bool valid_device_allow_pattern(const char *path) {
         assert(path);
 
-        /* Like valid_device_node_path(), but also allows full-subsystem expressions, like DeviceAllow= and DeviceDeny=
-         * accept it */
+        /* Like valid_device_node_path(), but also allows full-subsystem expressions like those accepted by
+         * DeviceAllow= and DeviceDeny=. */
 
         if (STARTSWITH_SET(path, "block-", "char-"))
                 return true;
@@ -1278,74 +1278,6 @@
         return valid_device_node_path(path);
 }
 
-int systemd_installation_has_version(const char *root, unsigned minimal_version) {
-        const char *pattern;
-        int r;
-
-        /* Try to guess if systemd installation is later than the specified version. This
-         * is hacky and likely to yield false negatives, particularly if the installation
-         * is non-standard. False positives should be relatively rare.
-         */
-
-        NULSTR_FOREACH(pattern,
-                       /* /lib works for systems without usr-merge, and for systems with a sane
-                        * usr-merge, where /lib is a symlink to /usr/lib. /usr/lib is necessary
-                        * for Gentoo which does a merge without making /lib a symlink.
-                        */
-                       "lib/systemd/libsystemd-shared-*.so\0"
-                       "lib64/systemd/libsystemd-shared-*.so\0"
-                       "usr/lib/systemd/libsystemd-shared-*.so\0"
-                       "usr/lib64/systemd/libsystemd-shared-*.so\0") {
-
-                _cleanup_strv_free_ char **names = NULL;
-                _cleanup_free_ char *path = NULL;
-                char *c, **name;
-
-                path = path_join(root, pattern);
-                if (!path)
-                        return -ENOMEM;
-
-                r = glob_extend(&names, path, 0);
-                if (r == -ENOENT)
-                        continue;
-                if (r < 0)
-                        return r;
-
-                assert_se(c = endswith(path, "*.so"));
-                *c = '\0'; /* truncate the glob part */
-
-                STRV_FOREACH(name, names) {
-                        /* This is most likely to run only once, hence let's not optimize anything. */
-                        char *t, *t2;
-                        unsigned version;
-
-                        t = startswith(*name, path);
-                        if (!t)
-                                continue;
-
-                        t2 = endswith(t, ".so");
-                        if (!t2)
-                                continue;
-
-                        t2[0] = '\0'; /* truncate the suffix */
-
-                        r = safe_atou(t, &version);
-                        if (r < 0) {
-                                log_debug_errno(r, "Found libsystemd shared at \"%s.so\", but failed to parse version: %m", *name);
-                                continue;
-                        }
-
-                        log_debug("Found libsystemd shared at \"%s.so\", version %u (%s).",
-                                  *name, version,
-                                  version >= minimal_version ? "OK" : "too old");
-                        if (version >= minimal_version)
-                                return true;
-                }
-        }
-
-        return false;
-}
-
 bool dot_or_dot_dot(const char *path) {
         if (!path)
                 return false;
@@ -1361,8 +1293,8 @@
 
 bool empty_or_root(const char *path) {
 
-        /* For operations relative to some root directory, returns true if the specified root directory is redundant,
-         * i.e. either / or NULL or the empty string or any equivalent. */
+        /* For operations relative to some root directory, returns true if the specified root directory is
+         * redundant, i.e. either / or NULL or the empty string or any equivalent. */
 
         if (isempty(path))
                 return true;
@@ -1371,8 +1303,6 @@
 }
 
 bool path_strv_contains(char **l, const char *path) {
-        char **i;
-
         STRV_FOREACH(i, l)
                 if (path_equal(*i, path))
                         return true;
@@ -1381,10 +1311,9 @@
 }
 
 bool prefixed_path_strv_contains(char **l, const char *path) {
-        char **i, *j;
-
         STRV_FOREACH(i, l) {
-                j = *i;
+                const char *j = *i;
+
                 if (*j == '-')
                         j++;
                 if (*j == '+')
@@ -1395,3 +1324,66 @@
 
         return false;
 }
+
+int path_glob_can_match(const char *pattern, const char *prefix, char **ret) {
+        assert(pattern);
+        assert(prefix);
+
+        for (const char *a = pattern, *b = prefix;;) {
+                _cleanup_free_ char *g = NULL, *h = NULL;
+                const char *p, *q;
+                int r, s;
+
+                r = path_find_first_component(&a, /* accept_dot_dot = */ false, &p);
+                if (r < 0)
+                        return r;
+
+                s = path_find_first_component(&b, /* accept_dot_dot = */ false, &q);
+                if (s < 0)
+                        return s;
+
+                if (s == 0) {
+                        /* The pattern matches the prefix. */
+                        if (ret) {
+                                char *t;
+
+                                t = path_join(prefix, p);
+                                if (!t)
+                                        return -ENOMEM;
+
+                                *ret = t;
+                        }
+                        return true;
+                }
+
+                if (r == 0)
+                        break;
+
+                if (r == s && strneq(p, q, r))
+                        continue; /* common component. Check next. */
+
+                g = strndup(p, r);
+                if (!g)
+                        return -ENOMEM;
+
+                if (!string_is_glob(g))
+                        break;
+
+                /* We found a glob component. Check if the glob pattern matches the prefix component. */
+
+                h = strndup(q, s);
+                if (!h)
+                        return -ENOMEM;
+
+                r = fnmatch(g, h, 0);
+                if (r == FNM_NOMATCH)
+                        break;
+                if (r != 0) /* Failure to process pattern? */
+                        return -EINVAL;
+        }
+
+        /* The pattern does not match the prefix. */
+        if (ret)
+                *ret = NULL;
+        return false;
+}
diff --git a/src/basic/path-util.h b/src/basic/path-util.h
index 26e7362..56f01f4 100644
--- a/src/basic/path-util.h
+++ b/src/basic/path-util.h
@@ -43,12 +43,16 @@
 #endif
 
 static inline bool is_path(const char *p) {
-        assert(p);
+        if (!p) /* A NULL pointer is definitely not a path */
+                return false;
+
         return strchr(p, '/');
 }
 
 static inline bool path_is_absolute(const char *p) {
-        assert(p);
+        if (!p) /* A NULL pointer is definitely not an absolute path */
+                return false;
+
         return p[0] == '/';
 }
 
@@ -57,6 +61,7 @@
 int safe_getcwd(char **ret);
 int path_make_absolute_cwd(const char *p, char **ret);
 int path_make_relative(const char *from, const char *to, char **ret);
+int path_make_relative_parent(const char *from_child, const char *to, char **ret);
 char *path_startswith_full(const char *path, const char *prefix, bool accept_dot_dot) _pure_;
 static inline char* path_startswith(const char *path, const char *prefix) {
         return path_startswith_full(path, prefix, true);
@@ -77,14 +82,6 @@
 
 char* path_simplify(char *path);
 
-enum {
-        PATH_CHECK_FATAL    = 1 << 0,  /* If not set, then error message is appended with 'ignoring'. */
-        PATH_CHECK_ABSOLUTE = 1 << 1,
-        PATH_CHECK_RELATIVE = 1 << 2,
-};
-
-int path_simplify_and_warn(char *path, unsigned flag, const char *unit, const char *filename, unsigned line, const char *lvalue);
-
 static inline bool path_equal_ptr(const char *a, const char *b) {
         return !!a == !!b && (!a || path_equal(a, b));
 }
@@ -99,14 +96,15 @@
 char** path_strv_resolve(char **l, const char *root);
 char** path_strv_resolve_uniq(char **l, const char *root);
 
-int find_executable_full(const char *name, bool use_path_envvar, char **ret_filename, int *ret_fd);
+int find_executable_full(const char *name, const char *root, char **exec_search_path, bool use_path_envvar, char **ret_filename, int *ret_fd);
 static inline int find_executable(const char *name, char **ret_filename) {
-        return find_executable_full(name, true, ret_filename, NULL);
+        return find_executable_full(name, /* root= */ NULL, NULL, true, ret_filename, NULL);
 }
 
 bool paths_check_timestamp(const char* const* paths, usec_t *paths_ts_usec, bool update);
 
-int fsck_exists(const char *fstype);
+int fsck_exists(void);
+int fsck_exists_for_fstype(const char *fstype);
 
 /* Iterates through the path prefixes of the specified path, going up
  * the tree, to root. Also returns "" (and not "/"!) for the root
@@ -132,6 +130,7 @@
 
 /* Similar to path_join(), but only works for two components, and only the first one may be NULL and returns
  * an alloca() buffer, or possibly a const pointer into the path parameter. */
+/* DEPRECATED: use path_join() instead */
 #define prefix_roota(root, path)                                        \
         ({                                                              \
                 const char* _path = (path), *_root = (root), *_ret;     \
@@ -155,7 +154,6 @@
                 _ret;                                                   \
         })
 
-char* dirname_malloc(const char *path);
 int path_find_first_component(const char **p, bool accept_dot_dot, const char **ret);
 int path_find_last_component(const char *path, bool accept_dot_dot, const char **next, const char **ret);
 const char *last_path_component(const char *path);
@@ -165,14 +163,14 @@
 bool filename_is_valid(const char *p) _pure_;
 bool path_is_valid_full(const char *p, bool accept_dot_dot) _pure_;
 static inline bool path_is_valid(const char *p) {
-        return path_is_valid_full(p, true);
+        return path_is_valid_full(p, /* accept_dot_dot= */ true);
 }
 static inline bool path_is_safe(const char *p) {
-        return path_is_valid_full(p, false);
+        return path_is_valid_full(p, /* accept_dot_dot= */ false);
 }
 bool path_is_normalized(const char *p) _pure_;
 
-char *file_in_same_dir(const char *path, const char *filename);
+int file_in_same_dir(const char *path, const char *filename, char **ret);
 
 bool hidden_or_backup_file(const char *filename) _pure_;
 
@@ -181,8 +179,6 @@
 bool valid_device_node_path(const char *path);
 bool valid_device_allow_pattern(const char *path);
 
-int systemd_installation_has_version(const char *root, unsigned minimal_version);
-
 bool dot_or_dot_dot(const char *path);
 
 static inline const char *skip_dev_prefix(const char *p) {
@@ -202,3 +198,5 @@
 
 bool path_strv_contains(char **l, const char *path);
 bool prefixed_path_strv_contains(char **l, const char *path);
+
+int path_glob_can_match(const char *pattern, const char *prefix, char **ret);
diff --git a/src/basic/pcapng.h b/src/basic/pcapng.h
new file mode 100644
index 0000000..57c3af5
--- /dev/null
+++ b/src/basic/pcapng.h
@@ -0,0 +1,115 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+/*
+ * For details about the file format see RFC:
+ *   https://www.ietf.org/id/draft-tuexen-opsawg-pcapng-03.html
+ *  and
+ *    https://github.com/pcapng/pcapng/
+ */
+enum pcapng_block_types {
+        PCAPNG_INTERFACE_BLOCK = 1,
+        PCAPNG_PACKET_BLOCK,		/* Obsolete */
+        PCAPNG_SIMPLE_PACKET_BLOCK,
+        PCAPNG_NAME_RESOLUTION_BLOCK,
+        PCAPNG_INTERFACE_STATS_BLOCK,
+        PCAPNG_ENHANCED_PACKET_BLOCK,
+
+        PCAPNG_SECTION_BLOCK   = 0x0A0D0D0A,
+};
+
+struct pcapng_option {
+        uint16_t code;
+        uint16_t length;
+        uint8_t data[];
+};
+
+#define PCAPNG_BYTE_ORDER_MAGIC 0x1A2B3C4D
+#define PCAPNG_MAJOR_VERS 1
+#define PCAPNG_MINOR_VERS 0
+
+enum pcapng_opt {
+        PCAPNG_OPT_END     = 0,
+        PCAPNG_OPT_COMMENT = 1,
+};
+
+struct pcapng_section {
+        uint32_t block_type;
+        uint32_t block_length;
+        uint32_t byte_order_magic;
+        uint16_t major_version;
+        uint16_t minor_version;
+        uint64_t section_length;
+};
+
+enum pcapng_section_opt {
+        PCAPNG_SHB_HARDWARE = 2,
+        PCAPNG_SHB_OS       = 3,
+        PCAPNG_SHB_USERAPPL = 4,
+};
+
+struct pcapng_interface_block {
+        uint32_t block_type;	/* 1 */
+        uint32_t block_length;
+        uint16_t link_type;
+        uint16_t reserved;
+        uint32_t snap_len;
+};
+
+enum pcapng_interface_options {
+        PCAPNG_IFB_NAME	 = 2,
+        PCAPNG_IFB_DESCRIPTION,
+        PCAPNG_IFB_IPV4ADDR,
+        PCAPNG_IFB_IPV6ADDR,
+        PCAPNG_IFB_MACADDR,
+        PCAPNG_IFB_EUIADDR,
+        PCAPNG_IFB_SPEED,
+        PCAPNG_IFB_TSRESOL,
+        PCAPNG_IFB_TZONE,
+        PCAPNG_IFB_FILTER,
+        PCAPNG_IFB_OS,
+        PCAPNG_IFB_FCSLEN,
+        PCAPNG_IFB_TSOFFSET,
+        PCAPNG_IFB_HARDWARE,
+};
+
+struct pcapng_enhance_packet_block {
+        uint32_t block_type;	/* 6 */
+        uint32_t block_length;
+        uint32_t interface_id;
+        uint32_t timestamp_hi;
+        uint32_t timestamp_lo;
+        uint32_t capture_length;
+        uint32_t original_length;
+};
+
+/* Flags values */
+#define PCAPNG_IFB_INBOUND   0b01
+#define PCAPNG_IFB_OUTBOUND  0b10
+
+enum pcapng_epb_options {
+        PCAPNG_EPB_FLAGS = 2,
+        PCAPNG_EPB_HASH,
+        PCAPNG_EPB_DROPCOUNT,
+        PCAPNG_EPB_PACKETID,
+        PCAPNG_EPB_QUEUE,
+        PCAPNG_EPB_VERDICT,
+};
+
+struct pcapng_statistics_block {
+        uint32_t block_type;	/* 5 */
+        uint32_t block_length;
+        uint32_t interface_id;
+        uint32_t timestamp_hi;
+        uint32_t timestamp_lo;
+};
+
+enum pcapng_isb_options {
+        PCAPNG_ISB_STARTTIME = 2,
+        PCAPNG_ISB_ENDTIME,
+        PCAPNG_ISB_IFRECV,
+        PCAPNG_ISB_IFDROP,
+        PCAPNG_ISB_FILTERACCEPT,
+        PCAPNG_ISB_OSDROP,
+        PCAPNG_ISB_USRDELIV,
+};
diff --git a/src/basic/percent-util.c b/src/basic/percent-util.c
index 06f20fd..cab9d0e 100644
--- a/src/basic/percent-util.c
+++ b/src/basic/percent-util.c
@@ -12,7 +12,7 @@
         if (!pc)
                 return -EINVAL;
 
-        n = strndupa(p, pc - p);
+        n = strndupa_safe(p, pc - p);
         r = safe_atoi(n, &v);
         if (r < 0)
                 return r;
@@ -37,10 +37,10 @@
                 if (dot[1] < '0' || dot[1] > '9')
                         return -EINVAL;
                 q = dot[1] - '0';
-                n = strndupa(p, dot - p);
+                n = strndupa_safe(p, dot - p);
         } else {
                 q = 0;
-                n = strndupa(p, pc - p);
+                n = strndupa_safe(p, pc - p);
         }
         r = safe_atoi(n, &v);
         if (r < 0)
@@ -81,10 +81,10 @@
                         /* We do not support zero or more than two places */
                         return -EINVAL;
 
-                n = strndupa(p, dot - p);
+                n = strndupa_safe(p, dot - p);
         } else {
                 q = 0;
-                n = strndupa(p, pc - p);
+                n = strndupa_safe(p, pc - p);
         }
         r = safe_atoi(n, &v);
         if (r < 0)
diff --git a/src/basic/percent-util.h b/src/basic/percent-util.h
index 24f4c3b..e975d6e 100644
--- a/src/basic/percent-util.h
+++ b/src/basic/percent-util.h
@@ -19,15 +19,16 @@
  * a value relative to 100% == 2^32-1. Rounds to closest. */
 static inline uint32_t UINT32_SCALE_FROM_PERCENT(int percent) {
         assert_cc(INT_MAX <= UINT32_MAX);
-        return (uint32_t) (((uint64_t) percent * UINT32_MAX + 50) / 100U);
+
+        return (uint32_t) (((uint64_t) CLAMP(percent, 0, 100) * UINT32_MAX + 50) / 100U);
 }
 
 static inline uint32_t UINT32_SCALE_FROM_PERMILLE(int permille) {
-        return (uint32_t) (((uint64_t) permille * UINT32_MAX + 500) / 1000U);
+        return (uint32_t) (((uint64_t) CLAMP(permille, 0, 1000) * UINT32_MAX + 500) / 1000U);
 }
 
 static inline uint32_t UINT32_SCALE_FROM_PERMYRIAD(int permyriad) {
-        return (uint32_t) (((uint64_t) permyriad * UINT32_MAX + 5000) / 10000U);
+        return (uint32_t) (((uint64_t) CLAMP(permyriad, 0, 10000) * UINT32_MAX + 5000) / 10000U);
 }
 
 static inline int UINT32_SCALE_TO_PERCENT(uint32_t scale) {
diff --git a/src/basic/prioq.c b/src/basic/prioq.c
index 559e5d1..7e33561 100644
--- a/src/basic/prioq.c
+++ b/src/basic/prioq.c
@@ -173,6 +173,16 @@
         return 0;
 }
 
+int prioq_ensure_put(Prioq **q, compare_func_t compare_func, void *data, unsigned *idx) {
+        int r;
+
+        r = prioq_ensure_allocated(q, compare_func);
+        if (r < 0)
+                return r;
+
+        return prioq_put(*q, data, idx);
+}
+
 static void remove_item(Prioq *q, struct prioq_item *i) {
         struct prioq_item *l;
 
@@ -243,7 +253,7 @@
         return 1;
 }
 
-int prioq_reshuffle(Prioq *q, void *data, unsigned *idx) {
+void prioq_reshuffle(Prioq *q, void *data, unsigned *idx) {
         struct prioq_item *i;
         unsigned k;
 
@@ -251,12 +261,11 @@
 
         i = find_item(q, data, idx);
         if (!i)
-                return 0;
+                return;
 
         k = i - q->items;
         k = shuffle_down(q, k);
         shuffle_up(q, k);
-        return 1;
 }
 
 void *prioq_peek_by_index(Prioq *q, unsigned idx) {
diff --git a/src/basic/prioq.h b/src/basic/prioq.h
index 7c76647..f66562f 100644
--- a/src/basic/prioq.h
+++ b/src/basic/prioq.h
@@ -16,8 +16,9 @@
 int prioq_ensure_allocated(Prioq **q, compare_func_t compare_func);
 
 int prioq_put(Prioq *q, void *data, unsigned *idx);
+int prioq_ensure_put(Prioq **q, compare_func_t compare_func, void *data, unsigned *idx);
 int prioq_remove(Prioq *q, void *data, unsigned *idx);
-int prioq_reshuffle(Prioq *q, void *data, unsigned *idx);
+void prioq_reshuffle(Prioq *q, void *data, unsigned *idx);
 
 void *prioq_peek_by_index(Prioq *q, unsigned idx) _pure_;
 static inline void *prioq_peek(Prioq *q) {
diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
index 410b8a3..eea70d8 100644
--- a/src/basic/proc-cmdline.c
+++ b/src/basic/proc-cmdline.c
@@ -7,13 +7,13 @@
 #include "efivars.h"
 #include "extract-word.h"
 #include "fileio.h"
+#include "initrd-util.h"
 #include "macro.h"
 #include "parse-util.h"
 #include "proc-cmdline.h"
 #include "process-util.h"
 #include "special.h"
 #include "string-util.h"
-#include "util.h"
 #include "virt.h"
 
 int proc_cmdline(char **ret) {
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index b76ca6f..d7740d1 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -4,10 +4,10 @@
 #include <errno.h>
 #include <limits.h>
 #include <linux/oom.h>
+#include <pthread.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/personality.h>
 #include <sys/prctl.h>
@@ -21,20 +21,26 @@
 
 #include "alloc-util.h"
 #include "architecture.h"
+#include "argv-util.h"
+#include "env-file.h"
 #include "env-util.h"
 #include "errno-util.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
-#include "ioprio.h"
+#include "hostname-util.h"
 #include "locale-util.h"
 #include "log.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "missing_sched.h"
 #include "missing_syscall.h"
+#include "missing_threads.h"
+#include "mountpoint-util.h"
 #include "namespace-util.h"
+#include "nulstr-util.h"
+#include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
 #include "raw-clone.h"
@@ -182,13 +188,13 @@
         return r;
 }
 
-int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags, char **line) {
+int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags, char **ret) {
         _cleanup_free_ char *t = NULL;
         size_t k;
         char *ans;
 
-        assert(line);
         assert(pid >= 0);
+        assert(ret);
 
         /* Retrieve and format a commandline. See above for discussion of retrieval options.
          *
@@ -220,20 +226,17 @@
                 if (!args)
                         return -ENOMEM;
 
-                for (size_t i = 0; args[i]; i++) {
-                        char *e;
+                /* Drop trailing empty strings. See issue #21186. */
+                STRV_FOREACH_BACKWARDS(p, args) {
+                        if (!isempty(*p))
+                                break;
 
-                        e = shell_maybe_quote(args[i], shflags);
-                        if (!e)
-                                return -ENOMEM;
-
-                        free_and_replace(args[i], e);
+                        *p = mfree(*p);
                 }
 
-                ans = strv_join(args, " ");
+                ans = quote_command_line(args, shflags);
                 if (!ans)
                         return -ENOMEM;
-
         } else {
                 /* Arguments are separated by NULs. Let's replace those with spaces. */
                 for (size_t i = 0; i < k - 1; i++)
@@ -252,155 +255,51 @@
                 ans = str_realloc(ans);
         }
 
-        *line = ans;
+        *ret = ans;
         return 0;
 }
 
-static int update_argv(const char name[], size_t l) {
-        static int can_do = -1;
-
-        if (can_do == 0)
-                return 0;
-        can_do = false; /* We'll set it to true only if the whole process works */
-
-        /* Let's not bother with this if we don't have euid == 0. Strictly speaking we should check for the
-         * CAP_SYS_RESOURCE capability which is independent of the euid. In our own code the capability generally is
-         * present only for euid == 0, hence let's use this as quick bypass check, to avoid calling mmap() if
-         * PR_SET_MM_ARG_{START,END} fails with EPERM later on anyway. After all geteuid() is dead cheap to call, but
-         * mmap() is not. */
-        if (geteuid() != 0)
-                return log_debug_errno(SYNTHETIC_ERRNO(EPERM),
-                                       "Skipping PR_SET_MM, as we don't have privileges.");
-
-        static size_t mm_size = 0;
-        static char *mm = NULL;
+int container_get_leader(const char *machine, pid_t *pid) {
+        _cleanup_free_ char *s = NULL, *class = NULL;
+        const char *p;
+        pid_t leader;
         int r;
 
-        if (mm_size < l+1) {
-                size_t nn_size;
-                char *nn;
+        assert(machine);
+        assert(pid);
 
-                nn_size = PAGE_ALIGN(l+1);
-                nn = mmap(NULL, nn_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
-                if (nn == MAP_FAILED)
-                        return log_debug_errno(errno, "mmap() failed: %m");
-
-                strncpy(nn, name, nn_size);
-
-                /* Now, let's tell the kernel about this new memory */
-                if (prctl(PR_SET_MM, PR_SET_MM_ARG_START, (unsigned long) nn, 0, 0) < 0) {
-                        if (ERRNO_IS_PRIVILEGE(errno))
-                                return log_debug_errno(errno, "PR_SET_MM_ARG_START failed: %m");
-
-                        /* HACK: prctl() API is kind of dumb on this point.  The existing end address may already be
-                         * below the desired start address, in which case the kernel may have kicked this back due
-                         * to a range-check failure (see linux/kernel/sys.c:validate_prctl_map() to see this in
-                         * action).  The proper solution would be to have a prctl() API that could set both start+end
-                         * simultaneously, or at least let us query the existing address to anticipate this condition
-                         * and respond accordingly.  For now, we can only guess at the cause of this failure and try
-                         * a workaround--which will briefly expand the arg space to something potentially huge before
-                         * resizing it to what we want. */
-                        log_debug_errno(errno, "PR_SET_MM_ARG_START failed, attempting PR_SET_MM_ARG_END hack: %m");
-
-                        if (prctl(PR_SET_MM, PR_SET_MM_ARG_END, (unsigned long) nn + l + 1, 0, 0) < 0) {
-                                r = log_debug_errno(errno, "PR_SET_MM_ARG_END hack failed, proceeding without: %m");
-                                (void) munmap(nn, nn_size);
-                                return r;
-                        }
-
-                        if (prctl(PR_SET_MM, PR_SET_MM_ARG_START, (unsigned long) nn, 0, 0) < 0)
-                                return log_debug_errno(errno, "PR_SET_MM_ARG_START still failed, proceeding without: %m");
-                } else {
-                        /* And update the end pointer to the new end, too. If this fails, we don't really know what
-                         * to do, it's pretty unlikely that we can rollback, hence we'll just accept the failure,
-                         * and continue. */
-                        if (prctl(PR_SET_MM, PR_SET_MM_ARG_END, (unsigned long) nn + l + 1, 0, 0) < 0)
-                                log_debug_errno(errno, "PR_SET_MM_ARG_END failed, proceeding without: %m");
-                }
-
-                if (mm)
-                        (void) munmap(mm, mm_size);
-
-                mm = nn;
-                mm_size = nn_size;
-        } else {
-                strncpy(mm, name, mm_size);
-
-                /* Update the end pointer, continuing regardless of any failure. */
-                if (prctl(PR_SET_MM, PR_SET_MM_ARG_END, (unsigned long) mm + l + 1, 0, 0) < 0)
-                        log_debug_errno(errno, "PR_SET_MM_ARG_END failed, proceeding without: %m");
+        if (streq(machine, ".host")) {
+                *pid = 1;
+                return 0;
         }
 
-        can_do = true;
+        if (!hostname_is_valid(machine, 0))
+                return -EINVAL;
+
+        p = strjoina("/run/systemd/machines/", machine);
+        r = parse_env_file(NULL, p,
+                           "LEADER", &s,
+                           "CLASS", &class);
+        if (r == -ENOENT)
+                return -EHOSTDOWN;
+        if (r < 0)
+                return r;
+        if (!s)
+                return -EIO;
+
+        if (!streq_ptr(class, "container"))
+                return -EIO;
+
+        r = parse_pid(s, &leader);
+        if (r < 0)
+                return r;
+        if (leader <= 1)
+                return -EIO;
+
+        *pid = leader;
         return 0;
 }
 
-int rename_process(const char name[]) {
-        bool truncated = false;
-
-        /* This is a like a poor man's setproctitle(). It changes the comm field, argv[0], and also the glibc's
-         * internally used name of the process. For the first one a limit of 16 chars applies; to the second one in
-         * many cases one of 10 (i.e. length of "/sbin/init") — however if we have CAP_SYS_RESOURCES it is unbounded;
-         * to the third one 7 (i.e. the length of "systemd". If you pass a longer string it will likely be
-         * truncated.
-         *
-         * Returns 0 if a name was set but truncated, > 0 if it was set but not truncated. */
-
-        if (isempty(name))
-                return -EINVAL; /* let's not confuse users unnecessarily with an empty name */
-
-        if (!is_main_thread())
-                return -EPERM; /* Let's not allow setting the process name from other threads than the main one, as we
-                                * cache things without locking, and we make assumptions that PR_SET_NAME sets the
-                                * process name that isn't correct on any other threads */
-
-        size_t l = strlen(name);
-
-        /* First step, change the comm field. The main thread's comm is identical to the process comm. This means we
-         * can use PR_SET_NAME, which sets the thread name for the calling thread. */
-        if (prctl(PR_SET_NAME, name) < 0)
-                log_debug_errno(errno, "PR_SET_NAME failed: %m");
-        if (l >= TASK_COMM_LEN) /* Linux userspace process names can be 15 chars at max */
-                truncated = true;
-
-        /* Second step, change glibc's ID of the process name. */
-        if (program_invocation_name) {
-                size_t k;
-
-                k = strlen(program_invocation_name);
-                strncpy(program_invocation_name, name, k);
-                if (l > k)
-                        truncated = true;
-        }
-
-        /* Third step, completely replace the argv[] array the kernel maintains for us. This requires privileges, but
-         * has the advantage that the argv[] array is exactly what we want it to be, and not filled up with zeros at
-         * the end. This is the best option for changing /proc/self/cmdline. */
-        (void) update_argv(name, l);
-
-        /* Fourth step: in all cases we'll also update the original argv[], so that our own code gets it right too if
-         * it still looks here */
-        if (saved_argc > 0) {
-                if (saved_argv[0]) {
-                        size_t k;
-
-                        k = strlen(saved_argv[0]);
-                        strncpy(saved_argv[0], name, k);
-                        if (l > k)
-                                truncated = true;
-                }
-
-                for (int i = 1; i < saved_argc; i++) {
-                        if (!saved_argv[i])
-                                break;
-
-                        memzero(saved_argv[i], strlen(saved_argv[i]));
-                }
-        }
-
-        return !truncated;
-}
-
 int is_kernel_thread(pid_t pid) {
         _cleanup_free_ char *line = NULL;
         unsigned long long flags;
@@ -459,63 +358,60 @@
         return !!(flags & PF_KTHREAD);
 }
 
-int get_process_capeff(pid_t pid, char **capeff) {
+int get_process_capeff(pid_t pid, char **ret) {
         const char *p;
         int r;
 
-        assert(capeff);
         assert(pid >= 0);
+        assert(ret);
 
         p = procfs_file_alloca(pid, "status");
 
-        r = get_proc_field(p, "CapEff", WHITESPACE, capeff);
+        r = get_proc_field(p, "CapEff", WHITESPACE, ret);
         if (r == -ENOENT)
                 return -ESRCH;
 
         return r;
 }
 
-static int get_process_link_contents(const char *proc_file, char **name) {
+static int get_process_link_contents(pid_t pid, const char *proc_file, char **ret) {
+        const char *p;
         int r;
 
         assert(proc_file);
-        assert(name);
 
-        r = readlink_malloc(proc_file, name);
-        if (r == -ENOENT)
-                return -ESRCH;
-        if (r < 0)
-                return r;
+        p = procfs_file_alloca(pid, proc_file);
 
-        return 0;
+        r = readlink_malloc(p, ret);
+        return r == -ENOENT ? -ESRCH : r;
 }
 
-int get_process_exe(pid_t pid, char **name) {
-        const char *p;
+int get_process_exe(pid_t pid, char **ret) {
         char *d;
         int r;
 
         assert(pid >= 0);
 
-        p = procfs_file_alloca(pid, "exe");
-        r = get_process_link_contents(p, name);
+        r = get_process_link_contents(pid, "exe", ret);
         if (r < 0)
                 return r;
 
-        d = endswith(*name, " (deleted)");
-        if (d)
-                *d = '\0';
+        if (ret) {
+                d = endswith(*ret, " (deleted)");
+                if (d)
+                        *d = '\0';
+        }
 
         return 0;
 }
 
-static int get_process_id(pid_t pid, const char *field, uid_t *uid) {
+static int get_process_id(pid_t pid, const char *field, uid_t *ret) {
         _cleanup_fclose_ FILE *f = NULL;
         const char *p;
         int r;
 
         assert(field);
-        assert(uid);
+        assert(ret);
 
         if (pid < 0)
                 return -EINVAL;
@@ -545,60 +441,51 @@
 
                         l[strcspn(l, WHITESPACE)] = 0;
 
-                        return parse_uid(l, uid);
+                        return parse_uid(l, ret);
                 }
         }
 
         return -EIO;
 }
 
-int get_process_uid(pid_t pid, uid_t *uid) {
+int get_process_uid(pid_t pid, uid_t *ret) {
 
         if (pid == 0 || pid == getpid_cached()) {
-                *uid = getuid();
+                *ret = getuid();
                 return 0;
         }
 
-        return get_process_id(pid, "Uid:", uid);
+        return get_process_id(pid, "Uid:", ret);
 }
 
-int get_process_gid(pid_t pid, gid_t *gid) {
+int get_process_gid(pid_t pid, gid_t *ret) {
 
         if (pid == 0 || pid == getpid_cached()) {
-                *gid = getgid();
+                *ret = getgid();
                 return 0;
         }
 
         assert_cc(sizeof(uid_t) == sizeof(gid_t));
-        return get_process_id(pid, "Gid:", gid);
+        return get_process_id(pid, "Gid:", ret);
 }
 
-int get_process_cwd(pid_t pid, char **cwd) {
-        const char *p;
-
+int get_process_cwd(pid_t pid, char **ret) {
         assert(pid >= 0);
 
         if (pid == 0 || pid == getpid_cached())
-                return safe_getcwd(cwd);
+                return safe_getcwd(ret);
 
-        p = procfs_file_alloca(pid, "cwd");
-
-        return get_process_link_contents(p, cwd);
+        return get_process_link_contents(pid, "cwd", ret);
 }
 
-int get_process_root(pid_t pid, char **root) {
-        const char *p;
-
+int get_process_root(pid_t pid, char **ret) {
         assert(pid >= 0);
-
-        p = procfs_file_alloca(pid, "root");
-
-        return get_process_link_contents(p, root);
+        return get_process_link_contents(pid, "root", ret);
 }
 
 #define ENVIRONMENT_BLOCK_MAX (5U*1024U*1024U)
 
-int get_process_environ(pid_t pid, char **env) {
+int get_process_environ(pid_t pid, char **ret) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *outcome = NULL;
         size_t sz = 0;
@@ -606,7 +493,7 @@
         int r;
 
         assert(pid >= 0);
-        assert(env);
+        assert(ret);
 
         p = procfs_file_alloca(pid, "environ");
 
@@ -638,14 +525,14 @@
         }
 
         outcome[sz] = '\0';
-        *env = TAKE_PTR(outcome);
+        *ret = TAKE_PTR(outcome);
 
         return 0;
 }
 
 int get_process_ppid(pid_t pid, pid_t *ret) {
         _cleanup_free_ char *line = NULL;
-        long unsigned ppid;
+        unsigned long ppid;
         const char *p;
         int r;
 
@@ -688,7 +575,7 @@
         if (ppid == 0)
                 return -EADDRNOTAVAIL;
 
-        if ((pid_t) ppid < 0 || (long unsigned) (pid_t) ppid != ppid)
+        if ((pid_t) ppid < 0 || (unsigned long) (pid_t) ppid != ppid)
                 return -ERANGE;
 
         if (ret)
@@ -697,21 +584,23 @@
         return 0;
 }
 
-int get_process_umask(pid_t pid, mode_t *umask) {
+int get_process_umask(pid_t pid, mode_t *ret) {
         _cleanup_free_ char *m = NULL;
         const char *p;
         int r;
 
-        assert(umask);
         assert(pid >= 0);
+        assert(ret);
 
         p = procfs_file_alloca(pid, "status");
 
         r = get_proc_field(p, "Umask", WHITESPACE, &m);
         if (r == -ENOENT)
                 return -ESRCH;
+        if (r < 0)
+                return r;
 
-        return parse_mode(m, umask);
+        return parse_mode(m, ret);
 }
 
 int wait_for_terminate(pid_t pid, siginfo_t *status) {
@@ -819,19 +708,18 @@
         for (;;) {
                 usec_t n;
                 siginfo_t status = {};
-                struct timespec ts;
 
                 n = now(CLOCK_MONOTONIC);
                 if (n >= until)
                         break;
 
-                r = sigtimedwait(&mask, NULL, timespec_store(&ts, until - n)) < 0 ? -errno : 0;
+                r = RET_NERRNO(sigtimedwait(&mask, NULL, TIMESPEC_STORE(until - n)));
                 /* Assuming we woke due to the child exiting. */
                 if (waitid(P_PID, pid, &status, WEXITED|WNOHANG) == 0) {
                         if (status.si_pid == pid) {
                                 /* This is the correct child. */
                                 if (status.si_code == CLD_EXITED)
-                                        return (status.si_status == 0) ? 0 : -EPROTO;
+                                        return status.si_status == 0 ? 0 : -EPROTO;
                                 else
                                         return -EPROTO;
                         }
@@ -880,10 +768,27 @@
         (void) wait_for_terminate(pid, NULL);
 }
 
+void sigkill_nowait(pid_t pid) {
+        assert(pid > 1);
+
+        (void) kill(pid, SIGKILL);
+}
+
+void sigkill_nowaitp(pid_t *pid) {
+        PROTECT_ERRNO;
+
+        if (!pid)
+                return;
+        if (*pid <= 1)
+                return;
+
+        sigkill_nowait(*pid);
+}
+
 int kill_and_sigcont(pid_t pid, int sig) {
         int r;
 
-        r = kill(pid, sig) < 0 ? -errno : 0;
+        r = RET_NERRNO(kill(pid, sig));
 
         /* If this worked, also send SIGCONT, unless we already just sent a SIGCONT, or SIGKILL was sent which isn't
          * affected by a process being suspended anyway. */
@@ -1037,36 +942,12 @@
         return cached > 0;
 }
 
-_noreturn_ void freeze(void) {
-
-        log_close();
-
-        /* Make sure nobody waits for us on a socket anymore */
-        (void) close_all_fds(NULL, 0);
-
-        sync();
-
-        /* Let's not freeze right away, but keep reaping zombies. */
-        for (;;) {
-                int r;
-                siginfo_t si = {};
-
-                r = waitid(P_ALL, 0, &si, WEXITED);
-                if (r < 0 && errno != EINTR)
-                        break;
-        }
-
-        /* waitid() failed with an unexpected error, things are really borked. Freeze now! */
-        for (;;)
-                pause();
-}
-
 bool oom_score_adjust_is_valid(int oa) {
         return oa >= OOM_SCORE_ADJ_MIN && oa <= OOM_SCORE_ADJ_MAX;
 }
 
 unsigned long personality_from_string(const char *p) {
-        int architecture;
+        Architecture architecture;
 
         if (!p)
                 return PERSONALITY_INVALID;
@@ -1081,8 +962,8 @@
 
         if (architecture == native_architecture())
                 return PER_LINUX;
-#ifdef SECONDARY_ARCHITECTURE
-        if (architecture == SECONDARY_ARCHITECTURE)
+#ifdef ARCHITECTURE_SECONDARY
+        if (architecture == ARCHITECTURE_SECONDARY)
                 return PER_LINUX32;
 #endif
 
@@ -1090,13 +971,13 @@
 }
 
 const char* personality_to_string(unsigned long p) {
-        int architecture = _ARCHITECTURE_INVALID;
+        Architecture architecture = _ARCHITECTURE_INVALID;
 
         if (p == PER_LINUX)
                 architecture = native_architecture();
-#ifdef SECONDARY_ARCHITECTURE
+#ifdef ARCHITECTURE_SECONDARY
         else if (p == PER_LINUX32)
-                architecture = SECONDARY_ARCHITECTURE;
+                architecture = ARCHITECTURE_SECONDARY;
 #endif
 
         if (architecture < 0)
@@ -1168,23 +1049,6 @@
         return CMP(*a, *b);
 }
 
-int ioprio_parse_priority(const char *s, int *ret) {
-        int i, r;
-
-        assert(s);
-        assert(ret);
-
-        r = safe_atoi(s, &i);
-        if (r < 0)
-                return r;
-
-        if (!ioprio_priority_is_valid(i))
-                return -EINVAL;
-
-        *ret = i;
-        return 0;
-}
-
 /* The cached PID, possible values:
  *
  *     == UNSET [0]  → cache not initialized yet
@@ -1202,15 +1066,9 @@
         cached_pid = CACHED_PID_UNSET;
 }
 
-/* We use glibc __register_atfork() + __dso_handle directly here, as they are not included in the glibc
- * headers. __register_atfork() is mostly equivalent to pthread_atfork(), but doesn't require us to link against
- * libpthread, as it is part of glibc anyway. */
-extern int __register_atfork(void (*prepare) (void), void (*parent) (void), void (*child) (void), void *dso_handle);
-extern void* __dso_handle _weak_;
-
 pid_t getpid_cached(void) {
         static bool installed = false;
-        pid_t current_value;
+        pid_t current_value = CACHED_PID_UNSET;
 
         /* getpid_cached() is much like getpid(), but caches the value in local memory, to avoid having to invoke a
          * system call each time. This restores glibc behaviour from before 2.24, when getpid() was unconditionally
@@ -1221,7 +1079,13 @@
          * https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c579f48edba88380635ab98cb612030e3ed8691e
          */
 
-        current_value = __sync_val_compare_and_swap(&cached_pid, CACHED_PID_UNSET, CACHED_PID_BUSY);
+        __atomic_compare_exchange_n(
+                        &cached_pid,
+                        &current_value,
+                        CACHED_PID_BUSY,
+                        false,
+                        __ATOMIC_SEQ_CST,
+                        __ATOMIC_SEQ_CST);
 
         switch (current_value) {
 
@@ -1235,7 +1099,7 @@
                          * only half-documented (glibc doesn't document it but LSB does — though only superficially)
                          * we'll check for errors only in the most generic fashion possible. */
 
-                        if (__register_atfork(NULL, NULL, reset_cached_pid, __dso_handle) != 0) {
+                        if (pthread_atfork(NULL, NULL, reset_cached_pid) != 0) {
                                 /* OOM? Let's try again later */
                                 cached_pid = CACHED_PID_UNSET;
                                 return new_pid;
@@ -1322,7 +1186,7 @@
         else
                 pid = fork();
         if (pid < 0)
-                return log_full_errno(prio, errno, "Failed to fork: %m");
+                return log_full_errno(prio, errno, "Failed to fork off '%s': %m", strna(name));
         if (pid > 0) {
                 /* We are in the parent process */
 
@@ -1358,6 +1222,7 @@
                 /* Close the logs if requested, before we log anything. And make sure we reopen it if needed. */
                 log_close();
                 log_set_open_when_needed(true);
+                log_settle_target();
         }
 
         if (name) {
@@ -1409,15 +1274,26 @@
         }
 
         if (FLAGS_SET(flags, FORK_NEW_MOUNTNS | FORK_MOUNTNS_SLAVE)) {
-
                 /* Optionally, make sure we never propagate mounts to the host. */
-
                 if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) < 0) {
                         log_full_errno(prio, errno, "Failed to remount root directory as MS_SLAVE: %m");
                         _exit(EXIT_FAILURE);
                 }
         }
 
+        if (FLAGS_SET(flags, FORK_PRIVATE_TMP)) {
+                assert(FLAGS_SET(flags, FORK_NEW_MOUNTNS));
+
+                /* Optionally, overmount new tmpfs instance on /tmp/. */
+                r = mount_nofollow("tmpfs", "/tmp", "tmpfs",
+                                   MS_NOSUID|MS_NODEV,
+                                   "mode=01777" TMPFS_LIMITS_RUN);
+                if (r < 0) {
+                        log_full_errno(prio, r, "Failed to overmount /tmp/: %m");
+                        _exit(EXIT_FAILURE);
+                }
+        }
+
         if (flags & FORK_CLOSE_ALL_FDS) {
                 /* Close the logs here in case it got reopened above, as close_all_fds() would close them for us */
                 log_close();
@@ -1429,6 +1305,14 @@
                 }
         }
 
+        if (flags & FORK_CLOEXEC_OFF) {
+                r = fd_cloexec_many(except_fds, n_except_fds, false);
+                if (r < 0) {
+                        log_full_errno(prio, r, "Failed to turn off O_CLOEXEC on file descriptors: %m");
+                        _exit(EXIT_FAILURE);
+                }
+        }
+
         /* When we were asked to reopen the logs, do so again now */
         if (flags & FORK_REOPEN_LOG) {
                 log_open();
@@ -1517,91 +1401,33 @@
         return 1;
 }
 
-int fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret_pid, const char *path, ...) {
-        bool stdout_is_tty, stderr_is_tty;
-        size_t n, i;
-        va_list ap;
-        char **l;
-        int r;
-
-        assert(path);
-
-        /* Spawns a temporary TTY agent, making sure it goes away when we go away */
-
-        r = safe_fork_full(name,
-                           except,
-                           n_except,
-                           FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_CLOSE_ALL_FDS|FORK_REOPEN_LOG,
-                           ret_pid);
-        if (r < 0)
-                return r;
-        if (r > 0)
-                return 0;
-
-        /* In the child: */
-
-        stdout_is_tty = isatty(STDOUT_FILENO);
-        stderr_is_tty = isatty(STDERR_FILENO);
-
-        if (!stdout_is_tty || !stderr_is_tty) {
-                int fd;
-
-                /* Detach from stdout/stderr. and reopen
-                 * /dev/tty for them. This is important to
-                 * ensure that when systemctl is started via
-                 * popen() or a similar call that expects to
-                 * read EOF we actually do generate EOF and
-                 * not delay this indefinitely by because we
-                 * keep an unused copy of stdin around. */
-                fd = open("/dev/tty", O_WRONLY);
-                if (fd < 0) {
-                        log_error_errno(errno, "Failed to open /dev/tty: %m");
-                        _exit(EXIT_FAILURE);
-                }
-
-                if (!stdout_is_tty && dup2(fd, STDOUT_FILENO) < 0) {
-                        log_error_errno(errno, "Failed to dup2 /dev/tty: %m");
-                        _exit(EXIT_FAILURE);
-                }
-
-                if (!stderr_is_tty && dup2(fd, STDERR_FILENO) < 0) {
-                        log_error_errno(errno, "Failed to dup2 /dev/tty: %m");
-                        _exit(EXIT_FAILURE);
-                }
-
-                safe_close_above_stdio(fd);
-        }
-
-        (void) rlimit_nofile_safe();
-
-        /* Count arguments */
-        va_start(ap, path);
-        for (n = 0; va_arg(ap, char*); n++)
-                ;
-        va_end(ap);
-
-        /* Allocate strv */
-        l = newa(char*, n + 1);
-
-        /* Fill in arguments */
-        va_start(ap, path);
-        for (i = 0; i <= n; i++)
-                l[i] = va_arg(ap, char*);
-        va_end(ap);
-
-        execv(path, l);
-        _exit(EXIT_FAILURE);
-}
-
 int set_oom_score_adjust(int value) {
         char t[DECIMAL_STR_MAX(int)];
 
-        sprintf(t, "%i", value);
+        xsprintf(t, "%i", value);
 
         return write_string_file("/proc/self/oom_score_adj", t,
                                  WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_DISABLE_BUFFER);
 }
 
+int get_oom_score_adjust(int *ret) {
+        _cleanup_free_ char *t = NULL;
+        int r, a;
+
+        r = read_virtual_file("/proc/self/oom_score_adj", SIZE_MAX, &t, NULL);
+        if (r < 0)
+                return r;
+
+        delete_trailing_chars(t, WHITESPACE);
+
+        assert_se(safe_atoi(t, &a) >= 0);
+        assert_se(oom_score_adjust_is_valid(a));
+
+        if (ret)
+                *ret = a;
+        return 0;
+}
+
 int pidfd_get_pid(int fd, pid_t *ret) {
         char path[STRLEN("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)];
         _cleanup_free_ char *fdinfo = NULL;
@@ -1634,6 +1460,20 @@
         return parse_pid(p, ret);
 }
 
+int pidfd_verify_pid(int pidfd, pid_t pid) {
+        pid_t current_pid;
+        int r;
+
+        assert(pidfd >= 0);
+        assert(pid > 0);
+
+        r = pidfd_get_pid(pidfd, &current_pid);
+        if (r < 0)
+                return r;
+
+        return current_pid != pid ? -ESRCH : 0;
+}
+
 static int rlimit_to_nice(rlim_t limit) {
         if (limit <= 1)
                 return PRIO_MAX-1; /* i.e. 19 */
@@ -1690,25 +1530,27 @@
         return 0;
 }
 
-bool invoked_as(char *argv[], const char *token) {
-        if (!argv || isempty(argv[0]))
-                return false;
+_noreturn_ void freeze(void) {
+        log_close();
 
-        if (isempty(token))
-                return false;
+        /* Make sure nobody waits for us (i.e. on one of our sockets) anymore. Note that we use
+         * close_all_fds_without_malloc() instead of plain close_all_fds() here, since we want this function
+         * to be compatible with being called from signal handlers. */
+        (void) close_all_fds_without_malloc(NULL, 0);
 
-        return strstr(last_path_component(argv[0]), token);
+        /* Let's not freeze right away, but keep reaping zombies. */
+        for (;;) {
+                siginfo_t si = {};
+
+                if (waitid(P_ALL, 0, &si, WEXITED) < 0 && errno != EINTR)
+                        break;
+        }
+
+        /* waitid() failed with an unexpected error, things are really borked. Freeze now! */
+        for (;;)
+                pause();
 }
 
-static const char *const ioprio_class_table[] = {
-        [IOPRIO_CLASS_NONE] = "none",
-        [IOPRIO_CLASS_RT] = "realtime",
-        [IOPRIO_CLASS_BE] = "best-effort",
-        [IOPRIO_CLASS_IDLE] = "idle",
-};
-
-DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ioprio_class, int, IOPRIO_N_CLASSES);
-
 static const char *const sigchld_code_table[] = {
         [CLD_EXITED] = "exited",
         [CLD_KILLED] = "killed",
diff --git a/src/basic/process-util.h b/src/basic/process-util.h
index 0e064de..96da0bb 100644
--- a/src/basic/process-util.h
+++ b/src/basic/process-util.h
@@ -13,7 +13,6 @@
 
 #include "alloc-util.h"
 #include "format-util.h"
-#include "ioprio.h"
 #include "macro.h"
 #include "time-util.h"
 
@@ -39,17 +38,19 @@
         PROCESS_CMDLINE_QUOTE_POSIX   = 1 << 3,
 } ProcessCmdlineFlags;
 
-int get_process_comm(pid_t pid, char **name);
-int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags, char **line);
-int get_process_exe(pid_t pid, char **name);
-int get_process_uid(pid_t pid, uid_t *uid);
-int get_process_gid(pid_t pid, gid_t *gid);
-int get_process_capeff(pid_t pid, char **capeff);
-int get_process_cwd(pid_t pid, char **cwd);
-int get_process_root(pid_t pid, char **root);
-int get_process_environ(pid_t pid, char **environ);
-int get_process_ppid(pid_t pid, pid_t *ppid);
-int get_process_umask(pid_t pid, mode_t *umask);
+int get_process_comm(pid_t pid, char **ret);
+int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags, char **ret);
+int get_process_exe(pid_t pid, char **ret);
+int get_process_uid(pid_t pid, uid_t *ret);
+int get_process_gid(pid_t pid, gid_t *ret);
+int get_process_capeff(pid_t pid, char **ret);
+int get_process_cwd(pid_t pid, char **ret);
+int get_process_root(pid_t pid, char **ret);
+int get_process_environ(pid_t pid, char **ret);
+int get_process_ppid(pid_t pid, pid_t *ret);
+int get_process_umask(pid_t pid, mode_t *ret);
+
+int container_get_leader(const char *machine, pid_t *pid);
 
 int wait_for_terminate(pid_t pid, siginfo_t *status);
 
@@ -67,10 +68,11 @@
 void sigkill_wait(pid_t pid);
 void sigkill_waitp(pid_t *pid);
 void sigterm_wait(pid_t pid);
+void sigkill_nowait(pid_t pid);
+void sigkill_nowaitp(pid_t *pid);
 
 int kill_and_sigcont(pid_t pid, int sig);
 
-int rename_process(const char name[]);
 int is_kernel_thread(pid_t pid);
 
 int getenv_for_pid(pid_t pid, const char *field, char **_value);
@@ -82,8 +84,6 @@
 
 bool is_main_thread(void);
 
-_noreturn_ void freeze(void);
-
 bool oom_score_adjust_is_valid(int oa);
 
 #ifndef PERSONALITY_INVALID
@@ -99,9 +99,6 @@
 int safe_personality(unsigned long p);
 int opinionated_personality(unsigned long *ret);
 
-int ioprio_class_to_string_alloc(int i, char **s);
-int ioprio_class_from_string(const char *s);
-
 const char *sigchld_code_to_string(int i) _const_;
 int sigchld_code_from_string(const char *s) _pure_;
 
@@ -132,20 +129,10 @@
         return i >= 0 && i <= sched_get_priority_max(SCHED_RR);
 }
 
-static inline bool ioprio_class_is_valid(int i) {
-        return IN_SET(i, IOPRIO_CLASS_NONE, IOPRIO_CLASS_RT, IOPRIO_CLASS_BE, IOPRIO_CLASS_IDLE);
-}
-
-static inline bool ioprio_priority_is_valid(int i) {
-        return i >= 0 && i < IOPRIO_BE_NR;
-}
-
 static inline bool pid_is_valid(pid_t p) {
         return p > 0;
 }
 
-int ioprio_parse_priority(const char *s, int *ret);
-
 pid_t getpid_cached(void);
 void reset_cached_pid(void);
 
@@ -162,10 +149,12 @@
         FORK_WAIT               = 1 <<  7, /* Wait until child exited */
         FORK_NEW_MOUNTNS        = 1 <<  8, /* Run child in its own mount namespace */
         FORK_MOUNTNS_SLAVE      = 1 <<  9, /* Make child's mount namespace MS_SLAVE */
-        FORK_RLIMIT_NOFILE_SAFE = 1 << 10, /* Set RLIMIT_NOFILE soft limit to 1K for select() compat */
-        FORK_STDOUT_TO_STDERR   = 1 << 11, /* Make stdout a copy of stderr */
-        FORK_FLUSH_STDIO        = 1 << 12, /* fflush() stdout (and stderr) before forking */
-        FORK_NEW_USERNS         = 1 << 13, /* Run child in its own user namespace */
+        FORK_PRIVATE_TMP        = 1 << 10, /* Mount new /tmp/ in the child (combine with FORK_NEW_MOUNTNS!) */
+        FORK_RLIMIT_NOFILE_SAFE = 1 << 11, /* Set RLIMIT_NOFILE soft limit to 1K for select() compat */
+        FORK_STDOUT_TO_STDERR   = 1 << 12, /* Make stdout a copy of stderr */
+        FORK_FLUSH_STDIO        = 1 << 13, /* fflush() stdout (and stderr) before forking */
+        FORK_NEW_USERNS         = 1 << 14, /* Run child in its own user namespace */
+        FORK_CLOEXEC_OFF        = 1 << 15, /* In the child: turn off O_CLOEXEC on all fds in except_fds[] */
 } ForkFlags;
 
 int safe_fork_full(const char *name, const int except_fds[], size_t n_except_fds, ForkFlags flags, pid_t *ret_pid);
@@ -176,9 +165,8 @@
 
 int namespace_fork(const char *outer_name, const char *inner_name, const int except_fds[], size_t n_except_fds, ForkFlags flags, int pidns_fd, int mntns_fd, int netns_fd, int userns_fd, int root_fd, pid_t *ret_pid);
 
-int fork_agent(const char *name, const int except[], size_t n_except, pid_t *pid, const char *path, ...) _sentinel_;
-
 int set_oom_score_adjust(int value);
+int get_oom_score_adjust(int *ret);
 
 /* The highest possibly (theoretic) pid_t value on this architecture. */
 #define PID_T_MAX ((pid_t) INT32_MAX)
@@ -192,16 +180,12 @@
 
 assert_cc(TASKS_MAX <= (unsigned long) PID_T_MAX);
 
-/* Like TAKE_PTR() but for child PIDs, resetting them to 0 */
-#define TAKE_PID(pid)                           \
-        ({                                      \
-                pid_t _pid_ = (pid);            \
-                (pid) = 0;                      \
-                _pid_;                          \
-        })
+/* Like TAKE_PTR() but for pid_t, resetting them to 0 */
+#define TAKE_PID(pid) TAKE_GENERIC(pid, pid_t, 0)
 
 int pidfd_get_pid(int fd, pid_t *ret);
+int pidfd_verify_pid(int pidfd, pid_t pid);
 
 int setpriority_closest(int priority);
 
-bool invoked_as(char *argv[], const char *token);
+_noreturn_ void freeze(void);
diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
index 9234cca..bcba5a5 100644
--- a/src/basic/procfs-util.c
+++ b/src/basic/procfs-util.c
@@ -1,9 +1,10 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
+#include <unistd.h>
 
 #include "alloc-util.h"
-#include "def.h"
+#include "constants.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "parse-util.h"
@@ -12,54 +13,34 @@
 #include "stdio-util.h"
 #include "string-util.h"
 
-int procfs_tasks_get_limit(uint64_t *ret) {
+int procfs_get_pid_max(uint64_t *ret) {
         _cleanup_free_ char *value = NULL;
-        uint64_t pid_max, threads_max;
         int r;
 
         assert(ret);
 
-        /* So there are two sysctl files that control the system limit of processes:
-         *
-         * 1. kernel.threads-max: this is probably the sysctl that makes more sense, as it directly puts a limit on
-         *    concurrent tasks.
-         *
-         * 2. kernel.pid_max: this limits the numeric range PIDs can take, and thus indirectly also limits the number
-         *    of concurrent threads. AFAICS it's primarily a compatibility concept: some crappy old code used a signed
-         *    16bit type for PIDs, hence the kernel provides a way to ensure the PIDs never go beyond INT16_MAX by
-         *    default.
-         *
-         * By default #2 is set to much lower values than #1, hence the limit people come into contact with first, as
-         * it's the lowest boundary they need to bump when they want higher number of processes.
-         *
-         * Also note the weird definition of #2: PIDs assigned will be kept below this value, which means the number of
-         * tasks that can be created is one lower, as PID 0 is not a valid process ID. */
-
         r = read_one_line_file("/proc/sys/kernel/pid_max", &value);
         if (r < 0)
                 return r;
 
-        r = safe_atou64(value, &pid_max);
-        if (r < 0)
-                return r;
+        return safe_atou64(value, ret);
+}
 
-        value = mfree(value);
+int procfs_get_threads_max(uint64_t *ret) {
+        _cleanup_free_ char *value = NULL;
+        int r;
+
+        assert(ret);
+
         r = read_one_line_file("/proc/sys/kernel/threads-max", &value);
         if (r < 0)
                 return r;
 
-        r = safe_atou64(value, &threads_max);
-        if (r < 0)
-                return r;
-
-        /* Subtract one from pid_max, since PID 0 is not a valid PID */
-        *ret = MIN(pid_max-1, threads_max);
-        return 0;
+        return safe_atou64(value, ret);
 }
 
 int procfs_tasks_set_limit(uint64_t limit) {
         char buffer[DECIMAL_STR_MAX(uint64_t)+1];
-        _cleanup_free_ char *value = NULL;
         uint64_t pid_max;
         int r;
 
@@ -74,10 +55,7 @@
          * set it to the maximum. */
         limit = CLAMP(limit, 20U, TASKS_MAX);
 
-        r = read_one_line_file("/proc/sys/kernel/pid_max", &value);
-        if (r < 0)
-                return r;
-        r = safe_atou64(value, &pid_max);
+        r = procfs_get_pid_max(&pid_max);
         if (r < 0)
                 return r;
 
@@ -98,14 +76,10 @@
                 /* Hmm, we couldn't write this? If so, maybe it was already set properly? In that case let's not
                  * generate an error */
 
-                value = mfree(value);
-                if (read_one_line_file("/proc/sys/kernel/threads-max", &value) < 0)
+                if (procfs_get_threads_max(&threads_max) < 0)
                         return r; /* return original error */
 
-                if (safe_atou64(value, &threads_max) < 0)
-                        return r; /* return original error */
-
-                if (MIN(pid_max-1, threads_max) != limit)
+                if (MIN(pid_max - 1, threads_max) != limit)
                         return r; /* return original error */
 
                 /* Yay! Value set already matches what we were trying to set, hence consider this a success. */
@@ -134,7 +108,7 @@
 
         p++;
         n = strspn(p, DIGITS);
-        nr = strndupa(p, n);
+        nr = strndupa_safe(p, n);
 
         return safe_atou64(nr, ret);
 }
@@ -245,7 +219,7 @@
 }
 
 int procfs_memory_get(uint64_t *ret_total, uint64_t *ret_used) {
-        uint64_t mem_total = UINT64_MAX, mem_free = UINT64_MAX;
+        uint64_t mem_total = UINT64_MAX, mem_available = UINT64_MAX;
         _cleanup_fclose_ FILE *f = NULL;
         int r;
 
@@ -268,9 +242,9 @@
                 if (p)
                         v = &mem_total;
                 else {
-                        p = first_word(line, "MemFree:");
+                        p = first_word(line, "MemAvailable:");
                         if (p)
-                                v = &mem_free;
+                                v = &mem_available;
                         else
                                 continue;
                 }
@@ -279,16 +253,16 @@
                 if (r < 0)
                         return r;
 
-                if (mem_total != UINT64_MAX && mem_free != UINT64_MAX)
+                if (mem_total != UINT64_MAX && mem_available != UINT64_MAX)
                         break;
         }
 
-        if (mem_free > mem_total)
+        if (mem_available > mem_total)
                 return -EINVAL;
 
         if (ret_total)
                 *ret_total = mem_total;
         if (ret_used)
-                *ret_used = mem_total - mem_free;
+                *ret_used = mem_total - mem_available;
         return 0;
 }
diff --git a/src/basic/procfs-util.h b/src/basic/procfs-util.h
index 61fa71d..eb8c773 100644
--- a/src/basic/procfs-util.h
+++ b/src/basic/procfs-util.h
@@ -5,7 +5,9 @@
 
 #include "time-util.h"
 
-int procfs_tasks_get_limit(uint64_t *ret);
+int procfs_get_pid_max(uint64_t *ret);
+int procfs_get_threads_max(uint64_t *ret);
+
 int procfs_tasks_set_limit(uint64_t limit);
 int procfs_tasks_get_current(uint64_t *ret);
 
diff --git a/src/basic/random-util.c b/src/basic/random-util.c
index e117330..98bcc74 100644
--- a/src/basic/random-util.c
+++ b/src/basic/random-util.c
@@ -1,9 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#if defined(__i386__) || defined(__x86_64__)
-#include <cpuid.h>
-#endif
-
 #include <elf.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -28,404 +24,144 @@
 #include "io-util.h"
 #include "missing_random.h"
 #include "missing_syscall.h"
+#include "missing_threads.h"
 #include "parse-util.h"
 #include "random-util.h"
-#include "siphash24.h"
+#include "sha256.h"
 #include "time-util.h"
 
-static bool srand_called = false;
-
-int rdrand(unsigned long *ret) {
-
-        /* So, you are a "security researcher", and you wonder why we bother with using raw RDRAND here,
-         * instead of sticking to /dev/urandom or getrandom()?
-         *
-         * Here's why: early boot. On Linux, during early boot the random pool that backs /dev/urandom and
-         * getrandom() is generally not initialized yet. It is very common that initialization of the random
-         * pool takes a longer time (up to many minutes), in particular on embedded devices that have no
-         * explicit hardware random generator, as well as in virtualized environments such as major cloud
-         * installations that do not provide virtio-rng or a similar mechanism.
-         *
-         * In such an environment using getrandom() synchronously means we'd block the entire system boot-up
-         * until the pool is initialized, i.e. *very* long. Using getrandom() asynchronously (GRND_NONBLOCK)
-         * would mean acquiring randomness during early boot would simply fail. Using /dev/urandom would mean
-         * generating many kmsg log messages about our use of it before the random pool is properly
-         * initialized. Neither of these outcomes is desirable.
-         *
-         * Thus, for very specific purposes we use RDRAND instead of either of these three options. RDRAND
-         * provides us quickly and relatively reliably with random values, without having to delay boot,
-         * without triggering warning messages in kmsg.
-         *
-         * Note that we use RDRAND only under very specific circumstances, when the requirements on the
-         * quality of the returned entropy permit it. Specifically, here are some cases where we *do* use
-         * RDRAND:
-         *
-         *         • UUID generation: UUIDs are supposed to be universally unique but are not cryptographic
-         *           key material. The quality and trust level of RDRAND should hence be OK: UUIDs should be
-         *           generated in a way that is reliably unique, but they do not require ultimate trust into
-         *           the entropy generator. systemd generates a number of UUIDs during early boot, including
-         *           'invocation IDs' for every unit spawned that identify the specific invocation of the
-         *           service globally, and a number of others. Other alternatives for generating these UUIDs
-         *           have been considered, but don't really work: for example, hashing uuids from a local
-         *           system identifier combined with a counter falls flat because during early boot disk
-         *           storage is not yet available (think: initrd) and thus a system-specific ID cannot be
-         *           stored or retrieved yet.
-         *
-         *         • Hash table seed generation: systemd uses many hash tables internally. Hash tables are
-         *           generally assumed to have O(1) access complexity, but can deteriorate to prohibitive
-         *           O(n) access complexity if an attacker manages to trigger a large number of hash
-         *           collisions. Thus, systemd (as any software employing hash tables should) uses seeded
-         *           hash functions for its hash tables, with a seed generated randomly. The hash tables
-         *           systemd employs watch the fill level closely and reseed if necessary. This allows use of
-         *           a low quality RNG initially, as long as it improves should a hash table be under attack:
-         *           the attacker after all needs to trigger many collisions to exploit it for the purpose
-         *           of DoS, but if doing so improves the seed the attack surface is reduced as the attack
-         *           takes place.
-         *
-         * Some cases where we do NOT use RDRAND are:
-         *
-         *         • Generation of cryptographic key material 🔑
-         *
-         *         • Generation of cryptographic salt values 🧂
-         *
-         * This function returns:
-         *
-         *         -EOPNOTSUPP → RDRAND is not available on this system 😔
-         *         -EAGAIN     → The operation failed this time, but is likely to work if you try again a few
-         *                       times ♻
-         *         -EUCLEAN    → We got some random value, but it looked strange, so we refused using it.
-         *                       This failure might or might not be temporary. 😕
-         */
-
-#if defined(__i386__) || defined(__x86_64__)
-        static int have_rdrand = -1;
-        unsigned long v;
-        uint8_t success;
-
-        if (have_rdrand < 0) {
-                uint32_t eax, ebx, ecx, edx;
-
-                /* Check if RDRAND is supported by the CPU */
-                if (__get_cpuid(1, &eax, &ebx, &ecx, &edx) == 0) {
-                        have_rdrand = false;
-                        return -EOPNOTSUPP;
-                }
-
-/* Compat with old gcc where bit_RDRND didn't exist yet */
-#ifndef bit_RDRND
-#define bit_RDRND (1U << 30)
-#endif
-
-                have_rdrand = !!(ecx & bit_RDRND);
-
-                if (have_rdrand > 0) {
-                        /* Allow disabling use of RDRAND with SYSTEMD_RDRAND=0
-                           If it is unset getenv_bool_secure will return a negative value. */
-                        if (getenv_bool_secure("SYSTEMD_RDRAND") == 0) {
-                                have_rdrand = false;
-                                return -EOPNOTSUPP;
-                        }
-                }
-        }
-
-        if (have_rdrand == 0)
-                return -EOPNOTSUPP;
-
-        asm volatile("rdrand %0;"
-                     "setc %1"
-                     : "=r" (v),
-                       "=qm" (success));
-        msan_unpoison(&success, sizeof(success));
-        if (!success)
-                return -EAGAIN;
-
-        /* Apparently on some AMD CPUs RDRAND will sometimes (after a suspend/resume cycle?) report success
-         * via the carry flag but nonetheless return the same fixed value -1 in all cases. This appears to be
-         * a bad bug in the CPU or firmware. Let's deal with that and work-around this by explicitly checking
-         * for this special value (and also 0, just to be sure) and filtering it out. This is a work-around
-         * only however and something AMD really should fix properly. The Linux kernel should probably work
-         * around this issue by turning off RDRAND altogether on those CPUs. See:
-         * https://github.com/systemd/systemd/issues/11810 */
-        if (v == 0 || v == ULONG_MAX)
-                return log_debug_errno(SYNTHETIC_ERRNO(EUCLEAN),
-                                       "RDRAND returned suspicious value %lx, assuming bad hardware RNG, not using value.", v);
-
-        *ret = v;
-        return 0;
-#else
-        return -EOPNOTSUPP;
-#endif
-}
-
-int genuine_random_bytes(void *p, size_t n, RandomFlags flags) {
-        static int have_syscall = -1;
-        _cleanup_close_ int fd = -1;
-        bool got_some = false;
-
-        /* Gathers some high-quality randomness from the kernel (or potentially mid-quality randomness from
-         * the CPU if the RANDOM_ALLOW_RDRAND flag is set). This call won't block, unless the RANDOM_BLOCK
-         * flag is set. If RANDOM_MAY_FAIL is set, an error is returned if the random pool is not
-         * initialized. Otherwise it will always return some data from the kernel, regardless of whether the
-         * random pool is fully initialized or not. If RANDOM_EXTEND_WITH_PSEUDO is set, and some but not
-         * enough better quality randomness could be acquired, the rest is filled up with low quality
-         * randomness.
-         *
-         * Of course, when creating cryptographic key material you really shouldn't use RANDOM_ALLOW_DRDRAND
-         * or even RANDOM_EXTEND_WITH_PSEUDO.
-         *
-         * When generating UUIDs it's fine to use RANDOM_ALLOW_RDRAND but not OK to use
-         * RANDOM_EXTEND_WITH_PSEUDO. In fact RANDOM_EXTEND_WITH_PSEUDO is only really fine when invoked via
-         * an "all bets are off" wrapper, such as random_bytes(), see below. */
-
-        if (n == 0)
-                return 0;
-
-        if (FLAGS_SET(flags, RANDOM_ALLOW_RDRAND))
-                /* Try x86-64' RDRAND intrinsic if we have it. We only use it if high quality randomness is
-                 * not required, as we don't trust it (who does?). Note that we only do a single iteration of
-                 * RDRAND here, even though the Intel docs suggest calling this in a tight loop of 10
-                 * invocations or so. That's because we don't really care about the quality here. We
-                 * generally prefer using RDRAND if the caller allows us to, since this way we won't upset
-                 * the kernel's random subsystem by accessing it before the pool is initialized (after all it
-                 * will kmsg log about every attempt to do so). */
-                for (;;) {
-                        unsigned long u;
-                        size_t m;
-
-                        if (rdrand(&u) < 0) {
-                                if (got_some && FLAGS_SET(flags, RANDOM_EXTEND_WITH_PSEUDO)) {
-                                        /* Fill in the remaining bytes using pseudo-random values */
-                                        pseudo_random_bytes(p, n);
-                                        return 0;
-                                }
-
-                                /* OK, this didn't work, let's go to getrandom() + /dev/urandom instead */
-                                break;
-                        }
-
-                        m = MIN(sizeof(u), n);
-                        memcpy(p, &u, m);
-
-                        p = (uint8_t*) p + m;
-                        n -= m;
-
-                        if (n == 0)
-                                return 0; /* Yay, success! */
-
-                        got_some = true;
-                }
-
-        /* Use the getrandom() syscall unless we know we don't have it. */
-        if (have_syscall != 0 && !HAS_FEATURE_MEMORY_SANITIZER) {
-
-                for (;;) {
-                        ssize_t l;
-                        l = getrandom(p, n,
-                                      (FLAGS_SET(flags, RANDOM_BLOCK) ? 0 : GRND_NONBLOCK) |
-                                      (FLAGS_SET(flags, RANDOM_ALLOW_INSECURE) ? GRND_INSECURE : 0));
-                        if (l > 0) {
-                                have_syscall = true;
-
-                                if ((size_t) l == n)
-                                        return 0; /* Yay, success! */
-
-                                assert((size_t) l < n);
-                                p = (uint8_t*) p + l;
-                                n -= l;
-
-                                if (FLAGS_SET(flags, RANDOM_EXTEND_WITH_PSEUDO)) {
-                                        /* Fill in the remaining bytes using pseudo-random values */
-                                        pseudo_random_bytes(p, n);
-                                        return 0;
-                                }
-
-                                got_some = true;
-
-                                /* Hmm, we didn't get enough good data but the caller insists on good data? Then try again */
-                                if (FLAGS_SET(flags, RANDOM_BLOCK))
-                                        continue;
-
-                                /* Fill in the rest with /dev/urandom */
-                                break;
-
-                        } else if (l == 0) {
-                                have_syscall = true;
-                                return -EIO;
-
-                        } else if (ERRNO_IS_NOT_SUPPORTED(errno)) {
-                                /* We lack the syscall, continue with reading from /dev/urandom. */
-                                have_syscall = false;
-                                break;
-
-                        } else if (errno == EAGAIN) {
-                                /* The kernel has no entropy whatsoever. Let's remember to use the syscall
-                                 * the next time again though.
-                                 *
-                                 * If RANDOM_MAY_FAIL is set, return an error so that random_bytes() can
-                                 * produce some pseudo-random bytes instead. Otherwise, fall back to
-                                 * /dev/urandom, which we know is empty, but the kernel will produce some
-                                 * bytes for us on a best-effort basis. */
-                                have_syscall = true;
-
-                                if (got_some && FLAGS_SET(flags, RANDOM_EXTEND_WITH_PSEUDO)) {
-                                        /* Fill in the remaining bytes using pseudorandom values */
-                                        pseudo_random_bytes(p, n);
-                                        return 0;
-                                }
-
-                                if (FLAGS_SET(flags, RANDOM_MAY_FAIL))
-                                        return -ENODATA;
-
-                                /* Use /dev/urandom instead */
-                                break;
-
-                        } else if (errno == EINVAL) {
-
-                                /* Most likely: unknown flag. We know that GRND_INSECURE might cause this,
-                                 * hence try without. */
-
-                                if (FLAGS_SET(flags, RANDOM_ALLOW_INSECURE)) {
-                                        flags = flags &~ RANDOM_ALLOW_INSECURE;
-                                        continue;
-                                }
-
-                                return -errno;
-                        } else
-                                return -errno;
-                }
-        }
-
-        fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
-        if (fd < 0)
-                return errno == ENOENT ? -ENOSYS : -errno;
-
-        return loop_read_exact(fd, p, n, true);
-}
-
-static void clear_srand_initialization(void) {
-        srand_called = false;
-}
-
-void initialize_srand(void) {
-        static bool pthread_atfork_registered = false;
-        unsigned x;
-#if HAVE_SYS_AUXV_H
-        const void *auxv;
-#endif
-        unsigned long k;
-
-        if (srand_called)
-                return;
+/* This is a "best effort" kind of thing, but has no real security value.  So, this should only be used by
+ * random_bytes(), which is not meant for crypto. This could be made better, but we're *not* trying to roll a
+ * userspace prng here, or even have forward secrecy, but rather just do the shortest thing that is at least
+ * better than libc rand(). */
+static void fallback_random_bytes(void *p, size_t n) {
+        static thread_local uint64_t fallback_counter = 0;
+        struct {
+                char label[32];
+                uint64_t call_id, block_id;
+                usec_t stamp_mono, stamp_real;
+                pid_t pid, tid;
+                uint8_t auxval[16];
+        } state = {
+                /* Arbitrary domain separation to prevent other usage of AT_RANDOM from clashing. */
+                .label = "systemd fallback random bytes v1",
+                .call_id = fallback_counter++,
+                .stamp_mono = now(CLOCK_MONOTONIC),
+                .stamp_real = now(CLOCK_REALTIME),
+                .pid = getpid(),
+                .tid = gettid(),
+        };
 
 #if HAVE_SYS_AUXV_H
-        /* The kernel provides us with 16 bytes of entropy in auxv, so let's try to make use of that to seed
-         * the pseudo-random generator. It's better than nothing... But let's first hash it to make it harder
-         * to recover the original value by watching any pseudo-random bits we generate. After all the
-         * AT_RANDOM data might be used by other stuff too (in particular: ASLR), and we probably shouldn't
-         * leak the seed for that. */
-
-        auxv = ULONG_TO_PTR(getauxval(AT_RANDOM));
-        if (auxv) {
-                static const uint8_t auxval_hash_key[16] = {
-                        0x92, 0x6e, 0xfe, 0x1b, 0xcf, 0x00, 0x52, 0x9c, 0xcc, 0x42, 0xcf, 0xdc, 0x94, 0x1f, 0x81, 0x0f
-                };
-
-                x = (unsigned) siphash24(auxv, 16, auxval_hash_key);
-        } else
-#endif
-                x = 0;
-
-        x ^= (unsigned) now(CLOCK_REALTIME);
-        x ^= (unsigned) gettid();
-
-        if (rdrand(&k) >= 0)
-                x ^= (unsigned) k;
-
-        srand(x);
-        srand_called = true;
-
-        if (!pthread_atfork_registered) {
-                (void) pthread_atfork(NULL, NULL, clear_srand_initialization);
-                pthread_atfork_registered = true;
-        }
-}
-
-/* INT_MAX gives us only 31 bits, so use 24 out of that. */
-#if RAND_MAX >= INT_MAX
-assert_cc(RAND_MAX >= 16777215);
-#  define RAND_STEP 3
-#else
-/* SHORT_INT_MAX or lower gives at most 15 bits, we just use 8 out of that. */
-assert_cc(RAND_MAX >= 255);
-#  define RAND_STEP 1
+        memcpy(state.auxval, ULONG_TO_PTR(getauxval(AT_RANDOM)), sizeof(state.auxval));
 #endif
 
-void pseudo_random_bytes(void *p, size_t n) {
-        uint8_t *q;
+        while (n > 0) {
+                struct sha256_ctx ctx;
 
-        /* This returns pseudo-random data using libc's rand() function. You probably never want to call this
-         * directly, because why would you use this if you can get better stuff cheaply? Use random_bytes()
-         * instead, see below: it will fall back to this function if there's nothing better to get, but only
-         * then. */
-
-        initialize_srand();
-
-        for (q = p; q < (uint8_t*) p + n; q += RAND_STEP) {
-                unsigned rr;
-
-                rr = (unsigned) rand();
-
-#if RAND_STEP >= 3
-                if ((size_t) (q - (uint8_t*) p + 2) < n)
-                        q[2] = rr >> 16;
-#endif
-#if RAND_STEP >= 2
-                if ((size_t) (q - (uint8_t*) p + 1) < n)
-                        q[1] = rr >> 8;
-#endif
-                q[0] = rr;
+                sha256_init_ctx(&ctx);
+                sha256_process_bytes(&state, sizeof(state), &ctx);
+                if (n < SHA256_DIGEST_SIZE) {
+                        uint8_t partial[SHA256_DIGEST_SIZE];
+                        sha256_finish_ctx(&ctx, partial);
+                        memcpy(p, partial, n);
+                        break;
+                }
+                sha256_finish_ctx(&ctx, p);
+                p = (uint8_t *) p + SHA256_DIGEST_SIZE;
+                n -= SHA256_DIGEST_SIZE;
+                ++state.block_id;
         }
 }
 
 void random_bytes(void *p, size_t n) {
+        static bool have_getrandom = true, have_grndinsecure = true;
+        _cleanup_close_ int fd = -EBADF;
 
-        /* This returns high quality randomness if we can get it cheaply. If we can't because for some reason
-         * it is not available we'll try some crappy fallbacks.
-         *
-         * What this function will do:
-         *
-         *         • This function will preferably use the CPU's RDRAND operation, if it is available, in
-         *           order to return "mid-quality" random values cheaply.
-         *
-         *         • Use getrandom() with GRND_NONBLOCK, to return high-quality random values if they are
-         *           cheaply available.
-         *
-         *         • This function will return pseudo-random data, generated via libc rand() if nothing
-         *           better is available.
-         *
-         *         • This function will work fine in early boot
-         *
-         *         • This function will always succeed
-         *
-         * What this function won't do:
-         *
-         *         • This function will never fail: it will give you randomness no matter what. It might not
-         *           be high quality, but it will return some, possibly generated via libc's rand() call.
-         *
-         *         • This function will never block: if the only way to get good randomness is a blocking,
-         *           synchronous getrandom() we'll instead provide you with pseudo-random data.
-         *
-         * This function is hence great for things like seeding hash tables, generating random numeric UNIX
-         * user IDs (that are checked for collisions before use) and such.
-         *
-         * This function is hence not useful for generating UUIDs or cryptographic key material.
-         */
-
-        if (genuine_random_bytes(p, n, RANDOM_EXTEND_WITH_PSEUDO|RANDOM_MAY_FAIL|RANDOM_ALLOW_RDRAND|RANDOM_ALLOW_INSECURE) >= 0)
+        if (n == 0)
                 return;
 
-        /* If for some reason some user made /dev/urandom unavailable to us, or the kernel has no entropy, use a PRNG instead. */
-        pseudo_random_bytes(p, n);
+        for (;;) {
+                ssize_t l;
+
+                if (!have_getrandom)
+                        break;
+
+                l = getrandom(p, n, have_grndinsecure ? GRND_INSECURE : GRND_NONBLOCK);
+                if (l > 0) {
+                        if ((size_t) l == n)
+                                return; /* Done reading, success. */
+                        p = (uint8_t *) p + l;
+                        n -= l;
+                        continue; /* Interrupted by a signal; keep going. */
+                } else if (l == 0)
+                        break; /* Weird, so fallback to /dev/urandom. */
+                else if (ERRNO_IS_NOT_SUPPORTED(errno)) {
+                        have_getrandom = false;
+                        break; /* No syscall, so fallback to /dev/urandom. */
+                } else if (errno == EINVAL && have_grndinsecure) {
+                        have_grndinsecure = false;
+                        continue; /* No GRND_INSECURE; fallback to GRND_NONBLOCK. */
+                } else if (errno == EAGAIN && !have_grndinsecure)
+                        break; /* Will block, but no GRND_INSECURE, so fallback to /dev/urandom. */
+
+                break; /* Unexpected, so just give up and fallback to /dev/urandom. */
+        }
+
+        fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+        if (fd >= 0 && loop_read_exact(fd, p, n, false) == 0)
+                return;
+
+        /* This is a terrible fallback. Oh well. */
+        fallback_random_bytes(p, n);
+}
+
+int crypto_random_bytes(void *p, size_t n) {
+        static bool have_getrandom = true, seen_initialized = false;
+        _cleanup_close_ int fd = -EBADF;
+
+        if (n == 0)
+                return 0;
+
+        for (;;) {
+                ssize_t l;
+
+                if (!have_getrandom)
+                        break;
+
+                l = getrandom(p, n, 0);
+                if (l > 0) {
+                        if ((size_t) l == n)
+                                return 0; /* Done reading, success. */
+                        p = (uint8_t *) p + l;
+                        n -= l;
+                        continue; /* Interrupted by a signal; keep going. */
+                } else if (l == 0)
+                        return -EIO; /* Weird, should never happen. */
+                else if (ERRNO_IS_NOT_SUPPORTED(errno)) {
+                        have_getrandom = false;
+                        break; /* No syscall, so fallback to /dev/urandom. */
+                }
+                return -errno;
+        }
+
+        if (!seen_initialized) {
+                _cleanup_close_ int ready_fd = -EBADF;
+                int r;
+
+                ready_fd = open("/dev/random", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+                if (ready_fd < 0)
+                        return -errno;
+                r = fd_wait_for_event(ready_fd, POLLIN, USEC_INFINITY);
+                if (r < 0)
+                        return r;
+                seen_initialized = true;
+        }
+
+        fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+        if (fd < 0)
+                return -errno;
+        return loop_read_exact(fd, p, n, false);
 }
 
 size_t random_pool_size(void) {
@@ -452,7 +188,7 @@
 }
 
 int random_write_entropy(int fd, const void *seed, size_t size, bool credit) {
-        _cleanup_close_ int opened_fd = -1;
+        _cleanup_close_ int opened_fd = -EBADF;
         int r;
 
         assert(seed || size == 0);
diff --git a/src/basic/random-util.h b/src/basic/random-util.h
index e6528dd..b1a4d10 100644
--- a/src/basic/random-util.h
+++ b/src/basic/random-util.h
@@ -5,19 +5,8 @@
 #include <stddef.h>
 #include <stdint.h>
 
-typedef enum RandomFlags {
-        RANDOM_EXTEND_WITH_PSEUDO = 1 << 0, /* If we can't get enough genuine randomness, but some, fill up the rest with pseudo-randomness */
-        RANDOM_BLOCK              = 1 << 1, /* Rather block than return crap randomness (only if the kernel supports that) */
-        RANDOM_MAY_FAIL           = 1 << 2, /* If we can't get any randomness at all, return early with -ENODATA */
-        RANDOM_ALLOW_RDRAND       = 1 << 3, /* Allow usage of the CPU RNG */
-        RANDOM_ALLOW_INSECURE     = 1 << 4, /* Allow usage of GRND_INSECURE flag to kernel's getrandom() API */
-} RandomFlags;
-
-int genuine_random_bytes(void *p, size_t n, RandomFlags flags); /* returns "genuine" randomness, optionally filled up with pseudo random, if not enough is available */
-void pseudo_random_bytes(void *p, size_t n);                    /* returns only pseudo-randommess (but possibly seeded from something better) */
-void random_bytes(void *p, size_t n);                           /* returns genuine randomness if cheaply available, and pseudo randomness if not. */
-
-void initialize_srand(void);
+void random_bytes(void *p, size_t n); /* Returns random bytes suitable for most uses, but may be insecure sometimes. */
+int crypto_random_bytes(void *p, size_t n); /* Returns secure random bytes after waiting for the RNG to initialize. */
 
 static inline uint64_t random_u64(void) {
         uint64_t u;
@@ -31,11 +20,10 @@
         return u;
 }
 
-int rdrand(unsigned long *ret);
-
 /* Some limits on the pool sizes when we deal with the kernel random pool */
-#define RANDOM_POOL_SIZE_MIN 512U
+#define RANDOM_POOL_SIZE_MIN 32U
 #define RANDOM_POOL_SIZE_MAX (10U*1024U*1024U)
+#define RANDOM_EFI_SEED_SIZE 32U
 
 size_t random_pool_size(void);
 
diff --git a/src/basic/ratelimit.c b/src/basic/ratelimit.c
index 005bf31..f90a63b 100644
--- a/src/basic/ratelimit.c
+++ b/src/basic/ratelimit.c
@@ -10,6 +10,7 @@
 
 bool ratelimit_below(RateLimit *r) {
         usec_t ts;
+        bool good = false;
 
         assert(r);
 
@@ -24,15 +25,16 @@
 
                 /* Reset counter */
                 r->num = 0;
-                goto good;
-        }
+                good = true;
+        } else if (r->num < r->burst)
+                good = true;
 
-        if (r->num < r->burst)
-                goto good;
-
-        return false;
-
-good:
         r->num++;
-        return true;
+        return good;
+}
+
+unsigned ratelimit_num_dropped(RateLimit *r) {
+        assert(r);
+
+        return r->num > r->burst ? r->num - r->burst : 0;
 }
diff --git a/src/basic/ratelimit.h b/src/basic/ratelimit.h
index ee1d17c..2236189 100644
--- a/src/basic/ratelimit.h
+++ b/src/basic/ratelimit.h
@@ -4,7 +4,6 @@
 #include <stdbool.h>
 
 #include "time-util.h"
-#include "util.h"
 
 typedef struct RateLimit {
         usec_t interval; /* Keep those two fields first so they can be initialized easily: */
@@ -22,3 +21,5 @@
 }
 
 bool ratelimit_below(RateLimit *r);
+
+unsigned ratelimit_num_dropped(RateLimit *r);
diff --git a/src/basic/raw-clone.h b/src/basic/raw-clone.h
index becf42e..a3b768f 100644
--- a/src/basic/raw-clone.h
+++ b/src/basic/raw-clone.h
@@ -11,6 +11,7 @@
 
 #include "log.h"
 #include "macro.h"
+#include "process-util.h"
 
 /**
  * raw_clone() - uses clone to create a new process with clone flags
diff --git a/src/basic/recovery-key.c b/src/basic/recovery-key.c
deleted file mode 100644
index cad639a..0000000
--- a/src/basic/recovery-key.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "memory-util.h"
-#include "random-util.h"
-#include "recovery-key.h"
-
-const char modhex_alphabet[16] = {
-        'c', 'b', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'n', 'r', 't', 'u', 'v'
-};
-
-int decode_modhex_char(char x) {
-
-        for (size_t i = 0; i < ELEMENTSOF(modhex_alphabet); i++)
-                /* Check both upper and lowercase */
-                if (modhex_alphabet[i] == x || (modhex_alphabet[i] - 32) == x)
-                        return i;
-
-        return -EINVAL;
-}
-
-int normalize_recovery_key(const char *password, char **ret) {
-        _cleanup_(erase_and_freep) char *mangled = NULL;
-        size_t l;
-
-        assert(password);
-        assert(ret);
-
-        l = strlen(password);
-        if (!IN_SET(l,
-                    RECOVERY_KEY_MODHEX_RAW_LENGTH*2,          /* syntax without dashes */
-                    RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1))   /* syntax with dashes */
-                return -EINVAL;
-
-        mangled = new(char, RECOVERY_KEY_MODHEX_FORMATTED_LENGTH);
-        if (!mangled)
-                return -ENOMEM;
-
-        for (size_t i = 0, j = 0; i < RECOVERY_KEY_MODHEX_RAW_LENGTH; i++) {
-                size_t k;
-                int a, b;
-
-                if (l == RECOVERY_KEY_MODHEX_RAW_LENGTH*2)
-                        /* Syntax without dashes */
-                        k = i * 2;
-                else {
-                        /* Syntax with dashes */
-                        assert(l == RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1);
-                        k = i * 2 + i / 4;
-
-                        if (i > 0 && i % 4 == 0 && password[k-1] != '-')
-                                return -EINVAL;
-                }
-
-                a = decode_modhex_char(password[k]);
-                if (a < 0)
-                        return -EINVAL;
-                b = decode_modhex_char(password[k+1]);
-                if (b < 0)
-                        return -EINVAL;
-
-                mangled[j++] = modhex_alphabet[a];
-                mangled[j++] = modhex_alphabet[b];
-
-                if (i % 4 == 3)
-                        mangled[j++] = '-';
-        }
-
-        mangled[RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1] = 0;
-
-        *ret = TAKE_PTR(mangled);
-        return 0;
-}
-
-int make_recovery_key(char **ret) {
-        _cleanup_(erase_and_freep) char *formatted = NULL;
-        _cleanup_(erase_and_freep) uint8_t *key = NULL;
-        size_t j = 0;
-        int r;
-
-        assert(ret);
-
-        key = new(uint8_t, RECOVERY_KEY_MODHEX_RAW_LENGTH);
-        if (!key)
-                return -ENOMEM;
-
-        r = genuine_random_bytes(key, RECOVERY_KEY_MODHEX_RAW_LENGTH, RANDOM_BLOCK);
-        if (r < 0)
-                return r;
-
-        /* Let's now format it as 64 modhex chars, and after each 8 chars insert a dash */
-        formatted = new(char, RECOVERY_KEY_MODHEX_FORMATTED_LENGTH);
-        if (!formatted)
-                return -ENOMEM;
-
-        for (size_t i = 0; i < RECOVERY_KEY_MODHEX_RAW_LENGTH; i++) {
-                formatted[j++] = modhex_alphabet[key[i] >> 4];
-                formatted[j++] = modhex_alphabet[key[i] & 0xF];
-
-                if (i % 4 == 3)
-                        formatted[j++] = '-';
-        }
-
-        assert(j == RECOVERY_KEY_MODHEX_FORMATTED_LENGTH);
-        assert(formatted[RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1] == '-');
-        formatted[RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1] = 0; /* replace final dash with a NUL */
-
-        *ret = TAKE_PTR(formatted);
-        return 0;
-}
diff --git a/src/basic/recurse-dir.c b/src/basic/recurse-dir.c
new file mode 100644
index 0000000..5e98b7a
--- /dev/null
+++ b/src/basic/recurse-dir.c
@@ -0,0 +1,503 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "dirent-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "missing_syscall.h"
+#include "mountpoint-util.h"
+#include "recurse-dir.h"
+#include "sort-util.h"
+
+#define DEFAULT_RECURSION_MAX 100
+
+static int sort_func(struct dirent * const *a, struct dirent * const *b) {
+        return strcmp((*a)->d_name, (*b)->d_name);
+}
+
+static bool ignore_dirent(const struct dirent *de, RecurseDirFlags flags) {
+        assert(de);
+
+        /* Depending on flag either ignore everything starting with ".", or just "." itself and ".." */
+
+        return FLAGS_SET(flags, RECURSE_DIR_IGNORE_DOT) ?
+                de->d_name[0] == '.' :
+                dot_or_dot_dot(de->d_name);
+}
+
+int readdir_all(int dir_fd,
+                RecurseDirFlags flags,
+                DirectoryEntries **ret) {
+
+        _cleanup_free_ DirectoryEntries *de = NULL;
+        struct dirent *entry;
+        DirectoryEntries *nde;
+        size_t add, sz, j;
+        int r;
+
+        assert(dir_fd >= 0);
+
+        /* Returns an array with pointers to "struct dirent" directory entries, optionally sorted. Free the
+         * array with readdir_all_freep().
+         *
+         * Start with space for up to 8 directory entries. We expect at least 2 ("." + ".."), hence hopefully
+         * 8 will cover most cases comprehensively. (Note that most likely a lot more entries will actually
+         * fit in the buffer, given we calculate maximum file name length here.) */
+        de = malloc(offsetof(DirectoryEntries, buffer) + DIRENT_SIZE_MAX * 8);
+        if (!de)
+                return -ENOMEM;
+
+        de->buffer_size = 0;
+        for (;;) {
+                size_t bs;
+                ssize_t n;
+
+                bs = MIN(MALLOC_SIZEOF_SAFE(de) - offsetof(DirectoryEntries, buffer), (size_t) SSIZE_MAX);
+                assert(bs > de->buffer_size);
+
+                n = getdents64(dir_fd, (uint8_t*) de->buffer + de->buffer_size, bs - de->buffer_size);
+                if (n < 0)
+                        return -errno;
+                if (n == 0)
+                        break;
+
+                msan_unpoison((uint8_t*) de->buffer + de->buffer_size, n);
+
+                de->buffer_size += n;
+
+                if (de->buffer_size < bs - DIRENT_SIZE_MAX) /* Still room for one more entry, then try to
+                                                             * fill it up without growing the structure. */
+                        continue;
+
+                if (bs >= SSIZE_MAX - offsetof(DirectoryEntries, buffer))
+                        return -EFBIG;
+                bs = bs >= (SSIZE_MAX - offsetof(DirectoryEntries, buffer))/2 ? SSIZE_MAX - offsetof(DirectoryEntries, buffer) : bs * 2;
+
+                nde = realloc(de, bs);
+                if (!nde)
+                        return -ENOMEM;
+
+                de = nde;
+        }
+
+        de->n_entries = 0;
+        FOREACH_DIRENT_IN_BUFFER(entry, de->buffer, de->buffer_size) {
+                if (ignore_dirent(entry, flags))
+                        continue;
+
+                if (FLAGS_SET(flags, RECURSE_DIR_ENSURE_TYPE)) {
+                        r = dirent_ensure_type(dir_fd, entry);
+                        if (r == -ENOENT)
+                                /* dentry gone by now? no problem, let's just suppress it */
+                                continue;
+                        if (r < 0)
+                                return r;
+                }
+
+                de->n_entries++;
+        }
+
+        sz = ALIGN(offsetof(DirectoryEntries, buffer) + de->buffer_size);
+        add = sizeof(struct dirent*) * de->n_entries;
+        if (add > SIZE_MAX - add)
+                return -ENOMEM;
+
+        nde = realloc(de, sz + add);
+        if (!nde)
+                return -ENOMEM;
+
+        de = nde;
+        de->entries = (struct dirent**) ((uint8_t*) de + ALIGN(offsetof(DirectoryEntries, buffer) + de->buffer_size));
+
+        j = 0;
+        FOREACH_DIRENT_IN_BUFFER(entry, de->buffer, de->buffer_size) {
+                if (ignore_dirent(entry, flags))
+                        continue;
+
+                /* If d_type == DT_UNKNOWN that means we failed to ensure the type in the earlier loop and
+                 * didn't include the dentry in de->n_entries and as such should skip it here as well. */
+                if (FLAGS_SET(flags, RECURSE_DIR_ENSURE_TYPE) && entry->d_type == DT_UNKNOWN)
+                        continue;
+
+                de->entries[j++] = entry;
+        }
+        assert(j == de->n_entries);
+
+        if (FLAGS_SET(flags, RECURSE_DIR_SORT))
+                typesafe_qsort(de->entries, de->n_entries, sort_func);
+
+        if (ret)
+                *ret = TAKE_PTR(de);
+
+        return 0;
+}
+
+int recurse_dir(
+                int dir_fd,
+                const char *path,
+                unsigned statx_mask,
+                unsigned n_depth_max,
+                RecurseDirFlags flags,
+                recurse_dir_func_t func,
+                void *userdata) {
+
+        _cleanup_free_ DirectoryEntries *de = NULL;
+        STRUCT_STATX_DEFINE(root_sx);
+        int r;
+
+        assert(dir_fd >= 0);
+        assert(func);
+
+        /* This is a lot like ftw()/nftw(), but a lot more modern, i.e. built around openat()/statx()/O_PATH,
+         * and under the assumption that fds are not as 'expensive' as they used to be. */
+
+        if (n_depth_max == 0)
+                return -EOVERFLOW;
+        if (n_depth_max == UINT_MAX) /* special marker for "default" */
+                n_depth_max = DEFAULT_RECURSION_MAX;
+
+        if (FLAGS_SET(flags, RECURSE_DIR_TOPLEVEL)) {
+                if (statx_mask != 0) {
+                        r = statx_fallback(dir_fd, "", AT_EMPTY_PATH, statx_mask, &root_sx);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = func(RECURSE_DIR_ENTER,
+                         path,
+                         -1, /* we have no parent fd */
+                         dir_fd,
+                         NULL, /* we have no dirent */
+                         statx_mask != 0 ? &root_sx : NULL,
+                         userdata);
+                if (IN_SET(r, RECURSE_DIR_LEAVE_DIRECTORY, RECURSE_DIR_SKIP_ENTRY))
+                        return 0;
+                if (r != RECURSE_DIR_CONTINUE)
+                        return r;
+        }
+
+        /* Mask out RECURSE_DIR_ENSURE_TYPE so we can do it ourselves and avoid an extra statx() call. */
+        r = readdir_all(dir_fd, flags & ~RECURSE_DIR_ENSURE_TYPE, &de);
+        if (r < 0)
+                return r;
+
+        for (size_t i = 0; i < de->n_entries; i++) {
+                _cleanup_close_ int inode_fd = -EBADF, subdir_fd = -EBADF;
+                _cleanup_free_ char *joined = NULL;
+                STRUCT_STATX_DEFINE(sx);
+                bool sx_valid = false;
+                const char *p;
+
+                /* For each directory entry we'll do one of the following:
+                 *
+                 * 1) If the entry refers to a directory, we'll open it as O_DIRECTORY 'subdir_fd' and then statx() the opened directory via that new fd (if requested)
+                 * 2) Otherwise, if RECURSE_DIR_INODE_FD is set we'll open it as O_PATH 'inode_fd' and then statx() the opened inode via that new fd (if requested)
+                 * 3) Otherwise, we'll statx() the directory entry via the directory fd we are currently looking at (if requested)
+                 */
+
+                if (path) {
+                        joined = path_join(path, de->entries[i]->d_name);
+                        if (!joined)
+                                return -ENOMEM;
+
+                        p = joined;
+                } else
+                        p = de->entries[i]->d_name;
+
+                if (IN_SET(de->entries[i]->d_type, DT_UNKNOWN, DT_DIR)) {
+                        subdir_fd = openat(dir_fd, de->entries[i]->d_name, O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
+                        if (subdir_fd < 0) {
+                                if (errno == ENOENT) /* Vanished by now, go for next file immediately */
+                                        continue;
+
+                                /* If it is a subdir but we failed to open it, then fail */
+                                if (!IN_SET(errno, ENOTDIR, ELOOP)) {
+                                        log_debug_errno(errno, "Failed to open directory '%s': %m", p);
+
+                                        assert(errno <= RECURSE_DIR_SKIP_OPEN_DIR_ERROR_MAX - RECURSE_DIR_SKIP_OPEN_DIR_ERROR_BASE);
+
+                                        r = func(RECURSE_DIR_SKIP_OPEN_DIR_ERROR_BASE + errno,
+                                                 p,
+                                                 dir_fd,
+                                                 -1,
+                                                 de->entries[i],
+                                                 NULL,
+                                                 userdata);
+                                        if (r == RECURSE_DIR_LEAVE_DIRECTORY)
+                                                break;
+                                        if (!IN_SET(r, RECURSE_DIR_CONTINUE, RECURSE_DIR_SKIP_ENTRY))
+                                                return r;
+
+                                        continue;
+                                }
+
+                                /* If it's not a subdir, then let's handle it like a regular inode below */
+
+                        } else {
+                                /* If we managed to get a DIR* off the inode, it's definitely a directory. */
+                                de->entries[i]->d_type = DT_DIR;
+
+                                if (statx_mask != 0 || (flags & RECURSE_DIR_SAME_MOUNT)) {
+                                        r = statx_fallback(subdir_fd, "", AT_EMPTY_PATH, statx_mask, &sx);
+                                        if (r < 0)
+                                                return r;
+
+                                        sx_valid = true;
+                                }
+                        }
+                }
+
+                if (subdir_fd < 0) {
+                        /* It's not a subdirectory. */
+
+                        if (flags & RECURSE_DIR_INODE_FD) {
+
+                                inode_fd = openat(dir_fd, de->entries[i]->d_name, O_PATH|O_NOFOLLOW|O_CLOEXEC);
+                                if (inode_fd < 0) {
+                                        if (errno == ENOENT) /* Vanished by now, go for next file immediately */
+                                                continue;
+
+                                        log_debug_errno(errno, "Failed to open directory entry '%s': %m", p);
+
+                                        assert(errno <= RECURSE_DIR_SKIP_OPEN_INODE_ERROR_MAX - RECURSE_DIR_SKIP_OPEN_INODE_ERROR_BASE);
+
+                                        r = func(RECURSE_DIR_SKIP_OPEN_INODE_ERROR_BASE + errno,
+                                                 p,
+                                                 dir_fd,
+                                                 -1,
+                                                 de->entries[i],
+                                                 NULL,
+                                                 userdata);
+                                        if (r == RECURSE_DIR_LEAVE_DIRECTORY)
+                                                break;
+                                        if (!IN_SET(r, RECURSE_DIR_CONTINUE, RECURSE_DIR_SKIP_ENTRY))
+                                                return r;
+
+                                        continue;
+                                }
+
+                                /* If we open the inode, then verify it's actually a non-directory, like we
+                                 * assume. Let's guarantee that we never pass statx data of a directory where
+                                 * caller expects a non-directory */
+
+                                r = statx_fallback(inode_fd, "", AT_EMPTY_PATH, statx_mask | STATX_TYPE, &sx);
+                                if (r < 0)
+                                        return r;
+
+                                assert(sx.stx_mask & STATX_TYPE);
+                                sx_valid = true;
+
+                                if (S_ISDIR(sx.stx_mode)) {
+                                        /* What? It's a directory now? Then someone must have quickly
+                                         * replaced it. Let's handle that gracefully: convert it to a
+                                         * directory fd — which should be riskless now that we pinned the
+                                         * inode. */
+
+                                        subdir_fd = fd_reopen(inode_fd, O_DIRECTORY|O_CLOEXEC);
+                                        if (subdir_fd < 0)
+                                                return subdir_fd;
+
+                                        inode_fd = safe_close(inode_fd);
+                                }
+
+                        } else if (statx_mask != 0 || (de->entries[i]->d_type == DT_UNKNOWN && (flags & RECURSE_DIR_ENSURE_TYPE))) {
+
+                                r = statx_fallback(dir_fd, de->entries[i]->d_name, AT_SYMLINK_NOFOLLOW, statx_mask | STATX_TYPE, &sx);
+                                if (r == -ENOENT) /* Vanished by now? Go for next file immediately */
+                                        continue;
+                                if (r < 0) {
+                                        log_debug_errno(r, "Failed to stat directory entry '%s': %m", p);
+
+                                        assert(errno <= RECURSE_DIR_SKIP_STAT_INODE_ERROR_MAX - RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE);
+
+                                        r = func(RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE + -r,
+                                                 p,
+                                                 dir_fd,
+                                                 -1,
+                                                 de->entries[i],
+                                                 NULL,
+                                                 userdata);
+                                        if (r == RECURSE_DIR_LEAVE_DIRECTORY)
+                                                break;
+                                        if (!IN_SET(r, RECURSE_DIR_CONTINUE, RECURSE_DIR_SKIP_ENTRY))
+                                                return r;
+
+                                        continue;
+                                }
+
+                                assert(sx.stx_mask & STATX_TYPE);
+                                sx_valid = true;
+
+                                if (S_ISDIR(sx.stx_mode)) {
+                                        /* So it suddenly is a directory, but we couldn't open it as such
+                                         * earlier?  That is weird, and probably means somebody is racing
+                                         * against us. We could of course retry and open it as a directory
+                                         * again, but the chance to win here is limited. Hence, let's
+                                         * propagate this as EISDIR error instead. That way we make this
+                                         * something that can be reasonably handled, even though we give the
+                                         * guarantee that RECURSE_DIR_ENTRY is strictly issued for
+                                         * non-directory dirents. */
+
+                                        log_debug_errno(r, "Non-directory entry '%s' suddenly became a directory: %m", p);
+
+                                        r = func(RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE + EISDIR,
+                                                 p,
+                                                 dir_fd,
+                                                 -1,
+                                                 de->entries[i],
+                                                 NULL,
+                                                 userdata);
+                                        if (r == RECURSE_DIR_LEAVE_DIRECTORY)
+                                                break;
+                                        if (!IN_SET(r, RECURSE_DIR_CONTINUE, RECURSE_DIR_SKIP_ENTRY))
+                                                return r;
+
+                                        continue;
+                                }
+                        }
+                }
+
+                if (sx_valid) {
+                        /* Copy over the data we acquired through statx() if we acquired any */
+                        if (sx.stx_mask & STATX_TYPE) {
+                                assert((subdir_fd < 0) == !S_ISDIR(sx.stx_mode));
+                                de->entries[i]->d_type = IFTODT(sx.stx_mode);
+                        }
+
+                        if (sx.stx_mask & STATX_INO)
+                                de->entries[i]->d_ino = sx.stx_ino;
+                }
+
+                if (subdir_fd >= 0) {
+                        if (FLAGS_SET(flags, RECURSE_DIR_SAME_MOUNT)) {
+                                bool is_mount;
+
+                                if (sx_valid && FLAGS_SET(sx.stx_attributes_mask, STATX_ATTR_MOUNT_ROOT))
+                                        is_mount = FLAGS_SET(sx.stx_attributes, STATX_ATTR_MOUNT_ROOT);
+                                else {
+                                        r = fd_is_mount_point(dir_fd, de->entries[i]->d_name, 0);
+                                        if (r < 0)
+                                                log_debug_errno(r, "Failed to determine whether %s is a submount, assuming not: %m", p);
+
+                                        is_mount = r > 0;
+                                }
+
+                                if (is_mount) {
+                                        r = func(RECURSE_DIR_SKIP_MOUNT,
+                                                 p,
+                                                 dir_fd,
+                                                 subdir_fd,
+                                                 de->entries[i],
+                                                 statx_mask != 0 ? &sx : NULL, /* only pass sx if user asked for it */
+                                                 userdata);
+                                        if (r == RECURSE_DIR_LEAVE_DIRECTORY)
+                                                break;
+                                        if (!IN_SET(r, RECURSE_DIR_CONTINUE, RECURSE_DIR_SKIP_ENTRY))
+                                                return r;
+
+                                        continue;
+                                }
+                        }
+
+                        if (n_depth_max <= 1) {
+                                /* When we reached max depth, generate a special event */
+
+                                r = func(RECURSE_DIR_SKIP_DEPTH,
+                                         p,
+                                         dir_fd,
+                                         subdir_fd,
+                                         de->entries[i],
+                                         statx_mask != 0 ? &sx : NULL, /* only pass sx if user asked for it */
+                                         userdata);
+                                if (r == RECURSE_DIR_LEAVE_DIRECTORY)
+                                        break;
+                                if (!IN_SET(r, RECURSE_DIR_CONTINUE, RECURSE_DIR_SKIP_ENTRY))
+                                        return r;
+
+                                continue;
+                        }
+
+                        r = func(RECURSE_DIR_ENTER,
+                                 p,
+                                 dir_fd,
+                                 subdir_fd,
+                                 de->entries[i],
+                                 statx_mask != 0 ? &sx : NULL, /* only pass sx if user asked for it */
+                                 userdata);
+                        if (r == RECURSE_DIR_LEAVE_DIRECTORY)
+                                break;
+                        if (r == RECURSE_DIR_SKIP_ENTRY)
+                                continue;
+                        if (r != RECURSE_DIR_CONTINUE)
+                                return r;
+
+                        r = recurse_dir(subdir_fd,
+                                        p,
+                                        statx_mask,
+                                        n_depth_max - 1,
+                                        flags &~ RECURSE_DIR_TOPLEVEL, /* we already called the callback for this entry */
+                                        func,
+                                        userdata);
+                        if (r != 0)
+                                return r;
+
+                        r = func(RECURSE_DIR_LEAVE,
+                                 p,
+                                 dir_fd,
+                                 subdir_fd,
+                                 de->entries[i],
+                                 statx_mask != 0 ? &sx : NULL, /* only pass sx if user asked for it */
+                                 userdata);
+                } else
+                        /* Non-directory inode */
+                        r = func(RECURSE_DIR_ENTRY,
+                                 p,
+                                 dir_fd,
+                                 inode_fd,
+                                 de->entries[i],
+                                 statx_mask != 0 ? &sx : NULL, /* only pass sx if user asked for it */
+                                 userdata);
+
+
+                if (r == RECURSE_DIR_LEAVE_DIRECTORY)
+                        break;
+                if (!IN_SET(r, RECURSE_DIR_SKIP_ENTRY, RECURSE_DIR_CONTINUE))
+                        return r;
+        }
+
+        if (FLAGS_SET(flags, RECURSE_DIR_TOPLEVEL)) {
+
+                r = func(RECURSE_DIR_LEAVE,
+                         path,
+                         -1,
+                         dir_fd,
+                         NULL,
+                         statx_mask != 0 ? &root_sx : NULL,
+                         userdata);
+                if (!IN_SET(r, RECURSE_DIR_LEAVE_DIRECTORY, RECURSE_DIR_SKIP_ENTRY, RECURSE_DIR_CONTINUE))
+                        return r;
+        }
+
+        return 0;
+}
+
+int recurse_dir_at(
+                int atfd,
+                const char *path,
+                unsigned statx_mask,
+                unsigned n_depth_max,
+                RecurseDirFlags flags,
+                recurse_dir_func_t func,
+                void *userdata) {
+
+        _cleanup_close_ int fd = -EBADF;
+
+        assert(atfd >= 0 || atfd == AT_FDCWD);
+        assert(func);
+
+        fd = openat(atfd, path ?: ".", O_DIRECTORY|O_CLOEXEC);
+        if (fd < 0)
+                return -errno;
+
+        return recurse_dir(fd, path, statx_mask, n_depth_max, flags, func, userdata);
+}
diff --git a/src/basic/recurse-dir.h b/src/basic/recurse-dir.h
new file mode 100644
index 0000000..c10c8dd
--- /dev/null
+++ b/src/basic/recurse-dir.h
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <dirent.h>
+#include <limits.h>
+
+#include "errno-list.h"
+#include "stat-util.h"
+#include "macro.h"
+
+typedef enum RecurseDirEvent {
+        RECURSE_DIR_ENTER,      /* only for dir inodes */
+        RECURSE_DIR_LEAVE,      /* only for dir inodes */
+        RECURSE_DIR_ENTRY,      /* only for non-dir inodes */
+        RECURSE_DIR_SKIP_MOUNT, /* only for dir inodes: when we don't descent into submounts */
+        RECURSE_DIR_SKIP_DEPTH, /* only for dir inodes: when we reached the max depth */
+
+        /* If we hit an error opening/stating an entry, then we'll fire a
+         * 'RECURSE_DIR_SKIP_{OPEN_DIR|OPEN_INODE|STAT_INODE}_ERROR_BASE + errno' event. In this case 'de'
+         * will be valid, but the statx data NULL and the inode fd -1. */
+        RECURSE_DIR_SKIP_OPEN_DIR_ERROR_BASE,
+        RECURSE_DIR_SKIP_OPEN_DIR_ERROR_MAX = RECURSE_DIR_SKIP_OPEN_DIR_ERROR_BASE + ERRNO_MAX,
+
+        RECURSE_DIR_SKIP_OPEN_INODE_ERROR_BASE,
+        RECURSE_DIR_SKIP_OPEN_INODE_ERROR_MAX = RECURSE_DIR_SKIP_OPEN_INODE_ERROR_BASE + ERRNO_MAX,
+
+        RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE,
+        RECURSE_DIR_SKIP_STAT_INODE_ERROR_MAX = RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE + ERRNO_MAX,
+
+        _RECURSE_DIR_EVENT_MAX,
+        _RECURSE_DIR_EVENT_INVALID = -EINVAL,
+} RecurseDirEvent;
+
+#define RECURSE_DIR_CONTINUE 0
+#define RECURSE_DIR_LEAVE_DIRECTORY INT_MIN
+#define RECURSE_DIR_SKIP_ENTRY (INT_MIN+1)
+
+/* Make sure that the negative errno range and these two special returns don't overlap */
+assert_cc(RECURSE_DIR_LEAVE_DIRECTORY < -ERRNO_MAX);
+assert_cc(RECURSE_DIR_SKIP_ENTRY < -ERRNO_MAX);
+
+/* Prototype for the callback function that is called whenever we enter or leave a dir inode, or find another dir entry. Return values are:
+ *
+ * RECURSE_DIR_CONTINUE (i.e. 0) → continue with next entry
+ * RECURSE_DIR_LEAVE_DIRECTORY   → leave current directory immediately, don't process further siblings
+ * RECURSE_DIR_SKIP_ENTRY        → skip this entry otherwise (only makes sense on RECURSE_DIR_ENTER)
+ * others                        → terminate iteration entirely, return the specified value (idea is that
+ *                                 < 0 indicates errors and > 0 indicates various forms of success)
+ */
+typedef int (*recurse_dir_func_t)(
+                RecurseDirEvent event,
+                const char *path,        /* Full non-normalized path, i.e. the path specified during recurise_dir() with what we found appended */
+                int dir_fd,              /* fd of the current dir */
+                int inode_fd,            /* fd of the current entry in the current dir (O_DIRECTORY if directory, and O_PATH otherwise, but only if RECURSE_DIR_INODE_FD was set) */
+                const struct dirent *de, /* directory entry (always valid) */
+                const struct statx *sx,  /* statx data (only if statx_mask was non-zero) */
+                void *userdata);
+
+typedef enum RecurseDirFlags {
+        /* Interpreted by readdir_all() */
+        RECURSE_DIR_SORT         = 1 << 0,  /* sort file directory entries before processing them */
+        RECURSE_DIR_IGNORE_DOT   = 1 << 1,  /* ignore all dot files ("." and ".." are always ignored) */
+
+        /* Interpreted by recurse_dir() */
+        RECURSE_DIR_ENSURE_TYPE  = 1 << 2,  /* guarantees that 'd_type' field of 'de' is not DT_UNKNOWN */
+        RECURSE_DIR_SAME_MOUNT   = 1 << 3,  /* skips over subdirectories that are submounts */
+        RECURSE_DIR_INODE_FD     = 1 << 4,  /* passes an opened inode fd (O_DIRECTORY fd in case of dirs, O_PATH otherwise) */
+        RECURSE_DIR_TOPLEVEL     = 1 << 5,  /* call RECURSE_DIR_ENTER/RECURSE_DIR_LEAVE once for top-level dir, too, with dir_fd=-1 and NULL dirent */
+} RecurseDirFlags;
+
+typedef struct DirectoryEntries {
+        size_t n_entries;
+        struct dirent** entries;
+        size_t buffer_size;
+        struct dirent buffer[];
+} DirectoryEntries;
+
+int readdir_all(int dir_fd, RecurseDirFlags flags, DirectoryEntries **ret);
+
+int recurse_dir(int dir_fd, const char *path, unsigned statx_mask, unsigned n_depth_max, RecurseDirFlags flags, recurse_dir_func_t func, void *userdata);
+int recurse_dir_at(int atfd, const char *path, unsigned statx_mask, unsigned n_depth_max, RecurseDirFlags flags, recurse_dir_func_t func, void *userdata);
diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c
index 23d108d..33dfde9 100644
--- a/src/basic/rlimit-util.c
+++ b/src/basic/rlimit-util.c
@@ -3,6 +3,7 @@
 #include <errno.h>
 
 #include "alloc-util.h"
+#include "errno-util.h"
 #include "extract-word.h"
 #include "fd-util.h"
 #include "format-util.h"
@@ -45,10 +46,7 @@
 
         log_debug("Failed at setting rlimit " RLIM_FMT " for resource RLIMIT_%s. Will attempt setting value " RLIM_FMT " instead.", rlim->rlim_max, rlimit_to_string(resource), fixed.rlim_max);
 
-        if (setrlimit(resource, &fixed) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(setrlimit(resource, &fixed));
 }
 
 int setrlimit_closest_all(const struct rlimit *const *rlim, int *which_failed) {
@@ -300,26 +298,26 @@
 }
 
 int rlimit_format(const struct rlimit *rl, char **ret) {
-        char *s = NULL;
+        _cleanup_free_ char *s = NULL;
+        int r;
 
         assert(rl);
         assert(ret);
 
         if (rl->rlim_cur >= RLIM_INFINITY && rl->rlim_max >= RLIM_INFINITY)
-                s = strdup("infinity");
+                r = free_and_strdup(&s, "infinity");
         else if (rl->rlim_cur >= RLIM_INFINITY)
-                (void) asprintf(&s, "infinity:" RLIM_FMT, rl->rlim_max);
+                r = asprintf(&s, "infinity:" RLIM_FMT, rl->rlim_max);
         else if (rl->rlim_max >= RLIM_INFINITY)
-                (void) asprintf(&s, RLIM_FMT ":infinity", rl->rlim_cur);
+                r = asprintf(&s, RLIM_FMT ":infinity", rl->rlim_cur);
         else if (rl->rlim_cur == rl->rlim_max)
-                (void) asprintf(&s, RLIM_FMT, rl->rlim_cur);
+                r = asprintf(&s, RLIM_FMT, rl->rlim_cur);
         else
-                (void) asprintf(&s, RLIM_FMT ":" RLIM_FMT, rl->rlim_cur, rl->rlim_max);
-
-        if (!s)
+                r = asprintf(&s, RLIM_FMT ":" RLIM_FMT, rl->rlim_cur, rl->rlim_max);
+        if (r < 0)
                 return -ENOMEM;
 
-        *ret = s;
+        *ret = TAKE_PTR(s);
         return 0;
 }
 
diff --git a/src/basic/set.h b/src/basic/set.h
index 0f86739..618e729 100644
--- a/src/basic/set.h
+++ b/src/basic/set.h
@@ -6,12 +6,7 @@
 #include "macro.h"
 
 #define set_free_and_replace(a, b)              \
-        ({                                      \
-                set_free(a);                    \
-                (a) = (b);                      \
-                (b) = NULL;                     \
-                0;                              \
-        })
+        free_and_replace_full(a, b, set_free)
 
 Set* _set_new(const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS);
 #define set_new(ops) _set_new(ops HASHMAP_DEBUG_SRC_ARGS)
@@ -26,7 +21,7 @@
 
 /* no set_free_free_free */
 
-#define set_copy(s) ((Set*) _hashmap_copy(HASHMAP_BASE(h)  HASHMAP_DEBUG_SRC_ARGS))
+#define set_copy(s) ((Set*) _hashmap_copy(HASHMAP_BASE(s)  HASHMAP_DEBUG_SRC_ARGS))
 
 int _set_ensure_allocated(Set **s, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS);
 #define set_ensure_allocated(h, ops) _set_ensure_allocated(h, ops HASHMAP_DEBUG_SRC_ARGS)
@@ -127,9 +122,12 @@
 
 int set_consume(Set *s, void *value);
 
-int _set_put_strdup_full(Set **s, const struct hash_ops *hash_ops, const char *p  HASHMAP_DEBUG_PARAMS);
-#define set_put_strdup_full(s, hash_ops, p) _set_put_strdup_full(s, hash_ops, p  HASHMAP_DEBUG_SRC_ARGS)
-#define set_put_strdup(s, p) set_put_strdup_full(s, &string_hash_ops_free, p)
+int _set_put_strndup_full(Set **s, const struct hash_ops *hash_ops, const char *p, size_t n  HASHMAP_DEBUG_PARAMS);
+#define set_put_strndup_full(s, hash_ops, p, n) _set_put_strndup_full(s, hash_ops, p, n  HASHMAP_DEBUG_SRC_ARGS)
+#define set_put_strdup_full(s, hash_ops, p) set_put_strndup_full(s, hash_ops, p, SIZE_MAX)
+#define set_put_strndup(s, p, n) set_put_strndup_full(s, &string_hash_ops_free, p, n)
+#define set_put_strdup(s, p) set_put_strndup(s, p, SIZE_MAX)
+
 int _set_put_strdupv_full(Set **s, const struct hash_ops *hash_ops, char **l  HASHMAP_DEBUG_PARAMS);
 #define set_put_strdupv_full(s, hash_ops, l) _set_put_strdupv_full(s, hash_ops, l  HASHMAP_DEBUG_SRC_ARGS)
 #define set_put_strdupv(s, l) set_put_strdupv_full(s, &string_hash_ops_free, l)
@@ -153,3 +151,5 @@
 int set_strjoin(Set *s, const char *separator, bool wrap_with_separator, char **ret);
 
 bool set_equal(Set *a, Set *b);
+
+bool set_fnmatch(Set *include_patterns, Set *exclude_patterns, const char *needle);
diff --git a/src/basic/sigbus.c b/src/basic/sigbus.c
index 8ff060a..7e5a493 100644
--- a/src/basic/sigbus.c
+++ b/src/basic/sigbus.c
@@ -7,7 +7,10 @@
 
 #include "macro.h"
 #include "memory-util.h"
+#include "missing_syscall.h"
+#include "process-util.h"
 #include "sigbus.h"
+#include "signal-util.h"
 
 #define SIGBUS_QUEUE_MAX 64
 
@@ -26,24 +29,31 @@
         assert(addr);
 
         /* Find a free place, increase the number of entries and leave, if we can */
-        for (size_t u = 0; u < SIGBUS_QUEUE_MAX; u++)
-                if (__sync_bool_compare_and_swap(&sigbus_queue[u], NULL, addr)) {
-                        __sync_fetch_and_add(&n_sigbus_queue, 1);
+        for (size_t u = 0; u < SIGBUS_QUEUE_MAX; u++) {
+                /* OK to initialize this here since we haven't started the atomic ops yet */
+                void *tmp = NULL;
+                if (__atomic_compare_exchange_n(&sigbus_queue[u], &tmp, addr, false,
+                                                __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
+                        __atomic_fetch_add(&n_sigbus_queue, 1, __ATOMIC_SEQ_CST);
                         return;
                 }
+        }
 
         /* If we can't, make sure the queue size is out of bounds, to
          * mark it as overflow */
         for (;;) {
-                unsigned c;
+                sig_atomic_t c;
 
-                __sync_synchronize();
+                __atomic_thread_fence(__ATOMIC_SEQ_CST);
                 c = n_sigbus_queue;
 
                 if (c > SIGBUS_QUEUE_MAX) /* already overflow */
                         return;
 
-                if (__sync_bool_compare_and_swap(&n_sigbus_queue, c, c + SIGBUS_QUEUE_MAX))
+                /* OK if we clobber c here, since we either immediately return
+                 * or it will be immediately reinitialized on next loop */
+                if (__atomic_compare_exchange_n(&n_sigbus_queue, &c, c + SIGBUS_QUEUE_MAX, false,
+                                                __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
                         return;
         }
 }
@@ -54,7 +64,7 @@
         for (;;) {
                 unsigned u, c;
 
-                __sync_synchronize();
+                __atomic_thread_fence(__ATOMIC_SEQ_CST);
                 c = n_sigbus_queue;
 
                 if (_likely_(c == 0))
@@ -70,8 +80,13 @@
                         if (!addr)
                                 continue;
 
-                        if (__sync_bool_compare_and_swap(&sigbus_queue[u], addr, NULL)) {
-                                __sync_fetch_and_sub(&n_sigbus_queue, 1);
+                        /* OK if we clobber addr here, since we either immediately return
+                         * or it will be immediately reinitialized on next loop */
+                        if (__atomic_compare_exchange_n(&sigbus_queue[u], &addr, NULL, false,
+                                                        __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
+                                __atomic_fetch_sub(&n_sigbus_queue, 1, __ATOMIC_SEQ_CST);
+                                /* If we successfully entered this if condition, addr won't
+                                 * have been modified since its assignment, so safe to use it */
                                 *ret = addr;
                                 return 1;
                         }
@@ -88,7 +103,7 @@
 
         if (si->si_code != BUS_ADRERR || !si->si_addr) {
                 assert_se(sigaction(SIGBUS, &old_sigaction, NULL) == 0);
-                raise(SIGBUS);
+                propagate_signal(sn, si);
                 return;
         }
 
diff --git a/src/basic/signal-util.c b/src/basic/signal-util.c
index 131fd3b..5d94846 100644
--- a/src/basic/signal-util.c
+++ b/src/basic/signal-util.c
@@ -3,7 +3,10 @@
 #include <errno.h>
 #include <stdarg.h>
 
+#include "errno-util.h"
 #include "macro.h"
+#include "missing_syscall.h"
+#include "missing_threads.h"
 #include "parse-util.h"
 #include "signal-util.h"
 #include "stdio-util.h"
@@ -39,10 +42,7 @@
         if (sigemptyset(&ss) < 0)
                 return -errno;
 
-        if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(sigprocmask(SIG_SETMASK, &ss, NULL));
 }
 
 int sigaction_many_internal(const struct sigaction *sa, ...) {
@@ -119,7 +119,7 @@
         return 0;
 }
 
-static const char *const __signal_table[] = {
+static const char *const static_signal_table[] = {
         [SIGHUP] = "HUP",
         [SIGINT] = "INT",
         [SIGQUIT] = "QUIT",
@@ -155,13 +155,13 @@
         [SIGSYS] = "SYS"
 };
 
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP(__signal, int);
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP(static_signal, int);
 
 const char *signal_to_string(int signo) {
         static thread_local char buf[STRLEN("RTMIN+") + DECIMAL_STR_MAX(int)];
         const char *name;
 
-        name = __signal_to_string(signo);
+        name = static_signal_to_string(signo);
         if (name)
                 return name;
 
@@ -190,7 +190,7 @@
                 s += 3;
 
         /* Check that the input is a signal name. */
-        signo = __signal_from_string(s);
+        signo = static_signal_from_string(s);
         if (signo > 0)
                 return signo;
 
@@ -247,9 +247,57 @@
         if (r != 0)
                 return -r;
 
-        r = sigismember(&ss, sig);
-        if (r < 0)
+        return RET_NERRNO(sigismember(&ss, sig));
+}
+
+int pop_pending_signal_internal(int sig, ...) {
+        sigset_t ss;
+        va_list ap;
+        int r;
+
+        if (sig < 0) /* Empty list? */
+                return -EINVAL;
+
+        if (sigemptyset(&ss) < 0)
                 return -errno;
 
-        return r;
+        /* Add first signal (if the signal is zero, we'll silently skip it, to make it easier to build
+         * parameter lists where some element are sometimes off, similar to how sigset_add_many_ap() handles
+         * this.) */
+        if (sig > 0 && sigaddset(&ss, sig) < 0)
+                return -errno;
+
+        /* Add all other signals */
+        va_start(ap, sig);
+        r = sigset_add_many_ap(&ss, ap);
+        va_end(ap);
+        if (r < 0)
+                return r;
+
+        r = sigtimedwait(&ss, NULL, &(struct timespec) { 0, 0 });
+        if (r < 0) {
+                if (errno == EAGAIN)
+                        return 0;
+
+                return -errno;
+        }
+
+        return r; /* Returns the signal popped */
+}
+
+void propagate_signal(int sig, siginfo_t *siginfo) {
+        pid_t p;
+
+        /* To be called from a signal handler. Will raise the same signal again, in our process + in our threads.
+         *
+         * Note that we use raw_getpid() instead of getpid_cached(). We might have forked with raw_clone()
+         * earlier (see PID 1), and hence let's go to the raw syscall here. In particular as this is not
+         * performance sensitive code.
+         *
+         * Note that we use kill() rather than raise() as fallback, for similar reasons. */
+
+        p = raw_getpid();
+
+        if (rt_tgsigqueueinfo(p, gettid(), sig, siginfo) < 0)
+                assert_se(kill(p, sig) >= 0);
 }
diff --git a/src/basic/signal-util.h b/src/basic/signal-util.h
index 37271d7..ad2ba84 100644
--- a/src/basic/signal-util.h
+++ b/src/basic/signal-util.h
@@ -62,3 +62,8 @@
 }
 
 int signal_is_blocked(int sig);
+
+int pop_pending_signal_internal(int sig, ...);
+#define pop_pending_signal(...) pop_pending_signal_internal(__VA_ARGS__, -1)
+
+void propagate_signal(int sig, siginfo_t *siginfo);
diff --git a/src/basic/siphash24.c b/src/basic/siphash24.c
index 7c61eb1..b614ecf 100644
--- a/src/basic/siphash24.c
+++ b/src/basic/siphash24.c
@@ -72,12 +72,11 @@
 
 void siphash24_compress(const void *_in, size_t inlen, struct siphash *state) {
 
-        const uint8_t *in = _in;
+        const uint8_t *in = ASSERT_PTR(_in);
         const uint8_t *end = in + inlen;
         size_t left = state->inlen & 7;
         uint64_t m;
 
-        assert(in);
         assert(state);
 
         /* Update total length */
diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
index f6827fe..542c455 100644
--- a/src/basic/socket-util.c
+++ b/src/basic/socket-util.c
@@ -400,6 +400,41 @@
         }
 }
 
+int sockaddr_set_in_addr(
+                union sockaddr_union *u,
+                int family,
+                const union in_addr_union *a,
+                uint16_t port) {
+
+        assert(u);
+        assert(a);
+
+        switch (family) {
+
+        case AF_INET:
+                u->in = (struct sockaddr_in) {
+                        .sin_family = AF_INET,
+                        .sin_addr = a->in,
+                        .sin_port = htobe16(port),
+                };
+
+                return 0;
+
+        case AF_INET6:
+                u->in6 = (struct sockaddr_in6) {
+                        .sin6_family = AF_INET6,
+                        .sin6_addr = a->in6,
+                        .sin6_port = htobe16(port),
+                };
+
+                return 0;
+
+        default:
+                return -EAFNOSUPPORT;
+
+        }
+}
+
 int sockaddr_pretty(
                 const struct sockaddr *_sa,
                 socklen_t salen,
@@ -455,23 +490,21 @@
                         if (r < 0)
                                 return -ENOMEM;
                 } else {
-                        char a[INET6_ADDRSTRLEN], ifname[IF_NAMESIZE + 1];
-
-                        inet_ntop(AF_INET6, &sa->in6.sin6_addr, a, sizeof(a));
-                        if (sa->in6.sin6_scope_id != 0)
-                                format_ifname_full(sa->in6.sin6_scope_id, ifname, FORMAT_IFNAME_IFINDEX);
+                        const char *a = IN6_ADDR_TO_STRING(&sa->in6.sin6_addr);
 
                         if (include_port) {
-                                r = asprintf(&p,
+                                if (asprintf(&p,
                                              "[%s]:%u%s%s",
                                              a,
                                              be16toh(sa->in6.sin6_port),
                                              sa->in6.sin6_scope_id != 0 ? "%" : "",
-                                             sa->in6.sin6_scope_id != 0 ? ifname : "");
-                                if (r < 0)
+                                             FORMAT_IFNAME_FULL(sa->in6.sin6_scope_id, FORMAT_IFNAME_IFINDEX)) < 0)
                                         return -ENOMEM;
                         } else {
-                                p = sa->in6.sin6_scope_id != 0 ? strjoin(a, "%", ifname) : strdup(a);
+                                if (sa->in6.sin6_scope_id != 0)
+                                        p = strjoin(a, "%", FORMAT_IFNAME_FULL(sa->in6.sin6_scope_id, FORMAT_IFNAME_IFINDEX));
+                                else
+                                        p = strdup(a);
                                 if (!p)
                                         return -ENOMEM;
                         }
@@ -551,7 +584,7 @@
                 return -errno;
 
         if (sa.sa.sa_family == AF_UNIX) {
-                struct ucred ucred = {};
+                struct ucred ucred = UCRED_INVALID;
 
                 /* UNIX connection sockets are anonymous, so let's use
                  * PID/UID as pretty credentials instead */
@@ -616,24 +649,24 @@
 }
 
 static const char* const netlink_family_table[] = {
-        [NETLINK_ROUTE] = "route",
-        [NETLINK_FIREWALL] = "firewall",
-        [NETLINK_INET_DIAG] = "inet-diag",
-        [NETLINK_NFLOG] = "nflog",
-        [NETLINK_XFRM] = "xfrm",
-        [NETLINK_SELINUX] = "selinux",
-        [NETLINK_ISCSI] = "iscsi",
-        [NETLINK_AUDIT] = "audit",
-        [NETLINK_FIB_LOOKUP] = "fib-lookup",
-        [NETLINK_CONNECTOR] = "connector",
-        [NETLINK_NETFILTER] = "netfilter",
-        [NETLINK_IP6_FW] = "ip6-fw",
-        [NETLINK_DNRTMSG] = "dnrtmsg",
+        [NETLINK_ROUTE]          = "route",
+        [NETLINK_FIREWALL]       = "firewall",
+        [NETLINK_INET_DIAG]      = "inet-diag",
+        [NETLINK_NFLOG]          = "nflog",
+        [NETLINK_XFRM]           = "xfrm",
+        [NETLINK_SELINUX]        = "selinux",
+        [NETLINK_ISCSI]          = "iscsi",
+        [NETLINK_AUDIT]          = "audit",
+        [NETLINK_FIB_LOOKUP]     = "fib-lookup",
+        [NETLINK_CONNECTOR]      = "connector",
+        [NETLINK_NETFILTER]      = "netfilter",
+        [NETLINK_IP6_FW]         = "ip6-fw",
+        [NETLINK_DNRTMSG]        = "dnrtmsg",
         [NETLINK_KOBJECT_UEVENT] = "kobject-uevent",
-        [NETLINK_GENERIC] = "generic",
-        [NETLINK_SCSITRANSPORT] = "scsitransport",
-        [NETLINK_ECRYPTFS] = "ecryptfs",
-        [NETLINK_RDMA] = "rdma",
+        [NETLINK_GENERIC]        = "generic",
+        [NETLINK_SCSITRANSPORT]  = "scsitransport",
+        [NETLINK_ECRYPTFS]       = "ecryptfs",
+        [NETLINK_RDMA]           = "rdma",
 };
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(netlink_family, int, INT_MAX);
@@ -740,10 +773,10 @@
 }
 
 static const char* const ip_tos_table[] = {
-        [IPTOS_LOWDELAY] = "low-delay",
-        [IPTOS_THROUGHPUT] = "throughput",
+        [IPTOS_LOWDELAY]    = "low-delay",
+        [IPTOS_THROUGHPUT]  = "throughput",
         [IPTOS_RELIABILITY] = "reliability",
-        [IPTOS_LOWCOST] = "low-cost",
+        [IPTOS_LOWCOST]     = "low-cost",
 };
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ip_tos, int, 0xff);
@@ -793,14 +826,14 @@
 
         /* Let's refuse "all" and "default" as interface name, to avoid collisions with the special sysctl
          * directories /proc/sys/net/{ipv4,ipv6}/conf/{all,default} */
-        if (STR_IN_SET(p, "all", "default"))
+        if (!FLAGS_SET(flags, IFNAME_VALID_SPECIAL) && STR_IN_SET(p, "all", "default"))
                 return false;
 
         for (const char *t = p; *t; t++) {
                 if (!ifname_valid_char(*t))
                         return false;
 
-                numeric = numeric && (*t >= '0' && *t <= '9');
+                numeric = numeric && ascii_isdigit(*t);
         }
 
         /* It's fully numeric but didn't parse as valid ifindex above? if so, it must be too large or zero or
@@ -921,7 +954,7 @@
 ssize_t send_one_fd_iov_sa(
                 int transport_fd,
                 int fd,
-                struct iovec *iov, size_t iovlen,
+                const struct iovec *iov, size_t iovlen,
                 const struct sockaddr *sa, socklen_t len,
                 int flags) {
 
@@ -929,7 +962,7 @@
         struct msghdr mh = {
                 .msg_name = (struct sockaddr*) sa,
                 .msg_namelen = len,
-                .msg_iov = iov,
+                .msg_iov = (struct iovec *)iov,
                 .msg_iovlen = iovlen,
         };
         ssize_t k;
@@ -1016,7 +1049,7 @@
         if (found)
                 *ret_fd = *(int*) CMSG_DATA(found);
         else
-                *ret_fd = -1;
+                *ret_fd = -EBADF;
 
         return k;
 }
@@ -1201,7 +1234,10 @@
          * addresses!), which the kernel doesn't. We do this to reduce chance of incompatibility with other apps that
          * do not expect non-NUL terminated file system path. */
         if (l+1 > sizeof(ret->sun_path))
-                return -EINVAL;
+                return path[0] == '@' ? -EINVAL : -ENAMETOOLONG; /* return a recognizable error if this is
+                                                                  * too long to fit into a sockaddr_un, but
+                                                                  * is a file system path, and thus might be
+                                                                  * connectible via O_PATH indirection. */
 
         *ret = (struct sockaddr_un) {
                 .sun_family = AF_UNIX,
@@ -1226,33 +1262,27 @@
 
         /* Call with NULL to drop binding */
 
-        if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifname, strlen_ptr(ifname)) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifname, strlen_ptr(ifname)));
 }
 
 int socket_bind_to_ifindex(int fd, int ifindex) {
-        char ifname[IF_NAMESIZE + 1];
+        char ifname[IF_NAMESIZE];
         int r;
 
         assert(fd >= 0);
 
-        if (ifindex <= 0) {
+        if (ifindex <= 0)
                 /* Drop binding */
-                if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, NULL, 0) < 0)
-                        return -errno;
-
-                return 0;
-        }
+                return RET_NERRNO(setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, NULL, 0));
 
         r = setsockopt_int(fd, SOL_SOCKET, SO_BINDTOIFINDEX, ifindex);
         if (r != -ENOPROTOOPT)
                 return r;
 
         /* Fall back to SO_BINDTODEVICE on kernels < 5.0 which didn't have SO_BINDTOIFINDEX */
-        if (!format_ifname(ifindex, ifname))
-                return -errno;
+        r = format_ifname(ifindex, ifname);
+        if (r < 0)
+                return r;
 
         return socket_bind_to_ifname(fd, ifname);
 }
@@ -1277,7 +1307,7 @@
         return n;
 }
 
-int socket_get_family(int fd, int *ret) {
+int socket_get_family(int fd) {
         int af;
         socklen_t sl = sizeof(af);
 
@@ -1291,12 +1321,11 @@
 }
 
 int socket_set_recvpktinfo(int fd, int af, bool b) {
-        int r;
 
         if (af == AF_UNSPEC) {
-                r = socket_get_family(fd, &af);
-                if (r < 0)
-                        return r;
+                af = socket_get_family(fd);
+                if (af < 0)
+                        return af;
         }
 
         switch (af) {
@@ -1320,27 +1349,20 @@
 
 int socket_set_unicast_if(int fd, int af, int ifi) {
         be32_t ifindex_be = htobe32(ifi);
-        int r;
 
         if (af == AF_UNSPEC) {
-                r = socket_get_family(fd, &af);
-                if (r < 0)
-                        return r;
+                af = socket_get_family(fd);
+                if (af < 0)
+                        return af;
         }
 
         switch (af) {
 
         case AF_INET:
-                if (setsockopt(fd, IPPROTO_IP, IP_UNICAST_IF, &ifindex_be, sizeof(ifindex_be)) < 0)
-                        return -errno;
-
-                return 0;
+                return RET_NERRNO(setsockopt(fd, IPPROTO_IP, IP_UNICAST_IF, &ifindex_be, sizeof(ifindex_be)));
 
         case AF_INET6:
-                if (setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_IF, &ifindex_be, sizeof(ifindex_be)) < 0)
-                        return -errno;
-
-                return 0;
+                return RET_NERRNO(setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_IF, &ifindex_be, sizeof(ifindex_be)));
 
         default:
                 return -EAFNOSUPPORT;
@@ -1348,12 +1370,10 @@
 }
 
 int systemd_socket_set_option(int fd, int af, int opt_ipv4, int opt_ipv6, int val) {
-        int r;
-
         if (af == AF_UNSPEC) {
-                r = socket_get_family(fd, &af);
-                if (r < 0)
-                        return r;
+                af = socket_get_family(fd);
+                if (af < 0)
+                        return af;
         }
 
         switch (af) {
@@ -1373,9 +1393,9 @@
         int mtu, r;
 
         if (af == AF_UNSPEC) {
-                r = socket_get_family(fd, &af);
-                if (r < 0)
-                        return r;
+                af = socket_get_family(fd);
+                if (af < 0)
+                        return af;
         }
 
         switch (af) {
@@ -1400,3 +1420,119 @@
         *ret = (size_t) mtu;
         return 0;
 }
+
+int connect_unix_path(int fd, int dir_fd, const char *path) {
+        _cleanup_close_ int inode_fd = -EBADF;
+        union sockaddr_union sa = {
+                .un.sun_family = AF_UNIX,
+        };
+        size_t path_len;
+        socklen_t salen;
+
+        assert(fd >= 0);
+        assert(dir_fd == AT_FDCWD || dir_fd >= 0);
+        assert(path);
+
+        /* Connects to the specified AF_UNIX socket in the file system. Works around the 108 byte size limit
+         * in sockaddr_un, by going via O_PATH if needed. This hence works for any kind of path. */
+
+        path_len = strlen(path);
+
+        /* Refuse zero length path early, to make sure AF_UNIX stack won't mistake this for an abstract
+         * namespace path, since first char is NUL */
+        if (path_len <= 0)
+                return -EINVAL;
+
+        if (dir_fd == AT_FDCWD && path_len < sizeof(sa.un.sun_path)) {
+                memcpy(sa.un.sun_path, path, path_len + 1);
+                salen = offsetof(struct sockaddr_un, sun_path) + path_len + 1;
+        } else {
+                const char *proc;
+                size_t proc_len;
+
+                /* If dir_fd is specified, then we need to go the indirect O_PATH route, because connectat()
+                 * does not exist. If the path is too long, we also need to take the indirect route, since we
+                 * can't fit this into a sockaddr_un directly. */
+
+                inode_fd = openat(dir_fd, path, O_PATH|O_CLOEXEC);
+                if (inode_fd < 0)
+                        return -errno;
+
+                proc = FORMAT_PROC_FD_PATH(inode_fd);
+                proc_len = strlen(proc);
+
+                assert(proc_len < sizeof(sa.un.sun_path));
+                memcpy(sa.un.sun_path, proc, proc_len + 1);
+                salen = offsetof(struct sockaddr_un, sun_path) + proc_len + 1;
+        }
+
+        return RET_NERRNO(connect(fd, &sa.sa, salen));
+}
+
+int socket_address_parse_unix(SocketAddress *ret_address, const char *s) {
+        struct sockaddr_un un;
+        int r;
+
+        assert(ret_address);
+        assert(s);
+
+        if (!IN_SET(*s, '/', '@'))
+                return -EPROTO;
+
+        r = sockaddr_un_set_path(&un, s);
+        if (r < 0)
+                return r;
+
+        *ret_address = (SocketAddress) {
+                .sockaddr.un = un,
+                .size = r,
+        };
+
+        return 0;
+}
+
+int socket_address_parse_vsock(SocketAddress *ret_address, const char *s) {
+        /* AF_VSOCK socket in vsock:cid:port notation */
+        _cleanup_free_ char *n = NULL;
+        char *e, *cid_start;
+        unsigned port, cid;
+        int r;
+
+        assert(ret_address);
+        assert(s);
+
+        cid_start = startswith(s, "vsock:");
+        if (!cid_start)
+                return -EPROTO;
+
+        e = strchr(cid_start, ':');
+        if (!e)
+                return -EINVAL;
+
+        r = safe_atou(e+1, &port);
+        if (r < 0)
+                return r;
+
+        n = strndup(cid_start, e - cid_start);
+        if (!n)
+                return -ENOMEM;
+
+        if (isempty(n))
+                cid = VMADDR_CID_ANY;
+        else {
+                r = safe_atou(n, &cid);
+                if (r < 0)
+                        return r;
+        }
+
+        *ret_address = (SocketAddress) {
+                .sockaddr.vm = {
+                        .svm_cid = cid,
+                        .svm_family = AF_VSOCK,
+                        .svm_port = port,
+                },
+                .size = sizeof(struct sockaddr_vm),
+        };
+
+        return 0;
+}
diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h
index ab257c5..d243310 100644
--- a/src/basic/socket-util.h
+++ b/src/basic/socket-util.h
@@ -15,6 +15,7 @@
 #include <sys/un.h>
 
 #include "errno-util.h"
+#include "in-addr-util.h"
 #include "macro.h"
 #include "missing_network.h"
 #include "missing_socket.h"
@@ -106,6 +107,7 @@
 
 int sockaddr_port(const struct sockaddr *_sa, unsigned *port);
 const union in_addr_union *sockaddr_in_addr(const struct sockaddr *sa);
+int sockaddr_set_in_addr(union sockaddr_union *u, int family, const union in_addr_union *a, uint16_t port);
 
 int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_ipv6, bool include_port, char **ret);
 int getpeername_pretty(int fd, bool include_port, char **ret);
@@ -127,7 +129,7 @@
         return fd_set_sndbuf(fd, n, true);
 }
 int fd_set_rcvbuf(int fd, size_t n, bool increase);
-static inline int fd_inc_rcvbuf(int fd, size_t n) {
+static inline int fd_increase_rxbuf(int fd, size_t n) {
         return fd_set_rcvbuf(fd, n, true);
 }
 
@@ -135,9 +137,10 @@
 int ip_tos_from_string(const char *s);
 
 typedef enum {
-        IFNAME_VALID_ALTERNATIVE = 1 << 0,
-        IFNAME_VALID_NUMERIC     = 1 << 1,
-        _IFNAME_VALID_ALL        = IFNAME_VALID_ALTERNATIVE | IFNAME_VALID_NUMERIC,
+        IFNAME_VALID_ALTERNATIVE = 1 << 0, /* Allow "altnames" too */
+        IFNAME_VALID_NUMERIC     = 1 << 1, /* Allow decimal formatted ifindexes too */
+        IFNAME_VALID_SPECIAL     = 1 << 2, /* Allow the special names "all" and "default" */
+        _IFNAME_VALID_ALL        = IFNAME_VALID_ALTERNATIVE | IFNAME_VALID_NUMERIC | IFNAME_VALID_SPECIAL,
 } IfnameValidFlags;
 bool ifname_valid_char(char a);
 bool ifname_valid_full(const char *p, IfnameValidFlags flags);
@@ -153,7 +156,7 @@
 ssize_t send_one_fd_iov_sa(
                 int transport_fd,
                 int fd,
-                struct iovec *iov, size_t iovlen,
+                const struct iovec *iov, size_t iovlen,
                 const struct sockaddr *sa, socklen_t len,
                 int flags);
 int send_one_fd_sa(int transport_fd,
@@ -172,15 +175,17 @@
 #define CMSG_FOREACH(cmsg, mh)                                          \
         for ((cmsg) = CMSG_FIRSTHDR(mh); (cmsg); (cmsg) = CMSG_NXTHDR((mh), (cmsg)))
 
+#define CMSG_TYPED_DATA(cmsg, type)                                     \
+        ({                                                              \
+                struct cmsghdr *_cmsg = cmsg;                           \
+                _cmsg ? CAST_ALIGN_PTR(type, CMSG_DATA(_cmsg)) : (type*) NULL; \
+        })
+
 struct cmsghdr* cmsg_find(struct msghdr *mh, int level, int type, socklen_t length);
 
 /* Type-safe, dereferencing version of cmsg_find() */
-#define CMSG_FIND_DATA(mh, level, type, ctype) \
-        ({                                                            \
-                struct cmsghdr *_found;                               \
-                _found = cmsg_find(mh, level, type, CMSG_LEN(sizeof(ctype))); \
-                (ctype*) (_found ? CMSG_DATA(_found) : NULL);         \
-        })
+#define CMSG_FIND_DATA(mh, level, type, ctype)                          \
+        CMSG_TYPED_DATA(cmsg_find(mh, level, type, CMSG_LEN(sizeof(ctype))), ctype)
 
 /* Resolves to a type that can carry cmsghdr structures. Make sure things are properly aligned, i.e. the type
  * itself is placed properly in memory and the size is also aligned to what's appropriate for "cmsghdr"
@@ -221,11 +226,11 @@
                          strnlen(_sa->sun_path, sizeof(_sa->sun_path))+1); \
         })
 
-#define SOCKADDR_LEN(sa)                                                \
+#define SOCKADDR_LEN(saddr)                                             \
         ({                                                              \
-                const union sockaddr_union *__sa = &(sa);               \
+                const union sockaddr_union *__sa = &(saddr);            \
                 size_t _len;                                            \
-                switch(__sa->sa.sa_family) {                            \
+                switch (__sa->sa.sa_family) {                           \
                 case AF_INET:                                           \
                         _len = sizeof(struct sockaddr_in);              \
                         break;                                          \
@@ -245,7 +250,7 @@
                         _len = sizeof(struct sockaddr_vm);              \
                         break;                                          \
                 default:                                                \
-                        assert_not_reached("invalid socket family");    \
+                        assert_not_reached();                           \
                 }                                                       \
                 _len;                                                   \
         })
@@ -301,7 +306,7 @@
 
 ssize_t recvmsg_safe(int sockfd, struct msghdr *msg, int flags);
 
-int socket_get_family(int fd, int *ret);
+int socket_get_family(int fd);
 int socket_set_recvpktinfo(int fd, int af, bool b);
 int socket_set_unicast_if(int fd, int af, int ifi);
 
@@ -326,3 +331,14 @@
 }
 
 int socket_get_mtu(int fd, int af, size_t *ret);
+
+/* an initializer for struct ucred that initialized all fields to the invalid value appropriate for each */
+#define UCRED_INVALID { .pid = 0, .uid = UID_INVALID, .gid = GID_INVALID }
+
+int connect_unix_path(int fd, int dir_fd, const char *path);
+
+/* Parses AF_UNIX and AF_VSOCK addresses. AF_INET[6] require some netlink calls, so it cannot be in
+ * src/basic/ and is done from 'socket_local_address from src/shared/. Return -EPROTO in case of
+ * protocol mismatch. */
+int socket_address_parse_unix(SocketAddress *ret_address, const char *s);
+int socket_address_parse_vsock(SocketAddress *ret_address, const char *s);
diff --git a/src/basic/sort-util.c b/src/basic/sort-util.c
index a9c68b7..e0fb9cf 100644
--- a/src/basic/sort-util.c
+++ b/src/basic/sort-util.c
@@ -5,7 +5,7 @@
 
 /* hey glibc, APIs with callbacks without a user pointer are so useless */
 void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
-                 __compar_d_fn_t compar, void *arg) {
+                 comparison_userdata_fn_t compar, void *arg) {
         size_t l, u, idx;
         const void *p;
         int comparison;
diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h
index b7270ee..f0bf246 100644
--- a/src/basic/sort-util.h
+++ b/src/basic/sort-util.h
@@ -5,18 +5,20 @@
 
 #include "macro.h"
 
-#ifdef GOOGLE3_BLAZE_BUILD
-typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
-#endif // GOOGLE3_BLAZE_BUILD
+/* This is the same as glibc's internal __compar_d_fn_t type. glibc exports a public comparison_fn_t, for the
+ * external type __compar_fn_t, but doesn't do anything similar for __compar_d_fn_t. Let's hence do that
+ * ourselves, picking a name that is obvious, but likely enough to not clash with glibc's choice of naming if
+ * they should ever add one. */
+typedef int (*comparison_userdata_fn_t)(const void *, const void *, void *);
 
 void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
-                 __compar_d_fn_t compar, void *arg);
+                 comparison_userdata_fn_t compar, void *arg);
 
 #define typesafe_bsearch_r(k, b, n, func, userdata)                     \
         ({                                                              \
-                const typeof(b[0]) *_k = k;                             \
-                int (*_func_)(const typeof(b[0])*, const typeof(b[0])*, typeof(userdata)) = func; \
-                xbsearch_r((const void*) _k, (b), (n), sizeof((b)[0]), (__compar_d_fn_t) _func_, userdata); \
+                const typeof((b)[0]) *_k = k;                           \
+                int (*_func_)(const typeof((b)[0])*, const typeof((b)[0])*, typeof(userdata)) = func; \
+                xbsearch_r((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_userdata_fn_t) _func_, userdata); \
         })
 
 /**
@@ -24,7 +26,7 @@
  * that only if nmemb > 0.
  */
 static inline void* bsearch_safe(const void *key, const void *base,
-                                 size_t nmemb, size_t size, __compar_fn_t compar) {
+                                 size_t nmemb, size_t size, comparison_fn_t compar) {
         if (nmemb <= 0)
                 return NULL;
 
@@ -34,16 +36,16 @@
 
 #define typesafe_bsearch(k, b, n, func)                                 \
         ({                                                              \
-                const typeof(b[0]) *_k = k;                             \
-                int (*_func_)(const typeof(b[0])*, const typeof(b[0])*) = func; \
-                bsearch_safe((const void*) _k, (b), (n), sizeof((b)[0]), (__compar_fn_t) _func_); \
+                const typeof((b)[0]) *_k = k;                           \
+                int (*_func_)(const typeof((b)[0])*, const typeof((b)[0])*) = func; \
+                bsearch_safe((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_fn_t) _func_); \
         })
 
 /**
  * Normal qsort requires base to be nonnull. Here were require
  * that only if nmemb > 0.
  */
-static inline void _qsort_safe(void *base, size_t nmemb, size_t size, __compar_fn_t compar) {
+static inline void _qsort_safe(void *base, size_t nmemb, size_t size, comparison_fn_t compar) {
         if (nmemb <= 1)
                 return;
 
@@ -55,11 +57,11 @@
  * is the prototype for the comparison function */
 #define typesafe_qsort(p, n, func)                                      \
         ({                                                              \
-                int (*_func_)(const typeof(p[0])*, const typeof(p[0])*) = func; \
-                _qsort_safe((p), (n), sizeof((p)[0]), (__compar_fn_t) _func_); \
+                int (*_func_)(const typeof((p)[0])*, const typeof((p)[0])*) = func; \
+                _qsort_safe((p), (n), sizeof((p)[0]), (comparison_fn_t) _func_); \
         })
 
-static inline void qsort_r_safe(void *base, size_t nmemb, size_t size, __compar_d_fn_t compar, void *userdata) {
+static inline void qsort_r_safe(void *base, size_t nmemb, size_t size, comparison_userdata_fn_t compar, void *userdata) {
         if (nmemb <= 1)
                 return;
 
@@ -69,8 +71,8 @@
 
 #define typesafe_qsort_r(p, n, func, userdata)                          \
         ({                                                              \
-                int (*_func_)(const typeof(p[0])*, const typeof(p[0])*, typeof(userdata)) = func; \
-                qsort_r_safe((p), (n), sizeof((p)[0]), (__compar_d_fn_t) _func_, userdata); \
+                int (*_func_)(const typeof((p)[0])*, const typeof((p)[0])*, typeof(userdata)) = func; \
+                qsort_r_safe((p), (n), sizeof((p)[0]), (comparison_userdata_fn_t) _func_, userdata); \
         })
 
 int cmp_int(const int *a, const int *b);
diff --git a/src/basic/sparse-endian.h b/src/basic/sparse-endian.h
index 9583dda..c795d3d 100644
--- a/src/basic/sparse-endian.h
+++ b/src/basic/sparse-endian.h
@@ -55,9 +55,9 @@
 #undef le64toh
 
 #if __BYTE_ORDER == __LITTLE_ENDIAN
-#define bswap_16_on_le(x) __bswap_16(x)
-#define bswap_32_on_le(x) __bswap_32(x)
-#define bswap_64_on_le(x) __bswap_64(x)
+#define bswap_16_on_le(x) bswap_16(x)
+#define bswap_32_on_le(x) bswap_32(x)
+#define bswap_64_on_le(x) bswap_64(x)
 #define bswap_16_on_be(x) (x)
 #define bswap_32_on_be(x) (x)
 #define bswap_64_on_be(x) (x)
@@ -65,9 +65,9 @@
 #define bswap_16_on_le(x) (x)
 #define bswap_32_on_le(x) (x)
 #define bswap_64_on_le(x) (x)
-#define bswap_16_on_be(x) __bswap_16(x)
-#define bswap_32_on_be(x) __bswap_32(x)
-#define bswap_64_on_be(x) __bswap_64(x)
+#define bswap_16_on_be(x) bswap_16(x)
+#define bswap_32_on_be(x) bswap_32(x)
+#define bswap_64_on_be(x) bswap_64(x)
 #endif
 
 static inline le16_t htole16(uint16_t value) { return (le16_t __sd_force) bswap_16_on_be(value); }
diff --git a/src/basic/special.h b/src/basic/special.h
index 78f22f1..0e4342e 100644
--- a/src/basic/special.h
+++ b/src/basic/special.h
@@ -20,6 +20,7 @@
 #define SPECIAL_HIBERNATE_TARGET "hibernate.target"
 #define SPECIAL_HYBRID_SLEEP_TARGET "hybrid-sleep.target"
 #define SPECIAL_SUSPEND_THEN_HIBERNATE_TARGET "suspend-then-hibernate.target"
+#define SPECIAL_FACTORY_RESET_TARGET "factory-reset.target"
 
 /* Special boot targets */
 #define SPECIAL_RESCUE_TARGET "rescue.target"
@@ -86,6 +87,10 @@
 #define SPECIAL_REMOUNT_FS_SERVICE "systemd-remount-fs.service"
 #define SPECIAL_VOLATILE_ROOT_SERVICE "systemd-volatile-root.service"
 #define SPECIAL_UDEVD_SERVICE "systemd-udevd.service"
+#define SPECIAL_GROWFS_SERVICE "systemd-growfs@.service"
+#define SPECIAL_GROWFS_ROOT_SERVICE "systemd-growfs-root.service"
+#define SPECIAL_PCRFS_SERVICE "systemd-pcrfs@.service"
+#define SPECIAL_PCRFS_ROOT_SERVICE "systemd-pcrfs-root.service"
 
 /* Services systemd relies on */
 #define SPECIAL_DBUS_SERVICE "dbus.service"
diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c
index 56f7652..700e28f 100644
--- a/src/basic/stat-util.c
+++ b/src/basic/stat-util.c
@@ -8,14 +8,19 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "dirent-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "filesystems.h"
 #include "fs-util.h"
+#include "hash-funcs.h"
 #include "macro.h"
 #include "missing_fs.h"
 #include "missing_magic.h"
 #include "missing_syscall.h"
+#include "nulstr-util.h"
 #include "parse-util.h"
 #include "stat-util.h"
 #include "string-util.h"
@@ -31,31 +36,23 @@
         return !!S_ISLNK(info.st_mode);
 }
 
-int is_dir(const char* path, bool follow) {
+int is_dir_full(int atfd, const char* path, bool follow) {
         struct stat st;
         int r;
 
-        assert(path);
+        assert(atfd >= 0 || atfd == AT_FDCWD);
+        assert(atfd >= 0 || path);
 
-        if (follow)
-                r = stat(path, &st);
+        if (path)
+                r = fstatat(atfd, path, &st, follow ? 0 : AT_SYMLINK_NOFOLLOW);
         else
-                r = lstat(path, &st);
+                r = fstat(atfd, &st);
         if (r < 0)
                 return -errno;
 
         return !!S_ISDIR(st.st_mode);
 }
 
-int is_dir_fd(int fd) {
-        struct stat st;
-
-        if (fstat(fd, &st) < 0)
-                return -errno;
-
-        return !!S_ISDIR(st.st_mode);
-}
-
 int is_device_node(const char *path) {
         struct stat info;
 
@@ -67,29 +64,55 @@
         return !!(S_ISBLK(info.st_mode) || S_ISCHR(info.st_mode));
 }
 
-int dir_is_empty_at(int dir_fd, const char *path) {
-        _cleanup_close_ int fd = -1;
-        _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
+int dir_is_empty_at(int dir_fd, const char *path, bool ignore_hidden_or_backup) {
+        _cleanup_close_ int fd = -EBADF;
+        struct dirent *buf;
+        size_t m;
 
         if (path) {
+                assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+
                 fd = openat(dir_fd, path, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
                 if (fd < 0)
                         return -errno;
+        } else if (dir_fd == AT_FDCWD) {
+                fd = open(".", O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+                if (fd < 0)
+                        return -errno;
         } else {
-                /* Note that DUPing is not enough, as the internal pointer
-                 * would still be shared and moved by FOREACH_DIRENT. */
+                /* Note that DUPing is not enough, as the internal pointer would still be shared and moved
+                 * getedents64(). */
+                assert(dir_fd >= 0);
+
                 fd = fd_reopen(dir_fd, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
                 if (fd < 0)
                         return fd;
         }
 
-        d = take_fdopendir(&fd);
-        if (!d)
-                return -errno;
+        /* Allocate space for at least 3 full dirents, since every dir has at least two entries ("."  +
+         * ".."), and only once we have seen if there's a third we know whether the dir is empty or not. If
+         * 'ignore_hidden_or_backup' is true we'll allocate a bit more, since we might skip over a bunch of
+         * entries that we end up ignoring. */
+        m = (ignore_hidden_or_backup ? 16 : 3) * DIRENT_SIZE_MAX;
+        buf = alloca(m);
 
-        FOREACH_DIRENT(de, d, return -errno)
-                return 0;
+        for (;;) {
+                struct dirent *de;
+                ssize_t n;
+
+                n = getdents64(fd, buf, m);
+                if (n < 0)
+                        return -errno;
+                if (n == 0)
+                        break;
+
+                assert((size_t) n <= m);
+                msan_unpoison(buf, n);
+
+                FOREACH_DIRENT_IN_BUFFER(de, buf, n)
+                        if (!(ignore_hidden_or_backup ? hidden_or_backup_file(de->d_name) : dot_or_dot_dot(de->d_name)))
+                                return 0;
+        }
 
         return 1;
 }
@@ -109,17 +132,22 @@
         return false;
 }
 
-int null_or_empty_path(const char *fn) {
+int null_or_empty_path_with_root(const char *fn, const char *root) {
         struct stat st;
+        int r;
 
         assert(fn);
 
-        /* If we have the path, let's do an easy text comparison first. */
-        if (path_equal(fn, "/dev/null"))
+        /* A symlink to /dev/null or an empty file?
+         * When looking under root_dir, we can't expect /dev/ to be mounted,
+         * so let's see if the path is a (possibly dangling) symlink to /dev/null. */
+
+        if (path_equal_ptr(path_startswith(fn, root ?: "/"), "dev/null"))
                 return true;
 
-        if (stat(fn, &st) < 0)
-                return -errno;
+        r = chase_symlinks_and_stat(fn, root, CHASE_PREFIX_ROOT, NULL, &st, NULL);
+        if (r < 0)
+                return r;
 
         return null_or_empty(&st);
 }
@@ -135,26 +163,37 @@
         return null_or_empty(&st);
 }
 
-int path_is_read_only_fs(const char *path) {
+static int fd_is_read_only_fs(int fd) {
         struct statvfs st;
 
-        assert(path);
+        assert(fd >= 0);
 
-        if (statvfs(path, &st) < 0)
+        if (fstatvfs(fd, &st) < 0)
                 return -errno;
 
         if (st.f_flag & ST_RDONLY)
                 return true;
 
-        /* On NFS, statvfs() might not reflect whether we can actually
-         * write to the remote share. Let's try again with
-         * access(W_OK) which is more reliable, at least sometimes. */
-        if (access(path, W_OK) < 0 && errno == EROFS)
+        /* On NFS, fstatvfs() might not reflect whether we can actually write to the remote share. Let's try
+         * again with access(W_OK) which is more reliable, at least sometimes. */
+        if (access_fd(fd, W_OK) == -EROFS)
                 return true;
 
         return false;
 }
 
+int path_is_read_only_fs(const char *path) {
+        _cleanup_close_ int fd = -EBADF;
+
+        assert(path);
+
+        fd = open(path, O_CLOEXEC | O_PATH);
+        if (fd < 0)
+                return -errno;
+
+        return fd_is_read_only_fs(fd);
+}
+
 int files_same(const char *filea, const char *fileb, int flags) {
         struct stat a, b;
 
@@ -167,8 +206,7 @@
         if (fstatat(AT_FDCWD, fileb, &b, flags) < 0)
                 return -errno;
 
-        return a.st_dev == b.st_dev &&
-               a.st_ino == b.st_ino;
+        return stat_inode_same(&a, &b);
 }
 
 bool is_fs_type(const struct statfs *s, statfs_f_type_t magic_value) {
@@ -197,19 +235,11 @@
 }
 
 bool is_temporary_fs(const struct statfs *s) {
-        return is_fs_type(s, TMPFS_MAGIC) ||
-                is_fs_type(s, RAMFS_MAGIC);
+        return fs_in_group(s, FILESYSTEM_SET_TEMPORARY);
 }
 
 bool is_network_fs(const struct statfs *s) {
-        return is_fs_type(s, CIFS_MAGIC_NUMBER) ||
-                is_fs_type(s, CODA_SUPER_MAGIC) ||
-                is_fs_type(s, NCP_SUPER_MAGIC) ||
-                is_fs_type(s, NFS_SUPER_MAGIC) ||
-                is_fs_type(s, SMB_SUPER_MAGIC) ||
-                is_fs_type(s, V9FS_MAGIC) ||
-                is_fs_type(s, AFS_SUPER_MAGIC) ||
-                is_fs_type(s, OCFS2_SUPER_MAGIC);
+        return fs_in_group(s, FILESYSTEM_SET_NETWORK);
 }
 
 int fd_is_temporary_fs(int fd) {
@@ -239,6 +269,15 @@
         return is_temporary_fs(&s);
 }
 
+int path_is_network_fs(const char *path) {
+        struct statfs s;
+
+        if (statfs(path, &s) < 0)
+                return -errno;
+
+        return is_network_fs(&s);
+}
+
 int stat_verify_regular(const struct stat *st) {
         assert(st);
 
@@ -291,101 +330,6 @@
         return stat_verify_directory(&st);
 }
 
-int device_path_make_major_minor(mode_t mode, dev_t devno, char **ret) {
-        const char *t;
-
-        /* Generates the /dev/{char|block}/MAJOR:MINOR path for a dev_t */
-
-        if (S_ISCHR(mode))
-                t = "char";
-        else if (S_ISBLK(mode))
-                t = "block";
-        else
-                return -ENODEV;
-
-        if (asprintf(ret, "/dev/%s/%u:%u", t, major(devno), minor(devno)) < 0)
-                return -ENOMEM;
-
-        return 0;
-}
-
-int device_path_make_canonical(mode_t mode, dev_t devno, char **ret) {
-        _cleanup_free_ char *p = NULL;
-        int r;
-
-        /* Finds the canonical path for a device, i.e. resolves the /dev/{char|block}/MAJOR:MINOR path to the end. */
-
-        assert(ret);
-
-        if (major(devno) == 0 && minor(devno) == 0) {
-                char *s;
-
-                /* A special hack to make sure our 'inaccessible' device nodes work. They won't have symlinks in
-                 * /dev/block/ and /dev/char/, hence we handle them specially here. */
-
-                if (S_ISCHR(mode))
-                        s = strdup("/run/systemd/inaccessible/chr");
-                else if (S_ISBLK(mode))
-                        s = strdup("/run/systemd/inaccessible/blk");
-                else
-                        return -ENODEV;
-
-                if (!s)
-                        return -ENOMEM;
-
-                *ret = s;
-                return 0;
-        }
-
-        r = device_path_make_major_minor(mode, devno, &p);
-        if (r < 0)
-                return r;
-
-        return chase_symlinks(p, NULL, 0, ret, NULL);
-}
-
-int device_path_parse_major_minor(const char *path, mode_t *ret_mode, dev_t *ret_devno) {
-        mode_t mode;
-        dev_t devno;
-        int r;
-
-        /* Tries to extract the major/minor directly from the device path if we can. Handles /dev/block/ and /dev/char/
-         * paths, as well out synthetic inaccessible device nodes. Never goes to disk. Returns -ENODEV if the device
-         * path cannot be parsed like this.  */
-
-        if (path_equal(path, "/run/systemd/inaccessible/chr")) {
-                mode = S_IFCHR;
-                devno = makedev(0, 0);
-        } else if (path_equal(path, "/run/systemd/inaccessible/blk")) {
-                mode = S_IFBLK;
-                devno = makedev(0, 0);
-        } else {
-                const char *w;
-
-                w = path_startswith(path, "/dev/block/");
-                if (w)
-                        mode = S_IFBLK;
-                else {
-                        w = path_startswith(path, "/dev/char/");
-                        if (!w)
-                                return -ENODEV;
-
-                        mode = S_IFCHR;
-                }
-
-                r = parse_dev(w, &devno);
-                if (r < 0)
-                        return r;
-        }
-
-        if (ret_mode)
-                *ret_mode = mode;
-        if (ret_devno)
-                *ret_devno = devno;
-
-        return 0;
-}
-
 int proc_mounted(void) {
         int r;
 
@@ -398,6 +342,18 @@
         return r;
 }
 
+bool stat_inode_same(const struct stat *a, const struct stat *b) {
+
+        /* Returns if the specified stat structure references the same (though possibly modified) inode. Does
+         * a thorough check, comparing inode nr, backing device and if the inode is still of the same type. */
+
+        return a && b &&
+                (a->st_mode & S_IFMT) != 0 && /* We use the check for .st_mode if the structure was ever initialized */
+                ((a->st_mode ^ b->st_mode) & S_IFMT) == 0 &&  /* same inode type */
+                a->st_dev == b->st_dev &&
+                a->st_ino == b->st_ino;
+}
+
 bool stat_inode_unmodified(const struct stat *a, const struct stat *b) {
 
         /* Returns if the specified stat structures reference the same, unmodified inode. This check tries to
@@ -409,17 +365,39 @@
          * about contents of the file. The purpose here is to detect file contents changes, and nothing
          * else. */
 
-        return a && b &&
-                (a->st_mode & S_IFMT) != 0 && /* We use the check for .st_mode if the structure was ever initialized */
-                ((a->st_mode ^ b->st_mode) & S_IFMT) == 0 &&  /* same inode type */
+        return stat_inode_same(a, b) &&
                 a->st_mtim.tv_sec == b->st_mtim.tv_sec &&
                 a->st_mtim.tv_nsec == b->st_mtim.tv_nsec &&
                 (!S_ISREG(a->st_mode) || a->st_size == b->st_size) && /* if regular file, compare file size */
-                a->st_dev == b->st_dev &&
-                a->st_ino == b->st_ino &&
                 (!(S_ISCHR(a->st_mode) || S_ISBLK(a->st_mode)) || a->st_rdev == b->st_rdev); /* if device node, also compare major/minor, because we can */
 }
 
+bool statx_inode_same(const struct statx *a, const struct statx *b) {
+
+        /* Same as stat_inode_same() but for struct statx */
+
+        return a && b &&
+                FLAGS_SET(a->stx_mask, STATX_TYPE|STATX_INO) && FLAGS_SET(b->stx_mask, STATX_TYPE|STATX_INO) &&
+                (a->stx_mode & S_IFMT) != 0 &&
+                ((a->stx_mode ^ b->stx_mode) & S_IFMT) == 0 &&
+                a->stx_dev_major == b->stx_dev_major &&
+                a->stx_dev_minor == b->stx_dev_minor &&
+                a->stx_ino == b->stx_ino;
+}
+
+bool statx_mount_same(const struct new_statx *a, const struct new_statx *b) {
+        if (!a || !b)
+                return false;
+
+        /* if we have the mount ID, that's all we need */
+        if (FLAGS_SET(a->stx_mask, STATX_MNT_ID) && FLAGS_SET(b->stx_mask, STATX_MNT_ID))
+                return a->stx_mnt_id == b->stx_mnt_id;
+
+        /* Otherwise, major/minor of backing device must match */
+        return a->stx_dev_major == b->stx_dev_major &&
+                a->stx_dev_minor == b->stx_dev_minor;
+}
+
 int statx_fallback(int dfd, const char *path, int flags, unsigned mask, struct statx *sx) {
         static bool avoid_statx = false;
         struct stat st;
@@ -475,3 +453,20 @@
 
         return 0;
 }
+
+void inode_hash_func(const struct stat *q, struct siphash *state) {
+        siphash24_compress(&q->st_dev, sizeof(q->st_dev), state);
+        siphash24_compress(&q->st_ino, sizeof(q->st_ino), state);
+}
+
+int inode_compare_func(const struct stat *a, const struct stat *b) {
+        int r;
+
+        r = CMP(a->st_dev, b->st_dev);
+        if (r != 0)
+                return r;
+
+        return CMP(a->st_ino, b->st_ino);
+}
+
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(inode_hash_ops, struct stat, inode_hash_func, inode_compare_func, free);
diff --git a/src/basic/stat-util.h b/src/basic/stat-util.h
index a566114..de11c0c 100644
--- a/src/basic/stat-util.h
+++ b/src/basic/stat-util.h
@@ -11,29 +11,31 @@
 
 #include "macro.h"
 #include "missing_stat.h"
+#include "siphash24.h"
 
 int is_symlink(const char *path);
-int is_dir(const char *path, bool follow);
-int is_dir_fd(int fd);
+int is_dir_full(int atfd, const char *fname, bool follow);
+static inline int is_dir(const char *path, bool follow) {
+        return is_dir_full(AT_FDCWD, path, follow);
+}
+static inline int is_dir_fd(int fd) {
+        return is_dir_full(fd, NULL, false);
+}
 int is_device_node(const char *path);
 
-int dir_is_empty_at(int dir_fd, const char *path);
-static inline int dir_is_empty(const char *path) {
-        return dir_is_empty_at(AT_FDCWD, path);
-}
-
-static inline int dir_is_populated(const char *path) {
-        int r;
-        r = dir_is_empty(path);
-        if (r < 0)
-                return r;
-        return !r;
+int dir_is_empty_at(int dir_fd, const char *path, bool ignore_hidden_or_backup);
+static inline int dir_is_empty(const char *path, bool ignore_hidden_or_backup) {
+        return dir_is_empty_at(AT_FDCWD, path, ignore_hidden_or_backup);
 }
 
 bool null_or_empty(struct stat *st) _pure_;
-int null_or_empty_path(const char *fn);
+int null_or_empty_path_with_root(const char *fn, const char *root);
 int null_or_empty_fd(int fd);
 
+static inline int null_or_empty_path(const char *fn) {
+        return null_or_empty_path_with_root(fn, NULL);
+}
+
 int path_is_read_only_fs(const char *path);
 
 int files_same(const char *filea, const char *fileb, int flags);
@@ -53,6 +55,7 @@
 int fd_is_network_fs(int fd);
 
 int path_is_temporary_fs(const char *path);
+int path_is_network_fs(const char *path);
 
 /* Because statfs.t_type can be int on some architectures, we have to cast
  * the const magic to the type, otherwise the compiler warns about
@@ -66,33 +69,14 @@
 int stat_verify_directory(const struct stat *st);
 int fd_verify_directory(int fd);
 
-/* glibc and the Linux kernel have different ideas about the major/minor size. These calls will check whether the
- * specified major is valid by the Linux kernel's standards, not by glibc's. Linux has 20bits of minor, and 12 bits of
- * major space. See MINORBITS in linux/kdev_t.h in the kernel sources. (If you wonder why we define _y here, instead of
- * comparing directly >= 0: it's to trick out -Wtype-limits, which would otherwise complain if the type is unsigned, as
- * such a test would be pointless in such a case.) */
-
-#define DEVICE_MAJOR_VALID(x)                                           \
-        ({                                                              \
-                typeof(x) _x = (x), _y = 0;                             \
-                _x >= _y && _x < (UINT32_C(1) << 12);                   \
-                                                                        \
-        })
-
-#define DEVICE_MINOR_VALID(x)                                           \
-        ({                                                              \
-                typeof(x) _x = (x), _y = 0;                             \
-                _x >= _y && _x < (UINT32_C(1) << 20);                   \
-        })
-
-int device_path_make_major_minor(mode_t mode, dev_t devno, char **ret);
-int device_path_make_canonical(mode_t mode, dev_t devno, char **ret);
-int device_path_parse_major_minor(const char *path, mode_t *ret_mode, dev_t *ret_devno);
-
 int proc_mounted(void);
 
+bool stat_inode_same(const struct stat *a, const struct stat *b);
 bool stat_inode_unmodified(const struct stat *a, const struct stat *b);
 
+bool statx_inode_same(const struct statx *a, const struct statx *b);
+bool statx_mount_same(const struct new_statx *a, const struct new_statx *b);
+
 int statx_fallback(int dfd, const char *path, int flags, unsigned mask, struct statx *sx);
 
 #if HAS_FEATURE_MEMORY_SANITIZER
@@ -113,3 +97,7 @@
                 struct new_statx nsx;           \
         } var
 #endif
+
+void inode_hash_func(const struct stat *q, struct siphash *state);
+int inode_compare_func(const struct stat *a, const struct stat *b);
+extern const struct hash_ops inode_hash_ops;
diff --git a/src/basic/static-destruct.h b/src/basic/static-destruct.h
index 7c5734d..97baac7 100644
--- a/src/basic/static-destruct.h
+++ b/src/basic/static-destruct.h
@@ -24,12 +24,16 @@
                 typeof(variable) *q = p;                                \
                 func(q);                                                \
         }                                                               \
-        /* The actual destructor structure we place in a special section to find it */ \
+        /* Older compilers don't know "retain" attribute. */            \
+        _Pragma("GCC diagnostic ignored \"-Wattributes\"")              \
+        /* The actual destructor structure we place in a special section to find it. */ \
         _section_("SYSTEMD_STATIC_DESTRUCT")                            \
-        /* We pick pointer alignment, since that is apparently what gcc does for static variables */ \
+        /* Use pointer alignment, since that is apparently what gcc does for static variables. */ \
         _alignptr_                                                      \
-        /* Make sure this is not dropped from the image because not explicitly referenced */ \
+        /* Make sure this is not dropped from the image despite not being explicitly referenced. */ \
         _used_                                                          \
+        /* Prevent garbage collection by the linker. */                 \
+        _retain_                                                        \
         /* Make sure that AddressSanitizer doesn't pad this variable: we want everything in this section
          * packed next to each other so that we can enumerate it. */     \
         _variable_no_sanitize_address_                                  \
@@ -51,9 +55,9 @@
         if (!__start_SYSTEMD_STATIC_DESTRUCT)
                 return;
 
-        d = ALIGN_TO_PTR(__start_SYSTEMD_STATIC_DESTRUCT, sizeof(void*));
+        d = ALIGN_PTR(__start_SYSTEMD_STATIC_DESTRUCT);
         while (d < __stop_SYSTEMD_STATIC_DESTRUCT) {
                 d->destroy(d->data);
-                d = ALIGN_TO_PTR(d + 1, sizeof(void*));
+                d = ALIGN_PTR(d + 1);
         }
 }
diff --git a/src/basic/stdio-util.h b/src/basic/stdio-util.h
index 6dc1e72..4e93ac9 100644
--- a/src/basic/stdio-util.h
+++ b/src/basic/stdio-util.h
@@ -7,13 +7,23 @@
 #include <sys/types.h>
 
 #include "macro.h"
-#include "memory-util.h"
 
-#define snprintf_ok(buf, len, fmt, ...) \
-        ((size_t) snprintf(buf, len, fmt, __VA_ARGS__) < (len))
+_printf_(3, 4)
+static inline char *snprintf_ok(char *buf, size_t len, const char *format, ...) {
+        va_list ap;
+        int r;
+
+        va_start(ap, format);
+        DISABLE_WARNING_FORMAT_NONLITERAL;
+        r = vsnprintf(buf, len, format, ap);
+        REENABLE_WARNING;
+        va_end(ap);
+
+        return r >= 0 && (size_t) r < len ? buf : NULL;
+}
 
 #define xsprintf(buf, fmt, ...) \
-        assert_message_se(snprintf_ok(buf, ELEMENTSOF(buf), fmt, __VA_ARGS__), "xsprintf: " #buf "[] must be big enough")
+        assert_message_se(snprintf_ok(buf, ELEMENTSOF(buf), fmt, ##__VA_ARGS__), "xsprintf: " #buf "[] must be big enough")
 
 #define VA_FORMAT_ADVANCE(format, ap)                                   \
 do {                                                                    \
@@ -21,7 +31,7 @@
         size_t _i, _k;                                                  \
         /* See https://github.com/google/sanitizers/issues/992 */       \
         if (HAS_FEATURE_MEMORY_SANITIZER)                               \
-                zero(_argtypes);                                        \
+                memset(_argtypes, 0, sizeof(_argtypes));                \
         _k = parse_printf_format((format), ELEMENTSOF(_argtypes), _argtypes); \
         assert(_k < ELEMENTSOF(_argtypes));                             \
         for (_i = 0; _i < _k; _i++) {                                   \
@@ -58,7 +68,7 @@
                         (void) va_arg(ap, long double);                 \
                         break;                                          \
                 default:                                                \
-                        assert_not_reached("Unknown format string argument."); \
+                        assert_not_reached();                           \
                 }                                                       \
         }                                                               \
 } while (false)
diff --git a/src/basic/string-table.h b/src/basic/string-table.h
index 97c1adc..e3a26a6 100644
--- a/src/basic/string-table.h
+++ b/src/basic/string-table.h
@@ -113,4 +113,4 @@
                         fputc_unlocked('\n', stdout);                   \
                 }                                                       \
                 funlockfile(stdout);                                    \
-        } while(false)
+        } while (false)
diff --git a/src/basic/string-util.c b/src/basic/string-util.c
index a645958..ad8c986 100644
--- a/src/basic/string-util.c
+++ b/src/basic/string-util.c
@@ -18,7 +18,6 @@
 #include "strv.h"
 #include "terminal-util.h"
 #include "utf8.h"
-#include "util.h"
 
 char* first_word(const char *s, const char *word) {
         size_t sl, wl;
@@ -521,6 +520,19 @@
         return s;
 }
 
+int strgrowpad0(char **s, size_t l) {
+        assert(s);
+
+        char *q = realloc(*s, l);
+        if (!q)
+                return -ENOMEM;
+        *s = q;
+
+        size_t sz = strlen(*s);
+        memzero(*s + sz, l - sz);
+        return 0;
+}
+
 char *strreplace(const char *text, const char *old_string, const char *new_string) {
         size_t l, old_len, new_len;
         char *t, *ret = NULL;
@@ -1146,3 +1158,105 @@
                 *ret_word = found;
         return !!found;
 }
+
+bool streq_skip_trailing_chars(const char *s1, const char *s2, const char *ok) {
+        if (!s1 && !s2)
+                return true;
+        if (!s1 || !s2)
+                return false;
+
+        if (!ok)
+                ok = WHITESPACE;
+
+        for (; *s1 && *s2; s1++, s2++)
+                if (*s1 != *s2)
+                        break;
+
+        return in_charset(s1, ok) && in_charset(s2, ok);
+}
+
+char *string_replace_char(char *str, char old_char, char new_char) {
+        assert(str);
+        assert(old_char != '\0');
+        assert(new_char != '\0');
+        assert(old_char != new_char);
+
+        for (char *p = strchr(str, old_char); p; p = strchr(p + 1, old_char))
+                *p = new_char;
+
+        return str;
+}
+
+int make_cstring(const char *s, size_t n, MakeCStringMode mode, char **ret) {
+        char *b;
+
+        assert(s || n == 0);
+        assert(mode >= 0);
+        assert(mode < _MAKE_CSTRING_MODE_MAX);
+
+        /* Converts a sized character buffer into a NUL-terminated NUL string, refusing if there are embedded
+         * NUL bytes. Whether to expect a trailing NUL byte can be specified via 'mode' */
+
+        if (n == 0) {
+                if (mode == MAKE_CSTRING_REQUIRE_TRAILING_NUL)
+                        return -EINVAL;
+
+                if (!ret)
+                        return 0;
+
+                b = new0(char, 1);
+        } else {
+                const char *nul;
+
+                nul = memchr(s, 0, n);
+                if (nul) {
+                        if (nul < s + n - 1 || /* embedded NUL? */
+                            mode == MAKE_CSTRING_REFUSE_TRAILING_NUL)
+                                return -EINVAL;
+
+                        n--;
+                } else if (mode == MAKE_CSTRING_REQUIRE_TRAILING_NUL)
+                        return -EINVAL;
+
+                if (!ret)
+                        return 0;
+
+                b = memdup_suffix0(s, n);
+        }
+        if (!b)
+                return -ENOMEM;
+
+        *ret = b;
+        return 0;
+}
+
+size_t strspn_from_end(const char *str, const char *accept) {
+        size_t n = 0;
+
+        if (isempty(str))
+                return 0;
+
+        if (isempty(accept))
+                return 0;
+
+        for (const char *p = str + strlen(str); p > str && strchr(accept, p[-1]); p--)
+                n++;
+
+        return n;
+}
+
+char *strdupspn(const char *a, const char *accept) {
+        if (isempty(a) || isempty(accept))
+                return strdup("");
+
+        return strndup(a, strspn(a, accept));
+}
+
+char *strdupcspn(const char *a, const char *reject) {
+        if (isempty(a))
+                return strdup("");
+        if (isempty(reject))
+                return strdup(a);
+
+        return strndup(a, strcspn(a, reject));
+}
diff --git a/src/basic/string-util.h b/src/basic/string-util.h
index 9155e50..e0a47a2 100644
--- a/src/basic/string-util.h
+++ b/src/basic/string-util.h
@@ -10,17 +10,18 @@
 #include "string-util-fundamental.h"
 
 /* What is interpreted as whitespace? */
-#define WHITESPACE        " \t\n\r"
-#define NEWLINE           "\n\r"
-#define QUOTES            "\"\'"
-#define COMMENTS          "#;"
-#define GLOB_CHARS        "*?["
-#define DIGITS            "0123456789"
-#define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz"
-#define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-#define LETTERS           LOWERCASE_LETTERS UPPERCASE_LETTERS
-#define ALPHANUMERICAL    LETTERS DIGITS
-#define HEXDIGITS         DIGITS "abcdefABCDEF"
+#define WHITESPACE          " \t\n\r"
+#define NEWLINE             "\n\r"
+#define QUOTES              "\"\'"
+#define COMMENTS            "#;"
+#define GLOB_CHARS          "*?["
+#define DIGITS              "0123456789"
+#define LOWERCASE_LETTERS   "abcdefghijklmnopqrstuvwxyz"
+#define UPPERCASE_LETTERS   "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+#define LETTERS             LOWERCASE_LETTERS UPPERCASE_LETTERS
+#define ALPHANUMERICAL      LETTERS DIGITS
+#define HEXDIGITS           DIGITS "abcdefABCDEF"
+#define LOWERCASE_HEXDIGITS DIGITS "abcdef"
 
 static inline char* strstr_ptr(const char *haystack, const char *needle) {
         if (!haystack || !needle)
@@ -28,10 +29,6 @@
         return strstr(haystack, needle);
 }
 
-static inline const char* strempty(const char *s) {
-        return s ?: "";
-}
-
 static inline const char* strnull(const char *s) {
         return s ?: "(null)";
 }
@@ -56,8 +53,16 @@
         return b ? "enable" : "disable";
 }
 
-static inline const char *empty_to_null(const char *p) {
-        return isempty(p) ? NULL : p;
+/* This macro's return pointer will have the "const" qualifier set or unset the same way as the input
+ * pointer. */
+#define empty_to_null(p)                                \
+        ({                                              \
+                const char *_p = (p);                   \
+                (typeof(p)) (isempty(_p) ? NULL : _p);  \
+        })
+
+static inline const char *empty_to_na(const char *p) {
+        return isempty(p) ? "n/a" : p;
 }
 
 static inline const char *empty_to_dash(const char *str) {
@@ -73,6 +78,11 @@
 static inline const char *empty_or_dash_to_null(const char *p) {
         return empty_or_dash(p) ? NULL : p;
 }
+#define empty_or_dash_to_null(p)                                \
+        ({                                                      \
+                const char *_p = (p);                           \
+                (typeof(p)) (empty_or_dash(_p) ? NULL : _p);    \
+        })
 
 char *first_word(const char *s, const char *word) _pure_;
 
@@ -151,6 +161,8 @@
 
 char* strshorten(char *s, size_t l);
 
+int strgrowpad0(char **s, size_t l);
+
 char *strreplace(const char *text, const char *old_string, const char *new_string);
 
 char *strip_tab_ansi(char **ibuf, size_t *_isz, size_t highlight[2]);
@@ -168,43 +180,23 @@
 
 int free_and_strdup(char **p, const char *s);
 static inline int free_and_strdup_warn(char **p, const char *s) {
-        if (free_and_strdup(p, s) < 0)
+        int r;
+
+        r = free_and_strdup(p, s);
+        if (r < 0)
                 return log_oom();
-        return 0;
+        return r;
 }
 int free_and_strndup(char **p, const char *s, size_t l);
 
 bool string_is_safe(const char *p) _pure_;
 
-static inline size_t strlen_ptr(const char *s) {
-        if (!s)
-                return 0;
-
-        return strlen(s);
-}
-
 DISABLE_WARNING_STRINGOP_TRUNCATION;
 static inline void strncpy_exact(char *buf, const char *src, size_t buf_len) {
         strncpy(buf, src, buf_len);
 }
 REENABLE_WARNING;
 
-/* Like startswith(), but operates on arbitrary memory blocks */
-static inline void *memory_startswith(const void *p, size_t sz, const char *token) {
-        assert(token);
-
-        size_t n = strlen(token);
-        if (sz < n)
-                return NULL;
-
-        assert(p);
-
-        if (memcmp(p, token, n) != 0)
-                return NULL;
-
-        return (uint8_t*) p + n;
-}
-
 /* Like startswith_no_case(), but operates on arbitrary memory blocks.
  * It works only for ASCII strings.
  */
@@ -242,3 +234,22 @@
 static inline int string_contains_word(const char *string, const char *separators, const char *word) {
         return string_contains_word_strv(string, separators, STRV_MAKE(word), NULL);
 }
+
+bool streq_skip_trailing_chars(const char *s1, const char *s2, const char *ok);
+
+char *string_replace_char(char *str, char old_char, char new_char);
+
+typedef enum MakeCStringMode {
+        MAKE_CSTRING_REFUSE_TRAILING_NUL,
+        MAKE_CSTRING_ALLOW_TRAILING_NUL,
+        MAKE_CSTRING_REQUIRE_TRAILING_NUL,
+        _MAKE_CSTRING_MODE_MAX,
+        _MAKE_CSTRING_MODE_INVALID = -1,
+} MakeCStringMode;
+
+int make_cstring(const char *s, size_t n, MakeCStringMode mode, char **ret);
+
+size_t strspn_from_end(const char *str, const char *accept);
+
+char *strdupspn(const char *a, const char *accept);
+char *strdupcspn(const char *a, const char *reject);
diff --git a/src/basic/strv.c b/src/basic/strv.c
index 3adf3c5..2b7a61d 100644
--- a/src/basic/strv.c
+++ b/src/basic/strv.c
@@ -16,9 +16,7 @@
 #include "string-util.h"
 #include "strv.h"
 
-char *strv_find(char * const *l, const char *name) {
-        char * const *i;
-
+char* strv_find(char * const *l, const char *name) {
         assert(name);
 
         STRV_FOREACH(i, l)
@@ -28,9 +26,7 @@
         return NULL;
 }
 
-char *strv_find_case(char * const *l, const char *name) {
-        char * const *i;
-
+char* strv_find_case(char * const *l, const char *name) {
         assert(name);
 
         STRV_FOREACH(i, l)
@@ -40,9 +36,7 @@
         return NULL;
 }
 
-char *strv_find_prefix(char * const *l, const char *name) {
-        char * const *i;
-
+char* strv_find_prefix(char * const *l, const char *name) {
         assert(name);
 
         STRV_FOREACH(i, l)
@@ -52,15 +46,15 @@
         return NULL;
 }
 
-char *strv_find_startswith(char * const *l, const char *name) {
-        char * const *i, *e;
-
+char* strv_find_startswith(char * const *l, const char *name) {
         assert(name);
 
         /* Like strv_find_prefix, but actually returns only the
          * suffix, not the whole item */
 
         STRV_FOREACH(i, l) {
+                char *e;
+
                 e = startswith(*i, name);
                 if (e)
                         return e;
@@ -69,60 +63,50 @@
         return NULL;
 }
 
-char **strv_free(char **l) {
-        char **k;
-
-        if (!l)
-                return NULL;
-
-        for (k = l; *k; k++)
+char** strv_free(char **l) {
+        STRV_FOREACH(k, l)
                 free(*k);
 
         return mfree(l);
 }
 
-char **strv_free_erase(char **l) {
-        char **i;
-
+char** strv_free_erase(char **l) {
         STRV_FOREACH(i, l)
                 erase_and_freep(i);
 
         return mfree(l);
 }
 
-char **strv_copy(char * const *l) {
-        char **r, **k;
+char** strv_copy(char * const *l) {
+        _cleanup_strv_free_ char **result = NULL;
+        char **k;
 
-        k = r = new(char*, strv_length(l) + 1);
-        if (!r)
+        result = new(char*, strv_length(l) + 1);
+        if (!result)
                 return NULL;
 
-        if (l)
-                for (; *l; k++, l++) {
-                        *k = strdup(*l);
-                        if (!*k) {
-                                strv_free(r);
-                                return NULL;
-                        }
-                }
+        k = result;
+        STRV_FOREACH(i, l) {
+                *k = strdup(*i);
+                if (!*k)
+                        return NULL;
+                k++;
+        }
 
         *k = NULL;
-        return r;
+        return TAKE_PTR(result);
 }
 
 size_t strv_length(char * const *l) {
         size_t n = 0;
 
-        if (!l)
-                return 0;
-
-        for (; *l; l++)
+        STRV_FOREACH(i, l)
                 n++;
 
         return n;
 }
 
-char **strv_new_ap(const char *x, va_list ap) {
+char** strv_new_ap(const char *x, va_list ap) {
         _cleanup_strv_free_ char **a = NULL;
         size_t n = 0, i = 0;
         va_list aq;
@@ -161,7 +145,7 @@
         return TAKE_PTR(a);
 }
 
-char **strv_new_internal(const char *x, ...) {
+char** strv_new_internal(const char *x, ...) {
         char **r;
         va_list ap;
 
@@ -173,8 +157,8 @@
 }
 
 int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates) {
-        char * const *s, **t;
-        size_t p, q, i = 0, j;
+        size_t p, q, i = 0;
+        char **t;
 
         assert(a);
 
@@ -195,7 +179,6 @@
         *a = t;
 
         STRV_FOREACH(s, b) {
-
                 if (filter_duplicates && strv_contains(t, *s))
                         continue;
 
@@ -212,7 +195,7 @@
         return (int) i;
 
 rollback:
-        for (j = 0; j < i; j++)
+        for (size_t j = 0; j < i; j++)
                 free(t[p + j]);
 
         t[p] = NULL;
@@ -220,7 +203,6 @@
 }
 
 int strv_extend_strv_concat(char ***a, char * const *b, const char *suffix) {
-        char * const *s;
         int r;
 
         STRV_FOREACH(s, b) {
@@ -285,7 +267,6 @@
                         return -ENOMEM;
 
                 l[n++] = TAKE_PTR(word);
-
                 l[n] = NULL;
         }
 
@@ -300,6 +281,24 @@
         return (int) n;
 }
 
+int strv_split_and_extend_full(char ***t, const char *s, const char *separators, bool filter_duplicates, ExtractFlags flags) {
+        _cleanup_strv_free_ char **l = NULL;
+        int r;
+
+        assert(t);
+        assert(s);
+
+        r = strv_split_full(&l, s, separators, flags);
+        if (r < 0)
+                return r;
+
+        r = strv_extend_strv(t, l, filter_duplicates);
+        if (r < 0)
+                return r;
+
+        return (int) strv_length(*t);
+}
+
 int strv_split_colon_pairs(char ***t, const char *s) {
         _cleanup_strv_free_ char **l = NULL;
         size_t n = 0;
@@ -352,8 +351,7 @@
         return (int) n;
 }
 
-char *strv_join_full(char * const *l, const char *separator, const char *prefix, bool unescape_separators) {
-        char * const *s;
+char* strv_join_full(char * const *l, const char *separator, const char *prefix, bool escape_separator) {
         char *r, *e;
         size_t n, k, m;
 
@@ -363,7 +361,7 @@
         k = strlen(separator);
         m = strlen_ptr(prefix);
 
-        if (unescape_separators) /* If there separator is multi-char, we won't know how to escape it. */
+        if (escape_separator) /* If the separator was multi-char, we wouldn't know how to escape it. */
                 assert(k == 1);
 
         n = 0;
@@ -371,7 +369,7 @@
                 if (s != l)
                         n += k;
 
-                bool needs_escaping = unescape_separators && strchr(*s, separator[0]);
+                bool needs_escaping = escape_separator && strchr(*s, *separator);
 
                 n += m + strlen(*s) * (1 + needs_escaping);
         }
@@ -388,11 +386,11 @@
                 if (prefix)
                         e = stpcpy(e, prefix);
 
-                bool needs_escaping = unescape_separators && strchr(*s, separator[0]);
+                bool needs_escaping = escape_separator && strchr(*s, *separator);
 
                 if (needs_escaping)
                         for (size_t i = 0; (*s)[i]; i++) {
-                                if ((*s)[i] == separator[0])
+                                if ((*s)[i] == *separator)
                                         *(e++) = '\\';
                                 *(e++) = (*s)[i];
                         }
@@ -405,27 +403,33 @@
         return r;
 }
 
-int strv_push(char ***l, char *value) {
-        char **c;
-        size_t n;
+int strv_push_with_size(char ***l, size_t *n, char *value) {
+        /* n is a pointer to a variable to store the size of l.
+         * If not given (i.e. n is NULL or *n is SIZE_MAX), size will be calculated using strv_length().
+         * If n is not NULL, the size after the push will be returned.
+         * If value is empty, no action is taken and *n is not set. */
 
         if (!value)
                 return 0;
 
-        n = strv_length(*l);
+        size_t size = n ? *n : SIZE_MAX;
+        if (size == SIZE_MAX)
+                size = strv_length(*l);
 
         /* Check for overflow */
-        if (n > SIZE_MAX-2)
+        if (size > SIZE_MAX-2)
                 return -ENOMEM;
 
-        c = reallocarray(*l, GREEDY_ALLOC_ROUND_UP(n + 2), sizeof(char*));
+        char **c = reallocarray(*l, GREEDY_ALLOC_ROUND_UP(size + 2), sizeof(char*));
         if (!c)
                 return -ENOMEM;
 
-        c[n] = value;
-        c[n+1] = NULL;
+        c[size] = value;
+        c[size+1] = NULL;
 
         *l = c;
+        if (n)
+                *n = size + 1;
         return 0;
 }
 
@@ -459,7 +463,7 @@
 
 int strv_insert(char ***l, size_t position, char *value) {
         char **c;
-        size_t n, m, i;
+        size_t n, m;
 
         if (!value)
                 return 0;
@@ -476,24 +480,20 @@
         if (!c)
                 return -ENOMEM;
 
-        for (i = 0; i < position; i++)
+        for (size_t i = 0; i < position; i++)
                 c[i] = (*l)[i];
         c[position] = value;
-        for (i = position; i < n; i++)
+        for (size_t i = position; i < n; i++)
                 c[i+1] = (*l)[i];
-
         c[n+1] = NULL;
 
-        free(*l);
-        *l = c;
-
-        return 0;
+        return free_and_replace(*l, c);
 }
 
-int strv_consume(char ***l, char *value) {
+int strv_consume_with_size(char ***l, size_t *n, char *value) {
         int r;
 
-        r = strv_push(l, value);
+        r = strv_push_with_size(l, n, value);
         if (r < 0)
                 free(value);
 
@@ -535,7 +535,7 @@
         return strv_consume_prepend(l, v);
 }
 
-int strv_extend(char ***l, const char *value) {
+int strv_extend_with_size(char ***l, size_t *n, const char *value) {
         char *v;
 
         if (!value)
@@ -545,7 +545,7 @@
         if (!v)
                 return -ENOMEM;
 
-        return strv_consume(l, v);
+        return strv_consume_with_size(l, n, v);
 }
 
 int strv_extend_front(char ***l, const char *value) {
@@ -584,9 +584,7 @@
         return 0;
 }
 
-char **strv_uniq(char **l) {
-        char **i;
-
+char** strv_uniq(char **l) {
         /* Drops duplicate entries. The first identical string will be
          * kept, the others dropped */
 
@@ -597,16 +595,14 @@
 }
 
 bool strv_is_uniq(char * const *l) {
-        char * const *i;
-
         STRV_FOREACH(i, l)
-                if (strv_find(i+1, *i))
+                if (strv_contains(i+1, *i))
                         return false;
 
         return true;
 }
 
-char **strv_remove(char **l, const char *s) {
+char** strv_remove(char **l, const char *s) {
         char **f, **t;
 
         if (!l)
@@ -627,127 +623,7 @@
         return l;
 }
 
-char **strv_parse_nulstr(const char *s, size_t l) {
-        /* l is the length of the input data, which will be split at NULs into
-         * elements of the resulting strv. Hence, the number of items in the resulting strv
-         * will be equal to one plus the number of NUL bytes in the l bytes starting at s,
-         * unless s[l-1] is NUL, in which case the final empty string is not stored in
-         * the resulting strv, and length is equal to the number of NUL bytes.
-         *
-         * Note that contrary to a normal nulstr which cannot contain empty strings, because
-         * the input data is terminated by any two consequent NUL bytes, this parser accepts
-         * empty strings in s.
-         */
-
-        const char *p;
-        size_t c = 0, i = 0;
-        char **v;
-
-        assert(s || l <= 0);
-
-        if (l <= 0)
-                return new0(char*, 1);
-
-        for (p = s; p < s + l; p++)
-                if (*p == 0)
-                        c++;
-
-        if (s[l-1] != 0)
-                c++;
-
-        v = new0(char*, c+1);
-        if (!v)
-                return NULL;
-
-        p = s;
-        while (p < s + l) {
-                const char *e;
-
-                e = memchr(p, 0, s + l - p);
-
-                v[i] = strndup(p, e ? e - p : s + l - p);
-                if (!v[i]) {
-                        strv_free(v);
-                        return NULL;
-                }
-
-                i++;
-
-                if (!e)
-                        break;
-
-                p = e + 1;
-        }
-
-        assert(i == c);
-
-        return v;
-}
-
-char **strv_split_nulstr(const char *s) {
-        const char *i;
-        char **r = NULL;
-
-        NULSTR_FOREACH(i, s)
-                if (strv_extend(&r, i) < 0) {
-                        strv_free(r);
-                        return NULL;
-                }
-
-        if (!r)
-                return strv_new(NULL);
-
-        return r;
-}
-
-int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) {
-        /* A valid nulstr with two NULs at the end will be created, but
-         * q will be the length without the two trailing NULs. Thus the output
-         * string is a valid nulstr and can be iterated over using NULSTR_FOREACH,
-         * and can also be parsed by strv_parse_nulstr as long as the length
-         * is provided separately.
-         */
-
-        _cleanup_free_ char *m = NULL;
-        char * const *i;
-        size_t n = 0;
-
-        assert(ret);
-        assert(ret_size);
-
-        STRV_FOREACH(i, l) {
-                size_t z;
-
-                z = strlen(*i);
-
-                if (!GREEDY_REALLOC(m, n + z + 2))
-                        return -ENOMEM;
-
-                memcpy(m + n, *i, z + 1);
-                n += z + 1;
-        }
-
-        if (!m) {
-                m = new0(char, 1);
-                if (!m)
-                        return -ENOMEM;
-                n = 1;
-        } else
-                /* make sure there is a second extra NUL at the end of resulting nulstr */
-                m[n] = '\0';
-
-        assert(n > 0);
-        *ret = m;
-        *ret_size = n - 1;
-
-        m = NULL;
-
-        return 0;
-}
-
 bool strv_overlap(char * const *a, char * const *b) {
-        char * const *i;
-
         STRV_FOREACH(i, a)
                 if (strv_contains(b, *i))
                         return true;
@@ -759,7 +635,7 @@
         return strcmp(*a, *b);
 }
 
-char **strv_sort(char **l) {
+char** strv_sort(char **l) {
         typesafe_qsort(l, strv_length(l), str_compare);
         return l;
 }
@@ -787,8 +663,6 @@
 }
 
 void strv_print(char * const *l) {
-        char * const *s;
-
         STRV_FOREACH(s, l)
                 puts(*s);
 }
@@ -808,22 +682,20 @@
         return strv_consume(l, x);
 }
 
-char **strv_reverse(char **l) {
-        size_t n, i;
+char** strv_reverse(char **l) {
+        size_t n;
 
         n = strv_length(l);
         if (n <= 1)
                 return l;
 
-        for (i = 0; i < n / 2; i++)
+        for (size_t i = 0; i < n / 2; i++)
                 SWAP_TWO(l[i], l[n-1-i]);
 
         return l;
 }
 
-char **strv_shell_escape(char **l, const char *bad) {
-        char **s;
-
+char** strv_shell_escape(char **l, const char *bad) {
         /* Escapes every character in every string in l that is in bad,
          * edits in-place, does not roll-back on error. */
 
@@ -841,30 +713,31 @@
         return l;
 }
 
-bool strv_fnmatch_full(char* const* patterns, const char *s, int flags, size_t *matched_pos) {
-        for (size_t i = 0; patterns && patterns[i]; i++)
-                if (fnmatch(patterns[i], s, flags) == 0) {
-                        if (matched_pos)
-                                *matched_pos = i;
-                        return true;
-                }
+bool strv_fnmatch_full(
+                char* const* patterns,
+                const char *s,
+                int flags,
+                size_t *ret_matched_pos) {
+
+        assert(s);
+
+        if (patterns)
+                for (size_t i = 0; patterns[i]; i++)
+                        /* NB: We treat all fnmatch() errors as equivalent to FNM_NOMATCH, i.e. if fnmatch() fails to
+                         * process the pattern for some reason we'll consider this equivalent to non-matching. */
+                        if (fnmatch(patterns[i], s, flags) == 0) {
+                                if (ret_matched_pos)
+                                        *ret_matched_pos = i;
+                                return true;
+                        }
+
+        if (ret_matched_pos)
+                *ret_matched_pos = SIZE_MAX;
 
         return false;
 }
 
-char ***strv_free_free(char ***l) {
-        char ***i;
-
-        if (!l)
-                return NULL;
-
-        for (i = l; *i; i++)
-                strv_free(*i);
-
-        return mfree(l);
-}
-
-char **strv_skip(char **l, size_t n) {
+char** strv_skip(char **l, size_t n) {
 
         while (n > 0) {
                 if (strv_isempty(l))
@@ -877,7 +750,7 @@
 }
 
 int strv_extend_n(char ***l, const char *value, size_t n) {
-        size_t i, j, k;
+        size_t i, k;
         char **nl;
 
         assert(l);
@@ -904,21 +777,36 @@
                 if (!nl[i])
                         goto rollback;
         }
-
         nl[i] = NULL;
+
         return 0;
 
 rollback:
-        for (j = k; j < i; j++)
+        for (size_t j = k; j < i; j++)
                 free(nl[j]);
-
         nl[k] = NULL;
+
         return -ENOMEM;
 }
 
+int strv_extend_assignment(char ***l, const char *lhs, const char *rhs) {
+        char *j;
+
+        assert(l);
+        assert(lhs);
+
+        if (!rhs) /* value is optional, in which case we suppress the field */
+                return 0;
+
+        j = strjoin(lhs, "=", rhs);
+        if (!j)
+                return -ENOMEM;
+
+        return strv_consume(l, j);
+}
+
 int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) {
         bool b = false;
-        char * const *s;
         int r;
 
         /* Like fputs(), but for strv, and with a less stupid argument order */
diff --git a/src/basic/strv.h b/src/basic/strv.h
index 911528f..1f8da85 100644
--- a/src/basic/strv.h
+++ b/src/basic/strv.h
@@ -13,45 +13,63 @@
 #include "macro.h"
 #include "string-util.h"
 
-char *strv_find(char * const *l, const char *name) _pure_;
-char *strv_find_case(char * const *l, const char *name) _pure_;
-char *strv_find_prefix(char * const *l, const char *name) _pure_;
-char *strv_find_startswith(char * const *l, const char *name) _pure_;
+char* strv_find(char * const *l, const char *name) _pure_;
+char* strv_find_case(char * const *l, const char *name) _pure_;
+char* strv_find_prefix(char * const *l, const char *name) _pure_;
+char* strv_find_startswith(char * const *l, const char *name) _pure_;
 
 #define strv_contains(l, s) (!!strv_find((l), (s)))
 #define strv_contains_case(l, s) (!!strv_find_case((l), (s)))
 
-char **strv_free(char **l);
+char** strv_free(char **l);
 DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free);
 #define _cleanup_strv_free_ _cleanup_(strv_freep)
 
-char **strv_free_erase(char **l);
+char** strv_free_erase(char **l);
 DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free_erase);
 #define _cleanup_strv_free_erase_ _cleanup_(strv_free_erasep)
 
-char **strv_copy(char * const *l);
+char** strv_copy(char * const *l);
 size_t strv_length(char * const *l) _pure_;
 
 int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates);
 int strv_extend_strv_concat(char ***a, char * const *b, const char *suffix);
 int strv_prepend(char ***l, const char *value);
-int strv_extend(char ***l, const char *value);
-int strv_extendf(char ***l, const char *format, ...) _printf_(2,0);
+
+/* _with_size() are lower-level functions where the size can be provided externally,
+ * which allows us to skip iterating over the strv to find the end, which saves
+ * a bit of time and reduces the complexity of appending from O(n²) to O(n). */
+
+int strv_extend_with_size(char ***l, size_t *n, const char *value);
+static inline int strv_extend(char ***l, const char *value) {
+        return strv_extend_with_size(l, NULL, value);
+}
+
+int strv_extendf(char ***l, const char *format, ...) _printf_(2,3);
 int strv_extend_front(char ***l, const char *value);
-int strv_push(char ***l, char *value);
+
+int strv_push_with_size(char ***l, size_t *n, char *value);
+static inline int strv_push(char ***l, char *value) {
+        return strv_push_with_size(l, NULL, value);
+}
 int strv_push_pair(char ***l, char *a, char *b);
+
 int strv_insert(char ***l, size_t position, char *value);
 
 static inline int strv_push_prepend(char ***l, char *value) {
         return strv_insert(l, 0, value);
 }
 
-int strv_consume(char ***l, char *value);
+int strv_consume_with_size(char ***l, size_t *n, char *value);
+static inline int strv_consume(char ***l, char *value) {
+        return strv_consume_with_size(l, NULL, value);
+}
+
 int strv_consume_pair(char ***l, char *a, char *b);
 int strv_consume_prepend(char ***l, char *value);
 
-char **strv_remove(char **l, const char *s);
-char **strv_uniq(char **l);
+char** strv_remove(char **l, const char *s);
+char** strv_uniq(char **l);
 bool strv_is_uniq(char * const *l);
 
 int strv_compare(char * const *a, char * const *b);
@@ -59,8 +77,8 @@
         return strv_compare(a, b) == 0;
 }
 
-char **strv_new_internal(const char *x, ...) _sentinel_;
-char **strv_new_ap(const char *x, va_list ap);
+char** strv_new_internal(const char *x, ...) _sentinel_;
+char** strv_new_ap(const char *x, va_list ap);
 #define strv_new(...) strv_new_internal(__VA_ARGS__, NULL)
 
 #define STRV_IGNORE ((const char *) POINTER_MAX)
@@ -74,17 +92,20 @@
 }
 
 int strv_split_full(char ***t, const char *s, const char *separators, ExtractFlags flags);
-static inline char **strv_split(const char *s, const char *separators) {
+static inline char** strv_split(const char *s, const char *separators) {
         char **ret;
 
-        if (strv_split_full(&ret, s, separators, 0) < 0)
+        if (strv_split_full(&ret, s, separators, EXTRACT_RETAIN_ESCAPE) < 0)
                 return NULL;
 
         return ret;
 }
 
+int strv_split_and_extend_full(char ***t, const char *s, const char *separators, bool filter_duplicates, ExtractFlags flags);
+#define strv_split_and_extend(t, s, sep, dup) strv_split_and_extend_full(t, s, sep, dup, 0)
+
 int strv_split_newlines_full(char ***ret, const char *s, ExtractFlags flags);
-static inline char **strv_split_newlines(const char *s) {
+static inline char** strv_split_newlines(const char *s) {
         char **ret;
 
         if (strv_split_newlines_full(&ret, s, 0) < 0)
@@ -98,42 +119,33 @@
  * string in the vector is an empty string. */
 int strv_split_colon_pairs(char ***t, const char *s);
 
-char *strv_join_full(char * const *l, const char *separator, const char *prefix, bool escape_separtor);
+char* strv_join_full(char * const *l, const char *separator, const char *prefix, bool escape_separator);
 static inline char *strv_join(char * const *l, const char *separator) {
         return strv_join_full(l, separator, NULL, false);
 }
 
-char **strv_parse_nulstr(const char *s, size_t l);
-char **strv_split_nulstr(const char *s);
-int strv_make_nulstr(char * const *l, char **p, size_t *n);
-
-static inline int strv_from_nulstr(char ***a, const char *nulstr) {
-        char **t;
-
-        t = strv_split_nulstr(nulstr);
-        if (!t)
-                return -ENOMEM;
-        *a = t;
-        return 0;
-}
-
 bool strv_overlap(char * const *a, char * const *b) _pure_;
 
-#define STRV_FOREACH(s, l)                      \
-        for ((s) = (l); (s) && *(s); (s)++)
+#define _STRV_FOREACH_BACKWARDS(s, l, h, i)                             \
+        for (typeof(*(l)) *s, *h = (l), *i = ({                         \
+                                size_t _len = strv_length(h);           \
+                                _len > 0 ? h + _len - 1 : NULL;         \
+                        });                                             \
+             (s = i);                                                   \
+             i = PTR_SUB1(i, h))
 
-#define STRV_FOREACH_BACKWARDS(s, l)                                \
-        for (s = ({                                                 \
-                        typeof(l) _l = l;                           \
-                        _l ? _l + strv_length(_l) - 1U : NULL;      \
-                        });                                         \
-             (l) && ((s) >= (l));                                   \
-             (s)--)
+#define STRV_FOREACH_BACKWARDS(s, l)                                    \
+        _STRV_FOREACH_BACKWARDS(s, l, UNIQ_T(h, UNIQ), UNIQ_T(i, UNIQ))
 
-#define STRV_FOREACH_PAIR(x, y, l)               \
-        for ((x) = (l), (y) = (x) ? (x+1) : NULL; (x) && *(x) && *(y); (x) += 2, (y) = (x + 1))
+#define _STRV_FOREACH_PAIR(x, y, l, i)                          \
+        for (typeof(*l) *x, *y, *i = (l);                       \
+             i && *(x = i) && *(y = i + 1);                     \
+             i += 2)
 
-char **strv_sort(char **l);
+#define STRV_FOREACH_PAIR(x, y, l)                      \
+        _STRV_FOREACH_PAIR(x, y, l, UNIQ_T(i, UNIQ))
+
+char** strv_sort(char **l);
 void strv_print(char * const *l);
 
 #define strv_from_stdarg_alloca(first)                          \
@@ -182,7 +194,7 @@
 #define STARTSWITH_SET(p, ...)                                  \
         ({                                                      \
                 const char *_p = (p);                           \
-                char  *_found = NULL, **_i;                     \
+                char *_found = NULL;                            \
                 STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) {      \
                         _found = startswith(_p, *_i);           \
                         if (_found)                             \
@@ -194,7 +206,7 @@
 #define ENDSWITH_SET(p, ...)                                    \
         ({                                                      \
                 const char *_p = (p);                           \
-                char  *_found = NULL, **_i;                     \
+                char *_found = NULL;                            \
                 STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) {      \
                         _found = endswith(_p, *_i);             \
                         if (_found)                             \
@@ -203,15 +215,18 @@
                 _found;                                         \
         })
 
-#define FOREACH_STRING(x, y, ...)                                       \
-        for (char **_l = STRV_MAKE(({ x = y; }), ##__VA_ARGS__);        \
+#define _FOREACH_STRING(uniq, x, y, ...)                                \
+        for (const char *x, * const*UNIQ_T(l, uniq) = STRV_MAKE_CONST(({ x = y; }), ##__VA_ARGS__); \
              x;                                                         \
-             x = *(++_l))
+             x = *(++UNIQ_T(l, uniq)))
 
-char **strv_reverse(char **l);
-char **strv_shell_escape(char **l, const char *bad);
+#define FOREACH_STRING(x, y, ...)                       \
+        _FOREACH_STRING(UNIQ, x, y, ##__VA_ARGS__)
 
-bool strv_fnmatch_full(char* const* patterns, const char *s, int flags, size_t *matched_pos);
+char** strv_reverse(char **l);
+char** strv_shell_escape(char **l, const char *bad);
+
+bool strv_fnmatch_full(char* const* patterns, const char *s, int flags, size_t *ret_matched_pos);
 static inline bool strv_fnmatch(char* const* patterns, const char *s) {
         return strv_fnmatch_full(patterns, s, 0, NULL);
 }
@@ -222,22 +237,16 @@
                strv_fnmatch_full(patterns, s, flags, NULL);
 }
 
-char ***strv_free_free(char ***l);
-DEFINE_TRIVIAL_CLEANUP_FUNC(char***, strv_free_free);
-
-char **strv_skip(char **l, size_t n);
+char** strv_skip(char **l, size_t n);
 
 int strv_extend_n(char ***l, const char *value, size_t n);
 
+int strv_extend_assignment(char ***l, const char *lhs, const char *rhs);
+
 int fputstrv(FILE *f, char * const *l, const char *separator, bool *space);
 
 #define strv_free_and_replace(a, b)             \
-        ({                                      \
-                strv_free(a);                   \
-                (a) = (b);                      \
-                (b) = NULL;                     \
-                0;                              \
-        })
+        free_and_replace_full(a, b, strv_free)
 
 extern const struct hash_ops string_strv_hash_ops;
 int _string_strv_hashmap_put(Hashmap **h, const char *key, const char *value  HASHMAP_DEBUG_PARAMS);
diff --git a/src/basic/strxcpyx.c b/src/basic/strxcpyx.c
index dbbf7d0..52b9565 100644
--- a/src/basic/strxcpyx.c
+++ b/src/basic/strxcpyx.c
@@ -15,57 +15,73 @@
 #include <stdio.h>
 #include <string.h>
 
+#include "string-util.h"
 #include "strxcpyx.h"
 
-size_t strnpcpy(char **dest, size_t size, const char *src, size_t len) {
+size_t strnpcpy_full(char **dest, size_t size, const char *src, size_t len, bool *ret_truncated) {
+        bool truncated = false;
+
         assert(dest);
         assert(src);
 
-        if (size == 0)
+        if (size == 0) {
+                if (ret_truncated)
+                        *ret_truncated = len > 0;
                 return 0;
+        }
 
         if (len >= size) {
                 if (size > 1)
                         *dest = mempcpy(*dest, src, size-1);
                 size = 0;
+                truncated = true;
         } else if (len > 0) {
                 *dest = mempcpy(*dest, src, len);
                 size -= len;
         }
 
+        if (ret_truncated)
+                *ret_truncated = truncated;
+
         *dest[0] = '\0';
         return size;
 }
 
-size_t strpcpy(char **dest, size_t size, const char *src) {
+size_t strpcpy_full(char **dest, size_t size, const char *src, bool *ret_truncated) {
         assert(dest);
         assert(src);
 
-        return strnpcpy(dest, size, src, strlen(src));
+        return strnpcpy_full(dest, size, src, strlen(src), ret_truncated);
 }
 
-size_t strpcpyf(char **dest, size_t size, const char *src, ...) {
+size_t strpcpyf_full(char **dest, size_t size, bool *ret_truncated, const char *src, ...) {
+        bool truncated = false;
         va_list va;
         int i;
 
         assert(dest);
         assert(src);
 
-        if (size == 0)
-                return 0;
-
         va_start(va, src);
         i = vsnprintf(*dest, size, src, va);
-        if (i < (int)size) {
+        va_end(va);
+
+        if (i < (int) size) {
                 *dest += i;
                 size -= i;
-        } else
+        } else {
                 size = 0;
-        va_end(va);
+                truncated = i > 0;
+        }
+
+        if (ret_truncated)
+                *ret_truncated = truncated;
+
         return size;
 }
 
-size_t strpcpyl(char **dest, size_t size, const char *src, ...) {
+size_t strpcpyl_full(char **dest, size_t size, bool *ret_truncated, const char *src, ...) {
+        bool truncated = false;
         va_list va;
 
         assert(dest);
@@ -73,31 +89,38 @@
 
         va_start(va, src);
         do {
-                size = strpcpy(dest, size, src);
+                bool t;
+
+                size = strpcpy_full(dest, size, src, &t);
+                truncated = truncated || t;
                 src = va_arg(va, char *);
         } while (src);
         va_end(va);
+
+        if (ret_truncated)
+                *ret_truncated = truncated;
         return size;
 }
 
-size_t strnscpy(char *dest, size_t size, const char *src, size_t len) {
+size_t strnscpy_full(char *dest, size_t size, const char *src, size_t len, bool *ret_truncated) {
         char *s;
 
         assert(dest);
         assert(src);
 
         s = dest;
-        return strnpcpy(&s, size, src, len);
+        return strnpcpy_full(&s, size, src, len, ret_truncated);
 }
 
-size_t strscpy(char *dest, size_t size, const char *src) {
+size_t strscpy_full(char *dest, size_t size, const char *src, bool *ret_truncated) {
         assert(dest);
         assert(src);
 
-        return strnscpy(dest, size, src, strlen(src));
+        return strnscpy_full(dest, size, src, strlen(src), ret_truncated);
 }
 
-size_t strscpyl(char *dest, size_t size, const char *src, ...) {
+size_t strscpyl_full(char *dest, size_t size, bool *ret_truncated, const char *src, ...) {
+        bool truncated = false;
         va_list va;
         char *s;
 
@@ -107,10 +130,16 @@
         va_start(va, src);
         s = dest;
         do {
-                size = strpcpy(&s, size, src);
+                bool t;
+
+                size = strpcpy_full(&s, size, src, &t);
+                truncated = truncated || t;
                 src = va_arg(va, char *);
         } while (src);
         va_end(va);
 
+        if (ret_truncated)
+                *ret_truncated = truncated;
+
         return size;
 }
diff --git a/src/basic/strxcpyx.h b/src/basic/strxcpyx.h
index cdef492..4a648ed 100644
--- a/src/basic/strxcpyx.h
+++ b/src/basic/strxcpyx.h
@@ -1,14 +1,33 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <stdbool.h>
 #include <stddef.h>
 
 #include "macro.h"
 
-size_t strnpcpy(char **dest, size_t size, const char *src, size_t len);
-size_t strpcpy(char **dest, size_t size, const char *src);
-size_t strpcpyf(char **dest, size_t size, const char *src, ...) _printf_(3, 4);
-size_t strpcpyl(char **dest, size_t size, const char *src, ...) _sentinel_;
-size_t strnscpy(char *dest, size_t size, const char *src, size_t len);
-size_t strscpy(char *dest, size_t size, const char *src);
-size_t strscpyl(char *dest, size_t size, const char *src, ...) _sentinel_;
+size_t strnpcpy_full(char **dest, size_t size, const char *src, size_t len, bool *ret_truncated);
+static inline size_t strnpcpy(char **dest, size_t size, const char *src, size_t len) {
+        return strnpcpy_full(dest, size, src, len, NULL);
+}
+size_t strpcpy_full(char **dest, size_t size, const char *src, bool *ret_truncated);
+static inline size_t strpcpy(char **dest, size_t size, const char *src) {
+        return strpcpy_full(dest, size, src, NULL);
+}
+size_t strpcpyf_full(char **dest, size_t size, bool *ret_truncated, const char *src, ...) _printf_(4, 5);
+#define strpcpyf(dest, size, src, ...) \
+        strpcpyf_full((dest), (size), NULL, (src), ##__VA_ARGS__)
+size_t strpcpyl_full(char **dest, size_t size, bool *ret_truncated, const char *src, ...) _sentinel_;
+#define strpcpyl(dest, size, src, ...) \
+        strpcpyl_full((dest), (size), NULL, (src), ##__VA_ARGS__)
+size_t strnscpy_full(char *dest, size_t size, const char *src, size_t len, bool *ret_truncated);
+static inline size_t strnscpy(char *dest, size_t size, const char *src, size_t len) {
+        return strnscpy_full(dest, size, src, len, NULL);
+}
+size_t strscpy_full(char *dest, size_t size, const char *src, bool *ret_truncated);
+static inline size_t strscpy(char *dest, size_t size, const char *src) {
+        return strscpy_full(dest, size, src, NULL);
+}
+size_t strscpyl_full(char *dest, size_t size, bool *ret_truncated, const char *src, ...) _sentinel_;
+#define strscpyl(dest, size, src, ...) \
+        strscpyl_full(dest, size, NULL, src, ##__VA_ARGS__)
diff --git a/src/basic/sync-util.c b/src/basic/sync-util.c
new file mode 100644
index 0000000..52c8c41
--- /dev/null
+++ b/src/basic/sync-util.c
@@ -0,0 +1,163 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include "fd-util.h"
+#include "fs-util.h"
+#include "path-util.h"
+#include "sync-util.h"
+
+int fsync_directory_of_file(int fd) {
+        _cleanup_close_ int dfd = -EBADF;
+        struct stat st;
+        int r;
+
+        assert(fd >= 0);
+
+        /* We only reasonably can do this for regular files and directories, or for O_PATH fds, hence check
+         * for the inode type first */
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        if (S_ISDIR(st.st_mode)) {
+                dfd = openat(fd, "..", O_RDONLY|O_DIRECTORY|O_CLOEXEC, 0);
+                if (dfd < 0)
+                        return -errno;
+
+        } else if (!S_ISREG(st.st_mode)) { /* Regular files are OK regardless if O_PATH or not, for all other
+                                            * types check O_PATH flag */
+                int flags;
+
+                flags = fcntl(fd, F_GETFL);
+                if (flags < 0)
+                        return -errno;
+
+                if (!FLAGS_SET(flags, O_PATH)) /* If O_PATH this refers to the inode in the fs, in which case
+                                                * we can sensibly do what is requested. Otherwise this refers
+                                                * to a socket, fifo or device node, where the concept of a
+                                                * containing directory doesn't make too much sense. */
+                        return -ENOTTY;
+        }
+
+        if (dfd < 0) {
+                _cleanup_free_ char *path = NULL;
+
+                r = fd_get_path(fd, &path);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to query /proc/self/fd/%d%s: %m",
+                                        fd,
+                                        r == -ENOSYS ? ", ignoring" : "");
+
+                        if (r == -ENOSYS)
+                                /* If /proc is not available, we're most likely running in some
+                                 * chroot environment, and syncing the directory is not very
+                                 * important in that case. Let's just silently do nothing. */
+                                return 0;
+
+                        return r;
+                }
+
+                if (!path_is_absolute(path))
+                        return -EINVAL;
+
+                dfd = open_parent(path, O_CLOEXEC|O_NOFOLLOW, 0);
+                if (dfd < 0)
+                        return dfd;
+        }
+
+        return RET_NERRNO(fsync(dfd));
+}
+
+int fsync_full(int fd) {
+        int r, q;
+
+        /* Sync both the file and the directory */
+
+        r = RET_NERRNO(fsync(fd));
+
+        q = fsync_directory_of_file(fd);
+        if (r < 0) /* Return earlier error */
+                return r;
+        if (q == -ENOTTY) /* Ignore if the 'fd' refers to a block device or so which doesn't really have a
+                           * parent dir */
+                return 0;
+        return q;
+}
+
+int fsync_path_at(int at_fd, const char *path) {
+        _cleanup_close_ int opened_fd = -EBADF;
+        int fd;
+
+        if (isempty(path)) {
+                if (at_fd == AT_FDCWD) {
+                        opened_fd = open(".", O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+                        if (opened_fd < 0)
+                                return -errno;
+
+                        fd = opened_fd;
+                } else
+                        fd = at_fd;
+        } else {
+                opened_fd = openat(at_fd, path, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
+                if (opened_fd < 0)
+                        return -errno;
+
+                fd = opened_fd;
+        }
+
+        return RET_NERRNO(fsync(fd));
+}
+
+int fsync_parent_at(int at_fd, const char *path) {
+        _cleanup_close_ int opened_fd = -EBADF;
+
+        if (isempty(path)) {
+                if (at_fd != AT_FDCWD)
+                        return fsync_directory_of_file(at_fd);
+
+                opened_fd = open("..", O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+                if (opened_fd < 0)
+                        return -errno;
+
+                return RET_NERRNO(fsync(opened_fd));
+        }
+
+        opened_fd = openat(at_fd, path, O_PATH|O_CLOEXEC|O_NOFOLLOW);
+        if (opened_fd < 0)
+                return -errno;
+
+        return fsync_directory_of_file(opened_fd);
+}
+
+int fsync_path_and_parent_at(int at_fd, const char *path) {
+        _cleanup_close_ int opened_fd = -EBADF;
+
+        if (isempty(path)) {
+                if (at_fd != AT_FDCWD)
+                        return fsync_full(at_fd);
+
+                opened_fd = open(".", O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+        } else
+                opened_fd = openat(at_fd, path, O_RDONLY|O_NOFOLLOW|O_NONBLOCK|O_CLOEXEC);
+        if (opened_fd < 0)
+                return -errno;
+
+        return fsync_full(opened_fd);
+}
+
+int syncfs_path(int at_fd, const char *path) {
+        _cleanup_close_ int fd = -EBADF;
+
+        if (isempty(path)) {
+                if (at_fd != AT_FDCWD)
+                        return RET_NERRNO(syncfs(at_fd));
+
+                fd = open(".", O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+        } else
+                fd = openat(at_fd, path, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
+        if (fd < 0)
+                return -errno;
+
+        return RET_NERRNO(syncfs(fd));
+}
diff --git a/src/basic/sync-util.h b/src/basic/sync-util.h
new file mode 100644
index 0000000..e449440
--- /dev/null
+++ b/src/basic/sync-util.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int fsync_directory_of_file(int fd);
+int fsync_full(int fd);
+
+int fsync_path_at(int at_fd, const char *path);
+int fsync_parent_at(int at_fd, const char *path);
+int fsync_path_and_parent_at(int at_fd, const char *path);
+
+int syncfs_path(int at_fd, const char *path);
diff --git a/src/basic/syscall-list.txt b/src/basic/syscall-list.txt
index b445063..fbc5566 100644
--- a/src/basic/syscall-list.txt
+++ b/src/basic/syscall-list.txt
@@ -106,6 +106,7 @@
 ftruncate64
 futex
 futex_time64
+futex_waitv
 futimesat
 get_kernel_syms
 get_mempolicy
@@ -203,6 +204,7 @@
 mbind
 membarrier
 memfd_create
+memfd_secret
 memory_ordering
 migrate_pages
 mincore
@@ -374,7 +376,6 @@
 pciconfig_write
 perf_event_open
 perfctr
-perfmonctl
 personality
 pidfd_getfd
 pidfd_open
@@ -394,6 +395,7 @@
 preadv2
 prlimit64
 process_madvise
+process_mrelease
 process_vm_readv
 process_vm_writev
 pselect6
@@ -404,7 +406,7 @@
 pwritev2
 query_module
 quotactl
-quotactl_path
+quotactl_fd
 read
 readahead
 readdir
@@ -471,6 +473,7 @@
 sendmsg
 sendto
 set_mempolicy
+set_mempolicy_home_node
 set_robust_list
 set_thread_area
 set_tid_address
diff --git a/src/basic/syscalls-alpha.txt b/src/basic/syscalls-alpha.txt
index 5aef86b..3898840 100644
--- a/src/basic/syscalls-alpha.txt
+++ b/src/basic/syscalls-alpha.txt
@@ -473,6 +473,7 @@
 sendmsg	114
 sendto	133
 set_mempolicy	431
+set_mempolicy_home_node	560
 set_robust_list	466
 set_thread_area
 set_tid_address	411
diff --git a/src/basic/syscalls-arc.txt b/src/basic/syscalls-arc.txt
index f275f10..801f551 100644
--- a/src/basic/syscalls-arc.txt
+++ b/src/basic/syscalls-arc.txt
@@ -473,6 +473,7 @@
 sendmsg	211
 sendto	206
 set_mempolicy	237
+set_mempolicy_home_node	450
 set_robust_list	99
 set_thread_area
 set_tid_address	96
diff --git a/src/basic/syscalls-arm.txt b/src/basic/syscalls-arm.txt
index 9037b28..94bbcbf 100644
--- a/src/basic/syscalls-arm.txt
+++ b/src/basic/syscalls-arm.txt
@@ -473,6 +473,7 @@
 sendmsg	296
 sendto	290
 set_mempolicy	321
+set_mempolicy_home_node	450
 set_robust_list	338
 set_thread_area
 set_tid_address	256
diff --git a/src/basic/syscalls-arm64.txt b/src/basic/syscalls-arm64.txt
index e91d7cf..207c439 100644
--- a/src/basic/syscalls-arm64.txt
+++ b/src/basic/syscalls-arm64.txt
@@ -473,6 +473,7 @@
 sendmsg	211
 sendto	206
 set_mempolicy	237
+set_mempolicy_home_node	450
 set_robust_list	99
 set_thread_area
 set_tid_address	96
diff --git a/src/basic/syscalls-i386.txt b/src/basic/syscalls-i386.txt
index 6b57d6f..4c0c993 100644
--- a/src/basic/syscalls-i386.txt
+++ b/src/basic/syscalls-i386.txt
@@ -473,6 +473,7 @@
 sendmsg	370
 sendto	369
 set_mempolicy	276
+set_mempolicy_home_node	450
 set_robust_list	311
 set_thread_area	243
 set_tid_address	258
diff --git a/src/basic/syscalls-ia64.txt b/src/basic/syscalls-ia64.txt
index 3d646f6..9346b2e 100644
--- a/src/basic/syscalls-ia64.txt
+++ b/src/basic/syscalls-ia64.txt
@@ -473,6 +473,7 @@
 sendmsg	1205
 sendto	1199
 set_mempolicy	1261
+set_mempolicy_home_node	1474
 set_robust_list	1298
 set_thread_area
 set_tid_address	1233
diff --git a/src/basic/syscalls-loongarch64.txt b/src/basic/syscalls-loongarch64.txt
new file mode 100644
index 0000000..a6a0bca
--- /dev/null
+++ b/src/basic/syscalls-loongarch64.txt
@@ -0,0 +1,601 @@
+_llseek
+_newselect
+_sysctl
+accept	202
+accept4	242
+access
+acct	89
+add_key	217
+adjtimex	171
+alarm
+arc_gettls
+arc_settls
+arc_usr_cmpxchg
+arch_prctl
+arm_fadvise64_64
+atomic_barrier
+atomic_cmpxchg_32
+bdflush
+bind	200
+bpf	280
+brk	214
+cachectl
+cacheflush
+capget	90
+capset	91
+chdir	49
+chmod
+chown
+chown32
+chroot	51
+clock_adjtime	266
+clock_adjtime64
+clock_getres	114
+clock_getres_time64
+clock_gettime	113
+clock_gettime64
+clock_nanosleep	115
+clock_nanosleep_time64
+clock_settime	112
+clock_settime64
+clone	220
+clone2
+clone3	435
+close	57
+close_range	436
+connect	203
+copy_file_range	285
+creat
+create_module
+delete_module	106
+dipc
+dup	23
+dup2
+dup3	24
+epoll_create
+epoll_create1	20
+epoll_ctl	21
+epoll_ctl_old
+epoll_pwait	22
+epoll_pwait2	441
+epoll_wait
+epoll_wait_old
+eventfd
+eventfd2	19
+exec_with_loader
+execv
+execve	221
+execveat	281
+exit	93
+exit_group	94
+faccessat	48
+faccessat2	439
+fadvise64	223
+fadvise64_64
+fallocate	47
+fanotify_init	262
+fanotify_mark	263
+fchdir	50
+fchmod	52
+fchmodat	53
+fchown	55
+fchown32
+fchownat	54
+fcntl	25
+fcntl64
+fdatasync	83
+fgetxattr	10
+finit_module	273
+flistxattr	13
+flock	32
+fork
+fp_udfiex_crtl
+fremovexattr	16
+fsconfig	431
+fsetxattr	7
+fsmount	432
+fsopen	430
+fspick	433
+fstat
+fstat64
+fstatat64
+fstatfs	44
+fstatfs64
+fsync	82
+ftruncate	46
+ftruncate64
+futex	98
+futex_time64
+futex_waitv	449
+futimesat
+get_kernel_syms
+get_mempolicy	236
+get_robust_list	100
+get_thread_area
+getcpu	168
+getcwd	17
+getdents
+getdents64	61
+getdomainname
+getdtablesize
+getegid	177
+getegid32
+geteuid	175
+geteuid32
+getgid	176
+getgid32
+getgroups	158
+getgroups32
+gethostname
+getitimer	102
+getpagesize
+getpeername	205
+getpgid	155
+getpgrp
+getpid	172
+getpmsg
+getppid	173
+getpriority	141
+getrandom	278
+getresgid	150
+getresgid32
+getresuid	148
+getresuid32
+getrlimit
+getrusage	165
+getsid	156
+getsockname	204
+getsockopt	209
+gettid	178
+gettimeofday	169
+getuid	174
+getuid32
+getunwind
+getxattr	8
+getxgid
+getxpid
+getxuid
+idle
+init_module	105
+inotify_add_watch	27
+inotify_init
+inotify_init1	26
+inotify_rm_watch	28
+io_cancel	3
+io_destroy	1
+io_getevents	4
+io_pgetevents	292
+io_pgetevents_time64
+io_setup	0
+io_submit	2
+io_uring_enter	426
+io_uring_register	427
+io_uring_setup	425
+ioctl	29
+ioperm
+iopl
+ioprio_get	31
+ioprio_set	30
+ipc
+kcmp	272
+kern_features
+kexec_file_load	294
+kexec_load	104
+keyctl	219
+kill	129
+landlock_add_rule	445
+landlock_create_ruleset	444
+landlock_restrict_self	446
+lchown
+lchown32
+lgetxattr	9
+link
+linkat	37
+listen	201
+listxattr	11
+llistxattr	12
+lookup_dcookie	18
+lremovexattr	15
+lseek	62
+lsetxattr	6
+lstat
+lstat64
+madvise	233
+mbind	235
+membarrier	283
+memfd_create	279
+memfd_secret
+memory_ordering
+migrate_pages	238
+mincore	232
+mkdir
+mkdirat	34
+mknod
+mknodat	33
+mlock	228
+mlock2	284
+mlockall	230
+mmap	222
+mmap2
+modify_ldt
+mount	40
+mount_setattr	442
+move_mount	429
+move_pages	239
+mprotect	226
+mq_getsetattr	185
+mq_notify	184
+mq_open	180
+mq_timedreceive	183
+mq_timedreceive_time64
+mq_timedsend	182
+mq_timedsend_time64
+mq_unlink	181
+mremap	216
+msgctl	187
+msgget	186
+msgrcv	188
+msgsnd	189
+msync	227
+multiplexer
+munlock	229
+munlockall	231
+munmap	215
+name_to_handle_at	264
+nanosleep	101
+newfstatat
+nfsservctl	42
+nice
+old_adjtimex
+old_getpagesize
+oldfstat
+oldlstat
+oldolduname
+oldstat
+oldumount
+olduname
+open
+open_by_handle_at	265
+open_tree	428
+openat	56
+openat2	437
+or1k_atomic
+osf_adjtime
+osf_afs_syscall
+osf_alt_plock
+osf_alt_setsid
+osf_alt_sigpending
+osf_asynch_daemon
+osf_audcntl
+osf_audgen
+osf_chflags
+osf_execve
+osf_exportfs
+osf_fchflags
+osf_fdatasync
+osf_fpathconf
+osf_fstat
+osf_fstatfs
+osf_fstatfs64
+osf_fuser
+osf_getaddressconf
+osf_getdirentries
+osf_getdomainname
+osf_getfh
+osf_getfsstat
+osf_gethostid
+osf_getitimer
+osf_getlogin
+osf_getmnt
+osf_getrusage
+osf_getsysinfo
+osf_gettimeofday
+osf_kloadcall
+osf_kmodcall
+osf_lstat
+osf_memcntl
+osf_mincore
+osf_mount
+osf_mremap
+osf_msfs_syscall
+osf_msleep
+osf_mvalid
+osf_mwakeup
+osf_naccept
+osf_nfssvc
+osf_ngetpeername
+osf_ngetsockname
+osf_nrecvfrom
+osf_nrecvmsg
+osf_nsendmsg
+osf_ntp_adjtime
+osf_ntp_gettime
+osf_old_creat
+osf_old_fstat
+osf_old_getpgrp
+osf_old_killpg
+osf_old_lstat
+osf_old_open
+osf_old_sigaction
+osf_old_sigblock
+osf_old_sigreturn
+osf_old_sigsetmask
+osf_old_sigvec
+osf_old_stat
+osf_old_vadvise
+osf_old_vtrace
+osf_old_wait
+osf_oldquota
+osf_pathconf
+osf_pid_block
+osf_pid_unblock
+osf_plock
+osf_priocntlset
+osf_profil
+osf_proplist_syscall
+osf_reboot
+osf_revoke
+osf_sbrk
+osf_security
+osf_select
+osf_set_program_attributes
+osf_set_speculative
+osf_sethostid
+osf_setitimer
+osf_setlogin
+osf_setsysinfo
+osf_settimeofday
+osf_shmat
+osf_signal
+osf_sigprocmask
+osf_sigsendset
+osf_sigstack
+osf_sigwaitprim
+osf_sstk
+osf_stat
+osf_statfs
+osf_statfs64
+osf_subsys_info
+osf_swapctl
+osf_swapon
+osf_syscall
+osf_sysinfo
+osf_table
+osf_uadmin
+osf_usleep_thread
+osf_uswitch
+osf_utc_adjtime
+osf_utc_gettime
+osf_utimes
+osf_utsname
+osf_wait4
+osf_waitid
+pause
+pciconfig_iobase
+pciconfig_read
+pciconfig_write
+perf_event_open	241
+perfctr
+personality	92
+pidfd_getfd	438
+pidfd_open	434
+pidfd_send_signal	424
+pipe
+pipe2	59
+pivot_root	41
+pkey_alloc	289
+pkey_free	290
+pkey_mprotect	288
+poll
+ppoll	73
+ppoll_time64
+prctl	167
+pread64	67
+preadv	69
+preadv2	286
+prlimit64	261
+process_madvise	440
+process_mrelease	448
+process_vm_readv	270
+process_vm_writev	271
+pselect6	72
+pselect6_time64
+ptrace	117
+pwrite64	68
+pwritev	70
+pwritev2	287
+query_module
+quotactl	60
+quotactl_fd	443
+read	63
+readahead	213
+readdir
+readlink
+readlinkat	78
+readv	65
+reboot	142
+recv
+recvfrom	207
+recvmmsg	243
+recvmmsg_time64
+recvmsg	212
+remap_file_pages	234
+removexattr	14
+rename
+renameat
+renameat2	276
+request_key	218
+restart_syscall	128
+riscv_flush_icache
+rmdir
+rseq	293
+rt_sigaction	134
+rt_sigpending	136
+rt_sigprocmask	135
+rt_sigqueueinfo	138
+rt_sigreturn	139
+rt_sigsuspend	133
+rt_sigtimedwait	137
+rt_sigtimedwait_time64
+rt_tgsigqueueinfo	240
+rtas
+s390_guarded_storage
+s390_pci_mmio_read
+s390_pci_mmio_write
+s390_runtime_instr
+s390_sthyi
+sched_get_affinity
+sched_get_priority_max	125
+sched_get_priority_min	126
+sched_getaffinity	123
+sched_getattr	275
+sched_getparam	121
+sched_getscheduler	120
+sched_rr_get_interval	127
+sched_rr_get_interval_time64
+sched_set_affinity
+sched_setaffinity	122
+sched_setattr	274
+sched_setparam	118
+sched_setscheduler	119
+sched_yield	124
+seccomp	277
+select
+semctl	191
+semget	190
+semop	193
+semtimedop	192
+semtimedop_time64
+send
+sendfile	71
+sendfile64
+sendmmsg	269
+sendmsg	211
+sendto	206
+set_mempolicy	237
+set_mempolicy_home_node	450
+set_robust_list	99
+set_thread_area
+set_tid_address	96
+setdomainname	162
+setfsgid	152
+setfsgid32
+setfsuid	151
+setfsuid32
+setgid	144
+setgid32
+setgroups	159
+setgroups32
+sethae
+sethostname	161
+setitimer	103
+setns	268
+setpgid	154
+setpgrp
+setpriority	140
+setregid	143
+setregid32
+setresgid	149
+setresgid32
+setresuid	147
+setresuid32
+setreuid	145
+setreuid32
+setrlimit
+setsid	157
+setsockopt	208
+settimeofday	170
+setuid	146
+setuid32
+setxattr	5
+sgetmask
+shmat	196
+shmctl	195
+shmdt	197
+shmget	194
+shutdown	210
+sigaction
+sigaltstack	132
+signal
+signalfd
+signalfd4	74
+sigpending
+sigprocmask
+sigreturn
+sigsuspend
+socket	198
+socketcall
+socketpair	199
+splice	76
+spu_create
+spu_run
+ssetmask
+stat
+stat64
+statfs	43
+statfs64
+statx	291
+stime
+subpage_prot
+swapcontext
+swapoff	225
+swapon	224
+switch_endian
+symlink
+symlinkat	36
+sync	81
+sync_file_range	84
+sync_file_range2
+syncfs	267
+sys_debug_setcontext
+syscall
+sysfs
+sysinfo	179
+syslog	116
+sysmips
+tee	77
+tgkill	131
+time
+timer_create	107
+timer_delete	111
+timer_getoverrun	109
+timer_gettime	108
+timer_gettime64
+timer_settime	110
+timer_settime64
+timerfd
+timerfd_create	85
+timerfd_gettime	87
+timerfd_gettime64
+timerfd_settime	86
+timerfd_settime64
+times	153
+tkill	130
+truncate	45
+truncate64
+ugetrlimit
+umask	166
+umount
+umount2	39
+uname	160
+unlink
+unlinkat	35
+unshare	97
+uselib
+userfaultfd	282
+ustat
+utime
+utimensat	88
+utimensat_time64
+utimes
+utrap_install
+vfork
+vhangup	58
+vm86
+vm86old
+vmsplice	75
+wait4	260
+waitid	95
+waitpid
+write	64
+writev	66
diff --git a/src/basic/syscalls-m68k.txt b/src/basic/syscalls-m68k.txt
index ef7295d..f5a9568 100644
--- a/src/basic/syscalls-m68k.txt
+++ b/src/basic/syscalls-m68k.txt
@@ -473,6 +473,7 @@
 sendmsg	367
 sendto	366
 set_mempolicy	270
+set_mempolicy_home_node	450
 set_robust_list	304
 set_thread_area	334
 set_tid_address	253
diff --git a/src/basic/syscalls-mips64.txt b/src/basic/syscalls-mips64.txt
index 1f7ff56..7d0b997 100644
--- a/src/basic/syscalls-mips64.txt
+++ b/src/basic/syscalls-mips64.txt
@@ -473,6 +473,7 @@
 sendmsg	5045
 sendto	5043
 set_mempolicy	5229
+set_mempolicy_home_node	5450
 set_robust_list	5268
 set_thread_area	5242
 set_tid_address	5212
diff --git a/src/basic/syscalls-mips64n32.txt b/src/basic/syscalls-mips64n32.txt
index 7e1ad96..2e15c66 100644
--- a/src/basic/syscalls-mips64n32.txt
+++ b/src/basic/syscalls-mips64n32.txt
@@ -473,6 +473,7 @@
 sendmsg	6045
 sendto	6043
 set_mempolicy	6233
+set_mempolicy_home_node	6450
 set_robust_list	6272
 set_thread_area	6246
 set_tid_address	6213
diff --git a/src/basic/syscalls-mipso32.txt b/src/basic/syscalls-mipso32.txt
index c0c262f..a8d95e3 100644
--- a/src/basic/syscalls-mipso32.txt
+++ b/src/basic/syscalls-mipso32.txt
@@ -473,6 +473,7 @@
 sendmsg	4179
 sendto	4180
 set_mempolicy	4270
+set_mempolicy_home_node	4450
 set_robust_list	4309
 set_thread_area	4283
 set_tid_address	4252
diff --git a/src/basic/syscalls-parisc.txt b/src/basic/syscalls-parisc.txt
new file mode 100644
index 0000000..905729f
--- /dev/null
+++ b/src/basic/syscalls-parisc.txt
@@ -0,0 +1,601 @@
+_llseek	140
+_newselect	142
+_sysctl	149
+accept	35
+accept4	320
+access	33
+acct	51
+add_key	264
+adjtimex	124
+alarm	27
+arc_gettls
+arc_settls
+arc_usr_cmpxchg
+arch_prctl
+arm_fadvise64_64
+atomic_barrier
+atomic_cmpxchg_32
+bdflush	134
+bind	22
+bpf	341
+brk	45
+cachectl
+cacheflush
+capget	106
+capset	107
+chdir	12
+chmod	15
+chown	180
+chown32
+chroot	61
+clock_adjtime	324
+clock_adjtime64	405
+clock_getres	257
+clock_getres_time64	406
+clock_gettime	256
+clock_gettime64	403
+clock_nanosleep	258
+clock_nanosleep_time64	407
+clock_settime	255
+clock_settime64	404
+clone	120
+clone2
+clone3	435
+close	6
+close_range	436
+connect	31
+copy_file_range	346
+creat	8
+create_module
+delete_module	129
+dipc
+dup	41
+dup2	63
+dup3	312
+epoll_create	224
+epoll_create1	311
+epoll_ctl	225
+epoll_ctl_old
+epoll_pwait	297
+epoll_pwait2	441
+epoll_wait	226
+epoll_wait_old
+eventfd	304
+eventfd2	310
+exec_with_loader
+execv
+execve	11
+execveat	342
+exit	1
+exit_group	222
+faccessat	287
+faccessat2	439
+fadvise64
+fadvise64_64	236
+fallocate	305
+fanotify_init	322
+fanotify_mark	323
+fchdir	133
+fchmod	94
+fchmodat	286
+fchown	95
+fchown32
+fchownat	278
+fcntl	55
+fcntl64	202
+fdatasync	148
+fgetxattr	243
+finit_module	333
+flistxattr	246
+flock	143
+fork	2
+fp_udfiex_crtl
+fremovexattr	249
+fsconfig	431
+fsetxattr	240
+fsmount	432
+fsopen	430
+fspick	433
+fstat	28
+fstat64	112
+fstatat64	280
+fstatfs	100
+fstatfs64	299
+fsync	118
+ftruncate	93
+ftruncate64	200
+futex	210
+futex_time64	422
+futex_waitv	449
+futimesat	279
+get_kernel_syms
+get_mempolicy	261
+get_robust_list	290
+get_thread_area
+getcpu	296
+getcwd	110
+getdents	141
+getdents64	201
+getdomainname
+getdtablesize
+getegid	50
+getegid32
+geteuid	49
+geteuid32
+getgid	47
+getgid32
+getgroups	80
+getgroups32
+gethostname
+getitimer	105
+getpagesize
+getpeername	53
+getpgid	132
+getpgrp	65
+getpid	20
+getpmsg
+getppid	64
+getpriority	96
+getrandom	339
+getresgid	171
+getresgid32
+getresuid	165
+getresuid32
+getrlimit	76
+getrusage	77
+getsid	147
+getsockname	44
+getsockopt	182
+gettid	206
+gettimeofday	78
+getuid	24
+getuid32
+getunwind
+getxattr	241
+getxgid
+getxpid
+getxuid
+idle
+init_module	128
+inotify_add_watch	270
+inotify_init	269
+inotify_init1	314
+inotify_rm_watch	271
+io_cancel	219
+io_destroy	216
+io_getevents	217
+io_pgetevents	350
+io_pgetevents_time64	416
+io_setup	215
+io_submit	218
+io_uring_enter	426
+io_uring_register	427
+io_uring_setup	425
+ioctl	54
+ioperm
+iopl
+ioprio_get	268
+ioprio_set	267
+ipc
+kcmp	332
+kern_features
+kexec_file_load	355
+kexec_load	300
+keyctl	266
+kill	37
+landlock_add_rule	445
+landlock_create_ruleset	444
+landlock_restrict_self	446
+lchown	16
+lchown32
+lgetxattr	242
+link	9
+linkat	283
+listen	32
+listxattr	244
+llistxattr	245
+lookup_dcookie	223
+lremovexattr	248
+lseek	19
+lsetxattr	239
+lstat	84
+lstat64	198
+madvise	119
+mbind	260
+membarrier	343
+memfd_create	340
+memfd_secret
+memory_ordering
+migrate_pages	272
+mincore	72
+mkdir	39
+mkdirat	276
+mknod	14
+mknodat	277
+mlock	150
+mlock2	345
+mlockall	152
+mmap	90
+mmap2	89
+modify_ldt
+mount	21
+mount_setattr	442
+move_mount	429
+move_pages	295
+mprotect	125
+mq_getsetattr	234
+mq_notify	233
+mq_open	229
+mq_timedreceive	232
+mq_timedreceive_time64	419
+mq_timedsend	231
+mq_timedsend_time64	418
+mq_unlink	230
+mremap	163
+msgctl	191
+msgget	190
+msgrcv	189
+msgsnd	188
+msync	144
+multiplexer
+munlock	151
+munlockall	153
+munmap	91
+name_to_handle_at	325
+nanosleep	162
+newfstatat
+nfsservctl
+nice	34
+old_adjtimex
+old_getpagesize
+oldfstat
+oldlstat
+oldolduname
+oldstat
+oldumount
+olduname
+open	5
+open_by_handle_at	326
+open_tree	428
+openat	275
+openat2	437
+or1k_atomic
+osf_adjtime
+osf_afs_syscall
+osf_alt_plock
+osf_alt_setsid
+osf_alt_sigpending
+osf_asynch_daemon
+osf_audcntl
+osf_audgen
+osf_chflags
+osf_execve
+osf_exportfs
+osf_fchflags
+osf_fdatasync
+osf_fpathconf
+osf_fstat
+osf_fstatfs
+osf_fstatfs64
+osf_fuser
+osf_getaddressconf
+osf_getdirentries
+osf_getdomainname
+osf_getfh
+osf_getfsstat
+osf_gethostid
+osf_getitimer
+osf_getlogin
+osf_getmnt
+osf_getrusage
+osf_getsysinfo
+osf_gettimeofday
+osf_kloadcall
+osf_kmodcall
+osf_lstat
+osf_memcntl
+osf_mincore
+osf_mount
+osf_mremap
+osf_msfs_syscall
+osf_msleep
+osf_mvalid
+osf_mwakeup
+osf_naccept
+osf_nfssvc
+osf_ngetpeername
+osf_ngetsockname
+osf_nrecvfrom
+osf_nrecvmsg
+osf_nsendmsg
+osf_ntp_adjtime
+osf_ntp_gettime
+osf_old_creat
+osf_old_fstat
+osf_old_getpgrp
+osf_old_killpg
+osf_old_lstat
+osf_old_open
+osf_old_sigaction
+osf_old_sigblock
+osf_old_sigreturn
+osf_old_sigsetmask
+osf_old_sigvec
+osf_old_stat
+osf_old_vadvise
+osf_old_vtrace
+osf_old_wait
+osf_oldquota
+osf_pathconf
+osf_pid_block
+osf_pid_unblock
+osf_plock
+osf_priocntlset
+osf_profil
+osf_proplist_syscall
+osf_reboot
+osf_revoke
+osf_sbrk
+osf_security
+osf_select
+osf_set_program_attributes
+osf_set_speculative
+osf_sethostid
+osf_setitimer
+osf_setlogin
+osf_setsysinfo
+osf_settimeofday
+osf_shmat
+osf_signal
+osf_sigprocmask
+osf_sigsendset
+osf_sigstack
+osf_sigwaitprim
+osf_sstk
+osf_stat
+osf_statfs
+osf_statfs64
+osf_subsys_info
+osf_swapctl
+osf_swapon
+osf_syscall
+osf_sysinfo
+osf_table
+osf_uadmin
+osf_usleep_thread
+osf_uswitch
+osf_utc_adjtime
+osf_utc_gettime
+osf_utimes
+osf_utsname
+osf_wait4
+osf_waitid
+pause	29
+pciconfig_iobase
+pciconfig_read
+pciconfig_write
+perf_event_open	318
+perfctr
+personality	136
+pidfd_getfd	438
+pidfd_open	434
+pidfd_send_signal	424
+pipe	42
+pipe2	313
+pivot_root	67
+pkey_alloc	352
+pkey_free	353
+pkey_mprotect	351
+poll	168
+ppoll	274
+ppoll_time64	414
+prctl	172
+pread64	108
+preadv	315
+preadv2	347
+prlimit64	321
+process_madvise	440
+process_mrelease	448
+process_vm_readv	330
+process_vm_writev	331
+pselect6	273
+pselect6_time64	413
+ptrace	26
+pwrite64	109
+pwritev	316
+pwritev2	348
+query_module
+quotactl	131
+quotactl_fd	443
+read	3
+readahead	207
+readdir
+readlink	85
+readlinkat	285
+readv	145
+reboot	88
+recv	98
+recvfrom	123
+recvmmsg	319
+recvmmsg_time64	417
+recvmsg	184
+remap_file_pages	227
+removexattr	247
+rename	38
+renameat	282
+renameat2	337
+request_key	265
+restart_syscall	0
+riscv_flush_icache
+rmdir	40
+rseq	354
+rt_sigaction	174
+rt_sigpending	176
+rt_sigprocmask	175
+rt_sigqueueinfo	178
+rt_sigreturn	173
+rt_sigsuspend	179
+rt_sigtimedwait	177
+rt_sigtimedwait_time64	421
+rt_tgsigqueueinfo	317
+rtas
+s390_guarded_storage
+s390_pci_mmio_read
+s390_pci_mmio_write
+s390_runtime_instr
+s390_sthyi
+sched_get_affinity
+sched_get_priority_max	159
+sched_get_priority_min	160
+sched_getaffinity	212
+sched_getattr	335
+sched_getparam	155
+sched_getscheduler	157
+sched_rr_get_interval	161
+sched_rr_get_interval_time64	423
+sched_set_affinity
+sched_setaffinity	211
+sched_setattr	334
+sched_setparam	154
+sched_setscheduler	156
+sched_yield	158
+seccomp	338
+select
+semctl	187
+semget	186
+semop	185
+semtimedop	228
+semtimedop_time64	420
+send	58
+sendfile	122
+sendfile64	209
+sendmmsg	329
+sendmsg	183
+sendto	82
+set_mempolicy	262
+set_mempolicy_home_node	450
+set_robust_list	289
+set_thread_area
+set_tid_address	237
+setdomainname	121
+setfsgid	139
+setfsgid32
+setfsuid	138
+setfsuid32
+setgid	46
+setgid32
+setgroups	81
+setgroups32
+sethae
+sethostname	74
+setitimer	104
+setns	328
+setpgid	57
+setpgrp
+setpriority	97
+setregid	71
+setregid32
+setresgid	170
+setresgid32
+setresuid	164
+setresuid32
+setreuid	70
+setreuid32
+setrlimit	75
+setsid	66
+setsockopt	181
+settimeofday	79
+setuid	23
+setuid32
+setxattr	238
+sgetmask	68
+shmat	192
+shmctl	195
+shmdt	193
+shmget	194
+shutdown	117
+sigaction
+sigaltstack	166
+signal	48
+signalfd	302
+signalfd4	309
+sigpending	73
+sigprocmask	126
+sigreturn
+sigsuspend
+socket	17
+socketcall
+socketpair	56
+splice	291
+spu_create
+spu_run
+ssetmask	69
+stat	18
+stat64	101
+statfs	99
+statfs64	298
+statx	349
+stime	25
+subpage_prot
+swapcontext
+swapoff	115
+swapon	87
+switch_endian
+symlink	83
+symlinkat	284
+sync	36
+sync_file_range	292
+sync_file_range2
+syncfs	327
+sys_debug_setcontext
+syscall
+sysfs	135
+sysinfo	116
+syslog	103
+sysmips
+tee	293
+tgkill	259
+time	13
+timer_create	250
+timer_delete	254
+timer_getoverrun	253
+timer_gettime	252
+timer_gettime64	408
+timer_settime	251
+timer_settime64	409
+timerfd
+timerfd_create	306
+timerfd_gettime	308
+timerfd_gettime64	410
+timerfd_settime	307
+timerfd_settime64	411
+times	43
+tkill	208
+truncate	92
+truncate64	199
+ugetrlimit
+umask	60
+umount
+umount2	52
+uname	59
+unlink	10
+unlinkat	281
+unshare	288
+uselib	86
+userfaultfd	344
+ustat	62
+utime	30
+utimensat	301
+utimensat_time64	412
+utimes	336
+utrap_install
+vfork	113
+vhangup	111
+vm86
+vm86old
+vmsplice	294
+wait4	114
+waitid	235
+waitpid	7
+write	4
+writev	146
diff --git a/src/basic/syscalls-powerpc.txt b/src/basic/syscalls-powerpc.txt
index 2f08516..ad68616 100644
--- a/src/basic/syscalls-powerpc.txt
+++ b/src/basic/syscalls-powerpc.txt
@@ -473,6 +473,7 @@
 sendmsg	341
 sendto	335
 set_mempolicy	261
+set_mempolicy_home_node	450
 set_robust_list	300
 set_thread_area
 set_tid_address	232
diff --git a/src/basic/syscalls-powerpc64.txt b/src/basic/syscalls-powerpc64.txt
index 85e5342..9e8dc6d 100644
--- a/src/basic/syscalls-powerpc64.txt
+++ b/src/basic/syscalls-powerpc64.txt
@@ -473,6 +473,7 @@
 sendmsg	341
 sendto	335
 set_mempolicy	261
+set_mempolicy_home_node	450
 set_robust_list	300
 set_thread_area
 set_tid_address	232
diff --git a/src/basic/syscalls-riscv32.txt b/src/basic/syscalls-riscv32.txt
index 013e381..50f4de6 100644
--- a/src/basic/syscalls-riscv32.txt
+++ b/src/basic/syscalls-riscv32.txt
@@ -204,7 +204,7 @@
 mbind	235
 membarrier	283
 memfd_create	279
-memfd_secret
+memfd_secret	447
 memory_ordering
 migrate_pages	238
 mincore	232
@@ -473,6 +473,7 @@
 sendmsg	211
 sendto	206
 set_mempolicy	237
+set_mempolicy_home_node	450
 set_robust_list	99
 set_thread_area
 set_tid_address	96
diff --git a/src/basic/syscalls-riscv64.txt b/src/basic/syscalls-riscv64.txt
index 104a2d9..afa33b2 100644
--- a/src/basic/syscalls-riscv64.txt
+++ b/src/basic/syscalls-riscv64.txt
@@ -204,7 +204,7 @@
 mbind	235
 membarrier	283
 memfd_create	279
-memfd_secret
+memfd_secret	447
 memory_ordering
 migrate_pages	238
 mincore	232
@@ -473,6 +473,7 @@
 sendmsg	211
 sendto	206
 set_mempolicy	237
+set_mempolicy_home_node	450
 set_robust_list	99
 set_thread_area
 set_tid_address	96
diff --git a/src/basic/syscalls-s390.txt b/src/basic/syscalls-s390.txt
index a25093c..bbc824c 100644
--- a/src/basic/syscalls-s390.txt
+++ b/src/basic/syscalls-s390.txt
@@ -473,6 +473,7 @@
 sendmsg	370
 sendto	369
 set_mempolicy	270
+set_mempolicy_home_node	450
 set_robust_list	304
 set_thread_area
 set_tid_address	252
diff --git a/src/basic/syscalls-s390x.txt b/src/basic/syscalls-s390x.txt
index b4b798f..bc385ea 100644
--- a/src/basic/syscalls-s390x.txt
+++ b/src/basic/syscalls-s390x.txt
@@ -473,6 +473,7 @@
 sendmsg	370
 sendto	369
 set_mempolicy	270
+set_mempolicy_home_node	450
 set_robust_list	304
 set_thread_area
 set_tid_address	252
diff --git a/src/basic/syscalls-sparc.txt b/src/basic/syscalls-sparc.txt
index a382e75..6c39ad8 100644
--- a/src/basic/syscalls-sparc.txt
+++ b/src/basic/syscalls-sparc.txt
@@ -473,6 +473,7 @@
 sendmsg	114
 sendto	133
 set_mempolicy	305
+set_mempolicy_home_node	450
 set_robust_list	300
 set_thread_area
 set_tid_address	166
diff --git a/src/basic/syscalls-x86_64.txt b/src/basic/syscalls-x86_64.txt
index 5bc9c58..2942c2e 100644
--- a/src/basic/syscalls-x86_64.txt
+++ b/src/basic/syscalls-x86_64.txt
@@ -473,6 +473,7 @@
 sendmsg	46
 sendto	44
 set_mempolicy	238
+set_mempolicy_home_node	450
 set_robust_list	273
 set_thread_area	205
 set_tid_address	218
diff --git a/src/basic/sysctl-util.c b/src/basic/sysctl-util.c
index 8913e6f..b66a662 100644
--- a/src/basic/sysctl-util.c
+++ b/src/basic/sysctl-util.c
@@ -5,11 +5,13 @@
 #include <stdio.h>
 #include <unistd.h>
 
+#include "af-list.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "log.h"
 #include "macro.h"
 #include "path-util.h"
+#include "socket-util.h"
 #include "string-util.h"
 #include "sysctl-util.h"
 
@@ -36,7 +38,7 @@
         path_simplify(s);
 
         /* Kill the leading slash, but keep the first character of the string in the same place. */
-        if (*s == '/' && *(s+1))
+        if (s[0] == '/' && s[1] != 0)
                 memmove(s, s+1, strlen(s));
 
         return s;
@@ -44,25 +46,19 @@
 
 int sysctl_write(const char *property, const char *value) {
         char *p;
-        _cleanup_close_ int fd = -1;
 
         assert(property);
         assert(value);
 
-        log_debug("Setting '%s' to '%.*s'.", property, (int) strcspn(value, NEWLINE), value);
-
         p = strjoina("/proc/sys/", property);
-        fd = open(p, O_WRONLY|O_CLOEXEC);
-        if (fd < 0)
-                return -errno;
 
-        if (!endswith(value, "\n"))
-                value = strjoina(value, "\n");
+        path_simplify(p);
+        if (!path_is_normalized(p))
+                return -EINVAL;
 
-        if (write(fd, value, strlen(value)) < 0)
-                return -errno;
+        log_debug("Setting '%s' to '%s'", p, value);
 
-        return 0;
+        return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL);
 }
 
 int sysctl_writef(const char *property, const char *format, ...) {
@@ -83,48 +79,59 @@
 int sysctl_write_ip_property(int af, const char *ifname, const char *property, const char *value) {
         const char *p;
 
-        assert(IN_SET(af, AF_INET, AF_INET6));
         assert(property);
         assert(value);
 
-        p = strjoina("/proc/sys/net/ipv", af == AF_INET ? "4" : "6",
-                     ifname ? "/conf/" : "", strempty(ifname),
-                     property[0] == '/' ? "" : "/", property);
+        if (!IN_SET(af, AF_INET, AF_INET6))
+                return -EAFNOSUPPORT;
 
-        log_debug("Setting '%s' to '%s'", p, value);
+        if (ifname) {
+                if (!ifname_valid_full(ifname, IFNAME_VALID_SPECIAL))
+                        return -EINVAL;
 
-        return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_DISABLE_BUFFER);
+                p = strjoina("net/", af_to_ipv4_ipv6(af), "/conf/", ifname, "/", property);
+        } else
+                p = strjoina("net/", af_to_ipv4_ipv6(af), "/", property);
+
+        return sysctl_write(p, value);
 }
 
 int sysctl_read(const char *property, char **ret) {
         char *p;
+        int r;
 
         assert(property);
-        assert(ret);
 
         p = strjoina("/proc/sys/", property);
-        return read_full_virtual_file(p, ret, NULL);
+
+        path_simplify(p);
+        if (!path_is_normalized(p)) /* Filter out attempts to write to /proc/sys/../../…, just in case */
+                return -EINVAL;
+
+        r = read_full_virtual_file(p, ret, NULL);
+        if (r < 0)
+                return r;
+        if (ret)
+                delete_trailing_chars(*ret, NEWLINE);
+
+        return r;
 }
 
 int sysctl_read_ip_property(int af, const char *ifname, const char *property, char **ret) {
-        _cleanup_free_ char *value = NULL;
         const char *p;
-        int r;
 
-        assert(IN_SET(af, AF_INET, AF_INET6));
         assert(property);
 
-        p = strjoina("/proc/sys/net/ipv", af == AF_INET ? "4" : "6",
-                     ifname ? "/conf/" : "", strempty(ifname),
-                     property[0] == '/' ? "" : "/", property);
+        if (!IN_SET(af, AF_INET, AF_INET6))
+                return -EAFNOSUPPORT;
 
-        r = read_full_virtual_file(p, &value, NULL);
-        if (r < 0)
-                return r;
+        if (ifname) {
+                if (!ifname_valid_full(ifname, IFNAME_VALID_SPECIAL))
+                        return -EINVAL;
 
-        truncate_nl(value);
-        if (ret)
-                *ret = TAKE_PTR(value);
+                p = strjoina("net/", af_to_ipv4_ipv6(af), "/conf/", ifname, "/", property);
+        } else
+                p = strjoina("net/", af_to_ipv4_ipv6(af), "/", property);
 
-        return r;
+        return sysctl_read(p, ret);
 }
diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c
index d769423..5cf2055 100644
--- a/src/basic/terminal-util.c
+++ b/src/basic/terminal-util.c
@@ -21,11 +21,13 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
-#include "def.h"
+#include "constants.h"
+#include "devnum-util.h"
 #include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "inotify-util.h"
 #include "io-util.h"
 #include "log.h"
 #include "macro.h"
@@ -42,7 +44,6 @@
 #include "terminal-util.h"
 #include "time-util.h"
 #include "user-util.h"
-#include "util.h"
 
 static volatile unsigned cached_columns = 0;
 static volatile unsigned cached_lines = 0;
@@ -52,7 +53,7 @@
 static volatile int cached_underline_enabled = -1;
 
 int chvt(int vt) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         /* Switch to the specified vt number. If the VT is specified <= 0 switch to the VT the kernel log messages go,
          * if that's configured. */
@@ -73,10 +74,7 @@
                 vt = tiocl[0] <= 0 ? 1 : tiocl[0];
         }
 
-        if (ioctl(fd, VT_ACTIVATE, vt) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, VT_ACTIVATE, vt));
 }
 
 int read_one_char(FILE *f, char *ret, usec_t t, bool *need_nl) {
@@ -270,7 +268,7 @@
 
         termios.c_iflag &= ~(IGNBRK | BRKINT | ISTRIP | INLCR | IGNCR | IUCLC);
         termios.c_iflag |= ICRNL | IMAXBEL | IUTF8;
-        termios.c_oflag |= ONLCR;
+        termios.c_oflag |= ONLCR | OPOST;
         termios.c_cflag |= CREAD;
         termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOPRT | ECHOKE;
 
@@ -302,7 +300,7 @@
 }
 
 int reset_terminal(const char *name) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         /* We open the terminal with O_NONBLOCK here, to ensure we
          * don't block on carrier if this is a terminal with carrier
@@ -316,7 +314,7 @@
 }
 
 int open_terminal(const char *name, int mode) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         unsigned c = 0;
 
         /*
@@ -357,7 +355,7 @@
                 AcquireTerminalFlags flags,
                 usec_t timeout) {
 
-        _cleanup_close_ int notify = -1, fd = -1;
+        _cleanup_close_ int notify = -EBADF, fd = -EBADF;
         usec_t ts = USEC_INFINITY;
         int r, wd = -1;
 
@@ -408,8 +406,7 @@
                 assert_se(sigaction(SIGHUP, &sa_new, &sa_old) == 0);
 
                 /* First, try to get the tty */
-                r = ioctl(fd, TIOCSCTTY,
-                          (flags & ~ACQUIRE_TERMINAL_PERMISSIVE) == ACQUIRE_TERMINAL_FORCE) < 0 ? -errno : 0;
+                r = RET_NERRNO(ioctl(fd, TIOCSCTTY, (flags & ~ACQUIRE_TERMINAL_PERMISSIVE) == ACQUIRE_TERMINAL_FORCE));
 
                 /* Reset signal handler to old value */
                 assert_se(sigaction(SIGHUP, &sa_old, NULL) == 0);
@@ -435,7 +432,6 @@
 
                 for (;;) {
                         union inotify_event_buffer buffer;
-                        struct inotify_event *e;
                         ssize_t l;
 
                         if (timeout != USEC_INFINITY) {
@@ -456,7 +452,7 @@
 
                         l = read(notify, &buffer, sizeof(buffer));
                         if (l < 0) {
-                                if (IN_SET(errno, EINTR, EAGAIN))
+                                if (ERRNO_IS_TRANSIENT(errno))
                                         continue;
 
                                 return -errno;
@@ -487,7 +483,7 @@
                 .sa_flags = SA_RESTART,
         };
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct sigaction sa_old;
         int r;
 
@@ -499,7 +495,7 @@
          * by our own TIOCNOTTY */
         assert_se(sigaction(SIGHUP, &sa_new, &sa_old) == 0);
 
-        r = ioctl(fd, TIOCNOTTY) < 0 ? -errno : 0;
+        r = RET_NERRNO(ioctl(fd, TIOCNOTTY));
 
         assert_se(sigaction(SIGHUP, &sa_old, NULL) == 0);
 
@@ -508,15 +504,11 @@
 
 int terminal_vhangup_fd(int fd) {
         assert(fd >= 0);
-
-        if (ioctl(fd, TIOCVHANGUP) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, TIOCVHANGUP));
 }
 
 int terminal_vhangup(const char *name) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC|O_NONBLOCK);
         if (fd < 0)
@@ -538,7 +530,7 @@
                 return -EINVAL;
 
         if (tty_is_vc(name)) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 unsigned u;
                 const char *n;
 
@@ -631,7 +623,7 @@
         if (!startswith(tty, "tty") )
                 return -EINVAL;
 
-        if (tty[3] < '0' || tty[3] > '9')
+        if (!ascii_isdigit(tty[3]))
                 return -EINVAL;
 
         r = safe_atoi(tty+3, &i);
@@ -856,6 +848,39 @@
         return cached_lines;
 }
 
+int terminal_set_size_fd(int fd, const char *ident, unsigned rows, unsigned cols) {
+        struct winsize ws;
+
+        if (rows == UINT_MAX && cols == UINT_MAX)
+                return 0;
+
+        if (ioctl(fd, TIOCGWINSZ, &ws) < 0)
+                return log_debug_errno(errno,
+                                       "TIOCGWINSZ ioctl for getting %s size failed, not setting terminal size: %m",
+                                       ident ?: "TTY");
+
+        if (rows == UINT_MAX)
+                rows = ws.ws_row;
+        else if (rows > USHRT_MAX)
+                rows = USHRT_MAX;
+
+        if (cols == UINT_MAX)
+                cols = ws.ws_col;
+        else if (cols > USHRT_MAX)
+                cols = USHRT_MAX;
+
+        if (rows == ws.ws_row && cols == ws.ws_col)
+                return 0;
+
+        ws.ws_row = rows;
+        ws.ws_col = cols;
+
+        if (ioctl(fd, TIOCSWINSZ, &ws) < 0)
+                return log_debug_errno(errno, "TIOCSWINSZ ioctl for setting %s size failed: %m", ident ?: "TTY");
+
+        return 0;
+}
+
 /* intended to be used as a SIGWINCH sighandler */
 void columns_lines_cache_reset(int signum) {
         cached_columns = 0;
@@ -1058,7 +1083,7 @@
 }
 
 int openpt_allocate(int flags, char **ret_slave) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_free_ char *p = NULL;
         int r;
 
@@ -1104,8 +1129,8 @@
 }
 
 int openpt_allocate_in_namespace(pid_t pid, int flags, char **ret_slave) {
-        _cleanup_close_ int pidnsfd = -1, mntnsfd = -1, usernsfd = -1, rootfd = -1, fd = -1;
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+        _cleanup_close_ int pidnsfd = -EBADF, mntnsfd = -EBADF, usernsfd = -EBADF, rootfd = -EBADF, fd = -EBADF;
+        _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
         pid_t child;
         int r;
 
@@ -1157,8 +1182,8 @@
 }
 
 int open_terminal_in_namespace(pid_t pid, const char *name, int mode) {
-        _cleanup_close_ int pidnsfd = -1, mntnsfd = -1, usernsfd = -1, rootfd = -1;
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+        _cleanup_close_ int pidnsfd = -EBADF, mntnsfd = -EBADF, usernsfd = -EBADF, rootfd = -EBADF;
+        _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
         pid_t child;
         int r;
 
@@ -1252,7 +1277,7 @@
                         /* We only check for the presence of the variable; value is ignored. */
                         cached_color_mode = COLOR_OFF;
 
-                else if (getpid_cached() == 1)
+                else if (getpid_cached() == 1) {
                         /* PID1 outputs to the console without holding it open all the time.
                          *
                          * Note that the Linux console can only display 16 colors. We still enable 256 color
@@ -1261,9 +1286,23 @@
                          * map them to the closest color in the 16 color palette (since kernel 3.16). Doing
                          * 256 colors is nice for people who invoke systemd in a container or via a serial
                          * link or such, and use a true 256 color terminal to do so. */
-                        cached_color_mode = getenv_terminal_is_dumb() ? COLOR_OFF : COLOR_256;
-                else
-                        cached_color_mode = terminal_is_dumb() ? COLOR_OFF : COLOR_256;
+                        if (getenv_terminal_is_dumb())
+                                cached_color_mode = COLOR_OFF;
+                } else {
+                        if (terminal_is_dumb())
+                                cached_color_mode = COLOR_OFF;
+                }
+
+                if (cached_color_mode < 0) {
+                        /* We failed to figure out any reason to *disable* colors.
+                         * Let's see how many colors we shall use. */
+                        if (STRPTR_IN_SET(getenv("COLORTERM"),
+                                          "truecolor",
+                                          "24bit"))
+                                cached_color_mode = COLOR_24BIT;
+                        else
+                                cached_color_mode = COLOR_256;
+                }
         }
 
         return cached_color_mode;
@@ -1327,10 +1366,7 @@
         /* If we can't read the default, then default to unicode. It's 2017 after all. */
         kb = vt_default_utf8() != 0 ? K_UNICODE : K_XLATE;
 
-        if (ioctl(fd, KDSKBMODE, kb) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, KDSKBMODE, kb));
 }
 
 int vt_restore(int fd) {
diff --git a/src/basic/terminal-util.h b/src/basic/terminal-util.h
index d327627..1723de3 100644
--- a/src/basic/terminal-util.h
+++ b/src/basic/terminal-util.h
@@ -100,16 +100,19 @@
 /* Limits the use of ANSI colors to a subset. */
 typedef enum ColorMode {
         /* No colors, monochrome output. */
-        COLOR_OFF = 0,
+        COLOR_OFF,
 
         /* All colors, no restrictions. */
-        COLOR_ON  = 1,
+        COLOR_ON,
 
         /* Only the base 16 colors. */
-        COLOR_16  = 16,
+        COLOR_16,
 
         /* Only 256 colors. */
-        COLOR_256 = 256,
+        COLOR_256,
+
+        /* For truecolor or 24bit color support. */
+        COLOR_24BIT,
 
         _COLOR_INVALID = -EINVAL,
 } ColorMode;
@@ -120,6 +123,8 @@
 int terminal_vhangup_fd(int fd);
 int terminal_vhangup(const char *name);
 
+int terminal_set_size_fd(int fd, const char *ident, unsigned rows, unsigned cols);
+
 int chvt(int vt);
 
 int read_one_char(FILE *f, char *ret, usec_t timeout, bool *need_nl);
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
index 5d162e8..0bea149 100644
--- a/src/basic/time-util.c
+++ b/src/basic/time-util.c
@@ -17,6 +17,7 @@
 #include "io-util.h"
 #include "log.h"
 #include "macro.h"
+#include "missing_threads.h"
 #include "missing_timerfd.h"
 #include "parse-util.h"
 #include "path-util.h"
@@ -29,10 +30,10 @@
 
 static clockid_t map_clock_id(clockid_t c) {
 
-        /* Some more exotic archs (s390, ppc, …) lack the "ALARM" flavour of the clocks. Thus, clock_gettime() will
-         * fail for them. Since they are essentially the same as their non-ALARM pendants (their only difference is
-         * when timers are set on them), let's just map them accordingly. This way, we can get the correct time even on
-         * those archs. */
+        /* Some more exotic archs (s390, ppc, …) lack the "ALARM" flavour of the clocks. Thus,
+         * clock_gettime() will fail for them. Since they are essentially the same as their non-ALARM
+         * pendants (their only difference is when timers are set on them), let's just map them
+         * accordingly. This way, we can get the correct time even on those archs. */
 
         switch (c) {
 
@@ -77,7 +78,7 @@
 
         ts->realtime = now(CLOCK_REALTIME);
         ts->monotonic = now(CLOCK_MONOTONIC);
-        ts->boottime = clock_boottime_supported() ? now(CLOCK_BOOTTIME) : USEC_INFINITY;
+        ts->boottime = now(CLOCK_BOOTTIME);
 
         return ts;
 }
@@ -126,7 +127,7 @@
 dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u) {
         assert(ts);
 
-        if (u == USEC_INFINITY || u == 0) {
+        if (!timestamp_is_set(u)) {
                 ts->realtime = ts->monotonic = u;
                 return ts;
         }
@@ -141,7 +142,7 @@
 
         assert(ts);
 
-        if (u == USEC_INFINITY || u == 0) {
+        if (!timestamp_is_set(u)) {
                 ts->realtime = ts->monotonic = ts->boottime = u;
                 return ts;
         }
@@ -150,9 +151,7 @@
 
         ts->realtime = u;
         ts->monotonic = map_clock_usec_internal(u, nowr, now(CLOCK_MONOTONIC));
-        ts->boottime = clock_boottime_supported() ?
-                map_clock_usec_internal(u, nowr, now(CLOCK_BOOTTIME)) :
-                USEC_INFINITY;
+        ts->boottime = map_clock_usec_internal(u, nowr, now(CLOCK_BOOTTIME));
 
         return ts;
 }
@@ -170,8 +169,7 @@
         return ts;
 }
 
-dual_timestamp* dual_timestamp_from_boottime_or_monotonic(dual_timestamp *ts, usec_t u) {
-        clockid_t cid;
+dual_timestamp* dual_timestamp_from_boottime(dual_timestamp *ts, usec_t u) {
         usec_t nowm;
 
         if (u == USEC_INFINITY) {
@@ -179,14 +177,8 @@
                 return ts;
         }
 
-        cid = clock_boottime_or_monotonic();
-        nowm = now(cid);
-
-        if (cid == CLOCK_MONOTONIC)
-                ts->monotonic = u;
-        else
-                ts->monotonic = map_clock_usec_internal(u, nowm, now(CLOCK_MONOTONIC));
-
+        nowm = now(CLOCK_BOOTTIME);
+        ts->monotonic = map_clock_usec_internal(u, nowm, now(CLOCK_MONOTONIC));
         ts->realtime = map_clock_usec_internal(u, nowm, now(CLOCK_REALTIME));
         return ts;
 }
@@ -304,8 +296,8 @@
                 usec_t t,
                 TimestampStyle style) {
 
-        /* The weekdays in non-localized (English) form. We use this instead of the localized form, so that our
-         * generated timestamps may be parsed with parse_timestamp(), and always read the same. */
+        /* The weekdays in non-localized (English) form. We use this instead of the localized form, so that
+         * our generated timestamps may be parsed with parse_timestamp(), and always read the same. */
         static const char * const weekdays[] = {
                 [0] = "Sun",
                 [1] = "Mon",
@@ -317,44 +309,48 @@
         };
 
         struct tm tm;
+        bool utc, us;
         time_t sec;
         size_t n;
-        bool utc = false, us = false;
 
         assert(buf);
+        assert(style >= 0);
+        assert(style < _TIMESTAMP_STYLE_MAX);
 
-        switch (style) {
-                case TIMESTAMP_PRETTY:
-                        break;
-                case TIMESTAMP_US:
-                        us = true;
-                        break;
-                case TIMESTAMP_UTC:
-                        utc = true;
-                        break;
-                case TIMESTAMP_US_UTC:
-                        us = true;
-                        utc = true;
-                        break;
-                default:
-                        return NULL;
+        if (!timestamp_is_set(t))
+                return NULL; /* Timestamp is unset */
+
+        if (style == TIMESTAMP_UNIX) {
+                if (l < (size_t) (1 + 1 + 1))
+                        return NULL; /* not enough space for even the shortest of forms */
+
+                return snprintf_ok(buf, l, "@" USEC_FMT, t / USEC_PER_SEC);  /* round down µs → s */
         }
 
-        if (l < (size_t) (3 +                  /* week day */
-                          1 + 10 +             /* space and date */
-                          1 + 8 +              /* space and time */
-                          (us ? 1 + 6 : 0) +   /* "." and microsecond part */
-                          1 + 1 +              /* space and shortest possible zone */
+        utc = IN_SET(style, TIMESTAMP_UTC, TIMESTAMP_US_UTC, TIMESTAMP_DATE);
+        us = IN_SET(style, TIMESTAMP_US, TIMESTAMP_US_UTC);
+
+        if (l < (size_t) (3 +                   /* week day */
+                          1 + 10 +              /* space and date */
+                          style == TIMESTAMP_DATE ? 0 :
+                          (1 + 8 +              /* space and time */
+                           (us ? 1 + 6 : 0) +   /* "." and microsecond part */
+                           1 + (utc ? 3 : 1)) + /* space and shortest possible zone */
                           1))
                 return NULL; /* Not enough space even for the shortest form. */
-        if (t <= 0 || t == USEC_INFINITY)
-                return NULL; /* Timestamp is unset */
 
         /* Let's not format times with years > 9999 */
         if (t > USEC_TIMESTAMP_FORMATTABLE_MAX) {
-                assert(l >= STRLEN("--- XXXX-XX-XX XX:XX:XX") + 1);
-                strcpy(buf, "--- XXXX-XX-XX XX:XX:XX");
-                return buf;
+                static const char* const xxx[_TIMESTAMP_STYLE_MAX] = {
+                        [TIMESTAMP_PRETTY] = "--- XXXX-XX-XX XX:XX:XX",
+                        [TIMESTAMP_US]     = "--- XXXX-XX-XX XX:XX:XX.XXXXXX",
+                        [TIMESTAMP_UTC]    = "--- XXXX-XX-XX XX:XX:XX UTC",
+                        [TIMESTAMP_US_UTC] = "--- XXXX-XX-XX XX:XX:XX.XXXXXX UTC",
+                        [TIMESTAMP_DATE]   = "--- XXXX-XX-XX",
+                };
+
+                assert(l >= strlen(xxx[style]) + 1);
+                return strcpy(buf, xxx[style]);
         }
 
         sec = (time_t) (t / USEC_PER_SEC); /* Round down */
@@ -366,6 +362,14 @@
         assert((size_t) tm.tm_wday < ELEMENTSOF(weekdays));
         memcpy(buf, weekdays[tm.tm_wday], 4);
 
+        if (style == TIMESTAMP_DATE) {
+                /* Special format string if only date should be shown. */
+                if (strftime(buf + 3, l - 3, " %Y-%m-%d", &tm) <= 0)
+                        return NULL; /* Doesn't fit */
+
+                return buf;
+        }
+
         /* Add the main components */
         if (strftime(buf + 3, l - 3, " %Y-%m-%d %H:%M:%S", &tm) <= 0)
                 return NULL; /* Doesn't fit */
@@ -382,8 +386,8 @@
         /* Append the timezone */
         n = strlen(buf);
         if (utc) {
-                /* If this is UTC then let's explicitly use the "UTC" string here, because gmtime_r() normally uses the
-                 * obsolete "GMT" instead. */
+                /* If this is UTC then let's explicitly use the "UTC" string here, because gmtime_r()
+                 * normally uses the obsolete "GMT" instead. */
                 if (n + 5 > l)
                         return NULL; /* "UTC" doesn't fit. */
 
@@ -398,12 +402,14 @@
                         /* The full time zone does not fit in. Yuck. */
 
                         if (n + 1 + _POSIX_TZNAME_MAX + 1 > l)
-                                return NULL; /* Not even enough space for the POSIX minimum (of 6)? In that case, complain that it doesn't fit */
+                                return NULL; /* Not even enough space for the POSIX minimum (of 6)? In that
+                                              * case, complain that it doesn't fit. */
 
-                        /* So the time zone doesn't fit in fully, but the caller passed enough space for the POSIX
-                         * minimum time zone length. In this case suppress the timezone entirely, in order not to dump
-                         * an overly long, hard to read string on the user. This should be safe, because the user will
-                         * assume the local timezone anyway if none is shown. And so does parse_timestamp(). */
+                        /* So the time zone doesn't fit in fully, but the caller passed enough space for the
+                         * POSIX minimum time zone length. In this case suppress the timezone entirely, in
+                         * order not to dump an overly long, hard to read string on the user. This should be
+                         * safe, because the user will assume the local timezone anyway if none is shown. And
+                         * so does parse_timestamp(). */
                 } else {
                         buf[n++] = ' ';
                         strcpy(buf + n, tm.tm_zone);
@@ -417,7 +423,7 @@
         const char *s;
         usec_t n, d;
 
-        if (t <= 0 || t == USEC_INFINITY)
+        if (!timestamp_is_set(t))
                 return NULL;
 
         n = now(CLOCK_REALTIME);
@@ -433,62 +439,62 @@
                 usec_t years = d / USEC_PER_YEAR;
                 usec_t months = (d % USEC_PER_YEAR) / USEC_PER_MONTH;
 
-                snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
-                         years,
-                         years == 1 ? "year" : "years",
-                         months,
-                         months == 1 ? "month" : "months",
-                         s);
+                (void) snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
+                                years,
+                                years == 1 ? "year" : "years",
+                                months,
+                                months == 1 ? "month" : "months",
+                                s);
         } else if (d >= USEC_PER_MONTH) {
                 usec_t months = d / USEC_PER_MONTH;
                 usec_t days = (d % USEC_PER_MONTH) / USEC_PER_DAY;
 
-                snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
-                         months,
-                         months == 1 ? "month" : "months",
-                         days,
-                         days == 1 ? "day" : "days",
-                         s);
+                (void) snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
+                                months,
+                                months == 1 ? "month" : "months",
+                                days,
+                                days == 1 ? "day" : "days",
+                                s);
         } else if (d >= USEC_PER_WEEK) {
                 usec_t weeks = d / USEC_PER_WEEK;
                 usec_t days = (d % USEC_PER_WEEK) / USEC_PER_DAY;
 
-                snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
-                         weeks,
-                         weeks == 1 ? "week" : "weeks",
-                         days,
-                         days == 1 ? "day" : "days",
-                         s);
+                (void) snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
+                                weeks,
+                                weeks == 1 ? "week" : "weeks",
+                                days,
+                                days == 1 ? "day" : "days",
+                                s);
         } else if (d >= 2*USEC_PER_DAY)
-                snprintf(buf, l, USEC_FMT " days %s", d / USEC_PER_DAY, s);
+                (void) snprintf(buf, l, USEC_FMT " days %s", d / USEC_PER_DAY, s);
         else if (d >= 25*USEC_PER_HOUR)
-                snprintf(buf, l, "1 day " USEC_FMT "h %s",
-                         (d - USEC_PER_DAY) / USEC_PER_HOUR, s);
+                (void) snprintf(buf, l, "1 day " USEC_FMT "h %s",
+                                (d - USEC_PER_DAY) / USEC_PER_HOUR, s);
         else if (d >= 6*USEC_PER_HOUR)
-                snprintf(buf, l, USEC_FMT "h %s",
-                         d / USEC_PER_HOUR, s);
+                (void) snprintf(buf, l, USEC_FMT "h %s",
+                                d / USEC_PER_HOUR, s);
         else if (d >= USEC_PER_HOUR)
-                snprintf(buf, l, USEC_FMT "h " USEC_FMT "min %s",
-                         d / USEC_PER_HOUR,
-                         (d % USEC_PER_HOUR) / USEC_PER_MINUTE, s);
+                (void) snprintf(buf, l, USEC_FMT "h " USEC_FMT "min %s",
+                                d / USEC_PER_HOUR,
+                                (d % USEC_PER_HOUR) / USEC_PER_MINUTE, s);
         else if (d >= 5*USEC_PER_MINUTE)
-                snprintf(buf, l, USEC_FMT "min %s",
-                         d / USEC_PER_MINUTE, s);
+                (void) snprintf(buf, l, USEC_FMT "min %s",
+                                d / USEC_PER_MINUTE, s);
         else if (d >= USEC_PER_MINUTE)
-                snprintf(buf, l, USEC_FMT "min " USEC_FMT "s %s",
-                         d / USEC_PER_MINUTE,
-                         (d % USEC_PER_MINUTE) / USEC_PER_SEC, s);
+                (void) snprintf(buf, l, USEC_FMT "min " USEC_FMT "s %s",
+                                d / USEC_PER_MINUTE,
+                                (d % USEC_PER_MINUTE) / USEC_PER_SEC, s);
         else if (d >= USEC_PER_SEC)
-                snprintf(buf, l, USEC_FMT "s %s",
-                         d / USEC_PER_SEC, s);
+                (void) snprintf(buf, l, USEC_FMT "s %s",
+                                d / USEC_PER_SEC, s);
         else if (d >= USEC_PER_MSEC)
-                snprintf(buf, l, USEC_FMT "ms %s",
-                         d / USEC_PER_MSEC, s);
+                (void) snprintf(buf, l, USEC_FMT "ms %s",
+                                d / USEC_PER_MSEC, s);
         else if (d > 0)
-                snprintf(buf, l, USEC_FMT"us %s",
-                         d, s);
+                (void) snprintf(buf, l, USEC_FMT"us %s",
+                                d, s);
         else
-                snprintf(buf, l, "now");
+                (void) snprintf(buf, l, "now");
 
         buf[l-1] = 0;
         return buf;
@@ -510,10 +516,9 @@
                 { "us",    1               },
         };
 
-        char *p = buf;
+        char *p = ASSERT_PTR(buf);
         bool something = false;
 
-        assert(buf);
         assert(l > 0);
 
         if (t == USEC_INFINITY) {
@@ -553,14 +558,12 @@
 
                 /* Let's see if we should shows this in dot notation */
                 if (t < USEC_PER_MINUTE && b > 0) {
-                        usec_t cc;
-                        signed char j;
+                        signed char j = 0;
 
-                        j = 0;
-                        for (cc = table[i].usec; cc > 1; cc /= 10)
+                        for (usec_t cc = table[i].usec; cc > 1; cc /= 10)
                                 j++;
 
-                        for (cc = accuracy; cc > 1; cc /= 10) {
+                        for (usec_t cc = accuracy; cc > 1; cc /= 10) {
                                 b /= 10;
                                 j--;
                         }
@@ -590,7 +593,7 @@
                         t = b;
                 }
 
-                n = MIN((size_t) k, l);
+                n = MIN((size_t) k, l-1);
 
                 l -= n;
                 p += n;
@@ -673,7 +676,7 @@
                         goto finish;
 
                 } else if ((k = endswith(t, " ago"))) {
-                        t = strndupa(t, k - t);
+                        t = strndupa_safe(t, k - t);
 
                         r = parse_sec(t, &minus);
                         if (r < 0)
@@ -682,7 +685,7 @@
                         goto finish;
 
                 } else if ((k = endswith(t, " left"))) {
-                        t = strndupa(t, k - t);
+                        t = strndupa_safe(t, k - t);
 
                         r = parse_sec(t, &plus);
                         if (r < 0)
@@ -694,17 +697,18 @@
                 /* See if the timestamp is suffixed with UTC */
                 utc = endswith_no_case(t, " UTC");
                 if (utc)
-                        t = strndupa(t, utc - t);
+                        t = strndupa_safe(t, utc - t);
                 else {
                         const char *e = NULL;
                         int j;
 
                         tzset();
 
-                        /* See if the timestamp is suffixed by either the DST or non-DST local timezone. Note that we only
-                         * support the local timezones here, nothing else. Not because we wouldn't want to, but simply because
-                         * there are no nice APIs available to cover this. By accepting the local time zone strings, we make
-                         * sure that all timestamps written by format_timestamp() can be parsed correctly, even though we don't
+                        /* See if the timestamp is suffixed by either the DST or non-DST local timezone. Note
+                         * that we only support the local timezones here, nothing else. Not because we
+                         * wouldn't want to, but simply because there are no nice APIs available to cover
+                         * this. By accepting the local time zone strings, we make sure that all timestamps
+                         * written by format_timestamp() can be parsed correctly, even though we don't
                          * support arbitrary timezone specifications. */
 
                         for (j = 0; j <= 1; j++) {
@@ -725,7 +729,7 @@
 
                         if (IN_SET(j, 0, 1)) {
                                 /* Found one of the two timezones specified. */
-                                t = strndupa(t, e - t - 1);
+                                t = strndupa_safe(t, e - t - 1);
                                 dst = j;
                                 tzn = tzname[j];
                         }
@@ -790,6 +794,16 @@
                         goto from_tm;
         }
 
+        /* Support OUTPUT_SHORT and OUTPUT_SHORT_PRECISE formats */
+        tm = copy;
+        k = strptime(t, "%b %d %H:%M:%S", &tm);
+        if (k) {
+                if (*k == '.')
+                        goto parse_usec;
+                else if (*k == 0)
+                        goto from_tm;
+        }
+
         tm = copy;
         k = strptime(t, "%y-%m-%d %H:%M", &tm);
         if (k && *k == 0) {
@@ -926,7 +940,7 @@
 
                 /* Cut off the timezone if we don't need it. */
                 if (with_tz)
-                        t = strndupa(t, last_space - t);
+                        t = strndupa_safe(t, last_space - t);
 
                 shared->return_value = parse_timestamp_impl(t, &shared->usec, with_tz);
 
@@ -1334,10 +1348,10 @@
                         continue;
 
                 char *tz;
-                if (*type == 'Z' || *type == 'z')
+                if (IN_SET(*type, 'Z', 'z'))
                         /* Zone lines have timezone in field 1. */
                         tz = f1;
-                else if (*type == 'L' || *type == 'l')
+                else if (IN_SET(*type, 'L', 'l'))
                         /* Link lines have timezone in field 2. */
                         tz = f2;
                 else
@@ -1384,7 +1398,7 @@
 int verify_timezone(const char *name, int log_level) {
         bool slash = false;
         const char *p, *t;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         char buf[4];
         int r;
 
@@ -1399,9 +1413,8 @@
                 return -EINVAL;
 
         for (p = name; *p; p++) {
-                if (!(*p >= '0' && *p <= '9') &&
-                    !(*p >= 'a' && *p <= 'z') &&
-                    !(*p >= 'A' && *p <= 'Z') &&
+                if (!ascii_isdigit(*p) &&
+                    !ascii_isalpha(*p) &&
                     !IN_SET(*p, '-', '_', '+', '/'))
                         return -EINVAL;
 
@@ -1443,33 +1456,6 @@
         return 0;
 }
 
-bool clock_boottime_supported(void) {
-        static int supported = -1;
-
-        /* Note that this checks whether CLOCK_BOOTTIME is available in general as well as available for timerfds()! */
-
-        if (supported < 0) {
-                int fd;
-
-                fd = timerfd_create(CLOCK_BOOTTIME, TFD_NONBLOCK|TFD_CLOEXEC);
-                if (fd < 0)
-                        supported = false;
-                else {
-                        safe_close(fd);
-                        supported = true;
-                }
-        }
-
-        return supported;
-}
-
-clockid_t clock_boottime_or_monotonic(void) {
-        if (clock_boottime_supported())
-                return CLOCK_BOOTTIME;
-        else
-                return CLOCK_MONOTONIC;
-}
-
 bool clock_supported(clockid_t clock) {
         struct timespec ts;
 
@@ -1477,16 +1463,10 @@
 
         case CLOCK_MONOTONIC:
         case CLOCK_REALTIME:
+        case CLOCK_BOOTTIME:
+                /* These three are always available in our baseline, and work in timerfd, as of kernel 3.15 */
                 return true;
 
-        case CLOCK_BOOTTIME:
-                return clock_boottime_supported();
-
-        case CLOCK_BOOTTIME_ALARM:
-                if (!clock_boottime_supported())
-                        return false;
-
-                _fallthrough_;
         default:
                 /* For everything else, check properly */
                 return clock_gettime(clock, &ts) >= 0;
@@ -1591,7 +1571,7 @@
                 .it_value.tv_sec = TIME_T_MAX,
         };
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert_cc(sizeof(time_t) == sizeof(TIME_T_MAX));
 
@@ -1634,6 +1614,7 @@
         [TIMESTAMP_US] = "us",
         [TIMESTAMP_UTC] = "utc",
         [TIMESTAMP_US_UTC] = "us+utc",
+        [TIMESTAMP_UNIX] = "unix",
 };
 
 /* Use the macro for enum → string to allow for aliases */
diff --git a/src/basic/time-util.h b/src/basic/time-util.h
index 2bd947d..c5ae0c9 100644
--- a/src/basic/time-util.h
+++ b/src/basic/time-util.h
@@ -34,6 +34,8 @@
         TIMESTAMP_US,
         TIMESTAMP_UTC,
         TIMESTAMP_US_UTC,
+        TIMESTAMP_UNIX,
+        TIMESTAMP_DATE,
         _TIMESTAMP_STYLE_MAX,
         _TIMESTAMP_STYLE_INVALID = -EINVAL,
 } TimestampStyle;
@@ -81,7 +83,7 @@
 dual_timestamp* dual_timestamp_get(dual_timestamp *ts);
 dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
 dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u);
-dual_timestamp* dual_timestamp_from_boottime_or_monotonic(dual_timestamp *ts, usec_t u);
+dual_timestamp* dual_timestamp_from_boottime(dual_timestamp *ts, usec_t u);
 
 triple_timestamp* triple_timestamp_get(triple_timestamp *ts);
 triple_timestamp* triple_timestamp_from_realtime(triple_timestamp *ts, usec_t u);
@@ -111,20 +113,35 @@
 
 usec_t timespec_load(const struct timespec *ts) _pure_;
 nsec_t timespec_load_nsec(const struct timespec *ts) _pure_;
-struct timespec *timespec_store(struct timespec *ts, usec_t u);
-struct timespec *timespec_store_nsec(struct timespec *ts, nsec_t n);
+struct timespec* timespec_store(struct timespec *ts, usec_t u);
+struct timespec* timespec_store_nsec(struct timespec *ts, nsec_t n);
+
+#define TIMESPEC_STORE(u) timespec_store(&(struct timespec) {}, (u))
 
 usec_t timeval_load(const struct timeval *tv) _pure_;
-struct timeval *timeval_store(struct timeval *tv, usec_t u);
+struct timeval* timeval_store(struct timeval *tv, usec_t u);
 
-char *format_timestamp_style(char *buf, size_t l, usec_t t, TimestampStyle style);
-char *format_timestamp_relative(char *buf, size_t l, usec_t t);
-char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
+#define TIMEVAL_STORE(u) timeval_store(&(struct timeval) {}, (u))
 
-static inline char *format_timestamp(char *buf, size_t l, usec_t t) {
+char* format_timestamp_style(char *buf, size_t l, usec_t t, TimestampStyle style) _warn_unused_result_;
+char* format_timestamp_relative(char *buf, size_t l, usec_t t) _warn_unused_result_;
+char* format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy) _warn_unused_result_;
+
+_warn_unused_result_
+static inline char* format_timestamp(char *buf, size_t l, usec_t t) {
         return format_timestamp_style(buf, l, t, TIMESTAMP_PRETTY);
 }
 
+/* Note: the lifetime of the compound literal is the immediately surrounding block,
+ * see C11 §6.5.2.5, and
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
+#define FORMAT_TIMESTAMP(t) format_timestamp((char[FORMAT_TIMESTAMP_MAX]){}, FORMAT_TIMESTAMP_MAX, t)
+#define FORMAT_TIMESTAMP_RELATIVE(t)                                    \
+        format_timestamp_relative((char[FORMAT_TIMESTAMP_RELATIVE_MAX]){}, FORMAT_TIMESTAMP_RELATIVE_MAX, t)
+#define FORMAT_TIMESPAN(t, accuracy) format_timespan((char[FORMAT_TIMESPAN_MAX]){}, FORMAT_TIMESPAN_MAX, t, accuracy)
+#define FORMAT_TIMESTAMP_STYLE(t, style) \
+        format_timestamp_style((char[FORMAT_TIMESTAMP_MAX]){}, FORMAT_TIMESTAMP_MAX, t, style)
+
 int parse_timestamp(const char *t, usec_t *usec);
 
 int parse_sec(const char *t, usec_t *usec);
@@ -139,9 +156,7 @@
         return verify_timezone(name, log_level) >= 0;
 }
 
-bool clock_boottime_supported(void);
 bool clock_supported(clockid_t clock);
-clockid_t clock_boottime_or_monotonic(void);
 
 usec_t usec_shift_clock(usec_t, clockid_t from, clockid_t to);
 
@@ -156,9 +171,8 @@
 bool in_utc_timezone(void);
 
 static inline usec_t usec_add(usec_t a, usec_t b) {
-
-        /* Adds two time values, and makes sure USEC_INFINITY as input results as USEC_INFINITY in output, and doesn't
-         * overflow. */
+        /* Adds two time values, and makes sure USEC_INFINITY as input results as USEC_INFINITY in output,
+         * and doesn't overflow. */
 
         if (a > USEC_INFINITY - b) /* overflow check */
                 return USEC_INFINITY;
@@ -167,7 +181,6 @@
 }
 
 static inline usec_t usec_sub_unsigned(usec_t timestamp, usec_t delta) {
-
         if (timestamp == USEC_INFINITY) /* Make sure infinity doesn't degrade */
                 return USEC_INFINITY;
         if (timestamp < delta)
@@ -177,21 +190,26 @@
 }
 
 static inline usec_t usec_sub_signed(usec_t timestamp, int64_t delta) {
+        if (delta == INT64_MIN) { /* prevent overflow */
+                assert_cc(-(INT64_MIN + 1) == INT64_MAX);
+                assert_cc(USEC_INFINITY > INT64_MAX);
+                return usec_add(timestamp, (usec_t) INT64_MAX + 1);
+        }
         if (delta < 0)
                 return usec_add(timestamp, (usec_t) (-delta));
-        else
-                return usec_sub_unsigned(timestamp, (usec_t) delta);
+
+        return usec_sub_unsigned(timestamp, (usec_t) delta);
 }
 
 #if SIZEOF_TIME_T == 8
-/* The last second we can format is 31. Dec 9999, 1s before midnight, because otherwise we'd enter 5 digit year
- * territory. However, since we want to stay away from this in all timezones we take one day off. */
-#define USEC_TIMESTAMP_FORMATTABLE_MAX ((usec_t) 253402214399000000)
+  /* The last second we can format is 31. Dec 9999, 1s before midnight, because otherwise we'd enter 5 digit
+   * year territory. However, since we want to stay away from this in all timezones we take one day off. */
+#  define USEC_TIMESTAMP_FORMATTABLE_MAX ((usec_t) 253402214399000000)
 #elif SIZEOF_TIME_T == 4
 /* With a 32bit time_t we can't go beyond 2038... */
-#define USEC_TIMESTAMP_FORMATTABLE_MAX ((usec_t) 2147483647000000)
+#  define USEC_TIMESTAMP_FORMATTABLE_MAX ((usec_t) 2147483647000000)
 #else
-#error "Yuck, time_t is neither 4 nor 8 bytes wide?"
+#  error "Yuck, time_t is neither 4 nor 8 bytes wide?"
 #endif
 
 int time_change_fd(void);
diff --git a/src/basic/tmpfile-util.c b/src/basic/tmpfile-util.c
index 91c8ff1..95adf9d 100644
--- a/src/basic/tmpfile-util.c
+++ b/src/basic/tmpfile-util.c
@@ -19,29 +19,15 @@
 #include "tmpfile-util.h"
 #include "umask-util.h"
 
-int fopen_temporary(const char *path, FILE **ret_f, char **ret_temp_path) {
+static int fopen_temporary_internal(int dir_fd, const char *path, FILE **ret_file) {
         _cleanup_fclose_ FILE *f = NULL;
-        _cleanup_free_ char *t = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
-        if (path) {
-                r = tempfn_xxxxxx(path, NULL, &t);
-                if (r < 0)
-                        return r;
-        } else {
-                const char *d;
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+        assert(path);
 
-                r = tmp_dir(&d);
-                if (r < 0)
-                        return r;
-
-                t = path_join(d, "XXXXXX");
-                if (!t)
-                        return -ENOMEM;
-        }
-
-        fd = mkostemp_safe(t);
+        fd = openat(dir_fd, path, O_CLOEXEC|O_NOCTTY|O_RDWR|O_CREAT|O_EXCL, 0600);
         if (fd < 0)
                 return -errno;
 
@@ -50,35 +36,72 @@
 
         r = take_fdopen_unlocked(&fd, "w", &f);
         if (r < 0) {
-                (void) unlink(t);
+                (void) unlinkat(dir_fd, path, 0);
                 return r;
         }
 
-        if (ret_f)
-                *ret_f = TAKE_PTR(f);
+        if (ret_file)
+                *ret_file = TAKE_PTR(f);
 
-        if (ret_temp_path)
-                *ret_temp_path = TAKE_PTR(t);
+        return 0;
+}
+
+int fopen_temporary_at(int dir_fd, const char *path, FILE **ret_file, char **ret_path) {
+        _cleanup_free_ char *t = NULL;
+        int r;
+
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+        assert(path);
+
+        r = tempfn_random(path, NULL, &t);
+        if (r < 0)
+                return r;
+
+        r = fopen_temporary_internal(dir_fd, t, ret_file);
+        if (r < 0)
+                return r;
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(t);
+
+        return 0;
+}
+
+int fopen_temporary_child_at(int dir_fd, const char *path, FILE **ret_file, char **ret_path) {
+        _cleanup_free_ char *t = NULL;
+        int r;
+
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+
+        if (!path) {
+                r = tmp_dir(&path);
+                if (r < 0)
+                        return r;
+        }
+
+        r = tempfn_random_child(path, NULL, &t);
+        if (r < 0)
+                return r;
+
+        r = fopen_temporary_internal(dir_fd, t, ret_file);
+        if (r < 0)
+                return r;
+
+        if (ret_path)
+                *ret_path = TAKE_PTR(t);
 
         return 0;
 }
 
 /* This is much like mkostemp() but is subject to umask(). */
 int mkostemp_safe(char *pattern) {
-        int fd = -1;  /* avoid false maybe-uninitialized warning */
-
         assert(pattern);
-
-        RUN_WITH_UMASK(0077)
-                fd = mkostemp(pattern, O_CLOEXEC);
-        if (fd < 0)
-                return -errno;
-
-        return fd;
+        BLOCK_WITH_UMASK(0077);
+        return RET_NERRNO(mkostemp(pattern, O_CLOEXEC));
 }
 
 int fmkostemp_safe(char *pattern, const char *mode, FILE **ret_f) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         FILE *f;
 
         fd = mkostemp_safe(pattern);
@@ -93,50 +116,91 @@
         return 0;
 }
 
-int tempfn_xxxxxx(const char *p, const char *extra, char **ret) {
-        _cleanup_free_ char *d = NULL, *fn = NULL, *nf = NULL;
+static int tempfn_build(const char *p, const char *pre, const char *post, bool child, char **ret) {
+        _cleanup_free_ char *d = NULL, *fn = NULL, *nf = NULL, *result = NULL;
+        size_t len_pre, len_post, len_add;
         int r;
 
+        assert(p);
         assert(ret);
 
         /*
          * Turns this:
          *         /foo/bar/waldo
          *
+         * Into this :
+         *         /foo/bar/waldo/.#<pre><post> (child == true)
+         *         /foo/bar/.#<pre>waldo<post> (child == false)
+         */
+
+        if (pre && strchr(pre, '/'))
+                return -EINVAL;
+
+        if (post && strchr(post, '/'))
+                return -EINVAL;
+
+        len_pre = strlen_ptr(pre);
+        len_post = strlen_ptr(post);
+        /* NAME_MAX is counted *without* the trailing NUL byte. */
+        if (len_pre > NAME_MAX - STRLEN(".#") ||
+            len_post > NAME_MAX - STRLEN(".#") - len_pre)
+                return -EINVAL;
+
+        len_add = len_pre + len_post + STRLEN(".#");
+
+        if (child) {
+                d = strdup(p);
+                if (!d)
+                        return -ENOMEM;
+        } else {
+                r = path_extract_directory(p, &d);
+                if (r < 0 && r != -EDESTADDRREQ) /* EDESTADDRREQ → No directory specified, just a filename */
+                        return r;
+
+                r = path_extract_filename(p, &fn);
+                if (r < 0)
+                        return r;
+
+                if (strlen(fn) > NAME_MAX - len_add)
+                        /* We cannot simply prepend and append strings to the filename. Let's truncate the filename. */
+                        fn[NAME_MAX - len_add] = '\0';
+        }
+
+        nf = strjoin(".#", strempty(pre), strempty(fn), strempty(post));
+        if (!nf)
+                return -ENOMEM;
+
+        if (d) {
+                if (!path_extend(&d, nf))
+                        return -ENOMEM;
+
+                result = path_simplify(TAKE_PTR(d));
+        } else
+                result = TAKE_PTR(nf);
+
+        if (!path_is_valid(result)) /* New path is not valid? (Maybe because too long?) Refuse. */
+                return -EINVAL;
+
+        *ret = TAKE_PTR(result);
+        return 0;
+}
+
+int tempfn_xxxxxx(const char *p, const char *extra, char **ret) {
+        /*
+         * Turns this:
+         *         /foo/bar/waldo
+         *
          * Into this:
          *         /foo/bar/.#<extra>waldoXXXXXX
          */
 
-        r = path_extract_directory(p, &d);
-        if (r < 0 && r != -EDESTADDRREQ) /* EDESTADDRREQ → No directory specified, just a filename */
-                return r;
-
-        r = path_extract_filename(p, &fn);
-        if (r < 0)
-                return r;
-
-        nf = strjoin(".#", strempty(extra), fn, "XXXXXX");
-        if (!nf)
-                return -ENOMEM;
-
-        if (!filename_is_valid(nf)) /* New name is not valid? (Maybe because too long?) Refuse. */
-                return -EINVAL;
-
-        if (d)  {
-                if (!path_extend(&d, nf))
-                        return -ENOMEM;
-
-                *ret = path_simplify(TAKE_PTR(d));
-        } else
-                *ret = TAKE_PTR(nf);
-
-        return 0;
+        return tempfn_build(p, extra, "XXXXXX", /* child = */ false, ret);
 }
 
 int tempfn_random(const char *p, const char *extra, char **ret) {
-        _cleanup_free_ char *d = NULL, *fn = NULL, *nf = NULL;
-        int r;
+        _cleanup_free_ char *s = NULL;
 
+        assert(p);
         assert(ret);
 
         /*
@@ -147,37 +211,14 @@
          *         /foo/bar/.#<extra>waldobaa2a261115984a9
          */
 
-        r = path_extract_directory(p, &d);
-        if (r < 0 && r != -EDESTADDRREQ) /* EDESTADDRREQ → No directory specified, just a filename */
-                return r;
-
-        r = path_extract_filename(p, &fn);
-        if (r < 0)
-                return r;
-
-        if (asprintf(&nf, ".#%s%s%016" PRIx64,
-                     strempty(extra),
-                     fn,
-                     random_u64()) < 0)
+        if (asprintf(&s, "%016" PRIx64, random_u64()) < 0)
                 return -ENOMEM;
 
-        if (!filename_is_valid(nf)) /* Not valid? (maybe because too long now?) — refuse early */
-                return -EINVAL;
-
-        if (d) {
-                if (!path_extend(&d, nf))
-                        return -ENOMEM;
-
-                *ret = path_simplify(TAKE_PTR(d));
-        } else
-                *ret = TAKE_PTR(nf);
-
-        return 0;
+        return tempfn_build(p, extra, s, /* child = */ false, ret);
 }
 
 int tempfn_random_child(const char *p, const char *extra, char **ret) {
-        char *t, *x;
-        uint64_t u;
+        _cleanup_free_ char *s = NULL;
         int r;
 
         assert(ret);
@@ -194,27 +235,10 @@
                         return r;
         }
 
-        extra = strempty(extra);
-
-        t = new(char, strlen(p) + 3 + strlen(extra) + 16 + 1);
-        if (!t)
+        if (asprintf(&s, "%016" PRIx64, random_u64()) < 0)
                 return -ENOMEM;
 
-        if (isempty(p))
-                x = stpcpy(stpcpy(t, ".#"), extra);
-        else
-                x = stpcpy(stpcpy(stpcpy(t, p), "/.#"), extra);
-
-        u = random_u64();
-        for (unsigned i = 0; i < 16; i++) {
-                *(x++) = hexchar(u & 0xF);
-                u >>= 4;
-        }
-
-        *x = 0;
-
-        *ret = path_simplify(t);
-        return 0;
+        return tempfn_build(p, extra, s, /* child = */ true, ret);
 }
 
 int open_tmpfile_unlinkable(const char *directory, int flags) {
@@ -282,9 +306,29 @@
         return fd;
 }
 
-int link_tmpfile(int fd, const char *path, const char *target) {
-        int r;
+int fopen_tmpfile_linkable(const char *target, int flags, char **ret_path, FILE **ret_file) {
+        _cleanup_free_ char *path = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_close_ int fd = -EBADF;
 
+        assert(target);
+        assert(ret_file);
+        assert(ret_path);
+
+        fd = open_tmpfile_linkable(target, flags, &path);
+        if (fd < 0)
+                return fd;
+
+        f = take_fdopen(&fd, "w");
+        if (!f)
+                return -ENOMEM;
+
+        *ret_path = TAKE_PTR(path);
+        *ret_file = TAKE_PTR(f);
+        return 0;
+}
+
+int link_tmpfile(int fd, const char *path, const char *target) {
         assert(fd >= 0);
         assert(target);
 
@@ -295,20 +339,27 @@
          * Note that in both cases we will not replace existing files. This is because linkat() does not support this
          * operation currently (renameat2() does), and there is no nice way to emulate this. */
 
-        if (path) {
-                r = rename_noreplace(AT_FDCWD, path, AT_FDCWD, target);
-                if (r < 0)
-                        return r;
-        } else {
-                char proc_fd_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(fd) + 1];
+        if (path)
+                return rename_noreplace(AT_FDCWD, path, AT_FDCWD, target);
 
-                xsprintf(proc_fd_path, "/proc/self/fd/%i", fd);
+        return RET_NERRNO(linkat(AT_FDCWD, FORMAT_PROC_FD_PATH(fd), AT_FDCWD, target, AT_SYMLINK_FOLLOW));
+}
 
-                if (linkat(AT_FDCWD, proc_fd_path, AT_FDCWD, target, AT_SYMLINK_FOLLOW) < 0)
-                        return -errno;
-        }
+int flink_tmpfile(FILE *f, const char *path, const char *target) {
+        int fd, r;
 
-        return 0;
+        assert(f);
+        assert(target);
+
+        fd = fileno(f);
+        if (fd < 0) /* Not all FILE* objects encapsulate fds */
+                return -EBADF;
+
+        r = fflush_sync_and_check(f);
+        if (r < 0)
+                return r;
+
+        return link_tmpfile(fd, path, target);
 }
 
 int mkdtemp_malloc(const char *template, char **ret) {
@@ -337,3 +388,23 @@
         *ret = TAKE_PTR(p);
         return 0;
 }
+
+int mkdtemp_open(const char *template, int flags, char **ret) {
+        _cleanup_free_ char *p = NULL;
+        int fd, r;
+
+        r = mkdtemp_malloc(template, &p);
+        if (r < 0)
+                return r;
+
+        fd = RET_NERRNO(open(p, O_DIRECTORY|O_CLOEXEC|flags));
+        if (fd < 0) {
+                (void) rmdir(p);
+                return fd;
+        }
+
+        if (ret)
+                *ret = TAKE_PTR(p);
+
+        return fd;
+}
diff --git a/src/basic/tmpfile-util.h b/src/basic/tmpfile-util.h
index 45255fc..e5b7709 100644
--- a/src/basic/tmpfile-util.h
+++ b/src/basic/tmpfile-util.h
@@ -1,9 +1,19 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <fcntl.h>
 #include <stdio.h>
 
-int fopen_temporary(const char *path, FILE **_f, char **_temp_path);
+int fopen_temporary_at(int dir_fd, const char *path, FILE **ret_file, char **ret_path);
+static inline int fopen_temporary(const char *path, FILE **ret_file, char **ret_path) {
+        return fopen_temporary_at(AT_FDCWD, path, ret_file, ret_path);
+}
+
+int fopen_temporary_child_at(int dir_fd, const char *path, FILE **ret_file, char **ret_path);
+static inline int fopen_temporary_child(const char *path, FILE **ret_file, char **ret_path) {
+        return fopen_temporary_child_at(AT_FDCWD, path, ret_file, ret_path);
+}
+
 int mkostemp_safe(char *pattern);
 int fmkostemp_safe(char *pattern, const char *mode, FILE**_f);
 
@@ -13,7 +23,10 @@
 
 int open_tmpfile_unlinkable(const char *directory, int flags);
 int open_tmpfile_linkable(const char *target, int flags, char **ret_path);
+int fopen_tmpfile_linkable(const char *target, int flags, char **ret_path, FILE **ret_file);
 
 int link_tmpfile(int fd, const char *path, const char *target);
+int flink_tmpfile(FILE *f, const char *path, const char *target);
 
 int mkdtemp_malloc(const char *template, char **ret);
+int mkdtemp_open(const char *template, int flags, char **ret);
diff --git a/src/basic/uid-range.c b/src/basic/uid-range.c
new file mode 100644
index 0000000..8463599
--- /dev/null
+++ b/src/basic/uid-range.c
@@ -0,0 +1,237 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "alloc-util.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "format-util.h"
+#include "macro.h"
+#include "path-util.h"
+#include "sort-util.h"
+#include "stat-util.h"
+#include "uid-range.h"
+#include "user-util.h"
+
+UidRange *uid_range_free(UidRange *range) {
+        if (!range)
+                return NULL;
+
+        free(range->entries);
+        return mfree(range);
+}
+
+static bool uid_range_entry_intersect(const UidRangeEntry *a, const UidRangeEntry *b) {
+        assert(a);
+        assert(b);
+
+        return a->start <= b->start + b->nr && a->start + a->nr >= b->start;
+}
+
+static int uid_range_entry_compare(const UidRangeEntry *a, const UidRangeEntry *b) {
+        int r;
+
+        assert(a);
+        assert(b);
+
+        r = CMP(a->start, b->start);
+        if (r != 0)
+                return r;
+
+        return CMP(a->nr, b->nr);
+}
+
+static void uid_range_coalesce(UidRange *range) {
+        assert(range);
+
+        if (range->n_entries <= 0)
+                return;
+
+        typesafe_qsort(range->entries, range->n_entries, uid_range_entry_compare);
+
+        for (size_t i = 0; i < range->n_entries; i++) {
+                UidRangeEntry *x = range->entries + i;
+
+                for (size_t j = i + 1; j < range->n_entries; j++) {
+                        UidRangeEntry *y = range->entries + j;
+                        uid_t begin, end;
+
+                        if (!uid_range_entry_intersect(x, y))
+                                break;
+
+                        begin = MIN(x->start, y->start);
+                        end = MAX(x->start + x->nr, y->start + y->nr);
+
+                        x->start = begin;
+                        x->nr = end - begin;
+
+                        if (range->n_entries > j + 1)
+                                memmove(y, y + 1, sizeof(UidRangeEntry) * (range->n_entries - j - 1));
+
+                        range->n_entries--;
+                        j--;
+                }
+        }
+}
+
+int uid_range_add_internal(UidRange **range, uid_t start, uid_t nr, bool coalesce) {
+        _cleanup_(uid_range_freep) UidRange *range_new = NULL;
+        UidRange *p;
+
+        assert(range);
+
+        if (nr <= 0)
+                return 0;
+
+        if (start > UINT32_MAX - nr) /* overflow check */
+                return -ERANGE;
+
+        if (*range)
+                p = *range;
+        else {
+                range_new = new0(UidRange, 1);
+                if (!range_new)
+                        return -ENOMEM;
+
+                p = range_new;
+        }
+
+        if (!GREEDY_REALLOC(p->entries, p->n_entries + 1))
+                return -ENOMEM;
+
+        p->entries[p->n_entries++] = (UidRangeEntry) {
+                .start = start,
+                .nr = nr,
+        };
+
+        if (coalesce)
+                uid_range_coalesce(p);
+
+        TAKE_PTR(range_new);
+        *range = p;
+
+        return 0;
+}
+
+int uid_range_add_str(UidRange **range, const char *s) {
+        uid_t start, end;
+        int r;
+
+        assert(range);
+        assert(s);
+
+        r = parse_uid_range(s, &start, &end);
+        if (r < 0)
+                return r;
+
+        return uid_range_add_internal(range, start, end - start + 1, /* coalesce = */ true);
+}
+
+int uid_range_next_lower(const UidRange *range, uid_t *uid) {
+        uid_t closest = UID_INVALID, candidate;
+
+        assert(range);
+        assert(uid);
+
+        if (*uid == 0)
+                return -EBUSY;
+
+        candidate = *uid - 1;
+
+        for (size_t i = 0; i < range->n_entries; i++) {
+                uid_t begin, end;
+
+                begin = range->entries[i].start;
+                end = range->entries[i].start + range->entries[i].nr - 1;
+
+                if (candidate >= begin && candidate <= end) {
+                        *uid = candidate;
+                        return 1;
+                }
+
+                if (end < candidate)
+                        closest = end;
+        }
+
+        if (closest == UID_INVALID)
+                return -EBUSY;
+
+        *uid = closest;
+        return 1;
+}
+
+bool uid_range_covers(const UidRange *range, uid_t start, uid_t nr) {
+        if (nr == 0) /* empty range? always covered... */
+                return true;
+
+        if (start > UINT32_MAX - nr) /* range overflows? definitely not covered... */
+                return false;
+
+        if (!range)
+                return false;
+
+        for (size_t i = 0; i < range->n_entries; i++)
+                if (start >= range->entries[i].start &&
+                    start + nr <= range->entries[i].start + range->entries[i].nr)
+                        return true;
+
+        return false;
+}
+
+int uid_range_load_userns(UidRange **ret, const char *path) {
+        _cleanup_(uid_range_freep) UidRange *range = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        int r;
+
+        /* If 'path' is NULL loads the UID range of the userns namespace we run. Otherwise load the data from
+         * the specified file (which can be either uid_map or gid_map, in case caller needs to deal with GID
+         * maps).
+         *
+         * To simplify things this will modify the passed array in case of later failure. */
+
+        assert(ret);
+
+        if (!path)
+                path = "/proc/self/uid_map";
+
+        f = fopen(path, "re");
+        if (!f) {
+                r = -errno;
+
+                if (r == -ENOENT && path_startswith(path, "/proc/"))
+                        return proc_mounted() > 0 ? -EOPNOTSUPP : -ENOSYS;
+
+                return r;
+        }
+
+        range = new0(UidRange, 1);
+        if (!range)
+                return -ENOMEM;
+
+        for (;;) {
+                uid_t uid_base, uid_shift, uid_range;
+                int k;
+
+                errno = 0;
+                k = fscanf(f, UID_FMT " " UID_FMT " " UID_FMT "\n", &uid_base, &uid_shift, &uid_range);
+                if (k == EOF) {
+                        if (ferror(f))
+                                return errno_or_else(EIO);
+
+                        break;
+                }
+                if (k != 3)
+                        return -EBADMSG;
+
+                r = uid_range_add_internal(&range, uid_base, uid_range, /* coalesce = */ false);
+                if (r < 0)
+                        return r;
+        }
+
+        uid_range_coalesce(range);
+
+        *ret = TAKE_PTR(range);
+        return 0;
+}
diff --git a/src/basic/uid-range.h b/src/basic/uid-range.h
new file mode 100644
index 0000000..461a511
--- /dev/null
+++ b/src/basic/uid-range.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "macro.h"
+
+typedef struct UidRangeEntry {
+        uid_t start, nr;
+} UidRangeEntry;
+
+typedef struct UidRange {
+        UidRangeEntry *entries;
+        size_t n_entries;
+} UidRange;
+
+UidRange *uid_range_free(UidRange *range);
+DEFINE_TRIVIAL_CLEANUP_FUNC(UidRange*, uid_range_free);
+
+int uid_range_add_internal(UidRange **range, uid_t start, uid_t nr, bool coalesce);
+static inline int uid_range_add(UidRange **range, uid_t start, uid_t nr) {
+        return uid_range_add_internal(range, start, nr, true);
+}
+int uid_range_add_str(UidRange **range, const char *s);
+
+int uid_range_next_lower(const UidRange *range, uid_t *uid);
+
+bool uid_range_covers(const UidRange *range, uid_t start, uid_t nr);
+static inline bool uid_range_contains(const UidRange *range, uid_t uid) {
+        return uid_range_covers(range, uid, 1);
+}
+
+int uid_range_load_userns(UidRange **ret, const char *path);
diff --git a/src/basic/umask-util.h b/src/basic/umask-util.h
index 90d18f7..6f0e1cc 100644
--- a/src/basic/umask-util.h
+++ b/src/basic/umask-util.h
@@ -15,12 +15,12 @@
 
 /* We make use of the fact here that the umask() concept is using only the lower 9 bits of mode_t, although
  * mode_t has space for the file type in the bits further up. We simply OR in the file type mask S_IFMT to
- * distinguish the first and the second iteration of the RUN_WITH_UMASK() loop, so that we can run the first
- * one, and exit on the second. */
+ * distinguish the first and the second iteration of the WITH_UMASK() loop, so that we can run the first one,
+ * and exit on the second. */
 
 assert_cc((S_IFMT & 0777) == 0);
 
-#define RUN_WITH_UMASK(mask)                                            \
+#define WITH_UMASK(mask)                                            \
         for (_cleanup_umask_ mode_t _saved_umask_ = umask(mask) | S_IFMT; \
              FLAGS_SET(_saved_umask_, S_IFMT);                          \
              _saved_umask_ &= 0777)
diff --git a/src/basic/unaligned.h b/src/basic/unaligned.h
index 4100be0..04580cf 100644
--- a/src/basic/unaligned.h
+++ b/src/basic/unaligned.h
@@ -4,6 +4,8 @@
 #include <endian.h>
 #include <stdint.h>
 
+#include "unaligned-fundamental.h"
+
 /* BE */
 
 static inline uint16_t unaligned_read_be16(const void *_u) {
@@ -79,21 +81,3 @@
 
         u->x = le64toh(a);
 }
-
-#if __BYTE_ORDER == __BIG_ENDIAN
-#define unaligned_read_ne16 unaligned_read_be16
-#define unaligned_read_ne32 unaligned_read_be32
-#define unaligned_read_ne64 unaligned_read_be64
-
-#define unaligned_write_ne16 unaligned_write_be16
-#define unaligned_write_ne32 unaligned_write_be32
-#define unaligned_write_ne64 unaligned_write_be64
-#else
-#define unaligned_read_ne16 unaligned_read_le16
-#define unaligned_read_ne32 unaligned_read_le32
-#define unaligned_read_ne64 unaligned_read_le64
-
-#define unaligned_write_ne16 unaligned_write_le16
-#define unaligned_write_ne32 unaligned_write_le32
-#define unaligned_write_ne64 unaligned_write_le64
-#endif
diff --git a/src/basic/unit-def.c b/src/basic/unit-def.c
index 2667e61..bdb1860 100644
--- a/src/basic/unit-def.c
+++ b/src/basic/unit-def.c
@@ -37,17 +37,17 @@
 const char* unit_dbus_interface_from_type(UnitType t) {
 
         static const char *const table[_UNIT_TYPE_MAX] = {
-                [UNIT_SERVICE] = "org.freedesktop.systemd1.Service",
-                [UNIT_SOCKET] = "org.freedesktop.systemd1.Socket",
-                [UNIT_TARGET] = "org.freedesktop.systemd1.Target",
-                [UNIT_DEVICE] = "org.freedesktop.systemd1.Device",
-                [UNIT_MOUNT] = "org.freedesktop.systemd1.Mount",
+                [UNIT_SERVICE]   = "org.freedesktop.systemd1.Service",
+                [UNIT_SOCKET]    = "org.freedesktop.systemd1.Socket",
+                [UNIT_TARGET]    = "org.freedesktop.systemd1.Target",
+                [UNIT_DEVICE]    = "org.freedesktop.systemd1.Device",
+                [UNIT_MOUNT]     = "org.freedesktop.systemd1.Mount",
                 [UNIT_AUTOMOUNT] = "org.freedesktop.systemd1.Automount",
-                [UNIT_SWAP] = "org.freedesktop.systemd1.Swap",
-                [UNIT_TIMER] = "org.freedesktop.systemd1.Timer",
-                [UNIT_PATH] = "org.freedesktop.systemd1.Path",
-                [UNIT_SLICE] = "org.freedesktop.systemd1.Slice",
-                [UNIT_SCOPE] = "org.freedesktop.systemd1.Scope",
+                [UNIT_SWAP]      = "org.freedesktop.systemd1.Swap",
+                [UNIT_TIMER]     = "org.freedesktop.systemd1.Timer",
+                [UNIT_PATH]      = "org.freedesktop.systemd1.Path",
+                [UNIT_SLICE]     = "org.freedesktop.systemd1.Slice",
+                [UNIT_SCOPE]     = "org.freedesktop.systemd1.Scope",
         };
 
         if (t < 0)
@@ -69,50 +69,50 @@
 }
 
 static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
-        [UNIT_SERVICE] = "service",
-        [UNIT_SOCKET] = "socket",
-        [UNIT_TARGET] = "target",
-        [UNIT_DEVICE] = "device",
-        [UNIT_MOUNT] = "mount",
+        [UNIT_SERVICE]   = "service",
+        [UNIT_SOCKET]    = "socket",
+        [UNIT_TARGET]    = "target",
+        [UNIT_DEVICE]    = "device",
+        [UNIT_MOUNT]     = "mount",
         [UNIT_AUTOMOUNT] = "automount",
-        [UNIT_SWAP] = "swap",
-        [UNIT_TIMER] = "timer",
-        [UNIT_PATH] = "path",
-        [UNIT_SLICE] = "slice",
-        [UNIT_SCOPE] = "scope",
+        [UNIT_SWAP]      = "swap",
+        [UNIT_TIMER]     = "timer",
+        [UNIT_PATH]      = "path",
+        [UNIT_SLICE]     = "slice",
+        [UNIT_SCOPE]     = "scope",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(unit_type, UnitType);
 
 static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = {
-        [UNIT_STUB] = "stub",
-        [UNIT_LOADED] = "loaded",
-        [UNIT_NOT_FOUND] = "not-found",
+        [UNIT_STUB]        = "stub",
+        [UNIT_LOADED]      = "loaded",
+        [UNIT_NOT_FOUND]   = "not-found",
         [UNIT_BAD_SETTING] = "bad-setting",
-        [UNIT_ERROR] = "error",
-        [UNIT_MERGED] = "merged",
-        [UNIT_MASKED] = "masked"
+        [UNIT_ERROR]       = "error",
+        [UNIT_MERGED]      = "merged",
+        [UNIT_MASKED]      = "masked"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(unit_load_state, UnitLoadState);
 
 static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = {
-        [UNIT_ACTIVE] = "active",
-        [UNIT_RELOADING] = "reloading",
-        [UNIT_INACTIVE] = "inactive",
-        [UNIT_FAILED] = "failed",
-        [UNIT_ACTIVATING] = "activating",
+        [UNIT_ACTIVE]       = "active",
+        [UNIT_RELOADING]    = "reloading",
+        [UNIT_INACTIVE]     = "inactive",
+        [UNIT_FAILED]       = "failed",
+        [UNIT_ACTIVATING]   = "activating",
         [UNIT_DEACTIVATING] = "deactivating",
-        [UNIT_MAINTENANCE] = "maintenance",
+        [UNIT_MAINTENANCE]  = "maintenance",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(unit_active_state, UnitActiveState);
 
 static const char* const freezer_state_table[_FREEZER_STATE_MAX] = {
-        [FREEZER_RUNNING] = "running",
+        [FREEZER_RUNNING]  = "running",
         [FREEZER_FREEZING] = "freezing",
-        [FREEZER_FROZEN] = "frozen",
-        [FREEZER_THAWING] = "thawing",
+        [FREEZER_FROZEN]   = "frozen",
+        [FREEZER_THAWING]  = "thawing",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(freezer_state, FreezerState);
@@ -125,172 +125,175 @@
 DEFINE_STRING_TABLE_LOOKUP(unit_marker, UnitMarker);
 
 static const char* const automount_state_table[_AUTOMOUNT_STATE_MAX] = {
-        [AUTOMOUNT_DEAD] = "dead",
+        [AUTOMOUNT_DEAD]    = "dead",
         [AUTOMOUNT_WAITING] = "waiting",
         [AUTOMOUNT_RUNNING] = "running",
-        [AUTOMOUNT_FAILED] = "failed"
+        [AUTOMOUNT_FAILED]  = "failed"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(automount_state, AutomountState);
 
 static const char* const device_state_table[_DEVICE_STATE_MAX] = {
-        [DEVICE_DEAD] = "dead",
+        [DEVICE_DEAD]      = "dead",
         [DEVICE_TENTATIVE] = "tentative",
-        [DEVICE_PLUGGED] = "plugged",
+        [DEVICE_PLUGGED]   = "plugged",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(device_state, DeviceState);
 
 static const char* const mount_state_table[_MOUNT_STATE_MAX] = {
-        [MOUNT_DEAD] = "dead",
-        [MOUNT_MOUNTING] = "mounting",
-        [MOUNT_MOUNTING_DONE] = "mounting-done",
-        [MOUNT_MOUNTED] = "mounted",
-        [MOUNT_REMOUNTING] = "remounting",
-        [MOUNT_UNMOUNTING] = "unmounting",
+        [MOUNT_DEAD]               = "dead",
+        [MOUNT_MOUNTING]           = "mounting",
+        [MOUNT_MOUNTING_DONE]      = "mounting-done",
+        [MOUNT_MOUNTED]            = "mounted",
+        [MOUNT_REMOUNTING]         = "remounting",
+        [MOUNT_UNMOUNTING]         = "unmounting",
         [MOUNT_REMOUNTING_SIGTERM] = "remounting-sigterm",
         [MOUNT_REMOUNTING_SIGKILL] = "remounting-sigkill",
         [MOUNT_UNMOUNTING_SIGTERM] = "unmounting-sigterm",
         [MOUNT_UNMOUNTING_SIGKILL] = "unmounting-sigkill",
-        [MOUNT_FAILED] = "failed",
-        [MOUNT_CLEANING] = "cleaning",
+        [MOUNT_FAILED]             = "failed",
+        [MOUNT_CLEANING]           = "cleaning",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(mount_state, MountState);
 
 static const char* const path_state_table[_PATH_STATE_MAX] = {
-        [PATH_DEAD] = "dead",
+        [PATH_DEAD]    = "dead",
         [PATH_WAITING] = "waiting",
         [PATH_RUNNING] = "running",
-        [PATH_FAILED] = "failed"
+        [PATH_FAILED]  = "failed"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(path_state, PathState);
 
 static const char* const scope_state_table[_SCOPE_STATE_MAX] = {
-        [SCOPE_DEAD] = "dead",
-        [SCOPE_RUNNING] = "running",
-        [SCOPE_ABANDONED] = "abandoned",
+        [SCOPE_DEAD]         = "dead",
+        [SCOPE_START_CHOWN]  = "start-chown",
+        [SCOPE_RUNNING]      = "running",
+        [SCOPE_ABANDONED]    = "abandoned",
         [SCOPE_STOP_SIGTERM] = "stop-sigterm",
         [SCOPE_STOP_SIGKILL] = "stop-sigkill",
-        [SCOPE_FAILED] = "failed",
+        [SCOPE_FAILED]       = "failed",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(scope_state, ScopeState);
 
 static const char* const service_state_table[_SERVICE_STATE_MAX] = {
-        [SERVICE_DEAD] = "dead",
-        [SERVICE_CONDITION] = "condition",
-        [SERVICE_START_PRE] = "start-pre",
-        [SERVICE_START] = "start",
-        [SERVICE_START_POST] = "start-post",
-        [SERVICE_RUNNING] = "running",
-        [SERVICE_EXITED] = "exited",
-        [SERVICE_RELOAD] = "reload",
-        [SERVICE_STOP] = "stop",
-        [SERVICE_STOP_WATCHDOG] = "stop-watchdog",
-        [SERVICE_STOP_SIGTERM] = "stop-sigterm",
-        [SERVICE_STOP_SIGKILL] = "stop-sigkill",
-        [SERVICE_STOP_POST] = "stop-post",
+        [SERVICE_DEAD]           = "dead",
+        [SERVICE_CONDITION]      = "condition",
+        [SERVICE_START_PRE]      = "start-pre",
+        [SERVICE_START]          = "start",
+        [SERVICE_START_POST]     = "start-post",
+        [SERVICE_RUNNING]        = "running",
+        [SERVICE_EXITED]         = "exited",
+        [SERVICE_RELOAD]         = "reload",
+        [SERVICE_RELOAD_SIGNAL]  = "reload-signal",
+        [SERVICE_RELOAD_NOTIFY]  = "reload-notify",
+        [SERVICE_STOP]           = "stop",
+        [SERVICE_STOP_WATCHDOG]  = "stop-watchdog",
+        [SERVICE_STOP_SIGTERM]   = "stop-sigterm",
+        [SERVICE_STOP_SIGKILL]   = "stop-sigkill",
+        [SERVICE_STOP_POST]      = "stop-post",
         [SERVICE_FINAL_WATCHDOG] = "final-watchdog",
-        [SERVICE_FINAL_SIGTERM] = "final-sigterm",
-        [SERVICE_FINAL_SIGKILL] = "final-sigkill",
-        [SERVICE_FAILED] = "failed",
-        [SERVICE_AUTO_RESTART] = "auto-restart",
-        [SERVICE_CLEANING] = "cleaning",
+        [SERVICE_FINAL_SIGTERM]  = "final-sigterm",
+        [SERVICE_FINAL_SIGKILL]  = "final-sigkill",
+        [SERVICE_FAILED]         = "failed",
+        [SERVICE_AUTO_RESTART]   = "auto-restart",
+        [SERVICE_CLEANING]       = "cleaning",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
 
 static const char* const slice_state_table[_SLICE_STATE_MAX] = {
-        [SLICE_DEAD] = "dead",
+        [SLICE_DEAD]   = "dead",
         [SLICE_ACTIVE] = "active"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(slice_state, SliceState);
 
 static const char* const socket_state_table[_SOCKET_STATE_MAX] = {
-        [SOCKET_DEAD] = "dead",
-        [SOCKET_START_PRE] = "start-pre",
-        [SOCKET_START_CHOWN] = "start-chown",
-        [SOCKET_START_POST] = "start-post",
-        [SOCKET_LISTENING] = "listening",
-        [SOCKET_RUNNING] = "running",
-        [SOCKET_STOP_PRE] = "stop-pre",
+        [SOCKET_DEAD]             = "dead",
+        [SOCKET_START_PRE]        = "start-pre",
+        [SOCKET_START_CHOWN]      = "start-chown",
+        [SOCKET_START_POST]       = "start-post",
+        [SOCKET_LISTENING]        = "listening",
+        [SOCKET_RUNNING]          = "running",
+        [SOCKET_STOP_PRE]         = "stop-pre",
         [SOCKET_STOP_PRE_SIGTERM] = "stop-pre-sigterm",
         [SOCKET_STOP_PRE_SIGKILL] = "stop-pre-sigkill",
-        [SOCKET_STOP_POST] = "stop-post",
-        [SOCKET_FINAL_SIGTERM] = "final-sigterm",
-        [SOCKET_FINAL_SIGKILL] = "final-sigkill",
-        [SOCKET_FAILED] = "failed",
-        [SOCKET_CLEANING] = "cleaning",
+        [SOCKET_STOP_POST]        = "stop-post",
+        [SOCKET_FINAL_SIGTERM]    = "final-sigterm",
+        [SOCKET_FINAL_SIGKILL]    = "final-sigkill",
+        [SOCKET_FAILED]           = "failed",
+        [SOCKET_CLEANING]         = "cleaning",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(socket_state, SocketState);
 
 static const char* const swap_state_table[_SWAP_STATE_MAX] = {
-        [SWAP_DEAD] = "dead",
-        [SWAP_ACTIVATING] = "activating",
-        [SWAP_ACTIVATING_DONE] = "activating-done",
-        [SWAP_ACTIVE] = "active",
-        [SWAP_DEACTIVATING] = "deactivating",
+        [SWAP_DEAD]                 = "dead",
+        [SWAP_ACTIVATING]           = "activating",
+        [SWAP_ACTIVATING_DONE]      = "activating-done",
+        [SWAP_ACTIVE]               = "active",
+        [SWAP_DEACTIVATING]         = "deactivating",
         [SWAP_DEACTIVATING_SIGTERM] = "deactivating-sigterm",
         [SWAP_DEACTIVATING_SIGKILL] = "deactivating-sigkill",
-        [SWAP_FAILED] = "failed",
-        [SWAP_CLEANING] = "cleaning",
+        [SWAP_FAILED]               = "failed",
+        [SWAP_CLEANING]             = "cleaning",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(swap_state, SwapState);
 
 static const char* const target_state_table[_TARGET_STATE_MAX] = {
-        [TARGET_DEAD] = "dead",
+        [TARGET_DEAD]   = "dead",
         [TARGET_ACTIVE] = "active"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(target_state, TargetState);
 
 static const char* const timer_state_table[_TIMER_STATE_MAX] = {
-        [TIMER_DEAD] = "dead",
+        [TIMER_DEAD]    = "dead",
         [TIMER_WAITING] = "waiting",
         [TIMER_RUNNING] = "running",
         [TIMER_ELAPSED] = "elapsed",
-        [TIMER_FAILED] = "failed"
+        [TIMER_FAILED]  = "failed"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(timer_state, TimerState);
 
 static const char* const unit_dependency_table[_UNIT_DEPENDENCY_MAX] = {
-        [UNIT_REQUIRES] = "Requires",
-        [UNIT_REQUISITE] = "Requisite",
-        [UNIT_WANTS] = "Wants",
-        [UNIT_BINDS_TO] = "BindsTo",
-        [UNIT_PART_OF] = "PartOf",
-        [UNIT_UPHOLDS] = "Upholds",
-        [UNIT_REQUIRED_BY] = "RequiredBy",
-        [UNIT_REQUISITE_OF] = "RequisiteOf",
-        [UNIT_WANTED_BY] = "WantedBy",
-        [UNIT_BOUND_BY] = "BoundBy",
-        [UNIT_UPHELD_BY] = "UpheldBy",
-        [UNIT_CONSISTS_OF] = "ConsistsOf",
-        [UNIT_CONFLICTS] = "Conflicts",
-        [UNIT_CONFLICTED_BY] = "ConflictedBy",
-        [UNIT_BEFORE] = "Before",
-        [UNIT_AFTER] = "After",
-        [UNIT_ON_SUCCESS] = "OnSuccess",
-        [UNIT_ON_SUCCESS_OF] = "OnSuccessOf",
-        [UNIT_ON_FAILURE] = "OnFailure",
-        [UNIT_ON_FAILURE_OF] = "OnFailureOf",
-        [UNIT_TRIGGERS] = "Triggers",
-        [UNIT_TRIGGERED_BY] = "TriggeredBy",
-        [UNIT_PROPAGATES_RELOAD_TO] = "PropagatesReloadTo",
+        [UNIT_REQUIRES]               = "Requires",
+        [UNIT_REQUISITE]              = "Requisite",
+        [UNIT_WANTS]                  = "Wants",
+        [UNIT_BINDS_TO]               = "BindsTo",
+        [UNIT_PART_OF]                = "PartOf",
+        [UNIT_UPHOLDS]                = "Upholds",
+        [UNIT_REQUIRED_BY]            = "RequiredBy",
+        [UNIT_REQUISITE_OF]           = "RequisiteOf",
+        [UNIT_WANTED_BY]              = "WantedBy",
+        [UNIT_BOUND_BY]               = "BoundBy",
+        [UNIT_UPHELD_BY]              = "UpheldBy",
+        [UNIT_CONSISTS_OF]            = "ConsistsOf",
+        [UNIT_CONFLICTS]              = "Conflicts",
+        [UNIT_CONFLICTED_BY]          = "ConflictedBy",
+        [UNIT_BEFORE]                 = "Before",
+        [UNIT_AFTER]                  = "After",
+        [UNIT_ON_SUCCESS]             = "OnSuccess",
+        [UNIT_ON_SUCCESS_OF]          = "OnSuccessOf",
+        [UNIT_ON_FAILURE]             = "OnFailure",
+        [UNIT_ON_FAILURE_OF]          = "OnFailureOf",
+        [UNIT_TRIGGERS]               = "Triggers",
+        [UNIT_TRIGGERED_BY]           = "TriggeredBy",
+        [UNIT_PROPAGATES_RELOAD_TO]   = "PropagatesReloadTo",
         [UNIT_RELOAD_PROPAGATED_FROM] = "ReloadPropagatedFrom",
-        [UNIT_PROPAGATES_STOP_TO] = "PropagatesStopTo",
-        [UNIT_STOP_PROPAGATED_FROM] = "StopPropagatedFrom",
-        [UNIT_JOINS_NAMESPACE_OF] = "JoinsNamespaceOf",
-        [UNIT_REFERENCES] = "References",
-        [UNIT_REFERENCED_BY] = "ReferencedBy",
-        [UNIT_IN_SLICE] = "InSlice",
-        [UNIT_SLICE_OF] = "SliceOf",
+        [UNIT_PROPAGATES_STOP_TO]     = "PropagatesStopTo",
+        [UNIT_STOP_PROPAGATED_FROM]   = "StopPropagatedFrom",
+        [UNIT_JOINS_NAMESPACE_OF]     = "JoinsNamespaceOf",
+        [UNIT_REFERENCES]             = "References",
+        [UNIT_REFERENCED_BY]          = "ReferencedBy",
+        [UNIT_IN_SLICE]               = "InSlice",
+        [UNIT_SLICE_OF]               = "SliceOf",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(unit_dependency, UnitDependency);
@@ -299,7 +302,7 @@
         [NOTIFY_NONE] = "none",
         [NOTIFY_MAIN] = "main",
         [NOTIFY_EXEC] = "exec",
-        [NOTIFY_ALL] = "all"
+        [NOTIFY_ALL]  = "all"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
diff --git a/src/basic/unit-def.h b/src/basic/unit-def.h
index 08651ef..bae132e 100644
--- a/src/basic/unit-def.h
+++ b/src/basic/unit-def.h
@@ -4,7 +4,7 @@
 #include <stdbool.h>
 
 #include "errno-list.h"
-#include "locale-util.h"
+#include "glyph-util.h"
 #include "macro.h"
 
 /* The enum order is used to order unit jobs in the job queue
@@ -114,6 +114,7 @@
 
 typedef enum ScopeState {
         SCOPE_DEAD,
+        SCOPE_START_CHOWN,
         SCOPE_RUNNING,
         SCOPE_ABANDONED,
         SCOPE_STOP_SIGTERM,
@@ -131,7 +132,9 @@
         SERVICE_START_POST,
         SERVICE_RUNNING,
         SERVICE_EXITED,            /* Nothing is running anymore, but RemainAfterExit is true hence this is OK */
-        SERVICE_RELOAD,
+        SERVICE_RELOAD,            /* Reloading via ExecReload= */
+        SERVICE_RELOAD_SIGNAL,     /* Reloading via SIGHUP requested */
+        SERVICE_RELOAD_NOTIFY,     /* Waiting for READY=1 after RELOADING=1 notify */
         SERVICE_STOP,              /* No STOP_PRE state, instead just register multiple STOP executables */
         SERVICE_STOP_WATCHDOG,
         SERVICE_STOP_SIGTERM,
diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
index d1e997e..1f79a27 100644
--- a/src/basic/unit-file.c
+++ b/src/basic/unit-file.c
@@ -2,9 +2,11 @@
 
 #include "sd-id128.h"
 
+#include "chase-symlinks.h"
 #include "dirent-util.h"
 #include "fd-util.h"
 #include "fs-util.h"
+#include "initrd-util.h"
 #include "macro.h"
 #include "path-lookup.h"
 #include "set.h"
@@ -68,7 +70,7 @@
         return 0;
 }
 
-int unit_validate_alias_symlink_and_warn(const char *filename, const char *target) {
+int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, const char *target) {
         const char *src, *dst;
         _cleanup_free_ char *src_instance = NULL, *dst_instance = NULL;
         UnitType src_unit_type, dst_unit_type;
@@ -81,7 +83,8 @@
          *
          * -EINVAL is returned if the something is wrong with the source filename or the source unit type is
          *         not allowed to symlink,
-         * -EXDEV if the target filename is not a valid unit name or doesn't match the source.
+         * -EXDEV if the target filename is not a valid unit name or doesn't match the source,
+         * -ELOOP for an alias to self.
          */
 
         src = basename(filename);
@@ -91,51 +94,56 @@
 
         src_name_type = unit_name_to_instance(src, &src_instance);
         if (src_name_type < 0)
-                return log_notice_errno(src_name_type,
-                                        "%s: not a valid unit name \"%s\": %m", filename, src);
+                return log_full_errno(log_level, src_name_type,
+                                      "%s: not a valid unit name \"%s\": %m", filename, src);
 
         src_unit_type = unit_name_to_type(src);
         assert(src_unit_type >= 0); /* unit_name_to_instance() checked the suffix already */
 
         if (!unit_type_may_alias(src_unit_type))
-                return log_notice_errno(SYNTHETIC_ERRNO(EINVAL),
-                                        "%s: symlinks are not allowed for units of this type, rejecting.",
-                                        filename);
+                return log_full_errno(log_level, SYNTHETIC_ERRNO(EINVAL),
+                                      "%s: symlinks are not allowed for units of this type, rejecting.",
+                                      filename);
 
         if (src_name_type != UNIT_NAME_PLAIN &&
             !unit_type_may_template(src_unit_type))
-                return log_notice_errno(SYNTHETIC_ERRNO(EINVAL),
-                                        "%s: templates not allowed for %s units, rejecting.",
-                                        filename, unit_type_to_string(src_unit_type));
+                return log_full_errno(log_level, SYNTHETIC_ERRNO(EINVAL),
+                                      "%s: templates not allowed for %s units, rejecting.",
+                                      filename, unit_type_to_string(src_unit_type));
 
         /* dst checks */
 
+        if (streq(src, dst))
+                return log_debug_errno(SYNTHETIC_ERRNO(ELOOP),
+                                       "%s: unit self-alias: %s → %s, ignoring.",
+                                       filename, src, dst);
+
         dst_name_type = unit_name_to_instance(dst, &dst_instance);
         if (dst_name_type < 0)
-                return log_notice_errno(dst_name_type == -EINVAL ? SYNTHETIC_ERRNO(EXDEV) : dst_name_type,
-                                        "%s points to \"%s\" which is not a valid unit name: %m",
-                                        filename, dst);
+                return log_full_errno(log_level, dst_name_type == -EINVAL ? SYNTHETIC_ERRNO(EXDEV) : dst_name_type,
+                                      "%s points to \"%s\" which is not a valid unit name: %m",
+                                      filename, dst);
 
         if (!(dst_name_type == src_name_type ||
               (src_name_type == UNIT_NAME_INSTANCE && dst_name_type == UNIT_NAME_TEMPLATE)))
-                return log_notice_errno(SYNTHETIC_ERRNO(EXDEV),
-                                        "%s: symlink target name type \"%s\" does not match source, rejecting.",
-                                        filename, dst);
+                return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV),
+                                      "%s: symlink target name type \"%s\" does not match source, rejecting.",
+                                      filename, dst);
 
         if (dst_name_type == UNIT_NAME_INSTANCE) {
                 assert(src_instance);
                 assert(dst_instance);
                 if (!streq(src_instance, dst_instance))
-                        return log_notice_errno(SYNTHETIC_ERRNO(EXDEV),
-                                                "%s: unit symlink target \"%s\" instance name doesn't match, rejecting.",
-                                                filename, dst);
+                        return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV),
+                                              "%s: unit symlink target \"%s\" instance name doesn't match, rejecting.",
+                                              filename, dst);
         }
 
         dst_unit_type = unit_name_to_type(dst);
         if (dst_unit_type != src_unit_type)
-                return log_notice_errno(SYNTHETIC_ERRNO(EXDEV),
-                                        "%s: symlink target \"%s\" has incompatible suffix, rejecting.",
-                                        filename, dst);
+                return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV),
+                                      "%s: symlink target \"%s\" has incompatible suffix, rejecting.",
+                                      filename, dst);
 
         return 0;
 }
@@ -208,8 +216,7 @@
 
         siphash24_init(&state, HASH_KEY.bytes);
 
-        char **dir;
-        STRV_FOREACH(dir, (char**) lp->search_path) {
+        STRV_FOREACH(dir, lp->search_path) {
                 struct stat st;
 
                 if (lookup_paths_mtime_exclude(lp, *dir))
@@ -235,6 +242,134 @@
         return updated == timestamp_hash;
 }
 
+static int directory_name_is_valid(const char *name) {
+
+        /* Accept a directory whose name is a valid unit file name ending in .wants/, .requires/ or .d/ */
+
+        FOREACH_STRING(suffix, ".wants", ".requires", ".d") {
+                _cleanup_free_ char *chopped = NULL;
+                const char *e;
+
+                e = endswith(name, suffix);
+                if (!e)
+                        continue;
+
+                chopped = strndup(name, e - name);
+                if (!chopped)
+                        return log_oom();
+
+                if (unit_name_is_valid(chopped, UNIT_NAME_ANY) ||
+                    unit_type_from_string(chopped) >= 0)
+                        return true;
+        }
+
+        return false;
+}
+
+int unit_file_resolve_symlink(
+                const char *root_dir,
+                char **search_path,
+                const char *dir,
+                int dirfd,
+                const char *filename,
+                bool resolve_destination_target,
+                char **ret_destination) {
+
+        _cleanup_free_ char *target = NULL, *simplified = NULL, *dst = NULL, *_dir = NULL, *_filename = NULL;
+        int r;
+
+        /* This can be called with either dir+dirfd valid and filename just a name,
+         * or !dir && dirfd==AT_FDCWD, and filename being a full path.
+         *
+         * If resolve_destination_target is true, an absolute path will be returned.
+         * If not, an absolute path is returned for linked unit files, and a relative
+         * path otherwise.
+         *
+         * Returns an error, false if this is an alias, true if it's a linked unit file. */
+
+        assert(filename);
+        assert(ret_destination);
+        assert(dir || path_is_absolute(filename));
+        assert(dirfd >= 0 || dirfd == AT_FDCWD);
+
+        r = readlinkat_malloc(dirfd, filename, &target);
+        if (r < 0)
+                return log_warning_errno(r, "Failed to read symlink %s%s%s: %m",
+                                         dir, dir ? "/" : "", filename);
+
+        if (!dir) {
+                r = path_extract_directory(filename, &_dir);
+                if (r < 0)
+                        return r;
+                dir = _dir;
+
+                r = path_extract_filename(filename, &_filename);
+                if (r < 0)
+                        return r;
+                if (r == O_DIRECTORY)
+                        return log_warning_errno(SYNTHETIC_ERRNO(EISDIR),
+                                                 "Unexpected path to a directory \"%s\", refusing.", filename);
+                filename = _filename;
+        }
+
+        bool is_abs = path_is_absolute(target);
+        if (root_dir || !is_abs) {
+                char *target_abs = path_join(is_abs ? root_dir : dir, target);
+                if (!target_abs)
+                        return log_oom();
+
+                free_and_replace(target, target_abs);
+        }
+
+        /* Get rid of "." and ".." components in target path */
+        r = chase_symlinks(target, root_dir, CHASE_NOFOLLOW | CHASE_NONEXISTENT, &simplified, NULL);
+        if (r < 0)
+                return log_warning_errno(r, "Failed to resolve symlink %s/%s pointing to %s: %m",
+                                         dir, filename, target);
+
+        assert(path_is_absolute(simplified));
+
+        /* Check if the symlink remain inside of our search path.
+         * If yes, it is an alias. Verify that it is valid.
+         *
+         * If no, then this is a linked unit file or mask, and we don't care about the target name
+         * when loading units, and we return the link *source* (resolve_destination_target == false);
+         * When this is called for installation purposes, we want the final destination,
+         * so we return the *target*.
+         */
+        const char *tail = path_startswith_strv(simplified, search_path);
+        if (tail) {  /* An alias */
+                _cleanup_free_ char *target_name = NULL;
+
+                r = path_extract_filename(simplified, &target_name);
+                if (r < 0)
+                        return r;
+
+                r = unit_validate_alias_symlink_or_warn(LOG_NOTICE, filename, simplified);
+                if (r < 0)
+                        return r;
+                if (is_path(tail))
+                        log_warning("Suspicious symlink %s/%s %s %s, treating as alias.",
+                                    dir, filename, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), simplified);
+
+                dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name);
+
+        } else {
+                log_debug("Linked unit file: %s/%s %s %s", dir, filename, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), simplified);
+
+                if (resolve_destination_target)
+                        dst = TAKE_PTR(simplified);
+                else {
+                        dst = path_join(dir, filename);
+                        if (!dst)
+                                return log_oom();
+                }
+        }
+
+        *ret_destination = TAKE_PTR(dst);
+        return !tail;  /* true if linked unit file */
+}
+
 int unit_file_build_name_map(
                 const LookupPaths *lp,
                 uint64_t *cache_timestamp_hash,
@@ -254,8 +389,8 @@
 
         _cleanup_hashmap_free_ Hashmap *ids = NULL, *names = NULL;
         _cleanup_set_free_free_ Set *paths = NULL;
+        _cleanup_strv_free_ char **expanded_search_path = NULL;
         uint64_t timestamp_hash;
-        char **dir;
         int r;
 
         /* Before doing anything, check if the timestamp hash that was passed is still valid.
@@ -273,8 +408,45 @@
                         return log_oom();
         }
 
-        STRV_FOREACH(dir, (char**) lp->search_path) {
-                struct dirent *de;
+        /* Go over all our search paths, chase their symlinks and store the result in the
+         * expanded_search_path list.
+         *
+         * This is important for cases where any of the unit directories itself are symlinks into other
+         * directories and would therefore cause all of the unit files to be recognized as linked units.
+         *
+         * This is important for distributions such as NixOS where most paths in /etc/ are symlinks to some
+         * other location on the filesystem (e.g.  into /nix/store/).
+         *
+         * Search paths are ordered by priority (highest first), and we need to maintain this order.
+         * If a resolved path is already in the list, we don't need to include.
+         *
+         * Note that we build a list that contains both the original paths and the resolved symlinks:
+         * we need the latter for the case where the directory is symlinked, as described above, and
+         * the former for the case where some unit file alias is a dangling symlink that points to one
+         * of the "original" directories (and can't be followed).
+         */
+        STRV_FOREACH(dir, lp->search_path) {
+                _cleanup_free_ char *resolved_dir = NULL;
+
+                r = strv_extend(&expanded_search_path, *dir);
+                if (r < 0)
+                        return log_oom();
+
+                r = chase_symlinks(*dir, NULL, 0, &resolved_dir, NULL);
+                if (r < 0) {
+                        if (r != -ENOENT)
+                                log_warning_errno(r, "Failed to resolve symlink %s, ignoring: %m", *dir);
+                        continue;
+                }
+
+                if (strv_contains(expanded_search_path, resolved_dir))
+                        continue;
+
+                if (strv_consume(&expanded_search_path, TAKE_PTR(resolved_dir)) < 0)
+                        return log_oom();
+        }
+
+        STRV_FOREACH(dir, lp->search_path) {
                 _cleanup_closedir_ DIR *d = NULL;
 
                 d = opendir(*dir);
@@ -285,18 +457,63 @@
                 }
 
                 FOREACH_DIRENT_ALL(de, d, log_warning_errno(errno, "Failed to read \"%s\", ignoring: %m", *dir)) {
-                        char *filename;
                         _unused_ _cleanup_free_ char *_filename_free = NULL;
-                        _cleanup_free_ char *simplified = NULL;
-                        const char *suffix, *dst = NULL;
-                        bool valid_unit_name;
-
-                        valid_unit_name = unit_name_is_valid(de->d_name, UNIT_NAME_ANY);
+                        char *filename;
+                        _cleanup_free_ char *dst = NULL;
+                        bool symlink_to_dir = false;
 
                         /* We only care about valid units and dirs with certain suffixes, let's ignore the
                          * rest. */
-                        if (!valid_unit_name &&
-                            !ENDSWITH_SET(de->d_name, ".wants", ".requires", ".d"))
+
+                        if (de->d_type == DT_REG) {
+
+                                /* Accept a regular file whose name is a valid unit file name. */
+                                if (!unit_name_is_valid(de->d_name, UNIT_NAME_ANY))
+                                        continue;
+
+                        } else if (de->d_type == DT_DIR) {
+
+                                if (!paths) /* Skip directories early unless path_cache is requested */
+                                        continue;
+
+                                r = directory_name_is_valid(de->d_name);
+                                if (r < 0)
+                                        return r;
+                                if (r == 0)
+                                        continue;
+
+                        } else if (de->d_type == DT_LNK) {
+
+                                /* Accept a symlink file whose name is a valid unit file name or
+                                 * ending in .wants/, .requires/ or .d/. */
+
+                                if (!unit_name_is_valid(de->d_name, UNIT_NAME_ANY)) {
+                                        _cleanup_free_ char *target = NULL;
+
+                                        if (!paths) /* Skip symlink to a directory early unless path_cache is requested */
+                                                continue;
+
+                                        r = directory_name_is_valid(de->d_name);
+                                        if (r < 0)
+                                                return r;
+                                        if (r == 0)
+                                                continue;
+
+                                        r = readlinkat_malloc(dirfd(d), de->d_name, &target);
+                                        if (r < 0) {
+                                                log_warning_errno(r, "Failed to read symlink %s/%s, ignoring: %m",
+                                                                  *dir, de->d_name);
+                                                continue;
+                                        }
+
+                                        r = is_dir(target, /* follow = */ true);
+                                        if (r <= 0)
+                                                continue;
+
+                                        symlink_to_dir = true;
+                                }
+
+                        } else
                                 continue;
 
                         filename = path_join(*dir, de->d_name);
@@ -312,9 +529,10 @@
                         } else
                                 _filename_free = filename; /* Make sure we free the filename. */
 
-                        if (!valid_unit_name)
+                        if (de->d_type == DT_DIR || (de->d_type == DT_LNK && symlink_to_dir))
                                 continue;
-                        assert_se(suffix = strrchr(de->d_name, '.'));
+
+                        assert(IN_SET(de->d_type, DT_REG, DT_LNK));
 
                         /* search_path is ordered by priority (highest first). If the name is already mapped
                          * to something (incl. itself), it means that we have already seen it, and we should
@@ -326,77 +544,35 @@
                                 /* We don't explicitly check for alias loops here. unit_ids_map_get() which
                                  * limits the number of hops should be used to access the map. */
 
-                                _cleanup_free_ char *target = NULL;
-
-                                r = readlinkat_malloc(dirfd(d), de->d_name, &target);
-                                if (r < 0) {
-                                        log_warning_errno(r, "Failed to read symlink %s/%s, ignoring: %m",
-                                                          *dir, de->d_name);
+                                r = unit_file_resolve_symlink(lp->root_dir, expanded_search_path,
+                                                              *dir, dirfd(d), de->d_name,
+                                                              /* resolve_destination_target= */ false,
+                                                              &dst);
+                                if (r == -ENOMEM)
+                                        return r;
+                                if (r < 0)  /* we ignore other errors here */
                                         continue;
-                                }
-
-                                const bool is_abs = path_is_absolute(target);
-                                if (lp->root_dir || !is_abs) {
-                                        char *target_abs = path_join(is_abs ? lp->root_dir : *dir, target);
-                                        if (!target_abs)
-                                                return log_oom();
-
-                                        free_and_replace(target, target_abs);
-                                }
-
-                                /* Get rid of "." and ".." components in target path */
-                                r = chase_symlinks(target, lp->root_dir, CHASE_NOFOLLOW | CHASE_NONEXISTENT, &simplified, NULL);
-                                if (r < 0) {
-                                        log_warning_errno(r, "Failed to resolve symlink %s pointing to %s, ignoring: %m",
-                                                          filename, target);
-                                        continue;
-                                }
-
-                                /* Check if the symlink goes outside of our search path.
-                                 * If yes, it's a linked unit file or mask, and we don't care about the target name.
-                                 * Let's just store the link source directly.
-                                 * If not, let's verify that it's a good symlink. */
-                                char *tail = path_startswith_strv(simplified, lp->search_path);
-                                if (!tail) {
-                                        log_debug("%s: linked unit file: %s → %s",
-                                                  __func__, filename, simplified);
-
-                                        dst = filename;
-                                } else {
-
-                                        bool self_alias;
-
-                                        dst = basename(simplified);
-                                        self_alias = streq(dst, de->d_name);
-
-                                        if (is_path(tail))
-                                                log_full(self_alias ? LOG_DEBUG : LOG_WARNING,
-                                                         "Suspicious symlink %s→%s, treating as alias.",
-                                                         filename, simplified);
-
-                                        r = unit_validate_alias_symlink_and_warn(filename, simplified);
-                                        if (r < 0)
-                                                continue;
-
-                                        if (self_alias) {
-                                                /* A self-alias that has no effect */
-                                                log_debug("%s: self-alias: %s/%s → %s, ignoring.",
-                                                          __func__, *dir, de->d_name, dst);
-                                                continue;
-                                        }
-
-                                        log_debug("%s: alias: %s/%s → %s", __func__, *dir, de->d_name, dst);
-                                }
 
                         } else {
-                                dst = filename;
+                                dst = TAKE_PTR(_filename_free); /* Grab the copy we made previously, if available. */
+                                if (!dst) {
+                                        dst = strdup(filename);
+                                        if (!dst)
+                                                return log_oom();
+                                }
+
                                 log_debug("%s: normal unit file: %s", __func__, dst);
                         }
 
-                        r = hashmap_put_strdup(&ids, de->d_name, dst);
+                        _cleanup_free_ char *key = strdup(de->d_name);
+                        if (!key)
+                                return log_oom();
+
+                        r = hashmap_ensure_put(&ids, &string_hash_ops_free_free, key, dst);
                         if (r < 0)
-                                return log_warning_errno(r, "Failed to add entry to hashmap (%s→%s): %m",
-                                                         de->d_name, dst);
+                                return log_warning_errno(r, "Failed to add entry to hashmap (%s%s%s): %m",
+                                                         de->d_name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dst);
+                        key = dst = NULL;
                 }
         }
 
@@ -437,7 +613,8 @@
 
                 r = string_strv_hashmap_put(&names, dst, src);
                 if (r < 0)
-                        return log_warning_errno(r, "Failed to add entry to hashmap (%s→%s): %m", dst, src);
+                        return log_warning_errno(r, "Failed to add entry to hashmap (%s%s%s): %m",
+                                                 dst, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), src);
         }
 
         if (cache_timestamp_hash)
@@ -478,7 +655,7 @@
                 Set **names,
                 const char *name) {
 
-        char **aliases, **alias;
+        char **aliases;
         int r;
 
         assert(name_type == UNIT_NAME_PLAIN || instance);
@@ -514,18 +691,16 @@
                                 return log_debug_errno(r, "Cannot find instance fragment %s: %m", inst);
 
                         if (inst_fragment &&
+                            fragment_basename &&
                             !streq(basename(inst_fragment), fragment_basename)) {
                                 log_debug("Instance %s has fragment %s and is not an alias of %s.",
                                           inst, inst_fragment, unit_name);
                                 continue;
                         }
 
-                        r = set_consume(*names, TAKE_PTR(inst));
-                        if (r > 0)
-                                log_debug("Unit %s has alias %s.", unit_name, inst);
+                        r = add_name(unit_name, names, inst);
                 } else
                         r = add_name(unit_name, names, *alias);
-
                 if (r < 0)
                         return r;
         }
@@ -563,9 +738,11 @@
         if (name_type < 0)
                 return name_type;
 
-        r = add_names(unit_ids_map, unit_name_map, unit_name, NULL, name_type, instance, &names, unit_name);
-        if (r < 0)
-                return r;
+        if (ret_names) {
+                r = add_names(unit_ids_map, unit_name_map, unit_name, NULL, name_type, instance, &names, unit_name);
+                if (r < 0)
+                        return r;
+        }
 
         /* First try to load fragment under the original name */
         r = unit_ids_map_get(unit_ids_map, unit_name, &fragment);
@@ -584,7 +761,7 @@
                         return log_debug_errno(r, "Cannot load template %s: %m", template);
         }
 
-        if (fragment) {
+        if (fragment && ret_names) {
                 const char *fragment_basename = basename(fragment);
 
                 if (!streq(fragment_basename, unit_name)) {
@@ -596,7 +773,8 @@
         }
 
         *ret_fragment_path = fragment;
-        *ret_names = TAKE_PTR(names);
+        if (ret_names)
+                *ret_names = TAKE_PTR(names);
 
         return 0;
 }
diff --git a/src/basic/unit-file.h b/src/basic/unit-file.h
index cc731a9..1c43861 100644
--- a/src/basic/unit-file.h
+++ b/src/basic/unit-file.h
@@ -4,12 +4,11 @@
 #include <stdbool.h>
 
 #include "hashmap.h"
+#include "path-lookup.h"
 #include "time-util.h"
 #include "unit-name.h"
 
 typedef enum UnitFileState UnitFileState;
-typedef enum UnitFileScope UnitFileScope;
-typedef struct LookupPaths LookupPaths;
 
 enum UnitFileState {
         UNIT_FILE_ENABLED,
@@ -29,21 +28,23 @@
         _UNIT_FILE_STATE_INVALID = -EINVAL,
 };
 
-enum UnitFileScope {
-        UNIT_FILE_SYSTEM,
-        UNIT_FILE_GLOBAL,
-        UNIT_FILE_USER,
-        _UNIT_FILE_SCOPE_MAX,
-        _UNIT_FILE_SCOPE_INVALID = -EINVAL,
-};
-
 bool unit_type_may_alias(UnitType type) _const_;
 bool unit_type_may_template(UnitType type) _const_;
 
 int unit_symlink_name_compatible(const char *symlink, const char *target, bool instance_propagation);
-int unit_validate_alias_symlink_and_warn(const char *filename, const char *target);
+int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, const char *target);
 
 bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_hash, uint64_t *ret_new);
+
+int unit_file_resolve_symlink(
+                const char *root_dir,
+                char **search_path,
+                const char *dir,
+                int dirfd,
+                const char *filename,
+                bool resolve_destination_target,
+                char **ret_destination);
+
 int unit_file_build_name_map(
                 const LookupPaths *lp,
                 uint64_t *cache_timestamp_hash,
diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c
index a227634..3b739c7 100644
--- a/src/basic/unit-name.c
+++ b/src/basic/unit-name.c
@@ -5,11 +5,17 @@
 #include <stdint.h>
 #include <stdlib.h>
 
+#include "sd-id128.h"
+
 #include "alloc-util.h"
 #include "glob-util.h"
 #include "hexdecoct.h"
+#include "memory-util.h"
 #include "path-util.h"
+#include "random-util.h"
+#include "sparse-endian.h"
 #include "special.h"
+#include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "unit-name.h"
@@ -30,6 +36,9 @@
         VALID_CHARS_WITH_AT                     \
         "[]!-*?"
 
+#define LONG_UNIT_NAME_HASH_KEY SD_ID128_MAKE(ec,f2,37,fb,58,32,4a,32,84,9f,06,9b,0d,21,eb,9a)
+#define UNIT_NAME_HASH_LENGTH_CHARS 16
+
 bool unit_name_is_valid(const char *n, UnitNameFlags flags) {
         const char *e, *i, *at;
 
@@ -56,7 +65,7 @@
                 if (*i == '@' && !at)
                         at = i;
 
-                if (!strchr("@" VALID_CHARS, *i))
+                if (!strchr(VALID_CHARS_WITH_AT, *i))
                         return false;
         }
 
@@ -506,6 +515,68 @@
         return 0;
 }
 
+bool unit_name_is_hashed(const char *name) {
+        char *s;
+
+        if (!unit_name_is_valid(name, UNIT_NAME_PLAIN))
+                return false;
+
+        assert_se(s = strrchr(name, '.'));
+
+        if (s - name < UNIT_NAME_HASH_LENGTH_CHARS + 1)
+                return false;
+
+        s -= UNIT_NAME_HASH_LENGTH_CHARS;
+        if (s[-1] != '_')
+                return false;
+
+        for (size_t i = 0; i < UNIT_NAME_HASH_LENGTH_CHARS; i++)
+                if (!strchr(LOWERCASE_HEXDIGITS, s[i]))
+                        return false;
+
+        return true;
+}
+
+int unit_name_hash_long(const char *name, char **ret) {
+        _cleanup_free_ char *n = NULL, *hash = NULL;
+        char *suffix;
+        le64_t h;
+        size_t len;
+
+        if (strlen(name) < UNIT_NAME_MAX)
+                return -EMSGSIZE;
+
+        suffix = strrchr(name, '.');
+        if (!suffix)
+                return -EINVAL;
+
+        if (unit_type_from_string(suffix+1) < 0)
+                return -EINVAL;
+
+        h = htole64(siphash24_string(name, LONG_UNIT_NAME_HASH_KEY.bytes));
+
+        hash = hexmem(&h, sizeof(h));
+        if (!hash)
+                return -ENOMEM;
+
+        assert_se(strlen(hash) == UNIT_NAME_HASH_LENGTH_CHARS);
+
+        len = UNIT_NAME_MAX - 1 - strlen(suffix+1) - UNIT_NAME_HASH_LENGTH_CHARS - 2;
+        assert(len > 0 && len < UNIT_NAME_MAX);
+
+        n = strndup(name, len);
+        if (!n)
+                return -ENOMEM;
+
+        if (!strextend(&n, "_", hash, suffix))
+                return -ENOMEM;
+        assert_se(unit_name_is_valid(n, UNIT_NAME_PLAIN));
+
+        *ret = TAKE_PTR(n);
+
+        return 0;
+}
+
 int unit_name_from_path(const char *path, const char *suffix, char **ret) {
         _cleanup_free_ char *p = NULL, *s = NULL;
         int r;
@@ -525,10 +596,19 @@
         if (!s)
                 return -ENOMEM;
 
-        if (strlen(s) >= UNIT_NAME_MAX) /* Return a slightly more descriptive error for this specific condition */
-                return -ENAMETOOLONG;
+        if (strlen(s) >= UNIT_NAME_MAX) {
+                _cleanup_free_ char *n = NULL;
 
-        /* Refuse this if this got too long or for some other reason didn't result in a valid name */
+                log_debug("Unit name \"%s\" too long, falling back to hashed unit name.", s);
+
+                r = unit_name_hash_long(s, &n);
+                if (r < 0)
+                        return r;
+
+                free_and_replace(s, n);
+        }
+
+        /* Refuse if this for some other reason didn't result in a valid name */
         if (!unit_name_is_valid(s, UNIT_NAME_PLAIN))
                 return -EINVAL;
 
@@ -562,7 +642,7 @@
         if (strlen(s) >= UNIT_NAME_MAX) /* Return a slightly more descriptive error for this specific condition */
                 return -ENAMETOOLONG;
 
-        /* Refuse this if this got too long or for some other reason didn't result in a valid name */
+        /* Refuse if this for some other reason didn't result in a valid name */
         if (!unit_name_is_valid(s, UNIT_NAME_INSTANCE))
                 return -EINVAL;
 
@@ -580,6 +660,9 @@
         if (r < 0)
                 return r;
 
+        if (unit_name_is_hashed(name))
+                return -ENAMETOOLONG;
+
         return unit_name_path_unescape(prefix, ret);
 }
 
@@ -797,3 +880,26 @@
 
         return true;
 }
+
+bool unit_name_prefix_equal(const char *a, const char *b) {
+        const char *p, *q;
+
+        assert(a);
+        assert(b);
+
+        if (!unit_name_is_valid(a, UNIT_NAME_ANY) || !unit_name_is_valid(b, UNIT_NAME_ANY))
+                return false;
+
+        p = strchr(a, '@');
+        if (!p)
+                p = strrchr(a, '.');
+
+        q = strchr(b, '@');
+        if (!q)
+                q = strrchr(b, '.');
+
+        assert(p);
+        assert(q);
+
+        return memcmp_nn(a, p - a, b, q - b) == 0;
+}
diff --git a/src/basic/unit-name.h b/src/basic/unit-name.h
index f6af01c..eaa701e 100644
--- a/src/basic/unit-name.h
+++ b/src/basic/unit-name.h
@@ -44,6 +44,9 @@
 
 int unit_name_template(const char *f, char **ret);
 
+int unit_name_hash_long(const char *name, char **ret);
+bool unit_name_is_hashed(const char *name);
+
 int unit_name_from_path(const char *path, const char *suffix, char **ret);
 int unit_name_from_path_instance(const char *prefix, const char *path, const char *suffix, char **ret);
 int unit_name_to_path(const char *name, char **ret);
@@ -62,3 +65,5 @@
 int slice_build_parent_slice(const char *slice, char **ret);
 int slice_build_subslice(const char *slice, const char *name, char **subslice);
 bool slice_name_is_valid(const char *name);
+
+bool unit_name_prefix_equal(const char *a, const char *b);
diff --git a/src/basic/user-util.c b/src/basic/user-util.c
index 385ec51..6c50412 100644
--- a/src/basic/user-util.c
+++ b/src/basic/user-util.c
@@ -13,11 +13,13 @@
 #include "sd-messages.h"
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
 #include "macro.h"
+#include "mkdir.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "path-util.h"
@@ -136,7 +138,6 @@
 }
 
 bool is_nologin_shell(const char *shell) {
-
         return PATH_IN_SET(shell,
                            /* 'nologin' is the friendliest way to disable logins for a user account. It prints a nice
                             * message and exits. Different distributions place the binary at different places though,
@@ -154,6 +155,21 @@
                            "/usr/bin/true");
 }
 
+const char* default_root_shell(const char *root) {
+        /* We want to use the preferred shell, i.e. DEFAULT_USER_SHELL, which usually
+         * will be /bin/bash. Fall back to /bin/sh if DEFAULT_USER_SHELL is not found,
+         * or any access errors. */
+
+        int r = chase_symlinks(DEFAULT_USER_SHELL, root, CHASE_PREFIX_ROOT, NULL, NULL);
+        if (r < 0 && r != -ENOENT)
+                log_debug_errno(r, "Failed to look up shell '%s%s%s': %m",
+                                strempty(root), root ? "/" : "", DEFAULT_USER_SHELL);
+        if (r > 0)
+                return DEFAULT_USER_SHELL;
+
+        return "/bin/sh";
+}
+
 static int synthesize_user_creds(
                 const char **username,
                 uid_t *uid, gid_t *gid,
@@ -176,13 +192,13 @@
                         *home = "/root";
 
                 if (shell)
-                        *shell = "/bin/sh";
+                        *shell = default_root_shell(NULL);
 
                 return 0;
         }
 
-        if (synthesize_nobody() &&
-            STR_IN_SET(*username, NOBODY_USER_NAME, "65534")) {
+        if (STR_IN_SET(*username, NOBODY_USER_NAME, "65534") &&
+            synthesize_nobody()) {
                 *username = NOBODY_USER_NAME;
 
                 if (uid)
@@ -247,7 +263,7 @@
                 else if (FLAGS_SET(flags, USER_CREDS_ALLOW_MISSING) && !gid && !home && !shell) {
 
                         /* If the specified user is a numeric UID and it isn't in the user database, and the caller
-                         * passed USER_CREDS_ALLOW_MISSING and was only interested in the UID, then juts return that
+                         * passed USER_CREDS_ALLOW_MISSING and was only interested in the UID, then just return that
                          * and don't complain. */
 
                         if (uid)
@@ -326,8 +342,8 @@
                 return 0;
         }
 
-        if (synthesize_nobody() &&
-            STR_IN_SET(*groupname, NOBODY_GROUP_NAME, "65534")) {
+        if (STR_IN_SET(*groupname, NOBODY_GROUP_NAME, "65534") &&
+            synthesize_nobody()) {
                 *groupname = NOBODY_GROUP_NAME;
 
                 if (gid)
@@ -373,8 +389,7 @@
         /* Shortcut things to avoid NSS lookups */
         if (uid == 0)
                 return strdup("root");
-        if (synthesize_nobody() &&
-            uid == UID_NOBODY)
+        if (uid == UID_NOBODY && synthesize_nobody())
                 return strdup(NOBODY_USER_NAME);
 
         if (uid_is_valid(uid)) {
@@ -417,8 +432,7 @@
 
         if (gid == 0)
                 return strdup("root");
-        if (synthesize_nobody() &&
-            gid == GID_NOBODY)
+        if (gid == GID_NOBODY && synthesize_nobody())
                 return strdup(NOBODY_GROUP_NAME);
 
         if (gid_is_valid(gid)) {
@@ -556,43 +570,29 @@
         return ngroups;
 }
 
-int get_home_dir(char **_h) {
+int get_home_dir(char **ret) {
         struct passwd *p;
         const char *e;
         char *h;
         uid_t u;
 
-        assert(_h);
+        assert(ret);
 
         /* Take the user specified one */
         e = secure_getenv("HOME");
-        if (e && path_is_valid(e) && path_is_absolute(e)) {
-                h = strdup(e);
-                if (!h)
-                        return -ENOMEM;
-
-                *_h = path_simplify(h);
-                return 0;
-        }
+        if (e && path_is_valid(e) && path_is_absolute(e))
+                goto found;
 
         /* Hardcode home directory for root and nobody to avoid NSS */
         u = getuid();
         if (u == 0) {
-                h = strdup("/root");
-                if (!h)
-                        return -ENOMEM;
-
-                *_h = h;
-                return 0;
+                e = "/root";
+                goto found;
         }
-        if (synthesize_nobody() &&
-            u == UID_NOBODY) {
-                h = strdup("/");
-                if (!h)
-                        return -ENOMEM;
 
-                *_h = h;
-                return 0;
+        if (u == UID_NOBODY && synthesize_nobody()) {
+                e = "/";
+                goto found;
         }
 
         /* Check the database... */
@@ -600,56 +600,42 @@
         p = getpwuid(u);
         if (!p)
                 return errno_or_else(ESRCH);
+        e = p->pw_dir;
 
-        if (!path_is_valid(p->pw_dir) ||
-            !path_is_absolute(p->pw_dir))
+        if (!path_is_valid(e) || !path_is_absolute(e))
                 return -EINVAL;
 
-        h = strdup(p->pw_dir);
+ found:
+        h = strdup(e);
         if (!h)
                 return -ENOMEM;
 
-        *_h = path_simplify(h);
+        *ret = path_simplify(h);
         return 0;
 }
 
-int get_shell(char **_s) {
+int get_shell(char **ret) {
         struct passwd *p;
         const char *e;
         char *s;
         uid_t u;
 
-        assert(_s);
+        assert(ret);
 
         /* Take the user specified one */
         e = secure_getenv("SHELL");
-        if (e && path_is_valid(e) && path_is_absolute(e)) {
-                s = strdup(e);
-                if (!s)
-                        return -ENOMEM;
-
-                *_s = path_simplify(s);
-                return 0;
-        }
+        if (e && path_is_valid(e) && path_is_absolute(e))
+                goto found;
 
         /* Hardcode shell for root and nobody to avoid NSS */
         u = getuid();
         if (u == 0) {
-                s = strdup("/bin/sh");
-                if (!s)
-                        return -ENOMEM;
-
-                *_s = s;
-                return 0;
+                e = default_root_shell(NULL);
+                goto found;
         }
-        if (synthesize_nobody() &&
-            u == UID_NOBODY) {
-                s = strdup(NOLOGIN);
-                if (!s)
-                        return -ENOMEM;
-
-                *_s = s;
-                return 0;
+        if (u == UID_NOBODY && synthesize_nobody()) {
+                e = NOLOGIN;
+                goto found;
         }
 
         /* Check the database... */
@@ -657,16 +643,17 @@
         p = getpwuid(u);
         if (!p)
                 return errno_or_else(ESRCH);
+        e = p->pw_shell;
 
-        if (!path_is_valid(p->pw_shell) ||
-            !path_is_absolute(p->pw_shell))
+        if (!path_is_valid(e) || !path_is_absolute(e))
                 return -EINVAL;
 
-        s = strdup(p->pw_shell);
+ found:
+        s = strdup(e);
         if (!s)
                 return -ENOMEM;
 
-        *_s = path_simplify(s);
+        *ret = path_simplify(s);
         return 0;
 }
 
@@ -680,14 +667,10 @@
         if (setresgid(0, 0, 0) < 0)
                 return -errno;
 
-        if (setresuid(0, 0, 0) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(setresuid(0, 0, 0));
 }
 
 int take_etc_passwd_lock(const char *root) {
-
         struct flock flock = {
                 .l_type = F_WRLCK,
                 .l_whence = SEEK_SET,
@@ -695,35 +678,27 @@
                 .l_len = 0,
         };
 
-        const char *path;
-        int fd, r;
-
-        /* This is roughly the same as lckpwdf(), but not as awful. We
-         * don't want to use alarm() and signals, hence we implement
-         * our own trivial version of this.
+        /* This is roughly the same as lckpwdf(), but not as awful. We don't want to use alarm() and signals,
+         * hence we implement our own trivial version of this.
          *
-         * Note that shadow-utils also takes per-database locks in
-         * addition to lckpwdf(). However, we don't given that they
-         * are redundant as they invoke lckpwdf() first and keep
-         * it during everything they do. The per-database locks are
-         * awfully racy, and thus we just won't do them. */
+         * Note that shadow-utils also takes per-database locks in addition to lckpwdf(). However, we don't,
+         * given that they are redundant: they invoke lckpwdf() first and keep it during everything they do.
+         * The per-database locks are awfully racy, and thus we just won't do them. */
 
-        if (root)
-                path = prefix_roota(root, ETC_PASSWD_LOCK_PATH);
-        else
-                path = ETC_PASSWD_LOCK_PATH;
+        _cleanup_free_ char *path = path_join(root, ETC_PASSWD_LOCK_PATH);
+        if (!path)
+                return log_oom_debug();
 
-        fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
+        (void) mkdir_parents(path, 0755);
+
+        _cleanup_close_ int fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
         if (fd < 0)
                 return log_debug_errno(errno, "Cannot open %s: %m", path);
 
-        r = fcntl(fd, F_SETLKW, &flock);
-        if (r < 0) {
-                safe_close(fd);
+        if (fcntl(fd, F_SETLKW, &flock) < 0)
                 return log_debug_errno(errno, "Locking %s failed: %m", path);
-        }
 
-        return fd;
+        return TAKE_FD(fd);
 }
 
 bool valid_user_group_name(const char *u, ValidUserFlags flags) {
@@ -797,7 +772,7 @@
                 /* Compare with strict result and warn if result doesn't match */
                 if (FLAGS_SET(flags, VALID_USER_WARN) && !valid_user_group_name(u, 0))
                         log_struct(LOG_NOTICE,
-                                   "MESSAGE=Accepting user/group name '%s', which does not match strict user/group name rules.", u,
+                                   LOG_MESSAGE("Accepting user/group name '%s', which does not match strict user/group name rules.", u),
                                    "USER_GROUP_NAME=%s", u,
                                    "MESSAGE_ID=" SD_MESSAGE_UNSAFE_USER_NAME_STR);
 
@@ -817,15 +792,13 @@
                  * Note that other systems are even more restrictive, and don't permit underscores or uppercase characters.
                  */
 
-                if (!(u[0] >= 'a' && u[0] <= 'z') &&
-                    !(u[0] >= 'A' && u[0] <= 'Z') &&
+                if (!ascii_isalpha(u[0]) &&
                     u[0] != '_')
                         return false;
 
                 for (i = u+1; *i; i++)
-                        if (!(*i >= 'a' && *i <= 'z') &&
-                            !(*i >= 'A' && *i <= 'Z') &&
-                            !(*i >= '0' && *i <= '9') &&
+                        if (!ascii_isalpha(*i) &&
+                            !ascii_isdigit(*i) &&
                             !IN_SET(*i, '_', '-'))
                                 return false;
 
@@ -943,10 +916,7 @@
                 }
         }
 
-        if (setgroups(size, list) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(setgroups(size, list));
 }
 
 bool synthesize_nobody(void) {
@@ -1012,13 +982,11 @@
 #endif
 
 int fgetpwent_sane(FILE *stream, struct passwd **pw) {
-        struct passwd *p;
-
-        assert(pw);
         assert(stream);
+        assert(pw);
 
         errno = 0;
-        p = fgetpwent(stream);
+        struct passwd *p = fgetpwent(stream);
         if (!p && errno != ENOENT)
                 return errno_or_else(EIO);
 
@@ -1027,13 +995,11 @@
 }
 
 int fgetspent_sane(FILE *stream, struct spwd **sp) {
-        struct spwd *s;
-
-        assert(sp);
         assert(stream);
+        assert(sp);
 
         errno = 0;
-        s = fgetspent(stream);
+        struct spwd *s = fgetspent(stream);
         if (!s && errno != ENOENT)
                 return errno_or_else(EIO);
 
@@ -1042,13 +1008,11 @@
 }
 
 int fgetgrent_sane(FILE *stream, struct group **gr) {
-        struct group *g;
-
-        assert(gr);
         assert(stream);
+        assert(gr);
 
         errno = 0;
-        g = fgetgrent(stream);
+        struct group *g = fgetgrent(stream);
         if (!g && errno != ENOENT)
                 return errno_or_else(EIO);
 
@@ -1058,13 +1022,11 @@
 
 #if ENABLE_GSHADOW
 int fgetsgent_sane(FILE *stream, struct sgrp **sg) {
-        struct sgrp *s;
-
-        assert(sg);
         assert(stream);
+        assert(sg);
 
         errno = 0;
-        s = fgetsgent(stream);
+        struct sgrp *s = fgetsgent(stream);
         if (!s && errno != ENOENT)
                 return errno_or_else(EIO);
 
@@ -1085,3 +1047,14 @@
 
         return uid == getuid();
 }
+
+const char *get_home_root(void) {
+        const char *e;
+
+        /* For debug purposes allow overriding where we look for home dirs */
+        e = secure_getenv("SYSTEMD_HOME_ROOT");
+        if (e && path_is_absolute(e) && path_is_normalized(e))
+                return e;
+
+        return "/home";
+}
diff --git a/src/basic/user-util.h b/src/basic/user-util.h
index fd00b47..a08683b 100644
--- a/src/basic/user-util.h
+++ b/src/basic/user-util.h
@@ -12,6 +12,14 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+/* Users managed by systemd-homed. See https://systemd.io/UIDS-GIDS for details how this range fits into the rest of the world */
+#define HOME_UID_MIN ((uid_t) 60001)
+#define HOME_UID_MAX ((uid_t) 60513)
+
+/* Users mapped from host into a container */
+#define MAP_UID_MIN ((uid_t) 60514)
+#define MAP_UID_MAX ((uid_t) 60577)
+
 bool uid_is_valid(uid_t uid);
 
 static inline bool gid_is_valid(gid_t gid) {
@@ -47,7 +55,7 @@
 int getgroups_alloc(gid_t** gids);
 
 int get_home_dir(char **ret);
-int get_shell(char **_ret);
+int get_shell(char **ret);
 
 int reset_uid_gid(void);
 
@@ -59,6 +67,19 @@
 #define UID_NOBODY ((uid_t) 65534U)
 #define GID_NOBODY ((gid_t) 65534U)
 
+/* If REMOUNT_IDMAPPING_HOST_ROOT is set for remount_idmap() we'll include a mapping here that maps the host
+ * root user accessing the idmapped mount to the this user ID on the backing fs. This is the last valid UID in
+ * the *signed* 32bit range. You might wonder why precisely use this specific UID for this purpose? Well, we
+ * definitely cannot use the first 0…65536 UIDs for that, since in most cases that's precisely the file range
+ * we intend to map to some high UID range, and since UID mappings have to be bijective we thus cannot use
+ * them at all. Furthermore the UID range beyond INT32_MAX (i.e. the range above the signed 32bit range) is
+ * icky, since many APIs cannot use it (example: setfsuid() returns the old UID as signed integer). Following
+ * our usual logic of assigning a 16bit UID range to each container, so that the upper 16bit of a 32bit UID
+ * value indicate kind of a "container ID" and the lower 16bit map directly to the intended user you can read
+ * this specific UID as the "nobody" user of the container with ID 0x7FFF, which is kinda nice. */
+#define UID_MAPPED_ROOT ((uid_t) (INT32_MAX-1))
+#define GID_MAPPED_ROOT ((gid_t) (INT32_MAX-1))
+
 #define ETC_PASSWD_LOCK_PATH "/etc/.pwd.lock"
 
 /* The following macros add 1 when converting things, since UID 0 is a valid UID, while the pointer
@@ -109,9 +130,16 @@
 #endif
 
 bool is_nologin_shell(const char *shell);
+const char* default_root_shell(const char *root);
 
 int is_this_me(const char *username);
 
+const char *get_home_root(void);
+
+static inline bool hashed_password_is_locked_or_invalid(const char *password) {
+        return password && password[0] != '$';
+}
+
 /* A locked *and* invalid password for "struct spwd"'s .sp_pwdp and "struct passwd"'s .pw_passwd field */
 #define PASSWORD_LOCKED_AND_INVALID "!*"
 
diff --git a/src/basic/utf8.c b/src/basic/utf8.c
index 63fc9f7..2532fcf 100644
--- a/src/basic/utf8.c
+++ b/src/basic/utf8.c
@@ -124,11 +124,9 @@
 }
 
 bool utf8_is_printable_newline(const char* str, size_t length, bool allow_newline) {
-        const char *p;
-
         assert(str);
 
-        for (p = str; length > 0;) {
+        for (const char *p = str; length > 0;) {
                 int encoded_len, r;
                 char32_t val;
 
@@ -289,14 +287,12 @@
 }
 
 char *ascii_is_valid(const char *str) {
-        const char *p;
-
         /* Check whether the string consists of valid ASCII bytes,
          * i.e values between 0 and 127, inclusive. */
 
         assert(str);
 
-        for (p = str; *p; p++)
+        for (const char *p = str; *p; p++)
                 if ((unsigned char) *p >= 128)
                         return NULL;
 
@@ -316,6 +312,37 @@
         return (char*) str;
 }
 
+int utf8_to_ascii(const char *str, char replacement_char, char **ret) {
+        /* Convert to a string that has only ASCII chars, replacing anything that is not ASCII
+         * by replacement_char. */
+
+        _cleanup_free_ char *ans = new(char, strlen(str) + 1);
+        if (!ans)
+                return -ENOMEM;
+
+        char *q = ans;
+
+        for (const char *p = str; *p; q++) {
+                int l;
+
+                l = utf8_encoded_valid_unichar(p, SIZE_MAX);
+                if (l < 0)  /* Non-UTF-8, let's not even try to propagate the garbage */
+                        return l;
+
+                if (l == 1)
+                        *q = *p;
+                else
+                        /* non-ASCII, we need to replace it */
+                        *q = replacement_char;
+
+                p += l;
+        }
+        *q = '\0';
+
+        *ret = TAKE_PTR(ans);
+        return 0;
+}
+
 /**
  * utf8_encode_unichar() - Encode single UCS-4 character as UTF-8
  * @out_utf8: output buffer of at least 4 bytes or NULL
diff --git a/src/basic/utf8.h b/src/basic/utf8.h
index b0e969f..4a06dd6 100644
--- a/src/basic/utf8.h
+++ b/src/basic/utf8.h
@@ -21,6 +21,8 @@
 char *ascii_is_valid(const char *s) _pure_;
 char *ascii_is_valid_n(const char *str, size_t len);
 
+int utf8_to_ascii(const char *str, char replacement_char, char **ret);
+
 bool utf8_is_printable_newline(const char* str, size_t length, bool allow_newline) _pure_;
 #define utf8_is_printable(str, length) utf8_is_printable_newline(str, length, true)
 
diff --git a/src/basic/util.c b/src/basic/util.c
deleted file mode 100644
index e217e14..0000000
--- a/src/basic/util.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#include "alloc-util.h"
-#include "build.h"
-#include "dirent-util.h"
-#include "env-file.h"
-#include "env-util.h"
-#include "fd-util.h"
-#include "fileio.h"
-#include "hostname-util.h"
-#include "log.h"
-#include "macro.h"
-#include "parse-util.h"
-#include "stat-util.h"
-#include "string-util.h"
-#include "util.h"
-#include "virt.h"
-
-int saved_argc = 0;
-char **saved_argv = NULL;
-static int saved_in_initrd = -1;
-
-bool kexec_loaded(void) {
-       _cleanup_free_ char *s = NULL;
-
-       if (read_one_line_file("/sys/kernel/kexec_loaded", &s) < 0)
-               return false;
-
-       return s[0] == '1';
-}
-
-int prot_from_flags(int flags) {
-
-        switch (flags & O_ACCMODE) {
-
-        case O_RDONLY:
-                return PROT_READ;
-
-        case O_WRONLY:
-                return PROT_WRITE;
-
-        case O_RDWR:
-                return PROT_READ|PROT_WRITE;
-
-        default:
-                return -EINVAL;
-        }
-}
-
-bool in_initrd(void) {
-        int r;
-        const char *e;
-        bool lenient = false;
-
-        if (saved_in_initrd >= 0)
-                return saved_in_initrd;
-
-        /* We have two checks here:
-         *
-         * 1. the flag file /etc/initrd-release must exist
-         * 2. the root file system must be a memory file system
-         *
-         * The second check is extra paranoia, since misdetecting an
-         * initrd can have bad consequences due the initrd
-         * emptying when transititioning to the main systemd.
-         *
-         * If env var $SYSTEMD_IN_INITRD is not set or set to "auto",
-         * both checks are used. If it's set to "lenient", only check
-         * 1 is used. If set to a boolean value, then the boolean
-         * value is returned.
-         */
-
-        e = secure_getenv("SYSTEMD_IN_INITRD");
-        if (e) {
-                if (streq(e, "lenient"))
-                        lenient = true;
-                else if (!streq(e, "auto")) {
-                        r = parse_boolean(e);
-                        if (r >= 0) {
-                                saved_in_initrd = r > 0;
-                                return saved_in_initrd;
-                        }
-                        log_debug_errno(r, "Failed to parse $SYSTEMD_IN_INITRD, ignoring: %m");
-                }
-        }
-
-        if (!lenient) {
-                r = path_is_temporary_fs("/");
-                if (r < 0)
-                        log_debug_errno(r, "Couldn't determine if / is a temporary file system: %m");
-
-                saved_in_initrd = r > 0;
-        }
-
-        r = access("/etc/initrd-release", F_OK);
-        if (r >= 0) {
-                if (saved_in_initrd == 0)
-                        log_debug("/etc/initrd-release exists, but it's not an initrd.");
-                else
-                        saved_in_initrd = 1;
-        } else {
-                if (errno != ENOENT)
-                        log_debug_errno(errno, "Failed to test if /etc/initrd-release exists: %m");
-                saved_in_initrd = 0;
-        }
-
-        return saved_in_initrd;
-}
-
-void in_initrd_force(bool value) {
-        saved_in_initrd = value;
-}
-
-int on_ac_power(void) {
-        bool found_offline = false, found_online = false;
-        _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
-
-        d = opendir("/sys/class/power_supply");
-        if (!d)
-                return errno == ENOENT ? true : -errno;
-
-        FOREACH_DIRENT(de, d, return -errno) {
-                _cleanup_close_ int fd = -1, device = -1;
-                char contents[6];
-                ssize_t n;
-
-                device = openat(dirfd(d), de->d_name, O_DIRECTORY|O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                if (device < 0) {
-                        if (IN_SET(errno, ENOENT, ENOTDIR))
-                                continue;
-
-                        return -errno;
-                }
-
-                fd = openat(device, "type", O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                if (fd < 0) {
-                        if (errno == ENOENT)
-                                continue;
-
-                        return -errno;
-                }
-
-                n = read(fd, contents, sizeof(contents));
-                if (n < 0)
-                        return -errno;
-
-                if (n != 6 || memcmp(contents, "Mains\n", 6))
-                        continue;
-
-                safe_close(fd);
-                fd = openat(device, "online", O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                if (fd < 0) {
-                        if (errno == ENOENT)
-                                continue;
-
-                        return -errno;
-                }
-
-                n = read(fd, contents, sizeof(contents));
-                if (n < 0)
-                        return -errno;
-
-                if (n != 2 || contents[1] != '\n')
-                        return -EIO;
-
-                if (contents[0] == '1') {
-                        found_online = true;
-                        break;
-                } else if (contents[0] == '0')
-                        found_offline = true;
-                else
-                        return -EIO;
-        }
-
-        return found_online || !found_offline;
-}
-
-int container_get_leader(const char *machine, pid_t *pid) {
-        _cleanup_free_ char *s = NULL, *class = NULL;
-        const char *p;
-        pid_t leader;
-        int r;
-
-        assert(machine);
-        assert(pid);
-
-        if (streq(machine, ".host")) {
-                *pid = 1;
-                return 0;
-        }
-
-        if (!hostname_is_valid(machine, 0))
-                return -EINVAL;
-
-        p = strjoina("/run/systemd/machines/", machine);
-        r = parse_env_file(NULL, p,
-                           "LEADER", &s,
-                           "CLASS", &class);
-        if (r == -ENOENT)
-                return -EHOSTDOWN;
-        if (r < 0)
-                return r;
-        if (!s)
-                return -EIO;
-
-        if (!streq_ptr(class, "container"))
-                return -EIO;
-
-        r = parse_pid(s, &leader);
-        if (r < 0)
-                return r;
-        if (leader <= 1)
-                return -EIO;
-
-        *pid = leader;
-        return 0;
-}
-
-int version(void) {
-#ifndef GOOGLE3_BLAZE_BUILD
-        printf("systemd " STRINGIFY(PROJECT_VERSION) " (" GIT_VERSION ")\n%s\n",
-               systemd_features);
-#endif // GOOGLE3_BLAZE_BUILD
-        return 0;
-}
-
-/* Turn off core dumps but only if we're running outside of a container. */
-void disable_coredumps(void) {
-        int r;
-
-        if (detect_container() > 0)
-                return;
-
-        r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", WRITE_STRING_FILE_DISABLE_BUFFER);
-        if (r < 0)
-                log_debug_errno(r, "Failed to turn off coredumps, ignoring: %m");
-}
diff --git a/src/basic/util.h b/src/basic/util.h
deleted file mode 100644
index 22fcef7..0000000
--- a/src/basic/util.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <stdint.h>
-
-#include "macro.h"
-
-extern int saved_argc;
-extern char **saved_argv;
-
-static inline void save_argc_argv(int argc, char **argv) {
-
-        /* Protect against CVE-2021-4034 style attacks */
-        assert_se(argc > 0);
-        assert_se(argv);
-        assert_se(argv[0]);
-
-        saved_argc = argc;
-        saved_argv = argv;
-}
-
-bool kexec_loaded(void);
-
-int prot_from_flags(int flags) _const_;
-
-bool in_initrd(void);
-void in_initrd_force(bool value);
-
-int on_ac_power(void);
-
-static inline unsigned u64log2(uint64_t n) {
-#if __SIZEOF_LONG_LONG__ == 8
-        return (n > 1) ? (unsigned) __builtin_clzll(n) ^ 63U : 0;
-#else
-#error "Wut?"
-#endif
-}
-
-static inline unsigned u32ctz(uint32_t n) {
-#if __SIZEOF_INT__ == 4
-        return n != 0 ? __builtin_ctz(n) : 32;
-#else
-#error "Wut?"
-#endif
-}
-
-static inline unsigned log2i(int x) {
-        assert(x > 0);
-
-        return __SIZEOF_INT__ * 8 - __builtin_clz(x) - 1;
-}
-
-static inline unsigned log2u(unsigned x) {
-        assert(x > 0);
-
-        return sizeof(unsigned) * 8 - __builtin_clz(x) - 1;
-}
-
-static inline unsigned log2u_round_up(unsigned x) {
-        assert(x > 0);
-
-        if (x == 1)
-                return 0;
-
-        return log2u(x - 1) + 1;
-}
-
-int container_get_leader(const char *machine, pid_t *pid);
-
-int version(void);
-
-void disable_coredumps(void);
diff --git a/src/basic/virt.c b/src/basic/virt.c
index bbc583a..f264cc6 100644
--- a/src/basic/virt.c
+++ b/src/basic/virt.c
@@ -12,9 +12,11 @@
 #include "cgroup-util.h"
 #include "dirent-util.h"
 #include "env-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "macro.h"
+#include "missing_threads.h"
 #include "process-util.h"
 #include "stat-util.h"
 #include "string-table.h"
@@ -27,30 +29,32 @@
       SMBIOS_VM_BIT_UNKNOWN,
 };
 
-#if defined(__i386__) || defined(__x86_64__)
-static const char *const vm_table[_VIRTUALIZATION_MAX] = {
-        [VIRTUALIZATION_XEN]       = "XenVMMXenVMM",
-        [VIRTUALIZATION_KVM]       = "KVMKVMKVM",
-        [VIRTUALIZATION_QEMU]      = "TCGTCGTCGTCG",
-        /* http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458 */
-        [VIRTUALIZATION_VMWARE]    = "VMwareVMware",
-        /* https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/tlfs */
-        [VIRTUALIZATION_MICROSOFT] = "Microsoft Hv",
-        /* https://wiki.freebsd.org/bhyve */
-        [VIRTUALIZATION_BHYVE]     = "bhyve bhyve ",
-        [VIRTUALIZATION_QNX]       = "QNXQVMBSQG",
-        /* https://projectacrn.org */
-        [VIRTUALIZATION_ACRN]      = "ACRNACRNACRN",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(vm, int);
-#endif
-
-static int detect_vm_cpuid(void) {
+static Virtualization detect_vm_cpuid(void) {
 
         /* CPUID is an x86 specific interface. */
 #if defined(__i386__) || defined(__x86_64__)
 
+        static const struct {
+                const char sig[13];
+                Virtualization id;
+        } vm_table[] = {
+                { "XenVMMXenVMM", VIRTUALIZATION_XEN       },
+                { "KVMKVMKVM",    VIRTUALIZATION_KVM       }, /* qemu with KVM */
+                { "Linux KVM Hv", VIRTUALIZATION_KVM       }, /* qemu with KVM + HyperV Enlightenments */
+                { "TCGTCGTCGTCG", VIRTUALIZATION_QEMU      }, /* qemu without KVM */
+                /* http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458 */
+                { "VMwareVMware", VIRTUALIZATION_VMWARE    },
+                /* https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/tlfs */
+                { "Microsoft Hv", VIRTUALIZATION_MICROSOFT },
+                /* https://wiki.freebsd.org/bhyve */
+                { "bhyve bhyve ", VIRTUALIZATION_BHYVE     },
+                { "QNXQVMBSQG",   VIRTUALIZATION_QNX       },
+                /* https://projectacrn.org */
+                { "ACRNACRNACRN", VIRTUALIZATION_ACRN      },
+                /* https://www.lockheedmartin.com/en-us/products/Hardened-Security-for-Intel-Processors.html */
+                { "SRESRESRESRE", VIRTUALIZATION_SRE       },
+        };
+
         uint32_t eax, ebx, ecx, edx;
         bool hypervisor;
 
@@ -67,7 +71,6 @@
                         uint32_t sig32[3];
                         char text[13];
                 } sig = {};
-                int v;
 
                 /* There is a hypervisor, see what it is */
                 __cpuid(0x40000000U, eax, ebx, ecx, edx);
@@ -78,11 +81,13 @@
 
                 log_debug("Virtualization found, CPUID=%s", sig.text);
 
-                v = vm_from_string(sig.text);
-                if (v < 0)
-                        return VIRTUALIZATION_VM_OTHER;
+                for (size_t i = 0; i < ELEMENTSOF(vm_table); i++)
+                        if (memcmp_nn(sig.text, sizeof(sig.text),
+                                      vm_table[i].sig, sizeof(vm_table[i].sig)) == 0)
+                                return vm_table[i].id;
 
-                return v;
+                log_debug("Unknown virtualization with CPUID=%s. Add to vm_table[]?", sig.text);
+                return VIRTUALIZATION_VM_OTHER;
         }
 #endif
         log_debug("No virtualization found in CPUID");
@@ -90,7 +95,7 @@
         return VIRTUALIZATION_NONE;
 }
 
-static int detect_vm_device_tree(void) {
+static Virtualization detect_vm_device_tree(void) {
 #if defined(__arm__) || defined(__aarch64__) || defined(__powerpc__) || defined(__powerpc64__)
         _cleanup_free_ char *hvtype = NULL;
         int r;
@@ -98,7 +103,7 @@
         r = read_one_line_file("/proc/device-tree/hypervisor/compatible", &hvtype);
         if (r == -ENOENT) {
                 _cleanup_closedir_ DIR *dir = NULL;
-                struct dirent *dent;
+                _cleanup_free_ char *compat = NULL;
 
                 if (access("/proc/device-tree/ibm,partition-name", F_OK) == 0 &&
                     access("/proc/device-tree/hmc-managed?", F_OK) == 0 &&
@@ -114,12 +119,20 @@
                         return -errno;
                 }
 
-                FOREACH_DIRENT(dent, dir, return -errno)
-                        if (strstr(dent->d_name, "fw-cfg")) {
-                                log_debug("Virtualization QEMU: \"fw-cfg\" present in /proc/device-tree/%s", dent->d_name);
+                FOREACH_DIRENT(de, dir, return -errno)
+                        if (strstr(de->d_name, "fw-cfg")) {
+                                log_debug("Virtualization QEMU: \"fw-cfg\" present in /proc/device-tree/%s", de->d_name);
                                 return VIRTUALIZATION_QEMU;
                         }
 
+                r = read_one_line_file("/proc/device-tree/compatible", &compat);
+                if (r < 0 && r != -ENOENT)
+                        return r;
+                if (r >= 0 && streq(compat, "qemu,pseries")) {
+                        log_debug("Virtualization %s found in /proc/device-tree/compatible", compat);
+                        return VIRTUALIZATION_QEMU;
+                }
+
                 log_debug("No virtualization found in /proc/device-tree/*");
                 return VIRTUALIZATION_NONE;
         } else if (r < 0)
@@ -140,41 +153,44 @@
 #endif
 }
 
-#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
-static int detect_vm_dmi_vendor(void) {
-        static const char *const dmi_vendors[] = {
+#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) || defined(__loongarch64)
+static Virtualization detect_vm_dmi_vendor(void) {
+        static const char* const dmi_vendors[] = {
                 "/sys/class/dmi/id/product_name", /* Test this before sys_vendor to detect KVM over QEMU */
                 "/sys/class/dmi/id/sys_vendor",
                 "/sys/class/dmi/id/board_vendor",
                 "/sys/class/dmi/id/bios_vendor",
-                "/sys/class/dmi/id/product_version" /* For Hyper-V VMs test */
+                "/sys/class/dmi/id/product_version", /* For Hyper-V VMs test */
+                NULL
         };
 
         static const struct {
                 const char *vendor;
-                int id;
+                Virtualization id;
         } dmi_vendor_table[] = {
-                { "KVM",                 VIRTUALIZATION_KVM       },
-                { "Amazon EC2",          VIRTUALIZATION_AMAZON    },
-                { "QEMU",                VIRTUALIZATION_QEMU      },
-                { "VMware",              VIRTUALIZATION_VMWARE    }, /* https://kb.vmware.com/s/article/1009458 */
-                { "VMW",                 VIRTUALIZATION_VMWARE    },
-                { "innotek GmbH",        VIRTUALIZATION_ORACLE    },
-                { "VirtualBox",          VIRTUALIZATION_ORACLE    },
-                { "Xen",                 VIRTUALIZATION_XEN       },
-                { "Bochs",               VIRTUALIZATION_BOCHS     },
-                { "Parallels",           VIRTUALIZATION_PARALLELS },
+                { "KVM",                  VIRTUALIZATION_KVM       },
+                { "OpenStack",            VIRTUALIZATION_KVM       }, /* Detect OpenStack instance as KVM in non x86 architecture */
+                { "KubeVirt",             VIRTUALIZATION_KVM       }, /* Detect KubeVirt instance as KVM in non x86 architecture */
+                { "Amazon EC2",           VIRTUALIZATION_AMAZON    },
+                { "QEMU",                 VIRTUALIZATION_QEMU      },
+                { "VMware",               VIRTUALIZATION_VMWARE    }, /* https://kb.vmware.com/s/article/1009458 */
+                { "VMW",                  VIRTUALIZATION_VMWARE    },
+                { "innotek GmbH",         VIRTUALIZATION_ORACLE    },
+                { "VirtualBox",           VIRTUALIZATION_ORACLE    },
+                { "Xen",                  VIRTUALIZATION_XEN       },
+                { "Bochs",                VIRTUALIZATION_BOCHS     },
+                { "Parallels",            VIRTUALIZATION_PARALLELS },
                 /* https://wiki.freebsd.org/bhyve */
-                { "BHYVE",               VIRTUALIZATION_BHYVE     },
-                { "Hyper-V",             VIRTUALIZATION_MICROSOFT },
+                { "BHYVE",                VIRTUALIZATION_BHYVE     },
+                { "Hyper-V",              VIRTUALIZATION_MICROSOFT },
+                { "Apple Virtualization", VIRTUALIZATION_APPLE     },
         };
         int r;
 
-        for (size_t i = 0; i < ELEMENTSOF(dmi_vendors); i++) {
+        STRV_FOREACH(vendor, dmi_vendors) {
                 _cleanup_free_ char *s = NULL;
-                unsigned j;
 
-                r = read_one_line_file(dmi_vendors[i], &s);
+                r = read_one_line_file(*vendor, &s);
                 if (r < 0) {
                         if (r == -ENOENT)
                                 continue;
@@ -182,10 +198,10 @@
                         return r;
                 }
 
-                for (j = 0; j < ELEMENTSOF(dmi_vendor_table); j++)
-                        if (startswith(s, dmi_vendor_table[j].vendor)) {
-                                log_debug("Virtualization %s found in DMI (%s)", s, dmi_vendors[i]);
-                                return dmi_vendor_table[j].id;
+                for (size_t i = 0; i < ELEMENTSOF(dmi_vendor_table); i++)
+                        if (startswith(s, dmi_vendor_table[i].vendor)) {
+                                log_debug("Virtualization %s found in DMI (%s)", s, *vendor);
+                                return dmi_vendor_table[i].id;
                         }
         }
         log_debug("No virtualization found in DMI vendor table.");
@@ -227,10 +243,10 @@
         log_debug("DMI BIOS Extension table does not indicate virtualization.");
         return SMBIOS_VM_BIT_UNSET;
 }
-#endif /* defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) */
+#endif /* defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) || defined(__loongarch64) */
 
-static int detect_vm_dmi(void) {
-#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
+static Virtualization detect_vm_dmi(void) {
+#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) || defined(__loongarch64)
 
         int r;
         r = detect_vm_dmi_vendor();
@@ -264,7 +280,7 @@
                                 return VIRTUALIZATION_AMAZON;
                 }
                 default:
-                        assert_not_reached("Bad virtualization value");
+                        assert_not_reached();
               }
         }
 
@@ -278,19 +294,6 @@
 #endif
 }
 
-static int detect_vm_xen(void) {
-
-        /* Check for Dom0 will be executed later in detect_vm_xen_dom0
-           The presence of /proc/xen indicates some form of a Xen domain */
-        if (access("/proc/xen", F_OK) < 0) {
-                log_debug("Virtualization XEN not found, /proc/xen does not exist");
-                return VIRTUALIZATION_NONE;
-        }
-
-        log_debug("Virtualization XEN found (/proc/xen exists)");
-        return VIRTUALIZATION_XEN;
-}
-
 #define XENFEAT_dom0 11 /* xen/include/public/features.h */
 #define PATH_FEATURES "/sys/hypervisor/properties/features"
 /* Returns -errno, or 0 for domU, or 1 for dom0 */
@@ -344,7 +347,18 @@
         }
 }
 
-static int detect_vm_hypervisor(void) {
+static Virtualization detect_vm_xen(void) {
+        /* The presence of /proc/xen indicates some form of a Xen domain
+           The check for Dom0 is handled outside this function */
+        if (access("/proc/xen", F_OK) < 0) {
+                log_debug("Virtualization XEN not found, /proc/xen does not exist");
+                return VIRTUALIZATION_NONE;
+        }
+        log_debug("Virtualization XEN found (/proc/xen exists)");
+        return VIRTUALIZATION_XEN;
+}
+
+static Virtualization detect_vm_hypervisor(void) {
         _cleanup_free_ char *hvtype = NULL;
         int r;
 
@@ -362,7 +376,7 @@
                 return VIRTUALIZATION_VM_OTHER;
 }
 
-static int detect_vm_uml(void) {
+static Virtualization detect_vm_uml(void) {
         _cleanup_fclose_ FILE *f = NULL;
         int r;
 
@@ -401,7 +415,7 @@
         return VIRTUALIZATION_NONE;
 }
 
-static int detect_vm_zvm(void) {
+static Virtualization detect_vm_zvm(void) {
 
 #if defined(__s390__)
         _cleanup_free_ char *t = NULL;
@@ -425,47 +439,73 @@
 }
 
 /* Returns a short identifier for the various VM implementations */
-int detect_vm(void) {
-        static thread_local int cached_found = _VIRTUALIZATION_INVALID;
+Virtualization detect_vm(void) {
+        static thread_local Virtualization cached_found = _VIRTUALIZATION_INVALID;
         bool other = false;
-        int r, dmi;
+        int xen_dom0 = 0;
+        Virtualization v, dmi;
 
         if (cached_found >= 0)
                 return cached_found;
 
         /* We have to use the correct order here:
          *
-         * → First, try to detect Oracle Virtualbox and Amazon EC2 Nitro, even if they use KVM, as well as Xen even if
-         *   it cloaks as Microsoft Hyper-V. Attempt to detect uml at this stage also since it runs as a user-process
-         *   nested inside other VMs.
+         * → First, try to detect Oracle Virtualbox, Amazon EC2 Nitro, and Parallels, even if they use KVM,
+         *   as well as Xen even if it cloaks as Microsoft Hyper-V. Attempt to detect uml at this stage also
+         *   since it runs as a user-process nested inside other VMs. Also check for Xen now, because Xen PV
+         *   mode does not override CPUID when nested inside another hypervisor.
          *
-         * → Second, try to detect from CPUID, this will report KVM for whatever software is used even if info in DMI is
-         *   overwritten.
+         * → Second, try to detect from CPUID, this will report KVM for whatever software is used even if
+         *   info in DMI is overwritten.
          *
          * → Third, try to detect from DMI. */
 
         dmi = detect_vm_dmi();
-        if (IN_SET(dmi, VIRTUALIZATION_ORACLE, VIRTUALIZATION_XEN, VIRTUALIZATION_AMAZON)) {
-                r = dmi;
+        if (IN_SET(dmi,
+                   VIRTUALIZATION_ORACLE,
+                   VIRTUALIZATION_XEN,
+                   VIRTUALIZATION_AMAZON,
+                   VIRTUALIZATION_PARALLELS)) {
+                v = dmi;
                 goto finish;
         }
 
         /* Detect UML */
-        r = detect_vm_uml();
-        if (r < 0)
-                return r;
-        if (r == VIRTUALIZATION_VM_OTHER)
-                other = true;
-        else if (r != VIRTUALIZATION_NONE)
+        v = detect_vm_uml();
+        if (v < 0)
+                return v;
+        if (v != VIRTUALIZATION_NONE)
                 goto finish;
 
+        /* Detect Xen */
+        v = detect_vm_xen();
+        if (v < 0)
+                return v;
+        if (v == VIRTUALIZATION_XEN) {
+                 /* If we are Dom0, then we expect to not report as a VM. However, as we might be nested
+                  * inside another hypervisor which can be detected via the CPUID check, wait to report this
+                  * until after the CPUID check. */
+                xen_dom0 = detect_vm_xen_dom0();
+                if (xen_dom0 < 0)
+                        return xen_dom0;
+                if (xen_dom0 == 0)
+                        goto finish;
+
+                v = VIRTUALIZATION_NONE;
+        } else if (v != VIRTUALIZATION_NONE)
+                assert_not_reached();
+
         /* Detect from CPUID */
-        r = detect_vm_cpuid();
-        if (r < 0)
-                return r;
-        if (r == VIRTUALIZATION_VM_OTHER)
+        v = detect_vm_cpuid();
+        if (v < 0)
+                return v;
+        if (v == VIRTUALIZATION_VM_OTHER)
                 other = true;
-        else if (r != VIRTUALIZATION_NONE)
+        else if (v != VIRTUALIZATION_NONE)
+                goto finish;
+
+        /* If we are in Dom0 and have not yet finished, finish with the result of detect_vm_cpuid */
+        if (xen_dom0 > 0)
                 goto finish;
 
         /* Now, let's get back to DMI */
@@ -474,62 +514,38 @@
         if (dmi == VIRTUALIZATION_VM_OTHER)
                 other = true;
         else if (dmi != VIRTUALIZATION_NONE) {
-                r = dmi;
+                v = dmi;
                 goto finish;
         }
 
-        /* x86 xen will most likely be detected by cpuid. If not (most likely
-         * because we're not an x86 guest), then we should try the /proc/xen
-         * directory next. If that's not found, then we check for the high-level
-         * hypervisor sysfs file.
-         */
-
-        r = detect_vm_xen();
-        if (r < 0)
-                return r;
-        if (r == VIRTUALIZATION_VM_OTHER)
+        /* Check high-level hypervisor sysfs file */
+        v = detect_vm_hypervisor();
+        if (v < 0)
+                return v;
+        if (v == VIRTUALIZATION_VM_OTHER)
                 other = true;
-        else if (r != VIRTUALIZATION_NONE)
+        else if (v != VIRTUALIZATION_NONE)
                 goto finish;
 
-        r = detect_vm_hypervisor();
-        if (r < 0)
-                return r;
-        if (r == VIRTUALIZATION_VM_OTHER)
+        v = detect_vm_device_tree();
+        if (v < 0)
+                return v;
+        if (v == VIRTUALIZATION_VM_OTHER)
                 other = true;
-        else if (r != VIRTUALIZATION_NONE)
+        else if (v != VIRTUALIZATION_NONE)
                 goto finish;
 
-        r = detect_vm_device_tree();
-        if (r < 0)
-                return r;
-        if (r == VIRTUALIZATION_VM_OTHER)
-                other = true;
-        else if (r != VIRTUALIZATION_NONE)
-                goto finish;
-
-        r = detect_vm_zvm();
-        if (r < 0)
-                return r;
+        v = detect_vm_zvm();
+        if (v < 0)
+                return v;
 
 finish:
-        /* x86 xen Dom0 is detected as XEN in hypervisor and maybe others.
-         * In order to detect the Dom0 as not virtualization we need to
-         * double-check it */
-        if (r == VIRTUALIZATION_XEN) {
-                int dom0;
+        if (v == VIRTUALIZATION_NONE && other)
+                v = VIRTUALIZATION_VM_OTHER;
 
-                dom0 = detect_vm_xen_dom0();
-                if (dom0 < 0)
-                        return dom0;
-                if (dom0 > 0)
-                        r = VIRTUALIZATION_NONE;
-        } else if (r == VIRTUALIZATION_NONE && other)
-                r = VIRTUALIZATION_VM_OTHER;
-
-        cached_found = r;
-        log_debug("Found VM virtualization %s", virtualization_to_string(r));
-        return r;
+        cached_found = v;
+        log_debug("Found VM virtualization %s", virtualization_to_string(v));
+        return v;
 }
 
 static const char *const container_table[_VIRTUALIZATION_MAX] = {
@@ -612,12 +628,10 @@
         }
 }
 
-static int detect_container_files(void) {
-        unsigned i;
-
+static Virtualization detect_container_files(void) {
         static const struct {
                 const char *file_path;
-                int id;
+                Virtualization id;
         } container_file_table[] = {
                 /* https://github.com/containers/podman/issues/6192 */
                 /* https://github.com/containers/podman/issues/3586#issuecomment-661918679 */
@@ -627,7 +641,7 @@
                 { "/.dockerenv",        VIRTUALIZATION_DOCKER },
         };
 
-        for (i = 0; i < ELEMENTSOF(container_file_table); i++) {
+        for (size_t i = 0; i < ELEMENTSOF(container_file_table); i++) {
                 if (access(container_file_table[i].file_path, F_OK) >= 0)
                         return container_file_table[i].id;
 
@@ -640,10 +654,11 @@
         return VIRTUALIZATION_NONE;
 }
 
-int detect_container(void) {
-        static thread_local int cached_found = _VIRTUALIZATION_INVALID;
+Virtualization detect_container(void) {
+        static thread_local Virtualization cached_found = _VIRTUALIZATION_INVALID;
         _cleanup_free_ char *m = NULL, *o = NULL, *p = NULL;
         const char *e = NULL;
+        Virtualization v;
         int r;
 
         if (cached_found >= 0)
@@ -655,7 +670,7 @@
                         log_debug_errno(errno, "Failed to check if /proc/vz exists, ignoring: %m");
         } else if (access("/proc/bc", F_OK) < 0) {
                 if (errno == ENOENT) {
-                        r = VIRTUALIZATION_OPENVZ;
+                        v = VIRTUALIZATION_OPENVZ;
                         goto finish;
                 }
 
@@ -667,7 +682,7 @@
         if (r < 0)
                 log_debug_errno(r, "Failed to read /proc/sys/kernel/osrelease, ignoring: %m");
         else if (strstr(o, "Microsoft") || strstr(o, "WSL")) {
-                r = VIRTUALIZATION_WSL;
+                v = VIRTUALIZATION_WSL;
                 goto finish;
         }
 
@@ -692,7 +707,7 @@
                         if (r < 0)
                                 log_debug_errno(r, "Failed to read %s, ignoring: %m", pf);
                         else if (startswith(ptrace_comm, "proot")) {
-                                r = VIRTUALIZATION_PROOT;
+                                v = VIRTUALIZATION_PROOT;
                                 goto finish;
                         }
                 }
@@ -719,7 +734,7 @@
                 if (!e)
                         goto check_files;
                 if (isempty(e)) {
-                        r = VIRTUALIZATION_NONE;
+                        v = VIRTUALIZATION_NONE;
                         goto finish;
                 }
 
@@ -750,57 +765,56 @@
          * for other specific container managers, otherwise we risk mistaking another
          * container manager for Docker: the /.dockerenv file could inadvertently end up
          * in a file system image. */
-        r = detect_container_files();
-        if (r)
+        v = detect_container_files();
+        if (v < 0)
+                return v;
+        if (v != VIRTUALIZATION_NONE)
                 goto finish;
 
         r = running_in_cgroupns();
         if (r > 0) {
-                r = VIRTUALIZATION_CONTAINER_OTHER;
+                v = VIRTUALIZATION_CONTAINER_OTHER;
                 goto finish;
         }
         if (r < 0)
                 log_debug_errno(r, "Failed to detect cgroup namespace: %m");
 
         /* If none of that worked, give up, assume no container manager. */
-        r = VIRTUALIZATION_NONE;
+        v = VIRTUALIZATION_NONE;
         goto finish;
 
 translate_name:
         if (streq(e, "oci")) {
                 /* Some images hardcode container=oci, but OCI is not a specific container manager.
                  * Try to detect one based on well-known files. */
-                r = detect_container_files();
-                if (!r)
-                        r = VIRTUALIZATION_CONTAINER_OTHER;
+                v = detect_container_files();
+                if (v == VIRTUALIZATION_NONE)
+                        v = VIRTUALIZATION_CONTAINER_OTHER;
                 goto finish;
         }
-        r = container_from_string(e);
-        if (r < 0)
-                r = VIRTUALIZATION_CONTAINER_OTHER;
+        v = container_from_string(e);
+        if (v < 0)
+                v = VIRTUALIZATION_CONTAINER_OTHER;
 
 finish:
-        log_debug("Found container virtualization %s.", virtualization_to_string(r));
-        cached_found = r;
-        return r;
+        log_debug("Found container virtualization %s.", virtualization_to_string(v));
+        cached_found = v;
+        return v;
 }
 
-int detect_virtualization(void) {
-        int r;
+Virtualization detect_virtualization(void) {
+        int v;
 
-        r = detect_container();
-        if (r == 0)
-                r = detect_vm();
+        v = detect_container();
+        if (v != VIRTUALIZATION_NONE)
+                return v;
 
-        return r;
+        return detect_vm();
 }
 
 static int userns_has_mapping(const char *name) {
         _cleanup_fclose_ FILE *f = NULL;
-        _cleanup_free_ char *buf = NULL;
-        size_t n_allocated = 0;
-        ssize_t n;
-        uint32_t a, b, c;
+        uid_t a, b, c;
         int r;
 
         f = fopen(name, "re");
@@ -809,19 +823,17 @@
                 return errno == ENOENT ? false : -errno;
         }
 
-        n = getline(&buf, &n_allocated, f);
-        if (n < 0) {
-                if (feof(f)) {
-                        log_debug("%s is empty, we're in an uninitialized user namespace", name);
-                        return true;
-                }
+        errno = 0;
+        r = fscanf(f, UID_FMT " " UID_FMT " " UID_FMT "\n", &a, &b, &c);
+        if (r == EOF) {
+                if (ferror(f))
+                        return log_debug_errno(errno_or_else(EIO), "Failed to read %s: %m", name);
 
-                return log_debug_errno(errno, "Failed to read %s: %m", name);
+                log_debug("%s is empty, we're in an uninitialized user namespace", name);
+                return true;
         }
-
-        r = sscanf(buf, "%"PRIu32" %"PRIu32" %"PRIu32, &a, &b, &c);
-        if (r < 3)
-                return log_debug_errno(errno, "Failed to parse %s: %m", name);
+        if (r != 3)
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "Failed to parse %s: %m", name);
 
         if (a == 0 && b == 0 && c == UINT32_MAX) {
                 /* The kernel calls mappings_overlap() and does not allow overlaps */
@@ -846,19 +858,18 @@
         if (r != 0)
                 return r;
 
-        /* "setgroups" file was added in kernel v3.18-rc6-15-g9cc46516dd. It is also
-         * possible to compile a kernel without CONFIG_USER_NS, in which case "setgroups"
-         * also does not exist. We cannot distinguish those two cases, so assume that
-         * we're running on a stripped-down recent kernel, rather than on an old one,
-         * and if the file is not found, return false.
-         */
-        r = read_one_line_file("/proc/self/setgroups", &line);
+        /* "setgroups" file was added in kernel v3.18-rc6-15-g9cc46516dd. It is also possible to compile a
+         * kernel without CONFIG_USER_NS, in which case "setgroups" also does not exist. We cannot
+         * distinguish those two cases, so assume that we're running on a stripped-down recent kernel, rather
+         * than on an old one, and if the file is not found, return false. */
+        r = read_virtual_file("/proc/self/setgroups", SIZE_MAX, &line, NULL);
         if (r < 0) {
                 log_debug_errno(r, "/proc/self/setgroups: %m");
                 return r == -ENOENT ? false : r;
         }
 
-        truncate_nl(line);
+        strstrip(line); /* remove trailing newline */
+
         r = streq(line, "deny");
         /* See user_namespaces(7) for a description of this "setgroups" contents. */
         log_debug("/proc/self/setgroups contains \"%s\", %s user namespace", line, r ? "in" : "not in");
@@ -868,10 +879,26 @@
 int running_in_chroot(void) {
         int r;
 
+        /* If we're PID1, /proc may not be mounted (and most likely we're not in a chroot). But PID1 will
+         * mount /proc, so all other programs can assume that if /proc is *not* available, we're in some
+         * chroot. */
+
         if (getenv_bool("SYSTEMD_IGNORE_CHROOT") > 0)
                 return 0;
 
+        if (getpid_cached() == 1)
+                return false;  /* We're PID 1, we can't be in a chroot. */
+
         r = files_same("/proc/1/root", "/", 0);
+        if (r == -ENOENT) {
+                r = proc_mounted();
+                if (r == 0) {
+                        log_debug("/proc is not mounted, assuming we're in a chroot.");
+                        return 1;
+                }
+                if (r > 0)  /* If we have fake /proc/, we can't do the check properly. */
+                        return -ENOSYS;
+        }
         if (r < 0)
                 return r;
 
@@ -885,68 +912,68 @@
 };
 
 static const struct cpuid_table_entry leaf1_edx[] = {
-        {  0, "fpu" },
-        {  1, "vme" },
-        {  2, "de" },
-        {  3, "pse" },
-        {  4, "tsc" },
-        {  5, "msr" },
-        {  6, "pae" },
-        {  7, "mce" },
-        {  8, "cx8" },
-        {  9, "apic" },
-        { 11, "sep" },
-        { 12, "mtrr" },
-        { 13, "pge" },
-        { 14, "mca" },
-        { 15, "cmov" },
-        { 16, "pat" },
-        { 17, "pse36" },
+        {  0, "fpu"     },
+        {  1, "vme"     },
+        {  2, "de"      },
+        {  3, "pse"     },
+        {  4, "tsc"     },
+        {  5, "msr"     },
+        {  6, "pae"     },
+        {  7, "mce"     },
+        {  8, "cx8"     },
+        {  9, "apic"    },
+        { 11, "sep"     },
+        { 12, "mtrr"    },
+        { 13, "pge"     },
+        { 14, "mca"     },
+        { 15, "cmov"    },
+        { 16, "pat"     },
+        { 17, "pse36"   },
         { 19, "clflush" },
-        { 23, "mmx" },
-        { 24, "fxsr" },
-        { 25, "sse" },
-        { 26, "sse2" },
-        { 28, "ht" },
+        { 23, "mmx"     },
+        { 24, "fxsr"    },
+        { 25, "sse"     },
+        { 26, "sse2"    },
+        { 28, "ht"      },
 };
 
 static const struct cpuid_table_entry leaf1_ecx[] = {
-        {  0, "pni" },
-        {  1, "pclmul" },
+        {  0, "pni"     },
+        {  1, "pclmul"  },
         {  3, "monitor" },
-        {  9, "ssse3" },
-        { 12, "fma3" },
-        { 13, "cx16" },
-        { 19, "sse4_1" },
-        { 20, "sse4_2" },
-        { 22, "movbe" },
-        { 23, "popcnt" },
-        { 25, "aes" },
-        { 26, "xsave" },
+        {  9, "ssse3"   },
+        { 12, "fma3"    },
+        { 13, "cx16"    },
+        { 19, "sse4_1"  },
+        { 20, "sse4_2"  },
+        { 22, "movbe"   },
+        { 23, "popcnt"  },
+        { 25, "aes"     },
+        { 26, "xsave"   },
         { 27, "osxsave" },
-        { 28, "avx" },
-        { 29, "f16c" },
-        { 30, "rdrand" },
+        { 28, "avx"     },
+        { 29, "f16c"    },
+        { 30, "rdrand"  },
 };
 
 static const struct cpuid_table_entry leaf7_ebx[] = {
-        {  3, "bmi1" },
-        {  5, "avx2" },
-        {  8, "bmi2" },
+        {  3, "bmi1"   },
+        {  5, "avx2"   },
+        {  8, "bmi2"   },
         { 18, "rdseed" },
-        { 19, "adx" },
+        { 19, "adx"    },
         { 29, "sha_ni" },
 };
 
 static const struct cpuid_table_entry leaf81_edx[] = {
         { 11, "syscall" },
-        { 27, "rdtscp" },
-        { 29, "lm" },
+        { 27, "rdtscp"  },
+        { 29, "lm"      },
 };
 
 static const struct cpuid_table_entry leaf81_ecx[] = {
         {  0, "lahf_lm" },
-        {  5, "abm" },
+        {  5, "abm"     },
 };
 
 static const struct cpuid_table_entry leaf87_edx[] = {
@@ -1004,35 +1031,37 @@
 }
 
 static const char *const virtualization_table[_VIRTUALIZATION_MAX] = {
-        [VIRTUALIZATION_NONE] = "none",
-        [VIRTUALIZATION_KVM] = "kvm",
-        [VIRTUALIZATION_AMAZON] = "amazon",
-        [VIRTUALIZATION_QEMU] = "qemu",
-        [VIRTUALIZATION_BOCHS] = "bochs",
-        [VIRTUALIZATION_XEN] = "xen",
-        [VIRTUALIZATION_UML] = "uml",
-        [VIRTUALIZATION_VMWARE] = "vmware",
-        [VIRTUALIZATION_ORACLE] = "oracle",
-        [VIRTUALIZATION_MICROSOFT] = "microsoft",
-        [VIRTUALIZATION_ZVM] = "zvm",
-        [VIRTUALIZATION_PARALLELS] = "parallels",
-        [VIRTUALIZATION_BHYVE] = "bhyve",
-        [VIRTUALIZATION_QNX] = "qnx",
-        [VIRTUALIZATION_ACRN] = "acrn",
-        [VIRTUALIZATION_POWERVM] = "powervm",
-        [VIRTUALIZATION_VM_OTHER] = "vm-other",
+        [VIRTUALIZATION_NONE]            = "none",
+        [VIRTUALIZATION_KVM]             = "kvm",
+        [VIRTUALIZATION_AMAZON]          = "amazon",
+        [VIRTUALIZATION_QEMU]            = "qemu",
+        [VIRTUALIZATION_BOCHS]           = "bochs",
+        [VIRTUALIZATION_XEN]             = "xen",
+        [VIRTUALIZATION_UML]             = "uml",
+        [VIRTUALIZATION_VMWARE]          = "vmware",
+        [VIRTUALIZATION_ORACLE]          = "oracle",
+        [VIRTUALIZATION_MICROSOFT]       = "microsoft",
+        [VIRTUALIZATION_ZVM]             = "zvm",
+        [VIRTUALIZATION_PARALLELS]       = "parallels",
+        [VIRTUALIZATION_BHYVE]           = "bhyve",
+        [VIRTUALIZATION_QNX]             = "qnx",
+        [VIRTUALIZATION_ACRN]            = "acrn",
+        [VIRTUALIZATION_POWERVM]         = "powervm",
+        [VIRTUALIZATION_APPLE]           = "apple",
+        [VIRTUALIZATION_SRE]             = "sre",
+        [VIRTUALIZATION_VM_OTHER]        = "vm-other",
 
-        [VIRTUALIZATION_SYSTEMD_NSPAWN] = "systemd-nspawn",
-        [VIRTUALIZATION_LXC_LIBVIRT] = "lxc-libvirt",
-        [VIRTUALIZATION_LXC] = "lxc",
-        [VIRTUALIZATION_OPENVZ] = "openvz",
-        [VIRTUALIZATION_DOCKER] = "docker",
-        [VIRTUALIZATION_PODMAN] = "podman",
-        [VIRTUALIZATION_RKT] = "rkt",
-        [VIRTUALIZATION_WSL] = "wsl",
-        [VIRTUALIZATION_PROOT] = "proot",
-        [VIRTUALIZATION_POUCH] = "pouch",
+        [VIRTUALIZATION_SYSTEMD_NSPAWN]  = "systemd-nspawn",
+        [VIRTUALIZATION_LXC_LIBVIRT]     = "lxc-libvirt",
+        [VIRTUALIZATION_LXC]             = "lxc",
+        [VIRTUALIZATION_OPENVZ]          = "openvz",
+        [VIRTUALIZATION_DOCKER]          = "docker",
+        [VIRTUALIZATION_PODMAN]          = "podman",
+        [VIRTUALIZATION_RKT]             = "rkt",
+        [VIRTUALIZATION_WSL]             = "wsl",
+        [VIRTUALIZATION_PROOT]           = "proot",
+        [VIRTUALIZATION_POUCH]           = "pouch",
         [VIRTUALIZATION_CONTAINER_OTHER] = "container-other",
 };
 
-DEFINE_STRING_TABLE_LOOKUP(virtualization, int);
+DEFINE_STRING_TABLE_LOOKUP(virtualization, Virtualization);
diff --git a/src/basic/virt.h b/src/basic/virt.h
index 1eafbe2..d49f323 100644
--- a/src/basic/virt.h
+++ b/src/basic/virt.h
@@ -3,9 +3,10 @@
 
 #include <stdbool.h>
 
+#include "errno-list.h"
 #include "macro.h"
 
-enum {
+typedef enum Virtualization {
         VIRTUALIZATION_NONE = 0,
 
         VIRTUALIZATION_VM_FIRST,
@@ -24,6 +25,8 @@
         VIRTUALIZATION_QNX,
         VIRTUALIZATION_ACRN,
         VIRTUALIZATION_POWERVM,
+        VIRTUALIZATION_APPLE,
+        VIRTUALIZATION_SRE,
         VIRTUALIZATION_VM_OTHER,
         VIRTUALIZATION_VM_LAST = VIRTUALIZATION_VM_OTHER,
 
@@ -43,23 +46,24 @@
 
         _VIRTUALIZATION_MAX,
         _VIRTUALIZATION_INVALID = -EINVAL,
-};
+        _VIRTUALIZATION_ERRNO_MAX = -ERRNO_MAX, /* ensure full range of errno fits into this enum */
+} Virtualization;
 
-static inline bool VIRTUALIZATION_IS_VM(int x) {
+static inline bool VIRTUALIZATION_IS_VM(Virtualization x) {
         return x >= VIRTUALIZATION_VM_FIRST && x <= VIRTUALIZATION_VM_LAST;
 }
 
-static inline bool VIRTUALIZATION_IS_CONTAINER(int x) {
+static inline bool VIRTUALIZATION_IS_CONTAINER(Virtualization x) {
         return x >= VIRTUALIZATION_CONTAINER_FIRST && x <= VIRTUALIZATION_CONTAINER_LAST;
 }
 
-int detect_vm(void);
-int detect_container(void);
-int detect_virtualization(void);
+Virtualization detect_vm(void);
+Virtualization detect_container(void);
+Virtualization detect_virtualization(void);
 
 int running_in_userns(void);
 int running_in_chroot(void);
 
-const char *virtualization_to_string(int v) _const_;
-int virtualization_from_string(const char *s) _pure_;
+const char *virtualization_to_string(Virtualization v) _const_;
+Virtualization virtualization_from_string(const char *s) _pure_;
 bool has_cpu_with_flag(const char *flag);
diff --git a/src/basic/xattr-util.c b/src/basic/xattr-util.c
index c175ce1..5b6131b 100644
--- a/src/basic/xattr-util.c
+++ b/src/basic/xattr-util.c
@@ -8,6 +8,7 @@
 #include <sys/xattr.h>
 
 #include "alloc-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "macro.h"
 #include "missing_syscall.h"
@@ -18,73 +19,84 @@
 #include "time-util.h"
 #include "xattr-util.h"
 
-int getxattr_malloc(
+int getxattr_at_malloc(
+                int fd,
                 const char *path,
                 const char *name,
-                char **ret,
-                bool allow_symlink) {
-
-        size_t l = 100;
-
-        assert(path);
-        assert(name);
-        assert(ret);
-
-        for(;;) {
-                _cleanup_free_ char *v = NULL;
-                ssize_t n;
-
-                v = new0(char, l+1);
-                if (!v)
-                        return -ENOMEM;
-
-                if (allow_symlink)
-                        n = lgetxattr(path, name, v, l);
-                else
-                        n = getxattr(path, name, v, l);
-                if (n < 0) {
-                        if (errno != ERANGE)
-                                return -errno;
-                } else {
-                        v[n] = 0; /* NUL terminate */
-                        *ret = TAKE_PTR(v);
-                        return (int) n;
-                }
-
-                if (allow_symlink)
-                        n = lgetxattr(path, name, NULL, 0);
-                else
-                        n = getxattr(path, name, NULL, 0);
-                if (n < 0)
-                        return -errno;
-                if (n > INT_MAX) /* We couldn't return this as 'int' anymore */
-                        return -E2BIG;
-
-                l = (size_t) n;
-        }
-}
-
-int fgetxattr_malloc(
-                int fd,
-                const char *name,
+                int flags,
                 char **ret) {
 
+        _cleanup_close_ int opened_fd = -EBADF;
+        unsigned n_attempts = 7;
+        bool by_procfs = false;
         size_t l = 100;
 
-        assert(fd >= 0);
+        assert(fd >= 0 || fd == AT_FDCWD);
         assert(name);
+        assert((flags & ~(AT_SYMLINK_FOLLOW|AT_EMPTY_PATH)) == 0);
         assert(ret);
 
+        /* So, this is single function that does what getxattr()/lgetxattr()/fgetxattr() does, but in one go,
+         * and with additional bells and whistles. Specifically:
+         *
+         * 1. This works on O_PATH fds (which fgetxattr() does not)
+         * 2. Provides full openat()-style semantics, i.e. by-fd, by-path and combination thereof
+         * 3. As extension to openat()-style semantics implies AT_EMPTY_PATH if path is NULL.
+         * 4. Does a malloc() loop, automatically sizing the allocation
+         * 5. NUL-terminates the returned buffer (for safety)
+         */
+
+        if (!path) /* If path is NULL, imply AT_EMPTY_PATH. – But if it's "", don't — for safety reasons. */
+                flags |= AT_EMPTY_PATH;
+
+        if (isempty(path)) {
+                if (!FLAGS_SET(flags, AT_EMPTY_PATH))
+                        return -EINVAL;
+
+                if (fd == AT_FDCWD) /* Both unspecified? Then operate on current working directory */
+                        path = ".";
+                else
+                        path = NULL;
+
+        } else if (fd != AT_FDCWD) {
+
+                /* If both have been specified, then we go via O_PATH */
+                opened_fd = openat(fd, path, O_PATH|O_CLOEXEC|(FLAGS_SET(flags, AT_SYMLINK_FOLLOW) ? 0 : O_NOFOLLOW));
+                if (opened_fd < 0)
+                        return -errno;
+
+                fd = opened_fd;
+                path = NULL;
+                by_procfs = true; /* fgetxattr() is not going to work, go via /proc/ link right-away */
+        }
+
         for (;;) {
                 _cleanup_free_ char *v = NULL;
                 ssize_t n;
 
-                v = new(char, l+1);
+                if (n_attempts == 0) /* If someone is racing against us, give up eventually */
+                        return -EBUSY;
+                n_attempts--;
+
+                v = new0(char, l+1);
                 if (!v)
                         return -ENOMEM;
 
-                n = fgetxattr(fd, name, v, l);
+                l = MALLOC_ELEMENTSOF(v) - 1;
+
+                if (path)
+                        n = FLAGS_SET(flags, AT_SYMLINK_FOLLOW) ? getxattr(path, name, v, l) : lgetxattr(path, name, v, l);
+                else
+                        n = by_procfs ? getxattr(FORMAT_PROC_FD_PATH(fd), name, v, l) : fgetxattr(fd, name, v, l);
                 if (n < 0) {
+                        if (errno == EBADF) {
+                                if (by_procfs || path)
+                                        return -EBADF;
+
+                                by_procfs = true; /* Might be an O_PATH fd, try again via /proc/ link */
+                                continue;
+                        }
+
                         if (errno != ERANGE)
                                 return -errno;
                 } else {
@@ -93,7 +105,10 @@
                         return (int) n;
                 }
 
-                n = fgetxattr(fd, name, NULL, 0);
+                if (path)
+                        n = FLAGS_SET(flags, AT_SYMLINK_FOLLOW) ? getxattr(path, name, NULL, 0) : lgetxattr(path, name, NULL, 0);
+                else
+                        n = by_procfs ? getxattr(FORMAT_PROC_FD_PATH(fd), name, NULL, 0) : fgetxattr(fd, name, NULL, 0);
                 if (n < 0)
                         return -errno;
                 if (n > INT_MAX) /* We couldn't return this as 'int' anymore */
@@ -103,44 +118,6 @@
         }
 }
 
-int fgetxattrat_fake(
-                int dirfd,
-                const char *filename,
-                const char *attribute,
-                void *value, size_t size,
-                int flags,
-                size_t *ret_size) {
-
-        char fn[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
-        _cleanup_close_ int fd = -1;
-        ssize_t l;
-
-        /* The kernel doesn't have a fgetxattrat() command, hence let's emulate one */
-
-        if (flags & ~(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH))
-                return -EINVAL;
-
-        if (isempty(filename)) {
-                if (!(flags & AT_EMPTY_PATH))
-                        return -EINVAL;
-
-                xsprintf(fn, "/proc/self/fd/%i", dirfd);
-        } else {
-                fd = openat(dirfd, filename, O_CLOEXEC|O_PATH|(flags & AT_SYMLINK_NOFOLLOW ? O_NOFOLLOW : 0));
-                if (fd < 0)
-                        return -errno;
-
-                xsprintf(fn, "/proc/self/fd/%i", fd);
-        }
-
-        l = getxattr(fn, attribute, value, size);
-        if (l < 0)
-                return -errno;
-
-        *ret_size = l;
-        return 0;
-}
-
 static int parse_crtime(le64_t le, usec_t *usec) {
         uint64_t u;
 
@@ -154,17 +131,23 @@
         return 0;
 }
 
-int fd_getcrtime_at(int dirfd, const char *name, usec_t *ret, int flags) {
+int fd_getcrtime_at(
+                int fd,
+                const char *path,
+                int flags,
+                usec_t *ret) {
+
+        _cleanup_free_ le64_t *le = NULL;
         STRUCT_STATX_DEFINE(sx);
         usec_t a, b;
-        le64_t le;
-        size_t n;
         int r;
 
+        assert(fd >= 0 || fd == AT_FDCWD);
+        assert((flags & ~(AT_SYMLINK_FOLLOW|AT_EMPTY_PATH)) == 0);
         assert(ret);
 
-        if (flags & ~(AT_EMPTY_PATH|AT_SYMLINK_NOFOLLOW))
-                return -EINVAL;
+        if (!path)
+                flags |= AT_EMPTY_PATH;
 
         /* So here's the deal: the creation/birth time (crtime/btime) of a file is a relatively newly supported concept
          * on Linux (or more strictly speaking: a concept that only recently got supported in the API, it was
@@ -176,7 +159,10 @@
          * concept is useful for determining how "old" a file really is, and hence using the older of the two makes
          * most sense. */
 
-        if (statx(dirfd, strempty(name), flags|AT_STATX_DONT_SYNC, STATX_BTIME, &sx) >= 0 &&
+        if (statx(fd, strempty(path),
+                  (flags & ~AT_SYMLINK_FOLLOW)|(FLAGS_SET(flags, AT_SYMLINK_FOLLOW) ? 0 : AT_SYMLINK_NOFOLLOW)|AT_STATX_DONT_SYNC,
+                  STATX_BTIME,
+                  &sx) >= 0 &&
             (sx.stx_mask & STATX_BTIME) &&
             sx.stx_btime.tv_sec != 0)
                 a = (usec_t) sx.stx_btime.tv_sec * USEC_PER_SEC +
@@ -184,12 +170,12 @@
         else
                 a = USEC_INFINITY;
 
-        r = fgetxattrat_fake(dirfd, name, "user.crtime_usec", &le, sizeof(le), flags, &n);
+        r = getxattr_at_malloc(fd, path, "user.crtime_usec", flags, (char**) &le);
         if (r >= 0) {
-                if (n != sizeof(le))
+                if (r != sizeof(*le))
                         r = -EIO;
                 else
-                        r = parse_crtime(le, &b);
+                        r = parse_crtime(*le, &b);
         }
         if (r < 0) {
                 if (a != USEC_INFINITY) {
@@ -208,45 +194,85 @@
         return 0;
 }
 
-int fd_getcrtime(int fd, usec_t *ret) {
-        return fd_getcrtime_at(fd, NULL, ret, AT_EMPTY_PATH);
-}
-
-int path_getcrtime(const char *p, usec_t *ret) {
-        return fd_getcrtime_at(AT_FDCWD, p, ret, 0);
-}
-
 int fd_setcrtime(int fd, usec_t usec) {
         le64_t le;
 
         assert(fd >= 0);
 
-        if (IN_SET(usec, 0, USEC_INFINITY))
+        if (!timestamp_is_set(usec))
                 usec = now(CLOCK_REALTIME);
 
         le = htole64((uint64_t) usec);
-        if (fsetxattr(fd, "user.crtime_usec", &le, sizeof(le), 0) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(fsetxattr(fd, "user.crtime_usec", &le, sizeof(le), 0));
 }
 
-int flistxattr_malloc(int fd, char **ret) {
+int listxattr_at_malloc(
+                int fd,
+                const char *path,
+                int flags,
+                char **ret) {
+
+        _cleanup_close_ int opened_fd = -EBADF;
+        bool by_procfs = false;
+        unsigned n_attempts = 7;
         size_t l = 100;
 
-        assert(fd >= 0);
+        assert(fd >= 0 || fd == AT_FDCWD);
+        assert((flags & ~(AT_SYMLINK_FOLLOW|AT_EMPTY_PATH)) == 0);
         assert(ret);
 
+        /* This is to listxattr()/llistattr()/flistattr() what getxattr_at_malloc() is to getxattr()/… */
+
+        if (!path) /* If path is NULL, imply AT_EMPTY_PATH. – But if it's "", don't. */
+                flags |= AT_EMPTY_PATH;
+
+        if (isempty(path)) {
+                if (!FLAGS_SET(flags, AT_EMPTY_PATH))
+                        return -EINVAL;
+
+                if (fd == AT_FDCWD) /* Both unspecified? Then operate on current working directory */
+                        path = ".";
+                else
+                        path = NULL;
+
+        } else if (fd != AT_FDCWD) {
+                /* If both have been specified, then we go via O_PATH */
+                opened_fd = openat(fd, path, O_PATH|O_CLOEXEC|(FLAGS_SET(flags, AT_SYMLINK_FOLLOW) ? 0 : O_NOFOLLOW));
+                if (opened_fd < 0)
+                        return -errno;
+
+                fd = opened_fd;
+                path = NULL;
+                by_procfs = true;
+        }
+
         for (;;) {
                 _cleanup_free_ char *v = NULL;
                 ssize_t n;
 
+                if (n_attempts == 0) /* If someone is racing against us, give up eventually */
+                        return -EBUSY;
+                n_attempts--;
+
                 v = new(char, l+1);
                 if (!v)
                         return -ENOMEM;
 
-                n = flistxattr(fd, v, l);
+                l = MALLOC_ELEMENTSOF(v) - 1;
+
+                if (path)
+                        n = FLAGS_SET(flags, AT_SYMLINK_FOLLOW) ? listxattr(path, v, l) : llistxattr(path, v, l);
+                else
+                        n = by_procfs ? listxattr(FORMAT_PROC_FD_PATH(fd), v, l) : flistxattr(fd, v, l);
                 if (n < 0) {
+                        if (errno == EBADF) {
+                                if (by_procfs || path)
+                                        return -EBADF;
+
+                                by_procfs = true; /* Might be an O_PATH fd, try again via /proc/ link */
+                                continue;
+                        }
+
                         if (errno != ERANGE)
                                 return -errno;
                 } else {
@@ -255,7 +281,10 @@
                         return (int) n;
                 }
 
-                n = flistxattr(fd, NULL, 0);
+                if (path)
+                        n = FLAGS_SET(flags, AT_SYMLINK_FOLLOW) ? listxattr(path, NULL, 0) : llistxattr(path, NULL, 0);
+                else
+                        n = by_procfs ? listxattr(FORMAT_PROC_FD_PATH(fd), NULL, 0) : flistxattr(fd, NULL, 0);
                 if (n < 0)
                         return -errno;
                 if (n > INT_MAX) /* We couldn't return this as 'int' anymore */
diff --git a/src/basic/xattr-util.h b/src/basic/xattr-util.h
index 560e34b..0eb745a 100644
--- a/src/basic/xattr-util.h
+++ b/src/basic/xattr-util.h
@@ -7,21 +7,32 @@
 
 #include "time-util.h"
 
-int getxattr_malloc(const char *path, const char *name, char **value, bool allow_symlink);
-int fgetxattr_malloc(int fd, const char *name, char **value);
-
-int fgetxattrat_fake(
-                int dirfd,
-                const char *filename,
-                const char *attribute,
-                void *value, size_t size,
-                int flags,
-                size_t *ret_size);
+int getxattr_at_malloc(int fd, const char *path, const char *name, int flags, char **ret);
+static inline int getxattr_malloc(const char *path, const char *name, char **ret) {
+        return getxattr_at_malloc(AT_FDCWD, path, name, AT_SYMLINK_FOLLOW, ret);
+}
+static inline int lgetxattr_malloc(const char *path, const char *name, char **ret) {
+        return getxattr_at_malloc(AT_FDCWD, path, name, 0, ret);
+}
+static inline int fgetxattr_malloc(int fd, const char *name, char **ret) {
+        return getxattr_at_malloc(fd, NULL, name, AT_EMPTY_PATH, ret);
+}
 
 int fd_setcrtime(int fd, usec_t usec);
 
-int fd_getcrtime(int fd, usec_t *usec);
-int path_getcrtime(const char *p, usec_t *usec);
-int fd_getcrtime_at(int dirfd, const char *name, usec_t *usec, int flags);
+int fd_getcrtime_at(int fd, const char *name, int flags, usec_t *ret);
+static inline int fd_getcrtime(int fd, usec_t *ret) {
+        return fd_getcrtime_at(fd, NULL, 0, ret);
+}
 
-int flistxattr_malloc(int fd, char **ret);
+
+int listxattr_at_malloc(int fd, const char *path, int flags, char **ret);
+static inline int listxattr_malloc(const char *path, char **ret) {
+        return listxattr_at_malloc(AT_FDCWD, path, AT_SYMLINK_FOLLOW, ret);
+}
+static inline int llistxattr_malloc(const char *path, char **ret) {
+        return listxattr_at_malloc(AT_FDCWD, path, 0, ret);
+}
+static inline int flistxattr_malloc(int fd, char **ret) {
+        return listxattr_at_malloc(fd, NULL, AT_EMPTY_PATH, ret);
+}
diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
index 981218f..e1ddf97 100644
--- a/src/binfmt/binfmt.c
+++ b/src/binfmt/binfmt.c
@@ -11,8 +11,9 @@
 
 #include "alloc-util.h"
 #include "binfmt-util.h"
+#include "build.h"
 #include "conf-files.h"
-#include "def.h"
+#include "constants.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "log.h"
@@ -27,77 +28,80 @@
 static PagerFlags arg_pager_flags = 0;
 static bool arg_unregister = false;
 
-static int delete_rule(const char *rule) {
-        _cleanup_free_ char *x = NULL, *fn = NULL;
-        char *e;
-
-        assert(rule);
-        assert(rule[0]);
-
-        e = strchrnul(rule + 1, rule[0]);
-        x = strndup(rule + 1, e - rule - 1);
-        if (!x)
-                return log_oom();
-
-        if (!filename_is_valid(x) ||
-            STR_IN_SET(x, "register", "status"))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Rule file name '%s' is not valid, refusing.", x);
-
-        fn = path_join("/proc/sys/fs/binfmt_misc", x);
-        if (!fn)
-                return log_oom();
-
+static int delete_rule(const char *rulename) {
+        const char *fn = strjoina("/proc/sys/fs/binfmt_misc/", rulename);
         return write_string_file(fn, "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
 }
 
-static int apply_rule(const char *rule) {
+static int apply_rule(const char *filename, unsigned line, const char *rule) {
+        assert(filename);
+        assert(line > 0);
+        assert(rule);
+        assert(rule[0]);
+
+        _cleanup_free_ char *rulename = NULL;
         int r;
 
-        (void) delete_rule(rule);
+        rulename = strdupcspn(rule + 1, CHAR_TO_STR(rule[0]));
+        if (!rulename)
+                return log_oom();
+
+        if (!filename_is_valid(rulename) ||
+            STR_IN_SET(rulename, "register", "status"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "%s:%u: Rule name '%s' is not valid, refusing.",
+                                       filename, line, rulename);
+        r = delete_rule(rulename);
+        if (r < 0 && r != -ENOENT)
+                log_warning_errno(r, "%s:%u: Failed to delete rule '%s', ignoring: %m",
+                                  filename, line, rulename);
+        if (r >= 0)
+                log_debug("%s:%u: Rule '%s' deleted.", filename, line, rulename);
 
         r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, WRITE_STRING_FILE_DISABLE_BUFFER);
         if (r < 0)
-                return log_error_errno(r, "Failed to add binary format: %m");
+                return log_error_errno(r, "%s:%u: Failed to add binary format '%s': %m",
+                                       filename, line, rulename);
 
+        log_debug("%s:%u: Binary format '%s' registered.", filename, line, rulename);
         return 0;
 }
 
-static int apply_file(const char *path, bool ignore_enoent) {
+static int apply_file(const char *filename, bool ignore_enoent) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *pp = NULL;
         int r;
 
-        assert(path);
+        assert(filename);
 
-        r = search_and_fopen(path, "re", NULL, (const char**) CONF_PATHS_STRV("binfmt.d"), &f, &pp);
+        r = search_and_fopen(filename, "re", NULL, (const char**) CONF_PATHS_STRV("binfmt.d"), &f, &pp);
         if (r < 0) {
                 if (ignore_enoent && r == -ENOENT)
                         return 0;
 
-                return log_error_errno(r, "Failed to open file '%s': %m", path);
+                return log_error_errno(r, "Failed to open file '%s': %m", filename);
         }
 
-        log_debug("apply: %s", pp);
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
+        log_debug("Applying %s%s", pp, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+        for (unsigned line = 1;; line++) {
+                _cleanup_free_ char *text = NULL;
                 char *p;
                 int k;
 
-                k = read_line(f, LONG_LINE_MAX, &line);
+                k = read_line(f, LONG_LINE_MAX, &text);
                 if (k < 0)
                         return log_error_errno(k, "Failed to read file '%s': %m", pp);
                 if (k == 0)
                         break;
 
-                p = strstrip(line);
+                p = strstrip(text);
                 if (isempty(p))
                         continue;
                 if (strchr(COMMENTS, p[0]))
                         continue;
 
-                k = apply_rule(p);
-                if (k < 0 && r == 0)
+                k = apply_rule(filename, line, p);
+                if (k < 0 && r >= 0)
                         r = k;
         }
 
@@ -174,7 +178,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if ((arg_unregister || arg_cat_config) && argc > optind)
@@ -184,6 +188,18 @@
         return 1;
 }
 
+static int binfmt_mounted_warn(void) {
+        int r;
+
+        r = binfmt_mounted();
+        if (r < 0)
+                return log_error_errno(r, "Failed to check if /proc/sys/fs/binfmt_misc is mounted: %m");
+        if (r == 0)
+                log_debug("/proc/sys/fs/binfmt_misc is not mounted in read-write mode, skipping.");
+
+        return r;
+}
+
 static int run(int argc, char *argv[]) {
         int r, k;
 
@@ -201,33 +217,42 @@
                 return disable_binfmt();
 
         if (argc > optind) {
-                int i;
+                r = binfmt_mounted_warn();
+                if (r <= 0)
+                        return r;
 
-                for (i = optind; i < argc; i++) {
+                for (int i = optind; i < argc; i++) {
                         k = apply_file(argv[i], false);
-                        if (k < 0 && r == 0)
+                        if (k < 0 && r >= 0)
                                 r = k;
                 }
         } else {
                 _cleanup_strv_free_ char **files = NULL;
-                char **f;
 
                 r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("binfmt.d"));
                 if (r < 0)
                         return log_error_errno(r, "Failed to enumerate binfmt.d files: %m");
 
                 if (arg_cat_config) {
-                        (void) pager_open(arg_pager_flags);
+                        pager_open(arg_pager_flags);
 
                         return cat_files(NULL, files, 0);
                 }
 
+                r = binfmt_mounted_warn();
+                if (r <= 0)
+                        return r;
+
                 /* Flush out all rules */
-                (void) write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
+                r = write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to flush binfmt_misc rules, ignoring: %m");
+                else
+                        log_debug("Flushed all binfmt_misc rules.");
 
                 STRV_FOREACH(f, files) {
                         k = apply_file(*f, true);
-                        if (k < 0 && r == 0)
+                        if (k < 0 && r >= 0)
                                 r = k;
                 }
         }
diff --git a/src/boot/bless-boot-generator.c b/src/boot/bless-boot-generator.c
index 7209b28..5120b96 100644
--- a/src/boot/bless-boot-generator.c
+++ b/src/boot/bless-boot-generator.c
@@ -1,71 +1,56 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
-#include <sys/stat.h>
 #include <unistd.h>
 
 #include "efi-loader.h"
 #include "generator.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "mkdir.h"
 #include "special.h"
 #include "string-util.h"
-#include "util.h"
 #include "virt.h"
 
-/* This generator pulls systemd-bless-boot.service into the initial transaction if the "LoaderBootCountPath" EFI
- * variable is set, i.e. the system boots up with boot counting in effect, which means we should mark the boot as
- * "good" if we manage to boot up far enough. */
+/* This generator pulls systemd-bless-boot.service into the initial transaction if the "LoaderBootCountPath"
+ * EFI variable is set, i.e. the system boots up with boot counting in effect, which means we should mark the
+ * boot as "good" if we manage to boot up far enough. */
 
-static const char *arg_dest = "/tmp";
-
-int main(int argc, char *argv[]) {
-        const char *p;
-
-        log_setup_generator();
-
-        if (argc > 1 && argc != 4) {
-                log_error("This program takes three or no arguments.");
-                return EXIT_FAILURE;
-        }
-
-        if (argc > 1)
-                arg_dest = argv[2];
+static int run(const char *dest, const char *dest_early, const char *dest_late) {
 
         if (in_initrd() > 0) {
                 log_debug("Skipping generator, running in the initrd.");
-                return EXIT_SUCCESS;
+                return 0;
         }
 
         if (detect_container() > 0) {
                 log_debug("Skipping generator, running in a container.");
-                return EXIT_SUCCESS;
+                return 0;
         }
 
         if (!is_efi_boot()) {
                 log_debug("Skipping generator, not an EFI boot.");
-                return EXIT_SUCCESS;
+                return 0;
         }
 
         if (access(EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderBootCountPath)), F_OK) < 0) {
 
                 if (errno == ENOENT) {
                         log_debug_errno(errno, "Skipping generator, not booted with boot counting in effect.");
-                        return EXIT_SUCCESS;
+                        return 0;
                 }
 
-                log_error_errno(errno, "Failed to check if LoaderBootCountPath EFI variable exists: %m");
-                return EXIT_FAILURE;
+                return log_error_errno(errno, "Failed to check if LoaderBootCountPath EFI variable exists: %m");
         }
 
-        /* We pull this in from basic.target so that it ends up in all "regular" boot ups, but not in rescue.target or
-         * even emergency.target. */
-        p = strjoina(arg_dest, "/" SPECIAL_BASIC_TARGET ".wants/systemd-bless-boot.service");
+        /* We pull this in from basic.target so that it ends up in all "regular" boot ups, but not in
+         * rescue.target or even emergency.target. */
+        const char *p = strjoina(dest_early, "/" SPECIAL_BASIC_TARGET ".wants/systemd-bless-boot.service");
         (void) mkdir_parents(p, 0755);
-        if (symlink(SYSTEM_DATA_UNIT_DIR "/systemd-bless-boot.service", p) < 0) {
-                log_error_errno(errno, "Failed to create symlink '%s': %m", p);
-                return EXIT_FAILURE;
-        }
+        if (symlink(SYSTEM_DATA_UNIT_DIR "/systemd-bless-boot.service", p) < 0)
+                return log_error_errno(errno, "Failed to create symlink '%s': %m", p);
 
-        return EXIT_SUCCESS;
+        return 0;
 }
+
+DEFINE_MAIN_GENERATOR_FUNCTION(run);
diff --git a/src/boot/bless-boot.c b/src/boot/bless-boot.c
index 3fc319c..59f02b7 100644
--- a/src/boot/bless-boot.c
+++ b/src/boot/bless-boot.c
@@ -5,17 +5,21 @@
 
 #include "alloc-util.h"
 #include "bootspec.h"
+#include "build.h"
+#include "devnum-util.h"
+#include "efi-api.h"
 #include "efi-loader.h"
 #include "efivars.h"
 #include "fd-util.h"
+#include "find-esp.h"
 #include "fs-util.h"
 #include "log.h"
 #include "main-func.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
+#include "sync-util.h"
 #include "terminal-util.h"
-#include "util.h"
 #include "verbs.h"
 #include "virt.h"
 
@@ -89,7 +93,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -97,17 +101,18 @@
 
 static int acquire_path(void) {
         _cleanup_free_ char *esp_path = NULL, *xbootldr_path = NULL;
+        dev_t esp_devid = 0, xbootldr_devid = 0;
         char **a;
         int r;
 
         if (!strv_isempty(arg_path))
                 return 0;
 
-        r = find_esp_and_warn(NULL, false, &esp_path, NULL, NULL, NULL, NULL);
+        r = find_esp_and_warn(NULL, NULL, /* unprivileged_mode= */ false, &esp_path, NULL, NULL, NULL, NULL, &esp_devid);
         if (r < 0 && r != -ENOKEY) /* ENOKEY means not found, and is the only error the function won't log about on its own */
                 return r;
 
-        r = find_xbootldr_and_warn(NULL, false, &xbootldr_path, NULL);
+        r = find_xbootldr_and_warn(NULL, NULL, /* unprivileged_mode= */ false, &xbootldr_path, NULL, &xbootldr_devid);
         if (r < 0 && r != -ENOKEY)
                 return r;
 
@@ -116,8 +121,10 @@
                                        "Couldn't find $BOOT partition. It is recommended to mount it to /boot.\n"
                                        "Alternatively, use --path= to specify path to mount point.");
 
-        if (esp_path)
+        if (esp_path && xbootldr_path && !devnum_set_and_equal(esp_devid, xbootldr_devid)) /* in case the two paths refer to the same inode, suppress one */
                 a = strv_new(esp_path, xbootldr_path);
+        else if (esp_path)
+                a = strv_new(esp_path);
         else
                 a = strv_new(xbootldr_path);
         if (!a)
@@ -129,7 +136,7 @@
                 _cleanup_free_ char *j = NULL;
 
                 j = strv_join(arg_path, ":");
-                log_debug("Using %s as boot loader drop-in search path.", j);
+                log_debug("Using %s as boot loader drop-in search path.", strna(j));
         }
 
         return 0;
@@ -161,7 +168,7 @@
                                        "Can't parse empty 'tries left' counter from LoaderBootCountPath: %s",
                                        path);
 
-        z = strndupa(e, k);
+        z = strndupa_safe(e, k);
         r = safe_atou64(z, &left);
         if (r < 0)
                 return log_error_errno(r, "Failed to parse 'tries left' counter from LoaderBootCountPath: %s", path);
@@ -177,7 +184,7 @@
                                                "Can't parse empty 'tries done' counter from LoaderBootCountPath: %s",
                                                path);
 
-                z = strndupa(e, k);
+                z = strndupa_safe(e, k);
                 r = safe_atou64(z, &done);
                 if (r < 0)
                         return log_error_errno(r, "Failed to parse 'tries done' counter from LoaderBootCountPath: %s", path);
@@ -319,7 +326,6 @@
 static int verb_status(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL;
         uint64_t left, done;
-        char **p;
         int r;
 
         r = acquire_boot_count_path(&path, &prefix, &left, &done, &suffix);
@@ -354,7 +360,7 @@
                   left, done);
 
         STRV_FOREACH(p, arg_path) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 fd = open(*p, O_DIRECTORY|O_CLOEXEC|O_RDONLY);
                 if (fd < 0) {
@@ -393,10 +399,9 @@
 }
 
 static int verb_set(int argc, char *argv[], void *userdata) {
-        _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL, *parent = NULL;
+        _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL;
         const char *target, *source1, *source2;
         uint64_t done;
-        char **p;
         int r;
 
         r = acquire_boot_count_path(&path, &prefix, NULL, &done, &suffix);
@@ -434,7 +439,7 @@
         }
 
         STRV_FOREACH(p, arg_path) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 fd = open(*p, O_DIRECTORY|O_CLOEXEC|O_RDONLY);
                 if (fd < 0)
@@ -443,12 +448,12 @@
                 r = rename_noreplace(fd, skip_slash(source1), fd, skip_slash(target));
                 if (r == -EEXIST)
                         goto exists;
-                else if (r == -ENOENT) {
+                if (r == -ENOENT) {
 
                         r = rename_noreplace(fd, skip_slash(source2), fd, skip_slash(target));
                         if (r == -EEXIST)
                                 goto exists;
-                        else if (r == -ENOENT) {
+                        if (r == -ENOENT) {
 
                                 if (faccessat(fd, skip_slash(target), F_OK, 0) >= 0) /* Hmm, if we can't find either source file, maybe the destination already exists? */
                                         goto exists;
@@ -458,22 +463,18 @@
 
                                 /* We found none of the snippets here, try the next directory */
                                 continue;
-                        } else if (r < 0)
+                        }
+                        if (r < 0)
                                 return log_error_errno(r, "Failed to rename '%s' to '%s': %m", source2, target);
-                        else
-                                log_debug("Successfully renamed '%s' to '%s'.", source2, target);
 
+                        log_debug("Successfully renamed '%s' to '%s'.", source2, target);
                 } else if (r < 0)
                         return log_error_errno(r, "Failed to rename '%s' to '%s': %m", source1, target);
                 else
                         log_debug("Successfully renamed '%s' to '%s'.", source1, target);
 
                 /* First, fsync() the directory these files are located in */
-                parent = dirname_malloc(target);
-                if (!parent)
-                        return log_oom();
-
-                r = fsync_path_at(fd, skip_slash(parent));
+                r = fsync_parent_at(fd, skip_slash(target));
                 if (r < 0)
                         log_debug_errno(errno, "Failed to synchronize image directory, ignoring: %m");
 
diff --git a/src/boot/boot-check-no-failures.c b/src/boot/boot-check-no-failures.c
index cb4f758..4ff91cb 100644
--- a/src/boot/boot-check-no-failures.c
+++ b/src/boot/boot-check-no-failures.c
@@ -8,12 +8,12 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-error.h"
 #include "log.h"
 #include "main-func.h"
 #include "pretty-print.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static int help(void) {
         _cleanup_free_ char *link = NULL;
@@ -67,7 +67,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/boot/bootctl-install.c b/src/boot/bootctl-install.c
new file mode 100644
index 0000000..30a6cbb
--- /dev/null
+++ b/src/boot/bootctl-install.c
@@ -0,0 +1,1093 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "bootctl.h"
+#include "bootctl-install.h"
+#include "bootctl-random-seed.h"
+#include "bootctl-util.h"
+#include "chase-symlinks.h"
+#include "copy.h"
+#include "dirent-util.h"
+#include "efi-api.h"
+#include "env-file.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "fs-util.h"
+#include "glyph-util.h"
+#include "id128-util.h"
+#include "os-util.h"
+#include "path-util.h"
+#include "rm-rf.h"
+#include "stat-util.h"
+#include "sync-util.h"
+#include "tmpfile-util.h"
+#include "umask-util.h"
+#include "utf8.h"
+
+static int load_etc_machine_id(void) {
+        int r;
+
+        r = sd_id128_get_machine(&arg_machine_id);
+        if (r < 0) {
+                if (ERRNO_IS_MACHINE_ID_UNSET(r)) /* Not set or empty */
+                        return 0;
+
+                return log_error_errno(r, "Failed to get machine-id: %m");
+        }
+
+        log_debug("Loaded machine ID %s from /etc/machine-id.", SD_ID128_TO_STRING(arg_machine_id));
+        return 0;
+}
+
+static int load_etc_machine_info(void) {
+        /* systemd v250 added support to store the kernel-install layout setting and the machine ID to use
+         * for setting up the ESP in /etc/machine-info. The newer /etc/kernel/entry-token file, as well as
+         * the $layout field in /etc/kernel/install.conf are better replacements for this though, hence this
+         * has been deprecated and is only returned for compatibility. */
+        _cleanup_free_ char *p = NULL, *s = NULL, *layout = NULL;
+        int r;
+
+        p = path_join(arg_root, "etc/machine-info");
+        if (!p)
+                return log_oom();
+
+        r = parse_env_file(NULL, p,
+                           "KERNEL_INSTALL_LAYOUT", &layout,
+                           "KERNEL_INSTALL_MACHINE_ID", &s);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse /etc/machine-info: %m");
+
+        if (!isempty(s)) {
+                if (!arg_quiet)
+                        log_notice("Read $KERNEL_INSTALL_MACHINE_ID from /etc/machine-info. "
+                                   "Please move it to /etc/kernel/entry-token.");
+
+                r = sd_id128_from_string(s, &arg_machine_id);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse KERNEL_INSTALL_MACHINE_ID=%s in /etc/machine-info: %m", s);
+
+                log_debug("Loaded KERNEL_INSTALL_MACHINE_ID=%s from /etc/machine-info.",
+                          SD_ID128_TO_STRING(arg_machine_id));
+        }
+
+        if (!isempty(layout)) {
+                if (!arg_quiet)
+                        log_notice("Read $KERNEL_INSTALL_LAYOUT from /etc/machine-info. "
+                                   "Please move it to the layout= setting of /etc/kernel/install.conf.");
+
+                log_debug("KERNEL_INSTALL_LAYOUT=%s is specified in /etc/machine-info.", layout);
+                free_and_replace(arg_install_layout, layout);
+        }
+
+        return 0;
+}
+
+static int load_etc_kernel_install_conf(void) {
+        _cleanup_free_ char *layout = NULL, *p = NULL;
+        int r;
+
+        p = path_join(arg_root, etc_kernel(), "install.conf");
+        if (!p)
+                return log_oom();
+
+        r = parse_env_file(NULL, p, "layout", &layout);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse %s: %m", p);
+
+        if (!isempty(layout)) {
+                log_debug("layout=%s is specified in %s.", layout, p);
+                free_and_replace(arg_install_layout, layout);
+        }
+
+        return 0;
+}
+
+static bool use_boot_loader_spec_type1(void) {
+        /* If the layout is not specified, or if it is set explicitly to "bls" we assume Boot Loader
+         * Specification Type #1 is the chosen format for our boot loader entries */
+        return !arg_install_layout || streq(arg_install_layout, "bls");
+}
+
+static int settle_make_entry_directory(void) {
+        int r;
+
+        r = load_etc_machine_id();
+        if (r < 0)
+                return r;
+
+        r = load_etc_machine_info();
+        if (r < 0)
+                return r;
+
+        r = load_etc_kernel_install_conf();
+        if (r < 0)
+                return r;
+
+        r = settle_entry_token();
+        if (r < 0)
+                return r;
+
+        bool layout_type1 = use_boot_loader_spec_type1();
+        if (arg_make_entry_directory < 0) { /* Automatic mode */
+                if (layout_type1) {
+                        if (arg_entry_token_type == ARG_ENTRY_TOKEN_MACHINE_ID) {
+                                r = path_is_temporary_fs("/etc/machine-id");
+                                if (r < 0)
+                                        return log_debug_errno(r, "Couldn't determine whether /etc/machine-id is on a temporary file system: %m");
+
+                                arg_make_entry_directory = r == 0;
+                        } else
+                                arg_make_entry_directory = true;
+                } else
+                        arg_make_entry_directory = false;
+        }
+
+        if (arg_make_entry_directory > 0 && !layout_type1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "KERNEL_INSTALL_LAYOUT=%s is configured, but Boot Loader Specification Type #1 entry directory creation was requested.",
+                                       arg_install_layout);
+
+        return 0;
+}
+
+static int compare_product(const char *a, const char *b) {
+        size_t x, y;
+
+        assert(a);
+        assert(b);
+
+        x = strcspn(a, " ");
+        y = strcspn(b, " ");
+        if (x != y)
+                return x < y ? -1 : x > y ? 1 : 0;
+
+        return strncmp(a, b, x);
+}
+
+static int compare_version(const char *a, const char *b) {
+        assert(a);
+        assert(b);
+
+        a += strcspn(a, " ");
+        a += strspn(a, " ");
+        b += strcspn(b, " ");
+        b += strspn(b, " ");
+
+        return strverscmp_improved(a, b);
+}
+
+static int version_check(int fd_from, const char *from, int fd_to, const char *to) {
+        _cleanup_free_ char *a = NULL, *b = NULL;
+        int r;
+
+        assert(fd_from >= 0);
+        assert(from);
+        assert(fd_to >= 0);
+        assert(to);
+
+        r = get_file_version(fd_from, &a);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return log_notice_errno(SYNTHETIC_ERRNO(EREMOTE),
+                                       "Source file \"%s\" does not carry version information!",
+                                       from);
+
+        r = get_file_version(fd_to, &b);
+        if (r < 0)
+                return r;
+        if (r == 0 || compare_product(a, b) != 0)
+                return log_notice_errno(SYNTHETIC_ERRNO(EREMOTE),
+                                        "Skipping \"%s\", since it's owned by another boot loader.",
+                                        to);
+
+        r = compare_version(a, b);
+        log_debug("Comparing versions: \"%s\" %s \"%s", a, comparison_operator(r), b);
+        if (r < 0)
+                return log_warning_errno(SYNTHETIC_ERRNO(ESTALE),
+                                         "Skipping \"%s\", since newer boot loader version in place already.", to);
+        if (r == 0)
+                return log_info_errno(SYNTHETIC_ERRNO(ESTALE),
+                                      "Skipping \"%s\", since same boot loader version in place already.", to);
+
+        return 0;
+}
+
+static int copy_file_with_version_check(const char *from, const char *to, bool force) {
+        _cleanup_close_ int fd_from = -EBADF, fd_to = -EBADF;
+        _cleanup_free_ char *t = NULL;
+        int r;
+
+        fd_from = open(from, O_RDONLY|O_CLOEXEC|O_NOCTTY);
+        if (fd_from < 0)
+                return log_error_errno(errno, "Failed to open \"%s\" for reading: %m", from);
+
+        if (!force) {
+                fd_to = open(to, O_RDONLY|O_CLOEXEC|O_NOCTTY);
+                if (fd_to < 0) {
+                        if (errno != ENOENT)
+                                return log_error_errno(errno, "Failed to open \"%s\" for reading: %m", to);
+                } else {
+                        r = version_check(fd_from, from, fd_to, to);
+                        if (r < 0)
+                                return r;
+
+                        if (lseek(fd_from, 0, SEEK_SET) == (off_t) -1)
+                                return log_error_errno(errno, "Failed to seek in \"%s\": %m", from);
+
+                        fd_to = safe_close(fd_to);
+                }
+        }
+
+        r = tempfn_random(to, NULL, &t);
+        if (r < 0)
+                return log_oom();
+
+        WITH_UMASK(0000) {
+                fd_to = open(t, O_WRONLY|O_CREAT|O_CLOEXEC|O_EXCL|O_NOFOLLOW, 0644);
+                if (fd_to < 0)
+                        return log_error_errno(errno, "Failed to open \"%s\" for writing: %m", t);
+        }
+
+        r = copy_bytes(fd_from, fd_to, UINT64_MAX, COPY_REFLINK);
+        if (r < 0) {
+                (void) unlink(t);
+                return log_error_errno(r, "Failed to copy data from \"%s\" to \"%s\": %m", from, t);
+        }
+
+        (void) copy_times(fd_from, fd_to, 0);
+
+        r = fsync_full(fd_to);
+        if (r < 0) {
+                (void) unlink_noerrno(t);
+                return log_error_errno(r, "Failed to copy data from \"%s\" to \"%s\": %m", from, t);
+        }
+
+        if (renameat(AT_FDCWD, t, AT_FDCWD, to) < 0) {
+                (void) unlink_noerrno(t);
+                return log_error_errno(errno, "Failed to rename \"%s\" to \"%s\": %m", t, to);
+        }
+
+        log_info("Copied \"%s\" to \"%s\".", from, to);
+
+        return 0;
+}
+
+static int mkdir_one(const char *prefix, const char *suffix) {
+        _cleanup_free_ char *p = NULL;
+
+        p = path_join(prefix, suffix);
+        if (mkdir(p, 0700) < 0) {
+                if (errno != EEXIST)
+                        return log_error_errno(errno, "Failed to create \"%s\": %m", p);
+        } else
+                log_info("Created \"%s\".", p);
+
+        return 0;
+}
+
+static const char *const esp_subdirs[] = {
+        /* The directories to place in the ESP */
+        "EFI",
+        "EFI/systemd",
+        "EFI/BOOT",
+        "loader",
+        NULL
+};
+
+static const char *const dollar_boot_subdirs[] = {
+        /* The directories to place in the XBOOTLDR partition or the ESP, depending what exists */
+        "loader",
+        "loader/entries",  /* Type #1 entries */
+        "EFI",
+        "EFI/Linux",       /* Type #2 entries */
+        NULL
+};
+
+static int create_subdirs(const char *root, const char * const *subdirs) {
+        int r;
+
+        STRV_FOREACH(i, subdirs) {
+                r = mkdir_one(root, *i);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+
+static int copy_one_file(const char *esp_path, const char *name, bool force) {
+        char *root = IN_SET(arg_install_source, ARG_INSTALL_SOURCE_AUTO, ARG_INSTALL_SOURCE_IMAGE) ? arg_root : NULL;
+        _cleanup_free_ char *source_path = NULL, *dest_path = NULL, *p = NULL, *q = NULL;
+        const char *e;
+        char *dest_name, *s;
+        int r, ret;
+
+        dest_name = strdupa_safe(name);
+        s = endswith_no_case(dest_name, ".signed");
+        if (s)
+                *s = 0;
+
+        p = path_join(BOOTLIBDIR, name);
+        if (!p)
+                return log_oom();
+
+        r = chase_symlinks(p, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, &source_path, NULL);
+        /* If we had a root directory to try, we didn't find it and we are in auto mode, retry on the host */
+        if (r == -ENOENT && root && arg_install_source == ARG_INSTALL_SOURCE_AUTO)
+                r = chase_symlinks(p, NULL, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, &source_path, NULL);
+        if (r < 0)
+                return log_error_errno(r,
+                                       "Failed to resolve path %s%s%s: %m",
+                                       p,
+                                       root ? " under directory " : "",
+                                       strempty(root));
+
+        q = path_join("/EFI/systemd/", dest_name);
+        if (!q)
+                return log_oom();
+
+        r = chase_symlinks(q, esp_path, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS|CHASE_NONEXISTENT, &dest_path, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to resolve path %s under directory %s: %m", q, esp_path);
+
+        /* Note that if this fails we do the second copy anyway, but return this error code,
+         * so we stash it away in a separate variable. */
+        ret = copy_file_with_version_check(source_path, dest_path, force);
+
+        e = startswith(dest_name, "systemd-boot");
+        if (e) {
+                _cleanup_free_ char *default_dest_path = NULL;
+                char *v;
+
+                /* Create the EFI default boot loader name (specified for removable devices) */
+                v = strjoina("/EFI/BOOT/BOOT", e);
+                ascii_strupper(strrchr(v, '/') + 1);
+
+                r = chase_symlinks(v, esp_path, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS|CHASE_NONEXISTENT, &default_dest_path, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to resolve path %s under directory %s: %m", v, esp_path);
+
+                r = copy_file_with_version_check(source_path, default_dest_path, force);
+                if (r < 0 && ret == 0)
+                        ret = r;
+        }
+
+        return ret;
+}
+
+static int install_binaries(const char *esp_path, const char *arch, bool force) {
+        char *root = IN_SET(arg_install_source, ARG_INSTALL_SOURCE_AUTO, ARG_INSTALL_SOURCE_IMAGE) ? arg_root : NULL;
+        _cleanup_closedir_ DIR *d = NULL;
+        _cleanup_free_ char *path = NULL;
+        int r;
+
+        r = chase_symlinks_and_opendir(BOOTLIBDIR, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, &path, &d);
+        /* If we had a root directory to try, we didn't find it and we are in auto mode, retry on the host */
+        if (r == -ENOENT && root && arg_install_source == ARG_INSTALL_SOURCE_AUTO)
+                r = chase_symlinks_and_opendir(BOOTLIBDIR, NULL, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, &path, &d);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open boot loader directory %s%s: %m", strempty(root), BOOTLIBDIR);
+
+        const char *suffix = strjoina(arch, ".efi");
+        const char *suffix_signed = strjoina(arch, ".efi.signed");
+
+        FOREACH_DIRENT(de, d, return log_error_errno(errno, "Failed to read \"%s\": %m", path)) {
+                int k;
+
+                if (!endswith_no_case(de->d_name, suffix) && !endswith_no_case(de->d_name, suffix_signed))
+                        continue;
+
+                /* skip the .efi file, if there's a .signed version of it */
+                if (endswith_no_case(de->d_name, ".efi")) {
+                        _cleanup_free_ const char *s = strjoin(de->d_name, ".signed");
+                        if (!s)
+                                return log_oom();
+                        if (faccessat(dirfd(d), s, F_OK, 0) >= 0)
+                                continue;
+                }
+
+                k = copy_one_file(esp_path, de->d_name, force);
+                /* Don't propagate an error code if no update necessary, installed version already equal or
+                 * newer version, or other boot loader in place. */
+                if (arg_graceful && IN_SET(k, -ESTALE, -EREMOTE))
+                        continue;
+                if (k < 0 && r == 0)
+                        r = k;
+        }
+
+        return r;
+}
+
+static int install_loader_config(const char *esp_path) {
+        _cleanup_(unlink_and_freep) char *t = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        const char *p;
+        int r;
+
+        assert(arg_make_entry_directory >= 0);
+
+        p = prefix_roota(esp_path, "/loader/loader.conf");
+        if (access(p, F_OK) >= 0) /* Silently skip creation if the file already exists (early check) */
+                return 0;
+
+        r = fopen_tmpfile_linkable(p, O_WRONLY|O_CLOEXEC, &t, &f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open \"%s\" for writing: %m", p);
+
+        fprintf(f, "#timeout 3\n"
+                   "#console-mode keep\n");
+
+        if (arg_make_entry_directory) {
+                assert(arg_entry_token);
+                fprintf(f, "default %s-*\n", arg_entry_token);
+        }
+
+        r = flink_tmpfile(f, t, p);
+        if (r == -EEXIST)
+                return 0; /* Silently skip creation if the file exists now (recheck) */
+        if (r < 0)
+                return log_error_errno(r, "Failed to move \"%s\" into place: %m", p);
+
+        t = mfree(t);
+        return 1;
+}
+
+static int install_loader_specification(const char *root) {
+        _cleanup_(unlink_and_freep) char *t = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_free_ char *p = NULL;
+        int r;
+
+        p = path_join(root, "/loader/entries.srel");
+        if (!p)
+                return log_oom();
+
+        if (access(p, F_OK) >= 0) /* Silently skip creation if the file already exists (early check) */
+                return 0;
+
+        r = fopen_tmpfile_linkable(p, O_WRONLY|O_CLOEXEC, &t, &f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open \"%s\" for writing: %m", p);
+
+        fprintf(f, "type1\n");
+
+        r = flink_tmpfile(f, t, p);
+        if (r == -EEXIST)
+                return 0; /* Silently skip creation if the file exists now (recheck) */
+        if (r < 0)
+                return log_error_errno(r, "Failed to move \"%s\" into place: %m", p);
+
+        t = mfree(t);
+        return 1;
+}
+
+static int install_entry_directory(const char *root) {
+        assert(root);
+        assert(arg_make_entry_directory >= 0);
+
+        if (!arg_make_entry_directory)
+                return 0;
+
+        assert(arg_entry_token);
+        return mkdir_one(root, arg_entry_token);
+}
+
+static int install_entry_token(void) {
+        _cleanup_free_ char* p = NULL;
+        int r;
+
+        assert(arg_make_entry_directory >= 0);
+        assert(arg_entry_token);
+
+        /* Let's save the used entry token in /etc/kernel/entry-token if we used it to create the entry
+         * directory, or if anything else but the machine ID */
+
+        if (!arg_make_entry_directory && arg_entry_token_type == ARG_ENTRY_TOKEN_MACHINE_ID)
+                return 0;
+
+        p = path_join(arg_root, etc_kernel(), "entry-token");
+        if (!p)
+                return log_oom();
+
+        r = write_string_file(p, arg_entry_token, WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC|WRITE_STRING_FILE_MKDIR_0755);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write entry token '%s' to %s: %m", arg_entry_token, p);
+
+        return 0;
+}
+
+static bool same_entry(uint16_t id, sd_id128_t uuid, const char *path) {
+        _cleanup_free_ char *opath = NULL;
+        sd_id128_t ouuid;
+        int r;
+
+        r = efi_get_boot_option(id, NULL, &ouuid, &opath, NULL);
+        if (r < 0)
+                return false;
+        if (!sd_id128_equal(uuid, ouuid))
+                return false;
+
+        /* Some motherboards convert the path to uppercase under certain circumstances
+         * (e.g. after booting into the Boot Menu in the ASUS ROG STRIX B350-F GAMING),
+         * so use case-insensitive checking */
+        if (!strcaseeq_ptr(path, opath))
+                return false;
+
+        return true;
+}
+
+static int find_slot(sd_id128_t uuid, const char *path, uint16_t *id) {
+        _cleanup_free_ uint16_t *options = NULL;
+
+        int n = efi_get_boot_options(&options);
+        if (n < 0)
+                return n;
+
+        /* find already existing systemd-boot entry */
+        for (int i = 0; i < n; i++)
+                if (same_entry(options[i], uuid, path)) {
+                        *id = options[i];
+                        return 1;
+                }
+
+        /* find free slot in the sorted BootXXXX variable list */
+        for (int i = 0; i < n; i++)
+                if (i != options[i]) {
+                        *id = i;
+                        return 0;
+                }
+
+        /* use the next one */
+        if (n == 0xffff)
+                return -ENOSPC;
+        *id = n;
+        return 0;
+}
+
+static int insert_into_order(uint16_t slot, bool first) {
+        _cleanup_free_ uint16_t *order = NULL;
+        uint16_t *t;
+        int n;
+
+        n = efi_get_boot_order(&order);
+        if (n <= 0)
+                /* no entry, add us */
+                return efi_set_boot_order(&slot, 1);
+
+        /* are we the first and only one? */
+        if (n == 1 && order[0] == slot)
+                return 0;
+
+        /* are we already in the boot order? */
+        for (int i = 0; i < n; i++) {
+                if (order[i] != slot)
+                        continue;
+
+                /* we do not require to be the first one, all is fine */
+                if (!first)
+                        return 0;
+
+                /* move us to the first slot */
+                memmove(order + 1, order, i * sizeof(uint16_t));
+                order[0] = slot;
+                return efi_set_boot_order(order, n);
+        }
+
+        /* extend array */
+        t = reallocarray(order, n + 1, sizeof(uint16_t));
+        if (!t)
+                return -ENOMEM;
+        order = t;
+
+        /* add us to the top or end of the list */
+        if (first) {
+                memmove(order + 1, order, n * sizeof(uint16_t));
+                order[0] = slot;
+        } else
+                order[n] = slot;
+
+        return efi_set_boot_order(order, n + 1);
+}
+
+static int remove_from_order(uint16_t slot) {
+        _cleanup_free_ uint16_t *order = NULL;
+        int n;
+
+        n = efi_get_boot_order(&order);
+        if (n <= 0)
+                return n;
+
+        for (int i = 0; i < n; i++) {
+                if (order[i] != slot)
+                        continue;
+
+                if (i + 1 < n)
+                        memmove(order + i, order + i+1, (n - i) * sizeof(uint16_t));
+                return efi_set_boot_order(order, n - 1);
+        }
+
+        return 0;
+}
+
+static const char *pick_efi_boot_option_description(void) {
+        return arg_efi_boot_option_description ?: "Linux Boot Manager";
+}
+
+static int install_variables(
+                const char *esp_path,
+                uint32_t part,
+                uint64_t pstart,
+                uint64_t psize,
+                sd_id128_t uuid,
+                const char *path,
+                bool first,
+                bool graceful) {
+
+        uint16_t slot;
+        int r;
+
+        if (arg_root) {
+                log_info("Acting on %s, skipping EFI variable setup.",
+                         arg_image ? "image" : "root directory");
+                return 0;
+        }
+
+        if (!is_efi_boot()) {
+                log_warning("Not booted with EFI, skipping EFI variable setup.");
+                return 0;
+        }
+
+        r = chase_symlinks_and_access(path, esp_path, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, F_OK, NULL, NULL);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Cannot access \"%s/%s\": %m", esp_path, path);
+
+        r = find_slot(uuid, path, &slot);
+        if (r < 0) {
+                int level = graceful ? arg_quiet ? LOG_DEBUG : LOG_INFO : LOG_ERR;
+                const char *skip = graceful ? ", skipping" : "";
+
+                log_full_errno(level, r,
+                               r == -ENOENT ?
+                               "Failed to access EFI variables%s. Is the \"efivarfs\" filesystem mounted?" :
+                               "Failed to determine current boot order%s: %m", skip);
+
+                return graceful ? 0 : r;
+        }
+
+        if (first || r == 0) {
+                r = efi_add_boot_option(slot, pick_efi_boot_option_description(),
+                                        part, pstart, psize,
+                                        uuid, path);
+                if (r < 0) {
+                        int level = graceful ? arg_quiet ? LOG_DEBUG : LOG_INFO : LOG_ERR;
+                        const char *skip = graceful ? ", skipping" : "";
+
+                        log_full_errno(level, r, "Failed to create EFI Boot variable entry%s: %m", skip);
+
+                        return graceful ? 0 : r;
+                }
+
+                log_info("Created EFI boot entry \"%s\".", pick_efi_boot_option_description());
+        }
+
+        return insert_into_order(slot, first);
+}
+
+static int are_we_installed(const char *esp_path) {
+        int r;
+
+        /* Tests whether systemd-boot is installed. It's not obvious what to use as check here: we could
+         * check EFI variables, we could check what binary /EFI/BOOT/BOOT*.EFI points to, or whether the
+         * loader entries directory exists. Here we opted to check whether /EFI/systemd/ is non-empty, which
+         * should be a suitable and very minimal check for a number of reasons:
+         *
+         *  → The check is architecture independent (i.e. we check if any systemd-boot loader is installed,
+         *    not a specific one.)
+         *
+         *  → It doesn't assume we are the only boot loader (i.e doesn't check if we own the main
+         *    /EFI/BOOT/BOOT*.EFI fallback binary.
+         *
+         *  → It specifically checks for systemd-boot, not for other boot loaders (which a check for
+         *    /boot/loader/entries would do). */
+
+        _cleanup_free_ char *p = path_join(esp_path, "/EFI/systemd/");
+        if (!p)
+                return log_oom();
+
+        log_debug("Checking whether %s contains any files%s", p, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+        r = dir_is_empty(p, /* ignore_hidden_or_backup= */ false);
+        if (r < 0 && r != -ENOENT)
+                return log_error_errno(r, "Failed to check whether %s contains any files: %m", p);
+
+        return r == 0;
+}
+
+int verb_install(int argc, char *argv[], void *userdata) {
+        sd_id128_t uuid = SD_ID128_NULL;
+        uint64_t pstart = 0, psize = 0;
+        uint32_t part = 0;
+        bool install, graceful;
+        int r;
+
+        /* Invoked for both "update" and "install" */
+
+        install = streq(argv[0], "install");
+        graceful = !install && arg_graceful; /* support graceful mode for updates */
+
+        r = acquire_esp(/* unprivileged_mode= */ false, graceful, &part, &pstart, &psize, &uuid, NULL);
+        if (graceful && r == -ENOKEY)
+                return 0; /* If --graceful is specified and we can't find an ESP, handle this cleanly */
+        if (r < 0)
+                return r;
+
+        if (!install) {
+                /* If we are updating, don't do anything if sd-boot wasn't actually installed. */
+                r = are_we_installed(arg_esp_path);
+                if (r < 0)
+                        return r;
+                if (r == 0) {
+                        log_debug("Skipping update because sd-boot is not installed in the ESP.");
+                        return 0;
+                }
+        }
+
+        r = acquire_xbootldr(/* unprivileged_mode= */ false, NULL, NULL);
+        if (r < 0)
+                return r;
+
+        r = settle_make_entry_directory();
+        if (r < 0)
+                return r;
+
+        const char *arch = arg_arch_all ? "" : get_efi_arch();
+
+        WITH_UMASK(0002) {
+                if (install) {
+                        /* Don't create any of these directories when we are just updating. When we update
+                         * we'll drop-in our files (unless there are newer ones already), but we won't create
+                         * the directories for them in the first place. */
+                        r = create_subdirs(arg_esp_path, esp_subdirs);
+                        if (r < 0)
+                                return r;
+
+                        r = create_subdirs(arg_dollar_boot_path(), dollar_boot_subdirs);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = install_binaries(arg_esp_path, arch, install);
+                if (r < 0)
+                        return r;
+
+                if (install) {
+                        r = install_loader_config(arg_esp_path);
+                        if (r < 0)
+                                return r;
+
+                        r = install_entry_directory(arg_dollar_boot_path());
+                        if (r < 0)
+                                return r;
+
+                        r = install_entry_token();
+                        if (r < 0)
+                                return r;
+
+                        r = install_random_seed(arg_esp_path);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = install_loader_specification(arg_dollar_boot_path());
+                if (r < 0)
+                        return r;
+        }
+
+        (void) sync_everything();
+
+        if (!arg_touch_variables)
+                return 0;
+
+        if (arg_arch_all) {
+                log_info("Not changing EFI variables with --all-architectures.");
+                return 0;
+        }
+
+        char *path = strjoina("/EFI/systemd/systemd-boot", arch, ".efi");
+        return install_variables(arg_esp_path, part, pstart, psize, uuid, path, install, graceful);
+}
+
+static int remove_boot_efi(const char *esp_path) {
+        _cleanup_closedir_ DIR *d = NULL;
+        _cleanup_free_ char *p = NULL;
+        int r, c = 0;
+
+        r = chase_symlinks_and_opendir("/EFI/BOOT", esp_path, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, &p, &d);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to open directory \"%s/EFI/BOOT\": %m", esp_path);
+
+        FOREACH_DIRENT(de, d, break) {
+                _cleanup_close_ int fd = -EBADF;
+                _cleanup_free_ char *v = NULL;
+
+                if (!endswith_no_case(de->d_name, ".efi"))
+                        continue;
+
+                if (!startswith_no_case(de->d_name, "boot"))
+                        continue;
+
+                fd = openat(dirfd(d), de->d_name, O_RDONLY|O_CLOEXEC);
+                if (fd < 0)
+                        return log_error_errno(errno, "Failed to open \"%s/%s\" for reading: %m", p, de->d_name);
+
+                r = get_file_version(fd, &v);
+                if (r < 0)
+                        return r;
+                if (r > 0 && startswith(v, "systemd-boot ")) {
+                        r = unlinkat(dirfd(d), de->d_name, 0);
+                        if (r < 0)
+                                return log_error_errno(errno, "Failed to remove \"%s/%s\": %m", p, de->d_name);
+
+                        log_info("Removed \"%s/%s\".", p, de->d_name);
+                }
+
+                c++;
+        }
+
+        return c;
+}
+
+static int rmdir_one(const char *prefix, const char *suffix) {
+        const char *p;
+
+        p = prefix_roota(prefix, suffix);
+        if (rmdir(p) < 0) {
+                bool ignore = IN_SET(errno, ENOENT, ENOTEMPTY);
+
+                log_full_errno(ignore ? LOG_DEBUG : LOG_ERR, errno,
+                               "Failed to remove directory \"%s\": %m", p);
+                if (!ignore)
+                        return -errno;
+        } else
+                log_info("Removed \"%s\".", p);
+
+        return 0;
+}
+
+static int remove_subdirs(const char *root, const char *const *subdirs) {
+        int r, q;
+
+        /* We use recursion here to destroy the directories in reverse order. Which should be safe given how
+         * short the array is. */
+
+        if (!subdirs[0]) /* A the end of the list */
+                return 0;
+
+        r = remove_subdirs(root, subdirs + 1);
+        q = rmdir_one(root, subdirs[0]);
+
+        return r < 0 ? r : q;
+}
+
+static int remove_entry_directory(const char *root) {
+        assert(root);
+        assert(arg_make_entry_directory >= 0);
+
+        if (!arg_make_entry_directory || !arg_entry_token)
+                return 0;
+
+        return rmdir_one(root, arg_entry_token);
+}
+
+static int remove_binaries(const char *esp_path) {
+        const char *p;
+        int r, q;
+
+        p = prefix_roota(esp_path, "/EFI/systemd");
+        r = rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL);
+
+        q = remove_boot_efi(esp_path);
+        if (q < 0 && r == 0)
+                r = q;
+
+        return r;
+}
+
+static int remove_file(const char *root, const char *file) {
+        const char *p;
+
+        assert(root);
+        assert(file);
+
+        p = prefix_roota(root, file);
+        if (unlink(p) < 0) {
+                log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, errno,
+                               "Failed to unlink file \"%s\": %m", p);
+
+                return errno == ENOENT ? 0 : -errno;
+        }
+
+        log_info("Removed \"%s\".", p);
+        return 1;
+}
+
+static int remove_variables(sd_id128_t uuid, const char *path, bool in_order) {
+        uint16_t slot;
+        int r;
+
+        if (arg_root || !is_efi_boot())
+                return 0;
+
+        r = find_slot(uuid, path, &slot);
+        if (r != 1)
+                return 0;
+
+        r = efi_remove_boot_option(slot);
+        if (r < 0)
+                return r;
+
+        if (in_order)
+                return remove_from_order(slot);
+
+        return 0;
+}
+
+static int remove_loader_variables(void) {
+        int r = 0;
+
+        /* Remove all persistent loader variables we define */
+
+        FOREACH_STRING(var,
+                       EFI_LOADER_VARIABLE(LoaderConfigTimeout),
+                       EFI_LOADER_VARIABLE(LoaderConfigTimeoutOneShot),
+                       EFI_LOADER_VARIABLE(LoaderEntryDefault),
+                       EFI_LOADER_VARIABLE(LoaderEntryOneShot),
+                       EFI_LOADER_VARIABLE(LoaderSystemToken)){
+
+                int q;
+
+                q = efi_set_variable(var, NULL, 0);
+                if (q == -ENOENT)
+                        continue;
+                if (q < 0) {
+                        log_warning_errno(q, "Failed to remove EFI variable %s: %m", var);
+                        if (r >= 0)
+                                r = q;
+                } else
+                        log_info("Removed EFI variable %s.", var);
+        }
+
+        return r;
+}
+
+int verb_remove(int argc, char *argv[], void *userdata) {
+        sd_id128_t uuid = SD_ID128_NULL;
+        int r, q;
+
+        r = acquire_esp(/* unprivileged_mode= */ false, /* graceful= */ false, NULL, NULL, NULL, &uuid, NULL);
+        if (r < 0)
+                return r;
+
+        r = acquire_xbootldr(/* unprivileged_mode= */ false, NULL, NULL);
+        if (r < 0)
+                return r;
+
+        r = settle_make_entry_directory();
+        if (r < 0)
+                return r;
+
+        r = remove_binaries(arg_esp_path);
+
+        q = remove_file(arg_esp_path, "/loader/loader.conf");
+        if (q < 0 && r >= 0)
+                r = q;
+
+        q = remove_file(arg_esp_path, "/loader/random-seed");
+        if (q < 0 && r >= 0)
+                r = q;
+
+        q = remove_file(arg_esp_path, "/loader/entries.srel");
+        if (q < 0 && r >= 0)
+                r = q;
+
+        q = remove_subdirs(arg_esp_path, esp_subdirs);
+        if (q < 0 && r >= 0)
+                r = q;
+
+        q = remove_subdirs(arg_esp_path, dollar_boot_subdirs);
+        if (q < 0 && r >= 0)
+                r = q;
+
+        q = remove_entry_directory(arg_esp_path);
+        if (q < 0 && r >= 0)
+                r = q;
+
+        if (arg_xbootldr_path) {
+                /* Remove a subset of these also from the XBOOTLDR partition if it exists */
+
+                q = remove_file(arg_xbootldr_path, "/loader/entries.srel");
+                if (q < 0 && r >= 0)
+                        r = q;
+
+                q = remove_subdirs(arg_xbootldr_path, dollar_boot_subdirs);
+                if (q < 0 && r >= 0)
+                        r = q;
+
+                q = remove_entry_directory(arg_xbootldr_path);
+                if (q < 0 && r >= 0)
+                        r = q;
+        }
+
+        (void) sync_everything();
+
+        if (!arg_touch_variables)
+                return r;
+
+        if (arg_arch_all) {
+                log_info("Not changing EFI variables with --all-architectures.");
+                return r;
+        }
+
+        char *path = strjoina("/EFI/systemd/systemd-boot", get_efi_arch(), ".efi");
+        q = remove_variables(uuid, path, true);
+        if (q < 0 && r >= 0)
+                r = q;
+
+        q = remove_loader_variables();
+        if (q < 0 && r >= 0)
+                r = q;
+
+        return r;
+}
+
+int verb_is_installed(int argc, char *argv[], void *userdata) {
+        int r;
+
+        r = acquire_esp(/* privileged_mode= */ false,
+                        /* graceful= */ arg_graceful,
+                        NULL, NULL, NULL, NULL, NULL);
+        if (r < 0)
+                return r;
+
+        r = are_we_installed(arg_esp_path);
+        if (r < 0)
+                return r;
+
+        if (r > 0) {
+                if (!arg_quiet)
+                        puts("yes");
+                return EXIT_SUCCESS;
+        } else {
+                if (!arg_quiet)
+                        puts("no");
+                return EXIT_FAILURE;
+        }
+}
diff --git a/src/boot/bootctl-install.h b/src/boot/bootctl-install.h
new file mode 100644
index 0000000..cd4b725
--- /dev/null
+++ b/src/boot/bootctl-install.h
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_install(int argc, char *argv[], void *userdata);
+int verb_remove(int argc, char *argv[], void *userdata);
+int verb_is_installed(int argc, char *argv[], void *userdata);
diff --git a/src/boot/bootctl-random-seed.c b/src/boot/bootctl-random-seed.c
new file mode 100644
index 0000000..deda4de
--- /dev/null
+++ b/src/boot/bootctl-random-seed.c
@@ -0,0 +1,198 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "bootctl.h"
+#include "bootctl-random-seed.h"
+#include "bootctl-util.h"
+#include "efi-api.h"
+#include "env-util.h"
+#include "fd-util.h"
+#include "find-esp.h"
+#include "fs-util.h"
+#include "io-util.h"
+#include "mkdir.h"
+#include "path-util.h"
+#include "random-util.h"
+#include "sha256.h"
+#include "tmpfile-util.h"
+#include "umask-util.h"
+
+static int set_system_token(void) {
+        uint8_t buffer[RANDOM_EFI_SEED_SIZE];
+        size_t token_size;
+        int r;
+
+        if (!arg_touch_variables)
+                return 0;
+
+        if (arg_root) {
+                log_warning("Acting on %s, skipping EFI variable setup.",
+                             arg_image ? "image" : "root directory");
+                return 0;
+        }
+
+        if (!is_efi_boot()) {
+                log_notice("Not booted with EFI, skipping EFI variable setup.");
+                return 0;
+        }
+
+        r = getenv_bool("SYSTEMD_WRITE_SYSTEM_TOKEN");
+        if (r < 0) {
+                if (r != -ENXIO)
+                        log_warning_errno(r, "Failed to parse $SYSTEMD_WRITE_SYSTEM_TOKEN, ignoring.");
+        } else if (r == 0) {
+                log_notice("Not writing system token, because $SYSTEMD_WRITE_SYSTEM_TOKEN is set to false.");
+                return 0;
+        }
+
+        r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderSystemToken), NULL, NULL, &token_size);
+        if (r == -ENODATA)
+                log_debug_errno(r, "LoaderSystemToken EFI variable is invalid (too short?), replacing.");
+        else if (r < 0) {
+                if (r != -ENOENT)
+                        return log_error_errno(r, "Failed to test system token validity: %m");
+        } else {
+                if (token_size >= sizeof(buffer)) {
+                        /* Let's avoid writes if we can, and initialize this only once. */
+                        log_debug("System token already written, not updating.");
+                        return 0;
+                }
+
+                log_debug("Existing system token size (%zu) does not match our expectations (%zu), replacing.", token_size, sizeof(buffer));
+        }
+
+        r = crypto_random_bytes(buffer, sizeof(buffer));
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire random seed: %m");
+
+        /* Let's write this variable with an umask in effect, so that unprivileged users can't see the token
+         * and possibly get identification information or too much insight into the kernel's entropy pool
+         * state. */
+        WITH_UMASK(0077) {
+                r = efi_set_variable(EFI_LOADER_VARIABLE(LoaderSystemToken), buffer, sizeof(buffer));
+                if (r < 0) {
+                        if (!arg_graceful)
+                                return log_error_errno(r, "Failed to write 'LoaderSystemToken' EFI variable: %m");
+
+                        if (r == -EINVAL)
+                                log_notice_errno(r, "Unable to write 'LoaderSystemToken' EFI variable (firmware problem?), ignoring: %m");
+                        else
+                                log_notice_errno(r, "Unable to write 'LoaderSystemToken' EFI variable, ignoring: %m");
+                } else
+                        log_info("Successfully initialized system token in EFI variable with %zu bytes.", sizeof(buffer));
+        }
+
+        return 0;
+}
+
+int install_random_seed(const char *esp) {
+        _cleanup_close_ int esp_fd = -EBADF, loader_dir_fd = -EBADF, fd = -EBADF;
+        _cleanup_free_ char *tmp = NULL;
+        uint8_t buffer[RANDOM_EFI_SEED_SIZE];
+        struct sha256_ctx hash_state;
+        bool refreshed;
+        int r;
+
+        assert(esp);
+
+        assert_cc(RANDOM_EFI_SEED_SIZE == SHA256_DIGEST_SIZE);
+
+        esp_fd = open(esp, O_DIRECTORY|O_RDONLY|O_CLOEXEC);
+        if (esp_fd < 0)
+                return log_error_errno(errno, "Failed to open ESP directory '%s': %m", esp);
+
+        loader_dir_fd = open_mkdir_at(esp_fd, "loader", O_DIRECTORY|O_RDONLY|O_CLOEXEC|O_NOFOLLOW, 0775);
+        if (loader_dir_fd < 0)
+                return log_error_errno(loader_dir_fd, "Failed to open loader directory '%s/loader': %m", esp);
+
+        r = crypto_random_bytes(buffer, sizeof(buffer));
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire random seed: %m");
+
+        sha256_init_ctx(&hash_state);
+        sha256_process_bytes_and_size(buffer, sizeof(buffer), &hash_state);
+
+        fd = openat(loader_dir_fd, "random-seed", O_NOFOLLOW|O_CLOEXEC|O_RDONLY|O_NOCTTY);
+        if (fd < 0) {
+                if (errno != ENOENT)
+                        return log_error_errno(errno, "Failed to open old random seed file: %m");
+
+                sha256_process_bytes(&(const ssize_t) { 0 }, sizeof(ssize_t), &hash_state);
+                refreshed = false;
+        } else {
+                ssize_t n;
+
+                /* Hash the old seed in so that we never regress in entropy. */
+
+                n = read(fd, buffer, sizeof(buffer));
+                if (n < 0)
+                        return log_error_errno(errno, "Failed to read old random seed file: %m");
+
+                sha256_process_bytes_and_size(buffer, n, &hash_state);
+
+                fd = safe_close(fd);
+                refreshed = n > 0;
+        }
+
+        sha256_finish_ctx(&hash_state, buffer);
+
+        if (tempfn_random("random-seed", "bootctl", &tmp) < 0)
+                return log_oom();
+
+        fd = openat(loader_dir_fd, tmp, O_CREAT|O_EXCL|O_NOFOLLOW|O_NOCTTY|O_WRONLY|O_CLOEXEC, 0600);
+        if (fd < 0)
+                return log_error_errno(fd, "Failed to open random seed file for writing: %m");
+
+        r = loop_write(fd, buffer, sizeof(buffer), /* do_poll= */ false);
+        if (r < 0) {
+                log_error_errno(r, "Failed to write random seed file: %m");
+                goto fail;
+        }
+
+        if (fsync(fd) < 0 || fsync(loader_dir_fd) < 0) {
+                r = log_error_errno(errno, "Failed to sync random seed file: %m");
+                goto fail;
+        }
+
+        if (renameat(loader_dir_fd, tmp, loader_dir_fd, "random-seed") < 0) {
+                r = log_error_errno(errno, "Failed to move random seed file into place: %m");
+                goto fail;
+        }
+
+        tmp = mfree(tmp);
+
+        if (syncfs(fd) < 0)
+                return log_error_errno(errno, "Failed to sync ESP file system: %m");
+
+        log_info("Random seed file %s/loader/random-seed successfully %s (%zu bytes).", esp, refreshed ? "refreshed" : "written", sizeof(buffer));
+
+        return set_system_token();
+
+fail:
+        assert(tmp);
+        (void) unlinkat(loader_dir_fd, tmp, 0);
+
+        return r;
+}
+
+int verb_random_seed(int argc, char *argv[], void *userdata) {
+        int r;
+
+        r = find_esp_and_warn(arg_root, arg_esp_path, false, &arg_esp_path, NULL, NULL, NULL, NULL, NULL);
+        if (r == -ENOKEY) {
+                /* find_esp_and_warn() doesn't warn about ENOKEY, so let's do that on our own */
+                if (!arg_graceful)
+                        return log_error_errno(r, "Unable to find ESP.");
+
+                log_notice("No ESP found, not initializing random seed.");
+                return 0;
+        }
+        if (r < 0)
+                return r;
+
+        r = install_random_seed(arg_esp_path);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
diff --git a/src/boot/bootctl-random-seed.h b/src/boot/bootctl-random-seed.h
new file mode 100644
index 0000000..91596d3
--- /dev/null
+++ b/src/boot/bootctl-random-seed.h
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int install_random_seed(const char *esp);
+
+int verb_random_seed(int argc, char *argv[], void *userdata);
diff --git a/src/boot/bootctl-reboot-to-firmware.c b/src/boot/bootctl-reboot-to-firmware.c
new file mode 100644
index 0000000..77e3ff1
--- /dev/null
+++ b/src/boot/bootctl-reboot-to-firmware.c
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "bootctl-reboot-to-firmware.h"
+#include "efi-api.h"
+#include "parse-util.h"
+
+int verb_reboot_to_firmware(int argc, char *argv[], void *userdata) {
+        int r;
+
+        if (argc < 2) {
+                r = efi_get_reboot_to_firmware();
+                if (r > 0) {
+                        puts("active");
+                        return EXIT_SUCCESS; /* success */
+                }
+                if (r == 0) {
+                        puts("supported");
+                        return 1; /* recognizable error #1 */
+                }
+                if (r == -EOPNOTSUPP) {
+                        puts("not supported");
+                        return 2; /* recognizable error #2 */
+                }
+
+                log_error_errno(r, "Failed to query reboot-to-firmware state: %m");
+                return 3; /* other kind of error */
+        } else {
+                r = parse_boolean(argv[1]);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse argument: %s", argv[1]);
+
+                r = efi_set_reboot_to_firmware(r);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set reboot-to-firmware option: %m");
+
+                return 0;
+        }
+}
diff --git a/src/boot/bootctl-reboot-to-firmware.h b/src/boot/bootctl-reboot-to-firmware.h
new file mode 100644
index 0000000..0ca4b2c
--- /dev/null
+++ b/src/boot/bootctl-reboot-to-firmware.h
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+int verb_reboot_to_firmware(int argc, char *argv[], void *userdata);
diff --git a/src/boot/bootctl-set-efivar.c b/src/boot/bootctl-set-efivar.c
new file mode 100644
index 0000000..cbf92ca
--- /dev/null
+++ b/src/boot/bootctl-set-efivar.c
@@ -0,0 +1,149 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <uchar.h>
+#include <unistd.h>
+
+#include "bootctl.h"
+#include "bootctl-set-efivar.h"
+#include "efivars.h"
+#include "stdio-util.h"
+#include "utf8.h"
+#include "virt.h"
+
+static int parse_timeout(const char *arg1, char16_t **ret_timeout, size_t *ret_timeout_size) {
+        char utf8[DECIMAL_STR_MAX(usec_t)];
+        char16_t *encoded;
+        usec_t timeout;
+        int r;
+
+        assert(arg1);
+        assert(ret_timeout);
+        assert(ret_timeout_size);
+
+        if (streq(arg1, "menu-force"))
+                timeout = USEC_INFINITY;
+        else if (streq(arg1, "menu-hidden"))
+                timeout = 0;
+        else {
+                r = parse_time(arg1, &timeout, USEC_PER_SEC);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse timeout '%s': %m", arg1);
+                if (timeout != USEC_INFINITY && timeout > UINT32_MAX * USEC_PER_SEC)
+                        log_warning("Timeout is too long and will be treated as 'menu-force' instead.");
+        }
+
+        xsprintf(utf8, USEC_FMT, MIN(timeout / USEC_PER_SEC, UINT32_MAX));
+
+        encoded = utf8_to_utf16(utf8, strlen(utf8));
+        if (!encoded)
+                return log_oom();
+
+        *ret_timeout = encoded;
+        *ret_timeout_size = char16_strlen(encoded) * 2 + 2;
+        return 0;
+}
+
+static int parse_loader_entry_target_arg(const char *arg1, char16_t **ret_target, size_t *ret_target_size) {
+        char16_t *encoded = NULL;
+        int r;
+
+        assert(arg1);
+        assert(ret_target);
+        assert(ret_target_size);
+
+        if (streq(arg1, "@current")) {
+                r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderEntrySelected), NULL, (void *) ret_target, ret_target_size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get EFI variable 'LoaderEntrySelected': %m");
+
+        } else if (streq(arg1, "@oneshot")) {
+                r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderEntryOneShot), NULL, (void *) ret_target, ret_target_size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get EFI variable 'LoaderEntryOneShot': %m");
+
+        } else if (streq(arg1, "@default")) {
+                r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderEntryDefault), NULL, (void *) ret_target, ret_target_size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get EFI variable 'LoaderEntryDefault': %m");
+
+        } else if (arg1[0] == '@' && !streq(arg1, "@saved"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unsupported special entry identifier: %s", arg1);
+        else {
+                encoded = utf8_to_utf16(arg1, strlen(arg1));
+                if (!encoded)
+                        return log_oom();
+
+                *ret_target = encoded;
+                *ret_target_size = char16_strlen(encoded) * 2 + 2;
+        }
+
+        return 0;
+}
+
+int verb_set_efivar(int argc, char *argv[], void *userdata) {
+        int r;
+
+        if (arg_root)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                       "Acting on %s, skipping EFI variable setup.",
+                                       arg_image ? "image" : "root directory");
+
+        if (!is_efi_boot())
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                       "Not booted with UEFI.");
+
+        if (access(EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderInfo)), F_OK) < 0) {
+                if (errno == ENOENT) {
+                        log_error_errno(errno, "Not booted with a supported boot loader.");
+                        return -EOPNOTSUPP;
+                }
+
+                return log_error_errno(errno, "Failed to detect whether boot loader supports '%s' operation: %m", argv[0]);
+        }
+
+        if (detect_container() > 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                       "'%s' operation not supported in a container.",
+                                       argv[0]);
+
+        if (!arg_touch_variables)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "'%s' operation cannot be combined with --no-variables.",
+                                       argv[0]);
+
+        const char *variable;
+        int (* arg_parser)(const char *, char16_t **, size_t *);
+
+        if (streq(argv[0], "set-default")) {
+                variable = EFI_LOADER_VARIABLE(LoaderEntryDefault);
+                arg_parser = parse_loader_entry_target_arg;
+        } else if (streq(argv[0], "set-oneshot")) {
+                variable = EFI_LOADER_VARIABLE(LoaderEntryOneShot);
+                arg_parser = parse_loader_entry_target_arg;
+        } else if (streq(argv[0], "set-timeout")) {
+                variable = EFI_LOADER_VARIABLE(LoaderConfigTimeout);
+                arg_parser = parse_timeout;
+        } else if (streq(argv[0], "set-timeout-oneshot")) {
+                variable = EFI_LOADER_VARIABLE(LoaderConfigTimeoutOneShot);
+                arg_parser = parse_timeout;
+        } else
+                assert_not_reached();
+
+        if (isempty(argv[1])) {
+                r = efi_set_variable(variable, NULL, 0);
+                if (r < 0 && r != -ENOENT)
+                        return log_error_errno(r, "Failed to remove EFI variable '%s': %m", variable);
+        } else {
+                _cleanup_free_ char16_t *value = NULL;
+                size_t value_size = 0;
+
+                r = arg_parser(argv[1], &value, &value_size);
+                if (r < 0)
+                        return r;
+                r = efi_set_variable(variable, value, value_size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to update EFI variable '%s': %m", variable);
+        }
+
+        return 0;
+}
diff --git a/src/boot/bootctl-set-efivar.h b/src/boot/bootctl-set-efivar.h
new file mode 100644
index 0000000..6441681
--- /dev/null
+++ b/src/boot/bootctl-set-efivar.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_set_efivar(int argc, char *argv[], void *userdata);
diff --git a/src/boot/bootctl-status.c b/src/boot/bootctl-status.c
new file mode 100644
index 0000000..8586e64
--- /dev/null
+++ b/src/boot/bootctl-status.c
@@ -0,0 +1,806 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/mman.h>
+#include <unistd.h>
+
+#include "bootctl.h"
+#include "bootctl-status.h"
+#include "bootctl-util.h"
+#include "bootspec.h"
+#include "chase-symlinks.h"
+#include "devnum-util.h"
+#include "dirent-util.h"
+#include "efi-api.h"
+#include "efi-loader.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "find-esp.h"
+#include "path-util.h"
+#include "pretty-print.h"
+#include "recurse-dir.h"
+#include "terminal-util.h"
+#include "tpm2-util.h"
+
+static int boot_config_load_and_select(
+                BootConfig *config,
+                const char *esp_path,
+                dev_t esp_devid,
+                const char *xbootldr_path,
+                dev_t xbootldr_devid) {
+
+        int r;
+
+        /* If XBOOTLDR and ESP actually refer to the same block device, suppress XBOOTLDR, since it would
+         * find the same entries twice. */
+        bool same = esp_path && xbootldr_path && devnum_set_and_equal(esp_devid, xbootldr_devid);
+
+        r = boot_config_load(config, esp_path, same ? NULL : xbootldr_path);
+        if (r < 0)
+                return r;
+
+        if (!arg_root) {
+                _cleanup_strv_free_ char **efi_entries = NULL;
+
+                r = efi_loader_get_entries(&efi_entries);
+                if (r == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
+                        log_debug_errno(r, "Boot loader reported no entries.");
+                else if (r < 0)
+                        log_warning_errno(r, "Failed to determine entries reported by boot loader, ignoring: %m");
+                else
+                        (void) boot_config_augment_from_loader(config, efi_entries, /* only_auto= */ false);
+        }
+
+        return boot_config_select_special_entries(config, /* skip_efivars= */ !!arg_root);
+}
+
+static int status_entries(
+                const BootConfig *config,
+                const char *esp_path,
+                sd_id128_t esp_partition_uuid,
+                const char *xbootldr_path,
+                sd_id128_t xbootldr_partition_uuid) {
+
+        sd_id128_t dollar_boot_partition_uuid;
+        const char *dollar_boot_path;
+        int r;
+
+        assert(config);
+        assert(esp_path || xbootldr_path);
+
+        if (xbootldr_path) {
+                dollar_boot_path = xbootldr_path;
+                dollar_boot_partition_uuid = xbootldr_partition_uuid;
+        } else {
+                dollar_boot_path = esp_path;
+                dollar_boot_partition_uuid = esp_partition_uuid;
+        }
+
+        printf("%sBoot Loader Entries:%s\n"
+               "        $BOOT: %s", ansi_underline(), ansi_normal(), dollar_boot_path);
+        if (!sd_id128_is_null(dollar_boot_partition_uuid))
+                printf(" (/dev/disk/by-partuuid/" SD_ID128_UUID_FORMAT_STR ")",
+                       SD_ID128_FORMAT_VAL(dollar_boot_partition_uuid));
+        if (settle_entry_token() >= 0)
+                printf("\n        token: %s", arg_entry_token);
+        printf("\n\n");
+
+        if (config->default_entry < 0)
+                printf("%zu entries, no entry could be determined as default.\n", config->n_entries);
+        else {
+                printf("%sDefault Boot Loader Entry:%s\n", ansi_underline(), ansi_normal());
+
+                r = show_boot_entry(
+                                boot_config_default_entry(config),
+                                /* show_as_default= */ false,
+                                /* show_as_selected= */ false,
+                                /* show_discovered= */ false);
+                if (r > 0)
+                        /* < 0 is already logged by the function itself, let's just emit an extra warning if
+                           the default entry is broken */
+                        printf("\nWARNING: default boot entry is broken\n");
+        }
+
+        return 0;
+}
+
+static int print_efi_option(uint16_t id, int *n_printed, bool in_order) {
+        _cleanup_free_ char *title = NULL;
+        _cleanup_free_ char *path = NULL;
+        sd_id128_t partition;
+        bool active;
+        int r;
+
+        assert(n_printed);
+
+        r = efi_get_boot_option(id, &title, &partition, &path, &active);
+        if (r == -ENOENT) {
+                log_debug_errno(r, "Boot option 0x%04X referenced but missing, ignoring: %m", id);
+                return 0;
+        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to read boot option 0x%04X: %m", id);
+
+        /* print only configured entries with partition information */
+        if (!path || sd_id128_is_null(partition)) {
+                log_debug("Ignoring boot entry 0x%04X without partition information.", id);
+                return 0;
+        }
+
+        efi_tilt_backslashes(path);
+
+        if (*n_printed == 0) /* Print section title before first entry */
+                printf("%sBoot Loaders Listed in EFI Variables:%s\n", ansi_underline(), ansi_normal());
+
+        printf("        Title: %s%s%s\n", ansi_highlight(), strna(title), ansi_normal());
+        printf("           ID: 0x%04X\n", id);
+        printf("       Status: %sactive%s\n", active ? "" : "in", in_order ? ", boot-order" : "");
+        printf("    Partition: /dev/disk/by-partuuid/" SD_ID128_UUID_FORMAT_STR "\n",
+               SD_ID128_FORMAT_VAL(partition));
+        printf("         File: %s%s\n", special_glyph(SPECIAL_GLYPH_TREE_RIGHT), path);
+        printf("\n");
+
+        (*n_printed)++;
+        return 1;
+}
+
+static int status_variables(void) {
+        _cleanup_free_ uint16_t *options = NULL, *order = NULL;
+        int n_options, n_order, n_printed = 0;
+
+        n_options = efi_get_boot_options(&options);
+        if (n_options == -ENOENT)
+                return log_error_errno(n_options,
+                                       "Failed to access EFI variables, efivarfs"
+                                       " needs to be available at /sys/firmware/efi/efivars/.");
+        if (n_options < 0)
+                return log_error_errno(n_options, "Failed to read EFI boot entries: %m");
+
+        n_order = efi_get_boot_order(&order);
+        if (n_order == -ENOENT)
+                n_order = 0;
+        else if (n_order < 0)
+                return log_error_errno(n_order, "Failed to read EFI boot order: %m");
+
+        /* print entries in BootOrder first */
+        for (int i = 0; i < n_order; i++)
+                (void) print_efi_option(order[i], &n_printed, /* in_order= */ true);
+
+        /* print remaining entries */
+        for (int i = 0; i < n_options; i++) {
+                for (int j = 0; j < n_order; j++)
+                        if (options[i] == order[j])
+                                goto next_option;
+
+                (void) print_efi_option(options[i], &n_printed, /* in_order= */ false);
+
+        next_option:
+                continue;
+        }
+
+        if (n_printed == 0)
+                printf("No boot loaders listed in EFI Variables.\n\n");
+
+        return 0;
+}
+
+static int enumerate_binaries(
+                const char *esp_path,
+                const char *path,
+                const char *prefix,
+                char **previous,
+                bool *is_first) {
+
+        _cleanup_closedir_ DIR *d = NULL;
+        _cleanup_free_ char *p = NULL;
+        int c = 0, r;
+
+        assert(esp_path);
+        assert(path);
+        assert(previous);
+        assert(is_first);
+
+        r = chase_symlinks_and_opendir(path, esp_path, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, &p, &d);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to read \"%s/%s\": %m", esp_path, path);
+
+        FOREACH_DIRENT(de, d, break) {
+                _cleanup_free_ char *v = NULL;
+                _cleanup_close_ int fd = -EBADF;
+
+                if (!endswith_no_case(de->d_name, ".efi"))
+                        continue;
+
+                if (prefix && !startswith_no_case(de->d_name, prefix))
+                        continue;
+
+                fd = openat(dirfd(d), de->d_name, O_RDONLY|O_CLOEXEC);
+                if (fd < 0)
+                        return log_error_errno(errno, "Failed to open \"%s/%s\" for reading: %m", p, de->d_name);
+
+                r = get_file_version(fd, &v);
+                if (r < 0)
+                        return r;
+
+                if (*previous) { /* let's output the previous entry now, since now we know that there will be one more, and can draw the tree glyph properly */
+                        printf("         %s %s%s\n",
+                               *is_first ? "File:" : "     ",
+                               special_glyph(SPECIAL_GLYPH_TREE_BRANCH), *previous);
+                        *is_first = false;
+                        *previous = mfree(*previous);
+                }
+
+                /* Do not output this entry immediately, but store what should be printed in a state
+                 * variable, because we only will know the tree glyph to print (branch or final edge) once we
+                 * read one more entry */
+                if (r > 0)
+                        r = asprintf(previous, "/%s/%s (%s%s%s)", path, de->d_name, ansi_highlight(), v, ansi_normal());
+                else
+                        r = asprintf(previous, "/%s/%s", path, de->d_name);
+                if (r < 0)
+                        return log_oom();
+
+                c++;
+        }
+
+        return c;
+}
+
+static int status_binaries(const char *esp_path, sd_id128_t partition) {
+        _cleanup_free_ char *last = NULL;
+        bool is_first = true;
+        int r, k;
+
+        printf("%sAvailable Boot Loaders on ESP:%s\n", ansi_underline(), ansi_normal());
+
+        if (!esp_path) {
+                printf("          ESP: Cannot find or access mount point of ESP.\n\n");
+                return -ENOENT;
+        }
+
+        printf("          ESP: %s", esp_path);
+        if (!sd_id128_is_null(partition))
+                printf(" (/dev/disk/by-partuuid/" SD_ID128_UUID_FORMAT_STR ")", SD_ID128_FORMAT_VAL(partition));
+        printf("\n");
+
+        r = enumerate_binaries(esp_path, "EFI/systemd", NULL, &last, &is_first);
+        if (r < 0) {
+                printf("\n");
+                return r;
+        }
+
+        k = enumerate_binaries(esp_path, "EFI/BOOT", "boot", &last, &is_first);
+        if (k < 0) {
+                printf("\n");
+                return k;
+        }
+
+        if (last) /* let's output the last entry now, since now we know that there will be no more, and can draw the tree glyph properly */
+                printf("         %s %s%s\n",
+                       is_first ? "File:" : "     ",
+                       special_glyph(SPECIAL_GLYPH_TREE_RIGHT), last);
+
+        if (r == 0 && !arg_quiet)
+                log_info("systemd-boot not installed in ESP.");
+        if (k == 0 && !arg_quiet)
+                log_info("No default/fallback boot loader installed in ESP.");
+
+        printf("\n");
+        return 0;
+}
+
+static void read_efi_var(const char *variable, char **ret) {
+        int r;
+
+        r = efi_get_variable_string(variable, ret);
+        if (r < 0 && r != -ENOENT)
+                log_warning_errno(r, "Failed to read EFI variable %s: %m", variable);
+}
+
+static void print_yes_no_line(bool first, bool good, const char *name) {
+        printf("%s%s %s\n",
+               first ? "     Features: " : "               ",
+               COLOR_MARK_BOOL(good),
+               name);
+}
+
+int verb_status(int argc, char *argv[], void *userdata) {
+        sd_id128_t esp_uuid = SD_ID128_NULL, xbootldr_uuid = SD_ID128_NULL;
+        dev_t esp_devid = 0, xbootldr_devid = 0;
+        int r, k;
+
+        r = acquire_esp(/* unprivileged_mode= */ geteuid() != 0, /* graceful= */ false, NULL, NULL, NULL, &esp_uuid, &esp_devid);
+        if (arg_print_esp_path) {
+                if (r == -EACCES) /* If we couldn't acquire the ESP path, log about access errors (which is the only
+                                   * error the find_esp_and_warn() won't log on its own) */
+                        return log_error_errno(r, "Failed to determine ESP location: %m");
+                if (r < 0)
+                        return r;
+
+                puts(arg_esp_path);
+        }
+
+        r = acquire_xbootldr(/* unprivileged_mode= */ geteuid() != 0, &xbootldr_uuid, &xbootldr_devid);
+        if (arg_print_dollar_boot_path) {
+                if (r == -EACCES)
+                        return log_error_errno(r, "Failed to determine XBOOTLDR partition: %m");
+                if (r < 0)
+                        return r;
+
+                const char *path = arg_dollar_boot_path();
+                if (!path)
+                        return log_error_errno(SYNTHETIC_ERRNO(EACCES), "Failed to determine XBOOTLDR location: %m");
+
+                puts(path);
+        }
+
+        if (arg_print_esp_path || arg_print_dollar_boot_path)
+                return 0;
+
+        r = 0; /* If we couldn't determine the path, then don't consider that a problem from here on, just
+                * show what we can show */
+
+        pager_open(arg_pager_flags);
+
+        if (!arg_root && is_efi_boot()) {
+                static const struct {
+                        uint64_t flag;
+                        const char *name;
+                } loader_flags[] = {
+                        { EFI_LOADER_FEATURE_BOOT_COUNTING,           "Boot counting"                         },
+                        { EFI_LOADER_FEATURE_CONFIG_TIMEOUT,          "Menu timeout control"                  },
+                        { EFI_LOADER_FEATURE_CONFIG_TIMEOUT_ONE_SHOT, "One-shot menu timeout control"         },
+                        { EFI_LOADER_FEATURE_ENTRY_DEFAULT,           "Default entry control"                 },
+                        { EFI_LOADER_FEATURE_ENTRY_ONESHOT,           "One-shot entry control"                },
+                        { EFI_LOADER_FEATURE_XBOOTLDR,                "Support for XBOOTLDR partition"        },
+                        { EFI_LOADER_FEATURE_RANDOM_SEED,             "Support for passing random seed to OS" },
+                        { EFI_LOADER_FEATURE_LOAD_DRIVER,             "Load drop-in drivers"                  },
+                        { EFI_LOADER_FEATURE_SORT_KEY,                "Support Type #1 sort-key field"        },
+                        { EFI_LOADER_FEATURE_SAVED_ENTRY,             "Support @saved pseudo-entry"           },
+                        { EFI_LOADER_FEATURE_DEVICETREE,              "Support Type #1 devicetree field"      },
+                };
+                static const struct {
+                        uint64_t flag;
+                        const char *name;
+                } stub_flags[] = {
+                        { EFI_STUB_FEATURE_REPORT_BOOT_PARTITION,     "Stub sets ESP information"                            },
+                        { EFI_STUB_FEATURE_PICK_UP_CREDENTIALS,       "Picks up credentials from boot partition"             },
+                        { EFI_STUB_FEATURE_PICK_UP_SYSEXTS,           "Picks up system extension images from boot partition" },
+                        { EFI_STUB_FEATURE_THREE_PCRS,                "Measures kernel+command line+sysexts"                 },
+                        { EFI_STUB_FEATURE_RANDOM_SEED,               "Support for passing random seed to OS"                },
+                };
+                _cleanup_free_ char *fw_type = NULL, *fw_info = NULL, *loader = NULL, *loader_path = NULL, *stub = NULL;
+                sd_id128_t loader_part_uuid = SD_ID128_NULL;
+                uint64_t loader_features = 0, stub_features = 0;
+                Tpm2Support s;
+                int have;
+
+                read_efi_var(EFI_LOADER_VARIABLE(LoaderFirmwareType), &fw_type);
+                read_efi_var(EFI_LOADER_VARIABLE(LoaderFirmwareInfo), &fw_info);
+                read_efi_var(EFI_LOADER_VARIABLE(LoaderInfo), &loader);
+                read_efi_var(EFI_LOADER_VARIABLE(StubInfo), &stub);
+                read_efi_var(EFI_LOADER_VARIABLE(LoaderImageIdentifier), &loader_path);
+                (void) efi_loader_get_features(&loader_features);
+                (void) efi_stub_get_features(&stub_features);
+
+                if (loader_path)
+                        efi_tilt_backslashes(loader_path);
+
+                k = efi_loader_get_device_part_uuid(&loader_part_uuid);
+                if (k < 0 && k != -ENOENT)
+                        r = log_warning_errno(k, "Failed to read EFI variable LoaderDevicePartUUID: %m");
+
+                SecureBootMode secure = efi_get_secure_boot_mode();
+                printf("%sSystem:%s\n", ansi_underline(), ansi_normal());
+                printf("      Firmware: %s%s (%s)%s\n", ansi_highlight(), strna(fw_type), strna(fw_info), ansi_normal());
+                printf(" Firmware Arch: %s\n", get_efi_arch());
+                printf("   Secure Boot: %sd (%s)\n",
+                       enable_disable(IN_SET(secure, SECURE_BOOT_USER, SECURE_BOOT_DEPLOYED)),
+                       secure_boot_mode_to_string(secure));
+
+                s = tpm2_support();
+                printf("  TPM2 Support: %s%s%s\n",
+                       FLAGS_SET(s, TPM2_SUPPORT_FIRMWARE|TPM2_SUPPORT_DRIVER) ? ansi_highlight_green() :
+                       (s & (TPM2_SUPPORT_FIRMWARE|TPM2_SUPPORT_DRIVER)) != 0 ? ansi_highlight_red() : ansi_highlight_yellow(),
+                       FLAGS_SET(s, TPM2_SUPPORT_FIRMWARE|TPM2_SUPPORT_DRIVER) ? "yes" :
+                       (s & TPM2_SUPPORT_FIRMWARE) ? "firmware only, driver unavailable" :
+                       (s & TPM2_SUPPORT_DRIVER) ? "driver only, firmware unavailable" : "no",
+                       ansi_normal());
+
+                k = efi_get_reboot_to_firmware();
+                if (k > 0)
+                        printf("  Boot into FW: %sactive%s\n", ansi_highlight_yellow(), ansi_normal());
+                else if (k == 0)
+                        printf("  Boot into FW: supported\n");
+                else if (k == -EOPNOTSUPP)
+                        printf("  Boot into FW: not supported\n");
+                else {
+                        errno = -k;
+                        printf("  Boot into FW: %sfailed%s (%m)\n", ansi_highlight_red(), ansi_normal());
+                }
+                printf("\n");
+
+                printf("%sCurrent Boot Loader:%s\n", ansi_underline(), ansi_normal());
+                printf("      Product: %s%s%s\n", ansi_highlight(), strna(loader), ansi_normal());
+
+                for (size_t i = 0; i < ELEMENTSOF(loader_flags); i++)
+                        print_yes_no_line(i == 0, FLAGS_SET(loader_features, loader_flags[i].flag), loader_flags[i].name);
+
+                sd_id128_t bootloader_esp_uuid;
+                bool have_bootloader_esp_uuid = efi_loader_get_device_part_uuid(&bootloader_esp_uuid) >= 0;
+
+                print_yes_no_line(false, have_bootloader_esp_uuid, "Boot loader sets ESP information");
+                if (have_bootloader_esp_uuid && !sd_id128_is_null(esp_uuid) &&
+                    !sd_id128_equal(esp_uuid, bootloader_esp_uuid))
+                        printf("WARNING: The boot loader reports a different ESP UUID than detected ("SD_ID128_UUID_FORMAT_STR" vs. "SD_ID128_UUID_FORMAT_STR")!\n",
+                               SD_ID128_FORMAT_VAL(bootloader_esp_uuid),
+                               SD_ID128_FORMAT_VAL(esp_uuid));
+
+                if (stub) {
+                        printf("         Stub: %s\n", stub);
+                        for (size_t i = 0; i < ELEMENTSOF(stub_flags); i++)
+                                print_yes_no_line(i == 0, FLAGS_SET(stub_features, stub_flags[i].flag), stub_flags[i].name);
+                }
+                if (!sd_id128_is_null(loader_part_uuid))
+                        printf("          ESP: /dev/disk/by-partuuid/" SD_ID128_UUID_FORMAT_STR "\n",
+                               SD_ID128_FORMAT_VAL(loader_part_uuid));
+                else
+                        printf("          ESP: n/a\n");
+                printf("         File: %s%s\n", special_glyph(SPECIAL_GLYPH_TREE_RIGHT), strna(loader_path));
+                printf("\n");
+
+                printf("%sRandom Seed:%s\n", ansi_underline(), ansi_normal());
+                have = access(EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderSystemToken)), F_OK) >= 0;
+                printf(" System Token: %s\n", have ? "set" : "not set");
+
+                if (arg_esp_path) {
+                        _cleanup_free_ char *p = NULL;
+
+                        p = path_join(arg_esp_path, "/loader/random-seed");
+                        if (!p)
+                                return log_oom();
+
+                        have = access(p, F_OK) >= 0;
+                        printf("       Exists: %s\n", yes_no(have));
+                }
+
+                printf("\n");
+        } else
+                printf("%sSystem:%s\n"
+                       "Not booted with EFI\n\n",
+                       ansi_underline(), ansi_normal());
+
+        if (arg_esp_path) {
+                k = status_binaries(arg_esp_path, esp_uuid);
+                if (k < 0)
+                        r = k;
+        }
+
+        if (!arg_root && is_efi_boot()) {
+                k = status_variables();
+                if (k < 0)
+                        r = k;
+        }
+
+        if (arg_esp_path || arg_xbootldr_path) {
+                _cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
+
+                k = boot_config_load_and_select(&config,
+                                                arg_esp_path, esp_devid,
+                                                arg_xbootldr_path, xbootldr_devid);
+                if (k < 0)
+                        r = k;
+                else {
+                        k = status_entries(&config,
+                                           arg_esp_path, esp_uuid,
+                                           arg_xbootldr_path, xbootldr_uuid);
+                        if (k < 0)
+                                r = k;
+                }
+        }
+
+        return r;
+}
+
+static int ref_file(Hashmap *known_files, const char *fn, int increment) {
+        char *k = NULL;
+        int n, r;
+
+        assert(known_files);
+
+        /* just gracefully ignore this. This way the caller doesn't
+           have to verify whether the bootloader entry is relevant */
+        if (!fn)
+                return 0;
+
+        n = PTR_TO_INT(hashmap_get2(known_files, fn, (void**)&k));
+        n += increment;
+
+        assert(n >= 0);
+
+        if (n == 0) {
+                (void) hashmap_remove(known_files, fn);
+                free(k);
+        } else if (!k) {
+                _cleanup_free_ char *t = NULL;
+
+                t = strdup(fn);
+                if (!t)
+                        return -ENOMEM;
+                r = hashmap_put(known_files, t, INT_TO_PTR(n));
+                if (r < 0)
+                        return r;
+                TAKE_PTR(t);
+        } else {
+                r = hashmap_update(known_files, fn, INT_TO_PTR(n));
+                if (r < 0)
+                        return r;
+        }
+
+        return n;
+}
+
+static void deref_unlink_file(Hashmap *known_files, const char *fn, const char *root) {
+        _cleanup_free_ char *path = NULL;
+        int r;
+
+        assert(known_files);
+
+        /* just gracefully ignore this. This way the caller doesn't
+           have to verify whether the bootloader entry is relevant */
+        if (!fn || !root)
+                return;
+
+        r = ref_file(known_files, fn, -1);
+        if (r < 0)
+                return (void) log_warning_errno(r, "Failed to deref \"%s\", ignoring: %m", fn);
+        if (r > 0)
+                return;
+
+        if (arg_dry_run) {
+                r = chase_symlinks_and_access(fn, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, F_OK, &path, NULL);
+                if (r < 0)
+                        log_info_errno(r, "Unable to determine whether \"%s\" exists, ignoring: %m", fn);
+                else
+                        log_info("Would remove \"%s\"", path);
+                return;
+        }
+
+        r = chase_symlinks_and_unlink(fn, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, 0, &path);
+        if (r >= 0)
+                log_info("Removed \"%s\"", path);
+        else if (r != -ENOENT)
+                return (void) log_warning_errno(r, "Failed to remove \"%s\", ignoring: %m", fn);
+
+        _cleanup_free_ char *d = NULL;
+        if (path_extract_directory(fn, &d) >= 0 && !path_equal(d, "/")) {
+                r = chase_symlinks_and_unlink(d, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, AT_REMOVEDIR, NULL);
+                if (r < 0 && !IN_SET(r, -ENOTEMPTY, -ENOENT))
+                        log_warning_errno(r, "Failed to remove directory \"%s\", ignoring: %m", d);
+        }
+}
+
+static int count_known_files(const BootConfig *config, const char* root, Hashmap **ret_known_files) {
+        _cleanup_(hashmap_free_free_keyp) Hashmap *known_files = NULL;
+        int r;
+
+        assert(config);
+        assert(ret_known_files);
+
+        known_files = hashmap_new(&path_hash_ops);
+        if (!known_files)
+                return -ENOMEM;
+
+        for (size_t i = 0; i < config->n_entries; i++) {
+                const BootEntry *e = config->entries + i;
+
+                if (!path_equal(e->root, root))
+                        continue;
+
+                r = ref_file(known_files, e->kernel, +1);
+                if (r < 0)
+                        return r;
+                r = ref_file(known_files, e->efi, +1);
+                if (r < 0)
+                        return r;
+                STRV_FOREACH(s, e->initrd) {
+                        r = ref_file(known_files, *s, +1);
+                        if (r < 0)
+                                return r;
+                }
+                r = ref_file(known_files, e->device_tree, +1);
+                if (r < 0)
+                        return r;
+                STRV_FOREACH(s, e->device_tree_overlay) {
+                        r = ref_file(known_files, *s, +1);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        *ret_known_files = TAKE_PTR(known_files);
+
+        return 0;
+}
+
+static int boot_config_find_in(const BootConfig *config, const char *root, const char *id) {
+        assert(config);
+
+        if (!root || !id)
+                return -ENOENT;
+
+        for (size_t i = 0; i < config->n_entries; i++)
+                if (path_equal(config->entries[i].root, root) &&
+                    fnmatch(id, config->entries[i].id, FNM_CASEFOLD) == 0)
+                        return i;
+
+        return -ENOENT;
+}
+
+static int unlink_entry(const BootConfig *config, const char *root, const char *id) {
+        _cleanup_(hashmap_free_free_keyp) Hashmap *known_files = NULL;
+        const BootEntry *e = NULL;
+        int r;
+
+        assert(config);
+
+        r = count_known_files(config, root, &known_files);
+        if (r < 0)
+                return log_error_errno(r, "Failed to count files in %s: %m", root);
+
+        r = boot_config_find_in(config, root, id);
+        if (r < 0)
+                return r;
+
+        if (r == config->default_entry)
+                log_warning("%s is the default boot entry", id);
+        if (r == config->selected_entry)
+                log_warning("%s is the selected boot entry", id);
+
+        e = &config->entries[r];
+
+        deref_unlink_file(known_files, e->kernel, e->root);
+        deref_unlink_file(known_files, e->efi, e->root);
+        STRV_FOREACH(s, e->initrd)
+                deref_unlink_file(known_files, *s, e->root);
+        deref_unlink_file(known_files, e->device_tree, e->root);
+        STRV_FOREACH(s, e->device_tree_overlay)
+                deref_unlink_file(known_files, *s, e->root);
+
+        if (arg_dry_run)
+                log_info("Would remove \"%s\"", e->path);
+        else {
+                r = chase_symlinks_and_unlink(e->path, root, CHASE_PROHIBIT_SYMLINKS, 0, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to remove \"%s\": %m", e->path);
+
+                log_info("Removed %s", e->path);
+        }
+
+        return 0;
+}
+
+static int list_remove_orphaned_file(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
+
+        Hashmap *known_files = userdata;
+
+        assert(path);
+        assert(known_files);
+
+        if (event != RECURSE_DIR_ENTRY)
+                return RECURSE_DIR_CONTINUE;
+
+        if (hashmap_get(known_files, path))
+                return RECURSE_DIR_CONTINUE; /* keep! */
+
+        if (arg_dry_run)
+                log_info("Would remove %s", path);
+        else if (unlinkat(dir_fd, de->d_name, 0) < 0)
+                log_warning_errno(errno, "Failed to remove \"%s\", ignoring: %m", path);
+        else
+                log_info("Removed %s", path);
+
+        return RECURSE_DIR_CONTINUE;
+}
+
+static int cleanup_orphaned_files(
+                const BootConfig *config,
+                const char *root) {
+
+        _cleanup_(hashmap_free_free_keyp) Hashmap *known_files = NULL;
+        _cleanup_free_ char *full = NULL, *p = NULL;
+        _cleanup_close_ int dir_fd = -1;
+        int r = -1;
+
+        assert(config);
+        assert(root);
+
+        log_info("Cleaning %s", root);
+
+        r = settle_entry_token();
+        if (r < 0)
+                return r;
+
+        r = count_known_files(config, root, &known_files);
+        if (r < 0)
+                return log_error_errno(r, "Failed to count files in %s: %m", root);
+
+        dir_fd = chase_symlinks_and_open(arg_entry_token, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS,
+                        O_DIRECTORY|O_CLOEXEC, &full);
+        if (dir_fd == -ENOENT)
+                return 0;
+        if (dir_fd < 0)
+                return log_error_errno(dir_fd, "Failed to open '%s/%s': %m", root, arg_entry_token);
+
+        p = path_join("/", arg_entry_token);
+        if (!p)
+                return log_oom();
+
+        r = recurse_dir(dir_fd, p, 0, UINT_MAX, RECURSE_DIR_SORT, list_remove_orphaned_file, known_files);
+        if (r < 0)
+                return log_error_errno(r, "Failed to cleanup %s: %m", full);
+
+        return r;
+}
+
+int verb_list(int argc, char *argv[], void *userdata) {
+        _cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
+        dev_t esp_devid = 0, xbootldr_devid = 0;
+        int r;
+
+        /* If we lack privileges we invoke find_esp_and_warn() in "unprivileged mode" here, which does two
+         * things: turn off logging about access errors and turn off potentially privileged device probing.
+         * Here we're interested in the latter but not the former, hence request the mode, and log about
+         * EACCES. */
+
+        r = acquire_esp(/* unprivileged_mode= */ geteuid() != 0, /* graceful= */ false, NULL, NULL, NULL, NULL, &esp_devid);
+        if (r == -EACCES) /* We really need the ESP path for this call, hence also log about access errors */
+                return log_error_errno(r, "Failed to determine ESP location: %m");
+        if (r < 0)
+                return r;
+
+        r = acquire_xbootldr(/* unprivileged_mode= */ geteuid() != 0, NULL, &xbootldr_devid);
+        if (r == -EACCES)
+                return log_error_errno(r, "Failed to determine XBOOTLDR partition: %m");
+        if (r < 0)
+                return r;
+
+        r = boot_config_load_and_select(&config, arg_esp_path, esp_devid, arg_xbootldr_path, xbootldr_devid);
+        if (r < 0)
+                return r;
+
+        if (config.n_entries == 0 && FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) {
+                log_info("No boot loader entries found.");
+                return 0;
+        }
+
+        if (streq(argv[0], "list")) {
+                pager_open(arg_pager_flags);
+                return show_boot_entries(&config, arg_json_format_flags);
+        } else if (streq(argv[0], "cleanup")) {
+                if (arg_xbootldr_path && xbootldr_devid != esp_devid)
+                        cleanup_orphaned_files(&config, arg_xbootldr_path);
+                return cleanup_orphaned_files(&config, arg_esp_path);
+        } else {
+                assert(streq(argv[0], "unlink"));
+                if (arg_xbootldr_path && xbootldr_devid != esp_devid) {
+                        r = unlink_entry(&config, arg_xbootldr_path, argv[1]);
+                        if (r == 0 || r != -ENOENT)
+                                return r;
+                }
+                return unlink_entry(&config, arg_esp_path, argv[1]);
+        }
+}
+
+int verb_unlink(int argc, char *argv[], void *userdata) {
+        return verb_list(argc, argv, userdata);
+}
diff --git a/src/boot/bootctl-status.h b/src/boot/bootctl-status.h
new file mode 100644
index 0000000..f7998a3
--- /dev/null
+++ b/src/boot/bootctl-status.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+int verb_status(int argc, char *argv[], void *userdata);
+int verb_list(int argc, char *argv[], void *userdata);
+int verb_unlink(int argc, char *argv[], void *userdata);
diff --git a/src/boot/bootctl-systemd-efi-options.c b/src/boot/bootctl-systemd-efi-options.c
new file mode 100644
index 0000000..d0de9ef
--- /dev/null
+++ b/src/boot/bootctl-systemd-efi-options.c
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "bootctl-systemd-efi-options.h"
+#include "efi-loader.h"
+
+int verb_systemd_efi_options(int argc, char *argv[], void *userdata) {
+        int r;
+
+        if (argc == 1) {
+                _cleanup_free_ char *line = NULL, *new = NULL;
+
+                r = systemd_efi_options_variable(&line);
+                if (r == -ENODATA)
+                        log_debug("No SystemdOptions EFI variable present in cache.");
+                else if (r < 0)
+                        return log_error_errno(r, "Failed to read SystemdOptions EFI variable from cache: %m");
+                else
+                        puts(line);
+
+                r = systemd_efi_options_efivarfs_if_newer(&new);
+                if (r == -ENODATA) {
+                        if (line)
+                                log_notice("Note: SystemdOptions EFI variable has been removed since boot.");
+                } else if (r < 0)
+                        log_warning_errno(r, "Failed to check SystemdOptions EFI variable in efivarfs, ignoring: %m");
+                else if (new && !streq_ptr(line, new))
+                        log_notice("Note: SystemdOptions EFI variable has been modified since boot. New value: %s",
+                                   new);
+        } else {
+                r = efi_set_variable_string(EFI_SYSTEMD_VARIABLE(SystemdOptions), argv[1]);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set SystemdOptions EFI variable: %m");
+        }
+
+        return 0;
+}
diff --git a/src/boot/bootctl-systemd-efi-options.h b/src/boot/bootctl-systemd-efi-options.h
new file mode 100644
index 0000000..d0243eb
--- /dev/null
+++ b/src/boot/bootctl-systemd-efi-options.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int verb_systemd_efi_options(int argc, char *argv[], void *userdata);
diff --git a/src/boot/bootctl-uki.c b/src/boot/bootctl-uki.c
new file mode 100644
index 0000000..261e687
--- /dev/null
+++ b/src/boot/bootctl-uki.c
@@ -0,0 +1,240 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "bootctl.h"
+#include "bootctl-uki.h"
+#include "env-file.h"
+#include "fd-util.h"
+#include "os-util.h"
+#include "parse-util.h"
+#include "pe-header.h"
+
+#define MAX_SECTIONS 96
+
+static const uint8_t dos_file_magic[2] = "MZ";
+static const uint8_t pe_file_magic[4] = "PE\0\0";
+
+static const uint8_t name_osrel[8] = ".osrel";
+static const uint8_t name_linux[8] = ".linux";
+static const uint8_t name_initrd[8] = ".initrd";
+static const uint8_t name_cmdline[8] = ".cmdline";
+static const uint8_t name_uname[8] = ".uname";
+
+static int pe_sections(FILE *uki, struct PeSectionHeader **ret, size_t *ret_n) {
+        _cleanup_free_ struct PeSectionHeader *sections = NULL;
+        struct DosFileHeader dos;
+        struct PeHeader pe;
+        size_t scount;
+        uint64_t soff, items;
+
+        assert(uki);
+        assert(ret);
+        assert(ret_n);
+
+        items = fread(&dos, 1, sizeof(dos), uki);
+        if (items < sizeof(dos.Magic))
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "File is smaller than DOS magic (got %"PRIu64" of %zu bytes)",
+                                       items, sizeof(dos.Magic));
+        if (memcmp(dos.Magic, dos_file_magic, sizeof(dos_file_magic)) != 0)
+                goto no_sections;
+
+        if (items != sizeof(dos))
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "File is smaller than DOS header (got %"PRIu64" of %zu bytes)",
+                                       items, sizeof(dos));
+
+        if (fseek(uki, le32toh(dos.ExeHeader), SEEK_SET) < 0)
+                return log_error_errno(errno, "seek to PE header");
+
+        items = fread(&pe, 1, sizeof(pe), uki);
+        if (items != sizeof(pe))
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "PE header read error");
+        if (memcmp(pe.Magic, pe_file_magic, sizeof(pe_file_magic)) != 0)
+                goto no_sections;
+
+        soff = le32toh(dos.ExeHeader) + sizeof(pe) + le16toh(pe.FileHeader.SizeOfOptionalHeader);
+        if (fseek(uki, soff, SEEK_SET) < 0)
+                return log_error_errno(errno, "seek to PE section headers");
+
+        scount = le16toh(pe.FileHeader.NumberOfSections);
+        if (scount > MAX_SECTIONS)
+                goto no_sections;
+        sections = new(struct PeSectionHeader, scount);
+        if (!sections)
+                return log_oom();
+        items = fread(sections, sizeof(*sections), scount, uki);
+        if (items != scount)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "PE section header read error");
+
+        *ret = TAKE_PTR(sections);
+        *ret_n = scount;
+        return 0;
+
+no_sections:
+        *ret = NULL;
+        *ret_n = 0;
+        return 0;
+}
+
+static bool find_pe_section(
+                struct PeSectionHeader *sections,
+                size_t scount,
+                const uint8_t *name,
+                size_t namelen,
+                size_t *ret) {
+
+        assert(sections || scount == 0);
+        assert(name || namelen == 0);
+
+        for (size_t s = 0; s < scount; s++)
+                if (memcmp_nn(sections[s].Name, sizeof(sections[s].Name), name, namelen) == 0) {
+                        if (ret)
+                                *ret = s;
+                        return true;
+                }
+
+        return false;
+}
+
+static bool is_uki(struct PeSectionHeader *sections, size_t scount) {
+        assert(sections || scount == 0);
+
+        return
+                find_pe_section(sections, scount, name_osrel, sizeof(name_osrel), NULL) &&
+                find_pe_section(sections, scount, name_linux, sizeof(name_linux), NULL) &&
+                find_pe_section(sections, scount, name_initrd, sizeof(name_initrd), NULL);
+}
+
+int verb_kernel_identify(int argc, char *argv[], void *userdata) {
+        _cleanup_fclose_ FILE *uki = NULL;
+        _cleanup_free_ struct PeSectionHeader *sections = NULL;
+        size_t scount;
+        int r;
+
+        uki = fopen(argv[1], "re");
+        if (!uki)
+                return log_error_errno(errno, "Failed to open UKI file '%s': %m", argv[1]);
+
+        r = pe_sections(uki, &sections, &scount);
+        if (r < 0)
+                return r;
+
+        if (!sections)
+                puts("unknown");
+        else if (is_uki(sections, scount))
+                puts("uki");
+        else
+                puts("pe");
+
+        return EXIT_SUCCESS;
+}
+
+static int read_pe_section(
+                FILE *uki,
+                const struct PeSectionHeader *section,
+                void **ret,
+                size_t *ret_n) {
+
+        _cleanup_free_ void *data = NULL;
+        uint32_t size, bytes;
+        uint64_t soff;
+
+        assert(uki);
+        assert(section);
+        assert(ret);
+
+        soff = le32toh(section->PointerToRawData);
+        size = le32toh(section->VirtualSize);
+
+        if (size > 16 * 1024)
+                return log_error_errno(SYNTHETIC_ERRNO(E2BIG), "PE section too big");
+
+        if (fseek(uki, soff, SEEK_SET) < 0)
+                return log_error_errno(errno, "seek to PE section");
+
+        data = malloc(size+1);
+        if (!data)
+                return log_oom();
+        ((uint8_t*) data)[size] = 0; /* safety NUL byte */
+
+        bytes = fread(data, 1, size, uki);
+        if (bytes != size)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "PE section read error");
+
+        *ret = TAKE_PTR(data);
+        if (ret_n)
+                *ret_n = size;
+        return 0;
+}
+
+static int inspect_osrel(const void *osrel, size_t osrel_size) {
+        _cleanup_fclose_ FILE *s = NULL;
+        _cleanup_free_ char *pname = NULL, *name = NULL;
+        int r;
+
+        assert(osrel || osrel_size == 0);
+
+        if (!osrel)
+                return 0;
+
+        s = fmemopen((void*) osrel, osrel_size, "r");
+        if (!s)
+                return log_warning_errno(errno, "Failed to open embedded os-release file, ignoring: %m");
+
+        r = parse_env_file(s, NULL,
+                           "PRETTY_NAME", &pname,
+                           "NAME",        &name);
+        if (r < 0)
+                return log_warning_errno(r, "Failed to parse embedded os-release file, ignoring: %m");
+
+        printf("         OS: %s\n", os_release_pretty_name(pname, name));
+        return 0;
+}
+
+static void inspect_uki(FILE *uki, struct PeSectionHeader *sections, size_t scount) {
+        _cleanup_free_ char *cmdline = NULL, *uname = NULL;
+        _cleanup_free_ void *osrel = NULL;
+        size_t osrel_size = 0, idx;
+
+        assert(uki);
+        assert(sections || scount == 0);
+
+        if (find_pe_section(sections, scount, name_cmdline, sizeof(name_cmdline), &idx))
+                read_pe_section(uki, sections + idx, (void**) &cmdline, NULL);
+
+        if (find_pe_section(sections, scount, name_uname, sizeof(name_uname), &idx))
+                read_pe_section(uki, sections + idx, (void**) &uname, NULL);
+
+        if (find_pe_section(sections, scount, name_osrel, sizeof(name_osrel), &idx))
+                read_pe_section(uki, sections + idx, &osrel, &osrel_size);
+
+        if (cmdline)
+                printf("    Cmdline: %s\n", cmdline);
+        if (uname)
+                printf("    Version: %s\n", uname);
+
+        (void) inspect_osrel(osrel, osrel_size);
+}
+
+int verb_kernel_inspect(int argc, char *argv[], void *userdata) {
+        _cleanup_fclose_ FILE *uki = NULL;
+        _cleanup_free_ struct PeSectionHeader *sections = NULL;
+        size_t scount;
+        int r;
+
+        uki = fopen(argv[1], "re");
+        if (!uki)
+                return log_error_errno(errno, "Failed to open UKI file '%s': %m", argv[1]);
+
+        r = pe_sections(uki, &sections, &scount);
+        if (r < 0)
+                return r;
+
+        if (!sections)
+                puts("Kernel Type: unknown");
+        else if (is_uki(sections, scount)) {
+                puts("Kernel Type: uki");
+                inspect_uki(uki, sections, scount);
+        } else
+                puts("Kernel Type: pe");
+
+        return EXIT_SUCCESS;
+}
diff --git a/src/boot/bootctl-uki.h b/src/boot/bootctl-uki.h
new file mode 100644
index 0000000..effb984
--- /dev/null
+++ b/src/boot/bootctl-uki.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+int verb_kernel_identify(int argc, char *argv[], void *userdata);
+int verb_kernel_inspect(int argc, char *argv[], void *userdata);
diff --git a/src/boot/bootctl-util.c b/src/boot/bootctl-util.c
new file mode 100644
index 0000000..62c0b64
--- /dev/null
+++ b/src/boot/bootctl-util.c
@@ -0,0 +1,211 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/mman.h>
+
+#include "bootctl.h"
+#include "bootctl-util.h"
+#include "fileio.h"
+#include "os-util.h"
+#include "path-util.h"
+#include "stat-util.h"
+#include "sync-util.h"
+#include "utf8.h"
+
+int sync_everything(void) {
+        int ret = 0, k;
+
+        if (arg_esp_path) {
+                k = syncfs_path(AT_FDCWD, arg_esp_path);
+                if (k < 0)
+                        ret = log_error_errno(k, "Failed to synchronize the ESP '%s': %m", arg_esp_path);
+        }
+
+        if (arg_xbootldr_path) {
+                k = syncfs_path(AT_FDCWD, arg_xbootldr_path);
+                if (k < 0)
+                        ret = log_error_errno(k, "Failed to synchronize $BOOT '%s': %m", arg_xbootldr_path);
+        }
+
+        return ret;
+}
+
+const char *get_efi_arch(void) {
+        /* Detect EFI firmware architecture of the running system. On mixed mode systems, it could be 32bit
+         * while the kernel is running in 64bit. */
+
+#ifdef __x86_64__
+        _cleanup_free_ char *platform_size = NULL;
+        int r;
+
+        r = read_one_line_file("/sys/firmware/efi/fw_platform_size", &platform_size);
+        if (r == -ENOENT)
+                return EFI_MACHINE_TYPE_NAME;
+        if (r < 0) {
+                log_warning_errno(r,
+                        "Error reading EFI firmware word size, assuming machine type '%s': %m",
+                        EFI_MACHINE_TYPE_NAME);
+                return EFI_MACHINE_TYPE_NAME;
+        }
+
+        if (streq(platform_size, "64"))
+                return EFI_MACHINE_TYPE_NAME;
+        if (streq(platform_size, "32"))
+                return "ia32";
+
+        log_warning(
+                "Unknown EFI firmware word size '%s', using machine type '%s'.",
+                platform_size,
+                EFI_MACHINE_TYPE_NAME);
+#endif
+
+        return EFI_MACHINE_TYPE_NAME;
+}
+
+/* search for "#### LoaderInfo: systemd-boot 218 ####" string inside the binary */
+int get_file_version(int fd, char **ret) {
+        struct stat st;
+        char *buf;
+        const char *s, *e;
+        char *x = NULL;
+        int r;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to stat EFI binary: %m");
+
+        r = stat_verify_regular(&st);
+        if (r < 0)
+                return log_error_errno(r, "EFI binary is not a regular file: %m");
+
+        if (st.st_size < 27 || file_offset_beyond_memory_size(st.st_size)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        buf = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
+        if (buf == MAP_FAILED)
+                return log_error_errno(errno, "Failed to memory map EFI binary: %m");
+
+        s = mempmem_safe(buf, st.st_size - 8, "#### LoaderInfo: ", 17);
+        if (!s) {
+                r = -ESRCH;
+                goto finish;
+        }
+
+        e = memmem_safe(s, st.st_size - (s - buf), " ####", 5);
+        if (!e || e - s < 3) {
+                r = log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Malformed version string.");
+                goto finish;
+        }
+
+        x = strndup(s, e - s);
+        if (!x) {
+                r = log_oom();
+                goto finish;
+        }
+        r = 1;
+
+finish:
+        (void) munmap(buf, st.st_size);
+        if (r >= 0)
+                *ret = x;
+
+        return r;
+}
+
+int settle_entry_token(void) {
+        int r;
+
+        switch (arg_entry_token_type) {
+
+        case ARG_ENTRY_TOKEN_AUTO: {
+                _cleanup_free_ char *buf = NULL, *p = NULL;
+                p = path_join(arg_root, etc_kernel(), "entry-token");
+                if (!p)
+                        return log_oom();
+                r = read_one_line_file(p, &buf);
+                if (r < 0 && r != -ENOENT)
+                        return log_error_errno(r, "Failed to read %s: %m", p);
+
+                if (!isempty(buf)) {
+                        free_and_replace(arg_entry_token, buf);
+                        arg_entry_token_type = ARG_ENTRY_TOKEN_LITERAL;
+                } else if (sd_id128_is_null(arg_machine_id)) {
+                        _cleanup_free_ char *id = NULL, *image_id = NULL;
+
+                        r = parse_os_release(arg_root,
+                                             "IMAGE_ID", &image_id,
+                                             "ID", &id);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to load /etc/os-release: %m");
+
+                        if (!isempty(image_id)) {
+                                free_and_replace(arg_entry_token, image_id);
+                                arg_entry_token_type = ARG_ENTRY_TOKEN_OS_IMAGE_ID;
+                        } else if (!isempty(id)) {
+                                free_and_replace(arg_entry_token, id);
+                                arg_entry_token_type = ARG_ENTRY_TOKEN_OS_ID;
+                        } else
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No machine ID set, and /etc/os-release carries no ID=/IMAGE_ID= fields.");
+                } else {
+                        r = free_and_strdup_warn(&arg_entry_token, SD_ID128_TO_STRING(arg_machine_id));
+                        if (r < 0)
+                                return r;
+
+                        arg_entry_token_type = ARG_ENTRY_TOKEN_MACHINE_ID;
+                }
+
+                break;
+        }
+
+        case ARG_ENTRY_TOKEN_MACHINE_ID:
+                if (sd_id128_is_null(arg_machine_id))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No machine ID set.");
+
+                r = free_and_strdup_warn(&arg_entry_token, SD_ID128_TO_STRING(arg_machine_id));
+                if (r < 0)
+                        return r;
+
+                break;
+
+        case ARG_ENTRY_TOKEN_OS_IMAGE_ID: {
+                _cleanup_free_ char *buf = NULL;
+
+                r = parse_os_release(arg_root, "IMAGE_ID", &buf);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to load /etc/os-release: %m");
+
+                if (isempty(buf))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "IMAGE_ID= field not set in /etc/os-release.");
+
+                free_and_replace(arg_entry_token, buf);
+                break;
+        }
+
+        case ARG_ENTRY_TOKEN_OS_ID: {
+                _cleanup_free_ char *buf = NULL;
+
+                r = parse_os_release(arg_root, "ID", &buf);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to load /etc/os-release: %m");
+
+                if (isempty(buf))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "ID= field not set in /etc/os-release.");
+
+                free_and_replace(arg_entry_token, buf);
+                break;
+        }
+
+        case ARG_ENTRY_TOKEN_LITERAL:
+                assert(!isempty(arg_entry_token)); /* already filled in by command line parser */
+                break;
+        }
+
+        if (isempty(arg_entry_token) || !(utf8_is_valid(arg_entry_token) && string_is_safe(arg_entry_token)))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Selected entry token not valid: %s", arg_entry_token);
+
+        log_debug("Using entry token: %s", arg_entry_token);
+        return 0;
+}
diff --git a/src/boot/bootctl-util.h b/src/boot/bootctl-util.h
new file mode 100644
index 0000000..147455e
--- /dev/null
+++ b/src/boot/bootctl-util.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int sync_everything(void);
+
+const char *get_efi_arch(void);
+
+int get_file_version(int fd, char **ret);
+
+int settle_entry_token(void);
+
+static inline const char* etc_kernel(void) {
+        return getenv("KERNEL_INSTALL_CONF_ROOT") ?: "/etc/kernel/";
+}
diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
index d6eb6d0..9148255 100644
--- a/src/boot/bootctl.c
+++ b/src/boot/bootctl.c
@@ -1,74 +1,71 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <ctype.h>
-#include <errno.h>
-#include <ftw.h>
 #include <getopt.h>
-#include <limits.h>
-#include <linux/magic.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <unistd.h>
 
-#include "sd-id128.h"
-
-#include "alloc-util.h"
-#include "blkid-util.h"
-#include "bootspec.h"
-#include "copy.h"
-#include "dirent-util.h"
-#include "efi-loader.h"
-#include "efivars.h"
-#include "env-util.h"
+#include "bootctl.h"
+#include "bootctl-install.h"
+#include "bootctl-random-seed.h"
+#include "bootctl-reboot-to-firmware.h"
+#include "bootctl-set-efivar.h"
+#include "bootctl-status.h"
+#include "bootctl-systemd-efi-options.h"
+#include "bootctl-uki.h"
+#include "build.h"
+#include "dissect-image.h"
 #include "escape.h"
-#include "fd-util.h"
-#include "fileio.h"
-#include "fs-util.h"
-#include "locale-util.h"
+#include "find-esp.h"
 #include "main-func.h"
-#include "mkdir.h"
+#include "mount-util.h"
 #include "pager.h"
 #include "parse-argument.h"
-#include "parse-util.h"
 #include "pretty-print.h"
-#include "random-util.h"
-#include "rm-rf.h"
-#include "stat-util.h"
-#include "stdio-util.h"
-#include "string-util.h"
-#include "strv.h"
-#include "terminal-util.h"
-#include "tmpfile-util.h"
-#include "umask-util.h"
 #include "utf8.h"
-#include "util.h"
 #include "verbs.h"
 #include "virt.h"
 
-static char *arg_esp_path = NULL;
-static char *arg_xbootldr_path = NULL;
-static bool arg_print_esp_path = false;
-static bool arg_print_dollar_boot_path = false;
-static bool arg_touch_variables = true;
-static PagerFlags arg_pager_flags = 0;
-static bool arg_graceful = false;
-static int arg_make_machine_id_directory = -1;
+/* EFI_BOOT_OPTION_DESCRIPTION_MAX sets the maximum length for the boot option description
+ * stored in NVRAM. The UEFI spec does not specify a minimum or maximum length for this
+ * string, but we limit the length to something reasonable to prevent from the firmware
+ * having to deal with a potentially too long string. */
+#define EFI_BOOT_OPTION_DESCRIPTION_MAX ((size_t) 255)
+
+char *arg_esp_path = NULL;
+char *arg_xbootldr_path = NULL;
+bool arg_print_esp_path = false;
+bool arg_print_dollar_boot_path = false;
+bool arg_touch_variables = true;
+PagerFlags arg_pager_flags = 0;
+bool arg_graceful = false;
+bool arg_quiet = false;
+int arg_make_entry_directory = false; /* tri-state: < 0 for automatic logic */
+sd_id128_t arg_machine_id = SD_ID128_NULL;
+char *arg_install_layout = NULL;
+EntryTokenType arg_entry_token_type = ARG_ENTRY_TOKEN_AUTO;
+char *arg_entry_token = NULL;
+JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
+bool arg_arch_all = false;
+char *arg_root = NULL;
+char *arg_image = NULL;
+InstallSource arg_install_source = ARG_INSTALL_SOURCE_AUTO;
+char *arg_efi_boot_option_description = NULL;
+bool arg_dry_run = false;
 
 STATIC_DESTRUCTOR_REGISTER(arg_esp_path, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_xbootldr_path, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_install_layout, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_entry_token, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_efi_boot_option_description, freep);
 
-static const char *arg_dollar_boot_path(void) {
-        /* $BOOT shall be the XBOOTLDR partition if it exists, and otherwise the ESP */
-        return arg_xbootldr_path ?: arg_esp_path;
-}
-
-static int acquire_esp(
+int acquire_esp(
                 bool unprivileged_mode,
+                bool graceful,
                 uint32_t *ret_part,
                 uint64_t *ret_pstart,
                 uint64_t *ret_psize,
-                sd_id128_t *ret_uuid) {
+                sd_id128_t *ret_uuid,
+                dev_t *ret_devid) {
 
         char *np;
         int r;
@@ -79,30 +76,42 @@
          * we simply eat up the error here, so that --list and --status work too, without noise about
          * this). */
 
-        r = find_esp_and_warn(arg_esp_path, unprivileged_mode, &np, ret_part, ret_pstart, ret_psize, ret_uuid);
-        if (r == -ENOKEY)
+        r = find_esp_and_warn(arg_root, arg_esp_path, unprivileged_mode, &np, ret_part, ret_pstart, ret_psize, ret_uuid, ret_devid);
+        if (r == -ENOKEY) {
+                if (graceful)
+                        return log_full_errno(arg_quiet ? LOG_DEBUG : LOG_INFO, r,
+                                              "Couldn't find EFI system partition, skipping.");
+
                 return log_error_errno(r,
                                        "Couldn't find EFI system partition. It is recommended to mount it to /boot or /efi.\n"
                                        "Alternatively, use --esp-path= to specify path to mount point.");
+        }
         if (r < 0)
                 return r;
 
         free_and_replace(arg_esp_path, np);
         log_debug("Using EFI System Partition at %s.", arg_esp_path);
 
-        return 1;
+        return 0;
 }
 
-static int acquire_xbootldr(bool unprivileged_mode, sd_id128_t *ret_uuid) {
+int acquire_xbootldr(
+                bool unprivileged_mode,
+                sd_id128_t *ret_uuid,
+                dev_t *ret_devid) {
+
         char *np;
         int r;
 
-        r = find_xbootldr_and_warn(arg_xbootldr_path, unprivileged_mode, &np, ret_uuid);
+        r = find_xbootldr_and_warn(arg_root, arg_xbootldr_path, unprivileged_mode, &np, ret_uuid, ret_devid);
         if (r == -ENOKEY) {
                 log_debug_errno(r, "Didn't find an XBOOTLDR partition, using the ESP as $BOOT.");
+                arg_xbootldr_path = mfree(arg_xbootldr_path);
+
                 if (ret_uuid)
                         *ret_uuid = SD_ID128_NULL;
-                arg_xbootldr_path = mfree(arg_xbootldr_path);
+                if (ret_devid)
+                        *ret_devid = 0;
                 return 0;
         }
         if (r < 0)
@@ -114,962 +123,6 @@
         return 1;
 }
 
-static void settle_make_machine_id_directory(void) {
-        int r;
-
-        if (arg_make_machine_id_directory >= 0)
-                return;
-
-        r = path_is_temporary_fs("/etc/machine-id");
-        if (r < 0)
-                log_debug_errno(r, "Couldn't determine whether /etc/machine-id is on a temporary file system, assuming so.");
-
-        arg_make_machine_id_directory = r == 0;
-}
-
-/* search for "#### LoaderInfo: systemd-boot 218 ####" string inside the binary */
-static int get_file_version(int fd, char **v) {
-        struct stat st;
-        char *buf;
-        const char *s, *e;
-        char *x = NULL;
-        int r;
-
-        assert(fd >= 0);
-        assert(v);
-
-        if (fstat(fd, &st) < 0)
-                return log_error_errno(errno, "Failed to stat EFI binary: %m");
-
-        r = stat_verify_regular(&st);
-        if (r < 0)
-                return log_error_errno(r, "EFI binary is not a regular file: %m");
-
-        if (st.st_size < 27 || file_offset_beyond_memory_size(st.st_size)) {
-                *v = NULL;
-                return 0;
-        }
-
-        buf = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
-        if (buf == MAP_FAILED)
-                return log_error_errno(errno, "Failed to memory map EFI binary: %m");
-
-        s = memmem(buf, st.st_size - 8, "#### LoaderInfo: ", 17);
-        if (!s)
-                goto finish;
-        s += 17;
-
-        e = memmem(s, st.st_size - (s - buf), " ####", 5);
-        if (!e || e - s < 3) {
-                r = log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Malformed version string.");
-                goto finish;
-        }
-
-        x = strndup(s, e - s);
-        if (!x) {
-                r = log_oom();
-                goto finish;
-        }
-        r = 1;
-
-finish:
-        (void) munmap(buf, st.st_size);
-        *v = x;
-        return r;
-}
-
-static int enumerate_binaries(const char *esp_path, const char *path, const char *prefix) {
-        _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
-        const char *p;
-        int c = 0, r;
-
-        assert(esp_path);
-        assert(path);
-
-        p = prefix_roota(esp_path, path);
-        d = opendir(p);
-        if (!d) {
-                if (errno == ENOENT)
-                        return 0;
-
-                return log_error_errno(errno, "Failed to read \"%s\": %m", p);
-        }
-
-        FOREACH_DIRENT(de, d, break) {
-                _cleanup_free_ char *v = NULL;
-                _cleanup_close_ int fd = -1;
-
-                if (!endswith_no_case(de->d_name, ".efi"))
-                        continue;
-
-                if (prefix && !startswith_no_case(de->d_name, prefix))
-                        continue;
-
-                fd = openat(dirfd(d), de->d_name, O_RDONLY|O_CLOEXEC);
-                if (fd < 0)
-                        return log_error_errno(errno, "Failed to open \"%s/%s\" for reading: %m", p, de->d_name);
-
-                r = get_file_version(fd, &v);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        printf("         File: %s/%s/%s (%s%s%s)\n", special_glyph(SPECIAL_GLYPH_TREE_RIGHT), path, de->d_name, ansi_highlight(), v, ansi_normal());
-                else
-                        printf("         File: %s/%s/%s\n", special_glyph(SPECIAL_GLYPH_TREE_RIGHT), path, de->d_name);
-
-                c++;
-        }
-
-        return c;
-}
-
-static int status_binaries(const char *esp_path, sd_id128_t partition) {
-        int r;
-
-        printf("Available Boot Loaders on ESP:\n");
-
-        if (!esp_path) {
-                printf("          ESP: Cannot find or access mount point of ESP.\n\n");
-                return -ENOENT;
-        }
-
-        printf("          ESP: %s", esp_path);
-        if (!sd_id128_is_null(partition))
-                printf(" (/dev/disk/by-partuuid/" SD_ID128_UUID_FORMAT_STR ")", SD_ID128_FORMAT_VAL(partition));
-        printf("\n");
-
-        r = enumerate_binaries(esp_path, "EFI/systemd", NULL);
-        if (r < 0)
-                goto finish;
-        if (r == 0)
-                log_info("systemd-boot not installed in ESP.");
-
-        r = enumerate_binaries(esp_path, "EFI/BOOT", "boot");
-        if (r < 0)
-                goto finish;
-        if (r == 0)
-                log_info("No default/fallback boot loader installed in ESP.");
-
-        r = 0;
-
-finish:
-        printf("\n");
-        return r;
-}
-
-static int print_efi_option(uint16_t id, bool in_order) {
-        _cleanup_free_ char *title = NULL;
-        _cleanup_free_ char *path = NULL;
-        sd_id128_t partition;
-        bool active;
-        int r;
-
-        r = efi_get_boot_option(id, &title, &partition, &path, &active);
-        if (r < 0)
-                return r;
-
-        /* print only configured entries with partition information */
-        if (!path || sd_id128_is_null(partition))
-                return 0;
-
-        efi_tilt_backslashes(path);
-
-        printf("        Title: %s%s%s\n", ansi_highlight(), strna(title), ansi_normal());
-        printf("           ID: 0x%04X\n", id);
-        printf("       Status: %sactive%s\n", active ? "" : "in", in_order ? ", boot-order" : "");
-        printf("    Partition: /dev/disk/by-partuuid/" SD_ID128_UUID_FORMAT_STR "\n",
-               SD_ID128_FORMAT_VAL(partition));
-        printf("         File: %s%s\n", special_glyph(SPECIAL_GLYPH_TREE_RIGHT), path);
-        printf("\n");
-
-        return 0;
-}
-
-static int status_variables(void) {
-        _cleanup_free_ uint16_t *options = NULL, *order = NULL;
-        int n_options, n_order;
-
-        n_options = efi_get_boot_options(&options);
-        if (n_options == -ENOENT)
-                return log_error_errno(n_options,
-                                       "Failed to access EFI variables, efivarfs"
-                                       " needs to be available at /sys/firmware/efi/efivars/.");
-        if (n_options < 0)
-                return log_error_errno(n_options, "Failed to read EFI boot entries: %m");
-
-        n_order = efi_get_boot_order(&order);
-        if (n_order == -ENOENT)
-                n_order = 0;
-        else if (n_order < 0)
-                return log_error_errno(n_order, "Failed to read EFI boot order: %m");
-
-        /* print entries in BootOrder first */
-        printf("Boot Loaders Listed in EFI Variables:\n");
-        for (int i = 0; i < n_order; i++)
-                print_efi_option(order[i], true);
-
-        /* print remaining entries */
-        for (int i = 0; i < n_options; i++) {
-                for (int j = 0; j < n_order; j++)
-                        if (options[i] == order[j])
-                                goto next_option;
-
-                print_efi_option(options[i], false);
-
-        next_option:
-                continue;
-        }
-
-        return 0;
-}
-
-static int boot_entry_file_check(const char *root, const char *p) {
-        _cleanup_free_ char *path = NULL;
-
-        path = path_join(root, p);
-        if (!path)
-                return log_oom();
-
-        if (access(path, F_OK) < 0)
-                return -errno;
-
-        return 0;
-}
-
-static void boot_entry_file_list(const char *field, const char *root, const char *p, int *ret_status) {
-        int status = boot_entry_file_check(root, p);
-
-        printf("%13s%s ", strempty(field), field ? ":" : " ");
-        if (status < 0) {
-                errno = -status;
-                printf("%s%s%s (%m)\n", ansi_highlight_red(), p, ansi_normal());
-        } else
-                printf("%s\n", p);
-
-        if (*ret_status == 0 && status < 0)
-                *ret_status = status;
-}
-
-static int boot_entry_show(const BootEntry *e, bool show_as_default) {
-        int status = 0;
-
-        /* Returns 0 on success, negative on processing error, and positive if something is wrong with the
-           boot entry itself. */
-
-        assert(e);
-
-        printf("        title: %s%s%s" "%s%s%s\n",
-               ansi_highlight(), boot_entry_title(e), ansi_normal(),
-               ansi_highlight_green(), show_as_default ? " (default)" : "", ansi_normal());
-
-        if (e->id)
-                printf("           id: %s\n", e->id);
-        if (e->path) {
-                _cleanup_free_ char *link = NULL;
-
-                /* Let's urlify the link to make it easy to view in an editor, but only if it is a text
-                 * file. Unified images are binary ELFs, and EFI variables are not pure text either. */
-                if (e->type == BOOT_ENTRY_CONF)
-                        (void) terminal_urlify_path(e->path, NULL, &link);
-
-                printf("       source: %s\n", link ?: e->path);
-        }
-        if (e->version)
-                printf("      version: %s\n", e->version);
-        if (e->machine_id)
-                printf("   machine-id: %s\n", e->machine_id);
-        if (e->architecture)
-                printf(" architecture: %s\n", e->architecture);
-        if (e->kernel)
-                boot_entry_file_list("linux", e->root, e->kernel, &status);
-
-        char **s;
-        STRV_FOREACH(s, e->initrd)
-                boot_entry_file_list(s == e->initrd ? "initrd" : NULL,
-                                     e->root,
-                                     *s,
-                                     &status);
-        if (!strv_isempty(e->options)) {
-                _cleanup_free_ char *t = NULL, *t2 = NULL;
-                _cleanup_strv_free_ char **ts = NULL;
-
-                t = strv_join(e->options, " ");
-                if (!t)
-                        return log_oom();
-
-                ts = strv_split_newlines(t);
-                if (!ts)
-                        return log_oom();
-
-                t2 = strv_join(ts, "\n              ");
-                if (!t2)
-                        return log_oom();
-
-                printf("      options: %s\n", t2);
-        }
-        if (e->device_tree)
-                boot_entry_file_list("devicetree", e->root, e->device_tree, &status);
-
-        return -status;
-}
-
-static int status_entries(
-                const char *esp_path,
-                sd_id128_t esp_partition_uuid,
-                const char *xbootldr_path,
-                sd_id128_t xbootldr_partition_uuid) {
-
-        _cleanup_(boot_config_free) BootConfig config = {};
-        sd_id128_t dollar_boot_partition_uuid;
-        const char *dollar_boot_path;
-        int r;
-
-        assert(esp_path || xbootldr_path);
-
-        if (xbootldr_path) {
-                dollar_boot_path = xbootldr_path;
-                dollar_boot_partition_uuid = xbootldr_partition_uuid;
-        } else {
-                dollar_boot_path = esp_path;
-                dollar_boot_partition_uuid = esp_partition_uuid;
-        }
-
-        printf("Boot Loader Entries:\n"
-               "        $BOOT: %s", dollar_boot_path);
-        if (!sd_id128_is_null(dollar_boot_partition_uuid))
-                printf(" (/dev/disk/by-partuuid/" SD_ID128_UUID_FORMAT_STR ")",
-                       SD_ID128_FORMAT_VAL(dollar_boot_partition_uuid));
-        printf("\n\n");
-
-        r = boot_entries_load_config(esp_path, xbootldr_path, &config);
-        if (r < 0)
-                return r;
-
-        if (config.default_entry < 0)
-                printf("%zu entries, no entry could be determined as default.\n", config.n_entries);
-        else {
-                printf("Default Boot Loader Entry:\n");
-
-                r = boot_entry_show(config.entries + config.default_entry, false);
-                if (r > 0)
-                        /* < 0 is already logged by the function itself, let's just emit an extra warning if
-                           the default entry is broken */
-                        printf("\nWARNING: default boot entry is broken\n");
-        }
-
-        return 0;
-}
-
-static int compare_product(const char *a, const char *b) {
-        size_t x, y;
-
-        assert(a);
-        assert(b);
-
-        x = strcspn(a, " ");
-        y = strcspn(b, " ");
-        if (x != y)
-                return x < y ? -1 : x > y ? 1 : 0;
-
-        return strncmp(a, b, x);
-}
-
-static int compare_version(const char *a, const char *b) {
-        assert(a);
-        assert(b);
-
-        a += strcspn(a, " ");
-        a += strspn(a, " ");
-        b += strcspn(b, " ");
-        b += strspn(b, " ");
-
-        return strverscmp_improved(a, b);
-}
-
-static int version_check(int fd_from, const char *from, int fd_to, const char *to) {
-        _cleanup_free_ char *a = NULL, *b = NULL;
-        int r;
-
-        assert(fd_from >= 0);
-        assert(from);
-        assert(fd_to >= 0);
-        assert(to);
-
-        r = get_file_version(fd_from, &a);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Source file \"%s\" does not carry version information!",
-                                       from);
-
-        r = get_file_version(fd_to, &b);
-        if (r < 0)
-                return r;
-        if (r == 0 || compare_product(a, b) != 0)
-                return log_notice_errno(SYNTHETIC_ERRNO(EEXIST),
-                                        "Skipping \"%s\", since it's owned by another boot loader.",
-                                        to);
-
-        if (compare_version(a, b) < 0)
-                return log_warning_errno(SYNTHETIC_ERRNO(ESTALE), "Skipping \"%s\", since a newer boot loader version exists already.", to);
-
-        return 0;
-}
-
-static int copy_file_with_version_check(const char *from, const char *to, bool force) {
-        _cleanup_close_ int fd_from = -1, fd_to = -1;
-        _cleanup_free_ char *t = NULL;
-        int r;
-
-        fd_from = open(from, O_RDONLY|O_CLOEXEC|O_NOCTTY);
-        if (fd_from < 0)
-                return log_error_errno(errno, "Failed to open \"%s\" for reading: %m", from);
-
-        if (!force) {
-                fd_to = open(to, O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                if (fd_to < 0) {
-                        if (errno != ENOENT)
-                                return log_error_errno(errno, "Failed to open \"%s\" for reading: %m", to);
-                } else {
-                        r = version_check(fd_from, from, fd_to, to);
-                        if (r < 0)
-                                return r;
-
-                        if (lseek(fd_from, 0, SEEK_SET) == (off_t) -1)
-                                return log_error_errno(errno, "Failed to seek in \"%s\": %m", from);
-
-                        fd_to = safe_close(fd_to);
-                }
-        }
-
-        r = tempfn_random(to, NULL, &t);
-        if (r < 0)
-                return log_oom();
-
-        RUN_WITH_UMASK(0000) {
-                fd_to = open(t, O_WRONLY|O_CREAT|O_CLOEXEC|O_EXCL|O_NOFOLLOW, 0644);
-                if (fd_to < 0)
-                        return log_error_errno(errno, "Failed to open \"%s\" for writing: %m", t);
-        }
-
-        r = copy_bytes(fd_from, fd_to, UINT64_MAX, COPY_REFLINK);
-        if (r < 0) {
-                (void) unlink(t);
-                return log_error_errno(r, "Failed to copy data from \"%s\" to \"%s\": %m", from, t);
-        }
-
-        (void) copy_times(fd_from, fd_to, 0);
-
-        if (fsync(fd_to) < 0) {
-                (void) unlink_noerrno(t);
-                return log_error_errno(errno, "Failed to copy data from \"%s\" to \"%s\": %m", from, t);
-        }
-
-        (void) fsync_directory_of_file(fd_to);
-
-        if (renameat(AT_FDCWD, t, AT_FDCWD, to) < 0) {
-                (void) unlink_noerrno(t);
-                return log_error_errno(errno, "Failed to rename \"%s\" to \"%s\": %m", t, to);
-        }
-
-        log_info("Copied \"%s\" to \"%s\".", from, to);
-
-        return 0;
-}
-
-static int mkdir_one(const char *prefix, const char *suffix) {
-        _cleanup_free_ char *p = NULL;
-
-        p = path_join(prefix, suffix);
-        if (mkdir(p, 0700) < 0) {
-                if (errno != EEXIST)
-                        return log_error_errno(errno, "Failed to create \"%s\": %m", p);
-        } else
-                log_info("Created \"%s\".", p);
-
-        return 0;
-}
-
-static const char *const esp_subdirs[] = {
-        /* The directories to place in the ESP */
-        "EFI",
-        "EFI/systemd",
-        "EFI/BOOT",
-        "loader",
-        NULL
-};
-
-static const char *const dollar_boot_subdirs[] = {
-        /* The directories to place in the XBOOTLDR partition or the ESP, depending what exists */
-        "loader",
-        "loader/entries",  /* Type #1 entries */
-        "EFI",
-        "EFI/Linux",       /* Type #2 entries */
-        NULL
-};
-
-static int create_subdirs(const char *root, const char * const *subdirs) {
-        const char *const *i;
-        int r;
-
-        STRV_FOREACH(i, subdirs) {
-                r = mkdir_one(root, *i);
-                if (r < 0)
-                        return r;
-        }
-
-        return 0;
-}
-
-static int copy_one_file(const char *esp_path, const char *name, bool force) {
-        const char *e;
-        char *p, *q;
-        int r;
-
-        p = strjoina(BOOTLIBDIR "/", name);
-        q = strjoina(esp_path, "/EFI/systemd/", name);
-        r = copy_file_with_version_check(p, q, force);
-
-        e = startswith(name, "systemd-boot");
-        if (e) {
-                int k;
-                char *v;
-
-                /* Create the EFI default boot loader name (specified for removable devices) */
-                v = strjoina(esp_path, "/EFI/BOOT/BOOT", e);
-                ascii_strupper(strrchr(v, '/') + 1);
-
-                k = copy_file_with_version_check(p, v, force);
-                if (k < 0 && r == 0)
-                        r = k;
-        }
-
-        return r;
-}
-
-static int install_binaries(const char *esp_path, bool force) {
-        struct dirent *de;
-        _cleanup_closedir_ DIR *d = NULL;
-        int r = 0;
-
-        d = opendir(BOOTLIBDIR);
-        if (!d)
-                return log_error_errno(errno, "Failed to open \""BOOTLIBDIR"\": %m");
-
-        FOREACH_DIRENT(de, d, return log_error_errno(errno, "Failed to read \""BOOTLIBDIR"\": %m")) {
-                int k;
-
-                if (!endswith_no_case(de->d_name, ".efi"))
-                        continue;
-
-                k = copy_one_file(esp_path, de->d_name, force);
-                if (k < 0 && r == 0)
-                        r = k;
-        }
-
-        return r;
-}
-
-static bool same_entry(uint16_t id, sd_id128_t uuid, const char *path) {
-        _cleanup_free_ char *opath = NULL;
-        sd_id128_t ouuid;
-        int r;
-
-        r = efi_get_boot_option(id, NULL, &ouuid, &opath, NULL);
-        if (r < 0)
-                return false;
-        if (!sd_id128_equal(uuid, ouuid))
-                return false;
-
-        /* Some motherboards convert the path to uppercase under certain circumstances
-         * (e.g. after booting into the Boot Menu in the ASUS ROG STRIX B350-F GAMING),
-         * so use case-insensitive checking */
-        if (!strcaseeq_ptr(path, opath))
-                return false;
-
-        return true;
-}
-
-static int find_slot(sd_id128_t uuid, const char *path, uint16_t *id) {
-        _cleanup_free_ uint16_t *options = NULL;
-        int n, i;
-
-        n = efi_get_boot_options(&options);
-        if (n < 0)
-                return n;
-
-        /* find already existing systemd-boot entry */
-        for (i = 0; i < n; i++)
-                if (same_entry(options[i], uuid, path)) {
-                        *id = options[i];
-                        return 1;
-                }
-
-        /* find free slot in the sorted BootXXXX variable list */
-        for (i = 0; i < n; i++)
-                if (i != options[i]) {
-                        *id = i;
-                        return 0;
-                }
-
-        /* use the next one */
-        if (i == 0xffff)
-                return -ENOSPC;
-        *id = i;
-        return 0;
-}
-
-static int insert_into_order(uint16_t slot, bool first) {
-        _cleanup_free_ uint16_t *order = NULL;
-        uint16_t *t;
-        int n;
-
-        n = efi_get_boot_order(&order);
-        if (n <= 0)
-                /* no entry, add us */
-                return efi_set_boot_order(&slot, 1);
-
-        /* are we the first and only one? */
-        if (n == 1 && order[0] == slot)
-                return 0;
-
-        /* are we already in the boot order? */
-        for (int i = 0; i < n; i++) {
-                if (order[i] != slot)
-                        continue;
-
-                /* we do not require to be the first one, all is fine */
-                if (!first)
-                        return 0;
-
-                /* move us to the first slot */
-                memmove(order + 1, order, i * sizeof(uint16_t));
-                order[0] = slot;
-                return efi_set_boot_order(order, n);
-        }
-
-        /* extend array */
-        t = reallocarray(order, n + 1, sizeof(uint16_t));
-        if (!t)
-                return -ENOMEM;
-        order = t;
-
-        /* add us to the top or end of the list */
-        if (first) {
-                memmove(order + 1, order, n * sizeof(uint16_t));
-                order[0] = slot;
-        } else
-                order[n] = slot;
-
-        return efi_set_boot_order(order, n + 1);
-}
-
-static int remove_from_order(uint16_t slot) {
-        _cleanup_free_ uint16_t *order = NULL;
-        int n;
-
-        n = efi_get_boot_order(&order);
-        if (n <= 0)
-                return n;
-
-        for (int i = 0; i < n; i++) {
-                if (order[i] != slot)
-                        continue;
-
-                if (i + 1 < n)
-                        memmove(order + i, order + i+1, (n - i) * sizeof(uint16_t));
-                return efi_set_boot_order(order, n - 1);
-        }
-
-        return 0;
-}
-
-static int install_variables(const char *esp_path,
-                             uint32_t part, uint64_t pstart, uint64_t psize,
-                             sd_id128_t uuid, const char *path,
-                             bool first) {
-        const char *p;
-        uint16_t slot;
-        int r;
-
-        if (!is_efi_boot()) {
-                log_warning("Not booted with EFI, skipping EFI variable setup.");
-                return 0;
-        }
-
-        p = prefix_roota(esp_path, path);
-        if (access(p, F_OK) < 0) {
-                if (errno == ENOENT)
-                        return 0;
-
-                return log_error_errno(errno, "Cannot access \"%s\": %m", p);
-        }
-
-        r = find_slot(uuid, path, &slot);
-        if (r < 0)
-                return log_error_errno(r,
-                                       r == -ENOENT ?
-                                       "Failed to access EFI variables. Is the \"efivarfs\" filesystem mounted?" :
-                                       "Failed to determine current boot order: %m");
-
-        if (first || r == 0) {
-                r = efi_add_boot_option(slot, "Linux Boot Manager",
-                                        part, pstart, psize,
-                                        uuid, path);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to create EFI Boot variable entry: %m");
-
-                log_info("Created EFI boot entry \"Linux Boot Manager\".");
-        }
-
-        return insert_into_order(slot, first);
-}
-
-static int remove_boot_efi(const char *esp_path) {
-        _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
-        const char *p;
-        int r, c = 0;
-
-        p = prefix_roota(esp_path, "/EFI/BOOT");
-        d = opendir(p);
-        if (!d) {
-                if (errno == ENOENT)
-                        return 0;
-
-                return log_error_errno(errno, "Failed to open directory \"%s\": %m", p);
-        }
-
-        FOREACH_DIRENT(de, d, break) {
-                _cleanup_close_ int fd = -1;
-                _cleanup_free_ char *v = NULL;
-
-                if (!endswith_no_case(de->d_name, ".efi"))
-                        continue;
-
-                if (!startswith_no_case(de->d_name, "boot"))
-                        continue;
-
-                fd = openat(dirfd(d), de->d_name, O_RDONLY|O_CLOEXEC);
-                if (fd < 0)
-                        return log_error_errno(errno, "Failed to open \"%s/%s\" for reading: %m", p, de->d_name);
-
-                r = get_file_version(fd, &v);
-                if (r < 0)
-                        return r;
-                if (r > 0 && startswith(v, "systemd-boot ")) {
-                        r = unlinkat(dirfd(d), de->d_name, 0);
-                        if (r < 0)
-                                return log_error_errno(errno, "Failed to remove \"%s/%s\": %m", p, de->d_name);
-
-                        log_info("Removed \"%s/%s\".", p, de->d_name);
-                }
-
-                c++;
-        }
-
-        return c;
-}
-
-static int rmdir_one(const char *prefix, const char *suffix) {
-        const char *p;
-
-        p = prefix_roota(prefix, suffix);
-        if (rmdir(p) < 0) {
-                bool ignore = IN_SET(errno, ENOENT, ENOTEMPTY);
-
-                log_full_errno(ignore ? LOG_DEBUG : LOG_ERR, errno,
-                               "Failed to remove directory \"%s\": %m", p);
-                if (!ignore)
-                        return -errno;
-        } else
-                log_info("Removed \"%s\".", p);
-
-        return 0;
-}
-
-static int remove_subdirs(const char *root, const char *const *subdirs) {
-        int r, q;
-
-        /* We use recursion here to destroy the directories in reverse order. Which should be safe given how
-         * short the array is. */
-
-        if (!subdirs[0]) /* A the end of the list */
-                return 0;
-
-        r = remove_subdirs(root, subdirs + 1);
-        q = rmdir_one(root, subdirs[0]);
-
-        return r < 0 ? r : q;
-}
-
-static int remove_machine_id_directory(const char *root) {
-        sd_id128_t machine_id;
-        char buf[SD_ID128_STRING_MAX];
-        int r;
-
-        assert(root);
-        assert(arg_make_machine_id_directory >= 0);
-
-        if (!arg_make_machine_id_directory)
-                return 0;
-
-        r = sd_id128_get_machine(&machine_id);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get machine id: %m");
-
-        return rmdir_one(root, sd_id128_to_string(machine_id, buf));
-}
-
-static int remove_binaries(const char *esp_path) {
-        const char *p;
-        int r, q;
-
-        p = prefix_roota(esp_path, "/EFI/systemd");
-        r = rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL);
-
-        q = remove_boot_efi(esp_path);
-        if (q < 0 && r == 0)
-                r = q;
-
-        return r;
-}
-
-static int remove_file(const char *root, const char *file) {
-        const char *p;
-
-        assert(root);
-        assert(file);
-
-        p = prefix_roota(root, file);
-        if (unlink(p) < 0) {
-                log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, errno,
-                               "Failed to unlink file \"%s\": %m", p);
-
-                return errno == ENOENT ? 0 : -errno;
-        }
-
-        log_info("Removed \"%s\".", p);
-        return 1;
-}
-
-static int remove_variables(sd_id128_t uuid, const char *path, bool in_order) {
-        uint16_t slot;
-        int r;
-
-        if (!is_efi_boot())
-                return 0;
-
-        r = find_slot(uuid, path, &slot);
-        if (r != 1)
-                return 0;
-
-        r = efi_remove_boot_option(slot);
-        if (r < 0)
-                return r;
-
-        if (in_order)
-                return remove_from_order(slot);
-
-        return 0;
-}
-
-static int remove_loader_variables(void) {
-        const char *variable;
-        int r = 0;
-
-        /* Remove all persistent loader variables we define */
-
-        FOREACH_STRING(variable,
-                       EFI_LOADER_VARIABLE(LoaderConfigTimeout),
-                       EFI_LOADER_VARIABLE(LoaderConfigTimeoutOneShot),
-                       EFI_LOADER_VARIABLE(LoaderEntryDefault),
-                       EFI_LOADER_VARIABLE(LoaderEntryOneShot),
-                       EFI_LOADER_VARIABLE(LoaderSystemToken)){
-
-                int q;
-
-                q = efi_set_variable(variable, NULL, 0);
-                if (q == -ENOENT)
-                        continue;
-                if (q < 0) {
-                        log_warning_errno(q, "Failed to remove EFI variable %s: %m", variable);
-                        if (r >= 0)
-                                r = q;
-                } else
-                        log_info("Removed EFI variable %s.", variable);
-        }
-
-        return r;
-}
-
-static int install_loader_config(const char *esp_path) {
-        _cleanup_(unlink_and_freep) char *t = NULL;
-        _cleanup_fclose_ FILE *f = NULL;
-        _cleanup_close_ int fd = -1;
-        sd_id128_t machine_id;
-        char machine_string[SD_ID128_STRING_MAX];
-        const char *p;
-        int r;
-
-        assert(arg_make_machine_id_directory >= 0);
-
-        p = prefix_roota(esp_path, "/loader/loader.conf");
-        if (access(p, F_OK) >= 0) /* Silently skip creation if the file already exists (early check) */
-                return 0;
-
-        fd = open_tmpfile_linkable(p, O_WRONLY|O_CLOEXEC, &t);
-        if (fd < 0)
-                return log_error_errno(fd, "Failed to open \"%s\" for writing: %m", p);
-
-        f = take_fdopen(&fd, "w");
-        if (!f)
-                return log_oom();
-
-        fprintf(f, "#timeout 3\n"
-                   "#console-mode keep\n");
-        if (arg_make_machine_id_directory) {
-                r = sd_id128_get_machine(&machine_id);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get machine id: %m");
-
-                fprintf(f, "default %s-*\n", sd_id128_to_string(machine_id, machine_string));
-        }
-
-        r = fflush_sync_and_check(f);
-        if (r < 0)
-                return log_error_errno(r, "Failed to write \"%s\": %m", p);
-
-        r = link_tmpfile(fileno(f), t, p);
-        if (r == -EEXIST)
-                return 0; /* Silently skip creation if the file exists now (recheck) */
-        if (r < 0)
-                return log_error_errno(r, "Failed to move \"%s\" into place: %m", p);
-
-        t = mfree(t);
-        return 1;
-}
-
-static int install_machine_id_directory(const char *root) {
-        sd_id128_t machine_id;
-        char buf[SD_ID128_STRING_MAX];
-        int r;
-
-        assert(root);
-        assert(arg_make_machine_id_directory >= 0);
-
-        if (!arg_make_machine_id_directory)
-                return 0;
-
-        r = sd_id128_get_machine(&machine_id);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get machine id: %m");
-
-        return mkdir_one(root, sd_id128_to_string(machine_id, buf));
-}
-
 static int help(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *link = NULL;
         int r;
@@ -1078,37 +131,60 @@
         if (r < 0)
                 return log_oom();
 
-        printf("%1$s  [OPTIONS...] COMMAND ...\n"
+        printf("%1$s [OPTIONS...] COMMAND ...\n"
                "\n%5$sControl EFI firmware boot settings and manage boot loader.%6$s\n"
                "\n%3$sGeneric EFI Firmware/Boot Loader Commands:%4$s\n"
-               "  status              Show status of installed boot loader and EFI variables\n"
+               "  status               Show status of installed boot loader and EFI variables\n"
                "  reboot-to-firmware [BOOL]\n"
-               "                      Query or set reboot-to-firmware EFI flag\n"
+               "                       Query or set reboot-to-firmware EFI flag\n"
                "  systemd-efi-options [STRING]\n"
-               "                      Query or set system options string in EFI variable\n"
+               "                       Query or set system options string in EFI variable\n"
                "\n%3$sBoot Loader Specification Commands:%4$s\n"
-               "  list                List boot loader entries\n"
-               "  set-default ID      Set default boot loader entry\n"
-               "  set-oneshot ID      Set default boot loader entry, for next boot only\n"
+               "  list                 List boot loader entries\n"
+               "  unlink ID            Remove boot loader entry\n"
+               "  cleanup              Remove files in ESP not referenced in any boot entry\n"
+               "\n%3$sBoot Loader Interface Commands:%4$s\n"
+               "  set-default ID       Set default boot loader entry\n"
+               "  set-oneshot ID       Set default boot loader entry, for next boot only\n"
+               "  set-timeout SECONDS  Set the menu timeout\n"
+               "  set-timeout-oneshot SECONDS\n"
+               "                       Set the menu timeout for the next boot only\n"
                "\n%3$ssystemd-boot Commands:%4$s\n"
-               "  install             Install systemd-boot to the ESP and EFI variables\n"
-               "  update              Update systemd-boot in the ESP and EFI variables\n"
-               "  remove              Remove systemd-boot from the ESP and EFI variables\n"
-               "  is-installed        Test whether systemd-boot is installed in the ESP\n"
-               "  random-seed         Initialize random seed in ESP and EFI variables\n"
+               "  install              Install systemd-boot to the ESP and EFI variables\n"
+               "  update               Update systemd-boot in the ESP and EFI variables\n"
+               "  remove               Remove systemd-boot from the ESP and EFI variables\n"
+               "  is-installed         Test whether systemd-boot is installed in the ESP\n"
+               "  random-seed          Initialize random seed in ESP and EFI variables\n"
+               "\n%3$sKernel Image Commands:%4$s\n"
+               "  kernel-identify      Identify kernel image type\n"
+               "  kernel-inspect       Prints details about the kernel image\n"
                "\n%3$sOptions:%4$s\n"
                "  -h --help            Show this help\n"
                "     --version         Print version\n"
                "     --esp-path=PATH   Path to the EFI System Partition (ESP)\n"
                "     --boot-path=PATH  Path to the $BOOT partition\n"
+               "     --root=PATH       Operate on an alternate filesystem root\n"
+               "     --image=PATH      Operate on disk image as filesystem root\n"
+               "     --install-source=auto|image|host\n"
+               "                       Where to pick files when using --root=/--image=\n"
                "  -p --print-esp-path  Print path to the EFI System Partition\n"
                "  -x --print-boot-path Print path to the $BOOT partition\n"
                "     --no-variables    Don't touch EFI variables\n"
                "     --no-pager        Do not pipe output into a pager\n"
                "     --graceful        Don't fail when the ESP cannot be found or EFI\n"
                "                       variables cannot be written\n"
-               "     --make-machine-id-directory=yes|no|auto\n"
-               "                       Create $BOOT/$MACHINE_ID\n"
+               "  -q --quiet           Suppress output\n"
+               "     --make-entry-directory=yes|no|auto\n"
+               "                       Create $BOOT/ENTRY-TOKEN/ directory\n"
+               "     --entry-token=machine-id|os-id|os-image-id|auto|literal:…\n"
+               "                       Entry token to use for this installation\n"
+               "     --json=pretty|short|off\n"
+               "                       Generate JSON output\n"
+               "     --all-architectures\n"
+               "                       Install all supported EFI architectures\n"
+               "     --efi-boot-option-description=DESCRIPTION\n"
+               "                       Description of the entry in the boot option list\n"
+               "     --dry-run         Dry run (unlink and cleanup)\n"
                "\nSee the %2$s for details.\n",
                program_invocation_short_name,
                link,
@@ -1124,26 +200,44 @@
         enum {
                 ARG_ESP_PATH = 0x100,
                 ARG_BOOT_PATH,
+                ARG_ROOT,
+                ARG_IMAGE,
+                ARG_INSTALL_SOURCE,
                 ARG_VERSION,
                 ARG_NO_VARIABLES,
                 ARG_NO_PAGER,
                 ARG_GRACEFUL,
-                ARG_MAKE_MACHINE_ID_DIRECTORY,
+                ARG_MAKE_ENTRY_DIRECTORY,
+                ARG_ENTRY_TOKEN,
+                ARG_JSON,
+                ARG_ARCH_ALL,
+                ARG_EFI_BOOT_OPTION_DESCRIPTION,
+                ARG_DRY_RUN,
         };
 
         static const struct option options[] = {
-                { "help",                      no_argument,       NULL, 'h'                           },
-                { "version",                   no_argument,       NULL, ARG_VERSION                   },
-                { "esp-path",                  required_argument, NULL, ARG_ESP_PATH                  },
-                { "path",                      required_argument, NULL, ARG_ESP_PATH                  }, /* Compatibility alias */
-                { "boot-path",                 required_argument, NULL, ARG_BOOT_PATH                 },
-                { "print-esp-path",            no_argument,       NULL, 'p'                           },
-                { "print-path",                no_argument,       NULL, 'p'                           }, /* Compatibility alias */
-                { "print-boot-path",           no_argument,       NULL, 'x'                           },
-                { "no-variables",              no_argument,       NULL, ARG_NO_VARIABLES              },
-                { "no-pager",                  no_argument,       NULL, ARG_NO_PAGER                  },
-                { "graceful",                  no_argument,       NULL, ARG_GRACEFUL                  },
-                { "make-machine-id-directory", required_argument, NULL, ARG_MAKE_MACHINE_ID_DIRECTORY },
+                { "help",                        no_argument,       NULL, 'h'                             },
+                { "version",                     no_argument,       NULL, ARG_VERSION                     },
+                { "esp-path",                    required_argument, NULL, ARG_ESP_PATH                    },
+                { "path",                        required_argument, NULL, ARG_ESP_PATH                    }, /* Compatibility alias */
+                { "boot-path",                   required_argument, NULL, ARG_BOOT_PATH                   },
+                { "root",                        required_argument, NULL, ARG_ROOT                        },
+                { "image",                       required_argument, NULL, ARG_IMAGE                       },
+                { "install-source",              required_argument, NULL, ARG_INSTALL_SOURCE              },
+                { "print-esp-path",              no_argument,       NULL, 'p'                             },
+                { "print-path",                  no_argument,       NULL, 'p'                             }, /* Compatibility alias */
+                { "print-boot-path",             no_argument,       NULL, 'x'                             },
+                { "no-variables",                no_argument,       NULL, ARG_NO_VARIABLES                },
+                { "no-pager",                    no_argument,       NULL, ARG_NO_PAGER                    },
+                { "graceful",                    no_argument,       NULL, ARG_GRACEFUL                    },
+                { "quiet",                       no_argument,       NULL, 'q'                             },
+                { "make-entry-directory",        required_argument, NULL, ARG_MAKE_ENTRY_DIRECTORY        },
+                { "make-machine-id-directory",   required_argument, NULL, ARG_MAKE_ENTRY_DIRECTORY        }, /* Compatibility alias */
+                { "entry-token",                 required_argument, NULL, ARG_ENTRY_TOKEN                 },
+                { "json",                        required_argument, NULL, ARG_JSON                        },
+                { "all-architectures",           no_argument,       NULL, ARG_ARCH_ALL                    },
+                { "efi-boot-option-description", required_argument, NULL, ARG_EFI_BOOT_OPTION_DESCRIPTION },
+                { "dry-run",                     no_argument,       NULL, ARG_DRY_RUN                     },
                 {}
         };
 
@@ -1175,6 +269,31 @@
                                 return log_oom();
                         break;
 
+                case ARG_ROOT:
+                        r = parse_path_argument(optarg, /* suppress_root= */ true, &arg_root);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_IMAGE:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_INSTALL_SOURCE:
+                        if (streq(optarg, "auto"))
+                                arg_install_source = ARG_INSTALL_SOURCE_AUTO;
+                        else if (streq(optarg, "image"))
+                                arg_install_source = ARG_INSTALL_SOURCE_IMAGE;
+                        else if (streq(optarg, "host"))
+                                arg_install_source = ARG_INSTALL_SOURCE_HOST;
+                        else
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Unexpected parameter for --install-source=: %s", optarg);
+
+                        break;
+
                 case 'p':
                         if (arg_print_dollar_boot_path)
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -1201,726 +320,102 @@
                         arg_graceful = true;
                         break;
 
-                case ARG_MAKE_MACHINE_ID_DIRECTORY:
-                        if (streq(optarg, "auto"))
-                                arg_make_machine_id_directory = -1;  /* default */
-                        else {
-                                r = parse_boolean_argument("--make-machine-id-directory=", optarg, &b);
+                case 'q':
+                        arg_quiet = true;
+                        break;
+
+                case ARG_ENTRY_TOKEN: {
+                        const char *e;
+
+                        if (streq(optarg, "machine-id")) {
+                                arg_entry_token_type = ARG_ENTRY_TOKEN_MACHINE_ID;
+                                arg_entry_token = mfree(arg_entry_token);
+                        } else if (streq(optarg, "os-image-id")) {
+                                arg_entry_token_type = ARG_ENTRY_TOKEN_OS_IMAGE_ID;
+                                arg_entry_token = mfree(arg_entry_token);
+                        } else if (streq(optarg, "os-id")) {
+                                arg_entry_token_type = ARG_ENTRY_TOKEN_OS_ID;
+                                arg_entry_token = mfree(arg_entry_token);
+                        } else if ((e = startswith(optarg, "literal:"))) {
+                                arg_entry_token_type = ARG_ENTRY_TOKEN_LITERAL;
+
+                                r = free_and_strdup_warn(&arg_entry_token, e);
                                 if (r < 0)
                                         return r;
-                                arg_make_machine_id_directory = b;
+                        } else
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Unexpected parameter for --entry-token=: %s", optarg);
+
+                        break;
+                }
+
+                case ARG_MAKE_ENTRY_DIRECTORY:
+                        if (streq(optarg, "auto"))  /* retained for backwards compatibility */
+                                arg_make_entry_directory = -1; /* yes if machine-id is permanent */
+                        else {
+                                r = parse_boolean_argument("--make-entry-directory=", optarg, &b);
+                                if (r < 0)
+                                        return r;
+
+                                arg_make_entry_directory = b;
                         }
                         break;
 
+                case ARG_JSON:
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
+                        break;
+
+                case ARG_ARCH_ALL:
+                        arg_arch_all = true;
+                        break;
+
+                case ARG_EFI_BOOT_OPTION_DESCRIPTION:
+                        if (isempty(optarg) || !(string_is_safe(optarg) && utf8_is_valid(optarg))) {
+                                _cleanup_free_ char *escaped = NULL;
+
+                                escaped = cescape(optarg);
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Invalid --efi-boot-option-description=: %s", strna(escaped));
+                        }
+                        if (strlen(optarg) > EFI_BOOT_OPTION_DESCRIPTION_MAX)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "--efi-boot-option-description= too long: %zu > %zu", strlen(optarg), EFI_BOOT_OPTION_DESCRIPTION_MAX);
+                        r = free_and_strdup_warn(&arg_efi_boot_option_description, optarg);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_DRY_RUN:
+                        arg_dry_run = true;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
+        if ((arg_root || arg_image) && argv[optind] && !STR_IN_SET(argv[optind], "status", "list",
+                        "install", "update", "remove", "is-installed", "random-seed", "unlink", "cleanup"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Options --root= and --image= are not supported with verb %s.",
+                                       argv[optind]);
+
+        if (arg_root && arg_image)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Please specify either --root= or --image=, the combination of both is not supported.");
+
+        if (arg_install_source != ARG_INSTALL_SOURCE_AUTO && !arg_root && !arg_image)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--install-from-host is only supported with --root= or --image=.");
+
+        if (arg_dry_run && argv[optind] && !STR_IN_SET(argv[optind], "unlink", "cleanup"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--dry is only supported with --unlink or --cleanup");
+
         return 1;
 }
 
-static void read_efi_var(const char *variable, char **ret) {
-        int r;
-
-        r = efi_get_variable_string(variable, ret);
-        if (r < 0 && r != -ENOENT)
-                log_warning_errno(r, "Failed to read EFI variable %s: %m", variable);
-}
-
-static void print_yes_no_line(bool first, bool good, const char *name) {
-        printf("%s%s%s%s %s\n",
-               first ? "     Features: " : "               ",
-               ansi_highlight_green_red(good),
-               special_glyph_check_mark(good),
-               ansi_normal(),
-               name);
-}
-
-static int verb_status(int argc, char *argv[], void *userdata) {
-        sd_id128_t esp_uuid = SD_ID128_NULL, xbootldr_uuid = SD_ID128_NULL;
-        int r, k;
-
-        r = acquire_esp(geteuid() != 0, NULL, NULL, NULL, &esp_uuid);
-        if (arg_print_esp_path) {
-                if (r == -EACCES) /* If we couldn't acquire the ESP path, log about access errors (which is the only
-                                   * error the find_esp_and_warn() won't log on its own) */
-                        return log_error_errno(r, "Failed to determine ESP location: %m");
-                if (r < 0)
-                        return r;
-
-                puts(arg_esp_path);
-        }
-
-        r = acquire_xbootldr(geteuid() != 0, &xbootldr_uuid);
-        if (arg_print_dollar_boot_path) {
-                if (r == -EACCES)
-                        return log_error_errno(r, "Failed to determine XBOOTLDR location: %m");
-                if (r < 0)
-                        return r;
-
-                const char *path = arg_dollar_boot_path();
-                if (!path)
-                        return log_error_errno(SYNTHETIC_ERRNO(EACCES), "Failed to determine XBOOTLDR location: %m");
-
-                puts(path);
-        }
-
-        if (arg_print_esp_path || arg_print_dollar_boot_path)
-                return 0;
-
-        r = 0; /* If we couldn't determine the path, then don't consider that a problem from here on, just show what we
-                * can show */
-
-        (void) pager_open(arg_pager_flags);
-
-        if (is_efi_boot()) {
-                static const struct {
-                        uint64_t flag;
-                        const char *name;
-                } flags[] = {
-                        { EFI_LOADER_FEATURE_BOOT_COUNTING,           "Boot counting"                         },
-                        { EFI_LOADER_FEATURE_CONFIG_TIMEOUT,          "Menu timeout control"                  },
-                        { EFI_LOADER_FEATURE_CONFIG_TIMEOUT_ONE_SHOT, "One-shot menu timeout control"         },
-                        { EFI_LOADER_FEATURE_ENTRY_DEFAULT,           "Default entry control"                 },
-                        { EFI_LOADER_FEATURE_ENTRY_ONESHOT,           "One-shot entry control"                },
-                        { EFI_LOADER_FEATURE_XBOOTLDR,                "Support for XBOOTLDR partition"        },
-                        { EFI_LOADER_FEATURE_RANDOM_SEED,             "Support for passing random seed to OS" },
-                };
-
-                _cleanup_free_ char *fw_type = NULL, *fw_info = NULL, *loader = NULL, *loader_path = NULL, *stub = NULL;
-                sd_id128_t loader_part_uuid = SD_ID128_NULL;
-                uint64_t loader_features = 0;
-                int have;
-
-                read_efi_var(EFI_LOADER_VARIABLE(LoaderFirmwareType), &fw_type);
-                read_efi_var(EFI_LOADER_VARIABLE(LoaderFirmwareInfo), &fw_info);
-                read_efi_var(EFI_LOADER_VARIABLE(LoaderInfo), &loader);
-                read_efi_var(EFI_LOADER_VARIABLE(StubInfo), &stub);
-                read_efi_var(EFI_LOADER_VARIABLE(LoaderImageIdentifier), &loader_path);
-                (void) efi_loader_get_features(&loader_features);
-
-                if (loader_path)
-                        efi_tilt_backslashes(loader_path);
-
-                k = efi_loader_get_device_part_uuid(&loader_part_uuid);
-                if (k < 0 && k != -ENOENT)
-                        r = log_warning_errno(k, "Failed to read EFI variable LoaderDevicePartUUID: %m");
-
-                printf("System:\n");
-                printf("     Firmware: %s%s (%s)%s\n", ansi_highlight(), strna(fw_type), strna(fw_info), ansi_normal());
-                printf("  Secure Boot: %sd\n", enable_disable(is_efi_secure_boot()));
-                printf("   Setup Mode: %s\n", is_efi_secure_boot_setup_mode() ? "setup" : "user");
-                printf(" TPM2 Support: %s\n", yes_no(efi_has_tpm2()));
-
-                k = efi_get_reboot_to_firmware();
-                if (k > 0)
-                        printf(" Boot into FW: %sactive%s\n", ansi_highlight_yellow(), ansi_normal());
-                else if (k == 0)
-                        printf(" Boot into FW: supported\n");
-                else if (k == -EOPNOTSUPP)
-                        printf(" Boot into FW: not supported\n");
-                else {
-                        errno = -k;
-                        printf(" Boot into FW: %sfailed%s (%m)\n", ansi_highlight_red(), ansi_normal());
-                }
-                printf("\n");
-
-                printf("Current Boot Loader:\n");
-                printf("      Product: %s%s%s\n", ansi_highlight(), strna(loader), ansi_normal());
-
-                for (size_t i = 0; i < ELEMENTSOF(flags); i++)
-                        print_yes_no_line(i == 0, FLAGS_SET(loader_features, flags[i].flag), flags[i].name);
-
-                sd_id128_t bootloader_esp_uuid;
-                bool have_bootloader_esp_uuid = efi_loader_get_device_part_uuid(&bootloader_esp_uuid) >= 0;
-
-                print_yes_no_line(false, have_bootloader_esp_uuid, "Boot loader sets ESP information");
-                if (have_bootloader_esp_uuid && !sd_id128_equal(esp_uuid, bootloader_esp_uuid))
-                        printf("WARNING: The boot loader reports a different ESP UUID than detected!\n");
-
-                if (stub)
-                        printf("         Stub: %s\n", stub);
-                if (!sd_id128_is_null(loader_part_uuid))
-                        printf("          ESP: /dev/disk/by-partuuid/" SD_ID128_UUID_FORMAT_STR "\n",
-                               SD_ID128_FORMAT_VAL(loader_part_uuid));
-                else
-                        printf("          ESP: n/a\n");
-                printf("         File: %s%s\n", special_glyph(SPECIAL_GLYPH_TREE_RIGHT), strna(loader_path));
-                printf("\n");
-
-                printf("Random Seed:\n");
-                have = access(EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderRandomSeed)), F_OK) >= 0;
-                printf(" Passed to OS: %s\n", yes_no(have));
-                have = access(EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderSystemToken)), F_OK) >= 0;
-                printf(" System Token: %s\n", have ? "set" : "not set");
-
-                if (arg_esp_path) {
-                        _cleanup_free_ char *p = NULL;
-
-                        p = path_join(arg_esp_path, "/loader/random-seed");
-                        if (!p)
-                                return log_oom();
-
-                        have = access(p, F_OK) >= 0;
-                        printf("       Exists: %s\n", yes_no(have));
-                }
-
-                printf("\n");
-        } else
-                printf("System:\n    Not booted with EFI\n\n");
-
-        if (arg_esp_path) {
-                k = status_binaries(arg_esp_path, esp_uuid);
-                if (k < 0)
-                        r = k;
-        }
-
-        if (is_efi_boot()) {
-                k = status_variables();
-                if (k < 0)
-                        r = k;
-        }
-
-        if (arg_esp_path || arg_xbootldr_path) {
-                k = status_entries(arg_esp_path, esp_uuid, arg_xbootldr_path, xbootldr_uuid);
-                if (k < 0)
-                        r = k;
-        }
-
-        return r;
-}
-
-static int verb_list(int argc, char *argv[], void *userdata) {
-        _cleanup_(boot_config_free) BootConfig config = {};
-        _cleanup_strv_free_ char **efi_entries = NULL;
-        int r;
-
-        /* If we lack privileges we invoke find_esp_and_warn() in "unprivileged mode" here, which does two things: turn
-         * off logging about access errors and turn off potentially privileged device probing. Here we're interested in
-         * the latter but not the former, hence request the mode, and log about EACCES. */
-
-        r = acquire_esp(geteuid() != 0, NULL, NULL, NULL, NULL);
-        if (r == -EACCES) /* We really need the ESP path for this call, hence also log about access errors */
-                return log_error_errno(r, "Failed to determine ESP: %m");
-        if (r < 0)
-                return r;
-
-        r = acquire_xbootldr(geteuid() != 0, NULL);
-        if (r == -EACCES)
-                return log_error_errno(r, "Failed to determine XBOOTLDR partition: %m");
-        if (r < 0)
-                return r;
-
-        r = boot_entries_load_config(arg_esp_path, arg_xbootldr_path, &config);
-        if (r < 0)
-                return r;
-
-        r = efi_loader_get_entries(&efi_entries);
-        if (r == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
-                log_debug_errno(r, "Boot loader reported no entries.");
-        else if (r < 0)
-                log_warning_errno(r, "Failed to determine entries reported by boot loader, ignoring: %m");
-        else
-                (void) boot_entries_augment_from_loader(&config, efi_entries, false);
-
-        if (config.n_entries == 0)
-                log_info("No boot loader entries found.");
-        else {
-                (void) pager_open(arg_pager_flags);
-
-                printf("Boot Loader Entries:\n");
-
-                for (size_t n = 0; n < config.n_entries; n++) {
-                        r = boot_entry_show(config.entries + n, n == (size_t) config.default_entry);
-                        if (r < 0)
-                                return r;
-
-                        if (n+1 < config.n_entries)
-                                putchar('\n');
-                }
-        }
-
-        return 0;
-}
-
-static int install_random_seed(const char *esp) {
-        _cleanup_(unlink_and_freep) char *tmp = NULL;
-        _cleanup_free_ void *buffer = NULL;
-        _cleanup_free_ char *path = NULL;
-        _cleanup_close_ int fd = -1;
-        size_t sz, token_size;
-        ssize_t n;
-        int r;
-
-        assert(esp);
-
-        path = path_join(esp, "/loader/random-seed");
-        if (!path)
-                return log_oom();
-
-        sz = random_pool_size();
-
-        buffer = malloc(sz);
-        if (!buffer)
-                return log_oom();
-
-        r = genuine_random_bytes(buffer, sz, RANDOM_BLOCK);
-        if (r < 0)
-                return log_error_errno(r, "Failed to acquire random seed: %m");
-
-        /* Normally create_subdirs() should already have created everything we need, but in case "bootctl
-         * random-seed" is called we want to just create the minimum we need for it, and not the full
-         * list. */
-        r = mkdir_parents(path, 0755);
-        if (r < 0)
-                return log_error_errno(r, "Failed to create parent directory for %s: %m", path);
-
-        r = tempfn_random(path, "bootctl", &tmp);
-        if (r < 0)
-                return log_oom();
-
-        fd = open(tmp, O_CREAT|O_EXCL|O_NOFOLLOW|O_NOCTTY|O_WRONLY|O_CLOEXEC, 0600);
-        if (fd < 0) {
-                tmp = mfree(tmp);
-                return log_error_errno(fd, "Failed to open random seed file for writing: %m");
-        }
-
-        n = write(fd, buffer, sz);
-        if (n < 0)
-                return log_error_errno(errno, "Failed to write random seed file: %m");
-        if ((size_t) n != sz)
-                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short write while writing random seed file.");
-
-        if (rename(tmp, path) < 0)
-                return log_error_errno(r, "Failed to move random seed file into place: %m");
-
-        tmp = mfree(tmp);
-
-        log_info("Random seed file %s successfully written (%zu bytes).", path, sz);
-
-        if (!arg_touch_variables)
-                return 0;
-
-        if (!is_efi_boot()) {
-                log_notice("Not booted with EFI, skipping EFI variable setup.");
-                return 0;
-        }
-
-        r = getenv_bool("SYSTEMD_WRITE_SYSTEM_TOKEN");
-        if (r < 0) {
-                if (r != -ENXIO)
-                         log_warning_errno(r, "Failed to parse $SYSTEMD_WRITE_SYSTEM_TOKEN, ignoring.");
-
-                if (detect_vm() > 0) {
-                        /* Let's not write a system token if we detect we are running in a VM
-                         * environment. Why? Our default security model for the random seed uses the system
-                         * token as a mechanism to ensure we are not vulnerable to golden master sloppiness
-                         * issues, i.e. that people initialize the random seed file, then copy the image to
-                         * many systems and end up with the same random seed in each that is assumed to be
-                         * valid but in reality is the same for all machines. By storing a system token in
-                         * the EFI variable space we can make sure that even though the random seeds on disk
-                         * are all the same they will be different on each system under the assumption that
-                         * the EFI variable space is maintained separate from the random seed storage. That
-                         * is generally the case on physical systems, as the ESP is stored on persistent
-                         * storage, and the EFI variables in NVRAM. However in virtualized environments this
-                         * is generally not true: the EFI variable set is typically stored along with the
-                         * disk image itself. For example, using the OVMF EFI firmware the EFI variables are
-                         * stored in a file in the ESP itself. */
-
-                        log_notice("Not installing system token, since we are running in a virtualized environment.");
-                        return 0;
-                }
-        } else if (r == 0) {
-                log_notice("Not writing system token, because $SYSTEMD_WRITE_SYSTEM_TOKEN is set to false.");
-                return 0;
-        }
-
-        r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderSystemToken), NULL, NULL, &token_size);
-        if (r == -ENODATA)
-                log_debug_errno(r, "LoaderSystemToken EFI variable is invalid (too short?), replacing.");
-        else if (r < 0) {
-                if (r != -ENOENT)
-                        return log_error_errno(r, "Failed to test system token validity: %m");
-        } else {
-                if (token_size >= sz) {
-                        /* Let's avoid writes if we can, and initialize this only once. */
-                        log_debug("System token already written, not updating.");
-                        return 0;
-                }
-
-                log_debug("Existing system token size (%zu) does not match our expectations (%zu), replacing.", token_size, sz);
-        }
-
-        r = genuine_random_bytes(buffer, sz, RANDOM_BLOCK);
-        if (r < 0)
-                return log_error_errno(r, "Failed to acquire random seed: %m");
-
-        /* Let's write this variable with an umask in effect, so that unprivileged users can't see the token
-         * and possibly get identification information or too much insight into the kernel's entropy pool
-         * state. */
-        RUN_WITH_UMASK(0077) {
-                r = efi_set_variable(EFI_LOADER_VARIABLE(LoaderSystemToken), buffer, sz);
-                if (r < 0) {
-                        if (!arg_graceful)
-                                return log_error_errno(r, "Failed to write 'LoaderSystemToken' EFI variable: %m");
-
-                        if (r == -EINVAL)
-                                log_warning_errno(r, "Unable to write 'LoaderSystemToken' EFI variable (firmware problem?), ignoring: %m");
-                        else
-                                log_warning_errno(r, "Unable to write 'LoaderSystemToken' EFI variable, ignoring: %m");
-                } else
-                        log_info("Successfully initialized system token in EFI variable with %zu bytes.", sz);
-        }
-
-        return 0;
-}
-
-static int sync_everything(void) {
-        int ret = 0, k;
-
-        if (arg_esp_path) {
-                k = syncfs_path(AT_FDCWD, arg_esp_path);
-                if (k < 0)
-                        ret = log_error_errno(k, "Failed to synchronize the ESP '%s': %m", arg_esp_path);
-        }
-
-        if (arg_xbootldr_path) {
-                k = syncfs_path(AT_FDCWD, arg_xbootldr_path);
-                if (k < 0)
-                        ret = log_error_errno(k, "Failed to synchronize $BOOT '%s': %m", arg_xbootldr_path);
-        }
-
-        return ret;
-}
-
-static int verb_install(int argc, char *argv[], void *userdata) {
-        sd_id128_t uuid = SD_ID128_NULL;
-        uint64_t pstart = 0, psize = 0;
-        uint32_t part = 0;
-        bool install;
-        int r;
-
-        r = acquire_esp(false, &part, &pstart, &psize, &uuid);
-        if (r < 0)
-                return r;
-
-        r = acquire_xbootldr(false, NULL);
-        if (r < 0)
-                return r;
-
-        settle_make_machine_id_directory();
-
-        install = streq(argv[0], "install");
-
-        RUN_WITH_UMASK(0002) {
-                if (install) {
-                        /* Don't create any of these directories when we are just updating. When we update
-                         * we'll drop-in our files (unless there are newer ones already), but we won't create
-                         * the directories for them in the first place. */
-                        r = create_subdirs(arg_esp_path, esp_subdirs);
-                        if (r < 0)
-                                return r;
-
-                        r = create_subdirs(arg_dollar_boot_path(), dollar_boot_subdirs);
-                        if (r < 0)
-                                return r;
-                }
-
-                r = install_binaries(arg_esp_path, install);
-                if (r < 0)
-                        return r;
-
-                if (install) {
-                        r = install_loader_config(arg_esp_path);
-                        if (r < 0)
-                                return r;
-
-                        r = install_machine_id_directory(arg_dollar_boot_path());
-                        if (r < 0)
-                                return r;
-
-                        r = install_random_seed(arg_esp_path);
-                        if (r < 0)
-                                return r;
-                }
-        }
-
-        (void) sync_everything();
-
-        if (arg_touch_variables)
-                r = install_variables(arg_esp_path,
-                                      part, pstart, psize, uuid,
-                                      "/EFI/systemd/systemd-boot" EFI_MACHINE_TYPE_NAME ".efi",
-                                      install);
-
-        return r;
-}
-
-static int verb_remove(int argc, char *argv[], void *userdata) {
-        sd_id128_t uuid = SD_ID128_NULL;
-        int r, q;
-
-        r = acquire_esp(false, NULL, NULL, NULL, &uuid);
-        if (r < 0)
-                return r;
-
-        r = acquire_xbootldr(false, NULL);
-        if (r < 0)
-                return r;
-
-        settle_make_machine_id_directory();
-
-        r = remove_binaries(arg_esp_path);
-
-        q = remove_file(arg_esp_path, "/loader/loader.conf");
-        if (q < 0 && r >= 0)
-                r = q;
-
-        q = remove_file(arg_esp_path, "/loader/random-seed");
-        if (q < 0 && r >= 0)
-                r = q;
-
-        q = remove_subdirs(arg_esp_path, esp_subdirs);
-        if (q < 0 && r >= 0)
-                r = q;
-
-        q = remove_subdirs(arg_esp_path, dollar_boot_subdirs);
-        if (q < 0 && r >= 0)
-                r = q;
-
-        q = remove_machine_id_directory(arg_esp_path);
-        if (q < 0 && r >= 0)
-                r = 1;
-
-        if (arg_xbootldr_path) {
-                /* Remove the latter two also in the XBOOTLDR partition if it exists */
-                q = remove_subdirs(arg_xbootldr_path, dollar_boot_subdirs);
-                if (q < 0 && r >= 0)
-                        r = q;
-
-                q = remove_machine_id_directory(arg_xbootldr_path);
-                if (q < 0 && r >= 0)
-                        r = q;
-        }
-
-        (void) sync_everything();
-
-        if (!arg_touch_variables)
-                return r;
-
-        q = remove_variables(uuid, "/EFI/systemd/systemd-boot" EFI_MACHINE_TYPE_NAME ".efi", true);
-        if (q < 0 && r >= 0)
-                r = q;
-
-        q = remove_loader_variables();
-        if (q < 0 && r >= 0)
-                r = q;
-
-        return r;
-}
-
-static int verb_is_installed(int argc, char *argv[], void *userdata) {
-        _cleanup_free_ char *p = NULL;
-        int r;
-
-        r = acquire_esp(false, NULL, NULL, NULL, NULL);
-        if (r < 0)
-                return r;
-
-        /* Tests whether systemd-boot is installed. It's not obvious what to use as check here: we could
-         * check EFI variables, we could check what binary /EFI/BOOT/BOOT*.EFI points to, or whether the
-         * loader entries directory exists. Here we opted to check whether /EFI/systemd/ is non-empty, which
-         * should be a suitable and very minimal check for a number of reasons:
-         *
-         *  → The check is architecture independent (i.e. we check if any systemd-boot loader is installed, not a
-         *    specific one.)
-         *
-         *  → It doesn't assume we are the only boot loader (i.e doesn't check if we own the main
-         *    /EFI/BOOT/BOOT*.EFI fallback binary.
-         *
-         *  → It specifically checks for systemd-boot, not for other boot loaders (which a check for
-         *    /boot/loader/entries would do). */
-
-        p = path_join(arg_esp_path, "/EFI/systemd/");
-        if (!p)
-                return log_oom();
-
-        r = dir_is_empty(p);
-        if (r > 0 || r == -ENOENT) {
-                puts("no");
-                return EXIT_FAILURE;
-        }
-        if (r < 0)
-                return log_error_errno(r, "Failed to detect whether systemd-boot is installed: %m");
-
-        puts("yes");
-        return EXIT_SUCCESS;
-}
-
-static int parse_loader_entry_target_arg(const char *arg1, char16_t **ret_target, size_t *ret_target_size) {
-        int r;
-        if (streq(arg1, "@current")) {
-                r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderEntrySelected), NULL, (void *) ret_target, ret_target_size);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get EFI variable 'LoaderEntrySelected': %m");
-        } else if (streq(arg1, "@oneshot")) {
-                r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderEntryOneShot), NULL, (void *) ret_target, ret_target_size);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get EFI variable 'LoaderEntryOneShot': %m");
-        } else if (streq(arg1, "@default")) {
-                r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderEntryDefault), NULL, (void *) ret_target, ret_target_size);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get EFI variable 'LoaderEntryDefault': %m");
-        } else {
-                char16_t *encoded = NULL;
-                encoded = utf8_to_utf16(arg1, strlen(arg1));
-                if (!encoded)
-                        return log_oom();
-                *ret_target = encoded;
-                *ret_target_size = char16_strlen(encoded) * 2 + 2;
-        }
-        return 0;
-}
-
-static int verb_set_default(int argc, char *argv[], void *userdata) {
-        int r;
-
-        if (!is_efi_boot())
-                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                                       "Not booted with UEFI.");
-
-        if (access(EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderInfo)), F_OK) < 0) {
-                if (errno == ENOENT) {
-                        log_error_errno(errno, "Not booted with a supported boot loader.");
-                        return -EOPNOTSUPP;
-                }
-
-                return log_error_errno(errno, "Failed to detect whether boot loader supports '%s' operation: %m", argv[0]);
-        }
-
-        if (detect_container() > 0)
-                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                                       "'%s' operation not supported in a container.",
-                                       argv[0]);
-
-        if (!arg_touch_variables)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "'%s' operation cannot be combined with --touch-variables=no.",
-                                       argv[0]);
-
-        const char *variable = streq(argv[0], "set-default") ?
-                EFI_LOADER_VARIABLE(LoaderEntryDefault) : EFI_LOADER_VARIABLE(LoaderEntryOneShot);
-
-        if (isempty(argv[1])) {
-                r = efi_set_variable(variable, NULL, 0);
-                if (r < 0 && r != -ENOENT)
-                        return log_error_errno(r, "Failed to remove EFI variable '%s': %m", variable);
-        } else {
-                _cleanup_free_ char16_t *target = NULL;
-                size_t target_size = 0;
-
-                r = parse_loader_entry_target_arg(argv[1], &target, &target_size);
-                if (r < 0)
-                        return r;
-                r = efi_set_variable(variable, target, target_size);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to update EFI variable '%s': %m", variable);
-        }
-
-        return 0;
-}
-
-static int verb_random_seed(int argc, char *argv[], void *userdata) {
-        int r;
-
-        r = find_esp_and_warn(arg_esp_path, false, &arg_esp_path, NULL, NULL, NULL, NULL);
-        if (r == -ENOKEY) {
-                /* find_esp_and_warn() doesn't warn about ENOKEY, so let's do that on our own */
-                if (!arg_graceful)
-                        return log_error_errno(r, "Unable to find ESP.");
-
-                log_notice("No ESP found, not initializing random seed.");
-                return 0;
-        }
-        if (r < 0)
-                return r;
-
-        r = install_random_seed(arg_esp_path);
-        if (r < 0)
-                return r;
-
-        (void) sync_everything();
-        return 0;
-}
-
-static int verb_systemd_efi_options(int argc, char *argv[], void *userdata) {
-        int r;
-
-        if (argc == 1) {
-                _cleanup_free_ char *line = NULL, *new = NULL;
-
-                r = systemd_efi_options_variable(&line);
-                if (r == -ENODATA)
-                        log_debug("No SystemdOptions EFI variable present in cache.");
-                else if (r < 0)
-                        return log_error_errno(r, "Failed to read SystemdOptions EFI variable from cache: %m");
-                else
-                        puts(line);
-
-                r = systemd_efi_options_efivarfs_if_newer(&new);
-                if (r == -ENODATA) {
-                        if (line)
-                                log_notice("Note: SystemdOptions EFI variable has been removed since boot.");
-                } else if (r < 0)
-                        log_warning_errno(r, "Failed to check SystemdOptions EFI variable in efivarfs, ignoring: %m");
-                else if (new && !streq_ptr(line, new))
-                        log_notice("Note: SystemdOptions EFI variable has been modified since boot. New value: %s",
-                                   new);
-        } else {
-                r = efi_set_variable_string(EFI_SYSTEMD_VARIABLE(SystemdOptions), argv[1]);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to set SystemdOptions EFI variable: %m");
-        }
-
-        return 0;
-}
-
-static int verb_reboot_to_firmware(int argc, char *argv[], void *userdata) {
-        int r;
-
-        if (argc < 2) {
-                r = efi_get_reboot_to_firmware();
-                if (r > 0) {
-                        puts("active");
-                        return EXIT_SUCCESS; /* success */
-                }
-                if (r == 0) {
-                        puts("supported");
-                        return 1; /* recognizable error #1 */
-                }
-                if (r == -EOPNOTSUPP) {
-                        puts("not supported");
-                        return 2; /* recognizable error #2 */
-                }
-
-                log_error_errno(r, "Failed to query reboot-to-firmware state: %m");
-                return 3; /* other kind of error */
-        } else {
-                r = parse_boolean(argv[1]);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to parse argument: %s", argv[1]);
-
-                r = efi_set_reboot_to_firmware(r);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to set reboot-to-firmware option: %m");
-
-                return 0;
-        }
-}
-
 static int bootctl_main(int argc, char *argv[]) {
         static const Verb verbs[] = {
                 { "help",                VERB_ANY, VERB_ANY, 0,            help                     },
@@ -1929,9 +424,15 @@
                 { "update",              VERB_ANY, 1,        0,            verb_install             },
                 { "remove",              VERB_ANY, 1,        0,            verb_remove              },
                 { "is-installed",        VERB_ANY, 1,        0,            verb_is_installed        },
+                { "kernel-identify",     2,        2,        0,            verb_kernel_identify     },
+                { "kernel-inspect",      2,        2,        0,            verb_kernel_inspect      },
                 { "list",                VERB_ANY, 1,        0,            verb_list                },
-                { "set-default",         2,        2,        0,            verb_set_default         },
-                { "set-oneshot",         2,        2,        0,            verb_set_default         },
+                { "unlink",              2,        2,        0,            verb_unlink              },
+                { "cleanup",             VERB_ANY, 1,        0,            verb_list                },
+                { "set-default",         2,        2,        0,            verb_set_efivar          },
+                { "set-oneshot",         2,        2,        0,            verb_set_efivar          },
+                { "set-timeout",         2,        2,        0,            verb_set_efivar          },
+                { "set-timeout-oneshot", 2,        2,        0,            verb_set_efivar          },
                 { "random-seed",         VERB_ANY, 1,        0,            verb_random_seed         },
                 { "systemd-efi-options", VERB_ANY, 2,        0,            verb_systemd_efi_options },
                 { "reboot-to-firmware",  VERB_ANY, 2,        0,            verb_reboot_to_firmware  },
@@ -1942,6 +443,8 @@
 }
 
 static int run(int argc, char *argv[]) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *unlink_dir = NULL;
         int r;
 
         log_parse_environment();
@@ -1955,6 +458,24 @@
         if (r <= 0)
                 return r;
 
+        /* Open up and mount the image */
+        if (arg_image) {
+                assert(!arg_root);
+
+                r = mount_image_privately_interactively(
+                                arg_image,
+                                DISSECT_IMAGE_GENERIC_ROOT |
+                                DISSECT_IMAGE_RELAX_VAR_CHECK,
+                                &unlink_dir,
+                                &loop_device);
+                if (r < 0)
+                        return r;
+
+                arg_root = strdup(unlink_dir);
+                if (!arg_root)
+                        return log_oom();
+        }
+
         return bootctl_main(argc, argv);
 }
 
diff --git a/src/boot/bootctl.h b/src/boot/bootctl.h
new file mode 100644
index 0000000..311b954
--- /dev/null
+++ b/src/boot/bootctl.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "sd-id128.h"
+
+#include "json.h"
+#include "pager.h"
+
+typedef enum EntryTokenType {
+        ARG_ENTRY_TOKEN_MACHINE_ID,
+        ARG_ENTRY_TOKEN_OS_IMAGE_ID,
+        ARG_ENTRY_TOKEN_OS_ID,
+        ARG_ENTRY_TOKEN_LITERAL,
+        ARG_ENTRY_TOKEN_AUTO,
+} EntryTokenType;
+
+typedef enum InstallSource {
+        ARG_INSTALL_SOURCE_IMAGE,
+        ARG_INSTALL_SOURCE_HOST,
+        ARG_INSTALL_SOURCE_AUTO,
+} InstallSource;
+
+extern char *arg_esp_path;
+extern char *arg_xbootldr_path;
+extern bool arg_print_esp_path;
+extern bool arg_print_dollar_boot_path;
+extern bool arg_touch_variables;
+extern PagerFlags arg_pager_flags;
+extern bool arg_graceful;
+extern bool arg_quiet;
+extern int arg_make_entry_directory; /* tri-state: < 0 for automatic logic */
+extern sd_id128_t arg_machine_id;
+extern char *arg_install_layout;
+extern EntryTokenType arg_entry_token_type;
+extern char *arg_entry_token;
+extern JsonFormatFlags arg_json_format_flags;
+extern bool arg_arch_all;
+extern char *arg_root;
+extern char *arg_image;
+extern InstallSource arg_install_source;
+extern char *arg_efi_boot_option_description;
+extern bool arg_dry_run;
+
+static inline const char *arg_dollar_boot_path(void) {
+        /* $BOOT shall be the XBOOTLDR partition if it exists, and otherwise the ESP */
+        return arg_xbootldr_path ?: arg_esp_path;
+}
+
+int acquire_esp(bool unprivileged_mode, bool graceful, uint32_t *ret_part, uint64_t *ret_pstart, uint64_t *ret_psize, sd_id128_t *ret_uuid, dev_t *ret_devid);
+int acquire_xbootldr(bool unprivileged_mode, sd_id128_t *ret_uuid, dev_t *ret_devid);
diff --git a/src/boot/efi/bcd.c b/src/boot/efi/bcd.c
new file mode 100644
index 0000000..f6291e8
--- /dev/null
+++ b/src/boot/efi/bcd.c
@@ -0,0 +1,306 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stdalign.h>
+
+#include "bcd.h"
+#include "efi-string.h"
+
+enum {
+        SIG_BASE_BLOCK  = 1718052210, /* regf */
+        SIG_KEY         = 27502,      /* nk */
+        SIG_SUBKEY_FAST = 26220,      /* lf */
+        SIG_KEY_VALUE   = 27510,      /* vk */
+};
+
+enum {
+        REG_SZ       = 1,
+        REG_MULTI_SZ = 7,
+};
+
+/* These structs contain a lot more members than we care for. They have all
+ * been squashed into _padN for our convenience. */
+
+typedef struct {
+        uint32_t sig;
+        uint32_t primary_seqnum;
+        uint32_t secondary_seqnum;
+        uint64_t _pad1;
+        uint32_t version_major;
+        uint32_t version_minor;
+        uint32_t type;
+        uint32_t _pad2;
+        uint32_t root_cell_offset;
+        uint64_t _pad3[507];
+} _packed_ BaseBlock;
+assert_cc(sizeof(BaseBlock) == 4096);
+assert_cc(offsetof(BaseBlock, sig) == 0);
+assert_cc(offsetof(BaseBlock, primary_seqnum) == 4);
+assert_cc(offsetof(BaseBlock, secondary_seqnum) == 8);
+assert_cc(offsetof(BaseBlock, version_major) == 20);
+assert_cc(offsetof(BaseBlock, version_minor) == 24);
+assert_cc(offsetof(BaseBlock, type) == 28);
+assert_cc(offsetof(BaseBlock, root_cell_offset) == 36);
+
+/* All offsets are relative to the base block and technically point to a hive
+ * cell struct. But for our usecase we don't need to bother about that one,
+ * so skip over the cell_size uint32_t. */
+#define HIVE_CELL_OFFSET (sizeof(BaseBlock) + 4)
+
+typedef struct {
+        uint16_t sig;
+        uint16_t _pad1[13];
+        uint32_t subkeys_offset;
+        uint32_t _pad2;
+        uint32_t n_key_values;
+        uint32_t key_values_offset;
+        uint32_t _pad3[7];
+        uint16_t key_name_len;
+        uint16_t _pad4;
+        char key_name[];
+} _packed_ Key;
+assert_cc(offsetof(Key, sig) == 0);
+assert_cc(offsetof(Key, subkeys_offset) == 28);
+assert_cc(offsetof(Key, n_key_values) == 36);
+assert_cc(offsetof(Key, key_values_offset) == 40);
+assert_cc(offsetof(Key, key_name_len) == 72);
+assert_cc(offsetof(Key, key_name) == 76);
+
+typedef struct {
+        uint16_t sig;
+        uint16_t n_entries;
+        struct SubkeyFastEntry {
+                uint32_t key_offset;
+                char name_hint[4];
+        } _packed_ entries[];
+} _packed_ SubkeyFast;
+assert_cc(offsetof(SubkeyFast, sig) == 0);
+assert_cc(offsetof(SubkeyFast, n_entries) == 2);
+assert_cc(offsetof(SubkeyFast, entries) == 4);
+
+typedef struct {
+        uint16_t sig;
+        uint16_t name_len;
+        uint32_t data_size;
+        uint32_t data_offset;
+        uint32_t data_type;
+        uint32_t _pad;
+        char name[];
+} _packed_ KeyValue;
+assert_cc(offsetof(KeyValue, sig) == 0);
+assert_cc(offsetof(KeyValue, name_len) == 2);
+assert_cc(offsetof(KeyValue, data_size) == 4);
+assert_cc(offsetof(KeyValue, data_offset) == 8);
+assert_cc(offsetof(KeyValue, data_type) == 12);
+assert_cc(offsetof(KeyValue, name) == 20);
+
+#define BAD_OFFSET(offset, len, max) \
+        ((uint64_t) (offset) + (len) >= (max))
+
+#define BAD_STRUCT(type, offset, max) \
+        ((uint64_t) (offset) + sizeof(type) >= (max))
+
+#define BAD_ARRAY(type, array, offset, array_len, max) \
+        ((uint64_t) (offset) + offsetof(type, array) + \
+         sizeof((type){}.array[0]) * (uint64_t) (array_len) >= (max))
+
+static const Key *get_key(const uint8_t *bcd, uint32_t bcd_len, uint32_t offset, const char *name);
+
+static const Key *get_subkey(const uint8_t *bcd, uint32_t bcd_len, uint32_t offset, const char *name) {
+        assert(bcd);
+        assert(name);
+
+        if (BAD_STRUCT(SubkeyFast, offset, bcd_len))
+                return NULL;
+
+        const SubkeyFast *subkey = (const SubkeyFast *) (bcd + offset);
+        if (subkey->sig != SIG_SUBKEY_FAST)
+                return NULL;
+
+        if (BAD_ARRAY(SubkeyFast, entries, offset, subkey->n_entries, bcd_len))
+                return NULL;
+
+        for (uint16_t i = 0; i < subkey->n_entries; i++) {
+                if (!strncaseeq8(name, subkey->entries[i].name_hint, sizeof(subkey->entries[i].name_hint)))
+                        continue;
+
+                const Key *key = get_key(bcd, bcd_len, subkey->entries[i].key_offset, name);
+                if (key)
+                        return key;
+        }
+
+        return NULL;
+}
+
+/* We use NUL as registry path separators for convenience. To start from the root, begin
+ * name with a NUL. Name must end with two NUL. The lookup depth is not restricted, so
+ * name must be properly validated before calling get_key(). */
+static const Key *get_key(const uint8_t *bcd, uint32_t bcd_len, uint32_t offset, const char *name) {
+        assert(bcd);
+        assert(name);
+
+        if (BAD_STRUCT(Key, offset, bcd_len))
+                return NULL;
+
+        const Key *key = (const Key *) (bcd + offset);
+        if (key->sig != SIG_KEY)
+                return NULL;
+
+        if (BAD_ARRAY(Key, key_name, offset, key->key_name_len, bcd_len))
+                return NULL;
+
+        if (*name) {
+                if (strncaseeq8(name, key->key_name, key->key_name_len) && strlen8(name) == key->key_name_len)
+                        name += key->key_name_len;
+                else
+                        return NULL;
+        }
+
+        name++;
+        return *name ? get_subkey(bcd, bcd_len, key->subkeys_offset, name) : key;
+}
+
+static const KeyValue *get_key_value(const uint8_t *bcd, uint32_t bcd_len, const Key *key, const char *name) {
+        assert(bcd);
+        assert(key);
+        assert(name);
+
+        if (key->n_key_values == 0)
+                return NULL;
+
+        if (BAD_OFFSET(key->key_values_offset, sizeof(uint32_t) * (uint64_t) key->n_key_values, bcd_len) ||
+            (uintptr_t) (bcd + key->key_values_offset) % alignof(uint32_t) != 0)
+                return NULL;
+
+        const uint32_t *key_value_list = (const uint32_t *) (bcd + key->key_values_offset);
+        for (uint32_t i = 0; i < key->n_key_values; i++) {
+                uint32_t offset = *(key_value_list + i);
+
+                if (BAD_STRUCT(KeyValue, offset, bcd_len))
+                        continue;
+
+                const KeyValue *kv = (const KeyValue *) (bcd + offset);
+                if (kv->sig != SIG_KEY_VALUE)
+                        continue;
+
+                if (BAD_ARRAY(KeyValue, name, offset, kv->name_len, bcd_len))
+                        continue;
+
+                /* If most significant bit is set, data is stored in data_offset itself, but
+                 * we are only interested in UTF16 strings. The only strings that could fit
+                 * would have just one char in it, so let's not bother with this. */
+                if (FLAGS_SET(kv->data_size, UINT32_C(1) << 31))
+                        continue;
+
+                if (BAD_OFFSET(kv->data_offset, kv->data_size, bcd_len))
+                        continue;
+
+                if (strncaseeq8(name, kv->name, kv->name_len) && strlen8(name) == kv->name_len)
+                        return kv;
+        }
+
+        return NULL;
+}
+
+/* The BCD store is really just a regular windows registry hive with a rather cryptic internal
+ * key structure. On a running system it gets mounted to HKEY_LOCAL_MACHINE\BCD00000000.
+ *
+ * Of interest to us are these two keys:
+ * - \Objects\{bootmgr}\Elements\24000001
+ *   This key is the "displayorder" property and contains a value of type REG_MULTI_SZ
+ *   with the name "Element" that holds a {GUID} list (UTF16, NUL-separated).
+ * - \Objects\{GUID}\Elements\12000004
+ *   This key is the "description" property and contains a value of type REG_SZ with the
+ *   name "Element" that holds a NUL-terminated UTF16 string.
+ *
+ * The GUIDs and properties are as reported by "bcdedit.exe /v".
+ *
+ * To get a title for the BCD store we first look at the displayorder property of {bootmgr}
+ * (it always has the GUID 9dea862c-5cdd-4e70-acc1-f32b344d4795). If it contains more than
+ * one GUID, the BCD is multi-boot and we stop looking. Otherwise we take that GUID, look it
+ * up, and return its description property. */
+char16_t *get_bcd_title(uint8_t *bcd, size_t bcd_len) {
+        assert(bcd);
+
+        if (HIVE_CELL_OFFSET >= bcd_len)
+                return NULL;
+
+        BaseBlock *base_block = (BaseBlock *) bcd;
+        if (base_block->sig != SIG_BASE_BLOCK ||
+            base_block->version_major != 1 ||
+            base_block->version_minor != 3 ||
+            base_block->type != 0 ||
+            base_block->primary_seqnum != base_block->secondary_seqnum)
+                return NULL;
+
+        bcd += HIVE_CELL_OFFSET;
+        bcd_len -= HIVE_CELL_OFFSET;
+
+        const Key *objects_key = get_key(bcd, bcd_len, base_block->root_cell_offset, "\0Objects\0");
+        if (!objects_key)
+                return NULL;
+
+        const Key *displayorder_key = get_subkey(
+                        bcd,
+                        bcd_len,
+                        objects_key->subkeys_offset,
+                        "{9dea862c-5cdd-4e70-acc1-f32b344d4795}\0Elements\00024000001\0");
+        if (!displayorder_key)
+                return NULL;
+
+        const KeyValue *displayorder_value = get_key_value(bcd, bcd_len, displayorder_key, "Element");
+        if (!displayorder_value)
+                return NULL;
+
+        char order_guid[sizeof("{00000000-0000-0000-0000-000000000000}\0")];
+        if (displayorder_value->data_type != REG_MULTI_SZ ||
+            displayorder_value->data_size != sizeof(char16_t[sizeof(order_guid)]) ||
+            (uintptr_t) (bcd + displayorder_value->data_offset) % alignof(char16_t) != 0)
+                /* BCD is multi-boot. */
+                return NULL;
+
+        /* Keys are stored as ASCII in registry hives if the data fits (and GUIDS always should). */
+        char16_t *order_guid_utf16 = (char16_t *) (bcd + displayorder_value->data_offset);
+        for (size_t i = 0; i < sizeof(order_guid) - 2; i++) {
+                char16_t c = order_guid_utf16[i];
+                switch (c) {
+                case '-':
+                case '{':
+                case '}':
+                case '0' ... '9':
+                case 'a' ... 'f':
+                case 'A' ... 'F':
+                        order_guid[i] = c;
+                        break;
+                default:
+                        /* Not a valid GUID. */
+                        return NULL;
+                }
+        }
+        /* Our functions expect the lookup key to be double-derminated. */
+        order_guid[sizeof(order_guid) - 2] = '\0';
+        order_guid[sizeof(order_guid) - 1] = '\0';
+
+        const Key *default_key = get_subkey(bcd, bcd_len, objects_key->subkeys_offset, order_guid);
+        if (!default_key)
+                return NULL;
+
+        const Key *description_key = get_subkey(
+                        bcd, bcd_len, default_key->subkeys_offset, "Elements\00012000004\0");
+        if (!description_key)
+                return NULL;
+
+        const KeyValue *description_value = get_key_value(bcd, bcd_len, description_key, "Element");
+        if (!description_value)
+                return NULL;
+
+        if (description_value->data_type != REG_SZ ||
+            description_value->data_size < sizeof(char16_t) ||
+            description_value->data_size % sizeof(char16_t) != 0 ||
+            (uintptr_t) (bcd + description_value->data_offset) % alignof(char16_t))
+                return NULL;
+
+        /* The data should already be NUL-terminated. */
+        char16_t *title = (char16_t *) (bcd + description_value->data_offset);
+        title[description_value->data_size / sizeof(char16_t) - 1] = '\0';
+        return title;
+}
diff --git a/src/boot/efi/bcd.h b/src/boot/efi/bcd.h
new file mode 100644
index 0000000..c27af55
--- /dev/null
+++ b/src/boot/efi/bcd.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdint.h>
+#include <uchar.h>
+
+char16_t *get_bcd_title(uint8_t *bcd, size_t bcd_len);
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
index b4f3b96..6d4da0c 100644
--- a/src/boot/efi/boot.c
+++ b/src/boot/efi/boot.c
@@ -3,86 +3,133 @@
 #include <efi.h>
 #include <efigpt.h>
 #include <efilib.h>
+#include <inttypes.h>
 
+#include "bcd.h"
+#include "bootspec-fundamental.h"
 #include "console.h"
-#include "crc32.h"
+#include "devicetree.h"
 #include "disk.h"
-#include "efi-loader-features.h"
+#include "drivers.h"
+#include "efivars-fundamental.h"
 #include "graphics.h"
+#include "initrd.h"
 #include "linux.h"
 #include "measure.h"
+#include "part-discovery.h"
 #include "pe.h"
+#include "vmm.h"
 #include "random-seed.h"
 #include "secure-boot.h"
 #include "shim.h"
+#include "ticks.h"
 #include "util.h"
 
-#ifndef EFI_OS_INDICATIONS_BOOT_TO_FW_UI
-#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001ULL
+#ifndef GNU_EFI_USE_MS_ABI
+        /* We do not use uefi_call_wrapper() in systemd-boot. As such, we rely on the
+         * compiler to do the calling convention conversion for us. This is check is
+         * to make sure the -DGNU_EFI_USE_MS_ABI was passed to the compiler. */
+        #error systemd-boot requires compilation with GNU_EFI_USE_MS_ABI defined.
 #endif
 
-/* magic string to find in the binary image */
-static const char __attribute__((used)) magic[] = "#### LoaderInfo: systemd-boot " GIT_VERSION " ####";
+#define TEXT_ATTR_SWAP(c) EFI_TEXT_ATTR(((c) & 0b11110000) >> 4, (c) & 0b1111)
+
+/* Magic string for recognizing our own binaries */
+_used_ _section_(".sdmagic") static const char magic[] =
+        "#### LoaderInfo: systemd-boot " GIT_VERSION " ####";
+
+/* Makes systemd-boot available from \EFI\Linux\ for testing purposes. */
+_used_ _section_(".osrel") static const char osrel[] =
+        "ID=systemd-boot\n"
+        "VERSION=\"" GIT_VERSION "\"\n"
+        "NAME=\"systemd-boot " GIT_VERSION "\"\n";
 
 enum loader_type {
         LOADER_UNDEFINED,
+        LOADER_AUTO,
         LOADER_EFI,
-        LOADER_LINUX,
+        LOADER_LINUX,         /* Boot loader spec type #1 entries */
+        LOADER_UNIFIED_LINUX, /* Boot loader spec type #2 entries */
+        LOADER_SECURE_BOOT_KEYS,
 };
 
 typedef struct {
-        CHAR16 *id; /* The unique identifier for this entry */
-        CHAR16 *title_show;
-        CHAR16 *title;
-        CHAR16 *version;
-        CHAR16 *machine_id;
+        char16_t *id;         /* The unique identifier for this entry (typically the filename of the file defining the entry) */
+        char16_t *title_show; /* The string to actually display (this is made unique before showing) */
+        char16_t *title;      /* The raw (human readable) title string of the entry (not necessarily unique) */
+        char16_t *sort_key;   /* The string to use as primary sort key, usually ID= from os-release, possibly suffixed */
+        char16_t *version;    /* The raw (human readable) version string of the entry */
+        char16_t *machine_id;
         EFI_HANDLE *device;
         enum loader_type type;
-        CHAR16 *loader;
-        CHAR16 *options;
-        CHAR16 key;
-        EFI_STATUS (*call)(VOID);
-        BOOLEAN no_autoselect;
-        BOOLEAN non_unique;
-        UINTN tries_done;
-        UINTN tries_left;
-        CHAR16 *path;
-        CHAR16 *current_name;
-        CHAR16 *next_name;
+        char16_t *loader;
+        char16_t *devicetree;
+        char16_t *options;
+        char16_t **initrd;
+        char16_t key;
+        EFI_STATUS (*call)(void);
+        int tries_done;
+        int tries_left;
+        char16_t *path;
+        char16_t *current_name;
+        char16_t *next_name;
 } ConfigEntry;
 
 typedef struct {
         ConfigEntry **entries;
-        UINTN entry_count;
-        INTN idx_default;
-        INTN idx_default_efivar;
-        UINTN timeout_sec;
-        UINTN timeout_sec_config;
-        INTN timeout_sec_efivar;
-        CHAR16 *entry_default_pattern;
-        CHAR16 *entry_oneshot;
-        CHAR16 *options_edit;
-        BOOLEAN editor;
-        BOOLEAN auto_entries;
-        BOOLEAN auto_firmware;
-        BOOLEAN force_menu;
-        UINTN console_mode;
-        enum console_mode_change_type console_mode_change;
-        RandomSeedMode random_seed_mode;
+        size_t entry_count;
+        size_t idx_default;
+        size_t idx_default_efivar;
+        uint32_t timeout_sec; /* Actual timeout used (efi_main() override > efivar > config). */
+        uint32_t timeout_sec_config;
+        uint32_t timeout_sec_efivar;
+        char16_t *entry_default_config;
+        char16_t *entry_default_efivar;
+        char16_t *entry_oneshot;
+        char16_t *entry_saved;
+        bool editor;
+        bool auto_entries;
+        bool auto_firmware;
+        bool reboot_for_bitlocker;
+        secure_boot_enroll secure_boot_enroll;
+        bool force_menu;
+        bool use_saved_entry;
+        bool use_saved_entry_efivar;
+        bool beep;
+        int64_t console_mode;
+        int64_t console_mode_efivar;
 } Config;
 
-static VOID cursor_left(UINTN *cursor, UINTN *first) {
+/* These values have been chosen so that the transitions the user sees could
+ * employ unsigned over-/underflow like this:
+ * efivar unset ↔ force menu ↔ no timeout/skip menu ↔ 1 s ↔ 2 s ↔ … */
+enum {
+        TIMEOUT_MIN         = 1,
+        TIMEOUT_MAX         = UINT32_MAX - 2U,
+        TIMEOUT_UNSET       = UINT32_MAX - 1U,
+        TIMEOUT_MENU_FORCE  = UINT32_MAX,
+        TIMEOUT_MENU_HIDDEN = 0,
+        TIMEOUT_TYPE_MAX    = UINT32_MAX,
+};
+
+enum {
+        IDX_MAX = INT16_MAX,
+        IDX_INVALID,
+};
+
+static void cursor_left(size_t *cursor, size_t *first) {
+        assert(cursor);
+        assert(first);
+
         if ((*cursor) > 0)
                 (*cursor)--;
         else if ((*first) > 0)
                 (*first)--;
 }
 
-static VOID cursor_right(
-                UINTN *cursor,
-                UINTN *first,
-                UINTN x_max,
-                UINTN len) {
+static void cursor_right(size_t *cursor, size_t *first, size_t x_max, size_t len) {
+        assert(cursor);
+        assert(first);
 
         if ((*cursor)+1 < x_max)
                 (*cursor)++;
@@ -90,53 +137,47 @@
                 (*first)++;
 }
 
-static BOOLEAN line_edit(
-                const CHAR16 *line_in,
-                CHAR16 **line_out,
-                UINTN x_max,
-                UINTN y_pos) {
+static bool line_edit(char16_t **line_in, size_t x_max, size_t y_pos) {
+        _cleanup_free_ char16_t *line = NULL, *print = NULL;
+        size_t size, len, first = 0, cursor = 0, clear = 0;
 
-        _cleanup_freepool_ CHAR16 *line = NULL, *print = NULL;
-        UINTN size, len, first, cursor, clear;
-        BOOLEAN exit, enter;
+        assert(line_in);
 
-        if (!line_in)
-                line_in = L"";
-        size = StrLen(line_in) + 1024;
-        line = AllocatePool(size * sizeof(CHAR16));
-        StrCpy(line, line_in);
-        len = StrLen(line);
-        print = AllocatePool((x_max+1) * sizeof(CHAR16));
+        len = strlen16(*line_in);
+        size = len + 1024;
+        line = xnew(char16_t, size);
+        print = xnew(char16_t, x_max + 1);
+        strcpy16(line, strempty(*line_in));
 
-        uefi_call_wrapper(ST->ConOut->EnableCursor, 2, ST->ConOut, TRUE);
-
-        first = 0;
-        cursor = 0;
-        clear = 0;
-        enter = FALSE;
-        exit = FALSE;
-        while (!exit) {
+        for (;;) {
                 EFI_STATUS err;
-                UINT64 key;
-                UINTN j;
+                uint64_t key;
+                size_t j, cursor_color = TEXT_ATTR_SWAP(COLOR_EDIT);
 
-                j = len - first;
-                if (j >= x_max-1)
-                        j = x_max-1;
-                CopyMem(print, line + first, j * sizeof(CHAR16));
-                while (clear > 0 && j < x_max-1) {
+                j = MIN(len - first, x_max);
+                memcpy(print, line + first, j * sizeof(char16_t));
+                while (clear > 0 && j < x_max) {
                         clear--;
                         print[j++] = ' ';
                 }
                 print[j] = '\0';
 
-                uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_pos);
-                uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, print);
-                uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, cursor, y_pos);
+                /* See comment at edit_line() call site for why we start at 1. */
+                print_at(1, y_pos, COLOR_EDIT, print);
 
-                err = console_key_read(&key, 0);
-                if (EFI_ERROR(err))
-                        continue;
+                if (!print[cursor])
+                        print[cursor] = ' ';
+                print[cursor+1] = '\0';
+                do {
+                        print_at(cursor + 1, y_pos, cursor_color, print + cursor);
+                        cursor_color = TEXT_ATTR_SWAP(cursor_color);
+
+                        err = console_key_read(&key, 750 * 1000);
+                        if (!IN_SET(err, EFI_SUCCESS, EFI_TIMEOUT, EFI_NOT_READY))
+                                return false;
+
+                        print_at(cursor + 1, y_pos, COLOR_EDIT, print + cursor);
+                } while (err != EFI_SUCCESS);
 
                 switch (key) {
                 case KEYPRESS(0, SCAN_ESC, 0):
@@ -144,8 +185,7 @@
                 case KEYPRESS(EFI_CONTROL_PRESSED, 0, 'g'):
                 case KEYPRESS(EFI_CONTROL_PRESSED, 0, CHAR_CTRL('c')):
                 case KEYPRESS(EFI_CONTROL_PRESSED, 0, CHAR_CTRL('g')):
-                        exit = TRUE;
-                        break;
+                        return false;
 
                 case KEYPRESS(0, SCAN_HOME, 0):
                 case KEYPRESS(EFI_CONTROL_PRESSED, 0, 'a'):
@@ -174,7 +214,6 @@
                                 cursor_right(&cursor, &first, x_max, len);
                         while (line[first + cursor] && line[first + cursor] != ' ')
                                 cursor_right(&cursor, &first, x_max, len);
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, cursor, y_pos);
                         continue;
 
                 case KEYPRESS(0, SCAN_UP, 0):
@@ -188,7 +227,6 @@
                         }
                         while ((first + cursor) > 0 && line[first + cursor-1] != ' ')
                                 cursor_left(&cursor, &first);
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, cursor, y_pos);
                         continue;
 
                 case KEYPRESS(0, SCAN_RIGHT, 0):
@@ -198,7 +236,6 @@
                         if (first + cursor == len)
                                 continue;
                         cursor_right(&cursor, &first, x_max, len);
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, cursor, y_pos);
                         continue;
 
                 case KEYPRESS(0, SCAN_LEFT, 0):
@@ -206,20 +243,20 @@
                 case KEYPRESS(EFI_CONTROL_PRESSED, 0, CHAR_CTRL('b')):
                         /* backward-char */
                         cursor_left(&cursor, &first);
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, cursor, y_pos);
                         continue;
 
+                case KEYPRESS(EFI_CONTROL_PRESSED, SCAN_DELETE, 0):
                 case KEYPRESS(EFI_ALT_PRESSED, 0, 'd'):
                         /* kill-word */
                         clear = 0;
 
-                        UINTN k;
+                        size_t k;
                         for (k = first + cursor; k < len && line[k] == ' '; k++)
                                 clear++;
                         for (; k < len && line[k] != ' '; k++)
                                 clear++;
 
-                        for (UINTN i = first + cursor; i + clear < len; i++)
+                        for (size_t i = first + cursor; i + clear < len; i++)
                                 line[i] = line[i + clear];
                         len -= clear;
                         line[len] = '\0';
@@ -242,9 +279,8 @@
                                 cursor_left(&cursor, &first);
                                 clear++;
                         }
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, cursor, y_pos);
 
-                        for (UINTN i = first + cursor; i + clear < len; i++)
+                        for (size_t i = first + cursor; i + clear < len; i++)
                                 line[i] = line[i + clear];
                         len -= clear;
                         line[len] = '\0';
@@ -257,7 +293,7 @@
                                 continue;
                         if (first + cursor == len)
                                 continue;
-                        for (UINTN i = first + cursor; i < len; i++)
+                        for (size_t i = first + cursor; i < len; i++)
                                 line[i] = line[i+1];
                         clear = 1;
                         len--;
@@ -273,20 +309,20 @@
 
                 case KEYPRESS(0, 0, CHAR_LINEFEED):
                 case KEYPRESS(0, 0, CHAR_CARRIAGE_RETURN):
-                case KEYPRESS(0, CHAR_CARRIAGE_RETURN, 0): /* EZpad Mini 4s firmware sends malformed events */
-                case KEYPRESS(0, CHAR_CARRIAGE_RETURN, CHAR_CARRIAGE_RETURN): /* Teclast X98+ II firmware sends malformed events */
-                        if (StrCmp(line, line_in) != 0)
-                                *line_out = TAKE_PTR(line);
-                        enter = TRUE;
-                        exit = TRUE;
-                        break;
+                case KEYPRESS(0, SCAN_F3, 0): /* EZpad Mini 4s firmware sends malformed events */
+                case KEYPRESS(0, SCAN_F3, CHAR_CARRIAGE_RETURN): /* Teclast X98+ II firmware sends malformed events */
+                        if (!streq16(line, *line_in)) {
+                                free(*line_in);
+                                *line_in = TAKE_PTR(line);
+                        }
+                        return true;
 
                 case KEYPRESS(0, 0, CHAR_BACKSPACE):
                         if (len == 0)
                                 continue;
                         if (first == 0 && cursor == 0)
                                 continue;
-                        for (UINTN i = first + cursor-1; i < len; i++)
+                        for (size_t i = first + cursor-1; i < len; i++)
                                 line[i] = line[i+1];
                         clear = 1;
                         len--;
@@ -314,7 +350,7 @@
                 case KEYPRESS(0, 0, 0x80) ... KEYPRESS(0, 0, 0xffff):
                         if (len+1 == size)
                                 continue;
-                        for (UINTN i = len; i > first + cursor; i--)
+                        for (size_t i = len; i > first + cursor; i--)
                                 line[i] = line[i-1];
                         line[first + cursor] = KEYCHAR(key);
                         len++;
@@ -326,370 +362,488 @@
                         continue;
                 }
         }
-
-        uefi_call_wrapper(ST->ConOut->EnableCursor, 2, ST->ConOut, FALSE);
-        return enter;
 }
 
-static UINTN entry_lookup_key(Config *config, UINTN start, CHAR16 key) {
+static size_t entry_lookup_key(Config *config, size_t start, char16_t key) {
+        assert(config);
+
         if (key == 0)
-                return -1;
+                return IDX_INVALID;
 
         /* select entry by number key */
         if (key >= '1' && key <= '9') {
-                UINTN i = key - '0';
+                size_t i = key - '0';
                 if (i > config->entry_count)
                         i = config->entry_count;
                 return i-1;
         }
 
         /* find matching key in config entries */
-        for (UINTN i = start; i < config->entry_count; i++)
+        for (size_t i = start; i < config->entry_count; i++)
                 if (config->entries[i]->key == key)
                         return i;
 
-        for (UINTN i = 0; i < start; i++)
+        for (size_t i = 0; i < start; i++)
                 if (config->entries[i]->key == key)
                         return i;
 
-        return -1;
+        return IDX_INVALID;
 }
 
-static VOID print_status(Config *config, CHAR16 *loaded_image_path) {
-        UINT64 key, indvar;
-        UINTN timeout;
-        BOOLEAN modevar;
-        _cleanup_freepool_ CHAR16 *partstr = NULL, *defaultstr = NULL;
-        UINTN x, y;
+static char16_t *update_timeout_efivar(uint32_t *t, bool inc) {
+        assert(t);
 
-        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
-        uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
-
-        Print(L"systemd-boot version:   " GIT_VERSION "\n");
-        Print(L"architecture:           " EFI_MACHINE_TYPE_NAME "\n");
-        Print(L"loaded image:           %s\n", loaded_image_path);
-        Print(L"UEFI specification:     %d.%02d\n", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
-        Print(L"firmware vendor:        %s\n", ST->FirmwareVendor);
-        Print(L"firmware version:       %d.%02d\n", ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
-
-        if (uefi_call_wrapper(ST->ConOut->QueryMode, 4, ST->ConOut, ST->ConOut->Mode->Mode, &x, &y) == EFI_SUCCESS)
-                Print(L"console size:           %d x %d\n", x, y);
-
-        Print(L"SecureBoot:             %s\n", yes_no(secure_boot_enabled()));
-
-        if (efivar_get_boolean_u8(EFI_GLOBAL_GUID, L"SetupMode", &modevar) == EFI_SUCCESS)
-                Print(L"SetupMode:              %s\n", modevar ? L"setup" : L"user");
-
-        if (shim_loaded())
-                Print(L"Shim:                   present\n");
-
-        if (efivar_get_uint64_le(EFI_GLOBAL_GUID, L"OsIndicationsSupported", &indvar) == EFI_SUCCESS)
-                Print(L"OsIndicationsSupported: %d\n", indvar);
-
-        Print(L"\n--- press key ---\n\n");
-        console_key_read(&key, 0);
-
-        Print(L"timeout:                %u\n", config->timeout_sec);
-        if (config->timeout_sec_efivar >= 0)
-                Print(L"timeout (EFI var):      %d\n", config->timeout_sec_efivar);
-        Print(L"timeout (config):       %u\n", config->timeout_sec_config);
-        if (config->entry_default_pattern)
-                Print(L"default pattern:        '%s'\n", config->entry_default_pattern);
-        Print(L"editor:                 %s\n", yes_no(config->editor));
-        Print(L"auto-entries:           %s\n", yes_no(config->auto_entries));
-        Print(L"auto-firmware:          %s\n", yes_no(config->auto_firmware));
-
-        switch (config->random_seed_mode) {
-        case RANDOM_SEED_OFF:
-                Print(L"random-seed-mode:       off\n");
+        switch (*t) {
+        case TIMEOUT_MAX:
+                *t = inc ? TIMEOUT_MAX : (*t - 1);
                 break;
-        case RANDOM_SEED_WITH_SYSTEM_TOKEN:
-                Print(L"random-seed-mode:       with-system-token\n");
+        case TIMEOUT_UNSET:
+                *t = inc ? TIMEOUT_MENU_FORCE : TIMEOUT_UNSET;
                 break;
-        case RANDOM_SEED_ALWAYS:
-                Print(L"random-seed-mode:       always\n");
+        case TIMEOUT_MENU_FORCE:
+                *t = inc ? TIMEOUT_MENU_HIDDEN : TIMEOUT_UNSET;
+                break;
+        case TIMEOUT_MENU_HIDDEN:
+                *t = inc ? TIMEOUT_MIN : TIMEOUT_MENU_FORCE;
                 break;
         default:
-                ;
+                *t += inc ? 1 : -1;
         }
 
-        Print(L"\n");
-
-        Print(L"config entry count:     %d\n", config->entry_count);
-        Print(L"entry selected idx:     %d\n", config->idx_default);
-        if (config->idx_default_efivar >= 0)
-                Print(L"entry EFI var idx:      %d\n", config->idx_default_efivar);
-        Print(L"\n");
-
-        if (efivar_get_uint_string(LOADER_GUID, L"LoaderConfigTimeout", &timeout) == EFI_SUCCESS)
-                Print(L"LoaderConfigTimeout:    %u\n", timeout);
-
-        if (config->entry_oneshot)
-                Print(L"LoaderEntryOneShot:     %s\n", config->entry_oneshot);
-        if (efivar_get(LOADER_GUID, L"LoaderDevicePartUUID", &partstr) == EFI_SUCCESS)
-                Print(L"LoaderDevicePartUUID:   %s\n", partstr);
-        if (efivar_get(LOADER_GUID, L"LoaderEntryDefault", &defaultstr) == EFI_SUCCESS)
-                Print(L"LoaderEntryDefault:     %s\n", defaultstr);
-
-        Print(L"\n--- press key ---\n\n");
-        console_key_read(&key, 0);
-
-        for (UINTN i = 0; i < config->entry_count; i++) {
-                ConfigEntry *entry;
-
-                if (key == KEYPRESS(0, SCAN_ESC, 0) || key == KEYPRESS(0, 0, 'q'))
-                        break;
-
-                entry = config->entries[i];
-                Print(L"config entry:           %d/%d\n", i+1, config->entry_count);
-                if (entry->id)
-                        Print(L"id                      '%s'\n", entry->id);
-                Print(L"title show              '%s'\n", entry->title_show);
-                if (entry->title)
-                        Print(L"title                   '%s'\n", entry->title);
-                if (entry->version)
-                        Print(L"version                 '%s'\n", entry->version);
-                if (entry->machine_id)
-                        Print(L"machine-id              '%s'\n", entry->machine_id);
-                if (entry->device) {
-                        EFI_DEVICE_PATH *device_path;
-
-                        device_path = DevicePathFromHandle(entry->device);
-                        if (device_path) {
-                                _cleanup_freepool_ CHAR16 *str = NULL;
-
-                                str = DevicePathToStr(device_path);
-                                Print(L"device handle           '%s'\n", str);
-                        }
-                }
-                if (entry->loader)
-                        Print(L"loader                  '%s'\n", entry->loader);
-                if (entry->options)
-                        Print(L"options                 '%s'\n", entry->options);
-                Print(L"auto-select             %s\n", yes_no(!entry->no_autoselect));
-                if (entry->call)
-                        Print(L"internal call           yes\n");
-
-                if (entry->tries_left != UINTN_MAX)
-                        Print(L"counting boots          yes\n"
-                               "tries done              %u\n"
-                               "tries left              %u\n"
-                               "current path            %s\\%s\n"
-                               "next path               %s\\%s\n",
-                              entry->tries_done,
-                              entry->tries_left,
-                              entry->path, entry->current_name,
-                              entry->path, entry->next_name);
-
-                Print(L"\n--- press key ---\n\n");
-                console_key_read(&key, 0);
+        switch (*t) {
+        case TIMEOUT_UNSET:
+                return xstrdup16(u"Menu timeout defined by configuration file.");
+        case TIMEOUT_MENU_FORCE:
+                return xstrdup16(u"Timeout disabled, menu will always be shown.");
+        case TIMEOUT_MENU_HIDDEN:
+                return xstrdup16(u"Menu disabled. Hold down key at bootup to show menu.");
+        default:
+                return xasprintf("Menu timeout set to %u s.", *t);
         }
-
-        uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
 }
 
-static BOOLEAN menu_run(
+static bool unicode_supported(void) {
+        static int cache = -1;
+
+        if (cache < 0)
+                /* Basic unicode box drawing support is mandated by the spec, but it does
+                 * not hurt to make sure it works. */
+                cache = ST->ConOut->TestString(ST->ConOut, (char16_t *) u"─") == EFI_SUCCESS;
+
+        return cache;
+}
+
+static bool ps_continue(void) {
+        const char16_t *sep = unicode_supported() ? u"───" : u"---";
+        printf("\n%ls Press any key to continue, ESC or q to quit. %ls\n\n", sep, sep);
+
+        uint64_t key;
+        return console_key_read(&key, UINT64_MAX) == EFI_SUCCESS &&
+                        !IN_SET(key, KEYPRESS(0, SCAN_ESC, 0), KEYPRESS(0, 0, 'q'), KEYPRESS(0, 0, 'Q'));
+}
+
+static void print_status(Config *config, char16_t *loaded_image_path) {
+        size_t x_max, y_max;
+        uint32_t screen_width = 0, screen_height = 0;
+        SecureBootMode secure;
+        _cleanup_free_ char16_t *device_part_uuid = NULL;
+
+        assert(config);
+
+        clear_screen(COLOR_NORMAL);
+        console_query_mode(&x_max, &y_max);
+        query_screen_resolution(&screen_width, &screen_height);
+
+        secure = secure_boot_mode();
+        (void) efivar_get(MAKE_GUID_PTR(LOADER), u"LoaderDevicePartUUID", &device_part_uuid);
+
+        printf("  systemd-boot version: " GIT_VERSION "\n");
+        if (loaded_image_path)
+                printf("          loaded image: %ls\n", loaded_image_path);
+        if (device_part_uuid)
+                printf(" loader partition UUID: %ls\n", device_part_uuid);
+        printf("          architecture: " EFI_MACHINE_TYPE_NAME "\n");
+        printf("    UEFI specification: %u.%02u\n", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
+        printf("       firmware vendor: %ls\n", ST->FirmwareVendor);
+        printf("      firmware version: %u.%02u\n", ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
+        printf("        OS indications: %#" PRIx64 "\n", get_os_indications_supported());
+        printf("           secure boot: %ls (%ls)\n",
+                        yes_no(IN_SET(secure, SECURE_BOOT_USER, SECURE_BOOT_DEPLOYED)),
+                        secure_boot_mode_to_string(secure));
+        printf("                  shim: %ls\n", yes_no(shim_loaded()));
+        printf("                   TPM: %ls\n", yes_no(tpm_present()));
+        printf("          console mode: %i/%" PRIi64 " (%zux%zu @%ux%u)\n",
+                        ST->ConOut->Mode->Mode, ST->ConOut->Mode->MaxMode - INT64_C(1),
+                        x_max, y_max, screen_width, screen_height);
+
+        if (!ps_continue())
+                return;
+
+        switch (config->timeout_sec_config) {
+        case TIMEOUT_UNSET:
+                break;
+        case TIMEOUT_MENU_FORCE:
+                printf("      timeout (config): menu-force\n");
+                break;
+        case TIMEOUT_MENU_HIDDEN:
+                printf("      timeout (config): menu-hidden\n");
+                break;
+        default:
+                printf("      timeout (config): %u s\n", config->timeout_sec_config);
+        }
+
+        switch (config->timeout_sec_efivar) {
+        case TIMEOUT_UNSET:
+                break;
+        case TIMEOUT_MENU_FORCE:
+                printf("     timeout (EFI var): menu-force\n");
+                break;
+        case TIMEOUT_MENU_HIDDEN:
+                printf("     timeout (EFI var): menu-hidden\n");
+                break;
+        default:
+                printf("     timeout (EFI var): %u s\n", config->timeout_sec_efivar);
+        }
+
+        if (config->entry_default_config)
+                printf("      default (config): %ls\n", config->entry_default_config);
+        if (config->entry_default_efivar)
+                printf("     default (EFI var): %ls\n", config->entry_default_efivar);
+        if (config->entry_oneshot)
+                printf("    default (one-shot): %ls\n", config->entry_oneshot);
+        if (config->entry_saved)
+                printf("           saved entry: %ls\n", config->entry_saved);
+        printf("                editor: %ls\n", yes_no(config->editor));
+        printf("          auto-entries: %ls\n", yes_no(config->auto_entries));
+        printf("         auto-firmware: %ls\n", yes_no(config->auto_firmware));
+        printf("                  beep: %ls\n", yes_no(config->beep));
+        printf("  reboot-for-bitlocker: %ls\n", yes_no(config->reboot_for_bitlocker));
+
+        switch (config->secure_boot_enroll) {
+        case ENROLL_OFF:
+                printf("    secure-boot-enroll: off\n");
+                break;
+        case ENROLL_MANUAL:
+                printf("    secure-boot-enroll: manual\n");
+                break;
+        case ENROLL_IF_SAFE:
+                printf("    secure-boot-enroll: if-safe\n");
+                break;
+        case ENROLL_FORCE:
+                printf("    secure-boot-enroll: force\n");
+                break;
+        default:
+                assert_not_reached();
+        }
+
+        switch (config->console_mode) {
+        case CONSOLE_MODE_AUTO:
+                printf(" console-mode (config): auto\n");
+                break;
+        case CONSOLE_MODE_KEEP:
+                printf(" console-mode (config): keep\n");
+                break;
+        case CONSOLE_MODE_FIRMWARE_MAX:
+                printf(" console-mode (config): max\n");
+                break;
+        default:
+                printf(" console-mode (config): %" PRIi64 "\n", config->console_mode);
+                break;
+        }
+
+        /* EFI var console mode is always a concrete value or unset. */
+        if (config->console_mode_efivar != CONSOLE_MODE_KEEP)
+                printf("console-mode (EFI var): %" PRIi64 "\n", config->console_mode_efivar);
+
+        if (!ps_continue())
+                return;
+
+        for (size_t i = 0; i < config->entry_count; i++) {
+                ConfigEntry *entry = config->entries[i];
+                EFI_DEVICE_PATH *dp = NULL;
+                _cleanup_free_ char16_t *dp_str = NULL;
+
+                if (entry->device &&
+                    BS->HandleProtocol(entry->device, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL), (void **) &dp) ==
+                                    EFI_SUCCESS)
+                        (void) device_path_to_str(dp, &dp_str);
+
+                printf("  config entry: %zu/%zu\n", i + 1, config->entry_count);
+                printf("            id: %ls\n", entry->id);
+                if (entry->title)
+                        printf("         title: %ls\n", entry->title);
+                if (entry->title_show && !streq16(entry->title, entry->title_show))
+                        printf("    title show: %ls\n", entry->title_show);
+                if (entry->sort_key)
+                        printf("      sort key: %ls\n", entry->sort_key);
+                if (entry->version)
+                        printf("       version: %ls\n", entry->version);
+                if (entry->machine_id)
+                        printf("    machine-id: %ls\n", entry->machine_id);
+                if (dp_str)
+                        printf("        device: %ls\n", dp_str);
+                if (entry->loader)
+                        printf("        loader: %ls\n", entry->loader);
+                STRV_FOREACH(initrd, entry->initrd)
+                        printf("        initrd: %ls\n", *initrd);
+                if (entry->devicetree)
+                        printf("    devicetree: %ls\n", entry->devicetree);
+                if (entry->options)
+                        printf("       options: %ls\n", entry->options);
+                printf(" internal call: %ls\n", yes_no(!!entry->call));
+
+                printf("counting boots: %ls\n", yes_no(entry->tries_left >= 0));
+                if (entry->tries_left >= 0) {
+                        printf("         tries: %i left, %i done\n", entry->tries_left, entry->tries_done);
+                        printf("  current path: %ls\\%ls\n", entry->path, entry->current_name);
+                        printf("     next path: %ls\\%ls\n", entry->path, entry->next_name);
+                }
+
+                if (!ps_continue())
+                        return;
+        }
+}
+
+static EFI_STATUS reboot_into_firmware(void) {
+        uint64_t osind = 0;
+        EFI_STATUS err;
+
+        if (!FLAGS_SET(get_os_indications_supported(), EFI_OS_INDICATIONS_BOOT_TO_FW_UI))
+                return log_error_status(EFI_UNSUPPORTED, "Reboot to firmware interface not supported.");
+
+        (void) efivar_get_uint64_le(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"OsIndications", &osind);
+        osind |= EFI_OS_INDICATIONS_BOOT_TO_FW_UI;
+
+        err = efivar_set_uint64_le(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"OsIndications", osind, EFI_VARIABLE_NON_VOLATILE);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error setting OsIndications: %m");
+
+        RT->ResetSystem(EfiResetCold, EFI_SUCCESS, 0, NULL);
+        assert_not_reached();
+}
+
+static bool menu_run(
                 Config *config,
                 ConfigEntry **chosen_entry,
-                CHAR16 *loaded_image_path) {
+                char16_t *loaded_image_path) {
+
+        assert(config);
+        assert(chosen_entry);
 
         EFI_STATUS err;
-        UINTN visible_max;
-        UINTN idx_highlight;
-        UINTN idx_highlight_prev;
-        UINTN idx_first;
-        UINTN idx_last;
-        BOOLEAN refresh;
-        BOOLEAN highlight;
-        UINTN line_width;
-        CHAR16 **lines;
-        UINTN x_start;
-        UINTN y_start;
-        UINTN x_max;
-        UINTN y_max;
-        CHAR16 *status;
-        CHAR16 *clearline;
-        UINTN timeout_remain = config->timeout_sec;
-        INT16 idx;
-        BOOLEAN exit = FALSE;
-        BOOLEAN run = TRUE;
+        size_t visible_max = 0;
+        size_t idx_highlight = config->idx_default, idx_highlight_prev = 0;
+        size_t idx, idx_first = 0, idx_last = 0;
+        bool new_mode = true, clear = true;
+        bool refresh = true, highlight = false;
+        size_t x_start = 0, y_start = 0, y_status = 0, x_max, y_max;
+        _cleanup_(strv_freep) char16_t **lines = NULL;
+        _cleanup_free_ char16_t *clearline = NULL, *separator = NULL, *status = NULL;
+        uint32_t timeout_efivar_saved = config->timeout_sec_efivar;
+        uint32_t timeout_remain = config->timeout_sec == TIMEOUT_MENU_FORCE ? 0 : config->timeout_sec;
+        bool exit = false, run = true, firmware_setup = false;
+        int64_t console_mode_initial = ST->ConOut->Mode->Mode, console_mode_efivar_saved = config->console_mode_efivar;
+        size_t default_efivar_saved = config->idx_default_efivar;
 
-        graphics_mode(FALSE);
-        uefi_call_wrapper(ST->ConIn->Reset, 2, ST->ConIn, FALSE);
-        uefi_call_wrapper(ST->ConOut->EnableCursor, 2, ST->ConOut, FALSE);
-        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
+        graphics_mode(false);
+        ST->ConIn->Reset(ST->ConIn, false);
+        ST->ConOut->EnableCursor(ST->ConOut, false);
 
         /* draw a single character to make ClearScreen work on some firmware */
-        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, (CHAR16*) L" ");
+        ST->ConOut->OutputString(ST->ConOut, (char16_t *) u" ");
 
-        if (config->console_mode_change != CONSOLE_MODE_KEEP) {
-                err = console_set_mode(&config->console_mode, config->console_mode_change);
-                if (EFI_ERROR(err)) {
-                        uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
-                        log_error_stall(L"Error switching console mode to %lu: %r", (UINT64)config->console_mode, err);
-                }
-        } else
-                uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
-
-        err = uefi_call_wrapper(ST->ConOut->QueryMode, 4, ST->ConOut, ST->ConOut->Mode->Mode, &x_max, &y_max);
-        if (EFI_ERROR(err)) {
-                x_max = 80;
-                y_max = 25;
+        err = console_set_mode(config->console_mode_efivar != CONSOLE_MODE_KEEP ?
+                               config->console_mode_efivar : config->console_mode);
+        if (err != EFI_SUCCESS) {
+                clear_screen(COLOR_NORMAL);
+                log_error_status(err, "Error switching console mode: %m");
         }
 
-        idx_highlight = config->idx_default;
-        idx_highlight_prev = 0;
-
-        visible_max = y_max - 2;
-
-        if ((UINTN)config->idx_default >= visible_max)
-                idx_first = config->idx_default-1;
-        else
-                idx_first = 0;
-
-        idx_last = idx_first + visible_max-1;
-
-        refresh = TRUE;
-        highlight = FALSE;
-
-        /* length of the longest entry */
-        line_width = 5;
-        for (UINTN i = 0; i < config->entry_count; i++) {
-                UINTN entry_len;
-
-                entry_len = StrLen(config->entries[i]->title_show);
-                if (line_width < entry_len)
-                        line_width = entry_len;
-        }
-        if (line_width > x_max-6)
-                line_width = x_max-6;
-
-        /* offsets to center the entries on the screen */
-        x_start = (x_max - (line_width)) / 2;
-        if (config->entry_count < visible_max)
-                y_start = ((visible_max - config->entry_count) / 2) + 1;
-        else
-                y_start = 0;
-
-        /* menu entries title lines */
-        lines = AllocatePool(sizeof(CHAR16 *) * config->entry_count);
-        for (UINTN i = 0; i < config->entry_count; i++) {
-                UINTN j;
-
-                lines[i] = AllocatePool(((x_max+1) * sizeof(CHAR16)));
-                for (j = 0; j < x_start; j++)
-                        lines[i][j] = ' ';
-
-                for (UINTN k = 0; config->entries[i]->title_show[k] != '\0' && j < x_max; j++, k++)
-                        lines[i][j] = config->entries[i]->title_show[k];
-
-                for (; j < x_max; j++)
-                        lines[i][j] = ' ';
-                lines[i][x_max] = '\0';
-        }
-
-        status = NULL;
-        clearline = AllocatePool((x_max+1) * sizeof(CHAR16));
-        for (UINTN i = 0; i < x_max; i++)
-                clearline[i] = ' ';
-        clearline[x_max] = 0;
-
+        size_t line_width = 0, entry_padding = 3;
         while (!exit) {
-                UINT64 key;
+                uint64_t key;
+
+                if (new_mode) {
+                        console_query_mode(&x_max, &y_max);
+
+                        /* account for padding+status */
+                        visible_max = y_max - 2;
+
+                        /* Drawing entries starts at idx_first until idx_last. We want to make
+                        * sure that idx_highlight is centered, but not if we are close to the
+                        * beginning/end of the entry list. Otherwise we would have a half-empty
+                        * screen. */
+                        if (config->entry_count <= visible_max || idx_highlight <= visible_max / 2)
+                                idx_first = 0;
+                        else if (idx_highlight >= config->entry_count - (visible_max / 2))
+                                idx_first = config->entry_count - visible_max;
+                        else
+                                idx_first = idx_highlight - (visible_max / 2);
+                        idx_last = idx_first + visible_max - 1;
+
+                        /* length of the longest entry */
+                        line_width = 0;
+                        for (size_t i = 0; i < config->entry_count; i++)
+                                line_width = MAX(line_width, strlen16(config->entries[i]->title_show));
+                        line_width = MIN(line_width + 2 * entry_padding, x_max);
+
+                        /* offsets to center the entries on the screen */
+                        x_start = (x_max - (line_width)) / 2;
+                        if (config->entry_count < visible_max)
+                                y_start = ((visible_max - config->entry_count) / 2) + 1;
+                        else
+                                y_start = 0;
+
+                        /* Put status line after the entry list, but give it some breathing room. */
+                        y_status = MIN(y_start + MIN(visible_max, config->entry_count) + 1, y_max - 1);
+
+                        lines = strv_free(lines);
+                        clearline = mfree(clearline);
+                        separator = mfree(separator);
+
+                        /* menu entries title lines */
+                        lines = xnew(char16_t *, config->entry_count + 1);
+
+                        for (size_t i = 0; i < config->entry_count; i++) {
+                                size_t j, padding;
+
+                                lines[i] = xnew(char16_t, line_width + 1);
+                                padding = (line_width - MIN(strlen16(config->entries[i]->title_show), line_width)) / 2;
+
+                                for (j = 0; j < padding; j++)
+                                        lines[i][j] = ' ';
+
+                                for (size_t k = 0; config->entries[i]->title_show[k] != '\0' && j < line_width; j++, k++)
+                                        lines[i][j] = config->entries[i]->title_show[k];
+
+                                for (; j < line_width; j++)
+                                        lines[i][j] = ' ';
+                                lines[i][line_width] = '\0';
+                        }
+                        lines[config->entry_count] = NULL;
+
+                        clearline = xnew(char16_t, x_max + 1);
+                        separator = xnew(char16_t, x_max + 1);
+                        for (size_t i = 0; i < x_max; i++) {
+                                clearline[i] = ' ';
+                                separator[i] = unicode_supported() ? L'─' : L'-';
+                        }
+                        clearline[x_max] = 0;
+                        separator[x_max] = 0;
+
+                        new_mode = false;
+                        clear = true;
+                }
+
+                if (clear) {
+                        clear_screen(COLOR_NORMAL);
+                        clear = false;
+                        refresh = true;
+                }
 
                 if (refresh) {
-                        for (UINTN i = 0; i < config->entry_count; i++) {
-                                if (i < idx_first || i > idx_last)
-                                        continue;
-                                uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_start + i - idx_first);
-                                if (i == idx_highlight)
-                                        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut,
-                                                          EFI_BLACK|EFI_BACKGROUND_LIGHTGRAY);
-                                else
-                                        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut,
-                                                          EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
-                                uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[i]);
-                                if ((INTN)i == config->idx_default_efivar) {
-                                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + i - idx_first);
-                                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, (CHAR16*) L"=>");
-                                }
+                        for (size_t i = idx_first; i <= idx_last && i < config->entry_count; i++) {
+                                print_at(x_start, y_start + i - idx_first,
+                                         i == idx_highlight ? COLOR_HIGHLIGHT : COLOR_ENTRY,
+                                         lines[i]);
+                                if (i == config->idx_default_efivar)
+                                        print_at(x_start,
+                                                 y_start + i - idx_first,
+                                                 i == idx_highlight ? COLOR_HIGHLIGHT : COLOR_ENTRY,
+                                                 unicode_supported() ? u" ►" : u"=>");
                         }
-                        refresh = FALSE;
+                        refresh = false;
                 } else if (highlight) {
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_start + idx_highlight_prev - idx_first);
-                        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
-                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[idx_highlight_prev]);
-                        if ((INTN)idx_highlight_prev == config->idx_default_efivar) {
-                                uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + idx_highlight_prev - idx_first);
-                                uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, (CHAR16*) L"=>");
-                        }
-
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_start + idx_highlight - idx_first);
-                        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_BLACK|EFI_BACKGROUND_LIGHTGRAY);
-                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[idx_highlight]);
-                        if ((INTN)idx_highlight == config->idx_default_efivar) {
-                                uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + idx_highlight - idx_first);
-                                uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, (CHAR16*) L"=>");
-                        }
-                        highlight = FALSE;
+                        print_at(x_start, y_start + idx_highlight_prev - idx_first, COLOR_ENTRY, lines[idx_highlight_prev]);
+                        print_at(x_start, y_start + idx_highlight - idx_first, COLOR_HIGHLIGHT, lines[idx_highlight]);
+                        if (idx_highlight_prev == config->idx_default_efivar)
+                                print_at(x_start,
+                                         y_start + idx_highlight_prev - idx_first,
+                                         COLOR_ENTRY,
+                                         unicode_supported() ? u" ►" : u"=>");
+                        if (idx_highlight == config->idx_default_efivar)
+                                print_at(x_start,
+                                         y_start + idx_highlight - idx_first,
+                                         COLOR_HIGHLIGHT,
+                                         unicode_supported() ? u" ►" : u"=>");
+                        highlight = false;
                 }
 
                 if (timeout_remain > 0) {
-                        FreePool(status);
-                        status = PoolPrint(L"Boot in %d s.", timeout_remain);
+                        free(status);
+                        status = xasprintf("Boot in %u s.", timeout_remain);
                 }
 
-                /* print status at last line of screen */
                 if (status) {
-                        UINTN len;
-                        UINTN x;
+                        /* If we draw the last char of the last line, the screen will scroll and break our
+                         * input. Therefore, draw one less character then we could for the status message.
+                         * Note that the same does not apply for the separator line as it will never be drawn
+                         * on the last line. */
+                        size_t len = strnlen16(status, x_max - 1);
+                        size_t x = (x_max - len) / 2;
+                        status[len] = '\0';
+                        print_at(0, y_status, COLOR_NORMAL, clearline + x_max - x);
+                        ST->ConOut->OutputString(ST->ConOut, status);
+                        ST->ConOut->OutputString(ST->ConOut, clearline + 1 + x + len);
 
-                        /* center line */
-                        len = StrLen(status);
-                        if (len < x_max)
-                                x = (x_max - len) / 2;
-                        else
-                                x = 0;
-                        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_max-1);
-                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, clearline + (x_max - x));
-                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, status);
-                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, clearline+1 + x + len);
+                        len = MIN(MAX(len, line_width) + 2 * entry_padding, x_max);
+                        x = (x_max - len) / 2;
+                        print_at(x, y_status - 1, COLOR_NORMAL, separator + x_max - len);
+                } else {
+                        print_at(0, y_status - 1, COLOR_NORMAL, clearline);
+                        print_at(0, y_status, COLOR_NORMAL, clearline + 1); /* See comment above. */
                 }
 
-                err = console_key_read(&key, timeout_remain > 0 ? 1000 * 1000 : 0);
+                /* Beep several times so that the selected entry can be distinguished. */
+                if (config->beep)
+                        beep(idx_highlight + 1);
+
+                err = console_key_read(&key, timeout_remain > 0 ? 1000 * 1000 : UINT64_MAX);
+                if (err == EFI_NOT_READY)
+                        /* No input device returned a key, try again. This
+                         * normally should not happen. */
+                        continue;
                 if (err == EFI_TIMEOUT) {
+                        assert(timeout_remain > 0);
                         timeout_remain--;
                         if (timeout_remain == 0) {
-                                exit = TRUE;
+                                exit = true;
                                 break;
                         }
 
                         /* update status */
                         continue;
-                } else
-                        timeout_remain = 0;
-
-                /* clear status after keystroke */
-                if (status) {
-                        FreePool(status);
-                        status = NULL;
-                        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_max-1);
-                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, clearline+1);
+                }
+                if (err != EFI_SUCCESS) {
+                        exit = true;
+                        break;
                 }
 
+                timeout_remain = 0;
+
+                /* clear status after keystroke */
+                status = mfree(status);
+
                 idx_highlight_prev = idx_highlight;
 
+                if (firmware_setup) {
+                        firmware_setup = false;
+                        if (key == KEYPRESS(0, 0, CHAR_CARRIAGE_RETURN))
+                                reboot_into_firmware();
+                        continue;
+                }
+
                 switch (key) {
                 case KEYPRESS(0, SCAN_UP, 0):
                 case KEYPRESS(0, 0, 'k'):
+                case KEYPRESS(0, 0, 'K'):
                         if (idx_highlight > 0)
                                 idx_highlight--;
                         break;
 
                 case KEYPRESS(0, SCAN_DOWN, 0):
                 case KEYPRESS(0, 0, 'j'):
+                case KEYPRESS(0, 0, 'J'):
                         if (idx_highlight < config->entry_count-1)
                                 idx_highlight++;
                         break;
@@ -697,7 +851,7 @@
                 case KEYPRESS(0, SCAN_HOME, 0):
                 case KEYPRESS(EFI_ALT_PRESSED, 0, '<'):
                         if (idx_highlight > 0) {
-                                refresh = TRUE;
+                                refresh = true;
                                 idx_highlight = 0;
                         }
                         break;
@@ -705,7 +859,7 @@
                 case KEYPRESS(0, SCAN_END, 0):
                 case KEYPRESS(EFI_ALT_PRESSED, 0, '>'):
                         if (idx_highlight < config->entry_count-1) {
-                                refresh = TRUE;
+                                refresh = true;
                                 idx_highlight = config->entry_count-1;
                         }
                         break;
@@ -725,343 +879,428 @@
 
                 case KEYPRESS(0, 0, CHAR_LINEFEED):
                 case KEYPRESS(0, 0, CHAR_CARRIAGE_RETURN):
-                case KEYPRESS(0, CHAR_CARRIAGE_RETURN, 0): /* EZpad Mini 4s firmware sends malformed events */
-                case KEYPRESS(0, CHAR_CARRIAGE_RETURN, CHAR_CARRIAGE_RETURN): /* Teclast X98+ II firmware sends malformed events */
+                case KEYPRESS(0, SCAN_F3, 0): /* EZpad Mini 4s firmware sends malformed events */
+                case KEYPRESS(0, SCAN_F3, CHAR_CARRIAGE_RETURN): /* Teclast X98+ II firmware sends malformed events */
                 case KEYPRESS(0, SCAN_RIGHT, 0):
-                        exit = TRUE;
+                        exit = true;
                         break;
 
                 case KEYPRESS(0, SCAN_F1, 0):
                 case KEYPRESS(0, 0, 'h'):
+                case KEYPRESS(0, 0, 'H'):
                 case KEYPRESS(0, 0, '?'):
-                        status = StrDuplicate(L"(d)efault, (t/T)timeout, (e)dit, (v)ersion (Q)uit (P)rint (h)elp");
+                        /* This must stay below 80 characters! Q/v/Ctrl+l/f deliberately not advertised. */
+                        status = xstrdup16(u"(d)efault (t/T)timeout (e)dit (r/R)resolution (p)rint (h)elp");
                         break;
 
                 case KEYPRESS(0, 0, 'Q'):
-                        exit = TRUE;
-                        run = FALSE;
+                        exit = true;
+                        run = false;
                         break;
 
                 case KEYPRESS(0, 0, 'd'):
-                        if (config->idx_default_efivar != (INTN)idx_highlight) {
-                                /* store the selected entry in a persistent EFI variable */
-                                efivar_set(
-                                        LOADER_GUID,
-                                        L"LoaderEntryDefault",
-                                        config->entries[idx_highlight]->id,
-                                        EFI_VARIABLE_NON_VOLATILE);
+                case KEYPRESS(0, 0, 'D'):
+                        if (config->idx_default_efivar != idx_highlight) {
+                                free(config->entry_default_efivar);
+                                config->entry_default_efivar = xstrdup16(config->entries[idx_highlight]->id);
                                 config->idx_default_efivar = idx_highlight;
-                                status = StrDuplicate(L"Default boot entry selected.");
+                                status = xstrdup16(u"Default boot entry selected.");
                         } else {
-                                /* clear the default entry EFI variable */
-                                efivar_set(LOADER_GUID, L"LoaderEntryDefault", NULL, EFI_VARIABLE_NON_VOLATILE);
-                                config->idx_default_efivar = -1;
-                                status = StrDuplicate(L"Default boot entry cleared.");
+                                config->entry_default_efivar = mfree(config->entry_default_efivar);
+                                config->idx_default_efivar = IDX_INVALID;
+                                status = xstrdup16(u"Default boot entry cleared.");
                         }
-                        refresh = TRUE;
+                        config->use_saved_entry_efivar = false;
+                        refresh = true;
                         break;
 
                 case KEYPRESS(0, 0, '-'):
                 case KEYPRESS(0, 0, 'T'):
-                        if (config->timeout_sec_efivar > 0) {
-                                config->timeout_sec_efivar--;
-                                efivar_set_uint_string(
-                                        LOADER_GUID,
-                                        L"LoaderConfigTimeout",
-                                        config->timeout_sec_efivar,
-                                        EFI_VARIABLE_NON_VOLATILE);
-                                if (config->timeout_sec_efivar > 0)
-                                        status = PoolPrint(L"Menu timeout set to %d s.", config->timeout_sec_efivar);
-                                else
-                                        status = StrDuplicate(L"Menu disabled. Hold down key at bootup to show menu.");
-                        } else if (config->timeout_sec_efivar <= 0){
-                                config->timeout_sec_efivar = -1;
-                                efivar_set(
-                                        LOADER_GUID, L"LoaderConfigTimeout", NULL, EFI_VARIABLE_NON_VOLATILE);
-                                if (config->timeout_sec_config > 0)
-                                        status = PoolPrint(L"Menu timeout of %d s is defined by configuration file.",
-                                                           config->timeout_sec_config);
-                                else
-                                        status = StrDuplicate(L"Menu disabled. Hold down key at bootup to show menu.");
-                        }
+                        status = update_timeout_efivar(&config->timeout_sec_efivar, false);
                         break;
 
                 case KEYPRESS(0, 0, '+'):
                 case KEYPRESS(0, 0, 't'):
-                        if (config->timeout_sec_efivar == -1 && config->timeout_sec_config == 0)
-                                config->timeout_sec_efivar++;
-                        config->timeout_sec_efivar++;
-                        efivar_set_uint_string(
-                                LOADER_GUID,
-                                L"LoaderConfigTimeout",
-                                config->timeout_sec_efivar,
-                                EFI_VARIABLE_NON_VOLATILE);
-                        if (config->timeout_sec_efivar > 0)
-                                status = PoolPrint(L"Menu timeout set to %d s.",
-                                                   config->timeout_sec_efivar);
-                        else
-                                status = StrDuplicate(L"Menu disabled. Hold down key at bootup to show menu.");
+                        status = update_timeout_efivar(&config->timeout_sec_efivar, true);
                         break;
 
                 case KEYPRESS(0, 0, 'e'):
+                case KEYPRESS(0, 0, 'E'):
                         /* only the options of configured entries can be edited */
-                        if (!config->editor || config->entries[idx_highlight]->type == LOADER_UNDEFINED)
+                        if (!config->editor || !IN_SET(config->entries[idx_highlight]->type,
+                            LOADER_EFI, LOADER_LINUX, LOADER_UNIFIED_LINUX))
                                 break;
-                        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_max-1);
-                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, clearline+1);
-                        if (line_edit(config->entries[idx_highlight]->options, &config->options_edit, x_max-1, y_max-1))
-                                exit = TRUE;
-                        uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_max-1);
-                        uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, clearline+1);
+
+                        /* Unified kernels that are signed as a whole will not accept command line options
+                         * when secure boot is enabled unless there is none embedded in the image. Do not try
+                         * to pretend we can edit it to only have it be ignored. */
+                        if (config->entries[idx_highlight]->type == LOADER_UNIFIED_LINUX &&
+                            secure_boot_enabled() &&
+                            config->entries[idx_highlight]->options)
+                                break;
+
+                        /* The edit line may end up on the last line of the screen. And even though we're
+                         * not telling the firmware to advance the line, it still does in this one case,
+                         * causing a scroll to happen that screws with our beautiful boot loader output.
+                         * Since we cannot paint the last character of the edit line, we simply start
+                         * at x-offset 1 for symmetry. */
+                        print_at(1, y_status, COLOR_EDIT, clearline + 2);
+                        exit = line_edit(&config->entries[idx_highlight]->options, x_max - 2, y_status);
+                        print_at(1, y_status, COLOR_NORMAL, clearline + 2);
                         break;
 
                 case KEYPRESS(0, 0, 'v'):
-                        status = PoolPrint(L"systemd-boot " GIT_VERSION " (" EFI_MACHINE_TYPE_NAME "), UEFI Specification %d.%02d, Vendor %s %d.%02d",
-                                           ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff,
-                                           ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
+                        status = xasprintf(
+                                        "systemd-boot " GIT_VERSION " (" EFI_MACHINE_TYPE_NAME "), "
+                                        "UEFI Specification %u.%02u, Vendor %ls %u.%02u",
+                                        ST->Hdr.Revision >> 16,
+                                        ST->Hdr.Revision & 0xffff,
+                                        ST->FirmwareVendor,
+                                        ST->FirmwareRevision >> 16,
+                                        ST->FirmwareRevision & 0xffff);
                         break;
 
+                case KEYPRESS(0, 0, 'p'):
                 case KEYPRESS(0, 0, 'P'):
                         print_status(config, loaded_image_path);
-                        refresh = TRUE;
+                        clear = true;
                         break;
 
                 case KEYPRESS(EFI_CONTROL_PRESSED, 0, 'l'):
                 case KEYPRESS(EFI_CONTROL_PRESSED, 0, CHAR_CTRL('l')):
-                        refresh = TRUE;
+                        clear = true;
+                        break;
+
+                case KEYPRESS(0, 0, 'r'):
+                        err = console_set_mode(CONSOLE_MODE_NEXT);
+                        if (err != EFI_SUCCESS)
+                                status = xasprintf_status(err, "Error changing console mode: %m");
+                        else {
+                                config->console_mode_efivar = ST->ConOut->Mode->Mode;
+                                status = xasprintf(
+                                                "Console mode changed to %" PRIi64 ".",
+                                                config->console_mode_efivar);
+                        }
+                        new_mode = true;
+                        break;
+
+                case KEYPRESS(0, 0, 'R'):
+                        config->console_mode_efivar = CONSOLE_MODE_KEEP;
+                        err = console_set_mode(config->console_mode == CONSOLE_MODE_KEEP ?
+                                               console_mode_initial : config->console_mode);
+                        if (err != EFI_SUCCESS)
+                                status = xasprintf_status(err, "Error resetting console mode: %m");
+                        else
+                                status = xasprintf(
+                                                "Console mode reset to %s default.",
+                                                config->console_mode == CONSOLE_MODE_KEEP ?
+                                                                "firmware" :
+                                                                "configuration file");
+                        new_mode = true;
+                        break;
+
+                case KEYPRESS(0, 0, 'f'):
+                case KEYPRESS(0, 0, 'F'):
+                case KEYPRESS(0, SCAN_F2, 0):     /* Most vendors. */
+                case KEYPRESS(0, SCAN_F10, 0):    /* HP and Lenovo. */
+                case KEYPRESS(0, SCAN_DELETE, 0): /* Same as F2. */
+                case KEYPRESS(0, SCAN_ESC, 0):    /* HP. */
+                        if (FLAGS_SET(get_os_indications_supported(), EFI_OS_INDICATIONS_BOOT_TO_FW_UI)) {
+                                firmware_setup = true;
+                                /* Let's make sure the user really wants to do this. */
+                                status = xstrdup16(u"Press Enter to reboot into firmware interface.");
+                        } else
+                                status = xstrdup16(u"Reboot into firmware interface not supported.");
                         break;
 
                 default:
                         /* jump with a hotkey directly to a matching entry */
                         idx = entry_lookup_key(config, idx_highlight+1, KEYCHAR(key));
-                        if (idx < 0)
+                        if (idx == IDX_INVALID)
                                 break;
                         idx_highlight = idx;
-                        refresh = TRUE;
+                        refresh = true;
                 }
 
                 if (idx_highlight > idx_last) {
                         idx_last = idx_highlight;
                         idx_first = 1 + idx_highlight - visible_max;
-                        refresh = TRUE;
+                        refresh = true;
                 } else if (idx_highlight < idx_first) {
                         idx_first = idx_highlight;
                         idx_last = idx_highlight + visible_max-1;
-                        refresh = TRUE;
+                        refresh = true;
                 }
 
                 if (!refresh && idx_highlight != idx_highlight_prev)
-                        highlight = TRUE;
+                        highlight = true;
         }
 
         *chosen_entry = config->entries[idx_highlight];
 
-        for (UINTN i = 0; i < config->entry_count; i++)
-                FreePool(lines[i]);
-        FreePool(lines);
-        FreePool(clearline);
+        /* Update EFI vars after we left the menu to reduce NVRAM writes. */
 
-        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_WHITE|EFI_BACKGROUND_BLACK);
-        uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
+        if (default_efivar_saved != config->idx_default_efivar)
+                efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderEntryDefault", config->entry_default_efivar, EFI_VARIABLE_NON_VOLATILE);
+
+        if (console_mode_efivar_saved != config->console_mode_efivar) {
+                if (config->console_mode_efivar == CONSOLE_MODE_KEEP)
+                        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderConfigConsoleMode", NULL, EFI_VARIABLE_NON_VOLATILE);
+                else
+                        efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"LoaderConfigConsoleMode",
+                                               config->console_mode_efivar, EFI_VARIABLE_NON_VOLATILE);
+        }
+
+        if (timeout_efivar_saved != config->timeout_sec_efivar) {
+                switch (config->timeout_sec_efivar) {
+                case TIMEOUT_UNSET:
+                        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderConfigTimeout", NULL, EFI_VARIABLE_NON_VOLATILE);
+                        break;
+                case TIMEOUT_MENU_FORCE:
+                        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderConfigTimeout", u"menu-force", EFI_VARIABLE_NON_VOLATILE);
+                        break;
+                case TIMEOUT_MENU_HIDDEN:
+                        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderConfigTimeout", u"menu-hidden", EFI_VARIABLE_NON_VOLATILE);
+                        break;
+                default:
+                        efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"LoaderConfigTimeout",
+                                               config->timeout_sec_efivar, EFI_VARIABLE_NON_VOLATILE);
+                }
+        }
+
+        clear_screen(COLOR_NORMAL);
         return run;
 }
 
-static VOID config_add_entry(Config *config, ConfigEntry *entry) {
-        if ((config->entry_count & 15) == 0) {
-                UINTN i;
+static void config_add_entry(Config *config, ConfigEntry *entry) {
+        assert(config);
+        assert(entry);
 
-                i = config->entry_count + 16;
-                if (config->entry_count == 0)
-                        config->entries = AllocatePool(sizeof(VOID *) * i);
-                else
-                        config->entries = ReallocatePool(config->entries,
-                                                         sizeof(VOID *) * config->entry_count, sizeof(VOID *) * i);
+        /* This is just for paranoia. */
+        assert(config->entry_count < IDX_MAX);
+
+        if ((config->entry_count & 15) == 0) {
+                config->entries = xrealloc(
+                                config->entries,
+                                sizeof(void *) * config->entry_count,
+                                sizeof(void *) * (config->entry_count + 16));
         }
         config->entries[config->entry_count++] = entry;
 }
 
-static VOID config_entry_free(ConfigEntry *entry) {
+static void config_entry_free(ConfigEntry *entry) {
         if (!entry)
                 return;
 
-        FreePool(entry->id);
-        FreePool(entry->title_show);
-        FreePool(entry->title);
-        FreePool(entry->version);
-        FreePool(entry->machine_id);
-        FreePool(entry->loader);
-        FreePool(entry->options);
-        FreePool(entry->path);
-        FreePool(entry->current_name);
-        FreePool(entry->next_name);
-        FreePool(entry);
+        free(entry->id);
+        free(entry->title_show);
+        free(entry->title);
+        free(entry->sort_key);
+        free(entry->version);
+        free(entry->machine_id);
+        free(entry->loader);
+        free(entry->devicetree);
+        free(entry->options);
+        strv_free(entry->initrd);
+        free(entry->path);
+        free(entry->current_name);
+        free(entry->next_name);
+        free(entry);
 }
 
-static CHAR8 *line_get_key_value(
-                CHAR8 *content,
-                const CHAR8 *sep,
-                UINTN *pos,
-                CHAR8 **key_ret,
-                CHAR8 **value_ret) {
-
-        CHAR8 *line, *value;
-        UINTN linelen;
-
-skip:
-        line = content + *pos;
-        if (*line == '\0')
-                return NULL;
-
-        linelen = 0;
-        while (line[linelen] && !strchra((CHAR8 *)"\n\r", line[linelen]))
-               linelen++;
-
-        /* move pos to next line */
-        *pos += linelen;
-        if (content[*pos])
-                (*pos)++;
-
-        /* empty line */
-        if (linelen == 0)
-                goto skip;
-
-        /* terminate line */
-        line[linelen] = '\0';
-
-        /* remove leading whitespace */
-        while (strchra((CHAR8 *)" \t", *line)) {
-                line++;
-                linelen--;
-        }
-
-        /* remove trailing whitespace */
-        while (linelen > 0 && strchra((CHAR8 *)" \t", line[linelen-1]))
-                linelen--;
-        line[linelen] = '\0';
-
-        if (*line == '#')
-                goto skip;
-
-        /* split key/value */
-        value = line;
-        while (*value && !strchra(sep, *value))
-                value++;
-        if (*value == '\0')
-                goto skip;
-        *value = '\0';
-        value++;
-        while (*value && strchra(sep, *value))
-                value++;
-
-        /* unquote */
-        if (value[0] == '"' && line[linelen-1] == '"') {
-                value++;
-                line[linelen-1] = '\0';
-        }
-
-        *key_ret = line;
-        *value_ret = value;
-        return line;
+static inline void config_entry_freep(ConfigEntry **entry) {
+        config_entry_free(*entry);
 }
 
-static VOID config_defaults_load_from_file(Config *config, CHAR8 *content) {
-        CHAR8 *line;
-        UINTN pos = 0;
-        CHAR8 *key, *value;
+static char *line_get_key_value(
+                char *content,
+                const char *sep,
+                size_t *pos,
+                char **key_ret,
+                char **value_ret) {
 
-        while ((line = line_get_key_value(content, (CHAR8 *)" \t", &pos, &key, &value))) {
-                if (strcmpa((CHAR8 *)"timeout", key) == 0) {
-                        _cleanup_freepool_ CHAR16 *s = NULL;
+        char *line, *value;
+        size_t linelen;
 
-                        s = stra_to_str(value);
-                        config->timeout_sec_config = Atoi(s);
+        assert(content);
+        assert(sep);
+        assert(pos);
+        assert(key_ret);
+        assert(value_ret);
+
+        for (;;) {
+                line = content + *pos;
+                if (*line == '\0')
+                        return NULL;
+
+                linelen = 0;
+                while (line[linelen] && !strchr8("\n\r", line[linelen]))
+                        linelen++;
+
+                /* move pos to next line */
+                *pos += linelen;
+                if (content[*pos])
+                        (*pos)++;
+
+                /* empty line */
+                if (linelen == 0)
+                        continue;
+
+                /* terminate line */
+                line[linelen] = '\0';
+
+                /* remove leading whitespace */
+                while (strchr8(" \t", *line)) {
+                        line++;
+                        linelen--;
+                }
+
+                /* remove trailing whitespace */
+                while (linelen > 0 && strchr8(" \t", line[linelen - 1]))
+                        linelen--;
+                line[linelen] = '\0';
+
+                if (*line == '#')
+                        continue;
+
+                /* split key/value */
+                value = line;
+                while (*value && !strchr8(sep, *value))
+                        value++;
+                if (*value == '\0')
+                        continue;
+                *value = '\0';
+                value++;
+                while (*value && strchr8(sep, *value))
+                        value++;
+
+                /* unquote */
+                if (value[0] == '"' && line[linelen - 1] == '"') {
+                        value++;
+                        line[linelen - 1] = '\0';
+                }
+
+                *key_ret = line;
+                *value_ret = value;
+                return line;
+        }
+}
+
+static void config_defaults_load_from_file(Config *config, char *content) {
+        char *line;
+        size_t pos = 0;
+        char *key, *value;
+        EFI_STATUS err;
+
+        assert(config);
+        assert(content);
+
+        while ((line = line_get_key_value(content, " \t", &pos, &key, &value))) {
+                if (streq8(key, "timeout")) {
+                        if (streq8( value, "menu-force"))
+                                config->timeout_sec_config = TIMEOUT_MENU_FORCE;
+                        else if (streq8(value, "menu-hidden"))
+                                config->timeout_sec_config = TIMEOUT_MENU_HIDDEN;
+                        else {
+                                uint64_t u;
+                                if (!parse_number8(value, &u, NULL) || u > TIMEOUT_TYPE_MAX) {
+                                        log_error("Error parsing 'timeout' config option: %s", value);
+                                        continue;
+                                }
+                                config->timeout_sec_config = u;
+                        }
                         config->timeout_sec = config->timeout_sec_config;
                         continue;
                 }
 
-                if (strcmpa((CHAR8 *)"default", key) == 0) {
-                        FreePool(config->entry_default_pattern);
-                        config->entry_default_pattern = stra_to_str(value);
-                        StrLwr(config->entry_default_pattern);
-                        continue;
-                }
-
-                if (strcmpa((CHAR8 *)"editor", key) == 0) {
-                        BOOLEAN on;
-
-                        if (EFI_ERROR(parse_boolean(value, &on)))
+                if (streq8(key, "default")) {
+                        if (value[0] == '@' && !strcaseeq8(value, "@saved")) {
+                                log_error("Unsupported special entry identifier: %s", value);
                                 continue;
-
-                        config->editor = on;
-                        continue;
-                }
-
-                if (strcmpa((CHAR8 *)"auto-entries", key) == 0) {
-                        BOOLEAN on;
-
-                        if (EFI_ERROR(parse_boolean(value, &on)))
-                                continue;
-
-                        config->auto_entries = on;
-                        continue;
-                }
-
-                if (strcmpa((CHAR8 *)"auto-firmware", key) == 0) {
-                        BOOLEAN on;
-
-                        if (EFI_ERROR(parse_boolean(value, &on)))
-                                continue;
-
-                        config->auto_firmware = on;
-                        continue;
-                }
-
-                if (strcmpa((CHAR8 *)"console-mode", key) == 0) {
-                        if (strcmpa((CHAR8 *)"auto", value) == 0)
-                                config->console_mode_change = CONSOLE_MODE_AUTO;
-                        else if (strcmpa((CHAR8 *)"max", value) == 0)
-                                config->console_mode_change = CONSOLE_MODE_MAX;
-                        else if (strcmpa((CHAR8 *)"keep", value)  == 0)
-                                config->console_mode_change = CONSOLE_MODE_KEEP;
-                        else {
-                                _cleanup_freepool_ CHAR16 *s = NULL;
-
-                                s = stra_to_str(value);
-                                config->console_mode = Atoi(s);
-                                config->console_mode_change = CONSOLE_MODE_SET;
                         }
-
+                        free(config->entry_default_config);
+                        config->entry_default_config = xstr8_to_16(value);
                         continue;
                 }
 
-                if (strcmpa((CHAR8*) "random-seed-mode", key) == 0) {
-                        if (strcmpa((CHAR8*) "off", value) == 0)
-                                config->random_seed_mode = RANDOM_SEED_OFF;
-                        else if (strcmpa((CHAR8*) "with-system-token", value) == 0)
-                                config->random_seed_mode = RANDOM_SEED_WITH_SYSTEM_TOKEN;
-                        else if (strcmpa((CHAR8*) "always", value) == 0)
-                                config->random_seed_mode = RANDOM_SEED_ALWAYS;
-                        else {
-                                BOOLEAN on;
+                if (streq8(key, "editor")) {
+                        err = parse_boolean(value, &config->editor);
+                        if (err != EFI_SUCCESS)
+                                log_error("Error parsing 'editor' config option: %s", value);
+                        continue;
+                }
 
-                                if (EFI_ERROR(parse_boolean(value, &on)))
+                if (streq8(key, "auto-entries")) {
+                        err = parse_boolean(value, &config->auto_entries);
+                        if (err != EFI_SUCCESS)
+                                log_error("Error parsing 'auto-entries' config option: %s", value);
+                        continue;
+                }
+
+                if (streq8(key, "auto-firmware")) {
+                        err = parse_boolean(value, &config->auto_firmware);
+                        if (err != EFI_SUCCESS)
+                                log_error("Error parsing 'auto-firmware' config option: %s", value);
+                        continue;
+                }
+
+                if (streq8(key, "beep")) {
+                        err = parse_boolean(value, &config->beep);
+                        if (err != EFI_SUCCESS)
+                                log_error("Error parsing 'beep' config option: %s", value);
+                        continue;
+                }
+
+                if (streq8(key, "reboot-for-bitlocker")) {
+                        err = parse_boolean(value, &config->reboot_for_bitlocker);
+                        if (err != EFI_SUCCESS)
+                                log_error("Error parsing 'reboot-for-bitlocker' config option: %s", value);
+                }
+
+                if (streq8(key, "secure-boot-enroll")) {
+                        if (streq8(value, "manual"))
+                                config->secure_boot_enroll = ENROLL_MANUAL;
+                        else if (streq8(value, "force"))
+                                config->secure_boot_enroll = ENROLL_FORCE;
+                        else if (streq8(value, "if-safe"))
+                                config->secure_boot_enroll = ENROLL_IF_SAFE;
+                        else if (streq8(value, "off"))
+                                config->secure_boot_enroll = ENROLL_OFF;
+                        else
+                                log_error("Error parsing 'secure-boot-enroll' config option: %s", value);
+                        continue;
+                }
+
+                if (streq8(key, "console-mode")) {
+                        if (streq8(value, "auto"))
+                                config->console_mode = CONSOLE_MODE_AUTO;
+                        else if (streq8(value, "max"))
+                                config->console_mode = CONSOLE_MODE_FIRMWARE_MAX;
+                        else if (streq8(value, "keep"))
+                                config->console_mode = CONSOLE_MODE_KEEP;
+                        else {
+                                uint64_t u;
+                                if (!parse_number8(value, &u, NULL) || u > CONSOLE_MODE_RANGE_MAX) {
+                                        log_error("Error parsing 'console-mode' config option: %s", value);
                                         continue;
-
-                                config->random_seed_mode = on ? RANDOM_SEED_ALWAYS : RANDOM_SEED_OFF;
+                                }
+                                config->console_mode = u;
                         }
+                        continue;
                 }
         }
 }
 
-static VOID config_entry_parse_tries(
+static void config_entry_parse_tries(
                 ConfigEntry *entry,
-                const CHAR16 *path,
-                const CHAR16 *file,
-                const CHAR16 *suffix) {
+                const char16_t *path,
+                const char16_t *file,
+                const char16_t *suffix) {
 
-        UINTN left = UINTN_MAX, done = UINTN_MAX, factor = 1, i, next_left, next_done;
-        _cleanup_freepool_ CHAR16 *prefix = NULL;
+        assert(entry);
+        assert(path);
+        assert(file);
+        assert(suffix);
 
         /*
          * Parses a suffix of two counters (one going down, one going up) in the form "+LEFT-DONE" from the end of the
@@ -1074,266 +1313,203 @@
          * foobar+4-0.efi → foobar+3-1.efi → foobar+2-2.efi → foobar+1-3.efi → foobar+0-4.efi → STOP!
          */
 
-        i = StrLen(file);
-
-        /* Chop off any suffix such as ".conf" or ".efi" */
-        if (suffix) {
-                UINTN suffix_length;
-
-                suffix_length = StrLen(suffix);
-                if (i < suffix_length)
-                        return;
-
-                i -= suffix_length;
-        }
-
-        /* Go backwards through the string and parse everything we encounter */
+        const char16_t *counter = NULL;
         for (;;) {
-                if (i == 0)
-                        return;
-
-                i--;
-
-                switch (file[i]) {
-
-                case '+':
-                        if (left == UINTN_MAX) /* didn't read at least one digit for 'left'? */
-                                return;
-
-                        if (done == UINTN_MAX) /* no 'done' counter? If so, it's equivalent to 0 */
-                                done = 0;
-
-                        goto good;
-
-                case '-':
-                        if (left == UINTN_MAX) /* didn't parse any digit yet? */
-                                return;
-
-                        if (done != UINTN_MAX) /* already encountered a dash earlier? */
-                                return;
-
-                        /* So we encountered a dash. This means this counter is of the form +LEFT-DONE. Let's assign
-                         * what we already parsed to 'done', and start fresh for the 'left' part. */
-
-                        done = left;
-                        left = UINTN_MAX;
-                        factor = 1;
+                char16_t *plus = strchr16(counter ?: file, '+');
+                if (plus) {
+                        /* We want the last "+". */
+                        counter = plus + 1;
+                        continue;
+                }
+                if (counter)
                         break;
 
-                case '0'...'9': {
-                        UINTN new_factor;
-
-                        if (left == UINTN_MAX)
-                                left = file[i] - '0';
-                        else {
-                                UINTN new_left, digit;
-
-                                digit = file[i] - '0';
-                                if (digit > UINTN_MAX / factor) /* overflow check */
-                                        return;
-
-                                new_left = left + digit * factor;
-                                if (new_left < left) /* overflow check */
-                                        return;
-
-                                if (new_left == UINTN_MAX) /* don't allow us to be confused */
-                                        return;
-                        }
-
-                        new_factor = factor * 10;
-                        if (new_factor < factor) /* overflow check */
-                                return;
-
-                        factor = new_factor;
-                        break;
-                }
-
-                default:
-                        return;
-                }
+                /* No boot counter found. */
+                return;
         }
 
-good:
-        entry->tries_left = left;
-        entry->tries_done = done;
+        uint64_t tries_left, tries_done = 0;
+        size_t prefix_len = counter - file;
 
-        entry->path = StrDuplicate(path);
-        entry->current_name = StrDuplicate(file);
+        if (!parse_number16(counter, &tries_left, &counter) || tries_left > INT_MAX)
+                return;
 
-        next_left = left <= 0 ? 0 : left - 1;
-        next_done = done >= (UINTN) -2 ? (UINTN) -2 : done + 1;
+        /* Parse done counter only if present. */
+        if (*counter == '-' && (!parse_number16(counter + 1, &tries_done, &counter) || tries_done > INT_MAX))
+                return;
 
-        prefix = StrDuplicate(file);
-        prefix[i] = 0;
+        /* Boot counter in the middle of the name? */
+        if (!streq16(counter, suffix))
+                return;
 
-        entry->next_name = PoolPrint(L"%s+%u-%u%s", prefix, next_left, next_done, suffix ?: L"");
+        entry->tries_left = tries_left;
+        entry->tries_done = tries_done;
+        entry->path = xstrdup16(path);
+        entry->current_name = xstrdup16(file);
+        entry->next_name = xasprintf(
+                        "%.*ls%" PRIu64 "-%" PRIu64 "%ls",
+                        (int) prefix_len,
+                        file,
+                        LESS_BY(tries_left, 1u),
+                        MIN(tries_done + 1, (uint64_t) INT_MAX),
+                        suffix);
 }
 
-static VOID config_entry_bump_counters(
-                ConfigEntry *entry,
-                EFI_FILE_HANDLE root_dir) {
+static void config_entry_bump_counters(ConfigEntry *entry, EFI_FILE *root_dir) {
+        _cleanup_free_ char16_t* old_path = NULL, *new_path = NULL;
+        _cleanup_(file_closep) EFI_FILE *handle = NULL;
+        _cleanup_free_ EFI_FILE_INFO *file_info = NULL;
+        size_t file_info_size;
+        EFI_STATUS err;
 
-        _cleanup_freepool_ CHAR16* old_path = NULL, *new_path = NULL;
-        _cleanup_(FileHandleClosep) EFI_FILE_HANDLE handle = NULL;
-        static EFI_GUID EfiFileInfoGuid = EFI_FILE_INFO_ID;
-        _cleanup_freepool_ EFI_FILE_INFO *file_info = NULL;
-        UINTN file_info_size, a, b;
-        EFI_STATUS r;
+        assert(entry);
+        assert(root_dir);
 
-        if (entry->tries_left == UINTN_MAX)
+        if (entry->tries_left < 0)
                 return;
 
         if (!entry->path || !entry->current_name || !entry->next_name)
                 return;
 
-        old_path = PoolPrint(L"%s\\%s", entry->path, entry->current_name);
+        old_path = xasprintf("%ls\\%ls", entry->path, entry->current_name);
 
-        r = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, old_path, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0ULL);
-        if (EFI_ERROR(r))
+        err = root_dir->Open(root_dir, &handle, old_path, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0ULL);
+        if (err != EFI_SUCCESS)
                 return;
 
-        a = StrLen(entry->current_name);
-        b = StrLen(entry->next_name);
-
-        file_info_size = OFFSETOF(EFI_FILE_INFO, FileName) + (a > b ? a : b) + 1;
-
-        for (;;) {
-                file_info = AllocatePool(file_info_size);
-
-                r = uefi_call_wrapper(handle->GetInfo, 4, handle, &EfiFileInfoGuid, &file_info_size, file_info);
-                if (!EFI_ERROR(r))
-                        break;
-
-                if (r != EFI_BUFFER_TOO_SMALL || file_info_size * 2 < file_info_size) {
-                        log_error_stall(L"Failed to get file info for '%s': %r", old_path, r);
-                        return;
-                }
-
-                file_info_size *= 2;
-                FreePool(file_info);
-        }
+        err = get_file_info_harder(handle, &file_info, &file_info_size);
+        if (err != EFI_SUCCESS)
+                return;
 
         /* And rename the file */
-        StrCpy(file_info->FileName, entry->next_name);
-        r = uefi_call_wrapper(handle->SetInfo, 4, handle, &EfiFileInfoGuid, file_info_size, file_info);
-        if (EFI_ERROR(r)) {
-                log_error_stall(L"Failed to rename '%s' to '%s', ignoring: %r", old_path, entry->next_name, r);
+        strcpy16(file_info->FileName, entry->next_name);
+        err = handle->SetInfo(handle, MAKE_GUID_PTR(EFI_FILE_INFO), file_info_size, file_info);
+        if (err != EFI_SUCCESS) {
+                log_error_status(err, "Failed to rename '%ls' to '%ls', ignoring: %m", old_path, entry->next_name);
                 return;
         }
 
         /* Flush everything to disk, just in case… */
-        (void) uefi_call_wrapper(handle->Flush, 1, handle);
+        (void) handle->Flush(handle);
 
         /* Let's tell the OS that we renamed this file, so that it knows what to rename to the counter-less name on
          * success */
-        new_path = PoolPrint(L"%s\\%s", entry->path, entry->next_name);
-        efivar_set(LOADER_GUID, L"LoaderBootCountPath", new_path, 0);
+        new_path = xasprintf("%ls\\%ls", entry->path, entry->next_name);
+        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderBootCountPath", new_path, 0);
 
         /* If the file we just renamed is the loader path, then let's update that. */
-        if (StrCmp(entry->loader, old_path) == 0) {
-                FreePool(entry->loader);
+        if (streq16(entry->loader, old_path)) {
+                free(entry->loader);
                 entry->loader = TAKE_PTR(new_path);
         }
 }
 
-static VOID config_entry_add_from_file(
+static void config_entry_add_type1(
                 Config *config,
                 EFI_HANDLE *device,
                 EFI_FILE *root_dir,
-                const CHAR16 *path,
-                const CHAR16 *file,
-                CHAR8 *content,
-                const CHAR16 *loaded_image_path) {
+                const char16_t *path,
+                const char16_t *file,
+                char *content,
+                const char16_t *loaded_image_path) {
 
-        ConfigEntry *entry;
-        CHAR8 *line;
-        UINTN pos = 0;
-        CHAR8 *key, *value;
+        _cleanup_(config_entry_freep) ConfigEntry *entry = NULL;
+        char *line;
+        size_t pos = 0, n_initrd = 0;
+        char *key, *value;
         EFI_STATUS err;
-        EFI_FILE_HANDLE handle;
-        _cleanup_freepool_ CHAR16 *initrd = NULL;
 
-        entry = AllocatePool(sizeof(ConfigEntry));
+        assert(config);
+        assert(device);
+        assert(root_dir);
+        assert(path);
+        assert(file);
+        assert(content);
 
+        entry = xnew(ConfigEntry, 1);
         *entry = (ConfigEntry) {
-                .tries_done = UINTN_MAX,
-                .tries_left = UINTN_MAX,
+                .tries_done = -1,
+                .tries_left = -1,
         };
 
-        while ((line = line_get_key_value(content, (CHAR8 *)" \t", &pos, &key, &value))) {
-                if (strcmpa((CHAR8 *)"title", key) == 0) {
-                        FreePool(entry->title);
-                        entry->title = stra_to_str(value);
+        while ((line = line_get_key_value(content, " \t", &pos, &key, &value))) {
+                if (streq8(key, "title")) {
+                        free(entry->title);
+                        entry->title = xstr8_to_16(value);
                         continue;
                 }
 
-                if (strcmpa((CHAR8 *)"version", key) == 0) {
-                        FreePool(entry->version);
-                        entry->version = stra_to_str(value);
+                if (streq8(key, "sort-key")) {
+                        free(entry->sort_key);
+                        entry->sort_key = xstr8_to_16(value);
                         continue;
                 }
 
-                if (strcmpa((CHAR8 *)"machine-id", key) == 0) {
-                        FreePool(entry->machine_id);
-                        entry->machine_id = stra_to_str(value);
+                if (streq8(key, "version")) {
+                        free(entry->version);
+                        entry->version = xstr8_to_16(value);
                         continue;
                 }
 
-                if (strcmpa((CHAR8 *)"linux", key) == 0) {
-                        FreePool(entry->loader);
+                if (streq8(key, "machine-id")) {
+                        free(entry->machine_id);
+                        entry->machine_id = xstr8_to_16(value);
+                        continue;
+                }
+
+                if (streq8(key, "linux")) {
+                        free(entry->loader);
                         entry->type = LOADER_LINUX;
-                        entry->loader = stra_to_path(value);
+                        entry->loader = xstr8_to_path(value);
                         entry->key = 'l';
                         continue;
                 }
 
-                if (strcmpa((CHAR8 *)"efi", key) == 0) {
+                if (streq8(key, "efi")) {
                         entry->type = LOADER_EFI;
-                        FreePool(entry->loader);
-                        entry->loader = stra_to_path(value);
+                        free(entry->loader);
+                        entry->loader = xstr8_to_path(value);
 
                         /* do not add an entry for ourselves */
-                        if (loaded_image_path && StriCmp(entry->loader, loaded_image_path) == 0) {
+                        if (strcaseeq16(entry->loader, loaded_image_path)) {
                                 entry->type = LOADER_UNDEFINED;
                                 break;
                         }
                         continue;
                 }
 
-                if (strcmpa((CHAR8 *)"architecture", key) == 0) {
+                if (streq8(key, "architecture")) {
                         /* do not add an entry for an EFI image of architecture not matching with that of the image */
-                        if (strcmpa((CHAR8 *)EFI_MACHINE_TYPE_NAME, value) != 0) {
+                        if (!streq8(value, EFI_MACHINE_TYPE_NAME)) {
                                 entry->type = LOADER_UNDEFINED;
                                 break;
                         }
                         continue;
                 }
 
-                if (strcmpa((CHAR8 *)"initrd", key) == 0) {
-                        _cleanup_freepool_ CHAR16 *new = NULL;
-
-                        new = stra_to_path(value);
-                        if (initrd) {
-                                CHAR16 *s;
-
-                                s = PoolPrint(L"%s initrd=%s", initrd, new);
-                                FreePool(initrd);
-                                initrd = s;
-                        } else
-                                initrd = PoolPrint(L"initrd=%s", new);
-
+                if (streq8(key, "devicetree")) {
+                        free(entry->devicetree);
+                        entry->devicetree = xstr8_to_path(value);
                         continue;
                 }
 
-                if (strcmpa((CHAR8 *)"options", key) == 0) {
-                        _cleanup_freepool_ CHAR16 *new = NULL;
+                if (streq8(key, "initrd")) {
+                        entry->initrd = xrealloc(
+                                entry->initrd,
+                                n_initrd == 0 ? 0 : (n_initrd + 1) * sizeof(uint16_t *),
+                                (n_initrd + 2) * sizeof(uint16_t *));
+                        entry->initrd[n_initrd++] = xstr8_to_path(value);
+                        entry->initrd[n_initrd] = NULL;
+                        continue;
+                }
 
-                        new = stra_to_str(value);
+                if (streq8(key, "options")) {
+                        _cleanup_free_ char16_t *new = NULL;
+
+                        new = xstr8_to_16(value);
                         if (entry->options) {
-                                CHAR16 *s;
-
-                                s = PoolPrint(L"%s %s", entry->options, new);
-                                FreePool(entry->options);
+                                char16_t *s = xasprintf("%ls %ls", entry->options, new);
+                                free(entry->options);
                                 entry->options = s;
                         } else
                                 entry->options = TAKE_PTR(new);
@@ -1342,905 +1518,1020 @@
                 }
         }
 
-        if (entry->type == LOADER_UNDEFINED) {
-                config_entry_free(entry);
+        if (entry->type == LOADER_UNDEFINED)
                 return;
-        }
 
         /* check existence */
-        err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, entry->loader, EFI_FILE_MODE_READ, 0ULL);
-        if (EFI_ERROR(err)) {
-                config_entry_free(entry);
+        _cleanup_(file_closep) EFI_FILE *handle = NULL;
+        err = root_dir->Open(root_dir, &handle, entry->loader, EFI_FILE_MODE_READ, 0ULL);
+        if (err != EFI_SUCCESS)
                 return;
-        }
-        uefi_call_wrapper(handle->Close, 1, handle);
-
-        /* add initrd= to options */
-        if (entry->type == LOADER_LINUX && initrd) {
-                if (entry->options) {
-                        CHAR16 *s;
-
-                        s = PoolPrint(L"%s %s", initrd, entry->options);
-                        FreePool(entry->options);
-                        entry->options = s;
-                } else
-                        entry->options = TAKE_PTR(initrd);
-        }
 
         entry->device = device;
-        entry->id = StrDuplicate(file);
-        StrLwr(entry->id);
+        entry->id = xstrdup16(file);
+        strtolower16(entry->id);
 
         config_add_entry(config, entry);
 
-        config_entry_parse_tries(entry, path, file, L".conf");
+        config_entry_parse_tries(entry, path, file, u".conf");
+        TAKE_PTR(entry);
 }
 
-static VOID config_load_defaults(Config *config, EFI_FILE *root_dir) {
-        _cleanup_freepool_ CHAR8 *content = NULL;
-        UINTN sec;
+static EFI_STATUS efivar_get_timeout(const char16_t *var, uint32_t *ret_value) {
+        _cleanup_free_ char16_t *value = NULL;
         EFI_STATUS err;
 
-        *config = (Config) {
-                .editor = TRUE,
-                .auto_entries = TRUE,
-                .auto_firmware = TRUE,
-                .random_seed_mode = RANDOM_SEED_WITH_SYSTEM_TOKEN,
-        };
+        assert(var);
+        assert(ret_value);
 
-        err = file_read(root_dir, L"\\loader\\loader.conf", 0, 0, &content, NULL);
-        if (!EFI_ERROR(err))
-                config_defaults_load_from_file(config, content);
+        err = efivar_get(MAKE_GUID_PTR(LOADER), var, &value);
+        if (err != EFI_SUCCESS)
+                return err;
 
-        err = efivar_get_uint_string(LOADER_GUID, L"LoaderConfigTimeout", &sec);
-        if (!EFI_ERROR(err)) {
-                config->timeout_sec_efivar = sec > INTN_MAX ? INTN_MAX : sec;
-                config->timeout_sec = sec;
-        } else
-                config->timeout_sec_efivar = -1;
-
-        err = efivar_get_uint_string(LOADER_GUID, L"LoaderConfigTimeoutOneShot", &sec);
-        if (!EFI_ERROR(err)) {
-                /* Unset variable now, after all it's "one shot". */
-                (void) efivar_set(LOADER_GUID, L"LoaderConfigTimeoutOneShot", NULL, EFI_VARIABLE_NON_VOLATILE);
-
-                config->timeout_sec = sec;
-                config->force_menu = TRUE; /* force the menu when this is set */
+        if (streq16(value, u"menu-force")) {
+                *ret_value = TIMEOUT_MENU_FORCE;
+                return EFI_SUCCESS;
         }
+        if (streq16(value, u"menu-hidden")) {
+                *ret_value = TIMEOUT_MENU_HIDDEN;
+                return EFI_SUCCESS;
+        }
+
+        uint64_t timeout;
+        if (!parse_number16(value, &timeout, NULL))
+                return EFI_INVALID_PARAMETER;
+
+        *ret_value = MIN(timeout, TIMEOUT_TYPE_MAX);
+        return EFI_SUCCESS;
 }
 
-static VOID config_load_entries(
+static void config_load_defaults(Config *config, EFI_FILE *root_dir) {
+        _cleanup_free_ char *content = NULL;
+        size_t value = 0;  /* avoid false maybe-uninitialized warning */
+        EFI_STATUS err;
+
+        assert(root_dir);
+
+        *config = (Config) {
+                .editor = true,
+                .auto_entries = true,
+                .auto_firmware = true,
+                .reboot_for_bitlocker = false,
+                .secure_boot_enroll = ENROLL_IF_SAFE,
+                .idx_default_efivar = IDX_INVALID,
+                .console_mode = CONSOLE_MODE_KEEP,
+                .console_mode_efivar = CONSOLE_MODE_KEEP,
+                .timeout_sec_config = TIMEOUT_UNSET,
+                .timeout_sec_efivar = TIMEOUT_UNSET,
+        };
+
+        err = file_read(root_dir, u"\\loader\\loader.conf", 0, 0, &content, NULL);
+        if (err == EFI_SUCCESS)
+                config_defaults_load_from_file(config, content);
+
+        err = efivar_get_timeout(u"LoaderConfigTimeout", &config->timeout_sec_efivar);
+        if (err == EFI_SUCCESS)
+                config->timeout_sec = config->timeout_sec_efivar;
+        else if (err != EFI_NOT_FOUND)
+                log_error_status(err, "Error reading LoaderConfigTimeout EFI variable: %m");
+
+        err = efivar_get_timeout(u"LoaderConfigTimeoutOneShot", &config->timeout_sec);
+        if (err == EFI_SUCCESS) {
+                /* Unset variable now, after all it's "one shot". */
+                (void) efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderConfigTimeoutOneShot", NULL, EFI_VARIABLE_NON_VOLATILE);
+
+                config->force_menu = true; /* force the menu when this is set */
+        } else if (err != EFI_NOT_FOUND)
+                log_error_status(err, "Error reading LoaderConfigTimeoutOneShot EFI variable: %m");
+
+        err = efivar_get_uint_string(MAKE_GUID_PTR(LOADER), u"LoaderConfigConsoleMode", &value);
+        if (err == EFI_SUCCESS)
+                config->console_mode_efivar = value;
+
+        err = efivar_get(MAKE_GUID_PTR(LOADER), u"LoaderEntryOneShot", &config->entry_oneshot);
+        if (err == EFI_SUCCESS)
+                /* Unset variable now, after all it's "one shot". */
+                (void) efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderEntryOneShot", NULL, EFI_VARIABLE_NON_VOLATILE);
+
+        (void) efivar_get(MAKE_GUID_PTR(LOADER), u"LoaderEntryDefault", &config->entry_default_efivar);
+
+        strtolower16(config->entry_default_config);
+        strtolower16(config->entry_default_efivar);
+        strtolower16(config->entry_oneshot);
+        strtolower16(config->entry_saved);
+
+        config->use_saved_entry = streq16(config->entry_default_config, u"@saved");
+        config->use_saved_entry_efivar = streq16(config->entry_default_efivar, u"@saved");
+        if (config->use_saved_entry || config->use_saved_entry_efivar)
+                (void) efivar_get(MAKE_GUID_PTR(LOADER), u"LoaderEntryLastBooted", &config->entry_saved);
+}
+
+static void config_load_entries(
                 Config *config,
                 EFI_HANDLE *device,
                 EFI_FILE *root_dir,
-                CHAR16 *loaded_image_path) {
+                const char16_t *loaded_image_path) {
 
-        EFI_FILE_HANDLE entries_dir;
+        _cleanup_(file_closep) EFI_FILE *entries_dir = NULL;
+        _cleanup_free_ EFI_FILE_INFO *f = NULL;
+        size_t f_size = 0;
         EFI_STATUS err;
 
-        err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &entries_dir, (CHAR16*) L"\\loader\\entries", EFI_FILE_MODE_READ, 0ULL);
-        if (!EFI_ERROR(err)) {
-                for (;;) {
-                        CHAR16 buf[256];
-                        UINTN bufsize;
-                        EFI_FILE_INFO *f;
-                        _cleanup_freepool_ CHAR8 *content = NULL;
+        assert(config);
+        assert(device);
+        assert(root_dir);
 
-                        bufsize = sizeof(buf);
-                        err = uefi_call_wrapper(entries_dir->Read, 3, entries_dir, &bufsize, buf);
-                        if (bufsize == 0 || EFI_ERROR(err))
-                                break;
+        /* Adds Boot Loader Type #1 entries (i.e. /loader/entries/….conf) */
 
-                        f = (EFI_FILE_INFO *) buf;
-                        if (f->FileName[0] == '.')
-                                continue;
-                        if (f->Attribute & EFI_FILE_DIRECTORY)
-                                continue;
+        err = open_directory(root_dir, u"\\loader\\entries", &entries_dir);
+        if (err != EFI_SUCCESS)
+                return;
 
-                        if (!endswith_no_case(f->FileName, L".conf"))
-                                continue;
-                        if (startswith(f->FileName, L"auto-"))
-                                continue;
+        for (;;) {
+                _cleanup_free_ char *content = NULL;
 
-                        err = file_read(entries_dir, f->FileName, 0, 0, &content, NULL);
-                        if (!EFI_ERROR(err))
-                                config_entry_add_from_file(config, device, root_dir, L"\\loader\\entries", f->FileName, content, loaded_image_path);
-                }
-                uefi_call_wrapper(entries_dir->Close, 1, entries_dir);
+                err = readdir_harder(entries_dir, &f, &f_size);
+                if (err != EFI_SUCCESS || !f)
+                        break;
+
+                if (f->FileName[0] == '.')
+                        continue;
+                if (FLAGS_SET(f->Attribute, EFI_FILE_DIRECTORY))
+                        continue;
+
+                if (!endswith_no_case(f->FileName, u".conf"))
+                        continue;
+                if (startswith(f->FileName, u"auto-"))
+                        continue;
+
+                err = file_read(entries_dir, f->FileName, 0, 0, &content, NULL);
+                if (err == EFI_SUCCESS)
+                        config_entry_add_type1(config, device, root_dir, u"\\loader\\entries", f->FileName, content, loaded_image_path);
         }
 }
 
-static INTN config_entry_compare(ConfigEntry *a, ConfigEntry *b) {
-        INTN r;
+static int config_entry_compare(const ConfigEntry *a, const ConfigEntry *b) {
+        int r;
 
-        /* Order entries that have no tries left to the beginning of the list */
-        if (a->tries_left != 0 && b->tries_left == 0)
-                return 1;
-        if (a->tries_left == 0 && b->tries_left != 0)
-                return -1;
+        assert(a);
+        assert(b);
 
-        r = strverscmp_improved(a->id, b->id);
+        /* Order entries that have no tries left to the end of the list */
+        r = CMP(a->tries_left == 0, b->tries_left == 0);
         if (r != 0)
                 return r;
 
-        if (a->tries_left == UINTN_MAX ||
-            b->tries_left == UINTN_MAX)
+        /* If there's a sort key defined for *both* entries, then we do new-style ordering, i.e. by
+         * sort-key/machine-id/version, with a final fallback to id. If there's no sort key for either, we do
+         * old-style ordering, i.e. by id only. If one has sort key and the other does not, we put new-style
+         * before old-style. */
+        r = CMP(!a->sort_key, !b->sort_key);
+        if (r != 0) /* one is old-style, one new-style */
+                return r;
+
+        if (a->sort_key && b->sort_key) {
+                r = strcmp16(a->sort_key, b->sort_key);
+                if (r != 0)
+                        return r;
+
+                /* If multiple installations of the same OS are around, group by machine ID */
+                r = strcmp16(a->machine_id, b->machine_id);
+                if (r != 0)
+                        return r;
+
+                /* If the sort key was defined, then order by version now (downwards, putting the newest first) */
+                r = -strverscmp_improved(a->version, b->version);
+                if (r != 0)
+                        return r;
+        }
+
+        /* Now order by ID. The version is likely part of the ID, thus note that this will generatelly put
+         * the newer versions earlier. Specifying a sort key explicitly is preferable, because it gives an
+         * explicit sort order. */
+        r = -strverscmp_improved(a->id, b->id);
+        if (r != 0)
+                return r;
+
+        if (a->tries_left < 0 || b->tries_left < 0)
                 return 0;
 
-        /* If both items have boot counting, and otherwise are identical, put the entry with more tries left last */
-        if (a->tries_left > b->tries_left)
-                return 1;
-        if (a->tries_left < b->tries_left)
-                return -1;
+        /* If both items have boot counting, and otherwise are identical, put the entry with more tries left first */
+        r = -CMP(a->tries_left, b->tries_left);
+        if (r != 0)
+                return r;
 
         /* If they have the same number of tries left, then let the one win which was tried fewer times so far */
-        if (a->tries_done < b->tries_done)
-                return 1;
-        if (a->tries_done > b->tries_done)
-                return -1;
-
-        return 0;
+        return CMP(a->tries_done, b->tries_done);
 }
 
-static VOID config_sort_entries(Config *config) {
-        for (UINTN i = 1; i < config->entry_count; i++) {
-                BOOLEAN more;
+static size_t config_entry_find(Config *config, const char16_t *pattern) {
+        assert(config);
 
-                more = FALSE;
-                for (UINTN k = 0; k < config->entry_count - i; k++) {
-                        ConfigEntry *entry;
+        /* We expect pattern and entry IDs to be already case folded. */
 
-                        if (config_entry_compare(config->entries[k], config->entries[k+1]) <= 0)
-                                continue;
+        if (!pattern)
+                return IDX_INVALID;
 
-                        entry = config->entries[k];
-                        config->entries[k] = config->entries[k+1];
-                        config->entries[k+1] = entry;
-                        more = TRUE;
-                }
-                if (!more)
-                        break;
-        }
+        for (size_t i = 0; i < config->entry_count; i++)
+                if (efi_fnmatch(pattern, config->entries[i]->id))
+                        return i;
+
+        return IDX_INVALID;
 }
 
-static INTN config_entry_find(Config *config, CHAR16 *id) {
-        for (UINTN i = 0; i < config->entry_count; i++)
-                if (StrCmp(config->entries[i]->id, id) == 0)
-                        return (INTN) i;
+static void config_default_entry_select(Config *config) {
+        size_t i;
 
-        return -1;
-}
+        assert(config);
 
-static VOID config_default_entry_select(Config *config) {
-        _cleanup_freepool_ CHAR16 *entry_oneshot = NULL, *entry_default = NULL;
-        EFI_STATUS err;
-        INTN i;
-
-        /*
-         * The EFI variable to specify a boot entry for the next, and only the
-         * next reboot. The variable is always cleared directly after it is read.
-         */
-        err = efivar_get(LOADER_GUID, L"LoaderEntryOneShot", &entry_oneshot);
-        if (!EFI_ERROR(err)) {
-
-                config->entry_oneshot = StrDuplicate(entry_oneshot);
-                efivar_set(LOADER_GUID, L"LoaderEntryOneShot", NULL, EFI_VARIABLE_NON_VOLATILE);
-
-                i = config_entry_find(config, entry_oneshot);
-                if (i >= 0) {
-                        config->idx_default = i;
-                        return;
-                }
-        }
-
-        /*
-         * The EFI variable to select the default boot entry overrides the
-         * configured pattern. The variable can be set and cleared by pressing
-         * the 'd' key in the loader selection menu, the entry is marked with
-         * an '*'.
-         */
-        err = efivar_get(LOADER_GUID, L"LoaderEntryDefault", &entry_default);
-        if (!EFI_ERROR(err)) {
-
-                i = config_entry_find(config, entry_default);
-                if (i >= 0) {
-                        config->idx_default = i;
-                        config->idx_default_efivar = i;
-                        return;
-                }
-        }
-        config->idx_default_efivar = -1;
-
-        if (config->entry_count == 0)
+        i = config_entry_find(config, config->entry_oneshot);
+        if (i != IDX_INVALID) {
+                config->idx_default = i;
                 return;
-
-        /*
-         * Match the pattern from the end of the list to the start, find last
-         * entry (largest number) matching the given pattern.
-         */
-        if (config->entry_default_pattern) {
-                i = config->entry_count;
-                while (i--) {
-                        if (config->entries[i]->no_autoselect)
-                                continue;
-                        if (MetaiMatch(config->entries[i]->id, config->entry_default_pattern)) {
-                                config->idx_default = i;
-                                return;
-                        }
-                }
         }
 
-        /* select the last suitable entry */
-        i = config->entry_count;
-        while (i--) {
-                if (config->entries[i]->no_autoselect)
+        i = config_entry_find(config, config->use_saved_entry_efivar ? config->entry_saved : config->entry_default_efivar);
+        if (i != IDX_INVALID) {
+                config->idx_default = i;
+                config->idx_default_efivar = i;
+                return;
+        }
+
+        if (config->use_saved_entry)
+                /* No need to do the same thing twice. */
+                i = config->use_saved_entry_efivar ? IDX_INVALID : config_entry_find(config, config->entry_saved);
+        else
+                i = config_entry_find(config, config->entry_default_config);
+        if (i != IDX_INVALID) {
+                config->idx_default = i;
+                return;
+        }
+
+        /* select the first suitable entry */
+        for (i = 0; i < config->entry_count; i++) {
+                if (config->entries[i]->type == LOADER_AUTO || config->entries[i]->call)
                         continue;
                 config->idx_default = i;
                 return;
         }
 
-        /* no entry found */
-        config->idx_default = -1;
+        /* If no configured entry to select from was found, enable the menu. */
+        config->idx_default = 0;
+        if (config->timeout_sec == 0)
+                config->timeout_sec = 10;
 }
 
-static BOOLEAN find_nonunique(ConfigEntry **entries, UINTN entry_count) {
-        BOOLEAN non_unique = FALSE;
+static bool entries_unique(ConfigEntry **entries, bool *unique, size_t entry_count) {
+        bool is_unique = true;
 
-        for (UINTN i = 0; i < entry_count; i++)
-                entries[i]->non_unique = FALSE;
+        assert(entries);
+        assert(unique);
 
-        for (UINTN i = 0; i < entry_count; i++)
-                for (UINTN k = 0; k < entry_count; k++) {
-                        if (i == k)
-                                continue;
-                        if (StrCmp(entries[i]->title_show, entries[k]->title_show) != 0)
+        for (size_t i = 0; i < entry_count; i++)
+                for (size_t k = i + 1; k < entry_count; k++) {
+                        if (!streq16(entries[i]->title_show, entries[k]->title_show))
                                 continue;
 
-                        non_unique = entries[i]->non_unique = entries[k]->non_unique = TRUE;
+                        is_unique = unique[i] = unique[k] = false;
                 }
 
-        return non_unique;
+        return is_unique;
 }
 
 /* generate a unique title, avoiding non-distinguishable menu entries */
-static VOID config_title_generate(Config *config) {
-        /* set title */
-        for (UINTN i = 0; i < config->entry_count; i++) {
-                CHAR16 *title;
+static void config_title_generate(Config *config) {
+        assert(config);
 
-                FreePool(config->entries[i]->title_show);
-                title = config->entries[i]->title;
-                if (!title)
-                        title = config->entries[i]->id;
-                config->entries[i]->title_show = StrDuplicate(title);
+        bool unique[config->entry_count];
+
+        /* set title */
+        for (size_t i = 0; i < config->entry_count; i++) {
+                assert(!config->entries[i]->title_show);
+                unique[i] = true;
+                config->entries[i]->title_show = xstrdup16(config->entries[i]->title ?: config->entries[i]->id);
         }
 
-        if (!find_nonunique(config->entries, config->entry_count))
+        if (entries_unique(config->entries, unique, config->entry_count))
                 return;
 
         /* add version to non-unique titles */
-        for (UINTN i = 0; i < config->entry_count; i++) {
-                CHAR16 *s;
-
-                if (!config->entries[i]->non_unique)
+        for (size_t i = 0; i < config->entry_count; i++) {
+                if (unique[i])
                         continue;
+
+                unique[i] = true;
+
                 if (!config->entries[i]->version)
                         continue;
 
-                s = PoolPrint(L"%s (%s)", config->entries[i]->title_show, config->entries[i]->version);
-                FreePool(config->entries[i]->title_show);
-                config->entries[i]->title_show = s;
+                _cleanup_free_ char16_t *t = config->entries[i]->title_show;
+                config->entries[i]->title_show = xasprintf("%ls (%ls)", t, config->entries[i]->version);
         }
 
-        if (!find_nonunique(config->entries, config->entry_count))
+        if (entries_unique(config->entries, unique, config->entry_count))
                 return;
 
         /* add machine-id to non-unique titles */
-        for (UINTN i = 0; i < config->entry_count; i++) {
-                CHAR16 *s;
-                _cleanup_freepool_ CHAR16 *m = NULL;
-
-                if (!config->entries[i]->non_unique)
+        for (size_t i = 0; i < config->entry_count; i++) {
+                if (unique[i])
                         continue;
+
+                unique[i] = true;
+
                 if (!config->entries[i]->machine_id)
                         continue;
 
-                m = StrDuplicate(config->entries[i]->machine_id);
-                m[8] = '\0';
-                s = PoolPrint(L"%s (%s)", config->entries[i]->title_show, m);
-                FreePool(config->entries[i]->title_show);
-                config->entries[i]->title_show = s;
+                _cleanup_free_ char16_t *t = config->entries[i]->title_show;
+                config->entries[i]->title_show = xasprintf("%ls (%.8ls)", t, config->entries[i]->machine_id);
         }
 
-        if (!find_nonunique(config->entries, config->entry_count))
+        if (entries_unique(config->entries, unique, config->entry_count))
                 return;
 
         /* add file name to non-unique titles */
-        for (UINTN i = 0; i < config->entry_count; i++) {
-                CHAR16 *s;
-
-                if (!config->entries[i]->non_unique)
+        for (size_t i = 0; i < config->entry_count; i++) {
+                if (unique[i])
                         continue;
-                s = PoolPrint(L"%s (%s)", config->entries[i]->title_show, config->entries[i]->id);
-                FreePool(config->entries[i]->title_show);
-                config->entries[i]->title_show = s;
-                config->entries[i]->non_unique = FALSE;
+
+                _cleanup_free_ char16_t *t = config->entries[i]->title_show;
+                config->entries[i]->title_show = xasprintf("%ls (%ls)", t, config->entries[i]->id);
         }
 }
 
-static BOOLEAN config_entry_add_call(
-                Config *config,
-                const CHAR16 *id,
-                const CHAR16 *title,
-                EFI_STATUS (*call)(VOID)) {
-
-        ConfigEntry *entry;
-
-        entry = AllocatePool(sizeof(ConfigEntry));
-        *entry = (ConfigEntry) {
-                .id = StrDuplicate(id),
-                .title = StrDuplicate(title),
-                .call = call,
-                .no_autoselect = TRUE,
-                .tries_done = UINTN_MAX,
-                .tries_left = UINTN_MAX,
+static bool is_sd_boot(EFI_FILE *root_dir, const char16_t *loader_path) {
+        EFI_STATUS err;
+        static const char * const sections[] = {
+                ".sdmagic",
+                NULL
         };
+        size_t offset = 0, size = 0, read;
+        _cleanup_free_ char *content = NULL;
 
-        config_add_entry(config, entry);
-        return TRUE;
+        assert(root_dir);
+        assert(loader_path);
+
+        err = pe_file_locate_sections(root_dir, loader_path, sections, &offset, &size);
+        if (err != EFI_SUCCESS || size != sizeof(magic))
+                return false;
+
+        err = file_read(root_dir, loader_path, offset, size, &content, &read);
+        if (err != EFI_SUCCESS || size != read)
+                return false;
+
+        return memcmp(content, magic, sizeof(magic)) == 0;
 }
 
-static ConfigEntry *config_entry_add_loader(
+static ConfigEntry *config_entry_add_loader_auto(
                 Config *config,
                 EFI_HANDLE *device,
-                enum loader_type type,
-                const CHAR16 *id,
-                CHAR16 key,
-                const CHAR16 *title,
-                const CHAR16 *loader,
-                const CHAR16 *version) {
+                EFI_FILE *root_dir,
+                const char16_t *loaded_image_path,
+                const char16_t *id,
+                char16_t key,
+                const char16_t *title,
+                const char16_t *loader) {
 
-        ConfigEntry *entry;
+        assert(config);
+        assert(device);
+        assert(root_dir);
+        assert(id);
+        assert(title);
 
-        entry = AllocatePool(sizeof(ConfigEntry));
+        if (!config->auto_entries)
+                return NULL;
+
+        if (!loader) {
+                loader = u"\\EFI\\BOOT\\BOOT" EFI_MACHINE_TYPE_NAME ".efi";
+
+                /* We are trying to add the default EFI loader here,
+                 * but we do not want to do that if that would be us.
+                 *
+                 * If the default loader is not us, it might be shim. It would
+                 * chainload GRUBX64.EFI in that case, which might be us. */
+                if (strcaseeq16(loader, loaded_image_path) ||
+                    is_sd_boot(root_dir, loader) ||
+                    is_sd_boot(root_dir, u"\\EFI\\BOOT\\GRUB" EFI_MACHINE_TYPE_NAME u".EFI"))
+                        return NULL;
+        }
+
+        /* check existence */
+        _cleanup_(file_closep) EFI_FILE *handle = NULL;
+        EFI_STATUS err = root_dir->Open(root_dir, &handle, (char16_t *) loader, EFI_FILE_MODE_READ, 0ULL);
+        if (err != EFI_SUCCESS)
+                return NULL;
+
+        ConfigEntry *entry = xnew(ConfigEntry, 1);
         *entry = (ConfigEntry) {
-                .type = type,
-                .title = StrDuplicate(title),
-                .version = version ? StrDuplicate(version) : NULL,
+                .id = xstrdup16(id),
+                .type = LOADER_AUTO,
+                .title = xstrdup16(title),
                 .device = device,
-                .loader = StrDuplicate(loader),
-                .id = StrDuplicate(id),
+                .loader = xstrdup16(loader),
                 .key = key,
-                .tries_done = UINTN_MAX,
-                .tries_left = UINTN_MAX,
+                .tries_done = -1,
+                .tries_left = -1,
         };
 
-        StrLwr(entry->id);
-
         config_add_entry(config, entry);
         return entry;
 }
 
-static BOOLEAN config_entry_add_loader_auto(
-                Config *config,
-                EFI_HANDLE *device,
-                EFI_FILE *root_dir,
-                const CHAR16 *loaded_image_path,
-                const CHAR16 *id,
-                CHAR16 key,
-                const CHAR16 *title,
-                const CHAR16 *loader) {
-
-        EFI_FILE_HANDLE handle;
-        ConfigEntry *entry;
+static void config_entry_add_osx(Config *config) {
         EFI_STATUS err;
+        size_t n_handles = 0;
+        _cleanup_free_ EFI_HANDLE *handles = NULL;
 
-        if (!config->auto_entries)
-                return FALSE;
-
-        /* do not add an entry for ourselves */
-        if (loaded_image_path) {
-                UINTN len;
-                _cleanup_freepool_ CHAR8 *content = NULL;
-
-                if (StriCmp(loader, loaded_image_path) == 0)
-                        return FALSE;
-
-                /* look for systemd-boot magic string */
-                err = file_read(root_dir, loader, 0, 100*1024, &content, &len);
-                if (!EFI_ERROR(err))
-                        for (CHAR8 *start = content; start <= content + len - sizeof(magic) - 1; start++)
-                                if (start[0] == magic[0] && CompareMem(start, magic, sizeof(magic) - 1) == 0)
-                                        return FALSE;
-        }
-
-        /* check existence */
-        err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, (CHAR16*) loader, EFI_FILE_MODE_READ, 0ULL);
-        if (EFI_ERROR(err))
-                return FALSE;
-        uefi_call_wrapper(handle->Close, 1, handle);
-
-        entry = config_entry_add_loader(config, device, LOADER_UNDEFINED, id, key, title, loader, NULL);
-        if (!entry)
-                return FALSE;
-
-        /* do not boot right away into auto-detected entries */
-        entry->no_autoselect = TRUE;
-
-        return TRUE;
-}
-
-static VOID config_entry_add_osx(Config *config) {
-        EFI_STATUS err;
-        UINTN handle_count = 0;
-        _cleanup_freepool_ EFI_HANDLE *handles = NULL;
+        assert(config);
 
         if (!config->auto_entries)
                 return;
 
-        err = LibLocateHandle(ByProtocol, &FileSystemProtocol, NULL, &handle_count, &handles);
-        if (!EFI_ERROR(err)) {
-                for (UINTN i = 0; i < handle_count; i++) {
-                        EFI_FILE *root;
-                        BOOLEAN found;
+        err = BS->LocateHandleBuffer(
+                        ByProtocol, MAKE_GUID_PTR(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL), NULL, &n_handles, &handles);
+        if (err != EFI_SUCCESS)
+                return;
 
-                        root = LibOpenRoot(handles[i]);
-                        if (!root)
-                                continue;
-                        found = config_entry_add_loader_auto(config, handles[i], root, NULL, L"auto-osx", 'a', L"macOS",
-                                                             L"\\System\\Library\\CoreServices\\boot.efi");
-                        uefi_call_wrapper(root->Close, 1, root);
-                        if (found)
-                                break;
-                }
+        for (size_t i = 0; i < n_handles; i++) {
+                _cleanup_(file_closep) EFI_FILE *root = NULL;
+
+                if (open_volume(handles[i], &root) != EFI_SUCCESS)
+                        continue;
+
+                if (config_entry_add_loader_auto(
+                                config,
+                                handles[i],
+                                root,
+                                NULL,
+                                u"auto-osx",
+                                'a',
+                                u"macOS",
+                                u"\\System\\Library\\CoreServices\\boot.efi"))
+                        break;
         }
 }
 
-static VOID config_entry_add_linux(
+static EFI_STATUS boot_windows_bitlocker(void) {
+        _cleanup_free_ EFI_HANDLE *handles = NULL;
+        size_t n_handles;
+        EFI_STATUS err;
+
+        // FIXME: Experimental for now. Should be generalized, and become a per-entry option that can be
+        // enabled independently of BitLocker, and without a BootXXXX entry pre-existing.
+
+        /* BitLocker key cannot be sealed without a TPM present. */
+        if (!tpm_present())
+                return EFI_NOT_FOUND;
+
+        err = BS->LocateHandleBuffer(
+                        ByProtocol, MAKE_GUID_PTR(EFI_BLOCK_IO_PROTOCOL), NULL, &n_handles, &handles);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        /* Look for BitLocker magic string on all block drives. */
+        bool found = false;
+        for (size_t i = 0; i < n_handles; i++) {
+                EFI_BLOCK_IO_PROTOCOL *block_io;
+                err = BS->HandleProtocol(handles[i], MAKE_GUID_PTR(EFI_BLOCK_IO_PROTOCOL), (void **) &block_io);
+                if (err != EFI_SUCCESS || block_io->Media->BlockSize < 512 || block_io->Media->BlockSize > 4096)
+                        continue;
+
+                char buf[4096];
+                err = block_io->ReadBlocks(block_io, block_io->Media->MediaId, 0, sizeof(buf), buf);
+                if (err != EFI_SUCCESS)
+                        continue;
+
+                if (memcmp(buf + 3, "-FVE-FS-", STRLEN("-FVE-FS-")) == 0) {
+                        found = true;
+                        break;
+                }
+        }
+
+        /* If no BitLocker drive was found, we can just chainload bootmgfw.efi directly. */
+        if (!found)
+                return EFI_NOT_FOUND;
+
+        _cleanup_free_ uint16_t *boot_order = NULL;
+        size_t boot_order_size;
+
+        /* There can be gaps in Boot#### entries. Instead of iterating over the full
+         * EFI var list or uint16_t namespace, just look for "Windows Boot Manager" in BootOrder. */
+        err = efivar_get_raw(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"BootOrder", (char **) &boot_order, &boot_order_size);
+        if (err != EFI_SUCCESS || boot_order_size % sizeof(uint16_t) != 0)
+                return err;
+
+        for (size_t i = 0; i < boot_order_size / sizeof(uint16_t); i++) {
+                _cleanup_free_ char *buf = NULL;
+                size_t buf_size;
+
+                _cleanup_free_ char16_t *name = xasprintf("Boot%04x", boot_order[i]);
+                err = efivar_get_raw(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), name, &buf, &buf_size);
+                if (err != EFI_SUCCESS)
+                        continue;
+
+                /* Boot#### are EFI_LOAD_OPTION. But we really are only interested
+                 * for the description, which is at this offset. */
+                size_t offset = sizeof(uint32_t) + sizeof(uint16_t);
+                if (buf_size < offset + sizeof(char16_t))
+                        continue;
+
+                if (streq16((char16_t *) (buf + offset), u"Windows Boot Manager")) {
+                        err = efivar_set_raw(
+                                MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE),
+                                u"BootNext",
+                                boot_order + i,
+                                sizeof(boot_order[i]),
+                                EFI_VARIABLE_NON_VOLATILE);
+                        if (err != EFI_SUCCESS)
+                                return err;
+                        RT->ResetSystem(EfiResetWarm, EFI_SUCCESS, 0, NULL);
+                        assert_not_reached();
+                }
+        }
+
+        return EFI_NOT_FOUND;
+}
+
+static void config_entry_add_windows(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir) {
+#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
+        _cleanup_free_ char *bcd = NULL;
+        char16_t *title = NULL;
+        EFI_STATUS err;
+        size_t len;
+
+        assert(config);
+        assert(device);
+        assert(root_dir);
+
+        if (!config->auto_entries)
+                return;
+
+        /* Try to find a better title. */
+        err = file_read(root_dir, u"\\EFI\\Microsoft\\Boot\\BCD", 0, 100*1024, &bcd, &len);
+        if (err == EFI_SUCCESS)
+                title = get_bcd_title((uint8_t *) bcd, len);
+
+        ConfigEntry *e = config_entry_add_loader_auto(config, device, root_dir, NULL,
+                                                      u"auto-windows", 'w', title ?: u"Windows Boot Manager",
+                                                      u"\\EFI\\Microsoft\\Boot\\bootmgfw.efi");
+
+        if (config->reboot_for_bitlocker)
+                e->call = boot_windows_bitlocker;
+#endif
+}
+
+static void config_entry_add_unified(
                 Config *config,
                 EFI_HANDLE *device,
                 EFI_FILE *root_dir) {
 
-        EFI_FILE_HANDLE linux_dir;
+        _cleanup_(file_closep) EFI_FILE *linux_dir = NULL;
+        _cleanup_free_ EFI_FILE_INFO *f = NULL;
+        size_t f_size = 0;
         EFI_STATUS err;
-        ConfigEntry *entry;
 
-        err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &linux_dir, (CHAR16*) L"\\EFI\\Linux", EFI_FILE_MODE_READ, 0ULL);
-        if (EFI_ERROR(err))
+        /* Adds Boot Loader Type #2 entries (i.e. /EFI/Linux/….efi) */
+
+        assert(config);
+        assert(device);
+        assert(root_dir);
+
+        err = open_directory(root_dir, u"\\EFI\\Linux", &linux_dir);
+        if (err != EFI_SUCCESS)
                 return;
 
         for (;;) {
-                CHAR16 buf[256];
-                UINTN bufsize = sizeof buf;
-                EFI_FILE_INFO *f;
-                CHAR8 *sections[] = {
-                        (CHAR8 *)".osrel",
-                        (CHAR8 *)".cmdline",
-                        NULL
+                enum {
+                        SECTION_CMDLINE,
+                        SECTION_OSREL,
+                        _SECTION_MAX,
                 };
-                UINTN offs[ELEMENTSOF(sections)-1] = {};
-                UINTN szs[ELEMENTSOF(sections)-1] = {};
-                UINTN addrs[ELEMENTSOF(sections)-1] = {};
-                CHAR8 *content = NULL;
-                CHAR8 *line;
-                UINTN pos = 0;
-                CHAR8 *key, *value;
-                CHAR16 *os_name_pretty = NULL;
-                CHAR16 *os_name = NULL;
-                CHAR16 *os_id = NULL;
-                CHAR16 *os_version = NULL;
-                CHAR16 *os_version_id = NULL;
-                CHAR16 *os_build_id = NULL;
 
-                err = uefi_call_wrapper(linux_dir->Read, 3, linux_dir, &bufsize, buf);
-                if (bufsize == 0 || EFI_ERROR(err))
+                static const char * const sections[_SECTION_MAX + 1] = {
+                        [SECTION_CMDLINE] = ".cmdline",
+                        [SECTION_OSREL]   = ".osrel",
+                        NULL,
+                };
+
+                _cleanup_free_ char16_t *os_pretty_name = NULL, *os_image_id = NULL, *os_name = NULL, *os_id = NULL,
+                        *os_image_version = NULL, *os_version = NULL, *os_version_id = NULL, *os_build_id = NULL;
+                const char16_t *good_name, *good_version, *good_sort_key;
+                _cleanup_free_ char *content = NULL;
+                size_t offs[_SECTION_MAX] = {}, szs[_SECTION_MAX] = {}, pos = 0;
+                char *line, *key, *value;
+
+                err = readdir_harder(linux_dir, &f, &f_size);
+                if (err != EFI_SUCCESS || !f)
                         break;
 
-                f = (EFI_FILE_INFO *) buf;
                 if (f->FileName[0] == '.')
                         continue;
-                if (f->Attribute & EFI_FILE_DIRECTORY)
+                if (FLAGS_SET(f->Attribute, EFI_FILE_DIRECTORY))
                         continue;
-                if (!endswith_no_case(f->FileName, L".efi"))
+                if (!endswith_no_case(f->FileName, u".efi"))
                         continue;
-                if (startswith(f->FileName, L"auto-"))
+                if (startswith(f->FileName, u"auto-"))
                         continue;
 
                 /* look for .osrel and .cmdline sections in the .efi binary */
-                err = pe_file_locate_sections(linux_dir, f->FileName, sections, addrs, offs, szs);
-                if (EFI_ERROR(err))
+                err = pe_file_locate_sections(linux_dir, f->FileName, sections, offs, szs);
+                if (err != EFI_SUCCESS || szs[SECTION_OSREL] == 0)
                         continue;
 
-                err = file_read(linux_dir, f->FileName, offs[0], szs[0], &content, NULL);
-                if (EFI_ERROR(err))
+                err = file_read(linux_dir, f->FileName, offs[SECTION_OSREL], szs[SECTION_OSREL], &content, NULL);
+                if (err != EFI_SUCCESS)
                         continue;
 
                 /* read properties from the embedded os-release file */
-                while ((line = line_get_key_value(content, (CHAR8 *)"=", &pos, &key, &value))) {
-                        if (strcmpa((CHAR8 *)"PRETTY_NAME", key) == 0) {
-                                FreePool(os_name_pretty);
-                                os_name_pretty = stra_to_str(value);
+                while ((line = line_get_key_value(content, "=", &pos, &key, &value))) {
+                        if (streq8(key, "PRETTY_NAME")) {
+                                free(os_pretty_name);
+                                os_pretty_name = xstr8_to_16(value);
                                 continue;
                         }
 
-                        if (strcmpa((CHAR8 *)"NAME", key) == 0) {
-                                FreePool(os_name);
-                                os_name = stra_to_str(value);
+                        if (streq8(key, "IMAGE_ID")) {
+                                free(os_image_id);
+                                os_image_id = xstr8_to_16(value);
                                 continue;
                         }
 
-                        if (strcmpa((CHAR8 *)"ID", key) == 0) {
-                                FreePool(os_id);
-                                os_id = stra_to_str(value);
+                        if (streq8(key, "NAME")) {
+                                free(os_name);
+                                os_name = xstr8_to_16(value);
                                 continue;
                         }
 
-                        if (strcmpa((CHAR8 *)"VERSION", key) == 0) {
-                                FreePool(os_version);
-                                os_version = stra_to_str(value);
+                        if (streq8(key, "ID")) {
+                                free(os_id);
+                                os_id = xstr8_to_16(value);
                                 continue;
                         }
 
-                        if (strcmpa((CHAR8 *)"VERSION_ID", key) == 0) {
-                                FreePool(os_version_id);
-                                os_version_id = stra_to_str(value);
+                        if (streq8(key, "IMAGE_VERSION")) {
+                                free(os_image_version);
+                                os_image_version = xstr8_to_16(value);
                                 continue;
                         }
 
-                        if (strcmpa((CHAR8 *)"BUILD_ID", key) == 0) {
-                                FreePool(os_build_id);
-                                os_build_id = stra_to_str(value);
+                        if (streq8(key, "VERSION")) {
+                                free(os_version);
+                                os_version = xstr8_to_16(value);
+                                continue;
+                        }
+
+                        if (streq8(key, "VERSION_ID")) {
+                                free(os_version_id);
+                                os_version_id = xstr8_to_16(value);
+                                continue;
+                        }
+
+                        if (streq8(key, "BUILD_ID")) {
+                                free(os_build_id);
+                                os_build_id = xstr8_to_16(value);
                                 continue;
                         }
                 }
 
-                if ((os_name_pretty || os_name) && os_id && (os_version || os_version_id || os_build_id)) {
-                        _cleanup_freepool_ CHAR16 *path = NULL;
+                if (!bootspec_pick_name_version_sort_key(
+                                    os_pretty_name,
+                                    os_image_id,
+                                    os_name,
+                                    os_id,
+                                    os_image_version,
+                                    os_version,
+                                    os_version_id,
+                                    os_build_id,
+                                    &good_name,
+                                    &good_version,
+                                    &good_sort_key))
+                        continue;
 
-                        path = PoolPrint(L"\\EFI\\Linux\\%s", f->FileName);
+                ConfigEntry *entry = xnew(ConfigEntry, 1);
+                *entry = (ConfigEntry) {
+                        .id = xstrdup16(f->FileName),
+                        .type = LOADER_UNIFIED_LINUX,
+                        .title = xstrdup16(good_name),
+                        .version = xstrdup16(good_version),
+                        .device = device,
+                        .loader = xasprintf("\\EFI\\Linux\\%ls", f->FileName),
+                        .sort_key = xstrdup16(good_sort_key),
+                        .key = 'l',
+                        .tries_done = -1,
+                        .tries_left = -1,
+                };
 
-                        entry = config_entry_add_loader(config, device, LOADER_LINUX, f->FileName, 'l',
-                                                        os_name_pretty ?: os_name, path,
-                                                        os_version ?: (os_version_id ? : os_build_id));
+                strtolower16(entry->id);
+                config_add_entry(config, entry);
+                config_entry_parse_tries(entry, u"\\EFI\\Linux", f->FileName, u".efi");
 
-                        FreePool(content);
-                        content = NULL;
+                if (szs[SECTION_CMDLINE] == 0)
+                        continue;
 
-                        /* read the embedded cmdline file */
-                        err = file_read(linux_dir, f->FileName, offs[1], szs[1], &content, NULL);
-                        if (!EFI_ERROR(err)) {
+                content = mfree(content);
 
-                                /* chomp the newline */
-                                if (content[szs[1]-1] == '\n')
-                                        content[szs[1]-1] = '\0';
-
-                                entry->options = stra_to_str(content);
-                        }
-
-                        config_entry_parse_tries(entry, L"\\EFI\\Linux", f->FileName, L".efi");
+                /* read the embedded cmdline file */
+                size_t cmdline_len;
+                err = file_read(linux_dir, f->FileName, offs[SECTION_CMDLINE], szs[SECTION_CMDLINE], &content, &cmdline_len);
+                if (err == EFI_SUCCESS) {
+                        entry->options = xstrn8_to_16(content, cmdline_len);
+                        mangle_stub_cmdline(entry->options);
                 }
-
-                FreePool(os_name_pretty);
-                FreePool(os_name);
-                FreePool(os_id);
-                FreePool(os_version);
-                FreePool(os_version_id);
-                FreePool(os_build_id);
-                FreePool(content);
         }
-
-        uefi_call_wrapper(linux_dir->Close, 1, linux_dir);
 }
 
-#define XBOOTLDR_GUID \
-        &(const EFI_GUID) { 0xbc13c2ff, 0x59e6, 0x4262, { 0xa3, 0x52, 0xb2, 0x75, 0xfd, 0x6f, 0x71, 0x72 } }
-
-static EFI_DEVICE_PATH *path_parent(EFI_DEVICE_PATH *path, EFI_DEVICE_PATH *node) {
-        EFI_DEVICE_PATH *parent;
-        UINTN len;
-
-        len = (UINT8*) NextDevicePathNode(node) - (UINT8*) path;
-        parent = (EFI_DEVICE_PATH*) AllocatePool(len + sizeof(EFI_DEVICE_PATH));
-        CopyMem(parent, path, len);
-        CopyMem((UINT8*) parent + len, EndDevicePath, sizeof(EFI_DEVICE_PATH));
-
-        return parent;
-}
-
-static VOID config_load_xbootldr(
+static void config_load_xbootldr(
                 Config *config,
                 EFI_HANDLE *device) {
 
-        EFI_DEVICE_PATH *partition_path, *disk_path, *copy;
-        UINT32 found_partition_number = UINT32_MAX;
-        UINT64 found_partition_start = UINT64_MAX;
-        UINT64 found_partition_size = UINT64_MAX;
-        UINT8 found_partition_signature[16] = {};
-        EFI_HANDLE new_device;
-        EFI_FILE *root_dir;
-        EFI_STATUS r;
+        _cleanup_(file_closep) EFI_FILE *root_dir = NULL;
+        EFI_HANDLE new_device = NULL;  /* avoid false maybe-uninitialized warning */
+        EFI_STATUS err;
 
-        partition_path = DevicePathFromHandle(device);
-        if (!partition_path)
+        assert(config);
+        assert(device);
+
+        err = partition_open(MAKE_GUID_PTR(XBOOTLDR), device, &new_device, &root_dir);
+        if (err != EFI_SUCCESS)
                 return;
 
-        for (EFI_DEVICE_PATH *node = partition_path; !IsDevicePathEnd(node); node = NextDevicePathNode(node)) {
-                EFI_HANDLE disk_handle;
-                EFI_BLOCK_IO *block_io;
-                EFI_DEVICE_PATH *p;
-
-                /* First, Let's look for the SCSI/SATA/USB/… device path node, i.e. one above the media
-                 * devices */
-                if (DevicePathType(node) != MESSAGING_DEVICE_PATH)
-                        continue;
-
-                /* Determine the device path one level up */
-                disk_path = path_parent(partition_path, node);
-                p = disk_path;
-                r = uefi_call_wrapper(BS->LocateDevicePath, 3, &BlockIoProtocol, &p, &disk_handle);
-                if (EFI_ERROR(r))
-                        continue;
-
-                r = uefi_call_wrapper(BS->HandleProtocol, 3, disk_handle, &BlockIoProtocol, (VOID **)&block_io);
-                if (EFI_ERROR(r))
-                        continue;
-
-                /* Filter out some block devices early. (We only care about block devices that aren't
-                 * partitions themselves — we look for GPT partition tables to parse after all —, and only
-                 * those which contain a medium and have at least 2 blocks.) */
-                if (block_io->Media->LogicalPartition ||
-                    !block_io->Media->MediaPresent ||
-                    block_io->Media->LastBlock <= 1)
-                        continue;
-
-                /* Try both copies of the GPT header, in case one is corrupted */
-                for (UINTN nr = 0; nr < 2; nr++) {
-                        _cleanup_freepool_ EFI_PARTITION_ENTRY* entries = NULL;
-                        union {
-                                EFI_PARTITION_TABLE_HEADER gpt_header;
-                                uint8_t space[((sizeof(EFI_PARTITION_TABLE_HEADER) + 511) / 512) * 512];
-                        } gpt_header_buffer;
-                        const EFI_PARTITION_TABLE_HEADER *h = &gpt_header_buffer.gpt_header;
-                        UINT64 where;
-                        UINTN sz;
-                        UINT32 c;
-
-                        if (nr == 0)
-                                /* Read the first copy at LBA 1 */
-                                where = 1;
-                        else
-                                /* Read the second copy at the very last LBA of this block device */
-                                where = block_io->Media->LastBlock;
-
-                        /* Read the GPT header */
-                        r = uefi_call_wrapper(block_io->ReadBlocks, 5,
-                                              block_io,
-                                              block_io->Media->MediaId,
-                                              where,
-                                              sizeof(gpt_header_buffer), &gpt_header_buffer);
-                        if (EFI_ERROR(r))
-                                continue;
-
-                        /* Some superficial validation of the GPT header */
-                        c = CompareMem(&h->Header.Signature, "EFI PART", sizeof(h->Header.Signature));
-                        if (c != 0)
-                                continue;
-
-                        if (h->Header.HeaderSize < 92 ||
-                            h->Header.HeaderSize > 512)
-                                continue;
-
-                        if (h->Header.Revision != 0x00010000U)
-                                continue;
-
-                        /* Calculate CRC check */
-                        c = ~crc32_exclude_offset(UINT32_MAX,
-                                                  (const UINT8*) &gpt_header_buffer,
-                                                  h->Header.HeaderSize,
-                                                  OFFSETOF(EFI_PARTITION_TABLE_HEADER, Header.CRC32),
-                                                  sizeof(h->Header.CRC32));
-                        if (c != h->Header.CRC32)
-                                continue;
-
-                        if (h->MyLBA != where)
-                                continue;
-
-                        if (h->SizeOfPartitionEntry < sizeof(EFI_PARTITION_ENTRY))
-                                continue;
-
-                        if (h->NumberOfPartitionEntries <= 0 ||
-                            h->NumberOfPartitionEntries > 1024)
-                                continue;
-
-                        if (h->SizeOfPartitionEntry > UINTN_MAX / h->NumberOfPartitionEntries) /* overflow check */
-                                continue;
-
-                        /* Now load the GPT entry table */
-                        sz = ALIGN_TO((UINTN) h->SizeOfPartitionEntry * (UINTN) h->NumberOfPartitionEntries, 512);
-                        entries = AllocatePool(sz);
-
-                        r = uefi_call_wrapper(block_io->ReadBlocks, 5,
-                                              block_io,
-                                              block_io->Media->MediaId,
-                                              h->PartitionEntryLBA,
-                                              sz, entries);
-                        if (EFI_ERROR(r))
-                                continue;
-
-                        /* Calculate CRC of entries array, too */
-                        c = ~crc32(UINT32_MAX, entries, sz);
-                        if (c != h->PartitionEntryArrayCRC32)
-                                continue;
-
-                        for (UINTN i = 0; i < h->NumberOfPartitionEntries; i++) {
-                                EFI_PARTITION_ENTRY *entry;
-
-                                entry = (EFI_PARTITION_ENTRY*) ((UINT8*) entries + h->SizeOfPartitionEntry * i);
-
-                                if (CompareMem(&entry->PartitionTypeGUID, XBOOTLDR_GUID, 16) == 0) {
-                                        UINT64 end;
-
-                                        /* Let's use memcpy(), in case the structs are not aligned (they really should be though) */
-                                        CopyMem(&found_partition_start, &entry->StartingLBA, sizeof(found_partition_start));
-                                        CopyMem(&end, &entry->EndingLBA, sizeof(end));
-
-                                        if (end < found_partition_start) /* Bogus? */
-                                                continue;
-
-                                        found_partition_size = end - found_partition_start + 1;
-                                        CopyMem(found_partition_signature, &entry->UniquePartitionGUID, sizeof(found_partition_signature));
-
-                                        found_partition_number = i + 1;
-                                        goto found;
-                                }
-                        }
-
-                        break; /* This GPT was fully valid, but we didn't find what we are looking for. This
-                                * means there's no reason to check the second copy of the GPT header */
-                }
-        }
-
-        return; /* Not found */
-
-found:
-        copy = DuplicateDevicePath(partition_path);
-
-        /* Patch in the data we found */
-        for (EFI_DEVICE_PATH *node = copy; !IsDevicePathEnd(node); node = NextDevicePathNode(node)) {
-                HARDDRIVE_DEVICE_PATH *hd;
-
-                if (DevicePathType(node) != MEDIA_DEVICE_PATH)
-                        continue;
-
-                if (DevicePathSubType(node) != MEDIA_HARDDRIVE_DP)
-                        continue;
-
-                hd = (HARDDRIVE_DEVICE_PATH*) node;
-                hd->PartitionNumber = found_partition_number;
-                hd->PartitionStart = found_partition_start;
-                hd->PartitionSize = found_partition_size;
-                CopyMem(hd->Signature, found_partition_signature, sizeof(hd->Signature));
-                hd->MBRType = MBR_TYPE_EFI_PARTITION_TABLE_HEADER;
-                hd->SignatureType = SIGNATURE_TYPE_GUID;
-        }
-
-        r = uefi_call_wrapper(BS->LocateDevicePath, 3, &BlockIoProtocol, &copy, &new_device);
-        if (EFI_ERROR(r))
-                return;
-
-        root_dir = LibOpenRoot(new_device);
-        if (!root_dir)
-                return;
-
-        config_entry_add_linux(config, new_device, root_dir);
+        config_entry_add_unified(config, new_device, root_dir);
         config_load_entries(config, new_device, root_dir, NULL);
 }
 
+static EFI_STATUS initrd_prepare(
+                EFI_FILE *root,
+                const ConfigEntry *entry,
+                char16_t **ret_options,
+                void **ret_initrd,
+                size_t *ret_initrd_size) {
+
+        assert(root);
+        assert(entry);
+        assert(ret_options);
+        assert(ret_initrd);
+        assert(ret_initrd_size);
+
+        if (entry->type != LOADER_LINUX || !entry->initrd) {
+                ret_options = NULL;
+                ret_initrd = NULL;
+                ret_initrd_size = 0;
+                return EFI_SUCCESS;
+        }
+
+        /* Note that order of initrds matters. The kernel will only look for microcode updates in the very
+         * first one it sees. */
+
+        /* Add initrd= to options for older kernels that do not support LINUX_INITRD_MEDIA. Should be dropped
+         * if linux_x86.c is dropped. */
+        _cleanup_free_ char16_t *options = NULL;
+
+        EFI_STATUS err;
+        size_t size = 0;
+        _cleanup_free_ uint8_t *initrd = NULL;
+
+        STRV_FOREACH(i, entry->initrd) {
+                _cleanup_free_ char16_t *o = options;
+                if (o)
+                        options = xasprintf("%ls initrd=%ls", o, *i);
+                else
+                        options = xasprintf("initrd=%ls", *i);
+
+                _cleanup_(file_closep) EFI_FILE *handle = NULL;
+                err = root->Open(root, &handle, *i, EFI_FILE_MODE_READ, 0);
+                if (err != EFI_SUCCESS)
+                        return err;
+
+                _cleanup_free_ EFI_FILE_INFO *info = NULL;
+                err = get_file_info_harder(handle, &info, NULL);
+                if (err != EFI_SUCCESS)
+                        return err;
+
+                if (info->FileSize == 0) /* Automatically skip over empty files */
+                        continue;
+
+                size_t new_size, read_size = info->FileSize;
+                if (__builtin_add_overflow(size, read_size, &new_size))
+                        return EFI_OUT_OF_RESOURCES;
+                initrd = xrealloc(initrd, size, new_size);
+
+                err = handle->Read(handle, &read_size, initrd + size);
+                if (err != EFI_SUCCESS)
+                        return err;
+
+                /* Make sure the actual read size is what we expected. */
+                assert(size + read_size == new_size);
+                size = new_size;
+        }
+
+        if (entry->options) {
+                _cleanup_free_ char16_t *o = options;
+                options = xasprintf("%ls %ls", o, entry->options);
+        }
+
+        *ret_options = TAKE_PTR(options);
+        *ret_initrd = TAKE_PTR(initrd);
+        *ret_initrd_size = size;
+        return EFI_SUCCESS;
+}
+
 static EFI_STATUS image_start(
                 EFI_HANDLE parent_image,
-                const Config *config,
                 const ConfigEntry *entry) {
 
-        EFI_HANDLE image;
-        _cleanup_freepool_ EFI_DEVICE_PATH *path = NULL;
-        CHAR16 *options;
+        _cleanup_(devicetree_cleanup) struct devicetree_state dtstate = {};
+        _cleanup_(unload_imagep) EFI_HANDLE image = NULL;
+        _cleanup_free_ EFI_DEVICE_PATH *path = NULL;
         EFI_STATUS err;
 
-        path = FileDevicePath(entry->device, entry->loader);
-        if (!path)
-                return log_error_status_stall(EFI_INVALID_PARAMETER, L"Error getting device path.");
+        assert(entry);
 
-        err = uefi_call_wrapper(BS->LoadImage, 6, FALSE, parent_image, path, NULL, 0, &image);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Error loading %s: %r", entry->loader, err);
+        /* If this loader entry has a special way to boot, try that first. */
+        if (entry->call)
+                (void) entry->call();
 
-        if (config->options_edit)
-                options = config->options_edit;
-        else if (entry->options)
-                options = entry->options;
-        else
-                options = NULL;
+        _cleanup_(file_closep) EFI_FILE *image_root = NULL;
+        err = open_volume(entry->device, &image_root);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error opening root path: %m");
+
+        err = make_file_device_path(entry->device, entry->loader, &path);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error making file device path: %m");
+
+        size_t initrd_size = 0;
+        _cleanup_free_ void *initrd = NULL;
+        _cleanup_free_ char16_t *options_initrd = NULL;
+        err = initrd_prepare(image_root, entry, &options_initrd, &initrd, &initrd_size);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error preparing initrd: %m");
+
+        err = shim_load_image(parent_image, path, &image);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error loading %ls: %m", entry->loader);
+
+        if (entry->devicetree) {
+                err = devicetree_install(&dtstate, image_root, entry->devicetree);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Error loading %ls: %m", entry->devicetree);
+        }
+
+        _cleanup_(cleanup_initrd) EFI_HANDLE initrd_handle = NULL;
+        err = initrd_register(initrd, initrd_size, &initrd_handle);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error registering initrd: %m");
+
+        EFI_LOADED_IMAGE_PROTOCOL *loaded_image;
+        err = BS->HandleProtocol(image, MAKE_GUID_PTR(EFI_LOADED_IMAGE_PROTOCOL), (void **) &loaded_image);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error getting LoadedImageProtocol handle: %m");
+
+        char16_t *options = options_initrd ?: entry->options;
         if (options) {
-                EFI_LOADED_IMAGE *loaded_image;
-
-                err = uefi_call_wrapper(BS->OpenProtocol, 6, image, &LoadedImageProtocol, (VOID **)&loaded_image,
-                                        parent_image, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-                if (EFI_ERROR(err)) {
-                        log_error_stall(L"Error getting LoadedImageProtocol handle: %r", err);
-                        goto out_unload;
-                }
                 loaded_image->LoadOptions = options;
-                loaded_image->LoadOptionsSize = (StrLen(loaded_image->LoadOptions)+1) * sizeof(CHAR16);
+                loaded_image->LoadOptionsSize = strsize16(options);
 
-#if ENABLE_TPM
                 /* Try to log any options to the TPM, especially to catch manually edited options */
-                err = tpm_log_event(SD_TPM_PCR,
-                                    (EFI_PHYSICAL_ADDRESS) (UINTN) loaded_image->LoadOptions,
-                                    loaded_image->LoadOptionsSize, loaded_image->LoadOptions);
-                if (EFI_ERROR(err))
-                        log_error_stall(L"Unable to add image options measurement: %r", err);
-#endif
+                (void) tpm_log_load_options(options, NULL);
         }
 
-        efivar_set_time_usec(LOADER_GUID, L"LoaderTimeExecUSec", 0);
-        err = uefi_call_wrapper(BS->StartImage, 3, image, NULL, NULL);
-out_unload:
-        uefi_call_wrapper(BS->UnloadImage, 1, image);
-        return err;
+        efivar_set_time_usec(MAKE_GUID_PTR(LOADER), u"LoaderTimeExecUSec", 0);
+        err = BS->StartImage(image, NULL, NULL);
+        graphics_mode(false);
+        if (err == EFI_SUCCESS)
+                return EFI_SUCCESS;
+
+        /* Try calling the kernel compat entry point if one exists. */
+        if (err == EFI_UNSUPPORTED && entry->type == LOADER_LINUX) {
+                uint32_t compat_address;
+
+                err = pe_kernel_info(loaded_image->ImageBase, &compat_address);
+                if (err != EFI_SUCCESS) {
+                        if (err != EFI_UNSUPPORTED)
+                                return log_error_status(err, "Error finding kernel compat entry address: %m");
+                } else if (compat_address > 0) {
+                        EFI_IMAGE_ENTRY_POINT kernel_entry =
+                                (EFI_IMAGE_ENTRY_POINT) ((uint8_t *) loaded_image->ImageBase + compat_address);
+
+                        err = kernel_entry(image, ST);
+                        graphics_mode(false);
+                        if (err == EFI_SUCCESS)
+                                return EFI_SUCCESS;
+                } else
+                        err = EFI_UNSUPPORTED;
+        }
+
+        return log_error_status(err, "Failed to execute %ls (%ls): %m", entry->title_show, entry->loader);
 }
 
-static EFI_STATUS reboot_into_firmware(VOID) {
-        UINT64 old, new;
-        EFI_STATUS err;
-
-        new = EFI_OS_INDICATIONS_BOOT_TO_FW_UI;
-
-        err = efivar_get_uint64_le(EFI_GLOBAL_GUID, L"OsIndications", &old);
-        if (!EFI_ERROR(err))
-                new |= old;
-
-        err = efivar_set_uint64_le(EFI_GLOBAL_GUID, L"OsIndications", new, EFI_VARIABLE_NON_VOLATILE);
-        if (EFI_ERROR(err))
-                return err;
-
-        err = uefi_call_wrapper(RT->ResetSystem, 4, EfiResetCold, EFI_SUCCESS, 0, NULL);
-        return log_error_status_stall(err, L"Error calling ResetSystem: %r", err);
-}
-
-static VOID config_free(Config *config) {
-        for (UINTN i = 0; i < config->entry_count; i++)
+static void config_free(Config *config) {
+        assert(config);
+        for (size_t i = 0; i < config->entry_count; i++)
                 config_entry_free(config->entries[i]);
-        FreePool(config->entries);
-        FreePool(config->entry_default_pattern);
-        FreePool(config->options_edit);
-        FreePool(config->entry_oneshot);
+        free(config->entries);
+        free(config->entry_default_config);
+        free(config->entry_oneshot);
 }
 
-static VOID config_write_entries_to_variable(Config *config) {
-        _cleanup_freepool_ CHAR16 *buffer = NULL;
-        UINTN sz = 0;
-        CHAR16 *p;
+static void config_write_entries_to_variable(Config *config) {
+        _cleanup_free_ char *buffer = NULL;
+        size_t sz = 0;
+        char *p;
 
-        for (UINTN i = 0; i < config->entry_count; i++)
-                sz += StrLen(config->entries[i]->id) + 1;
+        assert(config);
 
-        p = buffer = AllocatePool(sz * sizeof(CHAR16));
+        for (size_t i = 0; i < config->entry_count; i++)
+                sz += strsize16(config->entries[i]->id);
 
-        for (UINTN i = 0; i < config->entry_count; i++) {
-                UINTN l;
+        p = buffer = xmalloc(sz);
 
-                l = StrLen(config->entries[i]->id) + 1;
-                CopyMem(p, config->entries[i]->id, l * sizeof(CHAR16));
+        for (size_t i = 0; i < config->entry_count; i++)
+                p = mempcpy(p, config->entries[i]->id, strsize16(config->entries[i]->id));
 
-                p += l;
-        }
+        assert(p == buffer + sz);
 
         /* Store the full list of discovered entries. */
-        (void) efivar_set_raw(LOADER_GUID, L"LoaderEntries", buffer, (UINT8 *) p - (UINT8 *) buffer, 0);
+        (void) efivar_set_raw(MAKE_GUID_PTR(LOADER), u"LoaderEntries", buffer, sz, 0);
 }
 
-EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
-        static const UINT64 loader_features =
+static void save_selected_entry(const Config *config, const ConfigEntry *entry) {
+        assert(config);
+        assert(entry);
+        assert(entry->loader || !entry->call);
+
+        /* Always export the selected boot entry to the system in a volatile var. */
+        (void) efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderEntrySelected", entry->id, 0);
+
+        /* Do not save or delete if this was a oneshot boot. */
+        if (streq16(config->entry_oneshot, entry->id))
+                return;
+
+        if (config->use_saved_entry_efivar || (!config->entry_default_efivar && config->use_saved_entry)) {
+                /* Avoid unnecessary NVRAM writes. */
+                if (streq16(config->entry_saved, entry->id))
+                        return;
+
+                (void) efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderEntryLastBooted", entry->id, EFI_VARIABLE_NON_VOLATILE);
+        } else
+                /* Delete the non-volatile var if not needed. */
+                (void) efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderEntryLastBooted", NULL, EFI_VARIABLE_NON_VOLATILE);
+}
+
+static EFI_STATUS secure_boot_discover_keys(Config *config, EFI_FILE *root_dir) {
+        EFI_STATUS err;
+        _cleanup_(file_closep) EFI_FILE *keys_basedir = NULL;
+
+        if (secure_boot_mode() != SECURE_BOOT_SETUP)
+                return EFI_SUCCESS;
+
+        /* the lack of a 'keys' directory is not fatal and is silently ignored */
+        err = open_directory(root_dir, u"\\loader\\keys", &keys_basedir);
+        if (err == EFI_NOT_FOUND)
+                return EFI_SUCCESS;
+        if (err != EFI_SUCCESS)
+                return err;
+
+        for (;;) {
+                _cleanup_free_ EFI_FILE_INFO *dirent = NULL;
+                size_t dirent_size = 0;
+                ConfigEntry *entry = NULL;
+
+                err = readdir_harder(keys_basedir, &dirent, &dirent_size);
+                if (err != EFI_SUCCESS || !dirent)
+                        return err;
+
+                if (dirent->FileName[0] == '.')
+                        continue;
+
+                if (!FLAGS_SET(dirent->Attribute, EFI_FILE_DIRECTORY))
+                        continue;
+
+                entry = xnew(ConfigEntry, 1);
+                *entry = (ConfigEntry) {
+                        .id = xasprintf("secure-boot-keys-%ls", dirent->FileName),
+                        .title = xasprintf("Enroll Secure Boot keys: %ls", dirent->FileName),
+                        .path = xasprintf("\\loader\\keys\\%ls", dirent->FileName),
+                        .type = LOADER_SECURE_BOOT_KEYS,
+                        .tries_done = -1,
+                        .tries_left = -1,
+                };
+                config_add_entry(config, entry);
+
+                if (IN_SET(config->secure_boot_enroll, ENROLL_IF_SAFE, ENROLL_FORCE) &&
+                    strcaseeq16(dirent->FileName, u"auto"))
+                        /* if we auto enroll successfully this call does not return, if it fails we still
+                         * want to add other potential entries to the menu */
+                        secure_boot_enroll_at(root_dir, entry->path, config->secure_boot_enroll == ENROLL_FORCE);
+        }
+
+        return EFI_SUCCESS;
+}
+
+static void export_variables(
+                EFI_LOADED_IMAGE_PROTOCOL *loaded_image,
+                const char16_t *loaded_image_path,
+                uint64_t init_usec) {
+
+        static const uint64_t loader_features =
                 EFI_LOADER_FEATURE_CONFIG_TIMEOUT |
                 EFI_LOADER_FEATURE_CONFIG_TIMEOUT_ONE_SHOT |
                 EFI_LOADER_FEATURE_ENTRY_DEFAULT |
@@ -2248,122 +2539,158 @@
                 EFI_LOADER_FEATURE_BOOT_COUNTING |
                 EFI_LOADER_FEATURE_XBOOTLDR |
                 EFI_LOADER_FEATURE_RANDOM_SEED |
+                EFI_LOADER_FEATURE_LOAD_DRIVER |
+                EFI_LOADER_FEATURE_SORT_KEY |
+                EFI_LOADER_FEATURE_SAVED_ENTRY |
+                EFI_LOADER_FEATURE_DEVICETREE |
                 0;
 
-        _cleanup_freepool_ CHAR16 *infostr = NULL, *typestr = NULL;
-        UINT64 osind = 0;
-        EFI_LOADED_IMAGE *loaded_image;
-        EFI_FILE *root_dir;
-        CHAR16 *loaded_image_path;
-        EFI_STATUS err;
-        Config config;
-        UINT64 init_usec;
-        BOOLEAN menu = FALSE;
-        CHAR16 uuid[37];
+        _cleanup_free_ char16_t *infostr = NULL, *typestr = NULL;
+        char16_t uuid[37];
 
-        InitializeLib(image, sys_table);
-        init_usec = time_usec();
-        efivar_set_time_usec(LOADER_GUID, L"LoaderTimeInitUSec", init_usec);
-        efivar_set(LOADER_GUID, L"LoaderInfo", L"systemd-boot " GIT_VERSION, 0);
+        assert(loaded_image);
 
-        infostr = PoolPrint(L"%s %d.%02d", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
-        efivar_set(LOADER_GUID, L"LoaderFirmwareInfo", infostr, 0);
+        efivar_set_time_usec(MAKE_GUID_PTR(LOADER), u"LoaderTimeInitUSec", init_usec);
+        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderInfo", u"systemd-boot " GIT_VERSION, 0);
 
-        typestr = PoolPrint(L"UEFI %d.%02d", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
-        efivar_set(LOADER_GUID, L"LoaderFirmwareType", typestr, 0);
+        infostr = xasprintf("%ls %u.%02u", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
+        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderFirmwareInfo", infostr, 0);
 
-        (void) efivar_set_uint64_le(LOADER_GUID, L"LoaderFeatures", loader_features, 0);
+        typestr = xasprintf("UEFI %u.%02u", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
+        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderFirmwareType", typestr, 0);
 
-        err = uefi_call_wrapper(BS->OpenProtocol, 6, image, &LoadedImageProtocol, (VOID **)&loaded_image,
-                                image, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Error getting a LoadedImageProtocol handle: %r", err);
+        (void) efivar_set_uint64_le(MAKE_GUID_PTR(LOADER), u"LoaderFeatures", loader_features, 0);
+
+        /* the filesystem path to this image, to prevent adding ourselves to the menu */
+        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderImageIdentifier", loaded_image_path, 0);
 
         /* export the device path this image is started from */
         if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS)
-                efivar_set(LOADER_GUID, L"LoaderDevicePartUUID", uuid, 0);
+                efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderDevicePartUUID", uuid, 0);
+}
 
-        root_dir = LibOpenRoot(loaded_image->DeviceHandle);
-        if (!root_dir)
-                return log_error_status_stall(EFI_LOAD_ERROR, L"Unable to open root directory.", EFI_LOAD_ERROR);
+static void config_load_all_entries(
+                Config *config,
+                EFI_LOADED_IMAGE_PROTOCOL *loaded_image,
+                const char16_t *loaded_image_path,
+                EFI_FILE *root_dir) {
 
-        if (secure_boot_enabled() && shim_loaded()) {
-                err = security_policy_install();
-                if (EFI_ERROR(err))
-                        return log_error_status_stall(err, L"Error installing security policy: %r", err);
-        }
+        assert(config);
+        assert(loaded_image);
+        assert(root_dir);
 
-        /* the filesystem path to this image, to prevent adding ourselves to the menu */
-        loaded_image_path = DevicePathToStr(loaded_image->FilePath);
-        efivar_set(LOADER_GUID, L"LoaderImageIdentifier", loaded_image_path, 0);
-
-        config_load_defaults(&config, root_dir);
+        config_load_defaults(config, root_dir);
 
         /* scan /EFI/Linux/ directory */
-        config_entry_add_linux(&config, loaded_image->DeviceHandle, root_dir);
+        config_entry_add_unified(config, loaded_image->DeviceHandle, root_dir);
 
         /* scan /loader/entries/\*.conf files */
-        config_load_entries(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path);
+        config_load_entries(config, loaded_image->DeviceHandle, root_dir, loaded_image_path);
 
         /* Similar, but on any XBOOTLDR partition */
-        config_load_xbootldr(&config, loaded_image->DeviceHandle);
+        config_load_xbootldr(config, loaded_image->DeviceHandle);
 
         /* sort entries after version number */
-        config_sort_entries(&config);
+        sort_pointer_array((void **) config->entries, config->entry_count, (compare_pointer_func_t) config_entry_compare);
 
         /* if we find some well-known loaders, add them to the end of the list */
-        config_entry_add_loader_auto(&config, loaded_image->DeviceHandle, root_dir, NULL,
-                                     L"auto-windows", 'w', L"Windows Boot Manager", L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi");
-        config_entry_add_loader_auto(&config, loaded_image->DeviceHandle, root_dir, NULL,
-                                     L"auto-efi-shell", 's', L"EFI Shell", L"\\shell" EFI_MACHINE_TYPE_NAME ".efi");
-        config_entry_add_loader_auto(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path,
-                                     L"auto-efi-default", '\0', L"EFI Default Loader", L"\\EFI\\Boot\\boot" EFI_MACHINE_TYPE_NAME ".efi");
-        config_entry_add_osx(&config);
+        config_entry_add_osx(config);
+        config_entry_add_windows(config, loaded_image->DeviceHandle, root_dir);
+        config_entry_add_loader_auto(config, loaded_image->DeviceHandle, root_dir, NULL,
+                                     u"auto-efi-shell", 's', u"EFI Shell", u"\\shell" EFI_MACHINE_TYPE_NAME ".efi");
+        config_entry_add_loader_auto(config, loaded_image->DeviceHandle, root_dir, loaded_image_path,
+                                     u"auto-efi-default", '\0', u"EFI Default Loader", NULL);
 
-        if (config.auto_firmware && efivar_get_uint64_le(EFI_GLOBAL_GUID, L"OsIndicationsSupported", &osind) == EFI_SUCCESS) {
-                if (osind & EFI_OS_INDICATIONS_BOOT_TO_FW_UI)
-                        config_entry_add_call(&config,
-                                              L"auto-reboot-to-firmware-setup",
-                                              L"Reboot Into Firmware Interface",
-                                              reboot_into_firmware);
+        if (config->auto_firmware && FLAGS_SET(get_os_indications_supported(), EFI_OS_INDICATIONS_BOOT_TO_FW_UI)) {
+                ConfigEntry *entry = xnew(ConfigEntry, 1);
+                *entry = (ConfigEntry) {
+                        .id = xstrdup16(u"auto-reboot-to-firmware-setup"),
+                        .title = xstrdup16(u"Reboot Into Firmware Interface"),
+                        .call = reboot_into_firmware,
+                        .tries_done = -1,
+                        .tries_left = -1,
+                };
+                config_add_entry(config, entry);
         }
 
-        if (config.entry_count == 0) {
-                log_error_stall(L"No loader found. Configuration files in \\loader\\entries\\*.conf are needed.");
-                goto out;
-        }
+        /* find if secure boot signing keys exist and autoload them if necessary
+        otherwise creates menu entries so that the user can load them manually
+        if the secure-boot-enroll variable is set to no (the default), we do not
+        even search for keys on the ESP */
+        if (config->secure_boot_enroll != ENROLL_OFF)
+                secure_boot_discover_keys(config, root_dir);
 
-        config_write_entries_to_variable(&config);
+        if (config->entry_count == 0)
+                return;
 
-        config_title_generate(&config);
+        config_write_entries_to_variable(config);
+
+        config_title_generate(config);
 
         /* select entry by configured pattern or EFI LoaderDefaultEntry= variable */
-        config_default_entry_select(&config);
+        config_default_entry_select(config);
+}
 
-        /* if no configured entry to select from was found, enable the menu */
-        if (config.idx_default == -1) {
-                config.idx_default = 0;
-                if (config.timeout_sec == 0)
-                        config.timeout_sec = 10;
+static EFI_STATUS discover_root_dir(EFI_LOADED_IMAGE_PROTOCOL *loaded_image, EFI_FILE **ret_dir) {
+        if (is_direct_boot(loaded_image->DeviceHandle))
+                return vmm_open(&loaded_image->DeviceHandle, ret_dir);
+        else
+                return open_volume(loaded_image->DeviceHandle, ret_dir);
+}
+
+static EFI_STATUS run(EFI_HANDLE image) {
+        EFI_LOADED_IMAGE_PROTOCOL *loaded_image;
+        _cleanup_(file_closep) EFI_FILE *root_dir = NULL;
+        _cleanup_(config_free) Config config = {};
+        _cleanup_free_ char16_t *loaded_image_path = NULL;
+        EFI_STATUS err;
+        uint64_t init_usec;
+        bool menu = false;
+
+        init_usec = time_usec();
+
+        err = BS->OpenProtocol(
+                        image,
+                        MAKE_GUID_PTR(EFI_LOADED_IMAGE_PROTOCOL),
+                        (void **) &loaded_image,
+                        image,
+                        NULL,
+                        EFI_OPEN_PROTOCOL_GET_PROTOCOL);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error getting a LoadedImageProtocol handle: %m");
+
+        (void) device_path_to_str(loaded_image->FilePath, &loaded_image_path);
+
+        export_variables(loaded_image, loaded_image_path, init_usec);
+
+        err = discover_root_dir(loaded_image, &root_dir);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Unable to open root directory: %m");
+
+        (void) load_drivers(image, loaded_image, root_dir);
+
+        config_load_all_entries(&config, loaded_image, loaded_image_path, root_dir);
+
+        if (config.entry_count == 0) {
+                log_error("No loader found. Configuration files in \\loader\\entries\\*.conf are needed.");
+                goto out;
         }
 
         /* select entry or show menu when key is pressed or timeout is set */
         if (config.force_menu || config.timeout_sec > 0)
-                menu = TRUE;
+                menu = true;
         else {
-                UINT64 key;
+                uint64_t key;
 
                 /* Block up to 100ms to give firmware time to get input working. */
                 err = console_key_read(&key, 100 * 1000);
-                if (!EFI_ERROR(err)) {
-                        INT16 idx;
-
+                if (err == EFI_SUCCESS) {
                         /* find matching key in config entries */
-                        idx = entry_lookup_key(&config, config.idx_default, KEYCHAR(key));
-                        if (idx >= 0)
+                        size_t idx = entry_lookup_key(&config, config.idx_default, KEYCHAR(key));
+                        if (idx != IDX_INVALID)
                                 config.idx_default = idx;
                         else
-                                menu = TRUE;
+                                menu = true;
                 }
         }
 
@@ -2372,42 +2699,48 @@
 
                 entry = config.entries[config.idx_default];
                 if (menu) {
-                        efivar_set_time_usec(LOADER_GUID, L"LoaderTimeMenuUSec", 0);
-                        uefi_call_wrapper(BS->SetWatchdogTimer, 4, 0, 0x10000, 0, NULL);
+                        efivar_set_time_usec(MAKE_GUID_PTR(LOADER), u"LoaderTimeMenuUSec", 0);
                         if (!menu_run(&config, &entry, loaded_image_path))
                                 break;
                 }
 
-                /* run special entry like "reboot" */
-                if (entry->call) {
+                /* if auto enrollment is activated, we try to load keys for the given entry. */
+                if (entry->type == LOADER_SECURE_BOOT_KEYS && config.secure_boot_enroll != ENROLL_OFF) {
+                        err = secure_boot_enroll_at(root_dir, entry->path, /*force=*/ true);
+                        if (err != EFI_SUCCESS)
+                                return err;
+                        continue;
+                }
+
+                /* Run special entry like "reboot" now. Those that have a loader
+                 * will be handled by image_start() instead. */
+                if (entry->call && !entry->loader) {
                         entry->call();
                         continue;
                 }
 
                 config_entry_bump_counters(entry, root_dir);
-
-                /* Export the selected boot entry to the system */
-                (VOID) efivar_set(LOADER_GUID, L"LoaderEntrySelected", entry->id, 0);
+                save_selected_entry(&config, entry);
 
                 /* Optionally, read a random seed off the ESP and pass it to the OS */
-                (VOID) process_random_seed(root_dir, config.random_seed_mode);
+                (void) process_random_seed(root_dir);
 
-                uefi_call_wrapper(BS->SetWatchdogTimer, 4, 5 * 60, 0x10000, 0, NULL);
-                err = image_start(image, &config, entry);
-                if (EFI_ERROR(err)) {
-                        graphics_mode(FALSE);
-                        log_error_stall(L"Failed to execute %s (%s): %r", entry->title, entry->loader, err);
+                err = image_start(image, entry);
+                if (err != EFI_SUCCESS)
                         goto out;
-                }
 
-                menu = TRUE;
+                menu = true;
                 config.timeout_sec = 0;
         }
         err = EFI_SUCCESS;
 out:
-        FreePool(loaded_image_path);
-        config_free(&config);
-        uefi_call_wrapper(root_dir->Close, 1, root_dir);
-        uefi_call_wrapper(BS->CloseProtocol, 4, image, &LoadedImageProtocol, image, NULL);
+        BS->CloseProtocol(image, MAKE_GUID_PTR(EFI_LOADED_IMAGE_PROTOCOL), image, NULL);
         return err;
 }
+
+DEFINE_EFI_MAIN_FUNCTION(run, "systemd-boot", /*wait_for_debugger=*/false);
+
+/* Fedora has a heavily patched gnu-efi that supports elf constructors. It calls into _entry instead. */
+EFI_STATUS _entry(EFI_HANDLE image, EFI_SYSTEM_TABLE *system_table) {
+        return efi_main(image, system_table);
+}
diff --git a/src/boot/efi/console.c b/src/boot/efi/console.c
index 369c549..343d965 100644
--- a/src/boot/efi/console.c
+++ b/src/boot/efi/console.c
@@ -8,176 +8,233 @@
 
 #define SYSTEM_FONT_WIDTH 8
 #define SYSTEM_FONT_HEIGHT 19
+#define HORIZONTAL_MAX_OK 1920
+#define VERTICAL_MAX_OK 1080
+#define VIEWPORT_RATIO 10
 
-#define EFI_SIMPLE_TEXT_INPUT_EX_GUID &(EFI_GUID) EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID
-
-static inline void EventClosep(EFI_EVENT *event) {
+static inline void event_closep(EFI_EVENT *event) {
         if (!*event)
                 return;
 
-        uefi_call_wrapper(BS->CloseEvent, 1, *event);
+        BS->CloseEvent(*event);
 }
 
 /*
  * Reading input from the console sounds like an easy task to do, but thanks to broken
  * firmware it is actually a nightmare.
  *
- * There is a ConIn and TextInputEx API for this. Ideally we want to use TextInputEx,
- * because that gives us Ctrl/Alt/Shift key state information. Unfortunately, it is not
- * always available and sometimes just non-functional.
+ * There is a SimpleTextInput and SimpleTextInputEx API for this. Ideally we want to use
+ * TextInputEx, because that gives us Ctrl/Alt/Shift key state information. Unfortunately,
+ * it is not always available and sometimes just non-functional.
  *
- * On the other hand we have ConIn, where some firmware likes to just freeze on us
- * if we call ReadKeyStroke on it.
+ * On some firmware, calling ReadKeyStroke or ReadKeyStrokeEx on the default console input
+ * device will just freeze no matter what (even though it *reported* being ready).
+ * Also, multiple input protocols can be backed by the same device, but they can be out of
+ * sync. Falling back on a different protocol can end up with double input.
  *
- * Therefore, we use WaitForEvent on both ConIn and TextInputEx (if available) along
- * with a timer event. The timer ensures there is no need to call into functions
- * that might freeze on us, while still allowing us to show a timeout counter.
- */
-EFI_STATUS console_key_read(UINT64 *key, UINT64 timeout_usec) {
-        static EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInputEx;
-        static BOOLEAN checked;
-        UINTN index;
-        EFI_INPUT_KEY k;
+ * Therefore, we will preferably use TextInputEx for ConIn if that is available. Additionally,
+ * we look for the first TextInputEx device the firmware gives us as a fallback option. It
+ * will replace ConInEx permanently if it ever reports a key press.
+ * Lastly, a timer event allows us to provide a input timeout without having to call into
+ * any input functions that can freeze on us or using a busy/stall loop. */
+EFI_STATUS console_key_read(uint64_t *key, uint64_t timeout_usec) {
+        static EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *conInEx = NULL, *extraInEx = NULL;
+        static bool checked = false;
+        size_t index;
         EFI_STATUS err;
-        _cleanup_(EventClosep) EFI_EVENT timer = NULL;
-        EFI_EVENT events[3] = { ST->ConIn->WaitForKey };
-        UINTN n_events = 1;
+        _cleanup_(event_closep) EFI_EVENT timer = NULL;
+
+        assert(key);
 
         if (!checked) {
-                err = LibLocateProtocol(EFI_SIMPLE_TEXT_INPUT_EX_GUID, (VOID **)&TextInputEx);
-                if (EFI_ERROR(err) ||
-                    uefi_call_wrapper(BS->CheckEvent, 1, TextInputEx->WaitForKeyEx) == EFI_INVALID_PARAMETER)
+                /* Get the *first* TextInputEx device. */
+                err = BS->LocateProtocol(
+                                MAKE_GUID_PTR(EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL), NULL, (void **) &extraInEx);
+                if (err != EFI_SUCCESS || BS->CheckEvent(extraInEx->WaitForKeyEx) == EFI_INVALID_PARAMETER)
                         /* If WaitForKeyEx fails here, the firmware pretends it talks this
                          * protocol, but it really doesn't. */
-                        TextInputEx = NULL;
-                else
-                        events[n_events++] = TextInputEx->WaitForKeyEx;
+                        extraInEx = NULL;
 
-                checked = TRUE;
+                /* Get the TextInputEx version of ST->ConIn. */
+                err = BS->HandleProtocol(
+                                ST->ConsoleInHandle,
+                                MAKE_GUID_PTR(EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL),
+                                (void **) &conInEx);
+                if (err != EFI_SUCCESS || BS->CheckEvent(conInEx->WaitForKeyEx) == EFI_INVALID_PARAMETER)
+                        conInEx = NULL;
+
+                if (conInEx == extraInEx)
+                        extraInEx = NULL;
+
+                checked = true;
         }
 
-        if (timeout_usec > 0) {
-                err = uefi_call_wrapper(BS->CreateEvent, 5, EVT_TIMER, 0, NULL, NULL, &timer);
-                if (EFI_ERROR(err))
-                        return log_error_status_stall(err, L"Error creating timer event: %r", err);
+        err = BS->CreateEvent(EVT_TIMER, 0, NULL, NULL, &timer);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error creating timer event: %m");
+
+        EFI_EVENT events[] = {
+                timer,
+                conInEx ? conInEx->WaitForKeyEx : ST->ConIn->WaitForKey,
+                extraInEx ? extraInEx->WaitForKeyEx : NULL,
+        };
+        size_t n_events = extraInEx ? 3 : 2;
+
+        /* Watchdog rearming loop in case the user never provides us with input or some
+         * broken firmware never returns from WaitForEvent. */
+        for (;;) {
+                uint64_t watchdog_timeout_sec = 5 * 60,
+                       watchdog_ping_usec = watchdog_timeout_sec / 2 * 1000 * 1000;
 
                 /* SetTimer expects 100ns units for some reason. */
-                err = uefi_call_wrapper(BS->SetTimer, 3, timer, TimerRelative, timeout_usec * 10);
-                if (EFI_ERROR(err))
-                        return log_error_status_stall(err, L"Error arming timer event: %r", err);
+                err = BS->SetTimer(
+                                timer,
+                                TimerRelative,
+                                MIN(timeout_usec, watchdog_ping_usec) * 10);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Error arming timer event: %m");
 
-                events[n_events++] = timer;
-        }
+                (void) BS->SetWatchdogTimer(watchdog_timeout_sec, 0x10000, 0, NULL);
+                err = BS->WaitForEvent(n_events, events, &index);
+                (void) BS->SetWatchdogTimer(watchdog_timeout_sec, 0x10000, 0, NULL);
 
-        err = uefi_call_wrapper(BS->WaitForEvent, 3, n_events, events, &index);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Error waiting for events: %r", err);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Error waiting for events: %m");
 
-        if (timeout_usec > 0 && timer == events[index])
-                return EFI_TIMEOUT;
+                /* We have keyboard input, process it after this loop. */
+                if (timer != events[index])
+                        break;
 
-        /* TextInputEx might be ready too even if ConIn got to signal first. */
-        if (TextInputEx && !EFI_ERROR(uefi_call_wrapper(BS->CheckEvent, 1, TextInputEx->WaitForKeyEx))) {
-                EFI_KEY_DATA keydata;
-                UINT64 keypress;
-                UINT32 shift = 0;
-
-                err = uefi_call_wrapper(TextInputEx->ReadKeyStrokeEx, 2, TextInputEx, &keydata);
-                if (EFI_ERROR(err))
-                        return err;
-
-                /* do not distinguish between left and right keys */
-                if (keydata.KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) {
-                        if (keydata.KeyState.KeyShiftState & (EFI_RIGHT_CONTROL_PRESSED|EFI_LEFT_CONTROL_PRESSED))
-                                shift |= EFI_CONTROL_PRESSED;
-                        if (keydata.KeyState.KeyShiftState & (EFI_RIGHT_ALT_PRESSED|EFI_LEFT_ALT_PRESSED))
-                                shift |= EFI_ALT_PRESSED;
-                };
-
-                /* 32 bit modifier keys + 16 bit scan code + 16 bit unicode */
-                keypress = KEYPRESS(shift, keydata.Key.ScanCode, keydata.Key.UnicodeChar);
-                if (keypress > 0) {
-                        *key = keypress;
-                        return EFI_SUCCESS;
+                /* The EFI timer fired instead. If this was a watchdog timeout, loop again. */
+                if (timeout_usec == UINT64_MAX)
+                        continue;
+                else if (timeout_usec > watchdog_ping_usec) {
+                        timeout_usec -= watchdog_ping_usec;
+                        continue;
                 }
 
-                return EFI_NOT_READY;
+                /* The caller requested a timeout? They shall have one! */
+                return EFI_TIMEOUT;
         }
 
-        err  = uefi_call_wrapper(ST->ConIn->ReadKeyStroke, 2, ST->ConIn, &k);
-        if (EFI_ERROR(err))
-                return err;
+        /* If the extra input device we found returns something, always use that instead
+         * to work around broken firmware freezing on ConIn/ConInEx. */
+        if (extraInEx && BS->CheckEvent(extraInEx->WaitForKeyEx) == EFI_SUCCESS) {
+                conInEx = extraInEx;
+                extraInEx = NULL;
+        }
 
-        *key = KEYPRESS(0, k.ScanCode, k.UnicodeChar);
-        return EFI_SUCCESS;
+        /* Do not fall back to ConIn if we have a ConIn that supports TextInputEx.
+         * The two may be out of sync on some firmware, giving us double input. */
+        if (conInEx) {
+                EFI_KEY_DATA keydata;
+                uint32_t shift = 0;
+
+                err = conInEx->ReadKeyStrokeEx(conInEx, &keydata);
+                if (err != EFI_SUCCESS)
+                        return err;
+
+                if (FLAGS_SET(keydata.KeyState.KeyShiftState, EFI_SHIFT_STATE_VALID)) {
+                        /* Do not distinguish between left and right keys (set both flags). */
+                        if (keydata.KeyState.KeyShiftState & EFI_CONTROL_PRESSED)
+                                shift |= EFI_CONTROL_PRESSED;
+                        if (keydata.KeyState.KeyShiftState & EFI_ALT_PRESSED)
+                                shift |= EFI_ALT_PRESSED;
+                        if (keydata.KeyState.KeyShiftState & EFI_LOGO_PRESSED)
+                                shift |= EFI_LOGO_PRESSED;
+
+                        /* Shift is not supposed to be reported for keys that can be represented as uppercase
+                         * unicode chars (Shift+f is reported as F instead). Some firmware does it anyway, so
+                         * filter those out. */
+                        if ((keydata.KeyState.KeyShiftState & EFI_SHIFT_PRESSED) &&
+                            keydata.Key.UnicodeChar == 0)
+                                shift |= EFI_SHIFT_PRESSED;
+                }
+
+                /* 32 bit modifier keys + 16 bit scan code + 16 bit unicode */
+                *key = KEYPRESS(shift, keydata.Key.ScanCode, keydata.Key.UnicodeChar);
+                return EFI_SUCCESS;
+        } else if (BS->CheckEvent(ST->ConIn->WaitForKey) == EFI_SUCCESS) {
+                EFI_INPUT_KEY k;
+
+                err = ST->ConIn->ReadKeyStroke(ST->ConIn, &k);
+                if (err != EFI_SUCCESS)
+                        return err;
+
+                *key = KEYPRESS(0, k.ScanCode, k.UnicodeChar);
+                return EFI_SUCCESS;
+        }
+
+        return EFI_NOT_READY;
 }
 
-static EFI_STATUS change_mode(UINTN mode) {
+static EFI_STATUS change_mode(int64_t mode) {
         EFI_STATUS err;
+        int32_t old_mode;
 
-        err = uefi_call_wrapper(ST->ConOut->SetMode, 2, ST->ConOut, mode);
+        /* SetMode expects a size_t, so make sure these values are sane. */
+        mode = CLAMP(mode, CONSOLE_MODE_RANGE_MIN, CONSOLE_MODE_RANGE_MAX);
+        old_mode = MAX(CONSOLE_MODE_RANGE_MIN, ST->ConOut->Mode->Mode);
 
-        /* Special case mode 1: when using OVMF and qemu, setting it returns error
-         * and breaks console output. */
-        if (EFI_ERROR(err) && mode == 1)
-                uefi_call_wrapper(ST->ConOut->SetMode, 2, ST->ConOut, (UINTN)0);
+        log_wait();
+        err = ST->ConOut->SetMode(ST->ConOut, mode);
+        if (err == EFI_SUCCESS)
+                return EFI_SUCCESS;
 
+        /* Something went wrong. Output is probably borked, so try to revert to previous mode. */
+        if (ST->ConOut->SetMode(ST->ConOut, old_mode) == EFI_SUCCESS)
+                return err;
+
+        /* Maybe the device is on fire? */
+        ST->ConOut->Reset(ST->ConOut, true);
+        ST->ConOut->SetMode(ST->ConOut, CONSOLE_MODE_RANGE_MIN);
         return err;
 }
 
-static UINT64 text_area_from_font_size(void) {
+EFI_STATUS query_screen_resolution(uint32_t *ret_w, uint32_t *ret_h) {
         EFI_STATUS err;
-        UINT64 text_area;
-        UINTN rows, columns;
+        EFI_GRAPHICS_OUTPUT_PROTOCOL *go;
 
-        err = uefi_call_wrapper(ST->ConOut->QueryMode, 4, ST->ConOut, ST->ConOut->Mode->Mode, &columns, &rows);
-        if (EFI_ERROR(err)) {
-                columns = 80;
-                rows = 25;
-        }
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_GRAPHICS_OUTPUT_PROTOCOL), NULL, (void **) &go);
+        if (err != EFI_SUCCESS)
+                return err;
 
-        text_area = SYSTEM_FONT_WIDTH * SYSTEM_FONT_HEIGHT * (UINT64)rows * (UINT64)columns;
+        if (!go->Mode || !go->Mode->Info)
+                return EFI_DEVICE_ERROR;
 
-        return text_area;
+        *ret_w = go->Mode->Info->HorizontalResolution;
+        *ret_h = go->Mode->Info->VerticalResolution;
+        return EFI_SUCCESS;
 }
 
-static EFI_STATUS mode_auto(UINTN *mode) {
-        const UINT32 HORIZONTAL_MAX_OK = 1920;
-        const UINT32 VERTICAL_MAX_OK = 1080;
-        const UINT64 VIEWPORT_RATIO = 10;
-        UINT64 screen_area, text_area;
-        EFI_GUID GraphicsOutputProtocolGuid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
-        EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
-        EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
-        EFI_STATUS err;
-        BOOLEAN keep = FALSE;
+static int64_t get_auto_mode(void) {
+        uint32_t screen_width, screen_height;
 
-        err = LibLocateProtocol(&GraphicsOutputProtocolGuid, (VOID **)&GraphicsOutput);
-        if (!EFI_ERROR(err) && GraphicsOutput->Mode && GraphicsOutput->Mode->Info) {
-                Info = GraphicsOutput->Mode->Info;
+        if (query_screen_resolution(&screen_width, &screen_height) == EFI_SUCCESS) {
+                bool keep = false;
 
                 /* Start verifying if we are in a resolution larger than Full HD
                  * (1920x1080). If we're not, assume we're in a good mode and do not
                  * try to change it. */
-                if (Info->HorizontalResolution <= HORIZONTAL_MAX_OK && Info->VerticalResolution <= VERTICAL_MAX_OK)
-                        keep = TRUE;
+                if (screen_width <= HORIZONTAL_MAX_OK && screen_height <= VERTICAL_MAX_OK)
+                        keep = true;
                 /* For larger resolutions, calculate the ratio of the total screen
                  * area to the text viewport area. If it's less than 10 times bigger,
                  * then assume the text is readable and keep the text mode. */
                 else {
-                        screen_area = (UINT64)Info->HorizontalResolution * (UINT64)Info->VerticalResolution;
-                        text_area = text_area_from_font_size();
+                        uint64_t text_area;
+                        size_t x_max, y_max;
+                        uint64_t screen_area = (uint64_t)screen_width * (uint64_t)screen_height;
+
+                        console_query_mode(&x_max, &y_max);
+                        text_area = SYSTEM_FONT_WIDTH * SYSTEM_FONT_HEIGHT * (uint64_t)x_max * (uint64_t)y_max;
 
                         if (text_area != 0 && screen_area/text_area < VIEWPORT_RATIO)
-                                keep = TRUE;
+                                keep = true;
                 }
-        }
 
-        if (keep) {
-                /* Just clear the screen instead of changing the mode and return. */
-                *mode = ST->ConOut->Mode->Mode;
-                uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
-                return EFI_SUCCESS;
+                if (keep)
+                        return ST->ConOut->Mode->Mode;
         }
 
         /* If we reached here, then we have a high resolution screen and the text
@@ -186,30 +243,72 @@
          * standard mode, which is provided by the device manufacturer, so it should
          * be a good mode.
          * Note: MaxMode is the number of modes, not the last mode. */
-        if (ST->ConOut->Mode->MaxMode > 2)
-                *mode = 2;
+        if (ST->ConOut->Mode->MaxMode > CONSOLE_MODE_FIRMWARE_FIRST)
+                return CONSOLE_MODE_FIRMWARE_FIRST;
+
         /* Try again with mode different than zero (assume user requests
          * auto mode due to some problem with mode zero). */
-        else if (ST->ConOut->Mode->MaxMode == 2)
-                *mode = 1;
-        /* Else force mode change to zero. */
-        else
-                *mode = 0;
+        if (ST->ConOut->Mode->MaxMode > CONSOLE_MODE_80_50)
+                return CONSOLE_MODE_80_50;
 
-        return change_mode(*mode);
+        return CONSOLE_MODE_80_25;
 }
 
-EFI_STATUS console_set_mode(UINTN *mode, enum console_mode_change_type how) {
-        if (how == CONSOLE_MODE_AUTO)
-                return mode_auto(mode);
+EFI_STATUS console_set_mode(int64_t mode) {
+        switch (mode) {
+        case CONSOLE_MODE_KEEP:
+                /* If the firmware indicates the current mode is invalid, change it anyway. */
+                if (ST->ConOut->Mode->Mode < CONSOLE_MODE_RANGE_MIN)
+                        return change_mode(CONSOLE_MODE_RANGE_MIN);
+                return EFI_SUCCESS;
 
-        if (how == CONSOLE_MODE_MAX) {
+        case CONSOLE_MODE_NEXT:
+                if (ST->ConOut->Mode->MaxMode <= CONSOLE_MODE_RANGE_MIN)
+                        return EFI_UNSUPPORTED;
+
+                mode = MAX(CONSOLE_MODE_RANGE_MIN, ST->ConOut->Mode->Mode);
+                do {
+                        mode = (mode + 1) % ST->ConOut->Mode->MaxMode;
+                        if (change_mode(mode) == EFI_SUCCESS)
+                                break;
+                        /* If this mode is broken/unsupported, try the next.
+                         * If mode is 0, we wrapped around and should stop. */
+                } while (mode > CONSOLE_MODE_RANGE_MIN);
+
+                return EFI_SUCCESS;
+
+        case CONSOLE_MODE_AUTO:
+                return change_mode(get_auto_mode());
+
+        case CONSOLE_MODE_FIRMWARE_MAX:
                 /* Note: MaxMode is the number of modes, not the last mode. */
-                if (ST->ConOut->Mode->MaxMode > 0)
-                        *mode = ST->ConOut->Mode->MaxMode-1;
-                else
-                        *mode = 0;
+                return change_mode(ST->ConOut->Mode->MaxMode - 1LL);
+
+        default:
+                return change_mode(mode);
+        }
+}
+
+EFI_STATUS console_query_mode(size_t *x_max, size_t *y_max) {
+        EFI_STATUS err;
+
+        assert(x_max);
+        assert(y_max);
+
+        err = ST->ConOut->QueryMode(ST->ConOut, ST->ConOut->Mode->Mode, x_max, y_max);
+        if (err != EFI_SUCCESS) {
+                /* Fallback values mandated by UEFI spec. */
+                switch (ST->ConOut->Mode->Mode) {
+                case CONSOLE_MODE_80_50:
+                        *x_max = 80;
+                        *y_max = 50;
+                        break;
+                case CONSOLE_MODE_80_25:
+                default:
+                        *x_max = 80;
+                        *y_max = 25;
+                }
         }
 
-        return change_mode(*mode);
+        return err;
 }
diff --git a/src/boot/efi/console.h b/src/boot/efi/console.h
index 23848a9..83c219b 100644
--- a/src/boot/efi/console.h
+++ b/src/boot/efi/console.h
@@ -3,18 +3,35 @@
 
 #include "missing_efi.h"
 
-#define EFI_CONTROL_PRESSED             (EFI_RIGHT_CONTROL_PRESSED|EFI_LEFT_CONTROL_PRESSED)
-#define EFI_ALT_PRESSED                 (EFI_RIGHT_ALT_PRESSED|EFI_LEFT_ALT_PRESSED)
-#define KEYPRESS(keys, scan, uni) ((((UINT64)keys) << 32) | (((UINT64)scan) << 16) | (uni))
-#define KEYCHAR(k) ((k) & 0xffff)
-#define CHAR_CTRL(c) ((c) - 'a' + 1)
-
-enum console_mode_change_type {
-        CONSOLE_MODE_KEEP = 0,
-        CONSOLE_MODE_SET,
-        CONSOLE_MODE_AUTO,
-        CONSOLE_MODE_MAX,
+enum {
+        EFI_SHIFT_PRESSED   = EFI_RIGHT_SHIFT_PRESSED|EFI_LEFT_SHIFT_PRESSED,
+        EFI_CONTROL_PRESSED = EFI_RIGHT_CONTROL_PRESSED|EFI_LEFT_CONTROL_PRESSED,
+        EFI_ALT_PRESSED     = EFI_RIGHT_ALT_PRESSED|EFI_LEFT_ALT_PRESSED,
+        EFI_LOGO_PRESSED    = EFI_RIGHT_LOGO_PRESSED|EFI_LEFT_LOGO_PRESSED,
 };
 
-EFI_STATUS console_key_read(UINT64 *key, UINT64 timeout_usec);
-EFI_STATUS console_set_mode(UINTN *mode, enum console_mode_change_type how);
+#define KEYPRESS(keys, scan, uni) ((((uint64_t)keys) << 32) | (((uint64_t)scan) << 16) | (uni))
+#define KEYCHAR(k) ((char16_t)(k))
+#define CHAR_CTRL(c) ((c) - 'a' + 1)
+
+enum {
+        /* Console mode is a int32_t in EFI. We use int64_t to make room for our special values. */
+        CONSOLE_MODE_RANGE_MIN = 0,
+        CONSOLE_MODE_RANGE_MAX = INT32_MAX, /* This is just the theoretical limit. */
+        CONSOLE_MODE_INVALID = -1,          /* UEFI uses -1 if the device is not in a valid text mode. */
+
+        CONSOLE_MODE_80_25 = 0,             /* 80x25 is required by UEFI spec. */
+        CONSOLE_MODE_80_50 = 1,             /* 80x50 may be supported. */
+        CONSOLE_MODE_FIRMWARE_FIRST = 2,    /* First custom mode, if supported. */
+
+        /* These are our own mode values that map to concrete values at runtime. */
+        CONSOLE_MODE_KEEP = CONSOLE_MODE_RANGE_MAX + 1LL,
+        CONSOLE_MODE_NEXT,
+        CONSOLE_MODE_AUTO,
+        CONSOLE_MODE_FIRMWARE_MAX, /* 'max' in config. */
+};
+
+EFI_STATUS console_key_read(uint64_t *key, uint64_t timeout_usec);
+EFI_STATUS console_set_mode(int64_t mode);
+EFI_STATUS console_query_mode(size_t *x_max, size_t *y_max);
+EFI_STATUS query_screen_resolution(uint32_t *ret_width, uint32_t *ret_height);
diff --git a/src/boot/efi/cpio.c b/src/boot/efi/cpio.c
new file mode 100644
index 0000000..1fd16a9
--- /dev/null
+++ b/src/boot/efi/cpio.c
@@ -0,0 +1,529 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "cpio.h"
+#include "measure.h"
+#include "util.h"
+
+static char *write_cpio_word(char *p, uint32_t v) {
+        static const char hex[] = "0123456789abcdef";
+
+        assert(p);
+
+        /* Writes a CPIO header 8 character hex value */
+
+        for (size_t i = 0; i < 8; i++)
+                p[7-i] = hex[(v >> (4 * i)) & 0xF];
+
+        return p + 8;
+}
+
+static char *mangle_filename(char *p, const char16_t *f) {
+        char* w;
+
+        assert(p);
+        assert(f);
+
+        /* Basically converts UTF-16 to plain ASCII (note that we filtered non-ASCII filenames beforehand, so
+         * this operation is always safe) */
+
+        for (w = p; *f != 0; f++) {
+                assert(*f <= 0x7fu);
+
+                *(w++) = *f;
+        }
+
+        *(w++) = 0;
+        return w;
+}
+
+static char *pad4(char *p, const char *start) {
+        assert(p);
+        assert(start);
+        assert(p >= start);
+
+        /* Appends NUL bytes to 'p', until the address is divisible by 4, when taken relative to 'start' */
+
+        while ((p - start) % 4 != 0)
+                *(p++) = 0;
+
+        return p;
+}
+
+static EFI_STATUS pack_cpio_one(
+                const char16_t *fname,
+                const void *contents,
+                size_t contents_size,
+                const char *target_dir_prefix,
+                uint32_t access_mode,
+                uint32_t *inode_counter,
+                void **cpio_buffer,
+                size_t *cpio_buffer_size) {
+
+        size_t l, target_dir_prefix_size, fname_size, q;
+        char *a;
+
+        assert(fname);
+        assert(contents_size || contents_size == 0);
+        assert(target_dir_prefix);
+        assert(inode_counter);
+        assert(cpio_buffer);
+        assert(cpio_buffer_size);
+
+        /* Serializes one file in the cpio format understood by the kernel initrd logic.
+         *
+         * See: https://docs.kernel.org/driver-api/early-userspace/buffer-format.html */
+
+        if (contents_size > UINT32_MAX) /* cpio cannot deal with > 32bit file sizes */
+                return EFI_LOAD_ERROR;
+
+        if (*inode_counter == UINT32_MAX) /* more than 2^32-1 inodes? yikes. cpio doesn't support that either */
+                return EFI_OUT_OF_RESOURCES;
+
+        l = 6 + 13*8 + 1 + 1; /* Fixed CPIO header size, slash separator, and NUL byte after the file name */
+
+        target_dir_prefix_size = strlen8(target_dir_prefix);
+        if (l > SIZE_MAX - target_dir_prefix_size)
+                return EFI_OUT_OF_RESOURCES;
+        l += target_dir_prefix_size;
+
+        fname_size = strlen16(fname);
+        if (l > SIZE_MAX - fname_size)
+                return EFI_OUT_OF_RESOURCES;
+        l += fname_size; /* append space for file name */
+
+        /* CPIO can't deal with fnames longer than 2^32-1 */
+        if (target_dir_prefix_size + fname_size >= UINT32_MAX)
+                return EFI_OUT_OF_RESOURCES;
+
+        /* Align the whole header to 4 byte size */
+        l = ALIGN4(l);
+        if (l == SIZE_MAX) /* overflow check */
+                return EFI_OUT_OF_RESOURCES;
+
+        /* Align the contents to 4 byte size */
+        q = ALIGN4(contents_size);
+        if (q == SIZE_MAX) /* overflow check */
+                return EFI_OUT_OF_RESOURCES;
+
+        if (l > SIZE_MAX - q) /* overflow check */
+                return EFI_OUT_OF_RESOURCES;
+        l += q; /* Add contents to header */
+
+        if (*cpio_buffer_size > SIZE_MAX - l) /* overflow check */
+                return EFI_OUT_OF_RESOURCES;
+        a = xrealloc(*cpio_buffer, *cpio_buffer_size, *cpio_buffer_size + l);
+
+        *cpio_buffer = a;
+        a = (char *) *cpio_buffer + *cpio_buffer_size;
+
+        a = mempcpy(a, "070701", 6); /* magic ID */
+
+        a = write_cpio_word(a, (*inode_counter)++);                         /* inode */
+        a = write_cpio_word(a, access_mode | 0100000 /* = S_IFREG */);      /* mode */
+        a = write_cpio_word(a, 0);                                          /* uid */
+        a = write_cpio_word(a, 0);                                          /* gid */
+        a = write_cpio_word(a, 1);                                          /* nlink */
+
+        /* Note: we don't make any attempt to propagate the mtime here, for two reasons: it's a mess given
+         * that FAT usually is assumed to operate with timezoned timestamps, while UNIX does not. More
+         * importantly though: the modifications times would hamper our goals of providing stable
+         * measurements for the same boots. After all we extend the initrds we generate here into TPM2
+         * PCRs. */
+        a = write_cpio_word(a, 0);                                          /* mtime */
+        a = write_cpio_word(a, contents_size);                              /* size */
+        a = write_cpio_word(a, 0);                                          /* major(dev) */
+        a = write_cpio_word(a, 0);                                          /* minor(dev) */
+        a = write_cpio_word(a, 0);                                          /* major(rdev) */
+        a = write_cpio_word(a, 0);                                          /* minor(rdev) */
+        a = write_cpio_word(a, target_dir_prefix_size + fname_size + 2);    /* fname size */
+        a = write_cpio_word(a, 0);                                          /* "crc" */
+
+        a = mempcpy(a, target_dir_prefix, target_dir_prefix_size);
+        *(a++) = '/';
+        a = mangle_filename(a, fname);
+
+        /* Pad to next multiple of 4 */
+        a = pad4(a, *cpio_buffer);
+
+        a = mempcpy(a, contents, contents_size);
+
+        /* Pad to next multiple of 4 */
+        a = pad4(a, *cpio_buffer);
+
+        assert(a == (char *) *cpio_buffer + *cpio_buffer_size + l);
+        *cpio_buffer_size += l;
+
+        return EFI_SUCCESS;
+}
+
+static EFI_STATUS pack_cpio_dir(
+                const char *path,
+                uint32_t access_mode,
+                uint32_t *inode_counter,
+                void **cpio_buffer,
+                size_t *cpio_buffer_size) {
+
+        size_t l, path_size;
+        char *a;
+
+        assert(path);
+        assert(inode_counter);
+        assert(cpio_buffer);
+        assert(cpio_buffer_size);
+
+        /* Serializes one directory inode in cpio format. Note that cpio archives must first create the dirs
+         * they want to place files in. */
+
+        if (*inode_counter == UINT32_MAX)
+                return EFI_OUT_OF_RESOURCES;
+
+        l = 6 + 13*8 + 1; /* Fixed CPIO header size, and NUL byte after the file name */
+
+        path_size = strlen8(path);
+        if (l > SIZE_MAX - path_size)
+                return EFI_OUT_OF_RESOURCES;
+        l += path_size;
+
+        /* Align the whole header to 4 byte size */
+        l = ALIGN4(l);
+        if (l == SIZE_MAX) /* overflow check */
+                return EFI_OUT_OF_RESOURCES;
+
+        if (*cpio_buffer_size > SIZE_MAX - l) /* overflow check */
+                return EFI_OUT_OF_RESOURCES;
+
+        *cpio_buffer = a = xrealloc(*cpio_buffer, *cpio_buffer_size, *cpio_buffer_size + l);
+        a = (char *) *cpio_buffer + *cpio_buffer_size;
+
+        a = mempcpy(a, "070701", 6); /* magic ID */
+
+        a = write_cpio_word(a, (*inode_counter)++);                         /* inode */
+        a = write_cpio_word(a, access_mode | 0040000 /* = S_IFDIR */);      /* mode */
+        a = write_cpio_word(a, 0);                                          /* uid */
+        a = write_cpio_word(a, 0);                                          /* gid */
+        a = write_cpio_word(a, 1);                                          /* nlink */
+        a = write_cpio_word(a, 0);                                          /* mtime */
+        a = write_cpio_word(a, 0);                                          /* size */
+        a = write_cpio_word(a, 0);                                          /* major(dev) */
+        a = write_cpio_word(a, 0);                                          /* minor(dev) */
+        a = write_cpio_word(a, 0);                                          /* major(rdev) */
+        a = write_cpio_word(a, 0);                                          /* minor(rdev) */
+        a = write_cpio_word(a, path_size + 1);                              /* fname size */
+        a = write_cpio_word(a, 0);                                          /* "crc" */
+
+        a = mempcpy(a, path, path_size + 1);
+
+        /* Pad to next multiple of 4 */
+        a = pad4(a, *cpio_buffer);
+
+        assert(a == (char *) *cpio_buffer + *cpio_buffer_size + l);
+
+        *cpio_buffer_size += l;
+        return EFI_SUCCESS;
+}
+
+static EFI_STATUS pack_cpio_prefix(
+                const char *path,
+                uint32_t dir_mode,
+                uint32_t *inode_counter,
+                void **cpio_buffer,
+                size_t *cpio_buffer_size) {
+
+        EFI_STATUS err;
+
+        assert(path);
+        assert(inode_counter);
+        assert(cpio_buffer);
+        assert(cpio_buffer_size);
+
+        /* Serializes directory inodes of all prefix paths of the specified path in cpio format. Note that
+         * (similar to mkdir -p behaviour) all leading paths are created with 0555 access mode, only the
+         * final dir is created with the specified directory access mode. */
+
+        for (const char *p = path;;) {
+                const char *e;
+
+                e = strchr8(p, '/');
+                if (!e)
+                        break;
+
+                if (e > p) {
+                        _cleanup_free_ char *t = NULL;
+
+                        t = xstrndup8(path, e - path);
+                        if (!t)
+                                return EFI_OUT_OF_RESOURCES;
+
+                        err = pack_cpio_dir(t, 0555, inode_counter, cpio_buffer, cpio_buffer_size);
+                        if (err != EFI_SUCCESS)
+                                return err;
+                }
+
+                p = e + 1;
+        }
+
+        return pack_cpio_dir(path, dir_mode, inode_counter, cpio_buffer, cpio_buffer_size);
+}
+
+static EFI_STATUS pack_cpio_trailer(
+                void **cpio_buffer,
+                size_t *cpio_buffer_size) {
+
+        static const char trailer[] =
+                "070701"
+                "00000000"
+                "00000000"
+                "00000000"
+                "00000000"
+                "00000001"
+                "00000000"
+                "00000000"
+                "00000000"
+                "00000000"
+                "00000000"
+                "00000000"
+                "0000000B"
+                "00000000"
+                "TRAILER!!!\0\0\0"; /* There's a fourth NUL byte appended here, because this is a string */
+
+        /* Generates the cpio trailer record that indicates the end of our initrd cpio archive */
+
+        assert(cpio_buffer);
+        assert(cpio_buffer_size);
+        assert_cc(sizeof(trailer) % 4 == 0);
+
+        *cpio_buffer = xrealloc(*cpio_buffer, *cpio_buffer_size, *cpio_buffer_size + sizeof(trailer));
+        memcpy((uint8_t*) *cpio_buffer + *cpio_buffer_size, trailer, sizeof(trailer));
+        *cpio_buffer_size += sizeof(trailer);
+
+        return EFI_SUCCESS;
+}
+
+static char16_t *get_dropin_dir(const EFI_DEVICE_PATH *file_path) {
+        if (!file_path)
+                return NULL;
+
+        /* A device path is allowed to have more than one file path node. If that is the case they are
+         * supposed to be concatenated. Unfortunately, the device path to text protocol simply converts the
+         * nodes individually and then combines those with the usual '/' for device path nodes. But this does
+         * not create a legal EFI file path that the file protocol can use. */
+
+        /* Make sure we really only got file paths. */
+        for (const EFI_DEVICE_PATH *node = file_path; !IsDevicePathEnd(node); node = NextDevicePathNode(node))
+                if (DevicePathType(node) != MEDIA_DEVICE_PATH || DevicePathSubType(node) != MEDIA_FILEPATH_DP)
+                        return NULL;
+
+        _cleanup_free_ char16_t *file_path_str = NULL;
+        if (device_path_to_str(file_path, &file_path_str) != EFI_SUCCESS)
+                return NULL;
+
+        convert_efi_path(file_path_str);
+        return xasprintf("%ls.extra.d", file_path_str);
+}
+
+EFI_STATUS pack_cpio(
+                EFI_LOADED_IMAGE_PROTOCOL *loaded_image,
+                const char16_t *dropin_dir,
+                const char16_t *match_suffix,
+                const char *target_dir_prefix,
+                uint32_t dir_mode,
+                uint32_t access_mode,
+                uint32_t tpm_pcr,
+                const char16_t *tpm_description,
+                void **ret_buffer,
+                size_t *ret_buffer_size,
+                bool *ret_measured) {
+
+        _cleanup_(file_closep) EFI_FILE *root = NULL, *extra_dir = NULL;
+        size_t dirent_size = 0, buffer_size = 0, n_items = 0, n_allocated = 0;
+        _cleanup_free_ char16_t *rel_dropin_dir = NULL;
+        _cleanup_free_ EFI_FILE_INFO *dirent = NULL;
+        _cleanup_(strv_freep) char16_t **items = NULL;
+        _cleanup_free_ void *buffer = NULL;
+        uint32_t inode = 1; /* inode counter, so that each item gets a new inode */
+        EFI_STATUS err;
+
+        assert(loaded_image);
+        assert(target_dir_prefix);
+        assert(ret_buffer);
+        assert(ret_buffer_size);
+
+        if (!loaded_image->DeviceHandle)
+                goto nothing;
+
+        err = open_volume(loaded_image->DeviceHandle, &root);
+        if (err == EFI_UNSUPPORTED)
+                /* Error will be unsupported if the bootloader doesn't implement the file system protocol on
+                 * its file handles. */
+                goto nothing;
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Unable to open root directory: %m");
+
+        if (!dropin_dir)
+                dropin_dir = rel_dropin_dir = get_dropin_dir(loaded_image->FilePath);
+
+        err = open_directory(root, dropin_dir, &extra_dir);
+        if (err == EFI_NOT_FOUND)
+                /* No extra subdir, that's totally OK */
+                goto nothing;
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to open extra directory of loaded image: %m");
+
+        for (;;) {
+                _cleanup_free_ char16_t *d = NULL;
+
+                err = readdir_harder(extra_dir, &dirent, &dirent_size);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Failed to read extra directory of loaded image: %m");
+                if (!dirent) /* End of directory */
+                        break;
+
+                if (dirent->FileName[0] == '.')
+                        continue;
+                if (FLAGS_SET(dirent->Attribute, EFI_FILE_DIRECTORY))
+                        continue;
+                if (match_suffix && !endswith_no_case(dirent->FileName, match_suffix))
+                        continue;
+                if (!is_ascii(dirent->FileName))
+                        continue;
+                if (strlen16(dirent->FileName) > 255) /* Max filename size on Linux */
+                        continue;
+
+                d = xstrdup16(dirent->FileName);
+
+                if (n_items+2 > n_allocated) {
+                        /* We allocate 16 entries at a time, as a matter of optimization */
+                        if (n_items > (SIZE_MAX / sizeof(uint16_t)) - 16) /* Overflow check, just in case */
+                                return log_oom();
+
+                        size_t m = n_items + 16;
+                        items = xrealloc(items, n_allocated * sizeof(uint16_t *), m * sizeof(uint16_t *));
+                        n_allocated = m;
+                }
+
+                items[n_items++] = TAKE_PTR(d);
+                items[n_items] = NULL; /* Let's always NUL terminate, to make freeing via strv_free() easy */
+        }
+
+        if (n_items == 0)
+                /* Empty directory */
+                goto nothing;
+
+        /* Now, sort the files we found, to make this uniform and stable (and to ensure the TPM measurements
+         * are not dependent on read order) */
+        sort_pointer_array((void**) items, n_items, (compare_pointer_func_t) strcmp16);
+
+        /* Generate the leading directory inodes right before adding the first files, to the
+         * archive. Otherwise the cpio archive cannot be unpacked, since the leading dirs won't exist. */
+        err = pack_cpio_prefix(target_dir_prefix, dir_mode, &inode, &buffer, &buffer_size);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to pack cpio prefix: %m");
+
+        for (size_t i = 0; i < n_items; i++) {
+                _cleanup_free_ char *content = NULL;
+                size_t contentsize = 0;  /* avoid false maybe-uninitialized warning */
+
+                err = file_read(extra_dir, items[i], 0, 0, &content, &contentsize);
+                if (err != EFI_SUCCESS) {
+                        log_error_status(err, "Failed to read %ls, ignoring: %m", items[i]);
+                        continue;
+                }
+
+                err = pack_cpio_one(
+                                items[i],
+                                content, contentsize,
+                                target_dir_prefix,
+                                access_mode,
+                                &inode,
+                                &buffer, &buffer_size);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Failed to pack cpio file %ls: %m", dirent->FileName);
+        }
+
+        err = pack_cpio_trailer(&buffer, &buffer_size);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to pack cpio trailer: %m");
+
+        err = tpm_log_event(
+                        tpm_pcr, POINTER_TO_PHYSICAL_ADDRESS(buffer), buffer_size, tpm_description, ret_measured);
+        if (err != EFI_SUCCESS)
+                return log_error_status(
+                                err,
+                                "Unable to add cpio TPM measurement for PCR %u (%ls), ignoring: %m",
+                                tpm_pcr,
+                                tpm_description);
+
+        *ret_buffer = TAKE_PTR(buffer);
+        *ret_buffer_size = buffer_size;
+
+        return EFI_SUCCESS;
+
+nothing:
+        *ret_buffer = NULL;
+        *ret_buffer_size = 0;
+
+        if (ret_measured)
+                *ret_measured = false;
+
+        return EFI_SUCCESS;
+}
+
+EFI_STATUS pack_cpio_literal(
+                const void *data,
+                size_t data_size,
+                const char *target_dir_prefix,
+                const char16_t *target_filename,
+                uint32_t dir_mode,
+                uint32_t access_mode,
+                uint32_t tpm_pcr,
+                const char16_t *tpm_description,
+                void **ret_buffer,
+                size_t *ret_buffer_size,
+                bool *ret_measured) {
+
+        uint32_t inode = 1; /* inode counter, so that each item gets a new inode */
+        _cleanup_free_ void *buffer = NULL;
+        size_t buffer_size = 0;
+        EFI_STATUS err;
+
+        assert(data || data_size == 0);
+        assert(target_dir_prefix);
+        assert(target_filename);
+        assert(ret_buffer);
+        assert(ret_buffer_size);
+
+        /* Generate the leading directory inodes right before adding the first files, to the
+         * archive. Otherwise the cpio archive cannot be unpacked, since the leading dirs won't exist. */
+
+        err = pack_cpio_prefix(target_dir_prefix, dir_mode, &inode, &buffer, &buffer_size);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to pack cpio prefix: %m");
+
+        err = pack_cpio_one(
+                        target_filename,
+                        data, data_size,
+                        target_dir_prefix,
+                        access_mode,
+                        &inode,
+                        &buffer, &buffer_size);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to pack cpio file %ls: %m", target_filename);
+
+        err = pack_cpio_trailer(&buffer, &buffer_size);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to pack cpio trailer: %m");
+
+        err = tpm_log_event(
+                        tpm_pcr, POINTER_TO_PHYSICAL_ADDRESS(buffer), buffer_size, tpm_description, ret_measured);
+        if (err != EFI_SUCCESS)
+                return log_error_status(
+                                err,
+                                "Unable to add cpio TPM measurement for PCR %u (%ls), ignoring: %m",
+                                tpm_pcr,
+                                tpm_description);
+
+        *ret_buffer = TAKE_PTR(buffer);
+        *ret_buffer_size = buffer_size;
+
+        return EFI_SUCCESS;
+}
diff --git a/src/boot/efi/cpio.h b/src/boot/efi/cpio.h
new file mode 100644
index 0000000..afd689f
--- /dev/null
+++ b/src/boot/efi/cpio.h
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <efi.h>
+#include <stdbool.h>
+#include <uchar.h>
+
+EFI_STATUS pack_cpio(
+                EFI_LOADED_IMAGE_PROTOCOL *loaded_image,
+                const char16_t *dropin_dir,
+                const char16_t *match_suffix,
+                const char *target_dir_prefix,
+                uint32_t dir_mode,
+                uint32_t access_mode,
+                uint32_t tpm_pcr,
+                const char16_t *tpm_description,
+                void **ret_buffer,
+                size_t *ret_buffer_size,
+                bool *ret_measured);
+
+EFI_STATUS pack_cpio_literal(
+                const void *data,
+                size_t data_size,
+                const char *target_dir_prefix,
+                const char16_t *target_filename,
+                uint32_t dir_mode,
+                uint32_t access_mode,
+                uint32_t tpm_pcr,
+                const char16_t *tpm_description,
+                void **ret_buffer,
+                size_t *ret_buffer_size,
+                bool *ret_measured);
diff --git a/src/boot/efi/crc32.c b/src/boot/efi/crc32.c
deleted file mode 100644
index c9e5501..0000000
--- a/src/boot/efi/crc32.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* SPDX-License-Identifier: LicenseRef-crc32-no-restriction */
-/* This is copied from util-linux, which in turn copied in the version from Gary S. Brown */
-
-/*
- *  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
- *  code or tables extracted from it, as desired without restriction.
- *
- *  First, the polynomial itself and its table of feedback terms.  The
- *  polynomial is
- *  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
- *
- *  Note that we take it "backwards" and put the highest-order term in
- *  the lowest-order bit.  The X^32 term is "implied"; the LSB is the
- *  X^31 term, etc.  The X^0 term (usually shown as "+1") results in
- *  the MSB being 1.
- *
- *  Note that the usual hardware shift register implementation, which
- *  is what we're using (we're merely optimizing it by doing eight-bit
- *  chunks at a time) shifts bits into the lowest-order term.  In our
- *  implementation, that means shifting towards the right.  Why do we
- *  do it this way?  Because the calculated CRC must be transmitted in
- *  order from highest-order term to lowest-order term.  UARTs transmit
- *  characters in order from LSB to MSB.  By storing the CRC this way,
- *  we hand it to the UART in the order low-byte to high-byte; the UART
- *  sends each low-bit to high-bit; and the result is transmission bit
- *  by bit from highest- to lowest-order term without requiring any bit
- *  shuffling on our part.  Reception works similarly.
- *
- *  The feedback terms table consists of 256, 32-bit entries.  Notes
- *
- *      The table can be generated at runtime if desired; code to do so
- *      is shown later.  It might not be obvious, but the feedback
- *      terms simply represent the results of eight shift/xor opera-
- *      tions for all combinations of data and CRC register values.
- *
- *      The values must be right-shifted by eight bits by the "updcrc"
- *      logic; the shift must be unsigned (bring in zeroes).  On some
- *      hardware you could probably optimize the shift in assembler by
- *      using byte-swap instructions.
- *      polynomial $edb88320
- *
- */
-
-#include "crc32.h"
-
-static const UINT32 crc32_tab[] = {
-        0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
-        0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
-        0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
-        0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
-        0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
-        0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
-        0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
-        0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
-        0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
-        0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
-        0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
-        0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
-        0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
-        0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
-        0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
-        0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
-        0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
-        0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
-        0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
-        0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
-        0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
-        0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
-        0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
-        0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
-        0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
-        0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
-        0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
-        0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
-        0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
-        0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
-        0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
-        0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
-        0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
-        0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
-        0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
-        0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
-        0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
-        0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
-        0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
-        0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
-        0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
-        0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
-        0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
-        0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
-        0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
-        0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
-        0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
-        0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
-        0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
-        0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
-        0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
-        0x2d02ef8dL
-};
-
-static inline UINT32 crc32_add_char(UINT32 crc, UINT8 c) {
-        return crc32_tab[(crc ^ c) & 0xff] ^ (crc >> 8);
-}
-
-/*
- * This a generic crc32() function, it takes seed as an argument,
- * and does __not__ xor at the end. Then individual users can do
- * whatever they need.
- */
-UINT32 crc32(UINT32 seed, const VOID *buf, UINTN len) {
-        const UINT8 *p = buf;
-        UINT32 crc = seed;
-
-        while (len > 0) {
-                crc = crc32_add_char(crc, *p++);
-                len--;
-        }
-
-        return crc;
-}
-
-UINT32 crc32_exclude_offset(
-                UINT32 seed,
-                const VOID *buf,
-                UINTN len,
-                UINTN exclude_off,
-                UINTN exclude_len) {
-
-        const UINT8 *p = buf;
-        UINT32 crc = seed;
-
-        for (UINTN i = 0; i < len; i++) {
-                UINT8 x = *p++;
-
-                if (i >= exclude_off && i < exclude_off + exclude_len)
-                        x = 0;
-
-                crc = crc32_add_char(crc, x);
-        }
-
-        return crc;
-}
diff --git a/src/boot/efi/crc32.h b/src/boot/efi/crc32.h
deleted file mode 100644
index 3af543b..0000000
--- a/src/boot/efi/crc32.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* SPDX-License-Identifier: LicenseRef-crc32-no-restriction */
-#pragma once
-
-#include <efi.h>
-#include <efilib.h>
-
-UINT32 crc32(UINT32 seed, const VOID *buf, UINTN len);
-UINT32 crc32_exclude_offset(UINT32 seed, const VOID *buf, UINTN len, UINTN exclude_off, UINTN exclude_len);
diff --git a/src/boot/efi/devicetree.c b/src/boot/efi/devicetree.c
new file mode 100644
index 0000000..eef0898
--- /dev/null
+++ b/src/boot/efi/devicetree.c
@@ -0,0 +1,148 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <efi.h>
+
+#include "devicetree.h"
+#include "missing_efi.h"
+#include "util.h"
+
+#define FDT_V1_SIZE (7*4)
+
+static EFI_STATUS devicetree_allocate(struct devicetree_state *state, size_t size) {
+        size_t pages = DIV_ROUND_UP(size, EFI_PAGE_SIZE);
+        EFI_STATUS err;
+
+        assert(state);
+
+        err = BS->AllocatePages(AllocateAnyPages, EfiACPIReclaimMemory, pages, &state->addr);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        state->pages = pages;
+        return err;
+}
+
+static size_t devicetree_allocated(const struct devicetree_state *state) {
+        assert(state);
+        return state->pages * EFI_PAGE_SIZE;
+}
+
+static EFI_STATUS devicetree_fixup(struct devicetree_state *state, size_t len) {
+        EFI_DT_FIXUP_PROTOCOL *fixup;
+        size_t size;
+        EFI_STATUS err;
+
+        assert(state);
+
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_DT_FIXUP_PROTOCOL), NULL, (void **) &fixup);
+        if (err != EFI_SUCCESS)
+                return log_error_status(EFI_SUCCESS, "Could not locate device tree fixup protocol, skipping.");
+
+        size = devicetree_allocated(state);
+        err = fixup->Fixup(fixup, PHYSICAL_ADDRESS_TO_POINTER(state->addr), &size,
+                           EFI_DT_APPLY_FIXUPS | EFI_DT_RESERVE_MEMORY);
+        if (err == EFI_BUFFER_TOO_SMALL) {
+                EFI_PHYSICAL_ADDRESS oldaddr = state->addr;
+                size_t oldpages = state->pages;
+                void *oldptr = PHYSICAL_ADDRESS_TO_POINTER(state->addr);
+
+                err = devicetree_allocate(state, size);
+                if (err != EFI_SUCCESS)
+                        return err;
+
+                memcpy(PHYSICAL_ADDRESS_TO_POINTER(state->addr), oldptr, len);
+                err = BS->FreePages(oldaddr, oldpages);
+                if (err != EFI_SUCCESS)
+                        return err;
+
+                size = devicetree_allocated(state);
+                err = fixup->Fixup(fixup, PHYSICAL_ADDRESS_TO_POINTER(state->addr), &size,
+                                   EFI_DT_APPLY_FIXUPS | EFI_DT_RESERVE_MEMORY);
+        }
+
+        return err;
+}
+
+EFI_STATUS devicetree_install(struct devicetree_state *state, EFI_FILE *root_dir, char16_t *name) {
+        _cleanup_(file_closep) EFI_FILE *handle = NULL;
+        _cleanup_free_ EFI_FILE_INFO *info = NULL;
+        size_t len;
+        EFI_STATUS err;
+
+        assert(state);
+        assert(root_dir);
+        assert(name);
+
+        state->orig = find_configuration_table(MAKE_GUID_PTR(EFI_DTB_TABLE));
+        if (!state->orig)
+                return EFI_UNSUPPORTED;
+
+        err = root_dir->Open(root_dir, &handle, name, EFI_FILE_MODE_READ, EFI_FILE_READ_ONLY);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        err = get_file_info_harder(handle, &info, NULL);
+        if (err != EFI_SUCCESS)
+                return err;
+        if (info->FileSize < FDT_V1_SIZE || info->FileSize > 32 * 1024 * 1024)
+                /* 32MB device tree blob doesn't seem right */
+                return EFI_INVALID_PARAMETER;
+
+        len = info->FileSize;
+
+        err = devicetree_allocate(state, len);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        err = handle->Read(handle, &len, PHYSICAL_ADDRESS_TO_POINTER(state->addr));
+        if (err != EFI_SUCCESS)
+                return err;
+
+        err = devicetree_fixup(state, len);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        return BS->InstallConfigurationTable(
+                        MAKE_GUID_PTR(EFI_DTB_TABLE), PHYSICAL_ADDRESS_TO_POINTER(state->addr));
+}
+
+EFI_STATUS devicetree_install_from_memory(
+                struct devicetree_state *state, const void *dtb_buffer, size_t dtb_length) {
+
+        EFI_STATUS err;
+
+        assert(state);
+        assert(dtb_buffer && dtb_length > 0);
+
+        state->orig = find_configuration_table(MAKE_GUID_PTR(EFI_DTB_TABLE));
+        if (!state->orig)
+                return EFI_UNSUPPORTED;
+
+        err = devicetree_allocate(state, dtb_length);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        memcpy(PHYSICAL_ADDRESS_TO_POINTER(state->addr), dtb_buffer, dtb_length);
+
+        err = devicetree_fixup(state, dtb_length);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        return BS->InstallConfigurationTable(
+                        MAKE_GUID_PTR(EFI_DTB_TABLE), PHYSICAL_ADDRESS_TO_POINTER(state->addr));
+}
+
+void devicetree_cleanup(struct devicetree_state *state) {
+        EFI_STATUS err;
+
+        if (!state->pages)
+                return;
+
+        err = BS->InstallConfigurationTable(MAKE_GUID_PTR(EFI_DTB_TABLE), state->orig);
+        /* don't free the current device tree if we can't reinstate the old one */
+        if (err != EFI_SUCCESS)
+                return;
+
+        BS->FreePages(state->addr, state->pages);
+        state->pages = 0;
+}
diff --git a/src/boot/efi/devicetree.h b/src/boot/efi/devicetree.h
new file mode 100644
index 0000000..1a05c85
--- /dev/null
+++ b/src/boot/efi/devicetree.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <efi.h>
+#include <uchar.h>
+
+struct devicetree_state {
+        EFI_PHYSICAL_ADDRESS addr;
+        size_t pages;
+        void *orig;
+};
+
+EFI_STATUS devicetree_install(struct devicetree_state *state, EFI_FILE *root_dir, char16_t *name);
+EFI_STATUS devicetree_install_from_memory(
+                struct devicetree_state *state, const void *dtb_buffer, size_t dtb_length);
+void devicetree_cleanup(struct devicetree_state *state);
diff --git a/src/boot/efi/disk.c b/src/boot/efi/disk.c
index 122f08d..a7ad2dd 100644
--- a/src/boot/efi/disk.c
+++ b/src/boot/efi/disk.c
@@ -6,29 +6,54 @@
 #include "disk.h"
 #include "util.h"
 
-EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[static 37]) {
-        EFI_DEVICE_PATH *device_path;
+EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, char16_t uuid[static 37]) {
+        EFI_STATUS err;
+        EFI_DEVICE_PATH *dp;
 
         /* export the device path this image is started from */
-        device_path = DevicePathFromHandle(handle);
-        if (device_path) {
-                _cleanup_freepool_ EFI_DEVICE_PATH *paths = NULL;
 
-                paths = UnpackDevicePath(device_path);
-                for (EFI_DEVICE_PATH *path = paths; !IsDevicePathEnd(path); path = NextDevicePathNode(path)) {
-                        HARDDRIVE_DEVICE_PATH *drive;
+        if (!handle)
+                return EFI_NOT_FOUND;
 
-                        if (DevicePathType(path) != MEDIA_DEVICE_PATH)
-                                continue;
-                        if (DevicePathSubType(path) != MEDIA_HARDDRIVE_DP)
-                                continue;
-                        drive = (HARDDRIVE_DEVICE_PATH *)path;
-                        if (drive->SignatureType != SIGNATURE_TYPE_GUID)
-                                continue;
+        err = BS->HandleProtocol(handle, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL), (void **) &dp);
+        if (err != EFI_SUCCESS)
+                return err;
 
-                        GuidToString(uuid, (EFI_GUID *)&drive->Signature);
-                        return EFI_SUCCESS;
-                }
+        for (; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
+                if (DevicePathType(dp) != MEDIA_DEVICE_PATH)
+                        continue;
+                if (DevicePathSubType(dp) != MEDIA_HARDDRIVE_DP)
+                        continue;
+
+                /* The HD device path may be misaligned. */
+                HARDDRIVE_DEVICE_PATH hd;
+                memcpy(&hd, dp, MIN(sizeof(hd), (size_t) DevicePathNodeLength(dp)));
+
+                if (hd.SignatureType != SIGNATURE_TYPE_GUID)
+                        continue;
+
+                _cleanup_free_ char16_t *tmp = xasprintf(
+                                "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+                                hd.Signature[3],
+                                hd.Signature[2],
+                                hd.Signature[1],
+                                hd.Signature[0],
+
+                                hd.Signature[5],
+                                hd.Signature[4],
+                                hd.Signature[7],
+                                hd.Signature[6],
+
+                                hd.Signature[8],
+                                hd.Signature[9],
+                                hd.Signature[10],
+                                hd.Signature[11],
+                                hd.Signature[12],
+                                hd.Signature[13],
+                                hd.Signature[14],
+                                hd.Signature[15]);
+                strcpy16(uuid, tmp);
+                return EFI_SUCCESS;
         }
 
         return EFI_NOT_FOUND;
diff --git a/src/boot/efi/disk.h b/src/boot/efi/disk.h
index 8e10bb7..1a5a187 100644
--- a/src/boot/efi/disk.h
+++ b/src/boot/efi/disk.h
@@ -2,5 +2,6 @@
 #pragma once
 
 #include <efi.h>
+#include <uchar.h>
 
-EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[static 37]);
+EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, char16_t uuid[static 37]);
diff --git a/src/boot/efi/drivers.c b/src/boot/efi/drivers.c
new file mode 100644
index 0000000..7b41645
--- /dev/null
+++ b/src/boot/efi/drivers.c
@@ -0,0 +1,117 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <efi.h>
+#include <efilib.h>
+
+#include "drivers.h"
+#include "util.h"
+
+static EFI_STATUS load_one_driver(
+                EFI_HANDLE parent_image,
+                EFI_LOADED_IMAGE_PROTOCOL *loaded_image,
+                const char16_t *fname) {
+
+        _cleanup_(unload_imagep) EFI_HANDLE image = NULL;
+        _cleanup_free_ EFI_DEVICE_PATH *path = NULL;
+        _cleanup_free_ char16_t *spath = NULL;
+        EFI_STATUS err;
+
+        assert(parent_image);
+        assert(loaded_image);
+        assert(fname);
+
+        spath = xasprintf("\\EFI\\systemd\\drivers\\%ls", fname);
+        err = make_file_device_path(loaded_image->DeviceHandle, spath, &path);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error making file device path: %m");
+
+        err = BS->LoadImage(false, parent_image, path, NULL, 0, &image);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to load image %ls: %m", fname);
+
+        err = BS->HandleProtocol(image, MAKE_GUID_PTR(EFI_LOADED_IMAGE_PROTOCOL), (void **) &loaded_image);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to find protocol in driver image %ls: %m", fname);
+
+        if (loaded_image->ImageCodeType != EfiBootServicesCode &&
+            loaded_image->ImageCodeType != EfiRuntimeServicesCode)
+                return log_error("Image %ls is not a driver, refusing.", fname);
+
+        err = BS->StartImage(image, NULL, NULL);
+        if (err != EFI_SUCCESS) {
+                /* EFI_ABORTED signals an initializing driver. It uses this error code on success
+                 * so that it is unloaded after. */
+                if (err != EFI_ABORTED)
+                        log_error_status(err, "Failed to start image %ls: %m", fname);
+                return err;
+        }
+
+        TAKE_PTR(image);
+        return EFI_SUCCESS;
+}
+
+EFI_STATUS reconnect_all_drivers(void) {
+        _cleanup_free_ EFI_HANDLE *handles = NULL;
+        size_t n_handles = 0;
+        EFI_STATUS err;
+
+        /* Reconnects all handles, so that any loaded drivers can take effect. */
+
+        err = BS->LocateHandleBuffer(AllHandles, NULL, NULL, &n_handles, &handles);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to get list of handles: %m");
+
+        for (size_t i = 0; i < n_handles; i++)
+                /* Some firmware gives us some bogus handles (or they might become bad due to
+                 * reconnecting everything). Security policy may also prevent us from doing so too.
+                 * There is nothing we can realistically do on errors anyways, so just ignore them. */
+                (void) BS->ConnectController(handles[i], NULL, NULL, true);
+
+        return EFI_SUCCESS;
+}
+
+EFI_STATUS load_drivers(
+                EFI_HANDLE parent_image,
+                EFI_LOADED_IMAGE_PROTOCOL *loaded_image,
+                EFI_FILE *root_dir) {
+
+        _cleanup_(file_closep) EFI_FILE *drivers_dir = NULL;
+        _cleanup_free_ EFI_FILE_INFO *dirent = NULL;
+        size_t dirent_size = 0, n_succeeded = 0;
+        EFI_STATUS err;
+
+        err = open_directory(
+                        root_dir,
+                        u"\\EFI\\systemd\\drivers",
+                        &drivers_dir);
+        if (err == EFI_NOT_FOUND)
+                return EFI_SUCCESS;
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to open \\EFI\\systemd\\drivers: %m");
+
+        for (;;) {
+                err = readdir_harder(drivers_dir, &dirent, &dirent_size);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Failed to read extra directory of loaded image: %m");
+                if (!dirent) /* End of directory */
+                        break;
+
+                if (dirent->FileName[0] == '.')
+                        continue;
+                if (FLAGS_SET(dirent->Attribute, EFI_FILE_DIRECTORY))
+                        continue;
+                if (!endswith_no_case(dirent->FileName, EFI_MACHINE_TYPE_NAME u".efi"))
+                        continue;
+
+                err = load_one_driver(parent_image, loaded_image, dirent->FileName);
+                if (err != EFI_SUCCESS)
+                        continue;
+
+                n_succeeded++;
+        }
+
+        if (n_succeeded > 0)
+                (void) reconnect_all_drivers();
+
+        return EFI_SUCCESS;
+}
diff --git a/src/boot/efi/drivers.h b/src/boot/efi/drivers.h
new file mode 100644
index 0000000..4ad526e
--- /dev/null
+++ b/src/boot/efi/drivers.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <efi.h>
+
+EFI_STATUS reconnect_all_drivers(void);
+EFI_STATUS load_drivers(
+                EFI_HANDLE parent_image,
+                EFI_LOADED_IMAGE_PROTOCOL *loaded_image,
+                EFI_FILE *root_dir);
diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c
new file mode 100644
index 0000000..22923d6
--- /dev/null
+++ b/src/boot/efi/efi-string.c
@@ -0,0 +1,951 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <wchar.h>
+
+#include "efi-string.h"
+
+#if SD_BOOT
+#  include "missing_efi.h"
+#  include "util.h"
+#else
+#  include <stdlib.h>
+#  include "alloc-util.h"
+#  define xnew(t, n) ASSERT_SE_PTR(new(t, n))
+#  define xmalloc(n) ASSERT_SE_PTR(malloc(n))
+#endif
+
+/* String functions for both char and char16_t that should behave the same way as their respective
+ * counterpart in userspace. Where it makes sense, these accept NULL and do something sensible whereas
+ * userspace does not allow for this (strlen8(NULL) returns 0 like strlen_ptr(NULL) for example). To make it
+ * easier to tell in code which kind of string they work on, we use 8/16 suffixes. This also makes is easier
+ * to unit test them. */
+
+#define DEFINE_STRNLEN(type, name)             \
+        size_t name(const type *s, size_t n) { \
+                if (!s)                        \
+                        return 0;              \
+                                               \
+                size_t len = 0;                \
+                while (len < n && *s) {        \
+                        s++;                   \
+                        len++;                 \
+                }                              \
+                                               \
+                return len;                    \
+        }
+
+DEFINE_STRNLEN(char, strnlen8);
+DEFINE_STRNLEN(char16_t, strnlen16);
+
+#define TOLOWER(c)                                                \
+        ({                                                        \
+                typeof(c) _c = (c);                               \
+                (_c >= 'A' && _c <= 'Z') ? _c + ('a' - 'A') : _c; \
+        })
+
+#define DEFINE_STRTOLOWER(type, name)     \
+        void name(type *s) {              \
+                if (!s)                   \
+                        return;           \
+                for (; *s; s++)           \
+                        *s = TOLOWER(*s); \
+        }
+
+DEFINE_STRTOLOWER(char, strtolower8);
+DEFINE_STRTOLOWER(char16_t, strtolower16);
+
+#define DEFINE_STRNCASECMP(type, name, tolower)              \
+        int name(const type *s1, const type *s2, size_t n) { \
+                if (!s1 || !s2)                              \
+                        return CMP(s1, s2);                  \
+                                                             \
+                while (n > 0) {                              \
+                        type c1 = *s1, c2 = *s2;             \
+                        if (tolower) {                       \
+                                c1 = TOLOWER(c1);            \
+                                c2 = TOLOWER(c2);            \
+                        }                                    \
+                        if (!c1 || c1 != c2)                 \
+                                return CMP(c1, c2);          \
+                                                             \
+                        s1++;                                \
+                        s2++;                                \
+                        n--;                                 \
+                }                                            \
+                                                             \
+                return 0;                                    \
+        }
+
+DEFINE_STRNCASECMP(char, strncmp8, false);
+DEFINE_STRNCASECMP(char16_t, strncmp16, false);
+DEFINE_STRNCASECMP(char, strncasecmp8, true);
+DEFINE_STRNCASECMP(char16_t, strncasecmp16, true);
+
+#define DEFINE_STRCPY(type, name)                                     \
+        type *name(type * restrict dest, const type * restrict src) { \
+                type *ret = ASSERT_PTR(dest);                         \
+                                                                      \
+                if (!src) {                                           \
+                        *dest = '\0';                                 \
+                        return ret;                                   \
+                }                                                     \
+                                                                      \
+                while (*src) {                                        \
+                        *dest = *src;                                 \
+                        dest++;                                       \
+                        src++;                                        \
+                }                                                     \
+                                                                      \
+                *dest = '\0';                                         \
+                return ret;                                           \
+        }
+
+DEFINE_STRCPY(char, strcpy8);
+DEFINE_STRCPY(char16_t, strcpy16);
+
+#define DEFINE_STRCHR(type, name)                  \
+        type *name(const type *s, type c) {        \
+                if (!s)                            \
+                        return NULL;               \
+                                                   \
+                while (*s) {                       \
+                        if (*s == c)               \
+                                return (type *) s; \
+                        s++;                       \
+                }                                  \
+                                                   \
+                return NULL;                       \
+        }
+
+DEFINE_STRCHR(char, strchr8);
+DEFINE_STRCHR(char16_t, strchr16);
+
+#define DEFINE_STRNDUP(type, name, len_func)              \
+        type *name(const type *s, size_t n) {             \
+                if (!s)                                   \
+                        return NULL;                      \
+                                                          \
+                size_t len = len_func(s, n);              \
+                size_t size = len * sizeof(type);         \
+                                                          \
+                type *dup = xmalloc(size + sizeof(type)); \
+                if (size > 0)                             \
+                        memcpy(dup, s, size);             \
+                dup[len] = '\0';                          \
+                                                          \
+                return dup;                               \
+        }
+
+DEFINE_STRNDUP(char, xstrndup8, strnlen8);
+DEFINE_STRNDUP(char16_t, xstrndup16, strnlen16);
+
+static unsigned utf8_to_unichar(const char *utf8, size_t n, char32_t *c) {
+        char32_t unichar;
+        unsigned len;
+
+        assert(utf8);
+        assert(c);
+
+        if (!(utf8[0] & 0x80)) {
+                *c = utf8[0];
+                return 1;
+        } else if ((utf8[0] & 0xe0) == 0xc0) {
+                len = 2;
+                unichar = utf8[0] & 0x1f;
+        } else if ((utf8[0] & 0xf0) == 0xe0) {
+                len = 3;
+                unichar = utf8[0] & 0x0f;
+        } else if ((utf8[0] & 0xf8) == 0xf0) {
+                len = 4;
+                unichar = utf8[0] & 0x07;
+        } else if ((utf8[0] & 0xfc) == 0xf8) {
+                len = 5;
+                unichar = utf8[0] & 0x03;
+        } else if ((utf8[0] & 0xfe) == 0xfc) {
+                len = 6;
+                unichar = utf8[0] & 0x01;
+        } else {
+                *c = UINT32_MAX;
+                return 1;
+        }
+
+        if (len > n) {
+                *c = UINT32_MAX;
+                return len;
+        }
+
+        for (unsigned i = 1; i < len; i++) {
+                if ((utf8[i] & 0xc0) != 0x80) {
+                        *c = UINT32_MAX;
+                        return len;
+                }
+                unichar <<= 6;
+                unichar |= utf8[i] & 0x3f;
+        }
+
+        *c = unichar;
+        return len;
+}
+
+/* Convert UTF-8 to UCS-2, skipping any invalid or short byte sequences. */
+char16_t *xstrn8_to_16(const char *str8, size_t n) {
+        if (!str8 || n == 0)
+                return NULL;
+
+        size_t i = 0;
+        char16_t *str16 = xnew(char16_t, n + 1);
+
+        while (n > 0 && *str8 != '\0') {
+                char32_t unichar;
+
+                size_t utf8len = utf8_to_unichar(str8, n, &unichar);
+                str8 += utf8len;
+                n = LESS_BY(n, utf8len);
+
+                switch (unichar) {
+                case 0 ... 0xd7ffU:
+                case 0xe000U ... 0xffffU:
+                        str16[i++] = unichar;
+                        break;
+                }
+        }
+
+        str16[i] = '\0';
+        return str16;
+}
+
+static bool efi_fnmatch_prefix(const char16_t *p, const char16_t *h, const char16_t **ret_p, const char16_t **ret_h) {
+        assert(p);
+        assert(h);
+        assert(ret_p);
+        assert(ret_h);
+
+        for (;; p++, h++)
+                switch (*p) {
+                case '\0':
+                        /* End of pattern. Check that haystack is now empty. */
+                        return *h == '\0';
+
+                case '\\':
+                        p++;
+                        if (*p == '\0' || *p != *h)
+                                /* Trailing escape or no match. */
+                                return false;
+                        break;
+
+                case '?':
+                        if (*h == '\0')
+                                /* Early end of haystack. */
+                                return false;
+                        break;
+
+                case '*':
+                        /* Point ret_p at the remainder of the pattern. */
+                        while (*p == '*')
+                                p++;
+                        *ret_p = p;
+                        *ret_h = h;
+                        return true;
+
+                case '[':
+                        if (*h == '\0')
+                                /* Early end of haystack. */
+                                return false;
+
+                        bool first = true, can_range = true, match = false;
+                        for (;; first = false) {
+                                p++;
+                                if (*p == '\0')
+                                        return false;
+
+                                if (*p == '\\') {
+                                        p++;
+                                        if (*p == '\0')
+                                                return false;
+                                        if (*p == *h)
+                                                match = true;
+                                        can_range = true;
+                                        continue;
+                                }
+
+                                /* End of set unless it's the first char. */
+                                if (*p == ']' && !first)
+                                        break;
+
+                                /* Range pattern if '-' is not first or last in set. */
+                                if (*p == '-' && can_range && !first && *(p + 1) != ']') {
+                                        char16_t low = *(p - 1);
+                                        p++;
+                                        if (*p == '\\')
+                                                p++;
+                                        if (*p == '\0')
+                                                return false;
+
+                                        if (low <= *h && *h <= *p)
+                                                match = true;
+
+                                        /* Ranges cannot be chained: [a-c-f] == [-abcf] */
+                                        can_range = false;
+                                        continue;
+                                }
+
+                                if (*p == *h)
+                                        match = true;
+                                can_range = true;
+                        }
+
+                        if (!match)
+                                return false;
+                        break;
+
+                default:
+                        if (*p != *h)
+                                /* Single char mismatch. */
+                                return false;
+                }
+}
+
+/* Patterns are fnmatch-compatible (with reduced feature support). */
+bool efi_fnmatch(const char16_t *pattern, const char16_t *haystack) {
+        /* Patterns can be considered as simple patterns (without '*') concatenated by '*'. By doing so we
+         * simply have to make sure the very first simple pattern matches the start of haystack. Then we just
+         * look for the remaining simple patterns *somewhere* within the haystack (in order) as any extra
+         * characters in between would be matches by the '*'. We then only have to ensure that the very last
+         * simple pattern matches at the actual end of the haystack.
+         *
+         * This means we do not need to use backtracking which could have catastrophic runtimes with the
+         * right input data. */
+
+        for (bool first = true;;) {
+                const char16_t *pattern_tail = NULL, *haystack_tail = NULL;
+                bool match = efi_fnmatch_prefix(pattern, haystack, &pattern_tail, &haystack_tail);
+                if (first) {
+                        if (!match)
+                                /* Initial simple pattern must match. */
+                                return false;
+                        if (!pattern_tail)
+                                /* No '*' was in pattern, we can return early. */
+                                return true;
+                        first = false;
+                }
+
+                if (pattern_tail) {
+                        assert(match);
+                        pattern = pattern_tail;
+                        haystack = haystack_tail;
+                } else {
+                        /* If we have a match this must be at the end of the haystack. Note that
+                         * efi_fnmatch_prefix compares the NUL-bytes at the end, so we cannot match the end
+                         * of pattern in the middle of haystack). */
+                        if (match || *haystack == '\0')
+                                return match;
+
+                        /* Match one character using '*'. */
+                        haystack++;
+                }
+        }
+}
+
+#define DEFINE_PARSE_NUMBER(type, name)                                    \
+        bool name(const type *s, uint64_t *ret_u, const type **ret_tail) { \
+                assert(ret_u);                                             \
+                                                                           \
+                if (!s)                                                    \
+                        return false;                                      \
+                                                                           \
+                /* Need at least one digit. */                             \
+                if (*s < '0' || *s > '9')                                  \
+                        return false;                                      \
+                                                                           \
+                uint64_t u = 0;                                            \
+                while (*s >= '0' && *s <= '9') {                           \
+                        if (__builtin_mul_overflow(u, 10, &u))             \
+                                return false;                              \
+                        if (__builtin_add_overflow(u, *s - '0', &u))       \
+                                return false;                              \
+                        s++;                                               \
+                }                                                          \
+                                                                           \
+                if (!ret_tail && *s != '\0')                               \
+                        return false;                                      \
+                                                                           \
+                *ret_u = u;                                                \
+                if (ret_tail)                                              \
+                        *ret_tail = s;                                     \
+                return true;                                               \
+        }
+
+DEFINE_PARSE_NUMBER(char, parse_number8);
+DEFINE_PARSE_NUMBER(char16_t, parse_number16);
+
+static const char * const warn_table[] = {
+        [EFI_SUCCESS]               = "Success",
+#if SD_BOOT
+        [EFI_WARN_UNKNOWN_GLYPH]    = "Unknown glyph",
+        [EFI_WARN_DELETE_FAILURE]   = "Delete failure",
+        [EFI_WARN_WRITE_FAILURE]    = "Write failure",
+        [EFI_WARN_BUFFER_TOO_SMALL] = "Buffer too small",
+        [EFI_WARN_STALE_DATA]       = "Stale data",
+        [EFI_WARN_FILE_SYSTEM]      = "File system",
+        [EFI_WARN_RESET_REQUIRED]   = "Reset required",
+#endif
+};
+
+/* Errors have MSB set, remove it to keep the table compact. */
+#define NOERR(err) ((err) & ~EFI_ERROR_MASK)
+
+static const char * const err_table[] = {
+        [NOERR(EFI_ERROR_MASK)]           = "Error",
+        [NOERR(EFI_LOAD_ERROR)]           = "Load error",
+#if SD_BOOT
+        [NOERR(EFI_INVALID_PARAMETER)]    = "Invalid parameter",
+        [NOERR(EFI_UNSUPPORTED)]          = "Unsupported",
+        [NOERR(EFI_BAD_BUFFER_SIZE)]      = "Bad buffer size",
+        [NOERR(EFI_BUFFER_TOO_SMALL)]     = "Buffer too small",
+        [NOERR(EFI_NOT_READY)]            = "Not ready",
+        [NOERR(EFI_DEVICE_ERROR)]         = "Device error",
+        [NOERR(EFI_WRITE_PROTECTED)]      = "Write protected",
+        [NOERR(EFI_OUT_OF_RESOURCES)]     = "Out of resources",
+        [NOERR(EFI_VOLUME_CORRUPTED)]     = "Volume corrupt",
+        [NOERR(EFI_VOLUME_FULL)]          = "Volume full",
+        [NOERR(EFI_NO_MEDIA)]             = "No media",
+        [NOERR(EFI_MEDIA_CHANGED)]        = "Media changed",
+        [NOERR(EFI_NOT_FOUND)]            = "Not found",
+        [NOERR(EFI_ACCESS_DENIED)]        = "Access denied",
+        [NOERR(EFI_NO_RESPONSE)]          = "No response",
+        [NOERR(EFI_NO_MAPPING)]           = "No mapping",
+        [NOERR(EFI_TIMEOUT)]              = "Time out",
+        [NOERR(EFI_NOT_STARTED)]          = "Not started",
+        [NOERR(EFI_ALREADY_STARTED)]      = "Already started",
+        [NOERR(EFI_ABORTED)]              = "Aborted",
+        [NOERR(EFI_ICMP_ERROR)]           = "ICMP error",
+        [NOERR(EFI_TFTP_ERROR)]           = "TFTP error",
+        [NOERR(EFI_PROTOCOL_ERROR)]       = "Protocol error",
+        [NOERR(EFI_INCOMPATIBLE_VERSION)] = "Incompatible version",
+        [NOERR(EFI_SECURITY_VIOLATION)]   = "Security violation",
+        [NOERR(EFI_CRC_ERROR)]            = "CRC error",
+        [NOERR(EFI_END_OF_MEDIA)]         = "End of media",
+        [29]                              = "Reserved (29)",
+        [30]                              = "Reserved (30)",
+        [NOERR(EFI_END_OF_FILE)]          = "End of file",
+        [NOERR(EFI_INVALID_LANGUAGE)]     = "Invalid language",
+        [NOERR(EFI_COMPROMISED_DATA)]     = "Compromised data",
+        [NOERR(EFI_IP_ADDRESS_CONFLICT)]  = "IP address conflict",
+        [NOERR(EFI_HTTP_ERROR)]           = "HTTP error",
+#endif
+};
+
+static const char *status_to_string(EFI_STATUS status) {
+        if (status <= ELEMENTSOF(warn_table) - 1)
+                return warn_table[status];
+        if (status >= EFI_ERROR_MASK && status <= ((ELEMENTSOF(err_table) - 1) | EFI_ERROR_MASK))
+                return err_table[NOERR(status)];
+        return NULL;
+}
+
+typedef struct {
+        size_t padded_len; /* Field width in printf. */
+        size_t len;        /* Precision in printf. */
+        bool pad_zero;
+        bool align_left;
+        bool alternative_form;
+        bool long_arg;
+        bool longlong_arg;
+        bool have_field_width;
+
+        const char *str;
+        const wchar_t *wstr;
+
+        /* For numbers. */
+        bool is_signed;
+        bool lowercase;
+        int8_t base;
+        char sign_pad; /* For + and (space) flags. */
+} SpecifierContext;
+
+typedef struct {
+        char16_t stack_buf[128]; /* We use stack_buf first to avoid allocations in most cases. */
+        char16_t *dyn_buf;       /* Allocated buf or NULL if stack_buf is used. */
+        char16_t *buf;           /* Points to the current active buf. */
+        size_t n_buf;            /* Len of buf (in char16_t's, not bytes!). */
+        size_t n;                /* Used len of buf (in char16_t's). This is always <n_buf. */
+
+        EFI_STATUS status;
+        const char *format;
+        va_list ap;
+} FormatContext;
+
+static void grow_buf(FormatContext *ctx, size_t need) {
+        assert(ctx);
+
+        assert_se(!__builtin_add_overflow(ctx->n, need, &need));
+
+        if (need < ctx->n_buf)
+                return;
+
+        /* Greedily allocate if we can. */
+        if (__builtin_mul_overflow(need, 2, &ctx->n_buf))
+                ctx->n_buf = need;
+
+        /* We cannot use realloc here as ctx->buf may be ctx->stack_buf, which we cannot free. */
+        char16_t *new_buf = xnew(char16_t, ctx->n_buf);
+        memcpy(new_buf, ctx->buf, ctx->n * sizeof(*ctx->buf));
+
+        free(ctx->dyn_buf);
+        ctx->buf = ctx->dyn_buf = new_buf;
+}
+
+static void push_padding(FormatContext *ctx, char pad, size_t len) {
+        assert(ctx);
+        while (len > 0) {
+                len--;
+                ctx->buf[ctx->n++] = pad;
+        }
+}
+
+static bool push_str(FormatContext *ctx, SpecifierContext *sp) {
+        assert(ctx);
+        assert(sp);
+
+        sp->padded_len = LESS_BY(sp->padded_len, sp->len);
+
+        grow_buf(ctx, sp->padded_len + sp->len);
+
+        if (!sp->align_left)
+                push_padding(ctx, ' ', sp->padded_len);
+
+        /* In userspace unit tests we cannot just memcpy() the wide string. */
+        if (sp->wstr && sizeof(wchar_t) == sizeof(char16_t)) {
+                memcpy(ctx->buf + ctx->n, sp->wstr, sp->len * sizeof(*sp->wstr));
+                ctx->n += sp->len;
+        } else
+                for (size_t i = 0; i < sp->len; i++)
+                        ctx->buf[ctx->n++] = sp->str ? sp->str[i] : sp->wstr[i];
+
+        if (sp->align_left)
+                push_padding(ctx, ' ', sp->padded_len);
+
+        assert(ctx->n < ctx->n_buf);
+        return true;
+}
+
+static bool push_num(FormatContext *ctx, SpecifierContext *sp, uint64_t u) {
+        const char *digits = sp->lowercase ? "0123456789abcdef" : "0123456789ABCDEF";
+        char16_t tmp[32];
+        size_t n = 0;
+
+        assert(ctx);
+        assert(sp);
+        assert(IN_SET(sp->base, 10, 16));
+
+        /* "%.0u" prints nothing if value is 0. */
+        if (u == 0 && sp->len == 0)
+                return true;
+
+        if (sp->is_signed && (int64_t) u < 0) {
+                /* We cannot just do "u = -(int64_t)u" here because -INT64_MIN overflows. */
+
+                uint64_t rem = -((int64_t) u % sp->base);
+                u = (int64_t) u / -sp->base;
+                tmp[n++] = digits[rem];
+                sp->sign_pad = '-';
+        }
+
+        while (u > 0 || n == 0) {
+                uint64_t rem = u % sp->base;
+                u /= sp->base;
+                tmp[n++] = digits[rem];
+        }
+
+        /* Note that numbers never get truncated! */
+        size_t prefix = (sp->sign_pad != 0 ? 1 : 0) + (sp->alternative_form ? 2 : 0);
+        size_t number_len = prefix + MAX(n, sp->len);
+        grow_buf(ctx, MAX(sp->padded_len, number_len));
+
+        size_t padding = 0;
+        if (sp->pad_zero)
+                /* Leading zeroes go after the sign or 0x prefix. */
+                number_len = MAX(number_len, sp->padded_len);
+        else
+                padding = LESS_BY(sp->padded_len, number_len);
+
+        if (!sp->align_left)
+                push_padding(ctx, ' ', padding);
+
+        if (sp->sign_pad != 0)
+                ctx->buf[ctx->n++] = sp->sign_pad;
+        if (sp->alternative_form) {
+                ctx->buf[ctx->n++] = '0';
+                ctx->buf[ctx->n++] = sp->lowercase ? 'x' : 'X';
+        }
+
+        push_padding(ctx, '0', LESS_BY(number_len, n + prefix));
+
+        while (n > 0)
+                ctx->buf[ctx->n++] = tmp[--n];
+
+        if (sp->align_left)
+                push_padding(ctx, ' ', padding);
+
+        assert(ctx->n < ctx->n_buf);
+        return true;
+}
+
+/* This helps unit testing. */
+#if SD_BOOT
+#  define NULLSTR "(null)"
+#  define wcsnlen strnlen16
+#else
+#  define NULLSTR "(nil)"
+#endif
+
+static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) {
+        /* Parses one item from the format specifier in ctx and put the info into sp. If we are done with
+         * this specifier returns true, otherwise this function should be called again. */
+
+        /* This implementation assumes 32bit ints. Also note that all types smaller than int are promoted to
+         * int in vararg functions, which is why we fetch only ints for any such types. The compiler would
+         * otherwise warn about fetching smaller types. */
+        assert_cc(sizeof(int) == 4);
+        assert_cc(sizeof(wchar_t) <= sizeof(int));
+        assert_cc(sizeof(intmax_t) <= sizeof(long long));
+
+        assert(ctx);
+        assert(sp);
+
+        switch (*ctx->format) {
+        case '#':
+                sp->alternative_form = true;
+                return false;
+        case '.':
+                sp->have_field_width = true;
+                return false;
+        case '-':
+                sp->align_left = true;
+                return false;
+        case '+':
+        case ' ':
+                sp->sign_pad = *ctx->format;
+                return false;
+
+        case '0':
+                if (!sp->have_field_width) {
+                        sp->pad_zero = true;
+                        return false;
+                }
+
+                /* If field width has already been provided then 0 is part of precision (%.0s). */
+                _fallthrough_;
+
+        case '*':
+        case '1' ... '9': {
+                int64_t i;
+
+                if (*ctx->format == '*')
+                        i = va_arg(ctx->ap, int);
+                else {
+                        uint64_t u;
+                        if (!parse_number8(ctx->format, &u, &ctx->format) || u > INT_MAX)
+                                assert_not_reached();
+                        ctx->format--; /* Point it back to the last digit. */
+                        i = u;
+                }
+
+                if (sp->have_field_width) {
+                        /* Negative precision is ignored. */
+                        if (i >= 0)
+                                sp->len = (size_t) i;
+                } else {
+                        /* Negative field width is treated as positive field width with '-' flag. */
+                        if (i < 0) {
+                                i *= -1;
+                                sp->align_left = true;
+                        }
+                        sp->padded_len = i;
+                }
+
+                return false;
+        }
+
+        case 'h':
+                if (*(ctx->format + 1) == 'h')
+                        ctx->format++;
+                /* char/short gets promoted to int, nothing to do here. */
+                return false;
+
+        case 'l':
+                if (*(ctx->format + 1) == 'l') {
+                        ctx->format++;
+                        sp->longlong_arg = true;
+                } else
+                        sp->long_arg = true;
+                return false;
+
+        case 'z':
+                sp->long_arg = sizeof(size_t) == sizeof(long);
+                sp->longlong_arg = !sp->long_arg && sizeof(size_t) == sizeof(long long);
+                return false;
+
+        case 'j':
+                sp->long_arg = sizeof(intmax_t) == sizeof(long);
+                sp->longlong_arg = !sp->long_arg && sizeof(intmax_t) == sizeof(long long);
+                return false;
+
+        case 't':
+                sp->long_arg = sizeof(ptrdiff_t) == sizeof(long);
+                sp->longlong_arg = !sp->long_arg && sizeof(ptrdiff_t) == sizeof(long long);
+                return false;
+
+        case '%':
+                sp->str = "%";
+                sp->len = 1;
+                return push_str(ctx, sp);
+
+        case 'c':
+                sp->wstr = &(wchar_t){ va_arg(ctx->ap, int) };
+                sp->len = 1;
+                return push_str(ctx, sp);
+
+        case 's':
+                if (sp->long_arg) {
+                        sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)";
+                        sp->len = wcsnlen(sp->wstr, sp->len);
+                } else {
+                        sp->str = va_arg(ctx->ap, const char *) ?: "(null)";
+                        sp->len = strnlen8(sp->str, sp->len);
+                }
+                return push_str(ctx, sp);
+
+        case 'd':
+        case 'i':
+        case 'u':
+        case 'x':
+        case 'X':
+                sp->lowercase = *ctx->format == 'x';
+                sp->is_signed = IN_SET(*ctx->format, 'd', 'i');
+                sp->base = IN_SET(*ctx->format, 'x', 'X') ? 16 : 10;
+                if (sp->len == SIZE_MAX)
+                        sp->len = 1;
+
+                uint64_t v;
+                if (sp->longlong_arg)
+                        v = sp->is_signed ? (uint64_t) va_arg(ctx->ap, long long) :
+                                            va_arg(ctx->ap, unsigned long long);
+                else if (sp->long_arg)
+                        v = sp->is_signed ? (uint64_t) va_arg(ctx->ap, long) : va_arg(ctx->ap, unsigned long);
+                else
+                        v = sp->is_signed ? (uint64_t) va_arg(ctx->ap, int) : va_arg(ctx->ap, unsigned);
+
+                return push_num(ctx, sp, v);
+
+        case 'p': {
+                const void *ptr = va_arg(ctx->ap, const void *);
+                if (!ptr) {
+                        sp->str = NULLSTR;
+                        sp->len = STRLEN(NULLSTR);
+                        return push_str(ctx, sp);
+                }
+
+                sp->base = 16;
+                sp->lowercase = true;
+                sp->alternative_form = true;
+                sp->len = 0; /* Precision is ignored for %p. */
+                return push_num(ctx, sp, (uintptr_t) ptr);
+        }
+
+        case 'm': {
+                sp->str = status_to_string(ctx->status);
+                if (sp->str) {
+                        sp->len = strlen8(sp->str);
+                        return push_str(ctx, sp);
+                }
+
+                sp->base = 16;
+                sp->lowercase = true;
+                sp->alternative_form = true;
+                sp->len = 0;
+                return push_num(ctx, sp, ctx->status);
+        }
+
+        default:
+                assert_not_reached();
+        }
+}
+
+/* printf_internal is largely compatible to userspace vasprintf. Any features omitted should trigger asserts.
+ *
+ * Supported:
+ *  - Flags: #, 0, +, -, space
+ *  - Lengths: h, hh, l, ll, z, j, t
+ *  - Specifiers: %, c, s, u, i, d, x, X, p, m
+ *  - Precision and width (inline or as int arg using *)
+ *
+ * Notable differences:
+ *  - Passing NULL to %s is permitted and will print "(null)"
+ *  - %p will also use "(null)"
+ *  - The provided EFI_STATUS is used for %m instead of errno
+ *  - "\n" is translated to "\r\n" */
+_printf_(2, 0) static char16_t *printf_internal(EFI_STATUS status, const char *format, va_list ap, bool ret) {
+        assert(format);
+
+        FormatContext ctx = {
+                .buf = ctx.stack_buf,
+                .n_buf = ELEMENTSOF(ctx.stack_buf),
+                .format = format,
+                .status = status,
+        };
+
+        /* We cannot put this into the struct without making a copy. */
+        va_copy(ctx.ap, ap);
+
+        while (*ctx.format != '\0') {
+                SpecifierContext sp = { .len = SIZE_MAX };
+
+                switch (*ctx.format) {
+                case '%':
+                        ctx.format++;
+                        while (!handle_format_specifier(&ctx, &sp))
+                                ctx.format++;
+                        ctx.format++;
+                        break;
+                case '\n':
+                        ctx.format++;
+                        sp.str = "\r\n";
+                        sp.len = 2;
+                        push_str(&ctx, &sp);
+                        break;
+                default:
+                        sp.str = ctx.format++;
+                        while (!IN_SET(*ctx.format, '%', '\n', '\0'))
+                                ctx.format++;
+                        sp.len = ctx.format - sp.str;
+                        push_str(&ctx, &sp);
+                }
+        }
+
+        va_end(ctx.ap);
+
+        assert(ctx.n < ctx.n_buf);
+        ctx.buf[ctx.n++] = '\0';
+
+        if (ret) {
+                if (ctx.dyn_buf)
+                        return TAKE_PTR(ctx.dyn_buf);
+
+                char16_t *ret_buf = xnew(char16_t, ctx.n);
+                memcpy(ret_buf, ctx.buf, ctx.n * sizeof(*ctx.buf));
+                return ret_buf;
+        }
+
+#if SD_BOOT
+        ST->ConOut->OutputString(ST->ConOut, ctx.buf);
+#endif
+
+        return mfree(ctx.dyn_buf);
+}
+
+void printf_status(EFI_STATUS status, const char *format, ...) {
+        va_list ap;
+        va_start(ap, format);
+        printf_internal(status, format, ap, false);
+        va_end(ap);
+}
+
+void vprintf_status(EFI_STATUS status, const char *format, va_list ap) {
+        printf_internal(status, format, ap, false);
+}
+
+char16_t *xasprintf_status(EFI_STATUS status, const char *format, ...) {
+        va_list ap;
+        va_start(ap, format);
+        char16_t *ret = printf_internal(status, format, ap, true);
+        va_end(ap);
+        return ret;
+}
+
+char16_t *xvasprintf_status(EFI_STATUS status, const char *format, va_list ap) {
+        return printf_internal(status, format, ap, true);
+}
+
+#if SD_BOOT
+/* To provide the actual implementation for these we need to remove the redirection to the builtins. */
+#  undef memcmp
+#  undef memcpy
+#  undef memset
+#else
+/* And for userspace unit testing we need to give them an efi_ prefix. */
+#  define memcmp efi_memcmp
+#  define memcpy efi_memcpy
+#  define memset efi_memset
+#endif
+
+_used_ int memcmp(const void *p1, const void *p2, size_t n) {
+        const uint8_t *up1 = p1, *up2 = p2;
+        int r;
+
+        if (!p1 || !p2)
+                return CMP(p1, p2);
+
+        while (n > 0) {
+                r = CMP(*up1, *up2);
+                if (r != 0)
+                        return r;
+
+                up1++;
+                up2++;
+                n--;
+        }
+
+        return 0;
+}
+
+_used_ void *memcpy(void * restrict dest, const void * restrict src, size_t n) {
+        if (!dest || !src || n == 0)
+                return dest;
+
+#if SD_BOOT
+        /* The firmware-provided memcpy is likely optimized, so use that. The function is guaranteed to be
+         * available by the UEFI spec. We still make it depend on the boot services pointer being set just in
+         * case the compiler emits a call before it is available. */
+        if (_likely_(BS)) {
+                BS->CopyMem(dest, (void *) src, n);
+                return dest;
+        }
+#endif
+
+        uint8_t *d = dest;
+        const uint8_t *s = src;
+
+        while (n > 0) {
+                *d = *s;
+                d++;
+                s++;
+                n--;
+        }
+
+        return dest;
+}
+
+_used_ void *memset(void *p, int c, size_t n) {
+        if (!p || n == 0)
+                return p;
+
+#if SD_BOOT
+        /* See comment in efi_memcpy. Note that the signature has c and n swapped! */
+        if (_likely_(BS)) {
+                BS->SetMem(p, n, c);
+                return p;
+        }
+#endif
+
+        uint8_t *q = p;
+        while (n > 0) {
+                *q = c;
+                q++;
+                n--;
+        }
+
+        return p;
+}
diff --git a/src/boot/efi/efi-string.h b/src/boot/efi/efi-string.h
new file mode 100644
index 0000000..2a28db3
--- /dev/null
+++ b/src/boot/efi/efi-string.h
@@ -0,0 +1,159 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <uchar.h>
+
+#include "macro-fundamental.h"
+
+size_t strnlen8(const char *s, size_t n);
+size_t strnlen16(const char16_t *s, size_t n);
+
+static inline size_t strlen8(const char *s) {
+        return strnlen8(s, SIZE_MAX);
+}
+
+static inline size_t strlen16(const char16_t *s) {
+        return strnlen16(s, SIZE_MAX);
+}
+
+static inline size_t strsize8(const char *s) {
+        return s ? (strlen8(s) + 1) * sizeof(*s) : 0;
+}
+
+static inline size_t strsize16(const char16_t *s) {
+        return s ? (strlen16(s) + 1) * sizeof(*s) : 0;
+}
+
+void strtolower8(char *s);
+void strtolower16(char16_t *s);
+
+int strncmp8(const char *s1, const char *s2, size_t n);
+int strncmp16(const char16_t *s1, const char16_t *s2, size_t n);
+int strncasecmp8(const char *s1, const char *s2, size_t n);
+int strncasecmp16(const char16_t *s1, const char16_t *s2, size_t n);
+
+static inline int strcmp8(const char *s1, const char *s2) {
+        return strncmp8(s1, s2, SIZE_MAX);
+}
+
+static inline int strcmp16(const char16_t *s1, const char16_t *s2) {
+        return strncmp16(s1, s2, SIZE_MAX);
+}
+
+static inline int strcasecmp8(const char *s1, const char *s2) {
+        return strncasecmp8(s1, s2, SIZE_MAX);
+}
+
+static inline int strcasecmp16(const char16_t *s1, const char16_t *s2) {
+        return strncasecmp16(s1, s2, SIZE_MAX);
+}
+
+static inline bool strneq8(const char *s1, const char *s2, size_t n) {
+        return strncmp8(s1, s2, n) == 0;
+}
+
+static inline bool strneq16(const char16_t *s1, const char16_t *s2, size_t n) {
+        return strncmp16(s1, s2, n) == 0;
+}
+
+static inline bool streq8(const char *s1, const char *s2) {
+        return strcmp8(s1, s2) == 0;
+}
+
+static inline bool streq16(const char16_t *s1, const char16_t *s2) {
+        return strcmp16(s1, s2) == 0;
+}
+
+static inline int strncaseeq8(const char *s1, const char *s2, size_t n) {
+        return strncasecmp8(s1, s2, n) == 0;
+}
+
+static inline int strncaseeq16(const char16_t *s1, const char16_t *s2, size_t n) {
+        return strncasecmp16(s1, s2, n) == 0;
+}
+
+static inline bool strcaseeq8(const char *s1, const char *s2) {
+        return strcasecmp8(s1, s2) == 0;
+}
+
+static inline bool strcaseeq16(const char16_t *s1, const char16_t *s2) {
+        return strcasecmp16(s1, s2) == 0;
+}
+
+char *strcpy8(char * restrict dest, const char * restrict src);
+char16_t *strcpy16(char16_t * restrict dest, const char16_t * restrict src);
+
+char *strchr8(const char *s, char c);
+char16_t *strchr16(const char16_t *s, char16_t c);
+
+char *xstrndup8(const char *s, size_t n);
+char16_t *xstrndup16(const char16_t *s, size_t n);
+
+static inline char *xstrdup8(const char *s) {
+        return xstrndup8(s, SIZE_MAX);
+}
+
+static inline char16_t *xstrdup16(const char16_t *s) {
+        return xstrndup16(s, SIZE_MAX);
+}
+
+char16_t *xstrn8_to_16(const char *str8, size_t n);
+static inline char16_t *xstr8_to_16(const char *str8) {
+        return xstrn8_to_16(str8, strlen8(str8));
+}
+
+bool efi_fnmatch(const char16_t *pattern, const char16_t *haystack);
+
+bool parse_number8(const char *s, uint64_t *ret_u, const char **ret_tail);
+bool parse_number16(const char16_t *s, uint64_t *ret_u, const char16_t **ret_tail);
+
+typedef size_t EFI_STATUS;
+
+#if !SD_BOOT
+/* Provide these for unit testing. */
+enum {
+        EFI_ERROR_MASK = ((EFI_STATUS) 1 << (sizeof(EFI_STATUS) * CHAR_BIT - 1)),
+        EFI_SUCCESS = 0,
+        EFI_LOAD_ERROR = 1 | EFI_ERROR_MASK,
+};
+#endif
+
+#ifdef __clang__
+#  define _gnu_printf_(a, b) _printf_(a, b)
+#else
+#  define _gnu_printf_(a, b) __attribute__((format(gnu_printf, a, b)))
+#endif
+
+_gnu_printf_(2, 3) void printf_status(EFI_STATUS status, const char *format, ...);
+_gnu_printf_(2, 0) void vprintf_status(EFI_STATUS status, const char *format, va_list ap);
+_gnu_printf_(2, 3) _warn_unused_result_ char16_t *xasprintf_status(EFI_STATUS status, const char *format, ...);
+_gnu_printf_(2, 0) _warn_unused_result_ char16_t *xvasprintf_status(EFI_STATUS status, const char *format, va_list ap);
+
+#if SD_BOOT
+#  define printf(...) printf_status(EFI_SUCCESS, __VA_ARGS__)
+#  define xasprintf(...) xasprintf_status(EFI_SUCCESS, __VA_ARGS__)
+
+/* The compiler normally has knowledge about standard functions such as memcmp, but this is not the case when
+ * compiling with -ffreestanding. By referring to builtins, the compiler can check arguments and do
+ * optimizations again. Note that we still need to provide implementations as the compiler is free to not
+ * inline its own implementation and instead issue a library call. */
+#  define memcmp __builtin_memcmp
+#  define memcpy __builtin_memcpy
+#  define memset __builtin_memset
+
+static inline void *mempcpy(void * restrict dest, const void * restrict src, size_t n) {
+        if (!dest || !src || n == 0)
+                return dest;
+        memcpy(dest, src, n);
+        return (uint8_t *) dest + n;
+}
+
+#else
+/* For unit testing. */
+int efi_memcmp(const void *p1, const void *p2, size_t n);
+void *efi_memcpy(void * restrict dest, const void * restrict src, size_t n);
+void *efi_memset(void *p, int c, size_t n);
+#endif
diff --git a/src/boot/efi/fuzz-bcd.c b/src/boot/efi/fuzz-bcd.c
new file mode 100644
index 0000000..297b71f
--- /dev/null
+++ b/src/boot/efi/fuzz-bcd.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "bcd.h"
+#include "fuzz.h"
+#include "utf8.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        _cleanup_free_ void *p = NULL;
+
+        /* This limit was borrowed from src/boot/efi/boot.c */
+        if (outside_size_range(size, 0, 100*1024))
+                return 0;
+
+        p = memdup(data, size);
+        assert_se(p);
+
+        char16_t *title = get_bcd_title(p, size);
+        /* If we get something, it must be NUL-terminated, but an empty string is still valid! */
+        DO_NOT_OPTIMIZE(title && char16_strlen(title));
+        return 0;
+}
diff --git a/src/boot/efi/fuzz-efi-printf.c b/src/boot/efi/fuzz-efi-printf.c
new file mode 100644
index 0000000..218a427
--- /dev/null
+++ b/src/boot/efi/fuzz-efi-printf.c
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "efi-string.h"
+#include "fuzz.h"
+#include "utf8.h"
+
+typedef struct {
+        EFI_STATUS status;
+        int16_t field_width;
+        int16_t precision;
+        const void *ptr;
+        char c;
+        unsigned char uchar;
+        signed char schar;
+        unsigned short ushort;
+        signed short sshort;
+        unsigned int uint;
+        signed int sint;
+        unsigned long ulong;
+        signed long slong;
+        unsigned long long ulonglong;
+        signed long long slonglong;
+        size_t size;
+        ssize_t ssize;
+        intmax_t intmax;
+        uintmax_t uintmax;
+        ptrdiff_t ptrdiff;
+        char str[];
+} Input;
+
+#define PRINTF_ONE(...)                                                        \
+        ({                                                                     \
+                _cleanup_free_ char16_t *_ret = xasprintf_status(__VA_ARGS__); \
+                DO_NOT_OPTIMIZE(_ret);                                         \
+        })
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        if (outside_size_range(size, sizeof(Input), 1024 * 1024))
+                return 0;
+
+        const Input *i = (const Input *) data;
+        size_t len = size - offsetof(Input, str);
+
+        PRINTF_ONE(i->status, "%*.*s", i->field_width, (int) len, i->str);
+        PRINTF_ONE(i->status, "%*.*ls", i->field_width, (int) (len / sizeof(wchar_t)), (const wchar_t *) i->str);
+
+        PRINTF_ONE(i->status, "%% %*.*m", i->field_width, i->precision);
+        PRINTF_ONE(i->status, "%*p", i->field_width, i->ptr);
+        PRINTF_ONE(i->status, "%*c %12340c %56789c", i->field_width, i->c, i->c, i->c);
+
+        PRINTF_ONE(i->status, "%*.*hhu", i->field_width, i->precision, i->uchar);
+        PRINTF_ONE(i->status, "%*.*hhi", i->field_width, i->precision, i->schar);
+        PRINTF_ONE(i->status, "%*.*hu", i->field_width, i->precision, i->ushort);
+        PRINTF_ONE(i->status, "%*.*hi", i->field_width, i->precision, i->sshort);
+        PRINTF_ONE(i->status, "%*.*u", i->field_width, i->precision, i->uint);
+        PRINTF_ONE(i->status, "%*.*i", i->field_width, i->precision, i->sint);
+        PRINTF_ONE(i->status, "%*.*lu", i->field_width, i->precision, i->ulong);
+        PRINTF_ONE(i->status, "%*.*li", i->field_width, i->precision, i->slong);
+        PRINTF_ONE(i->status, "%*.*llu", i->field_width, i->precision, i->ulonglong);
+        PRINTF_ONE(i->status, "%*.*lli", i->field_width, i->precision, i->slonglong);
+
+        PRINTF_ONE(i->status, "%+*.*hhi", i->field_width, i->precision, i->schar);
+        PRINTF_ONE(i->status, "%-*.*hi", i->field_width, i->precision, i->sshort);
+        PRINTF_ONE(i->status, "% *.*i", i->field_width, i->precision, i->sint);
+        PRINTF_ONE(i->status, "%0*li", i->field_width, i->slong);
+        PRINTF_ONE(i->status, "%#*.*llx", i->field_width, i->precision, i->ulonglong);
+
+        PRINTF_ONE(i->status, "%-*.*zx", i->field_width, i->precision, i->size);
+        PRINTF_ONE(i->status, "% *.*zi", i->field_width, i->precision, i->ssize);
+        PRINTF_ONE(i->status, "%0*ji", i->field_width, i->intmax);
+        PRINTF_ONE(i->status, "%#0*jX", i->field_width, i->uintmax);
+        PRINTF_ONE(i->status, "%*.*ti", i->field_width, i->precision, i->ptrdiff);
+
+        return 0;
+}
diff --git a/src/boot/efi/fuzz-efi-string.c b/src/boot/efi/fuzz-efi-string.c
new file mode 100644
index 0000000..3c0f0f3
--- /dev/null
+++ b/src/boot/efi/fuzz-efi-string.c
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "efi-string.h"
+#include "fuzz.h"
+#include "utf8.h"
+
+static char16_t *memdup_str16(const uint8_t *data, size_t size) {
+        char16_t *ret = memdup(data, size);
+        assert_se(ret);
+        ret[size / sizeof(char16_t) - 1] = '\0';
+        return ret;
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        if (outside_size_range(size, sizeof(size_t), 64 * 1024))
+                return 0;
+
+        size_t len, len2;
+        memcpy(&len, data, sizeof(len));
+        data += sizeof(len);
+        size -= sizeof(len);
+
+        len2 = size - len;
+        if (len > size || len < sizeof(char16_t) || len2 < sizeof(char16_t))
+                return 0;
+
+        const char *tail8 = NULL;
+        _cleanup_free_ char *str8 = ASSERT_SE_PTR(memdup_suffix0(data, size));
+        DO_NOT_OPTIMIZE(parse_number8(str8, &(uint64_t){ 0 }, size % 2 == 0 ? NULL : &tail8));
+
+        const char16_t *tail16 = NULL;
+        _cleanup_free_ char16_t *str16 = memdup_str16(data, size);
+        DO_NOT_OPTIMIZE(parse_number16(str16, &(uint64_t){ 0 }, size % 2 == 0 ? NULL : &tail16));
+
+        _cleanup_free_ char16_t *pattern = memdup_str16(data, len), *haystack = memdup_str16(data + len, len2);
+        DO_NOT_OPTIMIZE(efi_fnmatch(pattern, haystack));
+
+        return 0;
+}
diff --git a/src/boot/efi/graphics.c b/src/boot/efi/graphics.c
index ddfe68c..d68123d 100644
--- a/src/boot/efi/graphics.c
+++ b/src/boot/efi/graphics.c
@@ -8,44 +8,10 @@
 #include <efilib.h>
 
 #include "graphics.h"
+#include "missing_efi.h"
 #include "util.h"
 
-#define EFI_CONSOLE_CONTROL_GUID \
-        &(EFI_GUID) { 0xf42f7782, 0x12e, 0x4c12, { 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21 } }
-
-EFI_STATUS graphics_mode(BOOLEAN on) {
-
-        struct _EFI_CONSOLE_CONTROL_PROTOCOL;
-
-        typedef enum {
-                EfiConsoleControlScreenText,
-                EfiConsoleControlScreenGraphics,
-                EfiConsoleControlScreenMaxValue,
-        } EFI_CONSOLE_CONTROL_SCREEN_MODE;
-
-        typedef EFI_STATUS (EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE)(
-                struct _EFI_CONSOLE_CONTROL_PROTOCOL *This,
-                EFI_CONSOLE_CONTROL_SCREEN_MODE *Mode,
-                BOOLEAN *UgaExists,
-                BOOLEAN *StdInLocked
-        );
-
-        typedef EFI_STATUS (EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE)(
-                struct _EFI_CONSOLE_CONTROL_PROTOCOL *This,
-                EFI_CONSOLE_CONTROL_SCREEN_MODE Mode
-        );
-
-        typedef EFI_STATUS (EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN)(
-                struct _EFI_CONSOLE_CONTROL_PROTOCOL *This,
-                CHAR16 *Password
-        );
-
-        typedef struct _EFI_CONSOLE_CONTROL_PROTOCOL {
-                EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE GetMode;
-                EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE SetMode;
-                EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN LockStdIn;
-        } EFI_CONSOLE_CONTROL_PROTOCOL;
-
+EFI_STATUS graphics_mode(bool on) {
         EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl = NULL;
         EFI_CONSOLE_CONTROL_SCREEN_MODE new;
         EFI_CONSOLE_CONTROL_SCREEN_MODE current;
@@ -53,25 +19,26 @@
         BOOLEAN stdin_locked;
         EFI_STATUS err;
 
-        err = LibLocateProtocol(EFI_CONSOLE_CONTROL_GUID, (VOID **)&ConsoleControl);
-        if (EFI_ERROR(err))
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_CONSOLE_CONTROL), NULL, (void **) &ConsoleControl);
+        if (err != EFI_SUCCESS)
                 /* console control protocol is nonstandard and might not exist. */
                 return err == EFI_NOT_FOUND ? EFI_SUCCESS : err;
 
         /* check current mode */
-        err = uefi_call_wrapper(ConsoleControl->GetMode, 4, ConsoleControl, &current, &uga_exists, &stdin_locked);
-        if (EFI_ERROR(err))
+        err = ConsoleControl->GetMode(ConsoleControl, &current, &uga_exists, &stdin_locked);
+        if (err != EFI_SUCCESS)
                 return err;
 
         /* do not touch the mode */
-        new  = on ? EfiConsoleControlScreenGraphics : EfiConsoleControlScreenText;
+        new = on ? EfiConsoleControlScreenGraphics : EfiConsoleControlScreenText;
         if (new == current)
                 return EFI_SUCCESS;
 
-        err = uefi_call_wrapper(ConsoleControl->SetMode, 2, ConsoleControl, new);
+        log_wait();
+        err = ConsoleControl->SetMode(ConsoleControl, new);
 
         /* some firmware enables the cursor when switching modes */
-        uefi_call_wrapper(ST->ConOut->EnableCursor, 2, ST->ConOut, FALSE);
+        ST->ConOut->EnableCursor(ST->ConOut, false);
 
         return err;
 }
diff --git a/src/boot/efi/graphics.h b/src/boot/efi/graphics.h
index 96f25d8..9dadd39 100644
--- a/src/boot/efi/graphics.h
+++ b/src/boot/efi/graphics.h
@@ -6,5 +6,6 @@
 #pragma once
 
 #include <efi.h>
+#include <stdbool.h>
 
-EFI_STATUS graphics_mode(BOOLEAN on);
+EFI_STATUS graphics_mode(bool on);
diff --git a/src/boot/efi/initrd.c b/src/boot/efi/initrd.c
new file mode 100644
index 0000000..6d36243
--- /dev/null
+++ b/src/boot/efi/initrd.c
@@ -0,0 +1,144 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <efi.h>
+#include <efilib.h>
+
+#include "initrd.h"
+#include "macro-fundamental.h"
+#include "missing_efi.h"
+#include "util.h"
+
+/* extend LoadFileProtocol */
+struct initrd_loader {
+        EFI_LOAD_FILE_PROTOCOL load_file;
+        const void *address;
+        size_t length;
+};
+
+/* static structure for LINUX_INITRD_MEDIA device path
+   see https://github.com/torvalds/linux/blob/v5.13/drivers/firmware/efi/libstub/efi-stub-helper.c
+ */
+static const struct {
+        VENDOR_DEVICE_PATH vendor;
+        EFI_DEVICE_PATH end;
+} _packed_ efi_initrd_device_path = {
+        .vendor = {
+                .Header = {
+                        .Type = MEDIA_DEVICE_PATH,
+                        .SubType = MEDIA_VENDOR_DP,
+                        .Length = { sizeof(efi_initrd_device_path.vendor), 0 }
+                },
+                .Guid = LINUX_INITRD_MEDIA_GUID
+        },
+        .end = {
+                .Type = END_DEVICE_PATH_TYPE,
+                .SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE,
+                .Length = { sizeof(efi_initrd_device_path.end), 0 }
+        }
+};
+
+static EFIAPI EFI_STATUS initrd_load_file(
+                EFI_LOAD_FILE_PROTOCOL *this,
+                EFI_DEVICE_PATH *file_path,
+                BOOLEAN boot_policy,
+                size_t *buffer_size,
+                void *buffer) {
+
+        struct initrd_loader *loader;
+
+        if (!this || !buffer_size || !file_path)
+                return EFI_INVALID_PARAMETER;
+        if (boot_policy)
+                return EFI_UNSUPPORTED;
+
+        loader = (struct initrd_loader *) this;
+
+        if (loader->length == 0 || !loader->address)
+                return EFI_NOT_FOUND;
+
+        if (!buffer || *buffer_size < loader->length) {
+                *buffer_size = loader->length;
+                return EFI_BUFFER_TOO_SMALL;
+        }
+
+        memcpy(buffer, loader->address, loader->length);
+        *buffer_size = loader->length;
+        return EFI_SUCCESS;
+}
+
+EFI_STATUS initrd_register(
+                const void *initrd_address,
+                size_t initrd_length,
+                EFI_HANDLE *ret_initrd_handle) {
+
+        EFI_STATUS err;
+        EFI_DEVICE_PATH *dp = (EFI_DEVICE_PATH *) &efi_initrd_device_path;
+        EFI_HANDLE handle;
+        struct initrd_loader *loader;
+
+        assert(ret_initrd_handle);
+
+        if (!initrd_address || initrd_length == 0)
+                return EFI_SUCCESS;
+
+        /* check if a LINUX_INITRD_MEDIA_GUID DevicePath is already registered.
+           LocateDevicePath checks for the "closest DevicePath" and returns its handle,
+           where as InstallMultipleProtocolInterfaces only matches identical DevicePaths.
+         */
+        err = BS->LocateDevicePath(MAKE_GUID_PTR(EFI_LOAD_FILE2_PROTOCOL), &dp, &handle);
+        if (err != EFI_NOT_FOUND) /* InitrdMedia is already registered */
+                return EFI_ALREADY_STARTED;
+
+        loader = xnew(struct initrd_loader, 1);
+        *loader = (struct initrd_loader) {
+                .load_file.LoadFile = initrd_load_file,
+                .address = initrd_address,
+                .length = initrd_length
+        };
+
+        /* create a new handle and register the LoadFile2 protocol with the InitrdMediaPath on it */
+        err = BS->InstallMultipleProtocolInterfaces(
+                        ret_initrd_handle, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL),
+                        &efi_initrd_device_path, MAKE_GUID_PTR(EFI_LOAD_FILE2_PROTOCOL),
+                        loader,
+                        NULL);
+        if (err != EFI_SUCCESS)
+                free(loader);
+
+        return err;
+}
+
+EFI_STATUS initrd_unregister(EFI_HANDLE initrd_handle) {
+        EFI_STATUS err;
+        struct initrd_loader *loader;
+
+        if (!initrd_handle)
+                return EFI_SUCCESS;
+
+        /* get the LoadFile2 protocol that we allocated earlier */
+        err = BS->OpenProtocol(
+                        initrd_handle,
+                        MAKE_GUID_PTR(EFI_LOAD_FILE2_PROTOCOL),
+                        (void **) &loader,
+                        NULL,
+                        NULL,
+                        EFI_OPEN_PROTOCOL_GET_PROTOCOL);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        /* close the handle */
+        (void) BS->CloseProtocol(initrd_handle, MAKE_GUID_PTR(EFI_LOAD_FILE2_PROTOCOL), NULL, NULL);
+
+        /* uninstall all protocols thus destroying the handle */
+        err = BS->UninstallMultipleProtocolInterfaces(
+                        initrd_handle, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL),
+                        &efi_initrd_device_path, MAKE_GUID_PTR(EFI_LOAD_FILE2_PROTOCOL),
+                        loader,
+                        NULL);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        initrd_handle = NULL;
+        free(loader);
+        return EFI_SUCCESS;
+}
diff --git a/src/boot/efi/initrd.h b/src/boot/efi/initrd.h
new file mode 100644
index 0000000..c3dda6d
--- /dev/null
+++ b/src/boot/efi/initrd.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <efi.h>
+#include <stddef.h>
+
+EFI_STATUS initrd_register(
+                const void *initrd_address,
+                size_t initrd_length,
+                EFI_HANDLE *ret_initrd_handle);
+
+EFI_STATUS initrd_unregister(EFI_HANDLE initrd_handle);
+
+static inline void cleanup_initrd(EFI_HANDLE *initrd_handle) {
+        (void) initrd_unregister(*initrd_handle);
+        *initrd_handle = NULL;
+}
diff --git a/src/boot/efi/linux.c b/src/boot/efi/linux.c
index b5d6120..8feea1d 100644
--- a/src/boot/efi/linux.c
+++ b/src/boot/efi/linux.c
@@ -1,74 +1,157 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+/*
+ * Generic Linux boot protocol using the EFI/PE entry point of the kernel. Passes
+ * initrd with the LINUX_INITRD_MEDIA_GUID DevicePath and cmdline with
+ * EFI LoadedImageProtocol.
+ *
+ * This method works for Linux 5.8 and newer on ARM/Aarch64, x86/x68_64 and RISC-V.
+ */
+
 #include <efi.h>
 #include <efilib.h>
 
+#include "initrd.h"
 #include "linux.h"
+#include "pe.h"
+#include "secure-boot.h"
 #include "util.h"
 
-#ifdef __i386__
-#define __regparm0__ __attribute__((regparm(0)))
-#else
-#define __regparm0__
-#endif
+#define STUB_PAYLOAD_GUID \
+        { 0x55c5d1f8, 0x04cd, 0x46b5, { 0x8a, 0x20, 0xe5, 0x6c, 0xbb, 0x30, 0x52, 0xd0 } }
 
-typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct boot_params *params) __regparm0__;
-static VOID linux_efi_handover(EFI_HANDLE image, struct boot_params *params) {
-        handover_f handover;
-        UINTN start = (UINTN)params->hdr.code32_start;
+typedef struct {
+        const void *addr;
+        size_t len;
+        const EFI_DEVICE_PATH *device_path;
+} ValidationContext;
 
-#ifdef __x86_64__
-        asm volatile ("cli");
-        start += 512;
-#endif
-        handover = (handover_f)(start + params->hdr.handover_offset);
-        handover(image, ST, params);
+static bool validate_payload(
+                const void *ctx, const EFI_DEVICE_PATH *device_path, const void *file_buffer, size_t file_size) {
+
+        const ValidationContext *payload = ASSERT_PTR(ctx);
+
+        if (device_path != payload->device_path)
+                return false;
+
+        /* Security arch (1) protocol does not provide a file buffer. Instead we are supposed to fetch the payload
+         * ourselves, which is not needed as we already have everything in memory and the device paths match. */
+        if (file_buffer && (file_buffer != payload->addr || file_size != payload->len))
+                return false;
+
+        return true;
 }
 
-EFI_STATUS linux_exec(EFI_HANDLE image,
-                      CHAR8 *cmdline, UINTN cmdline_len,
-                      UINTN linux_addr,
-                      UINTN initrd_addr, UINTN initrd_size) {
-        struct boot_params *image_params;
-        struct boot_params *boot_params;
-        UINT8 setup_sectors;
-        EFI_PHYSICAL_ADDRESS addr;
+static EFI_STATUS load_image(EFI_HANDLE parent, const void *source, size_t len, EFI_HANDLE *ret_image) {
+        assert(parent);
+        assert(source);
+        assert(ret_image);
+
+        /* We could pass a NULL device path, but it's nicer to provide something and it allows us to identify
+         * the loaded image from within the security hooks. */
+        struct {
+                VENDOR_DEVICE_PATH payload;
+                EFI_DEVICE_PATH end;
+        } _packed_ payload_device_path = {
+                .payload = {
+                        .Header = {
+                                .Type = MEDIA_DEVICE_PATH,
+                                .SubType = MEDIA_VENDOR_DP,
+                                .Length = { sizeof(payload_device_path.payload), 0 },
+                        },
+                        .Guid = STUB_PAYLOAD_GUID,
+                },
+                .end = {
+                        .Type = END_DEVICE_PATH_TYPE,
+                        .SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE,
+                        .Length = { sizeof(payload_device_path.end), 0 },
+                },
+        };
+
+        /* We want to support unsigned kernel images as payload, which is safe to do under secure boot
+         * because it is embedded in this stub loader (and since it is already running it must be trusted). */
+        install_security_override(
+                        validate_payload,
+                        &(ValidationContext) {
+                                .addr = source,
+                                .len = len,
+                                .device_path = &payload_device_path.payload.Header,
+                        });
+
+        EFI_STATUS ret = BS->LoadImage(
+                        /*BootPolicy=*/false,
+                        parent,
+                        &payload_device_path.payload.Header,
+                        (void *) source,
+                        len,
+                        ret_image);
+
+        uninstall_security_override();
+
+        return ret;
+}
+
+EFI_STATUS linux_exec(
+                EFI_HANDLE parent,
+                const char16_t *cmdline,
+                const void *linux_buffer,
+                size_t linux_length,
+                const void *initrd_buffer,
+                size_t initrd_length) {
+
+        uint32_t compat_address;
         EFI_STATUS err;
 
-        image_params = (struct boot_params *) linux_addr;
+        assert(parent);
+        assert(linux_buffer && linux_length > 0);
+        assert(initrd_buffer || initrd_length == 0);
 
-        if (image_params->hdr.boot_flag != 0xAA55 ||
-            image_params->hdr.header != SETUP_MAGIC ||
-            image_params->hdr.version < 0x20b ||
-            !image_params->hdr.relocatable_kernel)
-                return EFI_LOAD_ERROR;
+        err = pe_kernel_info(linux_buffer, &compat_address);
+#if defined(__i386__) || defined(__x86_64__)
+        if (err == EFI_UNSUPPORTED)
+                /* Kernel is too old to support LINUX_INITRD_MEDIA_GUID, try the deprecated EFI handover
+                 * protocol. */
+                return linux_exec_efi_handover(
+                                parent,
+                                cmdline,
+                                linux_buffer,
+                                linux_length,
+                                initrd_buffer,
+                                initrd_length);
+#endif
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Bad kernel image: %m");
 
-        boot_params = (struct boot_params *) 0xFFFFFFFF;
-        err = uefi_call_wrapper(BS->AllocatePages, 4, AllocateMaxAddress, EfiLoaderData,
-                                EFI_SIZE_TO_PAGES(0x4000), (EFI_PHYSICAL_ADDRESS*) &boot_params);
-        if (EFI_ERROR(err))
-                return err;
+        _cleanup_(unload_imagep) EFI_HANDLE kernel_image = NULL;
+        err = load_image(parent, linux_buffer, linux_length, &kernel_image);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error loading kernel image: %m");
 
-        ZeroMem(boot_params, 0x4000);
-        CopyMem(&boot_params->hdr, &image_params->hdr, sizeof(struct setup_header));
-        boot_params->hdr.type_of_loader = 0xff;
-        setup_sectors = image_params->hdr.setup_sects > 0 ? image_params->hdr.setup_sects : 4;
-        boot_params->hdr.code32_start = (UINT32)linux_addr + (setup_sectors + 1) * 512;
+        EFI_LOADED_IMAGE_PROTOCOL *loaded_image;
+        err = BS->HandleProtocol(
+                        kernel_image, MAKE_GUID_PTR(EFI_LOADED_IMAGE_PROTOCOL), (void **) &loaded_image);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error getting kernel loaded image protocol: %m");
 
         if (cmdline) {
-                addr = 0xA0000;
-                err = uefi_call_wrapper(BS->AllocatePages, 4, AllocateMaxAddress, EfiLoaderData,
-                                        EFI_SIZE_TO_PAGES(cmdline_len + 1), &addr);
-                if (EFI_ERROR(err))
-                        return err;
-                CopyMem((VOID *)(UINTN)addr, cmdline, cmdline_len);
-                ((CHAR8 *)(UINTN)addr)[cmdline_len] = 0;
-                boot_params->hdr.cmd_line_ptr = (UINT32)addr;
+                loaded_image->LoadOptions = (void *) cmdline;
+                loaded_image->LoadOptionsSize = strsize16(loaded_image->LoadOptions);
         }
 
-        boot_params->hdr.ramdisk_image = (UINT32)initrd_addr;
-        boot_params->hdr.ramdisk_size = (UINT32)initrd_size;
+        _cleanup_(cleanup_initrd) EFI_HANDLE initrd_handle = NULL;
+        err = initrd_register(initrd_buffer, initrd_length, &initrd_handle);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error registering initrd: %m");
 
-        linux_efi_handover(image, boot_params);
-        return EFI_LOAD_ERROR;
+        log_wait();
+        err = BS->StartImage(kernel_image, NULL, NULL);
+
+        /* Try calling the kernel compat entry point if one exists. */
+        if (err == EFI_UNSUPPORTED && compat_address > 0) {
+                EFI_IMAGE_ENTRY_POINT compat_entry =
+                                (EFI_IMAGE_ENTRY_POINT) ((uint8_t *) loaded_image->ImageBase + compat_address);
+                err = compat_entry(kernel_image, ST);
+        }
+
+        return log_error_status(err, "Error starting kernel image: %m");
 }
diff --git a/src/boot/efi/linux.h b/src/boot/efi/linux.h
index 53270e1..f0a6a37 100644
--- a/src/boot/efi/linux.h
+++ b/src/boot/efi/linux.h
@@ -2,88 +2,19 @@
 #pragma once
 
 #include <efi.h>
+#include <uchar.h>
 
-#define SETUP_MAGIC             0x53726448      /* "HdrS" */
-
-struct setup_header {
-        UINT8  setup_sects;
-        UINT16 root_flags;
-        UINT32 syssize;
-        UINT16 ram_size;
-        UINT16 vid_mode;
-        UINT16 root_dev;
-        UINT16 boot_flag;
-        UINT16 jump;
-        UINT32 header;
-        UINT16 version;
-        UINT32 realmode_swtch;
-        UINT16 start_sys_seg;
-        UINT16 kernel_version;
-        UINT8  type_of_loader;
-        UINT8  loadflags;
-        UINT16 setup_move_size;
-        UINT32 code32_start;
-        UINT32 ramdisk_image;
-        UINT32 ramdisk_size;
-        UINT32 bootsect_kludge;
-        UINT16 heap_end_ptr;
-        UINT8  ext_loader_ver;
-        UINT8  ext_loader_type;
-        UINT32 cmd_line_ptr;
-        UINT32 initrd_addr_max;
-        UINT32 kernel_alignment;
-        UINT8  relocatable_kernel;
-        UINT8  min_alignment;
-        UINT16 xloadflags;
-        UINT32 cmdline_size;
-        UINT32 hardware_subarch;
-        UINT64 hardware_subarch_data;
-        UINT32 payload_offset;
-        UINT32 payload_length;
-        UINT64 setup_data;
-        UINT64 pref_address;
-        UINT32 init_size;
-        UINT32 handover_offset;
-} __attribute__((packed));
-
-/* adapted from linux' bootparam.h */
-struct boot_params {
-        UINT8  screen_info[64];         // was: struct screen_info
-        UINT8  apm_bios_info[20];       // was: struct apm_bios_info
-        UINT8  _pad2[4];
-        UINT64 tboot_addr;
-        UINT8  ist_info[16];            // was: struct ist_info
-        UINT8  _pad3[16];
-        UINT8  hd0_info[16];
-        UINT8  hd1_info[16];
-        UINT8  sys_desc_table[16];      // was: struct sys_desc_table
-        UINT8  olpc_ofw_header[16];     // was: struct olpc_ofw_header
-        UINT32 ext_ramdisk_image;
-        UINT32 ext_ramdisk_size;
-        UINT32 ext_cmd_line_ptr;
-        UINT8  _pad4[116];
-        UINT8  edid_info[128];          // was: struct edid_info
-        UINT8  efi_info[32];            // was: struct efi_info
-        UINT32 alt_mem_k;
-        UINT32 scratch;
-        UINT8  e820_entries;
-        UINT8  eddbuf_entries;
-        UINT8  edd_mbr_sig_buf_entries;
-        UINT8  kbd_status;
-        UINT8  secure_boot;
-        UINT8  _pad5[2];
-        UINT8  sentinel;
-        UINT8  _pad6[1];
-        struct setup_header hdr;
-        UINT8  _pad7[0x290-0x1f1-sizeof(struct setup_header)];
-        UINT32 edd_mbr_sig_buffer[16];  // was: edd_mbr_sig_buffer[EDD_MBR_SIG_MAX]
-        UINT8  e820_table[20*128];      // was: struct boot_e820_entry e820_table[E820_MAX_ENTRIES_ZEROPAGE]
-        UINT8  _pad8[48];
-        UINT8  eddbuf[6*82];            // was: struct edd_info eddbuf[EDDMAXNR]
-        UINT8  _pad9[276];
-} __attribute__((packed));
-
-EFI_STATUS linux_exec(EFI_HANDLE image,
-                      CHAR8 *cmdline, UINTN cmdline_size,
-                      UINTN linux_addr,
-                      UINTN initrd_addr, UINTN initrd_size);
+EFI_STATUS linux_exec(
+                EFI_HANDLE parent,
+                const char16_t *cmdline,
+                const void *linux_buffer,
+                size_t linux_length,
+                const void *initrd_buffer,
+                size_t initrd_length);
+EFI_STATUS linux_exec_efi_handover(
+                EFI_HANDLE parent,
+                const char16_t *cmdline,
+                const void *linux_buffer,
+                size_t linux_length,
+                const void *initrd_buffer,
+                size_t initrd_length);
diff --git a/src/boot/efi/linux_x86.c b/src/boot/efi/linux_x86.c
new file mode 100644
index 0000000..eaae988
--- /dev/null
+++ b/src/boot/efi/linux_x86.c
@@ -0,0 +1,215 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/*
+ * x86 specific code to for EFI handover boot protocol
+ * Linux kernels version 5.8 and newer support providing the initrd by
+ * LINUX_INITRD_MEDIA_GUID DevicePath. In order to support older kernels too,
+ * this x86 specific linux_exec function passes the initrd by setting the
+ * corresponding fields in the setup_header struct.
+ *
+ * see https://docs.kernel.org/x86/boot.html
+ */
+
+#include <efi.h>
+#include <efilib.h>
+
+#include "initrd.h"
+#include "linux.h"
+#include "macro-fundamental.h"
+#include "util.h"
+
+#define KERNEL_SECTOR_SIZE 512u
+#define BOOT_FLAG_MAGIC    0xAA55u
+#define SETUP_MAGIC        0x53726448u /* "HdrS" */
+#define SETUP_VERSION_2_11 0x20bu
+#define SETUP_VERSION_2_12 0x20cu
+#define SETUP_VERSION_2_15 0x20fu
+#define CMDLINE_PTR_MAX    0xA0000u
+
+enum {
+        XLF_KERNEL_64              = 1 << 0,
+        XLF_CAN_BE_LOADED_ABOVE_4G = 1 << 1,
+        XLF_EFI_HANDOVER_32        = 1 << 2,
+        XLF_EFI_HANDOVER_64        = 1 << 3,
+#ifdef __x86_64__
+        XLF_EFI_HANDOVER           = XLF_EFI_HANDOVER_64,
+#else
+        XLF_EFI_HANDOVER           = XLF_EFI_HANDOVER_32,
+#endif
+};
+
+typedef struct {
+        uint8_t  setup_sects;
+        uint16_t root_flags;
+        uint32_t syssize;
+        uint16_t ram_size;
+        uint16_t vid_mode;
+        uint16_t root_dev;
+        uint16_t boot_flag;
+        uint8_t  jump; /* We split the 2-byte jump field from the spec in two for convenience. */
+        uint8_t  setup_size;
+        uint32_t header;
+        uint16_t version;
+        uint32_t realmode_swtch;
+        uint16_t start_sys_seg;
+        uint16_t kernel_version;
+        uint8_t  type_of_loader;
+        uint8_t  loadflags;
+        uint16_t setup_move_size;
+        uint32_t code32_start;
+        uint32_t ramdisk_image;
+        uint32_t ramdisk_size;
+        uint32_t bootsect_kludge;
+        uint16_t heap_end_ptr;
+        uint8_t  ext_loader_ver;
+        uint8_t  ext_loader_type;
+        uint32_t cmd_line_ptr;
+        uint32_t initrd_addr_max;
+        uint32_t kernel_alignment;
+        uint8_t  relocatable_kernel;
+        uint8_t  min_alignment;
+        uint16_t xloadflags;
+        uint32_t cmdline_size;
+        uint32_t hardware_subarch;
+        uint64_t hardware_subarch_data;
+        uint32_t payload_offset;
+        uint32_t payload_length;
+        uint64_t setup_data;
+        uint64_t pref_address;
+        uint32_t init_size;
+        uint32_t handover_offset;
+} _packed_ SetupHeader;
+
+/* We really only care about a few fields, but we still have to provide a full page otherwise. */
+typedef struct {
+        uint8_t pad[192];
+        uint32_t ext_ramdisk_image;
+        uint32_t ext_ramdisk_size;
+        uint32_t ext_cmd_line_ptr;
+        uint8_t pad2[293];
+        SetupHeader hdr;
+        uint8_t pad3[3480];
+} _packed_ BootParams;
+assert_cc(offsetof(BootParams, ext_ramdisk_image) == 0x0C0);
+assert_cc(sizeof(BootParams) == 4096);
+
+#ifdef __i386__
+#  define __regparm0__ __attribute__((regparm(0)))
+#else
+#  define __regparm0__
+#endif
+
+typedef void (*handover_f)(void *parent, EFI_SYSTEM_TABLE *table, BootParams *params) __regparm0__
+                __attribute__((sysv_abi));
+
+static void linux_efi_handover(EFI_HANDLE parent, uintptr_t kernel, BootParams *params) {
+        assert(params);
+
+        kernel += (params->hdr.setup_sects + 1) * KERNEL_SECTOR_SIZE; /* 32bit entry address. */
+
+        /* Old kernels needs this set, while newer ones seem to ignore this. Note that this gets truncated on
+         * above 4G boots, which is fine as long as we do not use the value to jump to kernel entry. */
+        params->hdr.code32_start = kernel;
+
+#ifdef __x86_64__
+        kernel += KERNEL_SECTOR_SIZE; /* 64bit entry address. */
+#endif
+
+        kernel += params->hdr.handover_offset; /* 32/64bit EFI handover address. */
+
+        /* Note in EFI mixed mode this now points to the correct 32bit handover entry point, allowing a 64bit
+         * kernel to be booted from a 32bit sd-stub. */
+
+        handover_f handover = (handover_f) kernel;
+        handover(parent, ST, params);
+}
+
+EFI_STATUS linux_exec_efi_handover(
+                EFI_HANDLE parent,
+                const char16_t *cmdline,
+                const void *linux_buffer,
+                size_t linux_length,
+                const void *initrd_buffer,
+                size_t initrd_length) {
+
+        assert(parent);
+        assert(linux_buffer);
+        assert(initrd_buffer || initrd_length == 0);
+
+        if (linux_length < sizeof(BootParams))
+                return EFI_LOAD_ERROR;
+
+        const BootParams *image_params = (const BootParams *) linux_buffer;
+        if (image_params->hdr.header != SETUP_MAGIC || image_params->hdr.boot_flag != BOOT_FLAG_MAGIC)
+                return log_error_status(EFI_UNSUPPORTED, "Unsupported kernel image.");
+        if (image_params->hdr.version < SETUP_VERSION_2_11)
+                return log_error_status(EFI_UNSUPPORTED, "Kernel too old.");
+        if (!image_params->hdr.relocatable_kernel)
+                return log_error_status(EFI_UNSUPPORTED, "Kernel is not relocatable.");
+
+        /* The xloadflags were added in version 2.12+ of the boot protocol but the handover support predates
+         * that, so we cannot safety-check this for 2.11. */
+        if (image_params->hdr.version >= SETUP_VERSION_2_12 &&
+            !FLAGS_SET(image_params->hdr.xloadflags, XLF_EFI_HANDOVER))
+                return log_error_status(EFI_UNSUPPORTED, "Kernel does not support EFI handover protocol.");
+
+        bool can_4g = image_params->hdr.version >= SETUP_VERSION_2_12 &&
+                        FLAGS_SET(image_params->hdr.xloadflags, XLF_CAN_BE_LOADED_ABOVE_4G);
+
+        if (!can_4g && POINTER_TO_PHYSICAL_ADDRESS(linux_buffer) + linux_length > UINT32_MAX)
+                return log_error_status(
+                                EFI_UNSUPPORTED,
+                                "Unified kernel image was loaded above 4G, but kernel lacks support.");
+        if (!can_4g && POINTER_TO_PHYSICAL_ADDRESS(initrd_buffer) + initrd_length > UINT32_MAX)
+                return log_error_status(EFI_UNSUPPORTED, "Initrd is above 4G, but kernel lacks support.");
+
+        _cleanup_pages_ Pages boot_params_page = xmalloc_pages(
+                        can_4g ? AllocateAnyPages : AllocateMaxAddress,
+                        EfiLoaderData,
+                        EFI_SIZE_TO_PAGES(sizeof(BootParams)),
+                        UINT32_MAX /* Below the 4G boundary */);
+        BootParams *boot_params = PHYSICAL_ADDRESS_TO_POINTER(boot_params_page.addr);
+        *boot_params = (BootParams){};
+
+        /* Setup size is determined by offset 0x0202 + byte value at offset 0x0201, which is the same as
+         * offset of the header field and the target from the jump field (which we split for this reason). */
+        memcpy(&boot_params->hdr,
+               &image_params->hdr,
+               offsetof(SetupHeader, header) + image_params->hdr.setup_size);
+
+        boot_params->hdr.type_of_loader = 0xff;
+
+        /* Spec says: For backwards compatibility, if the setup_sects field contains 0, the real value is 4. */
+        if (boot_params->hdr.setup_sects == 0)
+                boot_params->hdr.setup_sects = 4;
+
+        _cleanup_pages_ Pages cmdline_pages = {};
+        if (cmdline) {
+                size_t len = MIN(strlen16(cmdline), image_params->hdr.cmdline_size);
+
+                cmdline_pages = xmalloc_pages(
+                                can_4g ? AllocateAnyPages : AllocateMaxAddress,
+                                EfiLoaderData,
+                                EFI_SIZE_TO_PAGES(len + 1),
+                                CMDLINE_PTR_MAX);
+
+                /* Convert cmdline to ASCII. */
+                char *cmdline8 = PHYSICAL_ADDRESS_TO_POINTER(cmdline_pages.addr);
+                for (size_t i = 0; i < len; i++)
+                        cmdline8[i] = cmdline[i] <= 0x7E ? cmdline[i] : ' ';
+                cmdline8[len] = '\0';
+
+                boot_params->hdr.cmd_line_ptr = (uint32_t) cmdline_pages.addr;
+                boot_params->ext_cmd_line_ptr = cmdline_pages.addr >> 32;
+                assert(can_4g || cmdline_pages.addr <= CMDLINE_PTR_MAX);
+        }
+
+        boot_params->hdr.ramdisk_image = (uintptr_t) initrd_buffer;
+        boot_params->ext_ramdisk_image = POINTER_TO_PHYSICAL_ADDRESS(initrd_buffer) >> 32;
+        boot_params->hdr.ramdisk_size = initrd_length;
+        boot_params->ext_ramdisk_size = ((uint64_t) initrd_length) >> 32;
+
+        log_wait();
+        linux_efi_handover(parent, (uintptr_t) linux_buffer, boot_params);
+        return EFI_LOAD_ERROR;
+}
diff --git a/src/boot/efi/log.c b/src/boot/efi/log.c
new file mode 100644
index 0000000..b1a613e
--- /dev/null
+++ b/src/boot/efi/log.c
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <efi.h>
+#include <efilib.h>
+
+#include "log.h"
+
+static unsigned log_count = 0;
+
+void efi_assert(const char *expr, const char *file, unsigned line, const char *function) {
+        log_error("systemd-boot assertion '%s' failed at %s:%u@%s. Halting.", expr, file, line, function);
+        for (;;)
+                BS->Stall(60 * 1000 * 1000);
+}
+
+EFI_STATUS log_internal(EFI_STATUS status, const char *format, ...) {
+        assert(format);
+
+        int32_t attr = ST->ConOut->Mode->Attribute;
+
+        if (ST->ConOut->Mode->CursorColumn > 0)
+                ST->ConOut->OutputString(ST->ConOut, (char16_t *) u"\r\n");
+        ST->ConOut->SetAttribute(ST->ConOut, EFI_LIGHTRED | EFI_BACKGROUND_BLACK);
+
+        va_list ap;
+        va_start(ap, format);
+        vprintf_status(status, format, ap);
+        va_end(ap);
+
+        ST->ConOut->OutputString(ST->ConOut, (char16_t *) u"\r\n");
+        ST->ConOut->SetAttribute(ST->ConOut, attr);
+
+        log_count++;
+        return status;
+}
+
+void log_wait(void) {
+        if (log_count == 0)
+                return;
+
+        BS->Stall(MIN(4u, log_count) * 2500 * 1000);
+        log_count = 0;
+}
diff --git a/src/boot/efi/log.h b/src/boot/efi/log.h
new file mode 100644
index 0000000..9bdcfad
--- /dev/null
+++ b/src/boot/efi/log.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "efi-string.h"
+
+void log_wait(void);
+_gnu_printf_(2, 3) EFI_STATUS log_internal(EFI_STATUS status, const char *format, ...);
+#define log_error_status(status, ...) log_internal(status, __VA_ARGS__)
+#define log_error(...) log_internal(EFI_INVALID_PARAMETER, __VA_ARGS__)
+#define log_oom() log_internal(EFI_OUT_OF_RESOURCES, "Out of memory.")
+#define log_trace() log_internal(EFI_SUCCESS, "%s:%i@%s", __FILE__, __LINE__, __func__)
diff --git a/src/boot/efi/measure.c b/src/boot/efi/measure.c
index c272d08..949e263 100644
--- a/src/boot/efi/measure.c
+++ b/src/boot/efi/measure.c
@@ -5,258 +5,99 @@
 #include <efi.h>
 #include <efilib.h>
 
+#include "tpm-pcr.h"
+#include "macro-fundamental.h"
 #include "measure.h"
+#include "missing_efi.h"
+#include "util.h"
 
-#define EFI_TCG_GUID \
-        &(EFI_GUID) { 0xf541796d, 0xa62e, 0x4954, { 0xa7, 0x75, 0x95, 0x84, 0xf6, 0x1b, 0x9c, 0xdd } }
+static EFI_STATUS tpm1_measure_to_pcr_and_event_log(
+                const EFI_TCG *tcg,
+                uint32_t pcrindex,
+                EFI_PHYSICAL_ADDRESS buffer,
+                size_t buffer_size,
+                const char16_t *description) {
 
-typedef struct _TCG_VERSION {
-        UINT8 Major;
-        UINT8 Minor;
-        UINT8 RevMajor;
-        UINT8 RevMinor;
-} TCG_VERSION;
-
-typedef struct tdEFI_TCG2_VERSION {
-        UINT8 Major;
-        UINT8 Minor;
-} EFI_TCG2_VERSION;
-
-typedef struct _TCG_BOOT_SERVICE_CAPABILITY {
-        UINT8 Size;
-        struct _TCG_VERSION StructureVersion;
-        struct _TCG_VERSION ProtocolSpecVersion;
-        UINT8 HashAlgorithmBitmap;
-        BOOLEAN TPMPresentFlag;
-        BOOLEAN TPMDeactivatedFlag;
-} TCG_BOOT_SERVICE_CAPABILITY;
-
-typedef struct tdTREE_BOOT_SERVICE_CAPABILITY {
-        UINT8 Size;
-        EFI_TCG2_VERSION StructureVersion;
-        EFI_TCG2_VERSION ProtocolVersion;
-        UINT32 HashAlgorithmBitmap;
-        UINT32 SupportedEventLogs;
-        BOOLEAN TrEEPresentFlag;
-        UINT16 MaxCommandSize;
-        UINT16 MaxResponseSize;
-        UINT32 ManufacturerID;
-} TREE_BOOT_SERVICE_CAPABILITY;
-
-typedef UINT32 TCG_ALGORITHM_ID;
-#define TCG_ALG_SHA 0x00000004  // The SHA1 algorithm
-
-#define SHA1_DIGEST_SIZE 20
-
-typedef struct _TCG_DIGEST {
-        UINT8 Digest[SHA1_DIGEST_SIZE];
-} TCG_DIGEST;
-
-#define EV_IPL 13
-
-typedef struct _TCG_PCR_EVENT {
-        UINT32 PCRIndex;
-        UINT32 EventType;
-        struct _TCG_DIGEST digest;
-        UINT32 EventSize;
-        UINT8 Event[1];
-} TCG_PCR_EVENT;
-
-INTERFACE_DECL(_EFI_TCG);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG_STATUS_CHECK) (IN struct _EFI_TCG * This,
-                                                   OUT struct _TCG_BOOT_SERVICE_CAPABILITY * ProtocolCapability,
-                                                   OUT UINT32 * TCGFeatureFlags,
-                                                   OUT EFI_PHYSICAL_ADDRESS * EventLogLocation,
-                                                   OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG_HASH_ALL) (IN struct _EFI_TCG * This,
-                                               IN UINT8 * HashData,
-                                               IN UINT64 HashDataLen,
-                                               IN TCG_ALGORITHM_ID AlgorithmId,
-                                               IN OUT UINT64 * HashedDataLen, IN OUT UINT8 ** HashedDataResult);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG_LOG_EVENT) (IN struct _EFI_TCG * This,
-                                                IN struct _TCG_PCR_EVENT * TCGLogData,
-                                                IN OUT UINT32 * EventNumber, IN UINT32 Flags);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG_PASS_THROUGH_TO_TPM) (IN struct _EFI_TCG * This,
-                                                          IN UINT32 TpmInputParameterBlockSize,
-                                                          IN UINT8 * TpmInputParameterBlock,
-                                                          IN UINT32 TpmOutputParameterBlockSize,
-                                                          IN UINT8 * TpmOutputParameterBlock);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG_HASH_LOG_EXTEND_EVENT) (IN struct _EFI_TCG * This,
-                                                            IN EFI_PHYSICAL_ADDRESS HashData,
-                                                            IN UINT64 HashDataLen,
-                                                            IN TCG_ALGORITHM_ID AlgorithmId,
-                                                            IN struct _TCG_PCR_EVENT * TCGLogData,
-                                                            IN OUT UINT32 * EventNumber,
-                                                            OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry);
-
-typedef struct _EFI_TCG {
-        EFI_TCG_STATUS_CHECK StatusCheck;
-        EFI_TCG_HASH_ALL HashAll;
-        EFI_TCG_LOG_EVENT LogEvent;
-        EFI_TCG_PASS_THROUGH_TO_TPM PassThroughToTPM;
-        EFI_TCG_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
-} EFI_TCG;
-
-#define EFI_TCG2_GUID \
-        &(EFI_GUID) { 0x607f766c, 0x7455, 0x42be, { 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f } }
-
-typedef struct tdEFI_TCG2_PROTOCOL EFI_TCG2_PROTOCOL;
-
-typedef UINT32 EFI_TCG2_EVENT_LOG_BITMAP;
-typedef UINT32 EFI_TCG2_EVENT_LOG_FORMAT;
-typedef UINT32 EFI_TCG2_EVENT_ALGORITHM_BITMAP;
-
-typedef struct tdEFI_TCG2_BOOT_SERVICE_CAPABILITY {
-        UINT8 Size;
-        EFI_TCG2_VERSION StructureVersion;
-        EFI_TCG2_VERSION ProtocolVersion;
-        EFI_TCG2_EVENT_ALGORITHM_BITMAP HashAlgorithmBitmap;
-        EFI_TCG2_EVENT_LOG_BITMAP SupportedEventLogs;
-        BOOLEAN TPMPresentFlag;
-        UINT16 MaxCommandSize;
-        UINT16 MaxResponseSize;
-        UINT32 ManufacturerID;
-        UINT32 NumberOfPCRBanks;
-        EFI_TCG2_EVENT_ALGORITHM_BITMAP ActivePcrBanks;
-} EFI_TCG2_BOOT_SERVICE_CAPABILITY;
-
-#define EFI_TCG2_EVENT_HEADER_VERSION  1
-
-typedef struct {
-        UINT32 HeaderSize;
-        UINT16 HeaderVersion;
-        UINT32 PCRIndex;
-        UINT32 EventType;
-} __attribute__((packed)) EFI_TCG2_EVENT_HEADER;
-
-typedef struct tdEFI_TCG2_EVENT {
-        UINT32 Size;
-        EFI_TCG2_EVENT_HEADER Header;
-        UINT8 Event[1];
-} __attribute__((packed)) EFI_TCG2_EVENT;
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_CAPABILITY) (IN EFI_TCG2_PROTOCOL * This,
-                                                      IN OUT EFI_TCG2_BOOT_SERVICE_CAPABILITY * ProtocolCapability);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_EVENT_LOG) (IN EFI_TCG2_PROTOCOL * This,
-                                                     IN EFI_TCG2_EVENT_LOG_FORMAT EventLogFormat,
-                                                     OUT EFI_PHYSICAL_ADDRESS * EventLogLocation,
-                                                     OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry,
-                                                     OUT BOOLEAN * EventLogTruncated);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG2_HASH_LOG_EXTEND_EVENT) (IN EFI_TCG2_PROTOCOL * This,
-                                                             IN UINT64 Flags,
-                                                             IN EFI_PHYSICAL_ADDRESS DataToHash,
-                                                             IN UINT64 DataToHashLen, IN EFI_TCG2_EVENT * EfiTcgEvent);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG2_SUBMIT_COMMAND) (IN EFI_TCG2_PROTOCOL * This,
-                                                      IN UINT32 InputParameterBlockSize,
-                                                      IN UINT8 * InputParameterBlock,
-                                                      IN UINT32 OutputParameterBlockSize, IN UINT8 * OutputParameterBlock);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This, OUT UINT32 * ActivePcrBanks);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG2_SET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This, IN UINT32 ActivePcrBanks);
-
-typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This,
-                                                                          OUT UINT32 * OperationPresent, OUT UINT32 * Response);
-
-typedef struct tdEFI_TCG2_PROTOCOL {
-        EFI_TCG2_GET_CAPABILITY GetCapability;
-        EFI_TCG2_GET_EVENT_LOG GetEventLog;
-        EFI_TCG2_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
-        EFI_TCG2_SUBMIT_COMMAND SubmitCommand;
-        EFI_TCG2_GET_ACTIVE_PCR_BANKS GetActivePcrBanks;
-        EFI_TCG2_SET_ACTIVE_PCR_BANKS SetActivePcrBanks;
-        EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS GetResultOfSetActivePcrBanks;
-} EFI_TCG2;
-
-static EFI_STATUS tpm1_measure_to_pcr_and_event_log(const EFI_TCG *tcg, UINT32 pcrindex, const EFI_PHYSICAL_ADDRESS buffer,
-                                                    UINTN buffer_size, const CHAR16 *description) {
-        EFI_STATUS status;
-        TCG_PCR_EVENT *tcg_event;
-        UINT32 event_number;
+        _cleanup_free_ TCG_PCR_EVENT *tcg_event = NULL;
         EFI_PHYSICAL_ADDRESS event_log_last;
-        UINTN desc_len;
+        uint32_t event_number = 1;
+        size_t desc_len;
 
-        desc_len = (StrLen(description) + 1) * sizeof(CHAR16);
+        assert(tcg);
+        assert(description);
 
-        tcg_event = AllocateZeroPool(desc_len + sizeof(TCG_PCR_EVENT));
+        desc_len = strsize16(description);
+        tcg_event = xmalloc(offsetof(TCG_PCR_EVENT, Event) + desc_len);
+        memset(tcg_event, 0, offsetof(TCG_PCR_EVENT, Event) + desc_len);
+        *tcg_event = (TCG_PCR_EVENT) {
+                .EventSize = desc_len,
+                .PCRIndex = pcrindex,
+                .EventType = EV_IPL,
+        };
+        memcpy(tcg_event->Event, description, desc_len);
 
-        if (!tcg_event)
-                return EFI_OUT_OF_RESOURCES;
-
-        tcg_event->EventSize = desc_len;
-        CopyMem((VOID *) & tcg_event->Event[0], (VOID *) description, desc_len);
-
-        tcg_event->PCRIndex = pcrindex;
-        tcg_event->EventType = EV_IPL;
-
-        event_number = 1;
-        status = uefi_call_wrapper(tcg->HashLogExtendEvent, 7,
-                                   (EFI_TCG *) tcg, buffer, buffer_size, TCG_ALG_SHA, tcg_event, &event_number, &event_log_last);
-
-        if (EFI_ERROR(status))
-                return status;
-
-        uefi_call_wrapper(BS->FreePool, 1, tcg_event);
-
-        return EFI_SUCCESS;
+        return tcg->HashLogExtendEvent(
+                        (EFI_TCG *) tcg,
+                        buffer, buffer_size,
+                        TCG_ALG_SHA,
+                        tcg_event,
+                        &event_number,
+                        &event_log_last);
 }
 
-static EFI_STATUS tpm2_measure_to_pcr_and_event_log(const EFI_TCG2 *tcg, UINT32 pcrindex, const EFI_PHYSICAL_ADDRESS buffer,
-                                                    UINT64 buffer_size, const CHAR16 *description) {
-        EFI_STATUS status;
-        EFI_TCG2_EVENT *tcg_event;
-        UINTN desc_len;
+static EFI_STATUS tpm2_measure_to_pcr_and_event_log(
+                EFI_TCG2 *tcg,
+                uint32_t pcrindex,
+                EFI_PHYSICAL_ADDRESS buffer,
+                uint64_t buffer_size,
+                const char16_t *description) {
 
-        desc_len = StrLen(description) * sizeof(CHAR16);
+        _cleanup_free_ EFI_TCG2_EVENT *tcg_event = NULL;
+        size_t desc_len;
 
-        tcg_event = AllocateZeroPool(sizeof(*tcg_event) - sizeof(tcg_event->Event) + desc_len + 1);
+        assert(tcg);
+        assert(description);
 
-        if (!tcg_event)
-                return EFI_OUT_OF_RESOURCES;
+        desc_len = strsize16(description);
+        tcg_event = xmalloc(offsetof(EFI_TCG2_EVENT, Event) + desc_len);
+        memset(tcg_event, 0, offsetof(EFI_TCG2_EVENT, Event) + desc_len);
+        *tcg_event = (EFI_TCG2_EVENT) {
+                .Size = offsetof(EFI_TCG2_EVENT, Event) + desc_len,
+                .Header.HeaderSize = sizeof(EFI_TCG2_EVENT_HEADER),
+                .Header.HeaderVersion = EFI_TCG2_EVENT_HEADER_VERSION,
+                .Header.PCRIndex = pcrindex,
+                .Header.EventType = EV_IPL,
+        };
 
-        tcg_event->Size = sizeof(*tcg_event) - sizeof(tcg_event->Event) + desc_len + 1;
-        tcg_event->Header.HeaderSize = sizeof(EFI_TCG2_EVENT_HEADER);
-        tcg_event->Header.HeaderVersion = EFI_TCG2_EVENT_HEADER_VERSION;
-        tcg_event->Header.PCRIndex = pcrindex;
-        tcg_event->Header.EventType = EV_IPL;
+        memcpy(tcg_event->Event, description, desc_len);
 
-        CopyMem((VOID *) tcg_event->Event, (VOID *) description, desc_len);
-
-        status = uefi_call_wrapper(tcg->HashLogExtendEvent, 5, (EFI_TCG2 *) tcg, 0, buffer, (UINT64) buffer_size, tcg_event);
-
-        uefi_call_wrapper(BS->FreePool, 1, tcg_event);
-
-        if (EFI_ERROR(status))
-                return status;
-
-        return EFI_SUCCESS;
+        return tcg->HashLogExtendEvent(
+                        tcg,
+                        0,
+                        buffer, buffer_size,
+                        tcg_event);
 }
 
-static EFI_TCG * tcg1_interface_check(void) {
-        EFI_STATUS status;
+static EFI_TCG *tcg1_interface_check(void) {
+        EFI_PHYSICAL_ADDRESS event_log_location, event_log_last_entry;
+        TCG_BOOT_SERVICE_CAPABILITY capability = {
+                .Size = sizeof(capability),
+        };
+        EFI_STATUS err;
+        uint32_t features;
         EFI_TCG *tcg;
-        TCG_BOOT_SERVICE_CAPABILITY capability;
-        UINT32 features;
-        EFI_PHYSICAL_ADDRESS event_log_location;
-        EFI_PHYSICAL_ADDRESS event_log_last_entry;
 
-        status = LibLocateProtocol(EFI_TCG_GUID, (void **) &tcg);
-
-        if (EFI_ERROR(status))
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_TCG), NULL, (void **) &tcg);
+        if (err != EFI_SUCCESS)
                 return NULL;
 
-        capability.Size = (UINT8) sizeof(capability);
-        status = uefi_call_wrapper(tcg->StatusCheck, 5, tcg, &capability, &features, &event_log_location, &event_log_last_entry);
-
-        if (EFI_ERROR(status))
+        err = tcg->StatusCheck(
+                        tcg,
+                        &capability,
+                        &features,
+                        &event_log_location,
+                        &event_log_last_entry);
+        if (err != EFI_SUCCESS)
                 return NULL;
 
         if (capability.TPMDeactivatedFlag)
@@ -269,25 +110,24 @@
 }
 
 static EFI_TCG2 * tcg2_interface_check(void) {
-        EFI_STATUS status;
+        EFI_TCG2_BOOT_SERVICE_CAPABILITY capability = {
+                .Size = sizeof(capability),
+        };
+        EFI_STATUS err;
         EFI_TCG2 *tcg;
-        EFI_TCG2_BOOT_SERVICE_CAPABILITY capability;
 
-        status = LibLocateProtocol(EFI_TCG2_GUID, (void **) &tcg);
-
-        if (EFI_ERROR(status))
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_TCG2), NULL, (void **) &tcg);
+        if (err != EFI_SUCCESS)
                 return NULL;
 
-        capability.Size = (UINT8) sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY);
-        status = uefi_call_wrapper(tcg->GetCapability, 2, tcg, &capability);
-
-        if (EFI_ERROR(status))
+        err = tcg->GetCapability(tcg, &capability);
+        if (err != EFI_SUCCESS)
                 return NULL;
 
         if (capability.StructureVersion.Major == 1 &&
             capability.StructureVersion.Minor == 0) {
-                TCG_BOOT_SERVICE_CAPABILITY *caps_1_0;
-                caps_1_0 = (TCG_BOOT_SERVICE_CAPABILITY *)&capability;
+                TCG_BOOT_SERVICE_CAPABILITY *caps_1_0 =
+                        (TCG_BOOT_SERVICE_CAPABILITY*) &capability;
                 if (caps_1_0->TPMPresentFlag)
                         return tcg;
         }
@@ -298,19 +138,81 @@
         return tcg;
 }
 
-EFI_STATUS tpm_log_event(UINT32 pcrindex, const EFI_PHYSICAL_ADDRESS buffer, UINTN buffer_size, const CHAR16 *description) {
-        EFI_TCG *tpm1;
+bool tpm_present(void) {
+        return tcg2_interface_check() || tcg1_interface_check();
+}
+
+EFI_STATUS tpm_log_event(uint32_t pcrindex, EFI_PHYSICAL_ADDRESS buffer, size_t buffer_size, const char16_t *description, bool *ret_measured) {
         EFI_TCG2 *tpm2;
+        EFI_STATUS err;
+
+        assert(description || pcrindex == UINT32_MAX);
+
+        /* If EFI_SUCCESS is returned, will initialize ret_measured to true if we actually measured
+         * something, or false if measurement was turned off. */
+
+        if (pcrindex == UINT32_MAX) { /* PCR disabled? */
+                if (ret_measured)
+                        *ret_measured = false;
+
+                return EFI_SUCCESS;
+        }
 
         tpm2 = tcg2_interface_check();
         if (tpm2)
-                return tpm2_measure_to_pcr_and_event_log(tpm2, pcrindex, buffer, buffer_size, description);
+                err = tpm2_measure_to_pcr_and_event_log(tpm2, pcrindex, buffer, buffer_size, description);
+        else {
+                EFI_TCG *tpm1;
 
-        tpm1 = tcg1_interface_check();
-        if (tpm1)
-                return tpm1_measure_to_pcr_and_event_log(tpm1, pcrindex, buffer, buffer_size, description);
+                tpm1 = tcg1_interface_check();
+                if (tpm1)
+                        err = tpm1_measure_to_pcr_and_event_log(tpm1, pcrindex, buffer, buffer_size, description);
+                else {
+                        /* No active TPM found, so don't return an error */
 
-        /* No active TPM found, so don't return an error */
+                        if (ret_measured)
+                                *ret_measured = false;
+
+                        return EFI_SUCCESS;
+                }
+        }
+
+        if (err == EFI_SUCCESS && ret_measured)
+                *ret_measured = true;
+
+        return err;
+}
+
+EFI_STATUS tpm_log_event_ascii(uint32_t pcrindex, EFI_PHYSICAL_ADDRESS buffer, size_t buffer_size, const char *description, bool *ret_measured) {
+        _cleanup_free_ char16_t *c = NULL;
+
+        if (description)
+                c = xstr8_to_16(description);
+
+        return tpm_log_event(pcrindex, buffer, buffer_size, c, ret_measured);
+}
+
+EFI_STATUS tpm_log_load_options(const char16_t *load_options, bool *ret_measured) {
+        bool measured = false;
+        EFI_STATUS err;
+
+        /* Measures a load options string into the TPM2, i.e. the kernel command line */
+
+        err = tpm_log_event(
+                        TPM_PCR_INDEX_KERNEL_PARAMETERS,
+                        POINTER_TO_PHYSICAL_ADDRESS(load_options),
+                        strsize16(load_options),
+                        load_options,
+                        &measured);
+        if (err != EFI_SUCCESS)
+                return log_error_status(
+                                err,
+                                "Unable to add load options (i.e. kernel command) line measurement to PCR %u: %m",
+                                TPM_PCR_INDEX_KERNEL_PARAMETERS);
+
+        if (ret_measured)
+                *ret_measured = measured;
+
         return EFI_SUCCESS;
 }
 
diff --git a/src/boot/efi/measure.h b/src/boot/efi/measure.h
index e2873ad..44d23fe 100644
--- a/src/boot/efi/measure.h
+++ b/src/boot/efi/measure.h
@@ -2,5 +2,38 @@
 #pragma once
 
 #include <efi.h>
+#include <stdbool.h>
+#include <uchar.h>
 
-EFI_STATUS tpm_log_event(UINT32 pcrindex, const EFI_PHYSICAL_ADDRESS buffer, UINTN buffer_size, const CHAR16 *description);
+#if ENABLE_TPM
+
+bool tpm_present(void);
+EFI_STATUS tpm_log_event(uint32_t pcrindex, EFI_PHYSICAL_ADDRESS buffer, size_t buffer_size, const char16_t *description, bool *ret_measured);
+EFI_STATUS tpm_log_event_ascii(uint32_t pcrindex, EFI_PHYSICAL_ADDRESS buffer, size_t buffer_size, const char *description, bool *ret_measured);
+EFI_STATUS tpm_log_load_options(const char16_t *cmdline, bool *ret_measured);
+
+#else
+
+static inline bool tpm_present(void) {
+        return false;
+}
+
+static inline EFI_STATUS tpm_log_event(uint32_t pcrindex, EFI_PHYSICAL_ADDRESS buffer, size_t buffer_size, const char16_t *description, bool *ret_measured) {
+        if (ret_measured)
+                *ret_measured = false;
+        return EFI_SUCCESS;
+}
+
+static inline EFI_STATUS tpm_log_event_ascii(uint32_t pcrindex, EFI_PHYSICAL_ADDRESS buffer, size_t buffer_size, const char *description, bool *ret_measured) {
+        if (ret_measured)
+                *ret_measured = false;
+        return EFI_SUCCESS;
+}
+
+static inline EFI_STATUS tpm_log_load_options(const char16_t *cmdline, bool *ret_measured) {
+        if (ret_measured)
+                *ret_measured = false;
+        return EFI_SUCCESS;
+}
+
+#endif
diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
index afdf739..68c5dd1 100644
--- a/src/boot/efi/meson.build
+++ b/src/boot/efi/meson.build
@@ -1,315 +1,475 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-efi_headers = files('''
-        console.h
-        crc32.h
-        disk.h
-        graphics.h
-        linux.h
-        measure.h
-        missing_efi.h
-        pe.h
-        random-seed.h
-        sha256.h
-        shim.h
-        splash.h
-        util.h
-'''.split())
+conf.set10('ENABLE_EFI', get_option('efi'))
+conf.set10('HAVE_GNU_EFI', false)
 
-common_sources = '''
-        disk.c
-        graphics.c
-        measure.c
-        pe.c
-        secure-boot.c
-        util.c
-'''.split()
+efi_config_h_dir = meson.current_build_dir()
 
-systemd_boot_sources = '''
-        boot.c
-        console.c
-        crc32.c
-        random-seed.c
-        sha256.c
-        shim.c
-'''.split()
-
-stub_sources = '''
-        linux.c
-        splash.c
-        stub.c
-'''.split()
-
-if conf.get('ENABLE_EFI') == 1 and get_option('gnu-efi') != 'false'
-        efi_cc = get_option('efi-cc')
-        if efi_cc.length() == 0
-                efi_cc = cc.cmd_array()
+if not get_option('efi') or get_option('gnu-efi') == 'false'
+        if get_option('gnu-efi') == 'true'
+                error('gnu-efi support requested, but general efi support is disabled')
         endif
+        subdir_done()
+endif
 
-        efi_ld = find_program(get_option('efi-ld'), required: true)
-        efi_ld_name = efi_ld.path().split('/')[-1]
-        if efi_ld_name == 'lld' or efi_ld_name == 'ld.lld'
-                # LLVM/LLD does not support PE/COFF relocations
-                # https://lists.llvm.org/pipermail/llvm-dev/2021-March/149234.html
-                error('LLVM/lld does not support PE/COFF relocations. Use different linker for EFI image.')
+efi_arch = host_machine.cpu_family()
+if efi_arch == 'x86' and '-m64' in get_option('efi-cflags')
+        efi_arch = 'x86_64'
+elif efi_arch == 'x86_64' and '-m32' in get_option('efi-cflags')
+        efi_arch = 'x86'
+endif
+efi_arch = {
+        # host_cc_arch: [efi_arch (see Table 3-2 in UEFI spec), obsolete gnu_efi_inc_arch]
+        'x86':     ['ia32', 'ia32'],
+        'x86_64':  ['x64', 'x86_64'],
+        'arm':     ['arm', 'arm'],
+        'aarch64': ['aa64', 'aarch64'],
+        'riscv64': ['riscv64', 'riscv64'],
+}.get(efi_arch, [])
+
+efi_incdir = get_option('efi-includedir')
+found = false
+foreach efi_arch_candidate : efi_arch
+        efi_archdir = efi_incdir / efi_arch_candidate
+        if cc.has_header(efi_archdir / 'efibind.h',
+                         args: get_option('efi-cflags'))
+                found = true
+                break
         endif
+endforeach
 
-        efi_incdir = get_option('efi-includedir')
+if not found
+        if get_option('gnu-efi') == 'true'
+                error('gnu-efi support requested, but headers not found or efi arch is unknown')
+        endif
+        warning('gnu-efi headers not found or efi arch is unknown, disabling gnu-efi support')
+        subdir_done()
+endif
 
-        gnu_efi_path_arch = ''
-        foreach name : [gnu_efi_arch, EFI_MACHINE_TYPE_NAME]
-                if (gnu_efi_path_arch == '' and name != '' and
-                    cc.has_header('@0@/@1@/efibind.h'.format(efi_incdir, name)))
-                        gnu_efi_path_arch = name
+if not cc.has_header_symbol('efi.h', 'EFI_IMAGE_MACHINE_X64',
+                args: ['-nostdlib', '-ffreestanding', '-fshort-wchar'] + get_option('efi-cflags'),
+                include_directories: include_directories(efi_incdir,
+                                                         efi_archdir))
+
+        if get_option('gnu-efi') == 'true'
+                error('gnu-efi support requested, but found headers are too old (3.0.5+ required)')
+        endif
+        warning('gnu-efi headers are too old (3.0.5+ required), disabling gnu-efi support')
+        subdir_done()
+endif
+
+objcopy = run_command(cc.cmd_array(), '-print-prog-name=objcopy', check: true).stdout().strip()
+objcopy_2_38 = find_program('objcopy', version: '>=2.38', required: false)
+
+efi_ld = get_option('efi-ld')
+if efi_ld == 'auto'
+        efi_ld = cc.get_linker_id().split('.')[1]
+        if efi_ld not in ['bfd', 'gold']
+                message('Not using @0@ as efi-ld, falling back to bfd'.format(efi_ld))
+                efi_ld = 'bfd'
+        endif
+endif
+
+efi_multilib = run_command(
+        cc.cmd_array(), '-print-multi-os-directory', get_option('efi-cflags'),
+        check: false
+).stdout().strip()
+efi_multilib = run_command(
+        'realpath', '-e', '/usr/lib' / efi_multilib,
+        check: false
+).stdout().strip()
+
+efi_libdir = ''
+foreach dir : [get_option('efi-libdir'),
+               '/usr/lib/gnuefi' / efi_arch[0],
+               efi_multilib]
+        if dir != '' and fs.is_dir(dir)
+                efi_libdir = dir
+                break
+        endif
+endforeach
+if efi_libdir == ''
+        if get_option('gnu-efi') == 'true'
+                error('gnu-efi support requested, but efi-libdir was not found')
+        endif
+        warning('efi-libdir was not found, disabling gnu-efi support')
+        subdir_done()
+endif
+
+efi_lds = ''
+foreach location : [ # New locations first introduced with gnu-efi 3.0.11
+                    [efi_libdir / 'efi.lds',
+                     efi_libdir / 'crt0.o'],
+                    # Older locations...
+                    [efi_libdir / 'gnuefi' / 'elf_@0@_efi.lds'.format(efi_arch[1]),
+                     efi_libdir / 'gnuefi' / 'crt0-efi-@0@.o'.format(efi_arch[1])],
+                    [efi_libdir / 'elf_@0@_efi.lds'.format(efi_arch[1]),
+                     efi_libdir / 'crt0-efi-@0@.o'.format(efi_arch[1])]]
+        if fs.is_file(location[0]) and fs.is_file(location[1])
+                efi_lds = location[0]
+                efi_crt0 = location[1]
+                break
+        endif
+endforeach
+if efi_lds == ''
+        if get_option('gnu-efi') == 'true'
+                error('gnu-efi support requested, but cannot find efi.lds')
+        endif
+        warning('efi.lds was not found, disabling gnu-efi support')
+        subdir_done()
+endif
+
+conf.set10('HAVE_GNU_EFI', true)
+conf.set_quoted('EFI_MACHINE_TYPE_NAME', efi_arch[0])
+
+efi_conf = configuration_data()
+efi_conf.set_quoted('EFI_MACHINE_TYPE_NAME', efi_arch[0])
+efi_conf.set10('ENABLE_TPM', get_option('tpm'))
+
+foreach ctype : ['color-normal', 'color-entry', 'color-highlight', 'color-edit']
+        c = get_option('efi-' + ctype).split(',')
+        efi_conf.set(ctype.underscorify().to_upper(), 'EFI_TEXT_ATTR(@0@, @1@)'.format(
+                'EFI_' + c[0].strip().underscorify().to_upper(),
+                'EFI_' + c[1].strip().underscorify().to_upper()))
+endforeach
+
+if meson.is_cross_build() and get_option('sbat-distro') == 'auto'
+        warning('Auto detection of SBAT information not supported when cross-building, disabling SBAT.')
+elif get_option('sbat-distro') != ''
+        efi_conf.set_quoted('SBAT_PROJECT', meson.project_name())
+        efi_conf.set_quoted('PROJECT_VERSION', meson.project_version())
+        efi_conf.set('PROJECT_URL', conf.get('PROJECT_URL'))
+        if get_option('sbat-distro-generation') < 1
+                error('SBAT Distro Generation must be a positive integer')
+        endif
+        efi_conf.set('SBAT_DISTRO_GENERATION', get_option('sbat-distro-generation'))
+        foreach sbatvar : [['sbat-distro', 'ID'],
+                           ['sbat-distro-summary', 'NAME'],
+                           ['sbat-distro-url', 'BUG_REPORT_URL']]
+                value = get_option(sbatvar[0])
+                if (value == '' or value == 'auto') and not meson.is_cross_build()
+                        cmd = 'if [ -e /etc/os-release ]; then . /etc/os-release; else . /usr/lib/os-release; fi; echo $@0@'.format(sbatvar[1])
+                        value = run_command(sh, '-c', cmd, check: true).stdout().strip()
                 endif
+                if value == ''
+                        error('Required @0@ option not set and autodetection failed'.format(sbatvar[0]))
+                endif
+                efi_conf.set_quoted(sbatvar[0].underscorify().to_upper(), value)
         endforeach
 
-        if gnu_efi_path_arch != '' and EFI_MACHINE_TYPE_NAME == ''
-                error('gnu-efi is available, but EFI_MACHINE_TYPE_NAME is unknown')
+        pkgname = get_option('sbat-distro-pkgname')
+        if pkgname == ''
+                pkgname = meson.project_name()
         endif
+        efi_conf.set_quoted('SBAT_DISTRO_PKGNAME', pkgname)
 
-        efi_libdir = get_option('efi-libdir')
-        if efi_libdir == ''
-                # New location first introduced with gnu-efi 3.0.11
-                efi_libdir = join_paths('/usr/lib/gnuefi', EFI_MACHINE_TYPE_NAME)
-                cmd = run_command(test, '-e', efi_libdir)
-
-                if cmd.returncode() != 0
-                        # Fall back to the old approach
-                        cmd = run_command(efi_cc + ['-print-multi-os-directory'])
-                        if cmd.returncode() == 0
-                                path = join_paths('/usr/lib', cmd.stdout().strip())
-                                cmd = run_command(env, 'realpath', '-e', path)
-                                if cmd.returncode() == 0
-                                        efi_libdir = cmd.stdout().strip()
-                                endif
-                        endif
-                endif
-        endif
-
-        have_gnu_efi = gnu_efi_path_arch != '' and efi_libdir != ''
-else
-        have_gnu_efi = false
-endif
-
-if get_option('gnu-efi') == 'true' and not have_gnu_efi
-        error('gnu-efi support requested, but headers were not found')
-endif
-
-if have_gnu_efi
-        efi_conf = configuration_data()
-        efi_conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
-        efi_conf.set10('ENABLE_TPM', get_option('tpm'))
-        efi_conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
-
-        if get_option('sbat-distro') != ''
-                efi_conf.set_quoted('SBAT_PROJECT', meson.project_name())
-                efi_conf.set_quoted('PROJECT_VERSION', meson.project_version())
-                efi_conf.set('PROJECT_URL', conf.get('PROJECT_URL'))
-                if get_option('sbat-distro-generation') < 1
-                       error('SBAT Distro Generation must be a positive integer')
-                endif
-                efi_conf.set('SBAT_DISTRO_GENERATION', get_option('sbat-distro-generation'))
-                sbatvars = [['sbat-distro', 'ID'],
-                            ['sbat-distro-summary', 'NAME'],
-                            ['sbat-distro-url', 'BUG_REPORT_URL']]
-                foreach sbatvar : sbatvars
-                        value = get_option(sbatvar[0])
-                        if value == '' or value == 'auto'
-                                cmd = 'if [ -e /etc/os-release ]; then . /etc/os-release; else . /usr/lib/os-release; fi; echo $@0@'.format(sbatvar[1])
-                                value = run_command(sh, '-c', cmd).stdout().strip()
-                                message('@0@ (from @1@): @2@'.format(sbatvar[0], sbatvar[1], value))
-                        endif
-                        if value == ''
-                                error('Required @0@ option not set and autodetection failed'.format(sbatvar[0]))
-                        endif
-                        efi_conf.set_quoted(sbatvar[0].underscorify().to_upper(), value)
-                endforeach
-
-                pkgname = get_option('sbat-distro-pkgname')
-                if pkgname == ''
-                        pkgname = meson.project_name()
-                endif
-                efi_conf.set_quoted('SBAT_DISTRO_PKGNAME', pkgname)
-
-                pkgver = get_option('sbat-distro-version')
-                if pkgver == ''
-                        efi_conf.set('SBAT_DISTRO_VERSION', 'GIT_VERSION')
-                else
-                        efi_conf.set_quoted('SBAT_DISTRO_VERSION', pkgver)
-                endif
-        endif
-
-        efi_config_h = configure_file(
-                output : 'efi_config.h',
-                configuration : efi_conf)
-
-        objcopy = find_program('objcopy')
-
-        efi_location_map = [
-                # New locations first introduced with gnu-efi 3.0.11
-                [join_paths(efi_libdir, 'efi.lds'),
-                 join_paths(efi_libdir, 'crt0.o')],
-                # Older locations...
-                [join_paths(efi_libdir, 'gnuefi', 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)),
-                 join_paths(efi_libdir, 'gnuefi', 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))],
-                [join_paths(efi_libdir, 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)),
-                 join_paths(efi_libdir, 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))]]
-        efi_lds = ''
-        foreach location : efi_location_map
-                if efi_lds == ''
-                        cmd = run_command(test, '-f', location[0])
-                        if cmd.returncode() == 0
-                                efi_lds = location[0]
-                                efi_crt0 = location[1]
-                        endif
-                endif
-        endforeach
-        if efi_lds == ''
-                if get_option('gnu-efi') == 'true'
-                        error('gnu-efi support requested, but cannot find efi.lds')
-                else
-                        have_gnu_efi = false
-                endif
+        pkgver = get_option('sbat-distro-version')
+        if pkgver == ''
+                efi_conf.set('SBAT_DISTRO_VERSION', 'GIT_VERSION')
+                # This is determined during build, not configuration, so we can't display it yet.
+                sbat_distro_version_display = '(git version)'
+        else
+                efi_conf.set_quoted('SBAT_DISTRO_VERSION', pkgver)
+                sbat_distro_version_display = pkgver
         endif
 endif
 
-if have_gnu_efi
-        compile_args = cc.get_supported_arguments(
-                basic_disabled_warnings +
-                possible_common_cc_flags + [
-                        '-ffreestanding',
-                        '-fno-stack-protector',
-                        '-fno-strict-aliasing',
-                        '-fpic',
-                        '-fshort-wchar',
-                        '-Wall',
-                        '-Wextra',
-                        '-Wsign-compare',
-                ]
-        ) + [
-                '-nostdlib',
-                '-std=gnu99',
-                '-isystem', efi_incdir,
-                '-isystem', join_paths(efi_incdir, gnu_efi_path_arch),
-                '-I', fundamental_path,
-                '-DSD_BOOT',
-                '-include', efi_config_h,
-                '-include', version_h,
+efi_config_h = configure_file(
+        output : 'efi_config.h',
+        configuration : efi_conf)
+
+efi_cflags = [
+        '-DGNU_EFI_USE_MS_ABI',
+        '-DSD_BOOT=1',
+        '-ffreestanding',
+        '-fshort-wchar',
+        '-fvisibility=hidden',
+        '-I', fundamental_path,
+        '-I', meson.current_source_dir(),
+        '-include', efi_config_h,
+        '-include', version_h,
+        '-I', efi_archdir,
+        '-isystem', efi_incdir,
+        '-std=gnu11',
+        '-Wall',
+        '-Wextra',
+] + cc.get_supported_arguments(
+        basic_disabled_warnings +
+        possible_common_cc_flags + [
+                '-fno-stack-protector',
+                '-fno-strict-aliasing',
+                '-fpic',
+                '-fwide-exec-charset=UCS2',
         ]
-        if efi_arch == 'x86_64'
-                compile_args += ['-mno-red-zone',
-                                 '-mno-sse',
-                                 '-mno-mmx',
-                                 '-DEFI_FUNCTION_WRAPPER',
-                                 '-DGNU_EFI_USE_MS_ABI']
-        elif efi_arch == 'ia32'
-                compile_args += ['-mno-sse',
-                                 '-mno-mmx']
-        elif efi_arch == 'arm'
-                if cc.has_argument('-mgeneral-regs-only')
-                        compile_args += ['-mgeneral-regs-only']
-                endif
+)
 
-                if cc.has_argument('-mfpu=none')
-                        compile_args += ['-mfpu=none']
-                endif
-        endif
-        if get_option('werror') == true
-                compile_args += ['-Werror']
-        endif
-        if get_option('buildtype') == 'debug'
-                compile_args += ['-ggdb', '-O0']
-        elif get_option('buildtype') == 'debugoptimized'
-                compile_args += ['-ggdb', '-Og']
-        else
-                compile_args += ['-O2']
-        endif
+efi_cflags += cc.get_supported_arguments({
+        'ia32':   ['-mno-sse', '-mno-mmx'],
+        'x86_64': ['-mno-red-zone', '-mno-sse', '-mno-mmx'],
+        'arm':    ['-mgeneral-regs-only', '-mfpu=none'],
+}.get(efi_arch[1], []))
 
-        efi_ldflags = ['-T', efi_lds,
-                       '-shared',
-                       '-Bsymbolic',
-                       '-nostdlib',
-                       '-znocombreloc',
-                       '--build-id=sha1',
-                       '-L', efi_libdir,
-                       efi_crt0]
-        if ['aarch64', 'arm', 'riscv64'].contains(efi_arch)
-                # Aarch64, ARM32 and 64bit RISC-V don't have an EFI capable objcopy.
-                # Use 'binary' instead, and add required symbols manually.
-                efi_ldflags += ['--defsym=EFI_SUBSYSTEM=0xa']
-                efi_format = ['-O', 'binary']
-        else
-                efi_format = ['--target=efi-app-@0@'.format(gnu_efi_arch)]
-        endif
+# We are putting the efi_cc command line together ourselves, so make sure to pull any
+# relevant compiler flags from meson/CFLAGS as povided by the user or distro.
 
-        systemd_boot_objects = []
-        stub_objects = []
-        foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources
-                o_file = custom_target(file.split('/')[-1] + '.o',
-                                       input : file,
-                                       output : file.split('/')[-1] + '.o',
-                                       command : efi_cc + ['-c', '@INPUT@', '-o', '@OUTPUT@']
-                                                 + compile_args,
-                                       depend_files : efi_headers + fundamental_headers)
-                if (fundamental_source_paths + common_sources + systemd_boot_sources).contains(file)
-                        systemd_boot_objects += o_file
-                endif
-                if (fundamental_source_paths + common_sources + stub_sources).contains(file)
-                        stub_objects += o_file
-                endif
-        endforeach
-
-        libgcc_file_name = run_command(efi_cc + ['-print-libgcc-file-name']).stdout().strip()
-        systemd_boot_efi_name = 'systemd-boot@0@.efi'.format(EFI_MACHINE_TYPE_NAME)
-        stub_elf_name = 'linux@0@.elf.stub'.format(EFI_MACHINE_TYPE_NAME)
-        stub_efi_name = 'linux@0@.efi.stub'.format(EFI_MACHINE_TYPE_NAME)
-        no_undefined_symbols = find_program('no-undefined-symbols.sh')
-
-        efi_stubs = []
-        foreach tuple : [['systemd_boot.so', systemd_boot_efi_name, systemd_boot_objects, false],
-                         [stub_elf_name, stub_efi_name, stub_objects, true]]
-                so = custom_target(
-                        tuple[0],
-                        input : tuple[2],
-                        output : tuple[0],
-                        command : [efi_ld, '-o', '@OUTPUT@',
-                                   efi_ldflags, tuple[2],
-                                   '-lefi', '-lgnuefi', libgcc_file_name],
-                        install : tuple[3],
-                        install_dir : bootlibdir)
-
-                stub = custom_target(
-                        tuple[1],
-                        input : so,
-                        output : tuple[1],
-                        command : [objcopy,
-                                   '-j', '.text',
-                                   '-j', '.sdata',
-                                   '-j', '.sbat',
-                                   '-j', '.data',
-                                   '-j', '.dynamic',
-                                   '-j', '.dynsym',
-                                   '-j', '.rel*',
-                                   efi_format,
-                                   '@INPUT@', '@OUTPUT@'],
-                        install : true,
-                        install_dir : bootlibdir)
-
-                efi_stubs += [[so, stub]]
-
-                if want_tests != 'false'
-                        test('no-undefined-symbols-' + tuple[0],
-                             no_undefined_symbols,
-                             args : so)
-                endif
-        endforeach
-
-        ############################################################
-
-        test_efi_disk_img = custom_target(
-                'test-efi-disk.img',
-                input : [efi_stubs[0][0], efi_stubs[1][1]],
-                output : 'test-efi-disk.img',
-                command : [test_efi_create_disk_sh, '@OUTPUT@','@INPUT@', splash_bmp])
+if get_option('werror')
+        efi_cflags += ['-Werror']
 endif
+if get_option('debug') and get_option('mode') == 'developer'
+        efi_cflags += ['-ggdb', '-DEFI_DEBUG']
+endif
+if get_option('optimization') in ['1', '2', '3', 's', 'g']
+        efi_cflags += ['-O' + get_option('optimization')]
+endif
+if get_option('b_ndebug') == 'true' or (
+   get_option('b_ndebug') == 'if-release' and get_option('buildtype') in ['plain', 'release'])
+        efi_cflags += ['-DNDEBUG']
+endif
+if get_option('b_lto')
+        efi_cflags += cc.has_argument('-flto=auto') ? ['-flto=auto'] : ['-flto']
+endif
+
+foreach arg : get_option('c_args')
+        if arg in [
+                '-DNDEBUG',
+                '-fno-lto',
+                '-O1', '-O2', '-O3', '-Og', '-Os',
+                '-Werror',
+           ] or arg.split('=')[0] in [
+                '-ffile-prefix-map',
+                '-flto',
+           ] or (get_option('mode') == 'developer' and arg in [
+                '-DEFI_DEBUG',
+                '-g', '-ggdb',
+           ])
+
+                message('Using "@0@" from c_args for EFI compiler'.format(arg))
+                efi_cflags += arg
+        endif
+endforeach
+
+efi_cflags += get_option('efi-cflags')
+
+efi_ldflags = [
+        '-fuse-ld=' + efi_ld,
+        '-L', efi_libdir,
+        '-nostdlib',
+        '-T', efi_lds,
+        '-Wl,--build-id=sha1',
+        '-Wl,--fatal-warnings',
+        '-Wl,--no-undefined',
+        '-Wl,--warn-common',
+        '-Wl,-Bsymbolic',
+        '-z', 'nocombreloc',
+        '-z', 'noexecstack',
+        efi_crt0,
+]
+
+foreach arg : ['-Wl,--no-warn-execstack',
+               '-Wl,--no-warn-rwx-segments']
+        # We need to check the correct linker for supported args. This is what
+        # cc.has_multi_link_arguments() is for, but it helpfully overrides our
+        # choice of linker by putting its own -fuse-ld= arg after ours.
+        if run_command('bash', '-c',
+                       'exec "$@" -x c -o/dev/null <(echo "int main(void){return 0;}")' +
+                       ' -fuse-ld=' + efi_ld + ' -Wl,--fatal-warnings ' + arg,
+                       'bash', cc.cmd_array(),
+                       check : false).returncode() == 0
+                efi_ldflags += arg
+        endif
+endforeach
+
+# If using objcopy, crt0 must not include the PE/COFF header
+if run_command('grep', '-q', 'coff_header', efi_crt0, check: false).returncode() == 0
+        coff_header_in_crt0 = true
+else
+        coff_header_in_crt0 = false
+endif
+
+if efi_arch[1] in ['arm', 'riscv64'] or (efi_arch[1] == 'aarch64' and (not objcopy_2_38.found() or coff_header_in_crt0))
+        efi_ldflags += ['-shared']
+        # ARM32 and 64bit RISC-V don't have an EFI capable objcopy.
+        # Older objcopy doesn't support Aarch64 either.
+        # Use 'binary' instead, and add required symbols manually.
+        efi_ldflags += ['-Wl,--defsym=EFI_SUBSYSTEM=0xa']
+        efi_format = ['-O', 'binary']
+else
+        efi_ldflags += ['-pie']
+        if efi_ld == 'bfd'
+                efi_ldflags += '-Wl,--no-dynamic-linker'
+        endif
+        efi_format = ['--target=efi-app-@0@'.format(efi_arch[1])]
+endif
+
+if efi_arch[1] == 'arm'
+        # On arm, the compiler (correctly) warns about wchar_t size mismatch. This
+        # is because libgcc is not compiled with -fshort-wchar, but it does not
+        # have any occurrences of wchar_t in its sources or the documentation, so
+        # it is safe to assume that we can ignore this warning.
+        efi_ldflags += ['-Wl,--no-wchar-size-warning']
+endif
+
+if cc.get_id() == 'clang' and cc.version().split('.')[0].to_int() <= 10
+        # clang <= 10 doesn't pass -T to the linker and then even complains about it being unused
+        efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument']
+endif
+
+summary({
+        'EFI machine type' :                efi_arch[0],
+        'EFI LD' :                          efi_ld,
+        'EFI lds' :                         efi_lds,
+        'EFI crt0' :                        efi_crt0,
+        'EFI include directory' :           efi_archdir},
+        section : 'Extensible Firmware Interface')
+
+if efi_conf.get('SBAT_DISTRO', '') != ''
+        summary({
+                'SBAT distro':              efi_conf.get('SBAT_DISTRO'),
+                'SBAT distro generation':   efi_conf.get('SBAT_DISTRO_GENERATION'),
+                'SBAT distro version':      sbat_distro_version_display,
+                'SBAT distro summary':      efi_conf.get('SBAT_DISTRO_SUMMARY'),
+                'SBAT distro URL':          efi_conf.get('SBAT_DISTRO_URL')},
+                section : 'Extensible Firmware Interface')
+endif
+
+############################################################
+
+efi_headers = files(
+        'bcd.h',
+        'console.h',
+        'cpio.h',
+        'devicetree.h',
+        'disk.h',
+        'drivers.h',
+        'efi-string.h',
+        'graphics.h',
+        'initrd.h',
+        'linux.h',
+        'log.h',
+        'measure.h',
+        'missing_efi.h',
+        'part-discovery.h',
+        'pe.h',
+        'random-seed.h',
+        'secure-boot.h',
+        'shim.h',
+        'splash.h',
+        'ticks.h',
+        'util.h',
+)
+
+common_sources = files(
+        'console.c',
+        'devicetree.c',
+        'drivers.c',
+        'disk.c',
+        'efi-string.c',
+        'graphics.c',
+        'initrd.c',
+        'log.c',
+        'measure.c',
+        'part-discovery.c',
+        'pe.c',
+        'random-seed.c',
+        'secure-boot.c',
+        'ticks.c',
+        'util.c',
+        'vmm.c',
+)
+
+systemd_boot_sources = files(
+        'boot.c',
+        'shim.c',
+)
+
+stub_sources = files(
+        'cpio.c',
+        'linux.c',
+        'splash.c',
+        'stub.c',
+)
+
+if efi_arch[1] in ['ia32', 'x86_64']
+        stub_sources += files('linux_x86.c')
+endif
+
+tests += [
+        [files('test-efi-string.c', 'efi-string.c')],
+]
+
+# BCD parser only makes sense on arches that Windows supports.
+if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64']
+        systemd_boot_sources += files('bcd.c')
+        tests += [
+                [files('test-bcd.c', 'efi-string.c'),
+                 [],
+                 [libzstd],
+                 [],
+                 'HAVE_ZSTD'],
+        ]
+        fuzzers += [
+                [files('fuzz-bcd.c', 'bcd.c', 'efi-string.c')],
+                [files('fuzz-efi-string.c', 'efi-string.c')],
+                [files('fuzz-efi-printf.c', 'efi-string.c')],
+        ]
+endif
+
+systemd_boot_objects = []
+stub_objects = []
+foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources
+        # FIXME: replace ''.format(file) with fs.name(file) when meson_version requirement is >= 0.59.0
+        o_file = custom_target('@0@.o'.format(file).split('/')[-1],
+                               input : file,
+                               output : '@0@.o'.format(file).split('/')[-1],
+                               command : [cc.cmd_array(), '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags],
+                               depend_files : efi_headers + fundamental_headers)
+        if (fundamental_source_paths + common_sources + systemd_boot_sources).contains(file)
+                systemd_boot_objects += o_file
+        endif
+        if (fundamental_source_paths + common_sources + stub_sources).contains(file)
+                stub_objects += o_file
+        endif
+endforeach
+
+foreach tuple : [['systemd-boot@0@.@1@', systemd_boot_objects, false, 'systemd-boot'],
+                 ['linux@0@.@1@.stub', stub_objects, true, 'systemd-stub']]
+        elf = custom_target(
+                tuple[0].format(efi_arch[0], 'elf'),
+                input : tuple[1],
+                output : tuple[0].format(efi_arch[0], 'elf'),
+                command : [cc.cmd_array(),
+                           '-o', '@OUTPUT@',
+                           efi_cflags,
+                           efi_ldflags,
+                           '@INPUT@',
+                           '-lgnuefi',
+                           '-lgcc'],
+                install : tuple[2],
+                install_tag: tuple[3],
+                install_dir : bootlibdir)
+
+        efi = custom_target(
+                tuple[0].format(efi_arch[0], 'efi'),
+                input : elf,
+                output : tuple[0].format(efi_arch[0], 'efi'),
+                command : [objcopy,
+                           '-j', '.bss*',
+                           '-j', '.data',
+                           '-j', '.dynamic',
+                           '-j', '.dynsym',
+                           '-j', '.osrel',
+                           '-j', '.rel*',
+                           '-j', '.sbat',
+                           '-j', '.sdata',
+                           '-j', '.sdmagic',
+                           '-j', '.text',
+                           '--strip-all',
+                           '--section-alignment=512',
+                           efi_format,
+                           '@INPUT@', '@OUTPUT@'],
+                install : true,
+                install_tag: tuple[3],
+                install_dir : bootlibdir)
+
+        alias_target(tuple[3], efi)
+endforeach
diff --git a/src/boot/efi/missing_efi.h b/src/boot/efi/missing_efi.h
index b983931..3c35a85 100644
--- a/src/boot/efi/missing_efi.h
+++ b/src/boot/efi/missing_efi.h
@@ -3,67 +3,24 @@
 
 #include <efi.h>
 
-#ifndef EFI_RNG_PROTOCOL_GUID
+#include "macro-fundamental.h"
 
-#define EFI_RNG_PROTOCOL_GUID                                           \
-          { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} }
-
-typedef EFI_GUID EFI_RNG_ALGORITHM;
-
-#define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID       \
-     {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} }
-
-#define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID       \
-     {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} }
-
-#define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID        \
-     {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} }
-
-#define EFI_RNG_ALGORITHM_X9_31_3DES_GUID              \
-     {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} }
-
-#define EFI_RNG_ALGORITHM_X9_31_AES_GUID               \
-     {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} }
-
-#define EFI_RNG_ALGORITHM_RAW                          \
-     {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} }
-
-INTERFACE_DECL(_EFI_RNG_PROTOCOL);
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_RNG_GET_INFO) (
-  IN      struct _EFI_RNG_PROTOCOL   *This,
-  IN OUT  UINTN                      *RNGAlgorithmListSize,
-  OUT     EFI_RNG_ALGORITHM          *RNGAlgorithmList
-);
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_RNG_GET_RNG) (
-  IN      struct _EFI_RNG_PROTOCOL   *This,
-  IN      EFI_RNG_ALGORITHM          *RNGAlgorithm,           OPTIONAL
-  IN      UINTN                      RNGValueLength,
-  OUT     UINT8                      *RNGValue
-);
-
-typedef struct _EFI_RNG_PROTOCOL {
-          EFI_RNG_GET_INFO           GetInfo;
-          EFI_RNG_GET_RNG            GetRNG;
-} EFI_RNG_PROTOCOL;
-
-#endif
-
+/* gnu-efi 3.0.13 */
 #ifndef EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID
 
 #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \
     { 0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa} }
+#define SimpleTextInputExProtocol ((EFI_GUID)EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID)
 
 #define EFI_SHIFT_STATE_VALID           0x80000000
+#define EFI_RIGHT_SHIFT_PRESSED         0x00000001
+#define EFI_LEFT_SHIFT_PRESSED          0x00000002
 #define EFI_RIGHT_CONTROL_PRESSED       0x00000004
 #define EFI_LEFT_CONTROL_PRESSED        0x00000008
 #define EFI_RIGHT_ALT_PRESSED           0x00000010
 #define EFI_LEFT_ALT_PRESSED            0x00000020
+#define EFI_RIGHT_LOGO_PRESSED          0x00000040
+#define EFI_LEFT_LOGO_PRESSED           0x00000080
 
 struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;
 
@@ -120,3 +77,336 @@
 } EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;
 
 #endif
+
+/* gnu-efi 3.0.14 */
+#ifndef EFI_IMAGE_MACHINE_RISCV64
+        #define EFI_IMAGE_MACHINE_RISCV64 0x5064
+#endif
+
+/* gnu-efi 3.0.14 */
+#ifndef EFI_DTB_TABLE_GUID
+#define EFI_DTB_TABLE_GUID \
+        { 0xb1b621d5, 0xf19c, 0x41a5, {0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0} }
+#define EfiDtbTableGuid ((EFI_GUID)EFI_DTB_TABLE_GUID)
+#endif
+
+#ifndef EFI_DT_FIXUP_PROTOCOL_GUID
+#define EFI_DT_FIXUP_PROTOCOL_GUID \
+        { 0xe617d64c, 0xfe08, 0x46da, {0xf4, 0xdc, 0xbb, 0xd5, 0x87, 0x0c, 0x73, 0x00} }
+#define EfiDtFixupProtocol ((EFI_GUID)EFI_DT_FIXUP_PROTOCOL_GUID)
+
+#define EFI_DT_FIXUP_PROTOCOL_REVISION 0x00010000
+
+/* Add nodes and update properties */
+#define EFI_DT_APPLY_FIXUPS    0x00000001
+/*
+ * Reserve memory according to the /reserved-memory node
+ * and the memory reservation block
+ */
+#define EFI_DT_RESERVE_MEMORY  0x00000002
+
+typedef struct _EFI_DT_FIXUP_PROTOCOL EFI_DT_FIXUP_PROTOCOL;
+
+typedef EFI_STATUS (EFIAPI *EFI_DT_FIXUP) (
+        IN EFI_DT_FIXUP_PROTOCOL *This,
+        IN VOID                  *Fdt,
+        IN OUT UINTN             *BufferSize,
+        IN UINT32                Flags);
+
+struct _EFI_DT_FIXUP_PROTOCOL {
+        UINT64         Revision;
+        EFI_DT_FIXUP   Fixup;
+};
+
+#endif
+
+/* TCG EFI Protocol Specification */
+#ifndef EFI_TCG_GUID
+
+#define EFI_TCG_GUID \
+        { 0xf541796d, 0xa62e, 0x4954, { 0xa7, 0x75, 0x95, 0x84, 0xf6, 0x1b, 0x9c, 0xdd } }
+
+typedef struct _TCG_VERSION {
+        UINT8 Major;
+        UINT8 Minor;
+        UINT8 RevMajor;
+        UINT8 RevMinor;
+} TCG_VERSION;
+
+typedef struct tdEFI_TCG2_VERSION {
+        UINT8 Major;
+        UINT8 Minor;
+} EFI_TCG2_VERSION;
+
+typedef struct _TCG_BOOT_SERVICE_CAPABILITY {
+        UINT8 Size;
+        struct _TCG_VERSION StructureVersion;
+        struct _TCG_VERSION ProtocolSpecVersion;
+        UINT8 HashAlgorithmBitmap;
+        BOOLEAN TPMPresentFlag;
+        BOOLEAN TPMDeactivatedFlag;
+} TCG_BOOT_SERVICE_CAPABILITY;
+
+typedef struct tdTREE_BOOT_SERVICE_CAPABILITY {
+        UINT8 Size;
+        EFI_TCG2_VERSION StructureVersion;
+        EFI_TCG2_VERSION ProtocolVersion;
+        UINT32 HashAlgorithmBitmap;
+        UINT32 SupportedEventLogs;
+        BOOLEAN TrEEPresentFlag;
+        UINT16 MaxCommandSize;
+        UINT16 MaxResponseSize;
+        UINT32 ManufacturerID;
+} TREE_BOOT_SERVICE_CAPABILITY;
+
+typedef UINT32 TCG_ALGORITHM_ID;
+#define TCG_ALG_SHA 0x00000004  // The SHA1 algorithm
+
+#define SHA1_DIGEST_SIZE 20
+
+typedef struct _TCG_DIGEST {
+        UINT8 Digest[SHA1_DIGEST_SIZE];
+} TCG_DIGEST;
+
+#define EV_IPL 13
+
+typedef struct _TCG_PCR_EVENT {
+        UINT32 PCRIndex;
+        UINT32 EventType;
+        struct _TCG_DIGEST digest;
+        UINT32 EventSize;
+        UINT8 Event[1];
+} TCG_PCR_EVENT;
+
+INTERFACE_DECL(_EFI_TCG);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG_STATUS_CHECK) (IN struct _EFI_TCG * This,
+                                                   OUT struct _TCG_BOOT_SERVICE_CAPABILITY * ProtocolCapability,
+                                                   OUT UINT32 * TCGFeatureFlags,
+                                                   OUT EFI_PHYSICAL_ADDRESS * EventLogLocation,
+                                                   OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG_HASH_ALL) (IN struct _EFI_TCG * This,
+                                               IN UINT8 * HashData,
+                                               IN UINT64 HashDataLen,
+                                               IN TCG_ALGORITHM_ID AlgorithmId,
+                                               IN OUT UINT64 * HashedDataLen, IN OUT UINT8 ** HashedDataResult);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG_LOG_EVENT) (IN struct _EFI_TCG * This,
+                                                IN struct _TCG_PCR_EVENT * TCGLogData,
+                                                IN OUT UINT32 * EventNumber, IN UINT32 Flags);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG_PASS_THROUGH_TO_TPM) (IN struct _EFI_TCG * This,
+                                                          IN UINT32 TpmInputParameterBlockSize,
+                                                          IN UINT8 * TpmInputParameterBlock,
+                                                          IN UINT32 TpmOutputParameterBlockSize,
+                                                          IN UINT8 * TpmOutputParameterBlock);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG_HASH_LOG_EXTEND_EVENT) (IN struct _EFI_TCG * This,
+                                                            IN EFI_PHYSICAL_ADDRESS HashData,
+                                                            IN UINT64 HashDataLen,
+                                                            IN TCG_ALGORITHM_ID AlgorithmId,
+                                                            IN struct _TCG_PCR_EVENT * TCGLogData,
+                                                            IN OUT UINT32 * EventNumber,
+                                                            OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry);
+
+typedef struct _EFI_TCG {
+        EFI_TCG_STATUS_CHECK StatusCheck;
+        EFI_TCG_HASH_ALL HashAll;
+        EFI_TCG_LOG_EVENT LogEvent;
+        EFI_TCG_PASS_THROUGH_TO_TPM PassThroughToTPM;
+        EFI_TCG_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
+} EFI_TCG;
+
+#endif
+
+/* TCG EFI Protocol Specification */
+#ifndef EFI_TCG2_GUID
+
+#define EFI_TCG2_GUID \
+        { 0x607f766c, 0x7455, 0x42be, { 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f } }
+
+typedef struct tdEFI_TCG2_PROTOCOL EFI_TCG2_PROTOCOL;
+
+typedef UINT32 EFI_TCG2_EVENT_LOG_BITMAP;
+typedef UINT32 EFI_TCG2_EVENT_LOG_FORMAT;
+typedef UINT32 EFI_TCG2_EVENT_ALGORITHM_BITMAP;
+
+typedef struct tdEFI_TCG2_BOOT_SERVICE_CAPABILITY {
+        UINT8 Size;
+        EFI_TCG2_VERSION StructureVersion;
+        EFI_TCG2_VERSION ProtocolVersion;
+        EFI_TCG2_EVENT_ALGORITHM_BITMAP HashAlgorithmBitmap;
+        EFI_TCG2_EVENT_LOG_BITMAP SupportedEventLogs;
+        BOOLEAN TPMPresentFlag;
+        UINT16 MaxCommandSize;
+        UINT16 MaxResponseSize;
+        UINT32 ManufacturerID;
+        UINT32 NumberOfPCRBanks;
+        EFI_TCG2_EVENT_ALGORITHM_BITMAP ActivePcrBanks;
+} EFI_TCG2_BOOT_SERVICE_CAPABILITY;
+
+#define EFI_TCG2_EVENT_HEADER_VERSION  1
+
+typedef struct {
+        UINT32 HeaderSize;
+        UINT16 HeaderVersion;
+        UINT32 PCRIndex;
+        UINT32 EventType;
+} _packed_ EFI_TCG2_EVENT_HEADER;
+
+typedef struct tdEFI_TCG2_EVENT {
+        UINT32 Size;
+        EFI_TCG2_EVENT_HEADER Header;
+        UINT8 Event[1];
+} _packed_ EFI_TCG2_EVENT;
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_CAPABILITY) (IN EFI_TCG2_PROTOCOL * This,
+                                                      IN OUT EFI_TCG2_BOOT_SERVICE_CAPABILITY * ProtocolCapability);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_EVENT_LOG) (IN EFI_TCG2_PROTOCOL * This,
+                                                     IN EFI_TCG2_EVENT_LOG_FORMAT EventLogFormat,
+                                                     OUT EFI_PHYSICAL_ADDRESS * EventLogLocation,
+                                                     OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry,
+                                                     OUT BOOLEAN * EventLogTruncated);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG2_HASH_LOG_EXTEND_EVENT) (IN EFI_TCG2_PROTOCOL * This,
+                                                             IN UINT64 Flags,
+                                                             IN EFI_PHYSICAL_ADDRESS DataToHash,
+                                                             IN UINT64 DataToHashLen, IN EFI_TCG2_EVENT * EfiTcgEvent);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG2_SUBMIT_COMMAND) (IN EFI_TCG2_PROTOCOL * This,
+                                                      IN UINT32 InputParameterBlockSize,
+                                                      IN UINT8 * InputParameterBlock,
+                                                      IN UINT32 OutputParameterBlockSize, IN UINT8 * OutputParameterBlock);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This, OUT UINT32 * ActivePcrBanks);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG2_SET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This, IN UINT32 ActivePcrBanks);
+
+typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This,
+                                                                          OUT UINT32 * OperationPresent, OUT UINT32 * Response);
+
+typedef struct tdEFI_TCG2_PROTOCOL {
+        EFI_TCG2_GET_CAPABILITY GetCapability;
+        EFI_TCG2_GET_EVENT_LOG GetEventLog;
+        EFI_TCG2_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
+        EFI_TCG2_SUBMIT_COMMAND SubmitCommand;
+        EFI_TCG2_GET_ACTIVE_PCR_BANKS GetActivePcrBanks;
+        EFI_TCG2_SET_ACTIVE_PCR_BANKS SetActivePcrBanks;
+        EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS GetResultOfSetActivePcrBanks;
+} EFI_TCG2;
+
+#endif
+
+#ifndef EFI_LOAD_FILE2_PROTOCOL_GUID
+#define EFI_LOAD_FILE2_PROTOCOL_GUID \
+        {0x4006c0c1, 0xfcb3, 0x403e, {0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d} }
+#define EfiLoadFile2Protocol ((EFI_GUID)EFI_LOAD_FILE2_PROTOCOL_GUID)
+#endif
+
+#define LINUX_INITRD_MEDIA_GUID \
+        {0x5568e427, 0x68fc, 0x4f3d, {0xac, 0x74, 0xca, 0x55, 0x52, 0x31, 0xcc, 0x68} }
+
+/* UEFI Platform Initialization (Vol2: DXE) */
+#ifndef EFI_SECURITY_ARCH_PROTOCOL_GUID
+
+#define EFI_SECURITY_ARCH_PROTOCOL_GUID \
+        { 0xa46423e3, 0x4617, 0x49f1, { 0xb9, 0xff, 0xd1, 0xbf, 0xa9, 0x11, 0x58, 0x39 } }
+#define EFI_SECURITY2_ARCH_PROTOCOL_GUID \
+        { 0x94ab2f58, 0x1438, 0x4ef1, { 0x91, 0x52, 0x18, 0x94, 0x1a, 0x3a, 0x0e, 0x68 } }
+
+typedef struct EFI_SECURITY_ARCH_PROTOCOL EFI_SECURITY_ARCH_PROTOCOL;
+typedef struct EFI_SECURITY2_ARCH_PROTOCOL EFI_SECURITY2_ARCH_PROTOCOL;
+
+typedef EFI_STATUS (EFIAPI *EFI_SECURITY_FILE_AUTHENTICATION_STATE)(
+                const EFI_SECURITY_ARCH_PROTOCOL *This,
+                uint32_t AuthenticationStatus,
+                const EFI_DEVICE_PATH *File);
+
+struct EFI_SECURITY_ARCH_PROTOCOL {
+        EFI_SECURITY_FILE_AUTHENTICATION_STATE FileAuthenticationState;
+};
+
+typedef EFI_STATUS (EFIAPI *EFI_SECURITY2_FILE_AUTHENTICATION)(
+                const EFI_SECURITY2_ARCH_PROTOCOL *This,
+                const EFI_DEVICE_PATH *DevicePath,
+                void *FileBuffer,
+                UINTN FileSize,
+                BOOLEAN BootPolicy);
+
+struct EFI_SECURITY2_ARCH_PROTOCOL {
+        EFI_SECURITY2_FILE_AUTHENTICATION FileAuthentication;
+};
+
+#endif
+
+#ifndef EFI_CONSOLE_CONTROL_GUID
+
+#define EFI_CONSOLE_CONTROL_GUID \
+        { 0xf42f7782, 0x12e, 0x4c12, { 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21 } }
+
+struct _EFI_CONSOLE_CONTROL_PROTOCOL;
+
+typedef enum {
+        EfiConsoleControlScreenText,
+        EfiConsoleControlScreenGraphics,
+        EfiConsoleControlScreenMaxValue,
+} EFI_CONSOLE_CONTROL_SCREEN_MODE;
+
+typedef EFI_STATUS (EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE)(
+        struct _EFI_CONSOLE_CONTROL_PROTOCOL *This,
+        EFI_CONSOLE_CONTROL_SCREEN_MODE *Mode,
+        BOOLEAN *UgaExists,
+        BOOLEAN *StdInLocked
+);
+
+typedef EFI_STATUS (EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE)(
+        struct _EFI_CONSOLE_CONTROL_PROTOCOL *This,
+        EFI_CONSOLE_CONTROL_SCREEN_MODE Mode
+);
+
+typedef EFI_STATUS (EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN)(
+        struct _EFI_CONSOLE_CONTROL_PROTOCOL *This,
+        CHAR16 *Password
+);
+
+typedef struct _EFI_CONSOLE_CONTROL_PROTOCOL {
+        EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE GetMode;
+        EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE SetMode;
+        EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN LockStdIn;
+} EFI_CONSOLE_CONTROL_PROTOCOL;
+
+#endif
+
+#ifndef EFI_IMAGE_SECURITY_DATABASE_VARIABLE
+
+#define EFI_IMAGE_SECURITY_DATABASE_VARIABLE \
+        { 0xd719b2cb, 0x3d3a, 0x4596, {0xa3, 0xbc, 0xda, 0xd0,  0xe, 0x67, 0x65, 0x6f }}
+
+#endif
+
+#ifndef EFI_SHELL_PARAMETERS_PROTOCOL_GUID
+#  define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \
+        { 0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca } }
+
+typedef struct {
+        CHAR16 **Argv;
+        UINTN Argc;
+        void *StdIn;
+        void *StdOut;
+        void *StdErr;
+} EFI_SHELL_PARAMETERS_PROTOCOL;
+#endif
+
+#ifndef EFI_WARN_UNKNOWN_GLYPH
+#  define EFI_WARN_UNKNOWN_GLYPH 1
+#endif
+
+#ifndef EFI_WARN_RESET_REQUIRED
+#  define EFI_WARN_STALE_DATA 5
+#  define EFI_WARN_FILE_SYSTEM 6
+#  define EFI_WARN_RESET_REQUIRED 7
+#  define EFI_IP_ADDRESS_CONFLICT EFIERR(34)
+#  define EFI_HTTP_ERROR EFIERR(35)
+#endif
diff --git a/src/boot/efi/no-undefined-symbols.sh b/src/boot/efi/no-undefined-symbols.sh
deleted file mode 100755
index 8bdb16a..0000000
--- a/src/boot/efi/no-undefined-symbols.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: LGPL-2.1-or-later
-set -eu
-set -o pipefail
-
-if nm -D -u "${1:?}" | grep ' U '; then
-    echo "Undefined symbols detected!"
-    exit 1
-fi
diff --git a/src/boot/efi/part-discovery.c b/src/boot/efi/part-discovery.c
new file mode 100644
index 0000000..eb22df9
--- /dev/null
+++ b/src/boot/efi/part-discovery.c
@@ -0,0 +1,287 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <efi.h>
+#include <efigpt.h>
+#include <efilib.h>
+
+#include "part-discovery.h"
+#include "util.h"
+
+union GptHeaderBuffer {
+        EFI_PARTITION_TABLE_HEADER gpt_header;
+        uint8_t space[CONST_ALIGN_TO(sizeof(EFI_PARTITION_TABLE_HEADER), 512)];
+};
+
+static EFI_DEVICE_PATH *path_replace_hd(
+                const EFI_DEVICE_PATH *path,
+                const EFI_DEVICE_PATH *node,
+                const HARDDRIVE_DEVICE_PATH *new_node) {
+
+        /* Create a new device path as a copy of path, while chopping off the remainder starting at the given
+         * node. If new_node is provided, it is appended at the end of the new path. */
+
+        assert(path);
+        assert(node);
+
+        size_t len = (uint8_t *) node - (uint8_t *) path, new_node_len = 0;
+        if (new_node)
+                new_node_len = DevicePathNodeLength(&new_node->Header);
+
+        EFI_DEVICE_PATH *ret = xmalloc(len + new_node_len + END_DEVICE_PATH_LENGTH);
+        EFI_DEVICE_PATH *end = mempcpy(ret, path, len);
+
+        if (new_node)
+                end = mempcpy(end, new_node, new_node_len);
+
+        SetDevicePathEndNode(end);
+        return ret;
+}
+
+static bool verify_gpt(union GptHeaderBuffer *gpt_header_buffer, EFI_LBA lba_expected) {
+        EFI_PARTITION_TABLE_HEADER *h;
+        uint32_t crc32, crc32_saved;
+        EFI_STATUS err;
+
+        assert(gpt_header_buffer);
+
+        h = &gpt_header_buffer->gpt_header;
+
+        /* Some superficial validation of the GPT header */
+        if (memcmp(&h->Header.Signature, "EFI PART", sizeof(h->Header.Signature)) != 0)
+                return false;
+
+        if (h->Header.HeaderSize < 92 || h->Header.HeaderSize > 512)
+                return false;
+
+        if (h->Header.Revision != 0x00010000U)
+                return false;
+
+        /* Calculate CRC check */
+        crc32_saved = h->Header.CRC32;
+        h->Header.CRC32 = 0;
+        err = BS->CalculateCrc32(gpt_header_buffer, h->Header.HeaderSize, &crc32);
+        h->Header.CRC32 = crc32_saved;
+        if (err != EFI_SUCCESS || crc32 != crc32_saved)
+                return false;
+
+        if (h->MyLBA != lba_expected)
+                return false;
+
+        if ((h->SizeOfPartitionEntry % sizeof(EFI_PARTITION_ENTRY)) != 0)
+                return false;
+
+        if (h->NumberOfPartitionEntries <= 0 || h->NumberOfPartitionEntries > 1024)
+                return false;
+
+        /* overflow check */
+        if (h->SizeOfPartitionEntry > SIZE_MAX / h->NumberOfPartitionEntries)
+                return false;
+
+        return true;
+}
+
+static EFI_STATUS try_gpt(
+                const EFI_GUID *type,
+                EFI_BLOCK_IO_PROTOCOL *block_io,
+                EFI_LBA lba,
+                EFI_LBA *ret_backup_lba, /* May be changed even on error! */
+                HARDDRIVE_DEVICE_PATH *ret_hd) {
+
+        _cleanup_free_ EFI_PARTITION_ENTRY *entries = NULL;
+        union GptHeaderBuffer gpt;
+        EFI_STATUS err;
+        uint32_t crc32;
+        size_t size;
+
+        assert(block_io);
+        assert(ret_hd);
+
+        /* Read the GPT header */
+        err = block_io->ReadBlocks(
+                        block_io,
+                        block_io->Media->MediaId,
+                        lba,
+                        sizeof(gpt), &gpt);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        /* Indicate the location of backup LBA even if the rest of the header is corrupt. */
+        if (ret_backup_lba)
+                *ret_backup_lba = gpt.gpt_header.AlternateLBA;
+
+        if (!verify_gpt(&gpt, lba))
+                return EFI_NOT_FOUND;
+
+        /* Now load the GPT entry table */
+        size = ALIGN_TO((size_t) gpt.gpt_header.SizeOfPartitionEntry * (size_t) gpt.gpt_header.NumberOfPartitionEntries, 512);
+        entries = xmalloc(size);
+
+        err = block_io->ReadBlocks(
+                        block_io,
+                        block_io->Media->MediaId,
+                        gpt.gpt_header.PartitionEntryLBA,
+                        size, entries);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        /* Calculate CRC of entries array, too */
+        err = BS->CalculateCrc32(entries, size, &crc32);
+        if (err != EFI_SUCCESS || crc32 != gpt.gpt_header.PartitionEntryArrayCRC32)
+                return EFI_CRC_ERROR;
+
+        /* Now we can finally look for xbootloader partitions. */
+        for (size_t i = 0; i < gpt.gpt_header.NumberOfPartitionEntries; i++) {
+                EFI_PARTITION_ENTRY *entry =
+                                (EFI_PARTITION_ENTRY *) ((uint8_t *) entries + gpt.gpt_header.SizeOfPartitionEntry * i);
+
+                if (!efi_guid_equal(&entry->PartitionTypeGUID, type))
+                        continue;
+
+                if (entry->EndingLBA < entry->StartingLBA) /* Bogus? */
+                        continue;
+
+                *ret_hd = (HARDDRIVE_DEVICE_PATH) {
+                        .Header = {
+                                .Type = MEDIA_DEVICE_PATH,
+                                .SubType = MEDIA_HARDDRIVE_DP,
+                        },
+                        .PartitionNumber = i + 1,
+                        .PartitionStart = entry->StartingLBA,
+                        .PartitionSize = entry->EndingLBA - entry->StartingLBA + 1,
+                        .MBRType = MBR_TYPE_EFI_PARTITION_TABLE_HEADER,
+                        .SignatureType = SIGNATURE_TYPE_GUID,
+                };
+                memcpy(ret_hd->Signature, &entry->UniquePartitionGUID, sizeof(ret_hd->Signature));
+
+                /* HARDDRIVE_DEVICE_PATH has padding, which at least OVMF does not like. */
+                SetDevicePathNodeLength(
+                                &ret_hd->Header,
+                                offsetof(HARDDRIVE_DEVICE_PATH, SignatureType) + sizeof(ret_hd->SignatureType));
+
+                return EFI_SUCCESS;
+        }
+
+        /* This GPT was fully valid, but we didn't find what we are looking for. This
+         * means there's no reason to check the second copy of the GPT header */
+        return EFI_NOT_FOUND;
+}
+
+static EFI_STATUS find_device(const EFI_GUID *type, EFI_HANDLE *device, EFI_DEVICE_PATH **ret_device_path) {
+        EFI_STATUS err;
+
+        assert(device);
+        assert(ret_device_path);
+
+        EFI_DEVICE_PATH *partition_path;
+        err = BS->HandleProtocol(device, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL), (void **) &partition_path);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        /* Find the (last) partition node itself. */
+        EFI_DEVICE_PATH *part_node = NULL;
+        for (EFI_DEVICE_PATH *node = partition_path; !IsDevicePathEnd(node); node = NextDevicePathNode(node)) {
+                if (DevicePathType(node) != MEDIA_DEVICE_PATH)
+                        continue;
+
+                if (DevicePathSubType(node) != MEDIA_HARDDRIVE_DP)
+                        continue;
+
+                part_node = node;
+        }
+
+        if (!part_node)
+                return EFI_NOT_FOUND;
+
+        /* Chop off the partition part, leaving us with the full path to the disk itself. */
+        _cleanup_free_ EFI_DEVICE_PATH *disk_path = NULL;
+        EFI_DEVICE_PATH *p = disk_path = path_replace_hd(partition_path, part_node, NULL);
+
+        EFI_HANDLE disk_handle;
+        EFI_BLOCK_IO_PROTOCOL *block_io;
+        err = BS->LocateDevicePath(MAKE_GUID_PTR(EFI_BLOCK_IO_PROTOCOL), &p, &disk_handle);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        /* The drivers for other partitions on this drive may not be initialized on fastboot firmware, so we
+         * have to ask the firmware to do just that. */
+        (void) BS->ConnectController(disk_handle, NULL, NULL, true);
+
+        err = BS->HandleProtocol(disk_handle, MAKE_GUID_PTR(EFI_BLOCK_IO_PROTOCOL), (void **) &block_io);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        /* Filter out some block devices early. (We only care about block devices that aren't
+         * partitions themselves — we look for GPT partition tables to parse after all —, and only
+         * those which contain a medium and have at least 2 blocks.) */
+        if (block_io->Media->LogicalPartition ||
+            !block_io->Media->MediaPresent ||
+            block_io->Media->LastBlock <= 1)
+                return EFI_NOT_FOUND;
+
+        /* Try several copies of the GPT header, in case one is corrupted */
+        EFI_LBA backup_lba = 0;
+        for (size_t nr = 0; nr < 3; nr++) {
+                EFI_LBA lba;
+
+                /* Read the first copy at LBA 1 and then try the backup GPT header pointed
+                 * to by the first header if that one was corrupted. As a last resort,
+                 * try the very last LBA of this block device. */
+                if (nr == 0)
+                        lba = 1;
+                else if (nr == 1 && backup_lba != 0)
+                        lba = backup_lba;
+                else if (nr == 2 && backup_lba != block_io->Media->LastBlock)
+                        lba = block_io->Media->LastBlock;
+                else
+                        continue;
+
+                HARDDRIVE_DEVICE_PATH hd;
+                err = try_gpt(type, block_io, lba,
+                        nr == 0 ? &backup_lba : NULL, /* Only get backup LBA location from first GPT header. */
+                        &hd);
+                if (err != EFI_SUCCESS) {
+                        /* GPT was valid but no XBOOT loader partition found. */
+                        if (err == EFI_NOT_FOUND)
+                                break;
+                        /* Bad GPT, try next one. */
+                        continue;
+                }
+
+                /* Patch in the data we found */
+                *ret_device_path = path_replace_hd(partition_path, part_node, &hd);
+                return EFI_SUCCESS;
+        }
+
+        /* No xbootloader partition found */
+        return EFI_NOT_FOUND;
+}
+
+EFI_STATUS partition_open(const EFI_GUID *type, EFI_HANDLE *device, EFI_HANDLE *ret_device,
+                          EFI_FILE **ret_root_dir) {
+        _cleanup_free_ EFI_DEVICE_PATH *partition_path = NULL;
+        EFI_HANDLE new_device;
+        EFI_FILE *root_dir;
+        EFI_STATUS err;
+
+        assert(type);
+        assert(device);
+        assert(ret_root_dir);
+
+        err = find_device(type, device, &partition_path);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        EFI_DEVICE_PATH *dp = partition_path;
+        err = BS->LocateDevicePath(MAKE_GUID_PTR(EFI_BLOCK_IO_PROTOCOL), &dp, &new_device);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        err = open_volume(new_device, &root_dir);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        if (ret_device)
+                *ret_device = new_device;
+        *ret_root_dir = root_dir;
+        return EFI_SUCCESS;
+}
diff --git a/src/boot/efi/part-discovery.h b/src/boot/efi/part-discovery.h
new file mode 100644
index 0000000..18d34ec
--- /dev/null
+++ b/src/boot/efi/part-discovery.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <efi.h>
+
+#define XBOOTLDR_GUID \
+        { 0xbc13c2ff, 0x59e6, 0x4262, { 0xa3, 0x52, 0xb2, 0x75, 0xfd, 0x6f, 0x71, 0x72 } }
+#define ESP_GUID \
+        { 0xc12a7328, 0xf81f, 0x11d2, { 0xba, 0x4b, 0x00, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b } }
+
+EFI_STATUS partition_open(const EFI_GUID *type, EFI_HANDLE *device, EFI_HANDLE *ret_device, EFI_FILE **ret_root_dir);
diff --git a/src/boot/efi/pe.c b/src/boot/efi/pe.c
index e657017..c946ce2 100644
--- a/src/boot/efi/pe.c
+++ b/src/boot/efi/pe.c
@@ -3,170 +3,336 @@
 #include <efi.h>
 #include <efilib.h>
 
+#include "missing_efi.h"
 #include "pe.h"
 #include "util.h"
 
-struct DosFileHeader {
-        UINT8   Magic[2];
-        UINT16  LastSize;
-        UINT16  nBlocks;
-        UINT16  nReloc;
-        UINT16  HdrSize;
-        UINT16  MinAlloc;
-        UINT16  MaxAlloc;
-        UINT16  ss;
-        UINT16  sp;
-        UINT16  Checksum;
-        UINT16  ip;
-        UINT16  cs;
-        UINT16  RelocPos;
-        UINT16  nOverlay;
-        UINT16  reserved[4];
-        UINT16  OEMId;
-        UINT16  OEMInfo;
-        UINT16  reserved2[10];
-        UINT32  ExeHeader;
-} __attribute__((packed));
+#define DOS_FILE_MAGIC "MZ"
+#define PE_FILE_MAGIC  "PE\0\0"
+#define MAX_SECTIONS 96
 
-#define PE_HEADER_MACHINE_I386          0x014c
-#define PE_HEADER_MACHINE_X64           0x8664
-#define PE_HEADER_MACHINE_ARM64         0xaa64
-#define PE_HEADER_MACHINE_ARM           0x01c2
-#define PE_HEADER_MACHINE_RISCV64       0x5064
-struct PeFileHeader {
-        UINT16  Machine;
-        UINT16  NumberOfSections;
-        UINT32  TimeDateStamp;
-        UINT32  PointerToSymbolTable;
-        UINT32  NumberOfSymbols;
-        UINT16  SizeOfOptionalHeader;
-        UINT16  Characteristics;
-} __attribute__((packed));
+#if defined(__i386__)
+#  define TARGET_MACHINE_TYPE EFI_IMAGE_MACHINE_IA32
+#  define TARGET_MACHINE_TYPE_COMPATIBILITY EFI_IMAGE_MACHINE_X64
+#elif defined(__x86_64__)
+#  define TARGET_MACHINE_TYPE EFI_IMAGE_MACHINE_X64
+#elif defined(__aarch64__)
+#  define TARGET_MACHINE_TYPE EFI_IMAGE_MACHINE_AARCH64
+#elif defined(__arm__)
+#  define TARGET_MACHINE_TYPE EFI_IMAGE_MACHINE_ARMTHUMB_MIXED
+#elif defined(__riscv) && __riscv_xlen == 64
+#  define TARGET_MACHINE_TYPE EFI_IMAGE_MACHINE_RISCV64
+#else
+#  error Unknown EFI arch
+#endif
 
-struct PeHeader {
-        UINT8   Magic[4];
-        struct PeFileHeader FileHeader;
-} __attribute__((packed));
+#ifndef TARGET_MACHINE_TYPE_COMPATIBILITY
+#  define TARGET_MACHINE_TYPE_COMPATIBILITY 0
+#endif
 
-struct PeSectionHeader {
-        UINT8   Name[8];
-        UINT32  VirtualSize;
-        UINT32  VirtualAddress;
-        UINT32  SizeOfRawData;
-        UINT32  PointerToRawData;
-        UINT32  PointerToRelocations;
-        UINT32  PointerToLinenumbers;
-        UINT16  NumberOfRelocations;
-        UINT16  NumberOfLinenumbers;
-        UINT32  Characteristics;
-} __attribute__((packed));
+typedef struct DosFileHeader {
+        uint8_t  Magic[2];
+        uint16_t LastSize;
+        uint16_t nBlocks;
+        uint16_t nReloc;
+        uint16_t HdrSize;
+        uint16_t MinAlloc;
+        uint16_t MaxAlloc;
+        uint16_t ss;
+        uint16_t sp;
+        uint16_t Checksum;
+        uint16_t ip;
+        uint16_t cs;
+        uint16_t RelocPos;
+        uint16_t nOverlay;
+        uint16_t reserved[4];
+        uint16_t OEMId;
+        uint16_t OEMInfo;
+        uint16_t reserved2[10];
+        uint32_t ExeHeader;
+} _packed_ DosFileHeader;
 
-EFI_STATUS pe_memory_locate_sections(CHAR8 *base, CHAR8 **sections, UINTN *addrs, UINTN *offsets, UINTN *sizes) {
-        struct DosFileHeader *dos;
-        struct PeHeader *pe;
-        UINTN offset;
+typedef struct CoffFileHeader {
+        uint16_t Machine;
+        uint16_t NumberOfSections;
+        uint32_t TimeDateStamp;
+        uint32_t PointerToSymbolTable;
+        uint32_t NumberOfSymbols;
+        uint16_t SizeOfOptionalHeader;
+        uint16_t Characteristics;
+} _packed_ CoffFileHeader;
 
-        dos = (struct DosFileHeader *)base;
+#define OPTHDR32_MAGIC 0x10B /* PE32  OptionalHeader */
+#define OPTHDR64_MAGIC 0x20B /* PE32+ OptionalHeader */
 
-        if (CompareMem(dos->Magic, "MZ", 2) != 0)
-                return EFI_LOAD_ERROR;
+typedef struct PeOptionalHeader {
+        uint16_t Magic;
+        uint8_t  LinkerMajor;
+        uint8_t  LinkerMinor;
+        uint32_t SizeOfCode;
+        uint32_t SizeOfInitializedData;
+        uint32_t SizeOfUninitializeData;
+        uint32_t AddressOfEntryPoint;
+        uint32_t BaseOfCode;
+        union {
+                struct { /* PE32 */
+                        uint32_t BaseOfData;
+                        uint32_t ImageBase32;
+                };
+                uint64_t ImageBase64; /* PE32+ */
+        };
+        uint32_t SectionAlignment;
+        uint32_t FileAlignment;
+        uint16_t MajorOperatingSystemVersion;
+        uint16_t MinorOperatingSystemVersion;
+        uint16_t MajorImageVersion;
+        uint16_t MinorImageVersion;
+        uint16_t MajorSubsystemVersion;
+        uint16_t MinorSubsystemVersion;
+        uint32_t Win32VersionValue;
+        uint32_t SizeOfImage;
+        uint32_t SizeOfHeaders;
+        uint32_t CheckSum;
+        uint16_t Subsystem;
+        uint16_t DllCharacteristics;
+        /* fields with different sizes for 32/64 omitted */
+} _packed_ PeOptionalHeader;
 
-        pe = (struct PeHeader *)&base[dos->ExeHeader];
-        if (CompareMem(pe->Magic, "PE\0\0", 4) != 0)
-                return EFI_LOAD_ERROR;
+typedef struct PeFileHeader {
+        uint8_t   Magic[4];
+        CoffFileHeader FileHeader;
+        PeOptionalHeader OptionalHeader;
+} _packed_ PeFileHeader;
 
-        /* PE32+ Subsystem type */
-        if (pe->FileHeader.Machine != PE_HEADER_MACHINE_X64 &&
-            pe->FileHeader.Machine != PE_HEADER_MACHINE_ARM64 &&
-            pe->FileHeader.Machine != PE_HEADER_MACHINE_I386 &&
-            pe->FileHeader.Machine != PE_HEADER_MACHINE_ARM &&
-            pe->FileHeader.Machine != PE_HEADER_MACHINE_RISCV64)
-                return EFI_LOAD_ERROR;
+typedef struct PeSectionHeader {
+        uint8_t  Name[8];
+        uint32_t VirtualSize;
+        uint32_t VirtualAddress;
+        uint32_t SizeOfRawData;
+        uint32_t PointerToRawData;
+        uint32_t PointerToRelocations;
+        uint32_t PointerToLinenumbers;
+        uint16_t NumberOfRelocations;
+        uint16_t NumberOfLinenumbers;
+        uint32_t Characteristics;
+} _packed_ PeSectionHeader;
 
-        if (pe->FileHeader.NumberOfSections > 96)
-                return EFI_LOAD_ERROR;
+static inline bool verify_dos(const DosFileHeader *dos) {
+        assert(dos);
+        return memcmp(dos->Magic, DOS_FILE_MAGIC, STRLEN(DOS_FILE_MAGIC)) == 0;
+}
 
-        offset = dos->ExeHeader + sizeof(*pe) + pe->FileHeader.SizeOfOptionalHeader;
+static inline bool verify_pe(const PeFileHeader *pe, bool allow_compatibility) {
+        assert(pe);
+        return memcmp(pe->Magic, PE_FILE_MAGIC, STRLEN(PE_FILE_MAGIC)) == 0 &&
+               (pe->FileHeader.Machine == TARGET_MACHINE_TYPE ||
+                (allow_compatibility && pe->FileHeader.Machine == TARGET_MACHINE_TYPE_COMPATIBILITY)) &&
+               pe->FileHeader.NumberOfSections > 0 &&
+               pe->FileHeader.NumberOfSections <= MAX_SECTIONS &&
+               IN_SET(pe->OptionalHeader.Magic, OPTHDR32_MAGIC, OPTHDR64_MAGIC);
+}
 
-        for (UINTN i = 0; i < pe->FileHeader.NumberOfSections; i++) {
-                struct PeSectionHeader *sect;
+static inline size_t section_table_offset(const DosFileHeader *dos, const PeFileHeader *pe) {
+        assert(dos);
+        assert(pe);
+        return dos->ExeHeader + offsetof(PeFileHeader, OptionalHeader) + pe->FileHeader.SizeOfOptionalHeader;
+}
 
-                sect = (struct PeSectionHeader *)&base[offset];
-                for (UINTN j = 0; sections[j]; j++) {
-                        if (CompareMem(sect->Name, sections[j], strlena(sections[j])) != 0)
+static void locate_sections(
+                const PeSectionHeader section_table[],
+                size_t n_table,
+                const char * const sections[],
+                size_t *offsets,
+                size_t *sizes,
+                bool in_memory) {
+
+        assert(section_table);
+        assert(sections);
+        assert(offsets);
+        assert(sizes);
+
+        size_t prev_section_addr = 0;
+
+        for (size_t i = 0; i < n_table; i++) {
+                const PeSectionHeader *sect = section_table + i;
+
+                if (in_memory) {
+                        if (prev_section_addr > sect->VirtualAddress)
+                                log_error("Overlapping PE sections detected. Boot may fail due to image memory corruption!");
+                        prev_section_addr = sect->VirtualAddress + sect->VirtualSize;
+                }
+
+                for (size_t j = 0; sections[j]; j++) {
+                        if (memcmp(sect->Name, sections[j], strlen8(sections[j])) != 0)
                                 continue;
 
-                        if (addrs)
-                                addrs[j] = (UINTN)sect->VirtualAddress;
-                        if (offsets)
-                                offsets[j] = (UINTN)sect->PointerToRawData;
-                        if (sizes)
-                                sizes[j] = (UINTN)sect->VirtualSize;
+                        offsets[j] = in_memory ? sect->VirtualAddress : sect->PointerToRawData;
+                        sizes[j] = sect->VirtualSize;
                 }
-                offset += sizeof(*sect);
         }
+}
+
+static uint32_t get_compatibility_entry_address(const DosFileHeader *dos, const PeFileHeader *pe) {
+        size_t addr = 0, size = 0;
+        static const char *sections[] = { ".compat", NULL };
+
+        /* The kernel may provide alternative PE entry points for different PE architectures. This allows
+         * booting a 64bit kernel on 32bit EFI that is otherwise running on a 64bit CPU. The locations of any
+         * such compat entry points are located in a special PE section. */
+
+        locate_sections((const PeSectionHeader *) ((const uint8_t *) dos + section_table_offset(dos, pe)),
+                        pe->FileHeader.NumberOfSections,
+                        sections,
+                        &addr,
+                        &size,
+                        /*in_memory=*/true);
+
+        if (size == 0)
+                return 0;
+
+        typedef struct {
+                uint8_t type;
+                uint8_t size;
+                uint16_t machine_type;
+                uint32_t entry_point;
+        } _packed_ LinuxPeCompat1;
+
+        while (size >= sizeof(LinuxPeCompat1) && addr % __alignof__(LinuxPeCompat1) == 0) {
+                LinuxPeCompat1 *compat = (LinuxPeCompat1 *) ((uint8_t *) dos + addr);
+
+                if (compat->type == 0 || compat->size == 0 || compat->size > size)
+                        break;
+
+                if (compat->type == 1 &&
+                    compat->size >= sizeof(LinuxPeCompat1) &&
+                    compat->machine_type == TARGET_MACHINE_TYPE)
+                        return compat->entry_point;
+
+                addr += compat->size;
+                size -= compat->size;
+        }
+
+        return 0;
+}
+
+EFI_STATUS pe_kernel_info(const void *base, uint32_t *ret_compat_address) {
+        assert(base);
+        assert(ret_compat_address);
+
+        const DosFileHeader *dos = (const DosFileHeader *) base;
+        if (!verify_dos(dos))
+                return EFI_LOAD_ERROR;
+
+        const PeFileHeader *pe = (const PeFileHeader *) ((const uint8_t *) base + dos->ExeHeader);
+        if (!verify_pe(pe, /* allow_compatibility= */ true))
+                return EFI_LOAD_ERROR;
+
+        /* Support for LINUX_INITRD_MEDIA_GUID was added in kernel stub 1.0. */
+        if (pe->OptionalHeader.MajorImageVersion < 1)
+                return EFI_UNSUPPORTED;
+
+        if (pe->FileHeader.Machine == TARGET_MACHINE_TYPE) {
+                *ret_compat_address = 0;
+                return EFI_SUCCESS;
+        }
+
+        uint32_t compat_address = get_compatibility_entry_address(dos, pe);
+        if (compat_address == 0)
+                /* Image type not supported and no compat entry found. */
+                return EFI_UNSUPPORTED;
+
+        *ret_compat_address = compat_address;
+        return EFI_SUCCESS;
+}
+
+EFI_STATUS pe_memory_locate_sections(const void *base, const char * const sections[], size_t *addrs, size_t *sizes) {
+        const DosFileHeader *dos;
+        const PeFileHeader *pe;
+        size_t offset;
+
+        assert(base);
+        assert(sections);
+        assert(addrs);
+        assert(sizes);
+
+        dos = (const DosFileHeader *) base;
+        if (!verify_dos(dos))
+                return EFI_LOAD_ERROR;
+
+        pe = (const PeFileHeader *) ((uint8_t *) base + dos->ExeHeader);
+        if (!verify_pe(pe, /* allow_compatibility= */ false))
+                return EFI_LOAD_ERROR;
+
+        offset = section_table_offset(dos, pe);
+        locate_sections((PeSectionHeader *) ((uint8_t *) base + offset),
+                        pe->FileHeader.NumberOfSections,
+                        sections,
+                        addrs,
+                        sizes,
+                        /*in_memory=*/true);
 
         return EFI_SUCCESS;
 }
 
-EFI_STATUS pe_file_locate_sections(EFI_FILE *dir, CHAR16 *path, CHAR8 **sections, UINTN *addrs, UINTN *offsets, UINTN *sizes) {
-        EFI_FILE_HANDLE handle;
-        struct DosFileHeader dos;
-        struct PeHeader pe;
-        UINTN len;
-        UINTN headerlen;
+EFI_STATUS pe_file_locate_sections(
+                EFI_FILE *dir,
+                const char16_t *path,
+                const char * const sections[],
+                size_t *offsets,
+                size_t *sizes) {
+        _cleanup_free_ PeSectionHeader *section_table = NULL;
+        _cleanup_(file_closep) EFI_FILE *handle = NULL;
+        DosFileHeader dos;
+        PeFileHeader pe;
+        size_t len, section_table_len;
         EFI_STATUS err;
-        _cleanup_freepool_ CHAR8 *header = NULL;
 
-        err = uefi_call_wrapper(dir->Open, 5, dir, &handle, path, EFI_FILE_MODE_READ, 0ULL);
-        if (EFI_ERROR(err))
+        assert(dir);
+        assert(path);
+        assert(sections);
+        assert(offsets);
+        assert(sizes);
+
+        err = dir->Open(dir, &handle, (char16_t *) path, EFI_FILE_MODE_READ, 0ULL);
+        if (err != EFI_SUCCESS)
                 return err;
 
-        /* MS-DOS stub */
         len = sizeof(dos);
-        err = uefi_call_wrapper(handle->Read, 3, handle, &len, &dos);
-        if (EFI_ERROR(err))
-                goto out;
-        if (len != sizeof(dos)) {
-                err = EFI_LOAD_ERROR;
-                goto out;
-        }
+        err = handle->Read(handle, &len, &dos);
+        if (err != EFI_SUCCESS)
+                return err;
+        if (len != sizeof(dos) || !verify_dos(&dos))
+                return EFI_LOAD_ERROR;
 
-        err = uefi_call_wrapper(handle->SetPosition, 2, handle, dos.ExeHeader);
-        if (EFI_ERROR(err))
-                goto out;
+        err = handle->SetPosition(handle, dos.ExeHeader);
+        if (err != EFI_SUCCESS)
+                return err;
 
         len = sizeof(pe);
-        err = uefi_call_wrapper(handle->Read, 3, handle, &len, &pe);
-        if (EFI_ERROR(err))
-                goto out;
-        if (len != sizeof(pe)) {
-                err = EFI_LOAD_ERROR;
-                goto out;
-        }
+        err = handle->Read(handle, &len, &pe);
+        if (err != EFI_SUCCESS)
+                return err;
+        if (len != sizeof(pe) || !verify_pe(&pe, /* allow_compatibility= */ false))
+                return EFI_LOAD_ERROR;
 
-        headerlen = sizeof(dos) + sizeof(pe) + pe.FileHeader.SizeOfOptionalHeader + pe.FileHeader.NumberOfSections * sizeof(struct PeSectionHeader);
-        header = AllocatePool(headerlen);
-        if (!header) {
-                err = EFI_OUT_OF_RESOURCES;
-                goto out;
-        }
-        len = headerlen;
-        err = uefi_call_wrapper(handle->SetPosition, 2, handle, 0);
-        if (EFI_ERROR(err))
-                goto out;
+        section_table_len = pe.FileHeader.NumberOfSections * sizeof(PeSectionHeader);
+        section_table = xmalloc(section_table_len);
+        if (!section_table)
+                return EFI_OUT_OF_RESOURCES;
 
-        err = uefi_call_wrapper(handle->Read, 3, handle, &len, header);
-        if (EFI_ERROR(err))
-                goto out;
+        err = handle->SetPosition(handle, section_table_offset(&dos, &pe));
+        if (err != EFI_SUCCESS)
+                return err;
 
-        if (len != headerlen) {
-                err = EFI_LOAD_ERROR;
-                goto out;
-        }
+        len = section_table_len;
+        err = handle->Read(handle, &len, section_table);
+        if (err != EFI_SUCCESS)
+                return err;
+        if (len != section_table_len)
+                return EFI_LOAD_ERROR;
 
-        err = pe_memory_locate_sections(header, sections, addrs, offsets, sizes);
-out:
-        uefi_call_wrapper(handle->Close, 1, handle);
-        return err;
+        locate_sections(section_table, pe.FileHeader.NumberOfSections,
+                        sections, offsets, sizes, /*in_memory=*/false);
+
+        return EFI_SUCCESS;
 }
diff --git a/src/boot/efi/pe.h b/src/boot/efi/pe.h
index 06a0fcd..99dcbb3 100644
--- a/src/boot/efi/pe.h
+++ b/src/boot/efi/pe.h
@@ -1,9 +1,20 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <efi.h>
+#include <efidef.h>
+#include <uchar.h>
 
-EFI_STATUS pe_memory_locate_sections(CHAR8 *base,
-                                     CHAR8 **sections, UINTN *addrs, UINTN *offsets, UINTN *sizes);
-EFI_STATUS pe_file_locate_sections(EFI_FILE *dir, CHAR16 *path,
-                                   CHAR8 **sections, UINTN *addrs, UINTN *offsets, UINTN *sizes);
+EFI_STATUS pe_memory_locate_sections(
+                const void *base,
+                const char * const sections[],
+                size_t *addrs,
+                size_t *sizes);
+
+EFI_STATUS pe_file_locate_sections(
+                EFI_FILE *dir,
+                const char16_t *path,
+                const char * const sections[],
+                size_t *offsets,
+                size_t *sizes);
+
+EFI_STATUS pe_kernel_info(const void *base, uint32_t *ret_compat_address);
diff --git a/src/boot/efi/random-seed.c b/src/boot/efi/random-seed.c
index 939daf3..0370de1 100644
--- a/src/boot/efi/random-seed.c
+++ b/src/boot/efi/random-seed.c
@@ -3,6 +3,7 @@
 #include <efi.h>
 #include <efilib.h>
 
+#include "memory-util-fundamental.h"
 #include "missing_efi.h"
 #include "random-seed.h"
 #include "secure-boot.h"
@@ -12,147 +13,60 @@
 #define RANDOM_MAX_SIZE_MIN (32U)
 #define RANDOM_MAX_SIZE_MAX (32U*1024U)
 
-#define EFI_RNG_GUID &(EFI_GUID) EFI_RNG_PROTOCOL_GUID
+struct linux_efi_random_seed {
+        uint32_t size;
+        uint8_t seed[];
+};
+
+#define LINUX_EFI_RANDOM_SEED_TABLE_GUID \
+        { 0x1ce1e5bc, 0x7ceb, 0x42f2, { 0x81, 0xe5, 0x8a, 0xad, 0xf1, 0x80, 0xf5, 0x7b } }
 
 /* SHA256 gives us 256/8=32 bytes */
 #define HASH_VALUE_SIZE 32
 
-static EFI_STATUS acquire_rng(UINTN size, VOID **ret) {
-        _cleanup_freepool_ VOID *data = NULL;
+/* Linux's RNG is 256 bits, so let's provide this much */
+#define DESIRED_SEED_SIZE 32
+
+/* Some basic domain separation in case somebody uses this data elsewhere */
+#define HASH_LABEL "systemd-boot random seed label v1"
+
+static EFI_STATUS acquire_rng(void *ret, size_t size) {
         EFI_RNG_PROTOCOL *rng;
         EFI_STATUS err;
 
+        assert(ret);
+
         /* Try to acquire the specified number of bytes from the UEFI RNG */
 
-        err = LibLocateProtocol(EFI_RNG_GUID, (VOID**) &rng);
-        if (EFI_ERROR(err))
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_RNG_PROTOCOL), NULL, (void **) &rng);
+        if (err != EFI_SUCCESS)
                 return err;
         if (!rng)
                 return EFI_UNSUPPORTED;
 
-        data = AllocatePool(size);
-        if (!data)
-                return log_oom();
-
-        err = uefi_call_wrapper(rng->GetRNG, 3, rng, NULL, size, data);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Failed to acquire RNG data: %r", err);
-
-        *ret = TAKE_PTR(data);
+        err = rng->GetRNG(rng, NULL, size, ret);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to acquire RNG data: %m");
         return EFI_SUCCESS;
 }
 
-static VOID hash_once(
-                const VOID *old_seed,
-                const VOID *rng,
-                UINTN size,
-                const VOID *system_token,
-                UINTN system_token_size,
-                UINTN counter,
-                UINT8 ret[static HASH_VALUE_SIZE]) {
-
-        /* This hashes together:
-         *
-         *      1. The contents of the old seed file
-         *      2. Some random data acquired from the UEFI RNG (optional)
-         *      3. Some 'system token' the installer installed as EFI variable (optional)
-         *      4. A counter value
-         *
-         * And writes the result to the specified buffer.
-         */
-
-        struct sha256_ctx hash;
-
-        sha256_init_ctx(&hash);
-        sha256_process_bytes(old_seed, size, &hash);
-        if (rng)
-                sha256_process_bytes(rng, size, &hash);
-        if (system_token_size > 0)
-                sha256_process_bytes(system_token, system_token_size, &hash);
-        sha256_process_bytes(&counter, sizeof(counter), &hash);
-        sha256_finish_ctx(&hash, ret);
-}
-
-static EFI_STATUS hash_many(
-                const VOID *old_seed,
-                const VOID *rng,
-                UINTN size,
-                const VOID *system_token,
-                UINTN system_token_size,
-                UINTN counter_start,
-                UINTN n,
-                VOID **ret) {
-
-        _cleanup_freepool_ VOID *output = NULL;
-
-        /* Hashes the specified parameters in counter mode, generating n hash values, with the counter in the
-         * range counter_start…counter_start+n-1. */
-
-        output = AllocatePool(n * HASH_VALUE_SIZE);
-        if (!output)
-                return log_oom();
-
-        for (UINTN i = 0; i < n; i++)
-                hash_once(old_seed, rng, size,
-                          system_token, system_token_size,
-                          counter_start + i,
-                          (UINT8*) output + (i * HASH_VALUE_SIZE));
-
-        *ret = TAKE_PTR(output);
-        return EFI_SUCCESS;
-}
-
-static EFI_STATUS mangle_random_seed(
-                const VOID *old_seed,
-                const VOID *rng,
-                UINTN size,
-                const VOID *system_token,
-                UINTN system_token_size,
-                VOID **ret_new_seed,
-                VOID **ret_for_kernel) {
-
-        _cleanup_freepool_ VOID *new_seed = NULL, *for_kernel = NULL;
+static EFI_STATUS acquire_system_token(void **ret, size_t *ret_size) {
+        _cleanup_free_ char *data = NULL;
         EFI_STATUS err;
-        UINTN n;
+        size_t size;
 
-        /* This takes the old seed file contents, an (optional) random number acquired from the UEFI RNG, an
-         * (optional) system 'token' installed once by the OS installer in an EFI variable, and hashes them
-         * together in counter mode, generating a new seed (to replace the file on disk) and the seed for the
-         * kernel. To keep things simple, the new seed and kernel data have the same size as the old seed and
-         * RNG data. */
+        assert(ret);
+        assert(ret_size);
 
-        n = (size + HASH_VALUE_SIZE - 1) / HASH_VALUE_SIZE;
-
-        /* Begin hashing in counter mode at counter 0 for the new seed for the disk */
-        err = hash_many(old_seed, rng, size, system_token, system_token_size, 0, n, &new_seed);
-        if (EFI_ERROR(err))
-                return err;
-
-        /* Continue counting at 'n' for the seed for the kernel */
-        err = hash_many(old_seed, rng, size, system_token, system_token_size, n, n, &for_kernel);
-        if (EFI_ERROR(err))
-                return err;
-
-        *ret_new_seed = TAKE_PTR(new_seed);
-        *ret_for_kernel = TAKE_PTR(for_kernel);
-
-        return EFI_SUCCESS;
-}
-
-static EFI_STATUS acquire_system_token(VOID **ret, UINTN *ret_size) {
-        _cleanup_freepool_ CHAR8 *data = NULL;
-        EFI_STATUS err;
-        UINTN size;
-
-        err = efivar_get_raw(LOADER_GUID, L"LoaderSystemToken", &data, &size);
-        if (EFI_ERROR(err)) {
+        err = efivar_get_raw(MAKE_GUID_PTR(LOADER), u"LoaderSystemToken", &data, &size);
+        if (err != EFI_SUCCESS) {
                 if (err != EFI_NOT_FOUND)
-                        log_error_stall(L"Failed to read LoaderSystemToken EFI variable: %r", err);
+                        log_error_status(err, "Failed to read LoaderSystemToken EFI variable: %m");
                 return err;
         }
 
         if (size <= 0)
-                return log_error_status_stall(EFI_NOT_FOUND, L"System token too short, ignoring.");
+                return log_error_status(EFI_NOT_FOUND, "System token too short, ignoring.");
 
         *ret = TAKE_PTR(data);
         *ret_size = size;
@@ -160,9 +74,9 @@
         return EFI_SUCCESS;
 }
 
-static VOID validate_sha256(void) {
+static void validate_sha256(void) {
 
-#ifndef __OPTIMIZE__
+#ifdef EFI_DEBUG
         /* Let's validate our SHA256 implementation. We stole it from glibc, and converted it to UEFI
          * style. We better check whether it does the right stuff. We use the simpler test vectors from the
          * SHA spec. Note that we strip this out in optimization builds. */
@@ -196,107 +110,219 @@
                     0xaf, 0xac, 0x45, 0x03, 0x7a, 0xfe, 0xe9, 0xd1 }},
         };
 
-        for (UINTN i = 0; i < ELEMENTSOF(array); i++) {
-                struct sha256_ctx hash;
-                uint8_t result[HASH_VALUE_SIZE];
-
-                sha256_init_ctx(&hash);
-                sha256_process_bytes(array[i].string, strlena((const CHAR8*) array[i].string), &hash);
-                sha256_finish_ctx(&hash, result);
-
-                if (CompareMem(result, array[i].hash, HASH_VALUE_SIZE) != 0) {
-                        log_error_stall(L"SHA256 failed validation.");
-                        return;
-                }
-        }
-
-        Print(L"SHA256 validated\n");
+        for (size_t i = 0; i < ELEMENTSOF(array); i++)
+                assert(memcmp(SHA256_DIRECT(array[i].string, strlen8(array[i].string)), array[i].hash, HASH_VALUE_SIZE) == 0);
 #endif
 }
 
-EFI_STATUS process_random_seed(EFI_FILE *root_dir, RandomSeedMode mode) {
-        _cleanup_freepool_ VOID *seed = NULL, *new_seed = NULL, *rng = NULL, *for_kernel = NULL, *system_token = NULL;
-        _cleanup_(FileHandleClosep) EFI_FILE_HANDLE handle = NULL;
-        UINTN size, rsize, wsize, system_token_size = 0;
-        _cleanup_freepool_ EFI_FILE_INFO *info = NULL;
+EFI_STATUS process_random_seed(EFI_FILE *root_dir) {
+        uint8_t random_bytes[DESIRED_SEED_SIZE], hash_key[HASH_VALUE_SIZE];
+        _cleanup_free_ struct linux_efi_random_seed *new_seed_table = NULL;
+        struct linux_efi_random_seed *previous_seed_table = NULL;
+        _cleanup_free_ void *seed = NULL, *system_token = NULL;
+        _cleanup_(file_closep) EFI_FILE *handle = NULL;
+        _cleanup_free_ EFI_FILE_INFO *info = NULL;
+        struct sha256_ctx hash;
+        uint64_t uefi_monotonic_counter = 0;
+        size_t size, rsize, wsize;
+        bool seeded_by_efi = false;
         EFI_STATUS err;
+        EFI_TIME now;
+
+        CLEANUP_ERASE(random_bytes);
+        CLEANUP_ERASE(hash_key);
+        CLEANUP_ERASE(hash);
+
+        assert(root_dir);
+        assert_cc(DESIRED_SEED_SIZE == HASH_VALUE_SIZE);
 
         validate_sha256();
 
-        if (mode == RANDOM_SEED_OFF)
-                return EFI_NOT_FOUND;
+        /* hash = LABEL || sizeof(input1) || input1 || ... || sizeof(inputN) || inputN */
+        sha256_init_ctx(&hash);
 
-        /* Let's better be safe than sorry, and for now disable this logic in SecureBoot mode, so that we
-         * don't credit a random seed that is not authenticated. */
-        if (secure_boot_enabled())
-                return EFI_NOT_FOUND;
+        /* Some basic domain separation in case somebody uses this data elsewhere */
+        sha256_process_bytes(HASH_LABEL, sizeof(HASH_LABEL) - 1, &hash);
 
-        /* Get some system specific seed that the installer might have placed in an EFI variable. We include
-         * it in our hash. This is protection against golden master image sloppiness, and it remains on the
-         * system, even when disk images are duplicated or swapped out. */
-        err = acquire_system_token(&system_token, &system_token_size);
-        if (mode != RANDOM_SEED_ALWAYS && EFI_ERROR(err))
-                return err;
+        previous_seed_table = find_configuration_table(MAKE_GUID_PTR(LINUX_EFI_RANDOM_SEED_TABLE));
+        if (!previous_seed_table) {
+                size = 0;
+                sha256_process_bytes(&size, sizeof(size), &hash);
+        } else {
+                size = previous_seed_table->size;
+                seeded_by_efi = size >= DESIRED_SEED_SIZE;
+                sha256_process_bytes(&size, sizeof(size), &hash);
+                sha256_process_bytes(previous_seed_table->seed, size, &hash);
 
-        err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, (CHAR16*) L"\\loader\\random-seed", EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0ULL);
-        if (EFI_ERROR(err)) {
-                if (err != EFI_NOT_FOUND && err != EFI_WRITE_PROTECTED)
-                        log_error_stall(L"Failed to open random seed file: %r", err);
-                return err;
+                /* Zero and free the previous seed table only at the end after we've managed to install a new
+                 * one, so that in case this function fails or aborts, Linux still receives whatever the
+                 * previous bootloader chain set. So, the next line of this block is not an explicit_bzero()
+                 * call. */
         }
 
-        info = LibFileInfo(handle);
-        if (!info)
-                return log_oom();
-
-        size = info->FileSize;
-        if (size < RANDOM_MAX_SIZE_MIN)
-                return log_error_status_stall(EFI_INVALID_PARAMETER, L"Random seed file is too short.");
-
-        if (size > RANDOM_MAX_SIZE_MAX)
-                return log_error_status_stall(EFI_INVALID_PARAMETER, L"Random seed file is too large.");
-
-        seed = AllocatePool(size);
-        if (!seed)
-                return log_oom();
-
-        rsize = size;
-        err = uefi_call_wrapper(handle->Read, 3, handle, &rsize, seed);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Failed to read random seed file: %r", err);
-        if (rsize != size)
-                return log_error_status_stall(EFI_PROTOCOL_ERROR, L"Short read on random seed file.");
-
-        err = uefi_call_wrapper(handle->SetPosition, 2, handle, 0);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Failed to seek to beginning of random seed file: %r", err);
-
         /* Request some random data from the UEFI RNG. We don't need this to work safely, but it's a good
          * idea to use it because it helps us for cases where users mistakenly include a random seed in
          * golden master images that are replicated many times. */
-        (VOID) acquire_rng(size, &rng); /* It's fine if this fails */
+        err = acquire_rng(random_bytes, sizeof(random_bytes));
+        if (err != EFI_SUCCESS) {
+                size = 0;
+                /* If we can't get any randomness from EFI itself, then we'll only be relying on what's in
+                 * ESP. But ESP is mutable, so if secure boot is enabled, we probably shouldn't trust that
+                 * alone, in which case we bail out early. */
+                if (!seeded_by_efi && secure_boot_enabled())
+                        return EFI_NOT_FOUND;
+        } else {
+                seeded_by_efi = true;
+                size = sizeof(random_bytes);
+        }
+        sha256_process_bytes(&size, sizeof(size), &hash);
+        sha256_process_bytes(random_bytes, size, &hash);
 
-        /* Calculate new random seed for the disk and what to pass to the kernel */
-        err = mangle_random_seed(seed, rng, size, system_token, system_token_size, &new_seed, &for_kernel);
-        if (EFI_ERROR(err))
+        /* Get some system specific seed that the installer might have placed in an EFI variable. We include
+         * it in our hash. This is protection against golden master image sloppiness, and it remains on the
+         * system, even when disk images are duplicated or swapped out. */
+        size = 0;
+        err = acquire_system_token(&system_token, &size);
+        if ((err != EFI_SUCCESS || size < DESIRED_SEED_SIZE) && !seeded_by_efi)
                 return err;
+        sha256_process_bytes(&size, sizeof(size), &hash);
+        if (system_token) {
+                sha256_process_bytes(system_token, size, &hash);
+                explicit_bzero_safe(system_token, size);
+        }
 
+        err = root_dir->Open(
+                        root_dir,
+                        &handle,
+                        (char16_t *) u"\\loader\\random-seed",
+                        EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE,
+                        0);
+        if (err != EFI_SUCCESS) {
+                if (err != EFI_NOT_FOUND && err != EFI_WRITE_PROTECTED)
+                        log_error_status(err, "Failed to open random seed file: %m");
+                return err;
+        }
+
+        err = get_file_info_harder(handle, &info, NULL);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to get file info for random seed: %m");
+
+        size = info->FileSize;
+        if (size < RANDOM_MAX_SIZE_MIN)
+                return log_error("Random seed file is too short.");
+
+        if (size > RANDOM_MAX_SIZE_MAX)
+                return log_error("Random seed file is too large.");
+
+        seed = xmalloc(size);
+        rsize = size;
+        err = handle->Read(handle, &rsize, seed);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to read random seed file: %m");
+        if (rsize != size) {
+                explicit_bzero_safe(seed, rsize);
+                return log_error_status(EFI_PROTOCOL_ERROR, "Short read on random seed file.");
+        }
+
+        sha256_process_bytes(&size, sizeof(size), &hash);
+        sha256_process_bytes(seed, size, &hash);
+        explicit_bzero_safe(seed, size);
+
+        err = handle->SetPosition(handle, 0);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to seek to beginning of random seed file: %m");
+
+        /* Let's also include the UEFI monotonic counter (which is supposedly increasing on every single
+         * boot) in the hash, so that even if the changes to the ESP for some reason should not be
+         * persistent, the random seed we generate will still be different on every single boot. */
+        err = BS->GetNextMonotonicCount(&uefi_monotonic_counter);
+        if (err != EFI_SUCCESS && !seeded_by_efi)
+                return log_error_status(err, "Failed to acquire UEFI monotonic counter: %m");
+        size = sizeof(uefi_monotonic_counter);
+        sha256_process_bytes(&size, sizeof(size), &hash);
+        sha256_process_bytes(&uefi_monotonic_counter, size, &hash);
+
+        err = RT->GetTime(&now, NULL);
+        size = err == EFI_SUCCESS ? sizeof(now) : 0; /* Known to be flaky, so don't bark on error. */
+        sha256_process_bytes(&size, sizeof(size), &hash);
+        sha256_process_bytes(&now, size, &hash);
+
+        /* hash_key = HASH(hash) */
+        sha256_finish_ctx(&hash, hash_key);
+
+        /* hash = hash_key || 0 */
+        sha256_init_ctx(&hash);
+        sha256_process_bytes(hash_key, sizeof(hash_key), &hash);
+        sha256_process_bytes(&(const uint8_t){ 0 }, sizeof(uint8_t), &hash);
+        /* random_bytes = HASH(hash) */
+        sha256_finish_ctx(&hash, random_bytes);
+
+        size = sizeof(random_bytes);
+        /* If the file size is too large, zero out the remaining bytes on disk. */
+        if (size < info->FileSize) {
+                err = handle->SetPosition(handle, size);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Failed to seek to offset of random seed file: %m");
+                wsize = info->FileSize - size;
+                err = handle->Write(handle, &wsize, seed /* All zeros now */);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Failed to write random seed file: %m");
+                if (wsize != info->FileSize - size)
+                        return log_error_status(EFI_PROTOCOL_ERROR, "Short write on random seed file.");
+                err = handle->Flush(handle);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Failed to flush random seed file: %m");
+                err = handle->SetPosition(handle, 0);
+                if (err != EFI_SUCCESS)
+                        return log_error_status(err, "Failed to seek to beginning of random seed file: %m");
+
+                /* We could truncate the file here with something like:
+                 *
+                 *     info->FileSize = size;
+                 *     err = handle->SetInfo(handle, &GenericFileInfo, info->Size, info);
+                 *     if (err != EFI_SUCCESS)
+                 *             return log_error_status(err, "Failed to truncate random seed file: %u");
+                 *
+                 * But this is considered slightly risky, because EFI filesystem drivers are a little bit
+                 * flimsy. So instead we rely on userspace eventually truncating this when it writes a new
+                 * seed. For now the best we do is zero it. */
+        }
         /* Update the random seed on disk before we use it */
         wsize = size;
-        err = uefi_call_wrapper(handle->Write, 3, handle, &wsize, new_seed);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Failed to write random seed file: %r", err);
+        err = handle->Write(handle, &wsize, random_bytes);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to write random seed file: %m");
         if (wsize != size)
-                return log_error_status_stall(EFI_PROTOCOL_ERROR, L"Short write on random seed file.");
+                return log_error_status(EFI_PROTOCOL_ERROR, "Short write on random seed file.");
+        err = handle->Flush(handle);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to flush random seed file: %m");
 
-        err = uefi_call_wrapper(handle->Flush, 1, handle);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Failed to flush random seed file: %r", err);
+        err = BS->AllocatePool(EfiACPIReclaimMemory,
+                               offsetof(struct linux_efi_random_seed, seed) + DESIRED_SEED_SIZE,
+                               (void **) &new_seed_table);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to allocate EFI table for random seed: %m");
+        new_seed_table->size = DESIRED_SEED_SIZE;
 
-        /* We are good to go */
-        err = efivar_set_raw(LOADER_GUID, L"LoaderRandomSeed", for_kernel, size, 0);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Failed to write random seed to EFI variable: %r", err);
+        /* hash = hash_key || 1 */
+        sha256_init_ctx(&hash);
+        sha256_process_bytes(hash_key, sizeof(hash_key), &hash);
+        sha256_process_bytes(&(const uint8_t){ 1 }, sizeof(uint8_t), &hash);
+        /* new_seed_table->seed = HASH(hash) */
+        sha256_finish_ctx(&hash, new_seed_table->seed);
+
+        err = BS->InstallConfigurationTable(MAKE_GUID_PTR(LINUX_EFI_RANDOM_SEED_TABLE), new_seed_table);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed to install EFI table for random seed: %m");
+        TAKE_PTR(new_seed_table);
+
+        if (previous_seed_table) {
+                /* Now that we've succeeded in installing the new table, we can safely nuke the old one. */
+                explicit_bzero_safe(previous_seed_table->seed, previous_seed_table->size);
+                explicit_bzero_safe(previous_seed_table, sizeof(*previous_seed_table));
+                free(previous_seed_table);
+        }
 
         return EFI_SUCCESS;
 }
diff --git a/src/boot/efi/random-seed.h b/src/boot/efi/random-seed.h
index f14da80..40aaf85 100644
--- a/src/boot/efi/random-seed.h
+++ b/src/boot/efi/random-seed.h
@@ -2,14 +2,5 @@
 #pragma once
 
 #include <efi.h>
-#include <errno.h>
 
-typedef enum RandomSeedMode {
-        RANDOM_SEED_OFF,
-        RANDOM_SEED_WITH_SYSTEM_TOKEN,
-        RANDOM_SEED_ALWAYS,
-        _RANDOM_SEED_MODE_MAX,
-        _RANDOM_SEED_MODE_INVALID = -EINVAL,
-} RandomSeedMode;
-
-EFI_STATUS process_random_seed(EFI_FILE *root_dir, RandomSeedMode mode);
+EFI_STATUS process_random_seed(EFI_FILE *root_dir);
diff --git a/src/boot/efi/secure-boot.c b/src/boot/efi/secure-boot.c
index c1dfcfc..8b796db 100644
--- a/src/boot/efi/secure-boot.c
+++ b/src/boot/efi/secure-boot.c
@@ -1,20 +1,224 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "console.h"
+#include "sbat.h"
 #include "secure-boot.h"
 #include "util.h"
+#include "vmm.h"
 
-BOOLEAN secure_boot_enabled(void) {
-        BOOLEAN secure;
+bool secure_boot_enabled(void) {
+        bool secure = false;  /* avoid false maybe-uninitialized warning */
         EFI_STATUS err;
 
-        err = efivar_get_boolean_u8(EFI_GLOBAL_GUID, L"SecureBoot", &secure);
+        err = efivar_get_boolean_u8(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"SecureBoot", &secure);
 
-        return !EFI_ERROR(err) && secure;
+        return err == EFI_SUCCESS && secure;
+}
+
+SecureBootMode secure_boot_mode(void) {
+        bool secure, audit = false, deployed = false, setup = false;
+        EFI_STATUS err;
+
+        err = efivar_get_boolean_u8(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"SecureBoot", &secure);
+        if (err != EFI_SUCCESS)
+                return SECURE_BOOT_UNSUPPORTED;
+
+        /* We can assume false for all these if they are abscent (AuditMode and
+         * DeployedMode may not exist on older firmware). */
+        (void) efivar_get_boolean_u8(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"AuditMode", &audit);
+        (void) efivar_get_boolean_u8(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"DeployedMode", &deployed);
+        (void) efivar_get_boolean_u8(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"SetupMode", &setup);
+
+        return decode_secure_boot_mode(secure, audit, deployed, setup);
 }
 
 #ifdef SBAT_DISTRO
-static const char sbat[] _used_ _section_ (".sbat") _align_ (512) =
-        "sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md\n"
-        SBAT_PROJECT ",1,The systemd Developers," SBAT_PROJECT "," PROJECT_VERSION "," PROJECT_URL "\n"
-        SBAT_PROJECT "." SBAT_DISTRO "," STRINGIFY(SBAT_DISTRO_GENERATION) "," SBAT_DISTRO_SUMMARY "," SBAT_DISTRO_PKGNAME "," SBAT_DISTRO_VERSION "," SBAT_DISTRO_URL "\n";
+static const char sbat[] _used_ _section_(".sbat") = SBAT_SECTION_TEXT;
 #endif
+
+EFI_STATUS secure_boot_enroll_at(EFI_FILE *root_dir, const char16_t *path, bool force) {
+        assert(root_dir);
+        assert(path);
+
+        EFI_STATUS err;
+
+        clear_screen(COLOR_NORMAL);
+
+        /* Enrolling secure boot keys is safe to do in virtualized environments as there is nothing
+         * we can brick there. */
+        bool is_safe = in_hypervisor();
+
+        if (!is_safe && !force)
+                return EFI_SUCCESS;
+
+        printf("Enrolling secure boot keys from directory: %ls\n", path);
+
+        if (!is_safe) {
+                printf("Warning: Enrolling custom Secure Boot keys might soft-brick your machine!\n");
+
+                unsigned timeout_sec = 15;
+                for (;;) {
+                        printf("\rEnrolling in %2u s, press any key to abort.", timeout_sec);
+
+                        uint64_t key;
+                        err = console_key_read(&key, 1000 * 1000);
+                        if (err == EFI_NOT_READY)
+                                continue;
+                        if (err == EFI_TIMEOUT) {
+                                if (timeout_sec == 0) /* continue enrolling keys */
+                                        break;
+                                timeout_sec--;
+                                continue;
+                        }
+                        if (err != EFI_SUCCESS)
+                                return log_error_status(
+                                                err,
+                                                "Error waiting for user input to enroll Secure Boot keys: %m");
+
+                        /* user aborted, returning EFI_SUCCESS here allows the user to go back to the menu */
+                        return EFI_SUCCESS;
+                }
+        }
+
+        _cleanup_(file_closep) EFI_FILE *dir = NULL;
+
+        err = open_directory(root_dir, path, &dir);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Failed opening keys directory %ls: %m", path);
+
+        struct {
+                const char16_t *name;
+                const char16_t *filename;
+                const EFI_GUID vendor;
+                char *buffer;
+                size_t size;
+        } sb_vars[] = {
+                { u"db",  u"db.auth",  EFI_IMAGE_SECURITY_DATABASE_VARIABLE, NULL, 0 },
+                { u"KEK", u"KEK.auth", EFI_GLOBAL_VARIABLE, NULL, 0 },
+                { u"PK",  u"PK.auth",  EFI_GLOBAL_VARIABLE, NULL, 0 },
+        };
+
+        /* Make sure all keys files exist before we start enrolling them by loading them from the disk first. */
+        for (size_t i = 0; i < ELEMENTSOF(sb_vars); i++) {
+                err = file_read(dir, sb_vars[i].filename, 0, 0, &sb_vars[i].buffer, &sb_vars[i].size);
+                if (err != EFI_SUCCESS) {
+                        log_error_status(err, "Failed reading file %ls\\%ls: %m", path, sb_vars[i].filename);
+                        goto out_deallocate;
+                }
+        }
+
+        for (size_t i = 0; i < ELEMENTSOF(sb_vars); i++) {
+                uint32_t sb_vars_opts =
+                        EFI_VARIABLE_NON_VOLATILE |
+                        EFI_VARIABLE_BOOTSERVICE_ACCESS |
+                        EFI_VARIABLE_RUNTIME_ACCESS |
+                        EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS;
+
+                err = efivar_set_raw(&sb_vars[i].vendor, sb_vars[i].name, sb_vars[i].buffer, sb_vars[i].size, sb_vars_opts);
+                if (err != EFI_SUCCESS) {
+                        log_error_status(err, "Failed to write %ls secure boot variable: %m", sb_vars[i].name);
+                        goto out_deallocate;
+                }
+        }
+
+        /* The system should be in secure boot mode now and we could continue a regular boot. But at least
+         * TPM PCR7 measurements should change on next boot. Reboot now so that any OS we load does not end
+         * up relying on the old PCR state. */
+        RT->ResetSystem(EfiResetCold, EFI_SUCCESS, 0, NULL);
+        assert_not_reached();
+
+out_deallocate:
+        for (size_t i = 0; i < ELEMENTSOF(sb_vars); i++)
+                free(sb_vars[i].buffer);
+
+        return err;
+}
+
+static struct SecurityOverride {
+        EFI_SECURITY_ARCH_PROTOCOL *security;
+        EFI_SECURITY2_ARCH_PROTOCOL *security2;
+        EFI_SECURITY_FILE_AUTHENTICATION_STATE original_hook;
+        EFI_SECURITY2_FILE_AUTHENTICATION original_hook2;
+
+        security_validator_t validator;
+        const void *validator_ctx;
+} security_override;
+
+static EFIAPI EFI_STATUS security_hook(
+                const EFI_SECURITY_ARCH_PROTOCOL *this,
+                uint32_t authentication_status,
+                const EFI_DEVICE_PATH *file) {
+
+        assert(security_override.validator);
+        assert(security_override.security);
+        assert(security_override.original_hook);
+
+        if (security_override.validator(security_override.validator_ctx, file, NULL, 0))
+                return EFI_SUCCESS;
+
+        return security_override.original_hook(security_override.security, authentication_status, file);
+}
+
+static EFIAPI EFI_STATUS security2_hook(
+                const EFI_SECURITY2_ARCH_PROTOCOL *this,
+                const EFI_DEVICE_PATH *device_path,
+                void *file_buffer,
+                size_t file_size,
+                BOOLEAN boot_policy) {
+
+        assert(security_override.validator);
+        assert(security_override.security2);
+        assert(security_override.original_hook2);
+
+        if (security_override.validator(security_override.validator_ctx, device_path, file_buffer, file_size))
+                return EFI_SUCCESS;
+
+        return security_override.original_hook2(
+                        security_override.security2, device_path, file_buffer, file_size, boot_policy);
+}
+
+/* This replaces the platform provided security arch protocols hooks (defined in the UEFI Platform
+ * Initialization Specification) with our own that uses the given validator to decide if a image is to be
+ * trusted. If not running in secure boot or the protocols are not available nothing happens. The override
+ * must be removed with uninstall_security_override() after LoadImage() has been called.
+ *
+ * This is a hack as we do not own the security protocol instances and modifying them is not an official part
+ * of their spec. But there is little else we can do to circumvent secure boot short of implementing our own
+ * PE loader. We could replace the firmware instances with our own instance using
+ * ReinstallProtocolInterface(), but some firmware will still use the old ones. */
+void install_security_override(security_validator_t validator, const void *validator_ctx) {
+        EFI_STATUS err;
+
+        assert(validator);
+
+        if (!secure_boot_enabled())
+                return;
+
+        security_override = (struct SecurityOverride) {
+                .validator = validator,
+                .validator_ctx = validator_ctx,
+        };
+
+        EFI_SECURITY_ARCH_PROTOCOL *security = NULL;
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_SECURITY_ARCH_PROTOCOL), NULL, (void **) &security);
+        if (err == EFI_SUCCESS) {
+                security_override.security = security;
+                security_override.original_hook = security->FileAuthenticationState;
+                security->FileAuthenticationState = security_hook;
+        }
+
+        EFI_SECURITY2_ARCH_PROTOCOL *security2 = NULL;
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_SECURITY2_ARCH_PROTOCOL), NULL, (void **) &security2);
+        if (err == EFI_SUCCESS) {
+                security_override.security2 = security2;
+                security_override.original_hook2 = security2->FileAuthentication;
+                security2->FileAuthentication = security2_hook;
+        }
+}
+
+void uninstall_security_override(void) {
+        if (security_override.original_hook)
+                security_override.security->FileAuthenticationState = security_override.original_hook;
+        if (security_override.original_hook2)
+                security_override.security2->FileAuthentication = security_override.original_hook2;
+}
diff --git a/src/boot/efi/secure-boot.h b/src/boot/efi/secure-boot.h
index d06a7de..bdc3415 100644
--- a/src/boot/efi/secure-boot.h
+++ b/src/boot/efi/secure-boot.h
@@ -3,4 +3,26 @@
 
 #include <efi.h>
 
-BOOLEAN secure_boot_enabled(void);
+#include "efivars-fundamental.h"
+#include "missing_efi.h"
+
+typedef enum {
+        ENROLL_OFF,         /* no Secure Boot key enrollment whatsoever, even manual entries are not generated */
+        ENROLL_MANUAL,      /* Secure Boot key enrollment is strictly manual: manual entries are generated and need to be selected by the user */
+        ENROLL_IF_SAFE,     /* Automatically enroll if it is safe (if we are running inside a VM, for example). */
+        ENROLL_FORCE,       /* Secure Boot key enrollment may be automatic if it is available but might not be safe */
+} secure_boot_enroll;
+
+bool secure_boot_enabled(void);
+SecureBootMode secure_boot_mode(void);
+
+EFI_STATUS secure_boot_enroll_at(EFI_FILE *root_dir, const char16_t *path, bool force);
+
+typedef bool (*security_validator_t)(
+                const void *ctx,
+                const EFI_DEVICE_PATH *device_path,
+                const void *file_buffer,
+                size_t file_size);
+
+void install_security_override(security_validator_t validator, const void *validator_ctx);
+void uninstall_security_override(void);
diff --git a/src/boot/efi/sha256.c b/src/boot/efi/sha256.c
deleted file mode 100644
index 6585fdb..0000000
--- a/src/boot/efi/sha256.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-/* Stolen from glibc and converted to UEFI style. In glibc it comes with the following copyright blurb: */
-
-/* Functions to compute SHA256 message digest of files or memory blocks.
-   according to the definition of SHA256 in FIPS 180-2.
-   Copyright (C) 2007-2019 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-/* Written by Ulrich Drepper <drepper@redhat.com>, 2007.  */
-
-#include "sha256.h"
-
-#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-# define SWAP(n)                                                        \
-        (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
-# define SWAP64(n)                              \
-        (((n) << 56)                            \
-         | (((n) & 0xff00) << 40)               \
-         | (((n) & 0xff0000) << 24)             \
-         | (((n) & 0xff000000) << 8)            \
-         | (((n) >> 8) & 0xff000000)            \
-         | (((n) >> 24) & 0xff0000)             \
-         | (((n) >> 40) & 0xff00)               \
-         | ((n) >> 56))
-#else
-# define SWAP(n) (n)
-# define SWAP64(n) (n)
-#endif
-
-/* This array contains the bytes used to pad the buffer to the next
-   64-byte boundary.  (FIPS 180-2:5.1.1)  */
-static const UINT8 fillbuf[64] = {
-        0x80, 0 /* , 0, 0, ...  */
-};
-
-/* Constants for SHA256 from FIPS 180-2:4.2.2.  */
-static const UINT32 K[64] = {
-        0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
-        0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
-        0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
-        0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
-        0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
-        0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
-        0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
-        0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
-        0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
-        0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
-        0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
-        0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
-        0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
-        0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
-        0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
-        0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
-};
-
-static void sha256_process_block(const void *, UINTN, struct sha256_ctx *);
-
-/* Initialize structure containing state of computation.
-   (FIPS 180-2:5.3.2)  */
-void sha256_init_ctx(struct sha256_ctx *ctx) {
-        ctx->H[0] = 0x6a09e667;
-        ctx->H[1] = 0xbb67ae85;
-        ctx->H[2] = 0x3c6ef372;
-        ctx->H[3] = 0xa54ff53a;
-        ctx->H[4] = 0x510e527f;
-        ctx->H[5] = 0x9b05688c;
-        ctx->H[6] = 0x1f83d9ab;
-        ctx->H[7] = 0x5be0cd19;
-
-        ctx->total64 = 0;
-        ctx->buflen = 0;
-}
-
-/* Process the remaining bytes in the internal buffer and the usual
-   prolog according to the standard and write the result to RESBUF.
-
-   IMPORTANT: On some systems it is required that RESBUF is correctly
-   aligned for a 32 bits value.  */
-void *sha256_finish_ctx(struct sha256_ctx *ctx, void *resbuf) {
-        /* Take yet unprocessed bytes into account.  */
-        UINT32 bytes = ctx->buflen;
-        UINTN pad;
-
-        /* Now count remaining bytes.  */
-        ctx->total64 += bytes;
-
-        pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
-        CopyMem (&ctx->buffer[bytes], fillbuf, pad);
-
-        /* Put the 64-bit file length in *bits* at the end of the buffer.  */
-        ctx->buffer32[(bytes + pad + 4) / 4] = SWAP (ctx->total[TOTAL64_low] << 3);
-        ctx->buffer32[(bytes + pad) / 4] = SWAP ((ctx->total[TOTAL64_high] << 3)
-                                                 | (ctx->total[TOTAL64_low] >> 29));
-
-        /* Process last bytes.  */
-        sha256_process_block (ctx->buffer, bytes + pad + 8, ctx);
-
-        /* Put result from CTX in first 32 bytes following RESBUF.  */
-        for (UINTN i = 0; i < 8; ++i)
-                ((UINT32 *) resbuf)[i] = SWAP (ctx->H[i]);
-
-        return resbuf;
-}
-
-void sha256_process_bytes(const void *buffer, UINTN len, struct sha256_ctx *ctx) {
-        /* When we already have some bits in our internal buffer concatenate
-           both inputs first.  */
-
-        if (ctx->buflen != 0) {
-                UINTN left_over = ctx->buflen;
-                UINTN add = 128 - left_over > len ? len : 128 - left_over;
-
-                CopyMem (&ctx->buffer[left_over], buffer, add);
-                ctx->buflen += add;
-
-                if (ctx->buflen > 64) {
-                        sha256_process_block (ctx->buffer, ctx->buflen & ~63, ctx);
-
-                        ctx->buflen &= 63;
-                        /* The regions in the following copy operation cannot overlap.  */
-                        CopyMem (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
-                                ctx->buflen);
-                }
-
-                buffer = (const char *) buffer + add;
-                len -= add;
-        }
-
-        /* Process available complete blocks.  */
-        if (len >= 64) {
-
-/* The condition below is from glibc's string/string-inline.c.
- * See definition of _STRING_INLINE_unaligned. */
-#if !defined(__mc68020__) && !defined(__s390__) && !defined(__i386__)
-
-/* To check alignment gcc has an appropriate operator. Other compilers don't.  */
-# if __GNUC__ >= 2
-#  define UNALIGNED_P(p) (((UINTN) p) % __alignof__ (UINT32) != 0)
-# else
-#  define UNALIGNED_P(p) (((UINTN) p) % sizeof (UINT32) != 0)
-# endif
-                if (UNALIGNED_P (buffer))
-                        while (len > 64) {
-                                CopyMem (ctx->buffer, buffer, 64);
-                                sha256_process_block (ctx->buffer, 64, ctx);
-                                buffer = (const char *) buffer + 64;
-                                len -= 64;
-                        }
-                else
-#endif
-                {
-                        sha256_process_block (buffer, len & ~63, ctx);
-                        buffer = (const char *) buffer + (len & ~63);
-                        len &= 63;
-                }
-        }
-
-        /* Move remaining bytes into internal buffer.  */
-        if (len > 0) {
-                UINTN left_over = ctx->buflen;
-
-                CopyMem (&ctx->buffer[left_over], buffer, len);
-                left_over += len;
-                if (left_over >= 64) {
-                        sha256_process_block (ctx->buffer, 64, ctx);
-                        left_over -= 64;
-                        CopyMem (ctx->buffer, &ctx->buffer[64], left_over);
-                }
-                ctx->buflen = left_over;
-        }
-}
-
-
-/* Process LEN bytes of BUFFER, accumulating context into CTX.
-   It is assumed that LEN % 64 == 0.  */
-static void sha256_process_block(const void *buffer, UINTN len, struct sha256_ctx *ctx) {
-        const UINT32 *words = buffer;
-        UINTN nwords = len / sizeof (UINT32);
-        UINT32 a = ctx->H[0];
-        UINT32 b = ctx->H[1];
-        UINT32 c = ctx->H[2];
-        UINT32 d = ctx->H[3];
-        UINT32 e = ctx->H[4];
-        UINT32 f = ctx->H[5];
-        UINT32 g = ctx->H[6];
-        UINT32 h = ctx->H[7];
-
-        /* First increment the byte count.  FIPS 180-2 specifies the possible
-           length of the file up to 2^64 bits.  Here we only compute the
-           number of bytes.  */
-        ctx->total64 += len;
-
-        /* Process all bytes in the buffer with 64 bytes in each round of
-           the loop.  */
-        while (nwords > 0) {
-                UINT32 W[64];
-                UINT32 a_save = a;
-                UINT32 b_save = b;
-                UINT32 c_save = c;
-                UINT32 d_save = d;
-                UINT32 e_save = e;
-                UINT32 f_save = f;
-                UINT32 g_save = g;
-                UINT32 h_save = h;
-
-                /* Operators defined in FIPS 180-2:4.1.2.  */
-#define Ch(x, y, z) ((x & y) ^ (~x & z))
-#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
-#define S0(x) (CYCLIC (x, 2) ^ CYCLIC (x, 13) ^ CYCLIC (x, 22))
-#define S1(x) (CYCLIC (x, 6) ^ CYCLIC (x, 11) ^ CYCLIC (x, 25))
-#define R0(x) (CYCLIC (x, 7) ^ CYCLIC (x, 18) ^ (x >> 3))
-#define R1(x) (CYCLIC (x, 17) ^ CYCLIC (x, 19) ^ (x >> 10))
-
-                /* It is unfortunate that C does not provide an operator for
-                   cyclic rotation.  Hope the C compiler is smart enough.  */
-#define CYCLIC(w, s) ((w >> s) | (w << (32 - s)))
-
-                /* Compute the message schedule according to FIPS 180-2:6.2.2 step 2.  */
-                for (UINTN t = 0; t < 16; ++t) {
-                        W[t] = SWAP (*words);
-                        ++words;
-                }
-                for (UINTN t = 16; t < 64; ++t)
-                        W[t] = R1 (W[t - 2]) + W[t - 7] + R0 (W[t - 15]) + W[t - 16];
-
-                /* The actual computation according to FIPS 180-2:6.2.2 step 3.  */
-                for (UINTN t = 0; t < 64; ++t) {
-                        UINT32 T1 = h + S1 (e) + Ch (e, f, g) + K[t] + W[t];
-                        UINT32 T2 = S0 (a) + Maj (a, b, c);
-                        h = g;
-                        g = f;
-                        f = e;
-                        e = d + T1;
-                        d = c;
-                        c = b;
-                        b = a;
-                        a = T1 + T2;
-                }
-
-                /* Add the starting values of the context according to FIPS 180-2:6.2.2
-                   step 4.  */
-                a += a_save;
-                b += b_save;
-                c += c_save;
-                d += d_save;
-                e += e_save;
-                f += f_save;
-                g += g_save;
-                h += h_save;
-
-                /* Prepare for the next round.  */
-                nwords -= 16;
-        }
-
-        /* Put checksum in context given as argument.  */
-        ctx->H[0] = a;
-        ctx->H[1] = b;
-        ctx->H[2] = c;
-        ctx->H[3] = d;
-        ctx->H[4] = e;
-        ctx->H[5] = f;
-        ctx->H[6] = g;
-        ctx->H[7] = h;
-}
diff --git a/src/boot/efi/sha256.h b/src/boot/efi/sha256.h
deleted file mode 100644
index 464be59..0000000
--- a/src/boot/efi/sha256.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <efi.h>
-#include <efilib.h>
-
-struct sha256_ctx {
-        UINT32 H[8];
-
-        union {
-                UINT64 total64;
-#define TOTAL64_low (1 - (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
-#define TOTAL64_high (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
-                UINT32 total[2];
-        };
-
-        UINT32 buflen;
-
-        union {
-                UINT8 buffer[128]; /* NB: always correctly aligned for UINT32.  */
-                UINT32 buffer32[32];
-                UINT64 buffer64[16];
-        };
-};
-
-void sha256_init_ctx(struct sha256_ctx *ctx);
-void *sha256_finish_ctx(struct sha256_ctx *ctx, VOID *resbuf);
-void sha256_process_bytes(const void *buffer, UINTN len, struct sha256_ctx *ctx);
diff --git a/src/boot/efi/shim.c b/src/boot/efi/shim.c
index 4860262..5da298c 100644
--- a/src/boot/efi/shim.c
+++ b/src/boot/efi/shim.c
@@ -11,7 +11,9 @@
 #include <efi.h>
 #include <efilib.h>
 
+#include "missing_efi.h"
 #include "util.h"
+#include "secure-boot.h"
 #include "shim.h"
 
 #if defined(__x86_64__) || defined(__i386__)
@@ -21,181 +23,80 @@
 #endif
 
 struct ShimLock {
-        EFI_STATUS __sysv_abi__ (*shim_verify) (VOID *buffer, UINT32 size);
+        EFI_STATUS __sysv_abi__ (*shim_verify) (const void *buffer, uint32_t size);
 
         /* context is actually a struct for the PE header, but it isn't needed so void is sufficient just do define the interface
          * see shim.c/shim.h and PeHeader.h in the github shim repo */
-        EFI_STATUS __sysv_abi__ (*generate_hash) (VOID *data, UINT32 datasize, VOID *context, UINT8 *sha256hash, UINT8 *sha1hash);
+        EFI_STATUS __sysv_abi__ (*generate_hash) (void *data, uint32_t datasize, void *context, uint8_t *sha256hash, uint8_t *sha1hash);
 
-        EFI_STATUS __sysv_abi__ (*read_header) (VOID *data, UINT32 datasize, VOID *context);
+        EFI_STATUS __sysv_abi__ (*read_header) (void *data, uint32_t datasize, void *context);
 };
 
-#define SIMPLE_FS_GUID &(EFI_GUID) SIMPLE_FILE_SYSTEM_PROTOCOL
-#define SECURITY_PROTOCOL_GUID \
-        &(EFI_GUID) { 0xa46423e3, 0x4617, 0x49f1, { 0xb9, 0xff, 0xd1, 0xbf, 0xa9, 0x11, 0x58, 0x39 } }
-#define SECURITY_PROTOCOL2_GUID \
-        &(EFI_GUID) { 0x94ab2f58, 0x1438, 0x4ef1, { 0x91, 0x52, 0x18, 0x94, 0x1a, 0x3a, 0x0e, 0x68 } }
 #define SHIM_LOCK_GUID \
-        &(EFI_GUID) { 0x605dab50, 0xe046, 0x4300, { 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 } }
+        { 0x605dab50, 0xe046, 0x4300, { 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 } }
 
-BOOLEAN shim_loaded(void) {
+bool shim_loaded(void) {
         struct ShimLock *shim_lock;
 
-        return uefi_call_wrapper(BS->LocateProtocol, 3, SHIM_LOCK_GUID, NULL, (VOID**) &shim_lock) == EFI_SUCCESS;
+        return BS->LocateProtocol(MAKE_GUID_PTR(SHIM_LOCK), NULL, (void **) &shim_lock) == EFI_SUCCESS;
 }
 
-static BOOLEAN shim_validate(VOID *data, UINT32 size) {
-        struct ShimLock *shim_lock;
+static bool shim_validate(
+                const void *ctx, const EFI_DEVICE_PATH *device_path, const void *file_buffer, size_t file_size) {
 
-        if (!data)
-                return FALSE;
+        EFI_STATUS err;
+        _cleanup_free_ char *file_buffer_owned = NULL;
 
-        if (uefi_call_wrapper(BS->LocateProtocol, 3, SHIM_LOCK_GUID, NULL, (VOID**) &shim_lock) != EFI_SUCCESS)
-                return FALSE;
+        if (!file_buffer) {
+                if (!device_path)
+                        return false;
 
-        if (!shim_lock)
-                return FALSE;
+                EFI_HANDLE device_handle;
+                EFI_DEVICE_PATH *file_dp = (EFI_DEVICE_PATH *) device_path;
+                err = BS->LocateDevicePath(
+                                MAKE_GUID_PTR(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL), &file_dp, &device_handle);
+                if (err != EFI_SUCCESS)
+                        return false;
 
-        return shim_lock->shim_verify(data, size) == EFI_SUCCESS;
-}
+                _cleanup_(file_closep) EFI_FILE *root = NULL;
+                err = open_volume(device_handle, &root);
+                if (err != EFI_SUCCESS)
+                        return false;
 
-/*
- * See the UEFI Platform Initialization manual (Vol2: DXE) for this
- */
-struct _EFI_SECURITY2_PROTOCOL;
-struct _EFI_SECURITY_PROTOCOL;
-struct _EFI_DEVICE_PATH_PROTOCOL;
+                _cleanup_free_ char16_t *dp_str = NULL;
+                err = device_path_to_str(file_dp, &dp_str);
+                if (err != EFI_SUCCESS)
+                        return false;
 
-typedef struct _EFI_SECURITY2_PROTOCOL EFI_SECURITY2_PROTOCOL;
-typedef struct _EFI_SECURITY_PROTOCOL EFI_SECURITY_PROTOCOL;
-typedef struct _EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL;
+                err = file_read(root, dp_str, 0, 0, &file_buffer_owned, &file_size);
+                if (err != EFI_SUCCESS)
+                        return false;
 
-typedef EFI_STATUS (EFIAPI *EFI_SECURITY_FILE_AUTHENTICATION_STATE) (
-        const EFI_SECURITY_PROTOCOL *This,
-        UINT32 AuthenticationStatus,
-        const EFI_DEVICE_PATH_PROTOCOL *File
-);
-
-typedef EFI_STATUS (EFIAPI *EFI_SECURITY2_FILE_AUTHENTICATION) (
-        const EFI_SECURITY2_PROTOCOL *This,
-        const EFI_DEVICE_PATH_PROTOCOL *DevicePath,
-        VOID *FileBuffer,
-        UINTN FileSize,
-        BOOLEAN  BootPolicy
-);
-
-struct _EFI_SECURITY2_PROTOCOL {
-        EFI_SECURITY2_FILE_AUTHENTICATION FileAuthentication;
-};
-
-struct _EFI_SECURITY_PROTOCOL {
-        EFI_SECURITY_FILE_AUTHENTICATION_STATE  FileAuthenticationState;
-};
-
-/* Handle to the original authenticator for security1 protocol */
-static EFI_SECURITY_FILE_AUTHENTICATION_STATE esfas = NULL;
-
-/* Handle to the original authenticator for security2 protocol */
-static EFI_SECURITY2_FILE_AUTHENTICATION es2fa = NULL;
-
-/*
- * Perform shim/MOK and Secure Boot authentication on a binary that's already been
- * loaded into memory. This function does the platform SB authentication first
- * but preserves its return value in case of its failure, so that it can be
- * returned in case of a shim/MOK authentication failure. This is done because
- * the SB failure code seems to vary from one implementation to another, and I
- * don't want to interfere with that at this time.
- */
-static EFIAPI EFI_STATUS security2_policy_authentication (const EFI_SECURITY2_PROTOCOL *this,
-                                                          const EFI_DEVICE_PATH_PROTOCOL *device_path,
-                                                          VOID *file_buffer, UINTN file_size, BOOLEAN boot_policy) {
-        EFI_STATUS status;
-
-        /* Chain original security policy */
-        status = uefi_call_wrapper(es2fa, 5, this, device_path, file_buffer, file_size, boot_policy);
-
-        /* if OK, don't bother with MOK check */
-        if (status == EFI_SUCCESS)
-                return status;
-
-        if (shim_validate(file_buffer, file_size))
-                return EFI_SUCCESS;
-
-        return status;
-}
-
-/*
- * Perform both shim/MOK and platform Secure Boot authentication. This function loads
- * the file and performs shim/MOK authentication first simply to avoid double loads
- * of Linux kernels, which are much more likely to be shim/MOK-signed than platform-signed,
- * since kernels are big and can take several seconds to load on some computers and
- * filesystems. This also has the effect of returning whatever the platform code is for
- * authentication failure, be it EFI_ACCESS_DENIED, EFI_SECURITY_VIOLATION, or something
- * else. (This seems to vary between implementations.)
- */
-static EFIAPI EFI_STATUS security_policy_authentication (const EFI_SECURITY_PROTOCOL *this, UINT32 authentication_status,
-                                                         const EFI_DEVICE_PATH_PROTOCOL *device_path_const) {
-        EFI_STATUS status;
-        _cleanup_freepool_ EFI_DEVICE_PATH *dev_path = NULL;
-        _cleanup_freepool_ CHAR16 *dev_path_str = NULL;
-        EFI_HANDLE h;
-        EFI_FILE *root;
-        _cleanup_freepool_ CHAR8 *file_buffer = NULL;
-        UINTN file_size;
-
-        if (!device_path_const)
-                return EFI_INVALID_PARAMETER;
-
-        dev_path = DuplicateDevicePath((EFI_DEVICE_PATH*) device_path_const);
-
-        status = uefi_call_wrapper(BS->LocateDevicePath, 3, SIMPLE_FS_GUID, &dev_path, &h);
-        if (status != EFI_SUCCESS)
-                return status;
-
-        /* No need to check return value, this already happened in efi_main() */
-        root = LibOpenRoot(h);
-        dev_path_str = DevicePathToStr(dev_path);
-
-        status = file_read(root, dev_path_str, 0, 0, &file_buffer, &file_size);
-        if (EFI_ERROR(status))
-                return status;
-        uefi_call_wrapper(root->Close, 1, root);
-
-        if (shim_validate(file_buffer, file_size))
-                return EFI_SUCCESS;
-
-        /* Try using the platform's native policy.... */
-        return uefi_call_wrapper(esfas, 3, this, authentication_status, device_path_const);
-}
-
-EFI_STATUS security_policy_install(void) {
-        EFI_SECURITY_PROTOCOL *security_protocol;
-        EFI_SECURITY2_PROTOCOL *security2_protocol = NULL;
-        EFI_STATUS status;
-
-        /* Already Installed */
-        if (esfas)
-                return EFI_ALREADY_STARTED;
-
-        /*
-         * Don't bother with status here. The call is allowed
-         * to fail, since SECURITY2 was introduced in PI 1.2.1.
-         * Use security2_protocol == NULL as indicator.
-         */
-        uefi_call_wrapper(BS->LocateProtocol, 3, SECURITY_PROTOCOL2_GUID, NULL, (VOID**) &security2_protocol);
-
-        status = uefi_call_wrapper(BS->LocateProtocol, 3, SECURITY_PROTOCOL_GUID, NULL, (VOID**) &security_protocol);
-         /* This one is mandatory, so there's a serious problem */
-        if (status != EFI_SUCCESS)
-                return status;
-
-        esfas = security_protocol->FileAuthenticationState;
-        security_protocol->FileAuthenticationState = security_policy_authentication;
-
-        if (security2_protocol) {
-                es2fa = security2_protocol->FileAuthentication;
-                security2_protocol->FileAuthentication = security2_policy_authentication;
+                file_buffer = file_buffer_owned;
         }
 
-        return EFI_SUCCESS;
+        struct ShimLock *shim_lock;
+        err = BS->LocateProtocol(MAKE_GUID_PTR(SHIM_LOCK), NULL, (void **) &shim_lock);
+        if (err != EFI_SUCCESS)
+                return false;
+
+        return shim_lock->shim_verify(file_buffer, file_size) == EFI_SUCCESS;
+}
+
+EFI_STATUS shim_load_image(EFI_HANDLE parent, const EFI_DEVICE_PATH *device_path, EFI_HANDLE *ret_image) {
+        assert(device_path);
+        assert(ret_image);
+
+        bool have_shim = shim_loaded();
+
+        if (have_shim)
+                install_security_override(shim_validate, NULL);
+
+        EFI_STATUS ret = BS->LoadImage(
+                        /*BootPolicy=*/false, parent, (EFI_DEVICE_PATH *) device_path, NULL, 0, ret_image);
+
+        if (have_shim)
+                uninstall_security_override();
+
+        return ret;
 }
diff --git a/src/boot/efi/shim.h b/src/boot/efi/shim.h
index d682994..6d213f5 100644
--- a/src/boot/efi/shim.h
+++ b/src/boot/efi/shim.h
@@ -10,7 +10,7 @@
 #pragma once
 
 #include <efi.h>
+#include <stdbool.h>
 
-BOOLEAN shim_loaded(void);
-
-EFI_STATUS security_policy_install(void);
+bool shim_loaded(void);
+EFI_STATUS shim_load_image(EFI_HANDLE parent, const EFI_DEVICE_PATH *device_path, EFI_HANDLE *ret_image);
diff --git a/src/boot/efi/splash.c b/src/boot/efi/splash.c
index 5e085ec..9770bb3 100644
--- a/src/boot/efi/splash.c
+++ b/src/boot/efi/splash.c
@@ -5,50 +5,64 @@
 
 #include "graphics.h"
 #include "splash.h"
+#include "unaligned-fundamental.h"
 #include "util.h"
 
 struct bmp_file {
-        CHAR8 signature[2];
-        UINT32 size;
-        UINT16 reserved[2];
-        UINT32 offset;
-} __attribute__((packed));
+        char signature[2];
+        uint32_t size;
+        uint16_t reserved[2];
+        uint32_t offset;
+} _packed_;
 
 /* we require at least BITMAPINFOHEADER, later versions are
    accepted, but their features ignored */
 struct bmp_dib {
-        UINT32 size;
-        UINT32 x;
-        UINT32 y;
-        UINT16 planes;
-        UINT16 depth;
-        UINT32 compression;
-        UINT32 image_size;
-        INT32 x_pixel_meter;
-        INT32 y_pixel_meter;
-        UINT32 colors_used;
-        UINT32 colors_important;
-} __attribute__((packed));
+        uint32_t size;
+        uint32_t x;
+        uint32_t y;
+        uint16_t planes;
+        uint16_t depth;
+        uint32_t compression;
+        uint32_t image_size;
+        int32_t x_pixel_meter;
+        int32_t y_pixel_meter;
+        uint32_t colors_used;
+        uint32_t colors_important;
+        uint32_t channel_mask_r;
+        uint32_t channel_mask_g;
+        uint32_t channel_mask_b;
+        uint32_t channel_mask_a;
+} _packed_;
+
+#define SIZEOF_BMP_DIB offsetof(struct bmp_dib, channel_mask_r)
+#define SIZEOF_BMP_DIB_RGB offsetof(struct bmp_dib, channel_mask_a)
+#define SIZEOF_BMP_DIB_RGBA sizeof(struct bmp_dib)
 
 struct bmp_map {
-        UINT8 blue;
-        UINT8 green;
-        UINT8 red;
-        UINT8 reserved;
-} __attribute__((packed));
+        uint8_t blue;
+        uint8_t green;
+        uint8_t red;
+        uint8_t reserved;
+} _packed_;
 
-static EFI_STATUS bmp_parse_header(UINT8 *bmp, UINTN size, struct bmp_dib **ret_dib,
-                            struct bmp_map **ret_map, UINT8 **pixmap) {
-        struct bmp_file *file;
-        struct bmp_dib *dib;
-        struct bmp_map *map;
-        UINTN row_size;
+static EFI_STATUS bmp_parse_header(
+                const uint8_t *bmp,
+                size_t size,
+                struct bmp_dib **ret_dib,
+                struct bmp_map **ret_map,
+                const uint8_t **pixmap) {
 
-        if (size < sizeof(struct bmp_file) + sizeof(struct bmp_dib))
+        assert(bmp);
+        assert(ret_dib);
+        assert(ret_map);
+        assert(pixmap);
+
+        if (size < sizeof(struct bmp_file) + SIZEOF_BMP_DIB)
                 return EFI_INVALID_PARAMETER;
 
         /* check file header */
-        file = (struct bmp_file *)bmp;
+        struct bmp_file *file = (struct bmp_file *) bmp;
         if (file->signature[0] != 'B' || file->signature[1] != 'M')
                 return EFI_INVALID_PARAMETER;
         if (file->size != size)
@@ -57,8 +71,8 @@
                 return EFI_INVALID_PARAMETER;
 
         /*  check device-independent bitmap */
-        dib = (struct bmp_dib *)(bmp + sizeof(struct bmp_file));
-        if (dib->size < sizeof(struct bmp_dib))
+        struct bmp_dib *dib = (struct bmp_dib *) (bmp + sizeof(struct bmp_file));
+        if (dib->size < SIZEOF_BMP_DIB)
                 return EFI_UNSUPPORTED;
 
         switch (dib->depth) {
@@ -82,38 +96,26 @@
                 return EFI_UNSUPPORTED;
         }
 
-        row_size = ((UINTN) dib->depth * dib->x + 31) / 32 * 4;
+        size_t row_size = ((size_t) dib->depth * dib->x + 31) / 32 * 4;
         if (file->size - file->offset <  dib->y * row_size)
                 return EFI_INVALID_PARAMETER;
         if (row_size * dib->y > 64 * 1024 * 1024)
                 return EFI_INVALID_PARAMETER;
 
         /* check color table */
-        map = (struct bmp_map *)(bmp + sizeof(struct bmp_file) + dib->size);
+        struct bmp_map *map = (struct bmp_map *) (bmp + sizeof(struct bmp_file) + dib->size);
         if (file->offset < sizeof(struct bmp_file) + dib->size)
                 return EFI_INVALID_PARAMETER;
 
         if (file->offset > sizeof(struct bmp_file) + dib->size) {
-                UINT32 map_count;
-                UINTN map_size;
+                uint32_t map_count = 0;
 
                 if (dib->colors_used)
                         map_count = dib->colors_used;
-                else {
-                        switch (dib->depth) {
-                        case 1:
-                        case 4:
-                        case 8:
-                                map_count = 1 << dib->depth;
-                                break;
+                else if (IN_SET(dib->depth, 1, 4, 8))
+                        map_count = 1 << dib->depth;
 
-                        default:
-                                map_count = 0;
-                                break;
-                        }
-                }
-
-                map_size = file->offset - (sizeof(struct bmp_file) + dib->size);
+                size_t map_size = file->offset - (sizeof(struct bmp_file) + dib->size);
                 if (map_size != sizeof(struct bmp_map) * map_count)
                         return EFI_INVALID_PARAMETER;
         }
@@ -125,44 +127,78 @@
         return EFI_SUCCESS;
 }
 
-static VOID pixel_blend(UINT32 *dst, const UINT32 source) {
-        UINT32 alpha, src, src_rb, src_g, dst_rb, dst_g, rb, g;
+enum Channels { R, G, B, A, _CHANNELS_MAX };
+static void read_channel_maks(
+                const struct bmp_dib *dib,
+                uint32_t channel_mask[static _CHANNELS_MAX],
+                uint8_t channel_shift[static _CHANNELS_MAX],
+                uint8_t channel_scale[static _CHANNELS_MAX]) {
 
-        alpha = (source & 0xff);
+        assert(dib);
 
-        /* convert src from RGBA to XRGB */
-        src = source >> 8;
+        if (IN_SET(dib->depth, 16, 32) && dib->size >= SIZEOF_BMP_DIB_RGB) {
+                channel_mask[R] = dib->channel_mask_r;
+                channel_mask[G] = dib->channel_mask_g;
+                channel_mask[B] = dib->channel_mask_b;
+                channel_shift[R] = __builtin_ctz(dib->channel_mask_r);
+                channel_shift[G] = __builtin_ctz(dib->channel_mask_g);
+                channel_shift[B] = __builtin_ctz(dib->channel_mask_b);
+                channel_scale[R] = 0xff / ((1 << __builtin_popcount(dib->channel_mask_r)) - 1);
+                channel_scale[G] = 0xff / ((1 << __builtin_popcount(dib->channel_mask_g)) - 1);
+                channel_scale[B] = 0xff / ((1 << __builtin_popcount(dib->channel_mask_b)) - 1);
 
-        /* decompose into RB and G components */
-        src_rb = (src & 0xff00ff);
-        src_g  = (src & 0x00ff00);
-
-        dst_rb = (*dst & 0xff00ff);
-        dst_g  = (*dst & 0x00ff00);
-
-        /* blend */
-        rb = ((((src_rb - dst_rb) * alpha + 0x800080) >> 8) + dst_rb) & 0xff00ff;
-        g  = ((((src_g  -  dst_g) * alpha + 0x008000) >> 8) +  dst_g) & 0x00ff00;
-
-        *dst = (rb | g);
+                if (dib->size >= SIZEOF_BMP_DIB_RGBA && dib->channel_mask_a != 0) {
+                        channel_mask[A] = dib->channel_mask_a;
+                        channel_shift[A] = __builtin_ctz(dib->channel_mask_a);
+                        channel_scale[A] = 0xff / ((1 << __builtin_popcount(dib->channel_mask_a)) - 1);
+                } else {
+                        channel_mask[A] = 0;
+                        channel_shift[A] = 0;
+                        channel_scale[A] = 0;
+                }
+        } else {
+                bool bpp16 = dib->depth == 16;
+                channel_mask[R] = bpp16 ? 0x7C00 : 0xFF0000;
+                channel_mask[G] = bpp16 ? 0x03E0 : 0x00FF00;
+                channel_mask[B] = bpp16 ? 0x001F : 0x0000FF;
+                channel_mask[A] = bpp16 ? 0x0000 : 0x000000;
+                channel_shift[R] = bpp16 ? 0xA : 0x10;
+                channel_shift[G] = bpp16 ? 0x5 : 0x08;
+                channel_shift[B] = bpp16 ? 0x0 : 0x00;
+                channel_shift[A] = bpp16 ? 0x0 : 0x00;
+                channel_scale[R] = bpp16 ? 0x08 : 0x1;
+                channel_scale[G] = bpp16 ? 0x08 : 0x1;
+                channel_scale[B] = bpp16 ? 0x08 : 0x1;
+                channel_scale[A] = bpp16 ? 0x00 : 0x0;
+        }
 }
 
-static EFI_STATUS bmp_to_blt(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *buf,
-                      struct bmp_dib *dib, struct bmp_map *map,
-                      UINT8 *pixmap) {
-        UINT8 *in;
+static EFI_STATUS bmp_to_blt(
+                EFI_GRAPHICS_OUTPUT_BLT_PIXEL *buf,
+                struct bmp_dib *dib,
+                struct bmp_map *map,
+                const uint8_t *pixmap) {
+
+        const uint8_t *in;
+
+        assert(buf);
+        assert(dib);
+        assert(map);
+        assert(pixmap);
+
+        uint32_t channel_mask[_CHANNELS_MAX];
+        uint8_t channel_shift[_CHANNELS_MAX], channel_scale[_CHANNELS_MAX];
+        read_channel_maks(dib, channel_mask, channel_shift, channel_scale);
 
         /* transform and copy pixels */
         in = pixmap;
-        for (UINTN y = 0; y < dib->y; y++) {
-                EFI_GRAPHICS_OUTPUT_BLT_PIXEL *out;
-                UINTN row_size;
+        for (uint32_t y = 0; y < dib->y; y++) {
+                EFI_GRAPHICS_OUTPUT_BLT_PIXEL *out = &buf[(dib->y - y - 1) * dib->x];
 
-                out = &buf[(dib->y - y - 1) * dib->x];
-                for (UINTN x = 0; x < dib->x; x++, in++, out++) {
+                for (uint32_t x = 0; x < dib->x; x++, in++, out++) {
                         switch (dib->depth) {
                         case 1: {
-                                for (UINTN i = 0; i < 8 && x < dib->x; i++) {
+                                for (unsigned i = 0; i < 8 && x < dib->x; i++) {
                                         out->Red = map[((*in) >> (7 - i)) & 1].red;
                                         out->Green = map[((*in) >> (7 - i)) & 1].green;
                                         out->Blue = map[((*in) >> (7 - i)) & 1].blue;
@@ -175,9 +211,7 @@
                         }
 
                         case 4: {
-                                UINTN i;
-
-                                i = (*in) >> 4;
+                                unsigned i = (*in) >> 4;
                                 out->Red = map[i].red;
                                 out->Green = map[i].green;
                                 out->Blue = map[i].blue;
@@ -198,16 +232,6 @@
                                 out->Blue = map[*in].blue;
                                 break;
 
-                        case 16: {
-                                UINT16 i = *(UINT16 *) in;
-
-                                out->Red = (i & 0x7c00) >> 7;
-                                out->Green = (i & 0x3e0) >> 2;
-                                out->Blue = (i & 0x1f) << 3;
-                                in += 1;
-                                break;
-                        }
-
                         case 24:
                                 out->Red = in[2];
                                 out->Green = in[1];
@@ -215,53 +239,62 @@
                                 in += 2;
                                 break;
 
+                        case 16:
                         case 32: {
-                                UINT32 i = *(UINT32 *) in;
+                                uint32_t i = dib->depth == 16 ? unaligned_read_ne16(in) :
+                                                                unaligned_read_ne32(in);
 
-                                pixel_blend((UINT32 *)out, i);
+                                uint8_t r = ((i & channel_mask[R]) >> channel_shift[R]) * channel_scale[R],
+                                        g = ((i & channel_mask[G]) >> channel_shift[G]) * channel_scale[G],
+                                        b = ((i & channel_mask[B]) >> channel_shift[B]) * channel_scale[B],
+                                        a = 0xFFu;
+                                if (channel_mask[A] != 0)
+                                        a = ((i & channel_mask[A]) >> channel_shift[A]) * channel_scale[A];
 
-                                in += 3;
+                                out->Red = (out->Red * (0xFFu - a) + r * a) >> 8;
+                                out->Green = (out->Green * (0xFFu - a) + g * a) >> 8;
+                                out->Blue = (out->Blue * (0xFFu - a) + b * a) >> 8;
+
+                                in += dib->depth == 16 ? 1 : 3;
                                 break;
                         }
                         }
                 }
 
                 /* add row padding; new lines always start at 32 bit boundary */
-                row_size = in - pixmap;
+                size_t row_size = in - pixmap;
                 in += ((row_size + 3) & ~3) - row_size;
         }
 
         return EFI_SUCCESS;
 }
 
-EFI_STATUS graphics_splash(UINT8 *content, UINTN len, const EFI_GRAPHICS_OUTPUT_BLT_PIXEL *background) {
-        EFI_GRAPHICS_OUTPUT_BLT_PIXEL pixel = {};
-        EFI_GUID GraphicsOutputProtocolGuid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
+EFI_STATUS graphics_splash(const uint8_t *content, size_t len) {
+        EFI_GRAPHICS_OUTPUT_BLT_PIXEL background = {};
         EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput = NULL;
         struct bmp_dib *dib;
         struct bmp_map *map;
-        UINT8 *pixmap;
-        UINT64 blt_size;
-        _cleanup_freepool_ VOID *blt = NULL;
-        UINTN x_pos = 0;
-        UINTN y_pos = 0;
+        const uint8_t *pixmap;
+        size_t x_pos = 0, y_pos = 0;
         EFI_STATUS err;
 
-        if (!background) {
-                if (StriCmp(L"Apple", ST->FirmwareVendor) == 0) {
-                        pixel.Red = 0xc0;
-                        pixel.Green = 0xc0;
-                        pixel.Blue = 0xc0;
-                }
-                background = &pixel;
+        if (len == 0)
+                return EFI_SUCCESS;
+
+        assert(content);
+
+        if (strcaseeq16(ST->FirmwareVendor, u"Apple")) {
+                background.Red = 0xc0;
+                background.Green = 0xc0;
+                background.Blue = 0xc0;
         }
 
-        err = LibLocateProtocol(&GraphicsOutputProtocolGuid, (VOID **)&GraphicsOutput);
-        if (EFI_ERROR(err))
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_GRAPHICS_OUTPUT_PROTOCOL), NULL, (void **) &GraphicsOutput);
+        if (err != EFI_SUCCESS)
                 return err;
 
         err = bmp_parse_header(content, len, &dib, &map, &pixmap);
-        if (EFI_ERROR(err))
+        if (err != EFI_SUCCESS)
                 return err;
 
         if (dib->x < GraphicsOutput->Mode->Info->HorizontalResolution)
@@ -269,33 +302,34 @@
         if (dib->y < GraphicsOutput->Mode->Info->VerticalResolution)
                 y_pos = (GraphicsOutput->Mode->Info->VerticalResolution - dib->y) / 2;
 
-        uefi_call_wrapper(GraphicsOutput->Blt, 10, GraphicsOutput,
-                          (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)background,
-                          EfiBltVideoFill, 0, 0, 0, 0,
-                          GraphicsOutput->Mode->Info->HorizontalResolution,
-                          GraphicsOutput->Mode->Info->VerticalResolution, 0);
+        err = GraphicsOutput->Blt(
+                        GraphicsOutput, &background,
+                        EfiBltVideoFill, 0, 0, 0, 0,
+                        GraphicsOutput->Mode->Info->HorizontalResolution,
+                        GraphicsOutput->Mode->Info->VerticalResolution, 0);
+        if (err != EFI_SUCCESS)
+                return err;
 
-        /* EFI buffer */
-        blt_size = sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) * dib->x * dib->y;
-        blt = AllocatePool(blt_size);
-        if (!blt)
-                return EFI_OUT_OF_RESOURCES;
-
-        err = uefi_call_wrapper(GraphicsOutput->Blt, 10, GraphicsOutput,
-                                blt, EfiBltVideoToBltBuffer, x_pos, y_pos, 0, 0,
-                                dib->x, dib->y, 0);
-        if (EFI_ERROR(err))
+        /* Read in current screen content to perform proper alpha blending. */
+        _cleanup_free_ EFI_GRAPHICS_OUTPUT_BLT_PIXEL *blt = xnew(
+                        EFI_GRAPHICS_OUTPUT_BLT_PIXEL, dib->x * dib->y);
+        err = GraphicsOutput->Blt(
+                        GraphicsOutput, blt,
+                        EfiBltVideoToBltBuffer, x_pos, y_pos, 0, 0,
+                        dib->x, dib->y, 0);
+        if (err != EFI_SUCCESS)
                 return err;
 
         err = bmp_to_blt(blt, dib, map, pixmap);
-        if (EFI_ERROR(err))
+        if (err != EFI_SUCCESS)
                 return err;
 
-        err = graphics_mode(TRUE);
-        if (EFI_ERROR(err))
+        err = graphics_mode(true);
+        if (err != EFI_SUCCESS)
                 return err;
 
-        return uefi_call_wrapper(GraphicsOutput->Blt, 10, GraphicsOutput,
-                                 blt, EfiBltBufferToVideo, 0, 0, x_pos, y_pos,
-                                 dib->x, dib->y, 0);
+        return GraphicsOutput->Blt(
+                        GraphicsOutput, blt,
+                        EfiBltBufferToVideo, 0, 0, x_pos, y_pos,
+                        dib->x, dib->y, 0);
 }
diff --git a/src/boot/efi/splash.h b/src/boot/efi/splash.h
index b9f74ff..bb49740 100644
--- a/src/boot/efi/splash.h
+++ b/src/boot/efi/splash.h
@@ -2,5 +2,6 @@
 #pragma once
 
 #include <efi.h>
+#include <stddef.h>
 
-EFI_STATUS graphics_splash(UINT8 *content, UINTN len, const EFI_GRAPHICS_OUTPUT_BLT_PIXEL *background);
+EFI_STATUS graphics_splash(const uint8_t *content, size_t len);
diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c
index 82da1d3..92229d8 100644
--- a/src/boot/efi/stub.c
+++ b/src/boot/efi/stub.c
@@ -3,78 +3,100 @@
 #include <efi.h>
 #include <efilib.h>
 
+#include "cpio.h"
+#include "devicetree.h"
 #include "disk.h"
 #include "graphics.h"
 #include "linux.h"
 #include "measure.h"
+#include "part-discovery.h"
 #include "pe.h"
+#include "random-seed.h"
 #include "secure-boot.h"
 #include "splash.h"
+#include "tpm-pcr.h"
 #include "util.h"
 
 /* magic string to find in the binary image */
-static const char __attribute__((used)) magic[] = "#### LoaderInfo: systemd-stub " GIT_VERSION " ####";
+_used_ _section_(".sdmagic") static const char magic[] = "#### LoaderInfo: systemd-stub " GIT_VERSION " ####";
 
-EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
-        EFI_LOADED_IMAGE *loaded_image;
-        CHAR8 *sections[] = {
-                (CHAR8 *)".cmdline",
-                (CHAR8 *)".linux",
-                (CHAR8 *)".initrd",
-                (CHAR8 *)".splash",
-                NULL
-        };
-        UINTN addrs[ELEMENTSOF(sections)-1] = {};
-        UINTN offs[ELEMENTSOF(sections)-1] = {};
-        UINTN szs[ELEMENTSOF(sections)-1] = {};
-        CHAR8 *cmdline = NULL;
-        UINTN cmdline_len;
-        CHAR16 uuid[37];
-        EFI_STATUS err;
+static EFI_STATUS combine_initrd(
+                EFI_PHYSICAL_ADDRESS initrd_base, size_t initrd_size,
+                const void * const extra_initrds[], const size_t extra_initrd_sizes[], size_t n_extra_initrds,
+                Pages *ret_initr_pages, size_t *ret_initrd_size) {
 
-        InitializeLib(image, sys_table);
+        size_t n;
 
-        err = uefi_call_wrapper(BS->OpenProtocol, 6, image, &LoadedImageProtocol, (VOID **)&loaded_image,
-                                image, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Error getting a LoadedImageProtocol handle: %r", err);
+        assert(ret_initr_pages);
+        assert(ret_initrd_size);
 
-        err = pe_memory_locate_sections(loaded_image->ImageBase, sections, addrs, offs, szs);
-        if (EFI_ERROR(err))
-                return log_error_status_stall(err, L"Unable to locate embedded .linux section: %r", err);
+        /* Combines four initrds into one, by simple concatenation in memory */
 
-        if (szs[0] > 0)
-                cmdline = (CHAR8 *)(loaded_image->ImageBase) + addrs[0];
+        n = ALIGN4(initrd_size); /* main initrd might not be padded yet */
 
-        cmdline_len = szs[0];
+        for (size_t i = 0; i < n_extra_initrds; i++) {
+                if (!extra_initrds[i])
+                        continue;
 
-        /* if we are not in secure boot mode, or none was provided, accept a custom command line and replace the built-in one */
-        if ((!secure_boot_enabled() || cmdline_len == 0) && loaded_image->LoadOptionsSize > 0 &&
-            *(CHAR16 *) loaded_image->LoadOptions > 0x1F) {
-                CHAR16 *options;
-                CHAR8 *line;
+                if (n > SIZE_MAX - extra_initrd_sizes[i])
+                        return EFI_OUT_OF_RESOURCES;
 
-                options = (CHAR16 *)loaded_image->LoadOptions;
-                cmdline_len = (loaded_image->LoadOptionsSize / sizeof(CHAR16)) * sizeof(CHAR8);
-                line = AllocatePool(cmdline_len);
-                for (UINTN i = 0; i < cmdline_len; i++)
-                        line[i] = options[i];
-                cmdline = line;
-
-#if ENABLE_TPM
-                /* Try to log any options to the TPM, especially manually edited options */
-                err = tpm_log_event(SD_TPM_PCR,
-                                    (EFI_PHYSICAL_ADDRESS) (UINTN) loaded_image->LoadOptions,
-                                    loaded_image->LoadOptionsSize, loaded_image->LoadOptions);
-                if (EFI_ERROR(err))
-                        log_error_stall(L"Unable to add image options measurement: %r", err);
-#endif
+                n += extra_initrd_sizes[i];
         }
 
+        _cleanup_pages_ Pages pages = xmalloc_pages(
+                        AllocateMaxAddress,
+                        EfiLoaderData,
+                        EFI_SIZE_TO_PAGES(n),
+                        UINT32_MAX /* Below 4G boundary. */);
+        uint8_t *p = PHYSICAL_ADDRESS_TO_POINTER(pages.addr);
+        if (initrd_base != 0) {
+                size_t pad;
+
+                /* Order matters, the real initrd must come first, since it might include microcode updates
+                 * which the kernel only looks for in the first cpio archive */
+                p = mempcpy(p, PHYSICAL_ADDRESS_TO_POINTER(initrd_base), initrd_size);
+
+                pad = ALIGN4(initrd_size) - initrd_size;
+                if (pad > 0)  {
+                        memset(p, 0, pad);
+                        p += pad;
+                }
+        }
+
+        for (size_t i = 0; i < n_extra_initrds; i++) {
+                if (!extra_initrds[i])
+                        continue;
+
+                p = mempcpy(p, extra_initrds[i], extra_initrd_sizes[i]);
+        }
+
+        assert(PHYSICAL_ADDRESS_TO_POINTER(pages.addr + n) == p);
+
+        *ret_initr_pages = pages;
+        *ret_initrd_size = n;
+        pages.n_pages = 0;
+
+        return EFI_SUCCESS;
+}
+
+static void export_variables(EFI_LOADED_IMAGE_PROTOCOL *loaded_image) {
+        static const uint64_t stub_features =
+                EFI_STUB_FEATURE_REPORT_BOOT_PARTITION |    /* We set LoaderDevicePartUUID */
+                EFI_STUB_FEATURE_PICK_UP_CREDENTIALS |      /* We pick up credentials from the boot partition */
+                EFI_STUB_FEATURE_PICK_UP_SYSEXTS |          /* We pick up system extensions from the boot partition */
+                EFI_STUB_FEATURE_THREE_PCRS |               /* We can measure kernel image, parameters and sysext */
+                EFI_STUB_FEATURE_RANDOM_SEED |              /* We pass a random seed to the kernel */
+                0;
+
+        char16_t uuid[37];
+
+        assert(loaded_image);
+
         /* Export the device path this image is started from, if it's not set yet */
-        if (efivar_get_raw(LOADER_GUID, L"LoaderDevicePartUUID", NULL, NULL) != EFI_SUCCESS)
+        if (efivar_get_raw(MAKE_GUID_PTR(LOADER), u"LoaderDevicePartUUID", NULL, NULL) != EFI_SUCCESS)
                 if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS)
-                        efivar_set(LOADER_GUID, L"LoaderDevicePartUUID", uuid, 0);
+                        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderDevicePartUUID", uuid, 0);
 
         /* If LoaderImageIdentifier is not set, assume the image with this stub was loaded directly from the
          * UEFI firmware without any boot loader, and hence set the LoaderImageIdentifier ourselves. Note
@@ -82,41 +104,322 @@
          * in which case there's simple nothing to set for us. (The UEFI spec doesn't really say who's wrong
          * here, i.e. whether FilePath may be NULL or not, hence handle this gracefully and check if FilePath
          * is non-NULL explicitly.) */
-        if (efivar_get_raw(LOADER_GUID, L"LoaderImageIdentifier", NULL, NULL) != EFI_SUCCESS &&
+        if (efivar_get_raw(MAKE_GUID_PTR(LOADER), u"LoaderImageIdentifier", NULL, NULL) != EFI_SUCCESS &&
             loaded_image->FilePath) {
-                _cleanup_freepool_ CHAR16 *s = NULL;
-
-                s = DevicePathToStr(loaded_image->FilePath);
-                efivar_set(LOADER_GUID, L"LoaderImageIdentifier", s, 0);
+                _cleanup_free_ char16_t *s = NULL;
+                if (device_path_to_str(loaded_image->FilePath, &s) == EFI_SUCCESS)
+                        efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderImageIdentifier", s, 0);
         }
 
         /* if LoaderFirmwareInfo is not set, let's set it */
-        if (efivar_get_raw(LOADER_GUID, L"LoaderFirmwareInfo", NULL, NULL) != EFI_SUCCESS) {
-                _cleanup_freepool_ CHAR16 *s = NULL;
-
-                s = PoolPrint(L"%s %d.%02d", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
-                efivar_set(LOADER_GUID, L"LoaderFirmwareInfo", s, 0);
+        if (efivar_get_raw(MAKE_GUID_PTR(LOADER), u"LoaderFirmwareInfo", NULL, NULL) != EFI_SUCCESS) {
+                _cleanup_free_ char16_t *s = NULL;
+                s = xasprintf("%ls %u.%02u", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
+                efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderFirmwareInfo", s, 0);
         }
 
         /* ditto for LoaderFirmwareType */
-        if (efivar_get_raw(LOADER_GUID, L"LoaderFirmwareType", NULL, NULL) != EFI_SUCCESS) {
-                _cleanup_freepool_ CHAR16 *s = NULL;
-
-                s = PoolPrint(L"UEFI %d.%02d", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
-                efivar_set(LOADER_GUID, L"LoaderFirmwareType", s, 0);
+        if (efivar_get_raw(MAKE_GUID_PTR(LOADER), u"LoaderFirmwareType", NULL, NULL) != EFI_SUCCESS) {
+                _cleanup_free_ char16_t *s = NULL;
+                s = xasprintf("UEFI %u.%02u", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
+                efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderFirmwareType", s, 0);
         }
 
-        /* add StubInfo */
-        if (efivar_get_raw(LOADER_GUID, L"StubInfo", NULL, NULL) != EFI_SUCCESS)
-                efivar_set(LOADER_GUID, L"StubInfo", L"systemd-stub " GIT_VERSION, 0);
 
-        if (szs[3] > 0)
-                graphics_splash((UINT8 *)((UINTN)loaded_image->ImageBase + addrs[3]), szs[3], NULL);
+        /* add StubInfo (this is one is owned by the stub, hence we unconditionally override this with our
+         * own data) */
+        (void) efivar_set(MAKE_GUID_PTR(LOADER), u"StubInfo", u"systemd-stub " GIT_VERSION, 0);
 
-        err = linux_exec(image, cmdline, cmdline_len,
-                         (UINTN)loaded_image->ImageBase + addrs[1],
-                         (UINTN)loaded_image->ImageBase + addrs[2], szs[2]);
+        (void) efivar_set_uint64_le(MAKE_GUID_PTR(LOADER), u"StubFeatures", stub_features, 0);
+}
 
-        graphics_mode(FALSE);
-        return log_error_status_stall(err, L"Execution of embedded linux image failed: %r", err);
+static bool use_load_options(
+                EFI_HANDLE stub_image,
+                EFI_LOADED_IMAGE_PROTOCOL *loaded_image,
+                bool have_cmdline,
+                char16_t **ret) {
+
+        assert(stub_image);
+        assert(loaded_image);
+        assert(ret);
+
+        /* We only allow custom command lines if we aren't in secure boot or if no cmdline was baked into
+         * the stub image. */
+        if (secure_boot_enabled() && have_cmdline)
+                return false;
+
+        /* We also do a superficial check whether first character of passed command line
+         * is printable character (for compat with some Dell systems which fill in garbage?). */
+        if (loaded_image->LoadOptionsSize < sizeof(char16_t) || ((char16_t *) loaded_image->LoadOptions)[0] <= 0x1F)
+                return false;
+
+        /* The UEFI shell registers EFI_SHELL_PARAMETERS_PROTOCOL onto images it runs. This lets us know that
+         * LoadOptions starts with the stub binary path which we want to strip off. */
+        EFI_SHELL_PARAMETERS_PROTOCOL *shell;
+        if (BS->HandleProtocol(stub_image, MAKE_GUID_PTR(EFI_SHELL_PARAMETERS_PROTOCOL), (void **) &shell)
+            != EFI_SUCCESS) {
+                /* Not running from EFI shell, use entire LoadOptions. Note that LoadOptions is a void*, so
+                 * it could be anything! */
+                *ret = xstrndup16(loaded_image->LoadOptions, loaded_image->LoadOptionsSize / sizeof(char16_t));
+                mangle_stub_cmdline(*ret);
+                return true;
+        }
+
+        if (shell->Argc < 2)
+                /* No arguments were provided? Then we fall back to built-in cmdline. */
+                return false;
+
+        /* Assemble the command line ourselves without our stub path. */
+        *ret = xstrdup16(shell->Argv[1]);
+        for (size_t i = 2; i < shell->Argc; i++) {
+                _cleanup_free_ char16_t *old = *ret;
+                *ret = xasprintf("%ls %ls", old, shell->Argv[i]);
+        }
+
+        mangle_stub_cmdline(*ret);
+        return true;
+}
+
+static EFI_STATUS run(EFI_HANDLE image) {
+        _cleanup_free_ void *credential_initrd = NULL, *global_credential_initrd = NULL, *sysext_initrd = NULL, *pcrsig_initrd = NULL, *pcrpkey_initrd = NULL;
+        size_t credential_initrd_size = 0, global_credential_initrd_size = 0, sysext_initrd_size = 0, pcrsig_initrd_size = 0, pcrpkey_initrd_size = 0;
+        size_t linux_size, initrd_size, dt_size;
+        EFI_PHYSICAL_ADDRESS linux_base, initrd_base, dt_base;
+        _cleanup_(devicetree_cleanup) struct devicetree_state dt_state = {};
+        EFI_LOADED_IMAGE_PROTOCOL *loaded_image;
+        size_t addrs[_UNIFIED_SECTION_MAX] = {}, szs[_UNIFIED_SECTION_MAX] = {};
+        _cleanup_free_ char16_t *cmdline = NULL;
+        int sections_measured = -1, parameters_measured = -1;
+        bool sysext_measured = false, m;
+        uint64_t loader_features = 0;
+        EFI_STATUS err;
+
+        err = BS->OpenProtocol(
+                        image,
+                        MAKE_GUID_PTR(EFI_LOADED_IMAGE_PROTOCOL),
+                        (void **) &loaded_image,
+                        image,
+                        NULL,
+                        EFI_OPEN_PROTOCOL_GET_PROTOCOL);
+        if (err != EFI_SUCCESS)
+                return log_error_status(err, "Error getting a LoadedImageProtocol handle: %m");
+
+        if (efivar_get_uint64_le(MAKE_GUID_PTR(LOADER), u"LoaderFeatures", &loader_features) != EFI_SUCCESS ||
+            !FLAGS_SET(loader_features, EFI_LOADER_FEATURE_RANDOM_SEED)) {
+                _cleanup_(file_closep) EFI_FILE *esp_dir = NULL;
+
+                err = partition_open(MAKE_GUID_PTR(ESP), loaded_image->DeviceHandle, NULL, &esp_dir);
+                if (err == EFI_SUCCESS) /* Non-fatal on failure, so that we still boot without it. */
+                        (void) process_random_seed(esp_dir);
+        }
+
+        err = pe_memory_locate_sections(loaded_image->ImageBase, unified_sections, addrs, szs);
+        if (err != EFI_SUCCESS || szs[UNIFIED_SECTION_LINUX] == 0) {
+                if (err == EFI_SUCCESS)
+                        err = EFI_NOT_FOUND;
+                return log_error_status(err, "Unable to locate embedded .linux section: %m");
+        }
+
+        /* Measure all "payload" of this PE image into a separate PCR (i.e. where nothing else is written
+         * into so far), so that we have one PCR that we can nicely write policies against because it
+         * contains all static data of this image, and thus can be easily be pre-calculated. */
+        for (UnifiedSection section = 0; section < _UNIFIED_SECTION_MAX; section++) {
+
+                if (!unified_section_measure(section)) /* shall not measure? */
+                        continue;
+
+                if (szs[section] == 0) /* not found */
+                        continue;
+
+                m = false;
+
+                /* First measure the name of the section */
+                (void) tpm_log_event_ascii(
+                                TPM_PCR_INDEX_KERNEL_IMAGE,
+                                POINTER_TO_PHYSICAL_ADDRESS(unified_sections[section]),
+                                strsize8(unified_sections[section]), /* including NUL byte */
+                                unified_sections[section],
+                                &m);
+
+                sections_measured = sections_measured < 0 ? m : (sections_measured && m);
+
+                /* Then measure the data of the section */
+                (void) tpm_log_event_ascii(
+                                TPM_PCR_INDEX_KERNEL_IMAGE,
+                                POINTER_TO_PHYSICAL_ADDRESS(loaded_image->ImageBase) + addrs[section],
+                                szs[section],
+                                unified_sections[section],
+                                &m);
+
+                sections_measured = sections_measured < 0 ? m : (sections_measured && m);
+        }
+
+        /* After we are done, set an EFI variable that tells userspace this was done successfully, and encode
+         * in it which PCR was used. */
+        if (sections_measured > 0)
+                (void) efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"StubPcrKernelImage", TPM_PCR_INDEX_KERNEL_IMAGE, 0);
+
+        /* Show splash screen as early as possible */
+        graphics_splash((const uint8_t*) loaded_image->ImageBase + addrs[UNIFIED_SECTION_SPLASH], szs[UNIFIED_SECTION_SPLASH]);
+
+        if (use_load_options(image, loaded_image, szs[UNIFIED_SECTION_CMDLINE] > 0, &cmdline)) {
+                /* Let's measure the passed kernel command line into the TPM. Note that this possibly
+                 * duplicates what we already did in the boot menu, if that was already used. However, since
+                 * we want the boot menu to support an EFI binary, and want to this stub to be usable from
+                 * any boot menu, let's measure things anyway. */
+                m = false;
+                (void) tpm_log_load_options(cmdline, &m);
+                parameters_measured = m;
+        } else if (szs[UNIFIED_SECTION_CMDLINE] > 0) {
+                cmdline = xstrn8_to_16(
+                                (char *) loaded_image->ImageBase + addrs[UNIFIED_SECTION_CMDLINE],
+                                szs[UNIFIED_SECTION_CMDLINE]);
+                mangle_stub_cmdline(cmdline);
+        }
+
+        export_variables(loaded_image);
+
+        if (pack_cpio(loaded_image,
+                      NULL,
+                      u".cred",
+                      ".extra/credentials",
+                      /* dir_mode= */ 0500,
+                      /* access_mode= */ 0400,
+                      /* tpm_pcr= */ TPM_PCR_INDEX_KERNEL_PARAMETERS,
+                      u"Credentials initrd",
+                      &credential_initrd,
+                      &credential_initrd_size,
+                      &m) == EFI_SUCCESS)
+                parameters_measured = parameters_measured < 0 ? m : (parameters_measured && m);
+
+        if (pack_cpio(loaded_image,
+                      u"\\loader\\credentials",
+                      u".cred",
+                      ".extra/global_credentials",
+                      /* dir_mode= */ 0500,
+                      /* access_mode= */ 0400,
+                      /* tpm_pcr= */ TPM_PCR_INDEX_KERNEL_PARAMETERS,
+                      u"Global credentials initrd",
+                      &global_credential_initrd,
+                      &global_credential_initrd_size,
+                      &m) == EFI_SUCCESS)
+                parameters_measured = parameters_measured < 0 ? m : (parameters_measured && m);
+
+        if (pack_cpio(loaded_image,
+                      NULL,
+                      u".raw",
+                      ".extra/sysext",
+                      /* dir_mode= */ 0555,
+                      /* access_mode= */ 0444,
+                      /* tpm_pcr= */ TPM_PCR_INDEX_INITRD_SYSEXTS,
+                      u"System extension initrd",
+                      &sysext_initrd,
+                      &sysext_initrd_size,
+                      &m) == EFI_SUCCESS)
+                sysext_measured = m;
+
+        if (parameters_measured > 0)
+                (void) efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"StubPcrKernelParameters", TPM_PCR_INDEX_KERNEL_PARAMETERS, 0);
+        if (sysext_measured)
+                (void) efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"StubPcrInitRDSysExts", TPM_PCR_INDEX_INITRD_SYSEXTS, 0);
+
+        /* If the PCR signature was embedded in the PE image, then let's wrap it in a cpio and also pass it
+         * to the kernel, so that it can be read from /.extra/tpm2-pcr-signature.json. Note that this section
+         * is not measured, neither as raw section (see above), nor as cpio (here), because it is the
+         * signature of expected PCR values, i.e. its input are PCR measurements, and hence it shouldn't
+         * itself be input for PCR measurements. */
+        if (szs[UNIFIED_SECTION_PCRSIG] > 0)
+                (void) pack_cpio_literal(
+                                (uint8_t*) loaded_image->ImageBase + addrs[UNIFIED_SECTION_PCRSIG],
+                                szs[UNIFIED_SECTION_PCRSIG],
+                                ".extra",
+                                u"tpm2-pcr-signature.json",
+                                /* dir_mode= */ 0555,
+                                /* access_mode= */ 0444,
+                                /* tpm_pcr= */ UINT32_MAX,
+                                /* tpm_description= */ NULL,
+                                &pcrsig_initrd,
+                                &pcrsig_initrd_size,
+                                /* ret_measured= */ NULL);
+
+        /* If the public key used for the PCR signatures was embedded in the PE image, then let's wrap it in
+         * a cpio and also pass it to the kernel, so that it can be read from
+         * /.extra/tpm2-pcr-public-key.pem. This section is already measure above, hence we won't measure the
+         * cpio. */
+        if (szs[UNIFIED_SECTION_PCRPKEY] > 0)
+                (void) pack_cpio_literal(
+                                (uint8_t*) loaded_image->ImageBase + addrs[UNIFIED_SECTION_PCRPKEY],
+                                szs[UNIFIED_SECTION_PCRPKEY],
+                                ".extra",
+                                u"tpm2-pcr-public-key.pem",
+                                /* dir_mode= */ 0555,
+                                /* access_mode= */ 0444,
+                                /* tpm_pcr= */ UINT32_MAX,
+                                /* tpm_description= */ NULL,
+                                &pcrpkey_initrd,
+                                &pcrpkey_initrd_size,
+                                /* ret_measured= */ NULL);
+
+        linux_size = szs[UNIFIED_SECTION_LINUX];
+        linux_base = POINTER_TO_PHYSICAL_ADDRESS(loaded_image->ImageBase) + addrs[UNIFIED_SECTION_LINUX];
+
+        initrd_size = szs[UNIFIED_SECTION_INITRD];
+        initrd_base = initrd_size != 0 ? POINTER_TO_PHYSICAL_ADDRESS(loaded_image->ImageBase) + addrs[UNIFIED_SECTION_INITRD] : 0;
+
+        dt_size = szs[UNIFIED_SECTION_DTB];
+        dt_base = dt_size != 0 ? POINTER_TO_PHYSICAL_ADDRESS(loaded_image->ImageBase) + addrs[UNIFIED_SECTION_DTB] : 0;
+
+        _cleanup_pages_ Pages initrd_pages = {};
+        if (credential_initrd || global_credential_initrd || sysext_initrd || pcrsig_initrd || pcrpkey_initrd) {
+                /* If we have generated initrds dynamically, let's combine them with the built-in initrd. */
+                err = combine_initrd(
+                                initrd_base, initrd_size,
+                                (const void*const[]) {
+                                        credential_initrd,
+                                        global_credential_initrd,
+                                        sysext_initrd,
+                                        pcrsig_initrd,
+                                        pcrpkey_initrd,
+                                },
+                                (const size_t[]) {
+                                        credential_initrd_size,
+                                        global_credential_initrd_size,
+                                        sysext_initrd_size,
+                                        pcrsig_initrd_size,
+                                        pcrpkey_initrd_size,
+                                },
+                                5,
+                                &initrd_pages, &initrd_size);
+                if (err != EFI_SUCCESS)
+                        return err;
+
+                initrd_base = initrd_pages.addr;
+
+                /* Given these might be large let's free them explicitly, quickly. */
+                credential_initrd = mfree(credential_initrd);
+                global_credential_initrd = mfree(global_credential_initrd);
+                sysext_initrd = mfree(sysext_initrd);
+                pcrsig_initrd = mfree(pcrsig_initrd);
+                pcrpkey_initrd = mfree(pcrpkey_initrd);
+        }
+
+        if (dt_size > 0) {
+                err = devicetree_install_from_memory(
+                                &dt_state, PHYSICAL_ADDRESS_TO_POINTER(dt_base), dt_size);
+                if (err != EFI_SUCCESS)
+                        log_error_status(err, "Error loading embedded devicetree: %m");
+        }
+
+        err = linux_exec(image, cmdline,
+                         PHYSICAL_ADDRESS_TO_POINTER(linux_base), linux_size,
+                         PHYSICAL_ADDRESS_TO_POINTER(initrd_base), initrd_size);
+        graphics_mode(false);
+        return err;
+}
+
+DEFINE_EFI_MAIN_FUNCTION(run, "systemd-stub", /*wait_for_debugger=*/false);
+
+/* See comment in boot.c. */
+EFI_STATUS _entry(EFI_HANDLE image, EFI_SYSTEM_TABLE *system_table) {
+        return efi_main(image, system_table);
 }
diff --git a/src/boot/efi/test-bcd.c b/src/boot/efi/test-bcd.c
new file mode 100644
index 0000000..0ee2947
--- /dev/null
+++ b/src/boot/efi/test-bcd.c
@@ -0,0 +1,162 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "bcd.h"
+#include "compress.h"
+#include "fileio.h"
+#include "tests.h"
+#include "utf8.h"
+
+/* Include the implementation directly, so we can poke at some internals. */
+#include "bcd.c"
+
+static void load_bcd(const char *path, void **ret_bcd, size_t *ret_bcd_len) {
+        size_t len;
+        _cleanup_free_ char *fn = NULL, *compressed = NULL;
+
+        assert_se(get_testdata_dir(path, &fn) >= 0);
+        assert_se(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, SIZE_MAX, 0, NULL, &compressed, &len) >= 0);
+        assert_se(decompress_blob_zstd(compressed, len, ret_bcd, ret_bcd_len, SIZE_MAX) >= 0);
+}
+
+static void test_get_bcd_title_one(
+                const char *path,
+                const char16_t *title_expect,
+                size_t title_len_expect) {
+
+        size_t len;
+        _cleanup_free_ void *bcd = NULL;
+
+        log_info("/* %s(%s) */", __func__, path);
+
+        load_bcd(path, &bcd, &len);
+
+        char16_t *title = get_bcd_title(bcd, len);
+        if (title_expect) {
+                assert_se(title);
+                assert_se(memcmp(title, title_expect, title_len_expect) == 0);
+        } else
+                assert_se(!title);
+}
+
+TEST(get_bcd_title) {
+        test_get_bcd_title_one("test-bcd/win10.bcd.zst", u"Windows 10", sizeof(u"Windows 10"));
+
+        test_get_bcd_title_one("test-bcd/description-bad-type.bcd.zst", NULL, 0);
+        test_get_bcd_title_one("test-bcd/description-empty.bcd.zst", NULL, 0);
+        test_get_bcd_title_one("test-bcd/description-missing.bcd.zst", NULL, 0);
+        test_get_bcd_title_one("test-bcd/description-too-small.bcd.zst", NULL, 0);
+        test_get_bcd_title_one("test-bcd/displayorder-bad-name.bcd.zst", NULL, 0);
+        test_get_bcd_title_one("test-bcd/displayorder-bad-size.bcd.zst", NULL, 0);
+        test_get_bcd_title_one("test-bcd/displayorder-bad-type.bcd.zst", NULL, 0);
+        test_get_bcd_title_one("test-bcd/empty.bcd.zst", NULL, 0);
+}
+
+TEST(base_block) {
+        size_t len;
+        BaseBlock backup;
+        uint8_t *bcd_base;
+        _cleanup_free_ BaseBlock *bcd = NULL;
+
+        load_bcd("test-bcd/win10.bcd.zst", (void **) &bcd, &len);
+        backup = *bcd;
+        bcd_base = (uint8_t *) bcd;
+
+        assert_se(get_bcd_title(bcd_base, len));
+
+        /* Try various "corruptions" of the base block. */
+
+        assert_se(!get_bcd_title(bcd_base, sizeof(BaseBlock) - 1));
+
+        bcd->sig = 0;
+        assert_se(!get_bcd_title(bcd_base, len));
+        *bcd = backup;
+
+        bcd->version_minor = 2;
+        assert_se(!get_bcd_title(bcd_base, len));
+        *bcd = backup;
+
+        bcd->version_major = 4;
+        assert_se(!get_bcd_title(bcd_base, len));
+        *bcd = backup;
+
+        bcd->type = 1;
+        assert_se(!get_bcd_title(bcd_base, len));
+        *bcd = backup;
+
+        bcd->primary_seqnum++;
+        assert_se(!get_bcd_title(bcd_base, len));
+        *bcd = backup;
+}
+
+TEST(bad_bcd) {
+        size_t len;
+        uint8_t *hbins;
+        uint32_t offset;
+        _cleanup_free_ void *bcd = NULL;
+
+        /* This BCD hive has been manipulated to have bad offsets/sizes at various places. */
+        load_bcd("test-bcd/corrupt.bcd.zst", &bcd, &len);
+
+        assert_se(len >= HIVE_CELL_OFFSET);
+        hbins = (uint8_t *) bcd + HIVE_CELL_OFFSET;
+        len -= HIVE_CELL_OFFSET;
+        offset = ((BaseBlock *) bcd)->root_cell_offset;
+
+        const Key *root = get_key(hbins, len, offset, "\0");
+        assert_se(root);
+        assert_se(!get_key(hbins, sizeof(Key) - 1, offset, "\0"));
+
+        assert_se(!get_key(hbins, len, offset, "\0BadOffset\0"));
+        assert_se(!get_key(hbins, len, offset, "\0BadSig\0"));
+        assert_se(!get_key(hbins, len, offset, "\0BadKeyNameLen\0"));
+        assert_se(!get_key(hbins, len, offset, "\0SubkeyBadOffset\0Dummy\0"));
+        assert_se(!get_key(hbins, len, offset, "\0SubkeyBadSig\0Dummy\0"));
+        assert_se(!get_key(hbins, len, offset, "\0SubkeyBadNEntries\0Dummy\0"));
+
+        assert_se(!get_key_value(hbins, len, root, "Dummy"));
+
+        const Key *kv_bad_offset = get_key(hbins, len, offset, "\0KeyValuesBadOffset\0");
+        assert_se(kv_bad_offset);
+        assert_se(!get_key_value(hbins, len, kv_bad_offset, "Dummy"));
+
+        const Key *kv_bad_n_key_values = get_key(hbins, len, offset, "\0KeyValuesBadNKeyValues\0");
+        assert_se(kv_bad_n_key_values);
+        assert_se(!get_key_value(hbins, len, kv_bad_n_key_values, "Dummy"));
+
+        const Key *kv = get_key(hbins, len, offset, "\0KeyValues\0");
+        assert_se(kv);
+
+        assert_se(!get_key_value(hbins, len, kv, "BadOffset"));
+        assert_se(!get_key_value(hbins, len, kv, "BadSig"));
+        assert_se(!get_key_value(hbins, len, kv, "BadNameLen"));
+        assert_se(!get_key_value(hbins, len, kv, "InlineData"));
+        assert_se(!get_key_value(hbins, len, kv, "BadDataOffset"));
+        assert_se(!get_key_value(hbins, len, kv, "BadDataSize"));
+}
+
+TEST(argv_bcds) {
+        for (int i = 1; i < saved_argc; i++) {
+                size_t len;
+                _cleanup_free_ void *bcd = NULL;
+
+                assert_se(read_full_file_full(
+                        AT_FDCWD,
+                        saved_argv[i],
+                        UINT64_MAX,
+                        SIZE_MAX,
+                        0,
+                        NULL,
+                        (char **) &bcd,
+                        &len) >= 0);
+
+                char16_t *title = get_bcd_title(bcd, len);
+                if (title) {
+                        _cleanup_free_ char *title_utf8 = utf16_to_utf8(title, char16_strlen(title) * 2);
+                        log_info("%s: \"%s\"", saved_argv[i], title_utf8);
+                } else
+                        log_info("%s: Bad BCD", saved_argv[i]);
+        }
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/boot/efi/test-efi-string.c b/src/boot/efi/test-efi-string.c
new file mode 100644
index 0000000..c26973d
--- /dev/null
+++ b/src/boot/efi/test-efi-string.c
@@ -0,0 +1,665 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fnmatch.h>
+
+#include "efi-string.h"
+#include "tests.h"
+
+TEST(strlen8) {
+        assert_se(strlen8(NULL) == 0);
+        assert_se(strlen8("") == 0);
+        assert_se(strlen8("1") == 1);
+        assert_se(strlen8("11") == 2);
+        assert_se(strlen8("123456789") == 9);
+        assert_se(strlen8("12\0004") == 2);
+}
+
+TEST(strlen16) {
+        assert_se(strlen16(NULL) == 0);
+        assert_se(strlen16(u"") == 0);
+        assert_se(strlen16(u"1") == 1);
+        assert_se(strlen16(u"11") == 2);
+        assert_se(strlen16(u"123456789") == 9);
+        assert_se(strlen16(u"12\0004") == 2);
+}
+
+TEST(strnlen8) {
+        assert_se(strnlen8(NULL, 0) == 0);
+        assert_se(strnlen8(NULL, 10) == 0);
+        assert_se(strnlen8("", 10) == 0);
+        assert_se(strnlen8("1", 10) == 1);
+        assert_se(strnlen8("11", 1) == 1);
+        assert_se(strnlen8("123456789", 7) == 7);
+        assert_se(strnlen8("12\0004", 5) == 2);
+}
+
+TEST(strnlen16) {
+        assert_se(strnlen16(NULL, 0) == 0);
+        assert_se(strnlen16(NULL, 10) == 0);
+        assert_se(strnlen16(u"", 10) == 0);
+        assert_se(strnlen16(u"1", 10) == 1);
+        assert_se(strnlen16(u"11", 1) == 1);
+        assert_se(strnlen16(u"123456789", 7) == 7);
+        assert_se(strnlen16(u"12\0004", 5) == 2);
+}
+
+TEST(strsize8) {
+        assert_se(strsize8(NULL) == 0);
+        assert_se(strsize8("") == 1);
+        assert_se(strsize8("1") == 2);
+        assert_se(strsize8("11") == 3);
+        assert_se(strsize8("123456789") == 10);
+        assert_se(strsize8("12\0004") == 3);
+}
+
+TEST(strsize16) {
+        assert_se(strsize16(NULL) == 0);
+        assert_se(strsize16(u"") == 2);
+        assert_se(strsize16(u"1") == 4);
+        assert_se(strsize16(u"11") == 6);
+        assert_se(strsize16(u"123456789") == 20);
+        assert_se(strsize16(u"12\0004") == 6);
+}
+
+TEST(strtolower8) {
+        char s[] = "\0001234abcDEF!\0zZ";
+
+        strtolower8(NULL);
+
+        strtolower8(s);
+        assert_se(memcmp(s, "\0001234abcDEF!\0zZ", sizeof(s)) == 0);
+
+        s[0] = '#';
+        strtolower8(s);
+        assert_se(memcmp(s, "#1234abcdef!\0zZ", sizeof(s)) == 0);
+}
+
+TEST(strtolower16) {
+        char16_t s[] = u"\0001234abcDEF!\0zZ";
+
+        strtolower16(NULL);
+
+        strtolower16(s);
+        assert_se(memcmp(s, u"\0001234abcDEF!\0zZ", sizeof(s)) == 0);
+
+        s[0] = '#';
+        strtolower16(s);
+        assert_se(memcmp(s, u"#1234abcdef!\0zZ", sizeof(s)) == 0);
+}
+
+TEST(strncmp8) {
+        assert_se(strncmp8(NULL, "", 10) < 0);
+        assert_se(strncmp8("", NULL, 10) > 0);
+        assert_se(strncmp8(NULL, NULL, 0) == 0);
+        assert_se(strncmp8(NULL, NULL, 10) == 0);
+        assert_se(strncmp8("", "", 10) == 0);
+        assert_se(strncmp8("abc", "abc", 2) == 0);
+        assert_se(strncmp8("aBc", "aBc", 3) == 0);
+        assert_se(strncmp8("aBC", "aBC", 4) == 0);
+        assert_se(strncmp8("", "a", 0) == 0);
+        assert_se(strncmp8("b", "a", 0) == 0);
+        assert_se(strncmp8("", "a", 3) < 0);
+        assert_se(strncmp8("=", "=", 1) == 0);
+        assert_se(strncmp8("A", "a", 1) < 0);
+        assert_se(strncmp8("a", "A", 2) > 0);
+        assert_se(strncmp8("a", "Aa", 2) > 0);
+        assert_se(strncmp8("12\00034", "12345", 4) < 0);
+        assert_se(strncmp8("12\00034", "12345", SIZE_MAX) < 0);
+        assert_se(strncmp8("abc\0def", "abc", SIZE_MAX) == 0);
+        assert_se(strncmp8("abc\0def", "abcdef", SIZE_MAX) < 0);
+
+        assert_se(strncmp8((char[]){ CHAR_MIN }, (char[]){ CHAR_MIN }, 1) == 0);
+        assert_se(strncmp8((char[]){ CHAR_MAX }, (char[]){ CHAR_MAX }, 1) == 0);
+        assert_se(strncmp8((char[]){ CHAR_MIN }, (char[]){ CHAR_MAX }, 1) < 0);
+        assert_se(strncmp8((char[]){ CHAR_MAX }, (char[]){ CHAR_MIN }, 1) > 0);
+}
+
+TEST(strncmp16) {
+        assert_se(strncmp16(NULL, u"", 10) < 0);
+        assert_se(strncmp16(u"", NULL, 10) > 0);
+        assert_se(strncmp16(NULL, NULL, 0) == 0);
+        assert_se(strncmp16(NULL, NULL, 10) == 0);
+        assert_se(strncmp16(u"", u"", 0) == 0);
+        assert_se(strncmp16(u"", u"", 10) == 0);
+        assert_se(strncmp16(u"abc", u"abc", 2) == 0);
+        assert_se(strncmp16(u"aBc", u"aBc", 3) == 0);
+        assert_se(strncmp16(u"aBC", u"aBC", 4) == 0);
+        assert_se(strncmp16(u"", u"a", 0) == 0);
+        assert_se(strncmp16(u"b", u"a", 0) == 0);
+        assert_se(strncmp16(u"", u"a", 3) < 0);
+        assert_se(strncmp16(u"=", u"=", 1) == 0);
+        assert_se(strncmp16(u"A", u"a", 1) < 0);
+        assert_se(strncmp16(u"a", u"A", 2) > 0);
+        assert_se(strncmp16(u"a", u"Aa", 2) > 0);
+        assert_se(strncmp16(u"12\00034", u"12345", 4) < 0);
+        assert_se(strncmp16(u"12\00034", u"12345", SIZE_MAX) < 0);
+        assert_se(strncmp16(u"abc\0def", u"abc", SIZE_MAX) == 0);
+        assert_se(strncmp16(u"abc\0def", u"abcdef", SIZE_MAX) < 0);
+
+        assert_se(strncmp16((char16_t[]){ UINT16_MAX }, (char16_t[]){ UINT16_MAX }, 1) == 0);
+        assert_se(strncmp16((char16_t[]){ 0 }, (char16_t[]){ UINT16_MAX }, 1) < 0);
+        assert_se(strncmp16((char16_t[]){ UINT16_MAX }, (char16_t[]){ 0 }, 1) > 0);
+}
+
+TEST(strncasecmp8) {
+        assert_se(strncasecmp8(NULL, "", 10) < 0);
+        assert_se(strncasecmp8("", NULL, 10) > 0);
+        assert_se(strncasecmp8(NULL, NULL, 0) == 0);
+        assert_se(strncasecmp8(NULL, NULL, 10) == 0);
+        assert_se(strncasecmp8("", "", 10) == 0);
+        assert_se(strncasecmp8("abc", "abc", 2) == 0);
+        assert_se(strncasecmp8("aBc", "AbC", 3) == 0);
+        assert_se(strncasecmp8("aBC", "Abc", 4) == 0);
+        assert_se(strncasecmp8("", "a", 0) == 0);
+        assert_se(strncasecmp8("b", "a", 0) == 0);
+        assert_se(strncasecmp8("", "a", 3) < 0);
+        assert_se(strncasecmp8("=", "=", 1) == 0);
+        assert_se(strncasecmp8("A", "a", 1) == 0);
+        assert_se(strncasecmp8("a", "A", 2) == 0);
+        assert_se(strncasecmp8("a", "Aa", 2) < 0);
+        assert_se(strncasecmp8("12\00034", "12345", 4) < 0);
+        assert_se(strncasecmp8("12\00034", "12345", SIZE_MAX) < 0);
+        assert_se(strncasecmp8("abc\0def", "ABC", SIZE_MAX) == 0);
+        assert_se(strncasecmp8("abc\0def", "ABCDEF", SIZE_MAX) < 0);
+
+        assert_se(strncasecmp8((char[]){ CHAR_MIN }, (char[]){ CHAR_MIN }, 1) == 0);
+        assert_se(strncasecmp8((char[]){ CHAR_MAX }, (char[]){ CHAR_MAX }, 1) == 0);
+        assert_se(strncasecmp8((char[]){ CHAR_MIN }, (char[]){ CHAR_MAX }, 1) < 0);
+        assert_se(strncasecmp8((char[]){ CHAR_MAX }, (char[]){ CHAR_MIN }, 1) > 0);
+}
+
+TEST(strncasecmp16) {
+        assert_se(strncasecmp16(NULL, u"", 10) < 0);
+        assert_se(strncasecmp16(u"", NULL, 10) > 0);
+        assert_se(strncasecmp16(NULL, NULL, 0) == 0);
+        assert_se(strncasecmp16(NULL, NULL, 10) == 0);
+        assert_se(strncasecmp16(u"", u"", 10) == 0);
+        assert_se(strncasecmp16(u"abc", u"abc", 2) == 0);
+        assert_se(strncasecmp16(u"aBc", u"AbC", 3) == 0);
+        assert_se(strncasecmp16(u"aBC", u"Abc", 4) == 0);
+        assert_se(strncasecmp16(u"", u"a", 0) == 0);
+        assert_se(strncasecmp16(u"b", u"a", 0) == 0);
+        assert_se(strncasecmp16(u"", u"a", 3) < 0);
+        assert_se(strncasecmp16(u"=", u"=", 1) == 0);
+        assert_se(strncasecmp16(u"A", u"a", 1) == 0);
+        assert_se(strncasecmp16(u"a", u"A", 2) == 0);
+        assert_se(strncasecmp16(u"a", u"Aa", 2) < 0);
+        assert_se(strncasecmp16(u"12\00034", u"12345", 4) < 0);
+        assert_se(strncasecmp16(u"12\00034", u"12345", SIZE_MAX) < 0);
+        assert_se(strncasecmp16(u"abc\0def", u"ABC", SIZE_MAX) == 0);
+        assert_se(strncasecmp16(u"abc\0def", u"ABCDEF", SIZE_MAX) < 0);
+
+        assert_se(strncasecmp16((char16_t[]){ UINT16_MAX }, (char16_t[]){ UINT16_MAX }, 1) == 0);
+        assert_se(strncasecmp16((char16_t[]){ 0 }, (char16_t[]){ UINT16_MAX }, 1) < 0);
+        assert_se(strncasecmp16((char16_t[]){ UINT16_MAX }, (char16_t[]){ 0 }, 1) > 0);
+}
+
+TEST(strcpy8) {
+        char buf[128];
+
+        assert_se(strcpy8(buf, "123") == buf);
+        assert_se(streq8(buf, "123"));
+        assert_se(strcpy8(buf, "") == buf);
+        assert_se(streq8(buf, ""));
+        assert_se(strcpy8(buf, "A") == buf);
+        assert_se(streq8(buf, "A"));
+        assert_se(strcpy8(buf, NULL) == buf);
+        assert_se(streq8(buf, ""));
+}
+
+TEST(strcpy16) {
+        char16_t buf[128];
+
+        assert_se(strcpy16(buf, u"123") == buf);
+        assert_se(streq16(buf, u"123"));
+        assert_se(strcpy16(buf, u"") == buf);
+        assert_se(streq16(buf, u""));
+        assert_se(strcpy16(buf, u"A") == buf);
+        assert_se(streq16(buf, u"A"));
+        assert_se(strcpy16(buf, NULL) == buf);
+        assert_se(streq16(buf, u""));
+}
+
+TEST(strchr8) {
+        assert_se(!strchr8(NULL, 'a'));
+        assert_se(!strchr8("", 'a'));
+        assert_se(!strchr8("123", 'a'));
+
+        const char str[] = "abcaBc";
+        assert_se(strchr8(str, 'a') == &str[0]);
+        assert_se(strchr8(str, 'c') == &str[2]);
+        assert_se(strchr8(str, 'B') == &str[4]);
+}
+
+TEST(strchr16) {
+        assert_se(!strchr16(NULL, 'a'));
+        assert_se(!strchr16(u"", 'a'));
+        assert_se(!strchr16(u"123", 'a'));
+
+        const char16_t str[] = u"abcaBc";
+        assert_se(strchr16(str, 'a') == &str[0]);
+        assert_se(strchr16(str, 'c') == &str[2]);
+        assert_se(strchr16(str, 'B') == &str[4]);
+}
+
+TEST(xstrndup8) {
+        char *s = NULL;
+
+        assert_se(xstrndup8(NULL, 0) == NULL);
+        assert_se(xstrndup8(NULL, 10) == NULL);
+
+        assert_se(s = xstrndup8("", 10));
+        assert_se(streq8(s, ""));
+        free(s);
+
+        assert_se(s = xstrndup8("abc", 0));
+        assert_se(streq8(s, ""));
+        free(s);
+
+        assert_se(s = xstrndup8("ABC", 3));
+        assert_se(streq8(s, "ABC"));
+        free(s);
+
+        assert_se(s = xstrndup8("123abcDEF", 5));
+        assert_se(streq8(s, "123ab"));
+        free(s);
+}
+
+TEST(xstrdup8) {
+        char *s = NULL;
+
+        assert_se(xstrdup8(NULL) == NULL);
+
+        assert_se(s = xstrdup8(""));
+        assert_se(streq8(s, ""));
+        free(s);
+
+        assert_se(s = xstrdup8("1"));
+        assert_se(streq8(s, "1"));
+        free(s);
+
+        assert_se(s = xstrdup8("123abcDEF"));
+        assert_se(streq8(s, "123abcDEF"));
+        free(s);
+}
+
+TEST(xstrndup16) {
+        char16_t *s = NULL;
+
+        assert_se(xstrndup16(NULL, 0) == NULL);
+        assert_se(xstrndup16(NULL, 10) == NULL);
+
+        assert_se(s = xstrndup16(u"", 10));
+        assert_se(streq16(s, u""));
+        free(s);
+
+        assert_se(s = xstrndup16(u"abc", 0));
+        assert_se(streq16(s, u""));
+        free(s);
+
+        assert_se(s = xstrndup16(u"ABC", 3));
+        assert_se(streq16(s, u"ABC"));
+        free(s);
+
+        assert_se(s = xstrndup16(u"123abcDEF", 5));
+        assert_se(streq16(s, u"123ab"));
+        free(s);
+}
+
+TEST(xstrdup16) {
+        char16_t *s = NULL;
+
+        assert_se(xstrdup16(NULL) == NULL);
+
+        assert_se(s = xstrdup16(u""));
+        assert_se(streq16(s, u""));
+        free(s);
+
+        assert_se(s = xstrdup16(u"1"));
+        assert_se(streq16(s, u"1"));
+        free(s);
+
+        assert_se(s = xstrdup16(u"123abcDEF"));
+        assert_se(streq16(s, u"123abcDEF"));
+        free(s);
+}
+
+TEST(xstrn8_to_16) {
+        char16_t *s = NULL;
+
+        assert_se(xstrn8_to_16(NULL, 1) == NULL);
+        assert_se(xstrn8_to_16("a", 0) == NULL);
+
+        assert_se(s = xstrn8_to_16("", 1));
+        assert_se(streq16(s, u""));
+        free(s);
+
+        assert_se(s = xstrn8_to_16("1", 1));
+        assert_se(streq16(s, u"1"));
+        free(s);
+
+        assert_se(s = xstr8_to_16("abcxyzABCXYZ09 .,-_#*!\"§$%&/()=?`~"));
+        assert_se(streq16(s, u"abcxyzABCXYZ09 .,-_#*!\"§$%&/()=?`~"));
+        free(s);
+
+        assert_se(s = xstr8_to_16("ÿⱿ𝇉 😺"));
+        assert_se(streq16(s, u"ÿⱿ "));
+        free(s);
+
+        assert_se(s = xstrn8_to_16("¶¶", 3));
+        assert_se(streq16(s, u"¶"));
+        free(s);
+}
+
+#define TEST_FNMATCH_ONE(pattern, haystack, expect)                                     \
+        ({                                                                              \
+                assert_se(fnmatch(pattern, haystack, 0) == (expect ? 0 : FNM_NOMATCH)); \
+                assert_se(efi_fnmatch(u##pattern, u##haystack) == expect);              \
+        })
+
+TEST(efi_fnmatch) {
+        TEST_FNMATCH_ONE("", "", true);
+        TEST_FNMATCH_ONE("abc", "abc", true);
+        TEST_FNMATCH_ONE("aBc", "abc", false);
+        TEST_FNMATCH_ONE("b", "a", false);
+        TEST_FNMATCH_ONE("b", "", false);
+        TEST_FNMATCH_ONE("abc", "a", false);
+        TEST_FNMATCH_ONE("a?c", "azc", true);
+        TEST_FNMATCH_ONE("???", "?.9", true);
+        TEST_FNMATCH_ONE("1?", "1", false);
+        TEST_FNMATCH_ONE("***", "", true);
+        TEST_FNMATCH_ONE("*", "123", true);
+        TEST_FNMATCH_ONE("**", "abcd", true);
+        TEST_FNMATCH_ONE("*b*", "abcd", true);
+        TEST_FNMATCH_ONE("abc*d", "abc", false);
+        TEST_FNMATCH_ONE("start*end", "startend", true);
+        TEST_FNMATCH_ONE("start*end", "startendend", true);
+        TEST_FNMATCH_ONE("start*end", "startenddne", false);
+        TEST_FNMATCH_ONE("start*end", "startendstartend", true);
+        TEST_FNMATCH_ONE("start*end", "starten", false);
+        TEST_FNMATCH_ONE("*.conf", "arch.conf", true);
+        TEST_FNMATCH_ONE("debian-*.conf", "debian-wheezy.conf", true);
+        TEST_FNMATCH_ONE("debian-*.*", "debian-wheezy.efi", true);
+        TEST_FNMATCH_ONE("ab*cde", "abzcd", false);
+        TEST_FNMATCH_ONE("\\*\\a\\[", "*a[", true);
+        TEST_FNMATCH_ONE("[abc] [abc] [abc]", "a b c", true);
+        TEST_FNMATCH_ONE("abc]", "abc]", true);
+        TEST_FNMATCH_ONE("[abc]", "z", false);
+        TEST_FNMATCH_ONE("[abc", "a", false);
+        TEST_FNMATCH_ONE("[][!] [][!] [][!]", "[ ] !", true);
+        TEST_FNMATCH_ONE("[]-] []-]", "] -", true);
+        TEST_FNMATCH_ONE("[1\\]] [1\\]]", "1 ]", true);
+        TEST_FNMATCH_ONE("[$-\\+]", "&", true);
+        TEST_FNMATCH_ONE("[1-3A-C] [1-3A-C]", "2 B", true);
+        TEST_FNMATCH_ONE("[3-5] [3-5] [3-5]", "3 4 5", true);
+        TEST_FNMATCH_ONE("[f-h] [f-h] [f-h]", "f g h", true);
+        TEST_FNMATCH_ONE("[a-c-f] [a-c-f] [a-c-f] [a-c-f] [a-c-f]", "a b c - f", true);
+        TEST_FNMATCH_ONE("[a-c-f]", "e", false);
+        TEST_FNMATCH_ONE("[--0] [--0] [--0]", "- . 0", true);
+        TEST_FNMATCH_ONE("[+--] [+--] [+--]", "+ , -", true);
+        TEST_FNMATCH_ONE("[f-l]", "m", false);
+        TEST_FNMATCH_ONE("[b]", "z-a", false);
+        TEST_FNMATCH_ONE("[a\\-z]", "b", false);
+        TEST_FNMATCH_ONE("?a*b[.-0]c", "/a/b/c", true);
+        TEST_FNMATCH_ONE("debian-*-*-*.*", "debian-jessie-2018-06-17-kernel-image-5.10.0-16-amd64.efi", true);
+
+        /* These would take forever with a backtracking implementation. */
+        TEST_FNMATCH_ONE(
+                        "a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*",
+                        "aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy",
+                        false);
+        TEST_FNMATCH_ONE(
+                        "a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*",
+                        "aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz!!!!",
+                        true);
+}
+
+TEST(parse_number8) {
+        uint64_t u;
+        const char *tail;
+
+        assert_se(!parse_number8(NULL, &u, NULL));
+        assert_se(!parse_number8("", &u, NULL));
+        assert_se(!parse_number8("a1", &u, NULL));
+        assert_se(!parse_number8("1a", &u, NULL));
+        assert_se(!parse_number8("-42", &u, NULL));
+        assert_se(!parse_number8("18446744073709551616", &u, NULL));
+
+        assert_se(parse_number8("0", &u, NULL));
+        assert_se(u == 0);
+        assert_se(parse_number8("1", &u, NULL));
+        assert_se(u == 1);
+        assert_se(parse_number8("999", &u, NULL));
+        assert_se(u == 999);
+        assert_se(parse_number8("18446744073709551615", &u, NULL));
+        assert_se(u == UINT64_MAX);
+        assert_se(parse_number8("42", &u, &tail));
+        assert_se(u == 42);
+        assert_se(streq8(tail, ""));
+        assert_se(parse_number8("54321rest", &u, &tail));
+        assert_se(u == 54321);
+        assert_se(streq8(tail, "rest"));
+}
+
+TEST(parse_number16) {
+        uint64_t u;
+        const char16_t *tail;
+
+        assert_se(!parse_number16(NULL, &u, NULL));
+        assert_se(!parse_number16(u"", &u, NULL));
+        assert_se(!parse_number16(u"a1", &u, NULL));
+        assert_se(!parse_number16(u"1a", &u, NULL));
+        assert_se(!parse_number16(u"-42", &u, NULL));
+        assert_se(!parse_number16(u"18446744073709551616", &u, NULL));
+
+        assert_se(parse_number16(u"0", &u, NULL));
+        assert_se(u == 0);
+        assert_se(parse_number16(u"1", &u, NULL));
+        assert_se(u == 1);
+        assert_se(parse_number16(u"999", &u, NULL));
+        assert_se(u == 999);
+        assert_se(parse_number16(u"18446744073709551615", &u, NULL));
+        assert_se(u == UINT64_MAX);
+        assert_se(parse_number16(u"42", &u, &tail));
+        assert_se(u == 42);
+        assert_se(streq16(tail, u""));
+        assert_se(parse_number16(u"54321rest", &u, &tail));
+        assert_se(u == 54321);
+        assert_se(streq16(tail, u"rest"));
+}
+
+_printf_(1, 2) static void test_printf_one(const char *format, ...) {
+        va_list ap, ap_efi;
+        va_start(ap, format);
+        va_copy(ap_efi, ap);
+
+        _cleanup_free_ char *buf = NULL;
+        int r = vasprintf(&buf, format, ap);
+        assert_se(r >= 0);
+        log_info("/* %s(%s) -> \"%.100s\" */", __func__, format, buf);
+
+        _cleanup_free_ char16_t *buf_efi = xvasprintf_status(0, format, ap_efi);
+
+        bool eq = true;
+        for (size_t i = 0; i <= (size_t) r; i++) {
+                if (buf[i] != buf_efi[i])
+                        eq = false;
+                buf[i] = buf_efi[i];
+        }
+
+        log_info("%.100s", buf);
+        assert_se(eq);
+
+        va_end(ap);
+        va_end(ap_efi);
+}
+
+TEST(xvasprintf_status) {
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-zero-length"
+        test_printf_one("");
+#pragma GCC diagnostic pop
+        test_printf_one("string");
+        test_printf_one("%%-%%%%");
+
+        test_printf_one("%p %p %32p %*p %*p", NULL, (void *) 0xF, &errno, 0, &saved_argc, 20, &saved_argv);
+        test_printf_one("%-10p %-32p %-*p %-*p", NULL, &errno, 0, &saved_argc, 20, &saved_argv);
+
+        test_printf_one("%c %3c %*c %*c %-8c", '1', '!', 0, 'a', 9, '_', '>');
+
+        test_printf_one("%s %s %s", "012345", "6789", "ab");
+        test_printf_one("%.4s %.4s %.4s %.0s", "cdefgh", "ijkl", "mn", "@");
+        test_printf_one("%8s %8s %8s", "opqrst", "uvwx", "yz");
+        test_printf_one("%8.4s %8.4s %8.4s %8.0s", "ABCDEF", "GHIJ", "KL", "$");
+        test_printf_one("%4.8s %4.8s %4.8s", "ABCDEFGHIJ", "ABCDEFGH", "ABCD");
+
+        test_printf_one("%.*s %.*s %.*s %.*s", 4, "012345", 4, "6789", 4, "ab", 0, "&");
+        test_printf_one("%*s %*s %*s", 8, "cdefgh", 8, "ijkl", 8, "mn");
+        test_printf_one("%*.*s %*.*s %*.*s %*.*s", 8, 4, "opqrst", 8, 4, "uvwx", 8, 4, "yz", 8, 0, "#");
+        test_printf_one("%*.*s %*.*s %*.*s", 3, 8, "OPQRST", 3, 8, "UVWX", 3, 8, "YZ");
+
+        test_printf_one("%ls %ls %ls", L"012345", L"6789", L"ab");
+        test_printf_one("%.4ls %.4ls %.4ls %.0ls", L"cdefgh", L"ijkl", L"mn", L"@");
+        test_printf_one("%8ls %8ls %8ls", L"opqrst", L"uvwx", L"yz");
+        test_printf_one("%8.4ls %8.4ls %8.4ls %8.0ls", L"ABCDEF", L"GHIJ", L"KL", L"$");
+        test_printf_one("%4.8ls %4.8ls %4.8ls", L"ABCDEFGHIJ", L"ABCDEFGH", L"ABCD");
+
+        test_printf_one("%.*ls %.*ls %.*ls %.*ls", 4, L"012345", 4, L"6789", 4, L"ab", 0, L"&");
+        test_printf_one("%*ls %*ls %*ls", 8, L"cdefgh", 8, L"ijkl", 8, L"mn");
+        test_printf_one("%*.*ls %*.*ls %*.*ls %*.*ls", 8, 4, L"opqrst", 8, 4, L"uvwx", 8, 4, L"yz", 8, 0, L"#");
+        test_printf_one("%*.*ls %*.*ls %*.*ls", 3, 8, L"OPQRST", 3, 8, L"UVWX", 3, 8, L"YZ");
+
+        test_printf_one("%-14s %-10.0s %-10.3s", "left", "", "chopped");
+        test_printf_one("%-14ls %-10.0ls %-10.3ls", L"left", L"", L"chopped");
+
+        test_printf_one("%.6s", (char[]){ 'n', 'o', ' ', 'n', 'u', 'l' });
+        test_printf_one("%.6ls", (wchar_t[]){ 'n', 'o', ' ', 'n', 'u', 'l' });
+
+        test_printf_one("%u %u %u", 0U, 42U, 1234567890U);
+        test_printf_one("%i %i %i", 0, -42, -1234567890);
+        test_printf_one("%x %x %x", 0x0U, 0x42U, 0x123ABCU);
+        test_printf_one("%X %X %X", 0x1U, 0x43U, 0x234BCDU);
+        test_printf_one("%#x %#x %#x", 0x2U, 0x44U, 0x345CDEU);
+        test_printf_one("%#X %#X %#X", 0x3U, 0x45U, 0x456FEDU);
+
+        test_printf_one("%u %lu %llu %zu", UINT_MAX, ULONG_MAX, ULLONG_MAX, SIZE_MAX);
+        test_printf_one("%i %i %zi", INT_MIN, INT_MAX, SSIZE_MAX);
+        test_printf_one("%li %li %lli %lli", LONG_MIN, LONG_MAX, LLONG_MIN, LLONG_MAX);
+        test_printf_one("%x %#lx %llx %#zx", UINT_MAX, ULONG_MAX, ULLONG_MAX, SIZE_MAX);
+        test_printf_one("%X %#lX %llX %#zX", UINT_MAX, ULONG_MAX, ULLONG_MAX, SIZE_MAX);
+        test_printf_one("%ju %ji %ji", UINTMAX_MAX, INTMAX_MIN, INTMAX_MAX);
+        test_printf_one("%ti %ti", PTRDIFF_MIN, PTRDIFF_MAX);
+
+        test_printf_one("%" PRIu32 " %" PRIi32 " %" PRIi32, UINT32_MAX, INT32_MIN, INT32_MAX);
+        test_printf_one("%" PRIx32 " %" PRIX32, UINT32_MAX, UINT32_MAX);
+        test_printf_one("%#" PRIx32 " %#" PRIX32, UINT32_MAX, UINT32_MAX);
+
+        test_printf_one("%" PRIu64 " %" PRIi64 " %" PRIi64, UINT64_MAX, INT64_MIN, INT64_MAX);
+        test_printf_one("%" PRIx64 " %" PRIX64, UINT64_MAX, UINT64_MAX);
+        test_printf_one("%#" PRIx64 " %#" PRIX64, UINT64_MAX, UINT64_MAX);
+
+        test_printf_one("%.11u %.11i %.11x %.11X %#.11x %#.11X", 1U, -2, 3U, 0xA1U, 0xB2U, 0xC3U);
+        test_printf_one("%13u %13i %13x %13X %#13x %#13X", 4U, -5, 6U, 0xD4U, 0xE5U, 0xF6U);
+        test_printf_one("%9.5u %9.5i %9.5x %9.5X %#9.5x %#9.5X", 7U, -8, 9U, 0xA9U, 0xB8U, 0xC7U);
+        test_printf_one("%09u %09i %09x %09X %#09x %#09X", 4U, -5, 6U, 0xD6U, 0xE5U, 0xF4U);
+
+        test_printf_one("%*u %.*u %*i %.*i", 15, 42U, 15, 43U, 15, -42, 15, -43);
+        test_printf_one("%*.*u %*.*i", 14, 10, 13U, 14, 10, -14);
+        test_printf_one("%*x %*X %.*x %.*X", 15, 0x1AU, 15, 0x2BU, 15, 0x3CU, 15, 0x4DU);
+        test_printf_one("%#*x %#*X %#.*x %#.*X", 15, 0xA1U, 15, 0xB2U, 15, 0xC3U, 15, 0xD4U);
+        test_printf_one("%*.*x %*.*X", 14, 10, 0x1AU, 14, 10, 0x2BU);
+        test_printf_one("%#*.*x %#*.*X", 14, 10, 0x3CU, 14, 10, 0x4DU);
+
+        test_printf_one("%+.5i %+.5i % .7i % .7i", -15, 51, -15, 51);
+        test_printf_one("%+5.i %+5.i % 7.i % 7.i", -15, 51, -15, 51);
+
+        test_printf_one("%-10u %-10i %-10x %#-10X %- 10i", 1u, -2, 0xA2D2u, 0XB3F4u, -512);
+        test_printf_one("%-10.6u %-10.6i %-10.6x %#-10.6X %- 10.6i", 1u, -2, 0xA2D2u, 0XB3F4u, -512);
+        test_printf_one("%-6.10u %-6.10i %-6.10x %#-6.10X %- 6.10i", 3u, -4, 0x2A2Du, 0X3B4Fu, -215);
+        test_printf_one("%*.u %.*i %.*i", -4, 9u, -4, 8, -4, -6);
+
+        test_printf_one("%.0u %.0i %.0x %.0X", 0u, 0, 0u, 0u);
+        test_printf_one("%.*u %.*i %.*x %.*X", 0, 0u, 0, 0, 0, 0u, 0, 0u);
+        test_printf_one("%*u %*i %*x %*X", -1, 0u, -1, 0, -1, 0u, -1, 0u);
+
+        test_printf_one("%*s%*s%*s", 256, "", 256, "", 4096, ""); /* Test buf growing. */
+        test_printf_one("%0*i%0*i%0*i", 256, 0, 256, 0, 4096, 0); /* Test buf growing. */
+        test_printf_one("%0*i", INT16_MAX, 0); /* Poor programmer's memzero. */
+
+        /* Non printf-compatible behavior tests below. */
+        char16_t *s;
+
+        assert_se(s = xasprintf_status(0, "\n \r \r\n"));
+        assert_se(streq16(s, u"\r\n \r \r\r\n"));
+        s = mfree(s);
+
+        assert_se(s = xasprintf_status(EFI_SUCCESS, "%m"));
+        assert_se(streq16(s, u"Success"));
+        s = mfree(s);
+
+        assert_se(s = xasprintf_status(EFI_SUCCESS, "%15m"));
+        assert_se(streq16(s, u"        Success"));
+        s = mfree(s);
+
+        assert_se(s = xasprintf_status(EFI_LOAD_ERROR, "%m"));
+        assert_se(streq16(s, u"Load error"));
+        s = mfree(s);
+
+        assert_se(s = xasprintf_status(0x42, "%m"));
+        assert_se(streq16(s, u"0x42"));
+        s = mfree(s);
+}
+
+TEST(efi_memcmp) {
+        assert_se(efi_memcmp(NULL, NULL, 0) == 0);
+        assert_se(efi_memcmp(NULL, NULL, 1) == 0);
+        assert_se(efi_memcmp(NULL, "", 1) < 0);
+        assert_se(efi_memcmp("", NULL, 1) > 0);
+        assert_se(efi_memcmp("", "", 0) == 0);
+        assert_se(efi_memcmp("", "", 1) == 0);
+        assert_se(efi_memcmp("1", "1", 1) == 0);
+        assert_se(efi_memcmp("1", "2", 1) < 0);
+        assert_se(efi_memcmp("A", "a", 1) < 0);
+        assert_se(efi_memcmp("a", "A", 1) > 0);
+        assert_se(efi_memcmp("abc", "ab", 2) == 0);
+        assert_se(efi_memcmp("ab", "abc", 3) < 0);
+        assert_se(efi_memcmp("abc", "ab", 3) > 0);
+        assert_se(efi_memcmp("ab\000bd", "ab\000bd", 6) == 0);
+        assert_se(efi_memcmp("ab\000b\0", "ab\000bd", 6) < 0);
+}
+
+TEST(efi_memcpy) {
+        char buf[10];
+
+        assert_se(!efi_memcpy(NULL, NULL, 0));
+        assert_se(!efi_memcpy(NULL, "", 1));
+        assert_se(efi_memcpy(buf, NULL, 0) == buf);
+        assert_se(efi_memcpy(buf, NULL, 1) == buf);
+        assert_se(efi_memcpy(buf, "a", 0) == buf);
+
+        assert_se(efi_memcpy(buf, "", 1) == buf);
+        assert_se(memcmp(buf, "", 1) == 0);
+        assert_se(efi_memcpy(buf, "1", 1) == buf);
+        assert_se(memcmp(buf, "1", 1) == 0);
+        assert_se(efi_memcpy(buf, "23", 3) == buf);
+        assert_se(memcmp(buf, "23", 3) == 0);
+        assert_se(efi_memcpy(buf, "45\0ab\0\0\0c", 9) == buf);
+        assert_se(memcmp(buf, "45\0ab\0\0\0c", 9) == 0);
+}
+
+TEST(efi_memset) {
+        char buf[10];
+
+        assert_se(!efi_memset(NULL, '1', 0));
+        assert_se(!efi_memset(NULL, '1', 1));
+        assert_se(efi_memset(buf, '1', 0) == buf);
+
+        assert_se(efi_memset(buf, '2', 1) == buf);
+        assert_se(memcmp(buf, "2", 1) == 0);
+        assert_se(efi_memset(buf, '4', 4) == buf);
+        assert_se(memcmp(buf, "4444", 4) == 0);
+        assert_se(efi_memset(buf, 'a', 10) == buf);
+        assert_se(memcmp(buf, "aaaaaaaaaa", 10) == 0);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/boot/efi/ticks.c b/src/boot/efi/ticks.c
new file mode 100644
index 0000000..6549296
--- /dev/null
+++ b/src/boot/efi/ticks.c
@@ -0,0 +1,85 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <efi.h>
+#include <efilib.h>
+
+#include "ticks.h"
+#include "util.h"
+#include "vmm.h"
+
+#ifdef __x86_64__
+static uint64_t ticks_read(void) {
+        uint64_t a, d;
+
+        /* The TSC might or might not be virtualized in VMs (and thus might not be accurate or start at zero
+         * at boot), depending on hypervisor and CPU functionality. If it's not virtualized it's not useful
+         * for keeping time, hence don't attempt to use it. */
+        if (in_hypervisor())
+                return 0;
+
+        __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
+        return (d << 32) | a;
+}
+#elif defined(__i386__)
+static uint64_t ticks_read(void) {
+        uint64_t val;
+
+        if (in_hypervisor())
+                return 0;
+
+        __asm__ volatile ("rdtsc" : "=A" (val));
+        return val;
+}
+#elif defined(__aarch64__)
+static uint64_t ticks_read(void) {
+        uint64_t val;
+        asm volatile("mrs %0, cntvct_el0" : "=r"(val));
+        return val;
+}
+#else
+static uint64_t ticks_read(void) {
+        return 0;
+}
+#endif
+
+#if defined(__aarch64__)
+static uint64_t ticks_freq(void) {
+        uint64_t freq;
+        asm volatile("mrs %0, cntfrq_el0" : "=r"(freq));
+        return freq;
+}
+#else
+/* count TSC ticks during a millisecond delay */
+static uint64_t ticks_freq(void) {
+        uint64_t ticks_start, ticks_end;
+        static uint64_t cache = 0;
+
+        if (cache != 0)
+                return cache;
+
+        ticks_start = ticks_read();
+        BS->Stall(1000);
+        ticks_end = ticks_read();
+
+        if (ticks_end < ticks_start) /* Check for an overflow (which is not that unlikely, given on some
+                                      * archs the value is 32bit) */
+                return 0;
+
+        cache = (ticks_end - ticks_start) * 1000UL;
+        return cache;
+}
+#endif
+
+uint64_t time_usec(void) {
+        uint64_t ticks, freq;
+
+        ticks = ticks_read();
+        if (ticks == 0)
+                return 0;
+
+        freq = ticks_freq();
+        if (freq == 0)
+                return 0;
+
+        return 1000UL * 1000UL * ticks / freq;
+}
diff --git a/src/boot/efi/ticks.h b/src/boot/efi/ticks.h
new file mode 100644
index 0000000..fec3764
--- /dev/null
+++ b/src/boot/efi/ticks.h
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdint.h>
+
+uint64_t time_usec(void);
diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c
index aee0760..683724b 100644
--- a/src/boot/efi/util.c
+++ b/src/boot/efi/util.c
@@ -2,407 +2,328 @@
 
 #include <efi.h>
 #include <efilib.h>
+#include <inttypes.h>
 
+#include "ticks.h"
 #include "util.h"
 
-#ifdef __x86_64__
-UINT64 ticks_read(VOID) {
-        UINT64 a, d;
-        __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
-        return (d << 32) | a;
-}
-#elif defined(__i386__)
-UINT64 ticks_read(VOID) {
-        UINT64 val;
-        __asm__ volatile ("rdtsc" : "=A" (val));
-        return val;
-}
-#else
-UINT64 ticks_read(VOID) {
-        UINT64 val = 1;
-        return val;
-}
-#endif
+EFI_STATUS parse_boolean(const char *v, bool *b) {
+        assert(b);
 
-/* count TSC ticks during a millisecond delay */
-UINT64 ticks_freq(VOID) {
-        UINT64 ticks_start, ticks_end;
-
-        ticks_start = ticks_read();
-        uefi_call_wrapper(BS->Stall, 1, 1000);
-        ticks_end = ticks_read();
-
-        return (ticks_end - ticks_start) * 1000UL;
-}
-
-UINT64 time_usec(VOID) {
-        UINT64 ticks;
-        static UINT64 freq;
-
-        ticks = ticks_read();
-        if (ticks == 0)
-                return 0;
-
-        if (freq == 0) {
-                freq = ticks_freq();
-                if (freq == 0)
-                        return 0;
-        }
-
-        return 1000UL * 1000UL * ticks / freq;
-}
-
-EFI_STATUS parse_boolean(const CHAR8 *v, BOOLEAN *b) {
         if (!v)
                 return EFI_INVALID_PARAMETER;
 
-        if (strcmpa(v, (CHAR8 *)"1") == 0 ||
-            strcmpa(v, (CHAR8 *)"yes") == 0 ||
-            strcmpa(v, (CHAR8 *)"y") == 0 ||
-            strcmpa(v, (CHAR8 *)"true") == 0) {
-                *b = TRUE;
+        if (streq8(v, "1") || streq8(v, "yes") || streq8(v, "y") || streq8(v, "true") || streq8(v, "t") ||
+            streq8(v, "on")) {
+                *b = true;
                 return EFI_SUCCESS;
         }
 
-        if (strcmpa(v, (CHAR8 *)"0") == 0 ||
-            strcmpa(v, (CHAR8 *)"no") == 0 ||
-            strcmpa(v, (CHAR8 *)"n") == 0 ||
-            strcmpa(v, (CHAR8 *)"false") == 0) {
-                *b = FALSE;
+        if (streq8(v, "0") || streq8(v, "no") || streq8(v, "n") || streq8(v, "false") || streq8(v, "f") ||
+            streq8(v, "off")) {
+                *b = false;
                 return EFI_SUCCESS;
         }
 
         return EFI_INVALID_PARAMETER;
 }
 
-EFI_STATUS efivar_set_raw(const EFI_GUID *vendor, const CHAR16 *name, const VOID *buf, UINTN size, UINT32 flags) {
+EFI_STATUS efivar_set_raw(const EFI_GUID *vendor, const char16_t *name, const void *buf, size_t size, uint32_t flags) {
+        assert(vendor);
+        assert(name);
+        assert(buf || size == 0);
+
         flags |= EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS;
-        return uefi_call_wrapper(RT->SetVariable, 5, (CHAR16*) name, (EFI_GUID *)vendor, flags, size, (VOID*) buf);
+        return RT->SetVariable((char16_t *) name, (EFI_GUID *) vendor, flags, size, (void *) buf);
 }
 
-EFI_STATUS efivar_set(const EFI_GUID *vendor, const CHAR16 *name, const CHAR16 *value, UINT32 flags) {
-        return efivar_set_raw(vendor, name, value, value ? (StrLen(value) + 1) * sizeof(CHAR16) : 0, flags);
+EFI_STATUS efivar_set(const EFI_GUID *vendor, const char16_t *name, const char16_t *value, uint32_t flags) {
+        assert(vendor);
+        assert(name);
+
+        return efivar_set_raw(vendor, name, value, value ? strsize16(value) : 0, flags);
 }
 
-EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, const CHAR16 *name, UINTN i, UINT32 flags) {
-        CHAR16 str[32];
+EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, const char16_t *name, size_t i, uint32_t flags) {
+        assert(vendor);
+        assert(name);
 
-        SPrint(str, 32, L"%u", i);
+        _cleanup_free_ char16_t *str = xasprintf("%zu", i);
         return efivar_set(vendor, name, str, flags);
 }
 
-EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, const CHAR16 *name, UINT32 value, UINT32 flags) {
-        UINT8 buf[4];
+EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, const char16_t *name, uint32_t value, uint32_t flags) {
+        uint8_t buf[4];
 
-        buf[0] = (UINT8)(value >> 0U & 0xFF);
-        buf[1] = (UINT8)(value >> 8U & 0xFF);
-        buf[2] = (UINT8)(value >> 16U & 0xFF);
-        buf[3] = (UINT8)(value >> 24U & 0xFF);
+        assert(vendor);
+        assert(name);
+
+        buf[0] = (uint8_t)(value >> 0U & 0xFF);
+        buf[1] = (uint8_t)(value >> 8U & 0xFF);
+        buf[2] = (uint8_t)(value >> 16U & 0xFF);
+        buf[3] = (uint8_t)(value >> 24U & 0xFF);
 
         return efivar_set_raw(vendor, name, buf, sizeof(buf), flags);
 }
 
-EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, const CHAR16 *name, UINT64 value, UINT32 flags) {
-        UINT8 buf[8];
+EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, const char16_t *name, uint64_t value, uint32_t flags) {
+        uint8_t buf[8];
 
-        buf[0] = (UINT8)(value >> 0U & 0xFF);
-        buf[1] = (UINT8)(value >> 8U & 0xFF);
-        buf[2] = (UINT8)(value >> 16U & 0xFF);
-        buf[3] = (UINT8)(value >> 24U & 0xFF);
-        buf[4] = (UINT8)(value >> 32U & 0xFF);
-        buf[5] = (UINT8)(value >> 40U & 0xFF);
-        buf[6] = (UINT8)(value >> 48U & 0xFF);
-        buf[7] = (UINT8)(value >> 56U & 0xFF);
+        assert(vendor);
+        assert(name);
+
+        buf[0] = (uint8_t)(value >> 0U & 0xFF);
+        buf[1] = (uint8_t)(value >> 8U & 0xFF);
+        buf[2] = (uint8_t)(value >> 16U & 0xFF);
+        buf[3] = (uint8_t)(value >> 24U & 0xFF);
+        buf[4] = (uint8_t)(value >> 32U & 0xFF);
+        buf[5] = (uint8_t)(value >> 40U & 0xFF);
+        buf[6] = (uint8_t)(value >> 48U & 0xFF);
+        buf[7] = (uint8_t)(value >> 56U & 0xFF);
 
         return efivar_set_raw(vendor, name, buf, sizeof(buf), flags);
 }
 
-EFI_STATUS efivar_get(const EFI_GUID *vendor, const CHAR16 *name, CHAR16 **value) {
-        _cleanup_freepool_ CHAR8 *buf = NULL;
+EFI_STATUS efivar_get(const EFI_GUID *vendor, const char16_t *name, char16_t **ret) {
+        _cleanup_free_ char16_t *buf = NULL;
         EFI_STATUS err;
-        CHAR16 *val;
-        UINTN size;
+        char16_t *val;
+        size_t size;
 
-        err = efivar_get_raw(vendor, name, &buf, &size);
-        if (EFI_ERROR(err))
+        assert(vendor);
+        assert(name);
+
+        err = efivar_get_raw(vendor, name, (char **) &buf, &size);
+        if (err != EFI_SUCCESS)
                 return err;
 
         /* Make sure there are no incomplete characters in the buffer */
-        if ((size % 2) != 0)
+        if ((size % sizeof(char16_t)) != 0)
                 return EFI_INVALID_PARAMETER;
 
-        if (!value)
+        if (!ret)
                 return EFI_SUCCESS;
 
         /* Return buffer directly if it happens to be NUL terminated already */
-        if (size >= 2 && buf[size-2] == 0 && buf[size-1] == 0) {
-                *value = (CHAR16*) TAKE_PTR(buf);
+        if (size >= sizeof(char16_t) && buf[size / sizeof(char16_t) - 1] == 0) {
+                *ret = TAKE_PTR(buf);
                 return EFI_SUCCESS;
         }
 
         /* Make sure a terminating NUL is available at the end */
-        val = AllocatePool(size + 2);
-        if (!val)
-                return EFI_OUT_OF_RESOURCES;
+        val = xmalloc(size + sizeof(char16_t));
 
-        CopyMem(val, buf, size);
-        val[size/2] = 0; /* NUL terminate */
+        memcpy(val, buf, size);
+        val[size / sizeof(char16_t) - 1] = 0; /* NUL terminate */
 
-        *value = val;
+        *ret = val;
         return EFI_SUCCESS;
 }
 
-EFI_STATUS efivar_get_uint_string(const EFI_GUID *vendor, const CHAR16 *name, UINTN *i) {
-        _cleanup_freepool_ CHAR16 *val = NULL;
+EFI_STATUS efivar_get_uint_string(const EFI_GUID *vendor, const char16_t *name, size_t *ret) {
+        _cleanup_free_ char16_t *val = NULL;
         EFI_STATUS err;
+        uint64_t u;
+
+        assert(vendor);
+        assert(name);
 
         err = efivar_get(vendor, name, &val);
-        if (!EFI_ERROR(err) && i)
-                *i = Atoi(val);
+        if (err != EFI_SUCCESS)
+                return err;
 
-        return err;
+        if (!parse_number16(val, &u, NULL) || u > SIZE_MAX)
+                return EFI_INVALID_PARAMETER;
+
+        if (ret)
+                *ret = u;
+        return EFI_SUCCESS;
 }
 
-EFI_STATUS efivar_get_uint32_le(const EFI_GUID *vendor, const CHAR16 *name, UINT32 *ret) {
-        _cleanup_freepool_ CHAR8 *buf = NULL;
-        UINTN size;
+EFI_STATUS efivar_get_uint32_le(const EFI_GUID *vendor, const char16_t *name, uint32_t *ret) {
+        _cleanup_free_ char *buf = NULL;
+        size_t size;
         EFI_STATUS err;
 
+        assert(vendor);
+        assert(name);
+
         err = efivar_get_raw(vendor, name, &buf, &size);
-        if (!EFI_ERROR(err) && ret) {
-                if (size != sizeof(UINT32))
-                        return EFI_BUFFER_TOO_SMALL;
+        if (err != EFI_SUCCESS)
+                return err;
 
-                *ret = (UINT32) buf[0] << 0U | (UINT32) buf[1] << 8U | (UINT32) buf[2] << 16U |
-                        (UINT32) buf[3] << 24U;
-        }
+        if (size != sizeof(uint32_t))
+                return EFI_BUFFER_TOO_SMALL;
 
-        return err;
+        if (ret)
+                *ret = (uint32_t) buf[0] << 0U | (uint32_t) buf[1] << 8U | (uint32_t) buf[2] << 16U |
+                        (uint32_t) buf[3] << 24U;
+
+        return EFI_SUCCESS;
 }
 
-EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const CHAR16 *name, UINT64 *ret) {
-        _cleanup_freepool_ CHAR8 *buf = NULL;
-        UINTN size;
+EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const char16_t *name, uint64_t *ret) {
+        _cleanup_free_ char *buf = NULL;
+        size_t size;
         EFI_STATUS err;
 
+        assert(vendor);
+        assert(name);
+
         err = efivar_get_raw(vendor, name, &buf, &size);
-        if (!EFI_ERROR(err) && ret) {
-                if (size != sizeof(UINT64))
-                        return EFI_BUFFER_TOO_SMALL;
+        if (err != EFI_SUCCESS)
+                return err;
 
-                *ret = (UINT64) buf[0] << 0U | (UINT64) buf[1] << 8U | (UINT64) buf[2] << 16U |
-                        (UINT64) buf[3] << 24U | (UINT64) buf[4] << 32U | (UINT64) buf[5] << 40U |
-                        (UINT64) buf[6] << 48U | (UINT64) buf[7] << 56U;
-        }
+        if (size != sizeof(uint64_t))
+                return EFI_BUFFER_TOO_SMALL;
 
-        return err;
+        if (ret)
+                *ret = (uint64_t) buf[0] << 0U | (uint64_t) buf[1] << 8U | (uint64_t) buf[2] << 16U |
+                        (uint64_t) buf[3] << 24U | (uint64_t) buf[4] << 32U | (uint64_t) buf[5] << 40U |
+                        (uint64_t) buf[6] << 48U | (uint64_t) buf[7] << 56U;
+
+        return EFI_SUCCESS;
 }
 
-EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const CHAR16 *name, CHAR8 **buffer, UINTN *size) {
-        _cleanup_freepool_ CHAR8 *buf = NULL;
-        UINTN l;
+EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const char16_t *name, char **ret, size_t *ret_size) {
+        _cleanup_free_ char *buf = NULL;
+        size_t l;
         EFI_STATUS err;
 
-        l = sizeof(CHAR16 *) * EFI_MAXIMUM_VARIABLE_SIZE;
-        buf = AllocatePool(l);
-        if (!buf)
-                return EFI_OUT_OF_RESOURCES;
+        assert(vendor);
+        assert(name);
 
-        err = uefi_call_wrapper(RT->GetVariable, 5, (CHAR16*) name, (EFI_GUID *)vendor, NULL, &l, buf);
-        if (!EFI_ERROR(err)) {
+        l = sizeof(char16_t *) * EFI_MAXIMUM_VARIABLE_SIZE;
+        buf = xmalloc(l);
 
-                if (buffer)
-                        *buffer = TAKE_PTR(buf);
+        err = RT->GetVariable((char16_t *) name, (EFI_GUID *) vendor, NULL, &l, buf);
+        if (err != EFI_SUCCESS)
+                return err;
 
-                if (size)
-                        *size = l;
-        }
+        if (ret)
+                *ret = TAKE_PTR(buf);
+        if (ret_size)
+                *ret_size = l;
 
-        return err;
+        return EFI_SUCCESS;
 }
 
-EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const CHAR16 *name, BOOLEAN *ret) {
-        _cleanup_freepool_ CHAR8 *b = NULL;
-        UINTN size;
+EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const char16_t *name, bool *ret) {
+        _cleanup_free_ char *b = NULL;
+        size_t size;
         EFI_STATUS err;
 
+        assert(vendor);
+        assert(name);
+
         err = efivar_get_raw(vendor, name, &b, &size);
-        if (!EFI_ERROR(err))
+        if (err != EFI_SUCCESS)
+                return err;
+
+        if (ret)
                 *ret = *b > 0;
 
-        return err;
+        return EFI_SUCCESS;
 }
 
-VOID efivar_set_time_usec(const EFI_GUID *vendor, const CHAR16 *name, UINT64 usec) {
-        CHAR16 str[32];
+void efivar_set_time_usec(const EFI_GUID *vendor, const char16_t *name, uint64_t usec) {
+        assert(vendor);
+        assert(name);
 
         if (usec == 0)
                 usec = time_usec();
         if (usec == 0)
                 return;
 
-        SPrint(str, 32, L"%ld", usec);
+        _cleanup_free_ char16_t *str = xasprintf("%" PRIu64, usec);
         efivar_set(vendor, name, str, 0);
 }
 
-static INTN utf8_to_16(const CHAR8 *stra, CHAR16 *c) {
-        CHAR16 unichar;
-        UINTN len;
+void convert_efi_path(char16_t *path) {
+        assert(path);
 
-        if (!(stra[0] & 0x80))
-                len = 1;
-        else if ((stra[0] & 0xe0) == 0xc0)
-                len = 2;
-        else if ((stra[0] & 0xf0) == 0xe0)
-                len = 3;
-        else if ((stra[0] & 0xf8) == 0xf0)
-                len = 4;
-        else if ((stra[0] & 0xfc) == 0xf8)
-                len = 5;
-        else if ((stra[0] & 0xfe) == 0xfc)
-                len = 6;
-        else
-                return -1;
+        for (size_t i = 0, fixed = 0;; i++) {
+                /* Fix device path node separator. */
+                path[fixed] = (path[i] == '/') ? '\\' : path[i];
 
-        switch (len) {
-        case 1:
-                unichar = stra[0];
-                break;
-        case 2:
-                unichar = stra[0] & 0x1f;
-                break;
-        case 3:
-                unichar = stra[0] & 0x0f;
-                break;
-        case 4:
-                unichar = stra[0] & 0x07;
-                break;
-        case 5:
-                unichar = stra[0] & 0x03;
-                break;
-        case 6:
-                unichar = stra[0] & 0x01;
-                break;
-        }
-
-        for (UINTN i = 1; i < len; i++) {
-                if ((stra[i] & 0xc0) != 0x80)
-                        return -1;
-                unichar <<= 6;
-                unichar |= stra[i] & 0x3f;
-        }
-
-        *c = unichar;
-        return len;
-}
-
-CHAR16 *stra_to_str(const CHAR8 *stra) {
-        UINTN strlen;
-        UINTN len;
-        UINTN i;
-        CHAR16 *str;
-
-        len = strlena(stra);
-        str = AllocatePool((len + 1) * sizeof(CHAR16));
-
-        strlen = 0;
-        i = 0;
-        while (i < len) {
-                INTN utf8len;
-
-                utf8len = utf8_to_16(stra + i, str + strlen);
-                if (utf8len <= 0) {
-                        /* invalid utf8 sequence, skip the garbage */
-                        i++;
+                /* Double '\' is not allowed in EFI file paths. */
+                if (fixed > 0 && path[fixed - 1] == '\\' && path[fixed] == '\\')
                         continue;
-                }
 
-                strlen++;
-                i += utf8len;
+                if (path[i] == '\0')
+                        break;
+
+                fixed++;
         }
-        str[strlen] = '\0';
-        return str;
 }
 
-CHAR16 *stra_to_path(const CHAR8 *stra) {
-        CHAR16 *str;
-        UINTN strlen;
-        UINTN len;
-        UINTN i;
+char16_t *xstr8_to_path(const char *str8) {
+        assert(str8);
+        char16_t *path = xstr8_to_16(str8);
+        convert_efi_path(path);
+        return path;
+}
 
-        len = strlena(stra);
-        str = AllocatePool((len + 2) * sizeof(CHAR16));
+void mangle_stub_cmdline(char16_t *cmdline) {
+        char16_t *p = cmdline;
 
-        str[0] = '\\';
-        strlen = 1;
-        i = 0;
-        while (i < len) {
-                INTN utf8len;
+        for (; *cmdline != '\0'; cmdline++)
+                /* Convert ASCII control characters to spaces. */
+                if (*cmdline <= 0x1F)
+                        *cmdline = ' ';
 
-                utf8len = utf8_to_16(stra + i, str + strlen);
-                if (utf8len <= 0) {
-                        /* invalid utf8 sequence, skip the garbage */
-                        i++;
-                        continue;
-                }
+        /* chomp the trailing whitespaces */
+        while (cmdline != p) {
+                --cmdline;
 
-                if (str[strlen] == '/')
-                        str[strlen] = '\\';
-                if (str[strlen] == '\\' && str[strlen-1] == '\\') {
-                        /* skip double slashes */
-                        i += utf8len;
-                        continue;
-                }
+                if (*cmdline != ' ')
+                        break;
 
-                strlen++;
-                i += utf8len;
+                *cmdline = '\0';
         }
-        str[strlen] = '\0';
-        return str;
 }
 
-CHAR8 *strchra(const CHAR8 *s, CHAR8 c) {
-        do {
-                if (*s == c)
-                        return (CHAR8*) s;
-        } while (*s++);
-        return NULL;
-}
-
-EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN size, CHAR8 **ret, UINTN *ret_size) {
-        _cleanup_(FileHandleClosep) EFI_FILE_HANDLE handle = NULL;
-        _cleanup_freepool_ CHAR8 *buf = NULL;
+EFI_STATUS file_read(EFI_FILE *dir, const char16_t *name, size_t off, size_t size, char **ret, size_t *ret_size) {
+        _cleanup_(file_closep) EFI_FILE *handle = NULL;
+        _cleanup_free_ char *buf = NULL;
         EFI_STATUS err;
 
-        err = uefi_call_wrapper(dir->Open, 5, dir, &handle, (CHAR16*) name, EFI_FILE_MODE_READ, 0ULL);
-        if (EFI_ERROR(err))
+        assert(dir);
+        assert(name);
+        assert(ret);
+
+        err = dir->Open(dir, &handle, (char16_t*) name, EFI_FILE_MODE_READ, 0ULL);
+        if (err != EFI_SUCCESS)
                 return err;
 
         if (size == 0) {
-                _cleanup_freepool_ EFI_FILE_INFO *info = NULL;
+                _cleanup_free_ EFI_FILE_INFO *info = NULL;
 
-                info = LibFileInfo(handle);
-                if (!info)
-                        return EFI_OUT_OF_RESOURCES;
+                err = get_file_info_harder(handle, &info, NULL);
+                if (err != EFI_SUCCESS)
+                        return err;
 
-                size = info->FileSize+1;
+                size = info->FileSize;
         }
 
         if (off > 0) {
-                err = uefi_call_wrapper(handle->SetPosition, 2, handle, off);
-                if (EFI_ERROR(err))
+                err = handle->SetPosition(handle, off);
+                if (err != EFI_SUCCESS)
                         return err;
         }
 
-        buf = AllocatePool(size + 1);
-        if (!buf)
-                return EFI_OUT_OF_RESOURCES;
+        /* Allocate some extra bytes to guarantee the result is NUL-terminated for char and char16_t strings. */
+        size_t extra = size % sizeof(char16_t) + sizeof(char16_t);
 
-        err = uefi_call_wrapper(handle->Read, 3, handle, &size, buf);
-        if (EFI_ERROR(err))
-                return err;
+        buf = xmalloc(size + extra);
+        if (size > 0) {
+                err = handle->Read(handle, &size, buf);
+                if (err != EFI_SUCCESS)
+                        return err;
+        }
 
-        buf[size] = '\0';
+        /* Note that handle->Read() changes size to reflect the actually bytes read. */
+        memset(buf + size, 0, extra);
 
         *ret = TAKE_PTR(buf);
         if (ret_size)
@@ -411,21 +332,398 @@
         return err;
 }
 
-VOID log_error_stall(const CHAR16 *fmt, ...) {
-        va_list args;
-
-        uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTRED|EFI_BACKGROUND_BLACK);
-
-        Print(L"\n");
-        va_start(args, fmt);
-        VPrint(fmt, args);
-        va_end(args);
-        Print(L"\n");
-
-        uefi_call_wrapper(BS->Stall, 1, 3 * 1000 * 1000);
+void print_at(size_t x, size_t y, size_t attr, const char16_t *str) {
+        assert(str);
+        ST->ConOut->SetCursorPosition(ST->ConOut, x, y);
+        ST->ConOut->SetAttribute(ST->ConOut, attr);
+        ST->ConOut->OutputString(ST->ConOut, (char16_t *) str);
 }
 
-EFI_STATUS log_oom(void) {
-        log_error_stall(L"Out of memory.");
-        return EFI_OUT_OF_RESOURCES;
+void clear_screen(size_t attr) {
+        log_wait();
+        ST->ConOut->SetAttribute(ST->ConOut, attr);
+        ST->ConOut->ClearScreen(ST->ConOut);
+}
+
+void sort_pointer_array(
+                void **array,
+                size_t n_members,
+                compare_pointer_func_t compare) {
+
+        assert(array || n_members == 0);
+        assert(compare);
+
+        if (n_members <= 1)
+                return;
+
+        for (size_t i = 1; i < n_members; i++) {
+                size_t k;
+                void *entry = array[i];
+
+                for (k = i; k > 0; k--) {
+                        if (compare(array[k - 1], entry) <= 0)
+                                break;
+
+                        array[k] = array[k - 1];
+                }
+
+                array[k] = entry;
+        }
+}
+
+EFI_STATUS get_file_info_harder(
+                EFI_FILE *handle,
+                EFI_FILE_INFO **ret,
+                size_t *ret_size) {
+
+        size_t size = offsetof(EFI_FILE_INFO, FileName) + 256;
+        _cleanup_free_ EFI_FILE_INFO *fi = NULL;
+        EFI_STATUS err;
+
+        assert(handle);
+        assert(ret);
+
+        /* A lot like LibFileInfo() but with useful error propagation */
+
+        fi = xmalloc(size);
+        err = handle->GetInfo(handle, MAKE_GUID_PTR(EFI_FILE_INFO), &size, fi);
+        if (err == EFI_BUFFER_TOO_SMALL) {
+                free(fi);
+                fi = xmalloc(size);  /* GetInfo tells us the required size, let's use that now */
+                err = handle->GetInfo(handle, MAKE_GUID_PTR(EFI_FILE_INFO), &size, fi);
+        }
+
+        if (err != EFI_SUCCESS)
+                return err;
+
+        *ret = TAKE_PTR(fi);
+
+        if (ret_size)
+                *ret_size = size;
+
+        return EFI_SUCCESS;
+}
+
+EFI_STATUS readdir_harder(
+                EFI_FILE *handle,
+                EFI_FILE_INFO **buffer,
+                size_t *buffer_size) {
+
+        EFI_STATUS err;
+        size_t sz;
+
+        assert(handle);
+        assert(buffer);
+        assert(buffer_size);
+
+        /* buffer/buffer_size are both in and output parameters. Should be zero-initialized initially, and
+         * the specified buffer needs to be freed by caller, after final use. */
+
+        if (!*buffer) {
+                /* Some broken firmware violates the EFI spec by still advancing the readdir
+                 * position when returning EFI_BUFFER_TOO_SMALL, effectively skipping over any files when
+                 * the buffer was too small. Therefore, start with a buffer that should handle FAT32 max
+                 * file name length.
+                 * As a side effect, most readdir_harder() calls will now be slightly faster. */
+                sz = sizeof(EFI_FILE_INFO) + 256 * sizeof(char16_t);
+                *buffer = xmalloc(sz);
+                *buffer_size = sz;
+        } else
+                sz = *buffer_size;
+
+        err = handle->Read(handle, &sz, *buffer);
+        if (err == EFI_BUFFER_TOO_SMALL) {
+                free(*buffer);
+                *buffer = xmalloc(sz);
+                *buffer_size = sz;
+                err = handle->Read(handle, &sz, *buffer);
+        }
+        if (err != EFI_SUCCESS)
+                return err;
+
+        if (sz == 0) {
+                /* End of directory */
+                free(*buffer);
+                *buffer = NULL;
+                *buffer_size = 0;
+        }
+
+        return EFI_SUCCESS;
+}
+
+bool is_ascii(const char16_t *f) {
+        if (!f)
+                return false;
+
+        for (; *f != 0; f++)
+                if (*f > 127)
+                        return false;
+
+        return true;
+}
+
+char16_t **strv_free(char16_t **v) {
+        if (!v)
+                return NULL;
+
+        for (char16_t **i = v; *i; i++)
+                free(*i);
+
+        free(v);
+        return NULL;
+}
+
+EFI_STATUS open_directory(
+                EFI_FILE *root,
+                const char16_t *path,
+                EFI_FILE **ret) {
+
+        _cleanup_(file_closep) EFI_FILE *dir = NULL;
+        _cleanup_free_ EFI_FILE_INFO *file_info = NULL;
+        EFI_STATUS err;
+
+        assert(root);
+
+        /* Opens a file, and then verifies it is actually a directory */
+
+        err = root->Open(root, &dir, (char16_t *) path, EFI_FILE_MODE_READ, 0);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        err = get_file_info_harder(dir, &file_info, NULL);
+        if (err != EFI_SUCCESS)
+                return err;
+        if (!FLAGS_SET(file_info->Attribute, EFI_FILE_DIRECTORY))
+                return EFI_LOAD_ERROR;
+
+        *ret = TAKE_PTR(dir);
+        return EFI_SUCCESS;
+}
+
+uint64_t get_os_indications_supported(void) {
+        uint64_t osind;
+        EFI_STATUS err;
+
+        /* Returns the supported OS indications. If we can't acquire it, returns a zeroed out mask, i.e. no
+         * supported features. */
+
+        err = efivar_get_uint64_le(MAKE_GUID_PTR(EFI_GLOBAL_VARIABLE), u"OsIndicationsSupported", &osind);
+        if (err != EFI_SUCCESS)
+                return 0;
+
+        return osind;
+}
+
+#ifdef EFI_DEBUG
+extern uint8_t _text, _data;
+__attribute__((noinline)) void notify_debugger(const char *identity, volatile bool wait) {
+        printf("%s@%p,%p\n", identity, &_text, &_data);
+        if (wait)
+                printf("Waiting for debugger to attach...\n");
+
+        /* This is a poor programmer's breakpoint to wait until a debugger
+         * has attached to us. Just "set variable wait = 0" or "return" to continue. */
+        while (wait)
+                /* Prefer asm based stalling so that gdb has a source location to present. */
+#if defined(__i386__) || defined(__x86_64__)
+                asm volatile("pause");
+#elif defined(__aarch64__)
+                asm volatile("wfi");
+#else
+                BS->Stall(5000);
+#endif
+}
+#endif
+
+#ifdef EFI_DEBUG
+void hexdump(const char16_t *prefix, const void *data, size_t size) {
+        static const char hex[16] = "0123456789abcdef";
+        _cleanup_free_ char16_t *buf = NULL;
+        const uint8_t *d = data;
+
+        assert(prefix);
+        assert(data || size == 0);
+
+        /* Debugging helper — please keep this around, even if not used */
+
+        buf = xnew(char16_t, size*2+1);
+
+        for (size_t i = 0; i < size; i++) {
+                buf[i*2] = hex[d[i] >> 4];
+                buf[i*2+1] = hex[d[i] & 0x0F];
+        }
+
+        buf[size*2] = 0;
+
+        log_error("%ls[%zu]: %ls", prefix, size, buf);
+}
+#endif
+
+#if defined(__i386__) || defined(__x86_64__)
+static inline uint8_t inb(uint16_t port) {
+        uint8_t value;
+        asm volatile("inb %1, %0" : "=a"(value) : "Nd"(port));
+        return value;
+}
+
+static inline void outb(uint16_t port, uint8_t value) {
+        asm volatile("outb %0, %1" : : "a"(value), "Nd"(port));
+}
+
+void beep(unsigned beep_count) {
+        enum {
+                PITCH                = 500,
+                BEEP_DURATION_USEC   = 100 * 1000,
+                WAIT_DURATION_USEC   = 400 * 1000,
+
+                PIT_FREQUENCY        = 0x1234dd,
+                SPEAKER_CONTROL_PORT = 0x61,
+                SPEAKER_ON_MASK      = 0x03,
+                TIMER_PORT_MAGIC     = 0xB6,
+                TIMER_CONTROL_PORT   = 0x43,
+                TIMER_CONTROL2_PORT  = 0x42,
+        };
+
+        /* Set frequency. */
+        uint32_t counter = PIT_FREQUENCY / PITCH;
+        outb(TIMER_CONTROL_PORT, TIMER_PORT_MAGIC);
+        outb(TIMER_CONTROL2_PORT, counter & 0xFF);
+        outb(TIMER_CONTROL2_PORT, (counter >> 8) & 0xFF);
+
+        uint8_t value = inb(SPEAKER_CONTROL_PORT);
+
+        while (beep_count > 0) {
+                /* Turn speaker on. */
+                value |= SPEAKER_ON_MASK;
+                outb(SPEAKER_CONTROL_PORT, value);
+
+                BS->Stall(BEEP_DURATION_USEC);
+
+                /* Turn speaker off. */
+                value &= ~SPEAKER_ON_MASK;
+                outb(SPEAKER_CONTROL_PORT, value);
+
+                beep_count--;
+                if (beep_count > 0)
+                        BS->Stall(WAIT_DURATION_USEC);
+        }
+}
+#endif
+
+EFI_STATUS open_volume(EFI_HANDLE device, EFI_FILE **ret_file) {
+        EFI_STATUS err;
+        EFI_FILE *file;
+        EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *volume;
+
+        assert(ret_file);
+
+        err = BS->HandleProtocol(device, MAKE_GUID_PTR(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL), (void **) &volume);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        err = volume->OpenVolume(volume, &file);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        *ret_file = file;
+        return EFI_SUCCESS;
+}
+
+EFI_STATUS make_file_device_path(EFI_HANDLE device, const char16_t *file, EFI_DEVICE_PATH **ret_dp) {
+        EFI_STATUS err;
+        EFI_DEVICE_PATH *dp;
+
+        assert(file);
+        assert(ret_dp);
+
+        err = BS->HandleProtocol(device, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL), (void **) &dp);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        EFI_DEVICE_PATH *end_node = dp;
+        while (!IsDevicePathEnd(end_node))
+                end_node = NextDevicePathNode(end_node);
+
+        size_t file_size = strsize16(file);
+        size_t dp_size = (uint8_t *) end_node - (uint8_t *) dp;
+
+        /* Make a copy that can also hold a file media device path. */
+        *ret_dp = xmalloc(dp_size + file_size + SIZE_OF_FILEPATH_DEVICE_PATH + END_DEVICE_PATH_LENGTH);
+        dp = mempcpy(*ret_dp, dp, dp_size);
+
+        /* Replace end node with file media device path. Use memcpy() in case dp is unaligned (if accessed as
+         * FILEPATH_DEVICE_PATH). */
+        dp->Type = MEDIA_DEVICE_PATH;
+        dp->SubType = MEDIA_FILEPATH_DP;
+        memcpy((uint8_t *) dp + offsetof(FILEPATH_DEVICE_PATH, PathName), file, file_size);
+        SetDevicePathNodeLength(dp, offsetof(FILEPATH_DEVICE_PATH, PathName) + file_size);
+
+        dp = NextDevicePathNode(dp);
+        SetDevicePathEndNode(dp);
+        return EFI_SUCCESS;
+}
+
+EFI_STATUS device_path_to_str(const EFI_DEVICE_PATH *dp, char16_t **ret) {
+        EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *dp_to_text;
+        EFI_STATUS err;
+        _cleanup_free_ char16_t *str = NULL;
+
+        assert(dp);
+        assert(ret);
+
+        err = BS->LocateProtocol(MAKE_GUID_PTR(EFI_DEVICE_PATH_TO_TEXT_PROTOCOL), NULL, (void **) &dp_to_text);
+        if (err != EFI_SUCCESS) {
+                /* If the device path to text protocol is not available we can still do a best-effort attempt
+                 * to convert it ourselves if we are given filepath-only device path. */
+
+                size_t size = 0;
+                for (const EFI_DEVICE_PATH *node = dp; !IsDevicePathEnd(node);
+                     node = NextDevicePathNode(node)) {
+
+                        if (DevicePathType(node) != MEDIA_DEVICE_PATH ||
+                            DevicePathSubType(node) != MEDIA_FILEPATH_DP)
+                                return err;
+
+                        size_t path_size = DevicePathNodeLength(node);
+                        if (path_size <= offsetof(FILEPATH_DEVICE_PATH, PathName) || path_size % sizeof(char16_t))
+                                return EFI_INVALID_PARAMETER;
+                        path_size -= offsetof(FILEPATH_DEVICE_PATH, PathName);
+
+                        _cleanup_free_ char16_t *old = str;
+                        str = xmalloc(size + path_size);
+                        if (old) {
+                                memcpy(str, old, size);
+                                str[size / sizeof(char16_t) - 1] = '\\';
+                        }
+
+                        memcpy(str + (size / sizeof(char16_t)),
+                               ((uint8_t *) node) + offsetof(FILEPATH_DEVICE_PATH, PathName),
+                               path_size);
+                        size += path_size;
+                }
+
+                *ret = TAKE_PTR(str);
+                return EFI_SUCCESS;
+        }
+
+        str = dp_to_text->ConvertDevicePathToText(dp, false, false);
+        if (!str)
+                return EFI_OUT_OF_RESOURCES;
+
+        *ret = TAKE_PTR(str);
+        return EFI_SUCCESS;
+}
+
+void *find_configuration_table(const EFI_GUID *guid) {
+        for (size_t i = 0; i < ST->NumberOfTableEntries; i++)
+                if (efi_guid_equal(&ST->ConfigurationTable[i].VendorGuid, guid))
+                        return ST->ConfigurationTable[i].VendorTable;
+
+        return NULL;
+}
+
+/* libgcc's __aeabi_ldiv0 intrinsic will call raise() on division by zero, so we
+ * need to provide one ourselves for now. */
+_used_ _noreturn_ int raise(int sig) {
+        assert_not_reached();
 }
diff --git a/src/boot/efi/util.h b/src/boot/efi/util.h
index d3bf848..d42c237 100644
--- a/src/boot/efi/util.h
+++ b/src/boot/efi/util.h
@@ -3,84 +3,205 @@
 
 #include <efi.h>
 #include <efilib.h>
+#include <stddef.h>
 
+#include "log.h"
 #include "string-util-fundamental.h"
 
-#define OFFSETOF(x,y) __builtin_offsetof(x,y)
-
-static inline UINTN ALIGN_TO(UINTN l, UINTN ali) {
-        return ((l + ali - 1) & ~(ali - 1));
-}
-
-EFI_STATUS parse_boolean(const CHAR8 *v, BOOLEAN *b);
-
-UINT64 ticks_read(void);
-UINT64 ticks_freq(void);
-UINT64 time_usec(void);
-
-EFI_STATUS efivar_set(const EFI_GUID *vendor, const CHAR16 *name, const CHAR16 *value, UINT32 flags);
-EFI_STATUS efivar_set_raw(const EFI_GUID *vendor, const CHAR16 *name, const VOID *buf, UINTN size, UINT32 flags);
-EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, const CHAR16 *name, UINTN i, UINT32 flags);
-EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, const CHAR16 *NAME, UINT32 value, UINT32 flags);
-EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, const CHAR16 *name, UINT64 value, UINT32 flags);
-VOID efivar_set_time_usec(const EFI_GUID *vendor, const CHAR16 *name, UINT64 usec);
-
-EFI_STATUS efivar_get(const EFI_GUID *vendor, const CHAR16 *name, CHAR16 **value);
-EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const CHAR16 *name, CHAR8 **buffer, UINTN *size);
-EFI_STATUS efivar_get_uint_string(const EFI_GUID *vendor, const CHAR16 *name, UINTN *i);
-EFI_STATUS efivar_get_uint32_le(const EFI_GUID *vendor, const CHAR16 *name, UINT32 *ret);
-EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const CHAR16 *name, UINT64 *ret);
-EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const CHAR16 *name, BOOLEAN *ret);
-
-CHAR8 *strchra(const CHAR8 *s, CHAR8 c);
-CHAR16 *stra_to_path(const CHAR8 *stra);
-CHAR16 *stra_to_str(const CHAR8 *stra);
-
-EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN size, CHAR8 **content, UINTN *content_size);
-
-static inline void FreePoolp(void *p) {
-        void *q = *(void**) p;
-
-        if (!q)
+static inline void free(void *p) {
+        if (!p)
                 return;
 
-        FreePool(q);
+        /* Debugging an invalid free requires trace logging to find the call site or a debugger attached. For
+         * release builds it is not worth the bother to even warn when we cannot even print a call stack. */
+#ifdef EFI_DEBUG
+        assert_se(BS->FreePool(p) == EFI_SUCCESS);
+#else
+        (void) BS->FreePool(p);
+#endif
 }
 
-#define _cleanup_freepool_ _cleanup_(FreePoolp)
+static inline void freep(void *p) {
+        free(*(void **) p);
+}
 
-static inline void FileHandleClosep(EFI_FILE_HANDLE *handle) {
+#define _cleanup_free_ _cleanup_(freep)
+
+_malloc_ _alloc_(1) _returns_nonnull_ _warn_unused_result_
+static inline void *xmalloc(size_t size) {
+        void *p;
+        assert_se(BS->AllocatePool(EfiBootServicesData, size, &p) == EFI_SUCCESS);
+        return p;
+}
+
+_malloc_ _alloc_(1, 2) _returns_nonnull_ _warn_unused_result_
+static inline void *xmalloc_multiply(size_t size, size_t n) {
+        assert_se(!__builtin_mul_overflow(size, n, &size));
+        return xmalloc(size);
+}
+
+/* Use malloc attribute as this never returns p like userspace realloc. */
+_malloc_ _alloc_(3) _returns_nonnull_ _warn_unused_result_
+static inline void *xrealloc(void *p, size_t old_size, size_t new_size) {
+        void *t = xmalloc(new_size);
+        new_size = MIN(old_size, new_size);
+        if (new_size > 0)
+                memcpy(t, p, new_size);
+        free(p);
+        return t;
+}
+
+#define xnew(type, n) ((type *) xmalloc_multiply(sizeof(type), (n)))
+
+typedef struct {
+        EFI_PHYSICAL_ADDRESS addr;
+        size_t n_pages;
+} Pages;
+
+static inline void cleanup_pages(Pages *p) {
+        if (p->n_pages == 0)
+                return;
+#ifdef EFI_DEBUG
+        assert_se(BS->FreePages(p->addr, p->n_pages) == EFI_SUCCESS);
+#else
+        (void) BS->FreePages(p->addr, p->n_pages);
+#endif
+}
+
+#define _cleanup_pages_ _cleanup_(cleanup_pages)
+
+static inline Pages xmalloc_pages(
+                EFI_ALLOCATE_TYPE type, EFI_MEMORY_TYPE memory_type, size_t n_pages, EFI_PHYSICAL_ADDRESS addr) {
+        assert_se(BS->AllocatePages(type, memory_type, n_pages, &addr) == EFI_SUCCESS);
+        return (Pages) {
+                .addr = addr,
+                .n_pages = n_pages,
+        };
+}
+
+EFI_STATUS parse_boolean(const char *v, bool *b);
+
+EFI_STATUS efivar_set(const EFI_GUID *vendor, const char16_t *name, const char16_t *value, uint32_t flags);
+EFI_STATUS efivar_set_raw(const EFI_GUID *vendor, const char16_t *name, const void *buf, size_t size, uint32_t flags);
+EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, const char16_t *name, size_t i, uint32_t flags);
+EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, const char16_t *NAME, uint32_t value, uint32_t flags);
+EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, const char16_t *name, uint64_t value, uint32_t flags);
+void efivar_set_time_usec(const EFI_GUID *vendor, const char16_t *name, uint64_t usec);
+
+EFI_STATUS efivar_get(const EFI_GUID *vendor, const char16_t *name, char16_t **ret);
+EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const char16_t *name, char **ret, size_t *ret_size);
+EFI_STATUS efivar_get_uint_string(const EFI_GUID *vendor, const char16_t *name, size_t *ret);
+EFI_STATUS efivar_get_uint32_le(const EFI_GUID *vendor, const char16_t *name, uint32_t *ret);
+EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const char16_t *name, uint64_t *ret);
+EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const char16_t *name, bool *ret);
+
+void convert_efi_path(char16_t *path);
+char16_t *xstr8_to_path(const char *stra);
+void mangle_stub_cmdline(char16_t *cmdline);
+
+EFI_STATUS file_read(EFI_FILE *dir, const char16_t *name, size_t off, size_t size, char **content, size_t *content_size);
+
+static inline void file_closep(EFI_FILE **handle) {
         if (!*handle)
                 return;
 
-        uefi_call_wrapper((*handle)->Close, 1, *handle);
+        (*handle)->Close(*handle);
 }
 
+static inline void unload_imagep(EFI_HANDLE *image) {
+        if (*image)
+                (void) BS->UnloadImage(*image);
+}
+
+/* Creates a EFI_GUID pointer suitable for EFI APIs. Use of const allows the compiler to merge multiple
+ * uses (although, currently compilers do that regardless). Most EFI APIs declare their EFI_GUID input
+ * as non-const, but almost all of them are in fact const. */
+#define MAKE_GUID_PTR(name) ((EFI_GUID *) &(const EFI_GUID) name##_GUID)
+
+/* These allow MAKE_GUID_PTR() to work without requiring an extra _GUID in the passed name. We want to
+ * keep the GUID definitions in line with the UEFI spec. */
+#define EFI_GLOBAL_VARIABLE_GUID EFI_GLOBAL_VARIABLE
+#define EFI_FILE_INFO_GUID EFI_FILE_INFO_ID
+
 /*
  * Allocated random UUID, intended to be shared across tools that implement
  * the (ESP)\loader\entries\<vendor>-<revision>.conf convention and the
  * associated EFI variables.
  */
 #define LOADER_GUID \
-        &(const EFI_GUID) { 0x4a67b082, 0x0a4c, 0x41cf, { 0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f } }
-#define EFI_GLOBAL_GUID &(const EFI_GUID) EFI_GLOBAL_VARIABLE
+        { 0x4a67b082, 0x0a4c, 0x41cf, { 0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f } }
 
-#define UINTN_MAX (~(UINTN)0)
-#define INTN_MAX ((INTN)(UINTN_MAX>>1))
-#ifndef UINT32_MAX
-#define UINT32_MAX ((UINT32) -1)
-#endif
-#ifndef UINT64_MAX
-#define UINT64_MAX ((UINT64) -1)
+void print_at(size_t x, size_t y, size_t attr, const char16_t *str);
+void clear_screen(size_t attr);
+
+typedef int (*compare_pointer_func_t)(const void *a, const void *b);
+void sort_pointer_array(void **array, size_t n_members, compare_pointer_func_t compare);
+
+EFI_STATUS get_file_info_harder(EFI_FILE *handle, EFI_FILE_INFO **ret, size_t *ret_size);
+
+EFI_STATUS readdir_harder(EFI_FILE *handle, EFI_FILE_INFO **buffer, size_t *buffer_size);
+
+bool is_ascii(const char16_t *f);
+
+char16_t **strv_free(char16_t **l);
+
+static inline void strv_freep(char16_t ***p) {
+        strv_free(*p);
+}
+
+EFI_STATUS open_directory(EFI_FILE *root_dir, const char16_t *path, EFI_FILE **ret);
+
+/* Conversion between EFI_PHYSICAL_ADDRESS and pointers is not obvious. The former is always 64bit, even on
+ * 32bit archs. And gcc complains if we cast a pointer to an integer of a different size. Hence let's do the
+ * conversion indirectly: first into uintptr_t and then extended to EFI_PHYSICAL_ADDRESS. */
+static inline EFI_PHYSICAL_ADDRESS POINTER_TO_PHYSICAL_ADDRESS(const void *p) {
+        return (EFI_PHYSICAL_ADDRESS) (uintptr_t) p;
+}
+
+static inline void *PHYSICAL_ADDRESS_TO_POINTER(EFI_PHYSICAL_ADDRESS addr) {
+        /* On 32bit systems the address might not be convertible (as pointers are 32bit but
+         * EFI_PHYSICAL_ADDRESS 64bit) */
+        assert(addr <= UINTPTR_MAX);
+        return (void *) (uintptr_t) addr;
+}
+
+uint64_t get_os_indications_supported(void);
+
+#ifdef EFI_DEBUG
+/* Report the relocated position of text and data sections so that a debugger
+ * can attach to us. See debug-sd-boot.sh for how this can be done. */
+void notify_debugger(const char *identity, bool wait);
+void hexdump(const char16_t *prefix, const void *data, size_t size);
+#else
+#  define notify_debugger(i, w)
 #endif
 
-VOID log_error_stall(const CHAR16 *fmt, ...);
-EFI_STATUS log_oom(void);
+#define DEFINE_EFI_MAIN_FUNCTION(func, identity, wait_for_debugger)             \
+        EFI_SYSTEM_TABLE *ST;                                                   \
+        EFI_BOOT_SERVICES *BS;                                                  \
+        EFI_RUNTIME_SERVICES *RT;                                               \
+        EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *system_table) { \
+                ST = system_table;                                              \
+                BS = system_table->BootServices;                                \
+                RT = system_table->RuntimeServices;                             \
+                notify_debugger((identity), (wait_for_debugger));               \
+                EFI_STATUS err = func(image);                                   \
+                log_wait();                                                     \
+                return err;                                                     \
+        }
 
-/* This works just like log_error_errno() from userspace, but requires you
- * to provide err a second time if you want to use %r in the message! */
-#define log_error_status_stall(err, fmt, ...) \
-        ({ \
-                log_error_stall(fmt, ##__VA_ARGS__); \
-                err; \
-        })
+#if defined(__i386__) || defined(__x86_64__)
+void beep(unsigned beep_count);
+#else
+static inline void beep(unsigned beep_count) {}
+#endif
+
+EFI_STATUS open_volume(EFI_HANDLE device, EFI_FILE **ret_file);
+EFI_STATUS make_file_device_path(EFI_HANDLE device, const char16_t *file, EFI_DEVICE_PATH **ret_dp);
+EFI_STATUS device_path_to_str(const EFI_DEVICE_PATH *dp, char16_t **ret);
+
+static inline bool efi_guid_equal(const EFI_GUID *a, const EFI_GUID *b) {
+        return memcmp(a, b, sizeof(EFI_GUID)) == 0;
+}
+
+void *find_configuration_table(const EFI_GUID *guid);
diff --git a/src/boot/efi/vmm.c b/src/boot/efi/vmm.c
new file mode 100644
index 0000000..6bd440f
--- /dev/null
+++ b/src/boot/efi/vmm.c
@@ -0,0 +1,291 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <efi.h>
+#include <efilib.h>
+#include <stdbool.h>
+#if defined(__i386__) || defined(__x86_64__)
+#  include <cpuid.h>
+#endif
+
+#include "drivers.h"
+#include "efi-string.h"
+#include "string-util-fundamental.h"
+#include "util.h"
+
+#define QEMU_KERNEL_LOADER_FS_MEDIA_GUID \
+        { 0x1428f772, 0xb64a, 0x441e, { 0xb8, 0xc3, 0x9e, 0xbd, 0xd7, 0xf8, 0x93, 0xc7 } }
+
+#define VMM_BOOT_ORDER_GUID \
+        { 0x668f4529, 0x63d0, 0x4bb5, { 0xb6, 0x5d, 0x6f, 0xbb, 0x9d, 0x36, 0xa4, 0x4a } }
+
+/* detect direct boot */
+bool is_direct_boot(EFI_HANDLE device) {
+        EFI_STATUS err;
+        VENDOR_DEVICE_PATH *dp; /* NB: Alignment of this structure might be quirky! */
+
+        err = BS->HandleProtocol(device, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL), (void **) &dp);
+        if (err != EFI_SUCCESS)
+                return false;
+
+        /* 'qemu -kernel systemd-bootx64.efi' */
+        if (dp->Header.Type == MEDIA_DEVICE_PATH &&
+            dp->Header.SubType == MEDIA_VENDOR_DP &&
+            memcmp(&dp->Guid, MAKE_GUID_PTR(QEMU_KERNEL_LOADER_FS_MEDIA), sizeof(EFI_GUID)) == 0) /* Don't change to efi_guid_equal() because EFI device path objects are not necessarily aligned! */
+                return true;
+
+        /* loaded from firmware volume (sd-boot added to ovmf) */
+        if (dp->Header.Type == MEDIA_DEVICE_PATH &&
+            dp->Header.SubType == MEDIA_PIWG_FW_VOL_DP)
+                return true;
+
+        return false;
+}
+
+static bool device_path_startswith(const EFI_DEVICE_PATH *dp, const EFI_DEVICE_PATH *start) {
+        if (!start)
+                return true;
+        if (!dp)
+                return false;
+        for (;;) {
+                if (IsDevicePathEnd(start))
+                        return true;
+                if (IsDevicePathEnd(dp))
+                        return false;
+                size_t l1 = DevicePathNodeLength(start);
+                size_t l2 = DevicePathNodeLength(dp);
+                if (l1 != l2)
+                        return false;
+                if (memcmp(dp, start, l1) != 0)
+                        return false;
+                start = NextDevicePathNode(start);
+                dp    = NextDevicePathNode(dp);
+        }
+}
+
+/*
+ * Try find ESP when not loaded from ESP
+ *
+ * Inspect all filesystems known to the firmware, try find the ESP.  In case VMMBootOrderNNNN variables are
+ * present they are used to inspect the filesystems in the specified order.  When nothing was found or the
+ * variables are not present the function will do one final search pass over all filesystems.
+ *
+ * Recent OVMF builds store the qemu boot order (as specified using the bootindex property on the qemu
+ * command line) in VMMBootOrderNNNN.  The variables contain a device path.
+ *
+ * Example qemu command line:
+ *     qemu -virtio-scsi-pci,addr=14.0 -device scsi-cd,scsi-id=4,bootindex=1
+ *
+ * Resulting variable:
+ *     VMMBootOrder0000 = PciRoot(0x0)/Pci(0x14,0x0)/Scsi(0x4,0x0)
+ */
+EFI_STATUS vmm_open(EFI_HANDLE *ret_vmm_dev, EFI_FILE **ret_vmm_dir) {
+        _cleanup_free_ EFI_HANDLE *handles = NULL;
+        size_t n_handles;
+        EFI_STATUS err, dp_err;
+
+        assert(ret_vmm_dev);
+        assert(ret_vmm_dir);
+
+        /* Make sure all file systems have been initialized. Only do this in VMs as this is slow
+         * on some real firmwares. */
+        (void) reconnect_all_drivers();
+
+        /* find all file system handles */
+        err = BS->LocateHandleBuffer(
+                        ByProtocol, MAKE_GUID_PTR(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL), NULL, &n_handles, &handles);
+        if (err != EFI_SUCCESS)
+                return err;
+
+        for (size_t order = 0;; order++) {
+                _cleanup_free_ EFI_DEVICE_PATH *dp = NULL;
+
+                _cleanup_free_ char16_t *order_str = xasprintf("VMMBootOrder%04zx", order);
+                dp_err = efivar_get_raw(MAKE_GUID_PTR(VMM_BOOT_ORDER), order_str, (char **) &dp, NULL);
+
+                for (size_t i = 0; i < n_handles; i++) {
+                        _cleanup_(file_closep) EFI_FILE *root_dir = NULL, *efi_dir = NULL;
+                        EFI_DEVICE_PATH *fs;
+
+                        err = BS->HandleProtocol(
+                                        handles[i], MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL), (void **) &fs);
+                        if (err != EFI_SUCCESS)
+                                return err;
+
+                        /* check against VMMBootOrderNNNN (if set) */
+                        if (dp_err == EFI_SUCCESS && !device_path_startswith(fs, dp))
+                                continue;
+
+                        err = open_volume(handles[i], &root_dir);
+                        if (err != EFI_SUCCESS)
+                                continue;
+
+                        /* simple ESP check */
+                        err = root_dir->Open(root_dir, &efi_dir, (char16_t*) u"\\EFI",
+                                             EFI_FILE_MODE_READ,
+                                             EFI_FILE_READ_ONLY | EFI_FILE_DIRECTORY);
+                        if (err != EFI_SUCCESS)
+                                continue;
+
+                        *ret_vmm_dev = handles[i];
+                        *ret_vmm_dir = TAKE_PTR(root_dir);
+                        return EFI_SUCCESS;
+                }
+
+                if (dp_err != EFI_SUCCESS)
+                        return EFI_NOT_FOUND;
+        }
+        assert_not_reached();
+}
+
+static bool cpuid_in_hypervisor(void) {
+#if defined(__i386__) || defined(__x86_64__)
+        unsigned eax, ebx, ecx, edx;
+
+        /* This is a dumbed down version of src/basic/virt.c's detect_vm() that safely works in the UEFI
+         * environment. */
+
+        if (__get_cpuid(1, &eax, &ebx, &ecx, &edx) == 0)
+                return false;
+
+        if (FLAGS_SET(ecx, 0x80000000U))
+                return true;
+#endif
+
+        return false;
+}
+
+typedef struct {
+        uint8_t anchor_string[4];
+        uint8_t entry_point_structure_checksum;
+        uint8_t entry_point_length;
+        uint8_t major_version;
+        uint8_t minor_version;
+        uint16_t max_structure_size;
+        uint8_t entry_point_revision;
+        uint8_t formatted_area[5];
+        uint8_t intermediate_anchor_string[5];
+        uint8_t intermediate_checksum;
+        uint16_t table_length;
+        uint32_t table_address;
+        uint16_t number_of_smbios_structures;
+        uint8_t smbios_bcd_revision;
+} _packed_ SmbiosEntryPoint;
+
+typedef struct {
+        uint8_t anchor_string[5];
+        uint8_t entry_point_structure_checksum;
+        uint8_t entry_point_length;
+        uint8_t major_version;
+        uint8_t minor_version;
+        uint8_t docrev;
+        uint8_t entry_point_revision;
+        uint8_t reserved;
+        uint32_t table_maximum_size;
+        uint64_t table_address;
+} _packed_ Smbios3EntryPoint;
+
+typedef struct {
+        uint8_t type;
+        uint8_t length;
+        uint8_t handle[2];
+} _packed_ SmbiosHeader;
+
+typedef struct {
+        SmbiosHeader header;
+        uint8_t vendor;
+        uint8_t bios_version;
+        uint16_t bios_segment;
+        uint8_t bios_release_date;
+        uint8_t bios_size;
+        uint64_t bios_characteristics;
+        uint8_t bios_characteristics_ext[2];
+} _packed_ SmbiosTableType0;
+
+static void *find_smbios_configuration_table(uint64_t *ret_size) {
+        assert(ret_size);
+
+        Smbios3EntryPoint *entry3 = find_configuration_table(MAKE_GUID_PTR(SMBIOS3_TABLE));
+        if (entry3 && memcmp(entry3->anchor_string, "_SM3_", 5) == 0 &&
+            entry3->entry_point_length <= sizeof(*entry3)) {
+                *ret_size = entry3->table_maximum_size;
+                return PHYSICAL_ADDRESS_TO_POINTER(entry3->table_address);
+        }
+
+        SmbiosEntryPoint *entry = find_configuration_table(MAKE_GUID_PTR(SMBIOS_TABLE));
+        if (entry && memcmp(entry->anchor_string, "_SM_", 4) == 0 &&
+            entry->entry_point_length <= sizeof(*entry)) {
+                *ret_size = entry->table_length;
+                return PHYSICAL_ADDRESS_TO_POINTER(entry->table_address);
+        }
+
+        return NULL;
+}
+
+static SmbiosHeader *get_smbios_table(uint8_t type) {
+        uint64_t size = 0;
+        uint8_t *p = find_smbios_configuration_table(&size);
+        if (!p)
+                return false;
+
+        for (;;) {
+                if (size < sizeof(SmbiosHeader))
+                        return NULL;
+
+                SmbiosHeader *header = (SmbiosHeader *) p;
+
+                /* End of table. */
+                if (header->type == 127)
+                        return NULL;
+
+                if (size < header->length)
+                        return NULL;
+
+                if (header->type == type)
+                        return header; /* Yay! */
+
+                /* Skip over formatted area. */
+                size -= header->length;
+                p += header->length;
+
+                /* Skip over string table. */
+                for (;;) {
+                        while (size > 0 && *p != '\0') {
+                                p++;
+                                size--;
+                        }
+                        if (size == 0)
+                                return NULL;
+                        p++;
+                        size--;
+
+                        /* Double NUL terminates string table. */
+                        if (*p == '\0') {
+                                if (size == 0)
+                                        return NULL;
+                                p++;
+                                break;
+                        }
+                }
+        }
+
+        return NULL;
+}
+
+static bool smbios_in_hypervisor(void) {
+        /* Look up BIOS Information (Type 0). */
+        SmbiosTableType0 *type0 = (SmbiosTableType0 *) get_smbios_table(0);
+        if (!type0 || type0->header.length < sizeof(SmbiosTableType0))
+                return false;
+
+        /* Bit 4 of 2nd BIOS characteristics extension bytes indicates virtualization. */
+        return FLAGS_SET(type0->bios_characteristics_ext[1], 1 << 4);
+}
+
+bool in_hypervisor(void) {
+        static int cache = -1;
+        if (cache >= 0)
+                return cache;
+
+        cache = cpuid_in_hypervisor() || smbios_in_hypervisor();
+        return cache;
+}
diff --git a/src/boot/efi/vmm.h b/src/boot/efi/vmm.h
new file mode 100644
index 0000000..e98ec74
--- /dev/null
+++ b/src/boot/efi/vmm.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <efi.h>
+#include <efilib.h>
+
+bool is_direct_boot(EFI_HANDLE device);
+EFI_STATUS vmm_open(EFI_HANDLE *ret_qemu_dev, EFI_FILE **ret_qemu_dir);
+
+bool in_hypervisor(void);
diff --git a/src/boot/measure.c b/src/boot/measure.c
new file mode 100644
index 0000000..f2fbd9d
--- /dev/null
+++ b/src/boot/measure.c
@@ -0,0 +1,1159 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <getopt.h>
+#include <unistd.h>
+
+#include "alloc-util.h"
+#include "build.h"
+#include "efi-loader.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "hexdecoct.h"
+#include "json.h"
+#include "main-func.h"
+#include "openssl-util.h"
+#include "parse-argument.h"
+#include "parse-util.h"
+#include "pretty-print.h"
+#include "sha256.h"
+#include "terminal-util.h"
+#include "tpm-pcr.h"
+#include "tpm2-util.h"
+#include "verbs.h"
+
+/* Tool for pre-calculating expected TPM PCR values based on measured resources. This is intended to be used
+ * to pre-calculate suitable values for PCR 11, the way sd-stub measures into it. */
+
+static char *arg_sections[_UNIFIED_SECTION_MAX] = {};
+static char **arg_banks = NULL;
+static char *arg_tpm2_device = NULL;
+static char *arg_private_key = NULL;
+static char *arg_public_key = NULL;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO|JSON_FORMAT_OFF;
+static PagerFlags arg_pager_flags = 0;
+static bool arg_current = false;
+static char **arg_phase = NULL;
+static char *arg_append = NULL;
+
+STATIC_DESTRUCTOR_REGISTER(arg_banks, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_device, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_private_key, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_public_key, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_phase, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_append, freep);
+
+static inline void free_sections(char*(*sections)[_UNIFIED_SECTION_MAX]) {
+        for (UnifiedSection c = 0; c < _UNIFIED_SECTION_MAX; c++)
+                free((*sections)[c]);
+}
+
+STATIC_DESTRUCTOR_REGISTER(arg_sections, free_sections);
+
+static int help(int argc, char *argv[], void *userdata) {
+        _cleanup_free_ char *link = NULL;
+        int r;
+
+        r = terminal_urlify_man("systemd-measure", "1", &link);
+        if (r < 0)
+                return log_oom();
+
+        printf("%1$s  [OPTIONS...] COMMAND ...\n"
+               "\n%5$sPre-calculate and sign PCR hash for a unified kernel image (UKI).%6$s\n"
+               "\n%3$sCommands:%4$s\n"
+               "  status                 Show current PCR values\n"
+               "  calculate              Calculate expected PCR values\n"
+               "  sign                   Calculate and sign expected PCR values\n"
+               "\n%3$sOptions:%4$s\n"
+               "  -h --help              Show this help\n"
+               "     --version           Print version\n"
+               "     --no-pager          Do not pipe output into a pager\n"
+               "  -c --current           Use current PCR values\n"
+               "     --phase=PHASE       Specify a boot phase to sign for\n"
+               "     --bank=DIGEST       Select TPM bank (SHA1, SHA256, SHA384, SHA512)\n"
+               "     --tpm2-device=PATH  Use specified TPM2 device\n"
+               "     --private-key=KEY   Private key (PEM) to sign with\n"
+               "     --public-key=KEY    Public key (PEM) to validate against\n"
+               "     --json=MODE         Output as JSON\n"
+               "  -j                     Same as --json=pretty on tty, --json=short otherwise\n"
+               "     --append=PATH       Load specified JSON signature, and append new signature to it\n"
+               "\n%3$sUKI PE Section Options:%4$s                                         %3$sUKI PE Section%4$s\n"
+               "     --linux=PATH        Path to Linux kernel image file        %7$s .linux\n"
+               "     --osrel=PATH        Path to os-release file                %7$s .osrel\n"
+               "     --cmdline=PATH      Path to file with kernel command line  %7$s .cmdline\n"
+               "     --initrd=PATH       Path to initrd image file              %7$s .initrd\n"
+               "     --splash=PATH       Path to splash bitmap file             %7$s .splash\n"
+               "     --dtb=PATH          Path to Devicetree file                %7$s .dtb\n"
+               "     --pcrpkey=PATH      Path to public key for PCR signatures  %7$s .pcrpkey\n"
+               "\nSee the %2$s for details.\n",
+               program_invocation_short_name,
+               link,
+               ansi_underline(),
+               ansi_normal(),
+               ansi_highlight(),
+               ansi_normal(),
+               special_glyph(SPECIAL_GLYPH_ARROW_RIGHT));
+
+        return 0;
+}
+
+static char *normalize_phase(const char *s) {
+        _cleanup_strv_free_ char **l = NULL;
+
+        /* Let's normalize phase expressions. We split the series of colon-separated words up, then remove
+         * all empty ones, and glue them back together again. In other words we remove duplicate ":", as well
+         * as leading and trailing ones. */
+
+        l = strv_split(s, ":"); /* Split series of words */
+        if (!l)
+                return NULL;
+
+        /* Remove all empty words and glue things back together */
+        return strv_join(strv_remove(l, ""), ":");
+}
+
+static int parse_argv(int argc, char *argv[]) {
+        enum {
+                ARG_VERSION = 0x100,
+                ARG_NO_PAGER,
+                _ARG_SECTION_FIRST,
+                ARG_LINUX = _ARG_SECTION_FIRST,
+                ARG_OSREL,
+                ARG_CMDLINE,
+                ARG_INITRD,
+                ARG_SPLASH,
+                ARG_DTB,
+                _ARG_PCRSIG, /* the .pcrsig section is not input for signing, hence not actually an argument here */
+                _ARG_SECTION_LAST,
+                ARG_PCRPKEY = _ARG_SECTION_LAST,
+                ARG_BANK,
+                ARG_PRIVATE_KEY,
+                ARG_PUBLIC_KEY,
+                ARG_TPM2_DEVICE,
+                ARG_JSON,
+                ARG_PHASE,
+                ARG_APPEND,
+        };
+
+        static const struct option options[] = {
+                { "help",        no_argument,       NULL, 'h'             },
+                { "no-pager",    no_argument,       NULL, ARG_NO_PAGER    },
+                { "version",     no_argument,       NULL, ARG_VERSION     },
+                { "linux",       required_argument, NULL, ARG_LINUX       },
+                { "osrel",       required_argument, NULL, ARG_OSREL       },
+                { "cmdline",     required_argument, NULL, ARG_CMDLINE     },
+                { "initrd",      required_argument, NULL, ARG_INITRD      },
+                { "splash",      required_argument, NULL, ARG_SPLASH      },
+                { "dtb",         required_argument, NULL, ARG_DTB         },
+                { "pcrpkey",     required_argument, NULL, ARG_PCRPKEY     },
+                { "current",     no_argument,       NULL, 'c'             },
+                { "bank",        required_argument, NULL, ARG_BANK        },
+                { "tpm2-device", required_argument, NULL, ARG_TPM2_DEVICE },
+                { "private-key", required_argument, NULL, ARG_PRIVATE_KEY },
+                { "public-key",  required_argument, NULL, ARG_PUBLIC_KEY  },
+                { "json",        required_argument, NULL, ARG_JSON        },
+                { "phase",       required_argument, NULL, ARG_PHASE       },
+                { "append",      required_argument, NULL, ARG_APPEND      },
+                {}
+        };
+
+        int c, r;
+
+        assert(argc >= 0);
+        assert(argv);
+
+        /* Make sure the arguments list and the section list, stays in sync */
+        assert_cc(_ARG_SECTION_FIRST + _UNIFIED_SECTION_MAX == _ARG_SECTION_LAST + 1);
+
+        while ((c = getopt_long(argc, argv, "hjc", options, NULL)) >= 0)
+                switch (c) {
+
+                case 'h':
+                        help(0, NULL, NULL);
+                        return 0;
+
+                case ARG_VERSION:
+                        return version();
+
+                case ARG_NO_PAGER:
+                        arg_pager_flags |= PAGER_DISABLE;
+                        break;
+
+                case _ARG_SECTION_FIRST..._ARG_SECTION_LAST: {
+                        UnifiedSection section = c - _ARG_SECTION_FIRST;
+
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, arg_sections + section);
+                        if (r < 0)
+                                return r;
+                        break;
+                }
+
+                case 'c':
+                        arg_current = true;
+                        break;
+
+                case ARG_BANK: {
+                        const EVP_MD *implementation;
+
+                        implementation = EVP_get_digestbyname(optarg);
+                        if (!implementation)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown bank '%s', refusing.", optarg);
+
+                        if (strv_extend(&arg_banks, EVP_MD_name(implementation)) < 0)
+                                return log_oom();
+
+                        break;
+                }
+
+                case ARG_PRIVATE_KEY:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_private_key);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_PUBLIC_KEY:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_public_key);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_TPM2_DEVICE: {
+                        _cleanup_free_ char *device = NULL;
+
+                        if (streq(optarg, "list"))
+                                return tpm2_list_devices();
+
+                        if (!streq(optarg, "auto")) {
+                                device = strdup(optarg);
+                                if (!device)
+                                        return log_oom();
+                        }
+
+                        free_and_replace(arg_tpm2_device, device);
+                        break;
+                }
+
+                case 'j':
+                        arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO;
+                        break;
+
+                case ARG_JSON:
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
+
+                        break;
+
+                case ARG_PHASE: {
+                        char *n;
+
+                        n = normalize_phase(optarg);
+                        if (!n)
+                                return log_oom();
+
+                        r = strv_consume(&arg_phase, TAKE_PTR(n));
+                        if (r < 0)
+                                return r;
+
+                        break;
+                }
+
+                case ARG_APPEND:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_append);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case '?':
+                        return -EINVAL;
+
+                default:
+                        assert_not_reached();
+                }
+
+        if (strv_isempty(arg_banks)) {
+                /* If no banks are specifically selected, pick all known banks */
+                arg_banks = strv_new("SHA1", "SHA256", "SHA384", "SHA512");
+                if (!arg_banks)
+                        return log_oom();
+        }
+
+        strv_sort(arg_banks);
+        strv_uniq(arg_banks);
+
+        if (arg_current)
+                for (UnifiedSection us = 0; us < _UNIFIED_SECTION_MAX; us++)
+                        if (arg_sections[us])
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "The --current switch cannot be used in combination with --linux= and related switches.");
+
+        if (strv_isempty(arg_phase)) {
+                /* If no phases are specifically selected, pick everything from the beginning of the initrd
+                 * to the beginning of shutdown. */
+                if (strv_extend_strv(&arg_phase,
+                                     STRV_MAKE("enter-initrd",
+                                               "enter-initrd:leave-initrd",
+                                               "enter-initrd:leave-initrd:sysinit",
+                                               "enter-initrd:leave-initrd:sysinit:ready"),
+                                     /* filter_duplicates= */ false) < 0)
+                        return log_oom();
+        } else {
+                strv_sort(arg_phase);
+                strv_uniq(arg_phase);
+        }
+
+        _cleanup_free_ char *j = NULL;
+        j = strv_join(arg_phase, ", ");
+        if (!j)
+                return log_oom();
+
+        log_debug("Measuring boot phases: %s", j);
+        return 1;
+}
+
+/* The PCR 11 state for one specific bank */
+typedef struct PcrState {
+        char *bank;
+        const EVP_MD *md;
+        void *value;
+        size_t value_size;
+        void *saved_value; /* A copy of the original value we calculated, used by pcr_states_save()/pcr_states_restore() to come later back to */
+} PcrState;
+
+static void pcr_state_free_all(PcrState **pcr_state) {
+        assert(pcr_state);
+
+        if (!*pcr_state)
+                return;
+
+        for (size_t i = 0; (*pcr_state)[i].value; i++) {
+                free((*pcr_state)[i].bank);
+                free((*pcr_state)[i].value);
+                free((*pcr_state)[i].saved_value);
+        }
+
+        *pcr_state = mfree(*pcr_state);
+}
+
+static void evp_md_ctx_free_all(EVP_MD_CTX **md[]) {
+        assert(md);
+
+        if (!*md)
+                return;
+
+        for (size_t i = 0; (*md)[i]; i++)
+                EVP_MD_CTX_free((*md)[i]);
+
+        *md = mfree(*md);
+}
+
+static int pcr_state_extend(PcrState *pcr_state, const void *data, size_t sz) {
+        _cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX *mc = NULL;
+        unsigned value_size;
+
+        assert(pcr_state);
+        assert(data || sz == 0);
+        assert(pcr_state->md);
+        assert(pcr_state->value);
+        assert(pcr_state->value_size > 0);
+
+        /* Extends a (virtual) PCR by the given data */
+
+        mc = EVP_MD_CTX_new();
+        if (!mc)
+                return log_oom();
+
+        if (EVP_DigestInit_ex(mc, pcr_state->md, NULL) != 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to initialize %s context.", pcr_state->bank);
+
+        /* First thing we do, is hash the old PCR value */
+        if (EVP_DigestUpdate(mc, pcr_state->value, pcr_state->value_size) != 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to run digest.");
+
+        /* Then, we hash the new data */
+        if (EVP_DigestUpdate(mc, data, sz) != 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to run digest.");
+
+        if (EVP_DigestFinal_ex(mc, pcr_state->value, &value_size) != 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to finalize hash context.");
+
+        assert(value_size == pcr_state->value_size);
+        return 0;
+}
+
+#define BUFFER_SIZE (16U * 1024U)
+
+static int measure_kernel(PcrState *pcr_states, size_t n) {
+        _cleanup_free_ void *buffer = NULL;
+        int r;
+
+        assert(n > 0);
+        assert(pcr_states);
+
+        /* Virtually measures the components of a unified kernel image into PCR 11 */
+
+        if (arg_current) {
+                /* Shortcut things, if we should just use the current PCR value */
+
+                for (size_t i = 0; i < n; i++) {
+                        _cleanup_free_ char *p = NULL, *s = NULL;
+                        _cleanup_free_ void *v = NULL;
+                        size_t sz;
+
+                        if (asprintf(&p, "/sys/class/tpm/tpm0/pcr-%s/%" PRIu32, pcr_states[i].bank, TPM_PCR_INDEX_KERNEL_IMAGE) < 0)
+                                return log_oom();
+
+                        r = read_virtual_file(p, 4096, &s, NULL);
+                        if (r == -ENOENT && access("/sys/class/tpm/tpm0/", F_OK) >= 0)
+                                return log_error_errno(r, "TPM device exists, but cannot open '%s'; either the kernel is too old, or selected PCR bank is not supported: %m", p);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to read '%s': %m", p);
+
+                        r = unhexmem(strstrip(s), SIZE_MAX, &v, &sz);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to decode PCR value '%s': %m", s);
+
+                        assert(pcr_states[i].value_size == sz);
+                        memcpy(pcr_states[i].value, v, sz);
+                }
+
+                return 0;
+        }
+
+        buffer = malloc(BUFFER_SIZE);
+        if (!buffer)
+                return log_oom();
+
+        for (UnifiedSection c = 0; c < _UNIFIED_SECTION_MAX; c++) {
+                _cleanup_(evp_md_ctx_free_all) EVP_MD_CTX **mdctx = NULL;
+                _cleanup_close_ int fd = -EBADF;
+                uint64_t m = 0;
+
+                if (!arg_sections[c])
+                        continue;
+
+                fd = open(arg_sections[c], O_RDONLY|O_CLOEXEC);
+                if (fd < 0)
+                        return log_error_errno(errno, "Failed to open '%s': %m", arg_sections[c]);
+
+                /* Allocate one message digest context per bank (NULL terminated) */
+                mdctx = new0(EVP_MD_CTX*, n + 1);
+                if (!mdctx)
+                        return log_oom();
+
+                for (size_t i = 0; i < n; i++) {
+                        mdctx[i] = EVP_MD_CTX_new();
+                        if (!mdctx[i])
+                                return log_oom();
+
+                        if (EVP_DigestInit_ex(mdctx[i], pcr_states[i].md, NULL) != 1)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to initialize data %s context.", pcr_states[i].bank);
+                }
+
+                for (;;) {
+                        ssize_t sz;
+
+                        sz = read(fd, buffer, BUFFER_SIZE);
+                        if (sz < 0)
+                                return log_error_errno(errno, "Failed to read '%s': %m", arg_sections[c]);
+                        if (sz == 0) /* EOF */
+                                break;
+
+                        for (size_t i = 0; i < n; i++)
+                                if (EVP_DigestUpdate(mdctx[i], buffer, sz) != 1)
+                                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to run digest.");
+
+                        m += sz;
+                }
+
+                fd = safe_close(fd);
+
+                if (m == 0) /* We skip over empty files, the stub does so too */
+                        continue;
+
+                for (size_t i = 0; i < n; i++) {
+                        _cleanup_free_ void *data_hash = NULL;
+                        unsigned data_hash_size;
+
+                        data_hash = malloc(pcr_states[i].value_size);
+                        if (!data_hash)
+                                return log_oom();
+
+                        /* Measure name of section */
+                        if (EVP_Digest(unified_sections[c], strlen(unified_sections[c]) + 1, data_hash, &data_hash_size, pcr_states[i].md, NULL) != 1)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to hash section name with %s.", pcr_states[i].bank);
+
+                        assert(data_hash_size == (unsigned) pcr_states[i].value_size);
+
+                        r = pcr_state_extend(pcr_states + i, data_hash, data_hash_size);
+                        if (r < 0)
+                                return r;
+
+                        /* Retrieve hash of data and measure it */
+                        if (EVP_DigestFinal_ex(mdctx[i], data_hash, &data_hash_size) != 1)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to finalize hash context.");
+
+                        assert(data_hash_size == (unsigned) pcr_states[i].value_size);
+
+                        r = pcr_state_extend(pcr_states + i, data_hash, data_hash_size);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        return 0;
+}
+
+static int measure_phase(PcrState *pcr_states, size_t n, const char *phase) {
+        _cleanup_strv_free_ char **l = NULL;
+        int r;
+
+        assert(pcr_states);
+        assert(n > 0);
+
+        /* Measure a phase string into PCR 11. This splits up the "phase" expression at colons, and then
+         * virtually extends each specified word into PCR 11, to model how during boot we measure a series of
+         * words into PCR 11, one for each phase. */
+
+        l = strv_split(phase, ":");
+        if (!l)
+                return log_oom();
+
+        STRV_FOREACH(word, l) {
+                size_t wl;
+
+                if (isempty(*word))
+                        continue;
+
+                wl = strlen(*word);
+
+                for (size_t i = 0; i < n; i++) { /* For each bank */
+                        _cleanup_free_ void *b = NULL;
+                        int bsz;
+
+                        bsz = EVP_MD_size(pcr_states[i].md);
+                        assert(bsz > 0);
+
+                        b = malloc(bsz);
+                        if (!b)
+                                return log_oom();
+
+                        /* First hash the word itself */
+                        if (EVP_Digest(*word, wl, b, NULL, pcr_states[i].md, NULL) != 1)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "Failed to hash word '%s'.", *word);
+
+                        /* And then extend the PCR with the resulting hash */
+                        r = pcr_state_extend(pcr_states + i, b, bsz);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        return 0;
+}
+
+static int pcr_states_allocate(PcrState **ret) {
+        _cleanup_(pcr_state_free_all) PcrState *pcr_states = NULL;
+        size_t n = 0;
+
+        pcr_states = new0(PcrState, strv_length(arg_banks) + 1);
+        if (!pcr_states)
+                return log_oom();
+
+        /* Allocate a PCR state structure, one for each bank */
+        STRV_FOREACH(d, arg_banks) {
+                const EVP_MD *implementation;
+                _cleanup_free_ void *v = NULL;
+                _cleanup_free_ char *b = NULL;
+                int sz;
+
+                assert_se(implementation = EVP_get_digestbyname(*d)); /* Must work, we already checked while parsing  command line */
+
+                b = strdup(EVP_MD_name(implementation));
+                if (!b)
+                        return log_oom();
+
+                sz = EVP_MD_size(implementation);
+                if (sz <= 0 || sz >= INT_MAX)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected digest size: %i", sz);
+
+                v = malloc0(sz); /* initial PCR state is all zeroes */
+                if (!v)
+                        return log_oom();
+
+                pcr_states[n++] = (struct PcrState) {
+                        .bank = ascii_strlower(TAKE_PTR(b)),
+                        .md = implementation,
+                        .value = TAKE_PTR(v),
+                        .value_size = sz,
+                };
+        }
+
+        *ret = TAKE_PTR(pcr_states);
+        return (int) n;
+}
+
+static int pcr_states_save(PcrState *pcr_states, size_t n) {
+        assert(pcr_states);
+        assert(n > 0);
+
+        for (size_t i = 0; i < n; i++) {
+                _cleanup_free_ void *saved = NULL;
+
+                if (!pcr_states[i].value)
+                        continue;
+
+                saved = memdup(pcr_states[i].value, pcr_states[i].value_size);
+                if (!saved)
+                        return log_oom();
+
+                free_and_replace(pcr_states[i].saved_value, saved);
+        }
+
+        return 0;
+}
+
+static void pcr_states_restore(PcrState *pcr_states, size_t n) {
+        assert(pcr_states);
+        assert(n > 0);
+
+        for (size_t i = 0; i < n; i++) {
+
+                assert(pcr_states[i].value);
+                assert(pcr_states[i].saved_value);
+
+                memcpy(pcr_states[i].value, pcr_states[i].saved_value, pcr_states[i].value_size);
+        }
+}
+
+static int verb_calculate(int argc, char *argv[], void *userdata) {
+        _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+        _cleanup_(pcr_state_free_all) PcrState *pcr_states = NULL;
+        size_t n;
+        int r;
+
+        if (!arg_sections[UNIFIED_SECTION_LINUX] && !arg_current)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Either --linux= or --current must be specified, refusing.");
+        if (arg_append)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "The --append= switch is only supported for 'sign', not 'calculate'.");
+
+        assert(!strv_isempty(arg_banks));
+        assert(!strv_isempty(arg_phase));
+
+        r = pcr_states_allocate(&pcr_states);
+        if (r < 0)
+                return r;
+
+        n = (size_t) r;
+
+        r = measure_kernel(pcr_states, n);
+        if (r < 0)
+                return r;
+
+        /* Save the current state, so that we later can restore to it. This way we can measure the PCR values
+         * for multiple different boot phases without heaving to start from zero each time */
+        r = pcr_states_save(pcr_states, n);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(phase, arg_phase) {
+
+                r = measure_phase(pcr_states, n, *phase);
+                if (r < 0)
+                        return r;
+
+                for (size_t i = 0; i < n; i++) {
+                        if (arg_json_format_flags & JSON_FORMAT_OFF) {
+                                _cleanup_free_ char *hd = NULL;
+
+                                if (i == 0) {
+                                        fflush(stdout);
+                                        fprintf(stderr, "%s# PCR[%" PRIu32 "] Phase <%s>%s\n",
+                                                ansi_grey(),
+                                                TPM_PCR_INDEX_KERNEL_IMAGE,
+                                                isempty(*phase) ? ":" : *phase,
+                                                ansi_normal());
+                                        fflush(stderr);
+                                }
+
+                                hd = hexmem(pcr_states[i].value, pcr_states[i].value_size);
+                                if (!hd)
+                                        return log_oom();
+
+                                printf("%" PRIu32 ":%s=%s\n", TPM_PCR_INDEX_KERNEL_IMAGE, pcr_states[i].bank, hd);
+                        } else {
+                                _cleanup_(json_variant_unrefp) JsonVariant *bv = NULL, *array = NULL;
+
+                                array = json_variant_ref(json_variant_by_key(w, pcr_states[i].bank));
+
+                                r = json_build(&bv,
+                                               JSON_BUILD_OBJECT(
+                                                               JSON_BUILD_PAIR_CONDITION(!isempty(*phase), "phase", JSON_BUILD_STRING(*phase)),
+                                                               JSON_BUILD_PAIR("pcr", JSON_BUILD_INTEGER(TPM_PCR_INDEX_KERNEL_IMAGE)),
+                                                               JSON_BUILD_PAIR("hash", JSON_BUILD_HEX(pcr_states[i].value, pcr_states[i].value_size))
+                                               )
+                                );
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to build JSON object: %m");
+
+                                r = json_variant_append_array(&array, bv);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to append JSON object to array: %m");
+
+                                r = json_variant_set_field(&w, pcr_states[i].bank, array);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to add bank info to object: %m");
+                        }
+                }
+
+                /* Return to the original kernel measurement for the next phase calculation */
+                pcr_states_restore(pcr_states, n);
+        }
+
+        if (!FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) {
+
+                if (arg_json_format_flags & (JSON_FORMAT_PRETTY|JSON_FORMAT_PRETTY_AUTO))
+                        pager_open(arg_pager_flags);
+
+                json_variant_dump(w, arg_json_format_flags, stdout, NULL);
+        }
+
+        return 0;
+}
+
+static int verb_sign(int argc, char *argv[], void *userdata) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        _cleanup_(pcr_state_free_all) PcrState *pcr_states = NULL;
+        _cleanup_(EVP_PKEY_freep) EVP_PKEY *privkey = NULL, *pubkey = NULL;
+        _cleanup_fclose_ FILE *privkeyf = NULL;
+        TSS2_RC rc;
+        size_t n;
+        int r;
+
+        if (!arg_sections[UNIFIED_SECTION_LINUX] && !arg_current)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Either --linux= or --current must be specified, refusing.");
+
+        if (!arg_private_key)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No private key specified, use --private-key=.");
+
+        assert(!strv_isempty(arg_banks));
+        assert(!strv_isempty(arg_phase));
+
+        if (arg_append) {
+                r = json_parse_file(NULL, arg_append, 0, &v, NULL, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse '%s': %m", arg_append);
+
+                if (!json_variant_is_object(v))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "File '%s' is not a valid JSON object, refusing.", arg_append);
+        }
+
+        /* When signing we only support JSON output */
+        arg_json_format_flags &= ~JSON_FORMAT_OFF;
+
+        privkeyf = fopen(arg_private_key, "re");
+        if (!privkeyf)
+                return log_error_errno(errno, "Failed to open private key file '%s': %m", arg_private_key);
+
+        privkey = PEM_read_PrivateKey(privkeyf, NULL, NULL, NULL);
+        if (!privkey)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to parse private key '%s'.", arg_private_key);
+
+        if (arg_public_key) {
+                _cleanup_fclose_ FILE *pubkeyf = NULL;
+
+                pubkeyf = fopen(arg_public_key, "re");
+                if (!pubkeyf)
+                        return log_error_errno(errno, "Failed to open public key file '%s': %m", arg_public_key);
+
+                pubkey = PEM_read_PUBKEY(pubkeyf, NULL, NULL, NULL);
+                if (!pubkey)
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to parse public key '%s'.", arg_public_key);
+        } else {
+                _cleanup_free_ char *data = NULL;
+                _cleanup_fclose_ FILE *tf = NULL;
+                size_t sz;
+
+                /* No public key was specified, let's derive it automatically, if we can */
+
+                tf = open_memstream_unlocked(&data, &sz);
+                if (!tf)
+                        return log_oom();
+
+                if (i2d_PUBKEY_fp(tf, privkey) != 1)
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to extract public key from private key file '%s'.", arg_private_key);
+
+                fflush(tf);
+                rewind(tf);
+
+                if (!d2i_PUBKEY_fp(tf, &pubkey))
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to parse extracted public key of private key file '%s'.", arg_private_key);
+        }
+
+        r = pcr_states_allocate(&pcr_states);
+        if (r < 0)
+                return r;
+
+        n = (size_t) r;
+
+        r = measure_kernel(pcr_states, n);
+        if (r < 0)
+                return r;
+
+        r = pcr_states_save(pcr_states, n);
+        if (r < 0)
+                return r;
+
+        r = dlopen_tpm2();
+        if (r < 0)
+                return r;
+
+        _cleanup_tpm2_context_ Tpm2Context *c = NULL;
+        r = tpm2_context_new(arg_tpm2_device, &c);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(phase, arg_phase) {
+
+                r = measure_phase(pcr_states, n, *phase);
+                if (r < 0)
+                        return r;
+
+                for (size_t i = 0; i < n; i++) {
+                        static const TPMT_SYM_DEF symmetric = {
+                                .algorithm = TPM2_ALG_AES,
+                                .keyBits.aes = 128,
+                                .mode.aes = TPM2_ALG_CFB,
+                        };
+                        PcrState *p = pcr_states + i;
+
+                        _cleanup_tpm2_handle_ Tpm2Handle *session = NULL;
+                        r = tpm2_handle_new(c, &session);
+                        if (r < 0)
+                                return r;
+
+                        rc = sym_Esys_StartAuthSession(
+                                        c->esys_context,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        NULL,
+                                        TPM2_SE_TRIAL,
+                                        &symmetric,
+                                        TPM2_ALG_SHA256,
+                                        &session->esys_handle);
+                        if (rc != TSS2_RC_SUCCESS)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                       "Failed to open session in TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                        /* Generate a single hash value from the PCRs included in our policy. Given that that's
+                         * exactly one, the calculation is trivial. */
+                        TPM2B_DIGEST intermediate_digest = {
+                                .size = SHA256_DIGEST_SIZE,
+                        };
+                        assert(sizeof(intermediate_digest.buffer) >= SHA256_DIGEST_SIZE);
+                        sha256_direct(p->value, p->value_size, intermediate_digest.buffer);
+
+                        int tpmalg = tpm2_hash_alg_from_string(EVP_MD_name(p->md));
+                        if (tpmalg < 0)
+                                return log_error_errno(tpmalg, "Unsupported PCR bank");
+
+                        TPML_PCR_SELECTION pcr_selection;
+                        tpm2_pcr_mask_to_selection(1 << TPM_PCR_INDEX_KERNEL_IMAGE, tpmalg, &pcr_selection);
+
+                        rc = sym_Esys_PolicyPCR(
+                                        c->esys_context,
+                                        session->esys_handle,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        &intermediate_digest,
+                                        &pcr_selection);
+                        if (rc != TSS2_RC_SUCCESS)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                       "Failed to push PCR policy into TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                        _cleanup_(Esys_Freep) TPM2B_DIGEST *pcr_policy_digest = NULL;
+                        rc = sym_Esys_PolicyGetDigest(
+                                        c->esys_context,
+                                        session->esys_handle,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        &pcr_policy_digest);
+                        if (rc != TSS2_RC_SUCCESS)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                       "Failed to get policy digest from TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                        _cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX* mdctx = NULL;
+                        mdctx = EVP_MD_CTX_new();
+                        if (!mdctx)
+                                return log_oom();
+
+                        if (EVP_DigestSignInit(mdctx, NULL, p->md, NULL, privkey) != 1)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                       "Failed to initialize signature context.");
+
+                        if (EVP_DigestSignUpdate(mdctx, pcr_policy_digest->buffer, pcr_policy_digest->size) != 1)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                       "Failed to sign data.");
+
+                        size_t ss;
+                        if (EVP_DigestSignFinal(mdctx, NULL, &ss) != 1)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                       "Failed to finalize signature");
+
+                        _cleanup_free_ void *sig = malloc(ss);
+                        if (!sig)
+                                return log_oom();
+
+                        if (EVP_DigestSignFinal(mdctx, sig, &ss) != 1)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                       "Failed to acquire signature data");
+
+                        _cleanup_free_ void *pubkey_fp = NULL;
+                        size_t pubkey_fp_size = 0;
+                        r = pubkey_fingerprint(pubkey, EVP_sha256(), &pubkey_fp, &pubkey_fp_size);
+                        if (r < 0)
+                                return r;
+
+                        _cleanup_(json_variant_unrefp) JsonVariant *a = NULL;
+                        r = tpm2_make_pcr_json_array(UINT64_C(1) << TPM_PCR_INDEX_KERNEL_IMAGE, &a);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to build JSON PCR mask array: %m");
+
+                        _cleanup_(json_variant_unrefp) JsonVariant *bv = NULL;
+                        r = json_build(&bv, JSON_BUILD_OBJECT(
+                                                       JSON_BUILD_PAIR("pcrs", JSON_BUILD_VARIANT(a)),                                             /* PCR mask */
+                                                       JSON_BUILD_PAIR("pkfp", JSON_BUILD_HEX(pubkey_fp, pubkey_fp_size)),                         /* SHA256 fingerprint of public key (DER) used for the signature */
+                                                       JSON_BUILD_PAIR("pol", JSON_BUILD_HEX(pcr_policy_digest->buffer, pcr_policy_digest->size)), /* TPM2 policy hash that is signed */
+                                                       JSON_BUILD_PAIR("sig", JSON_BUILD_BASE64(sig, ss))));                                       /* signature data */
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to build JSON object: %m");
+
+                        _cleanup_(json_variant_unrefp) JsonVariant *av = NULL;
+                        av = json_variant_ref(json_variant_by_key(v, p->bank));
+
+                        r = json_variant_append_array_nodup(&av, bv);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to append JSON object: %m");
+
+                        r = json_variant_set_field(&v, p->bank, av);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to add JSON field: %m");
+                }
+
+                /* Return to the original kernel measurement for the next phase calculation */
+                pcr_states_restore(pcr_states, n);
+        }
+
+        if (arg_json_format_flags & (JSON_FORMAT_PRETTY|JSON_FORMAT_PRETTY_AUTO))
+                pager_open(arg_pager_flags);
+
+        json_variant_dump(v, arg_json_format_flags, stdout, NULL);
+
+        return 0;
+}
+
+static int compare_reported_pcr_nr(uint32_t pcr, const char *varname, const char *description) {
+        _cleanup_free_ char *s = NULL;
+        uint32_t v;
+        int r;
+
+        r = efi_get_variable_string(varname, &s);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to read EFI variable '%s': %m", varname);
+
+        r = safe_atou32(s, &v);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse EFI variable '%s': %s", varname, s);
+
+        if (pcr != v)
+                log_warning("PCR number reported by stub for %s (%" PRIu32 ") different from our expectation (%" PRIu32 ").\n"
+                            "The measurements are likely inconsistent.", description, v, pcr);
+
+        return 0;
+}
+
+static int validate_stub(void) {
+        uint64_t features;
+        bool found = false;
+        int r;
+
+        if (tpm2_support() != TPM2_SUPPORT_FULL)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Sorry, system lacks full TPM2 support.");
+
+        r = efi_stub_get_features(&features);
+        if (r < 0)
+                return log_error_errno(r, "Unable to get stub features: %m");
+
+        if (!FLAGS_SET(features, EFI_STUB_FEATURE_THREE_PCRS))
+                log_warning("Warning: current kernel image does not support measuring itself, the command line or initrd system extension images.\n"
+                            "The PCR measurements seen are unlikely to be valid.");
+
+        r = compare_reported_pcr_nr(TPM_PCR_INDEX_KERNEL_IMAGE, EFI_LOADER_VARIABLE(StubPcrKernelImage), "kernel image");
+        if (r < 0)
+                return r;
+
+        r = compare_reported_pcr_nr(TPM_PCR_INDEX_KERNEL_PARAMETERS, EFI_LOADER_VARIABLE(StubPcrKernelParameters), "kernel parameters");
+        if (r < 0)
+                return r;
+
+        r = compare_reported_pcr_nr(TPM_PCR_INDEX_INITRD_SYSEXTS, EFI_LOADER_VARIABLE(StubPcrInitRDSysExts), "initrd system extension images");
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(bank, arg_banks) {
+                _cleanup_free_ char *b = NULL, *p = NULL;
+
+                b = strdup(*bank);
+                if (!b)
+                        return log_oom();
+
+                if (asprintf(&p, "/sys/class/tpm/tpm0/pcr-%s/", ascii_strlower(b)) < 0)
+                        return log_oom();
+
+                if (access(p, F_OK) < 0) {
+                        if (errno != ENOENT)
+                                return log_error_errno(errno, "Failed to detect if '%s' exists: %m", b);
+                } else
+                        found = true;
+        }
+
+        if (!found)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "None of the select PCR banks appear to exist.");
+
+        return 0;
+}
+
+static int verb_status(int argc, char *argv[], void *userdata) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        static const struct {
+                uint32_t nr;
+                const char *description;
+        } relevant_pcrs[] = {
+                { TPM_PCR_INDEX_KERNEL_IMAGE,      "Unified Kernel Image"     },
+                { TPM_PCR_INDEX_KERNEL_PARAMETERS, "Kernel Parameters"        },
+                { TPM_PCR_INDEX_INITRD_SYSEXTS,    "initrd System Extensions" },
+        };
+
+        int r;
+
+        r = validate_stub();
+        if (r < 0)
+                return r;
+
+        for (size_t i = 0; i < ELEMENTSOF(relevant_pcrs); i++) {
+
+                STRV_FOREACH(bank, arg_banks) {
+                        _cleanup_free_ char *b = NULL, *p = NULL, *s = NULL;
+                        _cleanup_free_ void *h = NULL;
+                        size_t l;
+
+                        b = strdup(*bank);
+                        if (!b)
+                                return log_oom();
+
+                        if (asprintf(&p, "/sys/class/tpm/tpm0/pcr-%s/%" PRIu32, ascii_strlower(b), relevant_pcrs[i].nr) < 0)
+                                return log_oom();
+
+                        r = read_virtual_file(p, 4096, &s, NULL);
+                        if (r == -ENOENT)
+                                continue;
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to read '%s': %m", p);
+
+                        r = unhexmem(strstrip(s), SIZE_MAX, &h, &l);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to decode PCR value '%s': %m", s);
+
+                        if (arg_json_format_flags & JSON_FORMAT_OFF) {
+                                _cleanup_free_ char *f = NULL;
+
+                                f = hexmem(h, l);
+                                if (!h)
+                                        return log_oom();
+
+                                if (bank == arg_banks) {
+                                        /* before the first line for each PCR, write a short descriptive text to
+                                         * stderr, and leave the primary content on stdout */
+                                        fflush(stdout);
+                                        fprintf(stderr, "%s# PCR[%" PRIu32 "] %s%s%s\n",
+                                                ansi_grey(),
+                                                relevant_pcrs[i].nr,
+                                                relevant_pcrs[i].description,
+                                                memeqzero(h, l) ? " (NOT SET!)" : "",
+                                                ansi_normal());
+                                        fflush(stderr);
+                                }
+
+                                printf("%" PRIu32 ":%s=%s\n", relevant_pcrs[i].nr, b, f);
+
+                        } else {
+                                _cleanup_(json_variant_unrefp) JsonVariant *bv = NULL, *a = NULL;
+
+                                r = json_build(&bv,
+                                               JSON_BUILD_OBJECT(
+                                                               JSON_BUILD_PAIR("pcr", JSON_BUILD_INTEGER(relevant_pcrs[i].nr)),
+                                                               JSON_BUILD_PAIR("hash", JSON_BUILD_HEX(h, l))
+                                               )
+                                );
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to build JSON object: %m");
+
+                                a = json_variant_ref(json_variant_by_key(v, b));
+
+                                r = json_variant_append_array(&a, bv);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to append PCR entry to JSON array: %m");
+
+                                r = json_variant_set_field(&v, b, a);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to add bank info to object: %m");
+                        }
+                }
+        }
+
+        if (!FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) {
+                if (arg_json_format_flags & (JSON_FORMAT_PRETTY|JSON_FORMAT_PRETTY_AUTO))
+                        pager_open(arg_pager_flags);
+
+                json_variant_dump(v, arg_json_format_flags, stdout, NULL);
+        }
+
+        return 0;
+}
+
+static int measure_main(int argc, char *argv[]) {
+        static const Verb verbs[] = {
+                { "help",      VERB_ANY, VERB_ANY, 0,            help           },
+                { "status",    VERB_ANY, 1,        VERB_DEFAULT, verb_status    },
+                { "calculate", VERB_ANY, 1,        0,            verb_calculate },
+                { "sign",      VERB_ANY, 1,        0,            verb_sign      },
+                {}
+        };
+
+        return dispatch_verb(argc, argv, verbs, NULL);
+}
+
+static int run(int argc, char *argv[]) {
+        int r;
+
+        log_show_color(true);
+        log_parse_environment();
+        log_open();
+
+        r = parse_argv(argc, argv);
+        if (r <= 0)
+                return r;
+
+        return measure_main(argc, argv);
+}
+
+DEFINE_MAIN_FUNCTION(run);
diff --git a/src/boot/meson.build b/src/boot/meson.build
new file mode 100644
index 0000000..eb621c8
--- /dev/null
+++ b/src/boot/meson.build
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+bootctl_sources = files(
+        'bootctl-install.c',
+        'bootctl-random-seed.c',
+        'bootctl-reboot-to-firmware.c',
+        'bootctl-set-efivar.c',
+        'bootctl-status.c',
+        'bootctl-systemd-efi-options.c',
+        'bootctl-uki.c',
+        'bootctl-util.c',
+        'bootctl.c',
+)
diff --git a/src/boot/pcrphase.c b/src/boot/pcrphase.c
new file mode 100644
index 0000000..896e248
--- /dev/null
+++ b/src/boot/pcrphase.c
@@ -0,0 +1,379 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <getopt.h>
+
+#include <sd-device.h>
+#include <sd-messages.h>
+
+#include "blkid-util.h"
+#include "blockdev-util.h"
+#include "build.h"
+#include "chase-symlinks.h"
+#include "efi-loader.h"
+#include "efivars.h"
+#include "escape.h"
+#include "fd-util.h"
+#include "main-func.h"
+#include "mountpoint-util.h"
+#include "openssl-util.h"
+#include "parse-argument.h"
+#include "pretty-print.h"
+#include "tpm-pcr.h"
+#include "tpm2-util.h"
+
+static bool arg_graceful = false;
+static char *arg_tpm2_device = NULL;
+static char **arg_banks = NULL;
+static char *arg_file_system = NULL;
+static bool arg_machine_id = false;
+
+STATIC_DESTRUCTOR_REGISTER(arg_banks, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_device, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_file_system, freep);
+
+static int help(int argc, char *argv[], void *userdata) {
+        _cleanup_free_ char *link = NULL;
+        int r;
+
+        r = terminal_urlify_man("systemd-pcrphase", "8", &link);
+        if (r < 0)
+                return log_oom();
+
+        printf("%1$s  [OPTIONS...] WORD\n"
+               "%1$s  [OPTIONS...] --file-system=PATH\n"
+               "%1$s  [OPTIONS...] --machine-id\n"
+               "\n%5$sMeasure boot phase into TPM2 PCR 11.%6$s\n"
+               "\n%3$sOptions:%4$s\n"
+               "  -h --help              Show this help\n"
+               "     --version           Print version\n"
+               "     --bank=DIGEST       Select TPM bank (SHA1, SHA256)\n"
+               "     --tpm2-device=PATH  Use specified TPM2 device\n"
+               "     --graceful          Exit gracefully if no TPM2 device is found\n"
+               "     --file-system=PATH  Measure UUID/labels of file system into PCR 15\n"
+               "     --machine-id        Measure machine ID into PCR 15\n"
+               "\nSee the %2$s for details.\n",
+               program_invocation_short_name,
+               link,
+               ansi_underline(),
+               ansi_normal(),
+               ansi_highlight(),
+               ansi_normal());
+
+        return 0;
+}
+
+static int parse_argv(int argc, char *argv[]) {
+        enum {
+                ARG_VERSION = 0x100,
+                ARG_BANK,
+                ARG_TPM2_DEVICE,
+                ARG_GRACEFUL,
+                ARG_FILE_SYSTEM,
+                ARG_MACHINE_ID,
+        };
+
+        static const struct option options[] = {
+                { "help",        no_argument,       NULL, 'h'             },
+                { "version",     no_argument,       NULL, ARG_VERSION     },
+                { "bank",        required_argument, NULL, ARG_BANK        },
+                { "tpm2-device", required_argument, NULL, ARG_TPM2_DEVICE },
+                { "graceful",    no_argument,       NULL, ARG_GRACEFUL    },
+                { "file-system", required_argument, NULL, ARG_FILE_SYSTEM },
+                { "machine-id",  no_argument,       NULL, ARG_MACHINE_ID  },
+                {}
+        };
+
+        int c, r;
+
+        assert(argc >= 0);
+        assert(argv);
+
+        while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
+                switch (c) {
+
+                case 'h':
+                        help(0, NULL, NULL);
+                        return 0;
+
+                case ARG_VERSION:
+                        return version();
+
+                case ARG_BANK: {
+                        const EVP_MD *implementation;
+
+                        implementation = EVP_get_digestbyname(optarg);
+                        if (!implementation)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown bank '%s', refusing.", optarg);
+
+                        if (strv_extend(&arg_banks, EVP_MD_name(implementation)) < 0)
+                                return log_oom();
+
+                        break;
+                }
+
+                case ARG_TPM2_DEVICE: {
+                        _cleanup_free_ char *device = NULL;
+
+                        if (streq(optarg, "list"))
+                                return tpm2_list_devices();
+
+                        if (!streq(optarg, "auto")) {
+                                device = strdup(optarg);
+                                if (!device)
+                                        return log_oom();
+                        }
+
+                        free_and_replace(arg_tpm2_device, device);
+                        break;
+                }
+
+                case ARG_GRACEFUL:
+                        arg_graceful = true;
+                        break;
+
+                case ARG_FILE_SYSTEM:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_file_system);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_MACHINE_ID:
+                        arg_machine_id = true;
+                        break;
+
+                case '?':
+                        return -EINVAL;
+
+                default:
+                        assert_not_reached();
+                }
+
+        if (arg_file_system && arg_machine_id)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--file-system= and --machine-id may not be combined.");
+
+        return 1;
+}
+
+static int determine_banks(Tpm2Context *c, unsigned target_pcr_nr) {
+        _cleanup_strv_free_ char **l = NULL;
+        int r;
+
+        assert(c);
+
+        if (!strv_isempty(arg_banks)) /* Explicitly configured? Then use that */
+                return 0;
+
+        r = tpm2_get_good_pcr_banks_strv(c, UINT32_C(1) << target_pcr_nr, &l);
+        if (r < 0)
+                return r;
+
+        strv_free_and_replace(arg_banks, l);
+        return 0;
+}
+
+static int get_file_system_word(
+                sd_device *d,
+                const char *prefix,
+                char **ret) {
+
+        int r;
+
+        assert(d);
+        assert(prefix);
+        assert(ret);
+
+        _cleanup_close_ int block_fd = sd_device_open(d, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
+        if (block_fd < 0)
+                return block_fd;
+
+        _cleanup_(blkid_free_probep) blkid_probe b = blkid_new_probe();
+        if (!b)
+                return -ENOMEM;
+
+        errno = 0;
+        r = blkid_probe_set_device(b, block_fd, 0, 0);
+        if (r != 0)
+                return errno_or_else(ENOMEM);
+
+        (void) blkid_probe_enable_superblocks(b, 1);
+        (void) blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE|BLKID_SUBLKS_UUID|BLKID_SUBLKS_LABEL);
+        (void) blkid_probe_enable_partitions(b, 1);
+        (void) blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
+
+        errno = 0;
+        r = blkid_do_safeprobe(b);
+        if (r == _BLKID_SAFEPROBE_ERROR)
+                return errno_or_else(EIO);
+        if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND))
+                return -ENOPKG;
+
+        assert(r == _BLKID_SAFEPROBE_FOUND);
+
+        _cleanup_strv_free_ char **l = strv_new(prefix);
+        if (!l)
+                return log_oom();
+
+        FOREACH_STRING(field, "TYPE", "UUID", "LABEL", "PART_ENTRY_UUID", "PART_ENTRY_TYPE", "PART_ENTRY_NAME") {
+                const char *v = NULL;
+
+                (void) blkid_probe_lookup_value(b, field, &v, NULL);
+
+                _cleanup_free_ char *escaped = xescape(strempty(v), ":"); /* Avoid ambiguity around ":" */
+                if (!escaped)
+                        return log_oom();
+
+                r = strv_consume(&l, TAKE_PTR(escaped));
+                if (r < 0)
+                        return log_oom();
+
+        }
+
+        assert(strv_length(l) == 7); /* We always want 7 components, to avoid ambiguous strings */
+
+        _cleanup_free_ char *word = strv_join(l, ":");
+        if (!word)
+                return log_oom();
+
+        *ret = TAKE_PTR(word);
+        return 0;
+}
+
+static int run(int argc, char *argv[]) {
+        _cleanup_free_ char *joined = NULL, *word = NULL;
+        unsigned target_pcr_nr;
+        size_t length;
+        int r;
+
+        log_setup();
+
+        r = parse_argv(argc, argv);
+        if (r <= 0)
+                return r;
+
+        if (arg_file_system) {
+                _cleanup_free_ char *normalized = NULL, *normalized_escaped = NULL;
+                _cleanup_(sd_device_unrefp) sd_device *d = NULL;
+                _cleanup_close_ int dfd = -EBADF;
+
+                if (optind != argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Expected no argument.");
+
+                dfd = chase_symlinks_and_open(arg_file_system, NULL, 0, O_DIRECTORY|O_CLOEXEC, &normalized);
+                if (dfd < 0)
+                        return log_error_errno(dfd, "Failed to open path '%s': %m", arg_file_system);
+
+                r = fd_is_mount_point(dfd, NULL, 0);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to determine if path '%s' is mount point: %m", normalized);
+                if (r == 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTDIR), "Specified path '%s' is not a mount point, refusing: %m", normalized);
+
+                normalized_escaped = xescape(normalized, ":"); /* Avoid ambiguity around ":" */
+                if (!normalized_escaped)
+                        return log_oom();
+
+                _cleanup_free_ char* prefix = strjoin("file-system:", normalized_escaped);
+                if (!prefix)
+                        return log_oom();
+
+                r = block_device_new_from_fd(dfd, BLOCK_DEVICE_LOOKUP_BACKING, &d);
+                if (r < 0) {
+                        log_notice_errno(r, "Unable to determine backing block device of '%s', measuring generic fallback file system identity string: %m", arg_file_system);
+
+                        word = strjoin(prefix, "::::::");
+                        if (!word)
+                                return log_oom();
+                } else {
+                        r = get_file_system_word(d, prefix, &word);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to get file system identifier string for '%s': %m", arg_file_system);
+                }
+
+                target_pcr_nr = TPM_PCR_INDEX_VOLUME_KEY; /* → PCR 15 */
+
+        } else if (arg_machine_id) {
+                sd_id128_t mid;
+
+                if (optind != argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Expected no argument.");
+
+                r = sd_id128_get_machine(&mid);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to acquire machine ID: %m");
+
+                word = strjoin("machine-id:", SD_ID128_TO_STRING(mid));
+                if (!word)
+                        return log_oom();
+
+                target_pcr_nr = TPM_PCR_INDEX_VOLUME_KEY; /* → PCR 15 */
+
+        } else {
+                if (optind+1 != argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Expected a single argument.");
+
+                word = strdup(argv[optind]);
+                if (!word)
+                        return log_oom();
+
+                /* Refuse to measure an empty word. We want to be able to write the series of measured words
+                 * separated by colons, where multiple separating colons are collapsed. Thus it makes sense to
+                 * disallow an empty word to avoid ambiguities. */
+                if (isempty(word))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "String to measure cannot be empty, refusing.");
+
+                target_pcr_nr = TPM_PCR_INDEX_KERNEL_IMAGE; /* → PCR 11 */
+        }
+
+        if (arg_graceful && tpm2_support() != TPM2_SUPPORT_FULL) {
+                log_notice("No complete TPM2 support detected, exiting gracefully.");
+                return EXIT_SUCCESS;
+        }
+
+        length = strlen(word);
+
+        /* Skip logic if sd-stub is not used, after all PCR 11 might have a very different purpose then. */
+        r = efi_stub_measured(LOG_ERR);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                log_info("Kernel stub did not measure kernel image into PCR %u, skipping userspace measurement, too.", TPM_PCR_INDEX_KERNEL_IMAGE);
+                return EXIT_SUCCESS;
+        }
+
+        r = dlopen_tpm2();
+        if (r < 0)
+                return log_error_errno(r, "Failed to load TPM2 libraries: %m");
+
+        _cleanup_tpm2_context_ Tpm2Context *c = NULL;
+        r = tpm2_context_new(arg_tpm2_device, &c);
+        if (r < 0)
+                return r;
+
+        r = determine_banks(c, target_pcr_nr);
+        if (r < 0)
+                return r;
+        if (strv_isempty(arg_banks)) /* Still none? */
+                return log_error_errno(SYNTHETIC_ERRNO(ENOENT), "Found a TPM2 without enabled PCR banks. Can't operate.");
+
+        joined = strv_join(arg_banks, ", ");
+        if (!joined)
+                return log_oom();
+
+        log_debug("Measuring '%s' into PCR index %u, banks %s.", word, target_pcr_nr, joined);
+
+        r = tpm2_extend_bytes(c, arg_banks, target_pcr_nr, word, length, NULL, 0);
+        if (r < 0)
+                return r;
+
+        log_struct(LOG_INFO,
+                   "MESSAGE_ID=" SD_MESSAGE_TPM_PCR_EXTEND_STR,
+                   LOG_MESSAGE("Extended PCR index %u with '%s' (banks %s).", target_pcr_nr, word, joined),
+                   "MEASURING=%s", word,
+                   "PCR=%u", target_pcr_nr,
+                   "BANKS=%s", joined);
+
+        return EXIT_SUCCESS;
+}
+
+DEFINE_MAIN_FUNCTION(run);
diff --git a/src/busctl/busctl-introspect.c b/src/busctl/busctl-introspect.c
index 89b32f4..3da4a13 100644
--- a/src/busctl/busctl-introspect.c
+++ b/src/busctl/busctl-introspect.c
@@ -6,7 +6,6 @@
 #include "busctl-introspect.h"
 #include "path-util.h"
 #include "string-util.h"
-#include "util.h"
 #include "xml.h"
 
 #define NODE_DEPTH_MAX 16
@@ -147,7 +146,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Bad state");
+                        assert_not_reached();
                 }
         }
 }
@@ -178,11 +177,10 @@
         } state = STATE_NODE;
 
         _cleanup_free_ char *node_path = NULL, *argument_type = NULL, *argument_direction = NULL;
-        const char *np = prefix;
+        const char *np = ASSERT_PTR(prefix);
         int r;
 
         assert(context);
-        assert(prefix);
 
         if (n_depth > NODE_DEPTH_MAX)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "<node> depth too high.");
@@ -228,7 +226,7 @@
                                    (t == XML_TAG_CLOSE && streq_ptr(name, "node"))) {
 
                                 if (context->ops->on_path) {
-                                        r = context->ops->on_path(node_path ? node_path : np, context->userdata);
+                                        r = context->ops->on_path(node_path ?: np, context->userdata);
                                         if (r < 0)
                                                 return r;
                                 }
@@ -250,7 +248,6 @@
                                 if (name[0] == '/')
                                         node_path = TAKE_PTR(name);
                                 else {
-
                                         node_path = path_join(prefix, name);
                                         if (!node_path)
                                                 return log_oom();
@@ -679,7 +676,7 @@
 }
 
 int parse_xml_introspect(const char *prefix, const char *xml, const XMLIntrospectOps *ops, void *userdata) {
-        Context context = {
+        _cleanup_(context_reset_interface) Context context = {
                 .ops = ops,
                 .userdata = userdata,
                 .current = xml,
@@ -695,36 +692,24 @@
                 _cleanup_free_ char *name = NULL;
 
                 r = xml_tokenize(&context.current, &name, &context.xml_state, NULL);
-                if (r < 0) {
-                        log_error("XML parse error");
-                        goto finish;
-                }
+                if (r < 0)
+                        return log_error_errno(r, "XML parse error");
 
-                if (r == XML_END) {
-                        r = 0;
+                if (r == XML_END)
                         break;
-                }
 
                 if (r == XML_TAG_OPEN) {
 
                         if (streq(name, "node")) {
                                 r = parse_xml_node(&context, prefix, 0);
                                 if (r < 0)
-                                        goto finish;
-                        } else {
-                                log_error("Unexpected tag '%s' in introspection data.", name);
-                                r = -EBADMSG;
-                                goto finish;
-                        }
-                } else if (r != XML_TEXT || !in_charset(name, WHITESPACE)) {
-                        log_error("Unexpected token.");
-                        r = -EBADMSG;
-                        goto finish;
-                }
+                                        return r;
+                        } else
+                                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                                       "Unexpected tag '%s' in introspection data.", name);
+                } else if (r != XML_TEXT || !in_charset(name, WHITESPACE))
+                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Unexpected token.");
         }
 
-finish:
-        context_reset_interface(&context);
-
-        return r;
+        return 0;
 }
diff --git a/src/busctl/busctl-introspect.h b/src/busctl/busctl-introspect.h
index 1a045be..720a0df 100644
--- a/src/busctl/busctl-introspect.h
+++ b/src/busctl/busctl-introspect.h
@@ -2,6 +2,7 @@
 #pragma once
 
 #include <stdbool.h>
+#include <stdint.h>
 
 typedef struct XMLIntrospectOps {
         int (*on_path)(const char *path, void *userdata);
diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c
index 8aa769e..87becdb 100644
--- a/src/busctl/busctl.c
+++ b/src/busctl/busctl.c
@@ -5,6 +5,7 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-dump.h"
 #include "bus-internal.h"
 #include "bus-message.h"
@@ -16,10 +17,11 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-table.h"
+#include "glyph-util.h"
 #include "json.h"
-#include "locale-util.h"
 #include "log.h"
 #include "main-func.h"
+#include "os-util.h"
 #include "pager.h"
 #include "parse-argument.h"
 #include "parse-util.h"
@@ -31,6 +33,7 @@
 #include "terminal-util.h"
 #include "user-util.h"
 #include "verbs.h"
+#include "version.h"
 
 static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 static PagerFlags arg_pager_flags = 0;
@@ -102,7 +105,7 @@
 
         if (arg_address)
                 r = sd_bus_set_address(bus, arg_address);
-        else {
+        else
                 switch (arg_transport) {
 
                 case BUS_TRANSPORT_LOCAL:
@@ -121,15 +124,15 @@
                         break;
 
                 default:
-                        assert_not_reached("Hmm, unknown transport type.");
+                        assert_not_reached();
                 }
-        }
+
         if (r < 0)
-                return bus_log_address_error(r);
+                return bus_log_address_error(r, arg_transport);
 
         r = sd_bus_start(bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         *ret = TAKE_PTR(bus);
 
@@ -141,7 +144,7 @@
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_hashmap_free_ Hashmap *names = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
-        char **i, *k;
+        char *k;
         void *v;
         int r;
 
@@ -207,9 +210,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to set alignment: %m");
 
-        r = table_set_empty_string(table, "-");
-        if (r < 0)
-                return log_error_errno(r, "Failed to set empty string: %m");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         r = table_set_sort(table, (size_t) COLUMN_NAME);
         if (r < 0)
@@ -339,9 +340,7 @@
                         if (r < 0)
                                 log_debug_errno(r, "Failed to acquire credentials of service %s, ignoring: %m", k);
                         else {
-                                char m[SD_ID128_STRING_MAX];
-
-                                r = table_add_cell(table, NULL, TABLE_STRING, sd_id128_to_string(mid, m));
+                                r = table_add_cell(table, NULL, TABLE_ID128, &mid);
                                 if (r < 0)
                                         return table_log_add_error(r);
 
@@ -417,11 +416,9 @@
 }
 
 static int on_path(const char *path, void *userdata) {
-        Set *paths = userdata;
+        Set *paths = ASSERT_PTR(userdata);
         int r;
 
-        assert(paths);
-
         r = set_put_strdup(&paths, path);
         if (r < 0)
                 return log_oom();
@@ -466,14 +463,6 @@
         if (r < 0)
                 return log_oom();
 
-        done = set_new(&string_hash_ops_free);
-        if (!done)
-                return log_oom();
-
-        failed = set_new(&string_hash_ops_free);
-        if (!failed)
-                return log_oom();
-
         for (;;) {
                 _cleanup_free_ char *p = NULL;
                 int q;
@@ -490,13 +479,13 @@
                 if (q < 0 && r >= 0)
                         r = q;
 
-                q = set_consume(q < 0 ? failed : done, TAKE_PTR(p));
+                q = set_ensure_consume(q < 0 ? &failed : &done, &string_hash_ops_free, TAKE_PTR(p));
                 assert(q != 0);
                 if (q < 0)
                         return log_oom();
         }
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         l = set_get_strv(done);
         if (!l)
@@ -512,7 +501,6 @@
 
 static int tree(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        char **i;
         int r;
 
         /* Do superficial verification of arguments before even opening the bus */
@@ -536,7 +524,7 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to get name list: %m");
 
-                (void) pager_open(arg_pager_flags);
+                pager_open(arg_pager_flags);
 
                 STRV_FOREACH(i, names) {
                         int q;
@@ -566,7 +554,7 @@
                                 printf("\n");
 
                         if (argv[2]) {
-                                (void) pager_open(arg_pager_flags);
+                                pager_open(arg_pager_flags);
                                 printf("Service %s%s%s:\n", ansi_highlight(), *i, ansi_normal());
                         }
 
@@ -718,7 +706,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unknown basic type.");
+                        assert_not_reached();
                 }
 
                 needs_space = true;
@@ -751,6 +739,9 @@
         if (m->name)
                 string_hash_func(m->name, state);
 
+        if (m->signature)
+                string_hash_func(m->signature, state);
+
         if (m->interface)
                 string_hash_func(m->interface, state);
 }
@@ -771,7 +762,11 @@
         if (d != 0)
                 return d;
 
-        return strcmp_ptr(x->name, y->name);
+        d = strcmp_ptr(x->name, y->name);
+        if (d != 0)
+                return d;
+
+        return strcmp_ptr(x->signature, y->signature);
 }
 
 static int member_compare_funcp(Member * const *a, Member * const *b) {
@@ -798,11 +793,10 @@
 
 static int on_interface(const char *interface, uint64_t flags, void *userdata) {
         _cleanup_(member_freep) Member *m = NULL;
-        Set *members = userdata;
+        Set *members = ASSERT_PTR(userdata);
         int r;
 
         assert(interface);
-        assert(members);
 
         m = new(Member, 1);
         if (!m)
@@ -818,8 +812,9 @@
                 return log_oom();
 
         r = set_put(members, m);
-        if (r == -EEXIST)
-                return log_error_errno(r,  "Invalid introspection data: duplicate interface '%s'.", interface);
+        if (r == 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
+                                       "Invalid introspection data: duplicate interface '%s'.", interface);
         if (r < 0)
                 return log_oom();
 
@@ -861,8 +856,9 @@
                 return log_oom();
 
         r = set_put(members, m);
-        if (r == -EEXIST)
-                return log_error_errno(r, "Invalid introspection data: duplicate method '%s' on interface '%s'.", name, interface);
+        if (r == 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
+                                       "Invalid introspection data: duplicate method '%s' on interface '%s'.", name, interface);
         if (r < 0)
                 return log_oom();
 
@@ -900,8 +896,9 @@
                 return log_oom();
 
         r = set_put(members, m);
-        if (r == -EEXIST)
-                return log_error_errno(r, "Invalid introspection data: duplicate signal '%s' on interface '%s'.", name, interface);
+        if (r == 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
+                                       "Invalid introspection data: duplicate signal '%s' on interface '%s'.", name, interface);
         if (r < 0)
                 return log_oom();
 
@@ -940,8 +937,9 @@
                 return log_oom();
 
         r = set_put(members, m);
-        if (r == -EEXIST)
-                return log_error_errno(r, "Invalid introspection data: duplicate property '%s' on interface '%s'.", name, interface);
+        if (r == 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
+                                       "Invalid introspection data: duplicate property '%s' on interface '%s'.", name, interface);
         if (r < 0)
                 return log_oom();
 
@@ -989,7 +987,7 @@
 
         if (arg_xml_interface) {
                 /* Just dump the received XML and finish */
-                (void) pager_open(arg_pager_flags);
+                pager_open(arg_pager_flags);
                 puts(xml);
                 return 0;
         }
@@ -1024,16 +1022,16 @@
                         return bus_log_parse_error(r);
 
                 for (;;) {
-                        Member *z;
-                        _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *mf = NULL;
+                        _cleanup_free_ char *buf = NULL;
+                        const char *name, *contents;
                         size_t sz = 0;
-                        const char *name;
+                        Member *z;
+                        char type;
 
                         r = sd_bus_message_enter_container(reply, 'e', "sv");
                         if (r < 0)
                                 return bus_log_parse_error(r);
-
                         if (r == 0)
                                 break;
 
@@ -1041,7 +1039,13 @@
                         if (r < 0)
                                 return bus_log_parse_error(r);
 
-                        r = sd_bus_message_enter_container(reply, 'v', NULL);
+                        r = sd_bus_message_peek_type(reply, &type, &contents);
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+                        if (type != 'v')
+                                return bus_log_parse_error(EINVAL);
+
+                        r = sd_bus_message_enter_container(reply, 'v', contents);
                         if (r < 0)
                                 return bus_log_parse_error(r);
 
@@ -1058,6 +1062,7 @@
                         z = set_get(members, &((Member) {
                                                 .type = "property",
                                                 .interface = m->interface,
+                                                .signature = (char*) contents,
                                                 .name = (char*) name }));
                         if (z)
                                 free_and_replace(z->value, buf);
@@ -1108,7 +1113,7 @@
 
         typesafe_qsort(sorted, k, member_compare_funcp);
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (arg_legend)
                 printf("%-*s %-*s %-*s %-*s %s\n",
@@ -1216,7 +1221,6 @@
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *message = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        char **i;
         uint32_t flags = 0;
         const char *unique_name;
         bool is_monitor = false;
@@ -1339,13 +1343,20 @@
 }
 
 static int verb_capture(int argc, char **argv, void *userdata) {
+        _cleanup_free_ char *osname = NULL;
+        static const char info[] =
+                "busctl (systemd) " STRINGIFY(PROJECT_VERSION) " (Git " GIT_VERSION ")";
         int r;
 
         if (isatty(fileno(stdout)) > 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Refusing to write message data to console, please redirect output to a file.");
 
-        bus_pcap_header(arg_snaplen, stdout);
+        r = parse_os_release(NULL, "PRETTY_NAME", &osname);
+        if (r < 0)
+                log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_INFO, r,
+                               "Failed to read os-release file, ignoring: %m");
+        bus_pcap_header(arg_snaplen, osname, info, stdout);
 
         r = monitor(argc, argv, message_pcap);
         if (r < 0)
@@ -1368,7 +1379,7 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (!isempty(argv[1])) {
                 r = parse_pid(argv[1], &pid);
@@ -1957,7 +1968,7 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected element type");
+                assert_not_reached();
         }
 
         *ret = TAKE_PTR(v);
@@ -2048,7 +2059,7 @@
                         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
 
                         if (arg_json_format_flags & (JSON_FORMAT_PRETTY|JSON_FORMAT_PRETTY_AUTO))
-                                (void) pager_open(arg_pager_flags);
+                                pager_open(arg_pager_flags);
 
                         r = json_transform_message(reply, &v);
                         if (r < 0)
@@ -2057,7 +2068,7 @@
                         json_variant_dump(v, arg_json_format_flags, NULL, NULL);
 
                 } else if (arg_verbose) {
-                        (void) pager_open(arg_pager_flags);
+                        pager_open(arg_pager_flags);
 
                         r = sd_bus_message_dump(reply, stdout, 0);
                         if (r < 0)
@@ -2125,7 +2136,6 @@
 static int get_property(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        char **i;
         int r;
 
         r = acquire_bus(false, &bus);
@@ -2157,7 +2167,7 @@
                         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
 
                         if (arg_json_format_flags & (JSON_FORMAT_PRETTY|JSON_FORMAT_PRETTY_AUTO))
-                                (void) pager_open(arg_pager_flags);
+                                pager_open(arg_pager_flags);
 
                         r = json_transform_variant(reply, contents, &v);
                         if (r < 0)
@@ -2166,7 +2176,7 @@
                         json_variant_dump(v, arg_json_format_flags, NULL, NULL);
 
                 } else if (arg_verbose) {
-                        (void) pager_open(arg_pager_flags);
+                        pager_open(arg_pager_flags);
 
                         r = sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY);
                         if (r < 0)
@@ -2243,7 +2253,7 @@
         if (r < 0)
                 return log_oom();
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         printf("%s [OPTIONS...] COMMAND ...\n\n"
                "%sIntrospect the D-Bus IPC bus.%s\n"
@@ -2525,7 +2535,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/busctl/meson.build b/src/busctl/meson.build
index aacd0b2..e3611b7 100644
--- a/src/busctl/meson.build
+++ b/src/busctl/meson.build
@@ -2,5 +2,10 @@
 
 busctl_sources = files(
         'busctl-introspect.c',
-        'busctl-introspect.h',
-        'busctl.c')
+        'busctl.c',
+)
+
+tests += [
+        [files('test-busctl-introspect.c',
+               'busctl-introspect.c')],
+]
diff --git a/src/busctl/test-busctl-introspect.c b/src/busctl/test-busctl-introspect.c
new file mode 100644
index 0000000..859ca71
--- /dev/null
+++ b/src/busctl/test-busctl-introspect.c
@@ -0,0 +1,364 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "busctl-introspect.h"
+#include "set.h"
+#include "strv.h"
+#include "tests.h"
+
+static const char *xml_root =
+        "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+                  "<node>\n"
+                  " <interface name=\"org.freedesktop.DBus.Peer\">\n"
+                  "  <method name=\"Ping\"/>\n"
+                  "  <method name=\"GetMachineId\">\n"
+                  "   <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
+                  "  <method name=\"Introspect\">\n"
+                  "   <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Properties\">\n"
+                  "  <method name=\"Get\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"out\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"GetAll\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"Set\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"in\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <signal name=\"PropertiesChanged\">\n"
+                  "   <arg type=\"s\" name=\"interface\"/>\n"
+                  "   <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"
+                  "   <arg type=\"as\" name=\"invalidated_properties\"/>\n"
+                  "  </signal>\n"
+                  " </interface>\n"
+                  " <node name=\"org\"/>\n"
+                  "</node>\n";
+
+static const char *xml_org =
+        "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+                  "<node>\n"
+                  " <interface name=\"org.freedesktop.DBus.Peer\">\n"
+                  "  <method name=\"Ping\"/>\n"
+                  "  <method name=\"GetMachineId\">\n"
+                  "   <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
+                  "  <method name=\"Introspect\">\n"
+                  "   <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Properties\">\n"
+                  "  <method name=\"Get\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"out\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"GetAll\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"Set\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"in\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <signal name=\"PropertiesChanged\">\n"
+                  "   <arg type=\"s\" name=\"interface\"/>\n"
+                  "   <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"
+                  "   <arg type=\"as\" name=\"invalidated_properties\"/>\n"
+                  "  </signal>\n"
+                  " </interface>\n"
+                  " <node name=\"freedesktop\"/>\n"
+                  "</node>\n";
+
+static const char *xml_org_freedesktop =
+        "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+                  "<node>\n"
+                  " <interface name=\"org.freedesktop.DBus.Peer\">\n"
+                  "  <method name=\"Ping\"/>\n"
+                  "  <method name=\"GetMachineId\">\n"
+                  "   <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
+                  "  <method name=\"Introspect\">\n"
+                  "   <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Properties\">\n"
+                  "  <method name=\"Get\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"out\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"GetAll\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"Set\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"in\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <signal name=\"PropertiesChanged\">\n"
+                  "   <arg type=\"s\" name=\"interface\"/>\n"
+                  "   <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"
+                  "   <arg type=\"as\" name=\"invalidated_properties\"/>\n"
+                  "  </signal>\n"
+                  " </interface>\n"
+                  " <node name=\"LogControl1\"/>\n"
+                  " <node name=\"network1\"/>\n"
+                  "</node>\n";
+
+static const char *xml_org_freedesktop_LogControl1 =
+        "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+                  "<node>\n"
+                  " <interface name=\"org.freedesktop.DBus.Peer\">\n"
+                  "  <method name=\"Ping\"/>\n"
+                  "  <method name=\"GetMachineId\">\n"
+                  "   <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
+                  "  <method name=\"Introspect\">\n"
+                  "   <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Properties\">\n"
+                  "  <method name=\"Get\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"out\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"GetAll\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"Set\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"in\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <signal name=\"PropertiesChanged\">\n"
+                  "   <arg type=\"s\" name=\"interface\"/>\n"
+                  "   <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"
+                  "   <arg type=\"as\" name=\"invalidated_properties\"/>\n"
+                  "  </signal>\n"
+                  " </interface>\n"
+                  "<interface name=\"org.freedesktop.LogControl1\">\n"
+                  "  <property name=\"LogLevel\" type=\"s\" access=\"readwrite\">\n"
+                  "   <annotation name=\"org.freedesktop.DBus.Property.EmitsChangedSignal\" value=\"false\"/>\n"
+                  "   <annotation name=\"org.freedesktop.systemd1.Privileged\" value=\"true\"/>\n"
+                  "  </property>\n"
+                  "  <property name=\"LogTarget\" type=\"s\" access=\"readwrite\">\n"
+                  "   <annotation name=\"org.freedesktop.DBus.Property.EmitsChangedSignal\" value=\"false\"/>\n"
+                  "   <annotation name=\"org.freedesktop.systemd1.Privileged\" value=\"true\"/>\n"
+                  "  </property>\n"
+                  "  <property name=\"SyslogIdentifier\" type=\"s\" access=\"read\">\n"
+                  "   <annotation name=\"org.freedesktop.DBus.Property.EmitsChangedSignal\" value=\"false\"/>\n"
+                  "  </property>\n"
+                  " </interface>\n"
+                  "</node>\n";
+
+static const char *xml_org_freedesktop_network1 =
+        "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+                  "<node>\n"
+                  " <interface name=\"org.freedesktop.DBus.Peer\">\n"
+                  "  <method name=\"Ping\"/>\n"
+                  "  <method name=\"GetMachineId\">\n"
+                  "   <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
+                  "  <method name=\"Introspect\">\n"
+                  "   <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Properties\">\n"
+                  "  <method name=\"Get\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"out\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"GetAll\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"Set\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"in\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <signal name=\"PropertiesChanged\">\n"
+                  "   <arg type=\"s\" name=\"interface\"/>\n"
+                  "   <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"
+                  "   <arg type=\"as\" name=\"invalidated_properties\"/>\n"
+                  "  </signal>\n"
+                  " </interface>\n"
+                  " <node name=\"network\"/>\n"
+                  "</node>\n";
+
+static const char *xml_org_freedesktop_network1_network =
+        "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+                  "<node>\n"
+                  " <interface name=\"org.freedesktop.DBus.Peer\">\n"
+                  "  <method name=\"Ping\"/>\n"
+                  "  <method name=\"GetMachineId\">\n"
+                  "   <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
+                  "  <method name=\"Introspect\">\n"
+                  "   <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Properties\">\n"
+                  "  <method name=\"Get\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"out\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"GetAll\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"Set\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"in\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <signal name=\"PropertiesChanged\">\n"
+                  "   <arg type=\"s\" name=\"interface\"/>\n"
+                  "   <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"
+                  "   <arg type=\"as\" name=\"invalidated_properties\"/>\n"
+                  "  </signal>\n"
+                  " </interface>\n"
+                  " <node name=\"0\"/>\n"
+                  " <node name=\"1\"/>\n"
+                  " <node name=\"2\"/>\n"
+                  " <node name=\"3\"/>\n"
+                  " <node name=\"4\"/>\n"
+                  " <node name=\"5\"/>\n"
+                  " <node name=\"6\"/>\n"
+                  " <node name=\"7\"/>\n"
+                  " <node name=\"8\"/>\n"
+                  " <node name=\"9\"/>\n"
+                  " <node name=\"10\"/>\n"
+                  " <node name=\"11\"/>\n"
+                  " <node name=\"12\"/>\n"
+                  " <node name=\"13\"/>\n"
+                  " <node name=\"14\"/>\n"
+                  " <node name=\"15\"/>\n"
+                  " <node name=\"16\"/>\n"
+                  " <node name=\"17\"/>\n"
+                  " <node name=\"18\"/>\n"
+                  " <node name=\"19\"/>\n"
+                  " <node name=\"20\"/>\n"
+                  "</node>\n";
+
+static const char *xml_org_freedesktop_network1_network_unsigned =
+        "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+                  "<node>\n"
+                  " <interface name=\"org.freedesktop.DBus.Peer\">\n"
+                  "  <method name=\"Ping\"/>\n"
+                  "  <method name=\"GetMachineId\">\n"
+                  "   <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
+                  "  <method name=\"Introspect\">\n"
+                  "   <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+                  "  </method>\n"
+                  " </interface>\n"
+                  " <interface name=\"org.freedesktop.DBus.Properties\">\n"
+                  "  <method name=\"Get\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"out\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"GetAll\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n"
+                  "  </method>\n"
+                  "  <method name=\"Set\">\n"
+                  "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"
+                  "   <arg name=\"value\" direction=\"in\" type=\"v\"/>\n"
+                  "  </method>\n"
+                  "  <signal name=\"PropertiesChanged\">\n"
+                  "   <arg type=\"s\" name=\"interface\"/>\n"
+                  "   <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"
+                  "   <arg type=\"as\" name=\"invalidated_properties\"/>\n"
+                  "  </signal>\n"
+                  " </interface>\n"
+                  " <node name=\"hoge\"/>\n"
+                  "</node>\n";
+
+static int on_path(const char *path, void *userdata) {
+        Set *paths = userdata;
+
+        assert_se(paths);
+        assert_se(set_put_strdup(&paths, path) >= 0);
+
+        return 0;
+}
+
+TEST(introspect_on_path) {
+        static const XMLIntrospectOps ops = {
+                .on_path = on_path,
+        };
+        _cleanup_strv_free_ char **expected = NULL;
+        _cleanup_set_free_ Set *paths = NULL;
+        _cleanup_free_ char **l = NULL;
+
+        assert_se(set_put_strdup(&paths, "/") > 0);
+
+        log_debug("/* parse_xml_introspect(\"/\") */");
+        assert_se(parse_xml_introspect("/", xml_root, &ops, paths) >= 0);
+        log_debug("/* parse_xml_introspect(\"/org\") */");
+        assert_se(parse_xml_introspect("/org", xml_org, &ops, paths) >= 0);
+        log_debug("/* parse_xml_introspect(\"/org/freedesktop\") */");
+        assert_se(parse_xml_introspect("/org/freedesktop", xml_org_freedesktop, &ops, paths) >= 0);
+        log_debug("/* parse_xml_introspect(\"/org/freedesktop/LogControl1\") */");
+        assert_se(parse_xml_introspect("/org/freedesktop/LogControl1", xml_org_freedesktop_LogControl1, &ops, paths) >= 0);
+        log_debug("/* parse_xml_introspect(\"/org/freedesktop/network1\") */");
+        assert_se(parse_xml_introspect("/org/freedesktop/network1", xml_org_freedesktop_network1, &ops, paths) >= 0);
+        log_debug("/* parse_xml_introspect(\"/org/freedesktop/network1/network\") */");
+        assert_se(parse_xml_introspect("/org/freedesktop/network1/network", xml_org_freedesktop_network1_network, &ops, paths) >= 0);
+        for (unsigned i = 0; i <= 20; i++) {
+                _cleanup_free_ char *path = NULL;
+
+                assert_se(asprintf(&path, "/org/freedesktop/network1/network/%u", i) >= 0);
+                log_debug("/* parse_xml_introspect(\"%s\") */", path);
+                assert_se(parse_xml_introspect(path, xml_org_freedesktop_network1_network_unsigned, &ops, paths) >= 0);
+        }
+
+        assert_se(l = set_get_strv(paths));
+        strv_sort(l);
+
+        assert_se(strv_extend(&expected, "/") >= 0);
+        assert_se(strv_extend(&expected, "/org") >= 0);
+        assert_se(strv_extend(&expected, "/org/freedesktop") >= 0);
+        assert_se(strv_extend(&expected, "/org/freedesktop/LogControl1") >= 0);
+        assert_se(strv_extend(&expected, "/org/freedesktop/network1") >= 0);
+        assert_se(strv_extend(&expected, "/org/freedesktop/network1/network") >= 0);
+        for (unsigned i = 0; i <= 20; i++) {
+                assert_se(strv_extendf(&expected, "/org/freedesktop/network1/network/%u", i) >= 0);
+                assert_se(strv_extendf(&expected, "/org/freedesktop/network1/network/%u/hoge", i) >= 0);
+        }
+
+        strv_sort(expected);
+        assert_se(strv_equal(l, expected));
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c
index f39aa53..a6ec632 100644
--- a/src/cgls/cgls.c
+++ b/src/cgls/cgls.c
@@ -8,6 +8,7 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-util.h"
 #include "cgroup-show.h"
 #include "cgroup-util.h"
@@ -16,15 +17,14 @@
 #include "main-func.h"
 #include "output-mode.h"
 #include "pager.h"
+#include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "strv.h"
 #include "unit-name.h"
-#include "util.h"
 
 static PagerFlags arg_pager_flags = 0;
-static bool arg_kernel_threads = false;
-static bool arg_all = false;
+static OutputFlags arg_output_flags = OUTPUT_CGROUP_XATTRS | OUTPUT_CGROUP_ID;
 
 static enum {
         SHOW_UNIT_NONE,
@@ -54,6 +54,8 @@
                "  -a --all            Show all groups, including empty\n"
                "  -u --unit           Show the subtrees of specified system units\n"
                "     --user-unit      Show the subtrees of specified user units\n"
+               "     --xattr=BOOL     Show cgroup extended attributes\n"
+               "     --cgroup-id=BOOL Show cgroup ID\n"
                "  -l --full           Do not ellipsize output\n"
                "  -k                  Include kernel threads in output\n"
                "  -M --machine=       Show container\n"
@@ -70,6 +72,8 @@
                 ARG_NO_PAGER = 0x100,
                 ARG_VERSION,
                 ARG_USER_UNIT,
+                ARG_XATTR,
+                ARG_CGROUP_ID,
         };
 
         static const struct option options[] = {
@@ -81,10 +85,12 @@
                 { "machine",   required_argument, NULL, 'M'           },
                 { "unit",      optional_argument, NULL, 'u'           },
                 { "user-unit", optional_argument, NULL, ARG_USER_UNIT },
+                { "xattr",     required_argument, NULL, ARG_XATTR     },
+                { "cgroup-id", required_argument, NULL, ARG_CGROUP_ID },
                 {}
         };
 
-        int c;
+        int c, r;
 
         assert(argc >= 1);
         assert(argv);
@@ -104,7 +110,7 @@
                         break;
 
                 case 'a':
-                        arg_all = true;
+                        arg_output_flags |= OUTPUT_SHOW_ALL;
                         break;
 
                 case 'u':
@@ -130,18 +136,34 @@
                         break;
 
                 case 'k':
-                        arg_kernel_threads = true;
+                        arg_output_flags |= OUTPUT_KERNEL_THREADS;
                         break;
 
                 case 'M':
                         arg_machine = optarg;
                         break;
 
+                case ARG_XATTR:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --xattr= value: %s", optarg);
+
+                        SET_FLAG(arg_output_flags, OUTPUT_CGROUP_XATTRS, r);
+                        break;
+
+                case ARG_CGROUP_ID:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --cgroup-id= value: %s", optarg);
+
+                        SET_FLAG(arg_output_flags, OUTPUT_CGROUP_ID, r);
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_machine && arg_show_unit != SHOW_UNIT_NONE)
@@ -161,7 +183,7 @@
 }
 
 static int run(int argc, char *argv[]) {
-        int r, output_flags;
+        int r;
 
         log_setup();
 
@@ -169,26 +191,27 @@
         if (r <= 0)
                 return r;
 
-        r = pager_open(arg_pager_flags);
-        if (r > 0 && arg_full < 0)
+        pager_open(arg_pager_flags);
+        if (arg_full < 0 && pager_have())
                 arg_full = true;
 
-        output_flags =
-                arg_all * OUTPUT_SHOW_ALL |
-                (arg_full > 0) * OUTPUT_FULL_WIDTH |
-                arg_kernel_threads * OUTPUT_KERNEL_THREADS;
+        if (arg_full > 0)
+                arg_output_flags |= OUTPUT_FULL_WIDTH;
 
         if (arg_names) {
                 _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
                 _cleanup_free_ char *root = NULL;
-                char **name;
 
                 STRV_FOREACH(name, arg_names) {
                         int q;
 
                         if (arg_show_unit != SHOW_UNIT_NONE) {
                                 /* Command line arguments are unit names */
-                                _cleanup_free_ char *cgroup = NULL;
+                                _cleanup_free_ char *cgroup = NULL, *unit_name = NULL;
+
+                                r = unit_name_mangle(*name, UNIT_NAME_MANGLE_WARN, &unit_name);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to mangle unit name: %m");
 
                                 if (!bus) {
                                         /* Connect to the bus only if necessary */
@@ -196,30 +219,29 @@
                                                                           arg_show_unit == SHOW_UNIT_USER,
                                                                           &bus);
                                         if (r < 0)
-                                                return bus_log_connect_error(r);
+                                                return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL);
                                 }
 
-                                q = show_cgroup_get_unit_path_and_warn(bus, *name, &cgroup);
+                                q = show_cgroup_get_unit_path_and_warn(bus, unit_name, &cgroup);
                                 if (q < 0)
                                         goto failed;
 
                                 if (isempty(cgroup)) {
-                                        log_warning("Unit %s not found.", *name);
-                                        q = -ENOENT;
+                                        q = log_warning_errno(SYNTHETIC_ERRNO(ENOENT), "Unit %s not found.", unit_name);
                                         goto failed;
                                 }
 
-                                printf("Unit %s (%s):\n", *name, cgroup);
+                                printf("Unit %s (%s):\n", unit_name, cgroup);
                                 fflush(stdout);
 
-                                q = show_cgroup_by_path(cgroup, NULL, 0, output_flags);
+                                q = show_cgroup_by_path(cgroup, NULL, 0, arg_output_flags);
 
                         } else if (path_startswith(*name, "/sys/fs/cgroup")) {
 
                                 printf("Directory %s:\n", *name);
                                 fflush(stdout);
 
-                                q = show_cgroup_by_path(*name, NULL, 0, output_flags);
+                                q = show_cgroup_by_path(*name, NULL, 0, arg_output_flags);
                         } else {
                                 _cleanup_free_ char *c = NULL, *p = NULL, *j = NULL;
                                 const char *controller, *path;
@@ -250,7 +272,7 @@
 
                                 show_cg_info(controller, path);
 
-                                q = show_cgroup(controller, path, NULL, 0, output_flags);
+                                q = show_cgroup(controller, path, NULL, 0, arg_output_flags);
                         }
 
                 failed:
@@ -272,7 +294,7 @@
                                 printf("Working directory %s:\n", cwd);
                                 fflush(stdout);
 
-                                r = show_cgroup_by_path(cwd, NULL, 0, output_flags);
+                                r = show_cgroup_by_path(cwd, NULL, 0, arg_output_flags);
                                 done = true;
                         }
                 }
@@ -287,7 +309,7 @@
                         show_cg_info(SYSTEMD_CGROUP_CONTROLLER, root);
 
                         printf("-.slice\n");
-                        r = show_cgroup(SYSTEMD_CGROUP_CONTROLLER, root, NULL, 0, output_flags);
+                        r = show_cgroup(SYSTEMD_CGROUP_CONTROLLER, root, NULL, 0, arg_output_flags);
                 }
         }
         if (r < 0)
diff --git a/src/cgroups-agent/cgroups-agent.c b/src/cgroups-agent/cgroups-agent.c
index 071cba3..16c5a2a 100644
--- a/src/cgroups-agent/cgroups-agent.c
+++ b/src/cgroups-agent/cgroups-agent.c
@@ -13,9 +13,16 @@
                 .un.sun_path = "/run/systemd/cgroups-agent",
         };
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         ssize_t n;
         size_t l;
+        int r;
+
+        r = make_null_stdio();
+        if (r < 0) {
+                log_error_errno(r, "Failed to connect stdin/stdout/stderr with /dev/null: %m");
+                return EXIT_FAILURE;
+        }
 
         if (argc != 2) {
                 log_error("Incorrect number of arguments.");
diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
index 9cc2f27..5d82d65 100644
--- a/src/cgtop/cgtop.c
+++ b/src/cgtop/cgtop.c
@@ -10,6 +10,7 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-error.h"
 #include "bus-util.h"
 #include "cgroup-show.h"
@@ -55,6 +56,13 @@
         uint64_t io_input_bps, io_output_bps;
 } Group;
 
+/* Counted objects, enum order matters */
+typedef enum PidsCount {
+        COUNT_USERSPACE_PROCESSES,      /* least */
+        COUNT_ALL_PROCESSES,
+        COUNT_PIDS,                     /* most, requires pids controller */
+} PidsCount;
+
 static unsigned arg_depth = 3;
 static unsigned arg_iterations = UINT_MAX;
 static bool arg_batch = false;
@@ -65,11 +73,7 @@
 static bool arg_recursive = true;
 static bool arg_recursive_unset = false;
 
-static enum {
-        COUNT_PIDS,
-        COUNT_USERSPACE_PROCESSES,
-        COUNT_ALL_PROCESSES,
-} arg_count = COUNT_PIDS;
+static PidsCount arg_count = COUNT_PIDS;
 
 static enum {
         ORDER_PATH,
@@ -95,22 +99,30 @@
 
 static const char *maybe_format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy) {
         if (arg_raw) {
-               snprintf(buf, l, USEC_FMT, t);
+               (void) snprintf(buf, l, USEC_FMT, t);
                return buf;
         }
         return format_timespan(buf, l, t, accuracy);
 }
 
+#define BUFSIZE1 CONST_MAX(FORMAT_TIMESPAN_MAX, DECIMAL_STR_MAX(usec_t))
+#define MAYBE_FORMAT_TIMESPAN(t, accuracy) \
+        maybe_format_timespan((char[BUFSIZE1]){}, BUFSIZE1, t, accuracy)
+
 static const char *maybe_format_bytes(char *buf, size_t l, bool is_valid, uint64_t t) {
         if (!is_valid)
                 return "-";
         if (arg_raw) {
-                snprintf(buf, l, "%" PRIu64, t);
+                (void) snprintf(buf, l, "%" PRIu64, t);
                 return buf;
         }
         return format_bytes(buf, l, t);
 }
 
+#define BUFSIZE2 CONST_MAX(FORMAT_BYTES_MAX, DECIMAL_STR_MAX(uint64_t))
+#define MAYBE_FORMAT_BYTES(is_valid, t) \
+        maybe_format_bytes((char[BUFSIZE2]){}, BUFSIZE2, is_valid, t)
+
 static bool is_root_cgroup(const char *path) {
 
         /* Returns true if the specified path belongs to the root cgroup. The root cgroup is special on cgroup v2 as it
@@ -502,7 +514,6 @@
 }
 
 static int refresh(const char *root, Hashmap *a, Hashmap *b, unsigned iteration) {
-        const char *c;
         int r;
 
         FOREACH_STRING(c, SYSTEMD_CGROUP_CONTROLLER, "cpu", "cpuacct", "memory", "io", "blkio", "pids") {
@@ -595,8 +606,7 @@
         Group *g;
         Group **array;
         signed path_columns;
-        unsigned rows, n = 0, j, maxtcpu = 0, maxtpath = 3; /* 3 for ellipsize() to work properly */
-        char buffer[MAX4(21U, FORMAT_BYTES_MAX, FORMAT_TIMESPAN_MAX, DECIMAL_STR_MAX(usec_t))];
+        unsigned rows, n = 0, maxtcpu = 0, maxtpath = 3; /* 3 for ellipsize() to work properly */
 
         assert(a);
 
@@ -612,43 +622,38 @@
         typesafe_qsort(array, n, group_compare);
 
         /* Find the longest names in one run */
-        for (j = 0; j < n; j++) {
-                unsigned cputlen, pathtlen;
-
-                maybe_format_timespan(buffer, sizeof(buffer), (usec_t) (array[j]->cpu_usage / NSEC_PER_USEC), 0);
-                cputlen = strlen(buffer);
-                maxtcpu = MAX(maxtcpu, cputlen);
-
-                pathtlen = strlen(array[j]->path);
-                maxtpath = MAX(maxtpath, pathtlen);
+        for (unsigned j = 0; j < n; j++) {
+                maxtcpu = MAX(maxtcpu,
+                              strlen(MAYBE_FORMAT_TIMESPAN((usec_t) (array[j]->cpu_usage / NSEC_PER_USEC), 0)));
+                maxtpath = MAX(maxtpath,
+                               strlen(array[j]->path));
         }
 
-        if (arg_cpu_type == CPU_PERCENT)
-                xsprintf(buffer, "%6s", "%CPU");
-        else
-                xsprintf(buffer, "%*s", maxtcpu, "CPU Time");
-
         rows = lines();
         if (rows <= 10)
                 rows = 10;
 
         if (on_tty()) {
                 const char *on, *off;
+                int cpu_len = arg_cpu_type == CPU_PERCENT ? 6 : maxtcpu;
 
-                path_columns = columns() - 36 - strlen(buffer);
+                path_columns = columns() - 36 - cpu_len;
                 if (path_columns < 10)
                         path_columns = 10;
 
                 on = ansi_highlight_underline();
                 off = ansi_underline();
 
-                printf("%s%s%-*s%s %s%7s%s %s%s%s %s%8s%s %s%8s%s %s%8s%s%s\n",
+                printf("%s%s%-*s%s %s%7s%s %s%*s%s %s%8s%s %s%8s%s %s%8s%s%s\n",
                        ansi_underline(),
                        arg_order == ORDER_PATH ? on : "", path_columns, "Control Group",
                        arg_order == ORDER_PATH ? off : "",
-                       arg_order == ORDER_TASKS ? on : "", arg_count == COUNT_PIDS ? "Tasks" : arg_count == COUNT_USERSPACE_PROCESSES ? "Procs" : "Proc+",
+                       arg_order == ORDER_TASKS ? on : "",
+                       arg_count == COUNT_PIDS ? "Tasks" : arg_count == COUNT_USERSPACE_PROCESSES ? "Procs" : "Proc+",
                        arg_order == ORDER_TASKS ? off : "",
-                       arg_order == ORDER_CPU ? on : "", buffer,
+                       arg_order == ORDER_CPU ? on : "",
+                       cpu_len,
+                       arg_cpu_type == CPU_PERCENT ? "%CPU" : "CPU Time",
                        arg_order == ORDER_CPU ? off : "",
                        arg_order == ORDER_MEMORY ? on : "", "Memory",
                        arg_order == ORDER_MEMORY ? off : "",
@@ -660,7 +665,7 @@
         } else
                 path_columns = maxtpath;
 
-        for (j = 0; j < n; j++) {
+        for (unsigned j = 0; j < n; j++) {
                 _cleanup_free_ char *ellipsized = NULL;
                 const char *path;
 
@@ -684,11 +689,13 @@
                         else
                                 fputs("      -", stdout);
                 } else
-                        printf(" %*s", maxtcpu, maybe_format_timespan(buffer, sizeof(buffer), (usec_t) (g->cpu_usage / NSEC_PER_USEC), 0));
+                        printf(" %*s",
+                               (int) maxtcpu,
+                               MAYBE_FORMAT_TIMESPAN((usec_t) (g->cpu_usage / NSEC_PER_USEC), 0));
 
-                printf(" %8s", maybe_format_bytes(buffer, sizeof(buffer), g->memory_valid, g->memory));
-                printf(" %8s", maybe_format_bytes(buffer, sizeof(buffer), g->io_valid, g->io_input_bps));
-                printf(" %8s", maybe_format_bytes(buffer, sizeof(buffer), g->io_valid, g->io_output_bps));
+                printf(" %8s", MAYBE_FORMAT_BYTES(g->memory_valid, g->memory));
+                printf(" %8s", MAYBE_FORMAT_BYTES(g->io_valid, g->io_input_bps));
+                printf(" %8s", MAYBE_FORMAT_BYTES(g->io_valid, g->io_output_bps));
 
                 putchar('\n');
         }
@@ -883,7 +890,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind == argc - 1)
@@ -912,6 +919,7 @@
         usec_t last_refresh = 0;
         bool quit = false, immediate_refresh = false;
         _cleanup_free_ char *root = NULL;
+        PidsCount possible_count;
         CGroupMask mask;
         int r;
 
@@ -925,7 +933,9 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to determine supported controllers: %m");
 
-        arg_count = (mask & CGROUP_MASK_PIDS) ? COUNT_PIDS : COUNT_USERSPACE_PROCESSES;
+        /* honor user selection unless pids controller is unavailable */
+        possible_count = (mask & CGROUP_MASK_PIDS) ? COUNT_PIDS : COUNT_ALL_PROCESSES;
+        arg_count = MIN(possible_count, arg_count);
 
         if (arg_recursive_unset && arg_count == COUNT_PIDS)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -949,7 +959,6 @@
         while (!quit) {
                 usec_t t;
                 char key;
-                char h[FORMAT_TIMESPAN_MAX];
 
                 t = now(CLOCK_MONOTONIC);
 
@@ -1055,7 +1064,7 @@
                 case '+':
                         arg_delay = usec_add(arg_delay, arg_delay < USEC_PER_SEC ? USEC_PER_MSEC * 250 : USEC_PER_SEC);
 
-                        fprintf(stdout, "\nIncreased delay to %s.", format_timespan(h, sizeof(h), arg_delay, 0));
+                        fprintf(stdout, "\nIncreased delay to %s.", FORMAT_TIMESPAN(arg_delay, 0));
                         fflush(stdout);
                         sleep(1);
                         break;
@@ -1066,7 +1075,7 @@
                         else
                                 arg_delay = usec_sub_unsigned(arg_delay, arg_delay < USEC_PER_MSEC * 1250 ? USEC_PER_MSEC * 250 : USEC_PER_SEC);
 
-                        fprintf(stdout, "\nDecreased delay to %s.", format_timespan(h, sizeof(h), arg_delay, 0));
+                        fprintf(stdout, "\nDecreased delay to %s.", FORMAT_TIMESPAN(arg_delay, 0));
                         fflush(stdout);
                         sleep(1);
                         break;
@@ -1086,7 +1095,7 @@
 
                 default:
                         if (key < ' ')
-                                fprintf(stdout, "\nUnknown key '\\x%x'. Ignoring.", key);
+                                fprintf(stdout, "\nUnknown key '\\x%x'. Ignoring.", (unsigned) key);
                         else
                                 fprintf(stdout, "\nUnknown key '%c'. Ignoring.", key);
                         fflush(stdout);
diff --git a/src/core/apparmor-setup.c b/src/core/apparmor-setup.c
index 304a3e6..3426a10 100644
--- a/src/core/apparmor-setup.c
+++ b/src/core/apparmor-setup.c
@@ -24,7 +24,6 @@
 #if HAVE_APPARMOR
         _cleanup_(aa_policy_cache_unrefp) aa_policy_cache *policy_cache = NULL;
         _cleanup_(aa_features_unrefp) aa_features *features = NULL;
-        const char *current_file;
         _cleanup_free_ char *current_profile = NULL, *cache_dir_path = NULL;
         int r;
 
diff --git a/src/core/audit-fd.c b/src/core/audit-fd.c
index 097bea3..6674fa8 100644
--- a/src/core/audit-fd.c
+++ b/src/core/audit-fd.c
@@ -12,7 +12,6 @@
 #include "capability-util.h"
 #include "fd-util.h"
 #include "log.h"
-#include "util.h"
 
 static bool initialized = false;
 static int audit_fd;
@@ -20,7 +19,7 @@
 int get_audit_fd(void) {
 
         if (!initialized) {
-                if (have_effective_cap(CAP_AUDIT_WRITE) == 0) {
+                if (have_effective_cap(CAP_AUDIT_WRITE) <= 0) {
                         audit_fd = -EPERM;
                         initialized = true;
 
diff --git a/src/core/automount.c b/src/core/automount.c
index edc9588..4cffca4 100644
--- a/src/core/automount.c
+++ b/src/core/automount.c
@@ -19,9 +19,10 @@
 #include "dbus-unit.h"
 #include "fd-util.h"
 #include "format-util.h"
+#include "fstab-util.h"
 #include "io-util.h"
 #include "label.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mount.h"
 #include "mountpoint-util.h"
@@ -68,10 +69,11 @@
 static void automount_init(Unit *u) {
         Automount *a = AUTOMOUNT(u);
 
+        assert(a);
         assert(u);
         assert(u->load_state == UNIT_STUB);
 
-        a->pipe_fd = -1;
+        a->pipe_fd = -EBADF;
         a->directory_mode = 0755;
         UNIT(a)->ignore_on_isolate = true;
 }
@@ -109,6 +111,7 @@
         unmount_autofs(a);
 
         a->where = mfree(a->where);
+        a->extra_options = mfree(a->extra_options);
 
         a->tokens = set_free(a->tokens);
         a->expire_tokens = set_free(a->expire_tokens);
@@ -131,12 +134,13 @@
 
 static int automount_add_mount_dependencies(Automount *a) {
         _cleanup_free_ char *parent = NULL;
+        int r;
 
         assert(a);
 
-        parent = dirname_malloc(a->where);
-        if (!parent)
-                return -ENOMEM;
+        r = path_extract_directory(a->where, &parent);
+        if (r < 0)
+                return r;
 
         return unit_require_mounts_for(UNIT(a), parent, UNIT_DEPENDENCY_IMPLICIT);
 }
@@ -168,6 +172,15 @@
 }
 
 static int automount_verify(Automount *a) {
+        static const char *const reserved_options[] = {
+                "fd\0",
+                "pgrp\0",
+                "minproto\0",
+                "maxproto\0",
+                "direct\0",
+                "indirect\0",
+        };
+
         _cleanup_free_ char *e = NULL;
         int r;
 
@@ -184,6 +197,14 @@
         if (!unit_has_name(UNIT(a), e))
                 return log_unit_error_errno(UNIT(a), SYNTHETIC_ERRNO(ENOEXEC), "Where= setting doesn't match unit name. Refusing.");
 
+        for (size_t i = 0; i < ELEMENTSOF(reserved_options); i++)
+                if (fstab_test_option(a->extra_options, reserved_options[i]))
+                        return log_unit_error_errno(
+                                UNIT(a),
+                                SYNTHETIC_ERRNO(ENOEXEC),
+                                "ExtraOptions= setting may not contain reserved option %s.",
+                                reserved_options[i]);
+
         return 0;
 }
 
@@ -305,7 +326,6 @@
 }
 
 static void automount_dump(Unit *u, FILE *f, const char *prefix) {
-        char time_string[FORMAT_TIMESPAN_MAX];
         Automount *a = AUTOMOUNT(u);
 
         assert(a);
@@ -314,13 +334,15 @@
                 "%sAutomount State: %s\n"
                 "%sResult: %s\n"
                 "%sWhere: %s\n"
+                "%sExtraOptions: %s\n"
                 "%sDirectoryMode: %04o\n"
                 "%sTimeoutIdleUSec: %s\n",
                 prefix, automount_state_to_string(a->state),
                 prefix, automount_result_to_string(a->result),
                 prefix, a->where,
+                prefix, a->extra_options,
                 prefix, a->directory_mode,
-                prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX, a->timeout_idle_usec, USEC_PER_SEC));
+                prefix, FORMAT_TIMESPAN(a->timeout_idle_usec, USEC_PER_SEC));
 }
 
 static void automount_enter_dead(Automount *a, AutomountResult f) {
@@ -353,7 +375,7 @@
                 return -errno;
         }
 
-        log_debug("Autofs kernel version %i.%i", param.ver_major, param.ver_minor);
+        log_debug("Autofs kernel version %u.%u", param.ver_major, param.ver_minor);
 
         return m->dev_autofs_fd;
 }
@@ -366,11 +388,11 @@
         assert(where);
 
         l = sizeof(struct autofs_dev_ioctl) + strlen(where) + 1;
-        param = alloca(l);
+        param = alloca_safe(l);
 
         init_autofs_dev_ioctl(param);
         param->size = l;
-        param->ioctlfd = -1;
+        param->ioctlfd = -EBADF;
         param->openmount.devid = devid;
         strcpy(param->path, where);
 
@@ -407,7 +429,7 @@
 
         minor = param.protosubver.sub_version;
 
-        log_debug("Autofs protocol version %i.%i", major, minor);
+        log_debug("Autofs protocol version %u.%u", major, minor);
         return 0;
 }
 
@@ -426,10 +448,7 @@
                 /* Convert to seconds, rounding up. */
                 param.timeout.timeout = DIV_ROUND_UP(usec, USEC_PER_SEC);
 
-        if (ioctl(dev_autofs_fd, AUTOFS_DEV_IOCTL_TIMEOUT, &param) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(dev_autofs_fd, AUTOFS_DEV_IOCTL_TIMEOUT, &param));
 }
 
 static int autofs_send_ready(int dev_autofs_fd, int ioctl_fd, uint32_t token, int status) {
@@ -447,14 +466,11 @@
         } else
                 param.ready.token = token;
 
-        if (ioctl(dev_autofs_fd, status ? AUTOFS_DEV_IOCTL_FAIL : AUTOFS_DEV_IOCTL_READY, &param) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(dev_autofs_fd, status ? AUTOFS_DEV_IOCTL_FAIL : AUTOFS_DEV_IOCTL_READY, &param));
 }
 
 static int automount_send_ready(Automount *a, Set *tokens, int status) {
-        _cleanup_close_ int ioctl_fd = -1;
+        _cleanup_close_ int ioctl_fd = -EBADF;
         unsigned token;
         int r;
 
@@ -556,11 +572,10 @@
 }
 
 static void automount_enter_waiting(Automount *a) {
-        _cleanup_close_ int ioctl_fd = -1;
-        int p[2] = { -1, -1 };
+        _cleanup_close_ int ioctl_fd = -EBADF;
+        int pipe_fd[2] = PIPE_EBADF;
         char name[STRLEN("systemd-") + DECIMAL_STR_MAX(pid_t) + 1];
-        char options[STRLEN("fd=,pgrp=,minproto=5,maxproto=5,direct")
-                     + DECIMAL_STR_MAX(int) + DECIMAL_STR_MAX(gid_t) + 1];
+        _cleanup_free_ char *options = NULL;
         bool mounted = false;
         int r, dev_autofs_fd;
         struct stat st;
@@ -585,15 +600,25 @@
                 goto fail;
         }
 
-        if (pipe2(p, O_CLOEXEC) < 0) {
+        if (pipe2(pipe_fd, O_CLOEXEC) < 0) {
                 r = -errno;
                 goto fail;
         }
-        r = fd_nonblock(p[0], true);
+        r = fd_nonblock(pipe_fd[0], true);
         if (r < 0)
                 goto fail;
 
-        xsprintf(options, "fd=%i,pgrp="PID_FMT",minproto=5,maxproto=5,direct", p[1], getpgrp());
+        if (asprintf(
+                    &options,
+                    "fd=%i,pgrp="PID_FMT",minproto=5,maxproto=5,direct%s%s",
+                    pipe_fd[1],
+                    getpgrp(),
+                    isempty(a->extra_options) ? "" : ",",
+                    strempty(a->extra_options)) < 0) {
+                r = -ENOMEM;
+                goto fail;
+        }
+
         xsprintf(name, "systemd-"PID_FMT, getpid_cached());
         r = mount_nofollow(name, a->where, "autofs", 0, options);
         if (r < 0)
@@ -601,7 +626,7 @@
 
         mounted = true;
 
-        p[1] = safe_close(p[1]);
+        pipe_fd[1] = safe_close(pipe_fd[1]);
 
         if (stat(a->where, &st) < 0) {
                 r = -errno;
@@ -622,13 +647,13 @@
         if (r < 0)
                 goto fail;
 
-        r = sd_event_add_io(UNIT(a)->manager->event, &a->pipe_event_source, p[0], EPOLLIN, automount_dispatch_io, a);
+        r = sd_event_add_io(UNIT(a)->manager->event, &a->pipe_event_source, pipe_fd[0], EPOLLIN, automount_dispatch_io, a);
         if (r < 0)
                 goto fail;
 
         (void) sd_event_source_set_description(a->pipe_event_source, "automount-io");
 
-        a->pipe_fd = p[0];
+        a->pipe_fd = pipe_fd[0];
         a->dev_id = st.st_dev;
 
         automount_set_state(a, AUTOMOUNT_WAITING);
@@ -638,7 +663,7 @@
 fail:
         log_unit_error_errno(UNIT(a), r, "Failed to initialize automounter: %m");
 
-        safe_close_pair(p);
+        safe_close_pair(pipe_fd);
 
         if (mounted) {
                 r = repeat_unmount(a->where, MNT_DETACH|UMOUNT_NOFOLLOW);
@@ -682,7 +707,7 @@
         if (!data)
                 return log_oom();
 
-        data->ioctl_fd = -1;
+        data->ioctl_fd = -EBADF;
 
         data->dev_autofs_fd = fcntl(UNIT(a)->manager->dev_autofs_fd, F_DUPFD_CLOEXEC, 3);
         if (data->dev_autofs_fd < 0)
@@ -814,12 +839,6 @@
         if (r < 0)
                 return r;
 
-        r = unit_test_start_limit(u);
-        if (r < 0) {
-                automount_enter_dead(a, AUTOMOUNT_FAILURE_START_LIMIT_HIT);
-                return r;
-        }
-
         r = unit_acquire_invocation_id(u);
         if (r < 0)
                 return r;
@@ -1022,7 +1041,7 @@
 
                 r = manager_add_job(UNIT(a)->manager, JOB_STOP, trigger, JOB_REPLACE, NULL, &error, NULL);
                 if (r < 0) {
-                        log_unit_warning(UNIT(a), "Failed to queue umount startup job: %s", bus_error_message(&error, r));
+                        log_unit_warning(UNIT(a), "Failed to queue unmount job: %s", bus_error_message(&error, r));
                         goto fail;
                 }
                 break;
@@ -1065,12 +1084,27 @@
         return supported;
 }
 
+static int automount_can_start(Unit *u) {
+        Automount *a = AUTOMOUNT(u);
+        int r;
+
+        assert(a);
+
+        r = unit_test_start_limit(u);
+        if (r < 0) {
+                automount_enter_dead(a, AUTOMOUNT_FAILURE_START_LIMIT_HIT);
+                return r;
+        }
+
+        return 1;
+}
+
 static const char* const automount_result_table[_AUTOMOUNT_RESULT_MAX] = {
-        [AUTOMOUNT_SUCCESS] = "success",
-        [AUTOMOUNT_FAILURE_RESOURCES] = "resources",
-        [AUTOMOUNT_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
+        [AUTOMOUNT_SUCCESS]                       = "success",
+        [AUTOMOUNT_FAILURE_RESOURCES]             = "resources",
+        [AUTOMOUNT_FAILURE_START_LIMIT_HIT]       = "start-limit-hit",
         [AUTOMOUNT_FAILURE_MOUNT_START_LIMIT_HIT] = "mount-start-limit-hit",
-        [AUTOMOUNT_FAILURE_UNMOUNTED] = "unmounted",
+        [AUTOMOUNT_FAILURE_UNMOUNTED]             = "unmounted",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(automount_result, AutomountResult);
@@ -1127,4 +1161,6 @@
                         [JOB_FAILED]     = "Failed to unset automount %s.",
                 },
         },
+
+        .can_start = automount_can_start,
 };
diff --git a/src/core/automount.h b/src/core/automount.h
index 91e6c57..e413f23 100644
--- a/src/core/automount.h
+++ b/src/core/automount.h
@@ -21,6 +21,7 @@
         AutomountState state, deserialized_state;
 
         char *where;
+        char *extra_options;
         usec_t timeout_idle_usec;
 
         int pipe_fd;
diff --git a/src/core/bpf-devices.c b/src/core/bpf-devices.c
index 4daa7f7..c79cda5 100644
--- a/src/core/bpf-devices.c
+++ b/src/core/bpf-devices.c
@@ -5,12 +5,12 @@
 
 #include "bpf-devices.h"
 #include "bpf-program.h"
+#include "devnum-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "nulstr-util.h"
 #include "parse-util.h"
 #include "path-util.h"
-#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 
@@ -22,7 +22,7 @@
         assert(acc);
 
         for (; *acc; acc++)
-                switch(*acc) {
+                switch (*acc) {
                 case 'r':
                         r |= BPF_DEVCG_ACC_READ;
                         break;
@@ -184,7 +184,7 @@
                             offsetof(struct bpf_cgroup_dev_ctx, minor)),
         };
 
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
         int r;
 
         assert(ret);
@@ -192,7 +192,7 @@
         if (policy == CGROUP_DEVICE_POLICY_AUTO && !allow_list)
                 return 0;
 
-        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_DEVICE, &prog);
+        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_DEVICE, "sd_devices", &prog);
         if (r < 0)
                 return log_error_errno(r, "Loading device control BPF program failed: %m");
 
@@ -208,7 +208,7 @@
 }
 
 int bpf_devices_apply_policy(
-                BPFProgram *prog,
+                BPFProgram **prog,
                 CGroupDevicePolicy policy,
                 bool allow_list,
                 const char *cgroup_path,
@@ -219,7 +219,8 @@
 
         /* This will assign *prog_installed if everything goes well. */
 
-        if (!prog)
+        assert(prog);
+        if (!*prog)
                 goto finish;
 
         const bool deny_everything = policy == CGROUP_DEVICE_POLICY_STRICT && !allow_list;
@@ -237,20 +238,20 @@
         };
 
         if (!deny_everything) {
-                r = bpf_program_add_instructions(prog, post_insn, ELEMENTSOF(post_insn));
+                r = bpf_program_add_instructions(*prog, post_insn, ELEMENTSOF(post_insn));
                 if (r < 0)
                         return log_error_errno(r, "Extending device control BPF program failed: %m");
 
                 /* Fixup PASS_JUMP_OFF jump offsets. */
-                for (size_t off = 0; off < prog->n_instructions; off++) {
-                        struct bpf_insn *ins = &prog->instructions[off];
+                for (size_t off = 0; off < (*prog)->n_instructions; off++) {
+                        struct bpf_insn *ins = &((*prog)->instructions[off]);
 
                         if (ins->code == (BPF_JMP | BPF_JA) && ins->off == PASS_JUMP_OFF)
-                                ins->off = prog->n_instructions - off - 1;
+                                ins->off = (*prog)->n_instructions - off - 1;
                 }
         }
 
-        r = bpf_program_add_instructions(prog, exit_insn, ELEMENTSOF(exit_insn));
+        r = bpf_program_add_instructions(*prog, exit_insn, ELEMENTSOF(exit_insn));
         if (r < 0)
                 return log_error_errno(r, "Extending device control BPF program failed: %m");
 
@@ -258,7 +259,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to determine cgroup path: %m");
 
-        r = bpf_program_cgroup_attach(prog, BPF_CGROUP_DEVICE, controller_path, BPF_F_ALLOW_MULTI);
+        r = bpf_program_cgroup_attach(*prog, BPF_CGROUP_DEVICE, controller_path, BPF_F_ALLOW_MULTI);
         if (r < 0)
                 return log_error_errno(r, "Attaching device control BPF program to cgroup %s failed: %m",
                                        empty_to_root(cgroup_path));
@@ -266,8 +267,8 @@
  finish:
         /* Unref the old BPF program (which will implicitly detach it) right before attaching the new program. */
         if (prog_installed) {
-                bpf_program_unref(*prog_installed);
-                *prog_installed = bpf_program_ref(prog);
+                bpf_program_free(*prog_installed);
+                *prog_installed = TAKE_PTR(*prog);
         }
         return 0;
 }
@@ -278,7 +279,7 @@
                 BPF_EXIT_INSN()
         };
 
-        _cleanup_(bpf_program_unrefp) BPFProgram *program = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *program = NULL;
         static int supported = -1;
         int r;
 
@@ -305,7 +306,7 @@
                 return supported = 0;
         }
 
-        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_DEVICE, &program);
+        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_DEVICE, "sd_devices", &program);
         if (r < 0) {
                 log_debug_errno(r, "Can't allocate CGROUP DEVICE BPF program, BPF device control is not supported: %m");
                 return supported = 0;
@@ -514,7 +515,6 @@
                 "/run/systemd/inaccessible/blk\0" "rwm\0";
         int r = 0, k;
 
-        const char *node, *acc;
         NULSTR_FOREACH_PAIR(node, acc, auto_devices) {
                 k = bpf_devices_allow_list_device(prog, path, node, acc);
                 if (r >= 0 && k < 0)
diff --git a/src/core/bpf-devices.h b/src/core/bpf-devices.h
index 19b4d39..5106364 100644
--- a/src/core/bpf-devices.h
+++ b/src/core/bpf-devices.h
@@ -9,7 +9,7 @@
 
 int bpf_devices_cgroup_init(BPFProgram **ret, CGroupDevicePolicy policy, bool allow_list);
 int bpf_devices_apply_policy(
-                BPFProgram *prog,
+                BPFProgram **prog,
                 CGroupDevicePolicy policy,
                 bool allow_list,
                 const char *cgroup_path,
diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c
index c4989a3..5878a81 100644
--- a/src/core/bpf-firewall.c
+++ b/src/core/bpf-firewall.c
@@ -18,7 +18,7 @@
 #include "bpf-firewall.h"
 #include "bpf-program.h"
 #include "fd-util.h"
-#include "ip-address-access.h"
+#include "in-addr-prefix-util.h"
 #include "memory-util.h"
 #include "missing_syscall.h"
 #include "unit.h"
@@ -145,6 +145,7 @@
 
 static int bpf_firewall_compile_bpf(
                 Unit *u,
+                const char *prog_name,
                 bool is_ingress,
                 BPFProgram **ret,
                 bool ip_allow_any,
@@ -192,7 +193,7 @@
                 BPF_MOV64_IMM(BPF_REG_0, 0),
         };
 
-        _cleanup_(bpf_program_unrefp) BPFProgram *p = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *p = NULL;
         int accounting_map_fd, r;
         bool access_enabled;
 
@@ -216,7 +217,7 @@
                 return 0;
         }
 
-        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, &p);
+        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, prog_name, &p);
         if (r < 0)
                 return r;
 
@@ -335,13 +336,13 @@
         return 0;
 }
 
-static int bpf_firewall_count_access_items(IPAddressAccessItem *list, size_t *n_ipv4, size_t *n_ipv6) {
-        IPAddressAccessItem *a;
+static int bpf_firewall_count_access_items(Set *prefixes, size_t *n_ipv4, size_t *n_ipv6) {
+        struct in_addr_prefix *a;
 
         assert(n_ipv4);
         assert(n_ipv6);
 
-        LIST_FOREACH(items, a, list) {
+        SET_FOREACH(a, prefixes)
                 switch (a->family) {
 
                 case AF_INET:
@@ -355,26 +356,25 @@
                 default:
                         return -EAFNOSUPPORT;
                 }
-        }
 
         return 0;
 }
 
 static int bpf_firewall_add_access_items(
-                IPAddressAccessItem *list,
+                Set *prefixes,
                 int ipv4_map_fd,
                 int ipv6_map_fd,
                 int verdict) {
 
         struct bpf_lpm_trie_key *key_ipv4, *key_ipv6;
+        struct in_addr_prefix *a;
         uint64_t value = verdict;
-        IPAddressAccessItem *a;
         int r;
 
         key_ipv4 = alloca0(offsetof(struct bpf_lpm_trie_key, data) + sizeof(uint32_t));
         key_ipv6 = alloca0(offsetof(struct bpf_lpm_trie_key, data) + sizeof(uint32_t) * 4);
 
-        LIST_FOREACH(items, a, list) {
+        SET_FOREACH(a, prefixes)
                 switch (a->family) {
 
                 case AF_INET:
@@ -400,7 +400,6 @@
                 default:
                         return -EAFNOSUPPORT;
                 }
-        }
 
         return 0;
 }
@@ -412,9 +411,8 @@
                 int *ret_ipv6_map_fd,
                 bool *ret_has_any) {
 
-        _cleanup_close_ int ipv4_map_fd = -1, ipv6_map_fd = -1;
+        _cleanup_close_ int ipv4_map_fd = -EBADF, ipv6_map_fd = -EBADF;
         size_t n_ipv4 = 0, n_ipv6 = 0;
-        IPAddressAccessItem *list;
         Unit *p;
         int r;
 
@@ -424,18 +422,29 @@
 
         for (p = u; p; p = UNIT_GET_SLICE(p)) {
                 CGroupContext *cc;
+                Set *prefixes;
+                bool *reduced;
 
                 cc = unit_get_cgroup_context(p);
                 if (!cc)
                         continue;
 
-                list = verdict == ACCESS_ALLOWED ? cc->ip_address_allow : cc->ip_address_deny;
+                prefixes = verdict == ACCESS_ALLOWED ? cc->ip_address_allow : cc->ip_address_deny;
+                reduced = verdict == ACCESS_ALLOWED ? &cc->ip_address_allow_reduced : &cc->ip_address_deny_reduced;
 
-                bpf_firewall_count_access_items(list, &n_ipv4, &n_ipv6);
+                if (!*reduced) {
+                        r = in_addr_prefixes_reduce(prefixes);
+                        if (r < 0)
+                                return r;
+
+                        *reduced = true;
+                }
+
+                bpf_firewall_count_access_items(prefixes, &n_ipv4, &n_ipv6);
 
                 /* Skip making the LPM trie map in cases where we are using "any" in order to hack around
                  * needing CAP_SYS_ADMIN for allocating LPM trie map. */
-                if (ip_address_access_item_is_any(list)) {
+                if (in_addr_prefixes_is_any(prefixes)) {
                         *ret_has_any = true;
                         return 0;
                 }
@@ -518,9 +527,10 @@
 }
 
 int bpf_firewall_compile(Unit *u) {
+        const char *ingress_name = NULL, *egress_name = NULL;
+        bool ip_allow_any = false, ip_deny_any = false;
         CGroupContext *cc;
         int r, supported;
-        bool ip_allow_any = false, ip_deny_any = false;
 
         assert(u);
 
@@ -533,7 +543,7 @@
                 return supported;
         if (supported == BPF_FIREWALL_UNSUPPORTED)
                 return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP),
-                                            "BPF firewalling not supported on this manager, proceeding without.");
+                                            "bpf-firewall: BPF firewalling not supported, proceeding without.");
         if (supported != BPF_FIREWALL_SUPPORTED_WITH_MULTI && u->type == UNIT_SLICE)
                 /* If BPF_F_ALLOW_MULTI is not supported we don't support any BPF magic on inner nodes (i.e. on slice
                  * units), since that would mean leaf nodes couldn't do any BPF anymore at all. Under the assumption
@@ -541,14 +551,21 @@
                  * consistent with old systemd behaviour from before v238, where BPF wasn't supported in inner nodes at
                  * all, either. */
                 return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP),
-                                            "BPF_F_ALLOW_MULTI is not supported on this manager, not doing BPF firewall on slice units.");
+                                            "bpf-firewall: BPF_F_ALLOW_MULTI is not supported, not doing BPF firewall on slice units.");
+
+        /* If BPF_F_ALLOW_MULTI flag is supported program name is also supported (both were added to v4.15
+         * kernel). */
+        if (supported == BPF_FIREWALL_SUPPORTED_WITH_MULTI) {
+                ingress_name = "sd_fw_ingress";
+                egress_name = "sd_fw_egress";
+        }
 
         /* Note that when we compile a new firewall we first flush out the access maps and the BPF programs themselves,
          * but we reuse the accounting maps. That way the firewall in effect always maps to the actual
          * configuration, but we don't flush out the accounting unnecessarily */
 
-        u->ip_bpf_ingress = bpf_program_unref(u->ip_bpf_ingress);
-        u->ip_bpf_egress = bpf_program_unref(u->ip_bpf_egress);
+        u->ip_bpf_ingress = bpf_program_free(u->ip_bpf_ingress);
+        u->ip_bpf_egress = bpf_program_free(u->ip_bpf_egress);
 
         u->ipv4_allow_map_fd = safe_close(u->ipv4_allow_map_fd);
         u->ipv4_deny_map_fd = safe_close(u->ipv4_deny_map_fd);
@@ -565,48 +582,46 @@
 
                 r = bpf_firewall_prepare_access_maps(u, ACCESS_ALLOWED, &u->ipv4_allow_map_fd, &u->ipv6_allow_map_fd, &ip_allow_any);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Preparation of eBPF allow maps failed: %m");
+                        return log_unit_error_errno(u, r, "bpf-firewall: Preparation of BPF allow maps failed: %m");
 
                 r = bpf_firewall_prepare_access_maps(u, ACCESS_DENIED, &u->ipv4_deny_map_fd, &u->ipv6_deny_map_fd, &ip_deny_any);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Preparation of eBPF deny maps failed: %m");
+                        return log_unit_error_errno(u, r, "bpf-firewall: Preparation of BPF deny maps failed: %m");
         }
 
         r = bpf_firewall_prepare_accounting_maps(u, cc->ip_accounting, &u->ip_accounting_ingress_map_fd, &u->ip_accounting_egress_map_fd);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Preparation of eBPF accounting maps failed: %m");
+                return log_unit_error_errno(u, r, "bpf-firewall: Preparation of BPF accounting maps failed: %m");
 
-        r = bpf_firewall_compile_bpf(u, true, &u->ip_bpf_ingress, ip_allow_any, ip_deny_any);
+        r = bpf_firewall_compile_bpf(u, ingress_name, true, &u->ip_bpf_ingress, ip_allow_any, ip_deny_any);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Compilation for ingress BPF program failed: %m");
+                return log_unit_error_errno(u, r, "bpf-firewall: Compilation of ingress BPF program failed: %m");
 
-        r = bpf_firewall_compile_bpf(u, false, &u->ip_bpf_egress, ip_allow_any, ip_deny_any);
+        r = bpf_firewall_compile_bpf(u, egress_name, false, &u->ip_bpf_egress, ip_allow_any, ip_deny_any);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Compilation for egress BPF program failed: %m");
+                return log_unit_error_errno(u, r, "bpf-firewall: Compilation of egress BPF program failed: %m");
 
         return 0;
 }
 
 static int load_bpf_progs_from_fs_to_set(Unit *u, char **filter_paths, Set **set) {
-        char **bpf_fs_path;
-
         set_clear(*set);
 
         STRV_FOREACH(bpf_fs_path, filter_paths) {
-                _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+                _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
                 int r;
 
-                r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, &prog);
+                r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, NULL, &prog);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Can't allocate CGROUP SKB BPF program: %m");
+                        return log_unit_error_errno(u, r, "bpf-firewall: Allocation of SKB BPF program failed: %m");
 
                 r = bpf_program_load_from_bpf_fs(prog, *bpf_fs_path);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Loading of ingress BPF program %s failed: %m", *bpf_fs_path);
+                        return log_unit_error_errno(u, r, "bpf-firewall: Loading of ingress BPF program %s failed: %m", *bpf_fs_path);
 
                 r = set_ensure_consume(set, &bpf_program_hash_ops, TAKE_PTR(prog));
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Can't add program to BPF program set: %m");
+                        return log_oom();
         }
 
         return 0;
@@ -630,7 +645,8 @@
                 return supported;
 
         if (supported != BPF_FIREWALL_SUPPORTED_WITH_MULTI)
-                return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP), "BPF_F_ALLOW_MULTI not supported on this manager, cannot attach custom BPF programs.");
+                return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                            "bpf-firewall: BPF_F_ALLOW_MULTI not supported, cannot attach custom BPF programs.");
 
         r = load_bpf_progs_from_fs_to_set(u, cc->ip_filters_ingress, &u->ip_bpf_custom_ingress);
         if (r < 0)
@@ -649,25 +665,20 @@
         assert(u);
 
         set_clear(*set_installed);
+        r = set_ensure_allocated(set_installed, &bpf_program_hash_ops);
+        if (r < 0)
+                return log_oom();
 
-        SET_FOREACH(prog, *set) {
+        SET_FOREACH_MOVE(prog, *set_installed, *set) {
                 r = bpf_program_cgroup_attach(prog, attach_type, path, BPF_F_ALLOW_MULTI);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Attaching custom egress BPF program to cgroup %s failed: %m", path);
-
-                /* Remember that these BPF programs are installed now. */
-                r = set_ensure_put(set_installed, &bpf_program_hash_ops, prog);
-                if (r < 0)
-                        return log_unit_error_errno(u, r, "Can't add program to BPF program set: %m");
-
-                bpf_program_ref(prog);
+                        return log_unit_error_errno(u, r, "bpf-firewall: Attaching custom egress BPF program to cgroup %s failed: %m", path);
         }
-
         return 0;
 }
 
 int bpf_firewall_install(Unit *u) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *ip_bpf_ingress_uninstall = NULL, *ip_bpf_egress_uninstall = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *ip_bpf_ingress_uninstall = NULL, *ip_bpf_egress_uninstall = NULL;
         _cleanup_free_ char *path = NULL;
         CGroupContext *cc;
         int r, supported;
@@ -687,16 +698,19 @@
         if (supported < 0)
                 return supported;
         if (supported == BPF_FIREWALL_UNSUPPORTED)
-                return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP), "BPF firewalling not supported on this manager, proceeding without.");
+                return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                            "bpf-firewall: BPF firewalling not supported, proceeding without.");
         if (supported != BPF_FIREWALL_SUPPORTED_WITH_MULTI && u->type == UNIT_SLICE)
-                return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP), "BPF_F_ALLOW_MULTI is not supported on this manager, not doing BPF firewall on slice units.");
+                return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                            "bpf-firewall: BPF_F_ALLOW_MULTI not supported, not doing BPF firewall on slice units.");
         if (supported != BPF_FIREWALL_SUPPORTED_WITH_MULTI &&
             (!set_isempty(u->ip_bpf_custom_ingress) || !set_isempty(u->ip_bpf_custom_egress)))
-                return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP), "BPF_F_ALLOW_MULTI not supported on this manager, cannot attach custom BPF programs.");
+                return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                            "bpf-firewall: BPF_F_ALLOW_MULTI not supported, cannot attach custom BPF programs.");
 
         r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, NULL, &path);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Failed to determine cgroup path: %m");
+                return log_unit_error_errno(u, r, "bpf-firewall: Failed to determine cgroup path: %m");
 
         flags = supported == BPF_FIREWALL_SUPPORTED_WITH_MULTI ? BPF_F_ALLOW_MULTI : 0;
 
@@ -711,30 +725,32 @@
                 /* If we don't have BPF_F_ALLOW_MULTI then unref the old BPF programs (which will implicitly
                  * detach them) right before attaching the new program, to minimize the time window when we
                  * don't account for IP traffic. */
-                u->ip_bpf_egress_installed = bpf_program_unref(u->ip_bpf_egress_installed);
-                u->ip_bpf_ingress_installed = bpf_program_unref(u->ip_bpf_ingress_installed);
+                u->ip_bpf_egress_installed = bpf_program_free(u->ip_bpf_egress_installed);
+                u->ip_bpf_ingress_installed = bpf_program_free(u->ip_bpf_ingress_installed);
         }
 
         if (u->ip_bpf_egress) {
                 r = bpf_program_cgroup_attach(u->ip_bpf_egress, BPF_CGROUP_INET_EGRESS, path, flags);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Attaching egress BPF program to cgroup %s failed: %m", path);
+                        return log_unit_error_errno(u, r,
+                                "bpf-firewall: Attaching egress BPF program to cgroup %s failed: %m", path);
 
                 /* Remember that this BPF program is installed now. */
-                u->ip_bpf_egress_installed = bpf_program_ref(u->ip_bpf_egress);
+                u->ip_bpf_egress_installed = TAKE_PTR(u->ip_bpf_egress);
         }
 
         if (u->ip_bpf_ingress) {
                 r = bpf_program_cgroup_attach(u->ip_bpf_ingress, BPF_CGROUP_INET_INGRESS, path, flags);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Attaching ingress BPF program to cgroup %s failed: %m", path);
+                        return log_unit_error_errno(u, r,
+                                "bpf-firewall: Attaching ingress BPF program to cgroup %s failed: %m", path);
 
-                u->ip_bpf_ingress_installed = bpf_program_ref(u->ip_bpf_ingress);
+                u->ip_bpf_ingress_installed = TAKE_PTR(u->ip_bpf_ingress);
         }
 
         /* And now, definitely get rid of the old programs, and detach them */
-        ip_bpf_egress_uninstall = bpf_program_unref(ip_bpf_egress_uninstall);
-        ip_bpf_ingress_uninstall = bpf_program_unref(ip_bpf_ingress_uninstall);
+        ip_bpf_egress_uninstall = bpf_program_free(ip_bpf_egress_uninstall);
+        ip_bpf_ingress_uninstall = bpf_program_free(ip_bpf_ingress_uninstall);
 
         r = attach_custom_bpf_progs(u, path, BPF_CGROUP_INET_EGRESS, &u->ip_bpf_custom_egress, &u->ip_bpf_custom_egress_installed);
         if (r < 0)
@@ -798,7 +814,7 @@
                 BPF_EXIT_INSN()
         };
 
-        _cleanup_(bpf_program_unrefp) BPFProgram *program = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *program = NULL;
         static int supported = -1;
         union bpf_attr attr;
         int r;
@@ -814,32 +830,33 @@
 
         r = cg_unified_controller(SYSTEMD_CGROUP_CONTROLLER);
         if (r < 0)
-                return log_error_errno(r, "Can't determine whether the unified hierarchy is used: %m");
+                return log_error_errno(r, "bpf-firewall: Can't determine whether the unified hierarchy is used: %m");
         if (r == 0) {
                 bpf_firewall_unsupported_reason =
                         log_debug_errno(SYNTHETIC_ERRNO(EUCLEAN),
-                                        "Not running with unified cgroups, BPF firewalling is not supported.");
+                                        "bpf-firewall: Not running with unified cgroup hierarchy, BPF firewalling is not supported.");
                 return supported = BPF_FIREWALL_UNSUPPORTED;
         }
 
-        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, &program);
+        /* prog_name is NULL since it is supported only starting from v4.15 kernel. */
+        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, NULL, &program);
         if (r < 0) {
                 bpf_firewall_unsupported_reason =
-                        log_debug_errno(r, "Can't allocate CGROUP SKB BPF program, BPF firewalling is not supported: %m");
+                        log_debug_errno(r, "bpf-firewall: Can't allocate CGROUP SKB BPF program, BPF firewalling is not supported: %m");
                 return supported = BPF_FIREWALL_UNSUPPORTED;
         }
 
         r = bpf_program_add_instructions(program, trivial, ELEMENTSOF(trivial));
         if (r < 0) {
                 bpf_firewall_unsupported_reason =
-                        log_debug_errno(r, "Can't add trivial instructions to CGROUP SKB BPF program, BPF firewalling is not supported: %m");
+                        log_debug_errno(r, "bpf-firewall: Can't add trivial instructions to CGROUP SKB BPF program, BPF firewalling is not supported: %m");
                 return supported = BPF_FIREWALL_UNSUPPORTED;
         }
 
         r = bpf_program_load_kernel(program, NULL, 0);
         if (r < 0) {
                 bpf_firewall_unsupported_reason =
-                        log_debug_errno(r, "Can't load kernel CGROUP SKB BPF program, BPF firewalling is not supported: %m");
+                        log_debug_errno(r, "bpf-firewall: Can't load kernel CGROUP SKB BPF program, BPF firewalling is not supported: %m");
                 return supported = BPF_FIREWALL_UNSUPPORTED;
         }
 
@@ -857,13 +874,13 @@
         // Ideally it should behave like GCC, so that we can remove these workarounds.
         zero(attr);
         attr.attach_type = BPF_CGROUP_INET_EGRESS;
-        attr.target_fd = -1;
-        attr.attach_bpf_fd = -1;
+        attr.target_fd = -EBADF;
+        attr.attach_bpf_fd = -EBADF;
 
         if (bpf(BPF_PROG_DETACH, &attr, sizeof(attr)) < 0) {
                 if (errno != EBADF) {
                         bpf_firewall_unsupported_reason =
-                                log_debug_errno(errno, "Didn't get EBADF from BPF_PROG_DETACH, BPF firewalling is not supported: %m");
+                                log_debug_errno(errno, "bpf-firewall: Didn't get EBADF from BPF_PROG_DETACH, BPF firewalling is not supported: %m");
                         return supported = BPF_FIREWALL_UNSUPPORTED;
                 }
 
@@ -871,7 +888,7 @@
         } else {
                 bpf_firewall_unsupported_reason =
                         log_debug_errno(SYNTHETIC_ERRNO(EBADE),
-                                        "Wut? Kernel accepted our invalid BPF_PROG_DETACH call? "
+                                        "bpf-firewall: Wut? Kernel accepted our invalid BPF_PROG_DETACH call? "
                                         "Something is weird, assuming BPF firewalling is broken and hence not supported.");
                 return supported = BPF_FIREWALL_UNSUPPORTED;
         }
@@ -879,30 +896,32 @@
         /* So now we know that the BPF program is generally available, let's see if BPF_F_ALLOW_MULTI is also supported
          * (which was added in kernel 4.15). We use a similar logic as before, but this time we use the BPF_PROG_ATTACH
          * bpf() call and the BPF_F_ALLOW_MULTI flags value. Since the flags are checked early in the system call we'll
-         * get EINVAL if it's not supported, and EBADF as before if it is available. */
+         * get EINVAL if it's not supported, and EBADF as before if it is available.
+         * Use probe result as the indicator that program name is also supported since they both were
+         * added in kernel 4.15. */
 
         zero(attr);
         attr.attach_type = BPF_CGROUP_INET_EGRESS;
-        attr.target_fd = -1;
-        attr.attach_bpf_fd = -1;
+        attr.target_fd = -EBADF;
+        attr.attach_bpf_fd = -EBADF;
         attr.attach_flags = BPF_F_ALLOW_MULTI;
 
         if (bpf(BPF_PROG_ATTACH, &attr, sizeof(attr)) < 0) {
                 if (errno == EBADF) {
-                        log_debug_errno(errno, "Got EBADF when using BPF_F_ALLOW_MULTI, which indicates it is supported. Yay!");
+                        log_debug_errno(errno, "bpf-firewall: Got EBADF when using BPF_F_ALLOW_MULTI, which indicates it is supported. Yay!");
                         return supported = BPF_FIREWALL_SUPPORTED_WITH_MULTI;
                 }
 
                 if (errno == EINVAL)
-                        log_debug_errno(errno, "Got EINVAL error when using BPF_F_ALLOW_MULTI, which indicates it's not supported.");
+                        log_debug_errno(errno, "bpf-firewall: Got EINVAL error when using BPF_F_ALLOW_MULTI, which indicates it's not supported.");
                 else
-                        log_debug_errno(errno, "Got unexpected error when using BPF_F_ALLOW_MULTI, assuming it's not supported: %m");
+                        log_debug_errno(errno, "bpf-firewall: Got unexpected error when using BPF_F_ALLOW_MULTI, assuming it's not supported: %m");
 
                 return supported = BPF_FIREWALL_SUPPORTED;
         } else {
                 bpf_firewall_unsupported_reason =
                         log_debug_errno(SYNTHETIC_ERRNO(EBADE),
-                                        "Wut? Kernel accepted our invalid BPF_PROG_ATTACH+BPF_F_ALLOW_MULTI call? "
+                                        "bpf-firewall: Wut? Kernel accepted our invalid BPF_PROG_ATTACH+BPF_F_ALLOW_MULTI call? "
                                         "Something is weird, assuming BPF firewalling is broken and hence not supported.");
                 return supported = BPF_FIREWALL_UNSUPPORTED;
         }
@@ -914,16 +933,17 @@
         assert(u);
         assert(u->manager);
 
-        if (!warned && !MANAGER_IS_TEST_RUN(u->manager)) {
-                bool quiet = bpf_firewall_unsupported_reason == -EPERM && detect_container() > 0;
+        if (warned || MANAGER_IS_TEST_RUN(u->manager))
+                return;
 
-                log_unit_full_errno(u, quiet ? LOG_DEBUG : LOG_WARNING, bpf_firewall_unsupported_reason,
-                                    "unit configures an IP firewall, but %s.\n"
-                                    "(This warning is only shown for the first unit using IP firewalling.)",
-                                    getuid() != 0 ? "not running as root" :
-                                                    "the local system does not support BPF/cgroup firewalling");
-                warned = true;
-        }
+        bool quiet = ERRNO_IS_PRIVILEGE(bpf_firewall_unsupported_reason) && detect_container() > 0;
+
+        log_unit_full_errno(u, quiet ? LOG_DEBUG : LOG_WARNING, bpf_firewall_unsupported_reason,
+                            "unit configures an IP firewall, but %s.\n"
+                            "(This warning is only shown for the first unit using IP firewalling.)",
+                            getuid() != 0 ? "not running as root" :
+                            "the local system does not support BPF/cgroup firewalling");
+        warned = true;
 }
 
 void bpf_firewall_close(Unit *u) {
@@ -937,10 +957,10 @@
         u->ipv4_deny_map_fd = safe_close(u->ipv4_deny_map_fd);
         u->ipv6_deny_map_fd = safe_close(u->ipv6_deny_map_fd);
 
-        u->ip_bpf_ingress = bpf_program_unref(u->ip_bpf_ingress);
-        u->ip_bpf_ingress_installed = bpf_program_unref(u->ip_bpf_ingress_installed);
-        u->ip_bpf_egress = bpf_program_unref(u->ip_bpf_egress);
-        u->ip_bpf_egress_installed = bpf_program_unref(u->ip_bpf_egress_installed);
+        u->ip_bpf_ingress = bpf_program_free(u->ip_bpf_ingress);
+        u->ip_bpf_ingress_installed = bpf_program_free(u->ip_bpf_ingress_installed);
+        u->ip_bpf_egress = bpf_program_free(u->ip_bpf_egress);
+        u->ip_bpf_egress_installed = bpf_program_free(u->ip_bpf_egress_installed);
 
         u->ip_bpf_custom_ingress = set_free(u->ip_bpf_custom_ingress);
         u->ip_bpf_custom_egress = set_free(u->ip_bpf_custom_egress);
diff --git a/src/core/bpf-foreign.c b/src/core/bpf-foreign.c
index 98655bd..83c3bac 100644
--- a/src/core/bpf-foreign.c
+++ b/src/core/bpf-foreign.c
@@ -1,11 +1,13 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "bpf-foreign.h"
 #include "bpf-program.h"
 #include "cgroup.h"
 #include "memory-util.h"
+#include "missing_magic.h"
 #include "mountpoint-util.h"
 #include "set.h"
+#include "stat-util.h"
 
 typedef struct BPFForeignKey BPFForeignKey;
 struct BPFForeignKey {
@@ -49,7 +51,7 @@
 
 DEFINE_PRIVATE_HASH_OPS_FULL(bpf_foreign_by_key_hash_ops,
                 BPFForeignKey, bpf_foreign_key_hash_func, bpf_foreign_key_compare_func, free,
-                BPFProgram, bpf_program_unref);
+                BPFProgram, bpf_program_free);
 
 static int attach_programs(Unit *u, const char *path, Hashmap* foreign_by_key, uint32_t attach_flags) {
         const BPFForeignKey *key;
@@ -61,7 +63,7 @@
         HASHMAP_FOREACH_KEY(prog, key, foreign_by_key) {
                 r = bpf_program_cgroup_attach(prog, key->attach_type, path, attach_flags);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Attaching foreign BPF program to cgroup %s failed: %m", path);
+                        return log_unit_error_errno(u, r, "bpf-foreign: Attaching foreign BPF program to cgroup %s failed: %m", path);
         }
 
         return 0;
@@ -76,7 +78,7 @@
                 Unit *u,
                 enum bpf_attach_type attach_type,
                 const char *bpffs_path) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
         _cleanup_free_ BPFForeignKey *key = NULL;
         uint32_t prog_id;
         int r;
@@ -84,26 +86,34 @@
         assert(u);
         assert(bpffs_path);
 
+        r = path_is_fs_type(bpffs_path, BPF_FS_MAGIC);
+        if (r < 0)
+                return log_unit_error_errno(u, r,
+                                "bpf-foreign: Failed to determine filesystem type of %s: %m", bpffs_path);
+        if (r == 0)
+                return log_unit_error_errno(u, SYNTHETIC_ERRNO(EINVAL),
+                                "bpf-foreign: Path in BPF filesystem is expected.");
+
         r = bpf_program_new_from_bpffs_path(bpffs_path, &prog);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Failed to create foreign BPFProgram: %m");
+                return log_unit_error_errno(u, r, "bpf-foreign: Failed to create foreign BPF program: %m");
 
         r = bpf_program_get_id_by_fd(prog->kernel_fd, &prog_id);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Failed to get BPF program id by fd: %m");
+                return log_unit_error_errno(u, r, "bpf-foreign: Failed to get BPF program id from fd: %m");
 
         r = bpf_foreign_key_new(prog_id, attach_type, &key);
         if (r < 0)
                 return log_unit_error_errno(u, r,
-                                "Failed to create foreign BPF program key from path '%s': %m", bpffs_path);
+                                "bpf-foreign: Failed to create foreign BPF program key from path '%s': %m", bpffs_path);
 
         r = hashmap_ensure_put(&u->bpf_foreign_by_key, &bpf_foreign_by_key_hash_ops, key, prog);
         if (r == -EEXIST) {
-                log_unit_warning_errno(u, r, "Foreign BPF program already exists, ignoring: %m");
+                log_unit_warning_errno(u, r, "bpf-foreign: Foreign BPF program already exists, ignoring: %m");
                 return 0;
         }
         if (r < 0)
-                return log_unit_error_errno(u, r, "Failed to put foreign BPFProgram into map: %m");
+                return log_unit_error_errno(u, r, "bpf-foreign: Failed to put foreign BPF program into map: %m");
 
         TAKE_PTR(key);
         TAKE_PTR(prog);
@@ -111,19 +121,8 @@
         return 0;
 }
 
-int bpf_foreign_supported(void) {
-        int r;
-
-        r = cg_all_unified();
-        if (r <= 0)
-                return r;
-
-        return path_is_mount_point("/sys/fs/bpf", NULL, 0);
-}
-
 int bpf_foreign_install(Unit *u) {
         _cleanup_free_ char *cgroup_path = NULL;
-        CGroupBPFForeignProgram *p;
         CGroupContext *cc;
         int r;
 
@@ -135,17 +134,17 @@
 
         r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, NULL, &cgroup_path);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Failed to get cgroup path: %m");
+                return log_unit_error_errno(u, r, "bpf-foreign: Failed to get cgroup path: %m");
 
         LIST_FOREACH(programs, p, cc->bpf_foreign_programs) {
                 r = bpf_foreign_prepare(u, p->attach_type, p->bpffs_path);
                 if (r < 0)
-                        return log_unit_error_errno(u, r, "Failed to prepare foreign BPF hashmap: %m");
+                        return log_unit_error_errno(u, r, "bpf-foreign: Failed to prepare foreign BPF hashmap: %m");
         }
 
         r = attach_programs(u, cgroup_path, u->bpf_foreign_by_key, BPF_F_ALLOW_MULTI);
         if (r < 0)
-                  return log_unit_error_errno(u, r, "Failed to install foreign BPF programs: %m");
+                  return log_unit_error_errno(u, r, "bpf-foreign: Failed to install foreign BPF programs: %m");
 
         return 0;
 }
diff --git a/src/core/bpf-foreign.h b/src/core/bpf-foreign.h
index 7704986..e387b1b 100644
--- a/src/core/bpf-foreign.h
+++ b/src/core/bpf-foreign.h
@@ -1,10 +1,13 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #pragma once
 
 #include "unit.h"
 
-int bpf_foreign_supported(void);
+static inline int bpf_foreign_supported(void) {
+        return cg_all_unified();
+}
+
 /*
  * Attach cgroup-bpf programs foreign to systemd, i.e. loaded to the kernel by an entity
  * external to systemd.
diff --git a/src/core/bpf-lsm.c b/src/core/bpf-lsm.c
new file mode 100644
index 0000000..0be250a
--- /dev/null
+++ b/src/core/bpf-lsm.c
@@ -0,0 +1,360 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/types.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "alloc-util.h"
+#include "bpf-lsm.h"
+#include "cgroup-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "filesystems.h"
+#include "log.h"
+#include "manager.h"
+#include "mkdir.h"
+#include "nulstr-util.h"
+#include "stat-util.h"
+#include "strv.h"
+
+#if BPF_FRAMEWORK
+/* libbpf, clang and llc compile time dependencies are satisfied */
+#include "bpf-dlopen.h"
+#include "bpf-link.h"
+#include "bpf-util.h"
+#include "bpf/restrict_fs/restrict-fs-skel.h"
+
+#define CGROUP_HASH_SIZE_MAX 2048
+
+static struct restrict_fs_bpf *restrict_fs_bpf_free(struct restrict_fs_bpf *obj) {
+        /* restrict_fs_bpf__destroy handles object == NULL case */
+        (void) restrict_fs_bpf__destroy(obj);
+
+        return NULL;
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(struct restrict_fs_bpf *, restrict_fs_bpf_free);
+
+static bool bpf_can_link_lsm_program(struct bpf_program *prog) {
+        _cleanup_(bpf_link_freep) struct bpf_link *link = NULL;
+
+        assert(prog);
+
+        link = sym_bpf_program__attach_lsm(prog);
+
+        /* If bpf_program__attach_lsm fails the resulting value stores libbpf error code instead of memory
+         * pointer. That is the case when the helper is called on architectures where BPF trampoline (hence
+         * BPF_LSM_MAC attach type) is not supported. */
+        return sym_libbpf_get_error(link) == 0;
+}
+
+static int prepare_restrict_fs_bpf(struct restrict_fs_bpf **ret_obj) {
+        _cleanup_(restrict_fs_bpf_freep) struct restrict_fs_bpf *obj = NULL;
+        _cleanup_close_ int inner_map_fd = -EBADF;
+        int r;
+
+        assert(ret_obj);
+
+        obj = restrict_fs_bpf__open();
+        if (!obj)
+                return log_error_errno(errno, "bpf-lsm: Failed to open BPF object: %m");
+
+        /* TODO Maybe choose a number based on runtime information? */
+        r = sym_bpf_map__set_max_entries(obj->maps.cgroup_hash, CGROUP_HASH_SIZE_MAX);
+        assert(r <= 0);
+        if (r < 0)
+                return log_error_errno(r, "bpf-lsm: Failed to resize BPF map '%s': %m",
+                                       sym_bpf_map__name(obj->maps.cgroup_hash));
+
+        /* Dummy map to satisfy the verifier */
+        inner_map_fd = compat_bpf_map_create(BPF_MAP_TYPE_HASH, NULL, sizeof(uint32_t), sizeof(uint32_t), 128U, NULL);
+        if (inner_map_fd < 0)
+                return log_error_errno(errno, "bpf-lsm: Failed to create BPF map: %m");
+
+        r = sym_bpf_map__set_inner_map_fd(obj->maps.cgroup_hash, inner_map_fd);
+        assert(r <= 0);
+        if (r < 0)
+                return log_error_errno(r, "bpf-lsm: Failed to set inner map fd: %m");
+
+        r = restrict_fs_bpf__load(obj);
+        assert(r <= 0);
+        if (r < 0)
+                return log_error_errno(r, "bpf-lsm: Failed to load BPF object: %m");
+
+        *ret_obj = TAKE_PTR(obj);
+
+        return 0;
+}
+
+static int mac_bpf_use(void) {
+        _cleanup_free_ char *lsm_list = NULL;
+        static int cached_use = -1;
+        int r;
+
+        if (cached_use >= 0)
+                return cached_use;
+
+        cached_use = 0;
+
+        r = read_one_line_file("/sys/kernel/security/lsm", &lsm_list);
+        if (r < 0) {
+               if (r != -ENOENT)
+                       log_notice_errno(r, "bpf-lsm: Failed to read /sys/kernel/security/lsm, assuming bpf is unavailable: %m");
+               return 0;
+        }
+
+        for (const char *p = lsm_list;;) {
+                _cleanup_free_ char *word = NULL;
+
+                r = extract_first_word(&p, &word, ",", 0);
+                if (r == 0)
+                        return 0;
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
+                        log_notice_errno(r, "bpf-lsm: Failed to parse /sys/kernel/security/lsm, assuming bpf is unavailable: %m");
+                        return 0;
+                }
+
+                if (streq(word, "bpf"))
+                        return cached_use = 1;
+        }
+}
+
+bool lsm_bpf_supported(bool initialize) {
+        _cleanup_(restrict_fs_bpf_freep) struct restrict_fs_bpf *obj = NULL;
+        static int supported = -1;
+        int r;
+
+        if (supported >= 0)
+                return supported;
+        if (!initialize)
+                return false;
+
+        if (!cgroup_bpf_supported())
+                return (supported = false);
+
+        r = mac_bpf_use();
+        if (r < 0) {
+                log_warning_errno(r, "bpf-lsm: Can't determine whether the BPF LSM module is used: %m");
+                return (supported = false);
+        }
+
+        if (r == 0) {
+                log_info_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                               "bpf-lsm: BPF LSM hook not enabled in the kernel, BPF LSM not supported");
+                return (supported = false);
+        }
+
+        r = prepare_restrict_fs_bpf(&obj);
+        if (r < 0)
+                return (supported = false);
+
+        if (!bpf_can_link_lsm_program(obj->progs.restrict_filesystems)) {
+                log_warning_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                  "bpf-lsm: Failed to link program; assuming BPF LSM is not available");
+                return (supported = false);
+        }
+
+        return (supported = true);
+}
+
+int lsm_bpf_setup(Manager *m) {
+        _cleanup_(restrict_fs_bpf_freep) struct restrict_fs_bpf *obj = NULL;
+        _cleanup_(bpf_link_freep) struct bpf_link *link = NULL;
+        int r;
+
+        assert(m);
+
+        r = prepare_restrict_fs_bpf(&obj);
+        if (r < 0)
+                return r;
+
+        link = sym_bpf_program__attach_lsm(obj->progs.restrict_filesystems);
+        r = sym_libbpf_get_error(link);
+        if (r != 0)
+                return log_error_errno(r, "bpf-lsm: Failed to link '%s' LSM BPF program: %m",
+                                       sym_bpf_program__name(obj->progs.restrict_filesystems));
+
+        log_info("bpf-lsm: LSM BPF program attached");
+
+        obj->links.restrict_filesystems = TAKE_PTR(link);
+        m->restrict_fs = TAKE_PTR(obj);
+
+        return 0;
+}
+
+int lsm_bpf_unit_restrict_filesystems(Unit *u, const Set *filesystems, bool allow_list) {
+        uint32_t dummy_value = 1, zero = 0;
+        const char *fs;
+        const statfs_f_type_t *magic;
+        int r;
+
+        assert(filesystems);
+        assert(u);
+
+        if (!u->manager->restrict_fs)
+                return log_unit_error_errno(u, SYNTHETIC_ERRNO(EINVAL),
+                                            "bpf-lsm: BPF LSM object is not installed, has setup failed?");
+
+        int inner_map_fd = compat_bpf_map_create(
+                        BPF_MAP_TYPE_HASH,
+                        NULL,
+                        sizeof(uint32_t),
+                        sizeof(uint32_t),
+                        128U, /* Should be enough for all filesystem types */
+                        NULL);
+        if (inner_map_fd < 0)
+                return log_unit_error_errno(u, errno, "bpf-lsm: Failed to create inner BPF map: %m");
+
+        int outer_map_fd = sym_bpf_map__fd(u->manager->restrict_fs->maps.cgroup_hash);
+        if (outer_map_fd < 0)
+                return log_unit_error_errno(u, errno, "bpf-lsm: Failed to get BPF map fd: %m");
+
+        if (sym_bpf_map_update_elem(outer_map_fd, &u->cgroup_id, &inner_map_fd, BPF_ANY) != 0)
+                return log_unit_error_errno(u, errno, "bpf-lsm: Error populating BPF map: %m");
+
+        uint32_t allow = allow_list;
+
+        /* Use key 0 to store whether this is an allow list or a deny list */
+        if (sym_bpf_map_update_elem(inner_map_fd, &zero, &allow, BPF_ANY) != 0)
+                return log_unit_error_errno(u, errno, "bpf-lsm: Error initializing map: %m");
+
+        SET_FOREACH(fs, filesystems) {
+                r = fs_type_from_string(fs, &magic);
+                if (r < 0) {
+                        log_unit_warning(u, "bpf-lsm: Invalid filesystem name '%s', ignoring.", fs);
+                        continue;
+                }
+
+                log_unit_debug(u, "bpf-lsm: Restricting filesystem access to '%s'", fs);
+
+                for (int i = 0; i < FILESYSTEM_MAGIC_MAX; i++) {
+                        if (magic[i] == 0)
+                                break;
+
+                        if (sym_bpf_map_update_elem(inner_map_fd, &magic[i], &dummy_value, BPF_ANY) != 0) {
+                                r = log_unit_error_errno(u, errno, "bpf-lsm: Failed to update BPF map: %m");
+
+                                if (sym_bpf_map_delete_elem(outer_map_fd, &u->cgroup_id) != 0)
+                                        log_unit_debug_errno(u, errno, "bpf-lsm: Failed to delete cgroup entry from BPF map: %m");
+
+                                return r;
+                        }
+                }
+        }
+
+        return 0;
+}
+
+int lsm_bpf_cleanup(const Unit *u) {
+        assert(u);
+        assert(u->manager);
+
+        /* If we never successfully detected support, there is nothing to clean up. */
+        if (!lsm_bpf_supported(/* initialize = */ false))
+                return 0;
+
+        if (!u->manager->restrict_fs)
+                return 0;
+
+        int fd = sym_bpf_map__fd(u->manager->restrict_fs->maps.cgroup_hash);
+        if (fd < 0)
+                return log_unit_error_errno(u, errno, "bpf-lsm: Failed to get BPF map fd: %m");
+
+        if (sym_bpf_map_delete_elem(fd, &u->cgroup_id) != 0)
+                return log_unit_debug_errno(u, errno, "bpf-lsm: Failed to delete cgroup entry from LSM BPF map: %m");
+
+        return 0;
+}
+
+int lsm_bpf_map_restrict_fs_fd(Unit *unit) {
+        assert(unit);
+        assert(unit->manager);
+
+        if (!unit->manager->restrict_fs)
+                return -ENOMEDIUM;
+
+        return sym_bpf_map__fd(unit->manager->restrict_fs->maps.cgroup_hash);
+}
+
+void lsm_bpf_destroy(struct restrict_fs_bpf *prog) {
+        restrict_fs_bpf__destroy(prog);
+}
+#else /* ! BPF_FRAMEWORK */
+bool lsm_bpf_supported(bool initialize) {
+        return false;
+}
+
+int lsm_bpf_setup(Manager *m) {
+        return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "bpf-lsm: Failed to set up LSM BPF: %m");
+}
+
+int lsm_bpf_unit_restrict_filesystems(Unit *u, const Set *filesystems, const bool allow_list) {
+        return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP), "bpf-lsm: Failed to restrict filesystems using LSM BPF: %m");
+}
+
+int lsm_bpf_cleanup(const Unit *u) {
+        return 0;
+}
+
+int lsm_bpf_map_restrict_fs_fd(Unit *unit) {
+        return -ENOMEDIUM;
+}
+
+void lsm_bpf_destroy(struct restrict_fs_bpf *prog) {
+        return;
+}
+#endif
+
+int lsm_bpf_parse_filesystem(
+                const char *name,
+                Set **filesystems,
+                FilesystemParseFlags flags,
+                const char *unit,
+                const char *filename,
+                unsigned line) {
+        int r;
+
+        assert(name);
+        assert(filesystems);
+
+        if (name[0] == '@') {
+                const FilesystemSet *set;
+
+                set = filesystem_set_find(name);
+                if (!set) {
+                        log_syntax(unit, flags & FILESYSTEM_PARSE_LOG ? LOG_WARNING : LOG_DEBUG, filename, line, 0,
+                                   "bpf-lsm: Unknown filesystem group, ignoring: %s", name);
+                        return 0;
+                }
+
+                NULSTR_FOREACH(i, set->value) {
+                        /* Call ourselves again, for the group to parse. Note that we downgrade logging here
+                         * (i.e. take away the FILESYSTEM_PARSE_LOG flag) since any issues in the group table
+                         * are our own problem, not a problem in user configuration data and we shouldn't
+                         * pretend otherwise by complaining about them. */
+                        r = lsm_bpf_parse_filesystem(i, filesystems, flags &~ FILESYSTEM_PARSE_LOG, unit, filename, line);
+                        if (r < 0)
+                                return r;
+                }
+        } else {
+                /* If we previously wanted to forbid access to a filesystem and now
+                 * we want to allow it, then remove it from the list. */
+                if (!(flags & FILESYSTEM_PARSE_INVERT) == !!(flags & FILESYSTEM_PARSE_ALLOW_LIST)) {
+                        r = set_put_strdup(filesystems, name);
+                        if (r == -ENOMEM)
+                                return flags & FILESYSTEM_PARSE_LOG ? log_oom() : -ENOMEM;
+                        if (r < 0 && r != -EEXIST)  /* When already in set, ignore */
+                                return r;
+                } else
+                        free(set_remove(*filesystems, name));
+        }
+
+        return 0;
+}
diff --git a/src/core/bpf-lsm.h b/src/core/bpf-lsm.h
new file mode 100644
index 0000000..dff5812
--- /dev/null
+++ b/src/core/bpf-lsm.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "hashmap.h"
+
+typedef enum FilesystemParseFlags {
+        FILESYSTEM_PARSE_INVERT     = 1 << 0,
+        FILESYSTEM_PARSE_ALLOW_LIST = 1 << 1,
+        FILESYSTEM_PARSE_LOG        = 1 << 2,
+} FilesystemParseFlags;
+
+typedef struct Unit Unit;
+typedef struct Manager Manager;
+
+typedef struct restrict_fs_bpf restrict_fs_bpf;
+
+bool lsm_bpf_supported(bool initialize);
+int lsm_bpf_setup(Manager *m);
+int lsm_bpf_unit_restrict_filesystems(Unit *u, const Set *filesystems, bool allow_list);
+int lsm_bpf_cleanup(const Unit *u);
+int lsm_bpf_map_restrict_fs_fd(Unit *u);
+void lsm_bpf_destroy(struct restrict_fs_bpf *prog);
+int lsm_bpf_parse_filesystem(const char *name,
+                             Set **filesystems,
+                             FilesystemParseFlags flags,
+                             const char *unit,
+                             const char *filename,
+                             unsigned line);
diff --git a/src/core/bpf-socket-bind.c b/src/core/bpf-socket-bind.c
index 9983691..9f290ab 100644
--- a/src/core/bpf-socket-bind.c
+++ b/src/core/bpf-socket-bind.c
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #if BPF_FRAMEWORK
 #include <bpf/bpf.h>
@@ -11,8 +11,9 @@
 /* libbpf, clang, llvm and bpftool compile time dependencies are satisfied */
 #include "bpf-dlopen.h"
 #include "bpf-link.h"
-#include "bpf/socket_bind/socket-bind.skel.h"
+#include "bpf-util.h"
 #include "bpf/socket_bind/socket-bind-api.bpf.h"
+#include "bpf/socket_bind/socket-bind-skel.h"
 
 static struct socket_bind_bpf *socket_bind_bpf_free(struct socket_bind_bpf *obj) {
         /* socket_bind_bpf__destroy handles object == NULL case */
@@ -27,7 +28,6 @@
                 int map_fd,
                 CGroupSocketBindItem *head) {
 
-        CGroupSocketBindItem *item;
         uint32_t i = 0;
 
         assert(map_fd >= 0);
@@ -58,7 +58,6 @@
         _cleanup_(socket_bind_bpf_freep) struct socket_bind_bpf *obj = NULL;
         size_t allow_count = 0, deny_count = 0;
         int allow_map_fd, deny_map_fd, r;
-        CGroupSocketBindItem *item;
 
         assert(ret_obj);
 
@@ -70,28 +69,27 @@
 
         if (allow_count > SOCKET_BIND_MAX_RULES)
                 return log_unit_full_errno(u, u ? LOG_ERR : LOG_WARNING, SYNTHETIC_ERRNO(EINVAL),
-                                           "Maximum number of socket bind rules=%u is exceeded", SOCKET_BIND_MAX_RULES);
+                                           "bpf-socket-bind: Maximum number of socket bind rules=%i is exceeded", SOCKET_BIND_MAX_RULES);
 
         if (deny_count > SOCKET_BIND_MAX_RULES)
                 return log_unit_full_errno(u, u ? LOG_ERR : LOG_WARNING, SYNTHETIC_ERRNO(EINVAL),
-                                           "Maximum number of socket bind rules=%u is exceeded", SOCKET_BIND_MAX_RULES);
+                                           "bpf-socket-bind: Maximum number of socket bind rules=%i is exceeded", SOCKET_BIND_MAX_RULES);
 
         obj = socket_bind_bpf__open();
         if (!obj)
-                return log_unit_full_errno(u, u ? LOG_ERR : LOG_DEBUG, SYNTHETIC_ERRNO(ENOMEM),
-                                           "Failed to open BPF object");
+                return log_unit_full_errno(u, u ? LOG_ERR : LOG_DEBUG, errno, "bpf-socket-bind: Failed to open BPF object: %m");
 
-        if (sym_bpf_map__resize(obj->maps.sd_bind_allow, MAX(allow_count, 1u)) != 0)
+        if (sym_bpf_map__set_max_entries(obj->maps.sd_bind_allow, MAX(allow_count, 1u)) != 0)
                 return log_unit_full_errno(u, u ? LOG_ERR : LOG_WARNING, errno,
-                                           "Failed to resize BPF map '%s': %m", sym_bpf_map__name(obj->maps.sd_bind_allow));
+                                           "bpf-socket-bind: Failed to resize BPF map '%s': %m", sym_bpf_map__name(obj->maps.sd_bind_allow));
 
-        if (sym_bpf_map__resize(obj->maps.sd_bind_deny, MAX(deny_count, 1u)) != 0)
+        if (sym_bpf_map__set_max_entries(obj->maps.sd_bind_deny, MAX(deny_count, 1u)) != 0)
                 return log_unit_full_errno(u, u ? LOG_ERR : LOG_WARNING, errno,
-                                           "Failed to resize BPF map '%s': %m", sym_bpf_map__name(obj->maps.sd_bind_deny));
+                                           "bpf-socket-bind: Failed to resize BPF map '%s': %m", sym_bpf_map__name(obj->maps.sd_bind_deny));
 
         if (socket_bind_bpf__load(obj) != 0)
                 return log_unit_full_errno(u, u ? LOG_ERR : LOG_DEBUG, errno,
-                                           "Failed to load BPF object: %m");
+                                           "bpf-socket-bind: Failed to load BPF object: %m");
 
         allow_map_fd = sym_bpf_map__fd(obj->maps.sd_bind_allow);
         assert(allow_map_fd >= 0);
@@ -99,7 +97,7 @@
         r = update_rules_map(allow_map_fd, allow);
         if (r < 0)
                 return log_unit_full_errno(u, u ? LOG_ERR : LOG_WARNING, r,
-                                           "Failed to put socket bind allow rules into BPF map '%s'",
+                                           "bpf-socket-bind: Failed to put socket bind allow rules into BPF map '%s'",
                                            sym_bpf_map__name(obj->maps.sd_bind_allow));
 
         deny_map_fd = sym_bpf_map__fd(obj->maps.sd_bind_deny);
@@ -108,7 +106,7 @@
         r = update_rules_map(deny_map_fd, deny);
         if (r < 0)
                 return log_unit_full_errno(u, u ? LOG_ERR : LOG_WARNING, r,
-                                           "Failed to put socket bind deny rules into BPF map '%s'",
+                                           "bpf-socket-bind: Failed to put socket bind deny rules into BPF map '%s'",
                                            sym_bpf_map__name(obj->maps.sd_bind_deny));
 
         *ret_obj = TAKE_PTR(obj);
@@ -119,25 +117,17 @@
         _cleanup_(socket_bind_bpf_freep) struct socket_bind_bpf *obj = NULL;
         int r;
 
-        r = cg_unified_controller(SYSTEMD_CGROUP_CONTROLLER);
-        if (r < 0)
-                return log_debug_errno(r, "Can't determine whether the unified hierarchy is used: %m");
-        if (r == 0) {
-                log_debug("Not running with unified cgroup hierarchy, BPF is not supported");
-                return false;
-        }
-
-        if (dlopen_bpf() < 0)
+        if (!cgroup_bpf_supported())
                 return false;
 
-        if (!sym_bpf_probe_prog_type(BPF_PROG_TYPE_CGROUP_SOCK_ADDR, /*ifindex=*/0)) {
-                log_debug("BPF program type cgroup_sock_addr is not supported");
+        if (!compat_libbpf_probe_bpf_prog_type(BPF_PROG_TYPE_CGROUP_SOCK_ADDR, /*opts=*/NULL)) {
+                log_debug("bpf-socket-bind: BPF program type cgroup_sock_addr is not supported");
                 return false;
         }
 
         r = prepare_socket_bind_bpf(/*unit=*/NULL, /*allow_rules=*/NULL, /*deny_rules=*/NULL, &obj);
         if (r < 0) {
-                log_debug_errno(r, "BPF based socket_bind is not supported: %m");
+                log_debug_errno(r, "bpf-socket-bind: socket bind filtering is not supported: %m");
                 return false;
         }
 
@@ -157,7 +147,7 @@
 
         r = fdset_put(u->initial_socket_bind_link_fds, fd);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Failed to put socket-bind BPF link fd %d to initial fdset", fd);
+                return log_unit_error_errno(u, r, "bpf-socket-bind: Failed to put BPF fd %d to initial fdset", fd);
 
         return 0;
 }
@@ -166,7 +156,7 @@
         _cleanup_(bpf_link_freep) struct bpf_link *ipv4 = NULL, *ipv6 = NULL;
         _cleanup_(socket_bind_bpf_freep) struct socket_bind_bpf *obj = NULL;
         _cleanup_free_ char *cgroup_path = NULL;
-        _cleanup_close_ int cgroup_fd = -1;
+        _cleanup_close_ int cgroup_fd = -EBADF;
         CGroupContext *cc;
         int r;
 
@@ -178,29 +168,29 @@
 
         r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, NULL, &cgroup_path);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Failed to get cgroup path: %m");
+                return log_unit_error_errno(u, r, "bpf-socket-bind: Failed to get cgroup path: %m");
 
         if (!cc->socket_bind_allow && !cc->socket_bind_deny)
                 return 0;
 
         r = prepare_socket_bind_bpf(u, cc->socket_bind_allow, cc->socket_bind_deny, &obj);
         if (r < 0)
-                return log_unit_error_errno(u, r, "Failed to load BPF object: %m");
+                return log_unit_error_errno(u, r, "bpf-socket-bind: Failed to load BPF object: %m");
 
         cgroup_fd = open(cgroup_path, O_RDONLY | O_CLOEXEC, 0);
         if (cgroup_fd < 0)
-                return log_unit_error_errno(u, errno, "Failed to open cgroup=%s for reading: %m", cgroup_path);
+                return log_unit_error_errno(u, errno, "bpf-socket-bind: Failed to open cgroup %s for reading: %m", cgroup_path);
 
         ipv4 = sym_bpf_program__attach_cgroup(obj->progs.sd_bind4, cgroup_fd);
         r = sym_libbpf_get_error(ipv4);
         if (r != 0)
-                return log_unit_error_errno(u, r, "Failed to link '%s' cgroup-bpf program: %m",
+                return log_unit_error_errno(u, r, "bpf-socket-bind: Failed to link '%s' cgroup-bpf program: %m",
                                             sym_bpf_program__name(obj->progs.sd_bind4));
 
         ipv6 = sym_bpf_program__attach_cgroup(obj->progs.sd_bind6, cgroup_fd);
         r = sym_libbpf_get_error(ipv6);
         if (r != 0)
-                return log_unit_error_errno(u, r, "Failed to link '%s' cgroup-bpf program: %m",
+                return log_unit_error_errno(u, r, "bpf-socket-bind: Failed to link '%s' cgroup-bpf program: %m",
                                             sym_bpf_program__name(obj->progs.sd_bind6));
 
         u->ipv4_socket_bind_link = TAKE_PTR(ipv4);
@@ -244,7 +234,8 @@
 }
 
 int bpf_socket_bind_install(Unit *u) {
-        return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to install socket bind: BPF framework is not supported");
+        return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                    "bpf-socket-bind: Failed to install; BPF framework is not supported");
 }
 
 int bpf_serialize_socket_bind(Unit *u, FILE *f, FDSet *fds) {
diff --git a/src/core/bpf-socket-bind.h b/src/core/bpf-socket-bind.h
index c8c75ad..7d426df 100644
--- a/src/core/bpf-socket-bind.h
+++ b/src/core/bpf-socket-bind.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
 #include "fdset.h"
diff --git a/src/core/bpf-util.c b/src/core/bpf-util.c
new file mode 100644
index 0000000..6fe229e
--- /dev/null
+++ b/src/core/bpf-util.c
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "bpf-dlopen.h"
+#include "bpf-util.h"
+#include "cgroup-util.h"
+#include "initrd-util.h"
+#include "log.h"
+
+bool cgroup_bpf_supported(void) {
+        static int supported = -1;
+        int r;
+
+        if (supported >= 0)
+                return supported;
+
+        r = cg_unified_controller(SYSTEMD_CGROUP_CONTROLLER);
+        if (r < 0) {
+                log_warning_errno(r, "Can't determine whether the unified hierarchy is used: %m");
+                return (supported = false);
+        }
+
+        if (r == 0) {
+                log_info_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                               "Not running with unified cgroup hierarchy, disabling cgroup BPF features.");
+                return (supported = false);
+        }
+
+        r = dlopen_bpf();
+        if (r < 0) {
+                log_full_errno(in_initrd() ? LOG_DEBUG : LOG_INFO,
+                               r, "Failed to open libbpf, cgroup BPF features disabled: %m");
+                return (supported = false);
+        }
+
+        return (supported = true);
+}
diff --git a/src/core/bpf-util.h b/src/core/bpf-util.h
new file mode 100644
index 0000000..a6c55cd
--- /dev/null
+++ b/src/core/bpf-util.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stdbool.h>
+
+bool cgroup_bpf_supported(void);
diff --git a/src/core/bpf/meson.build b/src/core/bpf/meson.build
new file mode 100644
index 0000000..28e7036
--- /dev/null
+++ b/src/core/bpf/meson.build
@@ -0,0 +1,113 @@
+# SPDX-License-Identifier: LGPL-2.1+
+
+if conf.get('BPF_FRAMEWORK') != 1
+        subdir_done()
+endif
+
+bpf_clang_flags = [
+        '-std=gnu11',
+        '-Wno-compare-distinct-pointer-types',
+        '-fno-stack-protector',
+        '-O2',
+        '-target',
+        'bpf',
+        '-g',
+        '-c',
+]
+
+bpf_gcc_flags = [
+        '-std=gnu11',
+        '-fno-stack-protector',
+        '-O2',
+        '-mkernel=5.2',
+        '-mcpu=v3',
+        '-mco-re',
+        '-gbtf',
+        '-c',
+]
+
+# Generate defines that are appropriate to tell the compiler what architecture
+# we're compiling for. By default we just map meson's cpu_family to __<cpu_family>__.
+# This dictionary contains the exceptions where this doesn't work.
+#
+# C.f. https://mesonbuild.com/Reference-tables.html#cpu-families
+# and src/basic/missing_syscall_def.h.
+cpu_arch_defines = {
+        'ppc'     : ['-D__powerpc__'],
+        'ppc64'   : ['-D__powerpc64__', '-D_CALL_ELF=2'],
+        'riscv32' : ['-D__riscv', '-D__riscv_xlen=32'],
+        'riscv64' : ['-D__riscv', '-D__riscv_xlen=64'],
+        'x86'     : ['-D__i386__'],
+
+        # For arm, assume hardware fp is available.
+        'arm'     : ['-D__arm__', '-D__ARM_PCS_VFP'],
+}
+
+bpf_arch_flags = cpu_arch_defines.get(host_machine.cpu_family(),
+                                      ['-D__@0@__'.format(host_machine.cpu_family())])
+if bpf_compiler == 'gcc'
+        bpf_arch_flags += ['-m' + host_machine.endian() + '-endian']
+endif
+
+libbpf_include_dir = libbpf.get_variable(pkgconfig : 'includedir')
+
+bpf_o_unstripped_cmd = []
+if bpf_compiler == 'clang'
+        bpf_o_unstripped_cmd += [
+                clang,
+                bpf_clang_flags,
+                bpf_arch_flags,
+        ]
+elif bpf_compiler == 'gcc'
+        bpf_o_unstripped_cmd += [
+                bpf_gcc,
+                bpf_gcc_flags,
+                bpf_arch_flags,
+        ]
+endif
+
+bpf_o_unstripped_cmd += ['-I.']
+
+if not meson.is_cross_build() and bpf_compiler == 'clang'
+        target_triplet_cmd = run_command('gcc', '-dumpmachine', check: false)
+        if target_triplet_cmd.returncode() == 0
+                target_triplet = target_triplet_cmd.stdout().strip()
+                bpf_o_unstripped_cmd += [
+                        '-isystem',
+                        '/usr/include/@0@'.format(target_triplet)
+                ]
+        endif
+endif
+
+bpf_o_unstripped_cmd += [
+        '-idirafter',
+        libbpf_include_dir,
+        '@INPUT@',
+        '-o',
+        '@OUTPUT@'
+]
+
+if bpftool_strip
+        bpf_o_cmd = [
+                bpftool,
+                'gen',
+                'object',
+                '@OUTPUT@',
+                '@INPUT@'
+        ]
+elif bpf_compiler == 'clang'
+        bpf_o_cmd = [
+                llvm_strip,
+                '-g',
+                '@INPUT@',
+                '-o',
+                '@OUTPUT@'
+        ]
+endif
+
+skel_h_cmd = [
+        bpftool,
+        'gen',
+        'skeleton',
+        '@INPUT@'
+]
diff --git a/src/core/bpf/restrict_fs/meson.build b/src/core/bpf/restrict_fs/meson.build
new file mode 100644
index 0000000..69cde02
--- /dev/null
+++ b/src/core/bpf/restrict_fs/meson.build
@@ -0,0 +1,24 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+if conf.get('BPF_FRAMEWORK') != 1
+        subdir_done()
+endif
+
+restrict_fs_bpf_o_unstripped = custom_target(
+        'restrict-fs.bpf.unstripped.o',
+        input : 'restrict-fs.bpf.c',
+        output : 'restrict-fs.bpf.unstripped.o',
+        command : bpf_o_unstripped_cmd)
+
+restrict_fs_bpf_o = custom_target(
+        'restrict-fs.bpf.o',
+        input : restrict_fs_bpf_o_unstripped,
+        output : 'restrict-fs.bpf.o',
+        command : bpf_o_cmd)
+
+restrict_fs_skel_h = custom_target(
+        'restrict-fs.skel.h',
+        input : restrict_fs_bpf_o,
+        output : 'restrict-fs.skel.h',
+        command : skel_h_cmd,
+        capture : true)
diff --git a/src/core/bpf/restrict_fs/restrict-fs-skel.h b/src/core/bpf/restrict_fs/restrict-fs-skel.h
new file mode 100644
index 0000000..412cf62
--- /dev/null
+++ b/src/core/bpf/restrict_fs/restrict-fs-skel.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/* The SPDX header above is actually correct in claiming this was
+ * LGPL-2.1-or-later, because it is. Since the kernel doesn't consider that
+ * compatible with GPL we will claim this to be GPL however, which should be
+ * fine given that LGPL-2.1-or-later downgrades to GPL if needed.
+ */
+
+/* libbpf is used via dlopen(), so rename symbols */
+#define bpf_object__open_skeleton sym_bpf_object__open_skeleton
+#define bpf_object__load_skeleton sym_bpf_object__load_skeleton
+#define bpf_object__destroy_skeleton sym_bpf_object__destroy_skeleton
+
+#include "bpf/restrict_fs/restrict-fs.skel.h"
diff --git a/src/core/bpf/restrict_fs/restrict-fs.bpf.c b/src/core/bpf/restrict_fs/restrict-fs.bpf.c
new file mode 100644
index 0000000..eb5ed3e
--- /dev/null
+++ b/src/core/bpf/restrict_fs/restrict-fs.bpf.c
@@ -0,0 +1,82 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/* The SPDX header above is actually correct in claiming this was
+ * LGPL-2.1-or-later, because it is. Since the kernel doesn't consider that
+ * compatible with GPL we will claim this to be GPL however, which should be
+ * fine given that LGPL-2.1-or-later downgrades to GPL if needed.
+ */
+
+#include <linux/types.h>
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_core_read.h>
+#include <errno.h>
+#include <stddef.h>
+#include <stdint.h>
+
+struct super_block {
+        unsigned long int s_magic;
+} __attribute__((preserve_access_index));
+
+struct inode {
+        struct super_block *i_sb;
+} __attribute__((preserve_access_index));
+
+struct file {
+        struct inode *f_inode;
+} __attribute__((preserve_access_index));
+
+/*
+ * max_entries is set from user space with the bpf_map__set_max_entries helper.
+ * */
+struct {
+        __uint(type, BPF_MAP_TYPE_HASH_OF_MAPS);
+        __type(key, uint64_t);      /* cgroup ID */
+        __type(value, uint32_t);    /* fs magic set */
+} cgroup_hash SEC(".maps");
+
+SEC("lsm/file_open")
+int BPF_PROG(restrict_filesystems, struct file *file, int ret)
+{
+        unsigned long raw_magic_number;
+        uint64_t cgroup_id;
+        uint32_t *value, *magic_map, magic_number, zero = 0, *is_allow;
+
+        /* ret is the return value from the previous BPF program or 0 if it's
+         * the first hook */
+        if (ret != 0)
+                return ret;
+
+        BPF_CORE_READ_INTO(&raw_magic_number, file, f_inode, i_sb, s_magic);
+        /* super_block.s_magic is unsigned long, but magic_map keys are
+         * uint32_t. Using s_magic as-is would fail on big-endian systems,
+         * which have 64-bit unsigned long. So cast it. */
+        magic_number = (uint32_t)raw_magic_number;
+
+        cgroup_id = bpf_get_current_cgroup_id();
+
+        magic_map = bpf_map_lookup_elem(&cgroup_hash, &cgroup_id);
+        if (!magic_map)
+                return 0;
+
+        is_allow = bpf_map_lookup_elem(magic_map, &zero);
+        if (!is_allow)
+                /* Malformed map, it doesn't include whether it's an allow list
+                 * or a deny list. Allow. */
+                return 0;
+
+        if (*is_allow) {
+                /* Allow-list: Allow access only if magic_number present in inner map */
+                if (!bpf_map_lookup_elem(magic_map, &magic_number))
+                        return -EPERM;
+        } else {
+                /* Deny-list: Allow access only if magic_number is not present in inner map */
+                if (bpf_map_lookup_elem(magic_map, &magic_number))
+                        return -EPERM;
+        }
+
+        return 0;
+}
+
+static const char _license[] SEC("license") = "GPL";
diff --git a/src/core/bpf/restrict_ifaces/meson.build b/src/core/bpf/restrict_ifaces/meson.build
new file mode 100644
index 0000000..5f36178
--- /dev/null
+++ b/src/core/bpf/restrict_ifaces/meson.build
@@ -0,0 +1,24 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+if conf.get('BPF_FRAMEWORK') != 1
+        subdir_done()
+endif
+
+restrict_ifaces_bpf_o_unstripped = custom_target(
+        'restrict-ifaces.bpf.unstripped.o',
+        input : 'restrict-ifaces.bpf.c',
+        output : 'restrict-ifaces.bpf.unstripped.o',
+        command : bpf_o_unstripped_cmd)
+
+restrict_ifaces_bpf_o = custom_target(
+        'restrict-ifaces.bpf.o',
+        input : restrict_ifaces_bpf_o_unstripped,
+        output : 'restrict-ifaces.bpf.o',
+        command : bpf_o_cmd)
+
+restrict_ifaces_skel_h = custom_target(
+        'restrict-ifaces.skel.h',
+        input : restrict_ifaces_bpf_o,
+        output : 'restrict-ifaces.skel.h',
+        command : skel_h_cmd,
+        capture : true)
diff --git a/src/core/bpf/restrict_ifaces/restrict-ifaces-skel.h b/src/core/bpf/restrict_ifaces/restrict-ifaces-skel.h
new file mode 100644
index 0000000..f937490
--- /dev/null
+++ b/src/core/bpf/restrict_ifaces/restrict-ifaces-skel.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/* The SPDX header above is actually correct in claiming this was
+ * LGPL-2.1-or-later, because it is. Since the kernel doesn't consider that
+ * compatible with GPL we will claim this to be GPL however, which should be
+ * fine given that LGPL-2.1-or-later downgrades to GPL if needed.
+ */
+
+/* libbpf is used via dlopen(), so rename symbols */
+#define bpf_object__open_skeleton sym_bpf_object__open_skeleton
+#define bpf_object__load_skeleton sym_bpf_object__load_skeleton
+#define bpf_object__destroy_skeleton sym_bpf_object__destroy_skeleton
+
+#include "bpf/restrict_ifaces/restrict-ifaces.skel.h"
diff --git a/src/core/bpf/restrict_ifaces/restrict-ifaces.bpf.c b/src/core/bpf/restrict_ifaces/restrict-ifaces.bpf.c
new file mode 100644
index 0000000..32cde5c
--- /dev/null
+++ b/src/core/bpf/restrict_ifaces/restrict-ifaces.bpf.c
@@ -0,0 +1,52 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/* <linux/bpf.h> must precede <bpf/bpf_helpers.h> due to integer types
+ * in bpf helpers signatures.
+ */
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+
+const volatile __u8 is_allow_list = 0;
+
+/* Map containing the network interfaces indexes.
+ * The interpretation of the map depends on the value of is_allow_list.
+ */
+struct {
+        __uint(type, BPF_MAP_TYPE_HASH);
+        __type(key, __u32);
+        __type(value, __u8);
+} sd_restrictif SEC(".maps");
+
+#define DROP 0
+#define PASS 1
+
+static __always_inline int restrict_network_interfaces_impl(const struct __sk_buff *sk) {
+        __u32 zero = 0, ifindex;
+        __u8 *lookup_result;
+
+        ifindex = sk->ifindex;
+        lookup_result = bpf_map_lookup_elem(&sd_restrictif, &ifindex);
+        if (is_allow_list) {
+                /* allow-list: let the packet pass if iface in the list */
+                if (lookup_result)
+                        return PASS;
+        } else {
+            /* deny-list: let the packet pass if iface *not* in the list */
+                if (!lookup_result)
+                        return PASS;
+        }
+
+        return DROP;
+}
+
+SEC("cgroup_skb/egress")
+int sd_restrictif_e(const struct __sk_buff *sk) {
+        return restrict_network_interfaces_impl(sk);
+}
+
+SEC("cgroup_skb/ingress")
+int sd_restrictif_i(const struct __sk_buff *sk) {
+        return restrict_network_interfaces_impl(sk);
+}
+
+static const char _license[] SEC("license") = "LGPL-2.1-or-later";
diff --git a/src/core/bpf/socket_bind/meson.build b/src/core/bpf/socket_bind/meson.build
index 0ea8e57..05a2b9d 100644
--- a/src/core/bpf/socket_bind/meson.build
+++ b/src/core/bpf/socket_bind/meson.build
@@ -1,14 +1,24 @@
-# SPDX-License-Identifier: LGPL-2.1+
+# SPDX-License-Identifier: LGPL-2.1-or-later
 
-if conf.get('BPF_FRAMEWORK') == 1
-        socket_bind_skel_h = custom_target(
-                'socket-bind.skel.h',
-                input : 'socket-bind.bpf.c',
-                output : 'socket-bind.skel.h',
-                command : [build_bpf_skel_py,
-                           '--clang_exec', clang.path(),
-                           '--llvm_strip_exec', llvm_strip.path(),
-                           '--bpftool_exec', bpftool.path(),
-                           '--arch', host_machine.cpu_family(),
-                           '@INPUT@', '@OUTPUT@'])
+if conf.get('BPF_FRAMEWORK') != 1
+        subdir_done()
 endif
+
+socket_bind_bpf_o_unstripped = custom_target(
+        'socket-bind.bpf.unstripped.o',
+        input : 'socket-bind.bpf.c',
+        output : 'socket-bind.bpf.unstripped.o',
+        command : bpf_o_unstripped_cmd)
+
+socket_bind_bpf_o = custom_target(
+        'socket-bind.bpf.o',
+        input : socket_bind_bpf_o_unstripped,
+        output : 'socket-bind.bpf.o',
+        command : bpf_o_cmd)
+
+socket_bind_skel_h = custom_target(
+        'socket-bind.skel.h',
+        input : socket_bind_bpf_o,
+        output : 'socket-bind.skel.h',
+        command : skel_h_cmd,
+        capture : true)
diff --git a/src/core/bpf/socket_bind/socket-bind-skel.h b/src/core/bpf/socket_bind/socket-bind-skel.h
new file mode 100644
index 0000000..e0d1626
--- /dev/null
+++ b/src/core/bpf/socket_bind/socket-bind-skel.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/* The SPDX header above is actually correct in claiming this was
+ * LGPL-2.1-or-later, because it is. Since the kernel doesn't consider that
+ * compatible with GPL we will claim this to be GPL however, which should be
+ * fine given that LGPL-2.1-or-later downgrades to GPL if needed.
+ */
+
+/* libbpf is used via dlopen(), so rename symbols */
+#define bpf_object__open_skeleton sym_bpf_object__open_skeleton
+#define bpf_object__load_skeleton sym_bpf_object__load_skeleton
+#define bpf_object__destroy_skeleton sym_bpf_object__destroy_skeleton
+
+#include "bpf/socket_bind/socket-bind.skel.h"
diff --git a/src/core/bpf/socket_bind/socket-bind.bpf.c b/src/core/bpf/socket_bind/socket-bind.bpf.c
index 8004400..b7972a8 100644
--- a/src/core/bpf/socket_bind/socket-bind.bpf.c
+++ b/src/core/bpf/socket_bind/socket-bind.bpf.c
@@ -18,7 +18,7 @@
 #include <stdbool.h>
 
 /*
- * max_entries is set from user space with bpf_map__resize helper.
+ * max_entries is set from user space with bpf_map__set_max_entries helper.
  */
 struct socket_bind_map_t {
         __uint(type, BPF_MAP_TYPE_ARRAY);
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index 6e4780f..4cac3f6 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -13,12 +13,15 @@
 #include "bpf-socket-bind.h"
 #include "btrfs-util.h"
 #include "bus-error.h"
+#include "bus-locator.h"
 #include "cgroup-setup.h"
 #include "cgroup-util.h"
 #include "cgroup.h"
+#include "devnum-util.h"
 #include "fd-util.h"
 #include "fileio.h"
-#include "fs-util.h"
+#include "in-addr-prefix-util.h"
+#include "inotify-util.h"
 #include "io-util.h"
 #include "ip-protocol-list.h"
 #include "limits-util.h"
@@ -28,20 +31,20 @@
 #include "percent-util.h"
 #include "process-util.h"
 #include "procfs-util.h"
+#include "restrict-ifaces.h"
 #include "special.h"
-#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "virt.h"
 
-#define CGROUP_CPU_QUOTA_DEFAULT_PERIOD_USEC ((usec_t) 100 * USEC_PER_MSEC)
+#if BPF_FRAMEWORK
+#include "bpf-dlopen.h"
+#include "bpf-link.h"
+#include "bpf/restrict_fs/restrict-fs-skel.h"
+#endif
 
-/* Special values for the bfq.weight attribute */
-#define CGROUP_BFQ_WEIGHT_INVALID UINT64_MAX
-#define CGROUP_BFQ_WEIGHT_MIN UINT64_C(1)
-#define CGROUP_BFQ_WEIGHT_MAX UINT64_C(1000)
-#define CGROUP_BFQ_WEIGHT_DEFAULT UINT64_C(100)
+#define CGROUP_CPU_QUOTA_DEFAULT_PERIOD_USEC ((usec_t) 100 * USEC_PER_MSEC)
 
 /* Returns the log level to use when cgroup attribute writes fail. When an attribute is missing or we have access
  * problems we downgrade to LOG_DEBUG. This is supposed to be nice to container managers and kernels which want to mask
@@ -72,6 +75,25 @@
         return empty_or_root(m->cgroup_root);
 }
 
+bool unit_has_startup_cgroup_constraints(Unit *u) {
+        assert(u);
+
+        /* Returns true if this unit has any directives which apply during
+         * startup/shutdown phases. */
+
+        CGroupContext *c;
+
+        c = unit_get_cgroup_context(u);
+        if (!c)
+                return false;
+
+        return c->startup_cpu_shares != CGROUP_CPU_SHARES_INVALID ||
+               c->startup_io_weight != CGROUP_WEIGHT_INVALID ||
+               c->startup_blockio_weight != CGROUP_BLKIO_WEIGHT_INVALID ||
+               c->startup_cpuset_cpus.set ||
+               c->startup_cpuset_mems.set;
+}
+
 bool unit_has_host_root_cgroup(Unit *u) {
         assert(u);
 
@@ -129,6 +151,7 @@
                 .memory_high = CGROUP_LIMIT_MAX,
                 .memory_max = CGROUP_LIMIT_MAX,
                 .memory_swap_max = CGROUP_LIMIT_MAX,
+                .memory_zswap_max = CGROUP_LIMIT_MAX,
 
                 .memory_limit = CGROUP_LIMIT_MAX,
 
@@ -243,8 +266,8 @@
         cgroup_context_remove_socket_bind(&c->socket_bind_allow);
         cgroup_context_remove_socket_bind(&c->socket_bind_deny);
 
-        c->ip_address_allow = ip_address_access_free_all(c->ip_address_allow);
-        c->ip_address_deny = ip_address_access_free_all(c->ip_address_deny);
+        c->ip_address_allow = set_free(c->ip_address_allow);
+        c->ip_address_deny = set_free(c->ip_address_deny);
 
         c->ip_filters_ingress = strv_free(c->ip_filters_ingress);
         c->ip_filters_egress = strv_free(c->ip_filters_egress);
@@ -252,8 +275,12 @@
         while (c->bpf_foreign_programs)
                 cgroup_context_remove_bpf_foreign_program(c, c->bpf_foreign_programs);
 
+        c->restrict_network_interfaces = set_free(c->restrict_network_interfaces);
+
         cpu_set_reset(&c->cpuset_cpus);
+        cpu_set_reset(&c->startup_cpuset_cpus);
         cpu_set_reset(&c->cpuset_mems);
+        cpu_set_reset(&c->startup_cpuset_mems);
 }
 
 static int unit_get_kernel_memory_limit(Unit *u, const char *file, uint64_t *ret) {
@@ -328,6 +355,9 @@
         } else if (streq(property_name, "MemorySwapMax")) {
                 unit_value = c->memory_swap_max;
                 file = "memory.swap.max";
+        } else if (streq(property_name, "MemoryZSwapMax")) {
+                unit_value = c->memory_zswap_max;
+                file = "memory.zswap.max";
         } else
                 return -EINVAL;
 
@@ -370,38 +400,24 @@
 
         /* memory.swap.max is special in that it relies on CONFIG_MEMCG_SWAP (and the default swapaccount=1).
          * In the absence of reliably being able to detect whether memcg swap support is available or not,
-         * only complain if the error is not ENOENT. */
+         * only complain if the error is not ENOENT. This is similarly the case for memory.zswap.max relying
+         * on CONFIG_ZSWAP. */
         if (r > 0 || IN_SET(r, -ENODATA, -EOWNERDEAD) ||
-            (r == -ENOENT && streq(property_name, "MemorySwapMax"))) {
+            (r == -ENOENT && STR_IN_SET(property_name, "MemorySwapMax", "MemoryZSwapMax")))
                 buf[0] = 0;
-                return buf;
-        }
-
-        if (r < 0) {
-                snprintf(buf, l, " (error getting kernel value: %s)", strerror_safe(r));
-                return buf;
-        }
-
-        snprintf(buf, l, " (different value in kernel: %" PRIu64 ")", kval);
+        else if (r < 0) {
+                errno = -r;
+                (void) snprintf(buf, l, " (error getting kernel value: %m)");
+        } else
+                (void) snprintf(buf, l, " (different value in kernel: %" PRIu64 ")", kval);
 
         return buf;
 }
 
 void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
-        _cleanup_free_ char *disable_controllers_str = NULL, *cpuset_cpus = NULL, *cpuset_mems = NULL;
-        CGroupIODeviceLimit *il;
-        CGroupIODeviceWeight *iw;
-        CGroupIODeviceLatency *l;
-        CGroupBlockIODeviceBandwidth *b;
-        CGroupBlockIODeviceWeight *w;
-        CGroupBPFForeignProgram *p;
-        CGroupDeviceAllow *a;
+        _cleanup_free_ char *disable_controllers_str = NULL, *cpuset_cpus = NULL, *cpuset_mems = NULL, *startup_cpuset_cpus = NULL, *startup_cpuset_mems = NULL;
         CGroupContext *c;
-        CGroupSocketBindItem *bi;
-        IPAddressAccessItem *iaai;
-        char **path;
-        char q[FORMAT_TIMESPAN_MAX];
-        char v[FORMAT_TIMESPAN_MAX];
+        struct in_addr_prefix *iaai;
 
         char cda[FORMAT_CGROUP_DIFF_MAX];
         char cdb[FORMAT_CGROUP_DIFF_MAX];
@@ -419,7 +435,9 @@
         (void) cg_mask_to_string(c->disable_controllers, &disable_controllers_str);
 
         cpuset_cpus = cpu_set_to_range_string(&c->cpuset_cpus);
+        startup_cpuset_cpus = cpu_set_to_range_string(&c->startup_cpuset_cpus);
         cpuset_mems = cpu_set_to_range_string(&c->cpuset_mems);
+        startup_cpuset_mems = cpu_set_to_range_string(&c->startup_cpuset_mems);
 
         fprintf(f,
                 "%sCPUAccounting: %s\n"
@@ -435,7 +453,9 @@
                 "%sCPUQuotaPerSecSec: %s\n"
                 "%sCPUQuotaPeriodSec: %s\n"
                 "%sAllowedCPUs: %s\n"
+                "%sStartupAllowedCPUs: %s\n"
                 "%sAllowedMemoryNodes: %s\n"
+                "%sStartupAllowedMemoryNodes: %s\n"
                 "%sIOWeight: %" PRIu64 "\n"
                 "%sStartupIOWeight: %" PRIu64 "\n"
                 "%sBlockIOWeight: %" PRIu64 "\n"
@@ -447,6 +467,7 @@
                 "%sMemoryHigh: %" PRIu64 "%s\n"
                 "%sMemoryMax: %" PRIu64 "%s\n"
                 "%sMemorySwapMax: %" PRIu64 "%s\n"
+                "%sMemoryZSwapMax: %" PRIu64 "%s\n"
                 "%sMemoryLimit: %" PRIu64 "\n"
                 "%sTasksMax: %" PRIu64 "\n"
                 "%sDevicePolicy: %s\n"
@@ -466,10 +487,12 @@
                 prefix, c->startup_cpu_weight,
                 prefix, c->cpu_shares,
                 prefix, c->startup_cpu_shares,
-                prefix, format_timespan(q, sizeof(q), c->cpu_quota_per_sec_usec, 1),
-                prefix, format_timespan(v, sizeof(v), c->cpu_quota_period_usec, 1),
+                prefix, FORMAT_TIMESPAN(c->cpu_quota_per_sec_usec, 1),
+                prefix, FORMAT_TIMESPAN(c->cpu_quota_period_usec, 1),
                 prefix, strempty(cpuset_cpus),
+                prefix, strempty(startup_cpuset_cpus),
                 prefix, strempty(cpuset_mems),
+                prefix, strempty(startup_cpuset_mems),
                 prefix, c->io_weight,
                 prefix, c->startup_io_weight,
                 prefix, c->blockio_weight,
@@ -481,6 +504,7 @@
                 prefix, c->memory_high, format_cgroup_memory_limit_comparison(cdc, sizeof(cdc), u, "MemoryHigh"),
                 prefix, c->memory_max, format_cgroup_memory_limit_comparison(cdd, sizeof(cdd), u, "MemoryMax"),
                 prefix, c->memory_swap_max, format_cgroup_memory_limit_comparison(cde, sizeof(cde), u, "MemorySwapMax"),
+                prefix, c->memory_zswap_max, format_cgroup_memory_limit_comparison(cde, sizeof(cde), u, "MemoryZSwapMax"),
                 prefix, c->memory_limit,
                 prefix, tasks_max_resolve(&c->tasks_max),
                 prefix, cgroup_device_policy_to_string(c->device_policy),
@@ -520,11 +544,9 @@
                         "%sIODeviceLatencyTargetSec: %s %s\n",
                         prefix,
                         l->path,
-                        format_timespan(q, sizeof(q), l->target_usec, 1));
+                        FORMAT_TIMESPAN(l->target_usec, 1));
 
-        LIST_FOREACH(device_limits, il, c->io_device_limits) {
-                char buf[FORMAT_BYTES_MAX];
-
+        LIST_FOREACH(device_limits, il, c->io_device_limits)
                 for (CGroupIOLimitType type = 0; type < _CGROUP_IO_LIMIT_TYPE_MAX; type++)
                         if (il->limits[type] != cgroup_io_limit_defaults[type])
                                 fprintf(f,
@@ -532,8 +554,7 @@
                                         prefix,
                                         cgroup_io_limit_type_to_string(type),
                                         il->path,
-                                        format_bytes(buf, sizeof(buf), il->limits[type]));
-        }
+                                        FORMAT_BYTES(il->limits[type]));
 
         LIST_FOREACH(device_weights, w, c->blockio_device_weights)
                 fprintf(f,
@@ -543,39 +564,29 @@
                         w->weight);
 
         LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths) {
-                char buf[FORMAT_BYTES_MAX];
-
                 if (b->rbps != CGROUP_LIMIT_MAX)
                         fprintf(f,
                                 "%sBlockIOReadBandwidth: %s %s\n",
                                 prefix,
                                 b->path,
-                                format_bytes(buf, sizeof(buf), b->rbps));
+                                FORMAT_BYTES(b->rbps));
                 if (b->wbps != CGROUP_LIMIT_MAX)
                         fprintf(f,
                                 "%sBlockIOWriteBandwidth: %s %s\n",
                                 prefix,
                                 b->path,
-                                format_bytes(buf, sizeof(buf), b->wbps));
+                                FORMAT_BYTES(b->wbps));
         }
 
-        LIST_FOREACH(items, iaai, c->ip_address_allow) {
-                _cleanup_free_ char *k = NULL;
-
-                (void) in_addr_to_string(iaai->family, &iaai->address, &k);
-                fprintf(f, "%sIPAddressAllow: %s/%u\n", prefix, strnull(k), iaai->prefixlen);
-        }
-
-        LIST_FOREACH(items, iaai, c->ip_address_deny) {
-                _cleanup_free_ char *k = NULL;
-
-                (void) in_addr_to_string(iaai->family, &iaai->address, &k);
-                fprintf(f, "%sIPAddressDeny: %s/%u\n", prefix, strnull(k), iaai->prefixlen);
-        }
+        SET_FOREACH(iaai, c->ip_address_allow)
+                fprintf(f, "%sIPAddressAllow: %s\n", prefix,
+                        IN_ADDR_PREFIX_TO_STRING(iaai->family, &iaai->address, iaai->prefixlen));
+        SET_FOREACH(iaai, c->ip_address_deny)
+                fprintf(f, "%sIPAddressDeny: %s\n", prefix,
+                        IN_ADDR_PREFIX_TO_STRING(iaai->family, &iaai->address, iaai->prefixlen));
 
         STRV_FOREACH(path, c->ip_filters_ingress)
                 fprintf(f, "%sIPIngressFilterPath: %s\n", prefix, *path);
-
         STRV_FOREACH(path, c->ip_filters_egress)
                 fprintf(f, "%sIPEgressFilterPath: %s\n", prefix, *path);
 
@@ -596,6 +607,12 @@
                         cgroup_context_dump_socket_bind_item(bi, f);
                 fputc('\n', f);
         }
+
+        if (c->restrict_network_interfaces) {
+                char *iface;
+                SET_FOREACH(iface, c->restrict_network_interfaces)
+                        fprintf(f, "%sRestrictNetworkInterfaces: %s\n", prefix, iface);
+        }
 }
 
 void cgroup_context_dump_socket_bind_item(const CGroupSocketBindItem *item, FILE *f) {
@@ -706,9 +723,44 @@
 UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_low);
 UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_min);
 
+static void unit_set_xattr_graceful(Unit *u, const char *cgroup_path, const char *name, const void *data, size_t size) {
+        int r;
+
+        assert(u);
+        assert(name);
+
+        if (!cgroup_path) {
+                if (!u->cgroup_path)
+                        return;
+
+                cgroup_path = u->cgroup_path;
+        }
+
+        r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, name, data, size, 0);
+        if (r < 0)
+                log_unit_debug_errno(u, r, "Failed to set '%s' xattr on control group %s, ignoring: %m", name, empty_to_root(cgroup_path));
+}
+
+static void unit_remove_xattr_graceful(Unit *u, const char *cgroup_path, const char *name) {
+        int r;
+
+        assert(u);
+        assert(name);
+
+        if (!cgroup_path) {
+                if (!u->cgroup_path)
+                        return;
+
+                cgroup_path = u->cgroup_path;
+        }
+
+        r = cg_remove_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, name);
+        if (r < 0 && !ERRNO_IS_XATTR_ABSENT(r))
+                log_unit_debug_errno(u, r, "Failed to remove '%s' xattr flag on control group %s, ignoring: %m", name, empty_to_root(cgroup_path));
+}
+
 void cgroup_oomd_xattr_apply(Unit *u, const char *cgroup_path) {
         CGroupContext *c;
-        int r;
 
         assert(u);
 
@@ -716,63 +768,100 @@
         if (!c)
                 return;
 
-        if (c->moom_preference == MANAGED_OOM_PREFERENCE_OMIT) {
-                r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, "user.oomd_omit", "1", 1, 0);
-                if (r < 0)
-                        log_unit_debug_errno(u, r, "Failed to set oomd_omit flag on control group %s, ignoring: %m", empty_to_root(cgroup_path));
-        }
+        if (c->moom_preference == MANAGED_OOM_PREFERENCE_OMIT)
+                unit_set_xattr_graceful(u, cgroup_path, "user.oomd_omit", "1", 1);
 
-        if (c->moom_preference == MANAGED_OOM_PREFERENCE_AVOID) {
-                r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, "user.oomd_avoid", "1", 1, 0);
-                if (r < 0)
-                        log_unit_debug_errno(u, r, "Failed to set oomd_avoid flag on control group %s, ignoring: %m", empty_to_root(cgroup_path));
-        }
+        if (c->moom_preference == MANAGED_OOM_PREFERENCE_AVOID)
+                unit_set_xattr_graceful(u, cgroup_path, "user.oomd_avoid", "1", 1);
 
-        if (c->moom_preference != MANAGED_OOM_PREFERENCE_AVOID) {
-                r = cg_remove_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, "user.oomd_avoid");
-                if (r < 0 && r != -ENODATA)
-                        log_unit_debug_errno(u, r, "Failed to remove oomd_avoid flag on control group %s, ignoring: %m", empty_to_root(cgroup_path));
-        }
+        if (c->moom_preference != MANAGED_OOM_PREFERENCE_AVOID)
+                unit_remove_xattr_graceful(u, cgroup_path, "user.oomd_avoid");
 
-        if (c->moom_preference != MANAGED_OOM_PREFERENCE_OMIT) {
-                r = cg_remove_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, "user.oomd_omit");
-                if (r < 0 && r != -ENODATA)
-                        log_unit_debug_errno(u, r, "Failed to remove oomd_omit flag on control group %s, ignoring: %m", empty_to_root(cgroup_path));
-        }
+        if (c->moom_preference != MANAGED_OOM_PREFERENCE_OMIT)
+                unit_remove_xattr_graceful(u, cgroup_path, "user.oomd_omit");
 }
 
-static void cgroup_xattr_apply(Unit *u) {
-        char ids[SD_ID128_STRING_MAX];
+int cgroup_log_xattr_apply(Unit *u, const char *cgroup_path) {
+        ExecContext *c;
+        size_t len, allowed_patterns_len, denied_patterns_len;
+        _cleanup_free_ char *patterns = NULL, *allowed_patterns = NULL, *denied_patterns = NULL;
+        char *last;
         int r;
 
         assert(u);
 
+        c = unit_get_exec_context(u);
+        if (!c)
+                /* Some unit types have a cgroup context but no exec context, so we do not log
+                 * any error here to avoid confusion. */
+                return 0;
+
+        if (set_isempty(c->log_filter_allowed_patterns) && set_isempty(c->log_filter_denied_patterns)) {
+                unit_remove_xattr_graceful(u, cgroup_path, "user.journald_log_filter_patterns");
+                return 0;
+        }
+
+        r = set_make_nulstr(c->log_filter_allowed_patterns, &allowed_patterns, &allowed_patterns_len);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to make nulstr from set: %m");
+
+        r = set_make_nulstr(c->log_filter_denied_patterns, &denied_patterns, &denied_patterns_len);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to make nulstr from set: %m");
+
+        /* Use nul character separated strings without trailing nul */
+        allowed_patterns_len = LESS_BY(allowed_patterns_len, 1u);
+        denied_patterns_len = LESS_BY(denied_patterns_len, 1u);
+
+        len = allowed_patterns_len + 1 + denied_patterns_len;
+        patterns = new(char, len);
+        if (!patterns)
+                return log_oom_debug();
+
+        last = mempcpy_safe(patterns, allowed_patterns, allowed_patterns_len);
+        *(last++) = '\xff';
+        memcpy_safe(last, denied_patterns, denied_patterns_len);
+
+        unit_set_xattr_graceful(u, cgroup_path, "user.journald_log_filter_patterns", patterns, len);
+
+        return 0;
+}
+
+static void cgroup_xattr_apply(Unit *u) {
+        bool b;
+
+        assert(u);
+
+        /* The 'user.*' xattrs can be set from a user manager. */
+        cgroup_oomd_xattr_apply(u, u->cgroup_path);
+        cgroup_log_xattr_apply(u, u->cgroup_path);
+
         if (!MANAGER_IS_SYSTEM(u->manager))
                 return;
 
-        if (!sd_id128_is_null(u->invocation_id)) {
-                r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path,
-                                 "trusted.invocation_id",
-                                 sd_id128_to_string(u->invocation_id, ids), 32,
-                                 0);
-                if (r < 0)
-                        log_unit_debug_errno(u, r, "Failed to set invocation ID on control group %s, ignoring: %m", empty_to_root(u->cgroup_path));
+        b = !sd_id128_is_null(u->invocation_id);
+        FOREACH_STRING(xn, "trusted.invocation_id", "user.invocation_id") {
+                if (b)
+                        unit_set_xattr_graceful(u, NULL, xn, SD_ID128_TO_STRING(u->invocation_id), 32);
+                else
+                        unit_remove_xattr_graceful(u, NULL, xn);
         }
 
-        if (unit_cgroup_delegate(u)) {
-                r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path,
-                                 "trusted.delegate",
-                                 "1", 1,
-                                 0);
-                if (r < 0)
-                        log_unit_debug_errno(u, r, "Failed to set delegate flag on control group %s, ignoring: %m", empty_to_root(u->cgroup_path));
-        } else {
-                r = cg_remove_xattr(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "trusted.delegate");
-                if (r < 0 && r != -ENODATA)
-                        log_unit_debug_errno(u, r, "Failed to remove delegate flag on control group %s, ignoring: %m", empty_to_root(u->cgroup_path));
+        /* Indicate on the cgroup whether delegation is on, via an xattr. This is best-effort, as old kernels
+         * didn't support xattrs on cgroups at all. Later they got support for setting 'trusted.*' xattrs,
+         * and even later 'user.*' xattrs. We started setting this field when 'trusted.*' was added, and
+         * given this is now pretty much API, let's continue to support that. But also set 'user.*' as well,
+         * since it is readable by any user, not just CAP_SYS_ADMIN. This hence comes with slightly weaker
+         * security (as users who got delegated cgroups could turn it off if they like), but this shouldn't
+         * be a big problem given this communicates delegation state to clients, but the manager never reads
+         * it. */
+        b = unit_cgroup_delegate(u);
+        FOREACH_STRING(xn, "trusted.delegate", "user.delegate") {
+                if (b)
+                        unit_set_xattr_graceful(u, NULL, xn, "1", 1);
+                else
+                        unit_remove_xattr_graceful(u, NULL, xn);
         }
-
-        cgroup_oomd_xattr_apply(u, u->cgroup_path);
 }
 
 static int lookup_block_device(const char *p, dev_t *ret) {
@@ -831,8 +920,16 @@
                 c->startup_cpu_shares != CGROUP_CPU_SHARES_INVALID;
 }
 
+static bool cgroup_context_has_allowed_cpus(CGroupContext *c) {
+        return c->cpuset_cpus.set || c->startup_cpuset_cpus.set;
+}
+
+static bool cgroup_context_has_allowed_mems(CGroupContext *c) {
+        return c->cpuset_mems.set || c->startup_cpuset_mems.set;
+}
+
 static uint64_t cgroup_context_cpu_weight(CGroupContext *c, ManagerState state) {
-        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING) &&
+        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING) &&
             c->startup_cpu_weight != CGROUP_WEIGHT_INVALID)
                 return c->startup_cpu_weight;
         else if (c->cpu_weight != CGROUP_WEIGHT_INVALID)
@@ -842,7 +939,7 @@
 }
 
 static uint64_t cgroup_context_cpu_shares(CGroupContext *c, ManagerState state) {
-        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING) &&
+        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING) &&
             c->startup_cpu_shares != CGROUP_CPU_SHARES_INVALID)
                 return c->startup_cpu_shares;
         else if (c->cpu_shares != CGROUP_CPU_SHARES_INVALID)
@@ -851,6 +948,22 @@
                 return CGROUP_CPU_SHARES_DEFAULT;
 }
 
+static CPUSet *cgroup_context_allowed_cpus(CGroupContext *c, ManagerState state) {
+        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING) &&
+            c->startup_cpuset_cpus.set)
+                return &c->startup_cpuset_cpus;
+        else
+                return &c->cpuset_cpus;
+}
+
+static CPUSet *cgroup_context_allowed_mems(CGroupContext *c, ManagerState state) {
+        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING) &&
+            c->startup_cpuset_mems.set)
+                return &c->startup_cpuset_mems;
+        else
+                return &c->cpuset_mems;
+}
+
 usec_t cgroup_cpu_adjust_period(usec_t period, usec_t quota, usec_t resolution, usec_t max_period) {
         /* kernel uses a minimum resolution of 1ms, so both period and (quota * period)
          * need to be higher than that boundary. quota is specified in USecPerSec.
@@ -875,10 +988,9 @@
         new_period = cgroup_cpu_adjust_period(period, quota, USEC_PER_MSEC, USEC_PER_SEC);
 
         if (new_period != period) {
-                char v[FORMAT_TIMESPAN_MAX];
                 log_unit_full(u, u->warned_clamping_cpu_quota_period ? LOG_DEBUG : LOG_WARNING,
                               "Clamping CPU interval for cpu.max: period is now %s",
-                              format_timespan(v, sizeof(v), new_period, 1));
+                              FORMAT_TIMESPAN(new_period, 1));
                 u->warned_clamping_cpu_quota_period = true;
         }
 
@@ -888,10 +1000,25 @@
 static void cgroup_apply_unified_cpu_weight(Unit *u, uint64_t weight) {
         char buf[DECIMAL_STR_MAX(uint64_t) + 2];
 
+        if (weight == CGROUP_WEIGHT_IDLE)
+                return;
         xsprintf(buf, "%" PRIu64 "\n", weight);
         (void) set_attribute_and_warn(u, "cpu", "cpu.weight", buf);
 }
 
+static void cgroup_apply_unified_cpu_idle(Unit *u, uint64_t weight) {
+        int r;
+        bool is_idle;
+        const char *idle_val;
+
+        is_idle = weight == CGROUP_WEIGHT_IDLE;
+        idle_val = one_zero(is_idle);
+        r = cg_set_attribute("cpu", u->cgroup_path, "cpu.idle", idle_val);
+        if (r < 0 && (r != -ENOENT || is_idle))
+                log_unit_full_errno(u, LOG_LEVEL_CGROUP_WRITE(r), r, "Failed to set '%s' attribute on '%s' to '%s': %m",
+                                    "cpu.idle", empty_to_root(u->cgroup_path), idle_val);
+}
+
 static void cgroup_apply_unified_cpu_quota(Unit *u, usec_t quota, usec_t period) {
         char buf[(DECIMAL_STR_MAX(usec_t) + 1) * 2 + 1];
 
@@ -932,6 +1059,10 @@
 }
 
 static uint64_t cgroup_cpu_weight_to_shares(uint64_t weight) {
+        /* we don't support idle in cgroupv1 */
+        if (weight == CGROUP_WEIGHT_IDLE)
+                return CGROUP_CPU_SHARES_MIN;
+
         return CLAMP(weight * CGROUP_CPU_SHARES_DEFAULT / CGROUP_WEIGHT_DEFAULT,
                      CGROUP_CPU_SHARES_MIN, CGROUP_CPU_SHARES_MAX);
 }
@@ -966,23 +1097,21 @@
 }
 
 static uint64_t cgroup_context_io_weight(CGroupContext *c, ManagerState state) {
-        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING) &&
+        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING) &&
             c->startup_io_weight != CGROUP_WEIGHT_INVALID)
                 return c->startup_io_weight;
-        else if (c->io_weight != CGROUP_WEIGHT_INVALID)
+        if (c->io_weight != CGROUP_WEIGHT_INVALID)
                 return c->io_weight;
-        else
-                return CGROUP_WEIGHT_DEFAULT;
+        return CGROUP_WEIGHT_DEFAULT;
 }
 
 static uint64_t cgroup_context_blkio_weight(CGroupContext *c, ManagerState state) {
-        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING) &&
+        if (IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING) &&
             c->startup_blockio_weight != CGROUP_BLKIO_WEIGHT_INVALID)
                 return c->startup_blockio_weight;
-        else if (c->blockio_weight != CGROUP_BLKIO_WEIGHT_INVALID)
+        if (c->blockio_weight != CGROUP_BLKIO_WEIGHT_INVALID)
                 return c->blockio_weight;
-        else
-                return CGROUP_BLKIO_WEIGHT_DEFAULT;
+        return CGROUP_BLKIO_WEIGHT_DEFAULT;
 }
 
 static uint64_t cgroup_weight_blkio_to_io(uint64_t blkio_weight) {
@@ -995,17 +1124,70 @@
                      CGROUP_BLKIO_WEIGHT_MIN, CGROUP_BLKIO_WEIGHT_MAX);
 }
 
+static int set_bfq_weight(Unit *u, const char *controller, dev_t dev, uint64_t io_weight) {
+        static const char * const prop_names[] = {
+                "IOWeight",
+                "BlockIOWeight",
+                "IODeviceWeight",
+                "BlockIODeviceWeight",
+        };
+        static bool warned = false;
+        char buf[DECIMAL_STR_MAX(dev_t)*2+2+DECIMAL_STR_MAX(uint64_t)+STRLEN("\n")];
+        const char *p;
+        uint64_t bfq_weight;
+        int r;
+
+        /* FIXME: drop this function when distro kernels properly support BFQ through "io.weight"
+         * See also: https://github.com/systemd/systemd/pull/13335 and
+         * https://github.com/torvalds/linux/commit/65752aef0a407e1ef17ec78a7fc31ba4e0b360f9. */
+        p = strjoina(controller, ".bfq.weight");
+        /* Adjust to kernel range is 1..1000, the default is 100. */
+        bfq_weight = BFQ_WEIGHT(io_weight);
+
+        if (major(dev) > 0)
+                xsprintf(buf, DEVNUM_FORMAT_STR " %" PRIu64 "\n", DEVNUM_FORMAT_VAL(dev), bfq_weight);
+        else
+                xsprintf(buf, "%" PRIu64 "\n", bfq_weight);
+
+        r = cg_set_attribute(controller, u->cgroup_path, p, buf);
+
+        /* FIXME: drop this when kernels prior
+         * 795fe54c2a82 ("bfq: Add per-device weight") v5.4
+         * are not interesting anymore. Old kernels will fail with EINVAL, while new kernels won't return
+         * EINVAL on properly formatted input by us. Treat EINVAL accordingly. */
+        if (r == -EINVAL && major(dev) > 0) {
+               if (!warned) {
+                        log_unit_warning(u, "Kernel version does not accept per-device setting in %s.", p);
+                        warned = true;
+               }
+               r = -EOPNOTSUPP; /* mask as unconfigured device */
+        } else if (r >= 0 && io_weight != bfq_weight)
+                log_unit_debug(u, "%s=%" PRIu64 " scaled to %s=%" PRIu64,
+                               prop_names[2*(major(dev) > 0) + streq(controller, "blkio")],
+                               io_weight, p, bfq_weight);
+        return r;
+}
+
 static void cgroup_apply_io_device_weight(Unit *u, const char *dev_path, uint64_t io_weight) {
         char buf[DECIMAL_STR_MAX(dev_t)*2+2+DECIMAL_STR_MAX(uint64_t)+1];
         dev_t dev;
-        int r;
+        int r, r1, r2;
 
-        r = lookup_block_device(dev_path, &dev);
-        if (r < 0)
+        if (lookup_block_device(dev_path, &dev) < 0)
                 return;
 
-        xsprintf(buf, "%u:%u %" PRIu64 "\n", major(dev), minor(dev), io_weight);
-        (void) set_attribute_and_warn(u, "io", "io.weight", buf);
+        r1 = set_bfq_weight(u, "io", dev, io_weight);
+
+        xsprintf(buf, DEVNUM_FORMAT_STR " %" PRIu64 "\n", DEVNUM_FORMAT_VAL(dev), io_weight);
+        r2 = cg_set_attribute("io", u->cgroup_path, "io.weight", buf);
+
+        /* Look at the configured device, when both fail, prefer io.weight errno. */
+        r = r2 == -EOPNOTSUPP ? r1 : r2;
+
+        if (r < 0)
+                log_unit_full_errno(u, LOG_LEVEL_CGROUP_WRITE(r),
+                                    r, "Failed to set 'io[.bfq].weight' attribute on '%s' to '%.*s': %m",
+                                    empty_to_root(u->cgroup_path), (int) strcspn(buf, NEWLINE), buf);
 }
 
 static void cgroup_apply_blkio_device_weight(Unit *u, const char *dev_path, uint64_t blkio_weight) {
@@ -1017,7 +1199,7 @@
         if (r < 0)
                 return;
 
-        xsprintf(buf, "%u:%u %" PRIu64 "\n", major(dev), minor(dev), blkio_weight);
+        xsprintf(buf, DEVNUM_FORMAT_STR " %" PRIu64 "\n", DEVNUM_FORMAT_VAL(dev), blkio_weight);
         (void) set_attribute_and_warn(u, "blkio", "blkio.weight_device", buf);
 }
 
@@ -1031,9 +1213,9 @@
                 return;
 
         if (target != USEC_INFINITY)
-                xsprintf(buf, "%u:%u target=%" PRIu64 "\n", major(dev), minor(dev), target);
+                xsprintf(buf, DEVNUM_FORMAT_STR " target=%" PRIu64 "\n", DEVNUM_FORMAT_VAL(dev), target);
         else
-                xsprintf(buf, "%u:%u target=max\n", major(dev), minor(dev));
+                xsprintf(buf, DEVNUM_FORMAT_STR " target=max\n", DEVNUM_FORMAT_VAL(dev));
 
         (void) set_attribute_and_warn(u, "io", "io.latency", buf);
 }
@@ -1052,7 +1234,7 @@
                 else
                         xsprintf(limit_bufs[type], "%s", limits[type] == CGROUP_LIMIT_MAX ? "max" : "0");
 
-        xsprintf(buf, "%u:%u rbps=%s wbps=%s riops=%s wiops=%s\n", major(dev), minor(dev),
+        xsprintf(buf, DEVNUM_FORMAT_STR " rbps=%s wbps=%s riops=%s wiops=%s\n", DEVNUM_FORMAT_VAL(dev),
                  limit_bufs[CGROUP_IO_RBPS_MAX], limit_bufs[CGROUP_IO_WBPS_MAX],
                  limit_bufs[CGROUP_IO_RIOPS_MAX], limit_bufs[CGROUP_IO_WIOPS_MAX]);
         (void) set_attribute_and_warn(u, "io", "io.max", buf);
@@ -1065,10 +1247,10 @@
         if (lookup_block_device(dev_path, &dev) < 0)
                 return;
 
-        sprintf(buf, "%u:%u %" PRIu64 "\n", major(dev), minor(dev), rbps);
+        sprintf(buf, DEVNUM_FORMAT_STR " %" PRIu64 "\n", DEVNUM_FORMAT_VAL(dev), rbps);
         (void) set_attribute_and_warn(u, "blkio", "blkio.throttle.read_bps_device", buf);
 
-        sprintf(buf, "%u:%u %" PRIu64 "\n", major(dev), minor(dev), wbps);
+        sprintf(buf, DEVNUM_FORMAT_STR " %" PRIu64 "\n", DEVNUM_FORMAT_VAL(dev), wbps);
         (void) set_attribute_and_warn(u, "blkio", "blkio.throttle.write_bps_device", buf);
 }
 
@@ -1081,7 +1263,7 @@
 
         return unit_get_ancestor_memory_min(u) > 0 || unit_get_ancestor_memory_low(u) > 0 ||
                c->memory_high != CGROUP_LIMIT_MAX || c->memory_max != CGROUP_LIMIT_MAX ||
-               c->memory_swap_max != CGROUP_LIMIT_MAX;
+               c->memory_swap_max != CGROUP_LIMIT_MAX || c->memory_zswap_max != CGROUP_LIMIT_MAX;
 }
 
 static void cgroup_apply_unified_memory_limit(Unit *u, const char *file, uint64_t v) {
@@ -1111,11 +1293,16 @@
         (void) bpf_socket_bind_install(u);
 }
 
+static void cgroup_apply_restrict_network_interfaces(Unit *u) {
+        assert(u);
+
+        (void) restrict_network_interfaces_install(u);
+}
+
 static int cgroup_apply_devices(Unit *u) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
         const char *path;
         CGroupContext *c;
-        CGroupDeviceAllow *a;
         CGroupDevicePolicy policy;
         int r;
 
@@ -1186,7 +1373,7 @@
                 policy = CGROUP_DEVICE_POLICY_STRICT;
         }
 
-        r = bpf_devices_apply_policy(prog, policy, any, path, &u->bpf_device_control_installed);
+        r = bpf_devices_apply_policy(&prog, policy, any, path, &u->bpf_device_control_installed);
         if (r < 0) {
                 static bool warned = false;
 
@@ -1200,30 +1387,12 @@
         return r;
 }
 
-/* Convert the normal io.weight value to io.bfq.weight */
-#define BFQ_WEIGHT(weight) \
-        (weight <= CGROUP_WEIGHT_DEFAULT ? \
-         CGROUP_BFQ_WEIGHT_DEFAULT - (CGROUP_WEIGHT_DEFAULT - weight) * (CGROUP_BFQ_WEIGHT_DEFAULT - CGROUP_BFQ_WEIGHT_MIN) / (CGROUP_WEIGHT_DEFAULT - CGROUP_WEIGHT_MIN) : \
-         CGROUP_BFQ_WEIGHT_DEFAULT + (weight - CGROUP_WEIGHT_DEFAULT) * (CGROUP_BFQ_WEIGHT_MAX - CGROUP_BFQ_WEIGHT_DEFAULT) / (CGROUP_WEIGHT_MAX - CGROUP_WEIGHT_DEFAULT))
-
-assert_cc(BFQ_WEIGHT(1) == 1);
-assert_cc(BFQ_WEIGHT(50) == 50);
-assert_cc(BFQ_WEIGHT(100) == 100);
-assert_cc(BFQ_WEIGHT(500) == 136);
-assert_cc(BFQ_WEIGHT(5000) == 545);
-assert_cc(BFQ_WEIGHT(10000) == 1000);
-
 static void set_io_weight(Unit *u, uint64_t weight) {
         char buf[STRLEN("default \n")+DECIMAL_STR_MAX(uint64_t)];
 
         assert(u);
 
-        /* FIXME: drop this when distro kernels properly support BFQ through "io.weight"
-         * See also: https://github.com/systemd/systemd/pull/13335 and
-         * https://github.com/torvalds/linux/commit/65752aef0a407e1ef17ec78a7fc31ba4e0b360f9.
-         * The range is 1..1000 apparently, and the default is 100. */
-        xsprintf(buf, "%" PRIu64 "\n", BFQ_WEIGHT(weight));
-        (void) set_attribute_and_warn(u, "io", "io.bfq.weight", buf);
+        (void) set_bfq_weight(u, "io", makedev(0, 0), weight);
 
         xsprintf(buf, "default %" PRIu64 "\n", weight);
         (void) set_attribute_and_warn(u, "io", "io.weight", buf);
@@ -1234,9 +1403,7 @@
 
         assert(u);
 
-        /* FIXME: see comment in set_io_weight(). */
-        xsprintf(buf, "%" PRIu64 "\n", BFQ_WEIGHT(weight));
-        (void) set_attribute_and_warn(u, "blkio", "blkio.bfq.weight", buf);
+        (void) set_bfq_weight(u, "blkio", makedev(0, 0), weight);
 
         xsprintf(buf, "%" PRIu64 "\n", weight);
         (void) set_attribute_and_warn(u, "blkio", "blkio.weight", buf);
@@ -1301,6 +1468,7 @@
                         } else
                                 weight = CGROUP_WEIGHT_DEFAULT;
 
+                        cgroup_apply_unified_cpu_idle(u, weight);
                         cgroup_apply_unified_cpu_weight(u, weight);
                         cgroup_apply_unified_cpu_quota(u, c->cpu_quota_per_sec_usec, c->cpu_quota_period_usec);
 
@@ -1326,8 +1494,8 @@
         }
 
         if ((apply_mask & CGROUP_MASK_CPUSET) && !is_local_root) {
-                cgroup_apply_unified_cpuset(u, &c->cpuset_cpus, "cpuset.cpus");
-                cgroup_apply_unified_cpuset(u, &c->cpuset_mems, "cpuset.mems");
+                cgroup_apply_unified_cpuset(u, cgroup_context_allowed_cpus(c, state), "cpuset.cpus");
+                cgroup_apply_unified_cpuset(u, cgroup_context_allowed_mems(c, state), "cpuset.mems");
         }
 
         /* The 'io' controller attributes are not exported on the host's root cgroup (being a pure cgroup v2
@@ -1356,10 +1524,6 @@
                 set_io_weight(u, weight);
 
                 if (has_io) {
-                        CGroupIODeviceLatency *latency;
-                        CGroupIODeviceLimit *limit;
-                        CGroupIODeviceWeight *w;
-
                         LIST_FOREACH(device_weights, w, c->io_device_weights)
                                 cgroup_apply_io_device_weight(u, w->path, w->weight);
 
@@ -1370,9 +1534,6 @@
                                 cgroup_apply_io_device_latency(u, latency->path, latency->target_usec);
 
                 } else if (has_blockio) {
-                        CGroupBlockIODeviceWeight *w;
-                        CGroupBlockIODeviceBandwidth *b;
-
                         LIST_FOREACH(device_weights, w, c->blockio_device_weights) {
                                 weight = cgroup_weight_blkio_to_io(w->weight);
 
@@ -1425,9 +1586,7 @@
 
                         set_blkio_weight(u, weight);
 
-                        if (has_io) {
-                                CGroupIODeviceWeight *w;
-
+                        if (has_io)
                                 LIST_FOREACH(device_weights, w, c->io_device_weights) {
                                         weight = cgroup_weight_io_to_blkio(w->weight);
 
@@ -1436,32 +1595,24 @@
 
                                         cgroup_apply_blkio_device_weight(u, w->path, weight);
                                 }
-                        } else if (has_blockio) {
-                                CGroupBlockIODeviceWeight *w;
-
+                        else if (has_blockio)
                                 LIST_FOREACH(device_weights, w, c->blockio_device_weights)
                                         cgroup_apply_blkio_device_weight(u, w->path, w->weight);
-                        }
                 }
 
                 /* The bandwidth limits are something that make sense to be applied to the host's root but not container
                  * roots, as there we want the container manager to handle it */
                 if (is_host_root || !is_local_root) {
-                        if (has_io) {
-                                CGroupIODeviceLimit *l;
-
+                        if (has_io)
                                 LIST_FOREACH(device_limits, l, c->io_device_limits) {
                                         log_cgroup_compat(u, "Applying IO{Read|Write}Bandwidth=%" PRIu64 " %" PRIu64 " as BlockIO{Read|Write}BandwidthMax= for %s",
                                                           l->limits[CGROUP_IO_RBPS_MAX], l->limits[CGROUP_IO_WBPS_MAX], l->path);
 
                                         cgroup_apply_blkio_device_limit(u, l->path, l->limits[CGROUP_IO_RBPS_MAX], l->limits[CGROUP_IO_WBPS_MAX]);
                                 }
-                        } else if (has_blockio) {
-                                CGroupBlockIODeviceBandwidth *b;
-
+                        else if (has_blockio)
                                 LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths)
                                         cgroup_apply_blkio_device_limit(u, b->path, b->rbps, b->wbps);
-                        }
                 }
         }
 
@@ -1472,11 +1623,12 @@
         if ((apply_mask & CGROUP_MASK_MEMORY) && !is_local_root) {
 
                 if (cg_all_unified() > 0) {
-                        uint64_t max, swap_max = CGROUP_LIMIT_MAX;
+                        uint64_t max, swap_max = CGROUP_LIMIT_MAX, zswap_max = CGROUP_LIMIT_MAX;
 
                         if (unit_has_unified_memory_config(u)) {
                                 max = c->memory_max;
                                 swap_max = c->memory_swap_max;
+                                zswap_max = c->memory_zswap_max;
                         } else {
                                 max = c->memory_limit;
 
@@ -1489,6 +1641,7 @@
                         cgroup_apply_unified_memory_limit(u, "memory.high", c->memory_high);
                         cgroup_apply_unified_memory_limit(u, "memory.max", max);
                         cgroup_apply_unified_memory_limit(u, "memory.swap.max", swap_max);
+                        cgroup_apply_unified_memory_limit(u, "memory.zswap.max", zswap_max);
 
                         (void) set_attribute_and_warn(u, "memory", "memory.oom.group", one_zero(c->memory_oom_group));
 
@@ -1498,7 +1651,8 @@
 
                         if (unit_has_unified_memory_config(u)) {
                                 val = c->memory_max;
-                                log_cgroup_compat(u, "Applying MemoryMax=%" PRIi64 " as MemoryLimit=", val);
+                                if (val != CGROUP_LIMIT_MAX)
+                                        log_cgroup_compat(u, "Applying MemoryMax=%" PRIu64 " as MemoryLimit=", val);
                         } else
                                 val = c->memory_limit;
 
@@ -1566,6 +1720,9 @@
 
         if (apply_mask & CGROUP_MASK_BPF_SOCKET_BIND)
                 cgroup_apply_socket_bind(u);
+
+        if (apply_mask & CGROUP_MASK_BPF_RESTRICT_NETWORK_INTERFACES)
+                cgroup_apply_restrict_network_interfaces(u);
 }
 
 static bool unit_get_needs_bpf_firewall(Unit *u) {
@@ -1577,8 +1734,8 @@
                 return false;
 
         if (c->ip_accounting ||
-            c->ip_address_allow ||
-            c->ip_address_deny ||
+            !set_isempty(c->ip_address_allow) ||
+            !set_isempty(c->ip_address_deny) ||
             c->ip_filters_ingress ||
             c->ip_filters_egress)
                 return true;
@@ -1589,8 +1746,8 @@
                 if (!c)
                         return false;
 
-                if (c->ip_address_allow ||
-                    c->ip_address_deny)
+                if (!set_isempty(c->ip_address_allow) ||
+                    !set_isempty(c->ip_address_deny))
                         return true;
         }
 
@@ -1605,7 +1762,7 @@
         if (!c)
                 return false;
 
-        return !LIST_IS_EMPTY(c->bpf_foreign_programs);
+        return !!c->bpf_foreign_programs;
 }
 
 static bool unit_get_needs_socket_bind(Unit *u) {
@@ -1619,6 +1776,17 @@
         return c->socket_bind_allow || c->socket_bind_deny;
 }
 
+static bool unit_get_needs_restrict_network_interfaces(Unit *u) {
+        CGroupContext *c;
+        assert(u);
+
+        c = unit_get_cgroup_context(u);
+        if (!c)
+                return false;
+
+        return !set_isempty(c->restrict_network_interfaces);
+}
+
 static CGroupMask unit_get_cgroup_mask(Unit *u) {
         CGroupMask mask = 0;
         CGroupContext *c;
@@ -1637,7 +1805,7 @@
             c->cpu_quota_per_sec_usec != USEC_INFINITY)
                 mask |= CGROUP_MASK_CPU;
 
-        if (c->cpuset_cpus.set || c->cpuset_mems.set)
+        if (cgroup_context_has_allowed_cpus(c) || cgroup_context_has_allowed_mems(c))
                 mask |= CGROUP_MASK_CPUSET;
 
         if (cgroup_context_has_io_config(c) || cgroup_context_has_blockio_config(c))
@@ -1674,6 +1842,9 @@
         if (unit_get_needs_socket_bind(u))
                 mask |= CGROUP_MASK_BPF_SOCKET_BIND;
 
+        if (unit_get_needs_restrict_network_interfaces(u))
+                mask |= CGROUP_MASK_BPF_RESTRICT_NETWORK_INTERFACES;
+
         return mask;
 }
 
@@ -2058,6 +2229,7 @@
 
         bool created, is_root_slice;
         CGroupMask migrate_mask = 0;
+        _cleanup_free_ char *cgroup_full_path = NULL;
         int r;
 
         assert(u);
@@ -2076,11 +2248,25 @@
                 return log_unit_error_errno(u, r, "Failed to create cgroup %s: %m", empty_to_root(u->cgroup_path));
         created = r;
 
+        if (cg_unified_controller(SYSTEMD_CGROUP_CONTROLLER) > 0) {
+                uint64_t cgroup_id = 0;
+
+                r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, NULL, &cgroup_full_path);
+                if (r == 0) {
+                        r = cg_path_get_cgroupid(cgroup_full_path, &cgroup_id);
+                        if (r < 0)
+                                log_unit_full_errno(u, ERRNO_IS_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING, r,
+                                                    "Failed to get cgroup ID of cgroup %s, ignoring: %m", cgroup_full_path);
+                } else
+                        log_unit_warning_errno(u, r, "Failed to get full cgroup path on cgroup %s, ignoring: %m", empty_to_root(u->cgroup_path));
+
+                u->cgroup_id = cgroup_id;
+        }
+
         /* Start watching it */
         (void) unit_watch_cgroup(u);
         (void) unit_watch_cgroup_memory(u);
 
-
         /* For v2 we preserve enabled controllers in delegated units, adjust others,
          * for v1 we figure out which controller hierarchies need migration. */
         if (created || !u->cgroup_realized || !unit_cgroup_delegate(u)) {
@@ -2150,14 +2336,12 @@
         pp = strjoina("/", pp, suffix_path);
         path_simplify(pp);
 
-        r = sd_bus_call_method(u->manager->system_bus,
-                               "org.freedesktop.systemd1",
-                               "/org/freedesktop/systemd1",
-                               "org.freedesktop.systemd1.Manager",
-                               "AttachProcessesToUnit",
-                               &error, NULL,
-                               "ssau",
-                               NULL /* empty unit name means client's unit, i.e. us */, pp, 1, (uint32_t) pid);
+        r = bus_call_method(u->manager->system_bus,
+                            bus_systemd_mgr,
+                            "AttachProcessesToUnit",
+                            &error, NULL,
+                            "ssau",
+                            NULL /* empty unit name means client's unit, i.e. us */, pp, 1, (uint32_t) pid);
         if (r < 0)
                 return log_unit_debug_errno(u, r, "Failed to attach unit process " PID_FMT " via the bus: %s", pid, bus_error_message(&error, r));
 
@@ -2165,6 +2349,7 @@
 }
 
 int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) {
+        _cleanup_free_ char *joined = NULL;
         CGroupMask delegated_mask;
         const char *p;
         void *pidp;
@@ -2190,8 +2375,13 @@
 
         if (isempty(suffix_path))
                 p = u->cgroup_path;
-        else
-                p = prefix_roota(u->cgroup_path, suffix_path);
+        else {
+                joined = path_join(u->cgroup_path, suffix_path);
+                if (!joined)
+                        return -ENOMEM;
+
+                p = joined;
+        }
 
         delegated_mask = unit_get_delegate_mask(u);
 
@@ -2338,7 +2528,7 @@
                 ((u->cgroup_enabled_mask | enable_mask) & CGROUP_MASK_V2) == (u->cgroup_enabled_mask & CGROUP_MASK_V2);
 }
 
-static void unit_add_to_cgroup_realize_queue(Unit *u) {
+void unit_add_to_cgroup_realize_queue(Unit *u) {
         assert(u);
 
         if (u->in_cgroup_realize_queue)
@@ -2682,6 +2872,10 @@
 
         (void) unit_get_cpu_usage(u, NULL); /* Cache the last CPU usage value before we destroy the cgroup */
 
+#if BPF_FRAMEWORK
+        (void) lsm_bpf_cleanup(u); /* Remove cgroup from the global LSM BPF map */
+#endif
+
         is_root_slice = unit_has_name(u, SPECIAL_ROOT_SLICE);
 
         r = cg_trim_everywhere(u->manager->cgroup_supported, u->cgroup_path, !is_root_slice);
@@ -2703,7 +2897,7 @@
         u->cgroup_realized_mask = 0;
         u->cgroup_enabled_mask = 0;
 
-        u->bpf_device_control_installed = bpf_program_unref(u->bpf_device_control_installed);
+        u->bpf_device_control_installed = bpf_program_free(u->bpf_device_control_installed);
 }
 
 int unit_search_main_pid(Unit *u, pid_t *ret) {
@@ -2843,12 +3037,11 @@
 }
 
 static int on_cgroup_empty_event(sd_event_source *s, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Unit *u;
         int r;
 
         assert(s);
-        assert(m);
 
         u = m->cgroup_empty_queue;
         if (!u)
@@ -2865,6 +3058,10 @@
                         log_debug_errno(r, "Failed to reenable cgroup empty event source, ignoring: %m");
         }
 
+        /* Update state based on OOM kills before we notify about cgroup empty event */
+        (void) unit_check_oom(u);
+        (void) unit_check_oomd_kill(u);
+
         unit_add_to_gc_queue(u);
 
         if (UNIT_VTABLE(u)->notify_cgroup_empty)
@@ -2944,8 +3141,8 @@
         else if (r == 0)
                 return 0;
 
-        r = cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "user.oomd_kill", &value);
-        if (r < 0 && r != -ENODATA)
+        r = cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "user.oomd_ooms", &value);
+        if (r < 0 && !ERRNO_IS_XATTR_ABSENT(r))
                 return r;
 
         if (!isempty(value)) {
@@ -2960,11 +3157,25 @@
         if (!increased)
                 return 0;
 
+        n = 0;
+        value = mfree(value);
+        r = cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "user.oomd_kill", &value);
+        if (r >= 0 && !isempty(value))
+                (void) safe_atou64(value, &n);
+
         if (n > 0)
                 log_unit_struct(u, LOG_NOTICE,
                                 "MESSAGE_ID=" SD_MESSAGE_UNIT_OOMD_KILL_STR,
                                 LOG_UNIT_INVOCATION_ID(u),
-                                LOG_UNIT_MESSAGE(u, "systemd-oomd killed %"PRIu64" process(es) in this unit.", n));
+                                LOG_UNIT_MESSAGE(u, "systemd-oomd killed %"PRIu64" process(es) in this unit.", n),
+                                "N_PROCESSES=%" PRIu64, n);
+        else
+                log_unit_struct(u, LOG_NOTICE,
+                                "MESSAGE_ID=" SD_MESSAGE_UNIT_OOMD_KILL_STR,
+                                LOG_UNIT_INVOCATION_ID(u),
+                                LOG_UNIT_MESSAGE(u, "systemd-oomd killed some process(es) in this unit."));
+
+        unit_notify_cgroup_oom(u, /* ManagedOOM= */ true);
 
         return 1;
 }
@@ -2979,12 +3190,15 @@
                 return 0;
 
         r = cg_get_keyed_attribute("memory", u->cgroup_path, "memory.events", STRV_MAKE("oom_kill"), &oom_kill);
-        if (r < 0)
+        if (IN_SET(r, -ENOENT, -ENXIO)) /* Handle gracefully if cgroup or oom_kill attribute don't exist */
+                c = 0;
+        else if (r < 0)
                 return log_unit_debug_errno(u, r, "Failed to read oom_kill field of memory.events cgroup attribute: %m");
-
-        r = safe_atou64(oom_kill, &c);
-        if (r < 0)
-                return log_unit_debug_errno(u, r, "Failed to parse oom_kill field: %m");
+        else {
+                r = safe_atou64(oom_kill, &c);
+                if (r < 0)
+                        return log_unit_debug_errno(u, r, "Failed to parse oom_kill field: %m");
+        }
 
         increased = c > u->oom_kill_last;
         u->oom_kill_last = c;
@@ -2997,19 +3211,17 @@
                         LOG_UNIT_INVOCATION_ID(u),
                         LOG_UNIT_MESSAGE(u, "A process of this unit has been killed by the OOM killer."));
 
-        if (UNIT_VTABLE(u)->notify_cgroup_oom)
-                UNIT_VTABLE(u)->notify_cgroup_oom(u);
+        unit_notify_cgroup_oom(u, /* ManagedOOM= */ false);
 
         return 1;
 }
 
 static int on_cgroup_oom_event(sd_event_source *s, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Unit *u;
         int r;
 
         assert(s);
-        assert(m);
 
         u = m->cgroup_oom_queue;
         if (!u)
@@ -3107,26 +3319,24 @@
 }
 
 static int on_cgroup_inotify_event(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(s);
         assert(fd >= 0);
-        assert(m);
 
         for (;;) {
                 union inotify_event_buffer buffer;
-                struct inotify_event *e;
                 ssize_t l;
 
                 l = read(fd, &buffer, sizeof(buffer));
                 if (l < 0) {
-                        if (IN_SET(errno, EINTR, EAGAIN))
+                        if (ERRNO_IS_TRANSIENT(errno))
                                 return 0;
 
                         return log_error_errno(errno, "Failed to read control group inotify events: %m");
                 }
 
-                FOREACH_INOTIFY_EVENT(e, buffer, l) {
+                FOREACH_INOTIFY_EVENT_WARN(e, buffer, l) {
                         Unit *u;
 
                         if (e->wd < 0)
@@ -3157,24 +3367,39 @@
 
         /* BPF-based firewall */
         r = bpf_firewall_supported();
+        if (r < 0)
+                return r;
         if (r > 0)
                 mask |= CGROUP_MASK_BPF_FIREWALL;
 
         /* BPF-based device access control */
         r = bpf_devices_supported();
+        if (r < 0)
+                return r;
         if (r > 0)
                 mask |= CGROUP_MASK_BPF_DEVICES;
 
         /* BPF pinned prog */
         r = bpf_foreign_supported();
+        if (r < 0)
+                return r;
         if (r > 0)
                 mask |= CGROUP_MASK_BPF_FOREIGN;
 
         /* BPF-based bind{4|6} hooks */
         r = bpf_socket_bind_supported();
+        if (r < 0)
+                return r;
         if (r > 0)
                 mask |= CGROUP_MASK_BPF_SOCKET_BIND;
 
+        /* BPF-based cgroup_skb/{egress|ingress} hooks */
+        r = restrict_network_interfaces_supported();
+        if (r < 0)
+                return r;
+        if (r > 0)
+                mask |= CGROUP_MASK_BPF_RESTRICT_NETWORK_INTERFACES;
+
         *ret = mask;
         return 0;
 }
@@ -3368,7 +3593,7 @@
         if (u)
                 return u;
 
-        p = strdupa(cgroup);
+        p = strdupa_safe(cgroup);
         for (;;) {
                 char *e;
 
@@ -3945,7 +4170,7 @@
         assert(m);
 
         SET_FOREACH(u, m->startup_units)
-                unit_invalidate_cgroup(u, CGROUP_MASK_CPU|CGROUP_MASK_IO|CGROUP_MASK_BLKIO);
+                unit_invalidate_cgroup(u, CGROUP_MASK_CPU|CGROUP_MASK_IO|CGROUP_MASK_BLKIO|CGROUP_MASK_CPUSET);
 }
 
 static int unit_get_nice(Unit *u) {
@@ -3990,7 +4215,7 @@
 int unit_cgroup_freezer_action(Unit *u, FreezerAction action) {
         _cleanup_free_ char *path = NULL;
         FreezerState target, kernel = _FREEZER_STATE_INVALID;
-        int r;
+        int r, ret;
 
         assert(u);
         assert(IN_SET(action, FREEZER_FREEZE, FREEZER_THAW));
@@ -3998,9 +4223,23 @@
         if (!cg_freezer_supported())
                 return 0;
 
+        /* Ignore all requests to thaw init.scope or -.slice and reject all requests to freeze them */
+        if (unit_has_name(u, SPECIAL_ROOT_SLICE) || unit_has_name(u, SPECIAL_INIT_SCOPE))
+                return action == FREEZER_FREEZE ? -EPERM : 0;
+
         if (!u->cgroup_realized)
                 return -EBUSY;
 
+        if (action == FREEZER_THAW) {
+                Unit *slice = UNIT_GET_SLICE(u);
+
+                if (slice) {
+                        r = unit_cgroup_freezer_action(slice, FREEZER_THAW);
+                        if (r < 0)
+                                return log_unit_error_errno(u, r, "Failed to thaw slice %s of unit: %m", slice->id);
+                }
+        }
+
         target = action == FREEZER_FREEZE ? FREEZER_FROZEN : FREEZER_RUNNING;
 
         r = unit_freezer_state_kernel(u, &kernel);
@@ -4009,8 +4248,11 @@
 
         if (target == kernel) {
                 u->freezer_state = target;
-                return 0;
-        }
+                if (action == FREEZER_FREEZE)
+                        return 0;
+                ret = 0;
+        } else
+                ret = 1;
 
         r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "cgroup.freeze", &path);
         if (r < 0)
@@ -4018,16 +4260,18 @@
 
         log_unit_debug(u, "%s unit.", action == FREEZER_FREEZE ? "Freezing" : "Thawing");
 
-        if (action == FREEZER_FREEZE)
-                u->freezer_state = FREEZER_FREEZING;
-        else
-                u->freezer_state = FREEZER_THAWING;
+        if (target != kernel) {
+                if (action == FREEZER_FREEZE)
+                        u->freezer_state = FREEZER_FREEZING;
+                else
+                        u->freezer_state = FREEZER_THAWING;
+        }
 
         r = write_string_file(path, one_zero(action == FREEZER_FREEZE), WRITE_STRING_FILE_DISABLE_BUFFER);
         if (r < 0)
                 return r;
 
-        return 1;
+        return ret;
 }
 
 int unit_get_cpuset(Unit *u, CPUSet *cpus, const char *name) {
diff --git a/src/core/cgroup.h b/src/core/cgroup.h
index 3f8cad8..d137e3a 100644
--- a/src/core/cgroup.h
+++ b/src/core/cgroup.h
@@ -3,9 +3,9 @@
 
 #include <stdbool.h>
 
+#include "bpf-lsm.h"
 #include "cgroup-util.h"
 #include "cpu-set-util.h"
-#include "ip-address-access.h"
 #include "list.h"
 #include "time-util.h"
 
@@ -132,7 +132,9 @@
         usec_t cpu_quota_period_usec;
 
         CPUSet cpuset_cpus;
+        CPUSet startup_cpuset_cpus;
         CPUSet cpuset_mems;
+        CPUSet startup_cpuset_mems;
 
         uint64_t io_weight;
         uint64_t startup_io_weight;
@@ -147,19 +149,27 @@
         uint64_t memory_high;
         uint64_t memory_max;
         uint64_t memory_swap_max;
+        uint64_t memory_zswap_max;
 
-        bool default_memory_min_set;
-        bool default_memory_low_set;
-        bool memory_min_set;
-        bool memory_low_set;
+        bool default_memory_min_set:1;
+        bool default_memory_low_set:1;
+        bool memory_min_set:1;
+        bool memory_low_set:1;
 
-        LIST_HEAD(IPAddressAccessItem, ip_address_allow);
-        LIST_HEAD(IPAddressAccessItem, ip_address_deny);
+        Set *ip_address_allow;
+        Set *ip_address_deny;
+        /* These two flags indicate that redundant entries have been removed from
+         * ip_address_allow/ip_address_deny, i.e. in_addr_prefixes_reduce() has already been called. */
+        bool ip_address_allow_reduced;
+        bool ip_address_deny_reduced;
 
         char **ip_filters_ingress;
         char **ip_filters_egress;
         LIST_HEAD(CGroupBPFForeignProgram, bpf_foreign_programs);
 
+        Set *restrict_network_interfaces;
+        bool restrict_network_interfaces_is_allow_list;
+
         /* For legacy hierarchies */
         uint64_t cpu_shares;
         uint64_t startup_cpu_shares;
@@ -230,6 +240,7 @@
 int cgroup_add_bpf_foreign_program(CGroupContext *c, uint32_t attach_type, const char *path);
 
 void cgroup_oomd_xattr_apply(Unit *u, const char *cgroup_path);
+int cgroup_log_xattr_apply(Unit *u, const char *cgroup_path);
 
 CGroupMask unit_get_own_mask(Unit *u);
 CGroupMask unit_get_delegate_mask(Unit *u);
@@ -253,6 +264,7 @@
 void unit_prune_cgroup(Unit *u);
 int unit_watch_cgroup(Unit *u);
 int unit_watch_cgroup_memory(Unit *u);
+void unit_add_to_cgroup_realize_queue(Unit *u);
 
 void unit_release_cgroup(Unit *u);
 /* Releases the cgroup only if it is recursively empty.
@@ -303,6 +315,8 @@
 bool manager_owns_host_root_cgroup(Manager *m);
 bool unit_has_host_root_cgroup(Unit *u);
 
+bool unit_has_startup_cgroup_constraints(Unit *u);
+
 int manager_notify_cgroup_empty(Manager *m, const char *group);
 
 void unit_invalidate_cgroup(Unit *u, CGroupMask m);
diff --git a/src/core/core-varlink.c b/src/core/core-varlink.c
index b7afb87..8432715 100644
--- a/src/core/core-varlink.c
+++ b/src/core/core-varlink.c
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "core-varlink.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "strv.h"
 #include "user-util.h"
 #include "varlink.h"
@@ -31,12 +31,12 @@
                                        JSON_BUILD_PAIR("userName", JSON_BUILD_STRING(user_name)),
                                        JSON_BUILD_PAIR("uid", JSON_BUILD_UNSIGNED(uid)),
                                        JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(uid)),
-                                       JSON_BUILD_PAIR("realName", JSON_BUILD_STRING("Dynamic User")),
-                                       JSON_BUILD_PAIR("homeDirectory", JSON_BUILD_STRING("/")),
-                                       JSON_BUILD_PAIR("shell", JSON_BUILD_STRING(NOLOGIN)),
+                                       JSON_BUILD_PAIR("realName", JSON_BUILD_CONST_STRING("Dynamic User")),
+                                       JSON_BUILD_PAIR("homeDirectory", JSON_BUILD_CONST_STRING("/")),
+                                       JSON_BUILD_PAIR("shell", JSON_BUILD_CONST_STRING(NOLOGIN)),
                                        JSON_BUILD_PAIR("locked", JSON_BUILD_BOOLEAN(true)),
-                                       JSON_BUILD_PAIR("service", JSON_BUILD_STRING("io.systemd.DynamicUser")),
-                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("dynamic"))))));
+                                       JSON_BUILD_PAIR("service", JSON_BUILD_CONST_STRING("io.systemd.DynamicUser")),
+                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("dynamic"))))));
 }
 
 static bool user_match_lookup_parameters(LookupParameters *p, const char *name, uid_t uid) {
@@ -93,9 +93,22 @@
 
         assert(u);
 
-        if (!UNIT_VTABLE(u)->can_set_managed_oom || !u->manager || !u->manager->managed_oom_varlink_request || !u->cgroup_path)
+        if (!UNIT_VTABLE(u)->can_set_managed_oom || !u->manager || !u->cgroup_path)
                 return 0;
 
+        if (MANAGER_IS_SYSTEM(u->manager)) {
+                /* In system mode we can't send any notifications unless oomd connected back to us. In this
+                 * mode oomd must initiate communication, not us. */
+                if (!u->manager->managed_oom_varlink)
+                        return 0;
+        } else {
+                /* If we are in user mode, let's connect to oomd if we aren't connected yet. In this mode we
+                 * must initiate communication to oomd, not the other way round. */
+                r = manager_varlink_init(u->manager);
+                if (r <= 0)
+                        return r;
+        }
+
         c = unit_get_cgroup_context(u);
         if (!c)
                 return 0;
@@ -120,37 +133,31 @@
         if (r < 0)
                 return r;
 
-        return varlink_notify(u->manager->managed_oom_varlink_request, v);
+        if (MANAGER_IS_SYSTEM(u->manager))
+                /* in system mode, oomd is our client, thus send out notifications as replies to the
+                 * initiating method call from them. */
+                r = varlink_notify(u->manager->managed_oom_varlink, v);
+        else
+                /* in user mode, we are oomd's client, thus send out notifications as method calls that do
+                 * not expect a reply. */
+                r = varlink_send(u->manager->managed_oom_varlink, "io.systemd.oom.ReportManagedOOMCGroups", v);
+
+        return r;
 }
 
-static int vl_method_subscribe_managed_oom_cgroups(
-                Varlink *link,
-                JsonVariant *parameters,
-                VarlinkMethodFlags flags,
-                void *userdata) {
+static int build_managed_oom_cgroups_json(Manager *m, JsonVariant **ret) {
         static const UnitType supported_unit_types[] = { UNIT_SLICE, UNIT_SERVICE, UNIT_SCOPE };
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *arr = NULL;
-        Manager *m = userdata;
         int r;
 
-        assert(link);
         assert(m);
-
-        if (json_variant_elements(parameters) > 0)
-                return varlink_error_invalid_parameter(link, parameters);
-
-        /* We only take one subscriber for this method so return an error if there's already an existing one.
-         * This shouldn't happen since systemd-oomd is the only client of this method. */
-        if (FLAGS_SET(flags, VARLINK_METHOD_MORE) && m->managed_oom_varlink_request)
-                return varlink_error(link, VARLINK_ERROR_SUBSCRIPTION_TAKEN, NULL);
+        assert(ret);
 
         r = json_build(&arr, JSON_BUILD_EMPTY_ARRAY);
         if (r < 0)
                 return r;
 
-        for (size_t i = 0; i < ELEMENTSOF(supported_unit_types); i++) {
-                Unit *u;
-
+        for (size_t i = 0; i < ELEMENTSOF(supported_unit_types); i++)
                 LIST_FOREACH(units_by_type, u, m->units_by_type[supported_unit_types[i]]) {
                         CGroupContext *c;
 
@@ -179,18 +186,78 @@
                                         return r;
                         }
                 }
-        }
 
         r = json_build(&v, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("cgroups", JSON_BUILD_VARIANT(arr))));
         if (r < 0)
                 return r;
 
+        *ret = TAKE_PTR(v);
+        return 0;
+}
+
+static int vl_method_subscribe_managed_oom_cgroups(
+                Varlink *link,
+                JsonVariant *parameters,
+                VarlinkMethodFlags flags,
+                void *userdata) {
+
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        Manager *m = ASSERT_PTR(userdata);
+        pid_t pid;
+        Unit *u;
+        int r;
+
+        assert(link);
+
+        r = varlink_get_peer_pid(link, &pid);
+        if (r < 0)
+                return r;
+
+        u = manager_get_unit_by_pid(m, pid);
+        if (!u)
+                return varlink_error(link, VARLINK_ERROR_PERMISSION_DENIED, NULL);
+
+        /* This is meant to be a deterrent and not actual security. The alternative is to check for the systemd-oom
+         * user that this unit runs as, but NSS lookups are blocking and not allowed from PID 1. */
+        if (!streq(u->id, "systemd-oomd.service"))
+                return varlink_error(link, VARLINK_ERROR_PERMISSION_DENIED, NULL);
+
+        if (json_variant_elements(parameters) > 0)
+                return varlink_error_invalid_parameter(link, parameters);
+
+        /* We only take one subscriber for this method so return an error if there's already an existing one.
+         * This shouldn't happen since systemd-oomd is the only client of this method. */
+        if (FLAGS_SET(flags, VARLINK_METHOD_MORE) && m->managed_oom_varlink)
+                return varlink_error(link, VARLINK_ERROR_SUBSCRIPTION_TAKEN, NULL);
+
+        r = build_managed_oom_cgroups_json(m, &v);
+        if (r < 0)
+                return r;
+
         if (!FLAGS_SET(flags, VARLINK_METHOD_MORE))
                 return varlink_reply(link, v);
 
-        assert(!m->managed_oom_varlink_request);
-        m->managed_oom_varlink_request = varlink_ref(link);
-        return varlink_notify(m->managed_oom_varlink_request, v);
+        assert(!m->managed_oom_varlink);
+        m->managed_oom_varlink = varlink_ref(link);
+        return varlink_notify(m->managed_oom_varlink, v);
+}
+
+static int manager_varlink_send_managed_oom_initial(Manager *m) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        int r;
+
+        assert(m);
+
+        if (MANAGER_IS_SYSTEM(m))
+                return 0;
+
+        assert(m->managed_oom_varlink);
+
+        r = build_managed_oom_cgroups_json(m, &v);
+        if (r < 0)
+                return r;
+
+        return varlink_send(m->managed_oom_varlink, "io.systemd.oom.ReportManagedOOMCGroups", v);
 }
 
 static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
@@ -208,12 +275,11 @@
         };
         _cleanup_free_ char *found_name = NULL;
         uid_t found_uid = UID_INVALID, uid;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *un;
         int r;
 
         assert(parameters);
-        assert(m);
 
         r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
         if (r < 0)
@@ -283,10 +349,10 @@
         return json_build(ret, JSON_BUILD_OBJECT(
                                    JSON_BUILD_PAIR("record", JSON_BUILD_OBJECT(
                                        JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(group_name)),
-                                       JSON_BUILD_PAIR("description", JSON_BUILD_STRING("Dynamic Group")),
+                                       JSON_BUILD_PAIR("description", JSON_BUILD_CONST_STRING("Dynamic Group")),
                                        JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(gid)),
-                                       JSON_BUILD_PAIR("service", JSON_BUILD_STRING("io.systemd.DynamicUser")),
-                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("dynamic"))))));
+                                       JSON_BUILD_PAIR("service", JSON_BUILD_CONST_STRING("io.systemd.DynamicUser")),
+                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("dynamic"))))));
     }
 
 static bool group_match_lookup_parameters(LookupParameters *p, const char *name, gid_t gid) {
@@ -316,12 +382,11 @@
         };
         _cleanup_free_ char *found_name = NULL;
         uid_t found_gid = GID_INVALID, gid;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *gn;
         int r;
 
         assert(parameters);
-        assert(m);
 
         r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
         if (r < 0)
@@ -411,31 +476,122 @@
 }
 
 static void vl_disconnect(VarlinkServer *s, Varlink *link, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(s);
         assert(link);
 
-        if (link == m->managed_oom_varlink_request)
-                m->managed_oom_varlink_request = varlink_unref(link);
+        if (link == m->managed_oom_varlink)
+                m->managed_oom_varlink = varlink_unref(link);
 }
 
-int manager_varlink_init(Manager *m) {
+static int manager_varlink_init_system(Manager *m) {
         _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
         int r;
 
         assert(m);
 
         if (m->varlink_server)
-                return 0;
+                return 1;
 
         if (!MANAGER_IS_SYSTEM(m))
                 return 0;
 
+        r = manager_setup_varlink_server(m, &s);
+        if (r < 0)
+                return log_error_errno(r, "Failed to set up varlink server: %m");
+
+        if (!MANAGER_IS_TEST_RUN(m)) {
+                (void) mkdir_p_label("/run/systemd/userdb", 0755);
+
+                r = varlink_server_listen_address(s, "/run/systemd/userdb/io.systemd.DynamicUser", 0666);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to bind to varlink socket: %m");
+
+                r = varlink_server_listen_address(s, VARLINK_ADDR_PATH_MANAGED_OOM_SYSTEM, 0666);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to bind to varlink socket: %m");
+        }
+
+        r = varlink_server_attach_event(s, m->event, SD_EVENT_PRIORITY_NORMAL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
+
+        m->varlink_server = TAKE_PTR(s);
+        return 1;
+}
+
+static int vl_reply(Varlink *link, JsonVariant *parameters, const char *error_id, VarlinkReplyFlags flags, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+        int r;
+
+        if (error_id)
+                log_debug("varlink systemd-oomd client error: %s", error_id);
+
+        if (FLAGS_SET(flags, VARLINK_REPLY_ERROR) && FLAGS_SET(flags, VARLINK_REPLY_LOCAL)) {
+                /* Varlink connection was closed, likely because of systemd-oomd restart. Let's try to
+                 * reconnect and send the initial ManagedOOM update again. */
+
+                m->managed_oom_varlink = varlink_unref(link);
+
+                log_debug("Reconnecting to %s", VARLINK_ADDR_PATH_MANAGED_OOM_USER);
+
+                r = manager_varlink_init(m);
+                if (r <= 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int manager_varlink_init_user(Manager *m) {
+        _cleanup_(varlink_close_unrefp) Varlink *link = NULL;
+        int r;
+
+        assert(m);
+
+        if (m->managed_oom_varlink)
+                return 1;
+
+        if (MANAGER_IS_TEST_RUN(m))
+                return 0;
+
+        r = varlink_connect_address(&link, VARLINK_ADDR_PATH_MANAGED_OOM_USER);
+        if (r == -ENOENT || ERRNO_IS_DISCONNECT(r)) {
+                log_debug("systemd-oomd varlink unix socket not found, skipping user manager varlink setup");
+                return 0;
+        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to connect to %s: %m", VARLINK_ADDR_PATH_MANAGED_OOM_USER);
+
+        varlink_set_userdata(link, m);
+
+        r = varlink_bind_reply(link, vl_reply);
+        if (r < 0)
+                return r;
+
+        r = varlink_attach_event(link, m->event, SD_EVENT_PRIORITY_NORMAL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
+
+        m->managed_oom_varlink = TAKE_PTR(link);
+
+        /* Queue the initial ManagedOOM update. */
+        (void) manager_varlink_send_managed_oom_initial(m);
+
+        return 1;
+}
+
+int manager_setup_varlink_server(Manager *m, VarlinkServer **ret) {
+        _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
+        int r;
+
+        assert(m);
+        assert(ret);
+
         r = varlink_server_new(&s, VARLINK_SERVER_ACCOUNT_UID|VARLINK_SERVER_INHERIT_USERDATA);
         if (r < 0)
-                return log_error_errno(r, "Failed to allocate varlink server object: %m");
+                return log_debug_errno(r, "Failed to allocate varlink server object: %m");
 
         varlink_server_set_userdata(s, m);
 
@@ -446,32 +602,20 @@
                         "io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships,
                         "io.systemd.ManagedOOM.SubscribeManagedOOMCGroups",  vl_method_subscribe_managed_oom_cgroups);
         if (r < 0)
-                return log_error_errno(r, "Failed to register varlink methods: %m");
+                return log_debug_errno(r, "Failed to register varlink methods: %m");
 
         r = varlink_server_bind_disconnect(s, vl_disconnect);
         if (r < 0)
-                return log_error_errno(r, "Failed to register varlink disconnect handler: %m");
+                return log_debug_errno(r, "Failed to register varlink disconnect handler: %m");
 
-        if (!MANAGER_IS_TEST_RUN(m)) {
-                (void) mkdir_p_label("/run/systemd/userdb", 0755);
-
-                r = varlink_server_listen_address(s, "/run/systemd/userdb/io.systemd.DynamicUser", 0666);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to bind to varlink socket: %m");
-
-                r = varlink_server_listen_address(s, VARLINK_ADDR_PATH_MANAGED_OOM, 0666);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to bind to varlink socket: %m");
-        }
-
-        r = varlink_server_attach_event(s, m->event, SD_EVENT_PRIORITY_NORMAL);
-        if (r < 0)
-                return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
-
-        m->varlink_server = TAKE_PTR(s);
+        *ret = TAKE_PTR(s);
         return 0;
 }
 
+int manager_varlink_init(Manager *m) {
+        return MANAGER_IS_SYSTEM(m) ? manager_varlink_init_system(m) : manager_varlink_init_user(m);
+}
+
 void manager_varlink_done(Manager *m) {
         assert(m);
 
@@ -479,7 +623,8 @@
          * the manager, and only then disconnect it — in two steps – so that we don't end up accidentally
          * unreffing it twice. After all, closing the connection might cause the disconnect handler we
          * installed (vl_disconnect() above) to be called, where we will unref it too. */
-        varlink_close_unref(TAKE_PTR(m->managed_oom_varlink_request));
+        varlink_close_unref(TAKE_PTR(m->managed_oom_varlink));
 
         m->varlink_server = varlink_server_unref(m->varlink_server);
+        m->managed_oom_varlink = varlink_close_unref(m->managed_oom_varlink);
 }
diff --git a/src/core/core-varlink.h b/src/core/core-varlink.h
index 20507a4..7f810d1 100644
--- a/src/core/core-varlink.h
+++ b/src/core/core-varlink.h
@@ -6,6 +6,10 @@
 int manager_varlink_init(Manager *m);
 void manager_varlink_done(Manager *m);
 
+/* Creates a new VarlinkServer and binds methods. Does not set up sockets or attach events.
+ * Used for manager serialize/deserialize. */
+int manager_setup_varlink_server(Manager *m, VarlinkServer **ret_s);
+
 /* The manager is expected to send an update to systemd-oomd if one of the following occurs:
  * - The value of ManagedOOM*= properties change
  * - A unit with ManagedOOM*= properties changes unit active state */
diff --git a/src/core/crash-handler.c b/src/core/crash-handler.c
new file mode 100644
index 0000000..6983f2e
--- /dev/null
+++ b/src/core/crash-handler.c
@@ -0,0 +1,164 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/reboot.h>
+
+#include "crash-handler.h"
+#include "exit-status.h"
+#include "macro.h"
+#include "main.h"
+#include "missing_syscall.h"
+#include "process-util.h"
+#include "raw-clone.h"
+#include "rlimit-util.h"
+#include "signal-util.h"
+#include "terminal-util.h"
+#include "virt.h"
+
+_noreturn_ void freeze_or_exit_or_reboot(void) {
+
+        /* If we are running in a container, let's prefer exiting, after all we can propagate an exit code to
+         * the container manager, and thus inform it that something went wrong. */
+        if (detect_container() > 0) {
+                log_emergency("Exiting PID 1...");
+                _exit(EXIT_EXCEPTION);
+        }
+
+        if (arg_crash_reboot) {
+                log_notice("Rebooting in 10s...");
+                (void) sleep(10);
+
+                log_notice("Rebooting now...");
+                (void) reboot(RB_AUTOBOOT);
+                log_emergency_errno(errno, "Failed to reboot: %m");
+        }
+
+        log_emergency("Freezing execution.");
+        sync();
+        freeze();
+}
+
+_noreturn_ static void crash(int sig, siginfo_t *siginfo, void *context) {
+        struct sigaction sa;
+        pid_t pid;
+
+        /* NB: 💣 💣 💣 This is a signal handler, most likely executed in a situation where we have corrupted
+         * memory. Thus: please avoid any libc memory allocation here, or any functions that internally use
+         * memory allocation, as we cannot rely on memory allocation still working at this point! (Note that
+         * memory allocation is not async-signal-safe anyway — see signal-safety(7) for details —, and thus
+         * is not permissible in signal handlers.) */
+
+        if (getpid_cached() != 1)
+                /* Pass this on immediately, if this is not PID 1 */
+                propagate_signal(sig, siginfo);
+        else if (!arg_dump_core)
+                log_emergency("Caught <%s>, not dumping core.", signal_to_string(sig));
+        else {
+                sa = (struct sigaction) {
+                        .sa_handler = nop_signal_handler,
+                        .sa_flags = SA_NOCLDSTOP|SA_RESTART,
+                };
+
+                /* We want to wait for the core process, hence let's enable SIGCHLD */
+                (void) sigaction(SIGCHLD, &sa, NULL);
+
+                pid = raw_clone(SIGCHLD);
+                if (pid < 0)
+                        log_emergency_errno(errno, "Caught <%s>, cannot fork for core dump: %m", signal_to_string(sig));
+                else if (pid == 0) {
+                        /* Enable default signal handler for core dump */
+
+                        sa = (struct sigaction) {
+                                .sa_handler = SIG_DFL,
+                        };
+                        (void) sigaction(sig, &sa, NULL);
+
+                        /* Don't limit the coredump size */
+                        (void) setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(RLIM_INFINITY));
+
+                        /* Just to be sure... */
+                        (void) chdir("/");
+
+                        /* Raise the signal again */
+                        propagate_signal(sig, siginfo);
+                        assert_not_reached();
+                        _exit(EXIT_EXCEPTION);
+                } else {
+                        siginfo_t status;
+                        int r;
+
+                        if (siginfo) {
+                                if (siginfo->si_pid == 0)
+                                        log_emergency("Caught <%s> from unknown sender process.", signal_to_string(sig));
+                                else if (siginfo->si_pid == 1)
+                                        log_emergency("Caught <%s> from our own process.", signal_to_string(sig));
+                                else
+                                        log_emergency("Caught <%s> from PID "PID_FMT".", signal_to_string(sig), siginfo->si_pid);
+                        }
+
+                        /* Order things nicely. */
+                        r = wait_for_terminate(pid, &status);
+                        if (r < 0)
+                                log_emergency_errno(r, "Caught <%s>, waitpid() failed: %m", signal_to_string(sig));
+                        else if (status.si_code != CLD_DUMPED) {
+                                const char *s = status.si_code == CLD_EXITED
+                                        ? exit_status_to_string(status.si_status, EXIT_STATUS_LIBC)
+                                        : signal_to_string(status.si_status);
+
+                                log_emergency("Caught <%s>, core dump failed (child "PID_FMT", code=%s, status=%i/%s).",
+                                              signal_to_string(sig),
+                                              pid,
+                                              sigchld_code_to_string(status.si_code),
+                                              status.si_status, strna(s));
+                        } else
+                                log_emergency("Caught <%s>, dumped core as pid "PID_FMT".",
+                                              signal_to_string(sig), pid);
+                }
+        }
+
+        if (arg_crash_chvt >= 0)
+                (void) chvt(arg_crash_chvt);
+
+        sa = (struct sigaction) {
+                .sa_handler = SIG_IGN,
+                .sa_flags = SA_NOCLDSTOP|SA_NOCLDWAIT|SA_RESTART,
+        };
+
+        /* Let the kernel reap children for us */
+        (void) sigaction(SIGCHLD, &sa, NULL);
+
+        if (arg_crash_shell) {
+                log_notice("Executing crash shell in 10s...");
+                (void) sleep(10);
+
+                pid = raw_clone(SIGCHLD);
+                if (pid < 0)
+                        log_emergency_errno(errno, "Failed to fork off crash shell: %m");
+                else if (pid == 0) {
+                        (void) setsid();
+                        (void) make_console_stdio();
+                        (void) rlimit_nofile_safe();
+                        (void) execle("/bin/sh", "/bin/sh", NULL, environ);
+
+                        log_emergency_errno(errno, "execle() failed: %m");
+                        _exit(EXIT_EXCEPTION);
+                } else {
+                        log_info("Spawned crash shell as PID "PID_FMT".", pid);
+                        (void) wait_for_terminate(pid, NULL);
+                }
+        }
+
+        freeze_or_exit_or_reboot();
+}
+
+void install_crash_handler(void) {
+        static const struct sigaction sa = {
+                .sa_sigaction = crash,
+                .sa_flags = SA_NODEFER | SA_SIGINFO, /* So that we can raise the signal again from the signal handler */
+        };
+        int r;
+
+        /* We ignore the return value here, since, we don't mind if we cannot set up a crash handler */
+        r = sigaction_many(&sa, SIGNALS_CRASH_HANDLER);
+        if (r < 0)
+                log_debug_errno(r, "I had trouble setting up the crash handler, ignoring: %m");
+}
diff --git a/src/core/crash-handler.h b/src/core/crash-handler.h
new file mode 100644
index 0000000..dc14335
--- /dev/null
+++ b/src/core/crash-handler.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "macro.h"
+
+_noreturn_ void freeze_or_exit_or_reboot(void);
+void install_crash_handler(void);
diff --git a/src/core/dbus-automount.c b/src/core/dbus-automount.c
index 3f74488..881bf50 100644
--- a/src/core/dbus-automount.c
+++ b/src/core/dbus-automount.c
@@ -11,6 +11,7 @@
 const sd_bus_vtable bus_automount_vtable[] = {
         SD_BUS_VTABLE_START(0),
         SD_BUS_PROPERTY("Where", "s", NULL, offsetof(Automount, where), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("ExtraOptions", "s", NULL, offsetof(Automount, extra_options), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Automount, directory_mode), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Automount, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("TimeoutIdleUSec", "t", bus_property_get_usec, offsetof(Automount, timeout_idle_usec), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -35,6 +36,9 @@
         if (streq(name, "Where"))
                 return bus_set_transient_path(u, name, &a->where, message, flags, error);
 
+        if (streq(name, "ExtraOptions"))
+                return bus_set_transient_string(u, name, &a->extra_options, message, flags, error);
+
         if (streq(name, "TimeoutIdleUSec"))
                 return bus_set_transient_usec_fix_0(u, name, &a->timeout_idle_usec, message, flags, error);
 
diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
index 84c3caf..b5484ed 100644
--- a/src/core/dbus-cgroup.c
+++ b/src/core/dbus-cgroup.c
@@ -15,11 +15,13 @@
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "in-addr-prefix-util.h"
 #include "ip-protocol-list.h"
 #include "limits-util.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "percent-util.h"
+#include "socket-util.h"
 
 BUS_DEFINE_PROPERTY_GET(bus_property_get_tasks_max, "t", TasksMax, tasks_max_resolve);
 
@@ -67,11 +69,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        CGroupContext *c = userdata;
+        CGroupContext *c = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (!c->delegate)
                 return sd_bus_message_append(reply, "as", 0);
@@ -88,13 +89,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        CPUSet *cpus = userdata;
+        CPUSet *cpus = ASSERT_PTR(userdata);
         _cleanup_free_ uint8_t *array = NULL;
         size_t allocated;
 
         assert(bus);
         assert(reply);
-        assert(cpus);
 
         (void) cpu_set_to_dbus(cpus, &array, &allocated);
         return sd_bus_message_append_array(reply, 'y', array, allocated);
@@ -109,13 +109,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        CGroupContext *c = userdata;
-        CGroupIODeviceWeight *w;
+        CGroupContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'a', "(st)");
         if (r < 0)
@@ -139,13 +137,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        CGroupContext *c = userdata;
-        CGroupIODeviceLimit *l;
+        CGroupContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'a', "(st)");
         if (r < 0)
@@ -175,13 +171,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        CGroupContext *c = userdata;
-        CGroupIODeviceLatency *l;
+        CGroupContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'a', "(st)");
         if (r < 0)
@@ -205,13 +199,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        CGroupContext *c = userdata;
-        CGroupBlockIODeviceWeight *w;
+        CGroupContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'a', "(st)");
         if (r < 0)
@@ -235,13 +227,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        CGroupContext *c = userdata;
-        CGroupBlockIODeviceBandwidth *b;
+        CGroupContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'a', "(st)");
         if (r < 0)
@@ -275,13 +265,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        CGroupContext *c = userdata;
-        CGroupDeviceAllow *a;
+        CGroupContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'a', "(ss)");
         if (r < 0)
@@ -317,14 +305,15 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        IPAddressAccessItem** items = userdata, *i;
+        Set **prefixes = ASSERT_PTR(userdata);
+        struct in_addr_prefix *i;
         int r;
 
         r = sd_bus_message_open_container(reply, 'a', "(iayu)");
         if (r < 0)
                 return r;
 
-        LIST_FOREACH(items, i, *items) {
+        SET_FOREACH(i, *prefixes) {
 
                 r = sd_bus_message_open_container(reply, 'r', "iayu");
                 if (r < 0)
@@ -359,7 +348,6 @@
                 void *userdata,
                 sd_bus_error *error) {
         CGroupContext *c = userdata;
-        CGroupBPFForeignProgram *p;
         int r;
 
         r = sd_bus_message_open_container(reply, 'a', "(ss)");
@@ -385,10 +373,9 @@
                 sd_bus_message *reply,
                 void *userdata,
                 sd_bus_error *error) {
-        CGroupSocketBindItem **items = userdata, *i;
-        int r;
 
-        assert(items);
+        CGroupSocketBindItem **items = ASSERT_PTR(userdata);
+        int r;
 
         r = sd_bus_message_open_container(reply, 'a', "(iiqq)");
         if (r < 0)
@@ -403,6 +390,46 @@
         return sd_bus_message_close_container(reply);
 }
 
+static int property_get_restrict_network_interfaces(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+        int r;
+        CGroupContext *c = ASSERT_PTR(userdata);
+        char *iface;
+
+        assert(bus);
+        assert(reply);
+
+        r = sd_bus_message_open_container(reply, 'r', "bas");
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_append(reply, "b", c->restrict_network_interfaces_is_allow_list);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_open_container(reply, 'a', "s");
+        if (r < 0)
+                return r;
+
+        SET_FOREACH(iface, c->restrict_network_interfaces) {
+                r = sd_bus_message_append(reply, "s", iface);
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_bus_message_close_container(reply);
+        if (r < 0)
+                return r;
+
+        return sd_bus_message_close_container(reply);
+}
+
 const sd_bus_vtable bus_cgroup_vtable[] = {
         SD_BUS_VTABLE_START(0),
         SD_BUS_PROPERTY("Delegate", "b", bus_property_get_bool, offsetof(CGroupContext, delegate), 0),
@@ -415,7 +442,9 @@
         SD_BUS_PROPERTY("CPUQuotaPerSecUSec", "t", bus_property_get_usec, offsetof(CGroupContext, cpu_quota_per_sec_usec), 0),
         SD_BUS_PROPERTY("CPUQuotaPeriodUSec", "t", bus_property_get_usec, offsetof(CGroupContext, cpu_quota_period_usec), 0),
         SD_BUS_PROPERTY("AllowedCPUs", "ay", property_get_cpuset, offsetof(CGroupContext, cpuset_cpus), 0),
+        SD_BUS_PROPERTY("StartupAllowedCPUs", "ay", property_get_cpuset, offsetof(CGroupContext, startup_cpuset_cpus), 0),
         SD_BUS_PROPERTY("AllowedMemoryNodes", "ay", property_get_cpuset, offsetof(CGroupContext, cpuset_mems), 0),
+        SD_BUS_PROPERTY("StartupAllowedMemoryNodes", "ay", property_get_cpuset, offsetof(CGroupContext, startup_cpuset_mems), 0),
         SD_BUS_PROPERTY("IOAccounting", "b", bus_property_get_bool, offsetof(CGroupContext, io_accounting), 0),
         SD_BUS_PROPERTY("IOWeight", "t", NULL, offsetof(CGroupContext, io_weight), 0),
         SD_BUS_PROPERTY("StartupIOWeight", "t", NULL, offsetof(CGroupContext, startup_io_weight), 0),
@@ -439,6 +468,7 @@
         SD_BUS_PROPERTY("MemoryHigh", "t", NULL, offsetof(CGroupContext, memory_high), 0),
         SD_BUS_PROPERTY("MemoryMax", "t", NULL, offsetof(CGroupContext, memory_max), 0),
         SD_BUS_PROPERTY("MemorySwapMax", "t", NULL, offsetof(CGroupContext, memory_swap_max), 0),
+        SD_BUS_PROPERTY("MemoryZSwapMax", "t", NULL, offsetof(CGroupContext, memory_zswap_max), 0),
         SD_BUS_PROPERTY("MemoryLimit", "t", NULL, offsetof(CGroupContext, memory_limit), 0),
         SD_BUS_PROPERTY("DevicePolicy", "s", property_get_cgroup_device_policy, offsetof(CGroupContext, device_policy), 0),
         SD_BUS_PROPERTY("DeviceAllow", "a(ss)", property_get_device_allow, 0, 0),
@@ -457,6 +487,7 @@
         SD_BUS_PROPERTY("BPFProgram", "a(ss)", property_get_bpf_foreign_program, 0, 0),
         SD_BUS_PROPERTY("SocketBindAllow", "a(iiqq)", property_get_socket_bind, offsetof(CGroupContext, socket_bind_allow), 0),
         SD_BUS_PROPERTY("SocketBindDeny", "a(iiqq)", property_get_socket_bind, offsetof(CGroupContext, socket_bind_deny), 0),
+        SD_BUS_PROPERTY("RestrictNetworkInterfaces", "(bas)", property_get_restrict_network_interfaces, 0, 0),
         SD_BUS_VTABLE_END
 };
 
@@ -591,7 +622,6 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        char **entry;
                         size_t size = 0;
 
                         if (n == 0)
@@ -671,7 +701,6 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        CGroupBPFForeignProgram *fp;
                         size_t size = 0;
 
                         if (n == 0)
@@ -696,7 +725,7 @@
 
                         unit_write_setting(u, flags, name, buf);
 
-                        if (!LIST_IS_EMPTY(c->bpf_foreign_programs)) {
+                        if (c->bpf_foreign_programs) {
                                 r = bpf_foreign_supported();
                                 if (r < 0)
                                         return r;
@@ -853,15 +882,44 @@
         }
 
 DISABLE_WARNING_TYPE_LIMITS;
-BUS_DEFINE_SET_CGROUP_WEIGHT(cpu_weight, CGROUP_MASK_CPU, CGROUP_WEIGHT_IS_OK, CGROUP_WEIGHT_INVALID);
 BUS_DEFINE_SET_CGROUP_WEIGHT(cpu_shares, CGROUP_MASK_CPU, CGROUP_CPU_SHARES_IS_OK, CGROUP_CPU_SHARES_INVALID);
 BUS_DEFINE_SET_CGROUP_WEIGHT(io_weight, CGROUP_MASK_IO, CGROUP_WEIGHT_IS_OK, CGROUP_WEIGHT_INVALID);
 BUS_DEFINE_SET_CGROUP_WEIGHT(blockio_weight, CGROUP_MASK_BLKIO, CGROUP_BLKIO_WEIGHT_IS_OK, CGROUP_BLKIO_WEIGHT_INVALID);
 BUS_DEFINE_SET_CGROUP_LIMIT(memory, CGROUP_MASK_MEMORY, physical_memory_scale, 1);
 BUS_DEFINE_SET_CGROUP_LIMIT(memory_protection, CGROUP_MASK_MEMORY, physical_memory_scale, 0);
 BUS_DEFINE_SET_CGROUP_LIMIT(swap, CGROUP_MASK_MEMORY, physical_memory_scale, 0);
+BUS_DEFINE_SET_CGROUP_LIMIT(zswap, CGROUP_MASK_MEMORY, physical_memory_scale, 0);
 REENABLE_WARNING;
 
+static int bus_cgroup_set_cpu_weight(
+                Unit *u,
+                const char *name,
+                uint64_t *p,
+                sd_bus_message *message,
+                UnitWriteFlags flags,
+                sd_bus_error *error) {
+        uint64_t v;
+        int r;
+        assert(p);
+        r = sd_bus_message_read(message, "t", &v);
+        if (r < 0)
+                return r;
+        if (!CGROUP_WEIGHT_IS_OK(v) && v != CGROUP_WEIGHT_IDLE)
+                return sd_bus_error_setf(
+                                error, SD_BUS_ERROR_INVALID_ARGS, "Value specified in %s is out of range", name);
+        if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                *p = v;
+                unit_invalidate_cgroup(u, CGROUP_MASK_CPU);
+                if (v == CGROUP_WEIGHT_INVALID)
+                        unit_write_settingf(u, flags, name, "%s=", name);
+                else if (v == CGROUP_WEIGHT_IDLE)
+                        unit_write_settingf(u, flags, name, "%s=idle", name);
+                else
+                        unit_write_settingf(u, flags, name, "%s=%" PRIu64, name, v);
+        }
+        return 1;
+}
+
 static int bus_cgroup_set_tasks_max(
                 Unit *u,
                 const char *name,
@@ -1019,6 +1077,9 @@
         if (streq(name, "MemorySwapMax"))
                 return bus_cgroup_set_swap(u, name, &c->memory_swap_max, message, flags, error);
 
+        if (streq(name, "MemoryZSwapMax"))
+                return bus_cgroup_set_zswap(u, name, &c->memory_zswap_max, message, flags, error);
+
         if (streq(name, "MemoryMax"))
                 return bus_cgroup_set_memory(u, name, &c->memory_max, message, flags, error);
 
@@ -1059,6 +1120,9 @@
         if (streq(name, "MemorySwapMaxScale"))
                 return bus_cgroup_set_swap_scale(u, name, &c->memory_swap_max, message, flags, error);
 
+        if (streq(name, "MemoryZSwapMaxScale"))
+                return bus_cgroup_set_zswap_scale(u, name, &c->memory_zswap_max, message, flags, error);
+
         if (streq(name, "MemoryMaxScale"))
                 return bus_cgroup_set_memory_scale(u, name, &c->memory_max, message, flags, error);
 
@@ -1114,17 +1178,15 @@
                         unit_invalidate_cgroup(u, CGROUP_MASK_CPU);
                         if (c->cpu_quota_period_usec == USEC_INFINITY)
                                 unit_write_setting(u, flags, "CPUQuotaPeriodSec", "CPUQuotaPeriodSec=");
-                        else {
-                                char v[FORMAT_TIMESPAN_MAX];
+                        else
                                 unit_write_settingf(u, flags, "CPUQuotaPeriodSec",
                                                     "CPUQuotaPeriodSec=%s",
-                                                    format_timespan(v, sizeof(v), c->cpu_quota_period_usec, 1));
-                        }
+                                                    FORMAT_TIMESPAN(c->cpu_quota_period_usec, 1));
                 }
 
                 return 1;
 
-        } else if (STR_IN_SET(name, "AllowedCPUs", "AllowedMemoryNodes")) {
+        } else if (STR_IN_SET(name, "AllowedCPUs", "StartupAllowedCPUs", "AllowedMemoryNodes", "StartupAllowedMemoryNodes")) {
                 const void *a;
                 size_t n;
                 _cleanup_(cpu_set_reset) CPUSet new_set = {};
@@ -1139,7 +1201,7 @@
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *setstr = NULL;
-                        CPUSet *set;
+                        CPUSet *set = NULL;
 
                         setstr = cpu_set_to_range_string(&new_set);
                         if (!setstr)
@@ -1147,8 +1209,14 @@
 
                         if (streq(name, "AllowedCPUs"))
                                 set = &c->cpuset_cpus;
-                        else
+                        else if (streq(name, "StartupAllowedCPUs"))
+                                set = &c->startup_cpuset_cpus;
+                        else if (streq(name, "AllowedMemoryNodes"))
                                 set = &c->cpuset_mems;
+                        else if (streq(name, "StartupAllowedMemoryNodes"))
+                                set = &c->startup_cpuset_mems;
+
+                        assert(set);
 
                         cpu_set_reset(set);
                         *set = new_set;
@@ -1175,14 +1243,13 @@
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Path '%s' specified in %s= is not normalized.", name, path);
 
                         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                CGroupIODeviceLimit *a = NULL, *b;
+                                CGroupIODeviceLimit *a = NULL;
 
-                                LIST_FOREACH(device_limits, b, c->io_device_limits) {
+                                LIST_FOREACH(device_limits, b, c->io_device_limits)
                                         if (path_equal(path, b->path)) {
                                                 a = b;
                                                 break;
                                         }
-                                }
 
                                 if (!a) {
                                         CGroupIOLimitType type;
@@ -1216,15 +1283,13 @@
                         return r;
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                        CGroupIODeviceLimit *a;
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
                         size_t size = 0;
 
-                        if (n == 0) {
+                        if (n == 0)
                                 LIST_FOREACH(device_limits, a, c->io_device_limits)
                                         a->limits[iol_type] = cgroup_io_limit_defaults[iol_type];
-                        }
 
                         unit_invalidate_cgroup(u, CGROUP_MASK_IO);
 
@@ -1234,8 +1299,8 @@
 
                         fprintf(f, "%s=\n", name);
                         LIST_FOREACH(device_limits, a, c->io_device_limits)
-                                        if (a->limits[iol_type] != cgroup_io_limit_defaults[iol_type])
-                                                fprintf(f, "%s=%s %" PRIu64 "\n", name, a->path, a->limits[iol_type]);
+                                if (a->limits[iol_type] != cgroup_io_limit_defaults[iol_type])
+                                        fprintf(f, "%s=%s %" PRIu64 "\n", name, a->path, a->limits[iol_type]);
 
                         r = fflush_and_check(f);
                         if (r < 0)
@@ -1263,14 +1328,13 @@
                                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "IODeviceWeight= value out of range");
 
                         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                CGroupIODeviceWeight *a = NULL, *b;
+                                CGroupIODeviceWeight *a = NULL;
 
-                                LIST_FOREACH(device_weights, b, c->io_device_weights) {
+                                LIST_FOREACH(device_weights, b, c->io_device_weights)
                                         if (path_equal(b->path, path)) {
                                                 a = b;
                                                 break;
                                         }
-                                }
 
                                 if (!a) {
                                         a = new0(CGroupIODeviceWeight, 1);
@@ -1298,13 +1362,11 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        CGroupIODeviceWeight *a;
                         size_t size = 0;
 
-                        if (n == 0) {
+                        if (n == 0)
                                 while (c->io_device_weights)
                                         cgroup_context_free_io_device_weight(c, c->io_device_weights);
-                        }
 
                         unit_invalidate_cgroup(u, CGROUP_MASK_IO);
 
@@ -1339,14 +1401,13 @@
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Path '%s' specified in %s= is not normalized.", name, path);
 
                         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                CGroupIODeviceLatency *a = NULL, *b;
+                                CGroupIODeviceLatency *a = NULL;
 
-                                LIST_FOREACH(device_latencies, b, c->io_device_latencies) {
+                                LIST_FOREACH(device_latencies, b, c->io_device_latencies)
                                         if (path_equal(b->path, path)) {
                                                 a = b;
                                                 break;
                                         }
-                                }
 
                                 if (!a) {
                                         a = new0(CGroupIODeviceLatency, 1);
@@ -1374,14 +1435,11 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        char ts[FORMAT_TIMESPAN_MAX];
-                        CGroupIODeviceLatency *a;
                         size_t size = 0;
 
-                        if (n == 0) {
+                        if (n == 0)
                                 while (c->io_device_latencies)
                                         cgroup_context_free_io_device_latency(c, c->io_device_latencies);
-                        }
 
                         unit_invalidate_cgroup(u, CGROUP_MASK_IO);
 
@@ -1392,7 +1450,7 @@
                         fputs("IODeviceLatencyTargetSec=\n", f);
                         LIST_FOREACH(device_latencies, a, c->io_device_latencies)
                                 fprintf(f, "IODeviceLatencyTargetSec=%s %s\n",
-                                        a->path, format_timespan(ts, sizeof(ts), a->target_usec, 1));
+                                        a->path, FORMAT_TIMESPAN(a->target_usec, 1));
 
                         r = fflush_and_check(f);
                         if (r < 0)
@@ -1404,12 +1462,11 @@
 
         } else if (STR_IN_SET(name, "BlockIOReadBandwidth", "BlockIOWriteBandwidth")) {
                 const char *path;
-                bool read = true;
                 unsigned n = 0;
                 uint64_t u64;
+                bool read;
 
-                if (streq(name, "BlockIOWriteBandwidth"))
-                        read = false;
+                read = streq(name, "BlockIOReadBandwidth");
 
                 r = sd_bus_message_enter_container(message, 'a', "(st)");
                 if (r < 0)
@@ -1421,14 +1478,13 @@
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Path '%s' specified in %s= is not normalized.", name, path);
 
                         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                CGroupBlockIODeviceBandwidth *a = NULL, *b;
+                                CGroupBlockIODeviceBandwidth *a = NULL;
 
-                                LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths) {
+                                LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths)
                                         if (path_equal(path, b->path)) {
                                                 a = b;
                                                 break;
                                         }
-                                }
 
                                 if (!a) {
                                         a = new0(CGroupBlockIODeviceBandwidth, 1);
@@ -1462,19 +1518,17 @@
                         return r;
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                        CGroupBlockIODeviceBandwidth *a;
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
                         size_t size = 0;
 
-                        if (n == 0) {
+                        if (n == 0)
                                 LIST_FOREACH(device_bandwidths, a, c->blockio_device_bandwidths) {
                                         if (read)
                                                 a->rbps = CGROUP_LIMIT_MAX;
                                         else
                                                 a->wbps = CGROUP_LIMIT_MAX;
                                 }
-                        }
 
                         unit_invalidate_cgroup(u, CGROUP_MASK_BLKIO);
 
@@ -1521,14 +1575,13 @@
                                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "BlockIODeviceWeight= out of range");
 
                         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                CGroupBlockIODeviceWeight *a = NULL, *b;
+                                CGroupBlockIODeviceWeight *a = NULL;
 
-                                LIST_FOREACH(device_weights, b, c->blockio_device_weights) {
+                                LIST_FOREACH(device_weights, b, c->blockio_device_weights)
                                         if (path_equal(b->path, path)) {
                                                 a = b;
                                                 break;
                                         }
-                                }
 
                                 if (!a) {
                                         a = new0(CGroupBlockIODeviceWeight, 1);
@@ -1556,13 +1609,11 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        CGroupBlockIODeviceWeight *a;
                         size_t size = 0;
 
-                        if (n == 0) {
+                        if (n == 0)
                                 while (c->blockio_device_weights)
                                         cgroup_context_free_blockio_device_weight(c, c->blockio_device_weights);
-                        }
 
                         unit_invalidate_cgroup(u, CGROUP_MASK_BLKIO);
 
@@ -1622,14 +1673,13 @@
                                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "DeviceAllow= requires combination of rwm flags");
 
                         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                CGroupDeviceAllow *a = NULL, *b;
+                                CGroupDeviceAllow *a = NULL;
 
-                                LIST_FOREACH(device_allow, b, c->device_allow) {
+                                LIST_FOREACH(device_allow, b, c->device_allow)
                                         if (path_equal(b->path, path)) {
                                                 a = b;
                                                 break;
                                         }
-                                }
 
                                 if (!a) {
                                         a = new0(CGroupDeviceAllow, 1);
@@ -1662,13 +1712,11 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        CGroupDeviceAllow *a;
                         size_t size = 0;
 
-                        if (n == 0) {
+                        if (n == 0)
                                 while (c->device_allow)
                                         cgroup_context_free_device_allow(c, c->device_allow);
-                        }
 
                         unit_invalidate_cgroup(u, CGROUP_MASK_DEVICES);
 
@@ -1705,11 +1753,9 @@
                 return 1;
 
         } else if (STR_IN_SET(name, "IPAddressAllow", "IPAddressDeny")) {
-                IPAddressAccessItem **list;
+                _cleanup_set_free_ Set *new_prefixes = NULL;
                 size_t n = 0;
 
-                list = streq(name, "IPAddressAllow") ? &c->ip_address_allow : &c->ip_address_deny;
-
                 r = sd_bus_message_enter_container(message, 'a', "(iayu)");
                 if (r < 0)
                         return r;
@@ -1749,17 +1795,16 @@
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Prefix length %" PRIu32 " too large for address family %s.", prefixlen, af_to_name(family));
 
                         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                IPAddressAccessItem *item;
+                                struct in_addr_prefix prefix = {
+                                        .family = family,
+                                        .prefixlen = prefixlen,
+                                };
 
-                                item = new0(IPAddressAccessItem, 1);
-                                if (!item)
-                                        return -ENOMEM;
+                                memcpy(&prefix.address, ap, an);
 
-                                item->family = family;
-                                item->prefixlen = prefixlen;
-                                memcpy(&item->address, ap, an);
-
-                                LIST_PREPEND(items, *list, item);
+                                r = in_addr_prefix_add(&new_prefixes, &prefix);
+                                if (r < 0)
+                                        return r;
                         }
 
                         r = sd_bus_message_exit_container(message);
@@ -1773,33 +1818,37 @@
                 if (r < 0)
                         return r;
 
-                *list = ip_address_access_reduce(*list);
-
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        IPAddressAccessItem *item;
                         size_t size = 0;
-
-                        if (n == 0)
-                                *list = ip_address_access_free_all(*list);
+                        Set **prefixes;
+                        bool *reduced;
 
                         unit_invalidate_cgroup_bpf(u);
                         f = open_memstream_unlocked(&buf, &size);
                         if (!f)
                                 return -ENOMEM;
 
-                        fputs(name, f);
-                        fputs("=\n", f);
+                        prefixes = streq(name, "IPAddressAllow") ? &c->ip_address_allow : &c->ip_address_deny;
+                        reduced = streq(name, "IPAddressAllow") ? &c->ip_address_allow_reduced : &c->ip_address_deny_reduced;
 
-                        LIST_FOREACH(items, item, *list) {
-                                char buffer[CONST_MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN)];
+                        if (n == 0) {
+                                *reduced = true;
+                                *prefixes = set_free(*prefixes);
+                                fputs(name, f);
+                                fputs("=\n", f);
+                        } else {
+                                *reduced = false;
 
-                                errno = 0;
-                                if (!inet_ntop(item->family, &item->address, buffer, sizeof(buffer)))
-                                        return errno_or_else(EINVAL);
+                                r = in_addr_prefixes_merge(prefixes, new_prefixes);
+                                if (r < 0)
+                                        return r;
 
-                                fprintf(f, "%s=%s/%u\n", name, buffer, item->prefixlen);
+                                const struct in_addr_prefix *p;
+                                SET_FOREACH(p, new_prefixes)
+                                        fprintf(f, "%s=%s\n", name,
+                                                IN_ADDR_PREFIX_TO_STRING(p->family, &p->address, p->prefixlen));
                         }
 
                         r = fflush_and_check(f);
@@ -1933,7 +1982,6 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        CGroupSocketBindItem *item;
                         size_t size = 0;
 
                         if (n == 0)
@@ -1966,6 +2014,63 @@
 
                 return 1;
         }
+        if (streq(name, "RestrictNetworkInterfaces")) {
+                int is_allow_list;
+                _cleanup_strv_free_ char **l = NULL;
+
+                r = sd_bus_message_enter_container(message, 'r', "bas");
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_read(message, "b", &is_allow_list);
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_read_strv(message, &l);
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_exit_container(message);
+                if (r < 0)
+                        return r;
+
+                if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                        _cleanup_free_ char *joined = NULL;
+
+                        if (strv_isempty(l)) {
+                                c->restrict_network_interfaces_is_allow_list = false;
+                                c->restrict_network_interfaces = set_free(c->restrict_network_interfaces);
+
+                                unit_write_settingf(u, flags, name, "%s=", name);
+                                return 1;
+                        }
+
+                        if (set_isempty(c->restrict_network_interfaces))
+                                c->restrict_network_interfaces_is_allow_list = is_allow_list;
+
+                        STRV_FOREACH(s, l) {
+                                if (!ifname_valid(*s)) {
+                                        log_full(LOG_WARNING, "Invalid interface name, ignoring: %s", *s);
+                                        continue;
+                                }
+                                if (c->restrict_network_interfaces_is_allow_list != (bool) is_allow_list)
+                                        free(set_remove(c->restrict_network_interfaces, *s));
+                                else {
+                                        r = set_put_strdup(&c->restrict_network_interfaces, *s);
+                                        if (r < 0)
+                                                return log_oom();
+                                }
+                        }
+
+                        joined = strv_join(l, " ");
+                        if (!joined)
+                                return -ENOMEM;
+
+                        unit_write_settingf(u, flags, name, "%s=%s%s", name, is_allow_list ? "" : "~", joined);
+                }
+
+                return 1;
+        }
 
         if (streq(name, "DisableControllers") || (u->transient && u->load_state == UNIT_STUB))
                 return bus_cgroup_set_transient_property(u, c, name, message, flags, error);
diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
index 902e074..f514b8f 100644
--- a/src/core/dbus-execute.c
+++ b/src/core/dbus-execute.c
@@ -24,12 +24,14 @@
 #include "fileio.h"
 #include "hexdecoct.h"
 #include "io-util.h"
-#include "ioprio.h"
+#include "ioprio-util.h"
 #include "journal-file.h"
+#include "missing_ioprio.h"
 #include "mountpoint-util.h"
 #include "namespace.h"
 #include "parse-util.h"
 #include "path-util.h"
+#include "pcre2-util.h"
 #include "process-util.h"
 #include "rlimit-util.h"
 #if HAVE_SECCOMP
@@ -37,6 +39,7 @@
 #endif
 #include "securebits-util.h"
 #include "specifier.h"
+#include "stat-util.h"
 #include "strv.h"
 #include "syslog-util.h"
 #include "unit-printf.h"
@@ -55,8 +58,8 @@
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_personality, personality, unsigned long);
 static BUS_DEFINE_PROPERTY_GET(property_get_ioprio, "i", ExecContext, exec_context_get_effective_ioprio);
 static BUS_DEFINE_PROPERTY_GET(property_get_mount_apivfs, "b", ExecContext, exec_context_get_effective_mount_apivfs);
-static BUS_DEFINE_PROPERTY_GET2(property_get_ioprio_class, "i", ExecContext, exec_context_get_effective_ioprio, IOPRIO_PRIO_CLASS);
-static BUS_DEFINE_PROPERTY_GET2(property_get_ioprio_priority, "i", ExecContext, exec_context_get_effective_ioprio, IOPRIO_PRIO_DATA);
+static BUS_DEFINE_PROPERTY_GET2(property_get_ioprio_class, "i", ExecContext, exec_context_get_effective_ioprio, ioprio_prio_class);
+static BUS_DEFINE_PROPERTY_GET2(property_get_ioprio_priority, "i", ExecContext, exec_context_get_effective_ioprio, ioprio_prio_data);
 static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_empty_string, "s", NULL);
 static BUS_DEFINE_PROPERTY_GET_REF(property_get_syslog_level, "i", int, LOG_PRI);
 static BUS_DEFINE_PROPERTY_GET_REF(property_get_syslog_facility, "i", int, LOG_FAC);
@@ -71,13 +74,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
-        char **j;
+        ExecContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'a', "(sb)");
         if (r < 0)
@@ -103,28 +104,19 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
-        int32_t n;
-        int r;
+        ExecContext *c = ASSERT_PTR(userdata);
+        int r, n;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (c->oom_score_adjust_set)
                 n = c->oom_score_adjust;
         else {
-                _cleanup_free_ char *t = NULL;
-
                 n = 0;
-                r = read_one_line_file("/proc/self/oom_score_adj", &t);
+                r = get_oom_score_adjust(&n);
                 if (r < 0)
                         log_debug_errno(r, "Failed to read /proc/self/oom_score_adj, ignoring: %m");
-                else {
-                        r = safe_atoi32(t, &n);
-                        if (r < 0)
-                                log_debug_errno(r, "Failed to parse \"%s\" from /proc/self/oom_score_adj, ignoring: %m", t);
-                }
         }
 
         return sd_bus_message_append(reply, "i", n);
@@ -139,13 +131,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         uint64_t n;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (c->coredump_filter_set)
                 n = c->coredump_filter;
@@ -175,12 +166,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int32_t n;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (c->nice_set)
                 n = c->nice;
@@ -203,12 +193,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int32_t n;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (c->cpu_sched_set)
                 n = c->cpu_sched_policy;
@@ -230,12 +219,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int32_t n;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (c->cpu_sched_set)
                 n = c->cpu_sched_priority;
@@ -260,14 +248,13 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         _cleanup_(cpu_set_reset) CPUSet s = {};
         _cleanup_free_ uint8_t *array = NULL;
         size_t allocated;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (c->cpu_affinity_from_numa) {
                 int r;
@@ -291,13 +278,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         _cleanup_free_ uint8_t *array = NULL;
         size_t allocated;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         (void) cpu_set_to_dbus(&c->numa_policy.nodes, &array, &allocated);
 
@@ -312,12 +298,11 @@
                 sd_bus_message *reply,
                 void *userdata,
                 sd_bus_error *error) {
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int32_t policy;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         policy = numa_policy_get_type(&c->numa_policy);
 
@@ -333,12 +318,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         uint64_t u;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (c->timer_slack_nsec != NSEC_INFINITY)
                 u = (uint64_t) c->timer_slack_nsec;
@@ -357,17 +341,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         _cleanup_strv_free_ char **l = NULL;
         int r;
 
-#if HAVE_SECCOMP
-        void *id, *val;
-#endif
-
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'r', "bas");
         if (r < 0)
@@ -378,12 +357,17 @@
                 return r;
 
 #if HAVE_SECCOMP
+        void *id, *val;
         HASHMAP_FOREACH_KEY(val, id, c->syscall_filter) {
                 _cleanup_free_ char *name = NULL;
                 const char *e = NULL;
                 char *s;
                 int num = PTR_TO_INT(val);
 
+                if (c->syscall_allow_list && num >= 0)
+                        /* syscall with num >= 0 in allow-list is denied. */
+                        continue;
+
                 name = seccomp_syscall_resolve_num_arch(SCMP_ARCH_NATIVE, PTR_TO_INT(id) - 1);
                 if (!name)
                         continue;
@@ -426,17 +410,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         _cleanup_strv_free_ char **l = NULL;
         int r;
 
-#if HAVE_SECCOMP
-        void *id, *val;
-#endif
-
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'r', "bas");
         if (r < 0)
@@ -447,6 +426,7 @@
                 return r;
 
 #if HAVE_SECCOMP
+        void *id, *val;
         HASHMAP_FOREACH_KEY(val, id, c->syscall_log) {
                 char *name = NULL;
 
@@ -478,20 +458,15 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
         _cleanup_strv_free_ char **l = NULL;
         int r;
 
-#if HAVE_SECCOMP
-        void *id;
-#endif
-
         assert(bus);
         assert(reply);
-        assert(c);
 
 #if HAVE_SECCOMP
-        SET_FOREACH(id, c->syscall_archs) {
+        void *id;
+        SET_FOREACH(id, ASSERT_PTR((ExecContext*) userdata)->syscall_archs) {
                 const char *name;
 
                 name = seccomp_arch_to_string(PTR_TO_UINT32(id) - 1);
@@ -522,11 +497,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         return sd_bus_message_append(reply, "(bs)", c->selinux_context_ignore, c->selinux_context);
 }
@@ -540,11 +514,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         return sd_bus_message_append(reply, "(bs)", c->apparmor_profile_ignore, c->apparmor_profile);
 }
@@ -558,11 +531,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         return sd_bus_message_append(reply, "(bs)", c->smack_process_label_ignore, c->smack_process_label);
 }
@@ -576,14 +548,13 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         _cleanup_strv_free_ char **l = NULL;
         void *af;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         r = sd_bus_message_open_container(reply, 'r', "bas");
         if (r < 0)
@@ -623,12 +594,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         const char *wd;
 
         assert(bus);
         assert(reply);
-        assert(c);
 
         if (c->working_directory_home)
                 wd = "~";
@@ -650,11 +620,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int fileno;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -679,16 +648,54 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
         return sd_bus_message_append_array(reply, 'y', c->stdin_data, c->stdin_data_size);
 }
 
+static int property_get_restrict_filesystems(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        ExecContext *c = ASSERT_PTR(userdata);
+        _cleanup_free_ char **l = NULL;
+        int r;
+
+        assert(bus);
+        assert(reply);
+
+        r = sd_bus_message_open_container(reply, 'r', "bas");
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_append(reply, "b", c->restrict_filesystems_allow_list);
+        if (r < 0)
+                return r;
+
+#if HAVE_LIBBPF
+        l = set_get_strv(c->restrict_filesystems);
+        if (!l)
+                return -ENOMEM;
+#endif
+
+        strv_sort(l);
+
+        r = sd_bus_message_append_strv(reply, l);
+        if (r < 0)
+                return r;
+
+        return sd_bus_message_close_container(reply);
+}
+
 static int property_get_bind_paths(
                 sd_bus *bus,
                 const char *path,
@@ -698,12 +705,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         bool ro;
         int r;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -740,11 +746,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -775,11 +780,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -796,7 +800,22 @@
         return sd_bus_message_close_container(reply);
 }
 
-static int property_get_set_credential(
+static int sd_bus_message_append_log_filter_patterns(sd_bus_message *reply, Set *patterns, bool is_allowlist) {
+        const char *pattern;
+        int r;
+
+        assert(reply);
+
+        SET_FOREACH(pattern, patterns) {
+                r = sd_bus_message_append(reply, "(bs)", is_allowlist, pattern);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int property_get_log_filter_patterns(
                 sd_bus *bus,
                 const char *path,
                 const char *interface,
@@ -806,11 +825,42 @@
                 sd_bus_error *error) {
 
         ExecContext *c = userdata;
+        int r;
+
+        assert(c);
+        assert(reply);
+
+        r = sd_bus_message_open_container(reply, 'a', "(bs)");
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_append_log_filter_patterns(reply, c->log_filter_allowed_patterns,
+                                                      /* is_allowlist = */ true);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_append_log_filter_patterns(reply, c->log_filter_denied_patterns,
+                                                      /* is_allowlist = */ false);
+        if (r < 0)
+                return r;
+
+        return sd_bus_message_close_container(reply);
+}
+
+static int property_get_set_credential(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        ExecContext *c = ASSERT_PTR(userdata);
         ExecSetCredential *sc;
         int r;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -820,6 +870,9 @@
 
         HASHMAP_FOREACH(sc, c->set_credentials) {
 
+                if (sc->encrypted != streq(property, "SetCredentialEncrypted"))
+                        continue;
+
                 r = sd_bus_message_open_container(reply, 'r', "say");
                 if (r < 0)
                         return r;
@@ -849,12 +902,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
-        char **i, **j;
+        ExecContext *c = ASSERT_PTR(userdata);
+        ExecLoadCredential *lc;
         int r;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -862,8 +914,12 @@
         if (r < 0)
                 return r;
 
-        STRV_FOREACH_PAIR(i, j, c->load_credentials) {
-                r = sd_bus_message_append(reply, "(ss)", *i, *j);
+        HASHMAP_FOREACH(lc, c->load_credentials) {
+
+                if (lc->encrypted != streq(property, "LoadCredentialEncrypted"))
+                        continue;
+
+                r = sd_bus_message_append(reply, "(ss)", lc->id, lc->path);
                 if (r < 0)
                         return r;
         }
@@ -880,10 +936,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -899,10 +954,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -918,12 +972,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
-        MountOptions *m;
+        ExecContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -951,11 +1003,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -964,8 +1015,6 @@
                 return r;
 
         for (size_t i = 0; i < c->n_mount_images; i++) {
-                MountOptions *m;
-
                 r = sd_bus_message_open_container(reply, SD_BUS_TYPE_STRUCT, "ssba(ss)");
                 if (r < 0)
                         return r;
@@ -1006,11 +1055,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ExecContext *c = userdata;
+        ExecContext *c = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(c);
         assert(property);
         assert(reply);
 
@@ -1019,8 +1067,6 @@
                 return r;
 
         for (size_t i = 0; i < c->n_extension_images; i++) {
-                MountOptions *m;
-
                 r = sd_bus_message_open_container(reply, SD_BUS_TYPE_STRUCT, "sba(ss)");
                 if (r < 0)
                         return r;
@@ -1051,6 +1097,65 @@
         return sd_bus_message_close_container(reply);
 }
 
+static int bus_property_get_exec_dir(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        ExecDirectory *d = ASSERT_PTR(userdata);
+        int r;
+
+        assert(bus);
+        assert(property);
+        assert(reply);
+
+        r = sd_bus_message_open_container(reply, 'a', "s");
+        if (r < 0)
+                return r;
+
+        for (size_t i = 0; i < d->n_items; i++) {
+                r = sd_bus_message_append_basic(reply, 's', d->items[i].path);
+                if (r < 0)
+                        return r;
+        }
+
+        return sd_bus_message_close_container(reply);
+}
+
+static int bus_property_get_exec_dir_symlink(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        ExecDirectory *d = ASSERT_PTR(userdata);
+        int r;
+
+        assert(bus);
+        assert(property);
+        assert(reply);
+
+        r = sd_bus_message_open_container(reply, 'a', "(sst)");
+        if (r < 0)
+                return r;
+
+        for (size_t i = 0; i < d->n_items; i++)
+                STRV_FOREACH(dst, d->items[i].symlinks) {
+                        r = sd_bus_message_append(reply, "(sst)", d->items[i].path, *dst, 0 /* flags, unused for now */);
+                        if (r < 0)
+                                return r;
+                }
+
+        return sd_bus_message_close_container(reply);
+}
+
 const sd_bus_vtable bus_exec_vtable[] = {
         SD_BUS_VTABLE_START(0),
         SD_BUS_PROPERTY("Environment", "as", NULL, offsetof(ExecContext, environment), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -1099,6 +1204,7 @@
         SD_BUS_PROPERTY("RootHashSignature", "ay", property_get_root_hash_sig, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RootHashSignaturePath", "s", NULL, offsetof(ExecContext, root_hash_sig_path), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RootVerity", "s", NULL, offsetof(ExecContext, root_verity), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("ExtensionDirectories", "as", NULL, offsetof(ExecContext, extension_directories), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("ExtensionImages", "a(sba(ss))", property_get_extension_images, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("MountImages", "a(ssba(ss))", property_get_mount_images, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("OOMScoreAdjust", "i", property_get_oom_score_adjust, 0, SD_BUS_VTABLE_PROPERTY_CONST),
@@ -1126,6 +1232,8 @@
         SD_BUS_PROPERTY("TTYReset", "b", bus_property_get_bool, offsetof(ExecContext, tty_reset), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("TTYVHangup", "b", bus_property_get_bool, offsetof(ExecContext, tty_vhangup), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("TTYVTDisallocate", "b", bus_property_get_bool, offsetof(ExecContext, tty_vt_disallocate), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("TTYRows", "q", bus_property_get_unsigned, offsetof(ExecContext, tty_rows), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("TTYColumns", "q", bus_property_get_unsigned, offsetof(ExecContext, tty_cols), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("SyslogPriority", "i", bus_property_get_int, offsetof(ExecContext, syslog_priority), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("SyslogIdentifier", "s", NULL, offsetof(ExecContext, syslog_identifier), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("SyslogLevelPrefix", "b", bus_property_get_bool, offsetof(ExecContext, syslog_level_prefix), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -1135,6 +1243,7 @@
         SD_BUS_PROPERTY("LogRateLimitIntervalUSec", "t", bus_property_get_usec, offsetof(ExecContext, log_ratelimit_interval_usec), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("LogRateLimitBurst", "u", bus_property_get_unsigned, offsetof(ExecContext, log_ratelimit_burst), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("LogExtraFields", "aay", property_get_log_extra_fields, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("LogFilterPatterns", "a(bs)", property_get_log_filter_patterns, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("LogNamespace", "s", NULL, offsetof(ExecContext, log_namespace), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("SecureBits", "i", bus_property_get_int, offsetof(ExecContext, secure_bits), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("CapabilityBoundingSet", "t", NULL, offsetof(ExecContext, capability_bounding_set), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -1144,7 +1253,9 @@
         SD_BUS_PROPERTY("DynamicUser", "b", bus_property_get_bool, offsetof(ExecContext, dynamic_user), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RemoveIPC", "b", bus_property_get_bool, offsetof(ExecContext, remove_ipc), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("SetCredential", "a(say)", property_get_set_credential, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("SetCredentialEncrypted", "a(say)", property_get_set_credential, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("LoadCredential", "a(ss)", property_get_load_credential, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("LoadCredentialEncrypted", "a(ss)", property_get_load_credential, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("SupplementaryGroups", "as", NULL, offsetof(ExecContext, supplementary_groups), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("PAMName", "s", NULL, offsetof(ExecContext, pam_name), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("ReadWritePaths", "as", NULL, offsetof(ExecContext, read_write_paths), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -1152,6 +1263,7 @@
         SD_BUS_PROPERTY("InaccessiblePaths", "as", NULL, offsetof(ExecContext, inaccessible_paths), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("ExecPaths", "as", NULL, offsetof(ExecContext, exec_paths), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("NoExecPaths", "as", NULL, offsetof(ExecContext, no_exec_paths), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("ExecSearchPath", "as", NULL, offsetof(ExecContext, exec_search_path), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("MountFlags", "t", bus_property_get_ulong, offsetof(ExecContext, mount_flags), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("PrivateTmp", "b", bus_property_get_bool, offsetof(ExecContext, private_tmp), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("PrivateDevices", "b", bus_property_get_bool, offsetof(ExecContext, private_devices), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -1181,22 +1293,27 @@
         SD_BUS_PROPERTY("Personality", "s", property_get_personality, offsetof(ExecContext, personality), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("LockPersonality", "b", bus_property_get_bool, offsetof(ExecContext, lock_personality), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RestrictAddressFamilies", "(bas)", property_get_address_families, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("RuntimeDirectorySymlink", "a(sst)", bus_property_get_exec_dir_symlink, offsetof(ExecContext, directories[EXEC_DIRECTORY_RUNTIME]), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RuntimeDirectoryPreserve", "s", property_get_exec_preserve_mode, offsetof(ExecContext, runtime_directory_preserve_mode), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RuntimeDirectoryMode", "u", bus_property_get_mode, offsetof(ExecContext, directories[EXEC_DIRECTORY_RUNTIME].mode), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("RuntimeDirectory", "as", NULL, offsetof(ExecContext, directories[EXEC_DIRECTORY_RUNTIME].paths), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("RuntimeDirectory", "as", bus_property_get_exec_dir, offsetof(ExecContext, directories[EXEC_DIRECTORY_RUNTIME]), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("StateDirectorySymlink", "a(sst)", bus_property_get_exec_dir_symlink, offsetof(ExecContext, directories[EXEC_DIRECTORY_STATE]), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("StateDirectoryMode", "u", bus_property_get_mode, offsetof(ExecContext, directories[EXEC_DIRECTORY_STATE].mode), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("StateDirectory", "as", NULL, offsetof(ExecContext, directories[EXEC_DIRECTORY_STATE].paths), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("StateDirectory", "as", bus_property_get_exec_dir, offsetof(ExecContext, directories[EXEC_DIRECTORY_STATE]), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("CacheDirectorySymlink", "a(sst)", bus_property_get_exec_dir_symlink, offsetof(ExecContext, directories[EXEC_DIRECTORY_CACHE]), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("CacheDirectoryMode", "u", bus_property_get_mode, offsetof(ExecContext, directories[EXEC_DIRECTORY_CACHE].mode), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("CacheDirectory", "as", NULL, offsetof(ExecContext, directories[EXEC_DIRECTORY_CACHE].paths), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("CacheDirectory", "as", bus_property_get_exec_dir, offsetof(ExecContext, directories[EXEC_DIRECTORY_CACHE]), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("LogsDirectorySymlink", "a(sst)", bus_property_get_exec_dir_symlink, offsetof(ExecContext, directories[EXEC_DIRECTORY_LOGS]), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("LogsDirectoryMode", "u", bus_property_get_mode, offsetof(ExecContext, directories[EXEC_DIRECTORY_LOGS].mode), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("LogsDirectory", "as", NULL, offsetof(ExecContext, directories[EXEC_DIRECTORY_LOGS].paths), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("LogsDirectory", "as", bus_property_get_exec_dir, offsetof(ExecContext, directories[EXEC_DIRECTORY_LOGS]), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("ConfigurationDirectoryMode", "u", bus_property_get_mode, offsetof(ExecContext, directories[EXEC_DIRECTORY_CONFIGURATION].mode), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("ConfigurationDirectory", "as", NULL, offsetof(ExecContext, directories[EXEC_DIRECTORY_CONFIGURATION].paths), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("ConfigurationDirectory", "as", bus_property_get_exec_dir, offsetof(ExecContext, directories[EXEC_DIRECTORY_CONFIGURATION]), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("TimeoutCleanUSec", "t", bus_property_get_usec, offsetof(ExecContext, timeout_clean_usec), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("MemoryDenyWriteExecute", "b", bus_property_get_bool, offsetof(ExecContext, memory_deny_write_execute), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RestrictRealtime", "b", bus_property_get_bool, offsetof(ExecContext, restrict_realtime), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RestrictSUIDSGID", "b", bus_property_get_bool, offsetof(ExecContext, restrict_suid_sgid), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RestrictNamespaces", "t", bus_property_get_ulong, offsetof(ExecContext, restrict_namespaces), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("RestrictFileSystems", "(bas)", property_get_restrict_filesystems, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("BindPaths", "a(ssbt)", property_get_bind_paths, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("BindReadOnlyPaths", "a(ssbt)", property_get_bind_paths, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("TemporaryFileSystem", "a(ss)", property_get_temporary_filesystems, 0, SD_BUS_VTABLE_PROPERTY_CONST),
@@ -1333,7 +1450,7 @@
                 void *userdata,
                 sd_bus_error *ret_error) {
 
-        ExecCommand *c = *(ExecCommand**) userdata;
+        ExecCommand *exec_command = *(ExecCommand**) userdata;
         int r;
 
         assert(bus);
@@ -1343,7 +1460,7 @@
         if (r < 0)
                 return r;
 
-        LIST_FOREACH(command, c, c) {
+        LIST_FOREACH(command, c, exec_command) {
                 r = append_exec_command(reply, c);
                 if (r < 0)
                         return r;
@@ -1361,7 +1478,7 @@
                 void *userdata,
                 sd_bus_error *ret_error) {
 
-        ExecCommand *c, *exec_command = *(ExecCommand**) userdata;
+        ExecCommand *exec_command = *(ExecCommand**) userdata;
         int r;
 
         assert(bus);
@@ -1471,7 +1588,6 @@
         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                 _cleanup_free_ char *buf = NULL;
                 _cleanup_fclose_ FILE *f = NULL;
-                ExecCommand *c;
                 size_t size = 0;
 
                 if (n == 0)
@@ -1490,7 +1606,7 @@
                         if (!exec_chars)
                                 return -ENOMEM;
 
-                        a = unit_concat_strv(c->argv, UNIT_ESCAPE_C|UNIT_ESCAPE_SPECIFIERS);
+                        a = unit_concat_strv(c->argv, UNIT_ESCAPE_SPECIFIERS|UNIT_ESCAPE_EXEC_SYNTAX);
                         if (!a)
                                 return -ENOMEM;
 
@@ -1500,7 +1616,8 @@
                                 _cleanup_free_ char *t = NULL;
                                 const char *p;
 
-                                p = unit_escape_setting(c->path, UNIT_ESCAPE_C|UNIT_ESCAPE_SPECIFIERS, &t);
+                                p = unit_escape_setting(c->path,
+                                                        UNIT_ESCAPE_SPECIFIERS|UNIT_ESCAPE_EXEC_SYNTAX, &t);
                                 if (!p)
                                         return -ENOMEM;
 
@@ -1531,11 +1648,11 @@
         return 0;
 }
 
-static const char* mount_propagation_flags_to_string_with_check(unsigned long n) {
-        if (!IN_SET(n, 0, MS_SHARED, MS_PRIVATE, MS_SLAVE))
+static const char* mount_propagation_flag_to_string_with_check(unsigned long n) {
+        if (!mount_propagation_flag_is_valid(n))
                 return NULL;
 
-        return mount_propagation_flags_to_string(n);
+        return mount_propagation_flag_to_string(n);
 }
 
 static BUS_DEFINE_SET_TRANSIENT(nsec, "t", uint64_t, nsec_t, NSEC_FMT);
@@ -1556,7 +1673,7 @@
 static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(secure_bits, "i", int32_t, int, "%" PRIi32, secure_bits_to_string_alloc_with_check);
 static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(capability, "t", uint64_t, uint64_t, "%" PRIu64, capability_set_to_string_alloc);
 static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(namespace_flag, "t", uint64_t, unsigned long, "%" PRIu64, namespace_flags_to_string);
-static BUS_DEFINE_SET_TRANSIENT_TO_STRING(mount_flags, "t", uint64_t, unsigned long, "%" PRIu64, mount_propagation_flags_to_string_with_check);
+static BUS_DEFINE_SET_TRANSIENT_TO_STRING(mount_flags, "t", uint64_t, unsigned long, "%" PRIu64, mount_propagation_flag_to_string_with_check);
 
 int bus_exec_context_set_transient_property(
                 Unit *u,
@@ -1597,16 +1714,16 @@
                         return r;
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                        if (LIST_IS_EMPTY(options)) {
-                                c->root_image_options = mount_options_free_all(c->root_image_options);
-                                unit_write_settingf(u, flags, name, "%s=", name);
-                        } else {
+                        if (options) {
                                 LIST_JOIN(mount_options, c->root_image_options, options);
                                 unit_write_settingf(
                                                 u, flags|UNIT_ESCAPE_SPECIFIERS, name,
                                                 "%s=%s",
                                                 name,
                                                 format_str);
+                        } else {
+                                c->root_image_options = mount_options_free_all(c->root_image_options);
+                                unit_write_settingf(u, flags, name, "%s=", name);
                         }
                 }
 
@@ -1724,6 +1841,61 @@
         if (streq(name, "LogRateLimitBurst"))
                 return bus_set_transient_unsigned(u, name, &c->log_ratelimit_burst, message, flags, error);
 
+        if (streq(name, "LogFilterPatterns")) {
+                /* Use _cleanup_free_, not _cleanup_strv_free_, as we don't want the content of the strv
+                 * to be freed. */
+                _cleanup_free_ char **allow_list = NULL, **deny_list = NULL;
+                const char *pattern;
+                int is_allowlist;
+
+                r = sd_bus_message_enter_container(message, 'a', "(bs)");
+                if (r < 0)
+                        return r;
+
+                while ((r = sd_bus_message_read(message, "(bs)", &is_allowlist, &pattern)) > 0) {
+                        _cleanup_(pattern_freep) pcre2_code *compiled_pattern = NULL;
+
+                        if (isempty(pattern))
+                                continue;
+
+                        r = pattern_compile_and_log(pattern, 0, &compiled_pattern);
+                        if (r < 0)
+                                return r;
+
+                        r = strv_push(is_allowlist ? &allow_list : &deny_list, (char *)pattern);
+                        if (r < 0)
+                                return r;
+                }
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_exit_container(message);
+                if (r < 0)
+                        return r;
+
+                if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                        if (strv_isempty(allow_list) && strv_isempty(deny_list)) {
+                                c->log_filter_allowed_patterns = set_free(c->log_filter_allowed_patterns);
+                                c->log_filter_denied_patterns = set_free(c->log_filter_denied_patterns);
+                                unit_write_settingf(u, flags, name, "%s=", name);
+                        } else {
+                                r = set_put_strdupv(&c->log_filter_allowed_patterns, allow_list);
+                                if (r < 0)
+                                        return r;
+                                r = set_put_strdupv(&c->log_filter_denied_patterns, deny_list);
+                                if (r < 0)
+                                        return r;
+
+                                STRV_FOREACH(unit_pattern, allow_list)
+                                        unit_write_settingf(u, flags, name, "%s=%s", name, *unit_pattern);
+                                STRV_FOREACH(unit_pattern, deny_list)
+                                        unit_write_settingf(u, flags, name, "%s=~%s", name, *unit_pattern);
+                        }
+                }
+
+                return 1;
+        }
+
         if (streq(name, "Personality"))
                 return bus_set_transient_personality(u, name, &c->personality, message, flags, error);
 
@@ -1748,6 +1920,12 @@
         if (streq(name, "TTYVTDisallocate"))
                 return bus_set_transient_bool(u, name, &c->tty_vt_disallocate, message, flags, error);
 
+        if (streq(name, "TTYRows"))
+                return bus_set_transient_unsigned(u, name, &c->tty_rows, message, flags, error);
+
+        if (streq(name, "TTYColumns"))
+                return bus_set_transient_unsigned(u, name, &c->tty_cols, message, flags, error);
+
         if (streq(name, "PrivateTmp"))
                 return bus_set_transient_bool(u, name, &c->private_tmp, message, flags, error);
 
@@ -1877,6 +2055,63 @@
         if (streq(name, "RestrictNamespaces"))
                 return bus_set_transient_namespace_flag(u, name, &c->restrict_namespaces, message, flags, error);
 
+        if (streq(name, "RestrictFileSystems")) {
+                int allow_list;
+                _cleanup_strv_free_ char **l = NULL;
+
+                r = sd_bus_message_enter_container(message, 'r', "bas");
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_read(message, "b", &allow_list);
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_read_strv(message, &l);
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_exit_container(message);
+                if (r < 0)
+                        return r;
+
+                if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                        _cleanup_free_ char *joined = NULL;
+                        FilesystemParseFlags invert_flag = allow_list ? 0 : FILESYSTEM_PARSE_INVERT;
+
+                        if (strv_isempty(l)) {
+                                c->restrict_filesystems_allow_list = false;
+                                c->restrict_filesystems = set_free(c->restrict_filesystems);
+
+                                unit_write_setting(u, flags, name, "RestrictFileSystems=");
+                                return 1;
+                        }
+
+                        if (!c->restrict_filesystems)
+                                c->restrict_filesystems_allow_list = allow_list;
+
+                        STRV_FOREACH(s, l) {
+                                r = lsm_bpf_parse_filesystem(
+                                              *s,
+                                              &c->restrict_filesystems,
+                                              FILESYSTEM_PARSE_LOG|
+                                              (invert_flag ? FILESYSTEM_PARSE_INVERT : 0)|
+                                              (c->restrict_filesystems_allow_list ? FILESYSTEM_PARSE_ALLOW_LIST : 0),
+                                              u->id, NULL, 0);
+                                if (r < 0)
+                                        return r;
+                        }
+
+                        joined = strv_join(l, " ");
+                        if (!joined)
+                                return -ENOMEM;
+
+                        unit_write_settingf(u, flags, name, "%s=%s%s", name, allow_list ? "" : "~", joined);
+                }
+
+                return 1;
+        }
+
         if (streq(name, "MountFlags"))
                 return bus_set_transient_mount_flags(u, name, &c->mount_flags, message, flags, error);
 
@@ -1888,7 +2123,6 @@
 
         if (streq(name, "SupplementaryGroups")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
@@ -1920,7 +2154,7 @@
 
                 return 1;
 
-        } else if (streq(name, "SetCredential")) {
+        } else if (STR_IN_SET(name, "SetCredential", "SetCredentialEncrypted")) {
                 bool isempty = true;
 
                 r = sd_bus_message_enter_container(message, 'a', "(say)");
@@ -1968,20 +2202,24 @@
                                 if (old) {
                                         free_and_replace(old->data, copy);
                                         old->size = sz;
+                                        old->encrypted = streq(name, "SetCredentialEncrypted");
                                 } else {
                                         _cleanup_(exec_set_credential_freep) ExecSetCredential *sc = NULL;
 
-                                        sc = new0(ExecSetCredential, 1);
+                                        sc = new(ExecSetCredential, 1);
                                         if (!sc)
                                                 return -ENOMEM;
 
-                                        sc->id = strdup(id);
+                                        *sc = (ExecSetCredential) {
+                                                .id = strdup(id),
+                                                .data = TAKE_PTR(copy),
+                                                .size = sz,
+                                                .encrypted = streq(name, "SetCredentialEncrypted"),
+                                        };
+
                                         if (!sc->id)
                                                 return -ENOMEM;
 
-                                        sc->data = TAKE_PTR(copy);
-                                        sc->size = sz;
-
                                         r = hashmap_ensure_put(&c->set_credentials, &exec_set_credential_hash_ops, sc->id, sc);
                                         if (r < 0)
                                                 return r;
@@ -2012,7 +2250,7 @@
 
                 return 1;
 
-        } else if (streq(name, "LoadCredential")) {
+        } else if (STR_IN_SET(name, "LoadCredential", "LoadCredentialEncrypted")) {
                 bool isempty = true;
 
                 r = sd_bus_message_enter_container(message, 'a', "(ss)");
@@ -2037,9 +2275,39 @@
                         isempty = false;
 
                         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                r = strv_extend_strv(&c->load_credentials, STRV_MAKE(id, source), /* filter_duplicates = */ false);
-                                if (r < 0)
-                                        return r;
+                                _cleanup_free_ char *copy = NULL;
+                                ExecLoadCredential *old;
+
+                                copy = strdup(source);
+                                if (!copy)
+                                        return -ENOMEM;
+
+                                old = hashmap_get(c->load_credentials, id);
+                                if (old) {
+                                        free_and_replace(old->path, copy);
+                                        old->encrypted = streq(name, "LoadCredentialEncrypted");
+                                } else {
+                                        _cleanup_(exec_load_credential_freep) ExecLoadCredential *lc = NULL;
+
+                                        lc = new(ExecLoadCredential, 1);
+                                        if (!lc)
+                                                return -ENOMEM;
+
+                                        *lc = (ExecLoadCredential) {
+                                                .id = strdup(id),
+                                                .path = TAKE_PTR(copy),
+                                                .encrypted = streq(name, "LoadCredentialEncrypted"),
+                                        };
+
+                                        if (!lc->id)
+                                                return -ENOMEM;
+
+                                        r = hashmap_ensure_put(&c->load_credentials, &exec_load_credential_hash_ops, lc->id, lc);
+                                        if (r < 0)
+                                                return r;
+
+                                        TAKE_PTR(lc);
+                                }
 
                                 (void) unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "%s=%s:%s", name, id, source);
                         }
@@ -2050,7 +2318,7 @@
                         return r;
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags) && isempty) {
-                        c->load_credentials = strv_free(c->load_credentials);
+                        c->load_credentials = hashmap_free(c->load_credentials);
                         (void) unit_write_settingf(u, flags, name, "%s=", name);
                 }
 
@@ -2219,7 +2487,6 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *joined = NULL;
                         SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT;
-                        char **s;
 
                         if (strv_isempty(l)) {
                                 c->syscall_allow_list = false;
@@ -2241,7 +2508,7 @@
                                                                          -1,
                                                                          c->syscall_filter,
                                                                          SECCOMP_PARSE_PERMISSIVE |
-                                                                         SECCOMP_PARSE_ALLOW_LIST | invert_flag,
+                                                                         SECCOMP_PARSE_ALLOW_LIST,
                                                                          u->id,
                                                                          NULL, 0);
                                         if (r < 0)
@@ -2304,7 +2571,6 @@
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *joined = NULL;
                         SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT;
-                        char **s;
 
                         if (strv_isempty(l)) {
                                 c->syscall_log_allow_list = false;
@@ -2356,9 +2622,7 @@
 
                         if (strv_isempty(l))
                                 c->syscall_archs = set_free(c->syscall_archs);
-                        else {
-                                char **s;
-
+                        else
                                 STRV_FOREACH(s, l) {
                                         uint32_t a;
 
@@ -2371,8 +2635,6 @@
                                                 return r;
                                 }
 
-                        }
-
                         joined = strv_join(l, " ");
                         if (!joined)
                                 return -ENOMEM;
@@ -2404,7 +2666,6 @@
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *joined = NULL;
-                        char **s;
 
                         if (strv_isempty(l)) {
                                 c->address_families_allow_list = allow_list;
@@ -2561,15 +2822,15 @@
                 return 1;
 
         } else if (streq(name, "CPUSchedulingPriority")) {
-                int32_t p, min, max;
+                int32_t p;
 
                 r = sd_bus_message_read(message, "i", &p);
                 if (r < 0)
                         return r;
 
-                min = sched_get_priority_min(c->cpu_sched_policy);
-                max = sched_get_priority_max(c->cpu_sched_policy);
-                if (p < min || p > max)
+                /* On Linux RR/FIFO range from 1 to 99 and OTHER/BATCH may only be 0. Policy might be set
+                 * later so we do not check the precise range, but only the generic outer bounds. */
+                if (p < 0 || p > 99)
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid CPU scheduling priority: %i", p);
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
@@ -2598,7 +2859,7 @@
                         if (r < 0)
                                 return r;
 
-                        c->ioprio = IOPRIO_PRIO_VALUE(q, IOPRIO_PRIO_DATA(c->ioprio));
+                        c->ioprio = ioprio_normalize(ioprio_prio_value(q, ioprio_prio_data(c->ioprio)));
                         c->ioprio_set = true;
 
                         unit_write_settingf(u, flags, name, "IOSchedulingClass=%s", s);
@@ -2617,7 +2878,7 @@
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid IO scheduling priority: %i", p);
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                        c->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_PRIO_CLASS(c->ioprio), p);
+                        c->ioprio = ioprio_normalize(ioprio_prio_value(ioprio_prio_class(c->ioprio), p));
                         c->ioprio_set = true;
 
                         unit_write_settingf(u, flags, name, "IOSchedulingPriority=%i", p);
@@ -2849,7 +3110,7 @@
                                 if (!joined)
                                         return -ENOMEM;
 
-                                e = strv_env_merge(2, c->environment, l);
+                                e = strv_env_merge(c->environment, l);
                                 if (!e)
                                         return -ENOMEM;
 
@@ -2883,7 +3144,7 @@
                                 if (!joined)
                                         return -ENOMEM;
 
-                                e = strv_env_merge(2, c->unset_environment, l);
+                                e = strv_env_merge(c->unset_environment, l);
                                 if (!e)
                                         return -ENOMEM;
 
@@ -2933,7 +3194,6 @@
                 _cleanup_fclose_ FILE *f = NULL;
                 _cleanup_strv_free_ char **l = NULL;
                 size_t size = 0;
-                char **i;
 
                 r = sd_bus_message_enter_container(message, 'a', "(sb)");
                 if (r < 0)
@@ -3048,10 +3308,10 @@
                 return 1;
 
         } else if (STR_IN_SET(name, "ReadWriteDirectories", "ReadOnlyDirectories", "InaccessibleDirectories",
-                              "ReadWritePaths", "ReadOnlyPaths", "InaccessiblePaths", "ExecPaths", "NoExecPaths")) {
+                              "ReadWritePaths", "ReadOnlyPaths", "InaccessiblePaths", "ExecPaths", "NoExecPaths",
+                              "ExtensionDirectories")) {
                 _cleanup_strv_free_ char **l = NULL;
                 char ***dirs;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
@@ -3078,6 +3338,8 @@
                                 dirs = &c->exec_paths;
                         else if (streq(name, "NoExecPaths"))
                                 dirs = &c->no_exec_paths;
+                        else if (streq(name, "ExtensionDirectories"))
+                                dirs = &c->extension_directories;
                         else /* "InaccessiblePaths" */
                                 dirs = &c->inaccessible_paths;
 
@@ -3101,9 +3363,37 @@
 
                 return 1;
 
+        } else if (streq(name, "ExecSearchPath")) {
+                _cleanup_strv_free_ char **l = NULL;
+
+                r = sd_bus_message_read_strv(message, &l);
+                if (r < 0)
+                        return r;
+
+                STRV_FOREACH(p, l)
+                        if (!path_is_absolute(*p) || !path_is_normalized(*p) || strchr(*p, ':'))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid %s", name);
+
+                if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                        if (strv_isempty(l)) {
+                                c->exec_search_path = strv_free(c->exec_search_path);
+                                unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "ExecSearchPath=");
+                        } else {
+                                _cleanup_free_ char *joined = NULL;
+                                r = strv_extend_strv(&c->exec_search_path, l, true);
+                                if (r < 0)
+                                        return -ENOMEM;
+                                joined = strv_join(c->exec_search_path, ":");
+                                if (!joined)
+                                        return log_oom();
+                                unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "ExecSearchPath=%s", joined);
+                        }
+                }
+
+                return 1;
+
         } else if (STR_IN_SET(name, "RuntimeDirectory", "StateDirectory", "CacheDirectory", "LogsDirectory", "ConfigurationDirectory")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
@@ -3128,14 +3418,17 @@
                         d = c->directories + i;
 
                         if (strv_isempty(l)) {
-                                d->paths = strv_free(d->paths);
+                                exec_directory_done(d);
                                 unit_write_settingf(u, flags, name, "%s=", name);
                         } else {
                                 _cleanup_free_ char *joined = NULL;
 
-                                r = strv_extend_strv(&d->paths, l, true);
-                                if (r < 0)
-                                        return r;
+                                STRV_FOREACH(source, l) {
+                                        r = exec_directory_add(d, *source, NULL);
+                                        if (r < 0)
+                                                return log_oom();
+                                }
+                                exec_directory_sort(d);
 
                                 joined = unit_concat_strv(l, UNIT_ESCAPE_SPECIFIERS);
                                 if (!joined)
@@ -3296,7 +3589,7 @@
                         if (soft) {
                                 const char *n;
 
-                                n = strndupa(suffix, soft - suffix);
+                                n = strndupa_safe(suffix, soft - suffix);
                                 ri = rlimit_from_string(n);
                                 if (ri >= 0)
                                         name = strjoina("Limit", n);
@@ -3545,6 +3838,68 @@
                 extension_images = mount_image_free_many(extension_images, &n_extension_images);
 
                 return 1;
+
+        } else if (STR_IN_SET(name, "StateDirectorySymlink", "RuntimeDirectorySymlink", "CacheDirectorySymlink", "LogsDirectorySymlink")) {
+                char *source, *destination;
+                ExecDirectory *directory;
+                uint64_t symlink_flags; /* No flags for now, reserved for future uses. */
+                ExecDirectoryType i;
+
+                assert_se((i = exec_directory_type_symlink_from_string(name)) >= 0);
+                directory = c->directories + i;
+
+                r = sd_bus_message_enter_container(message, 'a', "(sst)");
+                if (r < 0)
+                        return r;
+
+                while ((r = sd_bus_message_read(message, "(sst)", &source, &destination, &symlink_flags)) > 0) {
+                        if (!path_is_valid(source))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Source path %s is not valid.", source);
+                        if (path_is_absolute(source))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Source path %s is absolute.", source);
+                        if (!path_is_normalized(source))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Source path %s is not normalized.", source);
+                        if (!path_is_valid(destination))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Destination path %s is not valid.", destination);
+                        if (path_is_absolute(destination))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Destination path %s is absolute.", destination);
+                        if (!path_is_normalized(destination))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Destination path %s is not normalized.", destination);
+                        if (symlink_flags != 0)
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Flags must be zero.");
+
+                        if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                                _cleanup_free_ char *destination_escaped = NULL, *source_escaped = NULL;
+
+                                r = exec_directory_add(directory, source, destination);
+                                if (r < 0)
+                                        return r;
+
+                                /* Need to store them in the unit with the escapes, so that they can be parsed again */
+                                source_escaped = xescape(source, ":");
+                                destination_escaped = xescape(destination, ":");
+                                if (!source_escaped || !destination_escaped)
+                                        return -ENOMEM;
+
+                                unit_write_settingf(
+                                                u, flags|UNIT_ESCAPE_SPECIFIERS, exec_directory_type_to_string(i),
+                                                "%s=%s:%s",
+                                                exec_directory_type_to_string(i),
+                                                source_escaped,
+                                                destination_escaped);
+                        }
+                }
+                if (r < 0)
+                        return r;
+
+                exec_directory_sort(directory);
+
+                r = sd_bus_message_exit_container(message);
+                if (r < 0)
+                        return r;
+
+                return 1;
+
         }
 
         return 0;
diff --git a/src/core/dbus-job.c b/src/core/dbus-job.c
index 3334b97..9792a5c 100644
--- a/src/core/dbus-job.c
+++ b/src/core/dbus-job.c
@@ -7,6 +7,7 @@
 #include "bus-util.h"
 #include "dbus-job.h"
 #include "dbus-unit.h"
+#include "dbus-util.h"
 #include "dbus.h"
 #include "job.h"
 #include "log.h"
@@ -27,11 +28,10 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *p = NULL;
-        Job *j = userdata;
+        Job *j = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(j);
 
         p = unit_dbus_path(j->unit);
         if (!p)
@@ -41,11 +41,10 @@
 }
 
 int bus_job_method_cancel(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Job *j = userdata;
+        Job *j = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(j);
 
         r = mac_selinux_unit_access_check(j->unit, message, "stop", error);
         if (r < 0)
@@ -121,16 +120,14 @@
         SD_BUS_VTABLE_START(0),
 
         SD_BUS_METHOD("Cancel", NULL, NULL, bus_job_method_cancel, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetAfter",
-                                 NULL,,
-                                 "a(usssoo)",
-                                 SD_BUS_PARAM(jobs),
+        SD_BUS_METHOD_WITH_ARGS("GetAfter",
+                                 SD_BUS_NO_ARGS,
+                                 SD_BUS_RESULT("a(usssoo)", jobs),
                                  bus_job_method_get_waiting_jobs,
                                  SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetBefore",
-                                 NULL,,
-                                 "a(usssoo)",
-                                 SD_BUS_PARAM(jobs),
+        SD_BUS_METHOD_WITH_ARGS("GetBefore",
+                                 SD_BUS_NO_ARGS,
+                                 SD_BUS_RESULT("a(usssoo)", jobs),
                                  bus_job_method_get_waiting_jobs,
                                  SD_BUS_VTABLE_UNPRIVILEGED),
 
@@ -138,11 +135,12 @@
         SD_BUS_PROPERTY("Unit", "(so)", property_get_unit, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("JobType", "s", property_get_type, offsetof(Job, type), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("State", "s", property_get_state, offsetof(Job, state), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+        SD_BUS_PROPERTY("ActivationDetails", "a(ss)", bus_property_get_activation_details, offsetof(Job, activation_details), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_VTABLE_END
 };
 
 static int bus_job_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Job *j;
         int r;
 
@@ -150,7 +148,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         r = manager_get_job_from_dbus_path(m, path, &j);
         if (r < 0)
@@ -195,11 +192,10 @@
 static int send_new_signal(sd_bus *bus, void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *p = NULL;
-        Job *j = userdata;
+        Job *j = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(j);
 
         p = job_dbus_path(j);
         if (!p)
@@ -223,10 +219,9 @@
 
 static int send_changed_signal(sd_bus *bus, void *userdata) {
         _cleanup_free_ char *p = NULL;
-        Job *j = userdata;
+        Job *j = ASSERT_PTR(userdata);
 
         assert(bus);
-        assert(j);
 
         p = job_dbus_path(j);
         if (!p)
@@ -273,11 +268,10 @@
 static int send_removed_signal(sd_bus *bus, void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *p = NULL;
-        Job *j = userdata;
+        Job *j = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(j);
 
         p = job_dbus_path(j);
         if (!p)
@@ -316,10 +310,9 @@
 }
 
 static int bus_job_track_handler(sd_bus_track *t, void *userdata) {
-        Job *j = userdata;
+        Job *j = ASSERT_PTR(userdata);
 
         assert(t);
-        assert(j);
 
         j->bus_track = sd_bus_track_unref(j->bus_track); /* make sure we aren't called again */
 
diff --git a/src/core/dbus-kill.c b/src/core/dbus-kill.c
index 6333f3b..19e439f 100644
--- a/src/core/dbus-kill.c
+++ b/src/core/dbus-kill.c
@@ -16,11 +16,9 @@
                 sd_bus_message *reply,
                 void *userdata,
                 sd_bus_error *error) {
-        KillContext *c = userdata;
+        KillContext *c = ASSERT_PTR(userdata);
         int s;
 
-        assert(c);
-
         s = restart_kill_signal(c);
         return sd_bus_message_append_basic(reply, 'i', &s);
 }
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index de057a0..2d0b7ad 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -11,6 +11,7 @@
 #include "bus-common-errors.h"
 #include "bus-get-properties.h"
 #include "bus-log-control-api.h"
+#include "chase-symlinks.h"
 #include "data-fd-util.h"
 #include "dbus-cgroup.h"
 #include "dbus-execute.h"
@@ -24,13 +25,13 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
-#include "fs-util.h"
 #include "install.h"
 #include "log.h"
 #include "manager-dump.h"
 #include "os-util.h"
 #include "parse-util.h"
 #include "path-util.h"
+#include "process-util.h"
 #include "selinux-access.h"
 #include "stat-util.h"
 #include "string-util.h"
@@ -60,6 +61,9 @@
 static BUS_DEFINE_PROPERTY_GET_REF(property_get_hashmap_size, "u", Hashmap *, hashmap_size);
 static BUS_DEFINE_PROPERTY_GET_REF(property_get_set_size, "u", Set *, set_size);
 static BUS_DEFINE_PROPERTY_GET(property_get_default_timeout_abort_usec, "t", Manager, manager_default_timeout_abort_usec);
+static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_watchdog_device, "s", watchdog_get_device());
+static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_watchdog_last_ping_realtime, "t", watchdog_get_last_ping(CLOCK_REALTIME));
+static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_watchdog_last_ping_monotonic, "t", watchdog_get_last_ping(CLOCK_MONOTONIC));
 
 static int property_get_virtualization(
                 sd_bus *bus,
@@ -70,7 +74,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        int v;
+        Virtualization v;
 
         assert(bus);
         assert(reply);
@@ -97,11 +101,10 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *s = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         s = manager_taint_string(m);
         if (!s)
@@ -189,12 +192,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         double d;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         if (MANAGER_IS_FINISHED(m))
                 d = 1.0;
@@ -214,12 +216,11 @@
                 sd_bus_error *error) {
 
         _cleanup_strv_free_ char **l = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         r = manager_get_effective_environment(m, &l);
         if (r < 0)
@@ -237,9 +238,8 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(bus);
         assert(reply);
 
@@ -255,15 +255,48 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(bus);
         assert(reply);
 
         return sd_bus_message_append(reply, "t", manager_get_watchdog(m, WATCHDOG_RUNTIME));
 }
 
+static int property_get_pretimeout_watchdog(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        Manager *m = ASSERT_PTR(userdata);
+
+        assert(bus);
+        assert(reply);
+
+        return sd_bus_message_append(reply, "t", manager_get_watchdog(m, WATCHDOG_PRETIMEOUT));
+}
+
+static int property_get_pretimeout_watchdog_governor(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        Manager *m = ASSERT_PTR(userdata);
+
+        assert(bus);
+        assert(reply);
+
+        return sd_bus_message_append(reply, "s", m->watchdog_pretimeout_governor);
+}
+
 static int property_get_reboot_watchdog(
                 sd_bus *bus,
                 const char *path,
@@ -273,9 +306,8 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(bus);
         assert(reply);
 
@@ -291,9 +323,8 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(bus);
         assert(reply);
 
@@ -313,7 +344,8 @@
         if (r < 0)
                 return r;
 
-        return manager_override_watchdog(m, type, timeout);
+        manager_override_watchdog(m, type, timeout);
+        return 0;
 }
 
 static int property_set_runtime_watchdog(
@@ -328,6 +360,40 @@
         return property_set_watchdog(userdata, WATCHDOG_RUNTIME, value);
 }
 
+static int property_set_pretimeout_watchdog(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *value,
+                void *userdata,
+                sd_bus_error *error) {
+
+        return property_set_watchdog(userdata, WATCHDOG_PRETIMEOUT, value);
+}
+
+static int property_set_pretimeout_watchdog_governor(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *value,
+                void *userdata,
+                sd_bus_error *error) {
+
+        Manager *m = ASSERT_PTR(userdata);
+        char *governor;
+        int r;
+
+        r = sd_bus_message_read(value, "s", &governor);
+        if (r < 0)
+                return r;
+        if (!string_is_safe(governor))
+                return -EINVAL;
+
+        return manager_override_watchdog_pretimeout_governor(m, governor);
+}
+
 static int property_set_reboot_watchdog(
                 sd_bus *bus,
                 const char *path,
@@ -349,15 +415,41 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _unused_ Manager *m = userdata;
+        _unused_ Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(bus);
         assert(value);
 
         return property_set_watchdog(userdata, WATCHDOG_KEXEC, value);
 }
 
+static int property_get_oom_score_adjust(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        Manager *m = ASSERT_PTR(userdata);
+        int r, n;
+
+        assert(bus);
+        assert(reply);
+
+        if (m->default_oom_score_adjust_set)
+                n = m->default_oom_score_adjust;
+        else {
+                n = 0;
+                r = get_oom_score_adjust(&n);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to read current OOM score adjustment value, ignoring: %m");
+        }
+
+        return sd_bus_message_append(reply, "i", n);
+}
+
 static int bus_get_unit_by_name(Manager *m, sd_bus_message *message, const char *name, Unit **ret_unit, sd_bus_error *error) {
         Unit *u;
         int r;
@@ -426,13 +518,12 @@
 }
 
 static int method_get_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Unit *u;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -448,13 +539,12 @@
 }
 
 static int method_get_unit_by_pid(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         pid_t pid;
         Unit *u;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(pid_t) == sizeof(uint32_t));
 
@@ -487,7 +577,7 @@
 
 static int method_get_unit_by_invocation_id(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *path = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         sd_id128_t id;
         const void *a;
         Unit *u;
@@ -495,7 +585,6 @@
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -564,14 +653,69 @@
         return reply_unit_path(u, message, error);
 }
 
+static int method_get_unit_by_pidfd(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        Manager *m = ASSERT_PTR(userdata);
+        _cleanup_free_ char *path = NULL;
+        int r, pidfd;
+        pid_t pid;
+        Unit *u;
+
+        assert(message);
+
+        r = sd_bus_message_read(message, "h", &pidfd);
+        if (r < 0)
+                return r;
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return sd_bus_error_set_errnof(error, r, "Failed to get PID from PIDFD: %m");
+
+        u = manager_get_unit_by_pid(m, pid);
+        if (!u)
+                return sd_bus_error_setf(error, BUS_ERROR_NO_UNIT_FOR_PID, "PID "PID_FMT" does not belong to any loaded unit.", pid);
+
+        r = mac_selinux_unit_access_check(u, message, "status", error);
+        if (r < 0)
+                return r;
+
+        path = unit_dbus_path(u);
+        if (!path)
+                return log_oom();
+
+        r = sd_bus_message_new_method_return(message, &reply);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_append(reply, "os", path, u->id);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_append_array(reply, 'y', u->invocation_id.bytes, sizeof(u->invocation_id.bytes));
+        if (r < 0)
+                return r;
+
+        /* Double-check that the process is still alive and that the PID did not change before returning the
+         * answer. */
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r == -ESRCH)
+                return sd_bus_error_setf(error,
+                                         BUS_ERROR_NO_SUCH_PROCESS,
+                                         "The PIDFD's PID "PID_FMT" changed during the lookup operation.",
+                                         pid);
+        if (r < 0)
+                return sd_bus_error_set_errnof(error, r, "Failed to get PID from PIDFD: %m");
+
+        return sd_bus_send(NULL, reply, NULL);
+}
+
 static int method_load_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Unit *u;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -606,31 +750,31 @@
 }
 
 static int method_start_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_start_unit_generic(message, userdata, JOB_START, false, error);
+        return method_start_unit_generic(message, userdata, JOB_START, /* reload_if_possible = */ false, error);
 }
 
 static int method_stop_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_start_unit_generic(message, userdata, JOB_STOP, false, error);
+        return method_start_unit_generic(message, userdata, JOB_STOP, /* reload_if_possible = */ false, error);
 }
 
 static int method_reload_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_start_unit_generic(message, userdata, JOB_RELOAD, false, error);
+        return method_start_unit_generic(message, userdata, JOB_RELOAD, /* reload_if_possible = */ false, error);
 }
 
 static int method_restart_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_start_unit_generic(message, userdata, JOB_RESTART, false, error);
+        return method_start_unit_generic(message, userdata, JOB_RESTART, /* reload_if_possible = */ false, error);
 }
 
 static int method_try_restart_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_start_unit_generic(message, userdata, JOB_TRY_RESTART, false, error);
+        return method_start_unit_generic(message, userdata, JOB_TRY_RESTART, /* reload_if_possible = */ false, error);
 }
 
 static int method_reload_or_restart_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_start_unit_generic(message, userdata, JOB_RESTART, true, error);
+        return method_start_unit_generic(message, userdata, JOB_RESTART, /* reload_if_possible = */ true, error);
 }
 
 static int method_reload_or_try_restart_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_start_unit_generic(message, userdata, JOB_TRY_RESTART, true, error);
+        return method_start_unit_generic(message, userdata, JOB_TRY_RESTART, /* reload_if_possible = */ true, error);
 }
 
 typedef enum GenericUnitOperationFlags {
@@ -681,13 +825,12 @@
 }
 
 static int method_start_unit_replace(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *old_name;
         Unit *u;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &old_name);
         if (r < 0)
@@ -699,7 +842,7 @@
         if (!u->job || u->job->type != JOB_START)
                 return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_JOB, "No job queued for unit %s", old_name);
 
-        return method_start_unit_generic(message, m, JOB_START, false, error);
+        return method_start_unit_generic(message, m, JOB_START, /* reload_if_possible = */ false, error);
 }
 
 static int method_kill_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
@@ -786,13 +929,11 @@
 
 static int method_list_units_by_names(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
-        char **unit;
         _cleanup_strv_free_ char **units = NULL;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read_strv(message, &units);
         if (r < 0)
@@ -872,7 +1013,7 @@
 
         if (!unit_is_pristine(u))
                 return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS,
-                                         "Unit %s already exists.", name);
+                                         "Unit %s was already loaded or has a fragment file.", name);
 
         /* OK, the unit failed to load and is unreferenced, now let's
          * fill in the transient data instead */
@@ -943,13 +1084,12 @@
 
 static int method_start_transient_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *name, *smode;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         JobMode mode;
         Unit *u;
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "start", error);
         if (r < 0)
@@ -983,13 +1123,12 @@
 
 static int method_get_job(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *path = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint32_t id;
         Job *j;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -1013,13 +1152,12 @@
 }
 
 static int method_cancel_job(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint32_t id;
         Job *j;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "u", &id);
         if (r < 0)
@@ -1033,11 +1171,10 @@
 }
 
 static int method_clear_jobs(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "reload", error);
         if (r < 0)
@@ -1055,11 +1192,10 @@
 }
 
 static int method_reset_failed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "reload", error);
         if (r < 0)
@@ -1078,13 +1214,12 @@
 
 static int list_units_filtered(sd_bus_message *message, void *userdata, sd_bus_error *error, char **states, char **patterns) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *k;
         Unit *u;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -1159,12 +1294,11 @@
 
 static int method_list_jobs(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Job *j;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -1211,11 +1345,10 @@
 }
 
 static int method_subscribe(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -1245,11 +1378,10 @@
 }
 
 static int method_unsubscribe(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -1268,13 +1400,18 @@
         return sd_bus_reply_method_return(message, NULL);
 }
 
-static int dump_impl(sd_bus_message *message, void *userdata, sd_bus_error *error, int (*reply)(sd_bus_message *, char *)) {
+static int dump_impl(
+                sd_bus_message *message,
+                void *userdata,
+                sd_bus_error *error,
+                char **patterns,
+                int (*reply)(sd_bus_message *, char *)) {
+
         _cleanup_free_ char *dump = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -1282,7 +1419,7 @@
         if (r < 0)
                 return r;
 
-        r = manager_get_dump_string(m, &dump);
+        r = manager_get_dump_string(m, patterns, &dump);
         if (r < 0)
                 return r;
 
@@ -1294,11 +1431,11 @@
 }
 
 static int method_dump(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return dump_impl(message, userdata, error, reply_dump);
+        return dump_impl(message, userdata, error, NULL, reply_dump);
 }
 
 static int reply_dump_by_fd(sd_bus_message *message, char *dump) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = acquire_data_fd(dump, strlen(dump), 0);
         if (fd < 0)
@@ -1308,7 +1445,30 @@
 }
 
 static int method_dump_by_fd(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return dump_impl(message, userdata, error, reply_dump_by_fd);
+        return dump_impl(message, userdata, error, NULL, reply_dump_by_fd);
+}
+
+static int dump_units_matching_patterns(
+                sd_bus_message *message,
+                void *userdata,
+                sd_bus_error *error,
+                int (*reply)(sd_bus_message *, char *)) {
+        _cleanup_strv_free_ char **patterns = NULL;
+        int r;
+
+        r = sd_bus_message_read_strv(message, &patterns);
+        if (r < 0)
+                return r;
+
+        return dump_impl(message, userdata, error, patterns, reply);
+}
+
+static int method_dump_units_matching_patterns(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        return dump_units_matching_patterns(message, userdata, error, reply_dump);
+}
+
+static int method_dump_units_matching_patterns_by_fd(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        return dump_units_matching_patterns(message, userdata, error, reply_dump_by_fd);
 }
 
 static int method_refuse_snapshot(sd_bus_message *message, void *userdata, sd_bus_error *error) {
@@ -1324,16 +1484,14 @@
 
         available = (uint64_t) svfs.f_bfree * (uint64_t) svfs.f_bsize;
 
-        if (available < RELOAD_DISK_SPACE_MIN) {
-                char fb_available[FORMAT_BYTES_MAX], fb_need[FORMAT_BYTES_MAX];
+        if (available < RELOAD_DISK_SPACE_MIN)
                 return sd_bus_error_setf(error,
                                          BUS_ERROR_DISK_FULL,
                                          "%s, not enough space available on /run/systemd. "
                                          "Currently, %s are free, but a safety buffer of %s is enforced.",
                                          message,
-                                         format_bytes(fb_available, sizeof(fb_available), available),
-                                         format_bytes(fb_need, sizeof(fb_need), RELOAD_DISK_SPACE_MIN));
-        }
+                                         FORMAT_BYTES(available),
+                                         FORMAT_BYTES(RELOAD_DISK_SPACE_MIN));
 
         return 0;
 }
@@ -1349,12 +1507,37 @@
         return 0;
 }
 
+static void log_caller(sd_bus_message *message, Manager *manager, const char *method) {
+        _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
+        const char *comm = NULL;
+        Unit *caller;
+        pid_t pid;
+
+        assert(message);
+        assert(manager);
+        assert(method);
+
+        if (sd_bus_query_sender_creds(message, SD_BUS_CREDS_PID|SD_BUS_CREDS_AUGMENT|SD_BUS_CREDS_COMM, &creds) < 0)
+                return;
+
+        /* We need at least the PID, otherwise there's nothing to log, the rest is optional */
+        if (sd_bus_creds_get_pid(creds, &pid) < 0)
+                return;
+
+        (void) sd_bus_creds_get_comm(creds, &comm);
+        caller = manager_get_unit_by_pid(manager, pid);
+
+        log_info("%s requested from client PID " PID_FMT "%s%s%s%s%s%s...",
+                 method, pid,
+                 comm ? " ('" : "", strempty(comm), comm ? "')" : "",
+                 caller ? " (unit " : "", caller ? caller->id : "", caller ? ")" : "");
+}
+
 static int method_reload(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = verify_run_space("Refusing to reload", error);
         if (r < 0)
@@ -1370,6 +1553,17 @@
         if (r == 0)
                 return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
 
+        /* Write a log message noting the unit or process who requested the Reload() */
+        log_caller(message, m, "Reloading");
+
+        /* Check the rate limit after the authorization succeeds, to avoid denial-of-service issues. */
+        if (!ratelimit_below(&m->reload_ratelimit)) {
+                log_warning("Reloading request rejected due to rate limit.");
+                return sd_bus_error_setf(error,
+                                         SD_BUS_ERROR_LIMITS_EXCEEDED,
+                                         "Reload() request rejected due to rate limit.");
+        }
+
         /* Instead of sending the reply back right away, we just
          * remember that we need to and then send it after the reload
          * is finished. That way the caller knows when the reload
@@ -1386,11 +1580,10 @@
 }
 
 static int method_reexecute(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = verify_run_space("Refusing to reexecute", error);
         if (r < 0)
@@ -1406,6 +1599,9 @@
         if (r == 0)
                 return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
 
+        /* Write a log message noting the unit or process who requested the Reexecute() */
+        log_caller(message, m, "Reexecuting");
+
         /* We don't send a reply back here, the client should
          * just wait for us disconnecting. */
 
@@ -1414,11 +1610,10 @@
 }
 
 static int method_exit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "halt", error);
         if (r < 0)
@@ -1435,11 +1630,10 @@
 }
 
 static int method_reboot(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "reboot", error);
         if (r < 0)
@@ -1455,11 +1649,10 @@
 }
 
 static int method_poweroff(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "halt", error);
         if (r < 0)
@@ -1475,11 +1668,10 @@
 }
 
 static int method_halt(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "halt", error);
         if (r < 0)
@@ -1495,11 +1687,10 @@
 }
 
 static int method_kexec(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "reboot", error);
         if (r < 0)
@@ -1517,26 +1708,23 @@
 static int method_switch_root(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *ri = NULL, *rt = NULL;
         const char *root, *init;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         struct statvfs svfs;
         uint64_t available;
         int r;
 
         assert(message);
-        assert(m);
 
         if (statvfs("/run/systemd", &svfs) < 0)
                 return sd_bus_error_set_errnof(error, errno, "Failed to statvfs(/run/systemd): %m");
 
         available = (uint64_t) svfs.f_bfree * (uint64_t) svfs.f_bsize;
 
-        if (available < RELOAD_DISK_SPACE_MIN) {
-                char fb_available[FORMAT_BYTES_MAX], fb_need[FORMAT_BYTES_MAX];
+        if (available < RELOAD_DISK_SPACE_MIN)
                 log_warning("Dangerously low amount of free space on /run/systemd, root switching might fail.\n"
                             "Currently, %s are free, but %s are suggested. Proceeding anyway.",
-                            format_bytes(fb_available, sizeof(fb_available), available),
-                            format_bytes(fb_need, sizeof(fb_need), RELOAD_DISK_SPACE_MIN));
-        }
+                            FORMAT_BYTES(available),
+                            FORMAT_BYTES(RELOAD_DISK_SPACE_MIN));
 
         r = mac_selinux_access_check(message, "reboot", error);
         if (r < 0)
@@ -1550,9 +1738,9 @@
         if (r < 0)
                 return r;
 
-        if (isempty(root))
+        if (!path_is_valid(root))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
-                                         "New root directory may not be the empty string.");
+                                         "New root directory must be a valid path.");
         if (!path_is_absolute(root))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                          "New root path '%s' is not absolute.", root);
@@ -1572,25 +1760,21 @@
                                                  "Specified switch root path '%s' does not seem to be an OS tree. os-release file is missing.",
                                                  root);
         } else {
-                _cleanup_free_ char *chased = NULL;
+                if (!path_is_valid(init))
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                 "Path to init binary '%s' is not a valid path.", init);
 
                 if (!path_is_absolute(init))
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                                  "Path to init binary '%s' not absolute.", init);
 
-                r = chase_symlinks(init, root, CHASE_PREFIX_ROOT|CHASE_TRAIL_SLASH, &chased, NULL);
+                r = chase_symlinks_and_access(init, root, CHASE_PREFIX_ROOT, X_OK, NULL, NULL);
+                if (r == -EACCES)
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                 "Init binary %s is not executable.", init);
                 if (r < 0)
                         return sd_bus_error_set_errnof(error, r,
                                                        "Could not resolve init executable %s: %m", init);
-
-                if (laccess(chased, X_OK) < 0) {
-                        if (errno == EACCES)
-                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
-                                                         "Init binary %s is not executable.", init);
-
-                        return sd_bus_error_set_errnof(error, r,
-                                                       "Could not check whether init binary %s is executable: %m", init);
-                }
         }
 
         rt = strdup(root);
@@ -1613,11 +1797,10 @@
 
 static int method_set_environment(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_strv_free_ char **plus = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "reload", error);
         if (r < 0)
@@ -1644,11 +1827,10 @@
 
 static int method_unset_environment(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_strv_free_ char **minus = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "reload", error);
         if (r < 0)
@@ -1677,11 +1859,10 @@
 
 static int method_unset_and_set_environment(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_strv_free_ char **minus = NULL, **plus = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "reload", error);
         if (r < 0)
@@ -1716,12 +1897,11 @@
 }
 
 static int method_set_exit_code(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint8_t code;
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "exit", error);
         if (r < 0)
@@ -1740,13 +1920,12 @@
 }
 
 static int method_lookup_dynamic_user_by_name(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         uid_t uid;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read_basic(message, 's', &name);
         if (r < 0)
@@ -1771,12 +1950,11 @@
 
 static int method_lookup_dynamic_user_by_uid(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *name = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uid_t uid;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(uid_t) == sizeof(uint32_t));
         r = sd_bus_message_read_basic(message, 'u', &uid);
@@ -1802,12 +1980,11 @@
 
 static int method_get_dynamic_users(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         DynamicUser *d;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(uid_t) == sizeof(uint32_t));
 
@@ -1846,11 +2023,10 @@
 }
 
 static int method_enqueue_marked_jobs(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "start", error);
         if (r < 0)
@@ -1862,7 +2038,7 @@
         if (r == 0)
                 return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
 
-        log_info("Queuing reload/restart jobs for marked units…");
+        log_info("Queuing reload/restart jobs for marked units%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         r = sd_bus_message_new_method_return(message, &reply);
@@ -1916,13 +2092,12 @@
 
 static int list_unit_files_by_patterns(sd_bus_message *message, void *userdata, sd_bus_error *error, char **states, char **patterns) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         UnitFileList *item;
         Hashmap *h;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -1987,13 +2162,12 @@
 }
 
 static int method_get_unit_file_state(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         UnitFileState state;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -2014,11 +2188,10 @@
 
 static int method_get_default_target(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *default_target = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         /* Anyone can call this method */
 
@@ -2027,6 +2200,8 @@
                 return r;
 
         r = unit_file_get_default(m->unit_file_scope, NULL, &default_target);
+        if (r == -ERFKILL)
+                sd_bus_error_setf(error, BUS_ERROR_UNIT_MASKED, "Unit file is masked.");
         if (r < 0)
                 return r;
 
@@ -2052,23 +2227,22 @@
 /* Create an error reply, using the error information from changes[]
  * if possible, and fall back to generating an error from error code c.
  * The error message only describes the first error.
- *
- * Coordinate with unit_file_dump_changes() in install.c.
  */
 static int install_error(
                 sd_bus_error *error,
                 int c,
-                UnitFileChange *changes,
+                InstallChange *changes,
                 size_t n_changes) {
 
         int r;
 
         for (size_t i = 0; i < n_changes; i++)
 
-                switch(changes[i].type_or_errno) {
+                /* When making changes here, make sure to also change install_changes_dump() in install.c. */
 
-                case 0 ... _UNIT_FILE_CHANGE_TYPE_MAX: /* not errors */
-                        continue;
+                switch (changes[i].type) {
+                case 0 ... _INSTALL_CHANGE_TYPE_MAX: /* not errors */
+                        break;
 
                 case -EEXIST:
                         if (changes[i].source)
@@ -2091,6 +2265,21 @@
                                               "Unit %s is transient or generated.", changes[i].path);
                         goto found;
 
+                case -ETXTBSY:
+                        r = sd_bus_error_setf(error, BUS_ERROR_UNIT_BAD_PATH,
+                                              "File %s is under the systemd unit hierarchy already.", changes[i].path);
+                        goto found;
+
+                case -EBADSLT:
+                        r = sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING,
+                                              "Invalid specifier in %s.", changes[i].path);
+                        goto found;
+
+                case -EIDRM:
+                        r = sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING,
+                                              "Destination unit %s is a non-template unit.", changes[i].path);
+                        goto found;
+
                 case -EUCLEAN:
                         r = sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING,
                                               "\"%s\" is not a valid unit name.",
@@ -2103,29 +2292,44 @@
                                               changes[i].path);
                         goto found;
 
+                case -EXDEV:
+                        if (changes[i].source)
+                                r = sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING,
+                                                      "Cannot alias %s as %s.",
+                                                      changes[i].source, changes[i].path);
+                        else
+                                r = sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING,
+                                                      "Invalid unit reference %s.", changes[i].path);
+                        goto found;
+
                 case -ENOENT:
                         r = sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT,
                                               "Unit file %s does not exist.", changes[i].path);
                         goto found;
 
+                case -EUNATCH:
+                        r = sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING,
+                                              "Cannot resolve specifiers in %s.", changes[i].path);
+                        goto found;
+
                 default:
-                        assert(changes[i].type_or_errno < 0); /* other errors */
-                        r = sd_bus_error_set_errnof(error, changes[i].type_or_errno, "File %s: %m", changes[i].path);
+                        assert(changes[i].type < 0); /* other errors */
+                        r = sd_bus_error_set_errnof(error, changes[i].type, "File %s: %m", changes[i].path);
                         goto found;
                 }
 
         r = c < 0 ? c : -EINVAL;
 
  found:
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         return r;
 }
 
-static int reply_unit_file_changes_and_free(
+static int reply_install_changes_and_free(
                 Manager *m,
                 sd_bus_message *message,
                 int carries_install_info,
-                UnitFileChange *changes,
+                InstallChange *changes,
                 size_t n_changes,
                 sd_bus_error *error) {
 
@@ -2133,7 +2337,7 @@
         bool bad = false, good = false;
         int r;
 
-        if (unit_file_changes_have_modification(changes, n_changes)) {
+        if (install_changes_have_modification(changes, n_changes)) {
                 r = bus_foreach_bus(m, NULL, send_unit_files_changed, NULL);
                 if (r < 0)
                         log_debug_errno(r, "Failed to send UnitFilesChanged signal: %m");
@@ -2155,14 +2359,14 @@
 
         for (size_t i = 0; i < n_changes; i++) {
 
-                if (changes[i].type_or_errno < 0) {
+                if (changes[i].type < 0) {
                         bad = true;
                         continue;
                 }
 
                 r = sd_bus_message_append(
                                 reply, "(sss)",
-                                unit_file_change_type_to_string(changes[i].type_or_errno),
+                                install_change_type_to_string(changes[i].type),
                                 changes[i].path,
                                 changes[i].source);
                 if (r < 0)
@@ -2180,23 +2384,23 @@
         if (r < 0)
                 goto fail;
 
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         return sd_bus_send(NULL, reply, NULL);
 
 fail:
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         return r;
 }
 
 static int method_enable_unit_files_generic(
                 sd_bus_message *message,
                 Manager *m,
-                int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes),
+                int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], InstallChange **changes, size_t *n_changes),
                 bool carries_install_info,
                 sd_bus_error *error) {
 
         _cleanup_strv_free_ char **l = NULL;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         UnitFileFlags flags;
         int r;
@@ -2236,50 +2440,49 @@
         if (r < 0)
                 return install_error(error, r, changes, n_changes);
 
-        return reply_unit_file_changes_and_free(m, message, carries_install_info ? r : -1, changes, n_changes, error);
+        return reply_install_changes_and_free(m, message, carries_install_info ? r : -1, changes, n_changes, error);
 }
 
 static int method_enable_unit_files_with_flags(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_enable_unit_files_generic(message, userdata, unit_file_enable, true, error);
+        return method_enable_unit_files_generic(message, userdata, unit_file_enable, /* carries_install_info = */ true, error);
 }
 
 static int method_enable_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_enable_unit_files_generic(message, userdata, unit_file_enable, true, error);
+        return method_enable_unit_files_generic(message, userdata, unit_file_enable, /* carries_install_info = */ true, error);
 }
 
 static int method_reenable_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_enable_unit_files_generic(message, userdata, unit_file_reenable, true, error);
+        return method_enable_unit_files_generic(message, userdata, unit_file_reenable, /* carries_install_info = */ true, error);
 }
 
 static int method_link_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_enable_unit_files_generic(message, userdata, unit_file_link, false, error);
+        return method_enable_unit_files_generic(message, userdata, unit_file_link, /* carries_install_info = */ false, error);
 }
 
-static int unit_file_preset_without_mode(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, size_t *n_changes) {
+static int unit_file_preset_without_mode(LookupScope scope, UnitFileFlags flags, const char *root_dir, char **files, InstallChange **changes, size_t *n_changes) {
         return unit_file_preset(scope, flags, root_dir, files, UNIT_FILE_PRESET_FULL, changes, n_changes);
 }
 
 static int method_preset_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_enable_unit_files_generic(message, userdata, unit_file_preset_without_mode, true, error);
+        return method_enable_unit_files_generic(message, userdata, unit_file_preset_without_mode, /* carries_install_info = */ true, error);
 }
 
 static int method_mask_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_enable_unit_files_generic(message, userdata, unit_file_mask, false, error);
+        return method_enable_unit_files_generic(message, userdata, unit_file_mask, /* carries_install_info = */ false, error);
 }
 
 static int method_preset_unit_files_with_mode(sd_bus_message *message, void *userdata, sd_bus_error *error) {
 
         _cleanup_strv_free_ char **l = NULL;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         UnitFilePresetMode preset_mode;
         int runtime, force, r;
         UnitFileFlags flags;
         const char *mode;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read_strv(message, &l);
         if (r < 0)
@@ -2309,17 +2512,18 @@
         if (r < 0)
                 return install_error(error, r, changes, n_changes);
 
-        return reply_unit_file_changes_and_free(m, message, r, changes, n_changes, error);
+        return reply_install_changes_and_free(m, message, r, changes, n_changes, error);
 }
 
 static int method_disable_unit_files_generic(
                 sd_bus_message *message,
                 Manager *m,
-                int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes),
+                int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], InstallChange **changes, size_t *n_changes),
+                bool carries_install_info,
                 sd_bus_error *error) {
 
         _cleanup_strv_free_ char **l = NULL;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         UnitFileFlags flags;
         size_t n_changes = 0;
         int r;
@@ -2331,7 +2535,8 @@
         if (r < 0)
                 return r;
 
-        if (sd_bus_message_is_method_call(message, NULL, "DisableUnitFilesWithFlags")) {
+        if (sd_bus_message_is_method_call(message, NULL, "DisableUnitFilesWithFlags") ||
+            sd_bus_message_is_method_call(message, NULL, "DisableUnitFilesWithFlagsAndInstallInfo")) {
                 uint64_t raw_flags;
 
                 r = sd_bus_message_read(message, "t", &raw_flags);
@@ -2360,30 +2565,33 @@
         if (r < 0)
                 return install_error(error, r, changes, n_changes);
 
-        return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
+        return reply_install_changes_and_free(m, message, carries_install_info ? r : -1, changes, n_changes, error);
 }
 
 static int method_disable_unit_files_with_flags(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_disable_unit_files_generic(message, userdata, unit_file_disable, error);
+        return method_disable_unit_files_generic(message, userdata, unit_file_disable, /* carries_install_info = */ false, error);
+}
+
+static int method_disable_unit_files_with_flags_and_install_info(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        return method_disable_unit_files_generic(message, userdata, unit_file_disable, /* carries_install_info = */ true, error);
 }
 
 static int method_disable_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_disable_unit_files_generic(message, userdata, unit_file_disable, error);
+        return method_disable_unit_files_generic(message, userdata, unit_file_disable, /* carries_install_info = */ false, error);
 }
 
 static int method_unmask_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        return method_disable_unit_files_generic(message, userdata, unit_file_unmask, error);
+        return method_disable_unit_files_generic(message, userdata, unit_file_unmask, /* carries_install_info = */ false, error);
 }
 
 static int method_revert_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_strv_free_ char **l = NULL;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read_strv(message, &l);
         if (r < 0)
@@ -2399,18 +2607,17 @@
         if (r < 0)
                 return install_error(error, r, changes, n_changes);
 
-        return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
+        return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
 }
 
 static int method_set_default_target(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         int force, r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "enable", error);
         if (r < 0)
@@ -2430,20 +2637,19 @@
         if (r < 0)
                 return install_error(error, r, changes, n_changes);
 
-        return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
+        return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
 }
 
 static int method_preset_all_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         UnitFilePresetMode preset_mode;
         const char *mode;
         UnitFileFlags flags;
         int force, runtime, r;
 
         assert(message);
-        assert(m);
 
         r = mac_selinux_access_check(message, "enable", error);
         if (r < 0)
@@ -2473,13 +2679,13 @@
         if (r < 0)
                 return install_error(error, r, changes, n_changes);
 
-        return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
+        return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
 }
 
 static int method_add_dependency_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_strv_free_ char **l = NULL;
-        Manager *m = userdata;
-        UnitFileChange *changes = NULL;
+        Manager *m = ASSERT_PTR(userdata);
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         int runtime, force, r;
         char *target, *type;
@@ -2487,7 +2693,6 @@
         UnitFileFlags flags;
 
         assert(message);
-        assert(m);
 
         r = bus_verify_manage_unit_files_async(m, message, error);
         if (r < 0)
@@ -2513,16 +2718,15 @@
         if (r < 0)
                 return install_error(error, r, changes, n_changes);
 
-        return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
+        return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
 }
 
 static int method_get_unit_file_links(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        UnitFileChange *changes = NULL;
+        Manager *m = ASSERT_PTR(userdata);
+        InstallChange *changes = NULL;
         size_t n_changes = 0, i;
-        UnitFileFlags flags;
         const char *name;
-        char **p;
         int runtime, r;
 
         r = sd_bus_message_read(message, "sb", &name, &runtime);
@@ -2537,36 +2741,39 @@
         if (r < 0)
                 return r;
 
-        p = STRV_MAKE(name);
-        flags = UNIT_FILE_DRY_RUN |
-                (runtime ? UNIT_FILE_RUNTIME : 0);
-
-        r = unit_file_disable(UNIT_FILE_SYSTEM, flags, NULL, p, &changes, &n_changes);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get file links for %s: %m", name);
+        r = unit_file_disable(m->unit_file_scope,
+                              UNIT_FILE_DRY_RUN | (runtime ? UNIT_FILE_RUNTIME : 0),
+                              NULL, STRV_MAKE(name), &changes, &n_changes);
+        if (r < 0) {
+                log_error_errno(r, "Failed to get file links for %s: %m", name);
+                goto finish;
+        }
 
         for (i = 0; i < n_changes; i++)
-                if (changes[i].type_or_errno == UNIT_FILE_UNLINK) {
+                if (changes[i].type == INSTALL_CHANGE_UNLINK) {
                         r = sd_bus_message_append(reply, "s", changes[i].path);
                         if (r < 0)
-                                return r;
+                                goto finish;
                 }
 
         r = sd_bus_message_close_container(reply);
         if (r < 0)
-                return r;
+                goto finish;
 
-        return sd_bus_send(NULL, reply, NULL);
+        r = sd_bus_send(NULL, reply, NULL);
+
+finish:
+        install_changes_free(changes, n_changes);
+        return r;
 }
 
 static int method_get_job_waiting(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint32_t id;
         Job *j;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "u", &id);
         if (r < 0)
@@ -2580,13 +2787,12 @@
 }
 
 static int method_abandon_scope(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Unit *u;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -2604,14 +2810,23 @@
 }
 
 static int method_set_show_status(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         ShowStatus mode = _SHOW_STATUS_INVALID;
         const char *t;
         int r;
 
-        assert(m);
         assert(message);
 
+        r = mac_selinux_access_check(message, "reload", error);
+        if (r < 0)
+                return r;
+
+        r = bus_verify_set_environment_async(m, message, error);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
+
         r = sd_bus_message_read(message, "s", &t);
         if (r < 0)
                 return r;
@@ -2648,6 +2863,7 @@
         BUS_PROPERTY_DUAL_TIMESTAMP("GeneratorsFinishTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_GENERATORS_FINISH]), SD_BUS_VTABLE_PROPERTY_CONST),
         BUS_PROPERTY_DUAL_TIMESTAMP("UnitsLoadStartTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_UNITS_LOAD_START]), SD_BUS_VTABLE_PROPERTY_CONST),
         BUS_PROPERTY_DUAL_TIMESTAMP("UnitsLoadFinishTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_UNITS_LOAD_FINISH]), SD_BUS_VTABLE_PROPERTY_CONST),
+        BUS_PROPERTY_DUAL_TIMESTAMP("UnitsLoadTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_UNITS_LOAD]), SD_BUS_VTABLE_PROPERTY_CONST),
         BUS_PROPERTY_DUAL_TIMESTAMP("InitRDSecurityStartTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_INITRD_SECURITY_START]), SD_BUS_VTABLE_PROPERTY_CONST),
         BUS_PROPERTY_DUAL_TIMESTAMP("InitRDSecurityFinishTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_INITRD_SECURITY_FINISH]), SD_BUS_VTABLE_PROPERTY_CONST),
         BUS_PROPERTY_DUAL_TIMESTAMP("InitRDGeneratorsStartTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_INITRD_GENERATORS_START]), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -2668,7 +2884,12 @@
         SD_BUS_PROPERTY("UnitPath", "as", NULL, offsetof(Manager, lookup_paths.search_path), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultStandardOutput", "s", bus_property_get_exec_output, offsetof(Manager, default_std_output), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultStandardError", "s", bus_property_get_exec_output, offsetof(Manager, default_std_error), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("WatchdogDevice", "s", property_get_watchdog_device, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("WatchdogLastPingTimestamp", "t", property_get_watchdog_last_ping_realtime, 0, 0),
+        SD_BUS_PROPERTY("WatchdogLastPingTimestampMonotonic", "t", property_get_watchdog_last_ping_monotonic, 0, 0),
         SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogUSec", "t", property_get_runtime_watchdog, property_set_runtime_watchdog, 0, 0),
+        SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogPreUSec", "t", property_get_pretimeout_watchdog, property_set_pretimeout_watchdog, 0, 0),
+        SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogPreGovernor", "s", property_get_pretimeout_watchdog_governor, property_set_pretimeout_watchdog_governor, 0, 0),
         SD_BUS_WRITABLE_PROPERTY("RebootWatchdogUSec", "t", property_get_reboot_watchdog, property_set_reboot_watchdog, 0, 0),
         /* The following item is an obsolete alias */
         SD_BUS_WRITABLE_PROPERTY("ShutdownWatchdogUSec", "t", property_get_reboot_watchdog, property_set_reboot_watchdog, 0, SD_BUS_VTABLE_HIDDEN),
@@ -2681,6 +2902,7 @@
         SD_BUS_PROPERTY("DefaultTimeoutStartUSec", "t", bus_property_get_usec, offsetof(Manager, default_timeout_start_usec), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultTimeoutStopUSec", "t", bus_property_get_usec, offsetof(Manager, default_timeout_stop_usec), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultTimeoutAbortUSec", "t", property_get_default_timeout_abort_usec, 0, 0),
+        SD_BUS_PROPERTY("DefaultDeviceTimeoutUSec", "t", bus_property_get_usec, offsetof(Manager, default_device_timeout_usec), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultRestartUSec", "t", bus_property_get_usec, offsetof(Manager, default_restart_usec), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultStartLimitIntervalUSec", "t", bus_property_get_usec, offsetof(Manager, default_start_limit_interval), SD_BUS_VTABLE_PROPERTY_CONST),
         /* The following two items are obsolete alias */
@@ -2726,254 +2948,179 @@
         SD_BUS_PROPERTY("DefaultTasksMax", "t", bus_property_get_tasks_max, offsetof(Manager, default_tasks_max), 0),
         SD_BUS_PROPERTY("TimerSlackNSec", "t", property_get_timer_slack_nsec, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultOOMPolicy", "s", bus_property_get_oom_policy, offsetof(Manager, default_oom_policy), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("DefaultOOMScoreAdjust", "i", property_get_oom_score_adjust, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("CtrlAltDelBurstAction", "s", bus_property_get_emergency_action, offsetof(Manager, cad_burst_action), SD_BUS_VTABLE_PROPERTY_CONST),
 
-        SD_BUS_METHOD_WITH_NAMES("GetUnit",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "o",
-                                 SD_BUS_PARAM(unit),
-                                 method_get_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUnitByPID",
-                                 "u",
-                                 SD_BUS_PARAM(pid),
-                                 "o",
-                                 SD_BUS_PARAM(unit),
-                                 method_get_unit_by_pid,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUnitByInvocationID",
-                                 "ay",
-                                 SD_BUS_PARAM(invocation_id),
-                                 "o",
-                                 SD_BUS_PARAM(unit),
-                                 method_get_unit_by_invocation_id,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUnitByControlGroup",
-                                 "s",
-                                 SD_BUS_PARAM(cgroup),
-                                 "o",
-                                 SD_BUS_PARAM(unit),
-                                 method_get_unit_by_control_group,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("LoadUnit",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "o",
-                                 SD_BUS_PARAM(unit),
-                                 method_load_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("StartUnit",
-                                 "ss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_start_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("StartUnitReplace",
-                                 "sss",
-                                 SD_BUS_PARAM(old_unit)
-                                 SD_BUS_PARAM(new_unit)
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_start_unit_replace,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("StopUnit",
-                                 "ss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_stop_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ReloadUnit",
-                                 "ss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_reload_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("RestartUnit",
-                                 "ss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_restart_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("TryRestartUnit",
-                                 "ss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_try_restart_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ReloadOrRestartUnit",
-                                 "ss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_reload_or_restart_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ReloadOrTryRestartUnit",
-                                 "ss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_reload_or_try_restart_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("EnqueueUnitJob",
-                                 "sss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(job_type)
-                                 SD_BUS_PARAM(job_mode),
-                                 "uososa(uosos)",
-                                 SD_BUS_PARAM(job_id)
-                                 SD_BUS_PARAM(job_path)
-                                 SD_BUS_PARAM(unit_id)
-                                 SD_BUS_PARAM(unit_path)
-                                 SD_BUS_PARAM(job_type)
-                                 SD_BUS_PARAM(affected_jobs),
-                                 method_enqueue_unit_job,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("KillUnit",
-                                 "ssi",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(whom)
-                                 SD_BUS_PARAM(signal),
-                                 NULL,,
-                                 method_kill_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CleanUnit",
-                                 "sas",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mask),
-                                 NULL,,
-                                 method_clean_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("FreezeUnit",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_freeze_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ThawUnit",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_thaw_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ResetFailedUnit",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_reset_failed_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetUnitProperties",
-                                 "sba(sv)",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(properties),
-                                 NULL,,
-                                 method_set_unit_properties,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("BindMountUnit",
-                                 "sssbb",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination)
-                                 SD_BUS_PARAM(read_only)
-                                 SD_BUS_PARAM(mkdir),
-                                 NULL,,
-                                 method_bind_mount_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("MountImageUnit",
-                                 "sssbba(ss)",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination)
-                                 SD_BUS_PARAM(read_only)
-                                 SD_BUS_PARAM(mkdir)
-                                 SD_BUS_PARAM(options),
-                                 NULL,,
-                                 method_mount_image_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("RefUnit",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_ref_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("UnrefUnit",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_unref_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("StartTransientUnit",
-                                 "ssa(sv)a(sa(sv))",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(mode)
-                                 SD_BUS_PARAM(properties)
-                                 SD_BUS_PARAM(aux),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_start_transient_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUnitProcesses",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "a(sus)",
-                                 SD_BUS_PARAM(processes),
-                                 method_get_unit_processes,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("AttachProcessesToUnit",
-                                 "ssau",
-                                 SD_BUS_PARAM(unit_name)
-                                 SD_BUS_PARAM(subcgroup)
-                                 SD_BUS_PARAM(pids),
-                                 NULL,,
-                                 method_attach_processes_to_unit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("AbandonScope",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_abandon_scope,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetJob",
-                                 "u",
-                                 SD_BUS_PARAM(id),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_get_job,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetJobAfter",
-                                 "u",
-                                 SD_BUS_PARAM(id),
-                                 "a(usssoo)",
-                                 SD_BUS_PARAM(jobs),
-                                 method_get_job_waiting,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetJobBefore",
-                                 "u",
-                                 SD_BUS_PARAM(id),
-                                 "a(usssoo)",
-                                 SD_BUS_PARAM(jobs),
-                                 method_get_job_waiting,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CancelJob",
-                                 "u",
-                                 SD_BUS_PARAM(id),
-                                 NULL,,
-                                 method_cancel_job,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUnit",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("o", unit),
+                                method_get_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUnitByPID",
+                                SD_BUS_ARGS("u", pid),
+                                SD_BUS_RESULT("o", unit),
+                                method_get_unit_by_pid,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUnitByInvocationID",
+                                SD_BUS_ARGS("ay", invocation_id),
+                                SD_BUS_RESULT("o", unit),
+                                method_get_unit_by_invocation_id,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUnitByControlGroup",
+                                SD_BUS_ARGS("s", cgroup),
+                                SD_BUS_RESULT("o", unit),
+                                method_get_unit_by_control_group,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUnitByPIDFD",
+                                SD_BUS_ARGS("h", pidfd),
+                                SD_BUS_RESULT("o", unit, "s", unit_id, "ay", invocation_id),
+                                method_get_unit_by_pidfd,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("LoadUnit",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("o", unit),
+                                method_load_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("StartUnit",
+                                SD_BUS_ARGS("s", name, "s", mode),
+                                SD_BUS_RESULT("o", job),
+                                method_start_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("StartUnitWithFlags",
+                                SD_BUS_ARGS("s", name, "s", mode, "t", flags),
+                                SD_BUS_RESULT("o", job),
+                                method_start_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("StartUnitReplace",
+                                SD_BUS_ARGS("s", old_unit, "s", new_unit, "s", mode),
+                                SD_BUS_RESULT("o", job),
+                                method_start_unit_replace,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("StopUnit",
+                                SD_BUS_ARGS("s", name, "s", mode),
+                                SD_BUS_RESULT("o", job),
+                                method_stop_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ReloadUnit",
+                                SD_BUS_ARGS("s", name, "s", mode),
+                                SD_BUS_RESULT("o", job),
+                                method_reload_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RestartUnit",
+                                SD_BUS_ARGS("s", name, "s", mode),
+                                SD_BUS_RESULT("o", job),
+                                method_restart_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("TryRestartUnit",
+                                SD_BUS_ARGS("s", name, "s", mode),
+                                SD_BUS_RESULT("o", job),
+                                method_try_restart_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ReloadOrRestartUnit",
+                                SD_BUS_ARGS("s", name, "s", mode),
+                                SD_BUS_RESULT("o", job),
+                                method_reload_or_restart_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ReloadOrTryRestartUnit",
+                                SD_BUS_ARGS("s", name, "s", mode),
+                                SD_BUS_RESULT("o", job),
+                                method_reload_or_try_restart_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("EnqueueUnitJob",
+                                SD_BUS_ARGS("s", name, "s", job_type, "s", job_mode),
+                                SD_BUS_RESULT("u", job_id, "o", job_path, "s", unit_id, "o", unit_path, "s", job_type, "a(uosos)", affected_jobs),
+                                method_enqueue_unit_job,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("KillUnit",
+                                SD_BUS_ARGS("s", name, "s", whom, "i", signal),
+                                SD_BUS_NO_RESULT,
+                                method_kill_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CleanUnit",
+                                SD_BUS_ARGS("s", name, "as", mask),
+                                SD_BUS_NO_RESULT,
+                                method_clean_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("FreezeUnit",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_freeze_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ThawUnit",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_thaw_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ResetFailedUnit",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_reset_failed_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetUnitProperties",
+                                SD_BUS_ARGS("s", name, "b", runtime, "a(sv)", properties),
+                                SD_BUS_NO_RESULT,
+                                method_set_unit_properties,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("BindMountUnit",
+                                SD_BUS_ARGS("s", name, "s", source, "s", destination, "b", read_only, "b", mkdir),
+                                SD_BUS_NO_RESULT,
+                                method_bind_mount_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("MountImageUnit",
+                                SD_BUS_ARGS("s", name, "s", source, "s", destination, "b", read_only, "b", mkdir, "a(ss)", options),
+                                SD_BUS_NO_RESULT,
+                                method_mount_image_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RefUnit",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_ref_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("UnrefUnit",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_unref_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("StartTransientUnit",
+                                SD_BUS_ARGS("s", name, "s", mode, "a(sv)", properties, "a(sa(sv))", aux),
+                                SD_BUS_RESULT("o", job),
+                                method_start_transient_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUnitProcesses",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("a(sus)", processes),
+                                method_get_unit_processes,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("AttachProcessesToUnit",
+                                SD_BUS_ARGS("s", unit_name, "s", subcgroup, "au", pids),
+                                SD_BUS_NO_RESULT,
+                                method_attach_processes_to_unit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("AbandonScope",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_abandon_scope,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetJob",
+                                SD_BUS_ARGS("u", id),
+                                SD_BUS_RESULT("o", job),
+                                method_get_job,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetJobAfter",
+                                SD_BUS_ARGS("u", id),
+                                SD_BUS_RESULT("a(usssoo)", jobs),
+                                method_get_job_waiting,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetJobBefore",
+                                SD_BUS_ARGS("u", id),
+                                SD_BUS_RESULT("a(usssoo)", jobs),
+                                method_get_job_waiting,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CancelJob",
+                                SD_BUS_ARGS("u", id),
+                                SD_BUS_NO_RESULT,
+                                method_cancel_job,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("ClearJobs",
                       NULL,
                       NULL,
@@ -2984,46 +3131,36 @@
                       NULL,
                       method_reset_failed,
                       SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetShowStatus",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 NULL,,
-                                 method_set_show_status,
-                                 SD_BUS_VTABLE_CAPABILITY(CAP_SYS_ADMIN)),
-        SD_BUS_METHOD_WITH_NAMES("ListUnits",
-                                 NULL,,
-                                 "a(ssssssouso)",
-                                 SD_BUS_PARAM(units),
-                                 method_list_units,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListUnitsFiltered",
-                                 "as",
-                                 SD_BUS_PARAM(states),
-                                 "a(ssssssouso)",
-                                 SD_BUS_PARAM(units),
-                                 method_list_units_filtered,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListUnitsByPatterns",
-                                 "asas",
-                                 SD_BUS_PARAM(states)
-                                 SD_BUS_PARAM(patterns),
-                                 "a(ssssssouso)",
-                                 SD_BUS_PARAM(units),
-                                 method_list_units_by_patterns,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListUnitsByNames",
-                                 "as",
-                                 SD_BUS_PARAM(names),
-                                 "a(ssssssouso)",
-                                 SD_BUS_PARAM(units),
-                                 method_list_units_by_names,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListJobs",
-                                 NULL,,
-                                 "a(usssoo)",
-                                 SD_BUS_PARAM(jobs),
-                                 method_list_jobs,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetShowStatus",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_NO_RESULT,
+                                method_set_show_status,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListUnits",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(ssssssouso)", units),
+                                method_list_units,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListUnitsFiltered",
+                                SD_BUS_ARGS("as", states),
+                                SD_BUS_RESULT("a(ssssssouso)", units),
+                                method_list_units_filtered,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListUnitsByPatterns",
+                                SD_BUS_ARGS("as", states, "as", patterns),
+                                SD_BUS_RESULT("a(ssssssouso)", units),
+                                method_list_units_by_patterns,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListUnitsByNames",
+                                SD_BUS_ARGS("as", names),
+                                SD_BUS_RESULT("a(ssssssouso)", units),
+                                method_list_units_by_names,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListJobs",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(usssoo)", jobs),
+                                method_list_jobs,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("Subscribe",
                       NULL,
                       NULL,
@@ -3034,32 +3171,36 @@
                       NULL,
                       method_unsubscribe,
                       SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Dump",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(output),
-                                 method_dump,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("DumpByFileDescriptor",
-                                 NULL,,
-                                 "h",
-                                 SD_BUS_PARAM(fd),
-                                 method_dump_by_fd,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CreateSnapshot",
-                                 "sb",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(cleanup),
-                                 "o",
-                                 SD_BUS_PARAM(unit),
-                                 method_refuse_snapshot,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_HIDDEN),
-        SD_BUS_METHOD_WITH_NAMES("RemoveSnapshot",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_refuse_snapshot,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_HIDDEN),
+        SD_BUS_METHOD_WITH_ARGS("Dump",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", output),
+                                method_dump,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("DumpUnitsMatchingPatterns",
+                                SD_BUS_ARGS("as", patterns),
+                                SD_BUS_RESULT("s", output),
+                                method_dump_units_matching_patterns,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("DumpByFileDescriptor",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("h", fd),
+                                method_dump_by_fd,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("DumpUnitsMatchingPatternsByFileDescriptor",
+                                SD_BUS_ARGS("as", patterns),
+                                SD_BUS_RESULT("h", fd),
+                                method_dump_units_matching_patterns_by_fd,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CreateSnapshot",
+                                SD_BUS_ARGS("s", name, "b", cleanup),
+                                SD_BUS_RESULT("o", unit),
+                                method_refuse_snapshot,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_HIDDEN),
+        SD_BUS_METHOD_WITH_ARGS("RemoveSnapshot",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_refuse_snapshot,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_HIDDEN),
         SD_BUS_METHOD("Reload",
                       NULL,
                       NULL,
@@ -3069,7 +3210,7 @@
                       NULL,
                       NULL,
                       method_reexecute,
-                      SD_BUS_VTABLE_UNPRIVILEGED),
+                      SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_METHOD_NO_REPLY),
         SD_BUS_METHOD("Exit",
                       NULL,
                       NULL,
@@ -3095,264 +3236,171 @@
                       NULL,
                       method_kexec,
                       SD_BUS_VTABLE_CAPABILITY(CAP_SYS_BOOT)),
-        SD_BUS_METHOD_WITH_NAMES("SwitchRoot",
-                                 "ss",
-                                 SD_BUS_PARAM(new_root)
-                                 SD_BUS_PARAM(init),
-                                 NULL,,
-                                 method_switch_root,
-                                 SD_BUS_VTABLE_CAPABILITY(CAP_SYS_BOOT)),
-        SD_BUS_METHOD_WITH_NAMES("SetEnvironment",
-                                 "as",
-                                 SD_BUS_PARAM(assignments),
-                                 NULL,,
-                                 method_set_environment,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("UnsetEnvironment",
-                                 "as",
-                                 SD_BUS_PARAM(names),
-                                 NULL,,
-                                 method_unset_environment,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("UnsetAndSetEnvironment",
-                                 "asas",
-                                 SD_BUS_PARAM(names)
-                                 SD_BUS_PARAM(assignments),
-                                 NULL,,
-                                 method_unset_and_set_environment,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("EnqueueMarkedJobs",
-                                 NULL,,
-                                 "ao",
-                                 SD_BUS_PARAM(jobs),
-                                 method_enqueue_marked_jobs,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListUnitFiles",
-                                 NULL,,
-                                 "a(ss)",
-                                 SD_BUS_PARAM(unit_files),
-                                 method_list_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListUnitFilesByPatterns",
-                                 "asas",
-                                 SD_BUS_PARAM(states)
-                                 SD_BUS_PARAM(patterns),
-                                 "a(ss)",
-                                 SD_BUS_PARAM(unit_files),
-                                 method_list_unit_files_by_patterns,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUnitFileState",
-                                 "s",
-                                 SD_BUS_PARAM(file),
-                                 "s",
-                                 SD_BUS_PARAM(state),
-                                 method_get_unit_file_state,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("EnableUnitFiles",
-                                 "asbb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(force),
-                                 "ba(sss)",
-                                 SD_BUS_PARAM(carries_install_info)
-                                 SD_BUS_PARAM(changes),
-                                 method_enable_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("DisableUnitFiles",
-                                 "asb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(runtime),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_disable_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("EnableUnitFilesWithFlags",
-                                 "ast",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(flags),
-                                 "ba(sss)",
-                                 SD_BUS_PARAM(carries_install_info)
-                                 SD_BUS_PARAM(changes),
-                                 method_enable_unit_files_with_flags,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("DisableUnitFilesWithFlags",
-                                 "ast",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(flags),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_disable_unit_files_with_flags,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ReenableUnitFiles",
-                                 "asbb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(force),
-                                 "ba(sss)",
-                                 SD_BUS_PARAM(carries_install_info)
-                                 SD_BUS_PARAM(changes),
-                                 method_reenable_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("LinkUnitFiles",
-                                 "asbb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(force),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_link_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("PresetUnitFiles",
-                                 "asbb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(force),
-                                 "ba(sss)",
-                                 SD_BUS_PARAM(carries_install_info)
-                                 SD_BUS_PARAM(changes),
-                                 method_preset_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("PresetUnitFilesWithMode",
-                                 "assbb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(mode)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(force),
-                                 "ba(sss)",
-                                 SD_BUS_PARAM(carries_install_info)
-                                 SD_BUS_PARAM(changes),
-                                 method_preset_unit_files_with_mode,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("MaskUnitFiles",
-                                 "asbb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(force),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_mask_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("UnmaskUnitFiles",
-                                 "asb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(runtime),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_unmask_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("RevertUnitFiles",
-                                 "as",
-                                 SD_BUS_PARAM(files),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_revert_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetDefaultTarget",
-                                 "sb",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(force),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_set_default_target,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetDefaultTarget",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 method_get_default_target,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("PresetAllUnitFiles",
-                                 "sbb",
-                                 SD_BUS_PARAM(mode)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(force),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_preset_all_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("AddDependencyUnitFiles",
-                                 "asssbb",
-                                 SD_BUS_PARAM(files)
-                                 SD_BUS_PARAM(target)
-                                 SD_BUS_PARAM(type)
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(force),
-                                 "a(sss)",
-                                 SD_BUS_PARAM(changes),
-                                 method_add_dependency_unit_files,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUnitFileLinks",
-                                 "sb",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(runtime),
-                                 "as",
-                                 SD_BUS_PARAM(links),
-                                 method_get_unit_file_links,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetExitCode",
-                                 "y",
-                                 SD_BUS_PARAM(number),
-                                 NULL,,
-                                 method_set_exit_code,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("LookupDynamicUserByName",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "u",
-                                 SD_BUS_PARAM(uid),
-                                 method_lookup_dynamic_user_by_name,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("LookupDynamicUserByUID",
-                                 "u",
-                                 SD_BUS_PARAM(uid),
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 method_lookup_dynamic_user_by_uid,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetDynamicUsers",
-                                 NULL,,
-                                 "a(us)",
-                                 SD_BUS_PARAM(users),
-                                 method_get_dynamic_users,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SwitchRoot",
+                                SD_BUS_ARGS("s", new_root, "s", init),
+                                SD_BUS_NO_RESULT,
+                                method_switch_root,
+                                SD_BUS_VTABLE_CAPABILITY(CAP_SYS_BOOT)),
+        SD_BUS_METHOD_WITH_ARGS("SetEnvironment",
+                                SD_BUS_ARGS("as", assignments),
+                                SD_BUS_NO_RESULT,
+                                method_set_environment,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("UnsetEnvironment",
+                                SD_BUS_ARGS("as", names),
+                                SD_BUS_NO_RESULT,
+                                method_unset_environment,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("UnsetAndSetEnvironment",
+                                SD_BUS_ARGS("as", names, "as", assignments),
+                                SD_BUS_NO_RESULT,
+                                method_unset_and_set_environment,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("EnqueueMarkedJobs",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("ao", jobs),
+                                method_enqueue_marked_jobs,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListUnitFiles",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(ss)", unit_files),
+                                method_list_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListUnitFilesByPatterns",
+                                SD_BUS_ARGS("as", states, "as", patterns),
+                                SD_BUS_RESULT("a(ss)", unit_files),
+                                method_list_unit_files_by_patterns,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUnitFileState",
+                                SD_BUS_ARGS("s", file),
+                                SD_BUS_RESULT("s", state),
+                                method_get_unit_file_state,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("EnableUnitFiles",
+                                SD_BUS_ARGS("as", files, "b", runtime, "b", force),
+                                SD_BUS_RESULT("b", carries_install_info, "a(sss)", changes),
+                                method_enable_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("DisableUnitFiles",
+                                SD_BUS_ARGS("as", files, "b", runtime),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_disable_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("EnableUnitFilesWithFlags",
+                                SD_BUS_ARGS("as", files, "t", flags),
+                                SD_BUS_RESULT("b", carries_install_info, "a(sss)", changes),
+                                method_enable_unit_files_with_flags,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("DisableUnitFilesWithFlags",
+                                SD_BUS_ARGS("as", files, "t", flags),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_disable_unit_files_with_flags,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("DisableUnitFilesWithFlagsAndInstallInfo",
+                                SD_BUS_ARGS("as", files, "t", flags),
+                                SD_BUS_RESULT("b", carries_install_info, "a(sss)", changes),
+                                method_disable_unit_files_with_flags_and_install_info,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ReenableUnitFiles",
+                                SD_BUS_ARGS("as", files, "b", runtime, "b", force),
+                                SD_BUS_RESULT("b", carries_install_info, "a(sss)", changes),
+                                method_reenable_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("LinkUnitFiles",
+                                SD_BUS_ARGS("as", files, "b", runtime, "b", force),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_link_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("PresetUnitFiles",
+                                SD_BUS_ARGS("as", files, "b", runtime, "b", force),
+                                SD_BUS_RESULT("b", carries_install_info, "a(sss)", changes),
+                                method_preset_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("PresetUnitFilesWithMode",
+                                SD_BUS_ARGS("as", files, "s", mode, "b", runtime, "b", force),
+                                SD_BUS_RESULT("b", carries_install_info, "a(sss)", changes),
+                                method_preset_unit_files_with_mode,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("MaskUnitFiles",
+                                SD_BUS_ARGS("as", files, "b", runtime, "b", force),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_mask_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("UnmaskUnitFiles",
+                                SD_BUS_ARGS("as", files, "b", runtime),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_unmask_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RevertUnitFiles",
+                                SD_BUS_ARGS("as", files),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_revert_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDefaultTarget",
+                                SD_BUS_ARGS("s", name, "b", force),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_set_default_target,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetDefaultTarget",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", name),
+                                method_get_default_target,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("PresetAllUnitFiles",
+                                SD_BUS_ARGS("s", mode, "b", runtime, "b", force),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_preset_all_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("AddDependencyUnitFiles",
+                                SD_BUS_ARGS("as", files, "s", target, "s", type, "b", runtime, "b", force),
+                                SD_BUS_RESULT("a(sss)", changes),
+                                method_add_dependency_unit_files,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUnitFileLinks",
+                                SD_BUS_ARGS("s", name, "b", runtime),
+                                SD_BUS_RESULT("as", links),
+                                method_get_unit_file_links,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetExitCode",
+                                SD_BUS_ARGS("y", number),
+                                SD_BUS_NO_RESULT,
+                                method_set_exit_code,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("LookupDynamicUserByName",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("u", uid),
+                                method_lookup_dynamic_user_by_name,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("LookupDynamicUserByUID",
+                                SD_BUS_ARGS("u", uid),
+                                SD_BUS_RESULT("s", name),
+                                method_lookup_dynamic_user_by_uid,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetDynamicUsers",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(us)", users),
+                                method_get_dynamic_users,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
-        SD_BUS_SIGNAL_WITH_NAMES("UnitNew",
-                                 "so",
-                                 SD_BUS_PARAM(id)
-                                 SD_BUS_PARAM(unit),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("UnitRemoved",
-                                 "so",
-                                 SD_BUS_PARAM(id)
-                                 SD_BUS_PARAM(unit),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("JobNew",
-                                 "uos",
-                                 SD_BUS_PARAM(id)
-                                 SD_BUS_PARAM(job)
-                                 SD_BUS_PARAM(unit),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("JobRemoved",
-                                 "uoss",
-                                 SD_BUS_PARAM(id)
-                                 SD_BUS_PARAM(job)
-                                 SD_BUS_PARAM(unit)
-                                 SD_BUS_PARAM(result),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("StartupFinished",
-                                 "tttttt",
-                                 SD_BUS_PARAM(firmware)
-                                 SD_BUS_PARAM(loader)
-                                 SD_BUS_PARAM(kernel)
-                                 SD_BUS_PARAM(initrd)
-                                 SD_BUS_PARAM(userspace)
-                                 SD_BUS_PARAM(total),
-                                 0),
+        SD_BUS_SIGNAL_WITH_ARGS("UnitNew",
+                                SD_BUS_ARGS("s", id, "o", unit),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("UnitRemoved",
+                                SD_BUS_ARGS("s", id, "o", unit),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("JobNew",
+                                SD_BUS_ARGS("u", id, "o", job, "s", unit),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("JobRemoved",
+                                SD_BUS_ARGS("u", id, "o", job, "s", unit, "s", result),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("StartupFinished",
+                                SD_BUS_ARGS("t", firmware, "t", loader, "t", kernel, "t", initrd, "t", userspace, "t", total),
+                                0),
         SD_BUS_SIGNAL("UnitFilesChanged", NULL, 0),
-        SD_BUS_SIGNAL_WITH_NAMES("Reloading",
-                                 "b",
-                                 SD_BUS_PARAM(active),
-                                 0),
+        SD_BUS_SIGNAL_WITH_ARGS("Reloading",
+                                SD_BUS_ARGS("b", active),
+                                0),
 
         SD_BUS_VTABLE_END
 };
@@ -3374,11 +3422,10 @@
 
 static int send_finished(sd_bus *bus, void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *message = NULL;
-        usec_t *times = userdata;
+        usec_t *times = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(times);
 
         r = sd_bus_message_new_signal(bus,
                                       &message,
diff --git a/src/core/dbus-path.c b/src/core/dbus-path.c
index e025c31..22de551 100644
--- a/src/core/dbus-path.c
+++ b/src/core/dbus-path.c
@@ -21,13 +21,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Path *p = userdata;
-        PathSpec *k;
+        Path *p = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(p);
 
         r = sd_bus_message_open_container(reply, 'a', "(ss)");
         if (r < 0)
@@ -49,6 +47,8 @@
         SD_BUS_PROPERTY("MakeDirectory", "b", bus_property_get_bool, offsetof(Path, make_directory), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Path, directory_mode), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Path, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+        SD_BUS_PROPERTY("TriggerLimitIntervalUSec", "t", bus_property_get_usec, offsetof(Path, trigger_limit.interval), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("TriggerLimitBurst", "u", bus_property_get_unsigned, offsetof(Path, trigger_limit.burst), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_VTABLE_END
 };
 
@@ -112,7 +112,7 @@
                                 s->unit = u;
                                 s->path = TAKE_PTR(k);
                                 s->type = t;
-                                s->inotify_fd = -1;
+                                s->inotify_fd = -EBADF;
 
                                 LIST_PREPEND(spec, p->specs, s);
 
@@ -136,6 +136,12 @@
                 return 1;
         }
 
+        if (streq(name, "TriggerLimitBurst"))
+                return bus_set_transient_unsigned(u, name, &p->trigger_limit.burst, message, flags, error);
+
+        if (streq(name, "TriggerLimitIntervalUSec"))
+                return bus_set_transient_usec(u, name, &p->trigger_limit.interval, message, flags, error);
+
         return 0;
 }
 
diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c
index 90ec6a6..7b07bb8 100644
--- a/src/core/dbus-scope.c
+++ b/src/core/dbus-scope.c
@@ -5,6 +5,7 @@
 #include "bus-get-properties.h"
 #include "dbus-cgroup.h"
 #include "dbus-kill.h"
+#include "dbus-manager.h"
 #include "dbus-scope.h"
 #include "dbus-unit.h"
 #include "dbus-util.h"
@@ -14,11 +15,10 @@
 #include "unit.h"
 
 int bus_scope_method_abandon(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Scope *s = userdata;
+        Scope *s = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(s);
 
         r = mac_selinux_unit_access_check(UNIT(s), message, "stop", error);
         if (r < 0)
@@ -40,6 +40,7 @@
 }
 
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, scope_result, ScopeResult);
+static BUS_DEFINE_SET_TRANSIENT_PARSE(oom_policy, OOMPolicy, oom_policy_from_string);
 
 const sd_bus_vtable bus_scope_vtable[] = {
         SD_BUS_VTABLE_START(0),
@@ -47,6 +48,8 @@
         SD_BUS_PROPERTY("TimeoutStopUSec", "t", bus_property_get_usec, offsetof(Scope, timeout_stop_usec), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Scope, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("RuntimeMaxUSec", "t", bus_property_get_usec, offsetof(Scope, runtime_max_usec), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("RuntimeRandomizedExtraUSec", "t", bus_property_get_usec, offsetof(Scope, runtime_rand_extra_usec), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("OOMPolicy", "s", bus_property_get_oom_policy, offsetof(Scope, oom_policy), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_SIGNAL("RequestStop", NULL, 0),
         SD_BUS_METHOD("Abandon", NULL, NULL, bus_scope_method_abandon, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_VTABLE_END
@@ -74,6 +77,12 @@
         if (streq(name, "RuntimeMaxUSec"))
                 return bus_set_transient_usec(u, name, &s->runtime_max_usec, message, flags, error);
 
+        if (streq(name, "RuntimeRandomizedExtraUSec"))
+                return bus_set_transient_usec(u, name, &s->runtime_rand_extra_usec, message, flags, error);
+
+        if (streq(name, "OOMPolicy"))
+                return bus_set_transient_oom_policy(u, name, &s->oom_policy, message, flags, error);
+
         if (streq(name, "PIDs")) {
                 _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
                 unsigned n = 0;
@@ -182,6 +191,12 @@
                 r = bus_kill_context_set_transient_property(u, &s->kill_context, name, message, flags, error);
                 if (r != 0)
                         return r;
+
+                if (streq(name, "User"))
+                        return bus_set_transient_user_relaxed(u, name, &s->user, message, flags, error);
+
+                if (streq(name, "Group"))
+                        return bus_set_transient_user_relaxed(u, name, &s->group, message, flags, error);
         }
 
         return 0;
diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c
index 84167ba..32d80a9 100644
--- a/src/core/dbus-service.c
+++ b/src/core/dbus-service.c
@@ -17,6 +17,7 @@
 #include "fileio.h"
 #include "locale-util.h"
 #include "mount-util.h"
+#include "open-file.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "selinux-access.h"
@@ -27,6 +28,7 @@
 #include "unit.h"
 
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_type, service_type, ServiceType);
+static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_exit_type, service_exit_type, ServiceExitType);
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, service_result, ServiceResult);
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_restart, service_restart, ServiceRestart);
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_notify_access, notify_access, NotifyAccess);
@@ -35,6 +37,34 @@
 static BUS_DEFINE_PROPERTY_GET(property_get_watchdog_usec, "t", Service, service_get_watchdog_usec);
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_timeout_failure_mode, service_timeout_failure_mode, ServiceTimeoutFailureMode);
 
+static int property_get_open_files(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        OpenFile **open_files = ASSERT_PTR(userdata);
+        int r;
+
+        assert(bus);
+        assert(reply);
+
+        r = sd_bus_message_open_container(reply, 'a', "(sst)");
+        if (r < 0)
+                return r;
+
+        LIST_FOREACH(open_files, of, *open_files) {
+                r = sd_bus_message_append(reply, "(sst)", of->path, of->fdname, of->flags);
+                if (r < 0)
+                        return r;
+        }
+
+        return sd_bus_message_close_container(reply);
+}
+
 static int property_get_exit_status_set(
                 sd_bus *bus,
                 const char *path,
@@ -44,13 +74,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        const ExitStatusSet *status_set = userdata;
+        const ExitStatusSet *status_set = ASSERT_PTR(userdata);
         unsigned n;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(status_set);
 
         r = sd_bus_message_open_container(reply, 'r', "aiai");
         if (r < 0)
@@ -99,13 +128,12 @@
         _cleanup_(mount_options_free_allp) MountOptions *options = NULL;
         const char *dest, *src, *propagate_directory;
         int read_only, make_file_or_directory;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         ExecContext *c;
         pid_t unit_pid;
         int r;
 
         assert(message);
-        assert(u);
 
         if (!MANAGER_IS_SYSTEM(u->manager))
                 return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Adding bind mounts at runtime is only supported for system managers.");
@@ -192,6 +220,7 @@
 const sd_bus_vtable bus_service_vtable[] = {
         SD_BUS_VTABLE_START(0),
         SD_BUS_PROPERTY("Type", "s", property_get_type, offsetof(Service, type), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("ExitType", "s", property_get_exit_type, offsetof(Service, exit_type), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Restart", "s", property_get_restart, offsetof(Service, restart), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("PIDFile", "s", NULL, offsetof(Service, pid_file), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("NotifyAccess", "s", property_get_notify_access, offsetof(Service, notify_access), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -202,6 +231,7 @@
         SD_BUS_PROPERTY("TimeoutStartFailureMode", "s", property_get_timeout_failure_mode, offsetof(Service, timeout_start_failure_mode), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("TimeoutStopFailureMode", "s", property_get_timeout_failure_mode, offsetof(Service, timeout_stop_failure_mode), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RuntimeMaxUSec", "t", bus_property_get_usec, offsetof(Service, runtime_max_usec), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("RuntimeRandomizedExtraUSec", "t", bus_property_get_usec, offsetof(Service, runtime_rand_extra_usec), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("WatchdogUSec", "t", property_get_watchdog_usec, 0, 0),
         BUS_PROPERTY_DUAL_TIMESTAMP("WatchdogTimestamp", offsetof(Service, watchdog_timestamp), 0),
         SD_BUS_PROPERTY("PermissionsStartOnly", "b", bus_property_get_bool, offsetof(Service, permissions_start_only), SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN), /* 😷 deprecated */
@@ -227,6 +257,8 @@
         SD_BUS_PROPERTY("GID", "u", bus_property_get_gid, offsetof(Unit, ref_gid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("NRestarts", "u", bus_property_get_unsigned, offsetof(Service, n_restarts), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("OOMPolicy", "s", bus_property_get_oom_policy, offsetof(Service, oom_policy), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("OpenFile", "a(sst)", property_get_open_files, offsetof(Service, open_files), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("ReloadSignal", "i", bus_property_get_int, offsetof(Service, reload_signal), SD_BUS_VTABLE_PROPERTY_CONST),
 
         BUS_EXEC_STATUS_VTABLE("ExecMain", offsetof(Service, main_exec_status), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         BUS_EXEC_COMMAND_LIST_VTABLE("ExecCondition", offsetof(Service, exec_command[SERVICE_EXEC_CONDITION]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
@@ -244,24 +276,15 @@
         BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPost", offsetof(Service, exec_command[SERVICE_EXEC_STOP_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
         BUS_EXEC_EX_COMMAND_LIST_VTABLE("ExecStopPostEx", offsetof(Service, exec_command[SERVICE_EXEC_STOP_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
 
-        SD_BUS_METHOD_WITH_NAMES("BindMount",
-                                 "ssbb",
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination)
-                                 SD_BUS_PARAM(read_only)
-                                 SD_BUS_PARAM(mkdir),
-                                 NULL,,
-                                 bus_service_method_bind_mount,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("BindMount",
+                                SD_BUS_ARGS("s", source, "s", destination, "b", read_only, "b", mkdir),
+                                SD_BUS_NO_RESULT,
+                                bus_service_method_bind_mount,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
-        SD_BUS_METHOD_WITH_NAMES("MountImage",
-                                 "ssbba(ss)",
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination)
-                                 SD_BUS_PARAM(read_only)
-                                 SD_BUS_PARAM(mkdir)
-                                 SD_BUS_PARAM(options),
-                                 NULL,,
+        SD_BUS_METHOD_WITH_ARGS("MountImage",
+                                 SD_BUS_ARGS("s", source, "s", destination, "b", read_only, "b", mkdir, "a(ss)", options),
+                                 SD_BUS_NO_RESULT,
                                  bus_service_method_mount_image,
                                  SD_BUS_VTABLE_UNPRIVILEGED),
 
@@ -377,10 +400,12 @@
 }
 static BUS_DEFINE_SET_TRANSIENT_PARSE(notify_access, NotifyAccess, notify_access_from_string);
 static BUS_DEFINE_SET_TRANSIENT_PARSE(service_type, ServiceType, service_type_from_string);
+static BUS_DEFINE_SET_TRANSIENT_PARSE(service_exit_type, ServiceExitType, service_exit_type_from_string);
 static BUS_DEFINE_SET_TRANSIENT_PARSE(service_restart, ServiceRestart, service_restart_from_string);
 static BUS_DEFINE_SET_TRANSIENT_PARSE(oom_policy, OOMPolicy, oom_policy_from_string);
 static BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(bus_name, sd_bus_service_name_is_valid);
 static BUS_DEFINE_SET_TRANSIENT_PARSE(timeout_failure_mode, ServiceTimeoutFailureMode, service_timeout_failure_mode_from_string);
+static BUS_DEFINE_SET_TRANSIENT_TO_STRING(reload_signal, "i", int32_t, int, "%" PRIi32, signal_to_string_with_check);
 
 static int bus_service_set_transient_property(
                 Service *s,
@@ -414,6 +439,9 @@
         if (streq(name, "Type"))
                 return bus_set_transient_service_type(u, name, &s->type, message, flags, error);
 
+        if (streq(name, "ExitType"))
+                return bus_set_transient_service_exit_type(u, name, &s->exit_type, message, flags, error);
+
         if (streq(name, "OOMPolicy"))
                 return bus_set_transient_oom_policy(u, name, &s->oom_policy, message, flags, error);
 
@@ -447,6 +475,9 @@
         if (streq(name, "RuntimeMaxUSec"))
                 return bus_set_transient_usec(u, name, &s->runtime_max_usec, message, flags, error);
 
+        if (streq(name, "RuntimeRandomizedExtraUSec"))
+                return bus_set_transient_usec(u, name, &s->runtime_rand_extra_usec, message, flags, error);
+
         if (streq(name, "WatchdogUSec"))
                 return bus_set_transient_usec(u, name, &s->watchdog_usec, message, flags, error);
 
@@ -483,7 +514,8 @@
                                         return log_oom();
 
                                 if (!UNIT_WRITE_FLAGS_NOOP(flags))
-                                        log_unit_notice(u, "Transient unit's PIDFile= property references path below legacy directory /var/run, updating %s → %s; please update client accordingly.", n, z);
+                                        log_unit_notice(u, "Transient unit's PIDFile= property references path below legacy directory /var/run, updating %s %s %s; please update client accordingly.",
+                                                        n, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), z);
 
                                 free_and_replace(n, z);
                         }
@@ -532,6 +564,59 @@
         if (streq(name, "StandardErrorFileDescriptor"))
                 return bus_set_transient_std_fd(u, name, &s->stderr_fd, &s->exec_context.stdio_as_fds, message, flags, error);
 
+        if (streq(name, "OpenFile")) {
+                const char *path, *fdname;
+                uint64_t offlags;
+
+                r = sd_bus_message_enter_container(message, 'a', "(sst)");
+                if (r < 0)
+                        return r;
+
+                while ((r = sd_bus_message_read(message, "(sst)", &path, &fdname, &offlags)) > 0) {
+                        _cleanup_(open_file_freep) OpenFile *of = NULL;
+                        _cleanup_free_ char *ofs = NULL;
+
+                        of = new(OpenFile, 1);
+                        if (!of)
+                                return -ENOMEM;
+
+                        *of = (OpenFile) {
+                                .path = strdup(path),
+                                .fdname = strdup(fdname),
+                                .flags = offlags,
+                        };
+
+                        if (!of->path || !of->fdname)
+                                return -ENOMEM;
+
+                        r = open_file_validate(of);
+                        if (r < 0)
+                                return r;
+
+                        if (UNIT_WRITE_FLAGS_NOOP(flags))
+                                continue;
+
+                        r = open_file_to_string(of, &ofs);
+                        if (r < 0)
+                                return sd_bus_error_set_errnof(
+                                                error, r, "Failed to convert OpenFile= value to string: %m");
+
+                        LIST_APPEND(open_files, s->open_files, TAKE_PTR(of));
+                        unit_write_settingf(u, flags | UNIT_ESCAPE_SPECIFIERS, name, "OpenFile=%s", ofs);
+                }
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_exit_container(message);
+                if (r < 0)
+                        return r;
+
+                return 1;
+        }
+
+        if (streq(name, "ReloadSignal"))
+                return bus_set_transient_reload_signal(u, name, &s->reload_signal, message, flags, error);
+
         return 0;
 }
 
diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c
index f45a5c1..48e6419 100644
--- a/src/core/dbus-socket.c
+++ b/src/core/dbus-socket.c
@@ -32,7 +32,6 @@
                 sd_bus_error *error) {
 
         Socket *s = SOCKET(userdata);
-        SocketPort *p;
         int r;
 
         assert(bus);
@@ -65,7 +64,7 @@
                                 break;
 
                         default:
-                                assert_not_reached("Unknown socket type");
+                                assert_not_reached();
                 }
 
                 r = sd_bus_message_append(reply, "(ss)", socket_port_type_to_string(p), a);
@@ -326,16 +325,14 @@
 
         if (streq(name, "Symlinks")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
                         return r;
 
-                STRV_FOREACH(p, l) {
+                STRV_FOREACH(p, l)
                         if (!path_is_absolute(*p))
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Symlink path is not absolute: %s", *p);
-                }
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         if (strv_isempty(l)) {
@@ -374,7 +371,7 @@
                                 return log_oom();
 
                         *p = (SocketPort) {
-                                .fd = -1,
+                                .fd = -EBADF,
                                 .socket = s,
                         };
 
@@ -383,7 +380,7 @@
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unknown Socket type: %s", t);
 
                         if (p->type != SOCKET_SOCKET) {
-                                if (!path_is_valid(a))
+                                if (!path_is_absolute(a) || !path_is_valid(a))
                                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid socket path: %s", a);
 
                                 p->path = strdup(a);
@@ -406,7 +403,7 @@
                                 if (p->address.type < 0)
                                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid address type: %s", t);
 
-                                if (socket_address_family(&p->address) != AF_LOCAL && p->address.type == SOCK_SEQPACKET)
+                                if (socket_address_family(&p->address) != AF_UNIX && p->address.type == SOCK_SEQPACKET)
                                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Address family not supported: %s", a);
                         }
 
diff --git a/src/core/dbus-timer.c b/src/core/dbus-timer.c
index e54c473..80dd40a 100644
--- a/src/core/dbus-timer.c
+++ b/src/core/dbus-timer.c
@@ -19,13 +19,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Timer *t = userdata;
-        TimerValue *v;
+        Timer *t = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(t);
 
         r = sd_bus_message_open_container(reply, 'a', "(stt)");
         if (r < 0)
@@ -68,13 +66,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Timer *t = userdata;
-        TimerValue *v;
+        Timer *t = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(t);
 
         r = sd_bus_message_open_container(reply, 'a', "(sst)");
         if (r < 0)
@@ -107,11 +103,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Timer *t = userdata;
+        Timer *t = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(t);
 
         return sd_bus_message_append(reply, "t",
                                      (uint64_t) usec_shift_clock(t->next_elapse_monotonic_or_boottime,
@@ -147,13 +142,12 @@
                 sd_bus_error *error) {
 
         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                char ts[FORMAT_TIMESPAN_MAX];
                 TimerValue *v;
 
                 unit_write_settingf(UNIT(t), flags|UNIT_ESCAPE_SPECIFIERS, name,
                                     "%s=%s",
                                     timer_base_to_string(base),
-                                    format_timespan(ts, sizeof ts, usec, USEC_PER_MSEC));
+                                    FORMAT_TIMESPAN(usec, USEC_PER_MSEC));
 
                 v = new(TimerValue, 1);
                 if (!v)
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index 0419f62..1ef98da 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -102,13 +102,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         const char *t;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = sd_bus_message_open_container(reply, 'a', "s");
         if (r < 0)
@@ -192,14 +191,13 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Hashmap **h = userdata;
+        Hashmap **h = ASSERT_PTR(userdata);
         const char *p;
         void *v;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(h);
 
         r = sd_bus_message_open_container(reply, 'a', "s");
         if (r < 0)
@@ -223,12 +221,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = unit_get_unit_file_preset(u);
 
@@ -247,11 +244,10 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *p = NULL;
-        Job **j = userdata;
+        Job **j = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(j);
 
         if (!*j)
                 return sd_bus_message_append(reply, "(uo)", 0, "/");
@@ -273,12 +269,11 @@
                 sd_bus_error *error) {
 
         const char *(*to_string)(ConditionType type) = NULL;
-        Condition **list = userdata, *c;
+        Condition **list = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(list);
 
         to_string = streq(property, "Asserts") ? assert_type_to_string : condition_type_to_string;
 
@@ -315,12 +310,11 @@
                 sd_bus_error *error) {
 
         _cleanup_(sd_bus_error_free) sd_bus_error e = SD_BUS_ERROR_NULL;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = bus_unit_validate_load_state(u, &e);
         if (r < 0)
@@ -338,12 +332,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        unsigned *markers = userdata;
+        unsigned *markers = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(markers);
 
         r = sd_bus_message_open_container(reply, 'a', "s");
         if (r < 0)
@@ -377,6 +370,7 @@
                 bool reload_if_possible,
                 sd_bus_error *error) {
 
+        BusUnitQueueFlags job_flags = reload_if_possible ? BUS_UNIT_QUEUE_RELOAD_IF_POSSIBLE : 0;
         const char *smode, *verb;
         JobMode mode;
         int r;
@@ -405,6 +399,19 @@
         else
                 verb = job_type_to_string(job_type);
 
+        if (sd_bus_message_is_method_call(message, NULL, "StartUnitWithFlags")) {
+                uint64_t input_flags = 0;
+
+                r = sd_bus_message_read(message, "t", &input_flags);
+                if (r < 0)
+                        return r;
+                /* Let clients know that this version doesn't support any flags at the moment. */
+                if (input_flags != 0)
+                        return sd_bus_reply_method_errorf(message, SD_BUS_ERROR_INVALID_ARGS,
+                                                          "Invalid 'flags' parameter '%" PRIu64 "'",
+                                                          input_flags);
+        }
+
         r = bus_verify_manage_units_async_full(
                         u,
                         verb,
@@ -418,48 +425,46 @@
         if (r == 0)
                 return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
 
-        return bus_unit_queue_job(message, u, job_type, mode,
-                                  reload_if_possible ? BUS_UNIT_QUEUE_RELOAD_IF_POSSIBLE : 0, error);
+        return bus_unit_queue_job(message, u, job_type, mode, job_flags, error);
 }
 
-static int method_start(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+static int bus_unit_method_start(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         return bus_unit_method_start_generic(message, userdata, JOB_START, false, error);
 }
 
-static int method_stop(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+static int bus_unit_method_stop(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         return bus_unit_method_start_generic(message, userdata, JOB_STOP, false, error);
 }
 
-static int method_reload(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+static int bus_unit_method_reload(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         return bus_unit_method_start_generic(message, userdata, JOB_RELOAD, false, error);
 }
 
-static int method_restart(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+static int bus_unit_method_restart(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         return bus_unit_method_start_generic(message, userdata, JOB_RESTART, false, error);
 }
 
-static int method_try_restart(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+static int bus_unit_method_try_restart(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         return bus_unit_method_start_generic(message, userdata, JOB_TRY_RESTART, false, error);
 }
 
-static int method_reload_or_restart(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+static int bus_unit_method_reload_or_restart(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         return bus_unit_method_start_generic(message, userdata, JOB_RESTART, true, error);
 }
 
-static int method_reload_or_try_restart(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+static int bus_unit_method_reload_or_try_restart(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         return bus_unit_method_start_generic(message, userdata, JOB_TRY_RESTART, true, error);
 }
 
 int bus_unit_method_enqueue_job(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         BusUnitQueueFlags flags = BUS_UNIT_QUEUE_VERBOSE_REPLY;
         const char *jtype, *smode;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         JobType type;
         JobMode mode;
         int r;
 
         assert(message);
-        assert(u);
 
         r = sd_bus_message_read(message, "ss", &jtype, &smode);
         if (r < 0)
@@ -507,14 +512,13 @@
 }
 
 int bus_unit_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         const char *swho;
         int32_t signo;
         KillWho who;
         int r;
 
         assert(message);
-        assert(u);
 
         r = mac_selinux_unit_access_check(u, message, "stop", error);
         if (r < 0)
@@ -556,11 +560,10 @@
 }
 
 int bus_unit_method_reset_failed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(u);
 
         r = mac_selinux_unit_access_check(u, message, "reload", error);
         if (r < 0)
@@ -585,11 +588,10 @@
 }
 
 int bus_unit_method_set_properties(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int runtime, r;
 
         assert(message);
-        assert(u);
 
         r = mac_selinux_unit_access_check(u, message, "start", error);
         if (r < 0)
@@ -620,11 +622,10 @@
 }
 
 int bus_unit_method_ref(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(u);
 
         r = mac_selinux_unit_access_check(u, message, "start", error);
         if (r < 0)
@@ -651,11 +652,10 @@
 }
 
 int bus_unit_method_unref(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(u);
 
         r = bus_unit_track_remove_sender(u, message);
         if (r == -EUNATCH)
@@ -668,11 +668,10 @@
 
 int bus_unit_method_clean(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         ExecCleanMask mask = 0;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(u);
 
         r = mac_selinux_unit_access_check(u, message, "stop", error);
         if (r < 0)
@@ -723,7 +722,7 @@
 
         r = unit_clean(u, mask);
         if (r == -EOPNOTSUPP)
-                return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Unit '%s' does not supporting cleaning.", u->id);
+                return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Unit '%s' does not support cleaning.", u->id);
         if (r == -EUNATCH)
                 return sd_bus_error_set(error, BUS_ERROR_NOTHING_TO_CLEAN, "No matching resources found.");
         if (r == -EBUSY)
@@ -737,12 +736,11 @@
 static int bus_unit_method_freezer_generic(sd_bus_message *message, void *userdata, sd_bus_error *error, FreezerAction action) {
         const char* perm;
         int (*method)(Unit*);
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         bool reply_no_delay = false;
         int r;
 
         assert(message);
-        assert(u);
         assert(IN_SET(action, FREEZER_FREEZE, FREEZER_THAW));
 
         if (action == FREEZER_FREEZE) {
@@ -784,14 +782,15 @@
         if (r == 0)
                 reply_no_delay = true;
 
-        assert(!u->pending_freezer_message);
+        if (u->pending_freezer_invocation) {
+                bus_unit_send_pending_freezer_message(u, true);
+                assert(!u->pending_freezer_invocation);
+        }
 
-        r = sd_bus_message_new_method_return(message, &u->pending_freezer_message);
-        if (r < 0)
-                return r;
+        u->pending_freezer_invocation = sd_bus_message_ref(message);
 
         if (reply_no_delay) {
-                r = bus_unit_send_pending_freezer_message(u);
+                r = bus_unit_send_pending_freezer_message(u, false);
                 if (r < 0)
                         return r;
         }
@@ -855,19 +854,21 @@
         SD_BUS_PROPERTY("Wants", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("BindsTo", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("PartOf", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("Upholds", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RequiredBy", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RequisiteOf", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("WantedBy", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("BoundBy", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("UpheldBy", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("ConsistsOf", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Conflicts", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("ConflictedBy", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Before", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("After", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("OnFailure", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("OnFailureOf", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("OnSuccess", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("OnSuccessOf", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("OnFailure", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("OnFailureOf", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Triggers", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("TriggeredBy", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("PropagatesReloadTo", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
@@ -879,6 +880,7 @@
         SD_BUS_PROPERTY("RequiresMountsFor", "as", property_get_requires_mounts_for, offsetof(Unit, requires_mounts_for), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Documentation", "as", NULL, offsetof(Unit, documentation), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Description", "s", property_get_description, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("AccessSELinuxContext", "s", NULL, offsetof(Unit, access_selinux_context), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("LoadState", "s", property_get_load_state, offsetof(Unit, load_state), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("ActiveState", "s", property_get_active_state, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("FreezerState", "s", property_get_freezer_state, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
@@ -935,88 +937,63 @@
         SD_BUS_PROPERTY("InvocationID", "ay", bus_property_get_id128, offsetof(Unit, invocation_id), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("CollectMode", "s", property_get_collect_mode, offsetof(Unit, collect_mode), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Refs", "as", property_get_refs, 0, 0),
+        SD_BUS_PROPERTY("ActivationDetails", "a(ss)", bus_property_get_activation_details, offsetof(Unit, activation_details), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
 
-        SD_BUS_METHOD_WITH_NAMES("Start",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_start,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Stop",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_stop,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Reload",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_reload,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Restart",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_restart,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("TryRestart",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_try_restart,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ReloadOrRestart",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_reload_or_restart,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ReloadOrTryRestart",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 "o",
-                                 SD_BUS_PARAM(job),
-                                 method_reload_or_try_restart,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("EnqueueJob",
-                                 "ss",
-                                 SD_BUS_PARAM(job_type)
-                                 SD_BUS_PARAM(job_mode),
-                                 "uososa(uosos)",
-                                 SD_BUS_PARAM(job_id)
-                                 SD_BUS_PARAM(job_path)
-                                 SD_BUS_PARAM(unit_id)
-                                 SD_BUS_PARAM(unit_path)
-                                 SD_BUS_PARAM(job_type)
-                                 SD_BUS_PARAM(affected_jobs),
-                                 bus_unit_method_enqueue_job,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Kill",
-                                 "si",
-                                 SD_BUS_PARAM(whom)
-                                 SD_BUS_PARAM(signal),
-                                 NULL,,
-                                 bus_unit_method_kill,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Start",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_RESULT("o", job),
+                                bus_unit_method_start,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Stop",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_RESULT("o", job),
+                                bus_unit_method_stop,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Reload",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_RESULT("o", job),
+                                bus_unit_method_reload,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Restart",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_RESULT("o", job),
+                                bus_unit_method_restart,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("TryRestart",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_RESULT("o", job),
+                                bus_unit_method_try_restart,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ReloadOrRestart",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_RESULT("o", job),
+                                bus_unit_method_reload_or_restart,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ReloadOrTryRestart",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_RESULT("o", job),
+                                bus_unit_method_reload_or_try_restart,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("EnqueueJob",
+                                SD_BUS_ARGS("s", job_type, "s", job_mode),
+                                SD_BUS_RESULT("u", job_id, "o", job_path, "s", unit_id, "o", unit_path, "s", job_type, "a(uosos)", affected_jobs),
+                                bus_unit_method_enqueue_job,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Kill",
+                                SD_BUS_ARGS("s", whom, "i", signal),
+                                SD_BUS_NO_RESULT,
+                                bus_unit_method_kill,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("ResetFailed",
                       NULL,
                       NULL,
                       bus_unit_method_reset_failed,
                       SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetProperties",
-                                 "ba(sv)",
-                                 SD_BUS_PARAM(runtime)
-                                 SD_BUS_PARAM(properties),
-                                 NULL,,
-                                 bus_unit_method_set_properties,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetProperties",
+                                SD_BUS_ARGS("b", runtime, "a(sv)", properties),
+                                SD_BUS_NO_RESULT,
+                                bus_unit_method_set_properties,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("Ref",
                       NULL,
                       NULL,
@@ -1027,12 +1004,11 @@
                       NULL,
                       bus_unit_method_unref,
                       SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Clean",
-                                 "as",
-                                 SD_BUS_PARAM(mask),
-                                 NULL,,
-                                 bus_unit_method_clean,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Clean",
+                                SD_BUS_ARGS("as", mask),
+                                SD_BUS_NO_RESULT,
+                                bus_unit_method_clean,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("Freeze",
                       NULL,
                       NULL,
@@ -1065,11 +1041,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         return sd_bus_message_append(reply, "s", unit_slice_name(u));
 }
@@ -1084,12 +1059,11 @@
                 sd_bus_error *error) {
 
         uint64_t sz = UINT64_MAX;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = unit_get_memory_current(u, &sz);
         if (r < 0 && r != -ENODATA)
@@ -1108,12 +1082,11 @@
                 sd_bus_error *error) {
 
         uint64_t sz = UINT64_MAX;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = unit_get_memory_available(u, &sz);
         if (r < 0 && r != -ENODATA)
@@ -1132,12 +1105,11 @@
                 sd_bus_error *error) {
 
         uint64_t cn = UINT64_MAX;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = unit_get_tasks_current(u, &cn);
         if (r < 0 && r != -ENODATA)
@@ -1156,12 +1128,11 @@
                 sd_bus_error *error) {
 
         nsec_t ns = NSEC_INFINITY;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = unit_get_cpu_usage(u, &ns);
         if (r < 0 && r != -ENODATA)
@@ -1179,14 +1150,13 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         _cleanup_(cpu_set_reset) CPUSet cpus = {};
         _cleanup_free_ uint8_t *array = NULL;
         size_t allocated;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         (void) unit_get_cpuset(u, &cpus, "cpuset.cpus.effective");
         (void) cpu_set_to_dbus(&cpus, &array, &allocated);
@@ -1202,14 +1172,13 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         _cleanup_(cpu_set_reset) CPUSet mems = {};
         _cleanup_free_ uint8_t *array = NULL;
         size_t allocated;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         (void) unit_get_cpuset(u, &mems, "cpuset.mems.effective");
         (void) cpu_set_to_dbus(&mems, &array, &allocated);
@@ -1225,12 +1194,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         const char *t = NULL;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         /* Three cases: a) u->cgroup_path is NULL, in which case the
          * unit has no control group, which we report as the empty
@@ -1296,7 +1264,7 @@
                 pid_t pid;
 
                 /* libvirt / qemu uses threaded mode and cgroup.procs cannot be read at the lower levels.
-                 * From https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#threads,
+                 * From https://docs.kernel.org/admin-guide/cgroup-v2.html#threads,
                  * “cgroup.procs” in a threaded domain cgroup contains the PIDs of all processes in
                  * the subtree and is not readable in the subtree proper. */
                 r = cg_read_pid(f, &pid);
@@ -1410,13 +1378,12 @@
         };
 
         uint64_t value = UINT64_MAX;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         ssize_t metric;
 
         assert(bus);
         assert(reply);
         assert(property);
-        assert(u);
 
         assert_se((metric = string_table_lookup(table, ELEMENTSOF(table), property)) >= 0);
         (void) unit_get_ip_accounting(u, metric, &value);
@@ -1440,13 +1407,12 @@
         };
 
         uint64_t value = UINT64_MAX;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         ssize_t metric;
 
         assert(bus);
         assert(reply);
         assert(property);
-        assert(u);
 
         assert_se((metric = string_table_lookup(table, ELEMENTSOF(table), property)) >= 0);
         (void) unit_get_io_accounting(u, metric, false, &value);
@@ -1569,6 +1535,7 @@
         SD_BUS_VTABLE_START(0),
         SD_BUS_PROPERTY("Slice", "s", property_get_slice, 0, 0),
         SD_BUS_PROPERTY("ControlGroup", "s", property_get_cgroup, 0, 0),
+        SD_BUS_PROPERTY("ControlGroupId", "t", NULL, offsetof(Unit, cgroup_id), 0),
         SD_BUS_PROPERTY("MemoryCurrent", "t", property_get_current_memory, 0, 0),
         SD_BUS_PROPERTY("MemoryAvailable", "t", property_get_available_memory, 0, 0),
         SD_BUS_PROPERTY("CPUUsageNSec", "t", property_get_cpu_usage, 0, 0),
@@ -1584,18 +1551,15 @@
         SD_BUS_PROPERTY("IOWriteBytes", "t", property_get_io_counter, 0, 0),
         SD_BUS_PROPERTY("IOWriteOperations", "t", property_get_io_counter, 0, 0),
 
-        SD_BUS_METHOD_WITH_NAMES("GetProcesses",
-                                 NULL,,
-                                 "a(sus)",
-                                 SD_BUS_PARAM(processes),
+        SD_BUS_METHOD_WITH_ARGS("GetProcesses",
+                                 SD_BUS_NO_ARGS,
+                                 SD_BUS_ARGS("a(sus)", processes),
                                  bus_unit_method_get_processes,
                                  SD_BUS_VTABLE_UNPRIVILEGED),
 
-        SD_BUS_METHOD_WITH_NAMES("AttachProcesses",
-                                 "sau",
-                                 SD_BUS_PARAM(subcgroup)
-                                 SD_BUS_PARAM(pids),
-                                 NULL,,
+        SD_BUS_METHOD_WITH_ARGS("AttachProcesses",
+                                 SD_BUS_ARGS("s", subcgroup, "au", pids),
+                                 SD_BUS_NO_RESULT,
                                  bus_unit_method_attach_processes,
                                  SD_BUS_VTABLE_UNPRIVILEGED),
 
@@ -1605,11 +1569,10 @@
 static int send_new_signal(sd_bus *bus, void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *p = NULL;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(u);
 
         p = unit_dbus_path(u);
         if (!p)
@@ -1633,11 +1596,10 @@
 
 static int send_changed_signal(sd_bus *bus, void *userdata) {
         _cleanup_free_ char *p = NULL;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(u);
 
         p = unit_dbus_path(u);
         if (!p)
@@ -1700,19 +1662,31 @@
         bus_unit_send_change_signal(u);
 }
 
-int bus_unit_send_pending_freezer_message(Unit *u) {
+int bus_unit_send_pending_freezer_message(Unit *u, bool cancelled) {
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         int r;
 
         assert(u);
 
-        if (!u->pending_freezer_message)
+        if (!u->pending_freezer_invocation)
                 return 0;
 
-        r = sd_bus_send(NULL, u->pending_freezer_message, NULL);
+        if (cancelled)
+                r = sd_bus_message_new_method_error(
+                                u->pending_freezer_invocation,
+                                &reply,
+                                &SD_BUS_ERROR_MAKE_CONST(
+                                                BUS_ERROR_FREEZE_CANCELLED, "Freeze operation aborted"));
+        else
+                r = sd_bus_message_new_method_return(u->pending_freezer_invocation, &reply);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_send(NULL, reply, NULL);
         if (r < 0)
                 log_warning_errno(r, "Failed to send queued message, ignoring: %m");
 
-        u->pending_freezer_message = sd_bus_message_unref(u->pending_freezer_message);
+        u->pending_freezer_invocation = sd_bus_message_unref(u->pending_freezer_invocation);
 
         return 0;
 }
@@ -1720,11 +1694,10 @@
 static int send_removed_signal(sd_bus *bus, void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *p = NULL;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
-        assert(u);
 
         p = unit_dbus_path(u);
         if (!p)
@@ -2223,16 +2196,14 @@
 
         if (streq(name, "Documentation")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
                         return r;
 
-                STRV_FOREACH(p, l) {
+                STRV_FOREACH(p, l)
                         if (!documentation_url_is_valid(*p))
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid URL in %s: %s", name, *p);
-                }
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         if (strv_isempty(l)) {
@@ -2277,7 +2248,7 @@
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unit name '%s' is not a slice", s);
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                        r = unit_set_slice(u, slice, UNIT_DEPENDENCY_FILE);
+                        r = unit_set_slice(u, slice);
                         if (r < 0)
                                 return r;
 
@@ -2288,7 +2259,6 @@
 
         } else if (streq(name, "RequiresMountsFor")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
@@ -2453,10 +2423,6 @@
                 if (r < 0)
                         return r;
 
-                if (!UNIT_VTABLE(u)->bus_set_property)
-                        return sd_bus_error_setf(error, SD_BUS_ERROR_PROPERTY_READ_ONLY,
-                                                 "Objects of this type do not support setting properties.");
-
                 r = sd_bus_message_enter_container(message, 'v', NULL);
                 if (r < 0)
                         return r;
@@ -2464,7 +2430,10 @@
                 /* If not for real, then mask out the two target flags */
                 f = for_real ? flags : (flags & ~(UNIT_RUNTIME|UNIT_PERSISTENT));
 
-                r = UNIT_VTABLE(u)->bus_set_property(u, name, message, f, error);
+                if (UNIT_VTABLE(u)->bus_set_property)
+                        r = UNIT_VTABLE(u)->bus_set_property(u, name, message, f, error);
+                else
+                        r = 0;
                 if (r == 0 && u->transient && u->load_state == UNIT_STUB)
                         r = bus_unit_set_transient_property(u, name, message, f, error);
                 if (r == 0)
@@ -2528,10 +2497,9 @@
 }
 
 static int bus_unit_track_handler(sd_bus_track *t, void *userdata) {
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
 
         assert(t);
-        assert(u);
 
         u->bus_track = sd_bus_track_unref(u->bus_track); /* make sure we aren't called again */
 
diff --git a/src/core/dbus-unit.h b/src/core/dbus-unit.h
index a3ac320..6b7828e 100644
--- a/src/core/dbus-unit.h
+++ b/src/core/dbus-unit.h
@@ -10,7 +10,7 @@
 
 void bus_unit_send_change_signal(Unit *u);
 void bus_unit_send_pending_change_signal(Unit *u, bool including_new);
-int bus_unit_send_pending_freezer_message(Unit *u);
+int bus_unit_send_pending_freezer_message(Unit *u, bool cancelled);
 void bus_unit_send_removed_signal(Unit *u);
 
 int bus_unit_method_start_generic(sd_bus_message *message, Unit *u, JobType job_type, bool reload_if_possible, sd_bus_error *error);
@@ -29,8 +29,8 @@
 int bus_unit_method_thaw(sd_bus_message *message, void *userdata, sd_bus_error *error);
 
 typedef enum BusUnitQueueFlags {
-        BUS_UNIT_QUEUE_RELOAD_IF_POSSIBLE = 1 << 0,
-        BUS_UNIT_QUEUE_VERBOSE_REPLY      = 1 << 1,
+        BUS_UNIT_QUEUE_RELOAD_IF_POSSIBLE            = 1 << 0,
+        BUS_UNIT_QUEUE_VERBOSE_REPLY                 = 1 << 1,
 } BusUnitQueueFlags;
 
 int bus_unit_queue_job_one(
diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c
index ca9b399..edfa0eb 100644
--- a/src/core/dbus-util.c
+++ b/src/core/dbus-util.c
@@ -112,16 +112,13 @@
                 return r;
 
         if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                char *n, ts[FORMAT_TIMESPAN_MAX];
-
                 if (fix_0)
                         *p = v != 0 ? v: USEC_INFINITY;
                 else
                         *p = v;
 
-                n = strndupa(name, strlen(name) - 4);
-                unit_write_settingf(u, flags, name, "%sSec=%s", n,
-                                    format_timespan(ts, sizeof(ts), v, USEC_PER_MSEC));
+                char *n = strndupa_safe(name, strlen(name) - 4);
+                unit_write_settingf(u, flags, name, "%sSec=%s", n, FORMAT_TIMESPAN(v, USEC_PER_MSEC));
         }
 
         return 1;
@@ -219,7 +216,7 @@
         if (r < 0)
                 return r;
 
-        if (!LIST_IS_EMPTY(options)) {
+        if (options) {
                 if (ret_format_str) {
                         char *final = strjoin(*ret_format_str, !isempty(*ret_format_str) ? separator : "", format_str);
                         if (!final)
@@ -231,3 +228,35 @@
 
         return 0;
 }
+
+int bus_property_get_activation_details(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        ActivationDetails **details = ASSERT_PTR(userdata);
+        _cleanup_strv_free_ char **pairs = NULL;
+        int r;
+
+        assert(reply);
+
+        r = activation_details_append_pair(*details, &pairs);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_open_container(reply, 'a', "(ss)");
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH_PAIR(key, value, pairs) {
+                r = sd_bus_message_append(reply, "(ss)", *key, *value);
+                if (r < 0)
+                        return r;
+        }
+
+        return sd_bus_message_close_container(reply);
+}
diff --git a/src/core/dbus-util.h b/src/core/dbus-util.h
index 7991367..e12631a 100644
--- a/src/core/dbus-util.h
+++ b/src/core/dbus-util.h
@@ -251,3 +251,5 @@
 int bus_verify_manage_units_async_full(Unit *u, const char *verb, int capability, const char *polkit_message, bool interactive, sd_bus_message *call, sd_bus_error *error);
 
 int bus_read_mount_options(sd_bus_message *message, sd_bus_error *error, MountOptions **ret_options, char **ret_format_str, const char *separator);
+
+int bus_property_get_activation_details(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
diff --git a/src/core/dbus.c b/src/core/dbus.c
index f876433..c295e1f 100644
--- a/src/core/dbus.c
+++ b/src/core/dbus.c
@@ -33,7 +33,7 @@
 #include "fd-util.h"
 #include "fs-util.h"
 #include "log.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "process-util.h"
 #include "selinux-access.h"
 #include "serialize.h"
@@ -42,6 +42,7 @@
 #include "string-util.h"
 #include "strv.h"
 #include "strxcpyx.h"
+#include "umask-util.h"
 #include "user-util.h"
 
 #define CONNECTIONS_MAX 4096
@@ -96,13 +97,12 @@
 
 static int signal_agent_released(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *cgroup;
         uid_t sender_uid;
         int r;
 
         assert(message);
-        assert(m);
 
         /* only accept org.freedesktop.systemd1.Agent from UID=0 */
         r = sd_bus_query_sender_creds(message, SD_BUS_CREDS_EUID, &creds);
@@ -125,11 +125,10 @@
 }
 
 static int signal_disconnected(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         sd_bus *bus;
 
         assert(message);
-        assert(m);
         assert_se(bus = sd_bus_message_get_bus(message));
 
         if (bus == m->api_bus)
@@ -148,13 +147,12 @@
 static int signal_activation_request(sd_bus_message *message, void *userdata, sd_bus_error *ret_error) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Unit *u;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0) {
@@ -314,19 +312,18 @@
 }
 
 static int bus_unit_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         return find_unit(m, bus, path, (Unit**) found, error);
 }
 
 static int bus_unit_interface_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Unit *u;
         int r;
 
@@ -334,7 +331,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         r = find_unit(m, bus, path, &u, error);
         if (r <= 0)
@@ -348,7 +344,7 @@
 }
 
 static int bus_unit_cgroup_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Unit *u;
         int r;
 
@@ -356,7 +352,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         r = find_unit(m, bus, path, &u, error);
         if (r <= 0)
@@ -373,7 +368,7 @@
 }
 
 static int bus_cgroup_context_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         CGroupContext *c;
         Unit *u;
         int r;
@@ -382,7 +377,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         r = find_unit(m, bus, path, &u, error);
         if (r <= 0)
@@ -400,7 +394,7 @@
 }
 
 static int bus_exec_context_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         ExecContext *c;
         Unit *u;
         int r;
@@ -409,7 +403,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         r = find_unit(m, bus, path, &u, error);
         if (r <= 0)
@@ -427,7 +420,7 @@
 }
 
 static int bus_kill_context_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         KillContext *c;
         Unit *u;
         int r;
@@ -436,7 +429,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         r = find_unit(m, bus, path, &u, error);
         if (r <= 0)
@@ -657,13 +649,12 @@
 
 static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
         _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_close_ int nfd = -1;
-        Manager *m = userdata;
+        _cleanup_close_ int nfd = -EBADF;
+        Manager *m = ASSERT_PTR(userdata);
         sd_id128_t id;
         int r;
 
         assert(s);
-        assert(m);
 
         nfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC);
         if (nfd < 0) {
@@ -693,7 +684,7 @@
                 return 0;
         }
 
-        nfd = -1;
+        nfd = -EBADF;
 
         r = bus_check_peercred(bus);
         if (r < 0) {
@@ -906,7 +897,7 @@
 }
 
 int bus_init_private(Manager *m) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         union sockaddr_union sa;
         socklen_t sa_len;
         sd_event_source *s;
@@ -925,14 +916,18 @@
 
                 r = sockaddr_un_set_path(&sa.un, "/run/systemd/private");
         } else {
-                const char *e, *joined;
+                _cleanup_free_ char *joined = NULL;
+                const char *e;
 
                 e = secure_getenv("XDG_RUNTIME_DIR");
                 if (!e)
                         return log_error_errno(SYNTHETIC_ERRNO(EHOSTDOWN),
                                                "XDG_RUNTIME_DIR is not set, refusing.");
 
-                joined = strjoina(e, "/systemd/private");
+                joined = path_join(e, "/systemd/private");
+                if (!joined)
+                        return log_oom();
+
                 r = sockaddr_un_set_path(&sa.un, joined);
         }
         if (r < 0)
@@ -946,7 +941,8 @@
         if (fd < 0)
                 return log_error_errno(errno, "Failed to allocate private socket: %m");
 
-        r = bind(fd, &sa.sa, sa_len);
+        WITH_UMASK(0077)
+                r = bind(fd, &sa.sa, sa_len);
         if (r < 0)
                 return log_error_errno(errno, "Failed to bind private socket: %m");
 
@@ -1002,8 +998,8 @@
                         u->bus_track = sd_bus_track_unref(u->bus_track);
 
                 /* Get rid of pending freezer messages on this bus */
-                if (u->pending_freezer_message && sd_bus_message_get_bus(u->pending_freezer_message) == *bus)
-                        u->pending_freezer_message = sd_bus_message_unref(u->pending_freezer_message);
+                if (u->pending_freezer_invocation && sd_bus_message_get_bus(u->pending_freezer_invocation) == *bus)
+                        u->pending_freezer_invocation = sd_bus_message_unref(u->pending_freezer_invocation);
         }
 
         /* Get rid of queued message on this bus */
diff --git a/src/core/device.c b/src/core/device.c
index 5ed5ceb..4f6ecf4 100644
--- a/src/core/device.c
+++ b/src/core/device.c
@@ -9,6 +9,7 @@
 #include "bus-error.h"
 #include "dbus-device.h"
 #include "dbus-unit.h"
+#include "device-private.h"
 #include "device-util.h"
 #include "device.h"
 #include "log.h"
@@ -24,13 +25,33 @@
 #include "unit.h"
 
 static const UnitActiveState state_translation_table[_DEVICE_STATE_MAX] = {
-        [DEVICE_DEAD] = UNIT_INACTIVE,
+        [DEVICE_DEAD]      = UNIT_INACTIVE,
         [DEVICE_TENTATIVE] = UNIT_ACTIVATING,
-        [DEVICE_PLUGGED] = UNIT_ACTIVE,
+        [DEVICE_PLUGGED]   = UNIT_ACTIVE,
 };
 
 static int device_dispatch_io(sd_device_monitor *monitor, sd_device *dev, void *userdata);
-static void device_update_found_one(Device *d, DeviceFound found, DeviceFound mask);
+
+static int device_by_path(Manager *m, const char *path, Unit **ret) {
+        _cleanup_free_ char *e = NULL;
+        Unit *u;
+        int r;
+
+        assert(m);
+        assert(path);
+
+        r = unit_name_from_path(path, ".device", &e);
+        if (r < 0)
+                return r;
+
+        u = manager_get_unit(m, e);
+        if (!u)
+                return -ENOENT;
+
+        if (ret)
+                *ret = u;
+        return 0;
+}
 
 static void device_unset_sysfs(Device *d) {
         Hashmap *devices;
@@ -101,7 +122,7 @@
          * indefinitely for plugged in devices, something which cannot
          * happen for the other units since their operations time out
          * anyway. */
-        u->job_running_timeout = u->manager->default_timeout_start_usec;
+        u->job_running_timeout = u->manager->default_device_timeout_usec;
 
         u->ignore_on_isolate = true;
 
@@ -114,7 +135,9 @@
         assert(d);
 
         device_unset_sysfs(d);
+        d->deserialized_sysfs = mfree(d->deserialized_sysfs);
         d->wants_property = strv_free(d->wants_property);
+        d->path = mfree(d->path);
 }
 
 static int device_load(Unit *u) {
@@ -137,6 +160,7 @@
 
 static void device_set_state(Device *d, DeviceState state) {
         DeviceState old_state;
+
         assert(d);
 
         if (d->state != state)
@@ -154,6 +178,78 @@
         unit_notify(UNIT(d), state_translation_table[old_state], state_translation_table[state], 0);
 }
 
+static void device_found_changed(Device *d, DeviceFound previous, DeviceFound now) {
+        assert(d);
+
+        /* Didn't exist before, but does now? if so, generate a new invocation ID for it */
+        if (previous == DEVICE_NOT_FOUND && now != DEVICE_NOT_FOUND)
+                (void) unit_acquire_invocation_id(UNIT(d));
+
+        if (FLAGS_SET(now, DEVICE_FOUND_UDEV))
+                /* When the device is known to udev we consider it plugged. */
+                device_set_state(d, DEVICE_PLUGGED);
+        else if (now != DEVICE_NOT_FOUND && !FLAGS_SET(previous, DEVICE_FOUND_UDEV))
+                /* If the device has not been seen by udev yet, but is now referenced by the kernel, then we assume the
+                 * kernel knows it now, and udev might soon too. */
+                device_set_state(d, DEVICE_TENTATIVE);
+        else
+                /* If nobody sees the device, or if the device was previously seen by udev and now is only referenced
+                 * from the kernel, then we consider the device is gone, the kernel just hasn't noticed it yet. */
+                device_set_state(d, DEVICE_DEAD);
+}
+
+static void device_update_found_one(Device *d, DeviceFound found, DeviceFound mask) {
+        assert(d);
+
+        if (MANAGER_IS_RUNNING(UNIT(d)->manager)) {
+                DeviceFound n, previous;
+
+                /* When we are already running, then apply the new mask right-away, and trigger state changes
+                 * right-away */
+
+                n = (d->found & ~mask) | (found & mask);
+                if (n == d->found)
+                        return;
+
+                previous = d->found;
+                d->found = n;
+
+                device_found_changed(d, previous, n);
+        } else
+                /* We aren't running yet, let's apply the new mask to the shadow variable instead, which we'll apply as
+                 * soon as we catch-up with the state. */
+                d->enumerated_found = (d->enumerated_found & ~mask) | (found & mask);
+}
+
+static void device_update_found_by_sysfs(Manager *m, const char *sysfs, DeviceFound found, DeviceFound mask) {
+        Device *l;
+
+        assert(m);
+        assert(sysfs);
+
+        if (mask == 0)
+                return;
+
+        l = hashmap_get(m->devices_by_sysfs, sysfs);
+        LIST_FOREACH(same_sysfs, d, l)
+                device_update_found_one(d, found, mask);
+}
+
+static void device_update_found_by_name(Manager *m, const char *path, DeviceFound found, DeviceFound mask) {
+        Unit *u;
+
+        assert(m);
+        assert(path);
+
+        if (mask == 0)
+                return;
+
+        if (device_by_path(m, path, &u) < 0)
+                return;
+
+        device_update_found_one(DEVICE(u), found, mask);
+}
+
 static int device_coldplug(Unit *u) {
         Device *d = DEVICE(u);
 
@@ -161,14 +257,74 @@
         assert(d->state == DEVICE_DEAD);
 
         /* First, let's put the deserialized state and found mask into effect, if we have it. */
-
-        if (d->deserialized_state < 0 ||
-            (d->deserialized_state == d->state &&
-             d->deserialized_found == d->found))
+        if (d->deserialized_state < 0)
                 return 0;
 
-        d->found = d->deserialized_found;
-        device_set_state(d, d->deserialized_state);
+        Manager *m = u->manager;
+        DeviceFound found = d->deserialized_found;
+        DeviceState state = d->deserialized_state;
+
+        /* On initial boot, switch-root, reload, reexecute, the following happen:
+         * 1. MANAGER_IS_RUNNING() == false
+         * 2. enumerate devices: manager_enumerate() -> device_enumerate()
+         *    Device.enumerated_found is set.
+         * 3. deserialize devices: manager_deserialize() -> device_deserialize_item()
+         *    Device.deserialize_state and Device.deserialized_found are set.
+         * 4. coldplug devices: manager_coldplug() -> device_coldplug()
+         *    deserialized properties are copied to the main properties.
+         * 5. MANAGER_IS_RUNNING() == true: manager_ready()
+         * 6. catchup devices: manager_catchup() -> device_catchup()
+         *    Device.enumerated_found is applied to Device.found, and state is updated based on that.
+         *
+         * Notes:
+         * - On initial boot, no udev database exists. Hence, no devices are enumerated in the step 2.
+         *   Also, there is no deserialized device. Device units are (a) generated based on dependencies of
+         *   other units, or (b) generated when uevents are received.
+         *
+         * - On switch-root, the udev database may be cleared, except for devices with sticky bit, i.e.
+         *   OPTIONS="db_persist". Hence, almost no devices are enumerated in the step 2. However, in
+         *   general, we have several serialized devices. So, DEVICE_FOUND_UDEV bit in the
+         *   Device.deserialized_found must be ignored, as udev rules in initrd and the main system are often
+         *   different. If the deserialized state is DEVICE_PLUGGED, we need to downgrade it to
+         *   DEVICE_TENTATIVE. Unlike the other starting mode, MANAGER_IS_SWITCHING_ROOT() is true when
+         *   device_coldplug() and device_catchup() are called. Hence, let's conditionalize the operations by
+         *   using the flag. After switch-root, systemd-udevd will (re-)process all devices, and the
+         *   Device.found and Device.state will be adjusted.
+         *
+         * - On reload or reexecute, we can trust Device.enumerated_found, Device.deserialized_found, and
+         *   Device.deserialized_state. Of course, deserialized parameters may be outdated, but the unit
+         *   state can be adjusted later by device_catchup() or uevents. */
+
+        if (MANAGER_IS_SWITCHING_ROOT(m) &&
+            !FLAGS_SET(d->enumerated_found, DEVICE_FOUND_UDEV)) {
+
+                /* The device has not been enumerated. On switching-root, such situation is natural. See the
+                 * above comment. To prevent problematic state transition active → dead → active, let's
+                 * drop the DEVICE_FOUND_UDEV flag and downgrade state to DEVICE_TENTATIVE(activating). See
+                 * issue #12953 and #23208. */
+                found &= ~DEVICE_FOUND_UDEV;
+                if (state == DEVICE_PLUGGED)
+                        state = DEVICE_TENTATIVE;
+
+                /* Also check the validity of the device syspath. Without this check, if the device was
+                 * removed while switching root, it would never go to inactive state, as both Device.found
+                 * and Device.enumerated_found do not have the DEVICE_FOUND_UDEV flag, so device_catchup() in
+                 * device_update_found_one() does nothing in most cases. See issue #25106. Note that the
+                 * syspath field is only serialized when systemd is sufficiently new and the device has been
+                 * already processed by udevd. */
+                if (d->deserialized_sysfs) {
+                        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+
+                        if (sd_device_new_from_syspath(&dev, d->deserialized_sysfs) < 0)
+                                state = DEVICE_DEAD;
+                }
+        }
+
+        if (d->found == found && d->state == state)
+                return 0;
+
+        d->found = found;
+        device_set_state(d, state);
         return 0;
 }
 
@@ -177,10 +333,7 @@
 
         assert(d);
 
-        /* Second, let's update the state with the enumerated state if it's different */
-        if (d->enumerated_found == d->found)
-                return;
-
+        /* Second, let's update the state with the enumerated state */
         device_update_found_one(d, d->enumerated_found, DEVICE_FOUND_MASK);
 }
 
@@ -248,10 +401,17 @@
         _cleanup_free_ char *s = NULL;
         Device *d = DEVICE(u);
 
+        assert(d);
         assert(u);
         assert(f);
         assert(fds);
 
+        if (d->sysfs)
+                (void) serialize_item(f, "sysfs", d->sysfs);
+
+        if (d->path)
+                (void) serialize_item(f, "path", d->path);
+
         (void) serialize_item(f, "state", device_state_to_string(d->state));
 
         if (device_found_to_string_many(d->found, &s) >= 0)
@@ -264,12 +424,27 @@
         Device *d = DEVICE(u);
         int r;
 
+        assert(d);
         assert(u);
         assert(key);
         assert(value);
         assert(fds);
 
-        if (streq(key, "state")) {
+        if (streq(key, "sysfs")) {
+                if (!d->deserialized_sysfs) {
+                        d->deserialized_sysfs = strdup(value);
+                        if (!d->deserialized_sysfs)
+                                log_oom_debug();
+                }
+
+        } else if (streq(key, "path")) {
+                if (!d->path) {
+                        d->path = strdup(value);
+                        if (!d->path)
+                                log_oom_debug();
+                }
+
+        } else if (streq(key, "state")) {
                 DeviceState state;
 
                 state = device_state_from_string(value);
@@ -299,19 +474,17 @@
 
         fprintf(f,
                 "%sDevice State: %s\n"
+                "%sDevice Path: %s\n"
                 "%sSysfs Path: %s\n"
                 "%sFound: %s\n",
                 prefix, device_state_to_string(d->state),
+                prefix, strna(d->path),
                 prefix, strna(d->sysfs),
                 prefix, strna(s));
 
-        if (!strv_isempty(d->wants_property)) {
-                char **i;
-
-                STRV_FOREACH(i, d->wants_property)
-                        fprintf(f, "%sudev SYSTEMD_WANTS: %s\n",
-                                prefix, *i);
-        }
+        STRV_FOREACH(i, d->wants_property)
+                fprintf(f, "%sudev SYSTEMD_WANTS: %s\n",
+                        prefix, *i);
 }
 
 _pure_ static UnitActiveState device_active_state(Unit *u) {
@@ -410,56 +583,52 @@
                 if (r < 0)
                         return log_unit_error_errno(u, r, "Failed to add Wants= dependency: %m");
 
-                r = strv_push(&added, k);
+                r = strv_consume(&added, TAKE_PTR(k));
                 if (r < 0)
                         return log_oom();
-
-                k = NULL;
         }
 
-        if (d->state != DEVICE_DEAD) {
-                char **i;
-
+        if (d->state != DEVICE_DEAD)
                 /* So here's a special hack, to compensate for the fact that the udev database's reload cycles are not
                  * synchronized with our own reload cycles: when we detect that the SYSTEMD_WANTS property of a device
-                 * changes while the device unit is already up, let's manually trigger any new units listed in it not
-                 * seen before. This typically happens during the boot-time switch root transition, as udev devices
-                 * will generally already be up in the initrd, but SYSTEMD_WANTS properties get then added through udev
-                 * rules only available on the host system, and thus only when the initial udev coldplug trigger runs.
+                 * changes while the device unit is already up, let's skip to trigger units that were already listed
+                 * and are active, and start units otherwise. This typically happens during the boot-time switch root
+                 * transition, as udev devices will generally already be up in the initrd, but SYSTEMD_WANTS properties
+                 * get then added through udev rules only available on the host system, and thus only when the initial
+                 * udev coldplug trigger runs.
                  *
                  * We do this only if the device has been up already when we parse this, as otherwise the usual
                  * dependency logic that is run from the dead → plugged transition will trigger these deps. */
-
                 STRV_FOREACH(i, added) {
                         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
 
-                        if (strv_contains(d->wants_property, *i)) /* Was this unit already listed before? */
-                                continue;
+                        if (strv_contains(d->wants_property, *i)) {
+                                Unit *v;
+
+                                v = manager_get_unit(u->manager, *i);
+                                if (v && UNIT_IS_ACTIVE_OR_RELOADING(unit_active_state(v)))
+                                        continue; /* The unit was already listed and is running. */
+                        }
 
                         r = manager_add_job_by_name(u->manager, JOB_START, *i, JOB_FAIL, NULL, &error, NULL);
                         if (r < 0)
                                 log_unit_warning_errno(u, r, "Failed to enqueue SYSTEMD_WANTS= job, ignoring: %s", bus_error_message(&error, r));
                 }
-        }
 
         return strv_free_and_replace(d->wants_property, added);
 }
 
 static bool device_is_bound_by_mounts(Device *d, sd_device *dev) {
-        const char *bound_by;
         int r;
 
         assert(d);
         assert(dev);
 
-        if (sd_device_get_property_value(dev, "SYSTEMD_MOUNT_DEVICE_BOUND", &bound_by) >= 0) {
-                r = parse_boolean(bound_by);
-                if (r < 0)
-                        log_device_warning_errno(dev, r, "Failed to parse SYSTEMD_MOUNT_DEVICE_BOUND='%s' udev property, ignoring: %m", bound_by);
+        r = device_get_property_bool(dev, "SYSTEMD_MOUNT_DEVICE_BOUND");
+        if (r < 0 && r != -ENOENT)
+                log_device_warning_errno(dev, r, "Failed to parse SYSTEMD_MOUNT_DEVICE_BOUND= udev property, ignoring: %m");
 
-                d->bind_mounts = r > 0;
-        } else
-                d->bind_mounts = false;
+        d->bind_mounts = r > 0;
 
         return d->bind_mounts;
 }
@@ -481,11 +650,11 @@
         }
 }
 
-static int device_setup_unit(Manager *m, sd_device *dev, const char *path, bool main) {
+static int device_setup_unit(Manager *m, sd_device *dev, const char *path, bool main, Set **units) {
+        _cleanup_(unit_freep) Unit *new_unit = NULL;
         _cleanup_free_ char *e = NULL;
         const char *sysfs = NULL;
-        Unit *u = NULL;
-        bool delete;
+        Unit *u;
         int r;
 
         assert(m);
@@ -498,32 +667,13 @@
         }
 
         r = unit_name_from_path(path, ".device", &e);
-        if (r < 0) {
-                /* Let's complain about overly long device names only at most once every 5s or so. This is
-                 * something we should mention, since relevant devices are not manageable by systemd, but not
-                 * flood the log about. */
-                static RateLimit rate_limit = {
-                        .interval = 5 * USEC_PER_SEC,
-                        .burst = 1,
-                };
-
-                /* If we cannot convert a device name to a unit name then let's ignore the device. So far,
-                 * devices with such long names weren't really the kind you want to manage with systemd
-                 * anyway, hence this shouldn't be a problem. */
-
-                if (r == -ENAMETOOLONG)
-                        return log_struct_errno(
-                                        ratelimit_below(&rate_limit) ? LOG_WARNING : LOG_DEBUG, r,
-                                        "MESSAGE_ID=" SD_MESSAGE_DEVICE_PATH_NOT_SUITABLE_STR,
-                                        "DEVICE=%s", path,
-                                        LOG_MESSAGE("Device path '%s' too long to fit into unit name, ignoring device.", path));
-
+        if (r < 0)
                 return log_struct_errno(
-                                ratelimit_below(&rate_limit) ? LOG_WARNING : LOG_DEBUG, r,
+                                LOG_WARNING, r,
                                 "MESSAGE_ID=" SD_MESSAGE_DEVICE_PATH_NOT_SUITABLE_STR,
                                 "DEVICE=%s", path,
-                                LOG_MESSAGE("Failed to generate valid unit name from device path '%s', ignoring device: %m", path));
-        }
+                                LOG_MESSAGE("Failed to generate valid unit name from device path '%s', ignoring device: %m",
+                                            path));
 
         u = manager_get_unit(m, e);
         if (u) {
@@ -532,42 +682,36 @@
                  * dependency on the mount unit which was added during the loading of the later. When the device is
                  * plugged the sysfs might not be initialized yet, as we serialize the device's state but do not
                  * serialize the sysfs path across reloads/reexecs. Hence, when coming back from a reload/restart we
-                 * might have the state valid, but not the sysfs path. Hence, let's filter out conflicting devices, but
-                 * let's accept devices in any state with no sysfs path set. */
-
-                if (DEVICE(u)->state == DEVICE_PLUGGED &&
-                    DEVICE(u)->sysfs &&
-                    sysfs &&
-                    !path_equal(DEVICE(u)->sysfs, sysfs))
-                        return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EEXIST),
-                                                    "Device %s appeared twice with different sysfs paths %s and %s, ignoring the latter.",
-                                                    e, DEVICE(u)->sysfs, sysfs);
-
-                delete = false;
+                 * might have the state valid, but not the sysfs path. Also, there is another possibility; when multiple
+                 * devices have the same devlink (e.g. /dev/disk/by-uuid/xxxx), adding/updating/removing one of the
+                 * device causes syspath change. Hence, let's always update sysfs path. */
 
                 /* Let's remove all dependencies generated due to udev properties. We'll re-add whatever is configured
                  * now below. */
                 unit_remove_dependencies(u, UNIT_DEPENDENCY_UDEV);
-        } else {
-                delete = true;
 
-                r = unit_new_for_name(m, sizeof(Device), e, &u);
-                if (r < 0) {
-                        log_device_error_errno(dev, r, "Failed to allocate device unit %s: %m", e);
-                        goto fail;
-                }
+        } else {
+                r = unit_new_for_name(m, sizeof(Device), e, &new_unit);
+                if (r < 0)
+                        return log_device_error_errno(dev, r, "Failed to allocate device unit %s: %m", e);
+
+                u = new_unit;
 
                 unit_add_to_load_queue(u);
         }
 
+        if (!DEVICE(u)->path) {
+                DEVICE(u)->path = strdup(path);
+                if (!DEVICE(u)->path)
+                        return log_oom();
+        }
+
         /* If this was created via some dependency and has not actually been seen yet ->sysfs will not be
          * initialized. Hence initialize it if necessary. */
         if (sysfs) {
                 r = device_set_sysfs(DEVICE(u), sysfs);
-                if (r < 0) {
-                        log_unit_error_errno(u, r, "Failed to set sysfs path %s: %m", sysfs);
-                        goto fail;
-                }
+                if (r < 0)
+                        return log_unit_error_errno(u, r, "Failed to set sysfs path %s: %m", sysfs);
 
                 /* The additional systemd udev properties we only interpret for the main object */
                 if (main)
@@ -583,187 +727,225 @@
         if (dev && device_is_bound_by_mounts(DEVICE(u), dev))
                 device_upgrade_mount_deps(u);
 
-        return 0;
-
-fail:
-        if (delete)
-                unit_free(u);
-
-        return r;
-}
-
-static void device_process_new(Manager *m, sd_device *dev) {
-        const char *sysfs, *dn, *alias;
-        dev_t devnum;
-        int r;
-
-        assert(m);
-
-        if (sd_device_get_syspath(dev, &sysfs) < 0)
-                return;
-
-        /* Add the main unit named after the sysfs path. If this one fails, don't bother with the rest, as
-         * this one shall be the main device unit the others just follow. (Compare with how
-         * device_following() is implemented, see below, which looks for the sysfs device.) */
-        if (device_setup_unit(m, dev, sysfs, true) < 0)
-                return;
-
-        /* Add an additional unit for the device node */
-        if (sd_device_get_devname(dev, &dn) >= 0)
-                (void) device_setup_unit(m, dev, dn, false);
-
-        /* Add additional units for all symlinks */
-        if (sd_device_get_devnum(dev, &devnum) >= 0) {
-                const char *p;
-
-                FOREACH_DEVICE_DEVLINK(dev, p) {
-                        struct stat st;
-
-                        if (PATH_STARTSWITH_SET(p, "/dev/block/", "/dev/char/"))
-                                continue;
-
-                        /* Verify that the symlink in the FS actually belongs to this device. This is useful
-                         * to deal with conflicting devices, e.g. when two disks want the same
-                         * /dev/disk/by-label/xxx link because they have the same label. We want to make sure
-                         * that the same device that won the symlink wins in systemd, so we check the device
-                         * node major/minor */
-                        if (stat(p, &st) >= 0 &&
-                            ((!S_ISBLK(st.st_mode) && !S_ISCHR(st.st_mode)) ||
-                             st.st_rdev != devnum))
-                                continue;
-
-                        (void) device_setup_unit(m, dev, p, false);
-                }
-        }
-
-        /* Add additional units for all explicitly configured aliases */
-        if (sd_device_get_property_value(dev, "SYSTEMD_ALIAS", &alias) < 0)
-                return;
-
-        for (;;) {
-                _cleanup_free_ char *word = NULL;
-
-                r = extract_first_word(&alias, &word, NULL, EXTRACT_UNQUOTE);
-                if (r == 0)
-                        break;
-                if (r == -ENOMEM)
-                        return (void) log_oom();
+        if (units) {
+                r = set_ensure_put(units, NULL, DEVICE(u));
                 if (r < 0)
-                        return (void) log_device_warning_errno(dev, r, "Failed to parse SYSTEMD_ALIAS property, ignoring: %m");
-
-                if (!path_is_absolute(word))
-                        log_device_warning(dev, "SYSTEMD_ALIAS is not an absolute path, ignoring: %s", word);
-                else if (!path_is_normalized(word))
-                        log_device_warning(dev, "SYSTEMD_ALIAS is not a normalized path, ignoring: %s", word);
-                else
-                        (void) device_setup_unit(m, dev, word, false);
+                        return log_unit_error_errno(u, r, "Failed to store unit: %m");
         }
-}
 
-static void device_found_changed(Device *d, DeviceFound previous, DeviceFound now) {
-        assert(d);
-
-        /* Didn't exist before, but does now? if so, generate a new invocation ID for it */
-        if (previous == DEVICE_NOT_FOUND && now != DEVICE_NOT_FOUND)
-                (void) unit_acquire_invocation_id(UNIT(d));
-
-        if (FLAGS_SET(now, DEVICE_FOUND_UDEV))
-                /* When the device is known to udev we consider it plugged. */
-                device_set_state(d, DEVICE_PLUGGED);
-        else if (now != DEVICE_NOT_FOUND && !FLAGS_SET(previous, DEVICE_FOUND_UDEV))
-                /* If the device has not been seen by udev yet, but is now referenced by the kernel, then we assume the
-                 * kernel knows it now, and udev might soon too. */
-                device_set_state(d, DEVICE_TENTATIVE);
-        else
-                /* If nobody sees the device, or if the device was previously seen by udev and now is only referenced
-                 * from the kernel, then we consider the device is gone, the kernel just hasn't noticed it yet. */
-                device_set_state(d, DEVICE_DEAD);
-}
-
-static void device_update_found_one(Device *d, DeviceFound found, DeviceFound mask) {
-        Manager *m;
-
-        assert(d);
-
-        m = UNIT(d)->manager;
-
-        if (MANAGER_IS_RUNNING(m) && (m->honor_device_enumeration || MANAGER_IS_USER(m))) {
-                DeviceFound n, previous;
-
-                /* When we are already running, then apply the new mask right-away, and trigger state changes
-                 * right-away */
-
-                n = (d->found & ~mask) | (found & mask);
-                if (n == d->found)
-                        return;
-
-                previous = d->found;
-                d->found = n;
-
-                device_found_changed(d, previous, n);
-        } else
-                /* We aren't running yet, let's apply the new mask to the shadow variable instead, which we'll apply as
-                 * soon as we catch-up with the state. */
-                d->enumerated_found = (d->enumerated_found & ~mask) | (found & mask);
-}
-
-static void device_update_found_by_sysfs(Manager *m, const char *sysfs, DeviceFound found, DeviceFound mask) {
-        Device *d, *l, *n;
-
-        assert(m);
-        assert(sysfs);
-
-        if (mask == 0)
-                return;
-
-        l = hashmap_get(m->devices_by_sysfs, sysfs);
-        LIST_FOREACH_SAFE(same_sysfs, d, n, l)
-                device_update_found_one(d, found, mask);
-}
-
-static void device_update_found_by_name(Manager *m, const char *path, DeviceFound found, DeviceFound mask) {
-        _cleanup_free_ char *e = NULL;
-        Unit *u;
-        int r;
-
-        assert(m);
-        assert(path);
-
-        if (mask == 0)
-                return;
-
-        r = unit_name_from_path(path, ".device", &e);
-        if (r < 0)
-                return (void) log_debug_errno(r, "Failed to generate unit name from device path, ignoring: %m");
-
-        u = manager_get_unit(m, e);
-        if (!u)
-                return;
-
-        device_update_found_one(DEVICE(u), found, mask);
+        TAKE_PTR(new_unit);
+        return 0;
 }
 
 static bool device_is_ready(sd_device *dev) {
-        const char *ready;
+        int r;
 
         assert(dev);
 
-        if (device_is_renaming(dev) > 0)
+        if (device_for_action(dev, SD_DEVICE_REMOVE))
                 return false;
 
+        r = device_is_renaming(dev);
+        if (r < 0)
+                log_device_warning_errno(dev, r, "Failed to check if device is renaming, assuming device is not renaming: %m");
+        if (r > 0) {
+                log_device_debug(dev, "Device busy: device is renaming");
+                return false;
+        }
+
         /* Is it really tagged as 'systemd' right now? */
-        if (sd_device_has_current_tag(dev, "systemd") <= 0)
+        r = sd_device_has_current_tag(dev, "systemd");
+        if (r < 0)
+                log_device_warning_errno(dev, r, "Failed to check if device has \"systemd\" tag, assuming device is not tagged with \"systemd\": %m");
+        if (r == 0)
+                log_device_debug(dev, "Device busy: device is not tagged with \"systemd\"");
+        if (r <= 0)
                 return false;
 
-        if (sd_device_get_property_value(dev, "SYSTEMD_READY", &ready) < 0)
-                return true;
+        r = device_get_property_bool(dev, "SYSTEMD_READY");
+        if (r < 0 && r != -ENOENT)
+                log_device_warning_errno(dev, r, "Failed to get device SYSTEMD_READY property, assuming device does not have \"SYSTEMD_READY\" property: %m");
+        if (r == 0)
+                log_device_debug(dev, "Device busy: SYSTEMD_READY property from device is false");
 
-        return parse_boolean(ready) != 0;
+        return r != 0;
+}
+
+static int device_setup_devlink_unit_one(Manager *m, const char *devlink, Set **ready_units, Set **not_ready_units) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        Unit *u;
+
+        assert(m);
+        assert(devlink);
+        assert(ready_units);
+        assert(not_ready_units);
+
+        if (sd_device_new_from_devname(&dev, devlink) >= 0 && device_is_ready(dev))
+                return device_setup_unit(m, dev, devlink, /* main = */ false, ready_units);
+
+        /* the devlink is already removed or not ready */
+        if (device_by_path(m, devlink, &u) < 0)
+                return 0; /* The corresponding .device unit not found. That's fine. */
+
+        return set_ensure_put(not_ready_units, NULL, DEVICE(u));
+}
+
+static int device_setup_extra_units(Manager *m, sd_device *dev, Set **ready_units, Set **not_ready_units) {
+        _cleanup_strv_free_ char **aliases = NULL;
+        const char *devlink, *syspath, *devname = NULL;
+        Device *l;
+        int r;
+
+        assert(m);
+        assert(dev);
+        assert(ready_units);
+        assert(not_ready_units);
+
+        r = sd_device_get_syspath(dev, &syspath);
+        if (r < 0)
+                return r;
+
+        (void) sd_device_get_devname(dev, &devname);
+
+        /* devlink units */
+        FOREACH_DEVICE_DEVLINK(dev, devlink) {
+                /* These are a kind of special devlink. They should be always unique, but neither persistent
+                 * nor predictable. Hence, let's refuse them. See also the comments for alias units below. */
+                if (PATH_STARTSWITH_SET(devlink, "/dev/block/", "/dev/char/"))
+                        continue;
+
+                (void) device_setup_devlink_unit_one(m, devlink, ready_units, not_ready_units);
+        }
+
+        if (device_is_ready(dev)) {
+                const char *s;
+
+                r = sd_device_get_property_value(dev, "SYSTEMD_ALIAS", &s);
+                if (r < 0 && r != -ENOENT)
+                        log_device_warning_errno(dev, r, "Failed to get SYSTEMD_ALIAS property, ignoring: %m");
+                if (r >= 0) {
+                        r = strv_split_full(&aliases, s, NULL, EXTRACT_UNQUOTE);
+                        if (r < 0)
+                                log_device_warning_errno(dev, r, "Failed to parse SYSTEMD_ALIAS property, ignoring: %m");
+                }
+        }
+
+        /* alias units */
+        STRV_FOREACH(alias, aliases) {
+                if (!path_is_absolute(*alias)) {
+                        log_device_warning(dev, "The alias \"%s\" specified in SYSTEMD_ALIAS is not an absolute path, ignoring.", *alias);
+                        continue;
+                }
+
+                if (!path_is_safe(*alias)) {
+                        log_device_warning(dev, "The alias \"%s\" specified in SYSTEMD_ALIAS is not safe, ignoring.", *alias);
+                        continue;
+                }
+
+                /* Note, even if the devlink is not persistent, LVM expects /dev/block/ symlink units exist.
+                 * To achieve that, they set the path to SYSTEMD_ALIAS. Hence, we cannot refuse aliases start
+                 * with /dev/, unfortunately. */
+
+                (void) device_setup_unit(m, dev, *alias, /* main = */ false, ready_units);
+        }
+
+        l = hashmap_get(m->devices_by_sysfs, syspath);
+        LIST_FOREACH(same_sysfs, d, l) {
+                if (!d->path)
+                        continue;
+
+                if (path_equal(d->path, syspath))
+                        continue; /* This is the main unit. */
+
+                if (devname && path_equal(d->path, devname))
+                        continue; /* This is the real device node. */
+
+                if (device_has_devlink(dev, d->path))
+                        continue; /* The devlink was already processed in the above loop. */
+
+                if (strv_contains(aliases, d->path))
+                        continue; /* This is already processed in the above, and ready. */
+
+                if (path_startswith(d->path, "/dev/"))
+                        /* This is a devlink unit. Check existence and update syspath. */
+                        (void) device_setup_devlink_unit_one(m, d->path, ready_units, not_ready_units);
+                else
+                        /* This is an alias unit of dropped or not ready device. */
+                        (void) set_ensure_put(not_ready_units, NULL, d);
+        }
+
+        return 0;
+}
+
+static int device_setup_units(Manager *m, sd_device *dev, Set **ready_units, Set **not_ready_units) {
+        const char *syspath, *devname = NULL;
+        int r;
+
+        assert(m);
+        assert(dev);
+        assert(ready_units);
+        assert(not_ready_units);
+
+        r = sd_device_get_syspath(dev, &syspath);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Couldn't get syspath from device, ignoring: %m");
+
+        /* First, process the main (that is, points to the syspath) and (real, not symlink) devnode units. */
+        if (device_for_action(dev, SD_DEVICE_REMOVE))
+                /* If the device is removed, the main and devnode units will be removed by
+                 * device_update_found_by_sysfs() in device_dispatch_io(). Hence, it is not necessary to
+                 * store them to not_ready_units, and we have nothing to do here.
+                 *
+                 * Note, still we need to process devlink units below, as a devlink previously points to this
+                 * device may still exist and now point to another device node. That is, do not forget to
+                 * call device_setup_extra_units(). */
+                ;
+        else if (device_is_ready(dev)) {
+                /* Add the main unit named after the syspath. If this one fails, don't bother with the rest,
+                 * as this one shall be the main device unit the others just follow. (Compare with how
+                 * device_following() is implemented, see below, which looks for the sysfs device.) */
+                r = device_setup_unit(m, dev, syspath, /* main = */ true, ready_units);
+                if (r < 0)
+                        return r;
+
+                /* Add an additional unit for the device node */
+                if (sd_device_get_devname(dev, &devname) >= 0)
+                        (void) device_setup_unit(m, dev, devname, /* main = */ false, ready_units);
+
+        } else {
+                Unit *u;
+
+                /* If the device exists but not ready, then save the units and unset udev bits later. */
+
+                if (device_by_path(m, syspath, &u) >= 0) {
+                        r = set_ensure_put(not_ready_units, NULL, DEVICE(u));
+                        if (r < 0)
+                                log_unit_debug_errno(u, r, "Failed to store unit, ignoring: %m");
+                }
+
+                if (sd_device_get_devname(dev, &devname) >= 0 &&
+                    device_by_path(m, devname, &u) >= 0) {
+                        r = set_ensure_put(not_ready_units, NULL, DEVICE(u));
+                        if (r < 0)
+                                log_unit_debug_errno(u, r, "Failed to store unit, ignoring: %m");
+                }
+        }
+
+        /* Next, add/update additional .device units point to aliases and symlinks. */
+        (void) device_setup_extra_units(m, dev, ready_units, not_ready_units);
+
+        /* Safety check: no unit should be in ready_units and not_ready_units simultaneously. */
+        Unit *u;
+        SET_FOREACH(u, *not_ready_units)
+                if (set_remove(*ready_units, u))
+                        log_unit_error(u, "Cannot activate and deactivate the unit simultaneously. Deactivating.");
+
+        return 0;
 }
 
 static Unit *device_following(Unit *u) {
         Device *d = DEVICE(u);
-        Device *other, *first = NULL;
+        Device *first = NULL;
 
         assert(d);
 
@@ -771,11 +953,11 @@
                 return NULL;
 
         /* Make everybody follow the unit that's named after the sysfs path */
-        LIST_FOREACH_AFTER(same_sysfs, other, d)
+        LIST_FOREACH(same_sysfs, other, d->same_sysfs_next)
                 if (startswith(UNIT(other)->id, "sys-"))
                         return UNIT(other);
 
-        LIST_FOREACH_BEFORE(same_sysfs, other, d) {
+        LIST_FOREACH_BACKWARDS(same_sysfs, other, d->same_sysfs_prev) {
                 if (startswith(UNIT(other)->id, "sys-"))
                         return UNIT(other);
 
@@ -786,7 +968,7 @@
 }
 
 static int device_following_set(Unit *u, Set **_set) {
-        Device *d = DEVICE(u), *other;
+        Device *d = DEVICE(u);
         _cleanup_set_free_ Set *set = NULL;
         int r;
 
@@ -802,13 +984,13 @@
         if (!set)
                 return -ENOMEM;
 
-        LIST_FOREACH_AFTER(same_sysfs, other, d) {
+        LIST_FOREACH(same_sysfs, other, d->same_sysfs_next) {
                 r = set_put(set, other);
                 if (r < 0)
                         return r;
         }
 
-        LIST_FOREACH_BEFORE(same_sysfs, other, d) {
+        LIST_FOREACH_BACKWARDS(same_sysfs, other, d->same_sysfs_prev) {
                 r = set_put(set, other);
                 if (r < 0)
                         return r;
@@ -876,17 +1058,16 @@
         }
 
         FOREACH_DEVICE(e, dev) {
-                const char *sysfs;
+                _cleanup_set_free_ Set *ready_units = NULL, *not_ready_units = NULL;
+                Device *d;
 
-                if (!device_is_ready(dev))
+                if (device_setup_units(m, dev, &ready_units, &not_ready_units) < 0)
                         continue;
 
-                device_process_new(m, dev);
-
-                if (sd_device_get_syspath(dev, &sysfs) < 0)
-                        continue;
-
-                device_update_found_by_sysfs(m, sysfs, DEVICE_FOUND_UDEV, DEVICE_FOUND_UDEV);
+                SET_FOREACH(d, ready_units)
+                        device_update_found_one(d, DEVICE_FOUND_UDEV, DEVICE_FOUND_UDEV);
+                SET_FOREACH(d, not_ready_units)
+                        device_update_found_one(d, DEVICE_NOT_FOUND, DEVICE_FOUND_UDEV);
         }
 
         return;
@@ -895,29 +1076,28 @@
         device_shutdown(m);
 }
 
-static void device_propagate_reload_by_sysfs(Manager *m, const char *sysfs) {
-        Device *d, *l, *n;
+static void device_propagate_reload(Manager *m, Device *d) {
         int r;
 
         assert(m);
-        assert(sysfs);
+        assert(d);
 
-        l = hashmap_get(m->devices_by_sysfs, sysfs);
-        LIST_FOREACH_SAFE(same_sysfs, d, n, l) {
-                if (d->state == DEVICE_DEAD)
-                        continue;
+        if (d->state == DEVICE_DEAD)
+                return;
 
-                r = manager_propagate_reload(m, UNIT(d), JOB_REPLACE, NULL);
-                if (r < 0)
-                        log_warning_errno(r, "Failed to propagate reload, ignoring: %m");
-        }
+        r = manager_propagate_reload(m, UNIT(d), JOB_REPLACE, NULL);
+        if (r < 0)
+                log_unit_warning_errno(UNIT(d), r, "Failed to propagate reload, ignoring: %m");
 }
 
 static void device_remove_old_on_move(Manager *m, sd_device *dev) {
-        _cleanup_free_ char *syspath_old = NULL, *e = NULL;
+        _cleanup_free_ char *syspath_old = NULL;
         const char *devpath_old;
         int r;
 
+        assert(m);
+        assert(dev);
+
         r = sd_device_get_property_value(dev, "DEVPATH_OLD", &devpath_old);
         if (r < 0)
                 return (void) log_device_debug_errno(dev, r, "Failed to get DEVPATH_OLD= property on 'move' uevent, ignoring: %m");
@@ -926,130 +1106,107 @@
         if (!syspath_old)
                 return (void) log_oom();
 
-        r = unit_name_from_path(syspath_old, ".device", &e);
-        if (r < 0)
-                return (void) log_device_debug_errno(dev, r, "Failed to generate unit name from old device path, ignoring: %m");
-
-        device_update_found_by_sysfs(m, syspath_old, 0, DEVICE_FOUND_UDEV|DEVICE_FOUND_MOUNT|DEVICE_FOUND_SWAP);
+        device_update_found_by_sysfs(m, syspath_old, DEVICE_NOT_FOUND, DEVICE_FOUND_MASK);
 }
 
 static int device_dispatch_io(sd_device_monitor *monitor, sd_device *dev, void *userdata) {
+        _cleanup_set_free_ Set *ready_units = NULL, *not_ready_units = NULL;
+        Manager *m = ASSERT_PTR(userdata);
         sd_device_action_t action;
-        Manager *m = userdata;
         const char *sysfs;
+        bool ready;
+        Device *d;
         int r;
 
-        assert(m);
         assert(dev);
 
+        log_device_uevent(dev, "Processing udev action");
+
         r = sd_device_get_syspath(dev, &sysfs);
         if (r < 0) {
-                log_device_error_errno(dev, r, "Failed to get device sys path: %m");
+                log_device_warning_errno(dev, r, "Failed to get device syspath, ignoring: %m");
                 return 0;
         }
 
         r = sd_device_get_action(dev, &action);
         if (r < 0) {
-                log_device_error_errno(dev, r, "Failed to get udev action: %m");
+                log_device_warning_errno(dev, r, "Failed to get udev action, ignoring: %m");
                 return 0;
         }
 
-        if (!IN_SET(action, SD_DEVICE_ADD, SD_DEVICE_REMOVE, SD_DEVICE_MOVE))
-                device_propagate_reload_by_sysfs(m, sysfs);
-
         if (action == SD_DEVICE_MOVE)
                 device_remove_old_on_move(m, dev);
 
+        /* When udevd failed to process the device, SYSTEMD_ALIAS or any other properties may contain invalid
+         * values. Let's refuse to handle the uevent. */
+        if (sd_device_get_property_value(dev, "UDEV_WORKER_FAILED", NULL) >= 0) {
+                int v;
+
+                if (device_get_property_int(dev, "UDEV_WORKER_ERRNO", &v) >= 0)
+                        log_device_warning_errno(dev, v, "systemd-udevd failed to process the device, ignoring: %m");
+                else if (device_get_property_int(dev, "UDEV_WORKER_EXIT_STATUS", &v) >= 0)
+                        log_device_warning(dev, "systemd-udevd failed to process the device with exit status %i, ignoring.", v);
+                else if (device_get_property_int(dev, "UDEV_WORKER_SIGNAL", &v) >= 0) {
+                        const char *s;
+                        (void) sd_device_get_property_value(dev, "UDEV_WORKER_SIGNAL_NAME", &s);
+                        log_device_warning(dev, "systemd-udevd failed to process the device with signal %i(%s), ignoring.", v, strna(s));
+                } else
+                        log_device_warning(dev, "systemd-udevd failed to process the device with unknown result, ignoring.");
+
+                return 0;
+        }
+
         /* A change event can signal that a device is becoming ready, in particular if the device is using
          * the SYSTEMD_READY logic in udev so we need to reach the else block of the following if, even for
          * change events */
+        ready = device_is_ready(dev);
+
+        (void) device_setup_units(m, dev, &ready_units, &not_ready_units);
+
         if (action == SD_DEVICE_REMOVE) {
                 r = swap_process_device_remove(m, dev);
                 if (r < 0)
                         log_device_warning_errno(dev, r, "Failed to process swap device remove event, ignoring: %m");
-
-                /* If we get notified that a device was removed by udev, then it's completely gone, hence
-                 * unset all found bits */
-                device_update_found_by_sysfs(m, sysfs, 0, DEVICE_FOUND_UDEV|DEVICE_FOUND_MOUNT|DEVICE_FOUND_SWAP);
-
-        } else if (device_is_ready(dev)) {
-
-                device_process_new(m, dev);
-
+        } else if (ready) {
                 r = swap_process_device_new(m, dev);
                 if (r < 0)
                         log_device_warning_errno(dev, r, "Failed to process swap device new event, ignoring: %m");
+        }
 
+        if (!IN_SET(action, SD_DEVICE_ADD, SD_DEVICE_REMOVE, SD_DEVICE_MOVE))
+                SET_FOREACH(d, ready_units)
+                        device_propagate_reload(m, d);
+
+        if (!set_isempty(ready_units))
                 manager_dispatch_load_queue(m);
 
-                /* The device is found now, set the udev found bit */
-                device_update_found_by_sysfs(m, sysfs, DEVICE_FOUND_UDEV, DEVICE_FOUND_UDEV);
-        } else
-                /* The device is nominally around, but not ready for us. Hence unset the udev bit, but leave
-                 * the rest around. */
-                device_update_found_by_sysfs(m, sysfs, 0, DEVICE_FOUND_UDEV);
+        if (action == SD_DEVICE_REMOVE)
+                /* If we get notified that a device was removed by udev, then it's completely gone, hence
+                 * unset all found bits. Note this affects all .device units still point to the removed
+                 * device. */
+                device_update_found_by_sysfs(m, sysfs, DEVICE_NOT_FOUND, DEVICE_FOUND_MASK);
+
+        /* These devices are found and ready now, set the udev found bit. Note, this is also necessary to do
+         * on remove uevent, as some devlinks may be updated and now point to other device nodes. */
+        SET_FOREACH(d, ready_units)
+                device_update_found_one(d, DEVICE_FOUND_UDEV, DEVICE_FOUND_UDEV);
+
+        /* These devices may be nominally around, but not ready for us. Hence unset the udev bit, but leave
+         * the rest around. This may be redundant for remove uevent, but should be harmless. */
+        SET_FOREACH(d, not_ready_units)
+                device_update_found_one(d, DEVICE_NOT_FOUND, DEVICE_FOUND_UDEV);
 
         return 0;
 }
 
-static bool device_supported(void) {
-        static int read_only = -1;
-
-        /* If /sys is read-only we don't support device units, and any
-         * attempts to start one should fail immediately. */
-
-        if (read_only < 0)
-                read_only = path_is_read_only_fs("/sys");
-
-        return read_only <= 0;
-}
-
-static int validate_node(Manager *m, const char *node, sd_device **ret) {
-        struct stat st;
+void device_found_node(Manager *m, const char *node, DeviceFound found, DeviceFound mask) {
         int r;
 
         assert(m);
         assert(node);
-        assert(ret);
+        assert(!FLAGS_SET(mask, DEVICE_FOUND_UDEV));
 
-        /* Validates a device node that showed up in /proc/swaps or /proc/self/mountinfo if it makes sense for us to
-         * track. Note that this validator is fine within missing device nodes, but not with badly set up ones! */
-
-        if (!path_startswith(node, "/dev")) {
-                *ret = NULL;
-                return 0; /* bad! */
-        }
-
-        if (stat(node, &st) < 0) {
-                if (errno != ENOENT)
-                        return log_error_errno(errno, "Failed to stat() device node file %s: %m", node);
-
-                *ret = NULL;
-                return 1; /* good! (though missing) */
-
-        } else {
-                _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
-
-                r = sd_device_new_from_stat_rdev(&dev, &st);
-                if (r == -ENOENT) {
-                        *ret = NULL;
-                        return 1; /* good! (though missing) */
-                } else if (r == -ENOTTY) {
-                        *ret = NULL;
-                        return 0; /* bad! (not a device node but some other kind of file system node) */
-                } else if (r < 0)
-                        return log_error_errno(r, "Failed to get udev device from devnum %u:%u: %m", major(st.st_rdev), minor(st.st_rdev));
-
-                *ret = TAKE_PTR(dev);
-                return 1; /* good! */
-        }
-}
-
-void device_found_node(Manager *m, const char *node, DeviceFound found, DeviceFound mask) {
-        assert(m);
-        assert(node);
-
-        if (!device_supported())
+        if (!udev_available())
                 return;
 
         if (mask == 0)
@@ -1068,12 +1225,20 @@
 
                 /* If the device is known in the kernel and newly appeared, then we'll create a device unit for it,
                  * under the name referenced in /proc/swaps or /proc/self/mountinfo. But first, let's validate if
-                 * everything is alright with the device node. */
+                 * everything is alright with the device node. Note that we're fine with missing device nodes,
+                 * but not with badly set up ones. */
 
-                if (validate_node(m, node, &dev) <= 0)
-                        return; /* Don't create a device unit for this if the device node is borked. */
+                r = sd_device_new_from_devname(&dev, node);
+                if (r == -ENODEV)
+                        log_debug("Could not find device for %s, continuing without device node", node);
+                else if (r < 0) {
+                        /* Reduce log noise from nodes which are not device nodes by skipping EINVAL. */
+                        if (r != -EINVAL)
+                                log_error_errno(r, "Failed to open %s device, ignoring: %m", node);
+                        return;
+                }
 
-                (void) device_setup_unit(m, dev, node, false);
+                (void) device_setup_unit(m, dev, node, /* main = */ false, NULL); /* 'dev' may be NULL. */
         }
 
         /* Update the device unit's state, should it exist */
@@ -1119,7 +1284,7 @@
 
         .enumerate = device_enumerate,
         .shutdown = device_shutdown,
-        .supported = device_supported,
+        .supported = udev_available,
 
         .status_message_formats = {
                 .starting_stopping = {
diff --git a/src/core/device.h b/src/core/device.h
index dfe8a13..9dd6fb5 100644
--- a/src/core/device.h
+++ b/src/core/device.h
@@ -20,7 +20,8 @@
 struct Device {
         Unit meta;
 
-        char *sysfs;
+        char *sysfs, *deserialized_sysfs;
+        char *path; /* syspath, device node, alias, or devlink */
 
         /* In order to be able to distinguish dependencies on different device nodes we might end up creating multiple
          * devices for the same sysfs path. We chain them up here. */
diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c
index 7da87fd..c756c1c 100644
--- a/src/core/dynamic-user.c
+++ b/src/core/dynamic-user.c
@@ -19,7 +19,7 @@
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
-#include "user-record.h"
+#include "uid-alloc-range.h"
 #include "user-util.h"
 
 /* Takes a value generated randomly or by hashing and turns it into a UID in the right range */
@@ -74,7 +74,7 @@
 }
 
 static int dynamic_user_acquire(Manager *m, const char *name, DynamicUser** ret) {
-        _cleanup_close_pair_ int storage_socket[2] = { -1, -1 };
+        _cleanup_close_pair_ int storage_socket[2] = PIPE_EBADF;
         DynamicUser *d;
         int r;
 
@@ -127,7 +127,7 @@
         if (r < 0)
                 return r;
 
-        storage_socket[0] = storage_socket[1] = -1;
+        storage_socket[0] = storage_socket[1] = -EBADF;
 
         if (ret) {
                 d->n_ref++;
@@ -211,7 +211,7 @@
 
         for (;;) {
                 char lock_path[STRLEN("/run/systemd/dynamic-uid/") + DECIMAL_STR_MAX(uid_t) + 1];
-                _cleanup_close_ int lock_fd = -1;
+                _cleanup_close_ int lock_fd = -EBADF;
                 uid_t candidate;
                 ssize_t l;
 
@@ -253,7 +253,7 @@
                         break;
 
                 default:
-                        assert_not_reached("unknown phase");
+                        assert_not_reached();
                 }
 
                 /* Make sure whatever we picked here actually is in the right range */
@@ -328,8 +328,8 @@
         assert(ret_uid);
         assert(ret_lock_fd);
 
-        /* Read the UID and lock fd that is stored in the storage AF_UNIX socket. This should be called with the lock
-         * on the socket taken. */
+        /* Read the UID and lock fd that is stored in the storage AF_UNIX socket. This should be called with
+         * the lock on the socket taken. */
 
         k = receive_one_fd_iov(d->storage_socket[0], &iov, 1, MSG_DONTWAIT, &lock_fd);
         if (k < 0)
@@ -373,7 +373,7 @@
         if (*fd_lock < 0)
                 return;
         lockf(*fd_lock, F_ULOCK, 0);
-        *fd_lock = -1;
+        *fd_lock = -EBADF;
 }
 
 static int dynamic_user_realize(
@@ -382,9 +382,9 @@
                 uid_t *ret_uid, gid_t *ret_gid,
                 bool is_user) {
 
-        _cleanup_(unlockfp) int storage_socket0_lock = -1;
-        _cleanup_close_ int uid_lock_fd = -1;
-        _cleanup_close_ int etc_passwd_lock_fd = -1;
+        _cleanup_(unlockfp) int storage_socket0_lock = -EBADF;
+        _cleanup_close_ int uid_lock_fd = -EBADF;
+        _cleanup_close_ int etc_passwd_lock_fd = -EBADF;
         uid_t num = UID_INVALID; /* a uid if is_user, and a gid otherwise */
         gid_t gid = GID_INVALID; /* a gid if is_user, ignored otherwise */
         bool flush_cache = false;
@@ -524,14 +524,15 @@
 }
 
 int dynamic_user_current(DynamicUser *d, uid_t *ret) {
-        _cleanup_(unlockfp) int storage_socket0_lock = -1;
-        _cleanup_close_ int lock_fd = -1;
+        _cleanup_(unlockfp) int storage_socket0_lock = -EBADF;
+        _cleanup_close_ int lock_fd = -EBADF;
         uid_t uid;
         int r;
 
         assert(d);
 
-        /* Get the currently assigned UID for the user, if there's any. This simply pops the data from the storage socket, and pushes it back in right-away. */
+        /* Get the currently assigned UID for the user, if there's any. This simply pops the data from the
+         * storage socket, and pushes it back in right-away. */
 
         r = lockfp(d->storage_socket[0], &storage_socket0_lock);
         if (r < 0)
@@ -555,9 +556,9 @@
         if (!d)
                 return NULL;
 
-        /* Note that this doesn't actually release any resources itself. If a dynamic user should be fully destroyed
-         * and its UID released, use dynamic_user_destroy() instead. NB: the dynamic user table may contain entries
-         * with no references, which is commonly the case right before a daemon reload. */
+        /* Note that this doesn't actually release any resources itself. If a dynamic user should be fully
+         * destroyed and its UID released, use dynamic_user_destroy() instead. NB: the dynamic user table may
+         * contain entries with no references, which is commonly the case right before a daemon reload. */
 
         assert(d->n_ref > 0);
         d->n_ref--;
@@ -566,13 +567,13 @@
 }
 
 static int dynamic_user_close(DynamicUser *d) {
-        _cleanup_(unlockfp) int storage_socket0_lock = -1;
-        _cleanup_close_ int lock_fd = -1;
+        _cleanup_(unlockfp) int storage_socket0_lock = -EBADF;
+        _cleanup_close_ int lock_fd = -EBADF;
         uid_t uid;
         int r;
 
-        /* Release the user ID, by releasing the lock on it, and emptying the storage socket. After this the user is
-         * unrealized again, much like it was after it the DynamicUser object was first allocated. */
+        /* Release the user ID, by releasing the lock on it, and emptying the storage socket. After this the
+         * user is unrealized again, much like it was after it the DynamicUser object was first allocated. */
 
         r = lockfp(d->storage_socket[0], &storage_socket0_lock);
         if (r < 0)
diff --git a/src/core/efi-random.c b/src/core/efi-random.c
index a0b89d1..dffde57 100644
--- a/src/core/efi-random.c
+++ b/src/core/efi-random.c
@@ -12,80 +12,23 @@
 #include "random-util.h"
 #include "strv.h"
 
-/* If a random seed was passed by the boot loader in the LoaderRandomSeed EFI variable, let's credit it to
- * the kernel's random pool, but only once per boot. If this is run very early during initialization we can
- * instantly boot up with a filled random pool.
- *
- * This makes no judgement on the entropy passed, it's the job of the boot loader to only pass us a seed that
- * is suitably validated. */
-
-static void lock_down_efi_variables(void) {
-        const char *p;
+void lock_down_efi_variables(void) {
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
+        fd = open(EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderSystemToken)), O_RDONLY|O_CLOEXEC);
+        if (fd < 0) {
+                if (errno != ENOENT)
+                        log_warning_errno(errno, "Unable to open LoaderSystemToken EFI variable, ignoring: %m");
+                return;
+        }
+
         /* Paranoia: let's restrict access modes of these a bit, so that unprivileged users can't use them to
          * identify the system or gain too much insight into what we might have credited to the entropy
          * pool. */
-        FOREACH_STRING(p,
-                       EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderRandomSeed)),
-                       EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderSystemToken))) {
-
-                r = chattr_path(p, 0, FS_IMMUTABLE_FL, NULL);
-                if (r == -ENOENT)
-                        continue;
-                if (r < 0)
-                        log_warning_errno(r, "Failed to drop FS_IMMUTABLE_FL from %s, ignoring: %m", p);
-
-                if (chmod(p, 0600) < 0)
-                        log_warning_errno(errno, "Failed to reduce access mode of %s, ignoring: %m", p);
-        }
-}
-
-int efi_take_random_seed(void) {
-        _cleanup_free_ void *value = NULL;
-        size_t size;
-        int r;
-
-        /* Paranoia comes first. */
-        lock_down_efi_variables();
-
-        if (access("/run/systemd/efi-random-seed-taken", F_OK) < 0) {
-                if (errno != ENOENT) {
-                        log_warning_errno(errno, "Failed to determine whether we already used the random seed token, not using it.");
-                        return 0;
-                }
-
-                /* ENOENT means we haven't used it yet. */
-        } else {
-                log_debug("EFI random seed already used, not using again.");
-                return 0;
-        }
-
-        r = efi_get_variable(EFI_LOADER_VARIABLE(LoaderRandomSeed), NULL, &value, &size);
-        if (r == -EOPNOTSUPP) {
-                log_debug_errno(r, "System lacks EFI support, not initializing random seed from EFI variable.");
-                return 0;
-        }
-        if (r == -ENOENT) {
-                log_debug_errno(r, "Boot loader did not pass LoaderRandomSeed EFI variable, not crediting any entropy.");
-                return 0;
-        }
+        r = chattr_fd(fd, 0, FS_IMMUTABLE_FL, NULL);
         if (r < 0)
-                return log_warning_errno(r, "Failed to read LoaderRandomSeed EFI variable, ignoring: %m");
-
-        if (size == 0)
-                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Random seed passed from boot loader has zero size? Ignoring.");
-
-        /* Before we use the seed, let's mark it as used, so that we never credit it twice. Also, it's a nice
-         * way to let users known that we successfully acquired entropy from the boot laoder. */
-        r = touch("/run/systemd/efi-random-seed-taken");
-        if (r < 0)
-                return log_warning_errno(r, "Unable to mark EFI random seed as used, not using it: %m");
-
-        r = random_write_entropy(-1, value, size, true);
-        if (r < 0)
-                return log_warning_errno(errno, "Failed to credit entropy, ignoring: %m");
-
-        log_info("Successfully credited entropy passed from boot loader.");
-        return 1;
+                log_warning_errno(r, "Failed to drop FS_IMMUTABLE_FL from LoaderSystemToken EFI variable, ignoring: %m");
+        if (fchmod(fd, 0600) < 0)
+                log_warning_errno(errno, "Failed to reduce access mode of LoaderSystemToken EFI variable, ignoring: %m");
 }
diff --git a/src/core/efi-random.h b/src/core/efi-random.h
index 7d20fff..87166c9 100644
--- a/src/core/efi-random.h
+++ b/src/core/efi-random.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int efi_take_random_seed(void);
+void lock_down_efi_variables(void);
diff --git a/src/core/emergency-action.c b/src/core/emergency-action.c
index 9e8c79e..0234772 100644
--- a/src/core/emergency-action.c
+++ b/src/core/emergency-action.c
@@ -146,7 +146,7 @@
                 break;
 
         default:
-                assert_not_reached("Unknown emergency action");
+                assert_not_reached();
         }
 }
 
diff --git a/src/core/execute.c b/src/core/execute.c
index 37f63a9..5157549 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -39,15 +39,19 @@
 #if HAVE_APPARMOR
 #include "apparmor-util.h"
 #endif
+#include "argv-util.h"
 #include "async.h"
 #include "barrier.h"
+#include "bpf-lsm.h"
 #include "cap-list.h"
 #include "capability-util.h"
 #include "cgroup-setup.h"
+#include "chase-symlinks.h"
 #include "chown-recursive.h"
+#include "constants.h"
 #include "cpu-set-util.h"
+#include "creds-util.h"
 #include "data-fd-util.h"
-#include "def.h"
 #include "env-file.h"
 #include "env-util.h"
 #include "errno-list.h"
@@ -57,11 +61,10 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
-#include "fs-util.h"
 #include "glob-util.h"
 #include "hexdecoct.h"
 #include "io-util.h"
-#include "ioprio.h"
+#include "ioprio-util.h"
 #include "label.h"
 #include "log.h"
 #include "macro.h"
@@ -69,7 +72,8 @@
 #include "manager-dump.h"
 #include "memory-util.h"
 #include "missing_fs.h"
-#include "mkdir.h"
+#include "missing_ioprio.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
 #include "namespace.h"
@@ -77,6 +81,7 @@
 #include "path-util.h"
 #include "process-util.h"
 #include "random-util.h"
+#include "recurse-dir.h"
 #include "rlimit-util.h"
 #include "rm-rf.h"
 #if HAVE_SECCOMP
@@ -87,6 +92,7 @@
 #include "signal-util.h"
 #include "smack-util.h"
 #include "socket-util.h"
+#include "sort-util.h"
 #include "special.h"
 #include "stat-util.h"
 #include "string-table.h"
@@ -145,11 +151,14 @@
         return 0;
 }
 
-static int flags_fds(const int fds[], size_t n_socket_fds, size_t n_storage_fds, bool nonblock) {
-        size_t n_fds;
+static int flags_fds(
+                const int fds[],
+                size_t n_socket_fds,
+                size_t n_fds,
+                bool nonblock) {
+
         int r;
 
-        n_fds = n_socket_fds + n_storage_fds;
         if (n_fds <= 0)
                 return 0;
 
@@ -211,6 +220,9 @@
                         (void) reset_terminal(path);
         }
 
+        if (p && p->stdin_fd >= 0)
+                (void) terminal_set_size_fd(p->stdin_fd, path, context->tty_rows, context->tty_cols);
+
         if (context->tty_vt_disallocate && path)
                 (void) vt_disallocate(path);
 }
@@ -270,8 +282,6 @@
                 uid_t uid,
                 gid_t gid) {
 
-        union sockaddr_union sa;
-        socklen_t sa_len;
         uid_t olduid = UID_INVALID;
         gid_t oldgid = GID_INVALID;
         const char *j;
@@ -280,10 +290,6 @@
         j = log_namespace ?
                 strjoina("/run/systemd/journal.", log_namespace, "/stdout") :
                 "/run/systemd/journal/stdout";
-        r = sockaddr_un_set_path(&sa.un, j);
-        if (r < 0)
-                return r;
-        sa_len = r;
 
         if (gid_is_valid(gid)) {
                 oldgid = getgid();
@@ -301,10 +307,10 @@
                 }
         }
 
-        r = connect(fd, &sa.sa, sa_len) < 0 ? -errno : 0;
+        r = connect_unix_path(fd, AT_FDCWD, j);
 
-        /* If we fail to restore the uid or gid, things will likely
-           fail later on. This should only happen if an LSM interferes. */
+        /* If we fail to restore the uid or gid, things will likely fail later on. This should only happen if
+           an LSM interferes. */
 
         if (uid_is_valid(uid))
                 (void) seteuid(olduid);
@@ -326,7 +332,7 @@
                 uid_t uid,
                 gid_t gid) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(context);
@@ -382,9 +388,7 @@
 }
 
 static int acquire_path(const char *path, int flags, mode_t mode) {
-        union sockaddr_union sa;
-        socklen_t sa_len;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(path);
@@ -401,18 +405,17 @@
 
         /* So, it appears the specified path could be an AF_UNIX socket. Let's see if we can connect to it. */
 
-        r = sockaddr_un_set_path(&sa.un, path);
-        if (r < 0)
-                return r == -EINVAL ? -ENXIO : r;
-        sa_len = r;
-
         fd = socket(AF_UNIX, SOCK_STREAM, 0);
         if (fd < 0)
                 return -errno;
 
-        if (connect(fd, &sa.sa, sa_len) < 0)
-                return errno == EINVAL ? -ENXIO : -errno; /* Propagate initial error if we get EINVAL, i.e. we have
-                                                           * indication that this wasn't an AF_UNIX socket after all */
+        r = connect_unix_path(fd, AT_FDCWD, path);
+        if (IN_SET(r, -ENOTSOCK, -EINVAL))
+                /* Propagate initial error if we get ENOTSOCK or EINVAL, i.e. we have indication that this
+                 * wasn't an AF_UNIX socket after all */
+                return -ENXIO;
+        if (r < 0)
+                return r;
 
         if ((flags & O_ACCMODE) == O_RDONLY)
                 r = shutdown(fd, SHUT_WR);
@@ -464,6 +467,7 @@
                 const int named_iofds[static 3]) {
 
         ExecInput i;
+        int r;
 
         assert(context);
         assert(params);
@@ -477,6 +481,7 @@
                 if (isatty(STDIN_FILENO)) {
                         (void) ioctl(STDIN_FILENO, TIOCSCTTY, context->std_input == EXEC_INPUT_TTY_FORCE);
                         (void) reset_terminal_fd(STDIN_FILENO, true);
+                        (void) terminal_set_size_fd(STDIN_FILENO, NULL, context->tty_rows, context->tty_cols);
                 }
 
                 return STDIN_FILENO;
@@ -502,19 +507,23 @@
                 if (fd < 0)
                         return fd;
 
+                r = terminal_set_size_fd(fd, exec_context_tty_path(context), context->tty_rows, context->tty_cols);
+                if (r < 0)
+                        return r;
+
                 return move_fd(fd, STDIN_FILENO, false);
         }
 
         case EXEC_INPUT_SOCKET:
                 assert(socket_fd >= 0);
 
-                return dup2(socket_fd, STDIN_FILENO) < 0 ? -errno : STDIN_FILENO;
+                return RET_NERRNO(dup2(socket_fd, STDIN_FILENO));
 
         case EXEC_INPUT_NAMED_FD:
                 assert(named_iofds[STDIN_FILENO] >= 0);
 
                 (void) fd_nonblock(named_iofds[STDIN_FILENO], false);
-                return dup2(named_iofds[STDIN_FILENO], STDIN_FILENO) < 0 ? -errno : STDIN_FILENO;
+                return RET_NERRNO(dup2(named_iofds[STDIN_FILENO], STDIN_FILENO));
 
         case EXEC_INPUT_DATA: {
                 int fd;
@@ -543,7 +552,7 @@
         }
 
         default:
-                assert_not_reached("Unknown input type");
+                assert_not_reached();
         }
 }
 
@@ -630,7 +639,7 @@
 
                 /* Duplicate from stdout if possible */
                 if (can_inherit_stderr_from_stdout(context, o, e))
-                        return dup2(STDOUT_FILENO, fileno) < 0 ? -errno : fileno;
+                        return RET_NERRNO(dup2(STDOUT_FILENO, fileno));
 
                 o = e;
 
@@ -641,7 +650,7 @@
 
                 /* If the input is connected to anything that's not a /dev/null or a data fd, inherit that... */
                 if (!IN_SET(i, EXEC_INPUT_NULL, EXEC_INPUT_DATA))
-                        return dup2(STDIN_FILENO, fileno) < 0 ? -errno : fileno;
+                        return RET_NERRNO(dup2(STDIN_FILENO, fileno));
 
                 /* If we are not started from PID 1 we just inherit STDOUT from our parent process. */
                 if (getppid() != 1)
@@ -658,7 +667,7 @@
 
         case EXEC_OUTPUT_TTY:
                 if (is_terminal_input(i))
-                        return dup2(STDIN_FILENO, fileno) < 0 ? -errno : fileno;
+                        return RET_NERRNO(dup2(STDIN_FILENO, fileno));
 
                 /* We don't reset the terminal if this is just about output */
                 return open_terminal_as(exec_context_tty_path(context), O_WRONLY, fileno);
@@ -693,13 +702,13 @@
         case EXEC_OUTPUT_SOCKET:
                 assert(socket_fd >= 0);
 
-                return dup2(socket_fd, fileno) < 0 ? -errno : fileno;
+                return RET_NERRNO(dup2(socket_fd, fileno));
 
         case EXEC_OUTPUT_NAMED_FD:
                 assert(named_iofds[fileno] >= 0);
 
                 (void) fd_nonblock(named_iofds[fileno], false);
-                return dup2(named_iofds[fileno], fileno) < 0 ? -errno : fileno;
+                return RET_NERRNO(dup2(named_iofds[fileno], fileno));
 
         case EXEC_OUTPUT_FILE:
         case EXEC_OUTPUT_FILE_APPEND:
@@ -713,7 +722,7 @@
                         streq_ptr(context->stdio_file[fileno], context->stdio_file[STDIN_FILENO]);
 
                 if (rw)
-                        return dup2(STDIN_FILENO, fileno) < 0 ? -errno : fileno;
+                        return RET_NERRNO(dup2(STDIN_FILENO, fileno));
 
                 flags = O_WRONLY;
                 if (o == EXEC_OUTPUT_FILE_APPEND)
@@ -729,7 +738,7 @@
         }
 
         default:
-                assert_not_reached("Unknown error type");
+                assert_not_reached();
         }
 }
 
@@ -754,12 +763,17 @@
         return 1;
 }
 
-static int setup_confirm_stdio(const char *vc, int *_saved_stdin, int *_saved_stdout) {
-        _cleanup_close_ int fd = -1, saved_stdin = -1, saved_stdout = -1;
+static int setup_confirm_stdio(
+                const ExecContext *context,
+                const char *vc,
+                int *ret_saved_stdin,
+                int *ret_saved_stdout) {
+
+        _cleanup_close_ int fd = -EBADF, saved_stdin = -EBADF, saved_stdout = -EBADF;
         int r;
 
-        assert(_saved_stdin);
-        assert(_saved_stdout);
+        assert(ret_saved_stdin);
+        assert(ret_saved_stdout);
 
         saved_stdin = fcntl(STDIN_FILENO, F_DUPFD, 3);
         if (saved_stdin < 0)
@@ -781,16 +795,17 @@
         if (r < 0)
                 return r;
 
-        r = rearrange_stdio(fd, fd, STDERR_FILENO);
-        fd = -1;
+        r = terminal_set_size_fd(fd, vc, context->tty_rows, context->tty_cols);
         if (r < 0)
                 return r;
 
-        *_saved_stdin = saved_stdin;
-        *_saved_stdout = saved_stdout;
+        r = rearrange_stdio(fd, fd, STDERR_FILENO); /* Invalidates 'fd' also on failure */
+        TAKE_FD(fd);
+        if (r < 0)
+                return r;
 
-        saved_stdin = saved_stdout = -1;
-
+        *ret_saved_stdin = TAKE_FD(saved_stdin);
+        *ret_saved_stdout = TAKE_FD(saved_stdout);
         return 0;
 }
 
@@ -806,7 +821,7 @@
 }
 
 static void write_confirm_error(int err, const char *vc, const Unit *u) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(vc);
 
@@ -845,13 +860,13 @@
         CONFIRM_EXECUTE = 1,
 };
 
-static int ask_for_confirmation(const char *vc, Unit *u, const char *cmdline) {
+static int ask_for_confirmation(const ExecContext *context, const char *vc, Unit *u, const char *cmdline) {
         int saved_stdout = -1, saved_stdin = -1, r;
         _cleanup_free_ char *e = NULL;
         char c;
 
         /* For any internal errors, assume a positive response. */
-        r = setup_confirm_stdio(vc, &saved_stdin, &saved_stdout);
+        r = setup_confirm_stdio(context, vc, &saved_stdin, &saved_stdout);
         if (r < 0) {
                 write_confirm_error(r, vc, u);
                 return CONFIRM_EXECUTE;
@@ -908,7 +923,7 @@
                                u->id, u->description, cmdline);
                         continue; /* ask again */
                 case 'j':
-                        manager_dump_jobs(u->manager, stdout, "  ");
+                        manager_dump_jobs(u->manager, stdout, /* patterns= */ NULL, "  ");
                         continue; /* ask again */
                 case 'n':
                         /* 'n' was removed in favor of 'f'. */
@@ -922,7 +937,7 @@
                         r = CONFIRM_EXECUTE;
                         break;
                 default:
-                        assert_not_reached("Unhandled choice");
+                        assert_not_reached();
                 }
                 break;
         }
@@ -976,7 +991,6 @@
 static int get_supplementary_groups(const ExecContext *c, const char *user,
                                     const char *group, gid_t gid,
                                     gid_t **supplementary_gids, int *ngids) {
-        char **i;
         int r, k = 0;
         int ngroups_max;
         bool keep_groups = false;
@@ -1168,7 +1182,6 @@
         pam_handle_t *handle = NULL;
         sigset_t old_ss;
         int pam_code = PAM_SUCCESS, r;
-        char **nv;
         bool close_session = false;
         pid_t pam_pid = 0, parent_pid;
         int flags = 0;
@@ -1366,28 +1379,29 @@
 }
 
 static void rename_process_from_path(const char *path) {
-        char process_name[11];
+        _cleanup_free_ char *buf = NULL;
         const char *p;
-        size_t l;
 
-        /* This resulting string must fit in 10 chars (i.e. the length
-         * of "/sbin/init") to look pretty in /bin/ps */
+        assert(path);
 
-        p = basename(path);
-        if (isempty(p)) {
+        /* This resulting string must fit in 10 chars (i.e. the length of "/sbin/init") to look pretty in
+         * /bin/ps */
+
+        if (path_extract_filename(path, &buf) < 0) {
                 rename_process("(...)");
                 return;
         }
 
-        l = strlen(p);
+        size_t l = strlen(buf);
         if (l > 8) {
-                /* The end of the process name is usually more
-                 * interesting, since the first bit might just be
+                /* The end of the process name is usually more interesting, since the first bit might just be
                  * "systemd-" */
-                p = p + l - 8;
+                p = buf + l - 8;
                 l = 8;
-        }
+        } else
+                p = buf;
 
+        char process_name[11];
         process_name[0] = '(';
         memcpy(process_name+1, p, l);
         process_name[1+l] = ')';
@@ -1423,7 +1437,7 @@
         if (c->no_new_privileges)
                 return true;
 
-        if (have_effective_cap(CAP_SYS_ADMIN)) /* if we are privileged, we don't need NNP */
+        if (have_effective_cap(CAP_SYS_ADMIN) > 0) /* if we are privileged, we don't need NNP */
                 return false;
 
         /* We need NNP if we have any form of seccomp and are unprivileged */
@@ -1449,7 +1463,7 @@
         assert(context);
 
         return !hashmap_isempty(context->set_credentials) ||
-                context->load_credentials;
+                !hashmap_isempty(context->load_credentials);
 }
 
 #if HAVE_SECCOMP
@@ -1706,6 +1720,24 @@
 
 #endif
 
+#if HAVE_LIBBPF
+static int apply_restrict_filesystems(Unit *u, const ExecContext *c) {
+        assert(u);
+        assert(c);
+
+        if (!exec_context_restrict_filesystems_set(c))
+                return 0;
+
+        if (!u->manager->restrict_fs) {
+                /* LSM BPF is unsupported or lsm_bpf_setup failed */
+                log_unit_debug(u, "LSM BPF not supported, skipping RestrictFileSystems=");
+                return 0;
+        }
+
+        return lsm_bpf_unit_restrict_filesystems(u, c->restrict_filesystems, c->restrict_filesystems_allow_list);
+}
+#endif
+
 static int apply_protect_hostname(const Unit *u, const ExecContext *c, int *ret_exit_status) {
         assert(u);
         assert(c);
@@ -1776,6 +1808,7 @@
                 const ExecContext *c,
                 const ExecParameters *p,
                 size_t n_fds,
+                char **fdnames,
                 const char *home,
                 const char *username,
                 const char *shell,
@@ -1808,7 +1841,7 @@
                         return -ENOMEM;
                 our_env[n_env++] = x;
 
-                joined = strv_join(p->fd_names, ":");
+                joined = strv_join(fdnames, ":");
                 if (!joined)
                         return -ENOMEM;
 
@@ -1912,26 +1945,29 @@
         }
 
         for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++) {
-                _cleanup_free_ char *pre = NULL, *joined = NULL;
+                _cleanup_free_ char *joined = NULL;
                 const char *n;
 
                 if (!p->prefix[t])
                         continue;
 
-                if (strv_isempty(c->directories[t].paths))
+                if (c->directories[t].n_items == 0)
                         continue;
 
                 n = exec_directory_env_name_to_string(t);
                 if (!n)
                         continue;
 
-                pre = strjoin(p->prefix[t], "/");
-                if (!pre)
-                        return -ENOMEM;
+                for (size_t i = 0; i < c->directories[t].n_items; i++) {
+                        _cleanup_free_ char *prefixed = NULL;
 
-                joined = strv_join_full(c->directories[t].paths, ":", pre, true);
-                if (!joined)
-                        return -ENOMEM;
+                        prefixed = path_join(p->prefix[t], c->directories[t].items[i].path);
+                        if (!prefixed)
+                                return -ENOMEM;
+
+                        if (!strextend_with_separator(&joined, ":", prefixed))
+                                return -ENOMEM;
+                }
 
                 x = strjoin(n, "=", joined);
                 if (!x)
@@ -1965,7 +2001,6 @@
 static int build_pass_environment(const ExecContext *c, char ***ret) {
         _cleanup_strv_free_ char **pass_env = NULL;
         size_t n_env = 0;
-        char **i;
 
         STRV_FOREACH(i, c->pass_environment) {
                 _cleanup_free_ char *x = NULL;
@@ -2019,6 +2054,9 @@
         if (context->n_extension_images > 0)
                 return true;
 
+        if (!strv_isempty(context->extension_directories))
+                return true;
+
         if (!IN_SET(context->mount_flags, 0, MS_SHARED))
                 return true;
 
@@ -2047,15 +2085,15 @@
                         if (params && !params->prefix[t])
                                 continue;
 
-                        if (!strv_isempty(context->directories[t].paths))
+                        if (context->directories[t].n_items > 0)
                                 return true;
                 }
         }
 
         if (context->dynamic_user &&
-            (!strv_isempty(context->directories[EXEC_DIRECTORY_STATE].paths) ||
-             !strv_isempty(context->directories[EXEC_DIRECTORY_CACHE].paths) ||
-             !strv_isempty(context->directories[EXEC_DIRECTORY_LOGS].paths)))
+            (context->directories[EXEC_DIRECTORY_STATE].n_items > 0 ||
+             context->directories[EXEC_DIRECTORY_CACHE].n_items > 0 ||
+             context->directories[EXEC_DIRECTORY_LOGS].n_items > 0))
                 return true;
 
         if (context->log_namespace)
@@ -2066,8 +2104,8 @@
 
 static int setup_private_users(uid_t ouid, gid_t ogid, uid_t uid, gid_t gid) {
         _cleanup_free_ char *uid_map = NULL, *gid_map = NULL;
-        _cleanup_close_pair_ int errno_pipe[2] = { -1, -1 };
-        _cleanup_close_ int unshare_ready_fd = -1;
+        _cleanup_close_pair_ int errno_pipe[2] = PIPE_EBADF;
+        _cleanup_close_ int unshare_ready_fd = -EBADF;
         _cleanup_(sigkill_waitp) pid_t pid = 0;
         uint64_t c = 1;
         ssize_t n;
@@ -2084,7 +2122,7 @@
          * does not need CAP_SETUID to write the single line mapping to itself. */
 
         /* Can only set up multiple mappings with CAP_SETUID. */
-        if (have_effective_cap(CAP_SETUID) && uid != ouid && uid_is_valid(uid))
+        if (have_effective_cap(CAP_SETUID) > 0 && uid != ouid && uid_is_valid(uid))
                 r = asprintf(&uid_map,
                              UID_FMT " " UID_FMT " 1\n"     /* Map $OUID → $OUID */
                              UID_FMT " " UID_FMT " 1\n",    /* Map $UID → $UID */
@@ -2098,7 +2136,7 @@
                 return -ENOMEM;
 
         /* Can only set up multiple mappings with CAP_SETGID. */
-        if (have_effective_cap(CAP_SETGID) && gid != ogid && gid_is_valid(gid))
+        if (have_effective_cap(CAP_SETGID) > 0 && gid != ogid && gid_is_valid(gid))
                 r = asprintf(&gid_map,
                              GID_FMT " " GID_FMT " 1\n"     /* Map $OGID → $OGID */
                              GID_FMT " " GID_FMT " 1\n",    /* Map $GID → $GID */
@@ -2126,7 +2164,7 @@
         if (r < 0)
                 return r;
         if (r == 0) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 const char *a;
                 pid_t ppid;
 
@@ -2214,8 +2252,7 @@
         if (n != 0) /* on success we should have read 0 bytes */
                 return -EIO;
 
-        r = wait_for_terminate_and_check("(sd-userns)", pid, 0);
-        pid = 0;
+        r = wait_for_terminate_and_check("(sd-userns)", TAKE_PID(pid), 0);
         if (r < 0)
                 return r;
         if (r != EXIT_SUCCESS) /* If something strange happened with the child, let's consider this fatal, too */
@@ -2237,12 +2274,42 @@
         return true;
 }
 
+static int create_many_symlinks(const char *root, const char *source, char **symlinks) {
+        _cleanup_free_ char *src_abs = NULL;
+        int r;
+
+        assert(source);
+
+        src_abs = path_join(root, source);
+        if (!src_abs)
+                return -ENOMEM;
+
+        STRV_FOREACH(dst, symlinks) {
+                _cleanup_free_ char *dst_abs = NULL;
+
+                dst_abs = path_join(root, *dst);
+                if (!dst_abs)
+                        return -ENOMEM;
+
+                r = mkdir_parents_label(dst_abs, 0755);
+                if (r < 0)
+                        return r;
+
+                r = symlink_idempotent(src_abs, dst_abs, true);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 static int setup_exec_directory(
                 const ExecContext *context,
                 const ExecParameters *params,
                 uid_t uid,
                 gid_t gid,
                 ExecDirectoryType type,
+                bool needs_mount_namespace,
                 int *exit_status) {
 
         static const int exit_status_table[_EXEC_DIRECTORY_TYPE_MAX] = {
@@ -2252,7 +2319,6 @@
                 [EXEC_DIRECTORY_LOGS] = EXIT_LOGS_DIRECTORY,
                 [EXEC_DIRECTORY_CONFIGURATION] = EXIT_CONFIGURATION_DIRECTORY,
         };
-        char **rt;
         int r;
 
         assert(context);
@@ -2270,10 +2336,10 @@
                         gid = 0;
         }
 
-        STRV_FOREACH(rt, context->directories[type].paths) {
+        for (size_t i = 0; i < context->directories[type].n_items; i++) {
                 _cleanup_free_ char *p = NULL, *pp = NULL;
 
-                p = path_join(params->prefix[type], *rt);
+                p = path_join(params->prefix[type], context->directories[type].items[i].path);
                 if (!p) {
                         r = -ENOMEM;
                         goto fail;
@@ -2320,7 +2386,7 @@
                         if (r < 0)
                                 goto fail;
 
-                        if (!path_extend(&pp, *rt)) {
+                        if (!path_extend(&pp, context->directories[type].items[i].path)) {
                                 r = -ENOMEM;
                                 goto fail;
                         }
@@ -2353,10 +2419,24 @@
                                         goto fail;
                         }
 
-                        /* And link it up from the original place */
-                        r = symlink_idempotent(pp, p, true);
-                        if (r < 0)
-                                goto fail;
+                        if (!context->directories[type].items[i].only_create) {
+                                /* And link it up from the original place.
+                                 * Notes
+                                 * 1) If a mount namespace is going to be used, then this symlink remains on
+                                 *    the host, and a new one for the child namespace will be created later.
+                                 * 2) It is not necessary to create this symlink when one of its parent
+                                 *    directories is specified and already created. E.g.
+                                 *        StateDirectory=foo foo/bar
+                                 *    In that case, the inode points to pp and p for "foo/bar" are the same:
+                                 *        pp = "/var/lib/private/foo/bar"
+                                 *        p = "/var/lib/foo/bar"
+                                 *    and, /var/lib/foo is a symlink to /var/lib/private/foo. So, not only
+                                 *    we do not need to create the symlink, but we cannot create the symlink.
+                                 *    See issue #24783. */
+                                r = symlink_idempotent(pp, p, true);
+                                if (r < 0)
+                                        goto fail;
+                        }
 
                 } else {
                         _cleanup_free_ char *target = NULL;
@@ -2376,7 +2456,7 @@
                                 if (r < 0)
                                         goto fail;
 
-                                q = path_join(params->prefix[type], "private", *rt);
+                                q = path_join(params->prefix[type], "private", context->directories[type].items[i].path);
                                 if (!q) {
                                         r = -ENOMEM;
                                         goto fail;
@@ -2429,7 +2509,7 @@
                                         if (((st.st_mode ^ context->directories[type].mode) & 07777) != 0)
                                                 log_warning("%s \'%s\' already exists but the mode is different. "
                                                             "(File system: %o %sMode: %o)",
-                                                            exec_directory_type_to_string(type), *rt,
+                                                            exec_directory_type_to_string(type), context->directories[type].items[i].path,
                                                             st.st_mode & 07777, exec_directory_type_to_string(type), context->directories[type].mode & 07777);
 
                                         continue;
@@ -2452,6 +2532,17 @@
                         goto fail;
         }
 
+        /* If we are not going to run in a namespace, set up the symlinks - otherwise
+         * they are set up later, to allow configuring empty var/run/etc. */
+        if (!needs_mount_namespace)
+                for (size_t i = 0; i < context->directories[type].n_items; i++) {
+                        r = create_many_symlinks(params->prefix[type],
+                                                 context->directories[type].items[i].path,
+                                                 context->directories[type].items[i].symlinks);
+                        if (r < 0)
+                                goto fail;
+                }
+
         return 0;
 
 fail:
@@ -2468,7 +2559,7 @@
                 bool ownership_ok) {
 
         _cleanup_(unlink_and_freep) char *tmp = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         r = tempfn_random_child("", "cred", &tmp);
@@ -2481,7 +2572,7 @@
                 return -errno;
         }
 
-        r = loop_write(fd, data, size, /* do_pool = */ false);
+        r = loop_write(fd, data, size, /* do_poll = */ false);
         if (r < 0)
                 return r;
 
@@ -2514,7 +2605,248 @@
         return 0;
 }
 
-#define CREDENTIALS_BYTES_MAX (1024LU * 1024LU) /* Refuse to pass more than 1M, after all this is unswappable memory */
+static char **credential_search_path(
+                const ExecParameters *params,
+                bool encrypted) {
+
+        _cleanup_strv_free_ char **l = NULL;
+
+        assert(params);
+
+        /* Assemble a search path to find credentials in. We'll look in /etc/credstore/ (and similar
+         * directories in /usr/lib/ + /run/) for all types of credentials. If we are looking for encrypted
+         * credentials, also look in /etc/credstore.encrypted/ (and similar dirs). */
+
+        if (encrypted) {
+                if (strv_extend(&l, params->received_encrypted_credentials_directory) < 0)
+                        return NULL;
+
+                if (strv_extend_strv(&l, CONF_PATHS_STRV("credstore.encrypted"), /* filter_duplicates= */ true) < 0)
+                        return NULL;
+        }
+
+        if (params->received_credentials_directory)
+                if (strv_extend(&l, params->received_credentials_directory) < 0)
+                        return NULL;
+
+        if (strv_extend_strv(&l, CONF_PATHS_STRV("credstore"), /* filter_duplicates= */ true) < 0)
+                return NULL;
+
+        if (DEBUG_LOGGING) {
+                _cleanup_free_ char *t = strv_join(l, ":");
+
+                log_debug("Credential search path is: %s", t);
+        }
+
+        return TAKE_PTR(l);
+}
+
+static int load_credential(
+                const ExecContext *context,
+                const ExecParameters *params,
+                const char *id,
+                const char *path,
+                bool encrypted,
+                const char *unit,
+                int read_dfd,
+                int write_dfd,
+                uid_t uid,
+                bool ownership_ok,
+                uint64_t *left) {
+
+        ReadFullFileFlags flags = READ_FULL_FILE_SECURE|READ_FULL_FILE_FAIL_WHEN_LARGER;
+        _cleanup_strv_free_ char **search_path = NULL;
+        _cleanup_(erase_and_freep) char *data = NULL;
+        _cleanup_free_ char *bindname = NULL;
+        const char *source = NULL;
+        bool missing_ok = true;
+        size_t size, add, maxsz;
+        int r;
+
+        assert(context);
+        assert(params);
+        assert(id);
+        assert(path);
+        assert(unit);
+        assert(read_dfd >= 0 || read_dfd == AT_FDCWD);
+        assert(write_dfd >= 0);
+        assert(left);
+
+        if (read_dfd >= 0) {
+                /* If a directory fd is specified, then read the file directly from that dir. In this case we
+                 * won't do AF_UNIX stuff (we simply don't want to recursively iterate down a tree of AF_UNIX
+                 * IPC sockets). It's OK if a file vanishes here in the time we enumerate it and intend to
+                 * open it. */
+
+                if (!filename_is_valid(path)) /* safety check */
+                        return -EINVAL;
+
+                missing_ok = true;
+                source = path;
+
+        } else if (path_is_absolute(path)) {
+                /* If this is an absolute path, read the data directly from it, and support AF_UNIX
+                 * sockets */
+
+                if (!path_is_valid(path)) /* safety check */
+                        return -EINVAL;
+
+                flags |= READ_FULL_FILE_CONNECT_SOCKET;
+
+                /* Pass some minimal info about the unit and the credential name we are looking to acquire
+                 * via the source socket address in case we read off an AF_UNIX socket. */
+                if (asprintf(&bindname, "@%" PRIx64"/unit/%s/%s", random_u64(), unit, id) < 0)
+                        return -ENOMEM;
+
+                missing_ok = false;
+                source = path;
+
+        } else if (credential_name_valid(path)) {
+                /* If this is a relative path, take it as credential name relative to the credentials
+                 * directory we received ourselves. We don't support the AF_UNIX stuff in this mode, since we
+                 * are operating on a credential store, i.e. this is guaranteed to be regular files. */
+
+                search_path = credential_search_path(params, encrypted);
+                if (!search_path)
+                        return -ENOMEM;
+
+                missing_ok = true;
+        } else
+                source = NULL;
+
+        if (encrypted)
+                flags |= READ_FULL_FILE_UNBASE64;
+
+        maxsz = encrypted ? CREDENTIAL_ENCRYPTED_SIZE_MAX : CREDENTIAL_SIZE_MAX;
+
+        if (search_path) {
+                STRV_FOREACH(d, search_path) {
+                        _cleanup_free_ char *j = NULL;
+
+                        j = path_join(*d, path);
+                        if (!j)
+                                return -ENOMEM;
+
+                        r = read_full_file_full(
+                                        AT_FDCWD, j, /* path is absolute, hence pass AT_FDCWD as nop dir fd here */
+                                        UINT64_MAX,
+                                        maxsz,
+                                        flags,
+                                        NULL,
+                                        &data, &size);
+                        if (r != -ENOENT)
+                                break;
+                }
+        } else if (source)
+                r = read_full_file_full(
+                                read_dfd, source,
+                                UINT64_MAX,
+                                maxsz,
+                                flags,
+                                bindname,
+                                &data, &size);
+        else
+                r = -ENOENT;
+
+        if (r == -ENOENT && (missing_ok || hashmap_contains(context->set_credentials, id))) {
+                /* Make a missing inherited credential non-fatal, let's just continue. After all apps
+                 * will get clear errors if we don't pass such a missing credential on as they
+                 * themselves will get ENOENT when trying to read them, which should not be much
+                 * worse than when we handle the error here and make it fatal.
+                 *
+                 * Also, if the source file doesn't exist, but a fallback is set via SetCredentials=
+                 * we are fine, too. */
+                log_debug_errno(r, "Couldn't read inherited credential '%s', skipping: %m", path);
+                return 0;
+        }
+        if (r < 0)
+                return log_debug_errno(r, "Failed to read credential '%s': %m", path);
+
+        if (encrypted) {
+                _cleanup_free_ void *plaintext = NULL;
+                size_t plaintext_size = 0;
+
+                r = decrypt_credential_and_warn(id, now(CLOCK_REALTIME), NULL, NULL, data, size, &plaintext, &plaintext_size);
+                if (r < 0)
+                        return r;
+
+                free_and_replace(data, plaintext);
+                size = plaintext_size;
+        }
+
+        add = strlen(id) + size;
+        if (add > *left)
+                return -E2BIG;
+
+        r = write_credential(write_dfd, id, data, size, uid, ownership_ok);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to write credential '%s': %m", id);
+
+        *left -= add;
+        return 0;
+}
+
+struct load_cred_args {
+        const ExecContext *context;
+        const ExecParameters *params;
+        bool encrypted;
+        const char *unit;
+        int dfd;
+        uid_t uid;
+        bool ownership_ok;
+        uint64_t *left;
+};
+
+static int load_cred_recurse_dir_cb(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
+
+        struct load_cred_args *args = ASSERT_PTR(userdata);
+        _cleanup_free_ char *sub_id = NULL;
+        int r;
+
+        if (event != RECURSE_DIR_ENTRY)
+                return RECURSE_DIR_CONTINUE;
+
+        if (!IN_SET(de->d_type, DT_REG, DT_SOCK))
+                return RECURSE_DIR_CONTINUE;
+
+        sub_id = strreplace(path, "/", "_");
+        if (!sub_id)
+                return -ENOMEM;
+
+        if (!credential_name_valid(sub_id))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Credential would get ID %s, which is not valid, refusing", sub_id);
+
+        if (faccessat(args->dfd, sub_id, F_OK, AT_SYMLINK_NOFOLLOW) >= 0) {
+                log_debug("Skipping credential with duplicated ID %s at %s", sub_id, path);
+                return RECURSE_DIR_CONTINUE;
+        }
+        if (errno != ENOENT)
+                return log_debug_errno(errno, "Failed to test if credential %s exists: %m", sub_id);
+
+        r = load_credential(
+                        args->context,
+                        args->params,
+                        sub_id,
+                        de->d_name,
+                        args->encrypted,
+                        args->unit,
+                        dir_fd,
+                        args->dfd,
+                        args->uid,
+                        args->ownership_ok,
+                        args->left);
+        if (r < 0)
+                return r;
+
+        return RECURSE_DIR_CONTINUE;
+}
 
 static int acquire_credentials(
                 const ExecContext *context,
@@ -2524,10 +2856,10 @@
                 uid_t uid,
                 bool ownership_ok) {
 
-        uint64_t left = CREDENTIALS_BYTES_MAX;
-        _cleanup_close_ int dfd = -1;
+        uint64_t left = CREDENTIALS_TOTAL_SIZE_MAX;
+        _cleanup_close_ int dfd = -EBADF;
+        ExecLoadCredential *lc;
         ExecSetCredential *sc;
-        char **id, **fn;
         int r;
 
         assert(context);
@@ -2537,78 +2869,92 @@
         if (dfd < 0)
                 return -errno;
 
-        /* First we use the literally specified credentials. Note that they might be overridden again below,
-         * and thus act as a "default" if the same credential is specified multiple times */
-        HASHMAP_FOREACH(sc, context->set_credentials) {
-                size_t add;
+        /* First, load credentials off disk (or acquire via AF_UNIX socket) */
+        HASHMAP_FOREACH(lc, context->load_credentials) {
+                _cleanup_close_ int sub_fd = -EBADF;
 
-                add = strlen(sc->id) + sc->size;
-                if (add > left)
-                        return -E2BIG;
+                /* If this is an absolute path, then try to open it as a directory. If that works, then we'll
+                 * recurse into it. If it is an absolute path but it isn't a directory, then we'll open it as
+                 * a regular file. Finally, if it's a relative path we will use it as a credential name to
+                 * propagate a credential passed to us from further up. */
 
-                r = write_credential(dfd, sc->id, sc->data, sc->size, uid, ownership_ok);
+                if (path_is_absolute(lc->path)) {
+                        sub_fd = open(lc->path, O_DIRECTORY|O_CLOEXEC|O_RDONLY);
+                        if (sub_fd < 0 && !IN_SET(errno,
+                                                  ENOTDIR,  /* Not a directory */
+                                                  ENOENT))  /* Doesn't exist? */
+                                return log_debug_errno(errno, "Failed to open '%s': %m", lc->path);
+                }
+
+                if (sub_fd < 0)
+                        /* Regular file (incl. a credential passed in from higher up) */
+                        r = load_credential(
+                                        context,
+                                        params,
+                                        lc->id,
+                                        lc->path,
+                                        lc->encrypted,
+                                        unit,
+                                        AT_FDCWD,
+                                        dfd,
+                                        uid,
+                                        ownership_ok,
+                                        &left);
+                else
+                        /* Directory */
+                        r = recurse_dir(
+                                        sub_fd,
+                                        /* path= */ lc->id, /* recurse_dir() will suffix the subdir paths from here to the top-level id */
+                                        /* statx_mask= */ 0,
+                                        /* n_depth_max= */ UINT_MAX,
+                                        RECURSE_DIR_SORT|RECURSE_DIR_IGNORE_DOT|RECURSE_DIR_ENSURE_TYPE,
+                                        load_cred_recurse_dir_cb,
+                                        &(struct load_cred_args) {
+                                                .context = context,
+                                                .params = params,
+                                                .encrypted = lc->encrypted,
+                                                .unit = unit,
+                                                .dfd = dfd,
+                                                .uid = uid,
+                                                .ownership_ok = ownership_ok,
+                                                .left = &left,
+                                        });
                 if (r < 0)
                         return r;
-
-                left -= add;
         }
 
-        /* Then, load credential off disk (or acquire via AF_UNIX socket) */
-        STRV_FOREACH_PAIR(id, fn, context->load_credentials) {
-                ReadFullFileFlags flags = READ_FULL_FILE_SECURE;
-                _cleanup_(erase_and_freep) char *data = NULL;
-                _cleanup_free_ char *j = NULL, *bindname = NULL;
-                bool missing_ok = true;
-                const char *source;
+        /* Second, we add in literally specified credentials. If the credentials already exist, we'll not add
+         * them, so that they can act as a "default" if the same credential is specified multiple times. */
+        HASHMAP_FOREACH(sc, context->set_credentials) {
+                _cleanup_(erase_and_freep) void *plaintext = NULL;
+                const char *data;
                 size_t size, add;
 
-                if (path_is_absolute(*fn)) {
-                        /* If this is an absolute path, read the data directly from it, and support AF_UNIX sockets */
-                        source = *fn;
-                        flags |= READ_FULL_FILE_CONNECT_SOCKET;
-
-                        /* Pass some minimal info about the unit and the credential name we are looking to acquire
-                         * via the source socket address in case we read off an AF_UNIX socket. */
-                        if (asprintf(&bindname, "@%" PRIx64"/unit/%s/%s", random_u64(), unit, *id) < 0)
-                                return -ENOMEM;
-
-                        missing_ok = false;
-
-                } else if (params->received_credentials) {
-                        /* If this is a relative path, take it relative to the credentials we received
-                         * ourselves. We don't support the AF_UNIX stuff in this mode, since we are operating
-                         * on a credential store, i.e. this is guaranteed to be regular files. */
-                        j = path_join(params->received_credentials, *fn);
-                        if (!j)
-                                return -ENOMEM;
-
-                        source = j;
-                } else
-                        source = NULL;
-
-                if (source)
-                        r = read_full_file_full(AT_FDCWD, source, UINT64_MAX, SIZE_MAX, flags, bindname, &data, &size);
-                else
-                        r = -ENOENT;
-                if (r == -ENOENT && (missing_ok || faccessat(dfd, *id, F_OK, AT_SYMLINK_NOFOLLOW) >= 0)) {
-                        /* Make a missing inherited credential non-fatal, let's just continue. After all apps
-                         * will get clear errors if we don't pass such a missing credential on as they
-                         * themselves will get ENOENT when trying to read them, which should not be much
-                         * worse than when we handle the error here and make it fatal.
-                         *
-                         * Also, if the source file doesn't exist, but we already acquired the key otherwise,
-                         * then don't fail either. */
-                        log_debug_errno(r, "Couldn't read inherited credential '%s', skipping: %m", *fn);
+                /* Note that we check ahead of time here instead of relying on O_EXCL|O_CREAT later to return
+                 * EEXIST if the credential already exists. That's because the TPM2-based decryption is kinda
+                 * slow and involved, hence it's nice to be able to skip that if the credential already
+                 * exists anyway. */
+                if (faccessat(dfd, sc->id, F_OK, AT_SYMLINK_NOFOLLOW) >= 0)
                         continue;
-                }
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to read credential '%s': %m", *fn);
+                if (errno != ENOENT)
+                        return log_debug_errno(errno, "Failed to test if credential %s exists: %m", sc->id);
 
-                add = strlen(*id) + size;
+                if (sc->encrypted) {
+                        r = decrypt_credential_and_warn(sc->id, now(CLOCK_REALTIME), NULL, NULL, sc->data, sc->size, &plaintext, &size);
+                        if (r < 0)
+                                return r;
+
+                        data = plaintext;
+                } else {
+                        data = sc->data;
+                        size = sc->size;
+                }
+
+                add = strlen(sc->id) + size;
                 if (add > left)
                         return -E2BIG;
 
-                r = write_credential(dfd, *id, data, size, uid, ownership_ok);
+                r = write_credential(dfd, sc->id, data, size, uid, ownership_ok);
                 if (r < 0)
                         return r;
 
@@ -2678,7 +3024,7 @@
                 final_mounted = true;
 
                 if (workspace_mounted < 0) {
-                        /* If the final place is mounted, but the workspace we isn't, then let's bind mount
+                        /* If the final place is mounted, but the workspace isn't, then let's bind mount
                          * the final version to the workspace, and make it writable, so that we can make
                          * changes */
 
@@ -2710,7 +3056,7 @@
                         } else if (try == 1) {
                                 _cleanup_free_ char *opts = NULL;
 
-                                if (asprintf(&opts, "mode=0700,nr_inodes=1024,size=%lu", CREDENTIALS_BYTES_MAX) < 0)
+                                if (asprintf(&opts, "mode=0700,nr_inodes=1024,size=%zu", (size_t) CREDENTIALS_TOTAL_SIZE_MAX) < 0)
                                         return -ENOMEM;
 
                                 /* Fall back to "tmpfs" otherwise */
@@ -2753,6 +3099,8 @@
         assert(!must_mount || workspace_mounted > 0);
         where = workspace_mounted ? workspace : final;
 
+        (void) label_fix_full(AT_FDCWD, where, final, 0);
+
         r = acquire_credentials(context, params, unit, where, uid, workspace_mounted);
         if (r < 0)
                 return r;
@@ -2776,9 +3124,9 @@
                 /* If we do not have our own mount put used the plain directory fallback, then we need to
                  * open access to the top-level credential directory and the per-service directory now */
 
-                parent = dirname_malloc(final);
-                if (!parent)
-                        return -ENOMEM;
+                r = path_extract_directory(final, &parent);
+                if (r < 0)
+                        return r;
                 if (chmod(parent, 0755) < 0)
                         return -errno;
         }
@@ -2793,7 +3141,6 @@
                 uid_t uid) {
 
         _cleanup_free_ char *p = NULL, *q = NULL;
-        const char *i;
         int r;
 
         assert(context);
@@ -2911,6 +3258,7 @@
 
 #if ENABLE_SMACK
 static int setup_smack(
+                const Manager *manager,
                 const ExecContext *context,
                 int executable_fd) {
         int r;
@@ -2922,20 +3270,17 @@
                 r = mac_smack_apply_pid(0, context->smack_process_label);
                 if (r < 0)
                         return r;
-        }
-#ifdef SMACK_DEFAULT_PROCESS_LABEL
-        else {
+        } else if (manager->default_smack_process_label) {
                 _cleanup_free_ char *exec_label = NULL;
 
                 r = mac_smack_read_fd(executable_fd, SMACK_ATTR_EXEC, &exec_label);
-                if (r < 0 && !IN_SET(r, -ENODATA, -EOPNOTSUPP))
+                if (r < 0 && !ERRNO_IS_XATTR_ABSENT(r))
                         return r;
 
-                r = mac_smack_apply_pid(0, exec_label ? : SMACK_DEFAULT_PROCESS_LABEL);
+                r = mac_smack_apply_pid(0, exec_label ? : manager->default_smack_process_label);
                 if (r < 0)
                         return r;
         }
-#endif
 
         return 0;
 }
@@ -2964,7 +3309,8 @@
                 if (!params->prefix[t])
                         continue;
 
-                n += strv_length(context->directories[t].paths);
+                for (size_t i = 0; i < context->directories[t].n_items; i++)
+                        n += !context->directories[t].items[i].only_create;
         }
 
         if (n <= 0) {
@@ -3005,12 +3351,10 @@
         }
 
         for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++) {
-                char **suffix;
-
                 if (!params->prefix[t])
                         continue;
 
-                if (strv_isempty(context->directories[t].paths))
+                if (context->directories[t].n_items == 0)
                         continue;
 
                 if (exec_directory_is_private(context, t) &&
@@ -3032,13 +3376,18 @@
                                 goto finish;
                 }
 
-                STRV_FOREACH(suffix, context->directories[t].paths) {
+                for (size_t i = 0; i < context->directories[t].n_items; i++) {
                         char *s, *d;
 
+                        /* When one of the parent directories is in the list, we cannot create the symlink
+                         * for the child directory. See also the comments in setup_exec_directory(). */
+                        if (context->directories[t].items[i].only_create)
+                                continue;
+
                         if (exec_directory_is_private(context, t))
-                                s = path_join(params->prefix[t], "private", *suffix);
+                                s = path_join(params->prefix[t], "private", context->directories[t].items[i].path);
                         else
-                                s = path_join(params->prefix[t], *suffix);
+                                s = path_join(params->prefix[t], context->directories[t].items[i].path);
                         if (!s) {
                                 r = -ENOMEM;
                                 goto finish;
@@ -3049,7 +3398,7 @@
                                 /* When RootDirectory= or RootImage= are set, then the symbolic link to the private
                                  * directory is not created on the root directory. So, let's bind-mount the directory
                                  * on the 'non-private' place. */
-                                d = path_join(params->prefix[t], *suffix);
+                                d = path_join(params->prefix[t], context->directories[t].items[i].path);
                         else
                                 d = strdup(s);
                         if (!d) {
@@ -3082,6 +3431,62 @@
         return r;
 }
 
+/* ret_symlinks will contain a list of pairs src:dest that describes
+ * the symlinks to create later on. For example, the symlinks needed
+ * to safely give private directories to DynamicUser=1 users. */
+static int compile_symlinks(
+                const ExecContext *context,
+                const ExecParameters *params,
+                char ***ret_symlinks) {
+
+        _cleanup_strv_free_ char **symlinks = NULL;
+        int r;
+
+        assert(context);
+        assert(params);
+        assert(ret_symlinks);
+
+        for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++) {
+                for (size_t i = 0; i < context->directories[dt].n_items; i++) {
+                        _cleanup_free_ char *private_path = NULL, *path = NULL;
+
+                        STRV_FOREACH(symlink, context->directories[dt].items[i].symlinks) {
+                                _cleanup_free_ char *src_abs = NULL, *dst_abs = NULL;
+
+                                src_abs = path_join(params->prefix[dt], context->directories[dt].items[i].path);
+                                dst_abs = path_join(params->prefix[dt], *symlink);
+                                if (!src_abs || !dst_abs)
+                                        return -ENOMEM;
+
+                                r = strv_consume_pair(&symlinks, TAKE_PTR(src_abs), TAKE_PTR(dst_abs));
+                                if (r < 0)
+                                        return r;
+                        }
+
+                        if (!exec_directory_is_private(context, dt) ||
+                            exec_context_with_rootfs(context) ||
+                            context->directories[dt].items[i].only_create)
+                                continue;
+
+                        private_path = path_join(params->prefix[dt], "private", context->directories[dt].items[i].path);
+                        if (!private_path)
+                                return -ENOMEM;
+
+                        path = path_join(params->prefix[dt], context->directories[dt].items[i].path);
+                        if (!path)
+                                return -ENOMEM;
+
+                        r = strv_consume_pair(&symlinks, TAKE_PTR(private_path), TAKE_PTR(path));
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        *ret_symlinks = TAKE_PTR(symlinks);
+
+        return 0;
+}
+
 static bool insist_on_sandboxing(
                 const ExecContext *context,
                 const char *root_dir,
@@ -3108,6 +3513,9 @@
         if (context->dynamic_user)
                 return true;
 
+        if (context->n_extension_images > 0 || !strv_isempty(context->extension_directories))
+                return true;
+
         /* If there are any bind mounts set that don't map back onto themselves, fs namespacing becomes
          * essential. */
         for (size_t i = 0; i < n_bind_mounts; i++)
@@ -3128,10 +3536,11 @@
                 const ExecRuntime *runtime,
                 char **error_path) {
 
-        _cleanup_strv_free_ char **empty_directories = NULL;
+        _cleanup_strv_free_ char **empty_directories = NULL, **symlinks = NULL;
         const char *tmp_dir = NULL, *var_tmp_dir = NULL;
         const char *root_dir = NULL, *root_image = NULL;
-        _cleanup_free_ char *creds_path = NULL, *incoming_dir = NULL, *propagate_dir = NULL;
+        _cleanup_free_ char *creds_path = NULL, *incoming_dir = NULL, *propagate_dir = NULL,
+                        *extension_dir = NULL;
         NamespaceInfo ns_info;
         bool needs_sandboxing;
         BindMount *bind_mounts = NULL;
@@ -3151,6 +3560,11 @@
         if (r < 0)
                 return r;
 
+        /* Symlinks for exec dirs are set up after other mounts, before they are made read-only. */
+        r = compile_symlinks(context, params, &symlinks);
+        if (r < 0)
+                goto finalize;
+
         needs_sandboxing = (params->flags & EXEC_APPLY_SANDBOXING) && !(command_flags & EXEC_COMMAND_FULLY_PRIVILEGED);
         if (needs_sandboxing) {
                 /* The runtime struct only contains the parent of the private /tmp,
@@ -3225,7 +3639,17 @@
                         r = -ENOMEM;
                         goto finalize;
                 }
-        }
+
+                extension_dir = strdup("/run/systemd/unit-extensions");
+                if (!extension_dir) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+        } else
+                if (asprintf(&extension_dir, "/run/user/" UID_FMT "/systemd/unit-extensions", geteuid()) < 0) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
 
         r = setup_namespace(root_dir, root_image, context->root_image_options,
                             &ns_info, context->read_write_paths,
@@ -3234,6 +3658,7 @@
                             needs_sandboxing ? context->exec_paths : NULL,
                             needs_sandboxing ? context->no_exec_paths : NULL,
                             empty_directories,
+                            symlinks,
                             bind_mounts,
                             n_bind_mounts,
                             context->temporary_filesystems,
@@ -3250,8 +3675,10 @@
                             context->root_verity,
                             context->extension_images,
                             context->n_extension_images,
+                            context->extension_directories,
                             propagate_dir,
                             incoming_dir,
+                            extension_dir,
                             root_dir || root_image ? params->notify_socket : NULL,
                             error_path);
 
@@ -3568,21 +3995,19 @@
          * directories. */
 
         for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++) {
-                char **i;
-
                 if (t == EXEC_DIRECTORY_CONFIGURATION)
                         continue;
 
                 if (!p->prefix[t])
                         continue;
 
-                STRV_FOREACH(i, c->directories[t].paths) {
+                for (size_t i = 0; i < c->directories[t].n_items; i++) {
                         char *e;
 
                         if (exec_directory_is_private(c, t))
-                                e = path_join(p->prefix[t], "private", *i);
+                                e = path_join(p->prefix[t], "private", c->directories[t].items[i].path);
                         else
-                                e = path_join(p->prefix[t], *i);
+                                e = path_join(p->prefix[t], c->directories[t].items[i].path);
                         if (!e)
                                 return -ENOMEM;
 
@@ -3664,7 +4089,7 @@
         assert(ret_fd);
 
         if (fd < 0) {
-                *ret_fd = -1;
+                *ret_fd = -EBADF;
                 return 0;
         }
 
@@ -3676,7 +4101,7 @@
                 if (r < 0)
                         return -errno;
 
-                CLOSE_AND_REPLACE(fd, r);
+                close_and_replace(fd, r);
         }
 
         *ret_fd = fds[*n_fds] = fd;
@@ -3684,6 +4109,123 @@
         return 1;
 }
 
+static int connect_unix_harder(Unit *u, const OpenFile *of, int ofd) {
+        union sockaddr_union addr = {
+                .un.sun_family = AF_UNIX,
+        };
+        socklen_t sa_len;
+        static const int socket_types[] = { SOCK_DGRAM, SOCK_STREAM, SOCK_SEQPACKET };
+        int r;
+
+        assert(u);
+        assert(of);
+        assert(ofd >= 0);
+
+        r = sockaddr_un_set_path(&addr.un, FORMAT_PROC_FD_PATH(ofd));
+        if (r < 0)
+                return log_unit_error_errno(u, r, "Failed to set sockaddr for %s: %m", of->path);
+
+        sa_len = r;
+
+        for (size_t i = 0; i < ELEMENTSOF(socket_types); i++) {
+                _cleanup_close_ int fd = -EBADF;
+
+                fd = socket(AF_UNIX, socket_types[i] | SOCK_CLOEXEC, 0);
+                if (fd < 0)
+                        return log_unit_error_errno(u, errno, "Failed to create socket for %s: %m", of->path);
+
+                r = RET_NERRNO(connect(fd, &addr.sa, sa_len));
+                if (r == -EPROTOTYPE)
+                        continue;
+                if (r < 0)
+                        return log_unit_error_errno(u, r, "Failed to connect socket for %s: %m", of->path);
+
+                return TAKE_FD(fd);
+        }
+
+        return log_unit_error_errno(u, SYNTHETIC_ERRNO(EPROTOTYPE), "Failed to connect socket for \"%s\".", of->path);
+}
+
+static int get_open_file_fd(Unit *u, const OpenFile *of) {
+        struct stat st;
+        _cleanup_close_ int fd = -EBADF, ofd = -EBADF;
+
+        assert(u);
+        assert(of);
+
+        ofd = open(of->path, O_PATH | O_CLOEXEC);
+        if (ofd < 0)
+                return log_error_errno(errno, "Could not open \"%s\": %m", of->path);
+        if (fstat(ofd, &st) < 0)
+                return log_error_errno(errno, "Failed to stat %s: %m", of->path);
+
+        if (S_ISSOCK(st.st_mode)) {
+                fd = connect_unix_harder(u, of, ofd);
+                if (fd < 0)
+                        return fd;
+
+                if (FLAGS_SET(of->flags, OPENFILE_READ_ONLY) && shutdown(fd, SHUT_WR) < 0)
+                        return log_error_errno(errno, "Failed to shutdown send for socket %s: %m", of->path);
+
+                log_unit_debug(u, "socket %s opened (fd=%d)", of->path, fd);
+        } else {
+                int flags = FLAGS_SET(of->flags, OPENFILE_READ_ONLY) ? O_RDONLY : O_RDWR;
+                if (FLAGS_SET(of->flags, OPENFILE_APPEND))
+                        flags |= O_APPEND;
+                else if (FLAGS_SET(of->flags, OPENFILE_TRUNCATE))
+                        flags |= O_TRUNC;
+
+                fd = fd_reopen(ofd, flags | O_CLOEXEC);
+                if (fd < 0)
+                        return log_unit_error_errno(u, fd, "Failed to open file %s: %m", of->path);
+
+                log_unit_debug(u, "file %s opened (fd=%d)", of->path, fd);
+        }
+
+        return TAKE_FD(fd);
+}
+
+static int collect_open_file_fds(
+                Unit *u,
+                OpenFile* open_files,
+                int **fds,
+                char ***fdnames,
+                size_t *n_fds) {
+        int r;
+
+        assert(u);
+        assert(fds);
+        assert(fdnames);
+        assert(n_fds);
+
+        LIST_FOREACH(open_files, of, open_files) {
+                _cleanup_close_ int fd = -EBADF;
+
+                fd = get_open_file_fd(u, of);
+                if (fd < 0) {
+                        if (FLAGS_SET(of->flags, OPENFILE_GRACEFUL)) {
+                                log_unit_debug_errno(u, fd, "Failed to get OpenFile= file descriptor for %s, ignoring: %m", of->path);
+                                continue;
+                        }
+
+                        return fd;
+                }
+
+                if (!GREEDY_REALLOC(*fds, *n_fds + 1))
+                        return -ENOMEM;
+
+                r = strv_extend(fdnames, of->fdname);
+                if (r < 0)
+                        return r;
+
+                (*fds)[*n_fds] = TAKE_FD(fd);
+
+                (*n_fds)++;
+        }
+
+        return 0;
+}
+
 static int exec_child(
                 Unit *unit,
                 const ExecCommand *command,
@@ -3693,14 +4235,14 @@
                 DynamicCreds *dcreds,
                 int socket_fd,
                 const int named_iofds[static 3],
-                int *fds,
+                int *params_fds,
                 size_t n_socket_fds,
                 size_t n_storage_fds,
                 char **files_env,
                 int user_lookup_fd,
                 int *exit_status) {
 
-        _cleanup_strv_free_ char **our_env = NULL, **pass_env = NULL, **accum_env = NULL, **replaced_argv = NULL;
+        _cleanup_strv_free_ char **our_env = NULL, **pass_env = NULL, **joined_exec_search_path = NULL, **accum_env = NULL, **replaced_argv = NULL;
         int r, ngids = 0, exec_fd;
         _cleanup_free_ gid_t *supplementary_gids = NULL;
         const char *username = NULL, *groupname = NULL;
@@ -3733,6 +4275,8 @@
         int secure_bits;
         _cleanup_free_ gid_t *gids_after_pam = NULL;
         int ngids_after_pam = 0;
+        _cleanup_free_ int *fds = NULL;
+        _cleanup_strv_free_ char **fdnames = NULL;
 
         assert(unit);
         assert(command);
@@ -3740,6 +4284,10 @@
         assert(params);
         assert(exit_status);
 
+        /* Explicitly test for CVE-2021-4034 inspired invocations */
+        assert(command->path);
+        assert(!strv_isempty(command->argv));
+
         rename_process_from_path(command->path);
 
         /* We reset exactly these signals, since they are the only ones we set to SIG_IGN in the main
@@ -3767,11 +4315,30 @@
 
         log_forget_fds();
         log_set_open_when_needed(true);
+        log_settle_target();
 
         /* In case anything used libc syslog(), close this here, too */
         closelog();
 
-        int keep_fds[n_fds + 2];
+        fds = newdup(int, params_fds, n_fds);
+        if (!fds) {
+                *exit_status = EXIT_MEMORY;
+                return log_oom();
+        }
+
+        fdnames = strv_copy((char**) params->fd_names);
+        if (!fdnames) {
+                *exit_status = EXIT_MEMORY;
+                return log_oom();
+        }
+
+        r = collect_open_file_fds(unit, params->open_files, &fds, &fdnames, &n_fds);
+        if (r < 0) {
+                *exit_status = EXIT_FDS;
+                return log_unit_error_errno(unit, r, "Failed to get OpenFile= file descriptors: %m");
+        }
+
+        int keep_fds[n_fds + 3];
         memcpy_safe(keep_fds, fds, n_fds * sizeof(int));
         n_keep_fds = n_fds;
 
@@ -3781,6 +4348,22 @@
                 return log_unit_error_errno(unit, r, "Failed to shift fd and set FD_CLOEXEC: %m");
         }
 
+#if HAVE_LIBBPF
+        if (unit->manager->restrict_fs) {
+                int bpf_map_fd = lsm_bpf_map_restrict_fs_fd(unit);
+                if (bpf_map_fd < 0) {
+                        *exit_status = EXIT_FDS;
+                        return log_unit_error_errno(unit, bpf_map_fd, "Failed to get restrict filesystems BPF map fd: %m");
+                }
+
+                r = add_shifted_fd(keep_fds, ELEMENTSOF(keep_fds), &n_keep_fds, bpf_map_fd, &bpf_map_fd);
+                if (r < 0) {
+                        *exit_status = EXIT_FDS;
+                        return log_unit_error_errno(unit, r, "Failed to shift fd and set FD_CLOEXEC: %m");
+                }
+        }
+#endif
+
         r = close_remaining_fds(params, runtime, dcreds, user_lookup_fd, socket_fd, keep_fds, n_keep_fds);
         if (r < 0) {
                 *exit_status = EXIT_FDS;
@@ -3796,16 +4379,15 @@
         exec_context_tty_reset(context, params);
 
         if (unit_shall_confirm_spawn(unit)) {
-                const char *vc = params->confirm_spawn;
                 _cleanup_free_ char *cmdline = NULL;
 
-                cmdline = quote_command_line(command->argv);
+                cmdline = quote_command_line(command->argv, SHELL_ESCAPE_EMPTY);
                 if (!cmdline) {
                         *exit_status = EXIT_MEMORY;
                         return log_oom();
                 }
 
-                r = ask_for_confirmation(vc, unit, cmdline);
+                r = ask_for_confirmation(context, params->confirm_spawn, unit, cmdline);
                 if (r != CONFIRM_EXECUTE) {
                         if (r == CONFIRM_PRETEND_SUCCESS) {
                                 *exit_status = EXIT_SUCCESS;
@@ -3919,6 +4501,12 @@
                 }
 
                 r = cg_attach_everywhere(params->cgroup_supported, p, 0, NULL, NULL);
+                if (r == -EUCLEAN) {
+                        *exit_status = EXIT_CGROUP;
+                        return log_unit_error_errno(unit, r, "Failed to attach process to cgroup %s "
+                                                    "because the cgroup or one of its parents or "
+                                                    "siblings is in the threaded mode: %m", p);
+                }
                 if (r < 0) {
                         *exit_status = EXIT_CGROUP;
                         return log_unit_error_errno(unit, r, "Failed to attach to cgroup %s: %m", p);
@@ -4084,8 +4672,10 @@
                 }
         }
 
+        needs_mount_namespace = exec_needs_mount_namespace(context, params, runtime);
+
         for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++) {
-                r = setup_exec_directory(context, params, uid, gid, dt, exit_status);
+                r = setup_exec_directory(context, params, uid, gid, dt, needs_mount_namespace, exit_status);
                 if (r < 0)
                         return log_unit_error_errno(unit, r, "Failed to set up special execution directory in %s: %m", params->prefix[dt]);
         }
@@ -4103,6 +4693,7 @@
                         context,
                         params,
                         n_fds,
+                        fdnames,
                         home,
                         username,
                         shell,
@@ -4120,9 +4711,28 @@
                 return log_oom();
         }
 
-        accum_env = strv_env_merge(5,
-                                   params->environment,
+        /* The $PATH variable is set to the default path in params->environment. However, this is overridden
+         * if user-specified fields have $PATH set. The intention is to also override $PATH if the unit does
+         * not specify PATH but the unit has ExecSearchPath. */
+        if (!strv_isempty(context->exec_search_path)) {
+                _cleanup_free_ char *joined = NULL;
+
+                joined = strv_join(context->exec_search_path, ":");
+                if (!joined) {
+                        *exit_status = EXIT_MEMORY;
+                        return log_oom();
+                }
+
+                r = strv_env_assign(&joined_exec_search_path, "PATH", joined);
+                if (r < 0) {
+                        *exit_status = EXIT_MEMORY;
+                        return log_oom();
+                }
+        }
+
+        accum_env = strv_env_merge(params->environment,
                                    our_env,
+                                   joined_exec_search_path,
                                    pass_env,
                                    context->environment,
                                    files_env);
@@ -4140,22 +4750,26 @@
                 return log_unit_error_errno(unit, r, "Failed to set up kernel keyring: %m");
         }
 
-        /* We need sandboxing if the caller asked us to apply it and the command isn't explicitly excepted from it */
+        /* We need sandboxing if the caller asked us to apply it and the command isn't explicitly excepted
+         * from it. */
         needs_sandboxing = (params->flags & EXEC_APPLY_SANDBOXING) && !(command->flags & EXEC_COMMAND_FULLY_PRIVILEGED);
 
-        /* We need the ambient capability hack, if the caller asked us to apply it and the command is marked for it, and the kernel doesn't actually support ambient caps */
+        /* We need the ambient capability hack, if the caller asked us to apply it and the command is marked
+         * for it, and the kernel doesn't actually support ambient caps. */
         needs_ambient_hack = (params->flags & EXEC_APPLY_SANDBOXING) && (command->flags & EXEC_COMMAND_AMBIENT_MAGIC) && !ambient_capabilities_supported();
 
-        /* We need setresuid() if the caller asked us to apply sandboxing and the command isn't explicitly excepted from either whole sandboxing or just setresuid() itself, and the ambient hack is not desired */
+        /* We need setresuid() if the caller asked us to apply sandboxing and the command isn't explicitly
+         * excepted from either whole sandboxing or just setresuid() itself, and the ambient hack is not
+         * desired. */
         if (needs_ambient_hack)
                 needs_setuid = false;
         else
                 needs_setuid = (params->flags & EXEC_APPLY_SANDBOXING) && !(command->flags & (EXEC_COMMAND_FULLY_PRIVILEGED|EXEC_COMMAND_NO_SETUID));
 
         if (needs_sandboxing) {
-                /* MAC enablement checks need to be done before a new mount ns is created, as they rely on /sys being
-                 * present. The actual MAC context application will happen later, as late as possible, to avoid
-                 * impacting our own code paths. */
+                /* MAC enablement checks need to be done before a new mount ns is created, as they rely on
+                 * /sys being present. The actual MAC context application will happen later, as late as
+                 * possible, to avoid impacting our own code paths. */
 
 #if HAVE_SELINUX
                 use_selinux = mac_selinux_use();
@@ -4199,7 +4813,7 @@
                 }
         }
 
-        if (needs_sandboxing && context->private_users && !have_effective_cap(CAP_SYS_ADMIN)) {
+        if (needs_sandboxing && context->private_users && have_effective_cap(CAP_SYS_ADMIN) <= 0) {
                 /* If we're unprivileged, set up the user namespace first to enable use of the other namespaces.
                  * Users with CAP_SYS_ADMIN can set up user namespaces last because they will be able to
                  * set up the all of the other namespaces (i.e. network, mount, UTS) without a user namespace. */
@@ -4250,7 +4864,6 @@
                         log_unit_warning(unit, "PrivateIPC=yes is configured, but the kernel does not support IPC namespaces, ignoring.");
         }
 
-        needs_mount_namespace = exec_needs_mount_namespace(context, params, runtime);
         if (needs_mount_namespace) {
                 _cleanup_free_ char *error_path = NULL;
 
@@ -4296,7 +4909,7 @@
 
         /* If the user namespace was not set up above, try to do it now.
          * It's preferred to set up the user namespace later (after all other namespaces) so as not to be
-         * restricted by rules pertaining to combining user namspaces with other namespaces (e.g. in the
+         * restricted by rules pertaining to combining user namespaces with other namespaces (e.g. in the
          * case of mount namespaces being less privileged when the mount point list is copied from a
          * different user namespace). */
 
@@ -4312,8 +4925,8 @@
          * shall execute. */
 
         _cleanup_free_ char *executable = NULL;
-        _cleanup_close_ int executable_fd = -1;
-        r = find_executable_full(command->path, false, &executable, &executable_fd);
+        _cleanup_close_ int executable_fd = -EBADF;
+        r = find_executable_full(command->path, /* root= */ NULL, context->exec_search_path, false, &executable, &executable_fd);
         if (r < 0) {
                 if (r != -ENOMEM && (command->flags & EXEC_COMMAND_IGNORE_FAILURE)) {
                         log_unit_struct_errno(unit, LOG_INFO, r,
@@ -4343,7 +4956,7 @@
 
 #if HAVE_SELINUX
         if (needs_sandboxing && use_selinux && params->selinux_context_net) {
-                int fd = -1;
+                int fd = -EBADF;
 
                 if (socket_fd >= 0)
                         fd = socket_fd;
@@ -4354,9 +4967,12 @@
 
                 if (fd >= 0) {
                         r = mac_selinux_get_child_mls_label(fd, executable, context->selinux_context, &mac_selinux_context_net);
-                        if (r < 0 && !context->selinux_context_ignore) {
-                                *exit_status = EXIT_SELINUX_CONTEXT;
-                                return log_unit_error_errno(unit, r, "Failed to determine SELinux context: %m");
+                        if (r < 0) {
+                                if (!context->selinux_context_ignore) {
+                                        *exit_status = EXIT_SELINUX_CONTEXT;
+                                        return log_unit_error_errno(unit, r, "Failed to determine SELinux context: %m");
+                                }
+                                log_unit_debug_errno(unit, r, "Failed to determine SELinux context, ignoring: %m");
                         }
                 }
         }
@@ -4370,7 +4986,7 @@
         if (r >= 0)
                 r = shift_fds(fds, n_fds);
         if (r >= 0)
-                r = flags_fds(fds, n_socket_fds, n_storage_fds, context->non_blocking);
+                r = flags_fds(fds, n_socket_fds, n_fds, context->non_blocking);
         if (r < 0) {
                 *exit_status = EXIT_FDS;
                 return log_unit_error_errno(unit, r, "Failed to adjust passed file descriptors: %m");
@@ -4400,7 +5016,7 @@
                 /* LSM Smack needs the capability CAP_MAC_ADMIN to change the current execution security context of the
                  * process. This is the latest place before dropping capabilities. Other MAC context are set later. */
                 if (use_smack) {
-                        r = setup_smack(context, executable_fd);
+                        r = setup_smack(unit->manager, context, executable_fd);
                         if (r < 0 && !context->smack_process_label_ignore) {
                                 *exit_status = EXIT_SMACK_PROCESS_LABEL;
                                 return log_unit_error_errno(unit, r, "Failed to set SMACK process label: %m");
@@ -4488,9 +5104,12 @@
 
                         if (exec_context) {
                                 r = setexeccon(exec_context);
-                                if (r < 0 && !context->selinux_context_ignore) {
-                                        *exit_status = EXIT_SELINUX_CONTEXT;
-                                        return log_unit_error_errno(unit, r, "Failed to change SELinux context to %s: %m", exec_context);
+                                if (r < 0) {
+                                        if (!context->selinux_context_ignore) {
+                                                *exit_status = EXIT_SELINUX_CONTEXT;
+                                                return log_unit_error_errno(unit, r, "Failed to change SELinux context to %s: %m", exec_context);
+                                        }
+                                        log_unit_debug_errno(unit, r, "Failed to change SELinux context to %s, ignoring: %m", exec_context);
                                 }
                         }
                 }
@@ -4622,6 +5241,15 @@
                         return log_unit_error_errno(unit, r, "Failed to apply system call filters: %m");
                 }
 #endif
+
+#if HAVE_LIBBPF
+                r = apply_restrict_filesystems(unit, context);
+                if (r < 0) {
+                        *exit_status = EXIT_BPF;
+                        return log_unit_error_errno(unit, r, "Failed to restrict filesystems: %m");
+                }
+#endif
+
         }
 
         if (!strv_isempty(context->unset_environment)) {
@@ -4649,7 +5277,7 @@
         if (DEBUG_LOGGING) {
                 _cleanup_free_ char *line = NULL;
 
-                line = quote_command_line(final_argv);
+                line = quote_command_line(final_argv, SHELL_ESCAPE_EMPTY);
                 if (!line) {
                         *exit_status = EXIT_MEMORY;
                         return log_oom();
@@ -4727,7 +5355,7 @@
 
                 socket_fd = params->fds[0];
         } else {
-                socket_fd = -1;
+                socket_fd = -EBADF;
                 fds = params->fds;
                 n_socket_fds = params->n_socket_fds;
                 n_storage_fds = params->n_storage_fds;
@@ -4741,7 +5369,7 @@
         if (r < 0)
                 return log_unit_error_errno(unit, r, "Failed to load environment files: %m");
 
-        line = quote_command_line(command->argv);
+        line = quote_command_line(command->argv, SHELL_ESCAPE_EMPTY);
         if (!line)
                 return log_oom();
 
@@ -4766,9 +5394,10 @@
                         if (r < 0)
                                 return log_unit_error_errno(unit, r, "Failed to create control group '%s': %m", subcgroup_path);
 
-                        /* Normally we would not propagate the oomd xattrs to children but since we created this
+                        /* Normally we would not propagate the xattrs to children but since we created this
                          * sub-cgroup internally we should do it. */
                         cgroup_oomd_xattr_apply(unit, subcgroup_path);
+                        cgroup_log_xattr_apply(unit, subcgroup_path);
                 }
         }
 
@@ -4828,7 +5457,7 @@
         assert(c);
 
         c->umask = 0022;
-        c->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 0);
+        c->ioprio = IOPRIO_DEFAULT_CLASS_AND_PRIO;
         c->cpu_sched_policy = SCHED_OTHER;
         c->syslog_priority = LOG_DAEMON|LOG_INFO;
         c->syslog_level_prefix = true;
@@ -4845,6 +5474,8 @@
 #if HAVE_SECCOMP
         c->syscall_errno = SECCOMP_ERROR_NUMBER_KILL;
 #endif
+        c->tty_rows = UINT_MAX;
+        c->tty_cols = UINT_MAX;
         numa_policy_reset(&c->numa_policy);
 }
 
@@ -4875,6 +5506,7 @@
         c->root_hash_sig_path = mfree(c->root_hash_sig_path);
         c->root_verity = mfree(c->root_verity);
         c->extension_images = mount_image_free_many(c->extension_images, &c->n_extension_images);
+        c->extension_directories = strv_free(c->extension_directories);
         c->tty_path = mfree(c->tty_path);
         c->syslog_identifier = mfree(c->syslog_identifier);
         c->user = mfree(c->user);
@@ -4889,6 +5521,7 @@
         c->inaccessible_paths = strv_free(c->inaccessible_paths);
         c->exec_paths = strv_free(c->exec_paths);
         c->no_exec_paths = strv_free(c->no_exec_paths);
+        c->exec_search_path = strv_free(c->exec_search_path);
 
         bind_mount_free_many(c->bind_mounts, c->n_bind_mounts);
         c->bind_mounts = NULL;
@@ -4906,16 +5539,20 @@
         c->apparmor_profile = mfree(c->apparmor_profile);
         c->smack_process_label = mfree(c->smack_process_label);
 
+        c->restrict_filesystems = set_free(c->restrict_filesystems);
+
         c->syscall_filter = hashmap_free(c->syscall_filter);
         c->syscall_archs = set_free(c->syscall_archs);
         c->address_families = set_free(c->address_families);
 
         for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++)
-                c->directories[t].paths = strv_free(c->directories[t].paths);
+                exec_directory_done(&c->directories[t]);
 
         c->log_level_max = -1;
 
         exec_context_free_log_extra_fields(c);
+        c->log_filter_allowed_patterns = set_free(c->log_filter_allowed_patterns);
+        c->log_filter_denied_patterns = set_free(c->log_filter_denied_patterns);
 
         c->log_ratelimit_interval_usec = 0;
         c->log_ratelimit_burst = 0;
@@ -4928,31 +5565,43 @@
 
         c->log_namespace = mfree(c->log_namespace);
 
-        c->load_credentials = strv_free(c->load_credentials);
+        c->load_credentials = hashmap_free(c->load_credentials);
         c->set_credentials = hashmap_free(c->set_credentials);
 }
 
 int exec_context_destroy_runtime_directory(const ExecContext *c, const char *runtime_prefix) {
-        char **i;
-
         assert(c);
 
         if (!runtime_prefix)
                 return 0;
 
-        STRV_FOREACH(i, c->directories[EXEC_DIRECTORY_RUNTIME].paths) {
+        for (size_t i = 0; i < c->directories[EXEC_DIRECTORY_RUNTIME].n_items; i++) {
                 _cleanup_free_ char *p = NULL;
 
                 if (exec_directory_is_private(c, EXEC_DIRECTORY_RUNTIME))
-                        p = path_join(runtime_prefix, "private", *i);
+                        p = path_join(runtime_prefix, "private", c->directories[EXEC_DIRECTORY_RUNTIME].items[i].path);
                 else
-                        p = path_join(runtime_prefix, *i);
+                        p = path_join(runtime_prefix, c->directories[EXEC_DIRECTORY_RUNTIME].items[i].path);
                 if (!p)
                         return -ENOMEM;
 
                 /* We execute this synchronously, since we need to be sure this is gone when we start the
                  * service next. */
                 (void) rm_rf(p, REMOVE_ROOT);
+
+                STRV_FOREACH(symlink, c->directories[EXEC_DIRECTORY_RUNTIME].items[i].symlinks) {
+                        _cleanup_free_ char *symlink_abs = NULL;
+
+                        if (exec_directory_is_private(c, EXEC_DIRECTORY_RUNTIME))
+                                symlink_abs = path_join(runtime_prefix, "private", *symlink);
+                        else
+                                symlink_abs = path_join(runtime_prefix, *symlink);
+                        if (!symlink_abs)
+                                return -ENOMEM;
+
+                        (void) unlink(symlink_abs);
+                }
+
         }
 
         return 0;
@@ -4978,6 +5627,23 @@
         return 0;
 }
 
+int exec_context_destroy_mount_ns_dir(Unit *u) {
+        _cleanup_free_ char *p = NULL;
+
+        if (!u || !MANAGER_IS_SYSTEM(u->manager))
+                return 0;
+
+        p = path_join("/run/systemd/propagate/", u->id);
+        if (!p)
+                return -ENOMEM;
+
+        /* This is only filled transiently (see mount_in_namespace()), should be empty or even non-existent*/
+        if (rmdir(p) < 0 && errno != ENOENT)
+                log_unit_debug_errno(u, errno, "Unable to remove propagation dir '%s', ignoring: %m", p);
+
+        return 0;
+}
+
 static void exec_command_done(ExecCommand *c) {
         assert(c);
 
@@ -5013,12 +5679,9 @@
 }
 
 void exec_command_reset_status_list_array(ExecCommand **c, size_t n) {
-        for (size_t i = 0; i < n; i++) {
-                ExecCommand *z;
-
+        for (size_t i = 0; i < n; i++)
                 LIST_FOREACH(command, z, c[i])
                         exec_status_reset(&z->exec_status);
-        }
 }
 
 typedef struct InvalidEnvInfo {
@@ -5111,20 +5774,17 @@
         return targets == 0 ? 0 : -ENOENT;
 }
 
-static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***l) {
-        char **i, **r = NULL;
+static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***ret) {
+        _cleanup_strv_free_ char **v = NULL;
+        int r;
 
         assert(c);
-        assert(l);
+        assert(ret);
 
         STRV_FOREACH(i, c->environment_files) {
-                char *fn;
-                int k;
-                bool ignore = false;
-                char **p;
                 _cleanup_globfree_ glob_t pglob = {};
-
-                fn = *i;
+                bool ignore = false;
+                char *fn = *i;
 
                 if (fn[0] == '-') {
                         ignore = true;
@@ -5134,33 +5794,30 @@
                 if (!path_is_absolute(fn)) {
                         if (ignore)
                                 continue;
-
-                        strv_free(r);
                         return -EINVAL;
                 }
 
                 /* Filename supports globbing, take all matching files */
-                k = safe_glob(fn, 0, &pglob);
-                if (k < 0) {
+                r = safe_glob(fn, 0, &pglob);
+                if (r < 0) {
                         if (ignore)
                                 continue;
-
-                        strv_free(r);
-                        return k;
+                        return r;
                 }
 
                 /* When we don't match anything, -ENOENT should be returned */
                 assert(pglob.gl_pathc > 0);
 
                 for (unsigned n = 0; n < pglob.gl_pathc; n++) {
-                        k = load_env_file(NULL, pglob.gl_pathv[n], &p);
-                        if (k < 0) {
+                        _cleanup_strv_free_ char **p = NULL;
+
+                        r = load_env_file(NULL, pglob.gl_pathv[n], &p);
+                        if (r < 0) {
                                 if (ignore)
                                         continue;
-
-                                strv_free(r);
-                                return k;
+                                return r;
                         }
+
                         /* Log invalid environment variables with filename */
                         if (p) {
                                 InvalidEnvInfo info = {
@@ -5171,23 +5828,19 @@
                                 p = strv_env_clean_with_callback(p, invalid_env, &info);
                         }
 
-                        if (!r)
-                                r = p;
+                        if (!v)
+                                v = TAKE_PTR(p);
                         else {
-                                char **m;
-
-                                m = strv_env_merge(2, r, p);
-                                strv_free(r);
-                                strv_free(p);
+                                char **m = strv_env_merge(v, p);
                                 if (!m)
                                         return -ENOMEM;
 
-                                r = m;
+                                strv_free_and_replace(v, m);
                         }
                 }
         }
 
-        *l = r;
+        *ret = TAKE_PTR(v);
 
         return 0;
 }
@@ -5229,8 +5882,6 @@
 }
 
 static void strv_fprintf(FILE *f, char **l) {
-        char **g;
-
         assert(f);
 
         STRV_FOREACH(g, l)
@@ -5250,7 +5901,6 @@
 }
 
 void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
-        char **e, **d, buf_clean[FORMAT_TIMESPAN_MAX];
         int r;
 
         assert(c);
@@ -5312,8 +5962,6 @@
                 fprintf(f, "%sRootImage: %s\n", prefix, c->root_image);
 
         if (c->root_image_options) {
-                MountOptions *o;
-
                 fprintf(f, "%sRootImageOptions:", prefix);
                 LIST_FOREACH(mount_options, o, c->root_image_options)
                         if (!isempty(o->options))
@@ -5364,28 +6012,24 @@
         for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++) {
                 fprintf(f, "%s%sMode: %04o\n", prefix, exec_directory_type_to_string(dt), c->directories[dt].mode);
 
-                STRV_FOREACH(d, c->directories[dt].paths)
-                        fprintf(f, "%s%s: %s\n", prefix, exec_directory_type_to_string(dt), *d);
+                for (size_t i = 0; i < c->directories[dt].n_items; i++) {
+                        fprintf(f, "%s%s: %s\n", prefix, exec_directory_type_to_string(dt), c->directories[dt].items[i].path);
+
+                        STRV_FOREACH(d, c->directories[dt].items[i].symlinks)
+                                fprintf(f, "%s%s: %s:%s\n", prefix, exec_directory_type_symlink_to_string(dt), c->directories[dt].items[i].path, *d);
+                }
         }
 
-        fprintf(f,
-                "%sTimeoutCleanSec: %s\n",
-                prefix, format_timespan(buf_clean, sizeof(buf_clean), c->timeout_clean_usec, USEC_PER_SEC));
+        fprintf(f, "%sTimeoutCleanSec: %s\n", prefix, FORMAT_TIMESPAN(c->timeout_clean_usec, USEC_PER_SEC));
 
         if (c->nice_set)
-                fprintf(f,
-                        "%sNice: %i\n",
-                        prefix, c->nice);
+                fprintf(f, "%sNice: %i\n", prefix, c->nice);
 
         if (c->oom_score_adjust_set)
-                fprintf(f,
-                        "%sOOMScoreAdjust: %i\n",
-                        prefix, c->oom_score_adjust);
+                fprintf(f, "%sOOMScoreAdjust: %i\n", prefix, c->oom_score_adjust);
 
         if (c->coredump_filter_set)
-                fprintf(f,
-                        "%sCoredumpFilter: 0x%"PRIx64"\n",
-                        prefix, c->coredump_filter);
+                fprintf(f, "%sCoredumpFilter: 0x%"PRIx64"\n", prefix, c->coredump_filter);
 
         for (unsigned i = 0; i < RLIM_NLIMITS; i++)
                 if (c->rlimit[i]) {
@@ -5398,11 +6042,11 @@
         if (c->ioprio_set) {
                 _cleanup_free_ char *class_str = NULL;
 
-                r = ioprio_class_to_string_alloc(IOPRIO_PRIO_CLASS(c->ioprio), &class_str);
+                r = ioprio_class_to_string_alloc(ioprio_prio_class(c->ioprio), &class_str);
                 if (r >= 0)
                         fprintf(f, "%sIOSchedulingClass: %s\n", prefix, class_str);
 
-                fprintf(f, "%sIOPriority: %lu\n", prefix, IOPRIO_PRIO_DATA(c->ioprio));
+                fprintf(f, "%sIOPriority: %d\n", prefix, ioprio_prio_data(c->ioprio));
         }
 
         if (c->cpu_sched_set) {
@@ -5472,11 +6116,15 @@
                         "%sTTYPath: %s\n"
                         "%sTTYReset: %s\n"
                         "%sTTYVHangup: %s\n"
-                        "%sTTYVTDisallocate: %s\n",
+                        "%sTTYVTDisallocate: %s\n"
+                        "%sTTYRows: %u\n"
+                        "%sTTYColumns: %u\n",
                         prefix, c->tty_path,
                         prefix, yes_no(c->tty_reset),
                         prefix, yes_no(c->tty_vhangup),
-                        prefix, yes_no(c->tty_vt_disallocate));
+                        prefix, yes_no(c->tty_vt_disallocate),
+                        prefix, c->tty_rows,
+                        prefix, c->tty_cols);
 
         if (IN_SET(c->std_output,
                    EXEC_OUTPUT_KMSG,
@@ -5508,17 +6156,25 @@
                 fprintf(f, "%sLogLevelMax: %s\n", prefix, strna(t));
         }
 
-        if (c->log_ratelimit_interval_usec > 0) {
-                char buf_timespan[FORMAT_TIMESPAN_MAX];
-
+        if (c->log_ratelimit_interval_usec > 0)
                 fprintf(f,
                         "%sLogRateLimitIntervalSec: %s\n",
-                        prefix, format_timespan(buf_timespan, sizeof(buf_timespan), c->log_ratelimit_interval_usec, USEC_PER_SEC));
-        }
+                        prefix, FORMAT_TIMESPAN(c->log_ratelimit_interval_usec, USEC_PER_SEC));
 
         if (c->log_ratelimit_burst > 0)
                 fprintf(f, "%sLogRateLimitBurst: %u\n", prefix, c->log_ratelimit_burst);
 
+        if (!set_isempty(c->log_filter_allowed_patterns) || !set_isempty(c->log_filter_denied_patterns)) {
+                fprintf(f, "%sLogFilterPatterns:", prefix);
+
+                char *pattern;
+                SET_FOREACH(pattern, c->log_filter_allowed_patterns)
+                        fprintf(f, " %s", pattern);
+                SET_FOREACH(pattern, c->log_filter_denied_patterns)
+                        fprintf(f, " ~%s", pattern);
+                fputc('\n', f);
+        }
+
         for (size_t j = 0; j < c->n_log_extra_fields; j++) {
                 fprintf(f, "%sLogExtraFields: ", prefix);
                 fwrite(c->log_extra_fields[j].iov_base,
@@ -5571,6 +6227,7 @@
         strv_dump(f, prefix, "InaccessiblePaths", c->inaccessible_paths);
         strv_dump(f, prefix, "ExecPaths", c->exec_paths);
         strv_dump(f, prefix, "NoExecPaths", c->no_exec_paths);
+        strv_dump(f, prefix, "ExecSearchPath", c->exec_search_path);
 
         for (size_t i = 0; i < c->n_bind_mounts; i++)
                 fprintf(f, "%s%s: %s%s:%s:%s\n", prefix,
@@ -5619,11 +6276,6 @@
                 prefix, yes_no(c->lock_personality));
 
         if (c->syscall_filter) {
-#if HAVE_SECCOMP
-                void *id, *val;
-                bool first = true;
-#endif
-
                 fprintf(f,
                         "%sSystemCallFilter: ",
                         prefix);
@@ -5632,6 +6284,8 @@
                         fputc('~', f);
 
 #if HAVE_SECCOMP
+                void *id, *val;
+                bool first = true;
                 HASHMAP_FOREACH_KEY(val, id, c->syscall_filter) {
                         _cleanup_free_ char *name = NULL;
                         const char *errno_name = NULL;
@@ -5659,15 +6313,12 @@
         }
 
         if (c->syscall_archs) {
-#if HAVE_SECCOMP
-                void *id;
-#endif
-
                 fprintf(f,
                         "%sSystemCallArchitectures:",
                         prefix);
 
 #if HAVE_SECCOMP
+                void *id;
                 SET_FOREACH(id, c->syscall_archs)
                         fprintf(f, " %s", strna(seccomp_arch_to_string(PTR_TO_UINT32(id) - 1)));
 #endif
@@ -5683,20 +6334,24 @@
                                 prefix, strna(s));
         }
 
+#if HAVE_LIBBPF
+        if (exec_context_restrict_filesystems_set(c)) {
+                char *fs;
+                SET_FOREACH(fs, c->restrict_filesystems)
+                        fprintf(f, "%sRestrictFileSystems: %s\n", prefix, fs);
+        }
+#endif
+
         if (c->network_namespace_path)
                 fprintf(f,
                         "%sNetworkNamespacePath: %s\n",
                         prefix, c->network_namespace_path);
 
         if (c->syscall_errno > 0) {
-#if HAVE_SECCOMP
-                const char *errno_name;
-#endif
-
                 fprintf(f, "%sSystemCallErrorNumber: ", prefix);
 
 #if HAVE_SECCOMP
-                errno_name = seccomp_errno_or_action_to_string(c->syscall_errno);
+                const char *errno_name = seccomp_errno_or_action_to_string(c->syscall_errno);
                 if (errno_name)
                         fputs(errno_name, f);
                 else
@@ -5706,8 +6361,6 @@
         }
 
         for (size_t i = 0; i < c->n_mount_images; i++) {
-                MountOptions *o;
-
                 fprintf(f, "%sMountImages: %s%s:%s", prefix,
                         c->mount_images[i].ignore_enoent ? "-": "",
                         c->mount_images[i].source,
@@ -5720,8 +6373,6 @@
         }
 
         for (size_t i = 0; i < c->n_extension_images; i++) {
-                MountOptions *o;
-
                 fprintf(f, "%sExtensionImages: %s%s", prefix,
                         c->extension_images[i].ignore_enoent ? "-": "",
                         c->extension_images[i].source);
@@ -5731,6 +6382,8 @@
                                 strempty(o->options));
                 fprintf(f, "\n");
         }
+
+        strv_dump(f, prefix, "ExtensionDirectories", c->extension_directories);
 }
 
 bool exec_context_maintains_privileges(const ExecContext *c) {
@@ -5758,9 +6411,9 @@
 
         p = ioprio_get(IOPRIO_WHO_PROCESS, 0);
         if (p < 0)
-                return IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 4);
+                return IOPRIO_DEFAULT_CLASS_AND_PRIO;
 
-        return p;
+        return ioprio_normalize(p);
 }
 
 bool exec_context_get_effective_mount_apivfs(const ExecContext *c) {
@@ -5787,7 +6440,7 @@
 }
 
 void exec_context_revert_tty(ExecContext *c) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *path;
         struct stat st;
         int r;
@@ -5843,18 +6496,16 @@
         assert(ret);
 
         for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++) {
-                char **i;
-
                 if (!FLAGS_SET(mask, 1U << t))
                         continue;
 
                 if (!prefix[t])
                         continue;
 
-                STRV_FOREACH(i, c->directories[t].paths) {
+                for (size_t i = 0; i < c->directories[t].n_items; i++) {
                         char *j;
 
-                        j = path_join(prefix[t], *i);
+                        j = path_join(prefix[t], c->directories[t].items[i].path);
                         if (!j)
                                 return -ENOMEM;
 
@@ -5864,7 +6515,17 @@
 
                         /* Also remove private directories unconditionally. */
                         if (t != EXEC_DIRECTORY_CONFIGURATION) {
-                                j = path_join(prefix[t], "private", *i);
+                                j = path_join(prefix[t], "private", c->directories[t].items[i].path);
+                                if (!j)
+                                        return -ENOMEM;
+
+                                r = strv_consume(&l, j);
+                                if (r < 0)
+                                        return r;
+                        }
+
+                        STRV_FOREACH(symlink, c->directories[t].items[i].symlinks) {
+                                j = path_join(prefix[t], *symlink);
                                 if (!j)
                                         return -ENOMEM;
 
@@ -5886,7 +6547,7 @@
         assert(ret);
 
         for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++)
-                if (!strv_isempty(c->directories[t].paths))
+                if (c->directories[t].n_items > 0)
                         mask |= 1U << t;
 
         *ret = mask;
@@ -5927,8 +6588,6 @@
 }
 
 void exec_status_dump(const ExecStatus *s, FILE *f, const char *prefix) {
-        char buf[FORMAT_TIMESTAMP_MAX];
-
         assert(s);
         assert(f);
 
@@ -5944,14 +6603,14 @@
         if (dual_timestamp_is_set(&s->start_timestamp))
                 fprintf(f,
                         "%sStart Timestamp: %s\n",
-                        prefix, format_timestamp(buf, sizeof(buf), s->start_timestamp.realtime));
+                        prefix, FORMAT_TIMESTAMP(s->start_timestamp.realtime));
 
         if (dual_timestamp_is_set(&s->exit_timestamp))
                 fprintf(f,
                         "%sExit Timestamp: %s\n"
                         "%sExit Code: %s\n"
                         "%sExit Status: %i\n",
-                        prefix, format_timestamp(buf, sizeof(buf), s->exit_timestamp.realtime),
+                        prefix, FORMAT_TIMESTAMP(s->exit_timestamp.realtime),
                         prefix, sigchld_code_to_string(s->code),
                         prefix, s->status);
 }
@@ -5966,10 +6625,11 @@
         prefix = strempty(prefix);
         prefix2 = strjoina(prefix, "\t");
 
-        cmd = quote_command_line(c->argv);
+        cmd = quote_command_line(c->argv, SHELL_ESCAPE_EMPTY);
+
         fprintf(f,
                 "%sCommand Line: %s\n",
-                prefix, cmd ? cmd : strerror_safe(ENOMEM));
+                prefix, strnull(cmd));
 
         exec_status_dump(&c->exec_status, f, prefix2);
 }
@@ -5979,8 +6639,8 @@
 
         prefix = strempty(prefix);
 
-        LIST_FOREACH(command, c, c)
-                exec_command_dump(c, f, prefix);
+        LIST_FOREACH(command, i, c)
+                exec_command_dump(i, f, prefix);
 }
 
 void exec_command_append_list(ExecCommand **l, ExecCommand *e) {
@@ -5991,7 +6651,7 @@
 
         if (*l) {
                 /* It's kind of important, that we keep the order here */
-                LIST_FIND_TAIL(command, *l, end);
+                end = LIST_FIND_TAIL(command, *l);
                 LIST_INSERT_AFTER(command, *l, end, e);
         } else
               *l = e;
@@ -6110,8 +6770,8 @@
 
         *n = (ExecRuntime) {
                 .id = TAKE_PTR(id_copy),
-                .netns_storage_socket = { -1, -1 },
-                .ipcns_storage_socket = { -1, -1 },
+                .netns_storage_socket = PIPE_EBADF,
+                .ipcns_storage_socket = PIPE_EBADF,
         };
 
         *ret = n;
@@ -6173,7 +6833,7 @@
                 ExecRuntime **ret) {
 
         _cleanup_(namespace_cleanup_tmpdirp) char *tmp_dir = NULL, *var_tmp_dir = NULL;
-        _cleanup_close_pair_ int netns_storage_socket[2] = { -1, -1 }, ipcns_storage_socket[2] = { -1, -1 };
+        _cleanup_close_pair_ int netns_storage_socket[2] = PIPE_EBADF, ipcns_storage_socket[2] = PIPE_EBADF;
         int r;
 
         assert(m);
@@ -6408,15 +7068,14 @@
         _cleanup_free_ char *tmp_dir = NULL, *var_tmp_dir = NULL;
         char *id = NULL;
         int r, netns_fdpair[] = {-1, -1}, ipcns_fdpair[] = {-1, -1};
-        const char *p, *v = value;
+        const char *p, *v = ASSERT_PTR(value);
         size_t n;
 
         assert(m);
-        assert(value);
         assert(fds);
 
         n = strcspn(v, " ");
-        id = strndupa(v, n);
+        id = strndupa_safe(v, n);
         if (v[n] != ' ')
                 goto finalize;
         p = v + n + 1;
@@ -6448,7 +7107,7 @@
                 char *buf;
 
                 n = strcspn(v, " ");
-                buf = strndupa(v, n);
+                buf = strndupa_safe(v, n);
 
                 r = safe_atoi(buf, &netns_fdpair[0]);
                 if (r < 0)
@@ -6467,7 +7126,7 @@
                 char *buf;
 
                 n = strcspn(v, " ");
-                buf = strndupa(v, n);
+                buf = strndupa_safe(v, n);
 
                 r = safe_atoi(buf, &netns_fdpair[1]);
                 if (r < 0)
@@ -6486,7 +7145,7 @@
                 char *buf;
 
                 n = strcspn(v, " ");
-                buf = strndupa(v, n);
+                buf = strndupa_safe(v, n);
 
                 r = safe_atoi(buf, &ipcns_fdpair[0]);
                 if (r < 0)
@@ -6505,7 +7164,7 @@
                 char *buf;
 
                 n = strcspn(v, " ");
-                buf = strndupa(v, n);
+                buf = strndupa_safe(v, n);
 
                 r = safe_atoi(buf, &ipcns_fdpair[1]);
                 if (r < 0)
@@ -6557,7 +7216,109 @@
         return mfree(sc);
 }
 
+ExecLoadCredential *exec_load_credential_free(ExecLoadCredential *lc) {
+        if (!lc)
+                return NULL;
+
+        free(lc->id);
+        free(lc->path);
+        return mfree(lc);
+}
+
+void exec_directory_done(ExecDirectory *d) {
+        if (!d)
+                return;
+
+        for (size_t i = 0; i < d->n_items; i++) {
+                free(d->items[i].path);
+                strv_free(d->items[i].symlinks);
+        }
+
+        d->items = mfree(d->items);
+        d->n_items = 0;
+        d->mode = 0755;
+}
+
+static ExecDirectoryItem *exec_directory_find(ExecDirectory *d, const char *path) {
+        assert(d);
+        assert(path);
+
+        for (size_t i = 0; i < d->n_items; i++)
+                if (path_equal(d->items[i].path, path))
+                        return &d->items[i];
+
+        return NULL;
+}
+
+int exec_directory_add(ExecDirectory *d, const char *path, const char *symlink) {
+        _cleanup_strv_free_ char **s = NULL;
+        _cleanup_free_ char *p = NULL;
+        ExecDirectoryItem *existing;
+        int r;
+
+        assert(d);
+        assert(path);
+
+        existing = exec_directory_find(d, path);
+        if (existing) {
+                r = strv_extend(&existing->symlinks, symlink);
+                if (r < 0)
+                        return r;
+
+                return 0; /* existing item is updated */
+        }
+
+        p = strdup(path);
+        if (!p)
+                return -ENOMEM;
+
+        if (symlink) {
+                s = strv_new(symlink);
+                if (!s)
+                        return -ENOMEM;
+        }
+
+        if (!GREEDY_REALLOC(d->items, d->n_items + 1))
+                return -ENOMEM;
+
+        d->items[d->n_items++] = (ExecDirectoryItem) {
+                .path = TAKE_PTR(p),
+                .symlinks = TAKE_PTR(s),
+        };
+
+        return 1; /* new item is added */
+}
+
+static int exec_directory_item_compare_func(const ExecDirectoryItem *a, const ExecDirectoryItem *b) {
+        assert(a);
+        assert(b);
+
+        return path_compare(a->path, b->path);
+}
+
+void exec_directory_sort(ExecDirectory *d) {
+        assert(d);
+
+        /* Sort the exec directories to make always parent directories processed at first in
+         * setup_exec_directory(), e.g., even if StateDirectory=foo/bar foo, we need to create foo at first,
+         * then foo/bar. Also, set .only_create flag if one of the parent directories is contained in the
+         * list. See also comments in setup_exec_directory() and issue #24783. */
+
+        if (d->n_items <= 1)
+                return;
+
+        typesafe_qsort(d->items, d->n_items, exec_directory_item_compare_func);
+
+        for (size_t i = 1; i < d->n_items; i++)
+                for (size_t j = 0; j < i; j++)
+                        if (path_startswith(d->items[i].path, d->items[j].path)) {
+                                d->items[i].only_create = true;
+                                break;
+                        }
+}
+
 DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(exec_set_credential_hash_ops, char, string_hash_func, string_compare_func, ExecSetCredential, exec_set_credential_free);
+DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(exec_load_credential_hash_ops, char, string_hash_func, string_compare_func, ExecLoadCredential, exec_load_credential_free);
 
 static const char* const exec_input_table[_EXEC_INPUT_MAX] = {
         [EXEC_INPUT_NULL] = "null",
@@ -6616,6 +7377,17 @@
 
 DEFINE_STRING_TABLE_LOOKUP(exec_directory_type, ExecDirectoryType);
 
+/* This table maps ExecDirectoryType to the symlink setting it is configured with in the unit */
+static const char* const exec_directory_type_symlink_table[_EXEC_DIRECTORY_TYPE_MAX] = {
+        [EXEC_DIRECTORY_RUNTIME]       = "RuntimeDirectorySymlink",
+        [EXEC_DIRECTORY_STATE]         = "StateDirectorySymlink",
+        [EXEC_DIRECTORY_CACHE]         = "CacheDirectorySymlink",
+        [EXEC_DIRECTORY_LOGS]          = "LogsDirectorySymlink",
+        [EXEC_DIRECTORY_CONFIGURATION] = "ConfigurationDirectorySymlink",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(exec_directory_type_symlink, ExecDirectoryType);
+
 /* And this table maps ExecDirectoryType too, but to a generic term identifying the type of resource. This
  * one is supposed to be generic enough to be used for unit types that don't use ExecContext and per-unit
  * directories, specifically .timer units with their timestamp touch file. */
diff --git a/src/core/execute.h b/src/core/execute.h
index 47349a6..325f340 100644
--- a/src/core/execute.h
+++ b/src/core/execute.h
@@ -23,7 +23,9 @@
 #include "namespace.h"
 #include "nsflags.h"
 #include "numa-util.h"
+#include "open-file.h"
 #include "path-util.h"
+#include "set.h"
 #include "time-util.h"
 
 #define EXEC_STDIN_DATA_MAX (64U*1024U*1024U)
@@ -132,9 +134,16 @@
         _EXEC_DIRECTORY_TYPE_INVALID = -EINVAL,
 } ExecDirectoryType;
 
+typedef struct ExecDirectoryItem {
+        char *path;
+        char **symlinks;
+        bool only_create;
+} ExecDirectoryItem;
+
 typedef struct ExecDirectory {
-        char **paths;
         mode_t mode;
+        size_t n_items;
+        ExecDirectoryItem *items;
 } ExecDirectory;
 
 typedef enum ExecCleanMask {
@@ -150,9 +159,16 @@
         _EXEC_CLEAN_MASK_INVALID = -EINVAL,
 } ExecCleanMask;
 
+/* A credential configured with LoadCredential= */
+typedef struct ExecLoadCredential {
+        char *id, *path;
+        bool encrypted;
+} ExecLoadCredential;
+
 /* A credential configured with SetCredential= */
 typedef struct ExecSetCredential {
         char *id;
+        bool encrypted;
         void *data;
         size_t size;
 } ExecSetCredential;
@@ -219,6 +235,9 @@
         bool tty_vhangup;
         bool tty_vt_disallocate;
 
+        unsigned tty_rows;
+        unsigned tty_cols;
+
         bool ignore_sigpipe;
 
         ExecKeyringMode keyring_mode;
@@ -247,6 +266,7 @@
         char *smack_process_label;
 
         char **read_write_paths, **read_only_paths, **inaccessible_paths, **exec_paths, **no_exec_paths;
+        char **exec_search_path;
         unsigned long mount_flags;
         BindMount *bind_mounts;
         size_t n_bind_mounts;
@@ -256,6 +276,7 @@
         size_t n_mount_images;
         MountImage *extension_images;
         size_t n_extension_images;
+        char **extension_directories;
 
         uint64_t capability_bounding_set;
         uint64_t capability_ambient_set;
@@ -267,6 +288,8 @@
 
         struct iovec* log_extra_fields;
         size_t n_log_extra_fields;
+        Set *log_filter_allowed_patterns;
+        Set *log_filter_denied_patterns;
 
         usec_t log_ratelimit_interval_usec;
         unsigned log_ratelimit_burst;
@@ -306,6 +329,9 @@
 
         unsigned long restrict_namespaces; /* The CLONE_NEWxyz flags permitted to the unit's processes */
 
+        Set *restrict_filesystems;
+        bool restrict_filesystems_allow_list:1;
+
         Hashmap *syscall_filter;
         Set *syscall_archs;
         int syscall_errno;
@@ -325,7 +351,7 @@
         usec_t timeout_clean_usec;
 
         Hashmap *set_credentials; /* output id → ExecSetCredential */
-        char **load_credentials; /* pairs of output id, path/input id */
+        Hashmap *load_credentials; /* output id → ExecLoadCredential */
 };
 
 static inline bool exec_context_restrict_namespaces_set(const ExecContext *c) {
@@ -334,6 +360,13 @@
         return (c->restrict_namespaces & NAMESPACE_FLAGS_ALL) != NAMESPACE_FLAGS_ALL;
 }
 
+static inline bool exec_context_restrict_filesystems_set(const ExecContext *c) {
+        assert(c);
+
+        return c->restrict_filesystems_allow_list ||
+          !set_isempty(c->restrict_filesystems);
+}
+
 static inline bool exec_context_with_rootfs(const ExecContext *c) {
         assert(c);
 
@@ -358,6 +391,7 @@
         EXEC_PASS_FDS              = 1 << 10,
         EXEC_SETENV_RESULT         = 1 << 11,
         EXEC_SET_WATCHDOG          = 1 << 12,
+        EXEC_SETENV_MONITOR_RESULT = 1 << 13, /* Pass exit status to OnFailure= and OnSuccess= dependencies. */
 } ExecFlags;
 
 /* Parameters for a specific invocation of a command. This structure is put together right before a command is
@@ -377,7 +411,8 @@
         const char *cgroup_path;
 
         char **prefix;
-        const char *received_credentials;
+        const char *received_credentials_directory;
+        const char *received_encrypted_credentials_directory;
 
         const char *confirm_spawn;
 
@@ -393,6 +428,8 @@
         int exec_fd;
 
         const char *notify_socket;
+
+        LIST_HEAD(OpenFile, open_files);
 };
 
 #include "unit.h"
@@ -422,6 +459,7 @@
 
 int exec_context_destroy_runtime_directory(const ExecContext *c, const char *runtime_root);
 int exec_context_destroy_credentials(const ExecContext *c, const char *runtime_root, const char *unit);
+int exec_context_destroy_mount_ns_dir(Unit *u);
 
 const char* exec_context_fdname(const ExecContext *c, int fd_index);
 
@@ -458,7 +496,15 @@
 ExecSetCredential *exec_set_credential_free(ExecSetCredential *sc);
 DEFINE_TRIVIAL_CLEANUP_FUNC(ExecSetCredential*, exec_set_credential_free);
 
+ExecLoadCredential *exec_load_credential_free(ExecLoadCredential *lc);
+DEFINE_TRIVIAL_CLEANUP_FUNC(ExecLoadCredential*, exec_load_credential_free);
+
+void exec_directory_done(ExecDirectory *d);
+int exec_directory_add(ExecDirectory *d, const char *path, const char *symlink);
+void exec_directory_sort(ExecDirectory *d);
+
 extern const struct hash_ops exec_set_credential_hash_ops;
+extern const struct hash_ops exec_load_credential_hash_ops;
 
 const char* exec_output_to_string(ExecOutput i) _const_;
 ExecOutput exec_output_from_string(const char *s) _pure_;
@@ -478,6 +524,9 @@
 const char* exec_directory_type_to_string(ExecDirectoryType i) _const_;
 ExecDirectoryType exec_directory_type_from_string(const char *s) _pure_;
 
+const char* exec_directory_type_symlink_to_string(ExecDirectoryType i) _const_;
+ExecDirectoryType exec_directory_type_symlink_from_string(const char *s) _pure_;
+
 const char* exec_resource_type_to_string(ExecDirectoryType i) _const_;
 ExecDirectoryType exec_resource_type_from_string(const char *s) _pure_;
 
diff --git a/src/core/fuzz-unit-file.c b/src/core/fuzz-unit-file.c
index aef29f4..7b39338 100644
--- a/src/core/fuzz-unit-file.c
+++ b/src/core/fuzz-unit-file.c
@@ -2,7 +2,6 @@
 
 #include "conf-parser.h"
 #include "fd-util.h"
-#include "fileio.h"
 #include "fuzz.h"
 #include "install.h"
 #include "load-fragment.h"
@@ -22,10 +21,11 @@
         const char *name;
         long offset;
 
-        if (size == 0)
+        if (outside_size_range(size, 0, 65536))
                 return 0;
 
-        f = fmemopen_unlocked((char*) data, size, "re");
+        f = data_to_file(data, size);
+
         assert_se(f);
 
         if (read_line(f, LINE_MAX, &p) < 0)
@@ -66,7 +66,7 @@
         if (!getenv("SYSTEMD_LOG_LEVEL"))
                 log_set_max_level(LOG_CRIT);
 
-        assert_se(manager_new(UNIT_FILE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0);
+        assert_se(manager_new(LOOKUP_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0);
 
         name = strjoina("a.", unit_type_to_string(t));
         assert_se(unit_new_for_name(m, unit_vtable[t]->object_size, name, &u) >= 0);
@@ -83,7 +83,7 @@
         assert_se(g);
 
         unit_dump(u, g, "");
-        manager_dump(m, g, ">>>");
+        manager_dump(m, g, /* patterns= */ NULL, ">>>");
 
         return 0;
 }
diff --git a/src/core/generator-setup.c b/src/core/generator-setup.c
index 9173951..00d6ad6 100644
--- a/src/core/generator-setup.c
+++ b/src/core/generator-setup.c
@@ -4,7 +4,7 @@
 
 #include "generator-setup.h"
 #include "macro.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "rm-rf.h"
 
 int lookup_paths_mkdir_generator(LookupPaths *p) {
diff --git a/src/core/ima-setup.c b/src/core/ima-setup.c
index 7f517a0..37916bb 100644
--- a/src/core/ima-setup.c
+++ b/src/core/ima-setup.c
@@ -23,7 +23,7 @@
 int ima_setup(void) {
 #if ENABLE_IMA
         _cleanup_fclose_ FILE *input = NULL;
-        _cleanup_close_ int imafd = -1;
+        _cleanup_close_ int imafd = -EBADF;
         unsigned lineno = 0;
         int r;
 
diff --git a/src/core/import-creds.c b/src/core/import-creds.c
new file mode 100644
index 0000000..ade509b
--- /dev/null
+++ b/src/core/import-creds.c
@@ -0,0 +1,730 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/mount.h>
+
+#include "copy.h"
+#include "creds-util.h"
+#include "escape.h"
+#include "fileio.h"
+#include "format-util.h"
+#include "fs-util.h"
+#include "hexdecoct.h"
+#include "initrd-util.h"
+#include "import-creds.h"
+#include "io-util.h"
+#include "mkdir-label.h"
+#include "mount-util.h"
+#include "mountpoint-util.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "proc-cmdline.h"
+#include "recurse-dir.h"
+#include "strv.h"
+#include "virt.h"
+
+/* This imports credentials passed in from environments higher up (VM manager, boot loader, …) and rearranges
+ * them so that later code can access them using our regular credential protocol
+ * (i.e. $CREDENTIALS_DIRECTORY). It's supposed to be minimal glue to unify behaviour how PID 1 (and
+ * generators invoked by it) can acquire credentials from outside, to mimic how we support it for containers,
+ * but on VM/physical environments.
+ *
+ * This does four things:
+ *
+ * 1. It imports credentials picked up by sd-boot (and placed in the /.extra/credentials/ dir in the initrd)
+ *    and puts them in /run/credentials/@encrypted/. Note that during the initrd→host transition the initrd root
+ *    file system is cleaned out, thus it is essential we pick up these files before they are deleted. Note
+ *    that these credentials originate from an untrusted source, i.e. the ESP and are not
+ *    pre-authenticated. They still have to be authenticated before use.
+ *
+ * 2. It imports credentials from /proc/cmdline and puts them in /run/credentials/@system/. These come from a
+ *    trusted environment (i.e. the boot loader), and are typically authenticated (if authentication is done
+ *    at all). However, they are world-readable, which might be less than ideal. Hence only use this for data
+ *    that doesn't require trust.
+ *
+ * 3. It imports credentials passed in through qemu's fw_cfg logic. Specifically, credential data passed in
+ *    /sys/firmware/qemu_fw_cfg/by_name/opt/io.systemd.credentials/ is picked up and also placed in
+ *    /run/credentials/@system/.
+ *
+ * 4. It imports credentials passed in via the DMI/SMBIOS OEM string tables, quite similar to fw_cfg. It
+ *    looks for strings starting with "io.systemd.credential:" and "io.systemd.credential.binary:". Both
+ *    expect a key=value assignment, but in the latter case the value is Base64 decoded, allowing binary
+ *    credentials to be passed in.
+ *
+ * If it picked up any credentials it will set the $CREDENTIALS_DIRECTORY and
+ * $ENCRYPTED_CREDENTIALS_DIRECTORY environment variables to point to these directories, so that processes
+ * can find them there later on. If "ramfs" is available $CREDENTIALS_DIRECTORY will be backed by it (but
+ * $ENCRYPTED_CREDENTIALS_DIRECTORY is just a regular tmpfs).
+ *
+ * Net result: the service manager can pick up trusted credentials from $CREDENTIALS_DIRECTORY afterwards,
+ * and untrusted ones from $ENCRYPTED_CREDENTIALS_DIRECTORY. */
+
+typedef struct ImportCredentialContext {
+        int target_dir_fd;
+        size_t size_sum;
+        unsigned n_credentials;
+} ImportCredentialContext;
+
+static void import_credentials_context_free(ImportCredentialContext *c) {
+        assert(c);
+
+        c->target_dir_fd = safe_close(c->target_dir_fd);
+}
+
+static int acquire_encrypted_credential_directory(ImportCredentialContext *c) {
+        int r;
+
+        assert(c);
+
+        if (c->target_dir_fd >= 0)
+                return c->target_dir_fd;
+
+        r = mkdir_safe_label(ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY, 0700, 0, 0, MKDIR_WARN_MODE);
+        if (r < 0)
+                return log_error_errno(r, "Failed to create " ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY ": %m");
+
+        c->target_dir_fd = open(ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+        if (c->target_dir_fd < 0)
+                return log_error_errno(errno, "Failed to open " ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY ": %m");
+
+        return c->target_dir_fd;
+}
+
+static int open_credential_file_for_write(int target_dir_fd, const char *dir_name, const char *n) {
+        int fd;
+
+        assert(target_dir_fd >= 0);
+        assert(dir_name);
+        assert(n);
+
+        fd = openat(target_dir_fd, n, O_WRONLY|O_CLOEXEC|O_CREAT|O_EXCL|O_NOFOLLOW, 0400);
+        if (fd < 0) {
+                if (errno == EEXIST) /* In case of EEXIST we'll only debug log! */
+                        return log_debug_errno(errno, "Credential '%s' set twice, ignoring.", n);
+
+                return log_error_errno(errno, "Failed to create %s/%s: %m", dir_name, n);
+        }
+
+        return fd;
+}
+
+static bool credential_size_ok(ImportCredentialContext *c, const char *name, uint64_t size) {
+        assert(c);
+        assert(name);
+
+        if (size > CREDENTIAL_SIZE_MAX) {
+                log_warning("Credential '%s' is larger than allowed limit (%s > %s), skipping.", name, FORMAT_BYTES(size), FORMAT_BYTES(CREDENTIAL_SIZE_MAX));
+                return false;
+        }
+
+        if (size > CREDENTIALS_TOTAL_SIZE_MAX - c->size_sum) {
+                log_warning("Accumulated credential size would be above allowed limit (%s+%s > %s), skipping '%s'.",
+                            FORMAT_BYTES(c->size_sum), FORMAT_BYTES(size), FORMAT_BYTES(CREDENTIALS_TOTAL_SIZE_MAX), name);
+                return false;
+        }
+
+        return true;
+}
+
+static int finalize_credentials_dir(const char *dir, const char *envvar) {
+        int r;
+
+        assert(dir);
+        assert(envvar);
+
+        /* Try to make the credentials directory read-only now */
+
+        r = make_mount_point(dir);
+        if (r < 0)
+                log_warning_errno(r, "Failed to make '%s' a mount point, ignoring: %m", dir);
+        else
+                (void) mount_nofollow_verbose(LOG_WARNING, NULL, dir, NULL, MS_BIND|MS_NODEV|MS_NOEXEC|MS_NOSUID|MS_RDONLY|MS_REMOUNT, NULL);
+
+        if (setenv(envvar, dir, /* overwrite= */ true) < 0)
+                return log_error_errno(errno, "Failed to set $%s environment variable: %m", envvar);
+
+        return 0;
+}
+
+static int import_credentials_boot(void) {
+        _cleanup_(import_credentials_context_free) ImportCredentialContext context = {
+                .target_dir_fd = -EBADF,
+        };
+        int r;
+
+        /* systemd-stub will wrap sidecar *.cred files from the UEFI kernel image directory into initrd
+         * cpios, so that they unpack into /.extra/. We'll pick them up from there and copy them into /run/
+         * so that we can access them during the entire runtime (note that the initrd file system is erased
+         * during the initrd → host transition). Note that these credentials originate from an untrusted
+         * source (i.e. the ESP typically) and thus need to be authenticated later. We thus put them in a
+         * directory separate from the usual credentials which are from a trusted source. */
+
+        if (!in_initrd())
+                return 0;
+
+        FOREACH_STRING(p,
+                       "/.extra/credentials/", /* specific to this boot menu */
+                       "/.extra/global_credentials/") { /* boot partition wide */
+
+                _cleanup_free_ DirectoryEntries *de = NULL;
+                _cleanup_close_ int source_dir_fd = -EBADF;
+
+                source_dir_fd = open(p, O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW);
+                if (source_dir_fd < 0) {
+                        if (errno == ENOENT) {
+                                log_debug("No credentials passed via %s.", p);
+                                continue;
+                        }
+
+                        log_warning_errno(errno, "Failed to open '%s', ignoring: %m", p);
+                        continue;
+                }
+
+                r = readdir_all(source_dir_fd, RECURSE_DIR_SORT|RECURSE_DIR_IGNORE_DOT, &de);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to read '%s' contents, ignoring: %m", p);
+                        continue;
+                }
+
+                for (size_t i = 0; i < de->n_entries; i++) {
+                        const struct dirent *d = de->entries[i];
+                        _cleanup_close_ int cfd = -EBADF, nfd = -EBADF;
+                        _cleanup_free_ char *n = NULL;
+                        const char *e;
+                        struct stat st;
+
+                        e = endswith(d->d_name, ".cred");
+                        if (!e)
+                                continue;
+
+                        /* drop .cred suffix (which we want in the ESP sidecar dir, but not for our internal
+                         * processing) */
+                        n = strndup(d->d_name, e - d->d_name);
+                        if (!n)
+                                return log_oom();
+
+                        if (!credential_name_valid(n)) {
+                                log_warning("Credential '%s' has invalid name, ignoring.", d->d_name);
+                                continue;
+                        }
+
+                        cfd = openat(source_dir_fd, d->d_name, O_RDONLY|O_CLOEXEC);
+                        if (cfd < 0) {
+                                log_warning_errno(errno, "Failed to open %s, ignoring: %m", d->d_name);
+                                continue;
+                        }
+
+                        if (fstat(cfd, &st) < 0) {
+                                log_warning_errno(errno, "Failed to stat %s, ignoring: %m", d->d_name);
+                                continue;
+                        }
+
+                        r = stat_verify_regular(&st);
+                        if (r < 0) {
+                                log_warning_errno(r, "Credential file %s is not a regular file, ignoring: %m", d->d_name);
+                                continue;
+                        }
+
+                        if (!credential_size_ok(&context, n, st.st_size))
+                                continue;
+
+                        r = acquire_encrypted_credential_directory(&context);
+                        if (r < 0)
+                                return r;
+
+                        nfd = open_credential_file_for_write(context.target_dir_fd, ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY, n);
+                        if (nfd == -EEXIST)
+                                continue;
+                        if (nfd < 0)
+                                return nfd;
+
+                        r = copy_bytes(cfd, nfd, st.st_size, 0);
+                        if (r < 0) {
+                                (void) unlinkat(context.target_dir_fd, n, 0);
+                                return log_error_errno(r, "Failed to create credential '%s': %m", n);
+                        }
+
+                        context.size_sum += st.st_size;
+                        context.n_credentials++;
+
+                        log_debug("Successfully copied boot credential '%s'.", n);
+                }
+        }
+
+        if (context.n_credentials > 0) {
+                log_debug("Imported %u credentials from boot loader.", context.n_credentials);
+
+                r = finalize_credentials_dir(ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY, "ENCRYPTED_CREDENTIALS_DIRECTORY");
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int acquire_credential_directory(ImportCredentialContext *c) {
+        int r;
+
+        assert(c);
+
+        if (c->target_dir_fd >= 0)
+                return c->target_dir_fd;
+
+        r = path_is_mount_point(SYSTEM_CREDENTIALS_DIRECTORY, NULL, 0);
+        if (r < 0) {
+                if (r != -ENOENT)
+                        return log_error_errno(r, "Failed to determine if " SYSTEM_CREDENTIALS_DIRECTORY " is a mount point: %m");
+
+                r = mkdir_safe_label(SYSTEM_CREDENTIALS_DIRECTORY, 0700, 0, 0, MKDIR_WARN_MODE);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to create " SYSTEM_CREDENTIALS_DIRECTORY " mount point: %m");
+
+                r = 0; /* Now it exists and is not a mount point */
+        }
+        if (r == 0)
+                /* If not a mountpoint yet, try to mount a ramfs there (so that this stuff isn't swapped
+                 * out), but if that doesn't work, let's just use the regular tmpfs it already is. */
+                (void) mount_nofollow_verbose(LOG_WARNING, "ramfs", SYSTEM_CREDENTIALS_DIRECTORY, "ramfs", MS_NODEV|MS_NOEXEC|MS_NOSUID, "mode=0700");
+
+        c->target_dir_fd = open(SYSTEM_CREDENTIALS_DIRECTORY, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+        if (c->target_dir_fd < 0)
+                return log_error_errno(errno, "Failed to open " SYSTEM_CREDENTIALS_DIRECTORY ": %m");
+
+        return c->target_dir_fd;
+}
+
+static int proc_cmdline_callback(const char *key, const char *value, void *data) {
+        ImportCredentialContext *c = ASSERT_PTR(data);
+        _cleanup_free_ char *n = NULL;
+        _cleanup_close_ int nfd = -EBADF;
+        const char *colon;
+        size_t l;
+        int r;
+
+        assert(key);
+
+        if (!proc_cmdline_key_streq(key, "systemd.set_credential"))
+                return 0;
+
+        colon = value ? strchr(value, ':') : NULL;
+        if (!colon) {
+                log_warning("Credential assignment through kernel command line lacks ':' character, ignoring: %s", value);
+                return 0;
+        }
+
+        n = strndup(value, colon - value);
+        if (!n)
+                return log_oom();
+
+        if (!credential_name_valid(n)) {
+                log_warning("Credential name '%s' is invalid, ignoring.", n);
+                return 0;
+        }
+
+        colon++;
+        l = strlen(colon);
+
+        if (!credential_size_ok(c, n, l))
+                return 0;
+
+        r = acquire_credential_directory(c);
+        if (r < 0)
+                return r;
+
+        nfd = open_credential_file_for_write(c->target_dir_fd, SYSTEM_CREDENTIALS_DIRECTORY, n);
+        if (nfd == -EEXIST)
+                return 0;
+        if (nfd < 0)
+                return nfd;
+
+        r = loop_write(nfd, colon, l, /* do_poll= */ false);
+        if (r < 0) {
+                (void) unlinkat(c->target_dir_fd, n, 0);
+                return log_error_errno(r, "Failed to write credential: %m");
+        }
+
+        c->size_sum += l;
+        c->n_credentials++;
+
+        log_debug("Successfully processed kernel command line credential '%s'.", n);
+
+        return 0;
+}
+
+static int import_credentials_proc_cmdline(ImportCredentialContext *c) {
+        int r;
+
+        assert(c);
+
+        r = proc_cmdline_parse(proc_cmdline_callback, c, 0);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse /proc/cmdline: %m");
+
+        return 0;
+}
+
+#define QEMU_FWCFG_PATH "/sys/firmware/qemu_fw_cfg/by_name/opt/io.systemd.credentials"
+
+static int import_credentials_qemu(ImportCredentialContext *c) {
+        _cleanup_free_ DirectoryEntries *de = NULL;
+        _cleanup_close_ int source_dir_fd = -EBADF;
+        int r;
+
+        assert(c);
+
+        if (detect_container() > 0) /* don't access /sys/ in a container */
+                return 0;
+
+        source_dir_fd = open(QEMU_FWCFG_PATH, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+        if (source_dir_fd < 0) {
+                if (errno == ENOENT) {
+                        log_debug("No credentials passed via fw_cfg.");
+                        return 0;
+                }
+
+                log_warning_errno(errno, "Failed to open '" QEMU_FWCFG_PATH "', ignoring: %m");
+                return 0;
+        }
+
+        r = readdir_all(source_dir_fd, RECURSE_DIR_SORT|RECURSE_DIR_IGNORE_DOT, &de);
+        if (r < 0) {
+                log_warning_errno(r, "Failed to read '" QEMU_FWCFG_PATH "' contents, ignoring: %m");
+                return 0;
+        }
+
+        for (size_t i = 0; i < de->n_entries; i++) {
+                const struct dirent *d = de->entries[i];
+                _cleanup_close_ int vfd = -EBADF, rfd = -EBADF, nfd = -EBADF;
+                _cleanup_free_ char *szs = NULL;
+                uint64_t sz;
+
+                if (!credential_name_valid(d->d_name)) {
+                        log_warning("Credential '%s' has invalid name, ignoring.", d->d_name);
+                        continue;
+                }
+
+                vfd = openat(source_dir_fd, d->d_name, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+                if (vfd < 0) {
+                        log_warning_errno(errno, "Failed to open '" QEMU_FWCFG_PATH "'/%s/, ignoring: %m", d->d_name);
+                        continue;
+                }
+
+                r = read_virtual_file_at(vfd, "size", LINE_MAX, &szs, NULL);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to read '" QEMU_FWCFG_PATH "'/%s/size, ignoring: %m", d->d_name);
+                        continue;
+                }
+
+                r = safe_atou64(strstrip(szs), &sz);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to parse size of credential '%s', ignoring: %s", d->d_name, szs);
+                        continue;
+                }
+
+                if (!credential_size_ok(c, d->d_name, sz))
+                        continue;
+
+                /* Ideally we'd just symlink the data here. Alas the kernel driver exports the raw file as
+                 * having size zero, and we'd rather not have applications support such credential
+                 * files. Let's hence copy the files to make them regular. */
+
+                rfd = openat(vfd, "raw", O_RDONLY|O_CLOEXEC);
+                if (rfd < 0) {
+                        log_warning_errno(errno, "Failed to open '" QEMU_FWCFG_PATH "'/%s/raw, ignoring: %m", d->d_name);
+                        continue;
+                }
+
+                r = acquire_credential_directory(c);
+                if (r < 0)
+                        return r;
+
+                nfd = open_credential_file_for_write(c->target_dir_fd, SYSTEM_CREDENTIALS_DIRECTORY, d->d_name);
+                if (nfd == -EEXIST)
+                        continue;
+                if (nfd < 0)
+                        return nfd;
+
+                r = copy_bytes(rfd, nfd, sz, 0);
+                if (r < 0) {
+                        (void) unlinkat(c->target_dir_fd, d->d_name, 0);
+                        return log_error_errno(r, "Failed to create credential '%s': %m", d->d_name);
+                }
+
+                c->size_sum += sz;
+                c->n_credentials++;
+
+                log_debug("Successfully copied qemu fw_cfg credential '%s'.", d->d_name);
+        }
+
+        return 0;
+}
+
+static int parse_smbios_strings(ImportCredentialContext *c, const char *data, size_t size) {
+        size_t left, skip;
+        const char *p;
+        int r;
+
+        assert(c);
+        assert(data || size == 0);
+
+        /* Unpacks a packed series of SMBIOS OEM vendor strings. These are a series of NUL terminated
+         * strings, one after the other. */
+
+        for (p = data, left = size; left > 0; p += skip, left -= skip) {
+                _cleanup_free_ void *buf = NULL;
+                _cleanup_free_ char *cn = NULL;
+                _cleanup_close_ int nfd = -EBADF;
+                const char *nul, *n, *eq;
+                const void *cdata;
+                size_t buflen, cdata_len;
+                bool unbase64;
+
+                nul = memchr(p, 0, left);
+                if (nul)
+                        skip = (nul - p) + 1;
+                else {
+                        nul = p + left;
+                        skip = left;
+                }
+
+                if (nul - p == 0) /* Skip empty strings */
+                        continue;
+
+                /* Only care about strings starting with either of these two prefixes */
+                if ((n = memory_startswith(p, nul - p, "io.systemd.credential:")))
+                        unbase64 = false;
+                else if ((n = memory_startswith(p, nul - p, "io.systemd.credential.binary:")))
+                        unbase64 = true;
+                else {
+                        _cleanup_free_ char *escaped = NULL;
+
+                        escaped = cescape_length(p, nul - p);
+                        log_debug("Ignoring OEM string: %s", strnull(escaped));
+                        continue;
+                }
+
+                eq = memchr(n, '=', nul - n);
+                if (!eq) {
+                        log_warning("SMBIOS OEM string lacks '=' character, ignoring.");
+                        continue;
+                }
+
+                cn = memdup_suffix0(n, eq - n);
+                if (!cn)
+                        return log_oom();
+
+                if (!credential_name_valid(cn)) {
+                        log_warning("SMBIOS credential name '%s' is not valid, ignoring: %m", cn);
+                        continue;
+                }
+
+                /* Optionally base64 decode the data, if requested, to allow binary credentials */
+                if (unbase64) {
+                        r = unbase64mem(eq + 1, nul - (eq + 1), &buf, &buflen);
+                        if (r < 0) {
+                                log_warning_errno(r, "Failed to base64 decode credential '%s', ignoring: %m", cn);
+                                continue;
+                        }
+
+                        cdata = buf;
+                        cdata_len = buflen;
+                } else {
+                        cdata = eq + 1;
+                        cdata_len = nul - (eq + 1);
+                }
+
+                if (!credential_size_ok(c, cn, cdata_len))
+                        continue;
+
+                r = acquire_credential_directory(c);
+                if (r < 0)
+                        return r;
+
+                nfd = open_credential_file_for_write(c->target_dir_fd, SYSTEM_CREDENTIALS_DIRECTORY, cn);
+                if (nfd == -EEXIST)
+                        continue;
+                if (nfd < 0)
+                        return nfd;
+
+                r = loop_write(nfd, cdata, cdata_len, /* do_poll= */ false);
+                if (r < 0) {
+                        (void) unlinkat(c->target_dir_fd, cn, 0);
+                        return log_error_errno(r, "Failed to write credential: %m");
+                }
+
+                c->size_sum += cdata_len;
+                c->n_credentials++;
+
+                log_debug("Successfully processed SMBIOS credential '%s'.", cn);
+        }
+
+        return 0;
+}
+
+static int import_credentials_smbios(ImportCredentialContext *c) {
+        int r;
+
+        /* Parses DMI OEM strings fields (SMBIOS type 11), as settable with qemu's -smbios type=11,value=… switch. */
+
+        if (detect_container() > 0) /* don't access /sys/ in a container */
+                return 0;
+
+        for (unsigned i = 0;; i++) {
+                struct dmi_field_header {
+                        uint8_t type;
+                        uint8_t length;
+                        uint16_t handle;
+                        uint8_t count;
+                        char contents[];
+                } _packed_ *dmi_field_header;
+                _cleanup_free_ char *p = NULL;
+                _cleanup_free_ void *data = NULL;
+                size_t size;
+
+                assert_cc(offsetof(struct dmi_field_header, contents) == 5);
+
+                if (asprintf(&p, "/sys/firmware/dmi/entries/11-%u/raw", i) < 0)
+                        return log_oom();
+
+                r = read_virtual_file(p, sizeof(dmi_field_header) + CREDENTIALS_TOTAL_SIZE_MAX, (char**) &data, &size);
+                if (r < 0) {
+                        /* Once we reach ENOENT there are no more DMI Type 11 fields around. */
+                        log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r, "Failed to open '%s', ignoring: %m", p);
+                        break;
+                }
+
+                if (size < offsetof(struct dmi_field_header, contents))
+                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "DMI field header of '%s' too short.", p);
+
+                dmi_field_header = data;
+                if (dmi_field_header->type != 11 ||
+                    dmi_field_header->length != offsetof(struct dmi_field_header, contents))
+                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Invalid DMI field header.");
+
+                r = parse_smbios_strings(c, dmi_field_header->contents, size - offsetof(struct dmi_field_header, contents));
+                if (r < 0)
+                        return r;
+
+                if (i == UINT_MAX) /* Prevent overflow */
+                        break;
+        }
+
+        return 0;
+}
+
+static int import_credentials_trusted(void) {
+        _cleanup_(import_credentials_context_free) ImportCredentialContext c = {
+                .target_dir_fd = -EBADF,
+        };
+        int q, w, r;
+
+        r = import_credentials_qemu(&c);
+        w = import_credentials_smbios(&c);
+        q = import_credentials_proc_cmdline(&c);
+
+        if (c.n_credentials > 0) {
+                int z;
+
+                log_debug("Imported %u credentials from kernel command line/smbios/fw_cfg.", c.n_credentials);
+
+                z = finalize_credentials_dir(SYSTEM_CREDENTIALS_DIRECTORY, "CREDENTIALS_DIRECTORY");
+                if (z < 0)
+                        return z;
+        }
+
+        return r < 0 ? r : w < 0 ? w : q;
+}
+
+static int symlink_credential_dir(const char *envvar, const char *path, const char *where) {
+        int r;
+
+        assert(envvar);
+        assert(path);
+        assert(where);
+
+        if (!path_is_valid(path) || !path_is_absolute(path))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "String specified via $%s is not a valid absolute path, refusing: %s", envvar, path);
+
+        /* If the env var already points to where we intend to create the symlink, then most likely we
+         * already imported some creds earlier, and thus set the env var, and hence don't need to do
+         * anything. */
+        if (path_equal(path, where))
+                return 0;
+
+        r = symlink_idempotent(path, where, /* make_relative= */ true);
+        if (r < 0)
+                return log_error_errno(r, "Failed to link $%s to %s: %m", envvar, where);
+
+        return 0;
+}
+
+int import_credentials(void) {
+        const char *received_creds_dir = NULL, *received_encrypted_creds_dir = NULL;
+        bool envvar_set = false;
+        int r, q;
+
+        r = get_credentials_dir(&received_creds_dir);
+        if (r < 0 && r != -ENXIO) /* ENXIO → env var not set yet */
+                log_warning_errno(r, "Failed to determine credentials directory, ignoring: %m");
+
+        envvar_set = r >= 0;
+
+        r = get_encrypted_credentials_dir(&received_encrypted_creds_dir);
+        if (r < 0 && r != -ENXIO) /* ENXIO → env var not set yet */
+                log_warning_errno(r, "Failed to determine encrypted credentials directory, ignoring: %m");
+
+        envvar_set = envvar_set || r >= 0;
+
+        if (envvar_set) {
+                /* Maybe an earlier stage initrd already set this up? If so, don't try to import anything again. */
+                log_debug("Not importing credentials, $CREDENTIALS_DIRECTORY or $ENCRYPTED_CREDENTIALS_DIRECTORY already set.");
+
+                /* But, let's make sure the creds are available from our regular paths. */
+                if (received_creds_dir)
+                        r = symlink_credential_dir("CREDENTIALS_DIRECTORY", received_creds_dir, SYSTEM_CREDENTIALS_DIRECTORY);
+                else
+                        r = 0;
+
+                if (received_encrypted_creds_dir) {
+                        q = symlink_credential_dir("ENCRYPTED_CREDENTIALS_DIRECTORY", received_encrypted_creds_dir, ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY);
+                        if (r >= 0)
+                                r = q;
+                }
+
+        } else {
+                _cleanup_free_ char *v = NULL;
+
+                r = proc_cmdline_get_key("systemd.import_credentials", PROC_CMDLINE_STRIP_RD_PREFIX, &v);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to check if 'systemd.import_credentials=' kernel command line option is set, ignoring: %m");
+                else if (r > 0) {
+                        r = parse_boolean(v);
+                        if (r < 0)
+                                log_debug_errno(r, "Failed to parse 'systemd.import_credentials=' parameter, ignoring: %m");
+                        else if (r == 0) {
+                                log_notice("systemd.import_credentials=no is set, skipping importing of credentials.");
+                                return 0;
+                        }
+                }
+
+                r = import_credentials_boot();
+
+                q = import_credentials_trusted();
+                if (r >= 0)
+                        r = q;
+        }
+
+        if (r >= 0) {
+                _cleanup_free_ char *address = NULL;
+
+                r = read_credential("vmm.notify_socket", (void **)&address, /* ret_size= */ NULL);
+                if (r < 0 && !IN_SET(r, -ENOENT, -ENXIO))
+                        log_warning_errno(r, "Failed to read 'vmm.notify_socket' credential, ignoring: %m");
+                else if (r >= 0 && !isempty(address)) {
+                        r = setenv("NOTIFY_SOCKET", address, /* replace= */ 1);
+                        if (r < 0)
+                                log_warning_errno(errno, "Failed to set $NOTIFY_SOCKET environment variable, ignoring: %m");
+                }
+        }
+
+        return r;
+}
diff --git a/src/core/import-creds.h b/src/core/import-creds.h
new file mode 100644
index 0000000..a87865c
--- /dev/null
+++ b/src/core/import-creds.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int import_credentials(void);
diff --git a/src/core/ip-address-access.c b/src/core/ip-address-access.c
deleted file mode 100644
index a11251e..0000000
--- a/src/core/ip-address-access.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "alloc-util.h"
-#include "bpf-firewall.h"
-#include "extract-word.h"
-#include "hostname-util.h"
-#include "ip-address-access.h"
-#include "parse-util.h"
-#include "string-util.h"
-
-int config_parse_ip_address_access(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        IPAddressAccessItem **list = data;
-        const char *p;
-        int r;
-
-        assert(list);
-
-        if (isempty(rvalue)) {
-                *list = ip_address_access_free_all(*list);
-                return 0;
-        }
-
-        p = rvalue;
-
-        for (;;) {
-                _cleanup_free_ IPAddressAccessItem *a = NULL;
-                _cleanup_free_ char *word = NULL;
-
-                r = extract_first_word(&p, &word, NULL, 0);
-                if (r == 0)
-                        break;
-                if (r == -ENOMEM)
-                        return log_oom();
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r, "Invalid syntax, ignoring: %s", rvalue);
-                        break;
-                }
-
-                a = new0(IPAddressAccessItem, 1);
-                if (!a)
-                        return log_oom();
-
-                if (streq(word, "any")) {
-                        /* "any" is a shortcut for 0.0.0.0/0 and ::/0 */
-
-                        a->family = AF_INET;
-                        LIST_APPEND(items, *list, a);
-
-                        a = new0(IPAddressAccessItem, 1);
-                        if (!a)
-                                return log_oom();
-
-                        a->family = AF_INET6;
-
-                } else if (is_localhost(word)) {
-                        /* "localhost" is a shortcut for 127.0.0.0/8 and ::1/128 */
-
-                        a->family = AF_INET;
-                        a->address.in.s_addr = htobe32(0x7f000000);
-                        a->prefixlen = 8;
-                        LIST_APPEND(items, *list, a);
-
-                        a = new0(IPAddressAccessItem, 1);
-                        if (!a)
-                                return log_oom();
-
-                        a->family = AF_INET6;
-                        a->address.in6 = (struct in6_addr) IN6ADDR_LOOPBACK_INIT;
-                        a->prefixlen = 128;
-
-                } else if (streq(word, "link-local")) {
-
-                        /* "link-local" is a shortcut for 169.254.0.0/16 and fe80::/64 */
-
-                        a->family = AF_INET;
-                        a->address.in.s_addr = htobe32((UINT32_C(169) << 24 | UINT32_C(254) << 16));
-                        a->prefixlen = 16;
-                        LIST_APPEND(items, *list, a);
-
-                        a = new0(IPAddressAccessItem, 1);
-                        if (!a)
-                                return log_oom();
-
-                        a->family = AF_INET6;
-                        a->address.in6 = (struct in6_addr) {
-                                .s6_addr32[0] = htobe32(0xfe800000)
-                        };
-                        a->prefixlen = 64;
-
-                } else if (streq(word, "multicast")) {
-
-                        /* "multicast" is a shortcut for 224.0.0.0/4 and ff00::/8 */
-
-                        a->family = AF_INET;
-                        a->address.in.s_addr = htobe32((UINT32_C(224) << 24));
-                        a->prefixlen = 4;
-                        LIST_APPEND(items, *list, a);
-
-                        a = new0(IPAddressAccessItem, 1);
-                        if (!a)
-                                return log_oom();
-
-                        a->family = AF_INET6;
-                        a->address.in6 = (struct in6_addr) {
-                                .s6_addr32[0] = htobe32(0xff000000)
-                        };
-                        a->prefixlen = 8;
-
-                } else {
-                        r = in_addr_prefix_from_string_auto(word, &a->family, &a->address, &a->prefixlen);
-                        if (r < 0) {
-                                log_syntax(unit, LOG_WARNING, filename, line, r, "Address prefix is invalid, ignoring assignment: %s", word);
-                                return 0;
-                        }
-                }
-
-                LIST_APPEND(items, *list, a);
-                a = NULL;
-        }
-
-        *list = ip_address_access_reduce(*list);
-
-        return 0;
-}
-
-IPAddressAccessItem* ip_address_access_free_all(IPAddressAccessItem *first) {
-        IPAddressAccessItem *next, *p = first;
-
-        while (p) {
-                next = p->items_next;
-                free(p);
-
-                p = next;
-        }
-
-        return NULL;
-}
-
-IPAddressAccessItem* ip_address_access_reduce(IPAddressAccessItem *first) {
-        IPAddressAccessItem *a, *b, *tmp;
-        int r;
-
-        /* Drops all entries from the list that are covered by another entry in full, thus removing all redundant
-         * entries. */
-
-        LIST_FOREACH_SAFE(items, a, tmp, first) {
-
-                /* Drop irrelevant bits */
-                (void) in_addr_mask(a->family, &a->address, a->prefixlen);
-
-                LIST_FOREACH(items, b, first) {
-
-                        if (a == b)
-                                continue;
-
-                        if (a->family != b->family)
-                                continue;
-
-                        if (b->prefixlen > a->prefixlen)
-                                continue;
-
-                        r = in_addr_prefix_covers(b->family,
-                                                  &b->address,
-                                                  b->prefixlen,
-                                                  &a->address);
-                        if (r > 0) {
-                                /* b covers a fully, then let's drop a */
-                                LIST_REMOVE(items, first, a);
-                                free(a);
-                                break;
-                        }
-                }
-        }
-
-        return first;
-}
-
-bool ip_address_access_item_is_any(IPAddressAccessItem *first) {
-        /* Check for exactly two entries */
-        if (!first || !first->items_next || first->items_next->items_next)
-                return false;
-
-        /* Check both entries cover the full range */
-        if (first->prefixlen != 0 || first->items_next->prefixlen != 0)
-                return false;
-
-        /* Check that one of them is the IPv4 and the other IPv6 */
-        if (!((first->family == AF_INET && first->items_next->family == AF_INET6) ||
-                                (first->family == AF_INET6 && first->items_next->family == AF_INET)))
-                return false;
-
-        /* No need to check the actual addresses, they don't matter if the prefix is zero */
-        return true;
-}
diff --git a/src/core/ip-address-access.h b/src/core/ip-address-access.h
deleted file mode 100644
index 71b5459..0000000
--- a/src/core/ip-address-access.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include "conf-parser.h"
-#include "in-addr-util.h"
-#include "list.h"
-
-typedef struct IPAddressAccessItem IPAddressAccessItem;
-
-struct IPAddressAccessItem {
-        int family;
-        unsigned char prefixlen;
-        union in_addr_union address;
-        LIST_FIELDS(IPAddressAccessItem, items);
-};
-
-CONFIG_PARSER_PROTOTYPE(config_parse_ip_address_access);
-
-IPAddressAccessItem* ip_address_access_free_all(IPAddressAccessItem *first);
-
-IPAddressAccessItem* ip_address_access_reduce(IPAddressAccessItem *first);
-
-/* Returns true if a list consists of only the two items necessary for "any"
- * (0.0.0.0/0 and ::/0). */
-bool ip_address_access_item_is_any(IPAddressAccessItem *first);
diff --git a/src/core/job.c b/src/core/job.c
index eb6728a..334fbf7 100644
--- a/src/core/job.c
+++ b/src/core/job.c
@@ -104,6 +104,8 @@
         sd_bus_track_unref(j->bus_track);
         strv_free(j->deserialized_clients);
 
+        activation_details_unref(j->activation_details);
+
         return mfree(j);
 }
 
@@ -140,7 +142,7 @@
 
         job_set_state(j, JOB_WAITING);
 
-        pj = (j->type == JOB_NOP) ? &j->unit->nop_job : &j->unit->job;
+        pj = j->type == JOB_NOP ? &j->unit->nop_job : &j->unit->job;
         assert(*pj == j);
 
         /* Detach from next 'bigger' objects */
@@ -180,9 +182,13 @@
         assert(j->installed);
         assert(j->unit == other->unit);
 
-        if (j->type != JOB_NOP)
+        if (j->type != JOB_NOP) {
                 assert_se(job_type_merge_and_collapse(&j->type, other->type, j->unit) == 0);
-        else
+
+                /* Keep the oldest ActivationDetails, if any */
+                if (!j->activation_details)
+                        j->activation_details = TAKE_PTR(other->activation_details);
+        } else
                 assert(other->type == JOB_NOP);
 
         j->irreversible = j->irreversible || other->irreversible;
@@ -197,7 +203,7 @@
         assert(j->type < _JOB_TYPE_MAX_IN_TRANSACTION);
         assert(j->state == JOB_WAITING);
 
-        pj = (j->type == JOB_NOP) ? &j->unit->nop_job : &j->unit->job;
+        pj = j->type == JOB_NOP ? &j->unit->nop_job : &j->unit->job;
         uj = *pj;
 
         if (uj) {
@@ -258,7 +264,7 @@
                                        "Invalid job type %s in deserialization.",
                                        strna(job_type_to_string(j->type)));
 
-        pj = (j->type == JOB_NOP) ? &j->unit->nop_job : &j->unit->job;
+        pj = j->type == JOB_NOP ? &j->unit->nop_job : &j->unit->job;
         if (*pj)
                 return log_unit_debug_errno(j->unit, SYNTHETIC_ERRNO(EEXIST),
                                             "Unit already has a job installed. Not installing deserialized job.");
@@ -400,14 +406,28 @@
                         b == UNIT_RELOADING;
 
         case JOB_RESTART:
-                return
-                        b == UNIT_ACTIVATING;
+                /* Restart jobs must always be kept.
+                 *
+                 * For ACTIVE/RELOADING units, this is obvious.
+                 *
+                 * For ACTIVATING units, it's more subtle:
+                 *
+                 * Generally, if a service Requires= another unit, restarts of
+                 * the unit must be propagated to the service. If the service is
+                 * ACTIVATING, it must still be restarted since it might have
+                 * stale information regarding the other unit.
+                 *
+                 * For example, consider a service that Requires= a socket: if
+                 * the socket is restarted, but the service is still ACTIVATING,
+                 * it's necessary to restart the service so that it gets the new
+                 * socket. */
+                return false;
 
         case JOB_NOP:
                 return true;
 
         default:
-                assert_not_reached("Invalid job type");
+                assert_not_reached();
         }
 }
 
@@ -417,8 +437,12 @@
         switch (t) {
 
         case JOB_TRY_RESTART:
+                /* Be sure to keep the restart job even if the unit is
+                 * ACTIVATING.
+                 *
+                 * See the job_type_is_redundant(JOB_RESTART) for more info */
                 s = unit_active_state(u);
-                if (!UNIT_IS_ACTIVE_OR_RELOADING(s))
+                if (!UNIT_IS_ACTIVE_OR_ACTIVATING(s))
                         return JOB_NOP;
 
                 return JOB_RESTART;
@@ -604,7 +628,7 @@
         assert(t >= 0);
         assert(t < _JOB_TYPE_MAX);
 
-        /* Show condition check message if the job did not actually do anything due to failed condition. */
+        /* Show condition check message if the job did not actually do anything due to unmet condition. */
         if (t == JOB_START && result == JOB_DONE && !u->condition_result)
                 return "Condition check resulted in %s being skipped.";
 
@@ -696,7 +720,7 @@
         bool console_only = do_console && log_on_console();
 
         if (t == JOB_START && result == JOB_DONE && !u->condition_result) {
-                /* No message on the console if the job did not actually do anything due to failed condition. */
+                /* No message on the console if the job did not actually do anything due to unmet condition. */
                 if (console_only)
                         return;
                 else
@@ -705,19 +729,51 @@
 
         if (!console_only) {  /* Skip printing if output goes to the console, and job_print_status_message()
                                * will actually print something to the console. */
-
+                Condition *c;
                 const char *mid = job_done_mid(t, result);  /* mid may be NULL. log_unit_struct() will ignore it. */
-                const char *msg_fmt = strjoina("MESSAGE=", format);
 
-                DISABLE_WARNING_FORMAT_NONLITERAL;
-                log_unit_struct(u, job_done_messages[result].log_level,
-                                msg_fmt, ident,
-                                "JOB_ID=%" PRIu32, job_id,
-                                "JOB_TYPE=%s", job_type_to_string(t),
-                                "JOB_RESULT=%s", job_result_to_string(result),
-                                LOG_UNIT_INVOCATION_ID(u),
-                                mid);
-                REENABLE_WARNING;
+                c = t == JOB_START && result == JOB_DONE ? unit_find_failed_condition(u) : NULL;
+                if (c) {
+                        /* Special case units that were skipped because of a unmet condition check so that
+                         * we can add more information to the message. */
+                        if (c->trigger)
+                                log_unit_struct(
+                                        u,
+                                        job_done_messages[result].log_level,
+                                        LOG_MESSAGE("%s was skipped because no trigger condition checks were met.",
+                                                    ident),
+                                        "JOB_ID=%" PRIu32, job_id,
+                                        "JOB_TYPE=%s", job_type_to_string(t),
+                                        "JOB_RESULT=%s", job_result_to_string(result),
+                                        LOG_UNIT_INVOCATION_ID(u),
+                                        mid);
+                        else
+                                log_unit_struct(
+                                        u,
+                                        job_done_messages[result].log_level,
+                                        LOG_MESSAGE("%s was skipped because of an unmet condition check (%s=%s%s).",
+                                                    ident,
+                                                    condition_type_to_string(c->type),
+                                                    c->negate ? "!" : "",
+                                                    c->parameter),
+                                        "JOB_ID=%" PRIu32, job_id,
+                                        "JOB_TYPE=%s", job_type_to_string(t),
+                                        "JOB_RESULT=%s", job_result_to_string(result),
+                                        LOG_UNIT_INVOCATION_ID(u),
+                                        mid);
+                } else {
+                        const char *msg_fmt = strjoina("MESSAGE=", format);
+
+                        DISABLE_WARNING_FORMAT_NONLITERAL;
+                        log_unit_struct(u, job_done_messages[result].log_level,
+                                        msg_fmt, ident,
+                                        "JOB_ID=%" PRIu32, job_id,
+                                        "JOB_TYPE=%s", job_type_to_string(t),
+                                        "JOB_RESULT=%s", job_result_to_string(result),
+                                        LOG_UNIT_INVOCATION_ID(u),
+                                        mid);
+                        REENABLE_WARNING;
+                }
         }
 
         if (do_console) {
@@ -744,6 +800,7 @@
 }
 
 static int job_perform_on_unit(Job **j) {
+        ActivationDetails *a;
         uint32_t id;
         Manager *m;
         JobType t;
@@ -763,10 +820,11 @@
         u = (*j)->unit;
         t = (*j)->type;
         id = (*j)->id;
+        a = (*j)->activation_details;
 
         switch (t) {
                 case JOB_START:
-                        r = unit_start(u);
+                        r = unit_start(u, a);
                         break;
 
                 case JOB_RESTART:
@@ -781,7 +839,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Invalid job type");
+                        assert_not_reached();
         }
 
         /* Log if the job still exists and the start/stop/reload function actually did something. Note that this means
@@ -849,7 +907,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unknown job type");
+                        assert_not_reached();
         }
 
         if (j) {
@@ -857,7 +915,7 @@
                         job_set_state(j, JOB_WAITING); /* Hmm, not ready after all, let's return to JOB_WAITING state */
                 else if (r == -EALREADY) /* already being executed */
                         r = job_finish_and_invalidate(j, JOB_DONE, true, true);
-                else if (r == -ECOMM)    /* condition failed, but all is good */
+                else if (r == -ECOMM)
                         r = job_finish_and_invalidate(j, JOB_DONE, true, false);
                 else if (r == -EBADR)
                         r = job_finish_and_invalidate(j, JOB_SKIPPED, true, false);
@@ -943,7 +1001,7 @@
         }
 
         /* A special check to make sure we take down anything RequisiteOf= if we aren't active. This is when
-         * the verify-active job merges with a satisfying job type, and then loses it's invalidation effect,
+         * the verify-active job merges with a satisfying job type, and then loses its invalidation effect,
          * as the result there is JOB_DONE for the start job we merged into, while we should be failing the
          * depending job if the said unit isn't in fact active. Oneshots are an example of this, where going
          * directly from activating to inactive is success.
@@ -999,10 +1057,9 @@
 }
 
 static int job_dispatch_timer(sd_event_source *s, uint64_t monotonic, void *userdata) {
-        Job *j = userdata;
+        Job *j = ASSERT_PTR(userdata);
         Unit *u;
 
-        assert(j);
         assert(s == j->timer_event_source);
 
         log_unit_warning(j->unit, "Job %s/%s timed out.", j->unit->id, job_type_to_string(j->type));
@@ -1075,17 +1132,13 @@
         if (j->in_run_queue)
                 return;
 
-        if (prioq_isempty(j->manager->run_queue)) {
-                r = sd_event_source_set_enabled(j->manager->run_queue_event_source, SD_EVENT_ONESHOT);
-                if (r < 0)
-                        log_warning_errno(r, "Failed to enable job run queue event source, ignoring: %m");
-        }
-
         r = prioq_put(j->manager->run_queue, j, &j->run_queue_idx);
         if (r < 0)
                 log_warning_errno(r, "Failed put job in run queue, ignoring: %m");
         else
                 j->in_run_queue = true;
+
+        manager_trigger_run_queue(j->manager);
 }
 
 void job_add_to_dbus_queue(Job *j) {
@@ -1132,6 +1185,8 @@
 
         bus_track_serialize(j->bus_track, f, "subscribed");
 
+        activation_details_serialize(j->activation_details, f);
+
         /* End marker */
         fputc('\n', f);
         return 0;
@@ -1229,6 +1284,11 @@
                 else if (streq(l, "subscribed")) {
                         if (strv_extend(&j->deserialized_clients, v) < 0)
                                 return log_oom();
+
+                } else if (startswith(l, "activation-details")) {
+                        if (activation_details_deserialize(l, v, &j->activation_details) < 0)
+                                log_debug("Failed to parse job ActivationDetails element: %s", v);
+
                 } else
                         log_debug("Unknown job serialization key: %s", l);
         }
@@ -1303,6 +1363,8 @@
         /* In case messages on console has been disabled on boot */
         j->unit->manager->no_console_output = false;
 
+        manager_invalidate_startup_units(j->unit->manager);
+
         if (detect_container() > 0)
                 return;
 
@@ -1311,11 +1373,9 @@
 
 int job_get_timeout(Job *j, usec_t *timeout) {
         usec_t x = USEC_INFINITY, y = USEC_INFINITY;
-        Unit *u = j->unit;
+        Unit *u = ASSERT_PTR(ASSERT_PTR(j)->unit);
         int r;
 
-        assert(u);
-
         if (j->timer_event_source) {
                 r = sd_event_source_get_time(j->timer_event_source, &x);
                 if (r < 0)
@@ -1511,44 +1571,44 @@
 DEFINE_STRING_TABLE_LOOKUP(job_state, JobState);
 
 static const char* const job_type_table[_JOB_TYPE_MAX] = {
-        [JOB_START] = "start",
-        [JOB_VERIFY_ACTIVE] = "verify-active",
-        [JOB_STOP] = "stop",
-        [JOB_RELOAD] = "reload",
+        [JOB_START]           = "start",
+        [JOB_VERIFY_ACTIVE]   = "verify-active",
+        [JOB_STOP]            = "stop",
+        [JOB_RELOAD]          = "reload",
         [JOB_RELOAD_OR_START] = "reload-or-start",
-        [JOB_RESTART] = "restart",
-        [JOB_TRY_RESTART] = "try-restart",
-        [JOB_TRY_RELOAD] = "try-reload",
-        [JOB_NOP] = "nop",
+        [JOB_RESTART]         = "restart",
+        [JOB_TRY_RESTART]     = "try-restart",
+        [JOB_TRY_RELOAD]      = "try-reload",
+        [JOB_NOP]             = "nop",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(job_type, JobType);
 
 static const char* const job_mode_table[_JOB_MODE_MAX] = {
-        [JOB_FAIL] = "fail",
-        [JOB_REPLACE] = "replace",
+        [JOB_FAIL]                 = "fail",
+        [JOB_REPLACE]              = "replace",
         [JOB_REPLACE_IRREVERSIBLY] = "replace-irreversibly",
-        [JOB_ISOLATE] = "isolate",
-        [JOB_FLUSH] = "flush",
-        [JOB_IGNORE_DEPENDENCIES] = "ignore-dependencies",
-        [JOB_IGNORE_REQUIREMENTS] = "ignore-requirements",
-        [JOB_TRIGGERING] = "triggering",
+        [JOB_ISOLATE]              = "isolate",
+        [JOB_FLUSH]                = "flush",
+        [JOB_IGNORE_DEPENDENCIES]  = "ignore-dependencies",
+        [JOB_IGNORE_REQUIREMENTS]  = "ignore-requirements",
+        [JOB_TRIGGERING]           = "triggering",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(job_mode, JobMode);
 
 static const char* const job_result_table[_JOB_RESULT_MAX] = {
-        [JOB_DONE] = "done",
-        [JOB_CANCELED] = "canceled",
-        [JOB_TIMEOUT] = "timeout",
-        [JOB_FAILED] = "failed",
-        [JOB_DEPENDENCY] = "dependency",
-        [JOB_SKIPPED] = "skipped",
-        [JOB_INVALID] = "invalid",
-        [JOB_ASSERT] = "assert",
+        [JOB_DONE]        = "done",
+        [JOB_CANCELED]    = "canceled",
+        [JOB_TIMEOUT]     = "timeout",
+        [JOB_FAILED]      = "failed",
+        [JOB_DEPENDENCY]  = "dependency",
+        [JOB_SKIPPED]     = "skipped",
+        [JOB_INVALID]     = "invalid",
+        [JOB_ASSERT]      = "assert",
         [JOB_UNSUPPORTED] = "unsupported",
-        [JOB_COLLECTED] = "collected",
-        [JOB_ONCE] = "once",
+        [JOB_COLLECTED]   = "collected",
+        [JOB_ONCE]        = "once",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(job_result, JobResult);
@@ -1606,3 +1666,11 @@
         else
                 return -1;
 }
+
+void job_set_activation_details(Job *j, ActivationDetails *info) {
+        /* Existing (older) ActivationDetails win, newer ones are discarded. */
+        if (!j || j->activation_details || !info)
+                return; /* Nothing to do. */
+
+        j->activation_details = activation_details_ref(info);
+}
diff --git a/src/core/job.h b/src/core/job.h
index c033c8a..30a7903 100644
--- a/src/core/job.h
+++ b/src/core/job.h
@@ -10,6 +10,7 @@
 #include "unit-name.h"
 #include "unit.h"
 
+typedef struct ActivationDetails ActivationDetails;
 typedef struct Job Job;
 typedef struct JobDependency JobDependency;
 typedef enum JobType JobType;
@@ -83,7 +84,7 @@
 };
 
 enum JobResult {
-        JOB_DONE,                /* Job completed successfully (or skipped due to a failed ConditionXYZ=) */
+        JOB_DONE,                /* Job completed successfully (or skipped due to an unmet ConditionXYZ=) */
         JOB_CANCELED,            /* Job canceled by a conflicting job installation or by explicit cancel request */
         JOB_TIMEOUT,             /* Job timeout elapsed */
         JOB_FAILED,              /* Job failed */
@@ -151,6 +152,9 @@
 
         unsigned run_queue_idx;
 
+        /* If the job had a specific trigger that needs to be advertised (eg: a path unit), store it. */
+        ActivationDetails *activation_details;
+
         bool installed:1;
         bool in_run_queue:1;
         bool matters_to_anchor:1;
@@ -243,3 +247,5 @@
 const char* job_type_to_access_method(JobType t);
 
 int job_compare(Job *a, Job *b, UnitDependencyAtom assume_dep);
+
+void job_set_activation_details(Job *j, ActivationDetails *info);
diff --git a/src/core/kill.c b/src/core/kill.c
index e858ae9..c8b581d 100644
--- a/src/core/kill.c
+++ b/src/core/kill.c
@@ -3,7 +3,6 @@
 #include "kill.h"
 #include "signal-util.h"
 #include "string-table.h"
-#include "util.h"
 
 void kill_context_init(KillContext *c) {
         assert(c);
diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c
index 8a7f828..e843743 100644
--- a/src/core/kmod-setup.c
+++ b/src/core/kmod-setup.c
@@ -1,15 +1,17 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <ftw.h>
 #include <unistd.h>
 
 #include "alloc-util.h"
 #include "bus-util.h"
 #include "capability-util.h"
+#include "efi-api.h"
 #include "fileio.h"
 #include "kmod-setup.h"
 #include "macro.h"
+#include "recurse-dir.h"
 #include "string-util.h"
+#include "virt.h"
 
 #if HAVE_KMOD
 #include "module-util.h"
@@ -28,39 +30,61 @@
         REENABLE_WARNING;
 }
 
-static int has_virtio_rng_nftw_cb(
-                const char *fpath,
-                const struct stat *sb,
-                int tflag,
-                struct FTW *ftwbuf) {
+static int has_virtio_rng_recurse_dir_cb(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
 
         _cleanup_free_ char *alias = NULL;
         int r;
 
-        if ((FTW_D == tflag) && (ftwbuf->level > 2))
-                return FTW_SKIP_SUBTREE;
+        if (event != RECURSE_DIR_ENTRY)
+                return RECURSE_DIR_CONTINUE;
 
-        if (FTW_F != tflag)
-                return FTW_CONTINUE;
+        if (de->d_type != DT_REG)
+                return RECURSE_DIR_CONTINUE;
 
-        if (!endswith(fpath, "/modalias"))
-                return FTW_CONTINUE;
+        if (!streq(de->d_name, "modalias"))
+                return RECURSE_DIR_CONTINUE;
 
-        r = read_one_line_file(fpath, &alias);
-        if (r < 0)
-                return FTW_SKIP_SIBLINGS;
+        r = read_one_line_file(path, &alias);
+        if (r < 0) {
+                log_debug_errno(r, "Failed to read %s, ignoring: %m", path);
+                return RECURSE_DIR_LEAVE_DIRECTORY;
+        }
 
         if (startswith(alias, "pci:v00001AF4d00001005"))
-                return FTW_STOP;
+                return 1;
 
         if (startswith(alias, "pci:v00001AF4d00001044"))
-                return FTW_STOP;
+                return 1;
 
-        return FTW_SKIP_SIBLINGS;
+        return RECURSE_DIR_LEAVE_DIRECTORY;
 }
 
 static bool has_virtio_rng(void) {
-        return (nftw("/sys/devices/pci0000:00", has_virtio_rng_nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL) == FTW_STOP);
+        int r;
+
+        r = recurse_dir_at(
+                        AT_FDCWD,
+                        "/sys/devices/pci0000:00",
+                        /* statx_mask= */ 0,
+                        /* n_depth_max= */ 2,
+                        RECURSE_DIR_ENSURE_TYPE,
+                        has_virtio_rng_recurse_dir_cb,
+                        NULL);
+        if (r < 0)
+                log_debug_errno(r, "Failed to determine whether host has virtio-rng device, ignoring: %m");
+
+        return r > 0;
+}
+
+static bool in_qemu(void) {
+        return IN_SET(detect_vm(), VIRTUALIZATION_KVM, VIRTUALIZATION_QEMU);
 }
 #endif
 
@@ -76,26 +100,37 @@
         } kmod_table[] = {
                 /* This one we need to load explicitly, since auto-loading on use doesn't work
                  * before udev created the ghost device nodes, and we need it earlier than that. */
-                { "autofs4",   "/sys/class/misc/autofs",    true,   false,   NULL      },
+                { "autofs4",     "/sys/class/misc/autofs",    true,  false, NULL           },
 
                 /* This one we need to load explicitly, since auto-loading of IPv6 is not done when
                  * we try to configure ::1 on the loopback device. */
-                { "ipv6",      "/sys/module/ipv6",          false,  true,    NULL      },
+                { "ipv6",        "/sys/module/ipv6",          false, true,  NULL           },
 
                 /* This should never be a module */
-                { "unix",      "/proc/net/unix",            true,   true,    NULL      },
+                { "unix",        "/proc/net/unix",            true,  true,  NULL           },
 
 #if HAVE_LIBIPTC
                 /* netfilter is needed by networkd, nspawn among others, and cannot be autoloaded */
-                { "ip_tables", "/proc/net/ip_tables_names", false,  false,   NULL      },
+                { "ip_tables",   "/proc/net/ip_tables_names", false, false, NULL           },
 #endif
                 /* virtio_rng would be loaded by udev later, but real entropy might be needed very early */
-                { "virtio_rng", NULL,                       false,  false,   has_virtio_rng },
+                { "virtio_rng",  NULL,                        false, false, has_virtio_rng },
+
+                /* qemu_fw_cfg would be loaded by udev later, but we want to import credentials from it super early */
+                { "qemu_fw_cfg", "/sys/firmware/qemu_fw_cfg", false, false, in_qemu        },
+
+                /* dmi-sysfs is needed to import credentials from it super early */
+                { "dmi-sysfs",   "/sys/firmware/dmi/entries", false, false, NULL           },
+
+#if HAVE_TPM2
+                /* Make sure the tpm subsystem is available which ConditionSecurity=tpm2 depends on. */
+                { "tpm",         "/sys/class/tpmrm",          false, false, efi_has_tpm2   },
+#endif
         };
         _cleanup_(kmod_unrefp) struct kmod_ctx *ctx = NULL;
         unsigned i;
 
-        if (have_effective_cap(CAP_SYS_MODULE) == 0)
+        if (have_effective_cap(CAP_SYS_MODULE) <= 0)
                 return 0;
 
         for (i = 0; i < ELEMENTSOF(kmod_table); i++) {
diff --git a/src/core/load-dropin.c b/src/core/load-dropin.c
index 3bb4856..53d2a3d 100644
--- a/src/core/load-dropin.c
+++ b/src/core/load-dropin.c
@@ -13,7 +13,6 @@
 
 static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suffix) {
         _cleanup_strv_free_ char **paths = NULL;
-        char **p;
         int r;
 
         r = unit_file_find_dropin_paths(NULL,
@@ -85,7 +84,6 @@
 
 int unit_load_dropin(Unit *u) {
         _cleanup_strv_free_ char **l = NULL;
-        char **f;
         int r;
 
         assert(u);
@@ -113,14 +111,16 @@
         }
 
         u->dropin_mtime = 0;
-        STRV_FOREACH(f, u->dropin_paths)
-                (void) config_parse(
-                                u->id, *f, NULL,
-                                UNIT_VTABLE(u)->sections,
-                                config_item_perf_lookup, load_fragment_gperf_lookup,
-                                0,
-                                u,
-                                &u->dropin_mtime);
+        STRV_FOREACH(f, u->dropin_paths) {
+                struct stat st;
+
+                r = config_parse(u->id, *f, NULL,
+                                 UNIT_VTABLE(u)->sections,
+                                 config_item_perf_lookup, load_fragment_gperf_lookup,
+                                 0, u, &st);
+                if (r > 0)
+                        u->dropin_mtime = MAX(u->dropin_mtime, timespec_load(&st.st_mtim));
+        }
 
         return 0;
 }
diff --git a/src/core/load-fragment-gperf.gperf.in b/src/core/load-fragment-gperf.gperf.in
index 42441ea..3ea3ca3 100644
--- a/src/core/load-fragment-gperf.gperf.in
+++ b/src/core/load-fragment-gperf.gperf.in
@@ -9,6 +9,7 @@
 {{type}}.RootHash,                         config_parse_exec_root_hash,                 0,                                  offsetof({{type}}, exec_context)
 {{type}}.RootHashSignature,                config_parse_exec_root_hash_sig,             0,                                  offsetof({{type}}, exec_context)
 {{type}}.RootVerity,                       config_parse_unit_path_printf,               true,                               offsetof({{type}}, exec_context.root_verity)
+{{type}}.ExtensionDirectories,             config_parse_namespace_path_strv,            0,                                  offsetof({{type}}, exec_context.extension_directories)
 {{type}}.ExtensionImages,                  config_parse_extension_images,               0,                                  offsetof({{type}}, exec_context)
 {{type}}.MountImages,                      config_parse_mount_images,                   0,                                  offsetof({{type}}, exec_context)
 {{type}}.User,                             config_parse_user_group_compat,              0,                                  offsetof({{type}}, exec_context.user)
@@ -41,6 +42,8 @@
 {{type}}.TTYReset,                         config_parse_bool,                           0,                                  offsetof({{type}}, exec_context.tty_reset)
 {{type}}.TTYVHangup,                       config_parse_bool,                           0,                                  offsetof({{type}}, exec_context.tty_vhangup)
 {{type}}.TTYVTDisallocate,                 config_parse_bool,                           0,                                  offsetof({{type}}, exec_context.tty_vt_disallocate)
+{{type}}.TTYRows,                          config_parse_tty_size,                       0,                                  offsetof({{type}}, exec_context.tty_rows)
+{{type}}.TTYColumns,                       config_parse_tty_size,                       0,                                  offsetof({{type}}, exec_context.tty_cols)
 {{type}}.SyslogIdentifier,                 config_parse_unit_string_printf,             0,                                  offsetof({{type}}, exec_context.syslog_identifier)
 {{type}}.SyslogFacility,                   config_parse_log_facility,                   0,                                  offsetof({{type}}, exec_context.syslog_priority)
 {{type}}.SyslogLevel,                      config_parse_log_level,                      0,                                  offsetof({{type}}, exec_context.syslog_priority)
@@ -49,6 +52,7 @@
 {{type}}.LogRateLimitIntervalSec,          config_parse_sec,                            0,                                  offsetof({{type}}, exec_context.log_ratelimit_interval_usec)
 {{type}}.LogRateLimitBurst,                config_parse_unsigned,                       0,                                  offsetof({{type}}, exec_context.log_ratelimit_burst)
 {{type}}.LogExtraFields,                   config_parse_log_extra_fields,               0,                                  offsetof({{type}}, exec_context)
+{{type}}.LogFilterPatterns,                config_parse_log_filter_patterns,            0,                                  offsetof({{type}}, exec_context)
 {{type}}.Capabilities,                     config_parse_warn_compat,                    DISABLED_LEGACY,                    offsetof({{type}}, exec_context)
 {{type}}.SecureBits,                       config_parse_exec_secure_bits,               0,                                  offsetof({{type}}, exec_context.secure_bits)
 {{type}}.CapabilityBoundingSet,            config_parse_capability_set,                 0,                                  offsetof({{type}}, exec_context.capability_bounding_set)
@@ -81,6 +85,7 @@
 {{type}}.RestrictAddressFamilies,          config_parse_warn_compat,                    DISABLED_CONFIGURATION,             0
 {{type}}.LockPersonality,                  config_parse_warn_compat,                    DISABLED_CONFIGURATION,             0
 {% endif %}
+{{type}}.RestrictFileSystems,              config_parse_restrict_filesystems,           0,                                  offsetof({{type}}, exec_context)
 {{type}}.LimitCPU,                         config_parse_rlimit,                         RLIMIT_CPU,                         offsetof({{type}}, exec_context.rlimit)
 {{type}}.LimitFSIZE,                       config_parse_rlimit,                         RLIMIT_FSIZE,                       offsetof({{type}}, exec_context.rlimit)
 {{type}}.LimitDATA,                        config_parse_rlimit,                         RLIMIT_DATA,                        offsetof({{type}}, exec_context.rlimit)
@@ -105,6 +110,7 @@
 {{type}}.InaccessiblePaths,                config_parse_namespace_path_strv,            0,                                  offsetof({{type}}, exec_context.inaccessible_paths)
 {{type}}.ExecPaths,                        config_parse_namespace_path_strv,            0,                                  offsetof({{type}}, exec_context.exec_paths)
 {{type}}.NoExecPaths,                      config_parse_namespace_path_strv,            0,                                  offsetof({{type}}, exec_context.no_exec_paths)
+{{type}}.ExecSearchPath,                   config_parse_colon_separated_paths,          0,                                  offsetof({{type}}, exec_context.exec_search_path)
 {{type}}.BindPaths,                        config_parse_bind_paths,                     0,                                  offsetof({{type}}, exec_context)
 {{type}}.BindReadOnlyPaths,                config_parse_bind_paths,                     0,                                  offsetof({{type}}, exec_context)
 {{type}}.TemporaryFileSystem,              config_parse_temporary_filesystems,          0,                                  offsetof({{type}}, exec_context)
@@ -129,17 +135,19 @@
 {{type}}.Personality,                      config_parse_personality,                    0,                                  offsetof({{type}}, exec_context.personality)
 {{type}}.RuntimeDirectoryPreserve,         config_parse_runtime_preserve_mode,          0,                                  offsetof({{type}}, exec_context.runtime_directory_preserve_mode)
 {{type}}.RuntimeDirectoryMode,             config_parse_mode,                           0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_RUNTIME].mode)
-{{type}}.RuntimeDirectory,                 config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_RUNTIME].paths)
+{{type}}.RuntimeDirectory,                 config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_RUNTIME])
 {{type}}.StateDirectoryMode,               config_parse_mode,                           0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_STATE].mode)
-{{type}}.StateDirectory,                   config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_STATE].paths)
+{{type}}.StateDirectory,                   config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_STATE])
 {{type}}.CacheDirectoryMode,               config_parse_mode,                           0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_CACHE].mode)
-{{type}}.CacheDirectory,                   config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_CACHE].paths)
+{{type}}.CacheDirectory,                   config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_CACHE])
 {{type}}.LogsDirectoryMode,                config_parse_mode,                           0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_LOGS].mode)
-{{type}}.LogsDirectory,                    config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_LOGS].paths)
+{{type}}.LogsDirectory,                    config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_LOGS])
 {{type}}.ConfigurationDirectoryMode,       config_parse_mode,                           0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_CONFIGURATION].mode)
-{{type}}.ConfigurationDirectory,           config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_CONFIGURATION].paths)
+{{type}}.ConfigurationDirectory,           config_parse_exec_directories,               0,                                  offsetof({{type}}, exec_context.directories[EXEC_DIRECTORY_CONFIGURATION])
 {{type}}.SetCredential,                    config_parse_set_credential,                 0,                                  offsetof({{type}}, exec_context)
+{{type}}.SetCredentialEncrypted,           config_parse_set_credential,                 1,                                  offsetof({{type}}, exec_context)
 {{type}}.LoadCredential,                   config_parse_load_credential,                0,                                  offsetof({{type}}, exec_context)
+{{type}}.LoadCredentialEncrypted,          config_parse_load_credential,                1,                                  offsetof({{type}}, exec_context)
 {{type}}.TimeoutCleanSec,                  config_parse_sec,                            0,                                  offsetof({{type}}, exec_context.timeout_clean_usec)
 {% if HAVE_PAM %}
 {{type}}.PAMName,                          config_parse_unit_string_printf,             0,                                  offsetof({{type}}, exec_context.pam_name)
@@ -179,11 +187,13 @@
 
 {%- macro CGROUP_CONTEXT_CONFIG_ITEMS(type) -%}
 {{type}}.Slice,                            config_parse_unit_slice,                     0,                                  0
-{{type}}.AllowedCPUs,                      config_parse_allowed_cpus,                   0,                                  offsetof({{type}}, cgroup_context)
-{{type}}.AllowedMemoryNodes,               config_parse_allowed_mems,                   0,                                  offsetof({{type}}, cgroup_context)
+{{type}}.AllowedCPUs,                      config_parse_allowed_cpuset,                 0,                                  offsetof({{type}}, cgroup_context.cpuset_cpus)
+{{type}}.StartupAllowedCPUs,               config_parse_allowed_cpuset,                 0,                                  offsetof({{type}}, cgroup_context.startup_cpuset_cpus)
+{{type}}.AllowedMemoryNodes,               config_parse_allowed_cpuset,                 0,                                  offsetof({{type}}, cgroup_context.cpuset_mems)
+{{type}}.StartupAllowedMemoryNodes,        config_parse_allowed_cpuset,                 0,                                  offsetof({{type}}, cgroup_context.startup_cpuset_mems)
 {{type}}.CPUAccounting,                    config_parse_bool,                           0,                                  offsetof({{type}}, cgroup_context.cpu_accounting)
-{{type}}.CPUWeight,                        config_parse_cg_weight,                      0,                                  offsetof({{type}}, cgroup_context.cpu_weight)
-{{type}}.StartupCPUWeight,                 config_parse_cg_weight,                      0,                                  offsetof({{type}}, cgroup_context.startup_cpu_weight)
+{{type}}.CPUWeight,                        config_parse_cg_cpu_weight,                  0,                                  offsetof({{type}}, cgroup_context.cpu_weight)
+{{type}}.StartupCPUWeight,                 config_parse_cg_cpu_weight,                  0,                                  offsetof({{type}}, cgroup_context.startup_cpu_weight)
 {{type}}.CPUShares,                        config_parse_cpu_shares,                     0,                                  offsetof({{type}}, cgroup_context.cpu_shares)
 {{type}}.StartupCPUShares,                 config_parse_cpu_shares,                     0,                                  offsetof({{type}}, cgroup_context.startup_cpu_shares)
 {{type}}.CPUQuota,                         config_parse_cpu_quota,                      0,                                  offsetof({{type}}, cgroup_context)
@@ -196,6 +206,7 @@
 {{type}}.MemoryHigh,                       config_parse_memory_limit,                   0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.MemoryMax,                        config_parse_memory_limit,                   0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.MemorySwapMax,                    config_parse_memory_limit,                   0,                                  offsetof({{type}}, cgroup_context)
+{{type}}.MemoryZSwapMax,                   config_parse_memory_limit,                   0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.MemoryLimit,                      config_parse_memory_limit,                   0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.DeviceAllow,                      config_parse_device_allow,                   0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.DevicePolicy,                     config_parse_device_policy,                  0,                                  offsetof({{type}}, cgroup_context.device_policy)
@@ -219,8 +230,8 @@
 {{type}}.Delegate,                         config_parse_delegate,                       0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.DisableControllers,               config_parse_disable_controllers,            0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.IPAccounting,                     config_parse_bool,                           0,                                  offsetof({{type}}, cgroup_context.ip_accounting)
-{{type}}.IPAddressAllow,                   config_parse_ip_address_access,              0,                                  offsetof({{type}}, cgroup_context.ip_address_allow)
-{{type}}.IPAddressDeny,                    config_parse_ip_address_access,              0,                                  offsetof({{type}}, cgroup_context.ip_address_deny)
+{{type}}.IPAddressAllow,                   config_parse_in_addr_prefixes,               AF_UNSPEC,                          offsetof({{type}}, cgroup_context.ip_address_allow)
+{{type}}.IPAddressDeny,                    config_parse_in_addr_prefixes,               AF_UNSPEC,                          offsetof({{type}}, cgroup_context.ip_address_deny)
 {{type}}.IPIngressFilterPath,              config_parse_ip_filter_bpf_progs,            0,                                  offsetof({{type}}, cgroup_context.ip_filters_ingress)
 {{type}}.IPEgressFilterPath,               config_parse_ip_filter_bpf_progs,            0,                                  offsetof({{type}}, cgroup_context.ip_filters_egress)
 {{type}}.ManagedOOMSwap,                   config_parse_managed_oom_mode,               0,                                  offsetof({{type}}, cgroup_context.moom_swap)
@@ -231,6 +242,7 @@
 {{type}}.BPFProgram,                       config_parse_bpf_foreign_program,            0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.SocketBindAllow,                  config_parse_cgroup_socket_bind,             0,                                  offsetof({{type}}, cgroup_context.socket_bind_allow)
 {{type}}.SocketBindDeny,                   config_parse_cgroup_socket_bind,             0,                                  offsetof({{type}}, cgroup_context.socket_bind_deny)
+{{type}}.RestrictNetworkInterfaces,        config_parse_restrict_network_interfaces,    0,                                  offsetof({{type}}, cgroup_context)
 {%- endmacro -%}
 
 %{
@@ -240,6 +252,7 @@
 #include <stddef.h>
 #include "all-units.h"
 #include "conf-parser.h"
+#include "in-addr-prefix-util.h"
 #include "load-fragment.h"
 %}
 struct ConfigPerfItem;
@@ -321,16 +334,21 @@
 Unit.ConditionHost,                      config_parse_unit_condition_string,          CONDITION_HOST,                     offsetof(Unit, conditions)
 Unit.ConditionKernelCommandLine,         config_parse_unit_condition_string,          CONDITION_KERNEL_COMMAND_LINE,      offsetof(Unit, conditions)
 Unit.ConditionKernelVersion,             config_parse_unit_condition_string,          CONDITION_KERNEL_VERSION,           offsetof(Unit, conditions)
+Unit.ConditionCredential,                config_parse_unit_condition_string,          CONDITION_CREDENTIAL,               offsetof(Unit, conditions)
 Unit.ConditionSecurity,                  config_parse_unit_condition_string,          CONDITION_SECURITY,                 offsetof(Unit, conditions)
 Unit.ConditionCapability,                config_parse_unit_condition_string,          CONDITION_CAPABILITY,               offsetof(Unit, conditions)
 Unit.ConditionACPower,                   config_parse_unit_condition_string,          CONDITION_AC_POWER,                 offsetof(Unit, conditions)
 Unit.ConditionMemory,                    config_parse_unit_condition_string,          CONDITION_MEMORY,                   offsetof(Unit, conditions)
+Unit.ConditionCPUFeature,                config_parse_unit_condition_string,          CONDITION_CPU_FEATURE,              offsetof(Unit, conditions)
 Unit.ConditionCPUs,                      config_parse_unit_condition_string,          CONDITION_CPUS,                     offsetof(Unit, conditions)
 Unit.ConditionEnvironment,               config_parse_unit_condition_string,          CONDITION_ENVIRONMENT,              offsetof(Unit, conditions)
 Unit.ConditionUser,                      config_parse_unit_condition_string,          CONDITION_USER,                     offsetof(Unit, conditions)
 Unit.ConditionGroup,                     config_parse_unit_condition_string,          CONDITION_GROUP,                    offsetof(Unit, conditions)
 Unit.ConditionControlGroupController,    config_parse_unit_condition_string,          CONDITION_CONTROL_GROUP_CONTROLLER, offsetof(Unit, conditions)
 Unit.ConditionOSRelease,                 config_parse_unit_condition_string,          CONDITION_OS_RELEASE,               offsetof(Unit, conditions)
+Unit.ConditionMemoryPressure,            config_parse_unit_condition_string,          CONDITION_MEMORY_PRESSURE,          offsetof(Unit, conditions)
+Unit.ConditionCPUPressure,               config_parse_unit_condition_string,          CONDITION_CPU_PRESSURE,             offsetof(Unit, conditions)
+Unit.ConditionIOPressure,                config_parse_unit_condition_string,          CONDITION_IO_PRESSURE,              offsetof(Unit, conditions)
 Unit.AssertPathExists,                   config_parse_unit_condition_path,            CONDITION_PATH_EXISTS,              offsetof(Unit, asserts)
 Unit.AssertPathExistsGlob,               config_parse_unit_condition_path,            CONDITION_PATH_EXISTS_GLOB,         offsetof(Unit, asserts)
 Unit.AssertPathIsDirectory,              config_parse_unit_condition_path,            CONDITION_PATH_IS_DIRECTORY,        offsetof(Unit, asserts)
@@ -348,16 +366,21 @@
 Unit.AssertHost,                         config_parse_unit_condition_string,          CONDITION_HOST,                     offsetof(Unit, asserts)
 Unit.AssertKernelCommandLine,            config_parse_unit_condition_string,          CONDITION_KERNEL_COMMAND_LINE,      offsetof(Unit, asserts)
 Unit.AssertKernelVersion,                config_parse_unit_condition_string,          CONDITION_KERNEL_VERSION,           offsetof(Unit, asserts)
+Unit.AssertCredential,                   config_parse_unit_condition_string,          CONDITION_CREDENTIAL,               offsetof(Unit, asserts)
 Unit.AssertSecurity,                     config_parse_unit_condition_string,          CONDITION_SECURITY,                 offsetof(Unit, asserts)
 Unit.AssertCapability,                   config_parse_unit_condition_string,          CONDITION_CAPABILITY,               offsetof(Unit, asserts)
 Unit.AssertACPower,                      config_parse_unit_condition_string,          CONDITION_AC_POWER,                 offsetof(Unit, asserts)
 Unit.AssertMemory,                       config_parse_unit_condition_string,          CONDITION_MEMORY,                   offsetof(Unit, asserts)
+Unit.AssertCPUFeature,                   config_parse_unit_condition_string,          CONDITION_CPU_FEATURE,              offsetof(Unit, asserts)
 Unit.AssertCPUs,                         config_parse_unit_condition_string,          CONDITION_CPUS,                     offsetof(Unit, asserts)
 Unit.AssertEnvironment,                  config_parse_unit_condition_string,          CONDITION_ENVIRONMENT,              offsetof(Unit, asserts)
 Unit.AssertUser,                         config_parse_unit_condition_string,          CONDITION_USER,                     offsetof(Unit, asserts)
 Unit.AssertGroup,                        config_parse_unit_condition_string,          CONDITION_GROUP,                    offsetof(Unit, asserts)
 Unit.AssertControlGroupController,       config_parse_unit_condition_string,          CONDITION_CONTROL_GROUP_CONTROLLER, offsetof(Unit, asserts)
 Unit.AssertOSRelease,                    config_parse_unit_condition_string,          CONDITION_OS_RELEASE,               offsetof(Unit, asserts)
+Unit.AssertMemoryPressure,               config_parse_unit_condition_string,          CONDITION_MEMORY_PRESSURE,          offsetof(Unit, asserts)
+Unit.AssertCPUPressure,                  config_parse_unit_condition_string,          CONDITION_CPU_PRESSURE,             offsetof(Unit, asserts)
+Unit.AssertIOPressure,                   config_parse_unit_condition_string,          CONDITION_IO_PRESSURE,              offsetof(Unit, asserts)
 Unit.CollectMode,                        config_parse_collect_mode,                   0,                                  offsetof(Unit, collect_mode)
 Service.PIDFile,                         config_parse_pid_file,                       0,                                  offsetof(Service, pid_file)
 Service.ExecCondition,                   config_parse_exec,                           SERVICE_EXEC_CONDITION,             offsetof(Service, exec_command)
@@ -375,6 +398,7 @@
 Service.TimeoutStartFailureMode,         config_parse_service_timeout_failure_mode,   0,                                  offsetof(Service, timeout_start_failure_mode)
 Service.TimeoutStopFailureMode,          config_parse_service_timeout_failure_mode,   0,                                  offsetof(Service, timeout_stop_failure_mode)
 Service.RuntimeMaxSec,                   config_parse_sec,                            0,                                  offsetof(Service, runtime_max_usec)
+Service.RuntimeRandomizedExtraSec,       config_parse_sec,                            0,                                  offsetof(Service, runtime_rand_extra_usec)
 Service.WatchdogSec,                     config_parse_sec,                            0,                                  offsetof(Service, watchdog_usec)
 {# The following five only exist for compatibility, they moved into Unit, see above #}
 Service.StartLimitInterval,              config_parse_sec,                            0,                                  offsetof(Unit, start_ratelimit.interval)
@@ -383,6 +407,7 @@
 Service.FailureAction,                   config_parse_emergency_action,               0,                                  offsetof(Unit, failure_action)
 Service.RebootArgument,                  config_parse_unit_string_printf,             0,                                  offsetof(Unit, reboot_arg)
 Service.Type,                            config_parse_service_type,                   0,                                  offsetof(Service, type)
+Service.ExitType,                        config_parse_service_exit_type,              0,                                  offsetof(Service, exit_type)
 Service.Restart,                         config_parse_service_restart,                0,                                  offsetof(Service, restart)
 Service.PermissionsStartOnly,            config_parse_bool,                           0,                                  offsetof(Service, permissions_start_only)
 Service.RootDirectoryStartOnly,          config_parse_bool,                           0,                                  offsetof(Service, root_directory_start_only)
@@ -401,6 +426,8 @@
 Service.USBFunctionDescriptors,          config_parse_unit_path_printf,               0,                                  offsetof(Service, usb_function_descriptors)
 Service.USBFunctionStrings,              config_parse_unit_path_printf,               0,                                  offsetof(Service, usb_function_strings)
 Service.OOMPolicy,                       config_parse_oom_policy,                     0,                                  offsetof(Service, oom_policy)
+Service.OpenFile,                        config_parse_open_file,                      0,                                  offsetof(Service, open_files)
+Service.ReloadSignal,                    config_parse_signal,                         0,                                  offsetof(Service, reload_signal)
 {{ EXEC_CONTEXT_CONFIG_ITEMS('Service') }}
 {{ CGROUP_CONTEXT_CONFIG_ITEMS('Service') }}
 {{ KILL_CONTEXT_CONFIG_ITEMS('Service') }}
@@ -491,6 +518,7 @@
 {{ CGROUP_CONTEXT_CONFIG_ITEMS('Mount') }}
 {{ KILL_CONTEXT_CONFIG_ITEMS('Mount') }}
 Automount.Where,                         config_parse_unit_path_printf,               0,                                  offsetof(Automount, where)
+Automount.ExtraOptions,                  config_parse_unit_string_printf,             0,                                  offsetof(Automount, extra_options)
 Automount.DirectoryMode,                 config_parse_mode,                           0,                                  offsetof(Automount, directory_mode)
 Automount.TimeoutIdleSec,                config_parse_sec_fix_0,                      0,                                  offsetof(Automount, timeout_idle_usec)
 Swap.What,                               config_parse_unit_path_printf,               0,                                  offsetof(Swap, parameters_fragment.what)
@@ -523,11 +551,15 @@
 Path.Unit,                               config_parse_trigger_unit,                   0,                                  0
 Path.MakeDirectory,                      config_parse_bool,                           0,                                  offsetof(Path, make_directory)
 Path.DirectoryMode,                      config_parse_mode,                           0,                                  offsetof(Path, directory_mode)
+Path.TriggerLimitIntervalSec,            config_parse_sec,                            0,                                  offsetof(Path, trigger_limit.interval)
+Path.TriggerLimitBurst,                  config_parse_unsigned,                       0,                                  offsetof(Path, trigger_limit.burst)
 {{ CGROUP_CONTEXT_CONFIG_ITEMS('Slice') }}
 {{ CGROUP_CONTEXT_CONFIG_ITEMS('Scope') }}
 {{ KILL_CONTEXT_CONFIG_ITEMS('Scope') }}
 Scope.RuntimeMaxSec,                     config_parse_sec,                            0,                                  offsetof(Scope, runtime_max_usec)
+Scope.RuntimeRandomizedExtraSec,         config_parse_sec,                            0,                                  offsetof(Scope, runtime_rand_extra_usec)
 Scope.TimeoutStopSec,                    config_parse_sec,                            0,                                  offsetof(Scope, timeout_stop_usec)
+Scope.OOMPolicy,                         config_parse_oom_policy,                     0,                                  offsetof(Scope, oom_policy)
 {# The [Install] section is ignored here #}
 Install.Alias,                           NULL,                                        0,                                  0
 Install.WantedBy,                        NULL,                                        0,                                  0
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index 7e22088..5170605 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -19,6 +19,7 @@
 #include "all-units.h"
 #include "alloc-util.h"
 #include "bpf-firewall.h"
+#include "bpf-lsm.h"
 #include "bpf-program.h"
 #include "bpf-socket-bind.h"
 #include "bus-error.h"
@@ -39,23 +40,27 @@
 #include "fs-util.h"
 #include "hexdecoct.h"
 #include "io-util.h"
-#include "ioprio.h"
+#include "ioprio-util.h"
 #include "ip-protocol-list.h"
 #include "journal-file.h"
 #include "limits-util.h"
 #include "load-fragment.h"
 #include "log.h"
+#include "missing_ioprio.h"
 #include "mountpoint-util.h"
 #include "nulstr-util.h"
-#include "parse-socket-bind-item.h"
+#include "open-file.h"
+#include "parse-helpers.h"
 #include "parse-util.h"
 #include "path-util.h"
+#include "pcre2-util.h"
 #include "percent-util.h"
 #include "process-util.h"
 #if HAVE_SECCOMP
 #include "seccomp-util.h"
 #endif
 #include "securebits-util.h"
+#include "selinux-util.h"
 #include "signal-util.h"
 #include "socket-netlink.h"
 #include "specifier.h"
@@ -135,6 +140,7 @@
 DEFINE_CONFIG_PARSE_ENUM(config_parse_protect_system, protect_system, ProtectSystem, "Failed to parse protect system value");
 DEFINE_CONFIG_PARSE_ENUM(config_parse_runtime_preserve_mode, exec_preserve_mode, ExecPreserveMode, "Failed to parse runtime directory preserve mode");
 DEFINE_CONFIG_PARSE_ENUM(config_parse_service_type, service_type, ServiceType, "Failed to parse service type");
+DEFINE_CONFIG_PARSE_ENUM(config_parse_service_exit_type, service_exit_type, ServiceExitType, "Failed to parse service exit type");
 DEFINE_CONFIG_PARSE_ENUM(config_parse_service_restart, service_restart, ServiceRestart, "Failed to parse service restart specifier");
 DEFINE_CONFIG_PARSE_ENUM(config_parse_service_timeout_failure_mode, service_timeout_failure_mode, ServiceTimeoutFailureMode, "Failed to parse timeout failure mode");
 DEFINE_CONFIG_PARSE_ENUM(config_parse_socket_bind, socket_address_bind_ipv6_only_or_bool, SocketAddressBindIPv6Only, "Failed to parse bind IPv6 only value");
@@ -143,12 +149,115 @@
 DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_ip_tos, ip_tos, int, -1, "Failed to parse IP TOS value");
 DEFINE_CONFIG_PARSE_PTR(config_parse_blockio_weight, cg_blkio_weight_parse, uint64_t, "Invalid block IO weight");
 DEFINE_CONFIG_PARSE_PTR(config_parse_cg_weight, cg_weight_parse, uint64_t, "Invalid weight");
-DEFINE_CONFIG_PARSE_PTR(config_parse_cpu_shares, cg_cpu_shares_parse, uint64_t, "Invalid CPU shares");
-DEFINE_CONFIG_PARSE_PTR(config_parse_exec_mount_flags, mount_propagation_flags_from_string, unsigned long, "Failed to parse mount flag");
+DEFINE_CONFIG_PARSE_PTR(config_parse_cg_cpu_weight, cg_cpu_weight_parse, uint64_t, "Invalid CPU weight");
+static DEFINE_CONFIG_PARSE_PTR(config_parse_cpu_shares_internal, cg_cpu_shares_parse, uint64_t, "Invalid CPU shares");
+DEFINE_CONFIG_PARSE_PTR(config_parse_exec_mount_flags, mount_propagation_flag_from_string, unsigned long, "Failed to parse mount flag");
 DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_numa_policy, mpol, int, -1, "Invalid NUMA policy type");
 DEFINE_CONFIG_PARSE_ENUM(config_parse_status_unit_format, status_unit_format, StatusUnitFormat, "Failed to parse status unit format");
 DEFINE_CONFIG_PARSE_ENUM_FULL(config_parse_socket_timestamping, socket_timestamping_from_string_harder, SocketTimestamping, "Failed to parse timestamping precision");
 
+int config_parse_cpu_shares(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+
+        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                   "Unit uses %s=; please use CPUWeight= instead. Support for %s= will be removed soon.",
+                   lvalue, lvalue);
+
+        return config_parse_cpu_shares_internal(unit, filename, line, section, section_line, lvalue, ltype, rvalue, data, userdata);
+}
+
+bool contains_instance_specifier_superset(const char *s) {
+        const char *p, *q;
+        bool percent = false;
+
+        assert(s);
+
+        p = strchr(s, '@');
+        if (!p)
+                return false;
+
+        p++; /* Skip '@' */
+
+        q = strrchr(p, '.');
+        if (!q)
+                q = p + strlen(p);
+
+        /* If the string is just the instance specifier, it's not a superset of the instance. */
+        if (memcmp_nn(p, q - p, "%i", strlen("%i")) == 0)
+                return false;
+
+        /* %i, %n and %N all expand to the instance or a superset of it. */
+        for (; p < q; p++) {
+                if (*p == '%')
+                        percent = !percent;
+                else if (percent) {
+                        if (IN_SET(*p, 'n', 'N', 'i'))
+                                return true;
+                        percent = false;
+                }
+        }
+
+        return false;
+}
+
+/* `name` is the rendered version of `format` via `unit_printf` or similar functions. */
+int unit_is_likely_recursive_template_dependency(Unit *u, const char *name, const char *format) {
+        const char *fragment_path;
+        int r;
+
+        assert(u);
+        assert(name);
+
+        /* If a template unit has a direct dependency on itself that includes the unit instance as part of
+         * the template instance via a unit specifier (%i, %n or %N), this will almost certainly lead to
+         * infinite recursion as systemd will keep instantiating new instances of the template unit.
+         * https://github.com/systemd/systemd/issues/17602 shows a good example of how this can happen in
+         * practice. To guard against this, we check for templates that depend on themselves and have the
+         * instantiated unit instance included as part of the template instance of the dependency via a
+         * specifier.
+         *
+         * For example, if systemd-notify@.service depends on systemd-notify@%n.service, this will result in
+         * infinite recursion.
+         */
+
+        if (!unit_name_is_valid(name, UNIT_NAME_INSTANCE))
+                return false;
+
+        if (!unit_name_prefix_equal(u->id, name))
+                return false;
+
+        if (u->type != unit_name_to_type(name))
+                return false;
+
+        r = unit_file_find_fragment(u->manager->unit_id_map, u->manager->unit_name_map, name, &fragment_path, NULL);
+        if (r < 0)
+                return r;
+
+        /* Fragment paths should also be equal as a custom fragment for a specific template instance
+         * wouldn't necessarily lead to infinite recursion. */
+        if (!path_equal_ptr(u->fragment_path, fragment_path))
+                return false;
+
+        if (!contains_instance_specifier_superset(format))
+                return false;
+
+        return true;
+}
+
 int config_parse_unit_deps(
                 const char *unit,
                 const char *filename,
@@ -188,6 +297,18 @@
                         continue;
                 }
 
+                r = unit_is_likely_recursive_template_dependency(u, k, word);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to determine if '%s' is a recursive dependency, ignoring: %m", k);
+                        continue;
+                }
+                if (r > 0) {
+                        log_syntax(unit, LOG_DEBUG, filename, line, 0,
+                                   "Dropping dependency %s=%s that likely leads to infinite recursion.",
+                                   unit_dependency_to_string(d), word);
+                        continue;
+                }
+
                 r = unit_add_dependency_by_name(u, d, k, true, UNIT_DEPENDENCY_FILE);
                 if (r < 0)
                         log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to add dependency on %s, ignoring: %m", k);
@@ -225,13 +346,12 @@
                 void *userdata) {
 
         _cleanup_free_ char *k = NULL;
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         r = unit_full_printf(u, rvalue, &k);
         if (r < 0) {
@@ -254,14 +374,13 @@
                 void *data,
                 void *userdata) {
 
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         _cleanup_free_ char *k = NULL;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         r = unit_full_printf(u, rvalue, &k);
         if (r < 0) {
@@ -285,14 +404,13 @@
                 void *userdata) {
 
         _cleanup_free_ char *k = NULL;
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         int r;
         bool fatal = ltype;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         r = unit_path_printf(u, rvalue, &k);
         if (r < 0) {
@@ -305,6 +423,63 @@
         return config_parse_path(unit, filename, line, section, section_line, lvalue, ltype, k, data, userdata);
 }
 
+int config_parse_colon_separated_paths(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+        char ***sv = ASSERT_PTR(data);
+        const Unit *u = userdata;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                /* Empty assignment resets the list */
+                *sv = strv_free(*sv);
+                return 0;
+        }
+
+        for (const char *p = rvalue;;) {
+                _cleanup_free_ char *word = NULL, *k = NULL;
+
+                r = extract_first_word(&p, &word, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to extract first word, ignoring: %s", rvalue);
+                        return 0;
+                }
+                if (r == 0)
+                        break;
+
+                r = unit_path_printf(u, word, &k);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to resolve unit specifiers in '%s', ignoring: %m", word);
+                        return 0;
+                }
+
+                r = path_simplify_and_warn(k, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
+                if (r < 0)
+                        return 0;
+
+                r = strv_consume(sv, TAKE_PTR(k));
+                if (r < 0)
+                        return log_oom();
+        }
+
+        return 0;
+}
+
 int config_parse_unit_path_strv_printf(
                 const char *unit,
                 const char *filename,
@@ -318,13 +493,12 @@
                 void *userdata) {
 
         char ***x = data;
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         if (isempty(rvalue)) {
                 *x = strv_free(*x);
@@ -493,7 +667,7 @@
                         p->address.type = SOCK_SEQPACKET;
                 }
 
-                if (socket_address_family(&p->address) != AF_LOCAL && p->address.type == SOCK_SEQPACKET) {
+                if (socket_address_family(&p->address) != AF_UNIX && p->address.type == SOCK_SEQPACKET) {
                         log_syntax(unit, LOG_WARNING, filename, line, 0, "Address family not supported, ignoring: %s", rvalue);
                         return 0;
                 }
@@ -501,12 +675,12 @@
                 p->type = SOCKET_SOCKET;
         }
 
-        p->fd = -1;
+        p->fd = -EBADF;
         p->auxiliary_fds = NULL;
         p->n_auxiliary_fds = 0;
         p->socket = s;
 
-        LIST_FIND_TAIL(port, s->ports, tail);
+        tail = LIST_FIND_TAIL(port, s->ports);
         LIST_INSERT_AFTER(port, s->ports, tail, p);
 
         p = NULL;
@@ -526,13 +700,12 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         int priority, r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->nice_set = false;
@@ -566,13 +739,12 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         int oa, r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->oom_score_adjust_set = false;
@@ -606,13 +778,12 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->coredump_filter = 0;
@@ -666,9 +837,9 @@
 
         if (m == KILL_NONE)
                 log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Unit configured to use KillMode=none. "
+                           "Unit uses KillMode=none. "
                            "This is unsafe, as it disables systemd's process lifecycle management for the service. "
-                           "Please update your service to use a safer KillMode=, such as 'mixed' or 'control-group'. "
+                           "Please update the service to use a safer KillMode=, such as 'mixed' or 'control-group'. "
                            "Support for KillMode=none is deprecated and will eventually be removed.");
 
         *k = m;
@@ -687,7 +858,7 @@
                 void *data,
                 void *userdata) {
 
-        ExecCommand **e = data;
+        ExecCommand **e = ASSERT_PTR(data);
         const Unit *u = userdata;
         const char *p;
         bool semicolon;
@@ -696,7 +867,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(e);
 
         e += ltype;
 
@@ -902,12 +1072,11 @@
                 void *data,
                 void *userdata) {
 
-        Socket *s = data;
+        Socket *s = ASSERT_PTR(data);
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue) || streq(rvalue, "*")) {
                 s->bind_to_device = mfree(s->bind_to_device);
@@ -934,13 +1103,12 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         const char *n;
         ExecInput ei;
         int r;
 
-        assert(data);
         assert(filename);
         assert(line);
         assert(rvalue);
@@ -1008,13 +1176,10 @@
                 void *userdata) {
 
         _cleanup_free_ char *unescaped = NULL, *resolved = NULL;
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
-        size_t sz;
-        void *p;
         int r;
 
-        assert(data);
         assert(filename);
         assert(line);
         assert(rvalue);
@@ -1026,9 +1191,9 @@
                 return 0;
         }
 
-        r = cunescape(rvalue, 0, &unescaped);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
+        ssize_t l = cunescape(rvalue, 0, &unescaped);
+        if (l < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, l,
                            "Failed to decode C escaped text '%s', ignoring: %m", rvalue);
                 return 0;
         }
@@ -1040,7 +1205,7 @@
                 return 0;
         }
 
-        sz = strlen(resolved);
+        size_t sz = strlen(resolved);
         if (c->stdin_data_size + sz + 1 < c->stdin_data_size || /* check for overflow */
             c->stdin_data_size + sz + 1 > EXEC_STDIN_DATA_MAX) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0,
@@ -1049,7 +1214,7 @@
                 return 0;
         }
 
-        p = realloc(c->stdin_data, c->stdin_data_size + sz + 1);
+        void *p = realloc(c->stdin_data, c->stdin_data_size + sz + 1);
         if (!p)
                 return log_oom();
 
@@ -1074,12 +1239,11 @@
                 void *userdata) {
 
         _cleanup_free_ void *p = NULL;
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         size_t sz;
         void *q;
         int r;
 
-        assert(data);
         assert(filename);
         assert(line);
         assert(rvalue);
@@ -1134,13 +1298,12 @@
 
         _cleanup_free_ char *resolved = NULL;
         const char *n;
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         bool obsolete = false;
         ExecOutput eo;
         int r;
 
-        assert(data);
         assert(filename);
         assert(line);
         assert(lvalue);
@@ -1258,17 +1421,16 @@
                                void *data,
                                void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         int x;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->ioprio_set = false;
-                c->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 0);
+                c->ioprio = IOPRIO_DEFAULT_CLASS_AND_PRIO;
                 return 0;
         }
 
@@ -1278,7 +1440,7 @@
                 return 0;
         }
 
-        c->ioprio = IOPRIO_PRIO_VALUE(x, IOPRIO_PRIO_DATA(c->ioprio));
+        c->ioprio = ioprio_normalize(ioprio_prio_value(x, ioprio_prio_data(c->ioprio)));
         c->ioprio_set = true;
 
         return 0;
@@ -1295,17 +1457,16 @@
                                   void *data,
                                   void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         int i, r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->ioprio_set = false;
-                c->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 0);
+                c->ioprio = IOPRIO_DEFAULT_CLASS_AND_PRIO;
                 return 0;
         }
 
@@ -1315,7 +1476,7 @@
                 return 0;
         }
 
-        c->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_PRIO_CLASS(c->ioprio), i);
+        c->ioprio = ioprio_normalize(ioprio_prio_value(ioprio_prio_class(c->ioprio), i));
         c->ioprio_set = true;
 
         return 0;
@@ -1332,13 +1493,12 @@
                                        void *data,
                                        void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         int x;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->cpu_sched_set = false;
@@ -1372,13 +1532,12 @@
                                    void *data,
                                    void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         int k;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->mount_apivfs_set = false;
@@ -1410,12 +1569,11 @@
                            void *data,
                            void *userdata) {
         int r;
-        NUMAPolicy *p = data;
+        NUMAPolicy *p = ASSERT_PTR(data);
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (streq(rvalue, "all")) {
                 r = numa_mask_add_all(&p->nodes);
@@ -1442,13 +1600,12 @@
                                      void *data,
                                      void *userdata) {
 
-        ExecContext *c = data;
-        int i, min, max, r;
+        ExecContext *c = ASSERT_PTR(data);
+        int i, r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = safe_atoi(rvalue, &i);
         if (r < 0) {
@@ -1456,11 +1613,9 @@
                 return 0;
         }
 
-        /* On Linux RR/FIFO range from 1 to 99 and OTHER/BATCH may only be 0 */
-        min = sched_get_priority_min(c->cpu_sched_policy);
-        max = sched_get_priority_max(c->cpu_sched_policy);
-
-        if (i < min || i > max) {
+        /* On Linux RR/FIFO range from 1 to 99 and OTHER/BATCH may only be 0. Policy might be set later so
+         * we do not check the precise range, but only the generic outer bounds. */
+        if (i < 0 || i > 99) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0, "CPU scheduling priority is out of range, ignoring: %s", rvalue);
                 return 0;
         }
@@ -1485,15 +1640,13 @@
 
         _cleanup_(mount_options_free_allp) MountOptions *options = NULL;
         _cleanup_strv_free_ char **l = NULL;
-        char **first = NULL, **second = NULL;
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->root_image_options = mount_options_free_all(c->root_image_options);
@@ -1543,11 +1696,11 @@
                 LIST_APPEND(mount_options, options, TAKE_PTR(o));
         }
 
-        /* empty spaces/separators only */
-        if (LIST_IS_EMPTY(options))
-                c->root_image_options = mount_options_free_all(c->root_image_options);
-        else
+        if (options)
                 LIST_JOIN(mount_options, c->root_image_options, options);
+        else
+                /* empty spaces/separators only */
+                c->root_image_options = mount_options_free_all(c->root_image_options);
 
         return 0;
 }
@@ -1565,11 +1718,10 @@
                 void *userdata) {
 
         _cleanup_free_ void *roothash_decoded = NULL;
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         size_t roothash_decoded_size = 0;
         int r;
 
-        assert(data);
         assert(filename);
         assert(line);
         assert(rvalue);
@@ -1628,11 +1780,10 @@
 
         _cleanup_free_ void *roothash_sig_decoded = NULL;
         char *value;
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         size_t roothash_sig_decoded_size = 0;
         int r;
 
-        assert(data);
         assert(filename);
         assert(line);
         assert(rvalue);
@@ -1691,7 +1842,7 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         _cleanup_free_ char *k = NULL;
         int r;
@@ -1699,7 +1850,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (streq(rvalue, "numa")) {
                 c->cpu_affinity_from_numa = true;
@@ -1735,7 +1885,7 @@
                 void *data,
                 void *userdata) {
 
-        uint64_t *capability_set = data;
+        uint64_t *capability_set = ASSERT_PTR(data);
         uint64_t sum = 0, initial = 0;
         bool invert = false;
         int r;
@@ -1743,7 +1893,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (rvalue[0] == '~') {
                 invert = true;
@@ -1786,7 +1935,7 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         bool ignore;
         char *k;
@@ -1795,7 +1944,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->selinux_context = mfree(c->selinux_context);
@@ -1835,7 +1983,7 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         bool ignore;
         char *k;
@@ -1844,7 +1992,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->apparmor_profile = mfree(c->apparmor_profile);
@@ -1884,7 +2031,7 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         bool ignore;
         char *k;
@@ -1893,7 +2040,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 c->smack_process_label = mfree(c->smack_process_label);
@@ -1936,7 +2082,7 @@
         _cleanup_(calendar_spec_freep) CalendarSpec *c = NULL;
         _cleanup_free_ char *k = NULL;
         const Unit *u = userdata;
-        Timer *t = data;
+        Timer *t = ASSERT_PTR(data);
         usec_t usec = 0;
         TimerValue *v;
         int r;
@@ -1944,7 +2090,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets list */
@@ -2000,14 +2145,13 @@
                 void *userdata) {
 
         _cleanup_free_ char *p = NULL;
-        Unit *u = data;
+        Unit *u = ASSERT_PTR(data);
         UnitType type;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (UNIT_TRIGGER(u)) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0, "Multiple units to trigger specified, ignoring: %s", rvalue);
@@ -2050,7 +2194,7 @@
                            void *data,
                            void *userdata) {
 
-        Path *p = data;
+        Path *p = ASSERT_PTR(data);
         PathSpec *s;
         PathType b;
         _cleanup_free_ char *k = NULL;
@@ -2059,7 +2203,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment clears list */
@@ -2090,7 +2233,7 @@
         s->unit = UNIT(p);
         s->path = TAKE_PTR(k);
         s->type = b;
-        s->inotify_fd = -1;
+        s->inotify_fd = -EBADF;
 
         LIST_PREPEND(spec, p->specs, s);
 
@@ -2111,14 +2254,13 @@
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_free_ char *p = NULL;
-        Socket *s = data;
+        Socket *s = ASSERT_PTR(data);
         Unit *x;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = unit_name_printf(UNIT(s), rvalue, &p);
         if (r < 0) {
@@ -2155,13 +2297,12 @@
                 void *userdata) {
 
         _cleanup_free_ char *p = NULL;
-        Socket *s = data;
+        Socket *s = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 s->fdname = mfree(s->fdname);
@@ -2194,13 +2335,12 @@
                 void *data,
                 void *userdata) {
 
-        Service *s = data;
+        Service *s = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         for (const char *p = rvalue;;) {
                 _cleanup_free_ char *word = NULL, *k = NULL;
@@ -2249,13 +2389,12 @@
                 void *userdata) {
 
         _cleanup_free_ char *k = NULL;
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         r = unit_full_printf_full(u, rvalue, SD_BUS_MAXIMUM_NAME_LENGTH, &k);
         if (r < 0) {
@@ -2283,14 +2422,13 @@
                 void *data,
                 void *userdata) {
 
-        Service *s = userdata;
+        Service *s = ASSERT_PTR(userdata);
         usec_t usec;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(s);
 
         /* This is called for two cases: TimeoutSec= and TimeoutStartSec=. */
 
@@ -2324,13 +2462,12 @@
                 void *data,
                 void *userdata) {
 
-        usec_t *ret = data;
+        usec_t *ret = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(ret);
 
         /* Note: apart from setting the arg, this returns an extra bit of information in the return value. */
 
@@ -2358,11 +2495,9 @@
                 void *data,
                 void *userdata) {
 
-        Service *s = userdata;
+        Service *s = ASSERT_PTR(userdata);
         int r;
 
-        assert(s);
-
         r = config_parse_timeout_abort(unit, filename, line, section, section_line, lvalue, ltype, rvalue,
                                        &s->timeout_abort_usec, s);
         if (r >= 0)
@@ -2370,37 +2505,6 @@
         return 0;
 }
 
-int config_parse_sec_fix_0(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        usec_t *usec = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(usec);
-
-        /* This is pretty much like config_parse_sec(), except that this treats a time of 0 as infinity, for
-         * compatibility with older versions of systemd where 0 instead of infinity was used as indicator to turn off a
-         * timeout. */
-
-        r = parse_sec_fix_0(rvalue, usec);
-        if (r < 0)
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse %s= parameter, ignoring: %s", lvalue, rvalue);
-
-        return 0;
-}
-
 int config_parse_user_group_compat(
                 const char *unit,
                 const char *filename,
@@ -2415,13 +2519,12 @@
 
         _cleanup_free_ char *k = NULL;
         char **user = data;
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         if (isempty(rvalue)) {
                 *user = mfree(*user);
@@ -2464,13 +2567,12 @@
                 void *userdata) {
 
         char ***users = data;
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         if (isempty(rvalue)) {
                 *users = strv_free(*users);
@@ -2521,16 +2623,14 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
-        const Unit *u = userdata;
+        ExecContext *c = ASSERT_PTR(data);
+        const Unit *u = ASSERT_PTR(userdata);
         bool missing_ok;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(c);
-        assert(u);
 
         if (isempty(rvalue)) {
                 c->working_directory_home = false;
@@ -2581,7 +2681,7 @@
                                void *data,
                                void *userdata) {
 
-        char ***env = data;
+        char ***env = ASSERT_PTR(data);
         const Unit *u = userdata;
         _cleanup_free_ char *n = NULL;
         int r;
@@ -2589,7 +2689,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment frees the list */
@@ -2629,13 +2728,12 @@
                 void *userdata) {
 
         const Unit *u = userdata;
-        char ***env = data;
+        char ***env = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -2693,14 +2791,13 @@
 
         _cleanup_strv_free_ char **n = NULL;
         const Unit *u = userdata;
-        char*** passenv = data;
+        char*** passenv = ASSERT_PTR(data);
         size_t nlen = 0;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -2767,7 +2864,7 @@
                 void *userdata) {
 
         _cleanup_strv_free_ char **n = NULL;
-        char*** unsetenv = data;
+        char*** unsetenv = ASSERT_PTR(data);
         const Unit *u = userdata;
         size_t nlen = 0;
         int r;
@@ -2775,7 +2872,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -2841,14 +2937,13 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(c);
 
         if (isempty(rvalue)) {
                 exec_context_free_log_extra_fields(c);
@@ -2911,14 +3006,13 @@
                 void *userdata) {
 
         _cleanup_free_ char *k = NULL;
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(c);
 
         if (isempty(rvalue)) {
                 c->log_namespace = mfree(c->log_namespace);
@@ -2953,7 +3047,7 @@
                 void *userdata) {
 
         _cleanup_free_ char *p = NULL;
-        Condition **list = data, *c;
+        Condition **list = ASSERT_PTR(data), *c;
         ConditionType t = ltype;
         bool trigger, negate;
         const Unit *u = userdata;
@@ -2962,7 +3056,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -3009,7 +3102,7 @@
                 void *userdata) {
 
         _cleanup_free_ char *s = NULL;
-        Condition **list = data, *c;
+        Condition **list = ASSERT_PTR(data), *c;
         ConditionType t = ltype;
         bool trigger, negate;
         const Unit *u = userdata;
@@ -3018,7 +3111,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -3113,14 +3205,13 @@
                 void *data,
                 void *userdata) {
 
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
         char **a, **b;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -3162,14 +3253,13 @@
                 void *userdata) {
 
         ExecContext *c = data;
-        _unused_ const Unit *u = userdata;
+        _unused_ const Unit *u = ASSERT_PTR(userdata);
         bool invert = false;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -3257,7 +3347,7 @@
                 void *userdata) {
 
         ExecContext *c = data;
-        _unused_ const Unit *u = userdata;
+        _unused_ const Unit *u = ASSERT_PTR(userdata);
         bool invert = false;
         const char *p;
         int r;
@@ -3265,7 +3355,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -3541,6 +3630,75 @@
 }
 #endif
 
+int config_parse_restrict_filesystems(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+        ExecContext *c = ASSERT_PTR(data);
+        bool invert = false;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                /* Empty assignment resets the list */
+                c->restrict_filesystems = set_free(c->restrict_filesystems);
+                c->restrict_filesystems_allow_list = false;
+                return 0;
+        }
+
+        if (rvalue[0] == '~') {
+                invert = true;
+                rvalue++;
+        }
+
+        if (!c->restrict_filesystems) {
+                if (invert)
+                        /* Allow everything but the ones listed */
+                        c->restrict_filesystems_allow_list = false;
+                else
+                        /* Allow nothing but the ones listed */
+                        c->restrict_filesystems_allow_list = true;
+        }
+
+        for (const char *p = rvalue;;) {
+                _cleanup_free_ char *word = NULL;
+
+                r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
+                if (r == 0)
+                        break;
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Trailing garbage in %s, ignoring: %s", lvalue, rvalue);
+                        break;
+                }
+
+                r = lsm_bpf_parse_filesystem(
+                              word,
+                              &c->restrict_filesystems,
+                              FILESYSTEM_PARSE_LOG|
+                              (invert ? FILESYSTEM_PARSE_INVERT : 0)|
+                              (c->restrict_filesystems_allow_list ? FILESYSTEM_PARSE_ALLOW_LIST : 0),
+                              unit, filename, line);
+
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 int config_parse_unit_slice(
                 const char *unit,
                 const char *filename,
@@ -3575,7 +3733,7 @@
                 return 0;
         }
 
-        r = unit_set_slice(u, slice, UNIT_DEPENDENCY_FILE);
+        r = unit_set_slice(u, slice);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to assign slice %s to unit %s, ignoring: %m", slice->id, u->id);
                 return 0;
@@ -3618,7 +3776,7 @@
         return 0;
 }
 
-int config_parse_allowed_cpus(
+int config_parse_allowed_cpuset(
                 const char *unit,
                 const char *filename,
                 unsigned line,
@@ -3630,29 +3788,9 @@
                 void *data,
                 void *userdata) {
 
-        CGroupContext *c = data;
+        CPUSet *c = data;
 
-        (void) parse_cpu_set_extend(rvalue, &c->cpuset_cpus, true, unit, filename, line, lvalue);
-
-        return 0;
-}
-
-int config_parse_allowed_mems(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        CGroupContext *c = data;
-
-        (void) parse_cpu_set_extend(rvalue, &c->cpuset_mems, true, unit, filename, line, lvalue);
-
+        (void) parse_cpu_set_extend(rvalue, c, true, unit, filename, line, lvalue);
         return 0;
 }
 
@@ -3690,7 +3828,7 @@
                         bytes = physical_memory_scale(r, 10000U);
 
                 if (bytes >= UINT64_MAX ||
-                    (bytes <= 0 && !STR_IN_SET(lvalue, "MemorySwapMax", "MemoryLow", "MemoryMin", "DefaultMemoryLow", "DefaultMemoryMin"))) {
+                    (bytes <= 0 && !STR_IN_SET(lvalue, "MemorySwapMax", "MemoryZSwapMax", "MemoryLow", "MemoryMin", "DefaultMemoryLow", "DefaultMemoryMin"))) {
                         log_syntax(unit, LOG_WARNING, filename, line, 0, "Memory limit '%s' out of range, ignoring.", rvalue);
                         return 0;
                 }
@@ -3714,9 +3852,13 @@
                 c->memory_max = bytes;
         else if (streq(lvalue, "MemorySwapMax"))
                 c->memory_swap_max = bytes;
-        else if (streq(lvalue, "MemoryLimit"))
+        else if (streq(lvalue, "MemoryZSwapMax"))
+                c->memory_zswap_max = bytes;
+        else if (streq(lvalue, "MemoryLimit")) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Unit uses MemoryLimit=; please use MemoryMax= instead. Support for MemoryLimit= will be removed soon.");
                 c->memory_limit = bytes;
-        else
+        } else
                 return -EINVAL;
 
         return 0;
@@ -3794,12 +3936,12 @@
                 return 0;
         }
 
-        /* We either accept a boolean value, which may be used to turn on delegation for all controllers, or turn it
-         * off for all. Or it takes a list of controller names, in which case we add the specified controllers to the
-         * mask to delegate. */
+        /* We either accept a boolean value, which may be used to turn on delegation for all controllers, or
+         * turn it off for all. Or it takes a list of controller names, in which case we add the specified
+         * controllers to the mask to delegate. Delegate= enables delegation without any controllers. */
 
         if (isempty(rvalue)) {
-                /* An empty string resets controllers and set Delegate=yes. */
+                /* An empty string resets controllers and sets Delegate=yes. */
                 c->delegate = true;
                 c->delegate_controllers = 0;
                 return 0;
@@ -3995,13 +4137,12 @@
         _cleanup_free_ char *path = NULL, *resolved = NULL;
         CGroupIODeviceWeight *w;
         CGroupContext *c = data;
-        const char *p = rvalue;
+        const char *p = ASSERT_PTR(rvalue);
         uint64_t u;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
 
         if (isempty(rvalue)) {
                 while (c->io_device_weights)
@@ -4013,11 +4154,16 @@
         r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
         if (r == -ENOMEM)
                 return log_oom();
-        if (r <= 0 || isempty(p)) {
+        if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to extract device path and weight from '%s', ignoring.", rvalue);
                 return 0;
         }
+        if (r == 0 || isempty(p)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid device path or weight specified in '%s', ignoring.", rvalue);
+                return 0;
+        }
 
         r = unit_path_printf(userdata, path, &resolved);
         if (r < 0) {
@@ -4064,13 +4210,12 @@
         _cleanup_free_ char *path = NULL, *resolved = NULL;
         CGroupIODeviceLatency *l;
         CGroupContext *c = data;
-        const char *p = rvalue;
+        const char *p = ASSERT_PTR(rvalue);
         usec_t usec;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
 
         if (isempty(rvalue)) {
                 while (c->io_device_latencies)
@@ -4082,11 +4227,16 @@
         r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
         if (r == -ENOMEM)
                 return log_oom();
-        if (r <= 0 || isempty(p)) {
+        if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to extract device path and latency from '%s', ignoring.", rvalue);
                 return 0;
         }
+        if (r == 0 || isempty(p)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid device path or latency specified in '%s', ignoring.", rvalue);
+                return 0;
+        }
 
         r = unit_path_printf(userdata, path, &resolved);
         if (r < 0) {
@@ -4129,34 +4279,38 @@
                 void *userdata) {
 
         _cleanup_free_ char *path = NULL, *resolved = NULL;
-        CGroupIODeviceLimit *l = NULL, *t;
+        CGroupIODeviceLimit *l = NULL;
         CGroupContext *c = data;
         CGroupIOLimitType type;
-        const char *p = rvalue;
+        const char *p = ASSERT_PTR(rvalue);
         uint64_t num;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
 
         type = cgroup_io_limit_type_from_string(lvalue);
         assert(type >= 0);
 
         if (isempty(rvalue)) {
-                LIST_FOREACH(device_limits, l, c->io_device_limits)
-                        l->limits[type] = cgroup_io_limit_defaults[type];
+                LIST_FOREACH(device_limits, t, c->io_device_limits)
+                        t->limits[type] = cgroup_io_limit_defaults[type];
                 return 0;
         }
 
         r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
         if (r == -ENOMEM)
                 return log_oom();
-        if (r <= 0 || isempty(p)) {
+        if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to extract device node and bandwidth from '%s', ignoring.", rvalue);
                 return 0;
         }
+        if (r == 0 || isempty(p)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid device node or bandwidth specified in '%s', ignoring.", rvalue);
+                return 0;
+        }
 
         r = unit_path_printf(userdata, path, &resolved);
         if (r < 0) {
@@ -4179,12 +4333,11 @@
                 }
         }
 
-        LIST_FOREACH(device_limits, t, c->io_device_limits) {
+        LIST_FOREACH(device_limits, t, c->io_device_limits)
                 if (path_equal(resolved, t->path)) {
                         l = t;
                         break;
                 }
-        }
 
         if (!l) {
                 CGroupIOLimitType ttype;
@@ -4220,13 +4373,16 @@
         _cleanup_free_ char *path = NULL, *resolved = NULL;
         CGroupBlockIODeviceWeight *w;
         CGroupContext *c = data;
-        const char *p = rvalue;
+        const char *p = ASSERT_PTR(rvalue);
         uint64_t u;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
+
+        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                   "Unit uses %s=; please use IO*= settings instead. Support for %s= will be removed soon.",
+                   lvalue, lvalue);
 
         if (isempty(rvalue)) {
                 while (c->blockio_device_weights)
@@ -4238,11 +4394,16 @@
         r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
         if (r == -ENOMEM)
                 return log_oom();
-        if (r <= 0 || isempty(p)) {
+        if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to extract device node and weight from '%s', ignoring.", rvalue);
                 return 0;
         }
+        if (r == 0 || isempty(p)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid device node or weight specified in '%s', ignoring.", rvalue);
+                return 0;
+        }
 
         r = unit_path_printf(userdata, path, &resolved);
         if (r < 0) {
@@ -4287,23 +4448,26 @@
                 void *userdata) {
 
         _cleanup_free_ char *path = NULL, *resolved = NULL;
-        CGroupBlockIODeviceBandwidth *b = NULL, *t;
+        CGroupBlockIODeviceBandwidth *b = NULL;
         CGroupContext *c = data;
-        const char *p = rvalue;
+        const char *p = ASSERT_PTR(rvalue);
         uint64_t bytes;
         bool read;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
+
+        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                   "Unit uses %s=; please use IO*= settings instead. Support for %s= will be removed soon.",
+                   lvalue, lvalue);
 
         read = streq("BlockIOReadBandwidth", lvalue);
 
         if (isempty(rvalue)) {
-                LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths) {
-                        b->rbps = CGROUP_LIMIT_MAX;
-                        b->wbps = CGROUP_LIMIT_MAX;
+                LIST_FOREACH(device_bandwidths, t, c->blockio_device_bandwidths) {
+                        t->rbps = CGROUP_LIMIT_MAX;
+                        t->wbps = CGROUP_LIMIT_MAX;
                 }
                 return 0;
         }
@@ -4311,11 +4475,16 @@
         r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
         if (r == -ENOMEM)
                 return log_oom();
-        if (r <= 0 || isempty(p)) {
+        if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to extract device node and bandwidth from '%s', ignoring.", rvalue);
                 return 0;
         }
+        if (r == 0 || isempty(p)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid device node or bandwidth specified in '%s', ignoring.", rvalue);
+                return 0;
+        }
 
         r = unit_path_printf(userdata, path, &resolved);
         if (r < 0) {
@@ -4334,14 +4503,13 @@
                 return 0;
         }
 
-        LIST_FOREACH(device_bandwidths, t, c->blockio_device_bandwidths) {
+        LIST_FOREACH(device_bandwidths, t, c->blockio_device_bandwidths)
                 if (path_equal(resolved, t->path)) {
                         b = t;
                         break;
                 }
-        }
 
-        if (!t) {
+        if (!b) {
                 b = new0(CGroupBlockIODeviceBandwidth, 1);
                 if (!b)
                         return log_oom();
@@ -4404,56 +4572,88 @@
                 void *data,
                 void *userdata) {
 
-        char***rt = data;
+        ExecDirectory *ed = ASSERT_PTR(data);
         const Unit *u = userdata;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
-                *rt = strv_free(*rt);
+                exec_directory_done(ed);
                 return 0;
         }
 
         for (const char *p = rvalue;;) {
-                _cleanup_free_ char *word = NULL, *k = NULL;
+                _cleanup_free_ char *tuple = NULL;
 
-                r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
+                r = extract_first_word(&p, &tuple, NULL, EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE);
                 if (r == -ENOMEM)
                         return log_oom();
                 if (r < 0) {
                         log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Invalid syntax, ignoring: %s", rvalue);
+                                   "Invalid syntax %s=%s, ignoring: %m", lvalue, rvalue);
                         return 0;
                 }
                 if (r == 0)
                         return 0;
 
-                r = unit_path_printf(u, word, &k);
+                _cleanup_free_ char *src = NULL, *dest = NULL;
+                const char *q = tuple;
+                r = extract_many_words(&q, ":", EXTRACT_CUNESCAPE|EXTRACT_UNESCAPE_SEPARATORS, &src, &dest, NULL);
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r <= 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Invalid syntax in %s=, ignoring: %s", lvalue, tuple);
+                        return 0;
+                }
+
+                _cleanup_free_ char *sresolved = NULL;
+                r = unit_path_printf(u, src, &sresolved);
                 if (r < 0) {
                         log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Failed to resolve unit specifiers in \"%s\", ignoring: %m", word);
+                                   "Failed to resolve unit specifiers in \"%s\", ignoring: %m", src);
                         continue;
                 }
 
-                r = path_simplify_and_warn(k, PATH_CHECK_RELATIVE, unit, filename, line, lvalue);
+                r = path_simplify_and_warn(sresolved, PATH_CHECK_RELATIVE, unit, filename, line, lvalue);
                 if (r < 0)
                         continue;
 
-                if (path_startswith(k, "private")) {
+                if (path_startswith(sresolved, "private")) {
                         log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "%s= path can't be 'private', ignoring assignment: %s", lvalue, word);
+                                   "%s= path can't be 'private', ignoring assignment: %s", lvalue, tuple);
                         continue;
                 }
 
-                r = strv_push(rt, k);
+                /* For State and Runtime directories we support an optional destination parameter, which
+                 * will be used to create a symlink to the source. */
+                _cleanup_free_ char *dresolved = NULL;
+                if (!isempty(dest)) {
+                        if (streq(lvalue, "ConfigurationDirectory")) {
+                                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                           "Destination parameter is not supported for ConfigurationDirectory, ignoring: %s", tuple);
+                                continue;
+                        }
+
+                        r = unit_path_printf(u, dest, &dresolved);
+                        if (r < 0) {
+                                log_syntax(unit, LOG_WARNING, filename, line, r,
+                                        "Failed to resolve unit specifiers in \"%s\", ignoring: %m", dest);
+                                continue;
+                        }
+
+                        r = path_simplify_and_warn(dresolved, PATH_CHECK_RELATIVE, unit, filename, line, lvalue);
+                        if (r < 0)
+                                continue;
+                }
+
+                r = exec_directory_add(ed, sresolved, dresolved);
                 if (r < 0)
                         return log_oom();
-                k = NULL;
         }
 }
 
@@ -4469,17 +4669,18 @@
                 void *data,
                 void *userdata) {
 
-        _cleanup_free_ char *word = NULL, *k = NULL, *unescaped = NULL;
-        ExecContext *context = data;
+        _cleanup_free_ char *word = NULL, *k = NULL;
+        _cleanup_free_ void *d = NULL;
+        ExecContext *context = ASSERT_PTR(data);
         ExecSetCredential *old;
         Unit *u = userdata;
-        const char *p;
-        int r, l;
+        bool encrypted = ltype;
+        const char *p = ASSERT_PTR(rvalue);
+        size_t size;
+        int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
-        assert(context);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -4487,12 +4688,15 @@
                 return 0;
         }
 
-        p = rvalue;
         r = extract_first_word(&p, &word, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
         if (r == -ENOMEM)
                 return log_oom();
-        if (r <= 0 || !p) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Invalid syntax, ignoring: %s", rvalue);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to extract credential name, ignoring: %s", rvalue);
+                return 0;
+        }
+        if (r == 0 || isempty(p)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid syntax, ignoring: %s", rvalue);
                 return 0;
         }
 
@@ -4506,33 +4710,51 @@
                 return 0;
         }
 
-        /* We support escape codes here, so that users can insert trailing \n if they like */
-        l = cunescape(p, UNESCAPE_ACCEPT_NUL, &unescaped);
-        if (l < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, l, "Can't unescape \"%s\", ignoring: %m", p);
-                return 0;
+        if (encrypted) {
+                r = unbase64mem_full(p, SIZE_MAX, true, &d, &size);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r, "Encrypted credential data not valid Base64 data, ignoring.");
+                        return 0;
+                }
+        } else {
+                char *unescaped;
+                ssize_t l;
+
+                /* We support escape codes here, so that users can insert trailing \n if they like */
+                l = cunescape(p, UNESCAPE_ACCEPT_NUL, &unescaped);
+                if (l < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, l, "Can't unescape \"%s\", ignoring: %m", p);
+                        return 0;
+                }
+
+                d = unescaped;
+                size = l;
         }
 
         old = hashmap_get(context->set_credentials, k);
         if (old) {
-                free_and_replace(old->data, unescaped);
-                old->size = l;
+                free_and_replace(old->data, d);
+                old->size = size;
+                old->encrypted = encrypted;
         } else {
                 _cleanup_(exec_set_credential_freep) ExecSetCredential *sc = NULL;
 
-                sc = new0(ExecSetCredential, 1);
+                sc = new(ExecSetCredential, 1);
                 if (!sc)
                         return log_oom();
 
-                sc->id = TAKE_PTR(k);
-                sc->data = TAKE_PTR(unescaped);
-                sc->size = l;
+                *sc = (ExecSetCredential) {
+                        .id = TAKE_PTR(k),
+                        .data = TAKE_PTR(d),
+                        .size = size,
+                        .encrypted = encrypted,
+                };
 
                 r = hashmap_ensure_put(&context->set_credentials, &exec_set_credential_hash_ops, sc->id, sc);
                 if (r == -ENOMEM)
                         return log_oom();
                 if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, l,
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
                                    "Duplicated credential value '%s', ignoring assignment: %s", sc->id, rvalue);
                         return 0;
                 }
@@ -4556,7 +4778,9 @@
                 void *userdata) {
 
         _cleanup_free_ char *word = NULL, *k = NULL, *q = NULL;
-        ExecContext *context = data;
+        ExecContext *context = ASSERT_PTR(data);
+        ExecLoadCredential *old;
+        bool encrypted = ltype;
         Unit *u = userdata;
         const char *p;
         int r;
@@ -4564,11 +4788,10 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(context);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
-                context->load_credentials = strv_free(context->load_credentials);
+                context->load_credentials = hashmap_free(context->load_credentials);
                 return 0;
         }
 
@@ -4592,7 +4815,7 @@
         }
 
         if (isempty(p)) {
-                /* If only one field field is specified take it as shortcut for inheriting a credential named
+                /* If only one field is specified take it as shortcut for inheriting a credential named
                  * the same way from our parent */
                 q = strdup(k);
                 if (!q)
@@ -4604,14 +4827,39 @@
                         return 0;
                 }
                 if (path_is_absolute(q) ? !path_is_normalized(q) : !credential_name_valid(q)) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r, "Credential source \"%s\" not valid, ignoring.", q);
+                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Credential source \"%s\" not valid, ignoring.", q);
                         return 0;
                 }
         }
 
-        r = strv_consume_pair(&context->load_credentials, TAKE_PTR(k), TAKE_PTR(q));
-        if (r < 0)
-                return log_oom();
+        old = hashmap_get(context->load_credentials, k);
+        if (old) {
+                free_and_replace(old->path, q);
+                old->encrypted = encrypted;
+        } else {
+                _cleanup_(exec_load_credential_freep) ExecLoadCredential *lc = NULL;
+
+                lc = new(ExecLoadCredential, 1);
+                if (!lc)
+                        return log_oom();
+
+                *lc = (ExecLoadCredential) {
+                        .id = TAKE_PTR(k),
+                        .path = TAKE_PTR(q),
+                        .encrypted = encrypted,
+                };
+
+                r = hashmap_ensure_put(&context->load_credentials, &exec_load_credential_hash_ops, lc->id, lc);
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Duplicated credential value '%s', ignoring assignment: %s", lc->id, rvalue);
+                        return 0;
+                }
+
+                TAKE_PTR(lc);
+        }
 
         return 0;
 }
@@ -4628,13 +4876,12 @@
                 void *data,
                 void *userdata) {
 
-        ExitStatusSet *status_set = data;
+        ExitStatusSet *status_set = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(status_set);
 
         /* Empty assignment resets the list */
         if (isempty(rvalue)) {
@@ -4694,13 +4941,12 @@
                 void *userdata) {
 
         const Unit *u = userdata;
-        char*** sv = data;
+        char*** sv = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -4770,13 +5016,12 @@
                 void *userdata) {
 
         const Unit *u = userdata;
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -4841,14 +5086,13 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -4926,7 +5170,7 @@
                                 if (r == -ENOMEM)
                                         return log_oom();
                                 if (r < 0) {
-                                        log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse %s: %s", lvalue, rvalue);
+                                        log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse %s=, ignoring: %s", lvalue, rvalue);
                                         return 0;
                                 }
 
@@ -4969,14 +5213,13 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -5129,14 +5372,13 @@
                 void *data,
                 void *userdata) {
 
-        ExecContext *c = data;
+        ExecContext *c = ASSERT_PTR(data);
         const Unit *u = userdata;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
@@ -5270,14 +5512,13 @@
                 void *data,
                 void *userdata) {
 
-        Unit *u = data;
+        Unit *u = ASSERT_PTR(data);
         usec_t usec;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         r = parse_sec_fix_0(rvalue, &usec);
         if (r < 0) {
@@ -5309,14 +5550,13 @@
                 void *data,
                 void *userdata) {
 
-        Unit *u = data;
+        Unit *u = ASSERT_PTR(data);
         usec_t usec;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         r = parse_sec_fix_0(rvalue, &usec);
         if (r < 0) {
@@ -5342,36 +5582,26 @@
                 void *data,
                 void *userdata) {
 
-        Manager *m = NULL;
-        EmergencyAction *x = data;
+        EmergencyAction *x = ASSERT_PTR(data);
+        bool is_system;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
+        /* If we have a unit determine the scope based on it */
         if (unit)
-                m = ((Unit*) userdata)->manager;
+                is_system = MANAGER_IS_SYSTEM(((Unit*) ASSERT_PTR(userdata))->manager);
         else
-                m = data;
+                is_system = ltype; /* otherwise, assume the scope is passed in via ltype */
 
-        r = parse_emergency_action(rvalue, MANAGER_IS_SYSTEM(m), x);
+        r = parse_emergency_action(rvalue, is_system, x);
         if (r < 0) {
-                if (r == -EOPNOTSUPP && MANAGER_IS_USER(m)) {
-                        /* Compat mode: remove for systemd 241. */
-
-                        log_syntax(unit, LOG_INFO, filename, line, r,
-                                   "%s= in user mode specified as \"%s\", using \"exit-force\" instead.",
-                                   lvalue, rvalue);
-                        *x = EMERGENCY_ACTION_EXIT_FORCE;
-                        return 0;
-                }
-
                 if (r == -EOPNOTSUPP)
                         log_syntax(unit, LOG_WARNING, filename, line, r,
                                    "%s= specified as %s mode action, ignoring: %s",
-                                   lvalue, MANAGER_IS_SYSTEM(m) ? "user" : "system", rvalue);
+                                   lvalue, is_system ? "user" : "system", rvalue);
                 else
                         log_syntax(unit, LOG_WARNING, filename, line, r,
                                    "Failed to parse %s=, ignoring: %s", lvalue, rvalue);
@@ -5394,14 +5624,13 @@
                 void *userdata) {
 
         _cleanup_free_ char *k = NULL, *n = NULL;
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         char **s = data;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(u);
 
         if (isempty(rvalue)) {
                 /* An empty assignment removes already set value. */
@@ -5517,13 +5746,12 @@
 
         _cleanup_free_ char *resolved = NULL;
         const Unit *u = userdata;
-        char ***paths = data;
+        char ***paths = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(paths);
 
         if (isempty(rvalue)) {
                 *paths = strv_free(*paths);
@@ -5576,12 +5804,12 @@
                 void *userdata) {
         _cleanup_free_ char *resolved = NULL, *word = NULL;
         CGroupContext *c = data;
+        const char *p = ASSERT_PTR(rvalue);
         Unit *u = userdata;
         int attach_type, r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
 
         if (isempty(rvalue)) {
                 while (c->bpf_foreign_programs)
@@ -5590,13 +5818,17 @@
                 return 0;
         }
 
-        r = extract_first_word(&rvalue, &word, ":", 0);
+        r = extract_first_word(&p, &word, ":", 0);
         if (r == -ENOMEM)
                 return log_oom();
-        if (r <= 0 || isempty(rvalue)) {
+        if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse foreign BPF program, ignoring: %s", rvalue);
                 return 0;
         }
+        if (r == 0 || isempty(p)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid syntax in %s=, ignoring: %s", lvalue, rvalue);
+                return 0;
+        }
 
         attach_type = bpf_cgroup_attach_type_from_string(word);
         if (attach_type < 0) {
@@ -5604,9 +5836,9 @@
                 return 0;
         }
 
-        r = unit_path_printf(u, rvalue, &resolved);
+        r = unit_path_printf(u, p, &resolved);
         if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to resolve unit specifiers in '%s', ignoring: %m", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to resolve unit specifiers in '%s', ignoring: %s", p, rvalue);
                 return 0;
         }
 
@@ -5666,6 +5898,71 @@
         return 0;
 }
 
+int config_parse_restrict_network_interfaces(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+        CGroupContext *c = ASSERT_PTR(data);
+        bool is_allow_rule = true;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                /* Empty assignment resets the list */
+                c->restrict_network_interfaces = set_free(c->restrict_network_interfaces);
+                return 0;
+        }
+
+        if (rvalue[0] == '~') {
+                is_allow_rule = false;
+                rvalue++;
+        }
+
+        if (set_isempty(c->restrict_network_interfaces))
+                /* Only initialize this when creating the set */
+                c->restrict_network_interfaces_is_allow_list = is_allow_rule;
+
+        for (const char *p = rvalue;;) {
+                _cleanup_free_ char *word = NULL;
+
+                r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
+                if (r == 0)
+                        break;
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Trailing garbage in %s, ignoring: %s", lvalue, rvalue);
+                        break;
+                }
+
+                if (!ifname_valid(word)) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid interface name, ignoring: %s", word);
+                        continue;
+                }
+
+                if (c->restrict_network_interfaces_is_allow_list != is_allow_rule)
+                        free(set_remove(c->restrict_network_interfaces, word));
+                else {
+                        r = set_put_strdup(&c->restrict_network_interfaces, word);
+                        if (r < 0)
+                                return log_oom();
+                }
+        }
+
+        return 0;
+}
+
 static int merge_by_names(Unit **u, Set *names, const char *id) {
         char *k;
         int r;
@@ -5714,6 +6011,7 @@
         assert(u->id);
 
         if (u->transient) {
+                u->access_selinux_context = mfree(u->access_selinux_context);
                 u->load_state = UNIT_LOADED;
                 return 0;
         }
@@ -5759,7 +6057,24 @@
 
                         u->load_state = u->perpetual ? UNIT_LOADED : UNIT_MASKED; /* don't allow perpetual units to ever be masked */
                         u->fragment_mtime = 0;
+                        u->access_selinux_context = mfree(u->access_selinux_context);
                 } else {
+#if HAVE_SELINUX
+                        if (mac_selinux_use()) {
+                                _cleanup_freecon_ char *selcon = NULL;
+
+                                /* Cache the SELinux context of the unit file here. We'll make use of when checking access permissions to loaded units */
+                                r = fgetfilecon_raw(fileno(f), &selcon);
+                                if (r < 0)
+                                        log_unit_warning_errno(u, r, "Failed to read SELinux context of '%s', ignoring: %m", fragment);
+
+                                r = free_and_strdup(&u->access_selinux_context, selcon);
+                                if (r < 0)
+                                        return r;
+                        } else
+#endif
+                                u->access_selinux_context = mfree(u->access_selinux_context);
+
                         u->load_state = UNIT_LOADED;
                         u->fragment_mtime = timespec_load(&st.st_mtim);
 
@@ -5824,6 +6139,7 @@
                 { config_parse_string,                "STRING" },
                 { config_parse_path,                  "PATH" },
                 { config_parse_unit_path_printf,      "PATH" },
+                { config_parse_colon_separated_paths, "PATH" },
                 { config_parse_strv,                  "STRING [...]" },
                 { config_parse_exec_nice,             "NICE" },
                 { config_parse_exec_oom_score_adjust, "OOMSCOREADJUST" },
@@ -5844,6 +6160,7 @@
                 { config_parse_unit_deps,             "UNIT [...]" },
                 { config_parse_exec,                  "PATH [ARGUMENT [...]]" },
                 { config_parse_service_type,          "SERVICETYPE" },
+                { config_parse_service_exit_type,     "SERVICEEXITTYPE" },
                 { config_parse_service_restart,       "SERVICERESTART" },
                 { config_parse_service_timeout_failure_mode, "TIMEOUTMODE" },
                 { config_parse_kill_mode,             "KILLMODE" },
@@ -5880,8 +6197,10 @@
                 { config_parse_address_families,      "FAMILIES" },
                 { config_parse_restrict_namespaces,   "NAMESPACES"  },
 #endif
+                { config_parse_restrict_filesystems,  "FILESYSTEMS"  },
                 { config_parse_cpu_shares,            "SHARES" },
                 { config_parse_cg_weight,             "WEIGHT" },
+                { config_parse_cg_cpu_weight,         "CPUWEIGHT" },
                 { config_parse_memory_limit,          "LIMIT" },
                 { config_parse_device_allow,          "DEVICE" },
                 { config_parse_device_policy,         "POLICY" },
@@ -5899,10 +6218,10 @@
                 { config_parse_job_mode,              "MODE" },
                 { config_parse_job_mode_isolate,      "BOOLEAN" },
                 { config_parse_personality,           "PERSONALITY" },
+                { config_parse_log_filter_patterns,   "REGEX" },
         };
 
         const char *prev = NULL;
-        const char *i;
 
         assert(f);
 
@@ -5955,9 +6274,7 @@
                 void *data,
                 void *userdata) {
 
-        CPUSet *affinity = data;
-
-        assert(affinity);
+        CPUSet *affinity = ASSERT_PTR(data);
 
         (void) parse_cpu_set_extend(rvalue, affinity, true, unit, filename, line, lvalue);
 
@@ -5977,12 +6294,11 @@
                 void *userdata) {
 
         int k;
-        ShowStatus *b = data;
+        ShowStatus *b = ASSERT_PTR(data);
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         k = parse_show_status(rvalue, b);
         if (k < 0)
@@ -6003,13 +6319,12 @@
                 void *data,
                 void *userdata) {
 
-        ExecOutput t, *eo = data;
+        ExecOutput t, *eo = ASSERT_PTR(data);
         bool obsolete = false;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (streq(rvalue, "syslog")) {
                 t = EXEC_OUTPUT_JOURNAL;
@@ -6077,10 +6392,9 @@
                 void *data,
                 void *userdata) {
 
-        Swap *s = userdata;
+        Swap *s = ASSERT_PTR(userdata);
         int r, priority;
 
-        assert(s);
         assert(filename);
         assert(lvalue);
         assert(rvalue);
@@ -6112,3 +6426,146 @@
         s->parameters_fragment.priority_set = true;
         return 0;
 }
+
+int config_parse_watchdog_sec(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        usec_t *usec = data;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        /* This is called for {Runtime,Reboot,KExec}WatchdogSec= where "default" maps to
+         * USEC_INFINITY internally. */
+
+        if (streq(rvalue, "default"))
+                *usec = USEC_INFINITY;
+        else if (streq(rvalue, "off"))
+                *usec = 0;
+        else
+                return config_parse_sec(unit, filename, line, section, section_line, lvalue, ltype, rvalue, data, userdata);
+
+        return 0;
+}
+
+int config_parse_tty_size(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        unsigned *sz = data;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *sz = UINT_MAX;
+                return 0;
+        }
+
+        return config_parse_unsigned(unit, filename, line, section, section_line, lvalue, ltype, rvalue, data, userdata);
+}
+
+int config_parse_log_filter_patterns(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        ExecContext *c = ASSERT_PTR(data);
+        const char *pattern = ASSERT_PTR(rvalue);
+        bool is_allowlist = true;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+
+        if (isempty(pattern)) {
+                /* Empty assignment resets the lists. */
+                c->log_filter_allowed_patterns = set_free(c->log_filter_allowed_patterns);
+                c->log_filter_denied_patterns = set_free(c->log_filter_denied_patterns);
+                return 0;
+        }
+
+        if (pattern[0] == '~') {
+                is_allowlist = false;
+                pattern++;
+                if (isempty(pattern))
+                        /* LogFilterPatterns=~ is not considered a valid pattern. */
+                        return log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                          "Regex pattern invalid, ignoring: %s=%s", lvalue, rvalue);
+        }
+
+        if (pattern_compile_and_log(pattern, 0, NULL) < 0)
+                return 0;
+
+        r = set_put_strdup(is_allowlist ? &c->log_filter_allowed_patterns : &c->log_filter_denied_patterns,
+                           pattern);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to store log filtering pattern, ignoring: %s=%s", lvalue, rvalue);
+                return 0;
+        }
+
+        return 0;
+}
+
+int config_parse_open_file(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(open_file_freep) OpenFile *of = NULL;
+        OpenFile **head = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                open_file_free_many(head);
+                return 0;
+        }
+
+        r = open_file_parse(rvalue, &of);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse OpenFile= setting, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        LIST_APPEND(open_files, *head, TAKE_PTR(of));
+
+        return 0;
+}
diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h
index 45e9c39..11d43dd 100644
--- a/src/core/load-fragment.h
+++ b/src/core/load-fragment.h
@@ -4,6 +4,10 @@
 #include "conf-parser.h"
 #include "unit.h"
 
+/* These functions are declared in the header to make them accessible to unit tests. */
+bool contains_instance_specifier_superset(const char *s);
+int unit_is_likely_recursive_template_dependency(Unit *u, const char *name, const char *format);
+
 /* Config-parsing helpers relevant only for sources under src/core/ */
 int parse_crash_chvt(const char *value, int *data);
 int parse_confirm_spawn(const char *value, char **console);
@@ -19,6 +23,7 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_unit_string_printf);
 CONFIG_PARSER_PROTOTYPE(config_parse_unit_strv_printf);
 CONFIG_PARSER_PROTOTYPE(config_parse_unit_path_printf);
+CONFIG_PARSER_PROTOTYPE(config_parse_colon_separated_paths);
 CONFIG_PARSER_PROTOTYPE(config_parse_unit_path_strv_printf);
 CONFIG_PARSER_PROTOTYPE(config_parse_documentation);
 CONFIG_PARSER_PROTOTYPE(config_parse_socket_listen);
@@ -32,6 +37,7 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_service_timeout_abort);
 CONFIG_PARSER_PROTOTYPE(config_parse_service_timeout_failure_mode);
 CONFIG_PARSER_PROTOTYPE(config_parse_service_type);
+CONFIG_PARSER_PROTOTYPE(config_parse_service_exit_type);
 CONFIG_PARSER_PROTOTYPE(config_parse_service_restart);
 CONFIG_PARSER_PROTOTYPE(config_parse_socket_bindtodevice);
 CONFIG_PARSER_PROTOTYPE(config_parse_exec_output);
@@ -72,6 +78,7 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_unset_environ);
 CONFIG_PARSER_PROTOTYPE(config_parse_unit_slice);
 CONFIG_PARSER_PROTOTYPE(config_parse_cg_weight);
+CONFIG_PARSER_PROTOTYPE(config_parse_cg_cpu_weight);
 CONFIG_PARSER_PROTOTYPE(config_parse_cpu_shares);
 CONFIG_PARSER_PROTOTYPE(config_parse_memory_limit);
 CONFIG_PARSER_PROTOTYPE(config_parse_tasks_max);
@@ -101,18 +108,17 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_namespace_path_strv);
 CONFIG_PARSER_PROTOTYPE(config_parse_temporary_filesystems);
 CONFIG_PARSER_PROTOTYPE(config_parse_cpu_quota);
-CONFIG_PARSER_PROTOTYPE(config_parse_allowed_cpus);
-CONFIG_PARSER_PROTOTYPE(config_parse_allowed_mems);
+CONFIG_PARSER_PROTOTYPE(config_parse_allowed_cpuset);
 CONFIG_PARSER_PROTOTYPE(config_parse_protect_home);
 CONFIG_PARSER_PROTOTYPE(config_parse_protect_system);
 CONFIG_PARSER_PROTOTYPE(config_parse_bus_name);
 CONFIG_PARSER_PROTOTYPE(config_parse_exec_utmp_mode);
 CONFIG_PARSER_PROTOTYPE(config_parse_working_directory);
 CONFIG_PARSER_PROTOTYPE(config_parse_fdname);
-CONFIG_PARSER_PROTOTYPE(config_parse_sec_fix_0);
 CONFIG_PARSER_PROTOTYPE(config_parse_user_group_compat);
 CONFIG_PARSER_PROTOTYPE(config_parse_user_group_strv_compat);
 CONFIG_PARSER_PROTOTYPE(config_parse_restrict_namespaces);
+CONFIG_PARSER_PROTOTYPE(config_parse_restrict_filesystems);
 CONFIG_PARSER_PROTOTYPE(config_parse_bind_paths);
 CONFIG_PARSER_PROTOTYPE(config_parse_exec_keyring_mode);
 CONFIG_PARSER_PROTOTYPE(config_parse_protect_proc);
@@ -141,6 +147,11 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_extension_images);
 CONFIG_PARSER_PROTOTYPE(config_parse_bpf_foreign_program);
 CONFIG_PARSER_PROTOTYPE(config_parse_cgroup_socket_bind);
+CONFIG_PARSER_PROTOTYPE(config_parse_restrict_network_interfaces);
+CONFIG_PARSER_PROTOTYPE(config_parse_watchdog_sec);
+CONFIG_PARSER_PROTOTYPE(config_parse_tty_size);
+CONFIG_PARSER_PROTOTYPE(config_parse_log_filter_patterns);
+CONFIG_PARSER_PROTOTYPE(config_parse_open_file);
 
 /* gperf prototypes */
 const struct ConfigPerfItem* load_fragment_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
deleted file mode 100644
index 64761dd..0000000
--- a/src/core/locale-setup.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <stdlib.h>
-
-#include "env-file.h"
-#include "env-util.h"
-#include "locale-setup.h"
-#include "locale-util.h"
-#include "proc-cmdline.h"
-#include "string-util.h"
-#include "strv.h"
-#include "util.h"
-#include "virt.h"
-
-int locale_setup(char ***environment) {
-        _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {};
-        _cleanup_strv_free_ char **add = NULL;
-        LocaleVariable i;
-        int r;
-
-        r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX,
-                                      "locale.LANG",              &variables[VARIABLE_LANG],
-                                      "locale.LANGUAGE",          &variables[VARIABLE_LANGUAGE],
-                                      "locale.LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
-                                      "locale.LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
-                                      "locale.LC_TIME",           &variables[VARIABLE_LC_TIME],
-                                      "locale.LC_COLLATE",        &variables[VARIABLE_LC_COLLATE],
-                                      "locale.LC_MONETARY",       &variables[VARIABLE_LC_MONETARY],
-                                      "locale.LC_MESSAGES",       &variables[VARIABLE_LC_MESSAGES],
-                                      "locale.LC_PAPER",          &variables[VARIABLE_LC_PAPER],
-                                      "locale.LC_NAME",           &variables[VARIABLE_LC_NAME],
-                                      "locale.LC_ADDRESS",        &variables[VARIABLE_LC_ADDRESS],
-                                      "locale.LC_TELEPHONE",      &variables[VARIABLE_LC_TELEPHONE],
-                                      "locale.LC_MEASUREMENT",    &variables[VARIABLE_LC_MEASUREMENT],
-                                      "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]);
-        if (r < 0 && r != -ENOENT)
-                log_warning_errno(r, "Failed to read /proc/cmdline: %m");
-
-        /* Hmm, nothing set on the kernel cmd line? Then let's try /etc/locale.conf */
-        if (r <= 0) {
-                r = parse_env_file(NULL, "/etc/locale.conf",
-                                   "LANG",              &variables[VARIABLE_LANG],
-                                   "LANGUAGE",          &variables[VARIABLE_LANGUAGE],
-                                   "LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
-                                   "LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
-                                   "LC_TIME",           &variables[VARIABLE_LC_TIME],
-                                   "LC_COLLATE",        &variables[VARIABLE_LC_COLLATE],
-                                   "LC_MONETARY",       &variables[VARIABLE_LC_MONETARY],
-                                   "LC_MESSAGES",       &variables[VARIABLE_LC_MESSAGES],
-                                   "LC_PAPER",          &variables[VARIABLE_LC_PAPER],
-                                   "LC_NAME",           &variables[VARIABLE_LC_NAME],
-                                   "LC_ADDRESS",        &variables[VARIABLE_LC_ADDRESS],
-                                   "LC_TELEPHONE",      &variables[VARIABLE_LC_TELEPHONE],
-                                   "LC_MEASUREMENT",    &variables[VARIABLE_LC_MEASUREMENT],
-                                   "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]);
-                if (r < 0 && r != -ENOENT)
-                        log_warning_errno(r, "Failed to read /etc/locale.conf: %m");
-        }
-
-        for (i = 0; i < _VARIABLE_LC_MAX; i++) {
-                char *s;
-
-                if (!variables[i])
-                        continue;
-
-                s = strjoin(locale_variable_to_string(i), "=", variables[i]);
-                if (!s)
-                        return -ENOMEM;
-
-                if (strv_consume(&add, s) < 0)
-                        return -ENOMEM;
-        }
-
-        if (strv_isempty(add)) {
-                /* If no locale is configured then default to compile-time default. */
-
-                add = strv_new("LANG=" SYSTEMD_DEFAULT_LOCALE);
-                if (!add)
-                        return -ENOMEM;
-        }
-
-        if (strv_isempty(*environment))
-                strv_free_and_replace(*environment, add);
-        else {
-                char **merged;
-
-                merged = strv_env_merge(2, *environment, add);
-                if (!merged)
-                        return -ENOMEM;
-
-                strv_free_and_replace(*environment, merged);
-        }
-
-        return 0;
-}
diff --git a/src/core/locale-setup.h b/src/core/locale-setup.h
deleted file mode 100644
index d554ad3..0000000
--- a/src/core/locale-setup.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-int locale_setup(char ***environment);
diff --git a/src/core/main.c b/src/core/main.c
index c64c738..1f022a7 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -3,9 +3,10 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <getopt.h>
+#include <linux/oom.h>
 #include <sys/mount.h>
 #include <sys/prctl.h>
-#include <sys/reboot.h>
+#include <sys/utsname.h>
 #include <unistd.h>
 #if HAVE_SECCOMP
 #include <seccomp.h>
@@ -21,6 +22,10 @@
 #include "alloc-util.h"
 #include "apparmor-setup.h"
 #include "architecture.h"
+#include "argv-util.h"
+#if HAVE_LIBBPF
+#include "bpf-lsm.h"
+#endif
 #include "build.h"
 #include "bus-error.h"
 #include "bus-util.h"
@@ -29,9 +34,10 @@
 #include "clock-util.h"
 #include "conf-parser.h"
 #include "cpu-set-util.h"
+#include "crash-handler.h"
 #include "dbus-manager.h"
 #include "dbus.h"
-#include "def.h"
+#include "constants.h"
 #include "dev-setup.h"
 #include "efi-random.h"
 #include "efivars.h"
@@ -46,6 +52,8 @@
 #include "hexdecoct.h"
 #include "hostname-setup.h"
 #include "ima-setup.h"
+#include "import-creds.h"
+#include "initrd-util.h"
 #include "killall.h"
 #include "kmod-setup.h"
 #include "limits-util.h"
@@ -53,9 +61,11 @@
 #include "log.h"
 #include "loopback-setup.h"
 #include "machine-id-setup.h"
+#include "main.h"
 #include "manager.h"
 #include "manager-dump.h"
-#include "mkdir.h"
+#include "manager-serialize.h"
+#include "mkdir-label.h"
 #include "mount-setup.h"
 #include "os-util.h"
 #include "pager.h"
@@ -66,7 +76,6 @@
 #include "proc-cmdline.h"
 #include "process-util.h"
 #include "random-util.h"
-#include "raw-clone.h"
 #include "rlimit-util.h"
 #if HAVE_SECCOMP
 #include "seccomp-util.h"
@@ -82,9 +91,9 @@
 #include "switch-root.h"
 #include "sysctl-util.h"
 #include "terminal-util.h"
+#include "time-util.h"
 #include "umask-util.h"
 #include "user-util.h"
-#include "util.h"
 #include "virt.h"
 #include "watchdog.h"
 
@@ -110,10 +119,10 @@
  * defaults are assigned in reset_arguments() below. */
 static char *arg_default_unit;
 static bool arg_system;
-static bool arg_dump_core;
-static int arg_crash_chvt;
-static bool arg_crash_shell;
-static bool arg_crash_reboot;
+bool arg_dump_core;
+int arg_crash_chvt;
+bool arg_crash_shell;
+bool arg_crash_reboot;
 static char *arg_confirm_spawn;
 static ShowStatus arg_show_status;
 static StatusUnitFormat arg_status_unit_format;
@@ -126,13 +135,16 @@
 static usec_t arg_default_timeout_start_usec;
 static usec_t arg_default_timeout_stop_usec;
 static usec_t arg_default_timeout_abort_usec;
+static usec_t arg_default_device_timeout_usec;
 static bool arg_default_timeout_abort_set;
 static usec_t arg_default_start_limit_interval;
 static unsigned arg_default_start_limit_burst;
 static usec_t arg_runtime_watchdog;
 static usec_t arg_reboot_watchdog;
 static usec_t arg_kexec_watchdog;
+static usec_t arg_pretimeout_watchdog;
 static char *arg_early_core_pattern;
+static char *arg_watchdog_pretimeout_governor;
 static char *arg_watchdog_device;
 static char **arg_default_environment;
 static char **arg_manager_environment;
@@ -158,6 +170,11 @@
 static usec_t arg_clock_usec;
 static void *arg_random_seed;
 static size_t arg_random_seed_size;
+static int arg_default_oom_score_adjust;
+static bool arg_default_oom_score_adjust_set;
+static char *arg_default_smack_process_label;
+static usec_t arg_reload_limit_interval_sec;
+static unsigned arg_reload_limit_burst;
 
 /* A copy of the original environment block */
 static char **saved_env = NULL;
@@ -195,143 +212,8 @@
         return 0;
 }
 
-_noreturn_ static void freeze_or_exit_or_reboot(void) {
-
-        /* If we are running in a container, let's prefer exiting, after all we can propagate an exit code to
-         * the container manager, and thus inform it that something went wrong. */
-        if (detect_container() > 0) {
-                log_emergency("Exiting PID 1...");
-                _exit(EXIT_EXCEPTION);
-        }
-
-        if (arg_crash_reboot) {
-                log_notice("Rebooting in 10s...");
-                (void) sleep(10);
-
-                log_notice("Rebooting now...");
-                (void) reboot(RB_AUTOBOOT);
-                log_emergency_errno(errno, "Failed to reboot: %m");
-        }
-
-        log_emergency("Freezing execution.");
-        freeze();
-}
-
-_noreturn_ static void crash(int sig) {
-        struct sigaction sa;
-        pid_t pid;
-
-        if (getpid_cached() != 1)
-                /* Pass this on immediately, if this is not PID 1 */
-                (void) raise(sig);
-        else if (!arg_dump_core)
-                log_emergency("Caught <%s>, not dumping core.", signal_to_string(sig));
-        else {
-                sa = (struct sigaction) {
-                        .sa_handler = nop_signal_handler,
-                        .sa_flags = SA_NOCLDSTOP|SA_RESTART,
-                };
-
-                /* We want to wait for the core process, hence let's enable SIGCHLD */
-                (void) sigaction(SIGCHLD, &sa, NULL);
-
-                pid = raw_clone(SIGCHLD);
-                if (pid < 0)
-                        log_emergency_errno(errno, "Caught <%s>, cannot fork for core dump: %m", signal_to_string(sig));
-                else if (pid == 0) {
-                        /* Enable default signal handler for core dump */
-
-                        sa = (struct sigaction) {
-                                .sa_handler = SIG_DFL,
-                        };
-                        (void) sigaction(sig, &sa, NULL);
-
-                        /* Don't limit the coredump size */
-                        (void) setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(RLIM_INFINITY));
-
-                        /* Just to be sure... */
-                        (void) chdir("/");
-
-                        /* Raise the signal again */
-                        pid = raw_getpid();
-                        (void) kill(pid, sig); /* raise() would kill the parent */
-
-                        assert_not_reached("We shouldn't be here...");
-                        _exit(EXIT_EXCEPTION);
-                } else {
-                        siginfo_t status;
-                        int r;
-
-                        /* Order things nicely. */
-                        r = wait_for_terminate(pid, &status);
-                        if (r < 0)
-                                log_emergency_errno(r, "Caught <%s>, waitpid() failed: %m", signal_to_string(sig));
-                        else if (status.si_code != CLD_DUMPED) {
-                                const char *s = status.si_code == CLD_EXITED
-                                        ? exit_status_to_string(status.si_status, EXIT_STATUS_LIBC)
-                                        : signal_to_string(status.si_status);
-
-                                log_emergency("Caught <%s>, core dump failed (child "PID_FMT", code=%s, status=%i/%s).",
-                                              signal_to_string(sig),
-                                              pid,
-                                              sigchld_code_to_string(status.si_code),
-                                              status.si_status, strna(s));
-                        } else
-                                log_emergency("Caught <%s>, dumped core as pid "PID_FMT".",
-                                              signal_to_string(sig), pid);
-                }
-        }
-
-        if (arg_crash_chvt >= 0)
-                (void) chvt(arg_crash_chvt);
-
-        sa = (struct sigaction) {
-                .sa_handler = SIG_IGN,
-                .sa_flags = SA_NOCLDSTOP|SA_NOCLDWAIT|SA_RESTART,
-        };
-
-        /* Let the kernel reap children for us */
-        (void) sigaction(SIGCHLD, &sa, NULL);
-
-        if (arg_crash_shell) {
-                log_notice("Executing crash shell in 10s...");
-                (void) sleep(10);
-
-                pid = raw_clone(SIGCHLD);
-                if (pid < 0)
-                        log_emergency_errno(errno, "Failed to fork off crash shell: %m");
-                else if (pid == 0) {
-                        (void) setsid();
-                        (void) make_console_stdio();
-                        (void) rlimit_nofile_safe();
-                        (void) execle("/bin/sh", "/bin/sh", NULL, environ);
-
-                        log_emergency_errno(errno, "execle() failed: %m");
-                        _exit(EXIT_EXCEPTION);
-                } else {
-                        log_info("Spawned crash shell as PID "PID_FMT".", pid);
-                        (void) wait_for_terminate(pid, NULL);
-                }
-        }
-
-        freeze_or_exit_or_reboot();
-}
-
-static void install_crash_handler(void) {
-        static const struct sigaction sa = {
-                .sa_handler = crash,
-                .sa_flags = SA_NODEFER, /* So that we can raise the signal again from the signal handler */
-        };
-        int r;
-
-        /* We ignore the return value here, since, we don't mind if we cannot set up a crash handler */
-        r = sigaction_many(&sa, SIGNALS_CRASH_HANDLER);
-        if (r < 0)
-                log_debug_errno(r, "I had trouble setting up the crash handler, ignoring: %m");
-}
-
 static int console_setup(void) {
-        _cleanup_close_ int tty_fd = -1;
+        _cleanup_close_ int tty_fd = -EBADF;
         int r;
 
         tty_fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC);
@@ -529,6 +411,56 @@
 
                 (void) parse_path_argument(value, false, &arg_watchdog_device);
 
+        } else if (proc_cmdline_key_streq(key, "systemd.watchdog_sec")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                if (streq(value, "default"))
+                        arg_runtime_watchdog = USEC_INFINITY;
+                else if (streq(value, "off"))
+                        arg_runtime_watchdog = 0;
+                else {
+                        r = parse_sec(value, &arg_runtime_watchdog);
+                        if (r < 0) {
+                                log_warning_errno(r, "Failed to parse systemd.watchdog_sec= argument '%s', ignoring: %m", value);
+                                return 0;
+                        }
+                }
+
+                arg_kexec_watchdog = arg_reboot_watchdog = arg_runtime_watchdog;
+
+        } else if (proc_cmdline_key_streq(key, "systemd.watchdog_pre_sec")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                if (streq(value, "default"))
+                        arg_pretimeout_watchdog = USEC_INFINITY;
+                else if (streq(value, "off"))
+                        arg_pretimeout_watchdog = 0;
+                else {
+                        r = parse_sec(value, &arg_pretimeout_watchdog);
+                        if (r < 0) {
+                                log_warning_errno(r, "Failed to parse systemd.watchdog_pre_sec= argument '%s', ignoring: %m", value);
+                                return 0;
+                        }
+                }
+
+        } else if (proc_cmdline_key_streq(key, "systemd.watchdog_pretimeout_governor")) {
+
+                if (proc_cmdline_value_missing(key, value) || isempty(value)) {
+                        arg_watchdog_pretimeout_governor = mfree(arg_watchdog_pretimeout_governor);
+                        return 0;
+                }
+
+                if (!string_is_safe(value)) {
+                        log_warning("Watchdog pretimeout governor '%s' is not valid, ignoring.", value);
+                        return 0;
+                }
+
+                return free_and_strdup_warn(&arg_watchdog_pretimeout_governor, value);
+
         } else if (proc_cmdline_key_streq(key, "systemd.clock_usec")) {
 
                 if (proc_cmdline_value_missing(key, value))
@@ -553,6 +485,28 @@
                 arg_random_seed = sz > 0 ? p : mfree(p);
                 arg_random_seed_size = sz;
 
+        } else if (proc_cmdline_key_streq(key, "systemd.reload_limit_interval_sec")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                r = parse_sec(value, &arg_reload_limit_interval_sec);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to parse systemd.reload_limit_interval_sec= argument '%s', ignoring: %m", value);
+                        return 0;
+                }
+
+        } else if (proc_cmdline_key_streq(key, "systemd.reload_limit_burst")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                r = safe_atou(value, &arg_reload_limit_burst);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to parse systemd.reload_limit_burst= argument '%s', ignoring: %m", value);
+                        return 0;
+                }
+
         } else if (streq(key, "quiet") && !value) {
 
                 if (arg_show_status == _SHOW_STATUS_INVALID)
@@ -631,72 +585,117 @@
         return 0;
 }
 
+static int config_parse_oom_score_adjust(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        int oa, r;
+
+        if (isempty(rvalue)) {
+                arg_default_oom_score_adjust_set = false;
+                return 0;
+        }
+
+        r = parse_oom_score_adjust(rvalue, &oa);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse the OOM score adjust value '%s', ignoring: %m", rvalue);
+                return 0;
+        }
+
+        arg_default_oom_score_adjust = oa;
+        arg_default_oom_score_adjust_set = true;
+
+        return 0;
+}
+
 static int parse_config_file(void) {
         const ConfigTableItem items[] = {
-                { "Manager", "LogLevel",                     config_parse_level2,                0, NULL                                   },
-                { "Manager", "LogTarget",                    config_parse_target,                0, NULL                                   },
-                { "Manager", "LogColor",                     config_parse_color,                 0, NULL                                   },
-                { "Manager", "LogLocation",                  config_parse_location,              0, NULL                                   },
-                { "Manager", "LogTime",                      config_parse_time,                  0, NULL                                   },
-                { "Manager", "DumpCore",                     config_parse_bool,                  0, &arg_dump_core                         },
-                { "Manager", "CrashChVT", /* legacy */       config_parse_crash_chvt,            0, &arg_crash_chvt                        },
-                { "Manager", "CrashChangeVT",                config_parse_crash_chvt,            0, &arg_crash_chvt                        },
-                { "Manager", "CrashShell",                   config_parse_bool,                  0, &arg_crash_shell                       },
-                { "Manager", "CrashReboot",                  config_parse_bool,                  0, &arg_crash_reboot                      },
-                { "Manager", "ShowStatus",                   config_parse_show_status,           0, &arg_show_status                       },
-                { "Manager", "StatusUnitFormat",             config_parse_status_unit_format,    0, &arg_status_unit_format                },
-                { "Manager", "CPUAffinity",                  config_parse_cpu_affinity2,         0, &arg_cpu_affinity                      },
-                { "Manager", "NUMAPolicy",                   config_parse_numa_policy,           0, &arg_numa_policy.type                  },
-                { "Manager", "NUMAMask",                     config_parse_numa_mask,             0, &arg_numa_policy                       },
-                { "Manager", "JoinControllers",              config_parse_warn_compat,           DISABLED_CONFIGURATION, NULL              },
-                { "Manager", "RuntimeWatchdogSec",           config_parse_sec,                   0, &arg_runtime_watchdog                  },
-                { "Manager", "RebootWatchdogSec",            config_parse_sec,                   0, &arg_reboot_watchdog                   },
-                { "Manager", "ShutdownWatchdogSec",          config_parse_sec,                   0, &arg_reboot_watchdog                   }, /* obsolete alias */
-                { "Manager", "KExecWatchdogSec",             config_parse_sec,                   0, &arg_kexec_watchdog                    },
-                { "Manager", "WatchdogDevice",               config_parse_path,                  0, &arg_watchdog_device                   },
-                { "Manager", "CapabilityBoundingSet",        config_parse_capability_set,        0, &arg_capability_bounding_set           },
-                { "Manager", "NoNewPrivileges",              config_parse_bool,                  0, &arg_no_new_privs                      },
+                { "Manager", "LogLevel",                     config_parse_level2,                0,                        NULL                              },
+                { "Manager", "LogTarget",                    config_parse_target,                0,                        NULL                              },
+                { "Manager", "LogColor",                     config_parse_color,                 0,                        NULL                              },
+                { "Manager", "LogLocation",                  config_parse_location,              0,                        NULL                              },
+                { "Manager", "LogTime",                      config_parse_time,                  0,                        NULL                              },
+                { "Manager", "DumpCore",                     config_parse_bool,                  0,                        &arg_dump_core                    },
+                { "Manager", "CrashChVT", /* legacy */       config_parse_crash_chvt,            0,                        &arg_crash_chvt                   },
+                { "Manager", "CrashChangeVT",                config_parse_crash_chvt,            0,                        &arg_crash_chvt                   },
+                { "Manager", "CrashShell",                   config_parse_bool,                  0,                        &arg_crash_shell                  },
+                { "Manager", "CrashReboot",                  config_parse_bool,                  0,                        &arg_crash_reboot                 },
+                { "Manager", "ShowStatus",                   config_parse_show_status,           0,                        &arg_show_status                  },
+                { "Manager", "StatusUnitFormat",             config_parse_status_unit_format,    0,                        &arg_status_unit_format           },
+                { "Manager", "CPUAffinity",                  config_parse_cpu_affinity2,         0,                        &arg_cpu_affinity                 },
+                { "Manager", "NUMAPolicy",                   config_parse_numa_policy,           0,                        &arg_numa_policy.type             },
+                { "Manager", "NUMAMask",                     config_parse_numa_mask,             0,                        &arg_numa_policy                  },
+                { "Manager", "JoinControllers",              config_parse_warn_compat,           DISABLED_CONFIGURATION,   NULL                              },
+                { "Manager", "RuntimeWatchdogSec",           config_parse_watchdog_sec,          0,                        &arg_runtime_watchdog             },
+                { "Manager", "RuntimeWatchdogPreSec",        config_parse_watchdog_sec,          0,                        &arg_pretimeout_watchdog          },
+                { "Manager", "RebootWatchdogSec",            config_parse_watchdog_sec,          0,                        &arg_reboot_watchdog              },
+                { "Manager", "ShutdownWatchdogSec",          config_parse_watchdog_sec,          0,                        &arg_reboot_watchdog              }, /* obsolete alias */
+                { "Manager", "KExecWatchdogSec",             config_parse_watchdog_sec,          0,                        &arg_kexec_watchdog               },
+                { "Manager", "WatchdogDevice",               config_parse_path,                  0,                        &arg_watchdog_device              },
+                { "Manager", "RuntimeWatchdogPreGovernor",   config_parse_string,                CONFIG_PARSE_STRING_SAFE, &arg_watchdog_pretimeout_governor },
+                { "Manager", "CapabilityBoundingSet",        config_parse_capability_set,        0,                        &arg_capability_bounding_set      },
+                { "Manager", "NoNewPrivileges",              config_parse_bool,                  0,                        &arg_no_new_privs                 },
 #if HAVE_SECCOMP
-                { "Manager", "SystemCallArchitectures",      config_parse_syscall_archs,         0, &arg_syscall_archs                     },
+                { "Manager", "SystemCallArchitectures",      config_parse_syscall_archs,         0,                        &arg_syscall_archs                },
+#else
+                { "Manager", "SystemCallArchitectures",      config_parse_warn_compat,           DISABLED_CONFIGURATION,   NULL                              },
+
 #endif
-                { "Manager", "TimerSlackNSec",               config_parse_nsec,                  0, &arg_timer_slack_nsec                  },
-                { "Manager", "DefaultTimerAccuracySec",      config_parse_sec,                   0, &arg_default_timer_accuracy_usec       },
-                { "Manager", "DefaultStandardOutput",        config_parse_output_restricted,     0, &arg_default_std_output                },
-                { "Manager", "DefaultStandardError",         config_parse_output_restricted,     0, &arg_default_std_error                 },
-                { "Manager", "DefaultTimeoutStartSec",       config_parse_sec,                   0, &arg_default_timeout_start_usec        },
-                { "Manager", "DefaultTimeoutStopSec",        config_parse_sec,                   0, &arg_default_timeout_stop_usec         },
-                { "Manager", "DefaultTimeoutAbortSec",       config_parse_default_timeout_abort, 0, NULL         },
-                { "Manager", "DefaultRestartSec",            config_parse_sec,                   0, &arg_default_restart_usec              },
-                { "Manager", "DefaultStartLimitInterval",    config_parse_sec,                   0, &arg_default_start_limit_interval      }, /* obsolete alias */
-                { "Manager", "DefaultStartLimitIntervalSec", config_parse_sec,                   0, &arg_default_start_limit_interval      },
-                { "Manager", "DefaultStartLimitBurst",       config_parse_unsigned,              0, &arg_default_start_limit_burst         },
-                { "Manager", "DefaultEnvironment",           config_parse_environ,               0, &arg_default_environment               },
-                { "Manager", "ManagerEnvironment",           config_parse_environ,               0, &arg_manager_environment               },
-                { "Manager", "DefaultLimitCPU",              config_parse_rlimit,                RLIMIT_CPU, arg_default_rlimit            },
-                { "Manager", "DefaultLimitFSIZE",            config_parse_rlimit,                RLIMIT_FSIZE, arg_default_rlimit          },
-                { "Manager", "DefaultLimitDATA",             config_parse_rlimit,                RLIMIT_DATA, arg_default_rlimit           },
-                { "Manager", "DefaultLimitSTACK",            config_parse_rlimit,                RLIMIT_STACK, arg_default_rlimit          },
-                { "Manager", "DefaultLimitCORE",             config_parse_rlimit,                RLIMIT_CORE, arg_default_rlimit           },
-                { "Manager", "DefaultLimitRSS",              config_parse_rlimit,                RLIMIT_RSS, arg_default_rlimit            },
-                { "Manager", "DefaultLimitNOFILE",           config_parse_rlimit,                RLIMIT_NOFILE, arg_default_rlimit         },
-                { "Manager", "DefaultLimitAS",               config_parse_rlimit,                RLIMIT_AS, arg_default_rlimit             },
-                { "Manager", "DefaultLimitNPROC",            config_parse_rlimit,                RLIMIT_NPROC, arg_default_rlimit          },
-                { "Manager", "DefaultLimitMEMLOCK",          config_parse_rlimit,                RLIMIT_MEMLOCK, arg_default_rlimit        },
-                { "Manager", "DefaultLimitLOCKS",            config_parse_rlimit,                RLIMIT_LOCKS, arg_default_rlimit          },
-                { "Manager", "DefaultLimitSIGPENDING",       config_parse_rlimit,                RLIMIT_SIGPENDING, arg_default_rlimit     },
-                { "Manager", "DefaultLimitMSGQUEUE",         config_parse_rlimit,                RLIMIT_MSGQUEUE, arg_default_rlimit       },
-                { "Manager", "DefaultLimitNICE",             config_parse_rlimit,                RLIMIT_NICE, arg_default_rlimit           },
-                { "Manager", "DefaultLimitRTPRIO",           config_parse_rlimit,                RLIMIT_RTPRIO, arg_default_rlimit         },
-                { "Manager", "DefaultLimitRTTIME",           config_parse_rlimit,                RLIMIT_RTTIME, arg_default_rlimit         },
-                { "Manager", "DefaultCPUAccounting",         config_parse_tristate,              0, &arg_default_cpu_accounting            },
-                { "Manager", "DefaultIOAccounting",          config_parse_bool,                  0, &arg_default_io_accounting             },
-                { "Manager", "DefaultIPAccounting",          config_parse_bool,                  0, &arg_default_ip_accounting             },
-                { "Manager", "DefaultBlockIOAccounting",     config_parse_bool,                  0, &arg_default_blockio_accounting        },
-                { "Manager", "DefaultMemoryAccounting",      config_parse_bool,                  0, &arg_default_memory_accounting         },
-                { "Manager", "DefaultTasksAccounting",       config_parse_bool,                  0, &arg_default_tasks_accounting          },
-                { "Manager", "DefaultTasksMax",              config_parse_tasks_max,             0, &arg_default_tasks_max                 },
-                { "Manager", "CtrlAltDelBurstAction",        config_parse_emergency_action,      0, &arg_cad_burst_action                  },
-                { "Manager", "DefaultOOMPolicy",             config_parse_oom_policy,            0, &arg_default_oom_policy                },
+                { "Manager", "TimerSlackNSec",               config_parse_nsec,                  0,                        &arg_timer_slack_nsec             },
+                { "Manager", "DefaultTimerAccuracySec",      config_parse_sec,                   0,                        &arg_default_timer_accuracy_usec  },
+                { "Manager", "DefaultStandardOutput",        config_parse_output_restricted,     0,                        &arg_default_std_output           },
+                { "Manager", "DefaultStandardError",         config_parse_output_restricted,     0,                        &arg_default_std_error            },
+                { "Manager", "DefaultTimeoutStartSec",       config_parse_sec,                   0,                        &arg_default_timeout_start_usec   },
+                { "Manager", "DefaultTimeoutStopSec",        config_parse_sec,                   0,                        &arg_default_timeout_stop_usec    },
+                { "Manager", "DefaultTimeoutAbortSec",       config_parse_default_timeout_abort, 0,                        NULL                              },
+                { "Manager", "DefaultDeviceTimeoutSec",      config_parse_sec,                   0,                        &arg_default_device_timeout_usec  },
+                { "Manager", "DefaultRestartSec",            config_parse_sec,                   0,                        &arg_default_restart_usec         },
+                { "Manager", "DefaultStartLimitInterval",    config_parse_sec,                   0,                        &arg_default_start_limit_interval }, /* obsolete alias */
+                { "Manager", "DefaultStartLimitIntervalSec", config_parse_sec,                   0,                        &arg_default_start_limit_interval },
+                { "Manager", "DefaultStartLimitBurst",       config_parse_unsigned,              0,                        &arg_default_start_limit_burst    },
+                { "Manager", "DefaultEnvironment",           config_parse_environ,               0,                        &arg_default_environment          },
+                { "Manager", "ManagerEnvironment",           config_parse_environ,               0,                        &arg_manager_environment          },
+                { "Manager", "DefaultLimitCPU",              config_parse_rlimit,                RLIMIT_CPU,               arg_default_rlimit                },
+                { "Manager", "DefaultLimitFSIZE",            config_parse_rlimit,                RLIMIT_FSIZE,             arg_default_rlimit                },
+                { "Manager", "DefaultLimitDATA",             config_parse_rlimit,                RLIMIT_DATA,              arg_default_rlimit                },
+                { "Manager", "DefaultLimitSTACK",            config_parse_rlimit,                RLIMIT_STACK,             arg_default_rlimit                },
+                { "Manager", "DefaultLimitCORE",             config_parse_rlimit,                RLIMIT_CORE,              arg_default_rlimit                },
+                { "Manager", "DefaultLimitRSS",              config_parse_rlimit,                RLIMIT_RSS,               arg_default_rlimit                },
+                { "Manager", "DefaultLimitNOFILE",           config_parse_rlimit,                RLIMIT_NOFILE,            arg_default_rlimit                },
+                { "Manager", "DefaultLimitAS",               config_parse_rlimit,                RLIMIT_AS,                arg_default_rlimit                },
+                { "Manager", "DefaultLimitNPROC",            config_parse_rlimit,                RLIMIT_NPROC,             arg_default_rlimit                },
+                { "Manager", "DefaultLimitMEMLOCK",          config_parse_rlimit,                RLIMIT_MEMLOCK,           arg_default_rlimit                },
+                { "Manager", "DefaultLimitLOCKS",            config_parse_rlimit,                RLIMIT_LOCKS,             arg_default_rlimit                },
+                { "Manager", "DefaultLimitSIGPENDING",       config_parse_rlimit,                RLIMIT_SIGPENDING,        arg_default_rlimit                },
+                { "Manager", "DefaultLimitMSGQUEUE",         config_parse_rlimit,                RLIMIT_MSGQUEUE,          arg_default_rlimit                },
+                { "Manager", "DefaultLimitNICE",             config_parse_rlimit,                RLIMIT_NICE,              arg_default_rlimit                },
+                { "Manager", "DefaultLimitRTPRIO",           config_parse_rlimit,                RLIMIT_RTPRIO,            arg_default_rlimit                },
+                { "Manager", "DefaultLimitRTTIME",           config_parse_rlimit,                RLIMIT_RTTIME,            arg_default_rlimit                },
+                { "Manager", "DefaultCPUAccounting",         config_parse_tristate,              0,                        &arg_default_cpu_accounting       },
+                { "Manager", "DefaultIOAccounting",          config_parse_bool,                  0,                        &arg_default_io_accounting        },
+                { "Manager", "DefaultIPAccounting",          config_parse_bool,                  0,                        &arg_default_ip_accounting        },
+                { "Manager", "DefaultBlockIOAccounting",     config_parse_bool,                  0,                        &arg_default_blockio_accounting   },
+                { "Manager", "DefaultMemoryAccounting",      config_parse_bool,                  0,                        &arg_default_memory_accounting    },
+                { "Manager", "DefaultTasksAccounting",       config_parse_bool,                  0,                        &arg_default_tasks_accounting     },
+                { "Manager", "DefaultTasksMax",              config_parse_tasks_max,             0,                        &arg_default_tasks_max            },
+                { "Manager", "CtrlAltDelBurstAction",        config_parse_emergency_action,      arg_system,               &arg_cad_burst_action             },
+                { "Manager", "DefaultOOMPolicy",             config_parse_oom_policy,            0,                        &arg_default_oom_policy           },
+                { "Manager", "DefaultOOMScoreAdjust",        config_parse_oom_score_adjust,      0,                        NULL                              },
+                { "Manager", "ReloadLimitIntervalSec",       config_parse_sec,                   0,                        &arg_reload_limit_interval_sec    },
+                { "Manager", "ReloadLimitBurst",             config_parse_unsigned,              0,                        &arg_reload_limit_burst           },
+#if ENABLE_SMACK
+                { "Manager", "DefaultSmackProcessLabel",     config_parse_string,                0,                        &arg_default_smack_process_label  },
+#else
+                { "Manager", "DefaultSmackProcessLabel",     config_parse_warn_compat,           DISABLED_CONFIGURATION,   NULL                              },
+#endif
                 {}
         };
 
@@ -722,6 +721,7 @@
                         config_item_table_lookup, items,
                         CONFIG_PARSE_WARN,
                         NULL,
+                        NULL,
                         NULL);
 
         /* Traditionally "0" was used to turn off the default unit timeouts. Fix this up so that we use
@@ -749,6 +749,7 @@
         m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
         m->default_timeout_abort_usec = arg_default_timeout_abort_usec;
         m->default_timeout_abort_set = arg_default_timeout_abort_set;
+        m->default_device_timeout_usec = arg_default_device_timeout_usec;
         m->default_restart_usec = arg_default_restart_usec;
         m->default_start_limit_interval = arg_default_start_limit_interval;
         m->default_start_limit_burst = arg_default_start_limit_burst;
@@ -767,6 +768,10 @@
         m->default_tasks_accounting = arg_default_tasks_accounting;
         m->default_tasks_max = arg_default_tasks_max;
         m->default_oom_policy = arg_default_oom_policy;
+        m->default_oom_score_adjust_set = arg_default_oom_score_adjust_set;
+        m->default_oom_score_adjust = arg_default_oom_score_adjust;
+
+        (void) manager_set_default_smack_process_label(m, arg_default_smack_process_label);
 
         (void) manager_set_default_rlimits(m, arg_default_rlimit);
 
@@ -775,6 +780,7 @@
 }
 
 static void set_manager_settings(Manager *m) {
+        int r;
 
         assert(m);
 
@@ -785,10 +791,18 @@
         m->confirm_spawn = arg_confirm_spawn;
         m->service_watchdogs = arg_service_watchdogs;
         m->cad_burst_action = arg_cad_burst_action;
+        /* Note that we don't do structured initialization here, otherwise it will reset the rate limit
+         * counter on every daemon-reload. */
+        m->reload_ratelimit.interval = arg_reload_limit_interval_sec;
+        m->reload_ratelimit.burst = arg_reload_limit_burst;
 
         manager_set_watchdog(m, WATCHDOG_RUNTIME, arg_runtime_watchdog);
         manager_set_watchdog(m, WATCHDOG_REBOOT, arg_reboot_watchdog);
         manager_set_watchdog(m, WATCHDOG_KEXEC, arg_kexec_watchdog);
+        manager_set_watchdog(m, WATCHDOG_PRETIMEOUT, arg_pretimeout_watchdog);
+        r = manager_set_watchdog_pretimeout_governor(m, arg_watchdog_pretimeout_governor);
+        if (r < 0)
+                log_warning_errno(r, "Failed to set watchdog pretimeout governor to '%s', ignoring: %m", arg_watchdog_pretimeout_governor);
 
         manager_set_show_status(m, arg_show_status, "commandline");
         m->status_unit_format = arg_status_unit_format;
@@ -1079,7 +1093,7 @@
                                 return 0;
 
                 default:
-                        assert_not_reached("Unhandled option code.");
+                        assert_not_reached();
                 }
 
         if (optind < argc && getpid_cached() != 1)
@@ -1108,9 +1122,8 @@
                "  -h --help                      Show this help\n"
                "     --version                   Show version\n"
                "     --test                      Determine initial transaction, dump it and exit\n"
-               "     --system                    In combination with --test: operate as system service manager\n"
-               "     --user                      In combination with --test: operate as per-user service manager\n"
-               "     --no-pager                  Do not pipe output into a pager\n"
+               "     --system                    Combined with --test: operate in system mode\n"
+               "     --user                      Combined with --test: operate in user mode\n"
                "     --dump-configuration-items  Dump understood unit configuration items\n"
                "     --dump-bus-properties       Dump exposed bus properties\n"
                "     --bus-introspect=PATH       Write XML introspection data\n"
@@ -1120,14 +1133,17 @@
                "     --crash-reboot[=BOOL]       Reboot on crash\n"
                "     --crash-shell[=BOOL]        Run shell on crash\n"
                "     --confirm-spawn[=BOOL]      Ask for confirmation when spawning processes\n"
-               "     --show-status[=BOOL]        Show status updates on the console during bootup\n"
-               "     --log-target=TARGET         Set log target (console, journal, kmsg, journal-or-kmsg, null)\n"
-               "     --log-level=LEVEL           Set log level (debug, info, notice, warning, err, crit, alert, emerg)\n"
+               "     --show-status[=BOOL]        Show status updates on the console during boot\n"
+               "     --log-target=TARGET         Set log target (console, journal, kmsg,\n"
+               "                                                 journal-or-kmsg, null)\n"
+               "     --log-level=LEVEL           Set log level (debug, info, notice, warning,\n"
+               "                                                err, crit, alert, emerg)\n"
                "     --log-color[=BOOL]          Highlight important log messages\n"
                "     --log-location[=BOOL]       Include code location in log messages\n"
                "     --log-time[=BOOL]           Prefix log messages with current time\n"
                "     --default-standard-output=  Set default standard output for services\n"
                "     --default-standard-error=   Set default standard error output for services\n"
+               "     --no-pager                  Do not pipe output into a pager\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -1188,11 +1204,11 @@
 
 static void bump_file_max_and_nr_open(void) {
 
-        /* Let's bump fs.file-max and fs.nr_open to their respective maximums. On current kernels large numbers of file
-         * descriptors are no longer a performance problem and their memory is properly tracked by memcg, thus counting
-         * them and limiting them in another two layers of limits is unnecessary and just complicates things. This
-         * function hence turns off 2 of the 4 levels of limits on file descriptors, and makes RLIMIT_NOLIMIT (soft +
-         * hard) the only ones that really matter. */
+        /* Let's bump fs.file-max and fs.nr_open to their respective maximums. On current kernels large
+         * numbers of file descriptors are no longer a performance problem and their memory is properly
+         * tracked by memcg, thus counting them and limiting them in another two layers of limits is
+         * unnecessary and just complicates things. This function hence turns off 2 of the 4 levels of limits
+         * on file descriptors, and makes RLIMIT_NOLIMIT (soft + hard) the only ones that really matter. */
 
 #if BUMP_PROC_SYS_FS_FILE_MAX || BUMP_PROC_SYS_FS_NR_OPEN
         int r;
@@ -1201,20 +1217,21 @@
 #if BUMP_PROC_SYS_FS_FILE_MAX
         /* The maximum the kernel allows for this since 5.2 is LONG_MAX, use that. (Previously things were
          * different, but the operation would fail silently.) */
-        r = sysctl_writef("fs/file-max", "%li\n", LONG_MAX);
+        r = sysctl_write("fs/file-max", LONG_MAX_STR);
         if (r < 0)
-                log_full_errno(IN_SET(r, -EROFS, -EPERM, -EACCES) ? LOG_DEBUG : LOG_WARNING, r, "Failed to bump fs.file-max, ignoring: %m");
+                log_full_errno(IN_SET(r, -EROFS, -EPERM, -EACCES) ? LOG_DEBUG : LOG_WARNING,
+                               r, "Failed to bump fs.file-max, ignoring: %m");
 #endif
 
 #if BUMP_PROC_SYS_FS_NR_OPEN
         int v = INT_MAX;
 
-        /* Arg! The kernel enforces maximum and minimum values on the fs.nr_open, but we don't really know what they
-         * are. The expression by which the maximum is determined is dependent on the architecture, and is something we
-         * don't really want to copy to userspace, as it is dependent on implementation details of the kernel. Since
-         * the kernel doesn't expose the maximum value to us, we can only try and hope. Hence, let's start with
-         * INT_MAX, and then keep halving the value until we find one that works. Ugly? Yes, absolutely, but kernel
-         * APIs are kernel APIs, so what do can we do... 🤯 */
+        /* Argh! The kernel enforces maximum and minimum values on the fs.nr_open, but we don't really know
+         * what they are. The expression by which the maximum is determined is dependent on the architecture,
+         * and is something we don't really want to copy to userspace, as it is dependent on implementation
+         * details of the kernel. Since the kernel doesn't expose the maximum value to us, we can only try
+         * and hope. Hence, let's start with INT_MAX, and then keep halving the value until we find one that
+         * works. Ugly? Yes, absolutely, but kernel APIs are kernel APIs, so what do can we do... 🤯 */
 
         for (;;) {
                 int k;
@@ -1235,7 +1252,7 @@
                         break;
                 }
 
-                r = sysctl_writef("fs/nr_open", "%i\n", v);
+                r = sysctl_writef("fs/nr_open", "%i", v);
                 if (r == -EINVAL) {
                         log_debug("Couldn't write fs.nr_open as %i, halving it.", v);
                         v /= 2;
@@ -1252,7 +1269,7 @@
 #endif
 }
 
-static int bump_rlimit_nofile(struct rlimit *saved_rlimit) {
+static int bump_rlimit_nofile(const struct rlimit *saved_rlimit) {
         struct rlimit new_rlimit;
         int r, nr;
 
@@ -1281,21 +1298,22 @@
         return 0;
 }
 
-static int bump_rlimit_memlock(struct rlimit *saved_rlimit) {
+static int bump_rlimit_memlock(const struct rlimit *saved_rlimit) {
         struct rlimit new_rlimit;
         uint64_t mm;
         int r;
 
-        /* BPF_MAP_TYPE_LPM_TRIE bpf maps are charged against RLIMIT_MEMLOCK, even if we have CAP_IPC_LOCK which should
-         * normally disable such checks. We need them to implement IPAddressAllow= and IPAddressDeny=, hence let's bump
-         * the value high enough for our user. */
+        /* BPF_MAP_TYPE_LPM_TRIE bpf maps are charged against RLIMIT_MEMLOCK, even if we have CAP_IPC_LOCK
+         * which should normally disable such checks. We need them to implement IPAddressAllow= and
+         * IPAddressDeny=, hence let's bump the value high enough for our user. */
 
         /* Using MAX() on resource limits only is safe if RLIM_INFINITY is > 0. POSIX declares that rlim_t
          * must be unsigned, hence this is a given, but let's make this clear here. */
         assert_cc(RLIM_INFINITY > 0);
 
-        mm = physical_memory_scale(1, 8); /* Let's scale how much we allow to be locked by the amount of physical
-                                           * RAM. We allow an eighth to be locked by us, just to pick a value. */
+        mm = physical_memory_scale(1, 8); /* Let's scale how much we allow to be locked by the amount of
+                                           * physical RAM. We allow an eighth to be locked by us, just to
+                                           * pick a value. */
 
         new_rlimit = (struct rlimit) {
                 .rlim_cur = MAX3(HIGH_RLIMIT_MEMLOCK, saved_rlimit->rlim_cur, mm),
@@ -1319,12 +1337,12 @@
 
         /* Check that /usr is either on the same file system as / or mounted already. */
 
-        if (dir_is_empty("/usr") <= 0)
+        if (dir_is_empty("/usr", /* ignore_hidden_or_backup= */ false) <= 0)
                 return;
 
         log_warning("/usr appears to be on its own filesystem and is not already mounted. This is not a supported setup. "
                     "Some things will probably break (sometimes even silently) in mysterious ways. "
-                    "Consult http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken for more information.");
+                    "Consult https://www.freedesktop.org/wiki/Software/systemd/separate-usr-is-broken for more information.");
 }
 
 static int enforce_syscall_archs(Set *archs) {
@@ -1341,29 +1359,46 @@
         return 0;
 }
 
-static int status_welcome(void) {
-        _cleanup_free_ char *pretty_name = NULL, *ansi_color = NULL;
+static int os_release_status(void) {
+        _cleanup_free_ char *pretty_name = NULL, *name = NULL, *version = NULL,
+                            *ansi_color = NULL, *support_end = NULL;
         int r;
 
-        if (!show_status_on(arg_show_status))
-                return 0;
-
         r = parse_os_release(NULL,
                              "PRETTY_NAME", &pretty_name,
-                             "ANSI_COLOR", &ansi_color);
+                             "NAME",        &name,
+                             "VERSION",     &version,
+                             "ANSI_COLOR",  &ansi_color,
+                             "SUPPORT_END", &support_end);
         if (r < 0)
-                log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
-                               "Failed to read os-release file, ignoring: %m");
+                return log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
+                                      "Failed to read os-release file, ignoring: %m");
 
-        if (log_get_show_color())
-                return status_printf(NULL, 0,
-                                     "\nWelcome to \x1B[%sm%s\x1B[0m!\n",
-                                     isempty(ansi_color) ? "1" : ansi_color,
-                                     isempty(pretty_name) ? "Linux" : pretty_name);
-        else
-                return status_printf(NULL, 0,
-                                     "\nWelcome to %s!\n",
-                                     isempty(pretty_name) ? "Linux" : pretty_name);
+        const char *label = os_release_pretty_name(pretty_name, name);
+
+        if (show_status_on(arg_show_status)) {
+                if (log_get_show_color())
+                        status_printf(NULL, 0,
+                                      "\nWelcome to \x1B[%sm%s\x1B[0m!\n",
+                                      empty_to_null(ansi_color) ?: "1",
+                                      label);
+                else
+                        status_printf(NULL, 0,
+                                      "\nWelcome to %s!\n",
+                                      label);
+        }
+
+        if (support_end && os_release_support_ended(support_end, /* quiet */ false, NULL) > 0)
+                /* pretty_name may include the version already, so we'll print the version only if we
+                 * have it and we're not using pretty_name. */
+                status_printf(ANSI_HIGHLIGHT_RED "  !!  " ANSI_NORMAL, 0,
+                              "This OS version (%s%s%s) is past its end-of-support date (%s)",
+                              label,
+                              (pretty_name || !version) ? "" : " version ",
+                              (pretty_name || !version) ? "" : version,
+                              support_end);
+
+        return 0;
 }
 
 static int write_container_id(void) {
@@ -1374,7 +1409,7 @@
         if (isempty(c))
                 return 0;
 
-        RUN_WITH_UMASK(0022)
+        WITH_UMASK(0022)
                 r = write_string_file("/run/systemd/container", c, WRITE_STRING_FILE_CREATE);
         if (r < 0)
                 return log_warning_errno(r, "Failed to write /run/systemd/container, ignoring: %m");
@@ -1387,13 +1422,14 @@
         unsigned long v;
         int r;
 
-        /* Let's bump the net.unix.max_dgram_qlen sysctl. The kernel default of 16 is simply too low. We set the value
-         * really really early during boot, so that it is actually applied to all our sockets, including the
-         * $NOTIFY_SOCKET one. */
+        /* Let's bump the net.unix.max_dgram_qlen sysctl. The kernel default of 16 is simply too low. We set
+         * the value really really early during boot, so that it is actually applied to all our sockets,
+         * including the $NOTIFY_SOCKET one. */
 
         r = read_one_line_file("/proc/sys/net/unix/max_dgram_qlen", &qlen);
         if (r < 0)
-                return log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r, "Failed to read AF_UNIX datagram queue length, ignoring: %m");
+                return log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
+                                      "Failed to read AF_UNIX datagram queue length, ignoring: %m");
 
         r = safe_atolu(qlen, &v);
         if (r < 0)
@@ -1402,7 +1438,7 @@
         if (v >= DEFAULT_UNIX_MAX_DGRAM_QLEN)
                 return 0;
 
-        r = write_string_filef("/proc/sys/net/unix/max_dgram_qlen", WRITE_STRING_FILE_DISABLE_BUFFER, "%lu", DEFAULT_UNIX_MAX_DGRAM_QLEN);
+        r = sysctl_write("net/unix/max_dgram_qlen", STRINGIFY(DEFAULT_UNIX_MAX_DGRAM_QLEN));
         if (r < 0)
                 return log_full_errno(IN_SET(r, -EROFS, -EPERM, -EACCES) ? LOG_DEBUG : LOG_WARNING, r,
                                       "Failed to bump AF_UNIX datagram queue length, ignoring: %m");
@@ -1423,9 +1459,9 @@
         if (detect_container() > 0)
                 return 0;
 
-        /* When started as PID1, the kernel uses /dev/console for our stdios and uses TERM=linux whatever the backend
-         * device used by the console. We try to make a better guess here since some consoles might not have support
-         * for color mode for example.
+        /* When started as PID1, the kernel uses /dev/console for our stdios and uses TERM=linux whatever the
+         * backend device used by the console. We try to make a better guess here since some consoles might
+         * not have support for color mode for example.
          *
          * However if TERM was configured through the kernel command line then leave it alone. */
         r = proc_cmdline_get_key("TERM", 0, &term);
@@ -1461,49 +1497,56 @@
 #endif
 }
 
-static int become_shutdown(
-                const char *shutdown_verb,
-                int retval) {
-
-        char log_level[DECIMAL_STR_MAX(int) + 1],
-                exit_code[DECIMAL_STR_MAX(uint8_t) + 1],
-                timeout[DECIMAL_STR_MAX(usec_t) + 1];
-
-        const char* command_line[13] = {
-                SYSTEMD_SHUTDOWN_BINARY_PATH,
-                shutdown_verb,
-                "--timeout", timeout,
-                "--log-level", log_level,
-                "--log-target",
+static int become_shutdown(int objective, int retval) {
+        static const char* const table[_MANAGER_OBJECTIVE_MAX] = {
+                [MANAGER_EXIT]     = "exit",
+                [MANAGER_REBOOT]   = "reboot",
+                [MANAGER_POWEROFF] = "poweroff",
+                [MANAGER_HALT]     = "halt",
+                [MANAGER_KEXEC]    = "kexec",
         };
 
+        char log_level[STRLEN("--log-level=") + DECIMAL_STR_MAX(int)],
+             timeout[STRLEN("--timeout=") + DECIMAL_STR_MAX(usec_t) + STRLEN("us")],
+             exit_code[STRLEN("--exit-code=") + DECIMAL_STR_MAX(uint8_t)];
+
         _cleanup_strv_free_ char **env_block = NULL;
-        size_t pos = 7;
-        int r;
         usec_t watchdog_timer = 0;
+        int r;
 
-        assert(shutdown_verb);
+        assert(objective >= 0 && objective < _MANAGER_OBJECTIVE_MAX);
+        assert(table[objective]);
+
+        xsprintf(log_level, "--log-level=%d", log_get_max_level());
+        xsprintf(timeout, "--timeout=%" PRI_USEC "us", arg_default_timeout_stop_usec);
+
+        const char* command_line[10] = {
+                SYSTEMD_SHUTDOWN_BINARY_PATH,
+                table[objective],
+                log_level,
+                timeout,
+                /* Note that the last position is a terminator and must contain NULL. */
+        };
+        size_t pos = 4;
+
+        assert(command_line[pos-1]);
         assert(!command_line[pos]);
-        env_block = strv_copy(environ);
-
-        xsprintf(log_level, "%d", log_get_max_level());
-        xsprintf(timeout, "%" PRI_USEC "us", arg_default_timeout_stop_usec);
 
         switch (log_get_target()) {
 
         case LOG_TARGET_KMSG:
         case LOG_TARGET_JOURNAL_OR_KMSG:
         case LOG_TARGET_SYSLOG_OR_KMSG:
-                command_line[pos++] = "kmsg";
+                command_line[pos++] = "--log-target=kmsg";
                 break;
 
         case LOG_TARGET_NULL:
-                command_line[pos++] = "null";
+                command_line[pos++] = "--log_target=null";
                 break;
 
         case LOG_TARGET_CONSOLE:
         default:
-                command_line[pos++] = "console";
+                command_line[pos++] = "--log-target=console";
                 break;
         };
 
@@ -1516,42 +1559,40 @@
         if (log_get_show_time())
                 command_line[pos++] = "--log-time";
 
-        if (streq(shutdown_verb, "exit")) {
-                command_line[pos++] = "--exit-code";
+        if (objective == MANAGER_EXIT) {
+                xsprintf(exit_code, "--exit-code=%d", retval);
                 command_line[pos++] = exit_code;
-                xsprintf(exit_code, "%d", retval);
         }
 
         assert(pos < ELEMENTSOF(command_line));
 
-        if (streq(shutdown_verb, "reboot"))
+        /* The watchdog: */
+
+        if (objective == MANAGER_REBOOT)
                 watchdog_timer = arg_reboot_watchdog;
-        else if (streq(shutdown_verb, "kexec"))
+        else if (objective == MANAGER_KEXEC)
                 watchdog_timer = arg_kexec_watchdog;
 
-        if (watchdog_timer > 0 && watchdog_timer != USEC_INFINITY) {
+        /* If we reboot or kexec let's set the shutdown watchdog and tell the
+         * shutdown binary to repeatedly ping it.
+         * Disable the pretimeout watchdog, as we do not support it from the shutdown binary. */
+        (void) watchdog_setup_pretimeout(0);
+        (void) watchdog_setup_pretimeout_governor(NULL);
+        r = watchdog_setup(watchdog_timer);
+        watchdog_close(r < 0);
 
-                char *e;
+        /* The environment block: */
 
-                /* If we reboot or kexec let's set the shutdown
-                 * watchdog and tell the shutdown binary to
-                 * repeatedly ping it */
-                r = watchdog_set_timeout(&watchdog_timer);
-                watchdog_close(r < 0);
+        env_block = strv_copy(environ);
 
-                /* Tell the binary how often to ping, ignore failure */
-                if (asprintf(&e, "WATCHDOG_USEC="USEC_FMT, watchdog_timer) > 0)
-                        (void) strv_consume(&env_block, e);
+        /* Tell the binary how often to ping, ignore failure */
+        (void) strv_extendf(&env_block, "WATCHDOG_USEC="USEC_FMT, watchdog_timer);
 
-                if (arg_watchdog_device &&
-                    asprintf(&e, "WATCHDOG_DEVICE=%s", arg_watchdog_device) > 0)
-                        (void) strv_consume(&env_block, e);
-        } else
-                watchdog_close(true);
+        if (arg_watchdog_device)
+                (void) strv_extendf(&env_block, "WATCHDOG_DEVICE=%s", arg_watchdog_device);
 
-        /* Avoid the creation of new processes forked by the
-         * kernel; at this point, we will not listen to the
-         * signals anyway */
+        /* Avoid the creation of new processes forked by the kernel; at this
+         * point, we will not listen to the signals anyway */
         if (detect_container() <= 0)
                 (void) cg_uninstall_release_agent(SYSTEMD_CGROUP_CONTROLLER);
 
@@ -1568,12 +1609,11 @@
         if (clock_is_localtime(NULL) > 0) {
                 int min;
 
-                /*
-                 * The very first call of settimeofday() also does a time warp in the kernel.
+                /* The very first call of settimeofday() also does a time warp in the kernel.
                  *
-                 * In the rtc-in-local time mode, we set the kernel's timezone, and rely on external tools to take care
-                 * of maintaining the RTC and do all adjustments.  This matches the behavior of Windows, which leaves
-                 * the RTC alone if the registry tells that the RTC runs in UTC.
+                 * In the rtc-in-local time mode, we set the kernel's timezone, and rely on external tools to
+                 * take care of maintaining the RTC and do all adjustments.  This matches the behavior of
+                 * Windows, which leaves the RTC alone if the registry tells that the RTC runs in UTC.
                  */
                 r = clock_set_timezone(&min);
                 if (r < 0)
@@ -1585,26 +1625,31 @@
                 /*
                  * Do a dummy very first call to seal the kernel's time warp magic.
                  *
-                 * Do not call this from inside the initrd. The initrd might not carry /etc/adjtime with LOCAL, but the
-                 * real system could be set up that way. In such case, we need to delay the time-warp or the sealing
-                 * until we reach the real system.
+                 * Do not call this from inside the initrd. The initrd might not carry /etc/adjtime with
+                 * LOCAL, but the real system could be set up that way. In such case, we need to delay the
+                 * time-warp or the sealing until we reach the real system.
                  *
-                 * Do no set the kernel's timezone. The concept of local time cannot be supported reliably, the time
-                 * will jump or be incorrect at every daylight saving time change. All kernel local time concepts will
-                 * be treated as UTC that way.
+                 * Do no set the kernel's timezone. The concept of local time cannot be supported reliably,
+                 * the time will jump or be incorrect at every daylight saving time change. All kernel local
+                 * time concepts will be treated as UTC that way.
                  */
                 (void) clock_reset_timewarp();
 
-        r = clock_apply_epoch();
-        if (r < 0)
-                log_error_errno(r, "Current system time is before build time, but cannot correct: %m");
-        else if (r > 0)
+        ClockChangeDirection change_dir;
+        r = clock_apply_epoch(&change_dir);
+        if (r > 0 && change_dir == CLOCK_CHANGE_FORWARD)
                 log_info("System time before build time, advancing clock.");
+        else if (r > 0 && change_dir == CLOCK_CHANGE_BACKWARD)
+                log_info("System time is further ahead than %s after build time, resetting clock to build time.",
+                         FORMAT_TIMESPAN(CLOCK_VALID_RANGE_USEC_MAX, USEC_PER_DAY));
+        else if (r < 0 && change_dir == CLOCK_CHANGE_FORWARD)
+                log_error_errno(r, "Current system time is before build time, but cannot correct: %m");
+        else if (r < 0 && change_dir == CLOCK_CHANGE_BACKWARD)
+                log_error_errno(r, "Current system time is further ahead %s after build time, but cannot correct: %m",
+                                FORMAT_TIMESPAN(CLOCK_VALID_RANGE_USEC_MAX, USEC_PER_DAY));
 }
 
 static void apply_clock_update(void) {
-        struct timespec ts;
-
         /* This is called later than initialize_clock(), i.e. after we parsed configuration files/kernel
          * command line and such. */
 
@@ -1614,14 +1659,11 @@
         if (getpid_cached() != 1)
                 return;
 
-        if (clock_settime(CLOCK_REALTIME, timespec_store(&ts, arg_clock_usec)) < 0)
+        if (clock_settime(CLOCK_REALTIME, TIMESPEC_STORE(arg_clock_usec)) < 0)
                 log_error_errno(errno, "Failed to set system clock to time specified on kernel command line: %m");
-        else {
-                char buf[FORMAT_TIMESTAMP_MAX];
-
+        else
                 log_info("Set system clock to %s, as specified on the kernel command line.",
-                         format_timestamp(buf, sizeof(buf), arg_clock_usec));
-        }
+                         FORMAT_TIMESTAMP(arg_clock_usec));
 }
 
 static void cmdline_take_random_seed(void) {
@@ -1648,7 +1690,8 @@
         }
 
         log_notice("Successfully credited entropy passed on kernel command line.\n"
-                   "Note that the seed provided this way is accessible to unprivileged programs. This functionality should not be used outside of testing environments.");
+                   "Note that the seed provided this way is accessible to unprivileged programs. "
+                   "This functionality should not be used outside of testing environments.");
 }
 
 static void initialize_coredump(bool skip_setup) {
@@ -1656,15 +1699,14 @@
         if (getpid_cached() != 1)
                 return;
 
-        /* Don't limit the core dump size, so that coredump handlers such as systemd-coredump (which honour the limit)
-         * will process core dumps for system services by default. */
+        /* Don't limit the core dump size, so that coredump handlers such as systemd-coredump (which honour
+         * the limit) will process core dumps for system services by default. */
         if (setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(RLIM_INFINITY)) < 0)
                 log_warning_errno(errno, "Failed to set RLIMIT_CORE: %m");
 
-        /* But at the same time, turn off the core_pattern logic by default, so that no
-         * coredumps are stored until the systemd-coredump tool is enabled via
-         * sysctl. However it can be changed via the kernel command line later so core
-         * dumps can still be generated during early startup and in initramfs. */
+        /* But at the same time, turn off the core_pattern logic by default, so that no coredumps are stored
+         * until the systemd-coredump tool is enabled via sysctl. However it can be changed via the kernel
+         * command line later so core dumps can still be generated during early startup and in initrd. */
         if (!skip_setup)
                 disable_coredumps();
 #endif
@@ -1681,7 +1723,8 @@
 
         r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, WRITE_STRING_FILE_DISABLE_BUFFER);
         if (r < 0)
-                log_warning_errno(r, "Failed to write '%s' to /proc/sys/kernel/core_pattern, ignoring: %m", arg_early_core_pattern);
+                log_warning_errno(r, "Failed to write '%s' to /proc/sys/kernel/core_pattern, ignoring: %m",
+                                  arg_early_core_pattern);
 }
 
 static void update_cpu_affinity(bool skip_setup) {
@@ -1692,11 +1735,11 @@
 
         assert(arg_cpu_affinity.allocated > 0);
 
-        mask = cpu_set_to_string(&arg_cpu_affinity);
-        log_debug("Setting CPU affinity to %s.", strnull(mask));
+        mask = cpu_set_to_range_string(&arg_cpu_affinity);
+        log_debug("Setting CPU affinity to {%s}.", strnull(mask));
 
         if (sched_setaffinity(0, arg_cpu_affinity.allocated, arg_cpu_affinity.set) < 0)
-                log_warning_errno(errno, "Failed to set CPU affinity: %m");
+                log_warning_errno(errno, "Failed to set CPU affinity, ignoring: %m");
 }
 
 static void update_numa_policy(bool skip_setup) {
@@ -1710,19 +1753,24 @@
         if (DEBUG_LOGGING) {
                 policy = mpol_to_string(numa_policy_get_type(&arg_numa_policy));
                 nodes = cpu_set_to_range_string(&arg_numa_policy.nodes);
-                log_debug("Setting NUMA policy to %s, with nodes %s.", strnull(policy), strnull(nodes));
+                log_debug("Setting NUMA policy to %s, with nodes {%s}.", strnull(policy), strnull(nodes));
         }
 
         r = apply_numa_policy(&arg_numa_policy);
         if (r == -EOPNOTSUPP)
                 log_debug_errno(r, "NUMA support not available, ignoring.");
         else if (r < 0)
-                log_warning_errno(r, "Failed to set NUMA memory policy: %m");
+                log_warning_errno(r, "Failed to set NUMA memory policy, ignoring: %m");
 }
 
-static void filter_args(const char* dst[], unsigned *pos, char **src, int argc) {
+static void filter_args(
+                const char* dst[],
+                size_t *dst_index,
+                char **src,
+                int argc) {
+
         assert(dst);
-        assert(pos);
+        assert(dst_index);
 
         /* Copy some filtered arguments into the dst array from src. */
         for (int i = 1; i < argc; i++) {
@@ -1748,20 +1796,13 @@
                         continue;
                 }
 
-                if (startswith(src[i],
-                               in_initrd() ? "rd.systemd.unit=" : "systemd.unit="))
-                        continue;
-
-                if (runlevel_to_target(src[i]))
-                        continue;
-
                 /* Seems we have a good old option. Let's pass it over to the new instance. */
-                dst[*pos] = src[i];
-                (*pos)++;
+                dst[(*dst_index)++] = src[i];
         }
 }
 
-static void do_reexecute(
+static int do_reexecute(
+                ManagerObjective objective,
                 int argc,
                 char* argv[],
                 const struct rlimit *saved_rlimit_nofile,
@@ -1771,16 +1812,18 @@
                 const char *switch_root_init,
                 const char **ret_error_message) {
 
-        unsigned i, args_size;
+        size_t i, args_size;
         const char **args;
         int r;
 
+        assert(IN_SET(objective, MANAGER_REEXECUTE, MANAGER_SWITCH_ROOT));
+        assert(argc >= 0);
         assert(saved_rlimit_nofile);
         assert(saved_rlimit_memlock);
         assert(ret_error_message);
 
-        /* Close and disarm the watchdog, so that the new instance can reinitialize it, but doesn't get rebooted while
-         * we do that */
+        /* Close and disarm the watchdog, so that the new instance can reinitialize it, but doesn't get
+         * rebooted while we do that */
         watchdog_close(true);
 
         /* Reset RLIMIT_NOFILE + RLIMIT_MEMLOCK back to the kernel defaults, so that the new systemd can pass
@@ -1791,8 +1834,8 @@
                 (void) setrlimit(RLIMIT_MEMLOCK, saved_rlimit_memlock);
 
         if (switch_root_dir) {
-                /* Kill all remaining processes from the initrd, but don't wait for them, so that we can handle the
-                 * SIGCHLD for them after deserializing. */
+                /* Kill all remaining processes from the initrd, but don't wait for them, so that we can
+                 * handle the SIGCHLD for them after deserializing. */
                 broadcast_signal(SIGTERM, false, true, arg_default_timeout_stop_usec);
 
                 /* And switch root with MS_MOVE, because we remove the old directory afterwards and detach it. */
@@ -1801,48 +1844,54 @@
                         log_error_errno(r, "Failed to switch root, trying to continue: %m");
         }
 
-        args_size = argc + 6;
+        args_size = argc + 5;
         args = newa(const char*, args_size);
 
         if (!switch_root_init) {
-                char sfd[DECIMAL_STR_MAX(int)];
+                char sfd[STRLEN("--deserialize=") + DECIMAL_STR_MAX(int)];
 
-                /* First try to spawn ourselves with the right path, and with full serialization. We do this only if
-                 * the user didn't specify an explicit init to spawn. */
+                /* First try to spawn ourselves with the right path, and with full serialization. We do this
+                 * only if the user didn't specify an explicit init to spawn. */
 
                 assert(arg_serialization);
                 assert(fds);
 
-                xsprintf(sfd, "%i", fileno(arg_serialization));
+                xsprintf(sfd, "--deserialize=%i", fileno(arg_serialization));
 
                 i = 1;         /* Leave args[0] empty for now. */
                 filter_args(args, &i, argv, argc);
 
                 if (switch_root_dir)
                         args[i++] = "--switched-root";
+
                 args[i++] = arg_system ? "--system" : "--user";
-                args[i++] = "--deserialize";
                 args[i++] = sfd;
                 args[i++] = NULL;
 
                 assert(i <= args_size);
 
                 /*
-                 * We want valgrind to print its memory usage summary before reexecution.  Valgrind won't do this is on
-                 * its own on exec(), but it will do it on exit().  Hence, to ensure we get a summary here, fork() off
-                 * a child, let it exit() cleanly, so that it prints the summary, and wait() for it in the parent,
-                 * before proceeding into the exec().
+                 * We want valgrind to print its memory usage summary before reexecution.  Valgrind won't do
+                 * this is on its own on exec(), but it will do it on exit().  Hence, to ensure we get a
+                 * summary here, fork() off a child, let it exit() cleanly, so that it prints the summary,
+                 * and wait() for it in the parent, before proceeding into the exec().
                  */
                 valgrind_summary_hack();
 
                 args[0] = SYSTEMD_BINARY_PATH;
                 (void) execv(args[0], (char* const*) args);
+
+                if (objective == MANAGER_REEXECUTE) {
+                        *ret_error_message = "Failed to execute our own binary";
+                        return log_error_errno(errno, "Failed to execute our own binary %s: %m", args[0]);
+                }
+
                 log_debug_errno(errno, "Failed to execute our own binary %s, trying fallback: %m", args[0]);
         }
 
-        /* Try the fallback, if there is any, without any serialization. We pass the original argv[] and envp[]. (Well,
-         * modulo the ordering changes due to getopt() in argv[], and some cleanups in envp[], but let's hope that
-         * doesn't matter.) */
+        /* Try the fallback, if there is any, without any serialization. We pass the original argv[] and
+         * envp[]. (Well, modulo the ordering changes due to getopt() in argv[], and some cleanups in envp[],
+         * but let's hope that doesn't matter.) */
 
         arg_serialization = safe_fclose(arg_serialization);
         fds = fdset_free(fds);
@@ -1855,7 +1904,7 @@
                 args[i++] = argv[j];
         assert(i <= args_size);
 
-        /* Re-enable any blocked signals, especially important if we switch from initial ramdisk to init=... */
+        /* Re-enable any blocked signals, especially important if we switch from initrd to init=... */
         (void) reset_all_signal_handlers();
         (void) reset_signal_mask();
         (void) rlimit_nofile_safe();
@@ -1874,26 +1923,23 @@
                               ANSI_HIGHLIGHT_RED "  !!  " ANSI_NORMAL,
                               "Failed to execute /sbin/init");
 
+        *ret_error_message = "Failed to execute fallback shell";
         if (r == -ENOENT) {
                 log_warning("No /sbin/init, trying fallback");
 
                 args[0] = "/bin/sh";
                 args[1] = NULL;
                 (void) execve(args[0], (char* const*) args, saved_env);
-                log_error_errno(errno, "Failed to execute /bin/sh, giving up: %m");
+                return log_error_errno(errno, "Failed to execute /bin/sh, giving up: %m");
         } else
-                log_warning_errno(r, "Failed to execute /sbin/init, giving up: %m");
-
-        *ret_error_message = "Failed to execute fallback shell";
+                return log_error_errno(r, "Failed to execute /sbin/init, giving up: %m");
 }
 
 static int invoke_main_loop(
                 Manager *m,
                 const struct rlimit *saved_rlimit_nofile,
                 const struct rlimit *saved_rlimit_memlock,
-                bool *ret_reexecute,
                 int *ret_retval,                   /* Return parameters relevant for shutting down */
-                const char **ret_shutdown_verb,    /* … */
                 FDSet **ret_fds,                   /* Return parameters for reexecuting */
                 char **ret_switch_root_dir,        /* … */
                 char **ret_switch_root_init,       /* … */
@@ -1904,31 +1950,31 @@
         assert(m);
         assert(saved_rlimit_nofile);
         assert(saved_rlimit_memlock);
-        assert(ret_reexecute);
         assert(ret_retval);
-        assert(ret_shutdown_verb);
         assert(ret_fds);
         assert(ret_switch_root_dir);
         assert(ret_switch_root_init);
         assert(ret_error_message);
 
         for (;;) {
-                r = manager_loop(m);
-                if (r < 0) {
+                int objective = manager_loop(m);
+                if (objective < 0) {
                         *ret_error_message = "Failed to run main loop";
-                        return log_emergency_errno(r, "Failed to run main loop: %m");
+                        return log_emergency_errno(objective, "Failed to run main loop: %m");
                 }
 
-                switch ((ManagerObjective) r) {
+                switch (objective) {
 
                 case MANAGER_RELOAD: {
                         LogTarget saved_log_target;
                         int saved_log_level;
 
-                        log_info("Reloading.");
+                        manager_send_reloading(m);
 
-                        /* First, save any overridden log level/target, then parse the configuration file, which might
-                         * change the log level to new settings. */
+                        log_info("Reloading...");
+
+                        /* First, save any overridden log level/target, then parse the configuration file,
+                         * which might change the log level to new settings. */
 
                         saved_log_level = m->log_level_overridden ? log_get_max_level() : -1;
                         saved_log_target = m->log_target_overridden ? log_get_target() : _LOG_TARGET_INVALID;
@@ -1946,16 +1992,22 @@
                         if (saved_log_target >= 0)
                                 manager_override_log_target(m, saved_log_target);
 
-                        r = manager_reload(m);
-                        if (r < 0)
-                                /* Reloading failed before the point of no return. Let's continue running as if nothing happened. */
+                        if (manager_reload(m) < 0)
+                                /* Reloading failed before the point of no return.
+                                 * Let's continue running as if nothing happened. */
                                 m->objective = MANAGER_OK;
+                        else
+                                log_info("Reloading finished in " USEC_FMT " ms.",
+                                         usec_sub_unsigned(now(CLOCK_MONOTONIC), m->timestamps[MANAGER_TIMESTAMP_UNITS_LOAD].monotonic) / USEC_PER_MSEC);
 
-                        break;
+                        continue;
                 }
 
                 case MANAGER_REEXECUTE:
 
+                        manager_send_reloading(m); /* From the perspective of the manager calling us this is
+                                                    * pretty much the same as a reload */
+
                         r = prepare_reexecute(m, &arg_serialization, ret_fds, false);
                         if (r < 0) {
                                 *ret_error_message = "Failed to prepare for reexecution";
@@ -1964,14 +2016,18 @@
 
                         log_notice("Reexecuting.");
 
-                        *ret_reexecute = true;
                         *ret_retval = EXIT_SUCCESS;
-                        *ret_shutdown_verb = NULL;
                         *ret_switch_root_dir = *ret_switch_root_init = NULL;
 
-                        return 0;
+                        return objective;
 
                 case MANAGER_SWITCH_ROOT:
+
+                        manager_send_reloading(m); /* From the perspective of the manager calling us this is
+                                                    * pretty much the same as a reload */
+
+                        manager_set_switching_root(m, true);
+
                         if (!m->switch_root_init) {
                                 r = prepare_reexecute(m, &arg_serialization, ret_fds, true);
                                 if (r < 0) {
@@ -1983,28 +2039,23 @@
 
                         log_notice("Switching root.");
 
-                        *ret_reexecute = true;
                         *ret_retval = EXIT_SUCCESS;
-                        *ret_shutdown_verb = NULL;
 
                         /* Steal the switch root parameters */
                         *ret_switch_root_dir = TAKE_PTR(m->switch_root);
                         *ret_switch_root_init = TAKE_PTR(m->switch_root_init);
 
-                        return 0;
+                        return objective;
 
                 case MANAGER_EXIT:
-
                         if (MANAGER_IS_USER(m)) {
                                 log_debug("Exit.");
 
-                                *ret_reexecute = false;
                                 *ret_retval = m->return_value;
-                                *ret_shutdown_verb = NULL;
                                 *ret_fds = NULL;
                                 *ret_switch_root_dir = *ret_switch_root_init = NULL;
 
-                                return 0;
+                                return objective;
                         }
 
                         _fallthrough_;
@@ -2012,35 +2063,28 @@
                 case MANAGER_POWEROFF:
                 case MANAGER_HALT:
                 case MANAGER_KEXEC: {
-                        static const char * const table[_MANAGER_OBJECTIVE_MAX] = {
-                                [MANAGER_EXIT]     = "exit",
-                                [MANAGER_REBOOT]   = "reboot",
-                                [MANAGER_POWEROFF] = "poweroff",
-                                [MANAGER_HALT]     = "halt",
-                                [MANAGER_KEXEC]    = "kexec",
-                        };
-
                         log_notice("Shutting down.");
 
-                        *ret_reexecute = false;
                         *ret_retval = m->return_value;
-                        assert_se(*ret_shutdown_verb = table[m->objective]);
                         *ret_fds = NULL;
                         *ret_switch_root_dir = *ret_switch_root_init = NULL;
 
-                        return 0;
+                        return objective;
                 }
 
                 default:
-                        assert_not_reached("Unknown or unexpected manager objective.");
+                        assert_not_reached();
                 }
         }
 }
 
 static void log_execution_mode(bool *ret_first_boot) {
+        bool first_boot = false;
+
         assert(ret_first_boot);
 
         if (arg_system) {
+                struct utsname uts;
                 int v;
 
                 log_info("systemd " GIT_VERSION " running in %ssystem mode (%s)",
@@ -2053,31 +2097,50 @@
 
                 log_info("Detected architecture %s.", architecture_to_string(uname_architecture()));
 
-                if (in_initrd()) {
-                        *ret_first_boot = false;
-                        log_info("Running in initial RAM disk.");
-                } else {
+                if (in_initrd())
+                        log_info("Running in initrd.");
+                else {
                         int r;
                         _cleanup_free_ char *id_text = NULL;
 
-                        /* Let's check whether we are in first boot.  We use /etc/machine-id as flag file
-                         * for this: If it is missing or contains the value "uninitialized", this is the
-                         * first boot.  In any other case, it is not.  This allows container managers and
-                         * installers to provision a couple of files already.  If the container manager
-                         * wants to provision the machine ID itself it should pass $container_uuid to PID 1. */
+                        /* Let's check whether we are in first boot. First, check if an override was
+                         * specified on the kernel commandline. If yes, we honour that. */
 
-                        r = read_one_line_file("/etc/machine-id", &id_text);
-                        if (r < 0 || streq(id_text, "uninitialized")) {
-                                if (r < 0 && r != -ENOENT)
-                                        log_warning_errno(r, "Unexpected error while reading /etc/machine-id, ignoring: %m");
+                        r = proc_cmdline_get_bool("systemd.condition-first-boot", &first_boot);
+                        if (r < 0)
+                                log_debug_errno(r, "Failed to parse systemd.condition-first-boot= kernel commandline argument, ignoring: %m");
 
-                                *ret_first_boot = true;
-                                log_info("Detected first boot.");
-                        } else {
-                                *ret_first_boot = false;
-                                log_debug("Detected initialized system, this is not the first boot.");
+                        if (r > 0)
+                                log_full(first_boot ? LOG_INFO : LOG_DEBUG,
+                                         "Kernel commandline argument says we are %s first boot.",
+                                         first_boot ? "in" : "not in");
+                        else {
+                                /* Second, perform autodetection. We use /etc/machine-id as flag file for
+                                 * this: If it is missing or contains the value "uninitialized", this is the
+                                 * first boot. In other cases, it is not. This allows container managers and
+                                 * installers to provision a couple of files in /etc but still permit the
+                                 * first-boot initialization to occur. If the container manager wants to
+                                 * provision the machine ID it should pass $container_uuid to PID 1. */
+
+                                r = read_one_line_file("/etc/machine-id", &id_text);
+                                if (r < 0 || streq(id_text, "uninitialized")) {
+                                        if (r < 0 && r != -ENOENT)
+                                                log_warning_errno(r, "Unexpected error while reading /etc/machine-id, ignoring: %m");
+
+                                        first_boot = true;
+                                        log_info("Detected first boot.");
+                                } else
+                                        log_debug("Detected initialized system, this is not the first boot.");
                         }
                 }
+
+                assert_se(uname(&uts) >= 0);
+
+                if (strverscmp_improved(uts.release, KERNEL_BASELINE_VERSION) < 0)
+                        log_warning("Warning! Reported kernel version %s is older than systemd's required baseline kernel version %s. "
+                                    "Your mileage may vary.", uts.release, KERNEL_BASELINE_VERSION);
+                else
+                        log_debug("Kernel version %s, our baseline is %s", uts.release, KERNEL_BASELINE_VERSION);
         } else {
                 if (DEBUG_LOGGING) {
                         _cleanup_free_ char *t = NULL;
@@ -2087,9 +2150,9 @@
                                   arg_action == ACTION_TEST ? " test" : "",
                                   getuid(), strna(t), systemd_features);
                 }
-
-                *ret_first_boot = false;
         }
+
+        *ret_first_boot = first_boot;
 }
 
 static int initialize_runtime(
@@ -2126,10 +2189,10 @@
                                 return r;
                         }
 
-                        status_welcome();
+                        (void) os_release_status();
                         (void) hostname_setup(true);
                         /* Force transient machine-id on first boot. */
-                        machine_id_setup(NULL, first_boot, arg_machine_id, NULL);
+                        machine_id_setup(NULL, /* force_transient= */ first_boot, arg_machine_id, NULL);
                         (void) loopback_setup();
                         bump_unix_max_dgram_qlen();
                         bump_file_max_and_nr_open();
@@ -2137,11 +2200,9 @@
                         write_container_id();
                 }
 
-                if (arg_watchdog_device) {
-                        r = watchdog_set_device(arg_watchdog_device);
-                        if (r < 0)
-                                log_warning_errno(r, "Failed to set watchdog device to %s, ignoring: %m", arg_watchdog_device);
-                }
+                r = watchdog_set_device(arg_watchdog_device);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to set watchdog device to %s, ignoring: %m", arg_watchdog_device);
         } else {
                 _cleanup_free_ char *p = NULL;
 
@@ -2194,12 +2255,16 @@
         if (!arg_system)
                 /* Become reaper of our children */
                 if (prctl(PR_SET_CHILD_SUBREAPER, 1) < 0)
-                        log_warning_errno(errno, "Failed to make us a subreaper: %m");
+                        log_warning_errno(errno, "Failed to make us a subreaper, ignoring: %m");
 
         /* Bump up RLIMIT_NOFILE for systemd itself */
         (void) bump_rlimit_nofile(saved_rlimit_nofile);
         (void) bump_rlimit_memlock(saved_rlimit_memlock);
 
+        /* Pull credentials from various sources into a common credential directory */
+        if (arg_system && !skip_setup)
+                (void) import_credentials();
+
         return 0;
 }
 
@@ -2340,11 +2405,17 @@
                 return;
         }
 
+        if (arg_system)  {
+                /* Raise the default limit to 8M also on old kernels and in containers (8M is the kernel
+                 * default for this since kernel 5.16) */
+                rl->rlim_max = MAX(rl->rlim_max, (rlim_t) DEFAULT_RLIMIT_MEMLOCK);
+                rl->rlim_cur = MAX(rl->rlim_cur, (rlim_t) DEFAULT_RLIMIT_MEMLOCK);
+        }
+
         arg_default_rlimit[RLIMIT_MEMLOCK] = rl;
 }
 
 static void setenv_manager_environment(void) {
-        char **p;
         int r;
 
         STRV_FOREACH(p, arg_manager_environment) {
@@ -2376,17 +2447,20 @@
         arg_default_std_output = EXEC_OUTPUT_JOURNAL;
         arg_default_std_error = EXEC_OUTPUT_INHERIT;
         arg_default_restart_usec = DEFAULT_RESTART_USEC;
-        arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC;
-        arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
-        arg_default_timeout_abort_usec = DEFAULT_TIMEOUT_USEC;
+        arg_default_timeout_start_usec = manager_default_timeout(arg_system);
+        arg_default_timeout_stop_usec = manager_default_timeout(arg_system);
+        arg_default_timeout_abort_usec = manager_default_timeout(arg_system);
         arg_default_timeout_abort_set = false;
+        arg_default_device_timeout_usec = manager_default_timeout(arg_system);
         arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL;
         arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST;
         arg_runtime_watchdog = 0;
         arg_reboot_watchdog = 10 * USEC_PER_MINUTE;
         arg_kexec_watchdog = 0;
-        arg_early_core_pattern = NULL;
-        arg_watchdog_device = NULL;
+        arg_pretimeout_watchdog = 0;
+        arg_early_core_pattern = mfree(arg_early_core_pattern);
+        arg_watchdog_device = mfree(arg_watchdog_device);
+        arg_watchdog_pretimeout_governor = mfree(arg_watchdog_pretimeout_governor);
 
         arg_default_environment = strv_free(arg_default_environment);
         arg_manager_environment = strv_free(arg_manager_environment);
@@ -2418,6 +2492,39 @@
         arg_random_seed = mfree(arg_random_seed);
         arg_random_seed_size = 0;
         arg_clock_usec = 0;
+
+        arg_default_oom_score_adjust_set = false;
+        arg_default_smack_process_label = mfree(arg_default_smack_process_label);
+
+        arg_reload_limit_interval_sec = 0;
+        arg_reload_limit_burst = 0;
+}
+
+static void determine_default_oom_score_adjust(void) {
+        int r, a, b;
+
+        /* Run our services at slightly higher OOM score than ourselves. But let's be conservative here, and
+         * do this only if we don't run as root (i.e. only if we are run in user mode, for an unprivileged
+         * user). */
+
+        if (arg_default_oom_score_adjust_set)
+                return;
+
+        if (getuid() == 0)
+                return;
+
+        r = get_oom_score_adjust(&a);
+        if (r < 0)
+                return (void) log_warning_errno(r, "Failed to determine current OOM score adjustment value, ignoring: %m");
+
+        assert_cc(100 <= OOM_SCORE_ADJ_MAX);
+        b = a >= OOM_SCORE_ADJ_MAX - 100 ? OOM_SCORE_ADJ_MAX : a + 100;
+
+        if (a == b)
+                return;
+
+        arg_default_oom_score_adjust = b;
+        arg_default_oom_score_adjust_set = true;
 }
 
 static int parse_configuration(const struct rlimit *saved_rlimit_nofile,
@@ -2451,6 +2558,9 @@
         if (arg_show_status == _SHOW_STATUS_INVALID)
                 arg_show_status = SHOW_STATUS_YES;
 
+        /* Slightly raise the OOM score for our services if we are running for unprivileged users. */
+        determine_default_oom_score_adjust();
+
         /* Push variables into the manager environment block */
         setenv_manager_environment();
 
@@ -2575,8 +2685,8 @@
         /* Become a session leader if we aren't one yet. */
         (void) setsid();
 
-        /* If we are init, we connect stdin/stdout/stderr to /dev/null and make sure we don't have a controlling
-         * tty. */
+        /* If we are init, we connect stdin/stdout/stderr to /dev/null and make sure we don't have a
+         * controlling tty. */
         (void) release_terminal();
 
         /* Reset the console, but only if this is really init and we are freshly booted */
@@ -2587,14 +2697,14 @@
 static bool early_skip_setup_check(int argc, char *argv[]) {
         bool found_deserialize = false;
 
-        /* Determine if this is a reexecution or normal bootup. We do the full command line parsing much later, so
-         * let's just have a quick peek here. Note that if we have switched root, do all the special setup things
-         * anyway, even if in that case we also do deserialization. */
+        /* Determine if this is a reexecution or normal bootup. We do the full command line parsing much
+         * later, so let's just have a quick peek here. Note that if we have switched root, do all the
+         * special setup things anyway, even if in that case we also do deserialization. */
 
         for (int i = 1; i < argc; i++)
                 if (streq(argv[i], "--switched-root"))
                         return false; /* If we switched root, don't skip the setup. */
-                else if (streq(argv[i], "--deserialize"))
+                else if (startswith(argv[i], "--deserialize=") || streq(argv[i], "--deserialize"))
                         found_deserialize = true;
 
         return found_deserialize; /* When we are deserializing, then we are reexecuting, hence avoid the extensive setup */
@@ -2612,24 +2722,28 @@
 }
 
 int main(int argc, char *argv[]) {
-
-        dual_timestamp initrd_timestamp = DUAL_TIMESTAMP_NULL, userspace_timestamp = DUAL_TIMESTAMP_NULL, kernel_timestamp = DUAL_TIMESTAMP_NULL,
-                security_start_timestamp = DUAL_TIMESTAMP_NULL, security_finish_timestamp = DUAL_TIMESTAMP_NULL;
+        dual_timestamp
+                initrd_timestamp = DUAL_TIMESTAMP_NULL,
+                userspace_timestamp = DUAL_TIMESTAMP_NULL,
+                kernel_timestamp = DUAL_TIMESTAMP_NULL,
+                security_start_timestamp = DUAL_TIMESTAMP_NULL,
+                security_finish_timestamp = DUAL_TIMESTAMP_NULL;
         struct rlimit saved_rlimit_nofile = RLIMIT_MAKE_CONST(0),
                 saved_rlimit_memlock = RLIMIT_MAKE_CONST(RLIM_INFINITY); /* The original rlimits we passed
                                                                           * in. Note we use different values
                                                                           * for the two that indicate whether
                                                                           * these fields are initialized! */
-        bool skip_setup, loaded_policy = false, queue_default_job = false, first_boot = false, reexecute = false;
+        bool skip_setup, loaded_policy = false, queue_default_job = false, first_boot = false;
         char *switch_root_dir = NULL, *switch_root_init = NULL;
         usec_t before_startup, after_startup;
         static char systemd[] = "systemd";
-        char timespan[FORMAT_TIMESPAN_MAX];
-        const char *shutdown_verb = NULL, *error_message = NULL;
+        const char *error_message = NULL;
         int r, retval = EXIT_FAILURE;
         Manager *m = NULL;
         FDSet *fds = NULL;
 
+        assert_se(argc > 0 && !isempty(argv[0]));
+
         /* SysV compatibility: redirect init → telinit */
         redirect_telinit(argc, argv);
 
@@ -2638,11 +2752,12 @@
         dual_timestamp_get(&userspace_timestamp);
 
         /* Figure out whether we need to do initialize the system, or if we already did that because we are
-         * reexecuting */
+         * reexecuting. */
         skip_setup = early_skip_setup_check(argc, argv);
 
-        /* If we get started via the /sbin/init symlink then we are called 'init'. After a subsequent reexecution we
-         * are then called 'systemd'. That is confusing, hence let's call us systemd right-away. */
+        /* If we get started via the /sbin/init symlink then we are called 'init'. After a subsequent
+         * reexecution we are then called 'systemd'. That is confusing, hence let's call us systemd
+         * right-away. */
         program_invocation_short_name = systemd;
         (void) prctl(PR_SET_NAME, systemd);
 
@@ -2667,14 +2782,14 @@
                 /* Disable the umask logic */
                 umask(0);
 
-                /* Make sure that at least initially we do not ever log to journald/syslogd, because it might not be
-                 * activated yet (even though the log socket for it exists). */
+                /* Make sure that at least initially we do not ever log to journald/syslogd, because it might
+                 * not be activated yet (even though the log socket for it exists). */
                 log_set_prohibit_ipc(true);
 
-                /* Always reopen /dev/console when running as PID 1 or one of its pre-execve() children. This is
-                 * important so that we never end up logging to any foreign stderr, for example if we have to log in a
-                 * child process right before execve()'ing the actual binary, at a point in time where socket
-                 * activation stderr/stdout area already set up. */
+                /* Always reopen /dev/console when running as PID 1 or one of its pre-execve() children. This
+                 * is important so that we never end up logging to any foreign stderr, for example if we have
+                 * to log in a child process right before execve()'ing the actual binary, at a point in time
+                 * where socket activation stderr/stdout area already set up. */
                 log_set_always_reopen_console(true);
 
                 if (detect_container() <= 0) {
@@ -2717,10 +2832,10 @@
                         if (!skip_setup)
                                 initialize_clock();
 
-                        /* Set the default for later on, but don't actually open the logs like this for now. Note that
-                         * if we are transitioning from the initrd there might still be journal fd open, and we
-                         * shouldn't attempt opening that before we parsed /proc/cmdline which might redirect output
-                         * elsewhere. */
+                        /* Set the default for later on, but don't actually open the logs like this for
+                         * now. Note that if we are transitioning from the initrd there might still be
+                         * journal fd open, and we shouldn't attempt opening that before we parsed
+                         * /proc/cmdline which might redirect output elsewhere. */
                         log_set_target(LOG_TARGET_JOURNAL_OR_KMSG);
 
                 } else {
@@ -2744,8 +2859,8 @@
                         goto finish;
                 }
 
-                /* Try to figure out if we can use colors with the console. No need to do that for user instances since
-                 * they never log into the console. */
+                /* Try to figure out if we can use colors with the console. No need to do that for user
+                 * instances since they never log into the console. */
                 log_show_color(colors_enabled());
 
                 r = make_null_stdio();
@@ -2754,7 +2869,7 @@
 
                 /* Load the kernel modules early. */
                 if (!skip_setup)
-                        kmod_setup();
+                        (void) kmod_setup();
 
                 /* Mount /proc, /sys and friends, so that /proc/cmdline and /proc/$PID/fd is available. */
                 r = mount_setup(loaded_policy, skip_setup);
@@ -2763,8 +2878,8 @@
                         goto finish;
                 }
 
-                /* The efivarfs is now mounted, let's read the random seed off it */
-                (void) efi_take_random_seed();
+                /* The efivarfs is now mounted, let's lock down the system token. */
+                lock_down_efi_variables();
 
                 /* Cache command-line options passed from EFI variables */
                 if (!skip_setup)
@@ -2772,12 +2887,18 @@
         } else {
                 /* Running as user instance */
                 arg_system = false;
+                log_set_always_reopen_console(true);
                 log_set_target(LOG_TARGET_AUTO);
                 log_open();
 
                 /* clear the kernel timestamp, because we are not PID 1 */
                 kernel_timestamp = DUAL_TIMESTAMP_NULL;
 
+                /* Clear ambient capabilities, so services do not inherit them implicitly. Dropping them does
+                 * not affect the permitted and effective sets which are important for the manager itself to
+                 * operate. */
+                capability_ambient_set_apply(0, /* also_inherit= */ false);
+
                 if (mac_selinux_init() < 0) {
                         error_message = "Failed to initialize SELinux support";
                         goto finish;
@@ -2805,7 +2926,7 @@
                 goto finish;
 
         if (IN_SET(arg_action, ACTION_TEST, ACTION_HELP, ACTION_DUMP_CONFIGURATION_ITEMS, ACTION_DUMP_BUS_PROPERTIES, ACTION_BUS_INTROSPECT))
-                (void) pager_open(arg_pager_flags);
+                pager_open(arg_pager_flags);
 
         if (arg_action != ACTION_RUN)
                 skip_setup = true;
@@ -2872,7 +2993,7 @@
         if (r < 0)
                 goto finish;
 
-        r = manager_new(arg_system ? UNIT_FILE_SYSTEM : UNIT_FILE_USER,
+        r = manager_new(arg_system ? LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER,
                         arg_action == ACTION_TEST ? MANAGER_TEST_FULL : 0,
                         &m);
         if (r < 0) {
@@ -2890,13 +3011,14 @@
         set_manager_defaults(m);
         set_manager_settings(m);
         manager_set_first_boot(m, first_boot);
+        manager_set_switching_root(m, arg_switched_root);
 
         /* Remember whether we should queue the default job */
         queue_default_job = !arg_serialization || arg_switched_root;
 
         before_startup = now(CLOCK_MONOTONIC);
 
-        r = manager_startup(m, arg_serialization, fds);
+        r = manager_startup(m, arg_serialization, fds, /* root= */ NULL);
         if (r < 0) {
                 error_message = "Failed to start up manager";
                 goto finish;
@@ -2916,7 +3038,7 @@
 
         log_full(arg_action == ACTION_TEST ? LOG_INFO : LOG_DEBUG,
                  "Loaded units and determined initial transaction in %s.",
-                 format_timespan(timespan, sizeof(timespan), after_startup - before_startup, 100 * USEC_PER_MSEC));
+                 FORMAT_TIMESPAN(after_startup - before_startup, 100 * USEC_PER_MSEC));
 
         if (arg_action == ACTION_TEST) {
                 manager_test_summary(m);
@@ -2924,16 +3046,22 @@
                 goto finish;
         }
 
-        (void) invoke_main_loop(m,
-                                &saved_rlimit_nofile,
-                                &saved_rlimit_memlock,
-                                &reexecute,
-                                &retval,
-                                &shutdown_verb,
-                                &fds,
-                                &switch_root_dir,
-                                &switch_root_init,
-                                &error_message);
+        r = invoke_main_loop(m,
+                             &saved_rlimit_nofile,
+                             &saved_rlimit_memlock,
+                             &retval,
+                             &fds,
+                             &switch_root_dir,
+                             &switch_root_init,
+                             &error_message);
+        assert(r < 0 || IN_SET(r, MANAGER_EXIT,          /* MANAGER_OK is not expected here. */
+                                  MANAGER_RELOAD,
+                                  MANAGER_REEXECUTE,
+                                  MANAGER_REBOOT,
+                                  MANAGER_POWEROFF,
+                                  MANAGER_HALT,
+                                  MANAGER_KEXEC,
+                                  MANAGER_SWITCH_ROOT));
 
 finish:
         pager_close();
@@ -2946,14 +3074,15 @@
 
         mac_selinux_finish();
 
-        if (reexecute)
-                do_reexecute(argc, argv,
-                             &saved_rlimit_nofile,
-                             &saved_rlimit_memlock,
-                             fds,
-                             switch_root_dir,
-                             switch_root_init,
-                             &error_message); /* This only returns if reexecution failed */
+        if (IN_SET(r, MANAGER_REEXECUTE, MANAGER_SWITCH_ROOT))
+                r = do_reexecute(r,
+                                 argc, argv,
+                                 &saved_rlimit_nofile,
+                                 &saved_rlimit_memlock,
+                                 fds,
+                                 switch_root_dir,
+                                 switch_root_init,
+                                 &error_message); /* This only returns if reexecution failed */
 
         arg_serialization = safe_fclose(arg_serialization);
         fds = fdset_free(fds);
@@ -2969,7 +3098,6 @@
                 /* Cleanup watchdog_device strings for valgrind. We need them
                  * in become_shutdown() so normally we cannot free them yet. */
                 watchdog_free_device();
-                arg_watchdog_device = mfree(arg_watchdog_device);
                 reset_arguments();
                 return retval;
         }
@@ -2979,8 +3107,15 @@
         __lsan_do_leak_check();
 #endif
 
-        if (shutdown_verb) {
-                r = become_shutdown(shutdown_verb, retval);
+        /* Try to invoke the shutdown binary unless we already failed.
+         * If we failed above, we want to freeze after finishing cleanup. */
+        if (arg_system && IN_SET(r, MANAGER_EXIT,
+                                    MANAGER_REBOOT,
+                                    MANAGER_POWEROFF,
+                                    MANAGER_HALT,
+                                    MANAGER_KEXEC)) {
+
+                r = become_shutdown(r, retval);
                 log_error_errno(r, "Failed to execute shutdown binary, %s: %m", getpid_cached() == 1 ? "freezing" : "quitting");
                 error_message = "Failed to execute shutdown binary";
         }
diff --git a/src/core/main.h b/src/core/main.h
new file mode 100644
index 0000000..b12a1cc
--- /dev/null
+++ b/src/core/main.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+extern bool arg_dump_core;
+extern int arg_crash_chvt;
+extern bool arg_crash_shell;
+extern bool arg_crash_reboot;
diff --git a/src/core/manager-dump.c b/src/core/manager-dump.c
index dba3246..5a92356 100644
--- a/src/core/manager-dump.c
+++ b/src/core/manager-dump.c
@@ -7,52 +7,74 @@
 #include "manager-dump.h"
 #include "unit-serialize.h"
 
-void manager_dump_jobs(Manager *s, FILE *f, const char *prefix) {
+void manager_dump_jobs(Manager *s, FILE *f, char **patterns, const char *prefix) {
         Job *j;
 
         assert(s);
         assert(f);
 
-        HASHMAP_FOREACH(j, s->jobs)
+        HASHMAP_FOREACH(j, s->jobs) {
+
+                if (!strv_fnmatch_or_empty(patterns, j->unit->id, FNM_NOESCAPE))
+                        continue;
+
                 job_dump(j, f, prefix);
+        }
 }
 
-void manager_dump_units(Manager *s, FILE *f, const char *prefix) {
+void manager_dump_units(Manager *s, FILE *f, char **patterns, const char *prefix) {
         Unit *u;
         const char *t;
 
         assert(s);
         assert(f);
 
-        HASHMAP_FOREACH_KEY(u, t, s->units)
-                if (u->id == t)
-                        unit_dump(u, f, prefix);
+        HASHMAP_FOREACH_KEY(u, t, s->units) {
+                if (u->id != t)
+                        continue;
+
+                if (!strv_fnmatch_or_empty(patterns, u->id, FNM_NOESCAPE))
+                        continue;
+
+                unit_dump(u, f, prefix);
+        }
 }
 
-void manager_dump(Manager *m, FILE *f, const char *prefix) {
-        assert(m);
-        assert(f);
+static void manager_dump_header(Manager *m, FILE *f, const char *prefix) {
+
+        /* NB: this is a debug interface for developers. It's not supposed to be machine readable or be
+         * stable between versions. We take the liberty to restructure it entirely between versions and
+         * add/remove fields at will. */
 
         fprintf(f, "%sManager: systemd " STRINGIFY(PROJECT_VERSION) " (" GIT_VERSION ")\n", strempty(prefix));
         fprintf(f, "%sFeatures: %s\n", strempty(prefix), systemd_features);
 
         for (ManagerTimestamp q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
                 const dual_timestamp *t = m->timestamps + q;
-                char buf[CONST_MAX(FORMAT_TIMESPAN_MAX, FORMAT_TIMESTAMP_MAX)];
 
                 if (dual_timestamp_is_set(t))
                         fprintf(f, "%sTimestamp %s: %s\n",
                                 strempty(prefix),
                                 manager_timestamp_to_string(q),
-                                timestamp_is_set(t->realtime) ? format_timestamp(buf, sizeof buf, t->realtime) :
-                                                                format_timespan(buf, sizeof buf, t->monotonic, 1));
+                                timestamp_is_set(t->realtime) ? FORMAT_TIMESTAMP(t->realtime) :
+                                                                FORMAT_TIMESPAN(t->monotonic, 1));
         }
-
-        manager_dump_units(m, f, prefix);
-        manager_dump_jobs(m, f, prefix);
 }
 
-int manager_get_dump_string(Manager *m, char **ret) {
+void manager_dump(Manager *m, FILE *f, char **patterns, const char *prefix) {
+        assert(m);
+        assert(f);
+
+        /* If no pattern is provided, dump the full manager state including the manager version, features and
+         * so on. Otherwise limit the dump to the units/jobs matching the specified patterns. */
+        if (!patterns)
+                manager_dump_header(m, f, prefix);
+
+        manager_dump_units(m, f, patterns, prefix);
+        manager_dump_jobs(m, f, patterns, prefix);
+}
+
+int manager_get_dump_string(Manager *m, char **patterns, char **ret) {
         _cleanup_free_ char *dump = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         size_t size;
@@ -65,7 +87,7 @@
         if (!f)
                 return -errno;
 
-        manager_dump(m, f, NULL);
+        manager_dump(m, f, patterns, NULL);
 
         r = fflush_and_check(f);
         if (r < 0)
@@ -82,8 +104,8 @@
         assert(m);
 
         printf("-> By units:\n");
-        manager_dump_units(m, stdout, "\t");
+        manager_dump_units(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("-> By jobs:\n");
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 }
diff --git a/src/core/manager-dump.h b/src/core/manager-dump.h
index 317a4b6..714a1f0 100644
--- a/src/core/manager-dump.h
+++ b/src/core/manager-dump.h
@@ -5,8 +5,8 @@
 
 #include "manager.h"
 
-void manager_dump_jobs(Manager *s, FILE *f, const char *prefix);
-void manager_dump_units(Manager *s, FILE *f, const char *prefix);
-void manager_dump(Manager *s, FILE *f, const char *prefix);
-int manager_get_dump_string(Manager *m, char **ret);
+void manager_dump_jobs(Manager *s, FILE *f, char **patterns, const char *prefix);
+void manager_dump_units(Manager *s, FILE *f, char **patterns, const char *prefix);
+void manager_dump(Manager *s, FILE *f, char **patterns, const char *prefix);
+int manager_get_dump_string(Manager *m, char **patterns, char **ret);
 void manager_test_summary(Manager *m);
diff --git a/src/core/manager-serialize.c b/src/core/manager-serialize.c
new file mode 100644
index 0000000..61a464c
--- /dev/null
+++ b/src/core/manager-serialize.c
@@ -0,0 +1,574 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "clean-ipc.h"
+#include "core-varlink.h"
+#include "dbus.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "format-util.h"
+#include "initrd-util.h"
+#include "macro.h"
+#include "manager-serialize.h"
+#include "manager.h"
+#include "parse-util.h"
+#include "serialize.h"
+#include "syslog-util.h"
+#include "unit-serialize.h"
+#include "user-util.h"
+#include "varlink-internal.h"
+
+int manager_open_serialization(Manager *m, FILE **ret_f) {
+        _cleanup_close_ int fd = -EBADF;
+        FILE *f;
+
+        assert(ret_f);
+
+        fd = open_serialization_fd("systemd-state");
+        if (fd < 0)
+                return fd;
+
+        f = take_fdopen(&fd, "w+");
+        if (!f)
+                return -errno;
+
+        *ret_f = f;
+        return 0;
+}
+
+static bool manager_timestamp_shall_serialize(ManagerTimestamp t) {
+        if (!in_initrd())
+                return true;
+
+        /* The following timestamps only apply to the host system, hence only serialize them there */
+        return !IN_SET(t,
+                       MANAGER_TIMESTAMP_USERSPACE, MANAGER_TIMESTAMP_FINISH,
+                       MANAGER_TIMESTAMP_SECURITY_START, MANAGER_TIMESTAMP_SECURITY_FINISH,
+                       MANAGER_TIMESTAMP_GENERATORS_START, MANAGER_TIMESTAMP_GENERATORS_FINISH,
+                       MANAGER_TIMESTAMP_UNITS_LOAD_START, MANAGER_TIMESTAMP_UNITS_LOAD_FINISH);
+}
+
+static void manager_serialize_uid_refs_internal(
+                FILE *f,
+                Hashmap *uid_refs,
+                const char *field_name) {
+
+        void *p, *k;
+
+        assert(f);
+        assert(field_name);
+
+        /* Serialize the UID reference table. Or actually, just the IPC destruction flag of it, as
+         * the actual counter of it is better rebuild after a reload/reexec. */
+
+        HASHMAP_FOREACH_KEY(p, k, uid_refs) {
+                uint32_t c;
+                uid_t uid;
+
+                uid = PTR_TO_UID(k);
+                c = PTR_TO_UINT32(p);
+
+                if (!(c & DESTROY_IPC_FLAG))
+                        continue;
+
+                (void) serialize_item_format(f, field_name, UID_FMT, uid);
+        }
+}
+
+static void manager_serialize_uid_refs(Manager *m, FILE *f) {
+        manager_serialize_uid_refs_internal(f, m->uid_refs, "destroy-ipc-uid");
+}
+
+static void manager_serialize_gid_refs(Manager *m, FILE *f) {
+        manager_serialize_uid_refs_internal(f, m->gid_refs, "destroy-ipc-gid");
+}
+
+int manager_serialize(
+                Manager *m,
+                FILE *f,
+                FDSet *fds,
+                bool switching_root) {
+
+        const char *t;
+        Unit *u;
+        int r;
+
+        assert(m);
+        assert(f);
+        assert(fds);
+
+        _cleanup_(manager_reloading_stopp) _unused_ Manager *reloading = manager_reloading_start(m);
+
+        (void) serialize_item_format(f, "current-job-id", "%" PRIu32, m->current_job_id);
+        (void) serialize_item_format(f, "n-installed-jobs", "%u", m->n_installed_jobs);
+        (void) serialize_item_format(f, "n-failed-jobs", "%u", m->n_failed_jobs);
+        (void) serialize_bool(f, "taint-usr", m->taint_usr);
+        (void) serialize_bool(f, "ready-sent", m->ready_sent);
+        (void) serialize_bool(f, "taint-logged", m->taint_logged);
+        (void) serialize_bool(f, "service-watchdogs", m->service_watchdogs);
+
+        if (m->show_status_overridden != _SHOW_STATUS_INVALID)
+                (void) serialize_item(f, "show-status-overridden",
+                                      show_status_to_string(m->show_status_overridden));
+
+        if (m->log_level_overridden)
+                (void) serialize_item_format(f, "log-level-override", "%i", log_get_max_level());
+        if (m->log_target_overridden)
+                (void) serialize_item(f, "log-target-override", log_target_to_string(log_get_target()));
+
+        (void) serialize_usec(f, "runtime-watchdog-overridden", m->watchdog_overridden[WATCHDOG_RUNTIME]);
+        (void) serialize_usec(f, "reboot-watchdog-overridden", m->watchdog_overridden[WATCHDOG_REBOOT]);
+        (void) serialize_usec(f, "kexec-watchdog-overridden", m->watchdog_overridden[WATCHDOG_KEXEC]);
+        (void) serialize_usec(f, "pretimeout-watchdog-overridden", m->watchdog_overridden[WATCHDOG_PRETIMEOUT]);
+        (void) serialize_item(f, "pretimeout-watchdog-governor-overridden", m->watchdog_pretimeout_governor_overridden);
+
+        for (ManagerTimestamp q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
+                _cleanup_free_ char *joined = NULL;
+
+                if (!manager_timestamp_shall_serialize(q))
+                        continue;
+
+                joined = strjoin(manager_timestamp_to_string(q), "-timestamp");
+                if (!joined)
+                        return log_oom();
+
+                (void) serialize_dual_timestamp(f, joined, m->timestamps + q);
+        }
+
+        if (!switching_root)
+                (void) serialize_strv(f, "env", m->client_environment);
+
+        if (m->notify_fd >= 0) {
+                r = serialize_fd(f, fds, "notify-fd", m->notify_fd);
+                if (r < 0)
+                        return r;
+
+                (void) serialize_item(f, "notify-socket", m->notify_socket);
+        }
+
+        if (m->cgroups_agent_fd >= 0) {
+                r = serialize_fd(f, fds, "cgroups-agent-fd", m->cgroups_agent_fd);
+                if (r < 0)
+                        return r;
+        }
+
+        if (m->user_lookup_fds[0] >= 0) {
+                int copy0, copy1;
+
+                copy0 = fdset_put_dup(fds, m->user_lookup_fds[0]);
+                if (copy0 < 0)
+                        return log_error_errno(copy0, "Failed to add user lookup fd to serialization: %m");
+
+                copy1 = fdset_put_dup(fds, m->user_lookup_fds[1]);
+                if (copy1 < 0)
+                        return log_error_errno(copy1, "Failed to add user lookup fd to serialization: %m");
+
+                (void) serialize_item_format(f, "user-lookup", "%i %i", copy0, copy1);
+        }
+
+        bus_track_serialize(m->subscribed, f, "subscribed");
+
+        r = dynamic_user_serialize(m, f, fds);
+        if (r < 0)
+                return r;
+
+        manager_serialize_uid_refs(m, f);
+        manager_serialize_gid_refs(m, f);
+
+        r = exec_runtime_serialize(m, f, fds);
+        if (r < 0)
+                return r;
+
+        r = varlink_server_serialize(m->varlink_server, f, fds);
+        if (r < 0)
+                return r;
+
+        (void) fputc('\n', f);
+
+        HASHMAP_FOREACH_KEY(u, t, m->units) {
+                if (u->id != t)
+                        continue;
+
+                r = unit_serialize(u, f, fds, switching_root);
+                if (r < 0)
+                        return r;
+        }
+
+        r = fflush_and_check(f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to flush serialization: %m");
+
+        r = bus_fdset_add_all(m, fds);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add bus sockets to serialization: %m");
+
+        return 0;
+}
+
+static int manager_deserialize_one_unit(Manager *m, const char *name, FILE *f, FDSet *fds) {
+        Unit *u;
+        int r;
+
+        r = manager_load_unit(m, name, NULL, NULL, &u);
+        if (r < 0) {
+                if (r == -ENOMEM)
+                        return r;
+                return log_notice_errno(r, "Failed to load unit \"%s\", skipping deserialization: %m", name);
+        }
+
+        r = unit_deserialize(u, f, fds);
+        if (r < 0) {
+                if (r == -ENOMEM)
+                        return r;
+                return log_notice_errno(r, "Failed to deserialize unit \"%s\", skipping: %m", name);
+        }
+
+        return 0;
+}
+
+static int manager_deserialize_units(Manager *m, FILE *f, FDSet *fds) {
+        const char *unit_name;
+        int r;
+
+        for (;;) {
+                _cleanup_free_ char *line = NULL;
+                /* Start marker */
+                r = read_line(f, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read serialization line: %m");
+                if (r == 0)
+                        break;
+
+                unit_name = strstrip(line);
+
+                r = manager_deserialize_one_unit(m, unit_name, f, fds);
+                if (r == -ENOMEM)
+                        return r;
+                if (r < 0) {
+                        r = unit_deserialize_skip(f);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        return 0;
+}
+
+static void manager_deserialize_uid_refs_one_internal(
+                Hashmap** uid_refs,
+                const char *value) {
+
+        uid_t uid;
+        uint32_t c;
+        int r;
+
+        assert(uid_refs);
+        assert(value);
+
+        r = parse_uid(value, &uid);
+        if (r < 0 || uid == 0) {
+                log_debug("Unable to parse UID/GID reference serialization: " UID_FMT, uid);
+                return;
+        }
+
+        if (hashmap_ensure_allocated(uid_refs, &trivial_hash_ops) < 0) {
+                log_oom();
+                return;
+        }
+
+        c = PTR_TO_UINT32(hashmap_get(*uid_refs, UID_TO_PTR(uid)));
+        if (c & DESTROY_IPC_FLAG)
+                return;
+
+        c |= DESTROY_IPC_FLAG;
+
+        r = hashmap_replace(*uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c));
+        if (r < 0) {
+                log_debug_errno(r, "Failed to add UID/GID reference entry: %m");
+                return;
+        }
+}
+
+static void manager_deserialize_uid_refs_one(Manager *m, const char *value) {
+        manager_deserialize_uid_refs_one_internal(&m->uid_refs, value);
+}
+
+static void manager_deserialize_gid_refs_one(Manager *m, const char *value) {
+        manager_deserialize_uid_refs_one_internal(&m->gid_refs, value);
+}
+
+int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
+        bool deserialize_varlink_sockets = false;
+        int r = 0;
+
+        assert(m);
+        assert(f);
+
+        if (DEBUG_LOGGING) {
+                if (fdset_isempty(fds))
+                        log_debug("No file descriptors passed");
+                else {
+                        int fd;
+
+                        FDSET_FOREACH(fd, fds) {
+                                _cleanup_free_ char *fn = NULL;
+
+                                r = fd_get_path(fd, &fn);
+                                if (r < 0)
+                                        log_debug_errno(r, "Received serialized fd %i %s %m",
+                                                        fd, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT));
+                                else
+                                        log_debug("Received serialized fd %i %s %s",
+                                                  fd, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), strna(fn));
+                        }
+                }
+        }
+
+        log_debug("Deserializing state...");
+
+        /* If we are not in reload mode yet, enter it now. Not that this is recursive, a caller might already have
+         * increased it to non-zero, which is why we just increase it by one here and down again at the end of this
+         * call. */
+        _cleanup_(manager_reloading_stopp) _unused_ Manager *reloading = manager_reloading_start(m);
+
+        for (;;) {
+                _cleanup_free_ char *line = NULL;
+                const char *val, *l;
+
+                r = read_line(f, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read serialization line: %m");
+                if (r == 0)
+                        break;
+
+                l = strstrip(line);
+                if (isempty(l)) /* end marker */
+                        break;
+
+                if ((val = startswith(l, "current-job-id="))) {
+                        uint32_t id;
+
+                        if (safe_atou32(val, &id) < 0)
+                                log_notice("Failed to parse current job id value '%s', ignoring.", val);
+                        else
+                                m->current_job_id = MAX(m->current_job_id, id);
+
+                } else if ((val = startswith(l, "n-installed-jobs="))) {
+                        uint32_t n;
+
+                        if (safe_atou32(val, &n) < 0)
+                                log_notice("Failed to parse installed jobs counter '%s', ignoring.", val);
+                        else
+                                m->n_installed_jobs += n;
+
+                } else if ((val = startswith(l, "n-failed-jobs="))) {
+                        uint32_t n;
+
+                        if (safe_atou32(val, &n) < 0)
+                                log_notice("Failed to parse failed jobs counter '%s', ignoring.", val);
+                        else
+                                m->n_failed_jobs += n;
+
+                } else if ((val = startswith(l, "taint-usr="))) {
+                        int b;
+
+                        b = parse_boolean(val);
+                        if (b < 0)
+                                log_notice("Failed to parse taint /usr flag '%s', ignoring.", val);
+                        else
+                                m->taint_usr = m->taint_usr || b;
+
+                } else if ((val = startswith(l, "ready-sent="))) {
+                        int b;
+
+                        b = parse_boolean(val);
+                        if (b < 0)
+                                log_notice("Failed to parse ready-sent flag '%s', ignoring.", val);
+                        else
+                                m->ready_sent = m->ready_sent || b;
+
+                } else if ((val = startswith(l, "taint-logged="))) {
+                        int b;
+
+                        b = parse_boolean(val);
+                        if (b < 0)
+                                log_notice("Failed to parse taint-logged flag '%s', ignoring.", val);
+                        else
+                                m->taint_logged = m->taint_logged || b;
+
+                } else if ((val = startswith(l, "service-watchdogs="))) {
+                        int b;
+
+                        b = parse_boolean(val);
+                        if (b < 0)
+                                log_notice("Failed to parse service-watchdogs flag '%s', ignoring.", val);
+                        else
+                                m->service_watchdogs = b;
+
+                } else if ((val = startswith(l, "show-status-overridden="))) {
+                        ShowStatus s;
+
+                        s = show_status_from_string(val);
+                        if (s < 0)
+                                log_notice("Failed to parse show-status-overridden flag '%s', ignoring.", val);
+                        else
+                                manager_override_show_status(m, s, "deserialize");
+
+                } else if ((val = startswith(l, "log-level-override="))) {
+                        int level;
+
+                        level = log_level_from_string(val);
+                        if (level < 0)
+                                log_notice("Failed to parse log-level-override value '%s', ignoring.", val);
+                        else
+                                manager_override_log_level(m, level);
+
+                } else if ((val = startswith(l, "log-target-override="))) {
+                        LogTarget target;
+
+                        target = log_target_from_string(val);
+                        if (target < 0)
+                                log_notice("Failed to parse log-target-override value '%s', ignoring.", val);
+                        else
+                                manager_override_log_target(m, target);
+
+                } else if ((val = startswith(l, "runtime-watchdog-overridden="))) {
+                        usec_t t;
+
+                        if (deserialize_usec(val, &t) < 0)
+                                log_notice("Failed to parse runtime-watchdog-overridden value '%s', ignoring.", val);
+                        else
+                                manager_override_watchdog(m, WATCHDOG_RUNTIME, t);
+
+                } else if ((val = startswith(l, "reboot-watchdog-overridden="))) {
+                        usec_t t;
+
+                        if (deserialize_usec(val, &t) < 0)
+                                log_notice("Failed to parse reboot-watchdog-overridden value '%s', ignoring.", val);
+                        else
+                                manager_override_watchdog(m, WATCHDOG_REBOOT, t);
+
+                } else if ((val = startswith(l, "kexec-watchdog-overridden="))) {
+                        usec_t t;
+
+                        if (deserialize_usec(val, &t) < 0)
+                                log_notice("Failed to parse kexec-watchdog-overridden value '%s', ignoring.", val);
+                        else
+                                manager_override_watchdog(m, WATCHDOG_KEXEC, t);
+
+                } else if ((val = startswith(l, "pretimeout-watchdog-overridden="))) {
+                        usec_t t;
+
+                        if (deserialize_usec(val, &t) < 0)
+                                log_notice("Failed to parse pretimeout-watchdog-overridden value '%s', ignoring.", val);
+                        else
+                                manager_override_watchdog(m, WATCHDOG_PRETIMEOUT, t);
+
+                } else if ((val = startswith(l, "pretimeout-watchdog-governor-overridden="))) {
+                        r = free_and_strdup(&m->watchdog_pretimeout_governor_overridden, val);
+                        if (r < 0)
+                                return r;
+
+                } else if (startswith(l, "env=")) {
+                        r = deserialize_environment(l + 4, &m->client_environment);
+                        if (r < 0)
+                                log_notice_errno(r, "Failed to parse environment entry: \"%s\", ignoring: %m", l);
+
+                } else if ((val = startswith(l, "notify-fd="))) {
+                        int fd;
+
+                        if (safe_atoi(val, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
+                                log_notice("Failed to parse notify fd, ignoring: \"%s\"", val);
+                        else {
+                                m->notify_event_source = sd_event_source_disable_unref(m->notify_event_source);
+                                safe_close(m->notify_fd);
+                                m->notify_fd = fdset_remove(fds, fd);
+                        }
+
+                } else if ((val = startswith(l, "notify-socket="))) {
+                        r = free_and_strdup(&m->notify_socket, val);
+                        if (r < 0)
+                                return r;
+
+                } else if ((val = startswith(l, "cgroups-agent-fd="))) {
+                        int fd;
+
+                        if (safe_atoi(val, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
+                                log_notice("Failed to parse cgroups agent fd, ignoring.: %s", val);
+                        else {
+                                m->cgroups_agent_event_source = sd_event_source_disable_unref(m->cgroups_agent_event_source);
+                                safe_close(m->cgroups_agent_fd);
+                                m->cgroups_agent_fd = fdset_remove(fds, fd);
+                        }
+
+                } else if ((val = startswith(l, "user-lookup="))) {
+                        int fd0, fd1;
+
+                        if (sscanf(val, "%i %i", &fd0, &fd1) != 2 || fd0 < 0 || fd1 < 0 || fd0 == fd1 || !fdset_contains(fds, fd0) || !fdset_contains(fds, fd1))
+                                log_notice("Failed to parse user lookup fd, ignoring: %s", val);
+                        else {
+                                m->user_lookup_event_source = sd_event_source_disable_unref(m->user_lookup_event_source);
+                                safe_close_pair(m->user_lookup_fds);
+                                m->user_lookup_fds[0] = fdset_remove(fds, fd0);
+                                m->user_lookup_fds[1] = fdset_remove(fds, fd1);
+                        }
+
+                } else if ((val = startswith(l, "dynamic-user=")))
+                        dynamic_user_deserialize_one(m, val, fds);
+                else if ((val = startswith(l, "destroy-ipc-uid=")))
+                        manager_deserialize_uid_refs_one(m, val);
+                else if ((val = startswith(l, "destroy-ipc-gid=")))
+                        manager_deserialize_gid_refs_one(m, val);
+                else if ((val = startswith(l, "exec-runtime=")))
+                        (void) exec_runtime_deserialize_one(m, val, fds);
+                else if ((val = startswith(l, "subscribed="))) {
+
+                        if (strv_extend(&m->deserialized_subscribed, val) < 0)
+                                return -ENOMEM;
+                } else if ((val = startswith(l, "varlink-server-socket-address="))) {
+                        if (!m->varlink_server && MANAGER_IS_SYSTEM(m)) {
+                                _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
+
+                                r = manager_setup_varlink_server(m, &s);
+                                if (r < 0) {
+                                        log_warning_errno(r, "Failed to setup varlink server, ignoring: %m");
+                                        continue;
+                                }
+
+                                r = varlink_server_attach_event(s, m->event, SD_EVENT_PRIORITY_NORMAL);
+                                if (r < 0) {
+                                        log_warning_errno(r, "Failed to attach varlink connection to event loop, ignoring: %m");
+                                        continue;
+                                }
+
+                                m->varlink_server = TAKE_PTR(s);
+                                deserialize_varlink_sockets = true;
+                        }
+
+                        /* To void unnecessary deserialization (i.e. during reload vs. reexec) we only deserialize
+                         * the FDs if we had to create a new m->varlink_server. The deserialize_varlink_sockets flag
+                         * is initialized outside of the loop, is flipped after the VarlinkServer is setup, and
+                         * remains set until all serialized contents are handled. */
+                        if (deserialize_varlink_sockets)
+                                (void) varlink_server_deserialize_one(m->varlink_server, val, fds);
+                } else {
+                        ManagerTimestamp q;
+
+                        for (q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
+                                val = startswith(l, manager_timestamp_to_string(q));
+                                if (!val)
+                                        continue;
+
+                                val = startswith(val, "-timestamp=");
+                                if (val)
+                                        break;
+                        }
+
+                        if (q < _MANAGER_TIMESTAMP_MAX) /* found it */
+                                (void) deserialize_dual_timestamp(val, m->timestamps + q);
+                        else if (!STARTSWITH_SET(l, "kdbus-fd=", "honor-device-enumeration=")) /* ignore deprecated values */
+                                log_notice("Unknown serialization item '%s', ignoring.", l);
+                }
+        }
+
+        return manager_deserialize_units(m, f, fds);
+}
diff --git a/src/core/manager-serialize.h b/src/core/manager-serialize.h
new file mode 100644
index 0000000..c52261e
--- /dev/null
+++ b/src/core/manager-serialize.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+#include "manager.h"
+#include "fdset.h"
+
+#define DESTROY_IPC_FLAG (UINT32_C(1) << 31)
+
+int manager_open_serialization(Manager *m, FILE **ret_f);
+int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root);
+int manager_deserialize(Manager *m, FILE *f, FDSet *fds);
diff --git a/src/core/manager.c b/src/core/manager.c
index abc63a7..380a4e3 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -6,8 +6,10 @@
 #include <sys/epoll.h>
 #include <sys/inotify.h>
 #include <sys/ioctl.h>
+#include <sys/mount.h>
 #include <sys/reboot.h>
 #include <sys/timerfd.h>
+#include <sys/utsname.h>
 #include <sys/wait.h>
 #include <unistd.h>
 
@@ -29,24 +31,26 @@
 #include "bus-util.h"
 #include "clean-ipc.h"
 #include "clock-util.h"
+#include "constants.h"
 #include "core-varlink.h"
 #include "creds-util.h"
 #include "dbus-job.h"
 #include "dbus-manager.h"
 #include "dbus-unit.h"
 #include "dbus.h"
-#include "def.h"
 #include "dirent-util.h"
 #include "env-util.h"
 #include "escape.h"
+#include "event-util.h"
 #include "exec-util.h"
 #include "execute.h"
 #include "exit-status.h"
 #include "fd-util.h"
 #include "fileio.h"
-#include "fs-util.h"
 #include "generator-setup.h"
 #include "hashmap.h"
+#include "initrd-util.h"
+#include "inotify-util.h"
 #include "install.h"
 #include "io-util.h"
 #include "label.h"
@@ -56,8 +60,11 @@
 #include "macro.h"
 #include "manager.h"
 #include "manager-dump.h"
+#include "manager-serialize.h"
 #include "memory-util.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
+#include "mount-util.h"
+#include "os-util.h"
 #include "parse-util.h"
 #include "path-lookup.h"
 #include "path-util.h"
@@ -66,7 +73,6 @@
 #include "rlimit-util.h"
 #include "rm-rf.h"
 #include "selinux-util.h"
-#include "serialize.h"
 #include "signal-util.h"
 #include "socket-util.h"
 #include "special.h"
@@ -80,9 +86,9 @@
 #include "terminal-util.h"
 #include "time-util.h"
 #include "transaction.h"
+#include "uid-range.h"
 #include "umask-util.h"
 #include "unit-name.h"
-#include "unit-serialize.h"
 #include "user-util.h"
 #include "virt.h"
 #include "watchdog.h"
@@ -118,9 +124,19 @@
 static void manager_vacuum(Manager *m);
 
 static usec_t manager_watch_jobs_next_time(Manager *m) {
-        return usec_add(now(CLOCK_MONOTONIC),
-                        show_status_on(m->show_status) ? JOBS_IN_PROGRESS_WAIT_USEC :
-                                                         JOBS_IN_PROGRESS_QUIET_WAIT_USEC);
+        usec_t timeout;
+
+        if (MANAGER_IS_USER(m))
+                /* Let the user manager without a timeout show status quickly, so the system manager can make
+                 * use of it, if it wants to. */
+                timeout = JOBS_IN_PROGRESS_WAIT_USEC * 2 / 3;
+        else if (show_status_on(m->show_status))
+                /* When status is on, just use the usual timeout. */
+                timeout = JOBS_IN_PROGRESS_WAIT_USEC;
+        else
+                timeout = JOBS_IN_PROGRESS_QUIET_WAIT_USEC;
+
+        return usec_add(now(CLOCK_MONOTONIC), timeout);
 }
 
 static void manager_watch_jobs_in_progress(Manager *m) {
@@ -200,13 +216,11 @@
 }
 
 static void manager_print_jobs_in_progress(Manager *m) {
-        _cleanup_free_ char *job_of_n = NULL;
         Job *j;
         unsigned counter = 0, print_nr;
         char cylon[6 + CYLON_BUFFER_EXTRA + 1];
         unsigned cylon_pos;
-        char time[FORMAT_TIMESPAN_MAX], limit[FORMAT_TIMESPAN_MAX] = "no limit";
-        uint64_t x;
+        uint64_t timeout = 0;
 
         assert(m);
         assert(m->n_running_jobs > 0);
@@ -231,33 +245,55 @@
 
         m->jobs_in_progress_iteration++;
 
-        if (m->n_running_jobs > 1) {
-                if (asprintf(&job_of_n, "(%u of %u) ", counter, m->n_running_jobs) < 0)
-                        job_of_n = NULL;
-        }
+        char job_of_n[STRLEN("( of ) ") + DECIMAL_STR_MAX(unsigned)*2] = "";
+        if (m->n_running_jobs > 1)
+                xsprintf(job_of_n, "(%u of %u) ", counter, m->n_running_jobs);
 
-        format_timespan(time, sizeof(time), now(CLOCK_MONOTONIC) - j->begin_usec, 1*USEC_PER_SEC);
-        if (job_get_timeout(j, &x) > 0)
-                format_timespan(limit, sizeof(limit), x - j->begin_usec, 1*USEC_PER_SEC);
+        (void) job_get_timeout(j, &timeout);
 
         /* We want to use enough information for the user to identify previous lines talking about the same
          * unit, but keep the message as short as possible. So if 'Starting foo.service' or 'Starting
-         * foo.service (Description)' were used, 'foo.service' is enough here. On the other hand, if we used
+         * foo.service - Description' were used, 'foo.service' is enough here. On the other hand, if we used
          * 'Starting Description' before, then we shall also use 'Description' here. So we pass NULL as the
          * second argument to unit_status_string(). */
         const char *ident = unit_status_string(j->unit, NULL);
 
-        manager_status_printf(m, STATUS_TYPE_EPHEMERAL, cylon,
-                              "%sA %s job is running for %s (%s / %s)",
-                              strempty(job_of_n),
-                              job_type_to_string(j->type),
-                              ident,
-                              time, limit);
+        const char *time = FORMAT_TIMESPAN(now(CLOCK_MONOTONIC) - j->begin_usec, 1*USEC_PER_SEC);
+        const char *limit = timeout > 0 ? FORMAT_TIMESPAN(timeout - j->begin_usec, 1*USEC_PER_SEC) : "no limit";
+
+        if (m->status_unit_format == STATUS_UNIT_FORMAT_DESCRIPTION)
+                /* When using 'Description', we effectively don't have enough space to show the nested status
+                 * without ellipsization, so let's not even try. */
+                manager_status_printf(m, STATUS_TYPE_EPHEMERAL, cylon,
+                                      "%sA %s job is running for %s (%s / %s)",
+                                      job_of_n,
+                                      job_type_to_string(j->type),
+                                      ident,
+                                      time, limit);
+        else {
+                const char *status_text = unit_status_text(j->unit);
+
+                manager_status_printf(m, STATUS_TYPE_EPHEMERAL, cylon,
+                                      "%sJob %s/%s running (%s / %s)%s%s",
+                                      job_of_n,
+                                      ident,
+                                      job_type_to_string(j->type),
+                                      time, limit,
+                                      status_text ? ": " : "",
+                                      strempty(status_text));
+        }
+
+        sd_notifyf(false,
+                   "STATUS=%sUser job %s/%s running (%s / %s)...",
+                   job_of_n,
+                   ident,
+                   job_type_to_string(j->type),
+                   time, limit);
+        m->status_ready = false;
 }
 
 static int have_ask_password(void) {
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *de;
 
         dir = opendir("/run/systemd/ask-password");
         if (!dir) {
@@ -267,18 +303,15 @@
                         return -errno;
         }
 
-        FOREACH_DIRENT_ALL(de, dir, return -errno) {
+        FOREACH_DIRENT_ALL(de, dir, return -errno)
                 if (startswith(de->d_name, "ask."))
                         return true;
-        }
         return false;
 }
 
 static int manager_dispatch_ask_password_fd(sd_event_source *source,
                                             int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
-
-        assert(m);
+        Manager *m = ASSERT_PTR(userdata);
 
         (void) flush_fd(fd);
 
@@ -378,13 +411,8 @@
                 return 0;
 
         m->time_change_event_source = sd_event_source_disable_unref(m->time_change_event_source);
-        m->time_change_fd = safe_close(m->time_change_fd);
 
-        m->time_change_fd = time_change_fd();
-        if (m->time_change_fd < 0)
-                return log_error_errno(m->time_change_fd, "Failed to create timer change timer fd: %m");
-
-        r = sd_event_add_io(m->event, &m->time_change_event_source, m->time_change_fd, EPOLLIN, manager_dispatch_time_change_fd, m);
+        r = event_add_time_change(m->event, &m->time_change_event_source, manager_dispatch_time_change_fd, m);
         if (r < 0)
                 return log_error_errno(r, "Failed to create time change event source: %m");
 
@@ -393,8 +421,6 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to set priority of time change event sources: %m");
 
-        (void) sd_event_source_set_description(m->time_change_event_source, "manager-time-change");
-
         log_debug("Set up TFD_TIMER_CANCEL_ON_SET timerfd.");
 
         return 0;
@@ -469,7 +495,7 @@
 }
 
 static int enable_special_signals(Manager *m) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(m);
 
@@ -548,8 +574,7 @@
                         SIGRTMIN+22, /* systemd: set log level to LOG_DEBUG */
                         SIGRTMIN+23, /* systemd: set log level to LOG_INFO */
                         SIGRTMIN+24, /* systemd: Immediate exit (--user only) */
-
-                        /* .. one free signal here ... */
+                        SIGRTMIN+25, /* systemd: reexecute manager */
 
                         /* Apparently Linux on hppa had fewer RT signals until v3.18,
                          * SIGRTMAX was SIGRTMIN+25, and then SIGRTMIN was lowered,
@@ -624,9 +649,7 @@
                         NULL);
 
         /* Let's order the environment alphabetically, just to make it pretty */
-        strv_sort(l);
-
-        return l;
+        return strv_sort(l);
 }
 
 int manager_default_environment(Manager *m) {
@@ -756,13 +779,47 @@
         return 0;
 }
 
-int manager_new(UnitFileScope scope, ManagerTestRunFlags test_run_flags, Manager **_m) {
-        _cleanup_(manager_freep) Manager *m = NULL;
+static int manager_find_credentials_dirs(Manager *m) {
         const char *e;
         int r;
 
+        assert(m);
+
+        r = get_credentials_dir(&e);
+        if (r < 0) {
+                if (r != -ENXIO)
+                        log_debug_errno(r, "Failed to determine credentials directory, ignoring: %m");
+        } else {
+                m->received_credentials_directory = strdup(e);
+                if (!m->received_credentials_directory)
+                        return -ENOMEM;
+        }
+
+        r = get_encrypted_credentials_dir(&e);
+        if (r < 0) {
+                if (r != -ENXIO)
+                        log_debug_errno(r, "Failed to determine encrypted credentials directory, ignoring: %m");
+        } else {
+                m->received_encrypted_credentials_directory = strdup(e);
+                if (!m->received_encrypted_credentials_directory)
+                        return -ENOMEM;
+        }
+
+        return 0;
+}
+
+void manager_set_switching_root(Manager *m, bool switching_root) {
+        assert(m);
+
+        m->switching_root = MANAGER_IS_SYSTEM(m) && switching_root;
+}
+
+int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager **_m) {
+        _cleanup_(manager_freep) Manager *m = NULL;
+        int r;
+
         assert(_m);
-        assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER));
+        assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER));
 
         m = new(Manager, 1);
         if (!m)
@@ -778,9 +835,10 @@
                 .default_memory_accounting = MEMORY_ACCOUNTING_DEFAULT,
                 .default_tasks_accounting = true,
                 .default_tasks_max = TASKS_MAX_UNSET,
-                .default_timeout_start_usec = DEFAULT_TIMEOUT_USEC,
-                .default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC,
+                .default_timeout_start_usec = manager_default_timeout(scope == LOOKUP_SCOPE_SYSTEM),
+                .default_timeout_stop_usec = manager_default_timeout(scope == LOOKUP_SCOPE_SYSTEM),
                 .default_restart_usec = DEFAULT_RESTART_USEC,
+                .default_device_timeout_usec = manager_default_timeout(scope == LOOKUP_SCOPE_SYSTEM),
 
                 .original_log_level = -1,
                 .original_log_target = _LOG_TARGET_INVALID,
@@ -788,20 +846,20 @@
                 .watchdog_overridden[WATCHDOG_RUNTIME] = USEC_INFINITY,
                 .watchdog_overridden[WATCHDOG_REBOOT] = USEC_INFINITY,
                 .watchdog_overridden[WATCHDOG_KEXEC] = USEC_INFINITY,
+                .watchdog_overridden[WATCHDOG_PRETIMEOUT] = USEC_INFINITY,
 
                 .show_status_overridden = _SHOW_STATUS_INVALID,
 
-                .notify_fd = -1,
-                .cgroups_agent_fd = -1,
-                .signal_fd = -1,
-                .time_change_fd = -1,
-                .user_lookup_fds = { -1, -1 },
-                .private_listen_fd = -1,
-                .dev_autofs_fd = -1,
-                .cgroup_inotify_fd = -1,
-                .pin_cgroupfs_fd = -1,
-                .ask_password_inotify_fd = -1,
-                .idle_pipe = { -1, -1, -1, -1},
+                .notify_fd = -EBADF,
+                .cgroups_agent_fd = -EBADF,
+                .signal_fd = -EBADF,
+                .user_lookup_fds = PIPE_EBADF,
+                .private_listen_fd = -EBADF,
+                .dev_autofs_fd = -EBADF,
+                .cgroup_inotify_fd = -EBADF,
+                .pin_cgroupfs_fd = -EBADF,
+                .ask_password_inotify_fd = -EBADF,
+                .idle_pipe = { -EBADF, -EBADF, -EBADF, -EBADF},
 
                  /* start as id #1, so that we can leave #0 around as "null-like" value */
                 .current_job_id = 1,
@@ -836,7 +894,7 @@
         }
 
         /* Reboot immediately if the user hits C-A-D more often than 7x per 2s */
-        m->ctrl_alt_del_ratelimit = (RateLimit) { .interval = 2 * USEC_PER_SEC, .burst = 7 };
+        m->ctrl_alt_del_ratelimit = (const RateLimit) { .interval = 2 * USEC_PER_SEC, .burst = 7 };
 
         r = manager_default_environment(m);
         if (r < 0)
@@ -862,12 +920,9 @@
         if (r < 0)
                 return r;
 
-        r = get_credentials_dir(&e);
-        if (r >= 0) {
-                m->received_credentials = strdup(e);
-                if (!m->received_credentials)
-                        return -ENOMEM;
-        }
+        r = manager_find_credentials_dirs(m);
+        if (r < 0)
+                return r;
 
         r = sd_event_default(&m->event);
         if (r < 0)
@@ -903,6 +958,14 @@
                 r = manager_setup_sigchld_event_source(m);
                 if (r < 0)
                         return r;
+
+#if HAVE_LIBBPF
+                if (MANAGER_IS_SYSTEM(m) && lsm_bpf_supported(/* initialize = */ true)) {
+                        r = lsm_bpf_setup(m);
+                        if (r < 0)
+                                log_warning_errno(r, "Failed to setup LSM BPF, ignoring: %m");
+                }
+#endif
         }
 
         if (test_run_flags == 0) {
@@ -922,7 +985,7 @@
 
         m->taint_usr =
                 !in_initrd() &&
-                dir_is_empty("/usr") > 0;
+                dir_is_empty("/usr", /* ignore_hidden_or_backup= */ false) > 0;
 
         /* Note that we do not set up the notify fd here. We do that after deserialization,
          * since they might have gotten serialized across the reexec. */
@@ -939,7 +1002,7 @@
                 return 0;
 
         if (m->notify_fd < 0) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 union sockaddr_union sa;
                 socklen_t sa_len;
 
@@ -951,7 +1014,7 @@
                 if (fd < 0)
                         return log_error_errno(errno, "Failed to allocate notification socket: %m");
 
-                fd_inc_rcvbuf(fd, NOTIFY_RCVBUF_SIZE);
+                fd_increase_rxbuf(fd, NOTIFY_RCVBUF_SIZE);
 
                 m->notify_socket = path_join(m->prefix[EXEC_DIRECTORY_RUNTIME], "systemd/notify");
                 if (!m->notify_socket)
@@ -1030,7 +1093,7 @@
                 return 0;
 
         if (m->cgroups_agent_fd < 0) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 /* First free all secondary fields */
                 m->cgroups_agent_event_source = sd_event_source_disable_unref(m->cgroups_agent_event_source);
@@ -1039,12 +1102,12 @@
                 if (fd < 0)
                         return log_error_errno(errno, "Failed to allocate cgroups agent socket: %m");
 
-                fd_inc_rcvbuf(fd, CGROUPS_AGENT_RCVBUF_SIZE);
+                fd_increase_rxbuf(fd, CGROUPS_AGENT_RCVBUF_SIZE);
 
                 (void) sockaddr_un_unlink(&sa.un);
 
                 /* Only allow root to connect to this socket */
-                RUN_WITH_UMASK(0077)
+                WITH_UMASK(0077)
                         r = bind(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un));
                 if (r < 0)
                         return log_error_errno(errno, "bind(%s) failed: %m", sa.un.sun_path);
@@ -1103,7 +1166,7 @@
                 if (socketpair(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0, m->user_lookup_fds) < 0)
                         return log_error_errno(errno, "Failed to allocate user lookup socket: %m");
 
-                (void) fd_inc_rcvbuf(m->user_lookup_fds[0], NOTIFY_RCVBUF_SIZE);
+                (void) fd_increase_rxbuf(m->user_lookup_fds[0], NOTIFY_RCVBUF_SIZE);
         }
 
         if (!m->user_lookup_event_source) {
@@ -1188,7 +1251,6 @@
                         is_bad = false;
         }
 
-        const UnitRef *ref;
         LIST_FOREACH(refs_by_target, ref, u->refs_by_target) {
                 unit_gc_sweep(ref->source, gc_marker);
 
@@ -1475,7 +1537,6 @@
         safe_close(m->signal_fd);
         safe_close(m->notify_fd);
         safe_close(m->cgroups_agent_fd);
-        safe_close(m->time_change_fd);
         safe_close_pair(m->user_lookup_fds);
 
         manager_close_ask_password(m);
@@ -1496,6 +1557,8 @@
         free(m->switch_root);
         free(m->switch_root_init);
 
+        free(m->default_smack_process_label);
+
         rlimit_free_all(m->rlimit);
 
         assert(hashmap_isempty(m->units_requiring_mounts_for));
@@ -1506,7 +1569,15 @@
 
         for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++)
                 m->prefix[dt] = mfree(m->prefix[dt]);
-        free(m->received_credentials);
+        free(m->received_credentials_directory);
+        free(m->received_encrypted_credentials_directory);
+
+        free(m->watchdog_pretimeout_governor);
+        free(m->watchdog_pretimeout_governor_overridden);
+
+#if BPF_FRAMEWORK
+        lsm_bpf_destroy(m->restrict_fs);
+#endif
 
         return mfree(m);
 }
@@ -1514,7 +1585,7 @@
 static void manager_enumerate_perpetual(Manager *m) {
         assert(m);
 
-        if (m->test_run_flags == MANAGER_TEST_RUN_MINIMAL)
+        if (FLAGS_SET(m->test_run_flags, MANAGER_TEST_RUN_MINIMAL))
                 return;
 
         /* Let's ask every type to load all units from disk/kernel that it might know */
@@ -1532,7 +1603,7 @@
 static void manager_enumerate(Manager *m) {
         assert(m);
 
-        if (m->test_run_flags == MANAGER_TEST_RUN_MINIMAL)
+        if (FLAGS_SET(m->test_run_flags, MANAGER_TEST_RUN_MINIMAL))
                 return;
 
         /* Let's ask every type to load all units from disk/kernel that it might know */
@@ -1556,7 +1627,7 @@
 
         assert(m);
 
-        log_debug("Invoking unit coldplug() handlers…");
+        log_debug("Invoking unit coldplug() handlers%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
         /* Let's place the units back into their deserialized state */
         HASHMAP_FOREACH_KEY(u, k, m->units) {
@@ -1577,7 +1648,7 @@
 
         assert(m);
 
-        log_debug("Invoking unit catchup() handlers…");
+        log_debug("Invoking unit catchup() handlers%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
         /* Let's catch up on any state changes that happened while we were reloading/reexecing */
         HASHMAP_FOREACH_KEY(u, k, m->units) {
@@ -1668,7 +1739,9 @@
                 return;
 
         /* If this is the first boot, and we are in the host system, then preset everything */
-        r = unit_file_preset_all(UNIT_FILE_SYSTEM, 0, NULL, UNIT_FILE_PRESET_ENABLE_ONLY, NULL, 0);
+        UnitFilePresetMode mode = FIRST_BOOT_FULL_PRESET ? UNIT_FILE_PRESET_FULL : UNIT_FILE_PRESET_ENABLE_ONLY;
+
+        r = unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, NULL, mode, NULL, 0);
         if (r < 0)
                 log_full_errno(r == -EEXIST ? LOG_NOTICE : LOG_WARNING, r,
                                "Failed to populate /etc with preset unit settings, ignoring: %m");
@@ -1690,32 +1763,38 @@
         /* Let's finally catch up with any changes that took place while we were reloading/reexecing */
         manager_catchup(m);
 
-        m->honor_device_enumeration = true;
+        /* Create a file which will indicate when the manager started loading units the last time. */
+        if (MANAGER_IS_SYSTEM(m))
+                (void) touch_file("/run/systemd/systemd-units-load", false,
+                        m->timestamps[MANAGER_TIMESTAMP_UNITS_LOAD].realtime ?: now(CLOCK_REALTIME),
+                        UID_INVALID, GID_INVALID, 0444);
 }
 
-static Manager* manager_reloading_start(Manager *m) {
+Manager* manager_reloading_start(Manager *m) {
         m->n_reloading++;
+        dual_timestamp_get(m->timestamps + MANAGER_TIMESTAMP_UNITS_LOAD);
         return m;
 }
-static void manager_reloading_stopp(Manager **m) {
+
+void manager_reloading_stopp(Manager **m) {
         if (*m) {
                 assert((*m)->n_reloading > 0);
                 (*m)->n_reloading--;
         }
 }
 
-int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
+int manager_startup(Manager *m, FILE *serialization, FDSet *fds, const char *root) {
         int r;
 
         assert(m);
 
         /* If we are running in test mode, we still want to run the generators,
          * but we should not touch the real generator directories. */
-        r = lookup_paths_init(&m->lookup_paths, m->unit_file_scope,
-                              MANAGER_IS_TEST_RUN(m) ? LOOKUP_PATHS_TEMPORARY_GENERATED : 0,
-                              NULL);
+        r = lookup_paths_init_or_warn(&m->lookup_paths, m->unit_file_scope,
+                                      MANAGER_IS_TEST_RUN(m) ? LOOKUP_PATHS_TEMPORARY_GENERATED : 0,
+                                      root);
         if (r < 0)
-                return log_error_errno(r, "Failed to initialize path lookup table: %m");
+                return r;
 
         dual_timestamp_get(m->timestamps + manager_timestamp_initrd_mangle(MANAGER_TIMESTAMP_GENERATORS_START));
         r = manager_run_environment_generators(m);
@@ -1783,7 +1862,7 @@
 
                 r = manager_varlink_init(m);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to set up Varlink server, ignoring: %m");
+                        log_warning_errno(r, "Failed to set up Varlink, ignoring: %m");
 
                 /* Third, fire things up! */
                 manager_coldplug(m);
@@ -1799,6 +1878,8 @@
 
         manager_ready(m);
 
+        manager_set_switching_root(m, false);
+
         return 0;
 }
 
@@ -2040,15 +2121,15 @@
                 const char *name,
                 const char *path,
                 sd_bus_error *e,
-                Unit **_ret) {
+                Unit **ret) {
 
-        _cleanup_(unit_freep) Unit *cleanup_ret = NULL;
-        Unit *ret;
-        UnitType t;
+        _cleanup_(unit_freep) Unit *cleanup_unit = NULL;
+        _cleanup_free_ char *nbuf = NULL;
         int r;
 
         assert(m);
-        assert(_ret);
+        assert(ret);
+        assert(name || path);
 
         /* This will prepare the unit for loading, but not actually load anything from disk. */
 
@@ -2056,14 +2137,16 @@
                 return sd_bus_error_setf(e, SD_BUS_ERROR_INVALID_ARGS, "Path %s is not absolute.", path);
 
         if (!name) {
-                /* 'name' and 'path' must not both be null. Check here 'path' using assert_se() to
-                 * workaround a bug in gcc that generates a -Wnonnull warning when calling basename(),
-                 * but this cannot be possible in any code path (See #6119). */
-                assert_se(path);
-                name = basename(path);
+                r = path_extract_filename(path, &nbuf);
+                if (r < 0)
+                        return r;
+                if (r == O_DIRECTORY)
+                        return sd_bus_error_setf(e, SD_BUS_ERROR_INVALID_ARGS, "Path '%s' refers to directory, refusing.", path);
+
+                name = nbuf;
         }
 
-        t = unit_name_to_type(name);
+        UnitType t = unit_name_to_type(name);
 
         if (t == _UNIT_TYPE_INVALID || !unit_name_is_valid(name, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE)) {
                 if (unit_name_is_valid(name, UNIT_NAME_TEMPLATE))
@@ -2072,8 +2155,8 @@
                 return sd_bus_error_setf(e, SD_BUS_ERROR_INVALID_ARGS, "Unit name %s is not valid.", name);
         }
 
-        ret = manager_get_unit(m, name);
-        if (ret) {
+        Unit *unit = manager_get_unit(m, name);
+        if (unit) {
                 /* The time-based cache allows to start new units without daemon-reload,
                  * but if they are already referenced (because of dependencies or ordering)
                  * then we have to force a load of the fragment. As an optimization, check
@@ -2083,36 +2166,36 @@
                  * we need to try again — even if the cache is current, it might have been
                  * updated in a different context before we had a chance to retry loading
                  * this particular unit. */
-                if (manager_unit_cache_should_retry_load(ret))
-                        ret->load_state = UNIT_STUB;
+                if (manager_unit_cache_should_retry_load(unit))
+                        unit->load_state = UNIT_STUB;
                 else {
-                        *_ret = ret;
-                        return 1;
+                        *ret = unit;
+                        return 0;  /* The unit was already loaded */
                 }
         } else {
-                ret = cleanup_ret = unit_new(m, unit_vtable[t]->object_size);
-                if (!ret)
+                unit = cleanup_unit = unit_new(m, unit_vtable[t]->object_size);
+                if (!unit)
                         return -ENOMEM;
         }
 
         if (path) {
-                r = free_and_strdup(&ret->fragment_path, path);
+                r = free_and_strdup(&unit->fragment_path, path);
                 if (r < 0)
                         return r;
         }
 
-        r = unit_add_name(ret, name);
+        r = unit_add_name(unit, name);
         if (r < 0)
                 return r;
 
-        unit_add_to_load_queue(ret);
-        unit_add_to_dbus_queue(ret);
-        unit_add_to_gc_queue(ret);
+        unit_add_to_load_queue(unit);
+        unit_add_to_dbus_queue(unit);
+        unit_add_to_gc_queue(unit);
 
-        *_ret = ret;
-        cleanup_ret = NULL;
+        *ret = unit;
+        TAKE_PTR(cleanup_unit);
 
-        return 0;
+        return 1;  /* The unit was added the load queue */
 }
 
 int manager_load_unit(
@@ -2120,23 +2203,21 @@
                 const char *name,
                 const char *path,
                 sd_bus_error *e,
-                Unit **_ret) {
-
+                Unit **ret) {
         int r;
 
         assert(m);
-        assert(_ret);
+        assert(ret);
 
-        /* This will load the service information files, but not actually
-         * start any services or anything. */
+        /* This will load the unit config, but not actually start any services or anything. */
 
-        r = manager_load_unit_prepare(m, name, path, e, _ret);
-        if (r != 0)
+        r = manager_load_unit_prepare(m, name, path, e, ret);
+        if (r <= 0)
                 return r;
 
+        /* Unit was newly loaded */
         manager_dispatch_load_queue(m);
-
-        *_ret = unit_follow_merge(*_ret);
+        *ret = unit_follow_merge(*ret);
         return 0;
 }
 
@@ -2187,11 +2268,10 @@
 }
 
 static int manager_dispatch_run_queue(sd_event_source *source, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Job *j;
 
         assert(source);
-        assert(m);
 
         while ((j = prioq_peek(m->run_queue))) {
                 assert(j->installed);
@@ -2209,6 +2289,18 @@
         return 1;
 }
 
+void manager_trigger_run_queue(Manager *m) {
+        int r;
+
+        assert(m);
+
+        r = sd_event_source_set_enabled(
+                        m->run_queue_event_source,
+                        prioq_isempty(m->run_queue) ? SD_EVENT_OFF : SD_EVENT_ONESHOT);
+        if (r < 0)
+                log_warning_errno(r, "Failed to enable job run queue event source, ignoring: %m");
+}
+
 static unsigned manager_dispatch_dbus_queue(Manager *m) {
         unsigned n = 0, budget;
         Unit *u;
@@ -2360,7 +2452,7 @@
 static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
 
         _cleanup_fdset_free_ FDSet *fds = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         char buf[NOTIFY_BUFFER_MAX+1];
         struct iovec iovec = {
                 .iov_base = buf,
@@ -2385,7 +2477,6 @@
         bool found = false;
         ssize_t n;
 
-        assert(m);
         assert(m->notify_fd == fd);
 
         if (revents != EPOLLIN) {
@@ -2394,18 +2485,19 @@
         }
 
         n = recvmsg_safe(m->notify_fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC|MSG_TRUNC);
-        if (IN_SET(n, -EAGAIN, -EINTR))
-                return 0; /* Spurious wakeup, try again */
-        if (n == -EXFULL) {
-                log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
-                return 0;
-        }
-        if (n < 0)
+        if (n < 0) {
+                if (ERRNO_IS_TRANSIENT(n))
+                        return 0; /* Spurious wakeup, try again */
+                if (n == -EXFULL) {
+                        log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
+                        return 0;
+                }
                 /* If this is any other, real error, then let's stop processing this socket. This of course
                  * means we won't take notification messages anymore, but that's still better than busy
                  * looping around this: being woken up over and over again but being unable to actually read
                  * the message off the socket. */
                 return log_error_errno(n, "Failed to receive notification message: %m");
+        }
 
         CMSG_FOREACH(cmsg, &msghdr) {
                 if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
@@ -2444,14 +2536,14 @@
                 return 0;
         }
 
-        /* As extra safety check, let's make sure the string we get doesn't contain embedded NUL bytes. We permit one
-         * trailing NUL byte in the message, but don't expect it. */
+        /* As extra safety check, let's make sure the string we get doesn't contain embedded NUL bytes.
+         * We permit one trailing NUL byte in the message, but don't expect it. */
         if (n > 1 && memchr(buf, 0, n-1)) {
                 log_warning("Received notify message with embedded NUL bytes. Ignoring.");
                 return 0;
         }
 
-        /* Make sure it's NUL-terminated, then parse it to obtain the tags list */
+        /* Make sure it's NUL-terminated, then parse it to obtain the tags list. */
         buf[n] = 0;
         tags = strv_split_newlines(buf);
         if (!tags) {
@@ -2459,7 +2551,7 @@
                 return 0;
         }
 
-        /* possibly a barrier fd, let's see */
+        /* Possibly a barrier fd, let's see. */
         if (manager_process_barrier_fd(tags, fds))
                 return 0;
 
@@ -2480,8 +2572,8 @@
                 if (!array_copy)
                         log_oom();
         }
-        /* And now invoke the per-unit callbacks. Note that manager_invoke_notify_message() will handle duplicate units
-         * make sure we only invoke each unit's handler once. */
+        /* And now invoke the per-unit callbacks. Note that manager_invoke_notify_message() will handle
+         * duplicate units make sure we only invoke each unit's handler once. */
         if (u1) {
                 manager_invoke_notify_message(m, u1, ucred, tags, fds);
                 found = true;
@@ -2527,15 +2619,14 @@
 }
 
 static int manager_dispatch_sigchld(sd_event_source *source, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         siginfo_t si = {};
         int r;
 
         assert(source);
-        assert(m);
 
-        /* First we call waitid() for a PID and do not reap the zombie. That way we can still access /proc/$PID for it
-         * while it is a zombie. */
+        /* First we call waitid() for a PID and do not reap the zombie. That way we can still access
+         * /proc/$PID for it while it is a zombie. */
 
         if (waitid(P_ALL, 0, &si, WEXITED|WNOHANG|WNOWAIT) < 0) {
 
@@ -2591,9 +2682,7 @@
                          * We only do this for the cgroup the PID belonged to. */
                         (void) unit_check_oom(u1);
 
-                        /* This only logs for now. In the future when the interface for kills/notifications
-                         * is more stable we can extend service results table similar to how kernel oom kills
-                         * are managed. */
+                        /* We check if systemd-oomd performed a kill so that we log and notify appropriately */
                         (void) unit_check_oomd_kill(u1);
 
                         manager_invoke_sigchld_event(m, u1, &si);
@@ -2623,15 +2712,19 @@
         return 0;
 }
 
-static void manager_start_target(Manager *m, const char *name, JobMode mode) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        int r;
+static void manager_start_special(Manager *m, const char *name, JobMode mode) {
+        Job *job;
 
-        log_debug("Activating special unit %s", name);
+        if (manager_add_job_by_name_and_warn(m, JOB_START, name, mode, NULL, &job) < 0)
+                return;
 
-        r = manager_add_job_by_name(m, JOB_START, name, mode, NULL, &error, NULL);
-        if (r < 0)
-                log_error("Failed to enqueue %s job: %s", name, bus_error_message(&error, r));
+        const char *s = unit_status_string(job->unit, NULL);
+
+        log_info("Activating special unit %s...", s);
+
+        sd_notifyf(false,
+                   "STATUS=Activating special unit %s...", s);
+        m->status_ready = false;
 }
 
 static void manager_handle_ctrl_alt_del(Manager *m) {
@@ -2640,19 +2733,18 @@
          * unless it was disabled in system.conf */
 
         if (ratelimit_below(&m->ctrl_alt_del_ratelimit) || m->cad_burst_action == EMERGENCY_ACTION_NONE)
-                manager_start_target(m, SPECIAL_CTRL_ALT_DEL_TARGET, JOB_REPLACE_IRREVERSIBLY);
+                manager_start_special(m, SPECIAL_CTRL_ALT_DEL_TARGET, JOB_REPLACE_IRREVERSIBLY);
         else
                 emergency_action(m, m->cad_burst_action, EMERGENCY_ACTION_WARN, NULL, -1,
                                 "Ctrl-Alt-Del was pressed more than 7 times within 2s");
 }
 
 static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         ssize_t n;
         struct signalfd_siginfo sfsi;
         int r;
 
-        assert(m);
         assert(m->signal_fd == fd);
 
         if (revents != EPOLLIN) {
@@ -2661,19 +2753,18 @@
         }
 
         n = read(m->signal_fd, &sfsi, sizeof(sfsi));
-        if (n != sizeof(sfsi)) {
-                if (n >= 0) {
-                        log_warning("Truncated read from signal fd (%zu bytes), ignoring!", n);
-                        return 0;
-                }
-
-                if (IN_SET(errno, EINTR, EAGAIN))
+        if (n < 0) {
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
                 /* We return an error here, which will kill this handler,
                  * to avoid a busy loop on read error. */
                 return log_error_errno(errno, "Reading from signal fd failed: %m");
         }
+        if (n != sizeof(sfsi)) {
+                log_warning("Truncated read from signal fd (%zi bytes), ignoring!", n);
+                return 0;
+        }
 
         log_received_signal(sfsi.ssi_signo == SIGCHLD ||
                             (sfsi.ssi_signo == SIGTERM && MANAGER_IS_USER(m))
@@ -2704,21 +2795,20 @@
                 if (MANAGER_IS_SYSTEM(m))
                         manager_handle_ctrl_alt_del(m);
                 else
-                        manager_start_target(m, SPECIAL_EXIT_TARGET,
-                                             JOB_REPLACE_IRREVERSIBLY);
+                        manager_start_special(m, SPECIAL_EXIT_TARGET, JOB_REPLACE_IRREVERSIBLY);
                 break;
 
         case SIGWINCH:
                 /* This is a nop on non-init */
                 if (MANAGER_IS_SYSTEM(m))
-                        manager_start_target(m, SPECIAL_KBREQUEST_TARGET, JOB_REPLACE);
+                        manager_start_special(m, SPECIAL_KBREQUEST_TARGET, JOB_REPLACE);
 
                 break;
 
         case SIGPWR:
                 /* This is a nop on non-init */
                 if (MANAGER_IS_SYSTEM(m))
-                        manager_start_target(m, SPECIAL_SIGPWR_TARGET, JOB_REPLACE);
+                        manager_start_special(m, SPECIAL_SIGPWR_TARGET, JOB_REPLACE);
 
                 break;
 
@@ -2730,17 +2820,15 @@
 
                         if (MANAGER_IS_SYSTEM(m))
                                 (void) bus_init_system(m);
-                } else {
-                        log_info("Starting D-Bus service...");
-                        manager_start_target(m, SPECIAL_DBUS_SERVICE, JOB_REPLACE);
-                }
+                } else
+                        manager_start_special(m, SPECIAL_DBUS_SERVICE, JOB_REPLACE);
 
                 break;
 
         case SIGUSR2: {
                 _cleanup_free_ char *dump = NULL;
 
-                r = manager_get_dump_string(m, &dump);
+                r = manager_get_dump_string(m, /* patterns= */ NULL, &dump);
                 if (r < 0) {
                         log_warning_errno(errno, "Failed to acquire manager dump: %m");
                         break;
@@ -2784,8 +2872,7 @@
                 if ((int) sfsi.ssi_signo >= SIGRTMIN+0 &&
                     (int) sfsi.ssi_signo < SIGRTMIN+(int) ELEMENTSOF(target_table)) {
                         int idx = (int) sfsi.ssi_signo - SIGRTMIN;
-                        manager_start_target(m, target_table[idx].target,
-                                             target_table[idx].mode);
+                        manager_start_special(m, target_table[idx].target, target_table[idx].mode);
                         break;
                 }
 
@@ -2822,6 +2909,10 @@
                         /* This is a nop on init */
                         break;
 
+                case 25:
+                        m->objective = MANAGER_REEXECUTE;
+                        break;
+
                 case 26:
                 case 29: /* compatibility: used to be mapped to LOG_TARGET_SYSLOG_OR_KMSG */
                         manager_restore_original_log_target(m);
@@ -2844,12 +2935,9 @@
 }
 
 static int manager_dispatch_time_change_fd(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Unit *u;
 
-        assert(m);
-        assert(m->time_change_fd == fd);
-
         log_struct(LOG_DEBUG,
                    "MESSAGE_ID=" SD_MESSAGE_TIME_CHANGE_STR,
                    LOG_MESSAGE("Time has been changed"));
@@ -2869,12 +2957,10 @@
                 const struct inotify_event *e,
                 void *userdata) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int changed;
         Unit *u;
 
-        assert(m);
-
         log_debug("inotify event for /etc/localtime");
 
         changed = manager_read_timezone_stat(m);
@@ -2897,30 +2983,28 @@
 }
 
 static int manager_dispatch_idle_pipe_fd(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(m->idle_pipe[2] == fd);
 
-        /* There's at least one Type=idle child that just gave up on us waiting for the boot process to complete. Let's
-         * now turn off any further console output if there's at least one service that needs console access, so that
-         * from now on our own output should not spill into that service's output anymore. After all, we support
-         * Type=idle only to beautify console output and it generally is set on services that want to own the console
-         * exclusively without our interference. */
+        /* There's at least one Type=idle child that just gave up on us waiting for the boot process to
+         * complete. Let's now turn off any further console output if there's at least one service that needs
+         * console access, so that from now on our own output should not spill into that service's output
+         * anymore. After all, we support Type=idle only to beautify console output and it generally is set
+         * on services that want to own the console exclusively without our interference. */
         m->no_console_output = m->n_on_console > 0;
 
-        /* Acknowledge the child's request, and let all all other children know too that they shouldn't wait any longer
-         * by closing the pipes towards them, which is what they are waiting for. */
+        /* Acknowledge the child's request, and let all other children know too that they shouldn't wait
+         * any longer by closing the pipes towards them, which is what they are waiting for. */
         manager_close_idle_pipe(m);
 
         return 0;
 }
 
 static int manager_dispatch_jobs_in_progress(sd_event_source *source, usec_t usec, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
-        assert(m);
         assert(source);
 
         manager_print_jobs_in_progress(m);
@@ -2947,13 +3031,8 @@
                 return log_error_errno(r, "Failed to enable SIGCHLD event source: %m");
 
         while (m->objective == MANAGER_OK) {
-                usec_t wait_usec, watchdog_usec;
 
-                watchdog_usec = manager_get_watchdog(m, WATCHDOG_RUNTIME);
-                if (m->runtime_watchdog_running)
-                        (void) watchdog_ping();
-                else if (timestamp_is_set(watchdog_usec))
-                        manager_retry_runtime_watchdog(m);
+                (void) watchdog_ping();
 
                 if (!ratelimit_below(&rl)) {
                         /* Yay, something is going seriously wrong, pause a little */
@@ -2989,12 +3068,7 @@
                         continue;
 
                 /* Sleep for watchdog runtime wait time */
-                if (timestamp_is_set(watchdog_usec))
-                        wait_usec = watchdog_runtime_wait();
-                else
-                        wait_usec = USEC_INFINITY;
-
-                r = sd_event_run(m->event, wait_usec);
+                r = sd_event_run(m->event, watchdog_runtime_wait());
                 if (r < 0)
                         return log_error_errno(r, "Failed to run event loop: %m");
         }
@@ -3016,8 +3090,8 @@
         if (r < 0)
                 return r;
 
-        /* Permit addressing units by invocation ID: if the passed bus path is suffixed by a 128bit ID then we use it
-         * as invocation ID. */
+        /* Permit addressing units by invocation ID: if the passed bus path is suffixed by a 128bit ID then
+         * we use it as invocation ID. */
         r = sd_id128_from_string(n, &invocation_id);
         if (r >= 0) {
                 u = hashmap_get(m->units_by_invocation_id, &invocation_id);
@@ -3119,7 +3193,7 @@
 void manager_send_unit_plymouth(Manager *m, Unit *u) {
         static const union sockaddr_union sa = PLYMOUTH_SOCKET;
         _cleanup_free_ char *message = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int n = 0;
 
         /* Don't generate plymouth events if the service was already
@@ -3150,10 +3224,8 @@
                 return;
         }
 
-        if (asprintf(&message, "U\002%c%s%n", (int) (strlen(u->id) + 1), u->id, &n) < 0) {
-                log_oom();
-                return;
-        }
+        if (asprintf(&message, "U\002%c%s%n", (int) (strlen(u->id) + 1), u->id, &n) < 0)
+                return (void) log_oom();
 
         errno = 0;
         if (write(fd, message, n + 1) != n + 1)
@@ -3161,242 +3233,6 @@
                         log_error_errno(errno, "Failed to write Plymouth message: %m");
 }
 
-int manager_open_serialization(Manager *m, FILE **_f) {
-        _cleanup_close_ int fd = -1;
-        FILE *f;
-
-        assert(_f);
-
-        fd = open_serialization_fd("systemd-state");
-        if (fd < 0)
-                return fd;
-
-        f = take_fdopen(&fd, "w+");
-        if (!f)
-                return -errno;
-
-        *_f = f;
-        return 0;
-}
-
-static bool manager_timestamp_shall_serialize(ManagerTimestamp t) {
-
-        if (!in_initrd())
-                return true;
-
-        /* The following timestamps only apply to the host system, hence only serialize them there */
-        return !IN_SET(t,
-                       MANAGER_TIMESTAMP_USERSPACE, MANAGER_TIMESTAMP_FINISH,
-                       MANAGER_TIMESTAMP_SECURITY_START, MANAGER_TIMESTAMP_SECURITY_FINISH,
-                       MANAGER_TIMESTAMP_GENERATORS_START, MANAGER_TIMESTAMP_GENERATORS_FINISH,
-                       MANAGER_TIMESTAMP_UNITS_LOAD_START, MANAGER_TIMESTAMP_UNITS_LOAD_FINISH);
-}
-
-#define DESTROY_IPC_FLAG (UINT32_C(1) << 31)
-
-static void manager_serialize_uid_refs_internal(
-                FILE *f,
-                Hashmap *uid_refs,
-                const char *field_name) {
-
-        void *p, *k;
-
-        assert(f);
-        assert(field_name);
-
-        /* Serialize the UID reference table. Or actually, just the IPC destruction flag of it, as
-         * the actual counter of it is better rebuild after a reload/reexec. */
-
-        HASHMAP_FOREACH_KEY(p, k, uid_refs) {
-                uint32_t c;
-                uid_t uid;
-
-                uid = PTR_TO_UID(k);
-                c = PTR_TO_UINT32(p);
-
-                if (!(c & DESTROY_IPC_FLAG))
-                        continue;
-
-                (void) serialize_item_format(f, field_name, UID_FMT, uid);
-        }
-}
-
-static void manager_serialize_uid_refs(Manager *m, FILE *f) {
-        manager_serialize_uid_refs_internal(f, m->uid_refs, "destroy-ipc-uid");
-}
-
-static void manager_serialize_gid_refs(Manager *m, FILE *f) {
-        manager_serialize_uid_refs_internal(f, m->gid_refs, "destroy-ipc-gid");
-}
-
-int manager_serialize(
-                Manager *m,
-                FILE *f,
-                FDSet *fds,
-                bool switching_root) {
-
-        const char *t;
-        Unit *u;
-        int r;
-
-        assert(m);
-        assert(f);
-        assert(fds);
-
-        _cleanup_(manager_reloading_stopp) _unused_ Manager *reloading = manager_reloading_start(m);
-
-        (void) serialize_item_format(f, "current-job-id", "%" PRIu32, m->current_job_id);
-        (void) serialize_item_format(f, "n-installed-jobs", "%u", m->n_installed_jobs);
-        (void) serialize_item_format(f, "n-failed-jobs", "%u", m->n_failed_jobs);
-        (void) serialize_bool(f, "taint-usr", m->taint_usr);
-        (void) serialize_bool(f, "ready-sent", m->ready_sent);
-        (void) serialize_bool(f, "taint-logged", m->taint_logged);
-        (void) serialize_bool(f, "service-watchdogs", m->service_watchdogs);
-
-        /* After switching root, udevd has not been started yet. So, enumeration results should not be emitted. */
-        (void) serialize_bool(f, "honor-device-enumeration", !switching_root);
-
-        if (m->show_status_overridden != _SHOW_STATUS_INVALID)
-                (void) serialize_item(f, "show-status-overridden",
-                                      show_status_to_string(m->show_status_overridden));
-
-        if (m->log_level_overridden)
-                (void) serialize_item_format(f, "log-level-override", "%i", log_get_max_level());
-        if (m->log_target_overridden)
-                (void) serialize_item(f, "log-target-override", log_target_to_string(log_get_target()));
-
-        (void) serialize_usec(f, "runtime-watchdog-overridden", m->watchdog_overridden[WATCHDOG_RUNTIME]);
-        (void) serialize_usec(f, "reboot-watchdog-overridden", m->watchdog_overridden[WATCHDOG_REBOOT]);
-        (void) serialize_usec(f, "kexec-watchdog-overridden", m->watchdog_overridden[WATCHDOG_KEXEC]);
-
-        for (ManagerTimestamp q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
-                _cleanup_free_ char *joined = NULL;
-
-                if (!manager_timestamp_shall_serialize(q))
-                        continue;
-
-                joined = strjoin(manager_timestamp_to_string(q), "-timestamp");
-                if (!joined)
-                        return log_oom();
-
-                (void) serialize_dual_timestamp(f, joined, m->timestamps + q);
-        }
-
-        if (!switching_root)
-                (void) serialize_strv(f, "env", m->client_environment);
-
-        if (m->notify_fd >= 0) {
-                r = serialize_fd(f, fds, "notify-fd", m->notify_fd);
-                if (r < 0)
-                        return r;
-
-                (void) serialize_item(f, "notify-socket", m->notify_socket);
-        }
-
-        if (m->cgroups_agent_fd >= 0) {
-                r = serialize_fd(f, fds, "cgroups-agent-fd", m->cgroups_agent_fd);
-                if (r < 0)
-                        return r;
-        }
-
-        if (m->user_lookup_fds[0] >= 0) {
-                int copy0, copy1;
-
-                copy0 = fdset_put_dup(fds, m->user_lookup_fds[0]);
-                if (copy0 < 0)
-                        return log_error_errno(copy0, "Failed to add user lookup fd to serialization: %m");
-
-                copy1 = fdset_put_dup(fds, m->user_lookup_fds[1]);
-                if (copy1 < 0)
-                        return log_error_errno(copy1, "Failed to add user lookup fd to serialization: %m");
-
-                (void) serialize_item_format(f, "user-lookup", "%i %i", copy0, copy1);
-        }
-
-        bus_track_serialize(m->subscribed, f, "subscribed");
-
-        r = dynamic_user_serialize(m, f, fds);
-        if (r < 0)
-                return r;
-
-        manager_serialize_uid_refs(m, f);
-        manager_serialize_gid_refs(m, f);
-
-        r = exec_runtime_serialize(m, f, fds);
-        if (r < 0)
-                return r;
-
-        (void) fputc('\n', f);
-
-        HASHMAP_FOREACH_KEY(u, t, m->units) {
-                if (u->id != t)
-                        continue;
-
-                r = unit_serialize(u, f, fds, switching_root);
-                if (r < 0)
-                        return r;
-        }
-
-        r = fflush_and_check(f);
-        if (r < 0)
-                return log_error_errno(r, "Failed to flush serialization: %m");
-
-        r = bus_fdset_add_all(m, fds);
-        if (r < 0)
-                return log_error_errno(r, "Failed to add bus sockets to serialization: %m");
-
-        return 0;
-}
-
-static int manager_deserialize_one_unit(Manager *m, const char *name, FILE *f, FDSet *fds) {
-        Unit *u;
-        int r;
-
-        r = manager_load_unit(m, name, NULL, NULL, &u);
-        if (r < 0) {
-                if (r == -ENOMEM)
-                        return r;
-                return log_notice_errno(r, "Failed to load unit \"%s\", skipping deserialization: %m", name);
-        }
-
-        r = unit_deserialize(u, f, fds);
-        if (r < 0) {
-                if (r == -ENOMEM)
-                        return r;
-                return log_notice_errno(r, "Failed to deserialize unit \"%s\", skipping: %m", name);
-        }
-
-        return 0;
-}
-
-static int manager_deserialize_units(Manager *m, FILE *f, FDSet *fds) {
-        const char *unit_name;
-        int r;
-
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
-                /* Start marker */
-                r = read_line(f, LONG_LINE_MAX, &line);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to read serialization line: %m");
-                if (r == 0)
-                        break;
-
-                unit_name = strstrip(line);
-
-                r = manager_deserialize_one_unit(m, unit_name, f, fds);
-                if (r == -ENOMEM)
-                        return r;
-                if (r < 0) {
-                        r = unit_deserialize_skip(f);
-                        if (r < 0)
-                                return r;
-                }
-        }
-
-        return 0;
-}
-
 usec_t manager_get_watchdog(Manager *m, WatchdogType t) {
         assert(m);
 
@@ -3410,7 +3246,6 @@
 }
 
 void manager_set_watchdog(Manager *m, WatchdogType t, usec_t timeout) {
-        int r = 0;
 
         assert(m);
 
@@ -3420,353 +3255,80 @@
         if (m->watchdog[t] == timeout)
                 return;
 
-        if (t == WATCHDOG_RUNTIME)
-                if (!timestamp_is_set(m->watchdog_overridden[WATCHDOG_RUNTIME])) {
-                        if (timestamp_is_set(timeout)) {
-                                r = watchdog_set_timeout(&timeout);
-
-                                if (r >= 0)
-                                        m->runtime_watchdog_running = true;
-                        } else {
-                                watchdog_close(true);
-                                m->runtime_watchdog_running = false;
-                        }
-                }
+        if (t == WATCHDOG_RUNTIME) {
+                if (!timestamp_is_set(m->watchdog_overridden[WATCHDOG_RUNTIME]))
+                        (void) watchdog_setup(timeout);
+        } else if (t == WATCHDOG_PRETIMEOUT)
+                if (m->watchdog_overridden[WATCHDOG_PRETIMEOUT] == USEC_INFINITY)
+                        (void) watchdog_setup_pretimeout(timeout);
 
         m->watchdog[t] = timeout;
 }
 
-int manager_override_watchdog(Manager *m, WatchdogType t, usec_t timeout) {
-        int r = 0;
+void manager_override_watchdog(Manager *m, WatchdogType t, usec_t timeout) {
+
+        assert(m);
+
+        if (MANAGER_IS_USER(m))
+                return;
+
+        if (m->watchdog_overridden[t] == timeout)
+                return;
+
+        if (t == WATCHDOG_RUNTIME) {
+                usec_t usec = timestamp_is_set(timeout) ? timeout : m->watchdog[t];
+
+                (void) watchdog_setup(usec);
+        } else if (t == WATCHDOG_PRETIMEOUT)
+                (void) watchdog_setup_pretimeout(timeout);
+
+        m->watchdog_overridden[t] = timeout;
+}
+
+int manager_set_watchdog_pretimeout_governor(Manager *m, const char *governor) {
+        _cleanup_free_ char *p = NULL;
+        int r;
 
         assert(m);
 
         if (MANAGER_IS_USER(m))
                 return 0;
 
-        if (m->watchdog_overridden[t] == timeout)
+        if (streq_ptr(m->watchdog_pretimeout_governor, governor))
                 return 0;
 
-        if (t == WATCHDOG_RUNTIME) {
-                usec_t *p;
+        p = strdup(governor);
+        if (!p)
+                return -ENOMEM;
 
-                p = timestamp_is_set(timeout) ? &timeout : &m->watchdog[t];
-                if (timestamp_is_set(*p)) {
-                        r = watchdog_set_timeout(p);
+        r = watchdog_setup_pretimeout_governor(governor);
+        if (r < 0)
+                return r;
 
-                        if (r >= 0)
-                                m->runtime_watchdog_running = true;
-                } else {
-                        watchdog_close(true);
-                        m->runtime_watchdog_running = false;
-                }
-        }
-
-        m->watchdog_overridden[t] = timeout;
-
-        return 0;
+        return free_and_replace(m->watchdog_pretimeout_governor, p);
 }
 
-void manager_retry_runtime_watchdog(Manager *m) {
-        int r = 0;
-
-        assert(m);
-
-        if (timestamp_is_set(m->watchdog_overridden[WATCHDOG_RUNTIME]))
-                r = watchdog_set_timeout(&m->watchdog_overridden[WATCHDOG_RUNTIME]);
-        else
-                r = watchdog_set_timeout(&m->watchdog[WATCHDOG_RUNTIME]);
-
-        if (r >= 0)
-                m->runtime_watchdog_running = true;
-}
-
-static void manager_deserialize_uid_refs_one_internal(
-                Hashmap** uid_refs,
-                const char *value) {
-
-        uid_t uid;
-        uint32_t c;
+int manager_override_watchdog_pretimeout_governor(Manager *m, const char *governor) {
+        _cleanup_free_ char *p = NULL;
         int r;
 
-        assert(uid_refs);
-        assert(value);
-
-        r = parse_uid(value, &uid);
-        if (r < 0 || uid == 0) {
-                log_debug("Unable to parse UID/GID reference serialization: " UID_FMT, uid);
-                return;
-        }
-
-        if (hashmap_ensure_allocated(uid_refs, &trivial_hash_ops) < 0) {
-                log_oom();
-                return;
-        }
-
-        c = PTR_TO_UINT32(hashmap_get(*uid_refs, UID_TO_PTR(uid)));
-        if (c & DESTROY_IPC_FLAG)
-                return;
-
-        c |= DESTROY_IPC_FLAG;
-
-        r = hashmap_replace(*uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c));
-        if (r < 0) {
-                log_debug_errno(r, "Failed to add UID/GID reference entry: %m");
-                return;
-        }
-}
-
-static void manager_deserialize_uid_refs_one(Manager *m, const char *value) {
-        manager_deserialize_uid_refs_one_internal(&m->uid_refs, value);
-}
-
-static void manager_deserialize_gid_refs_one(Manager *m, const char *value) {
-        manager_deserialize_uid_refs_one_internal(&m->gid_refs, value);
-}
-
-int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
-        int r = 0;
-
         assert(m);
-        assert(f);
 
-        if (DEBUG_LOGGING) {
-                if (fdset_isempty(fds))
-                        log_debug("No file descriptors passed");
-                else {
-                        int fd;
+        if (MANAGER_IS_USER(m))
+                return 0;
 
-                        FDSET_FOREACH(fd, fds) {
-                                _cleanup_free_ char *fn = NULL;
+        if (streq_ptr(m->watchdog_pretimeout_governor_overridden, governor))
+                return 0;
 
-                                r = fd_get_path(fd, &fn);
-                                if (r < 0)
-                                        log_debug_errno(r, "Received serialized fd %i → %m", fd);
-                                else
-                                        log_debug("Received serialized fd %i → %s", fd, strna(fn));
-                        }
-                }
-        }
+        p = strdup(governor);
+        if (!p)
+                return -ENOMEM;
 
-        log_debug("Deserializing state...");
+        r = watchdog_setup_pretimeout_governor(governor);
+        if (r < 0)
+                return r;
 
-        /* If we are not in reload mode yet, enter it now. Not that this is recursive, a caller might already have
-         * increased it to non-zero, which is why we just increase it by one here and down again at the end of this
-         * call. */
-        _cleanup_(manager_reloading_stopp) _unused_ Manager *reloading = manager_reloading_start(m);
-
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
-                const char *val, *l;
-
-                r = read_line(f, LONG_LINE_MAX, &line);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to read serialization line: %m");
-                if (r == 0)
-                        break;
-
-                l = strstrip(line);
-                if (isempty(l)) /* end marker */
-                        break;
-
-                if ((val = startswith(l, "current-job-id="))) {
-                        uint32_t id;
-
-                        if (safe_atou32(val, &id) < 0)
-                                log_notice("Failed to parse current job id value '%s', ignoring.", val);
-                        else
-                                m->current_job_id = MAX(m->current_job_id, id);
-
-                } else if ((val = startswith(l, "n-installed-jobs="))) {
-                        uint32_t n;
-
-                        if (safe_atou32(val, &n) < 0)
-                                log_notice("Failed to parse installed jobs counter '%s', ignoring.", val);
-                        else
-                                m->n_installed_jobs += n;
-
-                } else if ((val = startswith(l, "n-failed-jobs="))) {
-                        uint32_t n;
-
-                        if (safe_atou32(val, &n) < 0)
-                                log_notice("Failed to parse failed jobs counter '%s', ignoring.", val);
-                        else
-                                m->n_failed_jobs += n;
-
-                } else if ((val = startswith(l, "taint-usr="))) {
-                        int b;
-
-                        b = parse_boolean(val);
-                        if (b < 0)
-                                log_notice("Failed to parse taint /usr flag '%s', ignoring.", val);
-                        else
-                                m->taint_usr = m->taint_usr || b;
-
-                } else if ((val = startswith(l, "ready-sent="))) {
-                        int b;
-
-                        b = parse_boolean(val);
-                        if (b < 0)
-                                log_notice("Failed to parse ready-sent flag '%s', ignoring.", val);
-                        else
-                                m->ready_sent = m->ready_sent || b;
-
-                } else if ((val = startswith(l, "taint-logged="))) {
-                        int b;
-
-                        b = parse_boolean(val);
-                        if (b < 0)
-                                log_notice("Failed to parse taint-logged flag '%s', ignoring.", val);
-                        else
-                                m->taint_logged = m->taint_logged || b;
-
-                } else if ((val = startswith(l, "service-watchdogs="))) {
-                        int b;
-
-                        b = parse_boolean(val);
-                        if (b < 0)
-                                log_notice("Failed to parse service-watchdogs flag '%s', ignoring.", val);
-                        else
-                                m->service_watchdogs = b;
-
-                } else if ((val = startswith(l, "honor-device-enumeration="))) {
-                        int b;
-
-                        b = parse_boolean(val);
-                        if (b < 0)
-                                log_notice("Failed to parse honor-device-enumeration flag '%s', ignoring.", val);
-                        else
-                                m->honor_device_enumeration = b;
-
-                } else if ((val = startswith(l, "show-status-overridden="))) {
-                        ShowStatus s;
-
-                        s = show_status_from_string(val);
-                        if (s < 0)
-                                log_notice("Failed to parse show-status-overridden flag '%s', ignoring.", val);
-                        else
-                                manager_override_show_status(m, s, "deserialize");
-
-                } else if ((val = startswith(l, "log-level-override="))) {
-                        int level;
-
-                        level = log_level_from_string(val);
-                        if (level < 0)
-                                log_notice("Failed to parse log-level-override value '%s', ignoring.", val);
-                        else
-                                manager_override_log_level(m, level);
-
-                } else if ((val = startswith(l, "log-target-override="))) {
-                        LogTarget target;
-
-                        target = log_target_from_string(val);
-                        if (target < 0)
-                                log_notice("Failed to parse log-target-override value '%s', ignoring.", val);
-                        else
-                                manager_override_log_target(m, target);
-
-                } else if ((val = startswith(l, "runtime-watchdog-overridden="))) {
-                        usec_t t;
-
-                        if (deserialize_usec(val, &t) < 0)
-                                log_notice("Failed to parse runtime-watchdog-overridden value '%s', ignoring.", val);
-                        else
-                                manager_override_watchdog(m, WATCHDOG_RUNTIME, t);
-
-                } else if ((val = startswith(l, "reboot-watchdog-overridden="))) {
-                        usec_t t;
-
-                        if (deserialize_usec(val, &t) < 0)
-                                log_notice("Failed to parse reboot-watchdog-overridden value '%s', ignoring.", val);
-                        else
-                                manager_override_watchdog(m, WATCHDOG_REBOOT, t);
-
-                } else if ((val = startswith(l, "kexec-watchdog-overridden="))) {
-                        usec_t t;
-
-                        if (deserialize_usec(val, &t) < 0)
-                                log_notice("Failed to parse kexec-watchdog-overridden value '%s', ignoring.", val);
-                        else
-                                manager_override_watchdog(m, WATCHDOG_KEXEC, t);
-
-                } else if (startswith(l, "env=")) {
-                        r = deserialize_environment(l + 4, &m->client_environment);
-                        if (r < 0)
-                                log_notice_errno(r, "Failed to parse environment entry: \"%s\", ignoring: %m", l);
-
-                } else if ((val = startswith(l, "notify-fd="))) {
-                        int fd;
-
-                        if (safe_atoi(val, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
-                                log_notice("Failed to parse notify fd, ignoring: \"%s\"", val);
-                        else {
-                                m->notify_event_source = sd_event_source_disable_unref(m->notify_event_source);
-                                safe_close(m->notify_fd);
-                                m->notify_fd = fdset_remove(fds, fd);
-                        }
-
-                } else if ((val = startswith(l, "notify-socket="))) {
-                        r = free_and_strdup(&m->notify_socket, val);
-                        if (r < 0)
-                                return r;
-
-                } else if ((val = startswith(l, "cgroups-agent-fd="))) {
-                        int fd;
-
-                        if (safe_atoi(val, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
-                                log_notice("Failed to parse cgroups agent fd, ignoring.: %s", val);
-                        else {
-                                m->cgroups_agent_event_source = sd_event_source_disable_unref(m->cgroups_agent_event_source);
-                                safe_close(m->cgroups_agent_fd);
-                                m->cgroups_agent_fd = fdset_remove(fds, fd);
-                        }
-
-                } else if ((val = startswith(l, "user-lookup="))) {
-                        int fd0, fd1;
-
-                        if (sscanf(val, "%i %i", &fd0, &fd1) != 2 || fd0 < 0 || fd1 < 0 || fd0 == fd1 || !fdset_contains(fds, fd0) || !fdset_contains(fds, fd1))
-                                log_notice("Failed to parse user lookup fd, ignoring: %s", val);
-                        else {
-                                m->user_lookup_event_source = sd_event_source_disable_unref(m->user_lookup_event_source);
-                                safe_close_pair(m->user_lookup_fds);
-                                m->user_lookup_fds[0] = fdset_remove(fds, fd0);
-                                m->user_lookup_fds[1] = fdset_remove(fds, fd1);
-                        }
-
-                } else if ((val = startswith(l, "dynamic-user=")))
-                        dynamic_user_deserialize_one(m, val, fds);
-                else if ((val = startswith(l, "destroy-ipc-uid=")))
-                        manager_deserialize_uid_refs_one(m, val);
-                else if ((val = startswith(l, "destroy-ipc-gid=")))
-                        manager_deserialize_gid_refs_one(m, val);
-                else if ((val = startswith(l, "exec-runtime=")))
-                        (void) exec_runtime_deserialize_one(m, val, fds);
-                else if ((val = startswith(l, "subscribed="))) {
-
-                        if (strv_extend(&m->deserialized_subscribed, val) < 0)
-                                return -ENOMEM;
-
-                } else {
-                        ManagerTimestamp q;
-
-                        for (q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
-                                val = startswith(l, manager_timestamp_to_string(q));
-                                if (!val)
-                                        continue;
-
-                                val = startswith(val, "-timestamp=");
-                                if (val)
-                                        break;
-                        }
-
-                        if (q < _MANAGER_TIMESTAMP_MAX) /* found it */
-                                (void) deserialize_dual_timestamp(val, m->timestamps + q);
-                        else if (!startswith(l, "kdbus-fd=")) /* ignore kdbus */
-                                log_notice("Unknown serialization item '%s', ignoring.", l);
-                }
-        }
-
-        return manager_deserialize_units(m, f, fds);
+        return free_and_replace(m->watchdog_pretimeout_governor_overridden, p);
 }
 
 int manager_reload(Manager *m) {
@@ -3812,9 +3374,9 @@
         m->uid_refs = hashmap_free(m->uid_refs);
         m->gid_refs = hashmap_free(m->gid_refs);
 
-        r = lookup_paths_init(&m->lookup_paths, m->unit_file_scope, 0, NULL);
+        r = lookup_paths_init_or_warn(&m->lookup_paths, m->unit_file_scope, 0, NULL);
         if (r < 0)
-                log_warning_errno(r, "Failed to initialize path lookup table, ignoring: %m");
+                return r;
 
         (void) manager_run_environment_generators(m);
         (void) manager_run_generators(m);
@@ -3854,11 +3416,6 @@
         assert(m->n_reloading > 0);
         m->n_reloading--;
 
-        /* On manager reloading, device tag data should exists, thus, we should honor the results of device
-         * enumeration. The flag should be always set correctly by the serialized data, but it may fail. So,
-         * let's always set the flag here for safety. */
-        m->honor_device_enumeration = true;
-
         manager_ready(m);
 
         m->send_reloading_done = true;
@@ -3909,14 +3466,12 @@
 }
 
 static void manager_notify_finished(Manager *m) {
-        char userspace[FORMAT_TIMESPAN_MAX], initrd[FORMAT_TIMESPAN_MAX], kernel[FORMAT_TIMESPAN_MAX], sum[FORMAT_TIMESPAN_MAX];
         usec_t firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec;
 
         if (MANAGER_IS_TEST_RUN(m))
                 return;
 
         if (MANAGER_IS_SYSTEM(m) && detect_container() <= 0) {
-                char ts[FORMAT_TIMESPAN_MAX];
                 char buf[FORMAT_TIMESPAN_MAX + STRLEN(" (firmware) + ") + FORMAT_TIMESPAN_MAX + STRLEN(" (loader) + ")]
                         = {};
                 char *p = buf;
@@ -3932,9 +3487,9 @@
                 total_usec = m->timestamps[MANAGER_TIMESTAMP_FIRMWARE].monotonic + m->timestamps[MANAGER_TIMESTAMP_FINISH].monotonic;
 
                 if (firmware_usec > 0)
-                        size = strpcpyf(&p, size, "%s (firmware) + ", format_timespan(ts, sizeof(ts), firmware_usec, USEC_PER_MSEC));
+                        size = strpcpyf(&p, size, "%s (firmware) + ", FORMAT_TIMESPAN(firmware_usec, USEC_PER_MSEC));
                 if (loader_usec > 0)
-                        size = strpcpyf(&p, size, "%s (loader) + ", format_timespan(ts, sizeof(ts), loader_usec, USEC_PER_MSEC));
+                        size = strpcpyf(&p, size, "%s (loader) + ", FORMAT_TIMESPAN(loader_usec, USEC_PER_MSEC));
 
                 if (dual_timestamp_is_set(&m->timestamps[MANAGER_TIMESTAMP_INITRD])) {
 
@@ -3949,10 +3504,10 @@
                                    "USERSPACE_USEC="USEC_FMT, userspace_usec,
                                    LOG_MESSAGE("Startup finished in %s%s (kernel) + %s (initrd) + %s (userspace) = %s.",
                                                buf,
-                                               format_timespan(kernel, sizeof(kernel), kernel_usec, USEC_PER_MSEC),
-                                               format_timespan(initrd, sizeof(initrd), initrd_usec, USEC_PER_MSEC),
-                                               format_timespan(userspace, sizeof(userspace), userspace_usec, USEC_PER_MSEC),
-                                               format_timespan(sum, sizeof(sum), total_usec, USEC_PER_MSEC)));
+                                               FORMAT_TIMESPAN(kernel_usec, USEC_PER_MSEC),
+                                               FORMAT_TIMESPAN(initrd_usec, USEC_PER_MSEC),
+                                               FORMAT_TIMESPAN(userspace_usec, USEC_PER_MSEC),
+                                               FORMAT_TIMESPAN(total_usec, USEC_PER_MSEC)));
                 } else {
                         /* The initrd-less case on bare-metal */
 
@@ -3965,9 +3520,9 @@
                                    "USERSPACE_USEC="USEC_FMT, userspace_usec,
                                    LOG_MESSAGE("Startup finished in %s%s (kernel) + %s (userspace) = %s.",
                                                buf,
-                                               format_timespan(kernel, sizeof(kernel), kernel_usec, USEC_PER_MSEC),
-                                               format_timespan(userspace, sizeof(userspace), userspace_usec, USEC_PER_MSEC),
-                                               format_timespan(sum, sizeof(sum), total_usec, USEC_PER_MSEC)));
+                                               FORMAT_TIMESPAN(kernel_usec, USEC_PER_MSEC),
+                                               FORMAT_TIMESPAN(userspace_usec, USEC_PER_MSEC),
+                                               FORMAT_TIMESPAN(total_usec, USEC_PER_MSEC)));
                 }
         } else {
                 /* The container and --user case */
@@ -3978,33 +3533,48 @@
                            "MESSAGE_ID=" SD_MESSAGE_USER_STARTUP_FINISHED_STR,
                            "USERSPACE_USEC="USEC_FMT, userspace_usec,
                            LOG_MESSAGE("Startup finished in %s.",
-                                       format_timespan(sum, sizeof(sum), total_usec, USEC_PER_MSEC)));
+                                       FORMAT_TIMESPAN(total_usec, USEC_PER_MSEC)));
         }
 
         bus_manager_send_finished(m, firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec);
 
-        sd_notifyf(false,
-                   m->ready_sent ? "STATUS=Startup finished in %s."
-                                 : "READY=1\n"
-                                   "STATUS=Startup finished in %s.",
-                   format_timespan(sum, sizeof(sum), total_usec, USEC_PER_MSEC));
-        m->ready_sent = true;
-
         log_taint_string(m);
 }
 
-static void manager_send_ready(Manager *m) {
+static void user_manager_send_ready(Manager *m) {
+        int r;
+
         assert(m);
 
         /* We send READY=1 on reaching basic.target only when running in --user mode. */
         if (!MANAGER_IS_USER(m) || m->ready_sent)
                 return;
 
-        m->ready_sent = true;
+        r = sd_notify(false,
+                      "READY=1\n"
+                      "STATUS=Reached " SPECIAL_BASIC_TARGET ".");
+        if (r < 0)
+                log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
 
-        sd_notifyf(false,
-                   "READY=1\n"
-                   "STATUS=Reached " SPECIAL_BASIC_TARGET ".");
+        m->ready_sent = true;
+        m->status_ready = false;
+}
+
+static void manager_send_ready(Manager *m) {
+        int r;
+
+        if (m->ready_sent && m->status_ready)
+                /* Skip the notification if nothing changed. */
+                return;
+
+        r = sd_notify(false,
+                      "READY=1\n"
+                      "STATUS=Ready.");
+        if (r < 0)
+                log_full_errno(m->ready_sent ? LOG_DEBUG : LOG_WARNING, r,
+                               "Failed to send readiness notification, ignoring: %m");
+
+        m->ready_sent = m->status_ready = true;
 }
 
 static void manager_check_basic_target(Manager *m) {
@@ -4021,7 +3591,7 @@
                 return;
 
         /* For user managers, send out READY=1 as soon as we reach basic.target */
-        manager_send_ready(m);
+        user_manager_send_ready(m);
 
         /* Log the taint string as soon as we reach basic.target */
         log_taint_string(m);
@@ -4052,11 +3622,16 @@
         if (hashmap_buckets(m->jobs) > hashmap_size(m->units) / 10)
                 m->jobs = hashmap_free(m->jobs);
 
-        manager_flip_auto_status(m, false, "boot finished");
+        manager_send_ready(m);
 
         /* Notify Type=idle units that we are done now */
         manager_close_idle_pipe(m);
 
+        if (MANAGER_IS_FINISHED(m))
+                return;
+
+        manager_flip_auto_status(m, false, "boot finished");
+
         /* Turn off confirm spawn now */
         m->confirm_spawn = NULL;
 
@@ -4066,9 +3641,6 @@
         /* This is no longer the first boot */
         manager_set_first_boot(m, false);
 
-        if (MANAGER_IS_FINISHED(m))
-                return;
-
         dual_timestamp_get(m->timestamps + MANAGER_TIMESTAMP_FINISH);
 
         manager_notify_finished(m);
@@ -4076,13 +3648,24 @@
         manager_invalidate_startup_units(m);
 }
 
+void manager_send_reloading(Manager *m) {
+        assert(m);
+
+        /* Let whoever invoked us know that we are now reloading */
+        (void) sd_notifyf(/* unset= */ false,
+                          "RELOADING=1\n"
+                          "MONOTONIC_USEC=" USEC_FMT "\n", now(CLOCK_MONOTONIC));
+
+        /* And ensure that we'll send READY=1 again as soon as we are ready again */
+        m->ready_sent = false;
+}
+
 static bool generator_path_any(const char* const* paths) {
-        char **path;
         bool found = false;
 
         /* Optimize by skipping the whole process by not creating output directories
          * if no generators are found. */
-        STRV_FOREACH(path, (char**) paths)
+        STRV_FOREACH(path, paths)
                 if (access(*path, F_OK) == 0)
                         found = true;
                 else if (errno != ENOENT)
@@ -4111,16 +3694,111 @@
         if (!generator_path_any((const char* const*) paths))
                 return 0;
 
-        RUN_WITH_UMASK(0022)
+        WITH_UMASK(0022)
                 r = execute_directories((const char* const*) paths, DEFAULT_TIMEOUT_USEC, gather_environment,
                                         args, NULL, m->transient_environment,
                                         EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS | EXEC_DIR_SET_SYSTEMD_EXEC_PID);
         return r;
 }
 
+static int build_generator_environment(Manager *m, char ***ret) {
+        _cleanup_strv_free_ char **nl = NULL;
+        Virtualization v;
+        int r;
+
+        assert(m);
+        assert(ret);
+
+        /* Generators oftentimes want to know some basic facts about the environment they run in, in order to
+         * adjust generated units to that. Let's pass down some bits of information that are easy for us to
+         * determine (but a bit harder for generator scripts to determine), as environment variables. */
+
+        nl = strv_copy(m->transient_environment);
+        if (!nl)
+                return -ENOMEM;
+
+        r = strv_env_assign(&nl, "SYSTEMD_SCOPE", MANAGER_IS_SYSTEM(m) ? "system" : "user");
+        if (r < 0)
+                return r;
+
+        if (MANAGER_IS_SYSTEM(m)) {
+                /* Note that $SYSTEMD_IN_INITRD may be used to override the initrd detection in much of our
+                 * codebase. This is hence more than purely informational. It will shortcut detection of the
+                 * initrd state if generators invoke our own tools. But that's OK, as it would come to the
+                 * same results (hopefully). */
+                r = strv_env_assign(&nl, "SYSTEMD_IN_INITRD", one_zero(in_initrd()));
+                if (r < 0)
+                        return r;
+
+                if (m->first_boot >= 0) {
+                        r = strv_env_assign(&nl, "SYSTEMD_FIRST_BOOT", one_zero(m->first_boot));
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        v = detect_virtualization();
+        if (v < 0)
+                log_debug_errno(v, "Failed to detect virtualization, ignoring: %m");
+        else if (v > 0) {
+                const char *s;
+
+                s = strjoina(VIRTUALIZATION_IS_VM(v) ? "vm:" :
+                             VIRTUALIZATION_IS_CONTAINER(v) ? "container:" : ":",
+                             virtualization_to_string(v));
+
+                r = strv_env_assign(&nl, "SYSTEMD_VIRTUALIZATION", s);
+                if (r < 0)
+                        return r;
+        }
+
+        r = strv_env_assign(&nl, "SYSTEMD_ARCHITECTURE", architecture_to_string(uname_architecture()));
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(nl);
+        return 0;
+}
+
+static int manager_execute_generators(Manager *m, char **paths, bool remount_ro) {
+        _cleanup_strv_free_ char **ge = NULL;
+        const char *argv[] = {
+                NULL, /* Leave this empty, execute_directory() will fill something in */
+                m->lookup_paths.generator,
+                m->lookup_paths.generator_early,
+                m->lookup_paths.generator_late,
+                NULL,
+        };
+        int r;
+
+        r = build_generator_environment(m, &ge);
+        if (r < 0)
+                return log_error_errno(r, "Failed to build generator environment: %m");
+
+        if (remount_ro) {
+                /* Remount most of the filesystem tree read-only. We leave /sys/ as-is, because our code
+                 * checks whether it is read-only to detect containerized execution environments. We leave
+                 * /run/ as-is too, because that's where our output goes. We also leave /proc/ and /dev/shm/
+                 * because they're API, and /tmp/ that safe_fork() mounted for us.
+                 */
+                r = bind_remount_recursive("/", MS_RDONLY, MS_RDONLY,
+                                           STRV_MAKE("/sys", "/run", "/proc", "/dev/shm", "/tmp"));
+                if (r < 0)
+                        log_warning_errno(r, "Read-only bind remount failed, ignoring: %m");
+        }
+
+        BLOCK_WITH_UMASK(0022);
+        return execute_directories(
+                        (const char* const*) paths,
+                        DEFAULT_TIMEOUT_USEC,
+                        /* callbacks= */ NULL, /* callback_args= */ NULL,
+                        (char**) argv,
+                        ge,
+                        EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS | EXEC_DIR_SET_SYSTEMD_EXEC_PID);
+}
+
 static int manager_run_generators(Manager *m) {
         _cleanup_strv_free_ char **paths = NULL;
-        const char *argv[5];
         int r;
 
         assert(m);
@@ -4141,18 +3819,35 @@
                 goto finish;
         }
 
-        argv[0] = NULL; /* Leave this empty, execute_directory() will fill something in */
-        argv[1] = m->lookup_paths.generator;
-        argv[2] = m->lookup_paths.generator_early;
-        argv[3] = m->lookup_paths.generator_late;
-        argv[4] = NULL;
+        /* If we are the system manager, we fork and invoke the generators in a sanitized mount namespace. If
+         * we are the user manager, let's just execute the generators directly. We might not have the
+         * necessary privileges, and the system manager has already mounted /tmp/ and everything else for us.
+         */
+        if (MANAGER_IS_USER(m)) {
+                r = manager_execute_generators(m, paths, /* remount_ro= */ false);
+                goto finish;
+        }
 
-        RUN_WITH_UMASK(0022)
-                (void) execute_directories((const char* const*) paths, DEFAULT_TIMEOUT_USEC, NULL, NULL,
-                                           (char**) argv, m->transient_environment,
-                                           EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS | EXEC_DIR_SET_SYSTEMD_EXEC_PID);
+        r = safe_fork("(sd-gens)",
+                      FORK_RESET_SIGNALS | FORK_WAIT | FORK_NEW_MOUNTNS | FORK_MOUNTNS_SLAVE | FORK_PRIVATE_TMP,
+                      NULL);
+        if (r == 0) {
+                r = manager_execute_generators(m, paths, /* remount_ro= */ true);
+                _exit(r >= 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+        }
+        if (r < 0) {
+                if (!ERRNO_IS_PRIVILEGE(r)) {
+                        log_error_errno(r, "Failed to fork off sandboxing environment for executing generators: %m");
+                        goto finish;
+                }
 
-        r = 0;
+                /* Failed to fork with new mount namespace? Maybe, running in a container environment with
+                 * seccomp or without capability. */
+                log_debug_errno(r,
+                                "Failed to fork off sandboxing environment for executing generators. "
+                                "Falling back to execute generators without sandboxing: %m");
+                r = manager_execute_generators(m, paths, /* remount_ro= */ false);
+        }
 
 finish:
         lookup_paths_trim_generator(&m->lookup_paths);
@@ -4167,7 +3862,7 @@
         if (strv_isempty(plus))
                 return 0;
 
-        a = strv_env_merge(2, m->transient_environment, plus);
+        a = strv_env_merge(m->transient_environment, plus);
         if (!a)
                 return log_oom();
 
@@ -4199,7 +3894,7 @@
         }
 
         if (!strv_isempty(plus)) {
-                b = strv_env_merge(2, l, plus);
+                b = strv_env_merge(l, plus);
                 if (!b) {
                         strv_free(a);
                         return -ENOMEM;
@@ -4226,7 +3921,7 @@
         assert(m);
         assert(ret);
 
-        l = strv_env_merge(2, m->transient_environment, m->client_environment);
+        l = strv_env_merge(m->transient_environment, m->client_environment);
         if (!l)
                 return -ENOMEM;
 
@@ -4234,6 +3929,19 @@
         return 0;
 }
 
+int manager_set_default_smack_process_label(Manager *m, const char *label) {
+        assert(m);
+
+#ifdef SMACK_DEFAULT_PROCESS_LABEL
+        if (!label)
+                return free_and_strdup(&m->default_smack_process_label, SMACK_DEFAULT_PROCESS_LABEL);
+#endif
+        if (streq_ptr(label, "/"))
+                return free_and_strdup(&m->default_smack_process_label, NULL);
+
+        return free_and_strdup(&m->default_smack_process_label, label);
+}
+
 int manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit) {
         assert(m);
 
@@ -4254,10 +3962,10 @@
 void manager_recheck_dbus(Manager *m) {
         assert(m);
 
-        /* Connects to the bus if the dbus service and socket are running. If we are running in user mode this is all
-         * it does. In system mode we'll also connect to the system bus (which will most likely just reuse the
-         * connection of the API bus). That's because the system bus after all runs as service of the system instance,
-         * while in the user instance we can assume it's already there. */
+        /* Connects to the bus if the dbus service and socket are running. If we are running in user mode
+         * this is all it does. In system mode we'll also connect to the system bus (which will most likely
+         * just reuse the connection of the API bus). That's because the system bus after all runs as service
+         * of the system instance, while in the user instance we can assume it's already there. */
 
         if (MANAGER_IS_RELOADING(m))
                 return; /* don't check while we are reloading… */
@@ -4329,9 +4037,9 @@
         if (MANAGER_IS_RELOADING(m))
                 return;
 
-        /* The journal is fully and entirely up? If so, let's permit logging to it, if that's configured. If the
-         * journal is down, don't ever log to it, otherwise we might end up deadlocking ourselves as we might trigger
-         * an activation ourselves we can't fulfill. */
+        /* The journal is fully and entirely up? If so, let's permit logging to it, if that's configured. If
+         * the journal is down, don't ever log to it, otherwise we might end up deadlocking ourselves as we
+         * might trigger an activation ourselves we can't fulfill. */
         log_set_prohibit_ipc(!manager_journal_is_running(m));
         log_open();
 }
@@ -4603,13 +4311,14 @@
         assert(uid_is_valid(uid));
         assert(_clean_ipc);
 
-        /* A generic implementation, covering both manager_unref_uid() and manager_unref_gid(), under the assumption
-         * that uid_t and gid_t are actually defined the same way, with the same validity rules.
+        /* A generic implementation, covering both manager_unref_uid() and manager_unref_gid(), under the
+         * assumption that uid_t and gid_t are actually defined the same way, with the same validity rules.
          *
-         * We store a hashmap where the UID/GID is they key and the value is a 32bit reference counter, whose highest
-         * bit is used as flag for marking UIDs/GIDs whose IPC objects to remove when the last reference to the UID/GID
-         * is dropped. The flag is set to on, once at least one reference from a unit where RemoveIPC= is set is added
-         * on a UID/GID. It is reset when the UID's/GID's reference counter drops to 0 again. */
+         * We store a hashmap where the key is the UID/GID and the value is a 32bit reference counter, whose
+         * highest bit is used as flag for marking UIDs/GIDs whose IPC objects to remove when the last
+         * reference to the UID/GID is dropped. The flag is set to on, once at least one reference from a
+         * unit where RemoveIPC= is set is added on a UID/GID. It is reset when the UID's/GID's reference
+         * counter drops to 0 again. */
 
         assert_cc(sizeof(uid_t) == sizeof(gid_t));
         assert_cc(UID_INVALID == (uid_t) GID_INVALID);
@@ -4657,8 +4366,9 @@
         assert(uid_refs);
         assert(uid_is_valid(uid));
 
-        /* A generic implementation, covering both manager_ref_uid() and manager_ref_gid(), under the assumption
-         * that uid_t and gid_t are actually defined the same way, with the same validity rules. */
+        /* A generic implementation, covering both manager_ref_uid() and manager_ref_gid(), under the
+         * assumption that uid_t and gid_t are actually defined the same way, with the same validity
+         * rules. */
 
         assert_cc(sizeof(uid_t) == sizeof(gid_t));
         assert_cc(UID_INVALID == (uid_t) GID_INVALID);
@@ -4758,13 +4468,14 @@
         assert_se(source);
         assert_se(m);
 
-        /* Invoked whenever a child process succeeded resolving its user/group to use and sent us the resulting UID/GID
-         * in a datagram. We parse the datagram here and pass it off to the unit, so that it can add a reference to the
-         * UID/GID so that it can destroy the UID/GID's IPC objects when the reference counter drops to 0. */
+        /* Invoked whenever a child process succeeded resolving its user/group to use and sent us the
+         * resulting UID/GID in a datagram. We parse the datagram here and pass it off to the unit, so that
+         * it can add a reference to the UID/GID so that it can destroy the UID/GID's IPC objects when the
+         * reference counter drops to 0. */
 
         l = recv(fd, &buffer, sizeof(buffer), MSG_DONTWAIT);
         if (l < 0) {
-                if (IN_SET(errno, EINTR, EAGAIN))
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
                 return log_error_errno(errno, "Failed to read from user lookup fd: %m");
@@ -4804,60 +4515,80 @@
         return 0;
 }
 
-char *manager_taint_string(Manager *m) {
-        _cleanup_free_ char *destination = NULL, *overflowuid = NULL, *overflowgid = NULL;
-        char *buf, *e;
+static int short_uid_range(const char *path) {
+        _cleanup_(uid_range_freep) UidRange *p = NULL;
         int r;
 
-        /* Returns a "taint string", e.g. "local-hwclock:var-run-bad".
-         * Only things that are detected at runtime should be tagged
-         * here. For stuff that is set during compilation, emit a warning
-         * in the configuration phase. */
+        assert(path);
+
+        /* Taint systemd if we the UID range assigned to this environment doesn't at least cover 0…65534,
+         * i.e. from root to nobody. */
+
+        r = uid_range_load_userns(&p, path);
+        if (r < 0) {
+                if (ERRNO_IS_NOT_SUPPORTED(r))
+                        return false;
+                return log_debug_errno(r, "Failed to load %s: %m", path);
+        }
+
+        return !uid_range_covers(p, 0, 65535);
+}
+
+char* manager_taint_string(const Manager *m) {
+        /* Returns a "taint string", e.g. "local-hwclock:var-run-bad". Only things that are detected at
+         * runtime should be tagged here. For stuff that is known during compilation, emit a warning in the
+         * configuration phase. */
 
         assert(m);
 
-        buf = new(char, sizeof("split-usr:"
-                               "cgroups-missing:"
-                               "cgrousv1:"
-                               "local-hwclock:"
-                               "var-run-bad:"
-                               "overflowuid-not-65534:"
-                               "overflowgid-not-65534:"));
-        if (!buf)
-                return NULL;
-
-        e = buf;
-        buf[0] = 0;
+        const char* stage[13] = {};
+        size_t n = 0;
 
         if (m->taint_usr)
-                e = stpcpy(e, "split-usr:");
+                stage[n++] = "split-usr";
+
+        _cleanup_free_ char *usrbin = NULL;
+        if (readlink_malloc("/bin", &usrbin) < 0 || !PATH_IN_SET(usrbin, "usr/bin", "/usr/bin"))
+                stage[n++] = "unmerged-usr";
 
         if (access("/proc/cgroups", F_OK) < 0)
-                e = stpcpy(e, "cgroups-missing:");
+                stage[n++] = "cgroups-missing";
 
         if (cg_all_unified() == 0)
-                e = stpcpy(e, "cgroupsv1:");
+                stage[n++] = "cgroupsv1";
 
         if (clock_is_localtime(NULL) > 0)
-                e = stpcpy(e, "local-hwclock:");
+                stage[n++] = "local-hwclock";
 
-        r = readlink_malloc("/var/run", &destination);
-        if (r < 0 || !PATH_IN_SET(destination, "../run", "/run"))
-                e = stpcpy(e, "var-run-bad:");
+        if (os_release_support_ended(NULL, /* quiet= */ true, NULL) > 0)
+                stage[n++] = "support-ended";
 
-        r = read_one_line_file("/proc/sys/kernel/overflowuid", &overflowuid);
-        if (r >= 0 && !streq(overflowuid, "65534"))
-                e = stpcpy(e, "overflowuid-not-65534:");
+        _cleanup_free_ char *destination = NULL;
+        if (readlink_malloc("/var/run", &destination) < 0 ||
+            !PATH_IN_SET(destination, "../run", "/run"))
+                stage[n++] = "var-run-bad";
 
-        r = read_one_line_file("/proc/sys/kernel/overflowgid", &overflowgid);
-        if (r >= 0 && !streq(overflowgid, "65534"))
-                e = stpcpy(e, "overflowgid-not-65534:");
+        _cleanup_free_ char *overflowuid = NULL, *overflowgid = NULL;
+        if (read_one_line_file("/proc/sys/kernel/overflowuid", &overflowuid) >= 0 &&
+            !streq(overflowuid, "65534"))
+                stage[n++] = "overflowuid-not-65534";
+        if (read_one_line_file("/proc/sys/kernel/overflowgid", &overflowgid) >= 0 &&
+            !streq(overflowgid, "65534"))
+                stage[n++] = "overflowgid-not-65534";
 
-        /* remove the last ':' */
-        if (e != buf)
-                e[-1] = 0;
+        struct utsname uts;
+        assert_se(uname(&uts) >= 0);
+        if (strverscmp_improved(uts.release, KERNEL_BASELINE_VERSION) < 0)
+                stage[n++] = "old-kernel";
 
-        return buf;
+        if (short_uid_range("/proc/self/uid_map") > 0)
+                stage[n++] = "short-uid-range";
+        if (short_uid_range("/proc/self/gid_map") > 0)
+                stage[n++] = "short-gid-range";
+
+        assert(n < ELEMENTSOF(stage) - 1);  /* One extra for NULL terminator */
+
+        return strv_join((char**) stage, ":");
 }
 
 void manager_ref_console(Manager *m) {
@@ -4938,33 +4669,34 @@
 
 static const char *const manager_state_table[_MANAGER_STATE_MAX] = {
         [MANAGER_INITIALIZING] = "initializing",
-        [MANAGER_STARTING] = "starting",
-        [MANAGER_RUNNING] = "running",
-        [MANAGER_DEGRADED] = "degraded",
-        [MANAGER_MAINTENANCE] = "maintenance",
-        [MANAGER_STOPPING] = "stopping",
+        [MANAGER_STARTING]     = "starting",
+        [MANAGER_RUNNING]      = "running",
+        [MANAGER_DEGRADED]     = "degraded",
+        [MANAGER_MAINTENANCE]  = "maintenance",
+        [MANAGER_STOPPING]     = "stopping",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(manager_state, ManagerState);
 
 static const char *const manager_timestamp_table[_MANAGER_TIMESTAMP_MAX] = {
-        [MANAGER_TIMESTAMP_FIRMWARE] = "firmware",
-        [MANAGER_TIMESTAMP_LOADER] = "loader",
-        [MANAGER_TIMESTAMP_KERNEL] = "kernel",
-        [MANAGER_TIMESTAMP_INITRD] = "initrd",
-        [MANAGER_TIMESTAMP_USERSPACE] = "userspace",
-        [MANAGER_TIMESTAMP_FINISH] = "finish",
-        [MANAGER_TIMESTAMP_SECURITY_START] = "security-start",
-        [MANAGER_TIMESTAMP_SECURITY_FINISH] = "security-finish",
-        [MANAGER_TIMESTAMP_GENERATORS_START] = "generators-start",
-        [MANAGER_TIMESTAMP_GENERATORS_FINISH] = "generators-finish",
-        [MANAGER_TIMESTAMP_UNITS_LOAD_START] = "units-load-start",
-        [MANAGER_TIMESTAMP_UNITS_LOAD_FINISH] = "units-load-finish",
-        [MANAGER_TIMESTAMP_INITRD_SECURITY_START] = "initrd-security-start",
-        [MANAGER_TIMESTAMP_INITRD_SECURITY_FINISH] = "initrd-security-finish",
-        [MANAGER_TIMESTAMP_INITRD_GENERATORS_START] = "initrd-generators-start",
+        [MANAGER_TIMESTAMP_FIRMWARE]                 = "firmware",
+        [MANAGER_TIMESTAMP_LOADER]                   = "loader",
+        [MANAGER_TIMESTAMP_KERNEL]                   = "kernel",
+        [MANAGER_TIMESTAMP_INITRD]                   = "initrd",
+        [MANAGER_TIMESTAMP_USERSPACE]                = "userspace",
+        [MANAGER_TIMESTAMP_FINISH]                   = "finish",
+        [MANAGER_TIMESTAMP_SECURITY_START]           = "security-start",
+        [MANAGER_TIMESTAMP_SECURITY_FINISH]          = "security-finish",
+        [MANAGER_TIMESTAMP_GENERATORS_START]         = "generators-start",
+        [MANAGER_TIMESTAMP_GENERATORS_FINISH]        = "generators-finish",
+        [MANAGER_TIMESTAMP_UNITS_LOAD_START]         = "units-load-start",
+        [MANAGER_TIMESTAMP_UNITS_LOAD_FINISH]        = "units-load-finish",
+        [MANAGER_TIMESTAMP_UNITS_LOAD]               = "units-load",
+        [MANAGER_TIMESTAMP_INITRD_SECURITY_START]    = "initrd-security-start",
+        [MANAGER_TIMESTAMP_INITRD_SECURITY_FINISH]   = "initrd-security-finish",
+        [MANAGER_TIMESTAMP_INITRD_GENERATORS_START]  = "initrd-generators-start",
         [MANAGER_TIMESTAMP_INITRD_GENERATORS_FINISH] = "initrd-generators-finish",
-        [MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_START] = "initrd-units-load-start",
+        [MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_START]  = "initrd-units-load-start",
         [MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_FINISH] = "initrd-units-load-finish",
 };
 
@@ -4972,8 +4704,8 @@
 
 static const char* const oom_policy_table[_OOM_POLICY_MAX] = {
         [OOM_CONTINUE] = "continue",
-        [OOM_STOP] = "stop",
-        [OOM_KILL] = "kill",
+        [OOM_STOP]     = "stop",
+        [OOM_KILL]     = "kill",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(oom_policy, OOMPolicy);
diff --git a/src/core/manager.h b/src/core/manager.h
index 14a80b3..e7b594f 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -12,7 +12,6 @@
 #include "cgroup.h"
 #include "fdset.h"
 #include "hashmap.h"
-#include "ip-address-access.h"
 #include "list.h"
 #include "prioq.h"
 #include "ratelimit.h"
@@ -61,9 +60,9 @@
 } StatusType;
 
 typedef enum OOMPolicy {
-        OOM_CONTINUE,          /* The kernel kills the process it wants to kill, and that's it */
-        OOM_STOP,              /* The kernel kills the process it wants to kill, and we stop the unit */
-        OOM_KILL,              /* The kernel kills the process it wants to kill, and all others in the unit, and we stop the unit */
+        OOM_CONTINUE,          /* The kernel or systemd-oomd kills the process it wants to kill, and that's it */
+        OOM_STOP,              /* The kernel or systemd-oomd kills the process it wants to kill, and we stop the unit */
+        OOM_KILL,              /* The kernel or systemd-oomd kills the process it wants to kill, and all others in the unit, and we stop the unit */
         _OOM_POLICY_MAX,
         _OOM_POLICY_INVALID = -EINVAL,
 } OOMPolicy;
@@ -103,6 +102,7 @@
         MANAGER_TIMESTAMP_GENERATORS_FINISH,
         MANAGER_TIMESTAMP_UNITS_LOAD_START,
         MANAGER_TIMESTAMP_UNITS_LOAD_FINISH,
+        MANAGER_TIMESTAMP_UNITS_LOAD,
 
         MANAGER_TIMESTAMP_INITRD_SECURITY_START,
         MANAGER_TIMESTAMP_INITRD_SECURITY_FINISH,
@@ -118,6 +118,7 @@
         WATCHDOG_RUNTIME,
         WATCHDOG_REBOOT,
         WATCHDOG_KEXEC,
+        WATCHDOG_PRETIMEOUT,
         _WATCHDOG_TYPE_MAX,
 } WatchdogType;
 
@@ -128,11 +129,12 @@
 #include "unit-name.h"
 
 typedef enum ManagerTestRunFlags {
-        MANAGER_TEST_NORMAL             = 0,       /* run normally */
-        MANAGER_TEST_RUN_MINIMAL        = 1 << 0,  /* create basic data structures */
-        MANAGER_TEST_RUN_BASIC          = 1 << 1,  /* interact with the environment */
-        MANAGER_TEST_RUN_ENV_GENERATORS = 1 << 2,  /* also run env generators  */
-        MANAGER_TEST_RUN_GENERATORS     = 1 << 3,  /* also run unit generators */
+        MANAGER_TEST_NORMAL                  = 0,       /* run normally */
+        MANAGER_TEST_RUN_MINIMAL             = 1 << 0,  /* create basic data structures */
+        MANAGER_TEST_RUN_BASIC               = 1 << 1,  /* interact with the environment */
+        MANAGER_TEST_RUN_ENV_GENERATORS      = 1 << 2,  /* also run env generators  */
+        MANAGER_TEST_RUN_GENERATORS          = 1 << 3,  /* also run unit generators */
+        MANAGER_TEST_RUN_IGNORE_DEPENDENCIES = 1 << 4,  /* run while ignoring dependencies */
         MANAGER_TEST_FULL = MANAGER_TEST_RUN_BASIC | MANAGER_TEST_RUN_ENV_GENERATORS | MANAGER_TEST_RUN_GENERATORS,
 } ManagerTestRunFlags;
 
@@ -224,7 +226,6 @@
 
         sd_event_source *sigchld_event_source;
 
-        int time_change_fd;
         sd_event_source *time_change_event_source;
 
         sd_event_source *timezone_change_event_source;
@@ -234,7 +235,7 @@
         int user_lookup_fds[2];
         sd_event_source *user_lookup_event_source;
 
-        UnitFileScope unit_file_scope;
+        LookupScope unit_file_scope;
         LookupPaths lookup_paths;
         Hashmap *unit_id_map;
         Hashmap *unit_name_map;
@@ -246,8 +247,8 @@
 
         usec_t watchdog[_WATCHDOG_TYPE_MAX];
         usec_t watchdog_overridden[_WATCHDOG_TYPE_MAX];
-
-        bool runtime_watchdog_running; /* Whether the runtime HW watchdog was started, so we know if we still need to get the real timeout from the hardware */
+        char *watchdog_pretimeout_governor;
+        char *watchdog_pretimeout_governor_overridden;
 
         dual_timestamp timestamps[_MANAGER_TIMESTAMP_MAX];
 
@@ -329,6 +330,9 @@
         /* Have we already sent out the READY=1 notification? */
         bool ready_sent;
 
+        /* Was the last status sent "STATUS=Ready."? */
+        bool status_ready;
+
         /* Have we already printed the taint line if necessary? */
         bool taint_logged;
 
@@ -352,6 +356,7 @@
         ExecOutput default_std_output, default_std_error;
 
         usec_t default_restart_usec, default_timeout_start_usec, default_timeout_stop_usec;
+        usec_t default_device_timeout_usec;
         usec_t default_timeout_abort_usec;
         bool default_timeout_abort_set;
 
@@ -369,6 +374,8 @@
         usec_t default_timer_accuracy_usec;
 
         OOMPolicy default_oom_policy;
+        int default_oom_score_adjust;
+        bool default_oom_score_adjust_set;
 
         int original_log_level;
         LogTarget original_log_target;
@@ -400,6 +407,9 @@
         char *switch_root;
         char *switch_root_init;
 
+        /* This is true before and after switching root. */
+        bool switching_root;
+
         /* This maps all possible path prefixes to the units needing
          * them. It's a hashmap with a path string as key and a Set as
          * value where Unit objects are contained. */
@@ -432,18 +442,28 @@
 
         /* Prefixes of e.g. RuntimeDirectory= */
         char *prefix[_EXEC_DIRECTORY_TYPE_MAX];
-        char *received_credentials;
+        char *received_credentials_directory;
+        char *received_encrypted_credentials_directory;
 
         /* Used in the SIGCHLD and sd_notify() message invocation logic to avoid that we dispatch the same event
          * multiple times on the same unit. */
         unsigned sigchldgen;
         unsigned notifygen;
 
-        bool honor_device_enumeration;
-
         VarlinkServer *varlink_server;
-        /* Only systemd-oomd should be using this to subscribe to changes in ManagedOOM settings */
-        Varlink *managed_oom_varlink_request;
+        /* When we're a system manager, this object manages the subscription from systemd-oomd to PID1 that's
+         * used to report changes in ManagedOOM settings (systemd server - oomd client). When
+         * we're a user manager, this object manages the client connection from the user manager to
+         * systemd-oomd to report changes in ManagedOOM settings (systemd client - oomd server). */
+        Varlink *managed_oom_varlink;
+
+        /* Reference to RestrictFileSystems= BPF program */
+        struct restrict_fs_bpf *restrict_fs;
+
+        char *default_smack_process_label;
+
+        /* Allow users to configure a rate limit for Reload() operations */
+        RateLimit reload_ratelimit;
 };
 
 static inline usec_t manager_default_timeout_abort_usec(Manager *m) {
@@ -451,8 +471,8 @@
         return m->default_timeout_abort_set ? m->default_timeout_abort_usec : m->default_timeout_stop_usec;
 }
 
-#define MANAGER_IS_SYSTEM(m) ((m)->unit_file_scope == UNIT_FILE_SYSTEM)
-#define MANAGER_IS_USER(m) ((m)->unit_file_scope != UNIT_FILE_SYSTEM)
+#define MANAGER_IS_SYSTEM(m) ((m)->unit_file_scope == LOOKUP_SCOPE_SYSTEM)
+#define MANAGER_IS_USER(m) ((m)->unit_file_scope != LOOKUP_SCOPE_SYSTEM)
 
 #define MANAGER_IS_RELOADING(m) ((m)->n_reloading > 0)
 
@@ -461,13 +481,19 @@
 /* The objective is set to OK as soon as we enter the main loop, and set otherwise as soon as we are done with it */
 #define MANAGER_IS_RUNNING(m) ((m)->objective == MANAGER_OK)
 
+#define MANAGER_IS_SWITCHING_ROOT(m) ((m)->switching_root)
+
 #define MANAGER_IS_TEST_RUN(m) ((m)->test_run_flags != 0)
 
-int manager_new(UnitFileScope scope, ManagerTestRunFlags test_run_flags, Manager **m);
+static inline usec_t manager_default_timeout(bool is_system) {
+        return is_system ? DEFAULT_TIMEOUT_USEC : DEFAULT_USER_TIMEOUT_USEC;
+}
+
+int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager **m);
 Manager* manager_free(Manager *m);
 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
 
-int manager_startup(Manager *m, FILE *serialization, FDSet *fds);
+int manager_startup(Manager *m, FILE *serialization, FDSet *fds, const char *root);
 
 Job *manager_get_job(Manager *m, uint32_t id);
 Unit *manager_get_unit(Manager *m, const char *name);
@@ -475,8 +501,8 @@
 int manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j);
 
 bool manager_unit_cache_should_retry_load(Unit *u);
-int manager_load_unit_prepare(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
-int manager_load_unit(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
+int manager_load_unit_prepare(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **ret);
+int manager_load_unit(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **ret);
 int manager_load_startable_unit_or_warn(Manager *m, const char *name, const char *path, Unit **ret);
 int manager_load_unit_from_dbus_path(Manager *m, const char *s, sd_bus_error *e, Unit **_u);
 
@@ -496,16 +522,17 @@
 int manager_client_environment_modify(Manager *m, char **minus, char **plus);
 int manager_get_effective_environment(Manager *m, char ***ret);
 
+int manager_set_default_smack_process_label(Manager *m, const char *label);
+
 int manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit);
 
+void manager_trigger_run_queue(Manager *m);
+
 int manager_loop(Manager *m);
 
-int manager_open_serialization(Manager *m, FILE **_f);
-
-int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root);
-int manager_deserialize(Manager *m, FILE *f, FDSet *fds);
-
 int manager_reload(Manager *m);
+Manager* manager_reloading_start(Manager *m);
+void manager_reloading_stopp(Manager **m);
 
 void manager_reset_failed(Manager *m);
 
@@ -515,6 +542,7 @@
 bool manager_unit_inactive_or_pending(Manager *m, const char *name);
 
 void manager_check_finished(Manager *m);
+void manager_send_reloading(Manager *m);
 
 void disable_printk_ratelimit(void);
 void manager_recheck_dbus(Manager *m);
@@ -525,6 +553,7 @@
 void manager_override_show_status(Manager *m, ShowStatus mode, const char *reason);
 
 void manager_set_first_boot(Manager *m, bool b);
+void manager_set_switching_root(Manager *m, bool switching_root);
 
 void manager_status_printf(Manager *m, StatusType type, const char *status, const char *format, ...) _printf_(4,5);
 
@@ -540,7 +569,7 @@
 void manager_unref_gid(Manager *m, gid_t gid, bool destroy_now);
 int manager_ref_gid(Manager *m, gid_t gid, bool clean_ipc);
 
-char *manager_taint_string(Manager *m);
+char* manager_taint_string(const Manager *m);
 
 void manager_ref_console(Manager *m);
 void manager_unref_console(Manager *m);
@@ -564,8 +593,9 @@
 
 usec_t manager_get_watchdog(Manager *m, WatchdogType t);
 void manager_set_watchdog(Manager *m, WatchdogType t, usec_t timeout);
-int manager_override_watchdog(Manager *m, WatchdogType t, usec_t timeout);
-void manager_retry_runtime_watchdog(Manager *m);
+void manager_override_watchdog(Manager *m, WatchdogType t, usec_t timeout);
+int manager_set_watchdog_pretimeout_governor(Manager *m, const char *governor);
+int manager_override_watchdog_pretimeout_governor(Manager *m, const char *governor);
 
 const char* oom_policy_to_string(OOMPolicy i) _const_;
 OOMPolicy oom_policy_from_string(const char *s) _pure_;
diff --git a/src/core/meson.build b/src/core/meson.build
index 367c085..981b46f 100644
--- a/src/core/meson.build
+++ b/src/core/meson.build
@@ -1,145 +1,98 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-libcore_sources = '''
-        apparmor-setup.c
-        apparmor-setup.h
-        audit-fd.c
-        audit-fd.h
-        automount.c
-        automount.h
-        bpf-devices.c
-        bpf-devices.h
-        bpf-firewall.c
-        bpf-firewall.h
-        bpf-foreign.c
-        bpf-foreign.h
-        bpf-socket-bind.c
-        bpf-socket-bind.h
-        cgroup.c
-        cgroup.h
-        core-varlink.c
-        core-varlink.h
-        dbus-automount.c
-        dbus-automount.h
-        dbus-cgroup.c
-        dbus-cgroup.h
-        dbus-device.c
-        dbus-device.h
-        dbus-execute.c
-        dbus-execute.h
-        dbus-job.c
-        dbus-job.h
-        dbus-kill.c
-        dbus-kill.h
-        dbus-manager.c
-        dbus-manager.h
-        dbus-mount.c
-        dbus-mount.h
-        dbus-path.c
-        dbus-path.h
-        dbus-scope.c
-        dbus-scope.h
-        dbus-service.c
-        dbus-service.h
-        dbus-slice.c
-        dbus-slice.h
-        dbus-socket.c
-        dbus-socket.h
-        dbus-swap.c
-        dbus-swap.h
-        dbus-target.c
-        dbus-target.h
-        dbus-timer.c
-        dbus-timer.h
-        dbus-unit.c
-        dbus-unit.h
-        dbus-util.c
-        dbus-util.h
-        dbus.c
-        dbus.h
-        device.c
-        device.h
-        dynamic-user.c
-        dynamic-user.h
-        efi-random.c
-        efi-random.h
-        emergency-action.c
-        emergency-action.h
-        execute.c
-        execute.h
-        generator-setup.c
-        generator-setup.h
-        ima-setup.c
-        ima-setup.h
-        ip-address-access.c
-        ip-address-access.h
-        job.c
-        job.h
-        kill.c
-        kill.h
-        kmod-setup.c
-        kmod-setup.h
-        load-dropin.c
-        load-dropin.h
-        load-fragment.c
-        load-fragment.h
-        locale-setup.c
-        locale-setup.h
-        manager-dump.c
-        manager-dump.h
-        manager.c
-        manager.h
-        mount.c
-        mount.h
-        namespace.c
-        namespace.h
-        path.c
-        path.h
-        scope.c
-        scope.h
-        selinux-access.c
-        selinux-access.h
-        selinux-setup.c
-        selinux-setup.h
-        service.c
-        service.h
-        show-status.c
-        show-status.h
-        slice.c
-        slice.h
-        smack-setup.c
-        smack-setup.h
-        socket.c
-        socket.h
-        swap.c
-        swap.h
-        target.c
-        target.h
-        timer.c
-        timer.h
-        transaction.c
-        transaction.h
-        unit-dependency-atom.c
-        unit-dependency-atom.h
-        unit-printf.c
-        unit-printf.h
-        unit-serialize.c
-        unit-serialize.h
-        unit.c
-        unit.h
-'''.split()
+libcore_sources = files(
+        'apparmor-setup.c',
+        'audit-fd.c',
+        'automount.c',
+        'bpf-devices.c',
+        'bpf-firewall.c',
+        'bpf-foreign.c',
+        'bpf-lsm.c',
+        'bpf-socket-bind.c',
+        'cgroup.c',
+        'core-varlink.c',
+        'dbus-automount.c',
+        'dbus-cgroup.c',
+        'dbus-device.c',
+        'dbus-execute.c',
+        'dbus-job.c',
+        'dbus-kill.c',
+        'dbus-manager.c',
+        'dbus-mount.c',
+        'dbus-path.c',
+        'dbus-scope.c',
+        'dbus-service.c',
+        'dbus-slice.c',
+        'dbus-socket.c',
+        'dbus-swap.c',
+        'dbus-target.c',
+        'dbus-timer.c',
+        'dbus-unit.c',
+        'dbus-util.c',
+        'dbus.c',
+        'device.c',
+        'dynamic-user.c',
+        'efi-random.c',
+        'emergency-action.c',
+        'execute.c',
+        'generator-setup.c',
+        'ima-setup.c',
+        'import-creds.c',
+        'job.c',
+        'kill.c',
+        'kmod-setup.c',
+        'load-dropin.c',
+        'load-fragment.c',
+        'manager-dump.c',
+        'manager-serialize.c',
+        'manager.c',
+        'mount.c',
+        'namespace.c',
+        'path.c',
+        'restrict-ifaces.c',
+        'scope.c',
+        'selinux-access.c',
+        'selinux-setup.c',
+        'service.c',
+        'show-status.c',
+        'slice.c',
+        'smack-setup.c',
+        'socket.c',
+        'swap.c',
+        'target.c',
+        'timer.c',
+        'transaction.c',
+        'unit-dependency-atom.c',
+        'unit-printf.c',
+        'unit-serialize.c',
+        'unit.c',
+)
+
+if conf.get('BPF_FRAMEWORK') == 1
+        libcore_sources += files(
+                'bpf-util.c',
+        )
+endif
+
+subdir('bpf')
 
 subdir('bpf/socket_bind')
 if conf.get('BPF_FRAMEWORK') == 1
         libcore_sources += [socket_bind_skel_h]
+        subdir('bpf/restrict_fs')
+        libcore_sources += [restrict_fs_skel_h]
+endif
+
+subdir('bpf/restrict_ifaces')
+if conf.get('BPF_FRAMEWORK') == 1
+        libcore_sources += [restrict_ifaces_skel_h]
 endif
 
 load_fragment_gperf_gperf = custom_target(
         'load-fragment-gperf.gperf',
         input : 'load-fragment-gperf.gperf.in',
         output: 'load-fragment-gperf.gperf',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true)
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'])
 
 load_fragment_gperf_c = custom_target(
         'load-fragment-gperf.c',
@@ -155,12 +108,18 @@
         command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
         capture : true)
 
-libcore = static_library(
-        'core',
+libcore_name = 'systemd-core-@0@'.format(shared_lib_tag)
+
+libcore = shared_library(
+        libcore_name,
         libcore_sources,
         load_fragment_gperf_c,
         load_fragment_gperf_nulstr_c,
         include_directories : includes,
+        c_args : ['-fvisibility=default'],
+        link_args : ['-shared',
+                     '-Wl,--version-script=' + libshared_sym_path],
+        link_with : libshared,
         dependencies : [versiondep,
                         threads,
                         libdl,
@@ -172,11 +131,17 @@
                         libapparmor,
                         libselinux,
                         libmount,
-                        libacl])
+                        libblkid,
+                        libacl],
+        install : true,
+        install_dir : rootpkglibdir)
 
 core_includes = [includes, include_directories('.')]
 
-systemd_sources = files('main.c')
+systemd_sources = files(
+        'main.c',
+        'crash-handler.c',
+)
 
 in_files = [['system.conf',                     pkgsysconfdir],
             ['user.conf',                       pkgsysconfdir],
@@ -191,8 +156,7 @@
                 file,
                 input : file + '.in',
                 output: file,
-                command : [meson_render_jinja2, config_h, '@INPUT@'],
-                capture : true,
+                command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
                 install : (dir == pkgsysconfdir) ? install_sysconfdir_samples : (dir != 'no'),
                 install_dir : dir)
 endforeach
@@ -208,15 +172,15 @@
 meson.add_install_script('sh', '-c', mkdir_p.format(usergeneratordir))
 
 if install_sysconfdir
-        meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'system')))
-        meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'user')))
-        meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(sysconfdir, 'xdg/systemd')))
+        meson.add_install_script('sh', '-c', mkdir_p.format(pkgsysconfdir / 'system'))
+        meson.add_install_script('sh', '-c', mkdir_p.format(pkgsysconfdir / 'user'))
+        meson.add_install_script('sh', '-c', mkdir_p.format(sysconfdir / 'xdg/systemd'))
 endif
 
 ############################################################
 
 fuzzers += [
-        [['src/core/fuzz-unit-file.c'],
+        [files('fuzz-unit-file.c'),
          [libcore,
           libshared],
          [libmount]],
diff --git a/src/core/mount.c b/src/core/mount.c
index 673eec3..5aa7da4 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -13,11 +13,13 @@
 #include "device.h"
 #include "exit-status.h"
 #include "format-util.h"
+#include "fs-util.h"
 #include "fstab-util.h"
+#include "initrd-util.h"
 #include "libmount-util.h"
 #include "log.h"
 #include "manager.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-setup.h"
 #include "mount.h"
 #include "mountpoint-util.h"
@@ -26,6 +28,7 @@
 #include "process-util.h"
 #include "serialize.h"
 #include "special.h"
+#include "stat-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
@@ -51,6 +54,9 @@
 
 static int mount_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
 static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata);
+static void mount_enter_dead(Mount *m, MountResult f);
+static void mount_enter_mounted(Mount *m, MountResult f);
+static void mount_cycle_clear(Mount *m);
 static int mount_process_proc_self_mountinfo(Manager *m);
 
 static bool MOUNT_STATE_WITH_PROCESS(MountState state) {
@@ -84,14 +90,6 @@
         return get_mount_parameters_fragment(m);
 }
 
-static bool mount_is_automount(const MountParameters *p) {
-        assert(p);
-
-        return fstab_test_option(p->options,
-                                 "comment=systemd.automount\0"
-                                 "x-systemd.automount\0");
-}
-
 static bool mount_is_network(const MountParameters *p) {
         assert(p);
 
@@ -164,9 +162,7 @@
 static bool mount_needs_quota(const MountParameters *p) {
         assert(p);
 
-        /* Quotas are not enabled on network filesystems, but we want them, for example, on storage connected via
-         * iscsi. We hence don't use mount_is_network() here, as that would also return true for _netdev devices. */
-        if (p->fstype && fstype_is_network(p->fstype))
+        if (p->fstype && !fstype_needs_quota(p->fstype))
                 return false;
 
         if (mount_is_bind(p))
@@ -179,6 +175,7 @@
 static void mount_init(Unit *u) {
         Mount *m = MOUNT(u);
 
+        assert(m);
         assert(u);
         assert(u->load_state == UNIT_STUB);
 
@@ -236,8 +233,7 @@
         if (m->control_pid <= 0)
                 return;
 
-        unit_unwatch_pid(UNIT(m), m->control_pid);
-        m->control_pid = 0;
+        unit_unwatch_pid(UNIT(m), TAKE_PID(m->control_pid));
 }
 
 static void mount_parameters_done(MountParameters *p) {
@@ -308,9 +304,9 @@
 
                 /* Adds in links to other mount points that might lie further up in the hierarchy */
 
-                parent = dirname_malloc(m->where);
-                if (!parent)
-                        return -ENOMEM;
+                r = path_extract_directory(m->where, &parent);
+                if (r < 0)
+                        return r;
 
                 r = unit_require_mounts_for(UNIT(m), parent, UNIT_DEPENDENCY_IMPLICIT);
                 if (r < 0)
@@ -362,26 +358,40 @@
 
         assert(m);
 
+        log_unit_trace(UNIT(m), "Processing implicit device dependencies");
+
         p = get_mount_parameters(m);
-        if (!p)
+        if (!p) {
+                log_unit_trace(UNIT(m), "Missing mount parameters, skipping implicit device dependencies");
                 return 0;
+        }
 
-        if (!p->what)
+        if (!p->what) {
+                log_unit_trace(UNIT(m), "Missing mount source, skipping implicit device dependencies");
                 return 0;
+        }
 
-        if (mount_is_bind(p))
+        if (mount_is_bind(p)) {
+                log_unit_trace(UNIT(m), "Mount unit is a bind mount, skipping implicit device dependencies");
                 return 0;
+        }
 
-        if (!is_device_path(p->what))
+        if (!is_device_path(p->what)) {
+                log_unit_trace(UNIT(m), "Mount source is not a device path, skipping implicit device dependencies");
                 return 0;
+        }
 
         /* /dev/root is a really weird thing, it's not a real device, but just a path the kernel exports for
          * the root file system specified on the kernel command line. Ignore it here. */
-        if (PATH_IN_SET(p->what, "/dev/root", "/dev/nfs"))
+        if (PATH_IN_SET(p->what, "/dev/root", "/dev/nfs")) {
+                log_unit_trace(UNIT(m), "Mount source is in /dev/root or /dev/nfs, skipping implicit device dependencies");
                 return 0;
+        }
 
-        if (path_equal(m->where, "/"))
+        if (path_equal(m->where, "/")) {
+                log_unit_trace(UNIT(m), "Mount destination is '/', skipping implicit device dependencies");
                 return 0;
+        }
 
         /* Mount units from /proc/self/mountinfo are not bound to devices by default since they're subject to
          * races when mounts are established by other tools with different backing devices than what we
@@ -391,22 +401,31 @@
         dep = mount_is_bound_to_device(m) ? UNIT_BINDS_TO : UNIT_REQUIRES;
 
         /* We always use 'what' from /proc/self/mountinfo if mounted */
-        mask = m->from_proc_self_mountinfo ? UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT : UNIT_DEPENDENCY_FILE;
+        mask = m->from_proc_self_mountinfo ? UNIT_DEPENDENCY_MOUNTINFO : UNIT_DEPENDENCY_MOUNT_FILE;
 
         r = unit_add_node_dependency(UNIT(m), p->what, dep, mask);
         if (r < 0)
                 return r;
+        if (r > 0)
+                log_unit_trace(UNIT(m), "Added %s dependency on %s", unit_dependency_to_string(dep), p->what);
+
         if (mount_propagate_stop(m)) {
                 r = unit_add_node_dependency(UNIT(m), p->what, UNIT_STOP_PROPAGATED_FROM, mask);
                 if (r < 0)
                         return r;
+                if (r > 0)
+                        log_unit_trace(UNIT(m), "Added %s dependency on %s",
+                                       unit_dependency_to_string(UNIT_STOP_PROPAGATED_FROM), p->what);
         }
 
-        return unit_add_blockdev_dependency(UNIT(m), p->what, mask);
+        r = unit_add_blockdev_dependency(UNIT(m), p->what, mask);
+        if (r > 0)
+                log_unit_trace(UNIT(m), "Added %s dependency on %s", unit_dependency_to_string(UNIT_AFTER), p->what);
+
+        return 0;
 }
 
 static int mount_add_quota_dependencies(Mount *m) {
-        UnitDependencyMask mask;
         MountParameters *p;
         int r;
 
@@ -422,13 +441,13 @@
         if (!mount_needs_quota(p))
                 return 0;
 
-        mask = m->from_fragment ? UNIT_DEPENDENCY_FILE : UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT;
-
-        r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_WANTS, SPECIAL_QUOTACHECK_SERVICE, true, mask);
+        r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_WANTS, SPECIAL_QUOTACHECK_SERVICE,
+                                              /* add_reference= */ true, UNIT_DEPENDENCY_FILE);
         if (r < 0)
                 return r;
 
-        r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_WANTS, SPECIAL_QUOTAON_SERVICE, true, mask);
+        r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_WANTS, SPECIAL_QUOTAON_SERVICE,
+                                              /* add_reference= */true, UNIT_DEPENDENCY_FILE);
         if (r < 0)
                 return r;
 
@@ -456,11 +475,7 @@
         return false;
 }
 
-static int mount_add_default_ordering_dependencies(
-                Mount *m,
-                MountParameters *p,
-                UnitDependencyMask mask) {
-
+static int mount_add_default_ordering_dependencies(Mount *m, MountParameters *p, UnitDependencyMask mask) {
         const char *after, *before, *e;
         int r;
 
@@ -470,11 +485,18 @@
         if (e && in_initrd()) {
                 /* All mounts under /sysroot need to happen later, at initrd-fs.target time. IOW,
                  * it's not technically part of the basic initrd filesystem itself, and so
-                 * shouldn't inherit the default Before=local-fs.target dependency. */
+                 * shouldn't inherit the default Before=local-fs.target dependency. However,
+                 * these mounts still need to start after local-fs-pre.target, as a sync point
+                 * for things like systemd-hibernate-resume@.service that should start before
+                 * any mounts. */
 
-                after = NULL;
+                after = SPECIAL_LOCAL_FS_PRE_TARGET;
                 before = isempty(e) ? SPECIAL_INITRD_ROOT_FS_TARGET : SPECIAL_INITRD_FS_TARGET;
 
+        } else if (in_initrd() && path_startswith(m->where, "/sysusr/usr")) {
+                after = SPECIAL_LOCAL_FS_PRE_TARGET;
+                before = SPECIAL_INITRD_USR_FS_TARGET;
+
         } else if (mount_is_network(p)) {
                 after = SPECIAL_REMOTE_FS_PRE_TARGET;
                 before = SPECIAL_REMOTE_FS_TARGET;
@@ -484,20 +506,18 @@
                 before = SPECIAL_LOCAL_FS_TARGET;
         }
 
-        if (!mount_is_nofail(m) && !mount_is_automount(p)) {
-                r = unit_add_dependency_by_name(UNIT(m), UNIT_BEFORE, before, true, mask);
+        if (!mount_is_nofail(m)) {
+                r = unit_add_dependency_by_name(UNIT(m), UNIT_BEFORE, before, /* add_reference= */ true, mask);
                 if (r < 0)
                         return r;
         }
 
-        if (after) {
-                r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after, true, mask);
-                if (r < 0)
-                        return r;
-        }
+        r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after, /* add_reference= */ true, mask);
+        if (r < 0)
+                return r;
 
-        return unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS,
-                                                 SPECIAL_UMOUNT_TARGET, true, mask);
+        return unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET,
+                                                 /* add_reference= */ true, mask);
 }
 
 static int mount_add_default_dependencies(Mount *m) {
@@ -521,7 +541,7 @@
         if (!p)
                 return 0;
 
-        mask = m->from_fragment ? UNIT_DEPENDENCY_FILE : UNIT_DEPENDENCY_MOUNTINFO_DEFAULT;
+        mask = m->from_proc_self_mountinfo ? UNIT_DEPENDENCY_MOUNTINFO : UNIT_DEPENDENCY_MOUNT_FILE;
 
         r = mount_add_default_ordering_dependencies(m, p, mask);
         if (r < 0)
@@ -533,7 +553,8 @@
                  * network.target, so that they are shut down only after this mount unit is
                  * stopped. */
 
-                r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_NETWORK_TARGET, true, mask);
+                r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_NETWORK_TARGET,
+                                                /* add_reference= */ true, mask);
                 if (r < 0)
                         return r;
 
@@ -542,14 +563,16 @@
                  * mounting network file systems, and whose purpose it is to delay this until the
                  * network is "up". */
 
-                r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_WANTS, UNIT_AFTER, SPECIAL_NETWORK_ONLINE_TARGET, true, mask);
+                r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_WANTS, UNIT_AFTER, SPECIAL_NETWORK_ONLINE_TARGET,
+                                                      /* add_reference= */ true, mask);
                 if (r < 0)
                         return r;
         }
 
         /* If this is a tmpfs mount then we have to unmount it before we try to deactivate swaps */
         if (streq_ptr(p->fstype, "tmpfs")) {
-                r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_SWAP_TARGET, true, mask);
+                r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_SWAP_TARGET,
+                                                /* add_reference= */ true, mask);
                 if (r < 0)
                         return r;
         }
@@ -591,8 +614,17 @@
 
 static int mount_add_non_exec_dependencies(Mount *m) {
         int r;
+
         assert(m);
 
+        /* We may be called due to this mount appearing in /proc/self/mountinfo, hence we clear all existing
+         * dependencies that were initialized from the unit file but whose final value really depends on the
+         * content of /proc/self/mountinfo. Some (such as m->where) might have become stale now. */
+        unit_remove_dependencies(UNIT(m), UNIT_DEPENDENCY_MOUNTINFO | UNIT_DEPENDENCY_MOUNT_FILE);
+
+        if (!m->where)
+                return 0;
+
         /* Adds in all dependencies directly responsible for ordering the mount, as opposed to dependencies
          * resulting from the ExecContext and such. */
 
@@ -630,6 +662,9 @@
 
         if (!m->where) {
                 r = unit_name_to_path(u->id, &m->where);
+                if (r == -ENAMETOOLONG)
+                        log_unit_error_errno(u, r, "Failed to derive mount point path from unit name, because unit name is hashed. "
+                                                   "Set \"Where=\" in the unit file explicitly.");
                 if (r < 0)
                         return r;
         }
@@ -682,6 +717,7 @@
         Mount *m = MOUNT(u);
         int r, q = 0;
 
+        assert(m);
         assert(u);
         assert(u->load_state == UNIT_STUB);
 
@@ -733,23 +769,17 @@
 
 static int mount_coldplug(Unit *u) {
         Mount *m = MOUNT(u);
-        MountState new_state = MOUNT_DEAD;
         int r;
 
         assert(m);
         assert(m->state == MOUNT_DEAD);
 
-        if (m->deserialized_state != m->state)
-                new_state = m->deserialized_state;
-        else if (m->from_proc_self_mountinfo)
-                new_state = MOUNT_MOUNTED;
-
-        if (new_state == m->state)
+        if (m->deserialized_state == m->state)
                 return 0;
 
         if (m->control_pid > 0 &&
             pid_is_unwaited(m->control_pid) &&
-            MOUNT_STATE_WITH_PROCESS(new_state)) {
+            MOUNT_STATE_WITH_PROCESS(m->deserialized_state)) {
 
                 r = unit_watch_pid(UNIT(m), m->control_pid, false);
                 if (r < 0)
@@ -760,17 +790,53 @@
                         return r;
         }
 
-        if (!IN_SET(new_state, MOUNT_DEAD, MOUNT_FAILED)) {
+        if (!IN_SET(m->deserialized_state, MOUNT_DEAD, MOUNT_FAILED)) {
                 (void) unit_setup_dynamic_creds(u);
                 (void) unit_setup_exec_runtime(u);
         }
 
-        mount_set_state(m, new_state);
+        mount_set_state(m, m->deserialized_state);
         return 0;
 }
 
+static void mount_catchup(Unit *u) {
+        Mount *m = MOUNT(ASSERT_PTR(u));
+
+        assert(m);
+
+        /* Adjust the deserialized state. See comments in mount_process_proc_self_mountinfo(). */
+        if (m->from_proc_self_mountinfo)
+                switch (m->state) {
+                case MOUNT_DEAD:
+                case MOUNT_FAILED:
+                        assert(m->control_pid == 0);
+                        (void) unit_acquire_invocation_id(u);
+                        mount_cycle_clear(m);
+                        mount_enter_mounted(m, MOUNT_SUCCESS);
+                        break;
+                case MOUNT_MOUNTING:
+                        assert(m->control_pid > 0);
+                        mount_set_state(m, MOUNT_MOUNTING_DONE);
+                        break;
+                default:
+                        break;
+                }
+        else
+                switch (m->state) {
+                case MOUNT_MOUNTING_DONE:
+                        assert(m->control_pid > 0);
+                        mount_set_state(m, MOUNT_MOUNTING);
+                        break;
+                case MOUNT_MOUNTED:
+                        assert(m->control_pid == 0);
+                        mount_enter_dead(m, MOUNT_SUCCESS);
+                        break;
+                default:
+                        break;
+                }
+}
+
 static void mount_dump(Unit *u, FILE *f, const char *prefix) {
-        char buf[FORMAT_TIMESPAN_MAX];
         Mount *m = MOUNT(u);
         MountParameters *p;
 
@@ -811,7 +877,7 @@
                 prefix, yes_no(m->lazy_unmount),
                 prefix, yes_no(m->force_unmount),
                 prefix, yes_no(m->read_write_only),
-                prefix, format_timespan(buf, sizeof(buf), m->timeout_usec, USEC_PER_SEC));
+                prefix, FORMAT_TIMESPAN(m->timeout_usec, USEC_PER_SEC));
 
         if (m->control_pid > 0)
                 fprintf(f,
@@ -827,10 +893,10 @@
 
         _cleanup_(exec_params_clear) ExecParameters exec_params = {
                 .flags     = EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN,
-                .stdin_fd  = -1,
-                .stdout_fd = -1,
-                .stderr_fd = -1,
-                .exec_fd   = -1,
+                .stdin_fd  = -EBADF,
+                .stdout_fd = -EBADF,
+                .stderr_fd = -EBADF,
+                .exec_fd   = -EBADF,
         };
         pid_t pid;
         int r;
@@ -889,8 +955,9 @@
 
         dynamic_creds_destroy(&m->dynamic_creds);
 
-        /* Any dependencies based on /proc/self/mountinfo are now stale */
-        unit_remove_dependencies(UNIT(m), UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT);
+        /* Any dependencies based on /proc/self/mountinfo are now stale. Let's re-generate dependencies from
+         * .mount unit. */
+        (void) mount_add_non_exec_dependencies(m);
 }
 
 static void mount_enter_mounted(Mount *m, MountResult f) {
@@ -1014,6 +1081,7 @@
 static void mount_enter_mounting(Mount *m) {
         int r;
         MountParameters *p;
+        bool source_is_dir = true;
 
         assert(m);
 
@@ -1021,24 +1089,38 @@
         if (r < 0)
                 goto fail;
 
-        (void) mkdir_p_label(m->where, m->directory_mode);
+        p = get_mount_parameters_fragment(m);
+        if (p && mount_is_bind(p)) {
+                r = is_dir(p->what, /* follow = */ true);
+                if (r < 0 && r != -ENOENT)
+                        log_unit_info_errno(UNIT(m), r, "Failed to determine type of bind mount source '%s', ignoring: %m", p->what);
+                else if (r == 0)
+                        source_is_dir = false;
+        }
 
-        unit_warn_if_dir_nonempty(UNIT(m), m->where);
+        if (source_is_dir)
+                (void) mkdir_p_label(m->where, m->directory_mode);
+        else
+                (void) touch_file(m->where, /* parents = */ true, USEC_INFINITY, UID_INVALID, GID_INVALID, MODE_INVALID);
+
+        if (source_is_dir)
+                unit_warn_if_dir_nonempty(UNIT(m), m->where);
         unit_warn_leftover_processes(UNIT(m), unit_log_leftover_process_start);
 
         m->control_command_id = MOUNT_EXEC_MOUNT;
         m->control_command = m->exec_command + MOUNT_EXEC_MOUNT;
 
         /* Create the source directory for bind-mounts if needed */
-        p = get_mount_parameters_fragment(m);
         if (p && mount_is_bind(p)) {
                 r = mkdir_p_label(p->what, m->directory_mode);
                 /* mkdir_p_label() can return -EEXIST if the target path exists and is not a directory - which is
-                 * totally OK, in case the user wants us to overmount a non-directory inode. */
-                if (r < 0 && r != -EEXIST) {
-                        log_unit_error_errno(UNIT(m), r, "Failed to make bind mount source '%s': %m", p->what);
-                        goto fail;
-                }
+                 * totally OK, in case the user wants us to overmount a non-directory inode. Also -EROFS can be
+                 * returned on read-only filesystem. Moreover, -EACCES (and also maybe -EPERM?) may be returned
+                 * when the path is on NFS. See issue #24120. All such errors will be logged in the debug level. */
+                if (r < 0 && r != -EEXIST)
+                        log_unit_full_errno(UNIT(m),
+                                            (r == -EROFS || ERRNO_IS_PRIVILEGE(r)) ? LOG_DEBUG : LOG_WARNING,
+                                            r, "Failed to make bind mount source '%s', ignoring: %m", p->what);
         }
 
         if (p) {
@@ -1170,12 +1252,6 @@
 
         assert(IN_SET(m->state, MOUNT_DEAD, MOUNT_FAILED));
 
-        r = unit_test_start_limit(u);
-        if (r < 0) {
-                mount_enter_dead(m, MOUNT_FAILURE_START_LIMIT_HIT);
-                return r;
-        }
-
         r = unit_acquire_invocation_id(u);
         if (r < 0)
                 return r;
@@ -1226,7 +1302,7 @@
                 return 0;
 
         default:
-                assert_not_reached("Unexpected state.");
+                assert_not_reached();
         }
 }
 
@@ -1266,6 +1342,7 @@
         Mount *m = MOUNT(u);
         int r;
 
+        assert(m);
         assert(u);
         assert(key);
         assert(value);
@@ -1386,7 +1463,7 @@
         else if (code == CLD_DUMPED)
                 f = MOUNT_FAILURE_CORE_DUMP;
         else
-                assert_not_reached("Unknown code");
+                assert_not_reached();
 
         if (IN_SET(m->state, MOUNT_REMOUNTING, MOUNT_REMOUNTING_SIGKILL, MOUNT_REMOUNTING_SIGTERM))
                 mount_set_reload_result(m, f);
@@ -1468,7 +1545,7 @@
                 break;
 
         default:
-                assert_not_reached("Uh, control process died at wrong time.");
+                assert_not_reached();
         }
 
         /* Notify clients about changed exit status */
@@ -1544,7 +1621,7 @@
                 break;
 
         default:
-                assert_not_reached("Timeout at wrong time.");
+                assert_not_reached();
         }
 
         return 0;
@@ -1584,17 +1661,17 @@
         if (r < 0)
                 return r;
 
+        /* This unit was generated because /proc/self/mountinfo reported it. Remember this, so that by the
+         * time we load the unit file for it (and thus add in extra deps right after) we know what source to
+         * attributes the deps to. */
+        MOUNT(u)->from_proc_self_mountinfo = true;
+
         r = mount_add_non_exec_dependencies(MOUNT(u));
         if (r < 0)
                 return r;
 
-        /* This unit was generated because /proc/self/mountinfo reported it. Remember this, so that by the time we load
-         * the unit file for it (and thus add in extra deps right after) we know what source to attributes the deps
-         * to. */
-        MOUNT(u)->from_proc_self_mountinfo = true;
-
-        /* We have only allocated the stub now, let's enqueue this unit for loading now, so that everything else is
-         * loaded in now. */
+        /* We have only allocated the stub now, let's enqueue this unit for loading now, so that everything
+         * else is loaded in now. */
         unit_add_to_load_queue(u);
 
         *ret_flags = MOUNT_PROC_IS_MOUNTED | MOUNT_PROC_JUST_MOUNTED | MOUNT_PROC_JUST_CHANGED;
@@ -1658,9 +1735,6 @@
         if (FLAGS_SET(flags, MOUNT_PROC_JUST_CHANGED)) {
                 /* If things changed, then make sure that all deps are regenerated. Let's
                  * first remove all automatic deps, and then add in the new ones. */
-
-                unit_remove_dependencies(u, UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT);
-
                 r = mount_add_non_exec_dependencies(MOUNT(u));
                 if (r < 0)
                         return r;
@@ -1701,44 +1775,21 @@
         if (!is_path(where))
                 return 0;
 
-        /* Mount unit names have to be (like all other unit names) short enough to fit into file names. This
-         * means there's a good chance that overly long mount point paths after mangling them to look like a
-         * unit name would result in unit names we don't actually consider valid. This should be OK however
-         * as such long mount point paths should not happen on regular systems — and if they appear
-         * nonetheless they are generally synthesized by software, and thus managed by that other
-         * software. Having such long names just means you cannot use systemd to manage those specific mount
-         * points, which should be an OK restriction to make. After all we don't have to be able to manage
-         * all mount points in the world — as long as we don't choke on them when we encounter them. */
         r = unit_name_from_path(where, ".mount", &e);
-        if (r < 0) {
-                static RateLimit rate_limit = { /* Let's log about this at warning level at most once every
-                                                 * 5s. Given that we generate this whenever we read the file
-                                                 * otherwise we probably shouldn't flood the logs with
-                                                 * this */
-                        .interval = 5 * USEC_PER_SEC,
-                        .burst = 1,
-                };
-
-                if (r == -ENAMETOOLONG)
-                        return log_struct_errno(
-                                        ratelimit_below(&rate_limit) ? LOG_WARNING : LOG_DEBUG, r,
-                                        "MESSAGE_ID=" SD_MESSAGE_MOUNT_POINT_PATH_NOT_SUITABLE_STR,
-                                        "MOUNT_POINT=%s", where,
-                                        LOG_MESSAGE("Mount point path '%s' too long to fit into unit name, ignoring mount point.", where));
-
+        if (r < 0)
                 return log_struct_errno(
-                                ratelimit_below(&rate_limit) ? LOG_WARNING : LOG_DEBUG, r,
+                                LOG_WARNING, r,
                                 "MESSAGE_ID=" SD_MESSAGE_MOUNT_POINT_PATH_NOT_SUITABLE_STR,
                                 "MOUNT_POINT=%s", where,
-                                LOG_MESSAGE("Failed to generate valid unit name from mount point path '%s', ignoring mount point: %m", where));
-        }
+                                LOG_MESSAGE("Failed to generate valid unit name from mount point path '%s', ignoring mount point: %m",
+                                            where));
 
         u = manager_get_unit(m, e);
         if (u)
                 r = mount_setup_existing_unit(u, what, where, options, fstype, &flags);
         else
-                /* First time we see this mount point meaning that it's not been initiated by a mount unit but rather
-                 * by the sysadmin having called mount(8) directly. */
+                /* First time we see this mount point meaning that it's not been initiated by a mount unit
+                 * but rather by the sysadmin having called mount(8) directly. */
                 r = mount_setup_new_unit(m, e, what, where, options, fstype, &flags, &u);
         if (r < 0)
                 return log_warning_errno(r, "Failed to set up mount unit for '%s': %m", where);
@@ -1804,6 +1855,9 @@
         usec_t t;
         int r;
 
+        assert(m);
+        assert(u);
+
         if (!m->timer_event_source)
                 return 0;
 
@@ -1848,6 +1902,25 @@
         return UNIT(m)->perpetual || FLAGS_SET(m->proc_flags, MOUNT_PROC_IS_MOUNTED);
 }
 
+static int mount_on_ratelimit_expire(sd_event_source *s, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+        Job *j;
+
+        /* Let's enqueue all start jobs that were previously skipped because of active ratelimit. */
+        HASHMAP_FOREACH(j, m->jobs) {
+                if (j->unit->type != UNIT_MOUNT)
+                        continue;
+
+                job_add_to_run_queue(j);
+        }
+
+        /* By entering ratelimited state we made all mount start jobs not runnable, now rate limit is over so
+         * let's make sure we dispatch them in the next iteration. */
+        manager_trigger_run_queue(m);
+
+        return 0;
+}
+
 static void mount_enumerate(Manager *m) {
         int r;
 
@@ -1856,6 +1929,7 @@
         mnt_init_debug(0);
 
         if (!m->mount_monitor) {
+                unsigned mount_rate_limit_burst = 5;
                 int fd;
 
                 m->mount_monitor = mnt_new_monitor();
@@ -1895,12 +1969,26 @@
                         goto fail;
                 }
 
-                r = sd_event_source_set_ratelimit(m->mount_event_source, 1 * USEC_PER_SEC, 5);
+                /* Let users override the default (5 in 1s), as it stalls the boot sequence on busy systems. */
+                const char *e = secure_getenv("SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST");
+                if (e) {
+                        r = safe_atou(e, &mount_rate_limit_burst);
+                        if (r < 0)
+                                log_debug("Invalid value in $SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST, ignoring: %s", e);
+                }
+
+                r = sd_event_source_set_ratelimit(m->mount_event_source, 1 * USEC_PER_SEC, mount_rate_limit_burst);
                 if (r < 0) {
                         log_error_errno(r, "Failed to enable rate limit for mount events: %m");
                         goto fail;
                 }
 
+                r = sd_event_source_set_ratelimit_expire_callback(m->mount_event_source, mount_on_ratelimit_expire);
+                if (r < 0) {
+                         log_error_errno(r, "Failed to enable rate limit for mount events: %m");
+                         goto fail;
+                }
+
                 (void) sd_event_source_set_description(m->mount_event_source, "mount-monitor-dispatch");
         }
 
@@ -1938,9 +2026,8 @@
 }
 
 static int mount_process_proc_self_mountinfo(Manager *m) {
-        _cleanup_set_free_free_ Set *around = NULL, *gone = NULL;
+        _cleanup_set_free_ Set *around = NULL, *gone = NULL;
         const char *what;
-        Unit *u;
         int r;
 
         assert(m);
@@ -1970,13 +2057,10 @@
                          * existed. */
 
                         if (mount->from_proc_self_mountinfo &&
-                            mount->parameters_proc_self_mountinfo.what) {
-
+                            mount->parameters_proc_self_mountinfo.what)
                                 /* Remember that this device might just have disappeared */
-                                if (set_ensure_allocated(&gone, &path_hash_ops) < 0 ||
-                                    set_put_strdup(&gone, mount->parameters_proc_self_mountinfo.what) < 0)
+                                if (set_put_strdup_full(&gone, &path_hash_ops_free, mount->parameters_proc_self_mountinfo.what) < 0)
                                         log_oom(); /* we don't care too much about OOM here... */
-                        }
 
                         mount->from_proc_self_mountinfo = false;
                         assert_se(update_parameters_proc_self_mountinfo(mount, NULL, NULL, NULL) >= 0);
@@ -2034,13 +2118,10 @@
 
                 if (mount_is_mounted(mount) &&
                     mount->from_proc_self_mountinfo &&
-                    mount->parameters_proc_self_mountinfo.what) {
+                    mount->parameters_proc_self_mountinfo.what)
                         /* Track devices currently used */
-
-                        if (set_ensure_allocated(&around, &path_hash_ops) < 0 ||
-                            set_put_strdup(&around, mount->parameters_proc_self_mountinfo.what) < 0)
+                        if (set_put_strdup_full(&around, &path_hash_ops_free, mount->parameters_proc_self_mountinfo.what) < 0)
                                 log_oom();
-                }
 
                 /* Reset the flags for later calls */
                 mount->proc_flags = 0;
@@ -2051,16 +2132,15 @@
                         continue;
 
                 /* Let the device units know that the device is no longer mounted */
-                device_found_node(m, what, 0, DEVICE_FOUND_MOUNT);
+                device_found_node(m, what, DEVICE_NOT_FOUND, DEVICE_FOUND_MOUNT);
         }
 
         return 0;
 }
 
 static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(revents & EPOLLIN);
 
         return mount_process_proc_self_mountinfo(m);
@@ -2145,8 +2225,23 @@
         return exec_context_get_clean_mask(&m->exec_context, ret);
 }
 
+static int mount_can_start(Unit *u) {
+        Mount *m = MOUNT(u);
+        int r;
+
+        assert(m);
+
+        r = unit_test_start_limit(u);
+        if (r < 0) {
+                mount_enter_dead(m, MOUNT_FAILURE_START_LIMIT_HIT);
+                return r;
+        }
+
+        return 1;
+}
+
 static const char* const mount_exec_command_table[_MOUNT_EXEC_COMMAND_MAX] = {
-        [MOUNT_EXEC_MOUNT] = "ExecMount",
+        [MOUNT_EXEC_MOUNT]   = "ExecMount",
         [MOUNT_EXEC_UNMOUNT] = "ExecUnmount",
         [MOUNT_EXEC_REMOUNT] = "ExecRemount",
 };
@@ -2154,14 +2249,14 @@
 DEFINE_STRING_TABLE_LOOKUP(mount_exec_command, MountExecCommand);
 
 static const char* const mount_result_table[_MOUNT_RESULT_MAX] = {
-        [MOUNT_SUCCESS] = "success",
-        [MOUNT_FAILURE_RESOURCES] = "resources",
-        [MOUNT_FAILURE_TIMEOUT] = "timeout",
-        [MOUNT_FAILURE_EXIT_CODE] = "exit-code",
-        [MOUNT_FAILURE_SIGNAL] = "signal",
-        [MOUNT_FAILURE_CORE_DUMP] = "core-dump",
+        [MOUNT_SUCCESS]                 = "success",
+        [MOUNT_FAILURE_RESOURCES]       = "resources",
+        [MOUNT_FAILURE_TIMEOUT]         = "timeout",
+        [MOUNT_FAILURE_EXIT_CODE]       = "exit-code",
+        [MOUNT_FAILURE_SIGNAL]          = "signal",
+        [MOUNT_FAILURE_CORE_DUMP]       = "core-dump",
         [MOUNT_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
-        [MOUNT_FAILURE_PROTOCOL] = "protocol",
+        [MOUNT_FAILURE_PROTOCOL]        = "protocol",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(mount_result, MountResult);
@@ -2189,6 +2284,7 @@
         .done = mount_done,
 
         .coldplug = mount_coldplug,
+        .catchup = mount_catchup,
 
         .dump = mount_dump,
 
@@ -2242,4 +2338,6 @@
                         [JOB_TIMEOUT]    = "Timed out unmounting %s.",
                 },
         },
+
+        .can_start = mount_can_start,
 };
diff --git a/src/core/namespace.c b/src/core/namespace.c
index 43fa311..feae4dc 100644
--- a/src/core/namespace.c
+++ b/src/core/namespace.c
@@ -4,24 +4,30 @@
 #include <linux/loop.h>
 #include <sched.h>
 #include <stdio.h>
+#include <sys/file.h>
 #include <sys/mount.h>
 #include <unistd.h>
+#if WANT_LINUX_FS_H
 #include <linux/fs.h>
+#endif
 
 #include "alloc-util.h"
 #include "base-filesystem.h"
+#include "chase-symlinks.h"
 #include "dev-setup.h"
+#include "devnum-util.h"
 #include "env-util.h"
 #include "escape.h"
 #include "extension-release.h"
 #include "fd-util.h"
 #include "format-util.h"
-#include "fs-util.h"
+#include "glyph-util.h"
 #include "label.h"
 #include "list.h"
 #include "loop-util.h"
 #include "loopback-setup.h"
-#include "mkdir.h"
+#include "missing_syscall.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
 #include "namespace-util.h"
@@ -57,12 +63,13 @@
         EMPTY_DIR,
         SYSFS,
         PROCFS,
-        RUN,
         READONLY,
         READWRITE,
         NOEXEC,
         EXEC,
         TMPFS,
+        RUN,
+        EXTENSION_DIRECTORIES, /* Bind-mounted outside the root directory, and used by subsequent mounts */
         EXTENSION_IMAGES, /* Mounted outside the root directory, and used by subsequent mounts */
         MQUEUEFS,
         READWRITE_IMPLICIT, /* Should have the lowest priority. */
@@ -97,7 +104,7 @@
         { "/proc",               PROCFS,       false },
         { "/dev",                BIND_DEV,     false },
         { "/sys",                SYSFS,        false },
-        { "/run",                RUN,          false, .options_const = "mode=755" TMPFS_LIMITS_RUN, .flags = MS_NOSUID|MS_NODEV|MS_STRICTATIME },
+        { "/run",                RUN,          false, .options_const = "mode=0755" TMPFS_LIMITS_RUN, .flags = MS_NOSUID|MS_NODEV|MS_STRICTATIME },
 };
 
 /* ProtectKernelTunables= option and the related filesystem APIs */
@@ -313,8 +320,6 @@
 }
 
 static int append_access_mounts(MountEntry **p, char **strv, MountMode mode, bool forcibly_require_prefix) {
-        char **i;
-
         assert(p);
 
         /* Adds a list of user-supplied READWRITE/READWRITE_IMPLICIT/READONLY/INACCESSIBLE entries */
@@ -349,8 +354,6 @@
 }
 
 static int append_empty_dir_mounts(MountEntry **p, char **strv) {
-        char **i;
-
         assert(p);
 
         /* Adds tmpfs mounts to provide readable but empty directories. This is primarily used to implement the
@@ -363,7 +366,7 @@
                         .mode = EMPTY_DIR,
                         .ignore = false,
                         .read_only = true,
-                        .options_const = "mode=755" TMPFS_LIMITS_EMPTY_OR_ALMOST,
+                        .options_const = "mode=0755" TMPFS_LIMITS_EMPTY_OR_ALMOST,
                         .flags = MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME,
                 };
         }
@@ -408,24 +411,24 @@
         return 0;
 }
 
-static int append_extension_images(
+static int append_extensions(
                 MountEntry **p,
                 const char *root,
                 const char *extension_dir,
                 char **hierarchies,
                 const MountImage *mount_images,
-                size_t n) {
+                size_t n,
+                char **extension_directories) {
 
         _cleanup_strv_free_ char **overlays = NULL;
-        char **hierarchy;
         int r;
 
+        if (n == 0 && strv_isempty(extension_directories))
+                return 0;
+
         assert(p);
         assert(extension_dir);
 
-        if (n == 0)
-                return 0;
-
         /* Prepare a list of overlays, that will have as each element a string suitable for being
          * passed as a lowerdir= parameter, so start with the hierarchy on the root.
          * The overlays vector will have the same number of elements and will correspond to the
@@ -482,6 +485,62 @@
                 };
         }
 
+        /* Secondly, extend the lowerdir= parameters with each ExtensionDirectory.
+         * Bind mount them in the same location as the ExtensionImages, so that we
+         * can check that they are valid trees (extension-release.d). */
+        STRV_FOREACH(extension_directory, extension_directories) {
+                _cleanup_free_ char *mount_point = NULL, *source = NULL;
+                const char *e = *extension_directory;
+                bool ignore_enoent = false;
+
+                /* Pick up the counter where the ExtensionImages left it. */
+                r = asprintf(&mount_point, "%s/%zu", extension_dir, n++);
+                if (r < 0)
+                        return -ENOMEM;
+
+                /* Look for any prefixes */
+                if (startswith(e, "-")) {
+                        e++;
+                        ignore_enoent = true;
+                }
+                /* Ignore this for now */
+                if (startswith(e, "+"))
+                        e++;
+
+                source = strdup(e);
+                if (!source)
+                        return -ENOMEM;
+
+                for (size_t j = 0; hierarchies && hierarchies[j]; ++j) {
+                        _cleanup_free_ char *prefixed_hierarchy = NULL, *escaped = NULL, *lowerdir = NULL;
+
+                        prefixed_hierarchy = path_join(mount_point, hierarchies[j]);
+                        if (!prefixed_hierarchy)
+                                return -ENOMEM;
+
+                        escaped = shell_escape(prefixed_hierarchy, ",:");
+                        if (!escaped)
+                                return -ENOMEM;
+
+                        /* Note that lowerdir= parameters are in 'reverse' order, so the
+                         * top-most directory in the overlay comes first in the list. */
+                        lowerdir = strjoin(escaped, ":", overlays[j]);
+                        if (!lowerdir)
+                                return -ENOMEM;
+
+                        free_and_replace(overlays[j], lowerdir);
+                }
+
+                *((*p)++) = (MountEntry) {
+                        .path_malloc = TAKE_PTR(mount_point),
+                        .source_const = TAKE_PTR(source),
+                        .mode = EXTENSION_DIRECTORIES,
+                        .ignore = ignore_enoent,
+                        .has_prefix = true,
+                        .read_only = true,
+                };
+        }
+
         /* Then, for each hierarchy, prepare an overlay with the list of lowerdir= strings
          * set up earlier. */
         for (size_t i = 0; hierarchies && hierarchies[i]; ++i) {
@@ -576,7 +635,7 @@
                 return append_static_mounts(p, protect_home_yes_table, ELEMENTSOF(protect_home_yes_table), ignore_protect);
 
         default:
-                assert_not_reached("Unexpected ProtectHome= value");
+                assert_not_reached();
         }
 }
 
@@ -598,18 +657,21 @@
                 return append_static_mounts(p, protect_system_full_table, ELEMENTSOF(protect_system_full_table), ignore_protect);
 
         default:
-                assert_not_reached("Unexpected ProtectSystem= value");
+                assert_not_reached();
         }
 }
 
 static int mount_path_compare(const MountEntry *a, const MountEntry *b) {
         int d;
 
-        /* EXTENSION_IMAGES will be used by other mounts as a base, so sort them first
+        /* ExtensionImages/Directories will be used by other mounts as a base, so sort them first
          * regardless of the prefix - they are set up in the propagate directory anyway */
         d = -CMP(a->mode == EXTENSION_IMAGES, b->mode == EXTENSION_IMAGES);
         if (d != 0)
                 return d;
+        d = -CMP(a->mode == EXTENSION_DIRECTORIES, b->mode == EXTENSION_DIRECTORIES);
+        if (d != 0)
+                return d;
 
         /* If the paths are not equal, then order prefixes first */
         d = path_compare(mount_entry_path(a), mount_entry_path(b));
@@ -715,22 +777,20 @@
 
                 /* Only suppress such subtrees for READONLY, READWRITE and READWRITE_IMPLICIT entries */
                 if (IN_SET(f->mode, READONLY, READWRITE, READWRITE_IMPLICIT)) {
-                        MountEntry *p;
-                        bool found = false;
+                        MountEntry *found = NULL;
 
                         /* Now let's find the first parent of the entry we are looking at. */
-                        for (p = t-1; p >= m; p--) {
+                        for (MountEntry *p = PTR_SUB1(t, m); p; p = PTR_SUB1(p, m))
                                 if (path_startswith(mount_entry_path(f), mount_entry_path(p))) {
-                                        found = true;
+                                        found = p;
                                         break;
                                 }
-                        }
 
                         /* We found it, let's see if it's the same mode, if so, we can drop this entry */
-                        if (found && p->mode == f->mode) {
+                        if (found && found->mode == f->mode) {
                                 log_debug("%s (%s) is made redundant by %s (%s)",
                                           mount_entry_path(f), mount_mode_to_string(f->mode),
-                                          mount_entry_path(p), mount_mode_to_string(p->mode));
+                                          mount_entry_path(found), mount_mode_to_string(found->mode));
                                 mount_entry_done(f);
                                 continue;
                         }
@@ -757,8 +817,8 @@
 
         for (f = m, t = m; f < m + *n; f++) {
 
-                /* ExtensionImages bases are opened in /run/systemd/unit-extensions on the host */
-                if (f->mode != EXTENSION_IMAGES && !path_startswith(mount_entry_path(f), root_directory)) {
+                /* ExtensionImages/Directories bases are opened in /run/systemd/unit-extensions on the host */
+                if (!IN_SET(f->mode, EXTENSION_IMAGES, EXTENSION_DIRECTORIES) && !path_startswith(mount_entry_path(f), root_directory)) {
                         log_debug("%s is outside of root directory.", mount_entry_path(f));
                         mount_entry_done(f);
                         continue;
@@ -831,10 +891,10 @@
                 return 0;
 
         /* Create symlinks like /dev/char/1:9 → ../urandom */
-        if (asprintf(&sl, "%s/dev/%s/%u:%u",
+        if (asprintf(&sl, "%s/dev/%s/" DEVNUM_FORMAT_STR,
                      temporary_mount,
                      S_ISCHR(st.st_mode) ? "char" : "block",
-                     major(st.st_rdev), minor(st.st_rdev)) < 0)
+                     DEVNUM_FORMAT_VAL(st.st_rdev)) < 0)
                 return log_oom();
 
         (void) mkdir_parents(sl, 0755);
@@ -856,7 +916,7 @@
                 "/dev/tty\0";
 
         char temporary_mount[] = "/tmp/namespace-dev-XXXXXX";
-        const char *d, *dev = NULL, *devpts = NULL, *devshm = NULL, *devhugepages = NULL, *devmqueue = NULL, *devlog = NULL, *devptmx = NULL;
+        const char *dev = NULL, *devpts = NULL, *devshm = NULL, *devhugepages = NULL, *devmqueue = NULL, *devlog = NULL, *devptmx = NULL;
         bool can_mknod = true;
         int r;
 
@@ -867,13 +927,13 @@
 
         dev = strjoina(temporary_mount, "/dev");
         (void) mkdir(dev, 0755);
-        r = mount_nofollow_verbose(LOG_DEBUG, "tmpfs", dev, "tmpfs", DEV_MOUNT_OPTIONS, "mode=755" TMPFS_LIMITS_DEV);
+        r = mount_nofollow_verbose(LOG_DEBUG, "tmpfs", dev, "tmpfs", DEV_MOUNT_OPTIONS, "mode=0755" TMPFS_LIMITS_PRIVATE_DEV);
         if (r < 0)
                 goto fail;
 
-        r = label_fix_container(dev, "/dev", 0);
+        r = label_fix_full(AT_FDCWD, dev, "/dev", 0);
         if (r < 0) {
-                log_debug_errno(errno, "Failed to fix label of '%s' as /dev: %m", dev);
+                log_debug_errno(r, "Failed to fix label of '%s' as /dev: %m", dev);
                 goto fail;
         }
 
@@ -1014,6 +1074,27 @@
         return 1;
 }
 
+static bool mount_option_supported(const char *fstype, const char *key, const char *value) {
+        _cleanup_close_ int fd = -EBADF;
+        int r;
+
+        /* This function assumes support by default. Only if the fsconfig() call fails with -EINVAL/-EOPNOTSUPP
+         * will it report that the option/value is not supported. */
+
+        fd = fsopen(fstype, FSOPEN_CLOEXEC);
+        if (fd < 0) {
+                if (errno != ENOSYS)
+                        log_debug_errno(errno, "Failed to open superblock context for '%s': %m", fstype);
+                return true; /* If fsopen() fails for whatever reason, assume the value is supported. */
+        }
+
+        r = fsconfig(fd, FSCONFIG_SET_STRING, key, value, 0);
+        if (r < 0 && !IN_SET(errno, EINVAL, EOPNOTSUPP, ENOSYS))
+                log_debug_errno(errno, "Failed to set '%s=%s' on '%s' superblock context: %m", key, value, fstype);
+
+        return r >= 0 || !IN_SET(errno, EINVAL, EOPNOTSUPP);
+}
+
 static int mount_procfs(const MountEntry *m, const NamespaceInfo *ns_info) {
         _cleanup_free_ char *opts = NULL;
         const char *entry_path;
@@ -1031,12 +1112,25 @@
                  * per-instance, we'll exclusively use the textual value for hidepid=, since support was
                  * added in the same commit: if it's supported it is thus also per-instance. */
 
-                opts = strjoin("hidepid=",
-                               ns_info->protect_proc == PROTECT_PROC_DEFAULT ? "off" :
-                               protect_proc_to_string(ns_info->protect_proc),
-                               ns_info->proc_subset == PROC_SUBSET_PID ? ",subset=pid" : "");
-                if (!opts)
-                        return -ENOMEM;
+                const char *hpv = ns_info->protect_proc == PROTECT_PROC_DEFAULT ?
+                                  "off" :
+                                  protect_proc_to_string(ns_info->protect_proc);
+
+                /* hidepid= support was added in 5.8, so we can use fsconfig()/fsopen() (which were added in
+                 * 5.2) to check if hidepid= is supported. This avoids a noisy dmesg log by the kernel when
+                 * trying to use hidepid= on systems where it isn't supported. The same applies for subset=.
+                 * fsopen()/fsconfig() was also backported on some distros which allows us to detect
+                 * hidepid=/subset= support in even more scenarios. */
+
+                if (mount_option_supported("proc", "hidepid", hpv)) {
+                        opts = strjoin("hidepid=", hpv);
+                        if (!opts)
+                                return -ENOMEM;
+                }
+
+                if (ns_info->proc_subset == PROC_SUBSET_PID && mount_option_supported("proc", "subset", "pid"))
+                        if (!strextend_with_separator(&opts, ",", "subset=pid"))
+                                return -ENOMEM;
         }
 
         entry_path = mount_entry_path(m);
@@ -1067,9 +1161,15 @@
                 r = path_is_mount_point(entry_path, NULL, 0);
                 if (r < 0)
                         return log_debug_errno(r, "Unable to determine whether /proc is already mounted: %m");
-                if (r == 0)
-                        /* /proc is not mounted. Propagate the original error code. */
-                        return -EPERM;
+                if (r == 0) {
+                        /* We lack permissions to mount a new instance of /proc, and it is not already
+                         * mounted. But we can access the host's, so as a final fallback bind-mount it to
+                         * the destination, as most likely we are inside a user manager in an unprivileged
+                         * user namespace. */
+                        r = mount_nofollow_verbose(LOG_DEBUG, "/proc", entry_path, NULL, MS_BIND|MS_REC, NULL);
+                        if (r < 0)
+                                return -EPERM;
+                }
         } else if (r < 0)
                 return r;
 
@@ -1095,7 +1195,7 @@
         if (r < 0)
                 return r;
 
-        r = label_fix_container(entry_path, inner_path, 0);
+        r = label_fix_full(AT_FDCWD, entry_path, inner_path, 0);
         if (r < 0)
                 return log_debug_errno(r, "Failed to fix label of '%s' as '%s': %m", entry_path, inner_path);
 
@@ -1156,8 +1256,8 @@
         }
 
         r = verity_dissect_and_mount(
-                                /* src_fd= */ -1, mount_entry_source(m), mount_entry_path(m), m->image_options,
-                                host_os_release_id, host_os_release_version_id, host_os_release_sysext_level);
+                        /* src_fd= */ -1, mount_entry_source(m), mount_entry_path(m), m->image_options,
+                        host_os_release_id, host_os_release_version_id, host_os_release_sysext_level, NULL);
         if (r == -ENOENT && m->ignore)
                 return 0;
         if (r == -ESTALE && host_os_release_id)
@@ -1217,7 +1317,8 @@
                                        "Symlink loop on '%s'.",
                                        mount_entry_path(m));
 
-        log_debug("Followed mount entry path symlink %s → %s.", mount_entry_path(m), target);
+        log_debug("Followed mount entry path symlink %s %s %s.",
+                  mount_entry_path(m), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), target);
 
         mount_entry_consume_prefix(m, TAKE_PTR(target));
 
@@ -1296,6 +1397,47 @@
                 what = mount_entry_path(m);
                 break;
 
+        case EXTENSION_DIRECTORIES: {
+                _cleanup_free_ char *host_os_release_id = NULL, *host_os_release_version_id = NULL,
+                                *host_os_release_sysext_level = NULL, *extension_name = NULL;
+                _cleanup_strv_free_ char **extension_release = NULL;
+
+                r = path_extract_filename(mount_entry_source(m), &extension_name);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to extract extension name from %s: %m", mount_entry_source(m));
+
+                r = parse_os_release(
+                                empty_to_root(root_directory),
+                                "ID", &host_os_release_id,
+                                "VERSION_ID", &host_os_release_version_id,
+                                "SYSEXT_LEVEL", &host_os_release_sysext_level,
+                                NULL);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to acquire 'os-release' data of OS tree '%s': %m", empty_to_root(root_directory));
+                if (isempty(host_os_release_id))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "'ID' field not found or empty in 'os-release' data of OS tree '%s': %m", empty_to_root(root_directory));
+
+                r = load_extension_release_pairs(mount_entry_source(m), extension_name, /* relax_extension_release_check= */ false, &extension_release);
+                if (r == -ENOENT && m->ignore)
+                        return 0;
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to parse directory %s extension-release metadata: %m", extension_name);
+
+                r = extension_release_validate(
+                                extension_name,
+                                host_os_release_id,
+                                host_os_release_version_id,
+                                host_os_release_sysext_level,
+                                /* host_sysext_scope */ NULL, /* Leave empty, we need to accept both system and portable */
+                                extension_release);
+                if (r == 0)
+                        return log_debug_errno(SYNTHETIC_ERRNO(ESTALE), "Directory %s extension-release metadata does not match the root's", extension_name);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to compare directory %s extension-release metadata with the root's os-release: %m", extension_name);
+
+                _fallthrough_;
+        }
+
         case BIND_MOUNT:
                 rbind = false;
 
@@ -1315,7 +1457,8 @@
                 if (r < 0)
                         return log_debug_errno(r, "Failed to follow symlinks on %s: %m", mount_entry_source(m));
 
-                log_debug("Followed source symlinks %s → %s.", mount_entry_source(m), chased);
+                log_debug("Followed source symlinks %s %s %s.",
+                          mount_entry_source(m), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), chased);
 
                 free_and_replace(m->source_malloc, chased);
 
@@ -1362,7 +1505,7 @@
                 return mount_overlay(m);
 
         default:
-                assert_not_reached("Unknown mode");
+                assert_not_reached();
         }
 
         assert(what);
@@ -1525,6 +1668,7 @@
                 size_t n_temporary_filesystems,
                 size_t n_mount_images,
                 size_t n_extension_images,
+                size_t n_extension_directories,
                 size_t n_hierarchies,
                 const char* tmp_dir,
                 const char* var_tmp_dir,
@@ -1559,7 +1703,8 @@
                 strv_length(empty_directories) +
                 n_bind_mounts +
                 n_mount_images +
-                (n_extension_images > 0 ? n_hierarchies + n_extension_images : 0) + /* Mount each image plus an overlay per hierarchy */
+                (n_extension_images > 0 || n_extension_directories > 0 ? /* Mount each image and directory plus an overlay per hierarchy */
+                 n_hierarchies + n_extension_images + n_extension_directories: 0) +
                 n_temporary_filesystems +
                 ns_info->private_dev +
                 (ns_info->protect_kernel_tunables ?
@@ -1598,11 +1743,35 @@
         drop_nop(mounts, n_mounts);
 }
 
+static int create_symlinks_from_tuples(const char *root, char **strv_symlinks) {
+        int r;
+
+        STRV_FOREACH_PAIR(src, dst, strv_symlinks) {
+                _cleanup_free_ char *src_abs = NULL, *dst_abs = NULL;
+
+                src_abs = path_join(root, *src);
+                dst_abs = path_join(root, *dst);
+                if (!src_abs || !dst_abs)
+                        return -ENOMEM;
+
+                r = mkdir_parents_label(dst_abs, 0755);
+                if (r < 0)
+                        return r;
+
+                r = symlink_idempotent(src_abs, dst_abs, true);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 static int apply_mounts(
                 const char *root,
                 const NamespaceInfo *ns_info,
                 MountEntry *mounts,
                 size_t *n_mounts,
+                char **exec_dir_symlinks,
                 char **error_path) {
 
         _cleanup_fclose_ FILE *proc_self_mountinfo = NULL;
@@ -1637,8 +1806,8 @@
                         if (m->applied)
                                 continue;
 
-                        /* ExtensionImages are first opened in the propagate directory, not in the root_directory */
-                        r = follow_symlink(m->mode != EXTENSION_IMAGES ? root : NULL, m);
+                        /* ExtensionImages/Directories are first opened in the propagate directory, not in the root_directory */
+                        r = follow_symlink(!IN_SET(m->mode, EXTENSION_IMAGES, EXTENSION_DIRECTORIES) ? root : NULL, m);
                         if (r < 0) {
                                 if (error_path && mount_entry_path(m))
                                         *error_path = strdup(mount_entry_path(m));
@@ -1669,6 +1838,14 @@
                 drop_unused_mounts(root, mounts, n_mounts);
         }
 
+        /* Now that all filesystems have been set up, but before the
+         * read-only switches are flipped, create the exec dirs symlinks.
+         * Note that when /var/lib is not empty/tmpfs, these symlinks will already
+         * exist, which means this will be a no-op. */
+        r = create_symlinks_from_tuples(root, exec_dir_symlinks);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to set up ExecDirectories symlinks inside mount namespace: %m");
+
         /* Create a deny list we can pass to bind_mount_recursive() */
         deny_list = new(char*, (*n_mounts)+1);
         if (!deny_list)
@@ -1832,6 +2009,7 @@
                 char** exec_paths,
                 char** no_exec_paths,
                 char** empty_directories,
+                char** exec_dir_symlinks,
                 const BindMount *bind_mounts,
                 size_t n_bind_mounts,
                 const TemporaryFileSystem *temporary_filesystems,
@@ -1852,19 +2030,20 @@
                 const char *verity_data_path,
                 const MountImage *extension_images,
                 size_t n_extension_images,
+                char **extension_directories,
                 const char *propagate_dir,
                 const char *incoming_dir,
+                const char *extension_dir,
                 const char *notify_socket,
                 char **error_path) {
 
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(dissected_image_unrefp) DissectedImage *dissected_image = NULL;
         _cleanup_(verity_settings_done) VeritySettings verity = VERITY_SETTINGS_DEFAULT;
         _cleanup_strv_free_ char **hierarchies = NULL;
         MountEntry *m = NULL, *mounts = NULL;
         bool require_prefix = false, setup_propagate = false;
-        const char *root, *extension_dir = "/run/systemd/unit-extensions";
+        const char *root;
         DissectImageFlags dissect_image_flags =
                 DISSECT_IMAGE_GENERIC_ROOT |
                 DISSECT_IMAGE_REQUIRE_ROOT |
@@ -1872,7 +2051,9 @@
                 DISSECT_IMAGE_RELAX_VAR_CHECK |
                 DISSECT_IMAGE_FSCK |
                 DISSECT_IMAGE_USR_NO_ROOT |
-                DISSECT_IMAGE_GROWFS;
+                DISSECT_IMAGE_GROWFS |
+                DISSECT_IMAGE_ADD_PARTITION_DEVICES |
+                DISSECT_IMAGE_PIN_PARTITION_DEVICES;
         size_t n_mounts;
         int r;
 
@@ -1912,28 +2093,34 @@
                 r = loop_device_make_by_path(
                                 root_image,
                                 FLAGS_SET(dissect_image_flags, DISSECT_IMAGE_DEVICE_READ_ONLY) ? O_RDONLY : -1 /* < 0 means writable if possible, read-only as fallback */,
+                                /* sector_size= */ UINT32_MAX,
                                 FLAGS_SET(dissect_image_flags, DISSECT_IMAGE_NO_PARTITION_TABLE) ? 0 : LO_FLAGS_PARTSCAN,
+                                LOCK_SH,
                                 &loop_device);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to create loop device for root image: %m");
 
-                r = dissect_image(
-                                loop_device->fd,
+                r = dissect_loop_device(
+                                loop_device,
                                 &verity,
                                 root_image_options,
-                                loop_device->uevent_seqnum_not_before,
-                                loop_device->timestamp_not_before,
                                 dissect_image_flags,
                                 &dissected_image);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to dissect image: %m");
 
+                r = dissected_image_load_verity_sig_partition(
+                                dissected_image,
+                                loop_device->fd,
+                                &verity);
+                if (r < 0)
+                        return r;
+
                 r = dissected_image_decrypt(
                                 dissected_image,
                                 NULL,
                                 &verity,
-                                dissect_image_flags,
-                                &decrypted_image);
+                                dissect_image_flags);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to decrypt dissected image: %m");
         }
@@ -1957,7 +2144,7 @@
                 require_prefix = true;
         }
 
-        if (n_extension_images > 0) {
+        if (n_extension_images > 0 || !strv_isempty(extension_directories)) {
                 r = parse_env_extension_hierarchies(&hierarchies);
                 if (r < 0)
                         return r;
@@ -1975,6 +2162,7 @@
                         n_temporary_filesystems,
                         n_mount_images,
                         n_extension_images,
+                        strv_length(extension_directories),
                         strv_length(hierarchies),
                         tmp_dir, var_tmp_dir,
                         creds_path,
@@ -2043,7 +2231,7 @@
                 if (r < 0)
                         goto finish;
 
-                r = append_extension_images(&m, root, extension_dir, hierarchies, extension_images, n_extension_images);
+                r = append_extensions(&m, root, extension_dir, hierarchies, extension_images, n_extension_images, extension_directories);
                 if (r < 0)
                         goto finish;
 
@@ -2236,9 +2424,9 @@
         if (setup_propagate)
                 (void) mkdir_p(propagate_dir, 0600);
 
-        if (n_extension_images > 0)
-                /* ExtensionImages mountpoint directories will be created while parsing the mounts to create,
-                 * so have the parent ready */
+        if (n_extension_images > 0 || !strv_isempty(extension_directories))
+                /* ExtensionImages/Directories mountpoint directories will be created while parsing the
+                 * mounts to create, so have the parent ready */
                 (void) mkdir_p(extension_dir, 0600);
 
         /* Remount / as SLAVE so that nothing now mounted in the namespace
@@ -2256,15 +2444,19 @@
                         goto finish;
                 }
 
-                if (decrypted_image) {
-                        r = decrypted_image_relinquish(decrypted_image);
-                        if (r < 0) {
-                                log_debug_errno(r, "Failed to relinquish decrypted image: %m");
-                                goto finish;
-                        }
+                /* Now release the block device lock, so that udevd is free to call BLKRRPART on the device
+                 * if it likes. */
+                r = loop_device_flock(loop_device, LOCK_UN);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to release lock on loopback block device: %m");
+                        goto finish;
                 }
 
-                loop_device_relinquish(loop_device);
+                r = dissected_image_relinquish(dissected_image);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to relinquish dissected image: %m");
+                        goto finish;
+                }
 
         } else if (root_directory) {
 
@@ -2292,12 +2484,23 @@
                 (void) base_filesystem_create(root, UID_INVALID, GID_INVALID);
 
         /* Now make the magic happen */
-        r = apply_mounts(root, ns_info, mounts, &n_mounts, error_path);
+        r = apply_mounts(root, ns_info, mounts, &n_mounts, exec_dir_symlinks, error_path);
         if (r < 0)
                 goto finish;
 
         /* MS_MOVE does not work on MS_SHARED so the remount MS_SHARED will be done later */
-        r = mount_move_root(root);
+        r = mount_switch_root(root, /* mount_propagation_flag = */ 0);
+        if (r == -EINVAL && root_directory) {
+                /* If we are using root_directory and we don't have privileges (ie: user manager in a user
+                 * namespace) and the root_directory is already a mount point in the parent namespace,
+                 * MS_MOVE will fail as we don't have permission to change it (with EINVAL rather than
+                 * EPERM). Attempt to bind-mount it over itself (like we do above if it's not already a
+                 * mount point) and try again. */
+                r = mount_nofollow_verbose(LOG_DEBUG, root, root, NULL, MS_BIND|MS_REC, NULL);
+                if (r < 0)
+                        goto finish;
+                r = mount_switch_root(root, /* mount_propagation_flag = */ 0);
+        }
         if (r < 0) {
                 log_debug_errno(r, "Failed to mount root with MS_MOVE: %m");
                 goto finish;
@@ -2396,7 +2599,6 @@
 int mount_image_add(MountImage **m, size_t *n, const MountImage *item) {
         _cleanup_free_ char *s = NULL, *d = NULL;
         _cleanup_(mount_options_free_allp) MountOptions *options = NULL;
-        MountOptions *i;
         MountImage *c;
 
         assert(m);
@@ -2497,6 +2699,7 @@
 
 static int make_tmp_prefix(const char *prefix) {
         _cleanup_free_ char *t = NULL;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         /* Don't do anything unless we know the dir is actually missing */
@@ -2506,7 +2709,7 @@
         if (errno != ENOENT)
                 return -errno;
 
-        RUN_WITH_UMASK(000)
+        WITH_UMASK(000)
                 r = mkdir_parents(prefix, 0755);
         if (r < 0)
                 return r;
@@ -2515,18 +2718,20 @@
         if (r < 0)
                 return r;
 
-        if (mkdir(t, 0777) < 0) /* umask will corrupt this access mode, but that doesn't matter, we need to
-                                 * call chmod() anyway for the suid bit, below. */
-                return -errno;
+        /* umask will corrupt this access mode, but that doesn't matter, we need to call chmod() anyway for
+         * the suid bit, below. */
+        fd = open_mkdir_at(AT_FDCWD, t, O_EXCL|O_CLOEXEC, 0777);
+        if (fd < 0)
+                return fd;
 
-        if (chmod(t, 01777) < 0) {
-                r = -errno;
+        r = RET_NERRNO(fchmod(fd, 01777));
+        if (r < 0) {
                 (void) rmdir(t);
                 return r;
         }
 
-        if (rename(t, prefix) < 0) {
-                r = -errno;
+        r = RET_NERRNO(rename(t, prefix));
+        if (r < 0) {
                 (void) rmdir(t);
                 return r == -EEXIST ? 0 : r; /* it's fine if someone else created the dir by now */
         }
@@ -2538,7 +2743,6 @@
 static int setup_one_tmp_dir(const char *id, const char *prefix, char **path, char **tmp_path) {
         _cleanup_free_ char *x = NULL;
         _cleanup_free_ char *y = NULL;
-        char bid[SD_ID128_STRING_MAX];
         sd_id128_t boot_id;
         bool rw = true;
         int r;
@@ -2554,7 +2758,7 @@
         if (r < 0)
                 return r;
 
-        x = strjoin(prefix, "/systemd-private-", sd_id128_to_string(boot_id, bid), "-", id, "-XXXXXX");
+        x = strjoin(prefix, "/systemd-private-", SD_ID128_TO_STRING(boot_id), "-", id, "-XXXXXX");
         if (!x)
                 return -ENOMEM;
 
@@ -2562,7 +2766,7 @@
         if (r < 0)
                 return r;
 
-        RUN_WITH_UMASK(0077)
+        WITH_UMASK(0077)
                 if (!mkdtemp(x)) {
                         if (errno == EROFS || ERRNO_IS_DISK_SPACE(errno))
                                 rw = false;
@@ -2575,11 +2779,11 @@
                 if (!y)
                         return -ENOMEM;
 
-                RUN_WITH_UMASK(0000)
+                WITH_UMASK(0000)
                         if (mkdir(y, 0777 | S_ISVTX) < 0)
-                                    return -errno;
+                                return -errno;
 
-                r = label_fix_container(y, prefix, 0);
+                r = label_fix_full(AT_FDCWD, y, prefix, 0);
                 if (r < 0)
                         return r;
 
@@ -2589,7 +2793,7 @@
                 /* Trouble: we failed to create the directory. Instead of failing, let's simulate /tmp being
                  * read-only. This way the service will get the EROFS result as if it was writing to the real
                  * file system. */
-                RUN_WITH_UMASK(0000)
+                WITH_UMASK(0000)
                         r = mkdir_p(RUN_SYSTEMD_EMPTY, 0500);
                 if (r < 0)
                         return r;
@@ -2629,7 +2833,7 @@
 }
 
 int setup_shareable_ns(const int ns_storage_socket[static 2], unsigned long nsflag) {
-        _cleanup_close_ int ns = -1;
+        _cleanup_close_ int ns = -EBADF;
         int r, q;
         const char *ns_name, *ns_path;
 
@@ -2697,7 +2901,7 @@
 }
 
 int open_shareable_ns_path(const int ns_storage_socket[static 2], const char *path, unsigned long nsflag) {
-        _cleanup_close_ int ns = -1;
+        _cleanup_close_ int ns = -EBADF;
         int q, r;
 
         assert(ns_storage_socket);
@@ -2786,6 +2990,7 @@
         [NAMESPACE_USER]   = "user",
         [NAMESPACE_PID]    = "pid",
         [NAMESPACE_NET]    = "net",
+        [NAMESPACE_TIME]   = "time",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(namespace_type, NamespaceType);
diff --git a/src/core/namespace.h b/src/core/namespace.h
index c9373a4..2ba5970 100644
--- a/src/core/namespace.h
+++ b/src/core/namespace.h
@@ -15,6 +15,7 @@
 #include "dissect-image.h"
 #include "fs-util.h"
 #include "macro.h"
+#include "namespace-util.h"
 #include "string-util.h"
 
 typedef enum ProtectHome {
@@ -26,18 +27,6 @@
         _PROTECT_HOME_INVALID = -EINVAL,
 } ProtectHome;
 
-typedef enum NamespaceType {
-        NAMESPACE_MOUNT,
-        NAMESPACE_CGROUP,
-        NAMESPACE_UTS,
-        NAMESPACE_IPC,
-        NAMESPACE_USER,
-        NAMESPACE_PID,
-        NAMESPACE_NET,
-        _NAMESPACE_TYPE_MAX,
-        _NAMESPACE_TYPE_INVALID = -EINVAL,
-} NamespaceType;
-
 typedef enum ProtectSystem {
         PROTECT_SYSTEM_NO,
         PROTECT_SYSTEM_YES,
@@ -121,6 +110,7 @@
                 char **exec_paths,
                 char **no_exec_paths,
                 char **empty_directories,
+                char **exec_dir_symlinks,
                 const BindMount *bind_mounts,
                 size_t n_bind_mounts,
                 const TemporaryFileSystem *temporary_filesystems,
@@ -141,8 +131,10 @@
                 const char *root_verity,
                 const MountImage *extension_images,
                 size_t n_extension_images,
+                char **extension_directories,
                 const char *propagate_dir,
                 const char *incoming_dir,
+                const char *extension_dir,
                 const char *notify_socket,
                 char **error_path);
 
diff --git a/src/core/org.freedesktop.systemd1.conf b/src/core/org.freedesktop.systemd1.conf
index f405b27..a44cd35 100644
--- a/src/core/org.freedesktop.systemd1.conf
+++ b/src/core/org.freedesktop.systemd1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
@@ -66,6 +66,10 @@
 
                 <allow send_destination="org.freedesktop.systemd1"
                        send_interface="org.freedesktop.systemd1.Manager"
+                       send_member="GetUnitByPIDFD"/>
+
+                <allow send_destination="org.freedesktop.systemd1"
+                       send_interface="org.freedesktop.systemd1.Manager"
                        send_member="LoadUnit"/>
 
                 <allow send_destination="org.freedesktop.systemd1"
@@ -122,6 +126,14 @@
 
                 <allow send_destination="org.freedesktop.systemd1"
                        send_interface="org.freedesktop.systemd1.Manager"
+                       send_member="DumpUnitsMatchingPatterns"/>
+
+                <allow send_destination="org.freedesktop.systemd1"
+                       send_interface="org.freedesktop.systemd1.Manager"
+                       send_member="DumpUnitsMatchingPatternsByFileDescriptor"/>
+
+                <allow send_destination="org.freedesktop.systemd1"
+                       send_interface="org.freedesktop.systemd1.Manager"
                        send_member="ListUnitFiles"/>
 
                 <allow send_destination="org.freedesktop.systemd1"
@@ -284,10 +296,22 @@
 
                 <allow send_destination="org.freedesktop.systemd1"
                        send_interface="org.freedesktop.systemd1.Manager"
+                       send_member="EnableUnitFilesWithFlags"/>
+
+                <allow send_destination="org.freedesktop.systemd1"
+                       send_interface="org.freedesktop.systemd1.Manager"
                        send_member="DisableUnitFiles"/>
 
                 <allow send_destination="org.freedesktop.systemd1"
                        send_interface="org.freedesktop.systemd1.Manager"
+                       send_member="DisableUnitFilesWithFlags"/>
+
+                <allow send_destination="org.freedesktop.systemd1"
+                       send_interface="org.freedesktop.systemd1.Manager"
+                       send_member="DisableUnitFilesWithFlagsAndInstallInfo"/>
+
+                <allow send_destination="org.freedesktop.systemd1"
+                       send_interface="org.freedesktop.systemd1.Manager"
                        send_member="ReenableUnitFiles"/>
 
                 <allow send_destination="org.freedesktop.systemd1"
diff --git a/src/core/org.freedesktop.systemd1.policy.in b/src/core/org.freedesktop.systemd1.policy.in
index f34b2d5..74adead 100644
--- a/src/core/org.freedesktop.systemd1.policy.in
+++ b/src/core/org.freedesktop.systemd1.policy.in
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/core/path.c b/src/core/path.c
index 684e17f..3881c77 100644
--- a/src/core/path.c
+++ b/src/core/path.c
@@ -11,10 +11,10 @@
 #include "dbus-unit.h"
 #include "escape.h"
 #include "fd-util.h"
-#include "fs-util.h"
 #include "glob-util.h"
+#include "inotify-util.h"
 #include "macro.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path.h"
 #include "path-util.h"
 #include "serialize.h"
@@ -173,7 +173,6 @@
 
 int path_spec_fd_event(PathSpec *s, uint32_t revents) {
         union inotify_event_buffer buffer;
-        struct inotify_event *e;
         ssize_t l;
 
         assert(s);
@@ -184,23 +183,27 @@
 
         l = read(s->inotify_fd, &buffer, sizeof(buffer));
         if (l < 0) {
-                if (IN_SET(errno, EAGAIN, EINTR))
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
                 return log_error_errno(errno, "Failed to read inotify event: %m");
         }
 
         if (IN_SET(s->type, PATH_CHANGED, PATH_MODIFIED))
-                FOREACH_INOTIFY_EVENT(e, buffer, l)
+                FOREACH_INOTIFY_EVENT_WARN(e, buffer, l)
                         if (s->primary_wd == e->wd)
                                 return 1;
 
         return 0;
 }
 
-static bool path_spec_check_good(PathSpec *s, bool initial, bool from_trigger_notify) {
+static bool path_spec_check_good(PathSpec *s, bool initial, bool from_trigger_notify, char **ret_trigger_path) {
+        _cleanup_free_ char *trigger = NULL;
         bool b, good = false;
 
+        assert(s);
+        assert(ret_trigger_path);
+
         switch (s->type) {
 
         case PATH_EXISTS:
@@ -208,13 +211,13 @@
                 break;
 
         case PATH_EXISTS_GLOB:
-                good = glob_exists(s->path) > 0;
+                good = glob_first(s->path, &trigger) > 0;
                 break;
 
         case PATH_DIRECTORY_NOT_EMPTY: {
                 int k;
 
-                k = dir_is_empty(s->path);
+                k = dir_is_empty(s->path, /* ignore_hidden_or_backup= */ true);
                 good = !(IN_SET(k, -ENOENT, -ENOTDIR) || k > 0);
                 break;
         }
@@ -230,6 +233,15 @@
                 ;
         }
 
+        if (good) {
+                if (!trigger) {
+                        trigger = strdup(s->path);
+                        if (!trigger)
+                                (void) log_oom_debug();
+                }
+                *ret_trigger_path = TAKE_PTR(trigger);
+        }
+
         return good;
 }
 
@@ -253,7 +265,7 @@
 
 void path_spec_done(PathSpec *s) {
         assert(s);
-        assert(s->inotify_fd == -1);
+        assert(s->inotify_fd == -EBADF);
 
         free(s->path);
 }
@@ -265,6 +277,9 @@
         assert(u->load_state == UNIT_STUB);
 
         p->directory_mode = 0755;
+
+        p->trigger_limit.interval = USEC_INFINITY;
+        p->trigger_limit.burst = UINT_MAX;
 }
 
 void path_free_specs(Path *p) {
@@ -289,7 +304,6 @@
 }
 
 static int path_add_mount_dependencies(Path *p) {
-        PathSpec *s;
         int r;
 
         assert(p);
@@ -353,6 +367,16 @@
 static int path_add_extras(Path *p) {
         int r;
 
+        assert(p);
+
+        /* To avoid getting pid1 in a busy-loop state (eg: unmet condition on associated service),
+         * set a default trigger limit if the user didn't specify any. */
+        if (p->trigger_limit.interval == USEC_INFINITY)
+                p->trigger_limit.interval = 2 * USEC_PER_SEC;
+
+        if (p->trigger_limit.burst == UINT_MAX)
+                p->trigger_limit.burst = 200;
+
         r = path_add_trigger_dependencies(p);
         if (r < 0)
                 return r;
@@ -388,7 +412,6 @@
 static void path_dump(Unit *u, FILE *f, const char *prefix) {
         Path *p = PATH(u);
         Unit *trigger;
-        PathSpec *s;
 
         assert(p);
         assert(f);
@@ -400,20 +423,22 @@
                 "%sResult: %s\n"
                 "%sUnit: %s\n"
                 "%sMakeDirectory: %s\n"
-                "%sDirectoryMode: %04o\n",
+                "%sDirectoryMode: %04o\n"
+                "%sTriggerLimitIntervalSec: %s\n"
+                "%sTriggerLimitBurst: %u\n",
                 prefix, path_state_to_string(p->state),
                 prefix, path_result_to_string(p->result),
                 prefix, trigger ? trigger->id : "n/a",
                 prefix, yes_no(p->make_directory),
-                prefix, p->directory_mode);
+                prefix, p->directory_mode,
+                prefix, FORMAT_TIMESPAN(p->trigger_limit.interval, USEC_PER_SEC),
+                prefix, p->trigger_limit.burst);
 
         LIST_FOREACH(spec, s, p->specs)
                 path_spec_dump(s, f, prefix);
 }
 
 static void path_unwatch(Path *p) {
-        PathSpec *s;
-
         assert(p);
 
         LIST_FOREACH(spec, s, p->specs)
@@ -422,7 +447,6 @@
 
 static int path_watch(Path *p) {
         int r;
-        PathSpec *s;
 
         assert(p);
 
@@ -483,9 +507,11 @@
         path_set_state(p, p->result != PATH_SUCCESS ? PATH_FAILED : PATH_DEAD);
 }
 
-static void path_enter_running(Path *p) {
+static void path_enter_running(Path *p, char *trigger_path) {
+        _cleanup_(activation_details_unrefp) ActivationDetails *details = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         Unit *trigger;
+        Job *job;
         int r;
 
         assert(p);
@@ -494,6 +520,12 @@
         if (unit_stop_pending(UNIT(p)))
                 return;
 
+        if (!ratelimit_below(&p->trigger_limit)) {
+                log_unit_warning(UNIT(p), "Trigger limit hit, refusing further activation.");
+                path_enter_dead(p, PATH_FAILURE_TRIGGER_LIMIT_HIT);
+                return;
+        }
+
         trigger = UNIT_TRIGGER(UNIT(p));
         if (!trigger) {
                 log_unit_error(UNIT(p), "Unit to trigger vanished.");
@@ -501,10 +533,22 @@
                 return;
         }
 
-        r = manager_add_job(UNIT(p)->manager, JOB_START, trigger, JOB_REPLACE, NULL, &error, NULL);
+        details = activation_details_new(UNIT(p));
+        if (!details) {
+                r = -ENOMEM;
+                goto fail;
+        }
+
+        r = free_and_strdup(&(ACTIVATION_DETAILS_PATH(details))->trigger_path_filename, trigger_path);
         if (r < 0)
                 goto fail;
 
+        r = manager_add_job(UNIT(p)->manager, JOB_START, trigger, JOB_REPLACE, NULL, &error, &job);
+        if (r < 0)
+                goto fail;
+
+        job_set_activation_details(job, details);
+
         path_set_state(p, PATH_RUNNING);
         path_unwatch(p);
 
@@ -515,19 +559,19 @@
         path_enter_dead(p, PATH_FAILURE_RESOURCES);
 }
 
-static bool path_check_good(Path *p, bool initial, bool from_trigger_notify) {
-        PathSpec *s;
-
+static bool path_check_good(Path *p, bool initial, bool from_trigger_notify, char **ret_trigger_path) {
         assert(p);
+        assert(ret_trigger_path);
 
         LIST_FOREACH(spec, s, p->specs)
-                if (path_spec_check_good(s, initial, from_trigger_notify))
+                if (path_spec_check_good(s, initial, from_trigger_notify, ret_trigger_path))
                         return true;
 
         return false;
 }
 
 static void path_enter_waiting(Path *p, bool initial, bool from_trigger_notify) {
+        _cleanup_free_ char *trigger_path = NULL;
         Unit *trigger;
         int r;
 
@@ -539,9 +583,9 @@
                 return;
         }
 
-        if (path_check_good(p, initial, from_trigger_notify)) {
+        if (path_check_good(p, initial, from_trigger_notify, &trigger_path)) {
                 log_unit_debug(UNIT(p), "Got triggered.");
-                path_enter_running(p);
+                path_enter_running(p, trigger_path);
                 return;
         }
 
@@ -553,9 +597,9 @@
          * might have appeared/been removed by now, so we must
          * recheck */
 
-        if (path_check_good(p, false, from_trigger_notify)) {
+        if (path_check_good(p, false, from_trigger_notify, &trigger_path)) {
                 log_unit_debug(UNIT(p), "Got triggered.");
-                path_enter_running(p);
+                path_enter_running(p, trigger_path);
                 return;
         }
 
@@ -568,8 +612,6 @@
 }
 
 static void path_mkdir(Path *p) {
-        PathSpec *s;
-
         assert(p);
 
         if (!p->make_directory)
@@ -590,12 +632,6 @@
         if (r < 0)
                 return r;
 
-        r = unit_test_start_limit(u);
-        if (r < 0) {
-                path_enter_dead(p, PATH_FAILURE_START_LIMIT_HIT);
-                return r;
-        }
-
         r = unit_acquire_invocation_id(u);
         if (r < 0)
                 return r;
@@ -620,7 +656,6 @@
 
 static int path_serialize(Unit *u, FILE *f, FDSet *fds) {
         Path *p = PATH(u);
-        PathSpec *s;
 
         assert(u);
         assert(f);
@@ -674,15 +709,15 @@
                         p->result = f;
 
         } else if (streq(key, "path-spec")) {
-                int previous_exists, skip = 0, r;
+                int previous_exists, skip = 0;
                 _cleanup_free_ char *type_str = NULL;
 
                 if (sscanf(value, "%ms %i %n", &type_str, &previous_exists, &skip) < 2)
                         log_unit_debug(u, "Failed to parse path-spec value: %s", value);
                 else {
                         _cleanup_free_ char *unescaped = NULL;
+                        ssize_t l;
                         PathType type;
-                        PathSpec *s;
 
                         type = path_type_from_string(type_str);
                         if (type < 0) {
@@ -690,9 +725,9 @@
                                 return 0;
                         }
 
-                        r = cunescape(value+skip, 0, &unescaped);
-                        if (r < 0) {
-                                log_unit_warning_errno(u, r, "Failed to unescape serialize path: %m");
+                        l = cunescape(value+skip, 0, &unescaped);
+                        if (l < 0) {
+                                log_unit_warning_errno(u, l, "Failed to unescape serialize path: %m");
                                 return 0;
                         }
 
@@ -724,7 +759,7 @@
 }
 
 static int path_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        PathSpec *s = userdata;
+        PathSpec *s = userdata, *found = NULL;
         Path *p;
         int changed;
 
@@ -737,23 +772,23 @@
         if (!IN_SET(p->state, PATH_WAITING, PATH_RUNNING))
                 return 0;
 
-        /* log_debug("inotify wakeup on %s.", UNIT(p)->id); */
-
-        LIST_FOREACH(spec, s, p->specs)
-                if (path_spec_owns_inotify_fd(s, fd))
+        LIST_FOREACH(spec, i, p->specs)
+                if (path_spec_owns_inotify_fd(i, fd)) {
+                        found = i;
                         break;
+                }
 
-        if (!s) {
+        if (!found) {
                 log_error("Got event on unknown fd.");
                 goto fail;
         }
 
-        changed = path_spec_fd_event(s, revents);
+        changed = path_spec_fd_event(found, revents);
         if (changed < 0)
                 goto fail;
 
         if (changed)
-                path_enter_running(p);
+                path_enter_running(p, found->path);
         else
                 path_enter_waiting(p, false, false);
 
@@ -811,21 +846,120 @@
         p->result = PATH_SUCCESS;
 }
 
+static int path_can_start(Unit *u) {
+        Path *p = PATH(u);
+        int r;
+
+        assert(p);
+
+        r = unit_test_start_limit(u);
+        if (r < 0) {
+                path_enter_dead(p, PATH_FAILURE_START_LIMIT_HIT);
+                return r;
+        }
+
+        return 1;
+}
+
+static void activation_details_path_done(ActivationDetails *details) {
+        ActivationDetailsPath *p = ASSERT_PTR(ACTIVATION_DETAILS_PATH(details));
+
+        p->trigger_path_filename = mfree(p->trigger_path_filename);
+}
+
+static void activation_details_path_serialize(ActivationDetails *details, FILE *f) {
+        ActivationDetailsPath *p = ASSERT_PTR(ACTIVATION_DETAILS_PATH(details));
+
+        assert(f);
+
+        if (p->trigger_path_filename)
+                (void) serialize_item(f, "activation-details-path-filename", p->trigger_path_filename);
+}
+
+static int activation_details_path_deserialize(const char *key, const char *value, ActivationDetails **details) {
+        int r;
+
+        assert(key);
+        assert(value);
+
+        if (!details || !*details)
+                return -EINVAL;
+
+        ActivationDetailsPath *p = ACTIVATION_DETAILS_PATH(*details);
+        if (!p)
+                return -EINVAL;
+
+        if (!streq(key, "activation-details-path-filename"))
+                return -EINVAL;
+
+        r = free_and_strdup(&p->trigger_path_filename, value);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static int activation_details_path_append_env(ActivationDetails *details, char ***strv) {
+        ActivationDetailsPath *p = ACTIVATION_DETAILS_PATH(details);
+        char *s;
+        int r;
+
+        assert(details);
+        assert(strv);
+        assert(p);
+
+        if (isempty(p->trigger_path_filename))
+                return 0;
+
+        s = strjoin("TRIGGER_PATH=", p->trigger_path_filename);
+        if (!s)
+                return -ENOMEM;
+
+        r = strv_consume(strv, TAKE_PTR(s));
+        if (r < 0)
+                return r;
+
+        return 1; /* Return the number of variables added to the env block */
+}
+
+static int activation_details_path_append_pair(ActivationDetails *details, char ***strv) {
+        ActivationDetailsPath *p = ACTIVATION_DETAILS_PATH(details);
+        int r;
+
+        assert(details);
+        assert(strv);
+        assert(p);
+
+        if (isempty(p->trigger_path_filename))
+                return 0;
+
+        r = strv_extend(strv, "trigger_path");
+        if (r < 0)
+                return r;
+
+        r = strv_extend(strv, p->trigger_path_filename);
+        if (r < 0)
+                return r;
+
+        return 1; /* Return the number of pairs added to the env block */
+}
+
 static const char* const path_type_table[_PATH_TYPE_MAX] = {
-        [PATH_EXISTS] = "PathExists",
-        [PATH_EXISTS_GLOB] = "PathExistsGlob",
+        [PATH_EXISTS]              = "PathExists",
+        [PATH_EXISTS_GLOB]         = "PathExistsGlob",
         [PATH_DIRECTORY_NOT_EMPTY] = "DirectoryNotEmpty",
-        [PATH_CHANGED] = "PathChanged",
-        [PATH_MODIFIED] = "PathModified",
+        [PATH_CHANGED]             = "PathChanged",
+        [PATH_MODIFIED]            = "PathModified",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(path_type, PathType);
 
 static const char* const path_result_table[_PATH_RESULT_MAX] = {
-        [PATH_SUCCESS] = "success",
-        [PATH_FAILURE_RESOURCES] = "resources",
-        [PATH_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
+        [PATH_SUCCESS]                      = "success",
+        [PATH_FAILURE_RESOURCES]            = "resources",
+        [PATH_FAILURE_START_LIMIT_HIT]      = "start-limit-hit",
         [PATH_FAILURE_UNIT_START_LIMIT_HIT] = "unit-start-limit-hit",
+        [PATH_FAILURE_TRIGGER_LIMIT_HIT]    = "trigger-limit-hit",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(path_result, PathResult);
@@ -865,4 +999,16 @@
         .reset_failed = path_reset_failed,
 
         .bus_set_property = bus_path_set_property,
+
+        .can_start = path_can_start,
+};
+
+const ActivationDetailsVTable activation_details_path_vtable = {
+        .object_size = sizeof(ActivationDetailsPath),
+
+        .done = activation_details_path_done,
+        .serialize = activation_details_path_serialize,
+        .deserialize = activation_details_path_deserialize,
+        .append_env = activation_details_path_append_env,
+        .append_pair = activation_details_path_append_pair,
 };
diff --git a/src/core/path.h b/src/core/path.h
index 66ae857..c76103c 100644
--- a/src/core/path.h
+++ b/src/core/path.h
@@ -3,6 +3,7 @@
 
 typedef struct Path Path;
 typedef struct PathSpec PathSpec;
+typedef struct ActivationDetailsPath ActivationDetailsPath;
 
 #include "unit.h"
 
@@ -46,6 +47,7 @@
         PATH_FAILURE_RESOURCES,
         PATH_FAILURE_START_LIMIT_HIT,
         PATH_FAILURE_UNIT_START_LIMIT_HIT,
+        PATH_FAILURE_TRIGGER_LIMIT_HIT,
         _PATH_RESULT_MAX,
         _PATH_RESULT_INVALID = -EINVAL,
 } PathResult;
@@ -61,11 +63,19 @@
         mode_t directory_mode;
 
         PathResult result;
+
+        RateLimit trigger_limit;
+};
+
+struct ActivationDetailsPath {
+        ActivationDetails meta;
+        char *trigger_path_filename;
 };
 
 void path_free_specs(Path *p);
 
 extern const UnitVTable path_vtable;
+extern const ActivationDetailsVTable activation_details_path_vtable;
 
 const char* path_type_to_string(PathType i) _const_;
 PathType path_type_from_string(const char *s) _pure_;
@@ -74,3 +84,4 @@
 PathResult path_result_from_string(const char *s) _pure_;
 
 DEFINE_CAST(PATH, Path);
+DEFINE_ACTIVATION_DETAILS_CAST(ACTIVATION_DETAILS_PATH, ActivationDetailsPath, PATH);
diff --git a/src/core/restrict-ifaces.c b/src/core/restrict-ifaces.c
new file mode 100644
index 0000000..4dd8656
--- /dev/null
+++ b/src/core/restrict-ifaces.c
@@ -0,0 +1,200 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "fd-util.h"
+#include "restrict-ifaces.h"
+#include "netlink-util.h"
+
+#if BPF_FRAMEWORK
+/* libbpf, clang and llc compile time dependencies are satisfied */
+
+#include "bpf-dlopen.h"
+#include "bpf-link.h"
+#include "bpf-util.h"
+#include "bpf/restrict_ifaces/restrict-ifaces-skel.h"
+
+static struct restrict_ifaces_bpf *restrict_ifaces_bpf_free(struct restrict_ifaces_bpf *obj) {
+        restrict_ifaces_bpf__destroy(obj);
+        return NULL;
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(struct restrict_ifaces_bpf *, restrict_ifaces_bpf_free);
+
+static int prepare_restrict_ifaces_bpf(
+                Unit* u,
+                bool is_allow_list,
+                const Set *restrict_network_interfaces,
+                struct restrict_ifaces_bpf **ret_object) {
+
+        _cleanup_(restrict_ifaces_bpf_freep) struct restrict_ifaces_bpf *obj = NULL;
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+        char *iface;
+        int r, map_fd;
+
+        assert(ret_object);
+
+        obj = restrict_ifaces_bpf__open();
+        if (!obj)
+                return log_unit_full_errno(u, u ? LOG_ERR : LOG_DEBUG, errno, "restrict-interfaces: Failed to open BPF object: %m");
+
+        r = sym_bpf_map__set_max_entries(obj->maps.sd_restrictif, MAX(set_size(restrict_network_interfaces), 1u));
+        if (r != 0)
+                return log_unit_full_errno(u, u ? LOG_ERR : LOG_WARNING, r,
+                                "restrict-interfaces: Failed to resize BPF map '%s': %m",
+                                sym_bpf_map__name(obj->maps.sd_restrictif));
+
+        obj->rodata->is_allow_list = is_allow_list;
+
+        r = restrict_ifaces_bpf__load(obj);
+        if (r != 0)
+                return log_unit_full_errno(u, u ? LOG_ERR : LOG_DEBUG, r, "restrict-interfaces: Failed to load BPF object: %m");
+
+        map_fd = sym_bpf_map__fd(obj->maps.sd_restrictif);
+
+        SET_FOREACH(iface, restrict_network_interfaces) {
+                uint8_t dummy = 0;
+                int ifindex;
+
+                ifindex = rtnl_resolve_interface(&rtnl, iface);
+                if (ifindex < 0) {
+                        log_unit_warning_errno(u, ifindex,
+                                               "restrict-interfaces: Couldn't find index of network interface '%s', ignoring: %m",
+                                               iface);
+                        continue;
+                }
+
+                if (sym_bpf_map_update_elem(map_fd, &ifindex, &dummy, BPF_ANY))
+                        return log_unit_full_errno(u, u ? LOG_ERR : LOG_WARNING, errno,
+                                                   "restrict-interfaces: Failed to update BPF map '%s' fd: %m",
+                                                   sym_bpf_map__name(obj->maps.sd_restrictif));
+        }
+
+        *ret_object = TAKE_PTR(obj);
+        return 0;
+}
+
+int restrict_network_interfaces_supported(void) {
+        _cleanup_(restrict_ifaces_bpf_freep) struct restrict_ifaces_bpf *obj = NULL;
+        static int supported = -1;
+        int r;
+
+        if (supported >= 0)
+                return supported;
+
+        if (!cgroup_bpf_supported())
+                return (supported = false);
+
+        if (!compat_libbpf_probe_bpf_prog_type(BPF_PROG_TYPE_CGROUP_SKB, /*opts=*/NULL)) {
+                log_debug("restrict-interfaces: BPF program type cgroup_skb is not supported");
+                return (supported = false);
+        }
+
+        r = prepare_restrict_ifaces_bpf(NULL, true, NULL, &obj);
+        if (r < 0) {
+                log_debug_errno(r, "restrict-interfaces: Failed to load BPF object: %m");
+                return (supported = false);
+        }
+
+        return (supported = bpf_can_link_program(obj->progs.sd_restrictif_i));
+}
+
+static int restrict_network_interfaces_install_impl(Unit *u) {
+        _cleanup_(bpf_link_freep) struct bpf_link *egress_link = NULL, *ingress_link = NULL;
+        _cleanup_(restrict_ifaces_bpf_freep) struct restrict_ifaces_bpf *obj = NULL;
+        _cleanup_free_ char *cgroup_path = NULL;
+        _cleanup_close_ int cgroup_fd = -EBADF;
+        CGroupContext *cc;
+        int r;
+
+        cc = unit_get_cgroup_context(u);
+        if (!cc)
+                return 0;
+
+        r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, NULL, &cgroup_path);
+        if (r < 0)
+                return log_unit_error_errno(u, r, "restrict-interfaces: Failed to get cgroup path: %m");
+
+        if (!cc->restrict_network_interfaces)
+                return 0;
+
+        r = prepare_restrict_ifaces_bpf(u,
+                cc->restrict_network_interfaces_is_allow_list,
+                cc->restrict_network_interfaces,
+                &obj);
+        if (r < 0)
+                return r;
+
+        cgroup_fd = open(cgroup_path, O_RDONLY | O_CLOEXEC | O_DIRECTORY, 0);
+        if (cgroup_fd < 0)
+                return -errno;
+
+        ingress_link = sym_bpf_program__attach_cgroup(obj->progs.sd_restrictif_i, cgroup_fd);
+        r = sym_libbpf_get_error(ingress_link);
+        if (r != 0)
+                return log_unit_error_errno(u, r, "restrict-interfaces: Failed to create ingress cgroup link: %m");
+
+        egress_link = sym_bpf_program__attach_cgroup(obj->progs.sd_restrictif_e, cgroup_fd);
+        r = sym_libbpf_get_error(egress_link);
+        if (r != 0)
+                return log_unit_error_errno(u, r, "restrict-interfaces: Failed to create egress cgroup link: %m");
+
+        u->restrict_ifaces_ingress_bpf_link = TAKE_PTR(ingress_link);
+        u->restrict_ifaces_egress_bpf_link = TAKE_PTR(egress_link);
+
+        return 0;
+}
+
+int restrict_network_interfaces_install(Unit *u) {
+        int r = restrict_network_interfaces_install_impl(u);
+        fdset_close(u->initial_restric_ifaces_link_fds);
+        return r;
+}
+
+int serialize_restrict_network_interfaces(Unit *u, FILE *f, FDSet *fds) {
+        int r;
+
+        assert(u);
+
+        r = bpf_serialize_link(f, fds, "restrict-ifaces-bpf-fd", u->restrict_ifaces_ingress_bpf_link);
+        if (r < 0)
+                return r;
+
+        return bpf_serialize_link(f, fds, "restrict-ifaces-bpf-fd", u->restrict_ifaces_egress_bpf_link);
+}
+
+int restrict_network_interfaces_add_initial_link_fd(Unit *u, int fd) {
+        int r;
+
+        assert(u);
+
+        if (!u->initial_restric_ifaces_link_fds) {
+                u->initial_restric_ifaces_link_fds = fdset_new();
+                if (!u->initial_restric_ifaces_link_fds)
+                        return log_oom();
+        }
+
+        r = fdset_put(u->initial_restric_ifaces_link_fds, fd);
+        if (r < 0)
+                return log_unit_error_errno(u, r,
+                        "restrict-interfaces: Failed to put restrict-ifaces-bpf-fd %d to restored fdset: %m", fd);
+
+        return 0;
+}
+
+#else /* ! BPF_FRAMEWORK */
+int restrict_network_interfaces_supported(void) {
+        return 0;
+}
+
+int restrict_network_interfaces_install(Unit *u) {
+        return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                        "restrict-interfaces: Failed to install; BPF programs built from source code are not supported: %m");
+}
+
+int serialize_restrict_network_interfaces(Unit *u, FILE *f, FDSet *fds) {
+        return 0;
+}
+
+int restrict_network_interfaces_add_initial_link_fd(Unit *u, int fd) {
+        return 0;
+}
+#endif
diff --git a/src/core/restrict-ifaces.h b/src/core/restrict-ifaces.h
new file mode 100644
index 0000000..6e7a824
--- /dev/null
+++ b/src/core/restrict-ifaces.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "fdset.h"
+#include "unit.h"
+
+typedef struct Unit Unit;
+
+int restrict_network_interfaces_supported(void);
+int restrict_network_interfaces_install(Unit *u);
+
+int serialize_restrict_network_interfaces(Unit *u, FILE *f, FDSet *fds);
+
+/* Add BPF link fd created before daemon-reload or daemon-reexec.
+ * FDs will be closed at the end of restrict_network_interfaces_install. */
+int restrict_network_interfaces_add_initial_link_fd(Unit *u, int fd);
diff --git a/src/core/scope.c b/src/core/scope.c
index fd4367d..914d1cc 100644
--- a/src/core/scope.c
+++ b/src/core/scope.c
@@ -6,9 +6,11 @@
 #include "alloc-util.h"
 #include "dbus-scope.h"
 #include "dbus-unit.h"
+#include "exit-status.h"
 #include "load-dropin.h"
 #include "log.h"
 #include "process-util.h"
+#include "random-util.h"
 #include "scope.h"
 #include "serialize.h"
 #include "special.h"
@@ -17,9 +19,11 @@
 #include "strv.h"
 #include "unit-name.h"
 #include "unit.h"
+#include "user-util.h"
 
 static const UnitActiveState state_translation_table[_SCOPE_STATE_MAX] = {
         [SCOPE_DEAD] = UNIT_INACTIVE,
+        [SCOPE_START_CHOWN] = UNIT_ACTIVATING,
         [SCOPE_RUNNING] = UNIT_ACTIVE,
         [SCOPE_ABANDONED] = UNIT_ACTIVE,
         [SCOPE_STOP_SIGTERM] = UNIT_DEACTIVATING,
@@ -38,6 +42,8 @@
         s->runtime_max_usec = USEC_INFINITY;
         s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
         u->ignore_on_isolate = true;
+        s->user = s->group = NULL;
+        s->oom_policy = _OOM_POLICY_INVALID;
 }
 
 static void scope_done(Unit *u) {
@@ -49,6 +55,24 @@
         s->controller_track = sd_bus_track_unref(s->controller_track);
 
         s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source);
+
+        s->user = mfree(s->user);
+        s->group = mfree(s->group);
+}
+
+static usec_t scope_running_timeout(Scope *s) {
+        usec_t delta = 0;
+
+        assert(s);
+
+        if (s->runtime_rand_extra_usec != 0) {
+                delta = random_u64_range(s->runtime_rand_extra_usec);
+                log_unit_debug(UNIT(s), "Adding delta of %s sec to timeout", FORMAT_TIMESPAN(delta, USEC_PER_SEC));
+        }
+
+        return usec_add(usec_add(UNIT(s)->active_enter_timestamp.monotonic,
+                                 s->runtime_max_usec),
+                        delta);
 }
 
 static int scope_arm_timer(Scope *s, usec_t usec) {
@@ -91,7 +115,7 @@
         old_state = s->state;
         s->state = state;
 
-        if (!IN_SET(state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL))
+        if (!IN_SET(state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL, SCOPE_START_CHOWN))
                 s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source);
 
         if (IN_SET(state, SCOPE_DEAD, SCOPE_FAILED)) {
@@ -171,6 +195,11 @@
         if (r < 0)
                 return r;
 
+        if (s->oom_policy < 0)
+                s->oom_policy = s->cgroup_context.delegate ? OOM_CONTINUE : UNIT(s)->manager->default_oom_policy;
+
+        s->cgroup_context.memory_oom_group = s->oom_policy == OOM_KILL;
+
         return scope_add_default_dependencies(s);
 }
 
@@ -209,7 +238,7 @@
         switch (s->deserialized_state) {
 
         case SCOPE_RUNNING:
-                return usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec);
+                return scope_running_timeout(s);
 
         case SCOPE_STOP_SIGKILL:
         case SCOPE_STOP_SIGTERM:
@@ -255,7 +284,6 @@
 
 static void scope_dump(Unit *u, FILE *f, const char *prefix) {
         Scope *s = SCOPE(u);
-        char buf_runtime[FORMAT_TIMESPAN_MAX];
 
         assert(s);
         assert(f);
@@ -263,10 +291,14 @@
         fprintf(f,
                 "%sScope State: %s\n"
                 "%sResult: %s\n"
-                "%sRuntimeMaxSec: %s\n",
+                "%sRuntimeMaxSec: %s\n"
+                "%sRuntimeRandomizedExtraSec: %s\n"
+                "%sOOMPolicy: %s\n",
                 prefix, scope_state_to_string(s->state),
                 prefix, scope_result_to_string(s->result),
-                prefix, format_timespan(buf_runtime, sizeof(buf_runtime), s->runtime_max_usec, USEC_PER_SEC));
+                prefix, FORMAT_TIMESPAN(s->runtime_max_usec, USEC_PER_SEC),
+                prefix, FORMAT_TIMESPAN(s->runtime_rand_extra_usec, USEC_PER_SEC),
+                prefix, oom_policy_to_string(s->oom_policy));
 
         cgroup_context_dump(UNIT(s), f, prefix);
         kill_context_dump(&s->kill_context, f, prefix);
@@ -336,9 +368,114 @@
         scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
 }
 
+static int scope_enter_start_chown(Scope *s) {
+        Unit *u = UNIT(s);
+        pid_t pid;
+        int r;
+
+        assert(s);
+        assert(s->user);
+
+        r = scope_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), u->manager->default_timeout_start_usec));
+        if (r < 0)
+                return r;
+
+        r = unit_fork_helper_process(u, "(sd-chown-cgroup)", &pid);
+        if (r < 0)
+                goto fail;
+
+        if (r == 0) {
+                uid_t uid = UID_INVALID;
+                gid_t gid = GID_INVALID;
+
+                if (!isempty(s->user)) {
+                        const char *user = s->user;
+
+                        r = get_user_creds(&user, &uid, &gid, NULL, NULL, 0);
+                        if (r < 0) {
+                                log_unit_error_errno(UNIT(s), r, "Failed to resolve user \"%s\": %m", user);
+                                _exit(EXIT_USER);
+                        }
+                }
+
+                if (!isempty(s->group)) {
+                        const char *group = s->group;
+
+                        r = get_group_creds(&group, &gid, 0);
+                        if (r < 0) {
+                                log_unit_error_errno(UNIT(s), r, "Failed to resolve group \"%s\": %m", group);
+                                _exit(EXIT_GROUP);
+                        }
+                }
+
+                r = cg_set_access(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, uid, gid);
+                if (r < 0) {
+                        log_unit_error_errno(UNIT(s), r, "Failed to adjust control group access: %m");
+                        _exit(EXIT_CGROUP);
+                }
+
+                _exit(EXIT_SUCCESS);
+        }
+
+        r = unit_watch_pid(UNIT(s), pid, true);
+        if (r < 0)
+                goto fail;
+
+        scope_set_state(s, SCOPE_START_CHOWN);
+
+        return 1;
+fail:
+        s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source);
+        return r;
+}
+
+static int scope_enter_running(Scope *s) {
+        Unit *u = UNIT(s);
+        int r;
+
+        assert(s);
+
+        (void) bus_scope_track_controller(s);
+
+        r = unit_acquire_invocation_id(u);
+        if (r < 0)
+                return r;
+
+        unit_export_state_files(u);
+
+        r = unit_attach_pids_to_cgroup(u, u->pids, NULL);
+        if (r < 0) {
+                log_unit_warning_errno(u, r, "Failed to add PIDs to scope's control group: %m");
+                scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
+                return r;
+        }
+        if (r == 0) {
+                log_unit_warning(u, "No PIDs left to attach to the scope's control group, refusing.");
+                scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
+                return -ECHILD;
+        }
+        log_unit_debug(u, "%i %s added to scope's control group.", r, r == 1 ? "process" : "processes");
+
+        s->result = SCOPE_SUCCESS;
+
+        scope_set_state(s, SCOPE_RUNNING);
+
+        /* Set the maximum runtime timeout. */
+        scope_arm_timer(s, scope_running_timeout(s));
+
+        /* On unified we use proper notifications hence we can unwatch the PIDs
+         * we just attached to the scope. This can also be done on legacy as
+         * we're going to update the list of the processes we watch with the
+         * PIDs currently in the scope anyway. */
+        unit_unwatch_all_pids(u);
+
+        /* Start watching the PIDs currently in the scope (legacy hierarchy only) */
+        (void) unit_enqueue_rewatch_pids(u);
+        return 1;
+}
+
 static int scope_start(Unit *u) {
         Scope *s = SCOPE(u);
-        int r;
 
         assert(s);
 
@@ -357,46 +494,15 @@
         if (!u->transient && !MANAGER_IS_RELOADING(u->manager))
                 return -ENOENT;
 
-        (void) bus_scope_track_controller(s);
-
-        r = unit_acquire_invocation_id(u);
-        if (r < 0)
-                return r;
-
         (void) unit_realize_cgroup(u);
         (void) unit_reset_accounting(u);
 
-        unit_export_state_files(u);
+        /* We check only for User= option to keep behavior consistent with logic for service units,
+         * i.e. having 'Delegate=true Group=foo' w/o specifying User= has no effect. */
+        if (s->user && unit_cgroup_delegate(u))
+                return scope_enter_start_chown(s);
 
-        r = unit_attach_pids_to_cgroup(u, u->pids, NULL);
-        if (r < 0) {
-                log_unit_warning_errno(u, r, "Failed to add PIDs to scope's control group: %m");
-                scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
-                return r;
-        }
-        if (r == 0) {
-                log_unit_warning(u, "No PIDs left to attach to the scope's control group, refusing: %m");
-                scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
-                return -ECHILD;
-        }
-        log_unit_debug(u, "%i %s added to scope's control group.", r, r == 1 ? "process" : "processes");
-
-        s->result = SCOPE_SUCCESS;
-
-        scope_set_state(s, SCOPE_RUNNING);
-
-        /* Set the maximum runtime timeout. */
-        scope_arm_timer(s, usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec));
-
-        /* On unified we use proper notifications hence we can unwatch the PIDs
-         * we just attached to the scope. This can also be done on legacy as
-         * we're going to update the list of the processes we watch with the
-         * PIDs currently in the scope anyway. */
-        unit_unwatch_all_pids(u);
-
-        /* Start watching the PIDs currently in the scope (legacy hierarchy only) */
-        (void) unit_enqueue_rewatch_pids(u);
-        return 1;
+        return scope_enter_running(s);
 }
 
 static int scope_stop(Unit *u) {
@@ -529,8 +635,50 @@
                 unit_prune_cgroup(u);
 }
 
+static void scope_notify_cgroup_oom_event(Unit *u, bool managed_oom) {
+        Scope *s = SCOPE(u);
+
+        if (managed_oom)
+                log_unit_debug(u, "Process(es) of control group were killed by systemd-oomd.");
+        else
+                log_unit_debug(u, "Process of control group was killed by the OOM killer.");
+
+        if (s->oom_policy == OOM_CONTINUE)
+                return;
+
+        switch (s->state) {
+
+        case SCOPE_START_CHOWN:
+        case SCOPE_RUNNING:
+                scope_enter_signal(s, SCOPE_STOP_SIGTERM, SCOPE_FAILURE_OOM_KILL);
+                break;
+
+        case SCOPE_STOP_SIGTERM:
+                scope_enter_signal(s, SCOPE_STOP_SIGKILL, SCOPE_FAILURE_OOM_KILL);
+                break;
+
+        case SCOPE_STOP_SIGKILL:
+                if (s->result == SCOPE_SUCCESS)
+                        s->result = SCOPE_FAILURE_OOM_KILL;
+                break;
+        /* SCOPE_DEAD, SCOPE_ABANDONED, and SCOPE_FAILED end up in default */
+        default:
+                ;
+        }
+}
+
 static void scope_sigchld_event(Unit *u, pid_t pid, int code, int status) {
-        assert(u);
+        Scope *s = SCOPE(u);
+
+        assert(s);
+
+        if (s->state == SCOPE_START_CHOWN) {
+                if (!is_clean_exit(code, status, EXIT_CLEAN_COMMAND, NULL))
+                        scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
+                else
+                        scope_enter_running(s);
+                return;
+        }
 
         /* If we get a SIGCHLD event for one of the processes we were interested in, then we look for others to
          * watch, under the assumption that we'll sooner or later get a SIGCHLD for them, as the original
@@ -568,8 +716,13 @@
                 scope_enter_dead(s, SCOPE_FAILURE_TIMEOUT);
                 break;
 
+        case SCOPE_START_CHOWN:
+                log_unit_warning(UNIT(s), "User lookup timed out. Entering failed state.");
+                scope_enter_dead(s, SCOPE_FAILURE_TIMEOUT);
+                break;
+
         default:
-                assert_not_reached("Timeout at wrong time.");
+                assert_not_reached();
         }
 
         return 0;
@@ -636,12 +789,17 @@
 
         unit_add_to_load_queue(u);
         unit_add_to_dbus_queue(u);
+        /* Enqueue an explicit cgroup realization here. Unlike other cgroups this one already exists and is
+         * populated (by us, after all!) already, even when we are not in a reload cycle. Hence we cannot
+         * apply the settings at creation time anymore, but let's at least apply them asynchronously. */
+        unit_add_to_cgroup_realize_queue(u);
 }
 
 static const char* const scope_result_table[_SCOPE_RESULT_MAX] = {
-        [SCOPE_SUCCESS] = "success",
+        [SCOPE_SUCCESS]           = "success",
         [SCOPE_FAILURE_RESOURCES] = "resources",
-        [SCOPE_FAILURE_TIMEOUT] = "timeout",
+        [SCOPE_FAILURE_TIMEOUT]   = "timeout",
+        [SCOPE_FAILURE_OOM_KILL]  = "oom-kill",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(scope_result, ScopeResult);
@@ -692,6 +850,7 @@
         .reset_failed = scope_reset_failed,
 
         .notify_cgroup_empty = scope_notify_cgroup_empty_event,
+        .notify_cgroup_oom = scope_notify_cgroup_oom_event,
 
         .bus_set_property = bus_scope_set_property,
         .bus_commit_properties = bus_scope_commit_properties,
diff --git a/src/core/scope.h b/src/core/scope.h
index 0b0e1f8..c9574a3 100644
--- a/src/core/scope.h
+++ b/src/core/scope.h
@@ -11,6 +11,7 @@
         SCOPE_SUCCESS,
         SCOPE_FAILURE_RESOURCES,
         SCOPE_FAILURE_TIMEOUT,
+        SCOPE_FAILURE_OOM_KILL,
         _SCOPE_RESULT_MAX,
         _SCOPE_RESULT_INVALID = -EINVAL,
 } ScopeResult;
@@ -25,6 +26,7 @@
         ScopeResult result;
 
         usec_t runtime_max_usec;
+        usec_t runtime_rand_extra_usec;
         usec_t timeout_stop_usec;
 
         char *controller;
@@ -33,6 +35,11 @@
         bool was_abandoned;
 
         sd_event_source *timer_event_source;
+
+        char *user;
+        char *group;
+
+        OOMPolicy oom_policy;
 };
 
 extern const UnitVTable scope_vtable;
diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
index d077d5d..62181a6 100644
--- a/src/core/selinux-access.c
+++ b/src/core/selinux-access.c
@@ -23,7 +23,6 @@
 #include "selinux-util.h"
 #include "stdio-util.h"
 #include "strv.h"
-#include "util.h"
 
 static bool initialized = false;
 
@@ -31,6 +30,7 @@
         sd_bus_creds *creds;
         const char *path;
         const char *cmdline;
+        const char *function;
 };
 
 /*
@@ -57,17 +57,18 @@
         if (sd_bus_creds_get_egid(audit->creds, &gid) >= 0)
                 xsprintf(gid_buf, GID_FMT, gid);
 
-        snprintf(msgbuf, msgbufsize,
-                 "auid=%s uid=%s gid=%s%s%s%s%s%s%s",
-                 login_uid_buf, uid_buf, gid_buf,
-                 audit->path ? " path=\"" : "", strempty(audit->path), audit->path ? "\"" : "",
-                 audit->cmdline ? " cmdline=\"" : "", strempty(audit->cmdline), audit->cmdline ? "\"" : "");
+        (void) snprintf(msgbuf, msgbufsize,
+                        "auid=%s uid=%s gid=%s%s%s%s%s%s%s%s%s%s",
+                        login_uid_buf, uid_buf, gid_buf,
+                        audit->path ? " path=\"" : "", strempty(audit->path), audit->path ? "\"" : "",
+                        audit->cmdline ? " cmdline=\"" : "", strempty(audit->cmdline), audit->cmdline ? "\"" : "",
+                        audit->function ? " function=\"" : "", strempty(audit->function), audit->function ? "\"" : "");
 
         return 0;
 }
 
 static int callback_type_to_priority(int type) {
-        switch(type) {
+        switch (type) {
 
         case SELINUX_ERROR:
                 return LOG_ERR;
@@ -111,9 +112,9 @@
 
                 if (r >= 0) {
                         if (type == SELINUX_AVC)
-                                audit_log_user_avc_message(get_audit_fd(), AUDIT_USER_AVC, buf, NULL, NULL, NULL, 0);
+                                audit_log_user_avc_message(get_audit_fd(), AUDIT_USER_AVC, buf, NULL, NULL, NULL, getuid());
                         else if (type == SELINUX_ERROR)
-                                audit_log_user_avc_message(get_audit_fd(), AUDIT_USER_SELINUX_ERR, buf, NULL, NULL, NULL, 0);
+                                audit_log_user_avc_message(get_audit_fd(), AUDIT_USER_SELINUX_ERR, buf, NULL, NULL, NULL, getuid());
 
                         return 0;
                 }
@@ -126,7 +127,7 @@
 
         DISABLE_WARNING_FORMAT_NONLITERAL;
         log_internalv(LOG_AUTH | callback_type_to_priority(type),
-                      0, PROJECT_FILE, __LINE__, __FUNCTION__,
+                      0, PROJECT_FILE, __LINE__, __func__,
                       fmt2, ap);
         REENABLE_WARNING;
         va_end(ap);
@@ -135,6 +136,7 @@
 }
 
 static int access_init(sd_bus_error *error) {
+        int r;
 
         if (!mac_selinux_use())
                 return 0;
@@ -143,23 +145,20 @@
                 return 1;
 
         if (avc_open(NULL, 0) != 0) {
-                int saved_errno = errno;
-                bool enforce;
+                r = -errno;  /* Save original errno for later */
 
-                enforce = security_getenforce() != 0;
-                log_full_errno(enforce ? LOG_ERR : LOG_WARNING, saved_errno, "Failed to open the SELinux AVC: %m");
+                bool enforce = security_getenforce() != 0;
+                log_full_errno(enforce ? LOG_ERR : LOG_WARNING, r, "Failed to open the SELinux AVC: %m");
 
-                /* If enforcement isn't on, then let's suppress this
-                 * error, and just don't do any AVC checks. The
-                 * warning we printed is hence all the admin will
-                 * see. */
+                /* If enforcement isn't on, then let's suppress this error, and just don't do any AVC checks.
+                 * The warning we printed is hence all the admin will see. */
                 if (!enforce)
                         return 0;
 
-                /* Return an access denied error, if we couldn't load
-                 * the AVC but enforcing mode was on, or we couldn't
-                 * determine whether it is one. */
-                return sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "Failed to open the SELinux AVC: %s", strerror_safe(saved_errno));
+                /* Return an access denied error based on the original errno, if we couldn't load the AVC but
+                 * enforcing mode was on, or we couldn't determine whether it is one. */
+                errno = -r;
+                return sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "Failed to open the SELinux AVC: %m");
         }
 
         selinux_set_callback(SELINUX_CB_AUDIT, (union selinux_callback) { .func_audit = audit_callback });
@@ -175,14 +174,16 @@
    If the machine is in permissive mode it will return ok.  Audit messages will
    still be generated if the access would be denied in enforcing mode.
 */
-int mac_selinux_generic_access_check(
+int mac_selinux_access_check_internal(
                 sd_bus_message *message,
-                const char *path,
+                const char *unit_path,
+                const char *unit_context,
                 const char *permission,
+                const char *function,
                 sd_bus_error *error) {
 
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
-        const char *tclass, *scon;
+        const char *tclass, *scon, *acon;
         _cleanup_free_ char *cl = NULL;
         _cleanup_freecon_ char *fcon = NULL;
         char **cmdline = NULL;
@@ -191,6 +192,7 @@
 
         assert(message);
         assert(permission);
+        assert(function);
         assert(error);
 
         r = access_init(error);
@@ -210,49 +212,39 @@
         if (r < 0)
                 return r;
 
-        /* The SELinux context is something we really should have
-         * gotten directly from the message or sender, and not be an
-         * augmented field. If it was augmented we cannot use it for
-         * authorization, since this is racy and vulnerable. Let's add
-         * an extra check, just in case, even though this really
-         * shouldn't be possible. */
+        /* The SELinux context is something we really should have gotten directly from the message or sender,
+         * and not be an augmented field. If it was augmented we cannot use it for authorization, since this
+         * is racy and vulnerable. Let's add an extra check, just in case, even though this really shouldn't
+         * be possible. */
         assert_return((sd_bus_creds_get_augmented_mask(creds) & SD_BUS_CREDS_SELINUX_CONTEXT) == 0, -EPERM);
 
         r = sd_bus_creds_get_selinux_context(creds, &scon);
         if (r < 0)
                 return r;
 
-        if (path) {
-                /* Get the file context of the unit file */
-
-                if (getfilecon_raw(path, &fcon) < 0) {
-                        r = -errno;
-
-                        log_warning_errno(r, "SELinux getfilecon_raw() on '%s' failed%s (perm=%s): %m",
-                                          path,
-                                          enforce ? "" : ", ignoring",
-                                          permission);
-                        if (!enforce)
-                                return 0;
-
-                        return sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "Failed to get file context on %s.", path);
-                }
-
+        if (unit_context) {
+                /* Nice! The unit comes with a SELinux context read from the unit file */
+                acon = unit_context;
                 tclass = "service";
-
         } else {
+                /* If no unit context is known, use our own */
                 if (getcon_raw(&fcon) < 0) {
-                        r = -errno;
-
-                        log_warning_errno(r, "SELinux getcon_raw() failed%s (perm=%s): %m",
+                        log_warning_errno(errno, "SELinux getcon_raw() failed%s (perm=%s): %m",
                                           enforce ? "" : ", ignoring",
                                           permission);
                         if (!enforce)
                                 return 0;
 
-                        return sd_bus_error_set(error, SD_BUS_ERROR_ACCESS_DENIED, "Failed to get current context.");
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "Failed to get current context: %m");
+                }
+                if (!fcon) {
+                        if (!enforce)
+                                return 0;
+
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "We appear not to have any SELinux context: %m");
                 }
 
+                acon = fcon;
                 tclass = "system";
         }
 
@@ -261,30 +253,33 @@
 
         struct audit_info audit_info = {
                 .creds = creds,
-                .path = path,
+                .path = unit_path,
                 .cmdline = cl,
+                .function = function,
         };
 
-        r = selinux_check_access(scon, fcon, tclass, permission, &audit_info);
+        r = selinux_check_access(scon, acon, tclass, permission, &audit_info);
         if (r < 0) {
-                r = errno_or_else(EPERM);
+                errno = -(r = errno_or_else(EPERM));
 
                 if (enforce)
-                        sd_bus_error_set(error, SD_BUS_ERROR_ACCESS_DENIED, "SELinux policy denies access.");
+                        sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "SELinux policy denies access: %m");
         }
 
         log_full_errno_zerook(LOG_DEBUG, r,
-                              "SELinux access check scon=%s tcon=%s tclass=%s perm=%s state=%s path=%s cmdline=%s: %m",
-                              scon, fcon, tclass, permission, enforce ? "enforcing" : "permissive", path, cl);
+                              "SELinux access check scon=%s tcon=%s tclass=%s perm=%s state=%s function=%s path=%s cmdline=%s: %m",
+                              scon, acon, tclass, permission, enforce ? "enforcing" : "permissive", function, strna(unit_path), strna(empty_to_null(cl)));
         return enforce ? r : 0;
 }
 
 #else /* HAVE_SELINUX */
 
-int mac_selinux_generic_access_check(
+int mac_selinux_access_check_internal(
                 sd_bus_message *message,
-                const char *path,
+                const char *unit_path,
+                const char *unit_label,
                 const char *permission,
+                const char *function,
                 sd_bus_error *error) {
 
         return 0;
diff --git a/src/core/selinux-access.h b/src/core/selinux-access.h
index c6bfb32..dc8da9e 100644
--- a/src/core/selinux-access.h
+++ b/src/core/selinux-access.h
@@ -5,10 +5,10 @@
 
 #include "manager.h"
 
-int mac_selinux_generic_access_check(sd_bus_message *message, const char *path, const char *permission, sd_bus_error *error);
+int mac_selinux_access_check_internal(sd_bus_message *message, const char *unit_path, const char *unit_label, const char *permission, const char *function, sd_bus_error *error);
 
 #define mac_selinux_access_check(message, permission, error) \
-        mac_selinux_generic_access_check((message), NULL, (permission), (error))
+        mac_selinux_access_check_internal((message), NULL, NULL, (permission), __func__, (error))
 
 #define mac_selinux_unit_access_check(unit, message, permission, error) \
-        mac_selinux_generic_access_check((message), unit_label_path(unit), (permission), (error))
+        mac_selinux_access_check_internal((message), (unit)->fragment_path, (unit)->access_selinux_context, (permission), __func__, (error))
diff --git a/src/core/selinux-setup.c b/src/core/selinux-setup.c
index 2bafbee..17fa2c0 100644
--- a/src/core/selinux-setup.c
+++ b/src/core/selinux-setup.c
@@ -8,13 +8,13 @@
 #include <selinux/selinux.h>
 #endif
 
+#include "initrd-util.h"
 #include "log.h"
 #include "macro.h"
 #include "selinux-setup.h"
 #include "selinux-util.h"
 #include "string-util.h"
 #include "time-util.h"
-#include "util.h"
 
 #if HAVE_SELINUX
 _printf_(2,3)
@@ -30,30 +30,28 @@
         usec_t before_load, after_load;
         char *con;
         int r;
-        bool initialized = false;
+        bool initialized;
 
         assert(loaded_policy);
 
         /* Turn off all of SELinux' own logging, we want to do that */
-        selinux_set_callback(SELINUX_CB_LOG, (union selinux_callback) { .func_log = null_log });
+        selinux_set_callback(SELINUX_CB_LOG, (const union selinux_callback) { .func_log = null_log });
 
-        /* Don't load policy in the initrd if we don't appear to have
-         * it.  For the real root, we check below if we've already
-         * loaded policy, and return gracefully.
-         */
+        /* Don't load policy in the initrd if we don't appear to have it.  For the real root, we check below
+         * if we've already loaded policy, and return gracefully. */
         if (in_initrd() && access(selinux_path(), F_OK) < 0)
                 return 0;
 
         /* Already initialized by somebody else? */
         r = getcon_raw(&con);
-        /* getcon_raw can return 0, and still give us a NULL pointer if
-         * /proc/self/attr/current is empty. SELinux guarantees this won't
-         * happen, but that file isn't specific to SELinux, and may be provided
-         * by some other arbitrary LSM with different semantics. */
+        /* getcon_raw can return 0, and still give us a NULL pointer if /proc/self/attr/current is
+         * empty. SELinux guarantees this won't happen, but that file isn't specific to SELinux, and may be
+         * provided by some other arbitrary LSM with different semantics. */
         if (r == 0 && con) {
                 initialized = !streq(con, "kernel");
                 freecon(con);
-        }
+        } else
+                initialized = false;
 
         /* Make sure we have no fds open while loading the policy and
          * transitioning */
@@ -64,7 +62,6 @@
         r = selinux_init_load_policy(&enforce);
         if (r == 0) {
                 _cleanup_(mac_selinux_freep) char *label = NULL;
-                char timespan[FORMAT_TIMESPAN_MAX];
 
                 mac_selinux_retest();
 
@@ -84,7 +81,7 @@
                 after_load = now(CLOCK_MONOTONIC);
 
                 log_info("Successfully loaded SELinux policy in %s.",
-                         format_timespan(timespan, sizeof(timespan), after_load - before_load, 0));
+                         FORMAT_TIMESPAN(after_load - before_load, 0));
 
                 *loaded_policy = true;
 
diff --git a/src/core/service.c b/src/core/service.c
index 21bf3dc..9ad3c3d 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -12,23 +12,25 @@
 #include "bus-error.h"
 #include "bus-kernel.h"
 #include "bus-util.h"
+#include "chase-symlinks.h"
+#include "constants.h"
 #include "dbus-service.h"
 #include "dbus-unit.h"
-#include "def.h"
 #include "env-util.h"
 #include "escape.h"
 #include "exit-status.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
-#include "fs-util.h"
 #include "load-dropin.h"
 #include "load-fragment.h"
 #include "log.h"
 #include "manager.h"
+#include "open-file.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
+#include "random-util.h"
 #include "serialize.h"
 #include "service.h"
 #include "signal-util.h"
@@ -40,7 +42,8 @@
 #include "unit-name.h"
 #include "unit.h"
 #include "utf8.h"
-#include "util.h"
+
+#define service_spawn(...) service_spawn_internal(__func__, __VA_ARGS__)
 
 static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
         [SERVICE_DEAD] = UNIT_INACTIVE,
@@ -51,6 +54,8 @@
         [SERVICE_RUNNING] = UNIT_ACTIVE,
         [SERVICE_EXITED] = UNIT_ACTIVE,
         [SERVICE_RELOAD] = UNIT_RELOADING,
+        [SERVICE_RELOAD_SIGNAL] = UNIT_RELOADING,
+        [SERVICE_RELOAD_NOTIFY] = UNIT_RELOADING,
         [SERVICE_STOP] = UNIT_DEACTIVATING,
         [SERVICE_STOP_WATCHDOG] = UNIT_DEACTIVATING,
         [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
@@ -75,6 +80,8 @@
         [SERVICE_RUNNING] = UNIT_ACTIVE,
         [SERVICE_EXITED] = UNIT_ACTIVE,
         [SERVICE_RELOAD] = UNIT_RELOADING,
+        [SERVICE_RELOAD_SIGNAL] = UNIT_RELOADING,
+        [SERVICE_RELOAD_NOTIFY] = UNIT_RELOADING,
         [SERVICE_STOP] = UNIT_DEACTIVATING,
         [SERVICE_STOP_WATCHDOG] = UNIT_DEACTIVATING,
         [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
@@ -109,8 +116,8 @@
         s->restart_usec = u->manager->default_restart_usec;
         s->runtime_max_usec = USEC_INFINITY;
         s->type = _SERVICE_TYPE_INVALID;
-        s->socket_fd = -1;
-        s->stdin_fd = s->stdout_fd = s->stderr_fd = -1;
+        s->socket_fd = -EBADF;
+        s->stdin_fd = s->stdout_fd = s->stderr_fd = -EBADF;
         s->guess_main_pid = true;
 
         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
@@ -121,6 +128,8 @@
         s->watchdog_original_usec = USEC_INFINITY;
 
         s->oom_policy = _OOM_POLICY_INVALID;
+        s->reload_begin_usec = USEC_INFINITY;
+        s->reload_signal = SIGHUP;
 }
 
 static void service_unwatch_control_pid(Service *s) {
@@ -129,8 +138,7 @@
         if (s->control_pid <= 0)
                 return;
 
-        unit_unwatch_pid(UNIT(s), s->control_pid);
-        s->control_pid = 0;
+        unit_unwatch_pid(UNIT(s), TAKE_PID(s->control_pid));
 }
 
 static void service_unwatch_main_pid(Service *s) {
@@ -139,8 +147,7 @@
         if (s->main_pid <= 0)
                 return;
 
-        unit_unwatch_pid(UNIT(s), s->main_pid);
-        s->main_pid = 0;
+        unit_unwatch_pid(UNIT(s), TAKE_PID(s->main_pid));
 }
 
 static void service_unwatch_pid_file(Service *s) {
@@ -191,6 +198,8 @@
                 socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
                 unit_ref_unset(&s->accept_socket);
         }
+
+        s->socket_peer = socket_peer_unref(s->socket_peer);
 }
 
 static void service_stop_watchdog(Service *s) {
@@ -207,7 +216,7 @@
         assert(s);
 
         watchdog_usec = service_get_watchdog_usec(s);
-        if (IN_SET(watchdog_usec, 0, USEC_INFINITY)) {
+        if (!timestamp_is_set(watchdog_usec)) {
                 service_stop_watchdog(s);
                 return;
         }
@@ -269,7 +278,7 @@
         if (r < 0) {
                 const char *desc;
                 (void) sd_event_source_get_description(s->timer_event_source, &desc);
-                log_unit_warning_errno(UNIT(s), r, "Failed to set timeout time for even source '%s', ignoring %m", strna(desc));
+                log_unit_warning_errno(UNIT(s), r, "Failed to set timeout time for event source '%s', ignoring %m", strna(desc));
         }
 }
 
@@ -278,7 +287,7 @@
 
         assert(s);
 
-        if (IN_SET(extend_timeout_usec, 0, USEC_INFINITY))
+        if (!timestamp_is_set(extend_timeout_usec))
                 return;
 
         extended = usec_add(now(CLOCK_MONOTONIC), extend_timeout_usec);
@@ -358,6 +367,8 @@
 
         assert(s);
 
+        open_file_free_many(&s->open_files);
+
         s->pid_file = mfree(s->pid_file);
         s->status_text = mfree(s->status_text);
 
@@ -389,7 +400,6 @@
         s->usb_function_strings = mfree(s->usb_function_strings);
 
         service_close_socket_fd(s);
-        s->peer = socket_peer_unref(s->peer);
 
         unit_ref_unset(&s->accept_socket);
 
@@ -404,10 +414,9 @@
 }
 
 static int on_fd_store_io(sd_event_source *e, int fd, uint32_t revents, void *userdata) {
-        ServiceFDStore *fs = userdata;
+        ServiceFDStore *fs = ASSERT_PTR(userdata);
 
         assert(e);
-        assert(fs);
 
         /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
         log_unit_debug(UNIT(fs->service),
@@ -432,8 +441,8 @@
                                  * Use this errno rather than E[NM]FILE to distinguish from
                                  * the case where systemd itself hits the file limit. */
 
-        LIST_FOREACH(fd_store, fs, s->fd_store) {
-                r = same_fd(fs->fd, fd);
+        LIST_FOREACH(fd_store, i, s->fd_store) {
+                r = same_fd(i->fd, fd);
                 if (r < 0)
                         return r;
                 if (r > 0) {
@@ -480,7 +489,7 @@
         assert(s);
 
         while (fdset_size(fds) > 0) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 fd = fdset_steal_first(fds);
                 if (fd < 0)
@@ -494,20 +503,18 @@
                 if (r < 0)
                         return log_unit_error_errno(UNIT(s), r, "Failed to add fd to store: %m");
                 if (r > 0)
-                        log_unit_debug(UNIT(s), "Added fd %u (%s) to fd store.", fd, strna(name));
-                fd = -1;
+                        log_unit_debug(UNIT(s), "Added fd %i (%s) to fd store.", fd, strna(name));
+                fd = -EBADF;
         }
 
         return 0;
 }
 
 static void service_remove_fd_store(Service *s, const char *name) {
-        ServiceFDStore *fs, *n;
-
         assert(s);
         assert(name);
 
-        LIST_FOREACH_SAFE(fd_store, fs, n, s->fd_store) {
+        LIST_FOREACH(fd_store, fs, s->fd_store) {
                 if (!streq(fs->fdname, name))
                         continue;
 
@@ -516,13 +523,28 @@
         }
 }
 
-static int service_arm_timer(Service *s, usec_t usec) {
+static usec_t service_running_timeout(Service *s) {
+        usec_t delta = 0;
+
+        assert(s);
+
+        if (s->runtime_rand_extra_usec != 0) {
+                delta = random_u64_range(s->runtime_rand_extra_usec);
+                log_unit_debug(UNIT(s), "Adding delta of %s sec to timeout", FORMAT_TIMESPAN(delta, USEC_PER_SEC));
+        }
+
+        return usec_add(usec_add(UNIT(s)->active_enter_timestamp.monotonic,
+                                 s->runtime_max_usec),
+                        delta);
+}
+
+static int service_arm_timer(Service *s, bool relative, usec_t usec) {
         int r;
 
         assert(s);
 
         if (s->timer_event_source) {
-                r = sd_event_source_set_time(s->timer_event_source, usec);
+                r = (relative ? sd_event_source_set_time_relative : sd_event_source_set_time)(s->timer_event_source, usec);
                 if (r < 0)
                         return r;
 
@@ -532,7 +554,7 @@
         if (usec == USEC_INFINITY)
                 return 0;
 
-        r = sd_event_add_time(
+        r = (relative ? sd_event_add_time_relative : sd_event_add_time)(
                         UNIT(s)->manager->event,
                         &s->timer_event_source,
                         CLOCK_MONOTONIC,
@@ -550,9 +572,7 @@
         assert(s);
         assert(UNIT(s)->load_state == UNIT_LOADED);
 
-        for (ServiceExecCommand c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
-                ExecCommand *command;
-
+        for (ServiceExecCommand c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++)
                 LIST_FOREACH(command, command, s->exec_command[c]) {
                         if (!path_is_absolute(command->path) && !filename_is_valid(command->path))
                                 return log_unit_error_errno(UNIT(s), SYNTHETIC_ERRNO(ENOEXEC),
@@ -564,7 +584,6 @@
                                                             "Service has an empty argv in %s=. Refusing.",
                                                             service_exec_command_to_string(c));
                 }
-        }
 
         if (!s->exec_command[SERVICE_EXEC_START] && !s->exec_command[SERVICE_EXEC_STOP] &&
             UNIT(s)->success_action == EMERGENCY_ACTION_NONE)
@@ -588,7 +607,10 @@
                 return log_unit_error_errno(UNIT(s), SYNTHETIC_ERRNO(ENOEXEC), "Service has Restart= set to either always or on-success, which isn't allowed for Type=oneshot services. Refusing.");
 
         if (s->type == SERVICE_ONESHOT && !exit_status_set_is_empty(&s->restart_force_status))
-                return log_unit_error_errno(UNIT(s), SYNTHETIC_ERRNO(ENOEXEC), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
+                return log_unit_error_errno(UNIT(s), SYNTHETIC_ERRNO(ENOEXEC), "Service has RestartForceExitStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
+
+        if (s->type == SERVICE_ONESHOT && s->exit_type == SERVICE_EXIT_CGROUP)
+                return log_unit_error_errno(UNIT(s), SYNTHETIC_ERRNO(ENOEXEC), "Service has ExitType=cgroup set, which isn't allowed for Type=oneshot services. Refusing.");
 
         if (s->type == SERVICE_DBUS && !s->bus_name)
                 return log_unit_error_errno(UNIT(s), SYNTHETIC_ERRNO(ENOEXEC), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
@@ -605,6 +627,12 @@
         if (s->runtime_max_usec != USEC_INFINITY && s->type == SERVICE_ONESHOT)
                 log_unit_warning(UNIT(s), "RuntimeMaxSec= has no effect in combination with Type=oneshot. Ignoring.");
 
+        if (s->runtime_max_usec == USEC_INFINITY && s->runtime_rand_extra_usec != 0)
+                log_unit_warning(UNIT(s), "Service has RuntimeRandomizedExtraSec= setting, but no RuntimeMaxSec=. Ignoring.");
+
+        if (s->exit_type == SERVICE_EXIT_CGROUP && cg_unified() < CGROUP_UNIFIED_SYSTEMD)
+                log_unit_warning(UNIT(s), "Service has ExitType=cgroup set, but we are running with legacy cgroups v1, which might not work correctly. Continuing.");
+
         return 0;
 }
 
@@ -745,7 +773,7 @@
 
         /* If the service needs the notify socket, let's enable it automatically. */
         if (s->notify_access == NOTIFY_NONE &&
-            (s->type == SERVICE_NOTIFY || s->watchdog_usec > 0 || s->n_fd_store_max > 0))
+            (IN_SET(s->type, SERVICE_NOTIFY, SERVICE_NOTIFY_RELOAD) || s->watchdog_usec > 0 || s->n_fd_store_max > 0))
                 s->notify_access = NOTIFY_MAIN;
 
         /* If no OOM policy was explicitly set, then default to the configure default OOM policy. Except when
@@ -788,8 +816,6 @@
 }
 
 static void service_dump(Unit *u, FILE *f, const char *prefix) {
-        char buf_restart[FORMAT_TIMESPAN_MAX], buf_start[FORMAT_TIMESPAN_MAX], buf_stop[FORMAT_TIMESPAN_MAX],
-                buf_runtime[FORMAT_TIMESPAN_MAX], buf_watchdog[FORMAT_TIMESPAN_MAX], buf_abort[FORMAT_TIMESPAN_MAX];
         ServiceExecCommand c;
         Service *s = SERVICE(u);
         const char *prefix2;
@@ -812,7 +838,8 @@
                 "%sRestart: %s\n"
                 "%sNotifyAccess: %s\n"
                 "%sNotifyState: %s\n"
-                "%sOOMPolicy: %s\n",
+                "%sOOMPolicy: %s\n"
+                "%sReloadSignal: %s\n",
                 prefix, service_state_to_string(s->state),
                 prefix, service_result_to_string(s->result),
                 prefix, service_result_to_string(s->reload_result),
@@ -825,7 +852,8 @@
                 prefix, service_restart_to_string(s->restart),
                 prefix, notify_access_to_string(s->notify_access),
                 prefix, notify_state_to_string(s->notify_state),
-                prefix, oom_policy_to_string(s->oom_policy));
+                prefix, oom_policy_to_string(s->oom_policy),
+                prefix, signal_to_string(s->reload_signal));
 
         if (s->control_pid > 0)
                 fprintf(f,
@@ -864,22 +892,24 @@
                 "%sTimeoutStopSec: %s\n"
                 "%sTimeoutStartFailureMode: %s\n"
                 "%sTimeoutStopFailureMode: %s\n",
-                prefix, format_timespan(buf_restart, sizeof(buf_restart), s->restart_usec, USEC_PER_SEC),
-                prefix, format_timespan(buf_start, sizeof(buf_start), s->timeout_start_usec, USEC_PER_SEC),
-                prefix, format_timespan(buf_stop, sizeof(buf_stop), s->timeout_stop_usec, USEC_PER_SEC),
+                prefix, FORMAT_TIMESPAN(s->restart_usec, USEC_PER_SEC),
+                prefix, FORMAT_TIMESPAN(s->timeout_start_usec, USEC_PER_SEC),
+                prefix, FORMAT_TIMESPAN(s->timeout_stop_usec, USEC_PER_SEC),
                 prefix, service_timeout_failure_mode_to_string(s->timeout_start_failure_mode),
                 prefix, service_timeout_failure_mode_to_string(s->timeout_stop_failure_mode));
 
         if (s->timeout_abort_set)
                 fprintf(f,
                         "%sTimeoutAbortSec: %s\n",
-                        prefix, format_timespan(buf_abort, sizeof(buf_abort), s->timeout_abort_usec, USEC_PER_SEC));
+                        prefix, FORMAT_TIMESPAN(s->timeout_abort_usec, USEC_PER_SEC));
 
         fprintf(f,
                 "%sRuntimeMaxSec: %s\n"
+                "%sRuntimeRandomizedExtraSec: %s\n"
                 "%sWatchdogSec: %s\n",
-                prefix, format_timespan(buf_runtime, sizeof(buf_runtime), s->runtime_max_usec, USEC_PER_SEC),
-                prefix, format_timespan(buf_watchdog, sizeof(buf_watchdog), s->watchdog_usec, USEC_PER_SEC));
+                prefix, FORMAT_TIMESPAN(s->runtime_max_usec, USEC_PER_SEC),
+                prefix, FORMAT_TIMESPAN(s->runtime_rand_extra_usec, USEC_PER_SEC),
+                prefix, FORMAT_TIMESPAN(s->watchdog_usec, USEC_PER_SEC));
 
         kill_context_dump(&s->kill_context, f, prefix);
         exec_context_dump(&s->exec_context, f, prefix);
@@ -906,6 +936,21 @@
                         prefix, s->n_fd_store_max,
                         prefix, s->n_fd_store);
 
+        if (s->open_files)
+                LIST_FOREACH(open_files, of, s->open_files) {
+                        _cleanup_free_ char *ofs = NULL;
+                        int r;
+
+                        r = open_file_to_string(of, &ofs);
+                        if (r < 0) {
+                                log_debug_errno(r,
+                                                "Failed to convert OpenFile= setting to string, ignoring: %m");
+                                continue;
+                        }
+
+                        fprintf(f, "%sOpen File: %s\n", prefix, ofs);
+                }
+
         cgroup_context_dump(UNIT(s), f, prefix);
 }
 
@@ -938,10 +983,9 @@
 }
 
 static int service_load_pid_file(Service *s, bool may_warn) {
-        char procfs[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
         bool questionable_pid_file = false;
         _cleanup_free_ char *k = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r, prio;
         pid_t pid;
 
@@ -967,8 +1011,7 @@
 
         /* Let's read the PID file now that we chased it down. But we need to convert the O_PATH fd
          * chase_symlinks() returned us into a proper fd first. */
-        xsprintf(procfs, "/proc/self/fd/%i", fd);
-        r = read_one_line_file(procfs, &k);
+        r = read_one_line_file(FORMAT_PROC_FD_PATH(fd), &k);
         if (r < 0)
                 return log_unit_error_errno(UNIT(s), r,
                                             "Can't convert PID files %s O_PATH file descriptor to proper file descriptor: %m",
@@ -1070,7 +1113,7 @@
         if (!IN_SET(state,
                     SERVICE_CONDITION, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
                     SERVICE_RUNNING,
-                    SERVICE_RELOAD,
+                    SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY,
                     SERVICE_STOP, SERVICE_STOP_WATCHDOG, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
                     SERVICE_FINAL_WATCHDOG, SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
                     SERVICE_AUTO_RESTART,
@@ -1079,7 +1122,8 @@
 
         if (!IN_SET(state,
                     SERVICE_START, SERVICE_START_POST,
-                    SERVICE_RUNNING, SERVICE_RELOAD,
+                    SERVICE_RUNNING,
+                    SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY,
                     SERVICE_STOP, SERVICE_STOP_WATCHDOG, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
                     SERVICE_FINAL_WATCHDOG, SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
                 service_unwatch_main_pid(s);
@@ -1088,7 +1132,7 @@
 
         if (!IN_SET(state,
                     SERVICE_CONDITION, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
-                    SERVICE_RELOAD,
+                    SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY,
                     SERVICE_STOP, SERVICE_STOP_WATCHDOG, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
                     SERVICE_FINAL_WATCHDOG, SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
                     SERVICE_CLEANING)) {
@@ -1104,7 +1148,8 @@
 
         if (!IN_SET(state,
                     SERVICE_CONDITION, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
-                    SERVICE_RUNNING, SERVICE_RELOAD,
+                    SERVICE_RUNNING,
+                    SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY,
                     SERVICE_STOP, SERVICE_STOP_WATCHDOG, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
                     SERVICE_FINAL_WATCHDOG, SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
             !(state == SERVICE_DEAD && UNIT(s)->job))
@@ -1113,7 +1158,7 @@
         if (state != SERVICE_START)
                 s->exec_fd_event_source = sd_event_source_disable_unref(s->exec_fd_event_source);
 
-        if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
+        if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY))
                 service_stop_watchdog(s);
 
         /* For the inactive states unit_notify() will trim the cgroup,
@@ -1139,10 +1184,12 @@
         case SERVICE_START:
         case SERVICE_START_POST:
         case SERVICE_RELOAD:
+        case SERVICE_RELOAD_SIGNAL:
+        case SERVICE_RELOAD_NOTIFY:
                 return usec_add(UNIT(s)->state_change_timestamp.monotonic, s->timeout_start_usec);
 
         case SERVICE_RUNNING:
-                return usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec);
+                return service_running_timeout(s);
 
         case SERVICE_STOP:
         case SERVICE_STOP_SIGTERM:
@@ -1177,7 +1224,7 @@
         if (s->deserialized_state == s->state)
                 return 0;
 
-        r = service_arm_timer(s, service_coldplug_timeout(s));
+        r = service_arm_timer(s, /* relative= */ false, service_coldplug_timeout(s));
         if (r < 0)
                 return r;
 
@@ -1185,7 +1232,8 @@
             pid_is_unwaited(s->main_pid) &&
             (IN_SET(s->deserialized_state,
                     SERVICE_START, SERVICE_START_POST,
-                    SERVICE_RUNNING, SERVICE_RELOAD,
+                    SERVICE_RUNNING,
+                    SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY,
                     SERVICE_STOP, SERVICE_STOP_WATCHDOG, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
                     SERVICE_FINAL_WATCHDOG, SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
                 r = unit_watch_pid(UNIT(s), s->main_pid, false);
@@ -1197,7 +1245,7 @@
             pid_is_unwaited(s->control_pid) &&
             IN_SET(s->deserialized_state,
                    SERVICE_CONDITION, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
-                   SERVICE_RELOAD,
+                   SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY,
                    SERVICE_STOP, SERVICE_STOP_WATCHDOG, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
                    SERVICE_FINAL_WATCHDOG, SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
                    SERVICE_CLEANING)) {
@@ -1212,7 +1260,7 @@
                 (void) unit_setup_exec_runtime(u);
         }
 
-        if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
+        if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY))
                 service_start_watchdog(s);
 
         if (UNIT_ISSET(s->accept_socket)) {
@@ -1223,8 +1271,8 @@
 
                         /* Make a best-effort attempt at bumping the connection count */
                         if (socket_acquire_peer(socket, s->socket_fd, &peer) > 0) {
-                                socket_peer_unref(s->peer);
-                                s->peer = peer;
+                                socket_peer_unref(s->socket_peer);
+                                s->socket_peer = peer;
                         }
                 }
         }
@@ -1310,7 +1358,6 @@
         }
 
         if (s->n_fd_store > 0) {
-                ServiceFDStore *fs;
                 size_t n_fds;
                 char **nl;
                 int *t;
@@ -1386,7 +1433,7 @@
                 sd_event_source **ret_event_source,
                 int *ret_exec_fd) {
 
-        _cleanup_close_pair_ int p[] = { -1, -1 };
+        _cleanup_close_pair_ int p[] = PIPE_EBADF;
         int r;
 
         assert(s);
@@ -1425,7 +1472,40 @@
         return s->notify_access != NOTIFY_NONE;
 }
 
-static int service_spawn(
+static Service *service_get_triggering_service(Service *s) {
+        Unit *candidate = NULL, *other;
+
+        assert(s);
+
+        /* Return the service which triggered service 's', this means dependency
+         * types which include the UNIT_ATOM_ON_{FAILURE,SUCCESS}_OF atoms.
+         *
+         * N.B. if there are multiple services which could trigger 's' via OnFailure=
+         * or OnSuccess= then we return NULL. This is since we don't know from which
+         * one to propagate the exit status. */
+
+        UNIT_FOREACH_DEPENDENCY(other, UNIT(s), UNIT_ATOM_ON_FAILURE_OF) {
+                if (candidate)
+                        goto have_other;
+                candidate = other;
+        }
+
+        UNIT_FOREACH_DEPENDENCY(other, UNIT(s), UNIT_ATOM_ON_SUCCESS_OF) {
+                if (candidate)
+                        goto have_other;
+                candidate = other;
+        }
+
+        return SERVICE(candidate);
+
+ have_other:
+        log_unit_warning(UNIT(s), "multiple trigger source candidates for exit status propagation (%s, %s), skipping.",
+                         candidate->id, other->id);
+        return NULL;
+}
+
+static int service_spawn_internal(
+                const char *caller,
                 Service *s,
                 ExecCommand *c,
                 usec_t timeout,
@@ -1434,10 +1514,10 @@
 
         _cleanup_(exec_params_clear) ExecParameters exec_params = {
                 .flags     = flags,
-                .stdin_fd  = -1,
-                .stdout_fd = -1,
-                .stderr_fd = -1,
-                .exec_fd   = -1,
+                .stdin_fd  = -EBADF,
+                .stdout_fd = -EBADF,
+                .stderr_fd = -EBADF,
+                .exec_fd   = -EBADF,
         };
         _cleanup_(sd_event_source_unrefp) sd_event_source *exec_fd_source = NULL;
         _cleanup_strv_free_ char **final_env = NULL, **our_env = NULL;
@@ -1445,10 +1525,13 @@
         pid_t pid;
         int r;
 
+        assert(caller);
         assert(s);
         assert(c);
         assert(ret_pid);
 
+        log_unit_debug(UNIT(s), "Will spawn child (%s): %s", caller, c->path);
+
         r = unit_prepare_exec(UNIT(s)); /* This realizes the cgroup, among other things */
         if (r < 0)
                 return r;
@@ -1476,6 +1559,8 @@
                 if (r < 0)
                         return r;
 
+                exec_params.open_files = s->open_files;
+
                 log_unit_debug(UNIT(s), "Passing %zu fds to service", exec_params.n_socket_fds + exec_params.n_storage_fds);
         }
 
@@ -1485,11 +1570,11 @@
                         return r;
         }
 
-        r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), timeout));
+        r = service_arm_timer(s, /* relative= */ true, timeout);
         if (r < 0)
                 return r;
 
-        our_env = new0(char*, 10);
+        our_env = new0(char*, 12);
         if (!our_env)
                 return -ENOMEM;
 
@@ -1546,29 +1631,62 @@
                 }
         }
 
+        Service *env_source = NULL;
+        const char *monitor_prefix;
         if (flags & EXEC_SETENV_RESULT) {
-                if (asprintf(our_env + n_env++, "SERVICE_RESULT=%s", service_result_to_string(s->result)) < 0)
+                env_source = s;
+                monitor_prefix = "";
+        } else if (flags & EXEC_SETENV_MONITOR_RESULT) {
+                env_source = service_get_triggering_service(s);
+                monitor_prefix = "MONITOR_";
+        }
+
+        if (env_source) {
+                if (asprintf(our_env + n_env++, "%sSERVICE_RESULT=%s", monitor_prefix, service_result_to_string(env_source->result)) < 0)
                         return -ENOMEM;
 
-                if (s->main_exec_status.pid > 0 &&
-                    dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
-                        if (asprintf(our_env + n_env++, "EXIT_CODE=%s", sigchld_code_to_string(s->main_exec_status.code)) < 0)
+                if (env_source->main_exec_status.pid > 0 &&
+                    dual_timestamp_is_set(&env_source->main_exec_status.exit_timestamp)) {
+                        if (asprintf(our_env + n_env++, "%sEXIT_CODE=%s", monitor_prefix, sigchld_code_to_string(env_source->main_exec_status.code)) < 0)
                                 return -ENOMEM;
 
-                        if (s->main_exec_status.code == CLD_EXITED)
-                                r = asprintf(our_env + n_env++, "EXIT_STATUS=%i", s->main_exec_status.status);
+                        if (env_source->main_exec_status.code == CLD_EXITED)
+                                r = asprintf(our_env + n_env++, "%sEXIT_STATUS=%i", monitor_prefix, env_source->main_exec_status.status);
                         else
-                                r = asprintf(our_env + n_env++, "EXIT_STATUS=%s", signal_to_string(s->main_exec_status.status));
+                                r = asprintf(our_env + n_env++, "%sEXIT_STATUS=%s", monitor_prefix, signal_to_string(env_source->main_exec_status.status));
+
                         if (r < 0)
                                 return -ENOMEM;
                 }
+
+                if (env_source != s) {
+                        if (!sd_id128_is_null(UNIT(env_source)->invocation_id)) {
+                                r = asprintf(our_env + n_env++, "%sINVOCATION_ID=" SD_ID128_FORMAT_STR,
+                                             monitor_prefix, SD_ID128_FORMAT_VAL(UNIT(env_source)->invocation_id));
+                                if (r < 0)
+                                        return -ENOMEM;
+                        }
+
+                        if (asprintf(our_env + n_env++, "%sUNIT=%s", monitor_prefix, UNIT(env_source)->id) < 0)
+                                return -ENOMEM;
+                }
+        }
+
+        if (UNIT(s)->activation_details) {
+                r = activation_details_append_env(UNIT(s)->activation_details, &our_env);
+                if (r < 0)
+                        return r;
+                /* The number of env vars added here can vary, rather than keeping the allocation block in
+                 * sync manually, these functions simply use the strv methods to append to it, so we need
+                 * to update n_env when we are done in case of future usage. */
+                n_env += r;
         }
 
         r = unit_set_exec_params(UNIT(s), &exec_params);
         if (r < 0)
                 return r;
 
-        final_env = strv_env_merge(2, exec_params.environment, our_env, NULL);
+        final_env = strv_env_merge(exec_params.environment, our_env);
         if (!final_env)
                 return -ENOMEM;
 
@@ -1687,7 +1805,7 @@
                 return false;
 
         case SERVICE_RESTART_ALWAYS:
-                return true;
+                return s->result != SERVICE_SKIP_CONDITION;
 
         case SERVICE_RESTART_ON_SUCCESS:
                 return s->result == SERVICE_SUCCESS;
@@ -1705,7 +1823,7 @@
                 return IN_SET(s->result, SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP);
 
         default:
-                assert_not_reached("unknown restart setting");
+                assert_not_reached();
         }
 }
 
@@ -1771,7 +1889,7 @@
         if (s->will_auto_restart) {
                 s->will_auto_restart = false;
 
-                r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->restart_usec));
+                r = service_arm_timer(s, /* relative= */ true, s->restart_usec);
                 if (r < 0) {
                         s->n_keep_fd_store--;
                         goto fail;
@@ -1903,8 +2021,8 @@
                 goto fail;
 
         if (r > 0) {
-                r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC),
-                                      kill_operation == KILL_WATCHDOG ? service_timeout_abort_usec(s) : s->timeout_stop_usec));
+                r = service_arm_timer(s, /* relative= */ true,
+                                      kill_operation == KILL_WATCHDOG ? service_timeout_abort_usec(s) : s->timeout_stop_usec);
                 if (r < 0)
                         goto fail;
 
@@ -1934,7 +2052,7 @@
 
         (void) unit_enqueue_rewatch_pids(UNIT(s));
 
-        service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_stop_usec));
+        service_arm_timer(s, /* relative= */ true, s->timeout_stop_usec);
 
         /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
         service_set_state(s, SERVICE_STOP_SIGTERM);
@@ -2013,7 +2131,7 @@
                         service_enter_stop_by_notify(s);
                 else {
                         service_set_state(s, SERVICE_RUNNING);
-                        service_arm_timer(s, usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec));
+                        service_arm_timer(s, /* relative= */ false, service_running_timeout(s));
                 }
 
         } else if (s->remain_after_exit)
@@ -2149,7 +2267,7 @@
         r = service_spawn(s,
                           c,
                           timeout,
-                          EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG|EXEC_WRITE_CREDENTIALS,
+                          EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG|EXEC_WRITE_CREDENTIALS|EXEC_SETENV_MONITOR_RESULT,
                           &pid);
         if (r < 0)
                 goto fail;
@@ -2158,7 +2276,7 @@
                 /* For simple services we immediately start
                  * the START_POST binaries. */
 
-                service_set_main_pid(s, pid);
+                (void) service_set_main_pid(s, pid);
                 service_enter_start_post(s);
 
         } else  if (s->type == SERVICE_FORKING) {
@@ -2169,17 +2287,17 @@
                 s->control_pid = pid;
                 service_set_state(s, SERVICE_START);
 
-        } else if (IN_SET(s->type, SERVICE_ONESHOT, SERVICE_DBUS, SERVICE_NOTIFY, SERVICE_EXEC)) {
+        } else if (IN_SET(s->type, SERVICE_ONESHOT, SERVICE_DBUS, SERVICE_NOTIFY, SERVICE_NOTIFY_RELOAD, SERVICE_EXEC)) {
 
                 /* For oneshot services we wait until the start process exited, too, but it is our main process. */
 
                 /* For D-Bus services we know the main pid right away, but wait for the bus name to appear on the
                  * bus. 'notify' and 'exec' services are similar. */
 
-                service_set_main_pid(s, pid);
+                (void) service_set_main_pid(s, pid);
                 service_set_state(s, SERVICE_START);
         } else
-                assert_not_reached("Unknown service type");
+                assert_not_reached();
 
         return;
 
@@ -2207,7 +2325,7 @@
                 r = service_spawn(s,
                                   s->control_command,
                                   s->timeout_start_usec,
-                                  EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_APPLY_TTY_STDIN,
+                                  EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_APPLY_TTY_STDIN|EXEC_SETENV_MONITOR_RESULT|EXEC_WRITE_CREDENTIALS,
                                   &s->control_pid);
                 if (r < 0)
                         goto fail;
@@ -2288,7 +2406,8 @@
         log_unit_struct(UNIT(s), LOG_INFO,
                         "MESSAGE_ID=" SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR,
                         LOG_UNIT_INVOCATION_ID(UNIT(s)),
-                        LOG_UNIT_MESSAGE(UNIT(s), "Scheduled restart job, restart counter is at %u.", s->n_restarts),
+                        LOG_UNIT_MESSAGE(UNIT(s),
+                                         "Scheduled restart job, restart counter is at %u.", s->n_restarts),
                         "N_RESTARTS=%u", s->n_restarts);
 
         /* Notify clients about changed restart counter */
@@ -2311,8 +2430,8 @@
 
         assert(s);
 
-        service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_start_usec));
-        service_set_state(s, SERVICE_RELOAD);
+        service_arm_timer(s, /* relative= */ true, s->timeout_start_usec);
+        service_set_state(s, SERVICE_RELOAD_NOTIFY);
 
         /* service_enter_reload_by_notify is never called during a reload, thus no loops are possible. */
         r = manager_propagate_reload(UNIT(s)->manager, UNIT(s), JOB_FAIL, &error);
@@ -2321,6 +2440,7 @@
 }
 
 static void service_enter_reload(Service *s) {
+        bool killed = false;
         int r;
 
         assert(s);
@@ -2328,6 +2448,18 @@
         service_unwatch_control_pid(s);
         s->reload_result = SERVICE_SUCCESS;
 
+        usec_t ts = now(CLOCK_MONOTONIC);
+
+        if (s->type == SERVICE_NOTIFY_RELOAD && s->main_pid > 0) {
+                r = kill_and_sigcont(s->main_pid, s->reload_signal);
+                if (r < 0) {
+                        log_unit_warning_errno(UNIT(s), r, "Failed to send reload signal: %m");
+                        goto fail;
+                }
+
+                killed = true;
+        }
+
         s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
         if (s->control_command) {
                 s->control_command_id = SERVICE_EXEC_RELOAD;
@@ -2337,17 +2469,28 @@
                                   s->timeout_start_usec,
                                   EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_CONTROL_CGROUP,
                                   &s->control_pid);
-                if (r < 0)
+                if (r < 0) {
+                        log_unit_warning_errno(UNIT(s), r, "Failed to run 'reload' task: %m");
                         goto fail;
+                }
 
                 service_set_state(s, SERVICE_RELOAD);
-        } else
+        } else if (killed) {
+                service_arm_timer(s, /* relative= */ true, s->timeout_start_usec);
+                service_set_state(s, SERVICE_RELOAD_SIGNAL);
+        } else {
                 service_enter_running(s, SERVICE_SUCCESS);
+                return;
+        }
 
+        /* Store the timestamp when we started reloading: when reloading via SIGHUP we won't leave the reload
+         * state until we received both RELOADING=1 and READY=1 with MONOTONIC_USEC= set to a value above
+         * this. Thus we know for sure the reload cycle was executed *after* we requested it, and is not one
+         * that was already in progress before. */
+        s->reload_begin_usec = ts;
         return;
 
 fail:
-        log_unit_warning_errno(UNIT(s), r, "Failed to run 'reload' task: %m");
         s->reload_result = SERVICE_FAILURE_RESOURCES;
         service_enter_running(s, SERVICE_SUCCESS);
 }
@@ -2376,6 +2519,7 @@
                           EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|
                           (IN_SET(s->control_command_id, SERVICE_EXEC_CONDITION, SERVICE_EXEC_START_PRE, SERVICE_EXEC_STOP_POST) ? EXEC_APPLY_TTY_STDIN : 0)|
                           (IN_SET(s->control_command_id, SERVICE_EXEC_STOP, SERVICE_EXEC_STOP_POST) ? EXEC_SETENV_RESULT : 0)|
+                          (IN_SET(s->control_command_id, SERVICE_EXEC_START_PRE, SERVICE_EXEC_START) ? EXEC_SETENV_MONITOR_RESULT : 0)|
                           (IN_SET(s->control_command_id, SERVICE_EXEC_START_POST, SERVICE_EXEC_RELOAD, SERVICE_EXEC_STOP, SERVICE_EXEC_STOP_POST) ? EXEC_CONTROL_CGROUP : 0),
                           &s->control_pid);
         if (r < 0)
@@ -2412,12 +2556,12 @@
         r = service_spawn(s,
                           s->main_command,
                           s->timeout_start_usec,
-                          EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG,
+                          EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG|EXEC_SETENV_MONITOR_RESULT,
                           &pid);
         if (r < 0)
                 goto fail;
 
-        service_set_main_pid(s, pid);
+        (void) service_set_main_pid(s, pid);
 
         return;
 
@@ -2455,13 +2599,6 @@
 
         assert(IN_SET(s->state, SERVICE_DEAD, SERVICE_FAILED));
 
-        /* Make sure we don't enter a busy loop of some kind. */
-        r = unit_test_start_limit(u);
-        if (r < 0) {
-                service_enter_dead(s, SERVICE_FAILURE_START_LIMIT_HIT, false);
-                return r;
-        }
-
         r = unit_acquire_invocation_id(u);
         if (r < 0)
                 return r;
@@ -2516,9 +2653,8 @@
                 return 0;
         }
 
-        /* If there's already something running we go directly into
-         * kill mode. */
-        if (IN_SET(s->state, SERVICE_CONDITION, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD, SERVICE_STOP_WATCHDOG)) {
+        /* If there's already something running we go directly into kill mode. */
+        if (IN_SET(s->state, SERVICE_CONDITION, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY, SERVICE_STOP_WATCHDOG)) {
                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
                 return 0;
         }
@@ -2551,35 +2687,34 @@
 
         assert(s);
 
-        return !!s->exec_command[SERVICE_EXEC_RELOAD];
+        return s->exec_command[SERVICE_EXEC_RELOAD] ||
+                s->type == SERVICE_NOTIFY_RELOAD;
 }
 
-static unsigned service_exec_command_index(Unit *u, ServiceExecCommand id, ExecCommand *current) {
+static unsigned service_exec_command_index(Unit *u, ServiceExecCommand id, const ExecCommand *current) {
         Service *s = SERVICE(u);
         unsigned idx = 0;
-        ExecCommand *first, *c;
 
         assert(s);
         assert(id >= 0);
         assert(id < _SERVICE_EXEC_COMMAND_MAX);
 
-        first = s->exec_command[id];
+        const ExecCommand *first = s->exec_command[id];
 
         /* Figure out where we are in the list by walking back to the beginning */
-        for (c = current; c != first; c = c->command_prev)
+        for (const ExecCommand *c = current; c != first; c = c->command_prev)
                 idx++;
 
         return idx;
 }
 
-static int service_serialize_exec_command(Unit *u, FILE *f, ExecCommand *command) {
+static int service_serialize_exec_command(Unit *u, FILE *f, const ExecCommand *command) {
         _cleanup_free_ char *args = NULL, *p = NULL;
         Service *s = SERVICE(u);
         const char *type, *key;
         ServiceExecCommand id;
         size_t length = 0;
         unsigned idx;
-        char **arg;
 
         assert(s);
         assert(f);
@@ -2628,14 +2763,22 @@
                 return log_oom();
 
         key = strjoina(type, "-command");
-        (void) serialize_item_format(f, key, "%s %u %s %s", service_exec_command_to_string(id), idx, p, args);
+
+        /* We use '+1234' instead of '1234' to mark the last command in a sequence.
+         * This is used in service_deserialize_exec_command(). */
+        (void) serialize_item_format(
+                        f, key,
+                        "%s %s%u %s %s",
+                        service_exec_command_to_string(id),
+                        command->command_next ? "" : "+",
+                        idx,
+                        p, args);
 
         return 0;
 }
 
 static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
         Service *s = SERVICE(u);
-        ServiceFDStore *fs;
         int r;
 
         assert(u);
@@ -2729,6 +2872,9 @@
         if (s->watchdog_original_usec != USEC_INFINITY)
                 (void) serialize_item_format(f, "watchdog-original-usec", USEC_FMT, s->watchdog_original_usec);
 
+        if (s->reload_begin_usec != USEC_INFINITY)
+                (void) serialize_item_format(f, "reload-begin-usec", USEC_FMT, s->reload_begin_usec);
+
         return 0;
 }
 
@@ -2740,7 +2886,7 @@
         Service *s = SERVICE(u);
         int r;
         unsigned idx = 0, i;
-        bool control, found = false;
+        bool control, found = false, last = false;
         ServiceExecCommand id = _SERVICE_EXEC_COMMAND_INVALID;
         ExecCommand *command = NULL;
         _cleanup_free_ char *path = NULL;
@@ -2781,9 +2927,15 @@
                         state = STATE_EXEC_COMMAND_INDEX;
                         break;
                 case STATE_EXEC_COMMAND_INDEX:
+                        /* PID 1234 is serialized as either '1234' or '+1234'. The second form is used to
+                         * mark the last command in a sequence. We warn if the deserialized command doesn't
+                         * match what we have loaded from the unit, but we don't need to warn if that is the
+                         * last command. */
+
                         r = safe_atou(arg, &idx);
                         if (r < 0)
                                 return r;
+                        last = arg[0] == '+';
 
                         state = STATE_EXEC_COMMAND_PATH;
                         break;
@@ -2797,7 +2949,7 @@
                                 return -ENOMEM;
                         break;
                 default:
-                        assert_not_reached("Logic error in exec command deserialization");
+                        assert_not_reached();
                 }
         }
 
@@ -2828,6 +2980,8 @@
                 s->control_command_id = id;
         } else if (command)
                 s->main_command = command;
+        else if (last)
+                log_unit_debug(u, "Current command vanished from the unit file.");
         else
                 log_unit_warning(u, "Current command vanished from the unit file, execution of the command list won't be resumed.");
 
@@ -2905,10 +3059,11 @@
                         log_unit_error_errno(u, r, "Unable to deserialize current bus owner %s: %m", value);
         } else if (streq(key, "status-text")) {
                 char *t;
+                ssize_t l;
 
-                r = cunescape(value, 0, &t);
-                if (r < 0)
-                        log_unit_debug_errno(u, r, "Failed to unescape status text '%s': %m", value);
+                l = cunescape(value, 0, &t);
+                if (l < 0)
+                        log_unit_debug_errno(u, l, "Failed to unescape status text '%s': %m", value);
                 else
                         free_and_replace(s->status_text, t);
 
@@ -3066,6 +3221,10 @@
                         log_unit_debug_errno(u, r, "Failed to parse serialized flush restart counter setting '%s': %m", value);
                 else
                         s->flush_n_restarts = r;
+        } else if (streq(key, "reload-begin-usec")) {
+                r = deserialize_usec(value, &s->reload_begin_usec);
+                if (r < 0)
+                        log_unit_debug_errno(u, r, "Failed to parse serialized reload begin timestamp '%s', ignoring: %m", value);
         } else
                 log_unit_debug(u, "Unknown serialization key: %s", key);
 
@@ -3162,7 +3321,7 @@
         /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
          * keep their PID file open all the time. */
         ps->type = PATH_MODIFIED;
-        ps->inotify_fd = -1;
+        ps->inotify_fd = -EBADF;
 
         s->pid_file_pathspec = ps;
 
@@ -3170,11 +3329,9 @@
 }
 
 static int service_dispatch_inotify_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
-        PathSpec *p = userdata;
+        PathSpec *p = ASSERT_PTR(userdata);
         Service *s;
 
-        assert(p);
-
         s = SERVICE(p->unit);
 
         assert(s);
@@ -3271,7 +3428,7 @@
                  * SIGCHLD for. */
 
         case SERVICE_START:
-                if (s->type == SERVICE_NOTIFY &&
+                if (IN_SET(s->type, SERVICE_NOTIFY, SERVICE_NOTIFY_RELOAD) &&
                     main_pid_good(s) == 0 &&
                     control_pid_good(s) == 0) {
                         /* No chance of getting a ready notification anymore */
@@ -3279,6 +3436,9 @@
                         break;
                 }
 
+                if (s->exit_type == SERVICE_EXIT_CGROUP && main_pid_good(s) <= 0)
+                        service_enter_start_post(s);
+
                 _fallthrough_;
         case SERVICE_START_POST:
                 if (s->pid_file_pathspec &&
@@ -3331,10 +3491,13 @@
         }
 }
 
-static void service_notify_cgroup_oom_event(Unit *u) {
+static void service_notify_cgroup_oom_event(Unit *u, bool managed_oom) {
         Service *s = SERVICE(u);
 
-        log_unit_debug(u, "Process of control group was killed by the OOM killer.");
+        if (managed_oom)
+                log_unit_debug(u, "Process(es) of control group were killed by systemd-oomd.");
+        else
+                log_unit_debug(u, "Process of control group was killed by the OOM killer.");
 
         if (s->oom_policy == OOM_CONTINUE)
                 return;
@@ -3408,7 +3571,7 @@
         else if (code == CLD_DUMPED)
                 f = SERVICE_FAILURE_CORE_DUMP;
         else
-                assert_not_reached("Unknown code");
+                assert_not_reached();
 
         if (s->main_pid == pid) {
                 /* Clean up the exec_fd event source. We want to do this here, not later in
@@ -3467,79 +3630,84 @@
                         service_run_next_main(s);
 
                 } else {
-
-                        /* The service exited, so the service is officially gone. */
                         s->main_command = NULL;
 
-                        switch (s->state) {
+                        /* Services with ExitType=cgroup do not act on main PID exiting, unless the cgroup is
+                         * already empty */
+                        if (s->exit_type == SERVICE_EXIT_MAIN || cgroup_good(s) <= 0) {
+                                /* The service exited, so the service is officially gone. */
+                                switch (s->state) {
 
-                        case SERVICE_START_POST:
-                        case SERVICE_RELOAD:
-                                /* If neither main nor control processes are running then
-                                 * the current state can never exit cleanly, hence immediately
-                                 * terminate the service. */
-                                if (control_pid_good(s) <= 0)
-                                        service_enter_stop(s, f);
+                                case SERVICE_START_POST:
+                                case SERVICE_RELOAD:
+                                case SERVICE_RELOAD_SIGNAL:
+                                case SERVICE_RELOAD_NOTIFY:
+                                        /* If neither main nor control processes are running then the current
+                                         * state can never exit cleanly, hence immediately terminate the
+                                         * service. */
+                                        if (control_pid_good(s) <= 0)
+                                                service_enter_stop(s, f);
 
-                                /* Otherwise need to wait until the operation is done. */
-                                break;
-
-                        case SERVICE_STOP:
-                                /* Need to wait until the operation is done. */
-                                break;
-
-                        case SERVICE_START:
-                                if (s->type == SERVICE_ONESHOT) {
-                                        /* This was our main goal, so let's go on */
-                                        if (f == SERVICE_SUCCESS)
-                                                service_enter_start_post(s);
-                                        else
-                                                service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
+                                        /* Otherwise need to wait until the operation is done. */
                                         break;
-                                } else if (s->type == SERVICE_NOTIFY) {
-                                        /* Only enter running through a notification, so that the
-                                         * SERVICE_START state signifies that no ready notification
-                                         * has been received */
-                                        if (f != SERVICE_SUCCESS)
-                                                service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
-                                        else if (!s->remain_after_exit || s->notify_access == NOTIFY_MAIN)
-                                                /* The service has never been and will never be active */
-                                                service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_PROTOCOL);
+
+                                case SERVICE_STOP:
+                                        /* Need to wait until the operation is done. */
                                         break;
+
+                                case SERVICE_START:
+                                        if (s->type == SERVICE_ONESHOT) {
+                                                /* This was our main goal, so let's go on */
+                                                if (f == SERVICE_SUCCESS)
+                                                        service_enter_start_post(s);
+                                                else
+                                                        service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
+                                                break;
+                                        } else if (IN_SET(s->type, SERVICE_NOTIFY, SERVICE_NOTIFY_RELOAD)) {
+                                                /* Only enter running through a notification, so that the
+                                                 * SERVICE_START state signifies that no ready notification
+                                                 * has been received */
+                                                if (f != SERVICE_SUCCESS)
+                                                        service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
+                                                else if (!s->remain_after_exit || s->notify_access == NOTIFY_MAIN)
+                                                        /* The service has never been and will never be active */
+                                                        service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_PROTOCOL);
+                                                break;
+                                        }
+
+                                        _fallthrough_;
+                                case SERVICE_RUNNING:
+                                        service_enter_running(s, f);
+                                        break;
+
+                                case SERVICE_STOP_WATCHDOG:
+                                case SERVICE_STOP_SIGTERM:
+                                case SERVICE_STOP_SIGKILL:
+
+                                        if (control_pid_good(s) <= 0)
+                                                service_enter_stop_post(s, f);
+
+                                        /* If there is still a control process, wait for that first */
+                                        break;
+
+                                case SERVICE_STOP_POST:
+
+                                        if (control_pid_good(s) <= 0)
+                                                service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
+
+                                        break;
+
+                                case SERVICE_FINAL_WATCHDOG:
+                                case SERVICE_FINAL_SIGTERM:
+                                case SERVICE_FINAL_SIGKILL:
+
+                                        if (control_pid_good(s) <= 0)
+                                                service_enter_dead(s, f, true);
+                                        break;
+
+                                default:
+                                        assert_not_reached();
                                 }
-
-                                _fallthrough_;
-                        case SERVICE_RUNNING:
-                                service_enter_running(s, f);
-                                break;
-
-                        case SERVICE_STOP_WATCHDOG:
-                        case SERVICE_STOP_SIGTERM:
-                        case SERVICE_STOP_SIGKILL:
-
-                                if (control_pid_good(s) <= 0)
-                                        service_enter_stop_post(s, f);
-
-                                /* If there is still a control process, wait for that first */
-                                break;
-
-                        case SERVICE_STOP_POST:
-
-                                if (control_pid_good(s) <= 0)
-                                        service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
-
-                                break;
-
-                        case SERVICE_FINAL_WATCHDOG:
-                        case SERVICE_FINAL_SIGTERM:
-                        case SERVICE_FINAL_SIGKILL:
-
-                                if (control_pid_good(s) <= 0)
-                                        service_enter_dead(s, f, true);
-                                break;
-
-                        default:
-                                assert_not_reached("Uh, main process died at wrong time.");
                         }
                 }
 
@@ -3588,15 +3756,13 @@
                     s->control_command->command_next &&
                     f == SERVICE_SUCCESS) {
 
-                        /* There is another command to *
-                         * execute, so let's do that. */
+                        /* There is another command to * execute, so let's do that. */
 
                         log_unit_debug(u, "Running next control command for state %s.", service_state_to_string(s->state));
                         service_run_next_control(s);
 
                 } else {
-                        /* No further commands for this step, so let's
-                         * figure out what to do next */
+                        /* No further commands for this step, so let's figure out what to do next */
 
                         s->control_command = NULL;
                         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
@@ -3674,12 +3840,22 @@
                                 break;
 
                         case SERVICE_RELOAD:
+                        case SERVICE_RELOAD_SIGNAL:
+                        case SERVICE_RELOAD_NOTIFY:
                                 if (f == SERVICE_SUCCESS)
                                         if (service_load_pid_file(s, true) < 0)
                                                 service_search_main_pid(s);
 
                                 s->reload_result = f;
-                                service_enter_running(s, SERVICE_SUCCESS);
+
+                                /* If the last notification we received from the service process indicates
+                                 * we are still reloading, then don't leave reloading state just yet, just
+                                 * transition into SERVICE_RELOAD_NOTIFY, to wait for the READY=1 coming,
+                                 * too. */
+                                if (s->notify_state == NOTIFY_RELOADING)
+                                        service_set_state(s, SERVICE_RELOAD_NOTIFY);
+                                else
+                                        service_enter_running(s, SERVICE_SUCCESS);
                                 break;
 
                         case SERVICE_STOP:
@@ -3717,7 +3893,7 @@
                                 break;
 
                         default:
-                                assert_not_reached("Uh, control process died at wrong time.");
+                                assert_not_reached();
                         }
                 }
         } else /* Neither control nor main PID? If so, don't notify about anything */
@@ -3772,7 +3948,7 @@
                         break;
 
                 default:
-                        assert_not_reached("unknown timeout mode");
+                        assert_not_reached();
                 }
                 break;
 
@@ -3782,6 +3958,8 @@
                 break;
 
         case SERVICE_RELOAD:
+        case SERVICE_RELOAD_SIGNAL:
+        case SERVICE_RELOAD_NOTIFY:
                 log_unit_warning(UNIT(s), "Reload operation timed out. Killing reload process.");
                 service_kill_control_process(s);
                 s->reload_result = SERVICE_FAILURE_TIMEOUT;
@@ -3812,7 +3990,7 @@
                         break;
 
                 default:
-                        assert_not_reached("unknown timeout mode");
+                        assert_not_reached();
                 }
                 break;
 
@@ -3873,7 +4051,7 @@
                         break;
 
                 default:
-                        assert_not_reached("unknown timeout mode");
+                        assert_not_reached();
                 }
                 break;
 
@@ -3907,12 +4085,11 @@
                 break;
 
         case SERVICE_AUTO_RESTART:
-                if (s->restart_usec > 0) {
-                        char buf_restart[FORMAT_TIMESPAN_MAX];
+                if (s->restart_usec > 0)
                         log_unit_debug(UNIT(s),
                                        "Service RestartSec=%s expired, scheduling restart.",
-                                       format_timespan(buf_restart, sizeof buf_restart, s->restart_usec, USEC_PER_SEC));
-                } else
+                                       FORMAT_TIMESPAN(s->restart_usec, USEC_PER_SEC));
+                else
                         log_unit_debug(UNIT(s),
                                        "Service has no hold-off time (RestartSec=0), scheduling restart.");
 
@@ -3929,7 +4106,7 @@
                 break;
 
         default:
-                assert_not_reached("Timeout at wrong time.");
+                assert_not_reached();
         }
 
         return 0;
@@ -3937,7 +4114,6 @@
 
 static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
         Service *s = SERVICE(userdata);
-        char t[FORMAT_TIMESPAN_MAX];
         usec_t watchdog_usec;
 
         assert(s);
@@ -3947,12 +4123,12 @@
 
         if (UNIT(s)->manager->service_watchdogs) {
                 log_unit_error(UNIT(s), "Watchdog timeout (limit %s)!",
-                               format_timespan(t, sizeof(t), watchdog_usec, 1));
+                               FORMAT_TIMESPAN(watchdog_usec, 1));
 
                 service_enter_signal(s, SERVICE_STOP_WATCHDOG, SERVICE_FAILURE_WATCHDOG);
         } else
                 log_unit_warning(UNIT(s), "Watchdog disabled! Ignoring watchdog timeout (limit %s)!",
-                                 format_timespan(t, sizeof(t), watchdog_usec, 1));
+                                 FORMAT_TIMESPAN(watchdog_usec, 1));
 
         return 0;
 }
@@ -4009,8 +4185,8 @@
 
         Service *s = SERVICE(u);
         bool notify_dbus = false;
+        usec_t monotonic_usec = USEC_INFINITY;
         const char *e;
-        char * const *i;
         int r;
 
         assert(u);
@@ -4028,7 +4204,7 @@
 
         /* Interpret MAINPID= */
         e = strv_find_startswith(tags, "MAINPID=");
-        if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD)) {
+        if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY)) {
                 pid_t new_main_pid;
 
                 if (parse_pid(e, &new_main_pid) < 0)
@@ -4046,7 +4222,7 @@
                                         log_unit_debug(u, "New main PID "PID_FMT" does not belong to service, refusing.", new_main_pid);
                         }
                         if (r > 0) {
-                                service_set_main_pid(s, new_main_pid);
+                                (void) service_set_main_pid(s, new_main_pid);
 
                                 r = unit_watch_pid(UNIT(s), new_main_pid, false);
                                 if (r < 0)
@@ -4057,43 +4233,73 @@
                 }
         }
 
-        /* Interpret READY=/STOPPING=/RELOADING=. Last one wins. */
-        STRV_FOREACH_BACKWARDS(i, tags) {
+        /* Parse MONOTONIC_USEC= */
+        e = strv_find_startswith(tags, "MONOTONIC_USEC=");
+        if (e) {
+                r = safe_atou64(e, &monotonic_usec);
+                if (r < 0)
+                        log_unit_warning_errno(u, r, "Failed to parse MONOTONIC_USEC= field in notification message, ignoring: %s", e);
+        }
 
-                if (streq(*i, "READY=1")) {
-                        s->notify_state = NOTIFY_READY;
+        /* Interpret READY=/STOPPING=/RELOADING=. STOPPING= wins over the others, and READY= over RELOADING= */
+        if (strv_contains(tags, "STOPPING=1")) {
+                s->notify_state = NOTIFY_STOPPING;
 
-                        /* Type=notify services inform us about completed
-                         * initialization with READY=1 */
-                        if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START)
-                                service_enter_start_post(s);
+                if (IN_SET(s->state, SERVICE_RUNNING, SERVICE_RELOAD_SIGNAL, SERVICE_RELOAD_NOTIFY))
+                        service_enter_stop_by_notify(s);
 
-                        /* Sending READY=1 while we are reloading informs us
-                         * that the reloading is complete */
-                        if (s->state == SERVICE_RELOAD && s->control_pid == 0)
-                                service_enter_running(s, SERVICE_SUCCESS);
+                notify_dbus = true;
 
-                        notify_dbus = true;
-                        break;
+        } else if (strv_contains(tags, "READY=1")) {
 
-                } else if (streq(*i, "RELOADING=1")) {
-                        s->notify_state = NOTIFY_RELOADING;
+                s->notify_state = NOTIFY_READY;
 
-                        if (s->state == SERVICE_RUNNING)
-                                service_enter_reload_by_notify(s);
+                /* Type=notify services inform us about completed initialization with READY=1 */
+                if (IN_SET(s->type, SERVICE_NOTIFY, SERVICE_NOTIFY_RELOAD) &&
+                    s->state == SERVICE_START)
+                        service_enter_start_post(s);
 
-                        notify_dbus = true;
-                        break;
+                /* Sending READY=1 while we are reloading informs us that the reloading is complete. */
+                if (s->state == SERVICE_RELOAD_NOTIFY)
+                        service_enter_running(s, SERVICE_SUCCESS);
 
-                } else if (streq(*i, "STOPPING=1")) {
-                        s->notify_state = NOTIFY_STOPPING;
+                /* Combined RELOADING=1 and READY=1? Then this is indication that the service started and
+                 * immediately finished reloading. */
+                if (s->state == SERVICE_RELOAD_SIGNAL &&
+                    strv_contains(tags, "RELOADING=1") &&
+                    monotonic_usec != USEC_INFINITY &&
+                    monotonic_usec >= s->reload_begin_usec) {
+                        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
 
-                        if (s->state == SERVICE_RUNNING)
-                                service_enter_stop_by_notify(s);
+                        /* Propagate a reload explicitly */
+                        r = manager_propagate_reload(UNIT(s)->manager, UNIT(s), JOB_FAIL, &error);
+                        if (r < 0)
+                                log_unit_warning(UNIT(s), "Failed to schedule propagation of reload, ignoring: %s", bus_error_message(&error, r));
 
-                        notify_dbus = true;
-                        break;
+                        service_enter_running(s, SERVICE_SUCCESS);
                 }
+
+                notify_dbus = true;
+
+        } else if (strv_contains(tags, "RELOADING=1")) {
+
+                s->notify_state = NOTIFY_RELOADING;
+
+                /* Sending RELOADING=1 after we send SIGHUP to request a reload will transition
+                 * things to "reload-notify" state, where we'll wait for READY=1 to let us know the
+                 * reload is done. Note that we insist on a timestamp being sent along here, so that
+                 * we know for sure this is a reload cycle initiated *after* we sent the signal */
+                if (s->state == SERVICE_RELOAD_SIGNAL &&
+                    monotonic_usec != USEC_INFINITY &&
+                    monotonic_usec >= s->reload_begin_usec)
+                        /* Note, we don't call service_enter_reload_by_notify() here, because we
+                         * don't need reload propagation nor do we want to restart the time-out. */
+                        service_set_state(s, SERVICE_RELOAD_NOTIFY);
+
+                if (s->state == SERVICE_RUNNING)
+                        service_enter_reload_by_notify(s);
+
+                notify_dbus = true;
         }
 
         /* Interpret STATUS= */
@@ -4169,7 +4375,7 @@
         /* Process FD store messages. Either FDSTOREREMOVE=1 for removal, or FDSTORE=1 for addition. In both cases,
          * process FDNAME= for picking the file descriptor name to use. Note that FDNAME= is required when removing
          * fds, but optional when pushing in new fds, for compatibility reasons. */
-        if (strv_find(tags, "FDSTOREREMOVE=1")) {
+        if (strv_contains(tags, "FDSTOREREMOVE=1")) {
                 const char *name;
 
                 name = strv_find_startswith(tags, "FDNAME=");
@@ -4178,7 +4384,7 @@
                 else
                         service_remove_fd_store(s, name);
 
-        } else if (strv_find(tags, "FDSTORE=1")) {
+        } else if (strv_contains(tags, "FDSTORE=1")) {
                 const char *name;
 
                 name = strv_find_startswith(tags, "FDNAME=");
@@ -4223,18 +4429,19 @@
                        SERVICE_START,
                        SERVICE_START_POST,
                        SERVICE_RUNNING,
-                       SERVICE_RELOAD);
+                       SERVICE_RELOAD,
+                       SERVICE_RELOAD_SIGNAL,
+                       SERVICE_RELOAD_NOTIFY);
 }
 
 static int bus_name_pid_lookup_callback(sd_bus_message *reply, void *userdata, sd_bus_error *ret_error) {
         const sd_bus_error *e;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         uint32_t pid;
         Service *s;
         int r;
 
         assert(reply);
-        assert(u);
 
         s = SERVICE(u);
         s->bus_name_pid_lookup_slot = sd_bus_slot_unref(s->bus_name_pid_lookup_slot);
@@ -4262,8 +4469,8 @@
 
         log_unit_debug(u, "D-Bus name %s is now owned by process " PID_FMT, s->bus_name, (pid_t) pid);
 
-        service_set_main_pid(s, pid);
-        unit_watch_pid(UNIT(s), pid, false);
+        (void) service_set_main_pid(s, pid);
+        (void) unit_watch_pid(UNIT(s), pid, false);
         return 1;
 }
 
@@ -4319,8 +4526,14 @@
         }
 }
 
-int service_set_socket_fd(Service *s, int fd, Socket *sock, bool selinux_context_net) {
-        _cleanup_free_ char *peer = NULL;
+int service_set_socket_fd(
+                Service *s,
+                int fd,
+                Socket *sock,
+                SocketPeer *peer,
+                bool selinux_context_net) {
+
+        _cleanup_free_ char *peer_text = NULL;
         int r;
 
         assert(s);
@@ -4335,22 +4548,23 @@
         if (s->socket_fd >= 0)
                 return -EBUSY;
 
+        assert(!s->socket_peer);
+
         if (s->state != SERVICE_DEAD)
                 return -EAGAIN;
 
-        if (getpeername_pretty(fd, true, &peer) >= 0) {
+        if (getpeername_pretty(fd, true, &peer_text) >= 0) {
 
                 if (UNIT(s)->description) {
                         _cleanup_free_ char *a = NULL;
 
-                        a = strjoin(UNIT(s)->description, " (", peer, ")");
+                        a = strjoin(UNIT(s)->description, " (", peer_text, ")");
                         if (!a)
                                 return -ENOMEM;
 
                         r = unit_set_description(UNIT(s), a);
                 }  else
-                        r = unit_set_description(UNIT(s), peer);
-
+                        r = unit_set_description(UNIT(s), peer_text);
                 if (r < 0)
                         return r;
         }
@@ -4360,6 +4574,7 @@
                 return r;
 
         s->socket_fd = fd;
+        s->socket_peer = socket_peer_ref(peer);
         s->socket_fd_selinux_context_net = selinux_context_net;
 
         unit_ref_set(&s->accept_socket, UNIT(s), UNIT(sock));
@@ -4423,6 +4638,8 @@
                       SERVICE_START_POST,
                       SERVICE_RUNNING,
                       SERVICE_RELOAD,
+                      SERVICE_RELOAD_SIGNAL,
+                      SERVICE_RELOAD_NOTIFY,
                       SERVICE_STOP,
                       SERVICE_STOP_WATCHDOG,
                       SERVICE_STOP_SIGTERM,
@@ -4448,6 +4665,14 @@
         return s->main_exec_status.status;
 }
 
+static const char* service_status_text(Unit *u) {
+        Service *s = SERVICE(u);
+
+        assert(s);
+
+        return s->status_text;
+}
+
 static int service_clean(Unit *u, ExecCleanMask mask) {
         _cleanup_strv_free_ char **l = NULL;
         Service *s = SERVICE(u);
@@ -4471,7 +4696,7 @@
         s->control_command = NULL;
         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
 
-        r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->exec_context.timeout_clean_usec));
+        r = service_arm_timer(s, /* relative= */ true, s->exec_context.timeout_clean_usec);
         if (r < 0)
                 goto fail;
 
@@ -4508,83 +4733,107 @@
         return NULL;
 }
 
+static int service_can_start(Unit *u) {
+        Service *s = SERVICE(u);
+        int r;
+
+        assert(s);
+
+        /* Make sure we don't enter a busy loop of some kind. */
+        r = unit_test_start_limit(u);
+        if (r < 0) {
+                service_enter_dead(s, SERVICE_FAILURE_START_LIMIT_HIT, false);
+                return r;
+        }
+
+        return 1;
+}
+
 static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
-        [SERVICE_RESTART_NO] = "no",
-        [SERVICE_RESTART_ON_SUCCESS] = "on-success",
-        [SERVICE_RESTART_ON_FAILURE] = "on-failure",
+        [SERVICE_RESTART_NO]          = "no",
+        [SERVICE_RESTART_ON_SUCCESS]  = "on-success",
+        [SERVICE_RESTART_ON_FAILURE]  = "on-failure",
         [SERVICE_RESTART_ON_ABNORMAL] = "on-abnormal",
         [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
-        [SERVICE_RESTART_ON_ABORT] = "on-abort",
-        [SERVICE_RESTART_ALWAYS] = "always",
+        [SERVICE_RESTART_ON_ABORT]    = "on-abort",
+        [SERVICE_RESTART_ALWAYS]      = "always",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
 
 static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
-        [SERVICE_SIMPLE] = "simple",
-        [SERVICE_FORKING] = "forking",
-        [SERVICE_ONESHOT] = "oneshot",
-        [SERVICE_DBUS] = "dbus",
-        [SERVICE_NOTIFY] = "notify",
-        [SERVICE_IDLE] = "idle",
-        [SERVICE_EXEC] = "exec",
+        [SERVICE_SIMPLE]        = "simple",
+        [SERVICE_FORKING]       = "forking",
+        [SERVICE_ONESHOT]       = "oneshot",
+        [SERVICE_DBUS]          = "dbus",
+        [SERVICE_NOTIFY]        = "notify",
+        [SERVICE_NOTIFY_RELOAD] = "notify-reload",
+        [SERVICE_IDLE]          = "idle",
+        [SERVICE_EXEC]          = "exec",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
 
+static const char* const service_exit_type_table[_SERVICE_EXIT_TYPE_MAX] = {
+        [SERVICE_EXIT_MAIN]   = "main",
+        [SERVICE_EXIT_CGROUP] = "cgroup",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(service_exit_type, ServiceExitType);
+
 static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
-        [SERVICE_EXEC_CONDITION] = "ExecCondition",
-        [SERVICE_EXEC_START_PRE] = "ExecStartPre",
-        [SERVICE_EXEC_START] = "ExecStart",
+        [SERVICE_EXEC_CONDITION]  = "ExecCondition",
+        [SERVICE_EXEC_START_PRE]  = "ExecStartPre",
+        [SERVICE_EXEC_START]      = "ExecStart",
         [SERVICE_EXEC_START_POST] = "ExecStartPost",
-        [SERVICE_EXEC_RELOAD] = "ExecReload",
-        [SERVICE_EXEC_STOP] = "ExecStop",
-        [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
+        [SERVICE_EXEC_RELOAD]     = "ExecReload",
+        [SERVICE_EXEC_STOP]       = "ExecStop",
+        [SERVICE_EXEC_STOP_POST]  = "ExecStopPost",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
 
 static const char* const service_exec_ex_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
-        [SERVICE_EXEC_CONDITION] = "ExecConditionEx",
-        [SERVICE_EXEC_START_PRE] = "ExecStartPreEx",
-        [SERVICE_EXEC_START] = "ExecStartEx",
+        [SERVICE_EXEC_CONDITION]  = "ExecConditionEx",
+        [SERVICE_EXEC_START_PRE]  = "ExecStartPreEx",
+        [SERVICE_EXEC_START]      = "ExecStartEx",
         [SERVICE_EXEC_START_POST] = "ExecStartPostEx",
-        [SERVICE_EXEC_RELOAD] = "ExecReloadEx",
-        [SERVICE_EXEC_STOP] = "ExecStopEx",
-        [SERVICE_EXEC_STOP_POST] = "ExecStopPostEx",
+        [SERVICE_EXEC_RELOAD]     = "ExecReloadEx",
+        [SERVICE_EXEC_STOP]       = "ExecStopEx",
+        [SERVICE_EXEC_STOP_POST]  = "ExecStopPostEx",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(service_exec_ex_command, ServiceExecCommand);
 
 static const char* const notify_state_table[_NOTIFY_STATE_MAX] = {
-        [NOTIFY_UNKNOWN] = "unknown",
-        [NOTIFY_READY] = "ready",
+        [NOTIFY_UNKNOWN]   = "unknown",
+        [NOTIFY_READY]     = "ready",
         [NOTIFY_RELOADING] = "reloading",
-        [NOTIFY_STOPPING] = "stopping",
+        [NOTIFY_STOPPING]  = "stopping",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(notify_state, NotifyState);
 
 static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
-        [SERVICE_SUCCESS] = "success",
-        [SERVICE_FAILURE_RESOURCES] = "resources",
-        [SERVICE_FAILURE_PROTOCOL] = "protocol",
-        [SERVICE_FAILURE_TIMEOUT] = "timeout",
-        [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
-        [SERVICE_FAILURE_SIGNAL] = "signal",
-        [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
-        [SERVICE_FAILURE_WATCHDOG] = "watchdog",
+        [SERVICE_SUCCESS]                 = "success",
+        [SERVICE_FAILURE_RESOURCES]       = "resources",
+        [SERVICE_FAILURE_PROTOCOL]        = "protocol",
+        [SERVICE_FAILURE_TIMEOUT]         = "timeout",
+        [SERVICE_FAILURE_EXIT_CODE]       = "exit-code",
+        [SERVICE_FAILURE_SIGNAL]          = "signal",
+        [SERVICE_FAILURE_CORE_DUMP]       = "core-dump",
+        [SERVICE_FAILURE_WATCHDOG]        = "watchdog",
         [SERVICE_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
-        [SERVICE_FAILURE_OOM_KILL] = "oom-kill",
-        [SERVICE_SKIP_CONDITION] = "exec-condition",
+        [SERVICE_FAILURE_OOM_KILL]        = "oom-kill",
+        [SERVICE_SKIP_CONDITION]          = "exec-condition",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
 
 static const char* const service_timeout_failure_mode_table[_SERVICE_TIMEOUT_FAILURE_MODE_MAX] = {
         [SERVICE_TIMEOUT_TERMINATE] = "terminate",
-        [SERVICE_TIMEOUT_ABORT] = "abort",
-        [SERVICE_TIMEOUT_KILL] = "kill",
+        [SERVICE_TIMEOUT_ABORT]     = "abort",
+        [SERVICE_TIMEOUT_KILL]      = "kill",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(service_timeout_failure_mode, ServiceTimeoutFailureMode);
@@ -4659,6 +4908,7 @@
         .get_timeout = service_get_timeout,
         .needs_console = service_needs_console,
         .exit_status = service_exit_status,
+        .status_text = service_status_text,
 
         .status_message_formats = {
                 .finished_start_job = {
@@ -4670,4 +4920,6 @@
                 },
                 .finished_job = service_finished_job,
         },
+
+        .can_start = service_can_start,
 };
diff --git a/src/core/service.h b/src/core/service.h
index 6c47c91..fd242a7 100644
--- a/src/core/service.h
+++ b/src/core/service.h
@@ -6,6 +6,7 @@
 
 #include "exit-status.h"
 #include "kill.h"
+#include "open-file.h"
 #include "path.h"
 #include "ratelimit.h"
 #include "socket.h"
@@ -24,17 +25,25 @@
 } ServiceRestart;
 
 typedef enum ServiceType {
-        SERVICE_SIMPLE,   /* we fork and go on right-away (i.e. modern socket activated daemons) */
-        SERVICE_FORKING,  /* forks by itself (i.e. traditional daemons) */
-        SERVICE_ONESHOT,  /* we fork and wait until the program finishes (i.e. programs like fsck which run and need to finish before we continue) */
-        SERVICE_DBUS,     /* we fork and wait until a specific D-Bus name appears on the bus */
-        SERVICE_NOTIFY,   /* we fork and wait until a daemon sends us a ready message with sd_notify() */
-        SERVICE_IDLE,     /* much like simple, but delay exec() until all jobs are dispatched. */
-        SERVICE_EXEC,     /* we fork and wait until we execute exec() (this means our own setup is waited for) */
+        SERVICE_SIMPLE,        /* we fork and go on right-away (i.e. modern socket activated daemons) */
+        SERVICE_FORKING,       /* forks by itself (i.e. traditional daemons) */
+        SERVICE_ONESHOT,       /* we fork and wait until the program finishes (i.e. programs like fsck which run and need to finish before we continue) */
+        SERVICE_DBUS,          /* we fork and wait until a specific D-Bus name appears on the bus */
+        SERVICE_NOTIFY,        /* we fork and wait until a daemon sends us a ready message with sd_notify() */
+        SERVICE_NOTIFY_RELOAD, /* just like SERVICE_NOTIFY, but also implements a reload protocol via SIGHUP */
+        SERVICE_IDLE,          /* much like simple, but delay exec() until all jobs are dispatched. */
+        SERVICE_EXEC,          /* we fork and wait until we execute exec() (this means our own setup is waited for) */
         _SERVICE_TYPE_MAX,
         _SERVICE_TYPE_INVALID = -EINVAL,
 } ServiceType;
 
+typedef enum ServiceExitType {
+        SERVICE_EXIT_MAIN,    /* we consider the main PID when deciding if the service exited */
+        SERVICE_EXIT_CGROUP,  /* we wait for the last process in the cgroup to exit */
+        _SERVICE_EXIT_TYPE_MAX,
+        _SERVICE_EXIT_TYPE_INVALID = -EINVAL,
+} ServiceExitType;
+
 typedef enum ServiceExecCommand {
         SERVICE_EXEC_CONDITION,
         SERVICE_EXEC_START_PRE,
@@ -68,7 +77,7 @@
         SERVICE_FAILURE_CORE_DUMP,
         SERVICE_FAILURE_WATCHDOG,
         SERVICE_FAILURE_START_LIMIT_HIT,
-        SERVICE_FAILURE_OOM_KILL,
+        SERVICE_FAILURE_OOM_KILL, /* OOM Kill by the Kernel or systemd-oomd */
         SERVICE_SKIP_CONDITION,
         _SERVICE_RESULT_MAX,
         _SERVICE_RESULT_INVALID = -EINVAL,
@@ -97,6 +106,7 @@
         Unit meta;
 
         ServiceType type;
+        ServiceExitType exit_type;
         ServiceRestart restart;
         ExitStatusSet restart_prevent_status;
         ExitStatusSet restart_force_status;
@@ -111,6 +121,7 @@
         usec_t timeout_abort_usec;
         bool timeout_abort_set;
         usec_t runtime_max_usec;
+        usec_t runtime_rand_extra_usec;
         ServiceTimeoutFailureMode timeout_start_failure_mode;
         ServiceTimeoutFailureMode timeout_stop_failure_mode;
 
@@ -148,8 +159,11 @@
         DynamicCreds dynamic_creds;
 
         pid_t main_pid, control_pid;
+
+        /* if we are a socket activated service instance, store information of the connection/peer/socket */
         int socket_fd;
-        SocketPeer *peer;
+        SocketPeer *socket_peer;
+        UnitRef accept_socket;
         bool socket_fd_selinux_context_net;
 
         bool permissions_start_only;
@@ -177,8 +191,6 @@
         char *status_text;
         int status_errno;
 
-        UnitRef accept_socket;
-
         sd_event_source *timer_event_source;
         PathSpec *pid_file_pathspec;
 
@@ -205,6 +217,11 @@
         bool flush_n_restarts;
 
         OOMPolicy oom_policy;
+
+        LIST_HEAD(OpenFile, open_files);
+
+        int reload_signal;
+        usec_t reload_begin_usec;
 };
 
 static inline usec_t service_timeout_abort_usec(Service *s) {
@@ -219,7 +236,7 @@
 
 extern const UnitVTable service_vtable;
 
-int service_set_socket_fd(Service *s, int fd, struct Socket *socket, bool selinux_context_net);
+int service_set_socket_fd(Service *s, int fd, struct Socket *socket, struct SocketPeer *peer, bool selinux_context_net);
 void service_close_socket_fd(Service *s);
 
 const char* service_restart_to_string(ServiceRestart i) _const_;
@@ -228,6 +245,9 @@
 const char* service_type_to_string(ServiceType i) _const_;
 ServiceType service_type_from_string(const char *s) _pure_;
 
+const char* service_exit_type_to_string(ServiceExitType i) _const_;
+ServiceExitType service_exit_type_from_string(const char *s) _pure_;
+
 const char* service_exec_command_to_string(ServiceExecCommand i) _const_;
 ServiceExecCommand service_exec_command_from_string(const char *s) _pure_;
 
diff --git a/src/core/show-status.c b/src/core/show-status.c
index df25429..c6b106f 100644
--- a/src/core/show-status.c
+++ b/src/core/show-status.c
@@ -12,7 +12,6 @@
 #include "string-table.h"
 #include "string-util.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static const char* const show_status_table[_SHOW_STATUS_MAX] = {
         [SHOW_STATUS_NO]        = "no",
@@ -40,7 +39,7 @@
 int status_vprintf(const char *status, ShowStatusFlags flags, const char *format, va_list ap) {
         static const char status_indent[] = "         "; /* "[" STATUS "] " */
         _cleanup_free_ char *s = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct iovec iovec[7] = {};
         int n = 0;
         static bool prev_ephemeral;
diff --git a/src/core/slice.c b/src/core/slice.c
index 2e43c00..4824a30 100644
--- a/src/core/slice.c
+++ b/src/core/slice.c
@@ -381,6 +381,9 @@
         }
 
         UNIT_FOREACH_DEPENDENCY(member, s, UNIT_ATOM_SLICE_OF) {
+                if (!member->cgroup_realized)
+                        continue;
+
                 if (action == FREEZER_FREEZE)
                         r = UNIT_VTABLE(member)->freeze(member);
                 else
@@ -389,11 +392,7 @@
                         return r;
         }
 
-        r = unit_cgroup_freezer_action(s, action);
-        if (r < 0)
-                return r;
-
-        return 1;
+        return unit_cgroup_freezer_action(s, action);
 }
 
 static int slice_freeze(Unit *s) {
diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c
index 79c4808..bcaa237 100644
--- a/src/core/smack-setup.c
+++ b/src/core/smack-setup.c
@@ -19,7 +19,6 @@
 #include "macro.h"
 #include "smack-setup.h"
 #include "string-util.h"
-#include "util.h"
 
 #if ENABLE_SMACK
 
@@ -49,10 +48,9 @@
 }
 
 static int write_access2_rules(const char *srcdir) {
-        _cleanup_close_ int load2_fd = -1, change_fd = -1;
+        _cleanup_close_ int load2_fd = -EBADF, change_fd = -EBADF;
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *entry;
-        int dfd = -1, r = 0;
+        int dfd = -EBADF, r = 0;
 
         load2_fd = open("/sys/fs/smackfs/load2", O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
         if (load2_fd < 0)  {
@@ -122,10 +120,9 @@
 }
 
 static int write_cipso2_rules(const char *srcdir) {
-        _cleanup_close_ int cipso2_fd = -1;
+        _cleanup_close_ int cipso2_fd = -EBADF;
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *entry;
-        int dfd = -1, r = 0;
+        int dfd = -EBADF, r = 0;
 
         cipso2_fd = open("/sys/fs/smackfs/cipso2", O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
         if (cipso2_fd < 0)  {
@@ -184,8 +181,7 @@
 static int write_netlabel_rules(const char *srcdir) {
         _cleanup_fclose_ FILE *dst = NULL;
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *entry;
-        int dfd = -1, r = 0;
+        int dfd = -EBADF, r = 0;
 
         dst = fopen("/sys/fs/smackfs/netlabel", "we");
         if (!dst)  {
@@ -242,7 +238,7 @@
 }
 
 static int write_onlycap_list(void) {
-        _cleanup_close_ int onlycap_fd = -1;
+        _cleanup_close_ int onlycap_fd = -EBADF;
         _cleanup_free_ char *list = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         size_t len = 0;
@@ -307,7 +303,7 @@
         assert(loaded_policy);
 
         r = write_access2_rules("/etc/smack/accesses.d/");
-        switch(r) {
+        switch (r) {
         case -ENOENT:
                 log_debug("Smack is not enabled in the kernel.");
                 return 0;
@@ -322,7 +318,7 @@
                 return 0;
         }
 
-#ifdef SMACK_RUN_LABEL
+#if HAVE_SMACK_RUN_LABEL
         r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER);
         if (r < 0)
                 log_warning_errno(r, "Failed to set SMACK label \"" SMACK_RUN_LABEL "\" on self: %m");
@@ -339,7 +335,7 @@
 #endif
 
         r = write_cipso2_rules("/etc/smack/cipso.d/");
-        switch(r) {
+        switch (r) {
         case -ENOENT:
                 log_debug("Smack/CIPSO is not enabled in the kernel.");
                 return 0;
@@ -355,7 +351,7 @@
         }
 
         r = write_netlabel_rules("/etc/smack/netlabel.d/");
-        switch(r) {
+        switch (r) {
         case -ENOENT:
                 log_debug("Smack/CIPSO is not enabled in the kernel.");
                 return 0;
@@ -371,7 +367,7 @@
         }
 
         r = write_onlycap_list();
-        switch(r) {
+        switch (r) {
         case -ENOENT:
                 log_debug("Smack is not enabled in the kernel.");
                 break;
diff --git a/src/core/socket.c b/src/core/socket.c
index f362a5b..409d415 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -14,21 +14,21 @@
 #include "bpf-firewall.h"
 #include "bus-error.h"
 #include "bus-util.h"
+#include "chase-symlinks.h"
+#include "constants.h"
 #include "copy.h"
 #include "dbus-socket.h"
 #include "dbus-unit.h"
-#include "def.h"
 #include "errno-list.h"
 #include "exit-status.h"
 #include "fd-util.h"
 #include "format-util.h"
-#include "fs-util.h"
 #include "in-addr-util.h"
 #include "io-util.h"
 #include "ip-protocol-list.h"
 #include "label.h"
 #include "log.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -109,8 +109,7 @@
         if (s->control_pid <= 0)
                 return;
 
-        unit_unwatch_pid(UNIT(s), s->control_pid);
-        s->control_pid = 0;
+        unit_unwatch_pid(UNIT(s), TAKE_PID(s->control_pid));
 }
 
 static void socket_cleanup_fd_list(SocketPort *p) {
@@ -209,8 +208,6 @@
 }
 
 static bool have_non_accept_socket(Socket *s) {
-        SocketPort *p;
-
         assert(s);
 
         if (!s->accept)
@@ -229,7 +226,6 @@
 }
 
 static int socket_add_mount_dependencies(Socket *s) {
-        SocketPort *p;
         int r;
 
         assert(s);
@@ -369,7 +365,6 @@
 
 static const char *socket_find_symlink_target(Socket *s) {
         const char *found = NULL;
-        SocketPort *p;
 
         LIST_FOREACH(port, p, s->ports) {
                 const char *f = NULL;
@@ -434,7 +429,7 @@
         else if (s->peer.sa.sa_family == AF_VSOCK)
                 siphash24_compress(&s->peer.vm.svm_cid, sizeof(s->peer.vm.svm_cid), state);
         else
-                assert_not_reached("Unknown address family.");
+                assert_not_reached();
 }
 
 static int peer_address_compare_func(const SocketPeer *x, const SocketPeer *y) {
@@ -444,7 +439,7 @@
         if (r != 0)
                 return r;
 
-        switch(x->peer.sa.sa_family) {
+        switch (x->peer.sa.sa_family) {
         case AF_INET:
                 return memcmp(&x->peer.in.sin_addr, &y->peer.in.sin_addr, sizeof(x->peer.in.sin_addr));
         case AF_INET6:
@@ -452,7 +447,7 @@
         case AF_VSOCK:
                 return CMP(x->peer.vm.svm_cid, y->peer.vm.svm_cid);
         }
-        assert_not_reached("Black sheep in the family!");
+        assert_not_reached();
 }
 
 DEFINE_PRIVATE_HASH_OPS(peer_address_hash_ops, SocketPeer, peer_address_hash_func, peer_address_compare_func);
@@ -464,10 +459,6 @@
         assert(u);
         assert(u->load_state == UNIT_STUB);
 
-        r = set_ensure_allocated(&s->peers_by_address, &peer_address_hash_ops);
-        if (r < 0)
-                return r;
-
         r = unit_load_fragment_and_dropin(u, true);
         if (r < 0)
                 return r;
@@ -486,12 +477,13 @@
 static SocketPeer *socket_peer_new(void) {
         SocketPeer *p;
 
-        p = new0(SocketPeer, 1);
+        p = new(SocketPeer, 1);
         if (!p)
                 return NULL;
 
-        p->n_ref = 1;
-
+        *p = (SocketPeer) {
+                .n_ref = 1,
+        };
         return p;
 }
 
@@ -508,14 +500,15 @@
 
 int socket_acquire_peer(Socket *s, int fd, SocketPeer **p) {
         _cleanup_(socket_peer_unrefp) SocketPeer *remote = NULL;
-        SocketPeer sa = {}, *i;
-        socklen_t salen = sizeof(sa.peer);
+        SocketPeer sa = {
+                .peer_salen = sizeof(union sockaddr_union),
+        }, *i;
         int r;
 
         assert(fd >= 0);
         assert(s);
 
-        if (getpeername(fd, &sa.peer.sa, &salen) < 0)
+        if (getpeername(fd, &sa.peer.sa, &sa.peer_salen) < 0)
                 return log_unit_error_errno(UNIT(s), errno, "getpeername failed: %m");
 
         if (!IN_SET(sa.peer.sa.sa_family, AF_INET, AF_INET6, AF_VSOCK)) {
@@ -523,6 +516,10 @@
                 return 0;
         }
 
+        r = set_ensure_allocated(&s->peers_by_address, &peer_address_hash_ops);
+        if (r < 0)
+                return r;
+
         i = set_get(s->peers_by_address, &sa);
         if (i) {
                 *p = socket_peer_ref(i);
@@ -534,7 +531,7 @@
                 return log_oom();
 
         remote->peer = sa.peer;
-        remote->peer_salen = salen;
+        remote->peer_salen = sa.peer_salen;
 
         r = set_put(s->peers_by_address, remote);
         if (r < 0)
@@ -543,7 +540,6 @@
         remote->socket = s;
 
         *p = TAKE_PTR(remote);
-
         return 1;
 }
 
@@ -559,15 +555,12 @@
         else if (type == SOCK_SEQPACKET)
                 return "ListenSequentialPacket";
 
-        assert_not_reached("Unknown socket type");
+        assert_not_reached();
         return NULL;
 }
 
 static void socket_dump(Unit *u, FILE *f, const char *prefix) {
-        char time_string[FORMAT_TIMESPAN_MAX];
-        SocketExecCommand c;
         Socket *s = SOCKET(u);
-        SocketPort *p;
         const char *prefix2, *str;
 
         assert(s);
@@ -724,12 +717,12 @@
         if (s->keep_alive_time > 0)
                 fprintf(f,
                         "%sKeepAliveTimeSec: %s\n",
-                        prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX, s->keep_alive_time, USEC_PER_SEC));
+                        prefix, FORMAT_TIMESPAN(s->keep_alive_time, USEC_PER_SEC));
 
         if (s->keep_alive_interval > 0)
                 fprintf(f,
                         "%sKeepAliveIntervalSec: %s\n",
-                        prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX, s->keep_alive_interval, USEC_PER_SEC));
+                        prefix, FORMAT_TIMESPAN(s->keep_alive_interval, USEC_PER_SEC));
 
         if (s->keep_alive_cnt > 0)
                 fprintf(f,
@@ -739,23 +732,21 @@
         if (s->defer_accept > 0)
                 fprintf(f,
                         "%sDeferAcceptSec: %s\n",
-                        prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX, s->defer_accept, USEC_PER_SEC));
+                        prefix, FORMAT_TIMESPAN(s->defer_accept, USEC_PER_SEC));
 
         LIST_FOREACH(port, p, s->ports) {
 
                 switch (p->type) {
                 case SOCKET_SOCKET: {
                         _cleanup_free_ char *k = NULL;
-                        const char *t;
                         int r;
 
                         r = socket_address_print(&p->address, &k);
-                        if (r < 0)
-                                t = strerror_safe(r);
-                        else
-                                t = k;
-
-                        fprintf(f, "%s%s: %s\n", prefix, listen_lookup(socket_address_family(&p->address), p->address.type), t);
+                        if (r < 0) {
+                                errno = -r;
+                                fprintf(f, "%s%s: %m\n", prefix, listen_lookup(socket_address_family(&p->address), p->address.type));
+                        } else
+                                fprintf(f, "%s%s: %s\n", prefix, listen_lookup(socket_address_family(&p->address), p->address.type), k);
                         break;
                 }
                 case SOCKET_SPECIAL:
@@ -775,7 +766,7 @@
         fprintf(f,
                 "%sTriggerLimitIntervalSec: %s\n"
                 "%sTriggerLimitBurst: %u\n",
-                prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX, s->trigger_limit.interval, USEC_PER_SEC),
+                prefix, FORMAT_TIMESPAN(s->trigger_limit.interval, USEC_PER_SEC),
                 prefix, s->trigger_limit.burst);
 
         str = ip_protocol_to_name(s->socket_protocol);
@@ -783,8 +774,6 @@
                 fprintf(f, "%sSocketProtocol: %s\n", prefix, str);
 
         if (!strv_isempty(s->symlinks)) {
-                char **q;
-
                 fprintf(f, "%sSymlinks:", prefix);
                 STRV_FOREACH(q, s->symlinks)
                         fprintf(f, " %s", *q);
@@ -794,12 +783,12 @@
 
         fprintf(f,
                 "%sTimeoutSec: %s\n",
-                prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX, s->timeout_usec, USEC_PER_SEC));
+                prefix, FORMAT_TIMESPAN(s->timeout_usec, USEC_PER_SEC));
 
         exec_context_dump(&s->exec_context, f, prefix);
         kill_context_dump(&s->kill_context, f, prefix);
 
-        for (c = 0; c < _SOCKET_EXEC_COMMAND_MAX; c++) {
+        for (SocketExecCommand c = 0; c < _SOCKET_EXEC_COMMAND_MAX; c++) {
                 if (!s->exec_command[c])
                         continue;
 
@@ -867,14 +856,12 @@
                                      be16toh(remote.in6.sin6_port)) < 0)
                                 return -ENOMEM;
                 } else {
-                        char a[INET6_ADDRSTRLEN], b[INET6_ADDRSTRLEN];
-
                         if (asprintf(&r,
                                      "%u-%s:%u-%s:%u",
                                      nr,
-                                     inet_ntop(AF_INET6, &local.in6.sin6_addr, a, sizeof(a)),
+                                     IN6_ADDR_TO_STRING(&local.in6.sin6_addr),
                                      be16toh(local.in6.sin6_port),
-                                     inet_ntop(AF_INET6, &remote.in6.sin6_addr, b, sizeof(b)),
+                                     IN6_ADDR_TO_STRING(&remote.in6.sin6_addr),
                                      be16toh(remote.in6.sin6_port)) < 0)
                                 return -ENOMEM;
                 }
@@ -917,7 +904,7 @@
                 break;
 
         default:
-                assert_not_reached("Unhandled socket type.");
+                assert_not_reached();
         }
 
         *instance = r;
@@ -925,9 +912,6 @@
 }
 
 static void socket_close_fds(Socket *s) {
-        SocketPort *p;
-        char **i;
-
         assert(s);
 
         LIST_FOREACH(port, p, s->ports) {
@@ -1132,7 +1116,7 @@
                 mode_t directory_mode,
                 mode_t socket_mode) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         mode_t old_mask;
         struct stat st;
         int r;
@@ -1188,7 +1172,7 @@
 }
 
 static int special_address_create(const char *path, bool writable) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
 
         assert(path);
@@ -1208,7 +1192,7 @@
 }
 
 static int usbffs_address_create(const char *path) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
 
         assert(path);
@@ -1233,7 +1217,7 @@
                 long maxmsg,
                 long msgsize) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
         mode_t old_mask;
         struct mq_attr _attr, *attr = NULL;
@@ -1273,7 +1257,6 @@
 
 static int socket_symlink(Socket *s) {
         const char *p;
-        char **i;
         int r;
 
         assert(s);
@@ -1297,7 +1280,8 @@
                 }
 
                 if (r < 0)
-                        log_unit_warning_errno(UNIT(s), r, "Failed to create symlink %s → %s, ignoring: %m", p, *i);
+                        log_unit_warning_errno(UNIT(s), r, "Failed to create symlink %s %s %s, ignoring: %m",
+                                               p, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), *i);
         }
 
         return 0;
@@ -1423,39 +1407,40 @@
         assert(s);
         assert(ret);
 
-        if (s->selinux_context_from_net) {
-                /* If this is requested, get the label from the network label */
+        Unit *service;
+        ExecCommand *c;
+        const char *exec_context;
+        _cleanup_free_ char *path = NULL;
 
-                r = mac_selinux_get_our_label(ret);
-                if (r == -EOPNOTSUPP)
-                        goto no_label;
+        r = socket_load_service_unit(s, -1, &service);
+        if (r == -ENODATA)
+                goto no_label;
+        if (r < 0)
+                return r;
 
-        } else {
-                /* Otherwise, get it from the executable we are about to start. */
+        exec_context = SERVICE(service)->exec_context.selinux_context;
+        if (exec_context) {
+                char *con;
 
-                Unit *service;
-                ExecCommand *c;
-                _cleanup_free_ char *path = NULL;
+                con = strdup(exec_context);
+                if (!con)
+                        return -ENOMEM;
 
-                r = socket_load_service_unit(s, -1, &service);
-                if (r == -ENODATA)
-                        goto no_label;
-                if (r < 0)
-                        return r;
-
-                c = SERVICE(service)->exec_command[SERVICE_EXEC_START];
-                if (!c)
-                        goto no_label;
-
-                r = chase_symlinks(c->path, SERVICE(service)->exec_context.root_directory, CHASE_PREFIX_ROOT, &path, NULL);
-                if (r < 0)
-                        goto no_label;
-
-                r = mac_selinux_get_create_label_from_exe(path, ret);
-                if (IN_SET(r, -EPERM, -EOPNOTSUPP))
-                        goto no_label;
+                *ret = TAKE_PTR(con);
+                return 0;
         }
 
+        c = SERVICE(service)->exec_command[SERVICE_EXEC_START];
+        if (!c)
+                goto no_label;
+
+        r = chase_symlinks(c->path, SERVICE(service)->exec_context.root_directory, CHASE_PREFIX_ROOT, &path, NULL);
+        if (r < 0)
+                goto no_label;
+
+        r = mac_selinux_get_create_label_from_exe(path, ret);
+        if (IN_SET(r, -EPERM, -EOPNOTSUPP))
+                goto no_label;
         return r;
 
 no_label:
@@ -1517,7 +1502,7 @@
                 const SocketAddress *address,
                 const char *label) {
 
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+        _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
         int fd, r;
         pid_t pid;
 
@@ -1626,7 +1611,6 @@
         _cleanup_(socket_close_fdsp) Socket *s = orig_s;
         _cleanup_(mac_selinux_freep) char *label = NULL;
         bool know_label = false;
-        SocketPort *p;
         int r;
 
         assert(s);
@@ -1727,7 +1711,7 @@
                         break;
                 }
                 default:
-                        assert_not_reached("Unknown port type");
+                        assert_not_reached();
                 }
         }
 
@@ -1736,7 +1720,6 @@
 }
 
 static void socket_unwatch_fds(Socket *s) {
-        SocketPort *p;
         int r;
 
         assert(s);
@@ -1755,7 +1738,6 @@
 }
 
 static int socket_watch_fds(Socket *s) {
-        SocketPort *p;
         int r;
 
         assert(s);
@@ -1793,7 +1775,6 @@
 
 static int socket_check_open(Socket *s) {
         bool have_open = false, have_closed = false;
-        SocketPort *p;
 
         assert(s);
 
@@ -1937,10 +1918,10 @@
 
         _cleanup_(exec_params_clear) ExecParameters exec_params = {
                 .flags     = EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN,
-                .stdin_fd  = -1,
-                .stdout_fd = -1,
-                .stderr_fd = -1,
-                .exec_fd   = -1,
+                .stdin_fd  = -EBADF,
+                .stdout_fd = -EBADF,
+                .stderr_fd = -EBADF,
+                .exec_fd   = -EBADF,
         };
         pid_t pid;
         int r;
@@ -1997,7 +1978,6 @@
         if (r == 0) {
                 uid_t uid = UID_INVALID;
                 gid_t gid = GID_INVALID;
-                SocketPort *p;
 
                 /* Child */
 
@@ -2296,7 +2276,7 @@
 }
 
 static void flush_ports(Socket *s) {
-        SocketPort *p;
+        assert(s);
 
         /* Flush all incoming traffic, regardless if actual bytes or new connections, so that this socket isn't busy
          * anymore */
@@ -2403,7 +2383,7 @@
 
                 s->n_accepted++;
 
-                r = service_set_socket_fd(SERVICE(service), cfd, s, s->selinux_context_from_net);
+                r = service_set_socket_fd(SERVICE(service), cfd, s, p, s->selinux_context_from_net);
                 if (ERRNO_IS_DISCONNECT(r))
                         return;
                 if (r < 0)
@@ -2412,8 +2392,6 @@
                 TAKE_FD(cfd); /* We passed ownership of the fd to the service now. Forget it here. */
                 s->n_connections++;
 
-                SERVICE(service)->peer = TAKE_PTR(p); /* Pass ownership of the peer reference */
-
                 r = manager_add_job(UNIT(s)->manager, JOB_START, service, JOB_REPLACE, NULL, &error, NULL);
                 if (r < 0) {
                         /* We failed to activate the new service, but it still exists. Let's make sure the
@@ -2515,12 +2493,6 @@
 
         assert(IN_SET(s->state, SOCKET_DEAD, SOCKET_FAILED));
 
-        r = unit_test_start_limit(u);
-        if (r < 0) {
-                socket_enter_dead(s, SOCKET_FAILURE_START_LIMIT_HIT);
-                return r;
-        }
-
         r = unit_acquire_invocation_id(u);
         if (r < 0)
                 return r;
@@ -2573,7 +2545,6 @@
 
 static int socket_serialize(Unit *u, FILE *f, FDSet *fds) {
         Socket *s = SOCKET(u);
-        SocketPort *p;
         int r;
 
         assert(u);
@@ -2684,7 +2655,6 @@
                 }
         } else if (streq(key, "fifo")) {
                 int fd, skip = 0;
-                SocketPort *p;
 
                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
                         log_unit_debug(u, "Failed to parse fifo value: %s", value);
@@ -2705,7 +2675,6 @@
 
         } else if (streq(key, "special")) {
                 int fd, skip = 0;
-                SocketPort *p;
 
                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
                         log_unit_debug(u, "Failed to parse special value: %s", value);
@@ -2726,7 +2695,6 @@
 
         } else if (streq(key, "mqueue")) {
                 int fd, skip = 0;
-                SocketPort *p;
 
                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
                         log_unit_debug(u, "Failed to parse mqueue value: %s", value);
@@ -2747,7 +2715,6 @@
 
         } else if (streq(key, "socket")) {
                 int fd, type, skip = 0;
-                SocketPort *p;
 
                 if (sscanf(value, "%i %i %n", &fd, &type, &skip) < 2 || fd < 0 || type < 0 || !fdset_contains(fds, fd))
                         log_unit_debug(u, "Failed to parse socket value: %s", value);
@@ -2768,7 +2735,6 @@
 
         } else if (streq(key, "netlink")) {
                 int fd, skip = 0;
-                SocketPort *p;
 
                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
                         log_unit_debug(u, "Failed to parse socket value: %s", value);
@@ -2788,7 +2754,6 @@
 
         } else if (streq(key, "ffs")) {
                 int fd, skip = 0;
-                SocketPort *p;
 
                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
                         log_unit_debug(u, "Failed to parse ffs value: %s", value);
@@ -2815,7 +2780,6 @@
 
 static void socket_distribute_fds(Unit *u, FDSet *fds) {
         Socket *s = SOCKET(u);
-        SocketPort *p;
 
         assert(u);
 
@@ -2935,7 +2899,7 @@
 }
 
 static int socket_accept_in_cgroup(Socket *s, SocketPort *p, int fd) {
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+        _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
         int cfd, r;
         pid_t pid;
 
@@ -3013,10 +2977,9 @@
 }
 
 static int socket_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        SocketPort *p = userdata;
-        int cfd = -1;
+        SocketPort *p = ASSERT_PTR(userdata);
+        int cfd = -EBADF;
 
-        assert(p);
         assert(fd >= 0);
 
         if (p->socket->state != SOCKET_LISTENING)
@@ -3074,7 +3037,7 @@
         else if (code == CLD_DUMPED)
                 f = SOCKET_FAILURE_CORE_DUMP;
         else
-                assert_not_reached("Unknown sigchld code");
+                assert_not_reached();
 
         if (s->control_command) {
                 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
@@ -3152,7 +3115,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Uh, control process died at wrong time.");
+                        assert_not_reached();
                 }
         }
 
@@ -3229,7 +3192,7 @@
                 break;
 
         default:
-                assert_not_reached("Timeout at wrong time.");
+                assert_not_reached();
         }
 
         return 0;
@@ -3237,7 +3200,6 @@
 
 int socket_collect_fds(Socket *s, int **fds) {
         size_t k = 0, n = 0;
-        SocketPort *p;
         int *rfds;
 
         assert(s);
@@ -3261,11 +3223,9 @@
                 return -ENOMEM;
 
         LIST_FOREACH(port, p, s->ports) {
-                size_t i;
-
                 if (p->fd >= 0)
                         rfds[k++] = p->fd;
-                for (i = 0; i < p->n_auxiliary_fds; ++i)
+                for (size_t i = 0; i < p->n_auxiliary_fds; ++i)
                         rfds[k++] = p->auxiliary_fds[i];
         }
 
@@ -3429,25 +3389,40 @@
         return exec_context_get_clean_mask(&s->exec_context, ret);
 }
 
+static int socket_can_start(Unit *u) {
+        Socket *s = SOCKET(u);
+        int r;
+
+        assert(s);
+
+        r = unit_test_start_limit(u);
+        if (r < 0) {
+                socket_enter_dead(s, SOCKET_FAILURE_START_LIMIT_HIT);
+                return r;
+        }
+
+        return 1;
+}
+
 static const char* const socket_exec_command_table[_SOCKET_EXEC_COMMAND_MAX] = {
-        [SOCKET_EXEC_START_PRE] = "ExecStartPre",
+        [SOCKET_EXEC_START_PRE]   = "ExecStartPre",
         [SOCKET_EXEC_START_CHOWN] = "ExecStartChown",
-        [SOCKET_EXEC_START_POST] = "ExecStartPost",
-        [SOCKET_EXEC_STOP_PRE] = "ExecStopPre",
-        [SOCKET_EXEC_STOP_POST] = "ExecStopPost"
+        [SOCKET_EXEC_START_POST]  = "ExecStartPost",
+        [SOCKET_EXEC_STOP_PRE]    = "ExecStopPre",
+        [SOCKET_EXEC_STOP_POST]   = "ExecStopPost"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(socket_exec_command, SocketExecCommand);
 
 static const char* const socket_result_table[_SOCKET_RESULT_MAX] = {
-        [SOCKET_SUCCESS] = "success",
-        [SOCKET_FAILURE_RESOURCES] = "resources",
-        [SOCKET_FAILURE_TIMEOUT] = "timeout",
-        [SOCKET_FAILURE_EXIT_CODE] = "exit-code",
-        [SOCKET_FAILURE_SIGNAL] = "signal",
-        [SOCKET_FAILURE_CORE_DUMP] = "core-dump",
-        [SOCKET_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
-        [SOCKET_FAILURE_TRIGGER_LIMIT_HIT] = "trigger-limit-hit",
+        [SOCKET_SUCCESS]                         = "success",
+        [SOCKET_FAILURE_RESOURCES]               = "resources",
+        [SOCKET_FAILURE_TIMEOUT]                 = "timeout",
+        [SOCKET_FAILURE_EXIT_CODE]               = "exit-code",
+        [SOCKET_FAILURE_SIGNAL]                  = "signal",
+        [SOCKET_FAILURE_CORE_DUMP]               = "core-dump",
+        [SOCKET_FAILURE_START_LIMIT_HIT]         = "start-limit-hit",
+        [SOCKET_FAILURE_TRIGGER_LIMIT_HIT]       = "trigger-limit-hit",
         [SOCKET_FAILURE_SERVICE_START_LIMIT_HIT] = "service-start-limit-hit"
 };
 
@@ -3455,8 +3430,8 @@
 
 static const char* const socket_timestamping_table[_SOCKET_TIMESTAMPING_MAX] = {
         [SOCKET_TIMESTAMPING_OFF] = "off",
-        [SOCKET_TIMESTAMPING_US] = "us",
-        [SOCKET_TIMESTAMPING_NS] = "ns",
+        [SOCKET_TIMESTAMPING_US]  = "us",
+        [SOCKET_TIMESTAMPING_NS]  = "ns",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(socket_timestamping, SocketTimestamping);
@@ -3555,4 +3530,6 @@
                         [JOB_TIMEOUT]    = "Timed out stopping %s.",
                 },
         },
+
+        .can_start = socket_can_start,
 };
diff --git a/src/core/swap.c b/src/core/swap.c
index 3843b19..2d25014 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -155,8 +155,7 @@
         if (s->control_pid <= 0)
                 return;
 
-        unit_unwatch_pid(UNIT(s), s->control_pid);
-        s->control_pid = 0;
+        unit_unwatch_pid(UNIT(s), TAKE_PID(s->control_pid));
 }
 
 static void swap_done(Unit *u) {
@@ -296,9 +295,8 @@
 }
 
 static int swap_load_devnode(Swap *s) {
-        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
+        _cleanup_free_ char *p = NULL;
         struct stat st;
-        const char *p;
         int r;
 
         assert(s);
@@ -306,16 +304,13 @@
         if (stat(s->what, &st) < 0 || !S_ISBLK(st.st_mode))
                 return 0;
 
-        r = sd_device_new_from_stat_rdev(&d, &st);
+        r = devname_from_stat_rdev(&st, &p);
         if (r < 0) {
                 log_unit_full_errno(UNIT(s), r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
-                                    "Failed to allocate device for swap %s: %m", s->what);
+                                    "Failed to get device node for swap %s: %m", s->what);
                 return 0;
         }
 
-        if (sd_device_get_devname(d, &p) < 0)
-                return 0;
-
         return swap_set_devnode(s, p);
 }
 
@@ -538,7 +533,6 @@
 
 static void swap_set_state(Swap *s, SwapState state) {
         SwapState old_state;
-        Swap *other;
 
         assert(s);
 
@@ -609,7 +603,6 @@
 }
 
 static void swap_dump(Unit *u, FILE *f, const char *prefix) {
-        char buf[FORMAT_TIMESPAN_MAX];
         Swap *s = SWAP(u);
         SwapParameters *p;
 
@@ -651,7 +644,7 @@
 
         fprintf(f,
                 "%sTimeoutSec: %s\n",
-                prefix, format_timespan(buf, sizeof(buf), s->timeout_usec, USEC_PER_SEC));
+                prefix, FORMAT_TIMESPAN(s->timeout_usec, USEC_PER_SEC));
 
         if (s->control_pid > 0)
                 fprintf(f,
@@ -667,10 +660,10 @@
 
         _cleanup_(exec_params_clear) ExecParameters exec_params = {
                 .flags     = EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN,
-                .stdin_fd  = -1,
-                .stdout_fd = -1,
-                .stderr_fd = -1,
-                .exec_fd   = -1,
+                .stdin_fd  = -EBADF,
+                .stdout_fd = -EBADF,
+                .stderr_fd = -EBADF,
+                .exec_fd   = -EBADF,
         };
         pid_t pid;
         int r;
@@ -747,8 +740,6 @@
         assert(s);
 
         if (s->from_proc_swaps) {
-                Swap *other;
-
                 swap_enter_active(s, f);
 
                 LIST_FOREACH_OTHERS(same_devnode, other, s)
@@ -836,7 +827,7 @@
                 }
         }
 
-        r = exec_command_set(s->control_command, "/sbin/swapon", NULL);
+        r = exec_command_set(s->control_command, "/sbin/swapon", "--fixpgsz", NULL);
         if (r < 0)
                 goto fail;
 
@@ -904,7 +895,7 @@
 }
 
 static int swap_start(Unit *u) {
-        Swap *s = SWAP(u), *other;
+        Swap *s = SWAP(u);
         int r;
 
         assert(s);
@@ -933,12 +924,6 @@
                 if (UNIT(other)->job && UNIT(other)->job->state == JOB_RUNNING)
                         return -EAGAIN;
 
-        r = unit_test_start_limit(u);
-        if (r < 0) {
-                swap_enter_dead(s, SWAP_FAILURE_START_LIMIT_HIT);
-                return r;
-        }
-
         r = unit_acquire_invocation_id(u);
         if (r < 0)
                 return r;
@@ -980,7 +965,7 @@
                 return 0;
 
         default:
-                assert_not_reached("Unexpected state.");
+                assert_not_reached();
         }
 }
 
@@ -1074,7 +1059,7 @@
         else if (code == CLD_DUMPED)
                 f = SWAP_FAILURE_CORE_DUMP;
         else
-                assert_not_reached("Unknown code");
+                assert_not_reached();
 
         if (s->result == SWAP_SUCCESS)
                 s->result = f;
@@ -1119,7 +1104,7 @@
                 break;
 
         default:
-                assert_not_reached("Uh, control process died at wrong time.");
+                assert_not_reached();
         }
 
         /* Notify clients about changed exit status */
@@ -1170,7 +1155,7 @@
                 break;
 
         default:
-                assert_not_reached("Timeout at wrong time.");
+                assert_not_reached();
         }
 
         return 0;
@@ -1202,8 +1187,9 @@
                         continue;
                 }
 
-                if (cunescape(dev, UNESCAPE_RELAX, &d) < 0)
-                        return log_oom();
+                ssize_t l = cunescape(dev, UNESCAPE_RELAX, &d);
+                if (l < 0)
+                        return log_error_errno(l, "Failed to unescape device path: %m");
 
                 device_found_node(m, d, DEVICE_FOUND_SWAP, DEVICE_FOUND_SWAP);
 
@@ -1214,7 +1200,6 @@
 }
 
 static int swap_process_proc_swaps(Manager *m) {
-        Unit *u;
         int r;
 
         assert(m);
@@ -1227,6 +1212,8 @@
                 LIST_FOREACH(units_by_type, u, m->units_by_type[UNIT_SWAP]) {
                         Swap *swap = SWAP(u);
 
+                        assert(swap);
+
                         swap->is_active = swap->just_activated = false;
                 }
 
@@ -1238,6 +1225,8 @@
         LIST_FOREACH(units_by_type, u, m->units_by_type[UNIT_SWAP]) {
                 Swap *swap = SWAP(u);
 
+                assert(swap);
+
                 if (!swap->is_active) {
 
                         swap_unset_proc_swaps(swap);
@@ -1256,7 +1245,7 @@
                         }
 
                         if (swap->what)
-                                device_found_node(m, swap->what, 0, DEVICE_FOUND_SWAP);
+                                device_found_node(m, swap->what, DEVICE_NOT_FOUND, DEVICE_FOUND_SWAP);
 
                 } else if (swap->just_activated) {
 
@@ -1293,9 +1282,8 @@
 }
 
 static int swap_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(revents & EPOLLPRI);
 
         return swap_process_proc_swaps(m);
@@ -1303,7 +1291,7 @@
 
 static Unit *swap_following(Unit *u) {
         Swap *s = SWAP(u);
-        Swap *other, *first = NULL;
+        Swap *first = NULL;
 
         assert(s);
 
@@ -1323,11 +1311,11 @@
         if (streq_ptr(s->what, s->devnode))
                 return NULL;
 
-        LIST_FOREACH_AFTER(same_devnode, other, s)
+        LIST_FOREACH(same_devnode, other, s->same_devnode_next)
                 if (streq_ptr(other->what, other->devnode))
                         return UNIT(other);
 
-        LIST_FOREACH_BEFORE(same_devnode, other, s) {
+        LIST_FOREACH_BACKWARDS(same_devnode, other, s->same_devnode_prev) {
                 if (streq_ptr(other->what, other->devnode))
                         return UNIT(other);
 
@@ -1339,7 +1327,7 @@
 }
 
 static int swap_following_set(Unit *u, Set **_set) {
-        Swap *s = SWAP(u), *other;
+        Swap *s = SWAP(u);
         _cleanup_set_free_ Set *set = NULL;
         int r;
 
@@ -1444,8 +1432,7 @@
                 int q;
 
                 q = unit_name_from_path(devlink, ".swap", &n);
-                if (IN_SET(q, -EINVAL, -ENAMETOOLONG)) /* If name too long or otherwise not convertible to
-                                                        * unit name, we can't manage it */
+                if (q == -EINVAL) /* If the name is not convertible to unit name, we can't manage it */
                         continue;
                 if (q < 0)
                         return q;
@@ -1502,6 +1489,9 @@
         usec_t t;
         int r;
 
+        assert(s);
+        assert(u);
+
         if (!s->timer_event_source)
                 return 0;
 
@@ -1588,20 +1578,35 @@
         return exec_context_get_clean_mask(&s->exec_context, ret);
 }
 
+static int swap_can_start(Unit *u) {
+        Swap *s = SWAP(u);
+        int r;
+
+        assert(s);
+
+        r = unit_test_start_limit(u);
+        if (r < 0) {
+                swap_enter_dead(s, SWAP_FAILURE_START_LIMIT_HIT);
+                return r;
+        }
+
+        return 1;
+}
+
 static const char* const swap_exec_command_table[_SWAP_EXEC_COMMAND_MAX] = {
-        [SWAP_EXEC_ACTIVATE] = "ExecActivate",
+        [SWAP_EXEC_ACTIVATE]   = "ExecActivate",
         [SWAP_EXEC_DEACTIVATE] = "ExecDeactivate",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(swap_exec_command, SwapExecCommand);
 
 static const char* const swap_result_table[_SWAP_RESULT_MAX] = {
-        [SWAP_SUCCESS] = "success",
-        [SWAP_FAILURE_RESOURCES] = "resources",
-        [SWAP_FAILURE_TIMEOUT] = "timeout",
-        [SWAP_FAILURE_EXIT_CODE] = "exit-code",
-        [SWAP_FAILURE_SIGNAL] = "signal",
-        [SWAP_FAILURE_CORE_DUMP] = "core-dump",
+        [SWAP_SUCCESS]                 = "success",
+        [SWAP_FAILURE_RESOURCES]       = "resources",
+        [SWAP_FAILURE_TIMEOUT]         = "timeout",
+        [SWAP_FAILURE_EXIT_CODE]       = "exit-code",
+        [SWAP_FAILURE_SIGNAL]          = "signal",
+        [SWAP_FAILURE_CORE_DUMP]       = "core-dump",
         [SWAP_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
 };
 
@@ -1683,4 +1688,6 @@
                         [JOB_TIMEOUT]    = "Timed out deactivating swap %s.",
                 },
         },
+
+        .can_start = swap_can_start,
 };
diff --git a/src/core/system.conf.in b/src/core/system.conf.in
index e88280b..9572b57 100644
--- a/src/core/system.conf.in
+++ b/src/core/system.conf.in
@@ -29,9 +29,11 @@
 #CPUAffinity=
 #NUMAPolicy=default
 #NUMAMask=
-#RuntimeWatchdogSec=0
+#RuntimeWatchdogSec=off
+#RuntimeWatchdogPreSec=off
+#RuntimeWatchdogPreGovernor=
 #RebootWatchdogSec=10min
-#KExecWatchdogSec=0
+#KExecWatchdogSec=off
 #WatchdogDevice=
 #CapabilityBoundingSet=
 #NoNewPrivileges=no
@@ -41,17 +43,17 @@
 #DefaultTimerAccuracySec=1min
 #DefaultStandardOutput=journal
 #DefaultStandardError=inherit
-#DefaultTimeoutStartSec=90s
-#DefaultTimeoutStopSec=90s
+#DefaultTimeoutStartSec={{DEFAULT_TIMEOUT_SEC}}s
+#DefaultTimeoutStopSec={{DEFAULT_TIMEOUT_SEC}}s
 #DefaultTimeoutAbortSec=
+#DefaultDeviceTimeoutSec={{DEFAULT_TIMEOUT_SEC}}s
 #DefaultRestartSec=100ms
 #DefaultStartLimitIntervalSec=10s
 #DefaultStartLimitBurst=5
 #DefaultEnvironment=
-#DefaultCPUAccounting=no
+#DefaultCPUAccounting=yes
 #DefaultIOAccounting=no
 #DefaultIPAccounting=no
-#DefaultBlockIOAccounting=no
 #DefaultMemoryAccounting={{ 'yes' if MEMORY_ACCOUNTING_DEFAULT else 'no' }}
 #DefaultTasksAccounting=yes
 #DefaultTasksMax=15%
@@ -64,7 +66,7 @@
 #DefaultLimitNOFILE=1024:{{HIGH_RLIMIT_NOFILE}}
 #DefaultLimitAS=
 #DefaultLimitNPROC=
-#DefaultLimitMEMLOCK=
+#DefaultLimitMEMLOCK=8M
 #DefaultLimitLOCKS=
 #DefaultLimitSIGPENDING=
 #DefaultLimitMSGQUEUE=
@@ -72,3 +74,6 @@
 #DefaultLimitRTPRIO=
 #DefaultLimitRTTIME=
 #DefaultOOMPolicy=stop
+#DefaultSmackProcessLabel=
+#ReloadLimitIntervalSec=
+#ReloadLimitBurst=
diff --git a/src/core/systemd.pc.in b/src/core/systemd.pc.in
index fc0f8c3..693433b 100644
--- a/src/core/systemd.pc.in
+++ b/src/core/systemd.pc.in
@@ -65,6 +65,8 @@
 tmpfiles_dir=${prefix}/lib/tmpfiles.d
 tmpfilesdir=${tmpfiles_dir}
 
+user_tmpfiles_dir=${prefix}/share/user-tmpfiles.d
+
 sysusers_dir=${rootprefix}/lib/sysusers.d
 sysusersdir=${sysusers_dir}
 
diff --git a/src/core/target.c b/src/core/target.c
index 99a9374..6225df5 100644
--- a/src/core/target.c
+++ b/src/core/target.c
@@ -148,6 +148,7 @@
 static int target_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
         Target *s = TARGET(u);
 
+        assert(s);
         assert(u);
         assert(key);
         assert(value);
diff --git a/src/core/timer.c b/src/core/timer.c
index e064ad9..371e42e 100644
--- a/src/core/timer.c
+++ b/src/core/timer.c
@@ -68,7 +68,7 @@
         t->monotonic_event_source = sd_event_source_disable_unref(t->monotonic_event_source);
         t->realtime_event_source = sd_event_source_disable_unref(t->realtime_event_source);
 
-        free(t->stamp_path);
+        t->stamp_path = mfree(t->stamp_path);
 }
 
 static int timer_verify(Timer *t) {
@@ -83,7 +83,6 @@
 
 static int timer_add_default_dependencies(Timer *t) {
         int r;
-        TimerValue *v;
 
         assert(t);
 
@@ -100,8 +99,6 @@
                         return r;
 
                 LIST_FOREACH(value, v, t->values) {
-                        const char *target;
-
                         if (v->base != TIMER_CALENDAR)
                                 continue;
 
@@ -135,6 +132,7 @@
 }
 
 static int timer_setup_persistent(Timer *t) {
+        _cleanup_free_ char *stamp_path = NULL;
         int r;
 
         assert(t);
@@ -148,13 +146,13 @@
                 if (r < 0)
                         return r;
 
-                t->stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id);
+                stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id);
         } else {
                 const char *e;
 
                 e = getenv("XDG_DATA_HOME");
                 if (e)
-                        t->stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id);
+                        stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id);
                 else {
 
                         _cleanup_free_ char *h = NULL;
@@ -163,14 +161,14 @@
                         if (r < 0)
                                 return log_unit_error_errno(UNIT(t), r, "Failed to determine home directory: %m");
 
-                        t->stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id);
+                        stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id);
                 }
         }
 
-        if (!t->stamp_path)
+        if (!stamp_path)
                 return log_oom();
 
-        return 0;
+        return free_and_replace(t->stamp_path, stamp_path);
 }
 
 static uint64_t timer_get_fixed_delay_hash(Timer *t) {
@@ -234,10 +232,8 @@
 }
 
 static void timer_dump(Unit *u, FILE *f, const char *prefix) {
-        char buf[FORMAT_TIMESPAN_MAX];
         Timer *t = TIMER(u);
         Unit *trigger;
-        TimerValue *v;
 
         trigger = UNIT_TRIGGER(u);
 
@@ -257,7 +253,7 @@
                 prefix, trigger ? trigger->id : "n/a",
                 prefix, yes_no(t->persistent),
                 prefix, yes_no(t->wake_system),
-                prefix, format_timespan(buf, sizeof(buf), t->accuracy_usec, 1),
+                prefix, FORMAT_TIMESPAN(t->accuracy_usec, 1),
                 prefix, yes_no(t->remain_after_elapse),
                 prefix, yes_no(t->fixed_random_delay),
                 prefix, yes_no(t->on_clock_change),
@@ -274,15 +270,12 @@
                                 prefix,
                                 timer_base_to_string(v->base),
                                 strna(p));
-                } else  {
-                        char timespan1[FORMAT_TIMESPAN_MAX];
-
+                } else
                         fprintf(f,
                                 "%s%s: %s\n",
                                 prefix,
                                 timer_base_to_string(v->base),
-                                format_timespan(timespan1, sizeof(timespan1), v->value, 0));
-                }
+                                FORMAT_TIMESPAN(v->value, 0));
 }
 
 static void timer_set_state(Timer *t, TimerState state) {
@@ -355,7 +348,6 @@
 }
 
 static void add_random(Timer *t, usec_t *v) {
-        char s[FORMAT_TIMESPAN_MAX];
         usec_t add;
 
         assert(t);
@@ -373,14 +365,13 @@
         else
                 *v += add;
 
-        log_unit_debug(UNIT(t), "Adding %s random time.", format_timespan(s, sizeof(s), add, 0));
+        log_unit_debug(UNIT(t), "Adding %s random time.", FORMAT_TIMESPAN(add, 0));
 }
 
 static void timer_enter_waiting(Timer *t, bool time_change) {
         bool found_monotonic = false, found_realtime = false;
         bool leave_around = false;
         triple_timestamp ts;
-        TimerValue *v;
         Unit *trigger;
         int r;
 
@@ -478,7 +469,7 @@
                                 break;
 
                         default:
-                                assert_not_reached("Unknown timer base");
+                                assert_not_reached();
                         }
 
                         v->next_elapse = usec_add(usec_shift_clock(base, CLOCK_MONOTONIC, TIMER_MONOTONIC_CLOCK(t)), v->value);
@@ -508,13 +499,12 @@
         }
 
         if (found_monotonic) {
-                char buf[FORMAT_TIMESPAN_MAX];
                 usec_t left;
 
                 add_random(t, &t->next_elapse_monotonic_or_boottime);
 
                 left = usec_sub_unsigned(t->next_elapse_monotonic_or_boottime, triple_timestamp_by_clock(&ts, TIMER_MONOTONIC_CLOCK(t)));
-                log_unit_debug(UNIT(t), "Monotonic timer elapses in %s.", format_timespan(buf, sizeof(buf), left, 0));
+                log_unit_debug(UNIT(t), "Monotonic timer elapses in %s.", FORMAT_TIMESPAN(left, 0));
 
                 if (t->monotonic_event_source) {
                         r = sd_event_source_set_time(t->monotonic_event_source, t->next_elapse_monotonic_or_boottime);
@@ -546,11 +536,9 @@
         }
 
         if (found_realtime) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-
                 add_random(t, &t->next_elapse_realtime);
 
-                log_unit_debug(UNIT(t), "Realtime timer elapses at %s.", format_timestamp(buf, sizeof(buf), t->next_elapse_realtime));
+                log_unit_debug(UNIT(t), "Realtime timer elapses at %s.", FORMAT_TIMESTAMP(t->next_elapse_realtime));
 
                 if (t->realtime_event_source) {
                         r = sd_event_source_set_time(t->realtime_event_source, t->next_elapse_realtime);
@@ -589,8 +577,10 @@
 }
 
 static void timer_enter_running(Timer *t) {
+        _cleanup_(activation_details_unrefp) ActivationDetails *details = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         Unit *trigger;
+        Job *job;
         int r;
 
         assert(t);
@@ -606,11 +596,20 @@
                 return;
         }
 
-        r = manager_add_job(UNIT(t)->manager, JOB_START, trigger, JOB_REPLACE, NULL, &error, NULL);
+        details = activation_details_new(UNIT(t));
+        if (!details) {
+                r = -ENOMEM;
+                goto fail;
+        }
+
+        r = manager_add_job(UNIT(t)->manager, JOB_START, trigger, JOB_REPLACE, NULL, &error, &job);
         if (r < 0)
                 goto fail;
 
         dual_timestamp_get(&t->last_trigger);
+        ACTIVATION_DETAILS_TIMER(details)->last_trigger = t->last_trigger;
+
+        job_set_activation_details(job, details);
 
         if (t->stamp_path)
                 touch_file(t->stamp_path, true, t->last_trigger.realtime, UID_INVALID, GID_INVALID, MODE_INVALID);
@@ -625,7 +624,6 @@
 
 static int timer_start(Unit *u) {
         Timer *t = TIMER(u);
-        TimerValue *v;
         int r;
 
         assert(t);
@@ -635,12 +633,6 @@
         if (r < 0)
                 return r;
 
-        r = unit_test_start_limit(u);
-        if (r < 0) {
-                timer_enter_dead(t, TIMER_FAILURE_START_LIMIT_HIT);
-                return r;
-        }
-
         r = unit_acquire_invocation_id(u);
         if (r < 0)
                 return r;
@@ -664,12 +656,9 @@
                         ft = timespec_load(&st.st_mtim);
                         if (ft < now(CLOCK_REALTIME))
                                 t->last_trigger.realtime = ft;
-                        else {
-                                char z[FORMAT_TIMESTAMP_MAX];
-
+                        else
                                 log_unit_warning(u, "Not using persistent file timestamp %s as it is in the future.",
-                                                 format_timestamp(z, sizeof(z), ft));
-                        }
+                                                 FORMAT_TIMESTAMP(ft));
 
                 } else if (errno == ENOENT)
                         /* The timer has never run before, make sure a stamp file exists. */
@@ -773,7 +762,6 @@
 
 static void timer_trigger_notify(Unit *u, Unit *other) {
         Timer *t = TIMER(u);
-        TimerValue *v;
 
         assert(u);
         assert(other);
@@ -808,7 +796,7 @@
                 break;
 
         default:
-                assert_not_reached("Unknown timer state");
+                assert_not_reached();
         }
 }
 
@@ -834,7 +822,7 @@
 
         /* If we appear to have triggered in the future, the system clock must
          * have been set backwards.  So let's rewind our own clock and allow
-         * the future trigger(s) to happen again :).  Exactly the same as when
+         * the future triggers to happen again :).  Exactly the same as when
          * you start a timer unit with Persistent=yes. */
         ts = now(CLOCK_REALTIME);
         if (t->last_trigger.realtime > ts)
@@ -876,7 +864,7 @@
         if (t->state != TIMER_DEAD)
                 return -EBUSY;
 
-        if (!IN_SET(mask, EXEC_CLEAN_STATE))
+        if (mask != EXEC_CLEAN_STATE)
                 return -EUNATCH;
 
         r = timer_setup_persistent(t);
@@ -901,20 +889,120 @@
         return 0;
 }
 
+static int timer_can_start(Unit *u) {
+        Timer *t = TIMER(u);
+        int r;
+
+        assert(t);
+
+        r = unit_test_start_limit(u);
+        if (r < 0) {
+                timer_enter_dead(t, TIMER_FAILURE_START_LIMIT_HIT);
+                return r;
+        }
+
+        return 1;
+}
+
+static void activation_details_timer_serialize(ActivationDetails *details, FILE *f) {
+        ActivationDetailsTimer *t = ACTIVATION_DETAILS_TIMER(details);
+
+        assert(details);
+        assert(f);
+        assert(t);
+
+        (void) serialize_dual_timestamp(f, "activation-details-timer-last-trigger", &t->last_trigger);
+}
+
+static int activation_details_timer_deserialize(const char *key, const char *value, ActivationDetails **details) {
+        int r;
+
+        assert(key);
+        assert(value);
+
+        if (!details || !*details)
+                return -EINVAL;
+
+        ActivationDetailsTimer *t = ACTIVATION_DETAILS_TIMER(*details);
+        if (!t)
+                return -EINVAL;
+
+        if (!streq(key, "activation-details-timer-last-trigger"))
+                return -EINVAL;
+
+        r = deserialize_dual_timestamp(value, &t->last_trigger);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static int activation_details_timer_append_env(ActivationDetails *details, char ***strv) {
+        ActivationDetailsTimer *t = ACTIVATION_DETAILS_TIMER(details);
+        int r;
+
+        assert(details);
+        assert(strv);
+        assert(t);
+
+        if (!dual_timestamp_is_set(&t->last_trigger))
+                return 0;
+
+        r = strv_extendf(strv, "TRIGGER_TIMER_REALTIME_USEC=" USEC_FMT, t->last_trigger.realtime);
+        if (r < 0)
+                return r;
+
+        r = strv_extendf(strv, "TRIGGER_TIMER_MONOTONIC_USEC=" USEC_FMT, t->last_trigger.monotonic);
+        if (r < 0)
+                return r;
+
+        return 2; /* Return the number of variables added to the env block */
+}
+
+static int activation_details_timer_append_pair(ActivationDetails *details, char ***strv) {
+        ActivationDetailsTimer *t = ACTIVATION_DETAILS_TIMER(details);
+        int r;
+
+        assert(details);
+        assert(strv);
+        assert(t);
+
+        if (!dual_timestamp_is_set(&t->last_trigger))
+                return 0;
+
+        r = strv_extend(strv, "trigger_timer_realtime_usec");
+        if (r < 0)
+                return r;
+
+        r = strv_extendf(strv, USEC_FMT, t->last_trigger.realtime);
+        if (r < 0)
+                return r;
+
+        r = strv_extend(strv, "trigger_timer_monotonic_usec");
+        if (r < 0)
+                return r;
+
+        r = strv_extendf(strv, USEC_FMT, t->last_trigger.monotonic);
+        if (r < 0)
+                return r;
+
+        return 2; /* Return the number of pairs added to the env block */
+}
+
 static const char* const timer_base_table[_TIMER_BASE_MAX] = {
-        [TIMER_ACTIVE] = "OnActiveSec",
-        [TIMER_BOOT] = "OnBootSec",
-        [TIMER_STARTUP] = "OnStartupSec",
-        [TIMER_UNIT_ACTIVE] = "OnUnitActiveSec",
+        [TIMER_ACTIVE]        = "OnActiveSec",
+        [TIMER_BOOT]          = "OnBootSec",
+        [TIMER_STARTUP]       = "OnStartupSec",
+        [TIMER_UNIT_ACTIVE]   = "OnUnitActiveSec",
         [TIMER_UNIT_INACTIVE] = "OnUnitInactiveSec",
-        [TIMER_CALENDAR] = "OnCalendar"
+        [TIMER_CALENDAR]      = "OnCalendar"
 };
 
 DEFINE_STRING_TABLE_LOOKUP(timer_base, TimerBase);
 
 static const char* const timer_result_table[_TIMER_RESULT_MAX] = {
-        [TIMER_SUCCESS] = "success",
-        [TIMER_FAILURE_RESOURCES] = "resources",
+        [TIMER_SUCCESS]                 = "success",
+        [TIMER_FAILURE_RESOURCES]       = "resources",
         [TIMER_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
 };
 
@@ -960,4 +1048,15 @@
         .timezone_change = timer_timezone_change,
 
         .bus_set_property = bus_timer_set_property,
+
+        .can_start = timer_can_start,
+};
+
+const ActivationDetailsVTable activation_details_timer_vtable = {
+        .object_size = sizeof(ActivationDetailsTimer),
+
+        .serialize = activation_details_timer_serialize,
+        .deserialize = activation_details_timer_deserialize,
+        .append_env = activation_details_timer_append_env,
+        .append_pair = activation_details_timer_append_pair,
 };
diff --git a/src/core/timer.h b/src/core/timer.h
index a51fbf5..914e425 100644
--- a/src/core/timer.h
+++ b/src/core/timer.h
@@ -2,6 +2,7 @@
 #pragma once
 
 typedef struct Timer Timer;
+typedef struct ActivationDetailsTimer ActivationDetailsTimer;
 
 #include "calendarspec.h"
 #include "unit.h"
@@ -64,11 +65,17 @@
         char *stamp_path;
 };
 
-#define TIMER_MONOTONIC_CLOCK(t) ((t)->wake_system && clock_boottime_supported() ? CLOCK_BOOTTIME_ALARM : CLOCK_MONOTONIC)
+struct ActivationDetailsTimer {
+        ActivationDetails meta;
+        dual_timestamp last_trigger;
+};
+
+#define TIMER_MONOTONIC_CLOCK(t) ((t)->wake_system ? CLOCK_BOOTTIME_ALARM : CLOCK_MONOTONIC)
 
 void timer_free_values(Timer *t);
 
 extern const UnitVTable timer_vtable;
+extern const ActivationDetailsVTable activation_details_timer_vtable;
 
 const char *timer_base_to_string(TimerBase i) _const_;
 TimerBase timer_base_from_string(const char *s) _pure_;
@@ -77,3 +84,4 @@
 TimerResult timer_result_from_string(const char *s) _pure_;
 
 DEFINE_CAST(TIMER, Timer);
+DEFINE_ACTIVATION_DETAILS_CAST(ACTIVATION_DETAILS_TIMER, ActivationDetailsTimer, TIMER);
diff --git a/src/core/transaction.c b/src/core/transaction.c
index ebe5f19..dcb448a 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -46,7 +46,7 @@
 }
 
 static void transaction_find_jobs_that_matter_to_anchor(Job *j, unsigned generation) {
-        JobDependency *l;
+        assert(j);
 
         /* A recursive sweep through the graph that marks all units
          * that matter to the anchor job, i.e. are directly or
@@ -71,7 +71,7 @@
 }
 
 static void transaction_merge_and_delete_job(Transaction *tr, Job *j, Job *other, JobType t) {
-        JobDependency *l, *last;
+        JobDependency *last;
 
         assert(j);
         assert(other);
@@ -124,8 +124,6 @@
 }
 
 _pure_ static bool job_is_conflicted_by(Job *j) {
-        JobDependency *l;
-
         assert(j);
 
         /* Returns true if this job is pulled in by a least one
@@ -138,10 +136,8 @@
         return false;
 }
 
-static int delete_one_unmergeable_job(Transaction *tr, Job *j) {
-        Job *k;
-
-        assert(j);
+static int delete_one_unmergeable_job(Transaction *tr, Job *job) {
+        assert(job);
 
         /* Tries to delete one item in the linked list
          * j->transaction_next->transaction_next->... that conflicts
@@ -150,7 +146,7 @@
 
         /* We rely here on the fact that if a merged with b does not
          * merge with c, either a or b merge with c neither */
-        LIST_FOREACH(transaction, j, j)
+        LIST_FOREACH(transaction, j, job)
                 LIST_FOREACH(transaction, k, j->transaction_next) {
                         Job *d;
 
@@ -226,7 +222,6 @@
          * task conflict. If so, try to drop one of them. */
         HASHMAP_FOREACH(j, tr->jobs) {
                 JobType t;
-                Job *k;
 
                 t = j->type;
                 LIST_FOREACH(transaction, k, j->transaction_next) {
@@ -257,12 +252,12 @@
         /* Second step, merge the jobs. */
         HASHMAP_FOREACH(j, tr->jobs) {
                 JobType t = j->type;
-                Job *k;
 
                 /* Merge all transaction jobs for j->unit */
                 LIST_FOREACH(transaction, k, j->transaction_next)
                         assert_se(job_type_merge_and_collapse(&t, k->type, j->unit) == 0);
 
+                Job *k;
                 while ((k = j->transaction_next)) {
                         if (tr->anchor_job == k) {
                                 transaction_merge_and_delete_job(tr, k, j, t);
@@ -293,7 +288,6 @@
 
                 HASHMAP_FOREACH(j, tr->jobs) {
                         bool keep = false;
-                        Job *k;
 
                         LIST_FOREACH(transaction, k, j)
                                 if (tr->anchor_job == k ||
@@ -314,36 +308,43 @@
         } while (again);
 }
 
-_pure_ static bool unit_matters_to_anchor(Unit *u, Job *j) {
+_pure_ static bool unit_matters_to_anchor(Unit *u, Job *job) {
         assert(u);
-        assert(!j->transaction_prev);
+        assert(job);
+        assert(!job->transaction_prev);
 
         /* Checks whether at least one of the jobs for this unit
          * matters to the anchor. */
 
-        LIST_FOREACH(transaction, j, j)
+        LIST_FOREACH(transaction, j, job)
                 if (j->matters_to_anchor)
                         return true;
 
         return false;
 }
 
-static char* merge_unit_ids(const char* unit_log_field, char **pairs) {
-        char **unit_id, **job_type, *ans = NULL;
-        size_t size = 0, next;
+static char* merge_unit_ids(const char* unit_log_field, char * const* pairs) {
+        _cleanup_free_ char *ans = NULL;
+        size_t size = 0;
 
         STRV_FOREACH_PAIR(unit_id, job_type, pairs) {
+                size_t next;
+
+                if (size > 0)
+                        ans[size - 1] = '\n';
+
                 next = strlen(unit_log_field) + strlen(*unit_id);
                 if (!GREEDY_REALLOC(ans, size + next + 1))
-                        return mfree(ans);
+                        return NULL;
 
                 sprintf(ans + size, "%s%s", unit_log_field, *unit_id);
-                if (*(unit_id+1))
-                        ans[size + next] =  '\n';
                 size += next + 1;
         }
 
-        return ans;
+        if (!ans)
+                return strdup("");
+
+        return TAKE_PTR(ans);
 }
 
 static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsigned generation, sd_bus_error *e) {
@@ -366,7 +367,6 @@
         if (j->generation == generation) {
                 Job *k, *delete = NULL;
                 _cleanup_free_ char **array = NULL, *unit_ids = NULL;
-                char **unit_id, **job_type;
 
                 /* If the marker is NULL we have been here already and decided the job was loop-free from
                  * here. Hence shortcut things and return right-away. */
@@ -396,20 +396,21 @@
                 STRV_FOREACH_PAIR(unit_id, job_type, array)
                         /* logging for j not k here to provide a consistent narrative */
                         log_struct(LOG_WARNING,
-                                   "MESSAGE=%s: Found %s on %s/%s",
-                                   j->unit->id,
-                                   unit_id == array ? "ordering cycle" : "dependency",
-                                   *unit_id, *job_type,
-                                   "%s", unit_ids);
+                                   LOG_UNIT_MESSAGE(j->unit,
+                                                    "Found %s on %s/%s",
+                                                    unit_id == array ? "ordering cycle" : "dependency",
+                                                    *unit_id, *job_type),
+                                   "%s", strna(unit_ids));
 
                 if (delete) {
                         const char *status;
                         /* logging for j not k here to provide a consistent narrative */
                         log_struct(LOG_ERR,
-                                   "MESSAGE=%s: Job %s/%s deleted to break ordering cycle starting with %s/%s",
-                                   j->unit->id, delete->unit->id, job_type_to_string(delete->type),
-                                   j->unit->id, job_type_to_string(j->type),
-                                   "%s", unit_ids);
+                                   LOG_UNIT_MESSAGE(j->unit,
+                                                    "Job %s/%s deleted to break ordering cycle starting with %s/%s",
+                                                    delete->unit->id, job_type_to_string(delete->type),
+                                                    j->unit->id, job_type_to_string(j->type)),
+                                   "%s", strna(unit_ids));
 
                         if (log_get_show_color())
                                 status = ANSI_HIGHLIGHT_RED " SKIP " ANSI_NORMAL;
@@ -426,9 +427,9 @@
                 }
 
                 log_struct(LOG_ERR,
-                           "MESSAGE=%s: Unable to break cycle starting with %s/%s",
-                           j->unit->id, j->unit->id, job_type_to_string(j->type),
-                           "%s", unit_ids);
+                           LOG_UNIT_MESSAGE(j->unit, "Unable to break cycle starting with %s/%s",
+                                            j->unit->id, job_type_to_string(j->type)),
+                           "%s", strna(unit_ids));
 
                 return sd_bus_error_setf(e, BUS_ERROR_TRANSACTION_ORDER_IS_CYCLIC,
                                          "Transaction order is cyclic. See system logs for details.");
@@ -558,7 +559,7 @@
 }
 
 static void transaction_minimize_impact(Transaction *tr) {
-        Job *j;
+        Job *head;
 
         assert(tr);
 
@@ -566,8 +567,8 @@
          * or that stop a running service. */
 
 rescan:
-        HASHMAP_FOREACH(j, tr->jobs) {
-                LIST_FOREACH(transaction, j, j) {
+        HASHMAP_FOREACH(head, tr->jobs) {
+                LIST_FOREACH(transaction, j, head) {
                         bool stops_running_service, changes_existing_job;
 
                         /* If it matters, we shouldn't drop it */
@@ -804,13 +805,13 @@
 
         f = hashmap_get(tr->jobs, unit);
 
-        LIST_FOREACH(transaction, j, f) {
-                assert(j->unit == unit);
+        LIST_FOREACH(transaction, i, f) {
+                assert(i->unit == unit);
 
-                if (j->type == type) {
+                if (i->type == type) {
                         if (is_new)
                                 *is_new = false;
-                        return j;
+                        return i;
                 }
         }
 
@@ -981,11 +982,11 @@
         }
 
         if (is_new && !ignore_requirements && type != JOB_NOP) {
-                Set *following;
+                _cleanup_set_free_ Set *following = NULL;
 
                 /* If we are following some other unit, make sure we
                  * add all dependencies of everybody following. */
-                if (unit_following_set(ret->unit, &following) > 0) {
+                if (unit_following_set(ret->unit, &following) > 0)
                         SET_FOREACH(dep, following) {
                                 r = transaction_add_job_and_dependencies(tr, type, dep, ret, false, false, false, ignore_order, e);
                                 if (r < 0) {
@@ -996,16 +997,13 @@
                                 }
                         }
 
-                        set_free(following);
-                }
-
                 /* Finally, recursively add in all dependencies. */
                 if (IN_SET(type, JOB_START, JOB_RESTART)) {
                         UNIT_FOREACH_DEPENDENCY(dep, ret->unit, UNIT_ATOM_PULL_IN_START) {
                                 r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, false, false, ignore_order, e);
                                 if (r < 0) {
                                         if (r != -EBADR) /* job type not applicable */
-                                                goto fail;
+                                                return r;
 
                                         sd_bus_error_free(e);
                                 }
@@ -1027,7 +1025,7 @@
                                 r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, true, false, false, ignore_order, e);
                                 if (r < 0) {
                                         if (r != -EBADR) /* job type not applicable */
-                                                goto fail;
+                                                return r;
 
                                         sd_bus_error_free(e);
                                 }
@@ -1037,7 +1035,7 @@
                                 r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, true, false, ignore_order, e);
                                 if (r < 0) {
                                         if (r != -EBADR) /* job type not applicable */
-                                                goto fail;
+                                                return r;
 
                                         sd_bus_error_free(e);
                                 }
@@ -1055,30 +1053,42 @@
                 }
 
                 if (IN_SET(type, JOB_STOP, JOB_RESTART)) {
-                        UnitDependencyAtom atom;
-                        JobType ptype;
-
+                        _cleanup_set_free_ Set *propagated_restart = NULL;
                         /* We propagate STOP as STOP, but RESTART only as TRY_RESTART, in order not to start
                          * dependencies that are not around. */
-                        if (type == JOB_RESTART) {
-                                atom = UNIT_ATOM_PROPAGATE_RESTART;
-                                ptype = JOB_TRY_RESTART;
-                        } else {
-                                ptype = JOB_STOP;
-                                atom = UNIT_ATOM_PROPAGATE_STOP;
-                        }
 
-                        UNIT_FOREACH_DEPENDENCY(dep, ret->unit, atom) {
-                                JobType nt;
+                        if (type == JOB_RESTART)
+                                UNIT_FOREACH_DEPENDENCY(dep, ret->unit, UNIT_ATOM_PROPAGATE_RESTART) {
+                                        JobType nt;
 
-                                nt = job_type_collapse(ptype, dep);
-                                if (nt == JOB_NOP)
+                                        r = set_ensure_put(&propagated_restart, NULL, dep);
+                                        if (r < 0)
+                                                return r;
+
+                                        nt = job_type_collapse(JOB_TRY_RESTART, dep);
+                                        if (nt == JOB_NOP)
+                                                continue;
+
+                                        r = transaction_add_job_and_dependencies(tr, nt, dep, ret, true, false, false, ignore_order, e);
+                                        if (r < 0) {
+                                                if (r != -EBADR) /* job type not applicable */
+                                                        return r;
+
+                                                sd_bus_error_free(e);
+                                        }
+                                }
+
+                        /* The 'stop' part of a restart job is also propagated to
+                         * units with UNIT_ATOM_PROPAGATE_STOP */
+                        UNIT_FOREACH_DEPENDENCY(dep, ret->unit, UNIT_ATOM_PROPAGATE_STOP) {
+                                /* Units experienced restart propagation are skipped */
+                                if (set_contains(propagated_restart, dep))
                                         continue;
 
-                                r = transaction_add_job_and_dependencies(tr, nt, dep, ret, true, false, false, ignore_order, e);
+                                r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, false, false, ignore_order, e);
                                 if (r < 0) {
                                         if (r != -EBADR) /* job type not applicable */
-                                                goto fail;
+                                                return r;
 
                                         sd_bus_error_free(e);
                                 }
@@ -1092,9 +1102,20 @@
         }
 
         return 0;
+}
 
-fail:
-        return r;
+static bool shall_stop_on_isolate(Transaction *tr, Unit *u) {
+        assert(tr);
+        assert(u);
+
+        if (u->ignore_on_isolate)
+                return false;
+
+        /* Is there already something listed for this? */
+        if (hashmap_get(tr->jobs, u))
+                return false;
+
+        return true;
 }
 
 int transaction_add_isolate_jobs(Transaction *tr, Manager *m) {
@@ -1106,20 +1127,27 @@
         assert(m);
 
         HASHMAP_FOREACH_KEY(u, k, m->units) {
+                Unit *o;
 
-                /* ignore aliases */
+                /* Ignore aliases */
                 if (u->id != k)
                         continue;
 
-                if (u->ignore_on_isolate)
-                        continue;
-
-                /* No need to stop inactive jobs */
+                /* No need to stop inactive units */
                 if (UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(u)) && !u->job)
                         continue;
 
-                /* Is there already something listed for this? */
-                if (hashmap_get(tr->jobs, u))
+                if (!shall_stop_on_isolate(tr, u))
+                        continue;
+
+                /* Keep units that are triggered by units we want to keep around. */
+                bool keep = false;
+                UNIT_FOREACH_DEPENDENCY(o, u, UNIT_ATOM_TRIGGERED_BY)
+                        if (!shall_stop_on_isolate(tr, o)) {
+                                keep = true;
+                                break;
+                        }
+                if (keep)
                         continue;
 
                 r = transaction_add_job_and_dependencies(tr, JOB_STOP, u, tr->anchor_job, true, false, false, false, NULL);
diff --git a/src/core/unit-dependency-atom.c b/src/core/unit-dependency-atom.c
index 7618358..8133352 100644
--- a/src/core/unit-dependency-atom.c
+++ b/src/core/unit-dependency-atom.c
@@ -83,10 +83,12 @@
                                         UNIT_ATOM_PROPAGATE_STOP,
 
         /* These are simple dependency types: they consist of a single atom only */
+        [UNIT_ON_FAILURE]             = UNIT_ATOM_ON_FAILURE,
+        [UNIT_ON_SUCCESS]             = UNIT_ATOM_ON_SUCCESS,
+        [UNIT_ON_FAILURE_OF]          = UNIT_ATOM_ON_FAILURE_OF,
+        [UNIT_ON_SUCCESS_OF]          = UNIT_ATOM_ON_SUCCESS_OF,
         [UNIT_BEFORE]                 = UNIT_ATOM_BEFORE,
         [UNIT_AFTER]                  = UNIT_ATOM_AFTER,
-        [UNIT_ON_SUCCESS]             = UNIT_ATOM_ON_SUCCESS,
-        [UNIT_ON_FAILURE]             = UNIT_ATOM_ON_FAILURE,
         [UNIT_TRIGGERS]               = UNIT_ATOM_TRIGGERS,
         [UNIT_TRIGGERED_BY]           = UNIT_ATOM_TRIGGERED_BY,
         [UNIT_PROPAGATES_RELOAD_TO]   = UNIT_ATOM_PROPAGATES_RELOAD_TO,
@@ -100,8 +102,6 @@
          * things discoverable/debuggable as they are the inverse dependencies to some of the above. As they
          * have no effect of their own, they all map to no atoms at all, i.e. the value 0. */
         [UNIT_RELOAD_PROPAGATED_FROM] = 0,
-        [UNIT_ON_SUCCESS_OF]          = 0,
-        [UNIT_ON_FAILURE_OF]          = 0,
         [UNIT_STOP_PROPAGATED_FROM]   = 0,
 };
 
@@ -198,18 +198,24 @@
 
         /* And now, the simple ones */
 
+        case UNIT_ATOM_ON_FAILURE:
+                return UNIT_ON_FAILURE;
+
+        case UNIT_ATOM_ON_SUCCESS:
+                return UNIT_ON_SUCCESS;
+
+        case UNIT_ATOM_ON_SUCCESS_OF:
+                return UNIT_ON_SUCCESS_OF;
+
+        case UNIT_ATOM_ON_FAILURE_OF:
+                return UNIT_ON_FAILURE_OF;
+
         case UNIT_ATOM_BEFORE:
                 return UNIT_BEFORE;
 
         case UNIT_ATOM_AFTER:
                 return UNIT_AFTER;
 
-        case UNIT_ATOM_ON_SUCCESS:
-                return UNIT_ON_SUCCESS;
-
-        case UNIT_ATOM_ON_FAILURE:
-                return UNIT_ON_FAILURE;
-
         case UNIT_ATOM_TRIGGERS:
                 return UNIT_TRIGGERS;
 
diff --git a/src/core/unit-dependency-atom.h b/src/core/unit-dependency-atom.h
index c5f8f5d..02532e5 100644
--- a/src/core/unit-dependency-atom.h
+++ b/src/core/unit-dependency-atom.h
@@ -67,19 +67,21 @@
         UNIT_ATOM_DEFAULT_TARGET_DEPENDENCIES         = UINT64_C(1) << 21,
 
         /* The remaining atoms map 1:1 to the equally named high-level deps */
-        UNIT_ATOM_BEFORE                              = UINT64_C(1) << 22,
-        UNIT_ATOM_AFTER                               = UINT64_C(1) << 23,
-        UNIT_ATOM_ON_SUCCESS                          = UINT64_C(1) << 24,
-        UNIT_ATOM_ON_FAILURE                          = UINT64_C(1) << 25,
-        UNIT_ATOM_TRIGGERS                            = UINT64_C(1) << 26,
-        UNIT_ATOM_TRIGGERED_BY                        = UINT64_C(1) << 27,
-        UNIT_ATOM_PROPAGATES_RELOAD_TO                = UINT64_C(1) << 28,
-        UNIT_ATOM_JOINS_NAMESPACE_OF                  = UINT64_C(1) << 29,
-        UNIT_ATOM_REFERENCES                          = UINT64_C(1) << 30,
-        UNIT_ATOM_REFERENCED_BY                       = UINT64_C(1) << 31,
-        UNIT_ATOM_IN_SLICE                            = UINT64_C(1) << 32,
-        UNIT_ATOM_SLICE_OF                            = UINT64_C(1) << 33,
-        _UNIT_DEPENDENCY_ATOM_MAX                     = (UINT64_C(1) << 34) - 1,
+        UNIT_ATOM_ON_FAILURE                          = UINT64_C(1) << 22,
+        UNIT_ATOM_ON_SUCCESS                          = UINT64_C(1) << 23,
+        UNIT_ATOM_ON_FAILURE_OF                       = UINT64_C(1) << 24,
+        UNIT_ATOM_ON_SUCCESS_OF                       = UINT64_C(1) << 25,
+        UNIT_ATOM_BEFORE                              = UINT64_C(1) << 26,
+        UNIT_ATOM_AFTER                               = UINT64_C(1) << 27,
+        UNIT_ATOM_TRIGGERS                            = UINT64_C(1) << 28,
+        UNIT_ATOM_TRIGGERED_BY                        = UINT64_C(1) << 29,
+        UNIT_ATOM_PROPAGATES_RELOAD_TO                = UINT64_C(1) << 30,
+        UNIT_ATOM_JOINS_NAMESPACE_OF                  = UINT64_C(1) << 31,
+        UNIT_ATOM_REFERENCES                          = UINT64_C(1) << 32,
+        UNIT_ATOM_REFERENCED_BY                       = UINT64_C(1) << 33,
+        UNIT_ATOM_IN_SLICE                            = UINT64_C(1) << 34,
+        UNIT_ATOM_SLICE_OF                            = UINT64_C(1) << 35,
+        _UNIT_DEPENDENCY_ATOM_MAX                     = (UINT64_C(1) << 36) - 1,
         _UNIT_DEPENDENCY_ATOM_INVALID                 = -EINVAL,
 } UnitDependencyAtom;
 
diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c
index 46c383b..e454df0 100644
--- a/src/core/unit-printf.c
+++ b/src/core/unit-printf.c
@@ -13,28 +13,22 @@
 #include "user-util.h"
 
 static int specifier_prefix_and_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata;
-
-        assert(u);
+        const Unit *u = ASSERT_PTR(userdata);
 
         return unit_name_to_prefix_and_instance(u->id, ret);
 }
 
 static int specifier_prefix(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata;
-
-        assert(u);
+        const Unit *u = ASSERT_PTR(userdata);
 
         return unit_name_to_prefix(u->id, ret);
 }
 
 static int specifier_prefix_unescaped(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
         _cleanup_free_ char *p = NULL;
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         int r;
 
-        assert(u);
-
         r = unit_name_to_prefix(u->id, &p);
         if (r < 0)
                 return r;
@@ -43,21 +37,17 @@
 }
 
 static int specifier_instance_unescaped(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata;
-
-        assert(u);
+        const Unit *u = ASSERT_PTR(userdata);
 
         return unit_name_unescape(strempty(u->instance), ret);
 }
 
 static int specifier_last_component(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         _cleanup_free_ char *prefix = NULL;
         char *dash;
         int r;
 
-        assert(u);
-
         r = unit_name_to_prefix(u->id, &prefix);
         if (r < 0)
                 return r;
@@ -82,9 +72,7 @@
 }
 
 static int specifier_filename(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata;
-
-        assert(u);
+        const Unit *u = ASSERT_PTR(userdata);
 
         if (u->instance)
                 return unit_name_path_unescape(u->instance, ret);
@@ -97,11 +85,9 @@
 }
 
 static int specifier_cgroup(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         char *n;
 
-        assert(u);
-
         bad_specifier(u, specifier);
 
         if (u->cgroup_path)
@@ -116,11 +102,9 @@
 }
 
 static int specifier_cgroup_root(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata;
+        const Unit *u = ASSERT_PTR(userdata);
         char *n;
 
-        assert(u);
-
         bad_specifier(u, specifier);
 
         n = strdup(u->manager->cgroup_root);
@@ -132,11 +116,9 @@
 }
 
 static int specifier_cgroup_slice(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata, *slice;
+        const Unit *u = ASSERT_PTR(userdata), *slice;
         char *n;
 
-        assert(u);
-
         bad_specifier(u, specifier);
 
         slice = UNIT_GET_SLICE(u);
@@ -155,10 +137,8 @@
 }
 
 static int specifier_special_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const Unit *u = userdata;
-        char *n = NULL;
-
-        assert(u);
+        const Unit *u = ASSERT_PTR(userdata);
+        char *n;
 
         n = strdup(u->manager->prefix[PTR_TO_UINT(data)]);
         if (!n)
@@ -168,8 +148,21 @@
         return 0;
 }
 
-int unit_name_printf(const Unit *u, const char* format, char **ret) {
+static int specifier_credentials_dir(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        const Unit *u = ASSERT_PTR(userdata);
+        char *d;
 
+        assert(ret);
+
+        d = strjoin(u->manager->prefix[EXEC_DIRECTORY_RUNTIME], "/credentials/", u->id);
+        if (!d)
+                return -ENOMEM;
+
+        *ret = d;
+        return 0;
+}
+
+int unit_name_printf(const Unit *u, const char* format, char **ret) {
         /*
          * This will use the passed string as format string and replace the following specifiers (which should all be
          * safe for inclusion in unit names):
@@ -190,7 +183,7 @@
 
                 COMMON_SYSTEM_SPECIFIERS,
 
-                COMMON_CREDS_SPECIFIERS,
+                COMMON_CREDS_SPECIFIERS(u->manager->unit_file_scope),
                 {}
         };
 
@@ -202,8 +195,8 @@
 }
 
 int unit_full_printf_full(const Unit *u, const char *format, size_t max_length, char **ret) {
-        /* This is similar to unit_name_printf() but also supports unescaping. Also, adds a couple of additional codes
-         * (which are likely not suitable for unescaped inclusion in unit names):
+        /* This is similar to unit_name_printf() but also supports unescaping. Also, adds a couple of
+         * additional codes (which are likely not suitable for unescaped inclusion in unit names):
          *
          * %f: the unescaped instance if set, otherwise the id unescaped as path
          *
@@ -212,6 +205,7 @@
          * %R: the root of this systemd's instance tree (deprecated)
          *
          * %C: the cache directory root (e.g. /var/cache or $XDG_CACHE_HOME)
+         * %d: the credentials directory ($CREDENTIALS_DIRECTORY)
          * %E: the configuration directory root (e.g. /etc or $XDG_CONFIG_HOME)
          * %L: the log directory root (e.g. /var/log or $XDG_CONFIG_HOME/log)
          * %S: the state directory root (e.g. /var/lib or $XDG_CONFIG_HOME)
@@ -220,9 +214,9 @@
          * %h: the homedir of the running user
          * %s: the shell of the running user
          *
-         * NOTICE: When you add new entries here, please be careful: specifiers which depend on settings of the unit
-         * file itself are broken by design, as they would resolve differently depending on whether they are used
-         * before or after the relevant configuration setting. Hence: don't add them.
+         * NOTICE: When you add new entries here, please be careful: specifiers which depend on settings of
+         * the unit file itself are broken by design, as they would resolve differently depending on whether
+         * they are used before or after the relevant configuration setting. Hence: don't add them.
          */
 
         assert(u);
@@ -240,12 +234,15 @@
                 { 'P', specifier_prefix_unescaped,         NULL },
 
                 { 'f', specifier_filename,                 NULL },
+                { 'y', specifier_real_path,                u->fragment_path },
+                { 'Y', specifier_real_directory,           u->fragment_path },
 
-                { 'c', specifier_cgroup,                   NULL },
-                { 'r', specifier_cgroup_slice,             NULL },
-                { 'R', specifier_cgroup_root,              NULL },
+                { 'c', specifier_cgroup,                   NULL },  /* deprecated, see 1b89b0c499cd4bf0ff389caab4ecaae6e75f9d4e */
+                { 'r', specifier_cgroup_slice,             NULL },  /* deprecated, see 1b89b0c499cd4bf0ff389caab4ecaae6e75f9d4e */
+                { 'R', specifier_cgroup_root,              NULL },  /* deprecated, see 1b89b0c499cd4bf0ff389caab4ecaae6e75f9d4e */
 
                 { 'C', specifier_special_directory,        UINT_TO_PTR(EXEC_DIRECTORY_CACHE) },
+                { 'd', specifier_credentials_dir,          NULL },
                 { 'E', specifier_special_directory,        UINT_TO_PTR(EXEC_DIRECTORY_CONFIGURATION) },
                 { 'L', specifier_special_directory,        UINT_TO_PTR(EXEC_DIRECTORY_LOGS) },
                 { 'S', specifier_special_directory,        UINT_TO_PTR(EXEC_DIRECTORY_STATE) },
@@ -256,7 +253,7 @@
 
                 COMMON_SYSTEM_SPECIFIERS,
 
-                COMMON_CREDS_SPECIFIERS,
+                COMMON_CREDS_SPECIFIERS(u->manager->unit_file_scope),
 
                 COMMON_TMP_SPECIFIERS,
                 {}
diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c
index 689a536..21457dc 100644
--- a/src/core/unit-serialize.c
+++ b/src/core/unit-serialize.c
@@ -7,6 +7,7 @@
 #include "fileio.h"
 #include "format-util.h"
 #include "parse-util.h"
+#include "restrict-ifaces.h"
 #include "serialize.h"
 #include "string-table.h"
 #include "unit-serialize.h"
@@ -170,9 +171,12 @@
 
         (void) bpf_program_serialize_attachment(f, fds, "ip-bpf-ingress-installed", u->ip_bpf_ingress_installed);
         (void) bpf_program_serialize_attachment(f, fds, "ip-bpf-egress-installed", u->ip_bpf_egress_installed);
+        (void) bpf_program_serialize_attachment(f, fds, "bpf-device-control-installed", u->bpf_device_control_installed);
         (void) bpf_program_serialize_attachment_set(f, fds, "ip-bpf-custom-ingress-installed", u->ip_bpf_custom_ingress_installed);
         (void) bpf_program_serialize_attachment_set(f, fds, "ip-bpf-custom-egress-installed", u->ip_bpf_custom_egress_installed);
 
+        (void) serialize_restrict_network_interfaces(u, f, fds);
+
         if (uid_is_valid(u->ref_uid))
                 (void) serialize_item_format(f, "ref-uid", UID_FMT, u->ref_uid);
         if (gid_is_valid(u->ref_gid))
@@ -405,6 +409,9 @@
                 } else if (streq(l, "ip-bpf-egress-installed")) {
                          (void) bpf_program_deserialize_attachment(v, fds, &u->ip_bpf_egress_installed);
                          continue;
+                } else if (streq(l, "bpf-device-control-installed")) {
+                         (void) bpf_program_deserialize_attachment(v, fds, &u->bpf_device_control_installed);
+                         continue;
 
                 } else if (streq(l, "ip-bpf-custom-ingress-installed")) {
                          (void) bpf_program_deserialize_attachment_set(v, fds, &u->ip_bpf_custom_ingress_installed);
@@ -413,6 +420,21 @@
                          (void) bpf_program_deserialize_attachment_set(v, fds, &u->ip_bpf_custom_egress_installed);
                          continue;
 
+                } else if (streq(l, "restrict-ifaces-bpf-fd")) {
+                        int fd;
+
+                        if (safe_atoi(v, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd)) {
+                                log_unit_debug(u, "Failed to parse restrict-ifaces-bpf-fd value: %s", v);
+                                continue;
+                        }
+                        if (fdset_remove(fds, fd) < 0) {
+                                log_unit_debug(u, "Failed to remove restrict-ifaces-bpf-fd %d from fdset", fd);
+                                continue;
+                        }
+
+                        (void) restrict_network_interfaces_add_initial_link_fd(u, fd);
+                        continue;
+
                 } else if (streq(l, "ref-uid")) {
                         uid_t uid;
 
@@ -568,9 +590,10 @@
                 { UNIT_DEPENDENCY_DEFAULT,            "default"            },
                 { UNIT_DEPENDENCY_UDEV,               "udev"               },
                 { UNIT_DEPENDENCY_PATH,               "path"               },
-                { UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT, "mountinfo-implicit" },
-                { UNIT_DEPENDENCY_MOUNTINFO_DEFAULT,  "mountinfo-default"  },
+                { UNIT_DEPENDENCY_MOUNT_FILE,         "mount-file"         },
+                { UNIT_DEPENDENCY_MOUNTINFO,          "mountinfo"          },
                 { UNIT_DEPENDENCY_PROC_SWAP,          "proc-swap"          },
+                { UNIT_DEPENDENCY_SLICE_PROPERTY,     "slice-property"     },
         };
 
         assert(f);
@@ -600,9 +623,8 @@
 }
 
 void unit_dump(Unit *u, FILE *f, const char *prefix) {
-        char *t, **j;
+        char *t;
         const char *prefix2;
-        char timestamp[5][FORMAT_TIMESTAMP_MAX], timespan[FORMAT_TIMESPAN_MAX];
         Unit *following;
         _cleanup_set_free_ Set *following_set = NULL;
         CGroupMask m;
@@ -640,11 +662,11 @@
                 prefix, strna(u->instance),
                 prefix, unit_load_state_to_string(u->load_state),
                 prefix, unit_active_state_to_string(unit_active_state(u)),
-                prefix, strna(format_timestamp(timestamp[0], sizeof(timestamp[0]), u->state_change_timestamp.realtime)),
-                prefix, strna(format_timestamp(timestamp[1], sizeof(timestamp[1]), u->inactive_exit_timestamp.realtime)),
-                prefix, strna(format_timestamp(timestamp[2], sizeof(timestamp[2]), u->active_enter_timestamp.realtime)),
-                prefix, strna(format_timestamp(timestamp[3], sizeof(timestamp[3]), u->active_exit_timestamp.realtime)),
-                prefix, strna(format_timestamp(timestamp[4], sizeof(timestamp[4]), u->inactive_enter_timestamp.realtime)),
+                prefix, strna(FORMAT_TIMESTAMP(u->state_change_timestamp.realtime)),
+                prefix, strna(FORMAT_TIMESTAMP(u->inactive_exit_timestamp.realtime)),
+                prefix, strna(FORMAT_TIMESTAMP(u->active_enter_timestamp.realtime)),
+                prefix, strna(FORMAT_TIMESTAMP(u->active_exit_timestamp.realtime)),
+                prefix, strna(FORMAT_TIMESTAMP(u->inactive_enter_timestamp.realtime)),
                 prefix, yes_no(unit_may_gc(u)),
                 prefix, yes_no(unit_need_daemon_reload(u)),
                 prefix, yes_no(u->transient),
@@ -710,6 +732,9 @@
         STRV_FOREACH(j, u->documentation)
                 fprintf(f, "%s\tDocumentation: %s\n", prefix, *j);
 
+        if (u->access_selinux_context)
+                fprintf(f, "%s\tAccess SELinux Context: %s\n", prefix, u->access_selinux_context);
+
         following = unit_following(u);
         if (following)
                 fprintf(f, "%s\tFollowing: %s\n", prefix, following->id);
@@ -741,7 +766,7 @@
                 fprintf(f, "%s\tSuccess Action Exit Status: %i\n", prefix, u->success_action_exit_status);
 
         if (u->job_timeout != USEC_INFINITY)
-                fprintf(f, "%s\tJob Timeout: %s\n", prefix, format_timespan(timespan, sizeof(timespan), u->job_timeout, 0));
+                fprintf(f, "%s\tJob Timeout: %s\n", prefix, FORMAT_TIMESPAN(u->job_timeout, 0));
 
         if (u->job_timeout_action != EMERGENCY_ACTION_NONE)
                 fprintf(f, "%s\tJob Timeout Action: %s\n", prefix, emergency_action_to_string(u->job_timeout_action));
@@ -756,14 +781,14 @@
                 fprintf(f,
                         "%s\tCondition Timestamp: %s\n"
                         "%s\tCondition Result: %s\n",
-                        prefix, strna(format_timestamp(timestamp[0], sizeof(timestamp[0]), u->condition_timestamp.realtime)),
+                        prefix, strna(FORMAT_TIMESTAMP(u->condition_timestamp.realtime)),
                         prefix, yes_no(u->condition_result));
 
         if (dual_timestamp_is_set(&u->assert_timestamp))
                 fprintf(f,
                         "%s\tAssert Timestamp: %s\n"
                         "%s\tAssert Result: %s\n",
-                        prefix, strna(format_timestamp(timestamp[0], sizeof(timestamp[0]), u->assert_timestamp.realtime)),
+                        prefix, strna(FORMAT_TIMESTAMP(u->assert_timestamp.realtime)),
                         prefix, yes_no(u->assert_result));
 
         for (UnitDependency d = 0; d < _UNIT_DEPENDENCY_MAX; d++) {
@@ -823,8 +848,10 @@
                 fprintf(f,
                         "%s\tMerged into: %s\n",
                         prefix, u->merged_into->id);
-        else if (u->load_state == UNIT_ERROR)
-                fprintf(f, "%s\tLoad Error Code: %s\n", prefix, strerror_safe(u->load_error));
+        else if (u->load_state == UNIT_ERROR) {
+                errno = abs(u->load_error);
+                fprintf(f, "%s\tLoad Error Code: %m\n", prefix);
+        }
 
         for (const char *n = sd_bus_track_first(u->bus_track); n; n = sd_bus_track_next(u->bus_track))
                 fprintf(f, "%s\tBus Ref: %s\n", prefix, n);
diff --git a/src/core/unit.c b/src/core/unit.c
index 0e8a019..fabe65a 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -17,10 +17,12 @@
 #include "bus-util.h"
 #include "cgroup-setup.h"
 #include "cgroup-util.h"
+#include "chase-symlinks.h"
 #include "core-varlink.h"
 #include "dbus-unit.h"
 #include "dbus.h"
 #include "dropin.h"
+#include "env-util.h"
 #include "escape.h"
 #include "execute.h"
 #include "fd-util.h"
@@ -36,10 +38,11 @@
 #include "log.h"
 #include "macro.h"
 #include "missing_audit.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path-util.h"
 #include "process-util.h"
 #include "rm-rf.h"
+#include "serialize.h"
 #include "set.h"
 #include "signal-util.h"
 #include "sparse-endian.h"
@@ -112,20 +115,20 @@
         u->cgroup_invalidated_mask |= CGROUP_MASK_BPF_FIREWALL;
         u->failure_action_exit_status = u->success_action_exit_status = -1;
 
-        u->ip_accounting_ingress_map_fd = -1;
-        u->ip_accounting_egress_map_fd = -1;
+        u->ip_accounting_ingress_map_fd = -EBADF;
+        u->ip_accounting_egress_map_fd = -EBADF;
         for (CGroupIOAccountingMetric i = 0; i < _CGROUP_IO_ACCOUNTING_METRIC_MAX; i++)
                 u->io_accounting_last[i] = UINT64_MAX;
 
-        u->ipv4_allow_map_fd = -1;
-        u->ipv6_allow_map_fd = -1;
-        u->ipv4_deny_map_fd = -1;
-        u->ipv6_deny_map_fd = -1;
+        u->ipv4_allow_map_fd = -EBADF;
+        u->ipv6_allow_map_fd = -EBADF;
+        u->ipv4_deny_map_fd = -EBADF;
+        u->ipv6_deny_map_fd = -EBADF;
 
         u->last_section_private = -1;
 
         u->start_ratelimit = (RateLimit) { m->default_start_limit_interval, m->default_start_limit_burst };
-        u->auto_start_stop_ratelimit = (RateLimit) { 10 * USEC_PER_SEC, 16 };
+        u->auto_start_stop_ratelimit = (const RateLimit) { 10 * USEC_PER_SEC, 16 };
 
         return u;
 }
@@ -187,6 +190,11 @@
         if (ec) {
                 exec_context_init(ec);
 
+                if (u->manager->default_oom_score_adjust_set) {
+                        ec->oom_score_adjust = u->manager->default_oom_score_adjust;
+                        ec->oom_score_adjust_set = true;
+                }
+
                 if (MANAGER_IS_SYSTEM(u->manager))
                         ec->keyring_mode = EXEC_KEYRING_SHARED;
                 else {
@@ -369,6 +377,20 @@
         return 0;
 }
 
+static bool unit_success_failure_handler_has_jobs(Unit *unit) {
+        Unit *other;
+
+        UNIT_FOREACH_DEPENDENCY(other, unit, UNIT_ATOM_ON_SUCCESS)
+                if (other->job || other->nop_job)
+                        return true;
+
+        UNIT_FOREACH_DEPENDENCY(other, unit, UNIT_ATOM_ON_FAILURE)
+                if (other->job || other->nop_job)
+                        return true;
+
+        return false;
+}
+
 bool unit_may_gc(Unit *u) {
         UnitActiveState state;
         int r;
@@ -383,10 +405,7 @@
          * in unit_gc_sweep(), but using markers to properly collect dependency loops.
          */
 
-        if (u->job)
-                return false;
-
-        if (u->nop_job)
+        if (u->job || u->nop_job)
                 return false;
 
         state = unit_active_state(u);
@@ -418,9 +437,13 @@
                 break;
 
         default:
-                assert_not_reached("Unknown garbage collection mode");
+                assert_not_reached();
         }
 
+        /* Check if any OnFailure= or on Success= jobs may be pending */
+        if (unit_success_failure_handler_has_jobs(u))
+                return false;
+
         if (u->cgroup_path) {
                 /* If the unit has a cgroup, then check whether there's anything in it. If so, we should stay
                  * around. Units with active processes should never be collected. */
@@ -562,8 +585,6 @@
 }
 
 static void unit_remove_transient(Unit *u) {
-        char **i;
-
         assert(u);
 
         if (!u->transient)
@@ -575,12 +596,10 @@
         STRV_FOREACH(i, u->dropin_paths) {
                 _cleanup_free_ char *p = NULL, *pp = NULL;
 
-                p = dirname_malloc(*i); /* Get the drop-in directory from the drop-in file */
-                if (!p)
+                if (path_extract_directory(*i, &p) < 0) /* Get the drop-in directory from the drop-in file */
                         continue;
 
-                pp = dirname_malloc(p); /* Get the config directory from the drop-in directory */
-                if (!pp)
+                if (path_extract_directory(p, &pp) < 0) /* Get the config directory from the drop-in directory */
                         continue;
 
                 /* Only drop transient drop-ins */
@@ -665,10 +684,10 @@
 
         unit_dequeue_rewatch_pids(u);
 
-        sd_bus_slot_unref(u->match_bus_slot);
-        sd_bus_track_unref(u->bus_track);
+        u->match_bus_slot = sd_bus_slot_unref(u->match_bus_slot);
+        u->bus_track = sd_bus_track_unref(u->bus_track);
         u->deserialized_refs = strv_free(u->deserialized_refs);
-        u->pending_freezer_message = sd_bus_message_unref(u->pending_freezer_message);
+        u->pending_freezer_invocation = sd_bus_message_unref(u->pending_freezer_invocation);
 
         unit_free_requires_mounts_for(u);
 
@@ -702,7 +721,6 @@
         if (u->on_console)
                 manager_unref_console(u->manager);
 
-
         fdset_free(u->initial_socket_bind_link_fds);
 #if BPF_FRAMEWORK
         bpf_link_free(u->ipv4_socket_bind_link);
@@ -764,7 +782,13 @@
 
         hashmap_free(u->bpf_foreign_by_key);
 
-        bpf_program_unref(u->bpf_device_control_installed);
+        bpf_program_free(u->bpf_device_control_installed);
+
+#if BPF_FRAMEWORK
+        bpf_link_free(u->restrict_ifaces_ingress_bpf_link);
+        bpf_link_free(u->restrict_ifaces_egress_bpf_link);
+#endif
+        fdset_free(u->initial_restric_ifaces_link_fds);
 
         condition_free_list(u->conditions);
         condition_free_list(u->asserts);
@@ -779,9 +803,13 @@
         free(u->job_timeout_reboot_arg);
         free(u->reboot_arg);
 
+        free(u->access_selinux_context);
+
         set_free_free(u->aliases);
         free(u->id);
 
+        activation_details_unref(u->activation_details);
+
         return mfree(u);
 }
 
@@ -874,7 +902,7 @@
         /* Let's reserve some space in the dependency hashmaps so that later on merging the units cannot
          * fail.
          *
-         * First make some room in the per dependency type hashmaps. Using the summed size of both unit's
+         * First make some room in the per dependency type hashmaps. Using the summed size of both units'
          * hashmaps is an estimate that is likely too high since they probably use some of the same
          * types. But it's never too low, and that's all we need. */
 
@@ -909,29 +937,17 @@
         return 0;
 }
 
-static void unit_maybe_warn_about_dependency(
-                Unit *u,
-                const char *other_id,
-                UnitDependency dependency) {
-
-        assert(u);
-
+static bool unit_should_warn_about_dependency(UnitDependency dependency) {
         /* Only warn about some unit types */
-        if (!IN_SET(dependency,
-                    UNIT_CONFLICTS,
-                    UNIT_CONFLICTED_BY,
-                    UNIT_BEFORE,
-                    UNIT_AFTER,
-                    UNIT_ON_SUCCESS,
-                    UNIT_ON_FAILURE,
-                    UNIT_TRIGGERS,
-                    UNIT_TRIGGERED_BY))
-                return;
-
-        if (streq_ptr(u->id, other_id))
-                log_unit_warning(u, "Dependency %s=%s dropped", unit_dependency_to_string(dependency), u->id);
-        else
-                log_unit_warning(u, "Dependency %s=%s dropped, merged into %s", unit_dependency_to_string(dependency), strna(other_id), u->id);
+        return IN_SET(dependency,
+                      UNIT_CONFLICTS,
+                      UNIT_CONFLICTED_BY,
+                      UNIT_BEFORE,
+                      UNIT_AFTER,
+                      UNIT_ON_SUCCESS,
+                      UNIT_ON_FAILURE,
+                      UNIT_TRIGGERS,
+                      UNIT_TRIGGERED_BY);
 }
 
 static int unit_per_dependency_type_hashmap_update(
@@ -1016,11 +1032,10 @@
         return unit_per_dependency_type_hashmap_update(per_type, other, origin_mask, destination_mask);
 }
 
-static void unit_merge_dependencies(
-                Unit *u,
-                Unit *other) {
-
-        int r;
+static void unit_merge_dependencies(Unit *u, Unit *other) {
+        Hashmap *deps;
+        void *dt; /* Actually of type UnitDependency, except that we don't bother casting it here,
+                   * since the hashmaps all want it as void pointer. */
 
         assert(u);
         assert(other);
@@ -1028,18 +1043,29 @@
         if (u == other)
                 return;
 
+        /* First, remove dependency to other. */
+        HASHMAP_FOREACH_KEY(deps, dt, u->dependencies) {
+                if (hashmap_remove(deps, other) && unit_should_warn_about_dependency(UNIT_DEPENDENCY_FROM_PTR(dt)))
+                        log_unit_warning(u, "Dependency %s=%s is dropped, as %s is merged into %s.",
+                                         unit_dependency_to_string(UNIT_DEPENDENCY_FROM_PTR(dt)),
+                                         other->id, other->id, u->id);
+
+                if (hashmap_isempty(deps))
+                        hashmap_free(hashmap_remove(u->dependencies, dt));
+        }
+
         for (;;) {
                 _cleanup_(hashmap_freep) Hashmap *other_deps = NULL;
                 UnitDependencyInfo di_back;
                 Unit *back;
-                void *dt; /* Actually of type UnitDependency, except that we don't bother casting it here,
-                           * since the hashmaps all want it as void pointer. */
 
                 /* Let's focus on one dependency type at a time, that 'other' has defined. */
                 other_deps = hashmap_steal_first_key_and_value(other->dependencies, &dt);
                 if (!other_deps)
                         break; /* done! */
 
+                deps = hashmap_get(u->dependencies, dt);
+
                 /* Now iterate through all dependencies of this dependency type, of 'other'. We refer to the
                  * referenced units as 'back'. */
                 HASHMAP_FOREACH_KEY(di_back.data, back, other_deps) {
@@ -1049,7 +1075,12 @@
                         if (back == u) {
                                 /* This is a dependency pointing back to the unit we want to merge with?
                                  * Suppress it (but warn) */
-                                unit_maybe_warn_about_dependency(u, other->id, UNIT_DEPENDENCY_FROM_PTR(dt));
+                                if (unit_should_warn_about_dependency(UNIT_DEPENDENCY_FROM_PTR(dt)))
+                                        log_unit_warning(u, "Dependency %s=%s in %s is dropped, as %s is merged into %s.",
+                                                         unit_dependency_to_string(UNIT_DEPENDENCY_FROM_PTR(dt)),
+                                                         u->id, other->id, other->id, u->id);
+
+                                hashmap_remove(other_deps, back);
                                 continue;
                         }
 
@@ -1068,41 +1099,21 @@
                                                           di_move.origin_mask,
                                                           di_move.destination_mask) >= 0);
                         }
-                }
-
-                /* Now all references towards 'other' of the current type 'dt' are corrected to point to
-                 * 'u'. Lets's now move the deps of type 'dt' from 'other' to 'u'. First, let's try to move
-                 * them per type wholesale. */
-                r = hashmap_put(u->dependencies, dt, other_deps);
-                if (r == -EEXIST) {
-                        Hashmap *deps;
 
                         /* The target unit already has dependencies of this type, let's then merge this individually. */
-
-                        assert_se(deps = hashmap_get(u->dependencies, dt));
-
-                        for (;;) {
-                                UnitDependencyInfo di_move;
-
-                                /* Get first dep */
-                                di_move.data = hashmap_steal_first_key_and_value(other_deps, (void**) &back);
-                                if (!di_move.data)
-                                        break; /* done */
-                                if (back == u) {
-                                        /* Would point back to us, ignore */
-                                        unit_maybe_warn_about_dependency(u, other->id, UNIT_DEPENDENCY_FROM_PTR(dt));
-                                        continue;
-                                }
-
-                                assert_se(unit_per_dependency_type_hashmap_update(deps, back, di_move.origin_mask, di_move.destination_mask) >= 0);
-                        }
-                } else {
-                        assert_se(r >= 0);
-                        TAKE_PTR(other_deps);
-
-                        if (hashmap_remove(other_deps, u))
-                                unit_maybe_warn_about_dependency(u, other->id, UNIT_DEPENDENCY_FROM_PTR(dt));
+                        if (deps)
+                                assert_se(unit_per_dependency_type_hashmap_update(
+                                                          deps,
+                                                          back,
+                                                          di_back.origin_mask,
+                                                          di_back.destination_mask) >= 0);
                 }
+
+                /* Now all references towards 'other' of the current type 'dt' are corrected to point to 'u'.
+                 * Lets's now move the deps of type 'dt' from 'other' to 'u'. If the unit does not have
+                 * dependencies of this type, let's move them per type wholesale. */
+                if (!deps)
+                        assert_se(hashmap_put(u->dependencies, dt, TAKE_PTR(other_deps)) >= 0);
         }
 
         other->dependencies = hashmap_free(other->dependencies);
@@ -1148,11 +1159,6 @@
         if (r < 0)
                 return r;
 
-        /* Merge names */
-        r = unit_merge_names(u, other);
-        if (r < 0)
-                return r;
-
         /* Redirect all references */
         while (other->refs_by_target)
                 unit_ref_set(other->refs_by_target, other->refs_by_target->source, u);
@@ -1160,9 +1166,17 @@
         /* Merge dependencies */
         unit_merge_dependencies(u, other);
 
+        /* Merge names. It is better to do that after merging deps, otherwise the log message contains n/a. */
+        r = unit_merge_names(u, other);
+        if (r < 0)
+                return r;
+
         other->load_state = UNIT_MERGED;
         other->merged_into = u;
 
+        if (!u->activation_details)
+                u->activation_details = activation_details_ref(other->activation_details);
+
         /* If there is still some data attached to the other node, we
          * don't need it anymore, and can free it. */
         if (other->load_state != UNIT_STUB)
@@ -1219,6 +1233,8 @@
         assert(u);
         assert(c);
 
+        /* Unlike unit_add_dependency() or friends, this always returns 0 on success. */
+
         if (c->working_directory && !c->working_directory_missing_ok) {
                 r = unit_require_mounts_for(u, c->working_directory, UNIT_DEPENDENCY_FILE);
                 if (r < 0)
@@ -1241,11 +1257,10 @@
                 if (!u->manager->prefix[dt])
                         continue;
 
-                char **dp;
-                STRV_FOREACH(dp, c->directories[dt].paths) {
+                for (size_t i = 0; i < c->directories[dt].n_items; i++) {
                         _cleanup_free_ char *p = NULL;
 
-                        p = path_join(u->manager->prefix[dt], *dp);
+                        p = path_join(u->manager->prefix[dt], c->directories[dt].items[i].path);
                         if (!p)
                                 return -ENOMEM;
 
@@ -1260,9 +1275,9 @@
 
         /* For the following three directory types we need write access, and /var/ is possibly on the root
          * fs. Hence order after systemd-remount-fs.service, to ensure things are writable. */
-        if (!strv_isempty(c->directories[EXEC_DIRECTORY_STATE].paths) ||
-            !strv_isempty(c->directories[EXEC_DIRECTORY_CACHE].paths) ||
-            !strv_isempty(c->directories[EXEC_DIRECTORY_LOGS].paths)) {
+        if (c->directories[EXEC_DIRECTORY_STATE].n_items > 0 ||
+            c->directories[EXEC_DIRECTORY_CACHE].n_items > 0 ||
+            c->directories[EXEC_DIRECTORY_LOGS].n_items > 0) {
                 r = unit_add_dependency_by_name(u, UNIT_AFTER, SPECIAL_REMOUNT_FS_SERVICE, true, UNIT_DEPENDENCY_FILE);
                 if (r < 0)
                         return r;
@@ -1416,9 +1431,7 @@
 }
 
 void unit_add_to_target_deps_queue(Unit *u) {
-        Manager *m = u->manager;
-
-        assert(u);
+        Manager *m = ASSERT_PTR(ASSERT_PTR(u)->manager);
 
         if (u->in_target_deps_queue)
                 return;
@@ -1478,6 +1491,7 @@
 static int unit_add_mount_dependencies(Unit *u) {
         UnitDependencyInfo di;
         const char *path;
+        bool changed = false;
         int r;
 
         assert(u);
@@ -1490,7 +1504,7 @@
                         Unit *m;
 
                         r = unit_name_from_path(prefix, ".mount", &p);
-                        if (IN_SET(r, -EINVAL, -ENAMETOOLONG))
+                        if (r == -EINVAL)
                                 continue; /* If the path cannot be converted to a mount unit name, then it's
                                            * not manageable as a unit by systemd, and hence we don't need a
                                            * dependency on it. Let's thus silently ignore the issue. */
@@ -1513,22 +1527,23 @@
                         r = unit_add_dependency(u, UNIT_AFTER, m, true, di.origin_mask);
                         if (r < 0)
                                 return r;
+                        changed = changed || r > 0;
 
                         if (m->fragment_path) {
                                 r = unit_add_dependency(u, UNIT_REQUIRES, m, true, di.origin_mask);
                                 if (r < 0)
                                         return r;
+                                changed = changed || r > 0;
                         }
                 }
         }
 
-        return 0;
+        return changed;
 }
 
 static int unit_add_oomd_dependencies(Unit *u) {
         CGroupContext *c;
         bool wants_oomd;
-        int r;
 
         assert(u);
 
@@ -1543,23 +1558,11 @@
         if (!wants_oomd)
                 return 0;
 
-        r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, "systemd-oomd.service", true, UNIT_DEPENDENCY_FILE);
-        if (r < 0)
-                return r;
-
-        return 0;
+        return unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, "systemd-oomd.service", true, UNIT_DEPENDENCY_FILE);
 }
 
 static int unit_add_startup_units(Unit *u) {
-        CGroupContext *c;
-
-        c = unit_get_cgroup_context(u);
-        if (!c)
-                return 0;
-
-        if (c->startup_cpu_shares == CGROUP_CPU_SHARES_INVALID &&
-            c->startup_io_weight == CGROUP_WEIGHT_INVALID &&
-            c->startup_blockio_weight == CGROUP_BLKIO_WEIGHT_INVALID)
+        if (!unit_has_startup_cgroup_constraints(u))
                 return 0;
 
         return set_ensure_put(&u->manager->startup_units, NULL, u);
@@ -1721,7 +1724,7 @@
         r = manager_get_effective_environment(u->manager, &env);
         if (r < 0) {
                 log_unit_error_errno(u, r, "Failed to determine effective environment: %m");
-                u->condition_result = CONDITION_ERROR;
+                u->condition_result = true;
         } else
                 u->condition_result = condition_test_list(
                                 u->conditions,
@@ -1845,12 +1848,17 @@
  *         -ESTALE:     This unit has been started before and can't be started a second time
  *         -ENOENT:     This is a triggering unit and unit to trigger is not loaded
  */
-int unit_start(Unit *u) {
+int unit_start(Unit *u, ActivationDetails *details) {
         UnitActiveState state;
         Unit *following;
+        int r;
 
         assert(u);
 
+        /* Let's hold off running start jobs for mount units when /proc/self/mountinfo monitor is rate limited. */
+        if (u->type == UNIT_MOUNT && sd_event_source_is_ratelimited(u->manager->mount_event_source))
+                return -EAGAIN;
+
         /* If this is already started, then this will succeed. Note that this will even succeed if this unit
          * is not startable by the user. This is relied on to detect when we need to wait for units and when
          * waiting is finished. */
@@ -1889,7 +1897,7 @@
 
         /* Let's make sure that the deps really are in order before we start this. Normally the job engine
          * should have taken care of this already, but let's check this here again. After all, our
-         * dependencies might not be in effect anymore, due to a reload or due to a failed condition. */
+         * dependencies might not be in effect anymore, due to a reload or due to an unmet condition. */
         if (!unit_verify_deps(u))
                 return -ENOLINK;
 
@@ -1897,7 +1905,14 @@
         following = unit_following(u);
         if (following) {
                 log_unit_debug(u, "Redirecting start request from %s to %s.", u->id, following->id);
-                return unit_start(following);
+                return unit_start(following, details);
+        }
+
+        /* Check our ability to start early so that failure conditions don't cause us to enter a busy loop. */
+        if (UNIT_VTABLE(u)->can_start) {
+                r = UNIT_VTABLE(u)->can_start(u);
+                if (r < 0)
+                        return r;
         }
 
         /* If it is stopped, but we cannot start it, then fail */
@@ -1911,6 +1926,9 @@
         unit_add_to_dbus_queue(u);
         unit_cgroup_freezer_action(u, FREEZER_THAW);
 
+        if (!u->activation_details) /* Older details object wins */
+                u->activation_details = activation_details_ref(details);
+
         return UNIT_VTABLE(u)->start(u);
 }
 
@@ -2199,7 +2217,7 @@
                 UnitDependencyAtom atom,
                 JobMode job_mode) {
 
-        bool logged = false;
+        int n_jobs = -1;
         Unit *other;
         int r;
 
@@ -2212,9 +2230,9 @@
         UNIT_FOREACH_DEPENDENCY(other, u, atom) {
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
 
-                if (!logged) {
+                if (n_jobs < 0) {
                         log_unit_info(u, "Triggering %s dependencies.", dependency_name);
-                        logged = true;
+                        n_jobs = 0;
                 }
 
                 r = manager_add_job(u->manager, JOB_START, other, job_mode, NULL, &error, NULL);
@@ -2222,10 +2240,12 @@
                         log_unit_warning_errno(
                                         u, r, "Failed to enqueue %s job, ignoring: %s",
                                         dependency_name, bus_error_message(&error, r));
+                n_jobs ++;
         }
 
-        if (logged)
-                log_unit_debug(u, "Triggering %s dependencies done.", dependency_name);
+        if (n_jobs >= 0)
+                log_unit_debug(u, "Triggering %s dependencies done (%i %s).",
+                               dependency_name, n_jobs, n_jobs == 1 ? "job" : "jobs");
 }
 
 void unit_trigger_notify(Unit *u) {
@@ -2276,8 +2296,6 @@
 
         (void) unit_get_cpu_usage(u, &nsec);
         if (nsec != NSEC_INFINITY) {
-                char buf[FORMAT_TIMESPAN_MAX] = "";
-
                 /* Format the CPU time for inclusion in the structured log message */
                 if (asprintf(&t, "CPU_USAGE_NSEC=%" PRIu64, nsec) < 0) {
                         r = log_oom();
@@ -2286,8 +2304,7 @@
                 iovec[n_iovec++] = IOVEC_MAKE_STRING(t);
 
                 /* Format the CPU time for inclusion in the human language message string */
-                format_timespan(buf, sizeof(buf), nsec / NSEC_PER_USEC, USEC_PER_MSEC);
-                t = strjoin("consumed ", buf, " CPU time");
+                t = strjoin("consumed ", FORMAT_TIMESPAN(nsec / NSEC_PER_USEC, USEC_PER_MSEC), " CPU time");
                 if (!t) {
                         r = log_oom();
                         goto finish;
@@ -2301,7 +2318,6 @@
         }
 
         for (CGroupIOAccountingMetric k = 0; k < _CGROUP_IO_ACCOUNTING_METRIC_MAX; k++) {
-                char buf[FORMAT_BYTES_MAX] = "";
                 uint64_t value = UINT64_MAX;
 
                 assert(io_fields[k]);
@@ -2325,14 +2341,14 @@
                  * for the bytes counters (and not for the operations counters) */
                 if (k == CGROUP_IO_READ_BYTES) {
                         assert(!rr);
-                        rr = strjoin("read ", format_bytes(buf, sizeof(buf), value), " from disk");
+                        rr = strjoin("read ", strna(FORMAT_BYTES(value)), " from disk");
                         if (!rr) {
                                 r = log_oom();
                                 goto finish;
                         }
                 } else if (k == CGROUP_IO_WRITE_BYTES) {
                         assert(!wr);
-                        wr = strjoin("written ", format_bytes(buf, sizeof(buf), value), " to disk");
+                        wr = strjoin("written ", strna(FORMAT_BYTES(value)), " to disk");
                         if (!wr) {
                                 r = log_oom();
                                 goto finish;
@@ -2366,7 +2382,6 @@
         }
 
         for (CGroupIPAccountingMetric m = 0; m < _CGROUP_IP_ACCOUNTING_METRIC_MAX; m++) {
-                char buf[FORMAT_BYTES_MAX] = "";
                 uint64_t value = UINT64_MAX;
 
                 assert(ip_fields[m]);
@@ -2390,14 +2405,14 @@
                  * bytes counters (and not for the packets counters) */
                 if (m == CGROUP_IP_INGRESS_BYTES) {
                         assert(!igress);
-                        igress = strjoin("received ", format_bytes(buf, sizeof(buf), value), " IP traffic");
+                        igress = strjoin("received ", strna(FORMAT_BYTES(value)), " IP traffic");
                         if (!igress) {
                                 r = log_oom();
                                 goto finish;
                         }
                 } else if (m == CGROUP_IP_EGRESS_BYTES) {
                         assert(!egress);
-                        egress = strjoin("sent ", format_bytes(buf, sizeof(buf), value), " IP traffic");
+                        egress = strjoin("sent ", strna(FORMAT_BYTES(value)), " IP traffic");
                         if (!egress) {
                                 r = log_oom();
                                 goto finish;
@@ -2599,7 +2614,7 @@
                 break;
 
         default:
-                assert_not_reached("Job type unknown");
+                assert_not_reached();
         }
 
         return unexpected;
@@ -2891,10 +2906,9 @@
 }
 
 static int on_rewatch_pids_event(sd_event_source *s, void *userdata) {
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(u);
 
         unit_tidy_watch_pids(u);
         unit_watch_all_pids(u);
@@ -2991,7 +3005,7 @@
                 return unit_can_reload(u) && unit_can_start(u);
 
         default:
-                assert_not_reached("Invalid job type");
+                assert_not_reached();
         }
 }
 
@@ -3003,45 +3017,44 @@
                 UnitDependencyMask mask) {
 
         static const UnitDependency inverse_table[_UNIT_DEPENDENCY_MAX] = {
-                [UNIT_REQUIRES] = UNIT_REQUIRED_BY,
-                [UNIT_REQUISITE] = UNIT_REQUISITE_OF,
-                [UNIT_WANTS] = UNIT_WANTED_BY,
-                [UNIT_BINDS_TO] = UNIT_BOUND_BY,
-                [UNIT_PART_OF] = UNIT_CONSISTS_OF,
-                [UNIT_UPHOLDS] = UNIT_UPHELD_BY,
-                [UNIT_REQUIRED_BY] = UNIT_REQUIRES,
-                [UNIT_REQUISITE_OF] = UNIT_REQUISITE,
-                [UNIT_WANTED_BY] = UNIT_WANTS,
-                [UNIT_BOUND_BY] = UNIT_BINDS_TO,
-                [UNIT_CONSISTS_OF] = UNIT_PART_OF,
-                [UNIT_UPHELD_BY] = UNIT_UPHOLDS,
-                [UNIT_CONFLICTS] = UNIT_CONFLICTED_BY,
-                [UNIT_CONFLICTED_BY] = UNIT_CONFLICTS,
-                [UNIT_BEFORE] = UNIT_AFTER,
-                [UNIT_AFTER] = UNIT_BEFORE,
-                [UNIT_ON_SUCCESS] = UNIT_ON_SUCCESS_OF,
-                [UNIT_ON_SUCCESS_OF] = UNIT_ON_SUCCESS,
-                [UNIT_ON_FAILURE] = UNIT_ON_FAILURE_OF,
-                [UNIT_ON_FAILURE_OF] = UNIT_ON_FAILURE,
-                [UNIT_TRIGGERS] = UNIT_TRIGGERED_BY,
-                [UNIT_TRIGGERED_BY] = UNIT_TRIGGERS,
-                [UNIT_PROPAGATES_RELOAD_TO] = UNIT_RELOAD_PROPAGATED_FROM,
+                [UNIT_REQUIRES]               = UNIT_REQUIRED_BY,
+                [UNIT_REQUISITE]              = UNIT_REQUISITE_OF,
+                [UNIT_WANTS]                  = UNIT_WANTED_BY,
+                [UNIT_BINDS_TO]               = UNIT_BOUND_BY,
+                [UNIT_PART_OF]                = UNIT_CONSISTS_OF,
+                [UNIT_UPHOLDS]                = UNIT_UPHELD_BY,
+                [UNIT_REQUIRED_BY]            = UNIT_REQUIRES,
+                [UNIT_REQUISITE_OF]           = UNIT_REQUISITE,
+                [UNIT_WANTED_BY]              = UNIT_WANTS,
+                [UNIT_BOUND_BY]               = UNIT_BINDS_TO,
+                [UNIT_CONSISTS_OF]            = UNIT_PART_OF,
+                [UNIT_UPHELD_BY]              = UNIT_UPHOLDS,
+                [UNIT_CONFLICTS]              = UNIT_CONFLICTED_BY,
+                [UNIT_CONFLICTED_BY]          = UNIT_CONFLICTS,
+                [UNIT_BEFORE]                 = UNIT_AFTER,
+                [UNIT_AFTER]                  = UNIT_BEFORE,
+                [UNIT_ON_SUCCESS]             = UNIT_ON_SUCCESS_OF,
+                [UNIT_ON_SUCCESS_OF]          = UNIT_ON_SUCCESS,
+                [UNIT_ON_FAILURE]             = UNIT_ON_FAILURE_OF,
+                [UNIT_ON_FAILURE_OF]          = UNIT_ON_FAILURE,
+                [UNIT_TRIGGERS]               = UNIT_TRIGGERED_BY,
+                [UNIT_TRIGGERED_BY]           = UNIT_TRIGGERS,
+                [UNIT_PROPAGATES_RELOAD_TO]   = UNIT_RELOAD_PROPAGATED_FROM,
                 [UNIT_RELOAD_PROPAGATED_FROM] = UNIT_PROPAGATES_RELOAD_TO,
-                [UNIT_PROPAGATES_STOP_TO] = UNIT_STOP_PROPAGATED_FROM,
-                [UNIT_STOP_PROPAGATED_FROM] = UNIT_PROPAGATES_STOP_TO,
-                [UNIT_JOINS_NAMESPACE_OF] = UNIT_JOINS_NAMESPACE_OF, /* symmetric! 👓 */
-                [UNIT_REFERENCES] = UNIT_REFERENCED_BY,
-                [UNIT_REFERENCED_BY] = UNIT_REFERENCES,
-                [UNIT_IN_SLICE] = UNIT_SLICE_OF,
-                [UNIT_SLICE_OF] = UNIT_IN_SLICE,
+                [UNIT_PROPAGATES_STOP_TO]     = UNIT_STOP_PROPAGATED_FROM,
+                [UNIT_STOP_PROPAGATED_FROM]   = UNIT_PROPAGATES_STOP_TO,
+                [UNIT_JOINS_NAMESPACE_OF]     = UNIT_JOINS_NAMESPACE_OF, /* symmetric! 👓 */
+                [UNIT_REFERENCES]             = UNIT_REFERENCED_BY,
+                [UNIT_REFERENCED_BY]          = UNIT_REFERENCES,
+                [UNIT_IN_SLICE]               = UNIT_SLICE_OF,
+                [UNIT_SLICE_OF]               = UNIT_IN_SLICE,
         };
-        Unit *original_u = u, *original_other = other;
         UnitDependencyAtom a;
         int r;
 
         /* Helper to know whether sending a notification is necessary or not: if the dependency is already
          * there, no need to notify! */
-        bool noop;
+        bool notify, notify_other = false;
 
         assert(u);
         assert(d >= 0 && d < _UNIT_DEPENDENCY_MAX);
@@ -3054,10 +3067,15 @@
 
         /* We won't allow dependencies on ourselves. We will not consider them an error however. */
         if (u == other) {
-                unit_maybe_warn_about_dependency(original_u, original_other->id, d);
+                if (unit_should_warn_about_dependency(d))
+                        log_unit_warning(u, "Dependency %s=%s is dropped.",
+                                         unit_dependency_to_string(d), u->id);
                 return 0;
         }
 
+        if (u->manager && FLAGS_SET(u->manager->test_run_flags, MANAGER_TEST_RUN_IGNORE_DEPENDENCIES))
+                return 0;
+
         /* Note that ordering a device unit after a unit is permitted since it allows to start its job
          * running timeout at a specific time. */
         if (FLAGS_SET(a, UNIT_ATOM_BEFORE) && other->type == UNIT_DEVICE) {
@@ -3095,38 +3113,37 @@
         r = unit_add_dependency_hashmap(&u->dependencies, d, other, mask, 0);
         if (r < 0)
                 return r;
-        noop = !r;
+        notify = r > 0;
 
         if (inverse_table[d] != _UNIT_DEPENDENCY_INVALID && inverse_table[d] != d) {
                 r = unit_add_dependency_hashmap(&other->dependencies, inverse_table[d], u, 0, mask);
                 if (r < 0)
                         return r;
-                if (r)
-                        noop = false;
+                notify_other = r > 0;
         }
 
         if (add_reference) {
                 r = unit_add_dependency_hashmap(&u->dependencies, UNIT_REFERENCES, other, mask, 0);
                 if (r < 0)
                         return r;
-                if (r)
-                        noop = false;
+                notify = notify || r > 0;
 
                 r = unit_add_dependency_hashmap(&other->dependencies, UNIT_REFERENCED_BY, u, 0, mask);
                 if (r < 0)
                         return r;
-                if (r)
-                        noop = false;
+                notify_other = notify_other || r > 0;
         }
 
-        if (!noop)
+        if (notify)
                 unit_add_to_dbus_queue(u);
+        if (notify_other)
+                unit_add_to_dbus_queue(other);
 
-        return 0;
+        return notify || notify_other;
 }
 
 int unit_add_two_dependencies(Unit *u, UnitDependency d, UnitDependency e, Unit *other, bool add_reference, UnitDependencyMask mask) {
-        int r;
+        int r, s;
 
         assert(u);
 
@@ -3134,7 +3151,11 @@
         if (r < 0)
                 return r;
 
-        return unit_add_dependency(u, e, other, add_reference, mask);
+        s = unit_add_dependency(u, e, other, add_reference, mask);
+        if (s < 0)
+                return s;
+
+        return r > 0 || s > 0;
 }
 
 static int resolve_template(Unit *u, const char *name, char **buf, const char **ret) {
@@ -3181,6 +3202,9 @@
         if (r < 0)
                 return r;
 
+        if (u->manager && FLAGS_SET(u->manager->test_run_flags, MANAGER_TEST_RUN_IGNORE_DEPENDENCIES))
+                return 0;
+
         r = manager_load_unit(u->manager, name, NULL, NULL, &other);
         if (r < 0)
                 return r;
@@ -3200,6 +3224,9 @@
         if (r < 0)
                 return r;
 
+        if (u->manager && FLAGS_SET(u->manager->test_run_flags, MANAGER_TEST_RUN_IGNORE_DEPENDENCIES))
+                return 0;
+
         r = manager_load_unit(u->manager, name, NULL, NULL, &other);
         if (r < 0)
                 return r;
@@ -3209,10 +3236,7 @@
 
 int set_unit_path(const char *p) {
         /* This is mostly for debug purposes */
-        if (setenv("SYSTEMD_UNIT_PATH", p, 1) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(setenv("SYSTEMD_UNIT_PATH", p, 1));
 }
 
 char *unit_dbus_path(Unit *u) {
@@ -3270,7 +3294,7 @@
         return r;
 }
 
-int unit_set_slice(Unit *u, Unit *slice, UnitDependencyMask mask) {
+int unit_set_slice(Unit *u, Unit *slice) {
         int r;
 
         assert(u);
@@ -3303,7 +3327,11 @@
         if (UNIT_GET_SLICE(u) && u->cgroup_realized)
                 return -EBUSY;
 
-        r = unit_add_dependency(u, UNIT_IN_SLICE, slice, true, mask);
+        /* Remove any slices assigned prior; we should only have one UNIT_IN_SLICE dependency */
+        if (UNIT_GET_SLICE(u))
+                unit_remove_dependencies(u, UNIT_DEPENDENCY_SLICE_PROPERTY);
+
+        r = unit_add_dependency(u, UNIT_IN_SLICE, slice, true, UNIT_DEPENDENCY_SLICE_PROPERTY);
         if (r < 0)
                 return r;
 
@@ -3317,6 +3345,9 @@
 
         assert(u);
 
+        if (u->manager && FLAGS_SET(u->manager->test_run_flags, MANAGER_TEST_RUN_IGNORE_DEPENDENCIES))
+                return 0;
+
         if (UNIT_GET_SLICE(u))
                 return 0;
 
@@ -3356,7 +3387,7 @@
         if (r < 0)
                 return r;
 
-        return unit_set_slice(u, slice, UNIT_DEPENDENCY_FILE);
+        return unit_set_slice(u, slice);
 }
 
 const char *unit_slice_name(Unit *u) {
@@ -3391,11 +3422,10 @@
 
 static int signal_name_owner_changed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *new_owner;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(u);
 
         r = sd_bus_message_read(message, "sss", NULL, NULL, &new_owner);
         if (r < 0) {
@@ -3412,11 +3442,10 @@
 static int get_name_owner_handler(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const sd_bus_error *e;
         const char *new_owner;
-        Unit *u = userdata;
+        Unit *u = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(u);
 
         u->get_name_owner_slot = sd_bus_slot_unref(u->get_name_owner_slot);
 
@@ -3584,7 +3613,6 @@
 
 int unit_coldplug(Unit *u) {
         int r = 0, q;
-        char **i;
 
         assert(u);
 
@@ -3657,7 +3685,6 @@
 
 bool unit_need_daemon_reload(Unit *u) {
         _cleanup_strv_free_ char **t = NULL;
-        char **path;
 
         assert(u);
 
@@ -3769,6 +3796,13 @@
         return UNIT_VTABLE(u)->kill(u, w, signo, error);
 }
 
+void unit_notify_cgroup_oom(Unit *u, bool managed_oom) {
+        assert(u);
+
+        if (UNIT_VTABLE(u)->notify_cgroup_oom)
+                UNIT_VTABLE(u)->notify_cgroup_oom(u, managed_oom);
+}
+
 static Set *unit_pid_set(pid_t main_pid, pid_t control_pid) {
         _cleanup_set_free_ Set *pid_set = NULL;
         int r;
@@ -3795,9 +3829,7 @@
 
 static int kill_common_log(pid_t pid, int signo, void *userdata) {
         _cleanup_free_ char *comm = NULL;
-        Unit *u = userdata;
-
-        assert(u);
+        Unit *u = ASSERT_PTR(userdata);
 
         (void) get_process_comm(pid, &comm);
         log_unit_info(u, "Sending signal SIG%s to process " PID_FMT " (%s) on client request.",
@@ -3944,14 +3976,26 @@
 }
 
 int unit_get_unit_file_preset(Unit *u) {
+        int r;
+
         assert(u);
 
-        if (u->unit_file_preset < 0 && u->fragment_path)
+        if (u->unit_file_preset < 0 && u->fragment_path) {
+                _cleanup_free_ char *bn = NULL;
+
+                r = path_extract_filename(u->fragment_path, &bn);
+                if (r < 0)
+                        return (u->unit_file_preset = r);
+
+                if (r == O_DIRECTORY)
+                        return (u->unit_file_preset = -EISDIR);
+
                 u->unit_file_preset = unit_file_query_preset(
                                 u->manager->unit_file_scope,
                                 NULL,
-                                basename(u->fragment_path),
+                                bn,
                                 NULL);
+        }
 
         return u->unit_file_preset;
 }
@@ -4083,6 +4127,9 @@
                         ec->no_new_privileges = true;
                         ec->restrict_suid_sgid = true;
                 }
+
+                for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++)
+                        exec_directory_sort(ec->directories + dt);
         }
 
         cc = unit_get_cgroup_context(u);
@@ -4092,36 +4139,54 @@
                     cc->device_policy == CGROUP_DEVICE_POLICY_AUTO)
                         cc->device_policy = CGROUP_DEVICE_POLICY_CLOSED;
 
-                if ((ec->root_image || !LIST_IS_EMPTY(ec->mount_images)) &&
-                    (cc->device_policy != CGROUP_DEVICE_POLICY_AUTO || cc->device_allow)) {
-                        const char *p;
+                /* Only add these if needed, as they imply that everything else is blocked. */
+                if (cc->device_policy != CGROUP_DEVICE_POLICY_AUTO || cc->device_allow) {
+                        if (ec->root_image || ec->mount_images) {
 
-                        /* When RootImage= or MountImages= is specified, the following devices are touched. */
-                        FOREACH_STRING(p, "/dev/loop-control", "/dev/mapper/control") {
-                                r = cgroup_add_device_allow(cc, p, "rw");
-                                if (r < 0)
-                                        return r;
+                                /* When RootImage= or MountImages= is specified, the following devices are touched. */
+                                FOREACH_STRING(p, "/dev/loop-control", "/dev/mapper/control") {
+                                        r = cgroup_add_device_allow(cc, p, "rw");
+                                        if (r < 0)
+                                                return r;
+                                }
+                                FOREACH_STRING(p, "block-loop", "block-blkext", "block-device-mapper") {
+                                        r = cgroup_add_device_allow(cc, p, "rwm");
+                                        if (r < 0)
+                                                return r;
+                                }
+
+                                /* Make sure "block-loop" can be resolved, i.e. make sure "loop" shows up in /proc/devices.
+                                * Same for mapper and verity. */
+                                FOREACH_STRING(p, "modprobe@loop.service", "modprobe@dm_mod.service", "modprobe@dm_verity.service") {
+                                        r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, p, true, UNIT_DEPENDENCY_FILE);
+                                        if (r < 0)
+                                                return r;
+                                }
                         }
-                        FOREACH_STRING(p, "block-loop", "block-blkext", "block-device-mapper") {
-                                r = cgroup_add_device_allow(cc, p, "rwm");
+
+                        if (ec->protect_clock) {
+                                r = cgroup_add_device_allow(cc, "char-rtc", "r");
                                 if (r < 0)
                                         return r;
                         }
 
-                        /* Make sure "block-loop" can be resolved, i.e. make sure "loop" shows up in /proc/devices.
-                         * Same for mapper and verity. */
-                        FOREACH_STRING(p, "modprobe@loop.service", "modprobe@dm_mod.service", "modprobe@dm_verity.service") {
-                                r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, p, true, UNIT_DEPENDENCY_FILE);
+                        /* If there are encrypted credentials we might need to access the TPM. */
+                        bool allow_tpm = false;
+                        ExecLoadCredential *load_cred;
+                        ExecSetCredential *set_cred;
+                        HASHMAP_FOREACH(load_cred, ec->load_credentials)
+                                if ((allow_tpm |= load_cred->encrypted))
+                                        break;
+                        HASHMAP_FOREACH(set_cred, ec->set_credentials)
+                                if ((allow_tpm |= set_cred->encrypted))
+                                        break;
+
+                        if (allow_tpm) {
+                                r = cgroup_add_device_allow(cc, "/dev/tpmrm0", "rw");
                                 if (r < 0)
                                         return r;
                         }
                 }
-
-                if (ec->protect_clock) {
-                        r = cgroup_add_device_allow(cc, "char-rtc", "r");
-                        if (r < 0)
-                                return r;
-                }
         }
 
         return 0;
@@ -4200,52 +4265,62 @@
 }
 
 char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf) {
-        char *ret = NULL;
+        assert(!FLAGS_SET(flags, UNIT_ESCAPE_EXEC_SYNTAX | UNIT_ESCAPE_C));
+
+        _cleanup_free_ char *t = NULL;
 
         if (!s)
                 return NULL;
 
-        /* Escapes the input string as requested. Returns the escaped string. If 'buf' is specified then the allocated
-         * return buffer pointer is also written to *buf, except if no escaping was necessary, in which case *buf is
-         * set to NULL, and the input pointer is returned as-is. This means the return value always contains a properly
-         * escaped version, but *buf when passed only contains a pointer if an allocation was necessary. If *buf is
-         * not specified, then the return value always needs to be freed. Callers can use this to optimize memory
-         * allocations. */
+        /* Escapes the input string as requested. Returns the escaped string. If 'buf' is specified then the
+         * allocated return buffer pointer is also written to *buf, except if no escaping was necessary, in
+         * which case *buf is set to NULL, and the input pointer is returned as-is. This means the return
+         * value always contains a properly escaped version, but *buf when passed only contains a pointer if
+         * an allocation was necessary. If *buf is not specified, then the return value always needs to be
+         * freed. Callers can use this to optimize memory allocations. */
 
         if (flags & UNIT_ESCAPE_SPECIFIERS) {
-                ret = specifier_escape(s);
-                if (!ret)
+                t = specifier_escape(s);
+                if (!t)
                         return NULL;
 
-                s = ret;
+                s = t;
         }
 
-        if (flags & UNIT_ESCAPE_C) {
-                char *a;
+        /* We either do c-escaping or shell-escaping, to additionally escape characters that we parse for
+         * ExecStart= and friend, i.e. '$' and ';' and quotes. */
 
-                a = cescape(s);
-                free(ret);
-                if (!a)
+        if (flags & UNIT_ESCAPE_EXEC_SYNTAX) {
+                char *t2 = shell_escape(s, "$;'\"");
+                if (!t2)
                         return NULL;
+                free_and_replace(t, t2);
 
-                ret = a;
+                s = t;
+
+        } else if (flags & UNIT_ESCAPE_C) {
+                char *t2 = cescape(s);
+                if (!t2)
+                        return NULL;
+                free_and_replace(t, t2);
+
+                s = t;
         }
 
         if (buf) {
-                *buf = ret;
-                return ret ?: (char*) s;
+                *buf = TAKE_PTR(t);
+                return (char*) s;
         }
 
-        return ret ?: strdup(s);
+        return TAKE_PTR(t) ?: strdup(s);
 }
 
 char* unit_concat_strv(char **l, UnitWriteFlags flags) {
         _cleanup_free_ char *result = NULL;
         size_t n = 0;
-        char **i;
 
-        /* Takes a list of strings, escapes them, and concatenates them. This may be used to format command lines in a
-         * way suitable for ExecStart= stanzas */
+        /* Takes a list of strings, escapes them, and concatenates them. This may be used to format command
+         * lines in a way suitable for ExecStart= stanzas. */
 
         STRV_FOREACH(i, l) {
                 _cleanup_free_ char *buf = NULL;
@@ -4406,7 +4481,7 @@
         /* Let's open the file we'll write the transient settings into. This file is kept open as long as we are
          * creating the transient, and is closed in unit_load(), as soon as we start loading the file. */
 
-        RUN_WITH_UMASK(0022) {
+        WITH_UMASK(0022) {
                 f = fopen(path, "we");
                 if (!f)
                         return -errno;
@@ -4442,7 +4517,9 @@
         /* Don't log about processes marked with brackets, under the assumption that these are temporary processes
            only, like for example systemd's own PAM stub process. */
         if (comm && comm[0] == '(')
-                return 0;
+                /* Although we didn't log anything, as this callback is used in unit_kill_context we must return 1
+                 * here to let the manager know that a process was killed. */
+                return 1;
 
         log_unit_notice(userdata,
                         "Killing process " PID_FMT " (%s) with signal SIG%s.",
@@ -4453,30 +4530,34 @@
         return 1;
 }
 
-static int operation_to_signal(const KillContext *c, KillOperation k, bool *noteworthy) {
+static int operation_to_signal(
+                const KillContext *c,
+                KillOperation k,
+                bool *ret_noteworthy) {
+
         assert(c);
 
         switch (k) {
 
         case KILL_TERMINATE:
         case KILL_TERMINATE_AND_LOG:
-                *noteworthy = false;
+                *ret_noteworthy = false;
                 return c->kill_signal;
 
         case KILL_RESTART:
-                *noteworthy = false;
+                *ret_noteworthy = false;
                 return restart_kill_signal(c);
 
         case KILL_KILL:
-                *noteworthy = true;
+                *ret_noteworthy = true;
                 return c->final_kill_signal;
 
         case KILL_WATCHDOG:
-                *noteworthy = true;
+                *ret_noteworthy = true;
                 return c->watchdog_signal;
 
         default:
-                assert_not_reached("KillOperation unknown");
+                assert_not_reached();
         }
 }
 
@@ -4719,11 +4800,28 @@
 }
 
 bool unit_type_supported(UnitType t) {
+        static int8_t cache[_UNIT_TYPE_MAX] = {}; /* -1: disabled, 1: enabled: 0: don't know */
+        int r;
+
         if (_unlikely_(t < 0))
                 return false;
         if (_unlikely_(t >= _UNIT_TYPE_MAX))
                 return false;
 
+        if (cache[t] == 0) {
+                char *e;
+
+                e = strjoina("SYSTEMD_SUPPORT_", unit_type_to_string(t));
+
+                r = getenv_bool(ascii_strupper(e));
+                if (r < 0 && r != -ENXIO)
+                        log_debug_errno(r, "Failed to parse $%s, ignoring: %m", e);
+
+                cache[t] = r == 0 ? -1 : 1;
+        }
+        if (cache[t] < 0)
+                return false;
+
         if (!unit_vtable[t]->supported)
                 return true;
 
@@ -4739,7 +4837,7 @@
         if (!unit_log_level_test(u, LOG_NOTICE))
                 return;
 
-        r = dir_is_empty(where);
+        r = dir_is_empty(where, /* ignore_hidden_or_backup= */ false);
         if (r > 0 || r == -ENOTDIR)
                 return;
         if (r < 0) {
@@ -4784,18 +4882,20 @@
 bool unit_is_pristine(Unit *u) {
         assert(u);
 
-        /* Check if the unit already exists or is already around,
-         * in a number of different ways. Note that to cater for unit
-         * types such as slice, we are generally fine with units that
-         * are marked UNIT_LOADED even though nothing was actually
-         * loaded, as those unit types don't require a file on disk. */
+        /* Check if the unit already exists or is already around, in a number of different ways. Note that to
+         * cater for unit types such as slice, we are generally fine with units that are marked UNIT_LOADED
+         * even though nothing was actually loaded, as those unit types don't require a file on disk.
+         *
+         * Note that we don't check for drop-ins here, because we allow drop-ins for transient units
+         * identically to non-transient units, both unit-specific and hierarchical. E.g. for a-b-c.service:
+         * service.d/….conf, a-.service.d/….conf, a-b-.service.d/….conf, a-b-c.service.d/….conf.
+         */
 
-        return !(!IN_SET(u->load_state, UNIT_NOT_FOUND, UNIT_LOADED) ||
-                 u->fragment_path ||
-                 u->source_path ||
-                 !strv_isempty(u->dropin_paths) ||
-                 u->job ||
-                 u->merged_into);
+        return IN_SET(u->load_state, UNIT_NOT_FOUND, UNIT_LOADED) &&
+               !u->fragment_path &&
+               !u->source_path &&
+               !u->job &&
+               !u->merged_into;
 }
 
 pid_t unit_control_pid(Unit *u) {
@@ -4995,7 +5095,8 @@
         p->cgroup_path = u->cgroup_path;
         SET_FLAG(p->flags, EXEC_CGROUP_DELEGATE, unit_cgroup_delegate(u));
 
-        p->received_credentials = u->manager->received_credentials;
+        p->received_credentials_directory = u->manager->received_credentials_directory;
+        p->received_encrypted_credentials_directory = u->manager->received_encrypted_credentials_directory;
 
         return 0;
 }
@@ -5043,7 +5144,6 @@
                 return r;
         if (r == 0) {
                 int ret = EXIT_SUCCESS;
-                char **i;
 
                 STRV_FOREACH(i, paths) {
                         r = rm_rf(*i, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_MISSING_OK);
@@ -5121,6 +5221,9 @@
 
                                 unit_add_to_gc_queue(other);
 
+                                /* The unit 'other' may not be wanted by the unit 'u'. */
+                                unit_submit_to_stop_when_unneeded_queue(other);
+
                                 done = false;
                                 break;
                         }
@@ -5206,7 +5309,7 @@
 }
 
 static int unit_export_log_extra_fields(Unit *u, const ExecContext *c) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct iovec *iovec;
         const char *p;
         char *pattern;
@@ -5506,25 +5609,6 @@
         return exec_context_may_touch_console(ec);
 }
 
-const char *unit_label_path(const Unit *u) {
-        const char *p;
-
-        assert(u);
-
-        /* Returns the file system path to use for MAC access decisions, i.e. the file to read the SELinux label off
-         * when validating access checks. */
-
-        p = u->source_path ?: u->fragment_path;
-        if (!p)
-                return NULL;
-
-        /* If a unit is masked, then don't read the SELinux label of /dev/null, as that really makes no sense */
-        if (null_or_empty_path(p) > 0)
-                return NULL;
-
-        return p;
-}
-
 int unit_pid_attachable(Unit *u, pid_t pid, sd_bus_error *error) {
         int r;
 
@@ -5700,6 +5784,7 @@
                 exec_context_destroy_runtime_directory(context, u->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
 
         exec_context_destroy_credentials(context, u->manager->prefix[EXEC_DIRECTORY_RUNTIME], u->id);
+        exec_context_destroy_mount_ns_dir(u);
 }
 
 int unit_clean(Unit *u, ExecCleanMask mask) {
@@ -5728,7 +5813,7 @@
                 return -EBUSY;
 
         state = unit_active_state(u);
-        if (!IN_SET(state, UNIT_INACTIVE))
+        if (state != UNIT_INACTIVE)
                 return -EBUSY;
 
         return UNIT_VTABLE(u)->clean(u, mask);
@@ -5763,7 +5848,7 @@
 
         u->freezer_state = FREEZER_FROZEN;
 
-        bus_unit_send_pending_freezer_message(u);
+        bus_unit_send_pending_freezer_message(u, false);
 }
 
 void unit_thawed(Unit *u) {
@@ -5771,7 +5856,7 @@
 
         u->freezer_state = FREEZER_RUNNING;
 
-        bus_unit_send_pending_freezer_message(u);
+        bus_unit_send_pending_freezer_message(u, false);
 }
 
 static int unit_freezer_action(Unit *u, FreezerAction action) {
@@ -5796,13 +5881,16 @@
         if (s != UNIT_ACTIVE)
                 return -EHOSTDOWN;
 
-        if (IN_SET(u->freezer_state, FREEZER_FREEZING, FREEZER_THAWING))
+        if ((IN_SET(u->freezer_state, FREEZER_FREEZING, FREEZER_THAWING) && action == FREEZER_FREEZE) ||
+            (u->freezer_state == FREEZER_THAWING && action == FREEZER_THAW))
                 return -EALREADY;
 
         r = method(u);
         if (r <= 0)
                 return r;
 
+        assert(IN_SET(u->freezer_state, FREEZER_FREEZING, FREEZER_THAWING));
+
         return 1;
 }
 
@@ -5823,6 +5911,25 @@
         return unit_cgroup_freezer_action(u, FREEZER_THAW);
 }
 
+Condition *unit_find_failed_condition(Unit *u) {
+        Condition *failed_trigger = NULL;
+        bool has_succeeded_trigger = false;
+
+        if (u->condition_result)
+                return NULL;
+
+        LIST_FOREACH(conditions, c, u->conditions)
+                if (c->trigger) {
+                        if (c->result == CONDITION_SUCCEEDED)
+                                 has_succeeded_trigger = true;
+                        else if (!failed_trigger)
+                                 failed_trigger = c;
+                } else if (c->result != CONDITION_SUCCEEDED)
+                        return c;
+
+        return failed_trigger && !has_succeeded_trigger ? failed_trigger : NULL;
+}
+
 static const char* const collect_mode_table[_COLLECT_MODE_MAX] = {
         [COLLECT_INACTIVE] = "inactive",
         [COLLECT_INACTIVE_OR_FAILED] = "inactive-or-failed",
@@ -5870,3 +5977,154 @@
         assert(n <= INT_MAX);
         return (int) n;
 }
+
+const ActivationDetailsVTable * const activation_details_vtable[_UNIT_TYPE_MAX] = {
+        [UNIT_PATH] = &activation_details_path_vtable,
+        [UNIT_TIMER] = &activation_details_timer_vtable,
+};
+
+ActivationDetails *activation_details_new(Unit *trigger_unit) {
+        _cleanup_free_ ActivationDetails *details = NULL;
+
+        assert(trigger_unit);
+        assert(trigger_unit->type != _UNIT_TYPE_INVALID);
+        assert(trigger_unit->id);
+
+        details = malloc0(activation_details_vtable[trigger_unit->type]->object_size);
+        if (!details)
+                return NULL;
+
+        *details = (ActivationDetails) {
+                .n_ref = 1,
+                .trigger_unit_type = trigger_unit->type,
+        };
+
+        details->trigger_unit_name = strdup(trigger_unit->id);
+        if (!details->trigger_unit_name)
+                return NULL;
+
+        if (ACTIVATION_DETAILS_VTABLE(details)->init)
+                ACTIVATION_DETAILS_VTABLE(details)->init(details, trigger_unit);
+
+        return TAKE_PTR(details);
+}
+
+static ActivationDetails *activation_details_free(ActivationDetails *details) {
+        if (!details)
+                return NULL;
+
+        if (ACTIVATION_DETAILS_VTABLE(details)->done)
+                ACTIVATION_DETAILS_VTABLE(details)->done(details);
+
+        free(details->trigger_unit_name);
+
+        return mfree(details);
+}
+
+void activation_details_serialize(ActivationDetails *details, FILE *f) {
+        if (!details || details->trigger_unit_type == _UNIT_TYPE_INVALID)
+                return;
+
+        (void) serialize_item(f, "activation-details-unit-type", unit_type_to_string(details->trigger_unit_type));
+        if (details->trigger_unit_name)
+                (void) serialize_item(f, "activation-details-unit-name", details->trigger_unit_name);
+        if (ACTIVATION_DETAILS_VTABLE(details)->serialize)
+                ACTIVATION_DETAILS_VTABLE(details)->serialize(details, f);
+}
+
+int activation_details_deserialize(const char *key, const char *value, ActivationDetails **details) {
+        assert(key);
+        assert(value);
+        assert(details);
+
+        if (!*details) {
+                UnitType t;
+
+                if (!streq(key, "activation-details-unit-type"))
+                        return -EINVAL;
+
+                t = unit_type_from_string(value);
+                if (t == _UNIT_TYPE_INVALID)
+                        return -EINVAL;
+
+                *details = malloc0(activation_details_vtable[t]->object_size);
+                if (!*details)
+                        return -ENOMEM;
+
+                **details = (ActivationDetails) {
+                        .n_ref = 1,
+                        .trigger_unit_type = t,
+                };
+
+                return 0;
+        }
+
+        if (streq(key, "activation-details-unit-name")) {
+                (*details)->trigger_unit_name = strdup(value);
+                if (!(*details)->trigger_unit_name)
+                        return -ENOMEM;
+
+                return 0;
+        }
+
+        if (ACTIVATION_DETAILS_VTABLE(*details)->deserialize)
+                return ACTIVATION_DETAILS_VTABLE(*details)->deserialize(key, value, details);
+
+        return -EINVAL;
+}
+
+int activation_details_append_env(ActivationDetails *details, char ***strv) {
+        int r = 0;
+
+        assert(strv);
+
+        if (!details)
+                return 0;
+
+        if (!isempty(details->trigger_unit_name)) {
+                char *s = strjoin("TRIGGER_UNIT=", details->trigger_unit_name);
+                if (!s)
+                        return -ENOMEM;
+
+                r = strv_consume(strv, TAKE_PTR(s));
+                if (r < 0)
+                        return r;
+        }
+
+        if (ACTIVATION_DETAILS_VTABLE(details)->append_env) {
+                r = ACTIVATION_DETAILS_VTABLE(details)->append_env(details, strv);
+                if (r < 0)
+                        return r;
+        }
+
+        return r + !isempty(details->trigger_unit_name); /* Return the number of variables added to the env block */
+}
+
+int activation_details_append_pair(ActivationDetails *details, char ***strv) {
+        int r = 0;
+
+        assert(strv);
+
+        if (!details)
+                return 0;
+
+        if (!isempty(details->trigger_unit_name)) {
+                r = strv_extend(strv, "trigger_unit");
+                if (r < 0)
+                        return r;
+
+                r = strv_extend(strv, details->trigger_unit_name);
+                if (r < 0)
+                        return r;
+        }
+
+        if (ACTIVATION_DETAILS_VTABLE(details)->append_env) {
+                r = ACTIVATION_DETAILS_VTABLE(details)->append_pair(details, strv);
+                if (r < 0)
+                        return r;
+        }
+
+        return r + !isempty(details->trigger_unit_name); /* Return the number of pairs added to the strv */
+}
+
+DEFINE_TRIVIAL_REF_UNREF_FUNC(ActivationDetails, activation_details, activation_details_free);
diff --git a/src/core/unit.h b/src/core/unit.h
index 759104f..58417eb 100644
--- a/src/core/unit.h
+++ b/src/core/unit.h
@@ -3,6 +3,7 @@
 
 #include <stdbool.h>
 #include <stdlib.h>
+#include <sys/socket.h>
 #include <unistd.h>
 
 #include "sd-id128.h"
@@ -78,17 +79,21 @@
         /* A dependency created because of some unit's RequiresMountsFor= setting */
         UNIT_DEPENDENCY_PATH               = 1 << 4,
 
-        /* A dependency created because of data read from /proc/self/mountinfo and no other configuration source */
-        UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT = 1 << 5,
+        /* A dependency initially configured from the mount unit file however the dependency will be updated
+         * from /proc/self/mountinfo as soon as the kernel will make the entry for that mount available in
+         * the /proc file */
+        UNIT_DEPENDENCY_MOUNT_FILE         = 1 << 5,
 
-        /* A dependency created because of data read from /proc/self/mountinfo, but conditionalized by
-         * DefaultDependencies= and thus also involving configuration from UNIT_DEPENDENCY_FILE sources */
-        UNIT_DEPENDENCY_MOUNTINFO_DEFAULT  = 1 << 6,
+        /* A dependency created or updated because of data read from /proc/self/mountinfo */
+        UNIT_DEPENDENCY_MOUNTINFO          = 1 << 6,
 
         /* A dependency created because of data read from /proc/swaps and no other configuration source */
         UNIT_DEPENDENCY_PROC_SWAP          = 1 << 7,
 
-        _UNIT_DEPENDENCY_MASK_FULL         = (1 << 8) - 1,
+        /* A dependency for units in slices assigned by directly setting Slice= */
+        UNIT_DEPENDENCY_SLICE_PROPERTY     = 1 << 8,
+
+        _UNIT_DEPENDENCY_MASK_FULL         = (1 << 9) - 1,
 } UnitDependencyMask;
 
 /* The Unit's dependencies[] hashmaps use this structure as value. It has the same size as a void pointer, and thus can
@@ -102,6 +107,75 @@
         } _packed_;
 } UnitDependencyInfo;
 
+/* Store information about why a unit was activated.
+ * We start with trigger units (.path/.timer), eventually it will be expanded to include more metadata. */
+typedef struct ActivationDetails {
+        unsigned n_ref;
+        UnitType trigger_unit_type;
+        char *trigger_unit_name;
+} ActivationDetails;
+
+/* For casting an activation event into the various unit-specific types */
+#define DEFINE_ACTIVATION_DETAILS_CAST(UPPERCASE, MixedCase, UNIT_TYPE)         \
+        static inline MixedCase* UPPERCASE(ActivationDetails *a) {              \
+                if (_unlikely_(!a || a->trigger_unit_type != UNIT_##UNIT_TYPE)) \
+                        return NULL;                                            \
+                                                                                \
+                return (MixedCase*) a;                                          \
+        }
+
+/* For casting the various unit types into a unit */
+#define ACTIVATION_DETAILS(u)                                         \
+        ({                                                            \
+                typeof(u) _u_ = (u);                                  \
+                ActivationDetails *_w_ = _u_ ? &(_u_)->meta : NULL;   \
+                _w_;                                                  \
+        })
+
+ActivationDetails *activation_details_new(Unit *trigger_unit);
+ActivationDetails *activation_details_ref(ActivationDetails *p);
+ActivationDetails *activation_details_unref(ActivationDetails *p);
+void activation_details_serialize(ActivationDetails *p, FILE *f);
+int activation_details_deserialize(const char *key, const char *value, ActivationDetails **info);
+int activation_details_append_env(ActivationDetails *info, char ***strv);
+int activation_details_append_pair(ActivationDetails *info, char ***strv);
+DEFINE_TRIVIAL_CLEANUP_FUNC(ActivationDetails*, activation_details_unref);
+
+typedef struct ActivationDetailsVTable {
+        /* How much memory does an object of this activation type need */
+        size_t object_size;
+
+        /* This should reset all type-specific variables. This should not allocate memory, and is called
+         * with zero-initialized data. It should hence only initialize variables that need to be set != 0. */
+        void (*init)(ActivationDetails *info, Unit *trigger_unit);
+
+        /* This should free all type-specific variables. It should be idempotent. */
+        void (*done)(ActivationDetails *info);
+
+        /* This should serialize all type-specific variables. */
+        void (*serialize)(ActivationDetails *info, FILE *f);
+
+        /* This should deserialize all type-specific variables, one at a time. */
+        int (*deserialize)(const char *key, const char *value, ActivationDetails **info);
+
+        /* This should format the type-specific variables for the env block of the spawned service,
+         * and return the number of added items. */
+        int (*append_env)(ActivationDetails *info, char ***strv);
+
+        /* This should append type-specific variables as key/value pairs for the D-Bus property of the job,
+         * and return the number of added pairs. */
+        int (*append_pair)(ActivationDetails *info, char ***strv);
+} ActivationDetailsVTable;
+
+extern const ActivationDetailsVTable * const activation_details_vtable[_UNIT_TYPE_MAX];
+
+static inline const ActivationDetailsVTable* ACTIVATION_DETAILS_VTABLE(const ActivationDetails *a) {
+        assert(a);
+        assert(a->trigger_unit_type < _UNIT_TYPE_MAX);
+
+        return activation_details_vtable[a->trigger_unit_type];
+}
+
 /* Newer LLVM versions don't like implicit casts from large pointer types to smaller enums, hence let's add
  * explicit type-safe helpers for that. */
 static inline UnitDependency UNIT_DEPENDENCY_FROM_PTR(const void *p) {
@@ -147,6 +221,11 @@
         char *description;
         char **documentation;
 
+        /* The SELinux context used for checking access to this unit read off the unit file at load time (do
+         * not confuse with the selinux_context field in ExecContext which is the SELinux context we'll set
+         * for processes) */
+        char *access_selinux_context;
+
         char *fragment_path; /* if loaded from a config file this is the primary path to it */
         char *source_path; /* if converted, the source file */
         char **dropin_paths;
@@ -160,7 +239,7 @@
         FILE *transient_file;
 
         /* Freezer state */
-        sd_bus_message *pending_freezer_message;
+        sd_bus_message *pending_freezer_invocation;
         FreezerState freezer_state;
 
         /* Job timeout and action to take */
@@ -281,7 +360,7 @@
         nsec_t cpu_usage_base;
         nsec_t cpu_usage_last; /* the most recently read value */
 
-        /* The current counter of processes sent SIGKILL by systemd-oomd */
+        /* The current counter of OOM kills initiated by systemd-oomd */
         uint64_t managed_oom_kill_last;
 
         /* The current counter of the oom_kill field in the memory.events cgroup attribute */
@@ -293,6 +372,7 @@
 
         /* Counterparts in the cgroup filesystem */
         char *cgroup_path;
+        uint64_t cgroup_id;
         CGroupMask cgroup_realized_mask;           /* In which hierarchies does this unit's cgroup exist? (only relevant on cgroup v1) */
         CGroupMask cgroup_enabled_mask;            /* Which controllers are enabled (or more correctly: enabled for the children) for this unit's cgroup? (only relevant on cgroup v2) */
         CGroupMask cgroup_invalidated_mask;        /* A mask specifying controllers which shall be considered invalidated, and require re-realization */
@@ -335,6 +415,12 @@
         struct bpf_link *ipv6_socket_bind_link;
 #endif
 
+        FDSet *initial_restric_ifaces_link_fds;
+#if BPF_FRAMEWORK
+        struct bpf_link *restrict_ifaces_ingress_bpf_link;
+        struct bpf_link *restrict_ifaces_egress_bpf_link;
+#endif
+
         /* Low-priority event source which is used to remove watched PIDs that have gone away, and subscribe to any new
          * ones which might have appeared. */
         sd_event_source *rewatch_pids_event_source;
@@ -343,6 +429,9 @@
         JobMode on_success_job_mode;
         JobMode on_failure_job_mode;
 
+        /* If the job had a specific trigger that needs to be advertised (eg: a path unit), store it. */
+        ActivationDetails *activation_details;
+
         /* Tweaking the GC logic */
         CollectMode collect_mode;
 
@@ -439,19 +528,22 @@
 /* Flags used when writing drop-in files or transient unit files */
 typedef enum UnitWriteFlags {
         /* Write a runtime unit file or drop-in (i.e. one below /run) */
-        UNIT_RUNTIME           = 1 << 0,
+        UNIT_RUNTIME            = 1 << 0,
 
         /* Write a persistent drop-in (i.e. one below /etc) */
-        UNIT_PERSISTENT        = 1 << 1,
+        UNIT_PERSISTENT         = 1 << 1,
 
         /* Place this item in the per-unit-type private section, instead of [Unit] */
-        UNIT_PRIVATE           = 1 << 2,
+        UNIT_PRIVATE            = 1 << 2,
 
         /* Apply specifier escaping before writing */
-        UNIT_ESCAPE_SPECIFIERS = 1 << 3,
+        UNIT_ESCAPE_SPECIFIERS  = 1 << 3,
+
+        /* Escape elements of ExecStart= syntax before writing */
+        UNIT_ESCAPE_EXEC_SYNTAX = 1 << 4,
 
         /* Apply C escaping before writing */
-        UNIT_ESCAPE_C          = 1 << 4,
+        UNIT_ESCAPE_C           = 1 << 5,
 } UnitWriteFlags;
 
 /* Returns true if neither persistent, nor runtime storage is requested, i.e. this is a check invocation only */
@@ -585,7 +677,7 @@
         void (*notify_cgroup_empty)(Unit *u);
 
         /* Called whenever an OOM kill event on this unit was seen */
-        void (*notify_cgroup_oom)(Unit *u);
+        void (*notify_cgroup_oom)(Unit *u, bool managed_oom);
 
         /* Called whenever a process of this unit sends us a message */
         void (*notify_message)(Unit *u, const struct ucred *ucred, char * const *tags, FDSet *fds);
@@ -631,6 +723,9 @@
          * exit code of the "main" process of the service or similar. */
         int (*exit_status)(Unit *u);
 
+        /* Return a copy of the status string pointer. */
+        const char* (*status_text)(Unit *u);
+
         /* Like the enumerate() callback further down, but only enumerates the perpetual units, i.e. all units that
          * unconditionally exist and are always active. The main reason to keep both enumeration functions separate is
          * philosophical: the state of perpetual units should be put in place by coldplug(), while the state of those
@@ -649,6 +744,10 @@
          * of this type will immediately fail. */
         bool (*supported)(void);
 
+        /* If this function is set, it's invoked first as part of starting a unit to allow start rate
+         * limiting checks to occur before we do anything else. */
+        int (*can_start)(Unit *u);
+
         /* The strings to print in status messages */
         UnitStatusMessageFormats status_message_formats;
 
@@ -673,7 +772,7 @@
         /* True if queued jobs of this type should be GC'ed if no other job needs them anymore */
         bool gc_jobs;
 
-        /* True if systemd-oomd can monitor and act on this unit's recursive children's cgroup(s)  */
+        /* True if systemd-oomd can monitor and act on this unit's recursive children's cgroups  */
         bool can_set_managed_oom;
 } UnitVTable;
 
@@ -744,6 +843,12 @@
                 (UNIT_VTABLE(u)->is_extrinsic && UNIT_VTABLE(u)->is_extrinsic(u));
 }
 
+static inline const char* unit_status_text(Unit *u) {
+        if (u && UNIT_VTABLE(u)->status_text)
+                return UNIT_VTABLE(u)->status_text(u);
+        return NULL;
+}
+
 void unit_add_to_load_queue(Unit *u);
 void unit_add_to_dbus_queue(Unit *u);
 void unit_add_to_cleanup_queue(Unit *u);
@@ -761,7 +866,7 @@
 int unit_load_fragment_and_dropin(Unit *u, bool fragment_required);
 int unit_load(Unit *unit);
 
-int unit_set_slice(Unit *u, Unit *slice, UnitDependencyMask mask);
+int unit_set_slice(Unit *u, Unit *slice);
 int unit_set_default_slice(Unit *u);
 
 const char *unit_description(Unit *u) _pure_;
@@ -780,13 +885,15 @@
 bool unit_can_stop(Unit *u) _pure_;
 bool unit_can_isolate(Unit *u) _pure_;
 
-int unit_start(Unit *u);
+int unit_start(Unit *u, ActivationDetails *details);
 int unit_stop(Unit *u);
 int unit_reload(Unit *u);
 
 int unit_kill(Unit *u, KillWho w, int signo, sd_bus_error *error);
 int unit_kill_common(Unit *u, KillWho who, int signo, pid_t main_pid, pid_t control_pid, sd_bus_error *error);
 
+void unit_notify_cgroup_oom(Unit *u, bool managed_oom);
+
 typedef enum UnitNotifyFlags {
         UNIT_NOTIFY_RELOAD_FAILURE    = 1 << 0,
         UNIT_NOTIFY_WILL_AUTO_RESTART = 1 << 1,
@@ -918,8 +1025,6 @@
 
 bool unit_needs_console(Unit *u);
 
-const char *unit_label_path(const Unit *u);
-
 int unit_pid_attachable(Unit *unit, pid_t pid, sd_bus_error *error);
 
 static inline bool unit_has_job_type(Unit *u, JobType type) {
@@ -965,6 +1070,8 @@
 int unit_freeze_vtable_common(Unit *u);
 int unit_thaw_vtable_common(Unit *u);
 
+Condition *unit_find_failed_condition(Unit *u);
+
 /* Macros which append UNIT= or USER_UNIT= to the message */
 
 #define log_unit_full_errno_zerook(unit, level, error, ...)             \
@@ -997,6 +1104,14 @@
 #define log_unit_warning_errno(unit, error, ...) log_unit_full_errno(unit, LOG_WARNING, error, __VA_ARGS__)
 #define log_unit_error_errno(unit, error, ...)   log_unit_full_errno(unit, LOG_ERR, error, __VA_ARGS__)
 
+#if LOG_TRACE
+#  define log_unit_trace(...)          log_unit_debug(__VA_ARGS__)
+#  define log_unit_trace_errno(...)    log_unit_debug_errno(__VA_ARGS__)
+#else
+#  define log_unit_trace(...)          do {} while (0)
+#  define log_unit_trace_errno(e, ...) (-ERRNO_VALUE(e))
+#endif
+
 #define log_unit_struct_errno(unit, level, error, ...)                  \
         ({                                                              \
                 const Unit *_u = (unit);                                \
@@ -1018,7 +1133,8 @@
 
 #define log_unit_struct_iovec(unit, level, iovec, n_iovec) log_unit_struct_iovec_errno(unit, level, 0, iovec, n_iovec)
 
-#define LOG_UNIT_MESSAGE(unit, fmt, ...) "MESSAGE=%s: " fmt, (unit)->id, ##__VA_ARGS__
+/* Like LOG_MESSAGE(), but with the unit name prefixed. */
+#define LOG_UNIT_MESSAGE(unit, fmt, ...) LOG_MESSAGE("%s: " fmt, (unit)->id, ##__VA_ARGS__)
 #define LOG_UNIT_ID(unit) (unit)->manager->unit_log_format_string, (unit)->id
 #define LOG_UNIT_INVOCATION_ID(unit) (unit)->manager->invocation_log_format_string, (unit)->invocation_id_string
 
diff --git a/src/core/user.conf.in b/src/core/user.conf.in
index e0a7703..d67650b 100644
--- a/src/core/user.conf.in
+++ b/src/core/user.conf.in
@@ -14,7 +14,7 @@
 
 [Manager]
 #LogLevel=info
-#LogTarget=console
+#LogTarget=auto
 #LogColor=yes
 #LogLocation=no
 #LogTime=no
@@ -24,9 +24,10 @@
 #DefaultTimerAccuracySec=1min
 #DefaultStandardOutput=inherit
 #DefaultStandardError=inherit
-#DefaultTimeoutStartSec=90s
-#DefaultTimeoutStopSec=90s
+#DefaultTimeoutStartSec={{DEFAULT_USER_TIMEOUT_SEC}}s
+#DefaultTimeoutStopSec={{DEFAULT_USER_TIMEOUT_SEC}}s
 #DefaultTimeoutAbortSec=
+#DefaultDeviceTimeoutSec={{DEFAULT_USER_TIMEOUT_SEC}}s
 #DefaultRestartSec=100ms
 #DefaultStartLimitIntervalSec=10s
 #DefaultStartLimitBurst=5
@@ -47,3 +48,6 @@
 #DefaultLimitNICE=
 #DefaultLimitRTPRIO=
 #DefaultLimitRTTIME=
+#DefaultSmackProcessLabel=
+#ReloadLimitIntervalSec=
+#ReloadLimitBurst
diff --git a/src/coredump/coredump-vacuum.c b/src/coredump/coredump-vacuum.c
index 95c3fca..c6e201e 100644
--- a/src/coredump/coredump-vacuum.c
+++ b/src/coredump/coredump-vacuum.c
@@ -13,6 +13,7 @@
 #include "hashmap.h"
 #include "macro.h"
 #include "memory-util.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "time-util.h"
 #include "user-util.h"
@@ -61,7 +62,7 @@
         if (!e)
                 return -EINVAL;
 
-        u = strndupa(p, e-p);
+        u = strndupa_safe(p, e - p);
         return parse_uid(u, uid);
 }
 
@@ -142,7 +143,6 @@
         for (;;) {
                 _cleanup_(vacuum_candidate_hashmap_freep) Hashmap *h = NULL;
                 VacuumCandidate *worst = NULL;
-                struct dirent *de;
                 uint64_t sum = 0;
 
                 rewinddir(d);
@@ -168,9 +168,7 @@
                         if (!S_ISREG(st.st_mode))
                                 continue;
 
-                        if (exclude_fd >= 0 &&
-                            exclude_st.st_dev == st.st_dev &&
-                            exclude_st.st_ino == st.st_ino)
+                        if (exclude_fd >= 0 && stat_inode_same(&exclude_st, &st))
                                 continue;
 
                         r = hashmap_ensure_allocated(&h, NULL);
diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c
index c6639c0..3293069 100644
--- a/src/coredump/coredump.c
+++ b/src/coredump/coredump.c
@@ -4,14 +4,10 @@
 #include <stdio.h>
 #include <sys/prctl.h>
 #include <sys/statvfs.h>
+#include <sys/auxv.h>
 #include <sys/xattr.h>
 #include <unistd.h>
 
-#if HAVE_ELFUTILS
-#include <dwarf.h>
-#include <elfutils/libdwfl.h>
-#endif
-
 #include "sd-daemon.h"
 #include "sd-journal.h"
 #include "sd-login.h"
@@ -25,35 +21,45 @@
 #include "compress.h"
 #include "conf-parser.h"
 #include "copy.h"
+#include "coredump-util.h"
 #include "coredump-vacuum.h"
 #include "dirent-util.h"
+#include "elf-util.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
 #include "io-util.h"
 #include "journal-importer.h"
+#include "journal-send.h"
 #include "log.h"
 #include "macro.h"
 #include "main-func.h"
 #include "memory-util.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "process-util.h"
 #include "signal-util.h"
 #include "socket-util.h"
 #include "special.h"
-#include "stacktrace.h"
 #include "stat-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "tmpfile-util.h"
-#include "user-record.h"
+#include "uid-alloc-range.h"
+#include "unaligned.h"
 #include "user-util.h"
 
-/* The maximum size up to which we process coredumps */
-#define PROCESS_SIZE_MAX ((uint64_t) (2LLU*1024LLU*1024LLU*1024LLU))
+/* The maximum size up to which we process coredumps. We use 1G on 32bit systems, and 32G on 64bit systems */
+#if __SIZEOF_POINTER__ == 4
+#define PROCESS_SIZE_MAX ((uint64_t) (1LLU*1024LLU*1024LLU*1024LLU))
+#elif __SIZEOF_POINTER__ == 8
+#define PROCESS_SIZE_MAX ((uint64_t) (32LLU*1024LLU*1024LLU*1024LLU))
+#else
+#error "Unexpected pointer size"
+#endif
 
 /* The maximum size up to which we leave the coredump around on disk */
 #define EXTERNAL_SIZE_MAX PROCESS_SIZE_MAX
@@ -103,24 +109,27 @@
 
         META_EXE = _META_MANDATORY_MAX,
         META_UNIT,
+        META_PROC_AUXV,
         _META_MAX
 };
 
 static const char * const meta_field_names[_META_MAX] = {
-        [META_ARGV_PID]          = "COREDUMP_PID=",
-        [META_ARGV_UID]          = "COREDUMP_UID=",
-        [META_ARGV_GID]          = "COREDUMP_GID=",
-        [META_ARGV_SIGNAL]       = "COREDUMP_SIGNAL=",
-        [META_ARGV_TIMESTAMP]    = "COREDUMP_TIMESTAMP=",
-        [META_ARGV_RLIMIT]       = "COREDUMP_RLIMIT=",
-        [META_ARGV_HOSTNAME]     = "COREDUMP_HOSTNAME=",
-        [META_COMM]              = "COREDUMP_COMM=",
-        [META_EXE]               = "COREDUMP_EXE=",
-        [META_UNIT]              = "COREDUMP_UNIT=",
+        [META_ARGV_PID]       = "COREDUMP_PID=",
+        [META_ARGV_UID]       = "COREDUMP_UID=",
+        [META_ARGV_GID]       = "COREDUMP_GID=",
+        [META_ARGV_SIGNAL]    = "COREDUMP_SIGNAL=",
+        [META_ARGV_TIMESTAMP] = "COREDUMP_TIMESTAMP=",
+        [META_ARGV_RLIMIT]    = "COREDUMP_RLIMIT=",
+        [META_ARGV_HOSTNAME]  = "COREDUMP_HOSTNAME=",
+        [META_COMM]           = "COREDUMP_COMM=",
+        [META_EXE]            = "COREDUMP_EXE=",
+        [META_UNIT]           = "COREDUMP_UNIT=",
+        [META_PROC_AUXV]      = "COREDUMP_PROC_AUXV=",
 };
 
 typedef struct Context {
         const char *meta[_META_MAX];
+        size_t meta_size[_META_MAX];
         pid_t pid;
         bool is_pid1;
         bool is_journald;
@@ -135,9 +144,9 @@
 } CoredumpStorage;
 
 static const char* const coredump_storage_table[_COREDUMP_STORAGE_MAX] = {
-        [COREDUMP_STORAGE_NONE] = "none",
+        [COREDUMP_STORAGE_NONE]     = "none",
         [COREDUMP_STORAGE_EXTERNAL] = "external",
-        [COREDUMP_STORAGE_JOURNAL] = "journal",
+        [COREDUMP_STORAGE_JOURNAL]  = "journal",
 };
 
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP(coredump_storage, CoredumpStorage);
@@ -153,13 +162,13 @@
 
 static int parse_config(void) {
         static const ConfigTableItem items[] = {
-                { "Coredump", "Storage",          config_parse_coredump_storage,  0, &arg_storage           },
-                { "Coredump", "Compress",         config_parse_bool,              0, &arg_compress          },
-                { "Coredump", "ProcessSizeMax",   config_parse_iec_uint64,        0, &arg_process_size_max  },
-                { "Coredump", "ExternalSizeMax",  config_parse_iec_uint64,        0, &arg_external_size_max },
-                { "Coredump", "JournalSizeMax",   config_parse_iec_size,          0, &arg_journal_size_max  },
-                { "Coredump", "KeepFree",         config_parse_iec_uint64,        0, &arg_keep_free         },
-                { "Coredump", "MaxUse",           config_parse_iec_uint64,        0, &arg_max_use           },
+                { "Coredump", "Storage",          config_parse_coredump_storage,     0, &arg_storage           },
+                { "Coredump", "Compress",         config_parse_bool,                 0, &arg_compress          },
+                { "Coredump", "ProcessSizeMax",   config_parse_iec_uint64,           0, &arg_process_size_max  },
+                { "Coredump", "ExternalSizeMax",  config_parse_iec_uint64_infinity,  0, &arg_external_size_max },
+                { "Coredump", "JournalSizeMax",   config_parse_iec_size,             0, &arg_journal_size_max  },
+                { "Coredump", "KeepFree",         config_parse_iec_uint64,           0, &arg_keep_free         },
+                { "Coredump", "MaxUse",           config_parse_iec_uint64,           0, &arg_max_use           },
                 {}
         };
 
@@ -182,13 +191,16 @@
         return 0;
 }
 
-static int fix_acl(int fd, uid_t uid) {
+static int fix_acl(int fd, uid_t uid, bool allow_user) {
+        assert(fd >= 0);
+        assert(uid_is_valid(uid));
 
 #if HAVE_ACL
         int r;
 
-        assert(fd >= 0);
-        assert(uid_is_valid(uid));
+        /* We don't allow users to read coredumps if the uid or capabilities were changed. */
+        if (!allow_user)
+                return 0;
 
         if (uid_is_system(uid) || uid_is_dynamic(uid) || uid == UID_NOBODY)
                 return 0;
@@ -205,15 +217,15 @@
 static int fix_xattr(int fd, const Context *context) {
 
         static const char * const xattrs[_META_MAX] = {
-                [META_ARGV_PID]          = "user.coredump.pid",
-                [META_ARGV_UID]          = "user.coredump.uid",
-                [META_ARGV_GID]          = "user.coredump.gid",
-                [META_ARGV_SIGNAL]       = "user.coredump.signal",
-                [META_ARGV_TIMESTAMP]    = "user.coredump.timestamp",
-                [META_ARGV_RLIMIT]       = "user.coredump.rlimit",
-                [META_ARGV_HOSTNAME]     = "user.coredump.hostname",
-                [META_COMM]              = "user.coredump.comm",
-                [META_EXE]               = "user.coredump.exe",
+                [META_ARGV_PID]       = "user.coredump.pid",
+                [META_ARGV_UID]       = "user.coredump.uid",
+                [META_ARGV_GID]       = "user.coredump.gid",
+                [META_ARGV_SIGNAL]    = "user.coredump.signal",
+                [META_ARGV_TIMESTAMP] = "user.coredump.timestamp",
+                [META_ARGV_RLIMIT]    = "user.coredump.rlimit",
+                [META_ARGV_HOSTNAME]  = "user.coredump.hostname",
+                [META_COMM]           = "user.coredump.comm",
+                [META_EXE]            = "user.coredump.exe",
         };
 
         int r = 0;
@@ -248,7 +260,8 @@
                 const char *filename,
                 const char *target,
                 const Context *context,
-                uid_t uid) {
+                uid_t uid,
+                bool allow_user) {
 
         int r;
 
@@ -258,13 +271,12 @@
 
         /* Ignore errors on these */
         (void) fchmod(fd, 0640);
-        (void) fix_acl(fd, uid);
+        (void) fix_acl(fd, uid, allow_user);
         (void) fix_xattr(fd, context);
 
-        if (fsync(fd) < 0)
-                return log_error_errno(errno, "Failed to sync coredump %s: %m", coredump_tmpfile_name(filename));
-
-        (void) fsync_directory_of_file(fd);
+        r = fsync_full(fd);
+        if (r < 0)
+                return log_error_errno(r, "Failed to sync coredump %s: %m", coredump_tmpfile_name(filename));
 
         r = link_tmpfile(fd, filename, target);
         if (r < 0)
@@ -329,6 +341,123 @@
         return 0;
 }
 
+#define _DEFINE_PARSE_AUXV(size, type, unaligned_read)                  \
+        static int parse_auxv##size(                                    \
+                        const void *auxv,                               \
+                        size_t size_bytes,                              \
+                        int *at_secure,                                 \
+                        uid_t *uid,                                     \
+                        uid_t *euid,                                    \
+                        gid_t *gid,                                     \
+                        gid_t *egid) {                                  \
+                                                                        \
+                assert(auxv || size_bytes == 0);                        \
+                                                                        \
+                if (size_bytes % (2 * sizeof(type)) != 0)               \
+                        return log_warning_errno(SYNTHETIC_ERRNO(EIO),  \
+                                                 "Incomplete auxv structure (%zu bytes).", \
+                                                 size_bytes);           \
+                                                                        \
+                size_t words = size_bytes / sizeof(type);               \
+                                                                        \
+                /* Note that we set output variables even on error. */  \
+                                                                        \
+                for (size_t i = 0; i + 1 < words; i += 2) {             \
+                        type key, val;                                  \
+                                                                        \
+                        key = unaligned_read((uint8_t*) auxv + i * sizeof(type)); \
+                        val = unaligned_read((uint8_t*) auxv + (i + 1) * sizeof(type)); \
+                                                                        \
+                        switch (key) {                                  \
+                        case AT_SECURE:                                 \
+                                *at_secure = val != 0;                  \
+                                break;                                  \
+                        case AT_UID:                                    \
+                                *uid = val;                             \
+                                break;                                  \
+                        case AT_EUID:                                   \
+                                *euid = val;                            \
+                                break;                                  \
+                        case AT_GID:                                    \
+                                *gid = val;                             \
+                                break;                                  \
+                        case AT_EGID:                                   \
+                                *egid = val;                            \
+                                break;                                  \
+                        case AT_NULL:                                   \
+                                if (val != 0)                           \
+                                        goto error;                     \
+                                return 0;                               \
+                        }                                               \
+                }                                                       \
+        error:                                                          \
+                return log_warning_errno(SYNTHETIC_ERRNO(ENODATA),      \
+                                         "AT_NULL terminator not found, cannot parse auxv structure."); \
+        }
+
+#define DEFINE_PARSE_AUXV(size)\
+        _DEFINE_PARSE_AUXV(size, uint##size##_t, unaligned_read_ne##size)
+
+DEFINE_PARSE_AUXV(32);
+DEFINE_PARSE_AUXV(64);
+
+static int grant_user_access(int core_fd, const Context *context) {
+        int at_secure = -1;
+        uid_t uid = UID_INVALID, euid = UID_INVALID;
+        uid_t gid = GID_INVALID, egid = GID_INVALID;
+        int r;
+
+        assert(core_fd >= 0);
+        assert(context);
+
+        if (!context->meta[META_PROC_AUXV])
+                return log_warning_errno(SYNTHETIC_ERRNO(ENODATA), "No auxv data, not adjusting permissions.");
+
+        uint8_t elf[EI_NIDENT];
+        errno = 0;
+        if (pread(core_fd, &elf, sizeof(elf), 0) != sizeof(elf))
+                return log_warning_errno(errno_or_else(EIO),
+                                         "Failed to pread from coredump fd: %s", STRERROR_OR_EOF(errno));
+
+        if (elf[EI_MAG0] != ELFMAG0 ||
+            elf[EI_MAG1] != ELFMAG1 ||
+            elf[EI_MAG2] != ELFMAG2 ||
+            elf[EI_MAG3] != ELFMAG3 ||
+            elf[EI_VERSION] != EV_CURRENT)
+                return log_info_errno(SYNTHETIC_ERRNO(EUCLEAN),
+                                      "Core file does not have ELF header, not adjusting permissions.");
+        if (!IN_SET(elf[EI_CLASS], ELFCLASS32, ELFCLASS64) ||
+            !IN_SET(elf[EI_DATA], ELFDATA2LSB, ELFDATA2MSB))
+                return log_info_errno(SYNTHETIC_ERRNO(EUCLEAN),
+                                      "Core file has strange ELF class, not adjusting permissions.");
+
+        if ((elf[EI_DATA] == ELFDATA2LSB) != (__BYTE_ORDER == __LITTLE_ENDIAN))
+                return log_info_errno(SYNTHETIC_ERRNO(EUCLEAN),
+                                      "Core file has non-native endianness, not adjusting permissions.");
+
+        if (elf[EI_CLASS] == ELFCLASS64)
+                r = parse_auxv64(context->meta[META_PROC_AUXV],
+                                 context->meta_size[META_PROC_AUXV],
+                                 &at_secure, &uid, &euid, &gid, &egid);
+        else
+                r = parse_auxv32(context->meta[META_PROC_AUXV],
+                                 context->meta_size[META_PROC_AUXV],
+                                 &at_secure, &uid, &euid, &gid, &egid);
+        if (r < 0)
+                return r;
+
+        /* We allow access if we got all the data and at_secure is not set and
+         * the uid/gid matches euid/egid. */
+        bool ret =
+                at_secure == 0 &&
+                uid != UID_INVALID && euid != UID_INVALID && uid == euid &&
+                gid != GID_INVALID && egid != GID_INVALID && gid == egid;
+        log_debug("Will %s access (uid="UID_FMT " euid="UID_FMT " gid="GID_FMT " egid="GID_FMT " at_secure=%s)",
+                  ret ? "permit" : "restrict",
+                  uid, euid, gid, egid, yes_no(at_secure));
+        return ret;
+}
+
 static int save_external_coredump(
                 const Context *context,
                 int input_fd,
@@ -341,7 +470,7 @@
 
         _cleanup_(unlink_and_freep) char *tmp = NULL;
         _cleanup_free_ char *fn = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         uint64_t rlimit, process_limit, max_size;
         bool truncated, storage_on_tmpfs;
         struct stat st;
@@ -385,7 +514,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to determine coredump file name: %m");
 
-        (void) mkdir_p_label("/var/lib/systemd/coredump", 0755);
+        (void) mkdir_parents_label(fn, 0755);
 
         fd = open_tmpfile_linkable(fn, O_RDWR|O_CLOEXEC, &tmp);
         if (fd < 0)
@@ -439,7 +568,7 @@
                 /* tmpfs might get full quickly, so check the available space too.
                  * But don't worry about errors here, failing to access the storage
                  * location will be better logged when writing to it. */
-                if (statvfs("/var/lib/systemd/coredump/", &sv) >= 0)
+                if (fstatvfs(fd, &sv) >= 0)
                         max_size = MIN((uint64_t)sv.f_frsize * (uint64_t)sv.f_bfree, max_size);
 
                 log_debug("Limiting core file size to %" PRIu64 " bytes due to cgroup memory limits.", max_size);
@@ -451,17 +580,19 @@
                                 context->meta[META_ARGV_PID], context->meta[META_COMM]);
         truncated = r == 1;
 
+        bool allow_user = grant_user_access(fd, context) > 0;
+
 #if HAVE_COMPRESSION
         if (arg_compress) {
                 _cleanup_(unlink_and_freep) char *tmp_compressed = NULL;
                 _cleanup_free_ char *fn_compressed = NULL;
-                _cleanup_close_ int fd_compressed = -1;
+                _cleanup_close_ int fd_compressed = -EBADF;
                 uint64_t uncompressed_size = 0;
 
                 if (lseek(fd, 0, SEEK_SET) == (off_t) -1)
                         return log_error_errno(errno, "Failed to seek on coredump %s: %m", fn);
 
-                fn_compressed = strjoin(fn, COMPRESSED_EXT);
+                fn_compressed = strjoin(fn, default_compression_extension());
                 if (!fn_compressed)
                         return log_oom();
 
@@ -488,7 +619,7 @@
                         uncompressed_size += partial_uncompressed_size;
                 }
 
-                r = fix_permissions(fd_compressed, tmp_compressed, fn_compressed, context, uid);
+                r = fix_permissions(fd_compressed, tmp_compressed, fn_compressed, context, uid, allow_user);
                 if (r < 0)
                         return r;
 
@@ -515,7 +646,7 @@
                            "SIZE_LIMIT=%"PRIu64, max_size,
                            "MESSAGE_ID=" SD_MESSAGE_TRUNCATED_CORE_STR);
 
-        r = fix_permissions(fd, tmp, fn, context, uid);
+        r = fix_permissions(fd, tmp, fn, context, uid, allow_user);
         if (r < 0)
                 return log_error_errno(r, "Failed to fix permissions and finalize coredump %s into %s: %m", coredump_tmpfile_name(tmp), fn);
 
@@ -581,11 +712,10 @@
  */
 static int compose_open_fds(pid_t pid, char **open_fds) {
         _cleanup_closedir_ DIR *proc_fd_dir = NULL;
-        _cleanup_close_ int proc_fdinfo_fd = -1;
+        _cleanup_close_ int proc_fdinfo_fd = -EBADF;
         _cleanup_free_ char *buffer = NULL;
         _cleanup_fclose_ FILE *stream = NULL;
         const char *fddelim = "", *path;
-        struct dirent *dent = NULL;
         size_t size = 0;
         int r;
 
@@ -605,20 +735,20 @@
         if (!stream)
                 return -ENOMEM;
 
-        FOREACH_DIRENT(dent, proc_fd_dir, return -errno) {
+        FOREACH_DIRENT(de, proc_fd_dir, return -errno) {
                 _cleanup_fclose_ FILE *fdinfo = NULL;
                 _cleanup_free_ char *fdname = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
-                r = readlinkat_malloc(dirfd(proc_fd_dir), dent->d_name, &fdname);
+                r = readlinkat_malloc(dirfd(proc_fd_dir), de->d_name, &fdname);
                 if (r < 0)
                         return r;
 
-                fprintf(stream, "%s%s:%s\n", fddelim, dent->d_name, fdname);
+                fprintf(stream, "%s%s:%s\n", fddelim, de->d_name, fdname);
                 fddelim = "\n";
 
                 /* Use the directory entry from /proc/[pid]/fd with /proc/[pid]/fdinfo */
-                fd = openat(proc_fdinfo_fd, dent->d_name, O_NOFOLLOW|O_CLOEXEC|O_RDONLY);
+                fd = openat(proc_fdinfo_fd, de->d_name, O_NOFOLLOW|O_CLOEXEC|O_RDONLY);
                 if (fd < 0)
                         continue;
 
@@ -654,7 +784,7 @@
 static int get_process_ns(pid_t pid, const char *namespace, ino_t *ns) {
         const char *p;
         struct stat stbuf;
-        _cleanup_close_ int proc_ns_dir_fd = -1;
+        _cleanup_close_ int proc_ns_dir_fd = -EBADF;
 
         p = procfs_file_alloca(pid, "ns");
 
@@ -707,10 +837,10 @@
  * Returns a negative number on errors.
  */
 static int get_process_container_parent_cmdline(pid_t pid, char** cmdline) {
-        int r = 0;
         pid_t container_pid;
         const char *proc_root_path;
         struct stat root_stat, proc_root_stat;
+        int r;
 
         /* To compare inodes of / and /proc/[pid]/root */
         if (stat("/", &root_stat) < 0)
@@ -721,7 +851,7 @@
                 return -errno;
 
         /* The process uses system root. */
-        if (proc_root_stat.st_ino == root_stat.st_ino) {
+        if (stat_inode_same(&proc_root_stat, &root_stat)) {
                 *cmdline = NULL;
                 return 0;
         }
@@ -764,12 +894,12 @@
 }
 
 static int submit_coredump(
-                Context *context,
+                const Context *context,
                 struct iovec_wrapper *iovw,
                 int input_fd) {
 
         _cleanup_(json_variant_unrefp) JsonVariant *json_metadata = NULL;
-        _cleanup_close_ int coredump_fd = -1, coredump_node_fd = -1;
+        _cleanup_close_ int coredump_fd = -EBADF, coredump_node_fd = -EBADF;
         _cleanup_free_ char *filename = NULL, *coredump_data = NULL;
         _cleanup_free_ char *stacktrace = NULL;
         char *core_message;
@@ -778,6 +908,7 @@
         bool truncated = false;
         JsonVariant *module_json;
         int r;
+
         assert(context);
         assert(iovw);
         assert(input_fd >= 0);
@@ -799,10 +930,9 @@
         r = maybe_remove_external_coredump(filename, coredump_node_fd >= 0 ? coredump_compressed_size : coredump_size);
         if (r < 0)
                 return r;
-        if (r == 0) {
+        if (r == 0)
                 (void) iovw_put_string_field(iovw, "COREDUMP_FILENAME=", filename);
-
-        } else if (arg_storage == COREDUMP_STORAGE_EXTERNAL)
+        else if (arg_storage == COREDUMP_STORAGE_EXTERNAL)
                 log_info("The core will not be stored: size %"PRIu64" is greater than %"PRIu64" (the configured maximum)",
                          coredump_node_fd >= 0 ? coredump_compressed_size : coredump_size, arg_external_size_max);
 
@@ -818,15 +948,20 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to drop privileges: %m");
 
-#if HAVE_ELFUTILS
         /* Try to get a stack trace if we can */
-        if (coredump_size > arg_process_size_max) {
+        if (coredump_size > arg_process_size_max)
                 log_debug("Not generating stack trace: core size %"PRIu64" is greater "
                           "than %"PRIu64" (the configured maximum)",
                           coredump_size, arg_process_size_max);
-        } else if (coredump_fd >= 0)
-                coredump_parse_core(coredump_fd, context->meta[META_EXE], &stacktrace, &json_metadata);
-#endif
+        else if (coredump_fd >= 0) {
+                bool skip = startswith(context->meta[META_COMM], "systemd-coredum"); /* COMM is 16 bytes usually */
+
+                (void) parse_elf_object(coredump_fd,
+                                        context->meta[META_EXE],
+                                        /* fork_disable_dump= */ skip, /* avoid loops */
+                                        &stacktrace,
+                                        &json_metadata);
+        }
 
 log:
         core_message = strjoina("Process ", context->meta[META_ARGV_PID],
@@ -837,12 +972,10 @@
 
         core_message = strjoina(core_message, stacktrace ? "\n\n" : NULL, stacktrace);
 
-        if (context->is_journald) {
-                /* We cannot log to the journal, so just print the message.
-                 * The target was set previously to something safe. */
+        if (context->is_journald)
+                /* We might not be able to log to the journal, so let's always print the message to another
+                 * log target. The target was set previously to something safe. */
                 log_dispatch(LOG_ERR, 0, core_message);
-                return 0;
-        }
 
         (void) iovw_put_string_field(iovw, "MESSAGE=", core_message);
 
@@ -861,21 +994,24 @@
                 (void) iovw_put_string_field(iovw, "COREDUMP_PACKAGE_JSON=", formatted_json);
         }
 
-        JSON_VARIANT_OBJECT_FOREACH(module_name, module_json, json_metadata) {
-                JsonVariant *package_name, *package_version;
+        /* In the unlikely scenario that context->meta[META_EXE] is not available,
+         * let's avoid guessing the module name and skip the loop. */
+        if (context->meta[META_EXE])
+                JSON_VARIANT_OBJECT_FOREACH(module_name, module_json, json_metadata) {
+                        JsonVariant *t;
 
-                /* We only add structured fields for the 'main' ELF module */
-                if (!path_equal_filename(module_name, context->meta[META_EXE]))
-                        continue;
+                        /* We only add structured fields for the 'main' ELF module, and only if we can identify it. */
+                        if (!path_equal_filename(module_name, context->meta[META_EXE]))
+                                continue;
 
-                package_name = json_variant_by_key(module_json, "name");
-                if (package_name)
-                        (void) iovw_put_string_field(iovw, "COREDUMP_PACKAGE_NAME=", json_variant_string(package_name));
+                        t = json_variant_by_key(module_json, "name");
+                        if (t)
+                                (void) iovw_put_string_field(iovw, "COREDUMP_PACKAGE_NAME=", json_variant_string(t));
 
-                package_version = json_variant_by_key(module_json, "version");
-                if (package_version)
-                        (void) iovw_put_string_field(iovw, "COREDUMP_PACKAGE_VERSION=", json_variant_string(package_version));
-        }
+                        t = json_variant_by_key(module_json, "version");
+                        if (t)
+                                (void) iovw_put_string_field(iovw, "COREDUMP_PACKAGE_VERSION=", json_variant_string(t));
+                }
 
         /* Optionally store the entire coredump in the journal */
         if (arg_storage == COREDUMP_STORAGE_JOURNAL && coredump_fd >= 0) {
@@ -895,15 +1031,35 @@
                                  coredump_size, arg_journal_size_max);
         }
 
+        /* If journald is coredumping, we have to be careful that we don't deadlock when trying to write the
+         * coredump to the journal, so we put the journal socket in nonblocking mode before trying to write
+         * the coredump to the socket. */
+
+        if (context->is_journald) {
+                r = journal_fd_nonblock(true);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to make journal socket non-blocking: %m");
+        }
+
         r = sd_journal_sendv(iovw->iovec, iovw->count);
-        if (r < 0)
+
+        if (context->is_journald) {
+                int k;
+
+                k = journal_fd_nonblock(false);
+                if (k < 0)
+                        return log_error_errno(k, "Failed to make journal socket blocking: %m");
+        }
+
+        if (r == -EAGAIN && context->is_journald)
+                log_warning_errno(r, "Failed to log journal coredump, ignoring: %m");
+        else if (r < 0)
                 return log_error_errno(r, "Failed to log coredump: %m");
 
         return 0;
 }
 
 static int save_context(Context *context, const struct iovec_wrapper *iovw) {
-        unsigned count = 0;
         const char *unit;
         int r;
 
@@ -917,17 +1073,15 @@
                 struct iovec *iovec = iovw->iovec + n;
 
                 for (size_t i = 0; i < ELEMENTSOF(meta_field_names); i++) {
-                        char *p;
-
                         /* Note that these strings are NUL terminated, because we made sure that a
                          * trailing NUL byte is in the buffer, though not included in the iov_len
                          * count (see process_socket() and gather_pid_metadata_*()) */
                         assert(((char*) iovec->iov_base)[iovec->iov_len] == 0);
 
-                        p = startswith(iovec->iov_base, meta_field_names[i]);
+                        const char *p = startswith(iovec->iov_base, meta_field_names[i]);
                         if (p) {
                                 context->meta[i] = p;
-                                count++;
+                                context->meta_size[i] = iovec->iov_len - strlen(meta_field_names[i]);
                                 break;
                         }
                 }
@@ -949,7 +1103,7 @@
 }
 
 static int process_socket(int fd) {
-        _cleanup_close_ int input_fd = -1;
+        _cleanup_close_ int input_fd = -EBADF;
         Context context = {};
         struct iovec_wrapper iovw = {};
         struct iovec iovec;
@@ -1047,12 +1201,7 @@
 }
 
 static int send_iovec(const struct iovec_wrapper *iovw, int input_fd) {
-
-        static const union sockaddr_union sa = {
-                .un.sun_family = AF_UNIX,
-                .un.sun_path = "/run/systemd/coredump",
-        };
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(iovw);
@@ -1062,8 +1211,9 @@
         if (fd < 0)
                 return log_error_errno(errno, "Failed to create coredump socket: %m");
 
-        if (connect(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0)
-                return log_error_errno(errno, "Failed to connect to coredump service: %m");
+        r = connect_unix_path(fd, AT_FDCWD, "/run/systemd/coredump");
+        if (r < 0)
+                return log_error_errno(r, "Failed to connect to coredump service: %m");
 
         for (size_t i = 0; i < iovw->count; i++) {
                 struct msghdr mh = {
@@ -1168,6 +1318,7 @@
         uid_t owner_uid;
         pid_t pid;
         char *t;
+        size_t size;
         const char *p;
         int r;
 
@@ -1185,7 +1336,7 @@
         if (r < 0)
                 return r;
 
-        /* The following are optional but we used them if present */
+        /* The following are optional, but we use them if present. */
         r = get_process_exe(pid, &t);
         if (r >= 0)
                 r = iovw_put_string_field_free(iovw, "COREDUMP_EXE=", t);
@@ -1195,7 +1346,6 @@
         if (cg_pid_get_unit(pid, &t) >= 0)
                 (void) iovw_put_string_field_free(iovw, "COREDUMP_UNIT=", t);
 
-        /* The next are optional */
         if (cg_pid_get_user_unit(pid, &t) >= 0)
                 (void) iovw_put_string_field_free(iovw, "COREDUMP_USER_UNIT=", t);
 
@@ -1233,13 +1383,26 @@
                 (void) iovw_put_string_field_free(iovw, "COREDUMP_PROC_LIMITS=", t);
 
         p = procfs_file_alloca(pid, "cgroup");
-        if (read_full_virtual_file(p, &t, NULL) >=0)
+        if (read_full_virtual_file(p, &t, NULL) >= 0)
                 (void) iovw_put_string_field_free(iovw, "COREDUMP_PROC_CGROUP=", t);
 
         p = procfs_file_alloca(pid, "mountinfo");
-        if (read_full_virtual_file(p, &t, NULL) >=0)
+        if (read_full_virtual_file(p, &t, NULL) >= 0)
                 (void) iovw_put_string_field_free(iovw, "COREDUMP_PROC_MOUNTINFO=", t);
 
+        /* We attach /proc/auxv here. ELF coredumps also contain a note for this (NT_AUXV), see elf(5). */
+        p = procfs_file_alloca(pid, "auxv");
+        if (read_full_virtual_file(p, &t, &size) >= 0) {
+                char *buf = malloc(strlen("COREDUMP_PROC_AUXV=") + size + 1);
+                if (buf) {
+                        /* Add a dummy terminator to make save_context() happy. */
+                        *((uint8_t*) mempcpy(stpcpy(buf, "COREDUMP_PROC_AUXV="), t, size)) = '\0';
+                        (void) iovw_consume(iovw, buf, size + strlen("COREDUMP_PROC_AUXV="));
+                }
+
+                free(t);
+        }
+
         if (get_process_cwd(pid, &t) >= 0)
                 (void) iovw_put_string_field_free(iovw, "COREDUMP_CWD=", t);
 
@@ -1268,6 +1431,13 @@
         struct iovec_wrapper *iovw;
         int r;
 
+        /* When we're invoked by the kernel, stdout/stderr are closed which is dangerous because the fds
+         * could get reallocated. To avoid hard to debug issues, let's instead bind stdout/stderr to
+         * /dev/null. */
+        r = rearrange_stdio(STDIN_FILENO, -EBADF, -EBADF);
+        if (r < 0)
+                return log_error_errno(r, "Failed to connect stdout/stderr to /dev/null: %m");
+
         log_debug("Processing coredump received from the kernel...");
 
         iovw = iovw_new();
diff --git a/src/coredump/coredump.conf b/src/coredump/coredump.conf
index 1f75d48..8d52d8d 100644
--- a/src/coredump/coredump.conf
+++ b/src/coredump/coredump.conf
@@ -17,8 +17,9 @@
 [Coredump]
 #Storage=external
 #Compress=yes
-#ProcessSizeMax=2G
-#ExternalSizeMax=2G
+# On 32-bit, the default is 1G instead of 32G.
+#ProcessSizeMax=32G
+#ExternalSizeMax=32G
 #JournalSizeMax=767M
 #MaxUse=
 #KeepFree=
diff --git a/src/coredump/coredumpctl.c b/src/coredump/coredumpctl.c
index 7eba833..8a4f31a 100644
--- a/src/coredump/coredumpctl.c
+++ b/src/coredump/coredumpctl.c
@@ -11,10 +11,15 @@
 #include "sd-messages.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-error.h"
+#include "bus-locator.h"
 #include "bus-util.h"
+#include "chase-symlinks.h"
 #include "compress.h"
-#include "def.h"
+#include "constants.h"
+#include "dissect-image.h"
+#include "escape.h"
 #include "fd-util.h"
 #include "format-table.h"
 #include "fs-util.h"
@@ -24,6 +29,7 @@
 #include "log.h"
 #include "macro.h"
 #include "main-func.h"
+#include "mount-util.h"
 #include "pager.h"
 #include "parse-argument.h"
 #include "parse-util.h"
@@ -38,7 +44,6 @@
 #include "terminal-util.h"
 #include "tmpfile-util.h"
 #include "user-util.h"
-#include "util.h"
 #include "verbs.h"
 
 #define SHORT_BUS_CALL_TIMEOUT_USEC (3 * USEC_PER_SEC)
@@ -48,6 +53,8 @@
 static const char *arg_debugger = NULL;
 static char **arg_debugger_args = NULL;
 static const char *arg_directory = NULL;
+static char *arg_root = NULL;
+static char *arg_image = NULL;
 static char **arg_file = NULL;
 static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 static PagerFlags arg_pager_flags = 0;
@@ -56,6 +63,7 @@
 static const char* arg_output = NULL;
 static bool arg_reverse = false;
 static bool arg_quiet = false;
+static bool arg_all = false;
 
 STATIC_DESTRUCTOR_REGISTER(arg_debugger_args, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_file, strv_freep);
@@ -90,7 +98,6 @@
 }
 
 static int add_matches(sd_journal *j, char **matches) {
-        char **match;
         int r;
 
         r = sd_journal_add_match(j, "MESSAGE_ID=" SD_MESSAGE_COREDUMP_STR, 0);
@@ -120,12 +127,16 @@
                 r = sd_journal_open_directory(&j, arg_directory, 0);
                 if (r < 0)
                         return log_error_errno(r, "Failed to open journals in directory: %s: %m", arg_directory);
+        } else if (arg_root) {
+                r = sd_journal_open_directory(&j, arg_root, SD_JOURNAL_OS_ROOT);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to open journals in root directory: %s: %m", arg_root);
         } else if (arg_file) {
                 r = sd_journal_open_files(&j, (const char**)arg_file, 0);
                 if (r < 0)
                         return log_error_errno(r, "Failed to open journal files: %m");
         } else {
-                r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
+                r = sd_journal_open(&j, arg_all ? 0 : SD_JOURNAL_LOCAL_ONLY);
                 if (r < 0)
                         return log_error_errno(r, "Failed to open journal: %m");
         }
@@ -184,6 +195,9 @@
                "     --file=PATH               Use journal file\n"
                "  -D --directory=DIR           Use journal files from directory\n\n"
                "  -q --quiet                   Do not show info messages and privilege warning\n"
+               "     --all                     Look at all journal files instead of local ones\n"
+               "     --root=PATH               Operate on an alternate filesystem root\n"
+               "     --image=PATH              Operate on disk image as filesystem root\n"
                "\nSee the %2$s for details.\n",
                program_invocation_short_name,
                link,
@@ -203,6 +217,9 @@
                 ARG_JSON,
                 ARG_DEBUGGER,
                 ARG_FILE,
+                ARG_ROOT,
+                ARG_IMAGE,
+                ARG_ALL,
         };
 
         int c, r;
@@ -223,6 +240,9 @@
                 { "until",              required_argument, NULL, 'U'           },
                 { "quiet",              no_argument,       NULL, 'q'           },
                 { "json",               required_argument, NULL, ARG_JSON      },
+                { "root",               required_argument, NULL, ARG_ROOT      },
+                { "image",              required_argument, NULL, ARG_IMAGE     },
+                { "all",                no_argument,       NULL, ARG_ALL       },
                 {}
         };
 
@@ -230,7 +250,7 @@
         assert(argv);
 
         while ((c = getopt_long(argc, argv, "hA:o:F:1D:rS:U:qn:", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
                 case 'h':
                         return verb_help(0, NULL, NULL);
 
@@ -312,6 +332,18 @@
                         arg_directory = optarg;
                         break;
 
+                case ARG_ROOT:
+                        r = parse_path_argument(optarg, false, &arg_root);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_IMAGE:
+                        r = parse_path_argument(optarg, false, &arg_image);
+                        if (r < 0)
+                                return r;
+                        break;
+
                 case 'r':
                         arg_reverse = true;
                         break;
@@ -327,11 +359,15 @@
 
                         break;
 
+                case ARG_ALL:
+                        arg_all = true;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_since != USEC_INFINITY && arg_until != USEC_INFINITY &&
@@ -339,6 +375,9 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "--since= must be before --until=.");
 
+        if ((!!arg_directory + !!arg_image + !!arg_root) > 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Please specify either --root=, --image= or -D/--directory=, the combination of these options is not supported.");
+
         return 1;
 }
 
@@ -412,7 +451,7 @@
                 const char **ret_color,
                 uint64_t *ret_size) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
         int r;
 
@@ -459,6 +498,25 @@
         *ret_size = UINT64_MAX;
 }
 
+static int resolve_filename(const char *root, char **p) {
+        char *resolved = NULL;
+        int r;
+
+        if (!*p)
+                return 0;
+
+        r = chase_symlinks(*p, root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &resolved, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to resolve \"%s%s\": %m", strempty(root), *p);
+
+        free_and_replace(*p, resolved);
+
+        /* chase_symlinks() with flag CHASE_NONEXISTENT will return 0 if the file doesn't exist and 1 if it does.
+         * Return that to the caller
+         */
+        return r;
+}
+
 static int print_list(FILE* file, sd_journal *j, Table *t) {
         _cleanup_free_ char
                 *mid = NULL, *pid = NULL, *uid = NULL, *gid = NULL,
@@ -507,9 +565,13 @@
 
         normal_coredump = streq_ptr(mid, SD_MESSAGE_COREDUMP_STR);
 
-        if (filename)
+        if (filename) {
+                r = resolve_filename(arg_root, &filename);
+                if (r < 0)
+                        return r;
+
                 analyze_coredump_file(filename, &present, &color, &size);
-        else if (coredump)
+        } else if (coredump)
                 present = "journal";
         else if (normal_coredump) {
                 present = "none";
@@ -647,15 +709,11 @@
                 usec_t u;
 
                 r = safe_atou64(timestamp, &u);
-                if (r >= 0) {
-                        char absolute[FORMAT_TIMESTAMP_MAX], relative[FORMAT_TIMESPAN_MAX];
+                if (r >= 0)
+                        fprintf(file, "     Timestamp: %s (%s)\n",
+                                FORMAT_TIMESTAMP(u), FORMAT_TIMESTAMP_RELATIVE(u));
 
-                        fprintf(file,
-                                "     Timestamp: %s (%s)\n",
-                                format_timestamp(absolute, sizeof(absolute), u),
-                                format_timestamp_relative(relative, sizeof(relative), u));
-
-                } else
+                else
                         fprintf(file, "     Timestamp: %s\n", timestamp);
         }
 
@@ -697,9 +755,12 @@
                 fprintf(file, "      Hostname: %s\n", hostname);
 
         if (filename) {
+                r = resolve_filename(arg_root, &filename);
+                if (r < 0)
+                        return r;
+
                 const char *state = NULL, *color = NULL;
                 uint64_t size = UINT64_MAX;
-                char buf[FORMAT_BYTES_MAX];
 
                 analyze_coredump_file(filename, &state, &color, &size);
 
@@ -714,9 +775,8 @@
                         ansi_normal());
 
                 if (size != UINT64_MAX)
-                        fprintf(file,
-                                "     Disk Size: %s\n",
-                                format_bytes(buf, sizeof(buf), size));
+                        fprintf(file, "  Size on Disk: %s\n", FORMAT_BYTES(size));
+
         } else if (coredump)
                 fprintf(file, "       Storage: journal\n");
         else
@@ -731,9 +791,10 @@
                 _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
 
                 r = json_parse(pkgmeta_json, 0, &v, NULL, NULL);
-                if (r < 0)
-                        log_warning_errno(r, "json_parse on %s failed, ignoring: %m", pkgmeta_json);
-                else {
+                if (r < 0) {
+                        _cleanup_free_ char *esc = cescape(pkgmeta_json);
+                        log_warning_errno(r, "json_parse on \"%s\" failed, ignoring: %m", strnull(esc));
+                } else {
                         const char *module_name;
                         JsonVariant *module_json;
 
@@ -820,9 +881,9 @@
                 (void) table_set_align_percent(t, TABLE_HEADER_CELL(3), 100);
                 (void) table_set_align_percent(t, TABLE_HEADER_CELL(7), 100);
 
-                (void) table_set_empty_string(t, "-");
+                table_set_ersatz_string(t, TABLE_ERSATZ_DASH);
         } else
-                (void) pager_open(arg_pager_flags);
+                pager_open(arg_pager_flags);
 
         /* "info" without pattern implies "-1" */
         if ((arg_rows_max == 1 && arg_reverse) || (verb_is_info && argc == 1)) {
@@ -904,7 +965,7 @@
         _cleanup_free_ char *filename = NULL;
         size_t len;
         int r, fd;
-        _cleanup_close_ int fdt = -1;
+        _cleanup_close_ int fdt = -EBADF;
         char *temp = NULL;
 
         assert(!(file && path));         /* At most one can be specified */
@@ -913,13 +974,18 @@
         /* Look for a coredump on disk first. */
         r = sd_journal_get_data(j, "COREDUMP_FILENAME", (const void**) &data, &len);
         if (r == 0) {
+                _cleanup_free_ char *resolved = NULL;
+
                 r = retrieve(data, len, "COREDUMP_FILENAME", &filename);
                 if (r < 0)
                         return r;
                 assert(r > 0);
 
-                if (access(filename, R_OK) < 0)
-                        return log_error_errno(errno, "File \"%s\" is not readable: %m", filename);
+                r = chase_symlinks_and_access(filename, arg_root, CHASE_PREFIX_ROOT, F_OK, &resolved, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Cannot access \"%s%s\": %m", strempty(arg_root), filename);
+
+                free_and_replace(filename, resolved);
 
                 if (path && !ENDSWITH_SET(filename, ".xz", ".lz4", ".zst")) {
                         *path = TAKE_PTR(filename);
@@ -981,7 +1047,7 @@
 
         if (filename) {
 #if HAVE_COMPRESSION
-                _cleanup_close_ int fdf = -1;
+                _cleanup_close_ int fdf = -EBADF;
 
                 fdf = open(filename, O_RDONLY | O_CLOEXEC);
                 if (fdf < 0) {
@@ -1140,6 +1206,10 @@
                 return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
                                        "Binary is not an absolute path.");
 
+        r = resolve_filename(arg_root, &exe);
+        if (r < 0)
+                return r;
+
         r = save_core(j, NULL, &path, &unlink_path);
         if (r < 0)
                 return r;
@@ -1148,6 +1218,24 @@
         if (r < 0)
                 return log_oom();
 
+        if (arg_root) {
+                if (streq(arg_debugger, "gdb")) {
+                        const char *sysroot_cmd;
+                        sysroot_cmd = strjoina("set sysroot ", arg_root);
+
+                        r = strv_extend_strv(&debugger_call, STRV_MAKE("-iex", sysroot_cmd), false);
+                        if (r < 0)
+                                return log_oom();
+                } else if (streq(arg_debugger, "lldb")) {
+                        const char *sysroot_cmd;
+                        sysroot_cmd = strjoina("platform select --sysroot ", arg_root, " host");
+
+                        r = strv_extend_strv(&debugger_call, STRV_MAKE("-O", sysroot_cmd), false);
+                        if (r < 0)
+                                return log_oom();
+                }
+        }
+
         /* Don't interfere with gdb and its handling of SIGINT. */
         (void) ignore_signals(SIGINT);
 
@@ -1195,13 +1283,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to acquire bus: %m");
 
-        r = sd_bus_message_new_method_call(
-                        bus,
-                        &m,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        "org.freedesktop.systemd1.Manager",
-                        "ListUnitsByPatterns");
+        r = bus_message_new_method_call(bus, &m, bus_systemd_mgr, "ListUnitsByPatterns");
         if (r < 0)
                 return bus_log_create_error(r);
 
@@ -1256,6 +1338,8 @@
 }
 
 static int run(int argc, char *argv[]) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
         int r, units_active;
 
         setlocale(LC_ALL, "");
@@ -1272,6 +1356,25 @@
 
         units_active = check_units_active(); /* error is treated the same as 0 */
 
+        if (arg_image) {
+                assert(!arg_root);
+
+                r = mount_image_privately_interactively(
+                                arg_image,
+                                DISSECT_IMAGE_GENERIC_ROOT |
+                                DISSECT_IMAGE_REQUIRE_ROOT |
+                                DISSECT_IMAGE_RELAX_VAR_CHECK |
+                                DISSECT_IMAGE_VALIDATE_OS,
+                                &mounted_dir,
+                                &loop_device);
+                if (r < 0)
+                        return r;
+
+                arg_root = strdup(mounted_dir);
+                if (!arg_root)
+                        return log_oom();
+        }
+
         r = coredumpctl_main(argc, argv);
 
         if (units_active > 0)
diff --git a/src/coredump/meson.build b/src/coredump/meson.build
index 5607a78..9398a51 100644
--- a/src/coredump/meson.build
+++ b/src/coredump/meson.build
@@ -1,16 +1,9 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_coredump_sources = files('''
-        coredump.c
-        coredump-vacuum.c
-        coredump-vacuum.h
-'''.split())
-
-if conf.get('HAVE_ELFUTILS') == 1
-        systemd_coredump_sources += files(
-                'stacktrace.c',
-                'stacktrace.h')
-endif
+systemd_coredump_sources = files(
+        'coredump.c',
+        'coredump-vacuum.c',
+)
 
 coredumpctl_sources = files('coredumpctl.c')
 
@@ -20,8 +13,7 @@
 endif
 
 tests += [
-        [['src/coredump/test-coredump-vacuum.c',
-          'src/coredump/coredump-vacuum.c',
-          'src/coredump/coredump-vacuum.h'],
+        [files('test-coredump-vacuum.c',
+               'coredump-vacuum.c'),
          [], [], [], '', 'manual'],
 ]
diff --git a/src/coredump/stacktrace.c b/src/coredump/stacktrace.c
deleted file mode 100644
index f855a37..0000000
--- a/src/coredump/stacktrace.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <dwarf.h>
-#include <elfutils/libdwelf.h>
-#include <elfutils/libdwfl.h>
-#include <libelf.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "alloc-util.h"
-#include "fileio.h"
-#include "fd-util.h"
-#include "format-util.h"
-#include "hexdecoct.h"
-#include "macro.h"
-#include "stacktrace.h"
-#include "string-util.h"
-#include "util.h"
-
-#define FRAMES_MAX 64
-#define THREADS_MAX 64
-#define ELF_PACKAGE_METADATA_ID 0xcafe1a7e
-
-struct stack_context {
-        FILE *f;
-        Dwfl *dwfl;
-        Elf *elf;
-        unsigned n_thread;
-        unsigned n_frame;
-        JsonVariant **package_metadata;
-        Set **modules;
-};
-
-static int frame_callback(Dwfl_Frame *frame, void *userdata) {
-        struct stack_context *c = userdata;
-        Dwarf_Addr pc, pc_adjusted, bias = 0;
-        _cleanup_free_ Dwarf_Die *scopes = NULL;
-        const char *fname = NULL, *symbol = NULL;
-        Dwfl_Module *module;
-        bool is_activation;
-        uint64_t module_offset = 0;
-
-        assert(frame);
-        assert(c);
-
-        if (c->n_frame >= FRAMES_MAX)
-                return DWARF_CB_ABORT;
-
-        if (!dwfl_frame_pc(frame, &pc, &is_activation))
-                return DWARF_CB_ABORT;
-
-        pc_adjusted = pc - (is_activation ? 0 : 1);
-
-        module = dwfl_addrmodule(c->dwfl, pc_adjusted);
-        if (module) {
-                Dwarf_Die *s, *cudie;
-                int n;
-                Dwarf_Addr start;
-
-                cudie = dwfl_module_addrdie(module, pc_adjusted, &bias);
-                if (cudie) {
-                        n = dwarf_getscopes(cudie, pc_adjusted - bias, &scopes);
-                        for (s = scopes; s < scopes + n; s++) {
-                                if (IN_SET(dwarf_tag(s), DW_TAG_subprogram, DW_TAG_inlined_subroutine, DW_TAG_entry_point)) {
-                                        Dwarf_Attribute *a, space;
-
-                                        a = dwarf_attr_integrate(s, DW_AT_MIPS_linkage_name, &space);
-                                        if (!a)
-                                                a = dwarf_attr_integrate(s, DW_AT_linkage_name, &space);
-                                        if (a)
-                                                symbol = dwarf_formstring(a);
-                                        if (!symbol)
-                                                symbol = dwarf_diename(s);
-
-                                        if (symbol)
-                                                break;
-                                }
-                        }
-                }
-
-                if (!symbol)
-                        symbol = dwfl_module_addrname(module, pc_adjusted);
-
-                fname = dwfl_module_info(module, NULL, &start, NULL, NULL, NULL, NULL, NULL);
-                module_offset = pc - start;
-        }
-
-        fprintf(c->f, "#%-2u 0x%016" PRIx64 " %s (%s + 0x%" PRIx64 ")\n", c->n_frame, (uint64_t) pc, strna(symbol), strna(fname), module_offset);
-        c->n_frame++;
-
-        return DWARF_CB_OK;
-}
-
-static int thread_callback(Dwfl_Thread *thread, void *userdata) {
-        struct stack_context *c = userdata;
-        pid_t tid;
-
-        assert(thread);
-        assert(c);
-
-        if (c->n_thread >= THREADS_MAX)
-                return DWARF_CB_ABORT;
-
-        if (c->n_thread != 0)
-                fputc('\n', c->f);
-
-        c->n_frame = 0;
-
-        tid = dwfl_thread_tid(thread);
-        fprintf(c->f, "Stack trace of thread " PID_FMT ":\n", tid);
-
-        if (dwfl_thread_getframes(thread, frame_callback, c) < 0)
-                return DWARF_CB_ABORT;
-
-        c->n_thread++;
-
-        return DWARF_CB_OK;
-}
-
-static int parse_package_metadata(const char *name, JsonVariant *id_json, Elf *elf, struct stack_context *c) {
-        size_t n_program_headers;
-        int r;
-
-        assert(name);
-        assert(elf);
-        assert(c);
-
-        /* When iterating over PT_LOAD we will visit modules more than once */
-        if (set_contains(*c->modules, name))
-                return DWARF_CB_OK;
-
-        r = elf_getphdrnum(elf, &n_program_headers);
-        if (r < 0) /* Not the handle we are looking for - that's ok, skip it */
-                return DWARF_CB_OK;
-
-        /* Iterate over all program headers in that ELF object. These will have been copied by
-         * the kernel verbatim when the core file is generated. */
-        for (size_t i = 0; i < n_program_headers; ++i) {
-                size_t note_offset = 0, name_offset, desc_offset;
-                GElf_Phdr mem, *program_header;
-                GElf_Nhdr note_header;
-                Elf_Data *data;
-
-                /* Package metadata is in PT_NOTE headers. */
-                program_header = gelf_getphdr(elf, i, &mem);
-                if (!program_header || program_header->p_type != PT_NOTE)
-                        continue;
-
-                /* Fortunately there is an iterator we can use to walk over the
-                 * elements of a PT_NOTE program header. We are interested in the
-                 * note with type. */
-                data = elf_getdata_rawchunk(elf,
-                                            program_header->p_offset,
-                                            program_header->p_filesz,
-                                            ELF_T_NHDR);
-                if (!data)
-                        continue;
-
-                while (note_offset < data->d_size &&
-                       (note_offset = gelf_getnote(data, note_offset, &note_header, &name_offset, &desc_offset)) > 0) {
-                        const char *note_name = (const char *)data->d_buf + name_offset;
-                        const char *payload = (const char *)data->d_buf + desc_offset;
-
-                        if (note_header.n_namesz == 0 || note_header.n_descsz == 0)
-                                continue;
-
-                        /* Package metadata might have different owners, but the
-                         * magic ID is always the same. */
-                        if (note_header.n_type == ELF_PACKAGE_METADATA_ID) {
-                                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
-
-                                r = json_parse(payload, 0, &v, NULL, NULL);
-                                if (r < 0) {
-                                        log_error_errno(r, "json_parse on %s failed: %m", payload);
-                                        return DWARF_CB_ABORT;
-                                }
-
-                                /* First pretty-print to the buffer, so that the metadata goes as
-                                 * plaintext in the journal. */
-                                fprintf(c->f, "Metadata for module %s owned by %s found: ",
-                                        name, note_name);
-                                json_variant_dump(v, JSON_FORMAT_NEWLINE|JSON_FORMAT_PRETTY, c->f, NULL);
-                                fputc('\n', c->f);
-
-                                /* Secondly, if we have a build-id, merge it in the same JSON object
-                                 * so that it appears all nicely together in the logs/metadata. */
-                                if (id_json) {
-                                        r = json_variant_merge(&v, id_json);
-                                        if (r < 0) {
-                                                log_error_errno(r, "json_variant_merge of package meta with buildid failed: %m");
-                                                return DWARF_CB_ABORT;
-                                        }
-                                }
-
-                                /* Then we build a new object using the module name as the key, and merge it
-                                 * with the previous parses, so that in the end it all fits together in a single
-                                 * JSON blob. */
-                                r = json_build(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR(name, JSON_BUILD_VARIANT(v))));
-                                if (r < 0) {
-                                        log_error_errno(r, "Failed to build JSON object: %m");
-                                        return DWARF_CB_ABORT;
-                                }
-                                r = json_variant_merge(c->package_metadata, w);
-                                if (r < 0) {
-                                        log_error_errno(r, "json_variant_merge of package meta with buildid failed: %m");
-                                        return DWARF_CB_ABORT;
-                                }
-
-                                /* Finally stash the name, so we avoid double visits. */
-                                r = set_put_strdup(c->modules, name);
-                                if (r < 0) {
-                                        log_error_errno(r, "set_put_strdup failed: %m");
-                                        return DWARF_CB_ABORT;
-                                }
-
-                                return DWARF_CB_OK;
-                        }
-                }
-        }
-
-        /* Didn't find package metadata for this module - that's ok, just go to the next. */
-        return DWARF_CB_OK;
-}
-
-static int module_callback(Dwfl_Module *mod, void **userdata, const char *name, Dwarf_Addr start, void *arg) {
-        _cleanup_(json_variant_unrefp) JsonVariant *id_json = NULL;
-        struct stack_context *c = arg;
-        size_t n_program_headers;
-        GElf_Addr id_vaddr, bias;
-        const unsigned char *id;
-        int id_len, r;
-        Elf *elf;
-
-        assert(mod);
-        assert(c);
-
-        if (!name)
-                name = "(unnamed)"; /* For logging purposes */
-
-        /* We are iterating on each "module", which is what dwfl calls ELF objects contained in the
-         * core file, and extracting the build-id first and then the package metadata.
-         * We proceed in a best-effort fashion - not all ELF objects might contain both or either.
-         * The build-id is easy, as libdwfl parses it during the dwfl_core_file_report() call and
-         * stores it separately in an internal library struct. */
-        id_len = dwfl_module_build_id(mod, &id, &id_vaddr);
-        if (id_len <= 0)
-                /* If we don't find a build-id, note it in the journal message, and try
-                 * anyway to find the package metadata. It's unlikely to have the latter
-                 * without the former, but there's no hard rule. */
-                fprintf(c->f, "Found module %s without build-id.\n", name);
-        else {
-                JsonVariant *build_id;
-
-                /* We will later parse package metadata json and pass it to our caller. Prepare the
-                * build-id in json format too, so that it can be appended and parsed cleanly. It
-                * will then be added as metadata to the journal message with the stack trace. */
-                r = json_build(&id_json, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("buildId", JSON_BUILD_HEX(id, id_len))));
-                if (r < 0) {
-                        log_error_errno(r, "json_build on build-id failed: %m");
-                        return DWARF_CB_ABORT;
-                }
-
-                build_id = json_variant_by_key(id_json, "buildId");
-                assert_se(build_id);
-                fprintf(c->f, "Found module %s with build-id: %s\n", name, json_variant_string(build_id));
-        }
-
-        /* The .note.package metadata is more difficult. From the module, we need to get a reference
-         * to the ELF object first. We might be lucky and just get it from elfutils. */
-        elf = dwfl_module_getelf(mod, &bias);
-        if (elf)
-                return parse_package_metadata(name, id_json, elf, c);
-
-        /* We did not get the ELF object. That is likely because we didn't get direct
-         * access to the executable, and the version of elfutils does not yet support
-         * parsing it out of the core file directly.
-         * So fallback to manual extraction - get the PT_LOAD section from the core,
-         * and if it's the right one we can interpret it as an Elf object, and parse
-         * its notes manually. */
-
-        r = elf_getphdrnum(c->elf, &n_program_headers);
-        if (r < 0) {
-                log_warning("Could not parse number of program headers from core file: %s",
-                            elf_errmsg(-1)); /* -1 retrieves the most recent error */
-                return DWARF_CB_OK;
-        }
-
-        for (size_t i = 0; i < n_program_headers; ++i) {
-                GElf_Phdr mem, *program_header;
-                Elf_Data *data;
-
-                /* The core file stores the ELF files in the PT_LOAD segment. */
-                program_header = gelf_getphdr(c->elf, i, &mem);
-                if (!program_header || program_header->p_type != PT_LOAD)
-                        continue;
-
-                /* Now get a usable Elf reference, and parse the notes from it. */
-                data = elf_getdata_rawchunk(c->elf,
-                                            program_header->p_offset,
-                                            program_header->p_filesz,
-                                            ELF_T_NHDR);
-                if (!data)
-                        continue;
-
-                Elf *memelf = elf_memory(data->d_buf, data->d_size);
-                if (!memelf)
-                        continue;
-                r = parse_package_metadata(name, id_json, memelf, c);
-                if (r != DWARF_CB_OK)
-                        return r;
-        }
-
-        return DWARF_CB_OK;
-}
-
-static int parse_core(int fd, const char *executable, char **ret, JsonVariant **ret_package_metadata) {
-
-        static const Dwfl_Callbacks callbacks = {
-                .find_elf = dwfl_build_id_find_elf,
-                .section_address = dwfl_offline_section_address,
-                .find_debuginfo = dwfl_standard_find_debuginfo,
-        };
-
-        _cleanup_(json_variant_unrefp) JsonVariant *package_metadata = NULL;
-        _cleanup_(set_freep) Set *modules = NULL;
-        struct stack_context c = {
-                .package_metadata = &package_metadata,
-                .modules = &modules,
-        };
-        char *buf = NULL;
-        size_t sz = 0;
-        int r;
-
-        assert(fd >= 0);
-        assert(ret);
-
-        if (lseek(fd, 0, SEEK_SET) == (off_t) -1)
-                return -errno;
-
-        c.f = open_memstream_unlocked(&buf, &sz);
-        if (!c.f)
-                return -ENOMEM;
-
-        elf_version(EV_CURRENT);
-
-        c.elf = elf_begin(fd, ELF_C_READ_MMAP, NULL);
-        if (!c.elf) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        c.dwfl = dwfl_begin(&callbacks);
-        if (!c.dwfl) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        if (dwfl_core_file_report(c.dwfl, c.elf, executable) < 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        if (dwfl_report_end(c.dwfl, NULL, NULL) != 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        if (dwfl_getmodules(c.dwfl, &module_callback, &c, 0) < 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        if (dwfl_core_file_attach(c.dwfl, c.elf) < 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        if (dwfl_getthreads(c.dwfl, thread_callback, &c) < 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        c.f = safe_fclose(c.f);
-
-        *ret = TAKE_PTR(buf);
-        if (ret_package_metadata)
-                *ret_package_metadata = TAKE_PTR(package_metadata);
-
-        r = 0;
-
-finish:
-        if (c.dwfl)
-                dwfl_end(c.dwfl);
-
-        if (c.elf)
-                elf_end(c.elf);
-
-        safe_fclose(c.f);
-
-        free(buf);
-
-        return r;
-}
-
-void coredump_parse_core(int fd, const char *executable, char **ret, JsonVariant **ret_package_metadata) {
-        int r;
-
-        r = parse_core(fd, executable, ret, ret_package_metadata);
-        if (r == -EINVAL)
-                log_warning("Failed to generate stack trace: %s", dwfl_errmsg(dwfl_errno()));
-        else if (r < 0)
-                log_warning_errno(r, "Failed to generate stack trace: %m");
-}
diff --git a/src/coredump/stacktrace.h b/src/coredump/stacktrace.h
deleted file mode 100644
index 5039b93..0000000
--- a/src/coredump/stacktrace.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include "json.h"
-
-void coredump_parse_core(int fd, const char *executable, char **ret, JsonVariant **ret_package_metadata);
diff --git a/src/creds/creds.c b/src/creds/creds.c
new file mode 100644
index 0000000..3eb94cd
--- /dev/null
+++ b/src/creds/creds.c
@@ -0,0 +1,965 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <getopt.h>
+#include <unistd.h>
+
+#include "build.h"
+#include "creds-util.h"
+#include "dirent-util.h"
+#include "escape.h"
+#include "fileio.h"
+#include "format-table.h"
+#include "hexdecoct.h"
+#include "io-util.h"
+#include "json.h"
+#include "main-func.h"
+#include "memory-util.h"
+#include "missing_magic.h"
+#include "pager.h"
+#include "parse-argument.h"
+#include "pretty-print.h"
+#include "process-util.h"
+#include "stat-util.h"
+#include "string-table.h"
+#include "terminal-util.h"
+#include "tpm-pcr.h"
+#include "tpm2-util.h"
+#include "verbs.h"
+
+typedef enum TranscodeMode {
+        TRANSCODE_OFF,
+        TRANSCODE_BASE64,
+        TRANSCODE_UNBASE64,
+        TRANSCODE_HEX,
+        TRANSCODE_UNHEX,
+        _TRANSCODE_MAX,
+        _TRANSCODE_INVALID = -EINVAL,
+} TranscodeMode;
+
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
+static PagerFlags arg_pager_flags = 0;
+static bool arg_legend = true;
+static bool arg_system = false;
+static TranscodeMode arg_transcode = TRANSCODE_OFF;
+static int arg_newline = -1;
+static sd_id128_t arg_with_key = _CRED_AUTO;
+static const char *arg_tpm2_device = NULL;
+static uint32_t arg_tpm2_pcr_mask = UINT32_MAX;
+static char *arg_tpm2_public_key = NULL;
+static uint32_t arg_tpm2_public_key_pcr_mask = UINT32_MAX;
+static char *arg_tpm2_signature = NULL;
+static const char *arg_name = NULL;
+static bool arg_name_any = false;
+static usec_t arg_timestamp = USEC_INFINITY;
+static usec_t arg_not_after = USEC_INFINITY;
+static bool arg_pretty = false;
+static bool arg_quiet = false;
+
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_public_key, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_signature, freep);
+
+static const char* transcode_mode_table[_TRANSCODE_MAX] = {
+        [TRANSCODE_OFF] = "off",
+        [TRANSCODE_BASE64] = "base64",
+        [TRANSCODE_UNBASE64] = "unbase64",
+        [TRANSCODE_HEX] = "hex",
+        [TRANSCODE_UNHEX] = "unhex",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(transcode_mode, TranscodeMode);
+
+static int open_credential_directory(
+                bool encrypted,
+                DIR **ret_dir,
+                const char **ret_prefix) {
+
+        const char *p;
+        DIR *d;
+        int r;
+
+        assert(ret_dir);
+
+        if (arg_system)
+                /* PID 1 ensures that system credentials are always accessible under the same fixed path. It
+                 * will create symlinks if necessary to guarantee that. */
+                p = encrypted ?
+                        ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY :
+                        SYSTEM_CREDENTIALS_DIRECTORY;
+        else {
+                /* Otherwise take the dirs from the env vars we got passed */
+                r = (encrypted ? get_encrypted_credentials_dir : get_credentials_dir)(&p);
+                if (r == -ENXIO) /* No environment variable? */
+                        goto not_found;
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get credentials directory: %m");
+        }
+
+        d = opendir(p);
+        if (!d) {
+                /* No such dir? Then no creds where passed. (We conditionalize this on arg_system, since for
+                 * the per-service case a non-existing path would indicate an issue since the env var would
+                 * be set incorrectly in that case.) */
+                if (arg_system && errno == ENOENT)
+                        goto not_found;
+
+                return log_error_errno(errno, "Failed to open credentials directory '%s': %m", p);
+        }
+
+        *ret_dir = d;
+
+        if (ret_prefix)
+                *ret_prefix = p;
+
+        return 1;
+
+not_found:
+        *ret_dir = NULL;
+
+        if (ret_prefix)
+                *ret_prefix = NULL;
+
+        return 0;
+}
+
+static int add_credentials_to_table(Table *t, bool encrypted) {
+        _cleanup_(closedirp) DIR *d = NULL;
+        const char *prefix;
+        int r;
+
+        assert(t);
+
+        r = open_credential_directory(encrypted, &d, &prefix);
+        if (r < 0)
+                return r;
+        if (!d)
+                return 0; /* No creds dir set */
+
+        for (;;) {
+                _cleanup_free_ char *j = NULL;
+                const char *secure, *secure_color = NULL;
+                _cleanup_close_ int fd = -EBADF;
+                struct dirent *de;
+                struct stat st;
+
+                errno = 0;
+                de = readdir_no_dot(d);
+                if (!de) {
+                        if (errno == 0)
+                                break;
+
+                        return log_error_errno(errno, "Failed to read credentials directory: %m");
+                }
+
+                if (!IN_SET(de->d_type, DT_REG, DT_UNKNOWN))
+                        continue;
+
+                if (!credential_name_valid(de->d_name))
+                        continue;
+
+                fd = openat(dirfd(d), de->d_name, O_PATH|O_CLOEXEC|O_NOFOLLOW);
+                if (fd < 0) {
+                        if (errno == ENOENT) /* Vanished by now? */
+                                continue;
+
+                        return log_error_errno(errno, "Failed to open credential '%s': %m", de->d_name);
+                }
+
+                if (fstat(fd, &st) < 0)
+                        return log_error_errno(errno, "Failed to stat credential '%s': %m", de->d_name);
+
+                if (!S_ISREG(st.st_mode))
+                        continue;
+
+                if (encrypted) {
+                        secure = "encrypted";
+                        secure_color = ansi_highlight_green();
+                } else if ((st.st_mode & 0377) != 0) {
+                        secure = "insecure"; /* Anything that is accessible more than read-only to its owner is insecure */
+                        secure_color = ansi_highlight_red();
+                } else {
+                        r = fd_is_fs_type(fd, RAMFS_MAGIC);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to determine backing file system of '%s': %m", de->d_name);
+
+                        secure = r ? "secure" : "weak"; /* ramfs is not swappable, hence "secure", everything else is "weak" */
+                        secure_color = r ? ansi_highlight_green() : ansi_highlight_yellow4();
+                }
+
+                j = path_join(prefix, de->d_name);
+                if (!j)
+                        return log_oom();
+
+                r = table_add_many(
+                                t,
+                                TABLE_STRING, de->d_name,
+                                TABLE_STRING, secure,
+                                TABLE_SET_COLOR, secure_color,
+                                TABLE_SIZE, (uint64_t) st.st_size,
+                                TABLE_STRING, j);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        return 1; /* Creds dir set */
+}
+
+static int verb_list(int argc, char **argv, void *userdata) {
+        _cleanup_(table_unrefp) Table *t = NULL;
+        int r, q;
+
+        t = table_new("name", "secure", "size", "path");
+        if (!t)
+                return log_oom();
+
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 2), 100);
+
+        r = add_credentials_to_table(t, /* encrypted= */ true);
+        if (r < 0)
+                return r;
+
+        q = add_credentials_to_table(t, /* encrypted= */ false);
+        if (q < 0)
+                return q;
+
+        if (r == 0 && q == 0) {
+                if (arg_system)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENXIO), "No credentials passed to system.");
+
+                return log_error_errno(SYNTHETIC_ERRNO(ENXIO), "No credentials passed. (i.e. $CREDENTIALS_DIRECTORY not set.)");
+        }
+
+        if ((arg_json_format_flags & JSON_FORMAT_OFF) && table_get_rows(t) <= 1) {
+                log_info("No credentials");
+                return 0;
+        }
+
+        return table_print_with_pager(t, arg_json_format_flags, arg_pager_flags, arg_legend);
+}
+
+static int transcode(
+                const void *input,
+                size_t input_size,
+                void **ret_output,
+                size_t *ret_output_size) {
+
+        int r;
+
+        assert(input);
+        assert(input_size);
+        assert(ret_output);
+        assert(ret_output_size);
+
+        switch (arg_transcode) {
+
+        case TRANSCODE_BASE64: {
+                char *buf;
+                ssize_t l;
+
+                l = base64mem_full(input, input_size, 79, &buf);
+                if (l < 0)
+                        return l;
+
+                *ret_output = buf;
+                *ret_output_size = l;
+                return 0;
+        }
+
+        case TRANSCODE_UNBASE64:
+                r = unbase64mem_full(input, input_size, true, ret_output, ret_output_size);
+                if (r == -EPIPE) /* Uneven number of chars */
+                        return -EINVAL;
+
+                return r;
+
+        case TRANSCODE_HEX: {
+                char *buf;
+
+                buf = hexmem(input, input_size);
+                if (!buf)
+                        return -ENOMEM;
+
+                *ret_output = buf;
+                *ret_output_size = input_size * 2;
+                return 0;
+        }
+
+        case TRANSCODE_UNHEX:
+                r = unhexmem_full(input, input_size, true, ret_output, ret_output_size);
+                if (r == -EPIPE) /* Uneven number of chars */
+                        return -EINVAL;
+
+                return r;
+
+        default:
+                assert_not_reached();
+        }
+}
+
+static int print_newline(FILE *f, const char *data, size_t l) {
+        int fd;
+
+        assert(f);
+        assert(data || l == 0);
+
+        /* If turned off explicitly, don't print newline */
+        if (arg_newline == 0)
+                return 0;
+
+        /* If data already has newline, don't print either */
+        if (l > 0 && data[l-1] == '\n')
+                return 0;
+
+        /* Don't bother unless this is a tty */
+        fd = fileno(f);
+        if (fd >= 0 && isatty(fd) <= 0)
+                return 0;
+
+        if (fputc('\n', f) != '\n')
+                return log_error_errno(errno, "Failed to write trailing newline: %m");
+
+        return 1;
+}
+
+static int write_blob(FILE *f, const void *data, size_t size) {
+        _cleanup_(erase_and_freep) void *transcoded = NULL;
+        int r;
+
+        if (arg_transcode == TRANSCODE_OFF &&
+            arg_json_format_flags != JSON_FORMAT_OFF) {
+                _cleanup_(erase_and_freep) char *suffixed = NULL;
+                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+                r = make_cstring(data, size, MAKE_CSTRING_REFUSE_TRAILING_NUL, &suffixed);
+                if (r < 0)
+                        return log_error_errno(r, "Unable to convert binary string to C string: %m");
+
+                r = json_parse(suffixed, JSON_PARSE_SENSITIVE, &v, NULL, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse JSON: %m");
+
+                json_variant_dump(v, arg_json_format_flags, f, NULL);
+                return 0;
+        }
+
+        if (arg_transcode != TRANSCODE_OFF) {
+                r = transcode(data, size, &transcoded, &size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to transcode data: %m");
+
+                data = transcoded;
+        }
+
+        if (fwrite(data, 1, size, f) != size)
+                return log_error_errno(errno, "Failed to write credential data: %m");
+
+        r = print_newline(f, data, size);
+        if (r < 0)
+                return r;
+
+        if (fflush(f) != 0)
+                return log_error_errno(errno, "Failed to flush output: %m");
+
+        return 0;
+}
+
+static int verb_cat(int argc, char **argv, void *userdata) {
+        usec_t timestamp;
+        int r, ret = 0;
+
+        timestamp = arg_timestamp != USEC_INFINITY ? arg_timestamp : now(CLOCK_REALTIME);
+
+        STRV_FOREACH(cn, strv_skip(argv, 1)) {
+                _cleanup_(erase_and_freep) void *data = NULL;
+                size_t size = 0;
+                int encrypted;
+
+                if (!credential_name_valid(*cn)) {
+                        log_error("Credential name '%s' is not valid.", *cn);
+                        if (ret >= 0)
+                                ret = -EINVAL;
+                        continue;
+                }
+
+                /* Look both in regular and in encrypted credentials */
+                for (encrypted = 0; encrypted < 2; encrypted++) {
+                        _cleanup_(closedirp) DIR *d = NULL;
+
+                        r = open_credential_directory(encrypted, &d, NULL);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to open credentials directory: %m");
+                        if (!d) /* Not set */
+                                continue;
+
+                        r = read_full_file_full(
+                                        dirfd(d), *cn,
+                                        UINT64_MAX, SIZE_MAX,
+                                        READ_FULL_FILE_SECURE|READ_FULL_FILE_WARN_WORLD_READABLE,
+                                        NULL,
+                                        (char**) &data, &size);
+                        if (r == -ENOENT) /* Not found */
+                                continue;
+                        if (r >= 0) /* Found */
+                                break;
+
+                        log_error_errno(r, "Failed to read credential '%s': %m", *cn);
+                        if (ret >= 0)
+                                ret = r;
+                }
+
+                if (encrypted >= 2) { /* Found nowhere */
+                        log_error_errno(SYNTHETIC_ERRNO(ENOENT), "Credential '%s' not set.", *cn);
+                        if (ret >= 0)
+                                ret = -ENOENT;
+
+                        continue;
+                }
+
+                if (encrypted) {
+                        _cleanup_(erase_and_freep) void *plaintext = NULL;
+                        size_t plaintext_size;
+
+                        r = decrypt_credential_and_warn(
+                                        *cn,
+                                        timestamp,
+                                        arg_tpm2_device,
+                                        arg_tpm2_signature,
+                                        data, size,
+                                        &plaintext, &plaintext_size);
+                        if (r < 0)
+                                return r;
+
+                        erase_and_free(data);
+                        data = TAKE_PTR(plaintext);
+                        size = plaintext_size;
+                }
+
+                r = write_blob(stdout, data, size);
+                if (r < 0)
+                        return r;
+        }
+
+        return ret;
+}
+
+static int verb_encrypt(int argc, char **argv, void *userdata) {
+        _cleanup_free_ char *base64_buf = NULL, *fname = NULL;
+        _cleanup_(erase_and_freep) char *plaintext = NULL;
+        const char *input_path, *output_path, *name;
+        _cleanup_free_ void *output = NULL;
+        size_t plaintext_size, output_size;
+        ssize_t base64_size;
+        usec_t timestamp;
+        int r;
+
+        assert(argc == 3);
+
+        input_path = empty_or_dash(argv[1]) ? NULL : argv[1];
+
+        if (input_path)
+                r = read_full_file_full(AT_FDCWD, input_path, UINT64_MAX, CREDENTIAL_SIZE_MAX, READ_FULL_FILE_SECURE|READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &plaintext, &plaintext_size);
+        else
+                r = read_full_stream_full(stdin, NULL, UINT64_MAX, CREDENTIAL_SIZE_MAX, READ_FULL_FILE_SECURE|READ_FULL_FILE_FAIL_WHEN_LARGER, &plaintext, &plaintext_size);
+        if (r == -E2BIG)
+                return log_error_errno(r, "Plaintext too long for credential (allowed size: %zu).", (size_t) CREDENTIAL_SIZE_MAX);
+        if (r < 0)
+                return log_error_errno(r, "Failed to read plaintext: %m");
+
+        output_path = empty_or_dash(argv[2]) ? NULL : argv[2];
+
+        if (arg_name_any)
+                name = NULL;
+        else if (arg_name)
+                name = arg_name;
+        else if (output_path) {
+                r = path_extract_filename(output_path, &fname);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract filename from '%s': %m", output_path);
+                if (r == O_DIRECTORY)
+                        return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Path '%s' refers to directory, refusing.", output_path);
+
+                name = fname;
+        } else {
+                log_warning("No credential name specified, not embedding credential name in encrypted data. (Disable this warning with --name=)");
+                name = NULL;
+        }
+
+        timestamp = arg_timestamp != USEC_INFINITY ? arg_timestamp : now(CLOCK_REALTIME);
+
+        if (arg_not_after != USEC_INFINITY && arg_not_after < timestamp)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Credential is invalidated before it is valid.");
+
+        r = encrypt_credential_and_warn(
+                        arg_with_key,
+                        name,
+                        timestamp,
+                        arg_not_after,
+                        arg_tpm2_device,
+                        arg_tpm2_pcr_mask,
+                        arg_tpm2_public_key,
+                        arg_tpm2_public_key_pcr_mask,
+                        plaintext, plaintext_size,
+                        &output, &output_size);
+        if (r < 0)
+                return r;
+
+        base64_size = base64mem_full(output, output_size, arg_pretty ? 69 : 79, &base64_buf);
+        if (base64_size < 0)
+                return base64_size;
+
+        if (arg_pretty) {
+                _cleanup_free_ char *escaped = NULL, *indented = NULL, *j = NULL;
+
+                if (name) {
+                        escaped = cescape(name);
+                        if (!escaped)
+                                return log_oom();
+                }
+
+                indented = strreplace(base64_buf, "\n", " \\\n        ");
+                if (!indented)
+                        return log_oom();
+
+                j = strjoin("SetCredentialEncrypted=", name, ": \\\n        ", indented, "\n");
+                if (!j)
+                        return log_oom();
+
+                free_and_replace(base64_buf, j);
+        }
+
+        if (output_path)
+                r = write_string_file(output_path, base64_buf, WRITE_STRING_FILE_ATOMIC|WRITE_STRING_FILE_CREATE);
+        else
+                r = write_string_stream(stdout, base64_buf, 0);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write result: %m");
+
+        return EXIT_SUCCESS;
+}
+
+static int verb_decrypt(int argc, char **argv, void *userdata) {
+        _cleanup_(erase_and_freep) void *plaintext = NULL;
+        _cleanup_free_ char *input = NULL, *fname = NULL;
+        _cleanup_fclose_ FILE *output_file = NULL;
+        const char *input_path, *output_path, *name;
+        size_t input_size, plaintext_size;
+        usec_t timestamp;
+        FILE *f;
+        int r;
+
+        assert(IN_SET(argc, 2, 3));
+
+        input_path = empty_or_dash(argv[1]) ? NULL : argv[1];
+
+        if (input_path)
+                r = read_full_file_full(AT_FDCWD, argv[1], UINT64_MAX, CREDENTIAL_ENCRYPTED_SIZE_MAX, READ_FULL_FILE_UNBASE64|READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &input, &input_size);
+        else
+                r = read_full_stream_full(stdin, NULL, UINT64_MAX, CREDENTIAL_ENCRYPTED_SIZE_MAX, READ_FULL_FILE_UNBASE64|READ_FULL_FILE_FAIL_WHEN_LARGER, &input, &input_size);
+        if (r == -E2BIG)
+                return log_error_errno(r, "Data too long for encrypted credential (allowed size: %zu).", (size_t) CREDENTIAL_ENCRYPTED_SIZE_MAX);
+        if (r < 0)
+                return log_error_errno(r, "Failed to read encrypted credential data: %m");
+
+        output_path = (argc < 3 || empty_or_dash(argv[2])) ? NULL : argv[2];
+
+        if (arg_name_any)
+                name = NULL;
+        else if (arg_name)
+                name = arg_name;
+        else if (input_path) {
+                r = path_extract_filename(input_path, &fname);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract filename from '%s': %m", input_path);
+                if (r == O_DIRECTORY)
+                        return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Path '%s' refers to directory, refusing.", input_path);
+
+                name = fname;
+        } else {
+                log_warning("No credential name specified, not validating credential name embedded in encrypted data. (Disable this warning with --name=.)");
+                name = NULL;
+        }
+
+        timestamp = arg_timestamp != USEC_INFINITY ? arg_timestamp : now(CLOCK_REALTIME);
+
+        r = decrypt_credential_and_warn(
+                        name,
+                        timestamp,
+                        arg_tpm2_device,
+                        arg_tpm2_signature,
+                        input, input_size,
+                        &plaintext, &plaintext_size);
+        if (r < 0)
+                return r;
+
+        if (output_path) {
+                output_file = fopen(output_path, "we");
+                if (!output_file)
+                        return log_error_errno(errno, "Failed to create output file '%s': %m", output_path);
+
+                f = output_file;
+        } else
+                f = stdout;
+
+        r = write_blob(f, plaintext, plaintext_size);
+        if (r < 0)
+                return r;
+
+        return EXIT_SUCCESS;
+}
+
+static int verb_setup(int argc, char **argv, void *userdata) {
+        size_t size;
+        int r;
+
+        r = get_credential_host_secret(CREDENTIAL_SECRET_GENERATE|CREDENTIAL_SECRET_WARN_NOT_ENCRYPTED, NULL, &size);
+        if (r < 0)
+                return log_error_errno(r, "Failed to setup credentials host key: %m");
+
+        log_info("%zu byte credentials host key set up.", size);
+
+        return EXIT_SUCCESS;
+}
+
+static int verb_has_tpm2(int argc, char **argv, void *userdata) {
+        Tpm2Support s;
+
+        s = tpm2_support();
+
+        if (!arg_quiet) {
+                if (s == TPM2_SUPPORT_FULL)
+                        puts("yes");
+                else if (s == TPM2_SUPPORT_NONE)
+                        puts("no");
+                else
+                        puts("partial");
+
+                printf("%sfirmware\n"
+                       "%sdriver\n"
+                       "%ssystem\n"
+                       "%ssubsystem\n",
+                       plus_minus(s & TPM2_SUPPORT_FIRMWARE),
+                       plus_minus(s & TPM2_SUPPORT_DRIVER),
+                       plus_minus(s & TPM2_SUPPORT_SYSTEM),
+                       plus_minus(s & TPM2_SUPPORT_SUBSYSTEM));
+        }
+
+        /* Return inverted bit flags. So that TPM2_SUPPORT_FULL becomes EXIT_SUCCESS and the other values
+         * become some reasonable values 1…7. i.e. the flags we return here tell what is missing rather than
+         * what is there, acknowledging the fact that for process exit statuses it is customary to return
+         * zero (EXIT_FAILURE) when all is good, instead of all being bad. */
+        return ~s & TPM2_SUPPORT_FULL;
+}
+
+static int verb_help(int argc, char **argv, void *userdata) {
+        _cleanup_free_ char *link = NULL;
+        int r;
+
+        r = terminal_urlify_man("systemd-creds", "1", &link);
+        if (r < 0)
+                return log_oom();
+
+        printf("%1$s [OPTIONS...] COMMAND ...\n"
+               "\n%5$sDisplay and Process Credentials.%6$s\n"
+               "\n%3$sCommands:%4$s\n"
+               "  list                    Show installed and available versions\n"
+               "  cat CREDENTIAL...       Show specified credentials\n"
+               "  setup                   Generate credentials host key, if not existing yet\n"
+               "  encrypt INPUT OUTPUT    Encrypt plaintext credential file and write to\n"
+               "                          ciphertext credential file\n"
+               "  decrypt INPUT [OUTPUT]  Decrypt ciphertext credential file and write to\n"
+               "                          plaintext credential file\n"
+               "  has-tpm2                Report whether TPM2 support is available\n"
+               "  -h --help               Show this help\n"
+               "     --version            Show package version\n"
+               "\n%3$sOptions:%4$s\n"
+               "     --no-pager           Do not pipe output into a pager\n"
+               "     --no-legend          Do not show the headers and footers\n"
+               "     --json=pretty|short|off\n"
+               "                          Generate JSON output\n"
+               "     --system             Show credentials passed to system\n"
+               "     --transcode=base64|unbase64|hex|unhex\n"
+               "                          Transcode credential data\n"
+               "     --newline=auto|yes|no\n"
+               "                          Suffix output with newline\n"
+               "  -p --pretty             Output as SetCredentialEncrypted= line\n"
+               "     --name=NAME          Override filename included in encrypted credential\n"
+               "     --timestamp=TIME     Include specified timestamp in encrypted credential\n"
+               "     --not-after=TIME     Include specified invalidation time in encrypted\n"
+               "                          credential\n"
+               "     --with-key=host|tpm2|host+tpm2|tpm2-absent|auto|auto-initrd\n"
+               "                          Which keys to encrypt with\n"
+               "  -H                      Shortcut for --with-key=host\n"
+               "  -T                      Shortcut for --with-key=tpm2\n"
+               "     --tpm2-device=PATH\n"
+               "                          Pick TPM2 device\n"
+               "     --tpm2-pcrs=PCR1+PCR2+PCR3+…\n"
+               "                          Specify TPM2 PCRs to seal against (fixed hash)\n"
+               "     --tpm2-public-key=PATH\n"
+               "                          Specify PEM certificate to seal against\n"
+               "     --tpm2-public-key-pcrs=PCR1+PCR2+PCR3+…\n"
+               "                          Specify TPM2 PCRs to seal against (public key)\n"
+               "     --tpm2-signature=PATH\n"
+               "                          Specify signature for public key PCR policy\n"
+               "  -q --quiet              Suppress output for 'has-tpm2' verb\n"
+               "\nSee the %2$s for details.\n"
+               , program_invocation_short_name
+               , link
+               , ansi_underline(), ansi_normal()
+               , ansi_highlight(), ansi_normal()
+        );
+
+        return 0;
+}
+
+static int parse_argv(int argc, char *argv[]) {
+
+        enum {
+                ARG_VERSION = 0x100,
+                ARG_NO_PAGER,
+                ARG_NO_LEGEND,
+                ARG_JSON,
+                ARG_SYSTEM,
+                ARG_TRANSCODE,
+                ARG_NEWLINE,
+                ARG_WITH_KEY,
+                ARG_TPM2_DEVICE,
+                ARG_TPM2_PCRS,
+                ARG_TPM2_PUBLIC_KEY,
+                ARG_TPM2_PUBLIC_KEY_PCRS,
+                ARG_TPM2_SIGNATURE,
+                ARG_NAME,
+                ARG_TIMESTAMP,
+                ARG_NOT_AFTER,
+        };
+
+        static const struct option options[] = {
+                { "help",                 no_argument,       NULL, 'h'                      },
+                { "version",              no_argument,       NULL, ARG_VERSION              },
+                { "no-pager",             no_argument,       NULL, ARG_NO_PAGER             },
+                { "no-legend",            no_argument,       NULL, ARG_NO_LEGEND            },
+                { "json",                 required_argument, NULL, ARG_JSON                 },
+                { "system",               no_argument,       NULL, ARG_SYSTEM               },
+                { "transcode",            required_argument, NULL, ARG_TRANSCODE            },
+                { "newline",              required_argument, NULL, ARG_NEWLINE              },
+                { "pretty",               no_argument,       NULL, 'p'                      },
+                { "with-key",             required_argument, NULL, ARG_WITH_KEY             },
+                { "tpm2-device",          required_argument, NULL, ARG_TPM2_DEVICE          },
+                { "tpm2-pcrs",            required_argument, NULL, ARG_TPM2_PCRS            },
+                { "tpm2-public-key",      required_argument, NULL, ARG_TPM2_PUBLIC_KEY      },
+                { "tpm2-public-key-pcrs", required_argument, NULL, ARG_TPM2_PUBLIC_KEY_PCRS },
+                { "tpm2-signature",       required_argument, NULL, ARG_TPM2_SIGNATURE       },
+                { "name",                 required_argument, NULL, ARG_NAME                 },
+                { "timestamp",            required_argument, NULL, ARG_TIMESTAMP            },
+                { "not-after",            required_argument, NULL, ARG_NOT_AFTER            },
+                { "quiet",                no_argument,       NULL, 'q'                      },
+                {}
+        };
+
+        int c, r;
+
+        assert(argc >= 0);
+        assert(argv);
+
+        while ((c = getopt_long(argc, argv, "hHTpq", options, NULL)) >= 0) {
+
+                switch (c) {
+
+                case 'h':
+                        return verb_help(0, NULL, NULL);
+
+                case ARG_VERSION:
+                        return version();
+
+                case ARG_NO_PAGER:
+                        arg_pager_flags |= PAGER_DISABLE;
+                        break;
+
+                case ARG_NO_LEGEND:
+                        arg_legend = false;
+                        break;
+
+                case ARG_JSON:
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
+
+                        break;
+
+                case ARG_SYSTEM:
+                        arg_system = true;
+                        break;
+
+                case ARG_TRANSCODE:
+                        if (parse_boolean(optarg) == 0) /* If specified as "false", turn transcoding off */
+                                arg_transcode = TRANSCODE_OFF;
+                        else {
+                                TranscodeMode m;
+
+                                m = transcode_mode_from_string(optarg);
+                                if (m < 0)
+                                        return log_error_errno(m, "Failed to parse transcode mode: %m");
+
+                                arg_transcode = m;
+                        }
+
+                        break;
+
+                case ARG_NEWLINE:
+                        if (isempty(optarg) || streq(optarg, "auto"))
+                                arg_newline = -1;
+                        else {
+                                bool b;
+
+                                r = parse_boolean_argument("--newline=", optarg, &b);
+                                if (r < 0)
+                                        return r;
+
+                                arg_newline = b;
+                        }
+                        break;
+
+                case 'p':
+                        arg_pretty = true;
+                        break;
+
+                case ARG_WITH_KEY:
+                        if (isempty(optarg) || streq(optarg, "auto"))
+                                arg_with_key = _CRED_AUTO;
+                        else if (streq(optarg, "auto-initrd"))
+                                arg_with_key = _CRED_AUTO_INITRD;
+                        else if (streq(optarg, "host"))
+                                arg_with_key = CRED_AES256_GCM_BY_HOST;
+                        else if (streq(optarg, "tpm2"))
+                                arg_with_key = CRED_AES256_GCM_BY_TPM2_HMAC;
+                        else if (streq(optarg, "tpm2-with-public-key"))
+                                arg_with_key = CRED_AES256_GCM_BY_TPM2_HMAC_WITH_PK;
+                        else if (STR_IN_SET(optarg, "host+tpm2", "tpm2+host"))
+                                arg_with_key = CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC;
+                        else if (STR_IN_SET(optarg, "host+tpm2-with-public-key", "tpm2-with-public-key+host"))
+                                arg_with_key = CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK;
+                        else if (streq(optarg, "tpm2-absent"))
+                                arg_with_key = CRED_AES256_GCM_BY_TPM2_ABSENT;
+                        else
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown key type: %s", optarg);
+
+                        break;
+
+                case 'H':
+                        arg_with_key = CRED_AES256_GCM_BY_HOST;
+                        break;
+
+                case 'T':
+                        arg_with_key = CRED_AES256_GCM_BY_TPM2_HMAC;
+                        break;
+
+                case ARG_TPM2_DEVICE:
+                        if (streq(optarg, "list"))
+                                return tpm2_list_devices();
+
+                        arg_tpm2_device = streq(optarg, "auto") ? NULL : optarg;
+                        break;
+
+                case ARG_TPM2_PCRS: /* For fixed hash PCR policies only */
+                        r = tpm2_parse_pcr_argument(optarg, &arg_tpm2_pcr_mask);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_TPM2_PUBLIC_KEY:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_tpm2_public_key);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_TPM2_PUBLIC_KEY_PCRS: /* For public key PCR policies only */
+                        r = tpm2_parse_pcr_argument(optarg, &arg_tpm2_public_key_pcr_mask);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_TPM2_SIGNATURE:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_tpm2_signature);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_NAME:
+                        if (isempty(optarg)) {
+                                arg_name = NULL;
+                                arg_name_any = true;
+                                break;
+                        }
+
+                        if (!credential_name_valid(optarg))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid credential name: %s", optarg);
+
+                        arg_name = optarg;
+                        arg_name_any = false;
+                        break;
+
+                case ARG_TIMESTAMP:
+                        r = parse_timestamp(optarg, &arg_timestamp);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse timestamp: %s", optarg);
+
+                        break;
+
+                case ARG_NOT_AFTER:
+                        r = parse_timestamp(optarg, &arg_not_after);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --not-after= timestamp: %s", optarg);
+
+                        break;
+
+                case 'q':
+                        arg_quiet = true;
+                        break;
+
+                case '?':
+                        return -EINVAL;
+
+                default:
+                        assert_not_reached();
+                }
+        }
+
+        if (arg_tpm2_pcr_mask == UINT32_MAX)
+                arg_tpm2_pcr_mask = TPM2_PCR_MASK_DEFAULT;
+        if (arg_tpm2_public_key_pcr_mask == UINT32_MAX)
+                arg_tpm2_public_key_pcr_mask = UINT32_C(1) << TPM_PCR_INDEX_KERNEL_IMAGE;
+
+        return 1;
+}
+
+static int creds_main(int argc, char *argv[]) {
+
+        static const Verb verbs[] = {
+                { "list",     VERB_ANY, 1,        VERB_DEFAULT, verb_list     },
+                { "cat",      2,        VERB_ANY, 0,            verb_cat      },
+                { "encrypt",  3,        3,        0,            verb_encrypt  },
+                { "decrypt",  2,        3,        0,            verb_decrypt  },
+                { "setup",    VERB_ANY, 1,        0,            verb_setup    },
+                { "help",     VERB_ANY, 1,        0,            verb_help     },
+                { "has-tpm2", VERB_ANY, 1,        0,            verb_has_tpm2 },
+                {}
+        };
+
+        return dispatch_verb(argc, argv, verbs, NULL);
+}
+
+static int run(int argc, char *argv[]) {
+        int r;
+
+        log_setup();
+
+        r = parse_argv(argc, argv);
+        if (r <= 0)
+                return r;
+
+        return creds_main(argc, argv);
+}
+
+DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
diff --git a/src/cryptenroll/cryptenroll-fido2.c b/src/cryptenroll/cryptenroll-fido2.c
index 9e1d94b..2baeb92 100644
--- a/src/cryptenroll/cryptenroll-fido2.c
+++ b/src/cryptenroll/cryptenroll-fido2.c
@@ -1,18 +1,73 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "ask-password-api.h"
 #include "cryptenroll-fido2.h"
+#include "cryptsetup-fido2.h"
 #include "hexdecoct.h"
 #include "json.h"
 #include "libfido2-util.h"
 #include "memory-util.h"
 #include "random-util.h"
 
+int load_volume_key_fido2(
+                struct crypt_device *cd,
+                const char *cd_node,
+                const char *device,
+                void *ret_vk,
+                size_t *ret_vks) {
+
+        _cleanup_(erase_and_freep) void *decrypted_key = NULL;
+        _cleanup_(erase_and_freep) char *passphrase = NULL;
+        size_t decrypted_key_size;
+        ssize_t passphrase_size;
+        int r;
+
+        assert_se(cd);
+        assert_se(cd_node);
+        assert_se(ret_vk);
+        assert_se(ret_vks);
+
+        r = acquire_fido2_key_auto(
+                        cd,
+                        cd_node,
+                        cd_node,
+                        device,
+                        /* until= */ 0,
+                        /* headless= */ false,
+                        &decrypted_key,
+                        &decrypted_key_size,
+                        ASK_PASSWORD_PUSH_CACHE|ASK_PASSWORD_ACCEPT_CACHED);
+        if (r == -EAGAIN)
+                return log_error_errno(r, "FIDO2 token does not exist, or UV is blocked. Please try again.");
+        if (r < 0)
+                return r;
+
+        /* Because cryptenroll requires a LUKS header, we can assume that this device is not
+         * a PLAIN device. In this case, we need to base64 encode the secret to use as the passphrase */
+        passphrase_size = base64mem(decrypted_key, decrypted_key_size, &passphrase);
+        if (passphrase_size < 0)
+                return log_oom();
+
+        r = crypt_volume_key_get(
+                        cd,
+                        CRYPT_ANY_SLOT,
+                        ret_vk,
+                        ret_vks,
+                        passphrase,
+                        passphrase_size);
+        if (r < 0)
+                return log_error_errno(r, "Unlocking via FIDO2 device failed: %m");
+
+        return r;
+}
+
 int enroll_fido2(
                 struct crypt_device *cd,
                 const void *volume_key,
                 size_t volume_key_size,
                 const char *device,
-                Fido2EnrollFlags lock_with) {
+                Fido2EnrollFlags lock_with,
+                int cred_alg) {
 
         _cleanup_(erase_and_freep) void *salt = NULL, *secret = NULL;
         _cleanup_(erase_and_freep) char *base64_encoded = NULL;
@@ -20,6 +75,7 @@
         _cleanup_free_ char *keyslot_as_string = NULL;
         size_t cid_size, salt_size, secret_size;
         _cleanup_free_ void *cid = NULL;
+        ssize_t base64_encoded_size;
         const char *node, *un;
         int r, keyslot;
 
@@ -42,6 +98,7 @@
                         /* user_icon_name= */ NULL,
                         /* askpw_icon_name= */ "drive-harddisk",
                         lock_with,
+                        cred_alg,
                         &cid, &cid_size,
                         &salt, &salt_size,
                         &secret, &secret_size,
@@ -51,9 +108,9 @@
                 return r;
 
         /* Before we use the secret, we base64 encode it, for compat with homed, and to make it easier to type in manually */
-        r = base64mem(secret, secret_size, &base64_encoded);
-        if (r < 0)
-                return log_error_errno(r, "Failed to base64 encode secret key: %m");
+        base64_encoded_size = base64mem(secret, secret_size, &base64_encoded);
+        if (base64_encoded_size < 0)
+                return log_error_errno(base64_encoded_size, "Failed to base64 encode secret key: %m");
 
         r = cryptsetup_set_minimal_pbkdf(cd);
         if (r < 0)
@@ -65,7 +122,7 @@
                         volume_key,
                         volume_key_size,
                         base64_encoded,
-                        strlen(base64_encoded));
+                        base64_encoded_size);
         if (keyslot < 0)
                 return log_error_errno(keyslot, "Failed to add new FIDO2 key to %s: %m", node);
 
@@ -74,11 +131,11 @@
 
         r = json_build(&v,
                        JSON_BUILD_OBJECT(
-                                       JSON_BUILD_PAIR("type", JSON_BUILD_STRING("systemd-fido2")),
+                                       JSON_BUILD_PAIR("type", JSON_BUILD_CONST_STRING("systemd-fido2")),
                                        JSON_BUILD_PAIR("keyslots", JSON_BUILD_ARRAY(JSON_BUILD_STRING(keyslot_as_string))),
                                        JSON_BUILD_PAIR("fido2-credential", JSON_BUILD_BASE64(cid, cid_size)),
                                        JSON_BUILD_PAIR("fido2-salt", JSON_BUILD_BASE64(salt, salt_size)),
-                                       JSON_BUILD_PAIR("fido2-rp", JSON_BUILD_STRING("io.systemd.cryptsetup")),
+                                       JSON_BUILD_PAIR("fido2-rp", JSON_BUILD_CONST_STRING("io.systemd.cryptsetup")),
                                        JSON_BUILD_PAIR("fido2-clientPin-required", JSON_BUILD_BOOLEAN(FLAGS_SET(lock_with, FIDO2ENROLL_PIN))),
                                        JSON_BUILD_PAIR("fido2-up-required", JSON_BUILD_BOOLEAN(FLAGS_SET(lock_with, FIDO2ENROLL_UP))),
                                        JSON_BUILD_PAIR("fido2-uv-required", JSON_BUILD_BOOLEAN(FLAGS_SET(lock_with, FIDO2ENROLL_UV)))));
diff --git a/src/cryptenroll/cryptenroll-fido2.h b/src/cryptenroll/cryptenroll-fido2.h
index b82a9ca..3315308 100644
--- a/src/cryptenroll/cryptenroll-fido2.h
+++ b/src/cryptenroll/cryptenroll-fido2.h
@@ -8,9 +8,16 @@
 #include "log.h"
 
 #if HAVE_LIBFIDO2
-int enroll_fido2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, Fido2EnrollFlags lock_with);
+int load_volume_key_fido2(struct crypt_device *cd, const char *cd_node, const char *device, void *ret_vk, size_t *ret_vks);
+int enroll_fido2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, Fido2EnrollFlags lock_with, int cred_alg);
+
 #else
-static inline int enroll_fido2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, Fido2EnrollFlags lock_with) {
+static inline int load_volume_key_fido2(struct crypt_device *cd, const char *cd_node, const char *device, void *ret_vk, size_t *ret_vks) {
+        return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                               "FIDO2 unlocking not supported.");
+}
+
+static inline int enroll_fido2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, Fido2EnrollFlags lock_with, int cred_alg) {
         return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                "FIDO2 key enrollment not supported.");
 }
diff --git a/src/cryptenroll/cryptenroll-list.c b/src/cryptenroll/cryptenroll-list.c
index c3ad819..62688da 100644
--- a/src/cryptenroll/cryptenroll-list.c
+++ b/src/cryptenroll/cryptenroll-list.c
@@ -79,7 +79,7 @@
 
                         r = safe_atou(json_variant_string(z), &u);
                         if (r < 0) {
-                                log_warning_errno(r, "Token JSON data's keyslot filed is not an integer formatted as string, ignoring.");
+                                log_warning_errno(r, "Token JSON data's keyslot field is not an integer formatted as string, ignoring.");
                                 continue;
                         }
 
diff --git a/src/cryptenroll/cryptenroll-password.c b/src/cryptenroll/cryptenroll-password.c
index 0314831..25a90b5 100644
--- a/src/cryptenroll/cryptenroll-password.c
+++ b/src/cryptenroll/cryptenroll-password.c
@@ -2,11 +2,92 @@
 
 #include "ask-password-api.h"
 #include "cryptenroll-password.h"
+#include "env-util.h"
 #include "escape.h"
 #include "memory-util.h"
 #include "pwquality-util.h"
 #include "strv.h"
 
+int load_volume_key_password(
+                struct crypt_device *cd,
+                const char *cd_node,
+                void *ret_vk,
+                size_t *ret_vks) {
+
+        _cleanup_(erase_and_freep) char *envpw = NULL;
+        int r;
+
+        assert_se(cd);
+        assert_se(cd_node);
+        assert_se(ret_vk);
+        assert_se(ret_vks);
+
+        r = getenv_steal_erase("PASSWORD", &envpw);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire password from environment: %m");
+        if (r > 0) {
+                r = crypt_volume_key_get(
+                                cd,
+                                CRYPT_ANY_SLOT,
+                                ret_vk,
+                                ret_vks,
+                                envpw,
+                                strlen(envpw));
+                if (r < 0)
+                        return log_error_errno(r, "Password from environment variable $PASSWORD did not work.");
+        } else {
+                AskPasswordFlags ask_password_flags = ASK_PASSWORD_PUSH_CACHE|ASK_PASSWORD_ACCEPT_CACHED;
+                _cleanup_free_ char *question = NULL, *disk_path = NULL;
+                unsigned i = 5;
+                const char *id;
+
+                question = strjoin("Please enter current passphrase for disk ", cd_node, ":");
+                if (!question)
+                        return log_oom();
+
+                disk_path = cescape(cd_node);
+                if (!disk_path)
+                        return log_oom();
+
+                id = strjoina("cryptsetup:", disk_path);
+
+                for (;;) {
+                        _cleanup_strv_free_erase_ char **passwords = NULL;
+
+                        if (--i == 0)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOKEY),
+                                                       "Too many attempts, giving up:");
+
+                        r = ask_password_auto(
+                                        question, "drive-harddisk", id, "cryptenroll", "cryptenroll.passphrase", USEC_INFINITY,
+                                        ask_password_flags,
+                                        &passwords);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to query password: %m");
+
+                        r = -EPERM;
+                        STRV_FOREACH(p, passwords) {
+                                r = crypt_volume_key_get(
+                                                cd,
+                                                CRYPT_ANY_SLOT,
+                                                ret_vk,
+                                                ret_vks,
+                                                *p,
+                                                strlen(*p));
+                                if (r >= 0)
+                                        break;
+                        }
+                        if (r >= 0)
+                                break;
+
+                        log_error_errno(r, "Password not correct, please try again.");
+                        ask_password_flags &= ~ASK_PASSWORD_ACCEPT_CACHED;
+                }
+        }
+
+        return r;
+}
+
 int enroll_password(
                 struct crypt_device *cd,
                 const void *volume_key,
@@ -16,21 +97,13 @@
         _cleanup_free_ char *error = NULL;
         const char *node;
         int r, keyslot;
-        char *e;
 
         assert_se(node = crypt_get_device_name(cd));
 
-        e = getenv("NEWPASSWORD");
-        if (e) {
-
-                new_password = strdup(e);
-                if (!new_password)
-                        return log_oom();
-
-                string_erase(e);
-                assert_se(unsetenv("NEWPASSWORD") == 0);
-
-        } else {
+        r = getenv_steal_erase("NEWPASSWORD", &new_password);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire password from environment: %m");
+        if (r == 0) {
                 _cleanup_free_ char *disk_path = NULL;
                 unsigned i = 5;
                 const char *id;
diff --git a/src/cryptenroll/cryptenroll-password.h b/src/cryptenroll/cryptenroll-password.h
index ddeee13..aa07a6f 100644
--- a/src/cryptenroll/cryptenroll-password.h
+++ b/src/cryptenroll/cryptenroll-password.h
@@ -5,4 +5,5 @@
 
 #include "cryptsetup-util.h"
 
+int load_volume_key_password(struct crypt_device *cd, const char* cd_node, void *ret_vk, size_t *ret_vks);
 int enroll_password(struct crypt_device *cd, const void *volume_key, size_t volume_key_size);
diff --git a/src/cryptenroll/cryptenroll-pkcs11.c b/src/cryptenroll/cryptenroll-pkcs11.c
index 15ae6c9..54b6b86 100644
--- a/src/cryptenroll/cryptenroll-pkcs11.c
+++ b/src/cryptenroll/cryptenroll-pkcs11.c
@@ -21,6 +21,7 @@
         size_t decrypted_key_size, encrypted_key_size;
         _cleanup_free_ void *encrypted_key = NULL;
         _cleanup_(X509_freep) X509 *cert = NULL;
+        ssize_t base64_encoded_size;
         const char *node;
         EVP_PKEY *pkey;
         int keyslot, r;
@@ -50,7 +51,7 @@
         if (!decrypted_key)
                 return log_oom();
 
-        r = genuine_random_bytes(decrypted_key, decrypted_key_size, RANDOM_BLOCK);
+        r = crypto_random_bytes(decrypted_key, decrypted_key_size);
         if (r < 0)
                 return log_error_errno(r, "Failed to generate random key: %m");
 
@@ -60,9 +61,9 @@
 
         /* Let's base64 encode the key to use, for compat with homed (and it's easier to type it in by
          * keyboard, if that might ever end up being necessary.) */
-        r = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
-        if (r < 0)
-                return log_error_errno(r, "Failed to base64 encode secret key: %m");
+        base64_encoded_size = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+        if (base64_encoded_size < 0)
+                return log_error_errno(base64_encoded_size, "Failed to base64 encode secret key: %m");
 
         r = cryptsetup_set_minimal_pbkdf(cd);
         if (r < 0)
@@ -74,7 +75,7 @@
                         volume_key,
                         volume_key_size,
                         base64_encoded,
-                        strlen(base64_encoded));
+                        base64_encoded_size);
         if (keyslot < 0)
                 return log_error_errno(keyslot, "Failed to add new PKCS#11 key to %s: %m", node);
 
@@ -83,7 +84,7 @@
 
         r = json_build(&v,
                        JSON_BUILD_OBJECT(
-                                       JSON_BUILD_PAIR("type", JSON_BUILD_STRING("systemd-pkcs11")),
+                                       JSON_BUILD_PAIR("type", JSON_BUILD_CONST_STRING("systemd-pkcs11")),
                                        JSON_BUILD_PAIR("keyslots", JSON_BUILD_ARRAY(JSON_BUILD_STRING(keyslot_as_string))),
                                        JSON_BUILD_PAIR("pkcs11-uri", JSON_BUILD_STRING(uri)),
                                        JSON_BUILD_PAIR("pkcs11-key", JSON_BUILD_BASE64(encrypted_key, encrypted_key_size))));
diff --git a/src/cryptenroll/cryptenroll-recovery.c b/src/cryptenroll/cryptenroll-recovery.c
index 3204c46..7c170f2 100644
--- a/src/cryptenroll/cryptenroll-recovery.c
+++ b/src/cryptenroll/cryptenroll-recovery.c
@@ -1,8 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "cryptenroll-recovery.h"
+#include "glyph-util.h"
 #include "json.h"
-#include "locale-util.h"
 #include "memory-util.h"
 #include "qrcode-util.h"
 #include "recovery-key.h"
@@ -76,7 +76,7 @@
 
         r = json_build(&v,
                        JSON_BUILD_OBJECT(
-                                       JSON_BUILD_PAIR("type", JSON_BUILD_STRING("systemd-recovery")),
+                                       JSON_BUILD_PAIR("type", JSON_BUILD_CONST_STRING("systemd-recovery")),
                                        JSON_BUILD_PAIR("keyslots", JSON_BUILD_ARRAY(JSON_BUILD_STRING(keyslot_as_string)))));
         if (r < 0) {
                 log_error_errno(r, "Failed to prepare recovery key JSON token object: %m");
diff --git a/src/cryptenroll/cryptenroll-tpm2.c b/src/cryptenroll/cryptenroll-tpm2.c
index 9c1478c..fc6cc74 100644
--- a/src/cryptenroll/cryptenroll-tpm2.c
+++ b/src/cryptenroll/cryptenroll-tpm2.c
@@ -1,10 +1,15 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
+#include "ask-password-api.h"
 #include "cryptenroll-tpm2.h"
+#include "env-util.h"
+#include "fileio.h"
 #include "hexdecoct.h"
 #include "json.h"
 #include "memory-util.h"
+#include "random-util.h"
+#include "sha256.h"
 #include "tpm2-util.h"
 
 static int search_policy_hash(
@@ -34,8 +39,12 @@
                         return log_error_errno(r, "Failed to read JSON token data off disk: %m");
 
                 keyslot = cryptsetup_get_keyslot_from_token(v);
-                if (keyslot < 0)
-                        return log_error_errno(keyslot, "Failed to determine keyslot of JSON token: %m");
+                if (keyslot < 0) {
+                        /* Handle parsing errors of the keyslots field gracefully, since it's not 'owned' by
+                         * us, but by the LUKS2 spec */
+                        log_warning_errno(keyslot, "Failed to determine keyslot of JSON token %i, skipping: %m", token);
+                        continue;
+                }
 
                 w = json_variant_by_key(v, "tpm2-policy-hash");
                 if (!w || !json_variant_is_string(w))
@@ -54,28 +63,158 @@
         return -ENOENT; /* Not found */
 }
 
+static int get_pin(char **ret_pin_str, TPM2Flags *ret_flags) {
+        _cleanup_free_ char *pin_str = NULL;
+        int r;
+        TPM2Flags flags = 0;
+
+        assert(ret_pin_str);
+        assert(ret_flags);
+
+        r = getenv_steal_erase("NEWPIN", &pin_str);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
+        if (r > 0)
+                flags |= TPM2_FLAGS_USE_PIN;
+        else {
+                for (size_t i = 5;; i--) {
+                        _cleanup_strv_free_erase_ char **pin = NULL, **pin2 = NULL;
+
+                        if (i <= 0)
+                                return log_error_errno(
+                                                SYNTHETIC_ERRNO(ENOKEY), "Too many attempts, giving up.");
+
+                        pin = strv_free_erase(pin);
+                        r = ask_password_auto(
+                                        "Please enter TPM2 PIN:",
+                                        "drive-harddisk",
+                                        NULL,
+                                        "tpm2-pin",
+                                        "cryptenroll.tpm2-pin",
+                                        USEC_INFINITY,
+                                        0,
+                                        &pin);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to ask for user pin: %m");
+                        assert(strv_length(pin) == 1);
+
+                        r = ask_password_auto(
+                                        "Please enter TPM2 PIN (repeat):",
+                                        "drive-harddisk",
+                                        NULL,
+                                        "tpm2-pin",
+                                        "cryptenroll.tpm2-pin",
+                                        USEC_INFINITY,
+                                        0,
+                                        &pin2);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to ask for user pin: %m");
+                        assert(strv_length(pin) == 1);
+
+                        if (strv_equal(pin, pin2)) {
+                                pin_str = strdup(*pin);
+                                if (!pin_str)
+                                        return log_oom();
+                                flags |= TPM2_FLAGS_USE_PIN;
+                                break;
+                        }
+
+                        log_error("PINs didn't match, please try again!");
+                }
+        }
+
+        *ret_flags = flags;
+        *ret_pin_str = TAKE_PTR(pin_str);
+
+        return 0;
+}
+
 int enroll_tpm2(struct crypt_device *cd,
                 const void *volume_key,
                 size_t volume_key_size,
                 const char *device,
-                uint32_t pcr_mask) {
+                uint32_t hash_pcr_mask,
+                const char *pubkey_path,
+                uint32_t pubkey_pcr_mask,
+                const char *signature_path,
+                bool use_pin) {
 
-        _cleanup_(erase_and_freep) void *secret = NULL, *secret2 = NULL;
-        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        _cleanup_(erase_and_freep) void *secret = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *signature_json = NULL;
         _cleanup_(erase_and_freep) char *base64_encoded = NULL;
-        size_t secret_size, secret2_size, blob_size, hash_size;
-        _cleanup_free_ void *blob = NULL, *hash = NULL;
+        size_t secret_size, blob_size, hash_size, pubkey_size = 0;
+        _cleanup_free_ void *blob = NULL, *hash = NULL, *pubkey = NULL;
+        uint16_t pcr_bank, primary_alg;
         const char *node;
+        _cleanup_(erase_and_freep) char *pin_str = NULL;
+        ssize_t base64_encoded_size;
         int r, keyslot;
+        TPM2Flags flags = 0;
+        uint8_t binary_salt[SHA256_DIGEST_SIZE] = {};
+        /*
+         * erase the salt, we'd rather attempt to not have this in a coredump
+         * as an attacker would have all the parameters but pin used to create
+         * the session key. This problem goes away when we move to a trusted
+         * primary key, aka the SRK.
+         */
+        CLEANUP_ERASE(binary_salt);
 
         assert(cd);
         assert(volume_key);
         assert(volume_key_size > 0);
-        assert(pcr_mask < (1U << TPM2_PCRS_MAX)); /* Support 24 PCR banks */
+        assert(TPM2_PCR_MASK_VALID(hash_pcr_mask));
+        assert(TPM2_PCR_MASK_VALID(pubkey_pcr_mask));
 
         assert_se(node = crypt_get_device_name(cd));
 
-        r = tpm2_seal(device, pcr_mask, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size);
+        if (use_pin) {
+                r = get_pin(&pin_str, &flags);
+                if (r < 0)
+                        return r;
+
+                r = crypto_random_bytes(binary_salt, sizeof(binary_salt));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to acquire random salt: %m");
+
+                uint8_t salted_pin[SHA256_DIGEST_SIZE] = {};
+                CLEANUP_ERASE(salted_pin);
+                r = tpm2_util_pbkdf2_hmac_sha256(pin_str, strlen(pin_str), binary_salt, sizeof(binary_salt), salted_pin);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to perform PBKDF2: %m");
+
+                pin_str = erase_and_free(pin_str);
+                /* re-stringify pin_str */
+                base64_encoded_size = base64mem(salted_pin, sizeof(salted_pin), &pin_str);
+                if (base64_encoded_size < 0)
+                        return log_error_errno(base64_encoded_size, "Failed to base64 encode salted pin: %m");
+        }
+
+        r = tpm2_load_pcr_public_key(pubkey_path, &pubkey, &pubkey_size);
+        if (r < 0) {
+                if (pubkey_path || signature_path || r != -ENOENT)
+                        return log_error_errno(r, "Failed read TPM PCR public key: %m");
+
+                log_debug_errno(r, "Failed to read TPM2 PCR public key, proceeding without: %m");
+                pubkey_pcr_mask = 0;
+        } else if (signature_path) {
+                /* Also try to load the signature JSON object, to verify that our enrollment will work.
+                 * This is optional however, skip it if it's not explicitly provided. */
+
+                r = tpm2_load_pcr_signature(signature_path, &signature_json);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to read TPM PCR signature: %m");
+        }
+
+        r = tpm2_seal(device,
+                      hash_pcr_mask,
+                      pubkey, pubkey_size,
+                      pubkey_pcr_mask,
+                      pin_str,
+                      &secret, &secret_size,
+                      &blob, &blob_size,
+                      &hash, &hash_size,
+                      &pcr_bank,
+                      &primary_alg);
         if (r < 0)
                 return r;
 
@@ -91,18 +230,33 @@
         }
 
         /* Quick verification that everything is in order, we are not in a hurry after all. */
-        log_debug("Unsealing for verification...");
-        r = tpm2_unseal(device, pcr_mask, blob, blob_size, hash, hash_size, &secret2, &secret2_size);
-        if (r < 0)
-                return r;
+        if (!pubkey || signature_json) {
+                _cleanup_(erase_and_freep) void *secret2 = NULL;
+                size_t secret2_size;
 
-        if (memcmp_nn(secret, secret_size, secret2, secret2_size) != 0)
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "TPM2 seal/unseal verification failed.");
+                log_debug("Unsealing for verification...");
+                r = tpm2_unseal(device,
+                                hash_pcr_mask,
+                                pcr_bank,
+                                pubkey, pubkey_size,
+                                pubkey_pcr_mask,
+                                signature_json,
+                                pin_str,
+                                primary_alg,
+                                blob, blob_size,
+                                hash, hash_size,
+                                &secret2, &secret2_size);
+                if (r < 0)
+                        return r;
+
+                if (memcmp_nn(secret, secret_size, secret2, secret2_size) != 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "TPM2 seal/unseal verification failed.");
+        }
 
         /* let's base64 encode the key to use, for compat with homed (and it's easier to every type it in by keyboard, if that might end up being necessary. */
-        r = base64mem(secret, secret_size, &base64_encoded);
-        if (r < 0)
-                return log_error_errno(r, "Failed to base64 encode secret key: %m");
+        base64_encoded_size = base64mem(secret, secret_size, &base64_encoded);
+        if (base64_encoded_size < 0)
+                return log_error_errno(base64_encoded_size, "Failed to base64 encode secret key: %m");
 
         r = cryptsetup_set_minimal_pbkdf(cd);
         if (r < 0)
@@ -114,11 +268,23 @@
                         volume_key,
                         volume_key_size,
                         base64_encoded,
-                        strlen(base64_encoded));
+                        base64_encoded_size);
         if (keyslot < 0)
                 return log_error_errno(keyslot, "Failed to add new TPM2 key to %s: %m", node);
 
-        r = tpm2_make_luks2_json(keyslot, pcr_mask, blob, blob_size, hash, hash_size, &v);
+        r = tpm2_make_luks2_json(
+                        keyslot,
+                        hash_pcr_mask,
+                        pcr_bank,
+                        pubkey, pubkey_size,
+                        pubkey_pcr_mask,
+                        primary_alg,
+                        blob, blob_size,
+                        hash, hash_size,
+                        use_pin ? binary_salt : NULL,
+                        use_pin ? sizeof(binary_salt) : 0,
+                        flags,
+                        &v);
         if (r < 0)
                 return log_error_errno(r, "Failed to prepare TPM2 JSON token object: %m");
 
diff --git a/src/cryptenroll/cryptenroll-tpm2.h b/src/cryptenroll/cryptenroll-tpm2.h
index d5dd1b0..b6e0c28 100644
--- a/src/cryptenroll/cryptenroll-tpm2.h
+++ b/src/cryptenroll/cryptenroll-tpm2.h
@@ -7,9 +7,9 @@
 #include "log.h"
 
 #if HAVE_TPM2
-int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask);
+int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t hash_pcr_mask, const char *pubkey_path, uint32_t pubkey_pcr_mask, const char *signature_path, bool use_pin);
 #else
-static inline int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask) {
+static inline int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t hash_pcr_mask, const char *pubkey_path, uint32_t pubkey_pcr_mask, const char *signature_path, bool use_pin) {
         return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                "TPM2 key enrollment not supported.");
 }
diff --git a/src/cryptenroll/cryptenroll-wipe.c b/src/cryptenroll/cryptenroll-wipe.c
index 2255946..8042a0f 100644
--- a/src/cryptenroll/cryptenroll-wipe.c
+++ b/src/cryptenroll/cryptenroll-wipe.c
@@ -367,7 +367,7 @@
 
                 break;
         default:
-                assert_not_reached("Unexpected wipe scope");
+                assert_not_reached();
         }
 
         /* Then add all slots that match a token type */
diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c
index d253b2b..29360ef 100644
--- a/src/cryptenroll/cryptenroll.c
+++ b/src/cryptenroll/cryptenroll.c
@@ -3,6 +3,7 @@
 #include <getopt.h>
 
 #include "ask-password-api.h"
+#include "build.h"
 #include "cryptenroll-fido2.h"
 #include "cryptenroll-list.h"
 #include "cryptenroll-password.h"
@@ -12,7 +13,9 @@
 #include "cryptenroll-wipe.h"
 #include "cryptenroll.h"
 #include "cryptsetup-util.h"
+#include "env-util.h"
 #include "escape.h"
+#include "fileio.h"
 #include "libfido2-util.h"
 #include "main-func.h"
 #include "memory-util.h"
@@ -24,26 +27,44 @@
 #include "string-table.h"
 #include "strv.h"
 #include "terminal-util.h"
+#include "tpm-pcr.h"
 #include "tpm2-util.h"
 
 static EnrollType arg_enroll_type = _ENROLL_TYPE_INVALID;
+static char *arg_unlock_keyfile = NULL;
+static UnlockType arg_unlock_type = UNLOCK_PASSWORD;
+static char *arg_unlock_fido2_device = NULL;
 static char *arg_pkcs11_token_uri = NULL;
 static char *arg_fido2_device = NULL;
 static char *arg_tpm2_device = NULL;
 static uint32_t arg_tpm2_pcr_mask = UINT32_MAX;
+static bool arg_tpm2_pin = false;
+static char *arg_tpm2_public_key = NULL;
+static uint32_t arg_tpm2_public_key_pcr_mask = UINT32_MAX;
+static char *arg_tpm2_signature = NULL;
 static char *arg_node = NULL;
 static int *arg_wipe_slots = NULL;
 static size_t arg_n_wipe_slots = 0;
 static WipeScope arg_wipe_slots_scope = WIPE_EXPLICIT;
 static unsigned arg_wipe_slots_mask = 0; /* Bitmask of (1U << EnrollType), for wiping all slots of specific types */
 static Fido2EnrollFlags arg_fido2_lock_with = FIDO2ENROLL_PIN | FIDO2ENROLL_UP;
+#if HAVE_LIBFIDO2
+static int arg_fido2_cred_alg = COSE_ES256;
+#else
+static int arg_fido2_cred_alg = 0;
+#endif
 
 assert_cc(sizeof(arg_wipe_slots_mask) * 8 >= _ENROLL_TYPE_MAX);
 
+STATIC_DESTRUCTOR_REGISTER(arg_unlock_keyfile, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_unlock_fido2_device, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_pkcs11_token_uri, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_fido2_device, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_tpm2_device, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_public_key, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_signature, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_node, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_wipe_slots, freep);
 
 static bool wipe_requested(void) {
         return arg_n_wipe_slots > 0 ||
@@ -85,8 +106,14 @@
                "     --version         Show package version\n"
                "     --password        Enroll a user-supplied password\n"
                "     --recovery-key    Enroll a recovery key\n"
+               "     --unlock-key-file=PATH\n"
+               "                       Use a file to unlock the volume\n"
+               "     --unlock-fido2-device=PATH\n"
+               "                       Use a FIDO2 device to unlock the volume\n"
                "     --pkcs11-token-uri=URI\n"
                "                       Specify PKCS#11 security token URI\n"
+               "     --fido2-credential-algorithm=STRING\n"
+               "                       Specify COSE algorithm for FIDO2 credential\n"
                "     --fido2-device=PATH\n"
                "                       Enroll a FIDO2-HMAC security token\n"
                "     --fido2-with-client-pin=BOOL\n"
@@ -99,6 +126,15 @@
                "                       Enroll a TPM2 device\n"
                "     --tpm2-pcrs=PCR1+PCR2+PCR3+…\n"
                "                       Specify TPM2 PCRs to seal against\n"
+               "     --tpm2-public-key=PATH\n"
+               "                       Enroll signed TPM2 PCR policy against PEM public key\n"
+               "     --tpm2-public-key-pcrs=PCR1+PCR2+PCR3+…\n"
+               "                       Enroll signed TPM2 PCR policy for specified TPM2 PCRs\n"
+               "     --tpm2-signature=PATH\n"
+               "                       Validate public key enrollment works with JSON signature\n"
+               "                       file\n"
+               "     --tpm2-with-pin=BOOL\n"
+               "                       Whether to require entering a PIN to unlock the volume\n"
                "     --wipe-slot=SLOT1,SLOT2,…\n"
                "                       Wipe specified slots\n"
                "\nSee the %s for details.\n",
@@ -116,29 +152,43 @@
                 ARG_VERSION = 0x100,
                 ARG_PASSWORD,
                 ARG_RECOVERY_KEY,
+                ARG_UNLOCK_KEYFILE,
+                ARG_UNLOCK_FIDO2_DEVICE,
                 ARG_PKCS11_TOKEN_URI,
                 ARG_FIDO2_DEVICE,
                 ARG_TPM2_DEVICE,
                 ARG_TPM2_PCRS,
+                ARG_TPM2_PUBLIC_KEY,
+                ARG_TPM2_PUBLIC_KEY_PCRS,
+                ARG_TPM2_SIGNATURE,
+                ARG_TPM2_PIN,
                 ARG_WIPE_SLOT,
                 ARG_FIDO2_WITH_PIN,
                 ARG_FIDO2_WITH_UP,
                 ARG_FIDO2_WITH_UV,
+                ARG_FIDO2_CRED_ALG,
         };
 
         static const struct option options[] = {
-                { "help",                         no_argument,       NULL, 'h'                  },
-                { "version",                      no_argument,       NULL, ARG_VERSION          },
-                { "password",                     no_argument,       NULL, ARG_PASSWORD         },
-                { "recovery-key",                 no_argument,       NULL, ARG_RECOVERY_KEY     },
-                { "pkcs11-token-uri",             required_argument, NULL, ARG_PKCS11_TOKEN_URI },
-                { "fido2-device",                 required_argument, NULL, ARG_FIDO2_DEVICE     },
-                { "fido2-with-client-pin",        required_argument, NULL, ARG_FIDO2_WITH_PIN   },
-                { "fido2-with-user-presence",     required_argument, NULL, ARG_FIDO2_WITH_UP    },
-                { "fido2-with-user-verification", required_argument, NULL, ARG_FIDO2_WITH_UV    },
-                { "tpm2-device",                  required_argument, NULL, ARG_TPM2_DEVICE      },
-                { "tpm2-pcrs",                    required_argument, NULL, ARG_TPM2_PCRS        },
-                { "wipe-slot",                    required_argument, NULL, ARG_WIPE_SLOT        },
+                { "help",                         no_argument,       NULL, 'h'                       },
+                { "version",                      no_argument,       NULL, ARG_VERSION               },
+                { "password",                     no_argument,       NULL, ARG_PASSWORD              },
+                { "recovery-key",                 no_argument,       NULL, ARG_RECOVERY_KEY          },
+                { "unlock-key-file",              required_argument, NULL, ARG_UNLOCK_KEYFILE        },
+                { "unlock-fido2-device",          required_argument, NULL, ARG_UNLOCK_FIDO2_DEVICE   },
+                { "pkcs11-token-uri",             required_argument, NULL, ARG_PKCS11_TOKEN_URI      },
+                { "fido2-credential-algorithm",   required_argument, NULL, ARG_FIDO2_CRED_ALG        },
+                { "fido2-device",                 required_argument, NULL, ARG_FIDO2_DEVICE          },
+                { "fido2-with-client-pin",        required_argument, NULL, ARG_FIDO2_WITH_PIN        },
+                { "fido2-with-user-presence",     required_argument, NULL, ARG_FIDO2_WITH_UP         },
+                { "fido2-with-user-verification", required_argument, NULL, ARG_FIDO2_WITH_UV         },
+                { "tpm2-device",                  required_argument, NULL, ARG_TPM2_DEVICE           },
+                { "tpm2-pcrs",                    required_argument, NULL, ARG_TPM2_PCRS             },
+                { "tpm2-public-key",              required_argument, NULL, ARG_TPM2_PUBLIC_KEY       },
+                { "tpm2-public-key-pcrs",         required_argument, NULL, ARG_TPM2_PUBLIC_KEY_PCRS  },
+                { "tpm2-signature",               required_argument, NULL, ARG_TPM2_SIGNATURE        },
+                { "tpm2-with-pin",                required_argument, NULL, ARG_TPM2_PIN              },
+                { "wipe-slot",                    required_argument, NULL, ARG_WIPE_SLOT             },
                 {}
         };
 
@@ -206,6 +256,38 @@
                         arg_enroll_type = ENROLL_RECOVERY;
                         break;
 
+                case ARG_UNLOCK_KEYFILE:
+                        if (arg_unlock_type != UNLOCK_PASSWORD)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Multiple unlock methods specified at once, refusing.");
+
+                        r = parse_path_argument(optarg, /* suppress_root= */ true, &arg_unlock_keyfile);
+                        if (r < 0)
+                                return r;
+
+                        arg_unlock_type = UNLOCK_KEYFILE;
+                        break;
+
+                case ARG_UNLOCK_FIDO2_DEVICE: {
+                        _cleanup_free_ char *device = NULL;
+
+                        if (arg_unlock_type != UNLOCK_PASSWORD)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Multiple unlock methods specified at once, refusing.");
+
+                        assert(!arg_unlock_fido2_device);
+
+                        if (!streq(optarg, "auto")) {
+                                device = strdup(optarg);
+                                if (!device)
+                                        return log_oom();
+                        }
+
+                        arg_unlock_type = UNLOCK_FIDO2;
+                        arg_unlock_fido2_device = TAKE_PTR(device);
+                        break;
+                }
+
                 case ARG_PKCS11_TOKEN_URI: {
                         _cleanup_free_ char *uri = NULL;
 
@@ -234,6 +316,12 @@
                         break;
                 }
 
+                case ARG_FIDO2_CRED_ALG:
+                        r = parse_fido2_algorithm(optarg, &arg_fido2_cred_alg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse COSE algorithm: %s", optarg);
+                        break;
+
                 case ARG_FIDO2_DEVICE: {
                         _cleanup_free_ char *device = NULL;
 
@@ -244,11 +332,7 @@
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                        "Multiple operations specified at once, refusing.");
 
-                        if (streq(optarg, "auto")) {
-                                r = fido2_find_device_auto(&device);
-                                if (r < 0)
-                                        return r;
-                        } else {
+                        if (!streq(optarg, "auto")) {
                                 device = strdup(optarg);
                                 if (!device)
                                         return log_oom();
@@ -280,25 +364,40 @@
                         break;
                 }
 
-                case ARG_TPM2_PCRS: {
-                        uint32_t mask;
-
-                        if (isempty(optarg)) {
-                                arg_tpm2_pcr_mask = 0;
-                                break;
-                        }
-
-                        r = tpm2_parse_pcrs(optarg, &mask);
+                case ARG_TPM2_PCRS:
+                        r = tpm2_parse_pcr_argument(optarg, &arg_tpm2_pcr_mask);
                         if (r < 0)
                                 return r;
 
-                        if (arg_tpm2_pcr_mask == UINT32_MAX)
-                                arg_tpm2_pcr_mask = mask;
-                        else
-                                arg_tpm2_pcr_mask |= mask;
+                        break;
+
+                case ARG_TPM2_PIN:
+                        r = parse_boolean_argument("--tpm2-with-pin=", optarg, &arg_tpm2_pin);
+                        if (r < 0)
+                                return r;
 
                         break;
-                }
+
+                case ARG_TPM2_PUBLIC_KEY:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_tpm2_public_key);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_TPM2_PUBLIC_KEY_PCRS:
+                        r = tpm2_parse_pcr_argument(optarg, &arg_tpm2_public_key_pcr_mask);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_TPM2_SIGNATURE:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_tpm2_signature);
+                        if (r < 0)
+                                return r;
+
+                        break;
 
                 case ARG_WIPE_SLOT: {
                         const char *p = optarg;
@@ -358,10 +457,22 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
         }
 
+        if ((arg_enroll_type == ENROLL_FIDO2 && arg_unlock_type == UNLOCK_FIDO2)
+                        && !(arg_fido2_device && arg_unlock_fido2_device))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "When both enrolling and unlocking with FIDO2 tokens, automatic discovery is unsupported. "
+                                       "Please specify device paths for enrolling and unlocking respectively.");
+
+        if (arg_enroll_type == ENROLL_FIDO2 && !arg_fido2_device) {
+                r = fido2_find_device_auto(&arg_fido2_device);
+                if (r < 0)
+                        return r;
+        }
+
         if (optind >= argc)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "No block device node specified, refusing.");
@@ -376,10 +487,72 @@
 
         if (arg_tpm2_pcr_mask == UINT32_MAX)
                 arg_tpm2_pcr_mask = TPM2_PCR_MASK_DEFAULT;
+        if (arg_tpm2_public_key_pcr_mask == UINT32_MAX)
+                arg_tpm2_public_key_pcr_mask = UINT32_C(1) << TPM_PCR_INDEX_KERNEL_IMAGE;
 
         return 1;
 }
 
+static int check_for_homed(struct crypt_device *cd) {
+        int r;
+
+        assert_se(cd);
+
+        /* Politely refuse operating on homed volumes. The enrolled tokens for the user record and the LUKS2
+         * volume should not get out of sync. */
+
+        for (int token = 0; token < crypt_token_max(CRYPT_LUKS2); token ++) {
+                r = cryptsetup_get_token_as_json(cd, token, "systemd-homed", NULL);
+                if (IN_SET(r, -ENOENT, -EINVAL, -EMEDIUMTYPE))
+                        continue;
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read JSON token data off disk: %m");
+
+                return log_error_errno(SYNTHETIC_ERRNO(EHOSTDOWN),
+                                       "LUKS2 volume is managed by systemd-homed, please use homectl to enroll tokens.");
+        }
+
+        return 0;
+}
+
+static int load_volume_key_keyfile(
+                struct crypt_device *cd,
+                void *ret_vk,
+                size_t *ret_vks) {
+
+        _cleanup_(erase_and_freep) char *password = NULL;
+        size_t password_len;
+        int r;
+
+        assert_se(cd);
+        assert_se(ret_vk);
+        assert_se(ret_vks);
+
+        r = read_full_file_full(
+                        AT_FDCWD,
+                        arg_unlock_keyfile,
+                        0,
+                        SIZE_MAX,
+                        READ_FULL_FILE_SECURE|READ_FULL_FILE_WARN_WORLD_READABLE|READ_FULL_FILE_CONNECT_SOCKET,
+                        NULL,
+                        &password,
+                        &password_len);
+        if (r < 0)
+                return log_error_errno(r, "Reading keyfile %s failed: %m", arg_unlock_keyfile);
+
+        r = crypt_volume_key_get(
+                        cd,
+                        CRYPT_ANY_SLOT,
+                        ret_vk,
+                        ret_vks,
+                        password,
+                        password_len);
+        if (r < 0)
+                return log_error_errno(r, "Unlocking via keyfile failed: %m");
+
+        return r;
+}
+
 static int prepare_luks(
                 struct crypt_device **ret_cd,
                 void **ret_volume_key,
@@ -387,7 +560,6 @@
 
         _cleanup_(crypt_freep) struct crypt_device *cd = NULL;
         _cleanup_(erase_and_freep) void *vk = NULL;
-        char *e = NULL;
         size_t vks;
         int r;
 
@@ -404,6 +576,10 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to load LUKS2 superblock: %m");
 
+        r = check_for_homed(cd);
+        if (r < 0)
+                return r;
+
         if (!ret_volume_key) {
                 *ret_cd = TAKE_PTR(cd);
                 return 0;
@@ -418,77 +594,27 @@
         if (!vk)
                 return log_oom();
 
-        e = getenv("PASSWORD");
-        if (e) {
-                _cleanup_(erase_and_freep) char *password = NULL;
+        switch (arg_unlock_type) {
 
-                password = strdup(e);
-                if (!password)
-                        return log_oom();
+        case UNLOCK_KEYFILE:
+                r = load_volume_key_keyfile(cd, vk, &vks);
+                break;
 
-                string_erase(e);
-                assert_se(unsetenv("PASSWORD") >= 0);
+        case UNLOCK_FIDO2:
+                r = load_volume_key_fido2(cd, arg_node, arg_unlock_fido2_device, vk, &vks);
+                break;
 
-                r = crypt_volume_key_get(
-                                cd,
-                                CRYPT_ANY_SLOT,
-                                vk,
-                                &vks,
-                                password,
-                                strlen(password));
-                if (r < 0)
-                        return log_error_errno(r, "Password from environment variable $PASSWORD did not work.");
-        } else {
-                AskPasswordFlags ask_password_flags = ASK_PASSWORD_PUSH_CACHE|ASK_PASSWORD_ACCEPT_CACHED;
-                _cleanup_free_ char *question = NULL, *disk_path = NULL;
-                unsigned i = 5;
-                const char *id;
+        case UNLOCK_PASSWORD:
+                r = load_volume_key_password(cd, arg_node, vk, &vks);
+                break;
 
-                question = strjoin("Please enter current passphrase for disk ", arg_node, ":");
-                if (!question)
-                        return log_oom();
-
-                disk_path = cescape(arg_node);
-                if (!disk_path)
-                        return log_oom();
-
-                id = strjoina("cryptsetup:", disk_path);
-
-                for (;;) {
-                        _cleanup_strv_free_erase_ char **passwords = NULL;
-                        char **p;
-
-                        if (--i == 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(ENOKEY),
-                                                       "Too many attempts, giving up:");
-
-                        r = ask_password_auto(
-                                        question, "drive-harddisk", id, "cryptenroll", "cryptenroll.passphrase", USEC_INFINITY,
-                                        ask_password_flags,
-                                        &passwords);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to query password: %m");
-
-                        r = -EPERM;
-                        STRV_FOREACH(p, passwords) {
-                                r = crypt_volume_key_get(
-                                                cd,
-                                                CRYPT_ANY_SLOT,
-                                                vk,
-                                                &vks,
-                                                *p,
-                                                strlen(*p));
-                                if (r >= 0)
-                                        break;
-                        }
-                        if (r >= 0)
-                                break;
-
-                        log_error_errno(r, "Password not correct, please try again.");
-                        ask_password_flags &= ~ASK_PASSWORD_ACCEPT_CACHED;
-                }
+        default:
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown LUKS unlock method");
         }
 
+        if (r < 0)
+                return r;
+
         *ret_cd = TAKE_PTR(cd);
         *ret_volume_key = TAKE_PTR(vk);
         *ret_volume_key_size = vks;
@@ -534,11 +660,11 @@
                 break;
 
         case ENROLL_FIDO2:
-                slot = enroll_fido2(cd, vk, vks, arg_fido2_device, arg_fido2_lock_with);
+                slot = enroll_fido2(cd, vk, vks, arg_fido2_device, arg_fido2_lock_with, arg_fido2_cred_alg);
                 break;
 
         case ENROLL_TPM2:
-                slot = enroll_tpm2(cd, vk, vks, arg_tpm2_device, arg_tpm2_pcr_mask);
+                slot = enroll_tpm2(cd, vk, vks, arg_tpm2_device, arg_tpm2_pcr_mask, arg_tpm2_public_key, arg_tpm2_public_key_pcr_mask, arg_tpm2_signature, arg_tpm2_pin);
                 break;
 
         case _ENROLL_TYPE_INVALID:
diff --git a/src/cryptenroll/cryptenroll.h b/src/cryptenroll/cryptenroll.h
index b28d9db..335d9cc 100644
--- a/src/cryptenroll/cryptenroll.h
+++ b/src/cryptenroll/cryptenroll.h
@@ -13,6 +13,14 @@
         _ENROLL_TYPE_INVALID = -EINVAL,
 } EnrollType;
 
+typedef enum UnlockType {
+        UNLOCK_PASSWORD,
+        UNLOCK_KEYFILE,
+        UNLOCK_FIDO2,
+        _UNLOCK_TYPE_MAX,
+        _UNLOCK_TYPE_INVALID = -EINVAL,
+} UnlockType;
+
 typedef enum WipeScope {
         WIPE_EXPLICIT,          /* only wipe the listed slots */
         WIPE_ALL,               /* wipe all slots */
diff --git a/src/cryptenroll/meson.build b/src/cryptenroll/meson.build
index 0a79593..9080af0 100644
--- a/src/cryptenroll/meson.build
+++ b/src/cryptenroll/meson.build
@@ -1,19 +1,12 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 systemd_cryptenroll_sources = files(
-        'cryptenroll-fido2.h',
         'cryptenroll-list.c',
-        'cryptenroll-list.h',
         'cryptenroll-password.c',
-        'cryptenroll-password.h',
-        'cryptenroll-pkcs11.h',
         'cryptenroll-recovery.c',
-        'cryptenroll-recovery.h',
-        'cryptenroll-tpm2.h',
         'cryptenroll-wipe.c',
-        'cryptenroll-wipe.h',
         'cryptenroll.c',
-        'cryptenroll.h')
+)
 
 if conf.get('HAVE_P11KIT') == 1 and conf.get('HAVE_OPENSSL') == 1
         systemd_cryptenroll_sources += files('cryptenroll-pkcs11.c')
diff --git a/src/cryptsetup/cryptsetup-fido2.c b/src/cryptsetup/cryptsetup-fido2.c
deleted file mode 100644
index dfaded3..0000000
--- a/src/cryptsetup/cryptsetup-fido2.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "ask-password-api.h"
-#include "cryptsetup-fido2.h"
-#include "fileio.h"
-#include "hexdecoct.h"
-#include "json.h"
-#include "libfido2-util.h"
-#include "parse-util.h"
-#include "random-util.h"
-#include "strv.h"
-
-int acquire_fido2_key(
-                const char *volume_name,
-                const char *friendly_name,
-                const char *device,
-                const char *rp_id,
-                const void *cid,
-                size_t cid_size,
-                const char *key_file,
-                size_t key_file_size,
-                uint64_t key_file_offset,
-                const void *key_data,
-                size_t key_data_size,
-                usec_t until,
-                bool headless,
-                Fido2EnrollFlags required,
-                void **ret_decrypted_key,
-                size_t *ret_decrypted_key_size,
-                AskPasswordFlags ask_password_flags) {
-
-        _cleanup_strv_free_erase_ char **pins = NULL;
-        _cleanup_free_ void *loaded_salt = NULL;
-        const char *salt;
-        size_t salt_size;
-        char *e;
-        int r;
-
-        ask_password_flags |= ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_ACCEPT_CACHED;
-
-        assert(cid);
-        assert(key_file || key_data);
-
-        if (key_data) {
-                salt = key_data;
-                salt_size = key_data_size;
-        } else {
-                _cleanup_free_ char *bindname = NULL;
-
-                /* If we read the salt via AF_UNIX, make this client recognizable */
-                if (asprintf(&bindname, "@%" PRIx64"/cryptsetup-fido2/%s", random_u64(), volume_name) < 0)
-                        return log_oom();
-
-                r = read_full_file_full(
-                                AT_FDCWD, key_file,
-                                key_file_offset == 0 ? UINT64_MAX : key_file_offset,
-                                key_file_size == 0 ? SIZE_MAX : key_file_size,
-                                READ_FULL_FILE_CONNECT_SOCKET,
-                                bindname,
-                                (char**) &loaded_salt, &salt_size);
-                if (r < 0)
-                        return r;
-
-                salt = loaded_salt;
-        }
-
-        e = getenv("PIN");
-        if (e) {
-                pins = strv_new(e);
-                if (!pins)
-                        return log_oom();
-
-                string_erase(e);
-                if (unsetenv("PIN") < 0)
-                        return log_error_errno(errno, "Failed to unset $PIN: %m");
-        }
-
-        for (;;) {
-                if (!FLAGS_SET(required, FIDO2ENROLL_PIN) || pins) {
-                        r = fido2_use_hmac_hash(
-                                        device,
-                                        rp_id ?: "io.systemd.cryptsetup",
-                                        salt, salt_size,
-                                        cid, cid_size,
-                                        pins,
-                                        required,
-                                        ret_decrypted_key,
-                                        ret_decrypted_key_size);
-                        if (!IN_SET(r,
-                                    -ENOANO,   /* needs pin */
-                                    -ENOLCK))  /* pin incorrect */
-                                return r;
-                }
-
-                pins = strv_free_erase(pins);
-
-                if (headless)
-                        return log_error_errno(SYNTHETIC_ERRNO(ENOPKG), "PIN querying disabled via 'headless' option. Use the '$PIN' environment variable.");
-
-                r = ask_password_auto("Please enter security token PIN:", "drive-harddisk", NULL, "fido2-pin", "cryptsetup.fido2-pin", until, ask_password_flags, &pins);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to ask for user password: %m");
-
-                ask_password_flags &= ~ASK_PASSWORD_ACCEPT_CACHED;
-        }
-}
-
-int find_fido2_auto_data(
-                struct crypt_device *cd,
-                char **ret_rp_id,
-                void **ret_salt,
-                size_t *ret_salt_size,
-                void **ret_cid,
-                size_t *ret_cid_size,
-                int *ret_keyslot,
-                Fido2EnrollFlags *ret_required) {
-
-        _cleanup_free_ void *cid = NULL, *salt = NULL;
-        size_t cid_size = 0, salt_size = 0;
-        _cleanup_free_ char *rp = NULL;
-        int r, keyslot = -1;
-        Fido2EnrollFlags required = 0;
-
-        assert(cd);
-        assert(ret_salt);
-        assert(ret_salt_size);
-        assert(ret_cid);
-        assert(ret_cid_size);
-        assert(ret_keyslot);
-        assert(ret_required);
-
-        /* Loads FIDO2 metadata from LUKS2 JSON token headers. */
-
-        for (int token = 0; token < sym_crypt_token_max(CRYPT_LUKS2); token ++) {
-                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
-                JsonVariant *w;
-
-                r = cryptsetup_get_token_as_json(cd, token, "systemd-fido2", &v);
-                if (IN_SET(r, -ENOENT, -EINVAL, -EMEDIUMTYPE))
-                        continue;
-                if (r < 0)
-                        return log_error_errno(r, "Failed to read JSON token data off disk: %m");
-
-                if (cid)
-                        return log_error_errno(SYNTHETIC_ERRNO(ENOTUNIQ),
-                                               "Multiple FIDO2 tokens enrolled, cannot automatically determine token.");
-
-                w = json_variant_by_key(v, "fido2-credential");
-                if (!w || !json_variant_is_string(w))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "FIDO2 token data lacks 'fido2-credential' field.");
-
-                r = unbase64mem(json_variant_string(w), SIZE_MAX, &cid, &cid_size);
-                if (r < 0)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Invalid base64 data in 'fido2-credential' field.");
-
-                w = json_variant_by_key(v, "fido2-salt");
-                if (!w || !json_variant_is_string(w))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "FIDO2 token data lacks 'fido2-salt' field.");
-
-                assert(!salt);
-                assert(salt_size == 0);
-                r = unbase64mem(json_variant_string(w), SIZE_MAX, &salt, &salt_size);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to decode base64 encoded salt.");
-
-                assert(keyslot < 0);
-                keyslot = cryptsetup_get_keyslot_from_token(v);
-                if (keyslot < 0)
-                        return log_error_errno(keyslot, "Failed to extract keyslot index from FIDO2 JSON data: %m");
-
-                w = json_variant_by_key(v, "fido2-rp");
-                if (w) {
-                        /* The "rp" field is optional. */
-
-                        if (!json_variant_is_string(w))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "FIDO2 token data's 'fido2-rp' field is not a string.");
-
-                        assert(!rp);
-                        rp = strdup(json_variant_string(w));
-                        if (!rp)
-                                return log_oom();
-                }
-
-                w = json_variant_by_key(v, "fido2-clientPin-required");
-                if (w) {
-                        /* The "fido2-clientPin-required" field is optional. */
-
-                        if (!json_variant_is_boolean(w))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "FIDO2 token data's 'fido2-clientPin-required' field is not a boolean.");
-
-                        SET_FLAG(required, FIDO2ENROLL_PIN, json_variant_boolean(w));
-                } else
-                        required |= FIDO2ENROLL_PIN_IF_NEEDED; /* compat with 248, where the field was unset */
-
-                w = json_variant_by_key(v, "fido2-up-required");
-                if (w) {
-                        /* The "fido2-up-required" field is optional. */
-
-                        if (!json_variant_is_boolean(w))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "FIDO2 token data's 'fido2-up-required' field is not a boolean.");
-
-                        SET_FLAG(required, FIDO2ENROLL_UP, json_variant_boolean(w));
-                } else
-                        required |= FIDO2ENROLL_UP_IF_NEEDED; /* compat with 248 */
-
-                w = json_variant_by_key(v, "fido2-uv-required");
-                if (w) {
-                        /* The "fido2-uv-required" field is optional. */
-
-                        if (!json_variant_is_boolean(w))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "FIDO2 token data's 'fido2-uv-required' field is not a boolean.");
-
-                        SET_FLAG(required, FIDO2ENROLL_UV, json_variant_boolean(w));
-                } else
-                        required |= FIDO2ENROLL_UV_OMIT; /* compat with 248 */
-        }
-
-        if (!cid)
-                return log_error_errno(SYNTHETIC_ERRNO(ENXIO),
-                                       "No valid FIDO2 token data found.");
-
-        log_info("Automatically discovered security FIDO2 token unlocks volume.");
-
-        *ret_rp_id = TAKE_PTR(rp);
-        *ret_cid = TAKE_PTR(cid);
-        *ret_cid_size = cid_size;
-        *ret_salt = TAKE_PTR(salt);
-        *ret_salt_size = salt_size;
-        *ret_keyslot = keyslot;
-        *ret_required = required;
-        return 0;
-}
diff --git a/src/cryptsetup/cryptsetup-fido2.h b/src/cryptsetup/cryptsetup-fido2.h
deleted file mode 100644
index 204f1e0..0000000
--- a/src/cryptsetup/cryptsetup-fido2.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <sys/types.h>
-
-#include "cryptsetup-util.h"
-#include "libfido2-util.h"
-#include "log.h"
-#include "time-util.h"
-
-#if HAVE_LIBFIDO2
-
-int acquire_fido2_key(
-                const char *volume_name,
-                const char *friendly_name,
-                const char *device,
-                const char *rp_id,
-                const void *cid,
-                size_t cid_size,
-                const char *key_file,
-                size_t key_file_size,
-                uint64_t key_file_offset,
-                const void *key_data,
-                size_t key_data_size,
-                usec_t until,
-                bool headless,
-                Fido2EnrollFlags required,
-                void **ret_decrypted_key,
-                size_t *ret_decrypted_key_size,
-                AskPasswordFlags ask_password_flags);
-
-int find_fido2_auto_data(
-                struct crypt_device *cd,
-                char **ret_rp_id,
-                void **ret_salt,
-                size_t *ret_salt_size,
-                void **ret_cid,
-                size_t *ret_cid_size,
-                int *ret_keyslot,
-                Fido2EnrollFlags *ret_required);
-
-#else
-
-static inline int acquire_fido2_key(
-                const char *volume_name,
-                const char *friendly_name,
-                const char *device,
-                const char *rp_id,
-                const void *cid,
-                size_t cid_size,
-                const char *key_file,
-                size_t key_file_size,
-                uint64_t key_file_offset,
-                const void *key_data,
-                size_t key_data_size,
-                usec_t until,
-                bool headless,
-                Fido2EnrollFlags required,
-                void **ret_decrypted_key,
-                size_t *ret_decrypted_key_size,
-                AskPasswordFlags ask_password_flags) {
-
-        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                               "FIDO2 token support not available.");
-}
-
-static inline int find_fido2_auto_data(
-                struct crypt_device *cd,
-                char **ret_rp_id,
-                void **ret_salt,
-                size_t *ret_salt_size,
-                void **ret_cid,
-                size_t *ret_cid_size,
-                int *ret_keyslot,
-                Fido2EnrollFlags *ret_required) {
-
-        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                               "FIDO2 token support not available.");
-}
-#endif
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
index 98c8408..083878e 100644
--- a/src/cryptsetup/cryptsetup-generator.c
+++ b/src/cryptsetup/cryptsetup-generator.c
@@ -23,7 +23,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "unit-name.h"
-#include "util.h"
 
 typedef struct crypto_device {
         char *uuid;
@@ -227,9 +226,11 @@
         return 0;
 }
 
-static int print_dependencies(FILE *f, const char* device_path) {
+static int print_dependencies(FILE *f, const char* device_path, const char* timeout_value, bool canfail) {
         int r;
 
+        assert(!canfail || timeout_value);
+
         if (STR_IN_SET(device_path, "-", "none"))
                 /* None, nothing to do */
                 return 0;
@@ -259,9 +260,16 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to generate unit name: %m");
 
-                fprintf(f,
-                        "After=%1$s\n"
-                        "Requires=%1$s\n", unit);
+                fprintf(f, "After=%1$s\n", unit);
+                if (canfail) {
+                        fprintf(f, "Wants=%1$s\n", unit);
+                        r = write_drop_in_format(arg_dest, unit, 90, "device-timeout",
+                                "# Automatically generated by systemd-cryptsetup-generator \n\n"
+                                "[Unit]\nJobRunningTimeoutSec=%s", timeout_value);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to write device drop-in: %m");
+                } else
+                        fprintf(f, "Requires=%1$s\n", unit);
         } else {
                 /* Regular file, add mount dependency */
                 _cleanup_free_ char *escaped_path = specifier_escape(device_path);
@@ -277,7 +285,7 @@
 static int create_disk(
                 const char *name,
                 const char *device,
-                const char *password,
+                const char *key_file,
                 const char *keydev,
                 const char *headerdev,
                 const char *options,
@@ -285,7 +293,7 @@
 
         _cleanup_free_ char *n = NULL, *d = NULL, *u = NULL, *e = NULL,
                 *keydev_mount = NULL, *keyfile_timeout_value = NULL,
-                *filtered = NULL, *u_escaped = NULL, *name_escaped = NULL, *header_path = NULL, *password_buffer = NULL,
+                *filtered = NULL, *u_escaped = NULL, *name_escaped = NULL, *header_path = NULL, *key_file_buffer = NULL,
                 *tmp_fstype = NULL, *filtered_header = NULL, *headerdev_mount = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         const char *dmname;
@@ -350,9 +358,9 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to generate unit name: %m");
 
-        if (keydev && !password)
+        if (keydev && !key_file)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Key device is specified, but path to the password file is missing.");
+                                       "Key device is specified, but path to the key file is missing.");
 
         r = generator_open_unit_file(arg_dest, NULL, n, &f);
         if (r < 0)
@@ -388,11 +396,11 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to generate keydev umount unit: %m");
 
-                password_buffer = path_join(keydev_mount, password);
-                if (!password_buffer)
+                key_file_buffer = path_join(keydev_mount, key_file);
+                if (!key_file_buffer)
                         return log_oom();
 
-                password = password_buffer;
+                key_file = key_file_buffer;
 
                 fprintf(f, "After=%s\n", unit);
                 if (keyfile_can_timeout > 0)
@@ -462,15 +470,19 @@
                         "Before=%s\n",
                         netdev ? "remote-cryptsetup.target" : "cryptsetup.target");
 
-        if (password && !keydev) {
-                r = print_dependencies(f, password);
+        if (key_file && !keydev) {
+                r = print_dependencies(f, key_file,
+                        keyfile_timeout_value,
+                        /* canfail= */ keyfile_can_timeout > 0);
                 if (r < 0)
                         return r;
         }
 
         /* Check if a header option was specified */
         if (detached_header > 0 && !headerdev) {
-                r = print_dependencies(f, header_path);
+                r = print_dependencies(f, header_path,
+                        NULL,
+                        /* canfail= */ false); /* header is always necessary */
                 if (r < 0)
                         return r;
         }
@@ -495,7 +507,7 @@
         if (r < 0)
                 log_warning_errno(r, "Failed to write device timeout drop-in: %m");
 
-        r = generator_write_cryptsetup_service_section(f, name, u, password, filtered);
+        r = generator_write_cryptsetup_service_section(f, name, u, key_file, filtered);
         if (r < 0)
                 return r;
 
diff --git a/src/cryptsetup/cryptsetup-keyfile.c b/src/cryptsetup/cryptsetup-keyfile.c
index 924555d..1867e90 100644
--- a/src/cryptsetup/cryptsetup-keyfile.c
+++ b/src/cryptsetup/cryptsetup-keyfile.c
@@ -12,7 +12,6 @@
                 void **ret_key,
                 size_t *ret_key_size) {
 
-        char **i;
         int r;
 
         assert(key_file);
diff --git a/src/cryptsetup/cryptsetup-pkcs11.c b/src/cryptsetup/cryptsetup-pkcs11.c
index e743f10..f991389 100644
--- a/src/cryptsetup/cryptsetup-pkcs11.c
+++ b/src/cryptsetup/cryptsetup-pkcs11.c
@@ -24,83 +24,6 @@
 #include "stat-util.h"
 #include "strv.h"
 
-struct pkcs11_callback_data {
-        const char *friendly_name;
-        usec_t until;
-        void *encrypted_key;
-        size_t encrypted_key_size;
-        void *decrypted_key;
-        size_t decrypted_key_size;
-        bool free_encrypted_key;
-        bool headless;
-};
-
-static void pkcs11_callback_data_release(struct pkcs11_callback_data *data) {
-        erase_and_free(data->decrypted_key);
-
-        if (data->free_encrypted_key)
-                free(data->encrypted_key);
-}
-
-static int pkcs11_callback(
-                CK_FUNCTION_LIST *m,
-                CK_SESSION_HANDLE session,
-                CK_SLOT_ID slot_id,
-                const CK_SLOT_INFO *slot_info,
-                const CK_TOKEN_INFO *token_info,
-                P11KitUri *uri,
-                void *userdata) {
-
-        struct pkcs11_callback_data *data = userdata;
-        CK_OBJECT_HANDLE object;
-        int r;
-
-        assert(m);
-        assert(slot_info);
-        assert(token_info);
-        assert(uri);
-        assert(data);
-
-        /* Called for every token matching our URI */
-
-        r = pkcs11_token_login(
-                        m,
-                        session,
-                        slot_id,
-                        token_info,
-                        data->friendly_name,
-                        "drive-harddisk",
-                        "pkcs11-pin",
-                        "cryptsetup.pkcs11-pin",
-                        data->until,
-                        data->headless,
-                        NULL);
-        if (r < 0)
-                return r;
-
-        /* We are likely called during early boot, where entropy is scarce. Mix some data from the PKCS#11
-         * token, if it supports that. It should be cheap, given that we already are talking to it anyway and
-         * shouldn't hurt. */
-        (void) pkcs11_token_acquire_rng(m, session);
-
-        r = pkcs11_token_find_private_key(m, session, uri, &object);
-        if (r < 0)
-                return r;
-
-        r = pkcs11_token_decrypt_data(
-                        m,
-                        session,
-                        object,
-                        data->encrypted_key,
-                        data->encrypted_key_size,
-                        &data->decrypted_key,
-                        &data->decrypted_key_size);
-        if (r < 0)
-                return r;
-
-        return 0;
-}
-
 int decrypt_pkcs11_key(
                 const char *volume_name,
                 const char *friendly_name,
@@ -115,7 +38,7 @@
                 void **ret_decrypted_key,
                 size_t *ret_decrypted_key_size) {
 
-        _cleanup_(pkcs11_callback_data_release) struct pkcs11_callback_data data = {
+        _cleanup_(pkcs11_crypt_device_callback_data_release) pkcs11_crypt_device_callback_data data = {
                 .friendly_name = friendly_name,
                 .until = until,
                 .headless = headless,
@@ -155,7 +78,7 @@
                 data.free_encrypted_key = true;
         }
 
-        r = pkcs11_find_token(pkcs11_uri, pkcs11_callback, &data);
+        r = pkcs11_find_token(pkcs11_uri, pkcs11_crypt_device_callback, &data);
         if (r < 0)
                 return r;
 
@@ -188,6 +111,7 @@
         for (int token = 0; token < sym_crypt_token_max(CRYPT_LUKS2); token++) {
                 _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
                 JsonVariant *w;
+                int ks;
 
                 r = cryptsetup_get_token_as_json(cd, token, "systemd-pkcs11", &v);
                 if (IN_SET(r, -ENOENT, -EINVAL, -EMEDIUMTYPE))
@@ -195,10 +119,21 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to read JSON token data off disk: %m");
 
+                ks = cryptsetup_get_keyslot_from_token(v);
+                if (ks < 0) {
+                        /* Handle parsing errors of the keyslots field gracefully, since it's not 'owned' by
+                         * us, but by the LUKS2 spec */
+                        log_warning_errno(ks, "Failed to extract keyslot index from PKCS#11 JSON data token %i, skipping: %m", token);
+                        continue;
+                }
+
                 if (uri)
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTUNIQ),
                                                "Multiple PKCS#11 tokens enrolled, cannot automatically determine token.");
 
+                assert(keyslot < 0);
+                keyslot = ks;
+
                 w = json_variant_by_key(v, "pkcs11-uri");
                 if (!w || !json_variant_is_string(w))
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -222,11 +157,6 @@
                 r = unbase64mem(json_variant_string(w), SIZE_MAX, &key, &key_size);
                 if (r < 0)
                         return log_error_errno(r, "Failed to decode base64 encoded key.");
-
-                assert(keyslot < 0);
-                keyslot = cryptsetup_get_keyslot_from_token(v);
-                if (keyslot < 0)
-                        return log_error_errno(keyslot, "Failed to extract keyslot index from PKCS#11 JSON data: %m");
         }
 
         if (!uri)
diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-fido2.c b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-fido2.c
new file mode 100644
index 0000000..3027804
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-fido2.c
@@ -0,0 +1,218 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <libcryptsetup.h>
+#include <string.h>
+
+#include "cryptsetup-token.h"
+#include "cryptsetup-token-util.h"
+#include "hexdecoct.h"
+#include "json.h"
+#include "luks2-fido2.h"
+#include "memory-util.h"
+#include "version.h"
+
+#define TOKEN_NAME "systemd-fido2"
+#define TOKEN_VERSION_MAJOR "1"
+#define TOKEN_VERSION_MINOR "0"
+
+/* for libcryptsetup debug purpose */
+_public_ const char *cryptsetup_token_version(void) {
+        return TOKEN_VERSION_MAJOR "." TOKEN_VERSION_MINOR " systemd-v" STRINGIFY(PROJECT_VERSION) " (" GIT_VERSION ")";
+}
+
+_public_ int cryptsetup_token_open_pin(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                int token /* is always >= 0 */,
+                const char *pin,
+                size_t pin_size,
+                char **password, /* freed by cryptsetup_token_buffer_free */
+                size_t *password_len,
+                void *usrptr /* plugin defined parameter passed to crypt_activate_by_token*() API */) {
+
+        int r;
+        const char *json;
+        _cleanup_(erase_and_freep) char *pin_string = NULL;
+
+        assert(!pin || pin_size);
+        assert(token >= 0);
+
+        /* This must not fail at this moment (internal error) */
+        r = crypt_token_json_get(cd, token, &json);
+        /* Use assert_se() here to avoid emitting warning with -DNDEBUG */
+        assert_se(token == r);
+        assert(json);
+
+        r = crypt_normalize_pin(pin, pin_size, &pin_string);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Can not normalize PIN: %m");
+
+        return acquire_luks2_key(cd, json, (const char *)usrptr, pin_string, password, password_len);
+}
+
+/*
+ * This function is called from within following libcryptsetup calls
+ * provided conditions further below are met:
+ *
+ * crypt_activate_by_token(), crypt_activate_by_token_type(type == 'systemd-fido2'):
+ *
+ * - token is assigned to at least one luks2 keyslot eligible to activate LUKS2 device
+ *   (alternatively: name is set to null, flags contains CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY
+ *    and token is assigned to at least single keyslot).
+ *
+ * - if plugin defines validate function (see cryptsetup_token_validate below) it must have
+ *   passed the check (aka return 0)
+ */
+_public_ int cryptsetup_token_open(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                int token /* is always >= 0 */,
+                char **password, /* freed by cryptsetup_token_buffer_free */
+                size_t *password_len,
+                void *usrptr /* plugin defined parameter passed to crypt_activate_by_token*() API */) {
+
+        return cryptsetup_token_open_pin(cd, token, NULL, 0, password, password_len, usrptr);
+}
+
+/*
+ * libcryptsetup callback for memory deallocation of 'password' parameter passed in
+ * any crypt_token_open_* plugin function
+ */
+_public_ void cryptsetup_token_buffer_free(void *buffer, size_t buffer_len) {
+        erase_and_free(buffer);
+}
+
+/*
+ * prints systemd-fido2 token content in crypt_dump().
+ * 'type' and 'keyslots' fields are printed by libcryptsetup
+ */
+_public_ void cryptsetup_token_dump(
+                struct crypt_device *cd /* is always LUKS2 context */,
+                const char *json /* validated 'systemd-tpm2' token if cryptsetup_token_validate is defined */) {
+
+        int r;
+        Fido2EnrollFlags required;
+        size_t cid_size, salt_size;
+        const char *client_pin_req_str, *up_req_str, *uv_req_str;
+        _cleanup_free_ void *cid = NULL, *salt = NULL;
+        _cleanup_free_ char *rp_id = NULL, *cid_str = NULL, *salt_str = NULL;
+
+        assert(json);
+
+        r = parse_luks2_fido2_data(cd, json, &rp_id, &salt, &salt_size, &cid, &cid_size, &required);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Failed to parse " TOKEN_NAME " metadata: %m.");
+
+        r = crypt_dump_buffer_to_hex_string(cid, cid_size, &cid_str);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Can not dump " TOKEN_NAME " content: %m");
+
+        r = crypt_dump_buffer_to_hex_string(salt, salt_size, &salt_str);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Can not dump " TOKEN_NAME " content: %m");
+
+        if (required & FIDO2ENROLL_PIN)
+                client_pin_req_str = "true";
+        else if (required & FIDO2ENROLL_PIN_IF_NEEDED)
+                client_pin_req_str = NULL;
+        else
+                client_pin_req_str = "false";
+
+        if (required & FIDO2ENROLL_UP)
+                up_req_str = "true";
+        else if (required & FIDO2ENROLL_UP_IF_NEEDED)
+                up_req_str = NULL;
+        else
+                up_req_str = "false";
+
+        if (required & FIDO2ENROLL_UV)
+                uv_req_str = "true";
+        else if (required & FIDO2ENROLL_UV_OMIT)
+                uv_req_str = NULL;
+        else
+                uv_req_str = "false";
+
+        crypt_log(cd, "\tfido2-credential:" CRYPT_DUMP_LINE_SEP "%s\n", cid_str);
+        crypt_log(cd, "\tfido2-salt: %s\n", salt_str);
+
+        /* optional fields */
+        if (rp_id)
+                crypt_log(cd, "\tfido2-rp:   %s\n", rp_id);
+        if (client_pin_req_str)
+                crypt_log(cd, "\tfido2-clientPin-required:" CRYPT_DUMP_LINE_SEP "%s\n",
+                          client_pin_req_str);
+        if (up_req_str)
+                crypt_log(cd, "\tfido2-up-required:" CRYPT_DUMP_LINE_SEP "%s\n", up_req_str);
+        if (uv_req_str)
+                crypt_log(cd, "\tfido2-uv-required:" CRYPT_DUMP_LINE_SEP "%s\n", uv_req_str);
+}
+
+/*
+ * Note:
+ *   If plugin is available in library path, it's called in before following libcryptsetup calls:
+ *
+ *   crypt_token_json_set, crypt_dump, any crypt_activate_by_token_* flavour
+ */
+_public_ int cryptsetup_token_validate(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                const char *json /* contains valid 'type' and 'keyslots' fields. 'type' is 'systemd-tpm2' */) {
+
+        int r;
+        JsonVariant *w;
+       _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        assert(json);
+
+        r = json_parse(json, 0, &v, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Could not parse " TOKEN_NAME " json object: %m.");
+
+        w = json_variant_by_key(v, "fido2-credential");
+        if (!w || !json_variant_is_string(w)) {
+                crypt_log_debug(cd, "FIDO2 token data lacks 'fido2-credential' field.");
+                return 1;
+        }
+
+        r = unbase64mem(json_variant_string(w), SIZE_MAX, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Invalid base64 data in 'fido2-credential' field: %m");
+
+        w = json_variant_by_key(v, "fido2-salt");
+        if (!w || !json_variant_is_string(w)) {
+                crypt_log_debug(cd, "FIDO2 token data lacks 'fido2-salt' field.");
+                return 1;
+        }
+
+        r = unbase64mem(json_variant_string(w), SIZE_MAX, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Failed to decode base64 encoded salt: %m.");
+
+        /* The "rp" field is optional. */
+        w = json_variant_by_key(v, "fido2-rp");
+        if (w && !json_variant_is_string(w)) {
+                crypt_log_debug(cd, "FIDO2 token data's 'fido2-rp' field is not a string.");
+                return 1;
+        }
+
+        /* The "fido2-clientPin-required" field is optional. */
+        w = json_variant_by_key(v, "fido2-clientPin-required");
+        if (w && !json_variant_is_boolean(w)) {
+                crypt_log_debug(cd, "FIDO2 token data's 'fido2-clientPin-required' field is not a boolean.");
+                return 1;
+        }
+
+        /* The "fido2-up-required" field is optional. */
+        w = json_variant_by_key(v, "fido2-up-required");
+        if (w && !json_variant_is_boolean(w)) {
+                crypt_log_debug(cd, "FIDO2 token data's 'fido2-up-required' field is not a boolean.");
+                return 1;
+        }
+
+        /* The "fido2-uv-required" field is optional. */
+        w = json_variant_by_key(v, "fido2-uv-required");
+        if (w && !json_variant_is_boolean(w)) {
+                crypt_log_debug(cd, "FIDO2 token data's 'fido2-uv-required' field is not a boolean.");
+                return 1;
+        }
+
+        return 0;
+}
diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-pkcs11.c b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-pkcs11.c
new file mode 100644
index 0000000..c3e7fbd
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-pkcs11.c
@@ -0,0 +1,144 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <libcryptsetup.h>
+
+#include "cryptsetup-token.h"
+#include "cryptsetup-token-util.h"
+#include "hexdecoct.h"
+#include "json.h"
+#include "luks2-pkcs11.h"
+#include "memory-util.h"
+#include "pkcs11-util.h"
+#include "version.h"
+
+#define TOKEN_NAME "systemd-pkcs11"
+#define TOKEN_VERSION_MAJOR "1"
+#define TOKEN_VERSION_MINOR "0"
+
+/* for libcryptsetup debug purpose */
+_public_ const char *cryptsetup_token_version(void) {
+        return TOKEN_VERSION_MAJOR "." TOKEN_VERSION_MINOR " systemd-v" STRINGIFY(PROJECT_VERSION) " (" GIT_VERSION ")";
+}
+
+_public_ int cryptsetup_token_open_pin(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                int token /* is always >= 0 */,
+                const char *pin,
+                size_t pin_size,
+                char **password, /* freed by cryptsetup_token_buffer_free */
+                size_t *password_len,
+                void *usrptr /* plugin defined parameter passed to crypt_activate_by_token*() API */) {
+
+        const char *json;
+        int r;
+
+        assert(!pin || pin_size);
+        assert(token >= 0);
+
+        /* This must not fail at this moment (internal error) */
+        r = crypt_token_json_get(cd, token, &json);
+        /* Use assert_se() here to avoid emitting warning with -DNDEBUG */
+        assert_se(token == r);
+        assert(json);
+
+        return acquire_luks2_key(cd, json, usrptr, pin, pin_size, password, password_len);
+}
+
+/*
+ * This function is called from within following libcryptsetup calls
+ * provided conditions further below are met:
+ *
+ * crypt_activate_by_token(), crypt_activate_by_token_type(type == 'systemd-pkcs11'):
+ *
+ * - token is assigned to at least one luks2 keyslot eligible to activate LUKS2 device
+ *   (alternatively: name is set to null, flags contains CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY
+ *    and token is assigned to at least single keyslot).
+ *
+ * - if plugin defines validate function (see cryptsetup_token_validate below) it must have
+ *   passed the check (aka return 0)
+ */
+_public_ int cryptsetup_token_open(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                int token /* is always >= 0 */,
+                char **password, /* freed by cryptsetup_token_buffer_free */
+                size_t *password_len,
+                void *usrptr /* plugin defined parameter passed to crypt_activate_by_token*() API */) {
+
+        return cryptsetup_token_open_pin(cd, token, NULL, 0, password, password_len, usrptr);
+}
+
+/*
+ * libcryptsetup callback for memory deallocation of 'password' parameter passed in
+ * any crypt_token_open_* plugin function
+ */
+_public_ void cryptsetup_token_buffer_free(void *buffer, size_t buffer_len) {
+        erase_and_free(buffer);
+}
+
+/*
+ * prints systemd-pkcs11 token content in crypt_dump().
+ * 'type' and 'keyslots' fields are printed by libcryptsetup
+ */
+_public_ void cryptsetup_token_dump(
+                struct crypt_device *cd /* is always LUKS2 context */,
+                const char *json /* validated 'systemd-pkcs11' token if cryptsetup_token_validate is defined */) {
+
+        int r;
+        size_t pkcs11_key_size;
+        _cleanup_free_ char *pkcs11_uri = NULL, *key_str = NULL;
+        _cleanup_free_ void *pkcs11_key = NULL;
+
+        r = parse_luks2_pkcs11_data(cd, json, &pkcs11_uri, &pkcs11_key, &pkcs11_key_size);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Failed to parse " TOKEN_NAME " metadata: %m.");
+
+        r = crypt_dump_buffer_to_hex_string(pkcs11_key, pkcs11_key_size, &key_str);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Can not dump " TOKEN_NAME " content: %m");
+
+        crypt_log(cd, "\tpkcs11-uri: %s\n", pkcs11_uri);
+        crypt_log(cd, "\tpkcs11-key: %s\n", key_str);
+}
+
+/*
+ * Note:
+ *   If plugin is available in library path, it's called in before following libcryptsetup calls:
+ *
+ *   crypt_token_json_set, crypt_dump, any crypt_activate_by_token_* flavour
+ */
+_public_ int cryptsetup_token_validate(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                const char *json /* contains valid 'type' and 'keyslots' fields. 'type' is 'systemd-pkcs11' */) {
+
+        int r;
+        JsonVariant *w;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        r = json_parse(json, 0, &v, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Could not parse " TOKEN_NAME " json object: %m.");
+
+        w = json_variant_by_key(v, "pkcs11-uri");
+        if (!w || !json_variant_is_string(w)) {
+                crypt_log_debug(cd, "PKCS#11 token data lacks 'pkcs11-uri' field.");
+                return 1;
+        }
+
+        if (!pkcs11_uri_valid(json_variant_string(w))) {
+                crypt_log_debug(cd, "PKCS#11 token data contains invalid PKCS#11 URI.");
+                return 1;
+        }
+
+        w = json_variant_by_key(v, "pkcs11-key");
+        if (!w || !json_variant_is_string(w)) {
+                crypt_log_debug(cd, "PKCS#11 token data lacks 'pkcs11-key' field.");
+                return 1;
+        }
+
+        r = unbase64mem(json_variant_string(w), SIZE_MAX, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Failed to decode base64 encoded key: %m.");
+
+        return 0;
+}
diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c
new file mode 100644
index 0000000..319b0ca
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c
@@ -0,0 +1,343 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <libcryptsetup.h>
+
+#include "cryptsetup-token.h"
+#include "cryptsetup-token-util.h"
+#include "hexdecoct.h"
+#include "json.h"
+#include "luks2-tpm2.h"
+#include "memory-util.h"
+#include "strv.h"
+#include "tpm2-util.h"
+#include "version.h"
+
+#define TOKEN_NAME "systemd-tpm2"
+#define TOKEN_VERSION_MAJOR "1"
+#define TOKEN_VERSION_MINOR "0"
+
+/* for libcryptsetup debug purpose */
+_public_ const char *cryptsetup_token_version(void) {
+
+        return TOKEN_VERSION_MAJOR "." TOKEN_VERSION_MINOR " systemd-v" STRINGIFY(PROJECT_VERSION) " (" GIT_VERSION ")";
+}
+
+static int log_debug_open_error(struct crypt_device *cd, int r) {
+        if (r == -EAGAIN)
+                return crypt_log_debug_errno(cd, r, "TPM2 device not found.");
+        if (r == -ENXIO)
+                return crypt_log_debug_errno(cd, r, "No matching TPM2 token data found.");
+
+        return crypt_log_debug_errno(cd, r, TOKEN_NAME " open failed: %m.");
+}
+
+_public_ int cryptsetup_token_open_pin(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                int token /* is always >= 0 */,
+                const char *pin,
+                size_t pin_size,
+                char **ret_password, /* freed by cryptsetup_token_buffer_free */
+                size_t *ret_password_len,
+                void *usrptr /* plugin defined parameter passed to crypt_activate_by_token*() API */) {
+
+        _cleanup_(erase_and_freep) char *base64_encoded = NULL, *pin_string = NULL;
+        _cleanup_free_ void *blob = NULL, *pubkey = NULL, *policy_hash = NULL, *salt = NULL;
+        size_t blob_size, policy_hash_size, decrypted_key_size, pubkey_size, salt_size = 0;
+        _cleanup_(erase_and_freep) void *decrypted_key = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        uint32_t hash_pcr_mask, pubkey_pcr_mask;
+        systemd_tpm2_plugin_params params = {
+                .search_pcr_mask = UINT32_MAX
+        };
+        uint16_t pcr_bank, primary_alg;
+        ssize_t base64_encoded_size;
+        TPM2Flags flags = 0;
+        const char *json;
+        int r;
+
+        assert(token >= 0);
+        assert(!pin || pin_size > 0);
+        assert(ret_password);
+        assert(ret_password_len);
+
+        /* This must not fail at this moment (internal error) */
+        r = crypt_token_json_get(cd, token, &json);
+        assert(token == r);
+        assert(json);
+
+        r = crypt_normalize_pin(pin, pin_size, &pin_string);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Can not normalize PIN: %m");
+
+        if (usrptr)
+                params = *(systemd_tpm2_plugin_params *)usrptr;
+
+        r = json_parse(json, 0, &v, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Failed to parse token JSON data: %m");
+
+        r = tpm2_parse_luks2_json(
+                        v,
+                        NULL,
+                        &hash_pcr_mask,
+                        &pcr_bank,
+                        &pubkey,
+                        &pubkey_size,
+                        &pubkey_pcr_mask,
+                        &primary_alg,
+                        &blob,
+                        &blob_size,
+                        &policy_hash,
+                        &policy_hash_size,
+                        &salt,
+                        &salt_size,
+                        &flags);
+        if (r < 0)
+                return log_debug_open_error(cd, r);
+
+        if (params.search_pcr_mask != UINT32_MAX && hash_pcr_mask != params.search_pcr_mask)
+                return crypt_log_debug_errno(cd, ENXIO, "PCR mask doesn't match expectation (%" PRIu32 " vs. %" PRIu32 ")", hash_pcr_mask, params.search_pcr_mask);
+
+        r = acquire_luks2_key(
+                        params.device,
+                        hash_pcr_mask,
+                        pcr_bank,
+                        pubkey, pubkey_size,
+                        pubkey_pcr_mask,
+                        params.signature_path,
+                        pin_string,
+                        primary_alg,
+                        blob,
+                        blob_size,
+                        policy_hash,
+                        policy_hash_size,
+                        salt,
+                        salt_size,
+                        flags,
+                        &decrypted_key,
+                        &decrypted_key_size);
+        if (r < 0)
+                return log_debug_open_error(cd, r);
+
+        /* Before using this key as passphrase we base64 encode it, for compat with homed */
+        base64_encoded_size = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+        if (base64_encoded_size < 0)
+                return log_debug_open_error(cd, base64_encoded_size);
+
+        /* free'd automatically by libcryptsetup */
+        *ret_password = TAKE_PTR(base64_encoded);
+        *ret_password_len = base64_encoded_size;
+
+        return 0;
+}
+
+/*
+ * This function is called from within following libcryptsetup calls
+ * provided conditions further below are met:
+ *
+ * crypt_activate_by_token(), crypt_activate_by_token_type(type == 'systemd-tpm2'):
+ *
+ * - token is assigned to at least one luks2 keyslot eligible to activate LUKS2 device
+ *   (alternatively: name is set to null, flags contains CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY
+ *    and token is assigned to at least single keyslot).
+ *
+ * - if plugin defines validate function (see cryptsetup_token_validate below) it must have
+ *   passed the check (aka return 0)
+ */
+_public_ int cryptsetup_token_open(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                int token /* is always >= 0 */,
+                char **ret_password, /* freed by cryptsetup_token_buffer_free */
+                size_t *ret_password_len,
+                void *usrptr /* plugin defined parameter passed to crypt_activate_by_token*() API */) {
+
+        return cryptsetup_token_open_pin(cd, token, NULL, 0, ret_password, ret_password_len, usrptr);
+}
+
+/*
+ * libcryptsetup callback for memory deallocation of 'password' parameter passed in
+ * any crypt_token_open_* plugin function
+ */
+_public_ void cryptsetup_token_buffer_free(void *buffer, size_t buffer_len) {
+        erase_and_free(buffer);
+}
+
+/*
+ * prints systemd-tpm2 token content in crypt_dump().
+ * 'type' and 'keyslots' fields are printed by libcryptsetup
+ */
+_public_ void cryptsetup_token_dump(
+                struct crypt_device *cd /* is always LUKS2 context */,
+                const char *json /* validated 'systemd-tpm2' token if cryptsetup_token_validate is defined */) {
+
+        _cleanup_free_ char *hash_pcrs_str = NULL, *pubkey_pcrs_str = NULL, *blob_str = NULL, *policy_hash_str = NULL, *pubkey_str = NULL;
+        _cleanup_free_ void *blob = NULL, *pubkey = NULL, *policy_hash = NULL, *salt = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        size_t blob_size, policy_hash_size, pubkey_size, salt_size = 0;
+        uint32_t hash_pcr_mask, pubkey_pcr_mask;
+        uint16_t pcr_bank, primary_alg;
+        TPM2Flags flags = 0;
+        int r;
+
+        assert(json);
+
+        r = json_parse(json, 0, &v, NULL, NULL);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Failed to parse " TOKEN_NAME " JSON object: %m");
+
+        r = tpm2_parse_luks2_json(
+                        v,
+                        NULL,
+                        &hash_pcr_mask,
+                        &pcr_bank,
+                        &pubkey,
+                        &pubkey_size,
+                        &pubkey_pcr_mask,
+                        &primary_alg,
+                        &blob,
+                        &blob_size,
+                        &policy_hash,
+                        &policy_hash_size,
+                        &salt,
+                        &salt_size,
+                        &flags);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Failed to parse " TOKEN_NAME " JSON fields: %m");
+
+        r = pcr_mask_to_string(hash_pcr_mask, &hash_pcrs_str);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Cannot format PCR hash mask: %m");
+
+        r = pcr_mask_to_string(pubkey_pcr_mask, &pubkey_pcrs_str);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Cannot format PCR hash mask: %m");
+
+        r = crypt_dump_buffer_to_hex_string(blob, blob_size, &blob_str);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Can not dump " TOKEN_NAME " content: %m");
+
+        r = crypt_dump_buffer_to_hex_string(pubkey, pubkey_size, &pubkey_str);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Can not dump " TOKEN_NAME " content: %m");
+
+        r = crypt_dump_buffer_to_hex_string(policy_hash, policy_hash_size, &policy_hash_str);
+        if (r < 0)
+                return (void) crypt_log_debug_errno(cd, r, "Can not dump " TOKEN_NAME " content: %m");
+
+        crypt_log(cd, "\ttpm2-hash-pcrs:   %s\n", strna(hash_pcrs_str));
+        crypt_log(cd, "\ttpm2-pcr-bank:    %s\n", strna(tpm2_hash_alg_to_string(pcr_bank)));
+        crypt_log(cd, "\ttpm2-pubkey:" CRYPT_DUMP_LINE_SEP "%s\n", pubkey_str);
+        crypt_log(cd, "\ttpm2-pubkey-pcrs: %s\n", strna(pubkey_pcrs_str));
+        crypt_log(cd, "\ttpm2-primary-alg: %s\n", strna(tpm2_asym_alg_to_string(primary_alg)));
+        crypt_log(cd, "\ttpm2-blob:        %s\n", blob_str);
+        crypt_log(cd, "\ttpm2-policy-hash:" CRYPT_DUMP_LINE_SEP "%s\n", policy_hash_str);
+        crypt_log(cd, "\ttpm2-pin:         %s\n", true_false(flags & TPM2_FLAGS_USE_PIN));
+        crypt_log(cd, "\ttpm2-salt:        %s\n", true_false(salt));
+}
+
+/*
+ * Note:
+ *   If plugin is available in library path, it's called in before following libcryptsetup calls:
+ *
+ *   crypt_token_json_set, crypt_dump, any crypt_activate_by_token_* flavour
+ */
+_public_ int cryptsetup_token_validate(
+                struct crypt_device *cd, /* is always LUKS2 context */
+                const char *json /* contains valid 'type' and 'keyslots' fields. 'type' is 'systemd-tpm2' */) {
+
+        int r;
+        JsonVariant *w, *e;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        assert(json);
+
+        r = json_parse(json, 0, &v, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Could not parse " TOKEN_NAME " json object: %m");
+
+        w = json_variant_by_key(v, "tpm2-pcrs");
+        if (!w || !json_variant_is_array(w)) {
+                crypt_log_debug(cd, "TPM2 token data lacks 'tpm2-pcrs' field.");
+                return 1;
+        }
+
+        JSON_VARIANT_ARRAY_FOREACH(e, w) {
+                uint64_t u;
+
+                if (!json_variant_is_number(e)) {
+                        crypt_log_debug(cd, "TPM2 PCR is not a number.");
+                        return 1;
+                }
+
+                u = json_variant_unsigned(e);
+                if (u >= TPM2_PCRS_MAX) {
+                        crypt_log_debug(cd, "TPM2 PCR number out of range.");
+                        return 1;
+                }
+        }
+
+        /* The bank field is optional, since it was added in systemd 250 only. Before the bank was hardcoded
+         * to SHA256. */
+        w = json_variant_by_key(v, "tpm2-pcr-bank");
+        if (w) {
+                /* The PCR bank field is optional */
+
+                if (!json_variant_is_string(w)) {
+                        crypt_log_debug(cd, "TPM2 PCR bank is not a string.");
+                        return 1;
+                }
+
+                if (tpm2_hash_alg_from_string(json_variant_string(w)) < 0) {
+                        crypt_log_debug(cd, "TPM2 PCR bank invalid or not supported: %s.", json_variant_string(w));
+                        return 1;
+                }
+        }
+
+        /* The primary key algorithm field is optional, since it was also added in systemd 250 only. Before
+         * the algorithm was hardcoded to ECC. */
+        w = json_variant_by_key(v, "tpm2-primary-alg");
+        if (w) {
+                /* The primary key algorithm is optional */
+
+                if (!json_variant_is_string(w)) {
+                        crypt_log_debug(cd, "TPM2 primary key algorithm is not a string.");
+                        return 1;
+                }
+
+                if (tpm2_asym_alg_from_string(json_variant_string(w)) < 0) {
+                        crypt_log_debug(cd, "TPM2 primary key algorithm invalid or not supported: %s", json_variant_string(w));
+                        return 1;
+                }
+        }
+
+        w = json_variant_by_key(v, "tpm2-blob");
+        if (!w || !json_variant_is_string(w)) {
+                crypt_log_debug(cd, "TPM2 token data lacks 'tpm2-blob' field.");
+                return 1;
+        }
+
+        r = unbase64mem(json_variant_string(w), SIZE_MAX, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Invalid base64 data in 'tpm2-blob' field: %m");
+
+        w = json_variant_by_key(v, "tpm2-policy-hash");
+        if (!w || !json_variant_is_string(w)) {
+                crypt_log_debug(cd, "TPM2 token data lacks 'tpm2-policy-hash' field.");
+                return 1;
+        }
+
+        r = unhexmem(json_variant_string(w), SIZE_MAX, NULL, NULL);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Invalid base64 data in 'tpm2-policy-hash' field: %m");
+
+        w = json_variant_by_key(v, "tpm2-pin");
+        if (w) {
+                if (!json_variant_is_boolean(w)) {
+                        crypt_log_debug(cd, "TPM2 PIN policy is not a boolean.");
+                        return 1;
+                }
+        }
+
+        return 0;
+}
diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-util.c b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-util.c
new file mode 100644
index 0000000..4e3090b
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-util.c
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "cryptsetup-token-util.h"
+#include "string-util.h"
+
+int crypt_dump_buffer_to_hex_string(
+                const char *buf,
+                size_t buf_size,
+                char **ret_dump_str) {
+
+        int r;
+        _cleanup_free_ char *dump_str = NULL;
+
+        assert(buf || !buf_size);
+        assert(ret_dump_str);
+
+        for (size_t i = 0; i < buf_size; i++) {
+                /* crypt_dump() breaks line after every
+                 * 16th couple of chars in dumped hexstring */
+                r = strextendf_with_separator(
+                        &dump_str,
+                        (i && !(i % 16)) ? CRYPT_DUMP_LINE_SEP : " ",
+                        "%02hhx", buf[i]);
+                if (r < 0)
+                        return r;
+        }
+
+        *ret_dump_str = TAKE_PTR(dump_str);
+
+        return 0;
+}
+
+int crypt_dump_hex_string(const char *hex_str, char **ret_dump_str) {
+
+        int r;
+        size_t len;
+        _cleanup_free_ char *dump_str = NULL;
+
+        assert(hex_str);
+        assert(ret_dump_str);
+
+        len = strlen(hex_str) >> 1;
+
+        for (size_t i = 0; i < len; i++) {
+                /* crypt_dump() breaks line after every
+                 * 16th couple of chars in dumped hexstring */
+                r = strextendf_with_separator(
+                        &dump_str,
+                        (i && !(i % 16)) ? CRYPT_DUMP_LINE_SEP : " ",
+                        "%.2s", hex_str + (i<<1));
+                if (r < 0)
+                        return r;
+        }
+
+        *ret_dump_str = TAKE_PTR(dump_str);
+
+        return 0;
+}
+
+int crypt_normalize_pin(const void *pin, size_t pin_size, char **ret_pin_string) {
+        assert(pin || pin_size == 0);
+        assert(ret_pin_string);
+
+        if (pin_size == 0) {
+                *ret_pin_string = NULL;
+                return 0;
+        }
+
+        return make_cstring(pin, pin_size, MAKE_CSTRING_ALLOW_TRAILING_NUL, ret_pin_string);
+}
diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-util.h b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-util.h
new file mode 100644
index 0000000..146beff
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-util.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#pragma once
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <libcryptsetup.h>
+
+/* crypt_dump() internal indentation magic */
+#define CRYPT_DUMP_LINE_SEP "\n\t            "
+
+#define crypt_log_debug(cd, ...)   crypt_logf(cd, CRYPT_LOG_DEBUG,   __VA_ARGS__)
+#define crypt_log_error(cd, ...)   crypt_logf(cd, CRYPT_LOG_ERROR,   __VA_ARGS__)
+#define crypt_log_verbose(cd, ...) crypt_logf(cd, CRYPT_LOG_VERBOSE, __VA_ARGS__)
+#define crypt_log(cd, ...)         crypt_logf(cd, CRYPT_LOG_NORMAL,  __VA_ARGS__)
+
+#define crypt_log_full_errno(cd, e, lvl, ...) ({ \
+        int _e = abs(e), _s = errno; \
+        errno = _e; \
+        crypt_logf(cd, lvl, __VA_ARGS__); \
+        errno = _s; \
+        -_e; \
+})
+
+#define crypt_log_debug_errno(cd, e, ...) \
+        crypt_log_full_errno(cd, e, CRYPT_LOG_DEBUG, __VA_ARGS__)
+
+#define crypt_log_error_errno(cd, e, ...) \
+        crypt_log_full_errno(cd, e, CRYPT_LOG_ERROR, __VA_ARGS__)
+
+#define crypt_log_oom(cd) crypt_log_error_errno(cd, ENOMEM, "Not enough memory.")
+
+int crypt_dump_buffer_to_hex_string(
+                const char *buf,
+                size_t buf_size,
+                char **ret_dump_str);
+
+int crypt_dump_hex_string(const char *hex_str, char **ret_dump_str);
+
+int crypt_normalize_pin(const void *pin, size_t pin_size, char **ret_pin_string);
diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token.h b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token.h
new file mode 100644
index 0000000..2a9d23f
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+/* for more information see libcryptsetup.h crypt-tokens section */
+
+const char *cryptsetup_token_version(void);
+
+int cryptsetup_token_open(struct crypt_device *cd, int token,
+        char **password, size_t *password_len, void *usrptr);
+
+int cryptsetup_token_open_pin(struct crypt_device *cd, int token,
+        const char *pin, size_t pin_size,
+        char **password, size_t *password_len, void *usrptr);
+
+void cryptsetup_token_dump(struct crypt_device *cd, const char *json);
+
+int cryptsetup_token_validate(struct crypt_device *cd, const char *json);
+
+void cryptsetup_token_buffer_free(void *buffer, size_t buffer_len);
diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token.sym b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token.sym
new file mode 100644
index 0000000..730e78e
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token.sym
@@ -0,0 +1,19 @@
+/***
+  SPDX-License-Identifier: LGPL-2.1-or-later
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+***/
+
+CRYPTSETUP_TOKEN_1.0 {
+global:
+        cryptsetup_token_open;
+        cryptsetup_token_open_pin;
+        cryptsetup_token_buffer_free;
+        cryptsetup_token_validate;
+        cryptsetup_token_dump;
+        cryptsetup_token_version;
+local: *;
+};
diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-fido2.c b/src/cryptsetup/cryptsetup-tokens/luks2-fido2.c
new file mode 100644
index 0000000..a1c85e6
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/luks2-fido2.c
@@ -0,0 +1,158 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <libcryptsetup.h>
+
+#include "cryptsetup-token-util.h"
+#include "hexdecoct.h"
+#include "json.h"
+#include "luks2-fido2.h"
+#include "memory-util.h"
+#include "strv.h"
+
+int acquire_luks2_key(
+                struct crypt_device *cd,
+                const char *json,
+                const char *device,
+                const char *pin,
+                char **ret_keyslot_passphrase,
+                size_t *ret_keyslot_passphrase_size) {
+
+        int r;
+        Fido2EnrollFlags required;
+        size_t cid_size, salt_size, decrypted_key_size;
+        _cleanup_free_ void *cid = NULL, *salt = NULL;
+        _cleanup_free_ char *rp_id = NULL;
+        _cleanup_(erase_and_freep) void *decrypted_key = NULL;
+        _cleanup_(erase_and_freep) char *base64_encoded = NULL;
+        _cleanup_strv_free_erase_ char **pins = NULL;
+        ssize_t base64_encoded_size;
+
+        assert(ret_keyslot_passphrase);
+        assert(ret_keyslot_passphrase_size);
+
+        r = parse_luks2_fido2_data(cd, json, &rp_id, &salt, &salt_size, &cid, &cid_size, &required);
+        if (r < 0)
+                return r;
+
+        if (pin) {
+                pins = strv_new(pin);
+                if (!pins)
+                        return crypt_log_oom(cd);
+        }
+
+        /* configured to use pin but none was provided */
+        if ((required & FIDO2ENROLL_PIN) && strv_isempty(pins))
+                return -ENOANO;
+
+        r = fido2_use_hmac_hash(
+                        device,
+                        rp_id ?: "io.systemd.cryptsetup",
+                        salt, salt_size,
+                        cid, cid_size,
+                        pins,
+                        required,
+                        &decrypted_key,
+                        &decrypted_key_size);
+        if (r == -ENOLCK) /* libcryptsetup returns -ENOANO also on wrong PIN */
+                r = -ENOANO;
+        if (r < 0)
+                return r;
+
+        /* Before using this key as passphrase we base64 encode it, for compat with homed */
+        base64_encoded_size = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+        if (base64_encoded_size < 0)
+                return crypt_log_error_errno(cd, (int) base64_encoded_size, "Failed to base64 encode key: %m");
+
+        *ret_keyslot_passphrase = TAKE_PTR(base64_encoded);
+        *ret_keyslot_passphrase_size = base64_encoded_size;
+
+        return 0;
+}
+
+/* this function expects valid "systemd-fido2" in json */
+int parse_luks2_fido2_data(
+                struct crypt_device *cd,
+                const char *json,
+                char **ret_rp_id,
+                void **ret_salt,
+                size_t *ret_salt_size,
+                void **ret_cid,
+                size_t *ret_cid_size,
+                Fido2EnrollFlags *ret_required) {
+
+        _cleanup_free_ void *cid = NULL, *salt = NULL;
+        size_t cid_size = 0, salt_size = 0;
+        _cleanup_free_ char *rp = NULL;
+        int r;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        JsonVariant *w;
+        Fido2EnrollFlags required = 0;
+
+        assert(json);
+        assert(ret_rp_id);
+        assert(ret_salt);
+        assert(ret_salt_size);
+        assert(ret_cid);
+        assert(ret_cid_size);
+        assert(ret_required);
+
+        r = json_parse(json, 0, &v, NULL, NULL);
+        if (r < 0)
+                return crypt_log_error_errno(cd, r, "Failed to parse JSON token data: %m");
+
+        w = json_variant_by_key(v, "fido2-credential");
+        if (!w)
+                return -EINVAL;
+
+        r = unbase64mem(json_variant_string(w), SIZE_MAX, &cid, &cid_size);
+        if (r < 0)
+                return crypt_log_error_errno(cd, r, "Failed to parse 'fido2-credentials' field: %m");
+
+        w = json_variant_by_key(v, "fido2-salt");
+        if (!w)
+                return -EINVAL;
+
+        r = unbase64mem(json_variant_string(w), SIZE_MAX, &salt, &salt_size);
+        if (r < 0)
+                return crypt_log_error_errno(cd, r, "Failed to parse 'fido2-salt' field: %m");
+
+        w = json_variant_by_key(v, "fido2-rp");
+        if (w) {
+                /* The "rp" field is optional. */
+                rp = strdup(json_variant_string(w));
+                if (!rp) {
+                        crypt_log_error(cd, "Not enough memory.");
+                        return -ENOMEM;
+                }
+        }
+
+        w = json_variant_by_key(v, "fido2-clientPin-required");
+        if (w)
+                /* The "fido2-clientPin-required" field is optional. */
+                SET_FLAG(required, FIDO2ENROLL_PIN, json_variant_boolean(w));
+        else
+                required |= FIDO2ENROLL_PIN_IF_NEEDED; /* compat with 248, where the field was unset */
+
+        w = json_variant_by_key(v, "fido2-up-required");
+        if (w)
+                /* The "fido2-up-required" field is optional. */
+                SET_FLAG(required, FIDO2ENROLL_UP, json_variant_boolean(w));
+        else
+                required |= FIDO2ENROLL_UP_IF_NEEDED; /* compat with 248 */
+
+        w = json_variant_by_key(v, "fido2-uv-required");
+        if (w)
+                /* The "fido2-uv-required" field is optional. */
+                SET_FLAG(required, FIDO2ENROLL_UV, json_variant_boolean(w));
+        else
+                required |= FIDO2ENROLL_UV_OMIT; /* compat with 248 */
+
+        *ret_rp_id = TAKE_PTR(rp);
+        *ret_cid = TAKE_PTR(cid);
+        *ret_cid_size = cid_size;
+        *ret_salt = TAKE_PTR(salt);
+        *ret_salt_size = salt_size;
+        *ret_required = required;
+
+        return 0;
+}
diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-fido2.h b/src/cryptsetup/cryptsetup-tokens/luks2-fido2.h
new file mode 100644
index 0000000..48416ec
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/luks2-fido2.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "libfido2-util.h"
+
+struct crypt_device;
+
+int acquire_luks2_key(
+                struct crypt_device *cd,
+                const char *json,
+                const char *device,
+                const char *pin,
+                char **ret_keyslot_passphrase,
+                size_t *ret_keyslot_passphrase_size);
+
+int parse_luks2_fido2_data(
+                struct crypt_device *cd,
+                const char *json,
+                char **ret_rp_id,
+                void **ret_salt,
+                size_t *ret_salt_size,
+                void **ret_cid,
+                size_t *ret_cid_size,
+                Fido2EnrollFlags *ret_required);
diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-pkcs11.c b/src/cryptsetup/cryptsetup-tokens/luks2-pkcs11.c
new file mode 100644
index 0000000..1ed9e2b
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/luks2-pkcs11.c
@@ -0,0 +1,271 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <p11-kit/p11-kit.h>
+#include <p11-kit/uri.h>
+
+#include "cryptsetup-token-util.h"
+#include "escape.h"
+#include "hexdecoct.h"
+#include "json.h"
+#include "luks2-pkcs11.h"
+#include "memory-util.h"
+#include "pkcs11-util.h"
+#include "time-util.h"
+
+struct luks2_pkcs11_callback_data {
+        struct crypt_device *cd;
+        const char *pin;
+        size_t pin_size;
+        void *encrypted_key;
+        size_t encrypted_key_size;
+        void *decrypted_key;
+        size_t decrypted_key_size;
+};
+
+static int luks2_pkcs11_callback(
+                CK_FUNCTION_LIST *m,
+                CK_SESSION_HANDLE session,
+                CK_SLOT_ID slot_id,
+                const CK_SLOT_INFO *slot_info,
+                const CK_TOKEN_INFO *token_info,
+                P11KitUri *uri,
+                void *userdata) {
+
+        CK_OBJECT_HANDLE object;
+        CK_RV rv;
+        CK_TOKEN_INFO updated_token_info;
+        int r;
+        _cleanup_free_ char *token_label = NULL;
+        struct luks2_pkcs11_callback_data *data = ASSERT_PTR(userdata);
+
+        assert(m);
+        assert(slot_info);
+        assert(token_info);
+        assert(uri);
+
+        token_label = pkcs11_token_label(token_info);
+        if (!token_label)
+                return -ENOMEM;
+
+        /* Called for every token matching our URI */
+        r = pkcs11_token_login_by_pin(m, session, token_info, token_label, data->pin, data->pin_size);
+        if (r == -ENOLCK) {
+                /* Referesh the token info, so that we can prompt knowing the new flags if they changed. */
+                rv = m->C_GetTokenInfo(slot_id, &updated_token_info);
+                if (rv != CKR_OK) {
+                        crypt_log_error(data->cd,
+                                       "Failed to acquire updated security token information for slot %lu: %s",
+                                       slot_id, p11_kit_strerror(rv));
+                        return -EIO;
+                }
+                token_info = &updated_token_info;
+                r = -ENOANO;
+        }
+
+        if (r == -ENOANO) {
+                if (FLAGS_SET(token_info->flags, CKF_USER_PIN_FINAL_TRY))
+                        crypt_log_error(data->cd, "Please enter correct PIN for security token "
+                                        "'%s' in order to unlock it (final try).", token_label);
+                else if (FLAGS_SET(token_info->flags, CKF_USER_PIN_COUNT_LOW))
+                        crypt_log_error(data->cd, "PIN has been entered incorrectly previously, "
+                                      "please enter correct PIN for security token '%s' in order to unlock it.",
+                                      token_label);
+        }
+
+        if (r == -EPERM) /* pin is locked, but map it to -ENOANO anyway */
+                r = -ENOANO;
+
+        if (r < 0)
+                return r;
+
+        r = pkcs11_token_find_private_key(m, session, uri, &object);
+        if (r < 0)
+                return r;
+
+        r = pkcs11_token_decrypt_data(
+                        m,
+                        session,
+                        object,
+                        data->encrypted_key,
+                        data->encrypted_key_size,
+                        &data->decrypted_key,
+                        &data->decrypted_key_size);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static void luks2_pkcs11_callback_data_release(struct luks2_pkcs11_callback_data *data) {
+        erase_and_free(data->decrypted_key);
+}
+
+static int acquire_luks2_key_by_pin(
+                struct crypt_device *cd,
+                const char *pkcs11_uri,
+                const void *pin,
+                size_t pin_size,
+                void *encrypted_key,
+                size_t encrypted_key_size,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size) {
+
+        int r;
+        _cleanup_(luks2_pkcs11_callback_data_release) struct luks2_pkcs11_callback_data data = {
+                .cd = cd,
+                .pin = pin,
+                .pin_size = pin_size,
+                .encrypted_key = encrypted_key,
+                .encrypted_key_size = encrypted_key_size,
+        };
+
+        assert(pkcs11_uri);
+        assert(encrypted_key);
+        assert(ret_decrypted_key);
+        assert(ret_decrypted_key_size);
+
+        r = pkcs11_find_token(pkcs11_uri, luks2_pkcs11_callback, &data);
+        if (r < 0)
+                return r;
+
+        *ret_decrypted_key = TAKE_PTR(data.decrypted_key);
+        *ret_decrypted_key_size = data.decrypted_key_size;
+
+        return 0;
+}
+
+/* called from within systemd utilities */
+static int acquire_luks2_key_systemd(
+                const char *pkcs11_uri,
+                systemd_pkcs11_plugin_params *params,
+                void *encrypted_key,
+                size_t encrypted_key_size,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size) {
+
+        int r;
+        _cleanup_(pkcs11_crypt_device_callback_data_release) pkcs11_crypt_device_callback_data data = {
+                .encrypted_key = encrypted_key,
+                .encrypted_key_size = encrypted_key_size,
+                .free_encrypted_key = false
+        };
+
+        assert(pkcs11_uri);
+        assert(encrypted_key);
+        assert(ret_decrypted_key);
+        assert(ret_decrypted_key_size);
+        assert(params);
+
+        data.friendly_name = params->friendly_name;
+        data.headless = params->headless;
+        data.until = params->until;
+
+        /* The functions called here log about all errors, except for EAGAIN which means "token not found right now" */
+        r = pkcs11_find_token(pkcs11_uri, pkcs11_crypt_device_callback, &data);
+        if (r < 0)
+                return r;
+
+        *ret_decrypted_key = TAKE_PTR(data.decrypted_key);
+        *ret_decrypted_key_size = data.decrypted_key_size;
+
+        return 0;
+}
+
+int acquire_luks2_key(
+                struct crypt_device *cd,
+                const char *json,
+                void *userdata,
+                const void *pin,
+                size_t pin_size,
+                char **ret_password,
+                size_t *ret_password_size) {
+
+        int r;
+        size_t decrypted_key_size, encrypted_key_size;
+        _cleanup_(erase_and_freep) void *decrypted_key = NULL;
+        _cleanup_(erase_and_freep) char *base64_encoded = NULL;
+        _cleanup_free_ char *pkcs11_uri = NULL;
+        _cleanup_free_ void *encrypted_key = NULL;
+        systemd_pkcs11_plugin_params *pkcs11_params = userdata;
+        ssize_t base64_encoded_size;
+
+        assert(json);
+        assert(ret_password);
+        assert(ret_password_size);
+
+        r = parse_luks2_pkcs11_data(cd, json, &pkcs11_uri, &encrypted_key, &encrypted_key_size);
+        if (r < 0)
+                return r;
+
+        if (pkcs11_params && pin)
+                crypt_log_verbose(cd, "PIN parameter ignored in interactive mode.");
+
+        if (pkcs11_params) /* systemd based activation with interactive pin query callbacks */
+                r = acquire_luks2_key_systemd(
+                        pkcs11_uri,
+                        pkcs11_params,
+                        encrypted_key, encrypted_key_size,
+                        &decrypted_key, &decrypted_key_size);
+        else /* default activation that provides single PIN if needed */
+                r = acquire_luks2_key_by_pin(
+                        cd, pkcs11_uri, pin, pin_size,
+                        encrypted_key, encrypted_key_size,
+                        &decrypted_key, &decrypted_key_size);
+        if (r < 0)
+                return r;
+
+        base64_encoded_size = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+        if (base64_encoded_size < 0)
+                return crypt_log_error_errno(cd, (int) base64_encoded_size, "Can not base64 encode key: %m");
+
+        *ret_password = TAKE_PTR(base64_encoded);
+        *ret_password_size = base64_encoded_size;
+
+        return 0;
+}
+
+int parse_luks2_pkcs11_data(
+                struct crypt_device *cd,
+                const char *json,
+                char **ret_uri,
+                void **ret_encrypted_key,
+                size_t *ret_encrypted_key_size) {
+
+        int r;
+        size_t key_size;
+        _cleanup_free_ char *uri = NULL;
+        _cleanup_free_ void *key = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        JsonVariant *w;
+
+        assert(json);
+        assert(ret_uri);
+        assert(ret_encrypted_key);
+        assert(ret_encrypted_key_size);
+
+        r = json_parse(json, 0, &v, NULL, NULL);
+        if (r < 0)
+                return r;
+
+        w = json_variant_by_key(v, "pkcs11-uri");
+        if (!w)
+                return -EINVAL;
+
+        uri = strdup(json_variant_string(w));
+        if (!uri)
+                return -ENOMEM;
+
+        w = json_variant_by_key(v, "pkcs11-key");
+        if (!w)
+                return -EINVAL;
+
+        r = unbase64mem(json_variant_string(w), SIZE_MAX, &key, &key_size);
+        if (r < 0)
+                return crypt_log_debug_errno(cd, r, "Failed to decode base64 encoded key: %m.");
+
+        *ret_uri = TAKE_PTR(uri);
+        *ret_encrypted_key = TAKE_PTR(key);
+        *ret_encrypted_key_size = key_size;
+
+        return 0;
+}
diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-pkcs11.h b/src/cryptsetup/cryptsetup-tokens/luks2-pkcs11.h
new file mode 100644
index 0000000..41ce9f0
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/luks2-pkcs11.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#pragma once
+
+struct crypt_device;
+
+int acquire_luks2_key(
+                struct crypt_device *cd,
+                const char *json,
+                void *userdata,
+                const void *pin,
+                size_t pin_size,
+                char **password,
+                size_t *password_size);
+
+int parse_luks2_pkcs11_data(
+                struct crypt_device *cd,
+                const char *json,
+                char **ret_uri,
+                void **ret_encrypted_key,
+                size_t *ret_encrypted_key_size);
diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c
new file mode 100644
index 0000000..3074887
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c
@@ -0,0 +1,93 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "ask-password-api.h"
+#include "env-util.h"
+#include "hexdecoct.h"
+#include "json.h"
+#include "log.h"
+#include "luks2-tpm2.h"
+#include "parse-util.h"
+#include "random-util.h"
+#include "sha256.h"
+#include "strv.h"
+#include "tpm2-util.h"
+
+int acquire_luks2_key(
+                const char *device,
+                uint32_t hash_pcr_mask,
+                uint16_t pcr_bank,
+                const void *pubkey,
+                size_t pubkey_size,
+                uint32_t pubkey_pcr_mask,
+                const char *signature_path,
+                const char *pin,
+                uint16_t primary_alg,
+                const void *key_data,
+                size_t key_data_size,
+                const void *policy_hash,
+                size_t policy_hash_size,
+                const void *salt,
+                size_t salt_size,
+                TPM2Flags flags,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size) {
+
+        _cleanup_(json_variant_unrefp) JsonVariant *signature_json = NULL;
+        _cleanup_free_ char *auto_device = NULL;
+        _cleanup_(erase_and_freep) char *b64_salted_pin = NULL;
+        int r;
+
+        assert(salt || salt_size == 0);
+        assert(ret_decrypted_key);
+        assert(ret_decrypted_key_size);
+
+        if (!device) {
+                r = tpm2_find_device_auto(LOG_DEBUG, &auto_device);
+                if (r == -ENODEV)
+                        return -EAGAIN; /* Tell the caller to wait for a TPM2 device to show up */
+                if (r < 0)
+                        return r;
+
+                device = auto_device;
+        }
+
+        if ((flags & TPM2_FLAGS_USE_PIN) && !pin)
+                return -ENOANO;
+
+        /* If we're using a PIN, and the luks header has a salt, it better have a pin too */
+        if ((flags & TPM2_FLAGS_USE_PIN) && salt_size > 0 && !pin)
+                return -ENOANO;
+
+        if (pin && salt_size > 0) {
+                uint8_t salted_pin[SHA256_DIGEST_SIZE] = {};
+                CLEANUP_ERASE(salted_pin);
+                r = tpm2_util_pbkdf2_hmac_sha256(pin, strlen(pin), salt, salt_size, salted_pin);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to perform PBKDF2: %m");
+
+                r = base64mem(salted_pin, sizeof(salted_pin), &b64_salted_pin);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to base64 encode salted pin: %m");
+                pin = b64_salted_pin;
+        }
+
+        if (pubkey_pcr_mask != 0) {
+                r = tpm2_load_pcr_signature(signature_path, &signature_json);
+                if (r < 0)
+                        return r;
+        }
+
+        return tpm2_unseal(
+                        device,
+                        hash_pcr_mask,
+                        pcr_bank,
+                        pubkey, pubkey_size,
+                        pubkey_pcr_mask,
+                        signature_json,
+                        pin,
+                        primary_alg,
+                        key_data, key_data_size,
+                        policy_hash, policy_hash_size,
+                        ret_decrypted_key, ret_decrypted_key_size);
+}
diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h
new file mode 100644
index 0000000..36d514c
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#pragma once
+
+#include "tpm2-util.h"
+
+struct crypt_device;
+
+int acquire_luks2_key(
+                const char *device,
+                uint32_t pcr_mask,
+                uint16_t pcr_bank,
+                const void *pubkey,
+                size_t pubkey_size,
+                uint32_t pubkey_pcr_mask,
+                const char *signature_path,
+                const char *pin,
+                uint16_t primary_alg,
+                const void *key_data,
+                size_t key_data_size,
+                const void *policy_hash,
+                size_t policy_hash_size,
+                const void *salt,
+                size_t salt_size,
+                TPM2Flags flags,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size);
diff --git a/src/cryptsetup/cryptsetup-tokens/meson.build b/src/cryptsetup/cryptsetup-tokens/meson.build
new file mode 100644
index 0000000..9df3fea
--- /dev/null
+++ b/src/cryptsetup/cryptsetup-tokens/meson.build
@@ -0,0 +1,26 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+cryptsetup_token_sym = files('cryptsetup-token.sym')
+cryptsetup_token_sym_path = meson.current_source_dir() / 'cryptsetup-token.sym'
+
+lib_cryptsetup_token_common = static_library(
+        'cryptsetup-token-common',
+        'cryptsetup-token-util.c',
+        include_directories : includes,
+        link_with : libshared,
+        build_by_default : false)
+
+cryptsetup_token_systemd_tpm2_sources = files(
+        'cryptsetup-token-systemd-tpm2.c',
+        'luks2-tpm2.c',
+)
+
+cryptsetup_token_systemd_fido2_sources = files(
+        'cryptsetup-token-systemd-fido2.c',
+        'luks2-fido2.c',
+)
+
+cryptsetup_token_systemd_pkcs11_sources = files(
+        'cryptsetup-token-systemd-pkcs11.c',
+        'luks2-pkcs11.c',
+)
diff --git a/src/cryptsetup/cryptsetup-tpm2.c b/src/cryptsetup/cryptsetup-tpm2.c
index 4757c58..a375a22 100644
--- a/src/cryptsetup/cryptsetup-tpm2.c
+++ b/src/cryptsetup/cryptsetup-tpm2.c
@@ -1,18 +1,68 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
+#include "ask-password-api.h"
 #include "cryptsetup-tpm2.h"
+#include "env-util.h"
 #include "fileio.h"
 #include "hexdecoct.h"
 #include "json.h"
 #include "parse-util.h"
 #include "random-util.h"
+#include "sha256.h"
 #include "tpm2-util.h"
 
+static int get_pin(usec_t until, AskPasswordFlags ask_password_flags, bool headless, char **ret_pin_str) {
+        _cleanup_free_ char *pin_str = NULL;
+        _cleanup_strv_free_erase_ char **pin = NULL;
+        int r;
+
+        assert(ret_pin_str);
+
+        r = getenv_steal_erase("PIN", &pin_str);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
+        if (!r) {
+                if (headless)
+                        return log_error_errno(
+                                        SYNTHETIC_ERRNO(ENOPKG),
+                                        "PIN querying disabled via 'headless' option. "
+                                        "Use the '$PIN' environment variable.");
+
+                pin = strv_free_erase(pin);
+                r = ask_password_auto(
+                                "Please enter TPM2 PIN:",
+                                "drive-harddisk",
+                                NULL,
+                                "tpm2-pin",
+                                "cryptsetup.tpm2-pin",
+                                until,
+                                ask_password_flags,
+                                &pin);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to ask for user pin: %m");
+                assert(strv_length(pin) == 1);
+
+                pin_str = strdup(pin[0]);
+                if (!pin_str)
+                        return log_oom();
+        }
+
+        *ret_pin_str = TAKE_PTR(pin_str);
+
+        return r;
+}
+
 int acquire_tpm2_key(
                 const char *volume_name,
                 const char *device,
-                uint32_t pcr_mask,
+                uint32_t hash_pcr_mask,
+                uint16_t pcr_bank,
+                const void *pubkey,
+                size_t pubkey_size,
+                uint32_t pubkey_pcr_mask,
+                const char *signature_path,
+                uint16_t primary_alg,
                 const char *key_file,
                 size_t key_file_size,
                 uint64_t key_file_offset,
@@ -20,15 +70,24 @@
                 size_t key_data_size,
                 const void *policy_hash,
                 size_t policy_hash_size,
+                const void *salt,
+                size_t salt_size,
+                TPM2Flags flags,
+                usec_t until,
+                bool headless,
+                AskPasswordFlags ask_password_flags,
                 void **ret_decrypted_key,
                 size_t *ret_decrypted_key_size) {
 
+        _cleanup_(json_variant_unrefp) JsonVariant *signature_json = NULL;
         _cleanup_free_ void *loaded_blob = NULL;
         _cleanup_free_ char *auto_device = NULL;
         size_t blob_size;
         const void *blob;
         int r;
 
+        assert(salt || salt_size == 0);
+
         if (!device) {
                 r = tpm2_find_device_auto(LOG_DEBUG, &auto_device);
                 if (r == -ENODEV)
@@ -62,31 +121,111 @@
                 blob = loaded_blob;
         }
 
-        return tpm2_unseal(device, pcr_mask, blob, blob_size, policy_hash, policy_hash_size, ret_decrypted_key, ret_decrypted_key_size);
+        if (pubkey_pcr_mask != 0) {
+                r = tpm2_load_pcr_signature(signature_path, &signature_json);
+                if (r < 0)
+                        return r;
+        }
+
+        if (!(flags & TPM2_FLAGS_USE_PIN))
+                return tpm2_unseal(
+                                device,
+                                hash_pcr_mask,
+                                pcr_bank,
+                                pubkey, pubkey_size,
+                                pubkey_pcr_mask,
+                                signature_json,
+                                /* pin= */ NULL,
+                                primary_alg,
+                                blob,
+                                blob_size,
+                                policy_hash,
+                                policy_hash_size,
+                                ret_decrypted_key,
+                                ret_decrypted_key_size);
+
+        for (int i = 5;; i--) {
+                _cleanup_(erase_and_freep) char *pin_str = NULL, *b64_salted_pin = NULL;
+
+                if (i <= 0)
+                        return -EACCES;
+
+                r = get_pin(until, ask_password_flags, headless, &pin_str);
+                if (r < 0)
+                        return r;
+
+                if (salt_size > 0) {
+                        uint8_t salted_pin[SHA256_DIGEST_SIZE] = {};
+                        CLEANUP_ERASE(salted_pin);
+
+                        r = tpm2_util_pbkdf2_hmac_sha256(pin_str, strlen(pin_str), salt, salt_size, salted_pin);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to perform PBKDF2: %m");
+
+                        r = base64mem(salted_pin, sizeof(salted_pin), &b64_salted_pin);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to base64 encode salted pin: %m");
+                } else
+                        /* no salting needed, backwards compat with non-salted pins */
+                        b64_salted_pin = TAKE_PTR(pin_str);
+
+                r = tpm2_unseal(device,
+                                hash_pcr_mask,
+                                pcr_bank,
+                                pubkey, pubkey_size,
+                                pubkey_pcr_mask,
+                                signature_json,
+                                b64_salted_pin,
+                                primary_alg,
+                                blob,
+                                blob_size,
+                                policy_hash,
+                                policy_hash_size,
+                                ret_decrypted_key,
+                                ret_decrypted_key_size);
+                /* We get this error in case there is an authentication policy mismatch. This should
+                 * not happen, but this avoids confusing behavior, just in case. */
+                if (IN_SET(r, -EPERM, -ENOLCK))
+                        return r;
+                if (r < 0)
+                        continue;
+
+                return r;
+        }
 }
 
 int find_tpm2_auto_data(
                 struct crypt_device *cd,
                 uint32_t search_pcr_mask,
                 int start_token,
-                uint32_t *ret_pcr_mask,
+                uint32_t *ret_hash_pcr_mask,
+                uint16_t *ret_pcr_bank,
+                void **ret_pubkey,
+                size_t *ret_pubkey_size,
+                uint32_t *ret_pubkey_pcr_mask,
+                uint16_t *ret_primary_alg,
                 void **ret_blob,
                 size_t *ret_blob_size,
                 void **ret_policy_hash,
                 size_t *ret_policy_hash_size,
+                void **ret_salt,
+                size_t *ret_salt_size,
+                TPM2Flags *ret_flags,
                 int *ret_keyslot,
                 int *ret_token) {
 
-        _cleanup_free_ void *blob = NULL, *policy_hash = NULL;
-        size_t blob_size = 0, policy_hash_size = 0;
-        int r, keyslot = -1, token = -1;
-        uint32_t pcr_mask = 0;
+        int r, token;
 
         assert(cd);
 
         for (token = start_token; token < sym_crypt_token_max(CRYPT_LUKS2); token++) {
+                _cleanup_free_ void *blob = NULL, *policy_hash = NULL, *pubkey = NULL, *salt = NULL;
                 _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
-                JsonVariant *w, *e;
+                size_t blob_size, policy_hash_size, pubkey_size, salt_size = 0;
+                uint32_t hash_pcr_mask, pubkey_pcr_mask;
+                uint16_t pcr_bank, primary_alg;
+                TPM2Flags flags;
+                int keyslot;
 
                 r = cryptsetup_get_token_as_json(cd, token, "systemd-tpm2", &v);
                 if (IN_SET(r, -ENOENT, -EINVAL, -EMEDIUMTYPE))
@@ -94,75 +233,49 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to read JSON token data off disk: %m");
 
-                w = json_variant_by_key(v, "tpm2-pcrs");
-                if (!w || !json_variant_is_array(w))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "TPM2 token data lacks 'tpm2-pcrs' field.");
+                r = tpm2_parse_luks2_json(
+                                v,
+                                &keyslot,
+                                &hash_pcr_mask,
+                                &pcr_bank,
+                                &pubkey, &pubkey_size,
+                                &pubkey_pcr_mask,
+                                &primary_alg,
+                                &blob, &blob_size,
+                                &policy_hash, &policy_hash_size,
+                                &salt, &salt_size,
+                                &flags);
+                if (r == -EUCLEAN) /* Gracefully handle issues in JSON fields not owned by us */
+                        continue;
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse TPM2 JSON data: %m");
 
-                assert(pcr_mask == 0);
-                JSON_VARIANT_ARRAY_FOREACH(e, w) {
-                        uintmax_t u;
+                if (search_pcr_mask == UINT32_MAX ||
+                    search_pcr_mask == hash_pcr_mask) {
 
-                        if (!json_variant_is_number(e))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "TPM2 PCR is not a number.");
+                        if (start_token <= 0)
+                                log_info("Automatically discovered security TPM2 token unlocks volume.");
 
-                        u = json_variant_unsigned(e);
-                        if (u >= TPM2_PCRS_MAX)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "TPM2 PCR number out of range.");
-
-                        pcr_mask |= UINT32_C(1) << u;
+                        *ret_hash_pcr_mask = hash_pcr_mask;
+                        *ret_pcr_bank = pcr_bank;
+                        *ret_pubkey = TAKE_PTR(pubkey);
+                        *ret_pubkey_size = pubkey_size;
+                        *ret_pubkey_pcr_mask = pubkey_pcr_mask;
+                        *ret_primary_alg = primary_alg;
+                        *ret_blob = TAKE_PTR(blob);
+                        *ret_blob_size = blob_size;
+                        *ret_policy_hash = TAKE_PTR(policy_hash);
+                        *ret_policy_hash_size = policy_hash_size;
+                        *ret_salt = TAKE_PTR(salt);
+                        *ret_salt_size = salt_size;
+                        *ret_keyslot = keyslot;
+                        *ret_token = token;
+                        *ret_flags = flags;
+                        return 0;
                 }
 
-                if (search_pcr_mask != UINT32_MAX &&
-                    search_pcr_mask != pcr_mask) /* PCR mask doesn't match what is configured, ignore this entry */
-                        continue;
-
-                assert(!blob);
-                w = json_variant_by_key(v, "tpm2-blob");
-                if (!w || !json_variant_is_string(w))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "TPM2 token data lacks 'tpm2-blob' field.");
-
-                r = unbase64mem(json_variant_string(w), SIZE_MAX, &blob, &blob_size);
-                if (r < 0)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Invalid base64 data in 'tpm2-blob' field.");
-
-                assert(!policy_hash);
-                w = json_variant_by_key(v, "tpm2-policy-hash");
-                if (!w || !json_variant_is_string(w))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "TPM2 token data lacks 'tpm2-policy-hash' field.");
-
-                r = unhexmem(json_variant_string(w), SIZE_MAX, &policy_hash, &policy_hash_size);
-                if (r < 0)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Invalid base64 data in 'tpm2-policy-hash' field.");
-
-                assert(keyslot < 0);
-                keyslot = cryptsetup_get_keyslot_from_token(v);
-                if (keyslot < 0)
-                        return log_error_errno(keyslot, "Failed to extract keyslot index from TPM2 JSON data: %m");
-
-                break;
+                /* PCR mask doesn't match what is configured, ignore this entry, let's see next */
         }
 
-        if (!blob)
-                return log_error_errno(SYNTHETIC_ERRNO(ENXIO),
-                                       "No valid TPM2 token data found.");
-
-        if (start_token <= 0)
-                log_info("Automatically discovered security TPM2 token unlocks volume.");
-
-        *ret_pcr_mask = pcr_mask;
-        *ret_blob = TAKE_PTR(blob);
-        *ret_blob_size = blob_size;
-        *ret_policy_hash = TAKE_PTR(policy_hash);
-        *ret_policy_hash_size = policy_hash_size;
-        *ret_keyslot = keyslot;
-        *ret_token = token;
-
-        return 0;
+        return log_error_errno(SYNTHETIC_ERRNO(ENXIO), "No valid TPM2 token data found.");
 }
diff --git a/src/cryptsetup/cryptsetup-tpm2.h b/src/cryptsetup/cryptsetup-tpm2.h
index 8ddf301..f6549b7 100644
--- a/src/cryptsetup/cryptsetup-tpm2.h
+++ b/src/cryptsetup/cryptsetup-tpm2.h
@@ -3,16 +3,24 @@
 
 #include <sys/types.h>
 
+#include "ask-password-api.h"
 #include "cryptsetup-util.h"
 #include "log.h"
 #include "time-util.h"
+#include "tpm2-util.h"
 
 #if HAVE_TPM2
 
 int acquire_tpm2_key(
                 const char *volume_name,
                 const char *device,
-                uint32_t pcr_mask,
+                uint32_t hash_pcr_mask,
+                uint16_t pcr_bank,
+                const void *pubkey,
+                size_t pubkey_size,
+                uint32_t pubkey_pcr_mask,
+                const char *signature_path,
+                uint16_t primary_alg,
                 const char *key_file,
                 size_t key_file_size,
                 uint64_t key_file_offset,
@@ -20,6 +28,12 @@
                 size_t key_data_size,
                 const void *policy_hash,
                 size_t policy_hash_size,
+                const void *salt,
+                size_t salt_size,
+                TPM2Flags flags,
+                usec_t until,
+                bool headless,
+                AskPasswordFlags ask_password_flags,
                 void **ret_decrypted_key,
                 size_t *ret_decrypted_key_size);
 
@@ -27,11 +41,19 @@
                 struct crypt_device *cd,
                 uint32_t search_pcr_mask,
                 int start_token,
-                uint32_t *ret_pcr_mask,
+                uint32_t *ret_hash_pcr_mask,
+                uint16_t *ret_pcr_bank,
+                void **ret_pubkey,
+                size_t *ret_pubkey_size,
+                uint32_t *ret_pubkey_pcr_mask,
+                uint16_t *ret_primary_alg,
                 void **ret_blob,
                 size_t *ret_blob_size,
                 void **ret_policy_hash,
                 size_t *ret_policy_hash_size,
+                void **ret_salt,
+                size_t *ret_salt_size,
+                TPM2Flags *ret_flags,
                 int *ret_keyslot,
                 int *ret_token);
 
@@ -40,7 +62,13 @@
 static inline int acquire_tpm2_key(
                 const char *volume_name,
                 const char *device,
-                uint32_t pcr_mask,
+                uint32_t hash_pcr_mask,
+                uint16_t pcr_bank,
+                const void *pubkey,
+                size_t pubkey_size,
+                uint32_t pubkey_pcr_mask,
+                const char *signature_path,
+                uint16_t primary_alg,
                 const char *key_file,
                 size_t key_file_size,
                 uint64_t key_file_offset,
@@ -48,6 +76,12 @@
                 size_t key_data_size,
                 const void *policy_hash,
                 size_t policy_hash_size,
+                const void *salt,
+                size_t salt_size,
+                TPM2Flags flags,
+                usec_t until,
+                bool headless,
+                AskPasswordFlags ask_password_flags,
                 void **ret_decrypted_key,
                 size_t *ret_decrypted_key_size) {
 
@@ -59,11 +93,19 @@
                 struct crypt_device *cd,
                 uint32_t search_pcr_mask,
                 int start_token,
-                uint32_t *ret_pcr_mask,
+                uint32_t *ret_hash_pcr_mask,
+                uint16_t *ret_pcr_bank,
+                void **ret_pubkey,
+                size_t *ret_pubkey_size,
+                uint32_t *ret_pubkey_pcr_mask,
+                uint16_t *ret_primary_alg,
                 void **ret_blob,
                 size_t *ret_blob_size,
                 void **ret_policy_hash,
                 size_t *ret_policy_hash_size,
+                void **ret_salt,
+                size_t *ret_salt_size,
+                TPM2Flags *ret_flags,
                 int *ret_keyslot,
                 int *ret_token) {
 
diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
index 440f17d..e776605 100644
--- a/src/cryptsetup/cryptsetup.c
+++ b/src/cryptsetup/cryptsetup.c
@@ -8,6 +8,7 @@
 #include <unistd.h>
 
 #include "sd-device.h"
+#include "sd-messages.h"
 
 #include "alloc-util.h"
 #include "ask-password-api.h"
@@ -17,7 +18,9 @@
 #include "cryptsetup-tpm2.h"
 #include "cryptsetup-util.h"
 #include "device-util.h"
+#include "efi-api.h"
 #include "efi-loader.h"
+#include "env-util.h"
 #include "escape.h"
 #include "fileio.h"
 #include "fs-util.h"
@@ -33,16 +36,27 @@
 #include "path-util.h"
 #include "pkcs11-util.h"
 #include "pretty-print.h"
+#include "process-util.h"
 #include "random-util.h"
-#include "string-util.h"
+#include "string-table.h"
 #include "strv.h"
+#include "tpm-pcr.h"
 #include "tpm2-util.h"
 
 /* internal helper */
 #define ANY_LUKS "LUKS"
 /* as in src/cryptsetup.h */
-#define CRYPT_SECTOR_SIZE 512
-#define CRYPT_MAX_SECTOR_SIZE 4096
+#define CRYPT_SECTOR_SIZE 512U
+#define CRYPT_MAX_SECTOR_SIZE 4096U
+
+typedef enum PassphraseType {
+        PASSPHRASE_NONE,
+        PASSPHRASE_REGULAR = 1 << 0,
+        PASSPHRASE_RECOVERY_KEY = 1 << 1,
+        PASSPHRASE_BOTH = PASSPHRASE_REGULAR|PASSPHRASE_RECOVERY_KEY,
+        _PASSPHRASE_TYPE_MAX,
+        _PASSPHRASE_TYPE_INVALID = -1,
+} PassphraseType;
 
 static const char *arg_type = NULL; /* ANY_LUKS, CRYPT_LUKS1, CRYPT_LUKS2, CRYPT_TCRYPT, CRYPT_BITLK or CRYPT_PLAIN */
 static char *arg_cipher = NULL;
@@ -78,10 +92,15 @@
 static void *arg_fido2_cid = NULL;
 static size_t arg_fido2_cid_size = 0;
 static char *arg_fido2_rp_id = NULL;
-static char *arg_tpm2_device = NULL;
+static char *arg_tpm2_device = NULL; /* These and the following fields are about locking an encrypted volume to the local TPM */
 static bool arg_tpm2_device_auto = false;
 static uint32_t arg_tpm2_pcr_mask = UINT32_MAX;
+static char *arg_tpm2_signature = NULL;
+static bool arg_tpm2_pin = false;
 static bool arg_headless = false;
+static usec_t arg_token_timeout_usec = 30*USEC_PER_SEC;
+static unsigned arg_tpm2_measure_pcr = UINT_MAX; /* This and the following field is about measuring the unlocked volume key to the local TPM */
+static char **arg_tpm2_measure_banks = NULL;
 
 STATIC_DESTRUCTOR_REGISTER(arg_cipher, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_hash, freep);
@@ -92,6 +111,19 @@
 STATIC_DESTRUCTOR_REGISTER(arg_fido2_cid, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_fido2_rp_id, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_tpm2_device, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_signature, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_measure_banks, strv_freep);
+
+static const char* const passphrase_type_table[_PASSPHRASE_TYPE_MAX] = {
+        [PASSPHRASE_REGULAR] = "passphrase",
+        [PASSPHRASE_RECOVERY_KEY] = "recovery key",
+        [PASSPHRASE_BOTH] = "passphrase or recovery key",
+};
+
+const char* passphrase_type_to_string(PassphraseType t);
+PassphraseType passphrase_type_from_string(const char *s);
+
+DEFINE_STRING_TABLE_LOOKUP(passphrase_type, PassphraseType);
 
 /* Options Debian's crypttab knows we don't:
 
@@ -370,21 +402,72 @@
 
         } else if ((val = startswith(option, "tpm2-pcrs="))) {
 
-                if (isempty(val))
-                        arg_tpm2_pcr_mask = 0;
-                else {
-                        uint32_t mask;
+                r = tpm2_parse_pcr_argument(val, &arg_tpm2_pcr_mask);
+                if (r < 0)
+                        return r;
 
-                        r = tpm2_parse_pcrs(val, &mask);
-                        if (r < 0)
-                                return r;
+        } else if ((val = startswith(option, "tpm2-signature="))) {
 
-                        if (arg_tpm2_pcr_mask == UINT32_MAX)
-                                arg_tpm2_pcr_mask = mask;
-                        else
-                                arg_tpm2_pcr_mask |= mask;
+                if (!path_is_absolute(val))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "TPM2 signature path \"%s\" is not absolute, refusing.", val);
+
+                r = free_and_strdup(&arg_tpm2_signature, val);
+                if (r < 0)
+                        return log_oom();
+
+        } else if ((val = startswith(option, "tpm2-pin="))) {
+
+                r = parse_boolean(val);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to parse %s, ignoring: %m", option);
+                        return 0;
                 }
 
+                arg_tpm2_pin = r;
+
+        } else if ((val = startswith(option, "tpm2-measure-pcr="))) {
+                unsigned pcr;
+
+                r = safe_atou(val, &pcr);
+                if (r < 0) {
+                        r = parse_boolean(val);
+                        if (r < 0) {
+                                log_error_errno(r, "Failed to parse %s, ignoring: %m", option);
+                                return 0;
+                        }
+
+                        pcr = r ? TPM_PCR_INDEX_VOLUME_KEY : UINT_MAX;
+                } else if (pcr >= TPM2_PCRS_MAX) {
+                        log_error("Selected TPM index for measurement %u outside of allowed range 0…%u, ignoring.", pcr, TPM2_PCRS_MAX-1);
+                        return 0;
+                }
+
+                arg_tpm2_measure_pcr = pcr;
+
+        } else if ((val = startswith(option, "tpm2-measure-bank="))) {
+
+#if HAVE_OPENSSL
+                _cleanup_strv_free_ char **l = NULL;
+
+                l = strv_split(optarg, ":");
+                if (!l)
+                        return log_oom();
+
+                STRV_FOREACH(i, l) {
+                        const EVP_MD *implementation;
+
+                        implementation = EVP_get_digestbyname(*i);
+                        if (!implementation)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown bank '%s', refusing.", val);
+
+                        if (strv_extend(&arg_tpm2_measure_banks, EVP_MD_name(implementation)) < 0)
+                                return log_oom();
+                }
+#else
+                log_error("Build lacks OpenSSL support, cannot measure to PCR banks, ignoring: %s", option);
+#endif
+
         } else if ((val = startswith(option, "try-empty-password="))) {
 
                 r = parse_boolean(val);
@@ -409,7 +492,15 @@
         } else if (streq(option, "headless"))
                 arg_headless = true;
 
-        else if (!streq(option, "x-initrd.attach"))
+        else if ((val = startswith(option, "token-timeout="))) {
+
+                r = parse_sec_fix_0(val, &arg_token_timeout_usec);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to parse %s, ignoring: %m", option);
+                        return 0;
+                }
+
+        } else if (!streq(option, "x-initrd.attach"))
                 log_warning("Encountered unknown /etc/crypttab option '%s', ignoring.", option);
 
         return 0;
@@ -451,9 +542,8 @@
                 "ID_MODEL\0";
 
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-        const char *i, *name;
+        const char *name;
         struct stat st;
-        int r;
 
         assert(path);
 
@@ -468,14 +558,15 @@
 
         if (sd_device_get_property_value(device, "ID_PART_ENTRY_NAME", &name) >= 0) {
                 _cleanup_free_ char *unescaped = NULL;
+                ssize_t l;
 
                 /* ID_PART_ENTRY_NAME uses \x style escaping, using libblkid's blkid_encode_string(). Let's
                  * reverse this here to make the string more human friendly in case people embed spaces or
                  * other weird stuff. */
 
-                r = cunescape(name, UNESCAPE_RELAX, &unescaped);
-                if (r < 0) {
-                        log_debug_errno(r, "Failed to unescape ID_PART_ENTRY_NAME, skipping device: %m");
+                l = cunescape(name, UNESCAPE_RELAX, &unescaped);
+                if (l < 0) {
+                        log_debug_errno(l, "Failed to unescape ID_PART_ENTRY_NAME, skipping device: %m");
                         return NULL;
                 }
 
@@ -543,16 +634,109 @@
         return name_buffer;
 }
 
+static PassphraseType check_registered_passwords(struct crypt_device *cd) {
+        _cleanup_free_ bool *slots = NULL;
+        int slot_max;
+        PassphraseType passphrase_type = PASSPHRASE_NONE;
+
+        assert(cd);
+
+        if (!streq_ptr(crypt_get_type(cd), CRYPT_LUKS2)) {
+                log_debug("%s: not a LUKS2 device, only passphrases are supported", crypt_get_device_name(cd));
+                return PASSPHRASE_REGULAR;
+        }
+
+        /* Search all used slots */
+        assert_se((slot_max = crypt_keyslot_max(CRYPT_LUKS2)) > 0);
+        slots = new(bool, slot_max);
+        if (!slots)
+                return log_oom();
+
+        for (int slot = 0; slot < slot_max; slot++)
+                slots[slot] = IN_SET(crypt_keyslot_status(cd, slot), CRYPT_SLOT_ACTIVE, CRYPT_SLOT_ACTIVE_LAST);
+
+        /* Iterate all LUKS2 tokens and keep track of all their slots */
+        for (int token = 0; token < sym_crypt_token_max(CRYPT_LUKS2); token++) {
+                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+                const char *type;
+                JsonVariant *w, *z;
+                int tk;
+
+                tk = cryptsetup_get_token_as_json(cd, token, NULL, &v);
+                if (IN_SET(tk, -ENOENT, -EINVAL))
+                        continue;
+                if (tk < 0) {
+                        log_warning_errno(tk, "Failed to read JSON token data, ignoring: %m");
+                        continue;
+                }
+
+                w = json_variant_by_key(v, "type");
+                if (!w || !json_variant_is_string(w)) {
+                        log_warning("Token JSON data lacks type field, ignoring.");
+                        continue;
+                }
+
+                type = json_variant_string(w);
+                if (STR_IN_SET(type, "systemd-recovery", "systemd-pkcs11", "systemd-fido2", "systemd-tpm2")) {
+
+                        /* At least exists one recovery key */
+                        if (streq(type, "systemd-recovery"))
+                                passphrase_type |= PASSPHRASE_RECOVERY_KEY;
+
+                        w = json_variant_by_key(v, "keyslots");
+                        if (!w || !json_variant_is_array(w)) {
+                                log_warning("Token JSON data lacks keyslots field, ignoring.");
+                                continue;
+                        }
+
+                        JSON_VARIANT_ARRAY_FOREACH(z, w) {
+                                unsigned u;
+                                int at;
+
+                                if (!json_variant_is_string(z)) {
+                                        log_warning("Token JSON data's keyslot field is not an array of strings, ignoring.");
+                                        continue;
+                                }
+
+                                at = safe_atou(json_variant_string(z), &u);
+                                if (at < 0) {
+                                        log_warning_errno(at, "Token JSON data's keyslot field is not an integer formatted as string, ignoring.");
+                                        continue;
+                                }
+
+                                if (u >= (unsigned) slot_max) {
+                                        log_warning_errno(at, "Token JSON data's keyslot field exceeds the maximum value allowed, ignoring.");
+                                        continue;
+                                }
+
+                                slots[u] = false;
+                        }
+                }
+        }
+
+        /* Check if any of the slots is not referenced by systemd tokens */
+        for (int slot = 0; slot < slot_max; slot++)
+                if (slots[slot]) {
+                        passphrase_type |= PASSPHRASE_REGULAR;
+                        break;
+                }
+
+        /* All the slots are referenced by systemd tokens, so if a recovery key is not enrolled,
+         * we will not be able to enter a passphrase. */
+        return passphrase_type;
+}
+
 static int get_password(
                 const char *vol,
                 const char *src,
                 usec_t until,
                 bool accept_cached,
+                PassphraseType passphrase_type,
                 char ***ret) {
 
         _cleanup_free_ char *friendly = NULL, *text = NULL, *disk_path = NULL;
         _cleanup_strv_free_erase_ char **passwords = NULL;
-        char **p, *id;
+        char *id;
         int r = 0;
         AskPasswordFlags flags = arg_ask_password_flags | ASK_PASSWORD_PUSH_CACHE;
 
@@ -567,7 +751,7 @@
         if (!friendly)
                 return log_oom();
 
-        if (asprintf(&text, "Please enter passphrase for disk %s:", friendly) < 0)
+        if (asprintf(&text, "Please enter %s for disk %s:", passphrase_type_to_string(passphrase_type), friendly) < 0)
                 return log_oom();
 
         disk_path = cescape(src);
@@ -587,7 +771,7 @@
 
                 assert(strv_length(passwords) == 1);
 
-                if (asprintf(&text, "Please enter passphrase for disk %s (verification):", friendly) < 0)
+                if (asprintf(&text, "Please enter %s for disk %s (verification):", passphrase_type_to_string(passphrase_type), friendly) < 0)
                         return log_oom();
 
                 id = strjoina("cryptsetup-verification:", disk_path);
@@ -626,6 +810,157 @@
         return 0;
 }
 
+static int measure_volume_key(
+                struct crypt_device *cd,
+                const char *name,
+                const void *volume_key,
+                size_t volume_key_size) {
+
+        int r;
+
+        assert(cd);
+        assert(name);
+        assert(volume_key);
+        assert(volume_key_size > 0);
+
+        if (arg_tpm2_measure_pcr == UINT_MAX) {
+                log_debug("Not measuring volume key, deactivated.");
+                return 0;
+        }
+
+        r = efi_stub_measured(LOG_WARNING);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                log_debug("Kernel stub did not measure kernel image into the expected PCR, skipping userspace measurement, too.");
+                return 0;
+        }
+
+#if HAVE_TPM2
+        r = dlopen_tpm2();
+        if (r < 0)
+                return log_error_errno(r, "Failed to load TPM2 libraries: %m");
+
+        _cleanup_tpm2_context_ Tpm2Context *c = NULL;
+        r = tpm2_context_new(arg_tpm2_device, &c);
+        if (r < 0)
+                return r;
+
+        _cleanup_strv_free_ char **l = NULL;
+        if (strv_isempty(arg_tpm2_measure_banks)) {
+                r = tpm2_get_good_pcr_banks_strv(c, UINT32_C(1) << arg_tpm2_measure_pcr, &l);
+                if (r < 0)
+                        return r;
+        }
+
+        _cleanup_free_ char *joined = strv_join(l ?: arg_tpm2_measure_banks, ", ");
+        if (!joined)
+                return log_oom();
+
+        /* Note: we don't directly measure the volume key, it might be a security problem to send an
+         * unprotected direct hash of the secret volume key over the wire to the TPM. Hence let's instead
+         * send a HMAC signature instead. */
+
+        _cleanup_free_ char *escaped = NULL;
+        escaped = xescape(name, ":"); /* avoid ambiguity around ":" once we join things below */
+        if (!escaped)
+                return log_oom();
+
+        _cleanup_free_ char *s = NULL;
+        s = strjoin("cryptsetup:", escaped, ":", strempty(crypt_get_uuid(cd)));
+        if (!s)
+                return log_oom();
+
+        r = tpm2_extend_bytes(c, l ?: arg_tpm2_measure_banks, arg_tpm2_measure_pcr, s, SIZE_MAX, volume_key, volume_key_size);
+        if (r < 0)
+                return r;
+
+        log_struct(LOG_INFO,
+                   "MESSAGE_ID=" SD_MESSAGE_TPM_PCR_EXTEND_STR,
+                   LOG_MESSAGE("Successfully extended PCR index %u with '%s' and volume key (banks %s).", arg_tpm2_measure_pcr, s, joined),
+                   "MEASURING=%s", s,
+                   "PCR=%u", arg_tpm2_measure_pcr,
+                   "BANKS=%s", joined);
+
+        return 0;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "TPM2 support disabled, not measuring.");
+#endif
+}
+
+static int measured_crypt_activate_by_volume_key(
+                struct crypt_device *cd,
+                const char *name,
+                const void *volume_key,
+                size_t volume_key_size,
+                uint32_t flags) {
+
+        int r;
+
+        assert(cd);
+        assert(name);
+
+        /* A wrapper around crypt_activate_by_volume_key() which also measures to a PCR if that's requested. */
+
+        r = crypt_activate_by_volume_key(cd, name, volume_key, volume_key_size, flags);
+        if (r < 0)
+                return r;
+
+        if (volume_key_size == 0) {
+                log_debug("Not measuring volume key, none specified.");
+                return r;
+        }
+
+        (void) measure_volume_key(cd, name, volume_key, volume_key_size); /* OK if fails */
+        return r;
+}
+
+static int measured_crypt_activate_by_passphrase(
+                struct crypt_device *cd,
+                const char *name,
+                int keyslot,
+                const char *passphrase,
+                size_t passphrase_size,
+                uint32_t flags) {
+
+        _cleanup_(erase_and_freep) void *vk = NULL;
+        size_t vks;
+        int r;
+
+        assert(cd);
+
+        /* A wrapper around crypt_activate_by_passphrase() which also measures to a PCR if that's
+         * requested. Note that we need the volume key for the measurement, and
+         * crypt_activate_by_passphrase() doesn't give us access to this. Hence, we operate indirectly, and
+         * retrieve the volume key first, and then activate through that. */
+
+        if (arg_tpm2_measure_pcr == UINT_MAX) {
+                log_debug("Not measuring volume key, deactivated.");
+                goto shortcut;
+        }
+
+        r = crypt_get_volume_key_size(cd);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                log_debug("Not measuring volume key, none defined.");
+                goto shortcut;
+        }
+
+        vk = malloc(vks = r);
+        if (!vk)
+                return -ENOMEM;
+
+        r = crypt_volume_key_get(cd, keyslot, vk, &vks, passphrase, passphrase_size);
+        if (r < 0)
+                return r;
+
+        return measured_crypt_activate_by_volume_key(cd, name, vk, vks, flags);
+
+shortcut:
+        return crypt_activate_by_passphrase(cd, name, keyslot, passphrase, passphrase_size, flags);
+}
+
 static int attach_tcrypt(
                 struct crypt_device *cd,
                 const char *name,
@@ -694,7 +1029,7 @@
                 return log_error_errno(r, "Failed to load tcrypt superblock on device %s: %m", crypt_get_device_name(cd));
         }
 
-        r = crypt_activate_by_volume_key(cd, name, NULL, 0, flags);
+        r = measured_crypt_activate_by_volume_key(cd, name, NULL, 0, flags);
         if (r < 0)
                 return log_error_errno(r, "Failed to activate tcrypt device %s: %m", crypt_get_device_name(cd));
 
@@ -710,16 +1045,32 @@
         return s;
 }
 
-static int make_security_device_monitor(sd_event *event, sd_device_monitor **ret) {
+static int make_security_device_monitor(
+                sd_event **ret_event,
+                sd_device_monitor **ret_monitor) {
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         int r;
 
-        assert(ret);
+        assert(ret_event);
+        assert(ret_monitor);
+
+        /* Waits for a device with "security-device" tag to show up in udev */
+
+        r = sd_event_default(&event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate event loop: %m");
+
+        r = sd_event_add_time_relative(event, NULL, CLOCK_MONOTONIC, arg_token_timeout_usec, USEC_PER_SEC, NULL, INT_TO_PTR(-ETIMEDOUT));
+        if (r < 0)
+                return log_error_errno(r, "Failed to install timeout event source: %m");
 
         r = sd_device_monitor_new(&monitor);
         if (r < 0)
                 return log_error_errno(r, "Failed to allocate device monitor: %m");
 
+        (void) sd_device_monitor_set_description(monitor, "security-device");
+
         r = sd_device_monitor_filter_add_match_tag(monitor, "security-device");
         if (r < 0)
                 return log_error_errno(r, "Failed to configure device monitor: %m");
@@ -732,10 +1083,178 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to start device monitor: %m");
 
-        *ret = TAKE_PTR(monitor);
+        *ret_event = TAKE_PTR(event);
+        *ret_monitor = TAKE_PTR(monitor);
         return 0;
 }
 
+static int run_security_device_monitor(
+                sd_event *event,
+                sd_device_monitor *monitor) {
+        bool processed = false;
+        int r;
+
+        assert(event);
+        assert(monitor);
+
+        /* Runs the event loop for the device monitor until either something happens, or the time-out is
+         * hit. */
+
+        for (;;) {
+                int x;
+
+                r = sd_event_get_exit_code(event, &x);
+                if (r < 0) {
+                        if (r != -ENODATA)
+                                return log_error_errno(r, "Failed to query exit code from event loop: %m");
+
+                        /* On ENODATA we aren't told to exit yet. */
+                } else {
+                        assert(x == -ETIMEDOUT);
+                        return log_notice_errno(SYNTHETIC_ERRNO(EAGAIN),
+                                                "Timed out waiting for security device, aborting security device based authentication attempt.");
+                }
+
+                /* Wait for one event, and then eat all subsequent events until there are no further ones */
+                r = sd_event_run(event, processed ? 0 : UINT64_MAX);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to run event loop: %m");
+                if (r == 0) /* no events queued anymore */
+                        return 0;
+
+                processed = true;
+        }
+}
+
+static bool libcryptsetup_plugins_support(void) {
+
+#if HAVE_TPM2
+        /* Currently, there's no way for us to query the volume key when plugins are used. Hence don't use
+         * plugins, if measurement has been requested. */
+        if (arg_tpm2_measure_pcr != UINT_MAX)
+                return false;
+#endif
+
+#if HAVE_LIBCRYPTSETUP_PLUGINS
+        int r;
+
+        /* Permit a way to disable libcryptsetup token module support, for debugging purposes. */
+        r = getenv_bool("SYSTEMD_CRYPTSETUP_USE_TOKEN_MODULE");
+        if (r < 0 && r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_CRYPTSETUP_USE_TOKEN_MODULE env var: %m");
+        if (r == 0)
+                return false;
+
+        return crypt_token_external_path();
+#else
+        return false;
+#endif
+}
+
+#if HAVE_LIBCRYPTSETUP_PLUGINS
+static int acquire_pins_from_env_variable(char ***ret_pins) {
+        _cleanup_(erase_and_freep) char *envpin = NULL;
+        _cleanup_strv_free_erase_ char **pins = NULL;
+        int r;
+
+        assert(ret_pins);
+
+        r = getenv_steal_erase("PIN", &envpin);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
+        if (r > 0) {
+                pins = strv_new(envpin);
+                if (!pins)
+                        return log_oom();
+        }
+
+        *ret_pins = TAKE_PTR(pins);
+
+        return 0;
+}
+#endif
+
+static int crypt_activate_by_token_pin_ask_password(
+                struct crypt_device *cd,
+                const char *name,
+                const char *type,
+                usec_t until,
+                bool headless,
+                void *usrptr,
+                uint32_t activation_flags,
+                const char *message,
+                const char *key_name,
+                const char *credential_name) {
+
+#if HAVE_LIBCRYPTSETUP_PLUGINS
+        AskPasswordFlags flags = ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_ACCEPT_CACHED;
+        _cleanup_strv_free_erase_ char **pins = NULL;
+        int r;
+
+        r = crypt_activate_by_token_pin(cd, name, type, CRYPT_ANY_TOKEN, NULL, 0, usrptr, activation_flags);
+        if (r > 0) /* returns unlocked keyslot id on success */
+                r = 0;
+        if (r != -ENOANO) /* needs pin or pin is wrong */
+                return r;
+
+        r = acquire_pins_from_env_variable(&pins);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(p, pins) {
+                r = crypt_activate_by_token_pin(cd, name, type, CRYPT_ANY_TOKEN, *p, strlen(*p), usrptr, activation_flags);
+                if (r > 0) /* returns unlocked keyslot id on success */
+                        r = 0;
+                if (r != -ENOANO) /* needs pin or pin is wrong */
+                        return r;
+        }
+
+        if (headless)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOPKG), "PIN querying disabled via 'headless' option. Use the '$PIN' environment variable.");
+
+        for (;;) {
+                pins = strv_free_erase(pins);
+                r = ask_password_auto(message, "drive-harddisk", NULL, key_name, credential_name, until, flags, &pins);
+                if (r < 0)
+                        return r;
+
+                STRV_FOREACH(p, pins) {
+                        r = crypt_activate_by_token_pin(cd, name, type, CRYPT_ANY_TOKEN, *p, strlen(*p), usrptr, activation_flags);
+                        if (r > 0) /* returns unlocked keyslot id on success */
+                                r = 0;
+                        if (r != -ENOANO) /* needs pin or pin is wrong */
+                                return r;
+                }
+
+                flags &= ~ASK_PASSWORD_ACCEPT_CACHED;
+        }
+        return r;
+#else
+        return -EOPNOTSUPP;
+#endif
+}
+
+static int attach_luks2_by_fido2_via_plugin(
+                struct crypt_device *cd,
+                const char *name,
+                usec_t until,
+                bool headless,
+                void *usrptr,
+                uint32_t activation_flags) {
+
+        return crypt_activate_by_token_pin_ask_password(
+                        cd,
+                        name,
+                        "systemd-fido2",
+                        until,
+                        headless,
+                        usrptr,
+                        activation_flags,
+                        "Please enter security token PIN:",
+                        "fido2-pin",
+                        "cryptsetup.fido2-pin");
+}
+
 static int attach_luks_or_plain_or_bitlk_by_fido2(
                 struct crypt_device *cd,
                 const char *name,
@@ -749,13 +1268,13 @@
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
         _cleanup_(erase_and_freep) void *decrypted_key = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
-        _cleanup_free_ void *discovered_salt = NULL, *discovered_cid = NULL;
-        size_t discovered_salt_size, discovered_cid_size, cid_size, decrypted_key_size;
-        _cleanup_free_ char *friendly = NULL, *discovered_rp_id = NULL;
+        size_t decrypted_key_size, cid_size = 0;
+        _cleanup_free_ char *friendly = NULL;
         int keyslot = arg_key_slot, r;
-        const char *rp_id;
-        const void *cid;
+        const char *rp_id = NULL;
+        const void *cid = NULL;
         Fido2EnrollFlags required;
+        bool use_libcryptsetup_plugin = libcryptsetup_plugins_support();
 
         assert(cd);
         assert(name);
@@ -775,32 +1294,6 @@
                  * use PIN + UP when needed, and do not configure UV at all. Eventually, we should make this
                  * explicitly configurable. */
                 required = FIDO2ENROLL_PIN_IF_NEEDED | FIDO2ENROLL_UP_IF_NEEDED | FIDO2ENROLL_UV_OMIT;
-        } else {
-                r = find_fido2_auto_data(
-                                cd,
-                                &discovered_rp_id,
-                                &discovered_salt,
-                                &discovered_salt_size,
-                                &discovered_cid,
-                                &discovered_cid_size,
-                                &keyslot,
-                                &required);
-
-                if (IN_SET(r, -ENOTUNIQ, -ENXIO))
-                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                               "Automatic FIDO2 metadata discovery was not possible because missing or not unique, falling back to traditional unlocking.");
-                if (r < 0)
-                        return r;
-
-                if ((required & (FIDO2ENROLL_PIN | FIDO2ENROLL_UP | FIDO2ENROLL_UV)) && arg_headless)
-                        return log_error_errno(SYNTHETIC_ERRNO(ENOPKG),
-                                               "Local verification is required to unlock this volume, but the 'headless' parameter was set.");
-
-                rp_id = discovered_rp_id;
-                key_data = discovered_salt;
-                key_data_size = discovered_salt_size;
-                cid = discovered_cid;
-                cid_size = discovered_cid_size;
         }
 
         friendly = friendly_disk_name(crypt_get_device_name(cd), name);
@@ -808,23 +1301,41 @@
                 return log_oom();
 
         for (;;) {
-                bool processed = false;
+                if (use_libcryptsetup_plugin && !arg_fido2_cid) {
+                        r = attach_luks2_by_fido2_via_plugin(cd, name, until, arg_headless, arg_fido2_device, flags);
+                        if (IN_SET(r, -ENOTUNIQ, -ENXIO, -ENOENT))
+                                return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
+                                                       "Automatic FIDO2 metadata discovery was not possible because missing or not unique, falling back to traditional unlocking.");
 
-                r = acquire_fido2_key(
-                                name,
-                                friendly,
-                                arg_fido2_device,
-                                rp_id,
-                                cid, cid_size,
-                                key_file, arg_keyfile_size, arg_keyfile_offset,
-                                key_data, key_data_size,
-                                until,
-                                arg_headless,
-                                required,
-                                &decrypted_key, &decrypted_key_size,
-                                arg_ask_password_flags);
-                if (r >= 0)
-                        break;
+                } else {
+                        if (cid)
+                                r = acquire_fido2_key(
+                                                name,
+                                                friendly,
+                                                arg_fido2_device,
+                                                rp_id,
+                                                cid, cid_size,
+                                                key_file, arg_keyfile_size, arg_keyfile_offset,
+                                                key_data, key_data_size,
+                                                until,
+                                                arg_headless,
+                                                required,
+                                                &decrypted_key, &decrypted_key_size,
+                                                arg_ask_password_flags);
+                        else
+                                r = acquire_fido2_key_auto(
+                                                cd,
+                                                name,
+                                                friendly,
+                                                arg_fido2_device,
+                                                until,
+                                                arg_headless,
+                                                &decrypted_key, &decrypted_key_size,
+                                                arg_ask_password_flags);
+                        if (r >= 0)
+                                break;
+                }
+
                 if (r != -EAGAIN) /* EAGAIN means: token not found */
                         return r;
 
@@ -834,11 +1345,7 @@
 
                         assert(!event);
 
-                        r = sd_event_default(&event);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to allocate event loop: %m");
-
-                        r = make_security_device_monitor(event, &monitor);
+                        r = make_security_device_monitor(&event, &monitor);
                         if (r < 0)
                                 return r;
 
@@ -849,33 +1356,26 @@
                         continue;
                 }
 
-                for (;;) {
-                        /* Wait for one event, and then eat all subsequent events until there are no
-                         * further ones */
-                        r = sd_event_run(event, processed ? 0 : UINT64_MAX);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to run event loop: %m");
-                        if (r == 0)
-                                break;
-
-                        processed = true;
-                }
+                r = run_security_device_monitor(event, monitor);
+                if (r < 0)
+                        return r;
 
                 log_debug("Got one or more potentially relevant udev events, rescanning FIDO2...");
         }
 
         if (pass_volume_key)
-                r = crypt_activate_by_volume_key(cd, name, decrypted_key, decrypted_key_size, flags);
+                r = measured_crypt_activate_by_volume_key(cd, name, decrypted_key, decrypted_key_size, flags);
         else {
                 _cleanup_(erase_and_freep) char *base64_encoded = NULL;
+                ssize_t base64_encoded_size;
 
                 /* Before using this key as passphrase we base64 encode it, for compat with homed */
 
-                r = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
-                if (r < 0)
+                base64_encoded_size = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+                if (base64_encoded_size < 0)
                         return log_oom();
 
-                r = crypt_activate_by_passphrase(cd, name, keyslot, base64_encoded, strlen(base64_encoded), flags);
+                r = measured_crypt_activate_by_passphrase(cd, name, keyslot, base64_encoded, base64_encoded_size, flags);
         }
         if (r == -EPERM) {
                 log_error_errno(r, "Failed to activate with FIDO2 decrypted key. (Key incorrect?)");
@@ -887,6 +1387,36 @@
         return 0;
 }
 
+static int attach_luks2_by_pkcs11_via_plugin(
+                struct crypt_device *cd,
+                const char *name,
+                const char *friendly_name,
+                usec_t until,
+                bool headless,
+                uint32_t flags) {
+
+#if HAVE_LIBCRYPTSETUP_PLUGINS
+        int r;
+
+        if (!streq_ptr(crypt_get_type(cd), CRYPT_LUKS2))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Automatic PKCS#11 metadata requires LUKS2 device.");
+
+        systemd_pkcs11_plugin_params params = {
+                .friendly_name = friendly_name,
+                .until = until,
+                .headless = headless
+        };
+
+        r = crypt_activate_by_token_pin(cd, name, "systemd-pkcs11", CRYPT_ANY_TOKEN, NULL, 0, &params, flags);
+        if (r > 0) /* returns unlocked keyslot id on success */
+                r = 0;
+
+        return r;
+#else
+        return -EOPNOTSUPP;
+#endif
+}
+
 static int attach_luks_or_plain_or_bitlk_by_pkcs11(
                 struct crypt_device *cd,
                 const char *name,
@@ -904,23 +1434,26 @@
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         _cleanup_free_ void *discovered_key = NULL;
         int keyslot = arg_key_slot, r;
-        const char *uri;
+        const char *uri = NULL;
+        bool use_libcryptsetup_plugin = libcryptsetup_plugins_support();
 
         assert(cd);
         assert(name);
         assert(arg_pkcs11_uri || arg_pkcs11_uri_auto);
 
         if (arg_pkcs11_uri_auto) {
-                r = find_pkcs11_auto_data(cd, &discovered_uri, &discovered_key, &discovered_key_size, &keyslot);
-                if (IN_SET(r, -ENOTUNIQ, -ENXIO))
-                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                               "Automatic PKCS#11 metadata discovery was not possible because missing or not unique, falling back to traditional unlocking.");
-                if (r < 0)
-                        return r;
+                if (!use_libcryptsetup_plugin) {
+                        r = find_pkcs11_auto_data(cd, &discovered_uri, &discovered_key, &discovered_key_size, &keyslot);
+                        if (IN_SET(r, -ENOTUNIQ, -ENXIO))
+                                return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
+                                                       "Automatic PKCS#11 metadata discovery was not possible because missing or not unique, falling back to traditional unlocking.");
+                        if (r < 0)
+                                return r;
 
-                uri = discovered_uri;
-                key_data = discovered_key;
-                key_data_size = discovered_key_size;
+                        uri = discovered_uri;
+                        key_data = discovered_key;
+                        key_data_size = discovered_key_size;
+                }
         } else {
                 uri = arg_pkcs11_uri;
 
@@ -933,19 +1466,22 @@
                 return log_oom();
 
         for (;;) {
-                bool processed = false;
+                if (use_libcryptsetup_plugin && arg_pkcs11_uri_auto)
+                        r = attach_luks2_by_pkcs11_via_plugin(cd, name, friendly, until, arg_headless, flags);
+                else {
+                        r = decrypt_pkcs11_key(
+                                        name,
+                                        friendly,
+                                        uri,
+                                        key_file, arg_keyfile_size, arg_keyfile_offset,
+                                        key_data, key_data_size,
+                                        until,
+                                        arg_headless,
+                                        &decrypted_key, &decrypted_key_size);
+                        if (r >= 0)
+                                break;
+                }
 
-                r = decrypt_pkcs11_key(
-                                name,
-                                friendly,
-                                uri,
-                                key_file, arg_keyfile_size, arg_keyfile_offset,
-                                key_data, key_data_size,
-                                until,
-                                arg_headless,
-                                &decrypted_key, &decrypted_key_size);
-                if (r >= 0)
-                        break;
                 if (r != -EAGAIN) /* EAGAIN means: token not found */
                         return r;
 
@@ -955,11 +1491,7 @@
 
                         assert(!event);
 
-                        r = sd_event_default(&event);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to allocate event loop: %m");
-
-                        r = make_security_device_monitor(event, &monitor);
+                        r = make_security_device_monitor(&event, &monitor);
                         if (r < 0)
                                 return r;
 
@@ -971,39 +1503,33 @@
                         continue;
                 }
 
-                for (;;) {
-                        /* Wait for one event, and then eat all subsequent events until there are no
-                         * further ones */
-                        r = sd_event_run(event, processed ? 0 : UINT64_MAX);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to run event loop: %m");
-                        if (r == 0)
-                                break;
-
-                        processed = true;
-                }
+                r = run_security_device_monitor(event, monitor);
+                if (r < 0)
+                        return r;
 
                 log_debug("Got one or more potentially relevant udev events, rescanning PKCS#11...");
         }
+        assert(decrypted_key);
 
         if (pass_volume_key)
-                r = crypt_activate_by_volume_key(cd, name, decrypted_key, decrypted_key_size, flags);
+                r = measured_crypt_activate_by_volume_key(cd, name, decrypted_key, decrypted_key_size, flags);
         else {
                 _cleanup_(erase_and_freep) char *base64_encoded = NULL;
+                ssize_t base64_encoded_size;
 
                 /* Before using this key as passphrase we base64 encode it. Why? For compatibility
                  * with homed's PKCS#11 hookup: there we want to use the key we acquired through
                  * PKCS#11 for other authentication/decryption mechanisms too, and some of them do
-                 * not not take arbitrary binary blobs, but require NUL-terminated strings — most
+                 * not take arbitrary binary blobs, but require NUL-terminated strings — most
                  * importantly UNIX password hashes. Hence, for compatibility we want to use a string
                  * without embedded NUL here too, and that's easiest to generate from a binary blob
                  * via base64 encoding. */
 
-                r = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
-                if (r < 0)
+                base64_encoded_size = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+                if (base64_encoded_size < 0)
                         return log_oom();
 
-                r = crypt_activate_by_passphrase(cd, name, keyslot, base64_encoded, strlen(base64_encoded), flags);
+                r = measured_crypt_activate_by_passphrase(cd, name, keyslot, base64_encoded, base64_encoded_size, flags);
         }
         if (r == -EPERM) {
                 log_error_errno(r, "Failed to activate with PKCS#11 decrypted key. (Key incorrect?)");
@@ -1015,16 +1541,31 @@
         return 0;
 }
 
-static int make_tpm2_device_monitor(sd_event *event, sd_device_monitor **ret) {
+static int make_tpm2_device_monitor(
+                sd_event **ret_event,
+                sd_device_monitor **ret_monitor) {
+
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         int r;
 
-        assert(ret);
+        assert(ret_event);
+        assert(ret_monitor);
+
+        r = sd_event_default(&event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate event loop: %m");
+
+        r = sd_event_add_time_relative(event, NULL, CLOCK_MONOTONIC, arg_token_timeout_usec, USEC_PER_SEC, NULL, INT_TO_PTR(-ETIMEDOUT));
+        if (r < 0)
+                return log_error_errno(r, "Failed to install timeout event source: %m");
 
         r = sd_device_monitor_new(&monitor);
         if (r < 0)
                 return log_error_errno(r, "Failed to allocate device monitor: %m");
 
+        (void) sd_device_monitor_set_description(monitor, "tpmrm");
+
         r = sd_device_monitor_filter_add_match_subsystem_devtype(monitor, "tpmrm", NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to configure device monitor: %m");
@@ -1037,10 +1578,45 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to start device monitor: %m");
 
-        *ret = TAKE_PTR(monitor);
+        *ret_event = TAKE_PTR(event);
+        *ret_monitor = TAKE_PTR(monitor);
         return 0;
 }
 
+static int attach_luks2_by_tpm2_via_plugin(
+                struct crypt_device *cd,
+                const char *name,
+                usec_t until,
+                bool headless,
+                uint32_t flags) {
+
+#if HAVE_LIBCRYPTSETUP_PLUGINS
+        systemd_tpm2_plugin_params params = {
+                .search_pcr_mask = arg_tpm2_pcr_mask,
+                .device = arg_tpm2_device,
+                .signature_path = arg_tpm2_signature,
+        };
+
+        if (!libcryptsetup_plugins_support())
+                return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                       "Libcryptsetup has external plugins support disabled.");
+
+        return crypt_activate_by_token_pin_ask_password(
+                        cd,
+                        name,
+                        "systemd-tpm2",
+                        until,
+                        headless,
+                        &params,
+                        flags,
+                        "Please enter TPM2 PIN:",
+                        "tpm2-pin",
+                        "cryptsetup.tpm2-pin");
+#else
+        return -EOPNOTSUPP;
+#endif
+}
+
 static int attach_luks_or_plain_or_bitlk_by_tpm2(
                 struct crypt_device *cd,
                 const char *name,
@@ -1067,8 +1643,6 @@
                 return log_oom();
 
         for (;;) {
-                bool processed = false;
-
                 if (key_file || key_data) {
                         /* If key data is specified, use that */
 
@@ -1076,17 +1650,50 @@
                                         name,
                                         arg_tpm2_device,
                                         arg_tpm2_pcr_mask == UINT32_MAX ? TPM2_PCR_MASK_DEFAULT : arg_tpm2_pcr_mask,
+                                        UINT16_MAX,
+                                        /* pubkey= */ NULL, /* pubkey_size= */ 0,
+                                        /* pubkey_pcr_mask= */ 0,
+                                        /* signature_path= */ NULL,
+                                        /* primary_alg= */ 0,
                                         key_file, arg_keyfile_size, arg_keyfile_offset,
                                         key_data, key_data_size,
-                                        NULL, 0, /* we don't know the policy hash */
+                                        /* policy_hash= */ NULL, /* policy_hash_size= */ 0, /* we don't know the policy hash */
+                                        /* salt= */ NULL, /* salt_size= */ 0,
+                                        arg_tpm2_pin ? TPM2_FLAGS_USE_PIN : 0,
+                                        until,
+                                        arg_headless,
+                                        arg_ask_password_flags,
                                         &decrypted_key, &decrypted_key_size);
                         if (r >= 0)
                                 break;
+                        if (IN_SET(r, -EACCES, -ENOLCK))
+                                return log_error_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 PIN unlock failed, falling back to traditional unlocking.");
                         if (ERRNO_IS_NOT_SUPPORTED(r)) /* TPM2 support not compiled in? */
                                 return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 support not available, falling back to traditional unlocking.");
-                        if (r != -EAGAIN) /* EAGAIN means: no tpm2 chip found */
-                                return r;
+                        /* EAGAIN means: no tpm2 chip found */
+                        if (r != -EAGAIN) {
+                                log_notice_errno(r, "TPM2 operation failed, falling back to traditional unlocking: %m");
+                                return -EAGAIN; /* Mangle error code: let's make any form of TPM2 failure non-fatal. */
+                        }
                 } else {
+                        r = attach_luks2_by_tpm2_via_plugin(cd, name, until, arg_headless, flags);
+                        if (r >= 0)
+                                return 0;
+                        /* EAGAIN     means: no tpm2 chip found
+                         * EOPNOTSUPP means: no libcryptsetup plugins support */
+                        if (r == -ENXIO)
+                                return log_notice_errno(SYNTHETIC_ERRNO(EAGAIN),
+                                                        "No TPM2 metadata matching the current system state found in LUKS2 header, falling back to traditional unlocking.");
+                        if (r == -ENOENT)
+                                return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
+                                                       "No TPM2 metadata enrolled in LUKS2 header or TPM2 support not available, falling back to traditional unlocking.");
+                        if (!IN_SET(r, -EOPNOTSUPP, -EAGAIN)) {
+                                log_notice_errno(r, "TPM2 operation failed, falling back to traditional unlocking: %m");
+                                return -EAGAIN; /* Mangle error code: let's make any form of TPM2 failure non-fatal. */
+                        }
+                }
+
+                if (r == -EOPNOTSUPP) { /* Plugin not available, let's process TPM2 stuff right here instead */
                         _cleanup_free_ void *blob = NULL, *policy_hash = NULL;
                         size_t blob_size, policy_hash_size;
                         bool found_some = false;
@@ -1097,23 +1704,34 @@
                          * works. */
 
                         for (;;) {
-                                uint32_t pcr_mask;
+                                _cleanup_free_ void *pubkey = NULL, *salt = NULL;
+                                size_t pubkey_size = 0, salt_size = 0;
+                                uint32_t hash_pcr_mask, pubkey_pcr_mask;
+                                uint16_t pcr_bank, primary_alg;
+                                TPM2Flags tpm2_flags;
 
                                 r = find_tpm2_auto_data(
                                                 cd,
                                                 arg_tpm2_pcr_mask, /* if != UINT32_MAX we'll only look for tokens with this PCR mask */
                                                 token, /* search for the token with this index, or any later index than this */
-                                                &pcr_mask,
+                                                &hash_pcr_mask,
+                                                &pcr_bank,
+                                                &pubkey, &pubkey_size,
+                                                &pubkey_pcr_mask,
+                                                &primary_alg,
                                                 &blob, &blob_size,
                                                 &policy_hash, &policy_hash_size,
+                                                &salt, &salt_size,
+                                                &tpm2_flags,
                                                 &keyslot,
                                                 &token);
                                 if (r == -ENXIO)
                                         /* No further TPM2 tokens found in the LUKS2 header. */
-                                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                                               found_some
-                                                               ? "No TPM2 metadata matching the current system state found in LUKS2 header, falling back to traditional unlocking."
-                                                               : "No TPM2 metadata enrolled in LUKS2 header, falling back to traditional unlocking.");
+                                        return log_full_errno(found_some ? LOG_NOTICE : LOG_DEBUG,
+                                                              SYNTHETIC_ERRNO(EAGAIN),
+                                                              found_some
+                                                              ? "No TPM2 metadata matching the current system state found in LUKS2 header, falling back to traditional unlocking."
+                                                              : "No TPM2 metadata enrolled in LUKS2 header, falling back to traditional unlocking.");
                                 if (ERRNO_IS_NOT_SUPPORTED(r))  /* TPM2 support not compiled in? */
                                         return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 support not available, falling back to traditional unlocking.");
                                 if (r < 0)
@@ -1124,11 +1742,23 @@
                                 r = acquire_tpm2_key(
                                                 name,
                                                 arg_tpm2_device,
-                                                pcr_mask,
-                                                NULL, 0, 0, /* no key file */
+                                                hash_pcr_mask,
+                                                pcr_bank,
+                                                pubkey, pubkey_size,
+                                                pubkey_pcr_mask,
+                                                arg_tpm2_signature,
+                                                primary_alg,
+                                                /* key_file= */ NULL, /* key_file_size= */ 0, /* key_file_offset= */ 0, /* no key file */
                                                 blob, blob_size,
                                                 policy_hash, policy_hash_size,
+                                                salt, salt_size,
+                                                tpm2_flags,
+                                                until,
+                                                arg_headless,
+                                                arg_ask_password_flags,
                                                 &decrypted_key, &decrypted_key_size);
+                                if (IN_SET(r, -EACCES, -ENOLCK))
+                                        return log_notice_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 PIN unlock failed, falling back to traditional unlocking.");
                                 if (r != -EPERM)
                                         break;
 
@@ -1137,8 +1767,11 @@
 
                         if (r >= 0)
                                 break;
-                        if (r != -EAGAIN) /* EAGAIN means: no tpm2 chip found */
-                                return r;
+                        /* EAGAIN means: no tpm2 chip found */
+                        if (r != -EAGAIN) {
+                                log_notice_errno(r, "TPM2 operation failed, falling back to traditional unlocking: %m");
+                                return -EAGAIN; /* Mangle error code: let's make any form of TPM2 failure non-fatal. */
+                        }
                 }
 
                 if (!monitor) {
@@ -1149,13 +1782,9 @@
 
                         if (is_efi_boot() && !efi_has_tpm2())
                                 return log_notice_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                                        "No TPM2 hardware discovered and EFI bios indicates no support for it either, assuming TPM2-less system, falling back to traditional unocking.");
+                                                        "No TPM2 hardware discovered and EFI firmware does not see it either, falling back to traditional unlocking.");
 
-                        r = sd_event_default(&event);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to allocate event loop: %m");
-
-                        r = make_tpm2_device_monitor(event, &monitor);
+                        r = make_tpm2_device_monitor(&event, &monitor);
                         if (r < 0)
                                 return r;
 
@@ -1166,34 +1795,27 @@
                         continue;
                 }
 
-                for (;;) {
-                        /* Wait for one event, and then eat all subsequent events until there are no
-                         * further ones */
-                        r = sd_event_run(event, processed ? 0 : UINT64_MAX);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to run event loop: %m");
-                        if (r == 0)
-                                break;
-
-                        processed = true;
-                }
+                r = run_security_device_monitor(event, monitor);
+                if (r < 0)
+                        return r;
 
                 log_debug("Got one or more potentially relevant udev events, rescanning for TPM2...");
         }
         assert(decrypted_key);
 
         if (pass_volume_key)
-                r = crypt_activate_by_volume_key(cd, name, decrypted_key, decrypted_key_size, flags);
+                r = measured_crypt_activate_by_volume_key(cd, name, decrypted_key, decrypted_key_size, flags);
         else {
                 _cleanup_(erase_and_freep) char *base64_encoded = NULL;
+                ssize_t base64_encoded_size;
 
                 /* Before using this key as passphrase we base64 encode it, for compat with homed */
 
-                r = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
-                if (r < 0)
+                base64_encoded_size = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+                if (base64_encoded_size < 0)
                         return log_oom();
 
-                r = crypt_activate_by_passphrase(cd, name, keyslot, base64_encoded, strlen(base64_encoded), flags);
+                r = measured_crypt_activate_by_passphrase(cd, name, keyslot, base64_encoded, base64_encoded_size, flags);
         }
         if (r == -EPERM) {
                 log_error_errno(r, "Failed to activate with TPM2 decrypted key. (Key incorrect?)");
@@ -1220,9 +1842,9 @@
         assert(key_data);
 
         if (pass_volume_key)
-                r = crypt_activate_by_volume_key(cd, name, key_data, key_data_size, flags);
+                r = measured_crypt_activate_by_volume_key(cd, name, key_data, key_data_size, flags);
         else
-                r = crypt_activate_by_passphrase(cd, name, arg_key_slot, key_data, key_data_size, flags);
+                r = measured_crypt_activate_by_passphrase(cd, name, arg_key_slot, key_data, key_data_size, flags);
         if (r == -EPERM) {
                 log_error_errno(r, "Failed to activate. (Key incorrect?)");
                 return -EAGAIN; /* Log actual error, but return EAGAIN */
@@ -1273,9 +1895,9 @@
                 return log_error_errno(r, "Failed to read key file '%s': %m", key_file);
 
         if (pass_volume_key)
-                r = crypt_activate_by_volume_key(cd, name, kfdata, kfsize, flags);
+                r = measured_crypt_activate_by_volume_key(cd, name, kfdata, kfsize, flags);
         else
-                r = crypt_activate_by_passphrase(cd, name, arg_key_slot, kfdata, kfsize, flags);
+                r = measured_crypt_activate_by_passphrase(cd, name, arg_key_slot, kfdata, kfsize, flags);
         if (r == -EPERM) {
                 log_error_errno(r, "Failed to activate with key file '%s'. (Key data incorrect?)", key_file);
                 return -EAGAIN; /* Log actual error, but return EAGAIN */
@@ -1293,7 +1915,6 @@
                 uint32_t flags,
                 bool pass_volume_key) {
 
-        char **p;
         int r;
 
         assert(cd);
@@ -1302,9 +1923,9 @@
         r = -EINVAL;
         STRV_FOREACH(p, passwords) {
                 if (pass_volume_key)
-                        r = crypt_activate_by_volume_key(cd, name, *p, arg_key_size, flags);
+                        r = measured_crypt_activate_by_volume_key(cd, name, *p, arg_key_size, flags);
                 else
-                        r = crypt_activate_by_passphrase(cd, name, arg_key_slot, *p, strlen(*p), flags);
+                        r = measured_crypt_activate_by_passphrase(cd, name, arg_key_slot, *p, strlen(*p), flags);
                 if (r >= 0)
                         break;
         }
@@ -1409,7 +2030,7 @@
         if (r < 0)
                 return log_oom();
 
-        printf("%s attach VOLUME SOURCEDEVICE [PASSWORD] [OPTIONS]\n"
+        printf("%s attach VOLUME SOURCEDEVICE [KEY-FILE] [OPTIONS]\n"
                "%s detach VOLUME\n\n"
                "Attaches or detaches an encrypted block device.\n"
                "\nSee the %s for details.\n",
@@ -1466,7 +2087,7 @@
         const char *verb;
         int r;
 
-        if (argc <= 1)
+        if (argv_looks_like_help(argc, argv))
                 return help();
 
         if (argc < 3)
@@ -1490,16 +2111,17 @@
                 uint32_t flags = 0;
                 unsigned tries;
                 usec_t until;
+                PassphraseType passphrase_type = PASSPHRASE_NONE;
 
-                /* Arguments: systemd-cryptsetup attach VOLUME SOURCE-DEVICE [PASSWORD] [OPTIONS] */
+                /* Arguments: systemd-cryptsetup attach VOLUME SOURCE-DEVICE [KEY-FILE] [OPTIONS] */
 
                 if (argc < 4)
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "attach requires at least two arguments.");
 
                 volume = argv[2];
                 source = argv[3];
-                key_file = argc >= 5 && !STR_IN_SET(argv[4], "", "-", "none") ? argv[4] : NULL;
-                options = argc >= 6 && !STR_IN_SET(argv[5], "", "-", "none") ? argv[5] : NULL;
+                key_file = mangle_none(argc >= 5 ? argv[4] : NULL);
+                options = mangle_none(argc >= 6 ? argv[5] : NULL);
 
                 if (!filename_is_valid(volume))
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Volume name '%s' is not valid.", volume);
@@ -1567,7 +2189,8 @@
                 if (until == USEC_INFINITY)
                         until = 0;
 
-                arg_key_size = (arg_key_size > 0 ? arg_key_size : (256 / 8));
+                if (arg_key_size == 0)
+                        arg_key_size = 256U / 8U;
 
                 if (key_file) {
                         struct stat st;
@@ -1590,8 +2213,18 @@
                         }
 
                         /* Tokens are available in LUKS2 only, but it is ok to call (and fail) with LUKS1. */
-                        if (!key_file && !key_data) {
-                                r = crypt_activate_by_token(cd, volume, CRYPT_ANY_TOKEN, NULL, flags);
+                        if (!key_file && !key_data && getenv_bool("SYSTEMD_CRYPTSETUP_USE_TOKEN_MODULE") != 0) {
+                                r = crypt_activate_by_token_pin_ask_password(
+                                                cd,
+                                                volume,
+                                                NULL,
+                                                until,
+                                                arg_headless,
+                                                NULL,
+                                                flags,
+                                                "Please enter LUKS2 token PIN:",
+                                                "luks2-pin",
+                                                "cryptsetup.luks2-pin");
                                 if (r >= 0) {
                                         log_debug("Volume %s activated with LUKS token id %i.", volume, r);
                                         return 0;
@@ -1634,10 +2267,15 @@
 
                                         key_data_size = 0;
                                 } else {
-                                        /* Ask the user for a passphrase only as last resort, if we have
+                                        /* Ask the user for a passphrase or recovery key only as last resort, if we have
                                          * nothing else to check for */
+                                        if (passphrase_type == PASSPHRASE_NONE) {
+                                                passphrase_type = check_registered_passwords(cd);
+                                                if (passphrase_type == PASSPHRASE_NONE)
+                                                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No passphrase or recovery key registered.");
+                                        }
 
-                                        r = get_password(volume, source, until, tries == 0 && !arg_verify, &passwords);
+                                        r = get_password(volume, source, until, tries == 0 && !arg_verify, passphrase_type, &passwords);
                                         if (r == -EAGAIN)
                                                 continue;
                                         if (r < 0)
diff --git a/src/cryptsetup/meson.build b/src/cryptsetup/meson.build
index 26267fb..45c4154 100644
--- a/src/cryptsetup/meson.build
+++ b/src/cryptsetup/meson.build
@@ -1,21 +1,14 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 systemd_cryptsetup_sources = files(
-        'cryptsetup-fido2.h',
         'cryptsetup-keyfile.c',
-        'cryptsetup-keyfile.h',
-        'cryptsetup-pkcs11.h',
-        'cryptsetup-tpm2.h',
-        'cryptsetup.c')
+        'cryptsetup.c',
+)
 
 if conf.get('HAVE_P11KIT') == 1
         systemd_cryptsetup_sources += files('cryptsetup-pkcs11.c')
 endif
 
-if conf.get('HAVE_LIBFIDO2') == 1
-        systemd_cryptsetup_sources += files('cryptsetup-fido2.c')
-endif
-
 if conf.get('HAVE_TPM2') == 1
         systemd_cryptsetup_sources += files('cryptsetup-tpm2.c')
 endif
diff --git a/src/debug-generator/debug-generator.c b/src/debug-generator/debug-generator.c
index a8f3422..1fe2b56 100644
--- a/src/debug-generator/debug-generator.c
+++ b/src/debug-generator/debug-generator.c
@@ -5,7 +5,8 @@
 #include "alloc-util.h"
 #include "dropin.h"
 #include "generator.h"
-#include "mkdir.h"
+#include "initrd-util.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "proc-cmdline.h"
@@ -89,12 +90,8 @@
 }
 
 static int generate_mask_symlinks(void) {
-        char **u;
         int r = 0;
 
-        if (strv_isempty(arg_mask))
-                return 0;
-
         STRV_FOREACH(u, arg_mask) {
                 _cleanup_free_ char *p = NULL;
 
@@ -112,12 +109,8 @@
 }
 
 static int generate_wants_symlinks(void) {
-        char **u;
         int r = 0;
 
-        if (strv_isempty(arg_wants))
-                return 0;
-
         STRV_FOREACH(u, arg_wants) {
                 _cleanup_free_ char *p = NULL, *f = NULL;
                 const char *target;
@@ -138,7 +131,7 @@
                 if (!f)
                         return log_oom();
 
-                mkdir_parents_label(p, 0755);
+                (void) mkdir_parents_label(p, 0755);
 
                 if (symlink(f, p) < 0)
                         r = log_error_errno(errno,
diff --git a/src/delta/delta.c b/src/delta/delta.c
index f78c6b9..db6e957 100644
--- a/src/delta/delta.c
+++ b/src/delta/delta.c
@@ -6,11 +6,13 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "build.h"
+#include "chase-symlinks.h"
 #include "dirent-util.h"
 #include "fd-util.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "hashmap.h"
-#include "locale-util.h"
 #include "log.h"
 #include "main-func.h"
 #include "nulstr-util.h"
@@ -90,7 +92,7 @@
 
         printf("%s%s%s     %s %s %s\n",
                ansi_highlight_red(), "[MASKED]", ansi_normal(),
-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
+               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
         return 1;
 }
 
@@ -100,7 +102,7 @@
 
         printf("%s%s%s %s %s %s\n",
                ansi_highlight_green(), "[EQUIVALENT]", ansi_normal(),
-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
+               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
         return 1;
 }
 
@@ -110,7 +112,7 @@
 
         printf("%s%s%s %s %s %s\n",
                ansi_highlight(), "[REDIRECTED]", ansi_normal(),
-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
+               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
         return 1;
 }
 
@@ -120,7 +122,7 @@
 
         printf("%s%s%s %s %s %s\n",
                ansi_highlight(), "[OVERRIDDEN]", ansi_normal(),
-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
+               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
         return 1;
 }
 
@@ -130,7 +132,7 @@
 
         printf("%s%s%s   %s %s %s\n",
                ansi_highlight(), "[EXTENDED]", ansi_normal(),
-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
+               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
         return 1;
 }
 
@@ -194,7 +196,6 @@
         _cleanup_free_ char *unit = NULL;
         _cleanup_free_ char *path = NULL;
         _cleanup_strv_free_ char **list = NULL;
-        char **file;
         char *c;
         int r;
 
@@ -235,7 +236,7 @@
                         return -ENOMEM;
                 d = p + strlen(toppath) + 1;
 
-                log_debug("Adding at top: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW), p);
+                log_debug("Adding at top: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
                 k = ordered_hashmap_put(top, d, p);
                 if (k >= 0) {
                         p = strdup(p);
@@ -247,7 +248,7 @@
                         return k;
                 }
 
-                log_debug("Adding at bottom: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW), p);
+                log_debug("Adding at bottom: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
                 free(ordered_hashmap_remove(bottom, d));
                 k = ordered_hashmap_put(bottom, d, p);
                 if (k < 0) {
@@ -271,7 +272,7 @@
                         return -ENOMEM;
 
                 log_debug("Adding to drops: %s %s %s %s %s",
-                          unit, special_glyph(SPECIAL_GLYPH_ARROW), basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p);
+                          unit, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
                 k = ordered_hashmap_put(h, basename(p), p);
                 if (k < 0) {
                         free(p);
@@ -289,10 +290,8 @@
                 const char *path, bool dropins) {
 
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         _cleanup_strv_free_ char **files = NULL, **dirs = NULL;
         size_t n_files = 0, n_dirs = 0;
-        char **t;
         int r;
 
         assert(top);
@@ -349,7 +348,7 @@
                 if (!p)
                         return -ENOMEM;
 
-                log_debug("Adding at top: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p);
+                log_debug("Adding at top: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
                 r = ordered_hashmap_put(top, basename(p), p);
                 if (r >= 0) {
                         p = strdup(p);
@@ -358,7 +357,7 @@
                 } else if (r != -EEXIST)
                         return r;
 
-                log_debug("Adding at bottom: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p);
+                log_debug("Adding at bottom: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
                 free(ordered_hashmap_remove(bottom, basename(p)));
                 r = ordered_hashmap_put(bottom, basename(p), p);
                 if (r < 0)
@@ -371,10 +370,11 @@
 
 static int should_skip_path(const char *prefix, const char *suffix) {
 #if HAVE_SPLIT_USR
-        _cleanup_free_ char *target = NULL;
-        const char *dirname, *p;
+        _cleanup_free_ char *target = NULL, *dirname = NULL;
 
-        dirname = prefix_roota(prefix, suffix);
+        dirname = path_join(prefix, suffix);
+        if (!dirname)
+                return -ENOMEM;
 
         if (chase_symlinks(dirname, NULL, 0, &target, NULL) < 0)
                 return false;
@@ -399,7 +399,6 @@
 }
 
 static int process_suffix(const char *suffix, const char *onlyprefix) {
-        const char *p;
         char *f, *key;
         OrderedHashmap *top, *bottom, *drops, *h;
         int r = 0, k, n_found = 0;
@@ -476,7 +475,6 @@
 }
 
 static int process_suffixes(const char *onlyprefix) {
-        const char *n;
         int n_found = 0, r;
 
         NULSTR_FOREACH(n, suffixes) {
@@ -491,8 +489,6 @@
 }
 
 static int process_suffix_chop(const char *arg) {
-        const char *p;
-
         assert(arg);
 
         if (!path_is_absolute(arg))
@@ -625,7 +621,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -648,7 +644,7 @@
         else if (arg_diff)
                 arg_flags |= SHOW_OVERRIDDEN;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (optind < argc) {
                 int i;
diff --git a/src/detect-virt/detect-virt.c b/src/detect-virt/detect-virt.c
index bfdede6..b75e3c3 100644
--- a/src/detect-virt/detect-virt.c
+++ b/src/detect-virt/detect-virt.c
@@ -6,10 +6,10 @@
 #include <stdlib.h>
 
 #include "alloc-util.h"
+#include "build.h"
 #include "main-func.h"
 #include "pretty-print.h"
 #include "string-table.h"
-#include "util.h"
 #include "virt.h"
 
 static bool arg_quiet = false;
@@ -102,14 +102,14 @@
                         break;
 
                 case ARG_LIST:
-                        DUMP_STRING_TABLE(virtualization, int, _VIRTUALIZATION_MAX);
+                        DUMP_STRING_TABLE(virtualization, Virtualization, _VIRTUALIZATION_MAX);
                         return 0;
 
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
@@ -121,6 +121,7 @@
 }
 
 static int run(int argc, char *argv[]) {
+        Virtualization v;
         int r;
 
         /* This is mostly intended to be used for scripts which want
@@ -135,15 +136,15 @@
 
         switch (arg_mode) {
         case ONLY_VM:
-                r = detect_vm();
-                if (r < 0)
-                        return log_error_errno(r, "Failed to check for VM: %m");
+                v = detect_vm();
+                if (v < 0)
+                        return log_error_errno(v, "Failed to check for VM: %m");
                 break;
 
         case ONLY_CONTAINER:
-                r = detect_container();
-                if (r < 0)
-                        return log_error_errno(r, "Failed to check for container: %m");
+                v = detect_container();
+                if (v < 0)
+                        return log_error_errno(v, "Failed to check for container: %m");
                 break;
 
         case ONLY_CHROOT:
@@ -160,16 +161,16 @@
 
         case ANY_VIRTUALIZATION:
         default:
-                r = detect_virtualization();
-                if (r < 0)
-                        return log_error_errno(r, "Failed to check for virtualization: %m");
+                v = detect_virtualization();
+                if (v < 0)
+                        return log_error_errno(v, "Failed to check for virtualization: %m");
                 break;
         }
 
         if (!arg_quiet)
-                puts(virtualization_to_string(r));
+                puts(virtualization_to_string(v));
 
-        return r == VIRTUALIZATION_NONE;
+        return v == VIRTUALIZATION_NONE;
 }
 
 DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
diff --git a/src/dissect/dissect.c b/src/dissect/dissect.c
index 47feba3..10d977e 100644
--- a/src/dissect/dissect.c
+++ b/src/dissect/dissect.c
@@ -4,12 +4,23 @@
 #include <getopt.h>
 #include <linux/loop.h>
 #include <stdio.h>
+#include <sys/file.h>
 #include <sys/ioctl.h>
 #include <sys/mount.h>
 
+#include "sd-device.h"
+
 #include "architecture.h"
+#include "blockdev-util.h"
+#include "build.h"
+#include "chase-symlinks.h"
 #include "copy.h"
+#include "device-util.h"
+#include "devnum-util.h"
+#include "discover-image.h"
 #include "dissect-image.h"
+#include "env-util.h"
+#include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-table.h"
@@ -21,24 +32,32 @@
 #include "main-func.h"
 #include "mkdir.h"
 #include "mount-util.h"
+#include "mountpoint-util.h"
 #include "namespace-util.h"
 #include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
+#include "process-util.h"
+#include "recurse-dir.h"
+#include "sha256.h"
 #include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
 #include "tmpfile-util.h"
 #include "user-util.h"
-#include "util.h"
 
 static enum {
         ACTION_DISSECT,
         ACTION_MOUNT,
+        ACTION_UMOUNT,
+        ACTION_LIST,
+        ACTION_MTREE,
+        ACTION_WITH,
         ACTION_COPY_FROM,
         ACTION_COPY_TO,
+        ACTION_DISCOVER,
 } arg_action = ACTION_DISSECT;
 static const char *arg_image = NULL;
 static const char *arg_path = NULL;
@@ -50,13 +69,19 @@
         DISSECT_IMAGE_RELAX_VAR_CHECK |
         DISSECT_IMAGE_FSCK |
         DISSECT_IMAGE_USR_NO_ROOT |
-        DISSECT_IMAGE_GROWFS;
+        DISSECT_IMAGE_GROWFS |
+        DISSECT_IMAGE_PIN_PARTITION_DEVICES |
+        DISSECT_IMAGE_ADD_PARTITION_DEVICES;
 static VeritySettings arg_verity_settings = VERITY_SETTINGS_DEFAULT;
 static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 static PagerFlags arg_pager_flags = 0;
 static bool arg_legend = true;
+static bool arg_rmdir = false;
+static bool arg_in_memory = false;
+static char **arg_argv = NULL;
 
 STATIC_DESTRUCTOR_REGISTER(arg_verity_settings, verity_settings_done);
+STATIC_DESTRUCTOR_REGISTER(arg_argv, strv_freep);
 
 static int help(void) {
         _cleanup_free_ char *link = NULL;
@@ -68,9 +93,13 @@
 
         printf("%1$s [OPTIONS...] IMAGE\n"
                "%1$s [OPTIONS...] --mount IMAGE PATH\n"
+               "%1$s [OPTIONS...] --umount PATH\n"
+               "%1$s [OPTIONS...] --list IMAGE\n"
+               "%1$s [OPTIONS...] --mtree IMAGE\n"
+               "%1$s [OPTIONS...] --with IMAGE [COMMAND…]\n"
                "%1$s [OPTIONS...] --copy-from IMAGE PATH [TARGET]\n"
                "%1$s [OPTIONS...] --copy-to IMAGE [SOURCE] PATH\n\n"
-               "%5$sDissect a file system OS image.%6$s\n\n"
+               "%5$sDissect a Discoverable Disk Image (DDI).%6$s\n\n"
                "%3$sOptions:%4$s\n"
                "     --no-pager           Do not pipe output into a pager\n"
                "     --no-legend          Do not show the headers and footers\n"
@@ -78,7 +107,9 @@
                "     --fsck=BOOL          Run fsck before mounting\n"
                "     --growfs=BOOL        Grow file system to partition size, if marked\n"
                "     --mkdir              Make mount directory before mounting, if missing\n"
+               "     --rmdir              Remove mount directory after unmounting\n"
                "     --discard=MODE       Choose 'discard' mode (disabled, loop, all, crypto)\n"
+               "     --in-memory          Copy image into memory\n"
                "     --root-hash=HASH     Specify root hash for verity\n"
                "     --root-hash-sig=SIG  Specify pkcs7 signature of root hash for verity\n"
                "                          as a DER encoded PKCS7, either as a path to a file\n"
@@ -93,8 +124,15 @@
                "     --version            Show package version\n"
                "  -m --mount              Mount the image to the specified directory\n"
                "  -M                      Shortcut for --mount --mkdir\n"
+               "  -u --umount             Unmount the image from the specified directory\n"
+               "  -U                      Shortcut for --umount --rmdir\n"
+               "  -l --list               List all the files and directories of the specified\n"
+               "                          OS image\n"
+               "     --mtree              Show BSD mtree manifest of OS image\n"
+               "     --with               Mount, run command, unmount\n"
                "  -x --copy-from          Copy files from image to host\n"
                "  -a --copy-to            Copy files from host to image\n"
+               "     --discover           Discover DDIs in well known directories\n"
                "\nSee the %2$s for details.\n",
                program_invocation_short_name,
                link,
@@ -106,12 +144,56 @@
         return 0;
 }
 
+static int patch_argv(int *argc, char ***argv, char ***buf) {
+        _cleanup_free_ char **l = NULL;
+        char **e;
+
+        assert(argc);
+        assert(*argc >= 0);
+        assert(argv);
+        assert(*argv);
+        assert(buf);
+
+        /* Ugly hack: if --with is included in command line, also insert "--" immediately after it, to make
+         * getopt_long() stop processing switches */
+
+        for (e = *argv + 1; e < *argv + *argc; e++) {
+                assert(*e);
+
+                if (streq(*e, "--with"))
+                        break;
+        }
+
+        if (e >= *argv + *argc || streq_ptr(e[1], "--")) {
+                /* No --with used? Or already followed by "--"? Then don't do anything */
+                *buf = NULL;
+                return 0;
+        }
+
+        /* Insert the extra "--" right after the --with */
+        l = new(char*, *argc + 2);
+        if (!l)
+                return log_oom();
+
+        size_t idx = e - *argv + 1;
+        memcpy(l, *argv, sizeof(char*) * idx);                          /* copy everything up to and including the --with */
+        l[idx] = (char*) "--";                                          /* insert "--" */
+        memcpy(l + idx + 1, e + 1, sizeof(char*) * (*argc - idx + 1));  /* copy the rest, including trailing NULL entry */
+
+        (*argc)++;
+        (*argv) = l;
+
+        *buf = TAKE_PTR(l);
+        return 1;
+}
+
 static int parse_argv(int argc, char *argv[]) {
 
         enum {
                 ARG_VERSION = 0x100,
                 ARG_NO_PAGER,
                 ARG_NO_LEGEND,
+                ARG_WITH,
                 ARG_DISCARD,
                 ARG_FSCK,
                 ARG_GROWFS,
@@ -119,7 +201,11 @@
                 ARG_ROOT_HASH_SIG,
                 ARG_VERITY_DATA,
                 ARG_MKDIR,
+                ARG_RMDIR,
+                ARG_IN_MEMORY,
                 ARG_JSON,
+                ARG_MTREE,
+                ARG_DISCOVER,
         };
 
         static const struct option options[] = {
@@ -128,6 +214,8 @@
                 { "no-pager",      no_argument,       NULL, ARG_NO_PAGER      },
                 { "no-legend",     no_argument,       NULL, ARG_NO_LEGEND     },
                 { "mount",         no_argument,       NULL, 'm'               },
+                { "umount",        no_argument,       NULL, 'u'               },
+                { "with",          no_argument,       NULL, ARG_WITH          },
                 { "read-only",     no_argument,       NULL, 'r'               },
                 { "discard",       required_argument, NULL, ARG_DISCARD       },
                 { "fsck",          required_argument, NULL, ARG_FSCK          },
@@ -136,18 +224,28 @@
                 { "root-hash-sig", required_argument, NULL, ARG_ROOT_HASH_SIG },
                 { "verity-data",   required_argument, NULL, ARG_VERITY_DATA   },
                 { "mkdir",         no_argument,       NULL, ARG_MKDIR         },
+                { "rmdir",         no_argument,       NULL, ARG_RMDIR         },
+                { "in-memory",     no_argument,       NULL, ARG_IN_MEMORY     },
+                { "list",          no_argument,       NULL, 'l'               },
+                { "mtree",         no_argument,       NULL, ARG_MTREE         },
                 { "copy-from",     no_argument,       NULL, 'x'               },
                 { "copy-to",       no_argument,       NULL, 'a'               },
                 { "json",          required_argument, NULL, ARG_JSON          },
+                { "discover",      no_argument,       NULL, ARG_DISCOVER      },
                 {}
         };
 
+        _cleanup_free_ char **buf = NULL; /* we use free(), not strv_free() here, as we don't copy the strings here */
         int c, r;
 
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "hmrMxa", options, NULL)) >= 0) {
+        r = patch_argv(&argc, &argv, &buf);
+        if (r < 0)
+                return r;
+
+        while ((c = getopt_long(argc, argv, "hmurMUlxa", options, NULL)) >= 0) {
 
                 switch (c) {
 
@@ -179,6 +277,34 @@
                         arg_flags |= DISSECT_IMAGE_MKDIR;
                         break;
 
+                case 'u':
+                        arg_action = ACTION_UMOUNT;
+                        break;
+
+                case ARG_RMDIR:
+                        arg_rmdir = true;
+                        break;
+
+                case 'U':
+                        /* Shortcut combination of the above two */
+                        arg_action = ACTION_UMOUNT;
+                        arg_rmdir = true;
+                        break;
+
+                case 'l':
+                        arg_action = ACTION_LIST;
+                        arg_flags |= DISSECT_IMAGE_READ_ONLY;
+                        break;
+
+                case ARG_MTREE:
+                        arg_action = ACTION_MTREE;
+                        arg_flags |= DISSECT_IMAGE_READ_ONLY;
+                        break;
+
+                case ARG_WITH:
+                        arg_action = ACTION_WITH;
+                        break;
+
                 case 'x':
                         arg_action = ACTION_COPY_FROM;
                         arg_flags |= DISSECT_IMAGE_READ_ONLY;
@@ -218,6 +344,10 @@
                         break;
                 }
 
+                case ARG_IN_MEMORY:
+                        arg_in_memory = true;
+                        break;
+
                 case ARG_ROOT_HASH: {
                         _cleanup_free_ void *p = NULL;
                         size_t l;
@@ -283,13 +413,16 @@
 
                         break;
 
+                case ARG_DISCOVER:
+                        arg_action = ACTION_DISCOVER;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
-
         }
 
         switch (arg_action) {
@@ -313,6 +446,24 @@
                 arg_flags |= DISSECT_IMAGE_REQUIRE_ROOT;
                 break;
 
+        case ACTION_UMOUNT:
+                if (optind + 1 != argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Expected a mount point path as only argument.");
+
+                arg_path = argv[optind];
+                break;
+
+        case ACTION_LIST:
+        case ACTION_MTREE:
+                if (optind + 1 != argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Expected an image file path as only argument.");
+
+                arg_image = argv[optind];
+                arg_flags |= DISSECT_IMAGE_READ_ONLY | DISSECT_IMAGE_REQUIRE_ROOT;
+                break;
+
         case ACTION_COPY_FROM:
                 if (argc < optind + 2 || argc > optind + 3)
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -343,8 +494,29 @@
                 arg_flags |= DISSECT_IMAGE_REQUIRE_ROOT;
                 break;
 
+        case ACTION_WITH:
+                if (optind >= argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Expected an image file path and an optional command line.");
+
+                arg_image = argv[optind];
+                if (argc > optind + 1) {
+                        arg_argv = strv_copy(argv + optind + 1);
+                        if (!arg_argv)
+                                return log_oom();
+                }
+
+                break;
+
+        case ACTION_DISCOVER:
+                if (optind != argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Expected no argument.");
+
+                break;
+
         default:
-                assert_not_reached("Unknown action.");
+                assert_not_reached();
         }
 
         return 1;
@@ -352,7 +524,6 @@
 
 static int strv_pair_to_json(char **l, JsonVariant **ret) {
         _cleanup_strv_free_ char **jl = NULL;
-        char **a, **b;
 
         STRV_FOREACH_PAIR(a, b, l) {
                 char *j;
@@ -368,32 +539,76 @@
         return json_variant_new_array_strv(ret, jl);
 }
 
+static void strv_pair_print(char **l, const char *prefix) {
+        assert(prefix);
+
+        STRV_FOREACH_PAIR(p, q, l)
+                if (p == l)
+                        printf("%s %s=%s\n", prefix, *p, *q);
+                else
+                        printf("%*s %s=%s\n", (int) strlen(prefix), "", *p, *q);
+}
+
+static int get_sysext_scopes(DissectedImage *m, char ***ret_scopes) {
+        _cleanup_strv_free_ char **l = NULL;
+        const char *e;
+
+        assert(m);
+        assert(ret_scopes);
+
+        /* If there's no extension-release file its not a system extension. Otherwise the SYSEXT_SCOPE field
+         * indicates which scope it is for — and it defaults to "system" + "portable" if unset. */
+
+        if (!m->extension_release) {
+                *ret_scopes = NULL;
+                return 0;
+        }
+
+        e = strv_env_pairs_get(m->extension_release, "SYSEXT_SCOPE");
+        if (e)
+                l = strv_split(e, WHITESPACE);
+        else
+                l = strv_new("system", "portable");
+        if (!l)
+                return -ENOMEM;
+
+        *ret_scopes = TAKE_PTR(l);
+        return 1;
+}
+
 static int action_dissect(DissectedImage *m, LoopDevice *d) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         _cleanup_(table_unrefp) Table *t = NULL;
+        _cleanup_free_ char *bn = NULL;
         uint64_t size = UINT64_MAX;
         int r;
 
         assert(m);
         assert(d);
 
+        r = path_extract_filename(arg_image, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract file name from image path '%s': %m", arg_image);
+
         if (arg_json_format_flags & (JSON_FORMAT_OFF|JSON_FORMAT_PRETTY|JSON_FORMAT_PRETTY_AUTO))
-                (void) pager_open(arg_pager_flags);
+                pager_open(arg_pager_flags);
 
         if (arg_json_format_flags & JSON_FORMAT_OFF)
-                printf("      Name: %s\n", basename(arg_image));
+                printf("      Name: %s%s%s\n", ansi_highlight(), bn, ansi_normal());
 
         if (ioctl(d->fd, BLKGETSIZE64, &size) < 0)
                 log_debug_errno(errno, "Failed to query size of loopback device: %m");
-        else if (arg_json_format_flags & JSON_FORMAT_OFF) {
-                char s[FORMAT_BYTES_MAX];
-                printf("      Size: %s\n", format_bytes(s, sizeof(s), size));
-        }
+        else if (arg_json_format_flags & JSON_FORMAT_OFF)
+                printf("      Size: %s\n", FORMAT_BYTES(size));
+
+        printf(" Sec. Size: %" PRIu32 "\n", m->sector_size);
 
         if (arg_json_format_flags & JSON_FORMAT_OFF)
                 putc('\n', stdout);
 
-        r = dissected_image_acquire_metadata(m);
+        fflush(stdout);
+
+        r = dissected_image_acquire_metadata(m, 0);
         if (r == -ENXIO)
                 return log_error_errno(r, "No root partition discovered.");
         if (r == -EUCLEAN)
@@ -407,47 +622,59 @@
         else if (r < 0)
                 return log_error_errno(r, "Failed to acquire image metadata: %m");
         else if (arg_json_format_flags & JSON_FORMAT_OFF) {
+                _cleanup_strv_free_ char **sysext_scopes = NULL;
+
+                if (!sd_id128_is_null(m->image_uuid))
+                        printf("Image UUID: %s\n", SD_ID128_TO_UUID_STRING(m->image_uuid));
+
                 if (m->hostname)
                         printf("  Hostname: %s\n", m->hostname);
 
                 if (!sd_id128_is_null(m->machine_id))
                         printf("Machine ID: " SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(m->machine_id));
 
-                if (!strv_isempty(m->machine_info)) {
-                        char **p, **q;
-
-                        STRV_FOREACH_PAIR(p, q, m->machine_info)
-                                printf("%s %s=%s\n",
-                                       p == m->machine_info ? "Mach. Info:" : "           ",
-                                       *p, *q);
-                }
-
-                if (!strv_isempty(m->os_release)) {
-                        char **p, **q;
-
-                        STRV_FOREACH_PAIR(p, q, m->os_release)
-                                printf("%s %s=%s\n",
-                                       p == m->os_release ? "OS Release:" : "           ",
-                                       *p, *q);
-                }
-
-                if (!strv_isempty(m->extension_release)) {
-                        char **p, **q;
-
-                        STRV_FOREACH_PAIR(p, q, m->extension_release)
-                                printf("%s %s=%s\n",
-                                       p == m->extension_release ? "Extension Release:" : "                  ",
-                                       *p, *q);
-                }
+                strv_pair_print(m->machine_info,
+                               "Mach. Info:");
+                strv_pair_print(m->os_release,
+                               "OS Release:");
+                strv_pair_print(m->initrd_release,
+                                "initrd R.:");
+                strv_pair_print(m->extension_release,
+                               " Ext. Rel.:");
 
                 if (m->hostname ||
                     !sd_id128_is_null(m->machine_id) ||
                     !strv_isempty(m->machine_info) ||
-                    !strv_isempty(m->extension_release) ||
-                    !strv_isempty(m->os_release))
+                    !strv_isempty(m->os_release) ||
+                    !strv_isempty(m->initrd_release) ||
+                    !strv_isempty(m->extension_release))
                         putc('\n', stdout);
+
+                printf("    Use As: %s bootable system for UEFI\n", COLOR_MARK_BOOL(m->partitions[PARTITION_ESP].found));
+
+                if (m->has_init_system >= 0)
+                        printf("            %s bootable system for container\n", COLOR_MARK_BOOL(m->has_init_system));
+
+                printf("            %s portable service\n",
+                       COLOR_MARK_BOOL(strv_env_pairs_get(m->os_release, "PORTABLE_PREFIXES")));
+                printf("            %s initrd\n",
+                       COLOR_MARK_BOOL(!strv_isempty(m->initrd_release)));
+
+                r = get_sysext_scopes(m, &sysext_scopes);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse SYSEXT_SCOPE: %m");
+
+                printf("            %s extension for system\n",
+                       COLOR_MARK_BOOL(strv_contains(sysext_scopes, "system")));
+                printf("            %s extension for initrd\n",
+                       COLOR_MARK_BOOL(strv_contains(sysext_scopes, "initrd")));
+                printf("            %s extension for portable service\n",
+                       COLOR_MARK_BOOL(strv_contains(sysext_scopes, "portable")));
+
+                putc('\n', stdout);
         } else {
-                _cleanup_(json_variant_unrefp) JsonVariant *mi = NULL, *osr = NULL, *exr = NULL;
+                _cleanup_(json_variant_unrefp) JsonVariant *mi = NULL, *osr = NULL, *irdr = NULL, *exr = NULL;
+                _cleanup_strv_free_ char **sysext_scopes = NULL;
 
                 if (!strv_isempty(m->machine_info)) {
                         r = strv_pair_to_json(m->machine_info, &mi);
@@ -461,20 +688,40 @@
                                 return log_oom();
                 }
 
+                if (!strv_isempty(m->initrd_release)) {
+                        r = strv_pair_to_json(m->initrd_release, &irdr);
+                        if (r < 0)
+                                return log_oom();
+                }
+
                 if (!strv_isempty(m->extension_release)) {
                         r = strv_pair_to_json(m->extension_release, &exr);
                         if (r < 0)
                                 return log_oom();
                 }
 
+                r = get_sysext_scopes(m, &sysext_scopes);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse SYSEXT_SCOPE: %m");
+
                 r = json_build(&v, JSON_BUILD_OBJECT(
-                                               JSON_BUILD_PAIR("name", JSON_BUILD_STRING(basename(arg_image))),
+                                               JSON_BUILD_PAIR("name", JSON_BUILD_STRING(bn)),
+                                               JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(m->image_uuid), "imageUuid", JSON_BUILD_UUID(m->image_uuid)),
                                                JSON_BUILD_PAIR("size", JSON_BUILD_INTEGER(size)),
+                                               JSON_BUILD_PAIR("sectorSize", JSON_BUILD_INTEGER(m->sector_size)),
                                                JSON_BUILD_PAIR_CONDITION(m->hostname, "hostname", JSON_BUILD_STRING(m->hostname)),
                                                JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(m->machine_id), "machineId", JSON_BUILD_ID128(m->machine_id)),
                                                JSON_BUILD_PAIR_CONDITION(mi, "machineInfo", JSON_BUILD_VARIANT(mi)),
                                                JSON_BUILD_PAIR_CONDITION(osr, "osRelease", JSON_BUILD_VARIANT(osr)),
-                                               JSON_BUILD_PAIR_CONDITION(exr, "extensionRelease", JSON_BUILD_VARIANT(exr))));
+                                               JSON_BUILD_PAIR_CONDITION(osr, "initrdRelease", JSON_BUILD_VARIANT(irdr)),
+                                               JSON_BUILD_PAIR_CONDITION(exr, "extensionRelease", JSON_BUILD_VARIANT(exr)),
+                                               JSON_BUILD_PAIR("useBootableUefi", JSON_BUILD_BOOLEAN(m->partitions[PARTITION_ESP].found)),
+                                               JSON_BUILD_PAIR_CONDITION(m->has_init_system >= 0, "useBootableContainer", JSON_BUILD_BOOLEAN(m->has_init_system)),
+                                               JSON_BUILD_PAIR("useInitrd", JSON_BUILD_BOOLEAN(!strv_isempty(m->initrd_release))),
+                                               JSON_BUILD_PAIR("usePortableService", JSON_BUILD_BOOLEAN(strv_env_pairs_get(m->os_release, "PORTABLE_MATCHES"))),
+                                               JSON_BUILD_PAIR("useSystemExtension", JSON_BUILD_BOOLEAN(strv_contains(sysext_scopes, "system"))),
+                                               JSON_BUILD_PAIR("useInitRDExtension", JSON_BUILD_BOOLEAN(strv_contains(sysext_scopes, "initrd"))),
+                                               JSON_BUILD_PAIR("usePortableExtension", JSON_BUILD_BOOLEAN(strv_contains(sysext_scopes, "portable")))));
                 if (r < 0)
                         return log_oom();
         }
@@ -483,7 +730,7 @@
         if (!t)
                 return log_oom();
 
-        (void) table_set_empty_string(t, "-");
+        table_set_ersatz_string(t, TABLE_ERSATZ_DASH);
         (void) table_set_align_percent(t, table_get_cell(t, 0, 7), 100);
 
         for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) {
@@ -516,8 +763,10 @@
 
                 if (arg_verity_settings.data_path)
                         r = table_add_cell(t, NULL, TABLE_STRING, "external");
-                else if (dissected_image_can_do_verity(m, i))
-                        r = table_add_cell(t, NULL, TABLE_STRING, yes_no(dissected_image_has_verity(m, i)));
+                else if (dissected_image_verity_candidate(m, i))
+                        r = table_add_cell(t, NULL, TABLE_STRING,
+                                           dissected_image_verity_sig_ready(m, i) ? "signed" :
+                                           yes_no(dissected_image_verity_ready(m, i)));
                 else
                         r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
                 if (r < 0)
@@ -568,7 +817,6 @@
 }
 
 static int action_mount(DissectedImage *m, LoopDevice *d) {
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *di = NULL;
         int r;
 
         assert(m);
@@ -577,8 +825,7 @@
         r = dissected_image_decrypt_interactively(
                         m, NULL,
                         &arg_verity_settings,
-                        arg_flags,
-                        &di);
+                        arg_flags);
         if (r < 0)
                 return r;
 
@@ -586,19 +833,197 @@
         if (r < 0)
                 return r;
 
-        if (di) {
-                r = decrypted_image_relinquish(di);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to relinquish DM devices: %m");
-        }
+        r = loop_device_flock(d, LOCK_UN);
+        if (r < 0)
+                return log_error_errno(r, "Failed to unlock loopback block device: %m");
 
-        loop_device_relinquish(d);
+        r = dissected_image_relinquish(m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to relinquish DM and loopback block devices: %m");
+
         return 0;
 }
 
-static int action_copy(DissectedImage *m, LoopDevice *d) {
+static int list_print_item(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
+
+        assert(path);
+
+        if (event == RECURSE_DIR_ENTER)
+                printf("%s%s/%s\n", path, ansi_grey(), ansi_normal());
+        else if (event == RECURSE_DIR_ENTRY)
+                printf("%s\n", path);
+
+        return RECURSE_DIR_CONTINUE;
+}
+
+static int get_file_sha256(int inode_fd, uint8_t ret[static SHA256_DIGEST_SIZE]) {
+        _cleanup_close_ int fd = -EBADF;
+        struct sha256_ctx ctx;
+
+        /* convert O_PATH fd into a regular one */
+        fd = fd_reopen(inode_fd, O_RDONLY|O_CLOEXEC);
+        if (fd < 0)
+                return fd;
+
+        /* Calculating the SHA sum might be slow, hence let's flush STDOUT first, to give user an idea where we are slow. */
+        fflush(stdout);
+
+        sha256_init_ctx(&ctx);
+
+        for (;;) {
+                uint8_t buffer[64 * 1024];
+                ssize_t n;
+
+                n = read(fd, buffer, sizeof(buffer));
+                if (n < 0)
+                        return -errno;
+                if (n == 0)
+                        break;
+
+                sha256_process_bytes(buffer, n, &ctx);
+        }
+
+        sha256_finish_ctx(&ctx, ret);
+        return 0;
+}
+
+static int mtree_print_item(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
+
+        _cleanup_free_ char *escaped = NULL;
+        int r;
+
+        assert(path);
+
+        if (!IN_SET(event, RECURSE_DIR_ENTER, RECURSE_DIR_ENTRY))
+                return RECURSE_DIR_CONTINUE;
+
+        assert(sx);
+
+        if (isempty(path))
+                path = ".";
+        else {
+                /* BSD mtree uses either C or octal escaping, and covers whitespace, comments and glob characters. We use C style escaping and follow suit */
+                path = escaped = xescape(path, WHITESPACE COMMENTS GLOB_CHARS);
+                if (!escaped)
+                        return log_oom();
+        }
+
+        printf("%s", isempty(path) ? "." : path);
+
+        if (FLAGS_SET(sx->stx_mask, STATX_TYPE)) {
+                if (S_ISDIR(sx->stx_mode))
+                        printf("%s/%s", ansi_grey(), ansi_normal());
+
+                printf(" %stype=%s%s%s%s",
+                       ansi_grey(),
+                       ansi_normal(),
+                       S_ISDIR(sx->stx_mode) ? ansi_highlight_blue() :
+                       S_ISLNK(sx->stx_mode) ? ansi_highlight_cyan() :
+                       (S_ISFIFO(sx->stx_mode) || S_ISCHR(sx->stx_mode) || S_ISBLK(sx->stx_mode)) ? ansi_highlight_yellow4() :
+                       S_ISSOCK(sx->stx_mode) ? ansi_highlight_magenta() : "",
+                       ASSERT_PTR(S_ISDIR(sx->stx_mode) ? "dir" :
+                                  S_ISREG(sx->stx_mode) ? "file" :
+                                  S_ISLNK(sx->stx_mode) ? "link" :
+                                  S_ISFIFO(sx->stx_mode) ? "fifo" :
+                                  S_ISBLK(sx->stx_mode) ? "block" :
+                                  S_ISCHR(sx->stx_mode) ? "char" :
+                                  S_ISSOCK(sx->stx_mode) ? "socket" : NULL),
+                       ansi_normal());
+        }
+
+        if (FLAGS_SET(sx->stx_mask, STATX_MODE) && (!FLAGS_SET(sx->stx_mask, STATX_TYPE) || !S_ISLNK(sx->stx_mode)))
+                printf(" %smode=%s%04o",
+                       ansi_grey(),
+                       ansi_normal(),
+                       (unsigned) (sx->stx_mode & 0777));
+
+        if (FLAGS_SET(sx->stx_mask, STATX_UID))
+                printf(" %suid=%s" UID_FMT,
+                       ansi_grey(),
+                       ansi_normal(),
+                       sx->stx_uid);
+
+        if (FLAGS_SET(sx->stx_mask, STATX_GID))
+                printf(" %sgid=%s" GID_FMT,
+                       ansi_grey(),
+                       ansi_normal(),
+                       sx->stx_gid);
+
+        if (FLAGS_SET(sx->stx_mask, STATX_TYPE|STATX_SIZE) && S_ISREG(sx->stx_mode)) {
+                printf(" %ssize=%s%" PRIu64,
+                       ansi_grey(),
+                       ansi_normal(),
+                       (uint64_t) sx->stx_size);
+
+                if (inode_fd >= 0 && sx->stx_size > 0) {
+                        uint8_t hash[SHA256_DIGEST_SIZE];
+
+                        r = get_file_sha256(inode_fd, hash);
+                        if (r < 0)
+                                log_warning_errno(r, "Failed to calculate file SHA256 sum for '%s', ignoring: %m", path);
+                        else {
+                                _cleanup_free_ char *h = NULL;
+
+                                h = hexmem(hash, sizeof(hash));
+                                if (!h)
+                                        return log_oom();
+
+                                printf(" %ssha256sum=%s%s",
+                                       ansi_grey(),
+                                       ansi_normal(),
+                                       h);
+                        }
+                }
+        }
+
+        if (FLAGS_SET(sx->stx_mask, STATX_TYPE) && S_ISLNK(sx->stx_mode) && inode_fd >= 0) {
+                _cleanup_free_ char *target = NULL;
+
+                r = readlinkat_malloc(inode_fd, "", &target);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to read symlink '%s', ignoring: %m", path);
+                else {
+                        _cleanup_free_ char *target_escaped = NULL;
+
+                        target_escaped = xescape(target, WHITESPACE COMMENTS GLOB_CHARS);
+                        if (!target_escaped)
+                                return log_oom();
+
+                        printf(" %slink=%s%s",
+                               ansi_grey(),
+                               ansi_normal(),
+                               target_escaped);
+                }
+        }
+
+        if (FLAGS_SET(sx->stx_mask, STATX_TYPE) && (S_ISBLK(sx->stx_mode) || S_ISCHR(sx->stx_mode)))
+                printf(" %sdevice=%slinux,%" PRIu64 ",%" PRIu64,
+                       ansi_grey(),
+                       ansi_normal(),
+                       (uint64_t) sx->stx_rdev_major,
+                       (uint64_t) sx->stx_rdev_minor);
+
+        printf("\n");
+
+        return RECURSE_DIR_CONTINUE;
+}
+
+static int action_list_or_mtree_or_copy(DissectedImage *m, LoopDevice *d) {
         _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *di = NULL;
         _cleanup_(rmdir_and_freep) char *created_dir = NULL;
         _cleanup_free_ char *temp = NULL;
         int r;
@@ -609,8 +1034,7 @@
         r = dissected_image_decrypt_interactively(
                         m, NULL,
                         &arg_verity_settings,
-                        arg_flags,
-                        &di);
+                        arg_flags);
         if (r < 0)
                 return r;
 
@@ -634,16 +1058,16 @@
 
         mounted_dir = TAKE_PTR(created_dir);
 
-        if (di) {
-                r = decrypted_image_relinquish(di);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to relinquish DM devices: %m");
-        }
+        r = loop_device_flock(d, LOCK_UN);
+        if (r < 0)
+                return log_error_errno(r, "Failed to unlock loopback block device: %m");
 
-        loop_device_relinquish(d);
+        r = dissected_image_relinquish(m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to relinquish DM and loopback block devices: %m");
 
         if (arg_action == ACTION_COPY_FROM) {
-                _cleanup_close_ int source_fd = -1, target_fd = -1;
+                _cleanup_close_ int source_fd = -EBADF, target_fd = -EBADF;
 
                 source_fd = chase_symlinks_and_open(arg_source, mounted_dir, CHASE_PREFIX_ROOT|CHASE_WARN, O_RDONLY|O_CLOEXEC|O_NOCTTY, NULL);
                 if (source_fd < 0)
@@ -681,22 +1105,24 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to copy bytes from %s in mage '%s' to '%s': %m", arg_source, arg_image, arg_target);
 
-                (void) copy_xattr(source_fd, target_fd);
+                (void) copy_xattr(source_fd, target_fd, 0);
                 (void) copy_access(source_fd, target_fd);
                 (void) copy_times(source_fd, target_fd, 0);
 
                 /* When this is a regular file we don't copy ownership! */
 
-        } else {
-                _cleanup_close_ int source_fd = -1, target_fd = -1;
-                _cleanup_close_ int dfd = -1;
-                _cleanup_free_ char *dn = NULL;
+        } else if (arg_action == ACTION_COPY_TO) {
+                _cleanup_close_ int source_fd = -EBADF, target_fd = -EBADF, dfd = -EBADF;
+                _cleanup_free_ char *dn = NULL, *bn = NULL;
+                bool is_dir;
 
-                assert(arg_action == ACTION_COPY_TO);
-
-                dn = dirname_malloc(arg_target);
-                if (!dn)
-                        return log_oom();
+                r = path_extract_directory(arg_target, &dn);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract directory from target path '%s': %m", arg_target);
+                r = path_extract_filename(arg_target, &bn);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract filename from target path '%s': %m", arg_target);
+                is_dir = r == O_DIRECTORY;
 
                 r = chase_symlinks(dn, mounted_dir, CHASE_PREFIX_ROOT|CHASE_WARN, NULL, &dfd);
                 if (r < 0)
@@ -704,7 +1130,10 @@
 
                 /* Are we reading from stdin? */
                 if (streq(arg_source, "-")) {
-                        target_fd = openat(dfd, basename(arg_target), O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_EXCL, 0644);
+                        if (is_dir)
+                                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot copy STDIN to a directory, refusing.");
+
+                        target_fd = openat(dfd, bn, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_EXCL, 0644);
                         if (target_fd < 0)
                                 return log_error_errno(errno, "Failed to open target file '%s': %m", arg_target);
 
@@ -727,22 +1156,25 @@
 
                         /* We are looking at a directory. */
 
-                        target_fd = openat(dfd, basename(arg_target), O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+                        target_fd = openat(dfd, bn, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
                         if (target_fd < 0) {
                                 if (errno != ENOENT)
                                         return log_error_errno(errno, "Failed to open destination '%s': %m", arg_target);
 
-                                r = copy_tree_at(source_fd, ".", dfd, basename(arg_target), UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS);
+                                r = copy_tree_at(source_fd, ".", dfd, bn, UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS, NULL);
                         } else
-                                r = copy_tree_at(source_fd, ".", target_fd, ".", UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS);
+                                r = copy_tree_at(source_fd, ".", target_fd, ".", UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS, NULL);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to copy '%s' to '%s' in image '%s': %m", arg_source, arg_target, arg_image);
 
                         return 0;
                 }
 
+                if (is_dir)
+                        return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Source is a regular file, but target is not, refusing.");
+
                 /* We area looking at a regular file */
-                target_fd = openat(dfd, basename(arg_target), O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_EXCL, 0600);
+                target_fd = openat(dfd, bn, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_EXCL, 0600);
                 if (target_fd < 0)
                         return log_error_errno(errno, "Failed to open target file '%s': %m", arg_target);
 
@@ -750,28 +1182,250 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to copy bytes from '%s' to '%s' in image '%s': %m", arg_source, arg_target, arg_image);
 
-                (void) copy_xattr(source_fd, target_fd);
+                (void) copy_xattr(source_fd, target_fd, 0);
                 (void) copy_access(source_fd, target_fd);
                 (void) copy_times(source_fd, target_fd, 0);
 
                 /* When this is a regular file we don't copy ownership! */
+
+        } else {
+                _cleanup_close_ int dfd = -EBADF;
+
+                dfd = open(mounted_dir, O_DIRECTORY|O_CLOEXEC|O_RDONLY);
+                if (dfd < 0)
+                        return log_error_errno(errno, "Failed to open mount directory: %m");
+
+                pager_open(arg_pager_flags);
+
+                if (arg_action == ACTION_LIST)
+                        r = recurse_dir(dfd, NULL, 0, UINT_MAX, RECURSE_DIR_SORT, list_print_item, NULL);
+                else if (arg_action == ACTION_MTREE)
+                        r = recurse_dir(dfd, ".", STATX_TYPE|STATX_MODE|STATX_UID|STATX_GID|STATX_SIZE, UINT_MAX, RECURSE_DIR_SORT|RECURSE_DIR_INODE_FD|RECURSE_DIR_TOPLEVEL, mtree_print_item, NULL);
+                else
+                        assert_not_reached();
+                if (r < 0)
+                        return log_error_errno(r, "Failed to list image: %m");
         }
 
         return 0;
 }
 
+static int action_umount(const char *path) {
+        _cleanup_close_ int fd = -EBADF;
+        _cleanup_free_ char *canonical = NULL;
+        _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        int r;
+
+        fd = chase_symlinks_and_open(path, NULL, 0, O_DIRECTORY, &canonical);
+        if (fd == -ENOTDIR)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOTDIR), "'%s' is not a directory", path);
+        if (fd < 0)
+                return log_error_errno(fd, "Failed to resolve path '%s': %m", path);
+
+        r = fd_is_mount_point(fd, NULL, 0);
+        if (r == 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "'%s' is not a mount point", canonical);
+        if (r < 0)
+                return log_error_errno(r, "Failed to determine whether '%s' is a mount point: %m", canonical);
+
+        r = block_device_new_from_fd(fd, BLOCK_DEVICE_LOOKUP_WHOLE_DISK | BLOCK_DEVICE_LOOKUP_BACKING, &dev);
+        if (r < 0) {
+                _cleanup_close_ int usr_fd = -EBADF;
+
+                /* The command `systemd-dissect --mount` expects that the image at least has the root or /usr
+                 * partition. If it does not have the root partition, then we mount the /usr partition on a
+                 * tmpfs. Hence, let's try to find the backing block device through the /usr partition. */
+
+                usr_fd = openat(fd, "usr", O_CLOEXEC | O_DIRECTORY | O_NOFOLLOW);
+                if (usr_fd < 0)
+                        return log_error_errno(errno, "Failed to open '%s/usr': %m", canonical);
+
+                r = block_device_new_from_fd(usr_fd, BLOCK_DEVICE_LOOKUP_WHOLE_DISK | BLOCK_DEVICE_LOOKUP_BACKING, &dev);
+        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to find backing block device for '%s': %m", canonical);
+
+        r = loop_device_open(dev, 0, LOCK_EX, &d);
+        if (r < 0)
+                return log_device_error_errno(dev, r, "Failed to open loopback block device: %m");
+
+        /* We've locked the loop device, now we're ready to unmount. To allow the unmount to succeed, we have
+         * to close the O_PATH fd we opened earlier. */
+        fd = safe_close(fd);
+
+        r = umount_recursive(canonical, 0);
+        if (r < 0)
+                return log_error_errno(r, "Failed to unmount '%s': %m", canonical);
+
+        /* We managed to lock and unmount successfully? That means we can try to remove the loop device. */
+        loop_device_unrelinquish(d);
+
+        if (arg_rmdir) {
+                r = RET_NERRNO(rmdir(canonical));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to remove mount directory '%s': %m", canonical);
+        }
+
+        return 0;
+}
+
+static int action_with(DissectedImage *m, LoopDevice *d) {
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
+        _cleanup_(rmdir_and_freep) char *created_dir = NULL;
+        _cleanup_free_ char *temp = NULL;
+        int r, rcode;
+
+        r = dissected_image_decrypt_interactively(
+                        m, NULL,
+                        &arg_verity_settings,
+                        arg_flags);
+        if (r < 0)
+                return r;
+
+        r = tempfn_random_child(NULL, program_invocation_short_name, &temp);
+        if (r < 0)
+                return log_error_errno(r, "Failed to generate temporary mount directory: %m");
+
+        r = mkdir_p(temp, 0700);
+        if (r < 0)
+                return log_error_errno(r, "Failed to create mount point: %m");
+
+        created_dir = TAKE_PTR(temp);
+
+        r = dissected_image_mount_and_warn(m, created_dir, UID_INVALID, UID_INVALID, arg_flags);
+        if (r < 0)
+                return r;
+
+        mounted_dir = TAKE_PTR(created_dir);
+
+        r = dissected_image_relinquish(m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to relinquish DM and loopback block devices: %m");
+
+        r = loop_device_flock(d, LOCK_UN);
+        if (r < 0)
+                return log_error_errno(r, "Failed to unlock loopback block device: %m");
+
+        rcode = safe_fork("(with)", FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_WAIT, NULL);
+        if (rcode == 0) {
+                /* Child */
+
+                if (chdir(mounted_dir) < 0) {
+                        log_error_errno(errno, "Failed to change to '%s' directory: %m", mounted_dir);
+                        _exit(EXIT_FAILURE);
+                }
+
+                if (setenv("SYSTEMD_DISSECT_ROOT", mounted_dir, /* overwrite= */ true) < 0) {
+                        log_error_errno(errno, "Failed to set $SYSTEMD_DISSECT_ROOT: %m");
+                        _exit(EXIT_FAILURE);
+                }
+
+                if (strv_isempty(arg_argv)) {
+                        const char *sh;
+
+                        sh = secure_getenv("SHELL");
+                        if (sh) {
+                                execvp(sh, STRV_MAKE(sh));
+                                log_warning_errno(errno, "Failed to execute $SHELL, falling back to /bin/sh: %m");
+                        }
+
+                        execl("/bin/sh", "sh", NULL);
+                        log_error_errno(errno, "Failed to invoke /bin/sh: %m");
+                } else {
+                        execvp(arg_argv[0], arg_argv);
+                        log_error_errno(errno, "Failed to execute '%s': %m", arg_argv[0]);
+                }
+
+                _exit(EXIT_FAILURE);
+        }
+
+        /* Let's manually detach everything, to make things synchronous */
+        r = loop_device_flock(d, LOCK_SH);
+        if (r < 0)
+                log_warning_errno(r, "Failed to lock loopback block device, ignoring: %m");
+
+        r = umount_recursive(mounted_dir, 0);
+        if (r < 0)
+                log_warning_errno(r, "Failed to unmount '%s', ignoring: %m", mounted_dir);
+        else
+                loop_device_unrelinquish(d); /* Let's try to destroy the loopback device */
+
+        created_dir = TAKE_PTR(mounted_dir);
+
+        if (rmdir(created_dir) < 0)
+                log_warning_errno(r, "Failed to remove directory '%s', ignoring: %m", created_dir);
+
+        temp = TAKE_PTR(created_dir);
+
+        return rcode;
+}
+
+static int action_discover(void) {
+        _cleanup_(hashmap_freep) Hashmap *images = NULL;
+        _cleanup_(table_unrefp) Table *t = NULL;
+        Image *img;
+        int r;
+
+        images = hashmap_new(&image_hash_ops);
+        if (!images)
+                return log_oom();
+
+        for (ImageClass cl = 0; cl < _IMAGE_CLASS_MAX; cl++) {
+                r = image_discover(cl, NULL, images);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to discover images: %m");
+        }
+
+        if ((arg_json_format_flags & JSON_FORMAT_OFF) && hashmap_isempty(images)) {
+                log_info("No images found.");
+                return 0;
+        }
+
+        t = table_new("name", "type", "class", "ro", "path", "time", "usage");
+        if (!t)
+                return log_oom();
+
+        HASHMAP_FOREACH(img, images) {
+
+                if (!IN_SET(img->type, IMAGE_RAW, IMAGE_BLOCK))
+                        continue;
+
+                r = table_add_many(
+                                t,
+                                TABLE_STRING, img->name,
+                                TABLE_STRING, image_type_to_string(img->type),
+                                TABLE_STRING, image_class_to_string(img->class),
+                                TABLE_BOOLEAN, img->read_only,
+                                TABLE_PATH, img->path,
+                                TABLE_TIMESTAMP, img->mtime != 0 ? img->mtime : img->crtime,
+                                TABLE_SIZE, img->usage);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        (void) table_set_sort(t, (size_t) 0);
+
+        return table_print_with_pager(t, arg_json_format_flags, arg_pager_flags, arg_legend);
+}
+
 static int run(int argc, char *argv[]) {
         _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
         _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
-        int r;
+        uint32_t loop_flags;
+        int open_flags, r;
 
-        log_parse_environment();
-        log_open();
+        log_setup();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
                 return r;
 
+        if (arg_action == ACTION_UMOUNT)
+                return action_umount(arg_path);
+        if (arg_action == ACTION_DISCOVER)
+                return action_discover();
+
         r = verity_settings_load(
                         &arg_verity_settings,
                         arg_image, NULL, NULL);
@@ -784,26 +1438,32 @@
                                                                 * available we turn off partition table
                                                                 * support */
 
-        r = loop_device_make_by_path(
-                        arg_image,
-                        FLAGS_SET(arg_flags, DISSECT_IMAGE_DEVICE_READ_ONLY) ? O_RDONLY : O_RDWR,
-                        FLAGS_SET(arg_flags, DISSECT_IMAGE_NO_PARTITION_TABLE) ? 0 : LO_FLAGS_PARTSCAN,
-                        &d);
+        open_flags = FLAGS_SET(arg_flags, DISSECT_IMAGE_DEVICE_READ_ONLY) ? O_RDONLY : O_RDWR;
+        loop_flags = FLAGS_SET(arg_flags, DISSECT_IMAGE_NO_PARTITION_TABLE) ? 0 : LO_FLAGS_PARTSCAN;
+
+        if (arg_in_memory)
+                r = loop_device_make_by_path_memory(arg_image, open_flags, /* sector_size= */ UINT32_MAX, loop_flags, LOCK_SH, &d);
+        else
+                r = loop_device_make_by_path(arg_image, open_flags, /* sector_size= */ UINT32_MAX, loop_flags, LOCK_SH, &d);
         if (r < 0)
                 return log_error_errno(r, "Failed to set up loopback device for %s: %m", arg_image);
 
-        r = dissect_image_and_warn(
-                        d->fd,
-                        arg_image,
+        r = dissect_loop_device_and_warn(
+                        d,
                         &arg_verity_settings,
                         NULL,
-                        d->uevent_seqnum_not_before,
-                        d->timestamp_not_before,
                         arg_flags,
                         &m);
         if (r < 0)
                 return r;
 
+        r = dissected_image_load_verity_sig_partition(
+                        m,
+                        d->fd,
+                        &arg_verity_settings);
+        if (r < 0)
+                return log_error_errno(r, "Failed to load verity signature partition: %m");
+
         switch (arg_action) {
 
         case ACTION_DISSECT:
@@ -814,13 +1474,19 @@
                 r = action_mount(m, d);
                 break;
 
+        case ACTION_LIST:
+        case ACTION_MTREE:
         case ACTION_COPY_FROM:
         case ACTION_COPY_TO:
-                r = action_copy(m, d);
+                r = action_list_or_mtree_or_copy(m, d);
+                break;
+
+        case ACTION_WITH:
+                r = action_with(m, d);
                 break;
 
         default:
-                assert_not_reached("Unknown action.");
+                assert_not_reached();
         }
 
         return r;
diff --git a/src/environment-d-generator/environment-d-generator.c b/src/environment-d-generator/environment-d-generator.c
index 1171fdc..90e31c9 100644
--- a/src/environment-d-generator/environment-d-generator.c
+++ b/src/environment-d-generator/environment-d-generator.c
@@ -3,10 +3,12 @@
 #include "sd-path.h"
 
 #include "conf-files.h"
-#include "def.h"
+#include "constants.h"
 #include "env-file.h"
 #include "escape.h"
+#include "glyph-util.h"
 #include "log.h"
+#include "main-func.h"
 #include "path-lookup.h"
 #include "strv.h"
 
@@ -41,7 +43,6 @@
 
 static int load_and_print(void) {
         _cleanup_strv_free_ char **dirs = NULL, **files = NULL, **env = NULL;
-        char **i;
         int r;
 
         r = environment_dirs(&dirs);
@@ -56,7 +57,7 @@
          * that in case of failure, a partial update is better than none. */
 
         STRV_FOREACH(i, files) {
-                log_debug("Reading %s…", *i);
+                log_debug("Reading %s%s", *i, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
                 r = merge_env_file(&env, NULL, *i);
                 if (r == -ENOMEM)
@@ -80,20 +81,19 @@
         return 0;
 }
 
-int main(int argc, char *argv[]) {
+static int run(int argc, char *argv[]) {
         int r;
 
         log_parse_environment();
         log_open();
 
-        if (argc > 1) {
-                log_error("This program takes no arguments.");
-                return EXIT_FAILURE;
-        }
+        if (argc > 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "This program takes no arguments.");
 
         r = load_and_print();
         if (r < 0)
-                log_error_errno(r, "Failed to load environment.d: %m");
-
-        return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+                return log_error_errno(r, "Failed to load environment.d: %m");
+        return 0;
 }
+
+DEFINE_MAIN_FUNCTION(run);
diff --git a/src/escape/escape.c b/src/escape/escape.c
index 1575a68..abbc08b 100644
--- a/src/escape/escape.c
+++ b/src/escape/escape.c
@@ -5,8 +5,10 @@
 #include <stdlib.h>
 
 #include "alloc-util.h"
+#include "build.h"
 #include "log.h"
 #include "main-func.h"
+#include "path-util.h"
 #include "pretty-print.h"
 #include "string-util.h"
 #include "strv.h"
@@ -119,7 +121,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind >= argc)
@@ -154,7 +156,6 @@
 }
 
 static int run(int argc, char *argv[]) {
-        char **i;
         int r;
 
         log_setup();
@@ -171,8 +172,36 @@
                 case ACTION_ESCAPE:
                         if (arg_path) {
                                 r = unit_name_path_escape(*i, &e);
-                                if (r < 0)
+                                if (r < 0) {
+                                        if (r == -EINVAL) {
+                                                /* If escaping failed because the string was invalid, let's print a
+                                                 * friendly message about it. Catch these specific error cases
+                                                 * explicitly. */
+
+                                                if (!path_is_valid(*i))
+                                                        return log_error_errno(r, "Input '%s' is not a valid file system path, failed to escape.", *i);
+                                                if (!path_is_absolute(*i))
+                                                        return log_error_errno(r, "Input '%s' is not an absolute file system path, failed to escape.", *i);
+                                                if (!path_is_normalized(*i))
+                                                        return log_error_errno(r, "Input '%s' is not a normalized file system path, failed to escape.", *i);
+                                        }
+
+                                        /* All other error cases. */
                                         return log_error_errno(r, "Failed to escape string: %m");
+                                }
+
+                                /* If the escaping worked, then still warn if the path is not like we'd like
+                                 * it. Because that means escaping is not necessarily reversible. */
+
+                                if (!path_is_valid(*i))
+                                        log_warning("Input '%s' is not a valid file system path, escaping is likely not going be reversible.", *i);
+                                else if (!path_is_absolute(*i))
+                                        log_warning("Input '%s' is not an absolute file system path, escaping is likely not going to be reversible.", *i);
+
+                                /* Note that we don't complain about paths not being normalized here, because
+                                 * some forms of non-normalization is actually OK, such as a series // and
+                                 * unit_name_path_escape() will clean those up silently, and the reversal is
+                                 * "close enough" to be OK. */
                         } else {
                                 e = unit_name_escape(*i);
                                 if (!e)
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index 2cb4f80..9e79f84 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -9,6 +9,8 @@
 
 #include "alloc-util.h"
 #include "ask-password-api.h"
+#include "build.h"
+#include "chase-symlinks.h"
 #include "copy.h"
 #include "creds-util.h"
 #include "dissect-image.h"
@@ -16,6 +18,7 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "hostname-util.h"
 #include "kbd-util.h"
 #include "libcrypt-util.h"
@@ -32,6 +35,7 @@
 #include "proc-cmdline.h"
 #include "pwquality-util.h"
 #include "random-util.h"
+#include "smack-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
@@ -93,7 +97,7 @@
 }
 
 static void print_welcome(void) {
-        _cleanup_free_ char *pretty_name = NULL, *ansi_color = NULL;
+        _cleanup_free_ char *pretty_name = NULL, *os_name = NULL, *ansi_color = NULL;
         static bool done = false;
         const char *pn, *ac;
         int r;
@@ -107,12 +111,13 @@
         r = parse_os_release(
                         arg_root,
                         "PRETTY_NAME", &pretty_name,
+                        "NAME", &os_name,
                         "ANSI_COLOR", &ansi_color);
         if (r < 0)
                 log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
                                "Failed to read os-release file, ignoring: %m");
 
-        pn = isempty(pretty_name) ? "Linux" : pretty_name;
+        pn = os_release_pretty_name(pretty_name, os_name);
         ac = isempty(ansi_color) ? "0" : ansi_color;
 
         if (colors_enabled())
@@ -158,7 +163,7 @@
                         if (!e)
                                 return log_oom();
 
-                        printf("%4zu) %-*s", j * per_column + i + 1, width, e);
+                        printf("%4zu) %-*s", j * per_column + i + 1, (int) width, e);
                 }
 
                 putchar('\n');
@@ -256,8 +261,10 @@
                 return 0;
         }
 
-        if (!arg_prompt_locale)
+        if (!arg_prompt_locale) {
+                log_debug("Prompting for locale was not requested.");
                 return 0;
+        }
 
         r = get_locales(&locales);
         if (r < 0)
@@ -309,8 +316,11 @@
         int r;
 
         etc_localeconf = prefix_roota(arg_root, "/etc/locale.conf");
-        if (laccess(etc_localeconf, F_OK) >= 0 && !arg_force)
+        if (laccess(etc_localeconf, F_OK) >= 0 && !arg_force) {
+                log_debug("Found %s, assuming locale information has been configured.",
+                          etc_localeconf);
                 return 0;
+        }
 
         if (arg_copy_locale && arg_root) {
 
@@ -331,7 +341,7 @@
 
         if (!isempty(arg_locale))
                 locales[i++] = strjoina("LANG=", arg_locale);
-        if (!isempty(arg_locale_messages) && !streq(arg_locale_messages, arg_locale))
+        if (!isempty(arg_locale_messages) && !streq_ptr(arg_locale_messages, arg_locale))
                 locales[i++] = strjoina("LC_MESSAGES=", arg_locale_messages);
 
         if (i == 0)
@@ -363,12 +373,14 @@
                 return 0;
         }
 
-        if (!arg_prompt_keymap)
+        if (!arg_prompt_keymap) {
+                log_debug("Prompting for keymap was not requested.");
                 return 0;
+        }
 
         r = get_keymaps(&kmaps);
         if (r == -ENOENT) /* no keymaps installed */
-                return r;
+                return log_debug_errno(r, "No keymaps are installed.");
         if (r < 0)
                 return log_error_errno(r, "Failed to read keymaps: %m");
 
@@ -384,8 +396,11 @@
         int r;
 
         etc_vconsoleconf = prefix_roota(arg_root, "/etc/vconsole.conf");
-        if (laccess(etc_vconsoleconf, F_OK) >= 0 && !arg_force)
+        if (laccess(etc_vconsoleconf, F_OK) >= 0 && !arg_force) {
+                log_debug("Found %s, assuming console has been configured.",
+                          etc_vconsoleconf);
                 return 0;
+        }
 
         if (arg_copy_keymap && arg_root) {
 
@@ -442,8 +457,10 @@
                 return 0;
         }
 
-        if (!arg_prompt_timezone)
+        if (!arg_prompt_timezone) {
+                log_debug("Prompting for timezone was not requested.");
                 return 0;
+        }
 
         r = get_timezones(&zones);
         if (r < 0)
@@ -464,8 +481,11 @@
         int r;
 
         etc_localtime = prefix_roota(arg_root, "/etc/localtime");
-        if (laccess(etc_localtime, F_OK) >= 0 && !arg_force)
+        if (laccess(etc_localtime, F_OK) >= 0 && !arg_force) {
+                log_debug("Found %s, assuming timezone has been configured.",
+                          etc_localtime);
                 return 0;
+        }
 
         if (arg_copy_timezone && arg_root) {
                 _cleanup_free_ char *p = NULL;
@@ -476,8 +496,9 @@
                                 return log_error_errno(r, "Failed to read host timezone: %m");
 
                         (void) mkdir_parents(etc_localtime, 0755);
-                        if (symlink(p, etc_localtime) < 0)
-                                return log_error_errno(errno, "Failed to create %s symlink: %m", etc_localtime);
+                        r = symlink_atomic(p, etc_localtime);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to create %s symlink: %m", etc_localtime);
 
                         log_info("%s copied.", etc_localtime);
                         return 0;
@@ -494,8 +515,9 @@
         e = strjoina("../usr/share/zoneinfo/", arg_timezone);
 
         (void) mkdir_parents(etc_localtime, 0755);
-        if (symlink(e, etc_localtime) < 0)
-                return log_error_errno(errno, "Failed to create %s symlink: %m", etc_localtime);
+        r = symlink_atomic(e, etc_localtime);
+        if (r < 0)
+                return log_error_errno(r, "Failed to create %s symlink: %m", etc_localtime);
 
         log_info("%s written", etc_localtime);
         return 0;
@@ -507,8 +529,10 @@
         if (arg_hostname)
                 return 0;
 
-        if (!arg_prompt_hostname)
+        if (!arg_prompt_hostname) {
+                log_debug("Prompting for hostname was not requested.");
                 return 0;
+        }
 
         print_welcome();
         putchar('\n');
@@ -544,8 +568,11 @@
         int r;
 
         etc_hostname = prefix_roota(arg_root, "/etc/hostname");
-        if (laccess(etc_hostname, F_OK) >= 0 && !arg_force)
+        if (laccess(etc_hostname, F_OK) >= 0 && !arg_force) {
+                log_debug("Found %s, assuming hostname has been configured.",
+                          etc_hostname);
                 return 0;
+        }
 
         r = prompt_hostname();
         if (r < 0)
@@ -566,17 +593,21 @@
 
 static int process_machine_id(void) {
         const char *etc_machine_id;
-        char id[SD_ID128_STRING_MAX];
         int r;
 
         etc_machine_id = prefix_roota(arg_root, "/etc/machine-id");
-        if (laccess(etc_machine_id, F_OK) >= 0 && !arg_force)
+        if (laccess(etc_machine_id, F_OK) >= 0 && !arg_force) {
+                log_debug("Found %s, assuming machine-id has been configured.",
+                          etc_machine_id);
                 return 0;
+        }
 
-        if (sd_id128_is_null(arg_machine_id))
+        if (sd_id128_is_null(arg_machine_id)) {
+                log_debug("Initialization of machine-id was not requested, skipping.");
                 return 0;
+        }
 
-        r = write_string_file(etc_machine_id, sd_id128_to_string(arg_machine_id, id),
+        r = write_string_file(etc_machine_id, SD_ID128_TO_STRING(arg_machine_id),
                               WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_SYNC | WRITE_STRING_FILE_MKDIR_0755 |
                               (arg_force ? WRITE_STRING_FILE_ATOMIC : 0));
         if (r < 0)
@@ -593,25 +624,14 @@
         if (arg_root_password)
                 return 0;
 
-        r = read_credential("passwd.hashed-password.root", (void**) &arg_root_password, NULL);
-        if (r == -ENOENT) {
-                r = read_credential("passwd.plaintext-password.root", (void**) &arg_root_password, NULL);
-                if (r < 0)
-                        log_debug_errno(r, "Couldn't read credential 'passwd.{hashed|plaintext}-password.root', ignoring: %m");
-                else {
-                        arg_root_password_is_hashed = false;
-                        return 0;
-                }
-        } else if (r < 0)
-                log_debug_errno(r, "Couldn't read credential 'passwd.hashed-password.root', ignoring: %m");
-        else {
-                arg_root_password_is_hashed = true;
+        if (get_credential_user_password("root", &arg_root_password, &arg_root_password_is_hashed) >= 0)
+                return 0;
+
+        if (!arg_prompt_root_password) {
+                log_debug("Prompting for root password was not requested.");
                 return 0;
         }
 
-        if (!arg_prompt_root_password)
-                return 0;
-
         print_welcome();
         putchar('\n');
 
@@ -693,8 +713,10 @@
                 return 0;
         }
 
-        if (!arg_prompt_root_shell)
+        if (!arg_prompt_root_shell) {
+                log_debug("Prompting for root shell was not requested.");
                 return 0;
+        }
 
         print_welcome();
         putchar('\n');
@@ -764,7 +786,7 @@
                         .pw_gid = 0,
                         .pw_gecos = (char *) "Super User",
                         .pw_dir = (char *) "/root",
-                        .pw_shell = (char *) (shell ?: "/bin/sh"),
+                        .pw_shell = (char *) (shell ?: default_root_shell(arg_root)),
                 };
 
                 if (errno != ENOENT)
@@ -859,8 +881,8 @@
         return 0;
 }
 
-static int process_root_args(void) {
-        _cleanup_close_ int lock = -1;
+static int process_root_account(void) {
+        _cleanup_close_ int lock = -EBADF;
         _cleanup_(erase_and_freep) char *_hashed_password = NULL;
         const char *password, *hashed_password;
         const char *etc_passwd, *etc_shadow;
@@ -869,17 +891,18 @@
         etc_passwd = prefix_roota(arg_root, "/etc/passwd");
         etc_shadow = prefix_roota(arg_root, "/etc/shadow");
 
-        /* We only mess with passwd and shadow if both do not exist or --force is specified. These files are
-         * tightly coupled and hence we make sure we have permission from the user to create/modify both
-         * files. */
-        if ((laccess(etc_passwd, F_OK) >= 0 || laccess(etc_shadow, F_OK) >= 0) && !arg_force)
+        if (laccess(etc_passwd, F_OK) >= 0 && laccess(etc_shadow, F_OK) >= 0 && !arg_force) {
+                log_debug("Found %s and %s, assuming root account has been initialized.",
+                          etc_passwd, etc_shadow);
                 return 0;
+        }
+
         /* Don't create/modify passwd and shadow if not asked */
         if (!(arg_root_password || arg_prompt_root_password || arg_copy_root_password || arg_delete_root_password ||
-              arg_root_shell || arg_prompt_root_shell || arg_copy_root_shell))
+              arg_root_shell || arg_prompt_root_shell || arg_copy_root_shell)) {
+                log_debug("Initialization of root account was not requested, skipping.");
                 return 0;
-
-        (void) mkdir_parents(etc_passwd, 0755);
+        }
 
         lock = take_etc_passwd_lock(arg_root);
         if (lock < 0)
@@ -956,11 +979,16 @@
         int r;
 
         etc_kernel_cmdline = prefix_roota(arg_root, "/etc/kernel/cmdline");
-        if (laccess(etc_kernel_cmdline, F_OK) >= 0 && !arg_force)
+        if (laccess(etc_kernel_cmdline, F_OK) >= 0 && !arg_force) {
+                log_debug("Found %s, assuming kernel has been configured.",
+                          etc_kernel_cmdline);
                 return 0;
+        }
 
-        if (!arg_kernel_cmdline)
+        if (!arg_kernel_cmdline) {
+                log_debug("Creation of /etc/kernel/cmdline was not requested, skipping.");
                 return 0;
+        }
 
         r = write_string_file(etc_kernel_cmdline, arg_kernel_cmdline,
                               WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_SYNC | WRITE_STRING_FILE_MKDIR_0755 |
@@ -982,37 +1010,37 @@
 
         printf("%s [OPTIONS...]\n\n"
                "Configures basic settings of the system.\n\n"
-               "  -h --help                                 Show this help\n"
-               "     --version                              Show package version\n"
-               "     --root=PATH                            Operate on an alternate filesystem root\n"
-               "     --image=PATH                           Operate on an alternate filesystem image\n"
-               "     --locale=LOCALE                        Set primary locale (LANG=)\n"
-               "     --locale-messages=LOCALE               Set message locale (LC_MESSAGES=)\n"
-               "     --keymap=KEYMAP                        Set keymap\n"
-               "     --timezone=TIMEZONE                    Set timezone\n"
-               "     --hostname=NAME                        Set hostname\n"
-               "     --machine-ID=ID                        Set machine ID\n"
-               "     --root-password=PASSWORD               Set root password from plaintext password\n"
-               "     --root-password-file=FILE              Set root password from file\n"
-               "     --root-password-hashed=HASHED_PASSWORD Set root password from hashed password\n"
-               "     --root-shell=SHELL                     Set root shell\n"
-               "     --prompt-locale                        Prompt the user for locale settings\n"
-               "     --prompt-keymap                        Prompt the user for keymap settings\n"
-               "     --prompt-timezone                      Prompt the user for timezone\n"
-               "     --prompt-hostname                      Prompt the user for hostname\n"
-               "     --prompt-root-password                 Prompt the user for root password\n"
-               "     --prompt-root-shell                    Prompt the user for root shell\n"
-               "     --prompt                               Prompt for all of the above\n"
-               "     --copy-locale                          Copy locale from host\n"
-               "     --copy-keymap                          Copy keymap from host\n"
-               "     --copy-timezone                        Copy timezone from host\n"
-               "     --copy-root-password                   Copy root password from host\n"
-               "     --copy-root-shell                      Copy root shell from host\n"
-               "     --copy                                 Copy locale, keymap, timezone, root password\n"
-               "     --setup-machine-id                     Generate a new random machine ID\n"
-               "     --force                                Overwrite existing files\n"
-               "     --delete-root-password                 Delete root password\n"
-               "     --welcome=no                           Disable the welcome text\n"
+               "  -h --help                       Show this help\n"
+               "     --version                    Show package version\n"
+               "     --root=PATH                  Operate on an alternate filesystem root\n"
+               "     --image=PATH                 Operate on an alternate filesystem image\n"
+               "     --locale=LOCALE              Set primary locale (LANG=)\n"
+               "     --locale-messages=LOCALE     Set message locale (LC_MESSAGES=)\n"
+               "     --keymap=KEYMAP              Set keymap\n"
+               "     --timezone=TIMEZONE          Set timezone\n"
+               "     --hostname=NAME              Set hostname\n"
+               "     --machine-ID=ID              Set machine ID\n"
+               "     --root-password=PASSWORD     Set root password from plaintext password\n"
+               "     --root-password-file=FILE    Set root password from file\n"
+               "     --root-password-hashed=HASH  Set root password from hashed password\n"
+               "     --root-shell=SHELL           Set root shell\n"
+               "     --prompt-locale              Prompt the user for locale settings\n"
+               "     --prompt-keymap              Prompt the user for keymap settings\n"
+               "     --prompt-timezone            Prompt the user for timezone\n"
+               "     --prompt-hostname            Prompt the user for hostname\n"
+               "     --prompt-root-password       Prompt the user for root password\n"
+               "     --prompt-root-shell          Prompt the user for root shell\n"
+               "     --prompt                     Prompt for all of the above\n"
+               "     --copy-locale                Copy locale from host\n"
+               "     --copy-keymap                Copy keymap from host\n"
+               "     --copy-timezone              Copy timezone from host\n"
+               "     --copy-root-password         Copy root password from host\n"
+               "     --copy-root-shell            Copy root shell from host\n"
+               "     --copy                       Copy locale, keymap, timezone, root password\n"
+               "     --setup-machine-id           Generate a new random machine ID\n"
+               "     --force                      Overwrite existing files\n"
+               "     --delete-root-password       Delete root password\n"
+               "     --welcome=no                 Disable the welcome text\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                link);
@@ -1299,7 +1327,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         /* We check if the specified locale strings are valid down here, so that we can take --root= into
@@ -1322,7 +1350,6 @@
 
 static int run(int argc, char *argv[]) {
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(umount_and_rmdir_and_freep) char *unlink_dir = NULL;
         int r;
 
@@ -1344,8 +1371,10 @@
                 r = proc_cmdline_get_bool("systemd.firstboot", &enabled);
                 if (r < 0)
                         return log_error_errno(r, "Failed to parse systemd.firstboot= kernel command line argument, ignoring: %m");
-                if (r > 0 && !enabled)
+                if (r > 0 && !enabled) {
+                        log_debug("Found systemd.firstboot=no kernel command line argument, terminating.");
                         return 0; /* disabled */
+                }
         }
 
         if (arg_image) {
@@ -1360,8 +1389,7 @@
                                 DISSECT_IMAGE_FSCK |
                                 DISSECT_IMAGE_GROWFS,
                                 &unlink_dir,
-                                &loop_device,
-                                &decrypted_image);
+                                &loop_device);
                 if (r < 0)
                         return r;
 
@@ -1390,7 +1418,7 @@
         if (r < 0)
                 return r;
 
-        r = process_root_args();
+        r = process_root_account();
         if (r < 0)
                 return r;
 
diff --git a/src/fsck/fsck.c b/src/fsck/fsck.c
index cd7adfa..e25c5d5 100644
--- a/src/fsck/fsck.c
+++ b/src/fsck/fsck.c
@@ -27,12 +27,10 @@
 #include "path-util.h"
 #include "proc-cmdline.h"
 #include "process-util.h"
-#include "rlimit-util.h"
 #include "signal-util.h"
 #include "socket-util.h"
 #include "special.h"
 #include "stdio-util.h"
-#include "util.h"
 
 static bool arg_skip = false;
 static bool arg_force = false;
@@ -52,9 +50,9 @@
                 return;
         }
 
-        log_info("Running request %s/start/replace", target);
+        log_info("Requesting %s/start/%s", target, mode);
 
-        /* Start these units only if we can replace base.target with it */
+        /* Start this unit only if we can replace basic.target with it */
         r = sd_bus_call_method(bus,
                                "org.freedesktop.systemd1",
                                "/org/freedesktop/systemd1",
@@ -226,26 +224,23 @@
 }
 
 static int fsck_progress_socket(void) {
-        static const union sockaddr_union sa = {
-                .un.sun_family = AF_UNIX,
-                .un.sun_path = "/run/systemd/fsck.progress",
-        };
-
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
+        int r;
 
         fd = socket(AF_UNIX, SOCK_STREAM, 0);
         if (fd < 0)
                 return log_warning_errno(errno, "socket(): %m");
 
-        if (connect(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0)
-                return log_full_errno(IN_SET(errno, ECONNREFUSED, ENOENT) ? LOG_DEBUG : LOG_WARNING,
-                                      errno, "Failed to connect to progress socket %s, ignoring: %m", sa.un.sun_path);
+        r = connect_unix_path(fd, AT_FDCWD, "/run/systemd/fsck.progress");
+        if (r < 0)
+                return log_full_errno(IN_SET(r, -ECONNREFUSED, -ENOENT) ? LOG_DEBUG : LOG_WARNING,
+                                      r, "Failed to connect to progress socket, ignoring: %m");
 
         return TAKE_FD(fd);
 }
 
 static int run(int argc, char *argv[]) {
-        _cleanup_close_pair_ int progress_pipe[2] = { -1, -1 };
+        _cleanup_close_pair_ int progress_pipe[2] = PIPE_EBADF;
         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         _cleanup_free_ char *dpath = NULL;
         _cleanup_fclose_ FILE *console = NULL;
@@ -327,13 +322,21 @@
         }
 
         if (sd_device_get_property_value(dev, "ID_FS_TYPE", &type) >= 0) {
-                r = fsck_exists(type);
+                r = fsck_exists_for_fstype(type);
                 if (r < 0)
                         log_device_warning_errno(dev, r, "Couldn't detect if fsck.%s may be used, proceeding: %m", type);
                 else if (r == 0) {
                         log_device_info(dev, "fsck.%s doesn't exist, not checking file system.", type);
                         return 0;
                 }
+        } else {
+                r = fsck_exists();
+                if (r < 0)
+                        log_device_warning_errno(dev, r, "Couldn't detect if the fsck command may be used, proceeding: %m");
+                else if (r == 0) {
+                        log_device_info(dev, "The fsck command does not exist, not checking file system.");
+                        return 0;
+                }
         }
 
         console = fopen("/dev/console", "we");
@@ -342,7 +345,7 @@
             pipe(progress_pipe) < 0)
                 return log_error_errno(errno, "pipe(): %m");
 
-        r = safe_fork("(fsck)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
+        r = safe_fork("(fsck)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG|FORK_RLIMIT_NOFILE_SAFE, &pid);
         if (r < 0)
                 return r;
         if (r == 0) {
@@ -391,8 +394,6 @@
                 cmdline[i++] = device;
                 cmdline[i++] = NULL;
 
-                (void) rlimit_nofile_safe();
-
                 execv(cmdline[0], (char**) cmdline);
                 _exit(FSCK_OPERATIONAL_ERROR);
         }
@@ -412,10 +413,7 @@
                         /* System should be rebooted. */
                         start_target(SPECIAL_REBOOT_TARGET, "replace-irreversibly");
                         return -EINVAL;
-                } else if (exit_status & (FSCK_SYSTEM_SHOULD_REBOOT | FSCK_ERRORS_LEFT_UNCORRECTED))
-                        /* Some other problem */
-                        start_target(SPECIAL_EMERGENCY_TARGET, "replace");
-                else
+                } else if (!(exit_status & (FSCK_SYSTEM_SHOULD_REBOOT | FSCK_ERRORS_LEFT_UNCORRECTED)))
                         log_warning("Ignoring error.");
         }
 
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 9174b67..efc553b 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -5,12 +5,16 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "bus-error.h"
+#include "bus-locator.h"
+#include "chase-symlinks.h"
+#include "efi-loader.h"
 #include "fd-util.h"
 #include "fileio.h"
-#include "fs-util.h"
 #include "fstab-util.h"
 #include "generator.h"
 #include "in-addr-util.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "main-func.h"
 #include "mkdir.h"
@@ -20,13 +24,13 @@
 #include "parse-util.h"
 #include "path-util.h"
 #include "proc-cmdline.h"
+#include "process-util.h"
 #include "special.h"
 #include "specifier.h"
 #include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "unit-name.h"
-#include "util.h"
 #include "virt.h"
 #include "volatile-util.h"
 
@@ -37,8 +41,10 @@
         MOUNT_MAKEFS    = 1 << 3,
         MOUNT_GROWFS    = 1 << 4,
         MOUNT_RW_ONLY   = 1 << 5,
+        MOUNT_PCRFS     = 1 << 6,
 } MountPointFlags;
 
+static bool arg_sysroot_check = false;
 static const char *arg_dest = NULL;
 static const char *arg_dest_late = NULL;
 static bool arg_fstab_enabled = true;
@@ -51,6 +57,7 @@
 static char *arg_usr_what = NULL;
 static char *arg_usr_fstype = NULL;
 static char *arg_usr_options = NULL;
+static char *arg_usr_hash = NULL;
 static VolatileMode arg_volatile_mode = _VOLATILE_MODE_INVALID;
 
 STATIC_DESTRUCTOR_REGISTER(arg_root_what, freep);
@@ -60,6 +67,7 @@
 STATIC_DESTRUCTOR_REGISTER(arg_usr_what, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_usr_fstype, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_usr_options, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_usr_hash, freep);
 
 static int write_options(FILE *f, const char *options) {
         _cleanup_free_ char *o = NULL;
@@ -90,6 +98,7 @@
 }
 
 static int add_swap(
+                const char *source,
                 const char *what,
                 struct mntent *me,
                 MountPointFlags flags) {
@@ -116,11 +125,16 @@
                 return 0;
         }
 
+        if (arg_sysroot_check) {
+                log_info("%s should be enabled in the initrd, will request daemon-reload.", what);
+                return true;
+        }
+
         r = unit_name_from_path(what, ".swap", &name);
         if (r < 0)
                 return log_error_errno(r, "Failed to generate unit name: %m");
 
-        r = generator_open_unit_file(arg_dest, fstab_path(), name, &f);
+        r = generator_open_unit_file(arg_dest, source, name, &f);
         if (r < 0)
                 return r;
 
@@ -128,7 +142,7 @@
                 "[Unit]\n"
                 "Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n"
                 "SourcePath=%s\n",
-                fstab_path());
+                source);
 
         r = generator_write_blockdev_dependency(f, what);
         if (r < 0)
@@ -164,6 +178,8 @@
         if (flags & MOUNT_GROWFS)
                 /* TODO: swap devices must be wiped and recreated */
                 log_warning("%s: growing swap devices is currently unsupported.", what);
+        if (flags & MOUNT_PCRFS)
+                log_warning("%s: measuring swap devices is currently unsupported.", what);
 
         if (!(flags & MOUNT_NOAUTO)) {
                 r = generator_add_symlink(arg_dest, SPECIAL_SWAP_TARGET,
@@ -172,7 +188,7 @@
                         return r;
         }
 
-        return 0;
+        return true;
 }
 
 static bool mount_is_network(struct mntent *me) {
@@ -186,7 +202,7 @@
         assert(me);
 
         return fstab_test_option(me->mnt_opts, "x-initrd.mount\0") ||
-               streq(me->mnt_dir, "/usr");
+               path_equal(me->mnt_dir, "/usr");
 }
 
 static int write_timeout(
@@ -197,7 +213,6 @@
                 const char *variable) {
 
         _cleanup_free_ char *timeout = NULL;
-        char timespan[FORMAT_TIMESPAN_MAX];
         usec_t u;
         int r;
 
@@ -213,7 +228,7 @@
                 return 0;
         }
 
-        fprintf(f, "%s=%s\n", variable, format_timespan(timespan, sizeof(timespan), u, 0));
+        fprintf(f, "%s=%s\n", variable, FORMAT_TIMESPAN(u, 0));
 
         return 0;
 }
@@ -236,7 +251,6 @@
 
         _cleanup_strv_free_ char **names = NULL, **units = NULL;
         _cleanup_free_ char *res = NULL;
-        char **s;
         int r;
 
         assert(f);
@@ -339,6 +353,7 @@
 }
 
 static int add_mount(
+                const char *source,
                 const char *dest,
                 const char *what,
                 const char *where,
@@ -347,8 +362,7 @@
                 const char *opts,
                 int passno,
                 MountPointFlags flags,
-                const char *post,
-                const char *source) {
+                const char *target_unit) {
 
         _cleanup_free_ char
                 *name = NULL,
@@ -362,7 +376,7 @@
         assert(what);
         assert(where);
         assert(opts);
-        assert(post);
+        assert(target_unit);
         assert(source);
 
         if (streq_ptr(fstype, "autofs"))
@@ -377,6 +391,11 @@
             mount_point_ignore(where))
                 return 0;
 
+        if (arg_sysroot_check) {
+                log_info("%s should be mounted in the initrd, will request daemon-reload.", where);
+                return true;
+        }
+
         r = fstab_filter_options(opts, "x-systemd.wanted-by\0", NULL, NULL, &wanted_by, NULL);
         if (r < 0)
                 return r;
@@ -406,7 +425,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to generate unit name: %m");
 
-        r = generator_open_unit_file(dest, fstab_path(), name, &f);
+        r = generator_open_unit_file(dest, source, name, &f);
         if (r < 0)
                 return r;
 
@@ -434,11 +453,10 @@
         if (r < 0)
                 return r;
 
-        /* Order the mount unit we generate relative to the post unit, so that DefaultDependencies= on the
+        /* Order the mount unit we generate relative to target_unit, so that DefaultDependencies= on the
          * target unit won't affect us. */
-        if (post && !FLAGS_SET(flags, MOUNT_AUTOMOUNT) && !FLAGS_SET(flags, MOUNT_NOAUTO) &&
-            !FLAGS_SET(flags, MOUNT_NOFAIL))
-                fprintf(f, "Before=%s\n", post);
+        if (!FLAGS_SET(flags, MOUNT_NOFAIL))
+                fprintf(f, "Before=%s\n", target_unit);
 
         if (passno != 0) {
                 r = generator_write_fsck_deps(f, dest, what, where, fstype);
@@ -454,6 +472,10 @@
                 "\n"
                 "[Mount]\n");
 
+        r = write_what(f, what);
+        if (r < 0)
+                return r;
+
         if (original_where)
                 fprintf(f, "# Canonicalized from %s\n", original_where);
 
@@ -462,10 +484,6 @@
                 return log_oom();
         fprintf(f, "Where=%s\n", where_escaped);
 
-        r = write_what(f, what);
-        if (r < 0)
-                return r;
-
         if (!isempty(fstype) && !streq(fstype, "auto")) {
                 _cleanup_free_ char *t = NULL;
 
@@ -506,20 +524,29 @@
         }
 
         if (flags & MOUNT_GROWFS) {
-                r = generator_hook_up_growfs(dest, where, post);
+                r = generator_hook_up_growfs(dest, where, target_unit);
                 if (r < 0)
                         return r;
         }
 
+        if (flags & MOUNT_PCRFS) {
+                r = efi_stub_measured(LOG_WARNING);
+                if (r == 0)
+                        log_debug("Kernel stub did not measure kernel image into PCR, skipping userspace measurement, too.");
+                else if (r > 0) {
+                        r = generator_hook_up_pcrfs(dest, where, target_unit);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
         if (!FLAGS_SET(flags, MOUNT_AUTOMOUNT)) {
                 if (!FLAGS_SET(flags, MOUNT_NOAUTO) && strv_isempty(wanted_by) && strv_isempty(required_by)) {
-                        r = generator_add_symlink(dest, post,
+                        r = generator_add_symlink(dest, target_unit,
                                                   (flags & MOUNT_NOFAIL) ? "wants" : "requires", name);
                         if (r < 0)
                                 return r;
                 } else {
-                        char **s;
-
                         STRV_FOREACH(s, wanted_by) {
                                 r = generator_add_symlink(dest, *s, "wants", name);
                                 if (r < 0)
@@ -539,7 +566,7 @@
 
                 f = safe_fclose(f);
 
-                r = generator_open_unit_file(dest, fstab_path(), automount_name, &f);
+                r = generator_open_unit_file(dest, source, automount_name, &f);
                 if (r < 0)
                         return r;
 
@@ -563,13 +590,62 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to write unit file %s: %m", automount_name);
 
-                r = generator_add_symlink(dest, post,
+                r = generator_add_symlink(dest, target_unit,
                                           (flags & MOUNT_NOFAIL) ? "wants" : "requires", automount_name);
                 if (r < 0)
                         return r;
         }
 
-        return 0;
+        return true;
+}
+
+static int do_daemon_reload(void) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        int r, k;
+
+        log_debug("Calling org.freedesktop.systemd1.Manager.Reload()...");
+
+        r = bus_connect_system_systemd(&bus);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get D-Bus connection: %m");
+
+        r = bus_message_new_method_call(bus, &m, bus_systemd_mgr, "Reload");
+        if (r < 0)
+                return bus_log_create_error(r);
+
+        r = sd_bus_call(bus, m, DAEMON_RELOAD_TIMEOUT_SEC, &error, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to reload daemon: %s", bus_error_message(&error, r));
+
+        /* We need to requeue the two targets so that any new units which previously were not part of the
+         * targets, and which we now added, will be started. */
+
+        r = 0;
+        FOREACH_STRING(unit, SPECIAL_INITRD_FS_TARGET, SPECIAL_SWAP_TARGET) {
+                log_info("Requesting %s/start/replace...", unit);
+
+                k = sd_bus_call_method(bus,
+                                       "org.freedesktop.systemd1",
+                                       "/org/freedesktop/systemd1",
+                                       "org.freedesktop.systemd1.Manager",
+                                       "StartUnit",
+                                       &error,
+                                       NULL,
+                                       "ss", unit, "replace");
+                if (k < 0) {
+                        log_error_errno(k, "Failed to (re)start %s: %s", unit, bus_error_message(&error, r));
+                        if (r == 0)
+                                r = k;
+                }
+        }
+
+        return r;
+}
+
+static const char* sysroot_fstab_path(void) {
+        return getenv("SYSTEMD_SYSROOT_FSTAB") ?: "/sysroot/etc/fstab";
 }
 
 static int parse_fstab(bool initrd) {
@@ -578,7 +654,13 @@
         struct mntent *me;
         int r = 0;
 
-        fstab = initrd ? "/sysroot/etc/fstab" : fstab_path();
+        if (initrd)
+                fstab = sysroot_fstab_path();
+        else {
+                fstab = fstab_path();
+                assert(!arg_sysroot_check);
+        }
+
         log_debug("Parsing %s...", fstab);
 
         f = setmntent(fstab, "re");
@@ -591,7 +673,7 @@
 
         while ((me = getmntent(f))) {
                 _cleanup_free_ char *where = NULL, *what = NULL, *canonical_where = NULL;
-                bool makefs, growfs, noauto, nofail;
+                bool makefs, growfs, pcrfs, noauto, nofail;
                 MountPointFlags flags;
                 int k;
 
@@ -604,12 +686,12 @@
 
                 if (path_is_read_only_fs("/sys") > 0) {
                         if (streq(what, "sysfs")) {
-                                log_info("Running in a container, ignoring fstab entry for %s.", what);
+                                log_info("/sys/ is read-only (running in a container?), ignoring fstab entry for %s.", me->mnt_dir);
                                 continue;
                         }
 
                         if (is_device_path(what)) {
-                                log_info("Running in a container, ignoring fstab device entry for %s.", what);
+                                log_info("/sys/ is read-only (running in a container?), ignoring fstab device entry for %s.", what);
                                 continue;
                         }
                 }
@@ -625,13 +707,25 @@
                          * mount units, but causes problems since it historically worked to have symlinks in e.g.
                          * /etc/fstab. So we canonicalize here. Note that we use CHASE_NONEXISTENT to handle the case
                          * where a symlink refers to another mount target; this works assuming the sub-mountpoint
-                         * target is the final directory. */
+                         * target is the final directory.
+                         *
+                         * FIXME: when chase_symlinks() learns to chase non-existent paths, use this here and
+                         *        drop the prefixing with /sysroot on error below.
+                         */
                         k = chase_symlinks(where, initrd ? "/sysroot" : NULL,
                                            CHASE_PREFIX_ROOT | CHASE_NONEXISTENT,
                                            &canonical_where, NULL);
-                        if (k < 0) /* If we can't canonicalize we continue on as if it wasn't a symlink */
-                                log_debug_errno(k, "Failed to read symlink target for %s, ignoring: %m", where);
-                        else if (streq(canonical_where, where)) /* If it was fully canonicalized, suppress the change */
+                        if (k < 0) {
+                                /* If we can't canonicalize, continue as if it wasn't a symlink */
+                                log_debug_errno(k, "Failed to read symlink target for %s, using as-is: %m", where);
+
+                                if (initrd) {
+                                        canonical_where = path_join("/sysroot", where);
+                                        if (!canonical_where)
+                                                return log_oom();
+                                }
+
+                        } else if (streq(canonical_where, where)) /* If it was fully canonicalized, suppress the change */
                                 canonical_where = mfree(canonical_where);
                         else
                                 log_debug("Canonicalized what=%s where=%s to %s", what, where, canonical_where);
@@ -639,24 +733,25 @@
 
                 makefs = fstab_test_option(me->mnt_opts, "x-systemd.makefs\0");
                 growfs = fstab_test_option(me->mnt_opts, "x-systemd.growfs\0");
+                pcrfs = fstab_test_option(me->mnt_opts, "x-systemd.pcrfs\0");
                 noauto = fstab_test_yes_no_option(me->mnt_opts, "noauto\0" "auto\0");
                 nofail = fstab_test_yes_no_option(me->mnt_opts, "nofail\0" "fail\0");
 
-                log_debug("Found entry what=%s where=%s type=%s makefs=%s growfs=%s noauto=%s nofail=%s",
+                log_debug("Found entry what=%s where=%s type=%s makefs=%s growfs=%s pcrfs=%s noauto=%s nofail=%s",
                           what, where, me->mnt_type,
-                          yes_no(makefs), yes_no(growfs),
+                          yes_no(makefs), yes_no(growfs), yes_no(pcrfs),
                           yes_no(noauto), yes_no(nofail));
 
                 flags = makefs * MOUNT_MAKEFS |
                         growfs * MOUNT_GROWFS |
+                        pcrfs * MOUNT_PCRFS |
                         noauto * MOUNT_NOAUTO |
                         nofail * MOUNT_NOFAIL;
 
                 if (streq(me->mnt_type, "swap"))
-                        k = add_swap(what, me, flags);
+                        k = add_swap(fstab, what, me, flags);
                 else {
                         bool rw_only, automount;
-                        const char *post;
 
                         rw_only = fstab_test_option(me->mnt_opts, "x-systemd.rw-only\0");
                         automount = fstab_test_option(me->mnt_opts,
@@ -666,14 +761,13 @@
                         flags |= rw_only * MOUNT_RW_ONLY |
                                  automount * MOUNT_AUTOMOUNT;
 
-                        if (initrd)
-                                post = SPECIAL_INITRD_FS_TARGET;
-                        else if (mount_is_network(me))
-                                post = SPECIAL_REMOTE_FS_TARGET;
-                        else
-                                post = SPECIAL_LOCAL_FS_TARGET;
+                        const char *target_unit =
+                                initrd ?               SPECIAL_INITRD_FS_TARGET :
+                                mount_is_network(me) ? SPECIAL_REMOTE_FS_TARGET :
+                                                       SPECIAL_LOCAL_FS_TARGET;
 
-                        k = add_mount(arg_dest,
+                        k = add_mount(fstab,
+                                      arg_dest,
                                       what,
                                       canonical_where ?: where,
                                       canonical_where ? where: NULL,
@@ -681,10 +775,11 @@
                                       me->mnt_opts,
                                       me->mnt_passno,
                                       flags,
-                                      post,
-                                      fstab);
+                                      target_unit);
                 }
 
+                if (arg_sysroot_check && k > 0)
+                        return true;  /* We found a mount or swap that would be started… */
                 if (r >= 0 && k < 0)
                         r = k;
         }
@@ -721,7 +816,7 @@
                 if (!sep)
                         return -EINVAL;
 
-                a = strndupa(arg_root_what + 1, sep - arg_root_what - 1);
+                a = strndupa_safe(arg_root_what + 1, sep - arg_root_what - 1);
 
                 r = in_addr_from_string(AF_INET6, a, &u);
                 if (r < 0)
@@ -733,7 +828,7 @@
         /* IPv4 address */
         sep = strchr(arg_root_what, ':');
         if (sep) {
-                a = strndupa(arg_root_what, sep - arg_root_what);
+                a = strndupa_safe(arg_root_what, sep - arg_root_what);
 
                 if (in_addr_from_string(AF_INET, a, &u) >= 0)
                         return true;
@@ -746,7 +841,8 @@
 static int add_sysroot_mount(void) {
         _cleanup_free_ char *what = NULL;
         const char *opts, *fstype;
-        bool default_rw;
+        bool default_rw, makefs;
+        MountPointFlags flags;
         int r;
 
         if (isempty(arg_root_what)) {
@@ -755,7 +851,7 @@
         }
 
         if (streq(arg_root_what, "gpt-auto")) {
-                /* This is handled by the gpt-auto generator */
+                /* This is handled by gpt-auto-generator */
                 log_debug("Skipping root directory handling, as gpt-auto was requested.");
                 return 0;
         }
@@ -821,21 +917,26 @@
                         return r;
         }
 
-        return add_mount(arg_dest,
+        makefs = fstab_test_option(opts, "x-systemd.makefs\0");
+        flags = makefs * MOUNT_MAKEFS;
+
+        return add_mount("/proc/cmdline",
+                         arg_dest,
                          what,
                          "/sysroot",
                          NULL,
                          fstype,
                          opts,
                          is_device_path(what) ? 1 : 0, /* passno */
-                         0,                            /* makefs off, growfs off, noauto off, nofail off, automount off */
-                         SPECIAL_INITRD_ROOT_FS_TARGET,
-                         "/proc/cmdline");
+                         flags,                        /* makefs off, pcrfs off, noauto off, nofail off, automount off */
+                         SPECIAL_INITRD_ROOT_FS_TARGET);
 }
 
 static int add_sysroot_usr_mount(void) {
         _cleanup_free_ char *what = NULL;
         const char *opts;
+        bool makefs;
+        MountPointFlags flags;
         int r;
 
         /* Returns 0 if we didn't do anything, > 0 if we either generated a unit for the /usr/ mount, or we
@@ -901,22 +1002,26 @@
 
         log_debug("Found entry what=%s where=/sysusr/usr type=%s opts=%s", what, strna(arg_usr_fstype), strempty(opts));
 
-        r = add_mount(arg_dest,
+        makefs = fstab_test_option(opts, "x-systemd.makefs\0");
+        flags = makefs * MOUNT_MAKEFS;
+
+        r = add_mount("/proc/cmdline",
+                      arg_dest,
                       what,
                       "/sysusr/usr",
                       NULL,
                       arg_usr_fstype,
                       opts,
                       is_device_path(what) ? 1 : 0, /* passno */
-                      0,
-                      SPECIAL_INITRD_USR_FS_TARGET,
-                      "/proc/cmdline");
+                      flags,
+                      SPECIAL_INITRD_USR_FS_TARGET);
         if (r < 0)
                 return r;
 
         log_debug("Synthesizing entry what=/sysusr/usr where=/sysrootr/usr opts=bind");
 
-        r = add_mount(arg_dest,
+        r = add_mount("/proc/cmdline",
+                      arg_dest,
                       "/sysusr/usr",
                       "/sysroot/usr",
                       NULL,
@@ -924,8 +1029,7 @@
                       "bind",
                       0,
                       0,
-                      SPECIAL_INITRD_FS_TARGET,
-                      "/proc/cmdline");
+                      SPECIAL_INITRD_FS_TARGET);
         if (r < 0)
                 return r;
 
@@ -969,7 +1073,8 @@
 
         /* If requested, mount /var as tmpfs, but do so only if there's nothing else defined for this. */
 
-        return add_mount(arg_dest_late,
+        return add_mount("/proc/cmdline",
+                         arg_dest_late,
                          "tmpfs",
                          "/var",
                          NULL,
@@ -977,8 +1082,7 @@
                          "mode=0755" TMPFS_LIMITS_VAR,
                          0,
                          0,
-                         SPECIAL_LOCAL_FS_TARGET,
-                         "/proc/cmdline");
+                         SPECIAL_LOCAL_FS_TARGET);
 }
 
 static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
@@ -1047,6 +1151,13 @@
                 if (!strextend_with_separator(&arg_usr_options, ",", value))
                         return log_oom();
 
+        } else if (streq(key, "usrhash")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                return free_and_strdup_warn(&arg_usr_hash, value);
+
         } else if (streq(key, "rw") && !value)
                 arg_root_rw = true;
         else if (streq(key, "ro") && !value)
@@ -1075,35 +1186,58 @@
         return 0;
 }
 
-static int determine_root(void) {
-        /* If we have a root hash but no root device then Verity is used, and we use the "root" DM device as root. */
+static int determine_device(char **what, const char *hash, const char *name) {
 
-        if (arg_root_what)
+        assert(what);
+        assert(name);
+
+        /* If we have a hash but no device then Verity is used, and we use the DM device. */
+        if (*what)
                 return 0;
 
-        if (!arg_root_hash)
+        if (!hash)
                 return 0;
 
-        arg_root_what = strdup("/dev/mapper/root");
-        if (!arg_root_what)
+        *what = path_join("/dev/mapper/", name);
+        if (!*what)
                 return log_oom();
 
-        log_info("Using verity root device %s.", arg_root_what);
+        log_info("Using verity %s device %s.", name, *what);
 
         return 1;
 }
 
-static int run(const char *dest, const char *dest_early, const char *dest_late) {
-        int r, r2 = 0, r3 = 0;
+static int determine_root(void) {
+        return determine_device(&arg_root_what, arg_root_hash, "root");
+}
 
-        assert_se(arg_dest = dest);
-        assert_se(arg_dest_late = dest_late);
+static int determine_usr(void) {
+        return determine_device(&arg_usr_what, arg_usr_hash, "usr");
+}
+
+/* If arg_sysroot_check is false, run as generator in the usual fashion.
+ * If it is true, check /sysroot/etc/fstab for any units that we'd want to mount
+ * in the initrd, and call daemon-reload. We will get reinvoked as a generator,
+ * with /sysroot/etc/fstab available, and then we can write additional units based
+ * on that file. */
+static int run_generator(void) {
+        int r, r2 = 0, r3 = 0;
 
         r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
         if (r < 0)
                 log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
 
         (void) determine_root();
+        (void) determine_usr();
+
+        if (arg_sysroot_check) {
+                r = parse_fstab(true);
+                if (r == 0)
+                        log_debug("Nothing interesting found, not doing daemon-reload.");
+                if (r > 0)
+                        r = do_daemon_reload();
+                return r;
+        }
 
         /* Always honour root= and usr= in the kernel command line if we are in an initrd */
         if (in_initrd()) {
@@ -1130,4 +1264,32 @@
         return r < 0 ? r : r2 < 0 ? r2 : r3;
 }
 
-DEFINE_MAIN_GENERATOR_FUNCTION(run);
+static int run(int argc, char **argv) {
+        arg_sysroot_check = invoked_as(argv, "systemd-sysroot-fstab-check");
+
+        if (arg_sysroot_check) {
+                /* Run as in systemd-sysroot-fstab-check mode */
+                log_setup();
+
+                if (strv_length(argv) > 1)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "This program takes no arguments.");
+                if (!in_initrd())
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "This program is only useful in the initrd.");
+        } else {
+                /* Run in generator mode */
+                log_setup_generator();
+
+                if (!IN_SET(strv_length(argv), 2, 4))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "This program takes one or three arguments.");
+
+                arg_dest = ASSERT_PTR(argv[1]);
+                arg_dest_late = ASSERT_PTR(argv[argc > 3 ? 3 : 1]);
+        }
+
+        return run_generator();
+}
+
+DEFINE_MAIN_FUNCTION(run);
diff --git a/src/fundamental/bootspec-fundamental.c b/src/fundamental/bootspec-fundamental.c
new file mode 100644
index 0000000..4ba7c4c
--- /dev/null
+++ b/src/fundamental/bootspec-fundamental.c
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "bootspec-fundamental.h"
+
+bool bootspec_pick_name_version_sort_key(
+                const sd_char *os_pretty_name,
+                const sd_char *os_image_id,
+                const sd_char *os_name,
+                const sd_char *os_id,
+                const sd_char *os_image_version,
+                const sd_char *os_version,
+                const sd_char *os_version_id,
+                const sd_char *os_build_id,
+                const sd_char **ret_name,
+                const sd_char **ret_version,
+                const sd_char **ret_sort_key) {
+
+        const sd_char *good_name, *good_version, *good_sort_key;
+
+        /* Find the best human readable title, version string and sort key for a boot entry (using the
+         * os-release(5) fields). Precise is preferred over vague, and human readable over machine
+         * readable. Thus:
+         *
+         * 1. First priority gets the PRETTY_NAME field, which is the primary string intended for display,
+         *    and should already contain both a nice description and a version indication (if that concept
+         *    applies).
+         *
+         * 2. Otherwise we go for IMAGE_ID and IMAGE_VERSION (thus we show details about the image,
+         *    i.e. specific combination of packages and configuration), if that concept applies.
+         *
+         * 3. Otherwise we go for NAME and VERSION (i.e. human readable OS name and version)
+         *
+         * 4. Otherwise we go for ID and VERSION_ID (i.e. machine readable OS name and version)
+         *
+         * 5. Finally, for the version we'll use BUILD_ID (i.e. a machine readable version that identifies
+         *    the original OS build used during installation)
+         *
+         * Note that the display logic will show only the name by default, except if that isn't unique in
+         * which case the version is shown too.
+         *
+         * Note that name/version determined here are used only for display purposes. Boot entry preference
+         * sorting (i.e. algorithmic ordering of boot entries) is done based on the order of the sort key (if
+         * defined) or entry "id" string (i.e. entry file name) otherwise. */
+
+        good_name = os_pretty_name ?: (os_image_id ?: (os_name ?: os_id));
+        good_version = os_image_version ?: (os_version ?: (os_version_id ? : os_build_id));
+        good_sort_key = os_image_id ?: os_id;
+
+        if (!good_name)
+                return false;
+
+        if (ret_name)
+                *ret_name = good_name;
+
+        if (ret_version)
+                *ret_version = good_version;
+
+        if (ret_sort_key)
+                *ret_sort_key = good_sort_key;
+
+        return true;
+}
diff --git a/src/fundamental/bootspec-fundamental.h b/src/fundamental/bootspec-fundamental.h
new file mode 100644
index 0000000..19b489c
--- /dev/null
+++ b/src/fundamental/bootspec-fundamental.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "string-util-fundamental.h"
+
+bool bootspec_pick_name_version_sort_key(
+                const sd_char *os_pretty_name,
+                const sd_char *os_image_id,
+                const sd_char *os_name,
+                const sd_char *os_id,
+                const sd_char *os_image_version,
+                const sd_char *os_version,
+                const sd_char *os_version_id,
+                const sd_char *os_build_id,
+                const sd_char **ret_name,
+                const sd_char **ret_version,
+                const sd_char **ret_sort_key);
diff --git a/src/fundamental/efi-loader-features.h b/src/fundamental/efi-loader-features.h
deleted file mode 100644
index f07dacb..0000000
--- a/src/fundamental/efi-loader-features.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#ifndef UINT64_C
-#  define UINT64_C(c) (c ## ULL)
-#endif
-
-#define EFI_LOADER_FEATURE_CONFIG_TIMEOUT          (UINT64_C(1) << 0)
-#define EFI_LOADER_FEATURE_CONFIG_TIMEOUT_ONE_SHOT (UINT64_C(1) << 1)
-#define EFI_LOADER_FEATURE_ENTRY_DEFAULT           (UINT64_C(1) << 2)
-#define EFI_LOADER_FEATURE_ENTRY_ONESHOT           (UINT64_C(1) << 3)
-#define EFI_LOADER_FEATURE_BOOT_COUNTING           (UINT64_C(1) << 4)
-#define EFI_LOADER_FEATURE_XBOOTLDR                (UINT64_C(1) << 5)
-#define EFI_LOADER_FEATURE_RANDOM_SEED             (UINT64_C(1) << 6)
diff --git a/src/fundamental/efivars-fundamental.c b/src/fundamental/efivars-fundamental.c
new file mode 100644
index 0000000..2ec3bfb
--- /dev/null
+++ b/src/fundamental/efivars-fundamental.c
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "efivars-fundamental.h"
+
+static const sd_char * const table[_SECURE_BOOT_MAX] = {
+        [SECURE_BOOT_UNSUPPORTED] = STR_C("unsupported"),
+        [SECURE_BOOT_DISABLED]    = STR_C("disabled"),
+        [SECURE_BOOT_UNKNOWN]     = STR_C("unknown"),
+        [SECURE_BOOT_AUDIT]       = STR_C("audit"),
+        [SECURE_BOOT_DEPLOYED]    = STR_C("deployed"),
+        [SECURE_BOOT_SETUP]       = STR_C("setup"),
+        [SECURE_BOOT_USER]        = STR_C("user"),
+};
+
+const sd_char *secure_boot_mode_to_string(SecureBootMode m) {
+        return (m >= 0 && m < _SECURE_BOOT_MAX) ? table[m] : NULL;
+}
+
+SecureBootMode decode_secure_boot_mode(bool secure, bool audit, bool deployed, bool setup) {
+        /* See figure 32-4 Secure Boot Modes from UEFI Specification 2.9 */
+        if (secure && deployed && !audit && !setup)
+                return SECURE_BOOT_DEPLOYED;
+        if (secure && !deployed && !audit && !setup)
+                return SECURE_BOOT_USER;
+        if (!secure && !deployed && audit && setup)
+                return SECURE_BOOT_AUDIT;
+        if (!secure && !deployed && !audit && setup)
+                return SECURE_BOOT_SETUP;
+
+        /* Some firmware allows disabling secure boot while not being in
+         * setup mode unless the PK is cleared. */
+        if (!secure && !deployed && !audit && !setup)
+                return SECURE_BOOT_DISABLED;
+
+        /* Well, this should not happen. */
+        return SECURE_BOOT_UNKNOWN;
+}
diff --git a/src/fundamental/efivars-fundamental.h b/src/fundamental/efivars-fundamental.h
new file mode 100644
index 0000000..cf785f8
--- /dev/null
+++ b/src/fundamental/efivars-fundamental.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <errno.h>
+#include "string-util-fundamental.h"
+
+/* Features of the loader, i.e. systemd-boot */
+#define EFI_LOADER_FEATURE_CONFIG_TIMEOUT          (UINT64_C(1) << 0)
+#define EFI_LOADER_FEATURE_CONFIG_TIMEOUT_ONE_SHOT (UINT64_C(1) << 1)
+#define EFI_LOADER_FEATURE_ENTRY_DEFAULT           (UINT64_C(1) << 2)
+#define EFI_LOADER_FEATURE_ENTRY_ONESHOT           (UINT64_C(1) << 3)
+#define EFI_LOADER_FEATURE_BOOT_COUNTING           (UINT64_C(1) << 4)
+#define EFI_LOADER_FEATURE_XBOOTLDR                (UINT64_C(1) << 5)
+#define EFI_LOADER_FEATURE_RANDOM_SEED             (UINT64_C(1) << 6)
+#define EFI_LOADER_FEATURE_LOAD_DRIVER             (UINT64_C(1) << 7)
+#define EFI_LOADER_FEATURE_SORT_KEY                (UINT64_C(1) << 8)
+#define EFI_LOADER_FEATURE_SAVED_ENTRY             (UINT64_C(1) << 9)
+#define EFI_LOADER_FEATURE_DEVICETREE              (UINT64_C(1) << 10)
+
+/* Features of the stub, i.e. systemd-stub */
+#define EFI_STUB_FEATURE_REPORT_BOOT_PARTITION     (UINT64_C(1) << 0)
+#define EFI_STUB_FEATURE_PICK_UP_CREDENTIALS       (UINT64_C(1) << 1)
+#define EFI_STUB_FEATURE_PICK_UP_SYSEXTS           (UINT64_C(1) << 2)
+#define EFI_STUB_FEATURE_THREE_PCRS                (UINT64_C(1) << 3)
+#define EFI_STUB_FEATURE_RANDOM_SEED               (UINT64_C(1) << 4)
+
+typedef enum SecureBootMode {
+        SECURE_BOOT_UNSUPPORTED,
+        SECURE_BOOT_DISABLED,
+        SECURE_BOOT_UNKNOWN,
+        SECURE_BOOT_AUDIT,
+        SECURE_BOOT_DEPLOYED,
+        SECURE_BOOT_SETUP,
+        SECURE_BOOT_USER,
+        _SECURE_BOOT_MAX,
+        _SECURE_BOOT_INVALID = -EINVAL,
+} SecureBootMode;
+
+const sd_char *secure_boot_mode_to_string(SecureBootMode m);
+SecureBootMode decode_secure_boot_mode(bool secure, bool audit, bool deployed, bool setup);
diff --git a/src/fundamental/macro-fundamental.h b/src/fundamental/macro-fundamental.h
index 9675186..c4ad957 100644
--- a/src/fundamental/macro-fundamental.h
+++ b/src/fundamental/macro-fundamental.h
@@ -1,19 +1,53 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#ifndef SD_BOOT
-#include <assert.h>
+#if !SD_BOOT
+#  include <assert.h>
 #endif
 
-#include "type.h"
+#include <limits.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
 
 #define _align_(x) __attribute__((__aligned__(x)))
-#define _const_ __attribute__((__const__))
-#define _pure_ __attribute__((__pure__))
-#define _section_(x) __attribute__((__section__(x)))
-#define _used_ __attribute__((__used__))
-#define _unused_ __attribute__((__unused__))
+#define _alignas_(x) __attribute__((__aligned__(__alignof__(x))))
+#define _alignptr_ __attribute__((__aligned__(sizeof(void *))))
 #define _cleanup_(x) __attribute__((__cleanup__(x)))
+#define _const_ __attribute__((__const__))
+#define _deprecated_ __attribute__((__deprecated__))
+#define _destructor_ __attribute__((__destructor__))
+#define _hidden_ __attribute__((__visibility__("hidden")))
+#define _likely_(x) (__builtin_expect(!!(x), 1))
+#define _malloc_ __attribute__((__malloc__))
+#define _noinline_ __attribute__((noinline))
+#define _noreturn_ _Noreturn
+#define _packed_ __attribute__((__packed__))
+#define _printf_(a, b) __attribute__((__format__(printf, a, b)))
+#define _public_ __attribute__((__visibility__("default")))
+#define _pure_ __attribute__((__pure__))
+#define _retain_ __attribute__((__retain__))
+#define _returns_nonnull_ __attribute__((__returns_nonnull__))
+#define _section_(x) __attribute__((__section__(x)))
+#define _sentinel_ __attribute__((__sentinel__))
+#define _unlikely_(x) (__builtin_expect(!!(x), 0))
+#define _unused_ __attribute__((__unused__))
+#define _used_ __attribute__((__used__))
+#define _warn_unused_result_ __attribute__((__warn_unused_result__))
+#define _weak_ __attribute__((__weak__))
+#define _weakref_(x) __attribute__((__weakref__(#x)))
+
+#ifdef __clang__
+#  define _alloc_(...)
+#else
+#  define _alloc_(...) __attribute__((__alloc_size__(__VA_ARGS__)))
+#endif
+
+#if __GNUC__ >= 7 || (defined(__clang__) && __clang_major__ >= 10)
+#  define _fallthrough_ __attribute__((__fallthrough__))
+#else
+#  define _fallthrough_
+#endif
 
 #define XSTRINGIFY(x) #x
 #define STRINGIFY(x) XSTRINGIFY(x)
@@ -33,19 +67,46 @@
 #define XCONCATENATE(x, y) x ## y
 #define CONCATENATE(x, y) XCONCATENATE(x, y)
 
-#ifdef SD_BOOT
-#define assert(expr) do {} while (false)
+#if SD_BOOT
+        _noreturn_ void efi_assert(const char *expr, const char *file, unsigned line, const char *function);
+
+        #ifdef NDEBUG
+                #define assert(expr)
+                #define assert_not_reached() __builtin_unreachable()
+        #else
+                #define assert(expr) ({ _likely_(expr) ? VOID_0 : efi_assert(#expr, __FILE__, __LINE__, __func__); })
+                #define assert_not_reached() efi_assert("Code should not be reached", __FILE__, __LINE__, __func__)
+        #endif
+        #define static_assert _Static_assert
+        #define assert_se(expr) ({ _likely_(expr) ? VOID_0 : efi_assert(#expr, __FILE__, __LINE__, __func__); })
 #endif
 
-#if defined(static_assert)
-#define assert_cc(expr)                                                 \
-        static_assert(expr, #expr)
-#else
-#define assert_cc(expr)                                                 \
-        struct CONCATENATE(_assert_struct_, __COUNTER__) {              \
-                char x[(expr) ? 0 : -1];                                \
-        }
-#endif
+/* This passes the argument through after (if asserts are enabled) checking that it is not null. */
+#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
+#define ASSERT_SE_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert_se)
+#define _ASSERT_PTR(expr, var, check)      \
+        ({                                 \
+                typeof(expr) var = (expr); \
+                check(var);                \
+                var;                       \
+        })
+
+#define ASSERT_NONNEG(expr)                              \
+        ({                                               \
+                typeof(expr) _expr_ = (expr), _zero = 0; \
+                assert(_expr_ >= _zero);                 \
+                _expr_;                                  \
+        })
+
+#define ASSERT_SE_NONNEG(expr)                           \
+        ({                                               \
+                typeof(expr) _expr_ = (expr), _zero = 0; \
+                assert_se(_expr_ >= _zero);              \
+                _expr_;                                  \
+        })
+
+#define assert_cc(expr) static_assert(expr, #expr)
+
 
 #define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
 #define UNIQ __COUNTER__
@@ -55,10 +116,10 @@
  * on this macro will run concurrently to all other code conditionalized
  * the same way, there's no ordering or completion enforced. */
 #define ONCE __ONCE(UNIQ_T(_once_, UNIQ))
-#define __ONCE(o)                                                       \
-        ({                                                              \
-                static bool (o) = false;                                \
-                __sync_bool_compare_and_swap(&(o), false, true);        \
+#define __ONCE(o)                                                  \
+        ({                                                         \
+                static bool (o) = false;                           \
+                __atomic_exchange_n(&(o), true, __ATOMIC_SEQ_CST); \
         })
 
 #undef MAX
@@ -70,12 +131,29 @@
                 UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
         })
 
-/* evaluates to (void) if _A or _B are not constant or of different types */
+#define IS_UNSIGNED_INTEGER_TYPE(type) \
+        (__builtin_types_compatible_p(typeof(type), unsigned char) ||   \
+         __builtin_types_compatible_p(typeof(type), unsigned short) ||  \
+         __builtin_types_compatible_p(typeof(type), unsigned) ||        \
+         __builtin_types_compatible_p(typeof(type), unsigned long) ||   \
+         __builtin_types_compatible_p(typeof(type), unsigned long long))
+
+#define IS_SIGNED_INTEGER_TYPE(type) \
+        (__builtin_types_compatible_p(typeof(type), signed char) ||   \
+         __builtin_types_compatible_p(typeof(type), signed short) ||  \
+         __builtin_types_compatible_p(typeof(type), signed) ||        \
+         __builtin_types_compatible_p(typeof(type), signed long) ||   \
+         __builtin_types_compatible_p(typeof(type), signed long long))
+
+/* Evaluates to (void) if _A or _B are not constant or of different types (being integers of different sizes
+ * is also OK as long as the signedness matches) */
 #define CONST_MAX(_A, _B) \
         (__builtin_choose_expr(                                         \
                 __builtin_constant_p(_A) &&                             \
                 __builtin_constant_p(_B) &&                             \
-                __builtin_types_compatible_p(typeof(_A), typeof(_B)),   \
+                (__builtin_types_compatible_p(typeof(_A), typeof(_B)) || \
+                 (IS_UNSIGNED_INTEGER_TYPE(_A) && IS_UNSIGNED_INTEGER_TYPE(_B)) || \
+                 (IS_SIGNED_INTEGER_TYPE(_A) && IS_SIGNED_INTEGER_TYPE(_B))), \
                 ((_A) > (_B)) ? (_A) : (_B),                            \
                 VOID_0))
 
@@ -118,6 +196,19 @@
                 MIN(_c, z);                             \
         })
 
+/* Returns true if the passed integer is a positive power of two */
+#define CONST_ISPOWEROF2(x)                     \
+        ((x) > 0 && ((x) & ((x) - 1)) == 0)
+
+#define ISPOWEROF2(x)                                                  \
+        __builtin_choose_expr(                                         \
+                __builtin_constant_p(x),                               \
+                CONST_ISPOWEROF2(x),                                   \
+                ({                                                     \
+                        const typeof(x) _x = (x);                      \
+                        CONST_ISPOWEROF2(_x);                          \
+                }))
+
 #define LESS_BY(a, b) __LESS_BY(UNIQ, (a), UNIQ, (b))
 #define __LESS_BY(aq, a, bq, b)                         \
         ({                                              \
@@ -161,58 +252,139 @@
                 (UNIQ_T(X, xq) / UNIQ_T(Y, yq) + !!(UNIQ_T(X, xq) % UNIQ_T(Y, yq))); \
         })
 
-#define CASE_F(X) case X:
-#define CASE_F_1(CASE, X) CASE_F(X)
-#define CASE_F_2(CASE, X, ...)  CASE(X) CASE_F_1(CASE, __VA_ARGS__)
-#define CASE_F_3(CASE, X, ...)  CASE(X) CASE_F_2(CASE, __VA_ARGS__)
-#define CASE_F_4(CASE, X, ...)  CASE(X) CASE_F_3(CASE, __VA_ARGS__)
-#define CASE_F_5(CASE, X, ...)  CASE(X) CASE_F_4(CASE, __VA_ARGS__)
-#define CASE_F_6(CASE, X, ...)  CASE(X) CASE_F_5(CASE, __VA_ARGS__)
-#define CASE_F_7(CASE, X, ...)  CASE(X) CASE_F_6(CASE, __VA_ARGS__)
-#define CASE_F_8(CASE, X, ...)  CASE(X) CASE_F_7(CASE, __VA_ARGS__)
-#define CASE_F_9(CASE, X, ...)  CASE(X) CASE_F_8(CASE, __VA_ARGS__)
-#define CASE_F_10(CASE, X, ...) CASE(X) CASE_F_9(CASE, __VA_ARGS__)
-#define CASE_F_11(CASE, X, ...) CASE(X) CASE_F_10(CASE, __VA_ARGS__)
-#define CASE_F_12(CASE, X, ...) CASE(X) CASE_F_11(CASE, __VA_ARGS__)
-#define CASE_F_13(CASE, X, ...) CASE(X) CASE_F_12(CASE, __VA_ARGS__)
-#define CASE_F_14(CASE, X, ...) CASE(X) CASE_F_13(CASE, __VA_ARGS__)
-#define CASE_F_15(CASE, X, ...) CASE(X) CASE_F_14(CASE, __VA_ARGS__)
-#define CASE_F_16(CASE, X, ...) CASE(X) CASE_F_15(CASE, __VA_ARGS__)
-#define CASE_F_17(CASE, X, ...) CASE(X) CASE_F_16(CASE, __VA_ARGS__)
-#define CASE_F_18(CASE, X, ...) CASE(X) CASE_F_17(CASE, __VA_ARGS__)
-#define CASE_F_19(CASE, X, ...) CASE(X) CASE_F_18(CASE, __VA_ARGS__)
-#define CASE_F_20(CASE, X, ...) CASE(X) CASE_F_19(CASE, __VA_ARGS__)
+#define  CASE_F_1(X)      case X:
+#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
+#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
+#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
+#define  CASE_F_5(X, ...) case X:  CASE_F_4( __VA_ARGS__)
+#define  CASE_F_6(X, ...) case X:  CASE_F_5( __VA_ARGS__)
+#define  CASE_F_7(X, ...) case X:  CASE_F_6( __VA_ARGS__)
+#define  CASE_F_8(X, ...) case X:  CASE_F_7( __VA_ARGS__)
+#define  CASE_F_9(X, ...) case X:  CASE_F_8( __VA_ARGS__)
+#define CASE_F_10(X, ...) case X:  CASE_F_9( __VA_ARGS__)
+#define CASE_F_11(X, ...) case X: CASE_F_10( __VA_ARGS__)
+#define CASE_F_12(X, ...) case X: CASE_F_11( __VA_ARGS__)
+#define CASE_F_13(X, ...) case X: CASE_F_12( __VA_ARGS__)
+#define CASE_F_14(X, ...) case X: CASE_F_13( __VA_ARGS__)
+#define CASE_F_15(X, ...) case X: CASE_F_14( __VA_ARGS__)
+#define CASE_F_16(X, ...) case X: CASE_F_15( __VA_ARGS__)
+#define CASE_F_17(X, ...) case X: CASE_F_16( __VA_ARGS__)
+#define CASE_F_18(X, ...) case X: CASE_F_17( __VA_ARGS__)
+#define CASE_F_19(X, ...) case X: CASE_F_18( __VA_ARGS__)
+#define CASE_F_20(X, ...) case X: CASE_F_19( __VA_ARGS__)
 
 #define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
 #define FOR_EACH_MAKE_CASE(...) \
         GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
                                CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
-                   (CASE_F,__VA_ARGS__)
+                   (__VA_ARGS__)
 
-#define IN_SET(x, ...)                          \
-        ({                                      \
-                sd_bool _found = false;         \
-                /* If the build breaks in the line below, you need to extend the case macros. (We use "long double" as  \
-                 * type for the array, in the hope that checkers such as ubsan don't complain that the initializers for \
-                 * the array are not representable by the base type. Ideally we'd use typeof(x) as base type, but that  \
-                 * doesn't work, as we want to use this on bitfields and gcc refuses typeof() on bitfields.) */         \
-                static const long double __assert_in_set[] _unused_ = { __VA_ARGS__ }; \
-                assert_cc(ELEMENTSOF(__assert_in_set) <= 20); \
-                switch(x) {                     \
-                FOR_EACH_MAKE_CASE(__VA_ARGS__) \
-                        _found = true;          \
-                        break;                  \
-                default:                        \
-                        break;                  \
-                }                               \
-                _found;                         \
+#define IN_SET(x, first, ...)                                           \
+        ({                                                              \
+                bool _found = false;                                    \
+                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
+                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
+                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
+                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
+                switch (x) {                                            \
+                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
+                        _found = true;                                  \
+                        break;                                          \
+                default:                                                \
+                        break;                                          \
+                }                                                       \
+                _found;                                                 \
         })
 
 /* Takes inspiration from Rust's Option::take() method: reads and returns a pointer, but at the same time
  * resets it to NULL. See: https://doc.rust-lang.org/std/option/enum.Option.html#method.take */
-#define TAKE_PTR(ptr)                           \
-        ({                                      \
-                typeof(ptr) _ptr_ = (ptr);      \
-                (ptr) = NULL;                   \
-                _ptr_;                          \
+#define TAKE_GENERIC(var, type, nullvalue)                       \
+        ({                                                       \
+                type *_pvar_ = &(var);                           \
+                type _var_ = *_pvar_;                            \
+                type _nullvalue_ = nullvalue;                    \
+                *_pvar_ = _nullvalue_;                           \
+                _var_;                                           \
         })
+#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
+#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
+#define TAKE_STRUCT_TYPE(s, type) TAKE_GENERIC(s, type, {})
+#define TAKE_STRUCT(s) TAKE_STRUCT_TYPE(s, typeof(s))
+
+/*
+ * STRLEN - return the length of a string literal, minus the trailing NUL byte.
+ *          Contrary to strlen(), this is a constant expression.
+ * @x: a string literal.
+ */
+#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
+
+#define mfree(memory)                           \
+        ({                                      \
+                free(memory);                   \
+                (typeof(memory)) NULL;          \
+        })
+
+static inline size_t ALIGN_TO(size_t l, size_t ali) {
+        assert(ISPOWEROF2(ali));
+
+        if (l > SIZE_MAX - (ali - 1))
+                return SIZE_MAX; /* indicate overflow */
+
+        return ((l + ali - 1) & ~(ali - 1));
+}
+
+#define ALIGN2(l) ALIGN_TO(l, 2)
+#define ALIGN4(l) ALIGN_TO(l, 4)
+#define ALIGN8(l) ALIGN_TO(l, 8)
+#define ALIGN2_PTR(p) ((void*) ALIGN2((uintptr_t) p))
+#define ALIGN4_PTR(p) ((void*) ALIGN4((uintptr_t) p))
+#define ALIGN8_PTR(p) ((void*) ALIGN8((uintptr_t) p))
+#if !SD_BOOT
+/* libefi also provides ALIGN, and we do not use them in sd-boot explicitly. */
+#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
+#define ALIGN_PTR(p) ((void*) ALIGN((uintptr_t) (p)))
+#endif
+
+/* Checks if the specified pointer is aligned as appropriate for the specific type */
+#define IS_ALIGNED16(p) (((uintptr_t) p) % __alignof__(uint16_t) == 0)
+#define IS_ALIGNED32(p) (((uintptr_t) p) % __alignof__(uint32_t) == 0)
+#define IS_ALIGNED64(p) (((uintptr_t) p) % __alignof__(uint64_t) == 0)
+
+/* Same as ALIGN_TO but callable in constant contexts. */
+#define CONST_ALIGN_TO(l, ali)                                         \
+        __builtin_choose_expr(                                         \
+                __builtin_constant_p(l) &&                             \
+                __builtin_constant_p(ali) &&                           \
+                CONST_ISPOWEROF2(ali) &&                               \
+                (l <= SIZE_MAX - (ali - 1)),      /* overflow? */      \
+                ((l) + (ali) - 1) & ~((ali) - 1),                      \
+                VOID_0)
+
+/* Similar to ((t *) (void *) (p)) to cast a pointer. The macro asserts that the pointer has a suitable
+ * alignment for type "t". This exists for places where otherwise "-Wcast-align=strict" would issue a
+ * warning or if you want to assert that the cast gives a pointer of suitable alignment. */
+#define CAST_ALIGN_PTR(t, p)                                    \
+        ({                                                      \
+                const void *_p = (p);                           \
+                assert(((uintptr_t) _p) % __alignof__(t) == 0); \
+                (t *) _p;                                       \
+        })
+
+#define UPDATE_FLAG(orig, flag, b)                      \
+        ((b) ? ((orig) | (flag)) : ((orig) & ~(flag)))
+#define SET_FLAG(v, flag, b) \
+        (v) = UPDATE_FLAG(v, flag, b)
+#define FLAGS_SET(v, flags) \
+        ((~(v) & (flags)) == 0)
+
+/* Declare a flexible array usable in a union.
+ * This is essentially a work-around for a pointless constraint in C99
+ * and might go away in some future version of the standard.
+ *
+ * See https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3080ea5553cc909b000d1f1d964a9041962f2c5b
+ */
+#define DECLARE_FLEX_ARRAY(type, name)                 \
+        struct {                                       \
+                dummy_t __empty__ ## name;             \
+                type name[];                           \
+        }
diff --git a/src/fundamental/memory-util-fundamental.h b/src/fundamental/memory-util-fundamental.h
new file mode 100644
index 0000000..78e2dbe
--- /dev/null
+++ b/src/fundamental/memory-util-fundamental.h
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stddef.h>
+
+#if SD_BOOT
+#  include "efi-string.h"
+#else
+#  include <string.h>
+#endif
+
+#include "macro-fundamental.h"
+
+#if !SD_BOOT && HAVE_EXPLICIT_BZERO
+static inline void *explicit_bzero_safe(void *p, size_t l) {
+        if (p && l > 0)
+                explicit_bzero(p, l);
+
+        return p;
+}
+#else
+static inline void *explicit_bzero_safe(void *p, size_t l) {
+        if (p && l > 0) {
+                memset(p, 0, l);
+                __asm__ __volatile__("" : : "r"(p) : "memory");
+        }
+        return p;
+}
+#endif
+
+struct VarEraser {
+        /* NB: This is a pointer to memory to erase in case of CLEANUP_ERASE(). Pointer to pointer to memory
+         * to erase in case of CLEANUP_ERASE_PTR() */
+        void *p;
+        size_t size;
+};
+
+static inline void erase_var(struct VarEraser *e) {
+        explicit_bzero_safe(e->p, e->size);
+}
+
+/* Mark var to be erased when leaving scope. */
+#define CLEANUP_ERASE(var)                                              \
+        _cleanup_(erase_var) _unused_ struct VarEraser CONCATENATE(_eraser_, UNIQ) = { \
+                .p = &(var),                                            \
+                .size = sizeof(var),                                    \
+        }
+
+static inline void erase_varp(struct VarEraser *e) {
+
+        /* Very similar to erase_var(), but assumes `p` is a pointer to a pointer whose memory shall be destructed. */
+        if (!e->p)
+                return;
+
+        explicit_bzero_safe(*(void**) e->p, e->size);
+}
+
+/* Mark pointer so that memory pointed to is erased when leaving scope. Note: this takes a pointer to the
+ * specified pointer, instead of just a copy of it. This is to allow callers to invalidate the pointer after
+ * use, if they like, disabling our automatic erasure (for example because they succeeded with whatever they
+ * wanted to do and now intend to return the allocated buffer to their caller without it being erased). */
+#define CLEANUP_ERASE_PTR(ptr, sz)                                      \
+        _cleanup_(erase_varp) _unused_ struct VarEraser CONCATENATE(_eraser_, UNIQ) = { \
+                .p = (ptr),                                             \
+                .size = (sz),                                           \
+        }
diff --git a/src/fundamental/meson.build b/src/fundamental/meson.build
index 40b9ab8..4b8e323 100644
--- a/src/fundamental/meson.build
+++ b/src/fundamental/meson.build
@@ -3,20 +3,23 @@
 fundamental_path = meson.current_source_dir()
 
 fundamental_headers = files(
-        'efi-loader-features.h',
+        'bootspec-fundamental.h',
+        'efivars-fundamental.h',
         'macro-fundamental.h',
+        'memory-util-fundamental.h',
+        'sha256.h',
         'string-util-fundamental.h',
-        'type.h')
-
-sources = '''
-        string-util-fundamental.c
-'''.split()
+        'tpm-pcr.h',
+)
 
 # for sd-boot
-fundamental_source_paths = []
-foreach s : sources
-        fundamental_source_paths += join_paths(meson.current_source_dir(), s)
-endforeach
+fundamental_source_paths = files(
+        'bootspec-fundamental.c',
+        'efivars-fundamental.c',
+        'sha256.c',
+        'string-util-fundamental.c',
+        'tpm-pcr.c',
+)
 
 # for libbasic
-fundamental_sources = files(sources) + fundamental_headers
+fundamental_sources = fundamental_source_paths + fundamental_headers
diff --git a/src/fundamental/sbat.h b/src/fundamental/sbat.h
new file mode 100644
index 0000000..b3c09dc
--- /dev/null
+++ b/src/fundamental/sbat.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#ifdef SBAT_DISTRO
+#  define SBAT_SECTION_TEXT \
+        "sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md\n" \
+        SBAT_PROJECT ",1,The systemd Developers," SBAT_PROJECT "," PROJECT_VERSION "," PROJECT_URL "\n" \
+        SBAT_PROJECT "." SBAT_DISTRO "," STRINGIFY(SBAT_DISTRO_GENERATION) "," SBAT_DISTRO_SUMMARY "," SBAT_DISTRO_PKGNAME "," SBAT_DISTRO_VERSION "," SBAT_DISTRO_URL "\n"
+#endif
diff --git a/src/fundamental/sha256.c b/src/fundamental/sha256.c
new file mode 100644
index 0000000..4389e9e
--- /dev/null
+++ b/src/fundamental/sha256.c
@@ -0,0 +1,285 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/* Stolen from glibc and converted to our style. In glibc it comes with the following copyright blurb: */
+
+/* Functions to compute SHA256 message digest of files or memory blocks.
+   according to the definition of SHA256 in FIPS 180-2.
+   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <stdbool.h>
+#if SD_BOOT
+#  include "efi-string.h"
+#else
+#  include <string.h>
+#endif
+
+#include "macro-fundamental.h"
+#include "sha256.h"
+#include "unaligned-fundamental.h"
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+# define SWAP(n)                                                        \
+        (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
+# define SWAP64(n)                              \
+        (((n) << 56)                            \
+         | (((n) & 0xff00) << 40)               \
+         | (((n) & 0xff0000) << 24)             \
+         | (((n) & 0xff000000) << 8)            \
+         | (((n) >> 8) & 0xff000000)            \
+         | (((n) >> 24) & 0xff0000)             \
+         | (((n) >> 40) & 0xff00)               \
+         | ((n) >> 56))
+#else
+# define SWAP(n) (n)
+# define SWAP64(n) (n)
+#endif
+
+/* This array contains the bytes used to pad the buffer to the next
+   64-byte boundary.  (FIPS 180-2:5.1.1)  */
+static const uint8_t fillbuf[64] = {
+        0x80, 0 /* , 0, 0, ...  */
+};
+
+/* Constants for SHA256 from FIPS 180-2:4.2.2.  */
+static const uint32_t K[64] = {
+        0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
+        0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+        0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
+        0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+        0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
+        0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+        0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
+        0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+        0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
+        0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+        0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
+        0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+        0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
+        0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+        0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
+        0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
+};
+
+static void sha256_process_block(const void *, size_t, struct sha256_ctx *);
+
+/* Initialize structure containing state of computation.
+   (FIPS 180-2:5.3.2)  */
+void sha256_init_ctx(struct sha256_ctx *ctx) {
+        assert(ctx);
+
+        ctx->H[0] = 0x6a09e667;
+        ctx->H[1] = 0xbb67ae85;
+        ctx->H[2] = 0x3c6ef372;
+        ctx->H[3] = 0xa54ff53a;
+        ctx->H[4] = 0x510e527f;
+        ctx->H[5] = 0x9b05688c;
+        ctx->H[6] = 0x1f83d9ab;
+        ctx->H[7] = 0x5be0cd19;
+
+        ctx->total64 = 0;
+        ctx->buflen = 0;
+}
+
+/* Process the remaining bytes in the internal buffer and the usual
+   prolog according to the standard and write the result to RESBUF. */
+uint8_t *sha256_finish_ctx(struct sha256_ctx *ctx, uint8_t resbuf[static SHA256_DIGEST_SIZE]) {
+        /* Take yet unprocessed bytes into account.  */
+        uint32_t bytes = ctx->buflen;
+        size_t pad;
+
+        assert(ctx);
+        assert(resbuf);
+
+        /* Now count remaining bytes.  */
+        ctx->total64 += bytes;
+
+        pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
+        memcpy(&ctx->buffer[bytes], fillbuf, pad);
+
+        /* Put the 64-bit file length in *bits* at the end of the buffer.  */
+        ctx->buffer32[(bytes + pad + 4) / 4] = SWAP(ctx->total[TOTAL64_low] << 3);
+        ctx->buffer32[(bytes + pad) / 4] = SWAP((ctx->total[TOTAL64_high] << 3)
+                                                | (ctx->total[TOTAL64_low] >> 29));
+
+        /* Process last bytes.  */
+        sha256_process_block(ctx->buffer, bytes + pad + 8, ctx);
+
+        /* Put result from CTX in first 32 bytes following RESBUF.  */
+        for (size_t i = 0; i < 8; ++i)
+                unaligned_write_ne32(resbuf + i * sizeof(uint32_t), SWAP(ctx->H[i]));
+        return resbuf;
+}
+
+void sha256_process_bytes(const void *buffer, size_t len, struct sha256_ctx *ctx) {
+        assert(buffer);
+        assert(ctx);
+
+        /* When we already have some bits in our internal buffer concatenate
+           both inputs first.  */
+
+        if (ctx->buflen != 0) {
+                size_t left_over = ctx->buflen;
+                size_t add = 128 - left_over > len ? len : 128 - left_over;
+
+                memcpy(&ctx->buffer[left_over], buffer, add);
+                ctx->buflen += add;
+
+                if (ctx->buflen > 64) {
+                        sha256_process_block(ctx->buffer, ctx->buflen & ~63, ctx);
+
+                        ctx->buflen &= 63;
+                        /* The regions in the following copy operation cannot overlap.  */
+                        memcpy(ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
+                                ctx->buflen);
+                }
+
+                buffer = (const char *) buffer + add;
+                len -= add;
+        }
+
+        /* Process available complete blocks.  */
+        if (len >= 64) {
+                if (IS_ALIGNED32(buffer)) {
+                        sha256_process_block(buffer, len & ~63, ctx);
+                        buffer = (const char *) buffer + (len & ~63);
+                        len &= 63;
+                } else
+                        while (len > 64) {
+                                memcpy(ctx->buffer, buffer, 64);
+                                sha256_process_block(ctx->buffer, 64, ctx);
+                                buffer = (const char *) buffer + 64;
+                                len -= 64;
+                        }
+        }
+
+        /* Move remaining bytes into internal buffer.  */
+        if (len > 0) {
+                size_t left_over = ctx->buflen;
+
+                memcpy(&ctx->buffer[left_over], buffer, len);
+                left_over += len;
+                if (left_over >= 64) {
+                        sha256_process_block(ctx->buffer, 64, ctx);
+                        left_over -= 64;
+                        memcpy(ctx->buffer, &ctx->buffer[64], left_over);
+                }
+                ctx->buflen = left_over;
+        }
+}
+
+/* Process LEN bytes of BUFFER, accumulating context into CTX.
+   It is assumed that LEN % 64 == 0.  */
+static void sha256_process_block(const void *buffer, size_t len, struct sha256_ctx *ctx) {
+        const uint32_t *words = ASSERT_PTR(buffer);
+        size_t nwords = len / sizeof(uint32_t);
+
+        assert(ctx);
+
+        uint32_t a = ctx->H[0];
+        uint32_t b = ctx->H[1];
+        uint32_t c = ctx->H[2];
+        uint32_t d = ctx->H[3];
+        uint32_t e = ctx->H[4];
+        uint32_t f = ctx->H[5];
+        uint32_t g = ctx->H[6];
+        uint32_t h = ctx->H[7];
+
+        /* First increment the byte count.  FIPS 180-2 specifies the possible
+           length of the file up to 2^64 bits.  Here we only compute the
+           number of bytes.  */
+        ctx->total64 += len;
+
+        /* Process all bytes in the buffer with 64 bytes in each round of
+           the loop.  */
+        while (nwords > 0) {
+                uint32_t W[64];
+                uint32_t a_save = a;
+                uint32_t b_save = b;
+                uint32_t c_save = c;
+                uint32_t d_save = d;
+                uint32_t e_save = e;
+                uint32_t f_save = f;
+                uint32_t g_save = g;
+                uint32_t h_save = h;
+
+                /* Operators defined in FIPS 180-2:4.1.2.  */
+#define Ch(x, y, z) ((x & y) ^ (~x & z))
+#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
+#define S0(x) (CYCLIC (x, 2) ^ CYCLIC (x, 13) ^ CYCLIC (x, 22))
+#define S1(x) (CYCLIC (x, 6) ^ CYCLIC (x, 11) ^ CYCLIC (x, 25))
+#define R0(x) (CYCLIC (x, 7) ^ CYCLIC (x, 18) ^ (x >> 3))
+#define R1(x) (CYCLIC (x, 17) ^ CYCLIC (x, 19) ^ (x >> 10))
+
+                /* It is unfortunate that C does not provide an operator for
+                   cyclic rotation.  Hope the C compiler is smart enough.  */
+#define CYCLIC(w, s) ((w >> s) | (w << (32 - s)))
+
+                /* Compute the message schedule according to FIPS 180-2:6.2.2 step 2.  */
+                for (size_t t = 0; t < 16; ++t) {
+                        W[t] = SWAP (*words);
+                        ++words;
+                }
+                for (size_t t = 16; t < 64; ++t)
+                        W[t] = R1 (W[t - 2]) + W[t - 7] + R0 (W[t - 15]) + W[t - 16];
+
+                /* The actual computation according to FIPS 180-2:6.2.2 step 3.  */
+                for (size_t t = 0; t < 64; ++t) {
+                        uint32_t T1 = h + S1 (e) + Ch (e, f, g) + K[t] + W[t];
+                        uint32_t T2 = S0 (a) + Maj (a, b, c);
+                        h = g;
+                        g = f;
+                        f = e;
+                        e = d + T1;
+                        d = c;
+                        c = b;
+                        b = a;
+                        a = T1 + T2;
+                }
+
+                /* Add the starting values of the context according to FIPS 180-2:6.2.2
+                   step 4.  */
+                a += a_save;
+                b += b_save;
+                c += c_save;
+                d += d_save;
+                e += e_save;
+                f += f_save;
+                g += g_save;
+                h += h_save;
+
+                /* Prepare for the next round.  */
+                nwords -= 16;
+        }
+
+        /* Put checksum in context given as argument.  */
+        ctx->H[0] = a;
+        ctx->H[1] = b;
+        ctx->H[2] = c;
+        ctx->H[3] = d;
+        ctx->H[4] = e;
+        ctx->H[5] = f;
+        ctx->H[6] = g;
+        ctx->H[7] = h;
+}
+
+uint8_t* sha256_direct(const void *buffer, size_t sz, uint8_t result[static SHA256_DIGEST_SIZE]) {
+        struct sha256_ctx ctx;
+        sha256_init_ctx(&ctx);
+        sha256_process_bytes(buffer, sz, &ctx);
+        return sha256_finish_ctx(&ctx, result);
+}
diff --git a/src/fundamental/sha256.h b/src/fundamental/sha256.h
new file mode 100644
index 0000000..dbb08e3
--- /dev/null
+++ b/src/fundamental/sha256.h
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stddef.h>
+#include <stdint.h>
+
+#define SHA256_DIGEST_SIZE 32
+
+struct sha256_ctx {
+        uint32_t H[8];
+
+        union {
+                uint64_t total64;
+#define TOTAL64_low (1 - (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
+#define TOTAL64_high (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+                uint32_t total[2];
+        };
+
+        uint32_t buflen;
+
+        union {
+                uint8_t  buffer[128]; /* NB: always correctly aligned for UINT32.  */
+                uint32_t buffer32[32];
+                uint64_t buffer64[16];
+        };
+};
+
+void sha256_init_ctx(struct sha256_ctx *ctx);
+uint8_t *sha256_finish_ctx(struct sha256_ctx *ctx, uint8_t resbuf[static SHA256_DIGEST_SIZE]);
+void sha256_process_bytes(const void *buffer, size_t len, struct sha256_ctx *ctx);
+
+static inline void sha256_process_bytes_and_size(const void *buffer, size_t len, struct sha256_ctx *ctx) {
+        sha256_process_bytes(&len, sizeof(len), ctx);
+        sha256_process_bytes(buffer, len, ctx);
+}
+
+uint8_t* sha256_direct(const void *buffer, size_t sz, uint8_t result[static SHA256_DIGEST_SIZE]);
+
+#define SHA256_DIRECT(buffer, sz) sha256_direct(buffer, sz, (uint8_t[SHA256_DIGEST_SIZE]) {})
diff --git a/src/fundamental/string-util-fundamental.c b/src/fundamental/string-util-fundamental.c
index 383e390..484131d 100644
--- a/src/fundamental/string-util-fundamental.c
+++ b/src/fundamental/string-util-fundamental.c
@@ -1,14 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#ifndef SD_BOOT
-#include <ctype.h>
-
-#include "macro.h"
+#if !SD_BOOT
+#  include <ctype.h>
 #endif
+
+#include "macro-fundamental.h"
 #include "string-util-fundamental.h"
 
 sd_char *startswith(const sd_char *s, const sd_char *prefix) {
-        sd_size_t l;
+        size_t l;
 
         assert(s);
         assert(prefix);
@@ -20,9 +20,9 @@
         return (sd_char*) s + l;
 }
 
-#ifndef SD_BOOT
+#if !SD_BOOT
 sd_char *startswith_no_case(const sd_char *s, const sd_char *prefix) {
-        sd_size_t l;
+        size_t l;
 
         assert(s);
         assert(prefix);
@@ -36,7 +36,7 @@
 #endif
 
 sd_char* endswith(const sd_char *s, const sd_char *postfix) {
-        sd_size_t sl, pl;
+        size_t sl, pl;
 
         assert(s);
         assert(postfix);
@@ -57,7 +57,7 @@
 }
 
 sd_char* endswith_no_case(const sd_char *s, const sd_char *postfix) {
-        sd_size_t sl, pl;
+        size_t sl, pl;
 
         assert(s);
         assert(postfix);
@@ -77,36 +77,27 @@
         return (sd_char*) s + sl - pl;
 }
 
-#ifdef SD_BOOT
-static sd_bool isdigit(sd_char a) {
-        return a >= '0' && a <= '9';
-}
-#endif
-
-static sd_bool is_alpha(sd_char a) {
-        /* Locale independent version of isalpha(). */
-        return (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z');
+static bool is_valid_version_char(sd_char a) {
+        return ascii_isdigit(a) || ascii_isalpha(a) || IN_SET(a, '~', '-', '^', '.');
 }
 
-static sd_bool is_valid_version_char(sd_char a) {
-        return isdigit(a) || is_alpha(a) || IN_SET(a, '~', '-', '^', '.');
-}
-
-sd_int strverscmp_improved(const sd_char *a, const sd_char *b) {
-
-        /* This is based on RPM's rpmvercmp(). But this explicitly handles '-' and '.', as we usually
-         * want to directly compare strings which contain both version and release; e.g.
-         * '247.2-3.1.fc33.x86_64' or '5.11.0-0.rc5.20210128git76c057c84d28.137.fc34'.
-         * Unlike rpmvercmp(), this distiguishes e.g. 123a and 123.a, and 123a is newer.
+int strverscmp_improved(const sd_char *a, const sd_char *b) {
+        /* This function is similar to strverscmp(3), but it treats '-' and '.' as separators.
          *
-         * This splits the input strings into segments. Each segment is numeric or alpha, and may be
+         * The logic is based on rpm's rpmvercmp(), but unlike rpmvercmp(), it distiguishes e.g.
+         * '123a' and '123.a', with '123a' being newer.
+         *
+         * It allows direct comparison of strings which contain both a version and a release; e.g.
+         * '247.2-3.1.fc33.x86_64' or '5.11.0-0.rc5.20210128git76c057c84d28.137.fc34'.
+         *
+         * The input string is split into segments. Each segment is numeric or alphabetic, and may be
          * prefixed with the following:
          *  '~' : used for pre-releases, a segment prefixed with this is the oldest,
          *  '-' : used for the separator between version and release,
          *  '^' : used for patched releases, a segment with this is newer than one with '-'.
          *  '.' : used for point releases.
-         * Note, no prefix segment is the newest. All non-supported characters are dropped, and
-         * handled as a separator of segments, e.g., 123_a is equivalent to 123a.
+         * Note that no prefix segment is the newest. All non-supported characters are dropped, and
+         * handled as a separator of segments, e.g., '123_a' is equivalent to '123a'.
          *
          * By using this, version strings can be sorted like following:
          *  (older) 122.1
@@ -123,12 +114,12 @@
          *  (newer) 124-1
          */
 
-        if (isempty(a) || isempty(b))
-                return strcmp_ptr(a, b);
+        a = strempty(a);
+        b = strempty(b);
 
         for (;;) {
                 const sd_char *aa, *bb;
-                sd_int r;
+                int r;
 
                 /* Drop leading invalid characters. */
                 while (*a != '\0' && !is_valid_version_char(*a))
@@ -149,7 +140,7 @@
                 }
 
                 /* If at least one string reaches the end, then longer is newer.
-                 * Note that except for '~' prefixed segments, a string has more segments is newer.
+                 * Note that except for '~' prefixed segments, a string which has more segments is newer.
                  * So, this check must be after the '~' check. */
                 if (*a == '\0' || *b == '\0')
                         return CMP(*a, *b);
@@ -185,20 +176,25 @@
                         b++;
                 }
 
-                if (isdigit(*a) || isdigit(*b)) {
+                if (ascii_isdigit(*a) || ascii_isdigit(*b)) {
+                        /* Find the leading numeric segments. One may be an empty string. So,
+                         * numeric segments are always newer than alpha segments. */
+                        for (aa = a; ascii_isdigit(*aa); aa++)
+                                ;
+                        for (bb = b; ascii_isdigit(*bb); bb++)
+                                ;
+
+                        /* Check if one of the strings was empty, but the other not. */
+                        r = CMP(a != aa, b != bb);
+                        if (r != 0)
+                                return r;
+
                         /* Skip leading '0', to make 00123 equivalent to 123. */
                         while (*a == '0')
                                 a++;
                         while (*b == '0')
                                 b++;
 
-                        /* Find the leading numeric segments. One may be an empty string. So,
-                         * numeric segments are always newer than alpha segments. */
-                        for (aa = a; isdigit(*aa); aa++)
-                                ;
-                        for (bb = b; isdigit(*bb); bb++)
-                                ;
-
                         /* To compare numeric segments without parsing their values, first compare the
                          * lengths of the segments. Eg. 12345 vs 123, longer is newer. */
                         r = CMP(aa - a, bb - b);
@@ -206,18 +202,18 @@
                                 return r;
 
                         /* Then, compare them as strings. */
-                        r = strncmp(a, b, aa - a);
+                        r = CMP(strncmp(a, b, aa - a), 0);
                         if (r != 0)
                                 return r;
                 } else {
                         /* Find the leading non-numeric segments. */
-                        for (aa = a; is_alpha(*aa); aa++)
+                        for (aa = a; ascii_isalpha(*aa); aa++)
                                 ;
-                        for (bb = b; is_alpha(*bb); bb++)
+                        for (bb = b; ascii_isalpha(*bb); bb++)
                                 ;
 
                         /* Note that the segments are usually not NUL-terminated. */
-                        r = strncmp(a, b, MIN(aa - a, bb - b));
+                        r = CMP(strncmp(a, b, MIN(aa - a, bb - b)), 0);
                         if (r != 0)
                                 return r;
 
@@ -227,7 +223,7 @@
                                 return r;
                 }
 
-                /* The current segments are equivalent. Let's compare the next one. */
+                /* The current segments are equivalent. Let's move to the next one. */
                 a = aa;
                 b = bb;
         }
diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h
index 407cede..c35ce5b 100644
--- a/src/fundamental/string-util-fundamental.h
+++ b/src/fundamental/string-util-fundamental.h
@@ -1,67 +1,120 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#ifdef SD_BOOT
-#include <efi.h>
-#include <efilib.h>
+#if SD_BOOT
+#  include <efi.h>
+#  include <efilib.h>
+#  include "efi-string.h"
 #else
-#include <string.h>
+#  include <string.h>
 #endif
 
 #include "macro-fundamental.h"
 
-#ifdef SD_BOOT
-#define strlen(a)        StrLen((a))
-#define strcmp(a, b)     StrCmp((a), (b))
-#define strncmp(a, b, n) StrnCmp((a), (b), (n))
-#define strcasecmp(a, b) StriCmp((a), (b))
-#define STR_C(str)       (L ## str)
+#if SD_BOOT
+#  define strlen strlen16
+#  define strcmp strcmp16
+#  define strncmp strncmp16
+#  define strcasecmp strcasecmp16
+#  define strncasecmp strncasecmp16
+#  define STR_C(str)       (L ## str)
+typedef char16_t sd_char;
 #else
-#define STR_C(str)       (str)
+#  define STR_C(str)       (str)
+typedef char sd_char;
 #endif
 
 #define streq(a,b) (strcmp((a),(b)) == 0)
 #define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
 #define strcaseeq(a,b) (strcasecmp((a),(b)) == 0)
-#ifndef SD_BOOT
 #define strncaseeq(a, b, n) (strncasecmp((a), (b), (n)) == 0)
-#endif
 
-static inline sd_int strcmp_ptr(const sd_char *a, const sd_char *b) {
+static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
         if (a && b)
                 return strcmp(a, b);
 
         return CMP(a, b);
 }
 
-static inline sd_int strcasecmp_ptr(const sd_char *a, const sd_char *b) {
+static inline int strcasecmp_ptr(const sd_char *a, const sd_char *b) {
         if (a && b)
                 return strcasecmp(a, b);
 
         return CMP(a, b);
 }
 
-static inline sd_bool streq_ptr(const sd_char *a, const sd_char *b) {
+static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
         return strcmp_ptr(a, b) == 0;
 }
 
-static inline sd_bool strcaseeq_ptr(const sd_char *a, const sd_char *b) {
+static inline bool strcaseeq_ptr(const sd_char *a, const sd_char *b) {
         return strcasecmp_ptr(a, b) == 0;
 }
 
+static inline size_t strlen_ptr(const sd_char *s) {
+        if (!s)
+                return 0;
+
+        return strlen(s);
+}
+
 sd_char *startswith(const sd_char *s, const sd_char *prefix) _pure_;
-#ifndef SD_BOOT
+#if !SD_BOOT
 sd_char *startswith_no_case(const sd_char *s, const sd_char *prefix) _pure_;
 #endif
 sd_char *endswith(const sd_char *s, const sd_char *postfix) _pure_;
 sd_char *endswith_no_case(const sd_char *s, const sd_char *postfix) _pure_;
 
-static inline sd_bool isempty(const sd_char *a) {
+static inline bool isempty(const sd_char *a) {
         return !a || a[0] == '\0';
 }
 
-static inline const sd_char *yes_no(sd_bool b) {
+static inline const sd_char *strempty(const sd_char *s) {
+        return s ?: STR_C("");
+}
+
+static inline const sd_char *yes_no(bool b) {
         return b ? STR_C("yes") : STR_C("no");
 }
 
-sd_int strverscmp_improved(const sd_char *a, const sd_char *b);
+static inline const sd_char* comparison_operator(int result) {
+        return result < 0 ? STR_C("<") : result > 0 ? STR_C(">") : STR_C("==");
+}
+
+int strverscmp_improved(const sd_char *a, const sd_char *b);
+
+/* Like startswith(), but operates on arbitrary memory blocks */
+static inline void *memory_startswith(const void *p, size_t sz, const sd_char *token) {
+        assert(token);
+
+        size_t n = strlen(token) * sizeof(sd_char);
+        if (sz < n)
+                return NULL;
+
+        assert(p);
+
+        if (memcmp(p, token, n) != 0)
+                return NULL;
+
+        return (uint8_t*) p + n;
+}
+
+#define _STRV_FOREACH(s, l, i)                                          \
+        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
+
+#define STRV_FOREACH(s, l)                      \
+        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
+
+static inline bool ascii_isdigit(sd_char a) {
+        /* A pure ASCII, locale independent version of isdigit() */
+        return a >= '0' && a <= '9';
+}
+
+static inline bool ascii_ishex(sd_char a) {
+        return ascii_isdigit(a) || (a >= 'a' && a <= 'f') || (a >= 'A' && a <= 'F');
+}
+
+static inline bool ascii_isalpha(sd_char a) {
+        /* A pure ASCII, locale independent version of isalpha() */
+        return (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z');
+}
diff --git a/src/fundamental/tpm-pcr.c b/src/fundamental/tpm-pcr.c
new file mode 100644
index 0000000..7609d83
--- /dev/null
+++ b/src/fundamental/tpm-pcr.c
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stddef.h>
+
+#include "tpm-pcr.h"
+
+const char* const unified_sections[_UNIFIED_SECTION_MAX + 1] = {
+        [UNIFIED_SECTION_LINUX]   = ".linux",
+        [UNIFIED_SECTION_OSREL]   = ".osrel",
+        [UNIFIED_SECTION_CMDLINE] = ".cmdline",
+        [UNIFIED_SECTION_INITRD]  = ".initrd",
+        [UNIFIED_SECTION_SPLASH]  = ".splash",
+        [UNIFIED_SECTION_DTB]     = ".dtb",
+        [UNIFIED_SECTION_PCRSIG]  = ".pcrsig",
+        [UNIFIED_SECTION_PCRPKEY] = ".pcrpkey",
+        NULL,
+};
diff --git a/src/fundamental/tpm-pcr.h b/src/fundamental/tpm-pcr.h
new file mode 100644
index 0000000..e12b4ff
--- /dev/null
+++ b/src/fundamental/tpm-pcr.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "macro-fundamental.h"
+
+/* The various TPM PCRs we measure into from sd-stub and sd-boot. */
+
+/* This TPM PCR is where we extend the sd-stub "payloads" into, before using them. i.e. the kernel ELF image,
+ * embedded initrd, and so on. In contrast to PCR 4 (which also contains this data, given the whole
+ * surrounding PE image is measured into it) this should be reasonably pre-calculatable, because it *only*
+ * consists of static data from the kernel PE image. */
+#define TPM_PCR_INDEX_KERNEL_IMAGE 11U
+
+/* This TPM PCR is where sd-stub extends the kernel command line and any passed credentials into. */
+#define TPM_PCR_INDEX_KERNEL_PARAMETERS 12U
+
+/* This TPM PCR is where we extend the initrd sysext images into which we pass to the booted kernel */
+#define TPM_PCR_INDEX_INITRD_SYSEXTS 13U
+
+/* This TPM PCR is where we measure the root fs volume key (and maybe /var/'s) if it is split off */
+#define TPM_PCR_INDEX_VOLUME_KEY 15U
+
+/* List of PE sections that have special meaning for us in unified kernels. This is the canonical order in
+ * which we measure the sections into TPM PCR 11 (see above). PLEASE DO NOT REORDER! */
+typedef enum UnifiedSection {
+        UNIFIED_SECTION_LINUX,
+        UNIFIED_SECTION_OSREL,
+        UNIFIED_SECTION_CMDLINE,
+        UNIFIED_SECTION_INITRD,
+        UNIFIED_SECTION_SPLASH,
+        UNIFIED_SECTION_DTB,
+        UNIFIED_SECTION_PCRSIG,
+        UNIFIED_SECTION_PCRPKEY,
+        _UNIFIED_SECTION_MAX,
+} UnifiedSection;
+
+extern const char* const unified_sections[_UNIFIED_SECTION_MAX + 1];
+
+static inline bool unified_section_measure(UnifiedSection section) {
+        /* Don't include the PCR signature in the PCR measurements, since they sign the expected result of
+         * the measurement, and hence shouldn't be input to it. */
+        return section >= 0 && section < _UNIFIED_SECTION_MAX && section != UNIFIED_SECTION_PCRSIG;
+}
diff --git a/src/fundamental/type.h b/src/fundamental/type.h
deleted file mode 100644
index f645d2d..0000000
--- a/src/fundamental/type.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#ifdef SD_BOOT
-#include <efi.h>
-
-typedef BOOLEAN sd_bool;
-typedef CHAR16  sd_char;
-typedef INTN    sd_int;
-typedef UINTN   sd_size_t;
-
-#define true    TRUE
-#define false   FALSE
-#else
-#include <stdbool.h>
-#include <stdint.h>
-
-typedef bool    sd_bool;
-typedef char    sd_char;
-typedef int     sd_int;
-typedef size_t  sd_size_t;
-#endif
diff --git a/src/fundamental/unaligned-fundamental.h b/src/fundamental/unaligned-fundamental.h
new file mode 100644
index 0000000..a4c810a
--- /dev/null
+++ b/src/fundamental/unaligned-fundamental.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdint.h>
+
+static inline uint16_t unaligned_read_ne16(const void *_u) {
+        const struct __attribute__((__packed__, __may_alias__)) { uint16_t x; } *u = _u;
+
+        return u->x;
+}
+
+static inline uint32_t unaligned_read_ne32(const void *_u) {
+        const struct __attribute__((__packed__, __may_alias__)) { uint32_t x; } *u = _u;
+
+        return u->x;
+}
+
+static inline uint64_t unaligned_read_ne64(const void *_u) {
+        const struct __attribute__((__packed__, __may_alias__)) { uint64_t x; } *u = _u;
+
+        return u->x;
+}
+
+static inline void unaligned_write_ne16(void *_u, uint16_t a) {
+        struct __attribute__((__packed__, __may_alias__)) { uint16_t x; } *u = _u;
+
+        u->x = a;
+}
+
+static inline void unaligned_write_ne32(void *_u, uint32_t a) {
+        struct __attribute__((__packed__, __may_alias__)) { uint32_t x; } *u = _u;
+
+        u->x = a;
+}
+
+static inline void unaligned_write_ne64(void *_u, uint64_t a) {
+        struct __attribute__((__packed__, __may_alias__)) { uint64_t x; } *u = _u;
+
+        u->x = a;
+}
diff --git a/src/fuzz/fuzz-bootspec-gen.py b/src/fuzz/fuzz-bootspec-gen.py
new file mode 100644
index 0000000..99af3f5
--- /dev/null
+++ b/src/fuzz/fuzz-bootspec-gen.py
@@ -0,0 +1,21 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+"""Generate sample input for fuzz-bootspec"""
+
+import json
+import os
+import sys
+
+config = open(sys.argv[1]).read()
+loader = [entry for entry in open(sys.argv[2], encoding='utf-16-le').read().split('\0')
+          if len(entry) > 2]   # filter out fluff from bad decoding
+entries = [(os.path.basename(name), open(name).read())
+           for name in sys.argv[3:]]
+
+data = {
+    'config': config,
+    'entries': entries,
+    'loader': loader,
+}
+
+print(json.dumps(data, indent=4))
diff --git a/src/fuzz/fuzz-bootspec.c b/src/fuzz/fuzz-bootspec.c
new file mode 100644
index 0000000..cea674c
--- /dev/null
+++ b/src/fuzz/fuzz-bootspec.c
@@ -0,0 +1,125 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <string.h>
+
+#include "bootspec.h"
+#include "env-util.h"
+#include "escape.h"
+#include "fuzz.h"
+#include "fd-util.h"
+#include "json.h"
+
+static int json_dispatch_config(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        BootConfig *config = ASSERT_PTR(userdata);
+
+        const char *s = json_variant_string(variant);
+        if (!s)
+                return -EINVAL;
+
+        _cleanup_fclose_ FILE *f = NULL;
+        assert_se(f = data_to_file((const uint8_t*) s, strlen(s)));
+
+        (void) boot_loader_read_conf(config, f, "memstream");
+        return 0;
+}
+
+static int json_dispatch_entries(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        BootConfig *config = ASSERT_PTR(userdata);
+        JsonVariant *entry;
+
+        JSON_VARIANT_ARRAY_FOREACH(entry, variant) {
+                if (!json_variant_is_array(entry) ||
+                    json_variant_elements(entry) < 1)
+                        return -EINVAL;
+
+                JsonVariant *v;
+                const char *id = NULL, *raw = NULL;
+                _cleanup_free_ char *data = NULL;
+                ssize_t len = -ENODATA;
+
+                v = json_variant_by_index(entry, 0);
+                if (v)
+                        id = json_variant_string(v);
+                if (!id)
+                        continue;
+
+                v = json_variant_by_index(entry, 1);
+                if (v)
+                        raw = json_variant_string(v);
+                if (raw)
+                        len = cunescape(raw, UNESCAPE_RELAX | UNESCAPE_ACCEPT_NUL, &data);
+                if (len >= 0) {
+                        _cleanup_fclose_ FILE *f = NULL;
+                        assert_se(f = data_to_file((const uint8_t*) data, len));
+
+                        assert_se(boot_config_load_type1(config, f, "/", "/entries", id) != -ENOMEM);
+                }
+        }
+
+        return 0;
+}
+
+static int json_dispatch_loader(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        BootConfig *config = ASSERT_PTR(userdata);
+        _cleanup_strv_free_ char **entries = NULL;
+        int r;
+
+        r = json_dispatch_strv(name, variant, flags, &entries);
+        if (r < 0)
+                return r;
+
+        (void) boot_config_augment_from_loader(config, entries, false);
+        return 0;
+}
+
+static const JsonDispatch data_dispatch[] = {
+        { "config",  JSON_VARIANT_STRING, json_dispatch_config,  0, 0 },
+        { "entries", JSON_VARIANT_ARRAY,  json_dispatch_entries, 0, 0 },
+        { "loader",  JSON_VARIANT_ARRAY,  json_dispatch_loader,  0, 0 },
+        {}
+};
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        _cleanup_free_ const char *datadup = NULL;
+        _cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
+        int r;
+
+        if (outside_size_range(size, 0, 65536))
+                return 0;
+
+        /* Disable most logging if not running standalone */
+        if (!getenv("SYSTEMD_LOG_LEVEL"))
+                log_set_max_level(LOG_CRIT);
+
+        assert_se(datadup = memdup_suffix0(data, size));
+
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        r = json_parse(datadup, 0, &v, NULL, NULL);
+        if (r < 0)
+                return 0;
+
+        r = json_dispatch(v, data_dispatch, NULL, 0, &config);
+        if (r < 0)
+                return 0;
+
+        assert_se(boot_config_finalize(&config) >= 0);
+
+        (void) boot_config_select_special_entries(&config, /* skip_efivars= */ false);
+
+        _cleanup_close_ int orig_stdout_fd = -EBADF;
+        if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0) {
+                orig_stdout_fd = fcntl(fileno(stdout), F_DUPFD_CLOEXEC, 3);
+                if (orig_stdout_fd < 0)
+                        log_warning_errno(orig_stdout_fd, "Failed to duplicate fd 1: %m");
+                else
+                        assert_se(freopen("/dev/null", "w", stdout));
+        }
+
+        (void) show_boot_entries(&config, JSON_FORMAT_OFF);
+        (void) show_boot_entries(&config, JSON_FORMAT_PRETTY);
+
+        if (orig_stdout_fd >= 0)
+                assert_se(freopen(FORMAT_PROC_FD_PATH(orig_stdout_fd), "w", stdout));
+
+        return 0;
+}
diff --git a/src/fuzz/fuzz-bootspec.options b/src/fuzz/fuzz-bootspec.options
new file mode 100644
index 0000000..678d526
--- /dev/null
+++ b/src/fuzz/fuzz-bootspec.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 65536
diff --git a/src/fuzz/fuzz-calendarspec.c b/src/fuzz/fuzz-calendarspec.c
index 8080172..ea027b8 100644
--- a/src/fuzz/fuzz-calendarspec.c
+++ b/src/fuzz/fuzz-calendarspec.c
@@ -4,20 +4,54 @@
 #include "calendarspec.h"
 #include "fd-util.h"
 #include "fuzz.h"
+#include "string-util.h"
+#include "time-util.h"
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_(calendar_spec_freep) CalendarSpec *cspec = NULL;
-        _cleanup_free_ char *str = NULL, *p = NULL;
+        _cleanup_free_ char *str = NULL;
+        int r;
 
         if (!getenv("SYSTEMD_LOG_LEVEL"))
                 log_set_max_level(LOG_CRIT);
 
         str = memdup_suffix0(data, size);
 
-        if (calendar_spec_from_string(str, &cspec) >= 0) {
-                (void) calendar_spec_valid(cspec);
-                (void) calendar_spec_normalize(cspec);
-                (void) calendar_spec_to_string(cspec, &p);
+        size_t l1 = strlen(str);
+        const char* usecs = l1 < size ? str + l1 + 1 : "";
+
+        r = calendar_spec_from_string(str, &cspec);
+        if (r < 0) {
+                log_debug_errno(r, "Failed to parse \"%s\": %m", str);
+                return 0;
+        }
+
+        _cleanup_free_ char *p = NULL;
+        assert_se(calendar_spec_valid(cspec));
+        assert_se(calendar_spec_to_string(cspec, &p) == 0);
+        assert(p);
+
+        log_debug("spec: %s → %s", str, p);
+
+        _cleanup_(calendar_spec_freep) CalendarSpec *cspec2 = NULL;
+        assert_se(calendar_spec_from_string(p, &cspec2) >= 0);
+        assert_se(calendar_spec_valid(cspec2));
+
+        usec_t usec = 0;
+        (void) parse_time(usecs, &usec, 1);
+
+        /* If timezone is set, calendar_spec_next_usec() would fork, bleh :(
+         * Let's not try that. */
+        cspec->timezone = mfree(cspec->timezone);
+
+        log_debug("00: %s", strna(FORMAT_TIMESTAMP(usec)));
+        for (unsigned i = 1; i <= 20; i++) {
+                r = calendar_spec_next_usec(cspec, usec, &usec);
+                if (r < 0) {
+                        log_debug_errno(r, "%02u: %m", i);
+                        break;
+                }
+                log_debug("%02u: %s", i, FORMAT_TIMESTAMP(usec));
         }
 
         return 0;
diff --git a/src/fuzz/fuzz-catalog.c b/src/fuzz/fuzz-catalog.c
index f013455..f3029f4 100644
--- a/src/fuzz/fuzz-catalog.c
+++ b/src/fuzz/fuzz-catalog.c
@@ -8,7 +8,7 @@
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/fuzz-catalog.XXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
 
         if (!getenv("SYSTEMD_LOG_LEVEL"))
diff --git a/src/fuzz/fuzz-compress.c b/src/fuzz/fuzz-compress.c
index 189bd21..10956cc 100644
--- a/src/fuzz/fuzz-compress.c
+++ b/src/fuzz/fuzz-compress.c
@@ -6,21 +6,10 @@
 #include "compress.h"
 #include "fuzz.h"
 
-static int compress(int alg,
-                    const void *src, uint64_t src_size,
-                    void *dst, size_t dst_alloc_size, size_t *dst_size) {
-
-        if (alg == OBJECT_COMPRESSED_LZ4)
-                return compress_blob_lz4(src, src_size, dst, dst_alloc_size, dst_size);
-        if (alg == OBJECT_COMPRESSED_XZ)
-                return compress_blob_xz(src, src_size, dst, dst_alloc_size, dst_size);
-        return -EOPNOTSUPP;
-}
-
 typedef struct header {
-        uint32_t alg:2; /* We have only two compression algorithms so far, but we might add
-                         * more in the future. Let's make this a bit wider so our fuzzer
-                         * cases remain stable in the future. */
+        uint32_t alg:2; /* We have only three compression algorithms so far, but we might add more in the
+                         * future. Let's make this a bit wider so our fuzzer cases remain stable in the
+                         * future. */
         uint32_t sw_len;
         uint32_t sw_alloc;
         uint32_t reserved[3]; /* Extra space to keep fuzz cases stable in case we need to
@@ -46,7 +35,7 @@
                 log_set_max_level(LOG_CRIT);
 
         log_info("Using compression %s, data size=%zu",
-                 object_compressed_to_string(alg) ?: "(none)",
+                 compression_to_string(alg),
                  data_len);
 
         buf = malloc(MAX(size, 128u)); /* Make the buffer a bit larger for very small data */
@@ -56,7 +45,7 @@
         }
 
         size_t csize;
-        r = compress(alg, h->data, data_len, buf, size, &csize);
+        r = compress_blob_explicit(alg, h->data, data_len, buf, size, &csize);
         if (r < 0) {
                 log_error_errno(r, "Compression failed: %m");
                 return 0;
@@ -66,7 +55,7 @@
 
         size_t sw_alloc = MAX(h->sw_alloc, 1u);
         buf2 = malloc(sw_alloc);
-        if (!buf) {
+        if (!buf2) {
                 log_oom();
                 return 0;
         }
diff --git a/src/fuzz/fuzz-env-file.c b/src/fuzz/fuzz-env-file.c
index e0dac26..6217361 100644
--- a/src/fuzz/fuzz-env-file.c
+++ b/src/fuzz/fuzz-env-file.c
@@ -4,7 +4,6 @@
 
 #include "alloc-util.h"
 #include "env-file.h"
-#include "fileio.h"
 #include "fd-util.h"
 #include "fuzz.h"
 #include "strv.h"
@@ -13,10 +12,10 @@
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **rl = NULL, **rlp =  NULL;
 
-        if (size == 0 || size > 65535)
+        if (outside_size_range(size, 0, 65536))
                 return 0;
 
-        f = fmemopen_unlocked((char*) data, size, "re");
+        f = data_to_file(data, size);
         assert_se(f);
 
         /* We don't want to fill the logs with messages about parse errors.
diff --git a/src/fuzz/fuzz-env-file.options b/src/fuzz/fuzz-env-file.options
index 0824b19..678d526 100644
--- a/src/fuzz/fuzz-env-file.options
+++ b/src/fuzz/fuzz-env-file.options
@@ -1,2 +1,2 @@
 [libfuzzer]
-max_len = 65535
+max_len = 65536
diff --git a/src/fuzz/fuzz-fido-id-desc.dict b/src/fuzz/fuzz-fido-id-desc.dict
deleted file mode 100644
index d2d2679..0000000
--- a/src/fuzz/fuzz-fido-id-desc.dict
+++ /dev/null
@@ -1,6 +0,0 @@
-"\xfe"
-"\x00"
-"\x01"
-"\xf1"
-"\xd0"
-"\xf1\xd0\x00\x01"
diff --git a/src/fuzz/fuzz-hostname-setup.c b/src/fuzz/fuzz-hostname-setup.c
index b8d36da..d7c23ee 100644
--- a/src/fuzz/fuzz-hostname-setup.c
+++ b/src/fuzz/fuzz-hostname-setup.c
@@ -2,7 +2,6 @@
 
 #include "alloc-util.h"
 #include "fd-util.h"
-#include "fileio.h"
 #include "fuzz.h"
 #include "hostname-setup.h"
 
@@ -10,10 +9,7 @@
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *ret = NULL;
 
-        if (size == 0)
-                return 0;
-
-        f = fmemopen_unlocked((char*) data, size, "re");
+        f = data_to_file(data, size);
         assert_se(f);
 
         /* We don't want to fill the logs with messages about parse errors.
diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c
index f9a0e81..c393fcf 100644
--- a/src/fuzz/fuzz-json.c
+++ b/src/fuzz/fuzz-json.c
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
-#include "fileio.h"
+#include "env-util.h"
 #include "fd-util.h"
 #include "fuzz.h"
 #include "json.h"
@@ -11,21 +11,106 @@
         size_t out_size;
         _cleanup_fclose_ FILE *f = NULL, *g = NULL;
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        int r;
 
-        if (size == 0)
-                return 0;
+        /* Disable most logging if not running standalone */
+        if (!getenv("SYSTEMD_LOG_LEVEL"))
+                log_set_max_level(LOG_CRIT);
 
-        f = fmemopen_unlocked((char*) data, size, "re");
+        f = data_to_file(data, size);
         assert_se(f);
 
-        if (json_parse_file(f, NULL, 0, &v, NULL, NULL) < 0)
+        r = json_parse_file(f, NULL, 0, &v, NULL, NULL);
+        if (r < 0) {
+                log_debug_errno(r, "failed to parse input: %m");
                 return 0;
+        }
 
-        g = open_memstream_unlocked(&out, &out_size);
-        assert_se(g);
+        if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0)
+                assert_se(g = open_memstream_unlocked(&out, &out_size));
 
-        json_variant_dump(v, 0, g, NULL);
-        json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g, NULL);
+        json_variant_dump(v, 0, g ?: stdout, NULL);
+        json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g ?: stdout, NULL);
+
+        bool sorted = json_variant_is_sorted(v);
+        log_debug("json_variant_is_sorted: %s", yes_no(sorted));
+
+        r = json_variant_sort(&v);
+        log_debug_errno(r, "json_variant_sort: %d/%m", r);
+
+        sorted = json_variant_is_sorted(v);
+        log_debug("json_variant_is_sorted: %s", yes_no(sorted));
+        assert_se(r < 0 || sorted);
+
+        bool normalized = json_variant_is_normalized(v);
+        log_debug("json_variant_is_normalized: %s", yes_no(normalized));
+
+        r = json_variant_normalize(&v);
+        log_debug_errno(r, "json_variant_normalize: %d/%m", r);
+
+        normalized = json_variant_is_normalized(v);
+        log_debug("json_variant_is_normalized: %s", yes_no(normalized));
+        assert_se(r < 0 || normalized);
+
+        double real = json_variant_real(v);
+        log_debug("json_variant_real: %lf", real);
+
+        bool negative = json_variant_is_negative(v);
+        log_debug("json_variant_is_negative: %s", yes_no(negative));
+
+        bool blank = json_variant_is_blank_object(v);
+        log_debug("json_variant_is_blank_object: %s", yes_no(blank));
+
+        blank = json_variant_is_blank_array(v);
+        log_debug("json_variant_is_blank_array: %s", yes_no(blank));
+
+        size_t elements = json_variant_elements(v);
+        log_debug("json_variant_elements: %zu", elements);
+
+        for (size_t i = 0; i <= elements + 2; i++)
+                (void) json_variant_by_index(v, i);
+
+        assert_se(json_variant_equal(v, v));
+        assert_se(!json_variant_equal(v, NULL));
+        assert_se(!json_variant_equal(NULL, v));
+
+        bool sensitive = json_variant_is_sensitive(v);
+        log_debug("json_variant_is_sensitive: %s", yes_no(sensitive));
+
+        json_variant_sensitive(v);
+
+        sensitive = json_variant_is_sensitive(v);
+        log_debug("json_variant_is_sensitive: %s", yes_no(sensitive));
+
+        const char *source;
+        unsigned line, column;
+        assert_se(json_variant_get_source(v, &source, &line, &column) == 0);
+        log_debug("json_variant_get_source: %s:%u:%u", source ?: "-", line, column);
+
+        r = json_variant_set_field_string(&v, "a", "string-a");
+        log_debug_errno(r, "json_set_field_string: %d/%m", r);
+
+        r = json_variant_set_field_integer(&v, "b", -12345);
+        log_debug_errno(r, "json_set_field_integer: %d/%m", r);
+
+        r = json_variant_set_field_unsigned(&v, "c", 12345);
+        log_debug_errno(r, "json_set_field_unsigned: %d/%m", r);
+
+        r = json_variant_set_field_boolean(&v, "d", false);
+        log_debug_errno(r, "json_set_field_boolean: %d/%m", r);
+
+        r = json_variant_set_field_strv(&v, "e", STRV_MAKE("e-1", "e-2", "e-3"));
+        log_debug_errno(r, "json_set_field_strv: %d/%m", r);
+
+        r = json_variant_filter(&v, STRV_MAKE("a", "b", "c", "d", "e"));
+        log_debug_errno(r, "json_variant_filter: %d/%m", r);
+
+        /* I assume we can merge v with itself… */
+        r = json_variant_merge(&v, v);
+        log_debug_errno(r, "json_variant_merge: %d/%m", r);
+
+        r = json_variant_append_array(&v, v);
+        log_debug_errno(r, "json_variant_append_array: %d/%m", r);
 
         return 0;
 }
diff --git a/src/fuzz/fuzz-time-util.c b/src/fuzz/fuzz-time-util.c
index bf2a663..f1c95ae 100644
--- a/src/fuzz/fuzz-time-util.c
+++ b/src/fuzz/fuzz-time-util.c
@@ -4,7 +4,6 @@
 #include "fd-util.h"
 #include "fuzz.h"
 #include "time-util.h"
-#include "util.h"
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_free_ char *str = NULL;
diff --git a/src/fuzz/fuzz-varlink.c b/src/fuzz/fuzz-varlink.c
index f26050c..cbfde08 100644
--- a/src/fuzz/fuzz-varlink.c
+++ b/src/fuzz/fuzz-varlink.c
@@ -23,12 +23,11 @@
 }
 
 static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        struct iovec *iov = userdata;
+        struct iovec *iov = ASSERT_PTR(userdata);
         bool write_eof = false, read_eof = false;
 
         assert(s);
         assert(fd >= 0);
-        assert(iov);
 
         if ((revents & (EPOLLOUT|EPOLLHUP|EPOLLERR)) && iov->iov_len > 0) {
                 ssize_t n;
@@ -86,7 +85,7 @@
         struct iovec server_iov = IOVEC_MAKE((void*) data, size), client_iov = IOVEC_MAKE((void*) data, size);
         /* Important: the declaration order matters here! we want that the fds are closed on return after the
          * event sources, hence we declare the fds first, the event sources second */
-        _cleanup_close_pair_ int server_pair[2] = { -1, -1 }, client_pair[2] = { -1, -1 };
+        _cleanup_close_pair_ int server_pair[2] = PIPE_EBADF, client_pair[2] = PIPE_EBADF;
         _cleanup_(sd_event_source_unrefp) sd_event_source *idle_event_source = NULL,
                 *server_event_source = NULL, *client_event_source = NULL;
         _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
diff --git a/src/fuzz/fuzz.h b/src/fuzz/fuzz.h
index 579b0ee..77e0ad9 100644
--- a/src/fuzz/fuzz.h
+++ b/src/fuzz/fuzz.h
@@ -4,5 +4,29 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include "env-util.h"
+#include "fileio.h"
+
 /* The entry point into the fuzzer */
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
+
+static inline FILE* data_to_file(const uint8_t *data, size_t size) {
+        if (size == 0)
+                return fopen("/dev/null", "re");
+        else
+                return fmemopen_unlocked((char*) data, size, "r");
+}
+
+/* Check if we are within the specified size range.
+ * The upper limit is ignored if FUZZ_USE_SIZE_LIMIT is unset.
+ */
+static inline bool outside_size_range(size_t size, size_t lower, size_t upper) {
+        if (size < lower)
+                return true;
+        if (size > upper)
+                return FUZZ_USE_SIZE_LIMIT;
+        return false;
+}
+
+/* Force value to not be optimized away. */
+#define DO_NOT_OPTIMIZE(value) ({ asm volatile("" : : "g"(value) : "memory"); })
diff --git a/src/fuzz/meson.build b/src/fuzz/meson.build
index 1ed1dd8..6f36536 100644
--- a/src/fuzz/meson.build
+++ b/src/fuzz/meson.build
@@ -1,23 +1,25 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 fuzzers += [
-        [['src/fuzz/fuzz-catalog.c']],
+        [files('fuzz-bootspec.c')],
 
-        [['src/fuzz/fuzz-json.c']],
+        [files('fuzz-bus-label.c')],
 
-        [['src/fuzz/fuzz-varlink.c']],
+        [files('fuzz-calendarspec.c')],
 
-        [['src/fuzz/fuzz-udev-database.c']],
+        [files('fuzz-catalog.c')],
 
-        [['src/fuzz/fuzz-compress.c']],
+        [files('fuzz-compress.c')],
 
-        [['src/fuzz/fuzz-bus-label.c']],
+        [files('fuzz-env-file.c')],
 
-        [['src/fuzz/fuzz-env-file.c']],
+        [files('fuzz-hostname-setup.c')],
 
-        [['src/fuzz/fuzz-hostname-setup.c']],
+        [files('fuzz-json.c')],
 
-        [['src/fuzz/fuzz-calendarspec.c']],
+        [files('fuzz-time-util.c')],
 
-        [['src/fuzz/fuzz-time-util.c']],
+        [files('fuzz-udev-database.c')],
+
+        [files('fuzz-varlink.c')],
 ]
diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c
index aa5a0a6..d255e90 100644
--- a/src/getty-generator/getty-generator.c
+++ b/src/getty-generator/getty-generator.c
@@ -10,16 +10,18 @@
 #include "fileio.h"
 #include "generator.h"
 #include "log.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
+#include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
+#include "proc-cmdline.h"
 #include "strv.h"
 #include "terminal-util.h"
 #include "unit-name.h"
-#include "util.h"
 #include "virt.h"
 
 static const char *arg_dest = NULL;
+static bool arg_enabled = true;
 
 static int add_symlink(const char *fservice, const char *tservice) {
         char *from, *to;
@@ -31,7 +33,7 @@
         from = strjoina(SYSTEM_DATA_UNIT_DIR "/", fservice);
         to = strjoina(arg_dest, "/getty.target.wants/", tservice);
 
-        mkdir_parents_label(to, 0755);
+        (void) mkdir_parents_label(to, 0755);
 
         r = symlink(from, to);
         if (r < 0) {
@@ -76,7 +78,7 @@
 }
 
 static int verify_tty(const char *name) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *p;
 
         /* Some TTYs are weird and have been enumerated but don't work
@@ -139,11 +141,48 @@
         }
 }
 
+static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
+        int r;
+
+        assert(key);
+
+        if (proc_cmdline_key_streq(key, "systemd.getty_auto")) {
+                r = value ? parse_boolean(value) : 1;
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse getty_auto switch \"%s\", ignoring: %m", value);
+                else
+                        arg_enabled = r;
+        }
+
+        return 0;
+}
+
 static int run(const char *dest, const char *dest_early, const char *dest_late) {
+        _cleanup_free_ char *getty_auto = NULL;
         int r;
 
         assert_se(arg_dest = dest);
 
+        r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
+        if (r < 0)
+                log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
+
+        r = getenv_for_pid(1, "SYSTEMD_GETTY_AUTO", &getty_auto);
+        if (r < 0)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_GETTY_AUTO environment variable, ignoring: %m");
+        else if (r > 0) {
+                r = parse_boolean(getty_auto);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse $SYSTEMD_GETTY_AUTO value \"%s\", ignoring: %m", getty_auto);
+                else
+                        arg_enabled = r;
+        }
+
+        if (!arg_enabled) {
+                log_debug("Disabled, exiting.");
+                return 0;
+        }
+
         if (detect_container() > 0)
                 /* Add console shell and look at $container_ttys, but don't do add any
                  * further magic if we are in a container. */
@@ -175,9 +214,7 @@
                         return r;
         }
 
-        /* Automatically add in a serial getty on the first
-         * virtualizer console */
-        const char *j;
+        /* Automatically add in a serial getty on the first virtualizer console */
         FOREACH_STRING(j,
                        "hvc0",
                        "xvc0",
diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
index 10aa2d9..8a96451 100644
--- a/src/gpt-auto-generator/gpt-auto-generator.c
+++ b/src/gpt-auto-generator/gpt-auto-generator.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <stdlib.h>
+#include <sys/file.h>
 #include <unistd.h>
 
 #include "sd-device.h"
@@ -11,6 +12,7 @@
 #include "blockdev-util.h"
 #include "btrfs-util.h"
 #include "device-util.h"
+#include "devnum-util.h"
 #include "dirent-util.h"
 #include "dissect-image.h"
 #include "dropin.h"
@@ -21,6 +23,7 @@
 #include "fstab-util.h"
 #include "generator.h"
 #include "gpt.h"
+#include "initrd-util.h"
 #include "mkdir.h"
 #include "mountpoint-util.h"
 #include "parse-util.h"
@@ -32,81 +35,28 @@
 #include "string-util.h"
 #include "strv.h"
 #include "unit-name.h"
-#include "util.h"
 #include "virt.h"
 
 static const char *arg_dest = NULL;
 static bool arg_enabled = true;
 static bool arg_root_enabled = true;
+static char *arg_root_fstype = NULL;
+static char *arg_root_options = NULL;
 static int arg_root_rw = -1;
 
-static int open_parent_block_device(dev_t devnum, int *ret_fd) {
-        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
-        const char *name, *devtype, *node;
-        sd_device *parent;
-        dev_t pn;
-        int fd, r;
+STATIC_DESTRUCTOR_REGISTER(arg_root_fstype, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_options, freep);
 
-        assert(ret_fd);
+static int add_cryptsetup(
+                const char *id,
+                const char *what,
+                bool rw,
+                bool require,
+                bool measure,
+                char **ret_device) {
 
-        r = sd_device_new_from_devnum(&d, 'b', devnum);
-        if (r < 0)
-                return log_debug_errno(r, "Failed to open device: %m");
-
-        if (sd_device_get_devname(d, &name) < 0) {
-                r = sd_device_get_syspath(d, &name);
-                if (r < 0) {
-                        log_device_debug_errno(d, r, "Device %u:%u does not have a name, ignoring: %m",
-                                               major(devnum), minor(devnum));
-                        return 0;
-                }
-        }
-
-        r = sd_device_get_parent(d, &parent);
-        if (r < 0) {
-                log_device_debug_errno(d, r, "Not a partitioned device, ignoring: %m");
-                return 0;
-        }
-
-        /* Does it have a devtype? */
-        r = sd_device_get_devtype(parent, &devtype);
-        if (r < 0) {
-                log_device_debug_errno(parent, r, "Parent doesn't have a device type, ignoring: %m");
-                return 0;
-        }
-
-        /* Is this a disk or a partition? We only care for disks... */
-        if (!streq(devtype, "disk")) {
-                log_device_debug(parent, "Parent isn't a raw disk, ignoring.");
-                return 0;
-        }
-
-        /* Does it have a device node? */
-        r = sd_device_get_devname(parent, &node);
-        if (r < 0) {
-                log_device_debug_errno(parent, r, "Parent device does not have device node, ignoring: %m");
-                return 0;
-        }
-
-        log_device_debug(d, "Root device %s.", node);
-
-        r = sd_device_get_devnum(parent, &pn);
-        if (r < 0) {
-                log_device_debug_errno(parent, r, "Parent device is not a proper block device, ignoring: %m");
-                return 0;
-        }
-
-        fd = open(node, O_RDONLY|O_CLOEXEC|O_NOCTTY);
-        if (fd < 0)
-                return log_error_errno(errno, "Failed to open %s: %m", node);
-
-        *ret_fd = fd;
-        return 1;
-}
-
-static int add_cryptsetup(const char *id, const char *what, bool rw, bool require, char **device) {
 #if HAVE_LIBCRYPTSETUP
-        _cleanup_free_ char *e = NULL, *n = NULL, *d = NULL;
+        _cleanup_free_ char *e = NULL, *n = NULL, *d = NULL, *options = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         int r;
 
@@ -140,7 +90,28 @@
                 "After=%s\n",
                 d, d);
 
-        r = generator_write_cryptsetup_service_section(f, id, what, NULL, rw ? NULL : "read-only");
+        if (!rw) {
+                options = strdup("read-only");
+                if (!options)
+                        return log_oom();
+        }
+
+        if (measure) {
+                /* We only measure the root volume key into PCR 15 if we are booted with sd-stub (i.e. in a
+                 * UKI), and sd-stub measured the UKI. We do this in order not to step into people's own PCR
+                 * assignment, under the assumption that people who are fine to use sd-stub with its PCR
+                 * assignments are also OK with our PCR 15 use here. */
+
+                r = efi_stub_measured(LOG_WARNING);
+                if (r == 0)
+                        log_debug("Will not measure volume key of volume '%s', because not booted via systemd-stub with measurements enabled.", id);
+                else if (r > 0) {
+                        if (!strextend_with_separator(&options, ",", "tpm2-measure-pcr=yes"))
+                                return log_oom();
+                }
+        }
+
+        r = generator_write_cryptsetup_service_section(f, id, what, NULL, options);
         if (r < 0)
                 return r;
 
@@ -172,14 +143,14 @@
         if (r < 0)
                 log_warning_errno(r, "Failed to write device timeout drop-in, ignoring: %m");
 
-        if (device) {
-                char *ret;
+        if (ret_device) {
+                char *s;
 
-                ret = path_join("/dev/mapper", id);
-                if (!ret)
+                s = path_join("/dev/mapper", id);
+                if (!s)
                         return log_oom();
 
-                *device = ret;
+                *ret_device = s;
         }
 
         return 0;
@@ -195,6 +166,7 @@
                 const char *fstype,
                 bool rw,
                 bool growfs,
+                bool measure,
                 const char *options,
                 const char *description,
                 const char *post) {
@@ -215,12 +187,21 @@
         log_debug("Adding %s: %s fstype=%s", where, what, fstype ?: "(any)");
 
         if (streq_ptr(fstype, "crypto_LUKS")) {
-                r = add_cryptsetup(id, what, rw, true, &crypto_what);
+                r = add_cryptsetup(id, what, rw, /* require= */ true, measure, &crypto_what);
                 if (r < 0)
                         return r;
 
                 what = crypto_what;
                 fstype = NULL;
+        } else if (fstype) {
+                r = dissect_fstype_ok(fstype);
+                if (r < 0)
+                        return log_error_errno(r, "Unable to determine of dissected file system type '%s' is permitted: %m", fstype);
+                if (!r)
+                        return log_error_errno(
+                                        SYNTHETIC_ERRNO(EIDRM),
+                                        "Refusing to automatically mount uncommon file system '%s' to '%s'.",
+                                        fstype, where);
         }
 
         r = unit_name_from_path(where, ".mount", &unit);
@@ -278,6 +259,12 @@
                         return r;
         }
 
+        if (measure) {
+                r = generator_hook_up_pcrfs(arg_dest, where, post);
+                if (r < 0)
+                        return r;
+        }
+
         if (post) {
                 r = generator_add_symlink(arg_dest, post, "requires", unit);
                 if (r < 0)
@@ -303,7 +290,7 @@
                 return log_warning_errno(r, "Cannot check if \"%s\" is a mount point: %m", where);
 
         /* not a mountpoint but it contains files */
-        r = dir_is_empty(where);
+        r = dir_is_empty(where, /* ignore_hidden_or_backup= */ false);
         if (r < 0)
                 return log_warning_errno(r, "Cannot check if \"%s\" is empty: %m", where);
         if (r > 0)
@@ -333,17 +320,20 @@
                         p->fstype,
                         p->rw,
                         p->growfs,
+                        /* measure= */ STR_IN_SET(id, "root", "var"), /* by default measure rootfs and /var, since they contain the "identity" of the system */
                         NULL,
                         description,
                         SPECIAL_LOCAL_FS_TARGET);
 }
 
-static int add_swap(const char *path) {
-        _cleanup_free_ char *name = NULL, *unit = NULL;
+static int add_partition_swap(DissectedPartition *p) {
+        const char *what;
+        _cleanup_free_ char *name = NULL, *unit = NULL, *crypto_what = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         int r;
 
-        assert(path);
+        assert(p);
+        assert(p->node);
 
         /* Disable the swap auto logic if at least one swap is defined in /etc/fstab, see #6192. */
         r = fstab_has_fstype("swap");
@@ -354,9 +344,17 @@
                 return 0;
         }
 
-        log_debug("Adding swap: %s", path);
+        if (streq_ptr(p->fstype, "crypto_LUKS")) {
+                r = add_cryptsetup("swap", p->node, /* rw= */ true, /* require= */ true, /* measure= */ false, &crypto_what);
+                if (r < 0)
+                        return r;
+                what = crypto_what;
+        } else
+                what = p->node;
 
-        r = unit_name_from_path(path, ".swap", &name);
+        log_debug("Adding swap: %s", what);
+
+        r = unit_name_from_path(what, ".swap", &name);
         if (r < 0)
                 return log_error_errno(r, "Failed to generate unit name: %m");
 
@@ -374,7 +372,7 @@
                 "Description=Swap Partition\n"
                 "Documentation=man:systemd-gpt-auto-generator(8)\n");
 
-        r = generator_write_blockdev_dependency(f, path);
+        r = generator_write_blockdev_dependency(f, what);
         if (r < 0)
                 return r;
 
@@ -382,7 +380,7 @@
                 "\n"
                 "[Swap]\n"
                 "What=%s\n",
-                path);
+                what);
 
         r = fflush_and_check(f);
         if (r < 0)
@@ -402,25 +400,22 @@
                 const char *description,
                 usec_t timeout) {
 
-        _cleanup_free_ char *unit = NULL;
+        _cleanup_free_ char *unit = NULL, *p = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        const char *opt = "noauto", *p;
         int r;
 
         assert(id);
         assert(where);
         assert(description);
 
-        if (options)
-                opt = strjoina(options, ",", opt);
-
         r = add_mount(id,
                       what,
                       where,
                       fstype,
                       rw,
                       growfs,
-                      opt,
+                      /* measure= */ false,
+                      options,
                       description,
                       NULL);
         if (r < 0)
@@ -430,7 +425,10 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to generate unit name: %m");
 
-        p = prefix_roota(arg_dest, unit);
+        p = path_join(arg_dest, unit);
+        if (!p)
+                return log_oom();
+
         f = fopen(p, "wxe");
         if (!f)
                 return log_error_errno(errno, "Failed to create unit file %s: %m", unit);
@@ -457,17 +455,17 @@
 static const char *esp_or_xbootldr_options(const DissectedPartition *p) {
         assert(p);
 
-        /* if we probed vfat or have no idea about the file system then assume these file systems are vfat
-         * and thus understand "umask=0077". If we detected something else then don't specify any options and
-         * use kernel defaults. */
+        /* Discovered ESP and XBOOTLDR partition are always hardened with "noexec,nosuid,nodev".
+         * If we probed vfat or have no idea about the file system then assume these file systems are vfat
+         * and thus understand "umask=0077". */
 
         if (!p->fstype || streq(p->fstype, "vfat"))
-                return "umask=0077";
+                return "umask=0077,noexec,nosuid,nodev";
 
-        return NULL;
+        return "noexec,nosuid,nodev";
 }
 
-static int add_xbootldr(DissectedPartition *p) {
+static int add_partition_xbootldr(DissectedPartition *p) {
         int r;
 
         assert(p);
@@ -503,7 +501,7 @@
 }
 
 #if ENABLE_EFI
-static int add_esp(DissectedPartition *p, bool has_xbootldr) {
+static int add_partition_esp(DissectedPartition *p, bool has_xbootldr) {
         const char *esp_path = NULL, *id = NULL;
         int r;
 
@@ -577,12 +575,12 @@
                              120 * USEC_PER_SEC);
 }
 #else
-static int add_esp(DissectedPartition *p, bool has_xbootldr) {
+static int add_partition_esp(DissectedPartition *p, bool has_xbootldr) {
         return 0;
 }
 #endif
 
-static int add_root_rw(DissectedPartition *p) {
+static int add_partition_root_rw(DissectedPartition *p) {
         const char *path;
         int r;
 
@@ -608,7 +606,7 @@
         path = strjoina(arg_dest, "/systemd-remount-fs.service.d/50-remount-rw.conf");
 
         r = write_string_file(path,
-                              "# Automatically generated by systemd-gpt-generator\n\n"
+                              "# Automatically generated by systemd-gpt-auto-generator\n\n"
                               "[Service]\n"
                               "Environment=SYSTEMD_REMOUNT_ROOT_RW=1\n",
                               WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_NOFOLLOW|WRITE_STRING_FILE_MKDIR_0755);
@@ -620,11 +618,15 @@
 
 #if ENABLE_EFI
 static int add_root_cryptsetup(void) {
+#if HAVE_LIBCRYPTSETUP
 
         /* If a device /dev/gpt-auto-root-luks appears, then make it pull in systemd-cryptsetup-root.service, which
          * sets it up, and causes /dev/gpt-auto-root to appear which is all we are looking for. */
 
-        return add_cryptsetup("root", "/dev/gpt-auto-root-luks", true, false, NULL);
+        return add_cryptsetup("root", "/dev/gpt-auto-root-luks", /* rw= */ true, /* require= */ false, /* measure= */ true, NULL);
+#else
+        return 0;
+#endif
 }
 #endif
 
@@ -645,9 +647,8 @@
         } else if (r < 0)
                 return log_error_errno(r, "Failed to read ESP partition UUID: %m");
 
-        /* OK, we have an ESP partition, this is fantastic, so let's
-         * wait for a root device to show up. A udev rule will create
-         * the link for us under the right name. */
+        /* OK, we have an ESP partition, this is fantastic, so let's wait for a root device to show up. A
+         * udev rule will create the link for us under the right name. */
 
         if (in_initrd()) {
                 r = generator_write_initrd_root_device_deps(arg_dest, "/dev/gpt-auto-root");
@@ -666,10 +667,11 @@
                         "root",
                         "/dev/gpt-auto-root",
                         in_initrd() ? "/sysroot" : "/",
-                        NULL,
+                        arg_root_fstype,
                         /* rw= */ arg_root_rw > 0,
                         /* growfs= */ false,
-                        NULL,
+                        /* measure= */ true,
+                        arg_root_options,
                         "Root Partition",
                         in_initrd() ? SPECIAL_INITRD_ROOT_FS_TARGET : SPECIAL_LOCAL_FS_TARGET);
 #else
@@ -678,44 +680,61 @@
 }
 
 static int enumerate_partitions(dev_t devnum) {
-        _cleanup_close_ int fd = -1;
         _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
+        _cleanup_(loop_device_unrefp) LoopDevice *loop = NULL;
+        _cleanup_free_ char *devname = NULL;
         int r, k;
 
-        r = open_parent_block_device(devnum, &fd);
-        if (r <= 0)
-                return r;
+        r = block_get_whole_disk(devnum, &devnum);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to get whole block device for " DEVNUM_FORMAT_STR ": %m",
+                                       DEVNUM_FORMAT_VAL(devnum));
 
-        r = dissect_image(
-                        fd,
+        r = devname_from_devnum(S_IFBLK, devnum, &devname);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to get device node of " DEVNUM_FORMAT_STR ": %m",
+                                       DEVNUM_FORMAT_VAL(devnum));
+
+        /* Let's take a LOCK_SH lock on the block device, in case udevd is already running. If we don't take
+         * the lock, udevd might end up issuing BLKRRPART in the middle, and we don't want that, since that
+         * might remove all partitions while we are operating on them. */
+        r = loop_device_open_from_path(devname, O_RDONLY, LOCK_SH, &loop);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to open %s: %m", devname);
+
+        r = dissect_loop_device(
+                        loop,
                         NULL, NULL,
-                        UINT64_MAX,
-                        USEC_INFINITY,
                         DISSECT_IMAGE_GPT_ONLY|
-                        DISSECT_IMAGE_NO_UDEV|
-                        DISSECT_IMAGE_USR_NO_ROOT,
+                        DISSECT_IMAGE_USR_NO_ROOT|
+                        DISSECT_IMAGE_DISKSEQ_DEVNODE,
+                        /* NB! Unlike most other places where we dissect block devices we do not use
+                         * DISSECT_IMAGE_ADD_PARTITION_DEVICES here: we want that the kernel finds the
+                         * devices, and udev probes them before we mount them via .mount units much later
+                         * on. And thus we also don't set DISSECT_IMAGE_PIN_PARTITION_DEVICES here, because
+                         * we don't actually mount anything immediately. */
                         &m);
         if (r == -ENOPKG) {
-                log_debug_errno(r, "No suitable partition table found, ignoring.");
+                log_debug_errno(r, "No suitable partition table found on block device %s, ignoring.", devname);
                 return 0;
         }
         if (r < 0)
-                return log_error_errno(r, "Failed to dissect: %m");
+                return log_error_errno(r, "Failed to dissect partition table of block device %s: %m", devname);
 
         if (m->partitions[PARTITION_SWAP].found) {
-                k = add_swap(m->partitions[PARTITION_SWAP].node);
+                k = add_partition_swap(m->partitions + PARTITION_SWAP);
                 if (k < 0)
                         r = k;
         }
 
         if (m->partitions[PARTITION_XBOOTLDR].found) {
-                k = add_xbootldr(m->partitions + PARTITION_XBOOTLDR);
+                k = add_partition_xbootldr(m->partitions + PARTITION_XBOOTLDR);
                 if (k < 0)
                         r = k;
         }
 
         if (m->partitions[PARTITION_ESP].found) {
-                k = add_esp(m->partitions + PARTITION_ESP, m->partitions[PARTITION_XBOOTLDR].found);
+                k = add_partition_esp(m->partitions + PARTITION_ESP, m->partitions[PARTITION_XBOOTLDR].found);
                 if (k < 0)
                         r = k;
         }
@@ -745,7 +764,7 @@
         }
 
         if (m->partitions[PARTITION_ROOT].found) {
-                k = add_root_rw(m->partitions + PARTITION_ROOT);
+                k = add_partition_root_rw(m->partitions + PARTITION_ROOT);
                 if (k < 0)
                         r = k;
         }
@@ -754,41 +773,40 @@
 }
 
 static int add_mounts(void) {
-        dev_t devno;
+        _cleanup_free_ char *p = NULL;
         int r;
+        dev_t devno;
 
-        r = get_block_device_harder("/", &devno);
-        if (r == -EUCLEAN)
-                return btrfs_log_dev_root(LOG_ERR, r, "root file system");
-        if (r < 0)
-                return log_error_errno(r, "Failed to determine block device of root file system: %m");
-        if (r == 0) { /* Not backed by block device */
-                r = get_block_device_harder("/usr", &devno);
+        /* If the root mount has been replaced by some form of volatile file system (overlayfs), the
+         * original root block device node is symlinked in /run/systemd/volatile-root. Let's read that
+         * here. */
+        r = readlink_malloc("/run/systemd/volatile-root", &p);
+        if (r == -ENOENT) { /* volatile-root not found */
+                r = get_block_device_harder("/", &devno);
                 if (r == -EUCLEAN)
-                        return btrfs_log_dev_root(LOG_ERR, r, "/usr");
+                        return btrfs_log_dev_root(LOG_ERR, r, "root file system");
                 if (r < 0)
-                        return log_error_errno(r, "Failed to determine block device of /usr file system: %m");
-                if (r == 0) {
-                        _cleanup_free_ char *p = NULL;
-                        mode_t m;
-
-                        /* If the root mount has been replaced by some form of volatile file system (overlayfs), the
-                         * original root block device node is symlinked in /run/systemd/volatile-root. Let's read that
-                         * here. */
-                        r = readlink_malloc("/run/systemd/volatile-root", &p);
-                        if (r == -ENOENT) {
-                                log_debug("Neither root nor /usr file system are on a (single) block device.");
+                        return log_error_errno(r, "Failed to determine block device of root file system: %m");
+                if (r == 0) { /* Not backed by a single block device. (Could be NFS or so, or could be multi-device RAID or so) */
+                        r = get_block_device_harder("/usr", &devno);
+                        if (r == -EUCLEAN)
+                                return btrfs_log_dev_root(LOG_ERR, r, "/usr");
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to determine block device of /usr/ file system: %m");
+                        if (r == 0) { /* /usr/ not backed by single block device, either. */
+                                log_debug("Neither root nor /usr/ file system are on a (single) block device.");
                                 return 0;
                         }
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to read symlink /run/systemd/volatile-root: %m");
-
-                        r = device_path_parse_major_minor(p, &m, &devno);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to parse major/minor device node: %m");
-                        if (!S_ISBLK(m))
-                                return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK), "Volatile root device is of wrong type.");
                 }
+        } else if (r < 0)
+                return log_error_errno(r, "Failed to read symlink /run/systemd/volatile-root: %m");
+        else {
+                mode_t m;
+                r = device_path_parse_major_minor(p, &m, &devno);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse major/minor device node: %m");
+                if (!S_ISBLK(m))
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK), "Volatile root device is of wrong type.");
         }
 
         return enumerate_partitions(devno);
@@ -830,6 +848,21 @@
 
                 arg_root_enabled = false;
 
+        } else if (streq(key, "rootfstype")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                return free_and_strdup_warn(&arg_root_fstype, value);
+
+        } else if (streq(key, "rootflags")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                if (!strextend_with_separator(&arg_root_options, ",", value))
+                        return log_oom();
+
         } else if (proc_cmdline_key_streq(key, "rw") && !value)
                 arg_root_rw = true;
         else if (proc_cmdline_key_streq(key, "ro") && !value)
diff --git a/src/hibernate-resume/hibernate-resume-generator.c b/src/hibernate-resume/hibernate-resume-generator.c
index 5e986db..be52c21 100644
--- a/src/hibernate-resume/hibernate-resume-generator.c
+++ b/src/hibernate-resume/hibernate-resume-generator.c
@@ -8,15 +8,16 @@
 #include "dropin.h"
 #include "fstab-util.h"
 #include "generator.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "main-func.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "proc-cmdline.h"
 #include "special.h"
 #include "string-util.h"
 #include "unit-name.h"
 
-static const char *arg_dest = "/tmp";
+static const char *arg_dest = NULL;
 static char *arg_resume_device = NULL;
 static char *arg_resume_options = NULL;
 static char *arg_root_options = NULL;
@@ -84,7 +85,7 @@
         if (!lnk)
                 return log_oom();
 
-        mkdir_parents_label(lnk, 0755);
+        (void) mkdir_parents_label(lnk, 0755);
         if (symlink(SYSTEM_DATA_UNIT_DIR "/systemd-hibernate-resume@.service", lnk) < 0)
                 return log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
 
@@ -109,19 +110,12 @@
         return 0;
 }
 
-static int run(int argc, char *argv[]) {
+static int run(const char *dest, const char *dest_early, const char *dest_late) {
         int r = 0;
 
-        log_setup_generator();
+        arg_dest = ASSERT_PTR(dest);
 
-        if (argc > 1 && argc != 4)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "This program takes three or no arguments.");
-
-        if (argc > 1)
-                arg_dest = argv[1];
-
-        /* Don't even consider resuming outside of initramfs. */
+        /* Don't even consider resuming outside of initrd. */
         if (!in_initrd()) {
                 log_debug("Not running in an initrd, quitting.");
                 return 0;
@@ -139,4 +133,4 @@
         return process_resume();
 }
 
-DEFINE_MAIN_FUNCTION(run);
+DEFINE_MAIN_GENERATOR_FUNCTION(run);
diff --git a/src/hibernate-resume/hibernate-resume.c b/src/hibernate-resume/hibernate-resume.c
index 58e35e4..9a9df5d 100644
--- a/src/hibernate-resume/hibernate-resume.c
+++ b/src/hibernate-resume/hibernate-resume.c
@@ -5,14 +5,14 @@
 #include <sys/stat.h>
 
 #include "alloc-util.h"
+#include "devnum-util.h"
 #include "fileio.h"
+#include "initrd-util.h"
 #include "log.h"
-#include "util.h"
 
 int main(int argc, char *argv[]) {
         struct stat st;
         const char *device;
-        _cleanup_free_ char *major_minor = NULL;
         int r;
 
         if (argc != 2) {
@@ -40,14 +40,9 @@
                 return EXIT_FAILURE;
         }
 
-        if (asprintf(&major_minor, "%d:%d", major(st.st_rdev), minor(st.st_rdev)) < 0) {
-                log_oom();
-                return EXIT_FAILURE;
-        }
-
-        r = write_string_file("/sys/power/resume", major_minor, WRITE_STRING_FILE_DISABLE_BUFFER);
+        r = write_string_file("/sys/power/resume", FORMAT_DEVNUM(st.st_rdev), WRITE_STRING_FILE_DISABLE_BUFFER);
         if (r < 0) {
-                log_error_errno(r, "Failed to write '%s' to /sys/power/resume: %m", major_minor);
+                log_error_errno(r, "Failed to write '" DEVNUM_FORMAT_STR "' to /sys/power/resume: %m", DEVNUM_FORMAT_VAL(st.st_rdev));
                 return EXIT_FAILURE;
         }
 
@@ -58,6 +53,6 @@
          * no hibernation image).
          */
 
-        log_info("Could not resume from '%s' (%s).", device, major_minor);
+        log_info("Could not resume from '%s' (" DEVNUM_FORMAT_STR ").", device, DEVNUM_FORMAT_VAL(st.st_rdev));
         return EXIT_SUCCESS;
 }
diff --git a/src/home/home-util.c b/src/home/home-util.c
index cd971b7..c777d7b 100644
--- a/src/home/home-util.c
+++ b/src/home/home-util.c
@@ -133,3 +133,7 @@
 
         return sd_bus_message_append(m, "s", formatted);
 }
+
+const char *home_record_dir(void) {
+        return secure_getenv("SYSTEMD_HOME_RECORD_DIR") ?: "/var/lib/systemd/home/";
+}
diff --git a/src/home/home-util.h b/src/home/home-util.h
index fba1c7d..36b301d 100644
--- a/src/home/home-util.h
+++ b/src/home/home-util.h
@@ -8,6 +8,18 @@
 #include "time-util.h"
 #include "user-record.h"
 
+/* Put some limits on disk sizes: not less than 5M, not more than 5T */
+#define USER_DISK_SIZE_MIN (UINT64_C(5)*1024*1024)
+#define USER_DISK_SIZE_MAX (UINT64_C(5)*1024*1024*1024*1024)
+
+/* The default disk size to use when nothing else is specified, relative to free disk space. We calculate
+ * this from the default rebalancing weights, so that what we create initially doesn't immediately require
+ * rebalancing. */
+#define USER_DISK_SIZE_DEFAULT_PERCENT ((unsigned) ((100 * REBALANCE_WEIGHT_DEFAULT) / (REBALANCE_WEIGHT_DEFAULT + REBALANCE_WEIGHT_BACKING)))
+
+/* This should be 83% right now, i.e. 100 of (100 + 20). Let's protect us against accidental changes. */
+assert_cc(USER_DISK_SIZE_DEFAULT_PERCENT == 83U);
+
 bool suitable_user_name(const char *name);
 int suitable_realm(const char *realm);
 int suitable_image_path(const char *path);
@@ -21,3 +33,5 @@
 /* Many of our operations might be slow due to crypto, fsck, recursive chown() and so on. For these
  * operations permit a *very* long timeout */
 #define HOME_SLOW_BUS_CALL_TIMEOUT_USEC (2*USEC_PER_MINUTE)
+
+const char *home_record_dir(void);
diff --git a/src/home/homectl-fido2.c b/src/home/homectl-fido2.c
index d0457d8..3cbdf91 100644
--- a/src/home/homectl-fido2.c
+++ b/src/home/homectl-fido2.c
@@ -26,14 +26,15 @@
         _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
         _cleanup_strv_free_ char **l = NULL;
         _cleanup_free_ char *escaped = NULL;
+        ssize_t escaped_size;
         int r;
 
         assert(v);
         assert(cid);
 
-        r = base64mem(cid, cid_size, &escaped);
-        if (r < 0)
-                return log_error_errno(r, "Failed to base64 encode FIDO2 credential ID: %m");
+        escaped_size = base64mem(cid, cid_size, &escaped);
+        if (escaped_size < 0)
+                return log_error_errno(escaped_size, "Failed to base64 encode FIDO2 credential ID: %m");
 
         w = json_variant_ref(json_variant_by_key(*v, "fido2HmacCredential"));
         if (w) {
@@ -73,13 +74,14 @@
 
         _cleanup_(json_variant_unrefp) JsonVariant *l = NULL, *w = NULL, *e = NULL;
         _cleanup_(erase_and_freep) char *base64_encoded = NULL, *hashed = NULL;
+        ssize_t base64_encoded_size;
         int r;
 
         /* Before using UNIX hashing on the supplied key we base64 encode it, since crypt_r() and friends
          * expect a NUL terminated string, and we use a binary key */
-        r = base64mem(secret, secret_size, &base64_encoded);
-        if (r < 0)
-                return log_error_errno(r, "Failed to base64 encode secret key: %m");
+        base64_encoded_size = base64mem(secret, secret_size, &base64_encoded);
+        if (base64_encoded_size < 0)
+                return log_error_errno(base64_encoded_size, "Failed to base64 encode secret key: %m");
 
         r = hash_password(base64_encoded, &hashed);
         if (r < 0)
@@ -118,7 +120,8 @@
 int identity_add_fido2_parameters(
                 JsonVariant **v,
                 const char *device,
-                Fido2EnrollFlags lock_with) {
+                Fido2EnrollFlags lock_with,
+                int cred_alg) {
 
 #if HAVE_LIBFIDO2
         JsonVariant *un, *realm, *rn;
@@ -165,6 +168,7 @@
                         /* user_icon_name= */ NULL,
                         /* askpw_icon_name= */ "user-home",
                         lock_with,
+                        cred_alg,
                         &cid, &cid_size,
                         &salt, &salt_size,
                         &secret, &secret_size,
diff --git a/src/home/homectl-fido2.h b/src/home/homectl-fido2.h
index 5087069..558c674 100644
--- a/src/home/homectl-fido2.h
+++ b/src/home/homectl-fido2.h
@@ -4,4 +4,4 @@
 #include "json.h"
 #include "libfido2-util.h"
 
-int identity_add_fido2_parameters(JsonVariant **v, const char *device, Fido2EnrollFlags lock_with);
+int identity_add_fido2_parameters(JsonVariant **v, const char *device, Fido2EnrollFlags lock_with, int cred_alg);
diff --git a/src/home/homectl-pkcs11.c b/src/home/homectl-pkcs11.c
index 52cee9a..dc6ecf1 100644
--- a/src/home/homectl-pkcs11.c
+++ b/src/home/homectl-pkcs11.c
@@ -19,6 +19,7 @@
 
         _cleanup_(json_variant_unrefp) JsonVariant *l = NULL, *w = NULL, *e = NULL;
         _cleanup_(erase_and_freep) char *base64_encoded = NULL, *hashed = NULL;
+        ssize_t base64_encoded_size;
         int r;
 
         assert(v);
@@ -30,9 +31,9 @@
 
         /* Before using UNIX hashing on the supplied key we base64 encode it, since crypt_r() and friends
          * expect a NUL terminated string, and we use a binary key */
-        r = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
-        if (r < 0)
-                return log_error_errno(r, "Failed to base64 encode secret key: %m");
+        base64_encoded_size = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+        if (base64_encoded_size < 0)
+                return log_error_errno(base64_encoded_size, "Failed to base64 encode secret key: %m");
 
         r = hash_password(base64_encoded, &hashed);
         if (r < 0)
@@ -114,7 +115,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to convert PIN array: %m");
 
-        if (strv_find(pins, pin))
+        if (strv_contains(pins, pin))
                 return 0;
 
         r = strv_extend(&pins, pin);
@@ -184,7 +185,7 @@
         if (!decrypted_key)
                 return log_oom();
 
-        r = genuine_random_bytes(decrypted_key, decrypted_key_size, RANDOM_BLOCK);
+        r = crypto_random_bytes(decrypted_key, decrypted_key_size);
         if (r < 0)
                 return log_error_errno(r, "Failed to generate random key: %m");
 
diff --git a/src/home/homectl-recovery-key.c b/src/home/homectl-recovery-key.c
index f1a180b..ff1ab68 100644
--- a/src/home/homectl-recovery-key.c
+++ b/src/home/homectl-recovery-key.c
@@ -1,9 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "errno-util.h"
+#include "glyph-util.h"
 #include "homectl-recovery-key.h"
 #include "libcrypt-util.h"
-#include "locale-util.h"
 #include "memory-util.h"
 #include "qrcode-util.h"
 #include "random-util.h"
@@ -19,7 +19,7 @@
         assert(hashed);
 
         r = json_build(&e, JSON_BUILD_OBJECT(
-                                       JSON_BUILD_PAIR("type", JSON_BUILD_STRING("modhex64")),
+                                       JSON_BUILD_PAIR("type", JSON_BUILD_CONST_STRING("modhex64")),
                                        JSON_BUILD_PAIR("hashedPassword", JSON_BUILD_STRING(hashed))));
         if (r < 0)
                 return log_error_errno(r, "Failed to build recover key JSON object: %m");
diff --git a/src/home/homectl.c b/src/home/homectl.c
index 6273cb6..cd24b5e 100644
--- a/src/home/homectl.c
+++ b/src/home/homectl.c
@@ -5,6 +5,7 @@
 #include "sd-bus.h"
 
 #include "ask-password-api.h"
+#include "build.h"
 #include "bus-common-errors.h"
 #include "bus-error.h"
 #include "bus-locator.h"
@@ -14,6 +15,8 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-table.h"
+#include "fs-util.h"
+#include "glyph-util.h"
 #include "home-util.h"
 #include "homectl-fido2.h"
 #include "homectl-pkcs11.h"
@@ -34,6 +37,7 @@
 #include "rlimit-util.h"
 #include "spawn-polkit-agent.h"
 #include "terminal-util.h"
+#include "uid-alloc-range.h"
 #include "user-record-pwquality.h"
 #include "user-record-show.h"
 #include "user-record-util.h"
@@ -58,6 +62,11 @@
 static char **arg_pkcs11_token_uri = NULL;
 static char **arg_fido2_device = NULL;
 static Fido2EnrollFlags arg_fido2_lock_with = FIDO2ENROLL_PIN | FIDO2ENROLL_UP;
+#if HAVE_LIBFIDO2
+static int arg_fido2_cred_alg = COSE_ES256;
+#else
+static int arg_fido2_cred_alg = 0;
+#endif
 static bool arg_recovery_key = false;
 static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 static bool arg_and_resize = false;
@@ -102,7 +111,7 @@
 
         r = bus_connect_transport(arg_transport, arg_host, false, bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         (void) sd_bus_set_allow_interactive_authorization(*bus, arg_ask_password);
 
@@ -198,26 +207,25 @@
                 AskPasswordFlags flags) {
 
         _cleanup_(strv_free_erasep) char **password = NULL;
+        _cleanup_(erase_and_freep) char *envpw = NULL;
         _cleanup_free_ char *question = NULL;
-        char *e;
         int r;
 
         assert(user_name);
         assert(hr);
 
-        e = getenv("PASSWORD");
-        if (e) {
+        r = getenv_steal_erase("PASSWORD", &envpw);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire password from environment: %m");
+        if (r > 0) {
                 /* People really shouldn't use environment variables for passing passwords. We support this
                  * only for testing purposes, and do not document the behaviour, so that people won't
                  * actually use this outside of testing. */
 
-                r = user_record_set_password(hr, STRV_MAKE(e), true);
+                r = user_record_set_password(hr, STRV_MAKE(envpw), true);
                 if (r < 0)
                         return log_error_errno(r, "Failed to store password: %m");
 
-                string_erase(e);
-                assert_se(unsetenv("PASSWORD") == 0);
-
                 return 1;
         }
 
@@ -254,28 +262,85 @@
         return 1;
 }
 
+static int acquire_recovery_key(
+                const char *user_name,
+                UserRecord *hr,
+                AskPasswordFlags flags) {
+
+        _cleanup_(strv_free_erasep) char **recovery_key = NULL;
+        _cleanup_(erase_and_freep) char *envpw = NULL;
+        _cleanup_free_ char *question = NULL;
+        int r;
+
+        assert(user_name);
+        assert(hr);
+
+        r = getenv_steal_erase("PASSWORD", &envpw);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire password from environment: %m");
+        if (r > 0) {
+                /* People really shouldn't use environment variables for passing secrets. We support this
+                 * only for testing purposes, and do not document the behaviour, so that people won't
+                 * actually use this outside of testing. */
+
+                r = user_record_set_password(hr, STRV_MAKE(envpw), true); /* recovery keys are stored in the record exactly like regular passwords! */
+                if (r < 0)
+                        return log_error_errno(r, "Failed to store recovery key: %m");
+
+                return 1;
+        }
+
+        /* If this is not our own user, then don't use the password cache */
+        if (is_this_me(user_name) <= 0)
+                SET_FLAG(flags, ASK_PASSWORD_ACCEPT_CACHED|ASK_PASSWORD_PUSH_CACHE, false);
+
+        if (asprintf(&question, "Please enter recovery key for user %s:", user_name) < 0)
+                return log_oom();
+
+        r = ask_password_auto(question,
+                              /* icon= */ "user-home",
+                              NULL,
+                              /* key_name= */ "home-recovery-key",
+                              /* credential_name= */ "home.recovery-key",
+                              USEC_INFINITY,
+                              flags,
+                              &recovery_key);
+        if (r == -EUNATCH) { /* EUNATCH is returned if no recovery key was found and asking interactively was
+                              * disabled via the flags. Not an error for us. */
+                log_debug_errno(r, "No recovery keys acquired.");
+                return 0;
+        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire recovery keys: %m");
+
+        r = user_record_set_password(hr, recovery_key, true);
+        if (r < 0)
+                return log_error_errno(r, "Failed to store recovery keys: %m");
+
+        return 1;
+}
+
 static int acquire_token_pin(
                 const char *user_name,
                 UserRecord *hr,
                 AskPasswordFlags flags) {
 
         _cleanup_(strv_free_erasep) char **pin = NULL;
+        _cleanup_(erase_and_freep) char *envpin = NULL;
         _cleanup_free_ char *question = NULL;
-        char *e;
         int r;
 
         assert(user_name);
         assert(hr);
 
-        e = getenv("PIN");
-        if (e) {
-                r = user_record_set_token_pin(hr, STRV_MAKE(e), false);
+        r = getenv_steal_erase("PIN", &envpin);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
+        if (r > 0) {
+                r = user_record_set_token_pin(hr, STRV_MAKE(envpin), false);
                 if (r < 0)
                         return log_error_errno(r, "Failed to store token PIN: %m");
 
-                string_erase(e);
-                assert_se(unsetenv("PIN") == 0);
-
                 return 1;
         }
 
@@ -327,7 +392,7 @@
 
         else if (sd_bus_error_has_name(error, BUS_ERROR_AUTHENTICATION_LIMIT_HIT))
                 return log_error_errno(SYNTHETIC_ERRNO(ETOOMANYREFS),
-                                       "Too frequent unsuccessful login attempts for user %s, try again later.", user_name);
+                                       "Too frequent login attempts for user %s, try again later.", user_name);
 
         else if (sd_bus_error_has_name(error, BUS_ERROR_BAD_PASSWORD)) {
 
@@ -344,6 +409,20 @@
                 if (r < 0)
                         return r;
 
+        } else if (sd_bus_error_has_name(error, BUS_ERROR_BAD_RECOVERY_KEY)) {
+
+                if (!strv_isempty(hr->password))
+                        log_notice("Recovery key incorrect or not sufficient, please try again.");
+
+                /* Don't consume cache entries or credentials here, we already tried that unsuccessfully. But
+                 * let's push what we acquire here into the cache */
+                r = acquire_recovery_key(
+                                user_name,
+                                hr,
+                                ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_NO_CREDENTIAL);
+                if (r < 0)
+                        return r;
+
         } else if (sd_bus_error_has_name(error, BUS_ERROR_BAD_PASSWORD_AND_NO_TOKEN)) {
 
                 if (strv_isempty(hr->password))
@@ -470,6 +549,13 @@
         if (r < 0)
                 return r;
 
+        r = acquire_recovery_key(
+                        user_name,
+                        secret,
+                        ASK_PASSWORD_ACCEPT_CACHED | ASK_PASSWORD_NO_TTY | ASK_PASSWORD_NO_AGENT);
+        if (r < 0)
+                return r;
+
         *ret = TAKE_PTR(secret);
         return 0;
 }
@@ -477,7 +563,6 @@
 static int activate_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -526,7 +611,6 @@
 static int deactivate_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -613,9 +697,9 @@
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(strv_freep) char **mangled_list = NULL;
         int r, ret = 0;
-        char **items, **i;
+        char **items;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -697,7 +781,7 @@
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(strv_freep) char **mangled_list = NULL;
         int r, ret = 0;
-        char **i, **items;
+        char **items;
 
         items = mangle_user_list(strv_skip(argv, 1), &mangled_list);
         if (!items)
@@ -760,7 +844,7 @@
 
         c = json_variant_by_key(*v, "lastChangeUSec");
         if (c) {
-                uintmax_t u;
+                uint64_t u;
 
                 if (!override)
                         goto update_password;
@@ -783,7 +867,7 @@
 
         c = json_variant_by_key(*v, "lastPasswordChangeUSec");
         if (c) {
-                uintmax_t u;
+                uint64_t u;
 
                 if (!override)
                         return 0;
@@ -821,14 +905,13 @@
 
         if (arg_identity_extra_this_machine || !strv_isempty(arg_identity_filter)) {
                 _cleanup_(json_variant_unrefp) JsonVariant *per_machine = NULL, *mmid = NULL;
-                char mids[SD_ID128_STRING_MAX];
                 sd_id128_t mid;
 
                 r = sd_id128_get_machine(&mid);
                 if (r < 0)
                         return log_error_errno(r, "Failed to acquire machine ID: %m");
 
-                r = json_variant_new_string(&mmid, sd_id128_to_string(mid, mids));
+                r = json_variant_new_string(&mmid, SD_ID128_TO_STRING(mid));
                 if (r < 0)
                         return log_error_errno(r, "Failed to allocate matchMachineId object: %m");
 
@@ -1008,7 +1091,6 @@
 static int acquire_new_home_record(UserRecord **ret) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        char **i;
         int r;
 
         assert(ret);
@@ -1038,7 +1120,7 @@
         }
 
         STRV_FOREACH(i, arg_fido2_device) {
-                r = identity_add_fido2_parameters(&v, *i, arg_fido2_lock_with);
+                r = identity_add_fido2_parameters(&v, *i, arg_fido2_lock_with, arg_fido2_cred_alg);
                 if (r < 0)
                         return r;
         }
@@ -1074,34 +1156,25 @@
                 bool suggest,
                 char **ret) {
 
+        _cleanup_(erase_and_freep) char *envpw = NULL;
         unsigned i = 5;
-        char *e;
         int r;
 
         assert(user_name);
         assert(hr);
 
-        e = getenv("NEWPASSWORD");
-        if (e) {
-                _cleanup_(erase_and_freep) char *copy = NULL;
-
+        r = getenv_steal_erase("NEWPASSWORD", &envpw);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire password from environment: %m");
+        if (r > 0) {
                 /* As above, this is not for use, just for testing */
 
-                if (ret) {
-                        copy = strdup(e);
-                        if (!copy)
-                                return log_oom();
-                }
-
-                r = user_record_set_password(hr, STRV_MAKE(e), /* prepend = */ true);
+                r = user_record_set_password(hr, STRV_MAKE(envpw), /* prepend = */ true);
                 if (r < 0)
                         return log_error_errno(r, "Failed to store password: %m");
 
-                string_erase(e);
-                assert_se(unsetenv("NEWPASSWORD") == 0);
-
                 if (ret)
-                        *ret = TAKE_PTR(copy);
+                        *ret = TAKE_PTR(envpw);
 
                 return 0;
         }
@@ -1300,7 +1373,6 @@
 static int remove_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -1338,7 +1410,6 @@
 
         _cleanup_(json_variant_unrefp) JsonVariant *json = NULL;
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        char **i;
         int r;
 
         assert(ret);
@@ -1408,7 +1479,7 @@
         }
 
         STRV_FOREACH(i, arg_fido2_device) {
-                r = identity_add_fido2_parameters(&json, *i, arg_fido2_lock_with);
+                r = identity_add_fido2_parameters(&json, *i, arg_fido2_lock_with, arg_fido2_cred_alg);
                 if (r < 0)
                         return r;
         }
@@ -1460,7 +1531,7 @@
 
 static int update_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
+        _cleanup_(user_record_unrefp) UserRecord *hr = NULL, *secret = NULL;
         _cleanup_free_ char *buffer = NULL;
         const char *username;
         int r;
@@ -1486,6 +1557,15 @@
         if (r < 0)
                 return r;
 
+        /* Add in all secrets we can acquire cheaply */
+        r = acquire_passed_secrets(username, &secret);
+        if (r < 0)
+                return r;
+
+        r = user_record_merge_secret(hr, secret);
+        if (r < 0)
+                return r;
+
         /* If we do multiple operations, let's output things more verbosely, since otherwise the repeated
          * authentication might be confusing. */
 
@@ -1609,9 +1689,13 @@
         int r;
 
         if (arg_pkcs11_token_uri)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "To change the PKCS#11 security token use 'homectl update --pkcs11-token-uri=…'.");
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "To change the PKCS#11 security token use 'homectl update --pkcs11-token-uri=%s'.",
+                                       special_glyph(SPECIAL_GLYPH_ELLIPSIS));
         if (arg_fido2_device)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "To change the FIDO2 security token use 'homectl update --fido2-device=…'.");
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "To change the FIDO2 security token use 'homectl update --fido2-device=%s'.",
+                                       special_glyph(SPECIAL_GLYPH_ELLIPSIS));
         if (identity_properties_specified())
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "The 'passwd' verb does not permit changing other record properties at the same time.");
 
@@ -1631,9 +1715,9 @@
 
         (void) polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
-        old_secret = user_record_new();
-        if (!old_secret)
-                return log_oom();
+        r = acquire_passed_secrets(username, &old_secret);
+        if (r < 0)
+                return r;
 
         new_secret = user_record_new();
         if (!new_secret)
@@ -1688,6 +1772,32 @@
         return 0;
 }
 
+static int parse_disk_size(const char *t, uint64_t *ret) {
+        int r;
+
+        assert(t);
+        assert(ret);
+
+        if (streq(t, "min"))
+                *ret = 0;
+        else if (streq(t, "max"))
+                *ret = UINT64_MAX-1;  /* Largest size that isn't UINT64_MAX special marker */
+        else {
+                uint64_t ds;
+
+                r = parse_size(t, 1024, &ds);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse disk size parameter: %s", t);
+
+                if (ds >= UINT64_MAX) /* UINT64_MAX has special meaning for us ("dont change"), refuse */
+                        return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Disk size out of range: %s", t);
+
+                *ret = ds;
+        }
+
+        return 0;
+}
+
 static int resize_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
@@ -1706,9 +1816,9 @@
                                                "Relative disk size specification currently not supported when resizing.");
 
         if (argc > 2) {
-                r = parse_size(argv[2], 1024, &ds);
+                r = parse_disk_size(argv[2], &ds);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to parse disk size parameter: %s", argv[2]);
+                        return r;
         }
 
         if (arg_disk_size != UINT64_MAX) {
@@ -1753,7 +1863,6 @@
 static int lock_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -1785,7 +1894,6 @@
 static int unlock_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -1836,7 +1944,7 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
-        _cleanup_close_ int acquired_fd = -1;
+        _cleanup_close_ int acquired_fd = -EBADF;
         _cleanup_strv_free_ char **cmdline  = NULL;
         const char *home;
         int r, ret;
@@ -1993,6 +2101,32 @@
         return 0;
 }
 
+static int rebalance(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        int r;
+
+        r = acquire_bus(&bus);
+        if (r < 0)
+                return r;
+
+        r = bus_message_new_method_call(bus, &m, bus_mgr, "Rebalance");
+        if (r < 0)
+                return bus_log_create_error(r);
+
+        r = sd_bus_call(bus, m, HOME_SLOW_BUS_CALL_TIMEOUT_USEC, &error, NULL);
+        if (r < 0) {
+                if (sd_bus_error_has_name(&error, BUS_ERROR_REBALANCE_NOT_NEEDED))
+                        log_info("No homes needed rebalancing.");
+                else
+                        return log_error_errno(r, "Failed to rebalance: %s", bus_error_message(&error, r));
+        } else
+                log_info("Completed rebalancing.");
+
+        return 0;
+}
+
 static int drop_from_identity(const char *field) {
         int r;
 
@@ -2024,7 +2158,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("homectl", "1", &link);
         if (r < 0)
@@ -2033,143 +2167,153 @@
         printf("%1$s [OPTIONS...] COMMAND ...\n\n"
                "%2$sCreate, manipulate or inspect home directories.%3$s\n"
                "\n%4$sCommands:%5$s\n"
-               "  list                        List home areas\n"
-               "  activate USER…              Activate a home area\n"
-               "  deactivate USER…            Deactivate a home area\n"
-               "  inspect USER…               Inspect a home area\n"
-               "  authenticate USER…          Authenticate a home area\n"
-               "  create USER                 Create a home area\n"
-               "  remove USER…                Remove a home area\n"
-               "  update USER                 Update a home area\n"
-               "  passwd USER                 Change password of a home area\n"
-               "  resize USER SIZE            Resize a home area\n"
-               "  lock USER…                  Temporarily lock an active home area\n"
-               "  unlock USER…                Unlock a temporarily locked home area\n"
-               "  lock-all                    Lock all suitable home areas\n"
-               "  deactivate-all              Deactivate all active home areas\n"
-               "  with USER [COMMAND…]        Run shell or command with access to a home area\n"
+               "  list                         List home areas\n"
+               "  activate USER…               Activate a home area\n"
+               "  deactivate USER…             Deactivate a home area\n"
+               "  inspect USER…                Inspect a home area\n"
+               "  authenticate USER…           Authenticate a home area\n"
+               "  create USER                  Create a home area\n"
+               "  remove USER…                 Remove a home area\n"
+               "  update USER                  Update a home area\n"
+               "  passwd USER                  Change password of a home area\n"
+               "  resize USER SIZE             Resize a home area\n"
+               "  lock USER…                   Temporarily lock an active home area\n"
+               "  unlock USER…                 Unlock a temporarily locked home area\n"
+               "  lock-all                     Lock all suitable home areas\n"
+               "  deactivate-all               Deactivate all active home areas\n"
+               "  rebalance                    Rebalance free space between home areas\n"
+               "  with USER [COMMAND…]         Run shell or command with access to a home area\n"
                "\n%4$sOptions:%5$s\n"
-               "  -h --help                   Show this help\n"
-               "     --version                Show package version\n"
-               "     --no-pager               Do not pipe output into a pager\n"
-               "     --no-legend              Do not show the headers and footers\n"
-               "     --no-ask-password        Do not ask for system passwords\n"
-               "  -H --host=[USER@]HOST       Operate on remote host\n"
-               "  -M --machine=CONTAINER      Operate on local container\n"
-               "     --identity=PATH          Read JSON identity from file\n"
-               "     --json=FORMAT            Output inspection data in JSON (takes one of\n"
-               "                              pretty, short, off)\n"
-               "  -j                          Equivalent to --json=pretty (on TTY) or\n"
-               "                              --json=short (otherwise)\n"
-               "     --export-format=         Strip JSON inspection data (full, stripped,\n"
-               "                              minimal)\n"
-               "  -E                          When specified once equals -j --export-format=\n"
-               "                              stripped, when specified twice equals\n"
-               "                              -j --export-format=minimal\n"
+               "  -h --help                    Show this help\n"
+               "     --version                 Show package version\n"
+               "     --no-pager                Do not pipe output into a pager\n"
+               "     --no-legend               Do not show the headers and footers\n"
+               "     --no-ask-password         Do not ask for system passwords\n"
+               "  -H --host=[USER@]HOST        Operate on remote host\n"
+               "  -M --machine=CONTAINER       Operate on local container\n"
+               "     --identity=PATH           Read JSON identity from file\n"
+               "     --json=FORMAT             Output inspection data in JSON (takes one of\n"
+               "                               pretty, short, off)\n"
+               "  -j                           Equivalent to --json=pretty (on TTY) or\n"
+               "                               --json=short (otherwise)\n"
+               "     --export-format=          Strip JSON inspection data (full, stripped,\n"
+               "                               minimal)\n"
+               "  -E                           When specified once equals -j --export-format=\n"
+               "                               stripped, when specified twice equals\n"
+               "                               -j --export-format=minimal\n"
                "\n%4$sGeneral User Record Properties:%5$s\n"
-               "  -c --real-name=REALNAME     Real name for user\n"
-               "     --realm=REALM            Realm to create user in\n"
-               "     --email-address=EMAIL    Email address for user\n"
-               "     --location=LOCATION      Set location of user on earth\n"
-               "     --icon-name=NAME         Icon name for user\n"
-               "  -d --home-dir=PATH          Home directory\n"
-               "  -u --uid=UID                Numeric UID for user\n"
-               "  -G --member-of=GROUP        Add user to group\n"
-               "     --skel=PATH              Skeleton directory to use\n"
-               "     --shell=PATH             Shell for account\n"
-               "     --setenv=VARIABLE=VALUE  Set an environment variable at log-in\n"
-               "     --timezone=TIMEZONE      Set a time-zone\n"
-               "     --language=LOCALE        Set preferred language\n"
+               "  -c --real-name=REALNAME      Real name for user\n"
+               "     --realm=REALM             Realm to create user in\n"
+               "     --email-address=EMAIL     Email address for user\n"
+               "     --location=LOCATION       Set location of user on earth\n"
+               "     --icon-name=NAME          Icon name for user\n"
+               "  -d --home-dir=PATH           Home directory\n"
+               "  -u --uid=UID                 Numeric UID for user\n"
+               "  -G --member-of=GROUP         Add user to group\n"
+               "     --skel=PATH               Skeleton directory to use\n"
+               "     --shell=PATH              Shell for account\n"
+               "     --setenv=VARIABLE[=VALUE] Set an environment variable at log-in\n"
+               "     --timezone=TIMEZONE       Set a time-zone\n"
+               "     --language=LOCALE         Set preferred language\n"
                "     --ssh-authorized-keys=KEYS\n"
-               "                              Specify SSH public keys\n"
-               "     --pkcs11-token-uri=URI   URI to PKCS#11 security token containing\n"
-               "                              private key and matching X.509 certificate\n"
-               "     --fido2-device=PATH      Path to FIDO2 hidraw device with hmac-secret\n"
-               "                              extension\n"
+               "                               Specify SSH public keys\n"
+               "     --pkcs11-token-uri=URI    URI to PKCS#11 security token containing\n"
+               "                               private key and matching X.509 certificate\n"
+               "     --fido2-device=PATH       Path to FIDO2 hidraw device with hmac-secret\n"
+               "                               extension\n"
                "     --fido2-with-client-pin=BOOL\n"
-               "                              Whether to require entering a PIN to unlock the\n"
-               "                              account\n"
+               "                               Whether to require entering a PIN to unlock the\n"
+               "                               account\n"
                "     --fido2-with-user-presence=BOOL\n"
-               "                              Whether to require user presence to unlock the\n"
-               "                              account\n"
+               "                               Whether to require user presence to unlock the\n"
+               "                               account\n"
                "     --fido2-with-user-verification=BOOL\n"
-               "                              Whether to require user verification to unlock the\n"
-               "                              account\n"
-               "     --recovery-key=BOOL      Add a recovery key\n"
-               "\n%4$sAccount Management User Record Properties:%5$s\n"
-               "     --locked=BOOL            Set locked account state\n"
-               "     --not-before=TIMESTAMP   Do not allow logins before\n"
-               "     --not-after=TIMESTAMP    Do not allow logins after\n"
+               "                               Whether to require user verification to unlock\n"
+               "                               the account\n"
+               "     --recovery-key=BOOL       Add a recovery key\n"
+               "\n%4$sAccount Management User  Record Properties:%5$s\n"
+               "     --locked=BOOL             Set locked account state\n"
+               "     --not-before=TIMESTAMP    Do not allow logins before\n"
+               "     --not-after=TIMESTAMP     Do not allow logins after\n"
                "     --rate-limit-interval=SECS\n"
-               "                              Login rate-limit interval in seconds\n"
+               "                               Login rate-limit interval in seconds\n"
                "     --rate-limit-burst=NUMBER\n"
-               "                              Login rate-limit attempts per interval\n"
+               "                               Login rate-limit attempts per interval\n"
                "\n%4$sPassword Policy User Record Properties:%5$s\n"
-               "     --password-hint=HINT     Set Password hint\n"
+               "     --password-hint=HINT      Set Password hint\n"
                "     --enforce-password-policy=BOOL\n"
-               "                              Control whether to enforce system's password\n"
-               "                              policy for this user\n"
-               "  -P                          Equivalent to --enforce-password-password=no\n"
+               "                               Control whether to enforce system's password\n"
+               "                               policy for this user\n"
+               "  -P                           Same as --enforce-password-password=no\n"
                "     --password-change-now=BOOL\n"
-               "                              Require the password to be changed on next login\n"
+               "                               Require the password to be changed on next login\n"
                "     --password-change-min=TIME\n"
-               "                              Require minimum time between password changes\n"
+               "                               Require minimum time between password changes\n"
                "     --password-change-max=TIME\n"
-               "                              Require maximum time between password changes\n"
+               "                               Require maximum time between password changes\n"
                "     --password-change-warn=TIME\n"
-               "                              How much time to warn before password expiry\n"
+               "                               How much time to warn before password expiry\n"
                "     --password-change-inactive=TIME\n"
-               "                              How much time to block password after expiry\n"
+               "                               How much time to block password after expiry\n"
                "\n%4$sResource Management User Record Properties:%5$s\n"
-               "     --disk-size=BYTES        Size to assign the user on disk\n"
-               "     --access-mode=MODE       User home directory access mode\n"
-               "     --umask=MODE             Umask for user when logging in\n"
-               "     --nice=NICE              Nice level for user\n"
+               "     --disk-size=BYTES         Size to assign the user on disk\n"
+               "     --access-mode=MODE        User home directory access mode\n"
+               "     --umask=MODE              Umask for user when logging in\n"
+               "     --nice=NICE               Nice level for user\n"
                "     --rlimit=LIMIT=VALUE[:VALUE]\n"
-               "                              Set resource limits\n"
-               "     --tasks-max=MAX          Set maximum number of per-user tasks\n"
-               "     --memory-high=BYTES      Set high memory threshold in bytes\n"
-               "     --memory-max=BYTES       Set maximum memory limit\n"
-               "     --cpu-weight=WEIGHT      Set CPU weight\n"
-               "     --io-weight=WEIGHT       Set IO weight\n"
+               "                               Set resource limits\n"
+               "     --tasks-max=MAX           Set maximum number of per-user tasks\n"
+               "     --memory-high=BYTES       Set high memory threshold in bytes\n"
+               "     --memory-max=BYTES        Set maximum memory limit\n"
+               "     --cpu-weight=WEIGHT       Set CPU weight\n"
+               "     --io-weight=WEIGHT        Set IO weight\n"
                "\n%4$sStorage User Record Properties:%5$s\n"
-               "     --storage=STORAGE        Storage type to use (luks, fscrypt, directory,\n"
-               "                              subvolume, cifs)\n"
-               "     --image-path=PATH        Path to image file/directory\n"
+               "     --storage=STORAGE         Storage type to use (luks, fscrypt, directory,\n"
+               "                               subvolume, cifs)\n"
+               "     --image-path=PATH         Path to image file/directory\n"
+               "     --drop-caches=BOOL        Whether to automatically drop caches on logout\n"
                "\n%4$sLUKS Storage User Record Properties:%5$s\n"
-               "     --fs-type=TYPE           File system type to use in case of luks\n"
-               "                              storage (btrfs, ext4, xfs)\n"
-               "     --luks-discard=BOOL      Whether to use 'discard' feature of file system\n"
-               "                              when activated (mounted)\n"
+               "     --fs-type=TYPE            File system type to use in case of luks\n"
+               "                               storage (btrfs, ext4, xfs)\n"
+               "     --luks-discard=BOOL       Whether to use 'discard' feature of file system\n"
+               "                               when activated (mounted)\n"
                "     --luks-offline-discard=BOOL\n"
-               "                              Whether to trim file on logout\n"
-               "     --luks-cipher=CIPHER     Cipher to use for LUKS encryption\n"
-               "     --luks-cipher-mode=MODE  Cipher mode to use for LUKS encryption\n"
+               "                               Whether to trim file on logout\n"
+               "     --luks-cipher=CIPHER      Cipher to use for LUKS encryption\n"
+               "     --luks-cipher-mode=MODE   Cipher mode to use for LUKS encryption\n"
                "     --luks-volume-key-size=BITS\n"
-               "                              Volume key size to use for LUKS encryption\n"
-               "     --luks-pbkdf-type=TYPE   Password-based Key Derivation Function to use\n"
+               "                               Volume key size to use for LUKS encryption\n"
+               "     --luks-pbkdf-type=TYPE    Password-based Key Derivation Function to use\n"
                "     --luks-pbkdf-hash-algorithm=ALGORITHM\n"
-               "                              PBKDF hash algorithm to use\n"
+               "                               PBKDF hash algorithm to use\n"
                "     --luks-pbkdf-time-cost=SECS\n"
-               "                              Time cost for PBKDF in seconds\n"
+               "                               Time cost for PBKDF in seconds\n"
                "     --luks-pbkdf-memory-cost=BYTES\n"
-               "                              Memory cost for PBKDF in bytes\n"
+               "                               Memory cost for PBKDF in bytes\n"
                "     --luks-pbkdf-parallel-threads=NUMBER\n"
-               "                              Number of parallel threads for PKBDF\n"
+               "                               Number of parallel threads for PKBDF\n"
+               "     --luks-sector-size=BYTES\n"
+               "                               Sector size for LUKS encryption in bytes\n"
+               "     --luks-extra-mount-options=OPTIONS\n"
+               "                               LUKS extra mount options\n"
+               "     --auto-resize-mode=MODE   Automatically grow/shrink home on login/logout\n"
+               "     --rebalance-weight=WEIGHT Weight while rebalancing\n"
                "\n%4$sMounting User Record Properties:%5$s\n"
-               "     --nosuid=BOOL            Control the 'nosuid' flag of the home mount\n"
-               "     --nodev=BOOL             Control the 'nodev' flag of the home mount\n"
-               "     --noexec=BOOL            Control the 'noexec' flag of the home mount\n"
+               "     --nosuid=BOOL             Control the 'nosuid' flag of the home mount\n"
+               "     --nodev=BOOL              Control the 'nodev' flag of the home mount\n"
+               "     --noexec=BOOL             Control the 'noexec' flag of the home mount\n"
                "\n%4$sCIFS User Record Properties:%5$s\n"
-               "     --cifs-domain=DOMAIN     CIFS (Windows) domain\n"
-               "     --cifs-user-name=USER    CIFS (Windows) user name\n"
-               "     --cifs-service=SERVICE   CIFS (Windows) service to mount as home area\n"
+               "     --cifs-domain=DOMAIN      CIFS (Windows) domain\n"
+               "     --cifs-user-name=USER     CIFS (Windows) user name\n"
+               "     --cifs-service=SERVICE    CIFS (Windows) service to mount as home area\n"
+               "     --cifs-extra-mount-options=OPTIONS\n"
+               "                               CIFS (Windows) extra mount options\n"
                "\n%4$sLogin Behaviour User Record Properties:%5$s\n"
-               "     --stop-delay=SECS        How long to leave user services running after\n"
-               "                              logout\n"
-               "     --kill-processes=BOOL    Whether to kill user processes when sessions\n"
-               "                              terminate\n"
-               "     --auto-login=BOOL        Try to log this user in automatically\n"
+               "     --stop-delay=SECS         How long to leave user services running after\n"
+               "                               logout\n"
+               "     --kill-processes=BOOL     Whether to kill user processes when sessions\n"
+               "                               terminate\n"
+               "     --auto-login=BOOL         Try to log this user in automatically\n"
                "\nSee the %6$s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -2220,6 +2364,7 @@
                 ARG_CIFS_DOMAIN,
                 ARG_CIFS_USER_NAME,
                 ARG_CIFS_SERVICE,
+                ARG_CIFS_EXTRA_MOUNT_OPTIONS,
                 ARG_TASKS_MAX,
                 ARG_MEMORY_HIGH,
                 ARG_MEMORY_MAX,
@@ -2227,9 +2372,11 @@
                 ARG_IO_WEIGHT,
                 ARG_LUKS_PBKDF_TYPE,
                 ARG_LUKS_PBKDF_HASH_ALGORITHM,
+                ARG_LUKS_PBKDF_FORCE_ITERATIONS,
                 ARG_LUKS_PBKDF_TIME_COST,
                 ARG_LUKS_PBKDF_MEMORY_COST,
                 ARG_LUKS_PBKDF_PARALLEL_THREADS,
+                ARG_LUKS_SECTOR_SIZE,
                 ARG_RATE_LIMIT_INTERVAL,
                 ARG_RATE_LIMIT_BURST,
                 ARG_STOP_DELAY,
@@ -2250,6 +2397,11 @@
                 ARG_RECOVERY_KEY,
                 ARG_AND_RESIZE,
                 ARG_AND_CHANGE_PASSWORD,
+                ARG_DROP_CACHES,
+                ARG_LUKS_EXTRA_MOUNT_OPTIONS,
+                ARG_AUTO_RESIZE_MODE,
+                ARG_REBALANCE_WEIGHT,
+                ARG_FIDO2_CRED_ALG,
         };
 
         static const struct option options[] = {
@@ -2302,15 +2454,18 @@
                 { "luks-volume-key-size",        required_argument, NULL, ARG_LUKS_VOLUME_KEY_SIZE        },
                 { "luks-pbkdf-type",             required_argument, NULL, ARG_LUKS_PBKDF_TYPE             },
                 { "luks-pbkdf-hash-algorithm",   required_argument, NULL, ARG_LUKS_PBKDF_HASH_ALGORITHM   },
+                { "luks-pbkdf-force-iterations", required_argument, NULL, ARG_LUKS_PBKDF_FORCE_ITERATIONS },
                 { "luks-pbkdf-time-cost",        required_argument, NULL, ARG_LUKS_PBKDF_TIME_COST        },
                 { "luks-pbkdf-memory-cost",      required_argument, NULL, ARG_LUKS_PBKDF_MEMORY_COST      },
                 { "luks-pbkdf-parallel-threads", required_argument, NULL, ARG_LUKS_PBKDF_PARALLEL_THREADS },
+                { "luks-sector-size",            required_argument, NULL, ARG_LUKS_SECTOR_SIZE            },
                 { "nosuid",                      required_argument, NULL, ARG_NOSUID                      },
                 { "nodev",                       required_argument, NULL, ARG_NODEV                       },
                 { "noexec",                      required_argument, NULL, ARG_NOEXEC                      },
                 { "cifs-user-name",              required_argument, NULL, ARG_CIFS_USER_NAME              },
                 { "cifs-domain",                 required_argument, NULL, ARG_CIFS_DOMAIN                 },
                 { "cifs-service",                required_argument, NULL, ARG_CIFS_SERVICE                },
+                { "cifs-extra-mount-options",    required_argument, NULL, ARG_CIFS_EXTRA_MOUNT_OPTIONS    },
                 { "rate-limit-interval",         required_argument, NULL, ARG_RATE_LIMIT_INTERVAL         },
                 { "rate-limit-burst",            required_argument, NULL, ARG_RATE_LIMIT_BURST            },
                 { "stop-delay",                  required_argument, NULL, ARG_STOP_DELAY                  },
@@ -2325,6 +2480,7 @@
                 { "json",                        required_argument, NULL, ARG_JSON                        },
                 { "export-format",               required_argument, NULL, ARG_EXPORT_FORMAT               },
                 { "pkcs11-token-uri",            required_argument, NULL, ARG_PKCS11_TOKEN_URI            },
+                { "fido2-credential-algorithm",  required_argument, NULL, ARG_FIDO2_CRED_ALG              },
                 { "fido2-device",                required_argument, NULL, ARG_FIDO2_DEVICE                },
                 { "fido2-with-client-pin",       required_argument, NULL, ARG_FIDO2_WITH_PIN              },
                 { "fido2-with-user-presence",    required_argument, NULL, ARG_FIDO2_WITH_UP               },
@@ -2332,6 +2488,10 @@
                 { "recovery-key",                required_argument, NULL, ARG_RECOVERY_KEY                },
                 { "and-resize",                  required_argument, NULL, ARG_AND_RESIZE                  },
                 { "and-change-password",         required_argument, NULL, ARG_AND_CHANGE_PASSWORD         },
+                { "drop-caches",                 required_argument, NULL, ARG_DROP_CACHES                 },
+                { "luks-extra-mount-options",    required_argument, NULL, ARG_LUKS_EXTRA_MOUNT_OPTIONS    },
+                { "auto-resize-mode",            required_argument, NULL, ARG_AUTO_RESIZE_MODE            },
+                { "rebalance-weight",            required_argument, NULL, ARG_REBALANCE_WEIGHT            },
                 {}
         };
 
@@ -2449,16 +2609,18 @@
                 case ARG_ICON_NAME:
                 case ARG_CIFS_USER_NAME:
                 case ARG_CIFS_DOMAIN:
-                case ARG_CIFS_SERVICE: {
+                case ARG_CIFS_EXTRA_MOUNT_OPTIONS:
+                case ARG_LUKS_EXTRA_MOUNT_OPTIONS: {
 
                         const char *field =
-                                c == ARG_EMAIL_ADDRESS ? "emailAddress" :
-                                     c == ARG_LOCATION ? "location" :
-                                    c == ARG_ICON_NAME ? "iconName" :
-                               c == ARG_CIFS_USER_NAME ? "cifsUserName" :
-                                  c == ARG_CIFS_DOMAIN ? "cifsDomain" :
-                                 c == ARG_CIFS_SERVICE ? "cifsService" :
-                                                         NULL;
+                                           c == ARG_EMAIL_ADDRESS ? "emailAddress" :
+                                                c == ARG_LOCATION ? "location" :
+                                               c == ARG_ICON_NAME ? "iconName" :
+                                          c == ARG_CIFS_USER_NAME ? "cifsUserName" :
+                                             c == ARG_CIFS_DOMAIN ? "cifsDomain" :
+                                c == ARG_CIFS_EXTRA_MOUNT_OPTIONS ? "cifsExtraMountOptions" :
+                                c == ARG_LUKS_EXTRA_MOUNT_OPTIONS ? "luksExtraMountOptions" :
+                                                                    NULL;
 
                         assert(field);
 
@@ -2477,6 +2639,25 @@
                         break;
                 }
 
+                case ARG_CIFS_SERVICE:
+                        if (isempty(optarg)) {
+                                r = drop_from_identity("cifsService");
+                                if (r < 0)
+                                        return r;
+
+                                break;
+                        }
+
+                        r = parse_cifs_service(optarg, NULL, NULL, NULL);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to validate CIFS service name: %s", optarg);
+
+                        r = json_variant_set_field_string(&arg_identity_extra, "cifsService", optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to set cifsService field: %m");
+
+                        break;
+
                 case ARG_PASSWORD_HINT:
                         if (isempty(optarg)) {
                                 r = drop_from_identity("passwordHint");
@@ -2673,10 +2854,6 @@
                                 break;
                         }
 
-                        if (!env_assignment_is_valid(optarg))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Environment assignment '%s' not valid.", optarg);
-
                         e = json_variant_by_key(arg_identity_extra, "environment");
                         if (e) {
                                 r = json_variant_strv(e, &l);
@@ -2684,9 +2861,9 @@
                                         return log_error_errno(r, "Failed to parse JSON environment field: %m");
                         }
 
-                        r = strv_env_replace_strdup(&l, optarg);
+                        r = strv_env_replace_strdup_passthrough(&l, optarg);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to replace JSON environment field: %m");
+                                return log_error_errno(r, "Cannot assign environment variable %s: %m", optarg);
 
                         strv_sort(l);
 
@@ -2790,13 +2967,11 @@
 
                 case ARG_DISK_SIZE:
                         if (isempty(optarg)) {
-                                r = drop_from_identity("diskSize");
-                                if (r < 0)
-                                        return r;
-
-                                r = drop_from_identity("diskSizeRelative");
-                                if (r < 0)
-                                        return r;
+                                FOREACH_STRING(prop, "diskSize", "diskSizeRelative", "rebalanceWeight") {
+                                        r = drop_from_identity(prop);
+                                        if (r < 0)
+                                                return r;
+                                }
 
                                 arg_disk_size = arg_disk_size_relative = UINT64_MAX;
                                 break;
@@ -2804,9 +2979,9 @@
 
                         r = parse_permyriad(optarg);
                         if (r < 0) {
-                                r = parse_size(optarg, 1024, &arg_disk_size);
+                                r = parse_disk_size(optarg, &arg_disk_size);
                                 if (r < 0)
-                                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Disk size '%s' not valid.", optarg);
+                                        return r;
 
                                 r = drop_from_identity("diskSizeRelative");
                                 if (r < 0)
@@ -2832,6 +3007,11 @@
                                 arg_disk_size = UINT64_MAX;
                         }
 
+                        /* Automatically turn off the rebalance logic if user configured a size explicitly */
+                        r = json_variant_set_field_unsigned(&arg_identity_extra_this_machine, "rebalanceWeight", REBALANCE_WEIGHT_OFF);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to set rebalanceWeight field: %m");
+
                         break;
 
                 case ARG_ACCESS_MODE: {
@@ -2895,10 +3075,12 @@
                         break;
 
                 case ARG_LUKS_VOLUME_KEY_SIZE:
+                case ARG_LUKS_PBKDF_FORCE_ITERATIONS:
                 case ARG_LUKS_PBKDF_PARALLEL_THREADS:
                 case ARG_RATE_LIMIT_BURST: {
                         const char *field =
                                        c == ARG_LUKS_VOLUME_KEY_SIZE ? "luksVolumeKeySize" :
+                                c == ARG_LUKS_PBKDF_FORCE_ITERATIONS ? "luksPbkdfForceIterations" :
                                 c == ARG_LUKS_PBKDF_PARALLEL_THREADS ? "luksPbkdfParallelThreads" :
                                            c == ARG_RATE_LIMIT_BURST ? "rateLimitBurst" : NULL;
                         unsigned n;
@@ -2922,6 +3104,28 @@
                         break;
                 }
 
+                case ARG_LUKS_SECTOR_SIZE: {
+                        uint64_t ss;
+
+                        if (isempty(optarg)) {
+                                r = drop_from_identity("luksSectorSize");
+                                if (r < 0)
+                                        return r;
+
+                                break;
+                        }
+
+                        r = parse_sector_size(optarg, &ss);
+                        if (r < 0)
+                                return r;
+
+                        r = json_variant_set_field_unsigned(&arg_identity_extra, "luksSectorSize", ss);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to set sector size field: %m");
+
+                        break;
+                }
+
                 case ARG_UMASK: {
                         mode_t m;
 
@@ -3288,9 +3492,7 @@
                         break;
                 }
 
-                case ARG_PKCS11_TOKEN_URI: {
-                        const char *p;
-
+                case ARG_PKCS11_TOKEN_URI:
                         if (streq(optarg, "list"))
                                 return pkcs11_list_tokens();
 
@@ -3324,11 +3526,14 @@
 
                         strv_uniq(arg_pkcs11_token_uri);
                         break;
-                }
 
-                case ARG_FIDO2_DEVICE: {
-                        const char *p;
+                case ARG_FIDO2_CRED_ALG:
+                        r = parse_fido2_algorithm(optarg, &arg_fido2_cred_alg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse COSE algorithm: %s", optarg);
+                        break;
 
+                case ARG_FIDO2_DEVICE:
                         if (streq(optarg, "list"))
                                 return fido2_list_devices();
 
@@ -3358,7 +3563,6 @@
 
                         strv_uniq(arg_fido2_device);
                         break;
-                }
 
                 case ARG_FIDO2_WITH_PIN: {
                         bool lock_with_pin;
@@ -3393,9 +3597,7 @@
                         break;
                 }
 
-                case ARG_RECOVERY_KEY: {
-                        const char *p;
-
+                case ARG_RECOVERY_KEY:
                         r = parse_boolean(optarg);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to parse --recovery-key= argument: %s", optarg);
@@ -3409,6 +3611,59 @@
                         }
 
                         break;
+
+                case ARG_AUTO_RESIZE_MODE:
+                        if (isempty(optarg)) {
+                                r = drop_from_identity("autoResizeMode");
+                                if (r < 0)
+                                        return r;
+
+                                break;
+                        }
+
+                        r = auto_resize_mode_from_string(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --auto-resize-mode= argument: %s", optarg);
+
+                        r = json_variant_set_field_string(&arg_identity_extra, "autoResizeMode", auto_resize_mode_to_string(r));
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to set autoResizeMode field: %m");
+
+                        break;
+
+                case ARG_REBALANCE_WEIGHT: {
+                        uint64_t u;
+
+                        if (isempty(optarg)) {
+                                r = drop_from_identity("rebalanceWeight");
+                                if (r < 0)
+                                        return r;
+                                break;
+                        }
+
+                        if (streq(optarg, "off"))
+                                u = REBALANCE_WEIGHT_OFF;
+                        else {
+                                r = safe_atou64(optarg, &u);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to parse --rebalance-weight= argument: %s", optarg);
+
+                                if (u < REBALANCE_WEIGHT_MIN || u > REBALANCE_WEIGHT_MAX)
+                                        return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Rebalancing weight out of valid range %" PRIu64 "%s%" PRIu64 ": %s",
+                                                               REBALANCE_WEIGHT_MIN, special_glyph(SPECIAL_GLYPH_ELLIPSIS), REBALANCE_WEIGHT_MAX, optarg);
+                        }
+
+                        /* Drop from per machine stuff and everywhere */
+                        r = drop_from_identity("rebalanceWeight");
+                        if (r < 0)
+                                return r;
+
+                        /* Add to main identity */
+                        r = json_variant_set_field_unsigned(&arg_identity_extra, "rebalanceWeight", u);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to set rebalanceWeight field: %m");
+
+                        break;
                 }
 
                 case 'j':
@@ -3459,11 +3714,32 @@
                         arg_and_change_password = true;
                         break;
 
+                case ARG_DROP_CACHES: {
+                        bool drop_caches;
+
+                        if (isempty(optarg)) {
+                                r = drop_from_identity("dropCaches");
+                                if (r < 0)
+                                        return r;
+                                break;
+                        }
+
+                        r = parse_boolean_argument("--drop-caches=", optarg, &drop_caches);
+                        if (r < 0)
+                                return r;
+
+                        r = json_variant_set_field_boolean(&arg_identity_extra, "dropCaches", r);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to set drop caches field: %m");
+
+                        break;
+                }
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
         }
 
@@ -3524,6 +3800,7 @@
                 { "with",           2,        VERB_ANY, 0,            with_home            },
                 { "lock-all",       VERB_ANY, 1,        0,            lock_all_homes       },
                 { "deactivate-all", VERB_ANY, 1,        0,            deactivate_all_homes },
+                { "rebalance",      VERB_ANY, 1,        0,            rebalance            },
                 {}
         };
 
diff --git a/src/home/homed-conf.c b/src/home/homed-conf.c
index 4f46b0c..429a6e3 100644
--- a/src/home/homed-conf.c
+++ b/src/home/homed-conf.c
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
 #include "home-util.h"
 #include "homed-conf.h"
 
@@ -39,10 +39,9 @@
                 void *data,
                 void *userdata) {
 
-        char **s = data;
+        char **s = ASSERT_PTR(data);
 
         assert(rvalue);
-        assert(s);
 
         if (!isempty(rvalue) && !supported_fstype(rvalue)) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0, "Unsupported file system, ignoring: %s", rvalue);
diff --git a/src/home/homed-home-bus.c b/src/home/homed-home-bus.c
index 601ecc5..a47f4d8 100644
--- a/src/home/homed-home-bus.c
+++ b/src/home/homed-home-bus.c
@@ -21,11 +21,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(h);
 
         return sd_bus_message_append(
                         reply, "(suusss)",
@@ -46,11 +45,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(h);
 
         return sd_bus_message_append(reply, "s", home_state_to_string(home_get_state(h)));
 }
@@ -125,13 +123,12 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *json = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         bool incomplete;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(h);
 
         r = bus_home_get_record_json(h, sd_bus_get_current_message(bus), &json, &incomplete);
         if (r < 0)
@@ -146,11 +143,10 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_message_read_secret(message, &secret, error);
         if (r < 0)
@@ -176,11 +172,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = home_deactivate(h, false, error);
         if (r < 0)
@@ -201,11 +196,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_verify_polkit_async(
                         message,
@@ -238,11 +232,10 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_message_read_secret(message, &secret, error);
         if (r < 0)
@@ -283,11 +276,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_verify_polkit_async(
                         message,
@@ -324,11 +316,10 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_message_read_secret(message, &secret, error);
         if (r < 0)
@@ -354,11 +345,10 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_message_read_secret(message, &secret, error);
         if (r < 0)
@@ -437,11 +427,10 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_message_read_home_record(message, USER_RECORD_REQUIRE_REGULAR|USER_RECORD_REQUIRE_SECRET|USER_RECORD_ALLOW_PRIVILEGED|USER_RECORD_ALLOW_PER_MACHINE|USER_RECORD_ALLOW_SIGNATURE|USER_RECORD_PERMISSIVE, &hr, error);
         if (r < 0)
@@ -456,12 +445,11 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         uint64_t sz;
         int r;
 
         assert(message);
-        assert(h);
 
         r = sd_bus_message_read(message, "t", &sz);
         if (r < 0)
@@ -485,7 +473,7 @@
         if (r == 0)
                 return 1; /* Will call us back */
 
-        r = home_resize(h, sz, secret, error);
+        r = home_resize(h, sz, secret, /* automatic= */ false, error);
         if (r < 0)
                 return r;
 
@@ -505,11 +493,10 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *new_secret = NULL, *old_secret = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_message_read_secret(message, &new_secret, error);
         if (r < 0)
@@ -552,11 +539,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = home_lock(h, error);
         if (r < 0)
@@ -580,11 +566,10 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         r = bus_message_read_secret(message, &secret, error);
         if (r < 0)
@@ -612,12 +597,11 @@
 
         _cleanup_(user_record_unrefp) UserRecord *secret = NULL;
         _cleanup_(operation_unrefp) Operation *o = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r, please_suspend;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
 
         assert(message);
-        assert(h);
 
         r = bus_message_read_secret(message, &secret, error);
         if (r < 0)
@@ -651,13 +635,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_close_ int fd = -1;
-        Home *h = userdata;
+        _cleanup_close_ int fd = -EBADF;
+        Home *h = ASSERT_PTR(userdata);
         HomeState state;
         int please_suspend, r;
 
         assert(message);
-        assert(h);
 
         r = sd_bus_message_read(message, "b", &please_suspend);
         if (r < 0)
@@ -693,11 +676,10 @@
                 sd_bus_error *error) {
 
         _cleanup_(operation_unrefp) Operation *o = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(h);
 
         o = operation_new(OPERATION_RELEASE, message);
         if (!o)
@@ -771,6 +753,8 @@
                 r = bus_home_path(h, l + k);
                 if (r < 0)
                         return r;
+
+                k++;
         }
 
         *nodes = TAKE_PTR(l);
@@ -796,76 +780,61 @@
                         property_get_user_record, 0,
                         SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION|SD_BUS_VTABLE_SENSITIVE),
 
-        SD_BUS_METHOD_WITH_NAMES("Activate",
-                                 "s",
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 bus_home_method_activate,
-                                 SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("Activate",
+                                SD_BUS_ARGS("s", secret),
+                                SD_BUS_NO_RESULT,
+                                bus_home_method_activate,
+                                SD_BUS_VTABLE_SENSITIVE),
         SD_BUS_METHOD("Deactivate", NULL, NULL, bus_home_method_deactivate, 0),
         SD_BUS_METHOD("Unregister", NULL, NULL, bus_home_method_unregister, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Realize",
-                                 "s",
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 bus_home_method_realize,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("Realize",
+                                SD_BUS_ARGS("s", secret),
+                                SD_BUS_NO_RESULT,
+                                bus_home_method_realize,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
 
         SD_BUS_METHOD("Remove", NULL, NULL, bus_home_method_remove, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Fixate",
-                                 "s",
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 bus_home_method_fixate,
-                                 SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("Authenticate",
-                                 "s",
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 bus_home_method_authenticate,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("Update",
-                                 "s",
-                                 SD_BUS_PARAM(user_record),
-                                 NULL,,
-                                 bus_home_method_update,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("Resize",
-                                 "ts",
-                                 SD_BUS_PARAM(size)
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 bus_home_method_resize,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("ChangePassword",
-                                 "ss",
-                                 SD_BUS_PARAM(new_secret)
-                                 SD_BUS_PARAM(old_secret),
-                                 NULL,,
-                                 bus_home_method_change_password,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("Fixate",
+                                SD_BUS_ARGS("s", secret),
+                                SD_BUS_NO_RESULT,
+                                bus_home_method_fixate,
+                                SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("Authenticate",
+                                SD_BUS_ARGS("s", secret),
+                                SD_BUS_NO_RESULT,
+                                bus_home_method_authenticate,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("Update",
+                                SD_BUS_ARGS("s", user_record),
+                                SD_BUS_NO_RESULT,
+                                bus_home_method_update,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("Resize",
+                                SD_BUS_ARGS("t", size, "s", secret),
+                                SD_BUS_NO_RESULT,
+                                bus_home_method_resize,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("ChangePassword",
+                                SD_BUS_ARGS("s", new_secret, "s", old_secret),
+                                SD_BUS_NO_RESULT,
+                                bus_home_method_change_password,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
         SD_BUS_METHOD("Lock", NULL, NULL, bus_home_method_lock, 0),
-        SD_BUS_METHOD_WITH_NAMES("Unlock",
-                                 "s",
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 bus_home_method_unlock,
-                                 SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("Acquire",
-                                 "sb",
-                                 SD_BUS_PARAM(secret)
-                                 SD_BUS_PARAM(please_suspend),
-                                 "h",
-                                 SD_BUS_PARAM(send_fd),
-                                 bus_home_method_acquire,
-                                 SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("Ref",
-                                 "b",
-                                 SD_BUS_PARAM(please_suspend),
-                                 "h",
-                                 SD_BUS_PARAM(send_fd),
-                                 bus_home_method_ref,
-                                 0),
+        SD_BUS_METHOD_WITH_ARGS("Unlock",
+                                SD_BUS_ARGS("s", secret),
+                                SD_BUS_NO_RESULT,
+                                bus_home_method_unlock,
+                                SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("Acquire",
+                                SD_BUS_ARGS("s", secret, "b", please_suspend),
+                                SD_BUS_RESULT("h", send_fd),
+                                bus_home_method_acquire,
+                                SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("Ref",
+                                SD_BUS_ARGS("b", please_suspend),
+                                SD_BUS_RESULT("h", send_fd),
+                                bus_home_method_ref,
+                                0),
         SD_BUS_METHOD("Release", NULL, NULL, bus_home_method_release, 0),
         SD_BUS_VTABLE_END
 };
@@ -880,11 +849,9 @@
 
 static int on_deferred_change(sd_event_source *s, void *userdata) {
         _cleanup_free_ char *path = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int r;
 
-        assert(h);
-
         h->deferred_change_event_source = sd_event_source_disable_unref(h->deferred_change_event_source);
 
         r = bus_home_path(h, &path);
diff --git a/src/home/homed-home.c b/src/home/homed-home.c
index 104427d..e6b7740 100644
--- a/src/home/homed-home.c
+++ b/src/home/homed-home.c
@@ -17,9 +17,13 @@
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "filesystems.h"
+#include "fs-util.h"
+#include "glyph-util.h"
 #include "home-util.h"
 #include "homed-home-bus.h"
 #include "homed-home.h"
+#include "missing_magic.h"
 #include "missing_syscall.h"
 #include "mkdir.h"
 #include "path-util.h"
@@ -32,12 +36,16 @@
 #include "stat-util.h"
 #include "string-table.h"
 #include "strv.h"
+#include "uid-alloc-range.h"
+#include "user-record-pwquality.h"
 #include "user-record-sign.h"
 #include "user-record-util.h"
-#include "user-record-pwquality.h"
 #include "user-record.h"
 #include "user-util.h"
 
+/* Retry to deactivate home directories again and again every 15s until it works */
+#define RETRY_DEACTIVATE_USEC (15U * USEC_PER_SEC)
+
 #define HOME_USERS_MAX 500
 #define PENDING_OPERATIONS_MAX 100
 
@@ -127,9 +135,11 @@
                 .user_name = TAKE_PTR(nm),
                 .uid = hr->uid,
                 .state = _HOME_STATE_INVALID,
-                .worker_stdout_fd = -1,
+                .worker_stdout_fd = -EBADF,
                 .sysfs = TAKE_PTR(ns),
                 .signed_locally = -1,
+                .pin_fd = -EBADF,
+                .luks_lock_fd = -EBADF,
         };
 
         r = hashmap_put(m->homes_by_name, home->user_name, home);
@@ -152,6 +162,7 @@
 
         (void) bus_manager_emit_auto_login_changed(m);
         (void) bus_home_emit_change(home);
+        (void) manager_schedule_rebalance(m, /* immediately= */ false);
 
         if (ret)
                 *ret = TAKE_PTR(home);
@@ -184,6 +195,8 @@
 
                 if (h->manager->gc_focus == h)
                         h->manager->gc_focus = NULL;
+
+                (void) manager_schedule_rebalance(h->manager, /* immediately= */ false);
         }
 
         user_record_unref(h->record);
@@ -203,6 +216,11 @@
 
         h->current_operation = operation_unref(h->current_operation);
 
+        safe_close(h->pin_fd);
+        safe_close(h->luks_lock_fd);
+
+        h->retry_deactivate_event_source = sd_event_source_disable_unref(h->retry_deactivate_event_source);
+
         return mfree(h);
 }
 
@@ -290,9 +308,9 @@
                 return r;
 
         (void) mkdir("/var/lib/systemd/", 0755);
-        (void) mkdir("/var/lib/systemd/home/", 0700);
+        (void) mkdir(home_record_dir(), 0700);
 
-        fn = strjoina("/var/lib/systemd/home/", h->user_name, ".identity");
+        fn = strjoina(home_record_dir(), "/", h->user_name, ".identity");
 
         r = write_string_file(fn, text, WRITE_STRING_FILE_ATOMIC|WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MODE_0600|WRITE_STRING_FILE_SYNC);
         if (r < 0)
@@ -306,7 +324,7 @@
 
         assert(h);
 
-        fn = strjoina("/var/lib/systemd/home/", h->user_name, ".identity");
+        fn = strjoina(home_record_dir(), "/", h->user_name, ".identity");
         if (unlink(fn) < 0 && errno != ENOENT)
                 return -errno;
 
@@ -317,6 +335,140 @@
         return 0;
 }
 
+static void home_unpin(Home *h) {
+        assert(h);
+
+        if (h->pin_fd < 0)
+                return;
+
+        h->pin_fd = safe_close(h->pin_fd);
+        log_debug("Successfully closed pin fd on home for %s.", h->user_name);
+}
+
+static void home_pin(Home *h) {
+        const char *path;
+
+        assert(h);
+
+        if (h->pin_fd >= 0) /* Already pinned? */
+                return;
+
+        path = user_record_home_directory(h->record);
+        if (!path) {
+                log_warning("No home directory path to pin for %s, ignoring.", h->user_name);
+                return;
+        }
+
+        h->pin_fd = open(path, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+        if (h->pin_fd < 0) {
+                log_warning_errno(errno, "Couldn't open home directory '%s' for pinning, ignoring: %m", path);
+                return;
+        }
+
+        log_debug("Successfully pinned home directory '%s'.", path);
+}
+
+static void home_update_pin_fd(Home *h, HomeState state) {
+        assert(h);
+
+        if (state < 0)
+                state = home_get_state(h);
+
+        return HOME_STATE_SHALL_PIN(state) ? home_pin(h) : home_unpin(h);
+}
+
+static void home_maybe_close_luks_lock_fd(Home *h, HomeState state) {
+        assert(h);
+
+        if (h->luks_lock_fd < 0)
+                return;
+
+        if (state < 0)
+                state = home_get_state(h);
+
+        /* Keep the lock as long as the home dir is active or has some operation going */
+        if (HOME_STATE_IS_EXECUTING_OPERATION(state) || HOME_STATE_IS_ACTIVE(state) || state == HOME_LOCKED)
+                return;
+
+        h->luks_lock_fd = safe_close(h->luks_lock_fd);
+        log_debug("Successfully closed LUKS backing file lock for %s.", h->user_name);
+}
+
+static void home_maybe_stop_retry_deactivate(Home *h, HomeState state) {
+        assert(h);
+
+        /* Free the deactivation retry event source if we won't need it anymore. Specifically, we'll free the
+         * event source whenever the home directory is already deactivated (and we thus where successful) or
+         * if we start executing an operation that indicates that the home directory is going to be used or
+         * operated on again. Also, if the home is referenced again stop the timer */
+
+        if (HOME_STATE_MAY_RETRY_DEACTIVATE(state) &&
+            !h->ref_event_source_dont_suspend &&
+            !h->ref_event_source_please_suspend)
+                return;
+
+        h->retry_deactivate_event_source = sd_event_source_disable_unref(h->retry_deactivate_event_source);
+}
+
+static int home_deactivate_internal(Home *h, bool force, sd_bus_error *error);
+static void home_start_retry_deactivate(Home *h);
+
+static int home_on_retry_deactivate(sd_event_source *s, uint64_t usec, void *userdata) {
+        Home *h = ASSERT_PTR(userdata);
+        HomeState state;
+
+        assert(s);
+
+        /* 15s after the last attempt to deactivate the home directory passed. Let's try it one more time. */
+
+        h->retry_deactivate_event_source = sd_event_source_disable_unref(h->retry_deactivate_event_source);
+
+        state = home_get_state(h);
+        if (!HOME_STATE_MAY_RETRY_DEACTIVATE(state))
+                return 0;
+
+        if (IN_SET(state, HOME_ACTIVE, HOME_LINGERING)) {
+                log_info("Again trying to deactivate home directory.");
+
+                /* If we are not executing any operation, let's start deactivating now. Note that this will
+                 * restart our timer again, we are gonna be called again if this doesn't work. */
+                (void) home_deactivate_internal(h, /* force= */ false, NULL);
+        } else
+                /* if we are executing an operation (specifically, area already running a deactivation
+                 * operation), then simply reque the timer, so that we retry again. */
+                home_start_retry_deactivate(h);
+
+        return 0;
+}
+
+static void home_start_retry_deactivate(Home *h) {
+        int r;
+
+        assert(h);
+        assert(h->manager);
+
+        /* Already allocated? */
+        if (h->retry_deactivate_event_source)
+                return;
+
+        /* If the home directory is being used now don't start the timer */
+        if (h->ref_event_source_dont_suspend || h->ref_event_source_please_suspend)
+                return;
+
+        r = sd_event_add_time_relative(
+                        h->manager->event,
+                        &h->retry_deactivate_event_source,
+                        CLOCK_MONOTONIC,
+                        RETRY_DEACTIVATE_USEC,
+                        1*USEC_PER_MINUTE,
+                        home_on_retry_deactivate,
+                        h);
+        if (r < 0)
+                return (void) log_warning_errno(r, "Failed to install retry-deactivate event source, ignoring: %m");
+
+        (void) sd_event_source_set_description(h->retry_deactivate_event_source, "retry-deactivate");
+}
+
 static void home_set_state(Home *h, HomeState state) {
         HomeState old_state, new_state;
 
@@ -327,15 +479,21 @@
         new_state = home_get_state(h); /* Query the new state, since the 'state' variable might be set to -1,
                                         * in which case we synthesize an high-level state on demand */
 
-        log_info("%s: changing state %s → %s", h->user_name,
+        log_info("%s: changing state %s %s %s", h->user_name,
                  home_state_to_string(old_state),
+                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
                  home_state_to_string(new_state));
 
+        home_update_pin_fd(h, new_state);
+        home_maybe_close_luks_lock_fd(h, new_state);
+        home_maybe_stop_retry_deactivate(h, new_state);
+
         if (HOME_STATE_IS_EXECUTING_OPERATION(old_state) && !HOME_STATE_IS_EXECUTING_OPERATION(new_state)) {
                 /* If we just finished executing some operation, process the queue of pending operations. And
                  * enqueue it for GC too. */
 
                 home_schedule_operation(h, NULL, NULL);
+                manager_reschedule_rebalance(h->manager);
                 manager_enqueue_gc(h->manager, h);
         }
 }
@@ -483,6 +641,8 @@
                 return sd_bus_error_setf(error, BUS_ERROR_NO_DISK_SPACE, "Not enough disk space for home %s", h->user_name);
         case -EKEYREVOKED:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_CANT_AUTHENTICATE, "Home %s has no password or other authentication mechanism defined.", h->user_name);
+        case -EADDRINUSE:
+                return sd_bus_error_setf(error, BUS_ERROR_HOME_IN_USE, "Home %s is currently being used elsewhere.", h->user_name);
         }
 
         return 0;
@@ -572,6 +732,7 @@
         /* Reset the state to "invalid", which makes home_get_state() test if the image exists and returns
          * HOME_ABSENT vs. HOME_INACTIVE as necessary. */
         home_set_state(h, _HOME_STATE_INVALID);
+        (void) manager_schedule_rebalance(h->manager, /* immediately= */ false);
         return;
 
 fail:
@@ -626,6 +787,9 @@
 finish:
         h->current_operation = operation_result_unref(h->current_operation, r, &error);
         home_set_state(h, _HOME_STATE_INVALID);
+
+        if (r >= 0)
+                (void) manager_schedule_rebalance(h->manager, /* immediately= */ true);
 }
 
 static void home_deactivate_finish(Home *h, int ret, UserRecord *hr) {
@@ -648,6 +812,9 @@
 finish:
         h->current_operation = operation_result_unref(h->current_operation, r, &error);
         home_set_state(h, _HOME_STATE_INVALID);
+
+        if (r >= 0)
+                (void) manager_schedule_rebalance(h->manager, /* immediately= */ true);
 }
 
 static void home_remove_finish(Home *h, int ret, UserRecord *hr) {
@@ -686,6 +853,8 @@
 
         /* Unload this record from memory too now. */
         h = home_free(h);
+
+        (void) manager_schedule_rebalance(m, /* immediately= */ true);
         return;
 
 fail:
@@ -730,6 +899,8 @@
 
         h->current_operation = operation_result_unref(h->current_operation, 0, NULL);
         home_set_state(h, _HOME_STATE_INVALID);
+
+        (void) manager_schedule_rebalance(h->manager, /* immediately= */ true);
 }
 
 static void home_change_finish(Home *h, int ret, UserRecord *hr) {
@@ -763,6 +934,7 @@
         }
 
         log_debug("Change operation of %s completed.", h->user_name);
+        (void) manager_schedule_rebalance(h->manager, /* immediately= */ false);
         r = 0;
 
 finish:
@@ -877,12 +1049,11 @@
 
 static int home_on_worker_process(sd_event_source *s, const siginfo_t *si, void *userdata) {
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         int ret;
 
         assert(s);
         assert(si);
-        assert(h);
 
         assert(h->worker_pid == si->si_pid);
         assert(h->worker_event_source);
@@ -957,7 +1128,7 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected state after worker exited");
+                assert_not_reached();
         }
 
         return 0;
@@ -966,7 +1137,7 @@
 static int home_start_work(Home *h, const char *verb, UserRecord *hr, UserRecord *secret) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         _cleanup_(erase_and_freep) char *formatted = NULL;
-        _cleanup_close_ int stdin_fd = -1, stdout_fd = -1;
+        _cleanup_close_ int stdin_fd = -EBADF, stdout_fd = -EBADF;
         pid_t pid = 0;
         int r;
 
@@ -1014,14 +1185,18 @@
         if (r < 0)
                 return r;
         if (r == 0) {
+                _cleanup_free_ char *joined = NULL;
                 const char *homework, *suffix, *unix_path;
 
                 /* Child */
 
                 suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX");
-                if (suffix)
-                        unix_path = strjoina("/run/systemd/home/notify.", suffix);
-                else
+                if (suffix) {
+                        joined = strjoin("/run/systemd/home/notify.", suffix);
+                        if (!joined)
+                                return log_oom();
+                        unix_path = joined;
+                } else
                         unix_path = "/run/systemd/home/notify";
 
                 if (setenv("NOTIFY_SOCKET", unix_path, 1) < 0) {
@@ -1029,6 +1204,12 @@
                         _exit(EXIT_FAILURE);
                 }
 
+                /* If we haven't locked the device yet, ask for a lock to be taken and be passed back to us via sd_notify(). */
+                if (setenv("SYSTEMD_LUKS_LOCK", one_zero(h->luks_lock_fd < 0), 1) < 0) {
+                        log_error_errno(errno, "Failed to set $SYSTEMD_LUKS_LOCK: %m");
+                        _exit(EXIT_FAILURE);
+                }
+
                 if (h->manager->default_storage >= 0)
                         if (setenv("SYSTEMD_HOME_DEFAULT_STORAGE", user_storage_to_string(h->manager->default_storage), 1) < 0) {
                                 log_error_errno(errno, "Failed to set $SYSTEMD_HOME_DEFAULT_STORAGE: %m");
@@ -1045,13 +1226,12 @@
                 if (r < 0)
                         log_warning_errno(r, "Failed to update $SYSTEMD_EXEC_PID, ignoring: %m");
 
-                r = rearrange_stdio(stdin_fd, stdout_fd, STDERR_FILENO);
+                r = rearrange_stdio(TAKE_FD(stdin_fd), TAKE_FD(stdout_fd), STDERR_FILENO); /* fds are invalidated by rearrange_stdio() even on failure */
                 if (r < 0) {
                         log_error_errno(r, "Failed to rearrange stdin/stdout/stderr: %m");
                         _exit(EXIT_FAILURE);
                 }
 
-                stdin_fd = stdout_fd = -1; /* have been invalidated by rearrange_stdio() */
 
                 /* Allow overriding the homework path via an environment variable, to make debugging
                  * easier. */
@@ -1097,15 +1277,15 @@
         }
 
         if (ret == 0) {
-                char buf[FORMAT_TIMESPAN_MAX];
                 usec_t t, n;
 
                 n = now(CLOCK_REALTIME);
                 t = user_record_ratelimit_next_try(h->record);
 
                 if (t != USEC_INFINITY && t > n)
-                        return sd_bus_error_setf(error, BUS_ERROR_AUTHENTICATION_LIMIT_HIT, "Too many login attempts, please try again in %s!",
-                                                 format_timespan(buf, sizeof(buf), t - n, USEC_PER_SEC));
+                        return sd_bus_error_setf(error, BUS_ERROR_AUTHENTICATION_LIMIT_HIT,
+                                                 "Too many login attempts, please try again in %s!",
+                                                 FORMAT_TIMESPAN(t - n, USEC_PER_SEC));
 
                 return sd_bus_error_set(error, BUS_ERROR_AUTHENTICATION_LIMIT_HIT, "Too many login attempts, please try again later.");
         }
@@ -1149,6 +1329,7 @@
         case HOME_INACTIVE:
         case HOME_DIRTY:
         case HOME_ACTIVE:
+        case HOME_LINGERING:
         case HOME_LOCKED:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_ALREADY_FIXATED, "Home %s is already fixated.", h->user_name);
         case HOME_UNFIXATED:
@@ -1190,6 +1371,11 @@
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_ABSENT, "Home %s is currently missing or not plugged in.", h->user_name);
         case HOME_ACTIVE:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_ALREADY_ACTIVE, "Home %s is already active.", h->user_name);
+        case HOME_LINGERING:
+                /* If we are lingering, i.e. active but are supposed to be deactivated, then cancel this
+                 * timer if the user explicitly asks us to be active */
+                h->retry_deactivate_event_source = sd_event_source_disable_unref(h->retry_deactivate_event_source);
+                return 0;
         case HOME_LOCKED:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_LOCKED, "Home %s is currently locked.", h->user_name);
         case HOME_INACTIVE:
@@ -1236,6 +1422,7 @@
         case HOME_INACTIVE:
         case HOME_DIRTY:
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 break;
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "An operation on home %s is currently being executed.", h->user_name);
@@ -1245,7 +1432,7 @@
         if (r < 0)
                 return r;
 
-        return home_authenticate_internal(h, secret, state == HOME_ACTIVE ? HOME_AUTHENTICATING_WHILE_ACTIVE : HOME_AUTHENTICATING, error);
+        return home_authenticate_internal(h, secret, HOME_STATE_IS_ACTIVE(state) ? HOME_AUTHENTICATING_WHILE_ACTIVE : HOME_AUTHENTICATING, error);
 }
 
 static int home_deactivate_internal(Home *h, bool force, sd_bus_error *error) {
@@ -1253,12 +1440,22 @@
 
         assert(h);
 
+        home_unpin(h); /* unpin so that we can deactivate */
+
         r = home_start_work(h, force ? "deactivate-force" : "deactivate", h->record, NULL);
         if (r < 0)
-                return r;
+                /* Operation failed before it even started, reacquire pin fd, if state still dictates so */
+                home_update_pin_fd(h, _HOME_STATE_INVALID);
+        else {
+                home_set_state(h, HOME_DEACTIVATING);
+                r = 0;
+        }
 
-        home_set_state(h, HOME_DEACTIVATING);
-        return 0;
+        /* Let's start a timer to retry deactivation in 15. We'll stop the timer once we manage to deactivate
+         * the home directory again, or we start any other operation. */
+        home_start_retry_deactivate(h);
+
+        return r;
 }
 
 int home_deactivate(Home *h, bool force, sd_bus_error *error) {
@@ -1273,6 +1470,7 @@
         case HOME_LOCKED:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_LOCKED, "Home %s is currently locked.", h->user_name);
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 break;
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "An operation on home %s is currently being executed.", h->user_name);
@@ -1298,7 +1496,7 @@
                 if (IN_SET(t, USER_TEST_MAYBE, USER_TEST_UNDEFINED))
                         break; /* And if the image path test isn't conclusive, let's also go on */
 
-                if (IN_SET(t, -EBADFD, -ENOTDIR))
+                if (IN_SET(t, -EBADF, -ENOTDIR))
                         return sd_bus_error_setf(error, BUS_ERROR_HOME_EXISTS, "Selected home image of user %s already exists or has wrong inode type.", h->user_name);
 
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_EXISTS, "Selected home image of user %s already exists.", h->user_name);
@@ -1309,6 +1507,7 @@
         case HOME_ABSENT:
                 break;
         case HOME_ACTIVE:
+        case HOME_LINGERING:
         case HOME_LOCKED:
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "Home %s is currently being used, or an operation on home %s is currently being executed.", h->user_name, h->user_name);
@@ -1347,6 +1546,7 @@
         case HOME_DIRTY:
                 break;
         case HOME_ACTIVE:
+        case HOME_LINGERING:
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "Home %s is currently being used, or an operation on home %s is currently being executed.", h->user_name, h->user_name);
         }
@@ -1485,6 +1685,7 @@
         case HOME_INACTIVE:
         case HOME_DIRTY:
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 break;
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "An operation on home %s is currently being executed.", h->user_name);
@@ -1498,11 +1699,16 @@
         if (r < 0)
                 return r;
 
-        home_set_state(h, state == HOME_ACTIVE ? HOME_UPDATING_WHILE_ACTIVE : HOME_UPDATING);
+        home_set_state(h, HOME_STATE_IS_ACTIVE(state) ? HOME_UPDATING_WHILE_ACTIVE : HOME_UPDATING);
         return 0;
 }
 
-int home_resize(Home *h, uint64_t disk_size, UserRecord *secret, sd_bus_error *error) {
+int home_resize(Home *h,
+                uint64_t disk_size,
+                UserRecord *secret,
+                bool automatic,
+                sd_bus_error *error) {
+
         _cleanup_(user_record_unrefp) UserRecord *c = NULL;
         HomeState state;
         int r;
@@ -1520,6 +1726,7 @@
         case HOME_INACTIVE:
         case HOME_DIRTY:
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 break;
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "An operation on home %s is currently being executed.", h->user_name);
@@ -1529,6 +1736,12 @@
         if (r < 0)
                 return r;
 
+        /* If the user didn't specify any size explicitly and rebalancing is on, then the disk size is
+         * determined by automatic rebalancing and hence not user configured but determined by us and thus
+         * applied anyway. */
+        if (disk_size == UINT64_MAX && h->record->rebalance_weight != REBALANCE_WEIGHT_OFF)
+                return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Disk size is being determined by automatic disk space rebalancing.");
+
         if (disk_size == UINT64_MAX || disk_size == h->record->disk_size) {
                 if (h->record->disk_size == UINT64_MAX)
                         return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "No disk size to resize to specified.");
@@ -1550,6 +1763,11 @@
                 if (r < 0)
                         return r;
 
+                /* If user picked an explicit size, then turn off rebalancing, so that we don't undo what user chose */
+                r = user_record_set_rebalance_weight(c, REBALANCE_WEIGHT_OFF);
+                if (r < 0)
+                        return r;
+
                 r = user_record_update_last_changed(c, false);
                 if (r == -ECHRNG)
                         return sd_bus_error_setf(error, BUS_ERROR_HOME_RECORD_MISMATCH, "Record last change time of %s is newer than current time, cannot update.", h->user_name);
@@ -1564,11 +1782,11 @@
                 c = TAKE_PTR(signed_c);
         }
 
-        r = home_update_internal(h, "resize", c, secret, error);
+        r = home_update_internal(h, automatic ? "resize-auto" : "resize", c, secret, error);
         if (r < 0)
                 return r;
 
-        home_set_state(h, state == HOME_ACTIVE ? HOME_RESIZING_WHILE_ACTIVE : HOME_RESIZING);
+        home_set_state(h, HOME_STATE_IS_ACTIVE(state) ? HOME_RESIZING_WHILE_ACTIVE : HOME_RESIZING);
         return 0;
 }
 
@@ -1616,6 +1834,7 @@
         case HOME_INACTIVE:
         case HOME_DIRTY:
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 break;
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "An operation on home %s is currently being executed.", h->user_name);
@@ -1681,7 +1900,7 @@
         if (r < 0)
                 return r;
 
-        home_set_state(h, state == HOME_ACTIVE ? HOME_PASSWD_WHILE_ACTIVE : HOME_PASSWD);
+        home_set_state(h, HOME_STATE_IS_ACTIVE(state) ? HOME_PASSWD_WHILE_ACTIVE : HOME_PASSWD);
         return 0;
 }
 
@@ -1700,6 +1919,7 @@
         case HOME_DIRTY:
                 break;
         case HOME_ACTIVE:
+        case HOME_LINGERING:
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "Home %s is currently being used, or an operation on home %s is currently being executed.", h->user_name, h->user_name);
         }
@@ -1727,6 +1947,7 @@
         case HOME_LOCKED:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_LOCKED, "Home %s is already locked.", h->user_name);
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 break;
         default:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_BUSY, "An operation on home %s is currently being executed.", h->user_name);
@@ -1767,6 +1988,7 @@
         case HOME_ABSENT:
         case HOME_INACTIVE:
         case HOME_ACTIVE:
+        case HOME_LINGERING:
         case HOME_DIRTY:
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_NOT_LOCKED, "Home %s is not locked.", h->user_name);
         case HOME_LOCKED:
@@ -1789,7 +2011,7 @@
         /* Otherwise, let's see if the home directory is mounted. If so, we assume for sure the home
          * directory is active */
         if (user_record_test_home_directory(h->record) == USER_TEST_MOUNTED)
-                return HOME_ACTIVE;
+                return h->retry_deactivate_event_source ? HOME_LINGERING : HOME_ACTIVE;
 
         /* And if we see the image being gone, we report this as absent */
         r = user_record_test_image_path(h->record);
@@ -1802,28 +2024,48 @@
         return HOME_INACTIVE;
 }
 
-void home_process_notify(Home *h, char **l) {
+void home_process_notify(Home *h, char **l, int fd) {
+        _cleanup_close_ int taken_fd = TAKE_FD(fd);
         const char *e;
         int error;
         int r;
 
         assert(h);
 
-        e = strv_env_get(l, "ERRNO");
-        if (!e) {
-                log_debug("Got notify message lacking ERRNO= field, ignoring.");
+        e = strv_env_get(l, "SYSTEMD_LUKS_LOCK_FD");
+        if (e) {
+                r = parse_boolean(e);
+                if (r < 0)
+                        return (void) log_debug_errno(r, "Failed to parse SYSTEMD_LUKS_LOCK_FD value: %m");
+                if (r > 0) {
+                        if (taken_fd < 0)
+                                return (void) log_debug("Got notify message with SYSTEMD_LUKS_LOCK_FD=1 but no fd passed, ignoring: %m");
+
+                        close_and_replace(h->luks_lock_fd, taken_fd);
+
+                        log_debug("Successfully acquired LUKS lock fd from worker.");
+
+                        /* Immediately check if we actually want to keep it */
+                        home_maybe_close_luks_lock_fd(h, _HOME_STATE_INVALID);
+                } else {
+                        if (taken_fd >= 0)
+                                return (void) log_debug("Got notify message with SYSTEMD_LUKS_LOCK_FD=0 but fd passed, ignoring: %m");
+
+                        h->luks_lock_fd = safe_close(h->luks_lock_fd);
+                }
+
                 return;
         }
 
+        e = strv_env_get(l, "ERRNO");
+        if (!e)
+                return (void) log_debug("Got notify message lacking both ERRNO= and SYSTEMD_LUKS_LOCK_FD= field, ignoring.");
+
         r = safe_atoi(e, &error);
-        if (r < 0) {
-                log_debug_errno(r, "Failed to parse received error number, ignoring: %s", e);
-                return;
-        }
-        if (error <= 0) {
-                log_debug("Error number is out of range: %i", error);
-                return;
-        }
+        if (r < 0)
+                return (void) log_debug_errno(r, "Failed to parse received error number, ignoring: %s", e);
+        if (error <= 0)
+                return (void) log_debug("Error number is out of range: %i", error);
 
         h->worker_error_code = error;
 }
@@ -1902,29 +2144,27 @@
                 uint64_t *ret_disk_usage,
                 uint64_t *ret_disk_free,
                 uint64_t *ret_disk_ceiling,
-                uint64_t *ret_disk_floor) {
+                uint64_t *ret_disk_floor,
+                statfs_f_type_t *ret_fstype,
+                mode_t *ret_access_mode) {
 
         uint64_t disk_size = UINT64_MAX, disk_usage = UINT64_MAX, disk_free = UINT64_MAX,
                 disk_ceiling = UINT64_MAX, disk_floor = UINT64_MAX,
                 stat_used = UINT64_MAX, fs_size = UINT64_MAX, header_size = 0;
-
+        mode_t access_mode = MODE_INVALID;
+        statfs_f_type_t fstype = 0;
         struct statfs sfs;
+        struct stat st;
         const char *hd;
         int r;
 
         assert(h);
-        assert(ret_disk_size);
-        assert(ret_disk_usage);
-        assert(ret_disk_free);
-        assert(ret_disk_ceiling);
 
         if (state != HOME_ABSENT) {
                 const char *ip;
 
                 ip = user_record_image_path(h->record);
                 if (ip) {
-                        struct stat st;
-
                         if (stat(ip, &st) < 0)
                                 log_debug_errno(errno, "Failed to stat() %s, ignoring: %m", ip);
                         else if (S_ISREG(st.st_mode)) {
@@ -1933,9 +2173,9 @@
                                 disk_size = st.st_size;
                                 stat_used = st.st_blocks * 512;
 
-                                parent = dirname_malloc(ip);
-                                if (!parent)
-                                        return log_oom();
+                                r = path_extract_directory(ip, &parent);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to extract parent directory from image path '%s': %m", ip);
 
                                 if (statfs(parent, &sfs) < 0)
                                         log_debug_errno(errno, "Failed to statfs() %s, ignoring: %m", parent);
@@ -1972,11 +2212,26 @@
         if (!hd)
                 goto finish;
 
+        if (stat(hd, &st) < 0) {
+                log_debug_errno(errno, "Failed to stat() %s, ignoring: %m", hd);
+                goto finish;
+        }
+
+        r = stat_verify_directory(&st);
+        if (r < 0) {
+                log_debug_errno(r, "Home directory %s is not a directory, ignoring: %m", hd);
+                goto finish;
+        }
+
+        access_mode = st.st_mode & 07777;
+
         if (statfs(hd, &sfs) < 0) {
                 log_debug_errno(errno, "Failed to statfs() %s, ignoring: %m", hd);
                 goto finish;
         }
 
+        fstype = sfs.f_type;
+
         disk_free = sfs.f_bsize * sfs.f_bavail;
         fs_size = sfs.f_bsize * sfs.f_blocks;
         if (disk_size != UINT64_MAX && disk_size > fs_size)
@@ -1987,7 +2242,7 @@
          * that case the image is pre-allocated and thus appears all used from the host PoV but is not used
          * up at all yet from the user's PoV.
          *
-         * That said, we use use the stat() reported loopback file size as upper boundary: our footprint can
+         * That said, we use the stat() reported loopback file size as upper boundary: our footprint can
          * never be larger than what we take up on the lowest layers. */
 
         if (disk_size != UINT64_MAX && disk_size > disk_free) {
@@ -2006,11 +2261,20 @@
         if (disk_floor == UINT64_MAX)
                 disk_floor = minimal_size_by_fs_name(user_record_file_system_type(h->record));
 
-        *ret_disk_size = disk_size;
-        *ret_disk_usage = disk_usage;
-        *ret_disk_free = disk_free;
-        *ret_disk_ceiling = disk_ceiling;
-        *ret_disk_floor = disk_floor;
+        if (ret_disk_size)
+                *ret_disk_size = disk_size;
+        if (ret_disk_usage)
+                *ret_disk_usage = disk_usage;
+        if (ret_disk_free)
+                *ret_disk_free = disk_free;
+        if (ret_disk_ceiling)
+                *ret_disk_ceiling = disk_ceiling;
+        if (ret_disk_floor)
+                *ret_disk_floor = disk_floor;
+        if (ret_fstype)
+                *ret_fstype = fstype;
+        if (ret_access_mode)
+                *ret_access_mode = access_mode;
 
         return 0;
 }
@@ -2022,20 +2286,20 @@
                 uint64_t *ret_disk_usage,
                 uint64_t *ret_disk_free,
                 uint64_t *ret_disk_ceiling,
-                uint64_t *ret_disk_floor) {
+                uint64_t *ret_disk_floor,
+                statfs_f_type_t *ret_fstype,
+                mode_t *ret_access_mode) {
 
         uint64_t disk_size = UINT64_MAX, disk_usage = UINT64_MAX, disk_free = UINT64_MAX,
                 disk_ceiling = UINT64_MAX, disk_floor = UINT64_MAX;
+        mode_t access_mode = MODE_INVALID;
+        statfs_f_type_t fstype = 0;
         struct statfs sfs;
         struct dqblk req;
         const char *path = NULL;
         int r;
 
-        assert(ret_disk_size);
-        assert(ret_disk_usage);
-        assert(ret_disk_free);
-        assert(ret_disk_ceiling);
-        assert(ret_disk_floor);
+        assert(h);
 
         if (HOME_STATE_IS_ACTIVE(state))
                 path = user_record_home_directory(h->record);
@@ -2058,6 +2322,8 @@
 
                 /* We don't initialize disk_usage from statfs() data here, since the device is likely not used
                  * by us alone, and disk_usage should only reflect our own use. */
+
+                fstype = sfs.f_type;
         }
 
         if (IN_SET(h->record->storage, USER_CLASSIC, USER_DIRECTORY, USER_SUBVOLUME)) {
@@ -2146,15 +2412,96 @@
         }
 
 finish:
-        *ret_disk_size = disk_size;
-        *ret_disk_usage = disk_usage;
-        *ret_disk_free = disk_free;
-        *ret_disk_ceiling = disk_ceiling;
-        *ret_disk_floor = disk_floor;
+        if (ret_disk_size)
+                *ret_disk_size = disk_size;
+        if (ret_disk_usage)
+                *ret_disk_usage = disk_usage;
+        if (ret_disk_free)
+                *ret_disk_free = disk_free;
+        if (ret_disk_ceiling)
+                *ret_disk_ceiling = disk_ceiling;
+        if (ret_disk_floor)
+                *ret_disk_floor = disk_floor;
+        if (ret_fstype)
+                *ret_fstype = fstype;
+        if (ret_access_mode)
+                *ret_access_mode = access_mode;
 
         return 0;
 }
 
+static int home_get_disk_status_internal(
+                Home *h,
+                HomeState state,
+                uint64_t *ret_disk_size,
+                uint64_t *ret_disk_usage,
+                uint64_t *ret_disk_free,
+                uint64_t *ret_disk_ceiling,
+                uint64_t *ret_disk_floor,
+                statfs_f_type_t *ret_fstype,
+                mode_t *ret_access_mode) {
+
+        assert(h);
+        assert(h->record);
+
+        switch (h->record->storage) {
+
+        case USER_LUKS:
+                return home_get_disk_status_luks(h, state, ret_disk_size, ret_disk_usage, ret_disk_free, ret_disk_ceiling, ret_disk_floor, ret_fstype, ret_access_mode);
+
+        case USER_CLASSIC:
+        case USER_DIRECTORY:
+        case USER_SUBVOLUME:
+        case USER_FSCRYPT:
+        case USER_CIFS:
+                return home_get_disk_status_directory(h, state, ret_disk_size, ret_disk_usage, ret_disk_free, ret_disk_ceiling, ret_disk_floor, ret_fstype, ret_access_mode);
+
+        default:
+                /* don't know */
+
+                if (ret_disk_size)
+                        *ret_disk_size = UINT64_MAX;
+                if (ret_disk_usage)
+                        *ret_disk_usage = UINT64_MAX;
+                if (ret_disk_free)
+                        *ret_disk_free = UINT64_MAX;
+                if (ret_disk_ceiling)
+                        *ret_disk_ceiling = UINT64_MAX;
+                if (ret_disk_floor)
+                        *ret_disk_floor = UINT64_MAX;
+                if (ret_fstype)
+                        *ret_fstype = 0;
+                if (ret_access_mode)
+                        *ret_access_mode = MODE_INVALID;
+
+                return 0;
+        }
+}
+
+int home_get_disk_status(
+                Home *h,
+                uint64_t *ret_disk_size,
+                uint64_t *ret_disk_usage,
+                uint64_t *ret_disk_free,
+                uint64_t *ret_disk_ceiling,
+                uint64_t *ret_disk_floor,
+                statfs_f_type_t *ret_fstype,
+                mode_t *ret_access_mode) {
+
+        assert(h);
+
+        return home_get_disk_status_internal(
+                        h,
+                        home_get_state(h),
+                        ret_disk_size,
+                        ret_disk_usage,
+                        ret_disk_free,
+                        ret_disk_ceiling,
+                        ret_disk_floor,
+                        ret_fstype,
+                        ret_access_mode);
+}
+
 int home_augment_status(
                 Home *h,
                 UserRecordLoadFlags flags,
@@ -2163,7 +2510,9 @@
         uint64_t disk_size = UINT64_MAX, disk_usage = UINT64_MAX, disk_free = UINT64_MAX, disk_ceiling = UINT64_MAX, disk_floor = UINT64_MAX;
         _cleanup_(json_variant_unrefp) JsonVariant *j = NULL, *v = NULL, *m = NULL, *status = NULL;
         _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
-        char ids[SD_ID128_STRING_MAX];
+        statfs_f_type_t magic;
+        const char *fstype;
+        mode_t access_mode;
         HomeState state;
         sd_id128_t id;
         int r;
@@ -2180,29 +2529,19 @@
 
         state = home_get_state(h);
 
-        switch (h->record->storage) {
+        r = home_get_disk_status_internal(
+                        h, state,
+                        &disk_size,
+                        &disk_usage,
+                        &disk_free,
+                        &disk_ceiling,
+                        &disk_floor,
+                        &magic,
+                        &access_mode);
+        if (r < 0)
+                return r;
 
-        case USER_LUKS:
-                r = home_get_disk_status_luks(h, state, &disk_size, &disk_usage, &disk_free, &disk_ceiling, &disk_floor);
-                if (r < 0)
-                        return r;
-
-                break;
-
-        case USER_CLASSIC:
-        case USER_DIRECTORY:
-        case USER_SUBVOLUME:
-        case USER_FSCRYPT:
-        case USER_CIFS:
-                r = home_get_disk_status_directory(h, state, &disk_size, &disk_usage, &disk_free, &disk_ceiling, &disk_floor);
-                if (r < 0)
-                        return r;
-
-                break;
-
-        default:
-                ; /* unset */
-        }
+        fstype = fs_type_to_string(magic);
 
         if (disk_floor == UINT64_MAX || (disk_usage != UINT64_MAX && disk_floor < disk_usage))
                 disk_floor = disk_usage;
@@ -2214,20 +2553,22 @@
         r = json_build(&status,
                        JSON_BUILD_OBJECT(
                                        JSON_BUILD_PAIR("state", JSON_BUILD_STRING(home_state_to_string(state))),
-                                       JSON_BUILD_PAIR("service", JSON_BUILD_STRING("io.systemd.Home")),
+                                       JSON_BUILD_PAIR("service", JSON_BUILD_CONST_STRING("io.systemd.Home")),
                                        JSON_BUILD_PAIR_CONDITION(disk_size != UINT64_MAX, "diskSize", JSON_BUILD_UNSIGNED(disk_size)),
                                        JSON_BUILD_PAIR_CONDITION(disk_usage != UINT64_MAX, "diskUsage", JSON_BUILD_UNSIGNED(disk_usage)),
                                        JSON_BUILD_PAIR_CONDITION(disk_free != UINT64_MAX, "diskFree", JSON_BUILD_UNSIGNED(disk_free)),
                                        JSON_BUILD_PAIR_CONDITION(disk_ceiling != UINT64_MAX, "diskCeiling", JSON_BUILD_UNSIGNED(disk_ceiling)),
                                        JSON_BUILD_PAIR_CONDITION(disk_floor != UINT64_MAX, "diskFloor", JSON_BUILD_UNSIGNED(disk_floor)),
-                                       JSON_BUILD_PAIR_CONDITION(h->signed_locally >= 0, "signedLocally", JSON_BUILD_BOOLEAN(h->signed_locally))
+                                       JSON_BUILD_PAIR_CONDITION(h->signed_locally >= 0, "signedLocally", JSON_BUILD_BOOLEAN(h->signed_locally)),
+                                       JSON_BUILD_PAIR_CONDITION(fstype, "fileSystemType", JSON_BUILD_STRING(fstype)),
+                                       JSON_BUILD_PAIR_CONDITION(access_mode != MODE_INVALID, "accessMode", JSON_BUILD_UNSIGNED(access_mode))
                        ));
         if (r < 0)
                 return r;
 
         j = json_variant_ref(h->record->json);
         v = json_variant_ref(json_variant_by_key(j, "status"));
-        m = json_variant_ref(json_variant_by_key(v, sd_id128_to_string(id, ids)));
+        m = json_variant_ref(json_variant_by_key(v, SD_ID128_TO_STRING(id)));
 
         r = json_variant_filter(&m, STRV_MAKE("diskSize", "diskUsage", "diskFree", "diskCeiling", "diskFloor", "signedLocally"));
         if (r < 0)
@@ -2237,7 +2578,7 @@
         if (r < 0)
                 return r;
 
-        r = json_variant_set_field(&v, ids, m);
+        r = json_variant_set_field(&v, SD_ID128_TO_STRING(id), m);
         if (r < 0)
                 return r;
 
@@ -2263,10 +2604,9 @@
 
 static int on_home_ref_eof(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
         _cleanup_(operation_unrefp) Operation *o = NULL;
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(h);
 
         if (h->ref_event_source_please_suspend == s)
                 h->ref_event_source_please_suspend = sd_event_source_disable_unref(h->ref_event_source_please_suspend);
@@ -2290,7 +2630,7 @@
 }
 
 int home_create_fifo(Home *h, bool please_suspend) {
-        _cleanup_close_ int ret_fd = -1;
+        _cleanup_close_ int ret_fd = -EBADF;
         sd_event_source **ss;
         const char *fn, *suffix;
         int r;
@@ -2308,7 +2648,7 @@
         fn = strjoina("/run/systemd/home/", h->user_name, suffix);
 
         if (!*ss) {
-                _cleanup_close_ int ref_fd = -1;
+                _cleanup_close_ int ref_fd = -EBADF;
 
                 (void) mkdir("/run/systemd/home/", 0755);
                 if (mkfifo(fn, 0600) < 0 && errno != EEXIST)
@@ -2373,6 +2713,7 @@
                 break;
 
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 for_state = HOME_AUTHENTICATING_FOR_ACQUIRE;
                 call = home_authenticate_internal;
                 break;
@@ -2427,6 +2768,7 @@
                         break;
 
                 case HOME_ACTIVE:
+                case HOME_LINGERING:
                         r = home_deactivate_internal(h, false, &error);
                         break;
 
@@ -2471,6 +2813,7 @@
                 break;
 
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 log_info("Locking home %s.", h->user_name);
                 r = home_lock(h, &error);
                 break;
@@ -2515,6 +2858,7 @@
                 break;
 
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 log_info("Deactivating home %s.", h->user_name);
                 r = home_deactivate_internal(h, false, &error);
                 break;
@@ -2560,6 +2904,7 @@
                 break;
 
         case HOME_ACTIVE:
+        case HOME_LINGERING:
                 r = home_deactivate_internal(h, false, &error);
                 if (r < 0)
                         log_warning_errno(r, "Failed to deactivate %s, ignoring: %s", h->user_name, bus_error_message(&error, r));
@@ -2601,6 +2946,7 @@
 
         case HOME_ACTIVE:
         case HOME_LOCKED:
+        case HOME_LINGERING:
                 r = home_deactivate_internal(h, true, &error);
                 if (r < 0)
                         log_warning_errno(r, "Failed to forcibly deactivate %s, ignoring: %s", h->user_name, bus_error_message(&error, r));
@@ -2619,12 +2965,11 @@
 }
 
 static int on_pending(sd_event_source *s, void *userdata) {
-        Home *h = userdata;
+        Home *h = ASSERT_PTR(userdata);
         Operation *o;
         int r;
 
         assert(s);
-        assert(h);
 
         o = ordered_set_first(h->pending_operations);
         if (o) {
@@ -2653,6 +2998,8 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to disable event source: %m");
 
+        /* No operations pending anymore, maybe this is a good time to trigger a rebalancing */
+        manager_reschedule_rebalance(h->manager);
         return 0;
 }
 
@@ -2797,18 +3144,55 @@
 }
 
 int home_wait_for_worker(Home *h) {
+        int r;
+
         assert(h);
 
         if (h->worker_pid <= 0)
                 return 0;
 
         log_info("Worker process for home %s is still running while exiting. Waiting for it to finish.", h->user_name);
-        (void) wait_for_terminate(h->worker_pid, NULL);
+
+        r = wait_for_terminate_with_timeout(h->worker_pid, 30 * USEC_PER_SEC);
+        if (r == -ETIMEDOUT)
+                log_warning_errno(r, "Waiting for worker process for home %s timed out. Ignoring.", h->user_name);
+        else
+                log_warning_errno(r, "Failed to wait for worker process for home %s. Ignoring.", h->user_name);
+
         (void) hashmap_remove_value(h->manager->homes_by_worker_pid, PID_TO_PTR(h->worker_pid), h);
         h->worker_pid = 0;
         return 1;
 }
 
+bool home_shall_rebalance(Home *h) {
+        HomeState state;
+
+        assert(h);
+
+        /* Determines if the home directory is a candidate for rebalancing */
+
+        if (!user_record_shall_rebalance(h->record))
+                return false;
+
+        state = home_get_state(h);
+        if (!HOME_STATE_SHALL_REBALANCE(state))
+                return false;
+
+        return true;
+}
+
+bool home_is_busy(Home *h) {
+        assert(h);
+
+        if (h->current_operation)
+                return true;
+
+        if (!ordered_set_isempty(h->pending_operations))
+                return true;
+
+        return HOME_STATE_IS_EXECUTING_OPERATION(home_get_state(h));
+}
+
 static const char* const home_state_table[_HOME_STATE_MAX] = {
         [HOME_UNFIXATED]                   = "unfixated",
         [HOME_ABSENT]                      = "absent",
@@ -2821,6 +3205,7 @@
         [HOME_ACTIVATING_FOR_ACQUIRE]      = "activating-for-acquire",
         [HOME_DEACTIVATING]                = "deactivating",
         [HOME_ACTIVE]                      = "active",
+        [HOME_LINGERING]                   = "lingering",
         [HOME_LOCKING]                     = "locking",
         [HOME_LOCKED]                      = "locked",
         [HOME_UNLOCKING]                   = "unlocking",
diff --git a/src/home/homed-home.h b/src/home/homed-home.h
index 2fba86f..0f314aa 100644
--- a/src/home/homed-home.h
+++ b/src/home/homed-home.h
@@ -7,6 +7,7 @@
 #include "homed-operation.h"
 #include "list.h"
 #include "ordered-set.h"
+#include "stat-util.h"
 #include "user-record.h"
 
 typedef enum HomeState {
@@ -21,6 +22,7 @@
         HOME_ACTIVATING_FOR_ACQUIRE,  /* activating because Acquire() was called */
         HOME_DEACTIVATING,
         HOME_ACTIVE,                  /* logged in right now */
+        HOME_LINGERING,               /* not logged in anymore, but we didn't manage to deactivate (because some process keeps it busy?) but we'll keep trying */
         HOME_LOCKING,
         HOME_LOCKED,
         HOME_UNLOCKING,
@@ -43,6 +45,7 @@
 static inline bool HOME_STATE_IS_ACTIVE(HomeState state) {
         return IN_SET(state,
                       HOME_ACTIVE,
+                      HOME_LINGERING,
                       HOME_UPDATING_WHILE_ACTIVE,
                       HOME_RESIZING_WHILE_ACTIVE,
                       HOME_PASSWD_WHILE_ACTIVE,
@@ -74,6 +77,35 @@
                       HOME_AUTHENTICATING_FOR_ACQUIRE);
 }
 
+static inline bool HOME_STATE_SHALL_PIN(HomeState state) {
+        /* Like HOME_STATE_IS_ACTIVE() – but HOME_LINGERING is missing! */
+        return IN_SET(state,
+                      HOME_ACTIVE,
+                      HOME_UPDATING_WHILE_ACTIVE,
+                      HOME_RESIZING_WHILE_ACTIVE,
+                      HOME_PASSWD_WHILE_ACTIVE,
+                      HOME_AUTHENTICATING_WHILE_ACTIVE,
+                      HOME_AUTHENTICATING_FOR_ACQUIRE);
+}
+
+#define HOME_STATE_SHALL_REBALANCE(state) HOME_STATE_SHALL_PIN(state)
+
+static inline bool HOME_STATE_MAY_RETRY_DEACTIVATE(HomeState state) {
+        /* Indicates when to leave the deactivate retry timer active */
+        return IN_SET(state,
+                      HOME_ACTIVE,
+                      HOME_LINGERING,
+                      HOME_DEACTIVATING,
+                      HOME_LOCKING,
+                      HOME_UNLOCKING,
+                      HOME_UNLOCKING_FOR_ACQUIRE,
+                      HOME_UPDATING_WHILE_ACTIVE,
+                      HOME_RESIZING_WHILE_ACTIVE,
+                      HOME_PASSWD_WHILE_ACTIVE,
+                      HOME_AUTHENTICATING_WHILE_ACTIVE,
+                      HOME_AUTHENTICATING_FOR_ACQUIRE);
+}
+
 struct Home {
         Manager *manager;
         char *user_name;
@@ -107,7 +139,7 @@
 
         /* The reading side of a FIFO stored in /run/systemd/home/, the writing side being used for reference
          * counting. The references dropped to zero as soon as we see EOF. This concept exists twice: once
-         * for clients that are fine if we suspend the home directory on system suspend, and once for cliets
+         * for clients that are fine if we suspend the home directory on system suspend, and once for clients
          * that are not ok with that. This allows us to determine for each home whether there are any clients
          * that support unsuspend. */
         sd_event_source *ref_event_source_please_suspend;
@@ -126,6 +158,21 @@
 
         /* Used to coalesce bus PropertiesChanged events */
         sd_event_source *deferred_change_event_source;
+
+        /* An fd to the top-level home directory we keep while logged in, to keep the dir busy */
+        int pin_fd;
+
+        /* A time event used to repeatedly try to unmount home dir after use if it didn't work on first try */
+        sd_event_source *retry_deactivate_event_source;
+
+        /* An fd that locks the backing file of LUKS home dirs with a BSD lock. */
+        int luks_lock_fd;
+
+        /* Space metrics during rebalancing */
+        uint64_t rebalance_size, rebalance_usage, rebalance_free, rebalance_min, rebalance_weight, rebalance_goal;
+
+        /* Whether a rebalance operation is pending */
+        bool rebalance_pending;
 };
 
 int home_new(Manager *m, UserRecord *hr, const char *sysfs, Home **ret);
@@ -144,7 +191,7 @@
 int home_create(Home *h, UserRecord *secret, sd_bus_error *error);
 int home_remove(Home *h, sd_bus_error *error);
 int home_update(Home *h, UserRecord *new_record, sd_bus_error *error);
-int home_resize(Home *h, uint64_t disk_size, UserRecord *secret, sd_bus_error *error);
+int home_resize(Home *h, uint64_t disk_size, UserRecord *secret, bool automatic, sd_bus_error *error);
 int home_passwd(Home *h, UserRecord *new_secret, UserRecord *old_secret, sd_bus_error *error);
 int home_unregister(Home *h, sd_bus_error *error);
 int home_lock(Home *h, sd_bus_error *error);
@@ -152,7 +199,9 @@
 
 HomeState home_get_state(Home *h);
 
-void home_process_notify(Home *h, char **l);
+int home_get_disk_status(Home *h, uint64_t *ret_disk_size,uint64_t *ret_disk_usage, uint64_t *ret_disk_free, uint64_t *ret_disk_ceiling, uint64_t *ret_disk_floor, statfs_f_type_t *ret_fstype, mode_t *ret_access_mode);
+
+void home_process_notify(Home *h, char **l, int fd);
 
 int home_killall(Home *h);
 
@@ -167,5 +216,9 @@
 
 int home_wait_for_worker(Home *h);
 
+bool home_shall_rebalance(Home *h);
+
+bool home_is_busy(Home *h);
+
 const char *home_state_to_string(HomeState state);
 HomeState home_state_from_string(const char *s);
diff --git a/src/home/homed-manager-bus.c b/src/home/homed-manager-bus.c
index 7ac5b8d..0c0c292 100644
--- a/src/home/homed-manager-bus.c
+++ b/src/home/homed-manager-bus.c
@@ -24,13 +24,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         r = sd_bus_message_open_container(reply, 'a', "(sso)");
         if (r < 0)
@@ -39,7 +38,6 @@
         HASHMAP_FOREACH(h, m->homes_by_name) {
                 _cleanup_(strv_freep) char **seats = NULL;
                 _cleanup_free_ char *home_path = NULL;
-                char **s;
 
                 r = home_auto_login(h, &seats);
                 if (r < 0) {
@@ -70,12 +68,11 @@
 
         _cleanup_free_ char *path = NULL;
         const char *user_name;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &user_name);
         if (r < 0)
@@ -108,13 +105,12 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *path = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint32_t uid;
         int r;
         Home *h;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "u", &uid);
         if (r < 0)
@@ -149,12 +145,11 @@
                 sd_bus_error *error) {
 
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_new_method_return(message, &reply);
         if (r < 0)
@@ -198,14 +193,13 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *json = NULL, *path = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *user_name;
         bool incomplete;
         Home *h;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &user_name);
         if (r < 0)
@@ -238,14 +232,13 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *json = NULL, *path = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         bool incomplete;
         uint32_t uid;
         Home *h;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "u", &uid);
         if (r < 0)
@@ -391,12 +384,11 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
         assert(message);
-        assert(m);
 
         r = bus_message_read_home_record(message, USER_RECORD_LOAD_EMBEDDED|USER_RECORD_PERMISSIVE, &hr, error);
         if (r < 0)
@@ -439,12 +431,11 @@
                 sd_bus_error *error) {
 
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
         assert(message);
-        assert(m);
 
         r = bus_message_read_home_record(message, USER_RECORD_REQUIRE_REGULAR|USER_RECORD_ALLOW_SECRET|USER_RECORD_ALLOW_PRIVILEGED|USER_RECORD_ALLOW_PER_MACHINE|USER_RECORD_ALLOW_SIGNATURE, &hr, error);
         if (r < 0)
@@ -506,12 +497,11 @@
 
 static int method_update_home(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
         assert(message);
-        assert(m);
 
         r = bus_message_read_home_record(message, USER_RECORD_REQUIRE_REGULAR|USER_RECORD_ALLOW_SECRET|USER_RECORD_ALLOW_PRIVILEGED|USER_RECORD_ALLOW_PER_MACHINE|USER_RECORD_ALLOW_SIGNATURE|USER_RECORD_PERMISSIVE, &hr, error);
         if (r < 0)
@@ -557,12 +547,10 @@
 static int method_lock_all_homes(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(operation_unrefp) Operation *o = NULL;
         bool waiting = false;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
-        assert(m);
-
         /* This is called from logind when we are preparing for system suspend. We enqueue a lock operation
          * for every suitable home we have and only when all of them completed we send a reply indicating
          * completion. */
@@ -600,12 +588,10 @@
 static int method_deactivate_all_homes(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(operation_unrefp) Operation *o = NULL;
         bool waiting = false;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
-        assert(m);
-
         /* This is called from systemd-homed-activate.service's ExecStop= command to ensure that all home
          * directories are shutdown before the system goes down. Note that we don't do this from
          * systemd-homed.service itself since we want to allow restarting of it without tearing down all home
@@ -635,179 +621,162 @@
         return sd_bus_reply_method_return(message, NULL);
 }
 
+static int method_rebalance(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        Manager *m = ASSERT_PTR(userdata);
+        int r;
+
+        r = manager_schedule_rebalance(m, /* immediately= */ true);
+        if (r == 0)
+                return sd_bus_reply_method_errorf(message, BUS_ERROR_REBALANCE_NOT_NEEDED, "No home directories need rebalancing.");
+        if (r < 0)
+                return r;
+
+        /* Keep a reference to this message, so that we can reply to it once we are done */
+        r = set_ensure_put(&m->rebalance_queued_method_calls, &bus_message_hash_ops, message);
+        if (r < 0)
+                return log_error_errno(r, "Failed to track rebalance bus message: %m");
+
+        sd_bus_message_ref(message);
+        return 1;
+}
+
 static const sd_bus_vtable manager_vtable[] = {
         SD_BUS_VTABLE_START(0),
 
         SD_BUS_PROPERTY("AutoLogin", "a(sso)", property_get_auto_login, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
 
-        SD_BUS_METHOD_WITH_NAMES("GetHomeByName",
-                                 "s",
-                                 SD_BUS_PARAM(user_name),
-                                 "usussso",
-                                 SD_BUS_PARAM(uid)
-                                 SD_BUS_PARAM(home_state)
-                                 SD_BUS_PARAM(gid)
-                                 SD_BUS_PARAM(real_name)
-                                 SD_BUS_PARAM(home_directory)
-                                 SD_BUS_PARAM(shell)
-                                 SD_BUS_PARAM(bus_path),
-                                 method_get_home_by_name,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetHomeByUID",
-                                 "u",
-                                 SD_BUS_PARAM(uid),
-                                 "ssussso",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(home_state)
-                                 SD_BUS_PARAM(gid)
-                                 SD_BUS_PARAM(real_name)
-                                 SD_BUS_PARAM(home_directory)
-                                 SD_BUS_PARAM(shell)
-                                 SD_BUS_PARAM(bus_path),
-                                 method_get_home_by_uid,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUserRecordByName",
-                                 "s",
-                                 SD_BUS_PARAM(user_name),
-                                 "sbo",
-                                 SD_BUS_PARAM(user_record)
-                                 SD_BUS_PARAM(incomplete)
-                                 SD_BUS_PARAM(bus_path),
-                                 method_get_user_record_by_name,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("GetUserRecordByUID",
-                                 "u",
-                                 SD_BUS_PARAM(uid),
-                                 "sbo",
-                                 SD_BUS_PARAM(user_record)
-                                 SD_BUS_PARAM(incomplete)
-                                 SD_BUS_PARAM(bus_path),
-                                 method_get_user_record_by_uid,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("ListHomes",
-                                 NULL,,
-                                 "a(susussso)",
-                                 SD_BUS_PARAM(home_areas),
-                                 method_list_homes,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetHomeByName",
+                                SD_BUS_ARGS("s", user_name),
+                                SD_BUS_RESULT("u", uid,
+                                              "s", home_state,
+                                              "u", gid,
+                                              "s", real_name,
+                                              "s", home_directory,
+                                              "s", shell,
+                                              "o", bus_path),
+                                method_get_home_by_name,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetHomeByUID",
+                                SD_BUS_ARGS("u", uid),
+                                SD_BUS_RESULT("s", user_name,
+                                              "s", home_state,
+                                              "u", gid,
+                                              "s", real_name,
+                                              "s", home_directory,
+                                              "s", shell,
+                                              "o", bus_path),
+                                method_get_home_by_uid,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUserRecordByName",
+                                SD_BUS_ARGS("s", user_name),
+                                SD_BUS_RESULT("s", user_record, "b", incomplete, "o", bus_path),
+                                method_get_user_record_by_name,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("GetUserRecordByUID",
+                                SD_BUS_ARGS("u", uid),
+                                SD_BUS_RESULT("s", user_record, "b", incomplete, "o", bus_path),
+                                method_get_user_record_by_uid,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("ListHomes",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(susussso)", home_areas),
+                                method_list_homes,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         /* The following methods directly execute an operation on a home area, without ref-counting, queueing
          * or anything, and are accessible through homectl. */
-        SD_BUS_METHOD_WITH_NAMES("ActivateHome",
-                                 "ss",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 method_activate_home,
-                                 SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("DeactivateHome",
-                                 "s",
-                                 SD_BUS_PARAM(user_name),
-                                 NULL,,
-                                 method_deactivate_home,
-                                 0),
+        SD_BUS_METHOD_WITH_ARGS("ActivateHome",
+                                SD_BUS_ARGS("s", user_name, "s", secret),
+                                SD_BUS_NO_RESULT,
+                                method_activate_home,
+                                SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("DeactivateHome",
+                                SD_BUS_ARGS("s", user_name),
+                                SD_BUS_NO_RESULT,
+                                method_deactivate_home,
+                                0),
 
         /* Add the JSON record to homed, but don't create actual $HOME */
-        SD_BUS_METHOD_WITH_NAMES("RegisterHome",
-                                 "s",
-                                 SD_BUS_PARAM(user_record),
-                                 NULL,,
-                                 method_register_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RegisterHome",
+                                SD_BUS_ARGS("s", user_record),
+                                SD_BUS_NO_RESULT,
+                                method_register_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         /* Remove the JSON record from homed, but don't remove actual $HOME  */
-        SD_BUS_METHOD_WITH_NAMES("UnregisterHome",
-                                 "s",
-                                 SD_BUS_PARAM(user_name),
-                                 NULL,,
-                                 method_unregister_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("UnregisterHome",
+                                SD_BUS_ARGS("s", user_name),
+                                SD_BUS_NO_RESULT,
+                                method_unregister_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         /* Add JSON record, and create $HOME for it */
-        SD_BUS_METHOD_WITH_NAMES("CreateHome",
-                                 "s",
-                                 SD_BUS_PARAM(user_record),
-                                 NULL,,
-                                 method_create_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("CreateHome",
+                                SD_BUS_ARGS("s", user_record),
+                                SD_BUS_NO_RESULT,
+                                method_create_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
 
         /* Create $HOME for already registered JSON entry */
-        SD_BUS_METHOD_WITH_NAMES("RealizeHome",
-                                 "ss",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 method_realize_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("RealizeHome",
+                                SD_BUS_ARGS("s", user_name, "s", secret),
+                                SD_BUS_NO_RESULT,
+                                method_realize_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
 
         /* Remove the JSON record and remove $HOME */
-        SD_BUS_METHOD_WITH_NAMES("RemoveHome",
-                                 "s",
-                                 SD_BUS_PARAM(user_name),
-                                 NULL,,
-                                 method_remove_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RemoveHome",
+                                SD_BUS_ARGS("s", user_name),
+                                SD_BUS_NO_RESULT,
+                                method_remove_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         /* Investigate $HOME and propagate contained JSON record into our database */
-        SD_BUS_METHOD_WITH_NAMES("FixateHome",
-                                 "ss",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 method_fixate_home,
-                                 SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("FixateHome",
+                                SD_BUS_ARGS("s", user_name, "s", secret),
+                                SD_BUS_NO_RESULT,
+                                method_fixate_home,
+                                SD_BUS_VTABLE_SENSITIVE),
 
         /* Just check credentials */
-        SD_BUS_METHOD_WITH_NAMES("AuthenticateHome",
-                                 "ss",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 method_authenticate_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("AuthenticateHome",
+                                SD_BUS_ARGS("s", user_name, "s", secret),
+                                SD_BUS_NO_RESULT,
+                                method_authenticate_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
 
         /* Update the JSON record of existing user */
-        SD_BUS_METHOD_WITH_NAMES("UpdateHome",
-                                 "s",
-                                 SD_BUS_PARAM(user_record),
-                                 NULL,,
-                                 method_update_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("UpdateHome",
+                                SD_BUS_ARGS("s", user_record),
+                                SD_BUS_NO_RESULT,
+                                method_update_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
 
-        SD_BUS_METHOD_WITH_NAMES("ResizeHome",
-                                 "sts",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(size)
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 method_resize_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("ResizeHome",
+                                SD_BUS_ARGS("s", user_name, "t", size, "s", secret),
+                                SD_BUS_NO_RESULT,
+                                method_resize_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
 
-        SD_BUS_METHOD_WITH_NAMES("ChangePasswordHome",
-                                 "sss",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(new_secret)
-                                 SD_BUS_PARAM(old_secret),
-                                 NULL,,
-                                 method_change_password_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("ChangePasswordHome",
+                                SD_BUS_ARGS("s", user_name, "s", new_secret, "s", old_secret),
+                                SD_BUS_NO_RESULT,
+                                method_change_password_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
 
         /* Prepare active home for system suspend: flush out passwords, suspend access */
-        SD_BUS_METHOD_WITH_NAMES("LockHome",
-                                 "s",
-                                 SD_BUS_PARAM(user_name),
-                                 NULL,,
-                                 method_lock_home,
-                                 0),
+        SD_BUS_METHOD_WITH_ARGS("LockHome",
+                                SD_BUS_ARGS("s", user_name),
+                                SD_BUS_NO_RESULT,
+                                method_lock_home,
+                                0),
 
         /* Make $HOME usable after system resume again */
-        SD_BUS_METHOD_WITH_NAMES("UnlockHome",
-                                 "ss",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(secret),
-                                 NULL,,
-                                 method_unlock_home,
-                                 SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("UnlockHome",
+                                SD_BUS_ARGS("s", user_name, "s", secret),
+                                SD_BUS_NO_RESULT,
+                                method_unlock_home,
+                                SD_BUS_VTABLE_SENSITIVE),
 
         /* The following methods implement ref-counted activation, and are what the PAM module and "homectl
          * with" use. In contrast to the methods above which fail if an operation is already being executed
@@ -816,33 +785,26 @@
          * the state of the home area, so that the end result is always the same (i.e. the home directory is
          * accessible), and we always validate the specified passwords. RefHome() will not authenticate, and
          * thus only works if the home area is already active. */
-        SD_BUS_METHOD_WITH_NAMES("AcquireHome",
-                                 "ssb",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(secret)
-                                 SD_BUS_PARAM(please_suspend),
-                                 "h",
-                                 SD_BUS_PARAM(send_fd),
-                                 method_acquire_home,
-                                 SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
-        SD_BUS_METHOD_WITH_NAMES("RefHome",
-                                 "sb",
-                                 SD_BUS_PARAM(user_name)
-                                 SD_BUS_PARAM(please_suspend),
-                                 "h",
-                                 SD_BUS_PARAM(send_fd),
-                                 method_ref_home,
-                                 0),
-        SD_BUS_METHOD_WITH_NAMES("ReleaseHome",
-                                 "s",
-                                 SD_BUS_PARAM(user_name),
-                                 NULL,,
-                                 method_release_home,
-                                 0),
+        SD_BUS_METHOD_WITH_ARGS("AcquireHome",
+                                SD_BUS_ARGS("s", user_name, "s", secret, "b", please_suspend),
+                                SD_BUS_RESULT("h", send_fd),
+                                method_acquire_home,
+                                SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE),
+        SD_BUS_METHOD_WITH_ARGS("RefHome",
+                                SD_BUS_ARGS("s", user_name, "b", please_suspend),
+                                SD_BUS_RESULT("h", send_fd),
+                                method_ref_home,
+                                0),
+        SD_BUS_METHOD_WITH_ARGS("ReleaseHome",
+                                SD_BUS_ARGS("s", user_name),
+                                SD_BUS_NO_RESULT,
+                                method_release_home,
+                                0),
 
         /* An operation that acts on all homes that allow it */
         SD_BUS_METHOD("LockAllHomes", NULL, NULL, method_lock_all_homes, 0),
         SD_BUS_METHOD("DeactivateAllHomes", NULL, NULL, method_deactivate_all_homes, 0),
+        SD_BUS_METHOD("Rebalance", NULL, NULL, method_rebalance, 0),
 
         SD_BUS_VTABLE_END
 };
@@ -855,11 +817,9 @@
 };
 
 static int on_deferred_auto_login(sd_event_source *s, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
-        assert(m);
-
         m->deferred_auto_login_event_source = sd_event_source_disable_unref(m->deferred_auto_login_event_source);
 
         r = sd_bus_emit_properties_changed(
diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c
index b255426..b079d1f 100644
--- a/src/home/homed-manager.c
+++ b/src/home/homed-manager.c
@@ -3,12 +3,15 @@
 #include <grp.h>
 #include <linux/fs.h>
 #include <linux/magic.h>
+#include <math.h>
 #include <openssl/pem.h>
 #include <pwd.h>
 #include <sys/ioctl.h>
 #include <sys/quota.h>
 #include <sys/stat.h>
 
+#include "sd-id128.h"
+
 #include "btrfs-util.h"
 #include "bus-common-errors.h"
 #include "bus-error.h"
@@ -22,6 +25,7 @@
 #include "fileio.h"
 #include "format-util.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "gpt.h"
 #include "home-util.h"
 #include "homed-conf.h"
@@ -35,9 +39,12 @@
 #include "process-util.h"
 #include "quota-util.h"
 #include "random-util.h"
+#include "resize-fs.h"
 #include "socket-util.h"
+#include "sort-util.h"
 #include "stat-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "tmpfile-util.h"
 #include "udev-util.h"
 #include "user-record-sign.h"
@@ -82,53 +89,55 @@
         m->inotify_event_source = sd_event_source_disable_unref(m->inotify_event_source);
         m->scan_slash_home = false;
 
-        if (statfs("/home/", &sfs) < 0) {
+        if (statfs(get_home_root(), &sfs) < 0) {
                 log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
-                               "Failed to statfs() /home/ directory, disabling automatic scanning.");
+                               "Failed to statfs() %s directory, disabling automatic scanning.", get_home_root());
                 return;
         }
 
         if (is_network_fs(&sfs)) {
-                log_info("/home/ is a network file system, disabling automatic scanning.");
+                log_info("%s is a network file system, disabling automatic scanning.", get_home_root());
                 return;
         }
 
         if (is_fs_type(&sfs, AUTOFS_SUPER_MAGIC)) {
-                log_info("/home/ is on autofs, disabling automatic scanning.");
+                log_info("%s is on autofs, disabling automatic scanning.", get_home_root());
                 return;
         }
 
         m->scan_slash_home = true;
 
-        r = sd_event_add_inotify(m->event, &m->inotify_event_source, "/home/",
+        r = sd_event_add_inotify(m->event, &m->inotify_event_source, get_home_root(),
                                  IN_CREATE|IN_CLOSE_WRITE|IN_DELETE_SELF|IN_MOVE_SELF|IN_ONLYDIR|IN_MOVED_TO|IN_MOVED_FROM|IN_DELETE,
                                  on_home_inotify, m);
         if (r < 0)
                 log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
-                               "Failed to create inotify watch on /home/, ignoring.");
+                               "Failed to create inotify watch on %s, ignoring.", get_home_root());
 
         (void) sd_event_source_set_description(m->inotify_event_source, "home-inotify");
+
+        log_info("Watching %s.", get_home_root());
 }
 
 static int on_home_inotify(sd_event_source *s, const struct inotify_event *event, void *userdata) {
-        Manager *m = userdata;
+        _cleanup_free_ char *j = NULL;
+        Manager *m = ASSERT_PTR(userdata);
         const char *e, *n;
 
-        assert(m);
         assert(event);
 
         if ((event->mask & (IN_Q_OVERFLOW|IN_MOVE_SELF|IN_DELETE_SELF|IN_IGNORED|IN_UNMOUNT)) != 0) {
 
                 if (FLAGS_SET(event->mask, IN_Q_OVERFLOW))
-                        log_debug("/home/ inotify queue overflow, rescanning.");
+                        log_debug("%s inotify queue overflow, rescanning.", get_home_root());
                 else if (FLAGS_SET(event->mask, IN_MOVE_SELF))
-                        log_info("/home/ moved or renamed, recreating watch and rescanning.");
+                        log_info("%s moved or renamed, recreating watch and rescanning.", get_home_root());
                 else if (FLAGS_SET(event->mask, IN_DELETE_SELF))
-                        log_info("/home/ deleted, recreating watch and rescanning.");
+                        log_info("%s deleted, recreating watch and rescanning.", get_home_root());
                 else if (FLAGS_SET(event->mask, IN_UNMOUNT))
-                        log_info("/home/ unmounted, recreating watch and rescanning.");
+                        log_info("%s unmounted, recreating watch and rescanning.", get_home_root());
                 else if (FLAGS_SET(event->mask, IN_IGNORED))
-                        log_info("/home/ watch invalidated, recreating watch and rescanning.");
+                        log_info("%s watch invalidated, recreating watch and rescanning.", get_home_root());
 
                 manager_watch_home(m);
                 (void) manager_gc_images(m);
@@ -145,19 +154,23 @@
         if (!e)
                 return 0;
 
-        n = strndupa(event->name, e - event->name);
+        n = strndupa_safe(event->name, e - event->name);
         if (!suitable_user_name(n))
                 return 0;
 
+        j = path_join(get_home_root(), event->name);
+        if (!j)
+                return log_oom();
+
         if ((event->mask & (IN_CREATE|IN_CLOSE_WRITE|IN_MOVED_TO)) != 0) {
                 if (FLAGS_SET(event->mask, IN_CREATE))
-                        log_debug("/home/%s has been created, having a look.", event->name);
+                        log_debug("%s has been created, having a look.", j);
                 else if (FLAGS_SET(event->mask, IN_CLOSE_WRITE))
-                        log_debug("/home/%s has been modified, having a look.", event->name);
+                        log_debug("%s has been modified, having a look.", j);
                 else if (FLAGS_SET(event->mask, IN_MOVED_TO))
-                        log_debug("/home/%s has been moved in, having a look.", event->name);
+                        log_debug("%s has been moved in, having a look.", j);
 
-                (void) manager_assess_image(m, -1, "/home/", event->name);
+                (void) manager_assess_image(m, -1, get_home_root(), event->name);
                 (void) bus_manager_emit_auto_login_changed(m);
         }
 
@@ -165,11 +178,11 @@
                 Home *h;
 
                 if (FLAGS_SET(event->mask, IN_DELETE))
-                        log_debug("/home/%s has been deleted, revalidating.", event->name);
+                        log_debug("%s has been deleted, revalidating.", j);
                 else if (FLAGS_SET(event->mask, IN_CLOSE_WRITE))
-                        log_debug("/home/%s has been closed after writing, revalidating.", event->name);
+                        log_debug("%s has been closed after writing, revalidating.", j);
                 else if (FLAGS_SET(event->mask, IN_MOVED_FROM))
-                        log_debug("/home/%s has been moved away, revalidating.", event->name);
+                        log_debug("%s has been moved away, revalidating.", j);
 
                 h = hashmap_get(m->homes_by_name, n);
                 if (h) {
@@ -193,6 +206,7 @@
 
         *m = (Manager) {
                 .default_storage = _USER_STORAGE_INVALID,
+                .rebalance_interval_usec = 2 * USEC_PER_MINUTE, /* initially, rebalance every 2min */
         };
 
         r = manager_parse_config_file(m);
@@ -241,8 +255,8 @@
         HASHMAP_FOREACH(h, m->homes_by_worker_pid)
                 (void) home_wait_for_worker(h);
 
-        sd_bus_flush_close_unref(m->bus);
-        bus_verify_polkit_async_registry_free(m->polkit_registry);
+        m->bus = sd_bus_flush_close_unref(m->bus);
+        m->polkit_registry = bus_verify_polkit_async_registry_free(m->polkit_registry);
 
         m->device_monitor = sd_device_monitor_unref(m->device_monitor);
 
@@ -251,13 +265,14 @@
         m->deferred_rescan_event_source = sd_event_source_unref(m->deferred_rescan_event_source);
         m->deferred_gc_event_source = sd_event_source_unref(m->deferred_gc_event_source);
         m->deferred_auto_login_event_source = sd_event_source_unref(m->deferred_auto_login_event_source);
+        m->rebalance_event_source = sd_event_source_unref(m->rebalance_event_source);
 
-        sd_event_unref(m->event);
+        m->event = sd_event_unref(m->event);
 
-        hashmap_free(m->homes_by_uid);
-        hashmap_free(m->homes_by_name);
-        hashmap_free(m->homes_by_worker_pid);
-        hashmap_free(m->homes_by_sysfs);
+        m->homes_by_uid = hashmap_free(m->homes_by_uid);
+        m->homes_by_name = hashmap_free(m->homes_by_name);
+        m->homes_by_worker_pid = hashmap_free(m->homes_by_worker_pid);
+        m->homes_by_sysfs = hashmap_free(m->homes_by_sysfs);
 
         if (m->private_key)
                 EVP_PKEY_free(m->private_key);
@@ -428,20 +443,19 @@
         if (unlinkat(dir_fd, fname, 0) < 0)
                 return log_error_errno(errno, "Failed to remove empty user record file %s: %m", fname);
 
-        log_notice("Discovered empty user record file /var/lib/systemd/home/%s, removed automatically.", fname);
+        log_notice("Discovered empty user record file %s/%s, removed automatically.", home_record_dir(), fname);
         return 0;
 }
 
 static int manager_enumerate_records(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
 
         assert(m);
 
-        d = opendir("/var/lib/systemd/home/");
+        d = opendir(home_record_dir());
         if (!d)
                 return log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, errno,
-                                      "Failed to open /var/lib/systemd/home/: %m");
+                                      "Failed to open %s: %m", home_record_dir());
 
         FOREACH_DIRENT(de, d, return log_error_errno(errno, "Failed to read record directory: %m")) {
                 _cleanup_free_ char *n = NULL;
@@ -470,7 +484,6 @@
 static int search_quota(uid_t uid, const char *exclude_quota_path) {
         struct stat exclude_st = {};
         dev_t previous_devno = 0;
-        const char *where;
         int r;
 
         /* Checks whether the specified UID owns any files on the files system, but ignore any file system
@@ -486,7 +499,7 @@
          * comprehensive, but should cover most cases. Note that in an ideal world every user would be
          * registered in NSS and avoid our own UID range, but for all other cases, it's a good idea to be
          * paranoid and check quota if we can. */
-        FOREACH_STRING(where, "/home/", "/tmp/", "/var/", "/var/mail/", "/var/tmp/", "/var/spool/") {
+        FOREACH_STRING(where, get_home_root(), "/tmp/", "/var/", "/var/mail/", "/var/tmp/", "/var/spool/") {
                 struct dqblk req;
                 struct stat st;
 
@@ -516,7 +529,7 @@
 
                 previous_devno = st.st_dev;
 
-                r = quotactl_devno(QCMD_FIXED(Q_GETQUOTA, USRQUOTA), st.st_dev, uid, &req);
+                r = quotactl_devnum(QCMD_FIXED(Q_GETQUOTA, USRQUOTA), st.st_dev, uid, &req);
                 if (r < 0) {
                         if (ERRNO_IS_NOT_SUPPORTED(r))
                                 log_debug_errno(r, "No UID quota support on %s, ignoring.", where);
@@ -597,7 +610,7 @@
                         break;
 
                 default:
-                        assert_not_reached("unknown phase");
+                        assert_not_reached();
                 }
 
                 other = hashmap_get(m->homes_by_uid, UID_TO_PTR(candidate));
@@ -847,7 +860,7 @@
 
         if (S_ISDIR(st.st_mode)) {
                 _cleanup_free_ char *n = NULL, *user_name = NULL, *realm = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 UserStorage storage;
 
                 if (!directory_suffix)
@@ -906,25 +919,25 @@
 
 int manager_enumerate_images(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
 
         assert(m);
 
         if (!m->scan_slash_home)
                 return 0;
 
-        d = opendir("/home/");
+        d = opendir(get_home_root());
         if (!d)
                 return log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, errno,
-                                      "Failed to open /home/: %m");
+                                      "Failed to open %s: %m", get_home_root());
 
-        FOREACH_DIRENT(de, d, return log_error_errno(errno, "Failed to read /home/ directory: %m"))
-                (void) manager_assess_image(m, dirfd(d), "/home", de->d_name);
+        FOREACH_DIRENT(de, d, return log_error_errno(errno, "Failed to read %s directory: %m", get_home_root()))
+                (void) manager_assess_image(m, dirfd(d), get_home_root(), de->d_name);
 
         return 0;
 }
 
 static int manager_connect_bus(Manager *m) {
+        _cleanup_free_ char *b = NULL;
         const char *suffix, *busname;
         int r;
 
@@ -939,10 +952,17 @@
         if (r < 0)
                 return r;
 
+        r = bus_log_control_api_register(m->bus);
+        if (r < 0)
+                return r;
+
         suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX");
-        if (suffix)
-                busname = strjoina("org.freedesktop.home1.", suffix);
-        else
+        if (suffix) {
+                b = strjoin("org.freedesktop.home1.", suffix);
+                if (!b)
+                        return log_oom();
+                busname = b;
+        } else
                 busname = "org.freedesktop.home1";
 
         r = sd_bus_request_name_async(m->bus, NULL, busname, 0, NULL, NULL);
@@ -959,6 +979,7 @@
 }
 
 static int manager_bind_varlink(Manager *m) {
+        _cleanup_free_ char *p = NULL;
         const char *suffix, *socket_path;
         int r;
 
@@ -984,9 +1005,12 @@
         /* To make things easier to debug, when working from a homed managed home directory, let's optionally
          * use a different varlink socket name */
         suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX");
-        if (suffix)
-                socket_path = strjoina("/run/systemd/userdb/io.systemd.Home.", suffix);
-        else
+        if (suffix) {
+                p = strjoin("/run/systemd/userdb/io.systemd.Home.", suffix);
+                if (!p)
+                        return log_oom();
+                socket_path = p;
+        } else
                 socket_path = "/run/systemd/userdb/io.systemd.Home";
 
         r = varlink_server_listen_address(m->varlink_server, socket_path, 0666);
@@ -998,9 +1022,9 @@
                 return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
 
         assert(!m->userdb_service);
-        m->userdb_service = strdup(basename(socket_path));
-        if (!m->userdb_service)
-                return log_oom();
+        r = path_extract_filename(socket_path, &m->userdb_service);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extra filename from socket path '%s': %m", socket_path);
 
         /* Avoid recursion */
         if (setenv("SYSTEMD_BYPASS_USERDB", m->userdb_service, 1) < 0)
@@ -1009,13 +1033,25 @@
         return 0;
 }
 
-static ssize_t read_datagram(int fd, struct ucred *ret_sender, void **ret) {
+static ssize_t read_datagram(
+                int fd,
+                struct ucred *ret_sender,
+                void **ret,
+                int *ret_passed_fd) {
+
+        CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred)) + CMSG_SPACE(sizeof(int))) control;
         _cleanup_free_ void *buffer = NULL;
+        _cleanup_close_ int passed_fd = -EBADF;
+        struct ucred *sender = NULL;
+        struct cmsghdr *cmsg;
+        struct msghdr mh;
+        struct iovec iov;
         ssize_t n, m;
 
         assert(fd >= 0);
         assert(ret_sender);
         assert(ret);
+        assert(ret_passed_fd);
 
         n = next_datagram_size_fd(fd);
         if (n < 0)
@@ -1025,58 +1061,54 @@
         if (!buffer)
                 return -ENOMEM;
 
-        if (ret_sender) {
-                CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred))) control;
-                bool found_ucred = false;
-                struct cmsghdr *cmsg;
-                struct msghdr mh;
-                struct iovec iov;
+        /* Pass one extra byte, as a size check */
+        iov = IOVEC_MAKE(buffer, n + 1);
 
-                /* Pass one extra byte, as a size check */
-                iov = IOVEC_MAKE(buffer, n + 1);
+        mh = (struct msghdr) {
+                .msg_iov = &iov,
+                .msg_iovlen = 1,
+                .msg_control = &control,
+                .msg_controllen = sizeof(control),
+        };
 
-                mh = (struct msghdr) {
-                        .msg_iov = &iov,
-                        .msg_iovlen = 1,
-                        .msg_control = &control,
-                        .msg_controllen = sizeof(control),
-                };
+        m = recvmsg_safe(fd, &mh, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
+        if (m < 0)
+                return m;
 
-                m = recvmsg_safe(fd, &mh, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
-                if (m < 0)
-                        return m;
-
+        /* Ensure the size matches what we determined before */
+        if (m != n) {
                 cmsg_close_all(&mh);
+                return -EMSGSIZE;
+        }
 
-                /* Ensure the size matches what we determined before */
-                if (m != n)
-                        return -EMSGSIZE;
+        CMSG_FOREACH(cmsg, &mh) {
+                if (cmsg->cmsg_level == SOL_SOCKET &&
+                    cmsg->cmsg_type == SCM_CREDENTIALS &&
+                    cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) {
+                        assert(!sender);
+                        sender = (struct ucred*) CMSG_DATA(cmsg);
+                }
 
-                CMSG_FOREACH(cmsg, &mh)
-                        if (cmsg->cmsg_level == SOL_SOCKET &&
-                            cmsg->cmsg_type == SCM_CREDENTIALS &&
-                            cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) {
+                if (cmsg->cmsg_level == SOL_SOCKET &&
+                    cmsg->cmsg_type == SCM_RIGHTS) {
 
-                                memcpy(ret_sender, CMSG_DATA(cmsg), sizeof(struct ucred));
-                                found_ucred = true;
+                        if (cmsg->cmsg_len != CMSG_LEN(sizeof(int))) {
+                                cmsg_close_all(&mh);
+                                return -EMSGSIZE;
                         }
 
-                if (!found_ucred)
-                        *ret_sender = (struct ucred) {
-                                .pid = 0,
-                                .uid = UID_INVALID,
-                                .gid = GID_INVALID,
-                        };
-        } else {
-                m = recv(fd, buffer, n + 1, MSG_DONTWAIT);
-                if (m < 0)
-                        return -errno;
-
-                /* Ensure the size matches what we determined before */
-                if (m != n)
-                        return -EMSGSIZE;
+                        assert(passed_fd < 0);
+                        passed_fd = *(int*) CMSG_DATA(cmsg);
+                }
         }
 
+        if (sender)
+                *ret_sender = *sender;
+        else
+                *ret_sender = (struct ucred) UCRED_INVALID;
+
+        *ret_passed_fd = TAKE_FD(passed_fd);
+
         /* For safety reasons: let's always NUL terminate.  */
         ((char*) buffer)[n] = 0;
         *ret = TAKE_PTR(buffer);
@@ -1087,19 +1119,20 @@
 static int on_notify_socket(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
         _cleanup_strv_free_ char **l = NULL;
         _cleanup_free_ void *datagram = NULL;
-        struct ucred sender;
-        Manager *m = userdata;
+        _cleanup_close_ int passed_fd = -EBADF;
+        struct ucred sender = UCRED_INVALID;
+        Manager *m = ASSERT_PTR(userdata);
         ssize_t n;
         Home *h;
 
         assert(s);
-        assert(m);
 
-        n = read_datagram(fd, &sender, &datagram);
-        if (IN_SET(n, -EAGAIN, -EINTR))
-                return 0;
-        if (n < 0)
+        n = read_datagram(fd, &sender, &datagram, &passed_fd);
+        if (n < 0) {
+                if (ERRNO_IS_TRANSIENT(n))
+                        return 0;
                 return log_error_errno(n, "Failed to read notify datagram: %m");
+        }
 
         if (sender.pid <= 0) {
                 log_warning("Received notify datagram without valid sender PID, ignoring.");
@@ -1116,12 +1149,12 @@
         if (!l)
                 return log_oom();
 
-        home_process_notify(h, l);
+        home_process_notify(h, l, TAKE_FD(passed_fd));
         return 0;
 }
 
 static int manager_listen_notify(Manager *m) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         union sockaddr_union sa = {
                 .un.sun_family = AF_UNIX,
                 .un.sun_path = "/run/systemd/home/notify",
@@ -1134,9 +1167,11 @@
 
         suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX");
         if (suffix) {
-                const char *unix_path;
+                _cleanup_free_ char *unix_path = NULL;
 
-                unix_path = strjoina("/run/systemd/home/notify.", suffix);
+                unix_path = strjoin("/run/systemd/home/notify.", suffix);
+                if (!unix_path)
+                        return log_oom();
                 r = sockaddr_un_set_path(&sa.un, unix_path);
                 if (r < 0)
                         return log_error_errno(r, "Socket path %s does not fit in sockaddr_un: %m", unix_path);
@@ -1204,10 +1239,7 @@
                 return 0;
         if (r < 0)
                 return log_error_errno(r, "Failed to acquire ID_PART_ENTRY_TYPE device property, ignoring: %m");
-        r = sd_id128_from_string(parttype, &id);
-        if (r < 0)
-                return log_debug_errno(r, "Failed to parse ID_PART_ENTRY_TYPE field '%s', ignoring: %m", parttype);
-        if (!sd_id128_equal(id, GPT_USER_HOME)) {
+        if (sd_id128_string_equal(parttype, SD_GPT_USER_HOME) <= 0) {
                 log_debug("Found partition (%s) we don't care about, ignoring.", sysfs);
                 return 0;
         }
@@ -1237,10 +1269,9 @@
 }
 
 static int manager_on_device(sd_device_monitor *monitor, sd_device *d, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
-        assert(m);
         assert(d);
 
         if (device_for_action(d, SD_DEVICE_REMOVE)) {
@@ -1474,7 +1505,11 @@
 
         assert(m);
 
-        if (streq(basename(path), "local.public")) /* we already loaded the private key, which includes the public one */
+        r = path_extract_filename(path, &fn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename of path '%s': %m", path);
+
+        if (streq(fn, "local.public")) /* we already loaded the private key, which includes the public one */
                 return 0;
 
         f = fopen(path, "re");
@@ -1503,10 +1538,6 @@
         if (!pkey)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to parse public key file %s.", path);
 
-        fn = strdup(basename(path));
-        if (!fn)
-                return log_oom();
-
         r = hashmap_put(m->public_keys, fn, pkey);
         if (r < 0)
                 return log_error_errno(r, "Failed to add public key to set: %m");
@@ -1519,7 +1550,6 @@
 
 static int manager_load_public_keys(Manager *m) {
         _cleanup_strv_free_ char **files = NULL;
-        char **i;
         int r;
 
         assert(m);
@@ -1586,7 +1616,7 @@
         assert(h);
 
         /* Frees an automatically discovered image, if it's synthetic and its image disappeared. Unmounts any
-         * image if it's mounted but it's image vanished. */
+         * image if it's mounted but its image vanished. */
 
         if (h->current_operation || !ordered_set_isempty(h->pending_operations))
                 return;
@@ -1665,9 +1695,7 @@
 }
 
 static int on_deferred_rescan(sd_event_source *s, void *userdata) {
-        Manager *m = userdata;
-
-        assert(m);
+        Manager *m = ASSERT_PTR(userdata);
 
         m->deferred_rescan_event_source = sd_event_source_disable_unref(m->deferred_rescan_event_source);
 
@@ -1703,9 +1731,7 @@
 }
 
 static int on_deferred_gc(sd_event_source *s, void *userdata) {
-        Manager *m = userdata;
-
-        assert(m);
+        Manager *m = ASSERT_PTR(userdata);
 
         m->deferred_gc_event_source = sd_event_source_disable_unref(m->deferred_gc_event_source);
 
@@ -1749,3 +1775,437 @@
         (void) sd_event_source_set_description(m->deferred_gc_event_source, "deferred-gc");
         return 1;
 }
+
+static bool manager_shall_rebalance(Manager *m) {
+        Home *h;
+
+        assert(m);
+
+        if (IN_SET(m->rebalance_state, REBALANCE_PENDING, REBALANCE_SHRINKING, REBALANCE_GROWING))
+                return true;
+
+        HASHMAP_FOREACH(h, m->homes_by_name)
+                if (home_shall_rebalance(h))
+                        return true;
+
+        return false;
+}
+
+static int home_cmp(Home *const*a, Home *const*b) {
+        int r;
+
+        assert(a);
+        assert(*a);
+        assert(b);
+        assert(*b);
+
+        /* Order user records by their weight (and by their name, to make things stable). We put the records
+         * with the highest weight last, since we distribute space from the beginning and round down, hence
+         * later entries tend to get slightly more than earlier entries. */
+
+        r = CMP(user_record_rebalance_weight((*a)->record), user_record_rebalance_weight((*b)->record));
+        if (r != 0)
+                return r;
+
+        return strcmp((*a)->user_name, (*b)->user_name);
+}
+
+static int manager_rebalance_calculate(Manager *m) {
+        uint64_t weight_sum, free_sum, usage_sum = 0, min_free = UINT64_MAX;
+        _cleanup_free_ Home **array = NULL;
+        bool relevant = false;
+        struct statfs sfs;
+        int c = 0, r;
+        Home *h;
+
+        assert(m);
+
+        if (statfs(get_home_root(), &sfs) < 0)
+                return log_error_errno(errno, "Failed to statfs() /home: %m");
+
+        free_sum = (uint64_t) sfs.f_bsize * sfs.f_bavail; /* This much free space is available on the
+                                                           * underlying pool directory */
+
+        weight_sum = REBALANCE_WEIGHT_BACKING; /* Grant the underlying pool directory a fixed weight of 20
+                                                * (home dirs get 100 by default, i.e. 5x more). This weight
+                                                * is not configurable, the per-home weights are. */
+
+        HASHMAP_FOREACH(h, m->homes_by_name) {
+                statfs_f_type_t fstype;
+                h->rebalance_pending = false; /* First, reset the flag, we only want it to be true for the
+                                               * homes that qualify for rebalancing */
+
+                if (!home_shall_rebalance(h)) /* Only look at actual candidates */
+                        continue;
+
+                if (home_is_busy(h))
+                        return -EBUSY; /* Let's not rebalance if there's a busy home directory. */
+
+                r = home_get_disk_status(
+                                h,
+                                &h->rebalance_size,
+                                &h->rebalance_usage,
+                                &h->rebalance_free,
+                                NULL,
+                                NULL,
+                                &fstype,
+                                NULL);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to get free space of home '%s', ignoring.", h->user_name);
+                        continue;
+                }
+
+                if (h->rebalance_free > UINT64_MAX - free_sum)
+                        return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Rebalance free overflow");
+                free_sum += h->rebalance_free;
+
+                if (h->rebalance_usage > UINT64_MAX - usage_sum)
+                        return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Rebalance usage overflow");
+                usage_sum += h->rebalance_usage;
+
+                h->rebalance_weight = user_record_rebalance_weight(h->record);
+                if (h->rebalance_weight > UINT64_MAX - weight_sum)
+                        return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Rebalance weight overflow");
+                weight_sum += h->rebalance_weight;
+
+                h->rebalance_min = minimal_size_by_fs_magic(fstype);
+
+                if (!GREEDY_REALLOC(array, c+1))
+                        return log_oom();
+
+                array[c++] = h;
+        }
+
+        if (c == 0) {
+                log_debug("No homes to rebalance.");
+                return 0;
+        }
+
+        assert(weight_sum > 0);
+
+        log_debug("Disk space usage by all home directories to rebalance: %s — available disk space: %s",
+                  FORMAT_BYTES(usage_sum), FORMAT_BYTES(free_sum));
+
+        /* Bring the home directories in a well-defined order, so that we distribute space in a reproducible
+         * way for the same parameters. */
+        typesafe_qsort(array, c, home_cmp);
+
+        for (int i = 0; i < c; i++) {
+                uint64_t new_free;
+                double d;
+
+                h = array[i];
+
+                assert(h->rebalance_free <= free_sum);
+                assert(h->rebalance_usage <= usage_sum);
+                assert(h->rebalance_weight <= weight_sum);
+
+                d = ((double) (free_sum / 4096) * (double) h->rebalance_weight) / (double) weight_sum; /* Calculate new space for this home in units of 4K */
+
+                /* Convert from units of 4K back to bytes */
+                if (d >= (double) (UINT64_MAX/4096))
+                        new_free = UINT64_MAX;
+                else
+                        new_free = (uint64_t) d * 4096;
+
+                /* Subtract the weight and assigned space from the sums now, to distribute the rounding noise
+                 * to the remaining home dirs */
+                free_sum = LESS_BY(free_sum, new_free);
+                weight_sum = LESS_BY(weight_sum, h->rebalance_weight);
+
+                /* Keep track of home directory with the least amount of space left: we want to schedule the
+                 * next rebalance more quickly if this is low */
+                if (new_free < min_free)
+                        min_free = h->rebalance_size;
+
+                if (new_free > UINT64_MAX - h->rebalance_usage)
+                        h->rebalance_goal = UINT64_MAX-1; /* maximum size */
+                else {
+                        h->rebalance_goal = h->rebalance_usage + new_free;
+
+                        if (h->rebalance_min != UINT64_MAX && h->rebalance_goal < h->rebalance_min)
+                                h->rebalance_goal = h->rebalance_min;
+                }
+
+                /* Skip over this home if the state doesn't match the operation */
+                if ((m->rebalance_state == REBALANCE_SHRINKING && h->rebalance_goal > h->rebalance_size) ||
+                    (m->rebalance_state == REBALANCE_GROWING && h->rebalance_goal < h->rebalance_size))
+                        h->rebalance_pending = false;
+                else {
+                        log_debug("Rebalancing home directory '%s' %s %s %s.", h->user_name,
+                                  FORMAT_BYTES(h->rebalance_size),
+                                  special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                  FORMAT_BYTES(h->rebalance_goal));
+                        h->rebalance_pending = true;
+                }
+
+                if ((fabs((double) h->rebalance_size - (double) h->rebalance_goal) * 100 / (double) h->rebalance_size) >= 5.0)
+                        relevant = true;
+        }
+
+        /* Scale next rebalancing interval based on the least amount of space of any of the home
+         * directories. We pick a time in the range 1min … 15min, scaled by log2(min_free), so that:
+         * 10M → ~0.7min, 100M → ~2.7min, 1G → ~4.6min, 10G → ~6.5min, 100G ~8.4 */
+        m->rebalance_interval_usec = (usec_t) CLAMP((LESS_BY(log2(min_free), 22)*15*USEC_PER_MINUTE)/26,
+                                                    1 * USEC_PER_MINUTE,
+                                                    15 * USEC_PER_MINUTE);
+
+
+        log_debug("Rebalancing interval set to %s.", FORMAT_TIMESPAN(m->rebalance_interval_usec, USEC_PER_MSEC));
+
+        /* Let's suppress small resizes, growing/shrinking file systems isn't free after all */
+        if (!relevant) {
+                log_debug("Skipping rebalancing, since all calculated size changes are below ±5%%.");
+                return 0;
+        }
+
+        return c;
+}
+
+static int manager_rebalance_apply(Manager *m) {
+        int c = 0, r;
+        Home *h;
+
+        assert(m);
+
+        HASHMAP_FOREACH(h, m->homes_by_name) {
+                _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+
+                if (!h->rebalance_pending)
+                        continue;
+
+                h->rebalance_pending = false;
+
+                r = home_resize(h, h->rebalance_goal, /* secret= */ NULL, /* automatic= */ true, &error);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to resize home '%s' for rebalancing, ignoring: %s",
+                                          h->user_name, bus_error_message(&error, r));
+                else
+                        c++;
+        }
+
+        return c;
+}
+
+static void manager_rebalance_reply_messages(Manager *m) {
+        int r;
+
+        assert(m);
+
+        for (;;) {
+                _cleanup_(sd_bus_message_unrefp) sd_bus_message *msg =
+                        set_steal_first(m->rebalance_pending_method_calls);
+
+                if (!msg)
+                        break;
+
+                r = sd_bus_reply_method_return(msg, NULL);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to reply to rebalance method call, ignoring: %m");
+        }
+}
+
+static int manager_rebalance_now(Manager *m) {
+        RebalanceState busy_state; /* the state to revert to when operation fails if busy */
+        int r;
+
+        assert(m);
+
+        log_debug("Rebalancing now...");
+
+        /* We maintain a simple state engine here to keep track of what we are doing. We'll first shrink all
+         * homes that shall be shrunk and then grow all homes that shall be grown, so that they can take up
+         * the space now freed. */
+
+        for (;;) {
+                switch (m->rebalance_state) {
+
+                case REBALANCE_IDLE:
+                case REBALANCE_PENDING:
+                case REBALANCE_WAITING:
+                        /* First shrink large home dirs */
+                        m->rebalance_state = REBALANCE_SHRINKING;
+                        busy_state = REBALANCE_PENDING;
+
+                        /* We are initiating the next rebalancing cycle now, let's make the queued methods
+                         * calls the pending ones, and flush out any pending ones (which shouldn't exist at
+                         * this time anyway) */
+                        set_clear(m->rebalance_pending_method_calls);
+                        SWAP_TWO(m->rebalance_pending_method_calls, m->rebalance_queued_method_calls);
+
+                        log_debug("Shrinking phase..");
+                        break;
+
+                case REBALANCE_SHRINKING:
+                        /* Then grow small home dirs */
+                        m->rebalance_state = REBALANCE_GROWING;
+                        busy_state = REBALANCE_SHRINKING;
+                        log_debug("Growing phase..");
+                        break;
+
+                case REBALANCE_GROWING:
+                        /* Finally, we are done */
+                        log_info("Rebalancing complete.");
+                        m->rebalance_state = REBALANCE_IDLE;
+                        r = 0;
+                        goto finish;
+
+                case REBALANCE_OFF:
+                default:
+                        assert_not_reached();
+                }
+
+                r = manager_rebalance_calculate(m);
+                if (r == -EBUSY) {
+                        /* Calculations failed because one home directory is currently busy. Revert to a state that
+                         * tells us what to do next. */
+                        log_debug("Can't enter phase, busy.");
+                        m->rebalance_state = busy_state;
+                        return r;
+                }
+                if (r < 0)
+                        goto finish;
+                if (r == 0)
+                        continue; /* got to next step immediately, if there's nothing to do */
+
+                r = manager_rebalance_apply(m);
+                if (r < 0)
+                        goto finish;
+                if (r > 0)
+                        break; /* At least one resize operation is now pending, we are done for now */
+
+                /* If there was nothing to apply, go for next state right-away */
+        }
+
+        return 0;
+
+finish:
+        /* Reset state and schedule next rebalance */
+        m->rebalance_state = REBALANCE_IDLE;
+        manager_rebalance_reply_messages(m);
+        (void) manager_schedule_rebalance(m, /* immediately= */ false);
+        return r;
+}
+
+static int on_rebalance_timer(sd_event_source *s, usec_t t, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+
+        assert(s);
+        assert(IN_SET(m->rebalance_state, REBALANCE_WAITING, REBALANCE_PENDING, REBALANCE_SHRINKING, REBALANCE_GROWING));
+
+        (void) manager_rebalance_now(m);
+        return 0;
+}
+
+int manager_schedule_rebalance(Manager *m, bool immediately) {
+        int r;
+
+        assert(m);
+
+        /* Check if there are any records where rebalancing is requested */
+        if (!manager_shall_rebalance(m)) {
+                log_debug("Not scheduling rebalancing, not needed.");
+                r = 0; /* report that we didn't schedule anything because nothing needed it */
+                goto turn_off;
+        }
+
+        if (immediately) {
+                /* If we are told to rebalance immediately, then mark a rebalance as pending (even if we area
+                 * already running one) */
+
+                if (m->rebalance_event_source) {
+                        r = sd_event_source_set_time(m->rebalance_event_source, 0);
+                        if (r < 0) {
+                                log_error_errno(r, "Failed to schedule immediate rebalancing: %m");
+                                goto turn_off;
+                        }
+
+                        r = sd_event_source_set_enabled(m->rebalance_event_source, SD_EVENT_ONESHOT);
+                        if (r < 0) {
+                                log_error_errno(r, "Failed to enable rebalancing event source: %m");
+                                goto turn_off;
+                        }
+                } else {
+                        r = sd_event_add_time(m->event, &m->rebalance_event_source, CLOCK_MONOTONIC, 0, USEC_PER_SEC, on_rebalance_timer, m);
+                        if (r < 0) {
+                                log_error_errno(r, "Failed to allocate rebalance event source: %m");
+                                goto turn_off;
+                        }
+
+                        r = sd_event_source_set_priority(m->rebalance_event_source, SD_EVENT_PRIORITY_IDLE + 10);
+                        if (r < 0) {
+                                log_error_errno(r, "Failed to set rebalance event source priority: %m");
+                                goto turn_off;
+                        }
+
+                        (void) sd_event_source_set_description(m->rebalance_event_source, "rebalance");
+
+                }
+
+                if (!IN_SET(m->rebalance_state, REBALANCE_PENDING, REBALANCE_SHRINKING, REBALANCE_GROWING))
+                        m->rebalance_state = REBALANCE_PENDING;
+
+                log_debug("Scheduled immediate rebalancing...");
+                return 1; /* report that we scheduled something */
+        }
+
+        /* If we are told to schedule a rebalancing eventually, then do so only if we are not executing
+         * anything yet. Also if we have something scheduled already, leave it in place */
+        if (!IN_SET(m->rebalance_state, REBALANCE_OFF, REBALANCE_IDLE))
+                return 1; /* report that there's already something scheduled */
+
+        if (m->rebalance_event_source) {
+                r = sd_event_source_set_time_relative(m->rebalance_event_source, m->rebalance_interval_usec);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to schedule immediate rebalancing: %m");
+                        goto turn_off;
+                }
+
+                r = sd_event_source_set_enabled(m->rebalance_event_source, SD_EVENT_ONESHOT);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to enable rebalancing event source: %m");
+                        goto turn_off;
+                }
+        } else {
+                r = sd_event_add_time_relative(m->event, &m->rebalance_event_source, CLOCK_MONOTONIC, m->rebalance_interval_usec, USEC_PER_SEC, on_rebalance_timer, m);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to allocate rebalance event source: %m");
+                        goto turn_off;
+                }
+
+                r = sd_event_source_set_priority(m->rebalance_event_source, SD_EVENT_PRIORITY_IDLE + 10);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to set rebalance event source priority: %m");
+                        goto turn_off;
+                }
+
+                (void) sd_event_source_set_description(m->rebalance_event_source, "rebalance");
+        }
+
+        m->rebalance_state = REBALANCE_WAITING; /* We managed to enqueue a timer event, we now wait until it fires */
+        log_debug("Scheduled rebalancing in %s...", FORMAT_TIMESPAN(m->rebalance_interval_usec, 0));
+        return 1; /* report that we scheduled something */
+
+turn_off:
+        m->rebalance_event_source = sd_event_source_disable_unref(m->rebalance_event_source);
+        m->rebalance_state = REBALANCE_OFF;
+        manager_rebalance_reply_messages(m);
+        return r;
+}
+
+int manager_reschedule_rebalance(Manager *m) {
+        int r;
+
+        assert(m);
+
+        /* If a rebalance is pending reschedules it so it gets executed immediately */
+
+        if (!IN_SET(m->rebalance_state, REBALANCE_PENDING, REBALANCE_SHRINKING, REBALANCE_GROWING))
+                return 0;
+
+        r = manager_schedule_rebalance(m, /* immediately= */ true);
+        if (r < 0)
+                return r;
+
+        return 1;
+}
diff --git a/src/home/homed-manager.h b/src/home/homed-manager.h
index 851b302..20bbb4c 100644
--- a/src/home/homed-manager.h
+++ b/src/home/homed-manager.h
@@ -13,8 +13,17 @@
 #include "homed-home.h"
 #include "varlink.h"
 
-#define HOME_UID_MIN 60001
-#define HOME_UID_MAX 60513
+/* The LUKS free disk space rebalancing logic goes through this state machine */
+typedef enum RebalanceState {
+        REBALANCE_OFF,       /* No rebalancing enabled */
+        REBALANCE_IDLE,      /* Rebalancing enabled, but currently nothing scheduled */
+        REBALANCE_WAITING,   /* Rebalancing has been requested for a later point in time */
+        REBALANCE_PENDING,   /* Rebalancing has been requested and will be executed ASAP */
+        REBALANCE_SHRINKING, /* Rebalancing ongoing, and we are running all shrinking operations */
+        REBALANCE_GROWING,   /* Rebalancing ongoign, and we are running all growing operations */
+        _REBALANCE_STATE_MAX,
+        _REBALANCE_STATE_INVALID = -1,
+} RebalanceState;
 
 struct Manager {
         sd_event *event;
@@ -42,13 +51,24 @@
         sd_event_source *deferred_gc_event_source;
         sd_event_source *deferred_auto_login_event_source;
 
+        sd_event_source *rebalance_event_source;
+
         Home *gc_focus;
 
         VarlinkServer *varlink_server;
         char *userdb_service;
 
         EVP_PKEY *private_key; /* actually a pair of private and public key */
-        Hashmap *public_keys; /* key name [char*] → publick key [EVP_PKEY*] */
+        Hashmap *public_keys; /* key name [char*] → public key [EVP_PKEY*] */
+
+        RebalanceState rebalance_state;
+        usec_t rebalance_interval_usec;
+
+        /* In order to allow synchronous rebalance requests via bus calls we maintain two pools of bus
+         * messages: 'rebalance_pending_methods' are the method calls we are currently operating on and
+         * running a rebalancing operation for. 'rebalance_queued_method_calls' are the method calls that
+         * have been queued since then and that we'll operate on once we complete the current run. */
+        Set *rebalance_pending_method_calls, *rebalance_queued_method_calls;
 };
 
 int manager_new(Manager **ret);
@@ -62,6 +82,9 @@
 int manager_enqueue_rescan(Manager *m);
 int manager_enqueue_gc(Manager *m, Home *focus);
 
+int manager_schedule_rebalance(Manager *m, bool immediately);
+int manager_reschedule_rebalance(Manager *m);
+
 int manager_verify_user_record(Manager *m, UserRecord *hr);
 
 int manager_acquire_key_pair(Manager *m);
diff --git a/src/home/homed-operation.c b/src/home/homed-operation.c
index 3847fc5..618e920 100644
--- a/src/home/homed-operation.c
+++ b/src/home/homed-operation.c
@@ -17,7 +17,7 @@
                 .type = type,
                 .n_ref = 1,
                 .message = sd_bus_message_ref(m),
-                .send_fd = -1,
+                .send_fd = -EBADF,
                 .result = -1,
         };
 
diff --git a/src/home/homed-varlink.c b/src/home/homed-varlink.c
index 96a6ea7..540a612 100644
--- a/src/home/homed-varlink.c
+++ b/src/home/homed-varlink.c
@@ -83,13 +83,12 @@
         LookupParameters p = {
                 .uid = UID_INVALID,
         };
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         bool trusted;
         Home *h;
         int r;
 
         assert(parameters);
-        assert(m);
 
         r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
         if (r < 0)
@@ -199,12 +198,11 @@
         LookupParameters p = {
                 .gid = GID_INVALID,
         };
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Home *h;
         int r;
 
         assert(parameters);
-        assert(m);
 
         r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
         if (r < 0)
@@ -265,13 +263,12 @@
                 {}
         };
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         LookupParameters p = {};
         Home *h;
         int r;
 
         assert(parameters);
-        assert(m);
 
         r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
         if (r < 0)
@@ -282,7 +279,6 @@
 
         if (p.user_name) {
                 const char *last = NULL;
-                char **i;
 
                 h = hashmap_get(m->homes_by_name, p.user_name);
                 if (!h)
@@ -335,9 +331,7 @@
         } else {
                 const char *last_user_name = NULL, *last_group_name = NULL;
 
-                HASHMAP_FOREACH(h, m->homes_by_name) {
-                        char **j;
-
+                HASHMAP_FOREACH(h, m->homes_by_name)
                         STRV_FOREACH(j, h->record->member_of) {
 
                                 if (last_user_name) {
@@ -353,7 +347,6 @@
                                 last_user_name = h->user_name;
                                 last_group_name = *j;
                         }
-                }
 
                 if (last_user_name) {
                         assert(last_group_name);
diff --git a/src/home/homework-cifs.c b/src/home/homework-cifs.c
index 04a4db8..8ad1da6 100644
--- a/src/home/homework-cifs.c
+++ b/src/home/homework-cifs.c
@@ -1,5 +1,10 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <sys/mount.h>
+#if WANT_LINUX_FS_H
+#include <linux/fs.h>
+#endif
+
 #include "dirent-util.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -7,131 +12,176 @@
 #include "fs-util.h"
 #include "homework-cifs.h"
 #include "homework-mount.h"
+#include "mkdir.h"
 #include "mount-util.h"
 #include "process-util.h"
+#include "stat-util.h"
 #include "strv.h"
 #include "tmpfile-util.h"
 
-int home_prepare_cifs(
+int home_setup_cifs(
                 UserRecord *h,
-                bool already_activated,
+                HomeSetupFlags flags,
                 HomeSetup *setup) {
 
+        _cleanup_free_ char *chost = NULL, *cservice = NULL, *cdir = NULL, *chost_and_service = NULL, *j = NULL;
+        int r;
+
         assert(h);
-        assert(setup);
         assert(user_record_storage(h) == USER_CIFS);
+        assert(setup);
+        assert(!setup->undo_mount);
+        assert(setup->root_fd < 0);
 
-        if (already_activated)
+        if (FLAGS_SET(flags, HOME_SETUP_ALREADY_ACTIVATED)) {
                 setup->root_fd = open(user_record_home_directory(h), O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
-        else {
-                bool mounted = false;
-                char **pw;
-                int r;
+                if (setup->root_fd < 0)
+                        return log_error_errno(errno, "Failed to open home directory: %m");
 
-                r = home_unshare_and_mount(NULL, NULL, false, user_record_mount_flags(h));
+                return 0;
+        }
+
+        if (!h->cifs_service)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "User record lacks CIFS service, refusing.");
+
+        r = parse_cifs_service(h->cifs_service, &chost, &cservice, &cdir);
+        if (r < 0)
+                return log_error_errno(r, "Failed parse CIFS service specification: %m");
+
+        /* Just the host and service part, without the directory */
+        chost_and_service = strjoin("//", chost, "/", cservice);
+        if (!chost_and_service)
+                return log_oom();
+
+        r = home_unshare_and_mkdir();
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(pw, h->password) {
+                _cleanup_(unlink_and_freep) char *p = NULL;
+                _cleanup_free_ char *options = NULL;
+                _cleanup_(fclosep) FILE *f = NULL;
+                pid_t mount_pid;
+                int exit_status;
+
+                r = fopen_temporary_child(NULL, &f, &p);
                 if (r < 0)
-                        return r;
+                        return log_error_errno(r, "Failed to create temporary credentials file: %m");
 
-                STRV_FOREACH(pw, h->password) {
-                        _cleanup_(unlink_and_freep) char *p = NULL;
-                        _cleanup_free_ char *options = NULL;
-                        _cleanup_(fclosep) FILE *f = NULL;
-                        pid_t mount_pid;
-                        int exit_status;
+                fprintf(f,
+                        "username=%s\n"
+                        "password=%s\n",
+                        user_record_cifs_user_name(h),
+                        *pw);
 
-                        r = fopen_temporary(NULL, &f, &p);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to create temporary credentials file: %m");
+                if (h->cifs_domain)
+                        fprintf(f, "domain=%s\n", h->cifs_domain);
 
-                        fprintf(f,
-                                "username=%s\n"
-                                "password=%s\n",
-                                user_record_cifs_user_name(h),
-                                *pw);
+                r = fflush_and_check(f);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to write temporary credentials file: %m");
 
-                        if (h->cifs_domain)
-                                fprintf(f, "domain=%s\n", h->cifs_domain);
+                f = safe_fclose(f);
 
-                        r = fflush_and_check(f);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to write temporary credentials file: %m");
+                if (asprintf(&options, "credentials=%s,uid=" UID_FMT ",forceuid,gid=" GID_FMT ",forcegid,file_mode=0%3o,dir_mode=0%3o",
+                             p, h->uid, user_record_gid(h), user_record_access_mode(h), user_record_access_mode(h)) < 0)
+                        return log_oom();
 
-                        f = safe_fclose(f);
-
-                        if (asprintf(&options, "credentials=%s,uid=" UID_FMT ",forceuid,gid=" GID_FMT ",forcegid,file_mode=0%3o,dir_mode=0%3o",
-                                     p, h->uid, user_record_gid(h), user_record_access_mode(h), user_record_access_mode(h)) < 0)
+                if (h->cifs_extra_mount_options)
+                        if (!strextend_with_separator(&options, ",", h->cifs_extra_mount_options))
                                 return log_oom();
 
-                        r = safe_fork("(mount)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_STDOUT_TO_STDERR, &mount_pid);
-                        if (r < 0)
-                                return r;
-                        if (r == 0) {
-                                /* Child */
-                                execl("/bin/mount", "/bin/mount", "-n", "-t", "cifs",
-                                      h->cifs_service, "/run/systemd/user-home-mount",
-                                      "-o", options, NULL);
+                r = safe_fork("(mount)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_STDOUT_TO_STDERR, &mount_pid);
+                if (r < 0)
+                        return r;
+                if (r == 0) {
+                        /* Child */
+                        execl("/bin/mount", "/bin/mount", "-n", "-t", "cifs",
+                              chost_and_service, HOME_RUNTIME_WORK_DIR,
+                              "-o", options, NULL);
 
-                                log_error_errno(errno, "Failed to execute mount: %m");
-                                _exit(EXIT_FAILURE);
-                        }
+                        log_error_errno(errno, "Failed to execute mount: %m");
+                        _exit(EXIT_FAILURE);
+                }
 
-                        exit_status = wait_for_terminate_and_check("mount", mount_pid, WAIT_LOG_ABNORMAL|WAIT_LOG_NON_ZERO_EXIT_STATUS);
-                        if (exit_status < 0)
-                                return exit_status;
-                        if (exit_status != EXIT_SUCCESS)
-                                return -EPROTO;
-
-                        mounted = true;
+                exit_status = wait_for_terminate_and_check("mount", mount_pid, WAIT_LOG_ABNORMAL|WAIT_LOG_NON_ZERO_EXIT_STATUS);
+                if (exit_status < 0)
+                        return exit_status;
+                if (exit_status == EXIT_SUCCESS) {
+                        setup->undo_mount = true;
                         break;
                 }
 
-                if (!mounted)
-                        return log_error_errno(SYNTHETIC_ERRNO(ENOKEY),
-                                               "Failed to mount home directory with supplied password.");
-
-                setup->root_fd = open("/run/systemd/user-home-mount", O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+                if (pw[1])
+                        log_info("CIFS mount failed with password #%zu, trying next password.", (size_t) (pw - h->password) + 1);
         }
-        if (setup->root_fd < 0)
-                return log_error_errno(errno, "Failed to open home directory: %m");
 
+        if (!setup->undo_mount)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOKEY),
+                                       "Failed to mount home directory, supplied password(s) possibly wrong.");
+
+        /* Adjust MS_SUID and similar flags */
+        r = mount_nofollow_verbose(LOG_ERR, NULL, HOME_RUNTIME_WORK_DIR, NULL, MS_BIND|MS_REMOUNT|user_record_mount_flags(h), NULL);
+        if (r < 0)
+                return r;
+
+        if (cdir) {
+                j = path_join(HOME_RUNTIME_WORK_DIR, cdir);
+                if (!j)
+                        return log_oom();
+
+                if (FLAGS_SET(flags, HOME_SETUP_CIFS_MKDIR)) {
+                        setup->root_fd = open_mkdir_at(AT_FDCWD, j, O_CLOEXEC, 0700);
+                        if (setup->root_fd < 0)
+                                return log_error_errno(setup->root_fd, "Failed to create CIFS subdirectory: %m");
+                }
+        }
+
+        if (setup->root_fd < 0) {
+                setup->root_fd = open(j ?: HOME_RUNTIME_WORK_DIR, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+                if (setup->root_fd < 0)
+                        return log_error_errno(errno, "Failed to open home directory: %m");
+        }
+
+        setup->mount_suffix = TAKE_PTR(cdir);
         return 0;
 }
 
 int home_activate_cifs(
                 UserRecord *h,
+                HomeSetupFlags flags,
+                HomeSetup *setup,
                 PasswordCache *cache,
                 UserRecord **ret_home) {
 
-        _cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
-        _cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
+        _cleanup_(user_record_unrefp) UserRecord *new_home = NULL, *header_home = NULL;
         const char *hdo, *hd;
         int r;
 
         assert(h);
         assert(user_record_storage(h) == USER_CIFS);
+        assert(setup);
         assert(ret_home);
 
-        if (!h->cifs_service)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "User record lacks CIFS service, refusing.");
-
         assert_se(hdo = user_record_home_directory(h));
-        hd = strdupa(hdo); /* copy the string out, since it might change later in the home record object */
+        hd = strdupa_safe(hdo); /* copy the string out, since it might change later in the home record object */
 
-        r = home_prepare_cifs(h, false, &setup);
+        r = home_setup(h, 0, setup, cache, &header_home);
         if (r < 0)
                 return r;
 
-        r = home_refresh(h, &setup, NULL, cache, NULL, &new_home);
+        r = home_refresh(h, flags, setup, header_home, cache, NULL, &new_home);
         if (r < 0)
                 return r;
 
-        setup.root_fd = safe_close(setup.root_fd);
+        setup->root_fd = safe_close(setup->root_fd);
 
-        r = home_move_mount(NULL, hd);
+        r = home_move_mount(setup->mount_suffix, hd);
         if (r < 0)
                 return r;
 
-        setup.undo_mount = false;
+        setup->undo_mount = false;
+        setup->do_drop_caches = false;
 
         log_info("Everything completed.");
 
@@ -139,15 +189,13 @@
         return 1;
 }
 
-int home_create_cifs(UserRecord *h, UserRecord **ret_home) {
-        _cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
+int home_create_cifs(UserRecord *h, HomeSetup *setup, UserRecord **ret_home) {
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
-        _cleanup_(closedirp) DIR *d = NULL;
-        _cleanup_close_ int copy = -1;
         int r;
 
         assert(h);
         assert(user_record_storage(h) == USER_CIFS);
+        assert(setup);
         assert(ret_home);
 
         if (!h->cifs_service)
@@ -160,29 +208,21 @@
                 return log_error_errno(errno, "Unable to detect whether /sbin/mount.cifs exists: %m");
         }
 
-        r = home_prepare_cifs(h, false, &setup);
+        r = home_setup_cifs(h, HOME_SETUP_CIFS_MKDIR, setup);
         if (r < 0)
                 return r;
 
-        copy = fcntl(setup.root_fd, F_DUPFD_CLOEXEC, 3);
-        if (copy < 0)
-                return -errno;
-
-        d = take_fdopendir(&copy);
-        if (!d)
-                return -errno;
-
-        errno = 0;
-        if (readdir_no_dot(d))
+        r = dir_is_empty_at(setup->root_fd, NULL, /* ignore_hidden_or_backup= */ false);
+        if (r < 0)
+                return log_error_errno(r, "Failed to detect if CIFS directory is empty: %m");
+        if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOTEMPTY), "Selected CIFS directory not empty, refusing.");
-        if (errno != 0)
-                return log_error_errno(errno, "Failed to detect if CIFS directory is empty: %m");
 
-        r = home_populate(h, setup.root_fd);
+        r = home_populate(h, setup->root_fd);
         if (r < 0)
                 return r;
 
-        r = home_sync_and_statfs(setup.root_fd, NULL);
+        r = home_sync_and_statfs(setup->root_fd, NULL);
         if (r < 0)
                 return r;
 
diff --git a/src/home/homework-cifs.h b/src/home/homework-cifs.h
index da2e50a..af8c466 100644
--- a/src/home/homework-cifs.h
+++ b/src/home/homework-cifs.h
@@ -4,8 +4,8 @@
 #include "homework.h"
 #include "user-record.h"
 
-int home_prepare_cifs(UserRecord *h, bool already_activated, HomeSetup *setup);
+int home_setup_cifs(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup);
 
-int home_activate_cifs(UserRecord *h, PasswordCache *cache, UserRecord **ret_home);
+int home_activate_cifs(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup, PasswordCache *cache, UserRecord **ret_home);
 
-int home_create_cifs(UserRecord *h, UserRecord **ret_home);
+int home_create_cifs(UserRecord *h, HomeSetup *setup, UserRecord **ret_home);
diff --git a/src/home/homework-directory.c b/src/home/homework-directory.c
index b35d24c..6668edb 100644
--- a/src/home/homework-directory.c
+++ b/src/home/homework-directory.c
@@ -5,6 +5,7 @@
 #include "btrfs-util.h"
 #include "fd-util.h"
 #include "homework-directory.h"
+#include "homework-mount.h"
 #include "homework-quota.h"
 #include "mkdir.h"
 #include "mount-util.h"
@@ -12,12 +13,43 @@
 #include "rm-rf.h"
 #include "tmpfile-util.h"
 #include "umask-util.h"
+#include "user-util.h"
 
-int home_prepare_directory(UserRecord *h, bool already_activated, HomeSetup *setup) {
+int home_setup_directory(UserRecord *h, HomeSetup *setup) {
+        const char *ip;
+        int r;
+
         assert(h);
+        assert(IN_SET(user_record_storage(h), USER_DIRECTORY, USER_SUBVOLUME));
         assert(setup);
+        assert(!setup->undo_mount);
+        assert(setup->root_fd < 0);
 
-        setup->root_fd = open(user_record_image_path(h), O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+        /* We'll bind mount the image directory to a new mount point where we'll start adjusting it. Only
+         * once that's complete we'll move the thing to its final place eventually. */
+        r = home_unshare_and_mkdir();
+        if (r < 0)
+                return r;
+
+        assert_se(ip = user_record_image_path(h));
+
+        r = mount_follow_verbose(LOG_ERR, ip, HOME_RUNTIME_WORK_DIR, NULL, MS_BIND, NULL);
+        if (r < 0)
+                return r;
+
+        setup->undo_mount = true;
+
+        /* Turn off any form of propagation for this */
+        r = mount_nofollow_verbose(LOG_ERR, NULL, HOME_RUNTIME_WORK_DIR, NULL, MS_PRIVATE, NULL);
+        if (r < 0)
+                return r;
+
+        /* Adjust MS_SUID and similar flags */
+        r = mount_nofollow_verbose(LOG_ERR, NULL, HOME_RUNTIME_WORK_DIR, NULL, MS_BIND|MS_REMOUNT|user_record_mount_flags(h), NULL);
+        if (r < 0)
+                return r;
+
+        setup->root_fd = open(HOME_RUNTIME_WORK_DIR, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
         if (setup->root_fd < 0)
                 return log_error_errno(errno, "Failed to open home directory: %m");
 
@@ -26,50 +58,46 @@
 
 int home_activate_directory(
                 UserRecord *h,
+                HomeSetupFlags flags,
+                HomeSetup *setup,
                 PasswordCache *cache,
                 UserRecord **ret_home) {
 
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL, *header_home = NULL;
-        _cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
-        const char *hdo, *hd, *ipo, *ip;
+        const char *hd, *hdo;
         int r;
 
         assert(h);
         assert(IN_SET(user_record_storage(h), USER_DIRECTORY, USER_SUBVOLUME, USER_FSCRYPT));
+        assert(setup);
         assert(ret_home);
 
-        assert_se(ipo = user_record_image_path(h));
-        ip = strdupa(ipo); /* copy out, since reconciliation might cause changing of the field */
-
         assert_se(hdo = user_record_home_directory(h));
-        hd = strdupa(hdo);
+        hd = strdupa_safe(hdo);
 
-        r = home_prepare(h, false, cache, &setup, &header_home);
+        r = home_setup(h, flags, setup, cache, &header_home);
         if (r < 0)
                 return r;
 
-        r = home_refresh(h, &setup, header_home, cache, NULL, &new_home);
+        r = home_refresh(h, flags, setup, header_home, cache, NULL, &new_home);
         if (r < 0)
                 return r;
 
-        setup.root_fd = safe_close(setup.root_fd);
-
-        /* Create mount point to mount over if necessary */
-        if (!path_equal(ip, hd))
-                (void) mkdir_p(hd, 0700);
-
-        /* Create a mount point (even if the directory is already placed correctly), as a way to indicate
-         * this mount point is now "activated". Moreover, we want to set per-user
-         * MS_NOSUID/MS_NOEXEC/MS_NODEV. */
-        r = mount_nofollow_verbose(LOG_ERR, ip, hd, NULL, MS_BIND, NULL);
+        r = home_extend_embedded_identity(new_home, h, setup);
         if (r < 0)
                 return r;
 
-        r = mount_nofollow_verbose(LOG_ERR, NULL, hd, NULL, MS_BIND|MS_REMOUNT|user_record_mount_flags(h), NULL);
-        if (r < 0) {
-                (void) umount_verbose(LOG_ERR, hd, UMOUNT_NOFOLLOW);
+        /* Close fd to private mount before moving mount */
+        setup->root_fd = safe_close(setup->root_fd);
+
+        /* We are now done with everything, move the mount into place */
+        r = home_move_mount(NULL, hd);
+        if (r < 0)
                 return r;
-        }
+
+        setup->undo_mount = false;
+
+        setup->do_drop_caches = false;
 
         log_info("Everything completed.");
 
@@ -77,16 +105,18 @@
         return 0;
 }
 
-int home_create_directory_or_subvolume(UserRecord *h, UserRecord **ret_home) {
+int home_create_directory_or_subvolume(UserRecord *h, HomeSetup *setup, UserRecord **ret_home) {
         _cleanup_(rm_rf_subvolume_and_freep) char *temporary = NULL;
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
-        _cleanup_close_ int root_fd = -1;
+        _cleanup_close_ int mount_fd = -EBADF;
         _cleanup_free_ char *d = NULL;
+        bool is_subvolume = false;
         const char *ip;
         int r;
 
         assert(h);
         assert(IN_SET(user_record_storage(h), USER_DIRECTORY, USER_SUBVOLUME));
+        assert(setup);
         assert(ret_home);
 
         assert_se(ip = user_record_image_path(h));
@@ -100,11 +130,12 @@
         switch (user_record_storage(h)) {
 
         case USER_SUBVOLUME:
-                RUN_WITH_UMASK(0077)
+                WITH_UMASK(0077)
                         r = btrfs_subvol_make(d);
 
                 if (r >= 0) {
                         log_info("Subvolume created.");
+                        is_subvolume = true;
 
                         if (h->disk_size != UINT64_MAX) {
 
@@ -141,20 +172,49 @@
                 break;
 
         default:
-                assert_not_reached("unexpected storage");
+                assert_not_reached();
         }
 
         temporary = TAKE_PTR(d); /* Needs to be destroyed now */
 
-        root_fd = open(temporary, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
-        if (root_fd < 0)
-                return log_error_errno(errno, "Failed to open temporary home directory: %m");
-
-        r = home_populate(h, root_fd);
+        /* Let's decouple namespaces now, so that we can possibly mount a UID map mount into
+         * /run/systemd/user-home-mount/ that no one will see but us. */
+        r = home_unshare_and_mkdir();
         if (r < 0)
                 return r;
 
-        r = home_sync_and_statfs(root_fd, NULL);
+        setup->root_fd = open(temporary, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+        if (setup->root_fd < 0)
+                return log_error_errno(errno, "Failed to open temporary home directory: %m");
+
+        /* Try to apply a UID shift, so that the directory is actually owned by "nobody", and is only mapped
+         * to the proper UID while active. — Well, that's at least the theory. Unfortunately, only btrfs does
+         * per-subvolume quota. The others do per-uid quota. Which means mapping all home directories to the
+         * same UID of "nobody" makes quota impossible. Hence unless we actually managed to create a btrfs
+         * subvolume for this user we'll map the user's UID to itself. Now you might ask: why bother mapping
+         * at all? It's because we want to restrict the UIDs used on the home directory: we leave all other
+         * UIDs of the homed UID range unmapped, thus making them unavailable to programs accessing the
+         * mount. */
+        r = home_shift_uid(setup->root_fd, HOME_RUNTIME_WORK_DIR, is_subvolume ? UID_NOBODY : h->uid, h->uid, &mount_fd);
+        if (r > 0)
+                setup->undo_mount = true; /* If uidmaps worked we have a mount to undo again */
+
+        if (mount_fd >= 0) {
+                /* If we have established a new mount, then we can use that as new root fd to our home directory. */
+                safe_close(setup->root_fd);
+
+                setup->root_fd = fd_reopen(mount_fd, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+                if (setup->root_fd < 0)
+                        return log_error_errno(setup->root_fd, "Unable to convert mount fd into proper directory fd: %m");
+
+                mount_fd = safe_close(mount_fd);
+        }
+
+        r = home_populate(h, setup->root_fd);
+        if (r < 0)
+                return r;
+
+        r = home_sync_and_statfs(setup->root_fd, NULL);
         if (r < 0)
                 return r;
 
@@ -179,6 +239,13 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to add binding to record: %m");
 
+        setup->root_fd = safe_close(setup->root_fd);
+
+        /* Unmount mapped mount before we move the dir into place */
+        r = home_setup_undo_mount(setup, LOG_ERR);
+        if (r < 0)
+                return r;
+
         if (rename(temporary, ip) < 0)
                 return log_error_errno(errno, "Failed to rename %s to %s: %m", temporary, ip);
 
@@ -192,9 +259,9 @@
 
 int home_resize_directory(
                 UserRecord *h,
-                bool already_activated,
-                PasswordCache *cache,
+                HomeSetupFlags flags,
                 HomeSetup *setup,
+                PasswordCache *cache,
                 UserRecord **ret_home) {
 
         _cleanup_(user_record_unrefp) UserRecord *embedded_home = NULL, *new_home = NULL;
@@ -205,7 +272,7 @@
         assert(ret_home);
         assert(IN_SET(user_record_storage(h), USER_DIRECTORY, USER_SUBVOLUME, USER_FSCRYPT));
 
-        r = home_prepare(h, already_activated, cache, setup, NULL);
+        r = home_setup(h, flags, setup, cache, NULL);
         if (r < 0)
                 return r;
 
@@ -213,6 +280,10 @@
         if (r < 0)
                 return r;
 
+        r = home_maybe_shift_uid(h, flags, setup);
+        if (r < 0)
+                return r;
+
         r = home_update_quota_auto(h, NULL);
         if (ERRNO_IS_NOT_SUPPORTED(r))
                 return -ESOCKTNOSUPPORT; /* make recognizable */
@@ -231,7 +302,7 @@
         if (r < 0)
                 return r;
 
-        r = home_setup_undo(setup);
+        r = home_setup_done(setup);
         if (r < 0)
                 return r;
 
diff --git a/src/home/homework-directory.h b/src/home/homework-directory.h
index 27d640f..fe03e5d 100644
--- a/src/home/homework-directory.h
+++ b/src/home/homework-directory.h
@@ -4,7 +4,7 @@
 #include "homework.h"
 #include "user-record.h"
 
-int home_prepare_directory(UserRecord *h, bool already_activated, HomeSetup *setup);
-int home_activate_directory(UserRecord *h, PasswordCache *cache, UserRecord **ret_home);
-int home_create_directory_or_subvolume(UserRecord *h, UserRecord **ret_home);
-int home_resize_directory(UserRecord *h, bool already_activated, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_home);
+int home_setup_directory(UserRecord *h, HomeSetup *setup);
+int home_activate_directory(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup, PasswordCache *cache, UserRecord **ret_home);
+int home_create_directory_or_subvolume(UserRecord *h, HomeSetup *setup, UserRecord **ret_home);
+int home_resize_directory(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup, PasswordCache *cache, UserRecord **ret_home);
diff --git a/src/home/homework-fido2.c b/src/home/homework-fido2.c
index 23fda4a..5c7cd52 100644
--- a/src/home/homework-fido2.c
+++ b/src/home/homework-fido2.c
@@ -17,6 +17,7 @@
         _cleanup_(erase_and_freep) void *hmac = NULL;
         size_t hmac_size;
         Fido2EnrollFlags flags = 0;
+        ssize_t ss;
         int r;
 
         assert(h);
@@ -65,9 +66,9 @@
         if (r < 0)
                 return r;
 
-        r = base64mem(hmac, hmac_size, ret);
-        if (r < 0)
-                return log_error_errno(r, "Failed to base64 encode HMAC secret: %m");
+        ss = base64mem(hmac, hmac_size, ret);
+        if (ss < 0)
+                return log_error_errno(ss, "Failed to base64 encode HMAC secret: %m");
 
         return 0;
 }
diff --git a/src/home/homework-fscrypt.c b/src/home/homework-fscrypt.c
index 86dde4b..8b7fdda 100644
--- a/src/home/homework-fscrypt.c
+++ b/src/home/homework-fscrypt.c
@@ -10,11 +10,13 @@
 #include "fd-util.h"
 #include "hexdecoct.h"
 #include "homework-fscrypt.h"
+#include "homework-mount.h"
 #include "homework-quota.h"
 #include "memory-util.h"
 #include "missing_keyctl.h"
 #include "missing_syscall.h"
 #include "mkdir.h"
+#include "mount-util.h"
 #include "nulstr-util.h"
 #include "openssl-util.h"
 #include "parse-util.h"
@@ -56,10 +58,10 @@
         };
         memcpy(key.raw, volume_key, volume_key_size);
 
+        CLEANUP_ERASE(key);
+
         /* Upload to the kernel */
         serial = add_key("logon", description, &key, sizeof(key), where);
-        explicit_bzero_safe(&key, sizeof(key));
-
         if (serial < 0)
                 return log_error_errno(errno, "Failed to install master key in keyring: %m");
 
@@ -122,20 +124,18 @@
          *      resulting hash.
          */
 
+        CLEANUP_ERASE(derived);
+
         if (PKCS5_PBKDF2_HMAC(
                             password, strlen(password),
                             salt, salt_size,
                             0xFFFF, EVP_sha512(),
-                            sizeof(derived), derived) != 1) {
-                r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "PBKDF2 failed");
-                goto finish;
-        }
+                            sizeof(derived), derived) != 1)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "PBKDF2 failed");
 
         context = EVP_CIPHER_CTX_new();
-        if (!context) {
-                r = log_oom();
-                goto finish;
-        }
+        if (!context)
+                return log_oom();
 
         /* We use AES256 in counter mode */
         assert_se(cc = EVP_aes_256_ctr());
@@ -143,13 +143,8 @@
         /* We only use the first half of the derived key */
         assert(sizeof(derived) >= (size_t) EVP_CIPHER_key_length(cc));
 
-        if (EVP_DecryptInit_ex(context, cc, NULL, derived, NULL) != 1)  {
-                r = log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to initialize decryption context.");
-                goto finish;
-        }
-
-        /* Flush out the derived key now, we don't need it anymore */
-        explicit_bzero_safe(derived, sizeof(derived));
+        if (EVP_DecryptInit_ex(context, cc, NULL, derived, NULL) != 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to initialize decryption context.");
 
         decrypted_size = encrypted_size + EVP_CIPHER_key_length(cc) * 2;
         decrypted = malloc(decrypted_size);
@@ -182,10 +177,6 @@
                 *ret_decrypted_size = decrypted_size;
 
         return 0;
-
-finish:
-        explicit_bzero_safe(derived, sizeof(derived));
-        return r;
 }
 
 static int fscrypt_slot_try_many(
@@ -195,7 +186,6 @@
                 const uint8_t match_key_descriptor[static FS_KEY_DESCRIPTOR_SIZE],
                 void **ret_decrypted, size_t *ret_decrypted_size) {
 
-        char **i;
         int r;
 
         STRV_FOREACH(i, passwords) {
@@ -215,7 +205,6 @@
                 size_t *ret_volume_key_size) {
 
         _cleanup_free_ char *xattr_buf = NULL;
-        const char *xa;
         int r;
 
         assert(setup);
@@ -278,11 +267,10 @@
         return log_error_errno(SYNTHETIC_ERRNO(ENOKEY), "Failed to set up home directory with provided passwords.");
 }
 
-int home_prepare_fscrypt(
+int home_setup_fscrypt(
                 UserRecord *h,
-                bool already_activated,
-                PasswordCache *cache,
-                HomeSetup *setup) {
+                HomeSetup *setup,
+                const PasswordCache *cache) {
 
         _cleanup_(erase_and_freep) void *volume_key = NULL;
         struct fscrypt_policy policy = {};
@@ -291,8 +279,9 @@
         int r;
 
         assert(h);
-        assert(setup);
         assert(user_record_storage(h) == USER_FSCRYPT);
+        assert(setup);
+        assert(setup->root_fd < 0);
 
         assert_se(ip = user_record_image_path(h));
 
@@ -362,6 +351,33 @@
                 }
         }
 
+        /* We'll bind mount the image directory to a new mount point where we'll start adjusting it. Only
+         * once that's complete we'll move the thing to its final place eventually. */
+        r = home_unshare_and_mkdir();
+        if (r < 0)
+                return r;
+
+        r = mount_follow_verbose(LOG_ERR, ip, HOME_RUNTIME_WORK_DIR, NULL, MS_BIND, NULL);
+        if (r < 0)
+                return r;
+
+        setup->undo_mount = true;
+
+        /* Turn off any form of propagation for this */
+        r = mount_nofollow_verbose(LOG_ERR, NULL, HOME_RUNTIME_WORK_DIR, NULL, MS_PRIVATE, NULL);
+        if (r < 0)
+                return r;
+
+        /* Adjust MS_SUID and similar flags */
+        r = mount_nofollow_verbose(LOG_ERR, NULL, HOME_RUNTIME_WORK_DIR, NULL, MS_BIND|MS_REMOUNT|user_record_mount_flags(h), NULL);
+        if (r < 0)
+                return r;
+
+        safe_close(setup->root_fd);
+        setup->root_fd = open(HOME_RUNTIME_WORK_DIR, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+        if (setup->root_fd < 0)
+                return log_error_errno(errno, "Failed to open home directory: %m");
+
         return 0;
 }
 
@@ -380,25 +396,24 @@
         _cleanup_free_ void *encrypted = NULL;
         const EVP_CIPHER *cc;
         size_t encrypted_size;
+        ssize_t ss;
 
-        r = genuine_random_bytes(salt, sizeof(salt), RANDOM_BLOCK);
+        r = crypto_random_bytes(salt, sizeof(salt));
         if (r < 0)
                 return log_error_errno(r, "Failed to generate salt: %m");
 
+        CLEANUP_ERASE(derived);
+
         if (PKCS5_PBKDF2_HMAC(
                             password, strlen(password),
                             salt, sizeof(salt),
                             0xFFFF, EVP_sha512(),
-                            sizeof(derived), derived) != 1) {
-                r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "PBKDF2 failed");
-                goto finish;
-        }
+                            sizeof(derived), derived) != 1)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "PBKDF2 failed");
 
         context = EVP_CIPHER_CTX_new();
-        if (!context) {
-                r = log_oom();
-                goto finish;
-        }
+        if (!context)
+                return log_oom();
 
         /* We use AES256 in counter mode */
         cc = EVP_aes_256_ctr();
@@ -406,13 +421,8 @@
         /* We only use the first half of the derived key */
         assert(sizeof(derived) >= (size_t) EVP_CIPHER_key_length(cc));
 
-        if (EVP_EncryptInit_ex(context, cc, NULL, derived, NULL) != 1)  {
-                r = log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to initialize encryption context.");
-                goto finish;
-        }
-
-        /* Flush out the derived key now, we don't need it anymore */
-        explicit_bzero_safe(derived, sizeof(derived));
+        if (EVP_EncryptInit_ex(context, cc, NULL, derived, NULL) != 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to initialize encryption context.");
 
         encrypted_size = volume_key_size + EVP_CIPHER_key_length(cc) * 2;
         encrypted = malloc(encrypted_size);
@@ -430,12 +440,12 @@
         assert((size_t) encrypted_size_out1 + (size_t) encrypted_size_out2 < encrypted_size);
         encrypted_size = (size_t) encrypted_size_out1 + (size_t) encrypted_size_out2;
 
-        r = base64mem(salt, sizeof(salt), &salt_base64);
-        if (r < 0)
+        ss = base64mem(salt, sizeof(salt), &salt_base64);
+        if (ss < 0)
                 return log_oom();
 
-        r = base64mem(encrypted, encrypted_size, &encrypted_base64);
-        if (r < 0)
+        ss = base64mem(encrypted, encrypted_size, &encrypted_base64);
+        if (ss < 0)
                 return log_oom();
 
         joined = strjoin(salt_base64, ":", encrypted_base64);
@@ -449,31 +459,28 @@
         log_info("Written key slot %s.", label);
 
         return 0;
-
-finish:
-        explicit_bzero_safe(derived, sizeof(derived));
-        return r;
 }
 
 int home_create_fscrypt(
                 UserRecord *h,
+                HomeSetup *setup,
                 char **effective_passwords,
                 UserRecord **ret_home) {
 
         _cleanup_(rm_rf_physical_and_freep) char *temporary = NULL;
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
         _cleanup_(erase_and_freep) void *volume_key = NULL;
+        _cleanup_close_ int mount_fd = -EBADF;
         struct fscrypt_policy policy = {};
         size_t volume_key_size = 512 / 8;
-        _cleanup_close_ int root_fd = -1;
         _cleanup_free_ char *d = NULL;
         uint32_t nr = 0;
         const char *ip;
-        char **i;
         int r;
 
         assert(h);
         assert(user_record_storage(h) == USER_FSCRYPT);
+        assert(setup);
         assert(ret_home);
 
         assert_se(ip = user_record_image_path(h));
@@ -489,11 +496,15 @@
 
         temporary = TAKE_PTR(d); /* Needs to be destroyed now */
 
-        root_fd = open(temporary, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
-        if (root_fd < 0)
+        r = home_unshare_and_mkdir();
+        if (r < 0)
+                return r;
+
+        setup->root_fd = open(temporary, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+        if (setup->root_fd < 0)
                 return log_error_errno(errno, "Failed to open temporary home directory: %m");
 
-        if (ioctl(root_fd, FS_IOC_GET_ENCRYPTION_POLICY, &policy) < 0) {
+        if (ioctl(setup->root_fd, FS_IOC_GET_ENCRYPTION_POLICY, &policy) < 0) {
                 if (ERRNO_IS_NOT_SUPPORTED(errno)) {
                         log_error_errno(errno, "File system does not support fscrypt: %m");
                         return -ENOLINK; /* make recognizable */
@@ -507,7 +518,7 @@
         if (!volume_key)
                 return log_oom();
 
-        r = genuine_random_bytes(volume_key, volume_key_size, RANDOM_BLOCK);
+        r = crypto_random_bytes(volume_key, volume_key_size);
         if (r < 0)
                 return log_error_errno(r, "Failed to acquire volume key: %m");
 
@@ -527,13 +538,13 @@
 
         log_info("Uploaded volume key to kernel.");
 
-        if (ioctl(root_fd, FS_IOC_SET_ENCRYPTION_POLICY, &policy) < 0)
+        if (ioctl(setup->root_fd, FS_IOC_SET_ENCRYPTION_POLICY, &policy) < 0)
                 return log_error_errno(errno, "Failed to set fscrypt policy on directory: %m");
 
         log_info("Encryption policy set.");
 
         STRV_FOREACH(i, effective_passwords) {
-                r = fscrypt_slot_set(root_fd, volume_key, volume_key_size, *i, nr);
+                r = fscrypt_slot_set(setup->root_fd, volume_key, volume_key_size, *i, nr);
                 if (r < 0)
                         return r;
 
@@ -542,11 +553,26 @@
 
         (void) home_update_quota_classic(h, temporary);
 
-        r = home_populate(h, root_fd);
+        r = home_shift_uid(setup->root_fd, HOME_RUNTIME_WORK_DIR, h->uid, h->uid, &mount_fd);
+        if (r > 0)
+                setup->undo_mount = true; /* If uidmaps worked we have a mount to undo again */
+
+        if (mount_fd >= 0) {
+                /* If we have established a new mount, then we can use that as new root fd to our home directory. */
+                safe_close(setup->root_fd);
+
+                setup->root_fd = fd_reopen(mount_fd, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+                if (setup->root_fd < 0)
+                        return log_error_errno(setup->root_fd, "Unable to convert mount fd into proper directory fd: %m");
+
+                mount_fd = safe_close(mount_fd);
+        }
+
+        r = home_populate(h, setup->root_fd);
         if (r < 0)
                 return r;
 
-        r = home_sync_and_statfs(root_fd, NULL);
+        r = home_sync_and_statfs(setup->root_fd, NULL);
         if (r < 0)
                 return r;
 
@@ -571,6 +597,12 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to add binding to record: %m");
 
+        setup->root_fd = safe_close(setup->root_fd);
+
+        r = home_setup_undo_mount(setup, LOG_ERR);
+        if (r < 0)
+                return r;
+
         if (rename(temporary, ip) < 0)
                 return log_error_errno(errno, "Failed to rename %s to %s: %m", temporary, ip);
 
@@ -585,15 +617,13 @@
 int home_passwd_fscrypt(
                 UserRecord *h,
                 HomeSetup *setup,
-                PasswordCache *cache,               /* the passwords acquired via PKCS#11/FIDO2 security tokens */
+                const PasswordCache *cache,         /* the passwords acquired via PKCS#11/FIDO2 security tokens */
                 char **effective_passwords          /* new passwords */) {
 
         _cleanup_(erase_and_freep) void *volume_key = NULL;
         _cleanup_free_ char *xattr_buf = NULL;
         size_t volume_key_size = 0;
         uint32_t slot = 0;
-        const char *xa;
-        char **p;
         int r;
 
         assert(h);
@@ -636,7 +666,6 @@
                         continue;
 
                 if (fremovexattr(setup->root_fd, xa) < 0)
-
                         if (errno != ENODATA)
                                 log_warning_errno(errno, "Failed to remove xattr %s: %m", xa);
         }
diff --git a/src/home/homework-fscrypt.h b/src/home/homework-fscrypt.h
index 50b0399..7c2d7aa 100644
--- a/src/home/homework-fscrypt.h
+++ b/src/home/homework-fscrypt.h
@@ -4,7 +4,8 @@
 #include "homework.h"
 #include "user-record.h"
 
-int home_prepare_fscrypt(UserRecord *h, bool already_activated, PasswordCache *cache, HomeSetup *setup);
-int home_create_fscrypt(UserRecord *h, char **effective_passwords, UserRecord **ret_home);
+int home_setup_fscrypt(UserRecord *h, HomeSetup *setup, const PasswordCache *cache);
 
-int home_passwd_fscrypt(UserRecord *h, HomeSetup *setup, PasswordCache *cache, char **effective_passwords);
+int home_create_fscrypt(UserRecord *h, HomeSetup *setup, char **effective_passwords, UserRecord **ret_home);
+
+int home_passwd_fscrypt(UserRecord *h, HomeSetup *setup, const PasswordCache *cache, char **effective_passwords);
diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c
index 05a0ed8..2ea9887 100644
--- a/src/home/homework-luks.c
+++ b/src/home/homework-luks.c
@@ -1,32 +1,42 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <libfdisk.h>
 #include <linux/loop.h>
 #include <poll.h>
 #include <sys/file.h>
 #include <sys/ioctl.h>
-#include <sys/mount.h>
 #include <sys/xattr.h>
 
 #if HAVE_VALGRIND_MEMCHECK_H
 #include <valgrind/memcheck.h>
 #endif
 
+#include "sd-daemon.h"
+#include "sd-device.h"
+#include "sd-event.h"
+#include "sd-id128.h"
+
 #include "blkid-util.h"
 #include "blockdev-util.h"
 #include "btrfs-util.h"
 #include "chattr-util.h"
+#include "device-util.h"
+#include "devnum-util.h"
 #include "dm-util.h"
+#include "env-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
+#include "fdisk-util.h"
 #include "fileio.h"
+#include "filesystems.h"
 #include "fs-util.h"
 #include "fsck-util.h"
+#include "glyph-util.h"
+#include "gpt.h"
 #include "home-util.h"
 #include "homework-luks.h"
 #include "homework-mount.h"
-#include "id128-util.h"
 #include "io-util.h"
+#include "keyring-util.h"
 #include "memory-util.h"
 #include "missing_magic.h"
 #include "mkdir.h"
@@ -38,14 +48,29 @@
 #include "process-util.h"
 #include "random-util.h"
 #include "resize-fs.h"
-#include "stat-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "tmpfile-util.h"
+#include "udev-util.h"
+#include "user-util.h"
 
-/* Round down to the nearest 1K size. Note that Linux generally handles block devices with 512 blocks only,
- * but actually doesn't accept uneven numbers in many cases. To avoid any confusion around this we'll
- * strictly round disk sizes down to the next 1K boundary. */
-#define DISK_SIZE_ROUND_DOWN(x) ((x) & ~UINT64_C(1023))
+/* Round down to the nearest 4K size. Given that newer hardware generally prefers 4K sectors, let's align our
+ * partitions to that too. In the worst case we'll waste 3.5K per partition that way, but I think I can live
+ * with that. */
+#define DISK_SIZE_ROUND_DOWN(x) ((x) & ~UINT64_C(4095))
+
+/* Rounds up to the nearest 4K boundary. Returns UINT64_MAX on overflow */
+#define DISK_SIZE_ROUND_UP(x)                                           \
+        ({                                                              \
+                uint64_t _x = (x);                                      \
+                _x > UINT64_MAX - 4095U ? UINT64_MAX : (_x + 4095U) & ~UINT64_C(4095); \
+        })
+
+/* How much larger will the image on disk be than the fs inside it, i.e. the space we pay for the GPT and
+ * LUKS2 envelope. (As measured on cryptsetup 2.4.1) */
+#define GPT_LUKS2_OVERHEAD UINT64_C(18874368)
+
+static int resize_image_loop(UserRecord *h, HomeSetup *setup, uint64_t old_image_size, uint64_t new_image_size, uint64_t *ret_image_size);
 
 int run_mark_dirty(int fd, bool b) {
         char x = '1';
@@ -71,7 +96,7 @@
                         return log_debug_errno(r, "Failed to synchronize image before marking it clean: %m");
 
                 ret = fremovexattr(fd, "user.home-dirty");
-                if (ret < 0 && errno != ENODATA)
+                if (ret < 0 && !ERRNO_IS_XATTR_ABSENT(errno))
                         return log_debug_errno(errno, "Could not mark home directory as clean: %m");
         }
 
@@ -83,7 +108,7 @@
 }
 
 int run_mark_dirty_by_path(const char *path, bool b) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(path);
 
@@ -116,17 +141,19 @@
         errno = 0;
         r = blkid_probe_set_device(b, fd, 0, 0);
         if (r != 0)
-                return errno > 0 ? -errno : -ENOMEM;
+                return errno_or_else(ENOMEM);
 
         (void) blkid_probe_enable_superblocks(b, 1);
         (void) blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE|BLKID_SUBLKS_UUID);
 
         errno = 0;
         r = blkid_do_safeprobe(b);
-        if (IN_SET(r, -2, 1)) /* nothing found or ambiguous result */
+        if (r == _BLKID_SAFEPROBE_ERROR)
+                return errno_or_else(EIO);
+        if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND))
                 return -ENOPKG;
-        if (r != 0)
-                return errno > 0 ? -errno : -EIO;
+
+        assert(r == _BLKID_SAFEPROBE_FOUND);
 
         (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL);
         if (!fstype)
@@ -151,11 +178,11 @@
 }
 
 static int probe_file_system_by_path(const char *path, char **ret_fstype, sd_id128_t *ret_uuid) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
         if (fd < 0)
-                return -errno;
+                return negative_errno();
 
         return probe_file_system_by_fd(fd, ret_fstype, ret_uuid);
 }
@@ -172,14 +199,11 @@
         if (!S_ISBLK(st.st_mode))
                 return -ENOTBLK;
 
-        if (ioctl(fd, BLKGETSIZE64, ret) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, BLKGETSIZE64, ret));
 }
 
 static int block_get_size_by_path(const char *path, uint64_t *ret) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
         if (fd < 0)
@@ -195,7 +219,7 @@
         assert(node);
         assert(fstype);
 
-        r = fsck_exists(fstype);
+        r = fsck_exists_for_fstype(fstype);
         if (r < 0)
                 return log_error_errno(r, "Failed to check if fsck for file system %s exists: %m", fstype);
         if (r == 0) {
@@ -233,15 +257,59 @@
         return 1;
 }
 
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(key_serial_t, keyring_unlink, -1);
+
+static int upload_to_keyring(
+                UserRecord *h,
+                const char *password,
+                key_serial_t *ret_key_serial) {
+
+        _cleanup_free_ char *name = NULL;
+        key_serial_t serial;
+
+        assert(h);
+        assert(password);
+
+        /* If auto-shrink-on-logout is turned on, we need to keep the key we used to unlock the LUKS volume
+         * around, since we'll need it when automatically resizing (since we can't ask the user there
+         * again). We do this by uploading it into the kernel keyring, specifically the "session" one. This
+         * is done under the assumption systemd-homed gets its private per-session keyring (i.e. default
+         * service behaviour, given that KeyringMode=private is the default). It will survive between our
+         * systemd-homework invocations that way.
+         *
+         * If auto-shrink-on-logout is disabled we'll skip this step, to be frugal with sensitive data. */
+
+        if (user_record_auto_resize_mode(h) != AUTO_RESIZE_SHRINK_AND_GROW) {  /* Won't need it */
+                if (ret_key_serial)
+                        *ret_key_serial = -1;
+                return 0;
+        }
+
+        name = strjoin("homework-user-", h->user_name);
+        if (!name)
+                return -ENOMEM;
+
+        serial = add_key("user", name, password, strlen(password), KEY_SPEC_SESSION_KEYRING);
+        if (serial == -1)
+                return -errno;
+
+        if (ret_key_serial)
+                *ret_key_serial = serial;
+
+        return 1;
+}
+
 static int luks_try_passwords(
+                UserRecord *h,
                 struct crypt_device *cd,
                 char **passwords,
                 void *volume_key,
-                size_t *volume_key_size) {
+                size_t *volume_key_size,
+                key_serial_t *ret_key_serial) {
 
-        char **pp;
         int r;
 
+        assert(h);
         assert(cd);
 
         STRV_FOREACH(pp, passwords) {
@@ -255,6 +323,16 @@
                                 *pp,
                                 strlen(*pp));
                 if (r >= 0) {
+                        if (ret_key_serial) {
+                                /* If ret_key_serial is non-NULL, let's try to upload the password that
+                                 * worked, and return its serial. */
+                                r = upload_to_keyring(h, *pp, ret_key_serial);
+                                if (r < 0) {
+                                        log_debug_errno(r, "Failed to upload LUKS password to kernel keyring, ignoring: %m");
+                                        *ret_key_serial = -1;
+                                }
+                        }
+
                         *volume_key_size = vks;
                         return 0;
                 }
@@ -266,6 +344,7 @@
 }
 
 static int luks_setup(
+                UserRecord *h,
                 const char *node,
                 const char *dm_name,
                 sd_id128_t uuid,
@@ -278,8 +357,10 @@
                 struct crypt_device **ret,
                 sd_id128_t *ret_found_uuid,
                 void **ret_volume_key,
-                size_t *ret_volume_key_size) {
+                size_t *ret_volume_key_size,
+                key_serial_t *ret_key_serial) {
 
+        _cleanup_(keyring_unlinkp) key_serial_t key_serial = -1;
         _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
         _cleanup_(erase_and_freep) void *vk = NULL;
         sd_id128_t p;
@@ -287,6 +368,7 @@
         char **list;
         int r;
 
+        assert(h);
         assert(node);
         assert(dm_name);
         assert(ret);
@@ -337,15 +419,19 @@
                 return log_oom();
 
         r = -ENOKEY;
-        FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, passwords) {
-                r = luks_try_passwords(cd, list, vk, &vks);
+        FOREACH_POINTER(list,
+                        cache ? cache->keyring_passswords : NULL,
+                        cache ? cache->pkcs11_passwords : NULL,
+                        cache ? cache->fido2_passwords : NULL,
+                        passwords) {
+                r = luks_try_passwords(h, cd, list, vk, &vks, ret_key_serial ? &key_serial : NULL);
                 if (r != -ENOKEY)
                         break;
         }
         if (r == -ENOKEY)
                 return log_error_errno(r, "No valid password for LUKS superblock.");
         if (r < 0)
-                return log_error_errno(r, "Failed to unlocks LUKS superblock: %m");
+                return log_error_errno(r, "Failed to unlock LUKS superblock: %m");
 
         r = sym_crypt_activate_by_volume_key(
                         cd,
@@ -365,43 +451,94 @@
                 *ret_volume_key = TAKE_PTR(vk);
         if (ret_volume_key_size)
                 *ret_volume_key_size = vks;
+        if (ret_key_serial)
+                *ret_key_serial = TAKE_KEY_SERIAL(key_serial);
 
         return 0;
 }
 
+static int make_dm_names(UserRecord *h, HomeSetup *setup) {
+        assert(h);
+        assert(h->user_name);
+        assert(setup);
+
+        if (!setup->dm_name) {
+                setup->dm_name = strjoin("home-", h->user_name);
+                if (!setup->dm_name)
+                        return log_oom();
+        }
+
+        if (!setup->dm_node) {
+                setup->dm_node = path_join("/dev/mapper/", setup->dm_name);
+                if (!setup->dm_node)
+                        return log_oom();
+        }
+
+        return 0;
+}
+
+static int acquire_open_luks_device(
+                UserRecord *h,
+                HomeSetup *setup,
+                bool graceful) {
+
+        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
+        int r;
+
+        assert(h);
+        assert(setup);
+        assert(!setup->crypt_device);
+
+        r = dlopen_cryptsetup();
+        if (r < 0)
+                return r;
+
+        r = make_dm_names(h, setup);
+        if (r < 0)
+                return r;
+
+        r = sym_crypt_init_by_name(&cd, setup->dm_name);
+        if ((ERRNO_IS_DEVICE_ABSENT(r) || r == -EINVAL) && graceful)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to initialize cryptsetup context for %s: %m", setup->dm_name);
+
+        cryptsetup_enable_logging(cd);
+
+        setup->crypt_device = TAKE_PTR(cd);
+        return 1;
+}
+
 static int luks_open(
-                const char *dm_name,
-                char **passwords,
-                PasswordCache *cache,
-                struct crypt_device **ret,
+                UserRecord *h,
+                HomeSetup *setup,
+                const PasswordCache *cache,
                 sd_id128_t *ret_found_uuid,
                 void **ret_volume_key,
                 size_t *ret_volume_key_size) {
 
-        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
         _cleanup_(erase_and_freep) void *vk = NULL;
         sd_id128_t p;
         char **list;
         size_t vks;
         int r;
 
-        assert(dm_name);
-        assert(ret);
+        assert(h);
+        assert(setup);
+        assert(!setup->crypt_device);
 
         /* Opens a LUKS device that is already set up. Re-validates the password while doing so (which also
          * provides us with the volume key, which we want). */
 
-        r = sym_crypt_init_by_name(&cd, dm_name);
+        r = acquire_open_luks_device(h, setup, /* graceful= */ false);
         if (r < 0)
-                return log_error_errno(r, "Failed to initialize cryptsetup context for %s: %m", dm_name);
+                return r;
 
-        cryptsetup_enable_logging(cd);
-
-        r = sym_crypt_load(cd, CRYPT_LUKS2, NULL);
+        r = sym_crypt_load(setup->crypt_device, CRYPT_LUKS2, NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to load LUKS superblock: %m");
 
-        r = sym_crypt_get_volume_key_size(cd);
+        r = sym_crypt_get_volume_key_size(setup->crypt_device);
         if (r <= 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to determine LUKS volume key size");
         vks = (size_t) r;
@@ -409,7 +546,7 @@
         if (ret_found_uuid) {
                 const char *s;
 
-                s = sym_crypt_get_uuid(cd);
+                s = sym_crypt_get_uuid(setup->crypt_device);
                 if (!s)
                         return log_error_errno(SYNTHETIC_ERRNO(EMEDIUMTYPE), "LUKS superblock has no UUID.");
 
@@ -423,8 +560,12 @@
                 return log_oom();
 
         r = -ENOKEY;
-        FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, passwords) {
-                r = luks_try_passwords(cd, list, vk, &vks);
+        FOREACH_POINTER(list,
+                        cache ? cache->keyring_passswords : NULL,
+                        cache ? cache->pkcs11_passwords : NULL,
+                        cache ? cache->fido2_passwords : NULL,
+                        h->password) {
+                r = luks_try_passwords(h, setup->crypt_device, list, vk, &vks, NULL);
                 if (r != -ENOKEY)
                         break;
         }
@@ -433,18 +574,16 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to unlocks LUKS superblock: %m");
 
-        log_info("Discovered used LUKS device /dev/mapper/%s, and validated password.", dm_name);
+        log_info("Discovered used LUKS device /dev/mapper/%s, and validated password.", setup->dm_name);
 
         /* This is needed so that crypt_resize() can operate correctly for pre-existing LUKS devices. We need
          * to tell libcryptsetup the volume key explicitly, so that it is in the kernel keyring. */
-        r = sym_crypt_activate_by_volume_key(cd, NULL, vk, vks, CRYPT_ACTIVATE_KEYRING_KEY);
+        r = sym_crypt_activate_by_volume_key(setup->crypt_device, NULL, vk, vks, CRYPT_ACTIVATE_KEYRING_KEY);
         if (r < 0)
                 return log_error_errno(r, "Failed to upload volume key again: %m");
 
         log_info("Successfully re-activated LUKS device.");
 
-        *ret = TAKE_PTR(cd);
-
         if (ret_found_uuid)
                 *ret_found_uuid = p;
         if (ret_volume_key)
@@ -491,26 +630,6 @@
         return 0;
 }
 
-static int make_dm_names(const char *user_name, char **ret_dm_name, char **ret_dm_node) {
-        _cleanup_free_ char *name = NULL, *node = NULL;
-
-        assert(user_name);
-        assert(ret_dm_name);
-        assert(ret_dm_node);
-
-        name = strjoin("home-", user_name);
-        if (!name)
-                return log_oom();
-
-        node = path_join("/dev/mapper/", name);
-        if (!node)
-                return log_oom();
-
-        *ret_dm_name = TAKE_PTR(name);
-        *ret_dm_node = TAKE_PTR(node);
-        return 0;
-}
-
 static int luks_validate(
                 int fd,
                 const char *label,
@@ -539,7 +658,7 @@
         errno = 0;
         r = blkid_probe_set_device(b, fd, 0, 0);
         if (r != 0)
-                return errno > 0 ? -errno : -ENOMEM;
+                return errno_or_else(ENOMEM);
 
         (void) blkid_probe_enable_superblocks(b, 1);
         (void) blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE);
@@ -548,10 +667,12 @@
 
         errno = 0;
         r = blkid_do_safeprobe(b);
-        if (IN_SET(r, -2, 1)) /* nothing found or ambiguous result */
+        if (r == _BLKID_SAFEPROBE_ERROR)
+                return errno_or_else(EIO);
+        if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND))
                 return -ENOPKG;
-        if (r != 0)
-                return errno > 0 ? -errno : -EIO;
+
+        assert(r == _BLKID_SAFEPROBE_FOUND);
 
         (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL);
         if (streq_ptr(fstype, "crypto_LUKS")) {
@@ -570,38 +691,34 @@
         errno = 0;
         pl = blkid_probe_get_partitions(b);
         if (!pl)
-                return errno > 0 ? -errno : -ENOMEM;
+                return errno_or_else(ENOMEM);
 
         errno = 0;
         n = blkid_partlist_numof_partitions(pl);
         if (n < 0)
-                return errno > 0 ? -errno : -EIO;
+                return errno_or_else(EIO);
 
         for (int i = 0; i < n; i++) {
-                blkid_partition pp;
                 sd_id128_t id = SD_ID128_NULL;
-                const char *sid;
+                blkid_partition pp;
 
                 errno = 0;
                 pp = blkid_partlist_get_partition(pl, i);
                 if (!pp)
-                        return errno > 0 ? -errno : -EIO;
+                        return errno_or_else(EIO);
 
-                if (!streq_ptr(blkid_partition_get_type_string(pp), "773f91ef-66d4-49b5-bd83-d683bf40ad16"))
+                if (sd_id128_string_equal(blkid_partition_get_type_string(pp), SD_GPT_USER_HOME) <= 0)
                         continue;
 
                 if (!streq_ptr(blkid_partition_get_name(pp), label))
                         continue;
 
-                sid = blkid_partition_get_uuid(pp);
-                if (sid) {
-                        r = sd_id128_from_string(sid, &id);
-                        if (r < 0)
-                                log_debug_errno(r, "Couldn't parse partition UUID %s, weird: %m", sid);
 
-                        if (!sd_id128_is_null(partition_uuid) && !sd_id128_equal(id, partition_uuid))
-                                continue;
-                }
+                r = blkid_partition_get_uuid_id128(pp, &id);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to read partition UUID, ignoring: %m");
+                else if (!sd_id128_is_null(partition_uuid) && !sd_id128_equal(id, partition_uuid))
+                        continue;
 
                 if (found)
                         return -ENOPKG;
@@ -654,7 +771,7 @@
 
         e = strchr(cipher_mode, '-');
         if (e)
-                cipher_mode = strndupa(cipher_mode, e - cipher_mode);
+                cipher_mode = strndupa_safe(cipher_mode, e - cipher_mode);
 
         r = sym_crypt_get_volume_key_size(cd);
         if (r <= 0)
@@ -693,7 +810,7 @@
         assert(cd);
         assert(h);
 
-        for (int token = 0;; token++) {
+        for (int token = 0; token < sym_crypt_token_max(CRYPT_LUKS2); token++) {
                 _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *rr = NULL;
                 _cleanup_(EVP_CIPHER_CTX_freep) EVP_CIPHER_CTX *context = NULL;
                 _cleanup_(user_record_unrefp) UserRecord *lhr = NULL;
@@ -833,7 +950,7 @@
                 if (!iv)
                         return log_oom();
 
-                r = genuine_random_bytes(iv, iv_size, RANDOM_BLOCK);
+                r = crypto_random_bytes(iv, iv_size);
                 if (r < 0)
                         return log_error_errno(r, "Failed to generate IV: %m");
         }
@@ -868,7 +985,7 @@
 
         r = json_build(&v,
                        JSON_BUILD_OBJECT(
-                                       JSON_BUILD_PAIR("type", JSON_BUILD_STRING("systemd-homed")),
+                                       JSON_BUILD_PAIR("type", JSON_BUILD_CONST_STRING("systemd-homed")),
                                        JSON_BUILD_PAIR("keyslots", JSON_BUILD_EMPTY_ARRAY),
                                        JSON_BUILD_PAIR("record", JSON_BUILD_BASE64(encrypted, encrypted_size_out1 + encrypted_size_out2)),
                                        JSON_BUILD_PAIR("iv", JSON_BUILD_BASE64(iv, iv_size))));
@@ -889,7 +1006,7 @@
 
         _cleanup_(user_record_unrefp) UserRecord *header_home = NULL;
         _cleanup_free_ char *text = NULL;
-        int token = 0, r;
+        int r;
 
         assert(h);
 
@@ -919,7 +1036,7 @@
         if (r < 0)
                 return r;
 
-        for (;; token++) {
+        for (int token = 0; token < sym_crypt_token_max(CRYPT_LUKS2); token++) {
                 crypt_token_info state;
                 const char *type;
 
@@ -941,7 +1058,6 @@
                 /* Now, let's free the text so that for all further matching tokens we all crypt_json_token_set()
                  * with a NULL text in order to invalidate the tokens. */
                 text = mfree(text);
-                token++;
         }
 
         if (text)
@@ -953,7 +1069,6 @@
 }
 
 int run_fitrim(int root_fd) {
-        char buf[FORMAT_BYTES_MAX];
         struct fstrim_range range = {
                 .len = UINT64_MAX,
         };
@@ -972,23 +1087,11 @@
                 return log_warning_errno(errno, "Failed to invoke FITRIM, ignoring: %m");
         }
 
-        log_info("Discarded unused %s.",
-                 format_bytes(buf, sizeof(buf), range.len));
+        log_info("Discarded unused %s.", FORMAT_BYTES(range.len));
         return 1;
 }
 
-int run_fitrim_by_path(const char *root_path) {
-        _cleanup_close_ int root_fd = -1;
-
-        root_fd = open(root_path, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
-        if (root_fd < 0)
-                return log_error_errno(errno, "Failed to open file system '%s' for trimming: %m", root_path);
-
-        return run_fitrim(root_fd);
-}
-
 int run_fallocate(int backing_fd, const struct stat *st) {
-        char buf[FORMAT_BYTES_MAX];
         struct stat stbuf;
 
         assert(backing_fd >= 0);
@@ -1027,12 +1130,12 @@
         }
 
         log_info("Allocated additional %s.",
-                 format_bytes(buf, sizeof(buf), (DIV_ROUND_UP(st->st_size, 512) - st->st_blocks) * 512));
+                 FORMAT_BYTES((DIV_ROUND_UP(st->st_size, 512) - st->st_blocks) * 512));
         return 1;
 }
 
 int run_fallocate_by_path(const char *backing_path) {
-        _cleanup_close_ int backing_fd = -1;
+        _cleanup_close_ int backing_fd = -EBADF;
 
         backing_fd = open(backing_path, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
         if (backing_fd < 0)
@@ -1041,78 +1144,165 @@
         return run_fallocate(backing_fd, NULL);
 }
 
-int home_prepare_luks(
+static int lock_image_fd(int image_fd, const char *ip) {
+        int r;
+
+        /* If the $SYSTEMD_LUKS_LOCK environment variable is set we'll take an exclusive BSD lock on the
+         * image file, and send it to our parent. homed will keep it open to ensure no other instance of
+         * homed (across the network or such) will also mount the file. */
+
+        assert(image_fd >= 0);
+        assert(ip);
+
+        r = getenv_bool("SYSTEMD_LUKS_LOCK");
+        if (r == -ENXIO)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse $SYSTEMD_LUKS_LOCK environment variable: %m");
+        if (r == 0)
+                return 0;
+
+        if (flock(image_fd, LOCK_EX|LOCK_NB) < 0) {
+
+                if (errno == EAGAIN)
+                        log_error_errno(errno, "Image file '%s' already locked, can't use.", ip);
+                else
+                        log_error_errno(errno, "Failed to lock image file '%s': %m", ip);
+
+                return errno != EAGAIN ? -errno : -EADDRINUSE; /* Make error recognizable */
+        }
+
+        log_info("Successfully locked image file '%s'.", ip);
+
+        /* Now send it to our parent to keep safe while the home dir is active */
+        r = sd_pid_notify_with_fds(0, false, "SYSTEMD_LUKS_LOCK_FD=1", &image_fd, 1);
+        if (r < 0)
+                log_warning_errno(r, "Failed to send LUKS lock fd to parent, ignoring: %m");
+
+        return 0;
+}
+
+static int open_image_file(
                 UserRecord *h,
-                bool already_activated,
                 const char *force_image_path,
-                PasswordCache *cache,
+                struct stat *ret_stat) {
+
+        _cleanup_close_ int image_fd = -EBADF;
+        struct stat st;
+        const char *ip;
+        int r;
+
+        assert(h || force_image_path);
+
+        ip = force_image_path ?: user_record_image_path(h);
+
+        image_fd = open(ip, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
+        if (image_fd < 0)
+                return log_error_errno(errno, "Failed to open image file %s: %m", ip);
+
+        if (fstat(image_fd, &st) < 0)
+                return log_error_errno(errno, "Failed to fstat() image file: %m");
+        if (!S_ISREG(st.st_mode) && !S_ISBLK(st.st_mode))
+                return log_error_errno(
+                                S_ISDIR(st.st_mode) ? SYNTHETIC_ERRNO(EISDIR) : SYNTHETIC_ERRNO(EBADFD),
+                                "Image file %s is not a regular file or block device: %m", ip);
+
+        /* Locking block devices doesn't really make sense, as this might interfere with
+         * udev's workings, and these locks aren't network propagated anyway, hence not what
+         * we are after here. */
+        if (S_ISREG(st.st_mode)) {
+                r = lock_image_fd(image_fd, ip);
+                if (r < 0)
+                        return r;
+        }
+
+        if (ret_stat)
+                *ret_stat = st;
+
+        return TAKE_FD(image_fd);
+}
+
+int home_setup_luks(
+                UserRecord *h,
+                HomeSetupFlags flags,
+                const char *force_image_path,
                 HomeSetup *setup,
+                PasswordCache *cache,
                 UserRecord **ret_luks_home) {
 
-        sd_id128_t found_partition_uuid, found_luks_uuid, found_fs_uuid;
+        sd_id128_t found_partition_uuid, found_fs_uuid, found_luks_uuid = SD_ID128_NULL;
         _cleanup_(user_record_unrefp) UserRecord *luks_home = NULL;
-        _cleanup_(loop_device_unrefp) LoopDevice *loop = NULL;
-        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
         _cleanup_(erase_and_freep) void *volume_key = NULL;
-        _cleanup_close_ int root_fd = -1, image_fd = -1;
-        bool dm_activated = false, mounted = false;
         size_t volume_key_size = 0;
-        bool marked_dirty = false;
         uint64_t offset, size;
+        struct stat st;
         int r;
 
         assert(h);
         assert(setup);
-        assert(setup->dm_name);
-        assert(setup->dm_node);
-
         assert(user_record_storage(h) == USER_LUKS);
 
         r = dlopen_cryptsetup();
         if (r < 0)
                 return r;
 
-        if (already_activated) {
+        r = make_dm_names(h, setup);
+        if (r < 0)
+                return r;
+
+        /* Reuse the image fd if it has already been opened by an earlier step */
+        if (setup->image_fd < 0) {
+                setup->image_fd = open_image_file(h, force_image_path, &st);
+                if (setup->image_fd < 0)
+                        return setup->image_fd;
+        } else if (fstat(setup->image_fd, &st) < 0)
+                return log_error_errno(errno, "Failed to stat image: %m");
+
+        if (FLAGS_SET(flags, HOME_SETUP_ALREADY_ACTIVATED)) {
                 struct loop_info64 info;
                 const char *n;
 
-                r = luks_open(setup->dm_name,
-                              h->password,
-                              cache,
-                              &cd,
-                              &found_luks_uuid,
-                              &volume_key,
-                              &volume_key_size);
-                if (r < 0)
-                        return r;
+                if (!setup->crypt_device) {
+                        r = luks_open(h,
+                                      setup,
+                                      cache,
+                                      &found_luks_uuid,
+                                      &volume_key,
+                                      &volume_key_size);
+                        if (r < 0)
+                                return r;
+                }
 
-                r = luks_validate_home_record(cd, h, volume_key, cache, &luks_home);
-                if (r < 0)
-                        return r;
+                if (ret_luks_home) {
+                        r = luks_validate_home_record(setup->crypt_device, h, volume_key, cache, &luks_home);
+                        if (r < 0)
+                                return r;
+                }
 
-                n = sym_crypt_get_device_name(cd);
+                n = sym_crypt_get_device_name(setup->crypt_device);
                 if (!n)
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to determine backing device for DM %s.", setup->dm_name);
 
-                r = loop_device_open(n, O_RDWR, &loop);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to open loopback device %s: %m", n);
+                if (!setup->loop) {
+                        r = loop_device_open_from_path(n, O_RDWR, LOCK_UN, &setup->loop);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to open loopback device %s: %m", n);
+                }
 
-                if (ioctl(loop->fd, LOOP_GET_STATUS64, &info) < 0) {
+                if (ioctl(setup->loop->fd, LOOP_GET_STATUS64, &info) < 0) {
                         _cleanup_free_ char *sysfs = NULL;
-                        struct stat st;
 
                         if (!IN_SET(errno, ENOTTY, EINVAL))
                                 return log_error_errno(errno, "Failed to get block device metrics of %s: %m", n);
 
-                        if (ioctl(loop->fd, BLKGETSIZE64, &size) < 0)
+                        if (ioctl(setup->loop->fd, BLKGETSIZE64, &size) < 0)
                                 return log_error_errno(r, "Failed to read block device size of %s: %m", n);
 
-                        if (fstat(loop->fd, &st) < 0)
+                        if (fstat(setup->loop->fd, &st) < 0)
                                 return log_error_errno(r, "Failed to stat block device %s: %m", n);
                         assert(S_ISBLK(st.st_mode));
 
-                        if (asprintf(&sysfs, "/sys/dev/block/%u:%u/partition", major(st.st_rdev), minor(st.st_rdev)) < 0)
+                        if (asprintf(&sysfs, "/sys/dev/block/" DEVNUM_FORMAT_STR "/partition", DEVNUM_FORMAT_VAL(st.st_rdev)) < 0)
                                 return log_oom();
 
                         if (access(sysfs, F_OK) < 0) {
@@ -1123,7 +1313,7 @@
                         } else {
                                 _cleanup_free_ char *buffer = NULL;
 
-                                if (asprintf(&sysfs, "/sys/dev/block/%u:%u/start", major(st.st_rdev), minor(st.st_rdev)) < 0)
+                                if (asprintf(&sysfs, "/sys/dev/block/" DEVNUM_FORMAT_STR "/start", DEVNUM_FORMAT_VAL(st.st_rdev)) < 0)
                                         return log_oom();
 
                                 r = read_one_line_file(sysfs, &buffer);
@@ -1150,50 +1340,53 @@
 
                 found_partition_uuid = found_fs_uuid = SD_ID128_NULL;
 
-                log_info("Discovered used loopback device %s.", loop->node);
+                log_info("Discovered used loopback device %s.", setup->loop->node);
 
-                root_fd = open(user_record_home_directory(h), O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
-                if (root_fd < 0) {
-                        r = log_error_errno(errno, "Failed to open home directory: %m");
-                        goto fail;
+                if (setup->root_fd < 0) {
+                        setup->root_fd = open(user_record_home_directory(h), O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+                        if (setup->root_fd < 0)
+                                return log_error_errno(errno, "Failed to open home directory: %m");
                 }
         } else {
                 _cleanup_free_ char *fstype = NULL, *subdir = NULL;
                 const char *ip;
-                struct stat st;
+
+                /* When we aren't reopening the home directory we are allocating it fresh, hence the relevant
+                 * objects can't be allocated yet. */
+                assert(setup->root_fd < 0);
+                assert(!setup->crypt_device);
+                assert(!setup->loop);
 
                 ip = force_image_path ?: user_record_image_path(h);
 
-                subdir = path_join("/run/systemd/user-home-mount/", user_record_user_name_and_realm(h));
+                subdir = path_join(HOME_RUNTIME_WORK_DIR, user_record_user_name_and_realm(h));
                 if (!subdir)
                         return log_oom();
 
-                image_fd = open(ip, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
-                if (image_fd < 0)
-                        return log_error_errno(errno, "Failed to open image file %s: %m", ip);
-
-                if (fstat(image_fd, &st) < 0)
-                        return log_error_errno(errno, "Failed to fstat() image file: %m");
-                if (!S_ISREG(st.st_mode) && !S_ISBLK(st.st_mode))
-                        return log_error_errno(
-                                        S_ISDIR(st.st_mode) ? SYNTHETIC_ERRNO(EISDIR) : SYNTHETIC_ERRNO(EBADFD),
-                                        "Image file %s is not a regular file or block device: %m", ip);
-
-                r = luks_validate(image_fd, user_record_user_name_and_realm(h), h->partition_uuid, &found_partition_uuid, &offset, &size);
+                r = luks_validate(setup->image_fd, user_record_user_name_and_realm(h), h->partition_uuid, &found_partition_uuid, &offset, &size);
                 if (r < 0)
                         return log_error_errno(r, "Failed to validate disk label: %m");
 
                 /* Everything before this point left the image untouched. We are now starting to make
                  * changes, hence mark the image dirty */
-                marked_dirty = run_mark_dirty(image_fd, true) > 0;
+                if (run_mark_dirty(setup->image_fd, true) > 0)
+                        setup->do_mark_clean = true;
 
                 if (!user_record_luks_discard(h)) {
-                        r = run_fallocate(image_fd, &st);
+                        r = run_fallocate(setup->image_fd, &st);
                         if (r < 0)
                                 return r;
                 }
 
-                r = loop_device_make(image_fd, O_RDWR, offset, size, 0, &loop);
+                r = loop_device_make(
+                                setup->image_fd,
+                                O_RDWR,
+                                offset,
+                                size,
+                                h->luks_sector_size == UINT64_MAX ? UINT32_MAX : user_record_luks_sector_size(h), /* if sector size is not specified, select UINT32_MAX, i.e. auto-probe */
+                                /* loop_flags= */ 0,
+                                LOCK_UN,
+                                &setup->loop);
                 if (r == -ENOENT) {
                         log_error_errno(r, "Loopback block device support is not available on this system.");
                         return -ENOLINK; /* make recognizable */
@@ -1201,9 +1394,10 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to allocate loopback context: %m");
 
-                log_info("Setting up loopback device %s completed.", loop->node ?: ip);
+                log_info("Setting up loopback device %s completed.", setup->loop->node ?: ip);
 
-                r = luks_setup(loop->node ?: ip,
+                r = luks_setup(h,
+                               setup->loop->node ?: ip,
                                setup->dm_name,
                                h->luks_uuid,
                                h->luks_cipher,
@@ -1212,98 +1406,122 @@
                                h->password,
                                cache,
                                user_record_luks_discard(h) || user_record_luks_offline_discard(h),
-                               &cd,
+                               &setup->crypt_device,
                                &found_luks_uuid,
                                &volume_key,
-                               &volume_key_size);
+                               &volume_key_size,
+                               &setup->key_serial);
                 if (r < 0)
                         return r;
 
-                dm_activated = true;
+                setup->undo_dm = true;
 
-                r = luks_validate_home_record(cd, h, volume_key, cache, &luks_home);
-                if (r < 0)
-                        goto fail;
+                if (ret_luks_home) {
+                        r = luks_validate_home_record(setup->crypt_device, h, volume_key, cache, &luks_home);
+                        if (r < 0)
+                                return r;
+                }
 
                 r = fs_validate(setup->dm_node, h->file_system_uuid, &fstype, &found_fs_uuid);
                 if (r < 0)
-                        goto fail;
+                        return r;
 
                 r = run_fsck(setup->dm_node, fstype);
                 if (r < 0)
-                        goto fail;
+                        return r;
 
-                r = home_unshare_and_mount(setup->dm_node, fstype, user_record_luks_discard(h), user_record_mount_flags(h));
+                r = home_unshare_and_mount(setup->dm_node, fstype, user_record_luks_discard(h), user_record_mount_flags(h), h->luks_extra_mount_options);
                 if (r < 0)
-                        goto fail;
+                        return r;
 
-                mounted = true;
+                setup->undo_mount = true;
 
-                root_fd = open(subdir, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
-                if (root_fd < 0) {
-                        r = log_error_errno(errno, "Failed to open home directory: %m");
-                        goto fail;
-                }
+                setup->root_fd = open(subdir, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+                if (setup->root_fd < 0)
+                        return log_error_errno(errno, "Failed to open home directory: %m");
 
                 if (user_record_luks_discard(h))
-                        (void) run_fitrim(root_fd);
+                        (void) run_fitrim(setup->root_fd);
 
-                setup->image_fd = TAKE_FD(image_fd);
                 setup->do_offline_fallocate = !(setup->do_offline_fitrim = user_record_luks_offline_discard(h));
-                setup->do_mark_clean = marked_dirty;
         }
 
-        setup->loop = TAKE_PTR(loop);
-        setup->crypt_device = TAKE_PTR(cd);
-        setup->root_fd = TAKE_FD(root_fd);
-        setup->found_partition_uuid = found_partition_uuid;
-        setup->found_luks_uuid = found_luks_uuid;
-        setup->found_fs_uuid = found_fs_uuid;
+        if (!sd_id128_is_null(found_partition_uuid))
+                setup->found_partition_uuid = found_partition_uuid;
+        if (!sd_id128_is_null(found_luks_uuid))
+                setup->found_luks_uuid = found_luks_uuid;
+        if (!sd_id128_is_null(found_fs_uuid))
+                setup->found_fs_uuid = found_fs_uuid;
+
         setup->partition_offset = offset;
         setup->partition_size = size;
-        setup->volume_key = TAKE_PTR(volume_key);
-        setup->volume_key_size = volume_key_size;
 
-        setup->undo_mount = mounted;
-        setup->undo_dm = dm_activated;
+        if (volume_key) {
+                erase_and_free(setup->volume_key);
+                setup->volume_key = TAKE_PTR(volume_key);
+                setup->volume_key_size = volume_key_size;
+        }
 
         if (ret_luks_home)
                 *ret_luks_home = TAKE_PTR(luks_home);
 
         return 0;
-
-fail:
-        if (mounted)
-                (void) umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
-
-        if (dm_activated)
-                (void) sym_crypt_deactivate_by_name(cd, setup->dm_name, 0);
-
-        if (image_fd >= 0 && marked_dirty)
-                (void) run_mark_dirty(image_fd, false);
-
-        return r;
 }
 
-static void print_size_summary(uint64_t host_size, uint64_t encrypted_size, struct statfs *sfs) {
-        char buffer1[FORMAT_BYTES_MAX], buffer2[FORMAT_BYTES_MAX], buffer3[FORMAT_BYTES_MAX], buffer4[FORMAT_BYTES_MAX];
-
+static void print_size_summary(uint64_t host_size, uint64_t encrypted_size, const struct statfs *sfs) {
         assert(sfs);
 
         log_info("Image size is %s, file system size is %s, file system payload size is %s, file system free is %s.",
-                 format_bytes(buffer1, sizeof(buffer1), host_size),
-                 format_bytes(buffer2, sizeof(buffer2), encrypted_size),
-                 format_bytes(buffer3, sizeof(buffer3), (uint64_t) sfs->f_blocks * (uint64_t) sfs->f_frsize),
-                 format_bytes(buffer4, sizeof(buffer4), (uint64_t) sfs->f_bfree * (uint64_t) sfs->f_frsize));
+                 FORMAT_BYTES(host_size),
+                 FORMAT_BYTES(encrypted_size),
+                 FORMAT_BYTES((uint64_t) sfs->f_blocks * (uint64_t) sfs->f_frsize),
+                 FORMAT_BYTES((uint64_t) sfs->f_bfree * (uint64_t) sfs->f_frsize));
+}
+
+static int home_auto_grow_luks(
+                UserRecord *h,
+                HomeSetup *setup,
+                PasswordCache *cache) {
+
+        struct statfs sfs;
+
+        assert(h);
+        assert(setup);
+
+        if (!IN_SET(user_record_auto_resize_mode(h), AUTO_RESIZE_GROW, AUTO_RESIZE_SHRINK_AND_GROW))
+                return 0;
+
+        assert(setup->root_fd >= 0);
+
+        if (fstatfs(setup->root_fd, &sfs) < 0)
+                return log_error_errno(errno, "Failed to statfs home directory: %m");
+
+        if (!fs_can_online_shrink_and_grow(sfs.f_type)) {
+                log_debug("Not auto-grow file system, since selected file system cannot do both online shrink and grow.");
+                return 0;
+        }
+
+        log_debug("Initiating auto-grow...");
+
+        return home_resize_luks(
+                        h,
+                        HOME_SETUP_ALREADY_ACTIVATED|
+                        HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES|
+                        HOME_SETUP_RESIZE_DONT_SHRINK|
+                        HOME_SETUP_RESIZE_DONT_UNDO,
+                        setup,
+                        cache,
+                        NULL);
 }
 
 int home_activate_luks(
                 UserRecord *h,
+                HomeSetupFlags flags,
+                HomeSetup *setup,
                 PasswordCache *cache,
                 UserRecord **ret_home) {
 
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL, *luks_home_record = NULL;
-        _cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
         uint64_t host_size, encrypted_size;
         const char *hdo, *hd;
         struct statfs sfs;
@@ -1311,6 +1529,7 @@
 
         assert(h);
         assert(user_record_storage(h) == USER_LUKS);
+        assert(setup);
         assert(ret_home);
 
         r = dlopen_cryptsetup();
@@ -1318,40 +1537,40 @@
                 return r;
 
         assert_se(hdo = user_record_home_directory(h));
-        hd = strdupa(hdo); /* copy the string out, since it might change later in the home record object */
+        hd = strdupa_safe(hdo); /* copy the string out, since it might change later in the home record object */
 
-        r = make_dm_names(h->user_name, &setup.dm_name, &setup.dm_node);
+        r = home_get_state_luks(h, setup);
         if (r < 0)
                 return r;
+        if (r > 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EEXIST), "Device mapper device %s already exists, refusing.", setup->dm_node);
 
-        r = access(setup.dm_node, F_OK);
-        if (r < 0) {
-                if (errno != ENOENT)
-                        return log_error_errno(errno, "Failed to determine whether %s exists: %m", setup.dm_node);
-        } else
-                return log_error_errno(SYNTHETIC_ERRNO(EEXIST), "Device mapper device %s already exists, refusing.", setup.dm_node);
-
-        r = home_prepare_luks(
+        r = home_setup_luks(
                         h,
-                        false,
+                        0,
                         NULL,
+                        setup,
                         cache,
-                        &setup,
                         &luks_home_record);
         if (r < 0)
                 return r;
 
-        r = block_get_size_by_fd(setup.loop->fd, &host_size);
+        r = home_auto_grow_luks(h, setup, cache);
+        if (r < 0)
+                return r;
+
+        r = block_get_size_by_fd(setup->loop->fd, &host_size);
         if (r < 0)
                 return log_error_errno(r, "Failed to get loopback block device size: %m");
 
-        r = block_get_size_by_path(setup.dm_node, &encrypted_size);
+        r = block_get_size_by_path(setup->dm_node, &encrypted_size);
         if (r < 0)
                 return log_error_errno(r, "Failed to get LUKS block device size: %m");
 
         r = home_refresh(
                         h,
-                        &setup,
+                        flags,
+                        setup,
                         luks_home_record,
                         cache,
                         &sfs,
@@ -1359,30 +1578,32 @@
         if (r < 0)
                 return r;
 
-        r = home_extend_embedded_identity(new_home, h, &setup);
+        r = home_extend_embedded_identity(new_home, h, setup);
         if (r < 0)
                 return r;
 
-        setup.root_fd = safe_close(setup.root_fd);
+        setup->root_fd = safe_close(setup->root_fd);
 
         r = home_move_mount(user_record_user_name_and_realm(h), hd);
         if (r < 0)
                 return r;
 
-        setup.undo_mount = false;
-        setup.do_offline_fitrim = false;
+        setup->undo_mount = false;
+        setup->do_offline_fitrim = false;
 
-        loop_device_relinquish(setup.loop);
+        loop_device_relinquish(setup->loop);
 
-        r = sym_crypt_deactivate_by_name(NULL, setup.dm_name, CRYPT_DEACTIVATE_DEFERRED);
+        r = sym_crypt_deactivate_by_name(NULL, setup->dm_name, CRYPT_DEACTIVATE_DEFERRED);
         if (r < 0)
                 log_warning_errno(r, "Failed to relinquish DM device, ignoring: %m");
 
-        setup.undo_dm = false;
-        setup.do_offline_fallocate = false;
-        setup.do_mark_clean = false;
+        setup->undo_dm = false;
+        setup->do_offline_fallocate = false;
+        setup->do_mark_clean = false;
+        setup->do_drop_caches = false;
+        TAKE_KEY_SERIAL(setup->key_serial); /* Leave key in kernel keyring */
 
-        log_info("Everything completed.");
+        log_info("Activation completed.");
 
         print_size_summary(host_size, encrypted_size, &sfs);
 
@@ -1390,49 +1611,46 @@
         return 1;
 }
 
-int home_deactivate_luks(UserRecord *h) {
-        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
-        _cleanup_free_ char *dm_name = NULL, *dm_node = NULL;
-        bool we_detached;
+int home_deactivate_luks(UserRecord *h, HomeSetup *setup) {
+        bool we_detached = false;
         int r;
 
+        assert(h);
+        assert(setup);
+
         /* Note that the DM device and loopback device are set to auto-detach, hence strictly speaking we
          * don't have to explicitly have to detach them. However, we do that nonetheless (in case of the DM
          * device), to avoid races: by explicitly detaching them we know when the detaching is complete. We
          * don't bother about the loopback device because unlike the DM device it doesn't have a fixed
          * name. */
 
-        r = dlopen_cryptsetup();
-        if (r < 0)
-                return r;
+        if (!setup->crypt_device) {
+                r = acquire_open_luks_device(h, setup, /* graceful= */ true);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to initialize cryptsetup context for %s: %m", setup->dm_name);
+                if (r == 0)
+                        log_debug("LUKS device %s has already been detached.", setup->dm_name);
+        }
 
-        r = make_dm_names(h->user_name, &dm_name, &dm_node);
-        if (r < 0)
-                return r;
+        if (setup->crypt_device) {
+                log_info("Discovered used LUKS device %s.", setup->dm_node);
 
-        r = sym_crypt_init_by_name(&cd, dm_name);
-        if (IN_SET(r, -ENODEV, -EINVAL, -ENOENT)) {
-                log_debug_errno(r, "LUKS device %s has already been detached.", dm_name);
-                we_detached = false;
-        } else if (r < 0)
-                return log_error_errno(r, "Failed to initialize cryptsetup context for %s: %m", dm_name);
-        else {
-                log_info("Discovered used LUKS device %s.", dm_node);
+                cryptsetup_enable_logging(setup->crypt_device);
 
-                cryptsetup_enable_logging(cd);
-
-                r = sym_crypt_deactivate_by_name(cd, dm_name, 0);
-                if (IN_SET(r, -ENODEV, -EINVAL, -ENOENT)) {
-                        log_debug_errno(r, "LUKS device %s is already detached.", dm_node);
-                        we_detached = false;
-                } else if (r < 0)
-                        return log_info_errno(r, "LUKS device %s couldn't be deactivated: %m", dm_node);
+                r = sym_crypt_deactivate_by_name(setup->crypt_device, setup->dm_name, 0);
+                if (ERRNO_IS_DEVICE_ABSENT(r) || r == -EINVAL)
+                        log_debug_errno(r, "LUKS device %s is already detached.", setup->dm_node);
+                else if (r < 0)
+                        return log_info_errno(r, "LUKS device %s couldn't be deactivated: %m", setup->dm_node);
                 else {
                         log_info("LUKS device detaching completed.");
                         we_detached = true;
                 }
         }
 
+        (void) wait_for_block_device_gone(setup, USEC_PER_SEC * 30);
+        setup->undo_dm = false;
+
         if (user_record_luks_offline_discard(h))
                 log_debug("Not allocating on logout.");
         else
@@ -1442,15 +1660,17 @@
         return we_detached;
 }
 
-int home_trim_luks(UserRecord *h) {
+int home_trim_luks(UserRecord *h, HomeSetup *setup) {
         assert(h);
+        assert(setup);
+        assert(setup->root_fd >= 0);
 
         if (!user_record_luks_offline_discard(h)) {
                 log_debug("Not trimming on logout.");
                 return 0;
         }
 
-        (void) run_fitrim_by_path(user_record_home_directory(h));
+        (void) run_fitrim(setup->root_fd);
         return 0;
 }
 
@@ -1458,12 +1678,16 @@
         assert(buffer);
         assert(hr);
 
+        bool benchmark = user_record_luks_pbkdf_force_iterations(hr) == UINT64_MAX;
+
         *buffer = (struct crypt_pbkdf_type) {
                 .hash = user_record_luks_pbkdf_hash_algorithm(hr),
                 .type = user_record_luks_pbkdf_type(hr),
-                .time_ms = user_record_luks_pbkdf_time_cost_usec(hr) / USEC_PER_MSEC,
+                .time_ms = benchmark ? user_record_luks_pbkdf_time_cost_usec(hr) / USEC_PER_MSEC : 0,
+                .iterations = benchmark ? 0 : user_record_luks_pbkdf_force_iterations(hr),
                 .max_memory_kb = user_record_luks_pbkdf_memory_cost(hr) / 1024,
                 .parallel_threads = user_record_luks_pbkdf_parallel_threads(hr),
+                .flags = benchmark ? 0 : CRYPT_PBKDF_NO_BENCHMARK,
         };
 
         return buffer;
@@ -1500,7 +1724,6 @@
         _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
         _cleanup_(erase_and_freep) void *volume_key = NULL;
         struct crypt_pbkdf_type good_pbkdf, minimal_pbkdf;
-        char suuid[ID128_UUID_STRING_MAX], **pp;
         _cleanup_free_ char *text = NULL;
         size_t volume_key_size;
         int slot = 0, r;
@@ -1525,7 +1748,7 @@
         if (!volume_key)
                 return log_oom();
 
-        r = genuine_random_bytes(volume_key, volume_key_size, RANDOM_BLOCK);
+        r = crypto_random_bytes(volume_key, volume_key_size);
         if (r < 0)
                 return log_error_errno(r, "Failed to generate volume key: %m");
 
@@ -1539,19 +1762,20 @@
         build_good_pbkdf(&good_pbkdf, hr);
         build_minimal_pbkdf(&minimal_pbkdf, hr);
 
-        r = sym_crypt_format(cd,
-                         CRYPT_LUKS2,
-                         user_record_luks_cipher(hr),
-                         user_record_luks_cipher_mode(hr),
-                         id128_to_uuid_string(uuid, suuid),
-                         volume_key,
-                         volume_key_size,
-                         &(struct crypt_params_luks2) {
-                                 .label = label,
-                                 .subsystem = "systemd-home",
-                                 .sector_size = 512U,
-                                 .pbkdf = &good_pbkdf,
-                         });
+        r = sym_crypt_format(
+                        cd,
+                        CRYPT_LUKS2,
+                        user_record_luks_cipher(hr),
+                        user_record_luks_cipher_mode(hr),
+                        SD_ID128_TO_UUID_STRING(uuid),
+                        volume_key,
+                        volume_key_size,
+                        &(struct crypt_params_luks2) {
+                                .label = label,
+                                .subsystem = "systemd-home",
+                                .sector_size = user_record_luks_sector_size(hr),
+                                .pbkdf = &good_pbkdf,
+                        });
         if (r < 0)
                 return log_error_errno(r, "Failed to format LUKS image: %m");
 
@@ -1559,8 +1783,7 @@
 
         STRV_FOREACH(pp, effective_passwords) {
 
-                if (strv_contains(cache->pkcs11_passwords, *pp) ||
-                    strv_contains(cache->fido2_passwords, *pp)) {
+                if (password_cache_contains(cache, *pp)) { /* is this a fido2 or pkcs11 password? */
                         log_debug("Using minimal PBKDF for slot %i", slot);
                         r = sym_crypt_set_pbkdf_type(cd, &minimal_pbkdf);
                 } else {
@@ -1615,13 +1838,9 @@
         return 0;
 }
 
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_context*, fdisk_unref_context, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_partition*, fdisk_unref_partition, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_parttype*, fdisk_unref_parttype, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_table*, fdisk_unref_table, NULL);
-
 static int make_partition_table(
                 int fd,
+                uint32_t sector_size,
                 const char *label,
                 sd_id128_t uuid,
                 uint64_t *ret_offset,
@@ -1631,10 +1850,9 @@
         _cleanup_(fdisk_unref_partitionp) struct fdisk_partition *p = NULL, *q = NULL;
         _cleanup_(fdisk_unref_parttypep) struct fdisk_parttype *t = NULL;
         _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
-        _cleanup_free_ char *path = NULL, *disk_uuid_as_string = NULL;
-        uint64_t offset, size;
+        _cleanup_free_ char *disk_uuid_as_string = NULL;
+        uint64_t offset, size, first_lba, start, last_lba, end;
         sd_id128_t disk_uuid;
-        char uuids[ID128_UUID_STRING_MAX];
         int r;
 
         assert(fd >= 0);
@@ -1646,18 +1864,11 @@
         if (!t)
                 return log_oom();
 
-        r = fdisk_parttype_set_typestr(t, "773f91ef-66d4-49b5-bd83-d683bf40ad16");
+        r = fdisk_parttype_set_typestr(t, SD_GPT_USER_HOME_STR);
         if (r < 0)
                 return log_error_errno(r, "Failed to initialize partition type: %m");
 
-        c = fdisk_new_context();
-        if (!c)
-                return log_oom();
-
-        if (asprintf(&path, "/proc/self/fd/%i", fd) < 0)
-                return log_oom();
-
-        r = fdisk_assign_device(c, path, 0);
+        r = fdisk_new_context_fd(fd, /* read_only= */ false, sector_size, &c);
         if (r < 0)
                 return log_error_errno(r, "Failed to open device: %m");
 
@@ -1673,23 +1884,39 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to set partition type: %m");
 
-        r = fdisk_partition_start_follow_default(p, 1);
-        if (r < 0)
-                return log_error_errno(r, "Failed to place partition at beginning of space: %m");
-
         r = fdisk_partition_partno_follow_default(p, 1);
         if (r < 0)
                 return log_error_errno(r, "Failed to place partition at first free partition index: %m");
 
-        r = fdisk_partition_end_follow_default(p, 1);
+        first_lba = fdisk_get_first_lba(c); /* Boundary where usable space starts */
+        assert(first_lba <= UINT64_MAX/512);
+        start = DISK_SIZE_ROUND_UP(first_lba * 512); /* Round up to multiple of 4K */
+
+        log_debug("Starting partition at offset %" PRIu64, start);
+
+        if (start == UINT64_MAX)
+                return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Overflow while rounding up start LBA.");
+
+        last_lba = fdisk_get_last_lba(c); /* One sector before boundary where usable space ends */
+        assert(last_lba < UINT64_MAX/512);
+        end = DISK_SIZE_ROUND_DOWN((last_lba + 1) * 512); /* Round down to multiple of 4K */
+
+        if (end <= start)
+                return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Resulting partition size zero or negative.");
+
+        r = fdisk_partition_set_start(p, start / 512);
         if (r < 0)
-                return log_error_errno(r, "Failed to make partition cover all free space: %m");
+                return log_error_errno(r, "Failed to place partition at offset %" PRIu64 ": %m", start);
+
+        r = fdisk_partition_set_size(p, (end - start) / 512);
+        if (r < 0)
+                return log_error_errno(r, "Failed to end partition at offset %" PRIu64 ": %m", end);
 
         r = fdisk_partition_set_name(p, label);
         if (r < 0)
                 return log_error_errno(r, "Failed to set partition name: %m");
 
-        r = fdisk_partition_set_uuid(p, id128_to_uuid_string(uuid, uuids));
+        r = fdisk_partition_set_uuid(p, SD_ID128_TO_UUID_STRING(uuid));
         if (r < 0)
                 return log_error_errno(r, "Failed to set partition UUID: %m");
 
@@ -1741,7 +1968,7 @@
 }
 
 static int wait_for_devlink(const char *path) {
-        _cleanup_close_ int inotify_fd = -1;
+        _cleanup_close_ int inotify_fd = -EBADF;
         usec_t until;
         int r;
 
@@ -1769,10 +1996,11 @@
                                 return log_error_errno(errno, "Failed to allocate inotify fd: %m");
                 }
 
-                dn = dirname_malloc(path);
+                r = path_extract_directory(path, &dn);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract directory from device node path '%s': %m", path);
                 for (;;) {
-                        if (!dn)
-                                return log_oom();
+                        _cleanup_free_ char *ndn = NULL;
 
                         log_info("Watching %s", dn);
 
@@ -1782,64 +2010,74 @@
                         } else
                                 break;
 
-                        if (empty_or_root(dn))
+                        r = path_extract_directory(dn, &ndn);
+                        if (r == -EADDRNOTAVAIL) /* Arrived at the top? */
                                 break;
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to extract directory from device node path '%s': %m", dn);
 
-                        dn = dirname_malloc(dn);
+                        free_and_replace(dn, ndn);
                 }
 
                 w = now(CLOCK_MONOTONIC);
                 if (w >= until)
                         return log_error_errno(SYNTHETIC_ERRNO(ETIMEDOUT), "Device link %s still hasn't shown up, giving up.", path);
 
-                r = fd_wait_for_event(inotify_fd, POLLIN, usec_sub_unsigned(until, w));
-                if (r < 0)
+                r = fd_wait_for_event(inotify_fd, POLLIN, until - w);
+                if (r < 0) {
+                        if (ERRNO_IS_TRANSIENT(r))
+                                continue;
                         return log_error_errno(r, "Failed to watch inotify: %m");
+                }
 
                 (void) flush_fd(inotify_fd);
         }
 }
 
-static int calculate_disk_size(UserRecord *h, const char *parent_dir, uint64_t *ret) {
-        char buf[FORMAT_BYTES_MAX];
+static int calculate_initial_image_size(UserRecord *h, int image_fd, const char *fstype, uint64_t *ret) {
+        uint64_t upper_boundary, lower_boundary;
         struct statfs sfs;
-        uint64_t m;
 
         assert(h);
-        assert(parent_dir);
+        assert(image_fd >= 0);
         assert(ret);
 
-        if (h->disk_size != UINT64_MAX) {
-                *ret = DISK_SIZE_ROUND_DOWN(h->disk_size);
-                return 0;
-        }
+        if (fstatfs(image_fd, &sfs) < 0)
+                return log_error_errno(errno, "statfs() on image failed: %m");
 
-        if (statfs(parent_dir, &sfs) < 0)
-                return log_error_errno(errno, "statfs() on %s failed: %m", parent_dir);
+        upper_boundary = DISK_SIZE_ROUND_DOWN((uint64_t) sfs.f_bsize * sfs.f_bavail);
 
-        m = sfs.f_bsize * sfs.f_bavail;
+        if (h->disk_size != UINT64_MAX)
+                *ret = MIN(DISK_SIZE_ROUND_DOWN(h->disk_size), upper_boundary);
+        else if (h->disk_size_relative == UINT64_MAX) {
 
-        if (h->disk_size_relative == UINT64_MAX) {
-
-                if (m > UINT64_MAX / USER_DISK_SIZE_DEFAULT_PERCENT)
+                if (upper_boundary > UINT64_MAX / USER_DISK_SIZE_DEFAULT_PERCENT)
                         return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Disk size too large.");
 
-                *ret = DISK_SIZE_ROUND_DOWN(m * USER_DISK_SIZE_DEFAULT_PERCENT / 100);
+                *ret = DISK_SIZE_ROUND_DOWN(upper_boundary * USER_DISK_SIZE_DEFAULT_PERCENT / 100);
 
                 log_info("Sizing home to %u%% of available disk space, which is %s.",
                          USER_DISK_SIZE_DEFAULT_PERCENT,
-                         format_bytes(buf, sizeof(buf), *ret));
+                         FORMAT_BYTES(*ret));
         } else {
-                *ret = DISK_SIZE_ROUND_DOWN((uint64_t) ((double) m * (double) h->disk_size_relative / (double) UINT32_MAX));
+                *ret = DISK_SIZE_ROUND_DOWN((uint64_t) ((double) upper_boundary * (double) CLAMP(h->disk_size_relative, 0U, UINT32_MAX) / (double) UINT32_MAX));
 
                 log_info("Sizing home to %" PRIu64 ".%01" PRIu64 "%% of available disk space, which is %s.",
                          (h->disk_size_relative * 100) / UINT32_MAX,
                          ((h->disk_size_relative * 1000) / UINT32_MAX) % 10,
-                         format_bytes(buf, sizeof(buf), *ret));
+                         FORMAT_BYTES(*ret));
         }
 
-        if (*ret < USER_DISK_SIZE_MIN)
-                *ret = USER_DISK_SIZE_MIN;
+        lower_boundary = minimal_size_by_fs_name(fstype);
+        if (lower_boundary != UINT64_MAX) {
+                assert(GPT_LUKS2_OVERHEAD < UINT64_MAX - lower_boundary);
+                lower_boundary += GPT_LUKS2_OVERHEAD;
+        }
+        if (lower_boundary == UINT64_MAX || lower_boundary < USER_DISK_SIZE_MIN)
+                lower_boundary = USER_DISK_SIZE_MIN;
+
+        if (*ret < lower_boundary)
+                *ret = lower_boundary;
 
         return 0;
 }
@@ -1847,7 +2085,6 @@
 static int home_truncate(
                 UserRecord *h,
                 int fd,
-                const char *path,
                 uint64_t size) {
 
         bool trunc;
@@ -1855,7 +2092,6 @@
 
         assert(h);
         assert(fd >= 0);
-        assert(path);
 
         trunc = user_record_luks_discard(h);
         if (!trunc) {
@@ -1873,37 +2109,58 @@
 
         if (r < 0) {
                 if (ERRNO_IS_DISK_SPACE(errno)) {
-                        log_error_errno(errno, "Not enough disk space to allocate home.");
+                        log_debug_errno(errno, "Not enough disk space to allocate home of size %s.", FORMAT_BYTES(size));
                         return -ENOSPC; /* make recognizable */
                 }
 
-                return log_error_errno(errno, "Failed to truncate home image %s: %m", path);
+                return log_error_errno(errno, "Failed to truncate home image: %m");
         }
 
+        return !trunc; /* Return == 0 if we managed to truncate, > 0 if we managed to allocate */
+}
+
+static int mkfs_options_for_fstype(const char *fstype, char ***ret) {
+        _cleanup_(strv_freep) char **l = NULL;
+        const char *e;
+        char *n;
+
+        assert(fstype);
+
+        n = strjoina("SYSTEMD_HOME_MKFS_OPTIONS_", fstype);
+        e = getenv(ascii_strupper(n));
+        if (e) {
+                l = strv_split(e, NULL);
+                if (!l)
+                        return -ENOMEM;
+        }
+
+        *ret = TAKE_PTR(l);
         return 0;
 }
 
 int home_create_luks(
                 UserRecord *h,
-                PasswordCache *cache,
+                HomeSetup *setup,
+                const PasswordCache *cache,
                 char **effective_passwords,
                 UserRecord **ret_home) {
 
-        _cleanup_free_ char *dm_name = NULL, *dm_node = NULL, *subdir = NULL, *disk_uuid_path = NULL, *temporary_image_path = NULL;
+        _cleanup_free_ char *subdir = NULL, *disk_uuid_path = NULL;
         uint64_t encrypted_size,
                 host_size = 0, partition_offset = 0, partition_size = 0; /* Unnecessary initialization to appease gcc */
-        bool image_created = false, dm_activated = false, mounted = false;
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
         sd_id128_t partition_uuid, fs_uuid, luks_uuid, disk_uuid;
-        _cleanup_(loop_device_unrefp) LoopDevice *loop = NULL;
-        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
-        _cleanup_close_ int image_fd = -1, root_fd = -1;
+        _cleanup_close_ int mount_fd = -EBADF;
         const char *fstype, *ip;
         struct statfs sfs;
         int r;
+        _cleanup_strv_free_ char **extra_mkfs_options = NULL;
 
         assert(h);
         assert(h->storage < 0 || h->storage == USER_LUKS);
+        assert(setup);
+        assert(!setup->temporary_image_path);
+        assert(setup->image_fd < 0);
         assert(ret_home);
 
         r = dlopen_cryptsetup();
@@ -1954,16 +2211,16 @@
         } else
                 fs_uuid = h->file_system_uuid;
 
-        r = make_dm_names(h->user_name, &dm_name, &dm_node);
+        r = make_dm_names(h, setup);
         if (r < 0)
                 return r;
 
-        r = access(dm_node, F_OK);
+        r = access(setup->dm_node, F_OK);
         if (r < 0) {
                 if (errno != ENOENT)
-                        return log_error_errno(errno, "Failed to determine whether %s exists: %m", dm_node);
+                        return log_error_errno(errno, "Failed to determine whether %s exists: %m", setup->dm_node);
         } else
-                return log_error_errno(SYNTHETIC_ERRNO(EEXIST), "Device mapper device %s already exists, refusing.", dm_node);
+                return log_error_errno(SYNTHETIC_ERRNO(EEXIST), "Device mapper device %s already exists, refusing.", setup->dm_node);
 
         if (path_startswith(ip, "/dev/")) {
                 _cleanup_free_ char *sysfs = NULL;
@@ -1972,16 +2229,14 @@
 
                 /* Let's place the home directory on a real device, i.e. an USB stick or such */
 
-                image_fd = open(ip, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
-                if (image_fd < 0)
-                        return log_error_errno(errno, "Failed to open device %s: %m", ip);
+                setup->image_fd = open_image_file(h, ip, &st);
+                if (setup->image_fd < 0)
+                        return setup->image_fd;
 
-                if (fstat(image_fd, &st) < 0)
-                        return log_error_errno(errno, "Failed to stat device %s: %m", ip);
                 if (!S_ISBLK(st.st_mode))
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK), "Device is not a block device, refusing.");
 
-                if (asprintf(&sysfs, "/sys/dev/block/%u:%u/partition", major(st.st_rdev), minor(st.st_rdev)) < 0)
+                if (asprintf(&sysfs, "/sys/dev/block/" DEVNUM_FORMAT_STR "/partition", DEVNUM_FORMAT_VAL(st.st_rdev)) < 0)
                         return log_oom();
                 if (access(sysfs, F_OK) < 0) {
                         if (errno != ENOENT)
@@ -1989,10 +2244,10 @@
                 } else
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK), "Operating on partitions is currently not supported, sorry. Please specify a top-level block device.");
 
-                if (flock(image_fd, LOCK_EX) < 0) /* make sure udev doesn't read from it while we operate on the device */
+                if (flock(setup->image_fd, LOCK_EX) < 0) /* make sure udev doesn't read from it while we operate on the device */
                         return log_error_errno(errno, "Failed to lock block device %s: %m", ip);
 
-                if (ioctl(image_fd, BLKGETSIZE64, &block_device_size) < 0)
+                if (ioctl(setup->image_fd, BLKGETSIZE64, &block_device_size) < 0)
                         return log_error_errno(errno, "Failed to read block device size: %m");
 
                 if (h->disk_size == UINT64_MAX) {
@@ -2009,7 +2264,7 @@
                 else
                         host_size = DISK_SIZE_ROUND_DOWN(h->disk_size);
 
-                if (!supported_fs_size(fstype, host_size))
+                if (!supported_fs_size(fstype, LESS_BY(host_size, GPT_LUKS2_OVERHEAD)))
                         return log_error_errno(SYNTHETIC_ERRNO(ERANGE),
                                                "Selected file system size too small for %s.", fstype);
 
@@ -2022,152 +2277,152 @@
                 if (user_record_luks_discard(h) || user_record_luks_offline_discard(h)) {
                         /* If we want online or offline discard, discard once before we start using things. */
 
-                        if (ioctl(image_fd, BLKDISCARD, (uint64_t[]) { 0, block_device_size }) < 0)
+                        if (ioctl(setup->image_fd, BLKDISCARD, (uint64_t[]) { 0, block_device_size }) < 0)
                                 log_full_errno(errno == EOPNOTSUPP ? LOG_DEBUG : LOG_WARNING, errno,
                                                "Failed to issue full-device BLKDISCARD on device, ignoring: %m");
                         else
                                 log_info("Full device discard completed.");
                 }
         } else {
-                _cleanup_free_ char *parent = NULL;
+                _cleanup_free_ char *t = NULL;
 
-                parent = dirname_malloc(ip);
-                if (!parent)
-                        return log_oom();
-
-                r = mkdir_p(parent, 0755);
+                r = mkdir_parents(ip, 0755);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to create parent directory %s: %m", parent);
+                        return log_error_errno(r, "Failed to create parent directory of %s: %m", ip);
 
-                r = calculate_disk_size(h, parent, &host_size);
-                if (r < 0)
-                        return r;
-
-                if (!supported_fs_size(fstype, host_size))
-                        return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Selected file system size too small for %s.", fstype);
-
-                r = tempfn_random(ip, "homework", &temporary_image_path);
+                r = tempfn_random(ip, "homework", &t);
                 if (r < 0)
                         return log_error_errno(r, "Failed to derive temporary file name for %s: %m", ip);
 
-                image_fd = open(temporary_image_path, O_RDWR|O_CREAT|O_EXCL|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
-                if (image_fd < 0)
-                        return log_error_errno(errno, "Failed to create home image %s: %m", temporary_image_path);
+                setup->image_fd = open(t, O_RDWR|O_CREAT|O_EXCL|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
+                if (setup->image_fd < 0)
+                        return log_error_errno(errno, "Failed to create home image %s: %m", t);
 
-                image_created = true;
+                setup->temporary_image_path = TAKE_PTR(t);
 
-                r = chattr_fd(image_fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
-                if (r < 0)
+                r = chattr_full(t, setup->image_fd, FS_NOCOW_FL|FS_NOCOMP_FL, FS_NOCOW_FL|FS_NOCOMP_FL, NULL, NULL, CHATTR_FALLBACK_BITWISE);
+                if (r < 0 && r != -ENOANO) /* ENOANO → some bits didn't work; which we skip logging about because chattr_full() already debug logs about those flags */
                         log_full_errno(ERRNO_IS_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING, r,
-                                       "Failed to set file attributes on %s, ignoring: %m", temporary_image_path);
+                                       "Failed to set file attributes on %s, ignoring: %m", setup->temporary_image_path);
 
-                r = home_truncate(h, image_fd, temporary_image_path, host_size);
+                r = calculate_initial_image_size(h, setup->image_fd, fstype, &host_size);
                 if (r < 0)
-                        goto fail;
+                        return r;
+
+                r = resize_image_loop(h, setup, 0, host_size, &host_size);
+                if (r < 0)
+                        return r;
 
                 log_info("Allocating image file completed.");
         }
 
         r = make_partition_table(
-                        image_fd,
+                        setup->image_fd,
+                        user_record_luks_sector_size(h),
                         user_record_user_name_and_realm(h),
                         partition_uuid,
                         &partition_offset,
                         &partition_size,
                         &disk_uuid);
         if (r < 0)
-                goto fail;
+                return r;
 
         log_info("Writing of partition table completed.");
 
-        r = loop_device_make(image_fd, O_RDWR, partition_offset, partition_size, 0, &loop);
+        r = loop_device_make(
+                        setup->image_fd,
+                        O_RDWR,
+                        partition_offset,
+                        partition_size,
+                        user_record_luks_sector_size(h),
+                        0,
+                        LOCK_EX,
+                        &setup->loop);
         if (r < 0) {
                 if (r == -ENOENT) { /* this means /dev/loop-control doesn't exist, i.e. we are in a container
                                      * or similar and loopback bock devices are not available, return a
                                      * recognizable error in this case. */
                         log_error_errno(r, "Loopback block device support is not available on this system.");
-                        r = -ENOLINK;
-                        goto fail;
+                        return -ENOLINK; /* Make recognizable */
                 }
 
-                log_error_errno(r, "Failed to set up loopback device for %s: %m", temporary_image_path);
-                goto fail;
+                return log_error_errno(r, "Failed to set up loopback device for %s: %m", setup->temporary_image_path);
         }
 
-        r = loop_device_flock(loop, LOCK_EX); /* make sure udev won't read before we are done */
-        if (r < 0) {
-                log_error_errno(r, "Failed to take lock on loop device: %m");
-                goto fail;
-        }
+        log_info("Setting up loopback device %s completed.", setup->loop->node ?: ip);
 
-        log_info("Setting up loopback device %s completed.", loop->node ?: ip);
-
-        r = luks_format(loop->node,
-                        dm_name,
+        r = luks_format(setup->loop->node,
+                        setup->dm_name,
                         luks_uuid,
                         user_record_user_name_and_realm(h),
                         cache,
                         effective_passwords,
                         user_record_luks_discard(h) || user_record_luks_offline_discard(h),
                         h,
-                        &cd);
+                        &setup->crypt_device);
         if (r < 0)
-                goto fail;
+                return r;
 
-        dm_activated = true;
+        setup->undo_dm = true;
 
-        r = block_get_size_by_path(dm_node, &encrypted_size);
-        if (r < 0) {
-                log_error_errno(r, "Failed to get encrypted block device size: %m");
-                goto fail;
-        }
-
-        log_info("Setting up LUKS device %s completed.", dm_node);
-
-        r = make_filesystem(dm_node, fstype, user_record_user_name_and_realm(h), fs_uuid, user_record_luks_discard(h));
+        r = block_get_size_by_path(setup->dm_node, &encrypted_size);
         if (r < 0)
-                goto fail;
+                return log_error_errno(r, "Failed to get encrypted block device size: %m");
+
+        log_info("Setting up LUKS device %s completed.", setup->dm_node);
+
+        r = mkfs_options_for_fstype(fstype, &extra_mkfs_options);
+        if (r < 0)
+                return log_error_errno(r, "Failed to determine mkfs command line options for '%s': %m", fstype);
+        r = make_filesystem(setup->dm_node, fstype, user_record_user_name_and_realm(h), NULL, fs_uuid, user_record_luks_discard(h), 0, extra_mkfs_options);
+        if (r < 0)
+                return r;
 
         log_info("Formatting file system completed.");
 
-        r = home_unshare_and_mount(dm_node, fstype, user_record_luks_discard(h), user_record_mount_flags(h));
+        r = home_unshare_and_mount(setup->dm_node, fstype, user_record_luks_discard(h), user_record_mount_flags(h), h->luks_extra_mount_options);
         if (r < 0)
-                goto fail;
+                return r;
 
-        mounted = true;
+        setup->undo_mount = true;
 
-        subdir = path_join("/run/systemd/user-home-mount/", user_record_user_name_and_realm(h));
-        if (!subdir) {
-                r = log_oom();
-                goto fail;
-        }
+        subdir = path_join(HOME_RUNTIME_WORK_DIR, user_record_user_name_and_realm(h));
+        if (!subdir)
+                return log_oom();
 
         /* Prefer using a btrfs subvolume if we can, fall back to directory otherwise */
         r = btrfs_subvol_make_fallback(subdir, 0700);
-        if (r < 0) {
-                log_error_errno(r, "Failed to create user directory in mounted image file: %m");
-                goto fail;
+        if (r < 0)
+                return log_error_errno(r, "Failed to create user directory in mounted image file: %m");
+
+        setup->root_fd = open(subdir, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+        if (setup->root_fd < 0)
+                return log_error_errno(errno, "Failed to open user directory in mounted image file: %m");
+
+        (void) home_shift_uid(setup->root_fd, NULL, UID_NOBODY, h->uid, &mount_fd);
+
+        if (mount_fd >= 0) {
+                /* If we have established a new mount, then we can use that as new root fd to our home directory. */
+                safe_close(setup->root_fd);
+
+                setup->root_fd = fd_reopen(mount_fd, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+                if (setup->root_fd < 0)
+                        return log_error_errno(setup->root_fd, "Unable to convert mount fd into proper directory fd: %m");
+
+                mount_fd = safe_close(mount_fd);
         }
 
-        root_fd = open(subdir, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
-        if (root_fd < 0) {
-                r = log_error_errno(errno, "Failed to open user directory in mounted image file: %m");
-                goto fail;
-        }
-
-        r = home_populate(h, root_fd);
+        r = home_populate(h, setup->root_fd);
         if (r < 0)
-                goto fail;
+                return r;
 
-        r = home_sync_and_statfs(root_fd, &sfs);
+        r = home_sync_and_statfs(setup->root_fd, &sfs);
         if (r < 0)
-                goto fail;
+                return r;
 
         r = user_record_clone(h, USER_RECORD_LOAD_MASK_SECRET|USER_RECORD_LOG|USER_RECORD_PERMISSIVE, &new_home);
-        if (r < 0) {
-                log_error_errno(r, "Failed to clone record: %m");
-                goto fail;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to clone record: %m");
 
         r = user_record_add_binding(
                         new_home,
@@ -2176,126 +2431,93 @@
                         partition_uuid,
                         luks_uuid,
                         fs_uuid,
-                        sym_crypt_get_cipher(cd),
-                        sym_crypt_get_cipher_mode(cd),
-                        luks_volume_key_size_convert(cd),
+                        sym_crypt_get_cipher(setup->crypt_device),
+                        sym_crypt_get_cipher_mode(setup->crypt_device),
+                        luks_volume_key_size_convert(setup->crypt_device),
                         fstype,
                         NULL,
                         h->uid,
                         (gid_t) h->uid);
-        if (r < 0) {
-                log_error_errno(r, "Failed to add binding to record: %m");
-                goto fail;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to add binding to record: %m");
 
         if (user_record_luks_offline_discard(h)) {
-                r = run_fitrim(root_fd);
+                r = run_fitrim(setup->root_fd);
                 if (r < 0)
-                        goto fail;
+                        return r;
         }
 
-        root_fd = safe_close(root_fd);
+        setup->root_fd = safe_close(setup->root_fd);
 
-        r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
+        r = home_setup_undo_mount(setup, LOG_ERR);
         if (r < 0)
-                goto fail;
+                return r;
 
-        mounted = false;
+        r = home_setup_undo_dm(setup, LOG_ERR);
+        if (r < 0)
+                return r;
 
-        r = sym_crypt_deactivate_by_name(cd, dm_name, 0);
-        if (r < 0) {
-                log_error_errno(r, "Failed to deactivate LUKS device: %m");
-                goto fail;
-        }
-
-        sym_crypt_free(cd);
-        cd = NULL;
-
-        dm_activated = false;
-
-        loop = loop_device_unref(loop);
+        setup->loop = loop_device_unref(setup->loop);
 
         if (!user_record_luks_offline_discard(h)) {
-                r = run_fallocate(image_fd, NULL /* refresh stat() data */);
+                r= run_fallocate(setup->image_fd, NULL /* refresh stat() data */);
                 if (r < 0)
-                        goto fail;
+                        return r;
         }
 
         /* Sync everything to disk before we move things into place under the final name. */
-        if (fsync(image_fd) < 0) {
-                r = log_error_errno(r, "Failed to synchronize image to disk: %m");
-                goto fail;
-        }
+        if (fsync(setup->image_fd) < 0)
+                return log_error_errno(r, "Failed to synchronize image to disk: %m");
 
         if (disk_uuid_path)
-                (void) ioctl(image_fd, BLKRRPART, 0);
+                /* Reread partition table if this is a block device */
+                (void) ioctl(setup->image_fd, BLKRRPART, 0);
         else {
+                assert(setup->temporary_image_path);
+
+                if (rename(setup->temporary_image_path, ip) < 0)
+                        return log_error_errno(errno, "Failed to rename image file: %m");
+
+                setup->temporary_image_path = mfree(setup->temporary_image_path);
+
                 /* If we operate on a file, sync the containing directory too. */
-                r = fsync_directory_of_file(image_fd);
-                if (r < 0) {
-                        log_error_errno(r, "Failed to synchronize directory of image file to disk: %m");
-                        goto fail;
-                }
-        }
-
-        /* Let's close the image fd now. If we are operating on a real block device this will release the BSD
-         * lock that ensures udev doesn't interfere with what we are doing */
-        image_fd = safe_close(image_fd);
-
-        if (temporary_image_path) {
-                if (rename(temporary_image_path, ip) < 0) {
-                        log_error_errno(errno, "Failed to rename image file: %m");
-                        goto fail;
-                }
+                r = fsync_directory_of_file(setup->image_fd);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to synchronize directory of image file to disk: %m");
 
                 log_info("Moved image file into place.");
         }
 
+        /* Let's close the image fd now. If we are operating on a real block device this will release the BSD
+         * lock that ensures udev doesn't interfere with what we are doing */
+        setup->image_fd = safe_close(setup->image_fd);
+
         if (disk_uuid_path)
                 (void) wait_for_devlink(disk_uuid_path);
 
-        log_info("Everything completed.");
+        log_info("Creation completed.");
 
         print_size_summary(host_size, encrypted_size, &sfs);
 
+        log_debug("GPT + LUKS2 overhead is %" PRIu64 " (expected %" PRIu64 ")", host_size - encrypted_size, GPT_LUKS2_OVERHEAD);
+
         *ret_home = TAKE_PTR(new_home);
         return 0;
-
-fail:
-        /* Let's close all files before we unmount the file system, to avoid EBUSY */
-        root_fd = safe_close(root_fd);
-
-        if (mounted)
-                (void) umount_verbose(LOG_WARNING, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
-
-        if (dm_activated)
-                (void) sym_crypt_deactivate_by_name(cd, dm_name, 0);
-
-        loop = loop_device_unref(loop);
-
-        if (image_created)
-                (void) unlink(temporary_image_path);
-
-        return r;
 }
 
-int home_validate_update_luks(UserRecord *h, HomeSetup *setup) {
-        _cleanup_free_ char *dm_name = NULL, *dm_node = NULL;
+int home_get_state_luks(UserRecord *h, HomeSetup *setup) {
         int r;
 
         assert(h);
         assert(setup);
 
-        r = make_dm_names(h->user_name, &dm_name, &dm_node);
+        r = make_dm_names(h, setup);
         if (r < 0)
                 return r;
 
-        r = access(dm_node, F_OK);
+        r = access(setup->dm_node, F_OK);
         if (r < 0 && errno != ENOENT)
-                return log_error_errno(errno, "Failed to determine whether %s exists: %m", dm_node);
-
-        free_and_replace(setup->dm_name, dm_name);
-        free_and_replace(setup->dm_node, dm_node);
+                return log_error_errno(errno, "Failed to determine whether %s exists: %m", setup->dm_node);
 
         return r >= 0;
 }
@@ -2352,7 +2574,13 @@
         return CAN_RESIZE_ONLINE;
 }
 
-static int ext4_offline_resize_fs(HomeSetup *setup, uint64_t new_size, bool discard, unsigned long flags) {
+static int ext4_offline_resize_fs(
+                HomeSetup *setup,
+                uint64_t new_size,
+                bool discard,
+                unsigned long flags,
+                const char *extra_mount_options) {
+
         _cleanup_free_ char *size_str = NULL;
         bool re_open = false, re_mount = false;
         pid_t resize_pid, fsck_pid;
@@ -2368,11 +2596,10 @@
         }
 
         if (setup->undo_mount) {
-                r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
+                r = home_setup_undo_mount(setup, LOG_ERR);
                 if (r < 0)
                         return r;
 
-                setup->undo_mount = false;
                 re_mount = true;
         }
 
@@ -2428,7 +2655,7 @@
 
         /* Re-establish mounts and reopen the directory */
         if (re_mount) {
-                r = home_mount_node(setup->dm_node, "ext4", discard, flags);
+                r = home_mount_node(setup->dm_node, "ext4", discard, flags, extra_mount_options);
                 if (r < 0)
                         return r;
 
@@ -2436,7 +2663,7 @@
         }
 
         if (re_open) {
-                setup->root_fd = open("/run/systemd/user-home-mount", O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
+                setup->root_fd = open(HOME_RUNTIME_WORK_DIR, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
                 if (setup->root_fd < 0)
                         return log_error_errno(errno, "Failed to reopen file system: %m");
         }
@@ -2450,16 +2677,16 @@
                 int fd,
                 uint64_t partition_offset,
                 uint64_t old_partition_size,
-                uint64_t new_partition_size,
                 sd_id128_t *ret_disk_uuid,
-                struct fdisk_table **ret_table) {
+                struct fdisk_table **ret_table,
+                struct fdisk_partition **ret_partition) {
 
         _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
         _cleanup_(fdisk_unref_tablep) struct fdisk_table *t = NULL;
-        _cleanup_free_ char *path = NULL, *disk_uuid_as_string = NULL;
-        size_t n_partitions;
+        _cleanup_free_ char *disk_uuid_as_string = NULL;
+        struct fdisk_partition *found = NULL;
         sd_id128_t disk_uuid;
-        bool found = false;
+        size_t n_partitions;
         int r;
 
         assert(fd >= 0);
@@ -2468,26 +2695,18 @@
 
         assert((partition_offset & 511) == 0);
         assert((old_partition_size & 511) == 0);
-        assert((new_partition_size & 511) == 0);
         assert(UINT64_MAX - old_partition_size >= partition_offset);
-        assert(UINT64_MAX - new_partition_size >= partition_offset);
 
         if (partition_offset == 0) {
                 /* If the offset is at the beginning we assume no partition table, let's exit early. */
                 log_debug("Not rewriting partition table, operating on naked device.");
                 *ret_disk_uuid = SD_ID128_NULL;
                 *ret_table = NULL;
+                *ret_partition = NULL;
                 return 0;
         }
 
-        c = fdisk_new_context();
-        if (!c)
-                return log_oom();
-
-        if (asprintf(&path, "/proc/self/fd/%i", fd) < 0)
-                return log_oom();
-
-        r = fdisk_assign_device(c, path, 0);
+        r = fdisk_new_context_fd(fd, /* read_only= */ false, UINT32_MAX, &c);
         if (r < 0)
                 return log_error_errno(r, "Failed to open device: %m");
 
@@ -2525,30 +2744,17 @@
                         if (found)
                                 return log_error_errno(SYNTHETIC_ERRNO(ENOTUNIQ), "Partition found twice, refusing.");
 
-                        /* Found our partition, now patch it */
-                        r = fdisk_partition_size_explicit(p, 1);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to enable explicit partition size: %m");
-
-                        r = fdisk_partition_set_size(p, new_partition_size / 512U);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to change partition size: %m");
-
-                        found = true;
-                        continue;
-
-                } else {
-                        if (fdisk_partition_get_start(p) < partition_offset + new_partition_size / 512U &&
-                            fdisk_partition_get_end(p) >= partition_offset / 512)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Can't extend, conflicting partition found.");
-                }
+                        found = p;
+                } else if (fdisk_partition_get_end(p) > partition_offset / 512U)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Can't extend, not last partition in image.");
         }
 
         if (!found)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOPKG), "Failed to find matching partition to resize.");
 
-        *ret_table = TAKE_PTR(t);
         *ret_disk_uuid = disk_uuid;
+        *ret_table = TAKE_PTR(t);
+        *ret_partition = found;
 
         return 1;
 }
@@ -2565,7 +2771,7 @@
                 if (!result)
                         return log_oom();
 
-                fdisk_ask_string_set_result(ask, id128_to_uuid_string(*(sd_id128_t*) userdata, result));
+                fdisk_ask_string_set_result(ask, sd_id128_to_uuid_string(*(sd_id128_t*) userdata, result));
                 break;
 
         default:
@@ -2575,37 +2781,52 @@
         return 0;
 }
 
-static int apply_resize_partition(int fd, sd_id128_t disk_uuids, struct fdisk_table *t) {
+static int apply_resize_partition(
+                int fd,
+                sd_id128_t disk_uuids,
+                struct fdisk_table *t,
+                struct fdisk_partition *p,
+                size_t new_partition_size) {
+
         _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
         _cleanup_free_ void *two_zero_lbas = NULL;
-        _cleanup_free_ char *path = NULL;
+        uint32_t ssz;
         ssize_t n;
         int r;
 
         assert(fd >= 0);
+        assert(!t == !p);
 
         if (!t) /* no partition table to apply, exit early */
                 return 0;
 
-        two_zero_lbas = malloc0(1024U);
+        assert(p);
+
+        /* Before writing our partition patch the final size in */
+        r = fdisk_partition_size_explicit(p, 1);
+        if (r < 0)
+                return log_error_errno(r, "Failed to enable explicit partition size: %m");
+
+        r = fdisk_partition_set_size(p, new_partition_size / 512U);
+        if (r < 0)
+                return log_error_errno(r, "Failed to change partition size: %m");
+
+        r = probe_sector_size(fd, &ssz);
+        if (r < 0)
+                return log_error_errno(r, "Failed to determine current sector size: %m");
+
+        two_zero_lbas = malloc0(ssz * 2);
         if (!two_zero_lbas)
                 return log_oom();
 
         /* libfdisk appears to get confused by the existing PMBR. Let's explicitly flush it out. */
-        n = pwrite(fd, two_zero_lbas, 1024U, 0);
+        n = pwrite(fd, two_zero_lbas, ssz * 2, 0);
         if (n < 0)
                 return log_error_errno(errno, "Failed to wipe partition table: %m");
-        if (n != 1024)
+        if ((size_t) n != ssz * 2)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short write while wiping partition table.");
 
-        c = fdisk_new_context();
-        if (!c)
-                return log_oom();
-
-        if (asprintf(&path, "/proc/self/fd/%i", fd) < 0)
-                return log_oom();
-
-        r = fdisk_assign_device(c, path, 0);
+        r = fdisk_new_context_fd(fd, /* read_only= */ false, ssz, &c);
         if (r < 0)
                 return log_error_errno(r, "Failed to open device: %m");
 
@@ -2632,44 +2853,290 @@
         return 1;
 }
 
+/* Always keep at least 16M free, so that we can safely log in and update the user record while doing so */
+#define HOME_MIN_FREE (16U*1024U*1024U)
+
+static int get_smallest_fs_size(int fd, uint64_t *ret) {
+        uint64_t minsz, needed;
+        struct statfs sfs;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        /* Determines the minimal disk size we might be able to shrink the file system referenced by the fd to. */
+
+        if (syncfs(fd) < 0) /* let's sync before we query the size, so that the values returned are accurate */
+                return log_error_errno(errno, "Failed to synchronize home file system: %m");
+
+        if (fstatfs(fd, &sfs) < 0)
+                return log_error_errno(errno, "Failed to statfs() home file system: %m");
+
+        /* Let's determine the minimal file system size of the used fstype */
+        minsz = minimal_size_by_fs_magic(sfs.f_type);
+        if (minsz == UINT64_MAX)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Don't know minimum file system size of file system type '%s' of home directory.", fs_type_to_string(sfs.f_type));
+
+        if (minsz < USER_DISK_SIZE_MIN)
+                minsz = USER_DISK_SIZE_MIN;
+
+        if (sfs.f_bfree > sfs.f_blocks)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Detected amount of free blocks is greater than the total amount of file system blocks. Refusing.");
+
+        /* Calculate how much disk space is currently in use. */
+        needed = sfs.f_blocks - sfs.f_bfree;
+        if (needed > UINT64_MAX / sfs.f_bsize)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "File system size out of range.");
+
+        needed *= sfs.f_bsize;
+
+        /* Add some safety margin of free space we'll always keep */
+        if (needed > UINT64_MAX - HOME_MIN_FREE) /* Check for overflow */
+                needed = UINT64_MAX;
+        else
+                needed += HOME_MIN_FREE;
+
+        *ret = DISK_SIZE_ROUND_UP(MAX(needed, minsz));
+        return 0;
+}
+
+static int get_largest_image_size(int fd, const struct stat *st, uint64_t *ret) {
+        uint64_t used, avail, sum;
+        struct statfs sfs;
+        int r;
+
+        assert(fd >= 0);
+        assert(st);
+        assert(ret);
+
+        /* Determines the maximum file size we might be able to grow the image file referenced by the fd to. */
+
+        r = stat_verify_regular(st);
+        if (r < 0)
+                return log_error_errno(r, "Image file is not a regular file, refusing: %m");
+
+        if (syncfs(fd) < 0)
+                return log_error_errno(errno, "Failed to synchronize file system backing image file: %m");
+
+        if (fstatfs(fd, &sfs) < 0)
+                return log_error_errno(errno, "Failed to statfs() image file: %m");
+
+        used = (uint64_t) st->st_blocks * 512;
+        avail = (uint64_t) sfs.f_bsize * sfs.f_bavail;
+
+        if (avail > UINT64_MAX - used)
+                sum = UINT64_MAX;
+        else
+                sum = avail + used;
+
+        *ret = DISK_SIZE_ROUND_DOWN(MIN(sum, USER_DISK_SIZE_MAX));
+        return 0;
+}
+
+static int resize_fs_loop(
+                UserRecord *h,
+                HomeSetup *setup,
+                int resize_type,
+                uint64_t old_fs_size,
+                uint64_t new_fs_size,
+                uint64_t *ret_fs_size) {
+
+        uint64_t current_fs_size;
+        unsigned n_iterations = 0;
+        int r;
+
+        assert(h);
+        assert(setup);
+        assert(setup->root_fd >= 0);
+
+        /* A bisection loop trying to find the closest size to what the user asked for. (Well, we bisect like
+         * this only when we *shrink* the fs — if we grow the fs there's no need to bisect.) */
+
+        current_fs_size = old_fs_size;
+        for (uint64_t lower_boundary = new_fs_size, upper_boundary = old_fs_size, try_fs_size = new_fs_size;;) {
+                bool worked;
+
+                n_iterations++;
+
+                /* Now resize the file system */
+                if (resize_type == CAN_RESIZE_ONLINE) {
+                        r = resize_fs(setup->root_fd, try_fs_size, NULL);
+                        if (r < 0) {
+                                if (!ERRNO_IS_DISK_SPACE(r) || new_fs_size > old_fs_size) /* Not a disk space issue? Not trying to shrink? */
+                                        return log_error_errno(r, "Failed to resize file system: %m");
+
+                                log_debug_errno(r, "Shrinking from %s to %s didn't work, not enough space for contained data.", FORMAT_BYTES(current_fs_size), FORMAT_BYTES(try_fs_size));
+                                worked = false;
+                        } else {
+                                log_debug("Successfully resized from %s to %s.", FORMAT_BYTES(current_fs_size), FORMAT_BYTES(try_fs_size));
+                                current_fs_size = try_fs_size;
+                                worked = true;
+                        }
+
+                        /* If we hit a disk space issue and are shrinking the fs, then maybe it helps to
+                         * increase the image size. */
+                } else {
+                        r = ext4_offline_resize_fs(setup, try_fs_size, user_record_luks_discard(h), user_record_mount_flags(h), h->luks_extra_mount_options);
+                        if (r < 0)
+                                return r;
+
+                        /* For now, when we fail to shrink an ext4 image we'll not try again via the
+                         * bisection logic. We might add that later, but give this involves shelling out
+                         * multiple programs it's a bit too cumbersome to my taste. */
+
+                        worked = true;
+                        current_fs_size = try_fs_size;
+                }
+
+                if (new_fs_size > old_fs_size) /* If we are growing we are done after one iteration */
+                        break;
+
+                /* If we are shrinking then let's adjust our bisection boundaries and try again. */
+                if (worked)
+                        upper_boundary = MIN(upper_boundary, try_fs_size);
+                else
+                        lower_boundary = MAX(lower_boundary, try_fs_size);
+
+                /* OK, this attempt to shrink didn't work. Let's try between the old size and what worked. */
+                if (lower_boundary >= upper_boundary) {
+                        log_debug("Image can't be shrunk further (range to try is empty).");
+                        break;
+                }
+
+                /* Let's find a new value to try half-way between the lower boundary and the upper boundary
+                 * to try now. */
+                try_fs_size = DISK_SIZE_ROUND_DOWN(lower_boundary + (upper_boundary - lower_boundary) / 2);
+                if (try_fs_size <= lower_boundary || try_fs_size >= upper_boundary) {
+                        log_debug("Image can't be shrunk further (remaining range to try too small).");
+                        break;
+                }
+        }
+
+        log_debug("Bisection loop completed after %u iterations.", n_iterations);
+
+        if (ret_fs_size)
+                *ret_fs_size = current_fs_size;
+
+        return 0;
+}
+
+static int resize_image_loop(
+                UserRecord *h,
+                HomeSetup *setup,
+                uint64_t old_image_size,
+                uint64_t new_image_size,
+                uint64_t *ret_image_size) {
+
+        uint64_t current_image_size;
+        unsigned n_iterations = 0;
+        int r;
+
+        assert(h);
+        assert(setup);
+        assert(setup->image_fd >= 0);
+
+        /* A bisection loop trying to find the closest size to what the user asked for. (Well, we bisect like
+         * this only when we *grow* the image — if we shrink the image then there's no need to bisect.) */
+
+        current_image_size = old_image_size;
+        for (uint64_t lower_boundary = old_image_size, upper_boundary = new_image_size, try_image_size = new_image_size;;) {
+                bool worked;
+
+                n_iterations++;
+
+                r = home_truncate(h, setup->image_fd, try_image_size);
+                if (r < 0) {
+                        if (!ERRNO_IS_DISK_SPACE(r) || new_image_size < old_image_size) /* Not a disk space issue? Not trying to grow? */
+                                return r;
+
+                        log_debug_errno(r, "Growing from %s to %s didn't work, not enough space on backing disk.", FORMAT_BYTES(current_image_size), FORMAT_BYTES(try_image_size));
+                        worked = false;
+                } else if (r > 0) { /* Success: allocation worked */
+                        log_debug("Resizing from %s to %s via allocation worked successfully.", FORMAT_BYTES(current_image_size), FORMAT_BYTES(try_image_size));
+                        current_image_size = try_image_size;
+                        worked = true;
+                } else { /* Success, but through truncation, not allocation. */
+                        log_debug("Resizing from %s to %s via truncation worked successfully.", FORMAT_BYTES(old_image_size), FORMAT_BYTES(try_image_size));
+                        current_image_size = try_image_size;
+                        break; /* there's no point in the bisection logic if this was plain truncation and
+                                * not allocation, let's exit immediately. */
+                }
+
+                if (new_image_size < old_image_size) /* If we are shrinking we are done after one iteration */
+                        break;
+
+                /* If we are growing then let's adjust our bisection boundaries and try again */
+                if (worked)
+                        lower_boundary = MAX(lower_boundary, try_image_size);
+                else
+                        upper_boundary = MIN(upper_boundary, try_image_size);
+
+                if (lower_boundary >= upper_boundary) {
+                        log_debug("Image can't be grown further (range to try is empty).");
+                        break;
+                }
+
+                try_image_size = DISK_SIZE_ROUND_DOWN(lower_boundary + (upper_boundary - lower_boundary) / 2);
+                if (try_image_size <= lower_boundary || try_image_size >= upper_boundary) {
+                        log_debug("Image can't be grown further (remaining range to try too small).");
+                        break;
+                }
+        }
+
+        log_debug("Bisection loop completed after %u iterations.", n_iterations);
+
+        if (ret_image_size)
+                *ret_image_size = current_image_size;
+
+        return 0;
+}
+
 int home_resize_luks(
                 UserRecord *h,
-                bool already_activated,
-                PasswordCache *cache,
+                HomeSetupFlags flags,
                 HomeSetup *setup,
+                PasswordCache *cache,
                 UserRecord **ret_home) {
 
-        char buffer1[FORMAT_BYTES_MAX], buffer2[FORMAT_BYTES_MAX], buffer3[FORMAT_BYTES_MAX],
-                buffer4[FORMAT_BYTES_MAX], buffer5[FORMAT_BYTES_MAX], buffer6[FORMAT_BYTES_MAX];
-        uint64_t old_image_size, new_image_size, old_fs_size, new_fs_size, crypto_offset, new_partition_size;
+        uint64_t old_image_size, new_image_size, old_fs_size, new_fs_size, crypto_offset, crypto_offset_bytes,
+                new_partition_size, smallest_fs_size, resized_fs_size;
         _cleanup_(user_record_unrefp) UserRecord *header_home = NULL, *embedded_home = NULL, *new_home = NULL;
         _cleanup_(fdisk_unref_tablep) struct fdisk_table *table = NULL;
+        struct fdisk_partition *partition = NULL;
+        _cleanup_close_ int opened_image_fd = -EBADF;
         _cleanup_free_ char *whole_disk = NULL;
-        _cleanup_close_ int image_fd = -1;
+        int r, resize_type, image_fd = -EBADF;
         sd_id128_t disk_uuid;
         const char *ip, *ipo;
         struct statfs sfs;
         struct stat st;
-        int r, resize_type;
+        enum {
+                INTENTION_DONT_KNOW = 0,    /* These happen to match the return codes of CMP() */
+                INTENTION_SHRINK = -1,
+                INTENTION_GROW = 1,
+        } intention = INTENTION_DONT_KNOW;
 
         assert(h);
         assert(user_record_storage(h) == USER_LUKS);
         assert(setup);
-        assert(ret_home);
 
         r = dlopen_cryptsetup();
         if (r < 0)
                 return r;
 
         assert_se(ipo = user_record_image_path(h));
-        ip = strdupa(ipo); /* copy out since original might change later in home record object */
+        ip = strdupa_safe(ipo); /* copy out since original might change later in home record object */
 
-        image_fd = open(ip, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
-        if (image_fd < 0)
-                return log_error_errno(errno, "Failed to open image file %s: %m", ip);
+        if (setup->image_fd < 0) {
+                setup->image_fd = open_image_file(h, NULL, &st);
+                if (setup->image_fd < 0)
+                        return setup->image_fd;
+        } else {
+                if (fstat(setup->image_fd, &st) < 0)
+                        return log_error_errno(errno, "Failed to stat image file %s: %m", ip);
+        }
 
-        if (fstat(image_fd, &st) < 0)
-                return log_error_errno(errno, "Failed to stat image file %s: %m", ip);
+        image_fd = setup->image_fd;
+
         if (S_ISBLK(st.st_mode)) {
                 dev_t parent;
 
@@ -2683,20 +3150,14 @@
 
                         log_info("Operating on partition device %s, using parent device.", ip);
 
-                        r = device_path_make_major_minor(st.st_mode, parent, &whole_disk);
+                        opened_image_fd = r = device_open_from_devnum(S_IFBLK, parent, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK, &whole_disk);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to derive whole disk path for %s: %m", ip);
+                                return log_error_errno(r, "Failed to open whole block device for %s: %m", ip);
 
-                        safe_close(image_fd);
-
-                        image_fd = open(whole_disk, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
-                        if (image_fd < 0)
-                                return log_error_errno(errno, "Failed to open whole block device %s: %m", whole_disk);
+                        image_fd = opened_image_fd;
 
                         if (fstat(image_fd, &st) < 0)
                                 return log_error_errno(errno, "Failed to stat whole block device %s: %m", whole_disk);
-                        if (!S_ISBLK(st.st_mode))
-                                return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK), "Whole block device %s is not actually a block device, refusing.", whole_disk);
                 } else
                         log_info("Operating on whole block device %s.", ip);
 
@@ -2718,18 +3179,42 @@
                  * apply onto the loopback file as a whole. When we operate on block devices we instead apply
                  * to the partition itself only. */
 
-                new_image_size = DISK_SIZE_ROUND_DOWN(h->disk_size);
-                if (new_image_size == old_image_size) {
-                        log_info("Image size already matching, skipping operation.");
-                        return 0;
+                if (FLAGS_SET(flags, HOME_SETUP_RESIZE_MINIMIZE)) {
+                        new_image_size = 0;
+                        intention = INTENTION_SHRINK;
+                } else {
+                        uint64_t new_image_size_rounded;
+
+                        new_image_size_rounded = DISK_SIZE_ROUND_DOWN(h->disk_size);
+
+                        if (old_image_size >= new_image_size_rounded && old_image_size <= h->disk_size) {
+                                /* If exact match, or a match after we rounded down, don't do a thing */
+                                log_info("Image size already matching, skipping operation.");
+                                return 0;
+                        }
+
+                        new_image_size = new_image_size_rounded;
+                        intention = CMP(new_image_size, old_image_size); /* Is this a shrink */
                 }
         }
 
-        r = home_prepare_luks(h, already_activated, whole_disk, cache, setup, &header_home);
+        r = home_setup_luks(
+                        h,
+                        flags,
+                        whole_disk,
+                        setup,
+                        cache,
+                        FLAGS_SET(flags, HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES) ? NULL : &header_home);
         if (r < 0)
                 return r;
 
-        r = home_load_embedded_identity(h, setup->root_fd, header_home, USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, cache, &embedded_home, &new_home);
+        if (!FLAGS_SET(flags, HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES)) {
+                r = home_load_embedded_identity(h, setup->root_fd, header_home, USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, cache, &embedded_home, &new_home);
+                if (r < 0)
+                        return r;
+        }
+
+        r = home_maybe_shift_uid(h, flags, setup);
         if (r < 0)
                 return r;
 
@@ -2740,20 +3225,39 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Old partition doesn't fit in backing storage, refusing.");
 
         if (S_ISREG(st.st_mode)) {
-                uint64_t partition_table_extra;
+                uint64_t partition_table_extra, largest_size;
 
                 partition_table_extra = old_image_size - setup->partition_size;
-                if (new_image_size <= partition_table_extra)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "New size smaller than partition table metadata.");
 
-                new_partition_size = new_image_size - partition_table_extra;
+                r = get_largest_image_size(setup->image_fd, &st, &largest_size);
+                if (r < 0)
+                        return r;
+                if (new_image_size > largest_size)
+                        new_image_size = largest_size;
+
+                if (new_image_size < partition_table_extra)
+                        new_image_size = partition_table_extra;
+
+                new_partition_size = DISK_SIZE_ROUND_DOWN(new_image_size - partition_table_extra);
         } else {
                 assert(S_ISBLK(st.st_mode));
 
-                new_partition_size = DISK_SIZE_ROUND_DOWN(h->disk_size);
-                if (new_partition_size == setup->partition_size) {
-                        log_info("Partition size already matching, skipping operation.");
-                        return 0;
+                if (FLAGS_SET(flags, HOME_SETUP_RESIZE_MINIMIZE)) {
+                        new_partition_size = 0;
+                        intention = INTENTION_SHRINK;
+                } else {
+                        uint64_t new_partition_size_rounded;
+
+                        new_partition_size_rounded = DISK_SIZE_ROUND_DOWN(h->disk_size);
+
+                        if (setup->partition_size >= new_partition_size_rounded &&
+                            setup->partition_size <= h->disk_size) {
+                                log_info("Partition size already matching, skipping operation.");
+                                return 0;
+                        }
+
+                        new_partition_size = new_partition_size_rounded;
+                        intention = CMP(new_partition_size, setup->partition_size);
                 }
         }
 
@@ -2762,48 +3266,127 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "New partition doesn't fit into backing storage, refusing.");
 
         crypto_offset = sym_crypt_get_data_offset(setup->crypt_device);
-        if (setup->partition_size / 512U <= crypto_offset)
+        if (crypto_offset > UINT64_MAX/512U)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "LUKS2 data offset out of range, refusing.");
+        crypto_offset_bytes = (uint64_t) crypto_offset * 512U;
+        if (setup->partition_size <= crypto_offset_bytes)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Weird, old crypto payload offset doesn't actually fit in partition size?");
-        if (new_partition_size / 512U <= crypto_offset)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "New size smaller than crypto payload offset?");
 
-        old_fs_size = (setup->partition_size / 512U - crypto_offset) * 512U;
-        new_fs_size = (new_partition_size / 512U - crypto_offset) * 512U;
+        /* Make sure at least the LUKS header fit in */
+        if (new_partition_size <= crypto_offset_bytes) {
+                uint64_t add;
+
+                add = DISK_SIZE_ROUND_UP(crypto_offset_bytes) - new_partition_size;
+                new_partition_size += add;
+                if (S_ISREG(st.st_mode))
+                        new_image_size += add;
+        }
+
+        old_fs_size = setup->partition_size - crypto_offset_bytes;
+        new_fs_size = DISK_SIZE_ROUND_DOWN(new_partition_size - crypto_offset_bytes);
+
+        r = get_smallest_fs_size(setup->root_fd, &smallest_fs_size);
+        if (r < 0)
+                return r;
+
+        if (new_fs_size < smallest_fs_size) {
+                uint64_t add;
+
+                add = DISK_SIZE_ROUND_UP(smallest_fs_size) - new_fs_size;
+                new_fs_size += add;
+                new_partition_size += add;
+                if (S_ISREG(st.st_mode))
+                        new_image_size += add;
+        }
+
+        if (new_fs_size == old_fs_size) {
+                log_info("New file system size identical to old file system size, skipping operation.");
+                return 0;
+        }
+
+        if (FLAGS_SET(flags, HOME_SETUP_RESIZE_DONT_GROW) && new_fs_size > old_fs_size) {
+                log_info("New file system size would be larger than old, but shrinking requested, skipping operation.");
+                return 0;
+        }
+
+        if (FLAGS_SET(flags, HOME_SETUP_RESIZE_DONT_SHRINK) && new_fs_size < old_fs_size) {
+                log_info("New file system size would be smaller than old, but growing requested, skipping operation.");
+                return 0;
+        }
+
+        if (CMP(new_fs_size, old_fs_size) != intention) {
+                if (intention < 0)
+                        log_info("Shrink operation would enlarge file system, skipping operation.");
+                else {
+                        assert(intention > 0);
+                        log_info("Grow operation would shrink file system, skipping operation.");
+                }
+                return 0;
+        }
 
         /* Before we start doing anything, let's figure out if we actually can */
         resize_type = can_resize_fs(setup->root_fd, old_fs_size, new_fs_size);
         if (resize_type < 0)
                 return resize_type;
-        if (resize_type == CAN_RESIZE_OFFLINE && already_activated)
+        if (resize_type == CAN_RESIZE_OFFLINE && FLAGS_SET(flags, HOME_SETUP_ALREADY_ACTIVATED))
                 return log_error_errno(SYNTHETIC_ERRNO(ETXTBSY), "File systems of this type can only be resized offline, but is currently online.");
 
-        log_info("Ready to resize image size %s → %s, partition size %s → %s, file system size %s → %s.",
-                 format_bytes(buffer1, sizeof(buffer1), old_image_size),
-                 format_bytes(buffer2, sizeof(buffer2), new_image_size),
-                 format_bytes(buffer3, sizeof(buffer3), setup->partition_size),
-                 format_bytes(buffer4, sizeof(buffer4), new_partition_size),
-                 format_bytes(buffer5, sizeof(buffer5), old_fs_size),
-                 format_bytes(buffer6, sizeof(buffer6), new_fs_size));
+        log_info("Ready to resize image size %s %s %s, partition size %s %s %s, file system size %s %s %s.",
+                 FORMAT_BYTES(old_image_size),
+                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                 FORMAT_BYTES(new_image_size),
+                 FORMAT_BYTES(setup->partition_size),
+                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                 FORMAT_BYTES(new_partition_size),
+                 FORMAT_BYTES(old_fs_size),
+                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                 FORMAT_BYTES(new_fs_size));
 
         r = prepare_resize_partition(
                         image_fd,
                         setup->partition_offset,
                         setup->partition_size,
-                        new_partition_size,
                         &disk_uuid,
-                        &table);
+                        &table,
+                        &partition);
         if (r < 0)
                 return r;
 
-        if (new_fs_size > old_fs_size) {
+        if (new_fs_size > old_fs_size) { /* → Grow */
 
                 if (S_ISREG(st.st_mode)) {
+                        uint64_t resized_image_size;
+
                         /* Grow file size */
-                        r = home_truncate(h, image_fd, ip, new_image_size);
+                        r = resize_image_loop(h, setup, old_image_size, new_image_size, &resized_image_size);
                         if (r < 0)
                                 return r;
 
-                        log_info("Growing of image file completed.");
+                        if (resized_image_size == old_image_size) {
+                                log_info("Couldn't change image size.");
+                                return 0;
+                        }
+
+                        assert(resized_image_size > old_image_size);
+
+                        log_info("Growing of image file from %s to %s completed.", FORMAT_BYTES(old_image_size), FORMAT_BYTES(resized_image_size));
+
+                        if (resized_image_size < new_image_size) {
+                                uint64_t sub;
+
+                                /* If the growing we managed to do is smaller than what we wanted we need to
+                                 * adjust the partition/file system sizes we are going for, too */
+                                sub = new_image_size - resized_image_size;
+                                assert(new_partition_size >= sub);
+                                new_partition_size -= sub;
+                                assert(new_fs_size >= sub);
+                                new_fs_size -= sub;
+                        }
+
+                        new_image_size = resized_image_size;
+                } else {
+                        assert(S_ISBLK(st.st_mode));
+                        assert(new_image_size == old_image_size);
                 }
 
                 /* Make sure loopback device sees the new bigger size */
@@ -2815,7 +3398,7 @@
                 else
                         log_info("Refreshing loop device size completed.");
 
-                r = apply_resize_partition(image_fd, disk_uuid, table);
+                r = apply_resize_partition(image_fd, disk_uuid, table, partition, new_partition_size);
                 if (r < 0)
                         return r;
                 if (r > 0)
@@ -2831,9 +3414,13 @@
 
                 log_info("LUKS device growing completed.");
         } else {
-                r = home_store_embedded_identity(new_home, setup->root_fd, h->uid, embedded_home);
-                if (r < 0)
-                        return r;
+                /* → Shrink */
+
+                if (!FLAGS_SET(flags, HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES)) {
+                        r = home_store_embedded_identity(new_home, setup->root_fd, h->uid, embedded_home);
+                        if (r < 0)
+                                return r;
+                }
 
                 if (S_ISREG(st.st_mode)) {
                         if (user_record_luks_discard(h))
@@ -2848,22 +3435,37 @@
                 }
         }
 
-        /* Now resize the file system */
-        if (resize_type == CAN_RESIZE_ONLINE)
-                r = resize_fs(setup->root_fd, new_fs_size, NULL);
-        else
-                r = ext4_offline_resize_fs(setup, new_fs_size, user_record_luks_discard(h), user_record_mount_flags(h));
+        /* Now try to resize the file system. The requested size might not always be possible, in which case
+         * we'll try to get as close as we can get. The result is returned in 'resized_fs_size' */
+        r = resize_fs_loop(h, setup, resize_type, old_fs_size, new_fs_size, &resized_fs_size);
         if (r < 0)
-                return log_error_errno(r, "Failed to resize file system: %m");
+                return r;
 
-        log_info("File system resizing completed.");
+        if (resized_fs_size == old_fs_size) {
+                log_info("Couldn't change file system size.");
+                return 0;
+        }
+
+        log_info("File system resizing from %s to %s completed.", FORMAT_BYTES(old_fs_size), FORMAT_BYTES(resized_fs_size));
+
+        if (resized_fs_size > new_fs_size) {
+                uint64_t add;
+
+                /* If the shrinking we managed to do is larger than what we wanted we need to adjust the partition/image sizes. */
+                add = resized_fs_size - new_fs_size;
+                new_partition_size += add;
+                if (S_ISREG(st.st_mode))
+                        new_image_size += add;
+        }
+
+        new_fs_size = resized_fs_size;
 
         /* Immediately sync afterwards */
         r = home_sync_and_statfs(setup->root_fd, NULL);
         if (r < 0)
                 return r;
 
-        if (new_fs_size < old_fs_size) {
+        if (new_fs_size < old_fs_size) { /* → Shrink */
 
                 /* Shrink the LUKS device now, matching the new file system size */
                 r = sym_crypt_resize(setup->crypt_device, setup->dm_name, new_fs_size / 512);
@@ -2872,14 +3474,6 @@
 
                 log_info("LUKS device shrinking completed.");
 
-                if (S_ISREG(st.st_mode)) {
-                        /* Shrink the image file */
-                        if (ftruncate(image_fd, new_image_size) < 0)
-                                return log_error_errno(errno, "Failed to shrink image file %s: %m", ip);
-
-                        log_info("Shrinking of image file completed.");
-                }
-
                 /* Refresh the loop devices size */
                 r = loop_device_refresh_size(setup->loop, UINT64_MAX, new_partition_size);
                 if (r == -ENOTTY)
@@ -2889,7 +3483,18 @@
                 else
                         log_info("Refreshing loop device size completed.");
 
-                r = apply_resize_partition(image_fd, disk_uuid, table);
+                if (S_ISREG(st.st_mode)) {
+                        /* Shrink the image file */
+                        if (ftruncate(image_fd, new_image_size) < 0)
+                                return log_error_errno(errno, "Failed to shrink image file %s: %m", ip);
+
+                        log_info("Shrinking of image file completed.");
+                } else {
+                        assert(S_ISBLK(st.st_mode));
+                        assert(new_image_size == old_image_size);
+                }
+
+                r = apply_resize_partition(image_fd, disk_uuid, table, partition, new_partition_size);
                 if (r < 0)
                         return r;
                 if (r > 0)
@@ -2897,20 +3502,25 @@
 
                 if (S_ISBLK(st.st_mode) && ioctl(image_fd, BLKRRPART, 0) < 0)
                         log_debug_errno(errno, "BLKRRPART failed on block device, ignoring: %m");
-        } else {
-                r = home_store_embedded_identity(new_home, setup->root_fd, h->uid, embedded_home);
+
+        } else { /* → Grow */
+                if (!FLAGS_SET(flags, HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES)) {
+                        r = home_store_embedded_identity(new_home, setup->root_fd, h->uid, embedded_home);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        if (!FLAGS_SET(flags, HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES)) {
+                r = home_store_header_identity_luks(new_home, setup, header_home);
+                if (r < 0)
+                        return r;
+
+                r = home_extend_embedded_identity(new_home, h, setup);
                 if (r < 0)
                         return r;
         }
 
-        r = home_store_header_identity_luks(new_home, setup, header_home);
-        if (r < 0)
-                return r;
-
-        r = home_extend_embedded_identity(new_home, h, setup);
-        if (r < 0)
-                return r;
-
         if (user_record_luks_discard(h))
                 (void) run_fitrim(setup->root_fd);
 
@@ -2918,23 +3528,28 @@
         if (r < 0)
                 return r;
 
-        r = home_setup_undo(setup);
-        if (r < 0)
-                return r;
+        if (!FLAGS_SET(flags, HOME_SETUP_RESIZE_DONT_UNDO)) {
+                r = home_setup_done(setup);
+                if (r < 0)
+                        return r;
+        }
 
-        log_info("Everything completed.");
+        log_info("Resizing completed.");
 
         print_size_summary(new_image_size, new_fs_size, &sfs);
 
-        *ret_home = TAKE_PTR(new_home);
+        if (ret_home)
+                *ret_home = TAKE_PTR(new_home);
+
         return 0;
 }
 
 int home_passwd_luks(
                 UserRecord *h,
+                HomeSetupFlags flags,
                 HomeSetup *setup,
-                PasswordCache *cache,      /* the passwords acquired via PKCS#11/FIDO2 security tokens */
-                char **effective_passwords /* new passwords */) {
+                const PasswordCache *cache, /* the passwords acquired via PKCS#11/FIDO2 security tokens */
+                char **effective_passwords  /* new passwords */) {
 
         size_t volume_key_size, max_key_slots, n_effective;
         _cleanup_(erase_and_freep) void *volume_key = NULL;
@@ -2970,8 +3585,13 @@
                 return log_oom();
 
         r = -ENOKEY;
-        FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, h->password) {
-                r = luks_try_passwords(setup->crypt_device, list, volume_key, &volume_key_size);
+        FOREACH_POINTER(list,
+                        cache ? cache->keyring_passswords : NULL,
+                        cache ? cache->pkcs11_passwords : NULL,
+                        cache ? cache->fido2_passwords : NULL,
+                        h->password) {
+
+                r = luks_try_passwords(h, setup->crypt_device, list, volume_key, &volume_key_size, NULL);
                 if (r != -ENOKEY)
                         break;
         }
@@ -2996,8 +3616,7 @@
                         continue;
                 }
 
-                if (strv_contains(cache->pkcs11_passwords, effective_passwords[i]) ||
-                    strv_contains(cache->fido2_passwords, effective_passwords[i])) {
+                if (password_cache_contains(cache, effective_passwords[i])) { /* Is this a FIDO2 or PKCS#11 password? */
                         log_debug("Using minimal PBKDF for slot %zu", i);
                         r = sym_crypt_set_pbkdf_type(setup->crypt_device, &minimal_pbkdf);
                 } else {
@@ -3018,52 +3637,43 @@
                         return log_error_errno(r, "Failed to set up LUKS password: %m");
 
                 log_info("Updated LUKS key slot %zu.", i);
+
+                /* If we changed the password, then make sure to update the copy in the keyring, so that
+                 * auto-rebalance continues to work. We only do this if we operate on an active home dir. */
+                if (i == 0 && FLAGS_SET(flags, HOME_SETUP_ALREADY_ACTIVATED))
+                        upload_to_keyring(h, effective_passwords[i], NULL);
         }
 
         return 1;
 }
 
-int home_lock_luks(UserRecord *h) {
-        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
-        _cleanup_free_ char *dm_name = NULL, *dm_node = NULL;
-        _cleanup_close_ int root_fd = -1;
+int home_lock_luks(UserRecord *h, HomeSetup *setup) {
         const char *p;
         int r;
 
         assert(h);
+        assert(setup);
+        assert(setup->root_fd < 0);
+        assert(!setup->crypt_device);
+
+        r = acquire_open_luks_device(h, setup, /* graceful= */ false);
+        if (r < 0)
+                return r;
+
+        log_info("Discovered used LUKS device %s.", setup->dm_node);
 
         assert_se(p = user_record_home_directory(h));
-        root_fd = open(p, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW);
-        if (root_fd < 0)
-                return log_error_errno(errno, "Failed to open home directory: %m");
-
-        r = make_dm_names(h->user_name, &dm_name, &dm_node);
-        if (r < 0)
-                return r;
-
-        r = dlopen_cryptsetup();
-        if (r < 0)
-                return r;
-
-        r = sym_crypt_init_by_name(&cd, dm_name);
-        if (r < 0)
-                return log_error_errno(r, "Failed to initialize cryptsetup context for %s: %m", dm_name);
-
-        log_info("Discovered used LUKS device %s.", dm_node);
-        cryptsetup_enable_logging(cd);
-
-        if (syncfs(root_fd) < 0) /* Snake oil, but let's better be safe than sorry */
-                return log_error_errno(errno, "Failed to synchronize file system %s: %m", p);
-
-        root_fd = safe_close(root_fd);
+        r = syncfs_path(AT_FDCWD, p);
+        if (r < 0) /* Snake oil, but let's better be safe than sorry */
+                return log_error_errno(r, "Failed to synchronize file system %s: %m", p);
 
         log_info("File system synchronized.");
 
         /* Note that we don't invoke FIFREEZE here, it appears libcryptsetup/device-mapper already does that on its own for us */
 
-        r = sym_crypt_suspend(cd, dm_name);
+        r = sym_crypt_suspend(setup->crypt_device, setup->dm_name);
         if (r < 0)
-                return log_error_errno(r, "Failed to suspend cryptsetup device: %s: %m", dm_node);
+                return log_error_errno(r, "Failed to suspend cryptsetup device: %s: %m", setup->dm_node);
 
         log_info("LUKS device suspended.");
         return 0;
@@ -3074,7 +3684,6 @@
                 const char *dm_name,
                 char **password) {
 
-        char **pp;
         int r;
 
         assert(cd);
@@ -3098,32 +3707,26 @@
         return -ENOKEY;
 }
 
-int home_unlock_luks(UserRecord *h, PasswordCache *cache) {
-        _cleanup_free_ char *dm_name = NULL, *dm_node = NULL;
-        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
+int home_unlock_luks(UserRecord *h, HomeSetup *setup, const PasswordCache *cache) {
         char **list;
         int r;
 
         assert(h);
+        assert(setup);
+        assert(!setup->crypt_device);
 
-        r = make_dm_names(h->user_name, &dm_name, &dm_node);
+        r = acquire_open_luks_device(h, setup, /* graceful= */ false);
         if (r < 0)
                 return r;
 
-        r = dlopen_cryptsetup();
-        if (r < 0)
-                return r;
-
-        r = sym_crypt_init_by_name(&cd, dm_name);
-        if (r < 0)
-                return log_error_errno(r, "Failed to initialize cryptsetup context for %s: %m", dm_name);
-
-        log_info("Discovered used LUKS device %s.", dm_node);
-        cryptsetup_enable_logging(cd);
+        log_info("Discovered used LUKS device %s.", setup->dm_node);
 
         r = -ENOKEY;
-        FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, h->password) {
-                r = luks_try_resume(cd, dm_name, list);
+        FOREACH_POINTER(list,
+                        cache ? cache->pkcs11_passwords : NULL,
+                        cache ? cache->fido2_passwords : NULL,
+                        h->password) {
+                r = luks_try_resume(setup->crypt_device, setup->dm_name, list);
                 if (r != -ENOKEY)
                         break;
         }
@@ -3135,3 +3738,161 @@
         log_info("LUKS device resumed.");
         return 0;
 }
+
+static int device_is_gone(HomeSetup *setup) {
+        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
+        struct stat st;
+        int r;
+
+        assert(setup);
+
+        if (!setup->dm_node)
+                return true;
+
+        if (stat(setup->dm_node, &st) < 0) {
+                if (errno != ENOENT)
+                        return log_error_errno(errno, "Failed to stat block device node %s: %m", setup->dm_node);
+
+                return true;
+        }
+
+        r = sd_device_new_from_stat_rdev(&d, &st);
+        if (r < 0) {
+                if (r != -ENODEV)
+                        return log_error_errno(errno, "Failed to allocate device object from block device node %s: %m", setup->dm_node);
+
+                return true;
+        }
+
+        return false;
+}
+
+static int device_monitor_handler(sd_device_monitor *monitor, sd_device *device, void *userdata) {
+        HomeSetup *setup = ASSERT_PTR(userdata);
+        int r;
+
+        if (!device_for_action(device, SD_DEVICE_REMOVE))
+                return 0;
+
+        /* We don't really care for the device object passed to us, we just check if the device node still
+         * exists */
+
+        r = device_is_gone(setup);
+        if (r < 0)
+                return r;
+        if (r > 0) /* Yay! we are done! */
+                (void) sd_event_exit(sd_device_monitor_get_event(monitor), 0);
+
+        return 0;
+}
+
+int wait_for_block_device_gone(HomeSetup *setup, usec_t timeout_usec) {
+        _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *m = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        int r;
+
+        assert(setup);
+
+        /* So here's the thing: we enable "deferred deactivation" on our dm-crypt volumes. This means they
+         * are automatically torn down once not used anymore (i.e. once unmounted). Which is great. It also
+         * means that when we deactivate a home directory and try to tear down the volume that backs it, it
+         * possibly is already torn down or in the process of being torn down, since we race against the
+         * automatic tearing down. Which is fine, we handle errors from that. However, we lose the ability to
+         * naturally wait for the tear down operation to complete: if we are not the ones who tear down the
+         * device we are also not the ones who naturally block on that operation. Hence let's add some code
+         * to actively wait for the device to go away, via sd-device. We'll call this whenever tearing down a
+         * LUKS device, to ensure the device is really really gone before we proceed. Net effect: "homectl
+         * deactivate foo && homectl activate foo" will work reliably, i.e. deactivation immediately followed
+         * by activation will work. Also, by the time deactivation completes we can guarantee that all data
+         * is sync'ed down to the lowest block layer as all higher levels are fully and entirely
+         * destructed. */
+
+        if (!setup->dm_name)
+                return 0;
+
+        assert(setup->dm_node);
+        log_debug("Waiting until %s disappears.", setup->dm_node);
+
+        r = sd_event_new(&event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate event loop: %m");
+
+        r = sd_device_monitor_new(&m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate device monitor: %m");
+
+        r = sd_device_monitor_filter_add_match_subsystem_devtype(m, "block", "disk");
+        if (r < 0)
+                return log_error_errno(r, "Failed to configure device monitor match: %m");
+
+        r = sd_device_monitor_attach_event(m, event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to attach device monitor to event loop: %m");
+
+        r = sd_device_monitor_start(m, device_monitor_handler, setup);
+        if (r < 0)
+                return log_error_errno(r, "Failed to start device monitor: %m");
+
+        r = device_is_gone(setup);
+        if (r < 0)
+                return r;
+        if (r > 0) {
+                log_debug("%s has already disappeared before entering wait loop.", setup->dm_node);
+                return 0; /* gone already */
+        }
+
+        if (timeout_usec != USEC_INFINITY) {
+                r = sd_event_add_time_relative(event, NULL, CLOCK_MONOTONIC, timeout_usec, 0, NULL, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to add timer event: %m");
+        }
+
+        r = sd_event_loop(event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to run event loop: %m");
+
+        r = device_is_gone(setup);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return log_error_errno(r, "Device %s still around.", setup->dm_node);
+
+        log_debug("Successfully waited until device %s disappeared.", setup->dm_node);
+        return 0;
+}
+
+int home_auto_shrink_luks(UserRecord *h, HomeSetup *setup, PasswordCache *cache) {
+        struct statfs sfs;
+        int r;
+
+        assert(h);
+        assert(user_record_storage(h) == USER_LUKS);
+        assert(setup);
+        assert(setup->root_fd >= 0);
+
+        if (user_record_auto_resize_mode(h) != AUTO_RESIZE_SHRINK_AND_GROW)
+                return 0;
+
+        if (fstatfs(setup->root_fd, &sfs) < 0)
+                return log_error_errno(errno, "Failed to statfs home directory: %m");
+
+        if (!fs_can_online_shrink_and_grow(sfs.f_type)) {
+                log_debug("Not auto-shrinking file system, since selected file system cannot do both online shrink and grow.");
+                return 0;
+        }
+
+        r = home_resize_luks(
+                        h,
+                        HOME_SETUP_ALREADY_ACTIVATED|
+                        HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES|
+                        HOME_SETUP_RESIZE_MINIMIZE|
+                        HOME_SETUP_RESIZE_DONT_GROW|
+                        HOME_SETUP_RESIZE_DONT_UNDO,
+                        setup,
+                        cache,
+                        NULL);
+        if (r < 0)
+                return r;
+
+        return 1;
+}
diff --git a/src/home/homework-luks.h b/src/home/homework-luks.h
index 8764862..0218de8 100644
--- a/src/home/homework-luks.h
+++ b/src/home/homework-luks.h
@@ -5,24 +5,26 @@
 #include "homework.h"
 #include "user-record.h"
 
-int home_prepare_luks(UserRecord *h, bool already_activated, const char *force_image_path, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_luks_home);
+int home_setup_luks(UserRecord *h, HomeSetupFlags flags, const char *force_image_path, HomeSetup *setup, PasswordCache *cache, UserRecord **ret_luks_home);
 
-int home_activate_luks(UserRecord *h, PasswordCache *cache, UserRecord **ret_home);
-int home_deactivate_luks(UserRecord *h);
-int home_trim_luks(UserRecord *h);
+int home_activate_luks(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup, PasswordCache *cache, UserRecord **ret_home);
+int home_deactivate_luks(UserRecord *h, HomeSetup *setup);
+int home_trim_luks(UserRecord *h, HomeSetup *setup);
 
 int home_store_header_identity_luks(UserRecord *h, HomeSetup *setup, UserRecord *old_home);
 
-int home_create_luks(UserRecord *h, PasswordCache *cache, char **effective_passwords, UserRecord **ret_home);
+int home_create_luks(UserRecord *h, HomeSetup *setup, const PasswordCache *cache, char **effective_passwords, UserRecord **ret_home);
 
-int home_validate_update_luks(UserRecord *h, HomeSetup *setup);
+int home_get_state_luks(UserRecord *h, HomeSetup *setup);
 
-int home_resize_luks(UserRecord *h, bool already_activated, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_home);
+int home_resize_luks(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup, PasswordCache *cache, UserRecord **ret_home);
 
-int home_passwd_luks(UserRecord *h, HomeSetup *setup, PasswordCache *cache, char **effective_passwords);
+int home_passwd_luks(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup, const PasswordCache *cache, char **effective_passwords);
 
-int home_lock_luks(UserRecord *h);
-int home_unlock_luks(UserRecord *h, PasswordCache *cache);
+int home_lock_luks(UserRecord *h, HomeSetup *setup);
+int home_unlock_luks(UserRecord *h, HomeSetup *setup, const PasswordCache *cache);
+
+int home_auto_shrink_luks(UserRecord *h, HomeSetup *setup, PasswordCache *cache);
 
 static inline uint64_t luks_volume_key_size_convert(struct crypt_device *cd) {
         int k;
@@ -39,8 +41,9 @@
 }
 
 int run_fitrim(int root_fd);
-int run_fitrim_by_path(const char *root_path);
 int run_fallocate(int backing_fd, const struct stat *st);
 int run_fallocate_by_path(const char *backing_path);
 int run_mark_dirty(int fd, bool b);
 int run_mark_dirty_by_path(const char *path, bool b);
+
+int wait_for_block_device_gone(HomeSetup *setup, usec_t timeout_usec);
diff --git a/src/home/homework-mount.c b/src/home/homework-mount.c
index da4f14e..cf42a0b 100644
--- a/src/home/homework-mount.c
+++ b/src/home/homework-mount.c
@@ -2,43 +2,76 @@
 
 #include <sched.h>
 #include <sys/mount.h>
+#if WANT_LINUX_FS_H
+#include <linux/fs.h>
+#endif
 
 #include "alloc-util.h"
+#include "fd-util.h"
+#include "format-util.h"
+#include "glyph-util.h"
+#include "home-util.h"
 #include "homework-mount.h"
+#include "homework.h"
+#include "missing_mount.h"
+#include "missing_syscall.h"
 #include "mkdir.h"
 #include "mount-util.h"
+#include "namespace-util.h"
 #include "path-util.h"
 #include "string-util.h"
+#include "user-util.h"
 
 static const char *mount_options_for_fstype(const char *fstype) {
+        const char *e;
+        char *n;
+
+        assert(fstype);
+
+        /* Allow overriding our built-in defaults with an environment variable */
+        n = strjoina("SYSTEMD_HOME_MOUNT_OPTIONS_", fstype);
+        e = getenv(ascii_strupper(n));
+        if (e)
+                return e;
+
         if (streq(fstype, "ext4"))
                 return "noquota,user_xattr";
         if (streq(fstype, "xfs"))
                 return "noquota";
         if (streq(fstype, "btrfs"))
-                return "noacl";
+                return "noacl,compress=zstd:1";
         return NULL;
 }
 
-int home_mount_node(const char *node, const char *fstype, bool discard, unsigned long flags) {
+int home_mount_node(
+                const char *node,
+                const char *fstype,
+                bool discard,
+                unsigned long flags,
+                const char *extra_mount_options) {
+
         _cleanup_free_ char *joined = NULL;
-        const char *options, *discard_option;
+        const char *default_options;
         int r;
 
-        options = mount_options_for_fstype(fstype);
+        assert(node);
+        assert(fstype);
 
-        discard_option = discard ? "discard" : "nodiscard";
-
-        if (options) {
-                joined = strjoin(options, ",", discard_option);
-                if (!joined)
+        default_options = mount_options_for_fstype(fstype);
+        if (default_options) {
+                if (!strextend_with_separator(&joined, ",", default_options))
                         return log_oom();
+        }
 
-                options = joined;
-        } else
-                options = discard_option;
+        if (!strextend_with_separator(&joined, ",", discard ? "discard" : "nodiscard"))
+                return log_oom();
 
-        r = mount_nofollow_verbose(LOG_ERR, node, "/run/systemd/user-home-mount", fstype, flags|MS_RELATIME, strempty(options));
+        if (extra_mount_options) {
+                if (!strextend_with_separator(&joined, ",", extra_mount_options))
+                        return log_oom();
+        }
+
+        r = mount_nofollow_verbose(LOG_ERR, node, HOME_RUNTIME_WORK_DIR, fstype, flags|MS_RELATIME, joined);
         if (r < 0)
                 return r;
 
@@ -46,41 +79,68 @@
         return 0;
 }
 
-int home_unshare_and_mount(const char *node, const char *fstype, bool discard, unsigned long flags) {
+int home_unshare_and_mkdir(void) {
         int r;
 
         if (unshare(CLONE_NEWNS) < 0)
                 return log_error_errno(errno, "Couldn't unshare file system namespace: %m");
 
+        assert(path_startswith(HOME_RUNTIME_WORK_DIR, "/run"));
+
         r = mount_nofollow_verbose(LOG_ERR, "/run", "/run", NULL, MS_SLAVE|MS_REC, NULL); /* Mark /run as MS_SLAVE in our new namespace */
         if (r < 0)
                 return r;
 
-        (void) mkdir_p("/run/systemd/user-home-mount", 0700);
+        (void) mkdir_p(HOME_RUNTIME_WORK_DIR, 0700);
+        return 0;
+}
 
-        if (node)
-                return home_mount_node(node, fstype, discard, flags);
+int home_unshare_and_mount(
+                const char *node,
+                const char *fstype,
+                bool discard,
+                unsigned long flags,
+                const char *extra_mount_options) {
+
+        int r;
+
+        assert(node);
+        assert(fstype);
+
+        r = home_unshare_and_mkdir();
+        if (r < 0)
+                return r;
+
+        r = home_mount_node(node, fstype, discard, flags, extra_mount_options);
+        if (r < 0)
+                return r;
+
+        r = mount_nofollow_verbose(LOG_ERR, NULL, HOME_RUNTIME_WORK_DIR, NULL, MS_PRIVATE, NULL);
+        if (r < 0) {
+                (void) umount_verbose(LOG_ERR, HOME_RUNTIME_WORK_DIR, UMOUNT_NOFOLLOW);
+                return r;
+        }
 
         return 0;
 }
 
-int home_move_mount(const char *user_name_and_realm, const char *target) {
+int home_move_mount(const char *mount_suffix, const char *target) {
         _cleanup_free_ char *subdir = NULL;
         const char *d;
         int r;
 
         assert(target);
 
-        /* If user_name_and_realm is set, then we'll mount a subdir of the source mount into the host. If
-         * it's NULL we'll move the mount itself */
-        if (user_name_and_realm) {
-                subdir = path_join("/run/systemd/user-home-mount/", user_name_and_realm);
+        /* If 'mount_suffix' is set, then we'll mount a subdir of the source mount into the host. If it's
+         * NULL we'll move the mount itself */
+        if (mount_suffix) {
+                subdir = path_join(HOME_RUNTIME_WORK_DIR, mount_suffix);
                 if (!subdir)
                         return log_oom();
 
                 d = subdir;
         } else
-                d = "/run/systemd/user-home-mount/";
+                d = HOME_RUNTIME_WORK_DIR;
 
         (void) mkdir_p(target, 0700);
 
@@ -88,10 +148,162 @@
         if (r < 0)
                 return r;
 
-        r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
+        r = umount_recursive(HOME_RUNTIME_WORK_DIR, 0);
         if (r < 0)
-                return r;
+                return log_error_errno(r, "Failed to unmount %s: %m", HOME_RUNTIME_WORK_DIR);
 
         log_info("Moving to final mount point %s completed.", target);
         return 0;
 }
+
+static int append_identity_range(char **text, uid_t start, uid_t next_start, uid_t exclude) {
+        /* Creates an identity range ranging from 'start' to 'next_start-1'. Excludes the UID specified by 'exclude' if
+         * it is in that range. */
+
+        assert(text);
+
+        if (next_start <= start) /* Empty range? */
+                return 0;
+
+        if (exclude < start || exclude >= next_start) /* UID to exclude it outside of the range? */
+                return strextendf(text, UID_FMT " " UID_FMT " " UID_FMT "\n", start, start, next_start - start);
+
+        if (start == exclude && next_start == exclude + 1) /* The only UID in the range is the one to exclude? */
+                return 0;
+
+        if (exclude == start) /* UID to exclude at beginning of range? */
+                return strextendf(text, UID_FMT " " UID_FMT " " UID_FMT "\n", start+1, start+1, next_start - start - 1);
+
+        if (exclude == next_start - 1) /* UID to exclude at end of range? */
+                return strextendf(text, UID_FMT " " UID_FMT " " UID_FMT "\n", start, start, next_start - start - 1);
+
+        return strextendf(text,
+                          UID_FMT " " UID_FMT " " UID_FMT "\n"
+                          UID_FMT " " UID_FMT " " UID_FMT "\n",
+                          start, start, exclude - start,
+                          exclude + 1, exclude + 1, next_start - exclude - 1);
+}
+
+static int make_userns(uid_t stored_uid, uid_t exposed_uid) {
+        _cleanup_free_ char *text = NULL;
+        _cleanup_close_ int userns_fd = -EBADF;
+        int r;
+
+        assert(uid_is_valid(stored_uid));
+        assert(uid_is_valid(exposed_uid));
+
+        assert_cc(HOME_UID_MIN <= HOME_UID_MAX);
+        assert_cc(HOME_UID_MAX < UID_NOBODY);
+
+        /* Map everything below the homed UID range to itself (except for the UID we actually care about if
+         * it is inside this range) */
+        r = append_identity_range(&text, 0, HOME_UID_MIN, stored_uid);
+        if (r < 0)
+                return log_oom();
+
+        /* Now map the UID we are doing this for to the target UID. */
+        r = strextendf(&text, UID_FMT " " UID_FMT " " UID_FMT "\n", stored_uid, exposed_uid, 1u);
+        if (r < 0)
+                return log_oom();
+
+        /* Map everything above the homed UID range to itself (again, excluding the UID we actually care
+         * about if it is in that range). Also we leave "nobody" itself excluded) */
+        r = append_identity_range(&text, HOME_UID_MAX, UID_NOBODY, stored_uid);
+        if (r < 0)
+                return log_oom();
+
+        /* Also map the container range. People can use that to place containers owned by high UIDs in their
+         * home directories if they really want. We won't manage this UID range for them but pass it through
+         * 1:1, and it will lose its meaning once migrated between hosts. */
+        r = append_identity_range(&text, CONTAINER_UID_BASE_MIN, CONTAINER_UID_BASE_MAX+1, stored_uid);
+        if (r < 0)
+                return log_oom();
+
+        /* Map nspawn's mapped root UID as identity mapping so that people can run nspawn uidmap mounted
+         * containers off $HOME, if they want. */
+        r = strextendf(&text, UID_FMT " " UID_FMT " " UID_FMT "\n", UID_MAPPED_ROOT, UID_MAPPED_ROOT, 1u);
+        if (r < 0)
+                return log_oom();
+
+        /* Leave everything else unmapped, starting from UID_NOBODY itself. Specifically, this means the
+         * whole space outside of 16bit remains unmapped */
+
+        log_debug("Creating userns with mapping:\n%s", text);
+
+        userns_fd = userns_acquire(text, text); /* same uid + gid mapping */
+        if (userns_fd < 0)
+                return log_error_errno(userns_fd, "Failed to allocate user namespace: %m");
+
+        return TAKE_FD(userns_fd);
+}
+
+int home_shift_uid(int dir_fd, const char *target, uid_t stored_uid, uid_t exposed_uid, int *ret_mount_fd) {
+        _cleanup_close_ int mount_fd = -EBADF, userns_fd = -EBADF;
+        int r;
+
+        assert(dir_fd >= 0);
+        assert(uid_is_valid(stored_uid));
+        assert(uid_is_valid(exposed_uid));
+
+        /* Let's try to set up a UID mapping for this directory. This is called when first creating a home
+         * directory or when activating it again. We do this as optimization only, to avoid having to
+         * recursively chown() things on each activation. If the kernel or file system doesn't support this
+         * scheme we'll handle this gracefully, and not do anything, so that the later recursive chown()ing
+         * then fixes up things for us. Note that the chown()ing is smart enough to skip things if they look
+         * alright already.
+         *
+         * Note that this always creates a new mount (i.e. we use OPEN_TREE_CLONE), since applying idmaps is
+         * not allowed once the mount is put in place. */
+
+        mount_fd = open_tree(dir_fd, "", AT_EMPTY_PATH | OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC);
+        if (mount_fd < 0) {
+                if (ERRNO_IS_NOT_SUPPORTED(errno)) {
+                        log_debug_errno(errno, "The open_tree() syscall is not supported, not setting up UID shift mount: %m");
+
+                        if (ret_mount_fd)
+                                *ret_mount_fd = -EBADF;
+
+                        return 0;
+                }
+
+                return log_error_errno(errno, "Failed to open tree of home directory: %m");
+        }
+
+        userns_fd = make_userns(stored_uid, exposed_uid);
+        if (userns_fd < 0)
+                return userns_fd;
+
+        /* Set the user namespace mapping attribute on the cloned mount point */
+        if (mount_setattr(mount_fd, "", AT_EMPTY_PATH,
+                          &(struct mount_attr) {
+                                  .attr_set = MOUNT_ATTR_IDMAP,
+                                  .userns_fd = userns_fd,
+                          }, MOUNT_ATTR_SIZE_VER0) < 0) {
+
+                if (ERRNO_IS_NOT_SUPPORTED(errno) || errno == EINVAL) { /* EINVAL is documented in mount_attr() as fs doesn't support idmapping */
+                        log_debug_errno(errno, "UID/GID mapping for shifted mount not available, not setting it up: %m");
+
+                        if (ret_mount_fd)
+                                *ret_mount_fd = -EBADF;
+
+                        return 0;
+                }
+
+                return log_error_errno(errno, "Failed to apply UID/GID mapping: %m");
+        }
+
+        if (target)
+                r = move_mount(mount_fd, "", AT_FDCWD, target, MOVE_MOUNT_F_EMPTY_PATH);
+        else
+                r = move_mount(mount_fd, "", dir_fd, "", MOVE_MOUNT_F_EMPTY_PATH|MOVE_MOUNT_T_EMPTY_PATH);
+        if (r < 0)
+                return log_error_errno(errno, "Failed to apply UID/GID map: %m");
+
+        log_debug("Applied uidmap mount to %s. Mapping is " UID_FMT " %s " UID_FMT ".",
+                  strna(target), stored_uid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), exposed_uid);
+
+        if (ret_mount_fd)
+                *ret_mount_fd = TAKE_FD(mount_fd);
+
+        return 1;
+}
diff --git a/src/home/homework-mount.h b/src/home/homework-mount.h
index 2a4591c..255df26 100644
--- a/src/home/homework-mount.h
+++ b/src/home/homework-mount.h
@@ -3,6 +3,8 @@
 
 #include <stdbool.h>
 
-int home_mount_node(const char *node, const char *fstype, bool discard, unsigned long flags);
-int home_unshare_and_mount(const char *node, const char *fstype, bool discard, unsigned long flags);
+int home_mount_node(const char *node, const char *fstype, bool discard, unsigned long flags, const char *extra_mount_options);
+int home_unshare_and_mkdir(void);
+int home_unshare_and_mount(const char *node, const char *fstype, bool discard, unsigned long flags, const char *extra_mount_options);
 int home_move_mount(const char *user_name_and_realm, const char *target);
+int home_shift_uid(int dir_fd, const char *target, uid_t stored_uid, uid_t exposed_uid, int *ret_mount_fd);
diff --git a/src/home/homework-password-cache.c b/src/home/homework-password-cache.c
new file mode 100644
index 0000000..00a0f69
--- /dev/null
+++ b/src/home/homework-password-cache.c
@@ -0,0 +1,57 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "homework-password-cache.h"
+#include "keyring-util.h"
+#include "missing_syscall.h"
+#include "user-record.h"
+
+void password_cache_free(PasswordCache *cache) {
+        if (!cache)
+                return;
+
+        cache->pkcs11_passwords = strv_free_erase(cache->pkcs11_passwords);
+        cache->fido2_passwords = strv_free_erase(cache->fido2_passwords);
+        cache->keyring_passswords = strv_free_erase(cache->keyring_passswords);
+}
+
+void password_cache_load_keyring(UserRecord *h, PasswordCache *cache) {
+        _cleanup_(erase_and_freep) void *p = NULL;
+        _cleanup_free_ char *name = NULL;
+        char **strv;
+        key_serial_t serial;
+        size_t sz;
+        int r;
+
+        assert(h);
+        assert(cache);
+
+        /* Loads the password we need to for automatic resizing from the kernel keyring */
+
+        name = strjoin("homework-user-", h->user_name);
+        if (!name)
+                return (void) log_oom();
+
+        serial = request_key("user", name, NULL, 0);
+        if (serial == -1)
+                return (void) log_debug_errno(errno, "Failed to request key '%s', ignoring: %m", name);
+
+        r = keyring_read(serial, &p, &sz);
+        if (r < 0)
+                return (void) log_debug_errno(r, "Failed to read keyring key '%s', ignoring: %m", name);
+
+        if (memchr(p, 0, sz))
+                return (void) log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Cached password contains embedded NUL byte, ignoring.");
+
+        strv = new(char*, 2);
+        if (!strv)
+                return (void) log_oom();
+
+        strv[0] = TAKE_PTR(p); /* Note that keyring_read() will NUL terminate implicitly, hence we don't have
+                                * to NUL terminate manually here: it's a valid string. */
+        strv[1] = NULL;
+
+        strv_free_erase(cache->keyring_passswords);
+        cache->keyring_passswords = strv;
+
+        log_debug("Successfully acquired home key from kernel keyring.");
+}
diff --git a/src/home/homework-password-cache.h b/src/home/homework-password-cache.h
new file mode 100644
index 0000000..fdfbcfe
--- /dev/null
+++ b/src/home/homework-password-cache.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "strv.h"
+#include "user-record.h"
+
+typedef struct PasswordCache {
+        /* Passwords acquired from the kernel keyring */
+        char **keyring_passswords;
+
+        /* Decoding passwords from security tokens is expensive and typically requires user interaction,
+         * hence cache any we already figured out. */
+        char **pkcs11_passwords;
+        char **fido2_passwords;
+} PasswordCache;
+
+void password_cache_free(PasswordCache *cache);
+
+static inline bool password_cache_contains(const PasswordCache *cache, const char *p) {
+        if (!cache)
+                return false;
+
+        return strv_contains(cache->pkcs11_passwords, p) ||
+                strv_contains(cache->fido2_passwords, p) ||
+                strv_contains(cache->keyring_passswords, p);
+}
+
+void password_cache_load_keyring(UserRecord *h, PasswordCache *cache);
diff --git a/src/home/homework-pkcs11.c b/src/home/homework-pkcs11.c
index 15402b1..be9d905 100644
--- a/src/home/homework-pkcs11.c
+++ b/src/home/homework-pkcs11.c
@@ -15,12 +15,11 @@
                 void *userdata) {
 
         _cleanup_(erase_and_freep) void *decrypted_key = NULL;
-        struct pkcs11_callback_data *data = userdata;
+        struct pkcs11_callback_data *data = ASSERT_PTR(userdata);
         _cleanup_free_ char *token_label = NULL;
         CK_TOKEN_INFO updated_token_info;
         size_t decrypted_key_size;
         CK_OBJECT_HANDLE object;
-        char **i;
         CK_RV rv;
         int r;
 
@@ -28,7 +27,6 @@
         assert(slot_info);
         assert(token_info);
         assert(uri);
-        assert(data);
 
         /* Special return values:
          *
diff --git a/src/home/homework-quota.c b/src/home/homework-quota.c
index 7001870..574d155 100644
--- a/src/home/homework-quota.c
+++ b/src/home/homework-quota.c
@@ -54,7 +54,7 @@
         if (devno == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system %s not backed by a block device.", path);
 
-        r = quotactl_devno(QCMD_FIXED(Q_GETQUOTA, USRQUOTA), devno, h->uid, &req);
+        r = quotactl_devnum(QCMD_FIXED(Q_GETQUOTA, USRQUOTA), devno, h->uid, &req);
         if (r < 0) {
                 if (ERRNO_IS_NOT_SUPPORTED(r))
                         return log_error_errno(r, "No UID quota support on %s.", path);
@@ -74,7 +74,7 @@
         req.dqb_valid = QIF_BLIMITS;
         req.dqb_bsoftlimit = req.dqb_bhardlimit = h->disk_size / QIF_DQBLKSIZE;
 
-        r = quotactl_devno(QCMD_FIXED(Q_SETQUOTA, USRQUOTA), devno, h->uid, &req);
+        r = quotactl_devnum(QCMD_FIXED(Q_SETQUOTA, USRQUOTA), devno, h->uid, &req);
         if (r < 0) {
                 if (r == -ESRCH)
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTTY), "UID quota not available on %s.", path);
diff --git a/src/home/homework.c b/src/home/homework.c
index 32a42c5..2890738 100644
--- a/src/home/homework.c
+++ b/src/home/homework.c
@@ -8,6 +8,7 @@
 #include "copy.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "filesystems.h"
 #include "fs-util.h"
 #include "home-util.h"
 #include "homework-cifs.h"
@@ -28,6 +29,7 @@
 #include "rm-rf.h"
 #include "stat-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "tmpfile-util.h"
 #include "user-util.h"
 #include "virt.h"
@@ -35,14 +37,6 @@
 /* Make sure a bad password always results in a 3s delay, no matter what */
 #define BAD_PASSWORD_DELAY_USEC (3 * USEC_PER_SEC)
 
-void password_cache_free(PasswordCache *cache) {
-        if (!cache)
-                return;
-
-        cache->pkcs11_passwords = strv_free_erase(cache->pkcs11_passwords);
-        cache->fido2_passwords = strv_free_erase(cache->fido2_passwords);
-}
-
 int user_record_authenticate(
                 UserRecord *h,
                 UserRecord *secret,
@@ -103,9 +97,7 @@
                 log_info("None of the supplied plaintext passwords unlock the user record's hashed recovery keys.");
 
         /* Second, test cached PKCS#11 passwords */
-        for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) {
-                char **pp;
-
+        for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++)
                 STRV_FOREACH(pp, cache->pkcs11_passwords) {
                         r = test_password_one(h->pkcs11_encrypted_key[n].hashed_password, *pp);
                         if (r < 0)
@@ -115,12 +107,9 @@
                                 return 1;
                         }
                 }
-        }
 
         /* Third, test cached FIDO2 passwords */
-        for (size_t n = 0; n < h->n_fido2_hmac_salt; n++) {
-                char **pp;
-
+        for (size_t n = 0; n < h->n_fido2_hmac_salt; n++)
                 /* See if any of the previously calculated passwords work */
                 STRV_FOREACH(pp, cache->fido2_passwords) {
                         r = test_password_one(h->fido2_hmac_salt[n].hashed_password, *pp);
@@ -131,7 +120,6 @@
                                 return 1;
                         }
                 }
-        }
 
         /* Fourth, let's see if any of the PKCS#11 security tokens are plugged in and help us */
         for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) {
@@ -283,7 +271,101 @@
         return 0;
 }
 
-int home_setup_undo(HomeSetup *setup) {
+static void drop_caches_now(void) {
+        int r;
+
+        /* Drop file system caches now. See https://docs.kernel.org/admin-guide/sysctl/vm.html
+         * for details. We write "2" into /proc/sys/vm/drop_caches to ensure dentries/inodes are flushed, but
+         * not more. */
+
+        r = write_string_file("/proc/sys/vm/drop_caches", "2\n", WRITE_STRING_FILE_DISABLE_BUFFER);
+        if (r < 0)
+                log_warning_errno(r, "Failed to drop caches, ignoring: %m");
+        else
+                log_debug("Dropped caches.");
+}
+
+int home_setup_undo_mount(HomeSetup *setup, int level) {
+        int r;
+
+        assert(setup);
+
+        if (!setup->undo_mount)
+                return 0;
+
+        r = umount_recursive(HOME_RUNTIME_WORK_DIR, 0);
+        if (r < 0) {
+                if (level >= LOG_DEBUG) /* umount_recursive() does debug level logging anyway, no need to
+                                         * repeat that here */
+                        return r;
+
+                /* If a higher log level is requested, the generate a non-debug message here too. */
+                return log_full_errno(level, r, "Failed to unmount mount tree below %s: %m", HOME_RUNTIME_WORK_DIR);
+        }
+
+        setup->undo_mount = false;
+        return 1;
+}
+
+int home_setup_undo_dm(HomeSetup *setup, int level) {
+        int r, ret;
+
+        assert(setup);
+
+        if (setup->undo_dm) {
+                assert(setup->crypt_device);
+                assert(setup->dm_name);
+
+                r = sym_crypt_deactivate_by_name(setup->crypt_device, setup->dm_name, 0);
+                if (r < 0)
+                        return log_full_errno(level, r, "Failed to deactivate LUKS device: %m");
+
+                /* In case the device was already remove asynchronously by an early unmount via the deferred
+                 * remove logic, let's wait for it */
+                (void) wait_for_block_device_gone(setup, USEC_PER_SEC * 30);
+
+                setup->undo_dm = false;
+                ret = 1;
+        } else
+                ret = 0;
+
+        if (setup->crypt_device) {
+                sym_crypt_free(setup->crypt_device);
+                setup->crypt_device = NULL;
+        }
+
+        return ret;
+}
+
+int keyring_unlink(key_serial_t k) {
+
+        if (k == -1) /* already invalidated? */
+                return -1;
+
+        if (keyctl(KEYCTL_UNLINK, k, KEY_SPEC_SESSION_KEYRING, 0, 0) < 0)
+                log_debug_errno(errno, "Failed to unlink key from session kernel keyring, ignoring: %m");
+
+        return -1; /* Always return the key_serial_t value for "invalid" */
+}
+
+static int keyring_flush(UserRecord *h) {
+        _cleanup_free_ char *name = NULL;
+        long serial;
+
+        assert(h);
+
+        name = strjoin("homework-user-", h->user_name);
+        if (!name)
+                return log_oom();
+
+        serial = keyctl(KEYCTL_SEARCH, (unsigned long) KEY_SPEC_SESSION_KEYRING, (unsigned long) "user", (unsigned long) name, 0);
+        if (serial == -1)
+                return log_debug_errno(errno, "Failed to find kernel keyring entry for user, ignoring: %m");
+
+        return keyring_unlink(serial);
+}
+
+int home_setup_done(HomeSetup *setup) {
         int r = 0, q;
 
         assert(setup);
@@ -295,20 +377,19 @@
                                 r = q;
                 }
 
+                if (syncfs(setup->root_fd) < 0)
+                        log_debug_errno(errno, "Failed to synchronize home directory, ignoring: %m");
+
                 setup->root_fd = safe_close(setup->root_fd);
         }
 
-        if (setup->undo_mount) {
-                q = umount_verbose(LOG_DEBUG, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
-                if (q < 0)
-                        r = q;
-        }
+        q = home_setup_undo_mount(setup, LOG_DEBUG);
+        if (q < 0)
+                r = q;
 
-        if (setup->undo_dm && setup->crypt_device && setup->dm_name) {
-                q = sym_crypt_deactivate_by_name(setup->crypt_device, setup->dm_name, 0);
-                if (q < 0)
-                        r = q;
-        }
+        q = home_setup_undo_dm(setup, LOG_DEBUG);
+        if (q < 0)
+                r = q;
 
         if (setup->image_fd >= 0) {
                 if (setup->do_offline_fallocate) {
@@ -326,6 +407,16 @@
                 setup->image_fd = safe_close(setup->image_fd);
         }
 
+        if (setup->temporary_image_path) {
+                if (unlink(setup->temporary_image_path) < 0)
+                        log_debug_errno(errno, "Failed to remove temporary image file '%s', ignoring: %m",
+                                        setup->temporary_image_path);
+
+                setup->temporary_image_path = mfree(setup->temporary_image_path);
+        }
+
+        setup->key_serial = keyring_unlink(setup->key_serial);
+
         setup->undo_mount = false;
         setup->undo_dm = false;
         setup->do_offline_fitrim = false;
@@ -336,23 +427,23 @@
         setup->dm_node = mfree(setup->dm_node);
 
         setup->loop = loop_device_unref(setup->loop);
-        if (setup->crypt_device) {
-                sym_crypt_free(setup->crypt_device);
-                setup->crypt_device = NULL;
-        }
 
-        explicit_bzero_safe(setup->volume_key, setup->volume_key_size);
-        setup->volume_key = mfree(setup->volume_key);
+        setup->volume_key = erase_and_free(setup->volume_key);
         setup->volume_key_size = 0;
 
+        if (setup->do_drop_caches)
+                drop_caches_now();
+
+        setup->mount_suffix = mfree(setup->mount_suffix);
+
         return r;
 }
 
-int home_prepare(
+int home_setup(
                 UserRecord *h,
-                bool already_activated,
-                PasswordCache *cache,
+                HomeSetupFlags flags,
                 HomeSetup *setup,
+                PasswordCache *cache,
                 UserRecord **ret_header_home) {
 
         int r;
@@ -367,22 +458,25 @@
 
         /* Makes a home directory accessible (through the root_fd file descriptor, not by path!). */
 
+        if (!FLAGS_SET(flags, HOME_SETUP_ALREADY_ACTIVATED)) /* If we set up the directory, we should also drop caches once we are done */
+                setup->do_drop_caches = setup->do_drop_caches || user_record_drop_caches(h);
+
         switch (user_record_storage(h)) {
 
         case USER_LUKS:
-                return home_prepare_luks(h, already_activated, NULL, cache, setup, ret_header_home);
+                return home_setup_luks(h, flags, NULL, setup, cache, ret_header_home);
 
         case USER_SUBVOLUME:
         case USER_DIRECTORY:
-                r = home_prepare_directory(h, already_activated, setup);
+                r = home_setup_directory(h, setup);
                 break;
 
         case USER_FSCRYPT:
-                r = home_prepare_fscrypt(h, already_activated, cache, setup);
+                r = home_setup_fscrypt(h, setup, cache);
                 break;
 
         case USER_CIFS:
-                r = home_prepare_cifs(h, already_activated, setup);
+                r = home_setup_cifs(h, flags, setup);
                 break;
 
         default:
@@ -418,7 +512,7 @@
 
 static int read_identity_file(int root_fd, JsonVariant **ret) {
         _cleanup_(fclosep) FILE *identity_file = NULL;
-        _cleanup_close_ int identity_fd = -1;
+        _cleanup_close_ int identity_fd = -EBADF;
         unsigned line, column;
         int r;
 
@@ -449,7 +543,7 @@
 static int write_identity_file(int root_fd, JsonVariant *v, uid_t uid) {
         _cleanup_(json_variant_unrefp) JsonVariant *normalized = NULL;
         _cleanup_(fclosep) FILE *identity_file = NULL;
-        _cleanup_close_ int identity_fd = -1;
+        _cleanup_close_ int identity_fd = -EBADF;
         _cleanup_free_ char *fn = NULL;
         int r;
 
@@ -639,14 +733,7 @@
                 return NULL;
         }
 
-        if (is_fs_type(&sfs, XFS_SB_MAGIC))
-                return "xfs";
-        if (is_fs_type(&sfs, EXT4_SUPER_MAGIC))
-                return "ext4";
-        if (is_fs_type(&sfs, BTRFS_SUPER_MAGIC))
-                return "btrfs";
-
-        return NULL;
+        return fs_type_to_string(sfs.f_type);
 }
 
 int home_extend_embedded_identity(UserRecord *h, UserRecord *used, HomeSetup *setup) {
@@ -693,8 +780,46 @@
         return 0;
 }
 
+int home_maybe_shift_uid(
+                UserRecord *h,
+                HomeSetupFlags flags,
+                HomeSetup *setup) {
+
+        _cleanup_close_ int mount_fd = -EBADF;
+        struct stat st;
+
+        assert(h);
+        assert(setup);
+        assert(setup->root_fd >= 0);
+
+        /* If the home dir is already activated, then the UID shift is already applied. */
+        if (FLAGS_SET(flags, HOME_SETUP_ALREADY_ACTIVATED))
+                return 0;
+
+        if (fstat(setup->root_fd, &st) < 0)
+                return log_error_errno(errno, "Failed to stat() home directory: %m");
+
+        /* Let's shift UIDs of this mount. Hopefully this makes the later chowning unnecessary. (Note that we
+         * also prefer to do UID mapping even if the UID already matches our goal UID. That's because we want
+         * to leave UIDs in the homed managed range unmapped.) */
+        (void) home_shift_uid(setup->root_fd, NULL, st.st_uid, h->uid, &mount_fd);
+
+        /* If this worked, then we'll have a reference to the mount now, which we can also use like an O_PATH
+         * fd to the new dir. Let's convert it into a proper O_DIRECTORY fd. */
+        if (mount_fd >= 0) {
+                safe_close(setup->root_fd);
+
+                setup->root_fd = fd_reopen(mount_fd, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+                if (setup->root_fd < 0)
+                        return log_error_errno(setup->root_fd, "Failed to convert mount fd into regular directory fd: %m");
+        }
+
+        return 0;
+}
+
 int home_refresh(
                 UserRecord *h,
+                HomeSetupFlags flags,
                 HomeSetup *setup,
                 UserRecord *header_home,
                 PasswordCache *cache,
@@ -715,6 +840,10 @@
         if (r < 0)
                 return r;
 
+        r = home_maybe_shift_uid(h, flags, setup);
+        if (r < 0)
+                return r;
+
         r = home_store_header_identity_luks(new_home, setup, header_home);
         if (r < 0)
                 return r;
@@ -736,8 +865,10 @@
 }
 
 static int home_activate(UserRecord *h, UserRecord **ret_home) {
-        _cleanup_(password_cache_free) PasswordCache cache = {};
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
+        _cleanup_(password_cache_free) PasswordCache cache = {};
+        HomeSetupFlags flags = 0;
         int r;
 
         assert(h);
@@ -768,7 +899,7 @@
         switch (user_record_storage(h)) {
 
         case USER_LUKS:
-                r = home_activate_luks(h, &cache, &new_home);
+                r = home_activate_luks(h, flags, &setup, &cache, &new_home);
                 if (r < 0)
                         return r;
 
@@ -777,21 +908,21 @@
         case USER_SUBVOLUME:
         case USER_DIRECTORY:
         case USER_FSCRYPT:
-                r = home_activate_directory(h, &cache, &new_home);
+                r = home_activate_directory(h, flags, &setup, &cache, &new_home);
                 if (r < 0)
                         return r;
 
                 break;
 
         case USER_CIFS:
-                r = home_activate_cifs(h, &cache, &new_home);
+                r = home_activate_cifs(h, flags, &setup, &cache, &new_home);
                 if (r < 0)
                         return r;
 
                 break;
 
         default:
-                assert_not_reached("unexpected type");
+                assert_not_reached();
         }
 
         /* Note that the returned object might either be a reference to an updated version of the existing
@@ -807,6 +938,8 @@
 }
 
 static int home_deactivate(UserRecord *h, bool force) {
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
+        _cleanup_(password_cache_free) PasswordCache cache = {};
         bool done = false;
         int r;
 
@@ -821,14 +954,54 @@
         if (r < 0)
                 return r;
         if (r == USER_TEST_MOUNTED) {
+                /* Before we do anything, let's move the home mount away. */
+                r = home_unshare_and_mkdir();
+                if (r < 0)
+                        return r;
+
+                r = mount_nofollow_verbose(LOG_ERR, user_record_home_directory(h), HOME_RUNTIME_WORK_DIR, NULL, MS_BIND, NULL);
+                if (r < 0)
+                        return r;
+
+                setup.undo_mount = true; /* remember to unmount the new bind mount from HOME_RUNTIME_WORK_DIR */
+
+                /* Let's explicitly open the new root fs, using the moved path */
+                setup.root_fd = open(HOME_RUNTIME_WORK_DIR, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+                if (setup.root_fd < 0)
+                        return log_error_errno(errno, "Failed to open moved home directory: %m");
+
+                /* Now get rid of the home at its original place (we only keep the bind mount we created above) */
+                r = umount_verbose(LOG_ERR, user_record_home_directory(h), UMOUNT_NOFOLLOW | (force ? MNT_FORCE|MNT_DETACH : 0));
+                if (r < 0)
+                        return r;
+
                 if (user_record_storage(h) == USER_LUKS) {
-                        r = home_trim_luks(h);
-                        if (r < 0)
-                                return r;
+                        /* Automatically shrink on logout if that's enabled. To be able to shrink we need the
+                         * keys to the device. */
+                        password_cache_load_keyring(h, &cache);
+                        (void) home_trim_luks(h, &setup);
                 }
 
-                if (umount2(user_record_home_directory(h), UMOUNT_NOFOLLOW | (force ? MNT_FORCE|MNT_DETACH : 0)) < 0)
-                        return log_error_errno(errno, "Failed to unmount %s: %m", user_record_home_directory(h));
+                /* Sync explicitly, so that the drop caches logic below can work as documented */
+                if (syncfs(setup.root_fd) < 0)
+                        log_debug_errno(errno, "Failed to synchronize home directory, ignoring: %m");
+                else
+                        log_info("Syncing completed.");
+
+                if (user_record_storage(h) == USER_LUKS)
+                        (void) home_auto_shrink_luks(h, &setup, &cache);
+
+                setup.root_fd = safe_close(setup.root_fd);
+
+                /* Now get rid of the bind mount, too */
+                r = umount_verbose(LOG_ERR, HOME_RUNTIME_WORK_DIR, UMOUNT_NOFOLLOW | (force ? MNT_FORCE|MNT_DETACH : 0));
+                if (r < 0)
+                        return r;
+
+                setup.undo_mount = false; /* Remember that the bind mount doesn't need to be unmounted anymore */
+
+                if (user_record_drop_caches(h))
+                        setup.do_drop_caches = true;
 
                 log_info("Unmounting completed.");
                 done = true;
@@ -836,16 +1009,24 @@
                 log_info("Directory %s is already unmounted.", user_record_home_directory(h));
 
         if (user_record_storage(h) == USER_LUKS) {
-                r = home_deactivate_luks(h);
+                r = home_deactivate_luks(h, &setup);
                 if (r < 0)
                         return r;
                 if (r > 0)
                         done = true;
         }
 
+        /* Explicitly flush any per-user key from the keyring */
+        (void) keyring_flush(h);
+
         if (!done)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOEXEC), "Home is not active.");
 
+        if (setup.do_drop_caches) {
+                setup.do_drop_caches = false;
+                drop_caches_now();
+        }
+
         log_info("Everything completed.");
         return 0;
 }
@@ -855,7 +1036,7 @@
 
         assert(root_fd >= 0);
 
-        r = copy_tree_at(AT_FDCWD, skel, root_fd, ".", UID_INVALID, GID_INVALID, COPY_MERGE|COPY_REPLACE);
+        r = copy_tree_at(AT_FDCWD, skel, root_fd, ".", UID_INVALID, GID_INVALID, COPY_MERGE|COPY_REPLACE, NULL);
         if (r == -ENOENT) {
                 log_info("Skeleton directory %s missing, ignoring.", skel);
                 return 0;
@@ -909,7 +1090,6 @@
 
         _cleanup_(strv_free_erasep) char **effective = NULL;
         size_t n;
-        char **i;
         int r;
 
         assert(h);
@@ -929,7 +1109,6 @@
 
         STRV_FOREACH(i, h->hashed_password) {
                 bool found = false;
-                char **j;
 
                 log_debug("Looking for plaintext password for: %s", *i);
 
@@ -957,7 +1136,6 @@
 
         for (n = 0; n < h->n_recovery_key; n++) {
                 bool found = false;
-                char **j;
 
                 log_debug("Looking for plaintext recovery key for: %s", h->recovery_key[n].hashed_password);
 
@@ -1095,12 +1273,12 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to determine whether we are in a container: %m");
         if (r == 0) {
-                r = path_is_encrypted("/home");
+                r = path_is_encrypted(get_home_root());
                 if (r > 0)
-                        log_info("/home is encrypted, not using '%s' storage, in order to avoid double encryption.", user_storage_to_string(USER_LUKS));
+                        log_info("%s is encrypted, not using '%s' storage, in order to avoid double encryption.", get_home_root(), user_storage_to_string(USER_LUKS));
                 else {
                         if (r < 0)
-                                log_warning_errno(r, "Failed to determine if /home is encrypted, ignoring: %m");
+                                log_warning_errno(r, "Failed to determine if %s is encrypted, ignoring: %m", get_home_root());
 
                         r = dlopen_cryptsetup();
                         if (r < 0)
@@ -1114,14 +1292,14 @@
         } else
                 log_info("Running in container, not using '%s' storage.", user_storage_to_string(USER_LUKS));
 
-        r = path_is_fs_type("/home", BTRFS_SUPER_MAGIC);
+        r = path_is_fs_type(get_home_root(), BTRFS_SUPER_MAGIC);
         if (r < 0)
-                log_warning_errno(r, "Failed to determine file system of /home, ignoring: %m");
+                log_warning_errno(r, "Failed to determine file system of %s, ignoring: %m", get_home_root());
         if (r > 0) {
-                log_info("/home is on btrfs, using '%s' as storage.", user_storage_to_string(USER_SUBVOLUME));
+                log_info("%s is on btrfs, using '%s' as storage.", get_home_root(), user_storage_to_string(USER_SUBVOLUME));
                 *ret = USER_SUBVOLUME;
         } else {
-                log_info("/home is on simple file system, using '%s' as storage.", user_storage_to_string(USER_DIRECTORY));
+                log_info("%s is on simple file system, using '%s' as storage.", get_home_root(), user_storage_to_string(USER_DIRECTORY));
                 *ret = USER_DIRECTORY;
         }
 
@@ -1130,6 +1308,7 @@
 
 static int home_create(UserRecord *h, UserRecord **ret_home) {
         _cleanup_(strv_free_erasep) char **effective_passwords = NULL;
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
         _cleanup_(password_cache_free) PasswordCache cache = {};
         UserStorage new_storage = _USER_STORAGE_INVALID;
@@ -1192,20 +1371,20 @@
         switch (user_record_storage(h)) {
 
         case USER_LUKS:
-                r = home_create_luks(h, &cache, effective_passwords, &new_home);
+                r = home_create_luks(h, &setup, &cache, effective_passwords, &new_home);
                 break;
 
         case USER_DIRECTORY:
         case USER_SUBVOLUME:
-                r = home_create_directory_or_subvolume(h, &new_home);
+                r = home_create_directory_or_subvolume(h, &setup, &new_home);
                 break;
 
         case USER_FSCRYPT:
-                r = home_create_fscrypt(h, effective_passwords, &new_home);
+                r = home_create_fscrypt(h, &setup, effective_passwords, &new_home);
                 break;
 
         case USER_CIFS:
-                r = home_create_cifs(h, &new_home);
+                r = home_create_cifs(h, &setup, &new_home);
                 break;
 
         default:
@@ -1268,9 +1447,21 @@
                                 if (unlink(ip) < 0) {
                                         if (errno != ENOENT)
                                                 return log_error_errno(errno, "Failed to remove %s: %m", ip);
-                                } else
+                                } else {
+                                        _cleanup_free_ char *parent = NULL;
+
                                         deleted = true;
 
+                                        r = path_extract_directory(ip, &parent);
+                                        if (r < 0)
+                                                log_debug_errno(r, "Failed to determine parent directory of '%s': %m", ip);
+                                        else {
+                                                r = fsync_path_at(AT_FDCWD, parent);
+                                                if (r < 0)
+                                                        log_debug_errno(r, "Failed to synchronize disk after deleting '%s', ignoring: %m", ip);
+                                        }
+                                }
+
                         } else if (S_ISBLK(st.st_mode))
                                 log_info("Not removing file system on block device %s.", ip);
                         else
@@ -1285,7 +1476,7 @@
         case USER_FSCRYPT:
                 assert(ip);
 
-                r = rm_rf(ip, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
+                r = rm_rf(ip, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME|REMOVE_SYNCFS);
                 if (r < 0) {
                         if (r != -ENOENT)
                                 return log_warning_errno(r, "Failed to remove %s: %m", ip);
@@ -1305,7 +1496,7 @@
                 break;
 
         default:
-                assert_not_reached("unknown storage type");
+                assert_not_reached();
         }
 
         if (hd) {
@@ -1316,16 +1507,19 @@
                         deleted = true;
         }
 
-        if (deleted)
+        if (deleted) {
+                if (user_record_drop_caches(h))
+                        drop_caches_now();
+
                 log_info("Everything completed.");
-        else
+        } else
                 return log_notice_errno(SYNTHETIC_ERRNO(EALREADY),
                                         "Nothing to remove.");
 
         return 0;
 }
 
-static int home_validate_update(UserRecord *h, HomeSetup *setup) {
+static int home_validate_update(UserRecord *h, HomeSetup *setup, HomeSetupFlags *flags) {
         bool has_mount = false;
         int r;
 
@@ -1360,7 +1554,7 @@
                 break;
 
         case USER_LUKS: {
-                r = home_validate_update_luks(h, setup);
+                r = home_get_state_luks(h, setup);
                 if (r < 0)
                         return r;
                 if ((r > 0) != has_mount)
@@ -1370,17 +1564,20 @@
         }
 
         default:
-                assert_not_reached("unexpected storage type");
+                assert_not_reached();
         }
 
+        if (flags)
+                SET_FLAG(*flags, HOME_SETUP_ALREADY_ACTIVATED, has_mount);
+
         return has_mount; /* return true if the home record is already active */
 }
 
 static int home_update(UserRecord *h, UserRecord **ret) {
         _cleanup_(user_record_unrefp) UserRecord *new_home = NULL, *header_home = NULL, *embedded_home = NULL;
-        _cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
         _cleanup_(password_cache_free) PasswordCache cache = {};
-        bool already_activated = false;
+        HomeSetupFlags flags = 0;
         int r;
 
         assert(h);
@@ -1391,13 +1588,11 @@
                 return r;
         assert(r > 0); /* Insist that a password was verified */
 
-        r = home_validate_update(h, &setup);
+        r = home_validate_update(h, &setup, &flags);
         if (r < 0)
                 return r;
 
-        already_activated = r > 0;
-
-        r = home_prepare(h, already_activated, &cache, &setup, &header_home);
+        r = home_setup(h, flags, &setup, &cache, &header_home);
         if (r < 0)
                 return r;
 
@@ -1405,6 +1600,10 @@
         if (r < 0)
                 return r;
 
+        r = home_maybe_shift_uid(h, flags, &setup);
+        if (r < 0)
+                return r;
+
         r = home_store_header_identity_luks(new_home, &setup, header_home);
         if (r < 0)
                 return r;
@@ -1421,7 +1620,7 @@
         if (r < 0)
                 return r;
 
-        r = home_setup_undo(&setup);
+        r = home_setup_done(&setup);
         if (r < 0)
                 return r;
 
@@ -1431,10 +1630,10 @@
         return 0;
 }
 
-static int home_resize(UserRecord *h, UserRecord **ret) {
-        _cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
+static int home_resize(UserRecord *h, bool automatic, UserRecord **ret) {
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
         _cleanup_(password_cache_free) PasswordCache cache = {};
-        bool already_activated = false;
+        HomeSetupFlags flags = 0;
         int r;
 
         assert(h);
@@ -1443,26 +1642,35 @@
         if (h->disk_size == UINT64_MAX)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No target size specified, refusing.");
 
-        r = user_record_authenticate(h, h, &cache, /* strict_verify= */ true);
-        if (r < 0)
-                return r;
-        assert(r > 0); /* Insist that a password was verified */
+        if (automatic)
+                /* In automatic mode don't want to ask the user for the password, hence load it from the kernel keyring */
+                password_cache_load_keyring(h, &cache);
+        else {
+                /* In manual mode let's ensure the user is fully authenticated */
+                r = user_record_authenticate(h, h, &cache, /* strict_verify= */ true);
+                if (r < 0)
+                        return r;
+                assert(r > 0); /* Insist that a password was verified */
+        }
 
-        r = home_validate_update(h, &setup);
+        r = home_validate_update(h, &setup, &flags);
         if (r < 0)
                 return r;
 
-        already_activated = r > 0;
+        /* In automatic mode let's skip syncing identities, because we can't validate them, since we can't
+         * ask the user for reauthentication */
+        if (automatic)
+                flags |= HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES;
 
         switch (user_record_storage(h)) {
 
         case USER_LUKS:
-                return home_resize_luks(h, already_activated, &cache, &setup, ret);
+                return home_resize_luks(h, flags, &setup, &cache, ret);
 
         case USER_DIRECTORY:
         case USER_SUBVOLUME:
         case USER_FSCRYPT:
-                return home_resize_directory(h, already_activated, &cache, &setup, ret);
+                return home_resize_directory(h, flags, &setup, &cache, ret);
 
         default:
                 return log_error_errno(SYNTHETIC_ERRNO(ENOTTY), "Resizing home directories of type '%s' currently not supported.", user_storage_to_string(user_record_storage(h)));
@@ -1472,9 +1680,9 @@
 static int home_passwd(UserRecord *h, UserRecord **ret_home) {
         _cleanup_(user_record_unrefp) UserRecord *header_home = NULL, *embedded_home = NULL, *new_home = NULL;
         _cleanup_(strv_free_erasep) char **effective_passwords = NULL;
-        _cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
         _cleanup_(password_cache_free) PasswordCache cache = {};
-        bool already_activated = false;
+        HomeSetupFlags flags = 0;
         int r;
 
         assert(h);
@@ -1487,13 +1695,11 @@
         if (r < 0)
                 return r;
 
-        r = home_validate_update(h, &setup);
+        r = home_validate_update(h, &setup, &flags);
         if (r < 0)
                 return r;
 
-        already_activated = r > 0;
-
-        r = home_prepare(h, already_activated, &cache, &setup, &header_home);
+        r = home_setup(h, flags, &setup, &cache, &header_home);
         if (r < 0)
                 return r;
 
@@ -1501,10 +1707,14 @@
         if (r < 0)
                 return r;
 
+        r = home_maybe_shift_uid(h, flags, &setup);
+        if (r < 0)
+                return r;
+
         switch (user_record_storage(h)) {
 
         case USER_LUKS:
-                r = home_passwd_luks(h, &setup, &cache, effective_passwords);
+                r = home_passwd_luks(h, flags, &setup, &cache, effective_passwords);
                 if (r < 0)
                         return r;
                 break;
@@ -1535,7 +1745,7 @@
         if (r < 0)
                 return r;
 
-        r = home_setup_undo(&setup);
+        r = home_setup_done(&setup);
         if (r < 0)
                 return r;
 
@@ -1547,9 +1757,9 @@
 
 static int home_inspect(UserRecord *h, UserRecord **ret_home) {
         _cleanup_(user_record_unrefp) UserRecord *header_home = NULL, *new_home = NULL;
-        _cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
         _cleanup_(password_cache_free) PasswordCache cache = {};
-        bool already_activated = false;
+        HomeSetupFlags flags = 0;
         int r;
 
         assert(h);
@@ -1559,13 +1769,11 @@
         if (r < 0)
                 return r;
 
-        r = home_validate_update(h, &setup);
+        r = home_validate_update(h, &setup, &flags);
         if (r < 0)
                 return r;
 
-        already_activated = r > 0;
-
-        r = home_prepare(h, already_activated, &cache, &setup, &header_home);
+        r = home_setup(h, flags, &setup, &cache, &header_home);
         if (r < 0)
                 return r;
 
@@ -1577,7 +1785,7 @@
         if (r < 0)
                 return r;
 
-        r = home_setup_undo(&setup);
+        r = home_setup_done(&setup);
         if (r < 0)
                 return r;
 
@@ -1588,6 +1796,7 @@
 }
 
 static int home_lock(UserRecord *h) {
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
         int r;
 
         assert(h);
@@ -1603,7 +1812,7 @@
         if (r != USER_TEST_MOUNTED)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOEXEC), "Home directory of %s is not mounted, can't lock.", h->user_name);
 
-        r = home_lock_luks(h);
+        r = home_lock_luks(h, &setup);
         if (r < 0)
                 return r;
 
@@ -1612,6 +1821,7 @@
 }
 
 static int home_unlock(UserRecord *h) {
+        _cleanup_(home_setup_done) HomeSetup setup = HOME_SETUP_INIT;
         _cleanup_(password_cache_free) PasswordCache cache = {};
         int r;
 
@@ -1629,7 +1839,7 @@
         if (r < 0)
                 return r;
 
-        r = home_unlock_luks(h, &cache);
+        r = home_unlock_luks(h, &setup, &cache);
         if (r < 0)
                 return r;
 
@@ -1708,6 +1918,7 @@
          * ENOEXEC         → file system is currently not active
          * ENOSPC          → not enough disk space for operation
          * EKEYREVOKED     → user record has not suitable hashed password or pkcs#11 entry, we cannot authenticate
+         * EADDRINUSE      → home image is already used elsewhere (lock taken)
          */
 
         if (streq(argv[1], "activate"))
@@ -1722,8 +1933,10 @@
                 r = home_remove(home);
         else if (streq(argv[1], "update"))
                 r = home_update(home, &new_home);
-        else if (streq(argv[1], "resize"))
-                r = home_resize(home, &new_home);
+        else if (streq(argv[1], "resize")) /* Resize on user request */
+                r = home_resize(home, false, &new_home);
+        else if (streq(argv[1], "resize-auto")) /* Automatic resize */
+                r = home_resize(home, true, &new_home);
         else if (streq(argv[1], "passwd"))
                 r = home_passwd(home, &new_home);
         else if (streq(argv[1], "inspect"))
diff --git a/src/home/homework.h b/src/home/homework.h
index fb53fd4..cef3f4e 100644
--- a/src/home/homework.h
+++ b/src/home/homework.h
@@ -1,18 +1,22 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <linux/fs.h>
 #include <sys/vfs.h>
 
 #include "sd-id128.h"
 
+#include "cryptsetup-util.h"
+#include "homework-password-cache.h"
 #include "loop-util.h"
+#include "missing_fs.h" /* for FS_KEY_DESCRIPTOR_SIZE, do not include linux/fs.h */
+#include "missing_keyctl.h"
+#include "missing_syscall.h"
 #include "user-record.h"
 #include "user-record-util.h"
 
 typedef struct HomeSetup {
-        char *dm_name;
-        char *dm_node;
+        char *dm_name;   /* "home-<username>" */
+        char *dm_node;   /* "/dev/mapper/home-<username>" */
 
         LoopDevice *loop;
         struct crypt_device *crypt_device;
@@ -27,38 +31,59 @@
         void *volume_key;
         size_t volume_key_size;
 
-        bool undo_dm;
-        bool undo_mount;
-        bool do_offline_fitrim;
-        bool do_offline_fallocate;
-        bool do_mark_clean;
+        key_serial_t key_serial;
+
+        bool undo_dm:1;
+        bool undo_mount:1;            /* Whether to unmount /run/systemd/user-home-mount */
+        bool do_offline_fitrim:1;
+        bool do_offline_fallocate:1;
+        bool do_mark_clean:1;
+        bool do_drop_caches:1;
 
         uint64_t partition_offset;
         uint64_t partition_size;
+
+        char *mount_suffix;           /* The directory to use as home dir is this path below /run/systemd/user-home-mount */
+
+        char *temporary_image_path;
 } HomeSetup;
 
-typedef struct PasswordCache {
-        /* Decoding passwords from security tokens is expensive and typically requires user interaction, hence cache any we already figured out. */
-        char **pkcs11_passwords;
-        char **fido2_passwords;
-} PasswordCache;
-
-void password_cache_free(PasswordCache *cache);
-
 #define HOME_SETUP_INIT                                 \
         {                                               \
-                .root_fd = -1,                          \
-                .image_fd = -1,                         \
+                .root_fd = -EBADF,                      \
+                .image_fd = -EBADF,                     \
                 .partition_offset = UINT64_MAX,         \
                 .partition_size = UINT64_MAX,           \
+                .key_serial = -1,                       \
         }
 
-int home_setup_undo(HomeSetup *setup);
+/* Various flags for the operation of setting up a home directory */
+typedef enum HomeSetupFlags {
+        HOME_SETUP_ALREADY_ACTIVATED           = 1 << 0, /* Open an already activated home, rather than activate it afresh */
 
-int home_prepare(UserRecord *h, bool already_activated, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_header_home);
+        /* CIFS backend: */
+        HOME_SETUP_CIFS_MKDIR                  = 1 << 1, /* Create CIFS subdir when missing */
 
-int home_refresh(UserRecord *h, HomeSetup *setup, UserRecord *header_home, PasswordCache *cache, struct statfs *ret_statfs, UserRecord **ret_new_home);
+        /* Applies only for resize operations */
+        HOME_SETUP_RESIZE_DONT_SYNC_IDENTITIES = 1 << 2, /* Don't sync identity records into home and LUKS header */
+        HOME_SETUP_RESIZE_MINIMIZE             = 1 << 3, /* Shrink to minimal size */
+        HOME_SETUP_RESIZE_DONT_GROW            = 1 << 4, /* If the resize would grow, gracefully terminate operation */
+        HOME_SETUP_RESIZE_DONT_SHRINK          = 1 << 5, /* If the resize would shrink, gracefully terminate operation */
+        HOME_SETUP_RESIZE_DONT_UNDO            = 1 << 6, /* Leave loopback/DM device context open after successful operation */
+} HomeSetupFlags;
 
+int home_setup_done(HomeSetup *setup);
+
+int home_setup_undo_mount(HomeSetup *setup, int level);
+int home_setup_undo_dm(HomeSetup *setup, int level);
+
+int keyring_unlink(key_serial_t k);
+
+int home_setup(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup, PasswordCache *cache, UserRecord **ret_header_home);
+
+int home_refresh(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup, UserRecord *header_home, PasswordCache *cache, struct statfs *ret_statfs, UserRecord **ret_new_home);
+
+int home_maybe_shift_uid(UserRecord *h, HomeSetupFlags flags, HomeSetup *setup);
 int home_populate(UserRecord *h, int dir_fd);
 
 int home_load_embedded_identity(UserRecord *h, int root_fd, UserRecord *header_home, UserReconcileMode mode, PasswordCache *cache, UserRecord **ret_embedded_home, UserRecord **ret_new_home);
@@ -68,3 +93,5 @@
 int user_record_authenticate(UserRecord *h, UserRecord *secret, PasswordCache *cache, bool strict_verify);
 
 int home_sync_and_statfs(int root_fd, struct statfs *ret);
+
+#define HOME_RUNTIME_WORK_DIR "/run/systemd/user-home-mount"
diff --git a/src/home/meson.build b/src/home/meson.build
index 53a387f..475faae 100644
--- a/src/home/meson.build
+++ b/src/home/meson.build
@@ -2,28 +2,18 @@
 
 home_includes = [includes, include_directories('.')]
 
-systemd_homework_sources = files('''
-        home-util.c
-        home-util.h
-        homework-cifs.c
-        homework-cifs.h
-        homework-directory.c
-        homework-directory.h
-        homework-fido2.h
-        homework-fscrypt.c
-        homework-fscrypt.h
-        homework-luks.c
-        homework-luks.h
-        homework-mount.c
-        homework-mount.h
-        homework-pkcs11.h
-        homework-quota.c
-        homework-quota.h
-        homework.c
-        homework.h
-        user-record-util.c
-        user-record-util.h
-'''.split())
+systemd_homework_sources = files(
+        'home-util.c',
+        'homework-cifs.c',
+        'homework-directory.c',
+        'homework-fscrypt.c',
+        'homework-luks.c',
+        'homework-mount.c',
+        'homework-password-cache.c',
+        'homework-quota.c',
+        'homework.c',
+        'user-record-util.c',
+)
 
 if conf.get('HAVE_P11KIT') == 1
         systemd_homework_sources += files('homework-pkcs11.c')
@@ -32,33 +22,21 @@
         systemd_homework_sources += files('homework-fido2.c')
 endif
 
-systemd_homed_sources = files('''
-        home-util.c
-        home-util.h
-        homed-bus.c
-        homed-bus.h
-        homed-conf.c
-        homed-conf.h
-        homed-home-bus.c
-        homed-home-bus.h
-        homed-home.c
-        homed-home.h
-        homed-manager-bus.c
-        homed-manager-bus.h
-        homed-manager.c
-        homed-manager.h
-        homed-operation.c
-        homed-operation.h
-        homed-varlink.c
-        homed-varlink.h
-        homed.c
-        user-record-pwquality.c
-        user-record-pwquality.h
-        user-record-sign.c
-        user-record-sign.h
-        user-record-util.c
-        user-record-util.h
-'''.split())
+systemd_homed_sources = files(
+        'home-util.c',
+        'homed-bus.c',
+        'homed-conf.c',
+        'homed-home-bus.c',
+        'homed-home.c',
+        'homed-manager-bus.c',
+        'homed-manager.c',
+        'homed-operation.c',
+        'homed-varlink.c',
+        'homed.c',
+        'user-record-pwquality.c',
+        'user-record-sign.c',
+        'user-record-util.c',
+)
 
 homed_gperf_c = custom_target(
         'homed_gperf.c',
@@ -68,30 +46,22 @@
 
 systemd_homed_sources += [homed_gperf_c]
 
-homectl_sources = files('''
-        home-util.c
-        home-util.h
-        homectl-fido2.c
-        homectl-fido2.h
-        homectl-pkcs11.c
-        homectl-pkcs11.h
-        homectl-recovery-key.c
-        homectl-recovery-key.h
-        homectl.c
-        user-record-pwquality.c
-        user-record-pwquality.h
-        user-record-util.c
-        user-record-util.h
-'''.split())
+homectl_sources = files(
+        'home-util.c',
+        'homectl-fido2.c',
+        'homectl-pkcs11.c',
+        'homectl-recovery-key.c',
+        'homectl.c',
+        'user-record-pwquality.c',
+        'user-record-util.c',
+)
 
 pam_systemd_home_sym = 'src/home/pam_systemd_home.sym'
-pam_systemd_home_c = files('''
-        home-util.c
-        home-util.h
-        pam_systemd_home.c
-        user-record-util.c
-        user-record-util.h
-'''.split())
+pam_systemd_home_c = files(
+        'home-util.c',
+        'pam_systemd_home.c',
+        'user-record-util.c',
+)
 
 if conf.get('ENABLE_HOMED') == 1
         install_data('org.freedesktop.home1.conf',
diff --git a/src/home/org.freedesktop.home1.conf b/src/home/org.freedesktop.home1.conf
index 1975d5f..de1fb93 100644
--- a/src/home/org.freedesktop.home1.conf
+++ b/src/home/org.freedesktop.home1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
@@ -125,6 +125,10 @@
                        send_interface="org.freedesktop.home1.Manager"
                        send_member="LockAllHomes"/>
 
+                <allow send_destination="org.freedesktop.home1"
+                       send_interface="org.freedesktop.home1.Manager"
+                       send_member="Rebalance"/>
+
                 <!-- Home object -->
 
                 <allow send_destination="org.freedesktop.home1"
diff --git a/src/home/org.freedesktop.home1.policy b/src/home/org.freedesktop.home1.policy
index 71253e0..a337b32 100644
--- a/src/home/org.freedesktop.home1.policy
+++ b/src/home/org.freedesktop.home1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
diff --git a/src/home/pam_systemd_home.c b/src/home/pam_systemd_home.c
index 27b292f..8a7bfc5 100644
--- a/src/home/pam_systemd_home.c
+++ b/src/home/pam_systemd_home.c
@@ -25,12 +25,10 @@
                 bool *please_suspend,
                 bool *debug) {
 
-        int i;
-
         assert(argc >= 0);
         assert(argc == 0 || argv);
 
-        for (i = 0; i < argc; i++) {
+        for (int i = 0; i < argc; i++) {
                 const char *v;
 
                 if ((v = startswith(argv[i], "suspend="))) {
@@ -107,15 +105,11 @@
 
         if (!username) {
                 r = pam_get_user(handle, &username, NULL);
-                if (r != PAM_SUCCESS) {
-                        pam_syslog(handle, LOG_ERR, "Failed to get user name: %s", pam_strerror(handle, r));
-                        return r;
-                }
+                if (r != PAM_SUCCESS)
+                        return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get user name: @PAMERR@");
 
-                if (isempty(username)) {
-                        pam_syslog(handle, LOG_ERR, "User name not set.");
-                        return PAM_SERVICE_ERR;
-                }
+                if (isempty(username))
+                        return pam_syslog_pam_error(handle, LOG_ERR, PAM_SERVICE_ERR, "User name not set.");
         }
 
         /* Let's bypass all IPC complexity for the two user names we know for sure we don't manage, and for
@@ -135,10 +129,8 @@
 
         /* Let's use the cache, so that we can share it between the session and the authentication hooks */
         r = pam_get_data(handle, homed_field, (const void**) &json);
-        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA)) {
-                pam_syslog(handle, LOG_ERR, "Failed to get PAM user record data: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM user record data: @PAMERR@");
         if (r == PAM_SUCCESS && json) {
                 /* We determined earlier that this is not a homed user? Then exit early. (We use -1 as
                  * negative cache indicator) */
@@ -179,11 +171,9 @@
                         return pam_log_oom(handle);
 
                 r = pam_set_data(handle, homed_field, json_copy, pam_cleanup_free);
-                if (r != PAM_SUCCESS) {
-                        pam_syslog(handle, LOG_ERR, "Failed to set PAM user record data '%s': %s",
-                                   homed_field, pam_strerror(handle, r));
-                        return r;
-                }
+                if (r != PAM_SUCCESS)
+                        return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                                    "Failed to set PAM user record data '%s': @PAMERR@", homed_field);
 
                 /* Take a second copy: for the generic data field, the one which we share with
                  * pam_systemd. While we insist on only reusing homed records, pam_systemd is fine with homed
@@ -197,36 +187,29 @@
                         return pam_log_oom(handle);
 
                 r = pam_set_data(handle, generic_field, json_copy, pam_cleanup_free);
-                if (r != PAM_SUCCESS) {
-                        pam_syslog(handle, LOG_ERR, "Failed to set PAM user record data '%s': %s",
-                                   homed_field, pam_strerror(handle, r));
-                        return r;
-                }
+                if (r != PAM_SUCCESS)
+                        return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                                    "Failed to set PAM user record data '%s': @PAMERR@", homed_field);
 
                 TAKE_PTR(json_copy);
         }
 
         r = json_parse(json, JSON_PARSE_SENSITIVE, &v, NULL, NULL);
-        if (r < 0) {
-                pam_syslog(handle, LOG_ERR, "Failed to parse JSON user record: %s", strerror_safe(r));
-                return PAM_SERVICE_ERR;
-        }
+        if (r < 0)
+                return pam_syslog_errno(handle, LOG_ERR, r, "Failed to parse JSON user record: %m");
 
         ur = user_record_new();
         if (!ur)
                 return pam_log_oom(handle);
 
         r = user_record_load(ur, v, USER_RECORD_LOAD_REFUSE_SECRET|USER_RECORD_PERMISSIVE);
-        if (r < 0) {
-                pam_syslog(handle, LOG_ERR, "Failed to load user record: %s", strerror_safe(r));
-                return PAM_SERVICE_ERR;
-        }
+        if (r < 0)
+                return pam_syslog_errno(handle, LOG_ERR, r, "Failed to load user record: %m");
 
         /* Safety check if cached record actually matches what we are looking for */
-        if (!streq_ptr(username, ur->user_name)) {
-                pam_syslog(handle, LOG_ERR, "Acquired user record does not match user name.");
-                return PAM_SERVICE_ERR;
-        }
+        if (!streq_ptr(username, ur->user_name))
+                return pam_syslog_pam_error(handle, LOG_ERR, PAM_SERVICE_ERR,
+                                            "Acquired user record does not match user name.");
 
         if (ret_record)
                 *ret_record = TAKE_PTR(ur);
@@ -237,8 +220,9 @@
         /* Cache this, so that we don't check again */
         r = pam_set_data(handle, homed_field, POINTER_MAX, NULL);
         if (r != PAM_SUCCESS)
-                pam_syslog(handle, LOG_ERR, "Failed to set PAM user record data '%s' to invalid, ignoring: %s",
-                           homed_field, pam_strerror(handle, r));
+                pam_syslog_pam_error(handle, LOG_ERR, r,
+                                     "Failed to set PAM user record data '%s' to invalid, ignoring: @PAMERR@",
+                                     homed_field);
 
         return PAM_USER_UNKNOWN;
 }
@@ -256,7 +240,8 @@
 
         r = pam_set_data(handle, homed_field, NULL, NULL);
         if (r != PAM_SUCCESS)
-                pam_syslog(handle, LOG_ERR, "Failed to release PAM user record data '%s': %s", homed_field, pam_strerror(handle, r));
+                pam_syslog_pam_error(handle, LOG_ERR, r,
+                                     "Failed to release PAM user record data '%s': @PAMERR@", homed_field);
 
         generic_field = strjoin("systemd-user-record-", username);
         if (!generic_field)
@@ -264,7 +249,8 @@
 
         k = pam_set_data(handle, generic_field, NULL, NULL);
         if (k != PAM_SUCCESS)
-                pam_syslog(handle, LOG_ERR, "Failed to release PAM user record data '%s': %s", generic_field, pam_strerror(handle, k));
+                pam_syslog_pam_error(handle, LOG_ERR, k,
+                                     "Failed to release PAM user record data '%s': @PAMERR@", generic_field);
 
         return IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA) ? k : r;
 }
@@ -288,14 +274,15 @@
         /* Logs about all errors, except for PAM_CONV_ERR, i.e. when requesting more info failed. */
 
         if (sd_bus_error_has_name(error, BUS_ERROR_HOME_ABSENT)) {
-                (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Home of user %s is currently absent, please plug in the necessary storage device or backing file system.", user_name);
-                pam_syslog(handle, LOG_ERR, "Failed to acquire home for user %s: %s", user_name, bus_error_message(error, ret));
-                return PAM_PERM_DENIED;
+                (void) pam_prompt(handle, PAM_ERROR_MSG, NULL,
+                                  "Home of user %s is currently absent, please plug in the necessary storage device or backing file system.", user_name);
+                return pam_syslog_pam_error(handle, LOG_ERR, PAM_PERM_DENIED,
+                                            "Failed to acquire home for user %s: %s", user_name, bus_error_message(error, ret));
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_AUTHENTICATION_LIMIT_HIT)) {
-                (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Too frequent unsuccessful login attempts for user %s, try again later.", user_name);
-                pam_syslog(handle, LOG_ERR, "Failed to acquire home for user %s: %s", user_name, bus_error_message(error, ret));
-                return PAM_MAXTRIES;
+                (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Too frequent login attempts for user %s, try again later.", user_name);
+                return pam_syslog_pam_error(handle, LOG_ERR, PAM_MAXTRIES,
+                                            "Failed to acquire home for user %s: %s", user_name, bus_error_message(error, ret));
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_BAD_PASSWORD)) {
                 _cleanup_(erase_and_freep) char *newp = NULL;
@@ -313,16 +300,37 @@
                 if (r != PAM_SUCCESS)
                         return PAM_CONV_ERR; /* no logging here */
 
-                if (isempty(newp)) {
-                        pam_syslog(handle, LOG_DEBUG, "Password request aborted.");
-                        return PAM_AUTHTOK_ERR;
-                }
+                if (isempty(newp))
+                        return pam_syslog_pam_error(handle, LOG_DEBUG, PAM_AUTHTOK_ERR,
+                                                    "Password request aborted.");
 
                 r = user_record_set_password(secret, STRV_MAKE(newp), true);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to store password: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store password: %m");
+
+        } else if (sd_bus_error_has_name(error, BUS_ERROR_BAD_RECOVERY_KEY)) {
+                _cleanup_(erase_and_freep) char *newp = NULL;
+
+                assert(secret);
+
+                /* Hmm, homed asks for recovery key (because no regular password is defined maybe)? Provide it. */
+
+                if (strv_isempty(secret->password))
+                        r = pam_prompt(handle, PAM_PROMPT_ECHO_OFF, &newp, "Recovery key: ");
+                else {
+                        (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Password/recovery key incorrect or not sufficient for authentication of user %s.", user_name);
+                        r = pam_prompt(handle, PAM_PROMPT_ECHO_OFF, &newp, "Sorry, reenter recovery key: ");
                 }
+                if (r != PAM_SUCCESS)
+                        return PAM_CONV_ERR; /* no logging here */
+
+                if (isempty(newp))
+                        return pam_syslog_pam_error(handle, LOG_DEBUG, PAM_AUTHTOK_ERR,
+                                                    "Recovery key request aborted.");
+
+                r = user_record_set_password(secret, STRV_MAKE(newp), true);
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store recovery key: %m");
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_BAD_PASSWORD_AND_NO_TOKEN)) {
                 _cleanup_(erase_and_freep) char *newp = NULL;
@@ -339,16 +347,14 @@
                 if (r != PAM_SUCCESS)
                         return PAM_CONV_ERR; /* no logging here */
 
-                if (isempty(newp)) {
-                        pam_syslog(handle, LOG_DEBUG, "Password request aborted.");
-                        return PAM_AUTHTOK_ERR;
-                }
+                if (isempty(newp))
+                        return pam_syslog_pam_error(handle, LOG_DEBUG, PAM_AUTHTOK_ERR,
+                                                    "Password request aborted.");
+
 
                 r = user_record_set_password(secret, STRV_MAKE(newp), true);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to store password: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store password: %m");
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_PIN_NEEDED)) {
                 _cleanup_(erase_and_freep) char *newp = NULL;
@@ -359,16 +365,12 @@
                 if (r != PAM_SUCCESS)
                         return PAM_CONV_ERR; /* no logging here */
 
-                if (isempty(newp)) {
-                        pam_syslog(handle, LOG_DEBUG, "PIN request aborted.");
-                        return PAM_AUTHTOK_ERR;
-                }
+                if (isempty(newp))
+                        return pam_syslog_pam_error(handle, LOG_DEBUG, PAM_AUTHTOK_ERR, "PIN request aborted.");
 
                 r = user_record_set_token_pin(secret, STRV_MAKE(newp), false);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to store PIN: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store PIN: %m");
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_PROTECTED_AUTHENTICATION_PATH_NEEDED)) {
 
@@ -377,10 +379,9 @@
                 (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Please authenticate physically on security token of user %s.", user_name);
 
                 r = user_record_set_pkcs11_protected_authentication_path_permitted(secret, true);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to set PKCS#11 protected authentication path permitted flag: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r,
+                                                "Failed to set PKCS#11 protected authentication path permitted flag: %m");
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_USER_PRESENCE_NEEDED)) {
 
@@ -389,10 +390,9 @@
                 (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Please confirm presence on security token of user %s.", user_name);
 
                 r = user_record_set_fido2_user_presence_permitted(secret, true);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to set FIDO2 user presence permitted flag: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r,
+                                                "Failed to set FIDO2 user presence permitted flag: %m");
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_USER_VERIFICATION_NEEDED)) {
 
@@ -401,10 +401,9 @@
                 (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Please verify user on security token of user %s.", user_name);
 
                 r = user_record_set_fido2_user_verification_permitted(secret, true);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to set FIDO2 user verification permitted flag: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r,
+                                                "Failed to set FIDO2 user verification permitted flag: %m");
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_PIN_LOCKED)) {
 
@@ -421,16 +420,12 @@
                 if (r != PAM_SUCCESS)
                         return PAM_CONV_ERR; /* no logging here */
 
-                if (isempty(newp)) {
-                        pam_syslog(handle, LOG_DEBUG, "PIN request aborted.");
-                        return PAM_AUTHTOK_ERR;
-                }
+                if (isempty(newp))
+                        return pam_syslog_pam_error(handle, LOG_DEBUG, PAM_AUTHTOK_ERR, "PIN request aborted.");
 
                 r = user_record_set_token_pin(secret, STRV_MAKE(newp), false);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to store PIN: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store PIN: %m");
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_BAD_PIN_FEW_TRIES_LEFT)) {
                 _cleanup_(erase_and_freep) char *newp = NULL;
@@ -442,16 +437,12 @@
                 if (r != PAM_SUCCESS)
                         return PAM_CONV_ERR; /* no logging here */
 
-                if (isempty(newp)) {
-                        pam_syslog(handle, LOG_DEBUG, "PIN request aborted.");
-                        return PAM_AUTHTOK_ERR;
-                }
+                if (isempty(newp))
+                        return pam_syslog_pam_error(handle, LOG_DEBUG, PAM_AUTHTOK_ERR, "PIN request aborted.");
 
                 r = user_record_set_token_pin(secret, STRV_MAKE(newp), false);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to store PIN: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store PIN: %m");
 
         } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_BAD_PIN_ONE_TRY_LEFT)) {
                 _cleanup_(erase_and_freep) char *newp = NULL;
@@ -463,21 +454,16 @@
                 if (r != PAM_SUCCESS)
                         return PAM_CONV_ERR; /* no logging here */
 
-                if (isempty(newp)) {
-                        pam_syslog(handle, LOG_DEBUG, "PIN request aborted.");
-                        return PAM_AUTHTOK_ERR;
-                }
+                if (isempty(newp))
+                        return pam_syslog_pam_error(handle, LOG_DEBUG, PAM_AUTHTOK_ERR, "PIN request aborted.");
 
                 r = user_record_set_token_pin(secret, STRV_MAKE(newp), false);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to store PIN: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store PIN: %m");
 
-        } else {
-                pam_syslog(handle, LOG_ERR, "Failed to acquire home for user %s: %s", user_name, bus_error_message(error, ret));
-                return PAM_SERVICE_ERR;
-        }
+        } else
+                return pam_syslog_pam_error(handle, LOG_ERR, PAM_SERVICE_ERR,
+                                            "Failed to acquire home for user %s: %s", user_name, bus_error_message(error, ret));
 
         return PAM_SUCCESS;
 }
@@ -491,7 +477,7 @@
         _cleanup_(user_record_unrefp) UserRecord *ur = NULL, *secret = NULL;
         bool do_auth = please_authenticate, home_not_active = false, home_locked = false;
         _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
-        _cleanup_close_ int acquired_fd = -1;
+        _cleanup_close_ int acquired_fd = -EBADF;
         _cleanup_free_ char *fd_field = NULL;
         const void *home_fd_ptr = NULL;
         const char *username = NULL;
@@ -509,15 +495,11 @@
          * authentication if possible, but with authentication if necessary. */
 
         r = pam_get_user(handle, &username, NULL);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to get user name: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get user name: @PAMERR@");
 
-        if (isempty(username)) {
-                pam_syslog(handle, LOG_ERR, "User name not set.");
-                return PAM_SERVICE_ERR;
-        }
+        if (isempty(username))
+                return pam_syslog_pam_error(handle, LOG_ERR, PAM_SERVICE_ERR, "User name not set.");
 
         /* If we already have acquired the fd, let's shortcut this */
         fd_field = strjoin("systemd-home-fd-", username);
@@ -525,10 +507,9 @@
                 return pam_log_oom(handle);
 
         r = pam_get_data(handle, fd_field, &home_fd_ptr);
-        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA)) {
-                pam_syslog(handle, LOG_ERR, "Failed to retrieve PAM home reference fd: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                            "Failed to retrieve PAM home reference fd: @PAMERR@");
         if (r == PAM_SUCCESS && PTR_TO_FD(home_fd_ptr) >= 0)
                 return PAM_SUCCESS;
 
@@ -563,17 +544,14 @@
                          * without anything, maybe some other authentication mechanism systemd-homed
                          * implements (such as PKCS#11) allows us to authenticate without anything else. */
                         r = pam_get_item(handle, PAM_AUTHTOK, (const void**) &cached_password);
-                        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS)) {
-                                pam_syslog(handle, LOG_ERR, "Failed to get cached password: %s", pam_strerror(handle, r));
-                                return r;
-                        }
+                        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                                return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                                            "Failed to get cached password: @PAMERR@");
 
                         if (!isempty(cached_password)) {
                                 r = user_record_set_password(secret, STRV_MAKE(cached_password), true);
-                                if (r < 0) {
-                                        pam_syslog(handle, LOG_ERR, "Failed to store password: %s", strerror_safe(r));
-                                        return PAM_SERVICE_ERR;
-                                }
+                                if (r < 0)
+                                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store password: %m");
                         }
                 }
 
@@ -634,18 +612,17 @@
                                 return pam_bus_log_parse_error(handle, r);
 
                         acquired_fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
-                        if (acquired_fd < 0) {
-                                pam_syslog(handle, LOG_ERR, "Failed to duplicate acquired fd: %s", bus_error_message(&error, r));
-                                return PAM_SERVICE_ERR;
-                        }
-
+                        if (acquired_fd < 0)
+                                return pam_syslog_errno(handle, LOG_ERR, errno,
+                                                        "Failed to duplicate acquired fd: %m");
                         break;
                 }
 
                 if (++n_attempts >= 5) {
-                        (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Too many unsuccessful login attempts for user %s, refusing.", ur->user_name);
-                        pam_syslog(handle, LOG_ERR, "Failed to acquire home for user %s: %s", ur->user_name, bus_error_message(&error, r));
-                        return PAM_MAXTRIES;
+                        (void) pam_prompt(handle, PAM_ERROR_MSG, NULL,
+                                          "Too many unsuccessful login attempts for user %s, refusing.", ur->user_name);
+                        return pam_syslog_pam_error(handle, LOG_ERR, PAM_MAXTRIES,
+                                                    "Failed to acquire home for user %s: %s", ur->user_name, bus_error_message(&error, r));
                 }
 
                 /* Try again, this time with authentication if we didn't do that before. */
@@ -655,17 +632,13 @@
         /* Later PAM modules may need the auth token, but only during pam_authenticate. */
         if (please_authenticate && !strv_isempty(secret->password)) {
                 r = pam_set_item(handle, PAM_AUTHTOK, *secret->password);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to set PAM auth token: %s", pam_strerror(handle, r));
-                        return r;
-                }
+                if (r != PAM_SUCCESS)
+                        return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to set PAM auth token: @PAMERR@");
         }
 
         r = pam_set_data(handle, fd_field, FD_TO_PTR(acquired_fd), cleanup_home_fd);
-        if (r < 0) {
-                pam_syslog(handle, LOG_ERR, "Failed to set PAM bus data: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to set PAM bus data: @PAMERR@");
         TAKE_FD(acquired_fd);
 
         if (do_auth) {
@@ -678,7 +651,6 @@
         }
 
         pam_syslog(handle, LOG_NOTICE, "Home for user %s successfully acquired.", ur->user_name);
-
         return PAM_SUCCESS;
 }
 
@@ -697,16 +669,14 @@
         r = pam_get_data(handle, fd_field, &home_fd_ptr);
         if (r == PAM_NO_MODULE_DATA || (r == PAM_SUCCESS && PTR_TO_FD(home_fd_ptr) < 0))
                 return PAM_NO_MODULE_DATA;
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to retrieve PAM home reference fd: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to retrieve PAM home reference fd: @PAMERR@");
 
         r = pam_set_data(handle, fd_field, NULL, NULL);
         if (r != PAM_SUCCESS)
-                pam_syslog(handle, LOG_ERR, "Failed to release PAM home reference fd: %s", pam_strerror(handle, r));
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to release PAM home reference fd: @PAMERR@");
 
-        return r;
+        return PAM_SUCCESS;
 }
 
 _public_ PAM_EXTERN int pam_sm_authenticate(
@@ -762,16 +732,14 @@
                 return r;
 
         r = pam_putenv(handle, "SYSTEMD_HOME=1");
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to set PAM environment variable $SYSTEMD_HOME: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                            "Failed to set PAM environment variable $SYSTEMD_HOME: @PAMERR@");
 
         r = pam_putenv(handle, suspend_please ? "SYSTEMD_HOME_SUSPEND=1" : "SYSTEMD_HOME_SUSPEND=0");
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to set PAM environment variable $SYSTEMD_HOME_SUSPEND: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                            "Failed to set PAM environment variable $SYSTEMD_HOME_SUSPEND: @PAMERR@");
 
         /* Let's release the D-Bus connection, after all the session might live quite a long time, and we are
          * not going to process the bus connection in that time, so let's better close before the daemon
@@ -802,15 +770,11 @@
                 pam_syslog(handle, LOG_DEBUG, "pam-systemd-homed session end");
 
         r = pam_get_user(handle, &username, NULL);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to get user name: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get user name: @PAMERR@");
 
-        if (isempty(username)) {
-                pam_syslog(handle, LOG_ERR, "User name not set.");
-                return PAM_SERVICE_ERR;
-        }
+        if (isempty(username))
+                return pam_syslog_pam_error(handle, LOG_ERR, PAM_SERVICE_ERR, "User name not set.");
 
         /* Let's explicitly drop the reference to the homed session, so that the subsequent ReleaseHome()
          * call will be able to do its thing. */
@@ -836,10 +800,9 @@
         if (r < 0) {
                 if (sd_bus_error_has_name(&error, BUS_ERROR_HOME_BUSY))
                         pam_syslog(handle, LOG_NOTICE, "Not deactivating home directory of %s, as it is still used.", username);
-                else {
-                        pam_syslog(handle, LOG_ERR, "Failed to release user home: %s", bus_error_message(&error, r));
-                        return PAM_SESSION_ERR;
-                }
+                else
+                        return pam_syslog_pam_error(handle, LOG_ERR, PAM_SESSION_ERR,
+                                                    "Failed to release user home: %s", bus_error_message(&error, r));
         }
 
         return PAM_SUCCESS;
@@ -909,9 +872,8 @@
                 usec_t n = now(CLOCK_REALTIME);
 
                 if (t > n) {
-                        char buf[FORMAT_TIMESPAN_MAX];
                         (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Too many logins, try again in %s.",
-                                          format_timespan(buf, sizeof(buf), t - n, USEC_PER_SEC));
+                                          FORMAT_TIMESPAN(t - n, USEC_PER_SEC));
 
                         return PAM_MAXTRIES;
                 }
@@ -991,35 +953,27 @@
 
         /* Start with cached credentials */
         r = pam_get_item(handle, PAM_OLDAUTHTOK, (const void**) &old_password);
-        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS)) {
-                pam_syslog(handle, LOG_ERR, "Failed to get old password: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get old password: @PAMERR@");
+
         r = pam_get_item(handle, PAM_AUTHTOK, (const void**) &new_password);
-        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS)) {
-                pam_syslog(handle, LOG_ERR, "Failed to get cached password: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get cached password: @PAMERR@");
 
         if (isempty(new_password)) {
                 /* No, it's not cached, then let's ask for the password and its verification, and cache
                  * it. */
 
                 r = pam_get_authtok_noverify(handle, &new_password, "New password: ");
-                if (r != PAM_SUCCESS) {
-                        pam_syslog(handle, LOG_ERR, "Failed to get new password: %s", pam_strerror(handle, r));
-                        return r;
-                }
-                if (isempty(new_password)) {
-                        pam_syslog(handle, LOG_DEBUG, "Password request aborted.");
-                        return PAM_AUTHTOK_ERR;
-                }
+                if (r != PAM_SUCCESS)
+                        return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get new password: @PAMERR@");
+
+                if (isempty(new_password))
+                        return pam_syslog_pam_error(handle, LOG_DEBUG, PAM_AUTHTOK_ERR, "Password request aborted.");
 
                 r = pam_get_authtok_verify(handle, &new_password, "new password: "); /* Lower case, since PAM prefixes 'Repeat' */
-                if (r != PAM_SUCCESS) {
-                        pam_syslog(handle, LOG_ERR, "Failed to get password again: %s", pam_strerror(handle, r));
-                        return r;
-                }
+                if (r != PAM_SUCCESS)
+                        return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get password again: @PAMERR@");
 
                 // FIXME: pam_pwquality will ask for the password a third time. It really shouldn't do
                 // that, and instead assume the password was already verified once when it is found to be
@@ -1036,10 +990,8 @@
 
         if (!isempty(old_password)) {
                 r = user_record_set_password(old_secret, STRV_MAKE(old_password), true);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to store old password: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store old password: %m");
         }
 
         new_secret = user_record_new();
@@ -1047,10 +999,8 @@
                 return pam_log_oom(handle);
 
         r = user_record_set_password(new_secret, STRV_MAKE(new_password), true);
-        if (r < 0) {
-                pam_syslog(handle, LOG_ERR, "Failed to store new password: %s", strerror_safe(r));
-                return PAM_SERVICE_ERR;
-        }
+        if (r < 0)
+                return pam_syslog_errno(handle, LOG_ERR, r, "Failed to store new password: %m");
 
         for (;;) {
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
@@ -1075,16 +1025,14 @@
                 r = sd_bus_call(bus, m, HOME_SLOW_BUS_CALL_TIMEOUT_USEC, &error, NULL);
                 if (r < 0) {
                         r = handle_generic_user_record_error(handle, ur->user_name, old_secret, r, &error);
-                        if (r == PAM_CONV_ERR) {
-                                pam_syslog(handle, LOG_ERR, "Failed to prompt for password/prompt.");
-                                return PAM_CONV_ERR;
-                        }
+                        if (r == PAM_CONV_ERR)
+                                return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                                            "Failed to prompt for password/prompt.");
                         if (r != PAM_SUCCESS)
                                 return r;
-                } else {
-                        pam_syslog(handle, LOG_NOTICE, "Successfully changed password for user %s.", ur->user_name);
-                        return PAM_SUCCESS;
-                }
+                } else
+                        return pam_syslog_pam_error(handle, LOG_NOTICE, PAM_SUCCESS,
+                                                    "Successfully changed password for user %s.", ur->user_name);
 
                 if (++n_attempts >= 5)
                         break;
@@ -1092,6 +1040,6 @@
                 /* Try again */
         };
 
-        pam_syslog(handle, LOG_NOTICE, "Failed to change password for user %s: %m", ur->user_name);
-        return PAM_MAXTRIES;
+        return pam_syslog_pam_error(handle, LOG_NOTICE, PAM_MAXTRIES,
+                                    "Failed to change password for user %s: @PAMERR@", ur->user_name);
 }
diff --git a/src/home/user-record-pwquality.c b/src/home/user-record-pwquality.c
index 23c3357..609e620 100644
--- a/src/home/user-record-pwquality.c
+++ b/src/home/user-record-pwquality.c
@@ -17,7 +17,7 @@
                 sd_bus_error *error) {
 
         _cleanup_(sym_pwquality_free_settingsp) pwquality_settings_t *pwq = NULL;
-        char buf[PWQ_MAX_ERROR_MESSAGE_LEN], **pp;
+        char buf[PWQ_MAX_ERROR_MESSAGE_LEN];
         void *auxerror;
         int r;
 
@@ -37,7 +37,6 @@
         /* Iterate through all new passwords */
         STRV_FOREACH(pp, secret->password) {
                 bool called = false;
-                char **old;
 
                 r = test_password_many(hr->hashed_password, *pp);
                 if (r < 0)
diff --git a/src/home/user-record-util.c b/src/home/user-record-util.c
index b5ed6b1..08f1764 100644
--- a/src/home/user-record-util.c
+++ b/src/home/user-record-util.c
@@ -24,7 +24,6 @@
                 gid_t gid) {
 
         _cleanup_free_ char *hd = NULL, *un = NULL, *ip = NULL, *rr = NULL, *user_name_and_realm = NULL;
-        char smid[SD_ID128_STRING_MAX];
         sd_id128_t mid;
         int r;
 
@@ -76,7 +75,7 @@
         if (!ip)
                 return -ENOMEM;
 
-        hd = path_join("/home/", user_name);
+        hd = path_join(get_home_root(), user_name);
         if (!hd)
                 return -ENOMEM;
 
@@ -84,9 +83,9 @@
                        JSON_BUILD_OBJECT(
                                        JSON_BUILD_PAIR("userName", JSON_BUILD_STRING(user_name)),
                                        JSON_BUILD_PAIR_CONDITION(!!rr, "realm", JSON_BUILD_STRING(realm)),
-                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("regular")),
+                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("regular")),
                                        JSON_BUILD_PAIR("binding", JSON_BUILD_OBJECT(
-                                                                       JSON_BUILD_PAIR(sd_id128_to_string(mid, smid), JSON_BUILD_OBJECT(
+                                                                       JSON_BUILD_PAIR(SD_ID128_TO_STRING(mid), JSON_BUILD_OBJECT(
                                                                                                        JSON_BUILD_PAIR("imagePath", JSON_BUILD_STRING(image_path)),
                                                                                                        JSON_BUILD_PAIR("homeDirectory", JSON_BUILD_STRING(hd)),
                                                                                                        JSON_BUILD_PAIR("storage", JSON_BUILD_STRING(user_storage_to_string(storage))),
@@ -109,7 +108,6 @@
 
 int group_record_synthesize(GroupRecord *g, UserRecord *h) {
         _cleanup_free_ char *un = NULL, *rr = NULL, *group_name_and_realm = NULL, *description = NULL;
-        char smid[SD_ID128_STRING_MAX];
         sd_id128_t mid;
         int r;
 
@@ -147,12 +145,12 @@
                                        JSON_BUILD_PAIR_CONDITION(!!rr, "realm", JSON_BUILD_STRING(rr)),
                                        JSON_BUILD_PAIR("description", JSON_BUILD_STRING(description)),
                                        JSON_BUILD_PAIR("binding", JSON_BUILD_OBJECT(
-                                                                       JSON_BUILD_PAIR(sd_id128_to_string(mid, smid), JSON_BUILD_OBJECT(
+                                                                       JSON_BUILD_PAIR(SD_ID128_TO_STRING(mid), JSON_BUILD_OBJECT(
                                                                                                        JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(user_record_gid(h))))))),
                                        JSON_BUILD_PAIR_CONDITION(h->disposition >= 0, "disposition", JSON_BUILD_STRING(user_disposition_to_string(user_record_disposition(h)))),
                                        JSON_BUILD_PAIR("status", JSON_BUILD_OBJECT(
-                                                                       JSON_BUILD_PAIR(sd_id128_to_string(mid, smid), JSON_BUILD_OBJECT(
-                                                                                                       JSON_BUILD_PAIR("service", JSON_BUILD_STRING("io.systemd.Home"))))))));
+                                                                       JSON_BUILD_PAIR(SD_ID128_TO_STRING(mid), JSON_BUILD_OBJECT(
+                                                                                                       JSON_BUILD_PAIR("service", JSON_BUILD_CONST_STRING("io.systemd.Home"))))))));
         if (r < 0)
                 return r;
 
@@ -284,7 +282,6 @@
                 gid_t gid) {
 
         _cleanup_(json_variant_unrefp) JsonVariant *new_binding_entry = NULL, *binding = NULL;
-        char smid[SD_ID128_STRING_MAX], partition_uuids[ID128_UUID_STRING_MAX], luks_uuids[ID128_UUID_STRING_MAX], fs_uuids[ID128_UUID_STRING_MAX];
         _cleanup_free_ char *ip = NULL, *hd = NULL, *ip_auto = NULL, *lc = NULL, *lcm = NULL, *fst = NULL;
         sd_id128_t mid;
         int r;
@@ -297,7 +294,6 @@
         r = sd_id128_get_machine(&mid);
         if (r < 0)
                 return r;
-        sd_id128_to_string(mid, smid);
 
         if (image_path) {
                 ip = strdup(image_path);
@@ -336,9 +332,9 @@
         r = json_build(&new_binding_entry,
                        JSON_BUILD_OBJECT(
                                        JSON_BUILD_PAIR_CONDITION(!!image_path, "imagePath", JSON_BUILD_STRING(image_path)),
-                                       JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(partition_uuid), "partitionUuid", JSON_BUILD_STRING(id128_to_uuid_string(partition_uuid, partition_uuids))),
-                                       JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(luks_uuid), "luksUuid", JSON_BUILD_STRING(id128_to_uuid_string(luks_uuid, luks_uuids))),
-                                       JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(fs_uuid), "fileSystemUuid", JSON_BUILD_STRING(id128_to_uuid_string(fs_uuid, fs_uuids))),
+                                       JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(partition_uuid), "partitionUuid", JSON_BUILD_STRING(SD_ID128_TO_UUID_STRING(partition_uuid))),
+                                       JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(luks_uuid), "luksUuid", JSON_BUILD_STRING(SD_ID128_TO_UUID_STRING(luks_uuid))),
+                                       JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(fs_uuid), "fileSystemUuid", JSON_BUILD_STRING(SD_ID128_TO_UUID_STRING(fs_uuid))),
                                        JSON_BUILD_PAIR_CONDITION(!!luks_cipher, "luksCipher", JSON_BUILD_STRING(luks_cipher)),
                                        JSON_BUILD_PAIR_CONDITION(!!luks_cipher_mode, "luksCipherMode", JSON_BUILD_STRING(luks_cipher_mode)),
                                        JSON_BUILD_PAIR_CONDITION(luks_volume_key_size != UINT64_MAX, "luksVolumeKeySize", JSON_BUILD_UNSIGNED(luks_volume_key_size)),
@@ -355,7 +351,7 @@
                 _cleanup_(json_variant_unrefp) JsonVariant *be = NULL;
 
                 /* Merge the new entry with an old one, if that exists */
-                be = json_variant_ref(json_variant_by_key(binding, smid));
+                be = json_variant_ref(json_variant_by_key(binding, SD_ID128_TO_STRING(mid)));
                 if (be) {
                         r = json_variant_merge(&be, new_binding_entry);
                         if (r < 0)
@@ -366,7 +362,7 @@
                 }
         }
 
-        r = json_variant_set_field(&binding, smid, new_binding_entry);
+        r = json_variant_set_field(&binding, SD_ID128_TO_STRING(mid), new_binding_entry);
         if (r < 0)
                 return r;
 
@@ -449,7 +445,7 @@
         }
 
         /* Otherwise it's not OK */
-        r = dir_is_empty(hd);
+        r = dir_is_empty(hd, /* ignore_hidden_or_backup= */ false);
         if (r < 0)
                 return r;
         if (r == 0)
@@ -505,7 +501,7 @@
 
                         n = getxattr(ip, "user.home-dirty", x, sizeof(x));
                         if (n < 0) {
-                                if (errno != ENODATA)
+                                if (!ERRNO_IS_XATTR_ABSENT(errno))
                                         log_debug_errno(errno, "Unable to read dirty xattr off image file, ignoring: %m");
 
                         } else if (n == 1 && x[0] == '1')
@@ -544,7 +540,7 @@
                 return -ENOTDIR;
 
         default:
-                assert_not_reached("Unexpected record type");
+                assert_not_reached();
         }
 }
 
@@ -567,7 +563,6 @@
 }
 
 int user_record_test_password(UserRecord *h, UserRecord *secret) {
-        char **i;
         int r;
 
         assert(h);
@@ -589,7 +584,6 @@
 }
 
 int user_record_test_recovery_key(UserRecord *h, UserRecord *secret) {
-        char **i;
         int r;
 
         assert(h);
@@ -633,7 +627,6 @@
 int user_record_set_disk_size(UserRecord *h, uint64_t disk_size) {
         _cleanup_(json_variant_unrefp) JsonVariant *new_per_machine = NULL, *midv = NULL, *midav = NULL, *ne = NULL;
         _cleanup_free_ JsonVariant **array = NULL;
-        char smid[SD_ID128_STRING_MAX];
         size_t idx = SIZE_MAX, n;
         JsonVariant *per_machine;
         sd_id128_t mid;
@@ -644,16 +637,11 @@
         if (!h->json)
                 return -EUNATCH;
 
-        if (disk_size < USER_DISK_SIZE_MIN || disk_size > USER_DISK_SIZE_MAX)
-                return -ERANGE;
-
         r = sd_id128_get_machine(&mid);
         if (r < 0)
                 return r;
 
-        sd_id128_to_string(mid, smid);
-
-        r = json_variant_new_string(&midv, smid);
+        r = json_variant_new_string(&midv, SD_ID128_TO_STRING(mid));
         if (r < 0)
                 return r;
 
@@ -789,7 +777,6 @@
 int user_record_make_hashed_password(UserRecord *h, char **secret, bool extend) {
         _cleanup_(json_variant_unrefp) JsonVariant *priv = NULL;
         _cleanup_strv_free_ char **np = NULL;
-        char **i;
         int r;
 
         assert(h);
@@ -1208,7 +1195,6 @@
 
 int user_record_good_authentication(UserRecord *h) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL, *z = NULL;
-        char buf[SD_ID128_STRING_MAX];
         uint64_t counter, usec;
         sd_id128_t mid;
         int r;
@@ -1235,7 +1221,7 @@
 
         v = json_variant_ref(h->json);
         w = json_variant_ref(json_variant_by_key(v, "status"));
-        z = json_variant_ref(json_variant_by_key(w, sd_id128_to_string(mid, buf)));
+        z = json_variant_ref(json_variant_by_key(w, SD_ID128_TO_STRING(mid)));
 
         r = json_variant_set_field_unsigned(&z, "goodAuthenticationCounter", counter);
         if (r < 0)
@@ -1245,7 +1231,7 @@
         if (r < 0)
                 return r;
 
-        r = json_variant_set_field(&w, buf, z);
+        r = json_variant_set_field(&w, SD_ID128_TO_STRING(mid), z);
         if (r < 0)
                 return r;
 
@@ -1265,7 +1251,6 @@
 
 int user_record_bad_authentication(UserRecord *h) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL, *z = NULL;
-        char buf[SD_ID128_STRING_MAX];
         uint64_t counter, usec;
         sd_id128_t mid;
         int r;
@@ -1292,7 +1277,7 @@
 
         v = json_variant_ref(h->json);
         w = json_variant_ref(json_variant_by_key(v, "status"));
-        z = json_variant_ref(json_variant_by_key(w, sd_id128_to_string(mid, buf)));
+        z = json_variant_ref(json_variant_by_key(w, SD_ID128_TO_STRING(mid)));
 
         r = json_variant_set_field_unsigned(&z, "badAuthenticationCounter", counter);
         if (r < 0)
@@ -1302,7 +1287,7 @@
         if (r < 0)
                 return r;
 
-        r = json_variant_set_field(&w, buf, z);
+        r = json_variant_set_field(&w, SD_ID128_TO_STRING(mid), z);
         if (r < 0)
                 return r;
 
@@ -1323,7 +1308,6 @@
 int user_record_ratelimit(UserRecord *h) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL, *z = NULL;
         usec_t usec, new_ratelimit_begin_usec, new_ratelimit_count;
-        char buf[SD_ID128_STRING_MAX];
         sd_id128_t mid;
         int r;
 
@@ -1355,7 +1339,7 @@
 
         v = json_variant_ref(h->json);
         w = json_variant_ref(json_variant_by_key(v, "status"));
-        z = json_variant_ref(json_variant_by_key(w, sd_id128_to_string(mid, buf)));
+        z = json_variant_ref(json_variant_by_key(w, SD_ID128_TO_STRING(mid)));
 
         r = json_variant_set_field_unsigned(&z, "rateLimitBeginUSec", new_ratelimit_begin_usec);
         if (r < 0)
@@ -1365,7 +1349,7 @@
         if (r < 0)
                 return r;
 
-        r = json_variant_set_field(&w, buf, z);
+        r = json_variant_set_field(&w, SD_ID128_TO_STRING(mid), z);
         if (r < 0)
                 return r;
 
@@ -1400,3 +1384,129 @@
 
         return 0;
 }
+
+bool user_record_shall_rebalance(UserRecord *h) {
+        assert(h);
+
+        if (user_record_rebalance_weight(h) == REBALANCE_WEIGHT_OFF)
+                return false;
+
+        if (user_record_storage(h) != USER_LUKS)
+                return false;
+
+        if (!path_startswith(user_record_image_path(h), get_home_root())) /* This is the only pool we rebalance in */
+                return false;
+
+        return true;
+}
+
+int user_record_set_rebalance_weight(UserRecord *h, uint64_t weight) {
+        _cleanup_(json_variant_unrefp) JsonVariant *new_per_machine_array = NULL, *machine_id_variant = NULL,
+                *machine_id_array = NULL, *per_machine_entry = NULL;
+        _cleanup_free_ JsonVariant **array = NULL;
+        size_t idx = SIZE_MAX, n;
+        JsonVariant *per_machine;
+        sd_id128_t mid;
+        int r;
+
+        assert(h);
+
+        if (!h->json)
+                return -EUNATCH;
+
+        r = sd_id128_get_machine(&mid);
+        if (r < 0)
+                return r;
+
+        r = json_variant_new_id128(&machine_id_variant, mid);
+        if (r < 0)
+                return r;
+
+        r = json_variant_new_array(&machine_id_array, (JsonVariant*[]) { machine_id_variant }, 1);
+        if (r < 0)
+                return r;
+
+        per_machine = json_variant_by_key(h->json, "perMachine");
+        if (per_machine) {
+                if (!json_variant_is_array(per_machine))
+                        return -EINVAL;
+
+                n = json_variant_elements(per_machine);
+
+                array = new(JsonVariant*, n + 1);
+                if (!array)
+                        return -ENOMEM;
+
+                for (size_t i = 0; i < n; i++) {
+                        JsonVariant *m;
+
+                        array[i] = json_variant_by_index(per_machine, i);
+
+                        if (!json_variant_is_object(array[i]))
+                                return -EINVAL;
+
+                        m = json_variant_by_key(array[i], "matchMachineId");
+                        if (!m) {
+                                /* No machineId field? Let's ignore this, but invalidate what we found so far */
+                                idx = SIZE_MAX;
+                                continue;
+                        }
+
+                        if (json_variant_equal(m, machine_id_variant) ||
+                            json_variant_equal(m, machine_id_array)) {
+                                /* Matches exactly what we are looking for. Let's use this */
+                                idx = i;
+                                continue;
+                        }
+
+                        r = per_machine_id_match(m, JSON_PERMISSIVE);
+                        if (r < 0)
+                                return r;
+                        if (r > 0)
+                                /* Also matches what we are looking for, but with a broader match. In this
+                                 * case let's ignore this entry, and add a new specific one to the end. */
+                                idx = SIZE_MAX;
+                }
+
+                if (idx == SIZE_MAX)
+                        idx = n++; /* Nothing suitable found, place new entry at end */
+                else
+                        per_machine_entry = json_variant_ref(array[idx]);
+
+        } else {
+                array = new(JsonVariant*, 1);
+                if (!array)
+                        return -ENOMEM;
+
+                idx = 0;
+                n = 1;
+        }
+
+        if (!per_machine_entry) {
+                r = json_variant_set_field(&per_machine_entry, "matchMachineId", machine_id_array);
+                if (r < 0)
+                        return r;
+        }
+
+        if (weight == REBALANCE_WEIGHT_UNSET)
+                r = json_variant_set_field(&per_machine_entry, "rebalanceWeight", NULL); /* set explicitly to NULL (so that the perMachine setting we are setting here can override the global setting) */
+        else
+                r = json_variant_set_field_unsigned(&per_machine_entry, "rebalanceWeight", weight);
+        if (r < 0)
+                return r;
+
+        assert(idx < n);
+        array[idx] = per_machine_entry;
+
+        r = json_variant_new_array(&new_per_machine_array, array, n);
+        if (r < 0)
+                return r;
+
+        r = json_variant_set_field(&h->json, "perMachine", new_per_machine_array);
+        if (r < 0)
+                return r;
+
+        h->rebalance_weight = weight;
+        h->mask |= USER_RECORD_PER_MACHINE;
+        return 0;
+}
diff --git a/src/home/user-record-util.h b/src/home/user-record-util.h
index 74f4a0e..508e2bd 100644
--- a/src/home/user-record-util.h
+++ b/src/home/user-record-util.h
@@ -60,3 +60,6 @@
 int user_record_ratelimit(UserRecord *h);
 
 int user_record_is_supported(UserRecord *hr, sd_bus_error *error);
+
+bool user_record_shall_rebalance(UserRecord *h);
+int user_record_set_rebalance_weight(UserRecord *h, uint64_t weight);
diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c
index 2eca5fe..4e30053 100644
--- a/src/hostname/hostnamectl.c
+++ b/src/hostname/hostnamectl.c
@@ -3,6 +3,7 @@
 #include <getopt.h>
 #include <locale.h>
 #include <stdbool.h>
+#include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -11,6 +12,7 @@
 
 #include "alloc-util.h"
 #include "architecture.h"
+#include "build.h"
 #include "bus-common-errors.h"
 #include "bus-error.h"
 #include "bus-map-properties.h"
@@ -23,7 +25,6 @@
 #include "pretty-print.h"
 #include "spawn-polkit-agent.h"
 #include "terminal-util.h"
-#include "util.h"
 #include "verbs.h"
 
 static bool arg_ask_password = true;
@@ -46,13 +47,53 @@
         const char *kernel_release;
         const char *os_pretty_name;
         const char *os_cpe_name;
+        usec_t os_support_end;
         const char *virtualization;
         const char *architecture;
         const char *home_url;
         const char *hardware_vendor;
         const char *hardware_model;
+        const char *firmware_version;
+        usec_t firmware_date;
 } StatusInfo;
 
+static const char* chassis_string_to_glyph(const char *chassis) {
+        if (streq_ptr(chassis, "laptop"))
+                return u8"💻"; /* Personal Computer */
+        if (streq_ptr(chassis, "desktop"))
+                return u8"🖥️"; /* Desktop Computer */
+        if (streq_ptr(chassis, "server"))
+                return u8"🖳"; /* Old Personal Computer */
+        if (streq_ptr(chassis, "tablet"))
+                return u8"具"; /* Ideograph tool, implement; draw up, write, looks vaguely tabletty */
+        if (streq_ptr(chassis, "watch"))
+                return u8"⌚"; /* Watch */
+        if (streq_ptr(chassis, "handset"))
+                return u8"🕻"; /* Left Hand Telephone Receiver */
+        if (streq_ptr(chassis, "vm"))
+                return u8"🖴"; /* Hard disk */
+        if (streq_ptr(chassis, "container"))
+                return u8"☐"; /* Ballot Box  */
+        return NULL;
+}
+
+static const char *os_support_end_color(usec_t n, usec_t eol) {
+        usec_t left;
+
+        /* If the end of support is over, color output in red. If only a month is left, color output in
+         * yellow. If more than a year is left, color green. In between just show in regular color. */
+
+        if (n >= eol)
+                return ANSI_HIGHLIGHT_RED;
+        left = eol - n;
+        if (left < USEC_PER_MONTH)
+                return ANSI_HIGHLIGHT_YELLOW;
+        if (left > USEC_PER_YEAR)
+                return ANSI_HIGHLIGHT_GREEN;
+
+        return NULL;
+}
+
 static int print_status_info(StatusInfo *i) {
         _cleanup_(table_unrefp) Table *table = NULL;
         sd_id128_t mid = {}, bid = {};
@@ -61,22 +102,17 @@
 
         assert(i);
 
-        table = table_new("key", "value");
+        table = table_new_vertical();
         if (!table)
                 return log_oom();
 
         assert_se(cell = table_get_cell(table, 0, 0));
         (void) table_set_ellipsize_percent(table, cell, 100);
-        (void) table_set_align_percent(table, cell, 100);
 
-        table_set_header(table, false);
-
-        r = table_set_empty_string(table, "n/a");
-        if (r < 0)
-                return log_oom();
+        table_set_ersatz_string(table, TABLE_ERSATZ_UNSET);
 
         r = table_add_many(table,
-                           TABLE_STRING, "Static hostname:",
+                           TABLE_FIELD, "Static hostname",
                            TABLE_STRING, i->static_hostname);
         if (r < 0)
                 return table_log_add_error(r);
@@ -84,7 +120,7 @@
         if (!isempty(i->pretty_hostname) &&
             !streq_ptr(i->pretty_hostname, i->static_hostname)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Pretty hostname:",
+                                   TABLE_FIELD, "Pretty hostname",
                                    TABLE_STRING, i->pretty_hostname);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -93,7 +129,7 @@
         if (!isempty(i->hostname) &&
             !streq_ptr(i->hostname, i->static_hostname)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Transient hostname:",
+                                   TABLE_FIELD, "Transient hostname",
                                    TABLE_STRING, i->hostname);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -101,23 +137,29 @@
 
         if (!isempty(i->icon_name)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Icon name:",
+                                   TABLE_FIELD, "Icon name",
                                    TABLE_STRING, i->icon_name);
                 if (r < 0)
                         return table_log_add_error(r);
         }
 
         if (!isempty(i->chassis)) {
+                /* Possibly add a pretty symbol. Let's not bother with non-unicode fallbacks, because this is
+                 * just a prettification and we can't really express this with ASCII anyway. */
+                const char *v = chassis_string_to_glyph(i->chassis);
+                if (v)
+                        v = strjoina(i->chassis, " ", v);
+
                 r = table_add_many(table,
-                                   TABLE_STRING, "Chassis:",
-                                   TABLE_STRING, i->chassis);
+                                   TABLE_FIELD, "Chassis",
+                                   TABLE_STRING, v ?: i->chassis);
                 if (r < 0)
                         return table_log_add_error(r);
         }
 
         if (!isempty(i->deployment)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Deployment:",
+                                   TABLE_FIELD, "Deployment",
                                    TABLE_STRING, i->deployment);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -125,7 +167,7 @@
 
         if (!isempty(i->location)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Location:",
+                                   TABLE_FIELD, "Location",
                                    TABLE_STRING, i->location);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -134,7 +176,7 @@
         r = sd_id128_get_machine(&mid);
         if (r >= 0) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Machine ID:",
+                                   TABLE_FIELD, "Machine ID",
                                    TABLE_ID128, mid);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -143,7 +185,7 @@
         r = sd_id128_get_boot(&bid);
         if (r >= 0) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Boot ID:",
+                                   TABLE_FIELD, "Boot ID",
                                    TABLE_ID128, bid);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -151,7 +193,7 @@
 
         if (!isempty(i->virtualization)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Virtualization:",
+                                   TABLE_FIELD, "Virtualization",
                                    TABLE_STRING, i->virtualization);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -159,7 +201,7 @@
 
         if (!isempty(i->os_pretty_name)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Operating System:",
+                                   TABLE_FIELD, "Operating System",
                                    TABLE_STRING, i->os_pretty_name,
                                    TABLE_SET_URL, i->home_url);
                 if (r < 0)
@@ -168,18 +210,31 @@
 
         if (!isempty(i->os_cpe_name)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "CPE OS Name:",
+                                   TABLE_FIELD, "CPE OS Name",
                                    TABLE_STRING, i->os_cpe_name);
                 if (r < 0)
                         return table_log_add_error(r);
         }
 
+        if (i->os_support_end != USEC_INFINITY) {
+                usec_t n = now(CLOCK_REALTIME);
+
+                r = table_add_many(table,
+                                   TABLE_FIELD, "OS Support End",
+                                   TABLE_TIMESTAMP_DATE, i->os_support_end,
+                                   TABLE_FIELD, n < i->os_support_end ? "OS Support Remaining" : "OS Support Expired",
+                                   TABLE_TIMESPAN_DAY, n < i->os_support_end ? i->os_support_end - n : n - i->os_support_end,
+                                   TABLE_SET_COLOR, os_support_end_color(n, i->os_support_end));
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
         if (!isempty(i->kernel_name) && !isempty(i->kernel_release)) {
                 const char *v;
 
                 v = strjoina(i->kernel_name, " ", i->kernel_release);
                 r = table_add_many(table,
-                                   TABLE_STRING, "Kernel:",
+                                   TABLE_FIELD, "Kernel",
                                    TABLE_STRING, v);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -187,7 +242,7 @@
 
         if (!isempty(i->architecture)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Architecture:",
+                                   TABLE_FIELD, "Architecture",
                                    TABLE_STRING, i->architecture);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -195,7 +250,7 @@
 
         if (!isempty(i->hardware_vendor)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Hardware Vendor:",
+                                   TABLE_FIELD, "Hardware Vendor",
                                    TABLE_STRING, i->hardware_vendor);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -203,12 +258,28 @@
 
         if (!isempty(i->hardware_model)) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Hardware Model:",
+                                   TABLE_FIELD, "Hardware Model",
                                    TABLE_STRING, i->hardware_model);
                 if (r < 0)
                         return table_log_add_error(r);
         }
 
+        if (!isempty(i->firmware_version)) {
+                r = table_add_many(table,
+                                   TABLE_FIELD, "Firmware Version",
+                                   TABLE_STRING, i->firmware_version);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        if (timestamp_is_set(i->firmware_date)) {
+                r = table_add_many(table,
+                                   TABLE_FIELD, "Firmware Date",
+                                   TABLE_TIMESTAMP_DATE, i->firmware_date);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
         r = table_print(table, NULL);
         if (r < 0)
                 return table_log_print_error(r);
@@ -259,20 +330,23 @@
         StatusInfo info = {};
 
         static const struct bus_properties_map hostname_map[]  = {
-                { "Hostname",                  "s", NULL, offsetof(StatusInfo, hostname)        },
-                { "StaticHostname",            "s", NULL, offsetof(StatusInfo, static_hostname) },
-                { "PrettyHostname",            "s", NULL, offsetof(StatusInfo, pretty_hostname) },
-                { "IconName",                  "s", NULL, offsetof(StatusInfo, icon_name)       },
-                { "Chassis",                   "s", NULL, offsetof(StatusInfo, chassis)         },
-                { "Deployment",                "s", NULL, offsetof(StatusInfo, deployment)      },
-                { "Location",                  "s", NULL, offsetof(StatusInfo, location)        },
-                { "KernelName",                "s", NULL, offsetof(StatusInfo, kernel_name)     },
-                { "KernelRelease",             "s", NULL, offsetof(StatusInfo, kernel_release)  },
-                { "OperatingSystemPrettyName", "s", NULL, offsetof(StatusInfo, os_pretty_name)  },
-                { "OperatingSystemCPEName",    "s", NULL, offsetof(StatusInfo, os_cpe_name)     },
-                { "HomeURL",                   "s", NULL, offsetof(StatusInfo, home_url)        },
-                { "HardwareVendor",            "s", NULL, offsetof(StatusInfo, hardware_vendor) },
-                { "HardwareModel",             "s", NULL, offsetof(StatusInfo, hardware_model)  },
+                { "Hostname",                  "s", NULL, offsetof(StatusInfo, hostname)         },
+                { "StaticHostname",            "s", NULL, offsetof(StatusInfo, static_hostname)  },
+                { "PrettyHostname",            "s", NULL, offsetof(StatusInfo, pretty_hostname)  },
+                { "IconName",                  "s", NULL, offsetof(StatusInfo, icon_name)        },
+                { "Chassis",                   "s", NULL, offsetof(StatusInfo, chassis)          },
+                { "Deployment",                "s", NULL, offsetof(StatusInfo, deployment)       },
+                { "Location",                  "s", NULL, offsetof(StatusInfo, location)         },
+                { "KernelName",                "s", NULL, offsetof(StatusInfo, kernel_name)      },
+                { "KernelRelease",             "s", NULL, offsetof(StatusInfo, kernel_release)   },
+                { "OperatingSystemPrettyName", "s", NULL, offsetof(StatusInfo, os_pretty_name)   },
+                { "OperatingSystemCPEName",    "s", NULL, offsetof(StatusInfo, os_cpe_name)      },
+                { "OperatingSystemSupportEnd", "t", NULL, offsetof(StatusInfo, os_support_end)   },
+                { "HomeURL",                   "s", NULL, offsetof(StatusInfo, home_url)         },
+                { "HardwareVendor",            "s", NULL, offsetof(StatusInfo, hardware_vendor)  },
+                { "HardwareModel",             "s", NULL, offsetof(StatusInfo, hardware_model)   },
+                { "FirmwareVersion",           "s", NULL, offsetof(StatusInfo, firmware_version) },
+                { "FirmwareDate",              "t", NULL, offsetof(StatusInfo, firmware_date)    },
                 {}
         };
 
@@ -620,7 +694,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -660,7 +734,7 @@
 
         r = bus_connect_transport(arg_transport, arg_host, false, &bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         return hostnamectl_main(bus, argc, argv);
 }
diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
index 36702f2..36ab014 100644
--- a/src/hostname/hostnamed.c
+++ b/src/hostname/hostnamed.c
@@ -11,7 +11,7 @@
 #include "bus-get-properties.h"
 #include "bus-log-control-api.h"
 #include "bus-polkit.h"
-#include "def.h"
+#include "constants.h"
 #include "env-file-label.h"
 #include "env-file.h"
 #include "env-util.h"
@@ -36,14 +36,13 @@
 #include "string-table.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 #include "virt.h"
 
 #define VALID_DEPLOYMENT_CHARS (DIGITS LETTERS "-.:")
 
 /* Properties we cache are indexed by an enum, to make invalidation easy and systematic (as we can iterate
  * through them all, and they are uniformly strings). */
-enum {
+typedef enum {
         /* Read from /etc/hostname */
         PROP_STATIC_HOSTNAME,
 
@@ -53,14 +52,17 @@
         PROP_CHASSIS,
         PROP_DEPLOYMENT,
         PROP_LOCATION,
+        PROP_HARDWARE_VENDOR,
+        PROP_HARDWARE_MODEL,
 
         /* Read from /etc/os-release (or /usr/lib/os-release) */
         PROP_OS_PRETTY_NAME,
         PROP_OS_CPE_NAME,
         PROP_OS_HOME_URL,
+        PROP_OS_SUPPORT_END,
         _PROP_MAX,
         _PROP_INVALID = -EINVAL,
-};
+} HostProperty;
 
 typedef struct Context {
         char *data[_PROP_MAX];
@@ -126,14 +128,18 @@
                       (UINT64_C(1) << PROP_ICON_NAME) |
                       (UINT64_C(1) << PROP_CHASSIS) |
                       (UINT64_C(1) << PROP_DEPLOYMENT) |
-                      (UINT64_C(1) << PROP_LOCATION));
+                      (UINT64_C(1) << PROP_LOCATION) |
+                      (UINT64_C(1) << PROP_HARDWARE_VENDOR) |
+                      (UINT64_C(1) << PROP_HARDWARE_MODEL));
 
         r = parse_env_file(NULL, "/etc/machine-info",
                            "PRETTY_HOSTNAME", &c->data[PROP_PRETTY_HOSTNAME],
                            "ICON_NAME", &c->data[PROP_ICON_NAME],
                            "CHASSIS", &c->data[PROP_CHASSIS],
                            "DEPLOYMENT", &c->data[PROP_DEPLOYMENT],
-                           "LOCATION", &c->data[PROP_LOCATION]);
+                           "LOCATION", &c->data[PROP_LOCATION],
+                           "HARDWARE_VENDOR", &c->data[PROP_HARDWARE_VENDOR],
+                           "HARDWARE_MODEL", &c->data[PROP_HARDWARE_MODEL]);
         if (r < 0 && r != -ENOENT)
                 log_warning_errno(r, "Failed to read /etc/machine-info, ignoring: %m");
 
@@ -141,6 +147,7 @@
 }
 
 static void context_read_os_release(Context *c) {
+        _cleanup_free_ char *os_name = NULL, *os_pretty_name = NULL;
         struct stat current_stat = {};
         int r;
 
@@ -154,22 +161,167 @@
         context_reset(c,
                       (UINT64_C(1) << PROP_OS_PRETTY_NAME) |
                       (UINT64_C(1) << PROP_OS_CPE_NAME) |
-                      (UINT64_C(1) << PROP_OS_HOME_URL));
+                      (UINT64_C(1) << PROP_OS_HOME_URL) |
+                      (UINT64_C(1) << PROP_OS_SUPPORT_END));
 
         r = parse_os_release(NULL,
-                             "PRETTY_NAME", &c->data[PROP_OS_PRETTY_NAME],
-                             "CPE_NAME", &c->data[PROP_OS_CPE_NAME],
-                             "HOME_URL", &c->data[PROP_OS_HOME_URL]);
+                             "PRETTY_NAME", &os_pretty_name,
+                             "NAME",        &os_name,
+                             "CPE_NAME",    &c->data[PROP_OS_CPE_NAME],
+                             "HOME_URL",    &c->data[PROP_OS_HOME_URL],
+                             "SUPPORT_END", &c->data[PROP_OS_SUPPORT_END]);
         if (r < 0 && r != -ENOENT)
                 log_warning_errno(r, "Failed to read os-release file, ignoring: %m");
 
+        if (free_and_strdup(&c->data[PROP_OS_PRETTY_NAME], os_release_pretty_name(os_pretty_name, os_name)) < 0)
+                log_oom();
+
         c->etc_os_release_stat = current_stat;
 }
 
-static bool valid_chassis(const char *chassis) {
+static int get_dmi_data(const char *database_key, const char *regular_key, char **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *device = NULL;
+        _cleanup_free_ char *b = NULL;
+        const char *s = NULL;
+        int r;
+
+        r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id");
+        if (r < 0)
+                return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m");
+
+        if (database_key)
+                (void) sd_device_get_property_value(device, database_key, &s);
+        if (!s && regular_key)
+                (void) sd_device_get_property_value(device, regular_key, &s);
+
+        if (!ret)
+                return !!s;
+
+        if (s) {
+                b = strdup(s);
+                if (!b)
+                        return -ENOMEM;
+        }
+
+        *ret = TAKE_PTR(b);
+        return !!s;
+}
+
+static int get_hardware_vendor(char **ret) {
+        return get_dmi_data("ID_VENDOR_FROM_DATABASE", "ID_VENDOR", ret);
+}
+
+static int get_hardware_model(char **ret) {
+        return get_dmi_data("ID_MODEL_FROM_DATABASE", "ID_MODEL", ret);
+}
+
+static int get_hardware_firmware_data(const char *sysattr, char **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *device = NULL;
+        _cleanup_free_ char *b = NULL;
+        const char *s = NULL;
+        int r;
+
+        assert(sysattr);
+
+        r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id");
+        if (r < 0)
+                return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m");
+
+        (void) sd_device_get_sysattr_value(device, sysattr, &s);
+        if (!isempty(s)) {
+                b = strdup(s);
+                if (!b)
+                        return -ENOMEM;
+        }
+
+        if (ret)
+                *ret = TAKE_PTR(b);
+
+        return !isempty(s);
+}
+
+static int get_hardware_serial(char **ret) {
+         int r;
+
+         r = get_hardware_firmware_data("product_serial", ret);
+         if (r <= 0)
+                return get_hardware_firmware_data("board_serial", ret);
+
+         return r;
+}
+
+static int get_firmware_version(char **ret) {
+         return get_hardware_firmware_data("bios_version", ret);
+}
+
+static int get_firmware_vendor(char **ret) {
+         return get_hardware_firmware_data("bios_vendor", ret);
+}
+
+static int get_firmware_date(usec_t *ret) {
+         _cleanup_free_ char *bios_date = NULL, *month = NULL, *day = NULL, *year = NULL;
+         int r;
+
+         assert(ret);
+
+         r = get_hardware_firmware_data("bios_date", &bios_date);
+         if (r < 0)
+                return r;
+         if (r == 0) {
+                *ret = USEC_INFINITY;
+                return 0;
+         }
+
+         const char *p = bios_date;
+         r = extract_many_words(&p, "/", EXTRACT_DONT_COALESCE_SEPARATORS, &month, &day, &year, NULL);
+         if (r < 0)
+                return r;
+         if (r != 3) /* less than three args read? */
+                return -EINVAL;
+         if (!isempty(p)) /* more left in the string? */
+                return -EINVAL;
+
+         unsigned m, d, y;
+         r = safe_atou(month, &m);
+         if (r < 0)
+                return r;
+         if (m < 1 || m > 12)
+                return -EINVAL;
+         m -= 1;
+
+         r = safe_atou(day, &d);
+         if (r < 0)
+                return r;
+         if (d < 1 || d > 31)
+                return -EINVAL;
+
+         r = safe_atou(year, &y);
+         if (r < 0)
+                return r;
+         if (y < 1970 || y > (unsigned) INT_MAX)
+                return -EINVAL;
+         y -= 1900;
+
+         struct tm tm = {
+                .tm_mday = d,
+                .tm_mon = m,
+                .tm_year = y,
+         };
+         time_t v = timegm(&tm);
+         if (v == (time_t) -1)
+                return -errno;
+         if (tm.tm_mday != (int) d || tm.tm_mon != (int) m || tm.tm_year != (int) y)
+                return -EINVAL; /* date was not normalized? (e.g. "30th of feb") */
+
+         *ret = (usec_t) v * USEC_PER_SEC;
+
+         return 0;
+}
+
+static const char* valid_chassis(const char *chassis) {
         assert(chassis);
 
-        return nulstr_contains(
+        return nulstr_get(
                         "vm\0"
                         "container\0"
                         "desktop\0"
@@ -190,9 +342,11 @@
 }
 
 static const char* fallback_chassis(void) {
-        char *type;
+        const char *chassis;
+        _cleanup_free_ char *type = NULL;
+        Virtualization v;
         unsigned t;
-        int v, r;
+        int r;
 
         v = detect_virtualization();
         if (v < 0)
@@ -209,27 +363,28 @@
         }
 
         r = safe_atou(type, &t);
-        free(type);
         if (r < 0) {
-                log_debug_errno(r, "Failed to parse DMI chassis type, ignoring: %m");
+                log_debug_errno(r, "Failed to parse DMI chassis type \"%s\", ignoring: %m", type);
                 goto try_acpi;
         }
 
         /* We only list the really obvious cases here. The DMI data is unreliable enough, so let's not do any
-           additional guesswork on top of that.
-
-           See the SMBIOS Specification 3.0 section 7.4.1 for details about the values listed here:
-
-           https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.0.0.pdf
+         * additional guesswork on top of that.
+         *
+         * See the SMBIOS Specification 3.5.0 section 7.4.1 for details about the values listed here:
+         *
+         * https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.5.0.pdf
          */
 
         switch (t) {
 
-        case 0x3: /* Desktop */
-        case 0x4: /* Low Profile Desktop */
-        case 0x6: /* Mini Tower */
-        case 0x7: /* Tower */
-        case 0xD: /* All in one (i.e. PC built into monitor) */
+        case 0x03: /* Desktop */
+        case 0x04: /* Low Profile Desktop */
+        case 0x06: /* Mini Tower */
+        case 0x07: /* Tower */
+        case 0x0D: /* All in one (i.e. PC built into monitor) */
+        case 0x23: /* Mini PC */
+        case 0x24: /* Stick PC */
                 return "desktop";
 
         case 0x8: /* Portable */
@@ -253,22 +408,26 @@
         case 0x20: /* Detachable */
                 return "convertible";
 
+        case 0x21: /* IoT Gateway */
+        case 0x22: /* Embedded PC */
+                return "embedded";
+
         default:
                 log_debug("Unhandled DMI chassis type 0x%02x, ignoring.", t);
         }
 
 try_acpi:
+        type = mfree(type);
         r = read_one_line_file("/sys/firmware/acpi/pm_profile", &type);
         if (r < 0) {
                 log_debug_errno(r, "Failed read ACPI PM profile, ignoring: %m");
-                return NULL;
+                goto try_devicetree;
         }
 
         r = safe_atou(type, &t);
-        free(type);
         if (r < 0) {
-                log_debug_errno(r, "Failed parse ACPI PM profile, ignoring: %m");
-                return NULL;
+                log_debug_errno(r, "Failed parse ACPI PM profile \"%s\", ignoring: %m", type);
+                goto try_devicetree;
         }
 
         /* We only list the really obvious cases here as the ACPI data is not really super reliable.
@@ -278,7 +437,7 @@
          * http://www.acpi.info/DOWNLOADS/ACPIspec50.pdf
          */
 
-        switch(t) {
+        switch (t) {
 
         case 1: /* Desktop */
         case 3: /* Workstation */
@@ -300,18 +459,49 @@
                 log_debug("Unhandled ACPI PM profile 0x%02x, ignoring.", t);
         }
 
-        return NULL;
+try_devicetree:
+        type = mfree(type);
+        r = read_one_line_file("/proc/device-tree/chassis-type", &type);
+        if (r < 0) {
+                log_debug_errno(r, "Failed to read device-tree chassis type, ignoring: %m");
+                return NULL;
+        }
+
+        /* Note that the Devicetree specification uses the very same vocabulary
+         * of chassis types as we do, hence we do not need to translate these types:
+         *
+         * https://github.com/devicetree-org/devicetree-specification/blob/master/source/chapter3-devicenodes.rst */
+        chassis = valid_chassis(type);
+        if (!chassis)
+                log_debug("Invalid device-tree chassis type \"%s\", ignoring.", type);
+        return chassis;
 }
 
-static char* context_fallback_icon_name(Context *c) {
-        const char *chassis;
+static char* context_get_chassis(Context *c) {
+        const char *fallback;
+        char *dmi;
 
         assert(c);
 
         if (!isempty(c->data[PROP_CHASSIS]))
-                return strjoin("computer-", c->data[PROP_CHASSIS]);
+                return strdup(c->data[PROP_CHASSIS]);
 
-        chassis = fallback_chassis();
+        if (get_dmi_data("ID_CHASSIS", NULL, &dmi) > 0)
+                return dmi;
+
+        fallback = fallback_chassis();
+        if (fallback)
+                return strdup(fallback);
+
+        return NULL;
+}
+
+static char* context_fallback_icon_name(Context *c) {
+        _cleanup_free_ char *chassis = NULL;
+
+        assert(c);
+
+        chassis = context_get_chassis(c);
         if (chassis)
                 return strjoin("computer-", chassis);
 
@@ -449,39 +639,25 @@
         return 0;
 }
 
-static int get_dmi_data(const char *database_key, const char *regular_key, char **ret) {
-        _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-        _cleanup_free_ char *b = NULL;
-        const char *s = NULL;
-        int r;
+static int property_get_hardware_property(
+                sd_bus_message *reply,
+                Context *c,
+                HostProperty prop,
+                int (*getter)(char **)) {
 
-        r = sd_device_new_from_syspath(&device, "/sys/class/dmi/id");
-        if (r < 0)
-                return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m");
+        _cleanup_free_ char *from_dmi = NULL;
 
-        if (database_key)
-                (void) sd_device_get_property_value(device, database_key, &s);
-        if (!s && regular_key)
-                (void) sd_device_get_property_value(device, regular_key, &s);
+        assert(reply);
+        assert(c);
+        assert(IN_SET(prop, PROP_HARDWARE_VENDOR, PROP_HARDWARE_MODEL));
+        assert(getter);
 
-        if (s) {
-                b = strdup(s);
-                if (!b)
-                        return -ENOMEM;
-        }
+        context_read_machine_info(c);
 
-        if (ret)
-                *ret = TAKE_PTR(b);
+        if (isempty(c->data[prop]))
+                (void) getter(&from_dmi);
 
-        return !!s;
-}
-
-static int get_hardware_vendor(char **ret) {
-        return get_dmi_data("ID_VENDOR_FROM_DATABASE", "ID_VENDOR", ret);
-}
-
-static int get_hardware_model(char **ret) {
-        return get_dmi_data("ID_MODEL_FROM_DATABASE", "ID_MODEL", ret);
+        return sd_bus_message_append(reply, "s", from_dmi ?: c->data[prop]);
 }
 
 static int property_get_hardware_vendor(
@@ -493,10 +669,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_free_ char *vendor = NULL;
-
-        (void) get_hardware_vendor(&vendor);
-        return sd_bus_message_append(reply, "s", vendor);
+        return property_get_hardware_property(reply, userdata, PROP_HARDWARE_VENDOR, get_hardware_vendor);
 }
 
 static int property_get_hardware_model(
@@ -508,12 +681,56 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_free_ char *model = NULL;
-
-        (void) get_hardware_model(&model);
-        return sd_bus_message_append(reply, "s", model);
+        return property_get_hardware_property(reply, userdata, PROP_HARDWARE_MODEL, get_hardware_model);
 }
 
+static int property_get_firmware_version(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        _cleanup_free_ char *firmware_version = NULL;
+
+        (void) get_firmware_version(&firmware_version);
+
+        return sd_bus_message_append(reply, "s", firmware_version);
+}
+
+static int property_get_firmware_vendor(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        _cleanup_free_ char *firmware_vendor = NULL;
+
+        (void) get_firmware_vendor(&firmware_vendor);
+
+        return sd_bus_message_append(reply, "s", firmware_vendor);
+}
+
+static int property_get_firmware_date(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        usec_t firmware_date = USEC_INFINITY;
+
+        (void) get_firmware_date(&firmware_date);
+
+        return sd_bus_message_append(reply, "t", firmware_date);
+}
 static int property_get_hostname(
                 sd_bus *bus,
                 const char *path,
@@ -548,8 +765,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Context *c = userdata;
-        assert(c);
+        Context *c = ASSERT_PTR(userdata);
 
         context_read_etc_hostname(c);
 
@@ -575,8 +791,7 @@
 }
 
 static void context_determine_hostname_source(Context *c) {
-        char hostname[HOST_NAME_MAX + 1] = {};
-        _cleanup_free_ char *fallback = NULL;
+        _cleanup_free_ char *hostname = NULL;
         int r;
 
         assert(c);
@@ -584,15 +799,17 @@
         if (c->hostname_source >= 0)
                 return;
 
-        (void) get_hostname_filtered(hostname);
+        (void) gethostname_full(GET_HOSTNAME_ALLOW_LOCALHOST, &hostname);
 
         if (streq_ptr(hostname, c->data[PROP_STATIC_HOSTNAME]))
                 c->hostname_source = HOSTNAME_STATIC;
         else {
+                _cleanup_free_ char *fallback = NULL;
+
                 /* If the hostname was not set by us, try to figure out where it came from. If we set it to
                  * the default hostname, the file will tell us. We compare the string because it is possible
-                 * that the hostname was set by an older version that had a different fallback, in the
-                 * initramfs or before we reexecuted. */
+                 * that the hostname was set by an older version that had a different fallback, in the initrd
+                 * or before we reexecuted. */
 
                 r = read_one_line_file("/run/systemd/default-hostname", &fallback);
                 if (r < 0 && r != -ENOENT)
@@ -614,8 +831,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Context *c = userdata;
-        assert(c);
+        Context *c = ASSERT_PTR(userdata);
 
         context_read_etc_hostname(c);
         context_determine_hostname_source(c);
@@ -673,6 +889,26 @@
         return sd_bus_message_append(reply, "s", *(char**) userdata);
 }
 
+static int property_get_os_support_end(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        Context *c = userdata;
+        usec_t eol = USEC_INFINITY;
+
+        context_read_os_release(c);
+
+        if (c->data[PROP_OS_SUPPORT_END])
+                (void) os_release_support_ended(c->data[PROP_OS_SUPPORT_END], /* quiet= */ false, &eol);
+
+        return sd_bus_message_append(reply, "t", eol);
+}
+
 static int property_get_icon_name(
                 sd_bus *bus,
                 const char *path,
@@ -708,17 +944,14 @@
                 void *userdata,
                 sd_bus_error *error) {
 
+        _cleanup_free_ char *chassis = NULL;
         Context *c = userdata;
-        const char *name;
 
         context_read_machine_info(c);
 
-        if (isempty(c->data[PROP_CHASSIS]))
-                name = fallback_chassis();
-        else
-                name = c->data[PROP_CHASSIS];
+        chassis = context_get_chassis(c);
 
-        return sd_bus_message_append(reply, "s", name);
+        return sd_bus_message_append(reply, "s", chassis);
 }
 
 static int property_get_uname_field(
@@ -738,12 +971,11 @@
 }
 
 static int method_set_hostname(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         const char *name;
         int interactive, r;
 
         assert(m);
-        assert(c);
 
         r = sd_bus_message_read(m, "sb", &name, &interactive);
         if (r < 0)
@@ -785,13 +1017,12 @@
 }
 
 static int method_set_static_hostname(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         const char *name;
         int interactive;
         int r;
 
         assert(m);
-        assert(c);
 
         r = sd_bus_message_read(m, "sb", &name, &interactive);
         if (r < 0)
@@ -955,12 +1186,11 @@
 
 static int method_get_product_uuid(sd_bus_message *m, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         int interactive, r;
         sd_id128_t uuid;
 
         assert(m);
-        assert(c);
 
         r = sd_bus_message_read(m, "b", &interactive);
         if (r < 0)
@@ -1003,24 +1233,62 @@
         return sd_bus_send(NULL, reply, NULL);
 }
 
+static int method_get_hardware_serial(sd_bus_message *m, void *userdata, sd_bus_error *error) {
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        _cleanup_free_ char *serial = NULL;
+        Context *c = ASSERT_PTR(userdata);
+        int r;
+
+        assert(m);
+
+        r = bus_verify_polkit_async(
+                        m,
+                        CAP_SYS_ADMIN,
+                        "org.freedesktop.hostname1.get-hardware-serial",
+                        NULL,
+                        false,
+                        UID_INVALID,
+                        &c->polkit_registry,
+                        error);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
+
+        r = get_hardware_serial(&serial);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_new_method_return(m, &reply);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_append(reply, "s", serial);
+        if (r < 0)
+                return r;
+
+        return sd_bus_send(NULL, reply, NULL);
+}
+
 static int method_describe(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        _cleanup_free_ char *hn = NULL, *dhn = NULL, *in = NULL, *text = NULL, *vendor = NULL, *model = NULL;
+        _cleanup_free_ char *hn = NULL, *dhn = NULL, *in = NULL, *text = NULL,
+                *chassis = NULL, *vendor = NULL, *model = NULL, *serial = NULL, *firmware_version = NULL,
+                *firmware_vendor = NULL;
+        usec_t firmware_date = USEC_INFINITY, eol = USEC_INFINITY;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         sd_id128_t product_uuid = SD_ID128_NULL;
-        const char *chassis = NULL;
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         bool privileged;
         struct utsname u;
         int r;
 
         assert(m);
-        assert(c);
 
         r = bus_verify_polkit_async(
                         m,
                         CAP_SYS_ADMIN,
-                        "org.freedesktop.hostname1.get-product-uuid",
+                        "org.freedesktop.hostname1.get-description",
                         NULL,
                         false,
                         UID_INVALID,
@@ -1055,16 +1323,26 @@
         if (isempty(c->data[PROP_ICON_NAME]))
                 in = context_fallback_icon_name(c);
 
-        if (isempty(c->data[PROP_CHASSIS]))
-                chassis = fallback_chassis();
+        chassis = context_get_chassis(c);
 
         assert_se(uname(&u) >= 0);
 
-        (void) get_hardware_vendor(&vendor);
-        (void) get_hardware_model(&model);
+        if (isempty(c->data[PROP_HARDWARE_VENDOR]))
+                (void) get_hardware_vendor(&vendor);
+        if (isempty(c->data[PROP_HARDWARE_MODEL]))
+                (void) get_hardware_model(&model);
 
-        if (privileged) /* The product UUID is only available to privileged clients */
-                id128_get_product(&product_uuid);
+        if (privileged) {
+                /* The product UUID and hardware serial is only available to privileged clients */
+                (void) id128_get_product(&product_uuid);
+                (void) get_hardware_serial(&serial);
+        }
+        (void) get_firmware_version(&firmware_version);
+        (void) get_firmware_vendor(&firmware_vendor);
+        (void) get_firmware_date(&firmware_date);
+
+        if (c->data[PROP_OS_SUPPORT_END])
+                (void) os_release_support_ended(c->data[PROP_OS_SUPPORT_END], /* quiet= */ false, &eol);
 
         r = json_build(&v, JSON_BUILD_OBJECT(
                                        JSON_BUILD_PAIR("Hostname", JSON_BUILD_STRING(hn)),
@@ -1073,7 +1351,7 @@
                                        JSON_BUILD_PAIR("DefaultHostname", JSON_BUILD_STRING(dhn)),
                                        JSON_BUILD_PAIR("HostnameSource", JSON_BUILD_STRING(hostname_source_to_string(c->hostname_source))),
                                        JSON_BUILD_PAIR("IconName", JSON_BUILD_STRING(in ?: c->data[PROP_ICON_NAME])),
-                                       JSON_BUILD_PAIR("Chassis", JSON_BUILD_STRING(chassis ?: c->data[PROP_CHASSIS])),
+                                       JSON_BUILD_PAIR("Chassis", JSON_BUILD_STRING(chassis)),
                                        JSON_BUILD_PAIR("Deployment", JSON_BUILD_STRING(c->data[PROP_DEPLOYMENT])),
                                        JSON_BUILD_PAIR("Location", JSON_BUILD_STRING(c->data[PROP_LOCATION])),
                                        JSON_BUILD_PAIR("KernelName", JSON_BUILD_STRING(u.sysname)),
@@ -1082,8 +1360,13 @@
                                        JSON_BUILD_PAIR("OperatingSystemPrettyName", JSON_BUILD_STRING(c->data[PROP_OS_PRETTY_NAME])),
                                        JSON_BUILD_PAIR("OperatingSystemCPEName", JSON_BUILD_STRING(c->data[PROP_OS_CPE_NAME])),
                                        JSON_BUILD_PAIR("OperatingSystemHomeURL", JSON_BUILD_STRING(c->data[PROP_OS_HOME_URL])),
-                                       JSON_BUILD_PAIR("HardwareVendor", JSON_BUILD_STRING(vendor)),
-                                       JSON_BUILD_PAIR("HardwareModel", JSON_BUILD_STRING(model)),
+                                       JSON_BUILD_PAIR_FINITE_USEC("OperatingSystemSupportEnd", eol),
+                                       JSON_BUILD_PAIR("HardwareVendor", JSON_BUILD_STRING(vendor ?: c->data[PROP_HARDWARE_VENDOR])),
+                                       JSON_BUILD_PAIR("HardwareModel", JSON_BUILD_STRING(model ?: c->data[PROP_HARDWARE_MODEL])),
+                                       JSON_BUILD_PAIR("HardwareSerial", JSON_BUILD_STRING(serial)),
+                                       JSON_BUILD_PAIR("FirmwareVersion", JSON_BUILD_STRING(firmware_version)),
+                                       JSON_BUILD_PAIR("FirmwareVendor", JSON_BUILD_STRING(firmware_vendor)),
+                                       JSON_BUILD_PAIR_FINITE_USEC("FirmwareDate", firmware_date),
                                        JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(product_uuid), "ProductUUID", JSON_BUILD_ID128(product_uuid)),
                                        JSON_BUILD_PAIR_CONDITION(sd_id128_is_null(product_uuid), "ProductUUID", JSON_BUILD_NULL)));
 
@@ -1121,66 +1404,59 @@
         SD_BUS_PROPERTY("KernelVersion", "s", property_get_uname_field, offsetof(struct utsname, version), SD_BUS_VTABLE_ABSOLUTE_OFFSET|SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("OperatingSystemPrettyName", "s", property_get_os_release_field, offsetof(Context, data) + sizeof(char*) * PROP_OS_PRETTY_NAME, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("OperatingSystemCPEName", "s", property_get_os_release_field, offsetof(Context, data) + sizeof(char*) * PROP_OS_CPE_NAME, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("OperatingSystemSupportEnd", "t", property_get_os_support_end, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HomeURL", "s", property_get_os_release_field, offsetof(Context, data) + sizeof(char*) * PROP_OS_HOME_URL, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HardwareVendor", "s", property_get_hardware_vendor, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HardwareModel", "s", property_get_hardware_model, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("FirmwareVersion", "s", property_get_firmware_version, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("FirmwareVendor", "s", property_get_firmware_vendor, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("FirmwareDate", "t", property_get_firmware_date, 0, SD_BUS_VTABLE_PROPERTY_CONST),
 
-        SD_BUS_METHOD_WITH_NAMES("SetHostname",
-                                 "sb",
-                                 SD_BUS_PARAM(hostname)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_hostname,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetStaticHostname",
-                                 "sb",
-                                 SD_BUS_PARAM(hostname)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_static_hostname,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetPrettyHostname",
-                                 "sb",
-                                 SD_BUS_PARAM(hostname)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_pretty_hostname,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetIconName",
-                                 "sb",
-                                 SD_BUS_PARAM(icon)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_icon_name,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetChassis",
-                                 "sb",
-                                 SD_BUS_PARAM(chassis)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_chassis,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetDeployment",
-                                 "sb",
-                                 SD_BUS_PARAM(deployment)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_deployment,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetLocation",
-                                 "sb",
-                                 SD_BUS_PARAM(location)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_location,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetProductUUID",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 "ay",
-                                 SD_BUS_PARAM(uuid),
-                                 method_get_product_uuid,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetHostname",
+                                SD_BUS_ARGS("s", hostname, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_hostname,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetStaticHostname",
+                                SD_BUS_ARGS("s", hostname, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_static_hostname,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetPrettyHostname",
+                                SD_BUS_ARGS("s", hostname, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_pretty_hostname,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetIconName",
+                                SD_BUS_ARGS("s", icon, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_icon_name,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetChassis",
+                                SD_BUS_ARGS("s", chassis, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_chassis,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDeployment",
+                                SD_BUS_ARGS("s", deployment, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_deployment,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLocation",
+                                SD_BUS_ARGS("s", location, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_location,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetProductUUID",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_RESULT("ay", uuid),
+                                method_get_product_uuid,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetHardwareSerial",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", serial),
+                                method_get_hardware_serial,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD_WITH_ARGS("Describe",
                                 SD_BUS_NO_ARGS,
                                 SD_BUS_RESULT("s", json),
diff --git a/src/hostname/org.freedesktop.hostname1.conf b/src/hostname/org.freedesktop.hostname1.conf
index 2f34102..5b70625 100644
--- a/src/hostname/org.freedesktop.hostname1.conf
+++ b/src/hostname/org.freedesktop.hostname1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/hostname/org.freedesktop.hostname1.policy b/src/hostname/org.freedesktop.hostname1.policy
index dacea0f..bfc36d1 100644
--- a/src/hostname/org.freedesktop.hostname1.policy
+++ b/src/hostname/org.freedesktop.hostname1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
@@ -57,4 +57,24 @@
                 </defaults>
         </action>
 
+        <action id="org.freedesktop.hostname1.get-hardware-serial">
+                <description gettext-domain="systemd">Get hardware serial number</description>
+                <message gettext-domain="systemd">Authentication is required to get hardware serial number.</message>
+                <defaults>
+                        <allow_any>auth_admin_keep</allow_any>
+                        <allow_inactive>auth_admin_keep</allow_inactive>
+                        <allow_active>auth_admin_keep</allow_active>
+                </defaults>
+        </action>
+
+        <action id="org.freedesktop.hostname1.get-description">
+                <description gettext-domain="systemd">Get system description</description>
+                <message gettext-domain="systemd">Authentication is required to get system description.</message>
+                <defaults>
+                        <allow_any>auth_admin_keep</allow_any>
+                        <allow_inactive>auth_admin_keep</allow_inactive>
+                        <allow_active>auth_admin_keep</allow_active>
+                </defaults>
+        </action>
+
 </policyconfig>
diff --git a/src/hwdb/hwdb.c b/src/hwdb/hwdb.c
index a3a0505..edc5dfc 100644
--- a/src/hwdb/hwdb.c
+++ b/src/hwdb/hwdb.c
@@ -5,12 +5,12 @@
 #include "sd-hwdb.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "hwdb-util.h"
 #include "main-func.h"
 #include "pretty-print.h"
 #include "selinux-util.h"
 #include "terminal-util.h"
-#include "util.h"
 #include "verbs.h"
 
 static const char *arg_hwdb_bin_dir = NULL;
@@ -18,7 +18,7 @@
 static bool arg_strict = false;
 
 static int verb_query(int argc, char *argv[], void *userdata) {
-        return hwdb_query(argv[1]);
+        return hwdb_query(argv[1], arg_root);
 }
 
 static int verb_update(int argc, char *argv[], void *userdata) {
@@ -98,7 +98,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/id128/id128.c b/src/id128/id128.c
index 435a56d..53a2434 100644
--- a/src/id128/id128.c
+++ b/src/id128/id128.c
@@ -4,6 +4,7 @@
 #include <stdio.h>
 
 #include "alloc-util.h"
+#include "build.h"
 #include "gpt.h"
 #include "id128-print.h"
 #include "main-func.h"
@@ -11,7 +12,6 @@
 #include "strv.h"
 #include "format-table.h"
 #include "terminal-util.h"
-#include "util.h"
 #include "verbs.h"
 
 static Id128PrettyPrintMode arg_mode = ID128_PRINT_ID128;
@@ -102,7 +102,6 @@
 
 static int verb_show(int argc, char **argv, void *userdata) {
         _cleanup_(table_unrefp) Table *table = NULL;
-        char **p;
         int r;
 
         argv = strv_skip(argv, 1);
@@ -124,10 +123,13 @@
                         if (have_uuid)
                                 id = gpt_partition_type_uuid_to_string(uuid) ?: "XYZ";
                         else {
-                                r = gpt_partition_type_uuid_from_string(*p, &uuid);
+                                GptPartitionType type;
+
+                                r = gpt_partition_type_from_string(*p, &type);
                                 if (r < 0)
                                         return log_error_errno(r, "Unknown identifier \"%s\".", *p);
 
+                                uuid = type.uuid;
                                 id = *p;
                         }
 
@@ -160,7 +162,7 @@
                "  machine-id              Print the ID of current machine\n"
                "  boot-id                 Print the ID of current boot\n"
                "  invocation-id           Print the ID of current invocation\n"
-               "  show [NAME]             Print one or more well-known IDs\n"
+               "  show [NAME]             Print one or more well-known GPT partition type IDs\n"
                "  help                    Show this help\n"
                "\nOptions:\n"
                "  -h --help               Show this help\n"
@@ -226,7 +228,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/import/curl-util.c b/src/import/curl-util.c
index d6a16b4..94f718d 100644
--- a/src/import/curl-util.c
+++ b/src/import/curl-util.c
@@ -27,11 +27,10 @@
 }
 
 static int curl_glue_on_io(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        CurlGlue *g = userdata;
+        CurlGlue *g = ASSERT_PTR(userdata);
         int action, k = 0;
 
         assert(s);
-        assert(g);
 
         if (FLAGS_SET(revents, EPOLLIN | EPOLLOUT))
                 action = CURL_POLL_INOUT;
@@ -52,12 +51,11 @@
 
 static int curl_glue_socket_callback(CURL *curl, curl_socket_t s, int action, void *userdata, void *socketp) {
         sd_event_source *io = socketp;
-        CurlGlue *g = userdata;
+        CurlGlue *g = ASSERT_PTR(userdata);
         uint32_t events = 0;
         int r;
 
         assert(curl);
-        assert(g);
 
         if (action == CURL_POLL_REMOVE) {
                 if (io) {
@@ -109,11 +107,10 @@
 }
 
 static int curl_glue_on_timer(sd_event_source *s, uint64_t usec, void *userdata) {
-        CurlGlue *g = userdata;
+        CurlGlue *g = ASSERT_PTR(userdata);
         int k = 0;
 
         assert(s);
-        assert(g);
 
         if (curl_multi_socket_action(g->curl, CURL_SOCKET_TIMEOUT, 0, &k) != CURLM_OK)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -124,11 +121,10 @@
 }
 
 static int curl_glue_timer_callback(CURLM *curl, long timeout_ms, void *userdata) {
-        CurlGlue *g = userdata;
+        CurlGlue *g = ASSERT_PTR(userdata);
         usec_t usec;
 
         assert(curl);
-        assert(g);
 
         if (timeout_ms < 0) {
                 if (g->timer) {
@@ -148,7 +144,7 @@
                 if (sd_event_source_set_enabled(g->timer, SD_EVENT_ONESHOT) < 0)
                         return -1;
         } else {
-                if (sd_event_add_time_relative(g->event, &g->timer, clock_boottime_or_monotonic(), usec, 0, curl_glue_on_timer, g) < 0)
+                if (sd_event_add_time_relative(g->event, &g->timer, CLOCK_BOOTTIME, usec, 0, curl_glue_on_timer, g) < 0)
                         return -1;
 
                 (void) sd_event_source_set_description(g->timer, "curl-timer");
@@ -256,7 +252,11 @@
         if (curl_easy_setopt(c, CURLOPT_LOW_SPEED_LIMIT, 30L) != CURLE_OK)
                 return -EIO;
 
+#if LIBCURL_VERSION_NUM >= 0x075500 /* libcurl 7.85.0 */
+        if (curl_easy_setopt(c, CURLOPT_PROTOCOLS_STR, "HTTP,HTTPS,FILE") != CURLE_OK)
+#else
         if (curl_easy_setopt(c, CURLOPT_PROTOCOLS, CURLPROTO_HTTP|CURLPROTO_HTTPS|CURLPROTO_FILE) != CURLE_OK)
+#endif
                 return -EIO;
 
         *ret = TAKE_PTR(c);
diff --git a/src/import/export-raw.c b/src/import/export-raw.c
index d42c561..7c61aef 100644
--- a/src/import/export-raw.c
+++ b/src/import/export-raw.c
@@ -2,12 +2,6 @@
 
 #include <sys/sendfile.h>
 
-/* When we include libgen.h because we need dirname() we immediately
- * undefine basename() since libgen.h defines it as a macro to the POSIX
- * version which is really broken. We prefer GNU basename(). */
-#include <libgen.h>
-#undef basename
-
 #include "sd-daemon.h"
 
 #include "alloc-util.h"
@@ -22,7 +16,6 @@
 #include "stat-util.h"
 #include "string-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 #define COPY_BUFFER_SIZE (16*1024)
 
@@ -91,8 +84,8 @@
                 return -ENOMEM;
 
         *e = (RawExport) {
-                .output_fd = -1,
-                .input_fd = -1,
+                .output_fd = -EBADF,
+                .input_fd = -EBADF,
                 .on_finished = on_finished,
                 .userdata = userdata,
                 .last_percent = UINT_MAX,
@@ -223,7 +216,7 @@
 finish:
         if (r >= 0) {
                 (void) copy_times(e->input_fd, e->output_fd, COPY_CRTIME);
-                (void) copy_xattr(e->input_fd, e->output_fd);
+                (void) copy_xattr(e->input_fd, e->output_fd, 0);
         }
 
         if (e->on_finished)
@@ -274,7 +267,7 @@
 }
 
 int raw_export_start(RawExport *e, const char *path, int fd, ImportCompressType compress) {
-        _cleanup_close_ int sfd = -1, tfd = -1;
+        _cleanup_close_ int sfd = -EBADF, tfd = -EBADF;
         int r;
 
         assert(e);
diff --git a/src/import/export-tar.c b/src/import/export-tar.c
index b734c30..4aa8204 100644
--- a/src/import/export-tar.c
+++ b/src/import/export-tar.c
@@ -11,7 +11,6 @@
 #include "ratelimit.h"
 #include "string-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 #define COPY_BUFFER_SIZE (16*1024)
 
@@ -56,10 +55,8 @@
 
         sd_event_source_unref(e->output_event_source);
 
-        if (e->tar_pid > 1) {
-                (void) kill_and_sigcont(e->tar_pid, SIGKILL);
-                (void) wait_for_terminate(e->tar_pid, NULL);
-        }
+        if (e->tar_pid > 1)
+                sigkill_wait(e->tar_pid);
 
         if (e->temp_path) {
                 (void) btrfs_subvol_remove(e->temp_path, BTRFS_REMOVE_QUOTA);
@@ -93,8 +90,8 @@
                 return -ENOMEM;
 
         *e = (TarExport) {
-                .output_fd = -1,
-                .tar_fd = -1,
+                .output_fd = -EBADF,
+                .tar_fd = -EBADF,
                 .on_finished = on_finished,
                 .userdata = userdata,
                 .quota_referenced = UINT64_MAX,
@@ -147,8 +144,7 @@
         assert(e->tar_fd >= 0);
 
         if (e->tar_pid > 0) {
-                r = wait_for_terminate_and_check("tar", e->tar_pid, WAIT_LOG);
-                e->tar_pid = 0;
+                r = wait_for_terminate_and_check("tar", TAKE_PID(e->tar_pid), WAIT_LOG);
                 if (r < 0)
                         return r;
                 if (r != EXIT_SUCCESS)
@@ -254,7 +250,7 @@
 }
 
 int tar_export_start(TarExport *e, const char *path, int fd, ImportCompressType compress) {
-        _cleanup_close_ int sfd = -1;
+        _cleanup_close_ int sfd = -EBADF;
         int r;
 
         assert(e);
diff --git a/src/import/export.c b/src/import/export.c
index a4f3f6c..84609cb 100644
--- a/src/import/export.c
+++ b/src/import/export.c
@@ -7,6 +7,7 @@
 #include "sd-id128.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "discover-image.h"
 #include "export-raw.h"
 #include "export-tar.h"
@@ -62,7 +63,7 @@
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         _cleanup_(image_unrefp) Image *image = NULL;
         const char *path = NULL, *local = NULL;
-        _cleanup_close_ int open_fd = -1;
+        _cleanup_close_ int open_fd = -EBADF;
         int r, fd;
 
         if (hostname_is_valid(argv[1], 0)) {
@@ -138,7 +139,7 @@
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         _cleanup_(image_unrefp) Image *image = NULL;
         const char *path = NULL, *local = NULL;
-        _cleanup_close_ int open_fd = -1;
+        _cleanup_close_ int open_fd = -EBADF;
         int r, fd;
 
         if (hostname_is_valid(argv[1], 0)) {
@@ -261,7 +262,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/import/import-common.c b/src/import/import-common.c
index f77564c..874d27d 100644
--- a/src/import/import-common.c
+++ b/src/import/import-common.c
@@ -13,6 +13,7 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "hostname-util.h"
 #include "import-common.h"
 #include "os-util.h"
 #include "process-util.h"
@@ -20,61 +21,9 @@
 #include "signal-util.h"
 #include "stat-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
-
-int import_make_read_only_fd(int fd) {
-        struct stat st;
-        int r;
-
-        assert(fd >= 0);
-
-        /* First, let's make this a read-only subvolume if it refers
-         * to a subvolume */
-        r = btrfs_subvol_set_read_only_fd(fd, true);
-        if (r >= 0)
-                return 0;
-
-        if (!ERRNO_IS_NOT_SUPPORTED(r) && !IN_SET(r, -ENOTDIR, -EINVAL))
-                return log_error_errno(r, "Failed to make subvolume read-only: %m");
-
-        /* This doesn't refer to a subvolume, or the file system isn't even btrfs. In that, case fall back to
-         * chmod()ing */
-
-        r = fstat(fd, &st);
-        if (r < 0)
-                return log_error_errno(errno, "Failed to stat image: %m");
-
-        if (S_ISDIR(st.st_mode)) {
-                /* For directories set the immutable flag on the dir itself */
-
-                r = chattr_fd(fd, FS_IMMUTABLE_FL, FS_IMMUTABLE_FL, NULL);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to set +i attribute on directory image: %m");
-
-        } else if (S_ISREG(st.st_mode)) {
-                /* For regular files drop "w" flags */
-
-                if ((st.st_mode & 0222) != 0)
-                        if (fchmod(fd, st.st_mode & 07555) < 0)
-                                return log_error_errno(errno, "Failed to chmod() image: %m");
-        } else
-                return log_error_errno(SYNTHETIC_ERRNO(EBADFD), "Image of unexpected type");
-
-        return 0;
-}
-
-int import_make_read_only(const char *path) {
-        _cleanup_close_ int fd = 1;
-
-        fd = open(path, O_RDONLY|O_NOCTTY|O_CLOEXEC);
-        if (fd < 0)
-                return log_error_errno(errno, "Failed to open %s: %m", path);
-
-        return import_make_read_only_fd(fd);
-}
 
 int import_fork_tar_x(const char *path, pid_t *ret) {
-        _cleanup_close_pair_ int pipefd[2] = { -1, -1 };
+        _cleanup_close_pair_ int pipefd[2] = PIPE_EBADF;
         bool use_selinux;
         pid_t pid;
         int r;
@@ -96,7 +45,8 @@
                        "--ignore-zeros",
                        "--numeric-owner",
                        "-C", path,
-                       "-px",
+                       "-pxf",
+                       "-",
                        "--xattrs",
                        "--xattrs-include=*",
                        use_selinux ? "--selinux" : "--no-selinux",
@@ -115,7 +65,7 @@
 
                 pipefd[1] = safe_close(pipefd[1]);
 
-                r = rearrange_stdio(pipefd[0], -1, STDERR_FILENO);
+                r = rearrange_stdio(TAKE_FD(pipefd[0]), -EBADF, STDERR_FILENO);
                 if (r < 0) {
                         log_error_errno(r, "Failed to rearrange stdin/stdout: %m");
                         _exit(EXIT_FAILURE);
@@ -147,7 +97,7 @@
 }
 
 int import_fork_tar_c(const char *path, pid_t *ret) {
-        _cleanup_close_pair_ int pipefd[2] = { -1, -1 };
+        _cleanup_close_pair_ int pipefd[2] = PIPE_EBADF;
         bool use_selinux;
         pid_t pid;
         int r;
@@ -181,7 +131,7 @@
 
                 pipefd[0] = safe_close(pipefd[0]);
 
-                r = rearrange_stdio(-1, pipefd[1], STDERR_FILENO);
+                r = rearrange_stdio(-EBADF, TAKE_FD(pipefd[1]), STDERR_FILENO);
                 if (r < 0) {
                         log_error_errno(r, "Failed to rearrange stdin/stdout: %m");
                         _exit(EXIT_FAILURE);
@@ -209,7 +159,7 @@
 int import_mangle_os_tree(const char *path) {
         _cleanup_free_ char *child = NULL, *t = NULL, *joined = NULL;
         _cleanup_closedir_ DIR *d = NULL, *cd = NULL;
-        struct dirent *de;
+        struct dirent *dent;
         struct stat st;
         int r;
 
@@ -233,8 +183,8 @@
                 return log_error_errno(r, "Failed to open directory '%s': %m", path);
 
         errno = 0;
-        de = readdir_no_dot(d);
-        if (!de) {
+        dent = readdir_no_dot(d);
+        if (!dent) {
                 if (errno != 0)
                         return log_error_errno(errno, "Failed to iterate through directory '%s': %m", path);
 
@@ -242,13 +192,13 @@
                 return 0;
         }
 
-        child = strdup(de->d_name);
+        child = strdup(dent->d_name);
         if (!child)
                 return log_oom();
 
         errno = 0;
-        de = readdir_no_dot(d);
-        if (de) {
+        dent = readdir_no_dot(d);
+        if (dent) {
                 if (errno != 0)
                         return log_error_errno(errno, "Failed to iterate through directory '%s': %m", path);
 
@@ -327,3 +277,38 @@
 
         return 0;
 }
+
+bool import_validate_local(const char *name, ImportFlags flags) {
+
+        /* By default we insist on a valid hostname for naming images. But optionally we relax that, in which
+         * case it can be any path name */
+
+        if (FLAGS_SET(flags, IMPORT_DIRECT))
+                return path_is_valid(name);
+
+        return hostname_is_valid(name, 0);
+}
+
+static int interrupt_signal_handler(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
+        log_notice("Transfer aborted.");
+        sd_event_exit(sd_event_source_get_event(s), EINTR);
+        return 0;
+}
+
+int import_allocate_event_with_signals(sd_event **ret) {
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        int r;
+
+        assert(ret);
+
+        r = sd_event_default(&event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate event loop: %m");
+
+        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
+        (void) sd_event_add_signal(event, NULL, SIGTERM, interrupt_signal_handler,  NULL);
+        (void) sd_event_add_signal(event, NULL, SIGINT, interrupt_signal_handler, NULL);
+
+        *ret = TAKE_PTR(event);
+        return 0;
+}
diff --git a/src/import/import-common.h b/src/import/import-common.h
index d7e8fc4..97fc16d 100644
--- a/src/import/import-common.h
+++ b/src/import/import-common.h
@@ -3,17 +3,26 @@
 
 #include <sys/types.h>
 
+#include "sd-event.h"
+
 typedef enum ImportFlags {
-        IMPORT_FORCE     = 1 << 0, /* replace existing image */
-        IMPORT_READ_ONLY = 1 << 1, /* make generated image read-only */
+        IMPORT_FORCE          = 1 << 0, /* replace existing image */
+        IMPORT_READ_ONLY      = 1 << 1, /* make generated image read-only */
+        IMPORT_BTRFS_SUBVOL   = 1 << 2, /* tar: preferably create images as btrfs subvols */
+        IMPORT_BTRFS_QUOTA    = 1 << 3, /* tar: set up btrfs quota for new subvolume as child of parent subvolume */
+        IMPORT_CONVERT_QCOW2  = 1 << 4, /* raw: if we detect a qcow2 image, unpack it */
+        IMPORT_DIRECT         = 1 << 5, /* import without rename games */
+        IMPORT_SYNC           = 1 << 6, /* fsync() right before we are done */
 
-        IMPORT_FLAGS_MASK = IMPORT_FORCE|IMPORT_READ_ONLY,
+        IMPORT_FLAGS_MASK_TAR = IMPORT_FORCE|IMPORT_READ_ONLY|IMPORT_BTRFS_SUBVOL|IMPORT_BTRFS_QUOTA|IMPORT_DIRECT|IMPORT_SYNC,
+        IMPORT_FLAGS_MASK_RAW = IMPORT_FORCE|IMPORT_READ_ONLY|IMPORT_CONVERT_QCOW2|IMPORT_DIRECT|IMPORT_SYNC,
 } ImportFlags;
 
-int import_make_read_only_fd(int fd);
-int import_make_read_only(const char *path);
-
 int import_fork_tar_c(const char *path, pid_t *ret);
 int import_fork_tar_x(const char *path, pid_t *ret);
 
 int import_mangle_os_tree(const char *path);
+
+bool import_validate_local(const char *name, ImportFlags flags);
+
+int import_allocate_event_with_signals(sd_event **ret);
diff --git a/src/import/import-compress.c b/src/import/import-compress.c
index aa837af..28cf6f8 100644
--- a/src/import/import-compress.c
+++ b/src/import/import-compress.c
@@ -2,7 +2,6 @@
 
 #include "import-compress.h"
 #include "string-table.h"
-#include "util.h"
 
 void import_compress_free(ImportCompress *c) {
         assert(c);
@@ -190,7 +189,7 @@
 #endif
 
         default:
-                assert_not_reached("Unknown compression");
+                assert_not_reached();
         }
 
         return 1;
diff --git a/src/import/import-fs.c b/src/import/import-fs.c
index a12ee77..d81dd13 100644
--- a/src/import/import-fs.c
+++ b/src/import/import-fs.c
@@ -4,6 +4,7 @@
 #include <locale.h>
 
 #include "alloc-util.h"
+#include "build.h"
 #include "btrfs-util.h"
 #include "discover-image.h"
 #include "fd-util.h"
@@ -12,15 +13,24 @@
 #include "hostname-util.h"
 #include "import-common.h"
 #include "import-util.h"
-#include "mkdir.h"
+#include "install-file.h"
+#include "main-func.h"
+#include "mkdir-label.h"
+#include "parse-argument.h"
 #include "ratelimit.h"
 #include "rm-rf.h"
+#include "signal-util.h"
 #include "string-util.h"
+#include "terminal-util.h"
 #include "tmpfile-util.h"
 #include "verbs.h"
 
 static bool arg_force = false;
 static bool arg_read_only = false;
+static bool arg_btrfs_subvol = true;
+static bool arg_btrfs_quota = true;
+static bool arg_sync = true;
+static bool arg_direct = false;
 static const char *arg_image_root = "/var/lib/machines";
 
 typedef struct ProgressInfo {
@@ -31,12 +41,6 @@
         bool logged_incomplete;
 } ProgressInfo;
 
-static volatile sig_atomic_t cancelled = false;
-
-static void sigterm_sigint(int sig) {
-        cancelled = true;
-}
-
 static void progress_info_free(ProgressInfo *p) {
         free(p->path);
 }
@@ -56,28 +60,20 @@
 
         /* Mention the list is incomplete before showing first output. */
         if (!p->logged_incomplete) {
-                log_notice("(Note, file list shown below is incomplete, and is intended as sporadic progress report only.)");
+                log_notice("(Note: file list shown below is incomplete, and is intended as sporadic progress report only.)");
                 p->logged_incomplete = true;
         }
 
         if (p->size == 0)
                 log_info("Copying tree, currently at '%s'...", p->path);
-        else {
-                char buffer[FORMAT_BYTES_MAX];
-
-                log_info("Copying tree, currently at '%s' (@%s)...", p->path, format_bytes(buffer, sizeof(buffer), p->size));
-        }
+        else
+                log_info("Copying tree, currently at '%s' (@%s)...", p->path, FORMAT_BYTES(p->size));
 }
 
 static int progress_path(const char *path, const struct stat *st, void *userdata) {
-        ProgressInfo *p = userdata;
+        ProgressInfo *p = ASSERT_PTR(userdata);
         int r;
 
-        assert(p);
-
-        if (cancelled)
-                return -EOWNERDEAD;
-
         r = free_and_strdup(&p->path, path);
         if (r < 0)
                 return r;
@@ -89,14 +85,10 @@
 }
 
 static int progress_bytes(uint64_t nbytes, void *userdata) {
-        ProgressInfo *p = userdata;
+        ProgressInfo *p = ASSERT_PTR(userdata);
 
-        assert(p);
         assert(p->size != UINT64_MAX);
 
-        if (cancelled)
-                return -EOWNERDEAD;
-
         p->size += nbytes;
 
         progress_show(p);
@@ -106,44 +98,60 @@
 static int import_fs(int argc, char *argv[], void *userdata) {
         _cleanup_(rm_rf_subvolume_and_freep) char *temp_path = NULL;
         _cleanup_(progress_info_free) ProgressInfo progress = {};
-        const char *path = NULL, *local = NULL, *final_path;
-        _cleanup_close_ int open_fd = -1;
-        struct sigaction old_sigint_sa, old_sigterm_sa;
-        static const struct sigaction sa = {
-                .sa_handler = sigterm_sigint,
-                .sa_flags = SA_RESTART,
-        };
+        _cleanup_free_ char *l = NULL, *final_path = NULL;
+        const char *path = NULL, *local = NULL, *dest = NULL;
+        _cleanup_close_ int open_fd = -EBADF;
         int r, fd;
 
         if (argc >= 2)
-                path = argv[1];
-        path = empty_or_dash_to_null(path);
+                path = empty_or_dash_to_null(argv[1]);
 
         if (argc >= 3)
-                local = argv[2];
-        else if (path)
-                local = basename(path);
-        local = empty_or_dash_to_null(local);
+                local = empty_or_dash_to_null(argv[2]);
+        else if (path) {
+                r = path_extract_filename(path, &l);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract filename from path '%s': %m", path);
 
-        if (local) {
-                if (!hostname_is_valid(local, 0))
+                local = l;
+        }
+
+        if (arg_direct) {
+                if (!local)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No local path specified.");
+
+                if (path_is_absolute(local))
+                        final_path = strdup(local);
+                else
+                        final_path = path_join(arg_image_root, local);
+                if (!final_path)
+                        return log_oom();
+
+                if (!path_is_valid(final_path))
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Local image name '%s' is not valid.",
-                                               local);
+                                               "Local path name '%s' is not valid.", final_path);
+        } else {
+                if (local) {
+                        if (!hostname_is_valid(local, 0))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Local image name '%s' is not valid.", local);
+                } else
+                        local = "imported";
+
+                final_path = path_join(arg_image_root, local);
+                if (!final_path)
+                        return log_oom();
 
                 if (!arg_force) {
                         r = image_find(IMAGE_MACHINE, local, NULL, NULL);
                         if (r < 0) {
                                 if (r != -ENOENT)
                                         return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
-                        } else {
+                        } else
                                 return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
-                                                       "Image '%s' already exists.",
-                                                       local);
-                        }
+                                                       "Image '%s' already exists.", local);
                 }
-        } else
-                local = "imported";
+        }
 
         if (path) {
                 open_fd = open(path, O_DIRECTORY|O_RDONLY|O_CLOEXEC);
@@ -162,84 +170,108 @@
                 log_info("Importing '%s', saving as '%s'.", strempty(pretty), local);
         }
 
-        final_path = prefix_roota(arg_image_root, local);
+        if (!arg_sync)
+                log_info("File system synchronization on completion is off.");
 
-        r = tempfn_random(final_path, NULL, &temp_path);
+        if (arg_direct) {
+                if (arg_force)
+                        (void) rm_rf(final_path, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
+
+                dest = final_path;
+        } else {
+                r = tempfn_random(final_path, NULL, &temp_path);
+                if (r < 0)
+                        return log_oom();
+
+                dest = temp_path;
+        }
+
+        (void) mkdir_parents_label(dest, 0700);
+
+        progress.limit = (const RateLimit) { 200*USEC_PER_MSEC, 1 };
+
+        {
+                BLOCK_SIGNALS(SIGINT, SIGTERM);
+
+                if (arg_btrfs_subvol)
+                        r = btrfs_subvol_snapshot_fd_full(
+                                        fd,
+                                        dest,
+                                        BTRFS_SNAPSHOT_FALLBACK_COPY|
+                                        BTRFS_SNAPSHOT_FALLBACK_DIRECTORY|
+                                        BTRFS_SNAPSHOT_RECURSIVE|
+                                        BTRFS_SNAPSHOT_SIGINT|
+                                        BTRFS_SNAPSHOT_SIGTERM,
+                                        progress_path,
+                                        progress_bytes,
+                                        &progress);
+                else
+                        r = copy_directory_fd_full(
+                                        fd,
+                                        dest,
+                                        COPY_REFLINK|
+                                        COPY_SAME_MOUNT|
+                                        COPY_HARDLINKS|
+                                        COPY_SIGINT|
+                                        COPY_SIGTERM|
+                                        (arg_direct ? COPY_MERGE_EMPTY : 0),
+                                        progress_path,
+                                        progress_bytes,
+                                        &progress);
+                if (r == -EINTR) /* SIGINT/SIGTERM hit */
+                        return log_error_errno(r, "Copy cancelled.");
+                if (r < 0)
+                        return log_error_errno(r, "Failed to copy directory: %m");
+        }
+
+        r = import_mangle_os_tree(dest);
         if (r < 0)
-                return log_oom();
+                return r;
 
-        (void) mkdir_parents_label(temp_path, 0700);
-
-        progress.limit = (RateLimit) { 200*USEC_PER_MSEC, 1 };
-
-        /* Hook into SIGINT/SIGTERM, so that we can cancel things then */
-        assert_se(sigaction(SIGINT, &sa, &old_sigint_sa) >= 0);
-        assert_se(sigaction(SIGTERM, &sa, &old_sigterm_sa) >= 0);
-
-        r = btrfs_subvol_snapshot_fd_full(
-                        fd,
-                        temp_path,
-                        BTRFS_SNAPSHOT_FALLBACK_COPY|BTRFS_SNAPSHOT_RECURSIVE|BTRFS_SNAPSHOT_FALLBACK_DIRECTORY|BTRFS_SNAPSHOT_QUOTA,
-                        progress_path,
-                        progress_bytes,
-                        &progress);
-        if (r == -EOWNERDEAD) { /* SIGINT + SIGTERM cause this, see signal handler above */
-                log_error("Copy cancelled.");
-                goto finish;
-        }
-        if (r < 0) {
-                log_error_errno(r, "Failed to copy directory: %m");
-                goto finish;
+        if (arg_btrfs_quota) {
+                if (!arg_direct)
+                        (void) import_assign_pool_quota_and_warn(arg_image_root);
+                (void) import_assign_pool_quota_and_warn(dest);
         }
 
-        r = import_mangle_os_tree(temp_path);
+        r = install_file(AT_FDCWD, dest,
+                         AT_FDCWD, arg_direct ? NULL : final_path, /* pass NULL as target in case of direct
+                                                                    * mode since file is already in place */
+                         (arg_force ? INSTALL_REPLACE : 0) |
+                         (arg_read_only ? INSTALL_READ_ONLY : 0) |
+                         (arg_sync ? INSTALL_SYNCFS : 0));
         if (r < 0)
-                goto finish;
-
-        (void) import_assign_pool_quota_and_warn(arg_image_root);
-        (void) import_assign_pool_quota_and_warn(temp_path);
-
-        if (arg_read_only) {
-                r = import_make_read_only(temp_path);
-                if (r < 0) {
-                        log_error_errno(r, "Failed to make directory read-only: %m");
-                        goto finish;
-                }
-        }
-
-        if (arg_force)
-                (void) rm_rf(final_path, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
-
-        r = rename_noreplace(AT_FDCWD, temp_path, AT_FDCWD, final_path);
-        if (r < 0) {
-                log_error_errno(r, "Failed to move image into place: %m");
-                goto finish;
-        }
+                return log_error_errno(r, "Failed install directory as '%s': %m", final_path);
 
         temp_path = mfree(temp_path);
 
-        log_info("Exiting.");
-
-finish:
-        /* Put old signal handlers into place */
-        assert_se(sigaction(SIGINT, &old_sigint_sa, NULL) >= 0);
-        assert_se(sigaction(SIGTERM, &old_sigterm_sa, NULL) >= 0);
-
+        log_info("Directory '%s successfully installed. Exiting.", final_path);
         return 0;
 }
 
 static int help(int argc, char *argv[], void *userdata) {
 
-        printf("%s [OPTIONS...] {COMMAND} ...\n\n"
-               "Import container images from a file system.\n\n"
+        printf("%1$s [OPTIONS...] {COMMAND} ...\n"
+               "\n%4$sImport container images from a file system directories.%5$s\n"
+               "\n%2$sCommands:%3$s\n"
+               "  run DIRECTORY [NAME]        Import a directory\n"
+               "\n%2$sOptions:%3$s\n"
                "  -h --help                   Show this help\n"
                "     --version                Show package version\n"
                "     --force                  Force creation of image\n"
                "     --image-root=PATH        Image root directory\n"
-               "     --read-only              Create a read-only image\n\n"
-               "Commands:\n"
-               "  run DIRECTORY [NAME]             Import a directory\n",
-               program_invocation_short_name);
+               "     --read-only              Create a read-only image\n"
+               "     --direct                 Import directly to specified directory\n"
+               "     --btrfs-subvol=BOOL      Controls whether to create a btrfs subvolume\n"
+               "                              instead of a directory\n"
+               "     --btrfs-quota=BOOL       Controls whether to set up quota for btrfs\n"
+               "                              subvolume\n"
+               "     --sync=BOOL              Controls whether to sync() before completing\n",
+               program_invocation_short_name,
+               ansi_underline(),
+               ansi_normal(),
+               ansi_highlight(),
+               ansi_normal());
 
         return 0;
 }
@@ -251,6 +283,10 @@
                 ARG_FORCE,
                 ARG_IMAGE_ROOT,
                 ARG_READ_ONLY,
+                ARG_DIRECT,
+                ARG_BTRFS_SUBVOL,
+                ARG_BTRFS_QUOTA,
+                ARG_SYNC,
         };
 
         static const struct option options[] = {
@@ -259,10 +295,14 @@
                 { "force",           no_argument,       NULL, ARG_FORCE           },
                 { "image-root",      required_argument, NULL, ARG_IMAGE_ROOT      },
                 { "read-only",       no_argument,       NULL, ARG_READ_ONLY       },
+                { "direct",          no_argument,       NULL, ARG_DIRECT          },
+                { "btrfs-subvol",    required_argument, NULL, ARG_BTRFS_SUBVOL    },
+                { "btrfs-quota",     required_argument, NULL, ARG_BTRFS_QUOTA     },
+                { "sync",            required_argument, NULL, ARG_SYNC            },
                 {}
         };
 
-        int c;
+        int c, r;
 
         assert(argc >= 0);
         assert(argv);
@@ -289,11 +329,36 @@
                         arg_read_only = true;
                         break;
 
+                case ARG_DIRECT:
+                        arg_direct = true;
+                        break;
+
+                case ARG_BTRFS_SUBVOL:
+                        r = parse_boolean_argument("--btrfs-subvol=", optarg, &arg_btrfs_subvol);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_BTRFS_QUOTA:
+                        r = parse_boolean_argument("--btrfs-quota=", optarg, &arg_btrfs_quota);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_SYNC:
+                        r = parse_boolean_argument("--sync=", optarg, &arg_sync);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -310,7 +375,7 @@
         return dispatch_verb(argc, argv, verbs, NULL);
 }
 
-int main(int argc, char *argv[]) {
+static int run(int argc, char *argv[]) {
         int r;
 
         setlocale(LC_ALL, "");
@@ -319,10 +384,9 @@
 
         r = parse_argv(argc, argv);
         if (r <= 0)
-                goto finish;
+                return r;
 
-        r = import_fs_main(argc, argv);
-
-finish:
-        return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+        return import_fs_main(argc, argv);
 }
+
+DEFINE_MAIN_FUNCTION(run);
diff --git a/src/import/import-raw.c b/src/import/import-raw.c
index 0e7757b..5d4dedf 100644
--- a/src/import/import-raw.c
+++ b/src/import/import-raw.c
@@ -9,21 +9,22 @@
 #include "btrfs-util.h"
 #include "copy.h"
 #include "fd-util.h"
+#include "format-util.h"
 #include "fs-util.h"
 #include "hostname-util.h"
 #include "import-common.h"
 #include "import-compress.h"
 #include "import-raw.h"
+#include "install-file.h"
 #include "io-util.h"
 #include "machine-pool.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path-util.h"
 #include "qcow2-util.h"
 #include "ratelimit.h"
 #include "rm-rf.h"
 #include "string-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 struct RawImport {
         sd_event *event;
@@ -52,23 +53,27 @@
         uint64_t written_compressed;
         uint64_t written_uncompressed;
 
-        struct stat st;
+        struct stat input_stat;
+        struct stat output_stat;
 
         unsigned last_percent;
         RateLimit progress_ratelimit;
+
+        uint64_t offset;
+        uint64_t size_max;
 };
 
 RawImport* raw_import_unref(RawImport *i) {
         if (!i)
                 return NULL;
 
-        sd_event_unref(i->event);
+        sd_event_source_unref(i->input_event_source);
 
         unlink_and_free(i->temp_path);
 
         import_compress_free(&i->compress);
 
-        sd_event_source_unref(i->input_event_source);
+        sd_event_unref(i->event);
 
         safe_close(i->output_fd);
 
@@ -100,13 +105,15 @@
                 return -ENOMEM;
 
         *i = (RawImport) {
-                .input_fd = -1,
-                .output_fd = -1,
+                .input_fd = -EBADF,
+                .output_fd = -EBADF,
                 .on_finished = on_finished,
                 .userdata = userdata,
                 .last_percent = UINT_MAX,
                 .image_root = TAKE_PTR(root),
                 .progress_ratelimit = { 100 * USEC_PER_MSEC, 1 },
+                .offset = UINT64_MAX,
+                .size_max = UINT64_MAX,
         };
 
         if (event)
@@ -118,7 +125,6 @@
         }
 
         *ret = TAKE_PTR(i);
-
         return 0;
 }
 
@@ -127,13 +133,13 @@
         assert(i);
 
         /* We have no size information, unless the source is a regular file */
-        if (!S_ISREG(i->st.st_mode))
+        if (!S_ISREG(i->input_stat.st_mode))
                 return;
 
-        if (i->written_compressed >= (uint64_t) i->st.st_size)
+        if (i->written_compressed >= (uint64_t) i->input_stat.st_size)
                 percent = 100;
         else
-                percent = (unsigned) ((i->written_compressed * UINT64_C(100)) / (uint64_t) i->st.st_size);
+                percent = (unsigned) ((i->written_compressed * UINT64_C(100)) / (uint64_t) i->input_stat.st_size);
 
         if (percent == i->last_percent)
                 return;
@@ -148,12 +154,19 @@
 }
 
 static int raw_import_maybe_convert_qcow2(RawImport *i) {
-        _cleanup_close_ int converted_fd = -1;
-        _cleanup_free_ char *t = NULL;
+        _cleanup_close_ int converted_fd = -EBADF;
+        _cleanup_(unlink_and_freep) char *t = NULL;
+        _cleanup_free_ char *f = NULL;
         int r;
 
         assert(i);
 
+        /* Do QCOW2 conversion if enabled and not in direct mode */
+        if ((i->flags & (IMPORT_CONVERT_QCOW2|IMPORT_DIRECT)) != IMPORT_CONVERT_QCOW2)
+                return 0;
+
+        assert(i->final_path);
+
         r = qcow2_detect(i->output_fd);
         if (r < 0)
                 return log_error_errno(r, "Failed to detect whether this is a QCOW2 image: %m");
@@ -161,27 +174,27 @@
                 return 0;
 
         /* This is a QCOW2 image, let's convert it */
-        r = tempfn_random(i->final_path, NULL, &t);
+        r = tempfn_random(i->final_path, NULL, &f);
         if (r < 0)
                 return log_oom();
 
-        converted_fd = open(t, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
+        converted_fd = open(f, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
         if (converted_fd < 0)
-                return log_error_errno(errno, "Failed to create %s: %m", t);
+                return log_error_errno(errno, "Failed to create %s: %m", f);
+
+        t = TAKE_PTR(f);
 
         (void) import_set_nocow_and_log(converted_fd, t);
 
         log_info("Unpacking QCOW2 file.");
 
         r = qcow2_convert(i->output_fd, converted_fd);
-        if (r < 0) {
-                (void) unlink(t);
+        if (r < 0)
                 return log_error_errno(r, "Failed to convert qcow2 image: %m");
-        }
 
-        (void) unlink(i->temp_path);
-        free_and_replace(i->temp_path, t);
-        CLOSE_AND_REPLACE(i->output_fd, converted_fd);
+        unlink_and_free(i->temp_path);
+        i->temp_path = TAKE_PTR(t);
+        close_and_replace(i->output_fd, converted_fd);
 
         return 1;
 }
@@ -191,39 +204,52 @@
 
         assert(i);
         assert(i->output_fd >= 0);
-        assert(i->temp_path);
-        assert(i->final_path);
 
-        /* In case this was a sparse file, make sure the file system is right */
-        if (i->written_uncompressed > 0) {
-                if (ftruncate(i->output_fd, i->written_uncompressed) < 0)
-                        return log_error_errno(errno, "Failed to truncate file: %m");
+        /* Nothing of what is below applies to block devices */
+        if (S_ISBLK(i->output_stat.st_mode)) {
+
+                if (i->flags & IMPORT_SYNC) {
+                        if (fsync(i->output_fd) < 0)
+                                return log_error_errno(errno, "Failed to synchronize block device: %m");
+                }
+
+                return 0;
         }
 
-        r = raw_import_maybe_convert_qcow2(i);
-        if (r < 0)
-                return r;
+        assert(S_ISREG(i->output_stat.st_mode));
 
-        if (S_ISREG(i->st.st_mode)) {
-                (void) copy_times(i->input_fd, i->output_fd, COPY_CRTIME);
-                (void) copy_xattr(i->input_fd, i->output_fd);
-        }
+        /* If an offset is specified we only are supposed to affect part of an existing output file or block
+         * device, thus don't manipulate file properties in that case */
 
-        if (i->flags & IMPORT_READ_ONLY) {
-                r = import_make_read_only_fd(i->output_fd);
+        if (i->offset == UINT64_MAX) {
+                /* In case this was a sparse file, make sure the file size is right */
+                if (i->written_uncompressed > 0) {
+                        if (ftruncate(i->output_fd, i->written_uncompressed) < 0)
+                                return log_error_errno(errno, "Failed to truncate file: %m");
+                }
+
+                r = raw_import_maybe_convert_qcow2(i);
                 if (r < 0)
                         return r;
+
+                if (S_ISREG(i->input_stat.st_mode)) {
+                        (void) copy_times(i->input_fd, i->output_fd, COPY_CRTIME);
+                        (void) copy_xattr(i->input_fd, i->output_fd, 0);
+                }
         }
 
-        if (i->flags & IMPORT_FORCE)
-                (void) rm_rf(i->final_path, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
-
-        r = rename_noreplace(AT_FDCWD, i->temp_path, AT_FDCWD, i->final_path);
+        r = install_file(AT_FDCWD, i->temp_path ?: i->local,
+                         AT_FDCWD, i->final_path,
+                         (i->flags & IMPORT_FORCE ? INSTALL_REPLACE : 0) |
+                         (i->flags & IMPORT_READ_ONLY ? INSTALL_READ_ONLY : 0) |
+                         (i->flags & IMPORT_SYNC ? INSTALL_FSYNC_FULL : 0));
         if (r < 0)
                 return log_error_errno(r, "Failed to move image into place: %m");
 
         i->temp_path = mfree(i->temp_path);
 
+        log_info("Wrote %s.", FORMAT_BYTES(i->written_uncompressed));
+
         return 0;
 }
 
@@ -231,26 +257,56 @@
         int r;
 
         assert(i);
-
+        assert(i->local);
         assert(!i->final_path);
         assert(!i->temp_path);
         assert(i->output_fd < 0);
 
-        i->final_path = strjoin(i->image_root, "/", i->local, ".raw");
-        if (!i->final_path)
-                return log_oom();
+        if (i->flags & IMPORT_DIRECT) {
+                (void) mkdir_parents_label(i->local, 0700);
 
-        r = tempfn_random(i->final_path, NULL, &i->temp_path);
-        if (r < 0)
-                return log_oom();
+                /* In direct mode we just open/create the local path and truncate it (like shell >
+                 * redirection would do it) — except if an offset was passed, in which case we are supposed
+                 * to operate on a section of the file only, in which case we apparently work on an some
+                 * existing thing (i.e. are not the sole thing stored in the file), in which case we will
+                 * neither truncate nor create. */
 
-        (void) mkdir_parents_label(i->temp_path, 0700);
+                i->output_fd = open(i->local, O_RDWR|O_NOCTTY|O_CLOEXEC|(i->offset == UINT64_MAX ? O_TRUNC|O_CREAT : 0), 0664);
+                if (i->output_fd < 0)
+                        return log_error_errno(errno, "Failed to open destination '%s': %m", i->local);
 
-        i->output_fd = open(i->temp_path, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
-        if (i->output_fd < 0)
-                return log_error_errno(errno, "Failed to open destination %s: %m", i->temp_path);
+                if (i->offset == UINT64_MAX)
+                        (void) import_set_nocow_and_log(i->output_fd, i->local);
+        } else {
+                i->final_path = strjoin(i->image_root, "/", i->local, ".raw");
+                if (!i->final_path)
+                        return log_oom();
 
-        (void) import_set_nocow_and_log(i->output_fd, i->temp_path);
+                r = tempfn_random(i->final_path, NULL, &i->temp_path);
+                if (r < 0)
+                        return log_oom();
+
+                (void) mkdir_parents_label(i->temp_path, 0700);
+
+                i->output_fd = open(i->temp_path, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
+                if (i->output_fd < 0)
+                        return log_error_errno(errno, "Failed to open destination '%s': %m", i->temp_path);
+
+                (void) import_set_nocow_and_log(i->output_fd, i->temp_path);
+        }
+
+        if (fstat(i->output_fd, &i->output_stat) < 0)
+                return log_error_errno(errno, "Failed to stat() output file: %m");
+
+        if (!S_ISREG(i->output_stat.st_mode) && !S_ISBLK(i->output_stat.st_mode))
+                return log_error_errno(SYNTHETIC_ERRNO(EBADFD),
+                                       "Target file is not a regular file or block device");
+
+        if (i->offset != UINT64_MAX) {
+                if (lseek(i->output_fd, i->offset, SEEK_SET) == (off_t) -1)
+                        return log_error_errno(errno, "Failed to seek to offset: %m");
+        }
+
         return 0;
 }
 
@@ -265,7 +321,10 @@
         if (i->compress.type != IMPORT_COMPRESS_UNCOMPRESSED)
                 return 0;
 
-        if (!S_ISREG(i->st.st_mode))
+        if (i->offset != UINT64_MAX || i->size_max != UINT64_MAX)
+                return 0;
+
+        if (!S_ISREG(i->input_stat.st_mode) || !S_ISREG(i->output_stat.st_mode))
                 return 0;
 
         p = lseek(i->input_fd, 0, SEEK_CUR);
@@ -280,21 +339,56 @@
         if (r >= 0)
                 return 1;
 
+        log_debug_errno(r, "Couldn't establish reflink, using copy: %m");
         return 0;
 }
 
 static int raw_import_write(const void *p, size_t sz, void *userdata) {
-        RawImport *i = userdata;
-        ssize_t n;
+        RawImport *i = ASSERT_PTR(userdata);
+        bool too_much = false;
+        int r;
 
-        n = sparse_write(i->output_fd, p, sz, 64);
-        if (n < 0)
-                return (int) n;
-        if ((size_t) n < sz)
-                return -EIO;
+        assert(p);
+        assert(sz > 0);
+
+        if (i->written_uncompressed >= UINT64_MAX - sz)
+                return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "File too large, overflow");
+
+        if (i->size_max != UINT64_MAX) {
+                if (i->written_uncompressed >= i->size_max) {
+                        too_much = true;
+                        goto finish;
+                }
+
+                if (i->written_uncompressed + sz > i->size_max) {
+                        too_much = true;
+                        sz = i->size_max - i->written_uncompressed; /* since we have the data in memory
+                                                                     * already, we might as well write it to
+                                                                     * disk to the max */
+                }
+        }
+
+        /* Generate sparse file if we created/truncated the file */
+        if (S_ISREG(i->output_stat.st_mode) && i->offset == UINT64_MAX) {
+                ssize_t n;
+
+                n = sparse_write(i->output_fd, p, sz, 64);
+                if (n < 0)
+                        return log_error_errno((int) n, "Failed to write file: %m");
+                if ((size_t) n < sz)
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short write");
+        } else {
+                r = loop_write(i->output_fd, p, sz, false);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to write file: %m");
+        }
 
         i->written_uncompressed += sz;
 
+finish:
+        if (too_much)
+                return log_error_errno(SYNTHETIC_ERRNO(E2BIG), "File too large");
+
         return 0;
 }
 
@@ -382,15 +476,22 @@
         return raw_import_process(i);
 }
 
-int raw_import_start(RawImport *i, int fd, const char *local, ImportFlags flags) {
+int raw_import_start(
+                RawImport *i,
+                int fd,
+                const char *local,
+                uint64_t offset,
+                uint64_t size_max,
+                ImportFlags flags) {
         int r;
 
         assert(i);
         assert(fd >= 0);
         assert(local);
-        assert(!(flags & ~IMPORT_FLAGS_MASK));
+        assert(!(flags & ~IMPORT_FLAGS_MASK_RAW));
+        assert(offset == UINT64_MAX || FLAGS_SET(flags, IMPORT_DIRECT));
 
-        if (!hostname_is_valid(local, 0))
+        if (!import_validate_local(local, flags))
                 return -EINVAL;
 
         if (i->input_fd >= 0)
@@ -405,8 +506,10 @@
                 return r;
 
         i->flags = flags;
+        i->offset = offset;
+        i->size_max = size_max;
 
-        if (fstat(fd, &i->st) < 0)
+        if (fstat(fd, &i->input_stat) < 0)
                 return -errno;
 
         r = sd_event_add_io(i->event, &i->input_event_source, fd, EPOLLIN, raw_import_on_input, i);
@@ -422,5 +525,5 @@
                 return r;
 
         i->input_fd = fd;
-        return r;
+        return 0;
 }
diff --git a/src/import/import-raw.h b/src/import/import-raw.h
index e99703c..63384eb 100644
--- a/src/import/import-raw.h
+++ b/src/import/import-raw.h
@@ -16,4 +16,4 @@
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(RawImport*, raw_import_unref);
 
-int raw_import_start(RawImport *i, int fd, const char *local, ImportFlags flags);
+int raw_import_start(RawImport *i, int fd, const char *local, uint64_t offset, uint64_t size_max, ImportFlags flags);
diff --git a/src/import/import-tar.c b/src/import/import-tar.c
index 7c4e512..dff6d32 100644
--- a/src/import/import-tar.c
+++ b/src/import/import-tar.c
@@ -15,9 +15,10 @@
 #include "import-common.h"
 #include "import-compress.h"
 #include "import-tar.h"
+#include "install-file.h"
 #include "io-util.h"
 #include "machine-pool.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path-util.h"
 #include "process-util.h"
 #include "qcow2-util.h"
@@ -25,7 +26,6 @@
 #include "rm-rf.h"
 #include "string-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 struct TarImport {
         sd_event *event;
@@ -54,7 +54,7 @@
         uint64_t written_compressed;
         uint64_t written_uncompressed;
 
-        struct stat st;
+        struct stat input_stat;
 
         pid_t tar_pid;
 
@@ -68,10 +68,8 @@
 
         sd_event_source_unref(i->input_event_source);
 
-        if (i->tar_pid > 1) {
-                (void) kill_and_sigcont(i->tar_pid, SIGKILL);
-                (void) wait_for_terminate(i->tar_pid, NULL);
-        }
+        if (i->tar_pid > 1)
+                sigkill_wait(i->tar_pid);
 
         rm_rf_subvolume_and_free(i->temp_path);
 
@@ -109,8 +107,8 @@
                 return -ENOMEM;
 
         *i = (TarImport) {
-                .input_fd = -1,
-                .tar_fd = -1,
+                .input_fd = -EBADF,
+                .tar_fd = -EBADF,
                 .on_finished = on_finished,
                 .userdata = userdata,
                 .last_percent = UINT_MAX,
@@ -136,13 +134,13 @@
         assert(i);
 
         /* We have no size information, unless the source is a regular file */
-        if (!S_ISREG(i->st.st_mode))
+        if (!S_ISREG(i->input_stat.st_mode))
                 return;
 
-        if (i->written_compressed >= (uint64_t) i->st.st_size)
+        if (i->written_compressed >= (uint64_t) i->input_stat.st_size)
                 percent = 100;
         else
-                percent = (unsigned) ((i->written_compressed * UINT64_C(100)) / (uint64_t) i->st.st_size);
+                percent = (unsigned) ((i->written_compressed * UINT64_C(100)) / (uint64_t) i->input_stat.st_size);
 
         if (percent == i->last_percent)
                 return;
@@ -157,40 +155,36 @@
 }
 
 static int tar_import_finish(TarImport *i) {
+        const char *d;
         int r;
 
         assert(i);
         assert(i->tar_fd >= 0);
-        assert(i->temp_path);
-        assert(i->final_path);
 
         i->tar_fd = safe_close(i->tar_fd);
 
         if (i->tar_pid > 0) {
-                r = wait_for_terminate_and_check("tar", i->tar_pid, WAIT_LOG);
-                i->tar_pid = 0;
+                r = wait_for_terminate_and_check("tar", TAKE_PID(i->tar_pid), WAIT_LOG);
                 if (r < 0)
                         return r;
                 if (r != EXIT_SUCCESS)
                         return -EPROTO;
         }
 
-        r = import_mangle_os_tree(i->temp_path);
+        assert_se(d = i->temp_path ?: i->local);
+
+        r = import_mangle_os_tree(d);
         if (r < 0)
                 return r;
 
-        if (i->flags & IMPORT_READ_ONLY) {
-                r = import_make_read_only(i->temp_path);
-                if (r < 0)
-                        return r;
-        }
-
-        if (i->flags & IMPORT_FORCE)
-                (void) rm_rf(i->final_path, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
-
-        r = rename_noreplace(AT_FDCWD, i->temp_path, AT_FDCWD, i->final_path);
+        r = install_file(
+                        AT_FDCWD, d,
+                        AT_FDCWD, i->final_path,
+                        (i->flags & IMPORT_FORCE ? INSTALL_REPLACE : 0) |
+                        (i->flags & IMPORT_READ_ONLY ? INSTALL_READ_ONLY : 0) |
+                        (i->flags & IMPORT_SYNC ? INSTALL_SYNCFS : 0));
         if (r < 0)
-                return log_error_errno(r, "Failed to move image into place: %m");
+                return log_error_errno(r, "Failed to move '%s' into place: %m", i->final_path ?: i->local);
 
         i->temp_path = mfree(i->temp_path);
 
@@ -198,33 +192,54 @@
 }
 
 static int tar_import_fork_tar(TarImport *i) {
+        const char *d, *root;
         int r;
 
         assert(i);
-
+        assert(i->local);
         assert(!i->final_path);
         assert(!i->temp_path);
         assert(i->tar_fd < 0);
 
-        i->final_path = path_join(i->image_root, i->local);
-        if (!i->final_path)
-                return log_oom();
+        if (i->flags & IMPORT_DIRECT) {
+                d = i->local;
+                root = NULL;
+        } else {
+                i->final_path = path_join(i->image_root, i->local);
+                if (!i->final_path)
+                        return log_oom();
 
-        r = tempfn_random(i->final_path, NULL, &i->temp_path);
-        if (r < 0)
-                return log_oom();
+                r = tempfn_random(i->final_path, NULL, &i->temp_path);
+                if (r < 0)
+                        return log_oom();
 
-        (void) mkdir_parents_label(i->temp_path, 0700);
-
-        r = btrfs_subvol_make_fallback(i->temp_path, 0755);
-        if (r < 0)
-                return log_error_errno(r, "Failed to create directory/subvolume %s: %m", i->temp_path);
-        if (r > 0) { /* actually btrfs subvol */
-                (void) import_assign_pool_quota_and_warn(i->image_root);
-                (void) import_assign_pool_quota_and_warn(i->temp_path);
+                d = i->temp_path;
+                root = i->image_root;
         }
 
-        i->tar_fd = import_fork_tar_x(i->temp_path, &i->tar_pid);
+        assert(d);
+
+        (void) mkdir_parents_label(d, 0700);
+
+        if (FLAGS_SET(i->flags, IMPORT_DIRECT|IMPORT_FORCE))
+                (void) rm_rf(d, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
+
+        if (i->flags & IMPORT_BTRFS_SUBVOL)
+                r = btrfs_subvol_make_fallback(d, 0755);
+        else
+                r = RET_NERRNO(mkdir(d, 0755));
+        if (r == -EEXIST && (i->flags & IMPORT_DIRECT)) /* EEXIST is OK if in direct mode, but not otherwise,
+                                                         * because in that case our temporary path collided */
+                r = 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to create directory/subvolume %s: %m", d);
+        if (r > 0 && (i->flags & IMPORT_BTRFS_QUOTA)) { /* actually btrfs subvol */
+                if (!(i->flags & IMPORT_DIRECT))
+                        (void) import_assign_pool_quota_and_warn(root);
+                (void) import_assign_pool_quota_and_warn(d);
+        }
+
+        i->tar_fd = import_fork_tar_x(d, &i->tar_pid);
         if (i->tar_fd < 0)
                 return i->tar_fd;
 
@@ -327,9 +342,9 @@
         assert(i);
         assert(fd >= 0);
         assert(local);
-        assert(!(flags & ~IMPORT_FLAGS_MASK));
+        assert(!(flags & ~IMPORT_FLAGS_MASK_TAR));
 
-        if (!hostname_is_valid(local, 0))
+        if (!import_validate_local(local, flags))
                 return -EINVAL;
 
         if (i->input_fd >= 0)
@@ -345,7 +360,7 @@
 
         i->flags = flags;
 
-        if (fstat(fd, &i->st) < 0)
+        if (fstat(fd, &i->input_stat) < 0)
                 return -errno;
 
         r = sd_event_add_io(i->event, &i->input_event_source, fd, EPOLLIN, tar_import_on_input, i);
@@ -361,5 +376,5 @@
                 return r;
 
         i->input_fd = fd;
-        return r;
+        return 0;
 }
diff --git a/src/import/import.c b/src/import/import.c
index fe4c03a..a81617d 100644
--- a/src/import/import.c
+++ b/src/import/import.c
@@ -7,27 +7,116 @@
 #include "sd-id128.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "discover-image.h"
+#include "env-util.h"
 #include "fd-util.h"
 #include "fs-util.h"
 #include "hostname-util.h"
 #include "import-raw.h"
 #include "import-tar.h"
 #include "import-util.h"
+#include "io-util.h"
 #include "main-func.h"
+#include "parse-argument.h"
+#include "parse-util.h"
 #include "signal-util.h"
 #include "string-util.h"
+#include "terminal-util.h"
 #include "verbs.h"
 
 static const char *arg_image_root = "/var/lib/machines";
-static ImportFlags arg_import_flags = 0;
+static ImportFlags arg_import_flags = IMPORT_BTRFS_SUBVOL | IMPORT_BTRFS_QUOTA | IMPORT_CONVERT_QCOW2 | IMPORT_SYNC;
+static uint64_t arg_offset = UINT64_MAX, arg_size_max = UINT64_MAX;
 
-static int interrupt_signal_handler(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        log_notice("Transfer aborted.");
-        sd_event_exit(sd_event_source_get_event(s), EINTR);
+static int normalize_local(const char *local, char **ret) {
+        _cleanup_free_ char *ll = NULL;
+        int r;
+
+        assert(ret);
+
+        if (arg_import_flags & IMPORT_DIRECT) {
+
+                if (!local)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No local path specified.");
+
+                if (!path_is_absolute(local))  {
+                        ll = path_join(arg_image_root, local);
+                        if (!ll)
+                                return log_oom();
+
+                        local = ll;
+                }
+
+                if (!path_is_valid(local))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Local path name '%s' is not valid.", local);
+        } else {
+                if (local) {
+                        if (!hostname_is_valid(local, 0))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Local image name '%s' is not valid.",
+                                                       local);
+                } else
+                        local = "imported";
+
+                if (!FLAGS_SET(arg_import_flags, IMPORT_FORCE)) {
+                        r = image_find(IMAGE_MACHINE, local, NULL, NULL);
+                        if (r < 0) {
+                                if (r != -ENOENT)
+                                        return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
+                        } else
+                                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
+                                                       "Image '%s' already exists.",
+                                                       local);
+                }
+        }
+
+        if (!ll) {
+                ll = strdup(local);
+                if (!ll)
+                        return log_oom();
+        }
+
+        *ret = TAKE_PTR(ll);
         return 0;
 }
 
+static int open_source(const char *path, const char *local, int *ret_open_fd) {
+        _cleanup_close_ int open_fd = -EBADF;
+        int retval;
+
+        assert(local);
+        assert(ret_open_fd);
+
+        if (path) {
+                open_fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY);
+                if (open_fd < 0)
+                        return log_error_errno(errno, "Failed to open source file '%s': %m", path);
+
+                retval = open_fd;
+
+                if (arg_offset != UINT64_MAX)
+                        log_info("Importing '%s', saving at offset %" PRIu64 " in '%s'.", path, arg_offset, local);
+                else
+                        log_info("Importing '%s', saving as '%s'.", path, local);
+        } else {
+                _cleanup_free_ char *pretty = NULL;
+
+                retval = STDIN_FILENO;
+
+                (void) fd_get_path(STDIN_FILENO, &pretty);
+
+                if (arg_offset != UINT64_MAX)
+                        log_info("Importing '%s', saving at offset %" PRIu64 " in '%s'.", strempty(pretty), arg_offset, local);
+                else
+                        log_info("Importing '%s', saving as '%s'.", strempty(pretty), local);
+        }
+
+        *ret_open_fd = TAKE_FD(open_fd);
+        return retval;
+}
+
 static void on_tar_finished(TarImport *import, int error, void *userdata) {
         sd_event *event = userdata;
         assert(import);
@@ -40,10 +129,10 @@
 
 static int import_tar(int argc, char *argv[], void *userdata) {
         _cleanup_(tar_import_unrefp) TarImport *import = NULL;
+        _cleanup_free_ char *ll = NULL, *normalized = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         const char *path = NULL, *local = NULL;
-        _cleanup_free_ char *ll = NULL;
-        _cleanup_close_ int open_fd = -1;
+        _cleanup_close_ int open_fd = -EBADF;
         int r, fd;
 
         if (argc >= 2)
@@ -51,64 +140,44 @@
 
         if (argc >= 3)
                 local = empty_or_dash_to_null(argv[2]);
-        else if (path)
-                local = basename(path);
+        else if (path) {
+                _cleanup_free_ char *l = NULL;
 
-        if (local) {
-                r = tar_strip_suffixes(local, &ll);
+                r = path_extract_filename(path, &l);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract filename from path '%s': %m", path);
+
+                r = tar_strip_suffixes(l, &ll);
                 if (r < 0)
                         return log_oom();
 
                 local = ll;
-
-                if (!hostname_is_valid(local, 0))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Local image name '%s' is not valid.",
-                                               local);
-
-                if (!FLAGS_SET(arg_import_flags, IMPORT_FORCE)) {
-                        r = image_find(IMAGE_MACHINE, local, NULL, NULL);
-                        if (r < 0) {
-                                if (r != -ENOENT)
-                                        return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
-                        } else
-                                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
-                                                       "Image '%s' already exists.",
-                                                       local);
-                }
-        } else
-                local = "imported";
-
-        if (path) {
-                open_fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                if (open_fd < 0)
-                        return log_error_errno(errno, "Failed to open tar image to import: %m");
-
-                fd = open_fd;
-
-                log_info("Importing '%s', saving as '%s'.", path, local);
-        } else {
-                _cleanup_free_ char *pretty = NULL;
-
-                fd = STDIN_FILENO;
-
-                (void) fd_get_path(fd, &pretty);
-                log_info("Importing '%s', saving as '%s'.", strna(pretty), local);
         }
 
-        r = sd_event_default(&event);
+        r = normalize_local(local, &normalized);
         if (r < 0)
-                return log_error_errno(r, "Failed to allocate event loop: %m");
+                return r;
 
-        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
-        (void) sd_event_add_signal(event, NULL, SIGTERM, interrupt_signal_handler,  NULL);
-        (void) sd_event_add_signal(event, NULL, SIGINT, interrupt_signal_handler, NULL);
+        fd = open_source(path, normalized, &open_fd);
+        if (fd < 0)
+                return r;
+
+        r = import_allocate_event_with_signals(&event);
+        if (r < 0)
+                return r;
+
+        if (!FLAGS_SET(arg_import_flags, IMPORT_SYNC))
+                log_info("File system synchronization on completion is off.");
 
         r = tar_import_new(&import, event, arg_image_root, on_tar_finished, event);
         if (r < 0)
                 return log_error_errno(r, "Failed to allocate importer: %m");
 
-        r = tar_import_start(import, fd, local, arg_import_flags);
+        r = tar_import_start(
+                        import,
+                        fd,
+                        normalized,
+                        arg_import_flags & IMPORT_FLAGS_MASK_TAR);
         if (r < 0)
                 return log_error_errno(r, "Failed to import image: %m");
 
@@ -132,10 +201,10 @@
 
 static int import_raw(int argc, char *argv[], void *userdata) {
         _cleanup_(raw_import_unrefp) RawImport *import = NULL;
+        _cleanup_free_ char *ll = NULL, *normalized = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         const char *path = NULL, *local = NULL;
-        _cleanup_free_ char *ll = NULL;
-        _cleanup_close_ int open_fd = -1;
+        _cleanup_close_ int open_fd = -EBADF;
         int r, fd;
 
         if (argc >= 2)
@@ -143,64 +212,46 @@
 
         if (argc >= 3)
                 local = empty_or_dash_to_null(argv[2]);
-        else if (path)
-                local = basename(path);
+        else if (path) {
+                _cleanup_free_ char *l = NULL;
 
-        if (local) {
-                r = raw_strip_suffixes(local, &ll);
+                r = path_extract_filename(path, &l);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract filename from path '%s': %m", path);
+
+                r = raw_strip_suffixes(l, &ll);
                 if (r < 0)
                         return log_oom();
 
                 local = ll;
-
-                if (!hostname_is_valid(local, 0))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Local image name '%s' is not valid.",
-                                               local);
-
-                if (!FLAGS_SET(arg_import_flags, IMPORT_FORCE)) {
-                        r = image_find(IMAGE_MACHINE, local, NULL, NULL);
-                        if (r < 0) {
-                                if (r != -ENOENT)
-                                        return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
-                        } else
-                                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
-                                                       "Image '%s' already exists.",
-                                                       local);
-                }
-        } else
-                local = "imported";
-
-        if (path) {
-                open_fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                if (open_fd < 0)
-                        return log_error_errno(errno, "Failed to open raw image to import: %m");
-
-                fd = open_fd;
-
-                log_info("Importing '%s', saving as '%s'.", path, local);
-        } else {
-                _cleanup_free_ char *pretty = NULL;
-
-                fd = STDIN_FILENO;
-
-                (void) fd_get_path(fd, &pretty);
-                log_info("Importing '%s', saving as '%s'.", strempty(pretty), local);
         }
 
-        r = sd_event_default(&event);
+        r = normalize_local(local, &normalized);
         if (r < 0)
-                return log_error_errno(r, "Failed to allocate event loop: %m");
+                return r;
 
-        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
-        (void) sd_event_add_signal(event, NULL, SIGTERM, interrupt_signal_handler,  NULL);
-        (void) sd_event_add_signal(event, NULL, SIGINT, interrupt_signal_handler, NULL);
+        fd = open_source(path, normalized, &open_fd);
+        if (fd < 0)
+                return fd;
+
+        r = import_allocate_event_with_signals(&event);
+        if (r < 0)
+                return r;
+
+        if (!FLAGS_SET(arg_import_flags, IMPORT_SYNC))
+                log_info("File system synchronization on completion is off.");
 
         r = raw_import_new(&import, event, arg_image_root, on_raw_finished, event);
         if (r < 0)
                 return log_error_errno(r, "Failed to allocate importer: %m");
 
-        r = raw_import_start(import, fd, local, arg_import_flags);
+        r = raw_import_start(
+                        import,
+                        fd,
+                        normalized,
+                        arg_offset,
+                        arg_size_max,
+                        arg_import_flags & IMPORT_FLAGS_MASK_RAW);
         if (r < 0)
                 return log_error_errno(r, "Failed to import image: %m");
 
@@ -214,17 +265,32 @@
 
 static int help(int argc, char *argv[], void *userdata) {
 
-        printf("%s [OPTIONS...] {COMMAND} ...\n\n"
-               "Import container or virtual machine images.\n\n"
+        printf("%1$s [OPTIONS...] {COMMAND} ...\n"
+               "\n%4$sImport container or virtual machine images.%5$s\n"
+               "\n%2$sCommands:%3$s\n"
+               "  tar FILE [NAME]             Import a TAR image\n"
+               "  raw FILE [NAME]             Import a RAW image\n"
+               "\n%2$sOptions:%3$s\n"
                "  -h --help                   Show this help\n"
                "     --version                Show package version\n"
                "     --force                  Force creation of image\n"
                "     --image-root=PATH        Image root directory\n"
-               "     --read-only              Create a read-only image\n\n"
-               "Commands:\n"
-               "  tar FILE [NAME]             Import a TAR image\n"
-               "  raw FILE [NAME]             Import a RAW image\n",
-               program_invocation_short_name);
+               "     --read-only              Create a read-only image\n"
+               "     --direct                 Import directly to specified file\n"
+               "     --btrfs-subvol=BOOL      Controls whether to create a btrfs subvolume\n"
+               "                              instead of a directory\n"
+               "     --btrfs-quota=BOOL       Controls whether to set up quota for btrfs\n"
+               "                              subvolume\n"
+               "     --convert-qcow2=BOOL     Controls whether to convert QCOW2 images to\n"
+               "                              regular disk images\n"
+               "     --sync=BOOL              Controls whether to sync() before completing\n"
+               "     --offset=BYTES           Offset to seek to in destination\n"
+               "     --size-max=BYTES         Maximum number of bytes to write to destination\n",
+               program_invocation_short_name,
+               ansi_underline(),
+               ansi_normal(),
+               ansi_highlight(),
+               ansi_normal());
 
         return 0;
 }
@@ -236,6 +302,13 @@
                 ARG_FORCE,
                 ARG_IMAGE_ROOT,
                 ARG_READ_ONLY,
+                ARG_DIRECT,
+                ARG_BTRFS_SUBVOL,
+                ARG_BTRFS_QUOTA,
+                ARG_CONVERT_QCOW2,
+                ARG_SYNC,
+                ARG_OFFSET,
+                ARG_SIZE_MAX,
         };
 
         static const struct option options[] = {
@@ -244,10 +317,17 @@
                 { "force",           no_argument,       NULL, ARG_FORCE           },
                 { "image-root",      required_argument, NULL, ARG_IMAGE_ROOT      },
                 { "read-only",       no_argument,       NULL, ARG_READ_ONLY       },
+                { "direct",          no_argument,       NULL, ARG_DIRECT          },
+                { "btrfs-subvol",    required_argument, NULL, ARG_BTRFS_SUBVOL    },
+                { "btrfs-quota",     required_argument, NULL, ARG_BTRFS_QUOTA     },
+                { "convert-qcow2",   required_argument, NULL, ARG_CONVERT_QCOW2   },
+                { "sync",            required_argument, NULL, ARG_SYNC            },
+                { "offset",          required_argument, NULL, ARG_OFFSET          },
+                { "size-max",        required_argument, NULL, ARG_SIZE_MAX        },
                 {}
         };
 
-        int c;
+        int r, c;
 
         assert(argc >= 0);
         assert(argv);
@@ -274,13 +354,84 @@
                         arg_import_flags |= IMPORT_READ_ONLY;
                         break;
 
+                case ARG_DIRECT:
+                        arg_import_flags |= IMPORT_DIRECT;
+                        break;
+
+                case ARG_BTRFS_SUBVOL:
+                        r = parse_boolean_argument("--btrfs-subvol=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_import_flags, IMPORT_BTRFS_SUBVOL, r);
+                        break;
+
+                case ARG_BTRFS_QUOTA:
+                        r = parse_boolean_argument("--btrfs-quota=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_import_flags, IMPORT_BTRFS_QUOTA, r);
+                        break;
+
+                case ARG_CONVERT_QCOW2:
+                        r = parse_boolean_argument("--convert-qcow2=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_import_flags, IMPORT_CONVERT_QCOW2, r);
+                        break;
+
+                case ARG_SYNC:
+                        r = parse_boolean_argument("--sync=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_import_flags, IMPORT_SYNC, r);
+                        break;
+
+                case ARG_OFFSET: {
+                        uint64_t u;
+
+                        r = safe_atou64(optarg, &u);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --offset= argument: %s", optarg);
+                        if (!FILE_SIZE_VALID(u))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Argument to --offset= switch too large: %s", optarg);
+
+                        arg_offset = u;
+                        break;
+                }
+
+                case ARG_SIZE_MAX: {
+                        uint64_t u;
+
+                        r = parse_size(optarg, 1024, &u);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --size-max= argument: %s", optarg);
+                        if (!FILE_SIZE_VALID(u))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Argument to --size-max= switch too large: %s", optarg);
+
+                        arg_size_max = u;
+                        break;
+                }
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
+        /* Make sure offset+size is still in the valid range if both set */
+        if (arg_offset != UINT64_MAX && arg_size_max != UINT64_MAX &&
+            ((arg_size_max > (UINT64_MAX - arg_offset)) ||
+             !FILE_SIZE_VALID(arg_offset + arg_size_max)))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "File offset und maximum size out of range.");
+
+        if (arg_offset != UINT64_MAX && !FLAGS_SET(arg_import_flags, IMPORT_DIRECT))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "File offset only supported in --direct mode.");
+
         return 1;
 }
 
@@ -295,6 +446,31 @@
         return dispatch_verb(argc, argv, verbs, NULL);
 }
 
+static void parse_env(void) {
+        int r;
+
+        /* Let's make these relatively low-level settings also controllable via env vars. User can then set
+         * them to systemd-import if they like to tweak behaviour */
+
+        r = getenv_bool("SYSTEMD_IMPORT_BTRFS_SUBVOL");
+        if (r >= 0)
+                SET_FLAG(arg_import_flags, IMPORT_BTRFS_SUBVOL, r);
+        else if (r != -ENXIO)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_IMPORT_BTRFS_SUBVOL: %m");
+
+        r = getenv_bool("SYSTEMD_IMPORT_BTRFS_QUOTA");
+        if (r >= 0)
+                SET_FLAG(arg_import_flags, IMPORT_BTRFS_QUOTA, r);
+        else if (r != -ENXIO)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_IMPORT_BTRFS_QUOTA: %m");
+
+        r = getenv_bool("SYSTEMD_IMPORT_SYNC");
+        if (r >= 0)
+                SET_FLAG(arg_import_flags, IMPORT_SYNC, r);
+        else if (r != -ENXIO)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_IMPORT_SYNC: %m");
+}
+
 static int run(int argc, char *argv[]) {
         int r;
 
@@ -302,9 +478,11 @@
         log_parse_environment();
         log_open();
 
+        parse_env();
+
         r = parse_argv(argc, argv);
         if (r <= 0)
-                return 0;
+                return r;
 
         (void) ignore_signals(SIGPIPE);
 
diff --git a/src/import/importd.c b/src/import/importd.c
index f0f61ca..65647a6 100644
--- a/src/import/importd.c
+++ b/src/import/importd.c
@@ -10,7 +10,7 @@
 #include "bus-get-properties.h"
 #include "bus-log-control-api.h"
 #include "bus-polkit.h"
-#include "def.h"
+#include "constants.h"
 #include "env-util.h"
 #include "fd-util.h"
 #include "float.h"
@@ -19,7 +19,7 @@
 #include "machine-pool.h"
 #include "main-func.h"
 #include "missing_capability.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "percent-util.h"
@@ -32,7 +32,6 @@
 #include "strv.h"
 #include "syslog-util.h"
 #include "user-util.h"
-#include "util.h"
 #include "web-util.h"
 
 typedef struct Transfer Transfer;
@@ -95,6 +94,9 @@
         int notify_fd;
 
         sd_event_source *notify_event_source;
+
+        bool use_btrfs_subvol;
+        bool use_btrfs_quota;
 };
 
 #define TRANSFERS_MAX 64
@@ -126,10 +128,8 @@
         free(t->format);
         free(t->object_path);
 
-        if (t->pid > 0) {
-                (void) kill_and_sigcont(t->pid, SIGKILL);
-                (void) wait_for_terminate(t->pid, NULL);
-        }
+        if (t->pid > 1)
+                sigkill_wait(t->pid);
 
         safe_close(t->log_fd);
         safe_close(t->stdin_fd);
@@ -157,9 +157,9 @@
 
         *t = (Transfer) {
                 .type = _TRANSFER_TYPE_INVALID,
-                .log_fd = -1,
-                .stdin_fd = -1,
-                .stdout_fd = -1,
+                .log_fd = -EBADF,
+                .stdin_fd = -EBADF,
+                .stdout_fd = -EBADF,
                 .verify = _IMPORT_VERIFY_INVALID,
                 .progress_percent= UINT_MAX,
         };
@@ -308,11 +308,10 @@
 }
 
 static int transfer_on_pid(sd_event_source *s, const siginfo_t *si, void *userdata) {
-        Transfer *t = userdata;
+        Transfer *t = ASSERT_PTR(userdata);
         bool success = false;
 
         assert(s);
-        assert(t);
 
         if (si->si_code == CLD_EXITED) {
                 if (si->si_status != 0)
@@ -333,11 +332,10 @@
 }
 
 static int transfer_on_log(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Transfer *t = userdata;
+        Transfer *t = ASSERT_PTR(userdata);
         ssize_t l;
 
         assert(s);
-        assert(t);
 
         l = read(fd, t->log_message + t->log_message_size, sizeof(t->log_message) - t->log_message_size);
         if (l < 0)
@@ -358,7 +356,7 @@
 }
 
 static int transfer_start(Transfer *t) {
-        _cleanup_close_pair_ int pipefd[2] = { -1, -1 };
+        _cleanup_close_pair_ int pipefd[2] = PIPE_EBADF;
         int r;
 
         assert(t);
@@ -391,9 +389,10 @@
 
                 pipefd[0] = safe_close(pipefd[0]);
 
-                r = rearrange_stdio(t->stdin_fd,
-                                    t->stdout_fd < 0 ? pipefd[1] : t->stdout_fd,
+                r = rearrange_stdio(TAKE_FD(t->stdin_fd),
+                                    t->stdout_fd < 0 ? pipefd[1] : TAKE_FD(t->stdout_fd),
                                     pipefd[1]);
+                TAKE_FD(pipefd[1]);
                 if (r < 0) {
                         log_error_errno(r, "Failed to set stdin/stdout/stderr: %m");
                         _exit(EXIT_FAILURE);
@@ -431,7 +430,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unexpected transfer type");
+                        assert_not_reached();
                 }
 
                 switch (t->type) {
@@ -568,10 +567,11 @@
         int r;
 
         n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
-        if (IN_SET(n, -EAGAIN, -EINTR))
-                return 0;
-        if (n < 0)
+        if (n < 0) {
+                if (ERRNO_IS_TRANSIENT(n))
+                        return 0;
                 return (int) n;
+        }
 
         cmsg_close_all(&msghdr);
 
@@ -631,10 +631,15 @@
 
         assert(ret);
 
-        m = new0(Manager, 1);
+        m = new(Manager, 1);
         if (!m)
                 return -ENOMEM;
 
+        *m = (Manager) {
+                .use_btrfs_subvol = true,
+                .use_btrfs_quota = true,
+        };
+
         r = sd_event_default(&m->event);
         if (r < 0)
                 return r;
@@ -687,13 +692,12 @@
         _cleanup_(transfer_unrefp) Transfer *t = NULL;
         int fd, force, read_only, r;
         const char *local, *object;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         TransferType type;
         struct stat st;
         uint32_t id;
 
         assert(msg);
-        assert(m);
 
         r = bus_verify_polkit_async(
                         msg,
@@ -723,7 +727,7 @@
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                          "Local name %s is invalid", local);
 
-        r = setup_machine_directory(error);
+        r = setup_machine_directory(error, m->use_btrfs_subvol, m->use_btrfs_quota);
         if (r < 0)
                 return r;
 
@@ -761,11 +765,10 @@
         _cleanup_(transfer_unrefp) Transfer *t = NULL;
         int fd, force, read_only, r;
         const char *local, *object;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint32_t id;
 
         assert(msg);
-        assert(m);
 
         r = bus_verify_polkit_async(
                         msg,
@@ -793,7 +796,7 @@
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                          "Local name %s is invalid", local);
 
-        r = setup_machine_directory(error);
+        r = setup_machine_directory(error, m->use_btrfs_subvol, m->use_btrfs_quota);
         if (r < 0)
                 return r;
 
@@ -828,13 +831,12 @@
         _cleanup_(transfer_unrefp) Transfer *t = NULL;
         int fd, r;
         const char *local, *object, *format;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         TransferType type;
         struct stat st;
         uint32_t id;
 
         assert(msg);
-        assert(m);
 
         r = bus_verify_polkit_async(
                         msg,
@@ -901,14 +903,13 @@
 static int method_pull_tar_or_raw(sd_bus_message *msg, void *userdata, sd_bus_error *error) {
         _cleanup_(transfer_unrefp) Transfer *t = NULL;
         const char *remote, *local, *verify, *object;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         ImportVerify v;
         TransferType type;
         int force, r;
         uint32_t id;
 
         assert(msg);
-        assert(m);
 
         r = bus_verify_polkit_async(
                         msg,
@@ -928,7 +929,7 @@
         if (r < 0)
                 return r;
 
-        if (!http_url_is_valid(remote))
+        if (!http_url_is_valid(remote) && !file_url_is_valid(remote))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                          "URL %s is invalid", remote);
 
@@ -946,7 +947,7 @@
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                          "Unknown verification mode %s", verify);
 
-        r = setup_machine_directory(error);
+        r = setup_machine_directory(error, m->use_btrfs_subvol, m->use_btrfs_quota);
         if (r < 0)
                 return r;
 
@@ -988,12 +989,11 @@
 
 static int method_list_transfers(sd_bus_message *msg, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Transfer *t;
         int r;
 
         assert(msg);
-        assert(m);
 
         r = sd_bus_message_new_method_return(msg, &reply);
         if (r < 0)
@@ -1026,11 +1026,10 @@
 }
 
 static int method_cancel(sd_bus_message *msg, void *userdata, sd_bus_error *error) {
-        Transfer *t = userdata;
+        Transfer *t = ASSERT_PTR(userdata);
         int r;
 
         assert(msg);
-        assert(t);
 
         r = bus_verify_polkit_async(
                         msg,
@@ -1054,13 +1053,12 @@
 }
 
 static int method_cancel_transfer(sd_bus_message *msg, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Transfer *t;
         uint32_t id;
         int r;
 
         assert(msg);
-        assert(m);
 
         r = bus_verify_polkit_async(
                         msg,
@@ -1102,11 +1100,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Transfer *t = userdata;
+        Transfer *t = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(t);
 
         return sd_bus_message_append(reply, "d", transfer_percent_as_double(t));
 }
@@ -1122,7 +1119,7 @@
                 void **found,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Transfer *t;
         const char *p;
         uint32_t id;
@@ -1132,7 +1129,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         p = startswith(path, "/org/freedesktop/import1/transfer/_");
         if (!p)
@@ -1363,6 +1359,28 @@
                         m);
 }
 
+static void manager_parse_env(Manager *m) {
+        int r;
+
+        assert(m);
+
+        /* Same as src/import/{import,pull}.c:
+         * Let's make these relatively low-level settings also controllable via env vars. User can then set
+         * them for systemd-importd.service if they like to tweak behaviour */
+
+        r = getenv_bool("SYSTEMD_IMPORT_BTRFS_SUBVOL");
+        if (r >= 0)
+                m->use_btrfs_subvol = r;
+        else if (r != -ENXIO)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_IMPORT_BTRFS_SUBVOL: %m");
+
+        r = getenv_bool("SYSTEMD_IMPORT_BTRFS_QUOTA");
+        if (r >= 0)
+                m->use_btrfs_quota = r;
+        else if (r != -ENXIO)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_IMPORT_BTRFS_QUOTA: %m");
+}
+
 static int run(int argc, char *argv[]) {
         _cleanup_(manager_unrefp) Manager *m = NULL;
         int r;
@@ -1385,6 +1403,8 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to allocate manager object: %m");
 
+        manager_parse_env(m);
+
         r = manager_add_bus_objects(m);
         if (r < 0)
                 return r;
diff --git a/src/import/meson.build b/src/import/meson.build
index b3bc682..41595c8 100644
--- a/src/import/meson.build
+++ b/src/import/meson.build
@@ -1,62 +1,44 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_importd_sources = files('''
-        importd.c
-'''.split())
+systemd_importd_sources = files(
+        'importd.c')
 
-systemd_pull_sources = files('''
-        pull.c
-        pull-raw.c
-        pull-raw.h
-        pull-tar.c
-        pull-tar.h
-        pull-job.c
-        pull-job.h
-        pull-common.c
-        pull-common.h
-        import-common.c
-        import-common.h
-        import-compress.c
-        import-compress.h
-        curl-util.c
-        curl-util.h
-        qcow2-util.c
-        qcow2-util.h
-'''.split())
+systemd_pull_sources = files(
+        'pull.c',
+        'pull-raw.c',
+        'pull-tar.c',
+        'pull-job.c',
+        'pull-common.c',
+        'curl-util.c',
+)
 
-systemd_import_sources = files('''
-        import.c
-        import-raw.c
-        import-raw.h
-        import-tar.c
-        import-tar.h
-        import-common.c
-        import-common.h
-        import-compress.c
-        import-compress.h
-        qcow2-util.c
-        qcow2-util.h
-'''.split())
+systemd_import_sources = files(
+        'import.c',
+        'import-raw.c',
+        'import-tar.c',
+)
 
-systemd_import_fs_sources = files('''
-        import-fs.c
-        import-common.c
-        import-common.h
-'''.split())
+systemd_import_fs_sources = files(
+        'import-fs.c')
 
-systemd_export_sources = files('''
-        export.c
-        export-tar.c
-        export-tar.h
-        export-raw.c
-        export-raw.h
-        import-common.c
-        import-common.h
-        import-compress.c
-        import-compress.h
-'''.split())
+systemd_export_sources = files(
+        'export.c',
+        'export-tar.c',
+        'export-raw.c',
+)
 
 if conf.get('ENABLE_IMPORTD') == 1
+        lib_import_common = static_library(
+                'import-common',
+                'import-common.c',
+                'import-compress.c',
+                'qcow2-util.c',
+                include_directories : includes,
+                dependencies : [libbzip2,
+                                libxz,
+                                libz],
+                build_by_default : false)
+
         install_data('org.freedesktop.import1.conf',
                      install_dir : dbuspolicydir)
         install_data('org.freedesktop.import1.service',
@@ -70,9 +52,8 @@
 endif
 
 tests += [
-        [['src/import/test-qcow2.c',
-          'src/import/qcow2-util.c',
-          'src/import/qcow2-util.h'],
+        [files('test-qcow2.c',
+               'qcow2-util.c'),
          [],
          [libz],
          [], 'HAVE_ZLIB', 'manual'],
diff --git a/src/import/org.freedesktop.import1.conf b/src/import/org.freedesktop.import1.conf
index 4838e79..d252ff6 100644
--- a/src/import/org.freedesktop.import1.conf
+++ b/src/import/org.freedesktop.import1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/import/org.freedesktop.import1.policy b/src/import/org.freedesktop.import1.policy
index e88a6e8..88e436d 100644
--- a/src/import/org.freedesktop.import1.policy
+++ b/src/import/org.freedesktop.import1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/import/pull-common.c b/src/import/pull-common.c
index 75c5c74..c8a3bf3 100644
--- a/src/import/pull-common.c
+++ b/src/import/pull-common.c
@@ -9,18 +9,18 @@
 #include "dirent-util.h"
 #include "escape.h"
 #include "fd-util.h"
+#include "hostname-util.h"
 #include "io-util.h"
+#include "memory-util.h"
 #include "path-util.h"
 #include "process-util.h"
 #include "pull-common.h"
 #include "pull-job.h"
-#include "rlimit-util.h"
 #include "rm-rf.h"
 #include "signal-util.h"
 #include "siphash24.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
 #include "web-util.h"
 
 #define FILENAME_ESCAPE "/.#\"\'"
@@ -34,10 +34,6 @@
                 const char *suffix,
                 char ***etags) {
 
-        _cleanup_free_ char *escaped_url = NULL;
-        _cleanup_closedir_ DIR *d = NULL;
-        _cleanup_strv_free_ char **l = NULL;
-        struct dirent *de;
         int r;
 
         assert(url);
@@ -46,11 +42,11 @@
         if (!image_root)
                 image_root = "/var/lib/machines";
 
-        escaped_url = xescape(url, FILENAME_ESCAPE);
+        _cleanup_free_ char *escaped_url = xescape(url, FILENAME_ESCAPE);
         if (!escaped_url)
                 return -ENOMEM;
 
-        d = opendir(image_root);
+        _cleanup_closedir_ DIR *d = opendir(image_root);
         if (!d) {
                 if (errno == ENOENT) {
                         *etags = NULL;
@@ -60,6 +56,8 @@
                 return -errno;
         }
 
+        _cleanup_strv_free_ char **ans = NULL;
+
         FOREACH_DIRENT_ALL(de, d, return -errno) {
                 _cleanup_free_ char *u = NULL;
                 const char *a, *b;
@@ -93,47 +91,21 @@
                 if (a >= b)
                         continue;
 
-                r = cunescape_length(a, b - a, 0, &u);
-                if (r < 0)
-                        return r;
+                ssize_t l = cunescape_length(a, b - a, 0, &u);
+                if (l < 0) {
+                        assert(l >= INT8_MIN);
+                        return l;
+                }
 
                 if (!http_etag_is_valid(u))
                         continue;
 
-                r = strv_consume(&l, TAKE_PTR(u));
+                r = strv_consume(&ans, TAKE_PTR(u));
                 if (r < 0)
                         return r;
         }
 
-        *etags = TAKE_PTR(l);
-
-        return 0;
-}
-
-int pull_make_local_copy(const char *final, const char *image_root, const char *local, PullFlags flags) {
-        const char *p;
-        int r;
-
-        assert(final);
-        assert(local);
-
-        if (!image_root)
-                image_root = "/var/lib/machines";
-
-        p = prefix_roota(image_root, local);
-
-        if (FLAGS_SET(flags, PULL_FORCE))
-                (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
-
-        r = btrfs_subvol_snapshot(final, p,
-                                  BTRFS_SNAPSHOT_QUOTA|
-                                  BTRFS_SNAPSHOT_FALLBACK_COPY|
-                                  BTRFS_SNAPSHOT_FALLBACK_DIRECTORY|
-                                  BTRFS_SNAPSHOT_RECURSIVE);
-        if (r < 0)
-                return log_error_errno(r, "Failed to create local image: %m");
-
-        log_info("Created new local image '%s'.", local);
+        *etags = TAKE_PTR(ans);
 
         return 0;
 }
@@ -204,7 +176,9 @@
                 const char *url,
                 int (*strip_suffixes)(const char *name, char **ret),
                 const char *suffix,
+                ImportVerify verify,
                 CurlGlue *glue,
+                PullJobOpenDisk on_open_disk,
                 PullJobFinished on_finished,
                 void *userdata) {
 
@@ -236,45 +210,82 @@
         if (r < 0)
                 return r;
 
+        job->on_open_disk = on_open_disk;
         job->on_finished = on_finished;
         job->compressed_max = job->uncompressed_max = 1ULL * 1024ULL * 1024ULL;
+        job->calc_checksum = IN_SET(verify, IMPORT_VERIFY_CHECKSUM, IMPORT_VERIFY_SIGNATURE);
 
         *ret = TAKE_PTR(job);
-
         return 0;
 }
 
+static bool is_checksum_file(const char *fn) {
+        /* Returns true if the specified filename refers to a checksum file we grok */
+
+        if (!fn)
+                return false;
+
+        return streq(fn, "SHA256SUMS") || endswith(fn, ".sha256");
+}
+
+static bool is_signature_file(const char *fn) {
+        /* Returns true if the specified filename refers to a signature file we grok (reminder:
+         * suse-style .sha256 files are inline signed) */
+
+        if (!fn)
+                return false;
+
+        return streq(fn, "SHA256SUMS.gpg") || endswith(fn, ".sha256");
+}
+
 int pull_make_verification_jobs(
                 PullJob **ret_checksum_job,
                 PullJob **ret_signature_job,
                 ImportVerify verify,
+                const char *checksum, /* set if literal checksum verification is requested, in which case 'verify' is set to _IMPORT_VERIFY_INVALID */
                 const char *url,
                 CurlGlue *glue,
                 PullJobFinished on_finished,
                 void *userdata) {
 
         _cleanup_(pull_job_unrefp) PullJob *checksum_job = NULL, *signature_job = NULL;
+        _cleanup_free_ char *fn = NULL;
         int r;
 
         assert(ret_checksum_job);
         assert(ret_signature_job);
-        assert(verify >= 0);
-        assert(verify < _IMPORT_VERIFY_MAX);
+        assert(verify == _IMPORT_VERIFY_INVALID || verify < _IMPORT_VERIFY_MAX);
+        assert(verify == _IMPORT_VERIFY_INVALID || verify >= 0);
+        assert((verify < 0) || !checksum);
         assert(url);
         assert(glue);
 
-        if (verify != IMPORT_VERIFY_NO) {
-                _cleanup_free_ char *checksum_url = NULL, *fn = NULL;
-                const char *chksums = NULL;
+        /* If verification is turned off, or if the checksum to validate is already specified we don't need
+         * to download a checksum file or signature, hence shortcut things */
+        if (verify == IMPORT_VERIFY_NO || checksum) {
+                *ret_checksum_job = *ret_signature_job = NULL;
+                return 0;
+        }
+
+        r = import_url_last_component(url, &fn);
+        if (r < 0 && r != -EADDRNOTAVAIL) /* EADDRNOTAVAIL means there was no last component, which is OK for
+                                           * us, we'll just assume it's not a checksum/signature file */
+                return r;
+
+        /* Acquire the checksum file if verification or signature verification is requested and the main file
+         * to acquire isn't a checksum or signature file anyway */
+        if (verify != IMPORT_VERIFY_NO && !is_checksum_file(fn) && !is_signature_file(fn)) {
+                _cleanup_free_ char *checksum_url = NULL;
+                const char *suffixed = NULL;
 
                 /* Queue jobs for the checksum file for the image. */
-                r = import_url_last_component(url, &fn);
-                if (r < 0)
-                        return r;
 
-                chksums = strjoina(fn, ".sha256");
+                if (fn)
+                        suffixed = strjoina(fn, ".sha256"); /* Start with the suse-style checksum (if there's a base filename) */
+                else
+                        suffixed = "SHA256SUMS";
 
-                r = import_url_change_last_component(url, chksums, &checksum_url);
+                r = import_url_change_last_component(url, suffixed, &checksum_url);
                 if (r < 0)
                         return r;
 
@@ -284,9 +295,10 @@
 
                 checksum_job->on_finished = on_finished;
                 checksum_job->uncompressed_max = checksum_job->compressed_max = 1ULL * 1024ULL * 1024ULL;
+                checksum_job->on_not_found = pull_job_restart_with_sha256sum; /* if this fails, look for ubuntu-style checksum */
         }
 
-        if (verify == IMPORT_VERIFY_SIGNATURE) {
+        if (verify == IMPORT_VERIFY_SIGNATURE && !is_signature_file(fn)) {
                 _cleanup_free_ char *signature_url = NULL;
 
                 /* Queue job for the SHA256SUMS.gpg file for the image. */
@@ -304,7 +316,6 @@
 
         *ret_checksum_job = TAKE_PTR(checksum_job);
         *ret_signature_job = TAKE_PTR(signature_job);
-
         return 0;
 }
 
@@ -333,31 +344,33 @@
 
         r = import_url_last_component(job->url, &fn);
         if (r < 0)
-                return log_oom();
+                return log_error_errno(r, "Failed to extract filename from URL '%s': %m", job->url);
 
         if (!filename_is_valid(fn))
                 return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
                                        "Cannot verify checksum, could not determine server-side file name.");
 
-        line = strjoina(job->checksum, " *", fn, "\n");
+        if (is_checksum_file(fn) || is_signature_file(fn)) /* We cannot verify checksum files or signature files with a checksum file */
+                return log_error_errno(SYNTHETIC_ERRNO(ELOOP),
+                                       "Cannot verify checksum/signature files via themselves.");
 
-        p = memmem(checksum_job->payload,
-                   checksum_job->payload_size,
-                   line,
-                   strlen(line));
-
-        if (!p) {
-                line = strjoina(job->checksum, "  ", fn, "\n");
-
-                p = memmem(checksum_job->payload,
+        line = strjoina(job->checksum, " *", fn, "\n"); /* string for binary mode */
+        p = memmem_safe(checksum_job->payload,
                         checksum_job->payload_size,
                         line,
                         strlen(line));
+        if (!p) {
+                line = strjoina(job->checksum, "  ", fn, "\n"); /* string for text mode */
+                p = memmem_safe(checksum_job->payload,
+                                checksum_job->payload_size,
+                                line,
+                                strlen(line));
         }
 
+        /* Only counts if found at beginning of a line */
         if (!p || (p != (char*) checksum_job->payload && p[-1] != '\n'))
                 return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "DOWNLOAD INVALID: Checksum of %s file did not checkout, file has been tampered with.", fn);
+                                       "DOWNLOAD INVALID: Checksum of %s file did not check out, file has been tampered with.", fn);
 
         log_info("SHA256 checksum of %s is valid.", job->url);
         return 1;
@@ -367,7 +380,7 @@
                 const void *payload, size_t payload_size,
                 const void *signature, size_t signature_size) {
 
-        _cleanup_close_pair_ int gpg_pipe[2] = { -1, -1 };
+        _cleanup_close_pair_ int gpg_pipe[2] = PIPE_EBADF;
         char sig_file_path[] = "/tmp/sigXXXXXX", gpg_home[] = "/tmp/gpghomeXXXXXX";
         _cleanup_(sigkill_waitp) pid_t pid = 0;
         bool gpg_home_created = false;
@@ -381,7 +394,7 @@
                 return log_error_errno(errno, "Failed to create pipe for gpg: %m");
 
         if (signature_size > 0) {
-                _cleanup_close_ int sig_file = -1;
+                _cleanup_close_ int sig_file = -EBADF;
 
                 sig_file = mkostemp(sig_file_path, O_RDWR);
                 if (sig_file < 0)
@@ -401,7 +414,7 @@
 
         gpg_home_created = true;
 
-        r = safe_fork("(gpg)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
+        r = safe_fork("(gpg)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG|FORK_RLIMIT_NOFILE_SAFE, &pid);
         if (r < 0)
                 return r;
         if (r == 0) {
@@ -426,14 +439,12 @@
 
                 gpg_pipe[1] = safe_close(gpg_pipe[1]);
 
-                r = rearrange_stdio(gpg_pipe[0], -1, STDERR_FILENO);
+                r = rearrange_stdio(TAKE_FD(gpg_pipe[0]), -EBADF, STDERR_FILENO);
                 if (r < 0) {
                         log_error_errno(r, "Failed to rearrange stdin/stdout: %m");
                         _exit(EXIT_FAILURE);
                 }
 
-                (void) rlimit_nofile_safe();
-
                 cmd[k++] = strjoina("--homedir=", gpg_home);
 
                 /* We add the user keyring only to the command line arguments, if it's around since gpg fails
@@ -466,14 +477,13 @@
 
         gpg_pipe[1] = safe_close(gpg_pipe[1]);
 
-        r = wait_for_terminate_and_check("gpg", pid, WAIT_LOG_ABNORMAL);
-        pid = 0;
+        r = wait_for_terminate_and_check("gpg", TAKE_PID(pid), WAIT_LOG_ABNORMAL);
         if (r < 0)
                 goto finish;
-        if (r != EXIT_SUCCESS) {
-                log_error("DOWNLOAD INVALID: Signature verification failed.");
-                r = -EBADMSG;
-        } else {
+        if (r != EXIT_SUCCESS)
+                r = log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                    "DOWNLOAD INVALID: Signature verification failed.");
+        else {
                 log_info("Signature verification succeeded.");
                 r = 0;
         }
@@ -489,6 +499,7 @@
 }
 
 int pull_verify(ImportVerify verify,
+                const char *checksum, /* Verify with literal checksum */
                 PullJob *main_job,
                 PullJob *checksum_job,
                 PullJob *signature_job,
@@ -497,37 +508,79 @@
                 PullJob *roothash_signature_job,
                 PullJob *verity_job) {
 
+        _cleanup_free_ char *fn = NULL;
         VerificationStyle style;
-        PullJob *j;
+        PullJob *verify_job;
         int r;
 
+        assert(verify == _IMPORT_VERIFY_INVALID || verify < _IMPORT_VERIFY_MAX);
+        assert(verify == _IMPORT_VERIFY_INVALID || verify >= 0);
+        assert((verify < 0) || !checksum);
         assert(main_job);
         assert(main_job->state == PULL_JOB_DONE);
 
-        if (verify == IMPORT_VERIFY_NO)
+        if (verify == IMPORT_VERIFY_NO) /* verification turned off */
                 return 0;
 
-        assert(main_job->calc_checksum);
-        assert(main_job->checksum);
-        assert(checksum_job);
-        assert(checksum_job->state == PULL_JOB_DONE);
+        if (checksum) {
+                /* Verification by literal checksum */
+                assert(!checksum_job);
+                assert(!signature_job);
+                assert(!settings_job);
+                assert(!roothash_job);
+                assert(!roothash_signature_job);
+                assert(!verity_job);
 
-        if (!checksum_job->payload || checksum_job->payload_size <= 0)
-                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "Checksum is empty, cannot verify.");
+                assert(main_job->calc_checksum);
+                assert(main_job->checksum);
 
-        FOREACH_POINTER(j, main_job, settings_job, roothash_job, roothash_signature_job, verity_job) {
-                r = verify_one(checksum_job, j);
-                if (r < 0)
-                        return r;
+                if (!strcaseeq(checksum, main_job->checksum))
+                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                               "DOWNLOAD INVALID: Checksum of %s file did not check out, file has been tampered with.",
+                                               main_job->url);
+
+                return 0;
         }
 
-        if (verify == IMPORT_VERIFY_CHECKSUM)
+        r = import_url_last_component(main_job->url, &fn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from URL '%s': %m", main_job->url);
+
+        if (is_signature_file(fn))
+                return log_error_errno(SYNTHETIC_ERRNO(ELOOP),
+                                       "Main download is a signature file, can't verify it.");
+
+        if (is_checksum_file(fn)) {
+                log_debug("Main download is a checksum file, can't validate its checksum with itself, skipping.");
+                verify_job = main_job;
+        } else {
+                PullJob *j;
+                assert(main_job->calc_checksum);
+                assert(main_job->checksum);
+                assert(checksum_job);
+                assert(checksum_job->state == PULL_JOB_DONE);
+
+                if (!checksum_job->payload || checksum_job->payload_size <= 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                               "Checksum is empty, cannot verify.");
+
+                FOREACH_POINTER(j, main_job, settings_job, roothash_job, roothash_signature_job, verity_job) {
+                        r = verify_one(checksum_job, j);
+                        if (r < 0)
+                                return r;
+                }
+
+                verify_job = checksum_job;
+        }
+
+        if (verify != IMPORT_VERIFY_SIGNATURE)
                 return 0;
 
-        r = verification_style_from_url(checksum_job->url, &style);
+        assert(verify_job);
+
+        r = verification_style_from_url(verify_job->url, &style);
         if (r < 0)
-                return log_error_errno(r, "Failed to determine verification style from URL '%s': %m", checksum_job->url);
+                return log_error_errno(r, "Failed to determine verification style from URL '%s': %m", verify_job->url);
 
         if (style == VERIFICATION_PER_DIRECTORY) {
                 assert(signature_job);
@@ -537,9 +590,9 @@
                         return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
                                                "Signature is empty, cannot verify.");
 
-                return verify_gpg(checksum_job->payload, checksum_job->payload_size, signature_job->payload, signature_job->payload_size);
+                return verify_gpg(verify_job->payload, verify_job->payload_size, signature_job->payload, signature_job->payload_size);
         } else
-                return verify_gpg(checksum_job->payload, checksum_job->payload_size, NULL, 0);
+                return verify_gpg(verify_job->payload, verify_job->payload_size, NULL, 0);
 }
 
 int verification_style_from_url(const char *url, VerificationStyle *ret) {
@@ -593,3 +646,28 @@
 
         return 1;
 }
+
+bool pull_validate_local(const char *name, PullFlags flags) {
+
+        if (FLAGS_SET(flags, PULL_DIRECT))
+                return path_is_valid(name);
+
+        return hostname_is_valid(name, 0);
+}
+
+int pull_url_needs_checksum(const char *url) {
+        _cleanup_free_ char *fn = NULL;
+        int r;
+
+        /* Returns true if we need to validate this resource via a hash value. This returns true for all
+         * files — except for gpg signature files and SHA256SUMS files and the like, which are validated with
+         * a validation tool like gpg. */
+
+        r = import_url_last_component(url, &fn);
+        if (r == -EADDRNOTAVAIL) /* no last component? then let's assume it's not a signature/checksum file */
+                return false;
+        if (r < 0)
+                return r;
+
+        return !is_checksum_file(fn) && !is_signature_file(fn);
+}
diff --git a/src/import/pull-common.h b/src/import/pull-common.h
index 3902e29..475613a 100644
--- a/src/import/pull-common.h
+++ b/src/import/pull-common.h
@@ -7,27 +7,31 @@
 #include "pull-job.h"
 
 typedef enum PullFlags {
-        PULL_FORCE              = 1 << 0,  /* replace existing image */
-        PULL_SETTINGS           = 1 << 1,  /* .nspawn settings file */
-        PULL_ROOTHASH           = 1 << 2,  /* only for raw: .roothash file for verity */
-        PULL_ROOTHASH_SIGNATURE = 1 << 3,  /* only for raw: .roothash.p7s file for verity */
-        PULL_VERITY             = 1 << 4,  /* only for raw: .verity file for verity */
+        PULL_FORCE              = 1 << 0, /* replace existing image */
+        PULL_READ_ONLY          = 1 << 1, /* make generated image read-only */
+        PULL_SETTINGS           = 1 << 2, /* download .nspawn settings file */
+        PULL_ROOTHASH           = 1 << 3, /* only for raw: download .roothash file for verity */
+        PULL_ROOTHASH_SIGNATURE = 1 << 4, /* only for raw: download .roothash.p7s file for verity */
+        PULL_VERITY             = 1 << 5, /* only for raw: download .verity file for verity */
+        PULL_BTRFS_SUBVOL       = 1 << 6, /* tar: preferably create images as btrfs subvols */
+        PULL_BTRFS_QUOTA        = 1 << 7, /* tar: set up btrfs quota for new subvolume as child of parent subvolume */
+        PULL_CONVERT_QCOW2      = 1 << 8, /* raw: if we detect a qcow2 image, unpack it */
+        PULL_DIRECT             = 1 << 9, /* download without rename games */
+        PULL_SYNC               = 1 << 10, /* fsync() right before we are done */
 
         /* The supported flags for the tar and the raw pulling */
-        PULL_FLAGS_MASK_TAR     = PULL_FORCE|PULL_SETTINGS,
-        PULL_FLAGS_MASK_RAW     = PULL_FORCE|PULL_SETTINGS|PULL_ROOTHASH|PULL_ROOTHASH_SIGNATURE|PULL_VERITY,
+        PULL_FLAGS_MASK_TAR     = PULL_FORCE|PULL_READ_ONLY|PULL_SETTINGS|PULL_BTRFS_SUBVOL|PULL_BTRFS_QUOTA|PULL_DIRECT|PULL_SYNC,
+        PULL_FLAGS_MASK_RAW     = PULL_FORCE|PULL_READ_ONLY|PULL_SETTINGS|PULL_ROOTHASH|PULL_ROOTHASH_SIGNATURE|PULL_VERITY|PULL_CONVERT_QCOW2|PULL_DIRECT|PULL_SYNC,
 } PullFlags;
 
-int pull_make_local_copy(const char *final, const char *root, const char *local, PullFlags flags);
-
 int pull_find_old_etags(const char *url, const char *root, int dt, const char *prefix, const char *suffix, char ***etags);
 
 int pull_make_path(const char *url, const char *etag, const char *image_root, const char *prefix, const char *suffix, char **ret);
 
-int pull_make_auxiliary_job(PullJob **ret, const char *url, int (*strip_suffixes)(const char *name, char **ret), const char *suffix, CurlGlue *glue, PullJobFinished on_finished, void *userdata);
-int pull_make_verification_jobs(PullJob **ret_checksum_job, PullJob **ret_signature_job, ImportVerify verify, const char *url, CurlGlue *glue, PullJobFinished on_finished, void *userdata);
+int pull_make_auxiliary_job(PullJob **ret, const char *url, int (*strip_suffixes)(const char *name, char **ret), const char *suffix, ImportVerify verify, CurlGlue *glue, PullJobOpenDisk on_open_disk, PullJobFinished on_finished, void *userdata);
+int pull_make_verification_jobs(PullJob **ret_checksum_job, PullJob **ret_signature_job, ImportVerify verify, const char *checksum, const char *url, CurlGlue *glue, PullJobFinished on_finished, void *userdata);
 
-int pull_verify(ImportVerify verify, PullJob *main_job, PullJob *checksum_job, PullJob *signature_job, PullJob *settings_job, PullJob *roothash_job, PullJob *roothash_signature_job, PullJob *verity_job);
+int pull_verify(ImportVerify verify, const char *checksum, PullJob *main_job, PullJob *checksum_job, PullJob *signature_job, PullJob *settings_job, PullJob *roothash_job, PullJob *roothash_signature_job, PullJob *verity_job);
 
 typedef enum VerificationStyle {
         VERIFICATION_PER_FILE,      /* SuSE-style ".sha256" files with inline gpg signature */
@@ -39,3 +43,7 @@
 int verification_style_from_url(const char *url, VerificationStyle *style);
 
 int pull_job_restart_with_sha256sum(PullJob *job, char **ret);
+
+bool pull_validate_local(const char *name, PullFlags flags);
+
+int pull_url_needs_checksum(const char *url);
diff --git a/src/import/pull-job.c b/src/import/pull-job.c
index 9ab3776..d8402f7 100644
--- a/src/import/pull-job.c
+++ b/src/import/pull-job.c
@@ -17,21 +17,36 @@
 #include "pull-job.h"
 #include "string-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "xattr-util.h"
 
+void pull_job_close_disk_fd(PullJob *j) {
+        if (!j)
+                return;
+
+        if (j->close_disk_fd)
+                safe_close(j->disk_fd);
+
+        j->disk_fd = -EBADF;
+}
+
 PullJob* pull_job_unref(PullJob *j) {
         if (!j)
                 return NULL;
 
+        pull_job_close_disk_fd(j);
+
         curl_glue_remove_and_free(j->glue, j->curl);
         curl_slist_free_all(j->request_header);
 
-        safe_close(j->disk_fd);
-
         import_compress_free(&j->compress);
 
-        if (j->checksum_context)
-                gcry_md_close(j->checksum_context);
+        if (j->checksum_ctx)
+#if PREFER_OPENSSL
+                EVP_MD_CTX_free(j->checksum_ctx);
+#else
+                gcry_md_close(j->checksum_ctx);
+#endif
 
         free(j->url);
         free(j->etag);
@@ -91,9 +106,13 @@
 
         import_compress_free(&j->compress);
 
-        if (j->checksum_context) {
-                gcry_md_close(j->checksum_context);
-                j->checksum_context = NULL;
+        if (j->checksum_ctx) {
+#if PREFER_OPENSSL
+                EVP_MD_CTX_free(j->checksum_ctx);
+#else
+                gcry_md_close(j->checksum_ctx);
+#endif
+                j->checksum_ctx = NULL;
         }
 
         r = pull_job_begin(j);
@@ -105,8 +124,8 @@
 
 void pull_job_curl_on_finished(CurlGlue *g, CURL *curl, CURLcode result) {
         PullJob *j = NULL;
+        char *scheme = NULL;
         CURLcode code;
-        long status;
         int r;
 
         if (curl_easy_getinfo(curl, CURLINFO_PRIVATE, (char **)&j) != CURLE_OK)
@@ -116,83 +135,103 @@
                 return;
 
         if (result != CURLE_OK) {
-                log_error("Transfer failed: %s", curl_easy_strerror(result));
-                r = -EIO;
+                r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Transfer failed: %s", curl_easy_strerror(result));
                 goto finish;
         }
 
-        code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status);
-        if (code != CURLE_OK) {
-                log_error("Failed to retrieve response code: %s", curl_easy_strerror(code));
-                r = -EIO;
+        code = curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
+        if (code != CURLE_OK || !scheme) {
+                r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to retrieve URL scheme.");
                 goto finish;
-        } else if (status == 304) {
-                log_info("Image already downloaded. Skipping download.");
-                j->etag_exists = true;
-                r = 0;
-                goto finish;
-        } else if (status >= 300) {
+        }
 
-                if (status == 404 && j->on_not_found) {
-                        _cleanup_free_ char *new_url = NULL;
+        if (STRCASE_IN_SET(scheme, "HTTP", "HTTPS")) {
+                long status;
 
-                        /* This resource wasn't found, but the implementor wants to maybe let us know a new URL, query for it. */
-                        r = j->on_not_found(j, &new_url);
-                        if (r < 0)
-                                goto finish;
+                code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status);
+                if (code != CURLE_OK) {
+                        r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to retrieve response code: %s", curl_easy_strerror(code));
+                        goto finish;
+                }
 
-                        if (r > 0) { /* A new url to use */
-                                assert(new_url);
+                if (status == 304) {
+                        log_info("Image already downloaded. Skipping download.");
+                        j->etag_exists = true;
+                        r = 0;
+                        goto finish;
+                } else if (status >= 300) {
 
-                                r = pull_job_restart(j, new_url);
+                        if (status == 404 && j->on_not_found) {
+                                _cleanup_free_ char *new_url = NULL;
+
+                                /* This resource wasn't found, but the implementor wants to maybe let us know a new URL, query for it. */
+                                r = j->on_not_found(j, &new_url);
                                 if (r < 0)
                                         goto finish;
 
-                                code = curl_easy_getinfo(j->curl, CURLINFO_RESPONSE_CODE, &status);
-                                if (code != CURLE_OK) {
-                                        log_error("Failed to retrieve response code: %s", curl_easy_strerror(code));
-                                        r = -EIO;
-                                        goto finish;
+                                if (r > 0) { /* A new url to use */
+                                        assert(new_url);
+
+                                        r = pull_job_restart(j, new_url);
+                                        if (r < 0)
+                                                goto finish;
+
+                                        code = curl_easy_getinfo(j->curl, CURLINFO_RESPONSE_CODE, &status);
+                                        if (code != CURLE_OK) {
+                                                r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to retrieve response code: %s", curl_easy_strerror(code));
+                                                goto finish;
+                                        }
+
+                                        if (status == 0)
+                                                return;
                                 }
-
-                                if (status == 0)
-                                        return;
                         }
-                }
 
-                log_error("HTTP request to %s failed with code %li.", j->url, status);
-                r = -EIO;
-                goto finish;
-        } else if (status < 200) {
-                log_error("HTTP request to %s finished with unexpected code %li.", j->url, status);
-                r = -EIO;
-                goto finish;
+                        r = log_error_errno(
+                                        status == 404 ? SYNTHETIC_ERRNO(ENOMEDIUM) : SYNTHETIC_ERRNO(EIO), /* Make the most common error recognizable */
+                                        "HTTP request to %s failed with code %li.", j->url, status);
+                        goto finish;
+                } else if (status < 200) {
+                        r = log_error_errno(SYNTHETIC_ERRNO(EIO), "HTTP request to %s finished with unexpected code %li.", j->url, status);
+                        goto finish;
+                }
         }
 
         if (j->state != PULL_JOB_RUNNING) {
-                log_error("Premature connection termination.");
-                r = -EIO;
+                r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Premature connection termination.");
                 goto finish;
         }
 
         if (j->content_length != UINT64_MAX &&
             j->content_length != j->written_compressed) {
-                log_error("Download truncated.");
-                r = -EIO;
+                r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Download truncated.");
                 goto finish;
         }
 
-        if (j->checksum_context) {
-                uint8_t *k;
+        if (j->checksum_ctx) {
+                unsigned checksum_len;
+#if PREFER_OPENSSL
+                uint8_t k[EVP_MAX_MD_SIZE];
 
-                k = gcry_md_read(j->checksum_context, GCRY_MD_SHA256);
+                r = EVP_DigestFinal_ex(j->checksum_ctx, k, &checksum_len);
+                if (r == 0) {
+                        r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to get checksum.");
+                        goto finish;
+                }
+                assert(checksum_len <= sizeof k);
+#else
+                const uint8_t *k;
+
+                k = gcry_md_read(j->checksum_ctx, GCRY_MD_SHA256);
                 if (!k) {
-                        log_error("Failed to get checksum.");
-                        r = -EIO;
+                        r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to get checksum.");
                         goto finish;
                 }
 
-                j->checksum = hexmem(k, gcry_md_get_algo_dlen(GCRY_MD_SHA256));
+                checksum_len = gcry_md_get_algo_dlen(GCRY_MD_SHA256);
+#endif
+
+                j->checksum = hexmem(k, checksum_len);
                 if (!j->checksum) {
                         r = log_oom();
                         goto finish;
@@ -201,31 +240,62 @@
                 log_debug("SHA256 of %s is %s.", j->url, j->checksum);
         }
 
-        if (j->disk_fd >= 0 && j->allow_sparse) {
-                /* Make sure the file size is right, in case the file was
-                 * sparse and we just seeked for the last part */
+        /* Do a couple of finishing disk operations, but only if we are the sole owner of the file (i.e. no
+         * offset is specified, which indicates we only own the file partially) */
 
-                if (ftruncate(j->disk_fd, j->written_uncompressed) < 0) {
-                        r = log_error_errno(errno, "Failed to truncate file: %m");
-                        goto finish;
-                }
+        if (j->disk_fd >= 0) {
 
-                if (j->etag)
-                        (void) fsetxattr(j->disk_fd, "user.source_etag", j->etag, strlen(j->etag), 0);
-                if (j->url)
-                        (void) fsetxattr(j->disk_fd, "user.source_url", j->url, strlen(j->url), 0);
+                if (S_ISREG(j->disk_stat.st_mode)) {
 
-                if (j->mtime != 0) {
-                        struct timespec ut[2];
+                        if (j->offset == UINT64_MAX) {
 
-                        timespec_store(&ut[0], j->mtime);
-                        ut[1] = ut[0];
-                        (void) futimens(j->disk_fd, ut);
+                                if (j->written_compressed > 0) {
+                                        /* Make sure the file size is right, in case the file was sparse and we just seeked
+                                         * for the last part */
+                                        if (ftruncate(j->disk_fd, j->written_uncompressed) < 0) {
+                                                r = log_error_errno(errno, "Failed to truncate file: %m");
+                                                goto finish;
+                                        }
+                                }
 
-                        (void) fd_setcrtime(j->disk_fd, j->mtime);
+                                if (j->etag)
+                                        (void) fsetxattr(j->disk_fd, "user.source_etag", j->etag, strlen(j->etag), 0);
+                                if (j->url)
+                                        (void) fsetxattr(j->disk_fd, "user.source_url", j->url, strlen(j->url), 0);
+
+                                if (j->mtime != 0) {
+                                        struct timespec ut;
+
+                                        timespec_store(&ut, j->mtime);
+
+                                        if (futimens(j->disk_fd, (struct timespec[]) { ut, ut }) < 0)
+                                                log_debug_errno(errno, "Failed to adjust atime/mtime of created image, ignoring: %m");
+
+                                        r = fd_setcrtime(j->disk_fd, j->mtime);
+                                        if (r < 0)
+                                                log_debug_errno(r, "Failed to adjust crtime of created image, ignoring: %m");
+                                }
+                        }
+
+                        if (j->sync) {
+                                r = fsync_full(j->disk_fd);
+                                if (r < 0) {
+                                        log_error_errno(r, "Failed to synchronize file to disk: %m");
+                                        goto finish;
+                                }
+                        }
+
+                } else if (S_ISBLK(j->disk_stat.st_mode) && j->sync) {
+
+                        if (fsync(j->disk_fd) < 0) {
+                                r = log_error_errno(errno, "Failed to synchronize block device: %m");
+                                goto finish;
+                        }
                 }
         }
 
+        log_info("Acquired %s.", FORMAT_BYTES(j->written_uncompressed));
+
         r = 0;
 
 finish:
@@ -233,38 +303,46 @@
 }
 
 static int pull_job_write_uncompressed(const void *p, size_t sz, void *userdata) {
-        PullJob *j = userdata;
-        ssize_t n;
+        PullJob *j = ASSERT_PTR(userdata);
+        bool too_much = false;
+        int r;
 
-        assert(j);
         assert(p);
+        assert(sz > 0);
 
-        if (sz <= 0)
-                return 0;
+        if (j->written_uncompressed > UINT64_MAX - sz)
+                return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "File too large, overflow");
 
-        if (j->written_uncompressed + sz < j->written_uncompressed)
-                return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW),
-                                       "File too large, overflow");
+        if (j->written_uncompressed >= j->uncompressed_max) {
+                too_much = true;
+                goto finish;
+        }
 
-        if (j->written_uncompressed + sz > j->uncompressed_max)
-                return log_error_errno(SYNTHETIC_ERRNO(EFBIG),
-                                       "File overly large, refusing");
+        if (j->written_uncompressed + sz > j->uncompressed_max) {
+                too_much = true;
+                sz = j->uncompressed_max - j->written_uncompressed; /* since we have the data in memory
+                                                                     * already, we might as well write it to
+                                                                     * disk to the max */
+        }
 
         if (j->disk_fd >= 0) {
 
-                if (j->allow_sparse)
-                        n = sparse_write(j->disk_fd, p, sz, 64);
-                else {
-                        n = write(j->disk_fd, p, sz);
-                        if (n < 0)
-                                n = -errno;
-                }
-                if (n < 0)
-                        return log_error_errno((int) n, "Failed to write file: %m");
-                if ((size_t) n < sz)
-                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short write");
-        } else {
+                if (S_ISREG(j->disk_stat.st_mode) && j->offset == UINT64_MAX) {
+                        ssize_t n;
 
+                        n = sparse_write(j->disk_fd, p, sz, 64);
+                        if (n < 0)
+                                return log_error_errno((int) n, "Failed to write file: %m");
+                        if ((size_t) n < sz)
+                                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short write");
+                } else {
+                        r = loop_write(j->disk_fd, p, sz, false);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to write file: %m");
+                }
+        }
+
+        if (j->disk_fd < 0 || j->force_memory) {
                 if (!GREEDY_REALLOC(j->payload, j->payload_size + sz))
                         return log_oom();
 
@@ -274,6 +352,10 @@
 
         j->written_uncompressed += sz;
 
+finish:
+        if (too_much)
+                return log_error_errno(SYNTHETIC_ERRNO(EFBIG), "File overly large, refusing.");
+
         return 0;
 }
 
@@ -297,8 +379,16 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EFBIG),
                                        "Content length incorrect.");
 
-        if (j->checksum_context)
-                gcry_md_write(j->checksum_context, p, sz);
+        if (j->checksum_ctx) {
+#if PREFER_OPENSSL
+                r = EVP_DigestUpdate(j->checksum_ctx, p, sz);
+                if (r == 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                               "Could not hash chunk.");
+#else
+                gcry_md_write(j->checksum_ctx, p, sz);
+#endif
+        }
 
         r = import_uncompress(&j->compress, p, sz, pull_job_write_uncompressed, j);
         if (r < 0)
@@ -321,24 +411,32 @@
         }
 
         if (j->disk_fd >= 0) {
-                /* Check if we can do sparse files */
+                if (fstat(j->disk_fd, &j->disk_stat) < 0)
+                        return log_error_errno(errno, "Failed to stat disk file: %m");
 
-                if (lseek(j->disk_fd, SEEK_SET, 0) == 0)
-                        j->allow_sparse = true;
-                else {
-                        if (errno != ESPIPE)
+                if (j->offset != UINT64_MAX) {
+                        if (lseek(j->disk_fd, j->offset, SEEK_SET) == (off_t) -1)
                                 return log_error_errno(errno, "Failed to seek on file descriptor: %m");
-
-                        j->allow_sparse = false;
                 }
         }
 
         if (j->calc_checksum) {
-                initialize_libgcrypt(false);
+#if PREFER_OPENSSL
+                j->checksum_ctx = EVP_MD_CTX_new();
+                if (!j->checksum_ctx)
+                        return log_oom();
 
-                if (gcry_md_open(&j->checksum_context, GCRY_MD_SHA256, 0) != 0)
+                r = EVP_DigestInit_ex(j->checksum_ctx, EVP_sha256(), NULL);
+                if (r == 0)
                         return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                                "Failed to initialize hash context.");
+#else
+                initialize_libgcrypt(false);
+
+                if (gcry_md_open(&j->checksum_ctx, GCRY_MD_SHA256, 0) != 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                               "Failed to initialize hash context.");
+#endif
         }
 
         return 0;
@@ -381,12 +479,11 @@
 }
 
 static size_t pull_job_write_callback(void *contents, size_t size, size_t nmemb, void *userdata) {
-        PullJob *j = userdata;
+        PullJob *j = ASSERT_PTR(userdata);
         size_t sz = size * nmemb;
         int r;
 
         assert(contents);
-        assert(j);
 
         switch (j->state) {
 
@@ -421,7 +518,7 @@
                 goto fail;
 
         default:
-                assert_not_reached("Impossible state.");
+                assert_not_reached();
         }
 
         return sz;
@@ -444,13 +541,12 @@
 static size_t pull_job_header_callback(void *contents, size_t size, size_t nmemb, void *userdata) {
         _cleanup_free_ char *length = NULL, *last_modified = NULL, *etag = NULL;
         size_t sz = size * nmemb;
-        PullJob *j = userdata;
+        PullJob *j = ASSERT_PTR(userdata);
         CURLcode code;
         long status;
         int r;
 
         assert(contents);
-        assert(j);
 
         if (IN_SET(j->state, PULL_JOB_DONE, PULL_JOB_FAILED)) {
                 r = -ESTALE;
@@ -461,8 +557,7 @@
 
         code = curl_easy_getinfo(j->curl, CURLINFO_RESPONSE_CODE, &status);
         if (code != CURLE_OK) {
-                log_error("Failed to retrieve response code: %s", curl_easy_strerror(code));
-                r = -EIO;
+                r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to retrieve response code: %s", curl_easy_strerror(code));
                 goto fail;
         }
 
@@ -501,15 +596,12 @@
                 (void) safe_atou64(length, &j->content_length);
 
                 if (j->content_length != UINT64_MAX) {
-                        char bytes[FORMAT_BYTES_MAX];
-
                         if (j->content_length > j->compressed_max) {
-                                log_error("Content too large.");
-                                r = -EFBIG;
+                                r = log_error_errno(SYNTHETIC_ERRNO(EFBIG), "Content too large.");
                                 goto fail;
                         }
 
-                        log_info("Downloading %s for %s.", format_bytes(bytes, sizeof(bytes), j->content_length), j->url);
+                        log_info("Downloading %s for %s.", FORMAT_BYTES(j->content_length), j->url);
                 }
 
                 return sz;
@@ -539,12 +631,10 @@
 }
 
 static int pull_job_progress_callback(void *userdata, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) {
-        PullJob *j = userdata;
+        PullJob *j = ASSERT_PTR(userdata);
         unsigned percent;
         usec_t n;
 
-        assert(j);
-
         if (dltotal <= 0)
                 return 0;
 
@@ -554,10 +644,8 @@
         if (n > j->last_status_usec + USEC_PER_SEC &&
             percent != j->progress_percent &&
             dlnow < dltotal) {
-                char buf[FORMAT_TIMESPAN_MAX];
 
                 if (n - j->start_usec > USEC_PER_SEC && dlnow > 0) {
-                        char y[FORMAT_BYTES_MAX];
                         usec_t left, done;
 
                         done = n - j->start_usec;
@@ -566,8 +654,8 @@
                         log_info("Got %u%% of %s. %s left at %s/s.",
                                  percent,
                                  j->url,
-                                 format_timespan(buf, sizeof(buf), left, USEC_PER_SEC),
-                                 format_bytes(y, sizeof(y), (uint64_t) ((double) dlnow / ((double) done / (double) USEC_PER_SEC))));
+                                 FORMAT_TIMESPAN(left, USEC_PER_SEC),
+                                 FORMAT_BYTES((uint64_t) ((double) dlnow / ((double) done / (double) USEC_PER_SEC))));
                 } else
                         log_info("Got %u%% of %s.", percent, j->url);
 
@@ -581,7 +669,12 @@
         return 0;
 }
 
-int pull_job_new(PullJob **ret, const char *url, CurlGlue *glue, void *userdata) {
+int pull_job_new(
+                PullJob **ret,
+                const char *url,
+                CurlGlue *glue,
+                void *userdata) {
+
         _cleanup_(pull_job_unrefp) PullJob *j = NULL;
         _cleanup_free_ char *u = NULL;
 
@@ -599,7 +692,8 @@
 
         *j = (PullJob) {
                 .state = PULL_JOB_INIT,
-                .disk_fd = -1,
+                .disk_fd = -EBADF,
+                .close_disk_fd = true,
                 .userdata = userdata,
                 .glue = glue,
                 .content_length = UINT64_MAX,
@@ -607,6 +701,8 @@
                 .compressed_max = 64LLU * 1024LLU * 1024LLU * 1024LLU, /* 64GB safety limit */
                 .uncompressed_max = 64LLU * 1024LLU * 1024LLU * 1024LLU, /* 64GB safety limit */
                 .url = TAKE_PTR(u),
+                .offset = UINT64_MAX,
+                .sync = true,
         };
 
         *ret = TAKE_PTR(j);
diff --git a/src/import/pull-job.h b/src/import/pull-job.h
index 023ccc8..7a98b0f 100644
--- a/src/import/pull-job.h
+++ b/src/import/pull-job.h
@@ -1,11 +1,13 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <gcrypt.h>
+#include <sys/stat.h>
 
 #include "curl-util.h"
 #include "import-compress.h"
 #include "macro.h"
+#include "openssl-util.h"
+#include "pull-common.h"
 
 typedef struct PullJob PullJob;
 
@@ -51,6 +53,7 @@
         uint64_t content_length;
         uint64_t written_compressed;
         uint64_t written_uncompressed;
+        uint64_t offset;
 
         uint64_t uncompressed_max;
         uint64_t compressed_max;
@@ -59,6 +62,8 @@
         size_t payload_size;
 
         int disk_fd;
+        bool close_disk_fd;
+        struct stat disk_stat;
 
         usec_t mtime;
 
@@ -68,12 +73,12 @@
         usec_t start_usec;
         usec_t last_status_usec;
 
-        bool allow_sparse;
-
         bool calc_checksum;
-        gcry_md_hd_t checksum_context;
+        hash_context_t checksum_ctx;
 
         char *checksum;
+        bool sync;
+        bool force_memory;
 };
 
 int pull_job_new(PullJob **job, const char *url, CurlGlue *glue, void *userdata);
@@ -83,4 +88,6 @@
 
 void pull_job_curl_on_finished(CurlGlue *g, CURL *curl, CURLcode result);
 
+void pull_job_close_disk_fd(PullJob *j);
+
 DEFINE_TRIVIAL_CLEANUP_FUNC(PullJob*, pull_job_unref);
diff --git a/src/import/pull-raw.c b/src/import/pull-raw.c
index 9b5d8ef..a4a844b 100644
--- a/src/import/pull-raw.c
+++ b/src/import/pull-raw.c
@@ -15,8 +15,9 @@
 #include "hostname-util.h"
 #include "import-common.h"
 #include "import-util.h"
+#include "install-file.h"
 #include "macro.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path-util.h"
 #include "pull-common.h"
 #include "pull-job.h"
@@ -27,7 +28,6 @@
 #include "strv.h"
 #include "tmpfile-util.h"
 #include "utf8.h"
-#include "util.h"
 #include "web-util.h"
 
 typedef enum RawProgress {
@@ -46,6 +46,8 @@
         ImportVerify verify;
         char *image_root;
 
+        uint64_t offset;
+
         PullJob *raw_job;
         PullJob *checksum_job;
         PullJob *signature_job;
@@ -57,7 +59,8 @@
         RawPullFinished on_finished;
         void *userdata;
 
-        char *local;
+        char *local; /* In PULL_DIRECT mode the path we are supposed to place things in, otherwise the
+                      * machine name of the final copy we make */
 
         char *final_path;
         char *temp_path;
@@ -73,6 +76,8 @@
 
         char *verity_path;
         char *verity_temp_path;
+
+        char *checksum;
 };
 
 RawPull* raw_pull_unref(RawPull *i) {
@@ -103,6 +108,7 @@
         free(i->verity_path);
         free(i->image_root);
         free(i->local);
+        free(i->checksum);
 
         return mfree(i);
 }
@@ -148,6 +154,7 @@
                 .image_root = TAKE_PTR(root),
                 .event = TAKE_PTR(e),
                 .glue = TAKE_PTR(g),
+                .offset = UINT64_MAX,
         };
 
         i->glue->on_finished = pull_job_curl_on_finished;
@@ -222,7 +229,7 @@
                 break;
 
         default:
-                assert_not_reached("Unknown progress state");
+                assert_not_reached();
         }
 
         sd_notifyf(false, "X_IMPORT_PROGRESS=%u", percent);
@@ -230,12 +237,20 @@
 }
 
 static int raw_pull_maybe_convert_qcow2(RawPull *i) {
-        _cleanup_close_ int converted_fd = -1;
-        _cleanup_free_ char *t = NULL;
+        _cleanup_(unlink_and_freep) char *t = NULL;
+        _cleanup_close_ int converted_fd = -EBADF;
+        _cleanup_free_ char *f = NULL;
         int r;
 
         assert(i);
         assert(i->raw_job);
+        assert(!FLAGS_SET(i->flags, PULL_DIRECT));
+
+        if (!FLAGS_SET(i->flags, PULL_CONVERT_QCOW2))
+                return 0;
+
+        assert(i->final_path);
+        assert(i->raw_job->close_disk_fd);
 
         r = qcow2_detect(i->raw_job->disk_fd);
         if (r < 0)
@@ -244,32 +259,35 @@
                 return 0;
 
         /* This is a QCOW2 image, let's convert it */
-        r = tempfn_random(i->final_path, NULL, &t);
+        r = tempfn_random(i->final_path, NULL, &f);
         if (r < 0)
                 return log_oom();
 
-        converted_fd = open(t, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
+        converted_fd = open(f, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
         if (converted_fd < 0)
-                return log_error_errno(errno, "Failed to create %s: %m", t);
+                return log_error_errno(errno, "Failed to create %s: %m", f);
+
+        t = TAKE_PTR(f);
 
         (void) import_set_nocow_and_log(converted_fd, t);
 
         log_info("Unpacking QCOW2 file.");
 
         r = qcow2_convert(i->raw_job->disk_fd, converted_fd);
-        if (r < 0) {
-                (void) unlink(t);
+        if (r < 0)
                 return log_error_errno(r, "Failed to convert qcow2 image: %m");
-        }
 
-        (void) unlink(i->temp_path);
-        free_and_replace(i->temp_path, t);
-        CLOSE_AND_REPLACE(i->raw_job->disk_fd, converted_fd);
+        unlink_and_free(i->temp_path);
+        i->temp_path = TAKE_PTR(t);
+        close_and_replace(i->raw_job->disk_fd, converted_fd);
 
         return 1;
 }
 
-static int raw_pull_determine_path(RawPull *i, const char *suffix, char **field) {
+static int raw_pull_determine_path(
+                RawPull *i,
+                const char *suffix,
+                char **field /* input + output (!) */) {
         int r;
 
         assert(i);
@@ -290,7 +308,7 @@
 static int raw_pull_copy_auxiliary_file(
                 RawPull *i,
                 const char *suffix,
-                char **path) {
+                char **path /* input + output (!) */) {
 
         const char *local;
         int r;
@@ -305,7 +323,14 @@
 
         local = strjoina(i->image_root, "/", i->local, suffix);
 
-        r = copy_file_atomic(*path, local, 0644, 0, 0, COPY_REFLINK | (FLAGS_SET(i->flags, PULL_FORCE) ? COPY_REPLACE : 0));
+        r = copy_file_atomic(
+                        *path,
+                        local,
+                        0644,
+                        0, 0,
+                        COPY_REFLINK |
+                        (FLAGS_SET(i->flags, PULL_FORCE) ? COPY_REPLACE : 0) |
+                        (FLAGS_SET(i->flags, PULL_SYNC) ? COPY_FSYNC_FULL : 0));
         if (r == -EEXIST)
                 log_warning_errno(r, "File %s already exists, not replacing.", local);
         else if (r == -ENOENT)
@@ -319,13 +344,15 @@
 }
 
 static int raw_pull_make_local_copy(RawPull *i) {
-        _cleanup_free_ char *tp = NULL;
-        _cleanup_close_ int dfd = -1;
+        _cleanup_(unlink_and_freep) char *tp = NULL;
+        _cleanup_free_ char *f = NULL;
+        _cleanup_close_ int dfd = -EBADF;
         const char *p;
         int r;
 
         assert(i);
         assert(i->raw_job);
+        assert(!FLAGS_SET(i->flags, PULL_DIRECT));
 
         if (!i->local)
                 return 0;
@@ -342,6 +369,7 @@
                 /* We freshly downloaded the image, use it */
 
                 assert(i->raw_job->disk_fd >= 0);
+                assert(i->offset == UINT64_MAX);
 
                 if (lseek(i->raw_job->disk_fd, SEEK_SET, 0) == (off_t) -1)
                         return log_error_errno(errno, "Failed to seek to beginning of vendor image: %m");
@@ -349,38 +377,38 @@
 
         p = strjoina(i->image_root, "/", i->local, ".raw");
 
-        if (FLAGS_SET(i->flags, PULL_FORCE))
-                (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
-
-        r = tempfn_random(p, NULL, &tp);
+        r = tempfn_random(p, NULL, &f);
         if (r < 0)
                 return log_oom();
 
-        dfd = open(tp, O_WRONLY|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
+        dfd = open(f, O_WRONLY|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
         if (dfd < 0)
                 return log_error_errno(errno, "Failed to create writable copy of image: %m");
 
+        tp = TAKE_PTR(f);
+
         /* Turn off COW writing. This should greatly improve performance on COW file systems like btrfs,
          * since it reduces fragmentation caused by not allowing in-place writes. */
         (void) import_set_nocow_and_log(dfd, tp);
 
         r = copy_bytes(i->raw_job->disk_fd, dfd, UINT64_MAX, COPY_REFLINK);
-        if (r < 0) {
-                (void) unlink(tp);
+        if (r < 0)
                 return log_error_errno(r, "Failed to make writable copy of image: %m");
-        }
 
         (void) copy_times(i->raw_job->disk_fd, dfd, COPY_CRTIME);
-        (void) copy_xattr(i->raw_job->disk_fd, dfd);
+        (void) copy_xattr(i->raw_job->disk_fd, dfd, 0);
 
         dfd = safe_close(dfd);
 
-        r = rename(tp, p);
-        if (r < 0)  {
-                r = log_error_errno(errno, "Failed to move writable image into place: %m");
-                (void) unlink(tp);
-                return r;
-        }
+        r = install_file(AT_FDCWD, tp,
+                         AT_FDCWD, p,
+                         (i->flags & PULL_FORCE ? INSTALL_REPLACE : 0) |
+                         (i->flags & PULL_READ_ONLY ? INSTALL_READ_ONLY : 0) |
+                         (i->flags & PULL_SYNC ? INSTALL_FSYNC_FULL : 0));
+        if (r < 0)
+                return log_error_errno(errno, "Failed to move local image into place '%s': %m", p);
+
+        tp = mfree(tp);
 
         log_info("Created new local image '%s'.", i->local);
 
@@ -442,9 +470,10 @@
         int r;
 
         assert(i);
-        assert(temp_path);
-        assert(suffix);
         assert(path);
+        assert(temp_path);
+        assert(*temp_path);
+        assert(suffix);
 
         /* Regenerate final name for this auxiliary file, we might know the etag of the file now, and we should
          * incorporate it in the file name if we can */
@@ -453,61 +482,78 @@
         if (r < 0)
                 return r;
 
-        r = import_make_read_only(*temp_path);
+        r = install_file(
+                        AT_FDCWD, *temp_path,
+                        AT_FDCWD, *path,
+                        INSTALL_READ_ONLY|
+                        (i->flags & PULL_SYNC ? INSTALL_FSYNC_FULL : 0));
         if (r < 0)
-                return r;
-
-        r = rename_noreplace(AT_FDCWD, *temp_path, AT_FDCWD, *path);
-        if (r < 0)
-                return log_error_errno(r, "Failed to rename file %s to %s: %m", *temp_path, *path);
+                return log_error_errno(r, "Failed to move '%s' into place: %m", *path);
 
         *temp_path = mfree(*temp_path);
-
         return 1;
 }
 
 static void raw_pull_job_on_finished(PullJob *j) {
         RawPull *i;
+        PullJob *jj;
         int r;
 
         assert(j);
         assert(j->userdata);
 
         i = j->userdata;
-        if (j == i->settings_job) {
-                if (j->error != 0)
-                        log_info_errno(j->error, "Settings file could not be retrieved, proceeding without.");
-        } else if (j == i->roothash_job) {
-                if (j->error != 0)
-                        log_info_errno(j->error, "Root hash file could not be retrieved, proceeding without.");
-        } else if (j == i->roothash_signature_job) {
-                if (j->error != 0)
-                        log_info_errno(j->error, "Root hash signature file could not be retrieved, proceeding without.");
-        } else if (j == i->verity_job) {
-                if (j->error != 0)
-                        log_info_errno(j->error, "Verity integrity file could not be retrieved, proceeding without. %s", j->url);
-        } else if (j->error != 0 && j != i->signature_job) {
-                if (j == i->checksum_job)
-                        log_error_errno(j->error, "Failed to retrieve SHA256 checksum, cannot verify. (Try --verify=no?)");
-                else
-                        log_error_errno(j->error, "Failed to retrieve image file. (Wrong URL?)");
 
-                r = j->error;
-                goto finish;
+        if (j->error != 0) {
+                /* Only the main job and the checksum job are fatal if they fail. The other fails are just
+                 * "decoration", that we'll download if we can. The signature job isn't fatal here because we
+                 * might not actually need it in case Suse style signatures are used, that are inline in the
+                 * checksum file. */
+
+                if (j == i->raw_job) {
+                        if (j->error == ENOMEDIUM) /* HTTP 404 */
+                                r = log_error_errno(j->error, "Failed to retrieve image file. (Wrong URL?)");
+                        else
+                                r = log_error_errno(j->error, "Failed to retrieve image file.");
+                        goto finish;
+                } else if (j == i->checksum_job) {
+                        r = log_error_errno(j->error, "Failed to retrieve SHA256 checksum, cannot verify. (Try --verify=no?)");
+                        goto finish;
+                } else if (j == i->signature_job)
+                        log_debug_errno(j->error, "Signature job for %s failed, proceeding for now.", j->url);
+                else if (j == i->settings_job)
+                        log_info_errno(j->error, "Settings file could not be retrieved, proceeding without.");
+                else if (j == i->roothash_job)
+                        log_info_errno(j->error, "Root hash file could not be retrieved, proceeding without.");
+                else if (j == i->roothash_signature_job)
+                        log_info_errno(j->error, "Root hash signature file could not be retrieved, proceeding without.");
+                else if (j == i->verity_job)
+                        log_info_errno(j->error, "Verity integrity file could not be retrieved, proceeding without.");
+                else
+                        assert_not_reached();
         }
 
         /* This is invoked if either the download completed successfully, or the download was skipped because
          * we already have the etag. In this case ->etag_exists is true.
          *
-         * We only do something when we got all three files */
+         * We only do something when we got all files */
 
         if (!raw_pull_is_done(i))
                 return;
 
         if (i->signature_job && i->signature_job->error != 0) {
                 VerificationStyle style;
+                PullJob *verify_job;
 
-                r = verification_style_from_url(i->checksum_job->url, &style);
+                /* The signature job failed. Let's see if we actually need it */
+
+                verify_job = i->checksum_job ?: i->raw_job; /* if the checksum job doesn't exist this must be
+                                                             * because the main job is the checksum file
+                                                             * itself */
+
+                assert(verify_job);
+
+                r = verification_style_from_url(verify_job->url, &style);
                 if (r < 0) {
                         log_error_errno(r, "Failed to determine verification style from checksum URL: %m");
                         goto finish;
@@ -517,32 +563,21 @@
                                                             * in per-directory verification mode, since only
                                                             * then the signature is detached, and thus a file
                                                             * of its own. */
-                        log_error_errno(j->error, "Failed to retrieve signature file, cannot verify. (Try --verify=no?)");
-                        r = i->signature_job->error;
+                        r = log_error_errno(i->signature_job->error,
+                                            "Failed to retrieve signature file, cannot verify. (Try --verify=no?)");
                         goto finish;
                 }
         }
 
-        if (i->settings_job)
-                i->settings_job->disk_fd = safe_close(i->settings_job->disk_fd);
-        if (i->roothash_job)
-                i->roothash_job->disk_fd = safe_close(i->roothash_job->disk_fd);
-        if (i->roothash_signature_job)
-                i->roothash_signature_job->disk_fd = safe_close(i->roothash_signature_job->disk_fd);
-        if (i->verity_job)
-                i->verity_job->disk_fd = safe_close(i->verity_job->disk_fd);
-
-        r = raw_pull_determine_path(i, ".raw", &i->final_path);
-        if (r < 0)
-                goto finish;
+        /* Let's close these auxiliary files now, we don't need access to them anymore. */
+        FOREACH_POINTER(jj, i->settings_job, i->roothash_job, i->roothash_signature_job, i->verity_job)
+                pull_job_close_disk_fd(jj);
 
         if (!i->raw_job->etag_exists) {
-                /* This is a new download, verify it, and move it into place */
-                assert(i->raw_job->disk_fd >= 0);
-
                 raw_pull_report_progress(i, RAW_VERIFYING);
 
                 r = pull_verify(i->verify,
+                                i->checksum,
                                 i->raw_job,
                                 i->checksum_job,
                                 i->signature_job,
@@ -552,51 +587,92 @@
                                 i->verity_job);
                 if (r < 0)
                         goto finish;
+        }
 
-                raw_pull_report_progress(i, RAW_UNPACKING);
-
-                r = raw_pull_maybe_convert_qcow2(i);
-                if (r < 0)
-                        goto finish;
+        if (i->flags & PULL_DIRECT) {
+                assert(!i->settings_job);
+                assert(!i->roothash_job);
+                assert(!i->roothash_signature_job);
+                assert(!i->verity_job);
 
                 raw_pull_report_progress(i, RAW_FINALIZING);
 
-                if (i->raw_job->etag) {
-                        /* Only make a read-only copy if ETag header is set. */
-                        r = import_make_read_only_fd(i->raw_job->disk_fd);
-                        if (r < 0)
-                                goto finish;
-
-                        r = rename_noreplace(AT_FDCWD, i->temp_path, AT_FDCWD, i->final_path);
+                if (i->local) {
+                        r = install_file(AT_FDCWD, i->local,
+                                         AT_FDCWD, NULL,
+                                         ((i->flags & PULL_READ_ONLY) && i->offset == UINT64_MAX ? INSTALL_READ_ONLY : 0) |
+                                         (i->flags & PULL_SYNC ? INSTALL_FSYNC_FULL : 0));
                         if (r < 0) {
-                                log_error_errno(r, "Failed to rename raw file to %s: %m", i->final_path);
+                                log_error_errno(r, "Failed to finalize raw file to '%s': %m", i->local);
                                 goto finish;
                         }
                 }
+        } else {
+                r = raw_pull_determine_path(i, ".raw", &i->final_path);
+                if (r < 0)
+                        goto finish;
 
-                i->temp_path = mfree(i->temp_path);
+                if (!i->raw_job->etag_exists) {
+                        /* This is a new download, verify it, and move it into place */
 
-                if (i->roothash_job &&
-                    i->roothash_job->error == 0) {
-                        r = raw_pull_rename_auxiliary_file(i, ".roothash", &i->roothash_temp_path, &i->roothash_path);
+                        assert(i->temp_path);
+                        assert(i->final_path);
+
+                        raw_pull_report_progress(i, RAW_UNPACKING);
+
+                        r = raw_pull_maybe_convert_qcow2(i);
                         if (r < 0)
                                 goto finish;
+
+                        raw_pull_report_progress(i, RAW_FINALIZING);
+
+                        r = install_file(AT_FDCWD, i->temp_path,
+                                         AT_FDCWD, i->final_path,
+                                         INSTALL_READ_ONLY|
+                                         (i->flags & PULL_SYNC ? INSTALL_FSYNC_FULL : 0));
+                        if (r < 0) {
+                                log_error_errno(r, "Failed to move raw file to '%s': %m", i->final_path);
+                                goto finish;
+                        }
+
+                        i->temp_path = mfree(i->temp_path);
+
+                        if (i->settings_job &&
+                            i->settings_job->error == 0) {
+                                r = raw_pull_rename_auxiliary_file(i, ".nspawn", &i->settings_temp_path, &i->settings_path);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        if (i->roothash_job &&
+                            i->roothash_job->error == 0) {
+                                r = raw_pull_rename_auxiliary_file(i, ".roothash", &i->roothash_temp_path, &i->roothash_path);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        if (i->roothash_signature_job &&
+                            i->roothash_signature_job->error == 0) {
+                                r = raw_pull_rename_auxiliary_file(i, ".roothash.p7s", &i->roothash_signature_temp_path, &i->roothash_signature_path);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        if (i->verity_job &&
+                            i->verity_job->error == 0) {
+                                r = raw_pull_rename_auxiliary_file(i, ".verity", &i->verity_temp_path, &i->verity_path);
+                                if (r < 0)
+                                        goto finish;
+                        }
                 }
 
-                if (i->settings_job &&
-                    i->settings_job->error == 0) {
-                        r = raw_pull_rename_auxiliary_file(i, ".nspawn", &i->settings_temp_path, &i->settings_path);
-                        if (r < 0)
-                                goto finish;
-                }
+                raw_pull_report_progress(i, RAW_COPYING);
+
+                r = raw_pull_make_local_copy(i);
+                if (r < 0)
+                        goto finish;
         }
 
-        raw_pull_report_progress(i, RAW_COPYING);
-
-        r = raw_pull_make_local_copy(i);
-        if (r < 0)
-                goto finish;
-
         r = 0;
 
 finish:
@@ -610,7 +686,7 @@
                 RawPull *i,
                 PullJob *j,
                 const char *extra,
-                char **temp_path) {
+                char **temp_path /* input + output */) {
 
         int r;
 
@@ -619,6 +695,8 @@
         assert(extra);
         assert(temp_path);
 
+        assert(!FLAGS_SET(i->flags, PULL_DIRECT));
+
         if (!*temp_path) {
                 r = tempfn_random_child(i->image_root, extra, temp_path);
                 if (r < 0)
@@ -643,12 +721,34 @@
 
         i = j->userdata;
         assert(i->raw_job == j);
+        assert(j->disk_fd < 0);
 
-        r = raw_pull_job_on_open_disk_generic(i, j, "raw", &i->temp_path);
-        if (r < 0)
-                return r;
+        if (i->flags & PULL_DIRECT) {
 
-        (void) import_set_nocow_and_log(j->disk_fd, i->temp_path);
+                if (!i->local) { /* If no local name specified, the pull job will write its data to stdout */
+                        j->disk_fd = STDOUT_FILENO;
+                        j->close_disk_fd = false;
+                        return 0;
+                }
+
+                (void) mkdir_parents_label(i->local, 0700);
+
+                j->disk_fd = open(i->local, O_RDWR|O_NOCTTY|O_CLOEXEC|(i->offset == UINT64_MAX ? O_TRUNC|O_CREAT : 0), 0664);
+                if (j->disk_fd < 0)
+                        return log_error_errno(errno, "Failed to open destination '%s': %m", i->local);
+
+                if (i->offset == UINT64_MAX)
+                        (void) import_set_nocow_and_log(j->disk_fd, i->local);
+
+        } else {
+                r = raw_pull_job_on_open_disk_generic(i, j, "raw", &i->temp_path);
+                if (r < 0)
+                        return r;
+
+                assert(i->offset == UINT64_MAX);
+                (void) import_set_nocow_and_log(j->disk_fd, i->temp_path);
+        }
+
         return 0;
 }
 
@@ -715,20 +815,29 @@
                 RawPull *i,
                 const char *url,
                 const char *local,
+                uint64_t offset,
+                uint64_t size_max,
                 PullFlags flags,
-                ImportVerify verify) {
+                ImportVerify verify,
+                const char *checksum) {
 
+        PullJob *j;
         int r;
 
         assert(i);
-        assert(verify < _IMPORT_VERIFY_MAX);
-        assert(verify >= 0);
+        assert(url);
+        assert(verify == _IMPORT_VERIFY_INVALID || verify < _IMPORT_VERIFY_MAX);
+        assert(verify == _IMPORT_VERIFY_INVALID || verify >= 0);
+        assert((verify < 0) || !checksum);
         assert(!(flags & ~PULL_FLAGS_MASK_RAW));
+        assert(offset == UINT64_MAX || FLAGS_SET(flags, PULL_DIRECT));
+        assert(!(flags & (PULL_SETTINGS|PULL_ROOTHASH|PULL_ROOTHASH_SIGNATURE|PULL_VERITY)) || !(flags & PULL_DIRECT));
+        assert(!(flags & (PULL_SETTINGS|PULL_ROOTHASH|PULL_ROOTHASH_SIGNATURE|PULL_VERITY)) || !checksum);
 
-        if (!http_url_is_valid(url))
+        if (!http_url_is_valid(url) && !file_url_is_valid(url))
                 return -EINVAL;
 
-        if (local && !hostname_is_valid(local, 0))
+        if (local && !pull_validate_local(local, flags))
                 return -EINVAL;
 
         if (i->raw_job)
@@ -738,6 +847,10 @@
         if (r < 0)
                 return r;
 
+        r = free_and_strdup(&i->checksum, checksum);
+        if (r < 0)
+                return r;
+
         i->flags = flags;
         i->verify = verify;
 
@@ -748,98 +861,121 @@
 
         i->raw_job->on_finished = raw_pull_job_on_finished;
         i->raw_job->on_open_disk = raw_pull_job_on_open_disk_raw;
-        i->raw_job->on_progress = raw_pull_job_on_progress;
-        i->raw_job->calc_checksum = verify != IMPORT_VERIFY_NO;
 
-        r = pull_find_old_etags(url, i->image_root, DT_REG, ".raw-", ".raw", &i->raw_job->old_etags);
-        if (r < 0)
-                return r;
+        if (checksum)
+                i->raw_job->calc_checksum = true;
+        else if (verify != IMPORT_VERIFY_NO) {
+                /* Calculate checksum of the main download unless the users asks for a SHA256SUM file or its
+                 * signature, which we let gpg verify instead. */
 
-        r = pull_make_verification_jobs(&i->checksum_job, &i->signature_job, verify, url, i->glue, raw_pull_job_on_finished, i);
+                r = pull_url_needs_checksum(url);
+                if (r < 0)
+                        return r;
+
+                i->raw_job->calc_checksum = r;
+                i->raw_job->force_memory = true; /* make sure this is both written to disk if that's
+                                                  * requested and into memory, since we need to verify it */
+        }
+
+        if (size_max != UINT64_MAX)
+                i->raw_job->uncompressed_max = size_max;
+        if (offset != UINT64_MAX)
+                i->raw_job->offset = i->offset = offset;
+
+        if (!FLAGS_SET(flags, PULL_DIRECT)) {
+                r = pull_find_old_etags(url, i->image_root, DT_REG, ".raw-", ".raw", &i->raw_job->old_etags);
+                if (r < 0)
+                        return r;
+        }
+
+        r = pull_make_verification_jobs(
+                        &i->checksum_job,
+                        &i->signature_job,
+                        verify,
+                        i->checksum,
+                        url,
+                        i->glue,
+                        raw_pull_job_on_finished,
+                        i);
         if (r < 0)
                 return r;
 
         if (FLAGS_SET(flags, PULL_SETTINGS)) {
-                r = pull_make_auxiliary_job(&i->settings_job, url, raw_strip_suffixes, ".nspawn", i->glue, raw_pull_job_on_finished, i);
+                r = pull_make_auxiliary_job(
+                                &i->settings_job,
+                                url,
+                                raw_strip_suffixes,
+                                ".nspawn",
+                                verify,
+                                i->glue,
+                                raw_pull_job_on_open_disk_settings,
+                                raw_pull_job_on_finished,
+                                i);
                 if (r < 0)
                         return r;
-
-                i->settings_job->on_open_disk = raw_pull_job_on_open_disk_settings;
-                i->settings_job->on_progress = raw_pull_job_on_progress;
-                i->settings_job->calc_checksum = verify != IMPORT_VERIFY_NO;
         }
 
         if (FLAGS_SET(flags, PULL_ROOTHASH)) {
-                r = pull_make_auxiliary_job(&i->roothash_job, url, raw_strip_suffixes, ".roothash", i->glue, raw_pull_job_on_finished, i);
+                r = pull_make_auxiliary_job(
+                                &i->roothash_job,
+                                url,
+                                raw_strip_suffixes,
+                                ".roothash",
+                                verify,
+                                i->glue,
+                                raw_pull_job_on_open_disk_roothash,
+                                raw_pull_job_on_finished,
+                                i);
                 if (r < 0)
                         return r;
-
-                i->roothash_job->on_open_disk = raw_pull_job_on_open_disk_roothash;
-                i->roothash_job->on_progress = raw_pull_job_on_progress;
-                i->roothash_job->calc_checksum = verify != IMPORT_VERIFY_NO;
         }
 
         if (FLAGS_SET(flags, PULL_ROOTHASH_SIGNATURE)) {
-                r = pull_make_auxiliary_job(&i->roothash_signature_job, url, raw_strip_suffixes, ".roothash.p7s", i->glue, raw_pull_job_on_finished, i);
+                r = pull_make_auxiliary_job(
+                                &i->roothash_signature_job,
+                                url,
+                                raw_strip_suffixes,
+                                ".roothash.p7s",
+                                verify,
+                                i->glue,
+                                raw_pull_job_on_open_disk_roothash_signature,
+                                raw_pull_job_on_finished,
+                                i);
                 if (r < 0)
                         return r;
-
-                i->roothash_signature_job->on_open_disk = raw_pull_job_on_open_disk_roothash_signature;
-                i->roothash_signature_job->on_progress = raw_pull_job_on_progress;
-                i->roothash_signature_job->calc_checksum = verify != IMPORT_VERIFY_NO;
         }
 
         if (FLAGS_SET(flags, PULL_VERITY)) {
-                r = pull_make_auxiliary_job(&i->verity_job, url, raw_strip_suffixes, ".verity", i->glue, raw_pull_job_on_finished, i);
-                if (r < 0)
-                        return r;
-
-                i->verity_job->on_open_disk = raw_pull_job_on_open_disk_verity;
-                i->verity_job->on_progress = raw_pull_job_on_progress;
-                i->verity_job->calc_checksum = verify != IMPORT_VERIFY_NO;
-        }
-
-        r = pull_job_begin(i->raw_job);
-        if (r < 0)
-                return r;
-
-        if (i->checksum_job) {
-                i->checksum_job->on_progress = raw_pull_job_on_progress;
-                i->checksum_job->on_not_found = pull_job_restart_with_sha256sum;
-
-                r = pull_job_begin(i->checksum_job);
+                r = pull_make_auxiliary_job(
+                                &i->verity_job,
+                                url,
+                                raw_strip_suffixes,
+                                ".verity",
+                                verify,
+                                i->glue,
+                                raw_pull_job_on_open_disk_verity,
+                                raw_pull_job_on_finished,
+                                i);
                 if (r < 0)
                         return r;
         }
 
-        if (i->signature_job) {
-                i->signature_job->on_progress = raw_pull_job_on_progress;
+        FOREACH_POINTER(j,
+                        i->raw_job,
+                        i->checksum_job,
+                        i->signature_job,
+                        i->settings_job,
+                        i->roothash_job,
+                        i->roothash_signature_job,
+                        i->verity_job) {
 
-                r = pull_job_begin(i->signature_job);
-                if (r < 0)
-                        return r;
-        }
+                if (!j)
+                        continue;
 
-        if (i->settings_job) {
-                r = pull_job_begin(i->settings_job);
-                if (r < 0)
-                        return r;
-        }
+                j->on_progress = raw_pull_job_on_progress;
+                j->sync = FLAGS_SET(flags, PULL_SYNC);
 
-        if (i->roothash_job) {
-                r = pull_job_begin(i->roothash_job);
-                if (r < 0)
-                        return r;
-        }
-
-        if (i->roothash_signature_job) {
-                r = pull_job_begin(i->roothash_signature_job);
-                if (r < 0)
-                        return r;
-        }
-
-        if (i->verity_job) {
-                r = pull_job_begin(i->verity_job);
+                r = pull_job_begin(j);
                 if (r < 0)
                         return r;
         }
diff --git a/src/import/pull-raw.h b/src/import/pull-raw.h
index 985bda4..b39e4e2 100644
--- a/src/import/pull-raw.h
+++ b/src/import/pull-raw.h
@@ -16,4 +16,4 @@
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(RawPull*, raw_pull_unref);
 
-int raw_pull_start(RawPull *pull, const char *url, const char *local, PullFlags flags, ImportVerify verify);
+int raw_pull_start(RawPull *pull, const char *url, const char *local, uint64_t offset, uint64_t size_max, PullFlags flags, ImportVerify verify, const char *checksum);
diff --git a/src/import/pull-tar.c b/src/import/pull-tar.c
index a2ba56d..d3a1179 100644
--- a/src/import/pull-tar.c
+++ b/src/import/pull-tar.c
@@ -14,8 +14,9 @@
 #include "hostname-util.h"
 #include "import-common.h"
 #include "import-util.h"
+#include "install-file.h"
 #include "macro.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path-util.h"
 #include "process-util.h"
 #include "pull-common.h"
@@ -25,8 +26,8 @@
 #include "string-util.h"
 #include "strv.h"
 #include "tmpfile-util.h"
+#include "user-util.h"
 #include "utf8.h"
-#include "util.h"
 #include "web-util.h"
 
 typedef enum TarProgress {
@@ -61,16 +62,16 @@
 
         char *settings_path;
         char *settings_temp_path;
+
+        char *checksum;
 };
 
 TarPull* tar_pull_unref(TarPull *i) {
         if (!i)
                 return NULL;
 
-        if (i->tar_pid > 1) {
-                (void) kill_and_sigcont(i->tar_pid, SIGKILL);
-                (void) wait_for_terminate(i->tar_pid, NULL);
-        }
+        if (i->tar_pid > 1)
+                sigkill_wait(i->tar_pid);
 
         pull_job_unref(i->tar_job);
         pull_job_unref(i->checksum_job);
@@ -87,6 +88,7 @@
         free(i->settings_path);
         free(i->image_root);
         free(i->local);
+        free(i->checksum);
 
         return mfree(i);
 }
@@ -187,14 +189,17 @@
                 break;
 
         default:
-                assert_not_reached("Unknown progress state");
+                assert_not_reached();
         }
 
         sd_notifyf(false, "X_IMPORT_PROGRESS=%u", percent);
         log_debug("Combined progress %u%%", percent);
 }
 
-static int tar_pull_determine_path(TarPull *i, const char *suffix, char **field) {
+static int tar_pull_determine_path(
+                TarPull *i,
+                const char *suffix,
+                char **field /* input + output (!) */) {
         int r;
 
         assert(i);
@@ -213,6 +218,8 @@
 }
 
 static int tar_pull_make_local_copy(TarPull *i) {
+        _cleanup_(rm_rf_subvolume_and_freep) char *t = NULL;
+        const char *p;
         int r;
 
         assert(i);
@@ -221,9 +228,38 @@
         if (!i->local)
                 return 0;
 
-        r = pull_make_local_copy(i->final_path, i->image_root, i->local, i->flags);
+        assert(i->final_path);
+
+        p = prefix_roota(i->image_root, i->local);
+
+        r = tempfn_random(p, NULL, &t);
         if (r < 0)
-                return r;
+                return log_error_errno(r, "Failed to generate temporary filename for %s: %m", p);
+
+        if (i->flags & PULL_BTRFS_SUBVOL)
+                r = btrfs_subvol_snapshot(
+                                i->final_path,
+                                t,
+                                (i->flags & PULL_BTRFS_QUOTA ? BTRFS_SNAPSHOT_QUOTA : 0)|
+                                BTRFS_SNAPSHOT_FALLBACK_COPY|
+                                BTRFS_SNAPSHOT_FALLBACK_DIRECTORY|
+                                BTRFS_SNAPSHOT_RECURSIVE);
+        else
+                r = copy_tree(i->final_path, t, UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_HARDLINKS, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to create local image: %m");
+
+        r = install_file(AT_FDCWD, t,
+                         AT_FDCWD, p,
+                         (i->flags & PULL_FORCE ? INSTALL_REPLACE : 0) |
+                         (i->flags & PULL_READ_ONLY ? INSTALL_READ_ONLY : 0) |
+                         (i->flags & PULL_SYNC ? INSTALL_SYNCFS : 0));
+        if (r < 0)
+                return log_error_errno(r, "Failed to install local image '%s': %m", p);
+
+        t = mfree(t);
+
+        log_info("Created new local image '%s'.", i->local);
 
         if (FLAGS_SET(i->flags, PULL_SETTINGS)) {
                 const char *local_settings;
@@ -235,7 +271,14 @@
 
                 local_settings = strjoina(i->image_root, "/", i->local, ".nspawn");
 
-                r = copy_file_atomic(i->settings_path, local_settings, 0664, 0, 0, COPY_REFLINK | (FLAGS_SET(i->flags, PULL_FORCE) ? COPY_REPLACE : 0));
+                r = copy_file_atomic(
+                                i->settings_path,
+                                local_settings,
+                                0664,
+                                0, 0,
+                                COPY_REFLINK |
+                                (FLAGS_SET(i->flags, PULL_FORCE) ? COPY_REPLACE : 0) |
+                                (FLAGS_SET(i->flags, PULL_SYNC) ? COPY_FSYNC_FULL : 0));
                 if (r == -EEXIST)
                         log_warning_errno(r, "Settings file %s already exists, not replacing.", local_settings);
                 else if (r == -ENOENT)
@@ -274,17 +317,22 @@
 
         i = j->userdata;
 
-        if (j == i->settings_job) {
-                if (j->error != 0)
+        if (j->error != 0) {
+                if (j == i->tar_job) {
+                        if (j->error == ENOMEDIUM) /* HTTP 404 */
+                                r = log_error_errno(j->error, "Failed to retrieve image file. (Wrong URL?)");
+                        else
+                                r = log_error_errno(j->error, "Failed to retrieve image file.");
+                        goto finish;
+                } else if (j == i->checksum_job) {
+                        r = log_error_errno(j->error, "Failed to retrieve SHA256 checksum, cannot verify. (Try --verify=no?)");
+                        goto finish;
+                } else if (j == i->signature_job)
+                        log_debug_errno(j->error, "Signature job for %s failed, proceeding for now.", j->url);
+                else if (j == i->settings_job)
                         log_info_errno(j->error, "Settings file could not be retrieved, proceeding without.");
-        } else if (j->error != 0 && j != i->signature_job) {
-                if (j == i->checksum_job)
-                        log_error_errno(j->error, "Failed to retrieve SHA256 checksum, cannot verify. (Try --verify=no?)");
                 else
-                        log_error_errno(j->error, "Failed to retrieve image file. (Wrong URL?)");
-
-                r = j->error;
-                goto finish;
+                        assert("unexpected job");
         }
 
         /* This is invoked if either the download completed successfully, or the download was skipped because
@@ -296,6 +344,8 @@
         if (i->signature_job && i->signature_job->error != 0) {
                 VerificationStyle style;
 
+                assert(i->checksum_job);
+
                 r = verification_style_from_url(i->checksum_job->url, &style);
                 if (r < 0) {
                         log_error_errno(r, "Failed to determine verification style from checksum URL: %m");
@@ -306,23 +356,17 @@
                                                             * in per-directory verification mode, since only
                                                             * then the signature is detached, and thus a file
                                                             * of its own. */
-                        log_error_errno(j->error, "Failed to retrieve signature file, cannot verify. (Try --verify=no?)");
-                        r = i->signature_job->error;
+                        r = log_error_errno(i->signature_job->error,
+                                            "Failed to retrieve signature file, cannot verify. (Try --verify=no?)");
                         goto finish;
                 }
         }
 
-        i->tar_job->disk_fd = safe_close(i->tar_job->disk_fd);
-        if (i->settings_job)
-                i->settings_job->disk_fd = safe_close(i->settings_job->disk_fd);
-
-        r = tar_pull_determine_path(i, NULL, &i->final_path);
-        if (r < 0)
-                goto finish;
+        pull_job_close_disk_fd(i->tar_job);
+        pull_job_close_disk_fd(i->settings_job);
 
         if (i->tar_pid > 0) {
-                r = wait_for_terminate_and_check("tar", i->tar_pid, WAIT_LOG);
-                i->tar_pid = 0;
+                r = wait_for_terminate_and_check("tar", TAKE_PID(i->tar_pid), WAIT_LOG);
                 if (r < 0)
                         goto finish;
                 if (r != EXIT_SUCCESS) {
@@ -337,6 +381,7 @@
                 tar_pull_report_progress(i, TAR_VERIFYING);
 
                 r = pull_verify(i->verify,
+                                i->checksum,
                                 i->tar_job,
                                 i->checksum_job,
                                 i->signature_job,
@@ -346,60 +391,93 @@
                                 /* verity_job = */ NULL);
                 if (r < 0)
                         goto finish;
+        }
+
+        if (i->flags & PULL_DIRECT) {
+                assert(!i->settings_job);
+                assert(i->local);
+                assert(!i->temp_path);
 
                 tar_pull_report_progress(i, TAR_FINALIZING);
 
-                r = import_mangle_os_tree(i->temp_path);
+                r = import_mangle_os_tree(i->local);
                 if (r < 0)
                         goto finish;
 
-                r = import_make_read_only(i->temp_path);
-                if (r < 0)
-                        goto finish;
-
-                r = rename_noreplace(AT_FDCWD, i->temp_path, AT_FDCWD, i->final_path);
+                r = install_file(
+                                AT_FDCWD, i->local,
+                                AT_FDCWD, NULL,
+                                (i->flags & PULL_READ_ONLY) ? INSTALL_READ_ONLY : 0 |
+                                (i->flags & PULL_SYNC ? INSTALL_SYNCFS : 0));
                 if (r < 0) {
-                        log_error_errno(r, "Failed to rename to final image name to %s: %m", i->final_path);
+                        log_error_errno(r, "Failed to finalize '%s': %m", i->local);
                         goto finish;
                 }
+        } else {
+                r = tar_pull_determine_path(i, NULL, &i->final_path);
+                if (r < 0)
+                        goto finish;
 
-                i->temp_path = mfree(i->temp_path);
+                if (!i->tar_job->etag_exists) {
+                        /* This is a new download, verify it, and move it into place */
 
-                if (i->settings_job &&
-                    i->settings_job->error == 0) {
+                        assert(i->temp_path);
+                        assert(i->final_path);
 
-                        /* Also move the settings file into place, if it exists. Note that we do so only if we also
-                         * moved the tar file in place, to keep things strictly in sync. */
-                        assert(i->settings_temp_path);
+                        tar_pull_report_progress(i, TAR_FINALIZING);
 
-                        /* Regenerate final name for this auxiliary file, we might know the etag of the file now, and
-                         * we should incorporate it in the file name if we can */
-                        i->settings_path = mfree(i->settings_path);
-
-                        r = tar_pull_determine_path(i, ".nspawn", &i->settings_path);
+                        r = import_mangle_os_tree(i->temp_path);
                         if (r < 0)
                                 goto finish;
 
-                        r = import_make_read_only(i->settings_temp_path);
-                        if (r < 0)
-                                goto finish;
-
-                        r = rename_noreplace(AT_FDCWD, i->settings_temp_path, AT_FDCWD, i->settings_path);
+                        r = install_file(
+                                        AT_FDCWD, i->temp_path,
+                                        AT_FDCWD, i->final_path,
+                                        INSTALL_READ_ONLY|
+                                        (i->flags & PULL_SYNC ? INSTALL_SYNCFS : 0));
                         if (r < 0) {
-                                log_error_errno(r, "Failed to rename settings file to %s: %m", i->settings_path);
+                                log_error_errno(r, "Failed to rename to final image name to %s: %m", i->final_path);
                                 goto finish;
                         }
 
-                        i->settings_temp_path = mfree(i->settings_temp_path);
+                        i->temp_path = mfree(i->temp_path);
+
+                        if (i->settings_job &&
+                            i->settings_job->error == 0) {
+
+                                /* Also move the settings file into place, if it exists. Note that we do so only if we also
+                                 * moved the tar file in place, to keep things strictly in sync. */
+                                assert(i->settings_temp_path);
+
+                                /* Regenerate final name for this auxiliary file, we might know the etag of the file now, and
+                                 * we should incorporate it in the file name if we can */
+                                i->settings_path = mfree(i->settings_path);
+
+                                r = tar_pull_determine_path(i, ".nspawn", &i->settings_path);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = install_file(
+                                                AT_FDCWD, i->settings_temp_path,
+                                                AT_FDCWD, i->settings_path,
+                                                INSTALL_READ_ONLY|
+                                                (i->flags & PULL_SYNC ? INSTALL_FSYNC_FULL : 0));
+                                if (r < 0) {
+                                        log_error_errno(r, "Failed to rename settings file to %s: %m", i->settings_path);
+                                        goto finish;
+                                }
+
+                                i->settings_temp_path = mfree(i->settings_temp_path);
+                        }
                 }
+
+                tar_pull_report_progress(i, TAR_COPYING);
+
+                r = tar_pull_make_local_copy(i);
+                if (r < 0)
+                        goto finish;
         }
 
-        tar_pull_report_progress(i, TAR_COPYING);
-
-        r = tar_pull_make_local_copy(i);
-        if (r < 0)
-                goto finish;
-
         r = 0;
 
 finish:
@@ -410,6 +488,7 @@
 }
 
 static int tar_pull_job_on_open_disk_tar(PullJob *j) {
+        const char *where;
         TarPull *i;
         int r;
 
@@ -420,23 +499,39 @@
         assert(i->tar_job == j);
         assert(i->tar_pid <= 0);
 
-        if (!i->temp_path) {
-                r = tempfn_random_child(i->image_root, "tar", &i->temp_path);
-                if (r < 0)
-                        return log_oom();
+        if (i->flags & PULL_DIRECT)
+                where = i->local;
+        else {
+                if (!i->temp_path) {
+                        r = tempfn_random_child(i->image_root, "tar", &i->temp_path);
+                        if (r < 0)
+                                return log_oom();
+                }
+
+                where = i->temp_path;
         }
 
-        mkdir_parents_label(i->temp_path, 0700);
+        (void) mkdir_parents_label(where, 0700);
 
-        r = btrfs_subvol_make_fallback(i->temp_path, 0755);
+        if (FLAGS_SET(i->flags, PULL_DIRECT|PULL_FORCE))
+                (void) rm_rf(where, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
+
+        if (i->flags & PULL_BTRFS_SUBVOL)
+                r = btrfs_subvol_make_fallback(where, 0755);
+        else
+                r = RET_NERRNO(mkdir(where, 0755));
+        if (r == -EEXIST && (i->flags & PULL_DIRECT)) /* EEXIST is OK if in direct mode, but not otherwise,
+                                                       * because in that case our temporary path collided */
+                r = 0;
         if (r < 0)
-                return log_error_errno(r, "Failed to create directory/subvolume %s: %m", i->temp_path);
-        if (r > 0) { /* actually btrfs subvol */
-                (void) import_assign_pool_quota_and_warn(i->image_root);
-                (void) import_assign_pool_quota_and_warn(i->temp_path);
+                return log_error_errno(r, "Failed to create directory/subvolume %s: %m", where);
+        if (r > 0 && (i->flags & PULL_BTRFS_QUOTA)) { /* actually btrfs subvol */
+                if (!(i->flags & PULL_DIRECT))
+                        (void) import_assign_pool_quota_and_warn(i->image_root);
+                (void) import_assign_pool_quota_and_warn(where);
         }
 
-        j->disk_fd = import_fork_tar_x(i->temp_path, &i->tar_pid);
+        j->disk_fd = import_fork_tar_x(where, &i->tar_pid);
         if (j->disk_fd < 0)
                 return j->disk_fd;
 
@@ -459,7 +554,7 @@
                         return log_oom();
         }
 
-        mkdir_parents_label(i->settings_temp_path, 0700);
+        (void) mkdir_parents_label(i->settings_temp_path, 0700);
 
         j->disk_fd = open(i->settings_temp_path, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0664);
         if (j->disk_fd < 0)
@@ -484,19 +579,24 @@
                 const char *url,
                 const char *local,
                 PullFlags flags,
-                ImportVerify verify) {
+                ImportVerify verify,
+                const char *checksum) {
 
+        PullJob *j;
         int r;
 
         assert(i);
-        assert(verify < _IMPORT_VERIFY_MAX);
-        assert(verify >= 0);
+        assert(verify == _IMPORT_VERIFY_INVALID || verify < _IMPORT_VERIFY_MAX);
+        assert(verify == _IMPORT_VERIFY_INVALID || verify >= 0);
+        assert((verify < 0) || !checksum);
         assert(!(flags & ~PULL_FLAGS_MASK_TAR));
+        assert(!(flags & PULL_SETTINGS) || !(flags & PULL_DIRECT));
+        assert(!(flags & PULL_SETTINGS) || !checksum);
 
-        if (!http_url_is_valid(url))
+        if (!http_url_is_valid(url) && !file_url_is_valid(url))
                 return -EINVAL;
 
-        if (local && !hostname_is_valid(local, 0))
+        if (local && !pull_validate_local(local, flags))
                 return -EINVAL;
 
         if (i->tar_job)
@@ -506,6 +606,10 @@
         if (r < 0)
                 return r;
 
+        r = free_and_strdup(&i->checksum, checksum);
+        if (r < 0)
+                return r;
+
         i->flags = flags;
         i->verify = verify;
 
@@ -516,52 +620,56 @@
 
         i->tar_job->on_finished = tar_pull_job_on_finished;
         i->tar_job->on_open_disk = tar_pull_job_on_open_disk_tar;
-        i->tar_job->on_progress = tar_pull_job_on_progress;
-        i->tar_job->calc_checksum = verify != IMPORT_VERIFY_NO;
+        i->tar_job->calc_checksum = checksum || IN_SET(verify, IMPORT_VERIFY_CHECKSUM, IMPORT_VERIFY_SIGNATURE);
 
-        r = pull_find_old_etags(url, i->image_root, DT_DIR, ".tar-", NULL, &i->tar_job->old_etags);
-        if (r < 0)
-                return r;
+        if (!FLAGS_SET(flags, PULL_DIRECT)) {
+                r = pull_find_old_etags(url, i->image_root, DT_DIR, ".tar-", NULL, &i->tar_job->old_etags);
+                if (r < 0)
+                        return r;
+        }
 
         /* Set up download of checksum/signature files */
-        r = pull_make_verification_jobs(&i->checksum_job, &i->signature_job, verify, url, i->glue, tar_pull_job_on_finished, i);
+        r = pull_make_verification_jobs(
+                        &i->checksum_job,
+                        &i->signature_job,
+                        verify,
+                        checksum,
+                        url,
+                        i->glue,
+                        tar_pull_job_on_finished,
+                        i);
         if (r < 0)
                 return r;
 
         /* Set up download job for the settings file (.nspawn) */
         if (FLAGS_SET(flags, PULL_SETTINGS)) {
-                r = pull_make_auxiliary_job(&i->settings_job, url, tar_strip_suffixes, ".nspawn", i->glue, tar_pull_job_on_finished, i);
-                if (r < 0)
-                        return r;
-
-                i->settings_job->on_open_disk = tar_pull_job_on_open_disk_settings;
-                i->settings_job->on_progress = tar_pull_job_on_progress;
-                i->settings_job->calc_checksum = verify != IMPORT_VERIFY_NO;
-        }
-
-        r = pull_job_begin(i->tar_job);
-        if (r < 0)
-                return r;
-
-        if (i->checksum_job) {
-                i->checksum_job->on_progress = tar_pull_job_on_progress;
-                i->checksum_job->on_not_found = pull_job_restart_with_sha256sum;
-
-                r = pull_job_begin(i->checksum_job);
+                r = pull_make_auxiliary_job(
+                                &i->settings_job,
+                                url,
+                                tar_strip_suffixes,
+                                ".nspawn",
+                                verify,
+                                i->glue,
+                                tar_pull_job_on_open_disk_settings,
+                                tar_pull_job_on_finished,
+                                i);
                 if (r < 0)
                         return r;
         }
 
-        if (i->signature_job) {
-                i->signature_job->on_progress = tar_pull_job_on_progress;
+        FOREACH_POINTER(j,
+                        i->tar_job,
+                        i->checksum_job,
+                        i->signature_job,
+                        i->settings_job) {
 
-                r = pull_job_begin(i->signature_job);
-                if (r < 0)
-                        return r;
-        }
+                if (!j)
+                        continue;
 
-        if (i->settings_job) {
-                r = pull_job_begin(i->settings_job);
+                j->on_progress = tar_pull_job_on_progress;
+                j->sync = FLAGS_SET(flags, PULL_SYNC);
+
+                r = pull_job_begin(j);
                 if (r < 0)
                         return r;
         }
diff --git a/src/import/pull-tar.h b/src/import/pull-tar.h
index 4140775..e54c01c 100644
--- a/src/import/pull-tar.h
+++ b/src/import/pull-tar.h
@@ -16,4 +16,4 @@
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(TarPull*, tar_pull_unref);
 
-int tar_pull_start(TarPull *pull, const char *url, const char *local, PullFlags flags, ImportVerify verify);
+int tar_pull_start(TarPull *pull, const char *url, const char *local, PullFlags flags, ImportVerify verify, const char *checksum);
diff --git a/src/import/pull.c b/src/import/pull.c
index d24c71b..38821b5 100644
--- a/src/import/pull.c
+++ b/src/import/pull.c
@@ -7,25 +7,89 @@
 #include "sd-id128.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "discover-image.h"
+#include "env-util.h"
+#include "hexdecoct.h"
 #include "hostname-util.h"
+#include "import-common.h"
 #include "import-util.h"
+#include "io-util.h"
 #include "main-func.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "pull-raw.h"
 #include "pull-tar.h"
 #include "signal-util.h"
 #include "string-util.h"
+#include "terminal-util.h"
 #include "verbs.h"
 #include "web-util.h"
 
 static const char *arg_image_root = "/var/lib/machines";
 static ImportVerify arg_verify = IMPORT_VERIFY_SIGNATURE;
-static PullFlags arg_pull_flags = PULL_SETTINGS | PULL_ROOTHASH | PULL_ROOTHASH_SIGNATURE | PULL_VERITY;
+static PullFlags arg_pull_flags = PULL_SETTINGS | PULL_ROOTHASH | PULL_ROOTHASH_SIGNATURE | PULL_VERITY | PULL_BTRFS_SUBVOL | PULL_BTRFS_QUOTA | PULL_CONVERT_QCOW2 | PULL_SYNC;
+static uint64_t arg_offset = UINT64_MAX, arg_size_max = UINT64_MAX;
+static char *arg_checksum = NULL;
 
-static int interrupt_signal_handler(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        log_notice("Transfer aborted.");
-        sd_event_exit(sd_event_source_get_event(s), EINTR);
+STATIC_DESTRUCTOR_REGISTER(arg_checksum, freep);
+
+static int normalize_local(const char *local, const char *url, char **ret) {
+        _cleanup_free_ char *ll = NULL;
+        int r;
+
+        if (arg_pull_flags & PULL_DIRECT) {
+
+                if (!local)
+                        log_debug("Writing downloaded data to STDOUT.");
+                else {
+                        if (!path_is_absolute(local)) {
+                                ll = path_join(arg_image_root, local);
+                                if (!ll)
+                                        return log_oom();
+
+                                local = ll;
+                        }
+
+                        if (!path_is_valid(local))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Local path name '%s' is not valid.", local);
+                }
+
+        } else if (local) {
+
+                if (!hostname_is_valid(local, 0))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Local image name '%s' is not valid.",
+                                               local);
+
+                if (!FLAGS_SET(arg_pull_flags, PULL_FORCE)) {
+                        r = image_find(IMAGE_MACHINE, local, NULL, NULL);
+                        if (r < 0) {
+                                if (r != -ENOENT)
+                                        return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
+                        } else
+                                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
+                                                       "Image '%s' already exists.",
+                                                       local);
+                }
+        }
+
+        if (!ll && local) {
+                ll = strdup(local);
+                if (!ll)
+                        return log_oom();
+        }
+
+        if (ll) {
+                if (arg_offset != UINT64_MAX)
+                        log_info("Pulling '%s', saving at offset %" PRIu64 " in '%s'.", url, arg_offset, ll);
+                else
+                        log_info("Pulling '%s', saving as '%s'.", url, ll);
+        } else
+                log_info("Pulling '%s'.", url);
+
+        *ret = TAKE_PTR(ll);
         return 0;
 }
 
@@ -40,70 +104,57 @@
 }
 
 static int pull_tar(int argc, char *argv[], void *userdata) {
-        _cleanup_(tar_pull_unrefp) TarPull *pull = NULL;
+        _cleanup_free_ char *ll = NULL, *normalized = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        _cleanup_(tar_pull_unrefp) TarPull *pull = NULL;
         const char *url, *local;
-        _cleanup_free_ char *l = NULL, *ll = NULL;
         int r;
 
         url = argv[1];
-        if (!http_url_is_valid(url))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "URL '%s' is not valid.", url);
+        if (!http_url_is_valid(url) && !file_url_is_valid(url))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "URL '%s' is not valid.", url);
 
         if (argc >= 3)
-                local = argv[2];
+                local = empty_or_dash_to_null(argv[2]);
         else {
+                _cleanup_free_ char *l = NULL;
+
                 r = import_url_last_component(url, &l);
                 if (r < 0)
-                        return log_error_errno(r, "Failed get final component of URL: %m");
+                        return log_error_errno(r, "Failed to get final component of URL: %m");
 
-                local = l;
-        }
-
-        local = empty_or_dash_to_null(local);
-
-        if (local) {
-                r = tar_strip_suffixes(local, &ll);
+                r = tar_strip_suffixes(l, &ll);
                 if (r < 0)
                         return log_oom();
 
                 local = ll;
+        }
 
-                if (!hostname_is_valid(local, 0))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Local image name '%s' is not valid.",
-                                               local);
+        if (!local && FLAGS_SET(arg_pull_flags, PULL_DIRECT))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Pulling tar images to STDOUT is not supported.");
 
-                if (!FLAGS_SET(arg_pull_flags, PULL_FORCE)) {
-                        r = image_find(IMAGE_MACHINE, local, NULL, NULL);
-                        if (r < 0) {
-                                if (r != -ENOENT)
-                                        return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
-                        } else {
-                                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
-                                                       "Image '%s' already exists.",
-                                                       local);
-                        }
-                }
-
-                log_info("Pulling '%s', saving as '%s'.", url, local);
-        } else
-                log_info("Pulling '%s'.", url);
-
-        r = sd_event_default(&event);
+        r = normalize_local(local, url, &normalized);
         if (r < 0)
-                return log_error_errno(r, "Failed to allocate event loop: %m");
+                return r;
 
-        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
-        (void) sd_event_add_signal(event, NULL, SIGTERM, interrupt_signal_handler,  NULL);
-        (void) sd_event_add_signal(event, NULL, SIGINT, interrupt_signal_handler, NULL);
+        r = import_allocate_event_with_signals(&event);
+        if (r < 0)
+                return r;
+
+        if (!FLAGS_SET(arg_pull_flags, PULL_SYNC))
+                log_info("File system synchronization on completion is off.");
 
         r = tar_pull_new(&pull, event, arg_image_root, on_tar_finished, event);
         if (r < 0)
                 return log_error_errno(r, "Failed to allocate puller: %m");
 
-        r = tar_pull_start(pull, url, local, arg_pull_flags & PULL_FLAGS_MASK_TAR, arg_verify);
+        r = tar_pull_start(
+                        pull,
+                        url,
+                        normalized,
+                        arg_pull_flags & PULL_FLAGS_MASK_TAR,
+                        arg_verify,
+                        arg_checksum);
         if (r < 0)
                 return log_error_errno(r, "Failed to pull image: %m");
 
@@ -126,70 +177,55 @@
 }
 
 static int pull_raw(int argc, char *argv[], void *userdata) {
-        _cleanup_(raw_pull_unrefp) RawPull *pull = NULL;
+        _cleanup_free_ char *ll = NULL, *normalized = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        _cleanup_(raw_pull_unrefp) RawPull *pull = NULL;
         const char *url, *local;
-        _cleanup_free_ char *l = NULL, *ll = NULL;
         int r;
 
         url = argv[1];
-        if (!http_url_is_valid(url))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "URL '%s' is not valid.", url);
+        if (!http_url_is_valid(url) && !file_url_is_valid(url))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "URL '%s' is not valid.", url);
 
         if (argc >= 3)
-                local = argv[2];
+                local = empty_or_dash_to_null(argv[2]);
         else {
+                _cleanup_free_ char *l = NULL;
+
                 r = import_url_last_component(url, &l);
                 if (r < 0)
-                        return log_error_errno(r, "Failed get final component of URL: %m");
+                        return log_error_errno(r, "Failed to get final component of URL: %m");
 
-                local = l;
-        }
-
-        local = empty_or_dash_to_null(local);
-
-        if (local) {
-                r = raw_strip_suffixes(local, &ll);
+                r = raw_strip_suffixes(l, &ll);
                 if (r < 0)
                         return log_oom();
 
                 local = ll;
+        }
 
-                if (!hostname_is_valid(local, 0))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Local image name '%s' is not valid.",
-                                               local);
-
-                if (!FLAGS_SET(arg_pull_flags, PULL_FORCE)) {
-                        r = image_find(IMAGE_MACHINE, local, NULL, NULL);
-                        if (r < 0) {
-                                if (r != -ENOENT)
-                                        return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
-                        } else {
-                                return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
-                                                       "Image '%s' already exists.",
-                                                       local);
-                        }
-                }
-
-                log_info("Pulling '%s', saving as '%s'.", url, local);
-        } else
-                log_info("Pulling '%s'.", url);
-
-        r = sd_event_default(&event);
+        r = normalize_local(local, url, &normalized);
         if (r < 0)
-                return log_error_errno(r, "Failed to allocate event loop: %m");
+                return r;
 
-        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
-        (void) sd_event_add_signal(event, NULL, SIGTERM, interrupt_signal_handler,  NULL);
-        (void) sd_event_add_signal(event, NULL, SIGINT, interrupt_signal_handler, NULL);
+        r = import_allocate_event_with_signals(&event);
+        if (r < 0)
+                return r;
 
-        r = raw_pull_new(&pull, event, arg_image_root, on_raw_finished, event);
+        if (!FLAGS_SET(arg_pull_flags, PULL_SYNC))
+                log_info("File system synchronization on completion is off.");
+         r = raw_pull_new(&pull, event, arg_image_root, on_raw_finished, event);
         if (r < 0)
                 return log_error_errno(r, "Failed to allocate puller: %m");
 
-        r = raw_pull_start(pull, url, local, arg_pull_flags & PULL_FLAGS_MASK_RAW, arg_verify);
+        r = raw_pull_start(
+                        pull,
+                        url,
+                        normalized,
+                        arg_offset,
+                        arg_size_max,
+                        arg_pull_flags & PULL_FLAGS_MASK_RAW,
+                        arg_verify,
+                        arg_checksum);
         if (r < 0)
                 return log_error_errno(r, "Failed to pull image: %m");
 
@@ -203,23 +239,39 @@
 
 static int help(int argc, char *argv[], void *userdata) {
 
-        printf("%s [OPTIONS...] {COMMAND} ...\n\n"
-               "Download container or virtual machine images.\n\n"
+        printf("%1$s [OPTIONS...] {COMMAND} ...\n"
+               "\n%4$sDownload container or virtual machine images.%5$s\n"
+               "\n%2$sCommands:%3$s\n"
+               "  tar URL [NAME]              Download a TAR image\n"
+               "  raw URL [NAME]              Download a RAW image\n"
+               "\n%2$sOptions:%3$s\n"
                "  -h --help                   Show this help\n"
                "     --version                Show package version\n"
                "     --force                  Force creation of image\n"
                "     --verify=MODE            Verify downloaded image, one of: 'no',\n"
-               "                              'checksum', 'signature'\n"
+               "                              'checksum', 'signature' or literal SHA256 hash\n"
                "     --settings=BOOL          Download settings file with image\n"
                "     --roothash=BOOL          Download root hash file with image\n"
                "     --roothash-signature=BOOL\n"
                "                              Download root hash signature file with image\n"
                "     --verity=BOOL            Download verity file with image\n"
                "     --image-root=PATH        Image root directory\n\n"
-               "Commands:\n"
-               "  tar URL [NAME]              Download a TAR image\n"
-               "  raw URL [NAME]              Download a RAW image\n",
-               program_invocation_short_name);
+               "     --read-only              Create a read-only image\n"
+               "     --direct                 Download directly to specified file\n"
+               "     --btrfs-subvol=BOOL      Controls whether to create a btrfs subvolume\n"
+               "                              instead of a directory\n"
+               "     --btrfs-quota=BOOL       Controls whether to set up quota for btrfs\n"
+               "                              subvolume\n"
+               "     --convert-qcow2=BOOL     Controls whether to convert QCOW2 images to\n"
+               "                              regular disk images\n"
+               "     --sync=BOOL              Controls whether to sync() before completing\n"
+               "     --offset=BYTES           Offset to seek to in destination\n"
+               "     --size-max=BYTES         Maximum number of bytes to write to destination\n",
+               program_invocation_short_name,
+               ansi_underline(),
+               ansi_normal(),
+               ansi_highlight(),
+               ansi_normal());
 
         return 0;
 }
@@ -235,6 +287,14 @@
                 ARG_ROOTHASH,
                 ARG_ROOTHASH_SIGNATURE,
                 ARG_VERITY,
+                ARG_READ_ONLY,
+                ARG_DIRECT,
+                ARG_BTRFS_SUBVOL,
+                ARG_BTRFS_QUOTA,
+                ARG_CONVERT_QCOW2,
+                ARG_SYNC,
+                ARG_OFFSET,
+                ARG_SIZE_MAX,
         };
 
         static const struct option options[] = {
@@ -247,6 +307,14 @@
                 { "roothash",           required_argument, NULL, ARG_ROOTHASH           },
                 { "roothash-signature", required_argument, NULL, ARG_ROOTHASH_SIGNATURE },
                 { "verity",             required_argument, NULL, ARG_VERITY             },
+                { "read-only",          no_argument,       NULL, ARG_READ_ONLY          },
+                { "direct",             no_argument,       NULL, ARG_DIRECT             },
+                { "btrfs-subvol",       required_argument, NULL, ARG_BTRFS_SUBVOL       },
+                { "btrfs-quota",        required_argument, NULL, ARG_BTRFS_QUOTA        },
+                { "convert-qcow2",      required_argument, NULL, ARG_CONVERT_QCOW2      },
+                { "sync",               required_argument, NULL, ARG_SYNC               },
+                { "offset",             required_argument, NULL, ARG_OFFSET             },
+                { "size-max",           required_argument, NULL, ARG_SIZE_MAX           },
                 {}
         };
 
@@ -273,26 +341,51 @@
                         arg_image_root = optarg;
                         break;
 
-                case ARG_VERIFY:
-                        arg_verify = import_verify_from_string(optarg);
-                        if (arg_verify < 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Invalid verification setting '%s'", optarg);
+                case ARG_VERIFY: {
+                        ImportVerify v;
+
+                        v = import_verify_from_string(optarg);
+                        if (v < 0) {
+                                _cleanup_free_ void *h = NULL;
+                                char *hh;
+                                size_t n;
+
+                                /* If this is not a valid verification mode, maybe it's a literally specified
+                                 * SHA256 hash? We can handle that too... */
+
+                                r = unhexmem(optarg, (size_t) -1, &h, &n);
+                                if (r < 0 || n == 0)
+                                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                               "Invalid verification setting: %s", optarg);
+                                if (n != 32)
+                                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                               "64 hex character SHA256 hash required when specifying explicit checksum, %zu specified", n * 2);
+
+                                hh = hexmem(h, n); /* bring into canonical (lowercase) form */
+                                if (!hh)
+                                        return log_oom();
+
+                                free_and_replace(arg_checksum, hh);
+                                arg_pull_flags &= ~(PULL_SETTINGS|PULL_ROOTHASH|PULL_ROOTHASH_SIGNATURE|PULL_VERITY);
+                                arg_verify = _IMPORT_VERIFY_INVALID;
+                        } else
+                                arg_verify = v;
 
                         break;
+                }
 
                 case ARG_SETTINGS:
-                        r = parse_boolean(optarg);
+                        r = parse_boolean_argument("--settings=", optarg, NULL);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to parse --settings= parameter '%s': %m", optarg);
+                                return r;
 
                         SET_FLAG(arg_pull_flags, PULL_SETTINGS, r);
                         break;
 
                 case ARG_ROOTHASH:
-                        r = parse_boolean(optarg);
+                        r = parse_boolean_argument("--roothash=", optarg, NULL);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to parse --roothash= parameter '%s': %m", optarg);
+                                return r;
 
                         SET_FLAG(arg_pull_flags, PULL_ROOTHASH, r);
 
@@ -302,31 +395,135 @@
                         break;
 
                 case ARG_ROOTHASH_SIGNATURE:
-                        r = parse_boolean(optarg);
+                        r = parse_boolean_argument("--roothash-signature=", optarg, NULL);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to parse --roothash-signature= parameter '%s': %m", optarg);
+                                return r;
 
                         SET_FLAG(arg_pull_flags, PULL_ROOTHASH_SIGNATURE, r);
                         break;
 
                 case ARG_VERITY:
-                        r = parse_boolean(optarg);
+                        r = parse_boolean_argument("--verity=", optarg, NULL);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to parse --verity= parameter '%s': %m", optarg);
+                                return r;
 
                         SET_FLAG(arg_pull_flags, PULL_VERITY, r);
                         break;
 
+                case ARG_READ_ONLY:
+                        arg_pull_flags |= PULL_READ_ONLY;
+                        break;
+
+                case ARG_DIRECT:
+                        arg_pull_flags |= PULL_DIRECT;
+                        arg_pull_flags &= ~(PULL_SETTINGS|PULL_ROOTHASH|PULL_ROOTHASH_SIGNATURE|PULL_VERITY);
+                        break;
+
+                case ARG_BTRFS_SUBVOL:
+                        r = parse_boolean_argument("--btrfs-subvol=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_pull_flags, PULL_BTRFS_SUBVOL, r);
+                        break;
+
+                case ARG_BTRFS_QUOTA:
+                        r = parse_boolean_argument("--btrfs-quota=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_pull_flags, PULL_BTRFS_QUOTA, r);
+                        break;
+
+                case ARG_CONVERT_QCOW2:
+                        r = parse_boolean_argument("--convert-qcow2=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_pull_flags, PULL_CONVERT_QCOW2, r);
+                        break;
+
+                case ARG_SYNC:
+                        r = parse_boolean_argument("--sync=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_pull_flags, PULL_SYNC, r);
+                        break;
+
+                case ARG_OFFSET: {
+                        uint64_t u;
+
+                        r = safe_atou64(optarg, &u);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --offset= argument: %s", optarg);
+                        if (!FILE_SIZE_VALID(u))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Argument to --offset= switch too large: %s", optarg);
+
+                        arg_offset = u;
+                        break;
+                }
+
+                case ARG_SIZE_MAX: {
+                        uint64_t u;
+
+                        r = parse_size(optarg, 1024, &u);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --size-max= argument: %s", optarg);
+                        if (!FILE_SIZE_VALID(u))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Argument to --size-max= switch too large: %s", optarg);
+
+                        arg_size_max = u;
+                        break;
+                }
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
+        /* Make sure offset+size is still in the valid range if both set */
+        if (arg_offset != UINT64_MAX && arg_size_max != UINT64_MAX &&
+            ((arg_size_max > (UINT64_MAX - arg_offset)) ||
+             !FILE_SIZE_VALID(arg_offset + arg_size_max)))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "File offset und maximum size out of range.");
+
+        if (arg_offset != UINT64_MAX && !FLAGS_SET(arg_pull_flags, PULL_DIRECT))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "File offset only supported in --direct mode.");
+
+        if (arg_checksum && (arg_pull_flags & (PULL_SETTINGS|PULL_ROOTHASH|PULL_ROOTHASH_SIGNATURE|PULL_VERITY)) != 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Literal checksum verification only supported if no associated files are downloaded.");
+
         return 1;
 }
 
+static void parse_env(void) {
+        int r;
+
+        /* Let's make these relatively low-level settings also controllable via env vars. User can then set
+         * them for systemd-importd.service if they like to tweak behaviour */
+
+        r = getenv_bool("SYSTEMD_IMPORT_BTRFS_SUBVOL");
+        if (r >= 0)
+                SET_FLAG(arg_pull_flags, PULL_BTRFS_SUBVOL, r);
+        else if (r != -ENXIO)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_IMPORT_BTRFS_SUBVOL: %m");
+
+        r = getenv_bool("SYSTEMD_IMPORT_BTRFS_QUOTA");
+        if (r >= 0)
+                SET_FLAG(arg_pull_flags, PULL_BTRFS_QUOTA, r);
+        else if (r != -ENXIO)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_IMPORT_BTRFS_QUOTA: %m");
+
+        r = getenv_bool("SYSTEMD_IMPORT_SYNC");
+        if (r >= 0)
+                SET_FLAG(arg_pull_flags, PULL_SYNC, r);
+        else if (r != -ENXIO)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_IMPORT_SYNC: %m");
+}
+
 static int pull_main(int argc, char *argv[]) {
         static const Verb verbs[] = {
                 { "help", VERB_ANY, VERB_ANY, 0, help     },
@@ -345,6 +542,8 @@
         log_parse_environment();
         log_open();
 
+        parse_env();
+
         r = parse_argv(argc, argv);
         if (r <= 0)
                 return r;
diff --git a/src/import/qcow2-util.c b/src/import/qcow2-util.c
index 5a7232d..fe2b535 100644
--- a/src/import/qcow2-util.c
+++ b/src/import/qcow2-util.c
@@ -6,7 +6,6 @@
 #include "btrfs-util.h"
 #include "qcow2-util.h"
 #include "sparse-endian.h"
-#include "util.h"
 
 #define QCOW2_MAGIC 0x514649fb
 
diff --git a/src/import/test-qcow2.c b/src/import/test-qcow2.c
index 77fed01..ca31fd6 100644
--- a/src/import/test-qcow2.c
+++ b/src/import/test-qcow2.c
@@ -9,7 +9,7 @@
 #include "qcow2-util.h"
 
 int main(int argc, char *argv[]) {
-        _cleanup_close_ int sfd = -1, dfd = -1;
+        _cleanup_close_ int sfd = -EBADF, dfd = -EBADF;
         int r;
 
         if (argc != 3) {
diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c
index a48a857..0882570 100644
--- a/src/initctl/initctl.c
+++ b/src/initctl/initctl.c
@@ -14,8 +14,8 @@
 #include "alloc-util.h"
 #include "bus-error.h"
 #include "bus-util.h"
+#include "constants.h"
 #include "daemon-util.h"
-#include "def.h"
 #include "fd-util.h"
 #include "format-util.h"
 #include "initreq.h"
@@ -24,6 +24,7 @@
 #include "main-func.h"
 #include "memory-util.h"
 #include "process-util.h"
+#include "reboot-util.h"
 #include "special.h"
 
 #define SERVER_FD_MAX 16
@@ -103,7 +104,7 @@
         else
                 mode = "replace-irreversibly";
 
-        log_debug("Running request %s/start/%s", target, mode);
+        log_debug("Requesting %s/start/%s", target, mode);
 
         r = sd_bus_call_method(
                         s->bus,
@@ -310,7 +311,7 @@
 }
 
 static int run(int argc, char *argv[]) {
-        _cleanup_(server_done) Server server = { .epoll_fd = -1 };
+        _cleanup_(server_done) Server server = { .epoll_fd = -EBADF };
         _unused_ _cleanup_(notify_on_cleanup) const char *notify_stop = NULL;
         int r, n;
 
diff --git a/src/integritysetup/integrity-util.c b/src/integritysetup/integrity-util.c
new file mode 100644
index 0000000..c2d2f95
--- /dev/null
+++ b/src/integritysetup/integrity-util.c
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include "integrity-util.h"
+
+#include "extract-word.h"
+#include "fileio.h"
+#include "path-util.h"
+#include "percent-util.h"
+
+
+static int supported_integrity_algorithm(char *user_supplied) {
+        if (!STR_IN_SET(user_supplied, "crc32", "crc32c", "sha1", "sha256", "hmac-sha256"))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unsupported integrity algorithm (%s)", user_supplied);
+        return 0;
+}
+
+int parse_integrity_options(
+                const char *options,
+                uint32_t *ret_activate_flags,
+                int *ret_percent,
+                usec_t *ret_commit_time,
+                char **ret_data_device,
+                char **ret_integrity_alg) {
+        int r;
+
+        for (;;) {
+                _cleanup_free_ char *word = NULL;
+                char *val;
+
+                r = extract_first_word(&options, &word, ",", EXTRACT_DONT_COALESCE_SEPARATORS | EXTRACT_UNESCAPE_SEPARATORS);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse options: %m");
+                if (r == 0)
+                        break;
+                else if (streq(word, "allow-discards")) {
+                        if (ret_activate_flags)
+                                *ret_activate_flags |= CRYPT_ACTIVATE_ALLOW_DISCARDS;
+                } else if ((val = startswith(word, "journal-watermark="))) {
+                        r = parse_percent(val);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse journal-watermark value or value out of range (%s)", val);
+                        if (ret_percent)
+                                *ret_percent = r;
+                } else if ((val = startswith(word, "journal-commit-time="))) {
+                        usec_t tmp_commit_time;
+                        r = parse_sec(val, &tmp_commit_time);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse journal-commit-time value (%s)", val);
+                        if (ret_commit_time)
+                                *ret_commit_time = tmp_commit_time;
+                } else if ((val = startswith(word, "data-device="))) {
+                        if (ret_data_device) {
+                                r = free_and_strdup(ret_data_device, val);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+                } else if ((val = startswith(word, "integrity-algorithm="))) {
+                        r = supported_integrity_algorithm(val);
+                        if (r < 0)
+                                return r;
+                        if (ret_integrity_alg) {
+                                r = free_and_strdup(ret_integrity_alg, val);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+                } else
+                        log_warning("Encountered unknown option '%s', ignoring.", word);
+        }
+
+        return r;
+}
diff --git a/src/integritysetup/integrity-util.h b/src/integritysetup/integrity-util.h
new file mode 100644
index 0000000..b27975c
--- /dev/null
+++ b/src/integritysetup/integrity-util.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdint.h>
+
+#include "cryptsetup-util.h"
+#include "time-util.h"
+
+
+int parse_integrity_options(
+                const char *options,
+                uint32_t *ret_activate_flags,
+                int *ret_percent,
+                usec_t *ret_commit_time,
+                char **ret_data_device,
+                char **ret_integrity_alg);
+
+#define DM_HMAC_256 "hmac(sha256)"
+#define DM_MAX_KEY_SIZE 4096            /* Maximum size of key allowed for dm-integrity */
diff --git a/src/integritysetup/integritysetup-generator.c b/src/integritysetup/integritysetup-generator.c
new file mode 100644
index 0000000..15f5089
--- /dev/null
+++ b/src/integritysetup/integritysetup-generator.c
@@ -0,0 +1,181 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "alloc-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "fstab-util.h"
+#include "generator.h"
+#include "hexdecoct.h"
+#include "id128-util.h"
+#include "integrity-util.h"
+#include "main-func.h"
+#include "mkdir.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "proc-cmdline.h"
+#include "specifier.h"
+#include "string-util.h"
+#include "unit-name.h"
+
+static const char *arg_dest = NULL;
+static const char *arg_integritytab = NULL;
+static char *arg_options = NULL;
+STATIC_DESTRUCTOR_REGISTER(arg_options, freep);
+
+static int create_disk(
+                const char *name,
+                const char *device,
+                const char *key_file,
+                const char *options) {
+
+        _cleanup_free_ char *n = NULL, *dd = NULL, *e = NULL, *name_escaped = NULL, *key_file_escaped = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        int r;
+        char *dmname = NULL;
+
+        assert(name);
+        assert(device);
+
+        name_escaped = specifier_escape(name);
+        if (!name_escaped)
+                return log_oom();
+
+        e = unit_name_escape(name);
+        if (!e)
+                return log_oom();
+
+        r = unit_name_build("systemd-integritysetup", e, ".service", &n);
+        if (r < 0)
+                return log_error_errno(r, "Failed to generate unit name: %m");
+
+        r = unit_name_from_path(device, ".device", &dd);
+        if (r < 0)
+                return log_error_errno(r, "Failed to generate unit name: %m");
+
+        r = generator_open_unit_file(arg_dest, NULL, n, &f);
+        if (r < 0)
+                return r;
+
+        if (key_file) {
+                if (!path_is_absolute(key_file))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "key file not absolute file path %s", key_file);
+
+                key_file_escaped = specifier_escape(key_file);
+                if (!key_file_escaped)
+                        return log_oom();
+        }
+
+        if (options) {
+                r = parse_integrity_options(options, NULL, NULL, NULL, NULL, NULL);
+                if (r < 0)
+                        return r;
+        }
+
+        fprintf(f,
+                "[Unit]\n"
+                "Description=Integrity Setup for %%I\n"
+                "Documentation=man:integritytab(5) man:systemd-integritysetup-generator(8) man:systemd-integritysetup@.service(8)\n"
+                "SourcePath=%s\n"
+                "DefaultDependencies=no\n"
+                "IgnoreOnIsolate=true\n"
+                "After=integritysetup-pre.target systemd-udevd-kernel.socket\n"
+                "Before=blockdev@dev-mapper-%%i.target\n"
+                "Wants=blockdev@dev-mapper-%%i.target\n"
+                "Conflicts=umount.target\n"
+                "Before=integritysetup.target\n"
+                "BindsTo=%s\n"
+                "After=%s\n"
+                "Before=umount.target\n",
+                arg_integritytab,
+                dd, dd);
+
+        fprintf(f,
+                "\n"
+                "[Service]\n"
+                "Type=oneshot\n"
+                "RemainAfterExit=yes\n"
+                "TimeoutSec=0\n"
+                "ExecStart=" ROOTLIBEXECDIR "/systemd-integritysetup attach '%s' '%s' '%s' '%s'\n"
+                "ExecStop=" ROOTLIBEXECDIR "/systemd-integritysetup detach '%s'\n",
+                name_escaped, device, empty_to_dash(key_file_escaped), empty_to_dash(options),
+                name_escaped);
+
+        r = fflush_and_check(f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write unit file %s: %m", n);
+
+        r = generator_add_symlink(arg_dest, "integritysetup.target", "requires", n);
+        if (r < 0)
+                return r;
+
+        dmname = strjoina("dev-mapper-", e, ".device");
+        return generator_add_symlink(arg_dest, dmname, "requires", n);
+}
+
+static int add_integritytab_devices(void) {
+        _cleanup_fclose_ FILE *f = NULL;
+        unsigned integritytab_line = 0;
+        int r;
+
+        r = fopen_unlocked(arg_integritytab, "re", &f);
+        if (r < 0) {
+                if (errno != ENOENT)
+                        log_error_errno(errno, "Failed to open %s: %m", arg_integritytab);
+                return 0;
+        }
+
+        for (;;) {
+                _cleanup_free_ char *line = NULL, *name = NULL, *device_id = NULL, *device_path = NULL, *key_file = NULL, *options = NULL;
+                char *l;
+
+                r = read_line(f, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read %s: %m", arg_integritytab);
+                if (r == 0)
+                        break;
+
+                integritytab_line++;
+
+                l = strstrip(line);
+                if (!l)
+                        continue;
+
+                if (IN_SET(l[0], 0, '#'))
+                        continue;
+
+                /* The key file and the options are optional */
+                r = sscanf(l, "%ms %ms %ms %ms", &name, &device_id, &key_file, &options);
+                if (!IN_SET(r, 2, 3, 4)) {
+                        log_error("Failed to parse %s:%u, ignoring.", l, integritytab_line);
+                        continue;
+                }
+
+                device_path = fstab_node_to_udev_node(device_id);
+                if (!device_path) {
+                        log_error("Failed to find device %s:%u, ignoring.", device_id, integritytab_line);
+                        continue;
+                }
+
+                r = create_disk(name, device_path, empty_or_dash_to_null(key_file), empty_or_dash_to_null(options));
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int run(const char *dest, const char *dest_early, const char *dest_late) {
+        assert_se(arg_dest = dest);
+
+        arg_integritytab = getenv("SYSTEMD_INTEGRITYTAB") ?: "/etc/integritytab";
+
+        return add_integritytab_devices();
+}
+
+DEFINE_MAIN_GENERATOR_FUNCTION(run);
diff --git a/src/integritysetup/integritysetup.c b/src/integritysetup/integritysetup.c
new file mode 100644
index 0000000..a602886
--- /dev/null
+++ b/src/integritysetup/integritysetup.c
@@ -0,0 +1,203 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <stdio.h>
+#include <sys/stat.h>
+
+#include "alloc-util.h"
+#include "cryptsetup-util.h"
+#include "fileio.h"
+#include "hexdecoct.h"
+#include "integrity-util.h"
+#include "log.h"
+#include "main-func.h"
+#include "memory-util.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "pretty-print.h"
+#include "process-util.h"
+#include "string-util.h"
+#include "terminal-util.h"
+
+static uint32_t arg_activate_flags;
+static int arg_percent;
+static usec_t arg_commit_time;
+static char *arg_existing_data_device;
+static char *arg_integrity_algorithm;
+
+STATIC_DESTRUCTOR_REGISTER(arg_existing_data_device, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_integrity_algorithm, freep);
+
+static int help(void) {
+        _cleanup_free_ char *link = NULL;
+        int r;
+
+        r = terminal_urlify_man("systemd-integritysetup@.service", "8", &link);
+        if (r < 0)
+                return log_oom();
+
+        printf("%s attach VOLUME DEVICE [HMAC_KEY_FILE|-] [OPTIONS]\n"
+               "%s detach VOLUME\n\n"
+               "Attach or detach an integrity protected block device.\n"
+               "\nSee the %s for details.\n",
+               program_invocation_short_name,
+               program_invocation_short_name,
+               link);
+
+        return 0;
+}
+
+static int load_key_file(
+                const char *key_file,
+                void **ret_key_file_contents,
+                size_t *ret_key_file_size) {
+        int r;
+        _cleanup_(erase_and_freep) char *tmp_key_file_contents = NULL;
+        size_t tmp_key_file_size;
+
+        if (!path_is_absolute(key_file))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "key file not absolute path: %s", key_file);
+
+        r = read_full_file_full(
+                        AT_FDCWD, key_file, UINT64_MAX, DM_MAX_KEY_SIZE,
+                        READ_FULL_FILE_SECURE|READ_FULL_FILE_WARN_WORLD_READABLE|READ_FULL_FILE_CONNECT_SOCKET|READ_FULL_FILE_FAIL_WHEN_LARGER,
+                        NULL,
+                        &tmp_key_file_contents, &tmp_key_file_size);
+        if (r < 0)
+                return log_error_errno(r, "Failed to process key file: %m");
+
+        if (ret_key_file_contents && ret_key_file_size) {
+                *ret_key_file_contents = TAKE_PTR(tmp_key_file_contents);
+                *ret_key_file_size = tmp_key_file_size;
+        }
+
+        return 0;
+}
+
+static const char *integrity_algorithm_select(const void *key_file_buf) {
+        /*  To keep a bit of sanity for end users, the subset of integrity
+            algorithms we support will match what is used in integritysetup */
+        if (arg_integrity_algorithm) {
+                if (streq("hmac-sha256", arg_integrity_algorithm))
+                        return DM_HMAC_256;
+                return arg_integrity_algorithm;
+        } else if (key_file_buf)
+                return DM_HMAC_256;
+        return "crc32c";
+}
+
+static int run(int argc, char *argv[]) {
+        _cleanup_(crypt_freep) struct crypt_device *cd = NULL;
+        char *verb, *volume;
+        int r;
+
+        if (argv_looks_like_help(argc, argv))
+                return help();
+
+        if (argc < 3)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "This program requires at least two arguments.");
+
+        verb = argv[1];
+        volume = argv[2];
+
+        log_setup();
+
+        cryptsetup_enable_logging(NULL);
+
+        umask(0022);
+
+        if (streq(verb, "attach")) {
+                /* attach name device optional_key_file optional_options */
+
+                crypt_status_info status;
+                _cleanup_(erase_and_freep) void *key_buf = NULL;
+                const char *device, *key_file, *options;
+                size_t key_buf_size = 0;
+
+                if (argc < 4)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "attach requires at least three arguments.");
+
+                if (argc > 6)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "attach has a maximum of five arguments.");
+
+                device = argv[3];
+                key_file = mangle_none(argc > 4 ? argv[4] : NULL);
+                options = mangle_none(argc > 5 ? argv[5] : NULL);
+
+                if (!filename_is_valid(volume))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Volume name '%s' is not valid.", volume);
+
+                if (key_file) {
+                        r = load_key_file(key_file, &key_buf, &key_buf_size);
+                        if (r < 0)
+                                return r;
+                }
+
+                if (options) {
+                        r = parse_integrity_options(options, &arg_activate_flags, &arg_percent,
+                                                    &arg_commit_time, &arg_existing_data_device, &arg_integrity_algorithm);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = crypt_init(&cd, device);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to open integrity device %s: %m", device);
+
+                cryptsetup_enable_logging(cd);
+
+                status = crypt_status(cd, volume);
+                if (IN_SET(status, CRYPT_ACTIVE, CRYPT_BUSY)) {
+                        log_info("Volume %s already active.", volume);
+                        return 0;
+                }
+
+                r = crypt_load(cd,
+                        CRYPT_INTEGRITY,
+                        &(struct crypt_params_integrity) {
+                                .journal_watermark = arg_percent,
+                                .journal_commit_time = DIV_ROUND_UP(arg_commit_time, USEC_PER_SEC),
+                                .integrity = integrity_algorithm_select(key_buf),
+                        });
+                if (r < 0)
+                        return log_error_errno(r, "Failed to load integrity superblock: %m");
+
+                if (!isempty(arg_existing_data_device)) {
+                        r = crypt_set_data_device(cd, arg_existing_data_device);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to add separate data device: %m");
+                }
+
+                r = crypt_activate_by_volume_key(cd, volume, key_buf, key_buf_size, arg_activate_flags);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set up integrity device: %m");
+
+        } else if (streq(verb, "detach")) {
+
+                if (argc > 3)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "detach has a maximum of two arguments.");
+
+                if (!filename_is_valid(volume))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Volume name '%s' is not valid.", volume);
+
+                r = crypt_init_by_name(&cd, volume);
+                if (r == -ENODEV) {
+                        log_info("Volume %s already inactive.", volume);
+                        return 0;
+                }
+                if (r < 0)
+                        return log_error_errno(r, "crypt_init_by_name() failed: %m");
+
+                cryptsetup_enable_logging(cd);
+
+                r = crypt_deactivate(cd, volume);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to deactivate: %m");
+
+        } else
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown verb %s.", verb);
+
+        return 0;
+}
+
+DEFINE_MAIN_FUNCTION(run);
diff --git a/src/journal-remote/fuzz-journal-remote.c b/src/journal-remote/fuzz-journal-remote.c
index 32c4e18..da0d83e 100644
--- a/src/journal-remote/fuzz-journal-remote.c
+++ b/src/journal-remote/fuzz-journal-remote.c
@@ -19,12 +19,12 @@
         int fdin;
         void *mem;
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/fuzz-journal-remote.XXXXXX.journal";
-        _cleanup_close_ int fdout = -1;
+        _cleanup_close_ int fdout = -EBADF;
         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
-        RemoteServer s = {};
+        _cleanup_(journal_remote_server_destroy) RemoteServer s = {};
         int r;
 
-        if (size <= 2)
+        if (outside_size_range(size, 3, 65536))
                 return 0;
 
         if (!getenv("SYSTEMD_LOG_LEVEL"))
@@ -43,7 +43,7 @@
 
         /* In */
 
-        r = journal_remote_server_init(&s, name, JOURNAL_WRITE_SPLIT_NONE, false, false);
+        r = journal_remote_server_init(&s, name, JOURNAL_WRITE_SPLIT_NONE, 0);
         if (r < 0) {
                 assert_se(IN_SET(r, -ENOMEM, -EMFILE, -ENFILE));
                 return r;
@@ -59,7 +59,6 @@
         while (s.active)
                 assert_se(journal_remote_handle_raw_source(NULL, fdin, 0, &s) >= 0);
 
-        journal_remote_server_destroy(&s);
         assert_se(close(fdin) < 0 && errno == EBADF); /* Check that the fd is closed already */
 
         /* Out */
@@ -67,7 +66,7 @@
         r = sd_journal_open_files(&j, (const char**) STRV_MAKE(name), 0);
         if (r < 0) {
                 log_error_errno(r, "sd_journal_open_files([\"%s\"]) failed: %m", name);
-                assert_se(IN_SET(r, -ENOMEM, -EMFILE, -ENFILE));
+                assert_se(IN_SET(r, -ENOMEM, -EMFILE, -ENFILE, -ENODATA));
                 return r;
         }
 
diff --git a/src/journal-remote/journal-gatewayd.c b/src/journal-remote/journal-gatewayd.c
index ab1cf7b..a792c75 100644
--- a/src/journal-remote/journal-gatewayd.c
+++ b/src/journal-remote/journal-gatewayd.c
@@ -14,6 +14,7 @@
 #include "sd-journal.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
@@ -30,7 +31,6 @@
 #include "pretty-print.h"
 #include "sigbus.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 #define JOURNAL_WAIT_TIMEOUT (10*USEC_PER_SEC)
 
@@ -127,7 +127,7 @@
         if (m->tmp)
                 rewind(m->tmp);
         else {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 fd = open_tmpfile_unlinkable("/tmp", O_RDWR|O_CLOEXEC);
                 if (fd < 0)
@@ -147,11 +147,12 @@
                 char *buf,
                 size_t max) {
 
-        RequestMeta *m = cls;
+        RequestMeta *m = ASSERT_PTR(cls);
+        dual_timestamp previous_ts = DUAL_TIMESTAMP_NULL;
+        sd_id128_t previous_boot_id = SD_ID128_NULL;
         int r;
         size_t n, k;
 
-        assert(m);
         assert(buf);
         assert(max > 0);
         assert(pos >= m->delta);
@@ -223,7 +224,7 @@
                 }
 
                 r = show_journal_entry(m->tmp, m->journal, m->mode, 0, OUTPUT_FULL_WIDTH,
-                                   NULL, NULL, NULL);
+                                   NULL, NULL, NULL, &previous_ts, &previous_boot_id);
                 if (r < 0) {
                         log_error_errno(r, "Failed to serialize item: %m");
                         return MHD_CONTENT_READER_END_WITH_ERROR;
@@ -255,7 +256,7 @@
         errno = 0;
         k = fread(buf, 1, n, m->tmp);
         if (k != n) {
-                log_error("Failed to read from file: %s", errno != 0 ? strerror_safe(errno) : "Premature EOF");
+                log_error("Failed to read from file: %s", STRERROR_OR_EOF(errno));
                 return MHD_CONTENT_READER_END_WITH_ERROR;
         }
 
@@ -359,12 +360,10 @@
                 const char *key,
                 const char *value) {
 
-        RequestMeta *m = cls;
+        RequestMeta *m = ASSERT_PTR(cls);
         _cleanup_free_ char *p = NULL;
         int r;
 
-        assert(m);
-
         if (isempty(key)) {
                 m->argument_parse_error = -EINVAL;
                 return MHD_NO;
@@ -467,11 +466,10 @@
                 void *connection_cls) {
 
         _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
-        RequestMeta *m = connection_cls;
+        RequestMeta *m = ASSERT_PTR(connection_cls);
         int r;
 
         assert(connection);
-        assert(m);
 
         r = open_journal(m);
         if (r < 0)
@@ -541,11 +539,10 @@
                 char *buf,
                 size_t max) {
 
-        RequestMeta *m = cls;
+        RequestMeta *m = ASSERT_PTR(cls);
         int r;
         size_t n, k;
 
-        assert(m);
         assert(buf);
         assert(max > 0);
         assert(pos >= m->delta);
@@ -603,7 +600,7 @@
         errno = 0;
         k = fread(buf, 1, n, m->tmp);
         if (k != n) {
-                log_error("Failed to read from file: %s", errno != 0 ? strerror_safe(errno) : "Premature EOF");
+                log_error("Failed to read from file: %s", STRERROR_OR_EOF(errno));
                 return MHD_CONTENT_READER_END_WITH_ERROR;
         }
 
@@ -616,11 +613,10 @@
                 void *connection_cls) {
 
         _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
-        RequestMeta *m = connection_cls;
+        RequestMeta *m = ASSERT_PTR(connection_cls);
         int r;
 
         assert(connection);
-        assert(m);
 
         r = open_journal(m);
         if (r < 0)
@@ -674,7 +670,7 @@
                 const char *mime_type) {
 
         _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
 
         assert(connection);
@@ -734,15 +730,14 @@
                 void *connection_cls) {
 
         _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
-        RequestMeta *m = connection_cls;
+        RequestMeta *m = ASSERT_PTR(connection_cls);
         int r;
-        _cleanup_free_ char* hostname = NULL, *os_name = NULL;
+        _cleanup_free_ char* hostname = NULL, *pretty_name = NULL, *os_name = NULL;
         uint64_t cutoff_from = 0, cutoff_to = 0, usage = 0;
         sd_id128_t mid, bid;
         _cleanup_free_ char *v = NULL, *json = NULL;
 
         assert(connection);
-        assert(m);
 
         r = open_journal(m);
         if (r < 0)
@@ -768,7 +763,10 @@
         if (r < 0)
                 return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine disk usage: %m");
 
-        (void) parse_os_release(NULL, "PRETTY_NAME", &os_name);
+        (void) parse_os_release(
+                        NULL,
+                        "PRETTY_NAME", &pretty_name,
+                        "NAME=", &os_name);
         (void) get_virtualization(&v);
 
         r = asprintf(&json,
@@ -783,7 +781,7 @@
                      SD_ID128_FORMAT_VAL(mid),
                      SD_ID128_FORMAT_VAL(bid),
                      hostname_cleanup(hostname),
-                     os_name ? os_name : "Linux",
+                     os_release_pretty_name(pretty_name, os_name),
                      v ? v : "bare",
                      usage,
                      cutoff_from,
@@ -911,7 +909,7 @@
 
         while ((c = getopt_long(argc, argv, "hD:", options, NULL)) >= 0)
 
-                switch(c) {
+                switch (c) {
 
                 case 'h':
                         return help();
@@ -992,7 +990,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
index 4e2e29e..7df264f 100644
--- a/src/journal-remote/journal-remote-main.c
+++ b/src/journal-remote/journal-remote-main.c
@@ -5,9 +5,10 @@
 
 #include "sd-daemon.h"
 
+#include "build.h"
 #include "conf-parser.h"
+#include "constants.h"
 #include "daemon-util.h"
-#include "def.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "journal-remote-write.h"
@@ -52,6 +53,11 @@
 static bool arg_trust_all = true;
 #endif
 
+static uint64_t arg_max_use = UINT64_MAX;
+static uint64_t arg_max_size = UINT64_MAX;
+static uint64_t arg_n_max_files = UINT64_MAX;
+static uint64_t arg_keep_free = UINT64_MAX;
+
 STATIC_DESTRUCTOR_REGISTER(arg_gnutls_log, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_key, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_cert, freep);
@@ -79,7 +85,7 @@
         if (pipe(fd) < 0)
                 return log_error_errno(errno, "Failed to create pager pipe: %m");
 
-        r = safe_fork("(remote)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &child_pid);
+        r = safe_fork("(remote)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG|FORK_RLIMIT_NOFILE_SAFE, &child_pid);
         if (r < 0) {
                 safe_close_pair(fd);
                 return r;
@@ -87,16 +93,14 @@
 
         /* In the child */
         if (r == 0) {
-                safe_close(fd[0]);
+                fd[0] = safe_close(fd[0]);
 
-                r = rearrange_stdio(STDIN_FILENO, fd[1], STDERR_FILENO);
+                r = rearrange_stdio(STDIN_FILENO, TAKE_FD(fd[1]), STDERR_FILENO);
                 if (r < 0) {
                         log_error_errno(r, "Failed to dup pipe to stdout: %m");
                         _exit(EXIT_FAILURE);
                 }
 
-                (void) rlimit_nofile_safe();
-
                 execvp(child, argv);
                 log_error_errno(errno, "Failed to exec child %s: %m", child);
                 _exit(EXIT_FAILURE);
@@ -223,9 +227,7 @@
                 finished = true;
 
         for (;;) {
-                r = process_source(source,
-                                   journal_remote_server_global->compress,
-                                   journal_remote_server_global->seal);
+                r = process_source(source, journal_remote_server_global->file_flags);
                 if (r == -EAGAIN)
                         break;
                 if (r < 0) {
@@ -532,12 +534,10 @@
                                int fd,
                                uint32_t revents,
                                void *userdata) {
-        MHDDaemonWrapper *d = userdata;
+        MHDDaemonWrapper *d = ASSERT_PTR(userdata);
         int r;
         MHD_UNSIGNED_LONG_LONG timeout = ULLONG_MAX;
 
-        assert(d);
-
         r = MHD_run(d->daemon);
         if (r == MHD_NO)
                 // FIXME: unregister daemon
@@ -598,9 +598,13 @@
                 const char* trust) {
 
         int r, n, fd;
-        char **file;
 
-        r = journal_remote_server_init(s, arg_output, arg_split_mode, arg_compress, arg_seal);
+        r = journal_remote_server_init(
+                        s,
+                        arg_output,
+                        arg_split_mode,
+                        (arg_compress ? JOURNAL_COMPRESS : 0) |
+                        (arg_seal ? JOURNAL_SEAL : 0));
         if (r < 0)
                 return r;
 
@@ -666,7 +670,7 @@
                         else
                                 url = strjoina(arg_url, "/entries");
                 } else
-                        url = strdupa(arg_url);
+                        url = strdupa_safe(arg_url);
 
                 log_info("Spawning curl %s...", url);
                 fd = spawn_curl(url);
@@ -677,7 +681,7 @@
                 if (!hostname)
                         hostname = arg_url;
 
-                hostname = strndupa(hostname, strcspn(hostname, "/:"));
+                hostname = strndupa_safe(hostname, strcspn(hostname, "/:"));
 
                 r = journal_remote_add_source(s, fd, (char *) hostname, false);
                 if (r < 0)
@@ -758,11 +762,15 @@
 
 static int parse_config(void) {
         const ConfigTableItem items[] = {
-                { "Remote",  "Seal",                   config_parse_bool,             0, &arg_seal       },
-                { "Remote",  "SplitMode",              config_parse_write_split_mode, 0, &arg_split_mode },
-                { "Remote",  "ServerKeyFile",          config_parse_path,             0, &arg_key        },
-                { "Remote",  "ServerCertificateFile",  config_parse_path,             0, &arg_cert       },
-                { "Remote",  "TrustedCertificateFile", config_parse_path,             0, &arg_trust      },
+                { "Remote",  "Seal",                   config_parse_bool,             0, &arg_seal        },
+                { "Remote",  "SplitMode",              config_parse_write_split_mode, 0, &arg_split_mode  },
+                { "Remote",  "ServerKeyFile",          config_parse_path,             0, &arg_key         },
+                { "Remote",  "ServerCertificateFile",  config_parse_path,             0, &arg_cert        },
+                { "Remote",  "TrustedCertificateFile", config_parse_path,             0, &arg_trust       },
+                { "Remote",  "MaxUse",                 config_parse_iec_uint64,       0, &arg_max_use     },
+                { "Remote",  "MaxFileSize",            config_parse_iec_uint64,       0, &arg_max_size    },
+                { "Remote",  "MaxFiles",               config_parse_uint64,           0, &arg_n_max_files },
+                { "Remote",  "KeepFree",               config_parse_iec_uint64,       0, &arg_keep_free   },
                 {}
         };
 
@@ -856,7 +864,7 @@
         assert(argv);
 
         while ((c = getopt_long(argc, argv, "ho:", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
 
                 case 'h':
                         return help();
@@ -1006,7 +1014,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unknown option code.");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
@@ -1135,6 +1143,12 @@
                 s.check_trust = !arg_trust_all;
         }
 
+        journal_reset_metrics(&s.metrics);
+        s.metrics.max_use = arg_max_use;
+        s.metrics.max_size = arg_max_size;
+        s.metrics.keep_free = arg_keep_free;
+        s.metrics.n_max_files = arg_n_max_files;
+
         r = create_remoteserver(&s, key, cert, trust);
         if (r < 0)
                 return r;
diff --git a/src/journal-remote/journal-remote-parse.c b/src/journal-remote/journal-remote-parse.c
index 2ece329..27ab5e5 100644
--- a/src/journal-remote/journal-remote-parse.c
+++ b/src/journal-remote/journal-remote-parse.c
@@ -13,7 +13,7 @@
 
         journal_importer_cleanup(&source->importer);
 
-        log_debug("Writer ref count %i", source->writer->n_ref);
+        log_debug("Writer ref count %u", source->writer->n_ref);
         writer_unref(source->writer);
 
         sd_event_source_unref(source->event);
@@ -47,7 +47,7 @@
         return source;
 }
 
-int process_source(RemoteSource *source, bool compress, bool seal) {
+int process_source(RemoteSource *source, JournalFileFlags file_flags) {
         int r;
 
         assert(source);
@@ -72,7 +72,7 @@
                          &source->importer.iovw,
                          &source->importer.ts,
                          &source->importer.boot_id,
-                         compress, seal);
+                         file_flags);
         if (r == -EBADMSG) {
                 log_warning_errno(r, "Entry is invalid, ignoring.");
                 r = 0;
diff --git a/src/journal-remote/journal-remote-parse.h b/src/journal-remote/journal-remote-parse.h
index a5b51ad..703035b 100644
--- a/src/journal-remote/journal-remote-parse.h
+++ b/src/journal-remote/journal-remote-parse.h
@@ -17,4 +17,4 @@
 
 RemoteSource* source_new(int fd, bool passive_fd, char *name, Writer *writer);
 void source_free(RemoteSource *source);
-int process_source(RemoteSource *source, bool compress, bool seal);
+int process_source(RemoteSource *source, JournalFileFlags file_flags);
diff --git a/src/journal-remote/journal-remote-write.c b/src/journal-remote/journal-remote-write.c
index ea71623..f6c3d83 100644
--- a/src/journal-remote/journal-remote-write.c
+++ b/src/journal-remote/journal-remote-write.c
@@ -1,13 +1,19 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <libgen.h>
+
 #include "alloc-util.h"
 #include "journal-remote.h"
+#include "path-util.h"
+#include "stat-util.h"
 
-static int do_rotate(JournalFile **f, bool compress, bool seal) {
-        int r = journal_file_rotate(f, compress, UINT64_MAX, seal, NULL);
+static int do_rotate(ManagedJournalFile **f, MMapCache *m, JournalFileFlags file_flags) {
+        int r;
+
+        r = managed_journal_file_rotate(f, m, file_flags, UINT64_MAX, NULL);
         if (r < 0) {
                 if (*f)
-                        log_error_errno(r, "Failed to rotate %s: %m", (*f)->path);
+                        log_error_errno(r, "Failed to rotate %s: %m", (*f)->file->path);
                 else
                         log_error_errno(r, "Failed to create rotated journal: %m");
         }
@@ -16,22 +22,35 @@
 }
 
 Writer* writer_new(RemoteServer *server) {
-        Writer *w;
+        _cleanup_(writer_unrefp) Writer *w = NULL;
+        int r;
 
         w = new0(Writer, 1);
         if (!w)
                 return NULL;
 
-        memset(&w->metrics, 0xFF, sizeof(w->metrics));
+        w->metrics = server->metrics;
 
         w->mmap = mmap_cache_new();
         if (!w->mmap)
-                return mfree(w);
+                return NULL;
 
         w->n_ref = 1;
         w->server = server;
 
-        return w;
+        if (is_dir(server->output, /* follow = */ true) > 0) {
+                w->output = strdup(server->output);
+                if (!w->output)
+                        return NULL;
+        } else {
+                r = path_extract_directory(server->output, &w->output);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to find directory of file \"%s\": %m", server->output);
+                        return NULL;
+                }
+        }
+
+        return TAKE_PTR(w);
 }
 
 static Writer* writer_free(Writer *w) {
@@ -39,8 +58,8 @@
                 return NULL;
 
         if (w->journal) {
-                log_debug("Closing journal file %s.", w->journal->path);
-                journal_file_close(w->journal);
+                log_debug("Closing journal file %s.", w->journal->file->path);
+                managed_journal_file_close(w->journal);
         }
 
         if (w->server && w->hashmap_key)
@@ -51,32 +70,36 @@
         if (w->mmap)
                 mmap_cache_unref(w->mmap);
 
+        free(w->output);
+
         return mfree(w);
 }
 
 DEFINE_TRIVIAL_REF_UNREF_FUNC(Writer, writer, writer_free);
 
 int writer_write(Writer *w,
-                 struct iovec_wrapper *iovw,
-                 dual_timestamp *ts,
-                 sd_id128_t *boot_id,
-                 bool compress,
-                 bool seal) {
+                 const struct iovec_wrapper *iovw,
+                 const dual_timestamp *ts,
+                 const sd_id128_t *boot_id,
+                 JournalFileFlags file_flags) {
         int r;
 
         assert(w);
         assert(iovw);
         assert(iovw->count > 0);
 
-        if (journal_file_rotate_suggested(w->journal, 0)) {
+        if (journal_file_rotate_suggested(w->journal->file, 0, LOG_DEBUG)) {
                 log_info("%s: Journal header limits reached or header out-of-date, rotating",
-                         w->journal->path);
-                r = do_rotate(&w->journal, compress, seal);
+                         w->journal->file->path);
+                r = do_rotate(&w->journal, w->mmap, file_flags);
+                if (r < 0)
+                        return r;
+                r = journal_directory_vacuum(w->output, w->metrics.max_use, w->metrics.n_max_files, 0, NULL, /* verbose = */ true);
                 if (r < 0)
                         return r;
         }
 
-        r = journal_file_append_entry(w->journal, ts, boot_id,
+        r = journal_file_append_entry(w->journal->file, ts, boot_id,
                                       iovw->iovec, iovw->count,
                                       &w->seqnum, NULL, NULL);
         if (r >= 0) {
@@ -86,15 +109,18 @@
         } else if (r == -EBADMSG)
                 return r;
 
-        log_debug_errno(r, "%s: Write failed, rotating: %m", w->journal->path);
-        r = do_rotate(&w->journal, compress, seal);
+        log_debug_errno(r, "%s: Write failed, rotating: %m", w->journal->file->path);
+        r = do_rotate(&w->journal, w->mmap, file_flags);
         if (r < 0)
                 return r;
         else
-                log_debug("%s: Successfully rotated journal", w->journal->path);
+                log_debug("%s: Successfully rotated journal", w->journal->file->path);
+        r = journal_directory_vacuum(w->output, w->metrics.max_use, w->metrics.n_max_files, 0, NULL, /* verbose = */ true);
+        if (r < 0)
+                return r;
 
         log_debug("Retrying write.");
-        r = journal_file_append_entry(w->journal, ts, boot_id,
+        r = journal_file_append_entry(w->journal->file, ts, boot_id,
                                       iovw->iovec, iovw->count,
                                       &w->seqnum, NULL, NULL);
         if (r < 0)
diff --git a/src/journal-remote/journal-remote-write.h b/src/journal-remote/journal-remote-write.h
index 123015b..c140f6c 100644
--- a/src/journal-remote/journal-remote-write.h
+++ b/src/journal-remote/journal-remote-write.h
@@ -1,14 +1,15 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "journal-file.h"
 #include "journal-importer.h"
+#include "managed-journal-file.h"
 
 typedef struct RemoteServer RemoteServer;
 
 typedef struct Writer {
-        JournalFile *journal;
+        ManagedJournalFile *journal;
         JournalMetrics metrics;
+        char *output;          /* directory where we write, for vacuuming */
 
         MMapCache *mmap;
         RemoteServer *server;
@@ -26,11 +27,10 @@
 DEFINE_TRIVIAL_CLEANUP_FUNC(Writer*, writer_unref);
 
 int writer_write(Writer *s,
-                 struct iovec_wrapper *iovw,
-                 dual_timestamp *ts,
-                 sd_id128_t *boot_id,
-                 bool compress,
-                 bool seal);
+                 const struct iovec_wrapper *iovw,
+                 const dual_timestamp *ts,
+                 const sd_id128_t *boot_id,
+                 JournalFileFlags file_flags);
 
 typedef enum JournalWriteSplitMode {
         JOURNAL_WRITE_SPLIT_NONE,
diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c
index f530ba3..a670468 100644
--- a/src/journal-remote/journal-remote.c
+++ b/src/journal-remote/journal-remote.c
@@ -10,15 +10,15 @@
 
 #include "af-list.h"
 #include "alloc-util.h"
-#include "def.h"
+#include "constants.h"
 #include "errno-util.h"
 #include "escape.h"
 #include "fd-util.h"
-#include "journal-file.h"
 #include "journal-remote-write.h"
 #include "journal-remote.h"
 #include "journald-native.h"
 #include "macro.h"
+#include "managed-journal-file.h"
 #include "parse-util.h"
 #include "process-util.h"
 #include "socket-util.h"
@@ -58,19 +58,24 @@
         }
 
         default:
-                assert_not_reached("what?");
+                assert_not_reached();
         }
 
-        r = journal_file_open_reliably(filename,
-                                       O_RDWR|O_CREAT, 0640,
-                                       s->compress, UINT64_MAX, s->seal,
-                                       &w->metrics,
-                                       w->mmap, NULL,
-                                       NULL, &w->journal);
+        r = managed_journal_file_open_reliably(
+                        filename,
+                        O_RDWR|O_CREAT,
+                        s->file_flags,
+                        0640,
+                        UINT64_MAX,
+                        &w->metrics,
+                        w->mmap,
+                        NULL,
+                        NULL,
+                        &w->journal);
         if (r < 0)
                 return log_error_errno(r, "Failed to open output journal %s: %m", filename);
 
-        log_debug("Opened output file %s", w->journal->path);
+        log_debug("Opened output file %s", w->journal->file->path);
         return 0;
 }
 
@@ -99,7 +104,7 @@
         const void *key;
         int r;
 
-        switch(s->split_mode) {
+        switch (s->split_mode) {
         case JOURNAL_WRITE_SPLIT_NONE:
                 key = "one and only";
                 break;
@@ -110,7 +115,7 @@
                 break;
 
         default:
-                assert_not_reached("what split mode?");
+                assert_not_reached();
         }
 
         w = hashmap_get(s->writers, key);
@@ -243,13 +248,13 @@
                 r = sd_event_add_defer(s->events, &source->buffer_event,
                                        dispatch_raw_source_until_block, source);
                 if (r == 0)
-                        sd_event_source_set_enabled(source->buffer_event, SD_EVENT_OFF);
+                        r = sd_event_source_set_enabled(source->buffer_event, SD_EVENT_OFF);
         } else if (r == -EPERM) {
                 log_debug("Falling back to sd_event_add_defer for fd:%d (%s)", fd, name);
                 r = sd_event_add_defer(s->events, &source->event,
                                        dispatch_blocking_source_event, source);
                 if (r == 0)
-                        sd_event_source_set_enabled(source->event, SD_EVENT_ON);
+                        r = sd_event_source_set_enabled(source->event, SD_EVENT_ON);
         }
         if (r < 0) {
                 log_error_errno(r, "Failed to register event source for fd:%d: %m",
@@ -289,7 +294,7 @@
         if (r < 0)
                 return r;
 
-        fd_ = -1;
+        fd_ = -EBADF;
         s->active++;
         return 0;
 }
@@ -302,8 +307,7 @@
                 RemoteServer *s,
                 const char *output,
                 JournalWriteSplitMode split_mode,
-                bool compress,
-                bool seal) {
+                JournalFileFlags file_flags) {
 
         int r;
 
@@ -313,8 +317,7 @@
         journal_remote_server_global = s;
 
         s->split_mode = split_mode;
-        s->compress = compress;
-        s->seal = seal;
+        s->file_flags = file_flags;
 
         if (output)
                 s->output = output;
@@ -323,7 +326,7 @@
         else if (split_mode == JOURNAL_WRITE_SPLIT_HOST)
                 s->output = REMOTE_JOURNAL_PATH;
         else
-                assert_not_reached("bad split mode");
+                assert_not_reached();
 
         r = sd_event_default(&s->events);
         if (r < 0)
@@ -391,7 +394,7 @@
         source = s->sources[fd];
         assert(source->importer.fd == fd);
 
-        r = process_source(source, s->compress, s->seal);
+        r = process_source(source, s->file_flags);
         if (journal_importer_eof(&source->importer)) {
                 size_t remaining;
 
@@ -429,9 +432,14 @@
         sd_event_source_ref(event);
 
         r = journal_remote_handle_raw_source(event, source->importer.fd, EPOLLIN, journal_remote_server_global);
-        if (r != 1)
+        if (r != 1) {
+                int k;
+
                 /* No more data for now */
-                sd_event_source_set_enabled(event, SD_EVENT_OFF);
+                k = sd_event_source_set_enabled(event, SD_EVENT_OFF);
+                if (k < 0)
+                        r = k;
+        }
 
         sd_event_source_unref(event);
 
@@ -449,10 +457,15 @@
         assert(source->buffer_event);
 
         r = journal_remote_handle_raw_source(event, fd, EPOLLIN, journal_remote_server_global);
-        if (r == 1)
+        if (r == 1) {
+                int k;
+
                 /* Might have more data. We need to rerun the handler
                  * until we are sure the buffer is exhausted. */
-                sd_event_source_set_enabled(source->buffer_event, SD_EVENT_ON);
+                k = sd_event_source_set_enabled(source->buffer_event, SD_EVENT_ON);
+                if (k < 0)
+                        r = k;
+        }
 
         return r;
 }
@@ -470,7 +483,7 @@
                 SocketAddress *addr,
                 char **hostname) {
 
-        _cleanup_close_ int fd2 = -1;
+        _cleanup_close_ int fd2 = -EBADF;
         int r;
 
         log_debug("Accepting new %s connection on fd:%d", type, fd);
@@ -482,7 +495,7 @@
                 return log_error_errno(errno, "accept() on fd:%d failed: %m", fd);
         }
 
-        switch(socket_address_family(addr)) {
+        switch (socket_address_family(addr)) {
         case AF_INET:
         case AF_INET6: {
                 _cleanup_free_ char *a = NULL;
diff --git a/src/journal-remote/journal-remote.conf.in b/src/journal-remote/journal-remote.conf.in
index 648aa1b..afb3191 100644
--- a/src/journal-remote/journal-remote.conf.in
+++ b/src/journal-remote/journal-remote.conf.in
@@ -18,3 +18,7 @@
 # ServerKeyFile={{CERTIFICATE_ROOT}}/private/journal-remote.pem
 # ServerCertificateFile={{CERTIFICATE_ROOT}}/certs/journal-remote.pem
 # TrustedCertificateFile={{CERTIFICATE_ROOT}}/ca/trusted.pem
+# MaxUse=
+# KeepFree=
+# MaxFileSize=
+# MaxFiles=
diff --git a/src/journal-remote/journal-remote.h b/src/journal-remote/journal-remote.h
index 45176e9..39d0446 100644
--- a/src/journal-remote/journal-remote.h
+++ b/src/journal-remote/journal-remote.h
@@ -6,6 +6,7 @@
 #include "hashmap.h"
 #include "journal-remote-parse.h"
 #include "journal-remote-write.h"
+#include "journal-vacuum.h"
 
 #if HAVE_MICROHTTPD
 #include "microhttpd-util.h"
@@ -38,9 +39,9 @@
         const char *output;                    /* either the output file or directory */
 
         JournalWriteSplitMode split_mode;
-        bool compress;
-        bool seal;
+        JournalFileFlags file_flags;
         bool check_trust;
+        JournalMetrics metrics;
 };
 extern RemoteServer *journal_remote_server_global;
 
@@ -48,8 +49,7 @@
                 RemoteServer *s,
                 const char *output,
                 JournalWriteSplitMode split_mode,
-                bool compress,
-                bool seal);
+                JournalFileFlags file_flags);
 
 int journal_remote_get_writer(RemoteServer *s, const char *host, Writer **writer);
 
diff --git a/src/journal-remote/journal-upload-journal.c b/src/journal-remote/journal-upload-journal.c
index f23d5cf..8206ca8 100644
--- a/src/journal-remote/journal-upload-journal.c
+++ b/src/journal-remote/journal-upload-journal.c
@@ -10,7 +10,6 @@
 #include "log.h"
 #include "string-util.h"
 #include "utf8.h"
-#include "util.h"
 
 /**
  * Write up to size bytes to buf. Return negative on error, and number of
@@ -24,7 +23,7 @@
 
         for (;;) {
 
-                switch(u->entry_state) {
+                switch (u->entry_state) {
                 case ENTRY_CURSOR: {
                         u->current_cursor = mfree(u->current_cursor);
 
@@ -103,14 +102,13 @@
                         _fallthrough_;
                 case ENTRY_BOOT_ID: {
                         sd_id128_t boot_id;
-                        char sid[SD_ID128_STRING_MAX];
 
                         r = sd_journal_get_monotonic_usec(u->journal, NULL, &boot_id);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to get monotonic timestamp: %m");
 
                         r = snprintf(buf + pos, size - pos,
-                                     "_BOOT_ID=%s\n", sd_id128_to_string(boot_id, sid));
+                                     "_BOOT_ID=%s\n", SD_ID128_TO_STRING(boot_id));
                         assert(r >= 0);
                         if ((size_t) r > size - pos)
                                 /* not enough space */
@@ -229,10 +227,10 @@
                         return pos;
 
                 default:
-                        assert_not_reached("WTF?");
+                        assert_not_reached();
                 }
         }
-        assert_not_reached("WTF?");
+        assert_not_reached();
 }
 
 static void check_update_watchdog(Uploader *u) {
@@ -252,13 +250,12 @@
 }
 
 static size_t journal_input_callback(void *buf, size_t size, size_t nmemb, void *userp) {
-        Uploader *u = userp;
+        Uploader *u = ASSERT_PTR(userp);
         int r;
         sd_journal *j;
         size_t filled = 0;
         ssize_t w;
 
-        assert(u);
         assert(nmemb <= SSIZE_MAX / size);
 
         check_update_watchdog(u);
@@ -357,9 +354,7 @@
                                   int fd,
                                   uint32_t revents,
                                   void *userp) {
-        Uploader *u = userp;
-
-        assert(u);
+        Uploader *u = ASSERT_PTR(userp);
 
         if (u->uploading)
                 return 0;
diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c
index 37660b9..5a34b73 100644
--- a/src/journal-remote/journal-upload.c
+++ b/src/journal-remote/journal-upload.c
@@ -5,13 +5,15 @@
 #include <getopt.h>
 #include <stdio.h>
 #include <sys/stat.h>
+#include <unistd.h>
 
 #include "sd-daemon.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "conf-parser.h"
+#include "constants.h"
 #include "daemon-util.h"
-#include "def.h"
 #include "env-file.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -22,8 +24,7 @@
 #include "main-func.h"
 #include "mkdir.h"
 #include "parse-argument.h"
-#include "parse-util.h"
-#include "path-util.h"
+#include "parse-helpers.h"
 #include "pretty-print.h"
 #include "process-util.h"
 #include "rlimit-util.h"
@@ -32,7 +33,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "tmpfile-util.h"
-#include "util.h"
 #include "version.h"
 
 #define PRIV_KEY_FILE CERTIFICATE_ROOT "/private/journal-upload.pem"
@@ -79,9 +79,7 @@
                               size_t size,
                               size_t nmemb,
                               void *userp) {
-        Uploader *u = userp;
-
-        assert(u);
+        Uploader *u = ASSERT_PTR(userp);
 
         log_debug("The server answers (%zu bytes): %.*s",
                   size*nmemb, (int)(size*nmemb), buf);
@@ -291,10 +289,9 @@
 }
 
 static size_t fd_input_callback(void *buf, size_t size, size_t nmemb, void *userp) {
-        Uploader *u = userp;
+        Uploader *u = ASSERT_PTR(userp);
         ssize_t n;
 
-        assert(u);
         assert(nmemb < SSIZE_MAX / size);
 
         if (u->input < 0)
@@ -329,9 +326,8 @@
                              int fd,
                              uint32_t revents,
                              void *userp) {
-        Uploader *u = userp;
+        Uploader *u = ASSERT_PTR(userp);
 
-        assert(u);
         assert(fd >= 0);
 
         if (revents & EPOLLHUP) {
@@ -384,9 +380,7 @@
 static int dispatch_sigterm(sd_event_source *event,
                             const struct signalfd_siginfo *si,
                             void *userdata) {
-        Uploader *u = userdata;
-
-        assert(u);
+        Uploader *u = ASSERT_PTR(userdata);
 
         log_received_signal(LOG_INFO, si);
 
@@ -438,7 +432,7 @@
                 char *t;
                 size_t x;
 
-                t = strdupa(url);
+                t = strdupa_safe(url);
                 x = strlen(t);
                 while (x > 0 && t[x - 1] == '/')
                         t[x - 1] = '\0';
@@ -540,13 +534,12 @@
 
         _cleanup_free_ char *n = NULL;
         bool fatal = ltype;
-        char **s = data;
+        char **s = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue))
                 goto finalize;
@@ -568,11 +561,11 @@
 
 static int parse_config(void) {
         const ConfigTableItem items[] = {
-                { "Upload",  "URL",                    config_parse_string,         0, &arg_url                  },
-                { "Upload",  "ServerKeyFile",          config_parse_path_or_ignore, 0, &arg_key                  },
-                { "Upload",  "ServerCertificateFile",  config_parse_path_or_ignore, 0, &arg_cert                 },
-                { "Upload",  "TrustedCertificateFile", config_parse_path_or_ignore, 0, &arg_trust                },
-                { "Upload",  "NetworkTimeoutSec",      config_parse_sec,            0, &arg_network_timeout_usec },
+                { "Upload",  "URL",                    config_parse_string,         CONFIG_PARSE_STRING_SAFE, &arg_url                  },
+                { "Upload",  "ServerKeyFile",          config_parse_path_or_ignore, 0,                        &arg_key                  },
+                { "Upload",  "ServerCertificateFile",  config_parse_path_or_ignore, 0,                        &arg_cert                 },
+                { "Upload",  "TrustedCertificateFile", config_parse_path_or_ignore, 0,                        &arg_trust                },
+                { "Upload",  "NetworkTimeoutSec",      config_parse_sec,            0,                        &arg_network_timeout_usec },
                 {}
         };
 
@@ -667,7 +660,7 @@
         opterr = 0;
 
         while ((c = getopt_long(argc, argv, "hu:mM:D:", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
                 case 'h':
                         return help();
 
@@ -779,7 +772,7 @@
                                                argv[optind - 1]);
 
                 default:
-                        assert_not_reached("Unhandled option code.");
+                        assert_not_reached();
                 }
 
         if (!arg_url)
diff --git a/src/journal-remote/log-generator.py b/src/journal-remote/log-generator.py
index 6e42d8a..2843afb 100755
--- a/src/journal-remote/log-generator.py
+++ b/src/journal-remote/log-generator.py
@@ -32,10 +32,6 @@
 DATA={data}
 """
 
-m = 0x198603b12d7
-realtime_ts = 1404101101501873
-monotonic_ts = 1753961140951
-source_realtime_ts = 1404101101483516
 priority = 3
 facility = 6
 
@@ -55,18 +51,14 @@
         data = '{:0{}}'.format(counter, OPTIONS.data_size)
         counter += 1
 
-    entry = template.format(m=m,
-                            realtime_ts=realtime_ts,
-                            monotonic_ts=monotonic_ts,
-                            source_realtime_ts=source_realtime_ts,
+    entry = template.format(m=0x198603b12d7 + i,
+                            realtime_ts=1404101101501873 + i,
+                            monotonic_ts=1753961140951 + i,
+                            source_realtime_ts=1404101101483516 + i,
                             priority=priority,
                             facility=facility,
                             message=message,
                             data=data)
-    m += 1
-    realtime_ts += 1
-    monotonic_ts += 1
-    source_realtime_ts += 1
 
     bytes += len(entry)
 
diff --git a/src/journal-remote/meson.build b/src/journal-remote/meson.build
index d516fba..ac37574 100644
--- a/src/journal-remote/meson.build
+++ b/src/journal-remote/meson.build
@@ -1,46 +1,40 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_journal_upload_sources = files('''
-        journal-upload.h
-        journal-upload.c
-        journal-upload-journal.c
-'''.split())
+systemd_journal_upload_sources = files(
+        'journal-upload-journal.c',
+        'journal-upload.c',
+)
 
-libsystemd_journal_remote_sources = files('''
-        journal-remote-parse.h
-        journal-remote-parse.c
-        journal-remote-write.h
-        journal-remote-write.c
-        journal-remote.h
-        journal-remote.c
-'''.split())
+libsystemd_journal_remote_sources = files(
+        'journal-remote-parse.c',
+        'journal-remote-write.c',
+        'journal-remote.c',
+)
 
 if conf.get('HAVE_MICROHTTPD') == 1
         libsystemd_journal_remote_sources += files(
-                'microhttpd-util.h',
-                'microhttpd-util.c')
+                'microhttpd-util.c',
+        )
 endif
 
 libsystemd_journal_remote = static_library(
         'systemd-journal-remote',
         libsystemd_journal_remote_sources,
         include_directories : journal_includes,
+        link_with : libjournal_core,
         dependencies : [threads,
                         libmicrohttpd,
                         libgnutls,
                         libxz,
                         liblz4],
-        install : false)
+        build_by_default : false)
 
-systemd_journal_remote_sources = files('''
-        journal-remote-main.c
-'''.split())
+systemd_journal_remote_sources = files('journal-remote-main.c')
 
-systemd_journal_gatewayd_sources = files('''
-        journal-gatewayd.c
-        microhttpd-util.h
-        microhttpd-util.c
-'''.split())
+systemd_journal_gatewayd_sources = files(
+        'journal-gatewayd.c',
+        'microhttpd-util.c',
+)
 
 in_files = [
         ['journal-upload.conf',
@@ -54,15 +48,14 @@
                 file,
                 input : file + '.in',
                 output: file,
-                command : [meson_render_jinja2, config_h, '@INPUT@'],
-                capture : true,
+                command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
                 install : tuple[1],
                 install_dir : pkgsysconfdir)
 endforeach
 
 if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
         install_data('browse.html',
-                     install_dir : join_paths(pkgdatadir, 'gatewayd'))
+                     install_dir : pkgdatadir / 'gatewayd')
 
         if get_option('create-log-dirs')
                 meson.add_install_script('sh', '-c',
@@ -76,7 +69,9 @@
 ############################################################
 
 fuzzers += [
-        [['src/journal-remote/fuzz-journal-remote.c'],
+        [files('fuzz-journal-remote.c'),
          [libsystemd_journal_remote,
-          libshared]],
+          libshared],
+         [],
+         [journal_includes]],
 ]
diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c
index f17ddd8..9e6c36f 100644
--- a/src/journal-remote/microhttpd-util.c
+++ b/src/journal-remote/microhttpd-util.c
@@ -14,7 +14,6 @@
 #include "microhttpd-util.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
 
 void microhttpd_logger(void *arg, const char *fmt, va_list ap) {
         char *f;
@@ -151,18 +150,17 @@
 }
 
 int setup_gnutls_logger(char **categories) {
-        char **cat;
         int r;
 
         gnutls_global_set_log_function(log_func_gnutls);
 
-        if (categories) {
+        if (categories)
                 STRV_FOREACH(cat, categories) {
                         r = log_enable_gnutls_category(*cat);
                         if (r < 0)
                                 return r;
                 }
-        } else
+        else
                 log_reset_gnutls_level();
 
         return 0;
@@ -300,7 +298,7 @@
 
 #else
 _noreturn_ int check_permissions(struct MHD_Connection *connection, int *code, char **hostname) {
-        assert_not_reached("gnutls not available");
+        assert_not_reached();
 }
 
 int setup_gnutls_logger(char **categories) {
diff --git a/src/journal-remote/microhttpd-util.h b/src/journal-remote/microhttpd-util.h
index 7e7d1b5..df18335 100644
--- a/src/journal-remote/microhttpd-util.h
+++ b/src/journal-remote/microhttpd-util.h
@@ -64,11 +64,11 @@
 
 int mhd_respondf(struct MHD_Connection *connection,
                  int error,
-                 unsigned code,
+                 enum MHD_RequestTerminationCode code,
                  const char *format, ...) _printf_(4,5);
 
 int mhd_respond(struct MHD_Connection *connection,
-                unsigned code,
+                enum MHD_RequestTerminationCode code,
                 const char *message);
 
 int mhd_respond_oom(struct MHD_Connection *connection);
diff --git a/src/journal/cat.c b/src/journal/cat.c
index 4ccc5e0..0ba427a 100644
--- a/src/journal/cat.c
+++ b/src/journal/cat.c
@@ -10,6 +10,7 @@
 #include "sd-journal.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "fd-util.h"
 #include "main-func.h"
 #include "parse-argument.h"
@@ -18,7 +19,6 @@
 #include "string-util.h"
 #include "syslog-util.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static const char *arg_identifier = NULL;
 static int arg_priority = LOG_INFO;
@@ -115,14 +115,14 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
 }
 
 static int run(int argc, char *argv[]) {
-        _cleanup_close_ int outfd = -1, errfd = -1, saved_stderr = -1;
+        _cleanup_close_ int outfd = -EBADF, errfd = -EBADF, saved_stderr = -EBADF;
         int r;
 
         log_setup();
diff --git a/src/journal/fuzz-journald-native-fd.c b/src/journal/fuzz-journald-native-fd.c
index fcfc5df..9adbb8b 100644
--- a/src/journal/fuzz-journald-native-fd.c
+++ b/src/journal/fuzz-journald-native-fd.c
@@ -11,7 +11,7 @@
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         Server s;
-        _cleanup_close_ int sealed_fd = -1, unsealed_fd = -1;
+        _cleanup_close_ int sealed_fd = -EBADF, unsealed_fd = -EBADF;
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/fuzz-journald-native-fd.XXXXXX";
         char *label = NULL;
         size_t label_len = 0;
diff --git a/src/journal/fuzz-journald-stream.c b/src/journal/fuzz-journald-stream.c
index 8a979df..ed52f95 100644
--- a/src/journal/fuzz-journald-stream.c
+++ b/src/journal/fuzz-journald-stream.c
@@ -9,14 +9,14 @@
 #include "fuzz-journald.h"
 #include "journald-stream.h"
 
-static int stream_fds[2] = { -1, -1 };
+static int stream_fds[2] = PIPE_EBADF;
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         Server s;
         StdoutStream *stream;
         int v;
 
-        if (size == 0 || size > 65536)
+        if (outside_size_range(size, 1, 65536))
                 return 0;
 
         if (!getenv("SYSTEMD_LOG_LEVEL"))
diff --git a/src/journal/fuzz-journald.c b/src/journal/fuzz-journald.c
index ff1746e..c96fad5 100644
--- a/src/journal/fuzz-journald.c
+++ b/src/journal/fuzz-journald.c
@@ -7,13 +7,13 @@
 
 void dummy_server_init(Server *s, const uint8_t *buffer, size_t size) {
         *s = (Server) {
-                .syslog_fd = -1,
-                .native_fd = -1,
-                .stdout_fd = -1,
-                .dev_kmsg_fd = -1,
-                .audit_fd = -1,
-                .hostname_fd = -1,
-                .notify_fd = -1,
+                .syslog_fd = -EBADF,
+                .native_fd = -EBADF,
+                .stdout_fd = -EBADF,
+                .dev_kmsg_fd = -EBADF,
+                .audit_fd = -EBADF,
+                .hostname_fd = -EBADF,
+                .notify_fd = -EBADF,
                 .storage = STORAGE_NONE,
                 .line_max = 64,
         };
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index decdf14..da0fac5 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -13,25 +13,23 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
-#if HAVE_PCRE2
-#  define PCRE2_CODE_UNIT_WIDTH 8
-#  include <pcre2.h>
-#endif
-
 #include "sd-bus.h"
 #include "sd-device.h"
 #include "sd-journal.h"
 
 #include "acl-util.h"
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-error.h"
 #include "bus-util.h"
 #include "catalog.h"
+#include "chase-symlinks.h"
 #include "chattr-util.h"
-#include "def.h"
+#include "constants.h"
 #include "dissect-image.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "format-table.h"
 #include "format-util.h"
 #include "fs-util.h"
 #include "fsprg.h"
@@ -48,6 +46,7 @@
 #include "log.h"
 #include "logs-show.h"
 #include "memory-util.h"
+#include "missing_sched.h"
 #include "mkdir.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
@@ -56,13 +55,14 @@
 #include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
-#include "pcre2-dlopen.h"
+#include "pcre2-util.h"
 #include "pretty-print.h"
 #include "qrcode-util.h"
 #include "random-util.h"
 #include "rlimit-util.h"
 #include "set.h"
 #include "sigbus.h"
+#include "static-destruct.h"
 #include "stdio-util.h"
 #include "string-table.h"
 #include "strv.h"
@@ -83,6 +83,7 @@
 };
 
 static OutputMode arg_output = OUTPUT_SHORT;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 static bool arg_utc = false;
 static bool arg_follow = false;
 static bool arg_full = true;
@@ -128,12 +129,21 @@
 static uint64_t arg_vacuum_size = 0;
 static uint64_t arg_vacuum_n_files = 0;
 static usec_t arg_vacuum_time = 0;
-static char **arg_output_fields = NULL;
-#if HAVE_PCRE2
+static Set *arg_output_fields = NULL;
 static const char *arg_pattern = NULL;
 static pcre2_code *arg_compiled_pattern = NULL;
-static int arg_case_sensitive = -1; /* -1 means be smart */
-#endif
+static PatternCompileCase arg_case = PATTERN_COMPILE_CASE_AUTO;
+
+STATIC_DESTRUCTOR_REGISTER(arg_file, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_facilities, set_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_verify_key, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_syslog_identifier, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_system_units, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_user_units, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_output_fields, set_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_compiled_pattern, pattern_freep);
 
 static enum {
         ACTION_SHOW,
@@ -163,32 +173,6 @@
         LIST_FIELDS(struct BootId, boot_list);
 } BootId;
 
-#if HAVE_PCRE2
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(pcre2_match_data*, sym_pcre2_match_data_free, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(pcre2_code*, sym_pcre2_code_free, NULL);
-
-static int pattern_compile(const char *pattern, unsigned flags, pcre2_code **out) {
-        int errorcode, r;
-        PCRE2_SIZE erroroffset;
-        pcre2_code *p;
-
-        p = sym_pcre2_compile((PCRE2_SPTR8) pattern,
-                              PCRE2_ZERO_TERMINATED, flags, &errorcode, &erroroffset, NULL);
-        if (!p) {
-                unsigned char buf[LINE_MAX];
-
-                r = sym_pcre2_get_error_message(errorcode, buf, sizeof buf);
-
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Bad pattern \"%s\": %s", pattern,
-                                       r < 0 ? "unknown error" : (char *)buf);
-        }
-
-        *out = p;
-        return 0;
-}
-#endif
-
 static int add_matches_for_device(sd_journal *j, const char *devpath) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
         sd_device *d = NULL;
@@ -276,13 +260,13 @@
                 *boot_id = SD_ID128_NULL;
                 *offset = 0;
                 return 0;
-        } else if (strlen(x) >= 32) {
+        } else if (strlen(x) >= SD_ID128_STRING_MAX - 1) {
                 char *t;
 
-                t = strndupa(x, 32);
+                t = strndupa_safe(x, SD_ID128_STRING_MAX - 1);
                 r = sd_id128_from_string(t, &id);
                 if (r >= 0)
-                        x += 32;
+                        x += SD_ID128_STRING_MAX - 1;
 
                 if (!IN_SET(*x, 0, '-', '+'))
                         return -EINVAL;
@@ -326,7 +310,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("journalctl", "1", &link);
         if (r < 0)
@@ -334,19 +318,23 @@
 
         printf("%1$s [OPTIONS...] [MATCHES...]\n\n"
                "%5$sQuery the journal.%6$s\n\n"
-               "%3$sOptions:%4$s\n"
+               "%3$sSource Options:%4$s\n"
                "     --system                Show the system journal\n"
                "     --user                  Show the user journal for the current user\n"
                "  -M --machine=CONTAINER     Operate on local container\n"
+               "  -m --merge                 Show entries from all available journals\n"
+               "  -D --directory=PATH        Show journal files from directory\n"
+               "     --file=PATH             Show journal file\n"
+               "     --root=ROOT             Operate on files below a root directory\n"
+               "     --image=IMAGE           Operate on files in filesystem image\n"
+               "     --namespace=NAMESPACE   Show journal data from specified journal namespace\n"
+               "\n%3$sFiltering Options:%4$s\n"
                "  -S --since=DATE            Show entries not older than the specified date\n"
                "  -U --until=DATE            Show entries not newer than the specified date\n"
                "  -c --cursor=CURSOR         Show entries starting at the specified cursor\n"
                "     --after-cursor=CURSOR   Show entries after the specified cursor\n"
-               "     --show-cursor           Print the cursor after all the entries\n"
                "     --cursor-file=FILE      Show entries after cursor in FILE and update FILE\n"
                "  -b --boot[=ID]             Show current boot or the specified boot\n"
-               "     --list-boots            Show terse information about recorded boots\n"
-               "  -k --dmesg                 Show kernel message log from the current boot\n"
                "  -u --unit=UNIT             Show logs from the specified unit\n"
                "     --user-unit=UNIT        Show logs from the specified user unit\n"
                "  -t --identifier=STRING     Show entries with the specified syslog identifier\n"
@@ -354,30 +342,29 @@
                "     --facility=FACILITY...  Show entries with the specified facilities\n"
                "  -g --grep=PATTERN          Show entries with MESSAGE matching PATTERN\n"
                "     --case-sensitive[=BOOL] Force case sensitive or insensitive matching\n"
-               "  -e --pager-end             Immediately jump to the end in the pager\n"
-               "  -f --follow                Follow the journal\n"
-               "  -n --lines[=INTEGER]       Number of journal entries to show\n"
-               "     --no-tail               Show all lines, even in follow mode\n"
-               "  -r --reverse               Show the newest entries first\n"
+               "  -k --dmesg                 Show kernel message log from the current boot\n"
+               "\n%3$sOutput Control Options:%4$s\n"
                "  -o --output=STRING         Change journal output mode (short, short-precise,\n"
                "                               short-iso, short-iso-precise, short-full,\n"
                "                               short-monotonic, short-unix, verbose, export,\n"
                "                               json, json-pretty, json-sse, json-seq, cat,\n"
                "                               with-unit)\n"
                "     --output-fields=LIST    Select fields to print in verbose/export/json modes\n"
+               "  -n --lines[=INTEGER]       Number of journal entries to show\n"
+               "  -r --reverse               Show the newest entries first\n"
+               "     --show-cursor           Print the cursor after all the entries\n"
                "     --utc                   Express time in Coordinated Universal Time (UTC)\n"
                "  -x --catalog               Add message explanations where available\n"
+               "     --no-hostname           Suppress output of hostname field\n"
                "     --no-full               Ellipsize fields\n"
                "  -a --all                   Show all fields, including long and unprintable\n"
+               "  -f --follow                Follow the journal\n"
+               "     --no-tail               Show all lines, even in follow mode\n"
                "  -q --quiet                 Do not show info messages and privilege warning\n"
+               "\n%3$sPager Control Options:%4$s\n"
                "     --no-pager              Do not pipe output into a pager\n"
-               "     --no-hostname           Suppress output of hostname field\n"
-               "  -m --merge                 Show entries from all available journals\n"
-               "  -D --directory=PATH        Show journal files from directory\n"
-               "     --file=PATH             Show journal file\n"
-               "     --root=ROOT             Operate on files below a root directory\n"
-               "     --image=IMAGE           Operate on files in filesystem image\n"
-               "     --namespace=NAMESPACE   Show journal data from specified namespace\n"
+               "  -e --pager-end             Immediately jump to the end in the pager\n"
+               "\n%3$sForward Secure Sealing (FSS) Options:%4$s\n"
                "     --interval=TIME         Time interval for changing the FSS sealing key\n"
                "     --verify-key=KEY        Specify FSS verification key\n"
                "     --force                 Override of the FSS key pair with --setup-keys\n"
@@ -386,6 +373,7 @@
                "     --version               Show package version\n"
                "  -N --fields                List all field names currently used\n"
                "  -F --field=FIELD           List all values that a specified field takes\n"
+               "     --list-boots            Show terse information about recorded boots\n"
                "     --disk-usage            Show total disk usage of all journal files\n"
                "     --vacuum-size=BYTES     Reduce disk usage below specified size\n"
                "     --vacuum-files=INT      Leave only the specified number of journal files\n"
@@ -550,10 +538,17 @@
                         if (arg_lines == ARG_LINES_DEFAULT)
                                 arg_lines = 1000;
 
+                        arg_boot = true;
+
                         break;
 
                 case 'f':
                         arg_follow = true;
+
+                        arg_boot = true;
+                        arg_boot_id = SD_ID128_NULL;
+                        arg_boot_offset = 0;
+
                         break;
 
                 case 'o':
@@ -569,6 +564,11 @@
                         if (IN_SET(arg_output, OUTPUT_EXPORT, OUTPUT_JSON, OUTPUT_JSON_PRETTY, OUTPUT_JSON_SSE, OUTPUT_JSON_SEQ, OUTPUT_CAT))
                                 arg_quiet = true;
 
+                        if (OUTPUT_MODE_IS_JSON(arg_output))
+                                arg_json_format_flags = output_mode_to_json_format_flags(arg_output) | JSON_FORMAT_COLOR_AUTO;
+                        else
+                                arg_json_format_flags = JSON_FORMAT_OFF;
+
                         break;
 
                 case 'l':
@@ -892,7 +892,6 @@
                         break;
                 }
 
-#if HAVE_PCRE2
                 case 'g':
                         arg_pattern = optarg;
                         break;
@@ -902,16 +901,11 @@
                                 r = parse_boolean(optarg);
                                 if (r < 0)
                                         return log_error_errno(r, "Bad --case-sensitive= argument \"%s\": %m", optarg);
-                                arg_case_sensitive = r;
+                                arg_case = r ? PATTERN_COMPILE_CASE_SENSITIVE : PATTERN_COMPILE_CASE_INSENSITIVE;
                         } else
-                                arg_case_sensitive = true;
+                                arg_case = PATTERN_COMPILE_CASE_SENSITIVE;
 
                         break;
-#else
-                case 'g':
-                case ARG_CASE_SENSITIVE:
-                        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Compiled without pattern matching support");
-#endif
 
                 case 'S':
                         r = parse_timestamp(optarg, &arg_since);
@@ -1032,13 +1026,10 @@
                         if (!v)
                                 return log_oom();
 
-                        if (!arg_output_fields)
-                                arg_output_fields = TAKE_PTR(v);
-                        else {
-                                r = strv_extend_strv(&arg_output_fields, v, true);
-                                if (r < 0)
-                                        return log_oom();
-                        }
+                        r = set_put_strdupv(&arg_output_fields, v);
+                        if (r < 0)
+                                return log_oom();
+
                         break;
                 }
 
@@ -1046,7 +1037,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_follow && !arg_no_tail && !arg_since && arg_lines == ARG_LINES_DEFAULT)
@@ -1062,7 +1053,7 @@
 
         if (!!arg_cursor + !!arg_after_cursor + !!arg_since_set > 1)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Please specify only one of --since=, --cursor=, and --after-cursor.");
+                                       "Please specify only one of --since=, --cursor=, and --after-cursor=.");
 
         if (arg_follow && arg_reverse)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -1088,50 +1079,21 @@
                 arg_system_units = strv_free(arg_system_units);
         }
 
-#if HAVE_PCRE2
         if (arg_pattern) {
-                unsigned flags;
-
-                r = dlopen_pcre2();
+                r = pattern_compile_and_log(arg_pattern, arg_case, &arg_compiled_pattern);
                 if (r < 0)
                         return r;
 
-                if (arg_case_sensitive >= 0)
-                        flags = !arg_case_sensitive * PCRE2_CASELESS;
-                else {
-                        _cleanup_(sym_pcre2_match_data_freep) pcre2_match_data *md = NULL;
-                        bool has_case;
-                        _cleanup_(sym_pcre2_code_freep) pcre2_code *cs = NULL;
-
-                        md = sym_pcre2_match_data_create(1, NULL);
-                        if (!md)
-                                return log_oom();
-
-                        r = pattern_compile("[[:upper:]]", 0, &cs);
-                        if (r < 0)
-                                return r;
-
-                        r = sym_pcre2_match(cs, (PCRE2_SPTR8) arg_pattern, PCRE2_ZERO_TERMINATED, 0, 0, md, NULL);
-                        has_case = r >= 0;
-
-                        flags = !has_case * PCRE2_CASELESS;
-                }
-
-                log_debug("Doing case %s matching based on %s",
-                          flags & PCRE2_CASELESS ? "insensitive" : "sensitive",
-                          arg_case_sensitive >= 0 ? "request" : "pattern casing");
-
-                r = pattern_compile(arg_pattern, flags, &arg_compiled_pattern);
-                if (r < 0)
-                        return r;
+                /* When --grep is used along with --lines, we don't know how many lines we can print.
+                 * So we search backwards and count until enough lines have been printed or we hit the head. */
+                if (arg_lines >= 0)
+                        arg_reverse = true;
         }
-#endif
 
         return 1;
 }
 
 static int add_matches(sd_journal *j, char **args) {
-        char **i;
         bool have_term = false;
 
         assert(j);
@@ -1160,11 +1122,11 @@
                                 if (executable_is_script(p, &interpreter) > 0) {
                                         _cleanup_free_ char *comm = NULL;
 
-                                        comm = strndup(basename(p), 15);
-                                        if (!comm)
-                                                return log_oom();
+                                        r = path_extract_filename(p, &comm);
+                                        if (r < 0)
+                                                return log_error_errno(r, "Failed to extract filename of '%s': %m", p);
 
-                                        t = strjoin("_COMM=", comm);
+                                        t = strjoin("_COMM=", strshorten(comm, TASK_COMM_LEN-1));
                                         if (!t)
                                                 return log_oom();
 
@@ -1227,7 +1189,7 @@
                 BootId **ret) {
 
         _cleanup_free_ BootId *next_boot = NULL;
-        char match[9+32+1] = "_BOOT_ID=";
+        char match[STRLEN("_BOOT_ID=") + SD_ID128_STRING_MAX] = "_BOOT_ID=";
         sd_id128_t boot_id;
         int r;
 
@@ -1280,7 +1242,7 @@
                 return r;
 
         /* Now seek to the last occurrence of this boot ID. */
-        sd_id128_to_string(next_boot->id, match + 9);
+        sd_id128_to_string(next_boot->id, match + STRLEN("_BOOT_ID="));
         r = sd_journal_add_match(j, match, sizeof(match) - 1);
         if (r < 0)
                 return r;
@@ -1319,7 +1281,7 @@
 
         bool skip_once;
         int r, count = 0;
-        BootId *head = NULL, *tail = NULL, *id;
+        BootId *head = NULL, *tail = NULL;
         const bool advance_older = boot_id && offset <= 0;
         sd_id128_t previous_boot_id;
 
@@ -1336,11 +1298,11 @@
          * If no reference is given, the journal head/tail will do,
          * they're "virtual" boots after all. */
         if (boot_id && !sd_id128_is_null(*boot_id)) {
-                char match[9+32+1] = "_BOOT_ID=";
+                char match[STRLEN("_BOOT_ID=") + SD_ID128_STRING_MAX] = "_BOOT_ID=";
 
                 sd_journal_flush_matches(j);
 
-                sd_id128_to_string(*boot_id, match + 9);
+                sd_id128_to_string(*boot_id, match + STRLEN("_BOOT_ID="));
                 r = sd_journal_add_match(j, match, sizeof(match) - 1);
                 if (r < 0)
                         return r;
@@ -1433,8 +1395,9 @@
 }
 
 static int list_boots(sd_journal *j) {
-        int w, i, count;
-        BootId *id, *all_ids;
+        _cleanup_(table_unrefp) Table *table = NULL;
+        BootId *all_ids;
+        int count, i, r;
 
         assert(j);
 
@@ -1444,30 +1407,44 @@
         if (count == 0)
                 return count;
 
-        (void) pager_open(arg_pager_flags);
+        table = table_new("idx", "boot id", "first entry", "last entry");
+        if (!table)
+                return log_oom();
 
-        /* numbers are one less, but we need an extra char for the sign */
-        w = DECIMAL_STR_WIDTH(count - 1) + 1;
+        if (arg_full)
+                table_set_width(table, 0);
+
+        r = table_set_json_field_name(table, 0, "index");
+        if (r < 0)
+                return log_error_errno(r, "Failed to set JSON field name of column 0: %m");
+
+        (void) table_set_sort(table, (size_t) 0);
+        (void) table_set_reverse(table, 0, arg_reverse);
 
         i = 0;
         LIST_FOREACH(boot_list, id, all_ids) {
-                char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX];
-
-                printf("% *i " SD_ID128_FORMAT_STR " %s—%s\n",
-                       w, i - count + 1,
-                       SD_ID128_FORMAT_VAL(id->id),
-                       format_timestamp_maybe_utc(a, sizeof(a), id->first),
-                       format_timestamp_maybe_utc(b, sizeof(b), id->last));
+                r = table_add_many(table,
+                                   TABLE_INT, i - count + 1,
+                                   TABLE_SET_ALIGN_PERCENT, 100,
+                                   TABLE_ID128, id->id,
+                                   TABLE_TIMESTAMP, id->first,
+                                   TABLE_TIMESTAMP, id->last);
+                if (r < 0)
+                        return table_log_add_error(r);
                 i++;
         }
 
+        r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, !arg_quiet);
+        if (r < 0)
+                return table_log_print_error(r);
+
         boot_id_free_all(all_ids);
 
         return 0;
 }
 
 static int add_boot(sd_journal *j) {
-        char match[9+32+1] = "_BOOT_ID=";
+        char match[STRLEN("_BOOT_ID=") + SD_ID128_STRING_MAX] = "_BOOT_ID=";
         sd_id128_t boot_id;
         int r;
 
@@ -1487,7 +1464,7 @@
         r = get_boots(j, NULL, &boot_id, arg_boot_offset);
         assert(r <= 1);
         if (r <= 0) {
-                const char *reason = (r == 0) ? "No such boot ID in journal" : strerror_safe(r);
+                const char *reason = (r == 0) ? "No such boot ID in journal" : STRERROR(r);
 
                 if (sd_id128_is_null(arg_boot_id))
                         log_error("Data from the specified boot (%+i) is not available: %s",
@@ -1499,7 +1476,7 @@
                 return r == 0 ? -ENODATA : r;
         }
 
-        sd_id128_to_string(boot_id, match + 9);
+        sd_id128_to_string(boot_id, match + STRLEN("_BOOT_ID="));
 
         r = sd_journal_add_match(j, match, sizeof(match) - 1);
         if (r < 0)
@@ -1538,7 +1515,6 @@
                 Set **units) {
 
         _cleanup_set_free_free_ Set *found = NULL;
-        const char *field;
         int r;
 
         found = set_new(&string_hash_ops);
@@ -1554,7 +1530,7 @@
                         return r;
 
                 SD_JOURNAL_FOREACH_UNIQUE(j, data, size) {
-                        char **pattern, *eq;
+                        char *eq;
                         size_t prefix;
                         _cleanup_free_ char *u = NULL;
 
@@ -1607,7 +1583,6 @@
 static int add_units(sd_journal *j) {
         _cleanup_strv_free_ char **patterns = NULL;
         int r, count = 0;
-        char **i;
 
         assert(j);
 
@@ -1752,7 +1727,6 @@
 
 static int add_syslog_identifier(sd_journal *j) {
         int r;
-        char **i;
 
         assert(j);
 
@@ -1832,7 +1806,7 @@
         _cleanup_(unlink_and_freep) char *k = NULL;
         _cleanup_free_ char *p = NULL;
         uint8_t *mpk, *seed, *state;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         sd_id128_t machine, boot;
         struct stat st;
         uint64_t n;
@@ -1873,16 +1847,16 @@
                 return log_oom();
 
         mpk_size = FSPRG_mskinbytes(FSPRG_RECOMMENDED_SECPAR);
-        mpk = alloca(mpk_size);
+        mpk = alloca_safe(mpk_size);
 
         seed_size = FSPRG_RECOMMENDED_SEEDLEN;
-        seed = alloca(seed_size);
+        seed = alloca_safe(seed_size);
 
         state_size = FSPRG_stateinbytes(FSPRG_RECOMMENDED_SECPAR);
-        state = alloca(state_size);
+        state = alloca_safe(state_size);
 
         log_info("Generating seed...");
-        r = genuine_random_bytes(seed, seed_size, RANDOM_BLOCK);
+        r = crypto_random_bytes(seed, seed_size);
         if (r < 0)
                 return log_error_errno(r, "Failed to acquire random seed: %m");
 
@@ -1902,19 +1876,10 @@
         if (fd < 0)
                 return log_error_errno(fd, "Failed to open %s: %m", k);
 
-        /* Enable secure remove, exclusion from dump, synchronous writing and in-place updating */
-        static const unsigned chattr_flags[] = {
-                FS_SECRM_FL,
-                FS_NODUMP_FL,
-                FS_SYNC_FL,
-                FS_NOCOW_FL,
-        };
-        for (size_t j = 0; j < ELEMENTSOF(chattr_flags); j++) {
-                r = chattr_fd(fd, chattr_flags[j], chattr_flags[j], NULL);
-                if (r < 0)
-                        log_full_errno(ERRNO_IS_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING, r,
-                                       "Failed to set file attribute 0x%x: %m", chattr_flags[j]);
-        }
+        r = chattr_secret(fd, CHATTR_WARN_UNSUPPORTED_FLAGS);
+        if (r < 0)
+                log_full_errno(ERRNO_IS_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING,
+                               r, "Failed to set file attributes on '%s', ignoring: %m", k);
 
         struct FSSHeader h = {
                 .signature = { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' },
@@ -1951,7 +1916,6 @@
                 if (hn)
                         hostname_cleanup(hn);
 
-                char tsb[FORMAT_TIMESPAN_MAX];
                 fprintf(stderr,
                         "\nNew keys have been generated for host %s%s" SD_ID128_FORMAT_STR ".\n"
                         "\n"
@@ -1970,7 +1934,7 @@
                         SD_ID128_FORMAT_VAL(machine),
                         ansi_highlight(), ansi_normal(),
                         p,
-                        format_timespan(tsb, sizeof(tsb), arg_interval, 0),
+                        FORMAT_TIMESPAN(arg_interval, 0),
                         ansi_highlight(), ansi_normal(),
                         ansi_highlight_red());
                 fflush(stderr);
@@ -1999,7 +1963,7 @@
 #endif
 }
 
-static int verify(sd_journal *j) {
+static int verify(sd_journal *j, bool verbose) {
         int r = 0;
         JournalFile *f;
 
@@ -2016,27 +1980,30 @@
                         log_notice("Journal file %s has sealing enabled but verification key has not been passed using --verify-key=.", f->path);
 #endif
 
-                k = journal_file_verify(f, arg_verify_key, &first, &validated, &last, true);
+                k = journal_file_verify(f, arg_verify_key, &first, &validated, &last, verbose);
                 if (k == -EINVAL)
                         /* If the key was invalid give up right-away. */
                         return k;
                 else if (k < 0)
                         r = log_warning_errno(k, "FAIL: %s (%m)", f->path);
                 else {
-                        char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX], c[FORMAT_TIMESPAN_MAX];
-                        log_info("PASS: %s", f->path);
+                        char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX];
+                        log_full(verbose ? LOG_INFO : LOG_DEBUG, "PASS: %s", f->path);
 
                         if (arg_verify_key && JOURNAL_HEADER_SEALED(f->header)) {
                                 if (validated > 0) {
-                                        log_info("=> Validated from %s to %s, final %s entries not sealed.",
+                                        log_full(verbose ? LOG_INFO : LOG_DEBUG,
+                                                 "=> Validated from %s to %s, final %s entries not sealed.",
                                                  format_timestamp_maybe_utc(a, sizeof(a), first),
                                                  format_timestamp_maybe_utc(b, sizeof(b), validated),
-                                                 format_timespan(c, sizeof(c), last > validated ? last - validated : 0, 0));
+                                                 FORMAT_TIMESPAN(last > validated ? last - validated : 0, 0));
                                 } else if (last > 0)
-                                        log_info("=> No sealing yet, %s of entries not sealed.",
-                                                 format_timespan(c, sizeof(c), last - first, 0));
+                                        log_full(verbose ? LOG_INFO : LOG_DEBUG,
+                                                 "=> No sealing yet, %s of entries not sealed.",
+                                                 FORMAT_TIMESPAN(last - first, 0));
                                 else
-                                        log_info("=> No sealing yet, no entries in file.");
+                                        log_full(verbose ? LOG_INFO : LOG_DEBUG,
+                                                 "=> No sealing yet, no entries in file.");
                         }
                 }
         }
@@ -2131,13 +2098,13 @@
 
 int main(int argc, char *argv[]) {
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(umount_and_rmdir_and_freep) char *unlink_dir = NULL;
         bool previous_boot_id_valid = false, first_line = true, ellipsized = false, need_seek = false;
         bool use_cursor = false, after_cursor = false;
         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
-        sd_id128_t previous_boot_id;
-        int n_shown = 0, r, poll_fd = -1;
+        sd_id128_t previous_boot_id = SD_ID128_NULL, previous_boot_id_output = SD_ID128_NULL;
+        dual_timestamp previous_ts_output = DUAL_TIMESTAMP_NULL;
+        int n_shown = 0, r, poll_fd = -EBADF;
 
         setlocale(LC_ALL, "");
         log_setup();
@@ -2161,8 +2128,7 @@
                                 DISSECT_IMAGE_RELAX_VAR_CHECK |
                                 (arg_action == ACTION_UPDATE_CATALOG ? DISSECT_IMAGE_FSCK|DISSECT_IMAGE_GROWFS : DISSECT_IMAGE_READ_ONLY),
                                 &unlink_dir,
-                                &loop_device,
-                                &decrypted_image);
+                                &loop_device);
                 if (r < 0)
                         return r;
 
@@ -2202,7 +2168,7 @@
                 } else {
                         bool oneline = arg_action == ACTION_LIST_CATALOG;
 
-                        (void) pager_open(arg_pager_flags);
+                        pager_open(arg_pager_flags);
 
                         if (optind < argc)
                                 r = catalog_list_items(stdout, database, oneline, argv + optind);
@@ -2244,7 +2210,7 @@
                 break;
 
         default:
-                assert_not_reached("Unknown action");
+                assert_not_reached();
         }
 
         if (arg_directory)
@@ -2329,7 +2295,7 @@
         case ACTION_FLUSH:
         case ACTION_SYNC:
         case ACTION_ROTATE:
-                assert_not_reached("Unexpected action.");
+                assert_not_reached();
 
         case ACTION_PRINT_HEADER:
                 journal_print_header(j);
@@ -2337,19 +2303,18 @@
                 goto finish;
 
         case ACTION_VERIFY:
-                r = verify(j);
+                r = verify(j, !arg_quiet);
                 goto finish;
 
         case ACTION_DISK_USAGE: {
                 uint64_t bytes = 0;
-                char sbytes[FORMAT_BYTES_MAX];
 
                 r = sd_journal_get_usage(j, &bytes);
                 if (r < 0)
                         goto finish;
 
                 printf("Archived and active journals take up %s in the file system.\n",
-                       format_bytes(sbytes, sizeof(sbytes), bytes));
+                       FORMAT_BYTES(bytes));
                 goto finish;
         }
 
@@ -2396,7 +2361,7 @@
                 break;
 
         default:
-                assert_not_reached("Unknown action");
+                assert_not_reached();
         }
 
         if (arg_boot_offset != 0 &&
@@ -2596,7 +2561,7 @@
                 need_seek = true;
 
         if (!arg_follow)
-                (void) pager_open(arg_pager_flags);
+                pager_open(arg_pager_flags);
 
         if (!arg_quiet && (arg_lines != 0 || arg_follow) && DEBUG_LOGGING) {
                 usec_t start, end;
@@ -2676,16 +2641,9 @@
                                 }
                         }
 
-#if HAVE_PCRE2
                         if (arg_compiled_pattern) {
-                                _cleanup_(sym_pcre2_match_data_freep) pcre2_match_data *md = NULL;
                                 const void *message;
                                 size_t len;
-                                PCRE2_SIZE *ovec;
-
-                                md = sym_pcre2_match_data_create(1, NULL);
-                                if (!md)
-                                        return log_oom();
 
                                 r = sd_journal_get_data(j, "MESSAGE", &message, &len);
                                 if (r < 0) {
@@ -2700,33 +2658,15 @@
 
                                 assert_se(message = startswith(message, "MESSAGE="));
 
-                                r = sym_pcre2_match(arg_compiled_pattern,
-                                                    message,
-                                                    len - strlen("MESSAGE="),
-                                                    0,      /* start at offset 0 in the subject */
-                                                    0,      /* default options */
-                                                    md,
-                                                    NULL);
-                                if (r == PCRE2_ERROR_NOMATCH) {
+                                r = pattern_matches_and_log(arg_compiled_pattern, message,
+                                                            len - strlen("MESSAGE="), highlight);
+                                if (r < 0)
+                                        goto finish;
+                                if (r == 0) {
                                         need_seek = true;
                                         continue;
                                 }
-                                if (r < 0) {
-                                        unsigned char buf[LINE_MAX];
-                                        int r2;
-
-                                        r2 = sym_pcre2_get_error_message(r, buf, sizeof buf);
-                                        log_error("Pattern matching failed: %s",
-                                                  r2 < 0 ? "unknown error" : (char*) buf);
-                                        r = -EINVAL;
-                                        goto finish;
-                                }
-
-                                ovec = sym_pcre2_get_ovector_pointer(md);
-                                highlight[0] = ovec[0];
-                                highlight[1] = ovec[1];
                         }
-#endif
 
                         flags =
                                 arg_all * OUTPUT_SHOW_ALL |
@@ -2737,7 +2677,8 @@
                                 arg_no_hostname * OUTPUT_NO_HOSTNAME;
 
                         r = show_journal_entry(stdout, j, arg_output, 0, flags,
-                                               arg_output_fields, highlight, &ellipsized);
+                                               arg_output_fields, highlight, &ellipsized,
+                                               &previous_ts_output, &previous_boot_id_output);
                         need_seek = true;
                         if (r == -EADDRNOTAVAIL)
                                 break;
@@ -2801,29 +2742,12 @@
 finish:
         pager_close();
 
-        strv_free(arg_file);
-
-        set_free(arg_facilities);
-        strv_free(arg_syslog_identifier);
-        strv_free(arg_system_units);
-        strv_free(arg_user_units);
-        strv_free(arg_output_fields);
-
-        free(arg_root);
-        free(arg_verify_key);
-
-#if HAVE_PCRE2
-        if (arg_compiled_pattern) {
-                sym_pcre2_code_free(arg_compiled_pattern);
-
+        if (arg_compiled_pattern && r == 0 && n_shown == 0)
                 /* --grep was used, no error was thrown, but the pattern didn't
                  * match anything. Let's mimic grep's behavior here and return
                  * a non-zero exit code, so journalctl --grep can be used
                  * in scripts and such */
-                if (r == 0 && n_shown == 0)
-                        r = -ENOENT;
-        }
-#endif
+                r = -ENOENT;
 
         return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
 }
diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c
index 507b121..a2ebf97 100644
--- a/src/journal/journald-audit.c
+++ b/src/journal/journald-audit.c
@@ -8,6 +8,7 @@
 #include "fd-util.h"
 #include "hexdecoct.h"
 #include "io-util.h"
+#include "journal-internal.h"
 #include "journald-audit.h"
 #include "missing_audit.h"
 #include "string-util.h"
@@ -15,14 +16,14 @@
 typedef struct MapField {
         const char *audit_field;
         const char *journal_field;
-        int (*map)(const char *field, const char **p, struct iovec **iov, size_t *n_iov);
+        int (*map)(const char *field, const char **p, struct iovec *iovec, size_t *n);
 } MapField;
 
 static int map_simple_field(
                 const char *field,
                 const char **p,
-                struct iovec **iov,
-                size_t *n_iov) {
+                struct iovec *iovec,
+                size_t *n) {
 
         _cleanup_free_ char *c = NULL;
         size_t l = 0;
@@ -30,8 +31,8 @@
 
         assert(field);
         assert(p);
-        assert(iov);
-        assert(n_iov);
+        assert(iovec);
+        assert(n);
 
         l = strlen(field);
         c = malloc(l + 1);
@@ -48,10 +49,7 @@
 
         c[l] = 0;
 
-        if (!GREEDY_REALLOC(*iov, *n_iov + 1))
-                return -ENOMEM;
-
-        (*iov)[(*n_iov)++] = IOVEC_MAKE(c, l);
+        iovec[(*n)++] = IOVEC_MAKE(c, l);
 
         *p = e;
         c = NULL;
@@ -62,8 +60,8 @@
 static int map_string_field_internal(
                 const char *field,
                 const char **p,
-                struct iovec **iov,
-                size_t *n_iov,
+                struct iovec *iovec,
+                size_t *n,
                 bool filter_printable) {
 
         _cleanup_free_ char *c = NULL;
@@ -72,8 +70,8 @@
 
         assert(field);
         assert(p);
-        assert(iov);
-        assert(n_iov);
+        assert(iovec);
+        assert(n);
 
         /* The kernel formats string fields in one of two formats. */
 
@@ -128,10 +126,7 @@
         } else
                 return 0;
 
-        if (!GREEDY_REALLOC(*iov, *n_iov + 1))
-                return -ENOMEM;
-
-        (*iov)[(*n_iov)++] = IOVEC_MAKE(c, l);
+        iovec[(*n)++] = IOVEC_MAKE(c, l);
 
         *p = e;
         c = NULL;
@@ -139,19 +134,19 @@
         return 1;
 }
 
-static int map_string_field(const char *field, const char **p, struct iovec **iov, size_t *n_iov) {
-        return map_string_field_internal(field, p, iov, n_iov, false);
+static int map_string_field(const char *field, const char **p, struct iovec *iovec, size_t *n) {
+        return map_string_field_internal(field, p, iovec, n, false);
 }
 
-static int map_string_field_printable(const char *field, const char **p, struct iovec **iov, size_t *n_iov) {
-        return map_string_field_internal(field, p, iov, n_iov, true);
+static int map_string_field_printable(const char *field, const char **p, struct iovec *iovec, size_t *n) {
+        return map_string_field_internal(field, p, iovec, n, true);
 }
 
 static int map_generic_field(
                 const char *prefix,
                 const char **p,
-                struct iovec **iov,
-                size_t *n_iov) {
+                struct iovec *iovec,
+                size_t *n) {
 
         const char *e, *f;
         char *c, *t;
@@ -167,9 +162,8 @@
                 if (*e == '=')
                         break;
 
-                if (!((*e >= 'a' && *e <= 'z') ||
-                      (*e >= 'A' && *e <= 'Z') ||
-                      (*e >= '0' && *e <= '9') ||
+                if (!(ascii_isalpha(*e) ||
+                      ascii_isdigit(*e) ||
                       IN_SET(*e, '_', '-')))
                         return 0;
         }
@@ -196,7 +190,7 @@
 
         e++;
 
-        r = map_simple_field(c, &e, iov, n_iov);
+        r = map_simple_field(c, &e, iovec, n);
         if (r < 0)
                 return r;
 
@@ -255,20 +249,28 @@
                 const MapField map_fields[],
                 const char *prefix,
                 bool handle_msg,
-                struct iovec **iov,
-                size_t *n_iov) {
+                struct iovec *iovec,
+                size_t *n,
+                size_t m) {
 
         int r;
 
         assert(p);
-        assert(iov);
-        assert(n_iov);
+        assert(iovec);
+        assert(n);
 
         for (;;) {
                 bool mapped = false;
-                const MapField *m;
+                const MapField *mf;
                 const char *v;
 
+                if (*n >= m) {
+                        log_debug(
+                                "More fields in audit message than audit field limit (%i), skipping remaining fields",
+                                N_IOVEC_AUDIT_FIELDS);
+                        return 0;
+                }
+
                 p += strspn(p, WHITESPACE);
 
                 if (*p == 0)
@@ -296,17 +298,17 @@
                                 if (!c)
                                         return -ENOMEM;
 
-                                return map_all_fields(c, map_fields_userspace, "AUDIT_FIELD_", false, iov, n_iov);
+                                return map_all_fields(c, map_fields_userspace, "AUDIT_FIELD_", false, iovec, n, m);
                         }
                 }
 
                 /* Try to map the kernel fields to our own names */
-                for (m = map_fields; m->audit_field; m++) {
-                        v = startswith(p, m->audit_field);
+                for (mf = map_fields; mf->audit_field; mf++) {
+                        v = startswith(p, mf->audit_field);
                         if (!v)
                                 continue;
 
-                        r = m->map(m->journal_field, &v, iov, n_iov);
+                        r = mf->map(mf->journal_field, &v, iovec, n);
                         if (r < 0)
                                 return log_debug_errno(r, "Failed to parse audit array: %m");
 
@@ -318,7 +320,7 @@
                 }
 
                 if (!mapped) {
-                        r = map_generic_field(prefix, &p, iov, n_iov);
+                        r = map_generic_field(prefix, &p, iovec, n);
                         if (r < 0)
                                 return log_debug_errno(r, "Failed to parse audit array: %m");
 
@@ -330,13 +332,13 @@
 }
 
 void process_audit_string(Server *s, int type, const char *data, size_t size) {
-        size_t n_iov = 0, z;
-        _cleanup_free_ struct iovec *iov = NULL;
+        size_t n = 0, z;
         uint64_t seconds, msec, id;
         const char *p, *type_name;
         char id_field[sizeof("_AUDIT_ID=") + DECIMAL_STR_MAX(uint64_t)],
              type_field[sizeof("_AUDIT_TYPE=") + DECIMAL_STR_MAX(int)],
              source_time_field[sizeof("_SOURCE_REALTIME_TIMESTAMP=") + DECIMAL_STR_MAX(usec_t)];
+        struct iovec iovec[N_IOVEC_META_FIELDS + 8 + N_IOVEC_AUDIT_FIELDS];
         char *m, *type_field_name;
         int k;
 
@@ -371,53 +373,41 @@
         if (isempty(p))
                 return;
 
-        iov = new(struct iovec, N_IOVEC_META_FIELDS + 8);
-        if (!iov) {
-                log_oom();
-                return;
-        }
-
-        iov[n_iov++] = IOVEC_MAKE_STRING("_TRANSPORT=audit");
+        iovec[n++] = IOVEC_MAKE_STRING("_TRANSPORT=audit");
 
         sprintf(source_time_field, "_SOURCE_REALTIME_TIMESTAMP=%" PRIu64,
                 (usec_t) seconds * USEC_PER_SEC + (usec_t) msec * USEC_PER_MSEC);
-        iov[n_iov++] = IOVEC_MAKE_STRING(source_time_field);
+        iovec[n++] = IOVEC_MAKE_STRING(source_time_field);
 
         sprintf(type_field, "_AUDIT_TYPE=%i", type);
-        iov[n_iov++] = IOVEC_MAKE_STRING(type_field);
+        iovec[n++] = IOVEC_MAKE_STRING(type_field);
 
         sprintf(id_field, "_AUDIT_ID=%" PRIu64, id);
-        iov[n_iov++] = IOVEC_MAKE_STRING(id_field);
+        iovec[n++] = IOVEC_MAKE_STRING(id_field);
 
         assert_cc(4 == LOG_FAC(LOG_AUTH));
-        iov[n_iov++] = IOVEC_MAKE_STRING("SYSLOG_FACILITY=4");
-        iov[n_iov++] = IOVEC_MAKE_STRING("SYSLOG_IDENTIFIER=audit");
+        iovec[n++] = IOVEC_MAKE_STRING("SYSLOG_FACILITY=4");
+        iovec[n++] = IOVEC_MAKE_STRING("SYSLOG_IDENTIFIER=audit");
 
         type_name = audit_type_name_alloca(type);
 
         type_field_name = strjoina("_AUDIT_TYPE_NAME=", type_name);
-        iov[n_iov++] = IOVEC_MAKE_STRING(type_field_name);
+        iovec[n++] = IOVEC_MAKE_STRING(type_field_name);
 
         m = strjoina("MESSAGE=", type_name, " ", p);
-        iov[n_iov++] = IOVEC_MAKE_STRING(m);
+        iovec[n++] = IOVEC_MAKE_STRING(m);
 
-        z = n_iov;
+        z = n;
 
-        map_all_fields(p, map_fields_kernel, "_AUDIT_FIELD_", true, &iov, &n_iov);
+        map_all_fields(p, map_fields_kernel, "_AUDIT_FIELD_", true, iovec, &n, n + N_IOVEC_AUDIT_FIELDS);
 
-        if (!GREEDY_REALLOC(iov, n_iov + N_IOVEC_META_FIELDS)) {
-                log_oom();
-                goto finish;
-        }
+        server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), NULL, NULL, LOG_NOTICE, 0);
 
-        server_dispatch_message(s, iov, n_iov, MALLOC_ELEMENTSOF(iov), NULL, NULL, LOG_NOTICE, 0);
-
-finish:
         /* free() all entries that map_all_fields() added. All others
          * are allocated on the stack or are constant. */
 
-        for (; z < n_iov; z++)
-                free(iov[z].iov_base);
+        for (; z < n; z++)
+                free(iovec[z].iov_base);
 }
 
 void server_process_audit_message(
@@ -452,7 +442,7 @@
         }
 
         if (!NLMSG_OK(nl, buffer_size)) {
-                log_error("Audit netlink message truncated.");
+                log_ratelimit_error(JOURNAL_LOG_RATELIMIT, "Audit netlink message truncated.");
                 return;
         }
 
diff --git a/src/journal/journald-client.c b/src/journal/journald-client.c
new file mode 100644
index 0000000..5aedf4e
--- /dev/null
+++ b/src/journal/journald-client.c
@@ -0,0 +1,114 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "cgroup-util.h"
+#include "errno-util.h"
+#include "journald-client.h"
+#include "nulstr-util.h"
+#include "pcre2-util.h"
+
+/* This consumes both `allow_list` and `deny_list` arguments. Hence, those arguments are not owned by the
+ * caller anymore and should not be freed. */
+static void client_set_filtering_patterns(ClientContext *c, Set *allow_list, Set *deny_list) {
+        assert(c);
+
+        set_free_and_replace(c->log_filter_allowed_patterns, allow_list);
+        set_free_and_replace(c->log_filter_denied_patterns, deny_list);
+}
+
+static int client_parse_log_filter_nulstr(const char *nulstr, size_t len, Set **ret) {
+        _cleanup_set_free_ Set *s = NULL;
+        _cleanup_strv_free_ char **patterns_strv = NULL;
+        int r;
+
+        assert(nulstr);
+        assert(ret);
+
+        patterns_strv = strv_parse_nulstr(nulstr, len);
+        if (!patterns_strv)
+                return log_oom_debug();
+
+        STRV_FOREACH(pattern, patterns_strv) {
+                _cleanup_(pattern_freep) pcre2_code *compiled_pattern = NULL;
+
+                r = pattern_compile_and_log(*pattern, 0, &compiled_pattern);
+                if (r < 0)
+                        return r;
+
+                r = set_ensure_consume(&s, &pcre2_code_hash_ops_free, TAKE_PTR(compiled_pattern));
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to insert regex into set: %m");
+        }
+
+        *ret = TAKE_PTR(s);
+
+        return 0;
+}
+
+int client_context_read_log_filter_patterns(ClientContext *c, const char *cgroup) {
+        char *deny_list_xattr, *xattr_end;
+        _cleanup_free_ char *xattr = NULL, *unit_cgroup = NULL;
+        _cleanup_set_free_ Set *allow_list = NULL, *deny_list = NULL;
+        int r;
+
+        assert(c);
+
+        r = cg_path_get_unit_path(cgroup, &unit_cgroup);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to get the unit's cgroup path for %s: %m", cgroup);
+
+        r = cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, unit_cgroup, "user.journald_log_filter_patterns", &xattr);
+        if (r < 0) {
+                if (!ERRNO_IS_XATTR_ABSENT(r))
+                        return log_debug_errno(r, "Failed to get user.journald_log_filter_patterns xattr for %s: %m", unit_cgroup);
+
+                client_set_filtering_patterns(c, NULL, NULL);
+                return 0;
+        }
+
+        xattr_end = xattr + r;
+
+        /* We expect '0xff' to be present in the attribute, even if the lists are empty. We expect the
+         * following:
+         * - Allow list, but no deny list: 0xXX, ...., 0xff
+         * - No allow list, but deny list: 0xff, 0xXX, ....
+         * - Allow list, and deny list:    0xXX, ...., 0xff, 0xXX, ....
+         * This is due to the fact allowed and denied patterns list are two nulstr joined together with '0xff'.
+         * None of the allowed or denied nulstr have a nul-termination character.
+         *
+         * We do not expect both the allow list and deny list to be empty, as this condition is tested
+         * before writing to xattr. */
+        deny_list_xattr = memchr(xattr, (char)0xff, r);
+        if (!deny_list_xattr)
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "Missing delimiter in cgroup user.journald_log_filter_patterns attribute: %m");
+
+        r = client_parse_log_filter_nulstr(xattr, deny_list_xattr - xattr, &allow_list);
+        if (r < 0)
+                return r;
+
+        /* Use 'deny_list_xattr + 1' to skip '0xff'. */
+        ++deny_list_xattr;
+        r = client_parse_log_filter_nulstr(deny_list_xattr, xattr_end - deny_list_xattr, &deny_list);
+        if (r < 0)
+                return r;
+
+        client_set_filtering_patterns(c, TAKE_PTR(allow_list), TAKE_PTR(deny_list));
+
+        return 0;
+}
+
+int client_context_check_keep_log(ClientContext *c, const char *message, size_t len) {
+        pcre2_code *regex;
+
+        if (!c || !message)
+                return true;
+
+        SET_FOREACH(regex, c->log_filter_denied_patterns)
+                if (pattern_matches_and_log(regex, message, len, NULL) > 0)
+                        return false;
+
+        SET_FOREACH(regex, c->log_filter_allowed_patterns)
+                if (pattern_matches_and_log(regex, message, len, NULL) > 0)
+                        return true;
+
+        return set_isempty(c->log_filter_allowed_patterns);
+}
diff --git a/src/journal/journald-client.h b/src/journal/journald-client.h
new file mode 100644
index 0000000..629cd41
--- /dev/null
+++ b/src/journal/journald-client.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "journald-context.h"
+
+int client_context_read_log_filter_patterns(ClientContext *c, const char *cgroup);
+int client_context_check_keep_log(ClientContext *c, const char *message, size_t len);
diff --git a/src/journal/journald-console.c b/src/journal/journald-console.c
index 2035e2d..c8a3e18 100644
--- a/src/journal/journald-console.c
+++ b/src/journal/journald-console.c
@@ -43,7 +43,7 @@
         char tbuf[STRLEN("[] ") + DECIMAL_STR_MAX(ts.tv_sec) + DECIMAL_STR_MAX(ts.tv_nsec)-3 + 1];
         char header_pid[STRLEN("[]: ") + DECIMAL_STR_MAX(pid_t)];
         _cleanup_free_ char *ident_buf = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *tty;
         int n = 0;
 
diff --git a/src/journal/journald-context.c b/src/journal/journald-context.c
index 27608ff..5f0c638 100644
--- a/src/journal/journald-context.c
+++ b/src/journal/journald-context.c
@@ -12,7 +12,9 @@
 #include "fileio.h"
 #include "fs-util.h"
 #include "io-util.h"
+#include "journal-internal.h"
 #include "journal-util.h"
+#include "journald-client.h"
 #include "journald-context.h"
 #include "parse-util.h"
 #include "path-util.h"
@@ -179,6 +181,9 @@
 
         c->log_ratelimit_interval = s->ratelimit_interval;
         c->log_ratelimit_burst = s->ratelimit_burst;
+
+        c->log_filter_allowed_patterns = set_free(c->log_filter_allowed_patterns);
+        c->log_filter_denied_patterns = set_free(c->log_filter_denied_patterns);
 }
 
 static ClientContext* client_context_free(Server *s, ClientContext *c) {
@@ -258,7 +263,7 @@
 
                 /* If we got no SELinux label passed in, let's try to acquire one */
 
-                if (getpidcon(c->pid, &con) >= 0) {
+                if (getpidcon(c->pid, &con) >= 0 && con) {
                         free_and_replace(c->label, con);
                         c->label_size = strlen(c->label);
                 }
@@ -289,6 +294,8 @@
                 return r;
         }
 
+        (void) client_context_read_log_filter_patterns(c, t);
+
         /* Let's shortcut this if the cgroup path didn't change */
         if (streq_ptr(c->cgroup, t))
                 return 0;
@@ -533,7 +540,7 @@
 
         if (c->in_lru) {
                 assert(c->n_ref == 0);
-                assert_se(prioq_reshuffle(s->client_contexts_lru, c, &c->lru_index) >= 0);
+                prioq_reshuffle(s->client_contexts_lru, c, &c->lru_index);
         }
 }
 
@@ -771,7 +778,8 @@
 
                 r = client_context_acquire(s, ucred.pid, &ucred, NULL, 0, NULL, &s->my_context);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to acquire our own context, ignoring: %m");
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to acquire our own context, ignoring: %m");
         }
 
         if (!s->namespace && !s->pid1_context) {
@@ -780,7 +788,8 @@
 
                 r = client_context_acquire(s, 1, NULL, NULL, 0, NULL, &s->pid1_context);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to acquire PID1's context, ignoring: %m");
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to acquire PID1's context, ignoring: %m");
 
         }
 }
diff --git a/src/journal/journald-context.h b/src/journal/journald-context.h
index 9bf74b2..4a998ba 100644
--- a/src/journal/journald-context.h
+++ b/src/journal/journald-context.h
@@ -7,6 +7,7 @@
 
 #include "sd-id128.h"
 
+#include "set.h"
 #include "time-util.h"
 
 typedef struct ClientContext ClientContext;
@@ -55,6 +56,9 @@
 
         usec_t log_ratelimit_interval;
         unsigned log_ratelimit_burst;
+
+        Set *log_filter_allowed_patterns;
+        Set *log_filter_denied_patterns;
 };
 
 int client_context_get(
diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c
index c96b84e..c64e626 100644
--- a/src/journal/journald-kmsg.c
+++ b/src/journal/journald-kmsg.c
@@ -16,9 +16,11 @@
 #include "format-util.h"
 #include "fs-util.h"
 #include "io-util.h"
+#include "journal-internal.h"
 #include "journald-kmsg.h"
 #include "journald-server.h"
 #include "journald-syslog.h"
+#include "log.h"
 #include "parse-util.h"
 #include "process-util.h"
 #include "stdio-util.h"
@@ -35,7 +37,7 @@
         struct iovec iovec[5];
         char header_priority[DECIMAL_STR_MAX(priority) + 3],
              header_pid[STRLEN("[]: ") + DECIMAL_STR_MAX(pid_t) + 1];
-        int n = 0;
+        size_t n = 0;
 
         assert(s);
         assert(priority >= 0);
@@ -63,11 +65,10 @@
                         identifier = ident_buf;
                 }
 
-                xsprintf(header_pid, "["PID_FMT"]: ", ucred->pid);
-
                 if (identifier)
                         iovec[n++] = IOVEC_MAKE_STRING(identifier);
 
+                xsprintf(header_pid, "["PID_FMT"]: ", ucred->pid);
                 iovec[n++] = IOVEC_MAKE_STRING(header_pid);
         } else if (identifier) {
                 iovec[n++] = IOVEC_MAKE_STRING(identifier);
@@ -79,7 +80,7 @@
         iovec[n++] = IOVEC_MAKE_STRING("\n");
 
         if (writev(s->dev_kmsg_fd, iovec, n) < 0)
-                log_debug_errno(errno, "Failed to write to /dev/kmsg for logging: %m");
+                log_debug_errno(errno, "Failed to write to /dev/kmsg for logging, ignoring: %m");
 }
 
 static bool is_us(const char *identifier, const char *pid) {
@@ -106,6 +107,8 @@
         char *e, *f, *k;
         uint64_t serial;
         size_t pl;
+        int saved_log_max_level = INT_MAX;
+        ClientContext *c = NULL;
 
         assert(s);
         assert(p);
@@ -266,10 +269,16 @@
         else {
                 pl -= syslog_parse_identifier((const char**) &p, &identifier, &pid);
 
-                /* Avoid any messages we generated ourselves via
-                 * log_info() and friends. */
-                if (is_us(identifier, pid))
-                        goto finish;
+                /* Avoid logging any new messages when we're processing messages generated by ourselves via
+                 * log_info() and friends to avoid infinite loops. */
+                if (is_us(identifier, pid)) {
+                        if (!ratelimit_below(&s->kmsg_own_ratelimit))
+                                return;
+
+                        saved_log_max_level = log_get_max_level();
+                        c = s->my_context;
+                        log_set_max_level(LOG_NULL);
+                }
 
                 if (identifier) {
                         syslog_identifier = strjoin("SYSLOG_IDENTIFIER=", identifier);
@@ -287,7 +296,10 @@
         if (cunescape_length_with_prefix(p, pl, "MESSAGE=", UNESCAPE_RELAX, &message) >= 0)
                 iovec[n++] = IOVEC_MAKE_STRING(message);
 
-        server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), NULL, NULL, priority, 0);
+        server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), c, NULL, priority, 0);
+
+        if (saved_log_max_level != INT_MAX)
+                log_set_max_level(saved_log_max_level);
 
 finish:
         for (j = 0; j < z; j++)
@@ -305,18 +317,18 @@
         if (l == 0)
                 return 0;
         if (l < 0) {
-                /* Old kernels who don't allow reading from /dev/kmsg
-                 * return EINVAL when we try. So handle this cleanly,
-                 * but don' try to ever read from it again. */
+                /* Old kernels which don't allow reading from /dev/kmsg return EINVAL when we try. So handle
+                 * this cleanly, but don't try to ever read from it again. */
                 if (errno == EINVAL) {
                         s->dev_kmsg_event_source = sd_event_source_unref(s->dev_kmsg_event_source);
+                        s->dev_kmsg_readable = false;
                         return 0;
                 }
 
-                if (IN_SET(errno, EAGAIN, EINTR, EPIPE))
+                if (ERRNO_IS_TRANSIENT(errno) || errno == EPIPE)
                         return 0;
 
-                return log_error_errno(errno, "Failed to read from /dev/kmsg: %m");
+                return log_ratelimit_error_errno(errno, JOURNAL_LOG_RATELIMIT, "Failed to read from /dev/kmsg: %m");
         }
 
         dev_kmsg_record(s, buffer, l);
@@ -349,14 +361,14 @@
 }
 
 static int dispatch_dev_kmsg(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
         assert(es);
         assert(fd == s->dev_kmsg_fd);
-        assert(s);
 
         if (revents & EPOLLERR)
-                log_warning("/dev/kmsg buffer overrun, some messages lost.");
+                log_ratelimit_warning(JOURNAL_LOG_RATELIMIT,
+                                      "/dev/kmsg buffer overrun, some messages lost.");
 
         if (!(revents & EPOLLIN))
                 log_error("Got invalid event from epoll for /dev/kmsg: %"PRIx32, revents);
@@ -386,38 +398,32 @@
                 return 0;
 
         r = sd_event_add_io(s->event, &s->dev_kmsg_event_source, s->dev_kmsg_fd, EPOLLIN, dispatch_dev_kmsg, s);
+        if (r == -EPERM) { /* This will fail with EPERM on older kernels where /dev/kmsg is not readable. */
+                r = 0;
+                goto finish;
+        }
         if (r < 0) {
-
-                /* This will fail with EPERM on older kernels where
-                 * /dev/kmsg is not readable. */
-                if (r == -EPERM) {
-                        r = 0;
-                        goto fail;
-                }
-
                 log_error_errno(r, "Failed to add /dev/kmsg fd to event loop: %m");
-                goto fail;
+                goto finish;
         }
 
         r = sd_event_source_set_priority(s->dev_kmsg_event_source, SD_EVENT_PRIORITY_IMPORTANT+10);
         if (r < 0) {
                 log_error_errno(r, "Failed to adjust priority of kmsg event source: %m");
-                goto fail;
+                goto finish;
         }
 
         s->dev_kmsg_readable = true;
-
         return 0;
 
-fail:
+finish:
         s->dev_kmsg_event_source = sd_event_source_unref(s->dev_kmsg_event_source);
         s->dev_kmsg_fd = safe_close(s->dev_kmsg_fd);
-
         return r;
 }
 
 int server_open_kernel_seqnum(Server *s) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *fn;
         uint64_t *p;
         int r;
@@ -427,7 +433,7 @@
         /* We store the seqnum we last read in an mmapped file. That way we can just use it like a variable,
          * but it is persistent and automatically flushed at reboot. */
 
-        if (!s->read_kmsg)
+        if (!s->dev_kmsg_readable)
                 return 0;
 
         fn = strjoina(s->runtime_directory, "/kernel-seqnum");
diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
index 0325788..ca23508 100644
--- a/src/journal/journald-native.c
+++ b/src/journal/journald-native.c
@@ -11,7 +11,9 @@
 #include "fs-util.h"
 #include "io-util.h"
 #include "journal-importer.h"
+#include "journal-internal.h"
 #include "journal-util.h"
+#include "journald-client.h"
 #include "journald-console.h"
 #include "journald-kmsg.h"
 #include "journald-native.h"
@@ -260,6 +262,13 @@
                 goto finish;
 
         if (message) {
+                /* Ensure message is not NULL, otherwise strlen(message) would crash. This check needs to
+                 * be here until server_process_entry() is able to process messages containing \0 characters,
+                 * as we would have access to the actual size of message. */
+                r = client_context_check_keep_log(context, message, strlen(message));
+                if (r <= 0)
+                        goto finish;
+
                 if (s->forward_to_syslog)
                         server_forward_syslog(s, syslog_fixup_facility(priority), identifier, message, ucred, tv);
 
@@ -309,7 +318,9 @@
         if (ucred && pid_is_valid(ucred->pid)) {
                 r = client_context_get(s, ucred->pid, ucred, label, label_len, NULL, &context);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to retrieve credentials for PID " PID_FMT ", ignoring: %m", ucred->pid);
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to retrieve credentials for PID " PID_FMT ", ignoring: %m",
+                                                    ucred->pid);
         }
 
         do {
@@ -348,29 +359,34 @@
 
                 r = fd_get_path(fd, &k);
                 if (r < 0) {
-                        log_error_errno(r, "readlink(/proc/self/fd/%i) failed: %m", fd);
+                        log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                  "readlink(/proc/self/fd/%i) failed: %m", fd);
                         return;
                 }
 
                 e = PATH_STARTSWITH_SET(k, "/dev/shm/", "/tmp/", "/var/tmp/");
                 if (!e) {
-                        log_error("Received file outside of allowed directories. Refusing.");
+                        log_ratelimit_error(JOURNAL_LOG_RATELIMIT,
+                                            "Received file outside of allowed directories. Refusing.");
                         return;
                 }
 
                 if (!filename_is_valid(e)) {
-                        log_error("Received file in subdirectory of allowed directories. Refusing.");
+                        log_ratelimit_error(JOURNAL_LOG_RATELIMIT,
+                                            "Received file in subdirectory of allowed directories. Refusing.");
                         return;
                 }
         }
 
         if (fstat(fd, &st) < 0) {
-                log_error_errno(errno, "Failed to stat passed file, ignoring: %m");
+                log_ratelimit_error_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                          "Failed to stat passed file, ignoring: %m");
                 return;
         }
 
         if (!S_ISREG(st.st_mode)) {
-                log_error("File passed is not regular. Ignoring.");
+                log_ratelimit_error(JOURNAL_LOG_RATELIMIT,
+                                    "File passed is not regular. Ignoring.");
                 return;
         }
 
@@ -380,7 +396,9 @@
         /* When !sealed, set a lower memory limit. We have to read the file,
          * effectively doubling memory use. */
         if (st.st_size > ENTRY_SIZE_MAX / (sealed ? 1 : 2)) {
-                log_error("File passed too large (%"PRIu64" bytes). Ignoring.", (uint64_t) st.st_size);
+                log_ratelimit_error(JOURNAL_LOG_RATELIMIT,
+                                    "File passed too large (%"PRIu64" bytes). Ignoring.",
+                                    (uint64_t) st.st_size);
                 return;
         }
 
@@ -393,7 +411,8 @@
                 ps = PAGE_ALIGN(st.st_size);
                 p = mmap(NULL, ps, PROT_READ, MAP_PRIVATE, fd, 0);
                 if (p == MAP_FAILED) {
-                        log_error_errno(errno, "Failed to map memfd, ignoring: %m");
+                        log_ratelimit_error_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                                  "Failed to map memfd, ignoring: %m");
                         return;
                 }
 
@@ -405,7 +424,8 @@
                 ssize_t n;
 
                 if (fstatvfs(fd, &vfs) < 0) {
-                        log_error_errno(errno, "Failed to stat file system of passed file, not processing it: %m");
+                        log_ratelimit_error_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                                  "Failed to stat file system of passed file, not processing it: %m");
                         return;
                 }
 
@@ -415,7 +435,8 @@
                  * https://github.com/systemd/systemd/issues/1822
                  */
                 if (vfs.f_flag & ST_MANDLOCK) {
-                        log_error("Received file descriptor from file system with mandatory locking enabled, not processing it.");
+                        log_ratelimit_error(JOURNAL_LOG_RATELIMIT,
+                                            "Received file descriptor from file system with mandatory locking enabled, not processing it.");
                         return;
                 }
 
@@ -428,7 +449,8 @@
                  * and so is SMB. */
                 r = fd_nonblock(fd, true);
                 if (r < 0) {
-                        log_error_errno(r, "Failed to make fd non-blocking, not processing it: %m");
+                        log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                  "Failed to make fd non-blocking, not processing it: %m");
                         return;
                 }
 
@@ -444,7 +466,8 @@
 
                 n = pread(fd, p, st.st_size, 0);
                 if (n < 0)
-                        log_error_errno(errno, "Failed to read file, ignoring: %m");
+                        log_ratelimit_error_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                                  "Failed to read file, ignoring: %m");
                 else if (n > 0)
                         server_process_native_message(s, p, n, ucred, tv, label, label_len);
         }
diff --git a/src/journal/journald-rate-limit.c b/src/journal/journald-rate-limit.c
index f464b6e..65fbe40 100644
--- a/src/journal/journald-rate-limit.c
+++ b/src/journal/journald-rate-limit.c
@@ -6,6 +6,7 @@
 #include "hashmap.h"
 #include "journald-rate-limit.h"
 #include "list.h"
+#include "logarithm.h"
 #include "random-util.h"
 #include "string-util.h"
 #include "time-util.h"
@@ -162,7 +163,7 @@
         /* Modulates the burst rate a bit with the amount of available
          * disk space */
 
-        k = u64log2(available);
+        k = log2u64(available);
 
         /* 1MB */
         if (k <= 20)
@@ -185,10 +186,10 @@
 }
 
 int journal_ratelimit_test(JournalRateLimit *r, const char *id, usec_t rl_interval, unsigned rl_burst, int priority, uint64_t available) {
-        uint64_t h;
-        JournalRateLimitGroup *g;
+        JournalRateLimitGroup *g, *found = NULL;
         JournalRateLimitPool *p;
         unsigned burst;
+        uint64_t h;
         usec_t ts;
 
         assert(id);
@@ -208,23 +209,25 @@
         h = siphash24_string(id, r->hash_key);
         g = r->buckets[h % BUCKETS_MAX];
 
-        LIST_FOREACH(bucket, g, g)
-                if (streq(g->id, id))
+        LIST_FOREACH(bucket, i, g)
+                if (streq(i->id, id)) {
+                        found = i;
                         break;
+                }
 
-        if (!g) {
-                g = journal_ratelimit_group_new(r, id, rl_interval, ts);
-                if (!g)
+        if (!found) {
+                found = journal_ratelimit_group_new(r, id, rl_interval, ts);
+                if (!found)
                         return -ENOMEM;
         } else
-                g->interval = rl_interval;
+                found->interval = rl_interval;
 
         if (rl_interval == 0 || rl_burst == 0)
                 return 1;
 
         burst = burst_modulate(rl_burst, available);
 
-        p = &g->pools[priority_map[priority]];
+        p = &found->pools[priority_map[priority]];
 
         if (p->begin <= 0) {
                 p->suppressed = 0;
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index 86302e3..2a75bdf 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -27,9 +27,9 @@
 #include "hashmap.h"
 #include "hostname-util.h"
 #include "id128-util.h"
+#include "initrd-util.h"
 #include "io-util.h"
 #include "journal-authenticate.h"
-#include "journal-file.h"
 #include "journal-internal.h"
 #include "journal-vacuum.h"
 #include "journald-audit.h"
@@ -55,7 +55,7 @@
 #include "string-table.h"
 #include "string-util.h"
 #include "syslog-util.h"
-#include "user-record.h"
+#include "uid-alloc-range.h"
 #include "user-util.h"
 
 #define USER_JOURNALS_MAX 1024
@@ -65,6 +65,9 @@
 #define DEFAULT_RATE_LIMIT_BURST 10000
 #define DEFAULT_MAX_FILE_USEC USEC_PER_MONTH
 
+#define DEFAULT_KMSG_OWN_INTERVAL (5 * USEC_PER_SEC)
+#define DEFAULT_KMSG_OWN_BURST 50
+
 #define RECHECK_SPACE_USEC (30*USEC_PER_SEC)
 
 #define NOTIFY_SNDBUF_SIZE (8*1024*1024)
@@ -80,14 +83,15 @@
 
 #define IDLE_TIMEOUT_USEC (30*USEC_PER_SEC)
 
-static int determine_path_usage(
+#define FAILED_TO_WRITE_ENTRY_RATELIMIT ((const RateLimit) { .interval = 1 * USEC_PER_SEC, .burst = 1 })
+
+static int server_determine_path_usage(
                 Server *s,
                 const char *path,
                 uint64_t *ret_used,
                 uint64_t *ret_free) {
 
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         struct statvfs ss;
 
         assert(s);
@@ -97,11 +101,12 @@
 
         d = opendir(path);
         if (!d)
-                return log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR,
-                                      errno, "Failed to open %s: %m", path);
+                return log_ratelimit_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR,
+                                                errno, JOURNAL_LOG_RATELIMIT, "Failed to open %s: %m", path);
 
         if (fstatvfs(dirfd(d), &ss) < 0)
-                return log_error_errno(errno, "Failed to fstatvfs(%s): %m", path);
+                return log_ratelimit_error_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                                "Failed to fstatvfs(%s): %m", path);
 
         *ret_free = ss.f_bsize * ss.f_bavail;
         *ret_used = 0;
@@ -147,7 +152,7 @@
         if (space->timestamp != 0 && usec_add(space->timestamp, RECHECK_SPACE_USEC) > ts)
                 return 0;
 
-        r = determine_path_usage(s, storage->path, &vfs_used, &vfs_avail);
+        r = server_determine_path_usage(s, storage->path, &vfs_used, &vfs_avail);
         if (r < 0)
                 return r;
 
@@ -156,7 +161,7 @@
 
         avail = LESS_BY(vfs_avail, metrics->keep_free);
 
-        space->limit = MIN(MAX(vfs_used + avail, metrics->min_use), metrics->max_use);
+        space->limit = CLAMP(vfs_used + avail, metrics->min_use, metrics->max_use);
         space->available = LESS_BY(space->limit, vfs_used);
         space->timestamp = ts;
         return 1;
@@ -180,7 +185,7 @@
         return s->system_journal ? &s->system_storage : &s->runtime_storage;
 }
 
-static int determine_space(Server *s, uint64_t *available, uint64_t *limit) {
+static int server_determine_space(Server *s, uint64_t *available, uint64_t *limit) {
         JournalStorage *js;
         int r;
 
@@ -199,10 +204,6 @@
 }
 
 void server_space_usage_message(Server *s, JournalStorage *storage) {
-        char fb1[FORMAT_BYTES_MAX], fb2[FORMAT_BYTES_MAX], fb3[FORMAT_BYTES_MAX],
-             fb4[FORMAT_BYTES_MAX], fb5[FORMAT_BYTES_MAX], fb6[FORMAT_BYTES_MAX];
-        JournalMetrics *metrics;
-
         assert(s);
 
         if (!storage)
@@ -211,32 +212,29 @@
         if (cache_space_refresh(s, storage) < 0)
                 return;
 
-        metrics = &storage->metrics;
-        format_bytes(fb1, sizeof(fb1), storage->space.vfs_used);
-        format_bytes(fb2, sizeof(fb2), metrics->max_use);
-        format_bytes(fb3, sizeof(fb3), metrics->keep_free);
-        format_bytes(fb4, sizeof(fb4), storage->space.vfs_available);
-        format_bytes(fb5, sizeof(fb5), storage->space.limit);
-        format_bytes(fb6, sizeof(fb6), storage->space.available);
+        const JournalMetrics *metrics = &storage->metrics;
 
         server_driver_message(s, 0,
                               "MESSAGE_ID=" SD_MESSAGE_JOURNAL_USAGE_STR,
                               LOG_MESSAGE("%s (%s) is %s, max %s, %s free.",
-                                          storage->name, storage->path, fb1, fb5, fb6),
+                                          storage->name, storage->path,
+                                          FORMAT_BYTES(storage->space.vfs_used),
+                                          FORMAT_BYTES(storage->space.limit),
+                                          FORMAT_BYTES(storage->space.available)),
                               "JOURNAL_NAME=%s", storage->name,
                               "JOURNAL_PATH=%s", storage->path,
                               "CURRENT_USE=%"PRIu64, storage->space.vfs_used,
-                              "CURRENT_USE_PRETTY=%s", fb1,
+                              "CURRENT_USE_PRETTY=%s", FORMAT_BYTES(storage->space.vfs_used),
                               "MAX_USE=%"PRIu64, metrics->max_use,
-                              "MAX_USE_PRETTY=%s", fb2,
+                              "MAX_USE_PRETTY=%s", FORMAT_BYTES(metrics->max_use),
                               "DISK_KEEP_FREE=%"PRIu64, metrics->keep_free,
-                              "DISK_KEEP_FREE_PRETTY=%s", fb3,
+                              "DISK_KEEP_FREE_PRETTY=%s", FORMAT_BYTES(metrics->keep_free),
                               "DISK_AVAILABLE=%"PRIu64, storage->space.vfs_available,
-                              "DISK_AVAILABLE_PRETTY=%s", fb4,
+                              "DISK_AVAILABLE_PRETTY=%s", FORMAT_BYTES(storage->space.vfs_available),
                               "LIMIT=%"PRIu64, storage->space.limit,
-                              "LIMIT_PRETTY=%s", fb5,
+                              "LIMIT_PRETTY=%s", FORMAT_BYTES(storage->space.limit),
                               "AVAILABLE=%"PRIu64, storage->space.available,
-                              "AVAILABLE_PRETTY=%s", fb6,
+                              "AVAILABLE_PRETTY=%s", FORMAT_BYTES(storage->space.available),
                               NULL);
 }
 
@@ -247,7 +245,7 @@
         return uid_is_system(uid) || uid_is_dynamic(uid) || uid == UID_NOBODY;
 }
 
-static void server_add_acls(JournalFile *f, uid_t uid) {
+static void server_add_acls(ManagedJournalFile *f, uid_t uid) {
         assert(f);
 
 #if HAVE_ACL
@@ -256,39 +254,64 @@
         if (uid_for_system_journal(uid))
                 return;
 
-        r = fd_add_uid_acl_permission(f->fd, uid, ACL_READ);
+        r = fd_add_uid_acl_permission(f->file->fd, uid, ACL_READ);
         if (r < 0)
-                log_warning_errno(r, "Failed to set ACL on %s, ignoring: %m", f->path);
+                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                            "Failed to set ACL on %s, ignoring: %m", f->file->path);
 #endif
 }
 
-static int open_journal(
+static int server_open_journal(
                 Server *s,
                 bool reliably,
                 const char *fname,
-                int flags,
+                int open_flags,
                 bool seal,
                 JournalMetrics *metrics,
-                JournalFile **ret) {
+                ManagedJournalFile **ret) {
 
-        _cleanup_(journal_file_closep) JournalFile *f = NULL;
+        _cleanup_(managed_journal_file_closep) ManagedJournalFile *f = NULL;
+        JournalFileFlags file_flags;
         int r;
 
         assert(s);
         assert(fname);
         assert(ret);
 
-        if (reliably)
-                r = journal_file_open_reliably(fname, flags, 0640, s->compress.enabled, s->compress.threshold_bytes,
-                                               seal, metrics, s->mmap, s->deferred_closes, NULL, &f);
-        else
-                r = journal_file_open(-1, fname, flags, 0640, s->compress.enabled, s->compress.threshold_bytes, seal,
-                                      metrics, s->mmap, s->deferred_closes, NULL, &f);
+        file_flags =
+                (s->compress.enabled ? JOURNAL_COMPRESS : 0) |
+                (seal ? JOURNAL_SEAL : 0) |
+                JOURNAL_STRICT_ORDER;
 
+        if (reliably)
+                r = managed_journal_file_open_reliably(
+                                fname,
+                                open_flags,
+                                file_flags,
+                                0640,
+                                s->compress.threshold_bytes,
+                                metrics,
+                                s->mmap,
+                                s->deferred_closes,
+                                /* template= */ NULL,
+                                &f);
+        else
+                r = managed_journal_file_open(
+                                /* fd= */ -1,
+                                fname,
+                                open_flags,
+                                file_flags,
+                                0640,
+                                s->compress.threshold_bytes,
+                                metrics,
+                                s->mmap,
+                                s->deferred_closes,
+                                /* template= */ NULL,
+                                &f);
         if (r < 0)
                 return r;
 
-        r = journal_file_enable_post_change_timer(f, s->event, POST_CHANGE_TIMER_INTERVAL_USEC);
+        r = journal_file_enable_post_change_timer(f->file, s->event, POST_CHANGE_TIMER_INTERVAL_USEC);
         if (r < 0)
                 return r;
 
@@ -296,7 +319,7 @@
         return r;
 }
 
-static bool flushed_flag_is_set(Server *s) {
+static bool server_flushed_flag_is_set(Server *s) {
         const char *fn;
 
         assert(s);
@@ -310,13 +333,17 @@
         return access(fn, F_OK) >= 0;
 }
 
-static int system_journal_open(Server *s, bool flush_requested, bool relinquish_requested) {
+static int server_system_journal_open(
+                Server *s,
+                bool flush_requested,
+                bool relinquish_requested) {
+
         const char *fn;
         int r = 0;
 
         if (!s->system_journal &&
             IN_SET(s->storage, STORAGE_PERSISTENT, STORAGE_AUTO) &&
-            (flush_requested || flushed_flag_is_set(s)) &&
+            (flush_requested || server_flushed_flag_is_set(s)) &&
             !relinquish_requested) {
 
                 /* If in auto mode: first try to create the machine path, but not the prefix.
@@ -329,14 +356,22 @@
                 (void) mkdir(s->system_storage.path, 0755);
 
                 fn = strjoina(s->system_storage.path, "/system.journal");
-                r = open_journal(s, true, fn, O_RDWR|O_CREAT, s->seal, &s->system_storage.metrics, &s->system_journal);
+                r = server_open_journal(
+                                s,
+                                /* reliably= */ true,
+                                fn,
+                                O_RDWR|O_CREAT,
+                                s->seal,
+                                &s->system_storage.metrics,
+                                &s->system_journal);
                 if (r >= 0) {
                         server_add_acls(s->system_journal, 0);
                         (void) cache_space_refresh(s, &s->system_storage);
                         patch_min_use(&s->system_storage);
                 } else {
                         if (!IN_SET(r, -ENOENT, -EROFS))
-                                log_warning_errno(r, "Failed to open system journal: %m");
+                                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                            "Failed to open system journal: %m");
 
                         r = 0;
                 }
@@ -358,14 +393,21 @@
 
                 if (s->system_journal && !relinquish_requested) {
 
-                        /* Try to open the runtime journal, but only
-                         * if it already exists, so that we can flush
-                         * it into the system journal */
+                        /* Try to open the runtime journal, but only if it already exists, so that we can
+                         * flush it into the system journal */
 
-                        r = open_journal(s, false, fn, O_RDWR, false, &s->runtime_storage.metrics, &s->runtime_journal);
+                        r = server_open_journal(
+                                        s,
+                                        /* reliably= */ false,
+                                        fn,
+                                        O_RDWR,
+                                        /* seal= */ false,
+                                        &s->runtime_storage.metrics,
+                                        &s->runtime_journal);
                         if (r < 0) {
                                 if (r != -ENOENT)
-                                        log_warning_errno(r, "Failed to open runtime journal: %m");
+                                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                                    "Failed to open runtime journal: %m");
 
                                 r = 0;
                         }
@@ -377,9 +419,17 @@
                         (void) mkdir_parents(s->runtime_storage.path, 0755);
                         (void) mkdir(s->runtime_storage.path, 0750);
 
-                        r = open_journal(s, true, fn, O_RDWR|O_CREAT, false, &s->runtime_storage.metrics, &s->runtime_journal);
+                        r = server_open_journal(
+                                        s,
+                                        /* reliably= */ true,
+                                        fn,
+                                        O_RDWR|O_CREAT,
+                                        /* seal= */ false,
+                                        &s->runtime_storage.metrics,
+                                        &s->runtime_journal);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to open runtime journal: %m");
+                                return log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                                   "Failed to open runtime journal: %m");
                 }
 
                 if (s->runtime_journal) {
@@ -392,9 +442,51 @@
         return r;
 }
 
-static JournalFile* find_journal(Server *s, uid_t uid) {
+static int server_find_user_journal(Server *s, uid_t uid, ManagedJournalFile **ret) {
+        _cleanup_(managed_journal_file_closep) ManagedJournalFile *f = NULL;
         _cleanup_free_ char *p = NULL;
-        JournalFile *f;
+        int r;
+
+        assert(!uid_for_system_journal(uid));
+
+        f = ordered_hashmap_get(s->user_journals, UID_TO_PTR(uid));
+        if (f)
+                goto found;
+
+        if (asprintf(&p, "%s/user-" UID_FMT ".journal", s->system_storage.path, uid) < 0)
+                return log_oom();
+
+        /* Too many open? Then let's close one (or more) */
+        while (ordered_hashmap_size(s->user_journals) >= USER_JOURNALS_MAX) {
+                ManagedJournalFile *first;
+
+                assert_se(first = ordered_hashmap_steal_first(s->user_journals));
+                (void) managed_journal_file_close(first);
+        }
+
+        r = server_open_journal(
+                        s,
+                        /* reliably= */ true,
+                        p,
+                        O_RDWR|O_CREAT,
+                        s->seal,
+                        &s->system_storage.metrics,
+                        &f);
+        if (r < 0)
+                return r;
+
+        r = ordered_hashmap_put(s->user_journals, UID_TO_PTR(uid), f);
+        if (r < 0)
+                return r;
+
+        server_add_acls(f, uid);
+
+found:
+        *ret = TAKE_PTR(f);
+        return 0;
+}
+
+static ManagedJournalFile* server_find_journal(Server *s, uid_t uid) {
         int r;
 
         assert(s);
@@ -406,7 +498,7 @@
          * recover from failed rotates (or anything else that's left the journals as NULL).
          *
          * Fixes https://github.com/systemd/systemd/issues/3968 */
-        (void) system_journal_open(s, false, false);
+        (void) server_system_journal_open(s, /* flush_requested= */ false, /* relinquish_requested= */ false);
 
         /* We split up user logs only on /var, not on /run. If the runtime file is open, we write to it
          * exclusively, in order to guarantee proper order as soon as we flush /run to /var and close the
@@ -422,57 +514,47 @@
         if (!IN_SET(s->storage, STORAGE_AUTO, STORAGE_PERSISTENT))
                 return NULL;
 
-        if (uid_for_system_journal(uid))
-                return s->system_journal;
+        if (!uid_for_system_journal(uid)) {
+                ManagedJournalFile *f = NULL;
 
-        f = ordered_hashmap_get(s->user_journals, UID_TO_PTR(uid));
-        if (f)
-                return f;
+                r = server_find_user_journal(s, uid, &f);
+                if (r >= 0)
+                        return ASSERT_PTR(f);
 
-        if (asprintf(&p, "%s/user-" UID_FMT ".journal", s->system_storage.path, uid) < 0) {
-                log_oom();
-                return s->system_journal;
+                log_warning_errno(r, "Failed to open user journal file, falling back to system journal: %m");
         }
 
-        /* Too many open? Then let's close one (or more) */
-        while (ordered_hashmap_size(s->user_journals) >= USER_JOURNALS_MAX) {
-                assert_se(f = ordered_hashmap_steal_first(s->user_journals));
-                (void) journal_file_close(f);
-        }
-
-        r = open_journal(s, true, p, O_RDWR|O_CREAT, s->seal, &s->system_storage.metrics, &f);
-        if (r < 0)
-                return s->system_journal;
-
-        r = ordered_hashmap_put(s->user_journals, UID_TO_PTR(uid), f);
-        if (r < 0) {
-                (void) journal_file_close(f);
-                return s->system_journal;
-        }
-
-        server_add_acls(f, uid);
-        return f;
+        return s->system_journal;
 }
 
-static int do_rotate(
+static int server_do_rotate(
                 Server *s,
-                JournalFile **f,
+                ManagedJournalFile **f,
                 const char* name,
                 bool seal,
                 uint32_t uid) {
 
+        JournalFileFlags file_flags;
         int r;
+
         assert(s);
 
         if (!*f)
                 return -EINVAL;
 
-        r = journal_file_rotate(f, s->compress.enabled, s->compress.threshold_bytes, seal, s->deferred_closes);
+        file_flags =
+                (s->compress.enabled ? JOURNAL_COMPRESS : 0)|
+                (seal ? JOURNAL_SEAL : 0) |
+                JOURNAL_STRICT_ORDER;
+
+        r = managed_journal_file_rotate(f, s->mmap, file_flags, s->compress.threshold_bytes, s->deferred_closes);
         if (r < 0) {
                 if (*f)
-                        return log_error_errno(r, "Failed to rotate %s: %m", (*f)->path);
+                        return log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                         "Failed to rotate %s: %m", (*f)->file->path);
                 else
-                        return log_error_errno(r, "Failed to create new %s journal: %m", name);
+                        return log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                         "Failed to create new %s journal: %m", name);
         }
 
         server_add_acls(*f, uid);
@@ -480,15 +562,15 @@
 }
 
 static void server_process_deferred_closes(Server *s) {
-        JournalFile *f;
+        ManagedJournalFile *f;
 
         /* Perform any deferred closes which aren't still offlining. */
         SET_FOREACH(f, s->deferred_closes) {
-                if (journal_file_is_offlining(f))
+                if (managed_journal_file_is_offlining(f))
                         continue;
 
                 (void) set_remove(s->deferred_closes, f);
-                (void) journal_file_close(f);
+                (void) managed_journal_file_close(f);
         }
 }
 
@@ -504,14 +586,14 @@
 
         /* And now, let's close some more until we reach the limit again. */
         while (set_size(s->deferred_closes) >= DEFERRED_CLOSES_MAX) {
-                JournalFile *f;
+                ManagedJournalFile *f;
 
                 assert_se(f = set_steal_first(s->deferred_closes));
-                journal_file_close(f);
+                managed_journal_file_close(f);
         }
 }
 
-static int vacuum_offline_user_journals(Server *s) {
+static int server_archive_offline_user_journals(Server *s) {
         _cleanup_closedir_ DIR *d = NULL;
         int r;
 
@@ -522,40 +604,32 @@
                 if (errno == ENOENT)
                         return 0;
 
-                return log_error_errno(errno, "Failed to open %s: %m", s->system_storage.path);
+                return log_ratelimit_error_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                                 "Failed to open %s: %m", s->system_storage.path);
         }
 
         for (;;) {
-                _cleanup_free_ char *u = NULL, *full = NULL;
-                _cleanup_close_ int fd = -1;
-                const char *a, *b;
+                _cleanup_free_ char *full = NULL;
+                _cleanup_close_ int fd = -EBADF;
                 struct dirent *de;
-                JournalFile *f;
+                ManagedJournalFile *f;
                 uid_t uid;
 
                 errno = 0;
                 de = readdir_no_dot(d);
                 if (!de) {
                         if (errno != 0)
-                                log_warning_errno(errno, "Failed to enumerate %s, ignoring: %m", s->system_storage.path);
-
+                                log_ratelimit_warning_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                                            "Failed to enumerate %s, ignoring: %m",
+                                                            s->system_storage.path);
                         break;
                 }
 
-                a = startswith(de->d_name, "user-");
-                if (!a)
-                        continue;
-                b = endswith(de->d_name, ".journal");
-                if (!b)
-                        continue;
-
-                u = strndup(a, b-a);
-                if (!u)
-                        return log_oom();
-
-                r = parse_uid(u, &uid);
+                r = journal_file_parse_uid_from_filename(de->d_name, &uid);
                 if (r < 0) {
-                        log_debug_errno(r, "Failed to parse UID from file name '%s', ignoring: %m", de->d_name);
+                        /* Don't warn if the file is not an online or offline user journal. */
+                        if (r != -EREMOTE)
+                                log_warning_errno(r, "Failed to parse UID from file name '%s', ignoring: %m", de->d_name);
                         continue;
                 }
 
@@ -569,8 +643,9 @@
 
                 fd = openat(dirfd(d), de->d_name, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW|O_NONBLOCK);
                 if (fd < 0) {
-                        log_full_errno(IN_SET(errno, ELOOP, ENOENT) ? LOG_DEBUG : LOG_WARNING, errno,
-                                       "Failed to open journal file '%s' for rotation: %m", full);
+                        log_ratelimit_full_errno(IN_SET(errno, ELOOP, ENOENT) ? LOG_DEBUG : LOG_WARNING,
+                                                 errno, JOURNAL_LOG_RATELIMIT,
+                                                 "Failed to open journal file '%s' for rotation: %m", full);
                         continue;
                 }
 
@@ -578,56 +653,61 @@
                 server_vacuum_deferred_closes(s);
 
                 /* Open the file briefly, so that we can archive it */
-                r = journal_file_open(fd,
-                                      full,
-                                      O_RDWR,
-                                      0640,
-                                      s->compress.enabled,
-                                      s->compress.threshold_bytes,
-                                      s->seal,
-                                      &s->system_storage.metrics,
-                                      s->mmap,
-                                      s->deferred_closes,
-                                      NULL,
-                                      &f);
+                r = managed_journal_file_open(
+                                fd,
+                                full,
+                                O_RDWR,
+                                (s->compress.enabled ? JOURNAL_COMPRESS : 0) |
+                                (s->seal ? JOURNAL_SEAL : 0), /* strict order does not matter here */
+                                0640,
+                                s->compress.threshold_bytes,
+                                &s->system_storage.metrics,
+                                s->mmap,
+                                s->deferred_closes,
+                                /* template= */ NULL,
+                                &f);
                 if (r < 0) {
-                        log_warning_errno(r, "Failed to read journal file %s for rotation, trying to move it out of the way: %m", full);
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to read journal file %s for rotation, trying to move it out of the way: %m",
+                                                    full);
 
                         r = journal_file_dispose(dirfd(d), de->d_name);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to move %s out of the way, ignoring: %m", full);
+                                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                            "Failed to move %s out of the way, ignoring: %m",
+                                                            full);
                         else
                                 log_debug("Successfully moved %s out of the way.", full);
 
                         continue;
                 }
 
-                TAKE_FD(fd); /* Donated to journal_file_open() */
+                TAKE_FD(fd); /* Donated to managed_journal_file_open() */
 
-                r = journal_file_archive(f);
+                r = journal_file_archive(f->file, NULL);
                 if (r < 0)
                         log_debug_errno(r, "Failed to archive journal file '%s', ignoring: %m", full);
 
-                f = journal_initiate_close(f, s->deferred_closes);
+                managed_journal_file_initiate_close(TAKE_PTR(f), s->deferred_closes);
         }
 
         return 0;
 }
 
 void server_rotate(Server *s) {
-        JournalFile *f;
+        ManagedJournalFile *f;
         void *k;
         int r;
 
         log_debug("Rotating...");
 
         /* First, rotate the system journal (either in its runtime flavour or in its runtime flavour) */
-        (void) do_rotate(s, &s->runtime_journal, "runtime", false, 0);
-        (void) do_rotate(s, &s->system_journal, "system", s->seal, 0);
+        (void) server_do_rotate(s, &s->runtime_journal, "runtime", /* seal= */ false, /* uid= */ 0);
+        (void) server_do_rotate(s, &s->system_journal, "system", s->seal, /* uid= */ 0);
 
         /* Then, rotate all user journals we have open (keeping them open) */
         ORDERED_HASHMAP_FOREACH_KEY(f, k, s->user_journals) {
-                r = do_rotate(s, &f, "user", s->seal, PTR_TO_UID(k));
+                r = server_do_rotate(s, &f, "user", s->seal, PTR_TO_UID(k));
                 if (r >= 0)
                         ordered_hashmap_replace(s->user_journals, k, f);
                 else if (!f)
@@ -638,37 +718,40 @@
         /* Finally, also rotate all user journals we currently do not have open. (But do so only if we
          * actually have access to /var, i.e. are not in the log-to-runtime-journal mode). */
         if (!s->runtime_journal)
-                (void) vacuum_offline_user_journals(s);
+                (void) server_archive_offline_user_journals(s);
 
         server_process_deferred_closes(s);
 }
 
 void server_sync(Server *s) {
-        JournalFile *f;
+        ManagedJournalFile *f;
         int r;
 
         if (s->system_journal) {
-                r = journal_file_set_offline(s->system_journal, false);
+                r = managed_journal_file_set_offline(s->system_journal, false);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to sync system journal, ignoring: %m");
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to sync system journal, ignoring: %m");
         }
 
         ORDERED_HASHMAP_FOREACH(f, s->user_journals) {
-                r = journal_file_set_offline(f, false);
+                r = managed_journal_file_set_offline(f, false);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to sync user journal, ignoring: %m");
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to sync user journal, ignoring: %m");
         }
 
         if (s->sync_event_source) {
                 r = sd_event_source_set_enabled(s->sync_event_source, SD_EVENT_OFF);
                 if (r < 0)
-                        log_error_errno(r, "Failed to disable sync timer source: %m");
+                        log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                  "Failed to disable sync timer source: %m");
         }
 
         s->sync_scheduled = false;
 }
 
-static void do_vacuum(Server *s, JournalStorage *storage, bool verbose) {
+static void server_do_vacuum(Server *s, JournalStorage *storage, bool verbose) {
 
         int r;
 
@@ -684,12 +767,13 @@
                                      storage->metrics.n_max_files, s->max_retention_usec,
                                      &s->oldest_file_usec, verbose);
         if (r < 0 && r != -ENOENT)
-                log_warning_errno(r, "Failed to vacuum %s, ignoring: %m", storage->path);
+                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                            "Failed to vacuum %s, ignoring: %m", storage->path);
 
         cache_space_invalidate(&storage->space);
 }
 
-int server_vacuum(Server *s, bool verbose) {
+void server_vacuum(Server *s, bool verbose) {
         assert(s);
 
         log_debug("Vacuuming...");
@@ -697,11 +781,9 @@
         s->oldest_file_usec = 0;
 
         if (s->system_journal)
-                do_vacuum(s, &s->system_storage, verbose);
+                server_do_vacuum(s, &s->system_storage, verbose);
         if (s->runtime_journal)
-                do_vacuum(s, &s->runtime_storage, verbose);
-
-        return 0;
+                server_do_vacuum(s, &s->runtime_storage, verbose);
 }
 
 static void server_cache_machine_id(Server *s) {
@@ -748,7 +830,7 @@
 }
 
 static bool shall_try_append_again(JournalFile *f, int r) {
-        switch(r) {
+        switch (r) {
 
         case -E2BIG:           /* Hit configured limit          */
         case -EFBIG:           /* Hit fs limit                  */
@@ -757,49 +839,72 @@
                 log_debug("%s: Allocation limit reached, rotating.", f->path);
                 return true;
 
+        case -EROFS: /* Read-only file system */
+                /* When appending an entry fails if shall_try_append_again returns true, the journal is
+                 * rotated. If the FS is read-only, rotation will fail and s->system_journal will be set to
+                 * NULL. After that, when find_journal will try to open the journal since s->system_journal
+                 * will be NULL, it will open the runtime journal. */
+                log_ratelimit_warning(JOURNAL_LOG_RATELIMIT, "%s: Read-only file system, rotating.", f->path);
+                return true;
+
         case -EIO:             /* I/O error of some kind (mmap) */
-                log_warning("%s: IO error, rotating.", f->path);
+                log_ratelimit_warning(JOURNAL_LOG_RATELIMIT, "%s: IO error, rotating.", f->path);
                 return true;
 
         case -EHOSTDOWN:       /* Other machine                 */
-                log_info("%s: Journal file from other machine, rotating.", f->path);
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "%s: Journal file from other machine, rotating.", f->path);
                 return true;
 
         case -EBUSY:           /* Unclean shutdown              */
-                log_info("%s: Unclean shutdown, rotating.", f->path);
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "%s: Unclean shutdown, rotating.", f->path);
                 return true;
 
         case -EPROTONOSUPPORT: /* Unsupported feature           */
-                log_info("%s: Unsupported feature, rotating.", f->path);
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "%s: Unsupported feature, rotating.", f->path);
                 return true;
 
         case -EBADMSG:         /* Corrupted                     */
         case -ENODATA:         /* Truncated                     */
         case -ESHUTDOWN:       /* Already archived              */
-                log_warning("%s: Journal file corrupted, rotating.", f->path);
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "%s: Journal file corrupted, rotating.", f->path);
                 return true;
 
         case -EIDRM:           /* Journal file has been deleted */
-                log_warning("%s: Journal file has been deleted, rotating.", f->path);
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "%s: Journal file has been deleted, rotating.", f->path);
                 return true;
 
         case -ETXTBSY:         /* Journal file is from the future */
-                log_warning("%s: Journal file is from the future, rotating.", f->path);
+                log_ratelimit_warning(JOURNAL_LOG_RATELIMIT, "%s: Journal file is from the future, rotating.", f->path);
+                return true;
+
+        case -EREMCHG:         /* Wallclock time (CLOCK_REALTIME) jumped backwards relative to last journal entry */
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "%s: Realtime clock jumped backwards relative to last journal entry, rotating.", f->path);
+                return true;
+
+        case -EREMOTE:         /* Boot ID different from the one of the last entry */
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "%s: Boot ID changed since last record, rotating.", f->path);
+                return true;
+
+        case -ENOTNAM:         /* Monotonic time (CLOCK_MONOTONIC) jumped backwards relative to last journal entry */
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "%s: Monotonic clock jumped backwards relative to last journal entry, rotating.", f->path);
                 return true;
 
         case -EAFNOSUPPORT:
-                log_warning("%s: underlying file system does not support memory mapping or another required file system feature.", f->path);
+                log_ratelimit_warning(JOURNAL_LOG_RATELIMIT,
+                                      "%s: underlying file system does not support memory mapping or another required file system feature.",
+                                      f->path);
                 return false;
 
         default:
+                log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, "%s: Unexpected error while writing to journal file: %m", f->path);
                 return false;
         }
 }
 
-static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, size_t n, int priority) {
+static void server_write_to_journal(Server *s, uid_t uid, struct iovec *iovec, size_t n, int priority) {
         bool vacuumed = false, rotate = false;
         struct dual_timestamp ts;
-        JournalFile *f;
+        ManagedJournalFile *f;
         int r;
 
         assert(s);
@@ -818,16 +923,18 @@
                  * to ensure that the entries in the journal files are strictly ordered by time, in order to ensure
                  * bisection works correctly. */
 
-                log_debug("Time jumped backwards, rotating.");
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "Time jumped backwards, rotating.");
                 rotate = true;
         } else {
 
-                f = find_journal(s, uid);
+                f = server_find_journal(s, uid);
                 if (!f)
                         return;
 
-                if (journal_file_rotate_suggested(f, s->max_file_usec)) {
-                        log_debug("%s: Journal header limits reached or header out-of-date, rotating.", f->path);
+                if (journal_file_rotate_suggested(f->file, s->max_file_usec, LOG_INFO)) {
+                        log_ratelimit_info(JOURNAL_LOG_RATELIMIT,
+                                           "%s: Journal header limits reached or header out-of-date, rotating.",
+                                           f->file->path);
                         rotate = true;
                 }
         }
@@ -837,35 +944,42 @@
                 server_vacuum(s, false);
                 vacuumed = true;
 
-                f = find_journal(s, uid);
+                f = server_find_journal(s, uid);
                 if (!f)
                         return;
         }
 
         s->last_realtime_clock = ts.realtime;
 
-        r = journal_file_append_entry(f, &ts, NULL, iovec, n, &s->seqnum, NULL, NULL);
+        r = journal_file_append_entry(f->file, &ts, NULL, iovec, n, &s->seqnum, NULL, NULL);
         if (r >= 0) {
                 server_schedule_sync(s, priority);
                 return;
         }
 
-        if (vacuumed || !shall_try_append_again(f, r)) {
-                log_error_errno(r, "Failed to write entry (%zu items, %zu bytes), ignoring: %m", n, IOVEC_TOTAL_SIZE(iovec, n));
+        log_debug_errno(r, "Failed to write entry to %s (%zu items, %zu bytes): %m", f->file->path, n, IOVEC_TOTAL_SIZE(iovec, n));
+
+        if (!shall_try_append_again(f->file, r))
+                return;
+        if (vacuumed) {
+                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                            "Suppressing rotation, as we already rotated immediately before write attempt. Giving up.");
                 return;
         }
 
         server_rotate(s);
         server_vacuum(s, false);
 
-        f = find_journal(s, uid);
+        f = server_find_journal(s, uid);
         if (!f)
                 return;
 
-        log_debug("Retrying write.");
-        r = journal_file_append_entry(f, &ts, NULL, iovec, n, &s->seqnum, NULL, NULL);
+        log_debug_errno(r, "Retrying write.");
+        r = journal_file_append_entry(f->file, &ts, NULL, iovec, n, &s->seqnum, NULL, NULL);
         if (r < 0)
-                log_error_errno(r, "Failed to write entry (%zu items, %zu bytes) despite vacuuming, ignoring: %m", n, IOVEC_TOTAL_SIZE(iovec, n));
+                log_ratelimit_error_errno(r, FAILED_TO_WRITE_ENTRY_RATELIMIT,
+                                          "Failed to write entry to %s (%zu items, %zu bytes) despite vacuuming, ignoring: %m",
+                                          f->file->path, n, IOVEC_TOTAL_SIZE(iovec, n));
         else
                 server_schedule_sync(s, priority);
 }
@@ -901,7 +1015,7 @@
                 iovec[n++] = IOVEC_MAKE_STRING(k);                      \
         }                                                               \
 
-static void dispatch_message_real(
+static void server_dispatch_message_real(
                 Server *s,
                 struct iovec *iovec, size_t n, size_t m,
                 const ClientContext *c,
@@ -1008,6 +1122,7 @@
         if (!isempty(s->namespace_field))
                 iovec[n++] = IOVEC_MAKE_STRING(s->namespace_field);
 
+        iovec[n++] = in_initrd() ? IOVEC_MAKE_STRING("_RUNTIME_SCOPE=initrd") : IOVEC_MAKE_STRING("_RUNTIME_SCOPE=system");
         assert(n <= m);
 
         if (s->split_mode == SPLIT_UID && c && uid_is_valid(c->uid))
@@ -1023,7 +1138,7 @@
         else
                 journal_uid = 0;
 
-        write_to_journal(s, journal_uid, iovec, n, priority);
+        server_write_to_journal(s, journal_uid, iovec, n, priority);
 }
 
 void server_driver_message(Server *s, pid_t object_pid, const char *message_id, const char *format, ...) {
@@ -1057,7 +1172,7 @@
         va_end(ap);
 
         if (r >= 0)
-                dispatch_message_real(s, iovec, n, m, s->my_context, NULL, LOG_INFO, object_pid);
+                server_dispatch_message_real(s, iovec, n, m, s->my_context, /* tv= */ NULL, LOG_INFO, object_pid);
 
         while (k < n)
                 free(iovec[k++].iov_base);
@@ -1066,12 +1181,13 @@
                 /* We failed to format the message. Emit a warning instead. */
                 char buf[LINE_MAX];
 
-                xsprintf(buf, "MESSAGE=Entry printing failed: %s", strerror_safe(r));
+                errno = -r;
+                xsprintf(buf, "MESSAGE=Entry printing failed: %m");
 
                 n = 3;
                 iovec[n++] = IOVEC_MAKE_STRING("PRIORITY=4");
                 iovec[n++] = IOVEC_MAKE_STRING(buf);
-                dispatch_message_real(s, iovec, n, m, s->my_context, NULL, LOG_INFO, object_pid);
+                server_dispatch_message_real(s, iovec, n, m, s->my_context, /* tv= */ NULL, LOG_INFO, object_pid);
         }
 }
 
@@ -1101,7 +1217,7 @@
                 return;
 
         if (c && c->unit) {
-                (void) determine_space(s, &available, NULL);
+                (void) server_determine_space(s, &available, /* limit= */ NULL);
 
                 rl = journal_ratelimit_test(s->ratelimit, c->unit, c->log_ratelimit_interval, c->log_ratelimit_burst, priority & LOG_PRIMASK, available);
                 if (rl == 0)
@@ -1116,11 +1232,10 @@
                                               NULL);
         }
 
-        dispatch_message_real(s, iovec, n, m, c, tv, priority, object_pid);
+        server_dispatch_message_real(s, iovec, n, m, c, tv, priority, object_pid);
 }
 
 int server_flush_to_var(Server *s, bool require_flag_file) {
-        char ts[FORMAT_TIMESPAN_MAX];
         sd_journal *j = NULL;
         const char *fn;
         unsigned n = 0;
@@ -1138,10 +1253,10 @@
         if (!s->runtime_journal) /* Nothing to flush? */
                 return 0;
 
-        if (require_flag_file && !flushed_flag_is_set(s))
+        if (require_flag_file && !server_flushed_flag_is_set(s))
                 return 0;
 
-        (void) system_journal_open(s, true, false);
+        (void) server_system_journal_open(s, /* flush_requested=*/ true, /* relinquish_requested= */ false);
 
         if (!s->system_journal)
                 return 0;
@@ -1152,7 +1267,8 @@
 
         r = sd_journal_open(&j, SD_JOURNAL_RUNTIME_ONLY);
         if (r < 0)
-                return log_error_errno(r, "Failed to read runtime journal: %m");
+                return log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                 "Failed to read runtime journal: %m");
 
         sd_journal_set_data_threshold(j, 0);
 
@@ -1167,32 +1283,35 @@
 
                 r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
                 if (r < 0) {
-                        log_error_errno(r, "Can't read entry: %m");
+                        log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, "Can't read entry: %m");
                         goto finish;
                 }
 
-                r = journal_file_copy_entry(f, s->system_journal, o, f->current_offset);
+                r = journal_file_copy_entry(f, s->system_journal->file, o, f->current_offset);
                 if (r >= 0)
                         continue;
 
-                if (!shall_try_append_again(s->system_journal, r)) {
-                        log_error_errno(r, "Can't write entry: %m");
+                if (!shall_try_append_again(s->system_journal->file, r)) {
+                        log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, "Can't write entry: %m");
                         goto finish;
                 }
 
+                log_ratelimit_info(JOURNAL_LOG_RATELIMIT, "Rotating system journal.");
+
                 server_rotate(s);
                 server_vacuum(s, false);
 
                 if (!s->system_journal) {
-                        log_notice("Didn't flush runtime journal since rotation of system journal wasn't successful.");
+                        log_ratelimit_notice(JOURNAL_LOG_RATELIMIT,
+                                             "Didn't flush runtime journal since rotation of system journal wasn't successful.");
                         r = -EIO;
                         goto finish;
                 }
 
                 log_debug("Retrying write.");
-                r = journal_file_copy_entry(f, s->system_journal, o, f->current_offset);
+                r = journal_file_copy_entry(f, s->system_journal->file, o, f->current_offset);
                 if (r < 0) {
-                        log_error_errno(r, "Can't write entry: %m");
+                        log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, "Can't write entry: %m");
                         goto finish;
                 }
         }
@@ -1201,9 +1320,9 @@
 
 finish:
         if (s->system_journal)
-                journal_file_post_change(s->system_journal);
+                journal_file_post_change(s->system_journal->file);
 
-        s->runtime_journal = journal_file_close(s->runtime_journal);
+        s->runtime_journal = managed_journal_file_close(s->runtime_journal);
 
         if (r >= 0)
                 (void) rm_rf(s->runtime_storage.path, REMOVE_ROOT);
@@ -1213,14 +1332,15 @@
         server_driver_message(s, 0, NULL,
                               LOG_MESSAGE("Time spent on flushing to %s is %s for %u entries.",
                                           s->system_storage.path,
-                                          format_timespan(ts, sizeof(ts), usec_sub_unsigned(now(CLOCK_MONOTONIC), start), 0),
+                                          FORMAT_TIMESPAN(usec_sub_unsigned(now(CLOCK_MONOTONIC), start), 0),
                                           n),
                               NULL);
 
         fn = strjoina(s->runtime_directory, "/flushed");
         k = touch(fn);
         if (k < 0)
-                log_warning_errno(k, "Failed to touch %s, ignoring: %m", fn);
+                log_ratelimit_warning_errno(k, JOURNAL_LOG_RATELIMIT,
+                                            "Failed to touch %s, ignoring: %m", fn);
 
         server_refresh_idle_timer(s);
         return r;
@@ -1241,15 +1361,16 @@
 
         log_debug("Relinquishing %s...", s->system_storage.path);
 
-        (void) system_journal_open(s, false, true);
+        (void) server_system_journal_open(s, /* flush_requested */ false, /* relinquish_requested=*/ true);
 
-        s->system_journal = journal_file_close(s->system_journal);
-        ordered_hashmap_clear_with_destructor(s->user_journals, journal_file_close);
-        set_clear_with_destructor(s->deferred_closes, journal_file_close);
+        s->system_journal = managed_journal_file_close(s->system_journal);
+        ordered_hashmap_clear_with_destructor(s->user_journals, managed_journal_file_close);
+        set_clear_with_destructor(s->deferred_closes, managed_journal_file_close);
 
         fn = strjoina(s->runtime_directory, "/flushed");
         if (unlink(fn) < 0 && errno != ENOENT)
-                log_warning_errno(errno, "Failed to unlink %s, ignoring: %m", fn);
+                log_ratelimit_warning_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                            "Failed to unlink %s, ignoring: %m", fn);
 
         server_refresh_idle_timer(s);
         return 0;
@@ -1262,7 +1383,7 @@
                 void *userdata) {
 
         size_t label_len = 0, m;
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
         struct ucred *ucred = NULL;
         struct timeval *tv = NULL;
         struct cmsghdr *cmsg;
@@ -1295,7 +1416,6 @@
                 .msg_namelen = sizeof(sa),
         };
 
-        assert(s);
         assert(fd == s->native_fd || fd == s->syslog_fd || fd == s->audit_fd);
 
         if (revents != EPOLLIN)
@@ -1318,14 +1438,16 @@
         iovec = IOVEC_MAKE(s->buffer, MALLOC_ELEMENTSOF(s->buffer) - 1); /* Leave room for trailing NUL we add later */
 
         n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
-        if (IN_SET(n, -EINTR, -EAGAIN))
-                return 0;
-        if (n == -EXFULL) {
-                log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
-                return 0;
+        if (n < 0) {
+                if (ERRNO_IS_TRANSIENT(n))
+                        return 0;
+                if (n == -EXFULL) {
+                        log_ratelimit_warning(JOURNAL_LOG_RATELIMIT,
+                                              "Got message with truncated control data (too many fds sent?), ignoring.");
+                        return 0;
+                }
+                return log_ratelimit_error_errno(n, JOURNAL_LOG_RATELIMIT, "recvmsg() failed: %m");
         }
-        if (n < 0)
-                return log_error_errno(n, "recvmsg() failed: %m");
 
         CMSG_FOREACH(cmsg, &msghdr)
                 if (cmsg->cmsg_level == SOL_SOCKET &&
@@ -1357,7 +1479,8 @@
                 if (n > 0 && n_fds == 0)
                         server_process_syslog_message(s, s->buffer, n, ucred, tv, label, label_len);
                 else if (n_fds > 0)
-                        log_warning("Got file descriptors via syslog socket. Ignoring.");
+                        log_ratelimit_warning(JOURNAL_LOG_RATELIMIT,
+                                              "Got file descriptors via syslog socket. Ignoring.");
 
         } else if (fd == s->native_fd) {
                 if (n > 0 && n_fds == 0)
@@ -1365,7 +1488,8 @@
                 else if (n == 0 && n_fds == 1)
                         server_process_native_file(s, fds[0], ucred, tv, label, label_len);
                 else if (n_fds > 0)
-                        log_warning("Got too many file descriptors via native socket. Ignoring.");
+                        log_ratelimit_warning(JOURNAL_LOG_RATELIMIT,
+                                              "Got too many file descriptors via native socket. Ignoring.");
 
         } else {
                 assert(fd == s->audit_fd);
@@ -1373,7 +1497,8 @@
                 if (n > 0 && n_fds == 0)
                         server_process_audit_message(s, s->buffer, n, ucred, &sa, msghdr.msg_namelen);
                 else if (n_fds > 0)
-                        log_warning("Got file descriptors via audit socket. Ignoring.");
+                        log_ratelimit_warning(JOURNAL_LOG_RATELIMIT,
+                                              "Got file descriptors via audit socket. Ignoring.");
         }
 
         close_many(fds, n_fds);
@@ -1395,16 +1520,14 @@
 }
 
 static int dispatch_sigusr1(sd_event_source *es, const struct signalfd_siginfo *si, void *userdata) {
-        Server *s = userdata;
-
-        assert(s);
+        Server *s = ASSERT_PTR(userdata);
 
         if (s->namespace) {
-                log_error("Received SIGUSR1 signal from PID " PID_FMT ", but flushing runtime journals not supported for namespaced instances.", si->ssi_pid);
+                log_error("Received SIGUSR1 signal from PID %u, but flushing runtime journals not supported for namespaced instances.", si->ssi_pid);
                 return 0;
         }
 
-        log_info("Received SIGUSR1 signal from PID " PID_FMT ", as request to flush runtime journal.", si->ssi_pid);
+        log_info("Received SIGUSR1 signal from PID %u, as request to flush runtime journal.", si->ssi_pid);
         server_full_flush(s);
 
         return 0;
@@ -1428,15 +1551,14 @@
         fn = strjoina(s->runtime_directory, "/rotated");
         r = write_timestamp_file_atomic(fn, now(CLOCK_MONOTONIC));
         if (r < 0)
-                log_warning_errno(r, "Failed to write %s, ignoring: %m", fn);
+                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                            "Failed to write %s, ignoring: %m", fn);
 }
 
 static int dispatch_sigusr2(sd_event_source *es, const struct signalfd_siginfo *si, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
-        assert(s);
-
-        log_info("Received SIGUSR2 signal from PID " PID_FMT ", as request to rotate journal.", si->ssi_pid);
+        log_info("Received SIGUSR2 signal from PID %u, as request to rotate journal, rotating.", si->ssi_pid);
         server_full_rotate(s);
 
         return 0;
@@ -1444,14 +1566,12 @@
 
 static int dispatch_sigterm(sd_event_source *es, const struct signalfd_siginfo *si, void *userdata) {
         _cleanup_(sd_event_source_disable_unrefp) sd_event_source *news = NULL;
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
         int r;
 
-        assert(s);
-
         log_received_signal(LOG_INFO, si);
 
-        (void) sd_event_source_set_enabled(es, false); /* Make sure this handler is called at most once */
+        (void) sd_event_source_set_enabled(es, SD_EVENT_OFF); /* Make sure this handler is called at most once */
 
         /* So on one hand we want to ensure that SIGTERMs are definitely handled in appropriate, bounded
          * time. On the other hand we want that everything pending is first comprehensively processed and
@@ -1535,23 +1655,22 @@
         fn = strjoina(s->runtime_directory, "/synced");
         r = write_timestamp_file_atomic(fn, now(CLOCK_MONOTONIC));
         if (r < 0)
-                log_warning_errno(r, "Failed to write %s, ignoring: %m", fn);
+                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                            "Failed to write %s, ignoring: %m", fn);
 
         return;
 }
 
 static int dispatch_sigrtmin1(sd_event_source *es, const struct signalfd_siginfo *si, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
-        assert(s);
-
-        log_debug("Received SIGRTMIN1 signal from PID " PID_FMT ", as request to sync.", si->ssi_pid );
+        log_debug("Received SIGRTMIN1 signal from PID %u, as request to sync.", si->ssi_pid);
         server_full_sync(s);
 
         return 0;
 }
 
-static int setup_signals(Server *s) {
+static int server_setup_signals(Server *s) {
         int r;
 
         assert(s);
@@ -1600,11 +1719,9 @@
 }
 
 static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
-        Server *s = data;
+        Server *s = ASSERT_PTR(data);
         int r;
 
-        assert(s);
-
         if (proc_cmdline_key_streq(key, "systemd.journald.forward_to_syslog")) {
 
                 r = value ? parse_boolean(value) : true;
@@ -1717,7 +1834,7 @@
                                 dropin_dirname,
                                 "Journal\0",
                                 config_item_perf_lookup, journald_gperf_lookup,
-                                CONFIG_PARSE_WARN, s, NULL);
+                                CONFIG_PARSE_WARN, s, NULL, NULL);
                 if (r < 0)
                         return r;
 
@@ -1733,9 +1850,7 @@
 }
 
 static int server_dispatch_sync(sd_event_source *es, usec_t t, void *userdata) {
-        Server *s = userdata;
-
-        assert(s);
+        Server *s = ASSERT_PTR(userdata);
 
         server_sync(s);
         return 0;
@@ -1785,9 +1900,7 @@
 }
 
 static int dispatch_hostname_change(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
-        Server *s = userdata;
-
-        assert(s);
+        Server *s = ASSERT_PTR(userdata);
 
         server_cache_hostname(s);
         return 0;
@@ -1824,10 +1937,9 @@
 }
 
 static int dispatch_notify_event(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
         int r;
 
-        assert(s);
         assert(s->notify_event_source == es);
         assert(s->notify_fd == fd);
 
@@ -1838,13 +1950,10 @@
          * there's something to send it will be turned on again. */
 
         if (!s->sent_notify_ready) {
-                static const char p[] =
-                        "READY=1\n"
-                        "STATUS=Processing requests...";
-                ssize_t l;
+                static const char p[] = "READY=1\n"
+                                        "STATUS=Processing requests...";
 
-                l = send(s->notify_fd, p, strlen(p), MSG_DONTWAIT);
-                if (l < 0) {
+                if (send(s->notify_fd, p, strlen(p), MSG_DONTWAIT) < 0) {
                         if (errno == EAGAIN)
                                 return 0;
 
@@ -1855,14 +1964,9 @@
                 log_debug("Sent READY=1 notification.");
 
         } else if (s->send_watchdog) {
+                static const char p[] = "WATCHDOG=1";
 
-                static const char p[] =
-                        "WATCHDOG=1";
-
-                ssize_t l;
-
-                l = send(s->notify_fd, p, strlen(p), MSG_DONTWAIT);
-                if (l < 0) {
+                if (send(s->notify_fd, p, strlen(p), MSG_DONTWAIT) < 0) {
                         if (errno == EAGAIN)
                                 return 0;
 
@@ -1889,11 +1993,9 @@
 }
 
 static int dispatch_watchdog(sd_event_source *es, uint64_t usec, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
         int r;
 
-        assert(s);
-
         s->send_watchdog = true;
 
         r = sd_event_source_set_enabled(s->notify_event_source, SD_EVENT_ON);
@@ -1971,11 +2073,10 @@
 }
 
 static int synchronize_second_half(sd_event_source *event_source, void *userdata) {
-        Varlink *link = userdata;
+        Varlink *link = ASSERT_PTR(userdata);
         Server *s;
         int r;
 
-        assert(link);
         assert_se(s = varlink_get_userdata(link));
 
         /* This is the "second half" of the Synchronize() varlink method. This function is called as deferred
@@ -1999,11 +2100,10 @@
 
 static int vl_method_synchronize(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
         _cleanup_(sd_event_source_unrefp) sd_event_source *event_source = NULL;
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
         int r;
 
         assert(link);
-        assert(s);
 
         if (json_variant_elements(parameters) > 0)
                 return varlink_error_invalid_parameter(link, parameters);
@@ -2040,25 +2140,23 @@
 }
 
 static int vl_method_rotate(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
         assert(link);
-        assert(s);
 
         if (json_variant_elements(parameters) > 0)
                 return varlink_error_invalid_parameter(link, parameters);
 
-        log_info("Received client request to rotate journal.");
+        log_info("Received client request to rotate journal, rotating.");
         server_full_rotate(s);
 
         return varlink_reply(link, NULL);
 }
 
 static int vl_method_flush_to_var(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
         assert(link);
-        assert(s);
 
         if (json_variant_elements(parameters) > 0)
                 return varlink_error_invalid_parameter(link, parameters);
@@ -2072,10 +2170,9 @@
 }
 
 static int vl_method_relinquish_var(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
         assert(link);
-        assert(s);
 
         if (json_variant_elements(parameters) > 0)
                 return varlink_error_invalid_parameter(link, parameters);
@@ -2089,11 +2186,10 @@
 }
 
 static int vl_connect(VarlinkServer *server, Varlink *link, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
         assert(server);
         assert(link);
-        assert(s);
 
         (void) server_start_or_stop_idle_timer(s); /* maybe we are no longer idle */
 
@@ -2101,11 +2197,10 @@
 }
 
 static void vl_disconnect(VarlinkServer *server, Varlink *link, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
         assert(server);
         assert(link);
-        assert(s);
 
         (void) server_start_or_stop_idle_timer(s); /* maybe we are idle now */
 }
@@ -2176,10 +2271,9 @@
 }
 
 static int server_idle_handler(sd_event_source *source, uint64_t usec, void *userdata) {
-        Server *s = userdata;
+        Server *s = ASSERT_PTR(userdata);
 
         assert(source);
-        assert(s);
 
         log_debug("Server is idle, exiting.");
         sd_event_exit(s->event, 0);
@@ -2229,7 +2323,7 @@
         return 1;
 }
 
-static int set_namespace(Server *s, const char *namespace) {
+static int server_set_namespace(Server *s, const char *namespace) {
         assert(s);
 
         if (!namespace)
@@ -2252,19 +2346,19 @@
 int server_init(Server *s, const char *namespace) {
         const char *native_socket, *syslog_socket, *stdout_socket, *varlink_socket, *e;
         _cleanup_fdset_free_ FDSet *fds = NULL;
-        int n, r, fd, varlink_fd = -1;
+        int n, r, fd, varlink_fd = -EBADF;
         bool no_sockets;
 
         assert(s);
 
         *s = (Server) {
-                .syslog_fd = -1,
-                .native_fd = -1,
-                .stdout_fd = -1,
-                .dev_kmsg_fd = -1,
-                .audit_fd = -1,
-                .hostname_fd = -1,
-                .notify_fd = -1,
+                .syslog_fd = -EBADF,
+                .native_fd = -EBADF,
+                .stdout_fd = -EBADF,
+                .dev_kmsg_fd = -EBADF,
+                .audit_fd = -EBADF,
+                .hostname_fd = -EBADF,
+                .notify_fd = -EBADF,
 
                 .compress.enabled = true,
                 .compress.threshold_bytes = UINT64_MAX,
@@ -2294,9 +2388,14 @@
 
                 .runtime_storage.name = "Runtime Journal",
                 .system_storage.name = "System Journal",
+
+                .kmsg_own_ratelimit = {
+                        .interval = DEFAULT_KMSG_OWN_INTERVAL,
+                        .burst = DEFAULT_KMSG_OWN_BURST,
+                },
         };
 
-        r = set_namespace(s, namespace);
+        r = server_set_namespace(s, namespace);
         if (r < 0)
                 return r;
 
@@ -2448,10 +2547,13 @@
 
         /* Unless we got *some* sockets and not audit, open audit socket */
         if (s->audit_fd >= 0 || no_sockets) {
+                log_info("Collecting audit messages is enabled.");
+
                 r = server_open_audit(s);
                 if (r < 0)
                         return r;
-        }
+        } else
+                log_info("Collecting audit messages is disabled.");
 
         r = server_open_varlink(s, varlink_socket, varlink_fd);
         if (r < 0)
@@ -2465,7 +2567,7 @@
         if (r < 0)
                 return r;
 
-        r = setup_signals(s);
+        r = server_setup_signals(s);
         if (r < 0)
                 return r;
 
@@ -2502,7 +2604,7 @@
 
         (void) client_context_acquire_default(s);
 
-        r = system_journal_open(s, false, false);
+        r = server_system_journal_open(s, /* flush_requested= */ false, /* relinquish_requested= */ false);
         if (r < 0)
                 return r;
 
@@ -2512,16 +2614,16 @@
 
 void server_maybe_append_tags(Server *s) {
 #if HAVE_GCRYPT
-        JournalFile *f;
+        ManagedJournalFile *f;
         usec_t n;
 
         n = now(CLOCK_REALTIME);
 
         if (s->system_journal)
-                journal_file_maybe_append_tag(s->system_journal, n);
+                journal_file_maybe_append_tag(s->system_journal->file, n);
 
         ORDERED_HASHMAP_FOREACH(f, s->user_journals)
-                journal_file_maybe_append_tag(f, n);
+                journal_file_maybe_append_tag(f->file, n);
 #endif
 }
 
@@ -2531,17 +2633,17 @@
         free(s->namespace);
         free(s->namespace_field);
 
-        set_free_with_destructor(s->deferred_closes, journal_file_close);
+        set_free_with_destructor(s->deferred_closes, managed_journal_file_close);
 
         while (s->stdout_streams)
                 stdout_stream_free(s->stdout_streams);
 
         client_context_flush_all(s);
 
-        (void) journal_file_close(s->system_journal);
-        (void) journal_file_close(s->runtime_journal);
+        (void) managed_journal_file_close(s->system_journal);
+        (void) managed_journal_file_close(s->runtime_journal);
 
-        ordered_hashmap_free_with_destructor(s->user_journals, journal_file_close);
+        ordered_hashmap_free_with_destructor(s->user_journals, managed_journal_file_close);
 
         varlink_server_unref(s->varlink_server);
 
@@ -2618,13 +2720,12 @@
                 void *data,
                 void *userdata) {
 
-        size_t *sz = data;
+        size_t *sz = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue))
                 /* Empty assignment means default */
diff --git a/src/journal/journald-server.h b/src/journal/journald-server.h
index 53e75ff..ee8f374 100644
--- a/src/journal/journald-server.h
+++ b/src/journal/journald-server.h
@@ -10,12 +10,13 @@
 
 #include "conf-parser.h"
 #include "hashmap.h"
-#include "journal-file.h"
 #include "journald-context.h"
 #include "journald-rate-limit.h"
 #include "journald-stream.h"
 #include "list.h"
+#include "managed-journal-file.h"
 #include "prioq.h"
+#include "ratelimit.h"
 #include "time-util.h"
 #include "varlink.h"
 
@@ -88,8 +89,8 @@
         sd_event_source *watchdog_event_source;
         sd_event_source *idle_event_source;
 
-        JournalFile *runtime_journal;
-        JournalFile *system_journal;
+        ManagedJournalFile *runtime_journal;
+        ManagedJournalFile *system_journal;
         OrderedHashmap *user_journals;
 
         uint64_t seqnum;
@@ -142,6 +143,7 @@
 
         uint64_t *kernel_seqnum;
         bool dev_kmsg_readable:1;
+        RateLimit kmsg_own_ratelimit;
 
         bool send_watchdog:1;
         bool sent_notify_ready:1;
@@ -177,7 +179,7 @@
 #define SERVER_MACHINE_ID(s) ((s)->machine_id_field + STRLEN("_MACHINE_ID="))
 
 /* Extra fields for any log messages */
-#define N_IOVEC_META_FIELDS 23
+#define N_IOVEC_META_FIELDS 24
 
 /* Extra fields for log messages that contain OBJECT_PID= (i.e. log about another process) */
 #define N_IOVEC_OBJECT_FIELDS 18
@@ -191,6 +193,9 @@
 /* kmsg: Maximum number of extra fields we'll import from udev's devices */
 #define N_IOVEC_UDEV_FIELDS 32
 
+/* audit: Maximum number of extra fields we'll import from audit messages */
+#define N_IOVEC_AUDIT_FIELDS 64
+
 void server_dispatch_message(Server *s, struct iovec *iovec, size_t n, size_t m, ClientContext *c, const struct timeval *tv, int priority, pid_t object_pid);
 void server_driver_message(Server *s, pid_t object_pid, const char *message_id, const char *format, ...) _sentinel_ _printf_(4,0);
 
@@ -212,7 +217,7 @@
 int server_init(Server *s, const char *namespace);
 void server_done(Server *s);
 void server_sync(Server *s);
-int server_vacuum(Server *s, bool verbose);
+void server_vacuum(Server *s, bool verbose);
 void server_rotate(Server *s);
 int server_schedule_sync(Server *s, int priority);
 int server_flush_to_var(Server *s, bool require_flag_file);
diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
index ee0fd27..735e2c5 100644
--- a/src/journal/journald-stream.c
+++ b/src/journal/journald-stream.c
@@ -19,6 +19,8 @@
 #include "fileio.h"
 #include "fs-util.h"
 #include "io-util.h"
+#include "journal-internal.h"
+#include "journald-client.h"
 #include "journald-console.h"
 #include "journald-context.h"
 #include "journald-kmsg.h"
@@ -36,6 +38,7 @@
 #include "syslog-util.h"
 #include "tmpfile-util.h"
 #include "unit-name.h"
+#include "user-util.h"
 
 #define STDOUT_STREAMS_MAX 4096
 
@@ -159,7 +162,8 @@
 
                 r = fstat(s->fd, &st);
                 if (r < 0)
-                        return log_warning_errno(errno, "Failed to stat connected stream: %m");
+                        return log_ratelimit_warning_errno(errno, JOURNAL_LOG_RATELIMIT,
+                                                           "Failed to stat connected stream: %m");
 
                 /* We use device and inode numbers as identifier for the stream */
                 r = asprintf(&s->state_file, "%s/streams/%lu:%lu", s->server->runtime_directory, (unsigned long) st.st_dev, (unsigned long) st.st_ino);
@@ -230,7 +234,7 @@
                 if (s->server->notify_event_source) {
                         r = sd_event_source_set_enabled(s->server->notify_event_source, SD_EVENT_ON);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to enable notify event source: %m");
+                                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT, "Failed to enable notify event source: %m");
                 }
         }
 
@@ -238,7 +242,8 @@
 
 fail:
         (void) unlink(s->state_file);
-        return log_error_errno(r, "Failed to save stream data %s: %m", s->state_file);
+        return log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT,
+                                         "Failed to save stream data %s: %m", s->state_file);
 }
 
 static int stdout_stream_log(
@@ -265,7 +270,8 @@
         else if (pid_is_valid(s->ucred.pid)) {
                 r = client_context_acquire(s->server, s->ucred.pid, &s->ucred, s->label, strlen_ptr(s->label), s->unit_id, &s->context);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to acquire client context, ignoring: %m");
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to acquire client context, ignoring: %m");
         }
 
         priority = s->priority;
@@ -279,6 +285,10 @@
         if (isempty(p))
                 return 0;
 
+        r = client_context_check_keep_log(s->context, p, strlen(p));
+        if (r <= 0)
+                return r;
+
         if (s->forward_to_syslog || s->server->forward_to_syslog)
                 server_forward_syslog(s->server, syslog_fixup_facility(priority), s->identifier, p, &s->ucred, NULL);
 
@@ -362,8 +372,8 @@
 
         /* line breaks by NUL, line max length or EOF are not permissible during the negotiation part of the protocol */
         if (line_break != LINE_BREAK_NEWLINE && s->state != STDOUT_STREAM_RUNNING)
-                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
-                                         "Control protocol line not properly terminated.");
+                return log_ratelimit_warning_errno(SYNTHETIC_ERRNO(EINVAL), JOURNAL_LOG_RATELIMIT,
+                                                   "Control protocol line not properly terminated.");
 
         switch (s->state) {
 
@@ -394,7 +404,8 @@
 
                 priority = syslog_parse_priority_and_facility(p);
                 if (priority < 0)
-                        return log_warning_errno(priority, "Failed to parse log priority line: %m");
+                        return log_ratelimit_warning_errno(priority, JOURNAL_LOG_RATELIMIT,
+                                                           "Failed to parse log priority line: %m");
 
                 s->priority = priority;
                 s->state = STDOUT_STREAM_LEVEL_PREFIX;
@@ -404,7 +415,8 @@
         case STDOUT_STREAM_LEVEL_PREFIX:
                 r = parse_boolean(p);
                 if (r < 0)
-                        return log_warning_errno(r, "Failed to parse level prefix line: %m");
+                        return log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                           "Failed to parse level prefix line: %m");
 
                 s->level_prefix = r;
                 s->state = STDOUT_STREAM_FORWARD_TO_SYSLOG;
@@ -413,7 +425,8 @@
         case STDOUT_STREAM_FORWARD_TO_SYSLOG:
                 r = parse_boolean(p);
                 if (r < 0)
-                        return log_warning_errno(r, "Failed to parse forward to syslog line: %m");
+                        return log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                           "Failed to parse forward to syslog line: %m");
 
                 s->forward_to_syslog = r;
                 s->state = STDOUT_STREAM_FORWARD_TO_KMSG;
@@ -422,7 +435,8 @@
         case STDOUT_STREAM_FORWARD_TO_KMSG:
                 r = parse_boolean(p);
                 if (r < 0)
-                        return log_warning_errno(r, "Failed to parse copy to kmsg line: %m");
+                        return log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                           "Failed to parse copy to kmsg line: %m");
 
                 s->forward_to_kmsg = r;
                 s->state = STDOUT_STREAM_FORWARD_TO_CONSOLE;
@@ -431,7 +445,8 @@
         case STDOUT_STREAM_FORWARD_TO_CONSOLE:
                 r = parse_boolean(p);
                 if (r < 0)
-                        return log_warning_errno(r, "Failed to parse copy to console line.");
+                        return log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                           "Failed to parse copy to console line.");
 
                 s->forward_to_console = r;
                 s->state = STDOUT_STREAM_RUNNING;
@@ -444,7 +459,7 @@
                 return stdout_stream_log(s, orig, line_break);
         }
 
-        assert_not_reached("Unknown stream state");
+        assert_not_reached();
 }
 
 static int stdout_stream_found(
@@ -547,7 +562,7 @@
 static int stdout_stream_process(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
         CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred))) control;
         size_t limit, consumed, allocated;
-        StdoutStream *s = userdata;
+        StdoutStream *s = ASSERT_PTR(userdata);
         struct ucred *ucred;
         struct iovec iovec;
         ssize_t l;
@@ -561,8 +576,6 @@
                 .msg_controllen = sizeof(control),
         };
 
-        assert(s);
-
         if ((revents|EPOLLIN|EPOLLHUP) != (EPOLLIN|EPOLLHUP)) {
                 log_error("Got invalid event from epoll for stdout stream: %"PRIx32, revents);
                 goto terminate;
@@ -587,10 +600,10 @@
 
         l = recvmsg(s->fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
         if (l < 0) {
-                if (IN_SET(errno, EINTR, EAGAIN))
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
-                log_warning_errno(errno, "Failed to read from stream: %m");
+                log_ratelimit_warning_errno(errno, JOURNAL_LOG_RATELIMIT, "Failed to read from stream: %m");
                 goto terminate;
         }
         cmsg_close_all(&msghdr);
@@ -649,22 +662,23 @@
 
         r = sd_id128_randomize(&id);
         if (r < 0)
-                return log_error_errno(r, "Failed to generate stream ID: %m");
+                return log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, "Failed to generate stream ID: %m");
 
         stream = new(StdoutStream, 1);
         if (!stream)
                 return log_oom();
 
         *stream = (StdoutStream) {
-                .fd = -1,
+                .fd = -EBADF,
                 .priority = LOG_INFO,
+                .ucred = UCRED_INVALID,
         };
 
         xsprintf(stream->id_field, "_STREAM_ID=" SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(id));
 
         r = getpeercred(fd, &stream->ucred);
         if (r < 0)
-                return log_error_errno(r, "Failed to determine peer credentials: %m");
+                return log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, "Failed to determine peer credentials: %m");
 
         r = setsockopt_int(fd, SOL_SOCKET, SO_PASSCRED, true);
         if (r < 0)
@@ -673,18 +687,18 @@
         if (mac_selinux_use()) {
                 r = getpeersec(fd, &stream->label);
                 if (r < 0 && r != -EOPNOTSUPP)
-                        (void) log_warning_errno(r, "Failed to determine peer security context: %m");
+                        (void) log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT, "Failed to determine peer security context: %m");
         }
 
         (void) shutdown(fd, SHUT_WR);
 
         r = sd_event_add_io(s->event, &stream->event_source, fd, EPOLLIN, stdout_stream_process, stream);
         if (r < 0)
-                return log_error_errno(r, "Failed to add stream to event loop: %m");
+                return log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, "Failed to add stream to event loop: %m");
 
         r = sd_event_source_set_priority(stream->event_source, SD_EVENT_PRIORITY_NORMAL+5);
         if (r < 0)
-                return log_error_errno(r, "Failed to adjust stdout event source priority: %m");
+                return log_ratelimit_error_errno(r, JOURNAL_LOG_RATELIMIT, "Failed to adjust stdout event source priority: %m");
 
         stream->fd = fd;
 
@@ -702,12 +716,10 @@
 }
 
 static int stdout_stream_new(sd_event_source *es, int listen_fd, uint32_t revents, void *userdata) {
-        _cleanup_close_ int fd = -1;
-        Server *s = userdata;
+        _cleanup_close_ int fd = -EBADF;
+        Server *s = ASSERT_PTR(userdata);
         int r;
 
-        assert(s);
-
         if (revents != EPOLLIN)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                        "Got invalid event from epoll for stdout server fd: %" PRIx32,
@@ -718,13 +730,13 @@
                 if (ERRNO_IS_ACCEPT_AGAIN(errno))
                         return 0;
 
-                return log_error_errno(errno, "Failed to accept stdout connection: %m");
+                return log_ratelimit_error_errno(errno, JOURNAL_LOG_RATELIMIT, "Failed to accept stdout connection: %m");
         }
 
         if (s->n_stdout_streams >= STDOUT_STREAMS_MAX) {
-                struct ucred u;
+                struct ucred u = UCRED_INVALID;
 
-                r = getpeercred(fd, &u);
+                (void) getpeercred(fd, &u);
 
                 /* By closing fd here we make sure that the client won't wait too long for journald to
                  * gather all the data it adds to the error message to find out that the connection has
@@ -732,7 +744,7 @@
                  */
                 fd = safe_close(fd);
 
-                server_driver_message(s, r < 0 ? 0 : u.pid, NULL, LOG_MESSAGE("Too many stdout streams, refusing connection."), NULL);
+                server_driver_message(s, u.pid, NULL, LOG_MESSAGE("Too many stdout streams, refusing connection."), NULL);
                 return 0;
         }
 
@@ -846,7 +858,6 @@
 
 int server_restore_streams(Server *s, FDSet *fds) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         const char *path;
         int r;
 
diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
index 925bd50..1ecbd22 100644
--- a/src/journal/journald-syslog.c
+++ b/src/journal/journald-syslog.c
@@ -10,6 +10,8 @@
 #include "fd-util.h"
 #include "format-util.h"
 #include "io-util.h"
+#include "journal-internal.h"
+#include "journald-client.h"
 #include "journald-console.h"
 #include "journald-kmsg.h"
 #include "journald-server.h"
@@ -279,14 +281,13 @@
 
                         _fallthrough_;
                 case NUMBER:
-                        if (*p < '0' || *p > '9')
+                        if (!ascii_isdigit(*p))
                                 return 0;
 
                         break;
 
                 case LETTER:
-                        if (!(*p >= 'A' && *p <= 'Z') &&
-                            !(*p >= 'a' && *p <= 'z'))
+                        if (!ascii_isalpha(*p))
                                 return 0;
 
                         break;
@@ -335,7 +336,9 @@
         if (ucred && pid_is_valid(ucred->pid)) {
                 r = client_context_get(s, ucred->pid, ucred, label, label_len, NULL, &context);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to retrieve credentials for PID " PID_FMT ", ignoring: %m", ucred->pid);
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to retrieve credentials for PID " PID_FMT ", ignoring: %m",
+                                                    ucred->pid);
         }
 
         /* We are creating a copy of the message because we want to forward the original message
@@ -372,6 +375,9 @@
         if (!client_context_test_priority(context, priority))
                 return;
 
+        if (client_context_check_keep_log(context, msg, strlen(msg)) <= 0)
+                return;
+
         syslog_ts = msg;
         syslog_ts_len = syslog_skip_timestamp(&msg);
         if (syslog_ts_len == 0)
diff --git a/src/journal/journald.c b/src/journal/journald.c
index 536717c..3d40442 100644
--- a/src/journal/journald.c
+++ b/src/journal/journald.c
@@ -88,7 +88,7 @@
 
                         /* The retention time is reached, so let's vacuum! */
                         if (server.oldest_file_usec + server.max_retention_usec < n) {
-                                log_info("Retention time reached.");
+                                log_info("Retention time reached, rotating.");
                                 server_rotate(&server);
                                 server_vacuum(&server, false);
                                 continue;
@@ -102,7 +102,7 @@
                 if (server.system_journal) {
                         usec_t u;
 
-                        if (journal_file_next_evolve_usec(server.system_journal, &u)) {
+                        if (journal_file_next_evolve_usec(server.system_journal->file, &u)) {
                                 if (n >= u)
                                         t = 0;
                                 else
diff --git a/src/journal/managed-journal-file.c b/src/journal/managed-journal-file.c
new file mode 100644
index 0000000..81aecfe
--- /dev/null
+++ b/src/journal/managed-journal-file.c
@@ -0,0 +1,580 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <pthread.h>
+#include <unistd.h>
+
+#include "chattr-util.h"
+#include "copy.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "format-util.h"
+#include "journal-authenticate.h"
+#include "managed-journal-file.h"
+#include "path-util.h"
+#include "random-util.h"
+#include "set.h"
+#include "stat-util.h"
+#include "sync-util.h"
+
+#define PAYLOAD_BUFFER_SIZE (16U * 1024U)
+#define MINIMUM_HOLE_SIZE (1U * 1024U * 1024U / 2U)
+
+static int managed_journal_file_truncate(JournalFile *f) {
+        uint64_t p;
+        int r;
+
+        /* truncate excess from the end of archives */
+        r = journal_file_tail_end_by_pread(f, &p);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to determine end of tail object: %m");
+
+        /* arena_size can't exceed the file size, ensure it's updated before truncating */
+        f->header->arena_size = htole64(p - le64toh(f->header->header_size));
+
+        if (ftruncate(f->fd, p) < 0)
+                return log_debug_errno(errno, "Failed to truncate %s: %m", f->path);
+
+        return journal_file_fstat(f);
+}
+
+static int managed_journal_file_entry_array_punch_hole(JournalFile *f, uint64_t p, uint64_t n_entries) {
+        Object o;
+        uint64_t offset, sz, n_items = 0, n_unused;
+        int r;
+
+        if (n_entries == 0)
+                return 0;
+
+        for (uint64_t q = p; q != 0; q = le64toh(o.entry_array.next_entry_array_offset)) {
+                r = journal_file_read_object_header(f, OBJECT_ENTRY_ARRAY, q, &o);
+                if (r < 0)
+                        return r;
+
+                n_items += journal_file_entry_array_n_items(f, &o);
+                p = q;
+        }
+
+        if (p == 0)
+                return 0;
+
+        if (n_entries > n_items)
+                return -EBADMSG;
+
+        /* Amount of unused items in the final entry array. */
+        n_unused = n_items - n_entries;
+
+        if (n_unused == 0)
+                return 0;
+
+        offset = p + offsetof(Object, entry_array.items) +
+                (journal_file_entry_array_n_items(f, &o) - n_unused) * journal_file_entry_array_item_size(f);
+        sz = p + le64toh(o.object.size) - offset;
+
+        if (sz < MINIMUM_HOLE_SIZE)
+                return 0;
+
+        if (p == le64toh(f->header->tail_object_offset) && !JOURNAL_HEADER_SEALED(f->header)) {
+                ssize_t n;
+
+                o.object.size = htole64(offset - p);
+
+                n = pwrite(f->fd, &o, sizeof(EntryArrayObject), p);
+                if (n < 0)
+                        return log_debug_errno(errno, "Failed to modify entry array object size: %m");
+                if ((size_t) n != sizeof(EntryArrayObject))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Short pwrite() while modifying entry array object size.");
+
+                f->header->arena_size = htole64(ALIGN64(offset) - le64toh(f->header->header_size));
+
+                if (ftruncate(f->fd, ALIGN64(offset)) < 0)
+                        return log_debug_errno(errno, "Failed to truncate %s: %m", f->path);
+
+                return 0;
+        }
+
+        if (fallocate(f->fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, offset, sz) < 0) {
+                if (ERRNO_IS_NOT_SUPPORTED(errno))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), /* Make recognizable */
+                                               "Hole punching not supported by backing file system, skipping.");
+
+                return log_debug_errno(errno, "Failed to punch hole in entry array of %s: %m", f->path);
+        }
+
+        return 0;
+}
+
+static int managed_journal_file_punch_holes(JournalFile *f) {
+        HashItem items[PAYLOAD_BUFFER_SIZE / sizeof(HashItem)];
+        uint64_t p, sz;
+        ssize_t n = SSIZE_MAX;
+        int r;
+
+        r = managed_journal_file_entry_array_punch_hole(
+                f, le64toh(f->header->entry_array_offset), le64toh(f->header->n_entries));
+        if (r < 0)
+                return r;
+
+        p = le64toh(f->header->data_hash_table_offset);
+        sz = le64toh(f->header->data_hash_table_size);
+
+        for (uint64_t i = p; i < p + sz && n > 0; i += n) {
+                size_t m = MIN(sizeof(items), p + sz - i);
+                n = pread(f->fd, items, m, i);
+                if (n < 0)
+                        return log_debug_errno(errno, "Failed to read hash table items: %m");
+
+                /* Let's ignore any partial hash items by rounding down to the nearest multiple of HashItem. */
+                n -= n % sizeof(HashItem);
+
+                for (size_t j = 0; j < (size_t) n / sizeof(HashItem); j++) {
+                        Object o;
+
+                        for (uint64_t q = le64toh(items[j].head_hash_offset); q != 0;
+                             q = le64toh(o.data.next_hash_offset)) {
+
+                                r = journal_file_read_object_header(f, OBJECT_DATA, q, &o);
+                                if (r < 0) {
+                                        log_debug_errno(r, "Invalid data object: %m, ignoring");
+                                        break;
+                                }
+
+                                if (le64toh(o.data.n_entries) == 0)
+                                        continue;
+
+                                r = managed_journal_file_entry_array_punch_hole(
+                                                f, le64toh(o.data.entry_array_offset), le64toh(o.data.n_entries) - 1);
+                                if (r == -EOPNOTSUPP)
+                                        return -EOPNOTSUPP;
+
+                                /* Ignore other errors */
+                        }
+                }
+        }
+
+        return 0;
+}
+
+/* This may be called from a separate thread to prevent blocking the caller for the duration of fsync().
+ * As a result we use atomic operations on f->offline_state for inter-thread communications with
+ * journal_file_set_offline() and journal_file_set_online(). */
+static void managed_journal_file_set_offline_internal(ManagedJournalFile *f) {
+        int r;
+
+        assert(f);
+        assert(f->file->fd >= 0);
+        assert(f->file->header);
+
+        for (;;) {
+                switch (f->file->offline_state) {
+                case OFFLINE_CANCEL: {
+                        OfflineState tmp_state = OFFLINE_CANCEL;
+                        if (!__atomic_compare_exchange_n(&f->file->offline_state, &tmp_state, OFFLINE_DONE,
+                                                         false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                continue;
+                        }
+                        return;
+
+                case OFFLINE_AGAIN_FROM_SYNCING: {
+                        OfflineState tmp_state = OFFLINE_AGAIN_FROM_SYNCING;
+                        if (!__atomic_compare_exchange_n(&f->file->offline_state, &tmp_state, OFFLINE_SYNCING,
+                                                         false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                continue;
+                        }
+                        break;
+
+                case OFFLINE_AGAIN_FROM_OFFLINING: {
+                        OfflineState tmp_state = OFFLINE_AGAIN_FROM_OFFLINING;
+                        if (!__atomic_compare_exchange_n(&f->file->offline_state, &tmp_state, OFFLINE_SYNCING,
+                                                         false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                continue;
+                        }
+                        break;
+
+                case OFFLINE_SYNCING:
+                        if (f->file->archive) {
+                                (void) managed_journal_file_truncate(f->file);
+                                (void) managed_journal_file_punch_holes(f->file);
+                        }
+
+                        (void) fsync(f->file->fd);
+
+                        {
+                                OfflineState tmp_state = OFFLINE_SYNCING;
+                                if (!__atomic_compare_exchange_n(&f->file->offline_state, &tmp_state, OFFLINE_OFFLINING,
+                                                                 false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                        continue;
+                        }
+
+                        f->file->header->state = f->file->archive ? STATE_ARCHIVED : STATE_OFFLINE;
+                        (void) fsync(f->file->fd);
+
+                        /* If we've archived the journal file, first try to re-enable COW on the file. If the
+                         * FS_NOCOW_FL flag was never set or we successfully removed it, continue. If we fail
+                         * to remove the flag on the archived file, rewrite the file without the NOCOW flag.
+                         * We need this fallback because on some filesystems (BTRFS), the NOCOW flag cannot
+                         * be removed after data has been written to a file. The only way to remove it is to
+                         * copy all data to a new file without the NOCOW flag set. */
+
+                        if (f->file->archive) {
+                                r = chattr_fd(f->file->fd, 0, FS_NOCOW_FL, NULL);
+                                if (r >= 0)
+                                        continue;
+
+                                log_debug_errno(r, "Failed to re-enable copy-on-write for %s: %m, rewriting file", f->file->path);
+
+                                r = copy_file_atomic(FORMAT_PROC_FD_PATH(f->file->fd), f->file->path, f->file->mode,
+                                                     0,
+                                                     FS_NOCOW_FL,
+                                                     COPY_REPLACE | COPY_FSYNC | COPY_HOLES | COPY_ALL_XATTRS);
+                                if (r < 0) {
+                                        log_debug_errno(r, "Failed to rewrite %s: %m", f->file->path);
+                                        continue;
+                                }
+                        }
+
+                        break;
+
+                case OFFLINE_OFFLINING: {
+                        OfflineState tmp_state = OFFLINE_OFFLINING;
+                        if (!__atomic_compare_exchange_n(&f->file->offline_state, &tmp_state, OFFLINE_DONE,
+                                                         false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                continue;
+                        }
+                        _fallthrough_;
+                case OFFLINE_DONE:
+                        return;
+
+                case OFFLINE_JOINED:
+                        log_debug("OFFLINE_JOINED unexpected offline state for journal_file_set_offline_internal()");
+                        return;
+                }
+        }
+}
+
+static void * managed_journal_file_set_offline_thread(void *arg) {
+        ManagedJournalFile *f = arg;
+
+        (void) pthread_setname_np(pthread_self(), "journal-offline");
+
+        managed_journal_file_set_offline_internal(f);
+
+        return NULL;
+}
+
+/* Trigger a restart if the offline thread is mid-flight in a restartable state. */
+static bool managed_journal_file_set_offline_try_restart(ManagedJournalFile *f) {
+        for (;;) {
+                switch (f->file->offline_state) {
+                case OFFLINE_AGAIN_FROM_SYNCING:
+                case OFFLINE_AGAIN_FROM_OFFLINING:
+                        return true;
+
+                case OFFLINE_CANCEL: {
+                        OfflineState tmp_state = OFFLINE_CANCEL;
+                        if (!__atomic_compare_exchange_n(&f->file->offline_state, &tmp_state, OFFLINE_AGAIN_FROM_SYNCING,
+                                                         false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                continue;
+                        }
+                        return true;
+
+                case OFFLINE_SYNCING: {
+                        OfflineState tmp_state = OFFLINE_SYNCING;
+                        if (!__atomic_compare_exchange_n(&f->file->offline_state, &tmp_state, OFFLINE_AGAIN_FROM_SYNCING,
+                                                         false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                continue;
+                        }
+                        return true;
+
+                case OFFLINE_OFFLINING: {
+                        OfflineState tmp_state = OFFLINE_OFFLINING;
+                        if (!__atomic_compare_exchange_n(&f->file->offline_state, &tmp_state, OFFLINE_AGAIN_FROM_OFFLINING,
+                                                         false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                continue;
+                        }
+                        return true;
+
+                default:
+                        return false;
+                }
+        }
+}
+
+/* Sets a journal offline.
+ *
+ * If wait is false then an offline is dispatched in a separate thread for a
+ * subsequent journal_file_set_offline() or journal_file_set_online() of the
+ * same journal to synchronize with.
+ *
+ * If wait is true, then either an existing offline thread will be restarted
+ * and joined, or if none exists the offline is simply performed in this
+ * context without involving another thread.
+ */
+int managed_journal_file_set_offline(ManagedJournalFile *f, bool wait) {
+        int target_state;
+        bool restarted;
+        int r;
+
+        assert(f);
+
+        if (!journal_file_writable(f->file))
+                return -EPERM;
+
+        if (f->file->fd < 0 || !f->file->header)
+                return -EINVAL;
+
+        target_state = f->file->archive ? STATE_ARCHIVED : STATE_OFFLINE;
+
+        /* An offlining journal is implicitly online and may modify f->header->state,
+         * we must also join any potentially lingering offline thread when already in
+         * the desired offline state.
+         */
+        if (!managed_journal_file_is_offlining(f) && f->file->header->state == target_state)
+                return journal_file_set_offline_thread_join(f->file);
+
+        /* Restart an in-flight offline thread and wait if needed, or join a lingering done one. */
+        restarted = managed_journal_file_set_offline_try_restart(f);
+        if ((restarted && wait) || !restarted) {
+                r = journal_file_set_offline_thread_join(f->file);
+                if (r < 0)
+                        return r;
+        }
+
+        if (restarted)
+                return 0;
+
+        /* Initiate a new offline. */
+        f->file->offline_state = OFFLINE_SYNCING;
+
+        if (wait) /* Without using a thread if waiting. */
+                managed_journal_file_set_offline_internal(f);
+        else {
+                sigset_t ss, saved_ss;
+                int k;
+
+                assert_se(sigfillset(&ss) >= 0);
+                /* Don't block SIGBUS since the offlining thread accesses a memory mapped file.
+                 * Asynchronous SIGBUS signals can safely be handled by either thread. */
+                assert_se(sigdelset(&ss, SIGBUS) >= 0);
+
+                r = pthread_sigmask(SIG_BLOCK, &ss, &saved_ss);
+                if (r > 0)
+                        return -r;
+
+                r = pthread_create(&f->file->offline_thread, NULL, managed_journal_file_set_offline_thread, f);
+
+                k = pthread_sigmask(SIG_SETMASK, &saved_ss, NULL);
+                if (r > 0) {
+                        f->file->offline_state = OFFLINE_JOINED;
+                        return -r;
+                }
+                if (k > 0)
+                        return -k;
+        }
+
+        return 0;
+}
+
+bool managed_journal_file_is_offlining(ManagedJournalFile *f) {
+        assert(f);
+
+        __atomic_thread_fence(__ATOMIC_SEQ_CST);
+
+        if (IN_SET(f->file->offline_state, OFFLINE_DONE, OFFLINE_JOINED))
+                return false;
+
+        return true;
+}
+
+ManagedJournalFile* managed_journal_file_close(ManagedJournalFile *f) {
+        if (!f)
+                return NULL;
+
+#if HAVE_GCRYPT
+        /* Write the final tag */
+        if (JOURNAL_HEADER_SEALED(f->file->header) && journal_file_writable(f->file)) {
+                int r;
+
+                r = journal_file_append_tag(f->file);
+                if (r < 0)
+                        log_error_errno(r, "Failed to append tag when closing journal: %m");
+        }
+#endif
+
+        if (sd_event_source_get_enabled(f->file->post_change_timer, NULL) > 0)
+                journal_file_post_change(f->file);
+        sd_event_source_disable_unref(f->file->post_change_timer);
+
+        managed_journal_file_set_offline(f, true);
+
+        journal_file_close(f->file);
+
+        return mfree(f);
+}
+
+int managed_journal_file_open(
+                int fd,
+                const char *fname,
+                int open_flags,
+                JournalFileFlags file_flags,
+                mode_t mode,
+                uint64_t compress_threshold_bytes,
+                JournalMetrics *metrics,
+                MMapCache *mmap_cache,
+                Set *deferred_closes,
+                ManagedJournalFile *template,
+                ManagedJournalFile **ret) {
+
+        _cleanup_free_ ManagedJournalFile *f = NULL;
+        int r;
+
+        set_clear_with_destructor(deferred_closes, managed_journal_file_close);
+
+        f = new0(ManagedJournalFile, 1);
+        if (!f)
+                return -ENOMEM;
+
+        r = journal_file_open(
+                        fd,
+                        fname,
+                        open_flags,
+                        file_flags,
+                        mode,
+                        compress_threshold_bytes,
+                        metrics,
+                        mmap_cache,
+                        template ? template->file : NULL,
+                        &f->file);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(f);
+
+        return 0;
+}
+
+ManagedJournalFile* managed_journal_file_initiate_close(ManagedJournalFile *f, Set *deferred_closes) {
+        int r;
+
+        assert(f);
+
+        if (deferred_closes) {
+                r = set_put(deferred_closes, f);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to add file to deferred close set, closing immediately.");
+                else {
+                        (void) managed_journal_file_set_offline(f, false);
+                        return NULL;
+                }
+        }
+
+        return managed_journal_file_close(f);
+}
+
+int managed_journal_file_rotate(
+                ManagedJournalFile **f,
+                MMapCache *mmap_cache,
+                JournalFileFlags file_flags,
+                uint64_t compress_threshold_bytes,
+                Set *deferred_closes) {
+
+        _cleanup_free_ char *path = NULL;
+        ManagedJournalFile *new_file = NULL;
+        int r;
+
+        assert(f);
+        assert(*f);
+
+        r = journal_file_archive((*f)->file, &path);
+        if (r < 0)
+                return r;
+
+        r = managed_journal_file_open(
+                        /* fd= */ -1,
+                        path,
+                        (*f)->file->open_flags,
+                        file_flags,
+                        (*f)->file->mode,
+                        compress_threshold_bytes,
+                        /* metrics= */ NULL,
+                        mmap_cache,
+                        deferred_closes,
+                        /* template= */ *f,
+                        &new_file);
+
+        managed_journal_file_initiate_close(*f, deferred_closes);
+        *f = new_file;
+
+        return r;
+}
+
+int managed_journal_file_open_reliably(
+                const char *fname,
+                int open_flags,
+                JournalFileFlags file_flags,
+                mode_t mode,
+                uint64_t compress_threshold_bytes,
+                JournalMetrics *metrics,
+                MMapCache *mmap_cache,
+                Set *deferred_closes,
+                ManagedJournalFile *template,
+                ManagedJournalFile **ret) {
+
+        _cleanup_(managed_journal_file_closep) ManagedJournalFile *old_file = NULL;
+        int r;
+
+        r = managed_journal_file_open(
+                        /* fd= */ -1,
+                        fname,
+                        open_flags,
+                        file_flags,
+                        mode,
+                        compress_threshold_bytes,
+                        metrics,
+                        mmap_cache,
+                        deferred_closes,
+                        template,
+                        ret);
+        if (!IN_SET(r,
+                    -EBADMSG,           /* Corrupted */
+                    -ENODATA,           /* Truncated */
+                    -EHOSTDOWN,         /* Other machine */
+                    -EPROTONOSUPPORT,   /* Incompatible feature */
+                    -EBUSY,             /* Unclean shutdown */
+                    -ESHUTDOWN,         /* Already archived */
+                    -EIO,               /* IO error, including SIGBUS on mmap */
+                    -EIDRM,             /* File has been deleted */
+                    -ETXTBSY))          /* File is from the future */
+                return r;
+
+        if ((open_flags & O_ACCMODE) == O_RDONLY)
+                return r;
+
+        if (!(open_flags & O_CREAT))
+                return r;
+
+        if (!endswith(fname, ".journal"))
+                return r;
+
+        /* The file is corrupted. Rotate it away and try it again (but only once) */
+        log_warning_errno(r, "File %s corrupted or uncleanly shut down, renaming and replacing.", fname);
+
+        if (!template) {
+                /* The file is corrupted and no template is specified. Try opening it read-only as the
+                 * template before rotating to inherit its sequence number and ID. */
+                r = managed_journal_file_open(-1, fname,
+                                              (open_flags & ~(O_ACCMODE|O_CREAT|O_EXCL)) | O_RDONLY,
+                                              file_flags, 0, compress_threshold_bytes, NULL,
+                                              mmap_cache, deferred_closes, NULL, &old_file);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to continue sequence from file %s, ignoring: %m", fname);
+                else
+                        template = old_file;
+        }
+
+        r = journal_file_dispose(AT_FDCWD, fname);
+        if (r < 0)
+                return r;
+
+        return managed_journal_file_open(-1, fname, open_flags, file_flags, mode, compress_threshold_bytes, metrics,
+                                         mmap_cache, deferred_closes, template, ret);
+}
diff --git a/src/journal/managed-journal-file.h b/src/journal/managed-journal-file.h
new file mode 100644
index 0000000..0ac69a7
--- /dev/null
+++ b/src/journal/managed-journal-file.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "journal-file.h"
+
+typedef struct {
+        JournalFile *file;
+} ManagedJournalFile;
+
+int managed_journal_file_open(
+                int fd,
+                const char *fname,
+                int open_flags,
+                JournalFileFlags file_flags,
+                mode_t mode,
+                uint64_t compress_threshold_bytes,
+                JournalMetrics *metrics,
+                MMapCache *mmap_cache,
+                Set *deferred_closes,
+                ManagedJournalFile *template,
+                ManagedJournalFile **ret);
+
+int managed_journal_file_set_offline(ManagedJournalFile *f, bool wait);
+bool managed_journal_file_is_offlining(ManagedJournalFile *f);
+ManagedJournalFile* managed_journal_file_close(ManagedJournalFile *f);
+DEFINE_TRIVIAL_CLEANUP_FUNC(ManagedJournalFile*, managed_journal_file_close);
+
+int managed_journal_file_open_reliably(
+                const char *fname,
+                int open_flags,
+                JournalFileFlags file_flags,
+                mode_t mode,
+                uint64_t compress_threshold_bytes,
+                JournalMetrics *metrics,
+                MMapCache *mmap_cache,
+                Set *deferred_closes,
+                ManagedJournalFile *template,
+                ManagedJournalFile **ret);
+
+ManagedJournalFile* managed_journal_file_initiate_close(ManagedJournalFile *f, Set *deferred_closes);
+int managed_journal_file_rotate(ManagedJournalFile **f, MMapCache *mmap_cache, JournalFileFlags file_flags, uint64_t compress_threshold_bytes, Set *deferred_closes);
diff --git a/src/journal/meson.build b/src/journal/meson.build
index 171e276..30cebe4 100644
--- a/src/journal/meson.build
+++ b/src/journal/meson.build
@@ -1,27 +1,19 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-sources = files('''
-        journald-audit.c
-        journald-audit.h
-        journald-console.c
-        journald-console.h
-        journald-context.c
-        journald-context.h
-        journald-kmsg.c
-        journald-kmsg.h
-        journald-native.c
-        journald-native.h
-        journald-rate-limit.c
-        journald-rate-limit.h
-        journald-server.c
-        journald-server.h
-        journald-stream.c
-        journald-stream.h
-        journald-syslog.c
-        journald-syslog.h
-        journald-wall.c
-        journald-wall.h
-'''.split())
+sources = files(
+        'journald-audit.c',
+        'journald-client.c',
+        'journald-console.c',
+        'journald-context.c',
+        'journald-kmsg.c',
+        'journald-native.c',
+        'journald-rate-limit.c',
+        'journald-server.c',
+        'journald-stream.c',
+        'journald-syslog.c',
+        'journald-wall.c',
+        'managed-journal-file.c',
+)
 
 sources += custom_target(
         'journald-gperf.c',
@@ -33,22 +25,18 @@
         'journal-core',
         sources,
         include_directories : includes,
-        install : false)
+        dependencies: threads,
+        build_by_default : false)
 
 journal_includes = [includes, include_directories('.')]
 
-systemd_journald_sources = files('''
-        journald.c
-        journald-server.h
-'''.split())
+systemd_journald_sources = files(
+        'journald.c',
+)
 
 systemd_cat_sources = files('cat.c')
 
-journalctl_sources = files('''
-        journalctl.c
-        pcre2-dlopen.c
-        pcre2-dlopen.h
-'''.split())
+journalctl_sources = files('journalctl.c')
 
 if install_sysconfdir_samples
         install_data('journald.conf',
@@ -78,7 +66,7 @@
 ############################################################
 
 tests += [
-        [['src/journal/test-journal-syslog.c'],
+        [files('test-journal-syslog.c'),
          [libjournal_core,
           libshared],
          [threads,
@@ -86,47 +74,67 @@
           liblz4,
           libselinux]],
 
-        [['src/journal/test-journal-config.c'],
+        [files('test-journal-config.c'),
          [libjournal_core,
           libshared],
          [libxz,
           liblz4,
           libselinux]],
+
+        [files('test-journal.c'),
+         [libjournal_core,
+          libshared]],
+
+        [files('test-journal-stream.c'),
+         [libjournal_core,
+          libshared]],
+
+         [files('test-journal-flush.c'),
+          [libjournal_core,
+           libshared]],
+
+        [files('test-journal-verify.c'),
+         [libjournal_core,
+          libshared]],
+
+        [files('test-journal-interleaving.c'),
+         [libjournal_core,
+          libshared]],
 ]
 
 fuzzers += [
-        [['src/journal/fuzz-journald-audit.c',
-          'src/journal/fuzz-journald.c'],
+        [files('fuzz-journald-audit.c',
+               'fuzz-journald.c'),
          [libjournal_core,
           libshared],
          [libselinux]],
 
-        [['src/journal/fuzz-journald-kmsg.c',
-          'src/journal/fuzz-journald.c'],
+        [files('fuzz-journald-kmsg.c',
+               'fuzz-journald.c'),
          [libjournal_core,
           libshared],
          [libselinux]],
 
-        [['src/journal/fuzz-journald-native.c',
-          'src/journal/fuzz-journald.c'],
+        [files('fuzz-journald-native.c',
+               'fuzz-journald.c'),
          [libjournal_core,
           libshared],
          [libselinux]],
 
-        [['src/journal/fuzz-journald-native-fd.c',
-          'src/journal/fuzz-journald.c'],
+        [files('fuzz-journald-native-fd.c',
+               'fuzz-journald.c'),
          [libjournal_core,
           libshared],
          [libselinux]],
 
-        [['src/journal/fuzz-journald-stream.c',
-          'src/journal/fuzz-journald.c'],
+        [files('fuzz-journald-stream.c',
+               'fuzz-journald.c'),
          [libjournal_core,
           libshared],
          [libselinux]],
 
-        [['src/journal/fuzz-journald-syslog.c',
-          'src/journal/fuzz-journald.c'],
+        [files('fuzz-journald-syslog.c',
+               'fuzz-journald.c'),
          [libjournal_core,
           libshared],
          [libselinux]],
diff --git a/src/journal/pcre2-dlopen.c b/src/journal/pcre2-dlopen.c
deleted file mode 100644
index 475d7eb..0000000
--- a/src/journal/pcre2-dlopen.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "dlfcn-util.h"
-#include "log.h"
-#include "pcre2-dlopen.h"
-
-#if HAVE_PCRE2
-static void *pcre2_dl = NULL;
-
-pcre2_match_data* (*sym_pcre2_match_data_create)(uint32_t, pcre2_general_context *);
-void (*sym_pcre2_match_data_free)(pcre2_match_data *);
-void (*sym_pcre2_code_free)(pcre2_code *);
-pcre2_code* (*sym_pcre2_compile)(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, pcre2_compile_context *);
-int (*sym_pcre2_get_error_message)(int, PCRE2_UCHAR *, PCRE2_SIZE);
-int (*sym_pcre2_match)(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, uint32_t, pcre2_match_data *, pcre2_match_context *);
-PCRE2_SIZE* (*sym_pcre2_get_ovector_pointer)(pcre2_match_data *);
-
-int dlopen_pcre2(void) {
-        /* So here's something weird: PCRE2 actually renames the symbols exported by the library via C
-         * macros, so that the exported symbols carry a suffix "_8" but when used from C the suffix is
-         * gone. In the argument list below we ignore this mangling. Surprisingly (at least to me), we
-         * actually get away with that. That's because DLSYM_ARG() useses STRINGIFY() to generate a string
-         * version of the symbol name, and that resolves the macro mapping implicitly already, so that the
-         * string actually contains the "_8" suffix already due to that and we don't have to append it
-         * manually anymore. C is weird. 🤯 */
-
-        return dlopen_many_sym_or_warn(
-                        &pcre2_dl, "libpcre2-8.so.0", LOG_ERR,
-                        DLSYM_ARG(pcre2_match_data_create),
-                        DLSYM_ARG(pcre2_match_data_free),
-                        DLSYM_ARG(pcre2_code_free),
-                        DLSYM_ARG(pcre2_compile),
-                        DLSYM_ARG(pcre2_get_error_message),
-                        DLSYM_ARG(pcre2_match),
-                        DLSYM_ARG(pcre2_get_ovector_pointer));
-}
-
-#else
-
-int dlopen_pcre2(void) {
-        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                               "PCRE2 support is not compiled in.");
-}
-#endif
diff --git a/src/journal/pcre2-dlopen.h b/src/journal/pcre2-dlopen.h
deleted file mode 100644
index 1306334..0000000
--- a/src/journal/pcre2-dlopen.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#if HAVE_PCRE2
-
-#define PCRE2_CODE_UNIT_WIDTH 8
-#include <pcre2.h>
-
-extern pcre2_match_data* (*sym_pcre2_match_data_create)(uint32_t, pcre2_general_context *);
-extern void (*sym_pcre2_match_data_free)(pcre2_match_data *);
-extern void (*sym_pcre2_code_free)(pcre2_code *);
-extern pcre2_code* (*sym_pcre2_compile)(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, pcre2_compile_context *);
-extern int (*sym_pcre2_get_error_message)(int, PCRE2_UCHAR *, PCRE2_SIZE);
-extern int (*sym_pcre2_match)(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, uint32_t, pcre2_match_data *, pcre2_match_context *);
-extern PCRE2_SIZE* (*sym_pcre2_get_ovector_pointer)(pcre2_match_data *);
-#endif
-
-int dlopen_pcre2(void);
diff --git a/src/journal/test-journal-config.c b/src/journal/test-journal-config.c
index bd0de96..1a6c531 100644
--- a/src/journal/test-journal-config.c
+++ b/src/journal/test-journal-config.c
@@ -3,6 +3,7 @@
 #include <stdbool.h>
 
 #include "journald-server.h"
+#include "tests.h"
 
 #define _COMPRESS_PARSE_CHECK(str, enab, thresh, varname)               \
         do {                                                            \
@@ -17,7 +18,7 @@
 #define COMPRESS_PARSE_CHECK(str, enabled, threshold)                   \
         _COMPRESS_PARSE_CHECK(str, enabled, threshold, conf##__COUNTER__)
 
-static void test_config_compress(void) {
+TEST(config_compress) {
         COMPRESS_PARSE_CHECK("yes", true, 111);
         COMPRESS_PARSE_CHECK("no", false, 111);
         COMPRESS_PARSE_CHECK("y", true, 111);
@@ -46,8 +47,4 @@
         COMPRESS_PARSE_CHECK("", true, UINT64_MAX);
 }
 
-int main(int argc, char *argv[]) {
-        test_config_compress();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/journal/test-journal-flush.c b/src/journal/test-journal-flush.c
new file mode 100644
index 0000000..53e4799
--- /dev/null
+++ b/src/journal/test-journal-flush.c
@@ -0,0 +1,82 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "sd-journal.h"
+
+#include "alloc-util.h"
+#include "chattr-util.h"
+#include "journal-internal.h"
+#include "macro.h"
+#include "managed-journal-file.h"
+#include "path-util.h"
+#include "rm-rf.h"
+#include "string-util.h"
+#include "tmpfile-util.h"
+
+static void test_journal_flush(int argc, char *argv[]) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        _cleanup_free_ char *fn = NULL;
+        _cleanup_(rm_rf_physical_and_freep) char *dn = NULL;
+        ManagedJournalFile *new_journal = NULL;
+        sd_journal *j = NULL;
+        unsigned n = 0;
+        int r;
+
+        assert_se(m = mmap_cache_new());
+        assert_se(mkdtemp_malloc("/var/tmp/test-journal-flush.XXXXXX", &dn) >= 0);
+        (void) chattr_path(dn, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
+
+        assert_se(fn = path_join(dn, "test.journal"));
+
+        r = managed_journal_file_open(-1, fn, O_CREAT|O_RDWR, 0, 0644, 0, NULL, m, NULL, NULL, &new_journal);
+        assert_se(r >= 0);
+
+        if (argc > 1)
+                r = sd_journal_open_files(&j, (const char **) strv_skip(argv, 1), 0);
+        else
+                r = sd_journal_open(&j, 0);
+        assert_se(r == 0);
+
+        sd_journal_set_data_threshold(j, 0);
+
+        SD_JOURNAL_FOREACH(j) {
+                Object *o;
+                JournalFile *f;
+
+                f = j->current_file;
+                assert_se(f && f->current_offset > 0);
+
+                r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
+                if (r < 0)
+                        log_error_errno(r, "journal_file_move_to_object failed: %m");
+                assert_se(r >= 0);
+
+                r = journal_file_copy_entry(f, new_journal->file, o, f->current_offset);
+                if (r < 0)
+                        log_warning_errno(r, "journal_file_copy_entry failed: %m");
+                assert_se(r >= 0 ||
+                          IN_SET(r, -EBADMSG,         /* corrupted file */
+                                    -EPROTONOSUPPORT, /* unsupported compression */
+                                    -EIO,             /* file rotated */
+                                    -EREMCHG));       /* clock rollback */
+
+                if (++n >= 10000)
+                        break;
+        }
+
+        sd_journal_close(j);
+
+        (void) managed_journal_file_close(new_journal);
+}
+
+int main(int argc, char *argv[]) {
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1) >= 0);
+        test_journal_flush(argc, argv);
+
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1) >= 0);
+        test_journal_flush(argc, argv);
+
+        return 0;
+}
diff --git a/src/journal/test-journal-interleaving.c b/src/journal/test-journal-interleaving.c
new file mode 100644
index 0000000..67552de
--- /dev/null
+++ b/src/journal/test-journal-interleaving.c
@@ -0,0 +1,316 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "sd-id128.h"
+#include "sd-journal.h"
+
+#include "alloc-util.h"
+#include "chattr-util.h"
+#include "io-util.h"
+#include "journal-vacuum.h"
+#include "log.h"
+#include "managed-journal-file.h"
+#include "parse-util.h"
+#include "rm-rf.h"
+#include "tests.h"
+
+/* This program tests skipping around in a multi-file journal. */
+
+static bool arg_keep = false;
+
+_noreturn_ static void log_assert_errno(const char *text, int error, const char *file, unsigned line, const char *func) {
+        log_internal(LOG_CRIT, error, file, line, func,
+                     "'%s' failed at %s:%u (%s): %m", text, file, line, func);
+        abort();
+}
+
+#define assert_ret(expr)                                                \
+        do {                                                            \
+                int _r_ = (expr);                                       \
+                if (_unlikely_(_r_ < 0))                                \
+                        log_assert_errno(#expr, -_r_, PROJECT_FILE, __LINE__, __func__); \
+        } while (false)
+
+static ManagedJournalFile *test_open(const char *name) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        ManagedJournalFile *f;
+
+        m = mmap_cache_new();
+        assert_se(m != NULL);
+
+        assert_ret(managed_journal_file_open(-1, name, O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644, UINT64_MAX, NULL, m, NULL, NULL, &f));
+        return f;
+}
+
+static void test_close(ManagedJournalFile *f) {
+        (void) managed_journal_file_close(f);
+}
+
+static void append_number(ManagedJournalFile *f, int n, uint64_t *seqnum) {
+        char *p;
+        dual_timestamp ts;
+        static dual_timestamp previous_ts = {};
+        struct iovec iovec[1];
+
+        dual_timestamp_get(&ts);
+
+        if (ts.monotonic <= previous_ts.monotonic)
+                ts.monotonic = previous_ts.monotonic + 1;
+
+        if (ts.realtime <= previous_ts.realtime)
+                ts.realtime = previous_ts.realtime + 1;
+
+        previous_ts = ts;
+
+        assert_se(asprintf(&p, "NUMBER=%d", n) >= 0);
+        iovec[0] = IOVEC_MAKE_STRING(p);
+        assert_ret(journal_file_append_entry(f->file, &ts, NULL, iovec, 1, seqnum, NULL, NULL));
+        free(p);
+}
+
+static void test_check_number(sd_journal *j, int n) {
+        const void *d;
+        _cleanup_free_ char *k;
+        size_t l;
+        int x;
+
+        assert_ret(sd_journal_get_data(j, "NUMBER", &d, &l));
+        assert_se(k = strndup(d, l));
+        printf("%s\n", k);
+
+        assert_se(safe_atoi(k + 7, &x) >= 0);
+        assert_se(n == x);
+}
+
+static void test_check_numbers_down(sd_journal *j, int count) {
+        int i;
+
+        for (i = 1; i <= count; i++) {
+                int r;
+                test_check_number(j, i);
+                assert_ret(r = sd_journal_next(j));
+                if (i == count)
+                        assert_se(r == 0);
+                else
+                        assert_se(r == 1);
+        }
+
+}
+
+static void test_check_numbers_up(sd_journal *j, int count) {
+        for (int i = count; i >= 1; i--) {
+                int r;
+                test_check_number(j, i);
+                assert_ret(r = sd_journal_previous(j));
+                if (i == 1)
+                        assert_se(r == 0);
+                else
+                        assert_se(r == 1);
+        }
+
+}
+
+static void setup_sequential(void) {
+        ManagedJournalFile *one, *two;
+        one = test_open("one.journal");
+        two = test_open("two.journal");
+        append_number(one, 1, NULL);
+        append_number(one, 2, NULL);
+        append_number(two, 3, NULL);
+        append_number(two, 4, NULL);
+        test_close(one);
+        test_close(two);
+}
+
+static void setup_interleaved(void) {
+        ManagedJournalFile *one, *two;
+        one = test_open("one.journal");
+        two = test_open("two.journal");
+        append_number(one, 1, NULL);
+        append_number(two, 2, NULL);
+        append_number(one, 3, NULL);
+        append_number(two, 4, NULL);
+        test_close(one);
+        test_close(two);
+}
+
+static void mkdtemp_chdir_chattr(char *path) {
+        assert_se(mkdtemp(path));
+        assert_se(chdir(path) >= 0);
+
+        /* Speed up things a bit on btrfs, ensuring that CoW is turned off for all files created in our
+         * directory during the test run */
+        (void) chattr_path(path, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
+}
+
+static void test_skip_one(void (*setup)(void)) {
+        char t[] = "/var/tmp/journal-skip-XXXXXX";
+        sd_journal *j;
+        int r;
+
+        mkdtemp_chdir_chattr(t);
+
+        setup();
+
+        /* Seek to head, iterate down.
+         */
+        assert_ret(sd_journal_open_directory(&j, t, 0));
+        assert_ret(sd_journal_seek_head(j));
+        assert_ret(sd_journal_next(j));
+        test_check_numbers_down(j, 4);
+        sd_journal_close(j);
+
+        /* Seek to tail, iterate up.
+         */
+        assert_ret(sd_journal_open_directory(&j, t, 0));
+        assert_ret(sd_journal_seek_tail(j));
+        assert_ret(sd_journal_previous(j));
+        test_check_numbers_up(j, 4);
+        sd_journal_close(j);
+
+        /* Seek to tail, skip to head, iterate down.
+         */
+        assert_ret(sd_journal_open_directory(&j, t, 0));
+        assert_ret(sd_journal_seek_tail(j));
+        assert_ret(r = sd_journal_previous_skip(j, 4));
+        assert_se(r == 4);
+        test_check_numbers_down(j, 4);
+        sd_journal_close(j);
+
+        /* Seek to head, skip to tail, iterate up.
+         */
+        assert_ret(sd_journal_open_directory(&j, t, 0));
+        assert_ret(sd_journal_seek_head(j));
+        assert_ret(r = sd_journal_next_skip(j, 4));
+        assert_se(r == 4);
+        test_check_numbers_up(j, 4);
+        sd_journal_close(j);
+
+        log_info("Done...");
+
+        if (arg_keep)
+                log_info("Not removing %s", t);
+        else {
+                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
+
+                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+        }
+
+        puts("------------------------------------------------------------");
+}
+
+TEST(skip) {
+        test_skip_one(setup_sequential);
+        test_skip_one(setup_interleaved);
+}
+
+static void test_sequence_numbers_one(void) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        char t[] = "/var/tmp/journal-seq-XXXXXX";
+        ManagedJournalFile *one, *two;
+        uint64_t seqnum = 0;
+        sd_id128_t seqnum_id;
+
+        m = mmap_cache_new();
+        assert_se(m != NULL);
+
+        mkdtemp_chdir_chattr(t);
+
+        assert_se(managed_journal_file_open(-1, "one.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644,
+                                            UINT64_MAX, NULL, m, NULL, NULL, &one) == 0);
+
+        append_number(one, 1, &seqnum);
+        printf("seqnum=%"PRIu64"\n", seqnum);
+        assert_se(seqnum == 1);
+        append_number(one, 2, &seqnum);
+        printf("seqnum=%"PRIu64"\n", seqnum);
+        assert_se(seqnum == 2);
+
+        assert_se(one->file->header->state == STATE_ONLINE);
+        assert_se(!sd_id128_equal(one->file->header->file_id, one->file->header->machine_id));
+        assert_se(!sd_id128_equal(one->file->header->file_id, one->file->header->boot_id));
+        assert_se(sd_id128_equal(one->file->header->file_id, one->file->header->seqnum_id));
+
+        memcpy(&seqnum_id, &one->file->header->seqnum_id, sizeof(sd_id128_t));
+
+        assert_se(managed_journal_file_open(-1, "two.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644,
+                                            UINT64_MAX, NULL, m, NULL, one, &two) == 0);
+
+        assert_se(two->file->header->state == STATE_ONLINE);
+        assert_se(!sd_id128_equal(two->file->header->file_id, one->file->header->file_id));
+        assert_se(sd_id128_equal(one->file->header->machine_id, one->file->header->machine_id));
+        assert_se(sd_id128_equal(one->file->header->boot_id, one->file->header->boot_id));
+        assert_se(sd_id128_equal(one->file->header->seqnum_id, one->file->header->seqnum_id));
+
+        append_number(two, 3, &seqnum);
+        printf("seqnum=%"PRIu64"\n", seqnum);
+        assert_se(seqnum == 3);
+        append_number(two, 4, &seqnum);
+        printf("seqnum=%"PRIu64"\n", seqnum);
+        assert_se(seqnum == 4);
+
+        test_close(two);
+
+        append_number(one, 5, &seqnum);
+        printf("seqnum=%"PRIu64"\n", seqnum);
+        assert_se(seqnum == 5);
+
+        append_number(one, 6, &seqnum);
+        printf("seqnum=%"PRIu64"\n", seqnum);
+        assert_se(seqnum == 6);
+
+        test_close(one);
+
+        /* If the machine-id is not initialized, the header file verification
+         * (which happens when re-opening a journal file) will fail. */
+        if (sd_id128_get_machine(NULL) >= 0) {
+                /* restart server */
+                seqnum = 0;
+
+                assert_se(managed_journal_file_open(-1, "two.journal", O_RDWR, JOURNAL_COMPRESS, 0,
+                                                    UINT64_MAX, NULL, m, NULL, NULL, &two) == 0);
+
+                assert_se(sd_id128_equal(two->file->header->seqnum_id, seqnum_id));
+
+                append_number(two, 7, &seqnum);
+                printf("seqnum=%"PRIu64"\n", seqnum);
+                assert_se(seqnum == 5);
+
+                /* So..., here we have the same seqnum in two files with the
+                 * same seqnum_id. */
+
+                test_close(two);
+        }
+
+        log_info("Done...");
+
+        if (arg_keep)
+                log_info("Not removing %s", t);
+        else {
+                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
+
+                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+        }
+}
+
+TEST(sequence_numbers) {
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1) >= 0);
+        test_sequence_numbers_one();
+
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1) >= 0);
+        test_sequence_numbers_one();
+}
+
+static int intro(void) {
+        /* managed_journal_file_open requires a valid machine id */
+        if (access("/etc/machine-id", F_OK) != 0)
+                return log_tests_skipped("/etc/machine-id not found");
+
+        arg_keep = saved_argc > 1;
+
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/journal/test-journal-stream.c b/src/journal/test-journal-stream.c
new file mode 100644
index 0000000..9f4494c
--- /dev/null
+++ b/src/journal/test-journal-stream.c
@@ -0,0 +1,201 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "sd-journal.h"
+
+#include "alloc-util.h"
+#include "chattr-util.h"
+#include "io-util.h"
+#include "journal-internal.h"
+#include "log.h"
+#include "macro.h"
+#include "managed-journal-file.h"
+#include "parse-util.h"
+#include "rm-rf.h"
+#include "tests.h"
+
+#define N_ENTRIES 200
+
+static void verify_contents(sd_journal *j, unsigned skip) {
+        unsigned i;
+
+        assert_se(j);
+
+        i = 0;
+        SD_JOURNAL_FOREACH(j) {
+                const void *d;
+                char *k, *c;
+                size_t l;
+                unsigned u = 0;
+
+                assert_se(sd_journal_get_cursor(j, &k) >= 0);
+                printf("cursor: %s\n", k);
+                free(k);
+
+                assert_se(sd_journal_get_data(j, "MAGIC", &d, &l) >= 0);
+                printf("\t%.*s\n", (int) l, (const char*) d);
+
+                assert_se(sd_journal_get_data(j, "NUMBER", &d, &l) >= 0);
+                assert_se(k = strndup(d, l));
+                printf("\t%s\n", k);
+
+                if (skip > 0) {
+                        assert_se(safe_atou(k + 7, &u) >= 0);
+                        assert_se(i == u);
+                        i += skip;
+                }
+
+                free(k);
+
+                assert_se(sd_journal_get_cursor(j, &c) >= 0);
+                assert_se(sd_journal_test_cursor(j, c) > 0);
+                free(c);
+        }
+
+        if (skip > 0)
+                assert_se(i == N_ENTRIES);
+}
+
+static void run_test(void) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        ManagedJournalFile *one, *two, *three;
+        char t[] = "/var/tmp/journal-stream-XXXXXX";
+        unsigned i;
+        _cleanup_(sd_journal_closep) sd_journal *j = NULL;
+        char *z;
+        const void *data;
+        size_t l;
+        dual_timestamp previous_ts = DUAL_TIMESTAMP_NULL;
+
+        m = mmap_cache_new();
+        assert_se(m != NULL);
+
+        assert_se(mkdtemp(t));
+        assert_se(chdir(t) >= 0);
+        (void) chattr_path(t, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
+
+        assert_se(managed_journal_file_open(-1, "one.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0666, UINT64_MAX, NULL, m, NULL, NULL, &one) == 0);
+        assert_se(managed_journal_file_open(-1, "two.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0666, UINT64_MAX, NULL, m, NULL, NULL, &two) == 0);
+        assert_se(managed_journal_file_open(-1, "three.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0666, UINT64_MAX, NULL, m, NULL, NULL, &three) == 0);
+
+        for (i = 0; i < N_ENTRIES; i++) {
+                char *p, *q;
+                dual_timestamp ts;
+                struct iovec iovec[2];
+
+                dual_timestamp_get(&ts);
+
+                if (ts.monotonic <= previous_ts.monotonic)
+                        ts.monotonic = previous_ts.monotonic + 1;
+
+                if (ts.realtime <= previous_ts.realtime)
+                        ts.realtime = previous_ts.realtime + 1;
+
+                previous_ts = ts;
+
+                assert_se(asprintf(&p, "NUMBER=%u", i) >= 0);
+                iovec[0] = IOVEC_MAKE(p, strlen(p));
+
+                assert_se(asprintf(&q, "MAGIC=%s", i % 5 == 0 ? "quux" : "waldo") >= 0);
+
+                iovec[1] = IOVEC_MAKE(q, strlen(q));
+
+                if (i % 10 == 0)
+                        assert_se(journal_file_append_entry(three->file, &ts, NULL, iovec, 2, NULL, NULL, NULL) == 0);
+                else {
+                        if (i % 3 == 0)
+                                assert_se(journal_file_append_entry(two->file, &ts, NULL, iovec, 2, NULL, NULL, NULL) == 0);
+
+                        assert_se(journal_file_append_entry(one->file, &ts, NULL, iovec, 2, NULL, NULL, NULL) == 0);
+                }
+
+                free(p);
+                free(q);
+        }
+
+        (void) managed_journal_file_close(one);
+        (void) managed_journal_file_close(two);
+        (void) managed_journal_file_close(three);
+
+        assert_se(sd_journal_open_directory(&j, t, 0) >= 0);
+
+        assert_se(sd_journal_add_match(j, "MAGIC=quux", 0) >= 0);
+        SD_JOURNAL_FOREACH_BACKWARDS(j) {
+                _cleanup_free_ char *c;
+
+                assert_se(sd_journal_get_data(j, "NUMBER", &data, &l) >= 0);
+                printf("\t%.*s\n", (int) l, (const char*) data);
+
+                assert_se(sd_journal_get_cursor(j, &c) >= 0);
+                assert_se(sd_journal_test_cursor(j, c) > 0);
+        }
+
+        SD_JOURNAL_FOREACH(j) {
+                _cleanup_free_ char *c;
+
+                assert_se(sd_journal_get_data(j, "NUMBER", &data, &l) >= 0);
+                printf("\t%.*s\n", (int) l, (const char*) data);
+
+                assert_se(sd_journal_get_cursor(j, &c) >= 0);
+                assert_se(sd_journal_test_cursor(j, c) > 0);
+        }
+
+        sd_journal_flush_matches(j);
+
+        verify_contents(j, 1);
+
+        printf("NEXT TEST\n");
+        assert_se(sd_journal_add_match(j, "MAGIC=quux", 0) >= 0);
+
+        assert_se(z = journal_make_match_string(j));
+        printf("resulting match expression is: %s\n", z);
+        free(z);
+
+        verify_contents(j, 5);
+
+        printf("NEXT TEST\n");
+        sd_journal_flush_matches(j);
+        assert_se(sd_journal_add_match(j, "MAGIC=waldo", 0) >= 0);
+        assert_se(sd_journal_add_match(j, "NUMBER=10", 0) >= 0);
+        assert_se(sd_journal_add_match(j, "NUMBER=11", 0) >= 0);
+        assert_se(sd_journal_add_match(j, "NUMBER=12", 0) >= 0);
+
+        assert_se(z = journal_make_match_string(j));
+        printf("resulting match expression is: %s\n", z);
+        free(z);
+
+        verify_contents(j, 0);
+
+        assert_se(sd_journal_query_unique(j, "NUMBER") >= 0);
+        SD_JOURNAL_FOREACH_UNIQUE(j, data, l)
+                printf("%.*s\n", (int) l, (const char*) data);
+
+        assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+}
+
+int main(int argc, char *argv[]) {
+
+        /* managed_journal_file_open requires a valid machine id */
+        if (access("/etc/machine-id", F_OK) != 0)
+                return log_tests_skipped("/etc/machine-id not found");
+
+        test_setup_logging(LOG_DEBUG);
+
+        /* Run this test multiple times with different configurations of features. */
+
+        assert_se(setenv("SYSTEMD_JOURNAL_KEYED_HASH", "0", 1) >= 0);
+        run_test();
+
+        assert_se(setenv("SYSTEMD_JOURNAL_KEYED_HASH", "1", 1) >= 0);
+        run_test();
+
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1) >= 0);
+        run_test();
+
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1) >= 0);
+        run_test();
+
+        return 0;
+}
diff --git a/src/journal/test-journal-syslog.c b/src/journal/test-journal-syslog.c
index 33f4129..84cfcef 100644
--- a/src/journal/test-journal-syslog.c
+++ b/src/journal/test-journal-syslog.c
@@ -5,8 +5,9 @@
 #include "macro.h"
 #include "string-util.h"
 #include "syslog-util.h"
+#include "tests.h"
 
-static void test_syslog_parse_identifier(const char *str,
+static void test_syslog_parse_identifier_one(const char *str,
                                          const char *ident, const char *pid, const char *rest, int ret) {
         const char *buf = str;
         _cleanup_free_ char *ident2 = NULL, *pid2 = NULL;
@@ -20,40 +21,50 @@
         assert_se(streq(buf, rest));
 }
 
-static void test_syslog_parse_priority(const char *str, int priority, int ret) {
-        const char *buf = str;
+static void test_syslog_parse_priority_one(const char *str, bool with_facility, int priority, int ret) {
         int priority2 = 0, ret2;
 
-        ret2 = syslog_parse_priority(&buf, &priority2, false);
+        ret2 = syslog_parse_priority(&str, &priority2, with_facility);
 
         assert_se(ret == ret2);
         if (ret2 == 1)
                 assert_se(priority == priority2);
 }
 
-int main(void) {
-        test_syslog_parse_identifier("pidu[111]: xxx", "pidu", "111", "xxx", 11);
-        test_syslog_parse_identifier("pidu: xxx", "pidu", NULL, "xxx", 6);
-        test_syslog_parse_identifier("pidu:  xxx", "pidu", NULL, " xxx", 6);
-        test_syslog_parse_identifier("pidu xxx", NULL, NULL, "pidu xxx", 0);
-        test_syslog_parse_identifier("   pidu xxx", NULL, NULL, "   pidu xxx", 0);
-        test_syslog_parse_identifier("", NULL, NULL, "", 0);
-        test_syslog_parse_identifier("  ", NULL, NULL, "  ", 0);
-        test_syslog_parse_identifier(":", "", NULL, "", 1);
-        test_syslog_parse_identifier(":  ", "", NULL, " ", 2);
-        test_syslog_parse_identifier(" :", "", NULL, "", 2);
-        test_syslog_parse_identifier("   pidu:", "pidu", NULL, "", 8);
-        test_syslog_parse_identifier("pidu:", "pidu", NULL, "", 5);
-        test_syslog_parse_identifier("pidu: ", "pidu", NULL, "", 6);
-        test_syslog_parse_identifier("pidu : ", NULL, NULL, "pidu : ", 0);
-
-        test_syslog_parse_priority("<>", 0, 0);
-        test_syslog_parse_priority("<>aaa", 0, 0);
-        test_syslog_parse_priority("<aaaa>", 0, 0);
-        test_syslog_parse_priority("<aaaa>aaa", 0, 0);
-        test_syslog_parse_priority(" <aaaa>", 0, 0);
-        test_syslog_parse_priority(" <aaaa>aaa", 0, 0);
-        /* TODO: add test cases of valid priorities */
-
-        return 0;
+TEST(syslog_parse_identifier) {
+        test_syslog_parse_identifier_one("pidu[111]: xxx", "pidu", "111", "xxx", 11);
+        test_syslog_parse_identifier_one("pidu: xxx", "pidu", NULL, "xxx", 6);
+        test_syslog_parse_identifier_one("pidu:  xxx", "pidu", NULL, " xxx", 6);
+        test_syslog_parse_identifier_one("pidu xxx", NULL, NULL, "pidu xxx", 0);
+        test_syslog_parse_identifier_one("   pidu xxx", NULL, NULL, "   pidu xxx", 0);
+        test_syslog_parse_identifier_one("", NULL, NULL, "", 0);
+        test_syslog_parse_identifier_one("  ", NULL, NULL, "  ", 0);
+        test_syslog_parse_identifier_one(":", "", NULL, "", 1);
+        test_syslog_parse_identifier_one(":  ", "", NULL, " ", 2);
+        test_syslog_parse_identifier_one(" :", "", NULL, "", 2);
+        test_syslog_parse_identifier_one("   pidu:", "pidu", NULL, "", 8);
+        test_syslog_parse_identifier_one("pidu:", "pidu", NULL, "", 5);
+        test_syslog_parse_identifier_one("pidu: ", "pidu", NULL, "", 6);
+        test_syslog_parse_identifier_one("pidu : ", NULL, NULL, "pidu : ", 0);
 }
+
+TEST(syslog_parse_priority) {
+        test_syslog_parse_priority_one("", false, 0, 0);
+        test_syslog_parse_priority_one("<>", false, 0, 0);
+        test_syslog_parse_priority_one("<>aaa", false, 0, 0);
+        test_syslog_parse_priority_one("<aaaa>", false, 0, 0);
+        test_syslog_parse_priority_one("<aaaa>aaa", false, 0, 0);
+        test_syslog_parse_priority_one(" <aaaa>", false, 0, 0);
+        test_syslog_parse_priority_one(" <aaaa>aaa", false, 0, 0);
+        test_syslog_parse_priority_one(" <aaaa>aaa", false, 0, 0);
+        test_syslog_parse_priority_one(" <1>", false, 0, 0);
+        test_syslog_parse_priority_one("<1>", false, 1, 1);
+        test_syslog_parse_priority_one("<7>", false, 7, 1);
+        test_syslog_parse_priority_one("<8>", false, 0, 0);
+        test_syslog_parse_priority_one("<9>", true, 9, 1);
+        test_syslog_parse_priority_one("<22>", true, 22, 1);
+        test_syslog_parse_priority_one("<111>", false, 0, 0);
+        test_syslog_parse_priority_one("<111>", true, 111, 1);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/journal/test-journal-verify.c b/src/journal/test-journal-verify.c
new file mode 100644
index 0000000..0c58d05
--- /dev/null
+++ b/src/journal/test-journal-verify.c
@@ -0,0 +1,152 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "chattr-util.h"
+#include "fd-util.h"
+#include "io-util.h"
+#include "journal-verify.h"
+#include "log.h"
+#include "managed-journal-file.h"
+#include "mmap-cache.h"
+#include "rm-rf.h"
+#include "terminal-util.h"
+#include "tests.h"
+
+#define N_ENTRIES 6000
+#define RANDOM_RANGE 77
+
+static void bit_toggle(const char *fn, uint64_t p) {
+        uint8_t b;
+        ssize_t r;
+        int fd;
+
+        fd = open(fn, O_RDWR|O_CLOEXEC);
+        assert_se(fd >= 0);
+
+        r = pread(fd, &b, 1, p/8);
+        assert_se(r == 1);
+
+        b ^= 1 << (p % 8);
+
+        r = pwrite(fd, &b, 1, p/8);
+        assert_se(r == 1);
+
+        safe_close(fd);
+}
+
+static int raw_verify(const char *fn, const char *verification_key) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        JournalFile *f;
+        int r;
+
+        m = mmap_cache_new();
+        assert_se(m != NULL);
+
+        r = journal_file_open(-1, fn, O_RDONLY, JOURNAL_COMPRESS|(verification_key ? JOURNAL_SEAL : 0), 0666, UINT64_MAX, NULL, m, NULL, &f);
+        if (r < 0)
+                return r;
+
+        r = journal_file_verify(f, verification_key, NULL, NULL, NULL, false);
+        (void) journal_file_close(f);
+
+        return r;
+}
+
+static int run_test(int argc, char *argv[]) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        char t[] = "/var/tmp/journal-XXXXXX";
+        unsigned n;
+        JournalFile *f;
+        ManagedJournalFile *df;
+        const char *verification_key = argv[1];
+        usec_t from = 0, to = 0, total = 0;
+        struct stat st;
+        uint64_t p;
+
+        m = mmap_cache_new();
+        assert_se(m != NULL);
+
+        /* managed_journal_file_open requires a valid machine id */
+        if (access("/etc/machine-id", F_OK) != 0)
+                return log_tests_skipped("/etc/machine-id not found");
+
+        test_setup_logging(LOG_DEBUG);
+
+        assert_se(mkdtemp(t));
+        assert_se(chdir(t) >= 0);
+        (void) chattr_path(t, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
+
+        log_info("Generating...");
+
+        assert_se(managed_journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS|(verification_key ? JOURNAL_SEAL : 0), 0666, UINT64_MAX, NULL, m, NULL, NULL, &df) == 0);
+
+        for (n = 0; n < N_ENTRIES; n++) {
+                struct iovec iovec;
+                struct dual_timestamp ts;
+                char *test;
+
+                dual_timestamp_get(&ts);
+
+                assert_se(asprintf(&test, "RANDOM=%li", random() % RANDOM_RANGE));
+
+                iovec = IOVEC_MAKE_STRING(test);
+
+                assert_se(journal_file_append_entry(df->file, &ts, NULL, &iovec, 1, NULL, NULL, NULL) == 0);
+
+                free(test);
+        }
+
+        (void) managed_journal_file_close(df);
+
+        log_info("Verifying...");
+
+        assert_se(journal_file_open(-1, "test.journal", O_RDONLY, JOURNAL_COMPRESS|(verification_key ? JOURNAL_SEAL: 0), 0666, UINT64_MAX, NULL, m, NULL, &f) == 0);
+        /* journal_file_print_header(f); */
+        journal_file_dump(f);
+
+        assert_se(journal_file_verify(f, verification_key, &from, &to, &total, true) >= 0);
+
+        if (verification_key && JOURNAL_HEADER_SEALED(f->header))
+                log_info("=> Validated from %s to %s, %s missing",
+                         FORMAT_TIMESTAMP(from),
+                         FORMAT_TIMESTAMP(to),
+                         FORMAT_TIMESPAN(total > to ? total - to : 0, 0));
+
+        (void) journal_file_close(f);
+
+        if (verification_key) {
+                log_info("Toggling bits...");
+
+                assert_se(stat("test.journal", &st) >= 0);
+
+                for (p = 38448*8+0; p < ((uint64_t) st.st_size * 8); p ++) {
+                        bit_toggle("test.journal", p);
+
+                        log_info("[ %"PRIu64"+%"PRIu64"]", p / 8, p % 8);
+
+                        if (raw_verify("test.journal", verification_key) >= 0)
+                                log_notice(ANSI_HIGHLIGHT_RED ">>>> %"PRIu64" (bit %"PRIu64") can be toggled without detection." ANSI_NORMAL, p / 8, p % 8);
+
+                        bit_toggle("test.journal", p);
+                }
+        }
+
+        log_info("Exiting...");
+
+        assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+
+        return 0;
+}
+
+int main(int argc, char *argv[]) {
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1) >= 0);
+        run_test(argc, argv);
+
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1) >= 0);
+        run_test(argc, argv);
+
+        return 0;
+}
diff --git a/src/journal/test-journal.c b/src/journal/test-journal.c
new file mode 100644
index 0000000..889673c
--- /dev/null
+++ b/src/journal/test-journal.c
@@ -0,0 +1,280 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "chattr-util.h"
+#include "io-util.h"
+#include "journal-authenticate.h"
+#include "journal-vacuum.h"
+#include "log.h"
+#include "managed-journal-file.h"
+#include "rm-rf.h"
+#include "tests.h"
+
+static bool arg_keep = false;
+
+static void mkdtemp_chdir_chattr(char *path) {
+        assert_se(mkdtemp(path));
+        assert_se(chdir(path) >= 0);
+
+        /* Speed up things a bit on btrfs, ensuring that CoW is turned off for all files created in our
+         * directory during the test run */
+        (void) chattr_path(path, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
+}
+
+static void test_non_empty_one(void) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        dual_timestamp ts;
+        ManagedJournalFile *f;
+        struct iovec iovec;
+        static const char test[] = "TEST1=1", test2[] = "TEST2=2";
+        Object *o, *d;
+        uint64_t p;
+        sd_id128_t fake_boot_id;
+        char t[] = "/var/tmp/journal-XXXXXX";
+
+        m = mmap_cache_new();
+        assert_se(m != NULL);
+
+        mkdtemp_chdir_chattr(t);
+
+        assert_se(managed_journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS|JOURNAL_SEAL, 0666, UINT64_MAX, NULL, m, NULL, NULL, &f) == 0);
+
+        assert_se(dual_timestamp_get(&ts));
+        assert_se(sd_id128_randomize(&fake_boot_id) == 0);
+
+        iovec = IOVEC_MAKE_STRING(test);
+        assert_se(journal_file_append_entry(f->file, &ts, NULL, &iovec, 1, NULL, NULL, NULL) == 0);
+
+        iovec = IOVEC_MAKE_STRING(test2);
+        assert_se(journal_file_append_entry(f->file, &ts, NULL, &iovec, 1, NULL, NULL, NULL) == 0);
+
+        iovec = IOVEC_MAKE_STRING(test);
+        assert_se(journal_file_append_entry(f->file, &ts, &fake_boot_id, &iovec, 1, NULL, NULL, NULL) == 0);
+
+#if HAVE_GCRYPT
+        journal_file_append_tag(f->file);
+#endif
+        journal_file_dump(f->file);
+
+        assert_se(journal_file_next_entry(f->file, 0, DIRECTION_DOWN, &o, &p) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 1);
+
+        assert_se(journal_file_next_entry(f->file, p, DIRECTION_DOWN, &o, &p) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 2);
+
+        assert_se(journal_file_next_entry(f->file, p, DIRECTION_DOWN, &o, &p) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 3);
+        assert_se(sd_id128_equal(o->entry.boot_id, fake_boot_id));
+
+        assert_se(journal_file_next_entry(f->file, p, DIRECTION_DOWN, &o, &p) == 0);
+
+        assert_se(journal_file_next_entry(f->file, 0, DIRECTION_DOWN, &o, &p) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 1);
+
+        assert_se(journal_file_find_data_object(f->file, test, strlen(test), &d, NULL) == 1);
+        assert_se(journal_file_next_entry_for_data(f->file, d, DIRECTION_DOWN, &o, NULL) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 1);
+
+        assert_se(journal_file_next_entry_for_data(f->file, d, DIRECTION_UP, &o, NULL) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 3);
+
+        assert_se(journal_file_find_data_object(f->file, test2, strlen(test2), &d, NULL) == 1);
+        assert_se(journal_file_next_entry_for_data(f->file, d, DIRECTION_UP, &o, NULL) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 2);
+
+        assert_se(journal_file_next_entry_for_data(f->file, d, DIRECTION_DOWN, &o, NULL) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 2);
+
+        assert_se(journal_file_find_data_object(f->file, "quux", 4, &d, NULL) == 0);
+
+        assert_se(journal_file_move_to_entry_by_seqnum(f->file, 1, DIRECTION_DOWN, &o, NULL) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 1);
+
+        assert_se(journal_file_move_to_entry_by_seqnum(f->file, 3, DIRECTION_DOWN, &o, NULL) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 3);
+
+        assert_se(journal_file_move_to_entry_by_seqnum(f->file, 2, DIRECTION_DOWN, &o, NULL) == 1);
+        assert_se(le64toh(o->entry.seqnum) == 2);
+
+        assert_se(journal_file_move_to_entry_by_seqnum(f->file, 10, DIRECTION_DOWN, &o, NULL) == 0);
+
+        managed_journal_file_rotate(&f, m, JOURNAL_SEAL|JOURNAL_COMPRESS, UINT64_MAX, NULL);
+        managed_journal_file_rotate(&f, m, JOURNAL_SEAL|JOURNAL_COMPRESS, UINT64_MAX, NULL);
+
+        (void) managed_journal_file_close(f);
+
+        log_info("Done...");
+
+        if (arg_keep)
+                log_info("Not removing %s", t);
+        else {
+                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
+
+                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+        }
+
+        puts("------------------------------------------------------------");
+}
+
+TEST(non_empty) {
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1) >= 0);
+        test_non_empty_one();
+
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1) >= 0);
+        test_non_empty_one();
+}
+
+static void test_empty_one(void) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        ManagedJournalFile *f1, *f2, *f3, *f4;
+        char t[] = "/var/tmp/journal-XXXXXX";
+
+        m = mmap_cache_new();
+        assert_se(m != NULL);
+
+        mkdtemp_chdir_chattr(t);
+
+        assert_se(managed_journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, 0, 0666, UINT64_MAX, NULL, m, NULL, NULL, &f1) == 0);
+        assert_se(managed_journal_file_open(-1, "test-compress.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0666, UINT64_MAX, NULL, m, NULL, NULL, &f2) == 0);
+        assert_se(managed_journal_file_open(-1, "test-seal.journal", O_RDWR|O_CREAT, JOURNAL_SEAL, 0666, UINT64_MAX, NULL, m, NULL, NULL, &f3) == 0);
+        assert_se(managed_journal_file_open(-1, "test-seal-compress.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS|JOURNAL_SEAL, 0666, UINT64_MAX, NULL, m, NULL, NULL, &f4) == 0);
+
+        journal_file_print_header(f1->file);
+        puts("");
+        journal_file_print_header(f2->file);
+        puts("");
+        journal_file_print_header(f3->file);
+        puts("");
+        journal_file_print_header(f4->file);
+        puts("");
+
+        log_info("Done...");
+
+        if (arg_keep)
+                log_info("Not removing %s", t);
+        else {
+                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
+
+                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+        }
+
+        (void) managed_journal_file_close(f1);
+        (void) managed_journal_file_close(f2);
+        (void) managed_journal_file_close(f3);
+        (void) managed_journal_file_close(f4);
+}
+
+TEST(empty) {
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1) >= 0);
+        test_empty_one();
+
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1) >= 0);
+        test_empty_one();
+}
+
+#if HAVE_COMPRESSION
+static bool check_compressed(uint64_t compress_threshold, uint64_t data_size) {
+        _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL;
+        dual_timestamp ts;
+        ManagedJournalFile *f;
+        struct iovec iovec;
+        Object *o;
+        uint64_t p;
+        char t[] = "/var/tmp/journal-XXXXXX";
+        char data[2048] = "FIELD=";
+        bool is_compressed;
+        int r;
+
+        assert_se(data_size <= sizeof(data));
+
+        m = mmap_cache_new();
+        assert_se(m != NULL);
+
+        mkdtemp_chdir_chattr(t);
+
+        assert_se(managed_journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS|JOURNAL_SEAL, 0666, compress_threshold, NULL, m, NULL, NULL, &f) == 0);
+
+        dual_timestamp_get(&ts);
+
+        iovec = IOVEC_MAKE(data, data_size);
+        assert_se(journal_file_append_entry(f->file, &ts, NULL, &iovec, 1, NULL, NULL, NULL) == 0);
+
+#if HAVE_GCRYPT
+        journal_file_append_tag(f->file);
+#endif
+        journal_file_dump(f->file);
+
+        /* We have to partially reimplement some of the dump logic, because the normal next_entry does the
+         * decompression for us. */
+        p = le64toh(f->file->header->header_size);
+        for (;;) {
+                r = journal_file_move_to_object(f->file, OBJECT_UNUSED, p, &o);
+                assert_se(r == 0);
+                if (o->object.type == OBJECT_DATA)
+                        break;
+
+                assert_se(p < le64toh(f->file->header->tail_object_offset));
+                p = p + ALIGN64(le64toh(o->object.size));
+        }
+
+        is_compressed = COMPRESSION_FROM_OBJECT(o) != COMPRESSION_NONE;
+
+        (void) managed_journal_file_close(f);
+
+        log_info("Done...");
+
+        if (arg_keep)
+                log_info("Not removing %s", t);
+        else {
+                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
+
+                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+        }
+
+        puts("------------------------------------------------------------");
+
+        return is_compressed;
+}
+
+static void test_min_compress_size_one(void) {
+        /* Note that XZ will actually fail to compress anything under 80 bytes, so you have to choose the limits
+         * carefully */
+
+        /* DEFAULT_MIN_COMPRESS_SIZE is 512 */
+        assert_se(!check_compressed(UINT64_MAX, 255));
+        assert_se(check_compressed(UINT64_MAX, 513));
+
+        /* compress everything */
+        assert_se(check_compressed(0, 96));
+        assert_se(check_compressed(8, 96));
+
+        /* Ensure we don't try to compress less than 8 bytes */
+        assert_se(!check_compressed(0, 7));
+
+        /* check boundary conditions */
+        assert_se(check_compressed(256, 256));
+        assert_se(!check_compressed(256, 255));
+}
+
+TEST(min_compress_size) {
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1) >= 0);
+        test_min_compress_size_one();
+
+        assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1) >= 0);
+        test_min_compress_size_one();
+}
+#endif
+
+static int intro(void) {
+        arg_keep = saved_argc > 1;
+
+        /* managed_journal_file_open requires a valid machine id */
+        if (access("/etc/machine-id", F_OK) != 0)
+                return log_tests_skipped("/etc/machine-id not found");
+
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/kernel-install/00-entry-directory.install b/src/kernel-install/00-entry-directory.install
deleted file mode 100644
index ab616b2..0000000
--- a/src/kernel-install/00-entry-directory.install
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env bash
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
-# ex: ts=8 sw=4 sts=4 et filetype=sh
-# SPDX-License-Identifier: LGPL-2.1-or-later
-#
-# This file is part of systemd.
-#
-# systemd is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
-#
-# systemd is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
-
-COMMAND="$1"
-KERNEL_VERSION="$2"
-ENTRY_DIR_ABS="$3"
-KERNEL_IMAGE="$4"
-INITRD_OPTIONS_START="5"
-
-if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
-    exit 0
-fi
-
-if [[ $COMMAND != add ]]; then
-    exit 0
-fi
-
-# If the boot dir exists (e.g. $ESP/<machine-id>),
-# create the entry directory ($ESP/<machine-id>/<kernel-version>).
-# This is the only function of this plugin.
-MACHINE_ID_DIR="${ENTRY_DIR_ABS%/*}"
-if ! [ -d "$MACHINE_ID_DIR" ]; then
-    exit 0
-fi
-
-if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
-    echo "+mkdir -v -p $ENTRY_DIR_ABS"
-    exec mkdir -v -p "$ENTRY_DIR_ABS"
-else
-    exec mkdir -p "$ENTRY_DIR_ABS"
-fi
diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install
old mode 100644
new mode 100755
index fd00c43..88f858f
--- a/src/kernel-install/50-depmod.install
+++ b/src/kernel-install/50-depmod.install
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 # SPDX-License-Identifier: LGPL-2.1-or-later
@@ -16,28 +16,38 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
 
-COMMAND="$1"
-KERNEL_VERSION="$2"
-ENTRY_DIR_ABS="$3"
-KERNEL_IMAGE="$4"
-INITRD_OPTIONS_START="5"
+set -e
 
-[[ $KERNEL_VERSION ]] || exit 1
+COMMAND="${1:?}"
+KERNEL_VERSION="${2:?}"
+
+[ -w "/lib/modules" ] || exit 0
 
 case "$COMMAND" in
     add)
-        [[ -d "/lib/modules/${KERNEL_VERSION}/kernel" ]] || exit 0
-        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
-            echo "Running depmod -a ${KERNEL_VERSION}"
-        exec depmod -a "${KERNEL_VERSION}"
+        [ -d "/lib/modules/$KERNEL_VERSION/kernel" ] || exit 0
+        command -v depmod >/dev/null || exit 0
+        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+depmod -a $KERNEL_VERSION"
+        exec depmod -a "$KERNEL_VERSION"
         ;;
     remove)
         [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
             echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files"
-        exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin{,.alias}.bin,dep{,.bin},devname,softdep,symbols{,.bin}}
+        exec rm -f \
+            "/lib/modules/$KERNEL_VERSION/modules.alias" \
+            "/lib/modules/$KERNEL_VERSION/modules.alias.bin" \
+            "/lib/modules/$KERNEL_VERSION/modules.builtin.bin" \
+            "/lib/modules/$KERNEL_VERSION/modules.builtin.alias.bin" \
+            "/lib/modules/$KERNEL_VERSION/modules.dep" \
+            "/lib/modules/$KERNEL_VERSION/modules.dep.bin" \
+            "/lib/modules/$KERNEL_VERSION/modules.devname" \
+            "/lib/modules/$KERNEL_VERSION/modules.softdep" \
+            "/lib/modules/$KERNEL_VERSION/modules.symbols" \
+            "/lib/modules/$KERNEL_VERSION/modules.symbols.bin"
         ;;
     *)
         exit 0
+        ;;
 esac
diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
deleted file mode 100644
index 9f0d61c..0000000
--- a/src/kernel-install/90-loaderentry.install
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/env bash
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
-# ex: ts=8 sw=4 sts=4 et filetype=sh
-# SPDX-License-Identifier: LGPL-2.1-or-later
-#
-# This file is part of systemd.
-#
-# systemd is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
-#
-# systemd is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
-
-COMMAND="$1"
-KERNEL_VERSION="$2"
-ENTRY_DIR_ABS="$3"
-KERNEL_IMAGE="$4"
-INITRD_OPTIONS_START="5"
-
-if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
-    exit 0
-fi
-
-if ! [[ -d "$ENTRY_DIR_ABS" ]]; then
-    exit 0
-fi
-
-MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
-
-BOOT_ROOT=${ENTRY_DIR_ABS%/$MACHINE_ID/$KERNEL_VERSION}
-BOOT_MNT=$(stat -c %m $BOOT_ROOT)
-if [[ $BOOT_MNT == '/' ]]; then
-    ENTRY_DIR=$ENTRY_DIR_ABS
-else
-    ENTRY_DIR=${ENTRY_DIR_ABS#$BOOT_MNT}
-fi
-
-if [[ $COMMAND == remove ]]; then
-    rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"
-    rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
-    exit 0
-fi
-
-if ! [[ $COMMAND == add ]]; then
-    exit 1
-fi
-
-if ! [[ $KERNEL_IMAGE ]]; then
-    exit 1
-fi
-
-if [[ -f /etc/os-release ]]; then
-    . /etc/os-release
-elif [[ -f /usr/lib/os-release ]]; then
-    . /usr/lib/os-release
-fi
-
-if ! [[ $PRETTY_NAME ]]; then
-    PRETTY_NAME="Linux $KERNEL_VERSION"
-fi
-
-if [[ -f /etc/kernel/cmdline ]]; then
-    read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
-elif [[ -f /usr/lib/kernel/cmdline ]]; then
-    read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
-else
-    declare -a BOOT_OPTIONS
-
-    read -r -d '' -a line < /proc/cmdline
-    for i in "${line[@]}"; do
-        [[ "${i#initrd=*}" != "$i" ]] && continue
-        [[ "${i#BOOT_IMAGE=*}" != "$i" ]] && continue
-        BOOT_OPTIONS+=("$i")
-    done
-fi
-
-if [[ -f /etc/kernel/tries ]]; then
-    read -r TRIES </etc/kernel/tries
-    if ! [[ "$TRIES" =~ ^[0-9]+$ ]] ; then
-        echo "/etc/kernel/tries does not contain an integer." >&2
-        exit 1
-    fi
-    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+$TRIES.conf"
-else
-    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"
-fi
-
-install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
-    echo "Could not copy '$KERNEL_IMAGE' to '$ENTRY_DIR_ABS/linux'." >&2
-    exit 1
-}
-
-INITRD_OPTIONS=( "${@:${INITRD_OPTIONS_START}}" )
-
-for initrd in "${INITRD_OPTIONS[@]}"; do
-    if [[ -f "${initrd}" ]]; then
-        initrd_basename="$(basename ${initrd})"
-        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
-            echo "Installing $ENTRY_DIR_ABS/${initrd_basename}"
-        install -g root -o root -m 0644 "${initrd}" "$ENTRY_DIR_ABS/${initrd_basename}" || {
-            echo "Could not copy '${initrd}' to '$ENTRY_DIR_ABS/${initrd_basename}'." >&2
-            exit 1
-        }
-    fi
-done
-
-# If no initrd option is supplied, fall back to "initrd" which is
-# the name used by dracut when generating it in its kernel-install hook
-[[ ${#INITRD_OPTIONS[@]} == 0 ]] && INITRD_OPTIONS=( initrd )
-
-mkdir -p "${LOADER_ENTRY%/*}" || {
-    echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
-    exit 1
-}
-
-[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
-    echo "Creating $LOADER_ENTRY"
-{
-    echo "title      $PRETTY_NAME"
-    echo "version    $KERNEL_VERSION"
-    echo "machine-id $MACHINE_ID"
-    echo "options    ${BOOT_OPTIONS[*]}"
-    echo "linux      $ENTRY_DIR/linux"
-    for initrd in "${INITRD_OPTIONS[@]}"; do
-        [[ -f $ENTRY_DIR_ABS/$(basename ${initrd}) ]] && \
-            echo "initrd     $ENTRY_DIR/$(basename ${initrd})"
-    done
-    :
-} > "$LOADER_ENTRY" || {
-    echo "Could not create loader entry '$LOADER_ENTRY'." >&2
-    exit 1
-}
-exit 0
diff --git a/src/kernel-install/90-loaderentry.install.in b/src/kernel-install/90-loaderentry.install.in
new file mode 100755
index 0000000..e8e8cf3
--- /dev/null
+++ b/src/kernel-install/90-loaderentry.install.in
@@ -0,0 +1,169 @@
+#!/bin/sh
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
+
+set -e
+
+COMMAND="${1:?}"
+KERNEL_VERSION="${2:?}"
+ENTRY_DIR_ABS="${3:?}"
+KERNEL_IMAGE="$4"
+INITRD_OPTIONS_SHIFT=4
+
+[ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0
+
+MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
+ENTRY_TOKEN="$KERNEL_INSTALL_ENTRY_TOKEN"
+BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT"
+
+[ -n "$BOOT_MNT" ] || BOOT_MNT="$(stat -c %m "$BOOT_ROOT")"
+if [ "$BOOT_MNT" = '/' ]; then
+    ENTRY_DIR="$ENTRY_DIR_ABS"
+else
+    ENTRY_DIR="${ENTRY_DIR_ABS#"$BOOT_MNT"}"
+fi
+
+KERNEL_DEST="$ENTRY_DIR_ABS/linux"
+KERNEL_ENTRY="$ENTRY_DIR/linux"
+LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf"
+
+case "$COMMAND" in
+    remove)
+        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+            echo "Removing ${LOADER_ENTRY%.conf}*.conf"
+        exec rm -f \
+            "$LOADER_ENTRY" \
+            "${LOADER_ENTRY%.conf}"*".conf"
+        ;;
+    add)
+        ;;
+    *)
+        exit 0
+        ;;
+esac
+
+if [ -f /etc/os-release ]; then
+    # shellcheck source=/dev/null
+    . /etc/os-release
+elif [ -f /usr/lib/os-release ]; then
+    # shellcheck source=/dev/null
+    . /usr/lib/os-release
+fi
+
+[ -n "$PRETTY_NAME" ] || PRETTY_NAME="Linux $KERNEL_VERSION"
+
+SORT_KEY="$IMAGE_ID"
+[ -z "$SORT_KEY" ] && SORT_KEY="$ID"
+
+if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
+    if [ -f "$KERNEL_INSTALL_CONF_ROOT/cmdline" ]; then
+        BOOT_OPTIONS="$(tr -s "$IFS" ' ' <"$KERNEL_INSTALL_CONF_ROOT/cmdline")"
+    fi
+elif [ -f /etc/kernel/cmdline ]; then
+    BOOT_OPTIONS="$(tr -s "$IFS" ' ' </etc/kernel/cmdline)"
+elif [ -f /usr/lib/kernel/cmdline ]; then
+    BOOT_OPTIONS="$(tr -s "$IFS" ' ' </usr/lib/kernel/cmdline)"
+else
+    BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
+fi
+
+BOOT_OPTIONS="${BOOT_OPTIONS% }"
+
+# If the boot entries are named after the machine ID, then suffix the kernel
+# command line with the machine ID we use, so that the machine ID remains
+# stable, even during factory reset, in the initrd (where the system's machine
+# ID is not directly accessible yet), and if the root file system is volatile.
+if [ "$ENTRY_TOKEN" = "$MACHINE_ID" ] && ! echo "$BOOT_OPTIONS" | grep -q "systemd.machine_id="; then
+    BOOT_OPTIONS="$BOOT_OPTIONS systemd.machine_id=$MACHINE_ID"
+fi
+
+TRIES_FILE="${KERNEL_INSTALL_CONF_ROOT:-/etc/kernel}/tries"
+
+if [ -f "$TRIES_FILE" ]; then
+    read -r TRIES <"$TRIES_FILE"
+    if ! echo "$TRIES" | grep -q '^[0-9][0-9]*$'; then
+        echo "$TRIES_FILE does not contain an integer." >&2
+        exit 1
+    fi
+    LOADER_ENTRY="${LOADER_ENTRY%.conf}+$TRIES.conf"
+fi
+
+if ! [ -d "$ENTRY_DIR_ABS" ]; then
+    echo "Error: entry directory '$ENTRY_DIR_ABS' does not exist" >&2
+    exit 1
+fi
+
+install -m 0644 "$KERNEL_IMAGE" "$KERNEL_DEST" || {
+    echo "Error: could not copy '$KERNEL_IMAGE' to '$KERNEL_DEST'." >&2
+    exit 1
+}
+chown root:root "$KERNEL_DEST" || :
+
+shift "$INITRD_OPTIONS_SHIFT"
+# All files listed as arguments, and staged files starting with "initrd" are installed as initrds.
+for initrd in "$@" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do
+    [ -f "$initrd" ] || {
+        [ "$initrd" = "${KERNEL_INSTALL_STAGING_AREA}/initrd*" ] && continue
+        echo "Error: initrd '$initrd' not a file." >&2
+        exit 1
+    }
+
+    initrd_basename="${initrd##*/}"
+    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename"
+    install -m 0644 "$initrd" "$ENTRY_DIR_ABS/$initrd_basename" || {
+        echo "Error: could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2
+        exit 1
+    }
+    chown root:root "$ENTRY_DIR_ABS/$initrd_basename" || :
+done
+
+mkdir -p "${LOADER_ENTRY%/*}" || {
+    echo "Error: could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
+    exit 1
+}
+
+[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Creating $LOADER_ENTRY"
+{
+    echo "# Boot Loader Specification type#1 entry"
+    echo "# File created by $0 (systemd {{GIT_VERSION}})"
+    echo "title      $PRETTY_NAME"
+    echo "version    $KERNEL_VERSION"
+    if [ "$ENTRY_TOKEN" = "$MACHINE_ID" ]; then
+        # See similar logic above for the systemd.machine_id= kernel command line option
+        echo "machine-id $MACHINE_ID"
+    fi
+    [ -n "$SORT_KEY" ] && echo "sort-key   $SORT_KEY"
+    echo "options    $BOOT_OPTIONS"
+    echo "linux      $KERNEL_ENTRY"
+
+    have_initrd=
+    for initrd in "${@}" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do
+        [ -f "$initrd" ] || continue
+        echo "initrd     $ENTRY_DIR/${initrd##*/}"
+        have_initrd=yes
+    done
+
+    # Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
+    [ -z "$have_initrd" ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
+    :
+} >"$LOADER_ENTRY" || {
+    echo "Error: could not create loader entry '$LOADER_ENTRY'." >&2
+    exit 1
+}
+exit 0
diff --git a/src/kernel-install/90-uki-copy.install b/src/kernel-install/90-uki-copy.install
new file mode 100755
index 0000000..6c71b21
--- /dev/null
+++ b/src/kernel-install/90-uki-copy.install
@@ -0,0 +1,97 @@
+#!/bin/sh
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
+
+set -e
+
+COMMAND="${1:?}"
+KERNEL_VERSION="${2:?}"
+# shellcheck disable=SC2034
+ENTRY_DIR_ABS="$3"
+KERNEL_IMAGE="$4"
+
+[ "$KERNEL_INSTALL_LAYOUT" = "uki" ] || exit 0
+
+ENTRY_TOKEN="$KERNEL_INSTALL_ENTRY_TOKEN"
+BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT"
+
+UKI_DIR="$BOOT_ROOT/EFI/Linux"
+
+case "$COMMAND" in
+    remove)
+        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+            echo "Removing $UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION*.efi"
+        exec rm -f \
+            "$UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION.efi" \
+            "$UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION+"*".efi"
+        ;;
+    add)
+        ;;
+    *)
+        exit 0
+        ;;
+esac
+
+if ! [ -d "$UKI_DIR" ]; then
+    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "creating $UKI_DIR"
+    mkdir -p "$UKI_DIR"
+fi
+
+TRIES_FILE="${KERNEL_INSTALL_CONF_ROOT:-/etc/kernel}/tries"
+
+if [ -f "$TRIES_FILE" ]; then
+    read -r TRIES <"$TRIES_FILE"
+    if ! echo "$TRIES" | grep -q '^[0-9][0-9]*$'; then
+        echo "$TRIES_FILE does not contain an integer." >&2
+        exit 1
+    fi
+    UKI_FILE="$UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION+$TRIES.efi"
+else
+    UKI_FILE="$UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION.efi"
+fi
+
+# If there is a UKI named uki.efi on the staging area use that, if not use what
+# was passed in as $KERNEL_IMAGE but insist it has a .efi extension
+if [ -f "$KERNEL_INSTALL_STAGING_AREA/uki.efi" ]; then
+    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $KERNEL_INSTALL_STAGING_AREA/uki.efi"
+    install -m 0644 "$KERNEL_INSTALL_STAGING_AREA/uki.efi" "$UKI_FILE" || {
+        echo "Error: could not copy '$KERNEL_INSTALL_STAGING_AREA/uki.efi' to '$UKI_FILE'." >&2
+        exit 1
+    }
+elif [ -n "$KERNEL_IMAGE" ]; then
+    [ -f "$KERNEL_IMAGE" ] || {
+        echo "Error: UKI '$KERNEL_IMAGE' not a file." >&2
+        exit 1
+    }
+    [ "$KERNEL_IMAGE" != "${KERNEL_IMAGE%*.efi}.efi" ] && {
+        echo "Error: $KERNEL_IMAGE is missing .efi suffix." >&2
+        exit 1
+    }
+    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $KERNEL_IMAGE"
+    install -m 0644 "$KERNEL_IMAGE" "$UKI_FILE" || {
+        echo "Error: could not copy '$KERNEL_IMAGE' to '$UKI_FILE'." >&2
+        exit 1
+    }
+else
+    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "No UKI available. Nothing to do."
+    exit 0
+fi
+chown root:root "$UKI_FILE" || :
+
+exit 0
diff --git a/src/kernel-install/install.conf b/src/kernel-install/install.conf
new file mode 100644
index 0000000..43b6e7d
--- /dev/null
+++ b/src/kernel-install/install.conf
@@ -0,0 +1,11 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it under the
+#  terms of the GNU Lesser General Public License as published by the Free
+#  Software Foundation; either version 2.1 of the License, or (at your option)
+#  any later version.
+#
+# See kernel-install(8) for details.
+
+#layout=bls|other|...
+#initrd_generator=dracut|...
diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
deleted file mode 100755
index c9a80b2..0000000
--- a/src/kernel-install/kernel-install
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/env bash
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
-# ex: ts=8 sw=4 sts=4 et filetype=sh
-# SPDX-License-Identifier: LGPL-2.1-or-later
-#
-# This file is part of systemd.
-#
-# systemd is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
-#
-# systemd is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
-
-SKIP_REMAINING=77
-
-usage()
-{
-    echo "Usage:"
-    echo "  $0 [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]"
-    echo "  $0 [OPTIONS...] remove KERNEL-VERSION"
-    echo "Options:"
-    echo "  -h,--help     Print this help"
-    echo "  -v,--verbose  Increase verbosity"
-}
-
-dropindirs_sort()
-{
-    local suffix=$1; shift
-    local -a files
-    local f d i
-
-    readarray -t files <<<"$(
-        for d in "$@"; do
-            for i in "$d/"*"$suffix"; do
-                if [[ -e "$i" ]]; then
-                    echo "${i##*/}"
-                fi
-            done
-        done | sort -Vu
-    )"
-
-    for f in "${files[@]}"; do
-        for d in "$@"; do
-            if [[ -e "$d/$f" ]]; then
-                echo "$d/$f"
-                continue 2
-            fi
-        done
-    done
-}
-
-export LC_COLLATE=C
-
-for i in "$@"; do
-    if [ "$i" == "--help" -o "$i" == "-h" ]; then
-        usage
-        exit 0
-    fi
-done
-
-KERNEL_INSTALL_VERBOSE=0
-if [ "$1" == "--verbose" -o "$1" == "-v" ]; then
-    shift
-    KERNEL_INSTALL_VERBOSE=1
-fi
-export KERNEL_INSTALL_VERBOSE
-
-if [[ "${0##*/}" == 'installkernel' ]]; then
-    COMMAND='add'
-    # make install doesn't pass any parameter wrt initrd handling
-    INITRD_OPTIONS=()
-else
-    COMMAND="$1"
-    shift
-    INITRD_OPTIONS=( "${@:3}" )
-fi
-
-KERNEL_VERSION="$1"
-KERNEL_IMAGE="$2"
-
-# Reuse directory created without a machine ID present if it exists.
-if [[ -d /efi/Default ]] || [[ -d /boot/Default ]] || [[ -d /boot/efi/Default ]]; then
-    MACHINE_ID="Default"
-elif [[ -f /etc/machine-id ]]; then
-    read MACHINE_ID < /etc/machine-id
-else
-    MACHINE_ID="Default"
-fi
-
-if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
-    echo "Not enough arguments" >&2
-    exit 1
-fi
-
-if [[ -d /efi/loader/entries ]] || [[ -d /efi/$MACHINE_ID ]]; then
-    ENTRY_DIR_ABS="/efi/$MACHINE_ID/$KERNEL_VERSION"
-elif [[ -d /boot/loader/entries ]] || [[ -d /boot/$MACHINE_ID ]]; then
-    ENTRY_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
-elif [[ -d /boot/efi/loader/entries ]] || [[ -d /boot/efi/$MACHINE_ID ]]; then
-    ENTRY_DIR_ABS="/boot/efi/$MACHINE_ID/$KERNEL_VERSION"
-elif mountpoint -q /efi; then
-    ENTRY_DIR_ABS="/efi/$MACHINE_ID/$KERNEL_VERSION"
-elif mountpoint -q /boot/efi; then
-    ENTRY_DIR_ABS="/boot/efi/$MACHINE_ID/$KERNEL_VERSION"
-else
-    ENTRY_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
-fi
-
-export KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID
-
-ret=0
-
-readarray -t PLUGINS <<<"$(
-    dropindirs_sort ".install" \
-        "/etc/kernel/install.d" \
-        "/usr/lib/kernel/install.d"
-)"
-
-case $COMMAND in
-    add)
-        if [[ ! "$KERNEL_IMAGE" ]]; then
-            echo "Command 'add' requires an argument" >&2
-            exit 1
-        fi
-
-        if [[ ! -f "$KERNEL_IMAGE" ]]; then
-            echo "Kernel image argument ${KERNEL_IMAGE} not a file" >&2
-            exit 1
-        fi
-
-        for f in "${PLUGINS[@]}"; do
-            if [[ -x $f ]]; then
-                [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
-                    echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[@]}"
-                "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "${INITRD_OPTIONS[@]}"
-                x=$?
-                if [[ $x == $SKIP_REMAINING ]]; then
-                    break
-                fi
-                ((ret+=$x))
-            fi
-        done
-        ;;
-
-    remove)
-        for f in "${PLUGINS[@]}"; do
-            if [[ -x $f ]]; then
-                [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
-                    echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS"
-                "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS"
-                x=$?
-                if [[ $x == $SKIP_REMAINING ]]; then
-                    break
-                fi
-                ((ret+=$x))
-            fi
-        done
-
-        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
-            echo "Removing $ENTRY_DIR_ABS"
-
-        rm -rf "$ENTRY_DIR_ABS"
-        ((ret+=$?))
-        ;;
-
-    *)
-        echo "Unknown command '$COMMAND'" >&2
-        exit 1
-        ;;
-esac
-
-exit $ret
diff --git a/src/kernel-install/kernel-install.in b/src/kernel-install/kernel-install.in
new file mode 100755
index 0000000..fa2c0d5
--- /dev/null
+++ b/src/kernel-install/kernel-install.in
@@ -0,0 +1,393 @@
+#!/bin/sh
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
+
+skip_remaining=77
+
+set -e
+
+usage()
+{
+    echo "Usage:"
+    echo "  kernel-install [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE...]"
+    echo "  kernel-install [OPTIONS...] remove KERNEL-VERSION"
+    echo "  kernel-install [OPTIONS...] inspect"
+    echo "Options:"
+    echo "  -h, --help     Print this help and exit"
+    echo "      --version  Print version string and exit"
+    echo "  -v, --verbose  Increase verbosity"
+}
+
+dropindirs_sort()
+{
+    suffix="$1"
+    shift
+
+    for d; do
+        for i in "$d/"*"$suffix"; do
+            [ -e "$i" ] && echo "${i##*/}"
+        done
+    done | sort -Vu | while read -r f; do
+        for d; do
+            if [ -e "$d/$f" ]; then
+                [ -x "$d/$f" ] && echo "$d/$f"
+                continue 2
+            fi
+        done
+    done
+}
+
+export LC_COLLATE=C
+
+for i; do
+    if [ "$i" = "--help" ] || [ "$i" = "-h" ]; then
+        usage
+        exit 0
+    fi
+done
+
+for i; do
+    if [ "$i" = "--version" ]; then
+        echo "kernel-install {{PROJECT_VERSION}} ({{GIT_VERSION}})"
+        exit 0
+    fi
+done
+
+if [ "$KERNEL_INSTALL_BYPASS" = "1" ]; then
+    echo "kernel-install: Skipping execution because KERNEL_INSTALL_BYPASS=1"
+    exit 0
+fi
+
+export KERNEL_INSTALL_VERBOSE=0
+if [ "$1" = "--verbose" ] || [ "$1" = "-v" ]; then
+    shift
+    export KERNEL_INSTALL_VERBOSE=1
+    log_verbose() { printf "%s\n" "$*"; }
+else
+    log_verbose() { :; }
+fi
+
+if [ "${0##*/}" = "installkernel" ]; then
+    COMMAND=add
+    # kernel's install.sh invokes us as
+    #   /sbin/installkernel <version> <vmlinuz> <map> <installation-dir>
+    # We ignore the last two arguments.
+    set -- "${1:?}" "${2:?}"
+else
+    COMMAND="$1"
+    [ $# -ge 1 ] && shift
+fi
+
+if [ "$COMMAND" = "inspect" ]; then
+    KERNEL_VERSION=""
+else
+    if [ $# -lt 1 ]; then
+        echo "Error: not enough arguments" >&2
+        exit 1
+    fi
+
+    KERNEL_VERSION="$1"
+    shift
+fi
+
+# These two settings are only settable via install.conf
+layout=
+initrd_generator=
+# These two settings can be inherited from the environment
+_MACHINE_ID_SAVED="$MACHINE_ID"
+_BOOT_ROOT_SAVED="$BOOT_ROOT"
+
+if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
+    install_conf="$KERNEL_INSTALL_CONF_ROOT/install.conf"
+elif [ -f "/etc/kernel/install.conf" ]; then
+    install_conf="/etc/kernel/install.conf"
+elif [ -f "/usr/lib/kernel/install.conf" ]; then
+    install_conf="/usr/lib/kernel/install.conf"
+else
+    install_conf=
+fi
+
+if [ -f "$install_conf" ]; then
+    log_verbose "Reading $install_conf…"
+    # shellcheck source=/dev/null
+    . "$install_conf"
+fi
+
+[ -n "$layout" ] && log_verbose "$install_conf configures layout=$layout"
+[ -n "$initrd_generator" ] && \
+    log_verbose "$install_conf configures initrd_generator=$initrd_generator"
+
+if [ -n "$_MACHINE_ID_SAVED" ]; then
+    MACHINE_ID="$_MACHINE_ID_SAVED"
+    log_verbose "MACHINE_ID=$MACHINE_ID set via environment"
+else
+    [ -n "$MACHINE_ID" ] && log_verbose "MACHINE_ID=$MACHINE_ID set via install.conf"
+fi
+
+if [ -n "$_BOOT_ROOT_SAVED" ]; then
+     BOOT_ROOT="$_BOOT_ROOT_SAVED"
+     log_verbose "BOOT_ROOT=$BOOT_ROOT set via environment"
+else
+    [ -n "$BOOT_ROOT" ] && log_verbose "BOOT_ROOT=$BOOT_ROOT set via install.conf"
+fi
+
+# If /etc/machine-id is initialized we'll use it, otherwise we'll use a freshly
+# generated one. If the user configured an explicit machine ID to use in
+# /etc/machine-info to use for our purpose, we'll use that instead (for
+# compatibility).
+# shellcheck source=/dev/null
+if [ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ]; then
+    . /etc/machine-info
+    MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
+    [ -n "$MACHINE_ID" ] && \
+        log_verbose "machine-id $MACHINE_ID acquired from /etc/machine-info"
+fi
+if [ -z "$MACHINE_ID" ] && [ -s /etc/machine-id ]; then
+    read -r MACHINE_ID </etc/machine-id
+    [ "$MACHINE_ID" = "uninitialized" ] && unset MACHINE_ID
+    [ -n "$MACHINE_ID" ] && \
+        log_verbose "machine-id $MACHINE_ID acquired from /etc/machine-id"
+fi
+if [ -z "$MACHINE_ID" ]; then
+    MACHINE_ID="$(systemd-id128 new)" || exit 1
+    log_verbose "new machine-id $MACHINE_ID generated"
+fi
+
+# Now that we determined the machine ID to use, let's determine the "token" for
+# the boot loader entry to generate. We use that for naming the directory below
+# $BOOT where we want to place the kernel/initrd and related resources, as well
+# for naming the .conf boot loader spec entry. Typically this is just the
+# machine ID, but it can be anything else, too, if we are told so.
+ENTRY_TOKEN_FILE="${KERNEL_INSTALL_CONF_ROOT:-/etc/kernel}/entry-token"
+
+if [ -z "$ENTRY_TOKEN" ] && [ -f "$ENTRY_TOKEN_FILE" ]; then
+    read -r ENTRY_TOKEN <"$ENTRY_TOKEN_FILE"
+    log_verbose "entry-token \"$ENTRY_TOKEN\" acquired from $ENTRY_TOKEN_FILE"
+fi
+if [ -z "$ENTRY_TOKEN" ]; then
+    # If not configured explicitly, then use a few candidates: the machine ID,
+    # the IMAGE_ID= and ID= fields from /etc/os-release and finally the fixed
+    # string "Default"
+    ENTRY_TOKEN_SEARCH="$MACHINE_ID"
+    # shellcheck source=/dev/null
+    [ -f /etc/os-release ] && . /etc/os-release
+    [ -n "$IMAGE_ID" ] && ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH $IMAGE_ID"
+    [ -n "$ID" ] && ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH $ID"
+    ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH Default"
+else
+    ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN"
+fi
+log_verbose "Entry-token candidates: $ENTRY_TOKEN_SEARCH"
+
+# NB: The $MACHINE_ID is guaranteed to be a valid machine ID, but
+#     $ENTRY_TOKEN can be any string that fits into a VFAT filename, though
+#     typically is just the machine ID.
+
+if [ -n "$BOOT_ROOT" ]; then
+    # If this was already configured, don't try to guess
+    BOOT_ROOT_SEARCH="$BOOT_ROOT"
+else
+    BOOT_ROOT_SEARCH="/efi /boot /boot/efi"
+fi
+
+for pref in $BOOT_ROOT_SEARCH; do
+    for suff in $ENTRY_TOKEN_SEARCH; do
+        if [ -d "$pref/$suff" ]; then
+            [ -z "$BOOT_ROOT" ] && BOOT_ROOT="$pref"
+            [ -z "$ENTRY_TOKEN" ] && ENTRY_TOKEN="$suff"
+
+            log_verbose "$pref/$suff exists, using BOOT_ROOT=$BOOT_ROOT, ENTRY_TOKEN=$ENTRY_TOKEN"
+            break 2
+        else
+            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "$pref/$suff not found…"
+        fi
+
+        if [ -d "$pref/loader/entries" ]; then
+            [ -z "$BOOT_ROOT" ] && BOOT_ROOT="$pref"
+            log_verbose "$pref/loader/entries exists, using BOOT_ROOT=$BOOT_ROOT"
+            break 2
+        else
+            log_verbose "$pref/loader/entries not found…"
+        fi
+    done
+done
+
+[ -z "$BOOT_ROOT" ] && for pref in "/efi" "/boot/efi"; do
+    if mountpoint -q "$pref"; then
+        BOOT_ROOT="$pref"
+        log_verbose "$pref is a mount point, using BOOT_ROOT=$BOOT_ROOT"
+        break
+    else
+        log_verbose "$pref is not a mount point…"
+    fi
+done
+
+if [ -z "$BOOT_ROOT" ]; then
+    BOOT_ROOT="/boot"
+    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+        echo "KERNEL_INSTALL_BOOT_ROOT autodection yielded no candidates, using \"$BOOT_ROOT\""
+fi
+
+if [ -z "$ENTRY_TOKEN" ]; then
+    ENTRY_TOKEN="$MACHINE_ID"
+    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+        echo "No entry-token candidate matched, using \"$ENTRY_TOKEN\" from machine-id"
+fi
+
+if [ -z "$layout" ]; then
+    # No layout configured by the administrator. Let's try to figure it out
+    # automatically from metadata already contained in $BOOT_ROOT.
+    if [ -e "$BOOT_ROOT/loader/entries.srel" ]; then
+        read -r ENTRIES_SREL <"$BOOT_ROOT/loader/entries.srel"
+        if [ "$ENTRIES_SREL" = "type1" ]; then
+            # The loader/entries.srel file clearly indicates that the installed
+            # boot loader implements the proper standard upstream boot loader
+            # spec for Type #1 entries. Let's default to that, then.
+            layout="bls"
+        else
+            # The loader/entries.srel file indicates some other spec is
+            # implemented and owns the /loader/entries/ directory. Since we
+            # have no idea what that means, let's stay away from it by default.
+            layout="other"
+        fi
+        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+            echo "$BOOT_ROOT/loader/entries.srel with '$ENTRIES_SREL' found, using layout=$layout"
+
+    elif [ -d "$BOOT_ROOT/$ENTRY_TOKEN" ]; then
+        # If the metadata in $BOOT_ROOT doesn't tell us anything, then check if
+        # the entry token directory already exists. If so, let's assume it's
+        # the standard boot loader spec, too.
+        layout="bls"
+
+        log_verbose "$BOOT_ROOT/$ENTRY_TOKEN exists, using layout=$layout"
+    else
+        # There's no metadata in $BOOT_ROOT, and apparently no entry token
+        # directory installed? Then we really don't know anything.
+        layout="other"
+
+        log_verbose "Entry-token directory not found, using layout=$layout"
+    fi
+fi
+
+ENTRY_DIR_ABS="$BOOT_ROOT/$ENTRY_TOKEN/$KERNEL_VERSION"
+log_verbose "Using ENTRY_DIR_ABS=$ENTRY_DIR_ABS"
+
+# Provide a directory where to store generated initrds
+cleanup() {
+    [ -n "$KERNEL_INSTALL_STAGING_AREA" ] && rm -rf "$KERNEL_INSTALL_STAGING_AREA"
+}
+
+trap cleanup EXIT
+
+KERNEL_INSTALL_STAGING_AREA="$(mktemp -d -t kernel-install.staging.XXXXXXX)"
+
+export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
+export KERNEL_INSTALL_ENTRY_TOKEN="$ENTRY_TOKEN"
+export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
+export KERNEL_INSTALL_LAYOUT="$layout"
+export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator"
+export KERNEL_INSTALL_STAGING_AREA
+
+MAKE_ENTRY_DIR_ABS=0
+[ "$layout" = "bls" ] || MAKE_ENTRY_DIR_ABS=1
+
+ret=0
+
+if [ -z "$KERNEL_INSTALL_PLUGINS" ]; then
+    KERNEL_INSTALL_PLUGINS="$(
+        dropindirs_sort ".install" \
+            "/etc/kernel/install.d" \
+            "/usr/lib/kernel/install.d"
+    )"
+fi
+
+if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
+    printf '%s\n' "Plugin files:"
+    for f in $KERNEL_INSTALL_PLUGINS; do
+        printf '%s\n' "$f"
+    done
+fi
+
+case "$COMMAND" in
+    add)
+        if [ $# -lt 1 ]; then
+            echo "Error: command 'add' requires a kernel image" >&2
+            exit 1
+        fi
+
+        if ! [ -f "$1" ]; then
+            echo "Error: kernel image argument $1 not a file" >&2
+            exit 1
+        fi
+
+        if [ "$MAKE_ENTRY_DIR_ABS" -eq 0 ]; then
+            # Compatibility with earlier versions that used the presence of $BOOT_ROOT/$ENTRY_TOKEN
+            # to signal to 00-entry-directory to create $ENTRY_DIR_ABS
+            # to serve as the indication to use or to not use the BLS
+            if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
+                echo "+mkdir -v -p $ENTRY_DIR_ABS"
+                mkdir -v -p "$ENTRY_DIR_ABS" || exit 1
+            else
+                mkdir -p "$ENTRY_DIR_ABS" || exit 1
+            fi
+        fi
+
+        for f in $KERNEL_INSTALL_PLUGINS; do
+            log_verbose "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS" "$@"
+            err=0
+            "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$@" || err=$?
+            [ $err -eq $skip_remaining ] && break
+            [ $err -ne 0 ] && exit $err
+        done
+        ;;
+
+    remove)
+        for f in $KERNEL_INSTALL_PLUGINS; do
+            log_verbose "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS"
+            err=0
+            "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS" || err=$?
+            [ $err -eq $skip_remaining ] && break
+            [ $err -ne 0 ] && exit $err
+        done
+
+        if [ "$MAKE_ENTRY_DIR_ABS" -eq 0 ]; then
+            log_verbose "Removing $ENTRY_DIR_ABS/"
+            rm -rf "$ENTRY_DIR_ABS"
+        fi
+        ;;
+
+    inspect)
+        echo "KERNEL_INSTALL_MACHINE_ID: $KERNEL_INSTALL_MACHINE_ID"
+        echo "KERNEL_INSTALL_ENTRY_TOKEN: $KERNEL_INSTALL_ENTRY_TOKEN"
+        echo "KERNEL_INSTALL_BOOT_ROOT: $KERNEL_INSTALL_BOOT_ROOT"
+        echo "KERNEL_INSTALL_LAYOUT: $KERNEL_INSTALL_LAYOUT"
+        echo "KERNEL_INSTALL_INITRD_GENERATOR: $KERNEL_INSTALL_INITRD_GENERATOR"
+        echo "ENTRY_DIR_ABS: $KERNEL_INSTALL_BOOT_ROOT/$ENTRY_TOKEN/\$KERNEL_VERSION"
+
+        # Assert that ENTRY_DIR_ABS actually matches what we are printing here
+        [ "${ENTRY_DIR_ABS%/*}" = "$KERNEL_INSTALL_BOOT_ROOT/$ENTRY_TOKEN" ] || { echo "Assertion didn't pass." >&2; exit 1; }
+        ;;
+
+    *)
+        echo "Error: unknown command '$COMMAND'" >&2
+        exit 1
+        ;;
+esac
+
+exit "$ret"
diff --git a/src/kernel-install/meson.build b/src/kernel-install/meson.build
index 4117188..f5db443 100644
--- a/src/kernel-install/meson.build
+++ b/src/kernel-install/meson.build
@@ -1,21 +1,34 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-want_kernel_install = get_option('kernel-install')
+kernel_install_in = files('kernel-install.in')
+loaderentry_install_in = files('90-loaderentry.install.in')
+
+loaderentry_install = custom_target(
+        '90-loaderentry.install',
+        input : loaderentry_install_in,
+        output : '90-loaderentry.install',
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
+        install : want_kernel_install,
+        install_mode : 'rwxr-xr-x',
+        install_dir : kernelinstalldir)
+
+kernel_install_files = files(
+        '50-depmod.install',
+        '90-uki-copy.install',
+)
 
 if want_kernel_install
-        install_data('kernel-install',
-                     install_mode : 'rwxr-xr-x',
-                     install_dir : bindir)
-
-        install_data('00-entry-directory.install',
-                     '50-depmod.install',
-                     '90-loaderentry.install',
+        install_data(kernel_install_files,
                      install_mode : 'rwxr-xr-x',
                      install_dir : kernelinstalldir)
 
+        install_data('install.conf',
+                     install_dir : kerneldir)
+
         if install_sysconfdir
                 meson.add_install_script('sh', '-c',
-                                         mkdir_p.format(join_paths(sysconfdir, 'kernel/install.d')))
+                                         mkdir_p.format(sysconfdir / 'kernel/install.d'))
         endif
 
+        test_kernel_install_sh = find_program('test-kernel-install.sh')
 endif
diff --git a/src/kernel-install/test-kernel-install.sh b/src/kernel-install/test-kernel-install.sh
new file mode 100755
index 0000000..bc833e4
--- /dev/null
+++ b/src/kernel-install/test-kernel-install.sh
@@ -0,0 +1,119 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+# shellcheck disable=SC2235
+set -eu
+set -o pipefail
+
+kernel_install="${1:?}"
+plugin="${2:?}"
+
+D="$(mktemp --tmpdir --directory "test-kernel-install.XXXXXXXXXX")"
+
+export _KERNEL_INSTALL_BOOTCTL="$PROJECT_BUILD_ROOT/bootctl"
+
+# shellcheck disable=SC2064
+trap "rm -rf '$D'" EXIT INT QUIT PIPE
+mkdir -p "$D/boot"
+mkdir -p "$D/efi"
+mkdir -p "$D/sources"
+
+echo 'buzy image' >"$D/sources/linux"
+echo 'the initrd' >"$D/sources/initrd"
+echo 'the-token' >"$D/sources/entry-token"
+echo 'opt1 opt2' >"$D/sources/cmdline"
+
+cat >"$D/sources/install.conf" <<EOF
+layout=bls
+initrd_generator=none
+# those are overridden by envvars
+BOOT_ROOT="$D/badboot"
+MACHINE_ID=badbadbadbadbadbad6abadbadbadbad
+EOF
+
+export KERNEL_INSTALL_CONF_ROOT="$D/sources"
+export KERNEL_INSTALL_PLUGINS="$plugin"
+export BOOT_ROOT="$D/boot"
+export BOOT_MNT="$D/boot"
+export MACHINE_ID='3e0484f3634a418b8e6a39e8828b03e3'
+
+"$kernel_install" -v add 1.1.1 "$D/sources/linux" "$D/sources/initrd"
+
+entry="$BOOT_ROOT/loader/entries/the-token-1.1.1.conf"
+test -f "$entry"
+grep -qE '^title ' "$entry"
+grep -qE '^version +1.1.1' "$entry"
+grep -qE '^options +opt1 opt2' "$entry"
+grep -qE '^linux .*/the-token/1.1.1/linux' "$entry"
+grep -qE '^initrd .*/the-token/1.1.1/initrd' "$entry"
+
+grep -qE 'image' "$BOOT_ROOT/the-token/1.1.1/linux"
+grep -qE 'initrd' "$BOOT_ROOT/the-token/1.1.1/initrd"
+
+"$kernel_install" inspect
+
+"$kernel_install" -v remove 1.1.1
+test ! -f "$entry"
+test ! -f "$BOOT_ROOT/the-token/1.1.1/linux"
+test ! -f "$BOOT_ROOT/the-token/1.1.1/initrd"
+
+# Invoke kernel-install as installkernel
+ln -s --relative -v "$kernel_install" "$D/sources/installkernel"
+"$D/sources/installkernel" -v 1.1.2 "$D/sources/linux" System.map /somedirignored
+
+entry="$BOOT_ROOT/loader/entries/the-token-1.1.2.conf"
+test -f "$entry"
+grep -qE '^title ' "$entry"
+grep -qE '^version +1.1.2' "$entry"
+grep -qE '^options +opt1 opt2' "$entry"
+grep -qE '^linux .*/the-token/1.1.2/linux' "$entry"
+( ! grep -qE '^initrd' "$entry" )
+
+grep -qE 'image' "$BOOT_ROOT/the-token/1.1.2/linux"
+test ! -e "$BOOT_ROOT/the-token/1.1.2/initrd"
+
+# Check installation with boot counting
+echo '56' >"$D/sources/tries"
+
+"$kernel_install" -v add 1.1.1 "$D/sources/linux" "$D/sources/initrd"
+entry="$BOOT_ROOT/loader/entries/the-token-1.1.1+56.conf"
+test -f "$entry"
+grep -qE '^title ' "$entry"
+grep -qE '^version +1.1.1' "$entry"
+grep -qE '^options +opt1 opt2' "$entry"
+grep -qE '^linux .*/the-token/1.1.1/linux' "$entry"
+grep -qE '^initrd .*/the-token/1.1.1/initrd' "$entry"
+
+grep -qE 'image' "$BOOT_ROOT/the-token/1.1.1/linux"
+grep -qE 'initrd' "$BOOT_ROOT/the-token/1.1.1/initrd"
+
+if test -x "$_KERNEL_INSTALL_BOOTCTL"; then
+    echo "Testing bootctl"
+    e2="${entry%+*}_2.conf"
+    cp "$entry" "$e2"
+    export SYSTEMD_ESP_PATH=/boot
+    # We use --root so strip the root prefix from KERNEL_INSTALL_CONF_ROOT
+    export KERNEL_INSTALL_CONF_ROOT="sources"
+
+    # create file that is not referenced. Check if cleanup removes
+    # it but leaves the rest alone
+    :> "$BOOT_ROOT/the-token/1.1.2/initrd"
+    "$_KERNEL_INSTALL_BOOTCTL" --root="$D" cleanup
+    test ! -e "$BOOT_ROOT/the-token/1.1.2/initrd"
+    test -e "$BOOT_ROOT/the-token/1.1.2/linux"
+    test -e "$BOOT_ROOT/the-token/1.1.1/linux"
+    test -e "$BOOT_ROOT/the-token/1.1.1/initrd"
+
+    # now remove duplicated entry and make sure files are left over
+    "$_KERNEL_INSTALL_BOOTCTL" --root="$D" unlink "${e2##*/}"
+    test -e "$BOOT_ROOT/the-token/1.1.1/linux"
+    test -e "$BOOT_ROOT/the-token/1.1.1/initrd"
+    test -e "$entry"
+    test ! -e "$e2"
+    # remove last entry referencing those files
+    entry_id="${entry##*/}"
+    entry_id="${entry_id%+*}.conf"
+    "$_KERNEL_INSTALL_BOOTCTL" --root="$D" unlink "$entry_id"
+    test ! -e "$entry"
+    test ! -e "$BOOT_ROOT/the-token/1.1.1/linux"
+    test ! -e "$BOOT_ROOT/the-token/1.1.1/initrd"
+fi
diff --git a/src/libsystemd-network/arp-util.c b/src/libsystemd-network/arp-util.c
index d8d94ab..ad61614 100644
--- a/src/libsystemd-network/arp-util.c
+++ b/src/libsystemd-network/arp-util.c
@@ -12,9 +12,8 @@
 #include "fd-util.h"
 #include "in-addr-util.h"
 #include "unaligned.h"
-#include "util.h"
 
-int arp_update_filter(int fd, const struct in_addr *a, const struct ether_addr *eth_mac) {
+int arp_update_filter(int fd, const struct in_addr *a, const struct ether_addr *mac) {
         struct sock_filter filter[] = {
                 BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0),                                         /* A <- packet length */
                 BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(struct ether_arp), 1, 0),           /* packet >= arp packet ? */
@@ -36,30 +35,21 @@
                 BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ARPOP_REPLY, 1, 0),                        /* protocol == reply ? */
                 BPF_STMT(BPF_RET + BPF_K, 0),                                                  /* ignore */
                 /* Sender Hardware Address must be different from our own */
-                BPF_STMT(BPF_LD + BPF_IMM, unaligned_read_be32(&eth_mac->ether_addr_octet[0])),/* A <- 4 bytes of client's MAC */
-                BPF_STMT(BPF_MISC + BPF_TAX, 0),                                               /* X <- A */
+                BPF_STMT(BPF_LDX + BPF_IMM, unaligned_read_be32(&mac->ether_addr_octet[0])),   /* X <- 4 bytes of client's MAC */
                 BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(struct ether_arp, arp_sha)),       /* A <- 4 bytes of SHA */
-                BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0),                                        /* A xor X */
-                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 0, 6),                                  /* A == 0 ? */
-                BPF_STMT(BPF_LD + BPF_IMM, unaligned_read_be16(&eth_mac->ether_addr_octet[4])),/* A <- remainder of client's MAC */
-                BPF_STMT(BPF_MISC + BPF_TAX, 0),                                               /* X <- A */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_X, 0, 0, 4),                                  /* A == X ? */
+                BPF_STMT(BPF_LDX + BPF_IMM, unaligned_read_be16(&mac->ether_addr_octet[4])),   /* X <- remainder of client's MAC */
                 BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct ether_arp, arp_sha) + 4),   /* A <- remainder of SHA */
-                BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0),                                        /* A xor X */
-                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 0, 1),                                  /* A == 0 ? */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_X, 0, 0, 1),                                  /* A == X ? */
                 BPF_STMT(BPF_RET + BPF_K, 0),                                                  /* ignore */
                 /* Sender Protocol Address or Target Protocol Address must be equal to the one we care about */
-                BPF_STMT(BPF_LD + BPF_IMM, htobe32(a->s_addr)),                                /* A <- clients IP */
-                BPF_STMT(BPF_MISC + BPF_TAX, 0),                                               /* X <- A */
+                BPF_STMT(BPF_LDX + BPF_IMM, htobe32(a->s_addr)),                               /* X <- clients IP */
                 BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(struct ether_arp, arp_spa)),       /* A <- SPA */
-                BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0),                                        /* X xor A */
-                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 0, 1),                                  /* A == 0 ? */
-                BPF_STMT(BPF_RET + BPF_K, 65535),                                              /* return all */
-                BPF_STMT(BPF_LD + BPF_IMM, htobe32(a->s_addr)),                                /* A <- clients IP */
-                BPF_STMT(BPF_MISC + BPF_TAX, 0),                                               /* X <- A */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_X, 0, 0, 1),                                  /* A == X ? */
+                BPF_STMT(BPF_RET + BPF_K, UINT32_MAX),                                         /* accept */
                 BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(struct ether_arp, arp_tpa)),       /* A <- TPA */
-                BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0),                                        /* X xor A */
-                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 0, 1),                                  /* A == 0 ? */
-                BPF_STMT(BPF_RET + BPF_K, 65535),                                              /* return all */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_X, 0, 0, 1),                                  /* A == 0 ? */
+                BPF_STMT(BPF_RET + BPF_K, UINT32_MAX),                                         /* accept */
                 BPF_STMT(BPF_RET + BPF_K, 0),                                                  /* ignore */
         };
         struct sock_fprog fprog = {
@@ -75,7 +65,7 @@
         return 0;
 }
 
-int arp_network_bind_raw_socket(int ifindex, const struct in_addr *a, const struct ether_addr *eth_mac) {
+int arp_network_bind_raw_socket(int ifindex, const struct in_addr *a, const struct ether_addr *mac) {
         union sockaddr_union link = {
                 .ll.sll_family   = AF_PACKET,
                 .ll.sll_protocol = htobe16(ETH_P_ARP),
@@ -83,16 +73,17 @@
                 .ll.sll_halen    = ETH_ALEN,
                 .ll.sll_addr     = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         assert(ifindex > 0);
+        assert(mac);
 
         s = socket(AF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
         if (s < 0)
                 return -errno;
 
-        r = arp_update_filter(s, a, eth_mac);
+        r = arp_update_filter(s, a, mac);
         if (r < 0)
                 return r;
 
diff --git a/src/libsystemd-network/arp-util.h b/src/libsystemd-network/arp-util.h
index e8615a1..b66a81b 100644
--- a/src/libsystemd-network/arp-util.h
+++ b/src/libsystemd-network/arp-util.h
@@ -11,8 +11,8 @@
 #include "socket-util.h"
 #include "sparse-endian.h"
 
-int arp_update_filter(int fd, const struct in_addr *a, const struct ether_addr *eth_mac);
-int arp_network_bind_raw_socket(int ifindex, const struct in_addr *a, const struct ether_addr *eth_mac);
+int arp_update_filter(int fd, const struct in_addr *a, const struct ether_addr *mac);
+int arp_network_bind_raw_socket(int ifindex, const struct in_addr *a, const struct ether_addr *mac);
 
 int arp_send_packet(
                 int fd,
diff --git a/src/libsystemd-network/dhcp-identifier.c b/src/libsystemd-network/dhcp-identifier.c
index 3313e53..a27d67a 100644
--- a/src/libsystemd-network/dhcp-identifier.c
+++ b/src/libsystemd-network/dhcp-identifier.c
@@ -4,24 +4,26 @@
 #include <net/ethernet.h>
 #include <net/if_arp.h>
 
-#include "sd-device.h"
-#include "sd-id128.h"
-
 #include "dhcp-identifier.h"
-#include "dhcp6-protocol.h"
-#include "network-util.h"
+#include "netif-util.h"
 #include "siphash24.h"
 #include "sparse-endian.h"
-#include "stat-util.h"
-#include "stdio-util.h"
-#include "udev-util.h"
-#include "virt.h"
+#include "string-table.h"
 
 #define HASH_KEY       SD_ID128_MAKE(80,11,8c,c2,fe,4a,03,ee,3e,d6,0c,6f,36,39,14,09)
 #define APPLICATION_ID SD_ID128_MAKE(a5,0a,d1,12,bf,60,45,77,a2,fb,74,1a,b1,95,5b,03)
 #define USEC_2000       ((usec_t) 946684800000000) /* 2000-01-01 00:00:00 UTC */
 
-int dhcp_validate_duid_len(uint16_t duid_type, size_t duid_len, bool strict) {
+static const char * const duid_type_table[_DUID_TYPE_MAX] = {
+        [DUID_TYPE_LLT]  = "DUID-LLT",
+        [DUID_TYPE_EN]   = "DUID-EN/Vendor",
+        [DUID_TYPE_LL]   = "DUID-LL",
+        [DUID_TYPE_UUID] = "UUID",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(duid_type, DUIDType);
+
+int dhcp_validate_duid_len(DUIDType duid_type, size_t duid_len, bool strict) {
         struct duid d;
 
         assert_cc(sizeof(d.raw) >= MAX_DUID_LEN);
@@ -57,163 +59,182 @@
         return 0;
 }
 
-int dhcp_identifier_set_duid_llt(struct duid *duid, usec_t t, const uint8_t *addr, size_t addr_len, uint16_t arp_type, size_t *len) {
+static int dhcp_identifier_set_duid_llt(
+                const struct hw_addr_data *hw_addr,
+                uint16_t arp_type,
+                usec_t t,
+                struct duid *ret_duid,
+                size_t *ret_len) {
+
         uint16_t time_from_2000y;
 
-        assert(duid);
-        assert(len);
-        assert(addr);
+        assert(hw_addr);
+        assert(ret_duid);
+        assert(ret_len);
+
+        if (hw_addr->length == 0)
+                return -EOPNOTSUPP;
 
         if (arp_type == ARPHRD_ETHER)
-                assert_return(addr_len == ETH_ALEN, -EINVAL);
+                assert_return(hw_addr->length == ETH_ALEN, -EINVAL);
         else if (arp_type == ARPHRD_INFINIBAND)
-                assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
+                assert_return(hw_addr->length == INFINIBAND_ALEN, -EINVAL);
         else
-                return -EINVAL;
+                return -EOPNOTSUPP;
 
         if (t < USEC_2000)
                 time_from_2000y = 0;
         else
                 time_from_2000y = (uint16_t) (((t - USEC_2000) / USEC_PER_SEC) & 0xffffffff);
 
-        unaligned_write_be16(&duid->type, DUID_TYPE_LLT);
-        unaligned_write_be16(&duid->llt.htype, arp_type);
-        unaligned_write_be32(&duid->llt.time, time_from_2000y);
-        memcpy(duid->llt.haddr, addr, addr_len);
+        unaligned_write_be16(&ret_duid->type, DUID_TYPE_LLT);
+        unaligned_write_be16(&ret_duid->llt.htype, arp_type);
+        unaligned_write_be32(&ret_duid->llt.time, time_from_2000y);
+        memcpy(ret_duid->llt.haddr, hw_addr->bytes, hw_addr->length);
 
-        *len = sizeof(duid->type) + sizeof(duid->llt.htype) + sizeof(duid->llt.time) + addr_len;
+        *ret_len = offsetof(struct duid, llt.haddr) + hw_addr->length;
 
         return 0;
 }
 
-int dhcp_identifier_set_duid_ll(struct duid *duid, const uint8_t *addr, size_t addr_len, uint16_t arp_type, size_t *len) {
-        assert(duid);
-        assert(len);
-        assert(addr);
+static int dhcp_identifier_set_duid_ll(
+                const struct hw_addr_data *hw_addr,
+                uint16_t arp_type,
+                struct duid *ret_duid,
+                size_t *ret_len) {
+
+        assert(hw_addr);
+        assert(ret_duid);
+        assert(ret_len);
+
+        if (hw_addr->length == 0)
+                return -EOPNOTSUPP;
 
         if (arp_type == ARPHRD_ETHER)
-                assert_return(addr_len == ETH_ALEN, -EINVAL);
+                assert_return(hw_addr->length == ETH_ALEN, -EINVAL);
         else if (arp_type == ARPHRD_INFINIBAND)
-                assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
+                assert_return(hw_addr->length == INFINIBAND_ALEN, -EINVAL);
         else
-                return -EINVAL;
+                return -EOPNOTSUPP;
 
-        unaligned_write_be16(&duid->type, DUID_TYPE_LL);
-        unaligned_write_be16(&duid->ll.htype, arp_type);
-        memcpy(duid->ll.haddr, addr, addr_len);
+        unaligned_write_be16(&ret_duid->type, DUID_TYPE_LL);
+        unaligned_write_be16(&ret_duid->ll.htype, arp_type);
+        memcpy(ret_duid->ll.haddr, hw_addr->bytes, hw_addr->length);
 
-        *len = sizeof(duid->type) + sizeof(duid->ll.htype) + addr_len;
+        *ret_len = offsetof(struct duid, ll.haddr) + hw_addr->length;
 
         return 0;
 }
 
-int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len) {
+int dhcp_identifier_set_duid_en(bool test_mode, struct duid *ret_duid, size_t *ret_len) {
         sd_id128_t machine_id;
         uint64_t hash;
         int r;
 
-        assert(duid);
-        assert(len);
+        assert(ret_duid);
+        assert(ret_len);
 
-        r = sd_id128_get_machine(&machine_id);
-        if (r < 0) {
-#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+        if (!test_mode) {
+                r = sd_id128_get_machine(&machine_id);
+                if (r < 0)
+                        return r;
+        } else
+                /* For tests, especially for fuzzers, reproducibility is important.
+                 * Hence, use a static and constant machine ID.
+                 * See 9216fddc5a8ac2742e6cfa7660f95c20ca4f2193. */
                 machine_id = SD_ID128_MAKE(01, 02, 03, 04, 05, 06, 07, 08, 09, 0a, 0b, 0c, 0d, 0e, 0f, 10);
-#else
-                return r;
-#endif
-        }
 
-        unaligned_write_be16(&duid->type, DUID_TYPE_EN);
-        unaligned_write_be32(&duid->en.pen, SYSTEMD_PEN);
-
-        *len = sizeof(duid->type) + sizeof(duid->en);
+        unaligned_write_be16(&ret_duid->type, DUID_TYPE_EN);
+        unaligned_write_be32(&ret_duid->en.pen, SYSTEMD_PEN);
 
         /* a bit of snake-oil perhaps, but no need to expose the machine-id
          * directly; duid->en.id might not be aligned, so we need to copy */
         hash = htole64(siphash24(&machine_id, sizeof(machine_id), HASH_KEY.bytes));
-        memcpy(duid->en.id, &hash, sizeof(duid->en.id));
+        memcpy(ret_duid->en.id, &hash, sizeof(ret_duid->en.id));
+
+        *ret_len = offsetof(struct duid, en.id) + sizeof(ret_duid->en.id);
+
+        if (test_mode)
+                assert_se(memcmp(ret_duid, (const uint8_t[]) { 0x00, 0x02, 0x00, 0x00, 0xab, 0x11, 0x61, 0x77, 0x40, 0xde, 0x13, 0x42, 0xc3, 0xa2 }, *ret_len) == 0);
 
         return 0;
 }
 
-int dhcp_identifier_set_duid_uuid(struct duid *duid, size_t *len) {
+static int dhcp_identifier_set_duid_uuid(struct duid *ret_duid, size_t *ret_len) {
         sd_id128_t machine_id;
         int r;
 
-        assert(duid);
-        assert(len);
+        assert(ret_duid);
+        assert(ret_len);
 
         r = sd_id128_get_machine_app_specific(APPLICATION_ID, &machine_id);
         if (r < 0)
                 return r;
 
-        unaligned_write_be16(&duid->type, DUID_TYPE_UUID);
-        memcpy(&duid->raw.data, &machine_id, sizeof(machine_id));
+        unaligned_write_be16(&ret_duid->type, DUID_TYPE_UUID);
+        memcpy(&ret_duid->uuid.uuid, &machine_id, sizeof(machine_id));
 
-        *len = sizeof(duid->type) + sizeof(machine_id);
+        *ret_len = offsetof(struct duid, uuid.uuid) + sizeof(machine_id);
 
         return 0;
 }
 
-int dhcp_identifier_set_iaid(
-                int ifindex,
-                const uint8_t *mac,
-                size_t mac_len,
-                bool legacy_unstable_byteorder,
-                bool use_mac,
-                void *_id) {
+int dhcp_identifier_set_duid(
+                DUIDType duid_type,
+                const struct hw_addr_data *hw_addr,
+                uint16_t arp_type,
+                usec_t llt_time,
+                bool test_mode,
+                struct duid *ret_duid,
+                size_t *ret_len) {
 
-        /* name is a pointer to memory in the sd_device struct, so must
-         * have the same scope */
-        _cleanup_(sd_device_unrefp) sd_device *device = NULL;
+        switch (duid_type) {
+        case DUID_TYPE_LLT:
+                return dhcp_identifier_set_duid_llt(hw_addr, arp_type, llt_time, ret_duid, ret_len);
+        case DUID_TYPE_EN:
+                return dhcp_identifier_set_duid_en(test_mode, ret_duid, ret_len);
+        case DUID_TYPE_LL:
+                return dhcp_identifier_set_duid_ll(hw_addr, arp_type, ret_duid, ret_len);
+        case DUID_TYPE_UUID:
+                return dhcp_identifier_set_duid_uuid(ret_duid, ret_len);
+        default:
+                return -EINVAL;
+        }
+}
+
+int dhcp_identifier_set_iaid(
+                sd_device *dev,
+                const struct hw_addr_data *hw_addr,
+                bool legacy_unstable_byteorder,
+                void *ret) {
+
         const char *name = NULL;
         uint32_t id32;
         uint64_t id;
-        int r;
 
-        if (path_is_read_only_fs("/sys") <= 0 && !use_mac) {
-                /* udev should be around */
+        assert(hw_addr);
+        assert(ret);
 
-                r = sd_device_new_from_ifindex(&device, ifindex);
-                if (r < 0)
-                        return r;
-
-                r = sd_device_get_is_initialized(device);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        /* not yet ready */
-                        return -EBUSY;
-
-                r = device_is_renaming(device);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        /* device is under renaming */
-                        return -EBUSY;
-
-                name = net_get_name_persistent(device);
-        }
-
+        if (dev)
+                name = net_get_persistent_name(dev);
         if (name)
                 id = siphash24(name, strlen(name), HASH_KEY.bytes);
         else
                 /* fall back to MAC address if no predictable name available */
-                id = siphash24(mac, mac_len, HASH_KEY.bytes);
+                id = siphash24(hw_addr->bytes, hw_addr->length, HASH_KEY.bytes);
 
         id32 = (id & 0xffffffff) ^ (id >> 32);
 
         if (legacy_unstable_byteorder)
                 /* for historical reasons (a bug), the bits were swapped and thus
                  * the result was endianness dependent. Preserve that behavior. */
-                id32 = __bswap_32(id32);
+                id32 = bswap_32(id32);
         else
                 /* the fixed behavior returns a stable byte order. Since LE is expected
                  * to be more common, swap the bytes on LE to give the same as legacy
                  * behavior. */
                 id32 = be32toh(id32);
 
-        unaligned_write_ne32(_id, id32);
+        unaligned_write_ne32(ret, id32);
         return 0;
 }
diff --git a/src/libsystemd-network/dhcp-identifier.h b/src/libsystemd-network/dhcp-identifier.h
index 6c24af0..523dfc4 100644
--- a/src/libsystemd-network/dhcp-identifier.h
+++ b/src/libsystemd-network/dhcp-identifier.h
@@ -1,8 +1,10 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include "sd-device.h"
 #include "sd-id128.h"
 
+#include "ether-addr-util.h"
 #include "macro.h"
 #include "sparse-endian.h"
 #include "time-util.h"
@@ -54,9 +56,20 @@
         };
 } _packed_;
 
-int dhcp_validate_duid_len(uint16_t duid_type, size_t duid_len, bool strict);
-int dhcp_identifier_set_duid_llt(struct duid *duid, usec_t t, const uint8_t *addr, size_t addr_len, uint16_t arp_type, size_t *len);
-int dhcp_identifier_set_duid_ll(struct duid *duid, const uint8_t *addr, size_t addr_len, uint16_t arp_type, size_t *len);
-int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len);
-int dhcp_identifier_set_duid_uuid(struct duid *duid, size_t *len);
-int dhcp_identifier_set_iaid(int ifindex, const uint8_t *mac, size_t mac_len, bool legacy_unstable_byteorder, bool use_mac, void *_id);
+int dhcp_validate_duid_len(DUIDType duid_type, size_t duid_len, bool strict);
+int dhcp_identifier_set_duid_en(bool test_mode, struct duid *ret_duid, size_t *ret_len);
+int dhcp_identifier_set_duid(
+                DUIDType duid_type,
+                const struct hw_addr_data *hw_addr,
+                uint16_t arp_type,
+                usec_t llt_time,
+                bool test_mode,
+                struct duid *ret_duid,
+                size_t *ret_len);
+int dhcp_identifier_set_iaid(
+                sd_device *dev,
+                const struct hw_addr_data *hw_addr,
+                bool legacy_unstable_byteorder,
+                void *ret);
+
+const char *duid_type_to_string(DUIDType t) _const_;
diff --git a/src/libsystemd-network/dhcp-internal.h b/src/libsystemd-network/dhcp-internal.h
index 1699997..5a7308c 100644
--- a/src/libsystemd-network/dhcp-internal.h
+++ b/src/libsystemd-network/dhcp-internal.h
@@ -12,7 +12,8 @@
 #include "sd-dhcp-client.h"
 
 #include "dhcp-protocol.h"
-#include "log-link.h"
+#include "ether-addr-util.h"
+#include "network-common.h"
 #include "socket-util.h"
 
 typedef struct sd_dhcp_option {
@@ -32,10 +33,16 @@
 
 typedef struct sd_dhcp_client sd_dhcp_client;
 
-int dhcp_network_bind_raw_socket(int ifindex, union sockaddr_union *link, uint32_t xid,
-                                 const uint8_t *mac_addr, size_t mac_addr_len,
-                                 const uint8_t *bcast_addr, size_t bcast_addr_len,
-                                 uint16_t arp_type, uint16_t port);
+int dhcp_network_bind_raw_socket(
+                int ifindex,
+                union sockaddr_union *link,
+                uint32_t xid,
+                const struct hw_addr_data *hw_addr,
+                const struct hw_addr_data *bcast_addr,
+                uint16_t arp_type,
+                uint16_t port,
+                bool so_priority_set,
+                int so_priority);
 int dhcp_network_bind_udp_socket(int ifindex, be32_t address, uint16_t port, int ip_service_type);
 int dhcp_network_send_raw_socket(int s, const union sockaddr_union *link,
                                  const void *packet, size_t len);
@@ -53,8 +60,8 @@
 int dhcp_option_parse(DHCPMessage *message, size_t len, dhcp_option_callback_t cb, void *userdata, char **error_message);
 
 int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid,
-                      uint8_t type, uint16_t arp_type, size_t optlen,
-                      size_t *optoffset);
+                      uint8_t type, uint16_t arp_type, uint8_t hlen, const uint8_t *chaddr,
+                      size_t optlen, size_t *optoffset);
 
 uint16_t dhcp_packet_checksum(uint8_t *buf, size_t len);
 
@@ -75,10 +82,10 @@
 #define log_dhcp_client_errno(client, error, fmt, ...)          \
         log_interface_prefix_full_errno(                        \
                 "DHCPv4 client: ",                              \
-                sd_dhcp_client_get_ifname(client),              \
+                sd_dhcp_client, client,                         \
                 error, fmt, ##__VA_ARGS__)
 #define log_dhcp_client(client, fmt, ...)                       \
         log_interface_prefix_full_errno_zerook(                 \
                 "DHCPv4 client: ",                              \
-                sd_dhcp_client_get_ifname(client),              \
+                sd_dhcp_client, client,                         \
                 0, fmt, ##__VA_ARGS__)
diff --git a/src/libsystemd-network/dhcp-lease-internal.h b/src/libsystemd-network/dhcp-lease-internal.h
index 35a74dd..a660e52 100644
--- a/src/libsystemd-network/dhcp-lease-internal.h
+++ b/src/libsystemd-network/dhcp-lease-internal.h
@@ -10,14 +10,11 @@
 #include "dhcp-internal.h"
 #include "dhcp-protocol.h"
 #include "list.h"
-#include "util.h"
 
 struct sd_dhcp_route {
         struct in_addr dst_addr;
         struct in_addr gw_addr;
         unsigned char dst_prefixlen;
-
-        uint8_t option;
 };
 
 struct sd_dhcp_raw_option {
@@ -52,8 +49,10 @@
 
         DHCPServerData servers[_SD_DHCP_LEASE_SERVER_TYPE_MAX];
 
-        struct sd_dhcp_route *static_route;
-        size_t static_route_size;
+        struct sd_dhcp_route *static_routes;
+        size_t n_static_routes;
+        struct sd_dhcp_route *classless_routes;
+        size_t n_classless_routes;
 
         uint16_t mtu; /* 0 if unset */
 
@@ -70,6 +69,12 @@
 
         char *timezone;
 
+        uint8_t sixrd_ipv4masklen;
+        uint8_t sixrd_prefixlen;
+        struct in6_addr sixrd_prefix;
+        struct in_addr *sixrd_br_addresses;
+        size_t sixrd_n_br_addresses;
+
         LIST_HEAD(struct sd_dhcp_raw_option, private_options);
 };
 
diff --git a/src/libsystemd-network/dhcp-network.c b/src/libsystemd-network/dhcp-network.c
index 8505910..9137efa 100644
--- a/src/libsystemd-network/dhcp-network.c
+++ b/src/libsystemd-network/dhcp-network.c
@@ -18,13 +18,36 @@
 #include "socket-util.h"
 #include "unaligned.h"
 
-static int _bind_raw_socket(int ifindex, union sockaddr_union *link,
-                            uint32_t xid,
-                            const uint8_t *bcast_addr,
-                            size_t bcast_addr_len,
-                            const struct ether_addr *eth_mac,
-                            uint16_t arp_type, uint8_t dhcp_hlen,
-                            uint16_t port) {
+static int _bind_raw_socket(
+                int ifindex,
+                union sockaddr_union *link,
+                uint32_t xid,
+                const struct hw_addr_data *hw_addr,
+                const struct hw_addr_data *bcast_addr,
+                uint16_t arp_type,
+                uint16_t port,
+                bool so_priority_set,
+                int so_priority) {
+
+        assert(ifindex > 0);
+        assert(link);
+        assert(hw_addr);
+        assert(bcast_addr);
+        assert(IN_SET(arp_type, ARPHRD_ETHER, ARPHRD_INFINIBAND));
+
+        switch (arp_type) {
+        case ARPHRD_ETHER:
+                assert(hw_addr->length == ETH_ALEN);
+                assert(bcast_addr->length == ETH_ALEN);
+                break;
+        case ARPHRD_INFINIBAND:
+                assert(hw_addr->length == 0);
+                assert(bcast_addr->length == INFINIBAND_ALEN);
+                break;
+        default:
+                assert_not_reached();
+        }
+
         struct sock_filter filter[] = {
                 BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0),                                 /* A <- packet length */
                 BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(DHCPPacket), 1, 0),         /* packet >= DHCPPacket ? */
@@ -53,40 +76,33 @@
                 BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, xid, 1, 0),                        /* client identifier == xid ? */
                 BPF_STMT(BPF_RET + BPF_K, 0),                                          /* ignore */
                 BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, dhcp.hlen)),   /* A <- MAC address length */
-                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, dhcp_hlen, 1, 0),                  /* address length == dhcp_hlen ? */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, (uint8_t) hw_addr->length, 1, 0),  /* address length == hw_addr->length ? */
                 BPF_STMT(BPF_RET + BPF_K, 0),                                          /* ignore */
 
                 /* We only support MAC address length to be either 0 or 6 (ETH_ALEN). Optionally
                  * compare chaddr for ETH_ALEN bytes. */
-                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ETH_ALEN, 0, 12),                                  /* A (the MAC address length) == ETH_ALEN ? */
-                BPF_STMT(BPF_LD + BPF_IMM, unaligned_read_be32(&eth_mac->ether_addr_octet[0])),        /* A <- 4 bytes of client's MAC */
-                BPF_STMT(BPF_MISC + BPF_TAX, 0),                                                       /* X <- A */
-                BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(DHCPPacket, dhcp.chaddr)),                 /* A <- 4 bytes of MAC from dhcp.chaddr */
-                BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0),                                                /* A xor X */
-                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0),                                          /* A == 0 ? */
-                BPF_STMT(BPF_RET + BPF_K, 0),                                                          /* ignore */
-                BPF_STMT(BPF_LD + BPF_IMM, unaligned_read_be16(&eth_mac->ether_addr_octet[4])),        /* A <- remainder of client's MAC */
-                BPF_STMT(BPF_MISC + BPF_TAX, 0),                                                       /* X <- A */
-                BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(DHCPPacket, dhcp.chaddr) + 4),             /* A <- remainder of MAC from dhcp.chaddr */
-                BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0),                                                /* A xor X */
-                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0),                                          /* A == 0 ? */
-                BPF_STMT(BPF_RET + BPF_K, 0),                                                          /* ignore */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ETH_ALEN, 0, 8),                        /* A (the MAC address length) == ETH_ALEN ? */
+                BPF_STMT(BPF_LDX + BPF_IMM, unaligned_read_be32(hw_addr->bytes)),           /* X <- 4 bytes of client's MAC */
+                BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(DHCPPacket, dhcp.chaddr)),      /* A <- 4 bytes of MAC from dhcp.chaddr */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_X, 0, 1, 0),                               /* A == X ? */
+                BPF_STMT(BPF_RET + BPF_K, 0),                                               /* ignore */
+                BPF_STMT(BPF_LDX + BPF_IMM, unaligned_read_be16(hw_addr->bytes + 4)),       /* X <- remainder of client's MAC */
+                BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(DHCPPacket, dhcp.chaddr) + 4),  /* A <- remainder of MAC from dhcp.chaddr */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_X, 0, 1, 0),                               /* A == X ? */
+                BPF_STMT(BPF_RET + BPF_K, 0),                                               /* ignore */
 
                 BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(DHCPPacket, dhcp.magic)),  /* A <- DHCP magic cookie */
                 BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, DHCP_MAGIC_COOKIE, 1, 0),          /* cookie == DHCP magic cookie ? */
                 BPF_STMT(BPF_RET + BPF_K, 0),                                          /* ignore */
-                BPF_STMT(BPF_RET + BPF_K, 65535),                                      /* return all */
+                BPF_STMT(BPF_RET + BPF_K, UINT32_MAX),                                 /* accept */
         };
         struct sock_fprog fprog = {
                 .len = ELEMENTSOF(filter),
                 .filter = filter
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
-        assert(ifindex > 0);
-        assert(link);
-
         s = socket(AF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
         if (s < 0)
                 return -errno;
@@ -99,14 +115,21 @@
         if (r < 0)
                 return -errno;
 
+        if (so_priority_set) {
+                r = setsockopt_int(s, SOL_SOCKET, SO_PRIORITY, so_priority);
+                if (r < 0)
+                        return r;
+        }
+
         link->ll = (struct sockaddr_ll) {
                 .sll_family = AF_PACKET,
                 .sll_protocol = htobe16(ETH_P_IP),
                 .sll_ifindex = ifindex,
                 .sll_hatype = htobe16(arp_type),
-                .sll_halen = bcast_addr_len,
+                .sll_halen = bcast_addr->length,
         };
-        memcpy(link->ll.sll_addr, bcast_addr, bcast_addr_len); /* We may overflow link->ll. link->ll_buffer ensures we have enough space. */
+        /* We may overflow link->ll. link->ll_buffer ensures we have enough space. */
+        memcpy(link->ll.sll_addr, bcast_addr->bytes, bcast_addr->length);
 
         r = bind(s, &link->sa, SOCKADDR_LL_LEN(link->ll));
         if (r < 0)
@@ -115,44 +138,48 @@
         return TAKE_FD(s);
 }
 
-int dhcp_network_bind_raw_socket(int ifindex, union sockaddr_union *link, uint32_t xid,
-                                 const uint8_t *mac_addr, size_t mac_addr_len,
-                                 const uint8_t *bcast_addr, size_t bcast_addr_len,
-                                 uint16_t arp_type, uint16_t port) {
-        static const uint8_t eth_bcast[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
-        /* Default broadcast address for IPoIB */
-        static const uint8_t ib_bcast[] = {
-                0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x40, 0x1b,
-                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                0xff, 0xff, 0xff, 0xff
+int dhcp_network_bind_raw_socket(
+                int ifindex,
+                union sockaddr_union *link,
+                uint32_t xid,
+                const struct hw_addr_data *hw_addr,
+                const struct hw_addr_data *bcast_addr,
+                uint16_t arp_type,
+                uint16_t port,
+                bool so_priority_set,
+                int so_priority) {
+
+        static struct hw_addr_data default_eth_bcast = {
+                .length = ETH_ALEN,
+                .ether = {{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }},
+        }, default_ib_bcast = {
+                .length = INFINIBAND_ALEN,
+                .infiniband = {
+                        0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x40, 0x1b,
+                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                        0xff, 0xff, 0xff, 0xff
+                },
         };
-        struct ether_addr eth_mac = { { 0, 0, 0, 0, 0, 0 } };
-        const uint8_t *default_bcast_addr;
-        size_t expected_bcast_addr_len;
-        uint8_t dhcp_hlen = 0;
 
-        if (arp_type == ARPHRD_ETHER) {
-                assert_return(mac_addr_len == ETH_ALEN, -EINVAL);
-                memcpy(&eth_mac, mac_addr, ETH_ALEN);
-                dhcp_hlen = ETH_ALEN;
+        assert(ifindex > 0);
+        assert(link);
+        assert(hw_addr);
 
-                default_bcast_addr = eth_bcast;
-                expected_bcast_addr_len = ETH_ALEN;
-        } else if (arp_type == ARPHRD_INFINIBAND) {
-                default_bcast_addr = ib_bcast;
-                expected_bcast_addr_len = INFINIBAND_ALEN;
-        } else
+        switch (arp_type) {
+        case ARPHRD_ETHER:
+                return _bind_raw_socket(ifindex, link, xid,
+                                        hw_addr,
+                                        (bcast_addr && !hw_addr_is_null(bcast_addr)) ? bcast_addr : &default_eth_bcast,
+                                        arp_type, port, so_priority_set, so_priority);
+
+        case ARPHRD_INFINIBAND:
+                return _bind_raw_socket(ifindex, link, xid,
+                                        &HW_ADDR_NULL,
+                                        (bcast_addr && !hw_addr_is_null(bcast_addr)) ? bcast_addr : &default_ib_bcast,
+                                        arp_type, port, so_priority_set, so_priority);
+        default:
                 return -EINVAL;
-
-        if (bcast_addr && bcast_addr_len > 0)
-                assert_return(bcast_addr_len == expected_bcast_addr_len, -EINVAL);
-        else {
-                bcast_addr = default_bcast_addr;
-                bcast_addr_len = expected_bcast_addr_len;
         }
-
-        return _bind_raw_socket(ifindex, link, xid, bcast_addr, bcast_addr_len,
-                                &eth_mac, arp_type, dhcp_hlen, port);
 }
 
 int dhcp_network_bind_udp_socket(int ifindex, be32_t address, uint16_t port, int ip_service_type) {
@@ -161,7 +188,7 @@
                 .in.sin_port = htobe16(port),
                 .in.sin_addr.s_addr = address,
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         s = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
@@ -172,7 +199,6 @@
                 r = setsockopt_int(s, IPPROTO_IP, IP_TOS, ip_service_type);
         else
                 r = setsockopt_int(s, IPPROTO_IP, IP_TOS, IPTOS_CLASS_CS6);
-
         if (r < 0)
                 return r;
 
@@ -204,43 +230,49 @@
                         return r;
         }
 
-        r = bind(s, &src.sa, sizeof(src.in));
-        if (r < 0)
+        if (bind(s, &src.sa, sizeof(src.in)) < 0)
                 return -errno;
 
         return TAKE_FD(s);
 }
 
-int dhcp_network_send_raw_socket(int s, const union sockaddr_union *link,
-                                 const void *packet, size_t len) {
-        int r;
+int dhcp_network_send_raw_socket(
+                int s,
+                const union sockaddr_union *link,
+                const void *packet,
+                size_t len) {
+
+        /* Do not add assert(s >= 0) here, as this is called in fuzz-dhcp-server, and in that case this
+         * function should fail with negative errno. */
 
         assert(link);
         assert(packet);
-        assert(len);
+        assert(len > 0);
 
-        r = sendto(s, packet, len, 0, &link->sa, SOCKADDR_LL_LEN(link->ll));
-        if (r < 0)
+        if (sendto(s, packet, len, 0, &link->sa, SOCKADDR_LL_LEN(link->ll)) < 0)
                 return -errno;
 
         return 0;
 }
 
-int dhcp_network_send_udp_socket(int s, be32_t address, uint16_t port,
-                                 const void *packet, size_t len) {
+int dhcp_network_send_udp_socket(
+                int s,
+                be32_t address,
+                uint16_t port,
+                const void *packet,
+                size_t len) {
+
         union sockaddr_union dest = {
                 .in.sin_family = AF_INET,
                 .in.sin_port = htobe16(port),
                 .in.sin_addr.s_addr = address,
         };
-        int r;
 
         assert(s >= 0);
         assert(packet);
-        assert(len);
+        assert(len > 0);
 
-        r = sendto(s, packet, len, 0, &dest.sa, sizeof(dest.in));
-        if (r < 0)
+        if (sendto(s, packet, len, 0, &dest.sa, sizeof(dest.in)) < 0)
                 return -errno;
 
         return 0;
diff --git a/src/libsystemd-network/dhcp-option.c b/src/libsystemd-network/dhcp-option.c
index ebe8eec..a52259c 100644
--- a/src/libsystemd-network/dhcp-option.c
+++ b/src/libsystemd-network/dhcp-option.c
@@ -58,12 +58,11 @@
 
         case SD_DHCP_OPTION_USER_CLASS: {
                 size_t total = 0;
-                char **s;
 
                 if (strv_isempty((char **) optval))
                         return -EINVAL;
 
-                STRV_FOREACH(s, (char **) optval) {
+                STRV_FOREACH(s, (const char* const*) optval) {
                         size_t len = strlen(*s);
 
                         if (len > 255 || len == 0)
@@ -79,7 +78,7 @@
                 options[*offset + 1] = total;
                 *offset += 2;
 
-                STRV_FOREACH(s, (char **) optval) {
+                STRV_FOREACH(s, (const char* const*) optval) {
                         size_t len = strlen(*s);
 
                         options[*offset] = len;
@@ -280,6 +279,7 @@
         uint8_t code, len;
         const uint8_t *option;
         size_t offset = 0;
+        int r;
 
         while (offset < buflen) {
                 code = options[offset ++];
@@ -319,13 +319,9 @@
                         if (error_message) {
                                 _cleanup_free_ char *string = NULL;
 
-                                /* Accept a trailing NUL byte */
-                                if (memchr(option, 0, len - 1))
-                                        return -EINVAL;
-
-                                string = memdup_suffix0((const char *) option, len);
-                                if (!string)
-                                        return -ENOMEM;
+                                r = make_cstring((const char*) option, len, MAKE_CSTRING_ALLOW_TRAILING_NUL, &string);
+                                if (r < 0)
+                                        return r;
 
                                 if (!ascii_is_valid(string))
                                         return -EINVAL;
diff --git a/src/libsystemd-network/dhcp-packet.c b/src/libsystemd-network/dhcp-packet.c
index cace916..b2efd52 100644
--- a/src/libsystemd-network/dhcp-packet.c
+++ b/src/libsystemd-network/dhcp-packet.c
@@ -10,21 +10,44 @@
 
 #include "dhcp-internal.h"
 #include "dhcp-protocol.h"
+#include "memory-util.h"
 
 #define DHCP_CLIENT_MIN_OPTIONS_SIZE            312
 
-int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid,
-                      uint8_t type, uint16_t arp_type, size_t optlen,
-                      size_t *optoffset) {
+int dhcp_message_init(
+                DHCPMessage *message,
+                uint8_t op,
+                uint32_t xid,
+                uint8_t type,
+                uint16_t arp_type,
+                uint8_t hlen,
+                const uint8_t *chaddr,
+                size_t optlen,
+                size_t *optoffset) {
+
         size_t offset = 0;
         int r;
 
         assert(IN_SET(op, BOOTREQUEST, BOOTREPLY));
-        assert(IN_SET(arp_type, ARPHRD_ETHER, ARPHRD_INFINIBAND));
+        assert(chaddr || hlen == 0);
 
         message->op = op;
         message->htype = arp_type;
-        message->hlen = (arp_type == ARPHRD_ETHER) ? ETHER_ADDR_LEN : 0;
+
+        /* RFC2131 section 4.1.1:
+           The client MUST include its hardware address in the ’chaddr’ field, if
+           necessary for delivery of DHCP reply messages.
+
+           RFC 4390 section 2.1:
+           A DHCP client, when working over an IPoIB interface, MUST follow the
+           following rules:
+           "htype" (hardware address type) MUST be 32 [ARPPARAM].
+           "hlen" (hardware address length) MUST be 0.
+           "chaddr" (client hardware address) field MUST be zeroed.
+         */
+        message->hlen = arp_type == ARPHRD_INFINIBAND ? 0 : hlen;
+        memcpy_safe(message->chaddr, chaddr, message->hlen);
+
         message->xid = htobe32(xid);
         message->magic = htobe32(DHCP_MAGIC_COOKIE);
 
@@ -106,6 +129,7 @@
         size_t hdrlen;
 
         assert(packet);
+        assert(len >= sizeof(DHCPPacket));
 
         /* IP */
 
@@ -115,20 +139,18 @@
 
         if (packet->ip.ihl < 5)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "ignoring packet: IPv4 IHL (%u words) invalid",
+                                       "ignoring packet: IPv4 IHL (%i words) invalid",
                                        packet->ip.ihl);
 
         hdrlen = packet->ip.ihl * 4;
         if (hdrlen < 20)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "ignoring packet: IPv4 IHL (%zu bytes) "
-                                       "smaller than minimum (20 bytes)",
+                                       "ignoring packet: IPv4 IHL (%zu bytes) smaller than minimum (20 bytes)",
                                        hdrlen);
 
         if (len < hdrlen)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "ignoring packet: packet (%zu bytes) "
-                                       "smaller than expected (%zu) by IP header",
+                                       "ignoring packet: packet (%zu bytes) smaller than expected (%zu) by IP header",
                                        len, hdrlen);
 
         /* UDP */
@@ -139,14 +161,12 @@
 
         if (len < hdrlen + be16toh(packet->udp.len))
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "ignoring packet: packet (%zu bytes) "
-                                       "smaller than expected (%zu) by UDP header",
+                                       "ignoring packet: packet (%zu bytes) smaller than expected (%zu) by UDP header",
                                        len, hdrlen + be16toh(packet->udp.len));
 
         if (be16toh(packet->udp.dest) != port)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "ignoring packet: to port %u, which "
-                                       "is not the DHCP client port (%u)",
+                                       "ignoring packet: to port %u, which is not the DHCP client port (%u)",
                                        be16toh(packet->udp.dest), port);
 
         /* checksums - computing these is relatively expensive, so only do it
diff --git a/src/libsystemd-network/dhcp-protocol.h b/src/libsystemd-network/dhcp-protocol.h
index 11f4201..062ce00 100644
--- a/src/libsystemd-network/dhcp-protocol.h
+++ b/src/libsystemd-network/dhcp-protocol.h
@@ -28,7 +28,7 @@
         uint8_t sname[64];
         uint8_t file[128];
         be32_t magic;
-        uint8_t options[0];
+        uint8_t options[];
 } _packed_;
 
 typedef struct DHCPMessage DHCPMessage;
@@ -43,9 +43,10 @@
 
 #define DHCP_IP_SIZE            (int32_t)(sizeof(struct iphdr))
 #define DHCP_IP_UDP_SIZE        (int32_t)(sizeof(struct udphdr) + DHCP_IP_SIZE)
-#define DHCP_MESSAGE_SIZE       (int32_t)(sizeof(DHCPMessage))
-#define DHCP_DEFAULT_MIN_SIZE   576 /* the minimum internet hosts must be able to receive */
-#define DHCP_MIN_OPTIONS_SIZE   (DHCP_DEFAULT_MIN_SIZE - DHCP_IP_UDP_SIZE - DHCP_MESSAGE_SIZE)
+#define DHCP_HEADER_SIZE        (int32_t)(sizeof(DHCPMessage))
+#define DHCP_MIN_MESSAGE_SIZE   576 /* the minimum internet hosts must be able to receive, see RFC 2132 Section 9.10 */
+#define DHCP_MIN_OPTIONS_SIZE   (DHCP_MIN_MESSAGE_SIZE - DHCP_HEADER_SIZE)
+#define DHCP_MIN_PACKET_SIZE    (DHCP_MIN_MESSAGE_SIZE + DHCP_IP_UDP_SIZE)
 #define DHCP_MAGIC_COOKIE       (uint32_t)(0x63825363)
 
 enum {
@@ -73,15 +74,24 @@
 };
 
 enum {
-        DHCP_DISCOVER                           = 1,
-        DHCP_OFFER                              = 2,
-        DHCP_REQUEST                            = 3,
-        DHCP_DECLINE                            = 4,
-        DHCP_ACK                                = 5,
-        DHCP_NAK                                = 6,
-        DHCP_RELEASE                            = 7,
-        DHCP_INFORM                             = 8,
-        DHCP_FORCERENEW                         = 9,
+        DHCP_DISCOVER                           = 1,  /* [RFC2132] */
+        DHCP_OFFER                              = 2,  /* [RFC2132] */
+        DHCP_REQUEST                            = 3,  /* [RFC2132] */
+        DHCP_DECLINE                            = 4,  /* [RFC2132] */
+        DHCP_ACK                                = 5,  /* [RFC2132] */
+        DHCP_NAK                                = 6,  /* [RFC2132] */
+        DHCP_RELEASE                            = 7,  /* [RFC2132] */
+        DHCP_INFORM                             = 8,  /* [RFC2132] */
+        DHCP_FORCERENEW                         = 9,  /* [RFC3203] */
+        DHCPLEASEQUERY                          = 10, /* [RFC4388] */
+        DHCPLEASEUNASSIGNED                     = 11, /* [RFC4388] */
+        DHCPLEASEUNKNOWN                        = 12, /* [RFC4388] */
+        DHCPLEASEACTIVE                         = 13, /* [RFC4388] */
+        DHCPBULKLEASEQUERY                      = 14, /* [RFC6926] */
+        DHCPLEASEQUERYDONE                      = 15, /* [RFC6926] */
+        DHCPACTIVELEASEQUERY                    = 16, /* [RFC7724] */
+        DHCPLEASEQUERYSTATUS                    = 17, /* [RFC7724] */
+        DHCPTLS                                 = 18, /* [RFC7724] */
 };
 
 enum {
diff --git a/src/libsystemd-network/dhcp-server-internal.h b/src/libsystemd-network/dhcp-server-internal.h
index 34928e0..607f9f0 100644
--- a/src/libsystemd-network/dhcp-server-internal.h
+++ b/src/libsystemd-network/dhcp-server-internal.h
@@ -9,8 +9,8 @@
 #include "sd-event.h"
 
 #include "dhcp-internal.h"
+#include "network-common.h"
 #include "ordered-set.h"
-#include "log-link.h"
 #include "time-util.h"
 
 typedef enum DHCPRawOption {
@@ -26,12 +26,16 @@
 
 typedef struct DHCPClientId {
         size_t length;
-        void *data;
+        uint8_t *data;
 } DHCPClientId;
 
 typedef struct DHCPLease {
+        sd_dhcp_server *server;
+
         DHCPClientId client_id;
 
+        uint8_t htype; /* e.g. ARPHRD_ETHER */
+        uint8_t hlen;  /* e.g. ETH_ALEN */
         be32_t address;
         be32_t gateway;
         uint8_t chaddr[16];
@@ -61,16 +65,20 @@
         char *timezone;
 
         DHCPServerData servers[_SD_DHCP_LEASE_SERVER_TYPE_MAX];
+        struct in_addr boot_server_address;
+        char *boot_server_name;
+        char *boot_filename;
 
         OrderedSet *extra_options;
         OrderedSet *vendor_options;
 
         bool emit_router;
+        struct in_addr router_address;
 
-        Hashmap *leases_by_client_id;
+        Hashmap *bound_leases_by_client_id;
+        Hashmap *bound_leases_by_address;
         Hashmap *static_leases_by_client_id;
-        DHCPLease **bound_leases;
-        DHCPLease invalid_lease;
+        Hashmap *static_leases_by_address;
 
         uint32_t max_lease_time, default_lease_time;
 
@@ -96,6 +104,8 @@
         const uint8_t *agent_info_option;
 } DHCPRequest;
 
+extern const struct hash_ops dhcp_lease_hash_ops;
+
 int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
                                size_t length);
 int dhcp_server_send_packet(sd_dhcp_server *server,
@@ -108,10 +118,10 @@
 #define log_dhcp_server_errno(server, error, fmt, ...)          \
         log_interface_prefix_full_errno(                        \
                 "DHCPv4 server: ",                              \
-                sd_dhcp_server_get_ifname(server),              \
+                sd_dhcp_server, server,                         \
                 error, fmt, ##__VA_ARGS__)
 #define log_dhcp_server(server, fmt, ...)                       \
         log_interface_prefix_full_errno_zerook(                 \
                 "DHCPv4 server: ",                              \
-                sd_dhcp_server_get_ifname(server),              \
+                sd_dhcp_server, server,                         \
                 0, fmt, ##__VA_ARGS__)
diff --git a/src/libsystemd-network/dhcp6-internal.h b/src/libsystemd-network/dhcp6-internal.h
index e555557..fa43f28 100644
--- a/src/libsystemd-network/dhcp6-internal.h
+++ b/src/libsystemd-network/dhcp6-internal.h
@@ -11,133 +11,95 @@
 #include "sd-event.h"
 #include "sd-dhcp6-client.h"
 
+#include "dhcp-identifier.h"
+#include "dhcp6-option.h"
+#include "dhcp6-protocol.h"
+#include "ether-addr-util.h"
 #include "hashmap.h"
-#include "list.h"
-#include "log-link.h"
 #include "macro.h"
+#include "network-common.h"
+#include "ordered-set.h"
 #include "sparse-endian.h"
+#include "time-util.h"
 
-typedef struct sd_dhcp6_option {
+/* what to request from the server, addresses (IA_NA) and/or prefixes (IA_PD) */
+typedef enum DHCP6RequestIA {
+        DHCP6_REQUEST_IA_NA = 1 << 0,
+        DHCP6_REQUEST_IA_TA = 1 << 1, /* currently not used */
+        DHCP6_REQUEST_IA_PD = 1 << 2,
+} DHCP6RequestIA;
+
+struct sd_dhcp6_client {
         unsigned n_ref;
 
-        uint32_t enterprise_identifier;
-        uint16_t option;
-        void *data;
-        size_t length;
-} sd_dhcp6_option;
+        int ifindex;
+        char *ifname;
 
-extern const struct hash_ops dhcp6_option_hash_ops;
+        struct in6_addr local_address;
+        struct hw_addr_data hw_addr;
+        uint16_t arp_type;
 
-/* Common option header */
-typedef struct DHCP6Option {
-        be16_t code;
-        be16_t len;
-        uint8_t data[];
-} _packed_ DHCP6Option;
+        sd_event *event;
+        sd_event_source *receive_message;
+        sd_event_source *timeout_resend;
+        sd_event_source *timeout_expire;
+        sd_event_source *timeout_t1;
+        sd_event_source *timeout_t2;
+        int event_priority;
+        int fd;
 
-/* Address option */
-struct iaaddr {
-        struct in6_addr address;
-        be32_t lifetime_preferred;
-        be32_t lifetime_valid;
-} _packed_;
+        sd_device *dev;
 
-/* Prefix Delegation Prefix option */
-struct iapdprefix {
-        be32_t lifetime_preferred;
-        be32_t lifetime_valid;
-        uint8_t prefixlen;
-        struct in6_addr address;
-} _packed_;
+        DHCP6State state;
+        bool information_request;
+        usec_t information_request_time_usec;
+        usec_t information_refresh_time_usec;
+        be32_t transaction_id;
+        usec_t transaction_start;
+        usec_t retransmit_time;
+        uint8_t retransmit_count;
 
-typedef struct DHCP6Address DHCP6Address;
+        bool iaid_set;
+        DHCP6IA ia_na;
+        DHCP6IA ia_pd;
+        DHCP6RequestIA request_ia;
+        struct duid duid;
+        size_t duid_len;
+        be16_t *req_opts;
+        size_t n_req_opts;
+        char *fqdn;
+        char *mudurl;
+        char **user_class;
+        char **vendor_class;
+        OrderedHashmap *extra_options;
+        OrderedSet *vendor_options;
+        bool rapid_commit;
 
-struct DHCP6Address {
-        LIST_FIELDS(DHCP6Address, addresses);
+        struct sd_dhcp6_lease *lease;
 
-        union {
-                struct iaaddr iaaddr;
-                struct iapdprefix iapdprefix;
-        };
+        sd_dhcp6_client_callback_t callback;
+        void *userdata;
+        bool send_release;
+
+        /* Ignore machine-ID when generating DUID. See dhcp_identifier_set_duid_en(). */
+        bool test_mode;
 };
 
-/* Non-temporary Address option */
-struct ia_na {
-        be32_t id;
-        be32_t lifetime_t1;
-        be32_t lifetime_t2;
-} _packed_;
-
-/* Prefix Delegation option */
-struct ia_pd {
-        be32_t id;
-        be32_t lifetime_t1;
-        be32_t lifetime_t2;
-} _packed_;
-
-/* Temporary Address option */
-struct ia_ta {
-        be32_t id;
-} _packed_;
-
-typedef struct DHCP6IA {
-        uint16_t type;
-        union {
-                struct ia_na ia_na;
-                struct ia_pd ia_pd;
-                struct ia_ta ia_ta;
-        };
-
-        LIST_HEAD(DHCP6Address, addresses);
-} DHCP6IA;
-
-typedef struct sd_dhcp6_client sd_dhcp6_client;
-
-int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code,
-                        size_t optlen, const void *optval);
-int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, const DHCP6IA *ia);
-int dhcp6_option_append_pd(uint8_t **buf, size_t *buflen, const DHCP6IA *pd, const DHCP6Address *hint_pd_prefix);
-int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn);
-int dhcp6_option_append_user_class(uint8_t **buf, size_t *buflen, char * const *user_class);
-int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *buflen, char * const *user_class);
-int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHashmap *vendor_options);
-
-int dhcp6_option_parse(
-                const uint8_t *buf,
-                size_t buflen,
-                size_t *offset,
-                uint16_t *ret_option_code,
-                size_t *ret_option_data_len,
-                const uint8_t **ret_option_data);
-int dhcp6_option_parse_status(DHCP6Option *option, size_t len);
-int dhcp6_option_parse_ia(sd_dhcp6_client *client, DHCP6Option *iaoption, be32_t iaid, DHCP6IA *ia, uint16_t *ret_status_code);
-int dhcp6_option_parse_addresses(
-                const uint8_t *optval,
-                size_t optlen,
-                struct in6_addr **addrs,
-                size_t *count);
-int dhcp6_option_parse_domainname_list(const uint8_t *optval, uint16_t optlen,
-                                       char ***str_arr);
-int dhcp6_option_parse_domainname(const uint8_t *optval, uint16_t optlen, char **str);
-
 int dhcp6_network_bind_udp_socket(int ifindex, struct in6_addr *address);
 int dhcp6_network_send_udp_socket(int s, struct in6_addr *address,
                                   const void *packet, size_t len);
 
-const char *dhcp6_message_type_to_string(int s) _const_;
-int dhcp6_message_type_from_string(const char *s) _pure_;
-const char *dhcp6_message_status_to_string(int s) _const_;
-int dhcp6_message_status_from_string(const char *s) _pure_;
-
+int dhcp6_client_send_message(sd_dhcp6_client *client);
 void dhcp6_client_set_test_mode(sd_dhcp6_client *client, bool test_mode);
+int dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id);
 
 #define log_dhcp6_client_errno(client, error, fmt, ...)         \
         log_interface_prefix_full_errno(                        \
                 "DHCPv6 client: ",                              \
-                sd_dhcp6_client_get_ifname(client),             \
+                sd_dhcp6_client, client,                        \
                 error, fmt, ##__VA_ARGS__)
 #define log_dhcp6_client(client, fmt, ...)                      \
         log_interface_prefix_full_errno_zerook(                 \
                 "DHCPv6 client: ",                              \
-                sd_dhcp6_client_get_ifname(client),             \
+                sd_dhcp6_client, client,                        \
                 0, fmt, ##__VA_ARGS__)
diff --git a/src/libsystemd-network/dhcp6-lease-internal.h b/src/libsystemd-network/dhcp6-lease-internal.h
index dbcb6d0..1f10dcc 100644
--- a/src/libsystemd-network/dhcp6-lease-internal.h
+++ b/src/libsystemd-network/dhcp6-lease-internal.h
@@ -5,22 +5,31 @@
   Copyright © 2014-2015 Intel Corporation. All rights reserved.
 ***/
 
-#include <stdint.h>
+#include <inttypes.h>
 
 #include "sd-dhcp6-lease.h"
 
-#include "dhcp6-internal.h"
+#include "dhcp6-option.h"
+#include "macro.h"
+#include "time-util.h"
 
 struct sd_dhcp6_lease {
         unsigned n_ref;
 
+        uint8_t *clientid;
+        size_t clientid_len;
         uint8_t *serverid;
         size_t serverid_len;
         uint8_t preference;
         bool rapid_commit;
+        triple_timestamp timestamp;
+        usec_t lifetime_t1;
+        usec_t lifetime_t2;
+        usec_t lifetime_valid;
+        struct in6_addr server_address;
 
-        DHCP6IA ia;
-        DHCP6IA pd;
+        DHCP6IA *ia_na; /* Identity association non-temporary addresses */
+        DHCP6IA *ia_pd; /* Identity association prefix delegation */
 
         DHCP6Address *addr_iter;
         DHCP6Address *prefix_iter;
@@ -28,34 +37,35 @@
         struct in6_addr *dns;
         size_t dns_count;
         char **domains;
-        size_t domains_count;
         struct in6_addr *ntp;
         size_t ntp_count;
         char **ntp_fqdn;
-        size_t ntp_fqdn_count;
         struct in6_addr *sntp;
         size_t sntp_count;
         char *fqdn;
 };
 
-int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire);
-DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia);
-
-int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id,
-                             size_t len);
-int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **id, size_t *len);
+int dhcp6_lease_get_lifetime(sd_dhcp6_lease *lease, usec_t *ret_t1, usec_t *ret_t2, usec_t *ret_valid);
+int dhcp6_lease_set_clientid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len);
+int dhcp6_lease_get_clientid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len);
+int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len);
+int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len);
 int dhcp6_lease_set_preference(sd_dhcp6_lease *lease, uint8_t preference);
-int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *preference);
+int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *ret);
 int dhcp6_lease_set_rapid_commit(sd_dhcp6_lease *lease);
-int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *rapid_commit);
+int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *ret);
 
-int dhcp6_lease_get_iaid(sd_dhcp6_lease *lease, be32_t *iaid);
-int dhcp6_lease_get_pd_iaid(sd_dhcp6_lease *lease, be32_t *iaid);
-
-int dhcp6_lease_set_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
-int dhcp6_lease_set_domains(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
-int dhcp6_lease_set_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
-int dhcp6_lease_add_sntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) ;
+int dhcp6_lease_add_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
+int dhcp6_lease_add_domains(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
+int dhcp6_lease_add_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
+int dhcp6_lease_add_sntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
 int dhcp6_lease_set_fqdn(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
 
 int dhcp6_lease_new(sd_dhcp6_lease **ret);
+int dhcp6_lease_new_from_message(
+                sd_dhcp6_client *client,
+                const DHCP6Message *message,
+                size_t len,
+                const triple_timestamp *timestamp,
+                const struct in6_addr *server_address,
+                sd_dhcp6_lease **ret);
diff --git a/src/libsystemd-network/dhcp6-network.c b/src/libsystemd-network/dhcp6-network.c
index 4f7bd53..a3e4e19 100644
--- a/src/libsystemd-network/dhcp6-network.c
+++ b/src/libsystemd-network/dhcp6-network.c
@@ -23,7 +23,7 @@
                 .in6.sin6_port = htobe16(DHCP6_PORT_CLIENT),
                 .in6.sin6_scope_id = ifindex,
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         assert(ifindex > 0);
@@ -47,6 +47,10 @@
         if (r < 0)
                 return r;
 
+        r = setsockopt_int(s, SOL_SOCKET, SO_TIMESTAMP, true);
+        if (r < 0)
+                return r;
+
         r = bind(s, &src.sa, sizeof(src.in6));
         if (r < 0)
                 return -errno;
diff --git a/src/libsystemd-network/dhcp6-option.c b/src/libsystemd-network/dhcp6-option.c
index 8f763de..a6b74e0 100644
--- a/src/libsystemd-network/dhcp6-option.c
+++ b/src/libsystemd-network/dhcp6-option.c
@@ -9,87 +9,259 @@
 #include "sd-dhcp6-client.h"
 
 #include "alloc-util.h"
-#include "dhcp-identifier.h"
 #include "dhcp6-internal.h"
-#include "dhcp6-lease-internal.h"
+#include "dhcp6-option.h"
 #include "dhcp6-protocol.h"
 #include "dns-domain.h"
+#include "escape.h"
 #include "memory-util.h"
-#include "sparse-endian.h"
 #include "strv.h"
 #include "unaligned.h"
 
-typedef struct DHCP6StatusOption {
-        struct DHCP6Option option;
-        be16_t status;
-        char msg[];
-} _packed_ DHCP6StatusOption;
-
-typedef struct DHCP6AddressOption {
-        struct DHCP6Option option;
-        struct iaaddr iaaddr;
-        uint8_t options[];
-} _packed_ DHCP6AddressOption;
-
-typedef struct DHCP6PDPrefixOption {
-        struct DHCP6Option option;
-        struct iapdprefix iapdprefix;
-        uint8_t options[];
-} _packed_ DHCP6PDPrefixOption;
-
 #define DHCP6_OPTION_IA_NA_LEN (sizeof(struct ia_na))
 #define DHCP6_OPTION_IA_PD_LEN (sizeof(struct ia_pd))
 #define DHCP6_OPTION_IA_TA_LEN (sizeof(struct ia_ta))
 
-static int option_append_hdr(uint8_t **buf, size_t *buflen, uint16_t optcode, size_t optlen) {
-        DHCP6Option *option;
+bool dhcp6_option_can_request(uint16_t option) {
+        /* See Client ORO field in
+         * https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-2 */
 
-        assert_return(buf, -EINVAL);
-        assert_return(*buf, -EINVAL);
-        assert_return(buflen, -EINVAL);
+        switch (option) {
+        case SD_DHCP6_OPTION_CLIENTID:
+        case SD_DHCP6_OPTION_SERVERID:
+        case SD_DHCP6_OPTION_IA_NA:
+        case SD_DHCP6_OPTION_IA_TA:
+        case SD_DHCP6_OPTION_IAADDR:
+        case SD_DHCP6_OPTION_ORO:
+        case SD_DHCP6_OPTION_PREFERENCE:
+        case SD_DHCP6_OPTION_ELAPSED_TIME:
+        case SD_DHCP6_OPTION_RELAY_MSG:
+        case SD_DHCP6_OPTION_AUTH:
+        case SD_DHCP6_OPTION_UNICAST:
+        case SD_DHCP6_OPTION_STATUS_CODE:
+        case SD_DHCP6_OPTION_RAPID_COMMIT:
+        case SD_DHCP6_OPTION_USER_CLASS:
+        case SD_DHCP6_OPTION_VENDOR_CLASS:
+                return false;
+        case SD_DHCP6_OPTION_VENDOR_OPTS:
+                return true;
+        case SD_DHCP6_OPTION_INTERFACE_ID:
+        case SD_DHCP6_OPTION_RECONF_MSG:
+        case SD_DHCP6_OPTION_RECONF_ACCEPT:
+                return false;
+        case SD_DHCP6_OPTION_SIP_SERVER_DOMAIN_NAME:
+        case SD_DHCP6_OPTION_SIP_SERVER_ADDRESS:
+        case SD_DHCP6_OPTION_DNS_SERVER:
+        case SD_DHCP6_OPTION_DOMAIN:
+                return true;
+        case SD_DHCP6_OPTION_IA_PD:
+        case SD_DHCP6_OPTION_IA_PD_PREFIX:
+                return false;
+        case SD_DHCP6_OPTION_NIS_SERVER:
+        case SD_DHCP6_OPTION_NISP_SERVER:
+        case SD_DHCP6_OPTION_NIS_DOMAIN_NAME:
+        case SD_DHCP6_OPTION_NISP_DOMAIN_NAME:
+        case SD_DHCP6_OPTION_SNTP_SERVER:
+                return true;
+        case SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME:
+                return false; /* This is automatically set when sending INFORMATION_REQUEST message. */
+        case SD_DHCP6_OPTION_BCMCS_SERVER_D:
+        case SD_DHCP6_OPTION_BCMCS_SERVER_A:
+        case SD_DHCP6_OPTION_GEOCONF_CIVIC:
+                return true;
+        case SD_DHCP6_OPTION_REMOTE_ID:
+        case SD_DHCP6_OPTION_SUBSCRIBER_ID:
+                return false;
+        case SD_DHCP6_OPTION_CLIENT_FQDN:
+        case SD_DHCP6_OPTION_PANA_AGENT:
+        case SD_DHCP6_OPTION_POSIX_TIMEZONE:
+        case SD_DHCP6_OPTION_TZDB_TIMEZONE:
+                return true;
+        case SD_DHCP6_OPTION_ERO:
+        case SD_DHCP6_OPTION_LQ_QUERY:
+        case SD_DHCP6_OPTION_CLIENT_DATA:
+        case SD_DHCP6_OPTION_CLT_TIME:
+        case SD_DHCP6_OPTION_LQ_RELAY_DATA:
+        case SD_DHCP6_OPTION_LQ_CLIENT_LINK:
+                return false;
+        case SD_DHCP6_OPTION_MIP6_HNIDF:
+        case SD_DHCP6_OPTION_MIP6_VDINF:
+        case SD_DHCP6_OPTION_V6_LOST:
+        case SD_DHCP6_OPTION_CAPWAP_AC_V6:
+                return true;
+        case SD_DHCP6_OPTION_RELAY_ID:
+                return false;
+        case SD_DHCP6_OPTION_IPV6_ADDRESS_MOS:
+        case SD_DHCP6_OPTION_IPV6_FQDN_MOS:
+        case SD_DHCP6_OPTION_NTP_SERVER:
+        case SD_DHCP6_OPTION_V6_ACCESS_DOMAIN:
+        case SD_DHCP6_OPTION_SIP_UA_CS_LIST:
+        case SD_DHCP6_OPTION_BOOTFILE_URL:
+        case SD_DHCP6_OPTION_BOOTFILE_PARAM:
+                return true;
+        case SD_DHCP6_OPTION_CLIENT_ARCH_TYPE:
+                return false;
+        case SD_DHCP6_OPTION_NII:
+        case SD_DHCP6_OPTION_GEOLOCATION:
+        case SD_DHCP6_OPTION_AFTR_NAME:
+        case SD_DHCP6_OPTION_ERP_LOCAL_DOMAIN_NAME:
+                return true;
+        case SD_DHCP6_OPTION_RSOO:
+                return false;
+        case SD_DHCP6_OPTION_PD_EXCLUDE:
+                return true;
+        case SD_DHCP6_OPTION_VSS:
+                return false;
+        case SD_DHCP6_OPTION_MIP6_IDINF:
+        case SD_DHCP6_OPTION_MIP6_UDINF:
+        case SD_DHCP6_OPTION_MIP6_HNP:
+        case SD_DHCP6_OPTION_MIP6_HAA:
+        case SD_DHCP6_OPTION_MIP6_HAF:
+        case SD_DHCP6_OPTION_RDNSS_SELECTION:
+        case SD_DHCP6_OPTION_KRB_PRINCIPAL_NAME:
+        case SD_DHCP6_OPTION_KRB_REALM_NAME:
+        case SD_DHCP6_OPTION_KRB_DEFAULT_REALM_NAME:
+        case SD_DHCP6_OPTION_KRB_KDC:
+                return true;
+        case SD_DHCP6_OPTION_CLIENT_LINKLAYER_ADDR:
+        case SD_DHCP6_OPTION_LINK_ADDRESS:
+        case SD_DHCP6_OPTION_RADIUS:
+        case SD_DHCP6_OPTION_SOL_MAX_RT: /* Automatically set when sending SOLICIT message. */
+        case SD_DHCP6_OPTION_INF_MAX_RT: /* Automatically set when sending INFORMATION_REQUEST message. */
+                return false;
+        case SD_DHCP6_OPTION_ADDRSEL:
+        case SD_DHCP6_OPTION_ADDRSEL_TABLE:
+        case SD_DHCP6_OPTION_V6_PCP_SERVER:
+                return true;
+        case SD_DHCP6_OPTION_DHCPV4_MSG:
+                return false;
+        case SD_DHCP6_OPTION_DHCP4_O_DHCP6_SERVER:
+                return true;
+        case SD_DHCP6_OPTION_S46_RULE:
+                return false;
+        case SD_DHCP6_OPTION_S46_BR:
+                return true;
+        case SD_DHCP6_OPTION_S46_DMR:
+        case SD_DHCP6_OPTION_S46_V4V6BIND:
+        case SD_DHCP6_OPTION_S46_PORTPARAMS:
+                return false;
+        case SD_DHCP6_OPTION_S46_CONT_MAPE:
+        case SD_DHCP6_OPTION_S46_CONT_MAPT:
+        case SD_DHCP6_OPTION_S46_CONT_LW:
+        case SD_DHCP6_OPTION_4RD:
+        case SD_DHCP6_OPTION_4RD_MAP_RULE:
+        case SD_DHCP6_OPTION_4RD_NON_MAP_RULE:
+                return true;
+        case SD_DHCP6_OPTION_LQ_BASE_TIME:
+        case SD_DHCP6_OPTION_LQ_START_TIME:
+        case SD_DHCP6_OPTION_LQ_END_TIME:
+                return false;
+        case SD_DHCP6_OPTION_CAPTIVE_PORTAL:
+        case SD_DHCP6_OPTION_MPL_PARAMETERS:
+                return true;
+        case SD_DHCP6_OPTION_ANI_ATT:
+        case SD_DHCP6_OPTION_ANI_NETWORK_NAME:
+        case SD_DHCP6_OPTION_ANI_AP_NAME:
+        case SD_DHCP6_OPTION_ANI_AP_BSSID:
+        case SD_DHCP6_OPTION_ANI_OPERATOR_ID:
+        case SD_DHCP6_OPTION_ANI_OPERATOR_REALM:
+                return false;
+        case SD_DHCP6_OPTION_S46_PRIORITY:
+                return true;
+        case SD_DHCP6_OPTION_MUD_URL_V6:
+                return false;
+        case SD_DHCP6_OPTION_V6_PREFIX64:
+                return true;
+        case SD_DHCP6_OPTION_F_BINDING_STATUS:
+        case SD_DHCP6_OPTION_F_CONNECT_FLAGS:
+        case SD_DHCP6_OPTION_F_DNS_REMOVAL_INFO:
+        case SD_DHCP6_OPTION_F_DNS_HOST_NAME:
+        case SD_DHCP6_OPTION_F_DNS_ZONE_NAME:
+        case SD_DHCP6_OPTION_F_DNS_FLAGS:
+        case SD_DHCP6_OPTION_F_EXPIRATION_TIME:
+        case SD_DHCP6_OPTION_F_MAX_UNACKED_BNDUPD:
+        case SD_DHCP6_OPTION_F_MCLT:
+        case SD_DHCP6_OPTION_F_PARTNER_LIFETIME:
+        case SD_DHCP6_OPTION_F_PARTNER_LIFETIME_SENT:
+        case SD_DHCP6_OPTION_F_PARTNER_DOWN_TIME:
+        case SD_DHCP6_OPTION_F_PARTNER_RAW_CLT_TIME:
+        case SD_DHCP6_OPTION_F_PROTOCOL_VERSION:
+        case SD_DHCP6_OPTION_F_KEEPALIVE_TIME:
+        case SD_DHCP6_OPTION_F_RECONFIGURE_DATA:
+        case SD_DHCP6_OPTION_F_RELATIONSHIP_NAME:
+        case SD_DHCP6_OPTION_F_SERVER_FLAGS:
+        case SD_DHCP6_OPTION_F_SERVER_STATE:
+        case SD_DHCP6_OPTION_F_START_TIME_OF_STATE:
+        case SD_DHCP6_OPTION_F_STATE_EXPIRATION_TIME:
+        case SD_DHCP6_OPTION_RELAY_PORT:
+                return false;
+        case SD_DHCP6_OPTION_V6_SZTP_REDIRECT:
+        case SD_DHCP6_OPTION_S46_BIND_IPV6_PREFIX:
+                return true;
+        case SD_DHCP6_OPTION_IA_LL:
+        case SD_DHCP6_OPTION_LLADDR:
+        case SD_DHCP6_OPTION_SLAP_QUAD:
+                return false;
+        case SD_DHCP6_OPTION_V6_DOTS_RI:
+        case SD_DHCP6_OPTION_V6_DOTS_ADDRESS:
+        case SD_DHCP6_OPTION_IPV6_ADDRESS_ANDSF:
+                return true;
+        default:
+                return false;
+        }
+}
 
-        option = (DHCP6Option*) *buf;
+static int option_append_hdr(uint8_t **buf, size_t *offset, uint16_t optcode, size_t optlen) {
+        assert(buf);
+        assert(*buf);
+        assert(offset);
 
-        if (optlen > 0xffff || *buflen < optlen + offsetof(DHCP6Option, data))
+        if (optlen > 0xffff)
                 return -ENOBUFS;
 
-        option->code = htobe16(optcode);
-        option->len = htobe16(optlen);
+        if (optlen + offsetof(DHCP6Option, data) > SIZE_MAX - *offset)
+                return -ENOBUFS;
 
-        *buf += offsetof(DHCP6Option, data);
-        *buflen -= offsetof(DHCP6Option, data);
+        if (!GREEDY_REALLOC(*buf, *offset + optlen + offsetof(DHCP6Option, data)))
+                return -ENOMEM;
 
+        unaligned_write_be16(*buf + *offset + offsetof(DHCP6Option, code), optcode);
+        unaligned_write_be16(*buf + *offset + offsetof(DHCP6Option, len), optlen);
+
+        *offset += offsetof(DHCP6Option, data);
         return 0;
 }
 
-int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code,
-                        size_t optlen, const void *optval) {
+int dhcp6_option_append(
+                uint8_t **buf,
+                size_t *offset,
+                uint16_t code,
+                size_t optlen,
+                const void *optval) {
+
         int r;
 
-        assert_return(optval || optlen == 0, -EINVAL);
+        assert(optval || optlen == 0);
 
-        r = option_append_hdr(buf, buflen, code, optlen);
+        r = option_append_hdr(buf, offset, code, optlen);
         if (r < 0)
                 return r;
 
-        memcpy_safe(*buf, optval, optlen);
-
-        *buf += optlen;
-        *buflen -= optlen;
+        memcpy_safe(*buf + *offset, optval, optlen);
+        *offset += optlen;
 
         return 0;
 }
 
-int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHashmap *vendor_options) {
+int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *offset, OrderedSet *vendor_options) {
         sd_dhcp6_option *options;
         int r;
 
         assert(buf);
         assert(*buf);
-        assert(buflen);
-        assert(vendor_options);
+        assert(offset);
 
-        ORDERED_HASHMAP_FOREACH(options, vendor_options) {
+        ORDERED_SET_FOREACH(options, vendor_options) {
                 _cleanup_free_ uint8_t *p = NULL;
                 size_t total;
 
@@ -104,7 +276,7 @@
                 unaligned_write_be16(p + 6, options->length);
                 memcpy(p + 8, options->data, options->length);
 
-                r = dhcp6_option_append(buf, buflen, SD_DHCP6_OPTION_VENDOR_OPTS, total, p);
+                r = dhcp6_option_append(buf, offset, SD_DHCP6_OPTION_VENDOR_OPTS, total, p);
                 if (r < 0)
                         return r;
         }
@@ -112,172 +284,103 @@
         return 0;
 }
 
-int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, const DHCP6IA *ia) {
-        size_t ia_buflen, ia_addrlen = 0;
-        struct ia_na ia_na;
-        struct ia_ta ia_ta;
-        DHCP6Address *addr;
-        uint8_t *ia_hdr;
-        uint16_t len;
-        void *p;
+static int option_append_ia_address(uint8_t **buf, size_t *offset, const struct iaaddr *address) {
+        assert(buf);
+        assert(*buf);
+        assert(offset);
+        assert(address);
+
+        /* Do not append T1 and T2. */
+        const struct iaaddr a = {
+                .address = address->address,
+        };
+
+        return dhcp6_option_append(buf, offset, SD_DHCP6_OPTION_IAADDR, sizeof(struct iaaddr), &a);
+}
+
+static int option_append_pd_prefix(uint8_t **buf, size_t *offset, const struct iapdprefix *prefix) {
+        assert(buf);
+        assert(*buf);
+        assert(offset);
+        assert(prefix);
+
+        if (prefix->prefixlen == 0)
+                return -EINVAL;
+
+        /* Do not append T1 and T2. */
+        const struct iapdprefix p = {
+                .prefixlen = prefix->prefixlen,
+                .address = prefix->address,
+        };
+
+        return dhcp6_option_append(buf, offset, SD_DHCP6_OPTION_IA_PD_PREFIX, sizeof(struct iapdprefix), &p);
+}
+
+int dhcp6_option_append_ia(uint8_t **buf, size_t *offset, const DHCP6IA *ia) {
+        _cleanup_free_ uint8_t *data = NULL;
+        struct ia_header header;
+        size_t len;
         int r;
 
-        assert_return(buf, -EINVAL);
-        assert_return(*buf, -EINVAL);
-        assert_return(buflen, -EINVAL);
-        assert_return(ia, -EINVAL);
+        assert(buf);
+        assert(*buf);
+        assert(offset);
+        assert(ia);
 
         /* client should not send set T1 and T2. See, RFC 8415, and issue #18090. */
 
         switch (ia->type) {
         case SD_DHCP6_OPTION_IA_NA:
-                len = DHCP6_OPTION_IA_NA_LEN;
-                ia_na = (struct ia_na) {
-                        .id = ia->ia_na.id,
+        case SD_DHCP6_OPTION_IA_PD:
+                len = sizeof(struct ia_header);
+                header = (struct ia_header) {
+                        .id = ia->header.id,
                 };
-                p = &ia_na;
                 break;
 
         case SD_DHCP6_OPTION_IA_TA:
-                len = DHCP6_OPTION_IA_TA_LEN;
-                ia_ta = (struct ia_ta) {
-                        .id = ia->ia_ta.id,
+                len = sizeof(header.id); /* IA_TA does not have lifetime. */
+                header = (struct ia_header) {
+                        .id = ia->header.id,
                 };
-                p = &ia_ta;
                 break;
 
         default:
-                return -EINVAL;
+                assert_not_reached();
         }
 
-        if (*buflen < offsetof(DHCP6Option, data) + len)
-                return -ENOBUFS;
+        if (!GREEDY_REALLOC(data, len))
+                return -ENOMEM;
 
-        ia_hdr = *buf;
-        ia_buflen = *buflen;
-
-        *buf += offsetof(DHCP6Option, data);
-        *buflen -= offsetof(DHCP6Option, data);
-
-        memcpy(*buf, p, len);
-
-        *buf += len;
-        *buflen -= len;
+        memcpy(data, &header, len);
 
         LIST_FOREACH(addresses, addr, ia->addresses) {
-                struct iaaddr a = {
-                        .address = addr->iaaddr.address,
-                };
-
-                r = option_append_hdr(buf, buflen, SD_DHCP6_OPTION_IAADDR, sizeof(struct iaaddr));
+                if (ia->type == SD_DHCP6_OPTION_IA_PD)
+                        r = option_append_pd_prefix(&data, &len, &addr->iapdprefix);
+                else
+                        r = option_append_ia_address(&data, &len, &addr->iaaddr);
                 if (r < 0)
                         return r;
-
-                memcpy(*buf, &a, sizeof(struct iaaddr));
-
-                *buf += sizeof(struct iaaddr);
-                *buflen -= sizeof(struct iaaddr);
-
-                ia_addrlen += offsetof(DHCP6Option, data) + sizeof(struct iaaddr);
         }
 
-        return option_append_hdr(&ia_hdr, &ia_buflen, ia->type, len + ia_addrlen);
+        return dhcp6_option_append(buf, offset, ia->type, len, data);
 }
 
-static int option_append_pd_prefix(uint8_t **buf, size_t *buflen, const DHCP6Address *prefix) {
-        struct iapdprefix p;
+int dhcp6_option_append_fqdn(uint8_t **buf, size_t *offset, const char *fqdn) {
+        uint8_t buffer[1 + DNS_WIRE_FORMAT_HOSTNAME_MAX];
         int r;
 
         assert(buf);
         assert(*buf);
-        assert(buflen);
-        assert(prefix);
+        assert(offset);
 
-        if (prefix->iapdprefix.prefixlen == 0)
-                return -EINVAL;
-
-        /* Do not append T1 and T2. */
-
-        p = (struct iapdprefix) {
-                .prefixlen = prefix->iapdprefix.prefixlen,
-                .address = prefix->iapdprefix.address,
-        };
-
-        r = option_append_hdr(buf, buflen, SD_DHCP6_OPTION_IA_PD_PREFIX, sizeof(struct iapdprefix));
-        if (r < 0)
-                return r;
-
-        memcpy(*buf, &p, sizeof(struct iapdprefix));
-
-        *buf += sizeof(struct iapdprefix);
-        *buflen -= sizeof(struct iapdprefix);
-
-        return offsetof(DHCP6Option, data) + sizeof(struct iapdprefix);
-}
-
-int dhcp6_option_append_pd(uint8_t **buf, size_t *buflen, const DHCP6IA *pd, const DHCP6Address *hint_pd_prefix) {
-        struct ia_pd ia_pd;
-        size_t len, pd_buflen;
-        uint8_t *pd_hdr;
-        int r;
-
-        assert_return(buf, -EINVAL);
-        assert_return(*buf, -EINVAL);
-        assert_return(buflen, -EINVAL);
-        assert_return(pd, -EINVAL);
-        assert_return(pd->type == SD_DHCP6_OPTION_IA_PD, -EINVAL);
-
-        /* Do not set T1 and T2. */
-        ia_pd = (struct ia_pd) {
-                .id = pd->ia_pd.id,
-        };
-        len = sizeof(struct ia_pd);
-
-        if (*buflen < offsetof(DHCP6Option, data) + len)
-                return -ENOBUFS;
-
-        pd_hdr = *buf;
-        pd_buflen = *buflen;
-
-        /* The header will be written at the end of this function. */
-        *buf += offsetof(DHCP6Option, data);
-        *buflen -= offsetof(DHCP6Option, data);
-
-        memcpy(*buf, &ia_pd, len);
-
-        *buf += sizeof(struct ia_pd);
-        *buflen -= sizeof(struct ia_pd);
-
-        DHCP6Address *prefix;
-        LIST_FOREACH(addresses, prefix, pd->addresses) {
-                r = option_append_pd_prefix(buf, buflen, prefix);
-                if (r < 0)
-                        return r;
-
-                len += r;
-        }
-
-        if (hint_pd_prefix && hint_pd_prefix->iapdprefix.prefixlen > 0) {
-                r = option_append_pd_prefix(buf, buflen, hint_pd_prefix);
-                if (r < 0)
-                        return r;
-
-                len += r;
-        }
-
-        return option_append_hdr(&pd_hdr, &pd_buflen, pd->type, len);
-}
-
-int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn) {
-        uint8_t buffer[1 + DNS_WIRE_FORMAT_HOSTNAME_MAX];
-        int r;
-
-        assert_return(buf && *buf && buflen && fqdn, -EINVAL);
+        if (isempty(fqdn))
+                return 0;
 
         buffer[0] = DHCP6_FQDN_FLAG_S; /* Request server to perform AAAA RR DNS updates */
 
         /* Store domain name after flags field */
-        r = dns_name_to_wire_format(fqdn, buffer + 1, sizeof(buffer) - 1,  false);
+        r = dns_name_to_wire_format(fqdn, buffer + 1, sizeof(buffer) - 1, false);
         if (r <= 0)
                 return r;
 
@@ -290,84 +393,70 @@
         if (dns_name_is_single_label(fqdn))
                 r--;
 
-        r = dhcp6_option_append(buf, buflen, SD_DHCP6_OPTION_FQDN, 1 + r, buffer);
-
-        return r;
+        return dhcp6_option_append(buf, offset, SD_DHCP6_OPTION_CLIENT_FQDN, 1 + r, buffer);
 }
 
-int dhcp6_option_append_user_class(uint8_t **buf, size_t *buflen, char * const *user_class) {
+int dhcp6_option_append_user_class(uint8_t **buf, size_t *offset, char * const *user_class) {
         _cleanup_free_ uint8_t *p = NULL;
-        size_t total = 0, offset = 0;
-        char * const *s;
+        size_t n = 0;
 
         assert(buf);
         assert(*buf);
-        assert(buflen);
-        assert(!strv_isempty(user_class));
+        assert(offset);
+
+        if (strv_isempty(user_class))
+                return 0;
 
         STRV_FOREACH(s, user_class) {
                 size_t len = strlen(*s);
-                uint8_t *q;
-
-                if (len > 0xffff || len == 0)
-                        return -EINVAL;
-                q = realloc(p, total + len + 2);
-                if (!q)
-                        return -ENOMEM;
-
-                p = q;
-
-                unaligned_write_be16(&p[offset], len);
-                memcpy(&p[offset + 2], *s, len);
-
-                offset += 2 + len;
-                total += 2 + len;
-        }
-
-        return dhcp6_option_append(buf, buflen, SD_DHCP6_OPTION_USER_CLASS, total, p);
-}
-
-int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *buflen, char * const *vendor_class) {
-        _cleanup_free_ uint8_t *p = NULL;
-        uint32_t enterprise_identifier;
-        size_t total, offset;
-        char * const *s;
-
-        assert(buf);
-        assert(*buf);
-        assert(buflen);
-        assert(!strv_isempty(vendor_class));
-
-        enterprise_identifier = htobe32(SYSTEMD_PEN);
-
-        p = memdup(&enterprise_identifier, sizeof(enterprise_identifier));
-        if (!p)
-                return -ENOMEM;
-
-        total = sizeof(enterprise_identifier);
-        offset = total;
-
-        STRV_FOREACH(s, vendor_class) {
-                size_t len = strlen(*s);
-                uint8_t *q;
 
                 if (len > UINT16_MAX || len == 0)
                         return -EINVAL;
 
-                q = realloc(p, total + len + 2);
-                if (!q)
+                if (!GREEDY_REALLOC(p, n + len + 2))
                         return -ENOMEM;
 
-                p = q;
-
-                unaligned_write_be16(&p[offset], len);
-                memcpy(&p[offset + 2], *s, len);
-
-                offset += 2 + len;
-                total += 2 + len;
+                unaligned_write_be16(p + n, len);
+                memcpy(p + n + 2, *s, len);
+                n += len + 2;
         }
 
-        return dhcp6_option_append(buf, buflen, SD_DHCP6_OPTION_VENDOR_CLASS, total, p);
+        return dhcp6_option_append(buf, offset, SD_DHCP6_OPTION_USER_CLASS, n, p);
+}
+
+int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *offset, char * const *vendor_class) {
+        _cleanup_free_ uint8_t *p = NULL;
+        size_t n = 0;
+
+        assert(buf);
+        assert(*buf);
+        assert(offset);
+
+        if (strv_isempty(vendor_class))
+                return 0;
+
+        if (!GREEDY_REALLOC(p, sizeof(be32_t)))
+                return -ENOMEM;
+
+        /* Enterprise Identifier */
+        unaligned_write_be32(p, SYSTEMD_PEN);
+        n += sizeof(be32_t);
+
+        STRV_FOREACH(s, vendor_class) {
+                size_t len = strlen(*s);
+
+                if (len > UINT16_MAX || len == 0)
+                        return -EINVAL;
+
+                if (!GREEDY_REALLOC(p, n + len + 2))
+                        return -ENOMEM;
+
+                unaligned_write_be16(p + n, len);
+                memcpy(p + n + 2, *s, len);
+                n += len + 2;
+        }
+
+        return dhcp6_option_append(buf, offset, SD_DHCP6_OPTION_VENDOR_CLASS, n, p);
 }
 
 int dhcp6_option_parse(
@@ -378,7 +467,6 @@
                 size_t *ret_option_data_len,
                 const uint8_t **ret_option_data) {
 
-        const DHCP6Option *option;
         size_t len;
 
         assert(buf);
@@ -390,313 +478,300 @@
         if (buflen < offsetof(DHCP6Option, data))
                 return -EBADMSG;
 
-        if (*offset >= buflen - offsetof(DHCP6Option, data))
+        if (*offset > buflen - offsetof(DHCP6Option, data))
                 return -EBADMSG;
 
-        option = (const DHCP6Option*) (buf + *offset);
-        len = be16toh(option->len);
+        len = unaligned_read_be16(buf + *offset + offsetof(DHCP6Option, len));
 
         if (len > buflen - offsetof(DHCP6Option, data) - *offset)
                 return -EBADMSG;
 
-        *offset += offsetof(DHCP6Option, data) + len;
-        *ret_option_code = be16toh(option->code);
+        *ret_option_code = unaligned_read_be16(buf + *offset + offsetof(DHCP6Option, code));
         *ret_option_data_len = len;
-        *ret_option_data = option->data;
+        *ret_option_data = len == 0 ? NULL : buf + *offset + offsetof(DHCP6Option, data);
+        *offset += offsetof(DHCP6Option, data) + len;
 
         return 0;
 }
 
-int dhcp6_option_parse_status(DHCP6Option *option, size_t len) {
-        DHCP6StatusOption *statusopt = (DHCP6StatusOption *)option;
+int dhcp6_option_parse_status(const uint8_t *data, size_t data_len, char **ret_status_message) {
+        DHCP6Status status;
 
-        if (len < sizeof(DHCP6StatusOption) ||
-            be16toh(option->len) + offsetof(DHCP6Option, data) < sizeof(DHCP6StatusOption))
-                return -ENOBUFS;
+        assert(data || data_len == 0);
 
-        return be16toh(statusopt->status);
-}
+        if (data_len < sizeof(uint16_t))
+                return -EBADMSG;
 
-static int dhcp6_option_parse_address(sd_dhcp6_client *client, DHCP6Option *option, DHCP6IA *ia, uint32_t *ret_lifetime_valid) {
-        DHCP6AddressOption *addr_option = (DHCP6AddressOption *)option;
-        DHCP6Address *addr;
-        uint32_t lt_valid, lt_pref;
-        int r;
+        status = unaligned_read_be16(data);
 
-        if (be16toh(option->len) + offsetof(DHCP6Option, data) < sizeof(*addr_option))
-                return -ENOBUFS;
+        if (ret_status_message) {
+                _cleanup_free_ char *msg = NULL;
+                const char *s;
 
-        lt_valid = be32toh(addr_option->iaaddr.lifetime_valid);
-        lt_pref = be32toh(addr_option->iaaddr.lifetime_preferred);
+                /* The status message MUST NOT be null-terminated. See section 21.13 of RFC8415.
+                 * Let's escape unsafe characters for safety. */
+                msg = cescape_length((const char*) (data + sizeof(uint16_t)), data_len - sizeof(uint16_t));
+                if (!msg)
+                        return -ENOMEM;
 
-        if (lt_valid == 0 || lt_pref > lt_valid)
-                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
-                                              "Valid lifetime of an IA address is zero or "
-                                              "preferred lifetime %"PRIu32" > valid lifetime %"PRIu32,
-                                              lt_pref, lt_valid);
+                s = dhcp6_message_status_to_string(status);
+                if (s && !strextend_with_separator(&msg, ": ", s))
+                        return -ENOMEM;
 
-        if (be16toh(option->len) + offsetof(DHCP6Option, data) > sizeof(*addr_option)) {
-                r = dhcp6_option_parse_status((DHCP6Option *)addr_option->options, be16toh(option->len) + offsetof(DHCP6Option, data) - sizeof(*addr_option));
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
-                                                      "Non-zero status code '%s' for address is received",
-                                                      dhcp6_message_status_to_string(r));
+                *ret_status_message = TAKE_PTR(msg);
         }
 
-        addr = new0(DHCP6Address, 1);
-        if (!addr)
-                return -ENOMEM;
+        return status;
+}
 
-        LIST_INIT(addresses, addr);
-        memcpy(&addr->iaaddr, option->data, sizeof(addr->iaaddr));
+static int dhcp6_option_parse_ia_options(sd_dhcp6_client *client, const uint8_t *buf, size_t buflen) {
+        int r;
 
-        LIST_PREPEND(addresses, ia->addresses, addr);
+        assert(buf || buflen == 0);
 
-        *ret_lifetime_valid = be32toh(addr->iaaddr.lifetime_valid);
+        for (size_t offset = 0; offset < buflen;) {
+                const uint8_t *data;
+                size_t data_len;
+                uint16_t code;
+
+                r = dhcp6_option_parse(buf, buflen, &offset, &code, &data_len, &data);
+                if (r < 0)
+                        return r;
+
+                switch (code) {
+                case SD_DHCP6_OPTION_STATUS_CODE: {
+                        _cleanup_free_ char *msg = NULL;
+
+                        r = dhcp6_option_parse_status(data, data_len, &msg);
+                        if (r == -ENOMEM)
+                                return r;
+                        if (r > 0)
+                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                                              "Received an IA address or PD prefix option with non-zero status%s%s",
+                                                              isempty(msg) ? "." : ": ", strempty(msg));
+                        if (r < 0)
+                                /* Let's log but ignore the invalid status option. */
+                                log_dhcp6_client_errno(client, r,
+                                                       "Received an IA address or PD prefix option with an invalid status sub option, ignoring: %m");
+                        break;
+                }
+                default:
+                        log_dhcp6_client(client, "Received an unknown sub option %u in IA address or PD prefix, ignoring.", code);
+                }
+        }
 
         return 0;
 }
 
-static int dhcp6_option_parse_pdprefix(sd_dhcp6_client *client, DHCP6Option *option, DHCP6IA *ia, uint32_t *ret_lifetime_valid) {
-        DHCP6PDPrefixOption *pdprefix_option = (DHCP6PDPrefixOption *)option;
-        DHCP6Address *prefix;
+static int dhcp6_option_parse_ia_address(sd_dhcp6_client *client, DHCP6IA *ia, const uint8_t *data, size_t len) {
+        _cleanup_free_ DHCP6Address *a = NULL;
         uint32_t lt_valid, lt_pref;
         int r;
 
-        if (be16toh(option->len) + offsetof(DHCP6Option, data) < sizeof(*pdprefix_option))
-                return -ENOBUFS;
+        assert(ia);
+        assert(data || len == 0);
 
-        lt_valid = be32toh(pdprefix_option->iapdprefix.lifetime_valid);
-        lt_pref = be32toh(pdprefix_option->iapdprefix.lifetime_preferred);
-
-        if (lt_valid == 0 || lt_pref > lt_valid)
+        if (!IN_SET(ia->type, SD_DHCP6_OPTION_IA_NA, SD_DHCP6_OPTION_IA_TA))
                 return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
-                                              "Valid lifetieme of a PD prefix is zero or "
-                                              "preferred lifetime %"PRIu32" > valid lifetime %"PRIu32,
-                                              lt_pref, lt_valid);
+                                              "Received an IA address sub-option in an invalid option, ignoring.");
 
-        if (be16toh(option->len) + offsetof(DHCP6Option, data) > sizeof(*pdprefix_option)) {
-                r = dhcp6_option_parse_status((DHCP6Option *)pdprefix_option->options, be16toh(option->len) + offsetof(DHCP6Option, data) - sizeof(*pdprefix_option));
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
-                                                      "Non-zero status code '%s' for PD prefix is received",
-                                                      dhcp6_message_status_to_string(r));
-        }
+        if (len < sizeof(struct iaaddr))
+                return -EBADMSG;
 
-        prefix = new0(DHCP6Address, 1);
-        if (!prefix)
+        a = new(DHCP6Address, 1);
+        if (!a)
                 return -ENOMEM;
 
-        LIST_INIT(addresses, prefix);
-        memcpy(&prefix->iapdprefix, option->data, sizeof(prefix->iapdprefix));
+        memcpy(&a->iaaddr, data, sizeof(struct iaaddr));
 
-        LIST_PREPEND(addresses, ia->addresses, prefix);
+        lt_valid = be32toh(a->iaaddr.lifetime_valid);
+        lt_pref = be32toh(a->iaaddr.lifetime_preferred);
 
-        *ret_lifetime_valid = be32toh(prefix->iapdprefix.lifetime_valid);
+        if (lt_valid == 0)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received an IA address with zero valid lifetime, ignoring.");
+        if (lt_pref > lt_valid)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received an IA address with preferred lifetime %"PRIu32
+                                              " larger than valid lifetime %"PRIu32", ignoring.",
+                                              lt_pref, lt_valid);
 
+        if (len > sizeof(struct iaaddr)) {
+                r = dhcp6_option_parse_ia_options(client, data + sizeof(struct iaaddr), len - sizeof(struct iaaddr));
+                if (r < 0)
+                        return r;
+        }
+
+        LIST_PREPEND(addresses, ia->addresses, TAKE_PTR(a));
+        return 0;
+}
+
+static int dhcp6_option_parse_ia_pdprefix(sd_dhcp6_client *client, DHCP6IA *ia, const uint8_t *data, size_t len) {
+        _cleanup_free_ DHCP6Address *a = NULL;
+        uint32_t lt_valid, lt_pref;
+        int r;
+
+        assert(ia);
+        assert(data || len == 0);
+
+        if (ia->type != SD_DHCP6_OPTION_IA_PD)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received an PD prefix sub-option in an invalid option, ignoring");
+
+        if (len < sizeof(struct iapdprefix))
+                return -EBADMSG;
+
+        a = new(DHCP6Address, 1);
+        if (!a)
+                return -ENOMEM;
+
+        memcpy(&a->iapdprefix, data, sizeof(struct iapdprefix));
+
+        lt_valid = be32toh(a->iapdprefix.lifetime_valid);
+        lt_pref = be32toh(a->iapdprefix.lifetime_preferred);
+
+        if (lt_valid == 0)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received a PD prefix with zero valid lifetime, ignoring.");
+        if (lt_pref > lt_valid)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received a PD prefix with preferred lifetime %"PRIu32
+                                              " larger than valid lifetime %"PRIu32", ignoring.",
+                                              lt_pref, lt_valid);
+
+        if (len > sizeof(struct iapdprefix)) {
+                r = dhcp6_option_parse_ia_options(client, data + sizeof(struct iapdprefix), len - sizeof(struct iapdprefix));
+                if (r < 0)
+                        return r;
+        }
+
+        LIST_PREPEND(addresses, ia->addresses, TAKE_PTR(a));
         return 0;
 }
 
 int dhcp6_option_parse_ia(
                 sd_dhcp6_client *client,
-                DHCP6Option *iaoption,
                 be32_t iaid,
-                DHCP6IA *ia,
-                uint16_t *ret_status_code) {
+                uint16_t option_code,
+                size_t option_data_len,
+                const uint8_t *option_data,
+                DHCP6IA **ret) {
 
-        uint32_t lt_t1, lt_t2, lt_valid = 0, lt_min = UINT32_MAX;
-        uint16_t iatype, optlen;
-        size_t iaaddr_offset;
-        int r = 0, status;
-        size_t i, len;
-        uint16_t opt;
+        _cleanup_(dhcp6_ia_freep) DHCP6IA *ia = NULL;
+        uint32_t lt_t1, lt_t2;
+        size_t header_len;
+        int r;
 
-        assert_return(ia, -EINVAL);
-        assert_return(!ia->addresses, -EINVAL);
+        assert(IN_SET(option_code, SD_DHCP6_OPTION_IA_NA, SD_DHCP6_OPTION_IA_TA, SD_DHCP6_OPTION_IA_PD));
+        assert(option_data || option_data_len == 0);
+        assert(ret);
 
-        iatype = be16toh(iaoption->code);
-        len = be16toh(iaoption->len);
+        /* This will return the following:
+         * -ENOMEM: memory allocation error,
+         * -ENOANO: unmatching IAID,
+         * -EINVAL: non-zero status code, or invalid lifetime,
+         * -EBADMSG: invalid message format,
+         * -ENODATA: no valid address or PD prefix,
+         * 0: success. */
 
-        switch (iatype) {
+        switch (option_code) {
         case SD_DHCP6_OPTION_IA_NA:
-
-                if (len < DHCP6_OPTION_IA_NA_LEN)
-                        return -ENOBUFS;
-
-                /* According to RFC8415, IAs which do not match the client's IAID should be ignored,
-                 * but not necessary to ignore or refuse the whole message. */
-                if (((const struct ia_na*) iaoption->data)->id != iaid)
-                        /* ENOANO indicates the option should be ignored. */
-                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(ENOANO),
-                                                      "Received an IA_NA option with a different IAID "
-                                                      "from the one chosen by the client, ignoring.");
-
-                iaaddr_offset = DHCP6_OPTION_IA_NA_LEN;
-                memcpy(&ia->ia_na, iaoption->data, sizeof(ia->ia_na));
-
-                lt_t1 = be32toh(ia->ia_na.lifetime_t1);
-                lt_t2 = be32toh(ia->ia_na.lifetime_t2);
-
-                if (lt_t1 > lt_t2)
-                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
-                                                      "IA NA T1 %"PRIu32"sec > T2 %"PRIu32"sec",
-                                                      lt_t1, lt_t2);
-
-                break;
-
         case SD_DHCP6_OPTION_IA_PD:
-
-                if (len < sizeof(ia->ia_pd))
-                        return -ENOBUFS;
-
-                /* According to RFC8415, IAs which do not match the client's IAID should be ignored,
-                 * but not necessary to ignore or refuse the whole message. */
-                if (((const struct ia_pd*) iaoption->data)->id != iaid)
-                        /* ENOANO indicates the option should be ignored. */
-                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(ENOANO),
-                                                      "Received an IA_PD option with a different IAID "
-                                                      "from the one chosen by the client, ignoring.");
-
-                iaaddr_offset = sizeof(ia->ia_pd);
-                memcpy(&ia->ia_pd, iaoption->data, sizeof(ia->ia_pd));
-
-                lt_t1 = be32toh(ia->ia_pd.lifetime_t1);
-                lt_t2 = be32toh(ia->ia_pd.lifetime_t2);
-
-                if (lt_t1 > lt_t2)
-                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
-                                                      "IA PD T1 %"PRIu32"sec > T2 %"PRIu32"sec",
-                                                      lt_t1, lt_t2);
-
+                header_len = sizeof(struct ia_header);
                 break;
 
         case SD_DHCP6_OPTION_IA_TA:
-                if (len < DHCP6_OPTION_IA_TA_LEN)
-                        return -ENOBUFS;
-
-                /* According to RFC8415, IAs which do not match the client's IAID should be ignored,
-                 * but not necessary to ignore or refuse the whole message. */
-                if (((const struct ia_ta*) iaoption->data)->id != iaid)
-                        /* ENOANO indicates the option should be ignored. */
-                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(ENOANO),
-                                                      "Received an IA_TA option with a different IAID "
-                                                      "from the one chosen by the client, ignoring.");
-
-                iaaddr_offset = DHCP6_OPTION_IA_TA_LEN;
-                memcpy(&ia->ia_ta, iaoption->data, sizeof(ia->ia_ta));
-
+                header_len = sizeof(be32_t); /* IA_TA does not have lifetime. */
                 break;
 
         default:
-                return -EINVAL;
+                assert_not_reached();
         }
 
-        ia->type = iatype;
-        i = iaaddr_offset;
+        if (option_data_len < header_len)
+                return -EBADMSG;
 
-        while (i < len) {
-                DHCP6Option *option = (DHCP6Option *)&iaoption->data[i];
+        ia = new(DHCP6IA, 1);
+        if (!ia)
+                return -ENOMEM;
 
-                if (len < i + sizeof(*option) || len < i + sizeof(*option) + be16toh(option->len))
-                        return -ENOBUFS;
+        *ia = (DHCP6IA) {
+                .type = option_code,
+        };
+        memcpy(&ia->header, option_data, header_len);
 
-                opt = be16toh(option->code);
-                optlen = be16toh(option->len);
+        /* According to RFC8415, IAs which do not match the client's IAID should be ignored,
+         * but not necessary to ignore or refuse the whole message. */
+        if (ia->header.id != iaid)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(ENOANO),
+                                              "Received an IA option with a different IAID "
+                                              "from the one chosen by the client, ignoring.");
 
-                switch (opt) {
-                case SD_DHCP6_OPTION_IAADDR:
+        /* It is not necessary to check if the lifetime_t2 is zero here, as in that case it will be updated later. */
+        lt_t1 = be32toh(ia->header.lifetime_t1);
+        lt_t2 = be32toh(ia->header.lifetime_t2);
 
-                        if (!IN_SET(ia->type, SD_DHCP6_OPTION_IA_NA, SD_DHCP6_OPTION_IA_TA))
-                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
-                                                              "IA Address option not in IA NA or TA option");
+        if (lt_t1 > lt_t2)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received an IA option with T1 %"PRIu32"sec > T2 %"PRIu32"sec, ignoring.",
+                                              lt_t1, lt_t2);
+        if (lt_t1 == 0 && lt_t2 > 0)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received an IA option with zero T1 and non-zero T2 (%"PRIu32"sec), ignoring.",
+                                              lt_t2);
 
-                        r = dhcp6_option_parse_address(client, option, ia, &lt_valid);
-                        if (r < 0 && r != -EINVAL)
+        for (size_t offset = header_len; offset < option_data_len;) {
+                const uint8_t *subdata;
+                size_t subdata_len;
+                uint16_t subopt;
+
+                r = dhcp6_option_parse(option_data, option_data_len, &offset, &subopt, &subdata_len, &subdata);
+                if (r < 0)
+                        return r;
+
+                switch (subopt) {
+                case SD_DHCP6_OPTION_IAADDR: {
+                        r = dhcp6_option_parse_ia_address(client, ia, subdata, subdata_len);
+                        if (r == -ENOMEM)
                                 return r;
-                        if (r >= 0 && lt_valid < lt_min)
-                                lt_min = lt_valid;
 
+                        /* Ignore non-critical errors in the sub-option. */
                         break;
-
-                case SD_DHCP6_OPTION_IA_PD_PREFIX:
-
-                        if (ia->type != SD_DHCP6_OPTION_IA_PD)
-                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
-                                                              "IA PD Prefix option not in IA PD option");
-
-                        r = dhcp6_option_parse_pdprefix(client, option, ia, &lt_valid);
-                        if (r < 0 && r != -EINVAL)
+                }
+                case SD_DHCP6_OPTION_IA_PD_PREFIX: {
+                        r = dhcp6_option_parse_ia_pdprefix(client, ia, subdata, subdata_len);
+                        if (r == -ENOMEM)
                                 return r;
-                        if (r >= 0 && lt_valid < lt_min)
-                                lt_min = lt_valid;
 
+                        /* Ignore non-critical errors in the sub-option. */
                         break;
+                }
+                case SD_DHCP6_OPTION_STATUS_CODE: {
+                        _cleanup_free_ char *msg = NULL;
 
-                case SD_DHCP6_OPTION_STATUS_CODE:
-
-                        status = dhcp6_option_parse_status(option, optlen + offsetof(DHCP6Option, data));
-                        if (status < 0)
-                                return status;
-
-                        if (status > 0) {
-                                if (ret_status_code)
-                                        *ret_status_code = status;
-
-                                log_dhcp6_client(client, "IA status %s",
-                                                 dhcp6_message_status_to_string(status));
-
-                                return 0;
-                        }
-
+                        r = dhcp6_option_parse_status(subdata, subdata_len, &msg);
+                        if (r == -ENOMEM)
+                                return r;
+                        if (r > 0)
+                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                                              "Received an IA option with non-zero status%s%s",
+                                                              isempty(msg) ? "." : ": ", strempty(msg));
+                        if (r < 0)
+                                log_dhcp6_client_errno(client, r,
+                                                       "Received an IA option with an invalid status sub option, ignoring: %m");
                         break;
-
+                }
                 default:
-                        log_dhcp6_client(client, "Unknown IA option %d", opt);
-                        break;
+                        log_dhcp6_client(client, "Received an IA option with an unknown sub-option %u, ignoring", subopt);
                 }
-
-                i += sizeof(*option) + optlen;
         }
 
-        switch(iatype) {
-        case SD_DHCP6_OPTION_IA_NA:
-                if (ia->ia_na.lifetime_t1 == 0 && ia->ia_na.lifetime_t2 == 0 && lt_min != UINT32_MAX) {
-                        lt_t1 = lt_min / 2;
-                        lt_t2 = lt_min / 10 * 8;
-                        ia->ia_na.lifetime_t1 = htobe32(lt_t1);
-                        ia->ia_na.lifetime_t2 = htobe32(lt_t2);
+        if (!ia->addresses)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(ENODATA),
+                                              "Received an IA option without valid IA addresses or PD prefixes, ignoring.");
 
-                        log_dhcp6_client(client, "Computed IA NA T1 %"PRIu32"sec and T2 %"PRIu32"sec as both were zero",
-                                         lt_t1, lt_t2);
-                }
-
-                break;
-
-        case SD_DHCP6_OPTION_IA_PD:
-                if (ia->ia_pd.lifetime_t1 == 0 && ia->ia_pd.lifetime_t2 == 0 && lt_min != UINT32_MAX) {
-                        lt_t1 = lt_min / 2;
-                        lt_t2 = lt_min / 10 * 8;
-                        ia->ia_pd.lifetime_t1 = htobe32(lt_t1);
-                        ia->ia_pd.lifetime_t2 = htobe32(lt_t2);
-
-                        log_dhcp6_client(client, "Computed IA PD T1 %"PRIu32"sec and T2 %"PRIu32"sec as both were zero",
-                                         lt_t1, lt_t2);
-                }
-
-                break;
-
-        default:
-                break;
-        }
-
-        if (ret_status_code)
-                *ret_status_code = 0;
-
-        return 1;
+        *ret = TAKE_PTR(ia);
+        return 0;
 }
 
 int dhcp6_option_parse_addresses(
@@ -705,7 +780,7 @@
                 struct in6_addr **addrs,
                 size_t *count) {
 
-        assert(optval);
+        assert(optval || optlen == 0);
         assert(addrs);
         assert(count);
 
@@ -721,14 +796,20 @@
         return 0;
 }
 
-static int parse_domain(const uint8_t **data, uint16_t *len, char **out_domain) {
-        _cleanup_free_ char *ret = NULL;
-        const uint8_t *optval = *data;
-        uint16_t optlen = *len;
-        bool first = true;
-        size_t n = 0;
+static int parse_domain(const uint8_t **data, size_t *len, char **ret) {
+        _cleanup_free_ char *domain = NULL;
+        const uint8_t *optval;
+        size_t optlen, n = 0;
         int r;
 
+        assert(data);
+        assert(len);
+        assert(*data || *len == 0);
+        assert(ret);
+
+        optval = *data;
+        optlen = *len;
+
         if (optlen <= 1)
                 return -ENODATA;
 
@@ -752,42 +833,44 @@
                         return -EMSGSIZE;
 
                 /* Literal label */
-                label = (const char *)optval;
+                label = (const char*) optval;
                 optval += c;
                 optlen -= c;
 
-                if (!GREEDY_REALLOC(ret, n + !first + DNS_LABEL_ESCAPED_MAX))
+                if (!GREEDY_REALLOC(domain, n + (n != 0) + DNS_LABEL_ESCAPED_MAX))
                         return -ENOMEM;
 
-                if (first)
-                        first = false;
-                else
-                        ret[n++] = '.';
+                if (n != 0)
+                        domain[n++] = '.';
 
-                r = dns_label_escape(label, c, ret + n, DNS_LABEL_ESCAPED_MAX);
+                r = dns_label_escape(label, c, domain + n, DNS_LABEL_ESCAPED_MAX);
                 if (r < 0)
                         return r;
 
                 n += r;
         }
 
-        if (n) {
-                if (!GREEDY_REALLOC(ret, n + 1))
+        if (n > 0) {
+                if (!GREEDY_REALLOC(domain, n + 1))
                         return -ENOMEM;
-                ret[n] = 0;
+
+                domain[n] = '\0';
         }
 
-        *out_domain = TAKE_PTR(ret);
+        *ret = TAKE_PTR(domain);
         *data = optval;
         *len = optlen;
 
         return n;
 }
 
-int dhcp6_option_parse_domainname(const uint8_t *optval, uint16_t optlen, char **str) {
+int dhcp6_option_parse_domainname(const uint8_t *optval, size_t optlen, char **ret) {
         _cleanup_free_ char *domain = NULL;
         int r;
 
+        assert(optval || optlen == 0);
+        assert(ret);
+
         r = parse_domain(&optval, &optlen, &domain);
         if (r < 0)
                 return r;
@@ -796,39 +879,38 @@
         if (optlen != 0)
                 return -EINVAL;
 
-        *str = TAKE_PTR(domain);
+        *ret = TAKE_PTR(domain);
         return 0;
 }
 
-int dhcp6_option_parse_domainname_list(const uint8_t *optval, uint16_t optlen, char ***str_arr) {
-        size_t idx = 0;
+int dhcp6_option_parse_domainname_list(const uint8_t *optval, size_t optlen, char ***ret) {
         _cleanup_strv_free_ char **names = NULL;
         int r;
 
+        assert(optval || optlen == 0);
+        assert(ret);
+
         if (optlen <= 1)
                 return -ENODATA;
         if (optval[optlen - 1] != '\0')
                 return -EINVAL;
 
         while (optlen > 0) {
-                _cleanup_free_ char *ret = NULL;
+                _cleanup_free_ char *name = NULL;
 
-                r = parse_domain(&optval, &optlen, &ret);
+                r = parse_domain(&optval, &optlen, &name);
                 if (r < 0)
                         return r;
                 if (r == 0)
                         continue;
 
-                r = strv_extend(&names, ret);
+                r = strv_consume(&names, TAKE_PTR(name));
                 if (r < 0)
                         return r;
-
-                idx++;
         }
 
-        *str_arr = TAKE_PTR(names);
-
-        return idx;
+        *ret = TAKE_PTR(names);
+        return 0;
 }
 
 static sd_dhcp6_option* dhcp6_option_free(sd_dhcp6_option *i) {
diff --git a/src/libsystemd-network/dhcp6-option.h b/src/libsystemd-network/dhcp6-option.h
new file mode 100644
index 0000000..36841dd
--- /dev/null
+++ b/src/libsystemd-network/dhcp6-option.h
@@ -0,0 +1,104 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "sd-dhcp6-client.h"
+
+#include "hash-funcs.h"
+#include "list.h"
+#include "macro.h"
+#include "ordered-set.h"
+#include "sparse-endian.h"
+
+typedef struct sd_dhcp6_option {
+        unsigned n_ref;
+
+        uint32_t enterprise_identifier;
+        uint16_t option;
+        void *data;
+        size_t length;
+} sd_dhcp6_option;
+
+extern const struct hash_ops dhcp6_option_hash_ops;
+
+/* Common option header */
+typedef struct DHCP6Option {
+        be16_t code;
+        be16_t len;
+        uint8_t data[];
+} _packed_ DHCP6Option;
+
+/* Address option */
+struct iaaddr {
+        struct in6_addr address;
+        be32_t lifetime_preferred;
+        be32_t lifetime_valid;
+} _packed_;
+
+/* Prefix Delegation Prefix option */
+struct iapdprefix {
+        be32_t lifetime_preferred;
+        be32_t lifetime_valid;
+        uint8_t prefixlen;
+        struct in6_addr address;
+} _packed_;
+
+typedef struct DHCP6Address DHCP6Address;
+
+struct DHCP6Address {
+        LIST_FIELDS(DHCP6Address, addresses);
+
+        union {
+                struct iaaddr iaaddr;
+                struct iapdprefix iapdprefix;
+        };
+};
+
+struct ia_header {
+        be32_t id;
+        be32_t lifetime_t1;
+        be32_t lifetime_t2;
+} _packed_;
+
+typedef struct DHCP6IA {
+        uint16_t type;
+        struct ia_header header;
+
+        LIST_HEAD(DHCP6Address, addresses);
+} DHCP6IA;
+
+void dhcp6_ia_clear_addresses(DHCP6IA *ia);
+DHCP6IA *dhcp6_ia_free(DHCP6IA *ia);
+DEFINE_TRIVIAL_CLEANUP_FUNC(DHCP6IA*, dhcp6_ia_free);
+
+bool dhcp6_option_can_request(uint16_t option);
+
+int dhcp6_option_append(uint8_t **buf, size_t *offset, uint16_t code,
+                        size_t optlen, const void *optval);
+int dhcp6_option_append_ia(uint8_t **buf, size_t *offset, const DHCP6IA *ia);
+int dhcp6_option_append_fqdn(uint8_t **buf, size_t *offset, const char *fqdn);
+int dhcp6_option_append_user_class(uint8_t **buf, size_t *offset, char * const *user_class);
+int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *offset, char * const *vendor_class);
+int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *offset, OrderedSet *vendor_options);
+
+int dhcp6_option_parse(
+                const uint8_t *buf,
+                size_t buflen,
+                size_t *offset,
+                uint16_t *ret_option_code,
+                size_t *ret_option_data_len,
+                const uint8_t **ret_option_data);
+int dhcp6_option_parse_status(const uint8_t *data, size_t data_len, char **ret_status_message);
+int dhcp6_option_parse_ia(
+                sd_dhcp6_client *client,
+                be32_t iaid,
+                uint16_t option_code,
+                size_t option_data_len,
+                const uint8_t *option_data,
+                DHCP6IA **ret);
+int dhcp6_option_parse_addresses(
+                const uint8_t *optval,
+                size_t optlen,
+                struct in6_addr **addrs,
+                size_t *count);
+int dhcp6_option_parse_domainname_list(const uint8_t *optval, size_t optlen, char ***ret);
+int dhcp6_option_parse_domainname(const uint8_t *optval, size_t optlen, char **ret);
diff --git a/src/libsystemd-network/dhcp6-protocol.c b/src/libsystemd-network/dhcp6-protocol.c
new file mode 100644
index 0000000..be0f651
--- /dev/null
+++ b/src/libsystemd-network/dhcp6-protocol.c
@@ -0,0 +1,96 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "dhcp6-protocol.h"
+#include "string-table.h"
+
+static const char * const dhcp6_state_table[_DHCP6_STATE_MAX] = {
+        [DHCP6_STATE_STOPPED]             = "stopped",
+        [DHCP6_STATE_INFORMATION_REQUEST] = "information-request",
+        [DHCP6_STATE_SOLICITATION]        = "solicitation",
+        [DHCP6_STATE_REQUEST]             = "request",
+        [DHCP6_STATE_BOUND]               = "bound",
+        [DHCP6_STATE_RENEW]               = "renew",
+        [DHCP6_STATE_REBIND]              = "rebind",
+        [DHCP6_STATE_STOPPING]            = "stopping",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(dhcp6_state, DHCP6State);
+
+static const char * const dhcp6_message_type_table[_DHCP6_MESSAGE_TYPE_MAX] = {
+        [DHCP6_MESSAGE_SOLICIT]             = "Solicit",
+        [DHCP6_MESSAGE_ADVERTISE]           = "Advertise",
+        [DHCP6_MESSAGE_REQUEST]             = "Request",
+        [DHCP6_MESSAGE_CONFIRM]             = "Confirm",
+        [DHCP6_MESSAGE_RENEW]               = "Renew",
+        [DHCP6_MESSAGE_REBIND]              = "Rebind",
+        [DHCP6_MESSAGE_REPLY]               = "Reply",
+        [DHCP6_MESSAGE_RELEASE]             = "Release",
+        [DHCP6_MESSAGE_DECLINE]             = "Decline",
+        [DHCP6_MESSAGE_RECONFIGURE]         = "Reconfigure",
+        [DHCP6_MESSAGE_INFORMATION_REQUEST] = "Information Request",
+        [DHCP6_MESSAGE_RELAY_FORWARD]       = "Relay Forward",
+        [DHCP6_MESSAGE_RELAY_REPLY]         = "Relay Reply",
+        [DHCP6_MESSAGE_LEASE_QUERY]         = "Lease Query",
+        [DHCP6_MESSAGE_LEASE_QUERY_REPLY]   = "Lease Query Reply",
+        [DHCP6_MESSAGE_LEASE_QUERY_DONE]    = "Lease Query Done",
+        [DHCP6_MESSAGE_LEASE_QUERY_DATA]    = "Lease Query Data",
+        [DHCP6_MESSAGE_RECONFIGURE_REQUEST] = "Reconfigure Request",
+        [DHCP6_MESSAGE_RECONFIGURE_REPLY]   = "Reconfigure Reply",
+        [DHCP6_MESSAGE_DHCPV4_QUERY]        = "DHCPv4 Query",
+        [DHCP6_MESSAGE_DHCPV4_RESPONSE]     = "DHCPv4 Response",
+        [DHCP6_MESSAGE_ACTIVE_LEASE_QUERY]  = "Active Lease Query",
+        [DHCP6_MESSAGE_START_TLS]           = "Start TLS",
+        [DHCP6_MESSAGE_BINDING_UPDATE]      = "Binding Update",
+        [DHCP6_MESSAGE_BINDING_REPLY]       = "Binding Reply",
+        [DHCP6_MESSAGE_POOL_REQUEST]        = "Pool Request",
+        [DHCP6_MESSAGE_POOL_RESPONSE]       = "Pool Response",
+        [DHCP6_MESSAGE_UPDATE_REQUEST]      = "Update Request",
+        [DHCP6_MESSAGE_UPDATE_REQUEST_ALL]  = "Update Request All",
+        [DHCP6_MESSAGE_UPDATE_DONE]         = "Update Done",
+        [DHCP6_MESSAGE_CONNECT]             = "Connect",
+        [DHCP6_MESSAGE_CONNECT_REPLY]       = "Connect Reply",
+        [DHCP6_MESSAGE_DISCONNECT]          = "Disconnect",
+        [DHCP6_MESSAGE_STATE]               = "State",
+        [DHCP6_MESSAGE_CONTACT]             = "Contact",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_type, DHCP6MessageType);
+
+static const char * const dhcp6_message_status_table[_DHCP6_STATUS_MAX] = {
+        [DHCP6_STATUS_SUCCESS]                      = "Success",
+        [DHCP6_STATUS_UNSPEC_FAIL]                  = "Unspecified failure",
+        [DHCP6_STATUS_NO_ADDRS_AVAIL]               = "No addresses available",
+        [DHCP6_STATUS_NO_BINDING]                   = "Binding unavailable",
+        [DHCP6_STATUS_NOT_ON_LINK]                  = "Not on link",
+        [DHCP6_STATUS_USE_MULTICAST]                = "Use multicast",
+        [DHCP6_STATUS_NO_PREFIX_AVAIL]              = "No prefix available",
+        [DHCP6_STATUS_UNKNOWN_QUERY_TYPE]           = "Unknown query type",
+        [DHCP6_STATUS_MALFORMED_QUERY]              = "Malformed query",
+        [DHCP6_STATUS_NOT_CONFIGURED]               = "Not configured",
+        [DHCP6_STATUS_NOT_ALLOWED]                  = "Not allowed",
+        [DHCP6_STATUS_QUERY_TERMINATED]             = "Query terminated",
+        [DHCP6_STATUS_DATA_MISSING]                 = "Data missing",
+        [DHCP6_STATUS_CATCHUP_COMPLETE]             = "Catch up complete",
+        [DHCP6_STATUS_NOT_SUPPORTED]                = "Not supported",
+        [DHCP6_STATUS_TLS_CONNECTION_REFUSED]       = "TLS connection refused",
+        [DHCP6_STATUS_ADDRESS_IN_USE]               = "Address in use",
+        [DHCP6_STATUS_CONFIGURATION_CONFLICT]       = "Configuration conflict",
+        [DHCP6_STATUS_MISSING_BINDING_INFORMATION]  = "Missing binding information",
+        [DHCP6_STATUS_OUTDATED_BINDING_INFORMATION] = "Outdated binding information",
+        [DHCP6_STATUS_SERVER_SHUTTING_DOWN]         = "Server shutting down",
+        [DHCP6_STATUS_DNS_UPDATE_NOT_SUPPORTED]     = "DNS update not supported",
+        [DHCP6_STATUS_EXCESSIVE_TIME_SKEW]          = "Excessive time skew",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_status, DHCP6Status);
+
+int dhcp6_message_status_to_errno(DHCP6Status s) {
+        switch (s) {
+        case DHCP6_STATUS_SUCCESS:
+                return 0;
+        case DHCP6_STATUS_NO_BINDING:
+                return -EADDRNOTAVAIL;
+        default:
+                return -EINVAL;
+        }
+}
diff --git a/src/libsystemd-network/dhcp6-protocol.h b/src/libsystemd-network/dhcp6-protocol.h
index c700363..c70f932 100644
--- a/src/libsystemd-network/dhcp6-protocol.h
+++ b/src/libsystemd-network/dhcp6-protocol.h
@@ -5,6 +5,7 @@
   Copyright © 2014 Intel Corporation. All rights reserved.
 ***/
 
+#include <errno.h>
 #include <netinet/ip6.h>
 #include <netinet/udp.h>
 
@@ -27,8 +28,8 @@
 #define DHCP6_MIN_OPTIONS_SIZE \
         1280 - sizeof(struct ip6_hdr) - sizeof(struct udphdr)
 
-#define IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT \
-        { { { 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+#define IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT                 \
+        { { { 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,           \
               0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02 } } }
 
 enum {
@@ -36,57 +37,86 @@
         DHCP6_PORT_CLIENT                       = 546,
 };
 
-#define DHCP6_INF_TIMEOUT                       1 * USEC_PER_SEC
-#define DHCP6_INF_MAX_RT                        120 * USEC_PER_SEC
-#define DHCP6_SOL_MAX_DELAY                     1 * USEC_PER_SEC
-#define DHCP6_SOL_TIMEOUT                       1 * USEC_PER_SEC
-#define DHCP6_SOL_MAX_RT                        120 * USEC_PER_SEC
-#define DHCP6_REQ_TIMEOUT                       1 * USEC_PER_SEC
-#define DHCP6_REQ_MAX_RT                        120 * USEC_PER_SEC
+#define DHCP6_INF_TIMEOUT                       (1 * USEC_PER_SEC)
+#define DHCP6_INF_MAX_RT                        (120 * USEC_PER_SEC)
+#define DHCP6_SOL_MAX_DELAY                     (1 * USEC_PER_SEC)
+#define DHCP6_SOL_TIMEOUT                       (1 * USEC_PER_SEC)
+#define DHCP6_SOL_MAX_RT                        (120 * USEC_PER_SEC)
+#define DHCP6_REQ_TIMEOUT                       (1 * USEC_PER_SEC)
+#define DHCP6_REQ_MAX_RT                        (120 * USEC_PER_SEC)
 #define DHCP6_REQ_MAX_RC                        10
-#define DHCP6_REN_TIMEOUT                       10 * USEC_PER_SEC
-#define DHCP6_REN_MAX_RT                        600 * USEC_PER_SEC
-#define DHCP6_REB_TIMEOUT                       10 * USEC_PER_SEC
-#define DHCP6_REB_MAX_RT                        600 * USEC_PER_SEC
+#define DHCP6_REN_TIMEOUT                       (10 * USEC_PER_SEC)
+#define DHCP6_REN_MAX_RT                        (600 * USEC_PER_SEC)
+#define DHCP6_REB_TIMEOUT                       (10 * USEC_PER_SEC)
+#define DHCP6_REB_MAX_RT                        (600 * USEC_PER_SEC)
 
-enum DHCP6State {
-        DHCP6_STATE_STOPPED                     = 0,
-        DHCP6_STATE_INFORMATION_REQUEST         = 1,
-        DHCP6_STATE_SOLICITATION                = 2,
-        DHCP6_STATE_REQUEST                     = 3,
-        DHCP6_STATE_BOUND                       = 4,
-        DHCP6_STATE_RENEW                       = 5,
-        DHCP6_STATE_REBIND                      = 6,
-};
+typedef enum DHCP6State {
+        DHCP6_STATE_STOPPED,
+        DHCP6_STATE_INFORMATION_REQUEST,
+        DHCP6_STATE_SOLICITATION,
+        DHCP6_STATE_REQUEST,
+        DHCP6_STATE_BOUND,
+        DHCP6_STATE_RENEW,
+        DHCP6_STATE_REBIND,
+        DHCP6_STATE_STOPPING,
+        _DHCP6_STATE_MAX,
+        _DHCP6_STATE_INVALID = -EINVAL,
+} DHCP6State;
 
-enum {
-        DHCP6_SOLICIT                           = 1,
-        DHCP6_ADVERTISE                         = 2,
-        DHCP6_REQUEST                           = 3,
-        DHCP6_CONFIRM                           = 4,
-        DHCP6_RENEW                             = 5,
-        DHCP6_REBIND                            = 6,
-        DHCP6_REPLY                             = 7,
-        DHCP6_RELEASE                           = 8,
-        DHCP6_DECLINE                           = 9,
-        DHCP6_RECONFIGURE                       = 10,
-        DHCP6_INFORMATION_REQUEST               = 11,
-        DHCP6_RELAY_FORW                        = 12,
-        DHCP6_RELAY_REPL                        = 13,
-        _DHCP6_MESSAGE_MAX                      = 14,
-};
+/* https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-1 */
+typedef enum DHCP6MessageType {
+        DHCP6_MESSAGE_SOLICIT                   = 1,  /* RFC 8415 */
+        DHCP6_MESSAGE_ADVERTISE                 = 2,  /* RFC 8415 */
+        DHCP6_MESSAGE_REQUEST                   = 3,  /* RFC 8415 */
+        DHCP6_MESSAGE_CONFIRM                   = 4,  /* RFC 8415 */
+        DHCP6_MESSAGE_RENEW                     = 5,  /* RFC 8415 */
+        DHCP6_MESSAGE_REBIND                    = 6,  /* RFC 8415 */
+        DHCP6_MESSAGE_REPLY                     = 7,  /* RFC 8415 */
+        DHCP6_MESSAGE_RELEASE                   = 8,  /* RFC 8415 */
+        DHCP6_MESSAGE_DECLINE                   = 9,  /* RFC 8415 */
+        DHCP6_MESSAGE_RECONFIGURE               = 10, /* RFC 8415 */
+        DHCP6_MESSAGE_INFORMATION_REQUEST       = 11, /* RFC 8415 */
+        DHCP6_MESSAGE_RELAY_FORWARD             = 12, /* RFC 8415 */
+        DHCP6_MESSAGE_RELAY_REPLY               = 13, /* RFC 8415 */
+        DHCP6_MESSAGE_LEASE_QUERY               = 14, /* RFC 5007 */
+        DHCP6_MESSAGE_LEASE_QUERY_REPLY         = 15, /* RFC 5007 */
+        DHCP6_MESSAGE_LEASE_QUERY_DONE          = 16, /* RFC 5460 */
+        DHCP6_MESSAGE_LEASE_QUERY_DATA          = 17, /* RFC 5460 */
+        DHCP6_MESSAGE_RECONFIGURE_REQUEST       = 18, /* RFC 6977 */
+        DHCP6_MESSAGE_RECONFIGURE_REPLY         = 19, /* RFC 6977 */
+        DHCP6_MESSAGE_DHCPV4_QUERY              = 20, /* RFC 7341 */
+        DHCP6_MESSAGE_DHCPV4_RESPONSE           = 21, /* RFC 7341 */
+        DHCP6_MESSAGE_ACTIVE_LEASE_QUERY        = 22, /* RFC 7653 */
+        DHCP6_MESSAGE_START_TLS                 = 23, /* RFC 7653 */
+        DHCP6_MESSAGE_BINDING_UPDATE            = 24, /* RFC 8156 */
+        DHCP6_MESSAGE_BINDING_REPLY             = 25, /* RFC 8156 */
+        DHCP6_MESSAGE_POOL_REQUEST              = 26, /* RFC 8156 */
+        DHCP6_MESSAGE_POOL_RESPONSE             = 27, /* RFC 8156 */
+        DHCP6_MESSAGE_UPDATE_REQUEST            = 28, /* RFC 8156 */
+        DHCP6_MESSAGE_UPDATE_REQUEST_ALL        = 29, /* RFC 8156 */
+        DHCP6_MESSAGE_UPDATE_DONE               = 30, /* RFC 8156 */
+        DHCP6_MESSAGE_CONNECT                   = 31, /* RFC 8156 */
+        DHCP6_MESSAGE_CONNECT_REPLY             = 32, /* RFC 8156 */
+        DHCP6_MESSAGE_DISCONNECT                = 33, /* RFC 8156 */
+        DHCP6_MESSAGE_STATE                     = 34, /* RFC 8156 */
+        DHCP6_MESSAGE_CONTACT                   = 35, /* RFC 8156 */
+        _DHCP6_MESSAGE_TYPE_MAX,
+        _DHCP6_MESSAGE_TYPE_INVALID             = -EINVAL,
+} DHCP6MessageType;
 
-enum {
+typedef enum DHCP6NTPSubOption {
         DHCP6_NTP_SUBOPTION_SRV_ADDR            = 1,
         DHCP6_NTP_SUBOPTION_MC_ADDR             = 2,
         DHCP6_NTP_SUBOPTION_SRV_FQDN            = 3,
-};
+        _DHCP6_NTP_SUBOPTION_MAX,
+        _DHCP6_NTP_SUBOPTION_INVALID            = -EINVAL,
+} DHCP6NTPSubOption;
 
 /*
  * RFC 8415, RFC 5007 and RFC 7653 status codes:
  * https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-5
  */
-enum {
+typedef enum DHCP6Status {
         DHCP6_STATUS_SUCCESS                      = 0,
         DHCP6_STATUS_UNSPEC_FAIL                  = 1,
         DHCP6_STATUS_NO_ADDRS_AVAIL               = 2,
@@ -110,11 +140,19 @@
         DHCP6_STATUS_SERVER_SHUTTING_DOWN         = 20,
         DHCP6_STATUS_DNS_UPDATE_NOT_SUPPORTED     = 21,
         DHCP6_STATUS_EXCESSIVE_TIME_SKEW          = 22,
-        _DHCP6_STATUS_MAX                         = 23,
-};
+        _DHCP6_STATUS_MAX,
+        _DHCP6_STATUS_INVALID                     = -EINVAL,
+} DHCP6Status;
 
-enum {
-        DHCP6_FQDN_FLAG_S = (1 << 0),
-        DHCP6_FQDN_FLAG_O = (1 << 1),
-        DHCP6_FQDN_FLAG_N = (1 << 2),
-};
+typedef enum DHCP6FQDNFlag {
+        DHCP6_FQDN_FLAG_S = 1 << 0,
+        DHCP6_FQDN_FLAG_O = 1 << 1,
+        DHCP6_FQDN_FLAG_N = 1 << 2,
+} DHCP6FQDNFlag;
+
+const char *dhcp6_state_to_string(DHCP6State s) _const_;
+const char *dhcp6_message_type_to_string(DHCP6MessageType s) _const_;
+DHCP6MessageType dhcp6_message_type_from_string(const char *s) _pure_;
+const char *dhcp6_message_status_to_string(DHCP6Status s) _const_;
+DHCP6Status dhcp6_message_status_from_string(const char *s) _pure_;
+int dhcp6_message_status_to_errno(DHCP6Status s);
diff --git a/src/libsystemd-network/fuzz-dhcp-client.c b/src/libsystemd-network/fuzz-dhcp-client.c
new file mode 100644
index 0000000..d2bbf66
--- /dev/null
+++ b/src/libsystemd-network/fuzz-dhcp-client.c
@@ -0,0 +1,82 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+#include "alloc-util.h"
+#include "fuzz.h"
+#include "sd-event.h"
+
+#include "sd-dhcp-client.c"
+
+int dhcp_network_bind_raw_socket(
+                int ifindex,
+                union sockaddr_union *link,
+                uint32_t id,
+                const struct hw_addr_data *hw_addr,
+                const struct hw_addr_data *bcast_addr,
+                uint16_t arp_type,
+                uint16_t port,
+                bool so_priority_set,
+                int so_priority) {
+
+        int fd;
+        fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
+        if (fd < 0)
+                return -errno;
+
+        return fd;
+}
+
+int dhcp_network_send_raw_socket(int s, const union sockaddr_union *link, const void *packet, size_t len) {
+        return len;
+}
+
+int dhcp_network_bind_udp_socket(int ifindex, be32_t address, uint16_t port, int ip_service_type) {
+        int fd;
+
+        fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
+        if (fd < 0)
+                return -errno;
+
+        return fd;
+}
+
+int dhcp_network_send_udp_socket(int s, be32_t address, uint16_t port, const void *packet, size_t len) {
+        return len;
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        uint8_t mac_addr[] = {'A', 'B', 'C', '1', '2', '3'};
+        uint8_t bcast_addr[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+        _cleanup_(sd_dhcp_client_unrefp) sd_dhcp_client *client = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        int res, r;
+
+        if (!getenv("SYSTEMD_LOG_LEVEL"))
+                log_set_max_level(LOG_CRIT);
+
+        r = sd_dhcp_client_new(&client, false);
+        assert_se(r >= 0);
+        assert_se(client);
+
+        assert_se(sd_event_new(&e) >= 0);
+
+        r = sd_dhcp_client_attach_event(client, e, 0);
+        assert_se(r >= 0);
+
+        assert_se(sd_dhcp_client_set_ifindex(client, 42) >= 0);
+        assert_se(sd_dhcp_client_set_mac(client, mac_addr, bcast_addr, ETH_ALEN, ARPHRD_ETHER) >= 0);
+        dhcp_client_set_test_mode(client, true);
+
+        res = sd_dhcp_client_start(client);
+        assert_se(IN_SET(res, 0, -EINPROGRESS));
+        client->xid = 2;
+
+        (void) client_handle_offer(client, (DHCPMessage*) data, size);
+
+        assert_se(sd_dhcp_client_stop(client) >= 0);
+
+        return 0;
+}
diff --git a/src/libsystemd-network/fuzz-dhcp-server-relay.c b/src/libsystemd-network/fuzz-dhcp-server-relay.c
new file mode 100644
index 0000000..a53e1c2
--- /dev/null
+++ b/src/libsystemd-network/fuzz-dhcp-server-relay.c
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "fuzz.h"
+
+#include "sd-dhcp-server.c"
+
+ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) {
+        return len;
+}
+
+ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags) {
+        return 0;
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        _cleanup_(sd_dhcp_server_unrefp) sd_dhcp_server *server = NULL;
+        struct in_addr address = {.s_addr = htobe32(UINT32_C(10) << 24 | UINT32_C(1))};
+        union in_addr_union relay_address;
+        _cleanup_free_ uint8_t *message = NULL;
+
+        if (size < sizeof(DHCPMessage))
+                return 0;
+
+        assert_se(sd_dhcp_server_new(&server, 1) >= 0);
+        assert_se(sd_dhcp_server_attach_event(server, NULL, 0) >= 0);
+        assert_se(sd_dhcp_server_configure_pool(server, &address, 24, 0, 0) >= 0);
+        assert_se(in_addr_from_string(AF_INET, "192.168.5.1", &relay_address) >= 0);
+        assert_se(sd_dhcp_server_set_relay_target(server, &relay_address.in) >= 0);
+        assert_se(sd_dhcp_server_set_bind_to_interface(server, false) >= 0);
+        assert_se(sd_dhcp_server_set_relay_agent_information(server, "string:sample_circuit_id", "string:sample_remote_id") >= 0);
+
+        size_t buflen = size;
+        buflen += relay_agent_information_length(server->agent_circuit_id, server->agent_remote_id) + 2;
+        assert_se(message = malloc(buflen));
+        memcpy(message, data, size);
+
+        server->fd = open("/dev/null", O_RDWR|O_CLOEXEC|O_NOCTTY);
+        assert_se(server->fd >= 0);
+
+        (void) dhcp_server_relay_message(server, (DHCPMessage *) message, size - sizeof(DHCPMessage), buflen);
+        return 0;
+}
diff --git a/src/libsystemd-network/fuzz-dhcp-server.c b/src/libsystemd-network/fuzz-dhcp-server.c
index c854d92..b35f1ac 100644
--- a/src/libsystemd-network/fuzz-dhcp-server.c
+++ b/src/libsystemd-network/fuzz-dhcp-server.c
@@ -17,40 +17,63 @@
         return 0;
 }
 
+static void add_lease(sd_dhcp_server *server, const struct in_addr *server_address, uint8_t i) {
+        static const uint8_t chaddr[] = {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3};
+        DHCPLease *lease;
+
+        assert(server);
+
+        assert_se(lease = new0(DHCPLease, 1));
+        lease->client_id.length = 2;
+        assert_se(lease->client_id.data = malloc(2));
+        lease->client_id.data[0] = 2;
+        lease->client_id.data[1] = i;
+        lease->address = htobe32(UINT32_C(10) << 24 | i);
+        lease->gateway = server_address->s_addr;
+        lease->expiration = UINT64_MAX;
+        lease->htype = ARPHRD_ETHER;
+        lease->hlen = ETH_ALEN;
+        memcpy(lease->chaddr, chaddr, ETH_ALEN);
+        assert_se(hashmap_ensure_put(&server->bound_leases_by_client_id, &dhcp_lease_hash_ops, &lease->client_id, lease) >= 0);
+        assert_se(hashmap_ensure_put(&server->bound_leases_by_address, NULL, UINT32_TO_PTR(lease->address), lease) >= 0);
+        lease->server = server;
+}
+
+static void add_static_lease(sd_dhcp_server *server, uint8_t i) {
+        uint8_t id[2] = { 2, i };
+
+        assert(server);
+
+        assert_se(sd_dhcp_server_set_static_lease(server,
+                                                  &(struct in_addr) { .s_addr = htobe32(UINT32_C(10) << 24 | i)},
+                                                  id, ELEMENTSOF(id)) >= 0);
+}
+
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_(sd_dhcp_server_unrefp) sd_dhcp_server *server = NULL;
-        struct in_addr address = {.s_addr = htobe32(UINT32_C(10) << 24 | UINT32_C(1))};
-        static const uint8_t chaddr[] = {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3};
-        uint8_t *client_id;
-        DHCPLease *lease;
-        int pool_offset;
+        struct in_addr address = { .s_addr = htobe32(UINT32_C(10) << 24 | UINT32_C(1))};
+        _cleanup_free_ uint8_t *duped = NULL;
 
         if (size < sizeof(DHCPMessage))
                 return 0;
 
+        assert_se(duped = memdup(data, size));
+
         assert_se(sd_dhcp_server_new(&server, 1) >= 0);
+        assert_se(sd_dhcp_server_attach_event(server, NULL, 0) >= 0);
         server->fd = open("/dev/null", O_RDWR|O_CLOEXEC|O_NOCTTY);
         assert_se(server->fd >= 0);
         assert_se(sd_dhcp_server_configure_pool(server, &address, 24, 0, 0) >= 0);
 
-        /* add a lease to the pool to expose additional code paths */
-        client_id = malloc(2);
-        assert_se(client_id);
-        client_id[0] = 2;
-        client_id[1] = 2;
-        lease = new0(DHCPLease, 1);
-        assert_se(lease);
-        lease->client_id.length = 2;
-        lease->client_id.data = client_id;
-        lease->address = htobe32(UINT32_C(10) << 24 | UINT32_C(2));
-        lease->gateway = htobe32(UINT32_C(10) << 24 | UINT32_C(1));
-        lease->expiration = UINT64_MAX;
-        memcpy(lease->chaddr, chaddr, 16);
-        pool_offset = get_pool_offset(server, lease->address);
-        server->bound_leases[pool_offset] = lease;
-        assert_se(hashmap_put(server->leases_by_client_id, &lease->client_id, lease) >= 0);
+        /* add leases to the pool to expose additional code paths */
+        add_lease(server, &address, 2);
+        add_lease(server, &address, 3);
 
-        (void) dhcp_server_handle_message(server, (DHCPMessage*)data, size);
+        /* add static leases */
+        add_static_lease(server, 3);
+        add_static_lease(server, 4);
+
+        (void) dhcp_server_handle_message(server, (DHCPMessage*) duped, size);
 
         return 0;
 }
diff --git a/src/libsystemd-network/fuzz-dhcp-server.options b/src/libsystemd-network/fuzz-dhcp-server.options
deleted file mode 100644
index 5c330e5..0000000
--- a/src/libsystemd-network/fuzz-dhcp-server.options
+++ /dev/null
@@ -1,2 +0,0 @@
-[libfuzzer]
-max_len = 600
diff --git a/src/libsystemd-network/fuzz-dhcp6-client.c b/src/libsystemd-network/fuzz-dhcp6-client.c
index f62ab46..356a9f4 100644
--- a/src/libsystemd-network/fuzz-dhcp6-client.c
+++ b/src/libsystemd-network/fuzz-dhcp6-client.c
@@ -6,43 +6,59 @@
 #include "sd-event.h"
 
 #include "dhcp6-internal.h"
-#include "dhcp6-protocol.h"
+#include "event-util.h"
 #include "fd-util.h"
 #include "fuzz.h"
 
-static int test_dhcp_fd[2] = { -1, -1 };
+static int test_dhcp_fd[2] = PIPE_EBADF;
 
-int dhcp6_network_send_udp_socket(int s, struct in6_addr *server_address,
-                                  const void *packet, size_t len) {
+int dhcp6_network_send_udp_socket(int s, struct in6_addr *server_address, const void *packet, size_t len) {
         return len;
 }
 
 int dhcp6_network_bind_udp_socket(int index, struct in6_addr *local_address) {
         assert_se(socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_dhcp_fd) >= 0);
-        return test_dhcp_fd[0];
+        return TAKE_FD(test_dhcp_fd[0]);
 }
 
-static void fuzz_client(const uint8_t *data, size_t size, bool is_information_request_enabled) {
-        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
-        _cleanup_(sd_dhcp6_client_unrefp) sd_dhcp6_client *client = NULL;
-        struct in6_addr address = { { { 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01 } } };
-
-        assert_se(sd_event_new(&e) >= 0);
-        assert_se(sd_dhcp6_client_new(&client) >= 0);
-        assert_se(sd_dhcp6_client_attach_event(client, e, 0) >= 0);
-        assert_se(sd_dhcp6_client_set_ifindex(client, 42) == 0);
-        assert_se(sd_dhcp6_client_set_local_address(client, &address) >= 0);
-        assert_se(sd_dhcp6_client_set_information_request(client, is_information_request_enabled) == 0);
-        dhcp6_client_set_test_mode(client, true);
-
+static void fuzz_client(sd_dhcp6_client *client, const uint8_t *data, size_t size, DHCP6State state) {
+        assert_se(sd_dhcp6_client_set_information_request(client, state == DHCP6_STATE_INFORMATION_REQUEST) >= 0);
         assert_se(sd_dhcp6_client_start(client) >= 0);
 
+        client->state = state;
+
         if (size >= sizeof(DHCP6Message))
-                assert_se(sd_dhcp6_client_set_transaction_id(client, htobe32(0x00ffffff) & ((const DHCP6Message *) data)->transaction_id) == 0);
+                assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message *) data)->transaction_id) == 0);
+
+        /* These states does not require lease to send message. */
+        if (IN_SET(client->state, DHCP6_STATE_INFORMATION_REQUEST, DHCP6_STATE_SOLICITATION))
+                assert_se(dhcp6_client_send_message(client) >= 0);
 
         assert_se(write(test_dhcp_fd[1], data, size) == (ssize_t) size);
 
-        sd_event_run(e, UINT64_MAX);
+        assert_se(sd_event_run(sd_dhcp6_client_get_event(client), UINT64_MAX) > 0);
+
+        /* Check the state transition. */
+        if (client->state != state)
+                switch (state) {
+                case DHCP6_STATE_INFORMATION_REQUEST:
+                        assert_se(client->state == DHCP6_STATE_STOPPED);
+                        break;
+                case DHCP6_STATE_SOLICITATION:
+                        assert_se(IN_SET(client->state, DHCP6_STATE_REQUEST, DHCP6_STATE_BOUND));
+                        break;
+                case DHCP6_STATE_REQUEST:
+                        assert_se(IN_SET(client->state, DHCP6_STATE_BOUND, DHCP6_STATE_SOLICITATION));
+                        break;
+                default:
+                        assert_not_reached();
+                }
+
+        /* Send message if the client has a lease. */
+        if (state != DHCP6_STATE_INFORMATION_REQUEST && sd_dhcp6_client_get_lease(client, NULL) >= 0) {
+                client->state = DHCP6_STATE_REQUEST;
+                dhcp6_client_send_message(client);
+        }
 
         assert_se(sd_dhcp6_client_stop(client) >= 0);
 
@@ -50,14 +66,43 @@
 }
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-        if (size > 65536)
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        _cleanup_(sd_dhcp6_client_unrefp) sd_dhcp6_client *client = NULL;
+        _cleanup_(sd_dhcp6_option_unrefp) sd_dhcp6_option *v1 = NULL, *v2 = NULL;
+        struct in6_addr address = { { { 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01 } } };
+        struct in6_addr hint = { { { 0x3f, 0xfe, 0x05, 0x01, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } };
+        static const char *v1_data = "hogehoge", *v2_data = "foobar";
+
+        if (outside_size_range(size, 0, 65536))
                 return 0;
 
-        /* This triggers client_receive_advertise */
-        fuzz_client(data, size, false);
+        assert_se(sd_event_new(&e) >= 0);
+        assert_se(sd_dhcp6_client_new(&client) >= 0);
+        assert_se(sd_dhcp6_client_attach_event(client, e, 0) >= 0);
+        assert_se(sd_dhcp6_client_set_ifindex(client, 42) >= 0);
+        assert_se(sd_dhcp6_client_set_local_address(client, &address) >= 0);
+        dhcp6_client_set_test_mode(client, true);
 
-        /* This triggers client_receive_reply */
-        fuzz_client(data, size, true);
+        /* Used when sending message. */
+        assert_se(sd_dhcp6_client_set_fqdn(client, "example.com") == 1);
+        assert_se(sd_dhcp6_client_set_request_mud_url(client, "https://www.example.com/mudfile.json") >= 0);
+        assert_se(sd_dhcp6_client_set_request_user_class(client, STRV_MAKE("u1", "u2", "u3")) >= 0);
+        assert_se(sd_dhcp6_client_set_request_vendor_class(client, STRV_MAKE("v1", "v2", "v3")) >= 0);
+        assert_se(sd_dhcp6_client_set_prefix_delegation_hint(client, 48, &hint) >= 0);
+        assert_se(sd_dhcp6_option_new(123, v1_data, strlen(v1_data), 12345, &v1) >= 0);
+        assert_se(sd_dhcp6_option_new(456, v2_data, strlen(v2_data), 45678, &v2) >= 0);
+        assert_se(sd_dhcp6_client_add_vendor_option(client, v1) >= 0);
+        assert_se(sd_dhcp6_client_add_vendor_option(client, v2) >= 0);
+
+        fuzz_client(client, data, size, DHCP6_STATE_INFORMATION_REQUEST);
+        fuzz_client(client, data, size, DHCP6_STATE_SOLICITATION);
+
+        /* If size is zero, then the resend timer will be triggered at first,
+         * but in the REQUEST state the client must have a lease. */
+        if (size == 0)
+                return 0;
+
+        fuzz_client(client, data, size, DHCP6_STATE_REQUEST);
 
         return 0;
 }
diff --git a/src/libsystemd-network/fuzz-lldp-rx.c b/src/libsystemd-network/fuzz-lldp-rx.c
new file mode 100644
index 0000000..2d8e201
--- /dev/null
+++ b/src/libsystemd-network/fuzz-lldp-rx.c
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <unistd.h>
+
+#include "sd-event.h"
+#include "sd-lldp-rx.h"
+
+#include "fd-util.h"
+#include "fuzz.h"
+#include "lldp-network.h"
+
+static int test_fd[2] = PIPE_EBADF;
+
+int lldp_network_bind_raw_socket(int ifindex) {
+        if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) < 0)
+                return -errno;
+
+        return test_fd[0];
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        _cleanup_(sd_lldp_rx_unrefp) sd_lldp_rx *lldp_rx = NULL;
+
+        if (outside_size_range(size, 0, 2048))
+                return 0;
+
+        assert_se(sd_event_new(&e) == 0);
+        assert_se(sd_lldp_rx_new(&lldp_rx) >= 0);
+        assert_se(sd_lldp_rx_set_ifindex(lldp_rx, 42) >= 0);
+        assert_se(sd_lldp_rx_attach_event(lldp_rx, e, 0) >= 0);
+        assert_se(sd_lldp_rx_start(lldp_rx) >= 0);
+
+        assert_se(write(test_fd[1], data, size) == (ssize_t) size);
+        assert_se(sd_event_run(e, 0) >= 0);
+
+        assert_se(sd_lldp_rx_stop(lldp_rx) >= 0);
+        assert_se(sd_lldp_rx_detach_event(lldp_rx) >= 0);
+        test_fd[1] = safe_close(test_fd[1]);
+
+        return 0;
+}
diff --git a/src/libsystemd-network/fuzz-lldp.options b/src/libsystemd-network/fuzz-lldp-rx.options
similarity index 100%
rename from src/libsystemd-network/fuzz-lldp.options
rename to src/libsystemd-network/fuzz-lldp-rx.options
diff --git a/src/libsystemd-network/fuzz-lldp.c b/src/libsystemd-network/fuzz-lldp.c
deleted file mode 100644
index 5747135..0000000
--- a/src/libsystemd-network/fuzz-lldp.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <unistd.h>
-
-#include "sd-event.h"
-#include "sd-lldp.h"
-
-#include "fd-util.h"
-#include "fuzz.h"
-#include "lldp-network.h"
-
-static int test_fd[2] = { -1, -1 };
-
-int lldp_network_bind_raw_socket(int ifindex) {
-        if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) < 0)
-                return -errno;
-
-        return test_fd[0];
-}
-
-int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
-        _cleanup_(sd_lldp_unrefp) sd_lldp *lldp = NULL;
-
-        if (size > 2048)
-                return 0;
-
-        assert_se(sd_event_new(&e) == 0);
-        assert_se(sd_lldp_new(&lldp) >= 0);
-        assert_se(sd_lldp_set_ifindex(lldp, 42) >= 0);
-        assert_se(sd_lldp_attach_event(lldp, e, 0) >= 0);
-        assert_se(sd_lldp_start(lldp) >= 0);
-
-        assert_se(write(test_fd[1], data, size) == (ssize_t) size);
-        assert_se(sd_event_run(e, 0) >= 0);
-
-        assert_se(sd_lldp_stop(lldp) >= 0);
-        assert_se(sd_lldp_detach_event(lldp) >= 0);
-        test_fd[1] = safe_close(test_fd[1]);
-
-        return 0;
-}
diff --git a/src/libsystemd-network/fuzz-ndisc-rs.c b/src/libsystemd-network/fuzz-ndisc-rs.c
index 20350d4..7a5c45a 100644
--- a/src/libsystemd-network/fuzz-ndisc-rs.c
+++ b/src/libsystemd-network/fuzz-ndisc-rs.c
@@ -4,14 +4,16 @@
 #include <netinet/icmp6.h>
 #include <unistd.h>
 
-#include "alloc-util.h"
-#include "icmp6-util.h"
-#include "fuzz.h"
 #include "sd-ndisc.h"
-#include "socket-util.h"
-#include "ndisc-internal.h"
 
-static int test_fd[2] = { -1, -1 };
+#include "alloc-util.h"
+#include "fd-util.h"
+#include "fuzz.h"
+#include "icmp6-util.h"
+#include "ndisc-internal.h"
+#include "socket-util.h"
+
+static int test_fd[2] = PIPE_EBADF;
 
 int icmp6_bind_router_solicitation(int index) {
         assert_se(socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) >= 0);
@@ -43,7 +45,7 @@
         _cleanup_(sd_event_unrefp) sd_event *e = NULL;
         _cleanup_(sd_ndisc_unrefp) sd_ndisc *nd = NULL;
 
-        if (size > 2048)
+        if (outside_size_range(size, 0, 2048))
                 return 0;
 
         assert_se(sd_event_new(&e) >= 0);
diff --git a/src/libsystemd-network/icmp6-util.c b/src/libsystemd-network/icmp6-util.c
index 3832bbd..00a5929 100644
--- a/src/libsystemd-network/icmp6-util.c
+++ b/src/libsystemd-network/icmp6-util.c
@@ -31,19 +31,20 @@
 static int icmp6_bind_router_message(const struct icmp6_filter *filter,
                                      const struct ipv6_mreq *mreq) {
         int ifindex = mreq->ipv6mr_interface;
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
+        assert(filter);
+        assert(mreq);
+
         s = socket(AF_INET6, SOCK_RAW | SOCK_CLOEXEC | SOCK_NONBLOCK, IPPROTO_ICMPV6);
         if (s < 0)
                 return -errno;
 
-        r = setsockopt(s, IPPROTO_ICMPV6, ICMP6_FILTER, filter, sizeof(*filter));
-        if (r < 0)
+        if (setsockopt(s, IPPROTO_ICMPV6, ICMP6_FILTER, filter, sizeof(*filter)) < 0)
                 return -errno;
 
-        r = setsockopt(s, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, mreq, sizeof(*mreq));
-        if (r < 0)
+        if (setsockopt(s, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, mreq, sizeof(*mreq)) < 0)
                 return -errno;
 
         /* RFC 3315, section 6.7, bullet point 2 may indicate that an
@@ -131,15 +132,13 @@
                 .msg_iov = &iov,
                 .msg_iovlen = 1,
         };
-        int r;
 
         assert(s >= 0);
         assert(ether_addr);
 
         rs.rs_opt_mac = *ether_addr;
 
-        r = sendmsg(s, &msg, 0);
-        if (r < 0)
+        if (sendmsg(s, &msg, 0) < 0)
                 return -errno;
 
         return 0;
diff --git a/src/libsystemd-network/lldp-internal.h b/src/libsystemd-network/lldp-internal.h
deleted file mode 100644
index cf0578c..0000000
--- a/src/libsystemd-network/lldp-internal.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include "sd-event.h"
-#include "sd-lldp.h"
-
-#include "hashmap.h"
-#include "log-link.h"
-#include "prioq.h"
-
-struct sd_lldp {
-        unsigned n_ref;
-
-        int ifindex;
-        char *ifname;
-        int fd;
-
-        sd_event *event;
-        int64_t event_priority;
-        sd_event_source *io_event_source;
-        sd_event_source *timer_event_source;
-
-        Prioq *neighbor_by_expiry;
-        Hashmap *neighbor_by_id;
-
-        uint64_t neighbors_max;
-
-        sd_lldp_callback_t callback;
-        void *userdata;
-
-        uint16_t capability_mask;
-
-        struct ether_addr filter_address;
-};
-
-const char* lldp_event_to_string(sd_lldp_event_t e) _const_;
-sd_lldp_event_t lldp_event_from_string(const char *s) _pure_;
-
-#define log_lldp_errno(lldp, error, fmt, ...)           \
-        log_interface_prefix_full_errno(                \
-                "LLDP: ",                               \
-                sd_lldp_get_ifname(lldp),               \
-                error, fmt, ##__VA_ARGS__)
-#define log_lldp(lldp, fmt, ...)                        \
-        log_interface_prefix_full_errno_zerook(         \
-                "LLDP: ",                               \
-                sd_lldp_get_ifname(lldp),               \
-                0, fmt, ##__VA_ARGS__)
diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c
index 3bd7751..6672409 100644
--- a/src/libsystemd-network/lldp-neighbor.c
+++ b/src/libsystemd-network/lldp-neighbor.c
@@ -5,13 +5,15 @@
 #include "ether-addr-util.h"
 #include "hexdecoct.h"
 #include "in-addr-util.h"
-#include "lldp-internal.h"
 #include "lldp-neighbor.h"
 #include "memory-util.h"
 #include "missing_network.h"
 #include "unaligned.h"
 
 static void lldp_neighbor_id_hash_func(const LLDPNeighborID *id, struct siphash *state) {
+        assert(id);
+        assert(state);
+
         siphash24_compress(id->chassis_id, id->chassis_id_size, state);
         siphash24_compress(&id->chassis_id_size, sizeof(id->chassis_id_size), state);
         siphash24_compress(id->port_id, id->port_id_size, state);
@@ -19,31 +21,43 @@
 }
 
 int lldp_neighbor_id_compare_func(const LLDPNeighborID *x, const LLDPNeighborID *y) {
+        assert(x);
+        assert(y);
+
         return memcmp_nn(x->chassis_id, x->chassis_id_size, y->chassis_id, y->chassis_id_size)
             ?: memcmp_nn(x->port_id, x->port_id_size, y->port_id, y->port_id_size);
 }
 
-DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(lldp_neighbor_hash_ops, LLDPNeighborID, lldp_neighbor_id_hash_func, lldp_neighbor_id_compare_func,
-                                      sd_lldp_neighbor, lldp_neighbor_unlink);
+DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+        lldp_neighbor_hash_ops,
+        LLDPNeighborID,
+        lldp_neighbor_id_hash_func,
+        lldp_neighbor_id_compare_func,
+        sd_lldp_neighbor,
+        lldp_neighbor_unlink);
 
 int lldp_neighbor_prioq_compare_func(const void *a, const void *b) {
         const sd_lldp_neighbor *x = a, *y = b;
 
+        assert(x);
+        assert(y);
+
         return CMP(x->until, y->until);
 }
 
-_public_ sd_lldp_neighbor *sd_lldp_neighbor_ref(sd_lldp_neighbor *n) {
+sd_lldp_neighbor *sd_lldp_neighbor_ref(sd_lldp_neighbor *n) {
         if (!n)
                 return NULL;
 
-        assert(n->n_ref > 0 || n->lldp);
+        assert(n->n_ref > 0 || n->lldp_rx);
         n->n_ref++;
 
         return n;
 }
 
-static void lldp_neighbor_free(sd_lldp_neighbor *n) {
-        assert(n);
+static sd_lldp_neighbor *lldp_neighbor_free(sd_lldp_neighbor *n) {
+        if (!n)
+                return NULL;
 
         free(n->id.port_id);
         free(n->id.chassis_id);
@@ -53,10 +67,10 @@
         free(n->mud_url);
         free(n->chassis_id_as_string);
         free(n->port_id_as_string);
-        free(n);
+        return mfree(n);
 }
 
-_public_ sd_lldp_neighbor *sd_lldp_neighbor_unref(sd_lldp_neighbor *n) {
+sd_lldp_neighbor *sd_lldp_neighbor_unref(sd_lldp_neighbor *n) {
 
         /* Drops one reference from the neighbor. Note that the object is not freed unless it is already unlinked from
          * the sd_lldp object. */
@@ -67,7 +81,7 @@
         assert(n->n_ref > 0);
         n->n_ref--;
 
-        if (n->n_ref <= 0 && !n->lldp)
+        if (n->n_ref <= 0 && !n->lldp_rx)
                 lldp_neighbor_free(n);
 
         return NULL;
@@ -80,18 +94,18 @@
         if (!n)
                 return NULL;
 
-        if (!n->lldp)
+        if (!n->lldp_rx)
                 return NULL;
 
         /* Only remove the neighbor object from the hash table if it's in there, don't complain if it isn't. This is
          * because we are used as destructor call for hashmap_clear() and thus sometimes are called to de-register
          * ourselves from the hashtable and sometimes are called after we already are de-registered. */
 
-        (void) hashmap_remove_value(n->lldp->neighbor_by_id, &n->id, n);
+        (void) hashmap_remove_value(n->lldp_rx->neighbor_by_id, &n->id, n);
 
-        assert_se(prioq_remove(n->lldp->neighbor_by_expiry, n, &n->prioq_idx) >= 0);
+        assert_se(prioq_remove(n->lldp_rx->neighbor_by_expiry, n, &n->prioq_idx) >= 0);
 
-        n->lldp = NULL;
+        n->lldp_rx = NULL;
 
         if (n->n_ref <= 0)
                 lldp_neighbor_free(n);
@@ -102,6 +116,9 @@
 sd_lldp_neighbor *lldp_neighbor_new(size_t raw_size) {
         sd_lldp_neighbor *n;
 
+        if (raw_size > SIZE_MAX - ALIGN(sizeof(sd_lldp_neighbor)))
+                return NULL;
+
         n = malloc0(ALIGN(sizeof(sd_lldp_neighbor)) + raw_size);
         if (!n)
                 return NULL;
@@ -112,7 +129,7 @@
         return n;
 }
 
-static int parse_string(sd_lldp *lldp, char **s, const void *q, size_t n) {
+static int parse_string(sd_lldp_rx *lldp_rx, char **s, const void *q, size_t n) {
         const char *p = q;
         char *k;
 
@@ -120,7 +137,7 @@
         assert(p || n == 0);
 
         if (*s) {
-                log_lldp(lldp, "Found duplicate string, ignoring field.");
+                log_lldp_rx(lldp_rx, "Found duplicate string, ignoring field.");
                 return 0;
         }
 
@@ -133,7 +150,7 @@
 
         /* Look for inner NULs */
         if (memchr(p, 0, n)) {
-                log_lldp(lldp, "Found inner NUL in string, ignoring field.");
+                log_lldp_rx(lldp_rx, "Found inner NUL in string, ignoring field.");
                 return 0;
         }
 
@@ -157,14 +174,14 @@
         assert(n);
 
         if (n->raw_size < sizeof(struct ether_header))
-                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                      "Received truncated packet, ignoring.");
+                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                         "Received truncated packet, ignoring.");
 
         memcpy(&h, LLDP_NEIGHBOR_RAW(n), sizeof(h));
 
         if (h.ether_type != htobe16(ETHERTYPE_LLDP))
-                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                      "Received packet with wrong type, ignoring.");
+                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                         "Received packet with wrong type, ignoring.");
 
         if (h.ether_dhost[0] != 0x01 ||
             h.ether_dhost[1] != 0x80 ||
@@ -172,8 +189,8 @@
             h.ether_dhost[3] != 0x00 ||
             h.ether_dhost[4] != 0x00 ||
             !IN_SET(h.ether_dhost[5], 0x00, 0x03, 0x0e))
-                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                      "Received packet with wrong destination address, ignoring.");
+                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                         "Received packet with wrong destination address, ignoring.");
 
         memcpy(&n->source_address, h.ether_shost, sizeof(struct ether_addr));
         memcpy(&n->destination_address, h.ether_dhost, sizeof(struct ether_addr));
@@ -186,7 +203,7 @@
                 uint16_t length;
 
                 if (left < 2)
-                        return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
+                        return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
                                               "TLV lacks header, ignoring.");
 
                 type = p[0] >> 1;
@@ -194,15 +211,15 @@
                 p += 2, left -= 2;
 
                 if (left < length)
-                        return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                              "TLV truncated, ignoring datagram.");
+                        return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                 "TLV truncated, ignoring datagram.");
 
                 switch (type) {
 
                 case SD_LLDP_TYPE_END:
                         if (length != 0)
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "End marker TLV not zero-sized, ignoring datagram.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "End marker TLV not zero-sized, ignoring datagram.");
 
                         /* Note that after processing the SD_LLDP_TYPE_END left could still be > 0
                          * as the message may contain padding (see IEEE 802.1AB-2016, sec. 8.5.12) */
@@ -212,12 +229,12 @@
                 case SD_LLDP_TYPE_CHASSIS_ID:
                         if (length < 2 || length > 256)
                                 /* includes the chassis subtype, hence one extra byte */
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "Chassis ID field size out of range, ignoring datagram.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "Chassis ID field size out of range, ignoring datagram.");
 
                         if (n->id.chassis_id)
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "Duplicate chassis ID field, ignoring datagram.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "Duplicate chassis ID field, ignoring datagram.");
 
                         n->id.chassis_id = memdup(p, length);
                         if (!n->id.chassis_id)
@@ -229,12 +246,12 @@
                 case SD_LLDP_TYPE_PORT_ID:
                         if (length < 2 || length > 256)
                                 /* includes the port subtype, hence one extra byte */
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "Port ID field size out of range, ignoring datagram.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "Port ID field size out of range, ignoring datagram.");
 
                         if (n->id.port_id)
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "Duplicate port ID field, ignoring datagram.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "Duplicate port ID field, ignoring datagram.");
 
                         n->id.port_id = memdup(p, length);
                         if (!n->id.port_id)
@@ -245,39 +262,39 @@
 
                 case SD_LLDP_TYPE_TTL:
                         if (length != 2)
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "TTL field has wrong size, ignoring datagram.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "TTL field has wrong size, ignoring datagram.");
 
                         if (n->has_ttl)
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "Duplicate TTL field, ignoring datagram.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "Duplicate TTL field, ignoring datagram.");
 
                         n->ttl = unaligned_read_be16(p);
                         n->has_ttl = true;
                         break;
 
                 case SD_LLDP_TYPE_PORT_DESCRIPTION:
-                        r = parse_string(n->lldp, &n->port_description, p, length);
+                        r = parse_string(n->lldp_rx, &n->port_description, p, length);
                         if (r < 0)
                                 return r;
                         break;
 
                 case SD_LLDP_TYPE_SYSTEM_NAME:
-                        r = parse_string(n->lldp, &n->system_name, p, length);
+                        r = parse_string(n->lldp_rx, &n->system_name, p, length);
                         if (r < 0)
                                 return r;
                         break;
 
                 case SD_LLDP_TYPE_SYSTEM_DESCRIPTION:
-                        r = parse_string(n->lldp, &n->system_description, p, length);
+                        r = parse_string(n->lldp_rx, &n->system_description, p, length);
                         if (r < 0)
                                 return r;
                         break;
 
                 case SD_LLDP_TYPE_SYSTEM_CAPABILITIES:
                         if (length != 4)
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "System capabilities field has wrong size.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "System capabilities field has wrong size.");
 
                         n->system_capabilities = unaligned_read_be16(p);
                         n->enabled_capabilities = unaligned_read_be16(p + 2);
@@ -286,14 +303,13 @@
 
                 case SD_LLDP_TYPE_PRIVATE:
                         if (length < 4)
-                                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                                      "Found private TLV that is too short, ignoring.");
+                                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                                         "Found private TLV that is too short, ignoring.");
 
                         /* RFC 8520: MUD URL */
-                        if (memcmp(p, SD_LLDP_OUI_MUD, sizeof(SD_LLDP_OUI_MUD)) == 0 &&
-                            p[sizeof(SD_LLDP_OUI_MUD)] == SD_LLDP_OUI_SUBTYPE_MUD_USAGE_DESCRIPTION) {
-                                r = parse_string(n->lldp, &n->mud_url, p + sizeof(SD_LLDP_OUI_MUD) + 1,
-                                                 length - 1 - sizeof(SD_LLDP_OUI_MUD));
+                        if (memcmp(p, SD_LLDP_OUI_IANA_MUD, sizeof(SD_LLDP_OUI_IANA_MUD)) == 0) {
+                                r = parse_string(n->lldp_rx, &n->mud_url, p + sizeof(SD_LLDP_OUI_IANA_MUD),
+                                                 length - sizeof(SD_LLDP_OUI_IANA_MUD));
                                 if (r < 0)
                                         return r;
                         }
@@ -305,8 +321,8 @@
 
 end_marker:
         if (!n->id.chassis_id || !n->id.port_id || !n->has_ttl)
-                return log_lldp_errno(n->lldp, SYNTHETIC_ERRNO(EBADMSG),
-                                      "One or more mandatory TLV missing in datagram. Ignoring.");
+                return log_lldp_rx_errno(n->lldp_rx, SYNTHETIC_ERRNO(EBADMSG),
+                                         "One or more mandatory TLV missing in datagram. Ignoring.");
 
         n->rindex = sizeof(struct ether_header);
 
@@ -320,16 +336,16 @@
                 usec_t base;
 
                 /* Use the packet's timestamp if there is one known */
-                base = triple_timestamp_by_clock(&n->timestamp, clock_boottime_or_monotonic());
-                if (base <= 0 || base == USEC_INFINITY)
-                        base = now(clock_boottime_or_monotonic()); /* Otherwise, take the current time */
+                base = triple_timestamp_by_clock(&n->timestamp, CLOCK_BOOTTIME);
+                if (!timestamp_is_set(base))
+                        base = now(CLOCK_BOOTTIME); /* Otherwise, take the current time */
 
                 n->until = usec_add(base, n->ttl * USEC_PER_SEC);
         } else
                 n->until = 0;
 
-        if (n->lldp)
-                prioq_reshuffle(n->lldp->neighbor_by_expiry, n, &n->prioq_idx);
+        if (n->lldp_rx)
+                prioq_reshuffle(n->lldp_rx->neighbor_by_expiry, n, &n->prioq_idx);
 }
 
 bool lldp_neighbor_equal(const sd_lldp_neighbor *a, const sd_lldp_neighbor *b) {
@@ -345,7 +361,7 @@
         return memcmp(LLDP_NEIGHBOR_RAW(a), LLDP_NEIGHBOR_RAW(b), a->raw_size) == 0;
 }
 
-_public_ int sd_lldp_neighbor_get_source_address(sd_lldp_neighbor *n, struct ether_addr* address) {
+int sd_lldp_neighbor_get_source_address(sd_lldp_neighbor *n, struct ether_addr* address) {
         assert_return(n, -EINVAL);
         assert_return(address, -EINVAL);
 
@@ -353,7 +369,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_destination_address(sd_lldp_neighbor *n, struct ether_addr* address) {
+int sd_lldp_neighbor_get_destination_address(sd_lldp_neighbor *n, struct ether_addr* address) {
         assert_return(n, -EINVAL);
         assert_return(address, -EINVAL);
 
@@ -361,7 +377,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size) {
+int sd_lldp_neighbor_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size) {
         assert_return(n, -EINVAL);
         assert_return(ret, -EINVAL);
         assert_return(size, -EINVAL);
@@ -372,7 +388,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_chassis_id(sd_lldp_neighbor *n, uint8_t *type, const void **ret, size_t *size) {
+int sd_lldp_neighbor_get_chassis_id(sd_lldp_neighbor *n, uint8_t *type, const void **ret, size_t *size) {
         assert_return(n, -EINVAL);
         assert_return(type, -EINVAL);
         assert_return(ret, -EINVAL);
@@ -425,7 +441,7 @@
         return 1;
 }
 
-_public_ int sd_lldp_neighbor_get_chassis_id_as_string(sd_lldp_neighbor *n, const char **ret) {
+int sd_lldp_neighbor_get_chassis_id_as_string(sd_lldp_neighbor *n, const char **ret) {
         char *k;
         int r;
 
@@ -481,7 +497,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_port_id(sd_lldp_neighbor *n, uint8_t *type, const void **ret, size_t *size) {
+int sd_lldp_neighbor_get_port_id(sd_lldp_neighbor *n, uint8_t *type, const void **ret, size_t *size) {
         assert_return(n, -EINVAL);
         assert_return(type, -EINVAL);
         assert_return(ret, -EINVAL);
@@ -496,7 +512,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_port_id_as_string(sd_lldp_neighbor *n, const char **ret) {
+int sd_lldp_neighbor_get_port_id_as_string(sd_lldp_neighbor *n, const char **ret) {
         char *k;
         int r;
 
@@ -551,7 +567,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_ttl(sd_lldp_neighbor *n, uint16_t *ret_sec) {
+int sd_lldp_neighbor_get_ttl(sd_lldp_neighbor *n, uint16_t *ret_sec) {
         assert_return(n, -EINVAL);
         assert_return(ret_sec, -EINVAL);
 
@@ -559,7 +575,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_system_name(sd_lldp_neighbor *n, const char **ret) {
+int sd_lldp_neighbor_get_system_name(sd_lldp_neighbor *n, const char **ret) {
         assert_return(n, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -570,7 +586,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_system_description(sd_lldp_neighbor *n, const char **ret) {
+int sd_lldp_neighbor_get_system_description(sd_lldp_neighbor *n, const char **ret) {
         assert_return(n, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -581,7 +597,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_port_description(sd_lldp_neighbor *n, const char **ret) {
+int sd_lldp_neighbor_get_port_description(sd_lldp_neighbor *n, const char **ret) {
         assert_return(n, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -592,7 +608,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_mud_url(sd_lldp_neighbor *n, const char **ret) {
+int sd_lldp_neighbor_get_mud_url(sd_lldp_neighbor *n, const char **ret) {
         assert_return(n, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -603,7 +619,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_system_capabilities(sd_lldp_neighbor *n, uint16_t *ret) {
+int sd_lldp_neighbor_get_system_capabilities(sd_lldp_neighbor *n, uint16_t *ret) {
         assert_return(n, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -614,7 +630,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_enabled_capabilities(sd_lldp_neighbor *n, uint16_t *ret) {
+int sd_lldp_neighbor_get_enabled_capabilities(sd_lldp_neighbor *n, uint16_t *ret) {
         assert_return(n, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -625,7 +641,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_from_raw(sd_lldp_neighbor **ret, const void *raw, size_t raw_size) {
+int sd_lldp_neighbor_from_raw(sd_lldp_neighbor **ret, const void *raw, size_t raw_size) {
         _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *n = NULL;
         int r;
 
@@ -636,7 +652,8 @@
         if (!n)
                 return -ENOMEM;
 
-        memcpy(LLDP_NEIGHBOR_RAW(n), raw, raw_size);
+        memcpy_safe(LLDP_NEIGHBOR_RAW(n), raw, raw_size);
+
         r = lldp_neighbor_parse(n);
         if (r < 0)
                 return r;
@@ -646,7 +663,7 @@
         return r;
 }
 
-_public_ int sd_lldp_neighbor_tlv_rewind(sd_lldp_neighbor *n) {
+int sd_lldp_neighbor_tlv_rewind(sd_lldp_neighbor *n) {
         assert_return(n, -EINVAL);
 
         assert(n->raw_size >= sizeof(struct ether_header));
@@ -655,7 +672,7 @@
         return n->rindex < n->raw_size;
 }
 
-_public_ int sd_lldp_neighbor_tlv_next(sd_lldp_neighbor *n) {
+int sd_lldp_neighbor_tlv_next(sd_lldp_neighbor *n) {
         size_t length;
 
         assert_return(n, -EINVAL);
@@ -674,7 +691,7 @@
         return n->rindex < n->raw_size;
 }
 
-_public_ int sd_lldp_neighbor_tlv_get_type(sd_lldp_neighbor *n, uint8_t *type) {
+int sd_lldp_neighbor_tlv_get_type(sd_lldp_neighbor *n, uint8_t *type) {
         assert_return(n, -EINVAL);
         assert_return(type, -EINVAL);
 
@@ -688,7 +705,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_tlv_is_type(sd_lldp_neighbor *n, uint8_t type) {
+int sd_lldp_neighbor_tlv_is_type(sd_lldp_neighbor *n, uint8_t type) {
         uint8_t k;
         int r;
 
@@ -701,7 +718,7 @@
         return type == k;
 }
 
-_public_ int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t *subtype) {
+int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t *subtype) {
         const uint8_t *d;
         size_t length;
         int r;
@@ -730,7 +747,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t subtype) {
+int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t subtype) {
         uint8_t k[3], st;
         int r;
 
@@ -743,7 +760,7 @@
         return memcmp(k, oui, 3) == 0 && st == subtype;
 }
 
-_public_ int sd_lldp_neighbor_tlv_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size) {
+int sd_lldp_neighbor_tlv_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size) {
         size_t length;
 
         assert_return(n, -EINVAL);
@@ -765,7 +782,7 @@
         return 0;
 }
 
-_public_ int sd_lldp_neighbor_get_timestamp(sd_lldp_neighbor *n, clockid_t clock, uint64_t *ret) {
+int sd_lldp_neighbor_get_timestamp(sd_lldp_neighbor *n, clockid_t clock, uint64_t *ret) {
         assert_return(n, -EINVAL);
         assert_return(TRIPLE_TIMESTAMP_HAS_CLOCK(clock), -EOPNOTSUPP);
         assert_return(clock_supported(clock), -EOPNOTSUPP);
diff --git a/src/libsystemd-network/lldp-neighbor.h b/src/libsystemd-network/lldp-neighbor.h
index a5718c8..016286b 100644
--- a/src/libsystemd-network/lldp-neighbor.h
+++ b/src/libsystemd-network/lldp-neighbor.h
@@ -5,10 +5,10 @@
 #include <stdbool.h>
 #include <sys/types.h>
 
-#include "sd-lldp.h"
+#include "sd-lldp-rx.h"
 
 #include "hash-funcs.h"
-#include "lldp-internal.h"
+#include "lldp-rx-internal.h"
 #include "time-util.h"
 
 typedef struct LLDPNeighborID {
@@ -21,8 +21,8 @@
 } LLDPNeighborID;
 
 struct sd_lldp_neighbor {
-        /* Neighbor objects stay around as long as they are linked into an "sd_lldp" object or n_ref > 0. */
-        sd_lldp *lldp;
+        /* Neighbor objects stay around as long as they are linked into an "sd_lldp_rx" object or n_ref > 0. */
+        sd_lldp_rx *lldp_rx;
         unsigned n_ref;
 
         triple_timestamp timestamp;
diff --git a/src/libsystemd-network/lldp-network.c b/src/libsystemd-network/lldp-network.c
index 43141b2..598669f 100644
--- a/src/libsystemd-network/lldp-network.c
+++ b/src/libsystemd-network/lldp-network.c
@@ -9,7 +9,6 @@
 #include "socket-util.h"
 
 int lldp_network_bind_raw_socket(int ifindex) {
-
         static const struct sock_filter filter[] = {
                 BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(struct ethhdr, h_dest)),      /* A <- 4 bytes of destination MAC */
                 BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0x0180c200, 1, 0),                    /* A != 01:80:c2:00 */
@@ -24,26 +23,21 @@
                 BPF_STMT(BPF_RET + BPF_K, 0),                                             /* drop packet */
                 BPF_STMT(BPF_RET + BPF_K, UINT32_MAX),                                    /* accept packet */
         };
-
         static const struct sock_fprog fprog = {
                 .len = ELEMENTSOF(filter),
                 .filter = (struct sock_filter*) filter,
         };
-
         struct packet_mreq mreq = {
                 .mr_ifindex = ifindex,
                 .mr_type = PACKET_MR_MULTICAST,
                 .mr_alen = ETH_ALEN,
                 .mr_address = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x00 }
         };
-
         union sockaddr_union saddrll = {
                 .ll.sll_family = AF_PACKET,
                 .ll.sll_ifindex = ifindex,
         };
-
-        _cleanup_close_ int fd = -1;
-        int r;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(ifindex > 0);
 
@@ -52,26 +46,24 @@
         if (fd < 0)
                 return -errno;
 
-        r = setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, &fprog, sizeof(fprog));
-        if (r < 0)
+        if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, &fprog, sizeof(fprog)) < 0)
                 return -errno;
 
-        r = setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
-        if (r < 0)
+        /* customer bridge */
+        if (setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0)
                 return -errno;
 
+        /* non TPMR bridge */
         mreq.mr_address[ETH_ALEN - 1] = 0x03;
-        r = setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
-        if (r < 0)
+        if (setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0)
                 return -errno;
 
+        /* nearest bridge */
         mreq.mr_address[ETH_ALEN - 1] = 0x0E;
-        r = setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
-        if (r < 0)
+        if (setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0)
                 return -errno;
 
-        r = bind(fd, &saddrll.sa, sizeof(saddrll.ll));
-        if (r < 0)
+        if (bind(fd, &saddrll.sa, sizeof(saddrll.ll)) < 0)
                 return -errno;
 
         return TAKE_FD(fd);
diff --git a/src/libsystemd-network/lldp-rx-internal.h b/src/libsystemd-network/lldp-rx-internal.h
new file mode 100644
index 0000000..83d0bc4
--- /dev/null
+++ b/src/libsystemd-network/lldp-rx-internal.h
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "sd-event.h"
+#include "sd-lldp-rx.h"
+
+#include "hashmap.h"
+#include "network-common.h"
+#include "prioq.h"
+
+struct sd_lldp_rx {
+        unsigned n_ref;
+
+        int ifindex;
+        char *ifname;
+        int fd;
+
+        sd_event *event;
+        int64_t event_priority;
+        sd_event_source *io_event_source;
+        sd_event_source *timer_event_source;
+
+        Prioq *neighbor_by_expiry;
+        Hashmap *neighbor_by_id;
+
+        uint64_t neighbors_max;
+
+        sd_lldp_rx_callback_t callback;
+        void *userdata;
+
+        uint16_t capability_mask;
+
+        struct ether_addr filter_address;
+};
+
+const char* lldp_rx_event_to_string(sd_lldp_rx_event_t e) _const_;
+sd_lldp_rx_event_t lldp_rx_event_from_string(const char *s) _pure_;
+
+#define log_lldp_rx_errno(lldp_rx, error, fmt, ...)     \
+        log_interface_prefix_full_errno(                \
+                "LLDP Rx: ",                            \
+                sd_lldp_rx, lldp_rx,                    \
+                error, fmt, ##__VA_ARGS__)
+#define log_lldp_rx(lldp_rx, fmt, ...)                  \
+        log_interface_prefix_full_errno_zerook(         \
+                "LLDP Rx: ",                            \
+                sd_lldp_rx, lldp_rx,                    \
+                0, fmt, ##__VA_ARGS__)
diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build
index ca3393e..5f203f5 100644
--- a/src/libsystemd-network/meson.build
+++ b/src/libsystemd-network/meson.build
@@ -1,121 +1,113 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-sources = files('''
-        sd-dhcp-client.c
-        sd-dhcp-server.c
-        dhcp-client-internal.h
-        dhcp-network.c
-        dhcp-option.c
-        dhcp-packet.c
-        dhcp-internal.h
-        dhcp-server-internal.h
-        dhcp-protocol.h
-        dhcp-lease-internal.h
-        sd-dhcp-lease.c
-        sd-ipv4ll.c
-        sd-ipv4acd.c
-        arp-util.h
-        arp-util.c
-        network-common.c
-        network-common.h
-        network-internal.c
-        network-internal.h
-        sd-ndisc.c
-        ndisc-internal.h
-        ndisc-router.h
-        ndisc-router.c
-        sd-radv.c
-        radv-internal.h
-        icmp6-util.h
-        icmp6-util.c
-        sd-dhcp6-client.c
-        dhcp6-internal.h
-        dhcp6-protocol.h
-        dhcp6-network.c
-        dhcp6-option.c
-        dhcp6-lease-internal.h
-        sd-dhcp6-lease.c
-        dhcp-identifier.h
-        dhcp-identifier.c
-        lldp-internal.h
-        lldp-network.h
-        lldp-network.c
-        lldp-neighbor.h
-        lldp-neighbor.c
-        sd-lldp.c
-'''.split())
+sources = files(
+        'arp-util.c',
+        'dhcp-identifier.c',
+        'dhcp-network.c',
+        'dhcp-option.c',
+        'dhcp-packet.c',
+        'dhcp6-network.c',
+        'dhcp6-option.c',
+        'dhcp6-protocol.c',
+        'icmp6-util.c',
+        'lldp-neighbor.c',
+        'lldp-network.c',
+        'ndisc-router.c',
+        'network-common.c',
+        'network-internal.c',
+        'sd-dhcp-client.c',
+        'sd-dhcp-lease.c',
+        'sd-dhcp-server.c',
+        'sd-dhcp6-client.c',
+        'sd-dhcp6-lease.c',
+        'sd-ipv4acd.c',
+        'sd-ipv4ll.c',
+        'sd-lldp-rx.c',
+        'sd-lldp-tx.c',
+        'sd-ndisc.c',
+        'sd-radv.c',
+)
 
 libsystemd_network = static_library(
         'systemd-network',
         sources,
-        include_directories : includes)
+        include_directories : includes,
+        build_by_default : false)
 
 libsystemd_network_includes = [includes, include_directories('.')]
 
 ############################################################
 
 tests += [
-        [['src/libsystemd-network/test-dhcp-option.c'],
+        [files('test-dhcp-option.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/test-sd-dhcp-lease.c'],
+        [files('test-sd-dhcp-lease.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/test-dhcp-client.c'],
+        [files('test-dhcp-client.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/test-dhcp-server.c'],
+        [files('test-dhcp-server.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/test-ipv4ll.c'],
+        [files('test-ipv4ll.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/test-ipv4ll-manual.c'],
+        [files('test-ipv4ll-manual.c'),
          [libshared,
           libsystemd_network],
          [], [], '', 'manual'],
 
-        [['src/libsystemd-network/test-acd.c'],
+        [files('test-acd.c'),
          [libshared,
           libsystemd_network],
          [], [], '', 'manual'],
 
-        [['src/libsystemd-network/test-ndisc-rs.c'],
+        [files('test-ndisc-rs.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/test-ndisc-ra.c'],
+        [files('test-ndisc-ra.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/test-dhcp6-client.c'],
+        [files('test-dhcp6-client.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/test-lldp.c'],
+        [files('test-lldp-rx.c'),
          [libshared,
           libsystemd_network]],
 ]
 
 fuzzers += [
-        [['src/libsystemd-network/fuzz-dhcp6-client.c'],
+        [files('fuzz-dhcp-client.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/fuzz-dhcp-server.c'],
+        [files('fuzz-dhcp6-client.c'),
+         [libshared,
+          libsystemd_network]],
+
+        [files('fuzz-dhcp-server.c'),
          [libsystemd_network,
           libshared]],
 
-        [['src/libsystemd-network/fuzz-lldp.c'],
+        [files('fuzz-dhcp-server-relay.c'),
+         [libsystemd_network,
+          libshared]],
+
+        [files('fuzz-lldp-rx.c'),
          [libshared,
           libsystemd_network]],
 
-        [['src/libsystemd-network/fuzz-ndisc-rs.c'],
+        [files('fuzz-ndisc-rs.c'),
          [libshared,
           libsystemd_network]],
 ]
diff --git a/src/libsystemd-network/ndisc-internal.h b/src/libsystemd-network/ndisc-internal.h
index d43b575..615de0d 100644
--- a/src/libsystemd-network/ndisc-internal.h
+++ b/src/libsystemd-network/ndisc-internal.h
@@ -7,7 +7,7 @@
 
 #include "sd-ndisc.h"
 
-#include "log-link.h"
+#include "network-common.h"
 #include "time-util.h"
 
 #define NDISC_ROUTER_SOLICITATION_INTERVAL (4U * USEC_PER_SEC)
@@ -25,8 +25,6 @@
         int event_priority;
 
         struct ether_addr mac_addr;
-        uint8_t hop_limit;
-        uint32_t mtu;
 
         sd_event_source *recv_event_source;
         sd_event_source *timeout_event_source;
@@ -44,10 +42,10 @@
 #define log_ndisc_errno(ndisc, error, fmt, ...)         \
         log_interface_prefix_full_errno(                \
                 "NDISC: ",                              \
-                sd_ndisc_get_ifname(ndisc),             \
+                sd_ndisc, ndisc,                        \
                 error, fmt, ##__VA_ARGS__)
 #define log_ndisc(ndisc, fmt, ...)                      \
         log_interface_prefix_full_errno_zerook(         \
                 "NDISC: ",                              \
-                sd_ndisc_get_ifname(ndisc),             \
+                sd_ndisc, ndisc,                        \
                 0, fmt, ##__VA_ARGS__)
diff --git a/src/libsystemd-network/ndisc-router.c b/src/libsystemd-network/ndisc-router.c
index 6db07b0..e4cbf71 100644
--- a/src/libsystemd-network/ndisc-router.c
+++ b/src/libsystemd-network/ndisc-router.c
@@ -21,6 +21,9 @@
 sd_ndisc_router *ndisc_router_new(size_t raw_size) {
         sd_ndisc_router *rt;
 
+        if (raw_size > SIZE_MAX - ALIGN(sizeof(sd_ndisc_router)))
+                return NULL;
+
         rt = malloc0(ALIGN(sizeof(sd_ndisc_router)) + raw_size);
         if (!rt)
                 return NULL;
@@ -31,28 +34,7 @@
         return rt;
 }
 
-_public_ int sd_ndisc_router_from_raw(sd_ndisc_router **ret, const void *raw, size_t raw_size) {
-        _cleanup_(sd_ndisc_router_unrefp) sd_ndisc_router *rt = NULL;
-        int r;
-
-        assert_return(ret, -EINVAL);
-        assert_return(raw || raw_size <= 0, -EINVAL);
-
-        rt = ndisc_router_new(raw_size);
-        if (!rt)
-                return -ENOMEM;
-
-        memcpy(NDISC_ROUTER_RAW(rt), raw, raw_size);
-        r = ndisc_router_parse(NULL, rt);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(rt);
-
-        return r;
-}
-
-_public_ int sd_ndisc_router_get_address(sd_ndisc_router *rt, struct in6_addr *ret_addr) {
+int sd_ndisc_router_get_address(sd_ndisc_router *rt, struct in6_addr *ret_addr) {
         assert_return(rt, -EINVAL);
         assert_return(ret_addr, -EINVAL);
 
@@ -63,7 +45,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_get_timestamp(sd_ndisc_router *rt, clockid_t clock, uint64_t *ret) {
+int sd_ndisc_router_get_timestamp(sd_ndisc_router *rt, clockid_t clock, uint64_t *ret) {
         assert_return(rt, -EINVAL);
         assert_return(TRIPLE_TIMESTAMP_HAS_CLOCK(clock), -EOPNOTSUPP);
         assert_return(clock_supported(clock), -EOPNOTSUPP);
@@ -76,7 +58,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_get_raw(sd_ndisc_router *rt, const void **ret, size_t *size) {
+int sd_ndisc_router_get_raw(sd_ndisc_router *rt, const void **ret, size_t *size) {
         assert_return(rt, -EINVAL);
         assert_return(ret, -EINVAL);
         assert_return(size, -EINVAL);
@@ -231,7 +213,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_get_hop_limit(sd_ndisc_router *rt, uint8_t *ret) {
+int sd_ndisc_router_get_hop_limit(sd_ndisc_router *rt, uint8_t *ret) {
         assert_return(rt, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -239,7 +221,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_get_flags(sd_ndisc_router *rt, uint64_t *ret_flags) {
+int sd_ndisc_router_get_flags(sd_ndisc_router *rt, uint64_t *ret_flags) {
         assert_return(rt, -EINVAL);
         assert_return(ret_flags, -EINVAL);
 
@@ -247,7 +229,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_get_lifetime(sd_ndisc_router *rt, uint16_t *ret_lifetime) {
+int sd_ndisc_router_get_lifetime(sd_ndisc_router *rt, uint16_t *ret_lifetime) {
         assert_return(rt, -EINVAL);
         assert_return(ret_lifetime, -EINVAL);
 
@@ -255,7 +237,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_get_preference(sd_ndisc_router *rt, unsigned *ret) {
+int sd_ndisc_router_get_preference(sd_ndisc_router *rt, unsigned *ret) {
         assert_return(rt, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -263,7 +245,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_get_mtu(sd_ndisc_router *rt, uint32_t *ret) {
+int sd_ndisc_router_get_mtu(sd_ndisc_router *rt, uint32_t *ret) {
         assert_return(rt, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -274,7 +256,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_option_rewind(sd_ndisc_router *rt) {
+int sd_ndisc_router_option_rewind(sd_ndisc_router *rt) {
         assert_return(rt, -EINVAL);
 
         assert(rt->raw_size >= sizeof(struct nd_router_advert));
@@ -283,7 +265,7 @@
         return rt->rindex < rt->raw_size;
 }
 
-_public_ int sd_ndisc_router_option_next(sd_ndisc_router *rt) {
+int sd_ndisc_router_option_next(sd_ndisc_router *rt) {
         size_t length;
 
         assert_return(rt, -EINVAL);
@@ -302,7 +284,7 @@
         return rt->rindex < rt->raw_size;
 }
 
-_public_ int sd_ndisc_router_option_get_type(sd_ndisc_router *rt, uint8_t *ret) {
+int sd_ndisc_router_option_get_type(sd_ndisc_router *rt, uint8_t *ret) {
         assert_return(rt, -EINVAL);
         assert_return(ret, -EINVAL);
 
@@ -316,7 +298,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_option_is_type(sd_ndisc_router *rt, uint8_t type) {
+int sd_ndisc_router_option_is_type(sd_ndisc_router *rt, uint8_t type) {
         uint8_t k;
         int r;
 
@@ -329,7 +311,7 @@
         return type == k;
 }
 
-_public_ int sd_ndisc_router_option_get_raw(sd_ndisc_router *rt, const void **ret, size_t *size) {
+int sd_ndisc_router_option_get_raw(sd_ndisc_router *rt, const void **ret, size_t *size) {
         size_t length;
 
         assert_return(rt, -EINVAL);
@@ -377,7 +359,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_prefix_get_valid_lifetime(sd_ndisc_router *rt, uint32_t *ret) {
+int sd_ndisc_router_prefix_get_valid_lifetime(sd_ndisc_router *rt, uint32_t *ret) {
         struct nd_opt_prefix_info *ri;
         int r;
 
@@ -392,7 +374,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_prefix_get_preferred_lifetime(sd_ndisc_router *rt, uint32_t *ret) {
+int sd_ndisc_router_prefix_get_preferred_lifetime(sd_ndisc_router *rt, uint32_t *ret) {
         struct nd_opt_prefix_info *pi;
         int r;
 
@@ -407,7 +389,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_prefix_get_flags(sd_ndisc_router *rt, uint8_t *ret) {
+int sd_ndisc_router_prefix_get_flags(sd_ndisc_router *rt, uint8_t *ret) {
         struct nd_opt_prefix_info *pi;
         uint8_t flags;
         int r;
@@ -430,7 +412,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_prefix_get_address(sd_ndisc_router *rt, struct in6_addr *ret_addr) {
+int sd_ndisc_router_prefix_get_address(sd_ndisc_router *rt, struct in6_addr *ret_addr) {
         struct nd_opt_prefix_info *pi;
         int r;
 
@@ -445,7 +427,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_prefix_get_prefixlen(sd_ndisc_router *rt, unsigned *ret) {
+int sd_ndisc_router_prefix_get_prefixlen(sd_ndisc_router *rt, unsigned *ret) {
         struct nd_opt_prefix_info *pi;
         int r;
 
@@ -490,7 +472,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_route_get_lifetime(sd_ndisc_router *rt, uint32_t *ret) {
+int sd_ndisc_router_route_get_lifetime(sd_ndisc_router *rt, uint32_t *ret) {
         uint8_t *ri;
         int r;
 
@@ -505,7 +487,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_route_get_address(sd_ndisc_router *rt, struct in6_addr *ret_addr) {
+int sd_ndisc_router_route_get_address(sd_ndisc_router *rt, struct in6_addr *ret_addr) {
         uint8_t *ri;
         int r;
 
@@ -522,7 +504,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_route_get_prefixlen(sd_ndisc_router *rt, unsigned *ret) {
+int sd_ndisc_router_route_get_prefixlen(sd_ndisc_router *rt, unsigned *ret) {
         uint8_t *ri;
         int r;
 
@@ -537,7 +519,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_route_get_preference(sd_ndisc_router *rt, unsigned *ret) {
+int sd_ndisc_router_route_get_preference(sd_ndisc_router *rt, unsigned *ret) {
         uint8_t *ri;
         int r;
 
@@ -576,7 +558,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_rdnss_get_addresses(sd_ndisc_router *rt, const struct in6_addr **ret) {
+int sd_ndisc_router_rdnss_get_addresses(sd_ndisc_router *rt, const struct in6_addr **ret) {
         uint8_t *ri;
         int r;
 
@@ -591,7 +573,7 @@
         return (NDISC_ROUTER_OPTION_LENGTH(rt) - 8) / 16;
 }
 
-_public_ int sd_ndisc_router_rdnss_get_lifetime(sd_ndisc_router *rt, uint32_t *ret) {
+int sd_ndisc_router_rdnss_get_lifetime(sd_ndisc_router *rt, uint32_t *ret) {
         uint8_t *ri;
         int r;
 
@@ -627,7 +609,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_router_dnssl_get_domains(sd_ndisc_router *rt, char ***ret) {
+int sd_ndisc_router_dnssl_get_domains(sd_ndisc_router *rt, char ***ret) {
         _cleanup_strv_free_ char **l = NULL;
         _cleanup_free_ char *e = NULL;
         size_t n = 0, left;
@@ -719,7 +701,7 @@
         return k;
 }
 
-_public_ int sd_ndisc_router_dnssl_get_lifetime(sd_ndisc_router *rt, uint32_t *ret_sec) {
+int sd_ndisc_router_dnssl_get_lifetime(sd_ndisc_router *rt, uint32_t *ret_sec) {
         uint8_t *ri;
         int r;
 
diff --git a/src/libsystemd-network/network-common.c b/src/libsystemd-network/network-common.c
index 9bc0da9..b8b4ecd 100644
--- a/src/libsystemd-network/network-common.c
+++ b/src/libsystemd-network/network-common.c
@@ -2,23 +2,14 @@
 
 #include "format-util.h"
 #include "network-common.h"
-#include "string-util.h"
 
-const char *get_ifname(int ifindex, char **ifname) {
-        char buf[IF_NAMESIZE + 1];
-
+int get_ifname(int ifindex, char **ifname) {
         assert(ifname);
 
         /* This sets ifname only when it is not set yet. */
 
         if (*ifname)
-                return *ifname;
+                return 0;
 
-        if (ifindex <= 0)
-                return NULL;
-
-        if (!format_ifname(ifindex, buf))
-                return NULL;
-
-        return *ifname = strdup(buf);
+        return format_ifname_alloc(ifindex, ifname);
 }
diff --git a/src/libsystemd-network/network-common.h b/src/libsystemd-network/network-common.h
index 76a6c4a..2b0e3b5 100644
--- a/src/libsystemd-network/network-common.h
+++ b/src/libsystemd-network/network-common.h
@@ -1,4 +1,30 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-const char *get_ifname(int ifindex, char **ifname);
+#include "log-link.h"
+
+#define log_interface_prefix_full_errno_zerook(prefix, type, val, error, fmt, ...) \
+        ({                                                              \
+                int _e = (error);                                       \
+                if (DEBUG_LOGGING) {                                    \
+                        const char *_n = NULL;                          \
+                        type *_v = (val);                               \
+                                                                        \
+                        if (_v)                                         \
+                                (void) type##_get_ifname(_v, &_n);      \
+                        log_interface_full_errno_zerook(                \
+                                _n, LOG_DEBUG, _e, prefix fmt,          \
+                                ##__VA_ARGS__);                         \
+                }                                                       \
+                -ERRNO_VALUE(_e);                                       \
+        })
+
+#define log_interface_prefix_full_errno(prefix, type, val, error, fmt, ...) \
+        ({                                                              \
+                int _error = (error);                                   \
+                ASSERT_NON_ZERO(_error);                                \
+                log_interface_prefix_full_errno_zerook(                 \
+                        prefix, type, val, _error, fmt, ##__VA_ARGS__); \
+        })
+
+int get_ifname(int ifindex, char **ifname);
diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c
index bc7aec2..cd32a72 100644
--- a/src/libsystemd-network/network-internal.c
+++ b/src/libsystemd-network/network-internal.c
@@ -28,14 +28,12 @@
                 with_leading_space = &_space;
 
         for (size_t i = 0; i < size; i++) {
-                char sbuf[INET_ADDRSTRLEN];
-
                 if (predicate && !predicate(&addresses[i]))
                         continue;
 
                 if (*with_leading_space)
                         fputc(' ', f);
-                fputs(inet_ntop(AF_INET, &addresses[i], sbuf, sizeof(sbuf)), f);
+                fputs(IN4_ADDR_TO_STRING(&addresses[i]), f);
                 count++;
                 *with_leading_space = true;
         }
@@ -89,11 +87,9 @@
                 with_leading_space = &_space;
 
         for (size_t i = 0; i < size; i++) {
-                char buffer[INET6_ADDRSTRLEN];
-
                 if (*with_leading_space)
                         fputc(' ', f);
-                fputs(inet_ntop(AF_INET6, addresses+i, buffer, sizeof(buffer)), f);
+                fputs(IN6_ADDR_TO_STRING(&addresses[i]), f);
                 *with_leading_space = true;
         }
 }
@@ -143,7 +139,6 @@
         fprintf(f, "%s=", key);
 
         for (size_t i = 0; i < size; i++) {
-                char sbuf[INET_ADDRSTRLEN];
                 struct in_addr dest, gw;
                 uint8_t length;
 
@@ -151,8 +146,10 @@
                 assert_se(sd_dhcp_route_get_gateway(routes[i], &gw) >= 0);
                 assert_se(sd_dhcp_route_get_destination_prefix_length(routes[i], &length) >= 0);
 
-                fprintf(f, "%s/%" PRIu8, inet_ntop(AF_INET, &dest, sbuf, sizeof sbuf), length);
-                fprintf(f, ",%s%s", inet_ntop(AF_INET, &gw, sbuf, sizeof sbuf), i < size - 1 ? " ": "");
+                fprintf(f, "%s,%s%s",
+                        IN4_ADDR_PREFIX_TO_STRING(&dest, length),
+                        IN4_ADDR_TO_STRING(&gw),
+                        i < size - 1 ? " ": "");
         }
 
         fputs("\n", f);
diff --git a/src/libsystemd-network/network-internal.h b/src/libsystemd-network/network-internal.h
index 895a00d..5aa225e 100644
--- a/src/libsystemd-network/network-internal.h
+++ b/src/libsystemd-network/network-internal.h
@@ -21,7 +21,7 @@
 struct sd_dhcp_route;
 struct sd_dhcp_lease;
 
-void serialize_dhcp_routes(FILE *f, const char *key, sd_dhcp_route **routes, size_t size);
+void serialize_dhcp_routes(FILE *f, const char *key, struct sd_dhcp_route **routes, size_t size);
 int deserialize_dhcp_routes(struct sd_dhcp_route **ret, size_t *ret_size, const char *string);
 
 /* It is not necessary to add deserialize_dhcp_option(). Use unhexmem() instead. */
diff --git a/src/libsystemd-network/radv-internal.h b/src/libsystemd-network/radv-internal.h
index 2094255..1a26875 100644
--- a/src/libsystemd-network/radv-internal.h
+++ b/src/libsystemd-network/radv-internal.h
@@ -7,25 +7,62 @@
 
 #include "sd-radv.h"
 
-#include "log-link.h"
 #include "list.h"
+#include "network-common.h"
 #include "sparse-endian.h"
+#include "time-util.h"
 
-assert_cc(SD_RADV_DEFAULT_MIN_TIMEOUT_USEC <= SD_RADV_DEFAULT_MAX_TIMEOUT_USEC);
+/* RFC 4861 section 6.2.1.
+ * MaxRtrAdvInterval
+ * The maximum time allowed between sending unsolicited multicast Router Advertisements from the
+ * interface, in seconds. MUST be no less than 4 seconds and no greater than 1800 seconds.
+ * Default: 600 seconds */
+#define RADV_MIN_MAX_TIMEOUT_USEC                 (4 * USEC_PER_SEC)
+#define RADV_MAX_MAX_TIMEOUT_USEC                 (1800 * USEC_PER_SEC)
+#define RADV_DEFAULT_MAX_TIMEOUT_USEC             (600 * USEC_PER_SEC)
+/* RFC 4861 section 6.2.1.
+ * MinRtrAdvInterval
+ * The minimum time allowed between sending unsolicited multicast Router Advertisements from the
+ * interface, in seconds. MUST be no less than 3 seconds and no greater than .75 * MaxRtrAdvInterval.
+ * Default: 0.33 * MaxRtrAdvInterval If MaxRtrAdvInterval >= 9 seconds; otherwise, the Default is
+ * MaxRtrAdvInterval (Note, this should be a typo. We use 0.75 * MaxRtrAdvInterval). */
+#define RADV_MIN_MIN_TIMEOUT_USEC                 (3 * USEC_PER_SEC)
+/* RFC 4861 section 6.2.4.
+ * AdvDefaultLifetime
+ * The value to be placed in the Router Lifetime field of Router Advertisements sent from the interface,
+ * in seconds. MUST be either zero or between MaxRtrAdvInterval and 9000 seconds. A value of zero
+ * indicates that the router is not to be used as a default router. These limits may be overridden by
+ * specific documents that describe how IPv6 operates over different link layers. For instance, in a
+ * point-to-point link the peers may have enough information about the number and status of devices at
+ * the other end so that advertisements are needed less frequently.
+ * Default: 3 * MaxRtrAdvInterval */
+#define RADV_MIN_ROUTER_LIFETIME_USEC             RADV_MIN_MAX_TIMEOUT_USEC
+#define RADV_MAX_ROUTER_LIFETIME_USEC             (9000 * USEC_PER_SEC)
+#define RADV_DEFAULT_ROUTER_LIFETIME_USEC         (3 * RADV_DEFAULT_MAX_TIMEOUT_USEC)
+/* draft-ietf-6man-slaac-renum-02 section 4.1.1.
+ * AdvPreferredLifetime: max(AdvDefaultLifetime, 3 * MaxRtrAdvInterval)
+ * AdvValidLifetime: 2 * AdvPreferredLifetime */
+#define RADV_DEFAULT_PREFERRED_LIFETIME_USEC      CONST_MAX(RADV_DEFAULT_ROUTER_LIFETIME_USEC, 3 * RADV_DEFAULT_MAX_TIMEOUT_USEC)
+#define RADV_DEFAULT_VALID_LIFETIME_USEC          (2 * RADV_DEFAULT_PREFERRED_LIFETIME_USEC)
+/* RFC 4861 section 10.
+ * MAX_INITIAL_RTR_ADVERT_INTERVAL  16 seconds
+ * MAX_INITIAL_RTR_ADVERTISEMENTS    3 transmissions
+ * MAX_FINAL_RTR_ADVERTISEMENTS      3 transmissions
+ * MIN_DELAY_BETWEEN_RAS             3 seconds
+ * MAX_RA_DELAY_TIME                .5 seconds */
+#define RADV_MAX_INITIAL_RTR_ADVERT_INTERVAL_USEC (16 * USEC_PER_SEC)
+#define RADV_MAX_INITIAL_RTR_ADVERTISEMENTS       3
+#define RADV_MAX_FINAL_RTR_ADVERTISEMENTS         3
+#define RADV_MIN_DELAY_BETWEEN_RAS                3
+#define RADV_MAX_RA_DELAY_TIME_USEC               (500 * USEC_PER_MSEC)
 
-#define SD_RADV_MAX_INITIAL_RTR_ADVERT_INTERVAL_USEC (16*USEC_PER_SEC)
-#define SD_RADV_MAX_INITIAL_RTR_ADVERTISEMENTS  3
-#define SD_RADV_MAX_FINAL_RTR_ADVERTISEMENTS    3
-#define SD_RADV_MIN_DELAY_BETWEEN_RAS           3
-#define SD_RADV_MAX_RA_DELAY_TIME_USEC          (500*USEC_PER_MSEC)
-
-#define SD_RADV_OPT_ROUTE_INFORMATION           24
-#define SD_RADV_OPT_RDNSS                       25
-#define SD_RADV_OPT_DNSSL                       31
+#define RADV_OPT_ROUTE_INFORMATION                24
+#define RADV_OPT_RDNSS                            25
+#define RADV_OPT_DNSSL                            31
 
 enum RAdvState {
-        SD_RADV_STATE_IDLE                      = 0,
-        SD_RADV_STATE_ADVERTISING               = 1,
+        RADV_STATE_IDLE                      = 0,
+        RADV_STATE_ADVERTISING               = 1,
 };
 typedef enum RAdvState RAdvState;
 
@@ -50,7 +87,7 @@
         uint8_t hop_limit;
         uint8_t flags;
         uint32_t mtu;
-        uint16_t lifetime;
+        usec_t lifetime_usec; /* timespan */
 
         int fd;
         unsigned ra_sent;
@@ -73,8 +110,8 @@
         uint8_t length;                         \
         uint8_t prefixlen;                      \
         uint8_t flags;                          \
-        be32_t valid_lifetime;                  \
-        be32_t preferred_lifetime;              \
+        be32_t lifetime_valid;                  \
+        be32_t lifetime_preferred;              \
         uint32_t reserved;                      \
         struct in6_addr in6_addr;               \
 }
@@ -99,6 +136,10 @@
 
         LIST_FIELDS(struct sd_radv_prefix, prefix);
 
+        /* These are timespans, NOT points in time. */
+        usec_t lifetime_valid_usec;
+        usec_t lifetime_preferred_usec;
+        /* These are points in time specified with clock_boottime_or_monotonic(), NOT timespans. */
         usec_t valid_until;
         usec_t preferred_until;
 };
@@ -123,15 +164,20 @@
         struct radv_route_prefix_opt opt;
 
         LIST_FIELDS(struct sd_radv_route_prefix, prefix);
+
+        /* This is a timespan, NOT a point in time. */
+        usec_t lifetime_usec;
+        /* This is a point in time specified with clock_boottime_or_monotonic(), NOT a timespan. */
+        usec_t valid_until;
 };
 
 #define log_radv_errno(radv, error, fmt, ...)           \
         log_interface_prefix_full_errno(                \
                 "RADV: ",                               \
-                sd_radv_get_ifname(radv),               \
+                sd_radv, radv,                          \
                 error, fmt, ##__VA_ARGS__)
 #define log_radv(radv, fmt, ...)                        \
         log_interface_prefix_full_errno_zerook(         \
                 "RADV: ",                               \
-                sd_radv_get_ifname(radv),               \
+                sd_radv, radv,                          \
                 0, fmt, ##__VA_ARGS__)
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index 46191e5..e482450 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -14,11 +14,13 @@
 #include "sd-dhcp-client.h"
 
 #include "alloc-util.h"
+#include "device-util.h"
 #include "dhcp-identifier.h"
 #include "dhcp-internal.h"
 #include "dhcp-lease-internal.h"
 #include "dhcp-protocol.h"
 #include "dns-domain.h"
+#include "ether-addr-util.h"
 #include "event-util.h"
 #include "fd-util.h"
 #include "hostname-util.h"
@@ -76,8 +78,12 @@
         sd_event *event;
         int event_priority;
         sd_event_source *timeout_resend;
+
         int ifindex;
         char *ifname;
+
+        sd_device *dev;
+
         int fd;
         uint16_t port;
         union sockaddr_union link;
@@ -86,10 +92,8 @@
         Set *req_opts;
         bool anonymize;
         be32_t last_addr;
-        uint8_t mac_addr[MAX_MAC_ADDR_LEN];
-        size_t mac_addr_len;
-        uint8_t bcast_addr[MAX_MAC_ADDR_LEN];
-        size_t bcast_addr_len;
+        struct hw_addr_data hw_addr;
+        struct hw_addr_data bcast_addr;
         uint16_t arp_type;
         sd_dhcp_client_id client_id;
         size_t client_id_len;
@@ -117,8 +121,10 @@
         sd_dhcp_lease *lease;
         usec_t start_delay;
         int ip_service_type;
+        int socket_priority;
+        bool socket_priority_set;
 
-        /* Ignore ifindex when generating iaid. See dhcp_identifier_set_iaid(). */
+        /* Ignore machine-ID when generating DUID. See dhcp_identifier_set_duid_en(). */
         bool test_mode;
 };
 
@@ -145,11 +151,11 @@
         SD_DHCP_OPTION_ROUTER,                          /* 3 */
         SD_DHCP_OPTION_DOMAIN_NAME_SERVER,              /* 6 */
         SD_DHCP_OPTION_DOMAIN_NAME,                     /* 15 */
-        SD_DHCP_OPTION_ROUTER_DISCOVER,                 /* 31 */
+        SD_DHCP_OPTION_ROUTER_DISCOVERY,                /* 31 */
         SD_DHCP_OPTION_STATIC_ROUTE,                    /* 33 */
         SD_DHCP_OPTION_VENDOR_SPECIFIC,                 /* 43 */
-        SD_DHCP_OPTION_NETBIOS_NAMESERVER,              /* 44 */
-        SD_DHCP_OPTION_NETBIOS_NODETYPE,                /* 46 */
+        SD_DHCP_OPTION_NETBIOS_NAME_SERVER,             /* 44 */
+        SD_DHCP_OPTION_NETBIOS_NODE_TYPE,               /* 46 */
         SD_DHCP_OPTION_NETBIOS_SCOPE,                   /* 47 */
         SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE,          /* 121 */
         SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE,  /* 249 */
@@ -189,35 +195,33 @@
                         r = asprintf(&t, "DATA");
                 break;
         case 1:
-                if (len != sizeof_field(sd_dhcp_client_id, eth))
-                        return -EINVAL;
-
-                r = asprintf(&t, "%02x:%02x:%02x:%02x:%02x:%02x",
-                             client_id->eth.haddr[0],
-                             client_id->eth.haddr[1],
-                             client_id->eth.haddr[2],
-                             client_id->eth.haddr[3],
-                             client_id->eth.haddr[4],
-                             client_id->eth.haddr[5]);
+                if (len == sizeof_field(sd_dhcp_client_id, eth))
+                        r = asprintf(&t, "%02x:%02x:%02x:%02x:%02x:%02x",
+                                     client_id->eth.haddr[0],
+                                     client_id->eth.haddr[1],
+                                     client_id->eth.haddr[2],
+                                     client_id->eth.haddr[3],
+                                     client_id->eth.haddr[4],
+                                     client_id->eth.haddr[5]);
+                else
+                        r = asprintf(&t, "ETHER");
                 break;
         case 2 ... 254:
                 r = asprintf(&t, "ARP/LL");
                 break;
         case 255:
-                if (len < 6)
-                        return -EINVAL;
-
-                uint32_t iaid = be32toh(client_id->ns.iaid);
-                uint16_t duid_type = be16toh(client_id->ns.duid.type);
-                if (dhcp_validate_duid_len(duid_type, len - 6, true) < 0)
-                        return -EINVAL;
-
-                r = asprintf(&t, "IAID:0x%x/DUID", iaid);
+                if (len < sizeof(uint32_t))
+                        r = asprintf(&t, "IAID/DUID");
+                else {
+                        uint32_t iaid = be32toh(client_id->ns.iaid);
+                        /* TODO: check and stringify DUID */
+                        r = asprintf(&t, "IAID:0x%x/DUID", iaid);
+                }
                 break;
         }
-
         if (r < 0)
                 return -ENOMEM;
+
         *ret = TAKE_PTR(t);
         return 0;
 }
@@ -237,17 +241,18 @@
 
 int sd_dhcp_client_set_request_broadcast(sd_dhcp_client *client, int broadcast) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
-        client->request_broadcast = !!broadcast;
+        client->request_broadcast = broadcast;
 
         return 0;
 }
 
 int sd_dhcp_client_set_request_option(sd_dhcp_client *client, uint8_t option) {
         assert_return(client, -EINVAL);
-        assert_return(IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED), -EBUSY);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
-        switch(option) {
+        switch (option) {
 
         case SD_DHCP_OPTION_PAD:
         case SD_DHCP_OPTION_OVERLOAD:
@@ -268,7 +273,7 @@
                 const struct in_addr *last_addr) {
 
         assert_return(client, -EINVAL);
-        assert_return(IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED), -EBUSY);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
         if (last_addr)
                 client->last_addr = last_addr->s_addr;
@@ -280,7 +285,7 @@
 
 int sd_dhcp_client_set_ifindex(sd_dhcp_client *client, int ifindex) {
         assert_return(client, -EINVAL);
-        assert_return(IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED), -EBUSY);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
         assert_return(ifindex > 0, -EINVAL);
 
         client->ifindex = ifindex;
@@ -297,63 +302,37 @@
         return free_and_strdup(&client->ifname, ifname);
 }
 
-const char *sd_dhcp_client_get_ifname(sd_dhcp_client *client) {
-        if (!client)
-                return NULL;
+int sd_dhcp_client_get_ifname(sd_dhcp_client *client, const char **ret) {
+        int r;
 
-        return get_ifname(client->ifindex, &client->ifname);
+        assert_return(client, -EINVAL);
+
+        r = get_ifname(client->ifindex, &client->ifname);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = client->ifname;
+
+        return 0;
 }
 
 int sd_dhcp_client_set_mac(
                 sd_dhcp_client *client,
-                const uint8_t *addr,
+                const uint8_t *hw_addr,
                 const uint8_t *bcast_addr,
                 size_t addr_len,
                 uint16_t arp_type) {
 
-        DHCP_CLIENT_DONT_DESTROY(client);
-        bool need_restart = false;
-        int r;
-
         assert_return(client, -EINVAL);
-        assert_return(addr, -EINVAL);
-        assert_return(addr_len > 0 && addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
-        assert_return(arp_type > 0, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
+        assert_return(IN_SET(arp_type, ARPHRD_ETHER, ARPHRD_INFINIBAND), -EINVAL);
+        assert_return(hw_addr, -EINVAL);
+        assert_return(addr_len == (arp_type == ARPHRD_ETHER ? ETH_ALEN : INFINIBAND_ALEN), -EINVAL);
 
-        if (arp_type == ARPHRD_ETHER)
-                assert_return(addr_len == ETH_ALEN, -EINVAL);
-        else if (arp_type == ARPHRD_INFINIBAND)
-                assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
-        else
-                return -EINVAL;
-
-        if (client->mac_addr_len == addr_len &&
-            memcmp(&client->mac_addr, addr, addr_len) == 0 &&
-            (client->bcast_addr_len > 0) == !!bcast_addr &&
-            (!bcast_addr || memcmp(&client->bcast_addr, bcast_addr, addr_len) == 0))
-                return 0;
-
-        if (!IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED)) {
-                log_dhcp_client(client, "Changing MAC address on running DHCP client, restarting");
-                need_restart = true;
-                client_stop(client, SD_DHCP_CLIENT_EVENT_STOP);
-        }
-
-        memcpy(&client->mac_addr, addr, addr_len);
-        client->mac_addr_len = addr_len;
         client->arp_type = arp_type;
-        client->bcast_addr_len = 0;
-
-        if (bcast_addr) {
-                memcpy(&client->bcast_addr, bcast_addr, addr_len);
-                client->bcast_addr_len = addr_len;
-        }
-
-        if (need_restart && client->state != DHCP_STATE_STOPPED) {
-                r = sd_dhcp_client_start(client);
-                if (r < 0)
-                        return log_dhcp_client_errno(client, r, "Failed to restart DHCPv4 client: %m");
-        }
+        hw_addr_set(&client->hw_addr, hw_addr, addr_len);
+        hw_addr_set(&client->bcast_addr, bcast_addr, bcast_addr ? addr_len : 0);
 
         return 0;
 }
@@ -388,19 +367,11 @@
                 const uint8_t *data,
                 size_t data_len) {
 
-        DHCP_CLIENT_DONT_DESTROY(client);
-        bool need_restart = false;
-        int r;
-
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
         assert_return(data, -EINVAL);
         assert_return(data_len > 0 && data_len <= MAX_CLIENT_ID_LEN, -EINVAL);
 
-        if (client->client_id_len == data_len + sizeof(client->client_id.type) &&
-            client->client_id.type == type &&
-            memcmp(&client->client_id.raw.data, data, data_len) == 0)
-                return 0;
-
         /* For hardware types, log debug message about unexpected data length.
          *
          * Note that infiniband's INFINIBAND_ALEN is 20 bytes long, but only
@@ -412,23 +383,10 @@
                                 "unexpected address length %zu",
                                 type, data_len);
 
-        if (!IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED)) {
-                log_dhcp_client(client, "Changing client ID on running DHCP "
-                                "client, restarting");
-                need_restart = true;
-                client_stop(client, SD_DHCP_CLIENT_EVENT_STOP);
-        }
-
         client->client_id.type = type;
         memcpy(&client->client_id.raw.data, data, data_len);
         client->client_id_len = data_len + sizeof (client->client_id.type);
 
-        if (need_restart && client->state != DHCP_STATE_STOPPED) {
-                r = sd_dhcp_client_start(client);
-                if (r < 0)
-                        return log_dhcp_client_errno(client, r, "Failed to restart DHCPv4 client: %m");
-        }
-
         return 0;
 }
 
@@ -442,16 +400,16 @@
                 bool iaid_append,
                 bool iaid_set,
                 uint32_t iaid,
-                uint16_t duid_type,
+                DUIDType duid_type,
                 const void *duid,
                 size_t duid_len,
                 usec_t llt_time) {
 
-        DHCP_CLIENT_DONT_DESTROY(client);
-        int r;
         size_t len;
+        int r;
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
         assert_return(duid_len == 0 || duid, -EINVAL);
 
         if (duid) {
@@ -467,10 +425,8 @@
                 if (iaid_set)
                         client->client_id.ns.iaid = htobe32(iaid);
                 else {
-                        r = dhcp_identifier_set_iaid(client->ifindex, client->mac_addr,
-                                                     client->mac_addr_len,
+                        r = dhcp_identifier_set_iaid(client->dev, &client->hw_addr,
                                                      /* legacy_unstable_byteorder = */ true,
-                                                     /* use_mac = */ client->test_mode,
                                                      &client->client_id.ns.iaid);
                         if (r < 0)
                                 return log_dhcp_client_errno(client, r, "Failed to set IAID: %m");
@@ -481,49 +437,24 @@
                 client->client_id.ns.duid.type = htobe16(duid_type);
                 memcpy(&client->client_id.ns.duid.raw.data, duid, duid_len);
                 len = sizeof(client->client_id.ns.duid.type) + duid_len;
-        } else
-                switch (duid_type) {
-                case DUID_TYPE_LLT:
-                        if (client->mac_addr_len == 0)
-                                return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LLT, MAC address is not set.");
 
-                        r = dhcp_identifier_set_duid_llt(&client->client_id.ns.duid, llt_time, client->mac_addr, client->mac_addr_len, client->arp_type, &len);
-                        if (r < 0)
-                                return log_dhcp_client_errno(client, r, "Failed to set DUID-LLT: %m");
-                        break;
-                case DUID_TYPE_EN:
-                        r = dhcp_identifier_set_duid_en(&client->client_id.ns.duid, &len);
-                        if (r < 0)
-                                return log_dhcp_client_errno(client, r, "Failed to set DUID-EN: %m");
-                        break;
-                case DUID_TYPE_LL:
-                        if (client->mac_addr_len == 0)
-                                return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LL, MAC address is not set.");
-
-                        r = dhcp_identifier_set_duid_ll(&client->client_id.ns.duid, client->mac_addr, client->mac_addr_len, client->arp_type, &len);
-                        if (r < 0)
-                                return log_dhcp_client_errno(client, r, "Failed to set DUID-LL: %m");
-                        break;
-                case DUID_TYPE_UUID:
-                        r = dhcp_identifier_set_duid_uuid(&client->client_id.ns.duid, &len);
-                        if (r < 0)
-                                return log_dhcp_client_errno(client, r, "Failed to set DUID-UUID: %m");
-                        break;
-                default:
-                        return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "Invalid DUID type");
-                }
+        } else {
+                r = dhcp_identifier_set_duid(duid_type, &client->hw_addr,
+                                             client->arp_type, llt_time, client->test_mode,
+                                             &client->client_id.ns.duid, &len);
+                if (r == -EOPNOTSUPP)
+                        return log_dhcp_client_errno(client, r,
+                                                     "Failed to set %s. MAC address is not set or "
+                                                     "interface type is not supported.",
+                                                     duid_type_to_string(duid_type));
+                if (r < 0)
+                        return log_dhcp_client_errno(client, r, "Failed to set %s: %m",
+                                                     duid_type_to_string(duid_type));
+        }
 
         client->client_id_len = sizeof(client->client_id.type) + len +
                                 (iaid_append ? sizeof(client->client_id.ns.iaid) : 0);
 
-        if (!IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED)) {
-                log_dhcp_client(client, "Configured %sDUID, restarting.", iaid_append ? "IAID+" : "");
-                client_stop(client, SD_DHCP_CLIENT_EVENT_STOP);
-                r = sd_dhcp_client_start(client);
-                if (r < 0)
-                        return log_dhcp_client_errno(client, r, "Failed to restart DHCPv4 client: %m");
-        }
-
         return 0;
 }
 
@@ -570,6 +501,7 @@
                 const char *hostname) {
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
         /* Make sure hostnames qualify as DNS and as Linux hostnames */
         if (hostname &&
@@ -584,6 +516,7 @@
                 const char *vci) {
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
         return free_and_strdup(&client->vendor_class_identifier, vci);
 }
@@ -593,6 +526,7 @@
                 const char *mudurl) {
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
         assert_return(mudurl, -EINVAL);
         assert_return(strlen(mudurl) <= 255, -EINVAL);
         assert_return(http_url_is_valid(mudurl), -EINVAL);
@@ -604,10 +538,10 @@
                 sd_dhcp_client *client,
                 char * const *user_class) {
 
-        char * const *p;
         char **s = NULL;
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
         assert_return(!strv_isempty(user_class), -EINVAL);
 
         STRV_FOREACH(p, user_class) {
@@ -629,6 +563,7 @@
                 uint16_t port) {
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
         client->port = port;
 
@@ -637,7 +572,10 @@
 
 int sd_dhcp_client_set_mtu(sd_dhcp_client *client, uint32_t mtu) {
         assert_return(client, -EINVAL);
-        assert_return(mtu >= DHCP_DEFAULT_MIN_SIZE, -ERANGE);
+        assert_return(mtu >= DHCP_MIN_PACKET_SIZE, -ERANGE);
+
+        /* MTU may be changed by the acquired lease. Hence, we cannot require that the client is stopped here.
+         * Please do not add assertion for !sd_dhcp_client_is_running(client) here. */
 
         client->mtu = mtu;
 
@@ -646,6 +584,7 @@
 
 int sd_dhcp_client_set_max_attempts(sd_dhcp_client *client, uint64_t max_attempts) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
         client->max_attempts = max_attempts;
 
@@ -656,6 +595,7 @@
         int r;
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
         assert_return(v, -EINVAL);
 
         r = ordered_hashmap_ensure_put(&client->extra_options, &dhcp_option_hash_ops, UINT_TO_PTR(v->option), v);
@@ -670,6 +610,7 @@
         int r;
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
         assert_return(v, -EINVAL);
 
         r = ordered_hashmap_ensure_allocated(&client->vendor_options, &dhcp_option_hash_ops);
@@ -699,14 +640,26 @@
 
 int sd_dhcp_client_set_service_type(sd_dhcp_client *client, int type) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
         client->ip_service_type = type;
 
         return 0;
 }
 
+int sd_dhcp_client_set_socket_priority(sd_dhcp_client *client, int socket_priority) {
+        assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
+
+        client->socket_priority_set = true;
+        client->socket_priority = socket_priority;
+
+        return 0;
+}
+
 int sd_dhcp_client_set_fallback_lease_lifetime(sd_dhcp_client *client, uint32_t fallback_lease_lifetime) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
         assert_return(fallback_lease_lifetime > 0, -EINVAL);
 
         client->fallback_lease_lifetime = fallback_lease_lifetime;
@@ -804,7 +757,6 @@
 
         _cleanup_free_ DHCPPacket *packet = NULL;
         size_t optlen, optoffset, size;
-        be16_t max_size;
         usec_t time_now;
         uint16_t secs;
         int r;
@@ -824,13 +776,14 @@
                 return -ENOMEM;
 
         r = dhcp_message_init(&packet->dhcp, BOOTREQUEST, client->xid, type,
-                              client->arp_type, optlen, &optoffset);
+                              client->arp_type, client->hw_addr.length, client->hw_addr.bytes,
+                              optlen, &optoffset);
         if (r < 0)
                 return r;
 
         /* Although 'secs' field is a SHOULD in RFC 2131, certain DHCP servers
            refuse to issue an DHCP lease if 'secs' is set to zero */
-        r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+        r = sd_event_now(client->event, CLOCK_BOOTTIME, &time_now);
         if (r < 0)
                 return r;
         assert(time_now >= client->start_time);
@@ -840,7 +793,7 @@
         secs = ((time_now - client->start_time) / USEC_PER_SEC) ? : 1;
         packet->dhcp.secs = htobe16(secs);
 
-        /* RFC2132 section 4.1
+        /* RFC2131 section 4.1
            A client that cannot receive unicast IP datagrams until its protocol
            software has been configured with an IP address SHOULD set the
            BROADCAST bit in the 'flags' field to 1 in any DHCPDISCOVER or
@@ -854,29 +807,19 @@
         if (client->request_broadcast || client->arp_type != ARPHRD_ETHER)
                 packet->dhcp.flags = htobe16(0x8000);
 
-        /* RFC2132 section 4.1.1:
-           The client MUST include its hardware address in the ’chaddr’ field, if
-           necessary for delivery of DHCP reply messages.  Non-Ethernet
-           interfaces will leave 'chaddr' empty and use the client identifier
-           instead (eg, RFC 4390 section 2.1).
-         */
-        if (client->arp_type == ARPHRD_ETHER)
-                memcpy(&packet->dhcp.chaddr, &client->mac_addr, ETH_ALEN);
-
         /* If no client identifier exists, construct an RFC 4361-compliant one */
         if (client->client_id_len == 0) {
                 size_t duid_len;
 
                 client->client_id.type = 255;
 
-                r = dhcp_identifier_set_iaid(client->ifindex, client->mac_addr, client->mac_addr_len,
+                r = dhcp_identifier_set_iaid(client->dev, &client->hw_addr,
                                              /* legacy_unstable_byteorder = */ true,
-                                             /* use_mac = */ client->test_mode,
                                              &client->client_id.ns.iaid);
                 if (r < 0)
                         return r;
 
-                r = dhcp_identifier_set_duid_en(&client->client_id.ns.duid, &duid_len);
+                r = dhcp_identifier_set_duid_en(client->test_mode, &client->client_id.ns.duid, &duid_len);
                 if (r < 0)
                         return r;
 
@@ -955,9 +898,9 @@
          */
         /* RFC7844 section 3:
            SHOULD NOT contain any other option. */
-        if (!client->anonymize && type != DHCP_RELEASE) {
-                max_size = htobe16(size);
-                r = dhcp_option_append(&packet->dhcp, client->mtu, &optoffset, 0,
+        if (!client->anonymize && IN_SET(type, DHCP_DISCOVER, DHCP_REQUEST)) {
+                be16_t max_size = htobe16(MIN(client->mtu - DHCP_IP_UDP_SIZE, (uint32_t) UINT16_MAX));
+                r = dhcp_option_append(&packet->dhcp, optlen, &optoffset, 0,
                                        SD_DHCP_OPTION_MAXIMUM_MESSAGE_SIZE,
                                        2, &max_size);
                 if (r < 0)
@@ -1254,17 +1197,16 @@
                 uint64_t usec,
                 void *userdata) {
 
-        sd_dhcp_client *client = userdata;
+        sd_dhcp_client *client = ASSERT_PTR(userdata);
         DHCP_CLIENT_DONT_DESTROY(client);
         usec_t next_timeout;
         uint64_t time_now;
         int r;
 
         assert(s);
-        assert(client);
         assert(client->event);
 
-        r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+        r = sd_event_now(client->event, CLOCK_BOOTTIME, &time_now);
         if (r < 0)
                 goto error;
 
@@ -1308,11 +1250,11 @@
                 goto error;
 
         default:
-                assert_not_reached("Unhandled choice");
+                assert_not_reached();
         }
 
         r = event_reset_time(client->event, &client->timeout_resend,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              next_timeout, 10 * USEC_PER_MSEC,
                              client_timeout_resend, client,
                              client->event_priority, "dhcp4-resend-timer", true);
@@ -1412,12 +1354,12 @@
         assert(client->event);
 
         if (client->start_delay > 0) {
-                assert_se(sd_event_now(client->event, clock_boottime_or_monotonic(), &usec) >= 0);
+                assert_se(sd_event_now(client->event, CLOCK_BOOTTIME, &usec) >= 0);
                 usec += client->start_delay;
         }
 
         r = event_reset_time(client->event, &client->timeout_resend,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              usec, 0,
                              client_timeout_resend, client,
                              client->event_priority, "dhcp4-resend-timer", true);
@@ -1448,9 +1390,9 @@
         client->xid = random_u32();
 
         r = dhcp_network_bind_raw_socket(client->ifindex, &client->link, client->xid,
-                                         client->mac_addr, client->mac_addr_len,
-                                         client->bcast_addr, client->bcast_addr_len,
-                                         client->arp_type, client->port);
+                                         &client->hw_addr, &client->bcast_addr,
+                                         client->arp_type, client->port,
+                                         client->socket_priority_set, client->socket_priority);
         if (r < 0) {
                 client_stop(client, r);
                 return r;
@@ -1458,7 +1400,7 @@
         client->fd = r;
 
         if (IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_INIT_REBOOT))
-                client->start_time = now(clock_boottime_or_monotonic());
+                client->start_time = now(CLOCK_BOOTTIME);
 
         return client_initialize_events(client, client_receive_message_raw);
 }
@@ -1486,12 +1428,10 @@
 }
 
 static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_dhcp_client *client = userdata;
+        sd_dhcp_client *client = ASSERT_PTR(userdata);
         DHCP_CLIENT_DONT_DESTROY(client);
         int r;
 
-        assert(client);
-
         client->receive_message = sd_event_source_disable_unref(client->receive_message);
         client->fd = safe_close(client->fd);
 
@@ -1499,9 +1439,9 @@
         client->attempt = 0;
 
         r = dhcp_network_bind_raw_socket(client->ifindex, &client->link, client->xid,
-                                         client->mac_addr, client->mac_addr_len,
-                                         client->bcast_addr, client->bcast_addr_len,
-                                         client->arp_type, client->port);
+                                         &client->hw_addr, &client->bcast_addr,
+                                         client->arp_type, client->port,
+                                         client->socket_priority_set, client->socket_priority);
         if (r < 0) {
                 client_stop(client, r);
                 return 0;
@@ -1686,7 +1626,6 @@
 
 static int client_set_lease_timeouts(sd_dhcp_client *client) {
         usec_t time_now;
-        char time_string[FORMAT_TIMESPAN_MAX];
         int r;
 
         assert(client);
@@ -1703,7 +1642,7 @@
                 return 0;
         }
 
-        r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+        r = sd_event_now(client->event, CLOCK_BOOTTIME, &time_now);
         if (r < 0)
                 return r;
         assert(client->request_sent <= time_now);
@@ -1736,7 +1675,7 @@
 
         /* arm lifetime timeout */
         r = event_reset_time(client->event, &client->timeout_expire,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              client->expire_time, 10 * USEC_PER_MSEC,
                              client_timeout_expire, client,
                              client->event_priority, "dhcp4-lifetime", true);
@@ -1748,11 +1687,11 @@
                 return 0;
 
         log_dhcp_client(client, "lease expires in %s",
-                        format_timespan(time_string, FORMAT_TIMESPAN_MAX, client->expire_time - time_now, USEC_PER_SEC));
+                        FORMAT_TIMESPAN(client->expire_time - time_now, USEC_PER_SEC));
 
         /* arm T2 timeout */
         r = event_reset_time(client->event, &client->timeout_t2,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              client->t2_time, 10 * USEC_PER_MSEC,
                              client_timeout_t2, client,
                              client->event_priority, "dhcp4-t2-timeout", true);
@@ -1764,11 +1703,11 @@
                 return 0;
 
         log_dhcp_client(client, "T2 expires in %s",
-                        format_timespan(time_string, FORMAT_TIMESPAN_MAX, client->t2_time - time_now, USEC_PER_SEC));
+                        FORMAT_TIMESPAN(client->t2_time - time_now, USEC_PER_SEC));
 
         /* arm T1 timeout */
         r = event_reset_time(client->event, &client->timeout_t1,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              client->t1_time, 10 * USEC_PER_MSEC,
                              client_timeout_t1, client,
                              client->event_priority, "dhcp4-t1-timer", true);
@@ -1777,14 +1716,13 @@
 
         if (client->t1_time > time_now)
                 log_dhcp_client(client, "T1 expires in %s",
-                                format_timespan(time_string, FORMAT_TIMESPAN_MAX, client->t1_time - time_now, USEC_PER_SEC));
+                                FORMAT_TIMESPAN(client->t1_time - time_now, USEC_PER_SEC));
 
         return 0;
 }
 
 static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, int len) {
         DHCP_CLIENT_DONT_DESTROY(client);
-        char time_string[FORMAT_TIMESPAN_MAX];
         int r, notify_event;
 
         assert(client);
@@ -1804,7 +1742,7 @@
                 client->attempt = 0;
 
                 r = event_reset_time(client->event, &client->timeout_resend,
-                                     clock_boottime_or_monotonic(),
+                                     CLOCK_BOOTTIME,
                                      0, 0,
                                      client_timeout_resend, client,
                                      client->event_priority, "dhcp4-resend-timer", true);
@@ -1830,8 +1768,7 @@
                         if (r < 0)
                                 goto error;
 
-                        log_dhcp_client(client, "REBOOT in %s", format_timespan(time_string, FORMAT_TIMESPAN_MAX,
-                                                                                client->start_delay, USEC_PER_SEC));
+                        log_dhcp_client(client, "REBOOT in %s", FORMAT_TIMESPAN(client->start_delay, USEC_PER_SEC));
 
                         client->start_delay = CLAMP(client->start_delay * 2,
                                                     RESTART_AFTER_NAK_MIN_USEC, RESTART_AFTER_NAK_MAX_USEC);
@@ -1899,7 +1836,7 @@
                 r = -EINVAL;
                 goto error;
         default:
-                assert_not_reached("invalid state");
+                assert_not_reached();
         }
 
 error:
@@ -1915,23 +1852,22 @@
                 uint32_t revents,
                 void *userdata) {
 
-        sd_dhcp_client *client = userdata;
+        sd_dhcp_client *client = ASSERT_PTR(userdata);
         _cleanup_free_ DHCPMessage *message = NULL;
         const uint8_t *expected_chaddr = NULL;
         uint8_t expected_hlen = 0;
         ssize_t len, buflen;
 
         assert(s);
-        assert(client);
 
         buflen = next_datagram_size_fd(fd);
-        if (buflen == -ENETDOWN)
-                /* the link is down. Don't return an error or the I/O event
-                   source will be disconnected and we won't be able to receive
-                   packets again when the link comes back. */
+        if (buflen < 0) {
+                if (ERRNO_IS_TRANSIENT(buflen) || ERRNO_IS_DISCONNECT(buflen))
+                        return 0;
+
+                log_dhcp_client_errno(client, buflen, "Failed to determine datagram size to read, ignoring: %m");
                 return 0;
-        if (buflen < 0)
-                return buflen;
+        }
 
         message = malloc0(buflen);
         if (!message)
@@ -1939,12 +1875,11 @@
 
         len = recv(fd, message, buflen, 0);
         if (len < 0) {
-                /* see comment above for why we shouldn't error out on ENETDOWN. */
-                if (IN_SET(errno, EAGAIN, EINTR, ENETDOWN))
+                if (ERRNO_IS_TRANSIENT(errno) || ERRNO_IS_DISCONNECT(errno))
                         return 0;
 
-                return log_dhcp_client_errno(client, errno,
-                                             "Could not receive message from UDP socket: %m");
+                log_dhcp_client_errno(client, errno, "Could not receive message from UDP socket, ignoring: %m");
+                return 0;
         }
         if ((size_t) len < sizeof(DHCPMessage)) {
                 log_dhcp_client(client, "Too small to be a DHCP message: ignoring");
@@ -1968,7 +1903,7 @@
 
         if (client->arp_type == ARPHRD_ETHER) {
                 expected_hlen = ETH_ALEN;
-                expected_chaddr = &client->mac_addr[0];
+                expected_chaddr = client->hw_addr.bytes;
         }
 
         if (message->hlen != expected_hlen) {
@@ -1990,7 +1925,9 @@
                 return 0;
         }
 
-        return client_handle_message(client, message, len);
+        log_dhcp_client(client, "Received message from UDP socket, processing.");
+        (void) client_handle_message(client, message, len);
+        return 0;
 }
 
 static int client_receive_message_raw(
@@ -1999,7 +1936,7 @@
                 uint32_t revents,
                 void *userdata) {
 
-        sd_dhcp_client *client = userdata;
+        sd_dhcp_client *client = ASSERT_PTR(userdata);
         _cleanup_free_ DHCPPacket *packet = NULL;
         CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct tpacket_auxdata))) control;
         struct iovec iov = {};
@@ -2015,13 +1952,15 @@
         int r;
 
         assert(s);
-        assert(client);
 
         buflen = next_datagram_size_fd(fd);
-        if (buflen == -ENETDOWN)
+        if (buflen < 0) {
+                if (ERRNO_IS_TRANSIENT(buflen) || ERRNO_IS_DISCONNECT(buflen))
+                        return 0;
+
+                log_dhcp_client_errno(client, buflen, "Failed to determine datagram size to read, ignoring: %m");
                 return 0;
-        if (buflen < 0)
-                return buflen;
+        }
 
         packet = malloc0(buflen);
         if (!packet)
@@ -2030,12 +1969,13 @@
         iov = IOVEC_MAKE(packet, buflen);
 
         len = recvmsg_safe(fd, &msg, 0);
-        if (IN_SET(len, -EAGAIN, -EINTR, -ENETDOWN))
-                return 0;
-        if (len < 0)
-                return log_dhcp_client_errno(client, len,
-                                             "Could not receive message from raw socket: %m");
+        if (len < 0) {
+                if (ERRNO_IS_TRANSIENT(len) || ERRNO_IS_DISCONNECT(len))
+                        return 0;
 
+                log_dhcp_client_errno(client, len, "Could not receive message from raw socket, ignoring: %m");
+                return 0;
+        }
         if ((size_t) len < sizeof(DHCPPacket))
                 return 0;
 
@@ -2051,11 +1991,14 @@
 
         len -= DHCP_IP_UDP_SIZE;
 
-        return client_handle_message(client, &packet->dhcp, len);
+        log_dhcp_client(client, "Received message from RAW socket, processing.");
+        (void) client_handle_message(client, &packet->dhcp, len);
+        return 0;
 }
 
 int sd_dhcp_client_send_renew(sd_dhcp_client *client) {
         assert_return(client, -EINVAL);
+        assert_return(sd_dhcp_client_is_running(client), -ESTALE);
         assert_return(client->fd >= 0, -EINVAL);
 
         if (!client->lease)
@@ -2103,7 +2046,7 @@
 
 int sd_dhcp_client_send_release(sd_dhcp_client *client) {
         assert_return(client, -EINVAL);
-        assert_return(client->state != DHCP_STATE_STOPPED, -ESTALE);
+        assert_return(sd_dhcp_client_is_running(client), -ESTALE);
         assert_return(client->lease, -EUNATCH);
 
         _cleanup_free_ DHCPPacket *release = NULL;
@@ -2116,7 +2059,7 @@
 
         /* Fill up release IP and MAC */
         release->dhcp.ciaddr = client->lease->address;
-        memcpy(&release->dhcp.chaddr, &client->mac_addr, client->mac_addr_len);
+        memcpy(&release->dhcp.chaddr, client->hw_addr.bytes, client->hw_addr.length);
 
         r = dhcp_option_append(&release->dhcp, optlen, &optoffset, 0,
                                SD_DHCP_OPTION_END, 0, NULL);
@@ -2138,7 +2081,7 @@
 
 int sd_dhcp_client_send_decline(sd_dhcp_client *client) {
         assert_return(client, -EINVAL);
-        assert_return(client->state != DHCP_STATE_STOPPED, -ESTALE);
+        assert_return(sd_dhcp_client_is_running(client), -ESTALE);
         assert_return(client->lease, -EUNATCH);
 
         _cleanup_free_ DHCPPacket *release = NULL;
@@ -2150,7 +2093,7 @@
                 return r;
 
         release->dhcp.ciaddr = client->lease->address;
-        memcpy(&release->dhcp.chaddr, &client->mac_addr, client->mac_addr_len);
+        memcpy(&release->dhcp.chaddr, client->hw_addr.bytes, client->hw_addr.length);
 
         r = dhcp_option_append(&release->dhcp, optlen, &optoffset, 0,
                                SD_DHCP_OPTION_END, 0, NULL);
@@ -2195,6 +2138,7 @@
 
         assert_return(client, -EINVAL);
         assert_return(!client->event, -EBUSY);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
         if (event)
                 client->event = sd_event_ref(event);
@@ -2211,6 +2155,7 @@
 
 int sd_dhcp_client_detach_event(sd_dhcp_client *client) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
 
         client->event = sd_event_unref(client->event);
 
@@ -2223,6 +2168,12 @@
         return client->event;
 }
 
+int sd_dhcp_client_attach_device(sd_dhcp_client *client, sd_device *dev) {
+        assert_return(client, -EINVAL);
+
+        return device_unref_and_replace(client->dev, dev);
+}
+
 static sd_dhcp_client *dhcp_client_free(sd_dhcp_client *client) {
         if (!client)
                 return NULL;
@@ -2238,6 +2189,8 @@
 
         sd_dhcp_client_detach_event(client);
 
+        sd_device_unref(client->dev);
+
         set_free(client->req_opts);
         free(client->hostname);
         free(client->vendor_class_identifier);
@@ -2266,8 +2219,8 @@
                 .n_ref = 1,
                 .state = DHCP_STATE_INIT,
                 .ifindex = -1,
-                .fd = -1,
-                .mtu = DHCP_DEFAULT_MIN_SIZE,
+                .fd = -EBADF,
+                .mtu = DHCP_MIN_PACKET_SIZE,
                 .port = DHCP_PORT_CLIENT,
                 .anonymize = !!anonymize,
                 .max_attempts = UINT64_MAX,
diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c
index 421ca6f..02c6a6e 100644
--- a/src/libsystemd-network/sd-dhcp-lease.c
+++ b/src/libsystemd-network/sd-dhcp-lease.c
@@ -105,12 +105,13 @@
         assert_return(lease, -EINVAL);
         assert_return(what >= 0, -EINVAL);
         assert_return(what < _SD_DHCP_LEASE_SERVER_TYPE_MAX, -EINVAL);
-        assert_return(addr, -EINVAL);
 
         if (lease->servers[what].size <= 0)
                 return -ENODATA;
 
-        *addr = lease->servers[what].addr;
+        if (addr)
+                *addr = lease->servers[what].addr;
+
         return (int) lease->servers[what].size;
 }
 
@@ -214,25 +215,38 @@
  * The returned routes array must be freed by the caller.
  * Route objects have the same lifetime of the lease and must not be freed.
  */
-int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, sd_dhcp_route ***routes) {
-        sd_dhcp_route **ret;
-        unsigned i;
+static int dhcp_lease_get_routes(sd_dhcp_route *routes, size_t n_routes, sd_dhcp_route ***ret) {
+        assert(routes || n_routes == 0);
 
-        assert_return(lease, -EINVAL);
-        assert_return(routes, -EINVAL);
-
-        if (lease->static_route_size <= 0)
+        if (n_routes <= 0)
                 return -ENODATA;
 
-        ret = new(sd_dhcp_route *, lease->static_route_size);
-        if (!ret)
-                return -ENOMEM;
+        if (ret) {
+                sd_dhcp_route **buf;
 
-        for (i = 0; i < lease->static_route_size; i++)
-                ret[i] = &lease->static_route[i];
+                buf = new(sd_dhcp_route*, n_routes);
+                if (!buf)
+                        return -ENOMEM;
 
-        *routes = ret;
-        return (int) lease->static_route_size;
+                for (size_t i = 0; i < n_routes; i++)
+                        buf[i] = &routes[i];
+
+                *ret = buf;
+        }
+
+        return (int) n_routes;
+}
+
+int sd_dhcp_lease_get_static_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret) {
+        assert_return(lease, -EINVAL);
+
+        return dhcp_lease_get_routes(lease->static_routes, lease->n_static_routes, ret);
+}
+
+int sd_dhcp_lease_get_classless_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret) {
+        assert_return(lease, -EINVAL);
+
+        return dhcp_lease_get_routes(lease->classless_routes, lease->n_classless_routes, ret);
 }
 
 int sd_dhcp_lease_get_search_domains(sd_dhcp_lease *lease, char ***domains) {
@@ -250,6 +264,33 @@
         return -ENODATA;
 }
 
+int sd_dhcp_lease_get_6rd(
+                sd_dhcp_lease *lease,
+                uint8_t *ret_ipv4masklen,
+                uint8_t *ret_prefixlen,
+                struct in6_addr *ret_prefix,
+                const struct in_addr **ret_br_addresses,
+                size_t *ret_n_br_addresses) {
+
+        assert_return(lease, -EINVAL);
+
+        if (lease->sixrd_n_br_addresses <= 0)
+                return -ENODATA;
+
+        if (ret_ipv4masklen)
+                *ret_ipv4masklen = lease->sixrd_ipv4masklen;
+        if (ret_prefixlen)
+                *ret_prefixlen = lease->sixrd_prefixlen;
+        if (ret_prefix)
+                *ret_prefix = lease->sixrd_prefix;
+        if (ret_br_addresses)
+                *ret_br_addresses = lease->sixrd_br_addresses;
+        if (ret_n_br_addresses)
+                *ret_n_br_addresses = lease->sixrd_n_br_addresses;
+
+        return 0;
+}
+
 int sd_dhcp_lease_get_vendor_specific(sd_dhcp_lease *lease, const void **data, size_t *data_len) {
         assert_return(lease, -EINVAL);
         assert_return(data, -EINVAL);
@@ -284,10 +325,12 @@
         for (sd_dhcp_lease_server_type_t i = 0; i < _SD_DHCP_LEASE_SERVER_TYPE_MAX; i++)
                 free(lease->servers[i].addr);
 
-        free(lease->static_route);
+        free(lease->static_routes);
+        free(lease->classless_routes);
         free(lease->client_id);
         free(lease->vendor_specific);
         strv_free(lease->search_domains);
+        free(lease->sixrd_br_addresses);
         return mfree(lease);
 }
 
@@ -333,6 +376,8 @@
 }
 
 static int lease_parse_string(const uint8_t *option, size_t len, char **ret) {
+        int r;
+
         assert(option);
         assert(ret);
 
@@ -345,12 +390,9 @@
                  * One trailing NUL byte is OK, we don't mind. See:
                  * https://github.com/systemd/systemd/issues/1337
                  */
-                if (memchr(option, 0, len - 1))
-                        return -EINVAL;
-
-                string = memdup_suffix0((const char *) option, len);
-                if (!string)
-                        return -ENOMEM;
+                r = make_cstring((const char*) option, len, MAKE_CSTRING_ALLOW_TRAILING_NUL, &string);
+                if (r < 0)
+                        return r;
 
                 free_and_replace(*ret, string);
         }
@@ -438,106 +480,153 @@
         return lease_parse_in_addrs(option + 1, len - 1, ret, n_ret);
 }
 
-static int lease_parse_routes(
-                const uint8_t *option, size_t len,
-                struct sd_dhcp_route **routes, size_t *routes_size) {
+static int lease_parse_static_routes(sd_dhcp_lease *lease, const uint8_t *option, size_t len) {
+        int r;
 
-        struct in_addr addr;
-
+        assert(lease);
         assert(option || len <= 0);
-        assert(routes);
-        assert(routes_size);
-
-        if (len <= 0)
-                return 0;
 
         if (len % 8 != 0)
                 return -EINVAL;
 
-        if (!GREEDY_REALLOC(*routes, *routes_size + (len / 8)))
-                return -ENOMEM;
-
         while (len >= 8) {
-                struct sd_dhcp_route *route = *routes + *routes_size;
-                int r;
+                struct in_addr dst, gw;
+                uint8_t prefixlen;
 
-                route->option = SD_DHCP_OPTION_STATIC_ROUTE;
-                r = in4_addr_default_prefixlen((struct in_addr*) option, &route->dst_prefixlen);
-                if (r < 0)
-                        return -EINVAL;
-
-                assert_se(lease_parse_be32(option, 4, &addr.s_addr) >= 0);
-                route->dst_addr = inet_makeaddr(inet_netof(addr), 0);
+                assert_se(lease_parse_be32(option, 4, &dst.s_addr) >= 0);
                 option += 4;
 
-                assert_se(lease_parse_be32(option, 4, &route->gw_addr.s_addr) >= 0);
+                assert_se(lease_parse_be32(option, 4, &gw.s_addr) >= 0);
                 option += 4;
 
                 len -= 8;
-                (*routes_size)++;
+
+                r = in4_addr_default_prefixlen(&dst, &prefixlen);
+                if (r < 0) {
+                        log_debug("sd-dhcp-lease: cannot determine class of received static route, ignoring.");
+                        continue;
+                }
+
+                (void) in4_addr_mask(&dst, prefixlen);
+
+                if (!GREEDY_REALLOC(lease->static_routes, lease->n_static_routes + 1))
+                        return -ENOMEM;
+
+                lease->static_routes[lease->n_static_routes++] = (struct sd_dhcp_route) {
+                        .dst_addr = dst,
+                        .gw_addr = gw,
+                        .dst_prefixlen = prefixlen,
+                };
         }
 
         return 0;
 }
 
 /* parses RFC3442 Classless Static Route Option */
-static int lease_parse_classless_routes(
-                const uint8_t *option, size_t len,
-                struct sd_dhcp_route **routes, size_t *routes_size) {
-
+static int lease_parse_classless_routes(sd_dhcp_lease *lease, const uint8_t *option, size_t len) {
+        assert(lease);
         assert(option || len <= 0);
-        assert(routes);
-        assert(routes_size);
 
-        if (len <= 0)
-                return 0;
-
-        /* option format: (subnet-mask-width significant-subnet-octets gateway-ip)*  */
+        /* option format: (subnet-mask-width significant-subnet-octets gateway-ip) */
 
         while (len > 0) {
-                uint8_t dst_octets;
-                struct sd_dhcp_route *route;
+                uint8_t prefixlen, dst_octets;
+                struct in_addr dst = {}, gw;
 
-                if (!GREEDY_REALLOC(*routes, *routes_size + 1))
-                        return -ENOMEM;
-
-                route = *routes + *routes_size;
-                route->option = SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE;
-
-                dst_octets = (*option == 0 ? 0 : ((*option - 1) / 8) + 1);
-                route->dst_prefixlen = *option;
+                prefixlen = *option;
                 option++;
                 len--;
 
+                dst_octets = DIV_ROUND_UP(prefixlen, 8);
+
                 /* can't have more than 4 octets in IPv4 */
                 if (dst_octets > 4 || len < dst_octets)
                         return -EINVAL;
 
-                route->dst_addr.s_addr = 0;
-                memcpy(&route->dst_addr.s_addr, option, dst_octets);
+                memcpy(&dst, option, dst_octets);
                 option += dst_octets;
                 len -= dst_octets;
 
                 if (len < 4)
                         return -EINVAL;
 
-                assert_se(lease_parse_be32(option, 4, &route->gw_addr.s_addr) >= 0);
+                assert_se(lease_parse_be32(option, 4, &gw.s_addr) >= 0);
                 option += 4;
                 len -= 4;
 
-                (*routes_size)++;
+                if (!GREEDY_REALLOC(lease->classless_routes, lease->n_classless_routes + 1))
+                        return -ENOMEM;
+
+                lease->classless_routes[lease->n_classless_routes++] = (struct sd_dhcp_route) {
+                        .dst_addr = dst,
+                        .gw_addr = gw,
+                        .dst_prefixlen = prefixlen,
+                };
         }
 
         return 0;
 }
 
-int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void *userdata) {
-        sd_dhcp_lease *lease = userdata;
-        int r;
+static int lease_parse_6rd(sd_dhcp_lease *lease, const uint8_t *option, size_t len) {
+        uint8_t ipv4masklen, prefixlen;
+        struct in6_addr prefix;
+        _cleanup_free_ struct in_addr *br_addresses = NULL;
+        size_t n_br_addresses;
 
         assert(lease);
+        assert(option);
 
-        switch(code) {
+        /* See RFC 5969 Section 7.1.1 */
+
+        if (lease->sixrd_n_br_addresses > 0)
+                /* Multiple 6rd option?? */
+                return -EINVAL;
+
+        /* option-length: The length of the DHCP option in octets (22 octets with one BR IPv4 address). */
+        if (len < 2 + sizeof(struct in6_addr) + sizeof(struct in_addr) ||
+            (len - 2 - sizeof(struct in6_addr)) % sizeof(struct in_addr) != 0)
+                return -EINVAL;
+
+        /* IPv4MaskLen: The number of high-order bits that are identical across all CE IPv4 addresses
+         *              within a given 6rd domain. This may be any value between 0 and 32. Any value
+         *              greater than 32 is invalid. */
+        ipv4masklen = option[0];
+        if (ipv4masklen > 32)
+                return -EINVAL;
+
+        /* 6rdPrefixLen: The IPv6 prefix length of the SP's 6rd IPv6 prefix in number of bits. For the
+         *               purpose of bounds checking by DHCP option processing, the sum of
+         *               (32 - IPv4MaskLen) + 6rdPrefixLen MUST be less than or equal to 128. */
+        prefixlen = option[1];
+        if (32 - ipv4masklen + prefixlen > 128)
+                return -EINVAL;
+
+        /* 6rdPrefix: The service provider's 6rd IPv6 prefix represented as a 16-octet IPv6 address.
+         *            The bits in the prefix after the 6rdPrefixlen number of bits are reserved and
+         *            MUST be initialized to zero by the sender and ignored by the receiver. */
+        memcpy(&prefix, option + 2, sizeof(struct in6_addr));
+        (void) in6_addr_mask(&prefix, prefixlen);
+
+        /* 6rdBRIPv4Address: One or more IPv4 addresses of the 6rd Border Relays for a given 6rd domain. */
+        n_br_addresses = (len - 2 - sizeof(struct in6_addr)) / sizeof(struct in_addr);
+        br_addresses = newdup(struct in_addr, option + 2 + sizeof(struct in6_addr), n_br_addresses);
+        if (!br_addresses)
+                return -ENOMEM;
+
+        lease->sixrd_ipv4masklen = ipv4masklen;
+        lease->sixrd_prefixlen = prefixlen;
+        lease->sixrd_prefix = prefix;
+        lease->sixrd_br_addresses = TAKE_PTR(br_addresses);
+        lease->sixrd_n_br_addresses = n_br_addresses;
+
+        return 0;
+}
+
+int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void *userdata) {
+        sd_dhcp_lease *lease = ASSERT_PTR(userdata);
+        int r;
+
+        switch (code) {
 
         case SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME:
                 r = lease_parse_u32(option, len, &lease->lifetime, 1);
@@ -612,18 +701,18 @@
                 break;
 
         case SD_DHCP_OPTION_STATIC_ROUTE:
-                r = lease_parse_routes(option, len, &lease->static_route, &lease->static_route_size);
+                r = lease_parse_static_routes(lease, option, len);
                 if (r < 0)
                         log_debug_errno(r, "Failed to parse static routes, ignoring: %m");
                 break;
 
-        case SD_DHCP_OPTION_INTERFACE_MTU:
+        case SD_DHCP_OPTION_MTU_INTERFACE:
                 r = lease_parse_u16(option, len, &lease->mtu, 68);
                 if (r < 0)
                         log_debug_errno(r, "Failed to parse MTU, ignoring: %m");
-                if (lease->mtu < DHCP_DEFAULT_MIN_SIZE) {
-                        log_debug("MTU value of %" PRIu16 " too small. Using default MTU value of %d instead.", lease->mtu, DHCP_DEFAULT_MIN_SIZE);
-                        lease->mtu = DHCP_DEFAULT_MIN_SIZE;
+                if (lease->mtu < DHCP_MIN_PACKET_SIZE) {
+                        log_debug("MTU value of %" PRIu16 " too small. Using default MTU value of %d instead.", lease->mtu, DHCP_MIN_PACKET_SIZE);
+                        lease->mtu = DHCP_MIN_PACKET_SIZE;
                 }
 
                 break;
@@ -637,7 +726,7 @@
 
                 break;
 
-        case SD_DHCP_OPTION_DOMAIN_SEARCH_LIST:
+        case SD_DHCP_OPTION_DOMAIN_SEARCH:
                 r = dhcp_lease_parse_search_domains(option, len, &lease->search_domains);
                 if (r < 0)
                         log_debug_errno(r, "Failed to parse Domain Search List, ignoring: %m");
@@ -658,28 +747,25 @@
                         log_debug_errno(r, "Failed to parse root path, ignoring: %m");
                 break;
 
-        case SD_DHCP_OPTION_RENEWAL_T1_TIME:
+        case SD_DHCP_OPTION_RENEWAL_TIME:
                 r = lease_parse_u32(option, len, &lease->t1, 1);
                 if (r < 0)
                         log_debug_errno(r, "Failed to parse T1 time, ignoring: %m");
                 break;
 
-        case SD_DHCP_OPTION_REBINDING_T2_TIME:
+        case SD_DHCP_OPTION_REBINDING_TIME:
                 r = lease_parse_u32(option, len, &lease->t2, 1);
                 if (r < 0)
                         log_debug_errno(r, "Failed to parse T2 time, ignoring: %m");
                 break;
 
         case SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE:
-                r = lease_parse_classless_routes(
-                                option, len,
-                                &lease->static_route,
-                                &lease->static_route_size);
+                r = lease_parse_classless_routes(lease, option, len);
                 if (r < 0)
                         log_debug_errno(r, "Failed to parse classless routes, ignoring: %m");
                 break;
 
-        case SD_DHCP_OPTION_NEW_TZDB_TIMEZONE: {
+        case SD_DHCP_OPTION_TZDB_TIMEZONE: {
                 _cleanup_free_ char *tz = NULL;
 
                 r = lease_parse_string(option, len, &tz);
@@ -716,6 +802,12 @@
                 lease->vendor_specific_len = len;
                 break;
 
+        case SD_DHCP_OPTION_6RD:
+                r = lease_parse_6rd(lease, option, len);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to parse 6rd option, ignoring: %m");
+                break;
+
         case SD_DHCP_OPTION_PRIVATE_BASE ... SD_DHCP_OPTION_PRIVATE_LAST:
                 r = dhcp_lease_insert_private_option(lease, code, option, len);
                 if (r < 0)
@@ -724,7 +816,7 @@
                 break;
 
         default:
-                log_debug("Ignoring option DHCP option %"PRIu8" while parsing.", code);
+                log_debug("Ignoring DHCP option %"PRIu8" while parsing.", code);
                 break;
         }
 
@@ -821,13 +913,15 @@
 }
 
 int dhcp_lease_insert_private_option(sd_dhcp_lease *lease, uint8_t tag, const void *data, uint8_t len) {
-        struct sd_dhcp_raw_option *cur, *option;
+        struct sd_dhcp_raw_option *option, *before = NULL;
 
         assert(lease);
 
         LIST_FOREACH(options, cur, lease->private_options) {
-                if (tag < cur->tag)
+                if (tag < cur->tag) {
+                        before = cur;
                         break;
+                }
                 if (tag == cur->tag) {
                         log_debug("Ignoring duplicate option, tagged %i.", tag);
                         return 0;
@@ -846,7 +940,7 @@
                 return -ENOMEM;
         }
 
-        LIST_INSERT_BEFORE(options, lease->private_options, cur, option);
+        LIST_INSERT_BEFORE(options, lease->private_options, before, option);
         return 0;
 }
 
@@ -866,16 +960,14 @@
 int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
         _cleanup_(unlink_and_freep) char *temp_path = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        struct sd_dhcp_raw_option *option;
         struct in_addr address;
         const struct in_addr *addresses;
         const void *client_id, *data;
         size_t client_id_len, data_len;
-        char sbuf[INET_ADDRSTRLEN];
         const char *string;
         uint16_t mtu;
         _cleanup_free_ sd_dhcp_route **routes = NULL;
-        char **search_domains = NULL;
+        char **search_domains;
         uint32_t t1, t2, lifetime;
         int r;
 
@@ -893,30 +985,30 @@
 
         r = sd_dhcp_lease_get_address(lease, &address);
         if (r >= 0)
-                fprintf(f, "ADDRESS=%s\n", inet_ntop(AF_INET, &address, sbuf, sizeof(sbuf)));
+                fprintf(f, "ADDRESS=%s\n", IN4_ADDR_TO_STRING(&address));
 
         r = sd_dhcp_lease_get_netmask(lease, &address);
         if (r >= 0)
-                fprintf(f, "NETMASK=%s\n", inet_ntop(AF_INET, &address, sbuf, sizeof(sbuf)));
+                fprintf(f, "NETMASK=%s\n", IN4_ADDR_TO_STRING(&address));
 
         r = sd_dhcp_lease_get_router(lease, &addresses);
         if (r > 0) {
                 fputs("ROUTER=", f);
-                serialize_in_addrs(f, addresses, r, false, NULL);
+                serialize_in_addrs(f, addresses, r, NULL, NULL);
                 fputc('\n', f);
         }
 
         r = sd_dhcp_lease_get_server_identifier(lease, &address);
         if (r >= 0)
-                fprintf(f, "SERVER_ADDRESS=%s\n", inet_ntop(AF_INET, &address, sbuf, sizeof(sbuf)));
+                fprintf(f, "SERVER_ADDRESS=%s\n", IN4_ADDR_TO_STRING(&address));
 
         r = sd_dhcp_lease_get_next_server(lease, &address);
         if (r >= 0)
-                fprintf(f, "NEXT_SERVER=%s\n", inet_ntop(AF_INET, &address, sbuf, sizeof(sbuf)));
+                fprintf(f, "NEXT_SERVER=%s\n", IN4_ADDR_TO_STRING(&address));
 
         r = sd_dhcp_lease_get_broadcast(lease, &address);
         if (r >= 0)
-                fprintf(f, "BROADCAST=%s\n", inet_ntop(AF_INET, &address, sbuf, sizeof(sbuf)));
+                fprintf(f, "BROADCAST=%s\n", IN4_ADDR_TO_STRING(&address));
 
         r = sd_dhcp_lease_get_mtu(lease, &mtu);
         if (r >= 0)
@@ -937,21 +1029,21 @@
         r = sd_dhcp_lease_get_dns(lease, &addresses);
         if (r > 0) {
                 fputs("DNS=", f);
-                serialize_in_addrs(f, addresses, r, false, NULL);
+                serialize_in_addrs(f, addresses, r, NULL, NULL);
                 fputc('\n', f);
         }
 
         r = sd_dhcp_lease_get_ntp(lease, &addresses);
         if (r > 0) {
                 fputs("NTP=", f);
-                serialize_in_addrs(f, addresses, r, false, NULL);
+                serialize_in_addrs(f, addresses, r, NULL, NULL);
                 fputc('\n', f);
         }
 
         r = sd_dhcp_lease_get_sip(lease, &addresses);
         if (r > 0) {
                 fputs("SIP=", f);
-                serialize_in_addrs(f, addresses, r, false, NULL);
+                serialize_in_addrs(f, addresses, r, NULL, NULL);
                 fputc('\n', f);
         }
 
@@ -974,9 +1066,14 @@
         if (r >= 0)
                 fprintf(f, "ROOT_PATH=%s\n", string);
 
-        r = sd_dhcp_lease_get_routes(lease, &routes);
+        r = sd_dhcp_lease_get_static_routes(lease, &routes);
         if (r > 0)
-                serialize_dhcp_routes(f, "ROUTES", routes, r);
+                serialize_dhcp_routes(f, "STATIC_ROUTES", routes, r);
+
+        routes = mfree(routes);
+        r = sd_dhcp_lease_get_classless_routes(lease, &routes);
+        if (r > 0)
+                serialize_dhcp_routes(f, "CLASSLESS_ROUTES", routes, r);
 
         r = sd_dhcp_lease_get_timezone(lease, &string);
         if (r >= 0)
@@ -1052,7 +1149,8 @@
                 *smtp = NULL,
                 *lpr = NULL,
                 *mtu = NULL,
-                *routes = NULL,
+                *static_routes = NULL,
+                *classless_routes = NULL,
                 *domains = NULL,
                 *client_id_hex = NULL,
                 *vendor_specific_hex = NULL,
@@ -1092,7 +1190,8 @@
                            "HOSTNAME", &lease->hostname,
                            "DOMAIN_SEARCH_LIST", &domains,
                            "ROOT_PATH", &lease->root_path,
-                           "ROUTES", &routes,
+                           "STATIC_ROUTES", &static_routes,
+                           "CLASSLESS_ROUTES", &classless_routes,
                            "CLIENTID", &client_id_hex,
                            "TIMEZONE", &lease->timezone,
                            "VENDOR_SPECIFIC", &vendor_specific_hex,
@@ -1239,13 +1338,22 @@
                         lease->search_domains = TAKE_PTR(a);
         }
 
-        if (routes) {
+        if (static_routes) {
                 r = deserialize_dhcp_routes(
-                                &lease->static_route,
-                                &lease->static_route_size,
-                                routes);
+                                &lease->static_routes,
+                                &lease->n_static_routes,
+                                static_routes);
                 if (r < 0)
-                        log_debug_errno(r, "Failed to parse DHCP routes %s, ignoring: %m", routes);
+                        log_debug_errno(r, "Failed to parse DHCP static routes %s, ignoring: %m", static_routes);
+        }
+
+        if (classless_routes) {
+                r = deserialize_dhcp_routes(
+                                &lease->classless_routes,
+                                &lease->n_classless_routes,
+                                classless_routes);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to parse DHCP classless routes %s, ignoring: %m", classless_routes);
         }
 
         if (lifetime) {
@@ -1392,9 +1500,3 @@
         *gateway = route->gw_addr;
         return 0;
 }
-
-int sd_dhcp_route_get_option(sd_dhcp_route *route) {
-        assert_return(route, -EINVAL);
-
-        return route->option;
-}
diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c
index d594aeb..5de230a 100644
--- a/src/libsystemd-network/sd-dhcp-server.c
+++ b/src/libsystemd-network/sd-dhcp-server.c
@@ -12,14 +12,17 @@
 #include "alloc-util.h"
 #include "dhcp-internal.h"
 #include "dhcp-server-internal.h"
+#include "dns-domain.h"
 #include "fd-util.h"
 #include "in-addr-util.h"
 #include "io-util.h"
+#include "memory-util.h"
 #include "network-common.h"
 #include "ordered-set.h"
 #include "siphash24.h"
 #include "string-util.h"
 #include "unaligned.h"
+#include "utf8.h"
 
 #define DHCP_DEFAULT_LEASE_TIME_USEC USEC_PER_HOUR
 #define DHCP_MAX_LEASE_TIME_USEC (USEC_PER_HOUR*12)
@@ -28,6 +31,13 @@
         if (!lease)
                 return NULL;
 
+        if (lease->server) {
+                hashmap_remove_value(lease->server->bound_leases_by_address, UINT32_TO_PTR(lease->address), lease);
+                hashmap_remove_value(lease->server->bound_leases_by_client_id, &lease->client_id, lease);
+                hashmap_remove_value(lease->server->static_leases_by_address, UINT32_TO_PTR(lease->address), lease);
+                hashmap_remove_value(lease->server->static_leases_by_client_id, &lease->client_id, lease);
+        }
+
         free(lease->client_id.data);
         return mfree(lease);
 }
@@ -85,11 +95,6 @@
 
         if (server->address != address->s_addr || server->netmask != netmask || server->pool_size != size || server->pool_offset != offset) {
 
-                free(server->bound_leases);
-                server->bound_leases = new0(DHCPLease*, size);
-                if (!server->bound_leases)
-                        return -ENOMEM;
-
                 server->pool_offset = offset;
                 server->pool_size = size;
 
@@ -97,11 +102,9 @@
                 server->netmask = netmask;
                 server->subnet = address->s_addr & netmask;
 
-                if (server_off >= offset && server_off - offset < size)
-                        server->bound_leases[server_off - offset] = &server->invalid_lease;
-
                 /* Drop any leases associated with the old address range */
-                hashmap_clear(server->leases_by_client_id);
+                hashmap_clear(server->bound_leases_by_address);
+                hashmap_clear(server->bound_leases_by_client_id);
 
                 if (server->callback)
                         server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
@@ -124,7 +127,7 @@
 
 void client_id_hash_func(const DHCPClientId *id, struct siphash *state) {
         assert(id);
-        assert(id->length);
+        assert(id->length > 0);
         assert(id->data);
 
         siphash24_compress(&id->length, sizeof(id->length), state);
@@ -134,8 +137,10 @@
 int client_id_compare_func(const DHCPClientId *a, const DHCPClientId *b) {
         int r;
 
-        assert(!a->length || a->data);
-        assert(!b->length || b->data);
+        assert(a->length > 0);
+        assert(a->data);
+        assert(b->length > 0);
+        assert(b->data);
 
         r = CMP(a->length, b->length);
         if (r != 0)
@@ -144,25 +149,32 @@
         return memcmp(a->data, b->data, a->length);
 }
 
-DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(dhcp_lease_hash_ops, DHCPClientId, client_id_hash_func, client_id_compare_func,
-                                              DHCPLease, dhcp_lease_free);
+DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+        dhcp_lease_hash_ops,
+        DHCPClientId,
+        client_id_hash_func,
+        client_id_compare_func,
+        DHCPLease,
+        dhcp_lease_free);
 
 static sd_dhcp_server *dhcp_server_free(sd_dhcp_server *server) {
         assert(server);
 
-        log_dhcp_server(server, "UNREF");
-
         sd_dhcp_server_stop(server);
 
         sd_event_unref(server->event);
 
+        free(server->boot_server_name);
+        free(server->boot_filename);
         free(server->timezone);
 
         for (sd_dhcp_lease_server_type_t i = 0; i < _SD_DHCP_LEASE_SERVER_TYPE_MAX; i++)
                 free(server->servers[i].addr);
 
-        hashmap_free(server->leases_by_client_id);
-        hashmap_free(server->static_leases_by_client_id);
+        server->bound_leases_by_address = hashmap_free(server->bound_leases_by_address);
+        server->bound_leases_by_client_id = hashmap_free(server->bound_leases_by_client_id);
+        server->static_leases_by_address = hashmap_free(server->static_leases_by_address);
+        server->static_leases_by_client_id = hashmap_free(server->static_leases_by_client_id);
 
         ordered_set_free(server->extra_options);
         ordered_set_free(server->vendor_options);
@@ -170,8 +182,6 @@
         free(server->agent_circuit_id);
         free(server->agent_remote_id);
 
-        free(server->bound_leases);
-
         free(server->ifname);
         return mfree(server);
 }
@@ -190,9 +200,9 @@
 
         *server = (sd_dhcp_server) {
                 .n_ref = 1,
-                .fd_raw = -1,
-                .fd = -1,
-                .fd_broadcast = -1,
+                .fd_raw = -EBADF,
+                .fd = -EBADF,
+                .fd_broadcast = -EBADF,
                 .address = htobe32(INADDR_ANY),
                 .netmask = htobe32(INADDR_ANY),
                 .ifindex = ifindex,
@@ -201,13 +211,6 @@
                 .max_lease_time = DIV_ROUND_UP(DHCP_MAX_LEASE_TIME_USEC, USEC_PER_SEC),
         };
 
-        server->leases_by_client_id = hashmap_new(&dhcp_lease_hash_ops);
-        if (!server->leases_by_client_id)
-                return -ENOMEM;
-        server->static_leases_by_client_id = hashmap_new(&dhcp_lease_hash_ops);
-        if (!server->static_leases_by_client_id)
-                return -ENOMEM;
-
         *ret = TAKE_PTR(server);
 
         return 0;
@@ -223,11 +226,19 @@
         return free_and_strdup(&server->ifname, ifname);
 }
 
-const char *sd_dhcp_server_get_ifname(sd_dhcp_server *server) {
-        if (!server)
-                return NULL;
+int sd_dhcp_server_get_ifname(sd_dhcp_server *server, const char **ret) {
+        int r;
 
-        return get_ifname(server->ifindex, &server->ifname);
+        assert_return(server, -EINVAL);
+
+        r = get_ifname(server->ifindex, &server->ifname);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = server->ifname;
+
+        return 0;
 }
 
 int sd_dhcp_server_attach_event(sd_dhcp_server *server, sd_event *event, int64_t priority) {
@@ -263,10 +274,50 @@
         return server->event;
 }
 
+int sd_dhcp_server_set_boot_server_address(sd_dhcp_server *server, const struct in_addr *address) {
+        assert_return(server, -EINVAL);
+
+        if (address)
+                server->boot_server_address = *address;
+        else
+                server->boot_server_address = (struct in_addr) {};
+
+        return 0;
+}
+
+int sd_dhcp_server_set_boot_server_name(sd_dhcp_server *server, const char *name) {
+        int r;
+
+        assert_return(server, -EINVAL);
+
+        if (name) {
+                r = dns_name_is_valid(name);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return -EINVAL;
+        }
+
+        return free_and_strdup(&server->boot_server_name, name);
+}
+
+int sd_dhcp_server_set_boot_filename(sd_dhcp_server *server, const char *filename) {
+        assert_return(server, -EINVAL);
+
+        if (filename && (!string_is_safe(filename) || !ascii_is_valid(filename)))
+                return -EINVAL;
+
+        return free_and_strdup(&server->boot_filename, filename);
+}
+
 int sd_dhcp_server_stop(sd_dhcp_server *server) {
+        bool running;
+
         if (!server)
                 return 0;
 
+        running = sd_dhcp_server_is_running(server);
+
         server->receive_message = sd_event_source_disable_unref(server->receive_message);
         server->receive_broadcast = sd_event_source_disable_unref(server->receive_broadcast);
 
@@ -274,27 +325,35 @@
         server->fd = safe_close(server->fd);
         server->fd_broadcast = safe_close(server->fd_broadcast);
 
-        log_dhcp_server(server, "STOPPED");
+        if (running)
+                log_dhcp_server(server, "STOPPED");
 
         return 0;
 }
 
-static int dhcp_server_send_unicast_raw(sd_dhcp_server *server,
-                                        DHCPPacket *packet, size_t len) {
+static int dhcp_server_send_unicast_raw(
+                sd_dhcp_server *server,
+                uint8_t hlen,
+                const uint8_t *chaddr,
+                DHCPPacket *packet,
+                size_t len) {
+
         union sockaddr_union link = {
                 .ll.sll_family = AF_PACKET,
                 .ll.sll_protocol = htobe16(ETH_P_IP),
                 .ll.sll_ifindex = server->ifindex,
-                .ll.sll_halen = ETH_ALEN,
+                .ll.sll_halen = hlen,
         };
 
         assert(server);
         assert(server->ifindex > 0);
-        assert(server->address);
+        assert(server->address != 0);
+        assert(hlen > 0);
+        assert(chaddr);
         assert(packet);
         assert(len > sizeof(DHCPPacket));
 
-        memcpy(&link.ll.sll_addr, &packet->dhcp.chaddr, ETH_ALEN);
+        memcpy(link.ll.sll_addr, chaddr, hlen);
 
         if (len > UINT16_MAX)
                 return -EOVERFLOW;
@@ -331,7 +390,7 @@
         assert(server);
         assert(server->fd >= 0);
         assert(message);
-        assert(len > sizeof(DHCPMessage));
+        assert(len >= sizeof(DHCPMessage));
 
         if (server->bind_to_interface) {
                 msg.msg_control = &control;
@@ -366,8 +425,16 @@
         return message->flags & htobe16(0x8000);
 }
 
-static int dhcp_server_send(sd_dhcp_server *server, be32_t destination, uint16_t destination_port,
-                            DHCPPacket *packet, size_t optoffset, bool l2_broadcast) {
+static int dhcp_server_send(
+                sd_dhcp_server *server,
+                uint8_t hlen,
+                const uint8_t *chaddr,
+                be32_t destination,
+                uint16_t destination_port,
+                DHCPPacket *packet,
+                size_t optoffset,
+                bool l2_broadcast) {
+
         if (destination != INADDR_ANY)
                 return dhcp_server_send_udp(server, destination,
                                             destination_port, &packet->dhcp,
@@ -380,7 +447,7 @@
                 /* we cannot send UDP packet to specific MAC address when the
                    address is not yet configured, so must fall back to raw
                    packets */
-                return dhcp_server_send_unicast_raw(server, packet,
+                return dhcp_server_send_unicast_raw(server, hlen, chaddr, packet,
                                                     sizeof(DHCPPacket) + optoffset);
 }
 
@@ -393,7 +460,7 @@
 
         assert(server);
         assert(req);
-        assert(req->max_optlen);
+        assert(req->max_optlen > 0);
         assert(req->message);
         assert(optoffset <= req->max_optlen);
         assert(packet);
@@ -441,45 +508,51 @@
            client, because the client may not have a correct network address
            or subnet mask, and the client may not be answering ARP requests.
          */
-        if (req->message->giaddr) {
+        if (req->message->giaddr != 0) {
                 destination = req->message->giaddr;
                 destination_port = DHCP_PORT_SERVER;
                 if (type == DHCP_NAK)
                         packet->dhcp.flags = htobe16(0x8000);
-        } else if (req->message->ciaddr && type != DHCP_NAK)
+        } else if (req->message->ciaddr != 0 && type != DHCP_NAK)
                 destination = req->message->ciaddr;
 
         bool l2_broadcast = requested_broadcast(req->message) || type == DHCP_NAK;
-        return dhcp_server_send(server, destination, destination_port, packet, optoffset, l2_broadcast);
+        return dhcp_server_send(server, req->message->hlen, req->message->chaddr,
+                                destination, destination_port, packet, optoffset, l2_broadcast);
 }
 
-static int server_message_init(sd_dhcp_server *server, DHCPPacket **ret,
-                               uint8_t type, size_t *_optoffset,
-                               DHCPRequest *req) {
+static int server_message_init(
+                sd_dhcp_server *server,
+                DHCPPacket **ret,
+                uint8_t type,
+                size_t *ret_optoffset,
+                DHCPRequest *req) {
+
         _cleanup_free_ DHCPPacket *packet = NULL;
         size_t optoffset = 0;
         int r;
 
         assert(server);
         assert(ret);
-        assert(_optoffset);
+        assert(ret_optoffset);
         assert(IN_SET(type, DHCP_OFFER, DHCP_ACK, DHCP_NAK));
+        assert(req);
 
         packet = malloc0(sizeof(DHCPPacket) + req->max_optlen);
         if (!packet)
                 return -ENOMEM;
 
         r = dhcp_message_init(&packet->dhcp, BOOTREPLY,
-                              be32toh(req->message->xid), type, ARPHRD_ETHER,
+                              be32toh(req->message->xid), type,
+                              req->message->htype, req->message->hlen, req->message->chaddr,
                               req->max_optlen, &optoffset);
         if (r < 0)
                 return r;
 
         packet->dhcp.flags = req->message->flags;
         packet->dhcp.giaddr = req->message->giaddr;
-        memcpy(&packet->dhcp.chaddr, &req->message->chaddr, ETH_ALEN);
 
-        *_optoffset = optoffset;
+        *ret_optoffset = optoffset;
         *ret = TAKE_PTR(packet);
 
         return 0;
@@ -506,6 +579,7 @@
                 return r;
 
         packet->dhcp.yiaddr = address;
+        packet->dhcp.siaddr = server->boot_server_address.s_addr;
 
         lease_time = htobe32(req->lifetime);
         r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
@@ -521,7 +595,26 @@
 
         if (server->emit_router) {
                 r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
-                                       SD_DHCP_OPTION_ROUTER, 4, &server->address);
+                                       SD_DHCP_OPTION_ROUTER, 4,
+                                       in4_addr_is_set(&server->router_address) ?
+                                       &server->router_address.s_addr :
+                                       &server->address);
+                if (r < 0)
+                        return r;
+        }
+
+        if (server->boot_server_name) {
+                r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
+                                       SD_DHCP_OPTION_BOOT_SERVER_NAME,
+                                       strlen(server->boot_server_name), server->boot_server_name);
+                if (r < 0)
+                        return r;
+        }
+
+        if (server->boot_filename) {
+                r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
+                                       SD_DHCP_OPTION_BOOT_FILENAME,
+                                       strlen(server->boot_filename), server->boot_filename);
                 if (r < 0)
                         return r;
         }
@@ -553,7 +646,7 @@
                 if (server->timezone) {
                         r = dhcp_option_append(
                                         &packet->dhcp, req->max_optlen, &offset, 0,
-                                        SD_DHCP_OPTION_NEW_TZDB_TIMEZONE,
+                                        SD_DHCP_OPTION_TZDB_TIMEZONE,
                                         strlen(server->timezone), server->timezone);
                         if (r < 0)
                                 return r;
@@ -576,11 +669,7 @@
                         return r;
         }
 
-        r = dhcp_server_send_packet(server, req, packet, type, offset);
-        if (r < 0)
-                return r;
-
-        return 0;
+        return dhcp_server_send_packet(server, req, packet, type, offset);
 }
 
 static int server_send_nak_or_ignore(sd_dhcp_server *server, bool init_reboot, DHCPRequest *req) {
@@ -607,8 +696,14 @@
         return DHCP_NAK;
 }
 
-static int server_send_forcerenew(sd_dhcp_server *server, be32_t address,
-                                  be32_t gateway, const uint8_t chaddr[]) {
+static int server_send_forcerenew(
+                sd_dhcp_server *server,
+                be32_t address,
+                be32_t gateway,
+                uint8_t htype,
+                uint8_t hlen,
+                const uint8_t *chaddr) {
+
         _cleanup_free_ DHCPPacket *packet = NULL;
         size_t optoffset = 0;
         int r;
@@ -622,7 +717,7 @@
                 return -ENOMEM;
 
         r = dhcp_message_init(&packet->dhcp, BOOTREPLY, 0,
-                              DHCP_FORCERENEW, ARPHRD_ETHER,
+                              DHCP_FORCERENEW, htype, hlen, chaddr,
                               DHCP_MIN_OPTIONS_SIZE, &optoffset);
         if (r < 0)
                 return r;
@@ -632,23 +727,15 @@
         if (r < 0)
                 return r;
 
-        memcpy(&packet->dhcp.chaddr, chaddr, ETH_ALEN);
-
-        r = dhcp_server_send_udp(server, address, DHCP_PORT_CLIENT,
-                                 &packet->dhcp,
-                                 sizeof(DHCPMessage) + optoffset);
-        if (r < 0)
-                return r;
-
-        return 0;
+        return dhcp_server_send_udp(server, address, DHCP_PORT_CLIENT,
+                                    &packet->dhcp,
+                                    sizeof(DHCPMessage) + optoffset);
 }
 
 static int parse_request(uint8_t code, uint8_t len, const void *option, void *userdata) {
-        DHCPRequest *req = userdata;
+        DHCPRequest *req = ASSERT_PTR(userdata);
 
-        assert(req);
-
-        switch(code) {
+        switch (code) {
         case SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME:
                 if (len == 4)
                         req->lifetime = unaligned_read_be32(option);
@@ -672,8 +759,7 @@
                         if (!data)
                                 return -ENOMEM;
 
-                        free(req->client_id.data);
-                        req->client_id.data = data;
+                        free_and_replace(req->client_id.data, data);
                         req->client_id.length = len;
                 }
 
@@ -709,22 +795,45 @@
 
         req->message = message;
 
-        /* set client id based on MAC address if client did not send an explicit
-           one */
-        if (!req->client_id.data) {
-                void *data;
+        if (message->hlen > sizeof(message->chaddr))
+                return -EBADMSG;
 
-                data = malloc0(ETH_ALEN + 1);
+        /* set client id based on MAC address if client did not send an explicit one */
+        if (!req->client_id.data) {
+                uint8_t *data;
+
+                if (message->hlen == 0)
+                        return -EBADMSG;
+
+                data = new0(uint8_t, message->hlen + 1);
                 if (!data)
                         return -ENOMEM;
 
-                ((uint8_t*) data)[0] = 0x01;
-                memcpy((uint8_t*) data + 1, &message->chaddr, ETH_ALEN);
+                data[0] = 0x01;
+                memcpy(data + 1, message->chaddr, message->hlen);
 
-                req->client_id.length = ETH_ALEN + 1;
+                req->client_id.length = message->hlen + 1;
                 req->client_id.data = data;
         }
 
+        if (message->hlen == 0 || memeqzero(message->chaddr, message->hlen)) {
+                /* See RFC2131 section 4.1.1.
+                 * hlen and chaddr may not be set for non-ethernet interface.
+                 * Let's try to retrieve it from the client ID. */
+
+                if (!req->client_id.data)
+                        return -EBADMSG;
+
+                if (req->client_id.length <= 1 || req->client_id.length > sizeof(message->chaddr) + 1)
+                        return -EBADMSG;
+
+                if (req->client_id.data[0] != 0x01)
+                        return -EBADMSG;
+
+                message->hlen = req->client_id.length - 1;
+                memcpy(message->chaddr, req->client_id.data + 1, message->hlen);
+        }
+
         if (req->max_optlen < DHCP_MIN_OPTIONS_SIZE)
                 req->max_optlen = DHCP_MIN_OPTIONS_SIZE;
 
@@ -737,17 +846,23 @@
         return 0;
 }
 
-static int get_pool_offset(sd_dhcp_server *server, be32_t requested_ip) {
+static bool address_is_in_pool(sd_dhcp_server *server, be32_t address) {
         assert(server);
 
-        if (!server->pool_size)
-                return -EINVAL;
+        if (server->pool_size == 0)
+                return false;
 
-        if (be32toh(requested_ip) < (be32toh(server->subnet) | server->pool_offset) ||
-            be32toh(requested_ip) >= (be32toh(server->subnet) | (server->pool_offset + server->pool_size)))
-                return -ERANGE;
+        if (address == server->address)
+                return false;
 
-        return be32toh(requested_ip & ~server->netmask) - server->pool_offset;
+        if (be32toh(address) < (be32toh(server->subnet) | server->pool_offset) ||
+            be32toh(address) >= (be32toh(server->subnet) | (server->pool_offset + server->pool_size)))
+                return false;
+
+        if (hashmap_contains(server->static_leases_by_address, UINT32_TO_PTR(address)))
+                return false;
+
+        return true;
 }
 
 static int append_agent_information_option(sd_dhcp_server *server, DHCPMessage *message, size_t opt_length, size_t size) {
@@ -779,6 +894,10 @@
         assert(message);
         assert(sd_dhcp_server_is_in_relay_mode(server));
 
+        if (message->hlen == 0 || message->hlen > sizeof(message->chaddr) || memeqzero(message->chaddr, message->hlen))
+                return log_dhcp_server_errno(server, SYNTHETIC_ERRNO(EBADMSG),
+                                             "(relay agent) received message without/invalid hardware address, discarding.");
+
         if (message->op == BOOTREQUEST) {
                 log_dhcp_server(server, "(relay agent) BOOTREQUEST (0x%x)", be32toh(message->xid));
                 if (message->hops >= 16)
@@ -818,7 +937,7 @@
 
                 bool l2_broadcast = requested_broadcast(message) || message_type == DHCP_NAK;
                 const be32_t destination = message_type == DHCP_NAK ? INADDR_ANY : message->ciaddr;
-                return dhcp_server_send(server, destination, DHCP_PORT_CLIENT, packet, opt_length, l2_broadcast);
+                return dhcp_server_send(server, message->hlen, message->chaddr, destination, DHCP_PORT_CLIENT, packet, opt_length, l2_broadcast);
         }
         return -EBADMSG;
 }
@@ -827,7 +946,9 @@
                 DHCPLease **ret_lease,
                 be32_t address,
                 const DHCPClientId *client_id,
-                const uint8_t chaddr[static ETH_ALEN],
+                uint8_t htype,
+                uint8_t hlen,
+                const uint8_t *chaddr,
                 be32_t gateway,
                 usec_t expiration) {
 
@@ -840,6 +961,8 @@
         *lease = (DHCPLease) {
                 .address = address,
                 .client_id.length = client_id->length,
+                .htype = htype,
+                .hlen = hlen,
                 .gateway = gateway,
                 .expiration = expiration,
         };
@@ -847,23 +970,95 @@
         if (!lease->client_id.data)
                 return -ENOMEM;
 
-        memcpy(&lease->chaddr, chaddr, ETH_ALEN);
+        memcpy(lease->chaddr, chaddr, hlen);
 
         *ret_lease = TAKE_PTR(lease);
 
         return 0;
 }
 
-static bool static_leases_have_address(sd_dhcp_server *server, be32_t address) {
-        DHCPLease *s;
+static int server_ack_request(sd_dhcp_server *server, DHCPRequest *req, DHCPLease *existing_lease, be32_t address) {
+        usec_t time_now, expiration;
+        int r;
+
+        assert(server);
+        assert(req);
+        assert(address != 0);
+
+        r = sd_event_now(server->event, CLOCK_BOOTTIME, &time_now);
+        if (r < 0)
+                return r;
+
+        expiration = usec_add(req->lifetime * USEC_PER_SEC, time_now);
+
+        if (existing_lease) {
+                assert(existing_lease->server);
+                assert(existing_lease->address == address);
+                existing_lease->expiration = expiration;
+
+        } else {
+                _cleanup_(dhcp_lease_freep) DHCPLease *lease = NULL;
+
+                r = prepare_new_lease(&lease, address, &req->client_id,
+                                      req->message->htype, req->message->hlen,
+                                      req->message->chaddr, req->message->giaddr, expiration);
+                if (r < 0)
+                        return log_dhcp_server_errno(server, r, "Failed to create new lease: %m");
+
+                lease->server = server; /* This must be set just before hashmap_put(). */
+
+                r = hashmap_ensure_put(&server->bound_leases_by_client_id, &dhcp_lease_hash_ops, &lease->client_id, lease);
+                if (r < 0)
+                        return log_dhcp_server_errno(server, r, "Could not save lease: %m");
+
+                r = hashmap_ensure_put(&server->bound_leases_by_address, NULL, UINT32_TO_PTR(lease->address), lease);
+                if (r < 0)
+                        return log_dhcp_server_errno(server, r, "Could not save lease: %m");
+
+                TAKE_PTR(lease);
+        }
+
+        r = server_send_offer_or_ack(server, req, address, DHCP_ACK);
+        if (r < 0)
+                return log_dhcp_server_errno(server, r, "Could not send ACK: %m");
+
+        log_dhcp_server(server, "ACK (0x%x)", be32toh(req->message->xid));
+
+        if (server->callback)
+                server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
+
+        return DHCP_ACK;
+}
+
+static int dhcp_server_cleanup_expired_leases(sd_dhcp_server *server) {
+        DHCPLease *lease;
+        usec_t time_now;
+        int r;
 
         assert(server);
 
-        HASHMAP_FOREACH(s, server->static_leases_by_client_id)
-                if (s->address == address)
-                        return true;
+        r = sd_event_now(server->event, CLOCK_BOOTTIME, &time_now);
+        if (r < 0)
+                return r;
 
-        return false;
+        HASHMAP_FOREACH(lease, server->bound_leases_by_client_id)
+                if (lease->expiration < time_now) {
+                        log_dhcp_server(server, "CLEAN (0x%x)", be32toh(lease->address));
+                        dhcp_lease_free(lease);
+                }
+
+        return 0;
+}
+
+static bool address_available(sd_dhcp_server *server, be32_t address) {
+        assert(server);
+
+        if (hashmap_contains(server->bound_leases_by_address, UINT32_TO_PTR(address)) ||
+            hashmap_contains(server->static_leases_by_address, UINT32_TO_PTR(address)) ||
+            address == server->address)
+                return false;
+
+        return true;
 }
 
 #define HASH_KEY SD_ID128_MAKE(0d,1d,fe,bd,f1,24,bd,b3,47,f1,dd,6e,73,21,93,30)
@@ -877,9 +1072,7 @@
         assert(server);
         assert(message);
 
-        if (message->op != BOOTREQUEST ||
-            message->htype != ARPHRD_ETHER ||
-            message->hlen != ETHER_ADDR_LEN)
+        if (message->op != BOOTREQUEST)
                 return 0;
 
         req = new0(DHCPRequest, 1);
@@ -892,21 +1085,23 @@
 
         r = ensure_sane_request(server, req, message);
         if (r < 0)
-                /* this only fails on critical errors */
                 return r;
 
-        existing_lease = hashmap_get(server->leases_by_client_id, &req->client_id);
+        r = dhcp_server_cleanup_expired_leases(server);
+        if (r < 0)
+                return r;
+
+        existing_lease = hashmap_get(server->bound_leases_by_client_id, &req->client_id);
         static_lease = hashmap_get(server->static_leases_by_client_id, &req->client_id);
 
-        switch(type) {
+        switch (type) {
 
         case DHCP_DISCOVER: {
                 be32_t address = INADDR_ANY;
-                unsigned i;
 
                 log_dhcp_server(server, "DISCOVER (0x%x)", be32toh(req->message->xid));
 
-                if (!server->pool_size)
+                if (server->pool_size == 0)
                         /* no pool allocated */
                         return 0;
 
@@ -918,7 +1113,6 @@
                 else {
                         struct siphash state;
                         uint64_t hash;
-                        uint32_t next_offer;
 
                         /* even with no persistence of leases, we try to offer the same client
                            the same IP address. we do this by using the hash of the client id
@@ -927,18 +1121,15 @@
                         siphash24_init(&state, HASH_KEY.bytes);
                         client_id_hash_func(&req->client_id, &state);
                         hash = htole64(siphash24_finalize(&state));
-                        next_offer = hash % server->pool_size;
 
-                        for (i = 0; i < server->pool_size; i++) {
-                                if (!server->bound_leases[next_offer]) {
-                                        be32_t tmp = server->subnet | htobe32(server->pool_offset + next_offer);
-                                        if (!static_leases_have_address(server, tmp)) {
-                                                address = tmp;
-                                                break;
-                                        }
+                        for (unsigned i = 0; i < server->pool_size; i++) {
+                                be32_t tmp_address;
+
+                                tmp_address = server->subnet | htobe32(server->pool_offset + (hash + i) % server->pool_size);
+                                if (address_available(server, tmp_address)) {
+                                        address = tmp_address;
+                                        break;
                                 }
-
-                                next_offer = (next_offer + 1) % server->pool_size;
                         }
                 }
 
@@ -964,11 +1155,10 @@
         case DHCP_REQUEST: {
                 be32_t address;
                 bool init_reboot = false;
-                int pool_offset;
 
                 /* see RFC 2131, section 4.3.2 */
 
-                if (req->server_id) {
+                if (req->server_id != 0) {
                         log_dhcp_server(server, "REQUEST (selecting) (0x%x)",
                                         be32toh(req->message->xid));
 
@@ -977,22 +1167,22 @@
                                 /* client did not pick us */
                                 return 0;
 
-                        if (req->message->ciaddr)
+                        if (req->message->ciaddr != 0)
                                 /* this MUST be zero */
                                 return 0;
 
-                        if (!req->requested_ip)
+                        if (req->requested_ip == 0)
                                 /* this must be filled in with the yiaddr
                                    from the chosen OFFER */
                                 return 0;
 
                         address = req->requested_ip;
-                } else if (req->requested_ip) {
+                } else if (req->requested_ip != 0) {
                         log_dhcp_server(server, "REQUEST (init-reboot) (0x%x)",
                                         be32toh(req->message->xid));
 
                         /* INIT-REBOOT */
-                        if (req->message->ciaddr)
+                        if (req->message->ciaddr != 0)
                                 /* this MUST be zero */
                                 return 0;
 
@@ -1004,101 +1194,41 @@
                                         be32toh(req->message->xid));
 
                         /* REBINDING / RENEWING */
-                        if (!req->message->ciaddr)
+                        if (req->message->ciaddr == 0)
                                 /* this MUST be filled in with clients IP address */
                                 return 0;
 
                         address = req->message->ciaddr;
                 }
 
-                pool_offset = get_pool_offset(server, address);
+                /* disallow our own address */
+                if (address == server->address)
+                        return 0;
 
-                /* verify that the requested address is from the pool, and either
-                   owned by the current client or free */
-                if (pool_offset >= 0 && static_lease) {
-                        _unused_ _cleanup_(dhcp_lease_freep) DHCPLease *old_lease = NULL;
-                        _cleanup_(dhcp_lease_freep) DHCPLease *lease = NULL;
-                        usec_t time_now, expiration;
+                if (static_lease) {
+                        /* Found a static lease for the client ID. */
 
-                        r = sd_event_now(server->event, clock_boottime_or_monotonic(), &time_now);
-                        if (r < 0)
-                                return r;
+                        if (static_lease->address != address)
+                                /* The client requested an address which is different from the static lease. Refuse. */
+                                return server_send_nak_or_ignore(server, init_reboot, req);
 
-                        expiration = usec_add(req->lifetime * USEC_PER_SEC, time_now);
+                        return server_ack_request(server, req, existing_lease, address);
+                }
 
-                        r = prepare_new_lease(&lease, static_lease->address, &req->client_id,
-                                              req->message->chaddr, req->message->giaddr, expiration);
-                        if (r < 0)
-                                return r;
+                if (address_is_in_pool(server, address)) {
+                        /* The requested address is in the pool. */
 
-                        r = server_send_offer_or_ack(server, req, address, DHCP_ACK);
-                        if (r < 0)
-                                /* this only fails on critical errors */
-                                return log_dhcp_server_errno(server, r, "Could not send ack: %m");
+                        if (existing_lease && existing_lease->address != address)
+                                /* We previously assigned an address, but the client requested another one. Refuse. */
+                                return server_send_nak_or_ignore(server, init_reboot, req);
 
-                        log_dhcp_server(server, "ACK (0x%x)", be32toh(req->message->xid));
-
-                        server->bound_leases[pool_offset] = lease;
-
-                        old_lease = hashmap_remove(server->leases_by_client_id, &lease->client_id);
-                        r = hashmap_put(server->leases_by_client_id, &lease->client_id, lease);
-                        if (r < 0)
-                                return log_dhcp_server_errno(server, r, "Could not save lease: %m");
-                        TAKE_PTR(lease);
-
-                        if (server->callback)
-                                server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
-
-                        return DHCP_ACK;
-
-                } else if (pool_offset >= 0 && server->bound_leases[pool_offset] == existing_lease) {
-                        _cleanup_(dhcp_lease_freep) DHCPLease *new_lease = NULL;
-                        usec_t time_now, expiration;
-                        DHCPLease *lease;
-
-                        r = sd_event_now(server->event, clock_boottime_or_monotonic(), &time_now);
-                        if (r < 0)
-                                return r;
-
-                        expiration = usec_add(req->lifetime * USEC_PER_SEC, time_now);
-
-                        if (!existing_lease) {
-                                r = prepare_new_lease(&new_lease, address, &req->client_id,
-                                                      req->message->chaddr, req->message->giaddr, expiration);
-                                if (r < 0)
-                                        return r;
-
-                                lease = new_lease;
-                        } else {
-                                existing_lease->expiration = expiration;
-                                lease = existing_lease;
-                        }
-
-                        r = server_send_offer_or_ack(server, req, address, DHCP_ACK);
-                        if (r < 0)
-                                /* this only fails on critical errors */
-                                return log_dhcp_server_errno(server, r, "Could not send ack: %m");
-
-                        log_dhcp_server(server, "ACK (0x%x)", be32toh(req->message->xid));
-
-                        server->bound_leases[pool_offset] = lease;
-                        r = hashmap_put(server->leases_by_client_id, &lease->client_id, lease);
-                        if (r < 0)
-                                return log_dhcp_server_errno(server, r, "Could not save lease: %m");
-                        TAKE_PTR(new_lease);
-
-                        if (server->callback)
-                                server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
-
-                        return DHCP_ACK;
+                        return server_ack_request(server, req, existing_lease, address);
                 }
 
                 return server_send_nak_or_ignore(server, init_reboot, req);
         }
 
         case DHCP_RELEASE: {
-                int pool_offset;
-
                 log_dhcp_server(server, "RELEASE (0x%x)",
                                 be32toh(req->message->xid));
 
@@ -1108,18 +1238,10 @@
                 if (existing_lease->address != req->message->ciaddr)
                         return 0;
 
-                pool_offset = get_pool_offset(server, req->message->ciaddr);
-                if (pool_offset < 0)
-                        return 0;
+                dhcp_lease_free(existing_lease);
 
-                if (server->bound_leases[pool_offset] == existing_lease) {
-                        server->bound_leases[pool_offset] = NULL;
-                        hashmap_remove(server->leases_by_client_id, &existing_lease->client_id);
-                        dhcp_lease_free(existing_lease);
-
-                        if (server->callback)
-                                server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
-                }
+                if (server->callback)
+                        server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
 
                 return 0;
         }}
@@ -1140,7 +1262,7 @@
                                   uint32_t revents, void *userdata) {
         _cleanup_free_ DHCPMessage *message = NULL;
         CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct in_pktinfo))) control;
-        sd_dhcp_server *server = userdata;
+        sd_dhcp_server *server = ASSERT_PTR(userdata);
         struct iovec iov = {};
         struct msghdr msg = {
                 .msg_iov = &iov,
@@ -1152,11 +1274,14 @@
         ssize_t datagram_size, len;
         int r;
 
-        assert(server);
-
         datagram_size = next_datagram_size_fd(fd);
-        if (datagram_size < 0)
-                return datagram_size;
+        if (datagram_size < 0) {
+                if (ERRNO_IS_TRANSIENT(datagram_size) || ERRNO_IS_DISCONNECT(datagram_size))
+                        return 0;
+
+                log_dhcp_server_errno(server, datagram_size, "Failed to determine datagram size to read, ignoring: %m");
+                return 0;
+        }
 
         size_t buflen = datagram_size;
         if (sd_dhcp_server_is_in_relay_mode(server))
@@ -1170,14 +1295,18 @@
         iov = IOVEC_MAKE(message, datagram_size);
 
         len = recvmsg_safe(fd, &msg, 0);
-        if (IN_SET(len, -EAGAIN, -EINTR))
+        if (len < 0) {
+                if (ERRNO_IS_TRANSIENT(len) || ERRNO_IS_DISCONNECT(len))
+                        return 0;
+
+                log_dhcp_server_errno(server, len, "Could not receive message, ignoring: %m");
                 return 0;
-        if (len < 0)
-                return len;
+        }
+
         if ((size_t) len < sizeof(DHCPMessage))
                 return 0;
 
-        CMSG_FOREACH(cmsg, &msg) {
+        CMSG_FOREACH(cmsg, &msg)
                 if (cmsg->cmsg_level == IPPROTO_IP &&
                     cmsg->cmsg_type == IP_PKTINFO &&
                     cmsg->cmsg_len == CMSG_LEN(sizeof(struct in_pktinfo))) {
@@ -1190,20 +1319,31 @@
 
                         break;
                 }
-        }
 
         if (sd_dhcp_server_is_in_relay_mode(server)) {
                 r = dhcp_server_relay_message(server, message, len - sizeof(DHCPMessage), buflen);
                 if (r < 0)
-                        log_dhcp_server_errno(server, r, "Couldn't relay message: %m");
+                        log_dhcp_server_errno(server, r, "Couldn't relay message, ignoring: %m");
         } else {
                 r = dhcp_server_handle_message(server, message, (size_t) len);
                 if (r < 0)
-                        log_dhcp_server_errno(server, r, "Couldn't process incoming message: %m");
+                        log_dhcp_server_errno(server, r, "Couldn't process incoming message, ignoring: %m");
         }
         return 0;
 }
 
+static void dhcp_server_update_lease_servers(sd_dhcp_server *server) {
+        assert(server);
+        assert(server->address != 0);
+
+        /* Convert null address -> server address */
+
+        for (sd_dhcp_lease_server_type_t k = 0; k < _SD_DHCP_LEASE_SERVER_TYPE_MAX; k++)
+                for (size_t i = 0; i < server->servers[k].size; i++)
+                        if (in4_addr_is_null(&server->servers[k].addr[i]))
+                                server->servers[k].addr[i].s_addr = server->address;
+}
+
 int sd_dhcp_server_start(sd_dhcp_server *server) {
         int r;
 
@@ -1218,6 +1358,8 @@
         assert_return(server->fd < 0, -EBUSY);
         assert_return(server->address != htobe32(INADDR_ANY), -EUNATCH);
 
+        dhcp_server_update_lease_servers(server);
+
         r = socket(AF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
         if (r < 0) {
                 r = -errno;
@@ -1268,29 +1410,23 @@
         return 0;
 
 on_error:
-    sd_dhcp_server_stop(server);
-    return r;
+        sd_dhcp_server_stop(server);
+        return r;
 }
 
 int sd_dhcp_server_forcerenew(sd_dhcp_server *server) {
-        int r = 0;
+        DHCPLease *lease;
+        int k, r = 0;
 
         assert_return(server, -EINVAL);
-        assert(server->bound_leases);
 
-        for (uint32_t i = 0; i < server->pool_size; i++) {
-                DHCPLease *lease = server->bound_leases[i];
+        log_dhcp_server(server, "FORCERENEW");
 
-                if (!lease || lease == &server->invalid_lease)
-                        continue;
-
-                r = server_send_forcerenew(server, lease->address,
-                                           lease->gateway,
-                                           lease->chaddr);
-                if (r < 0)
-                        return r;
-
-                log_dhcp_server(server, "FORCERENEW");
+        HASHMAP_FOREACH(lease, server->bound_leases_by_client_id) {
+                k = server_send_forcerenew(server, lease->address, lease->gateway,
+                                           lease->htype, lease->hlen, lease->chaddr);
+                if (k < 0)
+                        r = k;
         }
 
         return r;
@@ -1353,6 +1489,7 @@
         struct in_addr *c = NULL;
 
         assert_return(server, -EINVAL);
+        assert_return(!sd_dhcp_server_is_running(server), -EBUSY);
         assert_return(addresses || n_addresses == 0, -EINVAL);
         assert_return(what >= 0, -EINVAL);
         assert_return(what < _SD_DHCP_LEASE_SERVER_TYPE_MAX, -EINVAL);
@@ -1367,8 +1504,7 @@
                         return -ENOMEM;
         }
 
-        free(server->servers[what].addr);
-        server->servers[what].addr = c;
+        free_and_replace(server->servers[what].addr, c);
         server->servers[what].size = n_addresses;
         return 1;
 }
@@ -1392,15 +1528,18 @@
         return sd_dhcp_server_set_servers(server, SD_DHCP_LEASE_LPR, lpr, n);
 }
 
-int sd_dhcp_server_set_emit_router(sd_dhcp_server *server, int enabled) {
+int sd_dhcp_server_set_router(sd_dhcp_server *server, const struct in_addr *router) {
         assert_return(server, -EINVAL);
 
-        if (enabled == server->emit_router)
-                return 0;
+        /* router is NULL: router option will not be appended.
+         * router is null address (0.0.0.0): the server address will be used as the router address.
+         * otherwise: the specified address will be used as the router address. */
 
-        server->emit_router = enabled;
+        server->emit_router = router;
+        if (router)
+                server->router_address = *router;
 
-        return 1;
+        return 0;
 }
 
 int sd_dhcp_server_add_option(sd_dhcp_server *server, sd_dhcp_option *v) {
@@ -1486,37 +1625,28 @@
                 uint8_t *client_id,
                 size_t client_id_size) {
 
-        _unused_ _cleanup_(dhcp_lease_freep) DHCPLease *old = NULL;
         _cleanup_(dhcp_lease_freep) DHCPLease *lease = NULL;
-        DHCPClientId c;
         int r;
 
         assert_return(server, -EINVAL);
         assert_return(client_id, -EINVAL);
-        assert_return(client_id_size == ETH_ALEN + 1, -EINVAL);
+        assert_return(client_id_size > 0, -EINVAL);
         assert_return(!sd_dhcp_server_is_running(server), -EBUSY);
 
         /* Static lease with an empty or omitted address is a valid entry,
-        * the server removes any static lease with the specified mac address. */
+         * the server removes any static lease with the specified mac address. */
         if (!address || address->s_addr == 0) {
-                _cleanup_free_ void *data = NULL;
-
-                data = memdup(client_id, client_id_size);
-                if (!data)
-                        return -ENOMEM;
+                DHCPClientId c;
 
                 c = (DHCPClientId) {
                         .length = client_id_size,
-                        .data = data,
+                        .data = client_id,
                 };
 
-                old = hashmap_remove(server->static_leases_by_client_id, &c);
+                dhcp_lease_free(hashmap_get(server->static_leases_by_client_id, &c));
                 return 0;
         }
 
-        if (static_leases_have_address(server, address->s_addr))
-                return -EEXIST;
-
         lease = new(DHCPLease, 1);
         if (!lease)
                 return -ENOMEM;
@@ -1524,16 +1654,19 @@
         *lease = (DHCPLease) {
                 .address = address->s_addr,
                 .client_id.length = client_id_size,
-                .gateway = 0,
-                .expiration = 0,
         };
         lease->client_id.data = memdup(client_id, client_id_size);
         if (!lease->client_id.data)
                 return -ENOMEM;
 
+        lease->server = server; /* This must be set just before hashmap_put(). */
+
         r = hashmap_ensure_put(&server->static_leases_by_client_id, &dhcp_lease_hash_ops, &lease->client_id, lease);
         if (r < 0)
                 return r;
+        r = hashmap_ensure_put(&server->static_leases_by_address, NULL, UINT32_TO_PTR(lease->address), lease);
+        if (r < 0)
+                return r;
 
         TAKE_PTR(lease);
         return 0;
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
index 1acca30..57dd91f 100644
--- a/src/libsystemd-network/sd-dhcp6-client.c
+++ b/src/libsystemd-network/sd-dhcp6-client.c
@@ -11,141 +11,27 @@
 #include "sd-dhcp6-client.h"
 
 #include "alloc-util.h"
+#include "device-util.h"
 #include "dhcp-identifier.h"
 #include "dhcp6-internal.h"
 #include "dhcp6-lease-internal.h"
-#include "dhcp6-protocol.h"
 #include "dns-domain.h"
 #include "event-util.h"
 #include "fd-util.h"
 #include "hexdecoct.h"
 #include "hostname-util.h"
 #include "in-addr-util.h"
-#include "network-common.h"
+#include "io-util.h"
 #include "random-util.h"
 #include "socket-util.h"
-#include "string-table.h"
+#include "sort-util.h"
 #include "strv.h"
-#include "util.h"
 #include "web-util.h"
 
-#define MAX_MAC_ADDR_LEN INFINIBAND_ALEN
-
-#define IRT_DEFAULT (1 * USEC_PER_DAY)
-#define IRT_MINIMUM (600 * USEC_PER_SEC)
-
-/* what to request from the server, addresses (IA_NA) and/or prefixes (IA_PD) */
-enum {
-        DHCP6_REQUEST_IA_NA                     = 1,
-        DHCP6_REQUEST_IA_TA                     = 2, /* currently not used */
-        DHCP6_REQUEST_IA_PD                     = 4,
-};
-
-struct sd_dhcp6_client {
-        unsigned n_ref;
-
-        enum DHCP6State state;
-        sd_event *event;
-        int event_priority;
-        int ifindex;
-        char *ifname;
-        DHCP6Address hint_pd_prefix;
-        struct in6_addr local_address;
-        uint8_t mac_addr[MAX_MAC_ADDR_LEN];
-        size_t mac_addr_len;
-        uint16_t arp_type;
-        DHCP6IA ia_na;
-        DHCP6IA ia_pd;
-        sd_event_source *timeout_t1;
-        sd_event_source *timeout_t2;
-        unsigned request;
-        be32_t transaction_id;
-        usec_t transaction_start;
-        struct sd_dhcp6_lease *lease;
-        int fd;
-        bool information_request;
-        bool iaid_set;
-        be16_t *req_opts;
-        size_t req_opts_len;
-        char *fqdn;
-        char *mudurl;
-        char **user_class;
-        char **vendor_class;
-        sd_event_source *receive_message;
-        usec_t retransmit_time;
-        uint8_t retransmit_count;
-        sd_event_source *timeout_resend;
-        sd_event_source *timeout_resend_expire;
-        sd_dhcp6_client_callback_t callback;
-        void *userdata;
-        struct duid duid;
-        size_t duid_len;
-        usec_t information_request_time_usec;
-        usec_t information_refresh_time_usec;
-        OrderedHashmap *extra_options;
-        OrderedHashmap *vendor_options;
-
-        /* Ignore ifindex when generating iaid. See dhcp_identifier_set_iaid(). */
-        bool test_mode;
-};
-
-static const uint16_t default_req_opts[] = {
-        SD_DHCP6_OPTION_DNS_SERVERS,
-        SD_DHCP6_OPTION_DOMAIN_LIST,
-        SD_DHCP6_OPTION_NTP_SERVER,
-        SD_DHCP6_OPTION_SNTP_SERVERS,
-};
-
-const char * dhcp6_message_type_table[_DHCP6_MESSAGE_MAX] = {
-        [DHCP6_SOLICIT] = "SOLICIT",
-        [DHCP6_ADVERTISE] = "ADVERTISE",
-        [DHCP6_REQUEST] = "REQUEST",
-        [DHCP6_CONFIRM] = "CONFIRM",
-        [DHCP6_RENEW] = "RENEW",
-        [DHCP6_REBIND] = "REBIND",
-        [DHCP6_REPLY] = "REPLY",
-        [DHCP6_RELEASE] = "RELEASE",
-        [DHCP6_DECLINE] = "DECLINE",
-        [DHCP6_RECONFIGURE] = "RECONFIGURE",
-        [DHCP6_INFORMATION_REQUEST] = "INFORMATION-REQUEST",
-        [DHCP6_RELAY_FORW] = "RELAY-FORW",
-        [DHCP6_RELAY_REPL] = "RELAY-REPL",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_type, int);
-
-const char * dhcp6_message_status_table[_DHCP6_STATUS_MAX] = {
-        [DHCP6_STATUS_SUCCESS]                      = "Success",
-        [DHCP6_STATUS_UNSPEC_FAIL]                  = "Unspecified failure",
-        [DHCP6_STATUS_NO_ADDRS_AVAIL]               = "No addresses available",
-        [DHCP6_STATUS_NO_BINDING]                   = "Binding unavailable",
-        [DHCP6_STATUS_NOT_ON_LINK]                  = "Not on link",
-        [DHCP6_STATUS_USE_MULTICAST]                = "Use multicast",
-        [DHCP6_STATUS_NO_PREFIX_AVAIL]              = "No prefix available",
-        [DHCP6_STATUS_UNKNOWN_QUERY_TYPE]           = "Unknown query type",
-        [DHCP6_STATUS_MALFORMED_QUERY]              = "Malformed query",
-        [DHCP6_STATUS_NOT_CONFIGURED]               = "Not configured",
-        [DHCP6_STATUS_NOT_ALLOWED]                  = "Not allowed",
-        [DHCP6_STATUS_QUERY_TERMINATED]             = "Query terminated",
-        [DHCP6_STATUS_DATA_MISSING]                 = "Data missing",
-        [DHCP6_STATUS_CATCHUP_COMPLETE]             = "Catch up complete",
-        [DHCP6_STATUS_NOT_SUPPORTED]                = "Not supported",
-        [DHCP6_STATUS_TLS_CONNECTION_REFUSED]       = "TLS connection refused",
-        [DHCP6_STATUS_ADDRESS_IN_USE]               = "Address in use",
-        [DHCP6_STATUS_CONFIGURATION_CONFLICT]       = "Configuration conflict",
-        [DHCP6_STATUS_MISSING_BINDING_INFORMATION]  = "Missing binding information",
-        [DHCP6_STATUS_OUTDATED_BINDING_INFORMATION] = "Outdated binding information",
-        [DHCP6_STATUS_SERVER_SHUTTING_DOWN]         = "Server shutting down",
-        [DHCP6_STATUS_DNS_UPDATE_NOT_SUPPORTED]     = "DNS update not supported",
-        [DHCP6_STATUS_EXCESSIVE_TIME_SKEW]          = "Excessive time skew",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_status, int);
-
 #define DHCP6_CLIENT_DONT_DESTROY(client) \
         _cleanup_(sd_dhcp6_client_unrefp) _unused_ sd_dhcp6_client *_dont_destroy_##client = sd_dhcp6_client_ref(client)
 
-static int client_start(sd_dhcp6_client *client, enum DHCP6State state);
+static int client_start_transaction(sd_dhcp6_client *client, DHCP6State state);
 
 int sd_dhcp6_client_set_callback(
                 sd_dhcp6_client *client,
@@ -162,8 +48,8 @@
 
 int sd_dhcp6_client_set_ifindex(sd_dhcp6_client *client, int ifindex) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
         assert_return(ifindex > 0, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
 
         client->ifindex = ifindex;
         return 0;
@@ -179,11 +65,19 @@
         return free_and_strdup(&client->ifname, ifname);
 }
 
-const char *sd_dhcp6_client_get_ifname(sd_dhcp6_client *client) {
-        if (!client)
-                return NULL;
+int sd_dhcp6_client_get_ifname(sd_dhcp6_client *client, const char **ret) {
+        int r;
 
-        return get_ifname(client->ifindex, &client->ifname);
+        assert_return(client, -EINVAL);
+
+        r = get_ifname(client->ifindex, &client->ifname);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = client->ifname;
+
+        return 0;
 }
 
 int sd_dhcp6_client_set_local_address(
@@ -191,9 +85,9 @@
                 const struct in6_addr *local_address) {
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
         assert_return(local_address, -EINVAL);
         assert_return(in6_addr_is_link_local(local_address) > 0, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
 
         client->local_address = *local_address;
 
@@ -202,13 +96,16 @@
 
 int sd_dhcp6_client_set_mac(
                 sd_dhcp6_client *client,
-                const uint8_t *addr, size_t addr_len,
+                const uint8_t *addr,
+                size_t addr_len,
                 uint16_t arp_type) {
 
         assert_return(client, -EINVAL);
         assert_return(addr, -EINVAL);
-        assert_return(addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(addr_len <= sizeof(client->hw_addr.bytes), -EINVAL);
+
+        /* Unlike the other setters, it is OK to set a new MAC address while the client is running,
+         * as the MAC address is used only when setting DUID or IAID. */
 
         if (arp_type == ARPHRD_ETHER)
                 assert_return(addr_len == ETH_ALEN, -EINVAL);
@@ -216,17 +113,12 @@
                 assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
         else {
                 client->arp_type = ARPHRD_NONE;
-                client->mac_addr_len = 0;
+                client->hw_addr.length = 0;
                 return 0;
         }
 
-        if (client->mac_addr_len == addr_len &&
-            memcmp(&client->mac_addr, addr, addr_len) == 0)
-                return 0;
-
-        memcpy(&client->mac_addr, addr, addr_len);
-        client->mac_addr_len = addr_len;
         client->arp_type = arp_type;
+        hw_addr_set(&client->hw_addr, addr, addr_len);
 
         return 0;
 }
@@ -234,25 +126,47 @@
 int sd_dhcp6_client_set_prefix_delegation_hint(
                 sd_dhcp6_client *client,
                 uint8_t prefixlen,
-                const struct in6_addr *pd_address) {
+                const struct in6_addr *pd_prefix) {
+
+        _cleanup_free_ DHCP6Address *prefix = NULL;
 
         assert_return(client, -EINVAL);
-        assert_return(pd_address, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
-        client->hint_pd_prefix.iapdprefix.address = *pd_address;
-        client->hint_pd_prefix.iapdprefix.prefixlen = prefixlen;
+        if (!pd_prefix) {
+                /* clear previous assignments. */
+                dhcp6_ia_clear_addresses(&client->ia_pd);
+                return 0;
+        }
 
-        return 0;
+        assert_return(prefixlen > 0 && prefixlen <= 128, -EINVAL);
+
+        prefix = new(DHCP6Address, 1);
+        if (!prefix)
+                return -ENOMEM;
+
+        *prefix = (DHCP6Address) {
+                .iapdprefix.address = *pd_prefix,
+                .iapdprefix.prefixlen = prefixlen,
+        };
+
+        LIST_PREPEND(addresses, client->ia_pd.addresses, TAKE_PTR(prefix));
+        return 1;
 }
 
 int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client, sd_dhcp6_option *v) {
         int r;
 
         assert_return(client, -EINVAL);
-        assert_return(v, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
-        r = ordered_hashmap_ensure_put(&client->vendor_options, &dhcp6_option_hash_ops, v, v);
+        if (!v) {
+                /* Clear the previous assignments. */
+                ordered_set_clear(client->vendor_options);
+                return 0;
+        }
+
+        r = ordered_set_ensure_put(&client->vendor_options, &dhcp6_option_hash_ops, v);
         if (r < 0)
                 return r;
 
@@ -262,10 +176,12 @@
 }
 
 static int client_ensure_duid(sd_dhcp6_client *client) {
+        assert(client);
+
         if (client->duid_len != 0)
                 return 0;
 
-        return dhcp_identifier_set_duid_en(&client->duid, &client->duid_len);
+        return dhcp_identifier_set_duid_en(client->test_mode, &client->duid, &client->duid_len);
 }
 
 /**
@@ -275,15 +191,15 @@
  */
 static int dhcp6_client_set_duid_internal(
                 sd_dhcp6_client *client,
-                uint16_t duid_type,
+                DUIDType duid_type,
                 const void *duid,
                 size_t duid_len,
                 usec_t llt_time) {
         int r;
 
         assert_return(client, -EINVAL);
-        assert_return(duid_len == 0 || duid != NULL, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
+        assert_return(duid_len == 0 || duid, -EINVAL);
 
         if (duid) {
                 r = dhcp_validate_duid_len(duid_type, duid_len, true);
@@ -292,43 +208,25 @@
                         if (r < 0)
                                 return log_dhcp6_client_errno(client, r, "Failed to validate length of DUID: %m");
 
-                        log_dhcp6_client(client, "Using DUID of type %u of incorrect length, proceeding.", duid_type);
+                        log_dhcp6_client(client, "Using DUID of type %i of incorrect length, proceeding.", duid_type);
                 }
 
                 client->duid.type = htobe16(duid_type);
                 memcpy(&client->duid.raw.data, duid, duid_len);
                 client->duid_len = sizeof(client->duid.type) + duid_len;
-        } else
-                switch (duid_type) {
-                case DUID_TYPE_LLT:
-                        if (client->mac_addr_len == 0)
-                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LLT, MAC address is not set.");
 
-                        r = dhcp_identifier_set_duid_llt(&client->duid, llt_time, client->mac_addr, client->mac_addr_len, client->arp_type, &client->duid_len);
-                        if (r < 0)
-                                return log_dhcp6_client_errno(client, r, "Failed to set DUID-LLT: %m");
-                        break;
-                case DUID_TYPE_EN:
-                        r = dhcp_identifier_set_duid_en(&client->duid, &client->duid_len);
-                        if (r < 0)
-                                return log_dhcp6_client_errno(client, r, "Failed to set DUID-EN: %m");
-                        break;
-                case DUID_TYPE_LL:
-                        if (client->mac_addr_len == 0)
-                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LL, MAC address is not set.");
-
-                        r = dhcp_identifier_set_duid_ll(&client->duid, client->mac_addr, client->mac_addr_len, client->arp_type, &client->duid_len);
-                        if (r < 0)
-                                return log_dhcp6_client_errno(client, r, "Failed to set DUID-LL: %m");
-                        break;
-                case DUID_TYPE_UUID:
-                        r = dhcp_identifier_set_duid_uuid(&client->duid, &client->duid_len);
-                        if (r < 0)
-                                return log_dhcp6_client_errno(client, r, "Failed to set DUID-UUID: %m");
-                        break;
-                default:
-                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "Invalid DUID type");
-                }
+        } else {
+                r = dhcp_identifier_set_duid(duid_type, &client->hw_addr, client->arp_type, llt_time,
+                                             client->test_mode, &client->duid, &client->duid_len);
+                if (r == -EOPNOTSUPP)
+                        return log_dhcp6_client_errno(client, r,
+                                                      "Failed to set %s. MAC address is not set or "
+                                                      "interface type is not supported.",
+                                                      duid_type_to_string(duid_type));
+                if (r < 0)
+                        return log_dhcp6_client_errno(client, r, "Failed to set %s: %m",
+                                                      duid_type_to_string(duid_type));
+        }
 
         return 0;
 }
@@ -347,14 +245,6 @@
         return dhcp6_client_set_duid_internal(client, DUID_TYPE_LLT, NULL, 0, llt_time);
 }
 
-static const char* const dhcp6_duid_type_table[_DUID_TYPE_MAX] = {
-        [DUID_TYPE_LLT]  = "DUID-LLT",
-        [DUID_TYPE_EN]   = "DUID-EN/Vendor",
-        [DUID_TYPE_LL]   = "DUID-LL",
-        [DUID_TYPE_UUID] = "UUID",
-};
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(dhcp6_duid_type, DUIDType);
-
 int sd_dhcp6_client_duid_as_string(
                 sd_dhcp6_client *client,
                 char **duid) {
@@ -366,7 +256,7 @@
         assert_return(client->duid_len > 0, -ENODATA);
         assert_return(duid, -EINVAL);
 
-        v = dhcp6_duid_type_to_string(be16toh(client->duid.type));
+        v = duid_type_to_string(be16toh(client->duid.type));
         if (v) {
                 s = strdup(v);
                 if (!s)
@@ -392,38 +282,61 @@
 
 int sd_dhcp6_client_set_iaid(sd_dhcp6_client *client, uint32_t iaid) {
         assert_return(client, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
-        client->ia_na.ia_na.id = htobe32(iaid);
-        client->ia_pd.ia_pd.id = htobe32(iaid);
+        client->ia_na.header.id = htobe32(iaid);
+        client->ia_pd.header.id = htobe32(iaid);
         client->iaid_set = true;
 
         return 0;
 }
 
+static int client_ensure_iaid(sd_dhcp6_client *client) {
+        int r;
+        uint32_t iaid;
+
+        assert(client);
+
+        if (client->iaid_set)
+                return 0;
+
+        r = dhcp_identifier_set_iaid(client->dev, &client->hw_addr,
+                                     /* legacy_unstable_byteorder = */ true,
+                                     &iaid);
+        if (r < 0)
+                return r;
+
+        client->ia_na.header.id = iaid;
+        client->ia_pd.header.id = iaid;
+        client->iaid_set = true;
+
+        return 0;
+}
+
+int sd_dhcp6_client_get_iaid(sd_dhcp6_client *client, uint32_t *iaid) {
+        assert_return(client, -EINVAL);
+        assert_return(iaid, -EINVAL);
+
+        if (!client->iaid_set)
+                return -ENODATA;
+
+        *iaid = be32toh(client->ia_na.header.id);
+
+        return 0;
+}
+
 void dhcp6_client_set_test_mode(sd_dhcp6_client *client, bool test_mode) {
         assert(client);
 
         client->test_mode = test_mode;
 }
 
-int sd_dhcp6_client_get_iaid(sd_dhcp6_client *client, uint32_t *iaid) {
-        assert_return(client, -EINVAL);
-        assert_return(iaid, -EINVAL);
-
-        if (!client->iaid_set)
-                return -ENODATA;
-
-        *iaid = be32toh(client->ia_na.ia_na.id);
-
-        return 0;
-}
-
 int sd_dhcp6_client_set_fqdn(
                 sd_dhcp6_client *client,
                 const char *fqdn) {
 
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
         /* Make sure FQDN qualifies as DNS and as Linux hostname */
         if (fqdn &&
@@ -435,7 +348,7 @@
 
 int sd_dhcp6_client_set_information_request(sd_dhcp6_client *client, int enabled) {
         assert_return(client, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
         client->information_request = enabled;
 
@@ -451,30 +364,36 @@
         return 0;
 }
 
+static int be16_compare_func(const be16_t *a, const be16_t *b) {
+        return CMP(be16toh(*a), be16toh(*b));
+}
+
 int sd_dhcp6_client_set_request_option(sd_dhcp6_client *client, uint16_t option) {
-        size_t t;
+        be16_t opt;
 
         assert_return(client, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
-        if (option <= 0 || option >= UINT8_MAX)
+        if (!dhcp6_option_can_request(option))
                 return -EINVAL;
 
-        for (t = 0; t < client->req_opts_len; t++)
-                if (client->req_opts[t] == htobe16(option))
-                        return -EEXIST;
+        opt = htobe16(option);
+        if (typesafe_bsearch(&opt, client->req_opts, client->n_req_opts, be16_compare_func))
+                return -EEXIST;
 
-        if (!GREEDY_REALLOC(client->req_opts, client->req_opts_len + 1))
+        if (!GREEDY_REALLOC(client->req_opts, client->n_req_opts + 1))
                 return -ENOMEM;
 
-        client->req_opts[client->req_opts_len++] = htobe16(option);
+        client->req_opts[client->n_req_opts++] = opt;
 
+        /* Sort immediately to make the above binary search will work for the next time. */
+        typesafe_qsort(client->req_opts, client->n_req_opts, be16_compare_func);
         return 0;
 }
 
 int sd_dhcp6_client_set_request_mud_url(sd_dhcp6_client *client, const char *mudurl) {
         assert_return(client, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
         assert_return(mudurl, -EINVAL);
         assert_return(strlen(mudurl) <= UINT8_MAX, -EINVAL);
         assert_return(http_url_is_valid(mudurl), -EINVAL);
@@ -483,11 +402,10 @@
 }
 
 int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const *user_class) {
-        char * const *p;
         char **s;
 
         assert_return(client, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
         assert_return(!strv_isempty(user_class), -EINVAL);
 
         STRV_FOREACH(p, user_class) {
@@ -505,11 +423,10 @@
 }
 
 int sd_dhcp6_client_set_request_vendor_class(sd_dhcp6_client *client, char * const *vendor_class) {
-        char * const *p;
         char **s;
 
         assert_return(client, -EINVAL);
-        assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
         assert_return(!strv_isempty(vendor_class), -EINVAL);
 
         STRV_FOREACH(p, vendor_class) {
@@ -530,15 +447,16 @@
         assert_return(client, -EINVAL);
         assert_return(delegation, -EINVAL);
 
-        *delegation = FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD);
+        *delegation = FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD);
 
         return 0;
 }
 
 int sd_dhcp6_client_set_prefix_delegation(sd_dhcp6_client *client, int delegation) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
-        SET_FLAG(client->request, DHCP6_REQUEST_IA_PD, delegation);
+        SET_FLAG(client->request_ia, DHCP6_REQUEST_IA_PD, delegation);
 
         return 0;
 }
@@ -547,24 +465,44 @@
         assert_return(client, -EINVAL);
         assert_return(request, -EINVAL);
 
-        *request = FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA);
+        *request = FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA);
 
         return 0;
 }
 
 int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client, int request) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
-        SET_FLAG(client->request, DHCP6_REQUEST_IA_NA, request);
+        SET_FLAG(client->request_ia, DHCP6_REQUEST_IA_NA, request);
 
         return 0;
 }
 
-int sd_dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id) {
+int dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id) {
+        assert(client);
+        assert(client->test_mode);
+
+        /* This is for tests or fuzzers. */
+
+        client->transaction_id = transaction_id & htobe32(0x00ffffff);
+
+        return 0;
+}
+
+int sd_dhcp6_client_set_rapid_commit(sd_dhcp6_client *client, int enable) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
-        client->transaction_id = transaction_id;
+        client->rapid_commit = enable;
+        return 0;
+}
 
+int sd_dhcp6_client_set_send_release(sd_dhcp6_client *client, int enable) {
+        assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
+
+        client->send_release = enable;
         return 0;
 }
 
@@ -594,6 +532,18 @@
         return 0;
 }
 
+static void client_set_state(sd_dhcp6_client *client, DHCP6State state) {
+        assert(client);
+
+        if (client->state == state)
+                return;
+
+        log_dhcp6_client(client, "State changed: %s -> %s",
+                         dhcp6_state_to_string(client->state), dhcp6_state_to_string(state));
+
+        client->state = state;
+}
+
 static void client_notify(sd_dhcp6_client *client, int event) {
         assert(client);
 
@@ -601,28 +551,23 @@
                 client->callback(client, event, client->userdata);
 }
 
-static int client_reset(sd_dhcp6_client *client) {
+static void client_cleanup(sd_dhcp6_client *client) {
         assert(client);
 
         client->lease = sd_dhcp6_lease_unref(client->lease);
 
-        client->receive_message =
-                sd_event_source_unref(client->receive_message);
+        /* Reset IRT here. Otherwise, we cannot restart the client in the information requesting mode,
+         * even though the lease is freed below. */
+        client->information_request_time_usec = 0;
+        client->information_refresh_time_usec = 0;
 
-        client->transaction_id = 0;
-        client->transaction_start = 0;
-
-        client->retransmit_time = 0;
-        client->retransmit_count = 0;
-
+        (void) event_source_disable(client->receive_message);
         (void) event_source_disable(client->timeout_resend);
-        (void) event_source_disable(client->timeout_resend_expire);
+        (void) event_source_disable(client->timeout_expire);
         (void) event_source_disable(client->timeout_t1);
         (void) event_source_disable(client->timeout_t2);
 
-        client->state = DHCP6_STATE_STOPPED;
-
-        return 0;
+        client_set_state(client, DHCP6_STATE_STOPPED);
 }
 
 static void client_stop(sd_dhcp6_client *client, int error) {
@@ -632,352 +577,295 @@
 
         client_notify(client, error);
 
-        client_reset(client);
+        client_cleanup(client);
 }
 
-static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
-        _cleanup_free_ DHCP6Message *message = NULL;
-        struct in6_addr all_servers =
-                IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT;
-        struct sd_dhcp6_option *j;
-        size_t len, optlen = 512;
-        uint8_t *opt;
+static int client_append_common_options_in_managed_mode(
+                sd_dhcp6_client *client,
+                uint8_t **buf,
+                size_t *offset,
+                const DHCP6IA *ia_na,
+                const DHCP6IA *ia_pd) {
+
         int r;
-        usec_t elapsed_usec;
-        be16_t elapsed_time;
 
         assert(client);
+        assert(IN_SET(client->state,
+                      DHCP6_STATE_SOLICITATION,
+                      DHCP6_STATE_REQUEST,
+                      DHCP6_STATE_RENEW,
+                      DHCP6_STATE_REBIND,
+                      DHCP6_STATE_STOPPING));
+        assert(buf);
+        assert(*buf);
+        assert(offset);
 
-        len = sizeof(DHCP6Message) + optlen;
+        if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA) && ia_na) {
+                r = dhcp6_option_append_ia(buf, offset, ia_na);
+                if (r < 0)
+                        return r;
+        }
 
-        message = malloc0(len);
-        if (!message)
-                return -ENOMEM;
+        if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD) && ia_pd) {
+                r = dhcp6_option_append_ia(buf, offset, ia_pd);
+                if (r < 0)
+                        return r;
+        }
 
-        opt = (uint8_t *)(message + 1);
+        if (client->state != DHCP6_STATE_STOPPING) {
+                r = dhcp6_option_append_fqdn(buf, offset, client->fqdn);
+                if (r < 0)
+                        return r;
+        }
 
-        message->transaction_id = client->transaction_id;
+        r = dhcp6_option_append_user_class(buf, offset, client->user_class);
+        if (r < 0)
+                return r;
 
-        switch(client->state) {
+        r = dhcp6_option_append_vendor_class(buf, offset, client->vendor_class);
+        if (r < 0)
+                return r;
+
+        r = dhcp6_option_append_vendor_option(buf, offset, client->vendor_options);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static DHCP6MessageType client_message_type_from_state(sd_dhcp6_client *client) {
+        assert(client);
+
+        switch (client->state) {
         case DHCP6_STATE_INFORMATION_REQUEST:
-                message->type = DHCP6_INFORMATION_REQUEST;
+                return DHCP6_MESSAGE_INFORMATION_REQUEST;
+        case DHCP6_STATE_SOLICITATION:
+                return DHCP6_MESSAGE_SOLICIT;
+        case DHCP6_STATE_REQUEST:
+                return DHCP6_MESSAGE_REQUEST;
+        case DHCP6_STATE_RENEW:
+                return DHCP6_MESSAGE_RENEW;
+        case DHCP6_STATE_REBIND:
+                return DHCP6_MESSAGE_REBIND;
+        case DHCP6_STATE_STOPPING:
+                return DHCP6_MESSAGE_RELEASE;
+        default:
+                assert_not_reached();
+        }
+}
 
-                if (client->mudurl) {
-                        r = dhcp6_option_append(&opt, &optlen,
-                                                SD_DHCP6_OPTION_MUD_URL, strlen(client->mudurl),
-                                                client->mudurl);
-                        if (r < 0)
-                                return r;
-                }
+static int client_append_oro(sd_dhcp6_client *client, uint8_t **buf, size_t *offset) {
+        _cleanup_free_ be16_t *p = NULL;
+        be16_t *req_opts;
+        size_t n;
 
+        assert(client);
+        assert(buf);
+        assert(*buf);
+        assert(offset);
+
+        switch (client->state) {
+        case DHCP6_STATE_INFORMATION_REQUEST:
+                n = client->n_req_opts;
+                p = new(be16_t, n + 2);
+                if (!p)
+                        return -ENOMEM;
+
+                memcpy_safe(p, client->req_opts, n * sizeof(be16_t));
+                p[n++] = htobe16(SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME); /* RFC 8415 section 21.23 */
+                p[n++] = htobe16(SD_DHCP6_OPTION_INF_MAX_RT); /* RFC 8415 section 21.25 */
+
+                typesafe_qsort(p, n, be16_compare_func);
+                req_opts = p;
                 break;
 
         case DHCP6_STATE_SOLICITATION:
-                message->type = DHCP6_SOLICIT;
+                n = client->n_req_opts;
+                p = new(be16_t, n + 1);
+                if (!p)
+                        return -ENOMEM;
 
-                r = dhcp6_option_append(&opt, &optlen,
-                                        SD_DHCP6_OPTION_RAPID_COMMIT, 0, NULL);
+                memcpy_safe(p, client->req_opts, n * sizeof(be16_t));
+                p[n++] = htobe16(SD_DHCP6_OPTION_SOL_MAX_RT); /* RFC 8415 section 21.24 */
+
+                typesafe_qsort(p, n, be16_compare_func);
+                req_opts = p;
+                break;
+
+        case DHCP6_STATE_STOPPING:
+                return 0;
+
+        default:
+                n = client->n_req_opts;
+                req_opts = client->req_opts;
+        }
+
+        if (n == 0)
+                return 0;
+
+        return dhcp6_option_append(buf, offset, SD_DHCP6_OPTION_ORO, n * sizeof(be16_t), req_opts);
+}
+
+static int client_append_mudurl(sd_dhcp6_client *client, uint8_t **buf, size_t *offset) {
+        assert(client);
+        assert(buf);
+        assert(*buf);
+        assert(offset);
+
+        if (!client->mudurl)
+                return 0;
+
+        if (client->state == DHCP6_STATE_STOPPING)
+                return 0;
+
+        return dhcp6_option_append(buf, offset, SD_DHCP6_OPTION_MUD_URL_V6,
+                                   strlen(client->mudurl), client->mudurl);
+}
+
+int dhcp6_client_send_message(sd_dhcp6_client *client) {
+        _cleanup_free_ uint8_t *buf = NULL;
+        struct in6_addr all_servers =
+                IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT;
+        struct sd_dhcp6_option *j;
+        usec_t elapsed_usec, time_now;
+        be16_t elapsed_time;
+        DHCP6Message *message;
+        size_t offset;
+        int r;
+
+        assert(client);
+        assert(client->event);
+
+        r = sd_event_now(client->event, CLOCK_BOOTTIME, &time_now);
+        if (r < 0)
+                return r;
+
+        if (!GREEDY_REALLOC0(buf, offsetof(DHCP6Message, options)))
+                return -ENOMEM;
+
+        message = (DHCP6Message*) buf;
+        message->transaction_id = client->transaction_id;
+        message->type = client_message_type_from_state(client);
+        offset = offsetof(DHCP6Message, options);
+
+        switch (client->state) {
+        case DHCP6_STATE_INFORMATION_REQUEST:
+                break;
+
+        case DHCP6_STATE_SOLICITATION:
+                if (client->rapid_commit) {
+                        r = dhcp6_option_append(&buf, &offset, SD_DHCP6_OPTION_RAPID_COMMIT, 0, NULL);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = client_append_common_options_in_managed_mode(client, &buf, &offset,
+                                                                 &client->ia_na, &client->ia_pd);
                 if (r < 0)
                         return r;
-
-                if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA)) {
-                        r = dhcp6_option_append_ia(&opt, &optlen,
-                                                   &client->ia_na);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->fqdn) {
-                        r = dhcp6_option_append_fqdn(&opt, &optlen, client->fqdn);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->mudurl) {
-                        r = dhcp6_option_append(&opt, &optlen,
-                                                SD_DHCP6_OPTION_MUD_URL, strlen(client->mudurl),
-                                                client->mudurl);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->user_class) {
-                        r = dhcp6_option_append_user_class(&opt, &optlen, client->user_class);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->vendor_class) {
-                        r = dhcp6_option_append_vendor_class(&opt, &optlen, client->vendor_class);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (!ordered_hashmap_isempty(client->vendor_options)) {
-                        r = dhcp6_option_append_vendor_option(&opt, &optlen,
-                                                       client->vendor_options);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD)) {
-                        r = dhcp6_option_append_pd(&opt, &optlen, &client->ia_pd, &client->hint_pd_prefix);
-                        if (r < 0)
-                                return r;
-                }
-
                 break;
 
         case DHCP6_STATE_REQUEST:
         case DHCP6_STATE_RENEW:
-
-                if (client->state == DHCP6_STATE_REQUEST)
-                        message->type = DHCP6_REQUEST;
-                else
-                        message->type = DHCP6_RENEW;
-
-                r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_SERVERID,
+        case DHCP6_STATE_STOPPING:
+                r = dhcp6_option_append(&buf, &offset, SD_DHCP6_OPTION_SERVERID,
                                         client->lease->serverid_len,
                                         client->lease->serverid);
                 if (r < 0)
                         return r;
 
-                if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA) && client->lease->ia.addresses) {
-                        r = dhcp6_option_append_ia(&opt, &optlen,
-                                                   &client->lease->ia);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->fqdn) {
-                        r = dhcp6_option_append_fqdn(&opt, &optlen, client->fqdn);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->mudurl) {
-                        r = dhcp6_option_append(&opt, &optlen,
-                                                SD_DHCP6_OPTION_MUD_URL, strlen(client->mudurl),
-                                                client->mudurl);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->user_class) {
-                        r = dhcp6_option_append_user_class(&opt, &optlen, client->user_class);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->vendor_class) {
-                        r = dhcp6_option_append_vendor_class(&opt, &optlen, client->vendor_class);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (!ordered_hashmap_isempty(client->vendor_options)) {
-                        r = dhcp6_option_append_vendor_option(&opt, &optlen, client->vendor_options);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) {
-                        r = dhcp6_option_append_pd(&opt, &optlen, &client->lease->pd, NULL);
-                        if (r < 0)
-                                return r;
-                }
-
-                break;
-
+                _fallthrough_;
         case DHCP6_STATE_REBIND:
-                message->type = DHCP6_REBIND;
 
-                if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA)) {
-                        r = dhcp6_option_append_ia(&opt, &optlen, &client->lease->ia);
-                        if (r < 0)
-                                return r;
-                }
+                assert(client->lease);
 
-                if (client->fqdn) {
-                        r = dhcp6_option_append_fqdn(&opt, &optlen, client->fqdn);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->mudurl) {
-                        r = dhcp6_option_append(&opt, &optlen,
-                                                SD_DHCP6_OPTION_MUD_URL, strlen(client->mudurl),
-                                                client->mudurl);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->user_class) {
-                        r = dhcp6_option_append_user_class(&opt, &optlen, client->user_class);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (client->vendor_class) {
-                        r = dhcp6_option_append_vendor_class(&opt, &optlen, client->vendor_class);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (!ordered_hashmap_isempty(client->vendor_options)) {
-                        r = dhcp6_option_append_vendor_option(&opt, &optlen, client->vendor_options);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD)) {
-                        r = dhcp6_option_append_pd(&opt, &optlen, &client->lease->pd, NULL);
-                        if (r < 0)
-                                return r;
-                }
-
+                r = client_append_common_options_in_managed_mode(client, &buf, &offset,
+                                                                 client->lease->ia_na, client->lease->ia_pd);
+                if (r < 0)
+                        return r;
                 break;
 
-        case DHCP6_STATE_STOPPED:
         case DHCP6_STATE_BOUND:
-                return -EINVAL;
+        case DHCP6_STATE_STOPPED:
+        default:
+                assert_not_reached();
         }
 
-        r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_ORO,
-                                client->req_opts_len * sizeof(be16_t),
-                                client->req_opts);
+        r = client_append_mudurl(client, &buf, &offset);
         if (r < 0)
                 return r;
 
-        assert(client->duid_len);
-        r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_CLIENTID,
+        r = client_append_oro(client, &buf, &offset);
+        if (r < 0)
+                return r;
+
+        assert(client->duid_len > 0);
+        r = dhcp6_option_append(&buf, &offset, SD_DHCP6_OPTION_CLIENTID,
                                 client->duid_len, &client->duid);
         if (r < 0)
                 return r;
 
-        elapsed_usec = time_now - client->transaction_start;
-        if (elapsed_usec < 0xffff * USEC_PER_MSEC * 10)
-                elapsed_time = htobe16(elapsed_usec / USEC_PER_MSEC / 10);
-        else
-                elapsed_time = 0xffff;
-
-        r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_ELAPSED_TIME,
-                                sizeof(elapsed_time), &elapsed_time);
-        if (r < 0)
-                return r;
-
         ORDERED_HASHMAP_FOREACH(j, client->extra_options) {
-                r = dhcp6_option_append(&opt, &optlen, j->option, j->length, j->data);
+                r = dhcp6_option_append(&buf, &offset, j->option, j->length, j->data);
                 if (r < 0)
                         return r;
         }
 
-        r = dhcp6_network_send_udp_socket(client->fd, &all_servers, message,
-                                          len - optlen);
+        /* RFC 8415 Section 21.9.
+         * A client MUST include an Elapsed Time option in messages to indicate how long the client has
+         * been trying to complete a DHCP message exchange. */
+        elapsed_usec = MIN(usec_sub_unsigned(time_now, client->transaction_start) / USEC_PER_MSEC / 10, (usec_t) UINT16_MAX);
+        elapsed_time = htobe16(elapsed_usec);
+        r = dhcp6_option_append(&buf, &offset, SD_DHCP6_OPTION_ELAPSED_TIME, sizeof(elapsed_time), &elapsed_time);
+        if (r < 0)
+                return r;
+
+        r = dhcp6_network_send_udp_socket(client->fd, &all_servers, buf, offset);
         if (r < 0)
                 return r;
 
         log_dhcp6_client(client, "Sent %s",
-                         dhcp6_message_type_to_string(message->type));
-
-        return 0;
-}
-
-static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_dhcp6_client *client = userdata;
-
-        assert(s);
-        assert(client);
-        assert(client->lease);
-
-        (void) event_source_disable(client->timeout_t2);
-
-        log_dhcp6_client(client, "Timeout T2");
-
-        client_start(client, DHCP6_STATE_REBIND);
-
-        return 0;
-}
-
-static int client_timeout_t1(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_dhcp6_client *client = userdata;
-
-        assert(s);
-        assert(client);
-        assert(client->lease);
-
-        (void) event_source_disable(client->timeout_t1);
-
-        log_dhcp6_client(client, "Timeout T1");
-
-        client_start(client, DHCP6_STATE_RENEW);
-
-        return 0;
-}
-
-static int client_timeout_resend_expire(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_dhcp6_client *client = userdata;
-        DHCP6_CLIENT_DONT_DESTROY(client);
-        enum DHCP6State state;
-
-        assert(s);
-        assert(client);
-        assert(client->event);
-
-        state = client->state;
-
-        client_stop(client, SD_DHCP6_CLIENT_EVENT_RESEND_EXPIRE);
-
-        /* RFC 3315, section 18.1.4., says that "...the client may choose to
-           use a Solicit message to locate a new DHCP server..." */
-        if (state == DHCP6_STATE_REBIND)
-                client_start(client, DHCP6_STATE_SOLICITATION);
-
+                         dhcp6_message_type_to_string(client_message_type_from_state(client)));
         return 0;
 }
 
 static usec_t client_timeout_compute_random(usec_t val) {
-        return val - (random_u32() % USEC_PER_SEC) * val / 10 / USEC_PER_SEC;
+        return usec_sub_unsigned(val, random_u64_range(val / 10));
 }
 
 static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userdata) {
-        int r = 0;
-        sd_dhcp6_client *client = userdata;
-        usec_t time_now, init_retransmit_time = 0, max_retransmit_time = 0;
-        usec_t max_retransmit_duration = 0;
-        uint8_t max_retransmit_count = 0;
-        char time_string[FORMAT_TIMESPAN_MAX];
+        sd_dhcp6_client *client = ASSERT_PTR(userdata);
+        usec_t init_retransmit_time, max_retransmit_time;
+        int r;
 
-        assert(s);
-        assert(client);
         assert(client->event);
 
-        (void) event_source_disable(client->timeout_resend);
-
         switch (client->state) {
         case DHCP6_STATE_INFORMATION_REQUEST:
                 init_retransmit_time = DHCP6_INF_TIMEOUT;
                 max_retransmit_time = DHCP6_INF_MAX_RT;
-
                 break;
 
         case DHCP6_STATE_SOLICITATION:
 
-                if (client->retransmit_count && client->lease) {
-                        client_start(client, DHCP6_STATE_REQUEST);
+                if (client->retransmit_count > 0 && client->lease) {
+                        (void) client_start_transaction(client, DHCP6_STATE_REQUEST);
                         return 0;
                 }
 
                 init_retransmit_time = DHCP6_SOL_TIMEOUT;
                 max_retransmit_time = DHCP6_SOL_MAX_RT;
-
                 break;
 
         case DHCP6_STATE_REQUEST:
+
+                if (client->retransmit_count >= DHCP6_REQ_MAX_RC) {
+                        client_stop(client, SD_DHCP6_CLIENT_EVENT_RETRANS_MAX);
+                        return 0;
+                }
+
                 init_retransmit_time = DHCP6_REQ_TIMEOUT;
                 max_retransmit_time = DHCP6_REQ_MAX_RT;
-                max_retransmit_count = DHCP6_REQ_MAX_RC;
-
                 break;
 
         case DHCP6_STATE_RENEW:
@@ -987,409 +875,385 @@
                 /* RFC 3315, section 18.1.3. says max retransmit duration will
                    be the remaining time until T2. Instead of setting MRD,
                    wait for T2 to trigger with the same end result */
-
                 break;
 
         case DHCP6_STATE_REBIND:
                 init_retransmit_time = DHCP6_REB_TIMEOUT;
                 max_retransmit_time = DHCP6_REB_MAX_RT;
 
-                if (event_source_is_enabled(client->timeout_resend_expire) <= 0) {
-                        uint32_t expire = 0;
-
-                        r = dhcp6_lease_ia_rebind_expire(&client->lease->ia, &expire);
-                        if (r < 0) {
-                                client_stop(client, r);
-                                return 0;
-                        }
-                        max_retransmit_duration = expire * USEC_PER_SEC;
-                }
-
+                /* Also, instead of setting MRD, the expire timer is already set in client_enter_bound_state(). */
                 break;
 
         case DHCP6_STATE_STOPPED:
+        case DHCP6_STATE_STOPPING:
         case DHCP6_STATE_BOUND:
-                return 0;
+        default:
+                assert_not_reached();
         }
 
-        if (max_retransmit_count > 0 &&
-            client->retransmit_count >= max_retransmit_count) {
-                client_stop(client, SD_DHCP6_CLIENT_EVENT_RETRANS_MAX);
-                return 0;
-        }
-
-        r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
-        if (r < 0)
-                goto error;
-
-        r = client_send_message(client, time_now);
+        r = dhcp6_client_send_message(client);
         if (r >= 0)
                 client->retransmit_count++;
 
         if (client->retransmit_time == 0) {
-                client->retransmit_time =
-                        client_timeout_compute_random(init_retransmit_time);
+                client->retransmit_time = client_timeout_compute_random(init_retransmit_time);
 
                 if (client->state == DHCP6_STATE_SOLICITATION)
                         client->retransmit_time += init_retransmit_time / 10;
 
-        } else {
-                if (max_retransmit_time > 0 &&
-                    client->retransmit_time > max_retransmit_time / 2)
-                        client->retransmit_time = client_timeout_compute_random(max_retransmit_time);
-                else
-                        client->retransmit_time += client_timeout_compute_random(client->retransmit_time);
-        }
+        } else if (client->retransmit_time > max_retransmit_time / 2)
+                client->retransmit_time = client_timeout_compute_random(max_retransmit_time);
+        else
+                client->retransmit_time += client_timeout_compute_random(client->retransmit_time);
 
         log_dhcp6_client(client, "Next retransmission in %s",
-                         format_timespan(time_string, FORMAT_TIMESPAN_MAX, client->retransmit_time, USEC_PER_SEC));
+                         FORMAT_TIMESPAN(client->retransmit_time, USEC_PER_SEC));
 
-        r = event_reset_time(client->event, &client->timeout_resend,
-                             clock_boottime_or_monotonic(),
-                             time_now + client->retransmit_time, 10 * USEC_PER_MSEC,
-                             client_timeout_resend, client,
-                             client->event_priority, "dhcp6-resend-timer", true);
-        if (r < 0)
-                goto error;
-
-        if (max_retransmit_duration > 0 && event_source_is_enabled(client->timeout_resend_expire) <= 0) {
-
-                log_dhcp6_client(client, "Max retransmission duration %"PRIu64" secs",
-                                 max_retransmit_duration / USEC_PER_SEC);
-
-                r = event_reset_time(client->event, &client->timeout_resend_expire,
-                                     clock_boottime_or_monotonic(),
-                                     time_now + max_retransmit_duration, USEC_PER_SEC,
-                                     client_timeout_resend_expire, client,
-                                     client->event_priority, "dhcp6-resend-expire-timer", true);
-                if (r < 0)
-                        goto error;
-        }
-
-error:
+        r = event_reset_time_relative(client->event, &client->timeout_resend,
+                                      CLOCK_BOOTTIME,
+                                      client->retransmit_time, 10 * USEC_PER_MSEC,
+                                      client_timeout_resend, client,
+                                      client->event_priority, "dhcp6-resend-timer", true);
         if (r < 0)
                 client_stop(client, r);
 
         return 0;
 }
 
-static int client_ensure_iaid(sd_dhcp6_client *client) {
+static int client_start_transaction(sd_dhcp6_client *client, DHCP6State state) {
         int r;
-        uint32_t iaid;
 
         assert(client);
+        assert(client->event);
 
-        if (client->iaid_set)
-                return 0;
+        switch (state) {
+        case DHCP6_STATE_INFORMATION_REQUEST:
+        case DHCP6_STATE_SOLICITATION:
+                assert(client->state == DHCP6_STATE_STOPPED);
+                break;
+        case DHCP6_STATE_REQUEST:
+                assert(client->state == DHCP6_STATE_SOLICITATION);
+                break;
+        case DHCP6_STATE_RENEW:
+                assert(client->state == DHCP6_STATE_BOUND);
+                break;
+        case DHCP6_STATE_REBIND:
+                assert(IN_SET(client->state, DHCP6_STATE_BOUND, DHCP6_STATE_RENEW));
+                break;
+        case DHCP6_STATE_STOPPED:
+        case DHCP6_STATE_STOPPING:
+        case DHCP6_STATE_BOUND:
+        default:
+                assert_not_reached();
+        }
 
-        r = dhcp_identifier_set_iaid(client->ifindex, client->mac_addr, client->mac_addr_len,
-                                     /* legacy_unstable_byteorder = */ true,
-                                     /* use_mac = */ client->test_mode,
-                                     &iaid);
+        client_set_state(client, state);
+
+        client->retransmit_time = 0;
+        client->retransmit_count = 0;
+        client->transaction_id = random_u32() & htobe32(0x00ffffff);
+
+        r = sd_event_now(client->event, CLOCK_BOOTTIME, &client->transaction_start);
         if (r < 0)
-                return r;
+                goto error;
 
-        client->ia_na.ia_na.id = iaid;
-        client->ia_pd.ia_pd.id = iaid;
-        client->iaid_set = true;
+        r = event_reset_time(client->event, &client->timeout_resend,
+                             CLOCK_BOOTTIME,
+                             0, 0,
+                             client_timeout_resend, client,
+                             client->event_priority, "dhcp6-resend-timeout", true);
+        if (r < 0)
+                goto error;
+
+        r = sd_event_source_set_enabled(client->receive_message, SD_EVENT_ON);
+        if (r < 0)
+                goto error;
+
+        return 0;
+
+error:
+        client_stop(client, r);
+        return r;
+}
+
+static int client_timeout_expire(sd_event_source *s, uint64_t usec, void *userdata) {
+        sd_dhcp6_client *client = ASSERT_PTR(userdata);
+        DHCP6_CLIENT_DONT_DESTROY(client);
+        DHCP6State state;
+
+        (void) event_source_disable(client->timeout_expire);
+        (void) event_source_disable(client->timeout_t2);
+        (void) event_source_disable(client->timeout_t1);
+
+        state = client->state;
+
+        client_stop(client, SD_DHCP6_CLIENT_EVENT_RESEND_EXPIRE);
+
+        /* RFC 3315, section 18.1.4., says that "...the client may choose to
+           use a Solicit message to locate a new DHCP server..." */
+        if (state == DHCP6_STATE_REBIND)
+                (void) client_start_transaction(client, DHCP6_STATE_SOLICITATION);
 
         return 0;
 }
 
-static int client_parse_message(
+static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata) {
+        sd_dhcp6_client *client = ASSERT_PTR(userdata);
+
+        (void) event_source_disable(client->timeout_t2);
+        (void) event_source_disable(client->timeout_t1);
+
+        log_dhcp6_client(client, "Timeout T2");
+
+        (void) client_start_transaction(client, DHCP6_STATE_REBIND);
+
+        return 0;
+}
+
+static int client_timeout_t1(sd_event_source *s, uint64_t usec, void *userdata) {
+        sd_dhcp6_client *client = ASSERT_PTR(userdata);
+
+        (void) event_source_disable(client->timeout_t1);
+
+        log_dhcp6_client(client, "Timeout T1");
+
+        (void) client_start_transaction(client, DHCP6_STATE_RENEW);
+
+        return 0;
+}
+
+static int client_enter_bound_state(sd_dhcp6_client *client) {
+        usec_t lifetime_t1, lifetime_t2, lifetime_valid;
+        int r;
+
+        assert(client);
+        assert(client->lease);
+        assert(IN_SET(client->state,
+                      DHCP6_STATE_SOLICITATION,
+                      DHCP6_STATE_REQUEST,
+                      DHCP6_STATE_RENEW,
+                      DHCP6_STATE_REBIND));
+
+        (void) event_source_disable(client->receive_message);
+        (void) event_source_disable(client->timeout_resend);
+
+        r = dhcp6_lease_get_lifetime(client->lease, &lifetime_t1, &lifetime_t2, &lifetime_valid);
+        if (r < 0)
+                goto error;
+
+        lifetime_t2 = client_timeout_compute_random(lifetime_t2);
+        lifetime_t1 = client_timeout_compute_random(MIN(lifetime_t1, lifetime_t2));
+
+        if (lifetime_t1 == USEC_INFINITY) {
+                log_dhcp6_client(client, "Infinite T1");
+                event_source_disable(client->timeout_t1);
+        } else {
+                log_dhcp6_client(client, "T1 expires in %s", FORMAT_TIMESPAN(lifetime_t1, USEC_PER_SEC));
+                r = event_reset_time_relative(client->event, &client->timeout_t1,
+                                              CLOCK_BOOTTIME,
+                                              lifetime_t1, 10 * USEC_PER_SEC,
+                                              client_timeout_t1, client,
+                                              client->event_priority, "dhcp6-t1-timeout", true);
+                if (r < 0)
+                        goto error;
+        }
+
+        if (lifetime_t2 == USEC_INFINITY) {
+                log_dhcp6_client(client, "Infinite T2");
+                event_source_disable(client->timeout_t2);
+        } else {
+                log_dhcp6_client(client, "T2 expires in %s", FORMAT_TIMESPAN(lifetime_t2, USEC_PER_SEC));
+                r = event_reset_time_relative(client->event, &client->timeout_t2,
+                                              CLOCK_BOOTTIME,
+                                              lifetime_t2, 10 * USEC_PER_SEC,
+                                              client_timeout_t2, client,
+                                              client->event_priority, "dhcp6-t2-timeout", true);
+                if (r < 0)
+                        goto error;
+        }
+
+        if (lifetime_valid == USEC_INFINITY) {
+                log_dhcp6_client(client, "Infinite valid lifetime");
+                event_source_disable(client->timeout_expire);
+        } else {
+                log_dhcp6_client(client, "Valid lifetime expires in %s", FORMAT_TIMESPAN(lifetime_valid, USEC_PER_SEC));
+
+                r = event_reset_time_relative(client->event, &client->timeout_expire,
+                                              CLOCK_BOOTTIME,
+                                              lifetime_valid, USEC_PER_SEC,
+                                              client_timeout_expire, client,
+                                              client->event_priority, "dhcp6-lease-expire", true);
+                if (r < 0)
+                        goto error;
+        }
+
+        client_set_state(client, DHCP6_STATE_BOUND);
+        client_notify(client, SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE);
+        return 0;
+
+error:
+        client_stop(client, r);
+        return r;
+}
+
+static int log_invalid_message_type(sd_dhcp6_client *client, const DHCP6Message *message) {
+        const char *type_str;
+
+        assert(client);
+        assert(message);
+
+        type_str = dhcp6_message_type_to_string(message->type);
+        if (type_str)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received unexpected %s message, ignoring.", type_str);
+        else
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "Received unsupported message type %u, ignoring.", message->type);
+}
+
+static int client_process_information(
                 sd_dhcp6_client *client,
                 DHCP6Message *message,
                 size_t len,
-                sd_dhcp6_lease *lease) {
+                const triple_timestamp *timestamp,
+                const struct in6_addr *server_address) {
 
-        uint16_t ia_na_status = 0, ia_pd_status = 0;
-        uint32_t lt_t1 = ~0, lt_t2 = ~0;
-        usec_t irt = IRT_DEFAULT;
-        bool clientid = false;
-        size_t pos = 0;
+        _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
         int r;
 
         assert(client);
         assert(message);
-        assert(len >= sizeof(DHCP6Message));
-        assert(lease);
 
-        len -= sizeof(DHCP6Message);
+        if (message->type != DHCP6_MESSAGE_REPLY)
+                return log_invalid_message_type(client, message);
 
-        while (pos < len) {
-                DHCP6Option *option = (DHCP6Option *) &message->options[pos];
-                uint16_t optcode, optlen;
-                int  status;
-                uint8_t *optval;
+        r = dhcp6_lease_new_from_message(client, message, len, timestamp, server_address, &lease);
+        if (r < 0)
+                return log_dhcp6_client_errno(client, r, "Failed to process received reply message, ignoring: %m");
 
-                if (len < pos + offsetof(DHCP6Option, data))
-                        return -ENOBUFS;
+        log_dhcp6_client(client, "Processed %s message", dhcp6_message_type_to_string(message->type));
 
-                optcode = be16toh(option->code);
-                optlen = be16toh(option->len);
-                optval = option->data;
+        sd_dhcp6_lease_unref(client->lease);
+        client->lease = TAKE_PTR(lease);
 
-                if (len < pos + offsetof(DHCP6Option, data) + optlen)
-                        return -ENOBUFS;
+        /* Do not call client_stop() here, as it frees the acquired lease. */
+        (void) event_source_disable(client->receive_message);
+        (void) event_source_disable(client->timeout_resend);
+        client_set_state(client, DHCP6_STATE_STOPPED);
 
-                switch (optcode) {
-                case SD_DHCP6_OPTION_CLIENTID:
-                        if (clientid) {
-                                log_dhcp6_client(client, "%s contains multiple clientids",
-                                                 dhcp6_message_type_to_string(message->type));
-                                return -EINVAL;
-                        }
-
-                        if (optlen != client->duid_len ||
-                            memcmp(&client->duid, optval, optlen) != 0) {
-                                log_dhcp6_client(client, "%s DUID does not match",
-                                                 dhcp6_message_type_to_string(message->type));
-
-                                return -EINVAL;
-                        }
-                        clientid = true;
-
-                        break;
-
-                case SD_DHCP6_OPTION_SERVERID:
-                        r = dhcp6_lease_get_serverid(lease, NULL, NULL);
-                        if (r >= 0) {
-                                log_dhcp6_client(client, "%s contains multiple serverids",
-                                                 dhcp6_message_type_to_string(message->type));
-                                return -EINVAL;
-                        }
-
-                        r = dhcp6_lease_set_serverid(lease, optval, optlen);
-                        if (r < 0)
-                                return r;
-
-                        break;
-
-                case SD_DHCP6_OPTION_PREFERENCE:
-                        if (optlen != 1)
-                                return -EINVAL;
-
-                        r = dhcp6_lease_set_preference(lease, optval[0]);
-                        if (r < 0)
-                                return r;
-
-                        break;
-
-                case SD_DHCP6_OPTION_STATUS_CODE:
-                        status = dhcp6_option_parse_status(option, optlen + sizeof(DHCP6Option));
-                        if (status < 0)
-                                return status;
-
-                        if (status > 0) {
-                                log_dhcp6_client(client, "%s Status %s",
-                                                 dhcp6_message_type_to_string(message->type),
-                                                 dhcp6_message_status_to_string(status));
-
-                                return -EINVAL;
-                        }
-
-                        break;
-
-                case SD_DHCP6_OPTION_IA_NA:
-                        if (client->state == DHCP6_STATE_INFORMATION_REQUEST) {
-                                log_dhcp6_client(client, "Information request ignoring IA NA option");
-
-                                break;
-                        }
-
-                        r = dhcp6_option_parse_ia(client, option, client->ia_pd.ia_na.id, &lease->ia, &ia_na_status);
-                        if (r < 0 && r != -ENOANO)
-                                return r;
-
-                        if (ia_na_status == DHCP6_STATUS_NO_ADDRS_AVAIL) {
-                                pos += offsetof(DHCP6Option, data) + optlen;
-                                continue;
-                        }
-
-                        if (lease->ia.addresses) {
-                                lt_t1 = MIN(lt_t1, be32toh(lease->ia.ia_na.lifetime_t1));
-                                lt_t2 = MIN(lt_t2, be32toh(lease->ia.ia_na.lifetime_t2));
-                        }
-
-                        break;
-
-                case SD_DHCP6_OPTION_IA_PD:
-                        if (client->state == DHCP6_STATE_INFORMATION_REQUEST) {
-                                log_dhcp6_client(client, "Information request ignoring IA PD option");
-
-                                break;
-                        }
-
-                        r = dhcp6_option_parse_ia(client, option, client->ia_pd.ia_pd.id, &lease->pd, &ia_pd_status);
-                        if (r < 0 && r != -ENOANO)
-                                return r;
-
-                        if (ia_pd_status == DHCP6_STATUS_NO_PREFIX_AVAIL) {
-                                pos += offsetof(DHCP6Option, data) + optlen;
-                                continue;
-                        }
-
-                        if (lease->pd.addresses) {
-                                lt_t1 = MIN(lt_t1, be32toh(lease->pd.ia_pd.lifetime_t1));
-                                lt_t2 = MIN(lt_t2, be32toh(lease->pd.ia_pd.lifetime_t2));
-                        }
-
-                        break;
-
-                case SD_DHCP6_OPTION_RAPID_COMMIT:
-                        r = dhcp6_lease_set_rapid_commit(lease);
-                        if (r < 0)
-                                return r;
-
-                        break;
-
-                case SD_DHCP6_OPTION_DNS_SERVERS:
-                        r = dhcp6_lease_set_dns(lease, optval, optlen);
-                        if (r < 0)
-                                return r;
-
-                        break;
-
-                case SD_DHCP6_OPTION_DOMAIN_LIST:
-                        r = dhcp6_lease_set_domains(lease, optval, optlen);
-                        if (r < 0)
-                                return r;
-
-                        break;
-
-                case SD_DHCP6_OPTION_NTP_SERVER:
-                        r = dhcp6_lease_set_ntp(lease, optval, optlen);
-                        if (r < 0)
-                                return r;
-
-                        break;
-
-                case SD_DHCP6_OPTION_SNTP_SERVERS:
-                        r = dhcp6_lease_add_sntp(lease, optval, optlen);
-                        if (r < 0)
-                                return r;
-
-                        break;
-
-                case SD_DHCP6_OPTION_FQDN:
-                        r = dhcp6_lease_set_fqdn(lease, optval, optlen);
-                        if (r < 0)
-                                return r;
-
-                        break;
-
-                case SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME:
-                        if (optlen != 4)
-                                return -EINVAL;
-
-                        irt = unaligned_read_be32((be32_t *) optval) * USEC_PER_SEC;
-                        break;
-                }
-
-                pos += offsetof(DHCP6Option, data) + optlen;
-        }
-
-        if (ia_na_status > 0 && ia_pd_status > 0) {
-                log_dhcp6_client(client, "No IA_PD prefix or IA_NA address received. Ignoring.");
-                return -EINVAL;
-        }
-
-        if (!clientid) {
-                log_dhcp6_client(client, "%s has incomplete options",
-                                 dhcp6_message_type_to_string(message->type));
-                return -EINVAL;
-        }
-
-        if (client->state != DHCP6_STATE_INFORMATION_REQUEST) {
-                r = dhcp6_lease_get_serverid(lease, NULL, NULL);
-                if (r < 0) {
-                        log_dhcp6_client(client, "%s has no server id",
-                                         dhcp6_message_type_to_string(message->type));
-                        return -EINVAL;
-                }
-        }
-
-        if (lease->ia.addresses) {
-                lease->ia.ia_na.lifetime_t1 = htobe32(lt_t1);
-                lease->ia.ia_na.lifetime_t2 = htobe32(lt_t2);
-        }
-
-        if (lease->pd.addresses) {
-                lease->pd.ia_pd.lifetime_t1 = htobe32(lt_t1);
-                lease->pd.ia_pd.lifetime_t2 = htobe32(lt_t2);
-        }
-
-        client->information_refresh_time_usec = MAX(irt, IRT_MINIMUM);
-
+        client_notify(client, SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST);
         return 0;
 }
 
-static int client_receive_reply(sd_dhcp6_client *client, DHCP6Message *reply, size_t len) {
+static int client_process_reply(
+                sd_dhcp6_client *client,
+                DHCP6Message *message,
+                size_t len,
+                const triple_timestamp *timestamp,
+                const struct in6_addr *server_address) {
+
         _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
-        bool rapid_commit;
         int r;
 
         assert(client);
-        assert(reply);
+        assert(message);
 
-        if (reply->type != DHCP6_REPLY)
-                return 0;
+        if (message->type != DHCP6_MESSAGE_REPLY)
+                return log_invalid_message_type(client, message);
 
-        r = dhcp6_lease_new(&lease);
+        r = dhcp6_lease_new_from_message(client, message, len, timestamp, server_address, &lease);
+        if (r == -EADDRNOTAVAIL) {
+
+                /* If NoBinding status code is received, we cannot request the address anymore.
+                 * Let's restart transaction from the beginning. */
+
+                if (client->state == DHCP6_STATE_REQUEST)
+                        /* The lease is not acquired yet, hence it is not necessary to notify the restart. */
+                        client_cleanup(client);
+                else
+                        /* We need to notify the previous lease was expired. */
+                        client_stop(client, SD_DHCP6_CLIENT_EVENT_RESEND_EXPIRE);
+
+                return client_start_transaction(client, DHCP6_STATE_SOLICITATION);
+        }
         if (r < 0)
-                return -ENOMEM;
+                return log_dhcp6_client_errno(client, r, "Failed to process received reply message, ignoring: %m");
 
-        r = client_parse_message(client, reply, len, lease);
+        log_dhcp6_client(client, "Processed %s message", dhcp6_message_type_to_string(message->type));
+
+        sd_dhcp6_lease_unref(client->lease);
+        client->lease = TAKE_PTR(lease);
+
+        return client_enter_bound_state(client);
+}
+
+static int client_process_advertise_or_rapid_commit_reply(
+                sd_dhcp6_client *client,
+                DHCP6Message *message,
+                size_t len,
+                const triple_timestamp *timestamp,
+                const struct in6_addr *server_address) {
+
+        _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
+        uint8_t pref_advertise, pref_lease = 0;
+        int r;
+
+        assert(client);
+        assert(message);
+
+        if (!IN_SET(message->type, DHCP6_MESSAGE_ADVERTISE, DHCP6_MESSAGE_REPLY))
+                return log_invalid_message_type(client, message);
+
+        r = dhcp6_lease_new_from_message(client, message, len, timestamp, server_address, &lease);
         if (r < 0)
-                return r;
+                return log_dhcp6_client_errno(client, r, "Failed to process received %s message, ignoring: %m",
+                                              dhcp6_message_type_to_string(message->type));
 
-        if (client->state == DHCP6_STATE_SOLICITATION) {
+        if (message->type == DHCP6_MESSAGE_REPLY) {
+                bool rapid_commit;
+
+                if (!client->rapid_commit)
+                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                                      "Received unexpected reply message, even we sent a solicit message without the rapid commit option, ignoring.");
+
                 r = dhcp6_lease_get_rapid_commit(lease, &rapid_commit);
                 if (r < 0)
                         return r;
 
                 if (!rapid_commit)
-                        return 0;
+                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                                      "Received reply message without rapid commit flag, ignoring.");
+
+                log_dhcp6_client(client, "Processed %s message", dhcp6_message_type_to_string(message->type));
+
+                sd_dhcp6_lease_unref(client->lease);
+                client->lease = TAKE_PTR(lease);
+
+                return client_enter_bound_state(client);
         }
 
-        sd_dhcp6_lease_unref(client->lease);
-        client->lease = TAKE_PTR(lease);
-
-        return DHCP6_STATE_BOUND;
-}
-
-static int client_receive_advertise(sd_dhcp6_client *client, DHCP6Message *advertise, size_t len) {
-        _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
-        uint8_t pref_advertise = 0, pref_lease = 0;
-        int r;
-
-        if (advertise->type != DHCP6_ADVERTISE)
-                return 0;
-
-        r = dhcp6_lease_new(&lease);
-        if (r < 0)
-                return r;
-
-        r = client_parse_message(client, advertise, len, lease);
-        if (r < 0)
-                return r;
-
         r = dhcp6_lease_get_preference(lease, &pref_advertise);
         if (r < 0)
                 return r;
 
-        r = dhcp6_lease_get_preference(client->lease, &pref_lease);
+        if (client->lease) {
+                r = dhcp6_lease_get_preference(client->lease, &pref_lease);
+                if (r < 0)
+                        return r;
+        }
 
-        if (r < 0 || pref_advertise > pref_lease) {
+        log_dhcp6_client(client, "Processed %s message", dhcp6_message_type_to_string(message->type));
+
+        if (!client->lease || pref_advertise > pref_lease) {
+                /* If this is the first advertise message or has higher preference, then save the lease. */
                 sd_dhcp6_lease_unref(client->lease);
                 client->lease = TAKE_PTR(lease);
-                r = 0;
         }
 
         if (pref_advertise == 255 || client->retransmit_count > 1)
-                r = DHCP6_STATE_REQUEST;
+                (void) client_start_transaction(client, DHCP6_STATE_REQUEST);
 
-        return r;
+        return 0;
 }
 
 static int client_receive_message(
@@ -1398,278 +1262,136 @@
                 revents,
                 void *userdata) {
 
-        sd_dhcp6_client *client = userdata;
+        sd_dhcp6_client *client = ASSERT_PTR(userdata);
         DHCP6_CLIENT_DONT_DESTROY(client);
+        /* This needs to be initialized with zero. See #20741. */
+        CMSG_BUFFER_TYPE(CMSG_SPACE_TIMEVAL) control = {};
+        struct iovec iov;
+        union sockaddr_union sa = {};
+        struct msghdr msg = {
+                .msg_name = &sa.sa,
+                .msg_namelen = sizeof(sa),
+                .msg_iov = &iov,
+                .msg_iovlen = 1,
+                .msg_control = &control,
+                .msg_controllen = sizeof(control),
+        };
+        struct cmsghdr *cmsg;
+        triple_timestamp t = {};
         _cleanup_free_ DHCP6Message *message = NULL;
+        struct in6_addr *server_address = NULL;
         ssize_t buflen, len;
-        int r = 0;
-
-        assert(s);
-        assert(client);
-        assert(client->event);
 
         buflen = next_datagram_size_fd(fd);
-        if (buflen == -ENETDOWN)
-                /* the link is down. Don't return an error or the I/O event
-                   source will be disconnected and we won't be able to receive
-                   packets again when the link comes back. */
+        if (buflen < 0) {
+                if (ERRNO_IS_TRANSIENT(buflen) || ERRNO_IS_DISCONNECT(buflen))
+                        return 0;
+
+                log_dhcp6_client_errno(client, buflen, "Failed to determine datagram size to read, ignoring: %m");
                 return 0;
-        if (buflen < 0)
-                return buflen;
+        }
 
         message = malloc(buflen);
         if (!message)
                 return -ENOMEM;
 
-        len = recv(fd, message, buflen, 0);
+        iov = IOVEC_MAKE(message, buflen);
+
+        len = recvmsg_safe(fd, &msg, MSG_DONTWAIT);
         if (len < 0) {
-                /* see comment above for why we shouldn't error out on ENETDOWN. */
-                if (IN_SET(len, -EAGAIN, -EINTR, -ENETDOWN))
+                if (ERRNO_IS_TRANSIENT(len) || ERRNO_IS_DISCONNECT(len))
                         return 0;
 
-                return log_dhcp6_client_errno(client, len, "Could not receive message from UDP socket: %m");
-
+                log_dhcp6_client_errno(client, len, "Could not receive message from UDP socket, ignoring: %m");
+                return 0;
         }
         if ((size_t) len < sizeof(DHCP6Message)) {
                 log_dhcp6_client(client, "Too small to be DHCP6 message: ignoring");
                 return 0;
         }
 
-        switch(message->type) {
-        case DHCP6_SOLICIT:
-        case DHCP6_REQUEST:
-        case DHCP6_CONFIRM:
-        case DHCP6_RENEW:
-        case DHCP6_REBIND:
-        case DHCP6_RELEASE:
-        case DHCP6_DECLINE:
-        case DHCP6_INFORMATION_REQUEST:
-        case DHCP6_RELAY_FORW:
-        case DHCP6_RELAY_REPL:
-                return 0;
+        /* msg_namelen == 0 happens when running the test-suite over a socketpair */
+        if (msg.msg_namelen > 0) {
+                if (msg.msg_namelen != sizeof(struct sockaddr_in6) || sa.in6.sin6_family != AF_INET6) {
+                        log_dhcp6_client(client, "Received message from invalid source, ignoring.");
+                        return 0;
+                }
 
-        case DHCP6_ADVERTISE:
-        case DHCP6_REPLY:
-        case DHCP6_RECONFIGURE:
-                break;
-
-        default:
-                log_dhcp6_client(client, "Unknown message type %d", message->type);
-                return 0;
+                server_address = &sa.in6.sin6_addr;
         }
 
-        if (client->transaction_id != (message->transaction_id &
-                                       htobe32(0x00ffffff)))
+        CMSG_FOREACH(cmsg, &msg) {
+                if (cmsg->cmsg_level == SOL_SOCKET &&
+                    cmsg->cmsg_type == SO_TIMESTAMP &&
+                    cmsg->cmsg_len == CMSG_LEN(sizeof(struct timeval)))
+                        triple_timestamp_from_realtime(&t, timeval_load(CMSG_TYPED_DATA(cmsg, struct timeval)));
+        }
+
+        if (client->transaction_id != (message->transaction_id & htobe32(0x00ffffff)))
                 return 0;
 
         switch (client->state) {
         case DHCP6_STATE_INFORMATION_REQUEST:
-                r = client_receive_reply(client, message, len);
-                if (r < 0)
+                if (client_process_information(client, message, len, &t, server_address) < 0)
                         return 0;
-
-                client_notify(client, SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST);
-
-                client_start(client, DHCP6_STATE_STOPPED);
-
                 break;
 
         case DHCP6_STATE_SOLICITATION:
-                r = client_receive_advertise(client, message, len);
+                if (client_process_advertise_or_rapid_commit_reply(client, message, len, &t, server_address) < 0)
+                        return 0;
+                break;
 
-                if (r == DHCP6_STATE_REQUEST) {
-                        client_start(client, r);
-
-                        break;
-                }
-
-                _fallthrough_; /* for Solicitation Rapid Commit option check */
         case DHCP6_STATE_REQUEST:
         case DHCP6_STATE_RENEW:
         case DHCP6_STATE_REBIND:
-
-                r = client_receive_reply(client, message, len);
-                if (r < 0)
+                if (client_process_reply(client, message, len, &t, server_address) < 0)
                         return 0;
-
-                if (r == DHCP6_STATE_BOUND) {
-
-                        r = client_start(client, DHCP6_STATE_BOUND);
-                        if (r < 0) {
-                                client_stop(client, r);
-                                return 0;
-                        }
-
-                        client_notify(client, SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE);
-                }
-
                 break;
 
         case DHCP6_STATE_BOUND:
-
-                break;
-
         case DHCP6_STATE_STOPPED:
-                return 0;
+        case DHCP6_STATE_STOPPING:
+        default:
+                assert_not_reached();
         }
 
-        log_dhcp6_client(client, "Recv %s",
-                         dhcp6_message_type_to_string(message->type));
-
         return 0;
 }
 
-static int client_get_lifetime(sd_dhcp6_client *client, uint32_t *lifetime_t1,
-                               uint32_t *lifetime_t2) {
-        assert_return(client, -EINVAL);
-        assert_return(client->lease, -EINVAL);
+static int client_send_release(sd_dhcp6_client *client) {
+        sd_dhcp6_lease *lease;
 
-        if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA) && client->lease->ia.addresses) {
-                *lifetime_t1 = be32toh(client->lease->ia.ia_na.lifetime_t1);
-                *lifetime_t2 = be32toh(client->lease->ia.ia_na.lifetime_t2);
+        assert(client);
 
+        if (!client->send_release)
                 return 0;
-        }
 
-        if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) {
-                *lifetime_t1 = be32toh(client->lease->pd.ia_pd.lifetime_t1);
-                *lifetime_t2 = be32toh(client->lease->pd.ia_pd.lifetime_t2);
-
+        if (sd_dhcp6_client_get_lease(client, &lease) < 0)
                 return 0;
-        }
 
-        return -ENOMSG;
-}
-
-static int client_start(sd_dhcp6_client *client, enum DHCP6State state) {
-        int r;
-        usec_t timeout, time_now;
-        char time_string[FORMAT_TIMESPAN_MAX];
-        uint32_t lifetime_t1, lifetime_t2;
-
-        assert_return(client, -EINVAL);
-        assert_return(client->event, -EINVAL);
-        assert_return(client->ifindex > 0, -EINVAL);
-        assert_return(client->state != state, -EINVAL);
-
-        (void) event_source_disable(client->timeout_resend_expire);
-        (void) event_source_disable(client->timeout_resend);
-        client->retransmit_time = 0;
-        client->retransmit_count = 0;
-
-        r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
-        if (r < 0)
-                return r;
-
-        if (!client->receive_message) {
-                r = sd_event_add_io(client->event, &client->receive_message,
-                                    client->fd, EPOLLIN, client_receive_message,
-                                    client);
-                if (r < 0)
-                        goto error;
-
-                r = sd_event_source_set_priority(client->receive_message,
-                                                 client->event_priority);
-                if (r < 0)
-                        goto error;
-
-                r = sd_event_source_set_description(client->receive_message,
-                                                    "dhcp6-receive-message");
-                if (r < 0)
-                        goto error;
-        }
-
-        switch (state) {
-        case DHCP6_STATE_STOPPED:
-                if (client->state == DHCP6_STATE_INFORMATION_REQUEST) {
-                        client->state = DHCP6_STATE_STOPPED;
-
-                        return 0;
-                }
-
-                _fallthrough_;
-        case DHCP6_STATE_SOLICITATION:
-                client->state = DHCP6_STATE_SOLICITATION;
-
-                break;
-
-        case DHCP6_STATE_INFORMATION_REQUEST:
-        case DHCP6_STATE_REQUEST:
-        case DHCP6_STATE_RENEW:
-        case DHCP6_STATE_REBIND:
-
-                client->state = state;
-
-                break;
-
-        case DHCP6_STATE_BOUND:
-
-                r = client_get_lifetime(client, &lifetime_t1, &lifetime_t2);
-                if (r < 0)
-                        goto error;
-
-                if (lifetime_t1 == 0xffffffff || lifetime_t2 == 0xffffffff) {
-                        log_dhcp6_client(client, "Infinite T1 0x%08x or T2 0x%08x",
-                                         lifetime_t1, lifetime_t2);
-
-                        return 0;
-                }
-
-                timeout = client_timeout_compute_random(lifetime_t1 * USEC_PER_SEC);
-
-                log_dhcp6_client(client, "T1 expires in %s",
-                                 format_timespan(time_string, FORMAT_TIMESPAN_MAX, timeout, USEC_PER_SEC));
-
-                r = event_reset_time(client->event, &client->timeout_t1,
-                                     clock_boottime_or_monotonic(),
-                                     time_now + timeout, 10 * USEC_PER_SEC,
-                                     client_timeout_t1, client,
-                                     client->event_priority, "dhcp6-t1-timeout", true);
-                if (r < 0)
-                        goto error;
-
-                timeout = client_timeout_compute_random(lifetime_t2 * USEC_PER_SEC);
-
-                log_dhcp6_client(client, "T2 expires in %s",
-                                 format_timespan(time_string, FORMAT_TIMESPAN_MAX, timeout, USEC_PER_SEC));
-
-                r = event_reset_time(client->event, &client->timeout_t2,
-                                     clock_boottime_or_monotonic(),
-                                     time_now + timeout, 10 * USEC_PER_SEC,
-                                     client_timeout_t2, client,
-                                     client->event_priority, "dhcp6-t2-timeout", true);
-                if (r < 0)
-                        goto error;
-
-                client->state = state;
-
+        if (!lease->ia_na && !lease->ia_pd)
                 return 0;
-        }
 
-        client->transaction_id = random_u32() & htobe32(0x00ffffff);
-        client->transaction_start = time_now;
-
-        r = event_reset_time(client->event, &client->timeout_resend,
-                             clock_boottime_or_monotonic(),
-                             0, 0,
-                             client_timeout_resend, client,
-                             client->event_priority, "dhcp6-resend-timeout", true);
-        if (r < 0)
-                goto error;
-
-        return 0;
-
- error:
-        client_reset(client);
-        return r;
+        client_set_state(client, DHCP6_STATE_STOPPING);
+        return dhcp6_client_send_message(client);
 }
 
 int sd_dhcp6_client_stop(sd_dhcp6_client *client) {
+        int r;
+
         if (!client)
                 return 0;
 
+        /* Intentionally ignoring failure to send DHCP6 release. The DHCPv6 client
+         * engine is about to release its UDP socket unconditionally. */
+        r = client_send_release(client);
+        if (r < 0)
+                log_dhcp6_client_errno(client, r,
+                                       "Failed to send DHCP6 release message, ignoring: %m");
+
         client_stop(client, SD_DHCP6_CLIENT_EVENT_STOP);
 
+        client->receive_message = sd_event_source_unref(client->receive_message);
         client->fd = safe_close(client->fd);
 
         return 0;
@@ -1682,23 +1404,19 @@
 }
 
 int sd_dhcp6_client_start(sd_dhcp6_client *client) {
-        enum DHCP6State state = DHCP6_STATE_SOLICITATION;
+        DHCP6State state = DHCP6_STATE_SOLICITATION;
         int r;
 
         assert_return(client, -EINVAL);
         assert_return(client->event, -EINVAL);
         assert_return(client->ifindex > 0, -EINVAL);
         assert_return(in6_addr_is_link_local(&client->local_address) > 0, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
+        assert_return(client->information_request || client->request_ia != 0, -EINVAL);
 
-        if (client->state != DHCP6_STATE_STOPPED)
-                return -EBUSY;
-
-        if (!client->information_request && !client->request)
-                return -EINVAL;
-
-        r = client_reset(client);
-        if (r < 0)
-                return r;
+        /* Even if the client is in the STOPPED state, the lease acquired in the previous information
+         * request may be stored. */
+        client->lease = sd_dhcp6_lease_unref(client->lease);
 
         r = client_ensure_iaid(client);
         if (r < 0)
@@ -1710,17 +1428,32 @@
 
         if (client->fd < 0) {
                 r = dhcp6_network_bind_udp_socket(client->ifindex, &client->local_address);
-                if (r < 0) {
-                        _cleanup_free_ char *p = NULL;
-
-                        (void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &client->local_address, &p);
+                if (r < 0)
                         return log_dhcp6_client_errno(client, r,
-                                                      "Failed to bind to UDP socket at address %s: %m", strna(p));
-                }
+                                                      "Failed to bind to UDP socket at address %s: %m",
+                                                      IN6_ADDR_TO_STRING(&client->local_address));
 
                 client->fd = r;
         }
 
+        if (!client->receive_message) {
+                _cleanup_(sd_event_source_disable_unrefp) sd_event_source *s = NULL;
+
+                r = sd_event_add_io(client->event, &s, client->fd, EPOLLIN, client_receive_message, client);
+                if (r < 0)
+                        return r;
+
+                r = sd_event_source_set_priority(s, client->event_priority);
+                if (r < 0)
+                        return r;
+
+                r = sd_event_source_set_description(s, "dhcp6-receive-message");
+                if (r < 0)
+                        return r;
+
+                client->receive_message = TAKE_PTR(s);
+        }
+
         if (client->information_request) {
                 usec_t t = now(CLOCK_MONOTONIC);
 
@@ -1731,10 +1464,10 @@
                 state = DHCP6_STATE_INFORMATION_REQUEST;
         }
 
-        log_dhcp6_client(client, "Started in %s mode",
-                         client->information_request ? "Information request" : "Managed");
+        log_dhcp6_client(client, "Starting in %s mode",
+                         client->information_request ? "Information request" : "Solicit");
 
-        return client_start(client, state);
+        return client_start_transaction(client, state);
 }
 
 int sd_dhcp6_client_attach_event(sd_dhcp6_client *client, sd_event *event, int64_t priority) {
@@ -1742,6 +1475,7 @@
 
         assert_return(client, -EINVAL);
         assert_return(!client->event, -EBUSY);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
         if (event)
                 client->event = sd_event_ref(event);
@@ -1758,6 +1492,7 @@
 
 int sd_dhcp6_client_detach_event(sd_dhcp6_client *client) {
         assert_return(client, -EINVAL);
+        assert_return(!sd_dhcp6_client_is_running(client), -EBUSY);
 
         client->event = sd_event_unref(client->event);
 
@@ -1770,25 +1505,35 @@
         return client->event;
 }
 
+int sd_dhcp6_client_attach_device(sd_dhcp6_client *client, sd_device *dev) {
+        assert_return(client, -EINVAL);
+
+        return device_unref_and_replace(client->dev, dev);
+}
+
 static sd_dhcp6_client *dhcp6_client_free(sd_dhcp6_client *client) {
-        assert(client);
+        if (!client)
+                return NULL;
 
-        client->timeout_resend = sd_event_source_unref(client->timeout_resend);
-        client->timeout_resend_expire = sd_event_source_unref(client->timeout_resend_expire);
-        client->timeout_t1 = sd_event_source_unref(client->timeout_t1);
-        client->timeout_t2 = sd_event_source_unref(client->timeout_t2);
+        sd_dhcp6_lease_unref(client->lease);
 
-        client_reset(client);
+        sd_event_source_disable_unref(client->receive_message);
+        sd_event_source_disable_unref(client->timeout_resend);
+        sd_event_source_disable_unref(client->timeout_expire);
+        sd_event_source_disable_unref(client->timeout_t1);
+        sd_event_source_disable_unref(client->timeout_t2);
+        sd_event_unref(client->event);
 
         client->fd = safe_close(client->fd);
 
-        sd_dhcp6_client_detach_event(client);
+        sd_device_unref(client->dev);
 
         free(client->req_opts);
         free(client->fqdn);
         free(client->mudurl);
-
+        dhcp6_ia_clear_addresses(&client->ia_pd);
         ordered_hashmap_free(client->extra_options);
+        ordered_set_free(client->vendor_options);
         strv_free(client->user_class);
         strv_free(client->vendor_class);
         free(client->ifname);
@@ -1800,18 +1545,9 @@
 
 int sd_dhcp6_client_new(sd_dhcp6_client **ret) {
         _cleanup_(sd_dhcp6_client_unrefp) sd_dhcp6_client *client = NULL;
-        _cleanup_free_ be16_t *req_opts = NULL;
-        size_t t;
 
         assert_return(ret, -EINVAL);
 
-        req_opts = new(be16_t, ELEMENTSOF(default_req_opts));
-        if (!req_opts)
-                return -ENOMEM;
-
-        for (t = 0; t < ELEMENTSOF(default_req_opts); t++)
-                req_opts[t] = htobe16(default_req_opts[t]);
-
         client = new(sd_dhcp6_client, 1);
         if (!client)
                 return -ENOMEM;
@@ -1821,12 +1557,9 @@
                 .ia_na.type = SD_DHCP6_OPTION_IA_NA,
                 .ia_pd.type = SD_DHCP6_OPTION_IA_PD,
                 .ifindex = -1,
-                .request = DHCP6_REQUEST_IA_NA,
-                .fd = -1,
-                .req_opts_len = ELEMENTSOF(default_req_opts),
-                .hint_pd_prefix.iapdprefix.lifetime_preferred = (be32_t) -1,
-                .hint_pd_prefix.iapdprefix.lifetime_valid = (be32_t) -1,
-                .req_opts = TAKE_PTR(req_opts),
+                .request_ia = DHCP6_REQUEST_IA_NA | DHCP6_REQUEST_IA_PD,
+                .fd = -EBADF,
+                .rapid_commit = true,
         };
 
         *ret = TAKE_PTR(client);
diff --git a/src/libsystemd-network/sd-dhcp6-lease.c b/src/libsystemd-network/sd-dhcp6-lease.c
index e424aa1..d14c412 100644
--- a/src/libsystemd-network/sd-dhcp6-lease.c
+++ b/src/libsystemd-network/sd-dhcp6-lease.c
@@ -6,60 +6,166 @@
 #include <errno.h>
 
 #include "alloc-util.h"
+#include "dhcp6-internal.h"
 #include "dhcp6-lease-internal.h"
-#include "dhcp6-protocol.h"
 #include "strv.h"
-#include "util.h"
 
-int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire) {
-        DHCP6Address *addr;
-        uint32_t valid = 0, t;
+#define IRT_DEFAULT (1 * USEC_PER_DAY)
+#define IRT_MINIMUM (600 * USEC_PER_SEC)
 
-        assert_return(ia, -EINVAL);
-        assert_return(expire, -EINVAL);
+static void dhcp6_lease_set_timestamp(sd_dhcp6_lease *lease, const triple_timestamp *timestamp) {
+        assert(lease);
 
-        LIST_FOREACH(addresses, addr, ia->addresses) {
-                t = be32toh(addr->iaaddr.lifetime_valid);
-                if (valid < t)
-                        valid = t;
+        if (timestamp && triple_timestamp_is_set(timestamp))
+                lease->timestamp = *timestamp;
+        else
+                triple_timestamp_get(&lease->timestamp);
+}
+
+int sd_dhcp6_lease_get_timestamp(sd_dhcp6_lease *lease, clockid_t clock, uint64_t *ret) {
+        assert_return(lease, -EINVAL);
+        assert_return(TRIPLE_TIMESTAMP_HAS_CLOCK(clock), -EOPNOTSUPP);
+        assert_return(clock_supported(clock), -EOPNOTSUPP);
+        assert_return(ret, -EINVAL);
+
+        if (!triple_timestamp_is_set(&lease->timestamp))
+                return -ENODATA;
+
+        *ret = triple_timestamp_by_clock(&lease->timestamp, clock);
+        return 0;
+}
+
+static usec_t sec2usec(uint32_t sec) {
+        return sec == UINT32_MAX ? USEC_INFINITY : sec * USEC_PER_SEC;
+}
+
+static void dhcp6_lease_set_lifetime(sd_dhcp6_lease *lease) {
+        uint32_t t1 = UINT32_MAX, t2 = UINT32_MAX, min_valid_lt = UINT32_MAX;
+
+        assert(lease);
+        assert(lease->ia_na || lease->ia_pd);
+
+        if (lease->ia_na) {
+                t1 = MIN(t1, be32toh(lease->ia_na->header.lifetime_t1));
+                t2 = MIN(t2, be32toh(lease->ia_na->header.lifetime_t2));
+
+                LIST_FOREACH(addresses, a, lease->ia_na->addresses)
+                        min_valid_lt = MIN(min_valid_lt, be32toh(a->iaaddr.lifetime_valid));
         }
 
-        t = be32toh(ia->ia_na.lifetime_t2);
-        if (t > valid)
-                return -EINVAL;
+        if (lease->ia_pd) {
+                t1 = MIN(t1, be32toh(lease->ia_pd->header.lifetime_t1));
+                t2 = MIN(t2, be32toh(lease->ia_pd->header.lifetime_t2));
 
-        *expire = valid - t;
+                LIST_FOREACH(addresses, a, lease->ia_pd->addresses)
+                        min_valid_lt = MIN(min_valid_lt, be32toh(a->iapdprefix.lifetime_valid));
+        }
+
+        if (t2 == 0 || t2 > min_valid_lt) {
+                /* If T2 is zero or longer than the minimum valid lifetime of the addresses or prefixes,
+                 * then adjust lifetime with it. */
+                t1 = min_valid_lt / 2;
+                t2 = min_valid_lt / 10 * 8;
+        }
+
+        lease->lifetime_valid = sec2usec(min_valid_lt);
+        lease->lifetime_t1 = sec2usec(t1);
+        lease->lifetime_t2 = sec2usec(t2);
+}
+
+int dhcp6_lease_get_lifetime(sd_dhcp6_lease *lease, usec_t *ret_t1, usec_t *ret_t2, usec_t *ret_valid) {
+        assert(lease);
+
+        if (!lease->ia_na && !lease->ia_pd)
+                return -ENODATA;
+
+        if (ret_t1)
+                *ret_t1 = lease->lifetime_t1;
+        if (ret_t2)
+                *ret_t2 = lease->lifetime_t2;
+        if (ret_valid)
+                *ret_valid = lease->lifetime_valid;
+        return 0;
+}
+
+static void dhcp6_lease_set_server_address(sd_dhcp6_lease *lease, const struct in6_addr *server_address) {
+        assert(lease);
+
+        if (server_address)
+                lease->server_address = *server_address;
+        else
+                lease->server_address = (struct in6_addr) {};
+}
+
+int sd_dhcp6_lease_get_server_address(sd_dhcp6_lease *lease, struct in6_addr *ret) {
+        assert_return(lease, -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        *ret = lease->server_address;
+        return 0;
+}
+
+void dhcp6_ia_clear_addresses(DHCP6IA *ia) {
+        assert(ia);
+
+        LIST_FOREACH(addresses, a, ia->addresses)
+                free(a);
+
+        ia->addresses = NULL;
+}
+
+DHCP6IA *dhcp6_ia_free(DHCP6IA *ia) {
+        if (!ia)
+                return NULL;
+
+        dhcp6_ia_clear_addresses(ia);
+
+        return mfree(ia);
+}
+
+int dhcp6_lease_set_clientid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len) {
+        uint8_t *clientid = NULL;
+
+        assert(lease);
+        assert(id || len == 0);
+
+        if (len > 0) {
+                clientid = memdup(id, len);
+                if (!clientid)
+                        return -ENOMEM;
+        }
+
+        free_and_replace(lease->clientid, clientid);
+        lease->clientid_len = len;
 
         return 0;
 }
 
-DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia) {
-        DHCP6Address *address;
+int dhcp6_lease_get_clientid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len) {
+        assert(lease);
 
-        if (!ia)
-                return NULL;
+        if (!lease->clientid)
+                return -ENODATA;
 
-        while (ia->addresses) {
-                address = ia->addresses;
+        if (ret_id)
+                *ret_id = lease->clientid;
+        if (ret_len)
+                *ret_len = lease->clientid_len;
 
-                LIST_REMOVE(addresses, ia->addresses, address);
-
-                free(address);
-        }
-
-        return NULL;
+        return 0;
 }
 
-int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id,
-                             size_t len) {
-        uint8_t *serverid;
+int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len) {
+        uint8_t *serverid = NULL;
 
-        assert_return(lease, -EINVAL);
-        assert_return(id, -EINVAL);
+        assert(lease);
+        assert(id || len == 0);
 
-        serverid = memdup(id, len);
-        if (!serverid)
-                return -ENOMEM;
+        if (len > 0) {
+                serverid = memdup(id, len);
+                if (!serverid)
+                        return -ENOMEM;
+        }
 
         free_and_replace(lease->serverid, serverid);
         lease->serverid_len = len;
@@ -67,135 +173,109 @@
         return 0;
 }
 
-int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **id, size_t *len) {
-        assert_return(lease, -EINVAL);
+int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len) {
+        assert(lease);
 
         if (!lease->serverid)
-                return -ENOMSG;
+                return -ENODATA;
 
-        if (id)
-                *id = lease->serverid;
-        if (len)
-                *len = lease->serverid_len;
-
+        if (ret_id)
+                *ret_id = lease->serverid;
+        if (ret_len)
+                *ret_len = lease->serverid_len;
         return 0;
 }
 
 int dhcp6_lease_set_preference(sd_dhcp6_lease *lease, uint8_t preference) {
-        assert_return(lease, -EINVAL);
+        assert(lease);
 
         lease->preference = preference;
-
         return 0;
 }
 
-int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *preference) {
-        assert_return(preference, -EINVAL);
+int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *ret) {
+        assert(lease);
+        assert(ret);
 
-        if (!lease)
-                return -EINVAL;
-
-        *preference = lease->preference;
-
+        *ret = lease->preference;
         return 0;
 }
 
 int dhcp6_lease_set_rapid_commit(sd_dhcp6_lease *lease) {
-        assert_return(lease, -EINVAL);
+        assert(lease);
 
         lease->rapid_commit = true;
-
         return 0;
 }
 
-int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *rapid_commit) {
-        assert_return(lease, -EINVAL);
-        assert_return(rapid_commit, -EINVAL);
+int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *ret) {
+        assert(lease);
+        assert(ret);
 
-        *rapid_commit = lease->rapid_commit;
-
+        *ret = lease->rapid_commit;
         return 0;
 }
 
-int dhcp6_lease_get_iaid(sd_dhcp6_lease *lease, be32_t *iaid) {
+int sd_dhcp6_lease_get_address(
+                sd_dhcp6_lease *lease,
+                struct in6_addr *ret_addr,
+                uint32_t *ret_lifetime_preferred,
+                uint32_t *ret_lifetime_valid) {
+
         assert_return(lease, -EINVAL);
-        assert_return(iaid, -EINVAL);
-
-        *iaid = lease->ia.ia_na.id;
-
-        return 0;
-}
-
-int dhcp6_lease_get_pd_iaid(sd_dhcp6_lease *lease, be32_t *iaid) {
-        assert_return(lease, -EINVAL);
-        assert_return(iaid, -EINVAL);
-
-        *iaid = lease->pd.ia_pd.id;
-
-        return 0;
-}
-
-int sd_dhcp6_lease_get_address(sd_dhcp6_lease *lease, struct in6_addr *addr,
-                               uint32_t *lifetime_preferred,
-                               uint32_t *lifetime_valid) {
-        assert_return(lease, -EINVAL);
-        assert_return(addr, -EINVAL);
-        assert_return(lifetime_preferred, -EINVAL);
-        assert_return(lifetime_valid, -EINVAL);
 
         if (!lease->addr_iter)
-                return -ENOMSG;
+                return -ENODATA;
 
-        memcpy(addr, &lease->addr_iter->iaaddr.address,
-                sizeof(struct in6_addr));
-        *lifetime_preferred =
-                be32toh(lease->addr_iter->iaaddr.lifetime_preferred);
-        *lifetime_valid = be32toh(lease->addr_iter->iaaddr.lifetime_valid);
+        if (ret_addr)
+                *ret_addr = lease->addr_iter->iaaddr.address;
+        if (ret_lifetime_preferred)
+                *ret_lifetime_preferred = be32toh(lease->addr_iter->iaaddr.lifetime_preferred);
+        if (ret_lifetime_valid)
+                *ret_lifetime_valid = be32toh(lease->addr_iter->iaaddr.lifetime_valid);
 
         lease->addr_iter = lease->addr_iter->addresses_next;
-
         return 0;
 }
 
 void sd_dhcp6_lease_reset_address_iter(sd_dhcp6_lease *lease) {
         if (lease)
-                lease->addr_iter = lease->ia.addresses;
+                lease->addr_iter = lease->ia_na ? lease->ia_na->addresses : NULL;
 }
 
-int sd_dhcp6_lease_get_pd(sd_dhcp6_lease *lease, struct in6_addr *prefix,
-                          uint8_t *prefix_len,
-                          uint32_t *lifetime_preferred,
-                          uint32_t *lifetime_valid) {
+int sd_dhcp6_lease_get_pd(
+                sd_dhcp6_lease *lease,
+                struct in6_addr *ret_prefix,
+                uint8_t *ret_prefix_len,
+                uint32_t *ret_lifetime_preferred,
+                uint32_t *ret_lifetime_valid) {
+
         assert_return(lease, -EINVAL);
-        assert_return(prefix, -EINVAL);
-        assert_return(prefix_len, -EINVAL);
-        assert_return(lifetime_preferred, -EINVAL);
-        assert_return(lifetime_valid, -EINVAL);
 
         if (!lease->prefix_iter)
-                return -ENOMSG;
+                return -ENODATA;
 
-        memcpy(prefix, &lease->prefix_iter->iapdprefix.address,
-               sizeof(struct in6_addr));
-        *prefix_len = lease->prefix_iter->iapdprefix.prefixlen;
-        *lifetime_preferred =
-                be32toh(lease->prefix_iter->iapdprefix.lifetime_preferred);
-        *lifetime_valid =
-                be32toh(lease->prefix_iter->iapdprefix.lifetime_valid);
+        if (ret_prefix)
+                *ret_prefix = lease->prefix_iter->iapdprefix.address;
+        if (ret_prefix_len)
+                *ret_prefix_len = lease->prefix_iter->iapdprefix.prefixlen;
+        if (ret_lifetime_preferred)
+                *ret_lifetime_preferred = be32toh(lease->prefix_iter->iapdprefix.lifetime_preferred);
+        if (ret_lifetime_valid)
+                *ret_lifetime_valid = be32toh(lease->prefix_iter->iapdprefix.lifetime_valid);
 
         lease->prefix_iter = lease->prefix_iter->addresses_next;
-
         return 0;
 }
 
 void sd_dhcp6_lease_reset_pd_prefix_iter(sd_dhcp6_lease *lease) {
         if (lease)
-                lease->prefix_iter = lease->pd.addresses;
+                lease->prefix_iter = lease->ia_pd ? lease->ia_pd->addresses : NULL;
 }
 
-int dhcp6_lease_set_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
-        assert_return(lease, -EINVAL);
-        assert_return(optval, -EINVAL);
+int dhcp6_lease_add_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
+        assert(lease);
+        assert(optval || optlen == 0);
 
         if (optlen == 0)
                 return 0;
@@ -203,58 +283,51 @@
         return dhcp6_option_parse_addresses(optval, optlen, &lease->dns, &lease->dns_count);
 }
 
-int sd_dhcp6_lease_get_dns(sd_dhcp6_lease *lease, const struct in6_addr **addrs) {
+int sd_dhcp6_lease_get_dns(sd_dhcp6_lease *lease, const struct in6_addr **ret) {
         assert_return(lease, -EINVAL);
-        assert_return(addrs, -EINVAL);
 
-        if (lease->dns_count) {
-                *addrs = lease->dns;
-                return lease->dns_count;
-        }
+        if (!lease->dns)
+                return -ENODATA;
 
-        return -ENOENT;
+        if (ret)
+                *ret = lease->dns;
+
+        return lease->dns_count;
 }
 
-int dhcp6_lease_set_domains(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
+int dhcp6_lease_add_domains(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
+        _cleanup_strv_free_ char **domains = NULL;
         int r;
-        char **domains;
 
-        assert_return(lease, -EINVAL);
-        assert_return(optval, -EINVAL);
+        assert(lease);
+        assert(optval || optlen == 0);
 
-        if (!optlen)
+        if (optlen == 0)
                 return 0;
 
         r = dhcp6_option_parse_domainname_list(optval, optlen, &domains);
         if (r < 0)
-                return 0;
+                return r;
 
-        strv_free_and_replace(lease->domains, domains);
-        lease->domains_count = r;
-
-        return r;
+        return strv_extend_strv(&lease->domains, domains, true);
 }
 
-int sd_dhcp6_lease_get_domains(sd_dhcp6_lease *lease, char ***domains) {
+int sd_dhcp6_lease_get_domains(sd_dhcp6_lease *lease, char ***ret) {
         assert_return(lease, -EINVAL);
-        assert_return(domains, -EINVAL);
+        assert_return(ret, -EINVAL);
 
-        if (lease->domains_count) {
-                *domains = lease->domains;
-                return lease->domains_count;
-        }
+        if (!lease->domains)
+                return -ENODATA;
 
-        return -ENOENT;
+        *ret = lease->domains;
+        return strv_length(lease->domains);
 }
 
-int dhcp6_lease_set_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
+int dhcp6_lease_add_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
         int r;
 
-        assert_return(lease, -EINVAL);
-        assert_return(optval, -EINVAL);
-
-        lease->ntp = mfree(lease->ntp);
-        lease->ntp_count = 0;
+        assert(lease);
+        assert(optval || optlen == 0);
 
         for (size_t offset = 0; offset < optlen;) {
                 const uint8_t *subval;
@@ -265,11 +338,11 @@
                 if (r < 0)
                         return r;
 
-                switch(subopt) {
+                switch (subopt) {
                 case DHCP6_NTP_SUBOPTION_SRV_ADDR:
                 case DHCP6_NTP_SUBOPTION_MC_ADDR:
                         if (sublen != 16)
-                                return 0;
+                                return -EINVAL;
 
                         r = dhcp6_option_parse_addresses(subval, sublen, &lease->ntp, &lease->ntp_count);
                         if (r < 0)
@@ -278,14 +351,18 @@
                         break;
 
                 case DHCP6_NTP_SUBOPTION_SRV_FQDN: {
-                        char **servers;
+                        _cleanup_free_ char *server = NULL;
 
-                        r = dhcp6_option_parse_domainname_list(subval, sublen, &servers);
+                        r = dhcp6_option_parse_domainname(subval, sublen, &server);
                         if (r < 0)
-                                return 0;
+                                return r;
 
-                        strv_free_and_replace(lease->ntp_fqdn, servers);
-                        lease->ntp_fqdn_count = r;
+                        if (strv_contains(lease->ntp_fqdn, server))
+                                continue;
+
+                        r = strv_consume(&lease->ntp_fqdn, TAKE_PTR(server));
+                        if (r < 0)
+                                return r;
 
                         break;
                 }}
@@ -295,8 +372,8 @@
 }
 
 int dhcp6_lease_add_sntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
-        assert_return(lease, -EINVAL);
-        assert_return(optval, -EINVAL);
+        assert(lease);
+        assert(optval || optlen == 0);
 
         if (optlen == 0)
                 return 0;
@@ -307,40 +384,43 @@
 
 int sd_dhcp6_lease_get_ntp_addrs(sd_dhcp6_lease *lease, const struct in6_addr **ret) {
         assert_return(lease, -EINVAL);
-        assert_return(ret, -EINVAL);
 
         if (lease->ntp) {
-                *ret = lease->ntp;
+                if (ret)
+                        *ret = lease->ntp;
                 return lease->ntp_count;
         }
 
         if (lease->sntp && !lease->ntp_fqdn) {
                 /* Fallback to the deprecated SNTP option. */
-                *ret = lease->sntp;
+                if (ret)
+                        *ret = lease->sntp;
                 return lease->sntp_count;
         }
 
-        return -ENOENT;
+        return -ENODATA;
 }
 
-int sd_dhcp6_lease_get_ntp_fqdn(sd_dhcp6_lease *lease, char ***ntp_fqdn) {
+int sd_dhcp6_lease_get_ntp_fqdn(sd_dhcp6_lease *lease, char ***ret) {
         assert_return(lease, -EINVAL);
-        assert_return(ntp_fqdn, -EINVAL);
 
-        if (lease->ntp_fqdn_count) {
-                *ntp_fqdn = lease->ntp_fqdn;
-                return lease->ntp_fqdn_count;
-        }
+        if (!lease->ntp_fqdn)
+                return -ENODATA;
 
-        return -ENOENT;
+        if (ret)
+                *ret = lease->ntp_fqdn;
+        return strv_length(lease->ntp_fqdn);
 }
 
 int dhcp6_lease_set_fqdn(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
-        int r;
         char *fqdn;
+        int r;
 
-        assert_return(lease, -EINVAL);
-        assert_return(optval, -EINVAL);
+        assert(lease);
+        assert(optval || optlen == 0);
+
+        if (optlen == 0)
+                return 0;
 
         if (optlen < 2)
                 return -ENODATA;
@@ -354,25 +434,235 @@
         return free_and_replace(lease->fqdn, fqdn);
 }
 
-int sd_dhcp6_lease_get_fqdn(sd_dhcp6_lease *lease, const char **fqdn) {
+int sd_dhcp6_lease_get_fqdn(sd_dhcp6_lease *lease, const char **ret) {
         assert_return(lease, -EINVAL);
-        assert_return(fqdn, -EINVAL);
+        assert_return(ret, -EINVAL);
 
-        if (lease->fqdn) {
-                *fqdn = lease->fqdn;
-                return 0;
+        if (!lease->fqdn)
+                return -ENODATA;
+
+        *ret = lease->fqdn;
+        return 0;
+}
+
+static int dhcp6_lease_parse_message(
+                sd_dhcp6_client *client,
+                sd_dhcp6_lease *lease,
+                const DHCP6Message *message,
+                size_t len) {
+
+        usec_t irt = IRT_DEFAULT;
+        int r;
+
+        assert(client);
+        assert(lease);
+        assert(message);
+        assert(len >= sizeof(DHCP6Message));
+
+        len -= sizeof(DHCP6Message);
+        for (size_t offset = 0; offset < len;) {
+                uint16_t optcode;
+                size_t optlen;
+                const uint8_t *optval;
+
+                r = dhcp6_option_parse(message->options, len, &offset, &optcode, &optlen, &optval);
+                if (r < 0)
+                        return log_dhcp6_client_errno(client, r,
+                                                      "Failed to parse option header at offset %zu of total length %zu: %m",
+                                                      offset, len);
+
+                switch (optcode) {
+                case SD_DHCP6_OPTION_CLIENTID:
+                        if (dhcp6_lease_get_clientid(lease, NULL, NULL) >= 0)
+                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "%s contains multiple client IDs",
+                                                              dhcp6_message_type_to_string(message->type));
+
+                        r = dhcp6_lease_set_clientid(lease, optval, optlen);
+                        if (r < 0)
+                                return log_dhcp6_client_errno(client, r, "Failed to set client ID: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_SERVERID:
+                        if (dhcp6_lease_get_serverid(lease, NULL, NULL) >= 0)
+                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "%s contains multiple server IDs",
+                                                              dhcp6_message_type_to_string(message->type));
+
+                        r = dhcp6_lease_set_serverid(lease, optval, optlen);
+                        if (r < 0)
+                                return log_dhcp6_client_errno(client, r, "Failed to set server ID: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_PREFERENCE:
+                        if (optlen != 1)
+                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "Received invalid length for preference.");
+
+                        r = dhcp6_lease_set_preference(lease, optval[0]);
+                        if (r < 0)
+                                return log_dhcp6_client_errno(client, r, "Failed to set preference: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_STATUS_CODE: {
+                        _cleanup_free_ char *msg = NULL;
+
+                        r = dhcp6_option_parse_status(optval, optlen, &msg);
+                        if (r < 0)
+                                return log_dhcp6_client_errno(client, r, "Failed to parse status code: %m");
+                        if (r > 0)
+                                return log_dhcp6_client_errno(client, dhcp6_message_status_to_errno(r),
+                                                              "Received %s message with non-zero status%s%s",
+                                                              dhcp6_message_type_to_string(message->type),
+                                                              isempty(msg) ? "." : ": ", strempty(msg));
+                        break;
+                }
+                case SD_DHCP6_OPTION_IA_NA: {
+                        _cleanup_(dhcp6_ia_freep) DHCP6IA *ia = NULL;
+
+                        if (client->state == DHCP6_STATE_INFORMATION_REQUEST) {
+                                log_dhcp6_client(client, "Ignoring IA NA option in information requesting mode.");
+                                break;
+                        }
+
+                        r = dhcp6_option_parse_ia(client, client->ia_na.header.id, optcode, optlen, optval, &ia);
+                        if (r == -ENOMEM)
+                                return log_oom_debug();
+                        if (r < 0) {
+                                log_dhcp6_client_errno(client, r, "Failed to parse IA_NA option, ignoring: %m");
+                                continue;
+                        }
+
+                        if (lease->ia_na) {
+                                log_dhcp6_client(client, "Received duplicate matching IA_NA option, ignoring.");
+                                continue;
+                        }
+
+                        dhcp6_ia_free(lease->ia_na);
+                        lease->ia_na = TAKE_PTR(ia);
+                        break;
+                }
+                case SD_DHCP6_OPTION_IA_PD: {
+                        _cleanup_(dhcp6_ia_freep) DHCP6IA *ia = NULL;
+
+                        if (client->state == DHCP6_STATE_INFORMATION_REQUEST) {
+                                log_dhcp6_client(client, "Ignoring IA PD option in information requesting mode.");
+                                break;
+                        }
+
+                        r = dhcp6_option_parse_ia(client, client->ia_pd.header.id, optcode, optlen, optval, &ia);
+                        if (r == -ENOMEM)
+                                return log_oom_debug();
+                        if (r < 0) {
+                                log_dhcp6_client_errno(client, r, "Failed to parse IA_PD option, ignoring: %m");
+                                continue;
+                        }
+
+                        if (lease->ia_pd) {
+                                log_dhcp6_client(client, "Received duplicate matching IA_PD option, ignoring.");
+                                continue;
+                        }
+
+                        dhcp6_ia_free(lease->ia_pd);
+                        lease->ia_pd = TAKE_PTR(ia);
+                        break;
+                }
+                case SD_DHCP6_OPTION_RAPID_COMMIT:
+                        if (optlen != 0)
+                                log_dhcp6_client(client, "Received rapid commit option with an invalid length (%zu), ignoring.", optlen);
+
+                        r = dhcp6_lease_set_rapid_commit(lease);
+                        if (r < 0)
+                                return log_dhcp6_client_errno(client, r, "Failed to set rapid commit flag: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_DNS_SERVER:
+                        r = dhcp6_lease_add_dns(lease, optval, optlen);
+                        if (r < 0)
+                                log_dhcp6_client_errno(client, r, "Failed to parse DNS server option, ignoring: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_DOMAIN:
+                        r = dhcp6_lease_add_domains(lease, optval, optlen);
+                        if (r < 0)
+                                log_dhcp6_client_errno(client, r, "Failed to parse domain list option, ignoring: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_NTP_SERVER:
+                        r = dhcp6_lease_add_ntp(lease, optval, optlen);
+                        if (r < 0)
+                                log_dhcp6_client_errno(client, r, "Failed to parse NTP server option, ignoring: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_SNTP_SERVER:
+                        r = dhcp6_lease_add_sntp(lease, optval, optlen);
+                        if (r < 0)
+                                log_dhcp6_client_errno(client, r, "Failed to parse SNTP server option, ignoring: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_CLIENT_FQDN:
+                        r = dhcp6_lease_set_fqdn(lease, optval, optlen);
+                        if (r < 0)
+                                log_dhcp6_client_errno(client, r, "Failed to parse FQDN option, ignoring: %m");
+
+                        break;
+
+                case SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME:
+                        if (optlen != 4)
+                                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                                              "Received information refresh time option with an invalid length (%zu).", optlen);
+
+                        irt = unaligned_read_be32(optval) * USEC_PER_SEC;
+                        break;
+                }
         }
 
-        return -ENOENT;
+        uint8_t *clientid;
+        size_t clientid_len;
+        if (dhcp6_lease_get_clientid(lease, &clientid, &clientid_len) < 0)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "%s message does not contain client ID. Ignoring.",
+                                              dhcp6_message_type_to_string(message->type));
+
+        if (memcmp_nn(clientid, clientid_len, &client->duid, client->duid_len) != 0)
+                return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                              "The client ID in %s message does not match. Ignoring.",
+                                              dhcp6_message_type_to_string(message->type));
+
+        if (client->state == DHCP6_STATE_INFORMATION_REQUEST) {
+                client->information_refresh_time_usec = MAX(irt, IRT_MINIMUM);
+                log_dhcp6_client(client, "New information request will be refused in %s.",
+                                 FORMAT_TIMESPAN(client->information_refresh_time_usec, USEC_PER_SEC));
+
+        } else {
+                r = dhcp6_lease_get_serverid(lease, NULL, NULL);
+                if (r < 0)
+                        return log_dhcp6_client_errno(client, r, "%s has no server id",
+                                                      dhcp6_message_type_to_string(message->type));
+
+                if (!lease->ia_na && !lease->ia_pd)
+                        return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL),
+                                                      "No IA_PD prefix or IA_NA address received. Ignoring.");
+
+                dhcp6_lease_set_lifetime(lease);
+        }
+
+        return 0;
 }
 
 static sd_dhcp6_lease *dhcp6_lease_free(sd_dhcp6_lease *lease) {
         if (!lease)
                 return NULL;
 
+        free(lease->clientid);
         free(lease->serverid);
-        dhcp6_lease_free_ia(&lease->ia);
-        dhcp6_lease_free_ia(&lease->pd);
+        dhcp6_ia_free(lease->ia_na);
+        dhcp6_ia_free(lease->ia_pd);
         free(lease->dns);
         free(lease->fqdn);
         strv_free(lease->domains);
@@ -388,14 +678,47 @@
 int dhcp6_lease_new(sd_dhcp6_lease **ret) {
         sd_dhcp6_lease *lease;
 
-        lease = new0(sd_dhcp6_lease, 1);
+        assert(ret);
+
+        lease = new(sd_dhcp6_lease, 1);
         if (!lease)
                 return -ENOMEM;
 
-        lease->n_ref = 1;
-
-        LIST_HEAD_INIT(lease->ia.addresses);
+        *lease = (sd_dhcp6_lease) {
+                .n_ref = 1,
+        };
 
         *ret = lease;
         return 0;
 }
+
+int dhcp6_lease_new_from_message(
+                sd_dhcp6_client *client,
+                const DHCP6Message *message,
+                size_t len,
+                const triple_timestamp *timestamp,
+                const struct in6_addr *server_address,
+                sd_dhcp6_lease **ret) {
+
+        _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
+        int r;
+
+        assert(client);
+        assert(message);
+        assert(len >= sizeof(DHCP6Message));
+        assert(ret);
+
+        r = dhcp6_lease_new(&lease);
+        if (r < 0)
+                return r;
+
+        dhcp6_lease_set_timestamp(lease, timestamp);
+        dhcp6_lease_set_server_address(lease, server_address);
+
+        r = dhcp6_lease_parse_message(client, lease, message, len);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(lease);
+        return 0;
+}
diff --git a/src/libsystemd-network/sd-ipv4acd.c b/src/libsystemd-network/sd-ipv4acd.c
index 3adfffc..d34c63e 100644
--- a/src/libsystemd-network/sd-ipv4acd.c
+++ b/src/libsystemd-network/sd-ipv4acd.c
@@ -17,7 +17,6 @@
 #include "event-util.h"
 #include "fd-util.h"
 #include "in-addr-util.h"
-#include "log-link.h"
 #include "memory-util.h"
 #include "network-common.h"
 #include "random-util.h"
@@ -81,12 +80,12 @@
 #define log_ipv4acd_errno(acd, error, fmt, ...)         \
         log_interface_prefix_full_errno(                \
                 "IPv4ACD: ",                            \
-                sd_ipv4acd_get_ifname(acd),             \
+                sd_ipv4acd, acd,                        \
                 error, fmt, ##__VA_ARGS__)
 #define log_ipv4acd(acd, fmt, ...)                      \
         log_interface_prefix_full_errno_zerook(         \
                 "IPv4ACD: ",                            \
-                sd_ipv4acd_get_ifname(acd),             \
+                sd_ipv4acd, acd,                        \
                 0, fmt, ##__VA_ARGS__)
 
 static const char * const ipv4acd_state_table[_IPV4ACD_STATE_MAX] = {
@@ -152,7 +151,7 @@
                 .n_ref = 1,
                 .state = IPV4ACD_STATE_INIT,
                 .ifindex = -1,
-                .fd = -1,
+                .fd = -EBADF,
         };
 
         *ret = TAKE_PTR(acd);
@@ -201,21 +200,19 @@
         if (random_usec > 0)
                 next_timeout += (usec_t) random_u64() % random_usec;
 
-        assert_se(sd_event_now(acd->event, clock_boottime_or_monotonic(), &time_now) >= 0);
+        assert_se(sd_event_now(acd->event, CLOCK_BOOTTIME, &time_now) >= 0);
 
         return event_reset_time(acd->event, &acd->timer_event_source,
-                                clock_boottime_or_monotonic(),
+                                CLOCK_BOOTTIME,
                                 time_now + next_timeout, 0,
                                 ipv4acd_on_timeout, acd,
                                 acd->event_priority, "ipv4acd-timer", true);
 }
 
 static int ipv4acd_on_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_ipv4acd *acd = userdata;
+        sd_ipv4acd *acd = ASSERT_PTR(userdata);
         int r = 0;
 
-        assert(acd);
-
         switch (acd->state) {
 
         case IPV4ACD_STATE_STARTED:
@@ -224,10 +221,8 @@
                 ipv4acd_set_state(acd, IPV4ACD_STATE_WAITING_PROBE, true);
 
                 if (acd->n_conflict >= MAX_CONFLICTS) {
-                        char ts[FORMAT_TIMESPAN_MAX];
-
                         log_ipv4acd(acd, "Max conflicts reached, delaying by %s",
-                                    format_timespan(ts, sizeof(ts), RATE_LIMIT_INTERVAL_USEC, 0));
+                                    FORMAT_TIMESPAN(RATE_LIMIT_INTERVAL_USEC, 0));
                         r = ipv4acd_set_next_wakeup(acd, RATE_LIMIT_INTERVAL_USEC, PROBE_WAIT_USEC);
                 } else
                         r = ipv4acd_set_next_wakeup(acd, 0, PROBE_WAIT_USEC);
@@ -294,7 +289,7 @@
                 break;
 
         default:
-                assert_not_reached("Invalid state.");
+                assert_not_reached();
         }
 
         return 0;
@@ -354,18 +349,17 @@
                 uint32_t revents,
                 void *userdata) {
 
-        sd_ipv4acd *acd = userdata;
+        sd_ipv4acd *acd = ASSERT_PTR(userdata);
         struct ether_arp packet;
         ssize_t n;
         int r;
 
         assert(s);
-        assert(acd);
         assert(fd >= 0);
 
         n = recv(fd, &packet, sizeof(struct ether_arp), 0);
         if (n < 0) {
-                if (IN_SET(errno, EAGAIN, EINTR))
+                if (ERRNO_IS_TRANSIENT(errno) || ERRNO_IS_DISCONNECT(errno))
                         return 0;
 
                 log_ipv4acd_errno(acd, errno, "Failed to read ARP packet: %m");
@@ -384,7 +378,7 @@
                 if (ipv4acd_arp_conflict(acd, &packet, true)) {
                         usec_t ts;
 
-                        assert_se(sd_event_now(acd->event, clock_boottime_or_monotonic(), &ts) >= 0);
+                        assert_se(sd_event_now(acd->event, CLOCK_BOOTTIME, &ts) >= 0);
 
                         /* Defend address */
                         if (ts > acd->defend_window) {
@@ -410,7 +404,7 @@
                 break;
 
         default:
-                assert_not_reached("Invalid state.");
+                assert_not_reached();
         }
 
         return 0;
@@ -447,11 +441,19 @@
         return free_and_strdup(&acd->ifname, ifname);
 }
 
-const char *sd_ipv4acd_get_ifname(sd_ipv4acd *acd) {
-        if (!acd)
-                return NULL;
+int sd_ipv4acd_get_ifname(sd_ipv4acd *acd, const char **ret) {
+        int r;
 
-        return get_ifname(acd->ifindex, &acd->ifname);
+        assert_return(acd, -EINVAL);
+
+        r = get_ifname(acd->ifindex, &acd->ifname);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = acd->ifname;
+
+        return 0;
 }
 
 int sd_ipv4acd_set_mac(sd_ipv4acd *acd, const struct ether_addr *addr) {
@@ -581,7 +583,7 @@
         if (r < 0)
                 return r;
 
-        CLOSE_AND_REPLACE(acd->fd, r);
+        close_and_replace(acd->fd, r);
 
         if (reset_conflicts)
                 acd->n_conflict = 0;
diff --git a/src/libsystemd-network/sd-ipv4ll.c b/src/libsystemd-network/sd-ipv4ll.c
index 7b9d63c..a29279e 100644
--- a/src/libsystemd-network/sd-ipv4ll.c
+++ b/src/libsystemd-network/sd-ipv4ll.c
@@ -15,12 +15,11 @@
 #include "alloc-util.h"
 #include "ether-addr-util.h"
 #include "in-addr-util.h"
-#include "log-link.h"
+#include "network-common.h"
 #include "random-util.h"
 #include "siphash24.h"
 #include "sparse-endian.h"
 #include "string-util.h"
-#include "util.h"
 
 #define IPV4LL_NETWORK UINT32_C(0xA9FE0000)
 #define IPV4LL_NETMASK UINT32_C(0xFFFF0000)
@@ -55,12 +54,12 @@
 #define log_ipv4ll_errno(ll, error, fmt, ...)           \
         log_interface_prefix_full_errno(                \
                 "IPv4LL: ",                             \
-                sd_ipv4ll_get_ifname(ll),               \
+                sd_ipv4ll, ll,                          \
                 error, fmt, ##__VA_ARGS__)
 #define log_ipv4ll(ll, fmt, ...)                        \
         log_interface_prefix_full_errno_zerook(         \
                 "IPv4LL: ",                             \
-                sd_ipv4ll_get_ifname(ll),               \
+                sd_ipv4ll, ll,                          \
                 0, fmt, ##__VA_ARGS__)
 
 static void ipv4ll_on_acd(sd_ipv4acd *acd, int event, void *userdata);
@@ -133,11 +132,10 @@
         return sd_ipv4acd_set_ifname(ll->acd, ifname);
 }
 
-const char *sd_ipv4ll_get_ifname(sd_ipv4ll *ll) {
-        if (!ll)
-                return NULL;
+int sd_ipv4ll_get_ifname(sd_ipv4ll *ll, const char **ret) {
+        assert_return(ll, -EINVAL);
 
-        return sd_ipv4acd_get_ifname(ll->acd);
+        return sd_ipv4acd_get_ifname(ll->acd, ret);
 }
 
 int sd_ipv4ll_set_mac(sd_ipv4ll *ll, const struct ether_addr *addr) {
@@ -213,21 +211,12 @@
         return sd_ipv4acd_is_running(ll->acd);
 }
 
-static bool ipv4ll_address_is_valid(const struct in_addr *address) {
-        assert(address);
-
-        if (!in4_addr_is_link_local(address))
-                return false;
-
-        return !IN_SET(be32toh(address->s_addr) & 0x0000FF00U, 0x0000U, 0xFF00U);
-}
-
 int sd_ipv4ll_set_address(sd_ipv4ll *ll, const struct in_addr *address) {
         int r;
 
         assert_return(ll, -EINVAL);
         assert_return(address, -EINVAL);
-        assert_return(ipv4ll_address_is_valid(address), -EINVAL);
+        assert_return(in4_addr_is_link_local_dynamic(address), -EINVAL);
 
         r = sd_ipv4acd_set_address(ll->acd, address);
         if (r < 0)
@@ -241,7 +230,6 @@
 #define PICK_HASH_KEY SD_ID128_MAKE(15,ac,82,a6,d6,3f,49,78,98,77,5d,0c,69,02,94,0b)
 
 static int ipv4ll_pick_address(sd_ipv4ll *ll) {
-        _cleanup_free_ char *address = NULL;
         be32_t addr;
 
         assert(ll);
@@ -258,8 +246,7 @@
         } while (addr == ll->address ||
                  IN_SET(be32toh(addr) & 0x0000FF00U, 0x0000U, 0xFF00U));
 
-        (void) in_addr_to_string(AF_INET, &(union in_addr_union) { .in.s_addr = addr }, &address);
-        log_ipv4ll(ll, "Picked new IP address %s.", strna(address));
+        log_ipv4ll(ll, "Picked new IP address %s.", IN4_ADDR_TO_STRING((const struct in_addr*) &addr));
 
         return sd_ipv4ll_set_address(ll, &(struct in_addr) { addr });
 }
@@ -325,12 +312,11 @@
 }
 
 void ipv4ll_on_acd(sd_ipv4acd *acd, int event, void *userdata) {
-        sd_ipv4ll *ll = userdata;
+        sd_ipv4ll *ll = ASSERT_PTR(userdata);
         IPV4LL_DONT_DESTROY(ll);
         int r;
 
         assert(acd);
-        assert(ll);
 
         switch (event) {
 
@@ -360,7 +346,7 @@
                 break;
 
         default:
-                assert_not_reached("Invalid IPv4ACD event.");
+                assert_not_reached();
         }
 
         return;
@@ -370,9 +356,7 @@
 }
 
 static int ipv4ll_check_mac(sd_ipv4acd *acd, const struct ether_addr *mac, void *userdata) {
-        sd_ipv4ll *ll = userdata;
-
-        assert(ll);
+        sd_ipv4ll *ll = ASSERT_PTR(userdata);
 
         if (ll->check_mac_callback)
                 return ll->check_mac_callback(ll, mac, ll->check_mac_userdata);
diff --git a/src/libsystemd-network/sd-lldp-rx.c b/src/libsystemd-network/sd-lldp-rx.c
new file mode 100644
index 0000000..03e8986
--- /dev/null
+++ b/src/libsystemd-network/sd-lldp-rx.c
@@ -0,0 +1,525 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <arpa/inet.h>
+#include <linux/sockios.h>
+#include <sys/ioctl.h>
+
+#include "sd-lldp-rx.h"
+
+#include "alloc-util.h"
+#include "ether-addr-util.h"
+#include "event-util.h"
+#include "fd-util.h"
+#include "lldp-neighbor.h"
+#include "lldp-network.h"
+#include "lldp-rx-internal.h"
+#include "memory-util.h"
+#include "network-common.h"
+#include "socket-util.h"
+#include "sort-util.h"
+#include "string-table.h"
+
+#define LLDP_DEFAULT_NEIGHBORS_MAX 128U
+
+static const char * const lldp_rx_event_table[_SD_LLDP_RX_EVENT_MAX] = {
+        [SD_LLDP_RX_EVENT_ADDED]     = "added",
+        [SD_LLDP_RX_EVENT_REMOVED]   = "removed",
+        [SD_LLDP_RX_EVENT_UPDATED]   = "updated",
+        [SD_LLDP_RX_EVENT_REFRESHED] = "refreshed",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(lldp_rx_event, sd_lldp_rx_event_t);
+
+static void lldp_rx_flush_neighbors(sd_lldp_rx *lldp_rx) {
+        assert(lldp_rx);
+
+        hashmap_clear(lldp_rx->neighbor_by_id);
+}
+
+static void lldp_rx_callback(sd_lldp_rx *lldp_rx, sd_lldp_rx_event_t event, sd_lldp_neighbor *n) {
+        assert(lldp_rx);
+        assert(event >= 0 && event < _SD_LLDP_RX_EVENT_MAX);
+
+        if (!lldp_rx->callback)
+                return (void) log_lldp_rx(lldp_rx, "Received '%s' event.", lldp_rx_event_to_string(event));
+
+        log_lldp_rx(lldp_rx, "Invoking callback for '%s' event.", lldp_rx_event_to_string(event));
+        lldp_rx->callback(lldp_rx, event, n, lldp_rx->userdata);
+}
+
+static int lldp_rx_make_space(sd_lldp_rx *lldp_rx, size_t extra) {
+        usec_t t = USEC_INFINITY;
+        bool changed = false;
+
+        assert(lldp_rx);
+
+        /* Remove all entries that are past their TTL, and more until at least the specified number of extra entries
+         * are free. */
+
+        for (;;) {
+                _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *n = NULL;
+
+                n = prioq_peek(lldp_rx->neighbor_by_expiry);
+                if (!n)
+                        break;
+
+                sd_lldp_neighbor_ref(n);
+
+                if (hashmap_size(lldp_rx->neighbor_by_id) > LESS_BY(lldp_rx->neighbors_max, extra))
+                        goto remove_one;
+
+                if (t == USEC_INFINITY)
+                        t = now(CLOCK_BOOTTIME);
+
+                if (n->until > t)
+                        break;
+
+        remove_one:
+                lldp_neighbor_unlink(n);
+                lldp_rx_callback(lldp_rx, SD_LLDP_RX_EVENT_REMOVED, n);
+                changed = true;
+        }
+
+        return changed;
+}
+
+static bool lldp_rx_keep_neighbor(sd_lldp_rx *lldp_rx, sd_lldp_neighbor *n) {
+        assert(lldp_rx);
+        assert(n);
+
+        /* Don't keep data with a zero TTL */
+        if (n->ttl <= 0)
+                return false;
+
+        /* Filter out data from the filter address */
+        if (!ether_addr_is_null(&lldp_rx->filter_address) &&
+            ether_addr_equal(&lldp_rx->filter_address, &n->source_address))
+                return false;
+
+        /* Only add if the neighbor has a capability we are interested in. Note that we also store all neighbors with
+         * no caps field set. */
+        if (n->has_capabilities &&
+            (n->enabled_capabilities & lldp_rx->capability_mask) == 0)
+                return false;
+
+        /* Keep everything else */
+        return true;
+}
+
+static int lldp_rx_start_timer(sd_lldp_rx *lldp_rx, sd_lldp_neighbor *neighbor);
+
+static int lldp_rx_add_neighbor(sd_lldp_rx *lldp_rx, sd_lldp_neighbor *n) {
+        _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *old = NULL;
+        bool keep;
+        int r;
+
+        assert(lldp_rx);
+        assert(n);
+        assert(!n->lldp_rx);
+
+        keep = lldp_rx_keep_neighbor(lldp_rx, n);
+
+        /* First retrieve the old entry for this MSAP */
+        old = hashmap_get(lldp_rx->neighbor_by_id, &n->id);
+        if (old) {
+                sd_lldp_neighbor_ref(old);
+
+                if (!keep) {
+                        lldp_neighbor_unlink(old);
+                        lldp_rx_callback(lldp_rx, SD_LLDP_RX_EVENT_REMOVED, old);
+                        return 0;
+                }
+
+                if (lldp_neighbor_equal(n, old)) {
+                        /* Is this equal, then restart the TTL counter, but don't do anything else. */
+                        old->timestamp = n->timestamp;
+                        lldp_rx_start_timer(lldp_rx, old);
+                        lldp_rx_callback(lldp_rx, SD_LLDP_RX_EVENT_REFRESHED, old);
+                        return 0;
+                }
+
+                /* Data changed, remove the old entry, and add a new one */
+                lldp_neighbor_unlink(old);
+
+        } else if (!keep)
+                return 0;
+
+        /* Then, make room for at least one new neighbor */
+        lldp_rx_make_space(lldp_rx, 1);
+
+        r = hashmap_ensure_put(&lldp_rx->neighbor_by_id, &lldp_neighbor_hash_ops, &n->id, n);
+        if (r < 0)
+                goto finish;
+
+        r = prioq_ensure_put(&lldp_rx->neighbor_by_expiry, lldp_neighbor_prioq_compare_func, n, &n->prioq_idx);
+        if (r < 0) {
+                assert_se(hashmap_remove(lldp_rx->neighbor_by_id, &n->id) == n);
+                goto finish;
+        }
+
+        n->lldp_rx = lldp_rx;
+
+        lldp_rx_start_timer(lldp_rx, n);
+        lldp_rx_callback(lldp_rx, old ? SD_LLDP_RX_EVENT_UPDATED : SD_LLDP_RX_EVENT_ADDED, n);
+
+        return 1;
+
+finish:
+        if (old)
+                lldp_rx_callback(lldp_rx, SD_LLDP_RX_EVENT_REMOVED, old);
+
+        return r;
+}
+
+static int lldp_rx_handle_datagram(sd_lldp_rx *lldp_rx, sd_lldp_neighbor *n) {
+        int r;
+
+        assert(lldp_rx);
+        assert(n);
+
+        r = lldp_neighbor_parse(n);
+        if (r < 0)
+                return r;
+
+        r = lldp_rx_add_neighbor(lldp_rx, n);
+        if (r < 0)
+                return log_lldp_rx_errno(lldp_rx, r, "Failed to add datagram. Ignoring.");
+
+        log_lldp_rx(lldp_rx, "Successfully processed LLDP datagram.");
+        return 0;
+}
+
+static int lldp_rx_receive_datagram(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
+        _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *n = NULL;
+        ssize_t space, length;
+        sd_lldp_rx *lldp_rx = ASSERT_PTR(userdata);
+        struct timespec ts;
+
+        assert(fd >= 0);
+
+        space = next_datagram_size_fd(fd);
+        if (space < 0) {
+                if (ERRNO_IS_TRANSIENT(space) || ERRNO_IS_DISCONNECT(space))
+                        return 0;
+
+                log_lldp_rx_errno(lldp_rx, space, "Failed to determine datagram size to read, ignoring: %m");
+                return 0;
+        }
+
+        n = lldp_neighbor_new(space);
+        if (!n) {
+                log_oom_debug();
+                return 0;
+        }
+
+        length = recv(fd, LLDP_NEIGHBOR_RAW(n), n->raw_size, MSG_DONTWAIT);
+        if (length < 0) {
+                if (ERRNO_IS_TRANSIENT(errno) || ERRNO_IS_DISCONNECT(errno))
+                        return 0;
+
+                log_lldp_rx_errno(lldp_rx, errno, "Failed to read LLDP datagram, ignoring: %m");
+                return 0;
+        }
+
+        if ((size_t) length != n->raw_size) {
+                log_lldp_rx(lldp_rx, "Packet size mismatch, ignoring");
+                return 0;
+        }
+
+        /* Try to get the timestamp of this packet if it is known */
+        if (ioctl(fd, SIOCGSTAMPNS, &ts) >= 0)
+                triple_timestamp_from_realtime(&n->timestamp, timespec_load(&ts));
+        else
+                triple_timestamp_get(&n->timestamp);
+
+        (void) lldp_rx_handle_datagram(lldp_rx, n);
+        return 0;
+}
+
+static void lldp_rx_reset(sd_lldp_rx *lldp_rx) {
+        assert(lldp_rx);
+
+        (void) event_source_disable(lldp_rx->timer_event_source);
+        lldp_rx->io_event_source = sd_event_source_disable_unref(lldp_rx->io_event_source);
+        lldp_rx->fd = safe_close(lldp_rx->fd);
+}
+
+int sd_lldp_rx_is_running(sd_lldp_rx *lldp_rx) {
+        if (!lldp_rx)
+                return false;
+
+        return lldp_rx->fd >= 0;
+}
+
+int sd_lldp_rx_start(sd_lldp_rx *lldp_rx) {
+        int r;
+
+        assert_return(lldp_rx, -EINVAL);
+        assert_return(lldp_rx->event, -EINVAL);
+        assert_return(lldp_rx->ifindex > 0, -EINVAL);
+
+        if (sd_lldp_rx_is_running(lldp_rx))
+                return 0;
+
+        assert(!lldp_rx->io_event_source);
+
+        lldp_rx->fd = lldp_network_bind_raw_socket(lldp_rx->ifindex);
+        if (lldp_rx->fd < 0)
+                return lldp_rx->fd;
+
+        r = sd_event_add_io(lldp_rx->event, &lldp_rx->io_event_source, lldp_rx->fd, EPOLLIN, lldp_rx_receive_datagram, lldp_rx);
+        if (r < 0)
+                goto fail;
+
+        r = sd_event_source_set_priority(lldp_rx->io_event_source, lldp_rx->event_priority);
+        if (r < 0)
+                goto fail;
+
+        (void) sd_event_source_set_description(lldp_rx->io_event_source, "lldp-rx-io");
+
+        log_lldp_rx(lldp_rx, "Started LLDP client");
+        return 1;
+
+fail:
+        lldp_rx_reset(lldp_rx);
+        return r;
+}
+
+int sd_lldp_rx_stop(sd_lldp_rx *lldp_rx) {
+        if (!sd_lldp_rx_is_running(lldp_rx))
+                return 0;
+
+        log_lldp_rx(lldp_rx, "Stopping LLDP client");
+
+        lldp_rx_reset(lldp_rx);
+        lldp_rx_flush_neighbors(lldp_rx);
+
+        return 1;
+}
+
+int sd_lldp_rx_attach_event(sd_lldp_rx *lldp_rx, sd_event *event, int64_t priority) {
+        int r;
+
+        assert_return(lldp_rx, -EINVAL);
+        assert_return(!sd_lldp_rx_is_running(lldp_rx), -EBUSY);
+        assert_return(!lldp_rx->event, -EBUSY);
+
+        if (event)
+                lldp_rx->event = sd_event_ref(event);
+        else {
+                r = sd_event_default(&lldp_rx->event);
+                if (r < 0)
+                        return r;
+        }
+
+        lldp_rx->event_priority = priority;
+
+        return 0;
+}
+
+int sd_lldp_rx_detach_event(sd_lldp_rx *lldp_rx) {
+        assert_return(lldp_rx, -EINVAL);
+        assert_return(!sd_lldp_rx_is_running(lldp_rx), -EBUSY);
+
+        lldp_rx->io_event_source = sd_event_source_disable_unref(lldp_rx->io_event_source);
+        lldp_rx->timer_event_source = sd_event_source_disable_unref(lldp_rx->timer_event_source);
+        lldp_rx->event = sd_event_unref(lldp_rx->event);
+        return 0;
+}
+
+sd_event* sd_lldp_rx_get_event(sd_lldp_rx *lldp_rx) {
+        assert_return(lldp_rx, NULL);
+
+        return lldp_rx->event;
+}
+
+int sd_lldp_rx_set_callback(sd_lldp_rx *lldp_rx, sd_lldp_rx_callback_t cb, void *userdata) {
+        assert_return(lldp_rx, -EINVAL);
+
+        lldp_rx->callback = cb;
+        lldp_rx->userdata = userdata;
+
+        return 0;
+}
+
+int sd_lldp_rx_set_ifindex(sd_lldp_rx *lldp_rx, int ifindex) {
+        assert_return(lldp_rx, -EINVAL);
+        assert_return(ifindex > 0, -EINVAL);
+        assert_return(!sd_lldp_rx_is_running(lldp_rx), -EBUSY);
+
+        lldp_rx->ifindex = ifindex;
+        return 0;
+}
+
+int sd_lldp_rx_set_ifname(sd_lldp_rx *lldp_rx, const char *ifname) {
+        assert_return(lldp_rx, -EINVAL);
+        assert_return(ifname, -EINVAL);
+
+        if (!ifname_valid_full(ifname, IFNAME_VALID_ALTERNATIVE))
+                return -EINVAL;
+
+        return free_and_strdup(&lldp_rx->ifname, ifname);
+}
+
+int sd_lldp_rx_get_ifname(sd_lldp_rx *lldp_rx, const char **ret) {
+        int r;
+
+        assert_return(lldp_rx, -EINVAL);
+
+        r = get_ifname(lldp_rx->ifindex, &lldp_rx->ifname);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = lldp_rx->ifname;
+
+        return 0;
+}
+
+static sd_lldp_rx *lldp_rx_free(sd_lldp_rx *lldp_rx) {
+        if (!lldp_rx)
+                return NULL;
+
+        lldp_rx_reset(lldp_rx);
+
+        sd_lldp_rx_detach_event(lldp_rx);
+
+        lldp_rx_flush_neighbors(lldp_rx);
+
+        hashmap_free(lldp_rx->neighbor_by_id);
+        prioq_free(lldp_rx->neighbor_by_expiry);
+        free(lldp_rx->ifname);
+        return mfree(lldp_rx);
+}
+
+DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_lldp_rx, sd_lldp_rx, lldp_rx_free);
+
+int sd_lldp_rx_new(sd_lldp_rx **ret) {
+        _cleanup_(sd_lldp_rx_unrefp) sd_lldp_rx *lldp_rx = NULL;
+
+        assert_return(ret, -EINVAL);
+
+        lldp_rx = new(sd_lldp_rx, 1);
+        if (!lldp_rx)
+                return -ENOMEM;
+
+        *lldp_rx = (sd_lldp_rx) {
+                .n_ref = 1,
+                .fd = -EBADF,
+                .neighbors_max = LLDP_DEFAULT_NEIGHBORS_MAX,
+                .capability_mask = UINT16_MAX,
+        };
+
+        *ret = TAKE_PTR(lldp_rx);
+        return 0;
+}
+
+static int on_timer_event(sd_event_source *s, uint64_t usec, void *userdata) {
+        sd_lldp_rx *lldp_rx = userdata;
+        int r;
+
+        r = lldp_rx_make_space(lldp_rx, 0);
+        if (r < 0) {
+                log_lldp_rx_errno(lldp_rx, r, "Failed to make space, ignoring: %m");
+                return 0;
+        }
+
+        r = lldp_rx_start_timer(lldp_rx, NULL);
+        if (r < 0) {
+                log_lldp_rx_errno(lldp_rx, r, "Failed to restart timer, ignoring: %m");
+                return 0;
+        }
+
+        return 0;
+}
+
+static int lldp_rx_start_timer(sd_lldp_rx *lldp_rx, sd_lldp_neighbor *neighbor) {
+        sd_lldp_neighbor *n;
+
+        assert(lldp_rx);
+        assert(lldp_rx->event);
+
+        if (neighbor)
+                lldp_neighbor_start_ttl(neighbor);
+
+        n = prioq_peek(lldp_rx->neighbor_by_expiry);
+        if (!n)
+                return event_source_disable(lldp_rx->timer_event_source);
+
+        return event_reset_time(lldp_rx->event, &lldp_rx->timer_event_source,
+                                CLOCK_BOOTTIME,
+                                n->until, 0,
+                                on_timer_event, lldp_rx,
+                                lldp_rx->event_priority, "lldp-rx-timer", true);
+}
+
+static inline int neighbor_compare_func(sd_lldp_neighbor * const *a, sd_lldp_neighbor * const *b) {
+        assert(a);
+        assert(b);
+        assert(*a);
+        assert(*b);
+
+        return lldp_neighbor_id_compare_func(&(*a)->id, &(*b)->id);
+}
+
+int sd_lldp_rx_get_neighbors(sd_lldp_rx *lldp_rx, sd_lldp_neighbor ***ret) {
+        _cleanup_free_ sd_lldp_neighbor **l = NULL;
+        sd_lldp_neighbor *n;
+        int k = 0;
+
+        assert_return(lldp_rx, -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        if (hashmap_isempty(lldp_rx->neighbor_by_id)) { /* Special shortcut */
+                *ret = NULL;
+                return 0;
+        }
+
+        l = new0(sd_lldp_neighbor*, hashmap_size(lldp_rx->neighbor_by_id));
+        if (!l)
+                return -ENOMEM;
+
+        HASHMAP_FOREACH(n, lldp_rx->neighbor_by_id)
+                l[k++] = sd_lldp_neighbor_ref(n);
+
+        assert((size_t) k == hashmap_size(lldp_rx->neighbor_by_id));
+
+        /* Return things in a stable order */
+        typesafe_qsort(l, k, neighbor_compare_func);
+        *ret = TAKE_PTR(l);
+
+        return k;
+}
+
+int sd_lldp_rx_set_neighbors_max(sd_lldp_rx *lldp_rx, uint64_t m) {
+        assert_return(lldp_rx, -EINVAL);
+        assert_return(m > 0, -EINVAL);
+
+        lldp_rx->neighbors_max = m;
+        lldp_rx_make_space(lldp_rx, 0);
+
+        return 0;
+}
+
+int sd_lldp_rx_match_capabilities(sd_lldp_rx *lldp_rx, uint16_t mask) {
+        assert_return(lldp_rx, -EINVAL);
+        assert_return(mask != 0, -EINVAL);
+
+        lldp_rx->capability_mask = mask;
+
+        return 0;
+}
+
+int sd_lldp_rx_set_filter_address(sd_lldp_rx *lldp_rx, const struct ether_addr *addr) {
+        assert_return(lldp_rx, -EINVAL);
+
+        /* In order to deal nicely with bridges that send back our own packets, allow one address to be filtered, so
+         * that our own can be filtered out here. */
+
+        if (addr)
+                lldp_rx->filter_address = *addr;
+        else
+                zero(lldp_rx->filter_address);
+
+        return 0;
+}
diff --git a/src/libsystemd-network/sd-lldp-tx.c b/src/libsystemd-network/sd-lldp-tx.c
new file mode 100644
index 0000000..2b822af
--- /dev/null
+++ b/src/libsystemd-network/sd-lldp-tx.c
@@ -0,0 +1,628 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <arpa/inet.h>
+#include <linux/sockios.h>
+#include <sys/ioctl.h>
+
+#include "sd-event.h"
+#include "sd-id128.h"
+#include "sd-lldp-tx.h"
+
+#include "alloc-util.h"
+#include "ether-addr-util.h"
+#include "fd-util.h"
+#include "hostname-util.h"
+#include "network-common.h"
+#include "random-util.h"
+#include "socket-util.h"
+#include "string-util.h"
+#include "time-util.h"
+#include "unaligned.h"
+#include "web-util.h"
+
+/* The LLDP spec calls this "txFastInit", see 9.2.5.19 */
+#define LLDP_FAST_TX_INIT 4U
+
+/* The LLDP spec calls this "msgTxHold", see 9.2.5.6 */
+#define LLDP_TX_HOLD 4U
+
+/* The jitter range to add, see 9.2.2. */
+#define LLDP_TX_JITTER_USEC (400U * USEC_PER_MSEC)
+
+/* The LLDP spec calls this msgTxInterval, but we subtract half the jitter off it. */
+#define LLDP_TX_INTERVAL_USEC (30U * USEC_PER_SEC - LLDP_TX_JITTER_USEC / 2)
+
+/* The LLDP spec calls this msgFastTx, but we subtract half the jitter off it. */
+#define LLDP_FAST_TX_INTERVAL_USEC (1U * USEC_PER_SEC - LLDP_TX_JITTER_USEC / 2)
+
+#define LLDP_TX_TTL ((uint16_t) DIV_ROUND_UP(LLDP_TX_INTERVAL_USEC * LLDP_TX_HOLD + 1, USEC_PER_SEC))
+
+static const struct ether_addr lldp_multicast_addr[_SD_LLDP_MULTICAST_MODE_MAX] = {
+        [SD_LLDP_MULTICAST_MODE_NEAREST_BRIDGE]  = {{ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e }},
+        [SD_LLDP_MULTICAST_MODE_NON_TPMR_BRIDGE] = {{ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 }},
+        [SD_LLDP_MULTICAST_MODE_CUSTOMER_BRIDGE] = {{ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 }},
+};
+
+struct sd_lldp_tx {
+        unsigned n_ref;
+
+        int ifindex;
+        char *ifname;
+
+        sd_event *event;
+        int64_t event_priority;
+        sd_event_source *timer_event_source;
+
+        unsigned fast_tx;
+
+        sd_lldp_multicast_mode_t mode;
+        struct ether_addr hwaddr;
+
+        char *port_description;
+        char *hostname;
+        char *pretty_hostname;
+        char *mud_url;
+        uint16_t supported_capabilities;
+        uint16_t enabled_capabilities;
+};
+
+#define log_lldp_tx_errno(lldp_tx, error, fmt, ...)     \
+        log_interface_prefix_full_errno(                \
+                "LLDP Tx: ",                            \
+                sd_lldp_tx, lldp_tx,                    \
+                error, fmt, ##__VA_ARGS__)
+#define log_lldp_tx(lldp_tx, fmt, ...)                  \
+        log_interface_prefix_full_errno_zerook(         \
+                "LLDP Tx: ",                            \
+                sd_lldp_tx, lldp_tx,                    \
+                0, fmt, ##__VA_ARGS__)
+
+static sd_lldp_tx *lldp_tx_free(sd_lldp_tx *lldp_tx) {
+        if (!lldp_tx)
+                return NULL;
+
+        sd_lldp_tx_detach_event(lldp_tx);
+
+        free(lldp_tx->port_description);
+        free(lldp_tx->hostname);
+        free(lldp_tx->pretty_hostname);
+        free(lldp_tx->mud_url);
+
+        free(lldp_tx->ifname);
+        return mfree(lldp_tx);
+}
+
+DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_lldp_tx, sd_lldp_tx, lldp_tx_free);
+
+int sd_lldp_tx_new(sd_lldp_tx **ret) {
+        _cleanup_(sd_lldp_tx_unrefp) sd_lldp_tx *lldp_tx = NULL;
+
+        assert_return(ret, -EINVAL);
+
+        lldp_tx = new(sd_lldp_tx, 1);
+        if (!lldp_tx)
+                return -ENOMEM;
+
+        *lldp_tx = (sd_lldp_tx) {
+                .n_ref = 1,
+                .mode = _SD_LLDP_MULTICAST_MODE_INVALID,
+        };
+
+        *ret = TAKE_PTR(lldp_tx);
+        return 0;
+}
+
+int sd_lldp_tx_set_ifindex(sd_lldp_tx *lldp_tx, int ifindex) {
+        assert_return(lldp_tx, -EINVAL);
+        assert_return(ifindex > 0, -EINVAL);
+
+        lldp_tx->ifindex = ifindex;
+        return 0;
+}
+
+int sd_lldp_tx_set_ifname(sd_lldp_tx *lldp_tx, const char *ifname) {
+        assert_return(lldp_tx, -EINVAL);
+        assert_return(ifname, -EINVAL);
+
+        if (!ifname_valid_full(ifname, IFNAME_VALID_ALTERNATIVE))
+                return -EINVAL;
+
+        return free_and_strdup(&lldp_tx->ifname, ifname);
+}
+
+int sd_lldp_tx_get_ifname(sd_lldp_tx *lldp_tx, const char **ret) {
+        int r;
+
+        assert_return(lldp_tx, -EINVAL);
+
+        r = get_ifname(lldp_tx->ifindex, &lldp_tx->ifname);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = lldp_tx->ifname;
+
+        return 0;
+}
+
+int sd_lldp_tx_set_multicast_mode(sd_lldp_tx *lldp_tx, sd_lldp_multicast_mode_t mode) {
+        assert_return(lldp_tx, -EINVAL);
+        assert_return(mode >= 0 && mode < _SD_LLDP_MULTICAST_MODE_MAX, -EINVAL);
+
+        lldp_tx->mode = mode;
+        return 0;
+}
+
+int sd_lldp_tx_set_hwaddr(sd_lldp_tx *lldp_tx, const struct ether_addr *hwaddr) {
+        assert_return(lldp_tx, -EINVAL);
+        assert_return(!ether_addr_is_null(hwaddr), -EINVAL);
+
+        lldp_tx->hwaddr = *hwaddr;
+        return 0;
+}
+
+int sd_lldp_tx_set_capabilities(sd_lldp_tx *lldp_tx, uint16_t supported, uint16_t enabled) {
+        assert_return(lldp_tx, -EINVAL);
+        assert_return((enabled & ~supported) == 0, -EINVAL);
+
+        lldp_tx->supported_capabilities = supported;
+        lldp_tx->enabled_capabilities = enabled;
+        return 0;
+}
+
+int sd_lldp_tx_set_port_description(sd_lldp_tx *lldp_tx, const char *port_description) {
+        assert_return(lldp_tx, -EINVAL);
+
+        /* An empty string unset the previously set hostname. */
+        if (strlen_ptr(port_description) >= 512)
+                return -EINVAL;
+
+        return free_and_strdup(&lldp_tx->port_description, empty_to_null(port_description));
+}
+
+int sd_lldp_tx_set_hostname(sd_lldp_tx *lldp_tx, const char *hostname) {
+        assert_return(lldp_tx, -EINVAL);
+
+        /* An empty string unset the previously set hostname. */
+        if (!isempty(hostname)) {
+                assert_cc(HOST_NAME_MAX < 512);
+
+                if (!hostname_is_valid(hostname, 0))
+                        return -EINVAL;
+        }
+
+        return free_and_strdup(&lldp_tx->hostname, empty_to_null(hostname));
+}
+
+int sd_lldp_tx_set_pretty_hostname(sd_lldp_tx *lldp_tx, const char *pretty_hostname) {
+        assert_return(lldp_tx, -EINVAL);
+
+        /* An empty string unset the previously set hostname. */
+        if (strlen_ptr(pretty_hostname) >= 512)
+                return -EINVAL;
+
+        return free_and_strdup(&lldp_tx->pretty_hostname, empty_to_null(pretty_hostname));
+}
+
+int sd_lldp_tx_set_mud_url(sd_lldp_tx *lldp_tx, const char *mud_url) {
+        assert_return(lldp_tx, -EINVAL);
+
+        /* An empty string unset the previously set hostname. */
+        if (!isempty(mud_url)) {
+                /* Unless the maximum length of each value is 511, the MUD url must be smaller than 256.
+                 * See RFC 8520. */
+                if (strlen(mud_url) >= 256)
+                        return -EINVAL;
+
+                if (!http_url_is_valid(mud_url))
+                        return -EINVAL;
+        }
+
+        return free_and_strdup(&lldp_tx->mud_url, empty_to_null(mud_url));
+}
+
+static size_t lldp_tx_calculate_maximum_packet_size(sd_lldp_tx *lldp_tx, const char *hostname, const char *pretty_hostname) {
+        assert(lldp_tx);
+        assert(lldp_tx->ifindex > 0);
+
+        return sizeof(struct ether_header) +
+                /* Chassis ID */
+                2 + 1 + (SD_ID128_STRING_MAX - 1) +
+                /* Port ID */
+                2 + 1 + strlen_ptr(lldp_tx->ifname) +
+                /* TTL */
+                2 + 2 +
+                /* Port description */
+                2 + strlen_ptr(lldp_tx->port_description) +
+                /* System name */
+                2 + strlen_ptr(hostname) +
+                /* System description */
+                2 + strlen_ptr(pretty_hostname) +
+                /* MUD URL */
+                2 + sizeof(SD_LLDP_OUI_IANA_MUD) + strlen_ptr(lldp_tx->mud_url) +
+                /* System Capabilities */
+                2 + 4 +
+                /* End */
+                2;
+}
+
+static int packet_append_tlv_header(uint8_t *packet, size_t packet_size, size_t *offset, uint8_t type, size_t data_len) {
+        assert(packet);
+        assert(offset);
+
+        /*
+         * +--------+--------+--------------
+         * |TLV Type|  len   |   value
+         * |(7 bits)|(9 bits)|(0-511 octets)
+         * +--------+--------+--------------
+         * where:
+         *
+         * len = indicates the length of value
+         */
+
+        /* The type field is 7-bits. */
+        if (type >= 128)
+                return -EINVAL;
+
+        /* The data length field is 9-bits. */
+        if (data_len >= 512)
+                return -EINVAL;
+
+        if (packet_size < 2 + data_len)
+                return -ENOBUFS;
+
+        if (*offset > packet_size - 2 - data_len)
+                return -ENOBUFS;
+
+        packet[(*offset)++] = (type << 1) | !!(data_len >> 8);
+        packet[(*offset)++] = data_len & (size_t) UINT8_MAX;
+
+        return 0;
+}
+
+static int packet_append_prefixed_string(
+                uint8_t *packet,
+                size_t packet_size,
+                size_t *offset,
+                uint8_t type,
+                size_t prefix_len,
+                const void *prefix,
+                const char *str) {
+
+        size_t len;
+        int r;
+
+        assert(packet);
+        assert(offset);
+        assert(prefix_len == 0 || prefix);
+
+        if (isempty(str))
+                return 0;
+
+        len = strlen(str);
+
+        /* Check for overflow */
+        if (len > SIZE_MAX - prefix_len)
+                return -ENOBUFS;
+
+        r = packet_append_tlv_header(packet, packet_size, offset, type, prefix_len + len);
+        if (r < 0)
+                return r;
+
+        memcpy_safe(packet + *offset, prefix, prefix_len);
+        *offset += prefix_len;
+
+        memcpy(packet + *offset, str, len);
+        *offset += len;
+
+        return 0;
+}
+
+static int packet_append_string(
+                uint8_t *packet,
+                size_t packet_size,
+                size_t *offset,
+                uint8_t type,
+                const char *str) {
+
+        return packet_append_prefixed_string(packet, packet_size, offset, type, 0, NULL, str);
+}
+
+static int lldp_tx_create_packet(sd_lldp_tx *lldp_tx, size_t *ret_packet_size, uint8_t **ret_packet) {
+        _cleanup_free_ char *hostname = NULL, *pretty_hostname = NULL;
+        _cleanup_free_ uint8_t *packet = NULL;
+        struct ether_header *header;
+        size_t packet_size, offset;
+        sd_id128_t machine_id;
+        int r;
+
+        assert(lldp_tx);
+        assert(lldp_tx->ifindex > 0);
+        assert(ret_packet_size);
+        assert(ret_packet);
+
+        /* If ifname is not set yet, set ifname from ifindex. */
+        r = sd_lldp_tx_get_ifname(lldp_tx, NULL);
+        if (r < 0)
+                return r;
+
+        r = sd_id128_get_machine(&machine_id);
+        if (r < 0)
+                return r;
+
+        if (!lldp_tx->hostname)
+                (void) gethostname_strict(&hostname);
+        if (!lldp_tx->pretty_hostname)
+                (void) get_pretty_hostname(&pretty_hostname);
+
+        packet_size = lldp_tx_calculate_maximum_packet_size(lldp_tx,
+                                                            lldp_tx->hostname ?: hostname,
+                                                            lldp_tx->pretty_hostname ?: pretty_hostname);
+
+        packet = new(uint8_t, packet_size);
+        if (!packet)
+                return -ENOMEM;
+
+        header = (struct ether_header*) packet;
+        header->ether_type = htobe16(ETHERTYPE_LLDP);
+        memcpy(header->ether_dhost, lldp_multicast_addr + lldp_tx->mode, ETH_ALEN);
+        memcpy(header->ether_shost, &lldp_tx->hwaddr, ETH_ALEN);
+
+        offset = sizeof(struct ether_header);
+
+        /* The three mandatory TLVs must appear first, in this specific order:
+         *   1. Chassis ID
+         *   2. Port ID
+         *   3. Time To Live
+         */
+
+        r = packet_append_prefixed_string(packet, packet_size, &offset, SD_LLDP_TYPE_CHASSIS_ID,
+                                          1, (const uint8_t[]) { SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED },
+                                          SD_ID128_TO_STRING(machine_id));
+        if (r < 0)
+                return r;
+
+        r = packet_append_prefixed_string(packet, packet_size, &offset, SD_LLDP_TYPE_PORT_ID,
+                                          1, (const uint8_t[]) { SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME },
+                                          lldp_tx->ifname);
+        if (r < 0)
+                return r;
+
+        r = packet_append_tlv_header(packet, packet_size, &offset, SD_LLDP_TYPE_TTL, 2);
+        if (r < 0)
+                return r;
+
+        unaligned_write_be16(packet + offset, LLDP_TX_TTL);
+        offset += 2;
+
+        /* Optional TLVs follow, in no specific order: */
+
+        r = packet_append_string(packet, packet_size, &offset, SD_LLDP_TYPE_PORT_DESCRIPTION,
+                                 lldp_tx->port_description);
+        if (r < 0)
+                return r;
+
+        r = packet_append_string(packet, packet_size, &offset, SD_LLDP_TYPE_SYSTEM_NAME,
+                                 lldp_tx->hostname ?: hostname);
+        if (r < 0)
+                return r;
+
+        r = packet_append_string(packet, packet_size, &offset, SD_LLDP_TYPE_SYSTEM_DESCRIPTION,
+                                 lldp_tx->pretty_hostname ?: pretty_hostname);
+        if (r < 0)
+                return r;
+
+        /* See section 12 of RFC 8520.
+         * +--------+--------+----------+---------+--------------
+         * |TLV Type|  len   |   OUI    |subtype  | MUDString
+         * |  =127  |        |= 00 00 5E|  = 1    |
+         * |(7 bits)|(9 bits)|(3 octets)|(1 octet)|(1-255 octets)
+         * +--------+--------+----------+---------+--------------
+         * where:
+         *
+         * o  TLV Type = 127 indicates a vendor-specific TLV
+         * o  len = indicates the TLV string length
+         * o  OUI = 00 00 5E is the organizationally unique identifier of IANA
+         * o  subtype = 1 (as assigned by IANA for the MUDstring)
+         * o  MUDstring = the length MUST NOT exceed 255 octets
+         */
+        r = packet_append_prefixed_string(packet, packet_size, &offset, SD_LLDP_TYPE_PRIVATE,
+                                          sizeof(SD_LLDP_OUI_IANA_MUD), SD_LLDP_OUI_IANA_MUD,
+                                          lldp_tx->mud_url);
+        if (r < 0)
+                return r;
+
+        r = packet_append_tlv_header(packet, packet_size, &offset, SD_LLDP_TYPE_SYSTEM_CAPABILITIES, 4);
+        if (r < 0)
+                return r;
+
+        unaligned_write_be16(packet + offset, lldp_tx->supported_capabilities);
+        offset += 2;
+        unaligned_write_be16(packet + offset, lldp_tx->enabled_capabilities);
+        offset += 2;
+
+        r = packet_append_tlv_header(packet, packet_size, &offset, SD_LLDP_TYPE_END, 0);
+        if (r < 0)
+                return r;
+
+        *ret_packet_size = offset;
+        *ret_packet = TAKE_PTR(packet);
+        return 0;
+}
+
+static int lldp_tx_send_packet(sd_lldp_tx *lldp_tx, size_t packet_size, const uint8_t *packet) {
+        _cleanup_close_ int fd = -EBADF;
+        union sockaddr_union sa;
+        ssize_t l;
+
+        assert(lldp_tx);
+        assert(lldp_tx->ifindex > 0);
+        assert(packet_size > sizeof(struct ether_header));
+        assert(packet);
+
+        sa = (union sockaddr_union) {
+                .ll.sll_family = AF_PACKET,
+                .ll.sll_protocol = htobe16(ETHERTYPE_LLDP),
+                .ll.sll_ifindex = lldp_tx->ifindex,
+                .ll.sll_halen = ETH_ALEN,
+        };
+        memcpy(sa.ll.sll_addr, lldp_multicast_addr + lldp_tx->mode, ETH_ALEN);
+
+        fd = socket(AF_PACKET, SOCK_RAW | SOCK_CLOEXEC, IPPROTO_RAW);
+        if (fd < 0)
+                return -errno;
+
+        l = sendto(fd, packet, packet_size, MSG_NOSIGNAL, &sa.sa, sizeof(sa.ll));
+        if (l < 0)
+                return -errno;
+
+        if ((size_t) l != packet_size)
+                return -EIO;
+
+        return 0;
+}
+
+static int lldp_tx_send(sd_lldp_tx *lldp_tx) {
+        _cleanup_free_ uint8_t *packet = NULL;
+        size_t packet_size = 0;  /* avoid false maybe-uninitialized warning */
+        int r;
+
+        assert(lldp_tx);
+
+        r = lldp_tx_create_packet(lldp_tx, &packet_size, &packet);
+        if (r < 0)
+                return r;
+
+        return lldp_tx_send_packet(lldp_tx, packet_size, packet);
+}
+
+int sd_lldp_tx_attach_event(sd_lldp_tx *lldp_tx, sd_event *event, int64_t priority) {
+        int r;
+
+        assert_return(lldp_tx, -EINVAL);
+        assert_return(!lldp_tx->event, -EBUSY);
+
+        if (event)
+                lldp_tx->event = sd_event_ref(event);
+        else {
+                r = sd_event_default(&lldp_tx->event);
+                if (r < 0)
+                        return r;
+        }
+
+        lldp_tx->event_priority = priority;
+
+        return 0;
+}
+
+int sd_lldp_tx_detach_event(sd_lldp_tx *lldp_tx) {
+        assert_return(lldp_tx, -EINVAL);
+
+        lldp_tx->timer_event_source = sd_event_source_disable_unref(lldp_tx->timer_event_source);
+        lldp_tx->event = sd_event_unref(lldp_tx->event);
+        return 0;
+}
+
+static usec_t lldp_tx_get_delay(sd_lldp_tx *lldp_tx) {
+        assert(lldp_tx);
+
+        return usec_add(lldp_tx->fast_tx > 0 ? LLDP_FAST_TX_INTERVAL_USEC : LLDP_TX_INTERVAL_USEC,
+                        (usec_t) random_u64() % LLDP_TX_JITTER_USEC);
+}
+
+static int lldp_tx_reset_timer(sd_lldp_tx *lldp_tx) {
+        usec_t delay;
+        int r;
+
+        assert(lldp_tx);
+        assert(lldp_tx->timer_event_source);
+
+        delay = lldp_tx_get_delay(lldp_tx);
+
+        r = sd_event_source_set_time_relative(lldp_tx->timer_event_source, delay);
+        if (r < 0)
+                return r;
+
+        return sd_event_source_set_enabled(lldp_tx->timer_event_source, SD_EVENT_ONESHOT);
+}
+
+static int on_timer_event(sd_event_source *s, uint64_t usec, void *userdata) {
+        sd_lldp_tx *lldp_tx = ASSERT_PTR(userdata);
+        int r;
+
+        r = lldp_tx_send(lldp_tx);
+        if (r < 0)
+                log_lldp_tx_errno(lldp_tx, r, "Failed to send packet, ignoring: %m");
+
+        if (lldp_tx->fast_tx > 0)
+                lldp_tx->fast_tx--;
+
+        r = lldp_tx_reset_timer(lldp_tx);
+        if (r < 0)
+                log_lldp_tx_errno(lldp_tx, r, "Failed to reset timer: %m");
+
+        return 0;
+}
+
+int sd_lldp_tx_is_running(sd_lldp_tx *lldp_tx) {
+        int enabled;
+
+        if (!lldp_tx)
+                return 0;
+
+        if (!lldp_tx->timer_event_source)
+                return 0;
+
+        if (sd_event_source_get_enabled(lldp_tx->timer_event_source, &enabled) < 0)
+                return 0;
+
+        return enabled == SD_EVENT_ONESHOT;
+}
+
+int sd_lldp_tx_stop(sd_lldp_tx *lldp_tx) {
+        if (!lldp_tx)
+                return 0;
+
+        if (!lldp_tx->timer_event_source)
+                return 0;
+
+        (void) sd_event_source_set_enabled(lldp_tx->timer_event_source, SD_EVENT_OFF);
+
+        return 1;
+}
+int sd_lldp_tx_start(sd_lldp_tx *lldp_tx) {
+        usec_t delay;
+        int r;
+
+        assert_return(lldp_tx, -EINVAL);
+        assert_return(lldp_tx->event, -EINVAL);
+        assert_return(lldp_tx->ifindex > 0, -EINVAL);
+        assert_return(lldp_tx->mode >= 0 && lldp_tx->mode < _SD_LLDP_MULTICAST_MODE_MAX, -EINVAL);
+        assert_return(!ether_addr_is_null(&lldp_tx->hwaddr), -EINVAL);
+
+        if (sd_lldp_tx_is_running(lldp_tx))
+                return 0;
+
+        lldp_tx->fast_tx = LLDP_FAST_TX_INIT;
+
+        if (lldp_tx->timer_event_source) {
+                r = lldp_tx_reset_timer(lldp_tx);
+                if (r < 0)
+                        return log_lldp_tx_errno(lldp_tx, r, "Failed to re-enable timer: %m");
+
+                return 0;
+        }
+
+        delay = lldp_tx_get_delay(lldp_tx);
+
+        r = sd_event_add_time_relative(lldp_tx->event, &lldp_tx->timer_event_source,
+                                       CLOCK_BOOTTIME, delay, 0,
+                                       on_timer_event, lldp_tx);
+        if (r < 0)
+                return r;
+
+        (void) sd_event_source_set_description(lldp_tx->timer_event_source, "lldp-tx-timer");
+        (void) sd_event_source_set_priority(lldp_tx->timer_event_source, lldp_tx->event_priority);
+
+        return 0;
+}
diff --git a/src/libsystemd-network/sd-lldp.c b/src/libsystemd-network/sd-lldp.c
deleted file mode 100644
index b38d6db..0000000
--- a/src/libsystemd-network/sd-lldp.c
+++ /dev/null
@@ -1,523 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <arpa/inet.h>
-#include <linux/sockios.h>
-#include <sys/ioctl.h>
-
-#include "sd-lldp.h"
-
-#include "alloc-util.h"
-#include "ether-addr-util.h"
-#include "event-util.h"
-#include "fd-util.h"
-#include "lldp-internal.h"
-#include "lldp-neighbor.h"
-#include "lldp-network.h"
-#include "memory-util.h"
-#include "network-common.h"
-#include "socket-util.h"
-#include "sort-util.h"
-#include "string-table.h"
-
-#define LLDP_DEFAULT_NEIGHBORS_MAX 128U
-
-static const char * const lldp_event_table[_SD_LLDP_EVENT_MAX] = {
-        [SD_LLDP_EVENT_ADDED]     = "added",
-        [SD_LLDP_EVENT_REMOVED]   = "removed",
-        [SD_LLDP_EVENT_UPDATED]   = "updated",
-        [SD_LLDP_EVENT_REFRESHED] = "refreshed",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(lldp_event, sd_lldp_event_t);
-
-static void lldp_flush_neighbors(sd_lldp *lldp) {
-        assert(lldp);
-
-        hashmap_clear(lldp->neighbor_by_id);
-}
-
-static void lldp_callback(sd_lldp *lldp, sd_lldp_event_t event, sd_lldp_neighbor *n) {
-        assert(lldp);
-        assert(event >= 0 && event < _SD_LLDP_EVENT_MAX);
-
-        if (!lldp->callback)
-                return (void) log_lldp(lldp, "Received '%s' event.", lldp_event_to_string(event));
-
-        log_lldp(lldp, "Invoking callback for '%s' event.", lldp_event_to_string(event));
-        lldp->callback(lldp, event, n, lldp->userdata);
-}
-
-static int lldp_make_space(sd_lldp *lldp, size_t extra) {
-        usec_t t = USEC_INFINITY;
-        bool changed = false;
-
-        assert(lldp);
-
-        /* Remove all entries that are past their TTL, and more until at least the specified number of extra entries
-         * are free. */
-
-        for (;;) {
-                _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *n = NULL;
-
-                n = prioq_peek(lldp->neighbor_by_expiry);
-                if (!n)
-                        break;
-
-                sd_lldp_neighbor_ref(n);
-
-                if (hashmap_size(lldp->neighbor_by_id) > LESS_BY(lldp->neighbors_max, extra))
-                        goto remove_one;
-
-                if (t == USEC_INFINITY)
-                        t = now(clock_boottime_or_monotonic());
-
-                if (n->until > t)
-                        break;
-
-        remove_one:
-                lldp_neighbor_unlink(n);
-                lldp_callback(lldp, SD_LLDP_EVENT_REMOVED, n);
-                changed = true;
-        }
-
-        return changed;
-}
-
-static bool lldp_keep_neighbor(sd_lldp *lldp, sd_lldp_neighbor *n) {
-        assert(lldp);
-        assert(n);
-
-        /* Don't keep data with a zero TTL */
-        if (n->ttl <= 0)
-                return false;
-
-        /* Filter out data from the filter address */
-        if (!ether_addr_is_null(&lldp->filter_address) &&
-            ether_addr_equal(&lldp->filter_address, &n->source_address))
-                return false;
-
-        /* Only add if the neighbor has a capability we are interested in. Note that we also store all neighbors with
-         * no caps field set. */
-        if (n->has_capabilities &&
-            (n->enabled_capabilities & lldp->capability_mask) == 0)
-                return false;
-
-        /* Keep everything else */
-        return true;
-}
-
-static int lldp_start_timer(sd_lldp *lldp, sd_lldp_neighbor *neighbor);
-
-static int lldp_add_neighbor(sd_lldp *lldp, sd_lldp_neighbor *n) {
-        _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *old = NULL;
-        bool keep;
-        int r;
-
-        assert(lldp);
-        assert(n);
-        assert(!n->lldp);
-
-        keep = lldp_keep_neighbor(lldp, n);
-
-        /* First retrieve the old entry for this MSAP */
-        old = hashmap_get(lldp->neighbor_by_id, &n->id);
-        if (old) {
-                sd_lldp_neighbor_ref(old);
-
-                if (!keep) {
-                        lldp_neighbor_unlink(old);
-                        lldp_callback(lldp, SD_LLDP_EVENT_REMOVED, old);
-                        return 0;
-                }
-
-                if (lldp_neighbor_equal(n, old)) {
-                        /* Is this equal, then restart the TTL counter, but don't do anything else. */
-                        old->timestamp = n->timestamp;
-                        lldp_start_timer(lldp, old);
-                        lldp_callback(lldp, SD_LLDP_EVENT_REFRESHED, old);
-                        return 0;
-                }
-
-                /* Data changed, remove the old entry, and add a new one */
-                lldp_neighbor_unlink(old);
-
-        } else if (!keep)
-                return 0;
-
-        /* Then, make room for at least one new neighbor */
-        lldp_make_space(lldp, 1);
-
-        r = hashmap_put(lldp->neighbor_by_id, &n->id, n);
-        if (r < 0)
-                goto finish;
-
-        r = prioq_put(lldp->neighbor_by_expiry, n, &n->prioq_idx);
-        if (r < 0) {
-                assert_se(hashmap_remove(lldp->neighbor_by_id, &n->id) == n);
-                goto finish;
-        }
-
-        n->lldp = lldp;
-
-        lldp_start_timer(lldp, n);
-        lldp_callback(lldp, old ? SD_LLDP_EVENT_UPDATED : SD_LLDP_EVENT_ADDED, n);
-
-        return 1;
-
-finish:
-        if (old)
-                lldp_callback(lldp, SD_LLDP_EVENT_REMOVED, old);
-
-        return r;
-}
-
-static int lldp_handle_datagram(sd_lldp *lldp, sd_lldp_neighbor *n) {
-        int r;
-
-        assert(lldp);
-        assert(n);
-
-        r = lldp_neighbor_parse(n);
-        if (r == -EBADMSG) /* Ignore bad messages */
-                return 0;
-        if (r < 0)
-                return r;
-
-        r = lldp_add_neighbor(lldp, n);
-        if (r < 0) {
-                log_lldp_errno(lldp, r, "Failed to add datagram. Ignoring.");
-                return 0;
-        }
-
-        log_lldp(lldp, "Successfully processed LLDP datagram.");
-        return 0;
-}
-
-static int lldp_receive_datagram(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *n = NULL;
-        ssize_t space, length;
-        sd_lldp *lldp = userdata;
-        struct timespec ts;
-
-        assert(fd >= 0);
-        assert(lldp);
-
-        space = next_datagram_size_fd(fd);
-        if (space < 0) {
-                log_lldp_errno(lldp, space, "Failed to determine datagram size to read, ignoring: %m");
-                return 0;
-        }
-
-        n = lldp_neighbor_new(space);
-        if (!n)
-                return -ENOMEM;
-
-        length = recv(fd, LLDP_NEIGHBOR_RAW(n), n->raw_size, MSG_DONTWAIT);
-        if (length < 0) {
-                if (IN_SET(errno, EAGAIN, EINTR))
-                        return 0;
-
-                log_lldp_errno(lldp, errno, "Failed to read LLDP datagram, ignoring: %m");
-                return 0;
-        }
-
-        if ((size_t) length != n->raw_size) {
-                log_lldp(lldp, "Packet size mismatch, ignoring");
-                return 0;
-        }
-
-        /* Try to get the timestamp of this packet if it is known */
-        if (ioctl(fd, SIOCGSTAMPNS, &ts) >= 0)
-                triple_timestamp_from_realtime(&n->timestamp, timespec_load(&ts));
-        else
-                triple_timestamp_get(&n->timestamp);
-
-        return lldp_handle_datagram(lldp, n);
-}
-
-static void lldp_reset(sd_lldp *lldp) {
-        assert(lldp);
-
-        (void) event_source_disable(lldp->timer_event_source);
-        lldp->io_event_source = sd_event_source_disable_unref(lldp->io_event_source);
-        lldp->fd = safe_close(lldp->fd);
-}
-
-_public_ int sd_lldp_start(sd_lldp *lldp) {
-        int r;
-
-        assert_return(lldp, -EINVAL);
-        assert_return(lldp->event, -EINVAL);
-        assert_return(lldp->ifindex > 0, -EINVAL);
-
-        if (lldp->fd >= 0)
-                return 0;
-
-        assert(!lldp->io_event_source);
-
-        lldp->fd = lldp_network_bind_raw_socket(lldp->ifindex);
-        if (lldp->fd < 0)
-                return lldp->fd;
-
-        r = sd_event_add_io(lldp->event, &lldp->io_event_source, lldp->fd, EPOLLIN, lldp_receive_datagram, lldp);
-        if (r < 0)
-                goto fail;
-
-        r = sd_event_source_set_priority(lldp->io_event_source, lldp->event_priority);
-        if (r < 0)
-                goto fail;
-
-        (void) sd_event_source_set_description(lldp->io_event_source, "lldp-io");
-
-        log_lldp(lldp, "Started LLDP client");
-        return 1;
-
-fail:
-        lldp_reset(lldp);
-        return r;
-}
-
-_public_ int sd_lldp_stop(sd_lldp *lldp) {
-        if (!lldp)
-                return 0;
-
-        if (lldp->fd < 0)
-                return 0;
-
-        log_lldp(lldp, "Stopping LLDP client");
-
-        lldp_reset(lldp);
-        lldp_flush_neighbors(lldp);
-
-        return 1;
-}
-
-_public_ int sd_lldp_attach_event(sd_lldp *lldp, sd_event *event, int64_t priority) {
-        int r;
-
-        assert_return(lldp, -EINVAL);
-        assert_return(lldp->fd < 0, -EBUSY);
-        assert_return(!lldp->event, -EBUSY);
-
-        if (event)
-                lldp->event = sd_event_ref(event);
-        else {
-                r = sd_event_default(&lldp->event);
-                if (r < 0)
-                        return r;
-        }
-
-        lldp->event_priority = priority;
-
-        return 0;
-}
-
-_public_ int sd_lldp_detach_event(sd_lldp *lldp) {
-
-        assert_return(lldp, -EINVAL);
-        assert_return(lldp->fd < 0, -EBUSY);
-
-        lldp->event = sd_event_unref(lldp->event);
-        return 0;
-}
-
-_public_ sd_event* sd_lldp_get_event(sd_lldp *lldp) {
-        assert_return(lldp, NULL);
-
-        return lldp->event;
-}
-
-_public_ int sd_lldp_set_callback(sd_lldp *lldp, sd_lldp_callback_t cb, void *userdata) {
-        assert_return(lldp, -EINVAL);
-
-        lldp->callback = cb;
-        lldp->userdata = userdata;
-
-        return 0;
-}
-
-_public_ int sd_lldp_set_ifindex(sd_lldp *lldp, int ifindex) {
-        assert_return(lldp, -EINVAL);
-        assert_return(ifindex > 0, -EINVAL);
-        assert_return(lldp->fd < 0, -EBUSY);
-
-        lldp->ifindex = ifindex;
-        return 0;
-}
-
-int sd_lldp_set_ifname(sd_lldp *lldp, const char *ifname) {
-        assert_return(lldp, -EINVAL);
-        assert_return(ifname, -EINVAL);
-
-        if (!ifname_valid_full(ifname, IFNAME_VALID_ALTERNATIVE))
-                return -EINVAL;
-
-        return free_and_strdup(&lldp->ifname, ifname);
-}
-
-const char *sd_lldp_get_ifname(sd_lldp *lldp) {
-        if (!lldp)
-                return NULL;
-
-        return get_ifname(lldp->ifindex, &lldp->ifname);
-}
-
-static sd_lldp* lldp_free(sd_lldp *lldp) {
-        assert(lldp);
-
-        lldp_reset(lldp);
-
-        sd_event_source_unref(lldp->timer_event_source);
-        sd_lldp_detach_event(lldp);
-
-        lldp_flush_neighbors(lldp);
-
-        hashmap_free(lldp->neighbor_by_id);
-        prioq_free(lldp->neighbor_by_expiry);
-        free(lldp->ifname);
-        return mfree(lldp);
-}
-
-DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_lldp, sd_lldp, lldp_free);
-
-_public_ int sd_lldp_new(sd_lldp **ret) {
-        _cleanup_(sd_lldp_unrefp) sd_lldp *lldp = NULL;
-        int r;
-
-        assert_return(ret, -EINVAL);
-
-        lldp = new(sd_lldp, 1);
-        if (!lldp)
-                return -ENOMEM;
-
-        *lldp = (sd_lldp) {
-                .n_ref = 1,
-                .fd = -1,
-                .neighbors_max = LLDP_DEFAULT_NEIGHBORS_MAX,
-                .capability_mask = UINT16_MAX,
-        };
-
-        lldp->neighbor_by_id = hashmap_new(&lldp_neighbor_hash_ops);
-        if (!lldp->neighbor_by_id)
-                return -ENOMEM;
-
-        r = prioq_ensure_allocated(&lldp->neighbor_by_expiry, lldp_neighbor_prioq_compare_func);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(lldp);
-
-        return 0;
-}
-
-static int neighbor_compare_func(sd_lldp_neighbor * const *a, sd_lldp_neighbor * const *b) {
-        return lldp_neighbor_id_compare_func(&(*a)->id, &(*b)->id);
-}
-
-static int on_timer_event(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_lldp *lldp = userdata;
-        int r;
-
-        r = lldp_make_space(lldp, 0);
-        if (r < 0) {
-                log_lldp_errno(lldp, r, "Failed to make space, ignoring: %m");
-                return 0;
-        }
-
-        r = lldp_start_timer(lldp, NULL);
-        if (r < 0) {
-                log_lldp_errno(lldp, r, "Failed to restart timer, ignoring: %m");
-                return 0;
-        }
-
-        return 0;
-}
-
-static int lldp_start_timer(sd_lldp *lldp, sd_lldp_neighbor *neighbor) {
-        sd_lldp_neighbor *n;
-
-        assert(lldp);
-
-        if (neighbor)
-                lldp_neighbor_start_ttl(neighbor);
-
-        n = prioq_peek(lldp->neighbor_by_expiry);
-        if (!n)
-                return event_source_disable(lldp->timer_event_source);
-
-        if (!lldp->event)
-                return 0;
-
-        return event_reset_time(lldp->event, &lldp->timer_event_source,
-                                clock_boottime_or_monotonic(),
-                                n->until, 0,
-                                on_timer_event, lldp,
-                                lldp->event_priority, "lldp-timer", true);
-}
-
-_public_ int sd_lldp_get_neighbors(sd_lldp *lldp, sd_lldp_neighbor ***ret) {
-        sd_lldp_neighbor **l = NULL, *n;
-        int k = 0, r;
-
-        assert_return(lldp, -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        if (hashmap_isempty(lldp->neighbor_by_id)) { /* Special shortcut */
-                *ret = NULL;
-                return 0;
-        }
-
-        l = new0(sd_lldp_neighbor*, hashmap_size(lldp->neighbor_by_id));
-        if (!l)
-                return -ENOMEM;
-
-        r = lldp_start_timer(lldp, NULL);
-        if (r < 0) {
-                free(l);
-                return r;
-        }
-
-        HASHMAP_FOREACH(n, lldp->neighbor_by_id)
-                l[k++] = sd_lldp_neighbor_ref(n);
-
-        assert((size_t) k == hashmap_size(lldp->neighbor_by_id));
-
-        /* Return things in a stable order */
-        typesafe_qsort(l, k, neighbor_compare_func);
-        *ret = l;
-
-        return k;
-}
-
-_public_ int sd_lldp_set_neighbors_max(sd_lldp *lldp, uint64_t m) {
-        assert_return(lldp, -EINVAL);
-        assert_return(m > 0, -EINVAL);
-
-        lldp->neighbors_max = m;
-        lldp_make_space(lldp, 0);
-
-        return 0;
-}
-
-_public_ int sd_lldp_match_capabilities(sd_lldp *lldp, uint16_t mask) {
-        assert_return(lldp, -EINVAL);
-        assert_return(mask != 0, -EINVAL);
-
-        lldp->capability_mask = mask;
-
-        return 0;
-}
-
-_public_ int sd_lldp_set_filter_address(sd_lldp *lldp, const struct ether_addr *addr) {
-        assert_return(lldp, -EINVAL);
-
-        /* In order to deal nicely with bridges that send back our own packets, allow one address to be filtered, so
-         * that our own can be filtered out here. */
-
-        if (addr)
-                lldp->filter_address = *addr;
-        else
-                zero(lldp->filter_address);
-
-        return 0;
-}
diff --git a/src/libsystemd-network/sd-ndisc.c b/src/libsystemd-network/sd-ndisc.c
index 9b3a893..2e446fe 100644
--- a/src/libsystemd-network/sd-ndisc.c
+++ b/src/libsystemd-network/sd-ndisc.c
@@ -42,7 +42,7 @@
         ndisc->callback(ndisc, event, rt, ndisc->userdata);
 }
 
-_public_ int sd_ndisc_set_callback(
+int sd_ndisc_set_callback(
                 sd_ndisc *nd,
                 sd_ndisc_callback_t callback,
                 void *userdata) {
@@ -55,7 +55,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_set_ifindex(sd_ndisc *nd, int ifindex) {
+int sd_ndisc_set_ifindex(sd_ndisc *nd, int ifindex) {
         assert_return(nd, -EINVAL);
         assert_return(ifindex > 0, -EINVAL);
         assert_return(nd->fd < 0, -EBUSY);
@@ -74,14 +74,22 @@
         return free_and_strdup(&nd->ifname, ifname);
 }
 
-const char *sd_ndisc_get_ifname(sd_ndisc *nd) {
-        if (!nd)
-                return NULL;
+int sd_ndisc_get_ifname(sd_ndisc *nd, const char **ret) {
+        int r;
 
-        return get_ifname(nd->ifindex, &nd->ifname);
+        assert_return(nd, -EINVAL);
+
+        r = get_ifname(nd->ifindex, &nd->ifname);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = nd->ifname;
+
+        return 0;
 }
 
-_public_ int sd_ndisc_set_mac(sd_ndisc *nd, const struct ether_addr *mac_addr) {
+int sd_ndisc_set_mac(sd_ndisc *nd, const struct ether_addr *mac_addr) {
         assert_return(nd, -EINVAL);
 
         if (mac_addr)
@@ -92,7 +100,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_attach_event(sd_ndisc *nd, sd_event *event, int64_t priority) {
+int sd_ndisc_attach_event(sd_ndisc *nd, sd_event *event, int64_t priority) {
         int r;
 
         assert_return(nd, -EINVAL);
@@ -112,7 +120,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_detach_event(sd_ndisc *nd) {
+int sd_ndisc_detach_event(sd_ndisc *nd) {
 
         assert_return(nd, -EINVAL);
         assert_return(nd->fd < 0, -EBUSY);
@@ -121,7 +129,7 @@
         return 0;
 }
 
-_public_ sd_event *sd_ndisc_get_event(sd_ndisc *nd) {
+sd_event *sd_ndisc_get_event(sd_ndisc *nd) {
         assert_return(nd, NULL);
 
         return nd->event;
@@ -152,7 +160,7 @@
 
 DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_ndisc, sd_ndisc, ndisc_free);
 
-_public_ int sd_ndisc_new(sd_ndisc **ret) {
+int sd_ndisc_new(sd_ndisc **ret) {
         _cleanup_(sd_ndisc_unrefp) sd_ndisc *nd = NULL;
 
         assert_return(ret, -EINVAL);
@@ -163,7 +171,7 @@
 
         *nd = (sd_ndisc) {
                 .n_ref = 1,
-                .fd = -1,
+                .fd = -EBADF,
         };
 
         *ret = TAKE_PTR(nd);
@@ -171,28 +179,6 @@
         return 0;
 }
 
-_public_ int sd_ndisc_get_mtu(sd_ndisc *nd, uint32_t *mtu) {
-        assert_return(nd, -EINVAL);
-        assert_return(mtu, -EINVAL);
-
-        if (nd->mtu == 0)
-                return -ENODATA;
-
-        *mtu = nd->mtu;
-        return 0;
-}
-
-_public_ int sd_ndisc_get_hop_limit(sd_ndisc *nd, uint8_t *ret) {
-        assert_return(nd, -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        if (nd->hop_limit == 0)
-                return -ENODATA;
-
-        *ret = nd->hop_limit;
-        return 0;
-}
-
 static int ndisc_handle_datagram(sd_ndisc *nd, sd_ndisc_router *rt) {
         int r;
 
@@ -200,16 +186,8 @@
         assert(rt);
 
         r = ndisc_router_parse(nd, rt);
-        if (r == -EBADMSG) /* Bad packet */
-                return 0;
         if (r < 0)
-                return 0;
-
-        /* Update global variables we keep */
-        if (rt->mtu > 0)
-                nd->mtu = rt->mtu;
-        if (rt->hop_limit > 0)
-                nd->hop_limit = rt->hop_limit;
+                return r;
 
         log_ndisc(nd, "Received Router Advertisement: flags %s preference %s lifetime %" PRIu16 " sec",
                   rt->flags & ND_RA_FLAG_MANAGED ? "MANAGED" : rt->flags & ND_RA_FLAG_OTHER ? "OTHER" : "none",
@@ -222,17 +200,18 @@
 
 static int ndisc_recv(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
         _cleanup_(sd_ndisc_router_unrefp) sd_ndisc_router *rt = NULL;
-        sd_ndisc *nd = userdata;
+        sd_ndisc *nd = ASSERT_PTR(userdata);
         ssize_t buflen;
         int r;
-        _cleanup_free_ char *addr = NULL;
 
         assert(s);
-        assert(nd);
         assert(nd->event);
 
         buflen = next_datagram_size_fd(fd);
         if (buflen < 0) {
+                if (ERRNO_IS_TRANSIENT(buflen) || ERRNO_IS_DISCONNECT(buflen))
+                        return 0;
+
                 log_ndisc_errno(nd, buflen, "Failed to determine datagram size to read, ignoring: %m");
                 return 0;
         }
@@ -243,10 +222,13 @@
 
         r = icmp6_receive(fd, NDISC_ROUTER_RAW(rt), rt->raw_size, &rt->address, &rt->timestamp);
         if (r < 0) {
+                if (ERRNO_IS_TRANSIENT(r) || ERRNO_IS_DISCONNECT(r))
+                        return 0;
+
                 switch (r) {
                 case -EADDRNOTAVAIL:
-                        (void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &rt->address, &addr);
-                        log_ndisc(nd, "Received RA from non-link-local address %s. Ignoring", addr);
+                        log_ndisc(nd, "Received RA from non-link-local address %s. Ignoring.",
+                                  IN6_ADDR_TO_STRING(&rt->address));
                         break;
 
                 case -EMULTIHOP:
@@ -257,9 +239,6 @@
                         log_ndisc(nd, "Received invalid source address from ICMPv6 socket. Ignoring.");
                         break;
 
-                case -EAGAIN: /* ignore spurious wakeups */
-                        break;
-
                 default:
                         log_ndisc_errno(nd, r, "Unexpected error while reading from ICMPv6, ignoring: %m");
                         break;
@@ -269,8 +248,8 @@
         }
 
         (void) event_source_disable(nd->timeout_event_source);
-
-        return ndisc_handle_datagram(nd, rt);
+        (void) ndisc_handle_datagram(nd, rt);
+        return 0;
 }
 
 static usec_t ndisc_timeout_compute_random(usec_t val) {
@@ -280,16 +259,14 @@
 }
 
 static int ndisc_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
-        char time_string[FORMAT_TIMESPAN_MAX];
-        sd_ndisc *nd = userdata;
+        sd_ndisc *nd = ASSERT_PTR(userdata);
         usec_t time_now;
         int r;
 
         assert(s);
-        assert(nd);
         assert(nd->event);
 
-        assert_se(sd_event_now(nd->event, clock_boottime_or_monotonic(), &time_now) >= 0);
+        assert_se(sd_event_now(nd->event, CLOCK_BOOTTIME, &time_now) >= 0);
 
         if (!nd->retransmit_time)
                 nd->retransmit_time = ndisc_timeout_compute_random(NDISC_ROUTER_SOLICITATION_INTERVAL);
@@ -301,7 +278,7 @@
         }
 
         r = event_reset_time(nd->event, &nd->timeout_event_source,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              time_now + nd->retransmit_time, 10 * USEC_PER_MSEC,
                              ndisc_timeout, nd,
                              nd->event_priority, "ndisc-timeout-no-ra", true);
@@ -309,14 +286,12 @@
                 goto fail;
 
         r = icmp6_send_router_solicitation(nd->fd, &nd->mac_addr);
-        if (r < 0) {
-                log_ndisc_errno(nd, r, "Error sending Router Solicitation: %m");
-                goto fail;
-        }
-
-        log_ndisc(nd, "Sent Router Solicitation, next solicitation in %s",
-                  format_timespan(time_string, FORMAT_TIMESPAN_MAX,
-                                  nd->retransmit_time, USEC_PER_SEC));
+        if (r < 0)
+                log_ndisc_errno(nd, r, "Failed to send Router Solicitation, next solicitation in %s, ignoring: %m",
+                                FORMAT_TIMESPAN(nd->retransmit_time, USEC_PER_SEC));
+        else
+                log_ndisc(nd, "Sent Router Solicitation, next solicitation in %s",
+                          FORMAT_TIMESPAN(nd->retransmit_time, USEC_PER_SEC));
 
         return 0;
 
@@ -326,10 +301,9 @@
 }
 
 static int ndisc_timeout_no_ra(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_ndisc *nd = userdata;
+        sd_ndisc *nd = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(nd);
 
         log_ndisc(nd, "No RA received before link confirmation timeout");
 
@@ -339,7 +313,7 @@
         return 0;
 }
 
-_public_ int sd_ndisc_stop(sd_ndisc *nd) {
+int sd_ndisc_stop(sd_ndisc *nd) {
         if (!nd)
                 return 0;
 
@@ -352,7 +326,7 @@
         return 1;
 }
 
-_public_ int sd_ndisc_start(sd_ndisc *nd) {
+int sd_ndisc_start(sd_ndisc *nd) {
         int r;
         usec_t time_now;
 
@@ -365,7 +339,7 @@
 
         assert(!nd->recv_event_source);
 
-        r = sd_event_now(nd->event, clock_boottime_or_monotonic(), &time_now);
+        r = sd_event_now(nd->event, CLOCK_BOOTTIME, &time_now);
         if (r < 0)
                 goto fail;
 
@@ -384,7 +358,7 @@
         (void) sd_event_source_set_description(nd->recv_event_source, "ndisc-receive-message");
 
         r = event_reset_time(nd->event, &nd->timeout_event_source,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              time_now + USEC_PER_SEC / 2, 1 * USEC_PER_SEC, /* See RFC 8415 sec. 18.2.1 */
                              ndisc_timeout, nd,
                              nd->event_priority, "ndisc-timeout", true);
@@ -392,7 +366,7 @@
                 goto fail;
 
         r = event_reset_time(nd->event, &nd->timeout_no_ra,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              time_now + NDISC_TIMEOUT_NO_RA_USEC, 10 * USEC_PER_MSEC,
                              ndisc_timeout_no_ra, nd,
                              nd->event_priority, "ndisc-timeout-no-ra", true);
diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c
index eac8aa3..20458b9 100644
--- a/src/libsystemd-network/sd-radv.c
+++ b/src/libsystemd-network/sd-radv.c
@@ -26,7 +26,7 @@
 #include "string-util.h"
 #include "strv.h"
 
-_public_ int sd_radv_new(sd_radv **ret) {
+int sd_radv_new(sd_radv **ret) {
         _cleanup_(sd_radv_unrefp) sd_radv *ra = NULL;
 
         assert_return(ret, -EINVAL);
@@ -37,7 +37,8 @@
 
         *ra = (sd_radv) {
                 .n_ref = 1,
-                .fd = -1,
+                .fd = -EBADF,
+                .lifetime_usec = RADV_DEFAULT_ROUTER_LIFETIME_USEC,
         };
 
         *ret = TAKE_PTR(ra);
@@ -45,7 +46,7 @@
         return 0;
 }
 
-_public_ int sd_radv_attach_event(sd_radv *ra, sd_event *event, int64_t priority) {
+int sd_radv_attach_event(sd_radv *ra, sd_event *event, int64_t priority) {
         int r;
 
         assert_return(ra, -EINVAL);
@@ -64,7 +65,7 @@
         return 0;
 }
 
-_public_ int sd_radv_detach_event(sd_radv *ra) {
+int sd_radv_detach_event(sd_radv *ra) {
 
         assert_return(ra, -EINVAL);
 
@@ -72,16 +73,16 @@
         return 0;
 }
 
-_public_ sd_event *sd_radv_get_event(sd_radv *ra) {
+sd_event *sd_radv_get_event(sd_radv *ra) {
         assert_return(ra, NULL);
 
         return ra->event;
 }
 
-_public_ int sd_radv_is_running(sd_radv *ra) {
+int sd_radv_is_running(sd_radv *ra) {
         assert_return(ra, false);
 
-        return ra->state != SD_RADV_STATE_IDLE;
+        return ra->state != RADV_STATE_IDLE;
 }
 
 static void radv_reset(sd_radv *ra) {
@@ -128,9 +129,25 @@
 
 DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_radv, sd_radv, radv_free);
 
-static int radv_send(sd_radv *ra, const struct in6_addr *dst, uint32_t router_lifetime) {
-        sd_radv_route_prefix *rt;
-        sd_radv_prefix *p;
+static bool router_lifetime_is_valid(usec_t lifetime_usec) {
+        return lifetime_usec == 0 ||
+                (lifetime_usec >= RADV_MIN_ROUTER_LIFETIME_USEC &&
+                 lifetime_usec <= RADV_MAX_ROUTER_LIFETIME_USEC);
+}
+
+static be32_t usec_to_be32_sec(usec_t usec) {
+        if (usec == USEC_INFINITY)
+                /* UINT32_MAX is handled as infinity. */
+                return htobe32(UINT32_MAX);
+
+        if (usec >= UINT32_MAX * USEC_PER_SEC)
+                /* Finite but too large. Let's use the largest finite value. */
+                return htobe32(UINT32_MAX - 1);
+
+        return htobe32(usec / USEC_PER_SEC);
+}
+
+static int radv_send(sd_radv *ra, const struct in6_addr *dst, usec_t lifetime_usec) {
         struct sockaddr_in6 dst_addr = {
                 .sin6_family = AF_INET6,
                 .sin6_addr = IN6ADDR_ALL_NODES_MULTICAST_INIT,
@@ -162,8 +179,9 @@
         int r;
 
         assert(ra);
+        assert(router_lifetime_is_valid(lifetime_usec));
 
-        r = sd_event_now(ra->event, clock_boottime_or_monotonic(), &time_now);
+        r = sd_event_now(ra->event, CLOCK_BOOTTIME, &time_now);
         if (r < 0)
                 return r;
 
@@ -173,7 +191,8 @@
         adv.nd_ra_type = ND_ROUTER_ADVERT;
         adv.nd_ra_curhoplimit = ra->hop_limit;
         adv.nd_ra_flags_reserved = ra->flags;
-        adv.nd_ra_router_lifetime = htobe16(router_lifetime);
+        assert_cc(RADV_MAX_ROUTER_LIFETIME_USEC <= UINT16_MAX * USEC_PER_SEC);
+        adv.nd_ra_router_lifetime = htobe16(DIV_ROUND_UP(lifetime_usec, USEC_PER_SEC));
         iov[msg.msg_iovlen++] = IOVEC_MAKE(&adv, sizeof(adv));
 
         /* MAC address is optional, either because the link does not use L2
@@ -183,29 +202,33 @@
                 iov[msg.msg_iovlen++] = IOVEC_MAKE(&opt_mac, sizeof(opt_mac));
         }
 
-        if (ra->mtu) {
+        if (ra->mtu > 0) {
                 opt_mtu.nd_opt_mtu_mtu = htobe32(ra->mtu);
                 iov[msg.msg_iovlen++] = IOVEC_MAKE(&opt_mtu, sizeof(opt_mtu));
         }
 
         LIST_FOREACH(prefix, p, ra->prefixes) {
-                if (p->valid_until) {
+                usec_t lifetime_valid_usec, lifetime_preferred_usec;
 
-                        if (time_now > p->valid_until)
-                                p->opt.valid_lifetime = 0;
-                        else
-                                p->opt.valid_lifetime = htobe32((p->valid_until - time_now) / USEC_PER_SEC);
+                lifetime_valid_usec = MIN(usec_sub_unsigned(p->valid_until, time_now),
+                                          p->lifetime_valid_usec);
 
-                        if (time_now > p->preferred_until)
-                                p->opt.preferred_lifetime = 0;
-                        else
-                                p->opt.preferred_lifetime = htobe32((p->preferred_until - time_now) / USEC_PER_SEC);
-                }
+                lifetime_preferred_usec = MIN3(usec_sub_unsigned(p->preferred_until, time_now),
+                                               p->lifetime_preferred_usec,
+                                               lifetime_valid_usec);
+
+                p->opt.lifetime_valid = usec_to_be32_sec(lifetime_valid_usec);
+                p->opt.lifetime_preferred = usec_to_be32_sec(lifetime_preferred_usec);
+
                 iov[msg.msg_iovlen++] = IOVEC_MAKE(&p->opt, sizeof(p->opt));
         }
 
-        LIST_FOREACH(prefix, rt, ra->route_prefixes)
+        LIST_FOREACH(prefix, rt, ra->route_prefixes) {
+                rt->opt.lifetime = usec_to_be32_sec(MIN(usec_sub_unsigned(rt->valid_until, time_now),
+                                                        rt->lifetime_usec));
+
                 iov[msg.msg_iovlen++] = IOVEC_MAKE(&rt->opt, sizeof(rt->opt));
+        }
 
         if (ra->rdnss)
                 iov[msg.msg_iovlen++] = IOVEC_MAKE(ra->rdnss, ra->rdnss->length * 8);
@@ -220,32 +243,36 @@
 }
 
 static int radv_recv(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        sd_radv *ra = userdata;
-        _cleanup_free_ char *addr = NULL;
+        sd_radv *ra = ASSERT_PTR(userdata);
         struct in6_addr src;
         triple_timestamp timestamp;
         int r;
-        ssize_t buflen;
-        _cleanup_free_ char *buf = NULL;
 
         assert(s);
-        assert(ra);
         assert(ra->event);
 
-        buflen = next_datagram_size_fd(fd);
-        if (buflen < 0)
-                return (int) buflen;
+        ssize_t buflen = next_datagram_size_fd(fd);
+        if (buflen < 0) {
+                if (ERRNO_IS_TRANSIENT(buflen) || ERRNO_IS_DISCONNECT(buflen))
+                        return 0;
 
-        buf = new0(char, buflen);
+                log_radv_errno(ra, buflen, "Failed to determine datagram size to read, ignoring: %m");
+                return 0;
+        }
+
+        _cleanup_free_ char *buf = new0(char, buflen);
         if (!buf)
                 return -ENOMEM;
 
         r = icmp6_receive(fd, buf, buflen, &src, &timestamp);
         if (r < 0) {
+                if (ERRNO_IS_TRANSIENT(r) || ERRNO_IS_DISCONNECT(r))
+                        return 0;
+
                 switch (r) {
                 case -EADDRNOTAVAIL:
-                        (void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &src, &addr);
-                        log_radv(ra, "Received RS from non-link-local address %s. Ignoring", addr);
+                        log_radv(ra, "Received RS from non-link-local address %s. Ignoring",
+                                 IN6_ADDR_TO_STRING(&src));
                         break;
 
                 case -EMULTIHOP:
@@ -256,11 +283,8 @@
                         log_radv(ra, "Received invalid source address from ICMPv6 socket. Ignoring.");
                         break;
 
-                case -EAGAIN: /* ignore spurious wakeups */
-                        break;
-
                 default:
-                        log_radv_errno(ra, r, "Unexpected error receiving from ICMPv6 socket, Ignoring: %m");
+                        log_radv_errno(ra, r, "Unexpected error receiving from ICMPv6 socket, ignoring: %m");
                         break;
                 }
 
@@ -272,69 +296,64 @@
                 return 0;
         }
 
-        (void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &src, &addr);
+        const char *addr = IN6_ADDR_TO_STRING(&src);
 
-        r = radv_send(ra, &src, ra->lifetime);
+        r = radv_send(ra, &src, ra->lifetime_usec);
         if (r < 0)
-                log_radv_errno(ra, r, "Unable to send solicited Router Advertisement to %s, ignoring: %m", strnull(addr));
+                log_radv_errno(ra, r, "Unable to send solicited Router Advertisement to %s, ignoring: %m", addr);
         else
-                log_radv(ra, "Sent solicited Router Advertisement to %s", strnull(addr));
+                log_radv(ra, "Sent solicited Router Advertisement to %s", addr);
 
         return 0;
 }
 
-static usec_t radv_compute_timeout(usec_t min, usec_t max) {
-        assert_return(min <= max, SD_RADV_DEFAULT_MIN_TIMEOUT_USEC);
-
-        /* RFC 4861: min must be no less than 3s, max must be no less than 4s */
-        min = MAX(min, 3*USEC_PER_SEC);
-        max = MAX(max, 4*USEC_PER_SEC);
-
-        return min + (random_u32() % (max - min));
-}
-
 static int radv_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
+        usec_t min_timeout, max_timeout, time_now, timeout;
+        sd_radv *ra = ASSERT_PTR(userdata);
         int r;
-        sd_radv *ra = userdata;
-        usec_t min_timeout = SD_RADV_DEFAULT_MIN_TIMEOUT_USEC;
-        usec_t max_timeout = SD_RADV_DEFAULT_MAX_TIMEOUT_USEC;
-        usec_t time_now, timeout;
-        char time_string[FORMAT_TIMESPAN_MAX];
 
         assert(s);
-        assert(ra);
         assert(ra->event);
+        assert(router_lifetime_is_valid(ra->lifetime_usec));
 
-        r = sd_event_now(ra->event, clock_boottime_or_monotonic(), &time_now);
+        r = sd_event_now(ra->event, CLOCK_BOOTTIME, &time_now);
         if (r < 0)
                 goto fail;
 
-        r = radv_send(ra, NULL, ra->lifetime);
+        r = radv_send(ra, NULL, ra->lifetime_usec);
         if (r < 0)
-                log_radv_errno(ra, r, "Unable to send Router Advertisement: %m");
+                log_radv_errno(ra, r, "Unable to send Router Advertisement, ignoring: %m");
 
         /* RFC 4861, Section 6.2.4, sending initial Router Advertisements */
-        if (ra->ra_sent < SD_RADV_MAX_INITIAL_RTR_ADVERTISEMENTS) {
-                max_timeout = SD_RADV_MAX_INITIAL_RTR_ADVERT_INTERVAL_USEC;
-                min_timeout = SD_RADV_MAX_INITIAL_RTR_ADVERT_INTERVAL_USEC / 3;
-        }
+        if (ra->ra_sent < RADV_MAX_INITIAL_RTR_ADVERTISEMENTS)
+                max_timeout = RADV_MAX_INITIAL_RTR_ADVERT_INTERVAL_USEC;
+        else
+                max_timeout = RADV_DEFAULT_MAX_TIMEOUT_USEC;
 
         /* RFC 4861, Section 6.2.1, lifetime must be at least MaxRtrAdvInterval,
-           so lower the interval here */
-        if (ra->lifetime > 0 && (ra->lifetime * USEC_PER_SEC) < max_timeout) {
-                max_timeout = ra->lifetime * USEC_PER_SEC;
+         * so lower the interval here */
+        if (ra->lifetime_usec > 0)
+                max_timeout = MIN(max_timeout, ra->lifetime_usec);
+
+        if (max_timeout >= 9 * USEC_PER_SEC)
                 min_timeout = max_timeout / 3;
-        }
+        else
+                min_timeout = max_timeout * 3 / 4;
 
-        timeout = radv_compute_timeout(min_timeout, max_timeout);
+        /* RFC 4861, Section 6.2.1.
+         * MaxRtrAdvInterval MUST be no less than 4 seconds and no greater than 1800 seconds.
+         * MinRtrAdvInterval MUST be no less than 3 seconds and no greater than .75 * MaxRtrAdvInterval. */
+        assert(max_timeout >= RADV_MIN_MAX_TIMEOUT_USEC);
+        assert(max_timeout <= RADV_MAX_MAX_TIMEOUT_USEC);
+        assert(min_timeout >= RADV_MIN_MIN_TIMEOUT_USEC);
+        assert(min_timeout <= max_timeout * 3 / 4);
 
-        log_radv(ra, "Next Router Advertisement in %s",
-                 format_timespan(time_string, FORMAT_TIMESPAN_MAX,
-                                 timeout, USEC_PER_SEC));
+        timeout = min_timeout + random_u64_range(max_timeout - min_timeout);
+        log_radv(ra, "Next Router Advertisement in %s", FORMAT_TIMESPAN(timeout, USEC_PER_SEC));
 
         r = event_reset_time(ra->event, &ra->timeout_event_source,
-                             clock_boottime_or_monotonic(),
-                             time_now + timeout, MSEC_PER_SEC,
+                             CLOCK_BOOTTIME,
+                             usec_add(time_now, timeout), MSEC_PER_SEC,
                              radv_timeout, ra,
                              ra->event_priority, "radv-timeout", true);
         if (r < 0)
@@ -350,13 +369,13 @@
         return 0;
 }
 
-_public_ int sd_radv_stop(sd_radv *ra) {
+int sd_radv_stop(sd_radv *ra) {
         int r;
 
         if (!ra)
                 return 0;
 
-        if (ra->state == SD_RADV_STATE_IDLE)
+        if (ra->state == RADV_STATE_IDLE)
                 return 0;
 
         log_radv(ra, "Stopping IPv6 Router Advertisement daemon");
@@ -365,27 +384,27 @@
            with zero lifetime  */
         r = radv_send(ra, NULL, 0);
         if (r < 0)
-                log_radv_errno(ra, r, "Unable to send last Router Advertisement with router lifetime set to zero: %m");
+                log_radv_errno(ra, r, "Unable to send last Router Advertisement with router lifetime set to zero, ignoring: %m");
 
         radv_reset(ra);
         ra->fd = safe_close(ra->fd);
-        ra->state = SD_RADV_STATE_IDLE;
+        ra->state = RADV_STATE_IDLE;
 
         return 0;
 }
 
-_public_ int sd_radv_start(sd_radv *ra) {
+int sd_radv_start(sd_radv *ra) {
         int r;
 
         assert_return(ra, -EINVAL);
         assert_return(ra->event, -EINVAL);
         assert_return(ra->ifindex > 0, -EINVAL);
 
-        if (ra->state != SD_RADV_STATE_IDLE)
+        if (ra->state != RADV_STATE_IDLE)
                 return 0;
 
         r = event_reset_time(ra->event, &ra->timeout_event_source,
-                             clock_boottime_or_monotonic(),
+                             CLOCK_BOOTTIME,
                              0, 0,
                              radv_timeout, ra,
                              ra->event_priority, "radv-timeout", true);
@@ -408,7 +427,7 @@
 
         (void) sd_event_source_set_description(ra->recv_event_source, "radv-receive-message");
 
-        ra->state = SD_RADV_STATE_ADVERTISING;
+        ra->state = RADV_STATE_ADVERTISING;
 
         log_radv(ra, "Started IPv6 Router Advertisement daemon");
 
@@ -420,11 +439,11 @@
         return r;
 }
 
-_public_ int sd_radv_set_ifindex(sd_radv *ra, int ifindex) {
+int sd_radv_set_ifindex(sd_radv *ra, int ifindex) {
         assert_return(ra, -EINVAL);
         assert_return(ifindex > 0, -EINVAL);
 
-        if (ra->state != SD_RADV_STATE_IDLE)
+        if (ra->state != RADV_STATE_IDLE)
                 return -EBUSY;
 
         ra->ifindex = ifindex;
@@ -442,17 +461,25 @@
         return free_and_strdup(&ra->ifname, ifname);
 }
 
-const char *sd_radv_get_ifname(sd_radv *ra) {
-        if (!ra)
-                return NULL;
+int sd_radv_get_ifname(sd_radv *ra, const char **ret) {
+        int r;
 
-        return get_ifname(ra->ifindex, &ra->ifname);
-}
-
-_public_ int sd_radv_set_mac(sd_radv *ra, const struct ether_addr *mac_addr) {
         assert_return(ra, -EINVAL);
 
-        if (ra->state != SD_RADV_STATE_IDLE)
+        r = get_ifname(ra->ifindex, &ra->ifname);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = ra->ifname;
+
+        return 0;
+}
+
+int sd_radv_set_mac(sd_radv *ra, const struct ether_addr *mac_addr) {
+        assert_return(ra, -EINVAL);
+
+        if (ra->state != RADV_STATE_IDLE)
                 return -EBUSY;
 
         if (mac_addr)
@@ -463,7 +490,7 @@
         return 0;
 }
 
-_public_ int sd_radv_set_mtu(sd_radv *ra, uint32_t mtu) {
+int sd_radv_set_mtu(sd_radv *ra, uint32_t mtu) {
         assert_return(ra, -EINVAL);
         assert_return(mtu >= 1280, -EINVAL);
 
@@ -472,10 +499,10 @@
         return 0;
 }
 
-_public_ int sd_radv_set_hop_limit(sd_radv *ra, uint8_t hop_limit) {
+int sd_radv_set_hop_limit(sd_radv *ra, uint8_t hop_limit) {
         assert_return(ra, -EINVAL);
 
-        if (ra->state != SD_RADV_STATE_IDLE)
+        if (ra->state != RADV_STATE_IDLE)
                 return -EBUSY;
 
         ra->hop_limit = hop_limit;
@@ -483,27 +510,30 @@
         return 0;
 }
 
-_public_ int sd_radv_set_router_lifetime(sd_radv *ra, uint16_t router_lifetime) {
+int sd_radv_set_router_lifetime(sd_radv *ra, uint64_t lifetime_usec) {
         assert_return(ra, -EINVAL);
 
-        if (ra->state != SD_RADV_STATE_IDLE)
+        if (ra->state != RADV_STATE_IDLE)
                 return -EBUSY;
 
+        if (!router_lifetime_is_valid(lifetime_usec))
+                return -EINVAL;
+
         /* RFC 4191, Section 2.2, "...If the Router Lifetime is zero, the preference value MUST be set
          * to (00) by the sender..." */
-        if (router_lifetime == 0 &&
+        if (lifetime_usec == 0 &&
             (ra->flags & (0x3 << 3)) != (SD_NDISC_PREFERENCE_MEDIUM << 3))
-                return -ETIME;
+                return -EINVAL;
 
-        ra->lifetime = router_lifetime;
+        ra->lifetime_usec = lifetime_usec;
 
         return 0;
 }
 
-_public_ int sd_radv_set_managed_information(sd_radv *ra, int managed) {
+int sd_radv_set_managed_information(sd_radv *ra, int managed) {
         assert_return(ra, -EINVAL);
 
-        if (ra->state != SD_RADV_STATE_IDLE)
+        if (ra->state != RADV_STATE_IDLE)
                 return -EBUSY;
 
         SET_FLAG(ra->flags, ND_RA_FLAG_MANAGED, managed);
@@ -511,10 +541,10 @@
         return 0;
 }
 
-_public_ int sd_radv_set_other_information(sd_radv *ra, int other) {
+int sd_radv_set_other_information(sd_radv *ra, int other) {
         assert_return(ra, -EINVAL);
 
-        if (ra->state != SD_RADV_STATE_IDLE)
+        if (ra->state != RADV_STATE_IDLE)
                 return -EBUSY;
 
         SET_FLAG(ra->flags, ND_RA_FLAG_OTHER, other);
@@ -522,7 +552,7 @@
         return 0;
 }
 
-_public_ int sd_radv_set_preference(sd_radv *ra, unsigned preference) {
+int sd_radv_set_preference(sd_radv *ra, unsigned preference) {
         assert_return(ra, -EINVAL);
         assert_return(IN_SET(preference,
                              SD_NDISC_PREFERENCE_LOW,
@@ -531,7 +561,7 @@
 
         /* RFC 4191, Section 2.2, "...If the Router Lifetime is zero, the preference value MUST be set
          * to (00) by the sender..." */
-        if (ra->lifetime == 0 && preference != SD_NDISC_PREFERENCE_MEDIUM)
+        if (ra->lifetime_usec == 0 && preference != SD_NDISC_PREFERENCE_MEDIUM)
                 return -EINVAL;
 
         ra->flags = (ra->flags & ~(0x3 << 3)) | (preference << 3);
@@ -539,29 +569,20 @@
         return 0;
 }
 
-_public_ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, int dynamic) {
-        sd_radv_prefix *cur;
+int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p) {
+        sd_radv_prefix *found = NULL;
         int r;
-        _cleanup_free_ char *addr_p = NULL;
-        char time_string_preferred[FORMAT_TIMESPAN_MAX];
-        char time_string_valid[FORMAT_TIMESPAN_MAX];
-        usec_t time_now, valid, preferred, valid_until, preferred_until;
 
         assert_return(ra, -EINVAL);
-
-        if (!p)
-                return -EINVAL;
+        assert_return(p, -EINVAL);
 
         /* Refuse prefixes that don't have a prefix set */
         if (in6_addr_is_null(&p->opt.in6_addr))
                 return -ENOEXEC;
 
-        (void) in_addr_prefix_to_string(AF_INET6,
-                                        (const union in_addr_union*) &p->opt.in6_addr,
-                                        p->opt.prefixlen, &addr_p);
+        const char *addr_p = IN6_ADDR_PREFIX_TO_STRING(&p->opt.in6_addr, p->opt.prefixlen);
 
         LIST_FOREACH(prefix, cur, ra->prefixes) {
-
                 r = in_addr_prefix_intersect(AF_INET6,
                                              (const union in_addr_union*) &cur->opt.in6_addr,
                                              cur->opt.prefixlen,
@@ -572,77 +593,70 @@
                 if (r == 0)
                         continue;
 
-                if (dynamic && cur->opt.prefixlen == p->opt.prefixlen)
-                        goto update;
+                if (cur->opt.prefixlen == p->opt.prefixlen) {
+                        found = cur;
+                        break;
+                }
 
-                _cleanup_free_ char *addr_cur = NULL;
-                (void) in_addr_prefix_to_string(AF_INET6,
-                                                (const union in_addr_union*) &cur->opt.in6_addr,
-                                                cur->opt.prefixlen, &addr_cur);
                 return log_radv_errno(ra, SYNTHETIC_ERRNO(EEXIST),
-                                      "IPv6 prefix %s already configured, ignoring %s",
-                                      strna(addr_cur), strna(addr_p));
+                                      "IPv6 prefix %s conflicts with %s, ignoring.",
+                                      addr_p,
+                                      IN6_ADDR_PREFIX_TO_STRING(&cur->opt.in6_addr, cur->opt.prefixlen));
         }
 
-        p = sd_radv_prefix_ref(p);
+        if (found) {
+                /* p and cur may be equivalent. First increment the reference counter. */
+                sd_radv_prefix_ref(p);
 
-        LIST_APPEND(prefix, ra->prefixes, p);
+                /* Then, remove the old entry. */
+                LIST_REMOVE(prefix, ra->prefixes, found);
+                sd_radv_prefix_unref(found);
 
-        ra->n_prefixes++;
+                /* Finally, add the new entry. */
+                LIST_APPEND(prefix, ra->prefixes, p);
 
-        if (!dynamic) {
-                log_radv(ra, "Added prefix %s", strna(addr_p));
+                log_radv(ra, "Updated/replaced IPv6 prefix %s (preferred: %s, valid: %s)",
+                         addr_p,
+                         FORMAT_TIMESPAN(p->lifetime_preferred_usec, USEC_PER_SEC),
+                         FORMAT_TIMESPAN(p->lifetime_valid_usec, USEC_PER_SEC));
+        } else {
+                /* The prefix is new. Let's simply add it. */
+
+                sd_radv_prefix_ref(p);
+                LIST_APPEND(prefix, ra->prefixes, p);
+                ra->n_prefixes++;
+
+                log_radv(ra, "Added prefix %s", addr_p);
+        }
+
+        if (ra->state == RADV_STATE_IDLE)
                 return 0;
-        }
 
-        cur = p;
+        if (ra->ra_sent == 0)
+                return 0;
 
         /* If RAs have already been sent, send an RA immediately to announce the newly-added prefix */
-        if (ra->ra_sent > 0) {
-                r = radv_send(ra, NULL, ra->lifetime);
-                if (r < 0)
-                        log_radv_errno(ra, r, "Unable to send Router Advertisement for added prefix: %m");
-                else
-                        log_radv(ra, "Sent Router Advertisement for added prefix");
-        }
-
- update:
-        r = sd_event_now(ra->event, clock_boottime_or_monotonic(), &time_now);
+        r = radv_send(ra, NULL, ra->lifetime_usec);
         if (r < 0)
-                return r;
-
-        valid = be32toh(p->opt.valid_lifetime) * USEC_PER_SEC;
-        valid_until = usec_add(valid, time_now);
-        if (valid_until == USEC_INFINITY)
-                return -EOVERFLOW;
-
-        preferred = be32toh(p->opt.preferred_lifetime) * USEC_PER_SEC;
-        preferred_until = usec_add(preferred, time_now);
-        if (preferred_until == USEC_INFINITY)
-                return -EOVERFLOW;
-
-        cur->valid_until = valid_until;
-        cur->preferred_until = preferred_until;
-
-        log_radv(ra, "Updated prefix %s preferred %s valid %s",
-                 strna(addr_p),
-                 format_timespan(time_string_preferred, FORMAT_TIMESPAN_MAX,
-                                 preferred, USEC_PER_SEC),
-                 format_timespan(time_string_valid, FORMAT_TIMESPAN_MAX,
-                                 valid, USEC_PER_SEC));
+                log_radv_errno(ra, r, "Unable to send Router Advertisement for added prefix %s, ignoring: %m", addr_p);
+        else
+                log_radv(ra, "Sent Router Advertisement for added/updated prefix %s.", addr_p);
 
         return 0;
 }
 
-_public_ sd_radv_prefix *sd_radv_remove_prefix(sd_radv *ra,
-                                               const struct in6_addr *prefix,
-                                               unsigned char prefixlen) {
-        sd_radv_prefix *cur, *next;
+void sd_radv_remove_prefix(
+                sd_radv *ra,
+                const struct in6_addr *prefix,
+                unsigned char prefixlen) {
 
-        assert_return(ra, NULL);
-        assert_return(prefix, NULL);
+        if (!ra)
+                return;
 
-        LIST_FOREACH_SAFE(prefix, cur, next, ra->prefixes) {
+        if (!prefix)
+                return;
+
+        LIST_FOREACH(prefix, cur, ra->prefixes) {
                 if (prefixlen != cur->opt.prefixlen)
                         continue;
 
@@ -652,31 +666,20 @@
                 LIST_REMOVE(prefix, ra->prefixes, cur);
                 ra->n_prefixes--;
                 sd_radv_prefix_unref(cur);
-
-                break;
+                return;
         }
-
-        return cur;
 }
 
-_public_ int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p, int dynamic) {
-        char time_string_valid[FORMAT_TIMESPAN_MAX];
-        usec_t time_now, valid, valid_until;
-        _cleanup_free_ char *pretty = NULL;
-        sd_radv_route_prefix *cur;
+int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p) {
+        sd_radv_route_prefix *found = NULL;
         int r;
 
         assert_return(ra, -EINVAL);
+        assert_return(p, -EINVAL);
 
-        if (!p)
-                return -EINVAL;
-
-        (void) in_addr_prefix_to_string(AF_INET6,
-                                        (const union in_addr_union*) &p->opt.in6_addr,
-                                        p->opt.prefixlen, &pretty);
+        const char *addr_p = IN6_ADDR_PREFIX_TO_STRING(&p->opt.in6_addr, p->opt.prefixlen);
 
         LIST_FOREACH(prefix, cur, ra->route_prefixes) {
-
                 r = in_addr_prefix_intersect(AF_INET6,
                                              (const union in_addr_union*) &cur->opt.in6_addr,
                                              cur->opt.prefixlen,
@@ -687,56 +690,64 @@
                 if (r == 0)
                         continue;
 
-                if (dynamic && cur->opt.prefixlen == p->opt.prefixlen)
-                        goto update;
+                if (cur->opt.prefixlen == p->opt.prefixlen) {
+                        found = cur;
+                        break;
+                }
 
-                _cleanup_free_ char *addr = NULL;
-                (void) in_addr_prefix_to_string(AF_INET6,
-                                                (const union in_addr_union*) &cur->opt.in6_addr,
-                                                cur->opt.prefixlen, &addr);
                 return log_radv_errno(ra, SYNTHETIC_ERRNO(EEXIST),
-                                      "IPv6 route prefix %s already configured, ignoring %s",
-                                      strna(addr), strna(pretty));
+                                      "IPv6 route prefix %s conflicts with %s, ignoring.",
+                                      addr_p,
+                                      IN6_ADDR_PREFIX_TO_STRING(&cur->opt.in6_addr, cur->opt.prefixlen));
         }
 
-        p = sd_radv_route_prefix_ref(p);
+        if (found) {
+                /* p and cur may be equivalent. First increment the reference counter. */
+                sd_radv_route_prefix_ref(p);
 
-        LIST_APPEND(prefix, ra->route_prefixes, p);
-        ra->n_route_prefixes++;
+                /* Then, remove the old entry. */
+                LIST_REMOVE(prefix, ra->route_prefixes, found);
+                sd_radv_route_prefix_unref(found);
 
-        if (!dynamic) {
-                log_radv(ra, "Added prefix %s", strna(pretty));
+                /* Finally, add the new entry. */
+                LIST_APPEND(prefix, ra->route_prefixes, p);
+
+                log_radv(ra, "Updated/replaced IPv6 route prefix %s (lifetime: %s)",
+                         strna(addr_p),
+                         FORMAT_TIMESPAN(p->lifetime_usec, USEC_PER_SEC));
+        } else {
+                /* The route prefix is new. Let's simply add it. */
+
+                sd_radv_route_prefix_ref(p);
+                LIST_APPEND(prefix, ra->route_prefixes, p);
+                ra->n_route_prefixes++;
+
+                log_radv(ra, "Added route prefix %s", strna(addr_p));
+        }
+
+        if (ra->state == RADV_STATE_IDLE)
                 return 0;
-        }
+
+        if (ra->ra_sent == 0)
+                return 0;
 
         /* If RAs have already been sent, send an RA immediately to announce the newly-added route prefix */
-        if (ra->ra_sent > 0) {
-                r = radv_send(ra, NULL, ra->lifetime);
-                if (r < 0)
-                        log_radv_errno(ra, r, "Unable to send Router Advertisement for added route prefix: %m");
-                else
-                        log_radv(ra, "Sent Router Advertisement for added route prefix");
-        }
-
- update:
-        r = sd_event_now(ra->event, clock_boottime_or_monotonic(), &time_now);
+        r = radv_send(ra, NULL, ra->lifetime_usec);
         if (r < 0)
-                return r;
-
-        valid = be32toh(p->opt.lifetime) * USEC_PER_SEC;
-        valid_until = usec_add(valid, time_now);
-        if (valid_until == USEC_INFINITY)
-                return -EOVERFLOW;
-
-        log_radv(ra, "Updated route prefix %s valid %s",
-                 strna(pretty),
-                 format_timespan(time_string_valid, FORMAT_TIMESPAN_MAX, valid, USEC_PER_SEC));
+                log_radv_errno(ra, r, "Unable to send Router Advertisement for added route prefix %s, ignoring: %m",
+                               strna(addr_p));
+        else
+                log_radv(ra, "Sent Router Advertisement for added route prefix %s.", strna(addr_p));
 
         return 0;
 }
 
-_public_ int sd_radv_set_rdnss(sd_radv *ra, uint32_t lifetime,
-                               const struct in6_addr *dns, size_t n_dns) {
+int sd_radv_set_rdnss(
+                sd_radv *ra,
+                uint32_t lifetime,
+                const struct in6_addr *dns,
+                size_t n_dns) {
+
         _cleanup_free_ struct sd_radv_opt_dns *opt_rdnss = NULL;
         size_t len;
 
@@ -756,7 +767,7 @@
         if (!opt_rdnss)
                 return -ENOMEM;
 
-        opt_rdnss->type = SD_RADV_OPT_RDNSS;
+        opt_rdnss->type = RADV_OPT_RDNSS;
         opt_rdnss->length = len / 8;
         opt_rdnss->lifetime = htobe32(lifetime);
 
@@ -769,11 +780,13 @@
         return 0;
 }
 
-_public_ int sd_radv_set_dnssl(sd_radv *ra, uint32_t lifetime,
-                               char **search_list) {
+int sd_radv_set_dnssl(
+                sd_radv *ra,
+                uint32_t lifetime,
+                char **search_list) {
+
         _cleanup_free_ struct sd_radv_opt_dns *opt_dnssl = NULL;
         size_t len = 0;
-        char **s;
         uint8_t *p;
 
         assert_return(ra, -EINVAL);
@@ -792,7 +805,7 @@
         if (!opt_dnssl)
                 return -ENOMEM;
 
-        opt_dnssl->type = SD_RADV_OPT_DNSSL;
+        opt_dnssl->type = RADV_OPT_DNSSL;
         opt_dnssl->length = len / 8;
         opt_dnssl->lifetime = htobe32(lifetime);
 
@@ -818,7 +831,7 @@
         return 0;
 }
 
-_public_ int sd_radv_prefix_new(sd_radv_prefix **ret) {
+int sd_radv_prefix_new(sd_radv_prefix **ret) {
         sd_radv_prefix *p;
 
         assert_return(ret, -EINVAL);
@@ -837,8 +850,10 @@
                 /* RFC 4861, Section 6.2.1 */
                 .opt.flags = ND_OPT_PI_FLAG_ONLINK|ND_OPT_PI_FLAG_AUTO,
 
-                .opt.preferred_lifetime = htobe32(604800),
-                .opt.valid_lifetime = htobe32(2592000),
+                .lifetime_valid_usec = RADV_DEFAULT_VALID_LIFETIME_USEC,
+                .lifetime_preferred_usec = RADV_DEFAULT_PREFERRED_LIFETIME_USEC,
+                .valid_until = USEC_INFINITY,
+                .preferred_until = USEC_INFINITY,
         };
 
         *ret = p;
@@ -847,8 +862,11 @@
 
 DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_radv_prefix, sd_radv_prefix, mfree);
 
-_public_ int sd_radv_prefix_set_prefix(sd_radv_prefix *p, const struct in6_addr *in6_addr,
-                                       unsigned char prefixlen) {
+int sd_radv_prefix_set_prefix(
+                sd_radv_prefix *p,
+                const struct in6_addr *in6_addr,
+                unsigned char prefixlen) {
+
         assert_return(p, -EINVAL);
         assert_return(in6_addr, -EINVAL);
 
@@ -865,8 +883,11 @@
         return 0;
 }
 
-_public_ int sd_radv_prefix_get_prefix(sd_radv_prefix *p, struct in6_addr *ret_in6_addr,
-                                       unsigned char *ret_prefixlen) {
+int sd_radv_prefix_get_prefix(
+                sd_radv_prefix *p,
+                struct in6_addr *ret_in6_addr,
+                unsigned char *ret_prefixlen) {
+
         assert_return(p, -EINVAL);
         assert_return(ret_in6_addr, -EINVAL);
         assert_return(ret_prefixlen, -EINVAL);
@@ -877,7 +898,7 @@
         return 0;
 }
 
-_public_ int sd_radv_prefix_set_onlink(sd_radv_prefix *p, int onlink) {
+int sd_radv_prefix_set_onlink(sd_radv_prefix *p, int onlink) {
         assert_return(p, -EINVAL);
 
         SET_FLAG(p->opt.flags, ND_OPT_PI_FLAG_ONLINK, onlink);
@@ -885,8 +906,7 @@
         return 0;
 }
 
-_public_ int sd_radv_prefix_set_address_autoconfiguration(sd_radv_prefix *p,
-                                                          int address_autoconfiguration) {
+int sd_radv_prefix_set_address_autoconfiguration(sd_radv_prefix *p, int address_autoconfiguration) {
         assert_return(p, -EINVAL);
 
         SET_FLAG(p->opt.flags, ND_OPT_PI_FLAG_AUTO, address_autoconfiguration);
@@ -894,25 +914,25 @@
         return 0;
 }
 
-_public_ int sd_radv_prefix_set_valid_lifetime(sd_radv_prefix *p,
-                                               uint32_t valid_lifetime) {
+int sd_radv_prefix_set_valid_lifetime(sd_radv_prefix *p, uint64_t lifetime_usec, uint64_t valid_until) {
         assert_return(p, -EINVAL);
 
-        p->opt.valid_lifetime = htobe32(valid_lifetime);
+        p->lifetime_valid_usec = lifetime_usec;
+        p->valid_until = valid_until;
 
         return 0;
 }
 
-_public_ int sd_radv_prefix_set_preferred_lifetime(sd_radv_prefix *p,
-                                                   uint32_t preferred_lifetime) {
+int sd_radv_prefix_set_preferred_lifetime(sd_radv_prefix *p, uint64_t lifetime_usec, uint64_t valid_until) {
         assert_return(p, -EINVAL);
 
-        p->opt.preferred_lifetime = htobe32(preferred_lifetime);
+        p->lifetime_preferred_usec = lifetime_usec;
+        p->preferred_until = valid_until;
 
         return 0;
 }
 
-_public_ int sd_radv_route_prefix_new(sd_radv_route_prefix **ret) {
+int sd_radv_route_prefix_new(sd_radv_route_prefix **ret) {
         sd_radv_route_prefix *p;
 
         assert_return(ret, -EINVAL);
@@ -924,11 +944,12 @@
         *p = (sd_radv_route_prefix) {
                 .n_ref = 1,
 
-                .opt.type = SD_RADV_OPT_ROUTE_INFORMATION,
+                .opt.type = RADV_OPT_ROUTE_INFORMATION,
                 .opt.length = DIV_ROUND_UP(sizeof(p->opt), 8),
                 .opt.prefixlen = 64,
 
-                .opt.lifetime = htobe32(604800),
+                .lifetime_usec = RADV_DEFAULT_VALID_LIFETIME_USEC,
+                .valid_until = USEC_INFINITY,
         };
 
         *ret = p;
@@ -937,8 +958,11 @@
 
 DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_radv_route_prefix, sd_radv_route_prefix, mfree);
 
-_public_ int sd_radv_prefix_set_route_prefix(sd_radv_route_prefix *p, const struct in6_addr *in6_addr,
-                                             unsigned char prefixlen) {
+int sd_radv_route_prefix_set_prefix(
+                sd_radv_route_prefix *p,
+                const struct in6_addr *in6_addr,
+                unsigned char prefixlen) {
+
         assert_return(p, -EINVAL);
         assert_return(in6_addr, -EINVAL);
 
@@ -955,10 +979,11 @@
         return 0;
 }
 
-_public_ int sd_radv_route_prefix_set_lifetime(sd_radv_route_prefix *p, uint32_t valid_lifetime) {
+int sd_radv_route_prefix_set_lifetime(sd_radv_route_prefix *p, uint64_t lifetime_usec, uint64_t valid_until) {
         assert_return(p, -EINVAL);
 
-        p->opt.lifetime = htobe32(valid_lifetime);
+        p->lifetime_usec = lifetime_usec;
+        p->valid_until = valid_until;
 
         return 0;
 }
diff --git a/src/libsystemd-network/test-acd.c b/src/libsystemd-network/test-acd.c
index f4aab85..4b5ad70 100644
--- a/src/libsystemd-network/test-acd.c
+++ b/src/libsystemd-network/test-acd.c
@@ -12,9 +12,7 @@
 #include "sd-netlink.h"
 
 #include "in-addr-util.h"
-#include "netlink-util.h"
 #include "tests.h"
-#include "util.h"
 
 static void acd_handler(sd_ipv4acd *acd, int event, void *userdata) {
         assert_se(acd);
@@ -30,7 +28,7 @@
                 log_error("the client was stopped");
                 break;
         default:
-                assert_not_reached("invalid ACD event");
+                assert_not_reached();
         }
 }
 
diff --git a/src/libsystemd-network/test-dhcp-client.c b/src/libsystemd-network/test-dhcp-client.c
index 6e0fdcd..863649f 100644
--- a/src/libsystemd-network/test-dhcp-client.c
+++ b/src/libsystemd-network/test-dhcp-client.c
@@ -17,27 +17,24 @@
 #include "dhcp-identifier.h"
 #include "dhcp-internal.h"
 #include "dhcp-protocol.h"
+#include "ether-addr-util.h"
 #include "fd-util.h"
 #include "random-util.h"
 #include "tests.h"
-#include "util.h"
 
-static uint8_t mac_addr[] = {'A', 'B', 'C', '1', '2', '3'};
-static uint8_t bcast_addr[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
-
+static struct hw_addr_data hw_addr = {
+        .length = ETH_ALEN,
+        .ether = {{ 'A', 'B', 'C', '1', '2', '3' }},
+}, bcast_addr = {
+        .length = ETH_ALEN,
+        .ether = {{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }},
+};
 typedef int (*test_callback_recv_t)(size_t size, DHCPMessage *dhcp);
 
 static bool verbose = true;
 static int test_fd[2];
 static test_callback_recv_t callback_recv;
 static be32_t xid;
-static sd_event_source *test_hangcheck;
-
-static int test_dhcp_hangcheck(sd_event_source *s, uint64_t usec, void *userdata) {
-        assert_not_reached("Test case should have completed in 2 seconds");
-
-        return 0;
-}
 
 static void test_request_basic(sd_event *e) {
         int r;
@@ -45,7 +42,7 @@
         sd_dhcp_client *client;
 
         if (verbose)
-                printf("* %s\n", __FUNCTION__);
+                printf("* %s\n", __func__);
 
         /* Initialize client without Anonymize settings. */
         r = sd_dhcp_client_new(&client, false);
@@ -105,7 +102,7 @@
         sd_dhcp_client *client;
 
         if (verbose)
-                printf("* %s\n", __FUNCTION__);
+                printf("* %s\n", __func__);
 
         /* Initialize client with Anonymize settings. */
         r = sd_dhcp_client_new(&client, true);
@@ -116,7 +113,7 @@
         r = sd_dhcp_client_attach_event(client, e, 0);
         assert_se(r >= 0);
 
-        assert_se(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_NETBIOS_NAMESERVER) == 0);
+        assert_se(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_NETBIOS_NAME_SERVER) == 0);
         /* This PRL option is not set when using Anonymize */
         assert_se(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_HOST_NAME) == 1);
         assert_se(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_PARAMETER_REQUEST_LIST) == -EINVAL);
@@ -137,7 +134,7 @@
         };
 
         if (verbose)
-                printf("* %s\n", __FUNCTION__);
+                printf("* %s\n", __func__);
 
         assert_se(dhcp_packet_checksum((uint8_t*)&buf, 20) == be16toh(0x78ae));
 }
@@ -146,10 +143,8 @@
         uint32_t iaid_legacy;
         be32_t iaid;
 
-        assert_se(dhcp_identifier_set_iaid(42, mac_addr, sizeof(mac_addr), /* legacy = */ true,
-                                           /* use_mac = */ true, &iaid_legacy) >= 0);
-        assert_se(dhcp_identifier_set_iaid(42, mac_addr, sizeof(mac_addr), /* legacy = */ false,
-                                           /* use_mac = */ true, &iaid) >= 0);
+        assert_se(dhcp_identifier_set_iaid(NULL, &hw_addr, /* legacy = */ true, &iaid_legacy) >= 0);
+        assert_se(dhcp_identifier_set_iaid(NULL, &hw_addr, /* legacy = */ false, &iaid) >= 0);
 
         /* we expect, that the MAC address was hashed. The legacy value is in native
          * endianness. */
@@ -158,20 +153,20 @@
 #if __BYTE_ORDER == __LITTLE_ENDIAN
         assert_se(iaid == iaid_legacy);
 #else
-        assert_se(iaid == __bswap_32(iaid_legacy));
+        assert_se(iaid == bswap_32(iaid_legacy));
 #endif
 }
 
 static int check_options(uint8_t code, uint8_t len, const void *option, void *userdata) {
-        switch(code) {
+        switch (code) {
         case SD_DHCP_OPTION_CLIENT_IDENTIFIER:
         {
                 uint32_t iaid;
                 struct duid duid;
                 size_t duid_len;
 
-                assert_se(dhcp_identifier_set_duid_en(&duid, &duid_len) >= 0);
-                assert_se(dhcp_identifier_set_iaid(42, mac_addr, ETH_ALEN, true, /* use_mac = */ true, &iaid) >= 0);
+                assert_se(dhcp_identifier_set_duid_en(/* test_mode = */ true, &duid, &duid_len) >= 0);
+                assert_se(dhcp_identifier_set_iaid(NULL, &hw_addr, /* legacy = */ true, &iaid) >= 0);
 
                 assert_se(len == sizeof(uint8_t) + sizeof(uint32_t) + duid_len);
                 assert_se(len == 19);
@@ -224,7 +219,7 @@
         assert_se(ip_check == 0xffff);
 
         assert_se(discover->dhcp.xid);
-        assert_se(memcmp(discover->dhcp.chaddr, &mac_addr, ETH_ALEN) == 0);
+        assert_se(memcmp(discover->dhcp.chaddr, hw_addr.bytes, hw_addr.length) == 0);
 
         size = len - sizeof(struct iphdr) - sizeof(struct udphdr);
 
@@ -238,9 +233,12 @@
                 int ifindex,
                 union sockaddr_union *link,
                 uint32_t id,
-                const uint8_t *addr, size_t addr_len,
-                const uint8_t *bcaddr, size_t bcaddr_len,
-                uint16_t arp_type, uint16_t port) {
+                const struct hw_addr_data *_hw_addr,
+                const struct hw_addr_data *_bcast_addr,
+                uint16_t arp_type,
+                uint16_t port,
+                bool so_priority_set,
+                int so_priority) {
 
         if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) < 0)
                 return -errno;
@@ -279,7 +277,7 @@
         int res, r;
 
         if (verbose)
-                printf("* %s\n", __FUNCTION__);
+                printf("* %s\n", __func__);
 
         r = sd_dhcp_client_new(&client, false);
         assert_se(r >= 0);
@@ -289,7 +287,7 @@
         assert_se(r >= 0);
 
         assert_se(sd_dhcp_client_set_ifindex(client, 42) >= 0);
-        assert_se(sd_dhcp_client_set_mac(client, mac_addr, bcast_addr, ETH_ALEN, ARPHRD_ETHER) >= 0);
+        assert_se(sd_dhcp_client_set_mac(client, hw_addr.bytes, bcast_addr.bytes, hw_addr.length, ARPHRD_ETHER) >= 0);
         dhcp_client_set_test_mode(client, true);
 
         assert_se(sd_dhcp_client_set_request_option(client, 248) >= 0);
@@ -447,7 +445,7 @@
 
         memcpy(&test_addr_acq_ack[26], &udp_check, sizeof(udp_check));
         memcpy(&test_addr_acq_ack[32], &xid, sizeof(xid));
-        memcpy(&test_addr_acq_ack[56], &mac_addr, ETHER_ADDR_LEN);
+        memcpy(&test_addr_acq_ack[56], hw_addr.bytes, hw_addr.length);
 
         callback_recv = NULL;
 
@@ -478,7 +476,7 @@
 
         memcpy(&test_addr_acq_offer[26], &udp_check, sizeof(udp_check));
         memcpy(&test_addr_acq_offer[32], &xid, sizeof(xid));
-        memcpy(&test_addr_acq_offer[56], &mac_addr, ETHER_ADDR_LEN);
+        memcpy(&test_addr_acq_offer[56], hw_addr.bytes, hw_addr.length);
 
         callback_recv = test_addr_acq_recv_request;
 
@@ -497,7 +495,7 @@
         int res, r;
 
         if (verbose)
-                printf("* %s\n", __FUNCTION__);
+                printf("* %s\n", __func__);
 
         r = sd_dhcp_client_new(&client, false);
         assert_se(r >= 0);
@@ -507,26 +505,22 @@
         assert_se(r >= 0);
 
         assert_se(sd_dhcp_client_set_ifindex(client, 42) >= 0);
-        assert_se(sd_dhcp_client_set_mac(client, mac_addr, bcast_addr, ETH_ALEN, ARPHRD_ETHER) >= 0);
+        assert_se(sd_dhcp_client_set_mac(client, hw_addr.bytes, bcast_addr.bytes, hw_addr.length, ARPHRD_ETHER) >= 0);
         dhcp_client_set_test_mode(client, true);
 
         assert_se(sd_dhcp_client_set_callback(client, test_addr_acq_acquired, e) >= 0);
 
         callback_recv = test_addr_acq_recv_discover;
 
-        assert_se(sd_event_add_time_relative(
-                                  e, &test_hangcheck,
-                                  clock_boottime_or_monotonic(),
-                                  2 * USEC_PER_SEC, 0,
-                                  test_dhcp_hangcheck, NULL) >= 0);
+        assert_se(sd_event_add_time_relative(e, NULL, CLOCK_BOOTTIME,
+                                             2 * USEC_PER_SEC, 0,
+                                             NULL, INT_TO_PTR(-ETIMEDOUT)) >= 0);
 
         res = sd_dhcp_client_start(client);
         assert_se(IN_SET(res, 0, -EINPROGRESS));
 
         assert_se(sd_event_loop(e) >= 0);
 
-        test_hangcheck = sd_event_source_unref(test_hangcheck);
-
         assert_se(sd_dhcp_client_set_callback(client, NULL, NULL) >= 0);
         assert_se(sd_dhcp_client_stop(client) >= 0);
         sd_dhcp_client_unref(client);
diff --git a/src/libsystemd-network/test-dhcp-option.c b/src/libsystemd-network/test-dhcp-option.c
index d152e79..82c5cdb 100644
--- a/src/libsystemd-network/test-dhcp-option.c
+++ b/src/libsystemd-network/test-dhcp-option.c
@@ -53,7 +53,7 @@
 };
 
 static const char *dhcp_type(int type) {
-        switch(type) {
+        switch (type) {
         case DHCP_DISCOVER:
                 return "DHCPDISCOVER";
         case DHCP_OFFER:
@@ -89,7 +89,8 @@
         message = malloc0(len);
 
         assert_se(dhcp_message_init(message, BOOTREQUEST, 0x12345678,
-                  DHCP_DISCOVER, ARPHRD_ETHER, optlen, &optoffset) >= 0);
+                                    DHCP_DISCOVER, ARPHRD_ETHER, ETH_ALEN, (uint8_t[16]){},
+                                    optlen, &optoffset) >= 0);
 
         assert_se(message->xid == htobe32(0x12345678));
         assert_se(message->op == BOOTREQUEST);
@@ -121,10 +122,10 @@
 }
 
 static void test_ignore_opts(uint8_t *descoption, int *descpos, int *desclen) {
-        assert(*descpos >= 0);
+        assert_se(*descpos >= 0);
 
         while (*descpos < *desclen) {
-                switch(descoption[*descpos]) {
+                switch (descoption[*descpos]) {
                 case SD_DHCP_OPTION_PAD:
                         *descpos += 1;
                         break;
@@ -146,7 +147,6 @@
         int *desclen = NULL, *descpos = NULL;
         uint8_t optcode = 0;
         uint8_t optlen = 0;
-        uint8_t i;
 
         assert_se((!desc && !code && !len) || desc);
 
@@ -199,11 +199,11 @@
         assert_se(code == optcode);
         assert_se(len == optlen);
 
-        for (i = 0; i < len; i++) {
-
+        for (unsigned i = 0; i < len; i++) {
                 if (verbose)
-                        printf("0x%02x(0x%02x) ", ((uint8_t*) option)[i],
-                                        descoption[*descpos + 2 + i]);
+                        printf("0x%02x(0x%02x) ",
+                               ((uint8_t*) option)[i],
+                               descoption[*descpos + 2 + i]);
 
                 assert_se(((uint8_t*) option)[i] == descoption[*descpos + 2 + i]);
         }
@@ -278,7 +278,7 @@
         assert_se(dhcp_option_parse(message, sizeof(DHCPMessage) + desc->len, NULL, NULL, NULL) < 0);
 }
 
-static uint8_t options[64] = {
+static uint8_t the_options[64] = {
         'A', 'B', 'C', 'D',
         160, 2, 0x11, 0x12,
         0,
@@ -292,7 +292,6 @@
 static void test_option_set(void) {
         _cleanup_free_ DHCPMessage *result = NULL;
         size_t offset = 0, len, pos;
-        unsigned i;
 
         result = malloc0(sizeof(DHCPMessage) + 11);
         assert_se(result);
@@ -316,45 +315,45 @@
 
         offset = pos = 4;
         len = 11;
-        while (pos < len && options[pos] != SD_DHCP_OPTION_END) {
+        while (pos < len && the_options[pos] != SD_DHCP_OPTION_END) {
                 assert_se(dhcp_option_append(result, len, &offset, DHCP_OVERLOAD_SNAME,
-                                             options[pos],
-                                             options[pos + 1],
-                                             &options[pos + 2]) >= 0);
+                                             the_options[pos],
+                                             the_options[pos + 1],
+                                             &the_options[pos + 2]) >= 0);
 
-                if (options[pos] == SD_DHCP_OPTION_PAD)
+                if (the_options[pos] == SD_DHCP_OPTION_PAD)
                         pos++;
                 else
-                        pos += 2 + options[pos + 1];
+                        pos += 2 + the_options[pos + 1];
 
                 if (pos < len)
                         assert_se(offset == pos);
         }
 
-        for (i = 0; i < 9; i++) {
+        for (unsigned i = 0; i < 9; i++) {
                 if (verbose)
                         printf("%2u: 0x%02x(0x%02x) (options)\n", i, result->options[i],
-                               options[i]);
-                assert_se(result->options[i] == options[i]);
+                               the_options[i]);
+                assert_se(result->options[i] == the_options[i]);
         }
 
         if (verbose)
                 printf("%2d: 0x%02x(0x%02x) (options)\n", 9, result->options[9],
-                       SD_DHCP_OPTION_END);
+                       (unsigned) SD_DHCP_OPTION_END);
 
         assert_se(result->options[9] == SD_DHCP_OPTION_END);
 
         if (verbose)
                 printf("%2d: 0x%02x(0x%02x) (options)\n", 10, result->options[10],
-                       SD_DHCP_OPTION_PAD);
+                       (unsigned) SD_DHCP_OPTION_PAD);
 
         assert_se(result->options[10] == SD_DHCP_OPTION_PAD);
 
-        for (i = 0; i < pos - 8; i++) {
+        for (unsigned i = 0; i < pos - 8; i++) {
                 if (verbose)
                         printf("%2u: 0x%02x(0x%02x) (sname)\n", i, result->sname[i],
-                               options[i + 9]);
-                assert_se(result->sname[i] == options[i + 9]);
+                               the_options[i + 9]);
+                assert_se(result->sname[i] == the_options[i + 9]);
         }
 
         if (verbose)
@@ -362,19 +361,17 @@
 }
 
 int main(int argc, char *argv[]) {
-        unsigned i;
-
         test_invalid_buffer_length();
         test_message_init();
 
         test_options(NULL);
 
-        for (i = 0; i < ELEMENTSOF(option_tests); i++)
+        for (unsigned i = 0; i < ELEMENTSOF(option_tests); i++)
                 test_options(&option_tests[i]);
 
         test_option_set();
 
-        for (i = 0; i < ELEMENTSOF(option_tests); i++) {
+        for (unsigned i = 0; i < ELEMENTSOF(option_tests); i++) {
                 struct option_desc *desc = &option_tests[i];
                 if (!desc->success || desc->snamelen > 0 || desc->filelen > 0)
                         continue;
diff --git a/src/libsystemd-network/test-dhcp-server.c b/src/libsystemd-network/test-dhcp-server.c
index a5c9bfe..a19735b 100644
--- a/src/libsystemd-network/test-dhcp-server.c
+++ b/src/libsystemd-network/test-dhcp-server.c
@@ -20,8 +20,9 @@
         assert_se(sd_dhcp_server_configure_pool(server, address, 8, 0, size) == ret);
 }
 
-static int test_basic(sd_event *event, bool bind_to_interface) {
+static int test_basic(bool bind_to_interface) {
         _cleanup_(sd_dhcp_server_unrefp) sd_dhcp_server *server = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         struct in_addr address_lo = {
                 .s_addr = htobe32(INADDR_LOOPBACK),
         };
@@ -30,6 +31,10 @@
         };
         int r;
 
+        log_debug("/* %s(bind_to_interface=%s) */", __func__, yes_no(bind_to_interface));
+
+        assert_se(sd_event_new(&event) >= 0);
+
         /* attach to loopback interface */
         assert_se(sd_dhcp_server_new(&server, 1) >= 0);
         assert_se(server);
@@ -58,7 +63,7 @@
 
         r = sd_dhcp_server_start(server);
         if (r == -EPERM)
-                return log_info_errno(r, "sd_dhcp_server_start failed: %m");
+                return r;
         assert_se(r >= 0);
 
         assert_se(sd_dhcp_server_start(server) >= 0);
@@ -108,9 +113,17 @@
         struct in_addr address_lo = {
                 .s_addr = htobe32(INADDR_LOOPBACK),
         };
+        struct in_addr static_lease_address = {
+                .s_addr = htobe32(INADDR_LOOPBACK + 42),
+        };
+        static uint8_t static_lease_client_id[7] = {0x01, 'A', 'B', 'C', 'D', 'E', 'G' };
+
+        log_debug("/* %s */", __func__);
 
         assert_se(sd_dhcp_server_new(&server, 1) >= 0);
         assert_se(sd_dhcp_server_configure_pool(server, &address_lo, 8, 0, 0) >= 0);
+        assert_se(sd_dhcp_server_set_static_lease(server, &static_lease_address, static_lease_client_id,
+                                                  ELEMENTSOF(static_lease_client_id)) >= 0);
         assert_se(sd_dhcp_server_attach_event(server, NULL, 0) >= 0);
         assert_se(sd_dhcp_server_start(server) >= 0);
 
@@ -137,12 +150,12 @@
         assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == DHCP_OFFER);
 
         test.message.htype = 0;
-        assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == 0);
+        assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == DHCP_OFFER);
         test.message.htype = ARPHRD_ETHER;
         assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == DHCP_OFFER);
 
         test.message.hlen = 0;
-        assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == 0);
+        assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == -EBADMSG);
         test.message.hlen = ETHER_ADDR_LEN;
         assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == DHCP_OFFER);
 
@@ -180,6 +193,26 @@
 
         test.option_requested_ip.address = htobe32(INADDR_LOOPBACK + 30);
         assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == 0);
+
+        /* request address reserved for static lease (unmatching client ID) */
+        test.option_client_id.id[6] = 'H';
+        test.option_requested_ip.address = htobe32(INADDR_LOOPBACK + 42);
+        assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == 0);
+
+        /* request unmatching address */
+        test.option_client_id.id[6] = 'G';
+        test.option_requested_ip.address = htobe32(INADDR_LOOPBACK + 41);
+        assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == 0);
+
+        /* request matching address */
+        test.option_client_id.id[6] = 'G';
+        test.option_requested_ip.address = htobe32(INADDR_LOOPBACK + 42);
+        assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == DHCP_ACK);
+
+        /* try again */
+        test.option_client_id.id[6] = 'G';
+        test.option_requested_ip.address = htobe32(INADDR_LOOPBACK + 42);
+        assert_se(dhcp_server_handle_message(server, (DHCPMessage*)&test, sizeof(test)) == DHCP_ACK);
 }
 
 static uint64_t client_id_hash_helper(DHCPClientId *id, uint8_t key[HASH_KEY_SIZE]) {
@@ -202,6 +235,8 @@
                 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
         };
 
+        log_debug("/* %s */", __func__);
+
         a.data = (uint8_t*)strdup("abcd");
         b.data = (uint8_t*)strdup("abcd");
 
@@ -227,24 +262,61 @@
         free(b.data);
 }
 
+static void test_static_lease(void) {
+        _cleanup_(sd_dhcp_server_unrefp) sd_dhcp_server *server = NULL;
+
+        log_debug("/* %s */", __func__);
+
+        assert_se(sd_dhcp_server_new(&server, 1) >= 0);
+
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x01020304 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020304 }, sizeof(uint32_t)) >= 0);
+        /* Duplicated entry. */
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x01020304 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020304 }, sizeof(uint32_t)) == -EEXIST);
+        /* Address is conflicted. */
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x01020304 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020305 }, sizeof(uint32_t)) == -EEXIST);
+        /* Client ID is conflicted. */
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x01020305 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020304 }, sizeof(uint32_t)) == -EEXIST);
+
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x01020305 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020305 }, sizeof(uint32_t)) >= 0);
+        /* Remove the previous entry. */
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x00000000 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020305 }, sizeof(uint32_t)) >= 0);
+        /* Then, set a different address. */
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x01020306 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020305 }, sizeof(uint32_t)) >= 0);
+        /* Remove again. */
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x00000000 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020305 }, sizeof(uint32_t)) >= 0);
+        /* Try to remove non-existent entry. */
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x00000000 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020305 }, sizeof(uint32_t)) >= 0);
+        /* Try to remove non-existent entry. */
+        assert_se(sd_dhcp_server_set_static_lease(server, &(struct in_addr) { .s_addr = 0x00000000 },
+                                                  (uint8_t*) &(uint32_t) { 0x01020306 }, sizeof(uint32_t)) >= 0);
+}
+
 int main(int argc, char *argv[]) {
-        _cleanup_(sd_event_unrefp) sd_event *e;
         int r;
 
         test_setup_logging(LOG_DEBUG);
 
-        assert_se(sd_event_new(&e) >= 0);
+        test_client_id_hash();
+        test_static_lease();
 
-        r = test_basic(e, true);
-        if (r != 0)
-                return log_tests_skipped("cannot start dhcp server(bound to interface)");
+        r = test_basic(true);
+        if (r < 0)
+                return log_tests_skipped_errno(r, "cannot start dhcp server(bound to interface)");
 
-        r = test_basic(e, false);
-        if (r != 0)
-                return log_tests_skipped("cannot start dhcp server(non-bound to interface)");
+        r = test_basic(false);
+        if (r < 0)
+                return log_tests_skipped_errno(r, "cannot start dhcp server(non-bound to interface)");
 
         test_message_handler();
-        test_client_id_hash();
 
         return 0;
 }
diff --git a/src/libsystemd-network/test-dhcp6-client.c b/src/libsystemd-network/test-dhcp6-client.c
index 4296875..00c1190 100644
--- a/src/libsystemd-network/test-dhcp6-client.c
+++ b/src/libsystemd-network/test-dhcp6-client.c
@@ -26,36 +26,69 @@
 #include "tests.h"
 #include "time-util.h"
 
-static struct ether_addr mac_addr = {
-        .ether_addr_octet = {'A', 'B', 'C', '1', '2', '3'}
+#define DHCP6_CLIENT_EVENT_TEST_ADVERTISED 77
+#define IA_ID_BYTES                                                     \
+        0x0e, 0xcf, 0xa3, 0x7d
+#define IA_NA_ADDRESS1_BYTES                                            \
+        0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x78, 0xee, 0x1c, 0xf3, 0x09, 0x3c, 0x55, 0xad
+#define IA_NA_ADDRESS2_BYTES                                            \
+        0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x78, 0xee, 0x1c, 0xf3, 0x09, 0x3c, 0x55, 0xae
+#define IA_PD_PREFIX1_BYTES                                             \
+        0x2a, 0x02, 0x81, 0x0d, 0x98, 0x80, 0x37, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+#define IA_PD_PREFIX2_BYTES                                             \
+        0x2a, 0x02, 0x81, 0x0d, 0x98, 0x80, 0x37, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+#define DNS1_BYTES                                                      \
+        0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
+#define DNS2_BYTES                                                      \
+        0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
+#define SNTP1_BYTES                                                     \
+        0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03
+#define SNTP2_BYTES                                                     \
+        0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04
+#define NTP1_BYTES                                                      \
+        0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05
+#define NTP2_BYTES                                                      \
+        0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06
+#define CLIENT_ID_BYTES                                                 \
+        0x00, 0x02, 0x00, 0x00, 0xab, 0x11, 0x61, 0x77, 0x40, 0xde, 0x13, 0x42, 0xc3, 0xa2
+#define SERVER_ID_BYTES                                                 \
+        0x00, 0x01, 0x00, 0x01, 0x19, 0x40, 0x5c, 0x53, 0x78, 0x2b, 0xcb, 0xb3, 0x6d, 0x53
+
+static const struct in6_addr local_address =
+        { { { 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, } } };
+static const struct in6_addr mcast_address =
+        IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT;
+static const struct in6_addr ia_na_address1 = { { { IA_NA_ADDRESS1_BYTES } } };
+static const struct in6_addr ia_na_address2 = { { { IA_NA_ADDRESS2_BYTES } } };
+static const struct in6_addr ia_pd_prefix1 = { { { IA_PD_PREFIX1_BYTES } } };
+static const struct in6_addr ia_pd_prefix2 = { { { IA_PD_PREFIX2_BYTES } } };
+static const struct in6_addr dns1 = { { { DNS1_BYTES } } };
+static const struct in6_addr dns2 = { { { DNS2_BYTES } } };
+static const struct in6_addr sntp1 = { { { SNTP1_BYTES } } };
+static const struct in6_addr sntp2 = { { { SNTP2_BYTES } } };
+static const struct in6_addr ntp1 = { { { NTP1_BYTES } } };
+static const struct in6_addr ntp2 = { { { NTP2_BYTES } } };
+static const uint8_t client_id[] = { CLIENT_ID_BYTES };
+static const uint8_t server_id[] = { SERVER_ID_BYTES };
+static const struct ether_addr mac = {
+        .ether_addr_octet = { 'A', 'B', 'C', '1', '2', '3' },
 };
-
-static sd_event_source *hangcheck;
-static int test_dhcp_fd[2];
+static int test_fd[2] = PIPE_EBADF;
 static int test_ifindex = 42;
-static int test_client_message_num;
-static be32_t test_iaid = 0;
-static uint8_t test_duid[14] = { };
+static unsigned test_client_sent_message_count = 0;
+static sd_dhcp6_client *client_ref = NULL;
 
-static int test_client_basic(sd_event *e) {
-        sd_dhcp6_client *client;
+TEST(client_basic) {
+        _cleanup_(sd_dhcp6_client_unrefp) sd_dhcp6_client *client = NULL;
         int v;
 
-        log_debug("/* %s */", __func__);
-
         assert_se(sd_dhcp6_client_new(&client) >= 0);
         assert_se(client);
 
-        assert_se(sd_dhcp6_client_attach_event(client, e, 0) >= 0);
-
         assert_se(sd_dhcp6_client_set_ifindex(client, 15) == 0);
-        assert_se(sd_dhcp6_client_set_ifindex(client, -42) == -EINVAL);
-        assert_se(sd_dhcp6_client_set_ifindex(client, -1) == -EINVAL);
         assert_se(sd_dhcp6_client_set_ifindex(client, 42) >= 0);
 
-        assert_se(sd_dhcp6_client_set_mac(client, (const uint8_t *) &mac_addr,
-                                          sizeof (mac_addr),
-                                          ARPHRD_ETHER) >= 0);
+        assert_se(sd_dhcp6_client_set_mac(client, mac.ether_addr_octet, sizeof(mac), ARPHRD_ETHER) >= 0);
 
         assert_se(sd_dhcp6_client_set_fqdn(client, "host") == 1);
         assert_se(sd_dhcp6_client_set_fqdn(client, "host.domain") == 1);
@@ -63,12 +96,16 @@
         assert_se(sd_dhcp6_client_set_fqdn(client, "~host") == -EINVAL);
         assert_se(sd_dhcp6_client_set_fqdn(client, "~host.domain") == -EINVAL);
 
-        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_CLIENTID) == 0);
-        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DNS_SERVERS) == -EEXIST);
-        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NTP_SERVER) == -EEXIST);
-        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_SNTP_SERVERS) == -EEXIST);
-        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DOMAIN_LIST) == -EEXIST);
-        assert_se(sd_dhcp6_client_set_request_option(client, 10) == 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_CLIENTID) == -EINVAL);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DNS_SERVER) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NTP_SERVER) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_SNTP_SERVER) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DOMAIN) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, 10) == -EINVAL);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NIS_SERVER) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NISP_SERVER) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NIS_SERVER) == -EEXIST);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NISP_SERVER) == -EEXIST);
 
         assert_se(sd_dhcp6_client_set_information_request(client, 1) >= 0);
         v = 0;
@@ -103,59 +140,46 @@
         assert_se(sd_dhcp6_client_set_callback(client, NULL, NULL) >= 0);
 
         assert_se(sd_dhcp6_client_detach_event(client) >= 0);
-        assert_se(!sd_dhcp6_client_unref(client));
-
-        return 0;
 }
 
-static int test_parse_domain(sd_event *e) {
+TEST(parse_domain) {
+        _cleanup_free_ char *domain = NULL;
+        _cleanup_strv_free_ char **list = NULL;
         uint8_t *data;
-        char *domain;
-        char **list;
-        int r;
-
-        log_debug("/* %s */", __func__);
 
         data = (uint8_t []) { 7, 'e', 'x', 'a', 'm', 'p', 'l', 'e', 3, 'c', 'o', 'm', 0 };
-        r = dhcp6_option_parse_domainname(data, 13, &domain);
-        assert_se(r == 0);
+        assert_se(dhcp6_option_parse_domainname(data, 13, &domain) >= 0);
         assert_se(domain);
         assert_se(streq(domain, "example.com"));
-        free(domain);
+        domain = mfree(domain);
 
         data = (uint8_t []) { 4, 't', 'e', 's', 't' };
-        r = dhcp6_option_parse_domainname(data, 5, &domain);
-        assert_se(r == 0);
+        assert_se(dhcp6_option_parse_domainname(data, 5, &domain) >= 0);
         assert_se(domain);
         assert_se(streq(domain, "test"));
-        free(domain);
+        domain = mfree(domain);
 
         data = (uint8_t []) { 0 };
-        r = dhcp6_option_parse_domainname(data, 1, &domain);
-        assert_se(r < 0);
+        assert_se(dhcp6_option_parse_domainname(data, 1, &domain) < 0);
 
         data = (uint8_t []) { 7, 'e', 'x', 'a', 'm', 'p', 'l', 'e', 3, 'c', 'o', 'm', 0,
                               6, 'f', 'o', 'o', 'b', 'a', 'r', 0 };
-        r = dhcp6_option_parse_domainname_list(data, 21, &list);
-        assert_se(r == 2);
+        assert_se(dhcp6_option_parse_domainname_list(data, 21, &list) >= 0);
         assert_se(list);
         assert_se(streq(list[0], "example.com"));
         assert_se(streq(list[1], "foobar"));
-        strv_free(list);
+        assert_se(!list[2]);
+        list = strv_free(list);
 
         data = (uint8_t []) { 1, 'a', 0, 20, 'b', 'c' };
-        r = dhcp6_option_parse_domainname_list(data, 6, &list);
-        assert_se(r < 0);
+        assert_se(dhcp6_option_parse_domainname_list(data, 6, &list) < 0);
 
         data = (uint8_t []) { 0 , 0 };
-        r = dhcp6_option_parse_domainname_list(data, 2, &list);
-        assert_se(r < 0);
-
-        return 0;
+        assert_se(dhcp6_option_parse_domainname_list(data, 2, &list) < 0);
 }
 
-static int test_option(sd_event *e) {
-        uint8_t packet[] = {
+TEST(option) {
+        static const uint8_t packet[] = {
                 'F', 'O', 'O', 'H', 'O', 'G', 'E',
                 0x00, SD_DHCP6_OPTION_ORO, 0x00, 0x07,
                 'A', 'B', 'C', 'D', 'E', 'F', 'G',
@@ -163,7 +187,7 @@
                 '1', '2', '3', '4', '5', '6', '7', '8', '9',
                 'B', 'A', 'R',
         };
-        uint8_t result[] = {
+        static const uint8_t result[] = {
                 'F', 'O', 'O', 'H', 'O', 'G', 'E',
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -171,12 +195,9 @@
                 'B', 'A', 'R',
         };
         _cleanup_free_ uint8_t *buf = NULL;
-        size_t offset, pos, optlen, outlen = sizeof(result);
+        size_t offset, pos, optlen;
         const uint8_t *optval;
         uint16_t optcode;
-        uint8_t *out;
-
-        log_debug("/* %s */", __func__);
 
         assert_se(sizeof(packet) == sizeof(result));
 
@@ -205,15 +226,10 @@
         assert_se(optlen == 7);
         assert_se(optval == packet + 11);
 
+        free(buf);
+        assert_se(buf = memdup(result, sizeof(result)));
         pos = 7;
-        outlen -= 7;
-        out = &result[pos];
-
-        assert_se(dhcp6_option_append(&out, &outlen, optcode, optlen, optval) >= 0);
-
-        pos += 4 + optlen;
-        assert_se(out == &result[pos]);
-        assert_se(*out == 0x00);
+        assert_se(dhcp6_option_append(&buf, &pos, optcode, optlen, optval) >= 0);
 
         assert_se(dhcp6_option_parse(packet, sizeof(packet), &offset, &optcode, &optlen, &optval) >= 0);
 
@@ -221,18 +237,12 @@
         assert_se(optlen == 9);
         assert_se(optval == packet + 22);
 
-        assert_se(dhcp6_option_append(&out, &outlen, optcode, optlen, optval) >= 0);
+        assert_se(dhcp6_option_append(&buf, &pos, optcode, optlen, optval) >= 0);
 
-        pos += 4 + optlen;
-        assert_se(out == &result[pos]);
-        assert_se(*out == 'B');
-
-        assert_se(memcmp(packet, result, sizeof(packet)) == 0);
-
-        return 0;
+        assert_se(memcmp(packet, buf, sizeof(packet)) == 0);
 }
 
-static int test_option_status(sd_event *e) {
+TEST(option_status) {
         uint8_t option1[] = {
                 /* IA NA */
                 0x00, 0x03, 0x00, 0x12, 0x1a, 0x1d, 0x1a, 0x1d,
@@ -249,7 +259,7 @@
                 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
                 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
                 0x01, 0x02, 0x03, 0x04, 0x0a, 0x0b, 0x0c, 0x0d,
-                /* status option */
+                /* IA address status option */
                 0x00, 0x0d, 0x00, 0x02, 0x00, 0x01,
         };
         static const uint8_t option3[] = {
@@ -261,7 +271,7 @@
                 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
                 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
                 0x01, 0x02, 0x03, 0x04, 0x0a, 0x0b, 0x0c, 0x0d,
-                /* status option */
+                /* IA address status option */
                 0x00, 0x0d, 0x00, 0x08, 0x00, 0x00, 'f',  'o',
                 'o',  'b',  'a',  'r',
         };
@@ -275,7 +285,7 @@
                 0x80, 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe,
                 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x00,
-                /* status option */
+                /* PD prefix status option */
                 0x00, 0x0d, 0x00, 0x02, 0x00, 0x00,
         };
         static const uint8_t option5[] = {
@@ -288,7 +298,7 @@
                 0x80, 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe,
                 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x00,
-                /* status option */
+                /* PD prefix status option */
                 0x00, 0x0d, 0x00, 0x02, 0x00, 0x00,
                 /* IA PD Prefix #2 */
                 0x00, 0x1a, 0x00, 0x1f,
@@ -296,730 +306,806 @@
                 0x80, 0x20, 0x01, 0x0d, 0xb8, 0xc0, 0x0l, 0xd0,
                 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x00,
+                /* PD prefix status option */
                 0x00, 0x0d, 0x00, 0x02, 0x00, 0x00,
         };
+        _cleanup_(dhcp6_ia_freep) DHCP6IA *ia = NULL;
         DHCP6Option *option;
-        DHCP6IA ia, pd;
         be32_t iaid;
-        int r = 0;
-
-        log_debug("/* %s */", __func__);
+        int r;
 
         memcpy(&iaid, option1 + 4, sizeof(iaid));
 
-        zero(ia);
-        option = (DHCP6Option *)option1;
+        option = (DHCP6Option*) option1;
         assert_se(sizeof(option1) == sizeof(DHCP6Option) + be16toh(option->len));
 
-        r = dhcp6_option_parse_ia(NULL, option, 0, &ia, NULL);
+        r = dhcp6_option_parse_ia(NULL, 0, be16toh(option->code), be16toh(option->len), option->data, &ia);
         assert_se(r == -ENOANO);
 
-        r = dhcp6_option_parse_ia(NULL, option, iaid, &ia, NULL);
-        assert_se(r == 0);
-        assert_se(ia.addresses == NULL);
+        r = dhcp6_option_parse_ia(NULL, iaid, be16toh(option->code), be16toh(option->len), option->data, &ia);
+        assert_se(r == -EINVAL);
 
         option->len = htobe16(17);
-        r = dhcp6_option_parse_ia(NULL, option, iaid, &ia, NULL);
-        assert_se(r == -ENOBUFS);
-        assert_se(ia.addresses == NULL);
+        r = dhcp6_option_parse_ia(NULL, iaid, be16toh(option->code), be16toh(option->len), option->data, &ia);
+        assert_se(r == -EBADMSG);
 
         option->len = htobe16(sizeof(DHCP6Option));
-        r = dhcp6_option_parse_ia(NULL, option, iaid, &ia, NULL);
-        assert_se(r == -ENOBUFS);
-        assert_se(ia.addresses == NULL);
+        r = dhcp6_option_parse_ia(NULL, iaid, be16toh(option->code), be16toh(option->len), option->data, &ia);
+        assert_se(r == -EBADMSG);
 
-        zero(ia);
-        option = (DHCP6Option *)option2;
+        option = (DHCP6Option*) option2;
         assert_se(sizeof(option2) == sizeof(DHCP6Option) + be16toh(option->len));
+        r = dhcp6_option_parse_ia(NULL, iaid, be16toh(option->code), be16toh(option->len), option->data, &ia);
+        assert_se(r == -ENODATA);
 
-        r = dhcp6_option_parse_ia(NULL, option, iaid, &ia, NULL);
-        assert_se(r >= 0);
-        assert_se(ia.addresses == NULL);
-
-        zero(ia);
-        option = (DHCP6Option *)option3;
+        option = (DHCP6Option*) option3;
         assert_se(sizeof(option3) == sizeof(DHCP6Option) + be16toh(option->len));
-
-        r = dhcp6_option_parse_ia(NULL, option, iaid, &ia, NULL);
+        r = dhcp6_option_parse_ia(NULL, iaid, be16toh(option->code), be16toh(option->len), option->data, &ia);
         assert_se(r >= 0);
-        assert_se(ia.addresses != NULL);
-        dhcp6_lease_free_ia(&ia);
+        assert_se(ia);
+        assert_se(ia->addresses);
+        ia = dhcp6_ia_free(ia);
 
-        zero(pd);
-        option = (DHCP6Option *)option4;
+        option = (DHCP6Option*) option4;
         assert_se(sizeof(option4) == sizeof(DHCP6Option) + be16toh(option->len));
-
-        r = dhcp6_option_parse_ia(NULL, option, iaid, &pd, NULL);
+        r = dhcp6_option_parse_ia(NULL, iaid, be16toh(option->code), be16toh(option->len), option->data, &ia);
         assert_se(r >= 0);
-        assert_se(pd.addresses != NULL);
-        assert_se(memcmp(&pd.ia_pd.id, &option4[4], 4) == 0);
-        assert_se(memcmp(&pd.ia_pd.lifetime_t1, &option4[8], 4) == 0);
-        assert_se(memcmp(&pd.ia_pd.lifetime_t2, &option4[12], 4) == 0);
-        dhcp6_lease_free_ia(&pd);
+        assert_se(ia);
+        assert_se(ia->addresses);
+        assert_se(memcmp(&ia->header.id, &option4[4], 4) == 0);
+        assert_se(memcmp(&ia->header.lifetime_t1, &option4[8], 4) == 0);
+        assert_se(memcmp(&ia->header.lifetime_t2, &option4[12], 4) == 0);
+        ia = dhcp6_ia_free(ia);
 
-        zero(pd);
-        option = (DHCP6Option *)option5;
+        option = (DHCP6Option*) option5;
         assert_se(sizeof(option5) == sizeof(DHCP6Option) + be16toh(option->len));
-
-        r = dhcp6_option_parse_ia(NULL, option, iaid, &pd, NULL);
+        r = dhcp6_option_parse_ia(NULL, iaid, be16toh(option->code), be16toh(option->len), option->data, &ia);
         assert_se(r >= 0);
-        assert_se(pd.addresses != NULL);
-        dhcp6_lease_free_ia(&pd);
-
-        return 0;
+        assert_se(ia);
+        assert_se(ia->addresses);
+        ia = dhcp6_ia_free(ia);
 }
 
-static uint8_t msg_advertise[198] = {
-        0x02, 0x0f, 0xb4, 0xe5, 0x00, 0x01, 0x00, 0x0e,
-        0x00, 0x01, 0x00, 0x01, 0x1a, 0x6b, 0xf3, 0x30,
-        0x3c, 0x97, 0x0e, 0xcf, 0xa3, 0x7d, 0x00, 0x03,
-        0x00, 0x5e, 0x0e, 0xcf, 0xa3, 0x7d, 0x00, 0x00,
-        0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x05,
-        0x00, 0x18, 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad,
-        0xbe, 0xef, 0x78, 0xee, 0x1c, 0xf3, 0x09, 0x3c,
-        0x55, 0xad, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00,
-        0x00, 0xb4, 0x00, 0x0d, 0x00, 0x32, 0x00, 0x00,
-        0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28,
-        0x65, 0x73, 0x29, 0x20, 0x72, 0x65, 0x6e, 0x65,
-        0x77, 0x65, 0x64, 0x2e, 0x20, 0x47, 0x72, 0x65,
-        0x65, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x66,
-        0x72, 0x6f, 0x6d, 0x20, 0x70, 0x6c, 0x61, 0x6e,
-        0x65, 0x74, 0x20, 0x45, 0x61, 0x72, 0x74, 0x68,
-        0x00, 0x17, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8,
-        0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x0b,
-        0x03, 0x6c, 0x61, 0x62, 0x05, 0x69, 0x6e, 0x74,
-        0x72, 0x61, 0x00, 0x00, 0x1f, 0x00, 0x10, 0x20,
-        0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-        0x02, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x19,
-        0x40, 0x5c, 0x53, 0x78, 0x2b, 0xcb, 0xb3, 0x6d,
-        0x53, 0x00, 0x07, 0x00, 0x01, 0x00
-};
-
-static uint8_t msg_reply[191] = {
-        0x07, 0xf7, 0x4e, 0x57, 0x00, 0x02, 0x00, 0x0e,
-        0x00, 0x01, 0x00, 0x01, 0x19, 0x40, 0x5c, 0x53,
-        0x78, 0x2b, 0xcb, 0xb3, 0x6d, 0x53, 0x00, 0x01,
-        0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x1a, 0x6b,
-        0xf3, 0x30, 0x3c, 0x97, 0x0e, 0xcf, 0xa3, 0x7d,
-        0x00, 0x03, 0x00, 0x4a, 0x0e, 0xcf, 0xa3, 0x7d,
-        0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78,
-        0x00, 0x05, 0x00, 0x18, 0x20, 0x01, 0x0d, 0xb8,
-        0xde, 0xad, 0xbe, 0xef, 0x78, 0xee, 0x1c, 0xf3,
-        0x09, 0x3c, 0x55, 0xad, 0x00, 0x00, 0x00, 0x96,
-        0x00, 0x00, 0x00, 0xb4, 0x00, 0x0d, 0x00, 0x1e,
-        0x00, 0x00, 0x41, 0x6c, 0x6c, 0x20, 0x61, 0x64,
-        0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20,
-        0x77, 0x65, 0x72, 0x65, 0x20, 0x61, 0x73, 0x73,
-        0x69, 0x67, 0x6e, 0x65, 0x64, 0x2e, 0x00, 0x17,
-        0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad,
-        0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x01, 0x00, 0x18, 0x00, 0x0b, 0x03, 0x6c,
-        0x61, 0x62, 0x05, 0x69, 0x6e, 0x74, 0x72, 0x61,
-        0x00, 0x00, 0x1f, 0x00, 0x10, 0x20, 0x01, 0x0d,
-        0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x27, 0x00,
-        0x0e, 0x01, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e,
-        0x74, 0x05, 0x69, 0x6e, 0x74, 0x72, 0x61
-};
-
-static uint8_t fqdn_wire[16] = {
-        0x04, 'h', 'o', 's', 't', 0x03, 'l', 'a', 'b',
-        0x05, 'i', 'n', 't', 'r', 'a', 0x00
-};
-
-static int test_advertise_option(sd_event *e) {
+TEST(client_parse_message_issue_22099) {
+        static const uint8_t msg[] = {
+                /* Message type */
+                DHCP6_MESSAGE_REPLY,
+                /* Transaction ID */
+                0x7c, 0x4c, 0x16,
+                /* Rapid commit */
+                0x00, SD_DHCP6_OPTION_RAPID_COMMIT, 0x00, 0x00,
+                /* NTP servers */
+                0x00, SD_DHCP6_OPTION_NTP_SERVER, 0x00, 0x14,
+                /* NTP server (broken sub option and sub option length) */
+                0x01, 0x00, 0x10, 0x00,
+                0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x15, 0xc8, 0xff, 0xfe, 0xef, 0x1e, 0x4e,
+                /* Client ID */
+                0x00, SD_DHCP6_OPTION_CLIENTID, 0x00, 0x0e,
+                0x00, 0x02, /* DUID-EN */
+                0x00, 0x00, 0xab, 0x11, /* pen */
+                0x5c, 0x6b, 0x90, 0xec, 0xda, 0x95, 0x15, 0x45, /* id */
+                /* Server ID */
+                0x00, SD_DHCP6_OPTION_SERVERID, 0x00, 0x0a,
+                0x00, 0x03, /* DUID-LL */
+                0x00, 0x01, /* htype */
+                0xdc, 0x15, 0xc8, 0xef, 0x1e, 0x4e, /* haddr */
+                /* preference */
+                0x00, SD_DHCP6_OPTION_PREFERENCE, 0x00, 0x01,
+                0x00,
+                /* DNS servers */
+                0x00, SD_DHCP6_OPTION_DNS_SERVER, 0x00, 0x10,
+                0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x15, 0xc8, 0xff, 0xfe, 0xef, 0x1e, 0x4e,
+                /* v6 pcp server */
+                0x00, SD_DHCP6_OPTION_V6_PCP_SERVER, 0x00, 0x10,
+                0x2a, 0x02, 0x81, 0x0d, 0x98, 0x80, 0x37, 0x00, 0xde, 0x15, 0xc8, 0xff, 0xfe, 0xef, 0x1e, 0x4e,
+                /* IA_NA */
+                0x00, SD_DHCP6_OPTION_IA_NA, 0x00, 0x28,
+                0xcc, 0x59, 0x11, 0x7b, /* iaid */
+                0x00, 0x00, 0x07, 0x08, /* lifetime T1 */
+                0x00, 0x00, 0x0b, 0x40, /* lifetime T2 */
+                /* IA_NA (iaaddr suboption) */
+                0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+                0x2a, 0x02, 0x81, 0x0d, 0x98, 0x80, 0x37, 0x00, 0x6a, 0x05, 0xca, 0xff, 0xfe, 0xf1, 0x51, 0x53, /* address */
+                0x00, 0x00, 0x0e, 0x10, /* preferred lifetime */
+                0x00, 0x00, 0x1c, 0x20, /* valid lifetime */
+                /* IA_PD */
+                0x00, SD_DHCP6_OPTION_IA_PD, 0x00, 0x29,
+                0xcc, 0x59, 0x11, 0x7b, /* iaid */
+                0x00, 0x00, 0x07, 0x08, /* lifetime T1 */
+                0x00, 0x00, 0x0b, 0x40, /* lifetime T2 */
+                /* IA_PD (iaprefix suboption) */
+                0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+                0x00, 0x00, 0x0e, 0x10, /* preferred lifetime */
+                0x00, 0x00, 0x1c, 0x20, /* valid lifetime */
+                0x3a, /* prefixlen */
+                0x2a, 0x02, 0x81, 0x0d, 0x98, 0x80, 0x37, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* prefix */
+        };
+        static const uint8_t duid[] = {
+                0x00, 0x00, 0xab, 0x11, 0x5c, 0x6b, 0x90, 0xec, 0xda, 0x95, 0x15, 0x45,
+        };
+        _cleanup_(sd_dhcp6_client_unrefp) sd_dhcp6_client *client = NULL;
         _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
-        DHCP6Message *advertise = (DHCP6Message *)msg_advertise;
-        size_t len = sizeof(msg_advertise) - sizeof(DHCP6Message), pos = 0;
-        uint32_t lt_pref, lt_valid;
-        bool opt_clientid = false;
-        const struct in6_addr *addrs;
-        uint8_t preference = 255;
-        struct in6_addr addr;
-        char **domains;
-        uint8_t *opt;
-        int r;
-        be32_t val;
 
+        assert_se(sd_dhcp6_client_new(&client) >= 0);
+        assert_se(sd_dhcp6_client_set_iaid(client, 0xcc59117b) >= 0);
+        assert_se(sd_dhcp6_client_set_duid(client, 2, duid, sizeof(duid)) >= 0);
+
+        assert_se(dhcp6_lease_new_from_message(client, (const DHCP6Message*) msg, sizeof(msg), NULL, NULL, &lease) >= 0);
+}
+
+TEST(client_parse_message_issue_24002) {
+        static const uint8_t msg[] = {
+                /* Message Type */
+                0x07,
+                /* Transaction ID */
+                0x0e, 0xa5, 0x7c,
+                /* Client ID */
+                0x00, SD_DHCP6_OPTION_CLIENTID, 0x00, 0x0e,
+                0x00, 0x02, /* DUID-EN */
+                0x00, 0x00, 0xab, 0x11, /* pen */
+                0x5c, 0x6b, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, /* id */
+                /* Server ID */
+                0x00, 0x02, 0x00, 0x1a,
+                0x00, 0x02, 0x00, 0x00, 0x05, 0x83, 0x30, 0x63, 0x3a, 0x38, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55,
+                0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
+                /* IA_PD */
+                0x00, 0x19, 0x00, 0x29,
+                0xaa, 0xbb, 0xcc, 0xdd, /* iaid */
+                0x00, 0x00, 0x03, 0x84, /* lifetime (T1) */
+                0x00, 0x00, 0x05, 0xa0, /* lifetime (T2) */
+                /* IA_PD (iaprefix suboption) */
+                0x00, 0x1a, 0x00, 0x19,
+                0x00, 0x00, 0x07, 0x08, /* preferred lifetime */
+                0x00, 0x00, 0x38, 0x40, /* valid lifetime */
+                0x38, /* prefixlen */
+                0x20, 0x03, 0x00, 0xff, 0xaa, 0xbb, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* prefix */
+                /* Rapid commit */
+                0x00, 0x0e, 0x00, 0x00,
+        };
+        static const uint8_t duid[] = {
+                0x00, 0x00, 0xab, 0x11, 0x5c, 0x6b, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
+        };
+        _cleanup_(sd_dhcp6_client_unrefp) sd_dhcp6_client *client = NULL;
+        _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
+
+        assert_se(sd_dhcp6_client_new(&client) >= 0);
+        assert_se(sd_dhcp6_client_set_iaid(client, 0xaabbccdd) >= 0);
+        assert_se(sd_dhcp6_client_set_duid(client, 2, duid, sizeof(duid)) >= 0);
+
+        assert_se(dhcp6_lease_new_from_message(client, (const DHCP6Message*) msg, sizeof(msg), NULL, NULL, &lease) >= 0);
+}
+
+static const uint8_t msg_information_request[] = {
+        /* Message type */
+        DHCP6_MESSAGE_INFORMATION_REQUEST,
+        /* Transaction ID */
+        0x0f, 0xb4, 0xe5,
+        /* MUD URL */
+        /* ORO */
+        0x00, SD_DHCP6_OPTION_ORO, 0x00, 0x0c,
+        0x00, SD_DHCP6_OPTION_DNS_SERVER,
+        0x00, SD_DHCP6_OPTION_DOMAIN,
+        0x00, SD_DHCP6_OPTION_SNTP_SERVER,
+        0x00, SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME,
+        0x00, SD_DHCP6_OPTION_NTP_SERVER,
+        0x00, SD_DHCP6_OPTION_INF_MAX_RT,
+        /* Client ID */
+        0x00, SD_DHCP6_OPTION_CLIENTID, 0x00, 0x0e,
+        CLIENT_ID_BYTES,
+        /* Extra options */
+        /* Elapsed time */
+        0x00, SD_DHCP6_OPTION_ELAPSED_TIME, 0x00, 0x02,
+        0x00, 0x00,
+};
+
+static const uint8_t msg_solicit[] = {
+        /* Message type */
+        DHCP6_MESSAGE_SOLICIT,
+        /* Transaction ID */
+        0x0f, 0xb4, 0xe5,
+        /* Rapid commit */
+        0x00, SD_DHCP6_OPTION_RAPID_COMMIT, 0x00, 0x00,
+        /* IA_NA */
+        0x00, SD_DHCP6_OPTION_IA_NA, 0x00, 0x0c,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x00, /* lifetime T2 */
+        /* IA_PD */
+        0x00, SD_DHCP6_OPTION_IA_PD, 0x00, 0x0c,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x00, /* lifetime T2 */
+        /* Client FQDN */
+        0x00, SD_DHCP6_OPTION_CLIENT_FQDN, 0x00, 0x11,
+        DHCP6_FQDN_FLAG_S,
+        0x04, 'h', 'o', 's', 't', 0x03, 'l', 'a', 'b', 0x05, 'i', 'n', 't', 'r', 'a', 0x00,
+        /* User Class */
+        /* Vendor Class */
+        /* Vendor Options */
+        /* MUD URL */
+        /* ORO */
+        0x00, SD_DHCP6_OPTION_ORO, 0x00, 0x0a,
+        0x00, SD_DHCP6_OPTION_DNS_SERVER,
+        0x00, SD_DHCP6_OPTION_DOMAIN,
+        0x00, SD_DHCP6_OPTION_SNTP_SERVER,
+        0x00, SD_DHCP6_OPTION_NTP_SERVER,
+        0x00, SD_DHCP6_OPTION_SOL_MAX_RT,
+        /* Client ID */
+        0x00, SD_DHCP6_OPTION_CLIENTID, 0x00, 0x0e,
+        CLIENT_ID_BYTES,
+        /* Extra options */
+        /* Elapsed time */
+        0x00, SD_DHCP6_OPTION_ELAPSED_TIME, 0x00, 0x02,
+        0x00, 0x00,
+};
+
+static const uint8_t msg_request[] = {
+        /* Message type */
+        DHCP6_MESSAGE_REQUEST,
+        /* Transaction ID */
+        0x00, 0x00, 0x00,
+        /* Server ID */
+        0x00, SD_DHCP6_OPTION_SERVERID, 0x00, 0x0e,
+        SERVER_ID_BYTES,
+        /* IA_NA */
+        0x00, SD_DHCP6_OPTION_IA_NA, 0x00, 0x44,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x00, /* lifetime T2 */
+        /* IA_NA (IAADDR suboption) */
+        0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+        IA_NA_ADDRESS1_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0x00, /* valid lifetime */
+        /* IA_NA (IAADDR suboption) */
+        0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+        IA_NA_ADDRESS2_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0x00, /* valid lifetime */
+        /* IA_PD */
+        0x00, SD_DHCP6_OPTION_IA_PD, 0x00, 0x46,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x00, /* lifetime T2 */
+        /* IA_PD (IA_PD_PREFIX suboption) */
+        0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+        0x00, 0x00, 0x00, 0x00, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0x00, /* valid lifetime */
+        0x40, /* prefixlen */
+        IA_PD_PREFIX1_BYTES,
+        /* IA_PD (IA_PD_PREFIX suboption) */
+        0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+        0x00, 0x00, 0x00, 0x00, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0x00, /* valid lifetime */
+        0x40, /* prefixlen */
+        IA_PD_PREFIX2_BYTES,
+        /* Client FQDN */
+        0x00, SD_DHCP6_OPTION_CLIENT_FQDN, 0x00, 0x11,
+        DHCP6_FQDN_FLAG_S,
+        0x04, 'h', 'o', 's', 't', 0x03, 'l', 'a', 'b', 0x05, 'i', 'n', 't', 'r', 'a', 0x00,
+        /* User Class */
+        /* Vendor Class */
+        /* Vendor Options */
+        /* MUD URL */
+        /* ORO */
+        0x00, SD_DHCP6_OPTION_ORO, 0x00, 0x08,
+        0x00, SD_DHCP6_OPTION_DNS_SERVER,
+        0x00, SD_DHCP6_OPTION_DOMAIN,
+        0x00, SD_DHCP6_OPTION_SNTP_SERVER,
+        0x00, SD_DHCP6_OPTION_NTP_SERVER,
+        /* Client ID */
+        0x00, SD_DHCP6_OPTION_CLIENTID, 0x00, 0x0e,
+        CLIENT_ID_BYTES,
+        /* Extra options */
+        /* Elapsed time */
+        0x00, SD_DHCP6_OPTION_ELAPSED_TIME, 0x00, 0x02,
+        0x00, 0x00,
+};
+
+/* RFC 3315 section 18.1.6. The DHCP6 Release message must include:
+    - transaction id
+    - server identifier
+    - client identifier
+    - all released IA with addresses included
+    - elapsed time (required for all messages).
+    All other options aren't required. */
+static const uint8_t msg_release[] = {
+        /* Message type */
+        DHCP6_MESSAGE_RELEASE,
+        /* Transaction ID */
+        0x00, 0x00, 0x00,
+        /* Server ID */
+        0x00, SD_DHCP6_OPTION_SERVERID, 0x00, 0x0e,
+        SERVER_ID_BYTES,
+        /* IA_NA */
+        0x00, SD_DHCP6_OPTION_IA_NA, 0x00, 0x44,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x00, /* lifetime T2 */
+        /* IA_NA (IAADDR suboption) */
+        0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+        IA_NA_ADDRESS1_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0x00, /* valid lifetime */
+        /* IA_NA (IAADDR suboption) */
+        0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+        IA_NA_ADDRESS2_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0x00, /* valid lifetime */
+        /* IA_PD */
+        0x00, SD_DHCP6_OPTION_IA_PD, 0x00, 0x46,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x00, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x00, /* lifetime T2 */
+        /* IA_PD (IA_PD_PREFIX suboption) */
+        0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+        0x00, 0x00, 0x00, 0x00, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0x00, /* valid lifetime */
+        0x40, /* prefixlen */
+        IA_PD_PREFIX1_BYTES,
+        /* IA_PD (IA_PD_PREFIX suboption) */
+        0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+        0x00, 0x00, 0x00, 0x00, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0x00, /* valid lifetime */
+        0x40, /* prefixlen */
+        IA_PD_PREFIX2_BYTES,
+        /* Client ID */
+        0x00, SD_DHCP6_OPTION_CLIENTID, 0x00, 0x0e,
+        CLIENT_ID_BYTES,
+        /* Extra options */
+        /* Elapsed time */
+        0x00, SD_DHCP6_OPTION_ELAPSED_TIME, 0x00, 0x02,
+        0x00, 0x00,
+};
+
+static const uint8_t msg_reply[] = {
+        /* Message type */
+        DHCP6_MESSAGE_REPLY,
+        /* Transaction ID */
+        0x0f, 0xb4, 0xe5,
+        /* Client ID */
+        0x00, SD_DHCP6_OPTION_CLIENTID, 0x00, 0x0e,
+        CLIENT_ID_BYTES,
+        /* Server ID */
+        0x00, SD_DHCP6_OPTION_SERVERID, 0x00, 0x0e,
+        SERVER_ID_BYTES,
+        /* Rapid commit */
+        0x00, SD_DHCP6_OPTION_RAPID_COMMIT, 0x00, 0x01,
+        0x00,
+        /* IA_NA */
+        0x00, SD_DHCP6_OPTION_IA_NA, 0x00, 0x66,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x50, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x78, /* lifetime T2 */
+        /* IA_NA (IAADDR suboption) */
+        0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+        IA_NA_ADDRESS2_BYTES,
+        0x00, 0x00, 0x00, 0x96, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0xb4, /* valid lifetime */
+        /* IA_NA (IAADDR suboption) */
+        0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+        IA_NA_ADDRESS1_BYTES,
+        0x00, 0x00, 0x00, 0x96, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0xb4, /* valid lifetime */
+        /* IA_NA (status code suboption) */
+        0x00, SD_DHCP6_OPTION_STATUS_CODE, 0x00, 0x1e,
+        0x00, 0x00, /* status code */
+        0x41, 0x6c, 0x6c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x77, 0x65,
+        0x72, 0x65, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x2e, /* status message */
+        /* IA_PD */
+        0x00, SD_DHCP6_OPTION_IA_PD, 0x00, 0x46,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x50, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x78, /* lifetime T2 */
+        /* IA_PD (IA_PD_PREFIX suboption) */
+        0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+        0x00, 0x00, 0x00, 0x96, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0xb4, /* valid lifetime */
+        0x40, /* prefixlen */
+        IA_PD_PREFIX2_BYTES,
+        /* IA_PD (IA_PD_PREFIX suboption) */
+        0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+        0x00, 0x00, 0x00, 0x96, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0xb4, /* valid lifetime */
+        0x40, /* prefixlen */
+        IA_PD_PREFIX1_BYTES,
+        /* DNS servers */
+        0x00, SD_DHCP6_OPTION_DNS_SERVER, 0x00, 0x20,
+        DNS1_BYTES,
+        DNS2_BYTES,
+        /* SNTP servers */
+        0x00, SD_DHCP6_OPTION_SNTP_SERVER, 0x00, 0x20,
+        SNTP1_BYTES,
+        SNTP2_BYTES,
+        /* NTP servers */
+        0x00, SD_DHCP6_OPTION_NTP_SERVER, 0x00, 0x37,
+        /* NTP server (address suboption) */
+        0x00, DHCP6_NTP_SUBOPTION_SRV_ADDR, 0x00, 0x10,
+        NTP1_BYTES,
+        /* NTP server (address suboption) */
+        0x00, DHCP6_NTP_SUBOPTION_SRV_ADDR, 0x00, 0x10,
+        NTP2_BYTES,
+        /* NTP server (fqdn suboption) */
+        0x00, DHCP6_NTP_SUBOPTION_SRV_FQDN, 0x00, 0x0b,
+        0x03, 'n', 't', 'p', 0x05, 'i', 'n', 't', 'r', 'a', 0x00,
+        /* Domain list */
+        0x00, SD_DHCP6_OPTION_DOMAIN, 0x00, 0x0b,
+        0x03, 'l', 'a', 'b', 0x05, 'i', 'n', 't', 'r', 'a', 0x00,
+        /* Client FQDN */
+        0x00, SD_DHCP6_OPTION_CLIENT_FQDN, 0x00, 0x12,
+        0x01, 0x06, 'c', 'l', 'i', 'e', 'n', 't', 0x03, 'l', 'a', 'b', 0x05, 'i', 'n', 't', 'r', 'a',
+};
+
+static const uint8_t msg_advertise[] = {
+        /* Message type */
+        DHCP6_MESSAGE_ADVERTISE,
+        /* Transaction ID */
+        0x0f, 0xb4, 0xe5,
+        /* Client ID */
+        0x00, SD_DHCP6_OPTION_CLIENTID, 0x00, 0x0e,
+        CLIENT_ID_BYTES,
+        /* Server ID */
+        0x00, SD_DHCP6_OPTION_SERVERID, 0x00, 0x0e,
+        SERVER_ID_BYTES,
+        /* Preference */
+        0x00, SD_DHCP6_OPTION_PREFERENCE, 0x00, 0x01,
+        0xff,
+        /* IA_NA */
+        0x00, SD_DHCP6_OPTION_IA_NA, 0x00, 0x7a,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x50, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x78, /* lifetime T2 */
+        /* IA_NA (IAADDR suboption) */
+        0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+        IA_NA_ADDRESS2_BYTES, /* address */
+        0x00, 0x00, 0x00, 0x96, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0xb4, /* valid lifetime */
+        /* IA_NA (IAADDR suboption) */
+        0x00, SD_DHCP6_OPTION_IAADDR, 0x00, 0x18,
+        IA_NA_ADDRESS1_BYTES, /* address */
+        0x00, 0x00, 0x00, 0x96, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0xb4, /* valid lifetime */
+        /* IA_NA (status code suboption) */
+        0x00, SD_DHCP6_OPTION_STATUS_CODE, 0x00, 0x32,
+        0x00, 0x00, /* status code */
+        0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x65, 0x73, 0x29, 0x20, 0x72, 0x65, 0x6e, 0x65,
+        0x77, 0x65, 0x64, 0x2e, 0x20, 0x47, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x66,
+        0x72, 0x6f, 0x6d, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x20, 0x45, 0x61, 0x72, 0x74, 0x68, /* status message */
+        /* IA_PD */
+        0x00, SD_DHCP6_OPTION_IA_PD, 0x00, 0x46,
+        IA_ID_BYTES,
+        0x00, 0x00, 0x00, 0x50, /* lifetime T1 */
+        0x00, 0x00, 0x00, 0x78, /* lifetime T2 */
+        /* IA_PD (IA_PD_PREFIX suboption) */
+        0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+        0x00, 0x00, 0x00, 0x96, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0xb4, /* valid lifetime */
+        0x40, /* prefixlen */
+        IA_PD_PREFIX2_BYTES,
+        /* IA_PD (IA_PD_PREFIX suboption) */
+        0x00, SD_DHCP6_OPTION_IA_PD_PREFIX, 0x00, 0x19,
+        0x00, 0x00, 0x00, 0x96, /* preferred lifetime */
+        0x00, 0x00, 0x00, 0xb4, /* valid lifetime */
+        0x40, /* prefixlen */
+        IA_PD_PREFIX1_BYTES,
+        /* DNS servers */
+        0x00, SD_DHCP6_OPTION_DNS_SERVER, 0x00, 0x20,
+        DNS1_BYTES,
+        DNS2_BYTES,
+        /* SNTP servers */
+        0x00, SD_DHCP6_OPTION_SNTP_SERVER, 0x00, 0x20,
+        SNTP1_BYTES,
+        SNTP2_BYTES,
+        /* NTP servers */
+        0x00, SD_DHCP6_OPTION_NTP_SERVER, 0x00, 0x37,
+        /* NTP server (address suboption) */
+        0x00, DHCP6_NTP_SUBOPTION_SRV_ADDR, 0x00, 0x10,
+        NTP1_BYTES,
+        /* NTP server (address suboption) */
+        0x00, DHCP6_NTP_SUBOPTION_SRV_ADDR, 0x00, 0x10,
+        NTP2_BYTES,
+        /* NTP server (fqdn suboption) */
+        0x00, DHCP6_NTP_SUBOPTION_SRV_FQDN, 0x00, 0x0b,
+        0x03, 'n', 't', 'p', 0x05, 'i', 'n', 't', 'r', 'a', 0x00,
+        /* Domain list */
+        0x00, SD_DHCP6_OPTION_DOMAIN, 0x00, 0x0b,
+        0x03, 'l', 'a', 'b', 0x05, 'i', 'n', 't', 'r', 'a', 0x00,
+        /* Client FQDN */
+        0x00, SD_DHCP6_OPTION_CLIENT_FQDN, 0x00, 0x12,
+        0x01, 0x06, 'c', 'l', 'i', 'e', 'n', 't', 0x03, 'l', 'a', 'b', 0x05, 'i', 'n', 't', 'r', 'a',
+};
+
+static void test_client_verify_information_request(const DHCP6Message *msg, size_t len) {
         log_debug("/* %s */", __func__);
 
-        assert_se(len >= sizeof(DHCP6Message));
+        assert_se(len == sizeof(msg_information_request));
+        /* The elapsed time value is not deterministic. Skip it. */
+        assert_se(memcmp(msg, msg_information_request, len - sizeof(be16_t)) == 0);
+}
 
-        assert_se(dhcp6_lease_new(&lease) >= 0);
+static void test_client_verify_solicit(const DHCP6Message *msg, size_t len) {
+        log_debug("/* %s */", __func__);
 
-        assert_se(advertise->type == DHCP6_ADVERTISE);
-        assert_se((be32toh(advertise->transaction_id) & 0x00ffffff) ==
-                  0x0fb4e5);
+        assert_se(len == sizeof(msg_solicit));
+        /* The elapsed time value is not deterministic. Skip it. */
+        assert_se(memcmp(msg, msg_solicit, len - sizeof(be16_t)) == 0);
+}
 
-        while (pos < len) {
-                DHCP6Option *option = (DHCP6Option *)&advertise->options[pos];
-                const uint16_t optcode = be16toh(option->code);
-                const uint16_t optlen = be16toh(option->len);
-                uint8_t *optval = option->data;
+static void test_client_verify_release(const DHCP6Message *msg, size_t len) {
+        log_debug("/* %s */", __func__);
 
-                switch(optcode) {
-                case SD_DHCP6_OPTION_CLIENTID:
-                        assert_se(optlen == 14);
+        assert_se(len == sizeof(msg_release));
+        assert_se(msg->type == DHCP6_MESSAGE_RELEASE);
+        /* The transaction ID and elapsed time value are not deterministic. Skip them. */
+        assert_se(memcmp(msg->options, msg_release + offsetof(DHCP6Message, options),
+                         len - offsetof(DHCP6Message, options) - sizeof(be16_t)) == 0);
+}
 
-                        opt_clientid = true;
+static void test_client_verify_request(const DHCP6Message *msg, size_t len) {
+        log_debug("/* %s */", __func__);
+
+        assert_se(len == sizeof(msg_request));
+        assert_se(msg->type == DHCP6_MESSAGE_REQUEST);
+        /* The transaction ID and elapsed time value are not deterministic. Skip them. */
+        assert_se(memcmp(msg->options, msg_request + offsetof(DHCP6Message, options),
+                         len - offsetof(DHCP6Message, options) - sizeof(be16_t)) == 0);
+}
+
+static void test_lease_common(sd_dhcp6_client *client) {
+        sd_dhcp6_lease *lease;
+        const struct in6_addr *addrs;
+        const char *str;
+        char **strv;
+        uint8_t *id;
+        size_t len;
+
+        assert_se(sd_dhcp6_client_get_lease(client, &lease) >= 0);
+
+        assert_se(dhcp6_lease_get_clientid(lease, &id, &len) >= 0);
+        assert_se(memcmp_nn(id, len, client_id, sizeof(client_id)) == 0);
+
+        assert_se(sd_dhcp6_lease_get_domains(lease, &strv) == 1);
+        assert_se(streq(strv[0], "lab.intra"));
+        assert_se(!strv[1]);
+
+        assert_se(sd_dhcp6_lease_get_fqdn(lease, &str) >= 0);
+        assert_se(streq(str, "client.lab.intra"));
+
+        assert_se(sd_dhcp6_lease_get_dns(lease, &addrs) == 2);
+        assert_se(in6_addr_equal(&addrs[0], &dns1));
+        assert_se(in6_addr_equal(&addrs[1], &dns2));
+
+        assert_se(sd_dhcp6_lease_get_ntp_addrs(lease, &addrs) == 2);
+        assert_se(in6_addr_equal(&addrs[0], &ntp1));
+        assert_se(in6_addr_equal(&addrs[1], &ntp2));
+
+        assert_se(sd_dhcp6_lease_get_ntp_fqdn(lease, &strv) == 1);
+        assert_se(streq(strv[0], "ntp.intra"));
+        assert_se(!strv[1]);
+
+        assert_se(lease->sntp_count == 2);
+        assert_se(in6_addr_equal(&lease->sntp[0], &sntp1));
+        assert_se(in6_addr_equal(&lease->sntp[1], &sntp2));
+}
+
+static void test_lease_managed(sd_dhcp6_client *client) {
+        sd_dhcp6_lease *lease;
+        struct in6_addr addr;
+        uint32_t lt_pref, lt_valid;
+        uint8_t *id, prefixlen;
+        size_t len;
+
+        assert_se(sd_dhcp6_client_get_lease(client, &lease) >= 0);
+
+        assert_se(dhcp6_lease_get_serverid(lease, &id, &len) >= 0);
+        assert_se(memcmp_nn(id, len, server_id, sizeof(server_id)) == 0);
+
+        sd_dhcp6_lease_reset_address_iter(lease);
+        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) >= 0);
+        assert_se(in6_addr_equal(&addr, &ia_na_address1));
+        assert_se(lt_pref == 150);
+        assert_se(lt_valid == 180);
+        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) >= 0);
+        assert_se(in6_addr_equal(&addr, &ia_na_address2));
+        assert_se(lt_pref == 150);
+        assert_se(lt_valid == 180);
+        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) == -ENODATA);
+
+        sd_dhcp6_lease_reset_address_iter(lease);
+        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) >= 0);
+        assert_se(in6_addr_equal(&addr, &ia_na_address1));
+        assert_se(lt_pref == 150);
+        assert_se(lt_valid == 180);
+        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) >= 0);
+        assert_se(in6_addr_equal(&addr, &ia_na_address2));
+        assert_se(lt_pref == 150);
+        assert_se(lt_valid == 180);
+        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) == -ENODATA);
+
+        sd_dhcp6_lease_reset_pd_prefix_iter(lease);
+        assert_se(sd_dhcp6_lease_get_pd(lease, &addr, &prefixlen, &lt_pref, &lt_valid) >= 0);
+        assert_se(in6_addr_equal(&addr, &ia_pd_prefix1));
+        assert_se(prefixlen == 64);
+        assert_se(lt_pref == 150);
+        assert_se(lt_valid == 180);
+        assert_se(sd_dhcp6_lease_get_pd(lease, &addr, &prefixlen, &lt_pref, &lt_valid) >= 0);
+        assert_se(in6_addr_equal(&addr, &ia_pd_prefix2));
+        assert_se(prefixlen == 64);
+        assert_se(lt_pref == 150);
+        assert_se(lt_valid == 180);
+        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) == -ENODATA);
+
+        sd_dhcp6_lease_reset_pd_prefix_iter(lease);
+        assert_se(sd_dhcp6_lease_get_pd(lease, &addr, &prefixlen, &lt_pref, &lt_valid) >= 0);
+        assert_se(in6_addr_equal(&addr, &ia_pd_prefix1));
+        assert_se(prefixlen == 64);
+        assert_se(lt_pref == 150);
+        assert_se(lt_valid == 180);
+        assert_se(sd_dhcp6_lease_get_pd(lease, &addr, &prefixlen, &lt_pref, &lt_valid) >= 0);
+        assert_se(in6_addr_equal(&addr, &ia_pd_prefix2));
+        assert_se(prefixlen == 64);
+        assert_se(lt_pref == 150);
+        assert_se(lt_valid == 180);
+        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) == -ENODATA);
+
+        test_lease_common(client);
+}
+
+static void test_client_callback(sd_dhcp6_client *client, int event, void *userdata) {
+        switch (event) {
+        case SD_DHCP6_CLIENT_EVENT_STOP:
+                log_debug("/* %s (event=stop) */", __func__);
+                return;
+
+        case SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST:
+                log_debug("/* %s (event=information-request) */", __func__);
+
+                assert_se(test_client_sent_message_count == 1);
+
+                test_lease_common(client);
+
+                assert_se(sd_dhcp6_client_set_information_request(client, false) >= 0);
+                assert_se(sd_dhcp6_client_start(client) >= 0);
+                assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message*) msg_advertise)->transaction_id) >= 0);
+                break;
+
+        case SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE:
+                log_debug("/* %s (event=ip-acquire) */", __func__);
+
+                assert_se(IN_SET(test_client_sent_message_count, 3, 5));
+
+                test_lease_managed(client);
+
+                switch (test_client_sent_message_count) {
+                case 3:
+                        assert_se(sd_dhcp6_client_stop(client) >= 0);
+                        assert_se(sd_dhcp6_client_start(client) >= 0);
+                        assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message*) msg_reply)->transaction_id) >= 0);
                         break;
 
-                case SD_DHCP6_OPTION_IA_NA: {
-                        be32_t iaid = htobe32(0x0ecfa37d);
-
-                        assert_se(optlen == 94);
-                        assert_se(optval == &msg_advertise[26]);
-                        assert_se(!memcmp(optval, &msg_advertise[26], optlen));
-
-                        assert_se(!memcmp(optval, &iaid, sizeof(val)));
-
-                        val = htobe32(80);
-                        assert_se(!memcmp(optval + 4, &val, sizeof(val)));
-
-                        val = htobe32(120);
-                        assert_se(!memcmp(optval + 8, &val, sizeof(val)));
-
-                        assert_se(dhcp6_option_parse_ia(NULL, option, iaid, &lease->ia, NULL) >= 0);
-
-                        break;
-                }
-                case SD_DHCP6_OPTION_SERVERID:
-                        assert_se(optlen == 14);
-                        assert_se(optval == &msg_advertise[179]);
-                        assert_se(!memcmp(optval, &msg_advertise[179], optlen));
-
-                        assert_se(dhcp6_lease_set_serverid(lease, optval,
-                                                           optlen) >= 0);
-                        break;
-
-                case SD_DHCP6_OPTION_PREFERENCE:
-                        assert_se(optlen == 1);
-                        assert_se(!*optval);
-
-                        assert_se(dhcp6_lease_set_preference(lease,
-                                                             *optval) >= 0);
-                        break;
-
-                case SD_DHCP6_OPTION_ELAPSED_TIME:
-                        assert_se(optlen == 2);
-
-                        break;
-
-                case SD_DHCP6_OPTION_DNS_SERVERS:
-                        assert_se(optlen == 16);
-                        assert_se(dhcp6_lease_set_dns(lease, optval,
-                                                      optlen) >= 0);
-                        break;
-
-                case SD_DHCP6_OPTION_DOMAIN_LIST:
-                        assert_se(optlen == 11);
-                        assert_se(dhcp6_lease_set_domains(lease, optval,
-                                                          optlen) >= 0);
-                        break;
-
-                case SD_DHCP6_OPTION_SNTP_SERVERS:
-                        assert_se(optlen == 16);
-                        assert_se(dhcp6_lease_add_sntp(lease, optval, optlen) >= 0);
+                case 5:
+                        assert_se(sd_event_exit(sd_dhcp6_client_get_event(client), 0) >= 0);
                         break;
 
                 default:
-                        break;
+                        assert_not_reached();
                 }
 
-                pos += sizeof(*option) + optlen;
+                break;
+
+        case DHCP6_CLIENT_EVENT_TEST_ADVERTISED: {
+                sd_dhcp6_lease *lease;
+                uint8_t preference;
+
+                log_debug("/* %s (event=test-advertised) */", __func__);
+
+                assert_se(test_client_sent_message_count == 2);
+
+                test_lease_managed(client);
+
+                assert_se(sd_dhcp6_client_get_lease(client, &lease) >= 0);
+                assert_se(dhcp6_lease_get_preference(lease, &preference) >= 0);
+                assert_se(preference == 0xff);
+
+                assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message*) msg_reply)->transaction_id) >= 0);
+                break;
         }
-
-        assert_se(pos == len);
-        assert_se(opt_clientid);
-
-        sd_dhcp6_lease_reset_address_iter(lease);
-        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref,
-                                             &lt_valid) >= 0);
-        assert_se(!memcmp(&addr, &msg_advertise[42], sizeof(addr)));
-        assert_se(lt_pref == 150);
-        assert_se(lt_valid == 180);
-        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref,
-                                             &lt_valid) == -ENOMSG);
-
-        sd_dhcp6_lease_reset_address_iter(lease);
-        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref,
-                                             &lt_valid) >= 0);
-        assert_se(!memcmp(&addr, &msg_advertise[42], sizeof(addr)));
-        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref,
-                                             &lt_valid) == -ENOMSG);
-        sd_dhcp6_lease_reset_address_iter(lease);
-        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref,
-                                             &lt_valid) >= 0);
-        assert_se(!memcmp(&addr, &msg_advertise[42], sizeof(addr)));
-        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref,
-                                             &lt_valid) == -ENOMSG);
-
-        assert_se(dhcp6_lease_get_serverid(lease, &opt, &len) >= 0);
-        assert_se(len == 14);
-        assert_se(!memcmp(opt, &msg_advertise[179], len));
-
-        assert_se(dhcp6_lease_get_preference(lease, &preference) >= 0);
-        assert_se(preference == 0);
-
-        r = sd_dhcp6_lease_get_dns(lease, &addrs);
-        assert_se(r == 1);
-        assert_se(!memcmp(addrs, &msg_advertise[124], r * 16));
-
-        r = sd_dhcp6_lease_get_domains(lease, &domains);
-        assert_se(r == 1);
-        assert_se(!strcmp("lab.intra", domains[0]));
-        assert_se(domains[1] == NULL);
-
-        r = sd_dhcp6_lease_get_ntp_addrs(lease, &addrs);
-        assert_se(r == 1);
-        assert_se(!memcmp(addrs, &msg_advertise[159], r * 16));
-
-        return 0;
-}
-
-static int test_hangcheck(sd_event_source *s, uint64_t usec, void *userdata) {
-        assert_not_reached("Test case should have completed in 2 seconds");
-
-        return 0;
-}
-
-static void test_client_solicit_cb(sd_dhcp6_client *client, int event,
-                                   void *userdata) {
-        sd_event *e = userdata;
-        sd_dhcp6_lease *lease;
-        const struct in6_addr *addrs;
-        char **domains;
-
-        log_debug("/* %s */", __func__);
-
-        assert_se(e);
-        assert_se(event == SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE);
-
-        assert_se(sd_dhcp6_client_get_lease(client, &lease) >= 0);
-
-        assert_se(sd_dhcp6_lease_get_domains(lease, &domains) == 1);
-        assert_se(!strcmp("lab.intra", domains[0]));
-        assert_se(domains[1] == NULL);
-
-        assert_se(sd_dhcp6_lease_get_dns(lease, &addrs) == 1);
-        assert_se(!memcmp(addrs, &msg_advertise[124], 16));
-
-        assert_se(sd_dhcp6_lease_get_ntp_addrs(lease, &addrs) == 1);
-        assert_se(!memcmp(addrs, &msg_advertise[159], 16));
-
-        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DNS_SERVERS) == -EBUSY);
-
-        sd_event_exit(e, 0);
-}
-
-static int test_client_send_reply(DHCP6Message *request) {
-        DHCP6Message reply;
-
-        log_debug("/* %s */", __func__);
-
-        reply.transaction_id = request->transaction_id;
-        reply.type = DHCP6_REPLY;
-
-        memcpy(msg_reply, &reply.transaction_id, 4);
-
-        memcpy(&msg_reply[26], test_duid, sizeof(test_duid));
-
-        memcpy(&msg_reply[44], &test_iaid, sizeof(test_iaid));
-
-        assert_se(write(test_dhcp_fd[1], msg_reply, sizeof(msg_reply))
-                  == sizeof(msg_reply));
-
-        return 0;
-}
-
-static int test_client_verify_request(DHCP6Message *request, size_t len) {
-        _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
-        bool found_clientid = false, found_iana = false, found_serverid = false,
-                found_elapsed_time = false, found_fqdn = false;
-        uint32_t lt_pref, lt_valid;
-        struct in6_addr addr;
-        size_t pos = 0;
-        be32_t val;
-
-        log_debug("/* %s */", __func__);
-
-        assert_se(request->type == DHCP6_REQUEST);
-        assert_se(dhcp6_lease_new(&lease) >= 0);
-
-        len -= sizeof(DHCP6Message);
-
-        while (pos < len) {
-                DHCP6Option *option = (DHCP6Option *)&request->options[pos];
-                uint16_t optcode = be16toh(option->code);
-                uint16_t optlen = be16toh(option->len);
-                uint8_t *optval = option->data;
-
-                switch(optcode) {
-                case SD_DHCP6_OPTION_CLIENTID:
-                        assert_se(!found_clientid);
-                        found_clientid = true;
-
-                        assert_se(!memcmp(optval, &test_duid,
-                                          sizeof(test_duid)));
-
-                        break;
-
-                case SD_DHCP6_OPTION_IA_NA:
-                        assert_se(!found_iana);
-                        found_iana = true;
-
-                        assert_se(optlen == 40);
-                        assert_se(!memcmp(optval, &test_iaid, sizeof(test_iaid)));
-
-                        /* T1 and T2 should not be set. */
-                        val = 0;
-                        assert_se(!memcmp(optval + 4, &val, sizeof(val)));
-                        assert_se(!memcmp(optval + 8, &val, sizeof(val)));
-
-                        /* Then, this should refuse all addresses. */
-                        assert_se(dhcp6_option_parse_ia(NULL, option, test_iaid, &lease->ia, NULL) >= 0);
-
-                        break;
-
-                case SD_DHCP6_OPTION_SERVERID:
-                        assert_se(!found_serverid);
-                        found_serverid = true;
-
-                        assert_se(optlen == 14);
-                        assert_se(!memcmp(&msg_advertise[179], optval, optlen));
-
-                        break;
-
-                case SD_DHCP6_OPTION_ELAPSED_TIME:
-                        assert_se(!found_elapsed_time);
-                        found_elapsed_time = true;
-
-                        assert_se(optlen == 2);
-
-                        break;
-                case SD_DHCP6_OPTION_FQDN:
-                        assert_se(!found_fqdn);
-                        found_fqdn = true;
-
-                        assert_se(optlen == 17);
-
-                        assert_se(optval[0] == 0x01);
-                        assert_se(!memcmp(optval + 1, fqdn_wire, sizeof(fqdn_wire)));
-                        break;
-                }
-
-                pos += sizeof(*option) + optlen;
+        default:
+                assert_not_reached();
         }
-
-        assert_se(found_clientid && found_iana && found_serverid &&
-                  found_elapsed_time);
-
-        sd_dhcp6_lease_reset_address_iter(lease);
-        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) == -ENOMSG);
-
-        return 0;
 }
 
-static int test_client_send_advertise(DHCP6Message *solicit) {
-        DHCP6Message advertise;
+int dhcp6_network_send_udp_socket(int s, struct in6_addr *a, const void *packet, size_t len) {
+        log_debug("/* %s(count=%u) */", __func__, test_client_sent_message_count);
 
-        log_debug("/* %s */", __func__);
-
-        advertise.transaction_id = solicit->transaction_id;
-        advertise.type = DHCP6_ADVERTISE;
-
-        memcpy(msg_advertise, &advertise.transaction_id, 4);
-
-        memcpy(&msg_advertise[8], test_duid, sizeof(test_duid));
-
-        memcpy(&msg_advertise[26], &test_iaid, sizeof(test_iaid));
-
-        assert_se(write(test_dhcp_fd[1], msg_advertise, sizeof(msg_advertise))
-                  == sizeof(msg_advertise));
-
-        return 0;
-}
-
-static int test_client_verify_solicit(DHCP6Message *solicit, size_t len) {
-        bool found_clientid = false, found_iana = false,
-                found_elapsed_time = false, found_fqdn = false;
-        size_t pos = 0;
-
-        log_debug("/* %s */", __func__);
-
-        assert_se(solicit->type == DHCP6_SOLICIT);
-
-        len -= sizeof(DHCP6Message);
-
-        while (pos < len) {
-                DHCP6Option *option = (DHCP6Option *)&solicit->options[pos];
-                uint16_t optcode = be16toh(option->code);
-                uint16_t optlen = be16toh(option->len);
-                uint8_t *optval = option->data;
-
-                switch(optcode) {
-                case SD_DHCP6_OPTION_CLIENTID:
-                        assert_se(!found_clientid);
-                        found_clientid = true;
-
-                        assert_se(optlen == sizeof(test_duid));
-                        memcpy(&test_duid, optval, sizeof(test_duid));
-
-                        break;
-
-                case SD_DHCP6_OPTION_IA_NA:
-                        assert_se(!found_iana);
-                        found_iana = true;
-
-                        assert_se(optlen == 12);
-
-                        memcpy(&test_iaid, optval, sizeof(test_iaid));
-
-                        break;
-
-                case SD_DHCP6_OPTION_ELAPSED_TIME:
-                        assert_se(!found_elapsed_time);
-                        found_elapsed_time = true;
-
-                        assert_se(optlen == 2);
-
-                        break;
-
-                case SD_DHCP6_OPTION_FQDN:
-                        assert_se(!found_fqdn);
-                        found_fqdn = true;
-
-                        assert_se(optlen == 17);
-
-                        assert_se(optval[0] == 0x01);
-                        assert_se(!memcmp(optval + 1, fqdn_wire, sizeof(fqdn_wire)));
-
-                        break;
-                }
-
-                pos += sizeof(*option) + optlen;
-        }
-
-        assert_se(pos == len);
-        assert_se(found_clientid && found_iana && found_elapsed_time);
-
-        return 0;
-}
-
-static void test_client_information_cb(sd_dhcp6_client *client, int event,
-                                       void *userdata) {
-        sd_event *e = userdata;
-        sd_dhcp6_lease *lease;
-        const struct in6_addr *addrs;
-        struct in6_addr address = { { { 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01 } } };
-        char **domains;
-        const char *fqdn;
-
-        log_debug("/* %s */", __func__);
-
-        assert_se(e);
-        assert_se(event == SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST);
-
-        assert_se(sd_dhcp6_client_get_lease(client, &lease) >= 0);
-
-        assert_se(sd_dhcp6_lease_get_domains(lease, &domains) == 1);
-        assert_se(!strcmp("lab.intra", domains[0]));
-        assert_se(domains[1] == NULL);
-
-        assert_se(sd_dhcp6_lease_get_fqdn(lease, &fqdn) >= 0);
-        assert_se(streq(fqdn, "client.intra"));
-
-        assert_se(sd_dhcp6_lease_get_dns(lease, &addrs) == 1);
-        assert_se(!memcmp(addrs, &msg_advertise[124], 16));
-
-        assert_se(sd_dhcp6_lease_get_ntp_addrs(lease, &addrs) == 1);
-        assert_se(!memcmp(addrs, &msg_advertise[159], 16));
-
-        assert_se(sd_dhcp6_client_set_information_request(client, false) == -EBUSY);
-        assert_se(sd_dhcp6_client_set_callback(client, NULL, e) >= 0);
-        assert_se(sd_dhcp6_client_stop(client) >= 0);
-        assert_se(sd_dhcp6_client_set_information_request(client, false) >= 0);
-
-        assert_se(sd_dhcp6_client_set_callback(client,
-                                               test_client_solicit_cb, e) >= 0);
-
-        assert_se(sd_dhcp6_client_set_local_address(client, &address) >= 0);
-
-        assert_se(sd_dhcp6_client_start(client) >= 0);
-
-}
-
-static int test_client_verify_information_request(DHCP6Message *information_request,
-                                                  size_t len) {
-
-        _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL;
-        size_t pos = 0;
-        bool found_clientid = false, found_elapsed_time = false;
-        struct in6_addr addr;
-        uint32_t lt_pref, lt_valid;
-
-        log_debug("/* %s */", __func__);
-
-        assert_se(information_request->type == DHCP6_INFORMATION_REQUEST);
-        assert_se(dhcp6_lease_new(&lease) >= 0);
-
-        len -= sizeof(DHCP6Message);
-
-        while (pos < len) {
-                DHCP6Option *option = (DHCP6Option *)&information_request->options[pos];
-                uint16_t optcode = be16toh(option->code);
-                uint16_t optlen = be16toh(option->len);
-                uint8_t *optval = option->data;
-
-                switch(optcode) {
-                case SD_DHCP6_OPTION_CLIENTID:
-                        assert_se(!found_clientid);
-                        found_clientid = true;
-
-                        assert_se(optlen == sizeof(test_duid));
-                        memcpy(&test_duid, optval, sizeof(test_duid));
-
-                        break;
-
-                case SD_DHCP6_OPTION_IA_NA:
-                        assert_not_reached("IA TA option must not be present");
-
-                        break;
-
-                case SD_DHCP6_OPTION_SERVERID:
-                        assert_not_reached("Server ID option must not be present");
-
-                        break;
-
-                case SD_DHCP6_OPTION_ELAPSED_TIME:
-                        assert_se(!found_elapsed_time);
-                        found_elapsed_time = true;
-
-                        assert_se(optlen == 2);
-
-                        break;
-                }
-
-                pos += sizeof(*option) + optlen;
-        }
-
-        assert_se(pos == len);
-        assert_se(found_clientid && found_elapsed_time);
-
-        sd_dhcp6_lease_reset_address_iter(lease);
-
-        assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref,
-                                             &lt_valid) == -ENOMSG);
-
-        return 0;
-}
-
-int dhcp6_network_send_udp_socket(int s, struct in6_addr *server_address,
-                                  const void *packet, size_t len) {
-        struct in6_addr mcast =
-                IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT;
-        DHCP6Message *message;
-
-        log_debug("/* %s */", __func__);
-
-        assert_se(s == test_dhcp_fd[0]);
-        assert_se(server_address);
+        assert_se(a);
+        assert_se(in6_addr_equal(a, &mcast_address));
         assert_se(packet);
-        assert_se(len > sizeof(DHCP6Message) + 4);
-        assert_se(IN6_ARE_ADDR_EQUAL(server_address, &mcast));
+        assert_se(len >= sizeof(DHCP6Message));
 
-        message = (DHCP6Message *)packet;
+        switch (test_client_sent_message_count) {
+        case 0:
+                test_client_verify_information_request(packet, len);
+                assert_se(write(test_fd[1], msg_reply, sizeof(msg_reply)) == sizeof(msg_reply));
+                break;
 
-        assert_se(message->transaction_id & 0x00ffffff);
+        case 1:
+                test_client_verify_solicit(packet, len);
+                assert_se(write(test_fd[1], msg_advertise, sizeof(msg_advertise)) == sizeof(msg_advertise));
+                break;
 
-        if (test_client_message_num == 0) {
-                test_client_verify_information_request(message, len);
-                test_client_send_reply(message);
-                test_client_message_num++;
-        } else if (test_client_message_num == 1) {
-                test_client_verify_solicit(message, len);
-                test_client_send_advertise(message);
-                test_client_message_num++;
-        } else if (test_client_message_num == 2) {
-                test_client_verify_request(message, len);
-                test_client_send_reply(message);
-                test_client_message_num++;
+        case 2:
+                test_client_callback(client_ref, DHCP6_CLIENT_EVENT_TEST_ADVERTISED, NULL);
+                test_client_verify_request(packet, len);
+                assert_se(write(test_fd[1], msg_reply, sizeof(msg_reply)) == sizeof(msg_reply));
+                break;
+
+        case 3:
+                test_client_verify_release(packet, len);
+                /* when stopping, dhcp6 client doesn't wait for release server reply */
+                assert_se(write(test_fd[1], msg_reply, sizeof(msg_reply)) == sizeof(msg_reply));
+                break;
+
+        case 4:
+                test_client_verify_solicit(packet, len);
+                assert_se(write(test_fd[1], msg_reply, sizeof(msg_reply)) == sizeof(msg_reply));
+                break;
+
+        default:
+                assert_not_reached();
         }
 
+        test_client_sent_message_count++;
         return len;
 }
 
-int dhcp6_network_bind_udp_socket(int ifindex, struct in6_addr *local_address) {
+int dhcp6_network_bind_udp_socket(int ifindex, struct in6_addr *a) {
         assert_se(ifindex == test_ifindex);
+        assert_se(a);
+        assert_se(in6_addr_equal(a, &local_address));
 
-        if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_dhcp_fd) < 0)
-                return -errno;
-
-        return test_dhcp_fd[0];
+        assert_se(socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) >= 0);
+        return TAKE_FD(test_fd[0]);
 }
 
-static int test_client_solicit(sd_event *e) {
-        sd_dhcp6_client *client;
-        struct in6_addr address = { { { 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01 } } };
-        int val;
+TEST(dhcp6_client) {
+        _cleanup_(sd_dhcp6_client_unrefp) sd_dhcp6_client *client = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
 
-        log_debug("/* %s */", __func__);
+        assert_se(sd_event_new(&e) >= 0);
+        assert_se(sd_event_add_time_relative(e, NULL, CLOCK_BOOTTIME,
+                                             2 * USEC_PER_SEC, 0,
+                                             NULL, INT_TO_PTR(-ETIMEDOUT)) >= 0);
 
         assert_se(sd_dhcp6_client_new(&client) >= 0);
-        assert_se(client);
-
         assert_se(sd_dhcp6_client_attach_event(client, e, 0) >= 0);
-
         assert_se(sd_dhcp6_client_set_ifindex(client, test_ifindex) == 0);
-        assert_se(sd_dhcp6_client_set_mac(client, (const uint8_t *) &mac_addr,
-                                          sizeof (mac_addr),
-                                          ARPHRD_ETHER) >= 0);
-        assert_se(sd_dhcp6_client_set_fqdn(client, "host.lab.intra") == 1);
+        assert_se(sd_dhcp6_client_set_local_address(client, &local_address) >= 0);
+        assert_se(sd_dhcp6_client_set_fqdn(client, "host.lab.intra") >= 0);
+        assert_se(sd_dhcp6_client_set_iaid(client, unaligned_read_be32((uint8_t[]) { IA_ID_BYTES })) >= 0);
+        assert_se(sd_dhcp6_client_set_send_release(client, true) >= 0);
         dhcp6_client_set_test_mode(client, true);
 
-        assert_se(sd_dhcp6_client_get_information_request(client, &val) >= 0);
-        assert_se(val == 0);
-        assert_se(sd_dhcp6_client_set_information_request(client, 42) >= 0);
-        assert_se(sd_dhcp6_client_get_information_request(client, &val) >= 0);
-        assert_se(val);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DNS_SERVER) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DOMAIN) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NTP_SERVER) >= 0);
+        assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_SNTP_SERVER) >= 0);
 
-        assert_se(sd_dhcp6_client_set_callback(client,
-                                               test_client_information_cb, e) >= 0);
-
-        assert_se(sd_event_add_time_relative(e, &hangcheck, clock_boottime_or_monotonic(),
-                                             2 * USEC_PER_SEC, 0,
-                                             test_hangcheck, NULL) >= 0);
-
-        assert_se(sd_dhcp6_client_set_local_address(client, &address) >= 0);
+        assert_se(sd_dhcp6_client_set_information_request(client, true) >= 0);
+        assert_se(sd_dhcp6_client_set_callback(client, test_client_callback, NULL) >= 0);
 
         assert_se(sd_dhcp6_client_start(client) >= 0);
 
-        sd_event_loop(e);
+        assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message*) msg_reply)->transaction_id) >= 0);
 
-        hangcheck = sd_event_source_unref(hangcheck);
+        assert_se(client_ref = sd_dhcp6_client_ref(client));
 
-        assert_se(!sd_dhcp6_client_unref(client));
+        assert_se(sd_event_loop(e) >= 0);
 
-        test_dhcp_fd[1] = safe_close(test_dhcp_fd[1]);
+        assert_se(test_client_sent_message_count == 5);
 
-        return 0;
+        assert_se(!sd_dhcp6_client_unref(client_ref));
+        test_fd[1] = safe_close(test_fd[1]);
 }
 
-int main(int argc, char *argv[]) {
-        _cleanup_(sd_event_unrefp) sd_event *e;
-
-        assert_se(sd_event_new(&e) >= 0);
-
-        test_setup_logging(LOG_DEBUG);
-
-        test_client_basic(e);
-        test_option(e);
-        test_option_status(e);
-        test_advertise_option(e);
-        test_client_solicit(e);
-        test_parse_domain(e);
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/libsystemd-network/test-ipv4ll-manual.c b/src/libsystemd-network/test-ipv4ll-manual.c
index a253acb..5dc6b10 100644
--- a/src/libsystemd-network/test-ipv4ll-manual.c
+++ b/src/libsystemd-network/test-ipv4ll-manual.c
@@ -12,37 +12,32 @@
 
 #include "alloc-util.h"
 #include "in-addr-util.h"
-#include "netlink-util.h"
 #include "parse-util.h"
 #include "string-util.h"
 #include "tests.h"
-#include "util.h"
 
 static void ll_handler(sd_ipv4ll *ll, int event, void *userdata) {
-        _cleanup_free_ char *address = NULL;
-        struct in_addr addr = {};
-
         assert_se(ll);
 
-        if (sd_ipv4ll_get_address(ll, &addr) >= 0)
-                assert_se(in_addr_to_string(AF_INET, (const union in_addr_union*) &addr, &address) >= 0);
+        struct in_addr addr;
+        const char *pretty = sd_ipv4ll_get_address(ll, &addr) >= 0 ? IN4_ADDR_TO_STRING(&addr) : NULL;
 
         switch (event) {
         case SD_IPV4LL_EVENT_BIND:
-                log_info("bound %s", strna(address));
+                log_info("bound %s", strna(pretty));
                 break;
         case SD_IPV4LL_EVENT_CONFLICT:
-                log_info("conflict on %s", strna(address));
+                log_info("conflict on %s", strna(pretty));
                 break;
         case SD_IPV4LL_EVENT_STOP:
-                log_error("the client was stopped with address %s", strna(address));
+                log_error("the client was stopped with address %s", strna(pretty));
                 break;
         default:
-                assert_not_reached("invalid LL event");
+                assert_not_reached();
         }
 }
 
-static int client_run(int ifindex, const char *seed_str, const struct ether_addr *ha, sd_event *e) {
+static int client_run(int ifindex, const char *seed_str, const struct in_addr *start_address, const struct ether_addr *ha, sd_event *e) {
         sd_ipv4ll *ll;
 
         assert_se(sd_ipv4ll_new(&ll) >= 0);
@@ -60,6 +55,9 @@
                 assert_se(sd_ipv4ll_set_address_seed(ll, seed) >= 0);
         }
 
+        if (start_address && in4_addr_is_set(start_address))
+                assert_se(sd_ipv4ll_set_address(ll, start_address) >= 0);
+
         log_info("starting IPv4LL client");
 
         assert_se(sd_ipv4ll_start(ll) >= 0);
@@ -71,7 +69,7 @@
         return EXIT_SUCCESS;
 }
 
-static int test_ll(const char *ifname, const char *seed) {
+static int test_ll(const char *ifname, const char *seed, const struct in_addr *start_address) {
         _cleanup_(sd_event_unrefp) sd_event *e = NULL;
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *reply = NULL;
@@ -90,7 +88,7 @@
         assert_se(sd_rtnl_message_link_get_ifindex(reply, &ifindex) >= 0);
         assert_se(sd_netlink_message_read_ether_addr(reply, IFLA_ADDRESS, &ha) >= 0);
 
-        client_run(ifindex, seed, &ha, e);
+        client_run(ifindex, seed, start_address, &ha, e);
 
         return EXIT_SUCCESS;
 }
@@ -99,12 +97,19 @@
         test_setup_logging(LOG_DEBUG);
 
         if (argc == 2)
-                return test_ll(argv[1], NULL);
-        else if (argc == 3)
-                return test_ll(argv[1], argv[2]);
-        else {
+                return test_ll(argv[1], NULL, NULL);
+        else if (argc == 3) {
+                int r;
+                union in_addr_union a;
+
+                r = in_addr_from_string(AF_INET, argv[2], &a);
+                if (r < 0)
+                        return test_ll(argv[1], argv[2], NULL);
+                else
+                        return test_ll(argv[1], NULL, &a.in);
+        } else {
                 log_error("This program takes one or two arguments.\n"
-                          "\t %s <ifname> [<seed>]", program_invocation_short_name);
+                          "\t %s <ifname> [<seed>|<start_address>]", program_invocation_short_name);
                 return EXIT_FAILURE;
         }
 }
diff --git a/src/libsystemd-network/test-ipv4ll.c b/src/libsystemd-network/test-ipv4ll.c
index 7985185..bb42930 100644
--- a/src/libsystemd-network/test-ipv4ll.c
+++ b/src/libsystemd-network/test-ipv4ll.c
@@ -16,7 +16,6 @@
 #include "fd-util.h"
 #include "socket-util.h"
 #include "tests.h"
-#include "util.h"
 
 static bool verbose = false;
 static bool extended = false;
@@ -29,7 +28,7 @@
 static void basic_request_handler(sd_ipv4ll *ll, int event, void *userdata) {
         assert_se(userdata == basic_request_handler_userdata);
 
-        switch(event) {
+        switch (event) {
                 case SD_IPV4LL_EVENT_STOP:
                         basic_request_handler_stop = 1;
                         break;
@@ -81,7 +80,7 @@
                 .ether_addr_octet = {'A', 'B', 'C', '1', '2', '3'}};
 
         if (verbose)
-                printf("* %s\n", __FUNCTION__);
+                printf("* %s\n", __func__);
 
         assert_se(sd_ipv4ll_new(&ll) == 0);
         assert_se(ll);
@@ -122,7 +121,7 @@
         assert_se(sd_ipv4ll_unref(ll) == NULL);
 }
 
-static void test_basic_request(sd_event *e) {
+static void test_basic_request(sd_event *e, const struct in_addr *start_address) {
 
         sd_ipv4ll *ll;
         struct ether_arp arp;
@@ -130,9 +129,11 @@
                 .ether_addr_octet = {'A', 'B', 'C', '1', '2', '3'}};
 
         if (verbose)
-                printf("* %s\n", __FUNCTION__);
+                printf("* %s\n", __func__);
 
         assert_se(sd_ipv4ll_new(&ll) == 0);
+        if (in4_addr_is_set(start_address))
+                assert_se(sd_ipv4ll_set_address(ll, start_address) >= 0);
         assert_se(sd_ipv4ll_start(ll) == -EINVAL);
 
         assert_se(sd_ipv4ll_attach_event(ll, e, 0) == 0);
@@ -168,6 +169,13 @@
 
                 sd_event_run(e, UINT64_MAX);
                 assert_se(basic_request_handler_bind == 1);
+
+                if (in4_addr_is_set(start_address)) {
+                        struct in_addr address;
+
+                        assert_se(sd_ipv4ll_get_address(ll, &address) >= 0);
+                        assert_se(start_address->s_addr == address.s_addr);
+                }
         }
 
         sd_ipv4ll_stop(ll);
@@ -179,6 +187,7 @@
 }
 
 int main(int argc, char *argv[]) {
+        struct in_addr start_address = {};
         _cleanup_(sd_event_unrefp) sd_event *e = NULL;
 
         test_setup_logging(LOG_DEBUG);
@@ -186,7 +195,12 @@
         assert_se(sd_event_new(&e) >= 0);
 
         test_public_api_setters(e);
-        test_basic_request(e);
+        test_basic_request(e, &start_address);
+
+        basic_request_handler_bind = 0;
+        basic_request_handler_stop = 0;
+        start_address.s_addr = htobe32(169U << 24 | 254U << 16 | 1U << 8 | 2U);
+        test_basic_request(e, &start_address);
 
         return 0;
 }
diff --git a/src/libsystemd-network/test-lldp-rx.c b/src/libsystemd-network/test-lldp-rx.c
new file mode 100644
index 0000000..387e1e2
--- /dev/null
+++ b/src/libsystemd-network/test-lldp-rx.c
@@ -0,0 +1,378 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <arpa/inet.h>
+#include <errno.h>
+#include <net/ethernet.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "sd-event.h"
+#include "sd-lldp-rx.h"
+
+#include "alloc-util.h"
+#include "fd-util.h"
+#include "lldp-network.h"
+#include "macro.h"
+#include "string-util.h"
+#include "tests.h"
+
+#define TEST_LLDP_PORT "em1"
+#define TEST_LLDP_TYPE_SYSTEM_NAME "systemd-lldp"
+#define TEST_LLDP_TYPE_SYSTEM_DESC "systemd-lldp-desc"
+
+static int test_fd[2] = PIPE_EBADF;
+static int lldp_rx_handler_calls;
+
+int lldp_network_bind_raw_socket(int ifindex) {
+        if (socketpair(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) < 0)
+                return -errno;
+
+        return test_fd[0];
+}
+
+static void lldp_rx_handler(sd_lldp_rx *lldp_rx, sd_lldp_rx_event_t event, sd_lldp_neighbor *n, void *userdata) {
+        lldp_rx_handler_calls++;
+}
+
+static int start_lldp_rx(sd_lldp_rx **lldp_rx, sd_event *e, sd_lldp_rx_callback_t cb, void *cb_data) {
+        int r;
+
+        r = sd_lldp_rx_new(lldp_rx);
+        if (r < 0)
+                return r;
+
+        r = sd_lldp_rx_set_ifindex(*lldp_rx, 42);
+        if (r < 0)
+                return r;
+
+        r = sd_lldp_rx_set_callback(*lldp_rx, cb, cb_data);
+        if (r < 0)
+                return r;
+
+        r = sd_lldp_rx_attach_event(*lldp_rx, e, 0);
+        if (r < 0)
+                return r;
+
+        r = sd_lldp_rx_start(*lldp_rx);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static int stop_lldp_rx(sd_lldp_rx *lldp_rx) {
+        int r;
+
+        r = sd_lldp_rx_stop(lldp_rx);
+        if (r < 0)
+                return r;
+
+        r = sd_lldp_rx_detach_event(lldp_rx);
+        if (r < 0)
+                return r;
+
+        sd_lldp_rx_unref(lldp_rx);
+        safe_close(test_fd[1]);
+
+        return 0;
+}
+
+static void test_receive_basic_packet(sd_event *e) {
+
+        static const uint8_t frame[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x07, 0x04, 0x00, 0x01, 0x02,     /* Chassis: MAC, 00:01:02:03:04:05 */
+                0x03, 0x04, 0x05,
+                0x04, 0x04, 0x05, 0x31, 0x2f, 0x33,     /* Port: interface name, "1/3" */
+                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
+                /* LLDP optional TLVs */
+                0x08, 0x04, 0x50, 0x6f, 0x72, 0x74,     /* Port Description: "Port" */
+                0x0a, 0x03, 0x53, 0x59, 0x53,           /* System Name: "SYS" */
+                0x0c, 0x04, 0x66, 0x6f, 0x6f, 0x00,     /* System Description: "foo" (NULL-terminated) */
+                0x00, 0x00                              /* End Of LLDPDU */
+        };
+
+        sd_lldp_rx *lldp_rx;
+        sd_lldp_neighbor **neighbors;
+        uint8_t type;
+        const void *data;
+        uint16_t ttl;
+        size_t length;
+        const char *str;
+
+        lldp_rx_handler_calls = 0;
+        assert_se(start_lldp_rx(&lldp_rx, e, lldp_rx_handler, NULL) == 0);
+
+        assert_se(write(test_fd[1], frame, sizeof(frame)) == sizeof(frame));
+        sd_event_run(e, 0);
+        assert_se(lldp_rx_handler_calls == 1);
+        assert_se(sd_lldp_rx_get_neighbors(lldp_rx, &neighbors) == 1);
+
+        assert_se(sd_lldp_neighbor_get_chassis_id(neighbors[0], &type, &data, &length) == 0);
+        assert_se(type == SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS);
+        assert_se(length == ETH_ALEN);
+        assert_se(!memcmp(data, "\x00\x01\x02\x03\x04\x05", ETH_ALEN));
+
+        assert_se(sd_lldp_neighbor_get_port_id(neighbors[0], &type, &data, &length) == 0);
+        assert_se(type == SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME);
+        assert_se(length == 3);
+        assert_se(!memcmp(data, "1/3", 3));
+
+        assert_se(sd_lldp_neighbor_get_port_description(neighbors[0], &str) == 0);
+        assert_se(streq(str, "Port"));
+
+        assert_se(sd_lldp_neighbor_get_system_name(neighbors[0], &str) == 0);
+        assert_se(streq(str, "SYS"));
+
+        assert_se(sd_lldp_neighbor_get_system_description(neighbors[0], &str) == 0);
+        assert_se(streq(str, "foo"));
+
+        assert_se(sd_lldp_neighbor_get_ttl(neighbors[0], &ttl) == 0);
+        assert_se(ttl == 120);
+
+        sd_lldp_neighbor_unref(neighbors[0]);
+        free(neighbors);
+
+        assert_se(stop_lldp_rx(lldp_rx) == 0);
+}
+
+static void test_receive_incomplete_packet(sd_event *e) {
+        sd_lldp_rx *lldp_rx;
+        sd_lldp_neighbor **neighbors;
+        uint8_t frame[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x07, 0x04, 0x00, 0x01, 0x02,     /* Chassis: MAC, 00:01:02:03:04:05 */
+                0x03, 0x04, 0x05,
+                0x04, 0x04, 0x05, 0x31, 0x2f, 0x33,     /* Port: interface name, "1/3" */
+                                                        /* Missing TTL */
+                0x00, 0x00                              /* End Of LLDPDU */
+        };
+
+        lldp_rx_handler_calls = 0;
+        assert_se(start_lldp_rx(&lldp_rx, e, lldp_rx_handler, NULL) == 0);
+
+        assert_se(write(test_fd[1], frame, sizeof(frame)) == sizeof(frame));
+        sd_event_run(e, 0);
+        assert_se(lldp_rx_handler_calls == 0);
+        assert_se(sd_lldp_rx_get_neighbors(lldp_rx, &neighbors) == 0);
+
+        assert_se(stop_lldp_rx(lldp_rx) == 0);
+}
+
+static void test_receive_oui_packet(sd_event *e) {
+        sd_lldp_rx *lldp_rx;
+        sd_lldp_neighbor **neighbors;
+        uint8_t frame[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x07, 0x04, 0x00, 0x01, 0x02,     /* Chassis: MAC, 00:01:02:03:04:05 */
+                0x03, 0x04, 0x05,
+                0x04, 0x04, 0x05, 0x31, 0x2f, 0x33,     /* Port TLV: interface name, "1/3" */
+                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
+                /* LLDP optional TLVs */
+                0xfe, 0x06, 0x00, 0x80, 0xc2, 0x01,     /* Port VLAN ID: 0x1234 */
+                0x12, 0x34,
+                0xfe, 0x07, 0x00, 0x80, 0xc2, 0x02,     /* Port and protocol: flag 1, PPVID 0x7788 */
+                0x01, 0x77, 0x88,
+                0xfe, 0x0d, 0x00, 0x80, 0xc2, 0x03,     /* VLAN Name: ID 0x1234, name "Vlan51" */
+                0x12, 0x34, 0x06, 0x56, 0x6c, 0x61,
+                0x6e, 0x35, 0x31,
+                0xfe, 0x06, 0x00, 0x80, 0xc2, 0x06,     /* Management VID: 0x0102 */
+                0x01, 0x02,
+                0xfe, 0x09, 0x00, 0x80, 0xc2, 0x07,     /* Link aggregation: status 1, ID 0x00140012 */
+                0x01, 0x00, 0x14, 0x00, 0x12,
+                0xfe, 0x07, 0x00, 0x12, 0x0f, 0x02,     /* 802.3 Power via MDI: PSE, MDI enabled */
+                0x07, 0x01, 0x00,
+                0x00, 0x00                              /* End of LLDPDU */
+        };
+
+        lldp_rx_handler_calls = 0;
+        assert_se(start_lldp_rx(&lldp_rx, e, lldp_rx_handler, NULL) == 0);
+
+        assert_se(write(test_fd[1], frame, sizeof(frame)) == sizeof(frame));
+        sd_event_run(e, 0);
+        assert_se(lldp_rx_handler_calls == 1);
+        assert_se(sd_lldp_rx_get_neighbors(lldp_rx, &neighbors) == 1);
+
+        assert_se(sd_lldp_neighbor_tlv_rewind(neighbors[0]) >= 0);
+        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_CHASSIS_ID) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_PORT_ID) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_TTL) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_VLAN_NAME) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_3, SD_LLDP_OUI_802_3_SUBTYPE_POWER_VIA_MDI) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_END) > 0);
+        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) == 0);
+
+        sd_lldp_neighbor_unref(neighbors[0]);
+        free(neighbors);
+
+        assert_se(stop_lldp_rx(lldp_rx) == 0);
+}
+
+static void test_multiple_neighbors_sorted(sd_event *e) {
+
+        static const uint8_t frame1[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x04, 0x01, '1', '/', '2',        /* Chassis component: "1/2" */
+                0x04, 0x04, 0x02, '2', '/', '3',        /* Port component: "2/3" */
+                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
+                0x00, 0x00                              /* End Of LLDPDU */
+        };
+        static const uint8_t frame2[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x04, 0x01, '2', '/', '1',        /* Chassis component: "2/1" */
+                0x04, 0x04, 0x02, '1', '/', '3',        /* Port component: "1/3" */
+                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
+                0x00, 0x00                              /* End Of LLDPDU */
+        };
+        static const uint8_t frame3[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x05, 0x01, '2', '/', '1', '0',   /* Chassis component: "2/10" */
+                0x04, 0x04, 0x02, '1', '/', '0',        /* Port component: "1/0" */
+                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
+                0x00, 0x00                              /* End Of LLDPDU */
+        };
+        static const uint8_t frame4[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x05, 0x01, '2', '/', '1', '9',   /* Chassis component: "2/19" */
+                0x04, 0x04, 0x02, '1', '/', '0',        /* Port component: "1/0" */
+                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
+                0x00, 0x00                              /* End Of LLDPDU */
+        };
+        static const uint8_t frame5[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x04, 0x01, '1', '/', '2',        /* Chassis component: "1/2" */
+                0x04, 0x05, 0x02, '2', '/', '1', '0',   /* Port component: "2/10" */
+                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
+                0x00, 0x00                              /* End Of LLDPDU */
+        };
+        static const uint8_t frame6[] = {
+                /* Ethernet header */
+                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
+                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
+                0x88, 0xcc,                             /* Ethertype */
+                /* LLDP mandatory TLVs */
+                0x02, 0x04, 0x01, '1', '/', '2',        /* Chassis component: "1/2" */
+                0x04, 0x05, 0x02, '2', '/', '3', '9',   /* Port component: "2/10" */
+                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
+                0x00, 0x00                              /* End Of LLDPDU */
+        };
+        static const char* expected[] = {
+                /* ordered pairs of Chassis+Port */
+                "1/2", "2/10",
+                "1/2", "2/3",
+                "1/2", "2/39",
+                "2/1", "1/3",
+                "2/10", "1/0",
+                "2/19", "1/0",
+        };
+
+        sd_lldp_rx *lldp_rx;
+        sd_lldp_neighbor **neighbors;
+        int i;
+        uint8_t type;
+        const void *data;
+        size_t length, expected_length;
+        uint16_t ttl;
+
+        lldp_rx_handler_calls = 0;
+        assert_se(start_lldp_rx(&lldp_rx, e, lldp_rx_handler, NULL) == 0);
+
+        assert_se(write(test_fd[1], frame1, sizeof(frame1)) == sizeof(frame1));
+        sd_event_run(e, 0);
+        assert_se(write(test_fd[1], frame2, sizeof(frame2)) == sizeof(frame2));
+        sd_event_run(e, 0);
+        assert_se(write(test_fd[1], frame3, sizeof(frame3)) == sizeof(frame3));
+        sd_event_run(e, 0);
+        assert_se(write(test_fd[1], frame4, sizeof(frame4)) == sizeof(frame4));
+        sd_event_run(e, 0);
+        assert_se(write(test_fd[1], frame5, sizeof(frame5)) == sizeof(frame5));
+        sd_event_run(e, 0);
+        assert_se(write(test_fd[1], frame6, sizeof(frame6)) == sizeof(frame6));
+        sd_event_run(e, 0);
+        assert_se(lldp_rx_handler_calls == 6);
+
+        assert_se(sd_lldp_rx_get_neighbors(lldp_rx, &neighbors) == 6);
+
+        for (i = 0; i < 6; i++) {
+                assert_se(sd_lldp_neighbor_get_chassis_id(neighbors[i], &type, &data, &length) == 0);
+                assert_se(type == SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT);
+                expected_length = strlen(expected[2 * i]);
+                assert_se(length == expected_length);
+                assert_se(memcmp(data, expected[2 * i], expected_length) == 0);
+
+                assert_se(sd_lldp_neighbor_get_port_id(neighbors[i], &type, &data, &length) == 0);
+                assert_se(type == SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT);
+                expected_length = strlen(expected[2 * i + 1]);
+                assert_se(length == expected_length);
+                assert_se(memcmp(data, expected[2 * i + 1], expected_length) == 0);
+
+                assert_se(sd_lldp_neighbor_get_ttl(neighbors[i], &ttl) == 0);
+                assert_se(ttl == 120);
+        }
+
+        for (i = 0; i < 6; i++)
+                sd_lldp_neighbor_unref(neighbors[i]);
+        free(neighbors);
+
+        assert_se(stop_lldp_rx(lldp_rx) == 0);
+}
+
+int main(int argc, char *argv[]) {
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+
+        test_setup_logging(LOG_DEBUG);
+
+        /* LLDP reception tests */
+        assert_se(sd_event_new(&e) == 0);
+        test_receive_basic_packet(e);
+        test_receive_incomplete_packet(e);
+        test_receive_oui_packet(e);
+        test_multiple_neighbors_sorted(e);
+
+        return 0;
+}
diff --git a/src/libsystemd-network/test-lldp.c b/src/libsystemd-network/test-lldp.c
deleted file mode 100644
index 0331e38..0000000
--- a/src/libsystemd-network/test-lldp.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <arpa/inet.h>
-#include <errno.h>
-#include <net/ethernet.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include "sd-event.h"
-#include "sd-lldp.h"
-
-#include "alloc-util.h"
-#include "fd-util.h"
-#include "lldp-network.h"
-#include "macro.h"
-#include "string-util.h"
-#include "tests.h"
-
-#define TEST_LLDP_PORT "em1"
-#define TEST_LLDP_TYPE_SYSTEM_NAME "systemd-lldp"
-#define TEST_LLDP_TYPE_SYSTEM_DESC "systemd-lldp-desc"
-
-static int test_fd[2] = { -1, -1 };
-static int lldp_handler_calls;
-
-int lldp_network_bind_raw_socket(int ifindex) {
-        if (socketpair(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) < 0)
-                return -errno;
-
-        return test_fd[0];
-}
-
-static void lldp_handler(sd_lldp *lldp, sd_lldp_event_t event, sd_lldp_neighbor *n, void *userdata) {
-        lldp_handler_calls++;
-}
-
-static int start_lldp(sd_lldp **lldp, sd_event *e, sd_lldp_callback_t cb, void *cb_data) {
-        int r;
-
-        r = sd_lldp_new(lldp);
-        if (r < 0)
-                return r;
-
-        r = sd_lldp_set_ifindex(*lldp, 42);
-        if (r < 0)
-                return r;
-
-        r = sd_lldp_set_callback(*lldp, cb, cb_data);
-        if (r < 0)
-                return r;
-
-        r = sd_lldp_attach_event(*lldp, e, 0);
-        if (r < 0)
-                return r;
-
-        r = sd_lldp_start(*lldp);
-        if (r < 0)
-                return r;
-
-        return 0;
-}
-
-static int stop_lldp(sd_lldp *lldp) {
-        int r;
-
-        r = sd_lldp_stop(lldp);
-        if (r < 0)
-                return r;
-
-        r = sd_lldp_detach_event(lldp);
-        if (r < 0)
-                return r;
-
-        sd_lldp_unref(lldp);
-        safe_close(test_fd[1]);
-
-        return 0;
-}
-
-static void test_receive_basic_packet(sd_event *e) {
-
-        static const uint8_t frame[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x07, 0x04, 0x00, 0x01, 0x02,     /* Chassis: MAC, 00:01:02:03:04:05 */
-                0x03, 0x04, 0x05,
-                0x04, 0x04, 0x05, 0x31, 0x2f, 0x33,     /* Port: interface name, "1/3" */
-                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
-                /* LLDP optional TLVs */
-                0x08, 0x04, 0x50, 0x6f, 0x72, 0x74,     /* Port Description: "Port" */
-                0x0a, 0x03, 0x53, 0x59, 0x53,           /* System Name: "SYS" */
-                0x0c, 0x04, 0x66, 0x6f, 0x6f, 0x00,     /* System Description: "foo" (NULL-terminated) */
-                0x00, 0x00                              /* End Of LLDPDU */
-        };
-
-        sd_lldp *lldp;
-        sd_lldp_neighbor **neighbors;
-        uint8_t type;
-        const void *data;
-        uint16_t ttl;
-        size_t length;
-        const char *str;
-
-        lldp_handler_calls = 0;
-        assert_se(start_lldp(&lldp, e, lldp_handler, NULL) == 0);
-
-        assert_se(write(test_fd[1], frame, sizeof(frame)) == sizeof(frame));
-        sd_event_run(e, 0);
-        assert_se(lldp_handler_calls == 1);
-        assert_se(sd_lldp_get_neighbors(lldp, &neighbors) == 1);
-
-        assert_se(sd_lldp_neighbor_get_chassis_id(neighbors[0], &type, &data, &length) == 0);
-        assert_se(type == SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS);
-        assert_se(length == ETH_ALEN);
-        assert_se(!memcmp(data, "\x00\x01\x02\x03\x04\x05", ETH_ALEN));
-
-        assert_se(sd_lldp_neighbor_get_port_id(neighbors[0], &type, &data, &length) == 0);
-        assert_se(type == SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME);
-        assert_se(length == 3);
-        assert_se(!memcmp(data, "1/3", 3));
-
-        assert_se(sd_lldp_neighbor_get_port_description(neighbors[0], &str) == 0);
-        assert_se(streq(str, "Port"));
-
-        assert_se(sd_lldp_neighbor_get_system_name(neighbors[0], &str) == 0);
-        assert_se(streq(str, "SYS"));
-
-        assert_se(sd_lldp_neighbor_get_system_description(neighbors[0], &str) == 0);
-        assert_se(streq(str, "foo"));
-
-        assert_se(sd_lldp_neighbor_get_ttl(neighbors[0], &ttl) == 0);
-        assert_se(ttl == 120);
-
-        sd_lldp_neighbor_unref(neighbors[0]);
-        free(neighbors);
-
-        assert_se(stop_lldp(lldp) == 0);
-}
-
-static void test_receive_incomplete_packet(sd_event *e) {
-        sd_lldp *lldp;
-        sd_lldp_neighbor **neighbors;
-        uint8_t frame[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x07, 0x04, 0x00, 0x01, 0x02,     /* Chassis: MAC, 00:01:02:03:04:05 */
-                0x03, 0x04, 0x05,
-                0x04, 0x04, 0x05, 0x31, 0x2f, 0x33,     /* Port: interface name, "1/3" */
-                                                        /* Missing TTL */
-                0x00, 0x00                              /* End Of LLDPDU */
-        };
-
-        lldp_handler_calls = 0;
-        assert_se(start_lldp(&lldp, e, lldp_handler, NULL) == 0);
-
-        assert_se(write(test_fd[1], frame, sizeof(frame)) == sizeof(frame));
-        sd_event_run(e, 0);
-        assert_se(lldp_handler_calls == 0);
-        assert_se(sd_lldp_get_neighbors(lldp, &neighbors) == 0);
-
-        assert_se(stop_lldp(lldp) == 0);
-}
-
-static void test_receive_oui_packet(sd_event *e) {
-        sd_lldp *lldp;
-        sd_lldp_neighbor **neighbors;
-        uint8_t frame[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x07, 0x04, 0x00, 0x01, 0x02,     /* Chassis: MAC, 00:01:02:03:04:05 */
-                0x03, 0x04, 0x05,
-                0x04, 0x04, 0x05, 0x31, 0x2f, 0x33,     /* Port TLV: interface name, "1/3" */
-                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
-                /* LLDP optional TLVs */
-                0xfe, 0x06, 0x00, 0x80, 0xc2, 0x01,     /* Port VLAN ID: 0x1234 */
-                0x12, 0x34,
-                0xfe, 0x07, 0x00, 0x80, 0xc2, 0x02,     /* Port and protocol: flag 1, PPVID 0x7788 */
-                0x01, 0x77, 0x88,
-                0xfe, 0x0d, 0x00, 0x80, 0xc2, 0x03,     /* VLAN Name: ID 0x1234, name "Vlan51" */
-                0x12, 0x34, 0x06, 0x56, 0x6c, 0x61,
-                0x6e, 0x35, 0x31,
-                0xfe, 0x06, 0x00, 0x80, 0xc2, 0x06,     /* Management VID: 0x0102 */
-                0x01, 0x02,
-                0xfe, 0x09, 0x00, 0x80, 0xc2, 0x07,     /* Link aggregation: status 1, ID 0x00140012 */
-                0x01, 0x00, 0x14, 0x00, 0x12,
-                0xfe, 0x07, 0x00, 0x12, 0x0f, 0x02,     /* 802.3 Power via MDI: PSE, MDI enabled */
-                0x07, 0x01, 0x00,
-                0x00, 0x00                              /* End of LLDPDU */
-        };
-
-        lldp_handler_calls = 0;
-        assert_se(start_lldp(&lldp, e, lldp_handler, NULL) == 0);
-
-        assert_se(write(test_fd[1], frame, sizeof(frame)) == sizeof(frame));
-        sd_event_run(e, 0);
-        assert_se(lldp_handler_calls == 1);
-        assert_se(sd_lldp_get_neighbors(lldp, &neighbors) == 1);
-
-        assert_se(sd_lldp_neighbor_tlv_rewind(neighbors[0]) >= 0);
-        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_CHASSIS_ID) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_PORT_ID) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_TTL) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_VLAN_NAME) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_3, SD_LLDP_OUI_802_3_SUBTYPE_POWER_VIA_MDI) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
-        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_END) > 0);
-        assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) == 0);
-
-        sd_lldp_neighbor_unref(neighbors[0]);
-        free(neighbors);
-
-        assert_se(stop_lldp(lldp) == 0);
-}
-
-static void test_multiple_neighbors_sorted(sd_event *e) {
-
-        static const uint8_t frame1[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x04, 0x01, '1', '/', '2',        /* Chassis component: "1/2" */
-                0x04, 0x04, 0x02, '2', '/', '3',        /* Port component: "2/3" */
-                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
-                0x00, 0x00                              /* End Of LLDPDU */
-        };
-        static const uint8_t frame2[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x04, 0x01, '2', '/', '1',        /* Chassis component: "2/1" */
-                0x04, 0x04, 0x02, '1', '/', '3',        /* Port component: "1/3" */
-                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
-                0x00, 0x00                              /* End Of LLDPDU */
-        };
-        static const uint8_t frame3[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x05, 0x01, '2', '/', '1', '0',   /* Chassis component: "2/10" */
-                0x04, 0x04, 0x02, '1', '/', '0',        /* Port component: "1/0" */
-                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
-                0x00, 0x00                              /* End Of LLDPDU */
-        };
-        static const uint8_t frame4[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x05, 0x01, '2', '/', '1', '9',   /* Chassis component: "2/19" */
-                0x04, 0x04, 0x02, '1', '/', '0',        /* Port component: "1/0" */
-                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
-                0x00, 0x00                              /* End Of LLDPDU */
-        };
-        static const uint8_t frame5[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x04, 0x01, '1', '/', '2',        /* Chassis component: "1/2" */
-                0x04, 0x05, 0x02, '2', '/', '1', '0',   /* Port component: "2/10" */
-                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
-                0x00, 0x00                              /* End Of LLDPDU */
-        };
-        static const uint8_t frame6[] = {
-                /* Ethernet header */
-                0x01, 0x80, 0xc2, 0x00, 0x00, 0x03,     /* Destination MAC */
-                0x01, 0x02, 0x03, 0x04, 0x05, 0x06,     /* Source MAC */
-                0x88, 0xcc,                             /* Ethertype */
-                /* LLDP mandatory TLVs */
-                0x02, 0x04, 0x01, '1', '/', '2',        /* Chassis component: "1/2" */
-                0x04, 0x05, 0x02, '2', '/', '3', '9',   /* Port component: "2/10" */
-                0x06, 0x02, 0x00, 0x78,                 /* TTL: 120 seconds */
-                0x00, 0x00                              /* End Of LLDPDU */
-        };
-        static const char* expected[] = {
-                /* ordered pairs of Chassis+Port */
-                "1/2", "2/10",
-                "1/2", "2/3",
-                "1/2", "2/39",
-                "2/1", "1/3",
-                "2/10", "1/0",
-                "2/19", "1/0",
-        };
-
-        sd_lldp *lldp;
-        sd_lldp_neighbor **neighbors;
-        int i;
-        uint8_t type;
-        const void *data;
-        size_t length, expected_length;
-        uint16_t ttl;
-
-        lldp_handler_calls = 0;
-        assert_se(start_lldp(&lldp, e, lldp_handler, NULL) == 0);
-
-        assert_se(write(test_fd[1], frame1, sizeof(frame1)) == sizeof(frame1));
-        sd_event_run(e, 0);
-        assert_se(write(test_fd[1], frame2, sizeof(frame2)) == sizeof(frame2));
-        sd_event_run(e, 0);
-        assert_se(write(test_fd[1], frame3, sizeof(frame3)) == sizeof(frame3));
-        sd_event_run(e, 0);
-        assert_se(write(test_fd[1], frame4, sizeof(frame4)) == sizeof(frame4));
-        sd_event_run(e, 0);
-        assert_se(write(test_fd[1], frame5, sizeof(frame5)) == sizeof(frame5));
-        sd_event_run(e, 0);
-        assert_se(write(test_fd[1], frame6, sizeof(frame6)) == sizeof(frame6));
-        sd_event_run(e, 0);
-        assert_se(lldp_handler_calls == 6);
-
-        assert_se(sd_lldp_get_neighbors(lldp, &neighbors) == 6);
-
-        for (i = 0; i < 6; i++) {
-                assert_se(sd_lldp_neighbor_get_chassis_id(neighbors[i], &type, &data, &length) == 0);
-                assert_se(type == SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT);
-                expected_length = strlen(expected[2 * i]);
-                assert_se(length == expected_length);
-                assert_se(memcmp(data, expected[2 * i], expected_length) == 0);
-
-                assert_se(sd_lldp_neighbor_get_port_id(neighbors[i], &type, &data, &length) == 0);
-                assert_se(type == SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT);
-                expected_length = strlen(expected[2 * i + 1]);
-                assert_se(length == expected_length);
-                assert_se(memcmp(data, expected[2 * i + 1], expected_length) == 0);
-
-                assert_se(sd_lldp_neighbor_get_ttl(neighbors[i], &ttl) == 0);
-                assert_se(ttl == 120);
-        }
-
-        for (i = 0; i < 6; i++)
-                sd_lldp_neighbor_unref(neighbors[i]);
-        free(neighbors);
-
-        assert_se(stop_lldp(lldp) == 0);
-}
-
-int main(int argc, char *argv[]) {
-        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
-
-        test_setup_logging(LOG_DEBUG);
-
-        /* LLDP reception tests */
-        assert_se(sd_event_new(&e) == 0);
-        test_receive_basic_packet(e);
-        test_receive_incomplete_packet(e);
-        test_receive_oui_packet(e);
-        test_multiple_neighbors_sorted(e);
-
-        return 0;
-}
diff --git a/src/libsystemd-network/test-ndisc-ra.c b/src/libsystemd-network/test-ndisc-ra.c
index 927e21b..bd8c0fd 100644
--- a/src/libsystemd-network/test-ndisc-ra.c
+++ b/src/libsystemd-network/test-ndisc-ra.c
@@ -32,13 +32,13 @@
         0x20, 0x01, 0x0d, 0xb8,  0xde, 0xad, 0xbe, 0xef,
         0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
         /* Prefix Information Option */
-        0x03, 0x04, 0x40, 0xc0,  0x00, 0x27, 0x8d, 0x00,
-        0x00, 0x09, 0x3a, 0x80,  0x00, 0x00, 0x00, 0x00,
+        0x03, 0x04, 0x40, 0xc0,  0x00, 0x00, 0x0e, 0x10,
+        0x00, 0x00, 0x07, 0x08,  0x00, 0x00, 0x00, 0x00,
         0x20, 0x01, 0x0d, 0xb8,  0x0b, 0x16, 0xd0, 0x0d,
         0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
         /* Prefix Information Option */
-        0x03, 0x04, 0x30, 0xc0,  0x00, 0x27, 0x8d, 0x00,
-        0x00, 0x09, 0x3a, 0x80,  0x00, 0x00, 0x00, 0x00,
+        0x03, 0x04, 0x30, 0xc0,  0x00, 0x00, 0x0e, 0x10,
+        0x00, 0x00, 0x07, 0x08,  0x00, 0x00, 0x00, 0x00,
         0x20, 0x01, 0x0d, 0xb8,  0xc0, 0x01, 0x0d, 0xad,
         0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
         /* Recursive DNS Server Option */
@@ -51,10 +51,8 @@
         0x72, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 };
 
-static sd_event_source *test_hangcheck;
 static bool test_stopped;
 static int test_fd[2];
-static sd_event_source *recv_router_advertisement;
 static struct {
         struct in6_addr address;
         unsigned char prefixlen;
@@ -101,18 +99,9 @@
 static const char *test_dnssl[] = { "lab.intra",
                                     NULL };
 
-static int test_rs_hangcheck(sd_event_source *s, uint64_t usec,
-                             void *userdata) {
-        assert_se(false);
-
-        return 0;
-}
-
-static void test_radv_prefix(void) {
+TEST(radv_prefix) {
         sd_radv_prefix *p;
 
-        printf("* %s\n", __FUNCTION__);
-
         assert_se(sd_radv_prefix_new(&p) >= 0);
 
         assert_se(sd_radv_prefix_set_onlink(NULL, true) < 0);
@@ -123,15 +112,15 @@
         assert_se(sd_radv_prefix_set_address_autoconfiguration(p, true) >= 0);
         assert_se(sd_radv_prefix_set_address_autoconfiguration(p, false) >= 0);
 
-        assert_se(sd_radv_prefix_set_valid_lifetime(NULL, true) < 0);
-        assert_se(sd_radv_prefix_set_valid_lifetime(p, ~0) >= 0);
-        assert_se(sd_radv_prefix_set_valid_lifetime(p, 42) >= 0);
-        assert_se(sd_radv_prefix_set_valid_lifetime(p, 0) >= 0);
+        assert_se(sd_radv_prefix_set_valid_lifetime(NULL, 1, 1) < 0);
+        assert_se(sd_radv_prefix_set_valid_lifetime(p, 0, 0) >= 0);
+        assert_se(sd_radv_prefix_set_valid_lifetime(p, 300 * USEC_PER_SEC, USEC_INFINITY) >= 0);
+        assert_se(sd_radv_prefix_set_valid_lifetime(p, 300 * USEC_PER_SEC, USEC_PER_YEAR) >= 0);
 
-        assert_se(sd_radv_prefix_set_preferred_lifetime(NULL, true) < 0);
-        assert_se(sd_radv_prefix_set_preferred_lifetime(p, ~0) >= 0);
-        assert_se(sd_radv_prefix_set_preferred_lifetime(p, 42) >= 0);
-        assert_se(sd_radv_prefix_set_preferred_lifetime(p, 0) >= 0);
+        assert_se(sd_radv_prefix_set_preferred_lifetime(NULL, 1, 1) < 0);
+        assert_se(sd_radv_prefix_set_preferred_lifetime(p, 0, 0) >= 0);
+        assert_se(sd_radv_prefix_set_preferred_lifetime(p, 300 * USEC_PER_SEC, USEC_INFINITY) >= 0);
+        assert_se(sd_radv_prefix_set_preferred_lifetime(p, 300 * USEC_PER_SEC, USEC_PER_YEAR) >= 0);
 
         assert_se(sd_radv_prefix_set_prefix(NULL, NULL, 0) < 0);
         assert_se(sd_radv_prefix_set_prefix(p, NULL, 0) < 0);
@@ -150,11 +139,9 @@
         assert_se(!p);
 }
 
-static void test_radv(void) {
+TEST(radv) {
         sd_radv *ra;
 
-        printf("* %s\n", __FUNCTION__);
-
         assert_se(sd_radv_new(&ra) >= 0);
         assert_se(ra);
 
@@ -180,7 +167,9 @@
 
         assert_se(sd_radv_set_router_lifetime(NULL, 0) < 0);
         assert_se(sd_radv_set_router_lifetime(ra, 0) >= 0);
-        assert_se(sd_radv_set_router_lifetime(ra, ~0) >= 0);
+        assert_se(sd_radv_set_router_lifetime(ra, USEC_INFINITY) < 0);
+        assert_se(sd_radv_set_router_lifetime(ra, USEC_PER_YEAR) < 0);
+        assert_se(sd_radv_set_router_lifetime(ra, 300 * USEC_PER_SEC) >= 0);
 
         assert_se(sd_radv_set_preference(NULL, 0) < 0);
         assert_se(sd_radv_set_preference(ra, SD_NDISC_PREFERENCE_LOW) >= 0);
@@ -189,7 +178,7 @@
         assert_se(sd_radv_set_preference(ra, ~0) < 0);
 
         assert_se(sd_radv_set_preference(ra, SD_NDISC_PREFERENCE_HIGH) >= 0);
-        assert_se(sd_radv_set_router_lifetime(ra, 42000) >= 0);
+        assert_se(sd_radv_set_router_lifetime(ra, 300 * USEC_PER_SEC) >= 0);
         assert_se(sd_radv_set_router_lifetime(ra, 0) < 0);
         assert_se(sd_radv_set_preference(ra, SD_NDISC_PREFERENCE_MEDIUM) >= 0);
         assert_se(sd_radv_set_router_lifetime(ra, 0) >= 0);
@@ -257,13 +246,13 @@
                 advertisement[7] = 0x00;
         }
 
-        printf ("Received Router Advertisement with lifetime %u\n",
+        printf ("Received Router Advertisement with lifetime %i\n",
                 (advertisement[6] << 8) + advertisement[7]);
 
         /* test only up to buf size, rest is not yet implemented */
         for (i = 0; i < sizeof(buf); i++) {
                 if (!(i % 8))
-                        printf("%3zd: ", i);
+                        printf("%3zu: ", i);
 
                 printf("0x%02x", buf[i]);
 
@@ -290,12 +279,10 @@
         return 0;
 }
 
-static void test_ra(void) {
-        sd_event *e;
-        sd_radv *ra;
-        unsigned i;
-
-        printf("* %s\n", __FUNCTION__);
+TEST(ra) {
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        _cleanup_(sd_event_source_unrefp) sd_event_source *recv_router_advertisement = NULL;
+        _cleanup_(sd_radv_unrefp) sd_radv *ra = NULL;
 
         assert_se(socketpair(AF_UNIX, SOCK_SEQPACKET | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) >= 0);
 
@@ -308,14 +295,14 @@
 
         assert_se(sd_radv_set_ifindex(ra, 42) >= 0);
         assert_se(sd_radv_set_mac(ra, &mac_addr) >= 0);
-        assert_se(sd_radv_set_router_lifetime(ra, 180) >= 0);
+        assert_se(sd_radv_set_router_lifetime(ra, 180 * USEC_PER_SEC) >= 0);
         assert_se(sd_radv_set_hop_limit(ra, 64) >= 0);
         assert_se(sd_radv_set_managed_information(ra, true) >= 0);
         assert_se(sd_radv_set_other_information(ra, true) >= 0);
         assert_se(sd_radv_set_rdnss(ra, 60, &test_rdnss, 1) >= 0);
         assert_se(sd_radv_set_dnssl(ra, 60, (char **)test_dnssl) >= 0);
 
-        for (i = 0; i < ELEMENTSOF(prefix); i++) {
+        for (unsigned i = 0; i < ELEMENTSOF(prefix); i++) {
                 sd_radv_prefix *p;
 
                 printf("Test prefix %u\n", i);
@@ -323,48 +310,29 @@
 
                 assert_se(sd_radv_prefix_set_prefix(p, &prefix[i].address,
                                                     prefix[i].prefixlen) >= 0);
-                if (prefix[i].valid)
-                        assert_se(sd_radv_prefix_set_valid_lifetime(p, prefix[i].valid) >= 0);
-                if (prefix[i].preferred)
-                        assert_se(sd_radv_prefix_set_preferred_lifetime(p, prefix[i].preferred) >= 0);
+                if (prefix[i].valid > 0)
+                        assert_se(sd_radv_prefix_set_valid_lifetime(p, prefix[i].valid * USEC_PER_SEC, USEC_INFINITY) >= 0);
+                if (prefix[i].preferred > 0)
+                        assert_se(sd_radv_prefix_set_preferred_lifetime(p, prefix[i].preferred * USEC_PER_SEC, USEC_INFINITY) >= 0);
 
-                assert_se((sd_radv_add_prefix(ra, p, false) >= 0) == prefix[i].successful);
-                assert_se(sd_radv_add_prefix(ra, p, false) < 0);
+                assert_se((sd_radv_add_prefix(ra, p) >= 0) == prefix[i].successful);
+                /* If the previous sd_radv_add_prefix() succeeds, then also the second call should also succeed. */
+                assert_se((sd_radv_add_prefix(ra, p) >= 0) == prefix[i].successful);
 
                 p = sd_radv_prefix_unref(p);
                 assert_se(!p);
         }
 
-        assert_se(sd_event_add_io(e, &recv_router_advertisement, test_fd[0],
-                                  EPOLLIN, radv_recv, ra) >= 0);
+        assert_se(sd_event_add_io(e, &recv_router_advertisement, test_fd[0], EPOLLIN, radv_recv, ra) >= 0);
+        assert_se(sd_event_source_set_io_fd_own(recv_router_advertisement, true) >= 0);
 
-        assert_se(sd_event_add_time_relative(
-                                  e, &test_hangcheck, clock_boottime_or_monotonic(),
-                                  2 *USEC_PER_SEC, 0,
-                                  test_rs_hangcheck, NULL) >= 0);
+        assert_se(sd_event_add_time_relative(e, NULL, CLOCK_BOOTTIME,
+                                             2 * USEC_PER_SEC, 0,
+                                             NULL, INT_TO_PTR(-ETIMEDOUT)) >= 0);
 
         assert_se(sd_radv_start(ra) >= 0);
 
-        sd_event_loop(e);
-
-        test_hangcheck = sd_event_source_unref(test_hangcheck);
-
-        ra = sd_radv_unref(ra);
-        assert_se(!ra);
-
-        close(test_fd[0]);
-
-        sd_event_unref(e);
+        assert_se(sd_event_loop(e) >= 0);
 }
 
-int main(int argc, char *argv[]) {
-
-        test_setup_logging(LOG_DEBUG);
-
-        test_radv_prefix();
-        test_radv();
-        test_ra();
-
-        printf("* done\n");
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/libsystemd-network/test-ndisc-rs.c b/src/libsystemd-network/test-ndisc-rs.c
index ce596bb..e501b64 100644
--- a/src/libsystemd-network/test-ndisc-rs.c
+++ b/src/libsystemd-network/test-ndisc-rs.c
@@ -10,6 +10,7 @@
 #include "sd-ndisc.h"
 
 #include "alloc-util.h"
+#include "fd-util.h"
 #include "hexdecoct.h"
 #include "icmp6-util.h"
 #include "socket-util.h"
@@ -22,7 +23,6 @@
 };
 
 static bool verbose = false;
-static sd_event_source *test_hangcheck;
 static int test_fd[2];
 static sd_ndisc *test_timeout_nd;
 
@@ -31,7 +31,6 @@
 
 static void router_dump(sd_ndisc_router *rt) {
         struct in6_addr addr;
-        char buf[FORMAT_TIMESTAMP_MAX];
         uint8_t hop_limit;
         uint64_t t, flags;
         uint32_t mtu;
@@ -45,7 +44,7 @@
         assert_se(sd_ndisc_router_get_address(rt, &addr) == -ENODATA);
 
         assert_se(sd_ndisc_router_get_timestamp(rt, CLOCK_REALTIME, &t) >= 0);
-        log_info("Timestamp: %s", format_timestamp(buf, sizeof(buf), t));
+        log_info("Timestamp: %s", FORMAT_TIMESTAMP(t));
 
         assert_se(sd_ndisc_router_get_timestamp(rt, CLOCK_MONOTONIC, &t) >= 0);
         log_info("Monotonic: %" PRIu64, t);
@@ -107,7 +106,6 @@
                         unsigned prefix_len;
                         uint8_t pfl;
                         struct in6_addr a;
-                        char buff[INET6_ADDRSTRLEN];
 
                         assert_se(sd_ndisc_router_prefix_get_valid_lifetime(rt, &lifetime_valid) >= 0);
                         log_info("Valid Lifetime: %" PRIu32, lifetime_valid);
@@ -124,7 +122,7 @@
                         log_info("Prefix Length: %u", prefix_len);
 
                         assert_se(sd_ndisc_router_prefix_get_address(rt, &a) >= 0);
-                        log_info("Prefix: %s", inet_ntop(AF_INET6, &a, buff, sizeof(buff)));
+                        log_info("Prefix: %s", IN6_ADDR_TO_STRING(&a));
 
                         break;
                 }
@@ -137,10 +135,8 @@
                         n = sd_ndisc_router_rdnss_get_addresses(rt, &a);
                         assert_se(n > 0);
 
-                        for (i = 0; i < n; i++) {
-                                char buff[INET6_ADDRSTRLEN];
-                                log_info("DNS: %s", inet_ntop(AF_INET6, a + i, buff, sizeof(buff)));
-                        }
+                        for (i = 0; i < n; i++)
+                                log_info("DNS: %s", IN6_ADDR_TO_STRING(a + i));
 
                         assert_se(sd_ndisc_router_rdnss_get_lifetime(rt, &lt) >= 0);
                         log_info("Lifetime: %" PRIu32, lt);
@@ -167,13 +163,6 @@
         }
 }
 
-static int test_rs_hangcheck(sd_event_source *s, uint64_t usec,
-                             void *userdata) {
-        assert_se(false);
-
-        return 0;
-}
-
 int icmp6_bind_router_solicitation(int ifindex) {
         assert_se(ifindex == 42);
 
@@ -243,7 +232,6 @@
                 ND_RA_FLAG_MANAGED
         };
         uint64_t flags;
-        uint32_t mtu;
 
         assert_se(nd);
 
@@ -264,17 +252,12 @@
                 return;
         }
 
-        assert_se(sd_ndisc_get_mtu(nd, &mtu) == -ENODATA);
-
         sd_event_exit(e, 0);
 }
 
-static void test_rs(void) {
-        sd_event *e;
-        sd_ndisc *nd;
-
-        if (verbose)
-                printf("* %s\n", __FUNCTION__);
+TEST(rs) {
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        _cleanup_(sd_ndisc_unrefp) sd_ndisc *nd = NULL;
 
         send_ra_function = send_ra;
 
@@ -289,28 +272,21 @@
         assert_se(sd_ndisc_set_mac(nd, &mac_addr) >= 0);
         assert_se(sd_ndisc_set_callback(nd, test_callback, e) >= 0);
 
-        assert_se(sd_event_add_time_relative(
-                                  e, &test_hangcheck, clock_boottime_or_monotonic(),
-                                  30 * USEC_PER_SEC, 0,
-                                  test_rs_hangcheck, NULL) >= 0);
+        assert_se(sd_event_add_time_relative(e, NULL, CLOCK_BOOTTIME,
+                                             30 * USEC_PER_SEC, 0,
+                                             NULL, INT_TO_PTR(-ETIMEDOUT)) >= 0);
 
         assert_se(sd_ndisc_stop(nd) >= 0);
         assert_se(sd_ndisc_start(nd) >= 0);
         assert_se(sd_ndisc_start(nd) >= 0);
         assert_se(sd_ndisc_stop(nd) >= 0);
+        test_fd[1] = safe_close(test_fd[1]);
 
         assert_se(sd_ndisc_start(nd) >= 0);
 
-        sd_event_loop(e);
+        assert_se(sd_event_loop(e) >= 0);
 
-        test_hangcheck = sd_event_source_unref(test_hangcheck);
-
-        nd = sd_ndisc_unref(nd);
-        assert_se(!nd);
-
-        close(test_fd[1]);
-
-        sd_event_unref(e);
+        test_fd[1] = safe_close(test_fd[1]);
 }
 
 static int test_timeout_value(uint8_t flags) {
@@ -318,9 +294,6 @@
         static usec_t last = 0;
         sd_ndisc *nd = test_timeout_nd;
         usec_t min, max;
-        char time_string_min[FORMAT_TIMESPAN_MAX];
-        char time_string_nd[FORMAT_TIMESPAN_MAX];
-        char time_string_max[FORMAT_TIMESPAN_MAX];
 
         assert_se(nd);
         assert_se(nd->event);
@@ -348,17 +321,12 @@
                         NDISC_MAX_ROUTER_SOLICITATION_INTERVAL / 10;
         }
 
-        format_timespan(time_string_min, FORMAT_TIMESPAN_MAX,
-                        min, USEC_PER_MSEC);
-        format_timespan(time_string_nd, FORMAT_TIMESPAN_MAX,
-                        nd->retransmit_time, USEC_PER_MSEC);
-        format_timespan(time_string_max, FORMAT_TIMESPAN_MAX,
-                        max, USEC_PER_MSEC);
-
         log_info("backoff timeout interval %2d %s%s <= %s <= %s",
                  count,
-                 (last * 2 > NDISC_MAX_ROUTER_SOLICITATION_INTERVAL)? "(max) ": "",
-                 time_string_min, time_string_nd, time_string_max);
+                 last * 2 > NDISC_MAX_ROUTER_SOLICITATION_INTERVAL ? "(max) ": "",
+                 FORMAT_TIMESPAN(min, USEC_PER_MSEC),
+                 FORMAT_TIMESPAN(nd->retransmit_time, USEC_PER_MSEC),
+                 FORMAT_TIMESPAN(max, USEC_PER_MSEC));
 
         assert_se(min <= nd->retransmit_time);
         assert_se(max >= nd->retransmit_time);
@@ -370,12 +338,9 @@
         return 0;
 }
 
-static void test_timeout(void) {
-        sd_event *e;
-        sd_ndisc *nd;
-
-        if (verbose)
-                printf("* %s\n", __FUNCTION__);
+TEST(timeout) {
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        _cleanup_(sd_ndisc_unrefp) sd_ndisc *nd = NULL;
 
         send_ra_function = test_timeout_value;
 
@@ -391,28 +356,15 @@
         assert_se(sd_ndisc_set_ifindex(nd, 42) >= 0);
         assert_se(sd_ndisc_set_mac(nd, &mac_addr) >= 0);
 
-        assert_se(sd_event_add_time_relative(
-                                  e, &test_hangcheck, clock_boottime_or_monotonic(),
-                                  30 * USEC_PER_SEC, 0,
-                                  test_rs_hangcheck, NULL) >= 0);
+        assert_se(sd_event_add_time_relative(e, NULL, CLOCK_BOOTTIME,
+                                             30 * USEC_PER_SEC, 0,
+                                             NULL, INT_TO_PTR(-ETIMEDOUT)) >= 0);
 
         assert_se(sd_ndisc_start(nd) >= 0);
 
-        sd_event_loop(e);
+        assert_se(sd_event_loop(e) >= 0);
 
-        test_hangcheck = sd_event_source_unref(test_hangcheck);
-
-        nd = sd_ndisc_unref(nd);
-
-        sd_event_unref(e);
+        test_fd[1] = safe_close(test_fd[1]);
 }
 
-int main(int argc, char *argv[]) {
-
-        test_setup_logging(LOG_DEBUG);
-
-        test_rs();
-        test_timeout();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/libsystemd-network/test-sd-dhcp-lease.c b/src/libsystemd-network/test-sd-dhcp-lease.c
index 9f13226..3eea1b0 100644
--- a/src/libsystemd-network/test-sd-dhcp-lease.c
+++ b/src/libsystemd-network/test-sd-dhcp-lease.c
@@ -6,13 +6,14 @@
 #include "macro.h"
 #include "string-util.h"
 #include "strv.h"
+#include "tests.h"
 
 /* According to RFC1035 section 4.1.4, a domain name in a message can be either:
  *      - a sequence of labels ending in a zero octet
  *      - a pointer
  *      - a sequence of labels ending with a pointer
  */
-static void test_dhcp_lease_parse_search_domains_basic(void) {
+TEST(dhcp_lease_parse_search_domains_basic) {
         int r;
         _cleanup_strv_free_ char **domains = NULL;
         static const uint8_t optionbuf[] = {
@@ -26,7 +27,7 @@
         assert_se(streq(domains[1], "ABCD.EFG"));
 }
 
-static void test_dhcp_lease_parse_search_domains_ptr(void) {
+TEST(dhcp_lease_parse_search_domains_ptr) {
         int r;
         _cleanup_strv_free_ char **domains = NULL;
         static const uint8_t optionbuf[] = {
@@ -39,7 +40,7 @@
         assert_se(streq(domains[1], "FOO"));
 }
 
-static void test_dhcp_lease_parse_search_domains_labels_and_ptr(void) {
+TEST(dhcp_lease_parse_search_domains_labels_and_ptr) {
         int r;
         _cleanup_strv_free_ char **domains = NULL;
         static const uint8_t optionbuf[] = {
@@ -55,7 +56,7 @@
 
 /* Tests for exceptions. */
 
-static void test_dhcp_lease_parse_search_domains_no_data(void) {
+TEST(dhcp_lease_parse_search_domains_no_data) {
         _cleanup_strv_free_ char **domains = NULL;
         static const uint8_t optionbuf[3] = {0, 0, 0};
 
@@ -63,7 +64,7 @@
         assert_se(dhcp_lease_parse_search_domains(optionbuf, 0, &domains) == -ENODATA);
 }
 
-static void test_dhcp_lease_parse_search_domains_loops(void) {
+TEST(dhcp_lease_parse_search_domains_loops) {
         _cleanup_strv_free_ char **domains = NULL;
         static const uint8_t optionbuf[] = {
                 0x03, 'F', 'O', 'O', 0x00, 0x03, 'B', 'A', 'R', 0xC0, 0x06,
@@ -72,7 +73,7 @@
         assert_se(dhcp_lease_parse_search_domains(optionbuf, sizeof(optionbuf), &domains) == -EBADMSG);
 }
 
-static void test_dhcp_lease_parse_search_domains_wrong_len(void) {
+TEST(dhcp_lease_parse_search_domains_wrong_len) {
         _cleanup_strv_free_ char **domains = NULL;
         static const uint8_t optionbuf[] = {
                 0x03, 'F', 'O', 'O', 0x03, 'B', 'A', 'R', 0x00,
@@ -82,12 +83,4 @@
         assert_se(dhcp_lease_parse_search_domains(optionbuf, sizeof(optionbuf) - 5, &domains) == -EBADMSG);
 }
 
-int main(int argc, char *argv[]) {
-        test_dhcp_lease_parse_search_domains_basic();
-        test_dhcp_lease_parse_search_domains_ptr();
-        test_dhcp_lease_parse_search_domains_labels_and_ptr();
-        test_dhcp_lease_parse_search_domains_no_data();
-        test_dhcp_lease_parse_search_domains_loops();
-        test_dhcp_lease_parse_search_domains_wrong_len();
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/libsystemd/disable-mempool.c b/src/libsystemd/disable-mempool.c
deleted file mode 100644
index 1baf91f..0000000
--- a/src/libsystemd/disable-mempool.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "mempool.h"
-
-const bool mempool_use_allowed = false;
diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym
index 3730db6..0f2230a 100644
--- a/src/libsystemd/libsystemd.sym
+++ b/src/libsystemd/libsystemd.sym
@@ -762,3 +762,52 @@
         sd_device_new_from_ifname;
         sd_device_new_from_ifindex;
 } LIBSYSTEMD_248;
+
+LIBSYSTEMD_250 {
+global:
+        sd_device_get_diskseq;
+        sd_event_add_inotify_fd;
+        sd_event_source_set_ratelimit_expire_callback;
+} LIBSYSTEMD_249;
+
+LIBSYSTEMD_251 {
+global:
+        sd_id128_to_uuid_string;
+        sd_device_new_from_devname;
+        sd_device_new_from_path;
+        sd_device_open;
+        sd_device_enumerator_add_nomatch_sysname;
+} LIBSYSTEMD_250;
+
+LIBSYSTEMD_252 {
+global:
+        sd_bus_message_read_strv_extend;
+        sd_bus_error_setfv;
+
+        sd_device_new_child;
+        sd_device_get_child_first;
+        sd_device_get_child_next;
+        sd_device_monitor_set_description;
+        sd_device_monitor_get_description;
+
+        sd_event_set_signal_exit;
+
+        sd_id128_string_equal;
+
+        sd_hwdb_new_from_path;
+} LIBSYSTEMD_251;
+
+LIBSYSTEMD_253 {
+global:
+        sd_bus_emit_signal_to;
+        sd_bus_emit_signal_tov;
+        sd_bus_message_new_signal_to;
+        sd_pidfd_get_cgroup;
+        sd_pidfd_get_machine_name;
+        sd_pidfd_get_owner_uid;
+        sd_pidfd_get_session;
+        sd_pidfd_get_slice;
+        sd_pidfd_get_unit;
+        sd_pidfd_get_user_slice;
+        sd_pidfd_get_user_unit;
+} LIBSYSTEMD_252;
diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build
index 3be5b3e..e2eb88f 100644
--- a/src/libsystemd/meson.build
+++ b/src/libsystemd/meson.build
@@ -2,33 +2,21 @@
 
 sd_journal_sources = files(
         'sd-journal/audit-type.c',
-        'sd-journal/audit-type.h',
         'sd-journal/catalog.c',
-        'sd-journal/catalog.h',
-        'sd-journal/compress.c',
-        'sd-journal/compress.h',
-        'sd-journal/journal-def.h',
         'sd-journal/journal-file.c',
-        'sd-journal/journal-file.h',
-        'sd-journal/journal-internal.h',
         'sd-journal/journal-send.c',
-        'sd-journal/journal-send.h',
         'sd-journal/journal-vacuum.c',
-        'sd-journal/journal-vacuum.h',
         'sd-journal/journal-verify.c',
-        'sd-journal/journal-verify.h',
         'sd-journal/lookup3.c',
-        'sd-journal/lookup3.h',
         'sd-journal/mmap-cache.c',
-        'sd-journal/mmap-cache.h',
-        'sd-journal/sd-journal.c')
+        'sd-journal/sd-journal.c',
+)
 
 if conf.get('HAVE_GCRYPT') == 1
         sd_journal_sources += files(
                 'sd-journal/fsprg.c',
-                'sd-journal/fsprg.h',
                 'sd-journal/journal-authenticate.c',
-                'sd-journal/journal-authenticate.h')
+        )
 endif
 
 audit_type_includes = [config_h,
@@ -56,11 +44,10 @@
 
 ############################################################
 
-id128_sources = files('''
-        sd-id128/id128-util.c
-        sd-id128/id128-util.h
-        sd-id128/sd-id128.c
-'''.split())
+id128_sources = files(
+        'sd-id128/id128-util.c',
+        'sd-id128/sd-id128.c',
+)
 
 ############################################################
 
@@ -68,12 +55,10 @@
 
 ############################################################
 
-sd_event_sources = files('''
-        sd-event/event-source.h
-        sd-event/event-util.c
-        sd-event/event-util.h
-        sd-event/sd-event.c
-'''.split())
+sd_event_sources = files(
+        'sd-event/event-util.c',
+        'sd-event/sd-event.c',
+)
 
 ############################################################
 
@@ -81,250 +66,192 @@
 
 ############################################################
 
-libsystemd_sources = files('''
-        sd-bus/bus-common-errors.c
-        sd-bus/bus-common-errors.h
-        sd-bus/bus-container.c
-        sd-bus/bus-container.h
-        sd-bus/bus-control.c
-        sd-bus/bus-control.h
-        sd-bus/bus-convenience.c
-        sd-bus/bus-creds.c
-        sd-bus/bus-creds.h
-        sd-bus/bus-dump.c
-        sd-bus/bus-dump.h
-        sd-bus/bus-error.c
-        sd-bus/bus-error.h
-        sd-bus/bus-gvariant.c
-        sd-bus/bus-gvariant.h
-        sd-bus/bus-internal.c
-        sd-bus/bus-internal.h
-        sd-bus/bus-introspect.c
-        sd-bus/bus-introspect.h
-        sd-bus/bus-kernel.c
-        sd-bus/bus-kernel.h
-        sd-bus/bus-match.c
-        sd-bus/bus-match.h
-        sd-bus/bus-message.c
-        sd-bus/bus-message.h
-        sd-bus/bus-objects.c
-        sd-bus/bus-objects.h
-        sd-bus/bus-protocol.h
-        sd-bus/bus-signature.c
-        sd-bus/bus-signature.h
-        sd-bus/bus-slot.c
-        sd-bus/bus-slot.h
-        sd-bus/bus-socket.c
-        sd-bus/bus-socket.h
-        sd-bus/bus-track.c
-        sd-bus/bus-track.h
-        sd-bus/bus-type.c
-        sd-bus/bus-type.h
-        sd-bus/sd-bus.c
-        sd-device/device-enumerator-private.h
-        sd-device/device-enumerator.c
-        sd-device/device-internal.h
-        sd-device/device-monitor-private.h
-        sd-device/device-monitor.c
-        sd-device/device-private.c
-        sd-device/device-private.h
-        sd-device/device-util.c
-        sd-device/device-util.h
-        sd-device/sd-device.c
-        sd-hwdb/hwdb-internal.h
-        sd-hwdb/sd-hwdb.c
-        sd-netlink/generic-netlink.c
-        sd-netlink/generic-netlink.h
-        sd-netlink/netlink-internal.h
-        sd-netlink/netlink-message.c
-        sd-netlink/netlink-slot.c
-        sd-netlink/netlink-slot.h
-        sd-netlink/netlink-socket.c
-        sd-netlink/netlink-types.c
-        sd-netlink/netlink-types.h
-        sd-netlink/netlink-util.c
-        sd-netlink/netlink-util.h
-        sd-netlink/nfnl-message.c
-        sd-netlink/rtnl-message.c
-        sd-netlink/sd-netlink.c
-        sd-network/network-util.c
-        sd-network/network-util.h
-        sd-network/sd-network.c
-        sd-path/sd-path.c
-        sd-resolve/resolve-private.h
-        sd-resolve/sd-resolve.c
-        sd-utf8/sd-utf8.c
-'''.split()) + sd_journal_sources + id128_sources + sd_daemon_sources + sd_event_sources + sd_login_sources
+libsystemd_sources = files(
+        'sd-bus/bus-common-errors.c',
+        'sd-bus/bus-container.c',
+        'sd-bus/bus-control.c',
+        'sd-bus/bus-convenience.c',
+        'sd-bus/bus-creds.c',
+        'sd-bus/bus-dump.c',
+        'sd-bus/bus-error.c',
+        'sd-bus/bus-internal.c',
+        'sd-bus/bus-introspect.c',
+        'sd-bus/bus-kernel.c',
+        'sd-bus/bus-match.c',
+        'sd-bus/bus-message.c',
+        'sd-bus/bus-objects.c',
+        'sd-bus/bus-signature.c',
+        'sd-bus/bus-slot.c',
+        'sd-bus/bus-socket.c',
+        'sd-bus/bus-track.c',
+        'sd-bus/bus-type.c',
+        'sd-bus/sd-bus.c',
+        'sd-device/device-enumerator.c',
+        'sd-device/device-filter.c',
+        'sd-device/device-monitor.c',
+        'sd-device/device-private.c',
+        'sd-device/device-util.c',
+        'sd-device/sd-device.c',
+        'sd-hwdb/sd-hwdb.c',
+        'sd-netlink/netlink-genl.c',
+        'sd-netlink/netlink-message-nfnl.c',
+        'sd-netlink/netlink-message-rtnl.c',
+        'sd-netlink/netlink-message.c',
+        'sd-netlink/netlink-slot.c',
+        'sd-netlink/netlink-socket.c',
+        'sd-netlink/netlink-types-genl.c',
+        'sd-netlink/netlink-types-nfnl.c',
+        'sd-netlink/netlink-types-rtnl.c',
+        'sd-netlink/netlink-types.c',
+        'sd-netlink/netlink-util.c',
+        'sd-netlink/sd-netlink.c',
+        'sd-network/network-util.c',
+        'sd-network/sd-network.c',
+        'sd-path/sd-path.c',
+        'sd-resolve/sd-resolve.c',
+) + sd_journal_sources + id128_sources + sd_daemon_sources + sd_event_sources + sd_login_sources
 
-disable_mempool_c = files('disable-mempool.c')
 
 libsystemd_c_args = ['-fvisibility=default']
 
 libsystemd_static = static_library(
         'systemd_static',
         libsystemd_sources,
-        install : false,
         include_directories : libsystemd_includes,
-        link_with : libbasic,
+        c_args : libsystemd_c_args,
+        link_with : [libbasic,
+                     libbasic_compress],
         dependencies : [threads,
                         librt],
-        c_args : libsystemd_c_args)
+        build_by_default : false)
 
 libsystemd_sym = files('libsystemd.sym')
-libsystemd_sym_path = join_paths(meson.current_source_dir(), 'libsystemd.sym')
+libsystemd_sym_path = meson.current_source_dir() / 'libsystemd.sym'
 
 static_libsystemd = get_option('static-libsystemd')
 static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
 
-custom_target(
+libsystemd_pc = custom_target(
         'libsystemd.pc',
         input : 'libsystemd.pc.in',
         output : 'libsystemd.pc',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : pkgconfiglibdir != 'no',
+        install_tag : 'devel',
         install_dir : pkgconfiglibdir)
 
 ############################################################
 
 tests += [
-        [['src/libsystemd/sd-journal/test-journal.c']],
+        [files('sd-journal/test-journal-file.c')],
 
-        [['src/libsystemd/sd-journal/test-journal-send.c']],
+        [files('sd-journal/test-journal-send.c')],
 
-        [['src/libsystemd/sd-journal/test-journal-match.c']],
+        [files('sd-journal/test-journal-match.c')],
 
-        [['src/libsystemd/sd-journal/test-journal-enum.c'],
+        [files('sd-journal/test-journal-enum.c'),
          [], [], [], '', 'timeout=360'],
 
-        [['src/libsystemd/sd-journal/test-journal-stream.c']],
+        [files('sd-journal/test-journal-init.c')],
 
-        [['src/libsystemd/sd-journal/test-journal-flush.c']],
+        [files('sd-journal/test-mmap-cache.c')],
 
-        [['src/libsystemd/sd-journal/test-journal-init.c']],
+        [files('sd-journal/test-catalog.c')],
 
-        [['src/libsystemd/sd-journal/test-journal-verify.c']],
-
-        [['src/libsystemd/sd-journal/test-journal-interleaving.c']],
-
-        [['src/libsystemd/sd-journal/test-mmap-cache.c']],
-
-        [['src/libsystemd/sd-journal/test-catalog.c']],
-
-        [['src/libsystemd/sd-journal/test-compress.c'],
-         [],
-         [liblz4,
-          libzstd,
-          libxz]],
-
-        [['src/libsystemd/sd-journal/test-compress-benchmark.c'],
-         [],
-         [liblz4,
-          libzstd,
-          libxz],
-         [], '', 'timeout=90'],
-
-        [['src/libsystemd/sd-journal/test-audit-type.c']],
+        [files('sd-journal/test-audit-type.c')],
 ]
 
 ############################################################
 
 tests += [
-        [['src/libsystemd/sd-bus/test-bus-address.c'],
+        [files('sd-bus/test-bus-address.c'),
          [],
          [threads]],
 
-        [['src/libsystemd/sd-bus/test-bus-marshal.c'],
+        [files('sd-bus/test-bus-marshal.c'),
          [],
          [threads,
           libglib,
           libgobject,
           libgio,
-          libdbus]],
+          libdbus,
+          libm]],
 
-        [['src/libsystemd/sd-bus/test-bus-signature.c'],
+        [files('sd-bus/test-bus-signature.c'),
          [],
          [threads]],
 
-        [['src/libsystemd/sd-bus/test-bus-queue-ref-cycle.c'],
+        [files('sd-bus/test-bus-queue-ref-cycle.c'),
          [],
          [threads]],
 
-        [['src/libsystemd/sd-bus/test-bus-watch-bind.c'],
+        [files('sd-bus/test-bus-watch-bind.c'),
          [],
          [threads],
          [], '', 'timeout=120'],
 
-        [['src/libsystemd/sd-bus/test-bus-chat.c'],
+        [files('sd-bus/test-bus-chat.c'),
          [],
          [threads]],
 
-        [['src/libsystemd/sd-bus/test-bus-cleanup.c'],
+        [files('sd-bus/test-bus-cleanup.c'),
          [],
          [threads,
           libseccomp]],
 
-        [['src/libsystemd/sd-bus/test-bus-track.c'],
+        [files('sd-bus/test-bus-track.c'),
          [],
          [libseccomp]],
 
-        [['src/libsystemd/sd-bus/test-bus-server.c'],
+        [files('sd-bus/test-bus-server.c'),
          [],
          [threads]],
 
-        [['src/libsystemd/sd-bus/test-bus-objects.c'],
+        [files('sd-bus/test-bus-objects.c'),
          [],
          [threads]],
 
-        [['src/libsystemd/sd-bus/test-bus-vtable.c',
-          'src/libsystemd/sd-bus/test-vtable-data.h']],
+        [files('sd-bus/test-bus-vtable.c')],
 
-        [['src/libsystemd/sd-bus/test-bus-gvariant.c'],
-         [],
-         [libglib,
-          libgobject,
-          libgio]],
+        [files('sd-bus/test-bus-creds.c')],
 
-        [['src/libsystemd/sd-bus/test-bus-creds.c']],
+        [files('sd-bus/test-bus-match.c')],
 
-        [['src/libsystemd/sd-bus/test-bus-match.c']],
-
-        [['src/libsystemd/sd-bus/test-bus-benchmark.c'],
+        [files('sd-bus/test-bus-benchmark.c'),
          [],
          [threads],
          [], '', 'manual'],
 
-        [['src/libsystemd/sd-bus/test-bus-introspect.c',
-          'src/libsystemd/sd-bus/test-vtable-data.h']],
+        [files('sd-bus/test-bus-introspect.c')],
 
-        [['src/libsystemd/sd-event/test-event.c']],
+        [files('sd-event/test-event.c')],
 
-        [['src/libsystemd/sd-netlink/test-netlink.c']],
+        [files('sd-netlink/test-netlink.c')],
 
-        [['src/libsystemd/sd-resolve/test-resolve.c'],
+        [files('sd-resolve/test-resolve.c'),
          [],
          [threads],
          [], '', 'timeout=120'],
 
-        [['src/libsystemd/sd-login/test-login.c']],
+        [files('sd-login/test-login.c')],
 
-        [['src/libsystemd/sd-device/test-sd-device.c']],
+        [files('sd-device/test-sd-device.c')],
 
-        [['src/libsystemd/sd-device/test-device-util.c']],
+        [files('sd-device/test-device-util.c')],
 
-        [['src/libsystemd/sd-device/test-sd-device-monitor.c']],
+        [files('sd-device/test-sd-device-monitor.c')],
 ]
 
 if cxx_cmd != ''
         tests += [
-                [['src/libsystemd/sd-bus/test-bus-vtable-cc.cc']],
+                [files('sd-bus/test-bus-vtable-cc.cc')],
         ]
 endif
 
 ############################################################
 
 fuzzers += [
-        [['src/libsystemd/sd-bus/fuzz-bus-message.c']],
+        [files('sd-bus/fuzz-bus-message.c')],
 
-        [['src/libsystemd/sd-bus/fuzz-bus-match.c']],
+        [files('sd-bus/fuzz-bus-match.c')],
 ]
diff --git a/src/libsystemd/sd-bus/bus-common-errors.c b/src/libsystemd/sd-bus/bus-common-errors.c
index 43f9a7b..0eaedec 100644
--- a/src/libsystemd/sd-bus/bus-common-errors.c
+++ b/src/libsystemd/sd-bus/bus-common-errors.c
@@ -80,24 +80,24 @@
         SD_BUS_ERROR_MAP(BUS_ERROR_NO_SUCH_DNSSD_SERVICE,        ENOENT),
         SD_BUS_ERROR_MAP(BUS_ERROR_DNSSD_SERVICE_EXISTS,         EEXIST),
 
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "FORMERR",               EBADMSG),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "SERVFAIL",              EHOSTDOWN),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "NXDOMAIN",              ENXIO),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "NOTIMP",                ENOSYS),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "REFUSED",               EACCES),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "YXDOMAIN",              EEXIST),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "YRRSET",                EEXIST),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "NXRRSET",               ENOENT),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "NOTAUTH",               EACCES),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "NOTZONE",               EREMOTE),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "BADVERS",               EBADMSG),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "BADKEY",                EKEYREJECTED),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "BADTIME",               EBADMSG),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "BADMODE",               EBADMSG),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "BADNAME",               EBADMSG),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "BADALG",                EBADMSG),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "BADTRUNC",              EBADMSG),
-        SD_BUS_ERROR_MAP(_BUS_ERROR_DNS "BADCOOKIE",             EBADR),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_FORMERR,                  EBADMSG),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_SERVFAIL,                 EHOSTDOWN),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_NXDOMAIN,                 ENXIO),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_NOTIMP,                   ENOSYS),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_REFUSED,                  EACCES),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_YXDOMAIN,                 EEXIST),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_YRRSET,                   EEXIST),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_NXRRSET,                  ENOENT),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_NOTAUTH,                  EACCES),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_NOTZONE,                  EREMOTE),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_BADVERS,                  EBADMSG),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_BADKEY,                   EKEYREJECTED),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_BADTIME,                  EBADMSG),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_BADMODE,                  EBADMSG),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_BADNAME,                  EBADMSG),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_BADALG,                   EBADMSG),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_BADTRUNC,                 EBADMSG),
+        SD_BUS_ERROR_MAP(BUS_ERROR_DNS_BADCOOKIE,                EBADR),
 
         SD_BUS_ERROR_MAP(BUS_ERROR_NO_SUCH_TRANSFER,             ENXIO),
         SD_BUS_ERROR_MAP(BUS_ERROR_TRANSFER_IN_PROGRESS,         EBUSY),
@@ -142,6 +142,8 @@
         SD_BUS_ERROR_MAP(BUS_ERROR_TOO_MANY_OPERATIONS,          ENOBUFS),
         SD_BUS_ERROR_MAP(BUS_ERROR_AUTHENTICATION_LIMIT_HIT,     ETOOMANYREFS),
         SD_BUS_ERROR_MAP(BUS_ERROR_HOME_CANT_AUTHENTICATE,       EKEYREVOKED),
+        SD_BUS_ERROR_MAP(BUS_ERROR_HOME_IN_USE,                  EADDRINUSE),
+        SD_BUS_ERROR_MAP(BUS_ERROR_REBALANCE_NOT_NEEDED,         EALREADY),
 
         SD_BUS_ERROR_MAP_END
 };
diff --git a/src/libsystemd/sd-bus/bus-common-errors.h b/src/libsystemd/sd-bus/bus-common-errors.h
index fd8f0c2..b6c2e93 100644
--- a/src/libsystemd/sd-bus/bus-common-errors.h
+++ b/src/libsystemd/sd-bus/bus-common-errors.h
@@ -20,6 +20,7 @@
 #define BUS_ERROR_UNIT_MASKED                  "org.freedesktop.systemd1.UnitMasked"
 #define BUS_ERROR_UNIT_GENERATED               "org.freedesktop.systemd1.UnitGenerated"
 #define BUS_ERROR_UNIT_LINKED                  "org.freedesktop.systemd1.UnitLinked"
+#define BUS_ERROR_UNIT_BAD_PATH                "org.freedesktop.systemd1.UnitBadPath"
 #define BUS_ERROR_JOB_TYPE_NOT_APPLICABLE      "org.freedesktop.systemd1.JobTypeNotApplicable"
 #define BUS_ERROR_NO_ISOLATION                 "org.freedesktop.systemd1.NoIsolation"
 #define BUS_ERROR_SHUTTING_DOWN                "org.freedesktop.systemd1.ShuttingDown"
@@ -30,6 +31,7 @@
 #define BUS_ERROR_NOTHING_TO_CLEAN             "org.freedesktop.systemd1.NothingToClean"
 #define BUS_ERROR_UNIT_BUSY                    "org.freedesktop.systemd1.UnitBusy"
 #define BUS_ERROR_UNIT_INACTIVE                "org.freedesktop.systemd1.UnitInactive"
+#define BUS_ERROR_FREEZE_CANCELLED             "org.freedesktop.systemd1.FreezeCancelled"
 
 #define BUS_ERROR_NO_SUCH_MACHINE              "org.freedesktop.machine1.NoSuchMachine"
 #define BUS_ERROR_NO_SUCH_IMAGE                "org.freedesktop.machine1.NoSuchImage"
@@ -77,7 +79,26 @@
 #define BUS_ERROR_STUB_LOOP                    "org.freedesktop.resolve1.StubLoop"
 #define BUS_ERROR_NO_SUCH_DNSSD_SERVICE        "org.freedesktop.resolve1.NoSuchDnssdService"
 #define BUS_ERROR_DNSSD_SERVICE_EXISTS         "org.freedesktop.resolve1.DnssdServiceExists"
+
 #define _BUS_ERROR_DNS                         "org.freedesktop.resolve1.DnsError."
+#define BUS_ERROR_DNS_FORMERR                  _BUS_ERROR_DNS "FORMERR"
+#define BUS_ERROR_DNS_SERVFAIL                 _BUS_ERROR_DNS "SERVFAIL"
+#define BUS_ERROR_DNS_NXDOMAIN                 _BUS_ERROR_DNS "NXDOMAIN"
+#define BUS_ERROR_DNS_NOTIMP                   _BUS_ERROR_DNS "NOTIMP"
+#define BUS_ERROR_DNS_REFUSED                  _BUS_ERROR_DNS "REFUSED"
+#define BUS_ERROR_DNS_YXDOMAIN                 _BUS_ERROR_DNS "YXDOMAIN"
+#define BUS_ERROR_DNS_YRRSET                   _BUS_ERROR_DNS "YRRSET"
+#define BUS_ERROR_DNS_NXRRSET                  _BUS_ERROR_DNS "NXRRSET"
+#define BUS_ERROR_DNS_NOTAUTH                  _BUS_ERROR_DNS "NOTAUTH"
+#define BUS_ERROR_DNS_NOTZONE                  _BUS_ERROR_DNS "NOTZONE"
+#define BUS_ERROR_DNS_BADVERS                  _BUS_ERROR_DNS "BADVERS"
+#define BUS_ERROR_DNS_BADKEY                   _BUS_ERROR_DNS "BADKEY"
+#define BUS_ERROR_DNS_BADTIME                  _BUS_ERROR_DNS "BADTIME"
+#define BUS_ERROR_DNS_BADMODE                  _BUS_ERROR_DNS "BADMODE"
+#define BUS_ERROR_DNS_BADNAME                  _BUS_ERROR_DNS "BADNAME"
+#define BUS_ERROR_DNS_BADALG                   _BUS_ERROR_DNS "BADALG"
+#define BUS_ERROR_DNS_BADTRUNC                 _BUS_ERROR_DNS "BADTRUNC"
+#define BUS_ERROR_DNS_BADCOOKIE                _BUS_ERROR_DNS "BADCOOKIE"
 
 #define BUS_ERROR_NO_SUCH_TRANSFER             "org.freedesktop.import1.NoSuchTransfer"
 #define BUS_ERROR_TRANSFER_IN_PROGRESS         "org.freedesktop.import1.TransferInProgress"
@@ -126,5 +147,7 @@
 #define BUS_ERROR_TOO_MANY_OPERATIONS          "org.freedesktop.home1.TooManyOperations"
 #define BUS_ERROR_AUTHENTICATION_LIMIT_HIT     "org.freedesktop.home1.AuthenticationLimitHit"
 #define BUS_ERROR_HOME_CANT_AUTHENTICATE       "org.freedesktop.home1.HomeCantAuthenticate"
+#define BUS_ERROR_HOME_IN_USE                  "org.freedesktop.home1.HomeInUse"
+#define BUS_ERROR_REBALANCE_NOT_NEEDED         "org.freedesktop.home1.RebalanceNotNeeded"
 
 BUS_ERROR_MAP_ELF_USE(bus_common_errors);
diff --git a/src/libsystemd/sd-bus/bus-container.c b/src/libsystemd/sd-bus/bus-container.c
index 1159af4..eddd634 100644
--- a/src/libsystemd/sd-bus/bus-container.c
+++ b/src/libsystemd/sd-bus/bus-container.c
@@ -10,11 +10,10 @@
 #include "namespace-util.h"
 #include "process-util.h"
 #include "string-util.h"
-#include "util.h"
 
 int bus_container_connect_socket(sd_bus *b) {
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
-        _cleanup_close_ int pidnsfd = -1, mntnsfd = -1, usernsfd = -1, rootfd = -1;
+        _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
+        _cleanup_close_ int pidnsfd = -EBADF, mntnsfd = -EBADF, usernsfd = -EBADF, rootfd = -EBADF;
         int r, error_buf = 0;
         pid_t child;
         ssize_t n;
@@ -75,8 +74,7 @@
         r = wait_for_terminate_and_check("(sd-buscntrns)", child, 0);
         if (r < 0)
                 return r;
-        if (r != EXIT_SUCCESS)
-                return -EPROTO;
+        bool nonzero_exit_status = r != EXIT_SUCCESS;
 
         n = read(pair[0], &error_buf, sizeof(error_buf));
         if (n < 0)
@@ -95,8 +93,11 @@
                         return 1;
 
                 if (error_buf > 0)
-                        return log_debug_errno(error_buf, "Got error from (sd-buscntr): %m");
+                        return log_debug_errno(error_buf, "(sd-buscntr) failed to connect to D-Bus socket: %m");
         }
 
+        if (nonzero_exit_status)
+                return -EPROTO;
+
         return bus_socket_start_auth(b);
 }
diff --git a/src/libsystemd/sd-bus/bus-convenience.c b/src/libsystemd/sd-bus/bus-convenience.c
index a36aeb2..6974e21 100644
--- a/src/libsystemd/sd-bus/bus-convenience.c
+++ b/src/libsystemd/sd-bus/bus-convenience.c
@@ -17,8 +17,9 @@
         return sd_bus_send(reply->bus, reply, NULL);
 }
 
-_public_ int sd_bus_emit_signalv(
+_public_ int sd_bus_emit_signal_tov(
                 sd_bus *bus,
+                const char *destination,
                 const char *path,
                 const char *interface,
                 const char *member,
@@ -34,7 +35,7 @@
         if (!BUS_IS_OPEN(bus->state))
                 return -ENOTCONN;
 
-        r = sd_bus_message_new_signal(bus, &m, path, interface, member);
+        r = sd_bus_message_new_signal_to(bus, &m, destination, path, interface, member);
         if (r < 0)
                 return r;
 
@@ -47,6 +48,34 @@
         return sd_bus_send(bus, m, NULL);
 }
 
+_public_ int sd_bus_emit_signal_to(
+                sd_bus *bus,
+                const char *destination,
+                const char *path,
+                const char *interface,
+                const char *member,
+                const char *types, ...) {
+
+        va_list ap;
+        int r;
+
+        va_start(ap, types);
+        r = sd_bus_emit_signal_tov(bus, destination, path, interface, member, types, ap);
+        va_end(ap);
+
+        return r;
+}
+
+_public_ int sd_bus_emit_signalv(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *member,
+                const char *types, va_list ap) {
+
+    return sd_bus_emit_signal_tov(bus, NULL, path, interface, member, types, ap);
+}
+
 _public_ int sd_bus_emit_signal(
                 sd_bus *bus,
                 const char *path,
@@ -270,7 +299,7 @@
         if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
                 return 0;
 
-        bus_error_setfv(&error, name, format, ap);
+        sd_bus_error_setfv(&error, name, format, ap);
 
         return sd_bus_reply_method_error(call, &error);
 }
diff --git a/src/libsystemd/sd-bus/bus-creds.c b/src/libsystemd/sd-bus/bus-creds.c
index 4468b45..a06f6e6 100644
--- a/src/libsystemd/sd-bus/bus-creds.c
+++ b/src/libsystemd/sd-bus/bus-creds.c
@@ -15,13 +15,13 @@
 #include "fileio.h"
 #include "format-util.h"
 #include "hexdecoct.h"
+#include "nulstr-util.h"
 #include "parse-util.h"
 #include "process-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
 #include "user-util.h"
-#include "util.h"
 
 enum {
         CAP_OFFSET_INHERITABLE = 0,
@@ -661,8 +661,8 @@
         if ((unsigned) capability > lc)
                 return 0;
 
-        /* If the last cap is 63, then there are 64 caps defined, and we need 2 entries á 32bit hence. *
-         * If the last cap is 64, then there are 65 caps defined, and we need 3 entries á 32bit hence. */
+        /* If the last cap is 63, then there are 64 caps defined, and we need 2 entries à 32bit hence. *
+         * If the last cap is 64, then there are 65 caps defined, and we need 3 entries à 32bit hence. */
         sz = DIV_ROUND_UP(lc+1, 32LU);
 
         return !!(c->capability[offset * sz + CAP_TO_INDEX((uint32_t) capability)] & CAP_TO_MASK_CORRECTED((uint32_t) capability));
diff --git a/src/libsystemd/sd-bus/bus-dump.c b/src/libsystemd/sd-bus/bus-dump.c
index d5d22b0..6d24f3b 100644
--- a/src/libsystemd/sd-bus/bus-dump.c
+++ b/src/libsystemd/sd-bus/bus-dump.c
@@ -11,12 +11,12 @@
 #include "capability-util.h"
 #include "fileio.h"
 #include "format-util.h"
-#include "locale-util.h"
+#include "glyph-util.h"
 #include "macro.h"
+#include "pcapng.h"
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static char *indent(unsigned level, uint64_t flags) {
         char *p;
@@ -49,21 +49,18 @@
         unsigned level = 1;
         int r;
 
-        assert(m);
+        assert_return(m, -EINVAL);
+        assert_return((flags & ~_SD_BUS_MESSAGE_DUMP_KNOWN_FLAGS) == 0, -EINVAL);
 
         if (!f)
                 f = stdout;
 
         if (flags & SD_BUS_MESSAGE_DUMP_WITH_HEADER) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-                const char *p;
                 usec_t ts = m->realtime;
 
                 if (ts == 0)
                         ts = now(CLOCK_REALTIME);
 
-                p = format_timestamp_style(buf, sizeof(buf), ts, TIMESTAMP_US_UTC);
-
                 fprintf(f,
                         "%s%s%s Type=%s%s%s  Endian=%c  Flags=%u  Version=%u",
                         m->header->type == SD_BUS_MESSAGE_METHOD_ERROR ? ansi_highlight_red() :
@@ -82,7 +79,7 @@
 
                 /* Display synthetic message serial number in a more readable
                  * format than UINT32_MAX */
-                if (BUS_MESSAGE_COOKIE(m) == 0xFFFFFFFFULL)
+                if (BUS_MESSAGE_COOKIE(m) == UINT32_MAX)
                         fprintf(f, " Cookie=-1");
                 else
                         fprintf(f, " Cookie=%" PRIu64, BUS_MESSAGE_COOKIE(m));
@@ -90,9 +87,7 @@
                 if (m->reply_cookie != 0)
                         fprintf(f, "  ReplyCookie=%" PRIu64, m->reply_cookie);
 
-                fprintf(f, "  Timestamp=\"%s\"", strna(p));
-
-                fputs("\n", f);
+                fprintf(f, "  Timestamp=\"%s\"\n", strna(FORMAT_TIMESTAMP_STYLE(ts, TIMESTAMP_US_UTC)));
 
                 if (m->sender)
                         fprintf(f, "  Sender=%s%s%s", ansi_highlight(), m->sender, ansi_normal());
@@ -265,7 +260,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unknown basic type.");
+                        assert_not_reached();
                 }
         }
 
@@ -395,10 +390,8 @@
                 fprintf(f, "%sFSGID=%s"GID_FMT"%s", prefix, color, c->fsgid, suffix);
 
         if (c->mask & SD_BUS_CREDS_SUPPLEMENTARY_GIDS) {
-                unsigned i;
-
                 fprintf(f, "%sSupplementaryGIDs=%s", prefix, color);
-                for (i = 0; i < c->n_supplementary_gids; i++)
+                for (unsigned i = 0; i < c->n_supplementary_gids; i++)
                         fprintf(f, "%s" GID_FMT, i > 0 ? " " : "", c->supplementary_gids[i]);
                 fprintf(f, "%s", suffix);
         }
@@ -420,8 +413,6 @@
 
         r = sd_bus_creds_get_cmdline(c, &cmdline);
         if (r >= 0) {
-                char **i;
-
                 fprintf(f, "%sCommandLine=%s", prefix, color);
                 STRV_FOREACH(i, cmdline) {
                         if (i != cmdline)
@@ -486,8 +477,6 @@
                 fprintf(f, "%sUniqueName=%s%s%s", prefix, color, c->unique_name, suffix);
 
         if (sd_bus_creds_get_well_known_names(c, &well_known) >= 0) {
-                char **i;
-
                 fprintf(f, "%sWellKnownNames=%s", prefix, color);
                 STRV_FOREACH(i, well_known) {
                         if (i != well_known)
@@ -510,57 +499,99 @@
         return 0;
 }
 
-/*
- * For details about the file format, see:
- *
- * http://wiki.wireshark.org/Development/LibpcapFileFormat
- */
+static uint16_t pcapng_optlen(size_t len) {
+        return ALIGN4(len + sizeof(struct pcapng_option));
+}
 
-typedef struct _packed_ pcap_hdr_s {
-        uint32_t magic_number;   /* magic number */
-        uint16_t version_major;  /* major version number */
-        uint16_t version_minor;  /* minor version number */
-        int32_t  thiszone;       /* GMT to local correction */
-        uint32_t sigfigs;        /* accuracy of timestamps */
-        uint32_t snaplen;        /* max length of captured packets, in octets */
-        uint32_t network;        /* data link type */
-} pcap_hdr_t ;
-
-typedef struct  _packed_ pcaprec_hdr_s {
-        uint32_t ts_sec;         /* timestamp seconds */
-        uint32_t ts_usec;        /* timestamp microseconds */
-        uint32_t incl_len;       /* number of octets of packet saved in file */
-        uint32_t orig_len;       /* actual length of packet */
-} pcaprec_hdr_t;
-
-int bus_pcap_header(size_t snaplen, FILE *f) {
-
-        pcap_hdr_t hdr = {
-                .magic_number = 0xa1b2c3d4U,
-                .version_major = 2,
-                .version_minor = 4,
-                .thiszone = 0, /* UTC */
-                .sigfigs = 0,
-                .network = 231, /* D-Bus */
+static void pcapng_putopt(FILE *f, uint16_t code, const void *data, size_t len) {
+        struct pcapng_option opt = {
+                .code = code,
+                .length = len,
         };
 
-        if (!f)
-                f = stdout;
+        assert(f);
+        assert((uint16_t) len == len);
+        assert(data || len == 0);
 
+        fwrite(&opt, 1, sizeof(opt), f);
+        if (len > 0) {
+                size_t pad = ALIGN4(len) - len;
+
+                fwrite(data, 1, len, f);
+
+                assert(pad < sizeof(uint32_t));
+                while (pad-- > 0)
+                        fputc('\0', f);
+        }
+}
+
+static void pcapng_section_header(FILE *f, const char *os, const char *app) {
+        uint32_t len;
+
+        assert(f);
+
+        /* determine length of section header and options */
+        len = sizeof(struct pcapng_section);
+        if (os)
+                len += pcapng_optlen(strlen(os));
+        if (app)
+                len += pcapng_optlen(strlen(app));
+        len += pcapng_optlen(0);	/* OPT_END */
+        len += sizeof(uint32_t);	/* trailer length */
+
+        struct pcapng_section hdr = {
+                .block_type = PCAPNG_SECTION_BLOCK,
+                .block_length = len,
+                .byte_order_magic = PCAPNG_BYTE_ORDER_MAGIC,
+                .major_version = PCAPNG_MAJOR_VERS,
+                .minor_version = PCAPNG_MINOR_VERS,
+                .section_length = UINT64_MAX,
+        };
+
+        fwrite(&hdr, 1, sizeof(hdr), f);
+        if (os)
+                pcapng_putopt(f, PCAPNG_SHB_OS, os, strlen(os));
+        if (app)
+                pcapng_putopt(f, PCAPNG_SHB_USERAPPL, app, strlen(app));
+        pcapng_putopt(f, PCAPNG_OPT_END, NULL, 0);
+        fwrite(&len, 1, sizeof(uint32_t), f);
+}
+
+/* Only have a single instance of dbus pseudo interface */
+static void pcapng_interface_header(FILE *f, size_t snaplen) {
+        uint32_t len;
+
+        assert(f);
         assert(snaplen > 0);
         assert((size_t) (uint32_t) snaplen == snaplen);
 
-        hdr.snaplen = (uint32_t) snaplen;
+        /* no options (yet) */
+        len = sizeof(struct pcapng_interface_block) + sizeof(uint32_t);
+        struct pcapng_interface_block hdr = {
+                .block_type = PCAPNG_INTERFACE_BLOCK,
+                .block_length = len,
+                .link_type  = 231, /* D-Bus */
+                .snap_len = snaplen,
+        };
 
         fwrite(&hdr, 1, sizeof(hdr), f);
+        fwrite(&len, 1, sizeof(uint32_t), f);
+}
 
+int bus_pcap_header(size_t snaplen, const char *os, const char *info, FILE *f) {
+        if (!f)
+                f = stdout;
+
+        pcapng_section_header(f, os, info);
+        pcapng_interface_header(f, snaplen);
         return fflush_and_check(f);
 }
 
 int bus_message_pcap_frame(sd_bus_message *m, size_t snaplen, FILE *f) {
         struct bus_body_part *part;
-        pcaprec_hdr_t hdr = {};
-        struct timeval tv;
+        size_t msglen, caplen, pad;
+        uint32_t length;
+        uint64_t ts;
         unsigned i;
         size_t w;
 
@@ -571,18 +602,27 @@
         assert(snaplen > 0);
         assert((size_t) (uint32_t) snaplen == snaplen);
 
-        if (m->realtime != 0)
-                timeval_store(&tv, m->realtime);
-        else
-                assert_se(gettimeofday(&tv, NULL) >= 0);
+        ts = m->realtime ?: now(CLOCK_REALTIME);
+        msglen = BUS_MESSAGE_SIZE(m);
+        caplen = MIN(msglen, snaplen);
+        pad = ALIGN4(caplen) - caplen;
 
-        hdr.ts_sec = tv.tv_sec;
-        hdr.ts_usec = tv.tv_usec;
-        hdr.orig_len = BUS_MESSAGE_SIZE(m);
-        hdr.incl_len = MIN(hdr.orig_len, snaplen);
+        /* packet block has no options */
+        length = sizeof(struct pcapng_enhance_packet_block)
+                + caplen + pad + sizeof(uint32_t);
 
-        /* write the pcap header */
-        fwrite(&hdr, 1, sizeof(hdr), f);
+        struct pcapng_enhance_packet_block epb = {
+                .block_type = PCAPNG_ENHANCED_PACKET_BLOCK,
+                .block_length = length,
+                .interface_id = 0,
+                .timestamp_hi = (uint32_t)(ts >> 32),
+                .timestamp_lo = (uint32_t)ts,
+                .original_length = msglen,
+                .capture_length = caplen,
+        };
+
+        /* write the pcapng enhanced packet block header */
+        fwrite(&epb, 1, sizeof(epb), f);
 
         /* write the dbus header */
         w = MIN(BUS_MESSAGE_BODY_BEGIN(m), snaplen);
@@ -599,5 +639,11 @@
                 snaplen -= w;
         }
 
+        while (pad-- > 0)
+                fputc('\0', f);
+
+        /* trailing block length */
+        fwrite(&length, 1, sizeof(uint32_t), f);
+
         return fflush_and_check(f);
 }
diff --git a/src/libsystemd/sd-bus/bus-dump.h b/src/libsystemd/sd-bus/bus-dump.h
index aeb4616..e7470ba 100644
--- a/src/libsystemd/sd-bus/bus-dump.h
+++ b/src/libsystemd/sd-bus/bus-dump.h
@@ -8,5 +8,5 @@
 
 int bus_creds_dump(sd_bus_creds *c, FILE *f, bool terse);
 
-int bus_pcap_header(size_t snaplen, FILE *f);
+int bus_pcap_header(size_t snaplen, const char *os, const char *app, FILE *f);
 int bus_message_pcap_frame(sd_bus_message *m, size_t snaplen, FILE *f);
diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c
index 7483b46..413e2dd 100644
--- a/src/libsystemd/sd-bus/bus-error.c
+++ b/src/libsystemd/sd-bus/bus-error.c
@@ -14,7 +14,6 @@
 #include "errno-util.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
 
 BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_standard_errors[] = {
         SD_BUS_ERROR_MAP("org.freedesktop.DBus.Error.Failed",                           EACCES),
@@ -92,7 +91,7 @@
                                 }
                         }
 
-        m = ALIGN_TO_PTR(__start_SYSTEMD_BUS_ERROR_MAP, sizeof(void*));
+        m = ALIGN_PTR(__start_SYSTEMD_BUS_ERROR_MAP);
         while (m < __stop_SYSTEMD_BUS_ERROR_MAP) {
                 /* For magic ELF error maps, the end marker might
                  * appear in the middle of things, since multiple maps
@@ -101,7 +100,7 @@
                  * boundary, which is the selected alignment for the
                  * arrays. */
                 if (m->code == BUS_ERROR_MAP_END_MARKER) {
-                        m = ALIGN_TO_PTR(m + 1, sizeof(void*));
+                        m = ALIGN_PTR(m + 1);
                         continue;
                 }
 
@@ -237,7 +236,7 @@
         return -r;
 }
 
-int bus_error_setfv(sd_bus_error *e, const char *name, const char *format, va_list ap) {
+_public_ int sd_bus_error_setfv(sd_bus_error *e, const char *name, const char *format, va_list ap) {
         int r;
 
         if (!name)
@@ -252,10 +251,15 @@
                         return -ENOMEM;
                 }
 
-                /* If we hit OOM on formatting the pretty message, we ignore
-                 * this, since we at least managed to write the error name */
-                if (format)
-                        (void) vasprintf((char**) &e->message, format, ap);
+                if (format) {
+                        _cleanup_free_ char *mesg = NULL;
+
+                        /* If we hit OOM on formatting the pretty message, we ignore
+                         * this, since we at least managed to write the error name */
+
+                        if (vasprintf(&mesg, format, ap) >= 0)
+                                e->message = TAKE_PTR(mesg);
+                }
 
                 e->_need_free = 1;
         }
@@ -272,7 +276,7 @@
                 va_list ap;
 
                 va_start(ap, format);
-                r = bus_error_setfv(e, name, format, ap);
+                r = sd_bus_error_setfv(e, name, format, ap);
                 assert(!name || r < 0);
                 va_end(ap);
 
@@ -489,7 +493,7 @@
                         *e = BUS_ERROR_FAILED;
         }
 
-        /* Now, fill in the message from strerror() if we can */
+        /* Now, fill in the message from strerror_r() if we can */
         bus_error_strerror(e, error);
         return -error;
 }
@@ -550,7 +554,7 @@
         }
 
 fail:
-        /* If that didn't work, use strerror() for the message */
+        /* If that didn't work, use strerror_r() for the message */
         bus_error_strerror(e, error);
         return -error;
 }
@@ -581,19 +585,16 @@
         return sd_bus_error_set_errno(e, error);
 }
 
-const char *bus_error_message(const sd_bus_error *e, int error) {
+const char* _bus_error_message(const sd_bus_error *e, int error, char buf[static ERRNO_BUF_LEN]) {
+        /* Sometimes, the D-Bus server is a little bit too verbose with
+         * its error messages, so let's override them here */
+        if (sd_bus_error_has_name(e, SD_BUS_ERROR_ACCESS_DENIED))
+                return "Access denied";
 
-        if (e) {
-                /* Sometimes, the D-Bus server is a little bit too verbose with
-                 * its error messages, so let's override them here */
-                if (sd_bus_error_has_name(e, SD_BUS_ERROR_ACCESS_DENIED))
-                        return "Access denied";
+        if (e && e->message)
+                return e->message;
 
-                if (e->message)
-                        return e->message;
-        }
-
-        return strerror_safe(error);
+        return strerror_r(abs(error), buf, ERRNO_BUF_LEN);
 }
 
 static bool map_ok(const sd_bus_error_map *map) {
diff --git a/src/libsystemd/sd-bus/bus-error.h b/src/libsystemd/sd-bus/bus-error.h
index d981f72..c8768c9 100644
--- a/src/libsystemd/sd-bus/bus-error.h
+++ b/src/libsystemd/sd-bus/bus-error.h
@@ -5,14 +5,17 @@
 
 #include "sd-bus.h"
 
+#include "errno-util.h"
 #include "macro.h"
 
 bool bus_error_is_dirty(sd_bus_error *e);
 
-const char *bus_error_message(const sd_bus_error *e, int error);
+const char* _bus_error_message(const sd_bus_error *e, int error, char buf[static ERRNO_BUF_LEN]);
 
-int bus_error_setfv(sd_bus_error *e, const char *name, const char *format, va_list ap) _printf_(3,0);
-int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_list ap) _printf_(3,0);
+/* Note: the lifetime of the compound literal is the immediately surrounding block,
+ * see C11 §6.5.2.5, and
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
+#define bus_error_message(e, error) _bus_error_message(e, error, (char[ERRNO_BUF_LEN]){})
 
 #define BUS_ERROR_OOM SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_NO_MEMORY, "Out of memory")
 #define BUS_ERROR_FAILED SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_FAILED, "Operation failed")
@@ -38,7 +41,7 @@
         _Pragma("GCC diagnostic ignored \"-Wattributes\"")              \
         _section_("SYSTEMD_BUS_ERROR_MAP")                              \
         _used_                                                          \
-        __attribute__((retain))                                         \
+        _retain_                                                        \
         _alignptr_                                                      \
         _variable_no_sanitize_address_
 
diff --git a/src/libsystemd/sd-bus/bus-gvariant.c b/src/libsystemd/sd-bus/bus-gvariant.c
deleted file mode 100644
index 850540a..0000000
--- a/src/libsystemd/sd-bus/bus-gvariant.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <string.h>
-
-#include "sd-bus.h"
-
-#include "bus-gvariant.h"
-#include "bus-signature.h"
-#include "bus-type.h"
-
-int bus_gvariant_get_size(const char *signature) {
-        const char *p;
-        int sum = 0, r;
-
-        /* For fixed size structs. Fails for variable size structs. */
-
-        p = signature;
-        while (*p != 0) {
-                size_t n;
-
-                r = signature_element_length(p, &n);
-                if (r < 0)
-                        return r;
-                else {
-                        char t[n+1];
-
-                        memcpy(t, p, n);
-                        t[n] = 0;
-
-                        r = bus_gvariant_get_alignment(t);
-                        if (r < 0)
-                                return r;
-
-                        sum = ALIGN_TO(sum, r);
-                }
-
-                switch (*p) {
-
-                case SD_BUS_TYPE_BOOLEAN:
-                case SD_BUS_TYPE_BYTE:
-                        sum += 1;
-                        break;
-
-                case SD_BUS_TYPE_INT16:
-                case SD_BUS_TYPE_UINT16:
-                        sum += 2;
-                        break;
-
-                case SD_BUS_TYPE_INT32:
-                case SD_BUS_TYPE_UINT32:
-                case SD_BUS_TYPE_UNIX_FD:
-                        sum += 4;
-                        break;
-
-                case SD_BUS_TYPE_INT64:
-                case SD_BUS_TYPE_UINT64:
-                case SD_BUS_TYPE_DOUBLE:
-                        sum += 8;
-                        break;
-
-                case SD_BUS_TYPE_STRUCT_BEGIN:
-                case SD_BUS_TYPE_DICT_ENTRY_BEGIN: {
-                        if (n == 2) {
-                                /* unary type () has fixed size of 1 */
-                                r = 1;
-                        } else {
-                                char t[n-1];
-
-                                memcpy(t, p + 1, n - 2);
-                                t[n - 2] = 0;
-
-                                r = bus_gvariant_get_size(t);
-                                if (r < 0)
-                                        return r;
-                        }
-
-                        sum += r;
-                        break;
-                }
-
-                case SD_BUS_TYPE_STRING:
-                case SD_BUS_TYPE_OBJECT_PATH:
-                case SD_BUS_TYPE_SIGNATURE:
-                case SD_BUS_TYPE_ARRAY:
-                case SD_BUS_TYPE_VARIANT:
-                        return -EINVAL;
-
-                default:
-                        assert_not_reached("Unknown signature type");
-                }
-
-                p += n;
-        }
-
-        r = bus_gvariant_get_alignment(signature);
-        if (r < 0)
-                return r;
-
-        return ALIGN_TO(sum, r);
-}
-
-int bus_gvariant_get_alignment(const char *signature) {
-        size_t alignment = 1;
-        const char *p;
-        int r;
-
-        p = signature;
-        while (*p != 0 && alignment < 8) {
-                size_t n;
-                int a;
-
-                r = signature_element_length(p, &n);
-                if (r < 0)
-                        return r;
-
-                switch (*p) {
-
-                case SD_BUS_TYPE_BYTE:
-                case SD_BUS_TYPE_BOOLEAN:
-                case SD_BUS_TYPE_STRING:
-                case SD_BUS_TYPE_OBJECT_PATH:
-                case SD_BUS_TYPE_SIGNATURE:
-                        a = 1;
-                        break;
-
-                case SD_BUS_TYPE_INT16:
-                case SD_BUS_TYPE_UINT16:
-                        a = 2;
-                        break;
-
-                case SD_BUS_TYPE_INT32:
-                case SD_BUS_TYPE_UINT32:
-                case SD_BUS_TYPE_UNIX_FD:
-                        a = 4;
-                        break;
-
-                case SD_BUS_TYPE_INT64:
-                case SD_BUS_TYPE_UINT64:
-                case SD_BUS_TYPE_DOUBLE:
-                case SD_BUS_TYPE_VARIANT:
-                        a = 8;
-                        break;
-
-                case SD_BUS_TYPE_ARRAY: {
-                        char t[n];
-
-                        memcpy(t, p + 1, n - 1);
-                        t[n - 1] = 0;
-
-                        a = bus_gvariant_get_alignment(t);
-                        break;
-                }
-
-                case SD_BUS_TYPE_STRUCT_BEGIN:
-                case SD_BUS_TYPE_DICT_ENTRY_BEGIN: {
-                        char t[n-1];
-
-                        memcpy(t, p + 1, n - 2);
-                        t[n - 2] = 0;
-
-                        a = bus_gvariant_get_alignment(t);
-                        break;
-                }
-
-                default:
-                        assert_not_reached("Unknown signature type");
-                }
-
-                if (a < 0)
-                        return a;
-
-                assert(a > 0 && a <= 8);
-                if ((size_t) a > alignment)
-                        alignment = (size_t) a;
-
-                p += n;
-        }
-
-        return alignment;
-}
-
-int bus_gvariant_is_fixed_size(const char *signature) {
-        const char *p;
-        int r;
-
-        assert(signature);
-
-        p = signature;
-        while (*p != 0) {
-                size_t n;
-
-                r = signature_element_length(p, &n);
-                if (r < 0)
-                        return r;
-
-                switch (*p) {
-
-                case SD_BUS_TYPE_STRING:
-                case SD_BUS_TYPE_OBJECT_PATH:
-                case SD_BUS_TYPE_SIGNATURE:
-                case SD_BUS_TYPE_ARRAY:
-                case SD_BUS_TYPE_VARIANT:
-                        return 0;
-
-                case SD_BUS_TYPE_BYTE:
-                case SD_BUS_TYPE_BOOLEAN:
-                case SD_BUS_TYPE_INT16:
-                case SD_BUS_TYPE_UINT16:
-                case SD_BUS_TYPE_INT32:
-                case SD_BUS_TYPE_UINT32:
-                case SD_BUS_TYPE_UNIX_FD:
-                case SD_BUS_TYPE_INT64:
-                case SD_BUS_TYPE_UINT64:
-                case SD_BUS_TYPE_DOUBLE:
-                        break;
-
-                case SD_BUS_TYPE_STRUCT_BEGIN:
-                case SD_BUS_TYPE_DICT_ENTRY_BEGIN: {
-                        char t[n-1];
-
-                        memcpy(t, p + 1, n - 2);
-                        t[n - 2] = 0;
-
-                        r = bus_gvariant_is_fixed_size(t);
-                        if (r <= 0)
-                                return r;
-                        break;
-                }
-
-                default:
-                        assert_not_reached("Unknown signature type");
-                }
-
-                p += n;
-        }
-
-        return true;
-}
-
-size_t bus_gvariant_determine_word_size(size_t sz, size_t extra) {
-        if (sz + extra <= 0xFF)
-                return 1;
-        else if (sz + extra*2 <= 0xFFFF)
-                return 2;
-        else if (sz + extra*4 <= 0xFFFFFFFF)
-                return 4;
-        else
-                return 8;
-}
-
-size_t bus_gvariant_read_word_le(void *p, size_t sz) {
-        union {
-                uint16_t u16;
-                uint32_t u32;
-                uint64_t u64;
-        } x;
-
-        assert(p);
-
-        if (sz == 1)
-                return *(uint8_t*) p;
-
-        memcpy(&x, p, sz);
-
-        if (sz == 2)
-                return le16toh(x.u16);
-        else if (sz == 4)
-                return le32toh(x.u32);
-        else if (sz == 8)
-                return le64toh(x.u64);
-
-        assert_not_reached("unknown word width");
-}
-
-void bus_gvariant_write_word_le(void *p, size_t sz, size_t value) {
-        union {
-                uint16_t u16;
-                uint32_t u32;
-                uint64_t u64;
-        } x;
-
-        assert(p);
-        assert(sz == 8 || (value < (1ULL << (sz*8))));
-
-        if (sz == 1) {
-                *(uint8_t*) p = value;
-                return;
-        } else if (sz == 2)
-                x.u16 = htole16((uint16_t) value);
-        else if (sz == 4)
-                x.u32 = htole32((uint32_t) value);
-        else if (sz == 8)
-                x.u64 = htole64((uint64_t) value);
-        else
-                assert_not_reached("unknown word width");
-
-        memcpy(p, &x, sz);
-}
diff --git a/src/libsystemd/sd-bus/bus-gvariant.h b/src/libsystemd/sd-bus/bus-gvariant.h
deleted file mode 100644
index 213fa97..0000000
--- a/src/libsystemd/sd-bus/bus-gvariant.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include "macro.h"
-
-int bus_gvariant_get_size(const char *signature) _pure_;
-int bus_gvariant_get_alignment(const char *signature) _pure_;
-int bus_gvariant_is_fixed_size(const char *signature) _pure_;
-
-size_t bus_gvariant_determine_word_size(size_t sz, size_t extra);
-void bus_gvariant_write_word_le(void *p, size_t sz, size_t value);
-size_t bus_gvariant_read_word_le(void *p, size_t sz);
diff --git a/src/libsystemd/sd-bus/bus-internal.c b/src/libsystemd/sd-bus/bus-internal.c
index 0f1ea45..a249b84 100644
--- a/src/libsystemd/sd-bus/bus-internal.c
+++ b/src/libsystemd/sd-bus/bus-internal.c
@@ -29,10 +29,8 @@
                 } else {
                         bool good;
 
-                        good =
-                                (*q >= 'a' && *q <= 'z') ||
-                                (*q >= 'A' && *q <= 'Z') ||
-                                (*q >= '0' && *q <= '9') ||
+                        good = ascii_isalpha(*q) ||
+                                ascii_isdigit(*q) ||
                                 *q == '_';
 
                         if (!good)
@@ -87,9 +85,8 @@
                         bool good;
 
                         good =
-                                (*q >= 'a' && *q <= 'z') ||
-                                (*q >= 'A' && *q <= 'Z') ||
-                                (!dot && *q >= '0' && *q <= '9') ||
+                                ascii_isalpha(*q) ||
+                                (!dot && ascii_isdigit(*q)) ||
                                 *q == '_';
 
                         if (!good) {
@@ -134,9 +131,8 @@
                         bool good;
 
                         good =
-                                (*q >= 'a' && *q <= 'z') ||
-                                (*q >= 'A' && *q <= 'Z') ||
-                                ((!dot || unique) && *q >= '0' && *q <= '9') ||
+                                ascii_isalpha(*q) ||
+                                ((!dot || unique) && ascii_isdigit(*q)) ||
                                 IN_SET(*q, '_', '-');
 
                         if (!good)
@@ -167,9 +163,8 @@
                 bool good;
 
                 good =
-                        (*q >= 'a' && *q <= 'z') ||
-                        (*q >= 'A' && *q <= 'Z') ||
-                        (*q >= '0' && *q <= '9') ||
+                        ascii_isalpha(*q) ||
+                        ascii_isdigit(*q) ||
                         *q == '_';
 
                 if (!good)
@@ -301,9 +296,8 @@
 
         for (a = v, b = r; *a; a++) {
 
-                if ((*a >= '0' && *a <= '9') ||
-                    (*a >= 'a' && *a <= 'z') ||
-                    (*a >= 'A' && *a <= 'Z') ||
+                if (ascii_isdigit(*a) ||
+                    ascii_isalpha(*a) ||
                     strchr("_-/.", *a))
                         *(b++) = *a;
                 else {
diff --git a/src/libsystemd/sd-bus/bus-internal.h b/src/libsystemd/sd-bus/bus-internal.h
index 51673ad..dda6adf 100644
--- a/src/libsystemd/sd-bus/bus-internal.h
+++ b/src/libsystemd/sd-bus/bus-internal.h
@@ -8,7 +8,7 @@
 #include "bus-error.h"
 #include "bus-kernel.h"
 #include "bus-match.h"
-#include "def.h"
+#include "constants.h"
 #include "hashmap.h"
 #include "list.h"
 #include "prioq.h"
diff --git a/src/libsystemd/sd-bus/bus-introspect.c b/src/libsystemd/sd-bus/bus-introspect.c
index b9ef6af..49236a8 100644
--- a/src/libsystemd/sd-bus/bus-introspect.c
+++ b/src/libsystemd/sd-bus/bus-introspect.c
@@ -12,7 +12,7 @@
 
 #define BUS_INTROSPECT_DOCTYPE                                       \
         "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n" \
-        "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+        "\"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
 
 #define BUS_INTROSPECT_INTERFACE_PEER                                \
         " <interface name=\"org.freedesktop.DBus.Peer\">\n"             \
@@ -110,7 +110,7 @@
         return free_and_strdup(&intro->interface_name, interface_name);
 }
 
-int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefix) {
+int introspect_write_child_nodes(struct introspect *i, OrderedSet *s, const char *prefix) {
         char *node;
 
         assert(i);
@@ -118,7 +118,7 @@
 
         assert_se(set_interface_name(i, NULL) >= 0);
 
-        while ((node = set_steal_first(s))) {
+        while ((node = ordered_set_steal_first(s))) {
                 const char *e;
 
                 e = object_path_startswith(node, prefix);
@@ -192,13 +192,12 @@
                 const char *interface_name,
                 const sd_bus_vtable *v) {
 
-        const sd_bus_vtable *vtable = v;
+        const sd_bus_vtable *vtable = ASSERT_PTR(v);
         const char *names = "";
         int r;
 
         assert(i);
         assert(interface_name);
-        assert(v);
 
         r = set_interface_name(i, interface_name);
         if (r < 0)
diff --git a/src/libsystemd/sd-bus/bus-introspect.h b/src/libsystemd/sd-bus/bus-introspect.h
index 34f32a4..19e3ef0 100644
--- a/src/libsystemd/sd-bus/bus-introspect.h
+++ b/src/libsystemd/sd-bus/bus-introspect.h
@@ -5,7 +5,7 @@
 
 #include "sd-bus.h"
 
-#include "set.h"
+#include "ordered-set.h"
 
 struct introspect {
         FILE *f;
@@ -17,7 +17,7 @@
 
 int introspect_begin(struct introspect *i, bool trusted);
 int introspect_write_default_interfaces(struct introspect *i, bool object_manager);
-int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefix);
+int introspect_write_child_nodes(struct introspect *i, OrderedSet *s, const char *prefix);
 int introspect_write_interface(
                 struct introspect *i,
                 const char *interface_name,
diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c
index cba1ab2..b553f15 100644
--- a/src/libsystemd/sd-bus/bus-kernel.c
+++ b/src/libsystemd/sd-bus/bus-kernel.c
@@ -9,12 +9,6 @@
 #include <sys/mman.h>
 #include <sys/prctl.h>
 
-/* When we include libgen.h because we need dirname() we immediately
- * undefine basename() since libgen.h defines it as a macro to the POSIX
- * version which is really broken. We prefer GNU basename(). */
-#include <libgen.h>
-#undef basename
-
 #include "alloc-util.h"
 #include "bus-internal.h"
 #include "bus-kernel.h"
diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c
index 648f1ca..157c660 100644
--- a/src/libsystemd/sd-bus/bus-match.c
+++ b/src/libsystemd/sd-bus/bus-match.c
@@ -139,8 +139,6 @@
                         return true;
 
                 if (m->creds.mask & SD_BUS_CREDS_WELL_KNOWN_NAMES) {
-                        char **i;
-
                         /* on kdbus we have the well known names list
                          * in the credentials, let's make use of that
                          * for an accurate match */
@@ -174,8 +172,6 @@
                 return false;
 
         case BUS_MATCH_ARG_HAS ... BUS_MATCH_ARG_HAS_LAST: {
-                char **i;
-
                 STRV_FOREACH(i, value_strv)
                         if (streq_ptr(node->value.str, *i))
                                 return true;
@@ -199,7 +195,7 @@
                 return false;
 
         default:
-                assert_not_reached("Invalid node type");
+                assert_not_reached();
         }
 }
 
@@ -234,7 +230,7 @@
                 return streq(node->value.str, value_str);
 
         default:
-                assert_not_reached("Invalid node type");
+                assert_not_reached();
         }
 }
 
@@ -375,7 +371,7 @@
                 break;
 
         default:
-                assert_not_reached("Unknown match type.");
+                assert_not_reached();
         }
 
         if (BUS_MATCH_CAN_HASH(node->type)) {
@@ -386,8 +382,6 @@
                 if (test_str)
                         found = hashmap_get(node->compare.children, test_str);
                 else if (test_strv) {
-                        char **i;
-
                         STRV_FOREACH(i, test_strv) {
                                 found = hashmap_get(node->compare.children, *i);
                                 if (found) {
@@ -997,20 +991,16 @@
                 return "path_namespace";
 
         case BUS_MATCH_ARG ... BUS_MATCH_ARG_LAST:
-                snprintf(buf, l, "arg%i", t - BUS_MATCH_ARG);
-                return buf;
+                return snprintf_ok(buf, l, "arg%i", t - BUS_MATCH_ARG);
 
         case BUS_MATCH_ARG_PATH ... BUS_MATCH_ARG_PATH_LAST:
-                snprintf(buf, l, "arg%ipath", t - BUS_MATCH_ARG_PATH);
-                return buf;
+                return snprintf_ok(buf, l, "arg%ipath", t - BUS_MATCH_ARG_PATH);
 
         case BUS_MATCH_ARG_NAMESPACE ... BUS_MATCH_ARG_NAMESPACE_LAST:
-                snprintf(buf, l, "arg%inamespace", t - BUS_MATCH_ARG_NAMESPACE);
-                return buf;
+                return snprintf_ok(buf, l, "arg%inamespace", t - BUS_MATCH_ARG_NAMESPACE);
 
         case BUS_MATCH_ARG_HAS ... BUS_MATCH_ARG_HAS_LAST:
-                snprintf(buf, l, "arg%ihas", t - BUS_MATCH_ARG_HAS);
-                return buf;
+                return snprintf_ok(buf, l, "arg%ihas", t - BUS_MATCH_ARG_HAS);
 
         default:
                 return NULL;
@@ -1023,7 +1013,7 @@
         if (!node)
                 return;
 
-        fprintf(out, "%*s[%s]", 2 * level, "", bus_match_node_type_to_string(node->type, buf, sizeof(buf)));
+        fprintf(out, "%*s[%s]", 2 * (int) level, "", bus_match_node_type_to_string(node->type, buf, sizeof(buf)));
 
         if (node->type == BUS_MATCH_VALUE) {
                 if (node->parent->type == BUS_MATCH_MESSAGE_TYPE)
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
index d74a351..9719f97 100644
--- a/src/libsystemd/sd-bus/bus-message.c
+++ b/src/libsystemd/sd-bus/bus-message.c
@@ -7,7 +7,6 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
-#include "bus-gvariant.h"
 #include "bus-internal.h"
 #include "bus-message.h"
 #include "bus-signature.h"
@@ -22,6 +21,7 @@
 #include "utf8.h"
 
 static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored);
+static int message_parse_fields(sd_bus_message *m);
 
 static void *adjust_pointer(const void *p, void *old_base, size_t sz, void *new_base) {
 
@@ -103,7 +103,6 @@
 
         free(c->signature);
         free(c->peeked_signature);
-        free(c->offsets);
 
         /* Move to previous container, but not if we are on root container */
         if (m->n_containers > 0)
@@ -147,7 +146,7 @@
         return mfree(m);
 }
 
-static void *message_extend_fields(sd_bus_message *m, size_t align, size_t sz, bool add_offset) {
+static void *message_extend_fields(sd_bus_message *m, size_t sz, bool add_offset) {
         void *op, *np;
         size_t old_size, new_size, start;
 
@@ -157,7 +156,7 @@
                 return NULL;
 
         old_size = sizeof(struct bus_header) + m->fields_size;
-        start = ALIGN_TO(old_size, align);
+        start = ALIGN8(old_size);
         new_size = start + sz;
 
         if (new_size < start || new_size > UINT32_MAX)
@@ -226,51 +225,32 @@
 
         assert(m);
 
-        /* dbus1 only allows 8bit header field ids */
+        /* dbus only allows 8bit header field ids */
         if (h > 0xFF)
                 return -EINVAL;
 
-        /* dbus1 doesn't allow strings over 32bit, let's enforce this
-         * globally, to not risk convertability */
+        /* dbus doesn't allow strings over 32bit */
         l = strlen(s);
         if (l > UINT32_MAX)
                 return -EINVAL;
 
         /* Signature "(yv)" where the variant contains "s" */
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
+        /* (field id byte + (signature length + signature 's' + NUL) + (string length + string + NUL)) */
+        p = message_extend_fields(m, 4 + 4 + l + 1, false);
+        if (!p)
+                return -ENOMEM;
 
-                /* (field id 64bit, ((string + NUL) + NUL + signature string 's') */
-                p = message_extend_fields(m, 8, 8 + l + 1 + 1 + 1, true);
-                if (!p)
-                        return -ENOMEM;
+        p[0] = (uint8_t) h;
+        p[1] = 1;
+        p[2] = type;
+        p[3] = 0;
 
-                *((uint64_t*) p) = h;
-                memcpy(p+8, s, l);
-                p[8+l] = 0;
-                p[8+l+1] = 0;
-                p[8+l+2] = type;
+        ((uint32_t*) p)[1] = l;
+        memcpy(p + 8, s, l + 1);
 
-                if (ret)
-                        *ret = (char*) p + 8;
-
-        } else {
-                /* (field id byte + (signature length + signature 's' + NUL) + (string length + string + NUL)) */
-                p = message_extend_fields(m, 8, 4 + 4 + l + 1, false);
-                if (!p)
-                        return -ENOMEM;
-
-                p[0] = (uint8_t) h;
-                p[1] = 1;
-                p[2] = type;
-                p[3] = 0;
-
-                ((uint32_t*) p)[1] = l;
-                memcpy(p + 8, s, l + 1);
-
-                if (ret)
-                        *ret = (char*) p + 8;
-        }
+        if (ret)
+                *ret = (char*) p + 8;
 
         return 0;
 }
@@ -286,37 +266,31 @@
 
         assert(m);
 
-        /* dbus1 only allows 8bit header field ids */
+        /* dbus only allows 8bit header field ids */
         if (h > 0xFF)
                 return -EINVAL;
 
-        /* dbus1 doesn't allow signatures over 8bit, let's enforce
-         * this globally, to not risk convertability */
+        /* dbus doesn't allow signatures over 8bit */
         l = strlen(s);
         if (l > SD_BUS_MAXIMUM_SIGNATURE_LENGTH)
                 return -EINVAL;
 
         /* Signature "(yv)" where the variant contains "g" */
 
-        if (BUS_MESSAGE_IS_GVARIANT(m))
-                /* For gvariant the serialization is the same as for normal strings */
-                return message_append_field_string(m, h, 'g', s, ret);
-        else {
-                /* (field id byte + (signature length + signature 'g' + NUL) + (string length + string + NUL)) */
-                p = message_extend_fields(m, 8, 4 + 1 + l + 1, false);
-                if (!p)
-                        return -ENOMEM;
+        /* (field id byte + (signature length + signature 'g' + NUL) + (string length + string + NUL)) */
+        p = message_extend_fields(m, 4 + 1 + l + 1, false);
+        if (!p)
+                return -ENOMEM;
 
-                p[0] = (uint8_t) h;
-                p[1] = 1;
-                p[2] = SD_BUS_TYPE_SIGNATURE;
-                p[3] = 0;
-                p[4] = l;
-                memcpy(p + 5, s, l + 1);
+        p[0] = (uint8_t) h;
+        p[1] = 1;
+        p[2] = SD_BUS_TYPE_SIGNATURE;
+        p[3] = 0;
+        p[4] = l;
+        memcpy(p + 5, s, l + 1);
 
-                if (ret)
-                        *ret = (const char*) p + 5;
-        }
+        if (ret)
+                *ret = (const char*) p + 5;
 
         return 0;
 }
@@ -326,75 +300,21 @@
 
         assert(m);
 
-        /* dbus1 only allows 8bit header field ids */
+        /* dbus only allows 8bit header field ids */
         if (h > 0xFF)
                 return -EINVAL;
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                /* (field id 64bit + ((value + NUL + signature string 'u') */
+        /* (field id byte + (signature length + signature 'u' + NUL) + value) */
+        p = message_extend_fields(m, 4 + 4, false);
+        if (!p)
+                return -ENOMEM;
 
-                p = message_extend_fields(m, 8, 8 + 4 + 1 + 1, true);
-                if (!p)
-                        return -ENOMEM;
+        p[0] = (uint8_t) h;
+        p[1] = 1;
+        p[2] = 'u';
+        p[3] = 0;
 
-                *((uint64_t*) p) = h;
-                *((uint32_t*) (p + 8)) = x;
-                p[12] = 0;
-                p[13] = 'u';
-        } else {
-                /* (field id byte + (signature length + signature 'u' + NUL) + value) */
-                p = message_extend_fields(m, 8, 4 + 4, false);
-                if (!p)
-                        return -ENOMEM;
-
-                p[0] = (uint8_t) h;
-                p[1] = 1;
-                p[2] = 'u';
-                p[3] = 0;
-
-                ((uint32_t*) p)[1] = x;
-        }
-
-        return 0;
-}
-
-static int message_append_field_uint64(sd_bus_message *m, uint64_t h, uint64_t x) {
-        uint8_t *p;
-
-        assert(m);
-
-        /* dbus1 only allows 8bit header field ids */
-        if (h > 0xFF)
-                return -EINVAL;
-
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                /* (field id 64bit + ((value + NUL + signature string 't') */
-
-                p = message_extend_fields(m, 8, 8 + 8 + 1 + 1, true);
-                if (!p)
-                        return -ENOMEM;
-
-                *((uint64_t*) p) = h;
-                *((uint64_t*) (p + 8)) = x;
-                p[16] = 0;
-                p[17] = 't';
-        } else {
-                /* (field id byte + (signature length + signature 't' + NUL) + 4 byte padding + value) */
-                p = message_extend_fields(m, 8, 4 + 4 + 8, false);
-                if (!p)
-                        return -ENOMEM;
-
-                p[0] = (uint8_t) h;
-                p[1] = 1;
-                p[2] = 't';
-                p[3] = 0;
-                p[4] = 0;
-                p[5] = 0;
-                p[6] = 0;
-                p[7] = 0;
-
-                ((uint64_t*) p)[1] = x;
-        }
+        ((uint32_t*) p)[1] = x;
 
         return 0;
 }
@@ -402,28 +322,20 @@
 static int message_append_reply_cookie(sd_bus_message *m, uint64_t cookie) {
         assert(m);
 
-        if (BUS_MESSAGE_IS_GVARIANT(m))
-                return message_append_field_uint64(m, BUS_MESSAGE_HEADER_REPLY_SERIAL, cookie);
-        else {
-                /* 64bit cookies are not supported on dbus1 */
-                if (cookie > 0xffffffffUL)
-                        return -EOPNOTSUPP;
+        /* 64bit cookies are not supported */
+        if (cookie > UINT32_MAX)
+                return -EOPNOTSUPP;
 
-                return message_append_field_uint32(m, BUS_MESSAGE_HEADER_REPLY_SERIAL, (uint32_t) cookie);
-        }
+        return message_append_field_uint32(m, BUS_MESSAGE_HEADER_REPLY_SERIAL, (uint32_t) cookie);
 }
 
-int bus_message_from_header(
+static int message_from_header(
                 sd_bus *bus,
-                void *header,
-                size_t header_accessible,
-                void *footer,
-                size_t footer_accessible,
+                void *buffer,
                 size_t message_size,
                 int *fds,
                 size_t n_fds,
                 const char *label,
-                size_t extra,
                 sd_bus_message **ret) {
 
         _cleanup_free_ sd_bus_message *m = NULL;
@@ -431,20 +343,14 @@
         size_t a, label_sz = 0; /* avoid false maybe-uninitialized warning */
 
         assert(bus);
-        assert(header || header_accessible <= 0);
-        assert(footer || footer_accessible <= 0);
+        assert(buffer || message_size <= 0);
         assert(fds || n_fds <= 0);
         assert(ret);
 
-        if (header_accessible < sizeof(struct bus_header))
+        if (message_size < sizeof(struct bus_header))
                 return -EBADMSG;
 
-        if (header_accessible > message_size)
-                return -EBADMSG;
-        if (footer_accessible > message_size)
-                return -EBADMSG;
-
-        h = header;
+        h = buffer;
         if (!IN_SET(h->version, 1, 2))
                 return -EBADMSG;
 
@@ -456,7 +362,7 @@
 
         /* Note that we are happy with unknown flags in the flags header! */
 
-        a = ALIGN(sizeof(sd_bus_message)) + ALIGN(extra);
+        a = ALIGN(sizeof(sd_bus_message));
 
         if (label) {
                 label_sz = strlen(label);
@@ -468,56 +374,24 @@
                 return -ENOMEM;
 
         m->sealed = true;
-        m->header = header;
-        m->header_accessible = header_accessible;
-        m->footer = footer;
-        m->footer_accessible = footer_accessible;
+        m->header = buffer;
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                size_t ws;
+        if (h->serial == 0)
+                return -EBADMSG;
 
-                if (h->dbus2.cookie == 0)
-                        return -EBADMSG;
+        m->fields_size = BUS_MESSAGE_BSWAP32(m, h->fields_size);
+        m->body_size = BUS_MESSAGE_BSWAP32(m, h->body_size);
 
-                /* dbus2 derives the sizes from the message size and
-                the offset table at the end, since it is formatted as
-                gvariant "yyyyuta{tv}v". Since the message itself is a
-                structure with precisely to variable sized entries,
-                there's only one offset in the table, which marks the
-                end of the fields array. */
-
-                ws = bus_gvariant_determine_word_size(message_size, 0);
-                if (footer_accessible < ws)
-                        return -EBADMSG;
-
-                m->fields_size = bus_gvariant_read_word_le((uint8_t*) footer + footer_accessible - ws, ws);
-                if (ALIGN8(m->fields_size) > message_size - ws)
-                        return -EBADMSG;
-                if (m->fields_size < sizeof(struct bus_header))
-                        return -EBADMSG;
-
-                m->fields_size -= sizeof(struct bus_header);
-                m->body_size = message_size - (sizeof(struct bus_header) + ALIGN8(m->fields_size));
-        } else {
-                if (h->dbus1.serial == 0)
-                        return -EBADMSG;
-
-                /* dbus1 has the sizes in the header */
-                m->fields_size = BUS_MESSAGE_BSWAP32(m, h->dbus1.fields_size);
-                m->body_size = BUS_MESSAGE_BSWAP32(m, h->dbus1.body_size);
-
-                assert(message_size >= sizeof(struct bus_header));
-                if (m->fields_size > message_size - sizeof(struct bus_header) ||
-                    ALIGN8(m->fields_size) > message_size - sizeof(struct bus_header) ||
-                    m->body_size != message_size - sizeof(struct bus_header) - ALIGN8(m->fields_size))
-                        return -EBADMSG;
-        }
+        assert(message_size >= sizeof(struct bus_header));
+        if (ALIGN8(m->fields_size) > message_size - sizeof(struct bus_header) ||
+            m->body_size != message_size - sizeof(struct bus_header) - ALIGN8(m->fields_size))
+                return -EBADMSG;
 
         m->fds = fds;
         m->n_fds = n_fds;
 
         if (label) {
-                m->creds.label = (char*) m + ALIGN(sizeof(sd_bus_message)) + ALIGN(extra);
+                m->creds.label = (char*) m + ALIGN(sizeof(sd_bus_message));
                 memcpy(m->creds.label, label, label_sz + 1);
 
                 m->creds.mask |= SD_BUS_CREDS_SELINUX_CONTEXT;
@@ -544,14 +418,12 @@
         size_t sz;
         int r;
 
-        r = bus_message_from_header(
+        r = message_from_header(
                         bus,
-                        buffer, length, /* in this case the initial bytes and the final bytes are the same */
                         buffer, length,
-                        length,
                         fds, n_fds,
                         label,
-                        0, &m);
+                        &m);
         if (r < 0)
                 return r;
 
@@ -561,14 +433,14 @@
                 m->body.data = (uint8_t*) buffer + sizeof(struct bus_header) + ALIGN8(m->fields_size);
                 m->body.size = sz;
                 m->body.sealed = true;
-                m->body.memfd = -1;
+                m->body.memfd = -EBADF;
         }
 
         m->n_iovec = 1;
         m->iovec = m->iovec_fixed;
         m->iovec[0] = IOVEC_MAKE(buffer, length);
 
-        r = bus_message_parse_fields(m);
+        r = message_parse_fields(m);
         if (r < 0)
                 return r;
 
@@ -603,7 +475,6 @@
         t->header->type = type;
         t->header->version = bus->message_version;
         t->allow_fds = bus->can_fds || !IN_SET(bus->state, BUS_HELLO, BUS_RUNNING);
-        t->root_container.need_offsets = BUS_MESSAGE_IS_GVARIANT(t);
 
         if (bus->allow_interactive_authorization)
                 t->header->flags |= BUS_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION;
@@ -612,9 +483,10 @@
         return 0;
 }
 
-_public_ int sd_bus_message_new_signal(
+_public_ int sd_bus_message_new_signal_to(
                 sd_bus *bus,
                 sd_bus_message **m,
+                const char *destination,
                 const char *path,
                 const char *interface,
                 const char *member) {
@@ -625,6 +497,7 @@
         assert_return(bus, -ENOTCONN);
         assert_return(bus = bus_resolve(bus), -ENOPKG);
         assert_return(bus->state != BUS_UNSET, -ENOTCONN);
+        assert_return(!destination || service_name_is_valid(destination), -EINVAL);
         assert_return(object_path_is_valid(path), -EINVAL);
         assert_return(interface_name_is_valid(interface), -EINVAL);
         assert_return(member_name_is_valid(member), -EINVAL);
@@ -648,10 +521,26 @@
         if (r < 0)
                 return r;
 
+        if (destination) {
+                r = message_append_field_string(t, BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, destination, &t->destination);
+                if (r < 0)
+                        return r;
+        }
+
         *m = TAKE_PTR(t);
         return 0;
 }
 
+_public_ int sd_bus_message_new_signal(
+                sd_bus *bus,
+                sd_bus_message **m,
+                const char *path,
+                const char *interface,
+                const char *member) {
+
+        return sd_bus_message_new_signal_to(bus, m, NULL, path, interface, member);
+}
+
 _public_ int sd_bus_message_new_method_call(
                 sd_bus *bus,
                 sd_bus_message **m,
@@ -803,7 +692,7 @@
         assert_return(m, -EINVAL);
 
         va_start(ap, format);
-        bus_error_setfv(&error, name, format, ap);
+        sd_bus_error_setfv(&error, name, format, ap);
         va_end(ap);
 
         return sd_bus_message_new_method_error(call, m, &error);
@@ -1196,7 +1085,7 @@
         return 0;
 }
 
-struct bus_body_part *message_append_part(sd_bus_message *m) {
+static struct bus_body_part *message_append_part(sd_bus_message *m) {
         struct bus_body_part *part;
 
         assert(m);
@@ -1219,7 +1108,7 @@
                 m->body_end->next = part;
         }
 
-        part->memfd = -1;
+        part->memfd = -EBADF;
         m->body_end = part;
         m->n_body_parts++;
 
@@ -1277,27 +1166,6 @@
         return 0;
 }
 
-static int message_add_offset(sd_bus_message *m, size_t offset) {
-        struct bus_container *c;
-
-        assert(m);
-        assert(BUS_MESSAGE_IS_GVARIANT(m));
-
-        /* Add offset to current container, unless this is the first
-         * item in it, which will have the 0 offset, which we can
-         * ignore. */
-        c = message_get_last_container(m);
-
-        if (!c->need_offsets)
-                return 0;
-
-        if (!GREEDY_REALLOC(c->offsets, c->n_offsets + 1))
-                return -ENOMEM;
-
-        c->offsets[c->n_offsets++] = offset;
-        return 0;
-}
-
 static void message_extend_containers(sd_bus_message *m, size_t expand) {
         assert(m);
 
@@ -1316,9 +1184,7 @@
 static void *message_extend_body(
                 sd_bus_message *m,
                 size_t align,
-                size_t sz,
-                bool add_offset,
-                bool force_inline) {
+                size_t sz) {
 
         size_t start_body, end_body, padding, added;
         void *p;
@@ -1331,7 +1197,7 @@
         if (m->poisoned)
                 return NULL;
 
-        start_body = ALIGN_TO((size_t) m->body_size, align);
+        start_body = ALIGN_TO(m->body_size, align);
         end_body = start_body + sz;
 
         padding = start_body - m->body_size;
@@ -1350,8 +1216,7 @@
                 add_new_part =
                         m->n_body_parts <= 0 ||
                         m->body_end->sealed ||
-                        (padding != ALIGN_TO(m->body_end->size, align) - m->body_end->size) ||
-                        (force_inline && m->body_end->size > MEMFD_MIN_SIZE);
+                        (padding != ALIGN_TO(m->body_end->size, align) - m->body_end->size);
                         /* If this must be an inlined extension, let's create a new part if
                          * the previous part is large enough to be inlined. */
 
@@ -1405,14 +1270,6 @@
         m->body_size = end_body;
         message_extend_containers(m, added);
 
-        if (add_offset) {
-                r = message_add_offset(m, end_body);
-                if (r < 0) {
-                        m->poisoned = true;
-                        return NULL;
-                }
-        }
-
         return p;
 }
 
@@ -1446,9 +1303,10 @@
 }
 
 int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct bus_container *c;
         ssize_t align, sz;
+        uint32_t u32;
         void *a;
 
         assert_return(m, -EINVAL);
@@ -1477,149 +1335,85 @@
                 }
         }
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                uint8_t u8;
-                uint32_t u32;
+        switch (type) {
 
-                switch (type) {
+        case SD_BUS_TYPE_STRING:
+                /* To make things easy we'll serialize a NULL string
+                 * into the empty string */
+                p = strempty(p);
 
-                case SD_BUS_TYPE_SIGNATURE:
-                case SD_BUS_TYPE_STRING:
-                        p = strempty(p);
+                _fallthrough_;
+        case SD_BUS_TYPE_OBJECT_PATH:
 
-                        _fallthrough_;
-                case SD_BUS_TYPE_OBJECT_PATH:
-                        if (!p)
-                                return -EINVAL;
+                if (!p)
+                        return -EINVAL;
 
-                        align = 1;
-                        sz = strlen(p) + 1;
-                        break;
+                align = 4;
+                sz = 4 + strlen(p) + 1;
+                break;
 
-                case SD_BUS_TYPE_BOOLEAN:
+        case SD_BUS_TYPE_SIGNATURE:
 
-                        u8 = p && *(int*) p;
-                        p = &u8;
+                p = strempty(p);
 
-                        align = sz = 1;
-                        break;
+                align = 1;
+                sz = 1 + strlen(p) + 1;
+                break;
 
-                case SD_BUS_TYPE_UNIX_FD:
+        case SD_BUS_TYPE_BOOLEAN:
 
-                        if (!p)
-                                return -EINVAL;
+                u32 = p && *(int*) p;
+                p = &u32;
 
-                        fd = message_push_fd(m, *(int*) p);
-                        if (fd < 0)
-                                return fd;
+                align = sz = 4;
+                break;
 
-                        u32 = m->n_fds;
-                        p = &u32;
+        case SD_BUS_TYPE_UNIX_FD:
 
-                        align = sz = 4;
-                        break;
+                if (!p)
+                        return -EINVAL;
 
-                default:
-                        align = bus_gvariant_get_alignment(CHAR_TO_STR(type));
-                        sz = bus_gvariant_get_size(CHAR_TO_STR(type));
-                        break;
-                }
+                fd = message_push_fd(m, *(int*) p);
+                if (fd < 0)
+                        return fd;
 
-                assert(align > 0);
-                assert(sz > 0);
+                u32 = m->n_fds;
+                p = &u32;
 
-                a = message_extend_body(m, align, sz, true, false);
-                if (!a)
-                        return -ENOMEM;
+                align = sz = 4;
+                break;
 
+        default:
+                align = bus_type_get_alignment(type);
+                sz = bus_type_get_size(type);
+                break;
+        }
+
+        assert(align > 0);
+        assert(sz > 0);
+
+        a = message_extend_body(m, align, sz);
+        if (!a)
+                return -ENOMEM;
+
+        if (IN_SET(type, SD_BUS_TYPE_STRING, SD_BUS_TYPE_OBJECT_PATH)) {
+                *(uint32_t*) a = sz - 5;
+                memcpy((uint8_t*) a + 4, p, sz - 4);
+
+                if (stored)
+                        *stored = (const uint8_t*) a + 4;
+
+        } else if (type == SD_BUS_TYPE_SIGNATURE) {
+                *(uint8_t*) a = sz - 2;
+                memcpy((uint8_t*) a + 1, p, sz - 1);
+
+                if (stored)
+                        *stored = (const uint8_t*) a + 1;
+        } else {
                 memcpy(a, p, sz);
 
                 if (stored)
-                        *stored = (const uint8_t*) a;
-
-        } else {
-                uint32_t u32;
-
-                switch (type) {
-
-                case SD_BUS_TYPE_STRING:
-                        /* To make things easy we'll serialize a NULL string
-                         * into the empty string */
-                        p = strempty(p);
-
-                        _fallthrough_;
-                case SD_BUS_TYPE_OBJECT_PATH:
-
-                        if (!p)
-                                return -EINVAL;
-
-                        align = 4;
-                        sz = 4 + strlen(p) + 1;
-                        break;
-
-                case SD_BUS_TYPE_SIGNATURE:
-
-                        p = strempty(p);
-
-                        align = 1;
-                        sz = 1 + strlen(p) + 1;
-                        break;
-
-                case SD_BUS_TYPE_BOOLEAN:
-
-                        u32 = p && *(int*) p;
-                        p = &u32;
-
-                        align = sz = 4;
-                        break;
-
-                case SD_BUS_TYPE_UNIX_FD:
-
-                        if (!p)
-                                return -EINVAL;
-
-                        fd = message_push_fd(m, *(int*) p);
-                        if (fd < 0)
-                                return fd;
-
-                        u32 = m->n_fds;
-                        p = &u32;
-
-                        align = sz = 4;
-                        break;
-
-                default:
-                        align = bus_type_get_alignment(type);
-                        sz = bus_type_get_size(type);
-                        break;
-                }
-
-                assert(align > 0);
-                assert(sz > 0);
-
-                a = message_extend_body(m, align, sz, false, false);
-                if (!a)
-                        return -ENOMEM;
-
-                if (IN_SET(type, SD_BUS_TYPE_STRING, SD_BUS_TYPE_OBJECT_PATH)) {
-                        *(uint32_t*) a = sz - 5;
-                        memcpy((uint8_t*) a + 4, p, sz - 4);
-
-                        if (stored)
-                                *stored = (const uint8_t*) a + 4;
-
-                } else if (type == SD_BUS_TYPE_SIGNATURE) {
-                        *(uint8_t*) a = sz - 2;
-                        memcpy((uint8_t*) a + 1, p, sz - 1);
-
-                        if (stored)
-                                *stored = (const uint8_t*) a + 1;
-                } else {
-                        memcpy(a, p, sz);
-
-                        if (stored)
-                                *stored = a;
-                }
+                        *stored = a;
         }
 
         if (type == SD_BUS_TYPE_UNIX_FD)
@@ -1628,7 +1422,7 @@
         if (c->enclosing != SD_BUS_TYPE_ARRAY)
                 c->index++;
 
-        fd = -1;
+        fd = -EBADF;
         return 0;
 }
 
@@ -1670,20 +1464,12 @@
                 }
         }
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                a = message_extend_body(m, 1, size + 1, true, false);
-                if (!a)
-                        return -ENOMEM;
+        a = message_extend_body(m, 4, 4 + size + 1);
+        if (!a)
+                return -ENOMEM;
 
-                *s = a;
-        } else {
-                a = message_extend_body(m, 4, 4 + size + 1, false, false);
-                if (!a)
-                        return -ENOMEM;
-
-                *(uint32_t*) a = size;
-                *s = (char*) a + 4;
-        }
+        *(uint32_t*) a = size;
+        *s = (char*) a + 4;
 
         (*s)[size] = 0;
 
@@ -1732,18 +1518,19 @@
                 struct bus_container *c,
                 const char *contents,
                 uint32_t **array_size,
-                size_t *begin,
-                bool *need_offsets) {
+                size_t *begin) {
 
         unsigned nindex;
-        int alignment, r;
+        int alignment;
+        void *a, *op;
+        size_t os;
+        struct bus_body_part *o;
 
         assert(m);
         assert(c);
         assert(contents);
         assert(array_size);
         assert(begin);
-        assert(need_offsets);
 
         if (!signature_is_single(contents, true))
                 return -EINVAL;
@@ -1776,49 +1563,28 @@
                 nindex = e - c->signature;
         }
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                alignment = bus_gvariant_get_alignment(contents);
-                if (alignment < 0)
-                        return alignment;
+        alignment = bus_type_get_alignment(contents[0]);
+        if (alignment < 0)
+                return alignment;
 
-                /* Add alignment padding and add to offset list */
-                if (!message_extend_body(m, alignment, 0, false, false))
-                        return -ENOMEM;
+        a = message_extend_body(m, 4, 4);
+        if (!a)
+                return -ENOMEM;
 
-                r = bus_gvariant_is_fixed_size(contents);
-                if (r < 0)
-                        return r;
+        o = m->body_end;
+        op = m->body_end->data;
+        os = m->body_end->size;
 
-                *begin = m->body_size;
-                *need_offsets = r == 0;
-        } else {
-                void *a, *op;
-                size_t os;
-                struct bus_body_part *o;
+        /* Add alignment between size and first element */
+        if (!message_extend_body(m, alignment, 0))
+                return -ENOMEM;
 
-                alignment = bus_type_get_alignment(contents[0]);
-                if (alignment < 0)
-                        return alignment;
+        /* location of array size might have changed so let's readjust a */
+        if (o == m->body_end)
+                a = adjust_pointer(a, op, os, m->body_end->data);
 
-                a = message_extend_body(m, 4, 4, false, false);
-                if (!a)
-                        return -ENOMEM;
-
-                o = m->body_end;
-                op = m->body_end->data;
-                os = m->body_end->size;
-
-                /* Add alignment between size and first element */
-                if (!message_extend_body(m, alignment, 0, false, false))
-                        return -ENOMEM;
-
-                /* location of array size might have changed so let's readjust a */
-                if (o == m->body_end)
-                        a = adjust_pointer(a, op, os, m->body_end->data);
-
-                *(uint32_t*) a = 0;
-                *array_size = a;
-        }
+        *(uint32_t*) a = 0;
+        *array_size = a;
 
         if (c->enclosing != SD_BUS_TYPE_ARRAY)
                 c->index = nindex;
@@ -1831,6 +1597,9 @@
                 struct bus_container *c,
                 const char *contents) {
 
+        size_t l;
+        void *a;
+
         assert(m);
         assert(c);
         assert(contents);
@@ -1859,24 +1628,13 @@
                 }
         }
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                /* Variants are always aligned to 8 */
+        l = strlen(contents);
+        a = message_extend_body(m, 1, 1 + l + 1);
+        if (!a)
+                return -ENOMEM;
 
-                if (!message_extend_body(m, 8, 0, false, false))
-                        return -ENOMEM;
-
-        } else {
-                size_t l;
-                void *a;
-
-                l = strlen(contents);
-                a = message_extend_body(m, 1, 1 + l + 1, false, false);
-                if (!a)
-                        return -ENOMEM;
-
-                *(uint8_t*) a = l;
-                memcpy((uint8_t*) a + 1, contents, l + 1);
-        }
+        *(uint8_t*) a = l;
+        memcpy((uint8_t*) a + 1, contents, l + 1);
 
         if (c->enclosing != SD_BUS_TYPE_ARRAY)
                 c->index++;
@@ -1888,17 +1646,14 @@
                 sd_bus_message *m,
                 struct bus_container *c,
                 const char *contents,
-                size_t *begin,
-                bool *need_offsets) {
+                size_t *begin) {
 
         size_t nindex;
-        int r;
 
         assert(m);
         assert(c);
         assert(contents);
         assert(begin);
-        assert(need_offsets);
 
         if (!signature_is_valid(contents, false))
                 return -EINVAL;
@@ -1929,27 +1684,9 @@
                 nindex = e - c->signature;
         }
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                int alignment;
-
-                alignment = bus_gvariant_get_alignment(contents);
-                if (alignment < 0)
-                        return alignment;
-
-                if (!message_extend_body(m, alignment, 0, false, false))
-                        return -ENOMEM;
-
-                r = bus_gvariant_is_fixed_size(contents);
-                if (r < 0)
-                        return r;
-
-                *begin = m->body_size;
-                *need_offsets = r == 0;
-        } else {
-                /* Align contents to 8 byte boundary */
-                if (!message_extend_body(m, 8, 0, false, false))
-                        return -ENOMEM;
-        }
+        /* Align contents to 8 byte boundary */
+        if (!message_extend_body(m, 8, 0))
+                return -ENOMEM;
 
         if (c->enclosing != SD_BUS_TYPE_ARRAY)
                 c->index = nindex;
@@ -1961,16 +1698,12 @@
                 sd_bus_message *m,
                 struct bus_container *c,
                 const char *contents,
-                size_t *begin,
-                bool *need_offsets) {
-
-        int r;
+                size_t *begin) {
 
         assert(m);
         assert(c);
         assert(contents);
         assert(begin);
-        assert(need_offsets);
 
         if (!signature_is_pair(contents))
                 return -EINVAL;
@@ -1990,27 +1723,9 @@
         } else
                 return -ENXIO;
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                int alignment;
-
-                alignment = bus_gvariant_get_alignment(contents);
-                if (alignment < 0)
-                        return alignment;
-
-                if (!message_extend_body(m, alignment, 0, false, false))
-                        return -ENOMEM;
-
-                r = bus_gvariant_is_fixed_size(contents);
-                if (r < 0)
-                        return r;
-
-                *begin = m->body_size;
-                *need_offsets = r == 0;
-        } else {
-                /* Align contents to 8 byte boundary */
-                if (!message_extend_body(m, 8, 0, false, false))
-                        return -ENOMEM;
-        }
+        /* Align contents to 8 byte boundary */
+        if (!message_extend_body(m, 8, 0))
+                return -ENOMEM;
 
         return 0;
 }
@@ -2024,7 +1739,6 @@
         uint32_t *array_size = NULL;
         _cleanup_free_ char *signature = NULL;
         size_t before, begin = 0;
-        bool need_offsets = false;
         int r;
 
         assert_return(m, -EINVAL);
@@ -2052,13 +1766,13 @@
         before = m->body_size;
 
         if (type == SD_BUS_TYPE_ARRAY)
-                r = bus_message_open_array(m, c, contents, &array_size, &begin, &need_offsets);
+                r = bus_message_open_array(m, c, contents, &array_size, &begin);
         else if (type == SD_BUS_TYPE_VARIANT)
                 r = bus_message_open_variant(m, c, contents);
         else if (type == SD_BUS_TYPE_STRUCT)
-                r = bus_message_open_struct(m, c, contents, &begin, &need_offsets);
+                r = bus_message_open_struct(m, c, contents, &begin);
         else if (type == SD_BUS_TYPE_DICT_ENTRY)
-                r = bus_message_open_dict_entry(m, c, contents, &begin, &need_offsets);
+                r = bus_message_open_dict_entry(m, c, contents, &begin);
         else
                 r = -EINVAL;
         if (r < 0)
@@ -2071,192 +1785,13 @@
                 .array_size = array_size,
                 .before = before,
                 .begin = begin,
-                .need_offsets = need_offsets,
         };
 
         return 0;
 }
 
-static int bus_message_close_array(sd_bus_message *m, struct bus_container *c) {
-
-        assert(m);
-        assert(c);
-
-        if (!BUS_MESSAGE_IS_GVARIANT(m))
-                return 0;
-
-        if (c->need_offsets) {
-                size_t payload, sz, i;
-                uint8_t *a;
-
-                /* Variable-width arrays */
-
-                payload = c->n_offsets > 0 ? c->offsets[c->n_offsets-1] - c->begin : 0;
-                sz = bus_gvariant_determine_word_size(payload, c->n_offsets);
-
-                a = message_extend_body(m, 1, sz * c->n_offsets, true, false);
-                if (!a)
-                        return -ENOMEM;
-
-                for (i = 0; i < c->n_offsets; i++)
-                        bus_gvariant_write_word_le(a + sz*i, sz, c->offsets[i] - c->begin);
-        } else {
-                void *a;
-
-                /* Fixed-width or empty arrays */
-
-                a = message_extend_body(m, 1, 0, true, false); /* let's add offset to parent */
-                if (!a)
-                        return -ENOMEM;
-        }
-
-        return 0;
-}
-
-static int bus_message_close_variant(sd_bus_message *m, struct bus_container *c) {
-        uint8_t *a;
-        size_t l;
-
-        assert(m);
-        assert(c);
-        assert(c->signature);
-
-        if (!BUS_MESSAGE_IS_GVARIANT(m))
-                return 0;
-
-        l = strlen(c->signature);
-
-        a = message_extend_body(m, 1, 1 + l, true, false);
-        if (!a)
-                return -ENOMEM;
-
-        a[0] = 0;
-        memcpy(a+1, c->signature, l);
-
-        return 0;
-}
-
-static int bus_message_close_struct(sd_bus_message *m, struct bus_container *c, bool add_offset) {
-        bool fixed_size = true;
-        size_t n_variable = 0;
-        unsigned i = 0;
-        const char *p;
-        uint8_t *a;
-        int r;
-
-        assert(m);
-        assert(c);
-
-        if (!BUS_MESSAGE_IS_GVARIANT(m))
-                return 0;
-
-        p = strempty(c->signature);
-        while (*p != 0) {
-                size_t n;
-
-                r = signature_element_length(p, &n);
-                if (r < 0)
-                        return r;
-                else {
-                        char t[n+1];
-
-                        memcpy(t, p, n);
-                        t[n] = 0;
-
-                        r = bus_gvariant_is_fixed_size(t);
-                        if (r < 0)
-                                return r;
-                }
-
-                assert(!c->need_offsets || i <= c->n_offsets);
-
-                /* We need to add an offset for each item that has a
-                 * variable size and that is not the last one in the
-                 * list */
-                if (r == 0)
-                        fixed_size = false;
-                if (r == 0 && p[n] != 0)
-                        n_variable++;
-
-                i++;
-                p += n;
-        }
-
-        assert(!c->need_offsets || i == c->n_offsets);
-        assert(c->need_offsets || n_variable == 0);
-
-        if (isempty(c->signature)) {
-                /* The unary type is encoded as fixed 1 byte padding */
-                a = message_extend_body(m, 1, 1, add_offset, false);
-                if (!a)
-                        return -ENOMEM;
-
-                *a = 0;
-        } else if (n_variable <= 0) {
-                int alignment = 1;
-
-                /* Structures with fixed-size members only have to be
-                 * fixed-size themselves. But gvariant requires all fixed-size
-                 * elements to be sized a multiple of their alignment. Hence,
-                 * we must *always* add final padding after the last member so
-                 * the overall size of the structure is properly aligned. */
-                if (fixed_size)
-                        alignment = bus_gvariant_get_alignment(strempty(c->signature));
-
-                assert(alignment > 0);
-
-                a = message_extend_body(m, alignment, 0, add_offset, false);
-                if (!a)
-                        return -ENOMEM;
-        } else {
-                size_t sz;
-                unsigned j;
-
-                assert(c->offsets[c->n_offsets-1] == m->body_size);
-
-                sz = bus_gvariant_determine_word_size(m->body_size - c->begin, n_variable);
-
-                a = message_extend_body(m, 1, sz * n_variable, add_offset, false);
-                if (!a)
-                        return -ENOMEM;
-
-                p = strempty(c->signature);
-                for (i = 0, j = 0; i < c->n_offsets; i++) {
-                        unsigned k;
-                        size_t n;
-
-                        r = signature_element_length(p, &n);
-                        if (r < 0)
-                                return r;
-                        else {
-                                char t[n+1];
-
-                                memcpy(t, p, n);
-                                t[n] = 0;
-
-                                p += n;
-
-                                r = bus_gvariant_is_fixed_size(t);
-                                if (r < 0)
-                                        return r;
-                                if (r > 0 || p[0] == 0)
-                                        continue;
-                        }
-
-                        k = n_variable - 1 - j;
-
-                        bus_gvariant_write_word_le(a + k * sz, sz, c->offsets[i] - c->begin);
-
-                        j++;
-                }
-        }
-
-        return 0;
-}
-
 _public_ int sd_bus_message_close_container(sd_bus_message *m) {
         struct bus_container *c;
-        int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
@@ -2271,19 +1806,9 @@
 
         m->n_containers--;
 
-        if (c->enclosing == SD_BUS_TYPE_ARRAY)
-                r = bus_message_close_array(m, c);
-        else if (c->enclosing == SD_BUS_TYPE_VARIANT)
-                r = bus_message_close_variant(m, c);
-        else if (IN_SET(c->enclosing, SD_BUS_TYPE_STRUCT, SD_BUS_TYPE_DICT_ENTRY))
-                r = bus_message_close_struct(m, c, true);
-        else
-                assert_not_reached("Unknown container type");
-
         free(c->signature);
-        free(c->offsets);
 
-        return r;
+        return 0;
 }
 
 typedef struct {
@@ -2556,8 +2081,6 @@
         assert_return(ptr || size == 0, -EINVAL);
         assert_return(!m->poisoned, -ESTALE);
 
-        /* alignment and size of the trivial types (except bool) is
-         * identical for gvariant and dbus1 marshalling */
         align = bus_type_get_alignment(type);
         sz = bus_type_get_size(type);
 
@@ -2571,7 +2094,7 @@
         if (r < 0)
                 return r;
 
-        a = message_extend_body(m, align, size, false, false);
+        a = message_extend_body(m, align, size);
         if (!a)
                 return -ENOMEM;
 
@@ -2649,7 +2172,7 @@
                 uint64_t offset,
                 uint64_t size) {
 
-        _cleanup_close_ int copy_fd = -1;
+        _cleanup_close_ int copy_fd = -EBADF;
         struct bus_body_part *part;
         ssize_t align, sz;
         uint64_t real_size;
@@ -2699,7 +2222,7 @@
         if (r < 0)
                 return r;
 
-        a = message_extend_body(m, align, 0, false, false);
+        a = message_extend_body(m, align, 0);
         if (!a)
                 return -ENOMEM;
 
@@ -2711,7 +2234,7 @@
         part->memfd_offset = offset;
         part->sealed = true;
         part->size = size;
-        copy_fd = -1;
+        copy_fd = -EBADF;
 
         m->body_size += size;
         message_extend_containers(m, size);
@@ -2725,7 +2248,7 @@
                 uint64_t offset,
                 uint64_t size) {
 
-        _cleanup_close_ int copy_fd = -1;
+        _cleanup_close_ int copy_fd = -EBADF;
         struct bus_body_part *part;
         struct bus_container *c;
         uint64_t real_size;
@@ -2782,13 +2305,11 @@
                 }
         }
 
-        if (!BUS_MESSAGE_IS_GVARIANT(m)) {
-                a = message_extend_body(m, 4, 4, false, false);
-                if (!a)
-                        return -ENOMEM;
+        a = message_extend_body(m, 4, 4);
+        if (!a)
+                return -ENOMEM;
 
-                *(uint32_t*) a = size - 1;
-        }
+        *(uint32_t*) a = size - 1;
 
         part = message_append_part(m);
         if (!part)
@@ -2798,19 +2319,11 @@
         part->memfd_offset = offset;
         part->sealed = true;
         part->size = size;
-        copy_fd = -1;
+        copy_fd = -EBADF;
 
         m->body_size += size;
         message_extend_containers(m, size);
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                r = message_add_offset(m, m->body_size);
-                if (r < 0) {
-                        m->poisoned = true;
-                        return -ENOMEM;
-                }
-        }
-
         if (c->enclosing != SD_BUS_TYPE_ARRAY)
                 c->index++;
 
@@ -2818,7 +2331,6 @@
 }
 
 _public_ int sd_bus_message_append_strv(sd_bus_message *m, char **l) {
-        char **i;
         int r;
 
         assert_return(m, -EINVAL);
@@ -2839,61 +2351,14 @@
 }
 
 static int bus_message_close_header(sd_bus_message *m) {
-
         assert(m);
 
-        /* The actual user data is finished now, we just complete the
-           variant and struct now (at least on gvariant). Remember
-           this position, so that during parsing we know where to
-           put the outer container end. */
+        /* The actual user data is finished now, we just complete the variant and struct now. Remember
+         * this position, so that during parsing we know where to put the outer container end. */
         m->user_body_size = m->body_size;
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                const char *signature;
-                size_t sz, l;
-                void *d;
-
-                /* Add offset table to end of fields array */
-                if (m->n_header_offsets >= 1) {
-                        uint8_t *a;
-                        unsigned i;
-
-                        assert(m->fields_size == m->header_offsets[m->n_header_offsets-1]);
-
-                        sz = bus_gvariant_determine_word_size(m->fields_size, m->n_header_offsets);
-                        a = message_extend_fields(m, 1, sz * m->n_header_offsets, false);
-                        if (!a)
-                                return -ENOMEM;
-
-                        for (i = 0; i < m->n_header_offsets; i++)
-                                bus_gvariant_write_word_le(a + sz*i, sz, m->header_offsets[i]);
-                }
-
-                /* Add gvariant NUL byte plus signature to the end of
-                 * the body, followed by the final offset pointing to
-                 * the end of the fields array */
-
-                signature = strempty(m->root_container.signature);
-                l = strlen(signature);
-
-                sz = bus_gvariant_determine_word_size(sizeof(struct bus_header) + ALIGN8(m->fields_size) + m->body_size + 1 + l + 2, 1);
-                d = message_extend_body(m, 1, 1 + l + 2 + sz, false, true);
-                if (!d)
-                        return -ENOMEM;
-
-                *(uint8_t*) d = 0;
-                *((uint8_t*) d + 1) = SD_BUS_TYPE_STRUCT_BEGIN;
-                memcpy((uint8_t*) d + 2, signature, l);
-                *((uint8_t*) d + 1 + l + 1) = SD_BUS_TYPE_STRUCT_END;
-
-                bus_gvariant_write_word_le((uint8_t*) d + 1 + l + 2, sz, sizeof(struct bus_header) + m->fields_size);
-
-                m->footer = d;
-                m->footer_accessible = 1 + l + 2 + sz;
-        } else {
-                m->header->dbus1.fields_size = m->fields_size;
-                m->header->dbus1.body_size = m->body_size;
-        }
+        m->header->fields_size = m->fields_size;
+        m->header->body_size = m->body_size;
 
         return 0;
 }
@@ -2915,8 +2380,7 @@
         if (m->poisoned)
                 return -ESTALE;
 
-        if (cookie > 0xffffffffULL &&
-            !BUS_MESSAGE_IS_GVARIANT(m))
+        if (cookie > UINT32_MAX)
                 return -EOPNOTSUPP;
 
         /* In vtables the return signature of method calls is listed,
@@ -2926,14 +2390,8 @@
             !streq(strempty(m->root_container.signature), m->enforced_reply_signature))
                 return -ENOMSG;
 
-        /* If gvariant marshalling is used we need to close the body structure */
-        r = bus_message_close_struct(m, &m->root_container, false);
-        if (r < 0)
-                return r;
-
-        /* If there's a non-trivial signature set, then add it in
-         * here, but only on dbus1 */
-        if (!isempty(m->root_container.signature) && !BUS_MESSAGE_IS_GVARIANT(m)) {
+        /* If there's a non-trivial signature set, then add it in here */
+        if (!isempty(m->root_container.signature)) {
                 r = message_append_field_signature(m, BUS_MESSAGE_HEADER_SIGNATURE, m->root_container.signature, NULL);
                 if (r < 0)
                         return r;
@@ -2949,10 +2407,7 @@
         if (r < 0)
                 return r;
 
-        if (BUS_MESSAGE_IS_GVARIANT(m))
-                m->header->dbus2.cookie = cookie;
-        else
-                m->header->dbus1.serial = (uint32_t) cookie;
+        m->header->serial = (uint32_t) cookie;
 
         m->timeout = m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED ? 0 : timeout_usec;
 
@@ -2994,8 +2449,6 @@
 
         m->root_container.end = m->user_body_size;
         m->root_container.index = 0;
-        m->root_container.offset_index = 0;
-        m->root_container.item_size = m->root_container.n_offsets > 0 ? m->root_container.offsets[0] : 0;
 
         m->sealed = true;
 
@@ -3065,37 +2518,6 @@
         return;
 }
 
-static int buffer_peek(const void *p, size_t sz, size_t *rindex, size_t align, size_t nbytes, void **r) {
-        size_t k, start, end;
-
-        assert(rindex);
-        assert(align > 0);
-
-        start = ALIGN_TO(*rindex, align);
-        if (start > sz)
-                return -EBADMSG;
-
-        /* Avoid overflow below */
-        if (nbytes > SIZE_MAX - start)
-                return -EBADMSG;
-
-        end = start + nbytes;
-        if (end > sz)
-                return -EBADMSG;
-
-        /* Verify that padding is 0 */
-        for (k = *rindex; k < start; k++)
-                if (((const uint8_t*) p)[k] != 0)
-                        return -EBADMSG;
-
-        if (r)
-                *r = (uint8_t*) p + start;
-
-        *rindex = end;
-
-        return 1;
-}
-
 static bool message_end_of_signature(sd_bus_message *m) {
         struct bus_container *c;
 
@@ -3114,12 +2536,8 @@
         if (c->enclosing != SD_BUS_TYPE_ARRAY)
                 return false;
 
-        if (BUS_MESSAGE_IS_GVARIANT(m))
-                return index >= c->end;
-        else {
-                assert(c->array_size);
-                return index >= c->begin + BUS_MESSAGE_BSWAP32(m, *c->array_size);
-        }
+        assert(c->array_size);
+        return index >= c->begin + BUS_MESSAGE_BSWAP32(m, *c->array_size);
 }
 
 _public_ int sd_bus_message_at_end(sd_bus_message *m, int complete) {
@@ -3180,93 +2598,6 @@
         return NULL;
 }
 
-static int container_next_item(sd_bus_message *m, struct bus_container *c, size_t *rindex) {
-        int r;
-
-        assert(m);
-        assert(c);
-        assert(rindex);
-
-        if (!BUS_MESSAGE_IS_GVARIANT(m))
-                return 0;
-
-        if (c->enclosing == SD_BUS_TYPE_ARRAY) {
-                int sz;
-
-                sz = bus_gvariant_get_size(c->signature);
-                if (sz == 0)
-                        return -EBADMSG;
-                if (sz < 0) {
-                        int alignment;
-
-                        if (c->offset_index+1 >= c->n_offsets)
-                                goto end;
-
-                        /* Variable-size array */
-
-                        alignment = bus_gvariant_get_alignment(c->signature);
-                        assert(alignment > 0);
-
-                        *rindex = ALIGN_TO(c->offsets[c->offset_index], alignment);
-                        assert(c->offsets[c->offset_index+1] >= *rindex);
-                        c->item_size = c->offsets[c->offset_index+1] - *rindex;
-                } else {
-
-                        if (c->offset_index+1 >= (c->end-c->begin)/sz)
-                                goto end;
-
-                        /* Fixed-size array */
-                        *rindex = c->begin + (c->offset_index+1) * sz;
-                        c->item_size = sz;
-                }
-
-                c->offset_index++;
-
-        } else if (IN_SET(c->enclosing, 0, SD_BUS_TYPE_STRUCT, SD_BUS_TYPE_DICT_ENTRY)) {
-
-                int alignment;
-                size_t n, j;
-
-                if (c->offset_index+1 >= c->n_offsets)
-                        goto end;
-
-                r = signature_element_length(c->signature + c->index, &n);
-                if (r < 0)
-                        return r;
-
-                r = signature_element_length(c->signature + c->index + n, &j);
-                if (r < 0)
-                        return r;
-                else {
-                        char t[j+1];
-                        memcpy(t, c->signature + c->index + n, j);
-                        t[j] = 0;
-
-                        alignment = bus_gvariant_get_alignment(t);
-                }
-
-                assert(alignment > 0);
-
-                *rindex = ALIGN_TO(c->offsets[c->offset_index], alignment);
-                assert(c->offsets[c->offset_index+1] >= *rindex);
-                c->item_size = c->offsets[c->offset_index+1] - *rindex;
-
-                c->offset_index++;
-
-        } else if (c->enclosing == SD_BUS_TYPE_VARIANT)
-                goto end;
-        else
-                assert_not_reached("Unknown container type");
-
-        return 0;
-
-end:
-        /* Reached the end */
-        *rindex = c->end;
-        c->item_size = 0;
-        return 0;
-}
-
 static int message_peek_body(
                 sd_bus_message *m,
                 size_t *rindex,
@@ -3389,401 +2720,36 @@
 
         rindex = m->rindex;
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-
-                if (IN_SET(type, SD_BUS_TYPE_STRING, SD_BUS_TYPE_OBJECT_PATH, SD_BUS_TYPE_SIGNATURE)) {
-                        bool ok;
-
-                        /* D-Bus spec: The marshalling formats for the string-like types all end
-                         * with a single zero (NUL) byte, but that byte is not considered to be part
-                         * of the text. */
-                        if (c->item_size == 0)
-                                return -EBADMSG;
-
-                        r = message_peek_body(m, &rindex, 1, c->item_size, &q);
-                        if (r < 0)
-                                return r;
-
-                        if (type == SD_BUS_TYPE_STRING)
-                                ok = validate_string(q, c->item_size-1);
-                        else if (type == SD_BUS_TYPE_OBJECT_PATH)
-                                ok = validate_object_path(q, c->item_size-1);
-                        else
-                                ok = validate_signature(q, c->item_size-1);
-
-                        if (!ok)
-                                return -EBADMSG;
-
-                        if (p)
-                                *(const char**) p = q;
-                } else {
-                        int sz, align;
-
-                        sz = bus_gvariant_get_size(CHAR_TO_STR(type));
-                        assert(sz > 0);
-                        if ((size_t) sz != c->item_size)
-                                return -EBADMSG;
-
-                        align = bus_gvariant_get_alignment(CHAR_TO_STR(type));
-                        assert(align > 0);
-
-                        r = message_peek_body(m, &rindex, align, c->item_size, &q);
-                        if (r < 0)
-                                return r;
-
-                        switch (type) {
-
-                        case SD_BUS_TYPE_BYTE:
-                                if (p)
-                                        *(uint8_t*) p = *(uint8_t*) q;
-                                break;
-
-                        case SD_BUS_TYPE_BOOLEAN:
-                                if (p)
-                                        *(int*) p = !!*(uint8_t*) q;
-                                break;
-
-                        case SD_BUS_TYPE_INT16:
-                        case SD_BUS_TYPE_UINT16:
-                                if (p)
-                                        *(uint16_t*) p = BUS_MESSAGE_BSWAP16(m, *(uint16_t*) q);
-                                break;
-
-                        case SD_BUS_TYPE_INT32:
-                        case SD_BUS_TYPE_UINT32:
-                                if (p)
-                                        *(uint32_t*) p = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q);
-                                break;
-
-                        case SD_BUS_TYPE_INT64:
-                        case SD_BUS_TYPE_UINT64:
-                        case SD_BUS_TYPE_DOUBLE:
-                                if (p)
-                                        *(uint64_t*) p = BUS_MESSAGE_BSWAP64(m, *(uint64_t*) q);
-                                break;
-
-                        case SD_BUS_TYPE_UNIX_FD: {
-                                uint32_t j;
-
-                                j = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q);
-                                if (j >= m->n_fds)
-                                        return -EBADMSG;
-
-                                if (p)
-                                        *(int*) p = m->fds[j];
-
-                                break;
-                        }
-
-                        default:
-                                assert_not_reached("unexpected type");
-                        }
-                }
-
-                r = container_next_item(m, c, &rindex);
-                if (r < 0)
-                        return r;
-        } else {
-
-                if (IN_SET(type, SD_BUS_TYPE_STRING, SD_BUS_TYPE_OBJECT_PATH)) {
-                        uint32_t l;
-                        bool ok;
-
-                        r = message_peek_body(m, &rindex, 4, 4, &q);
-                        if (r < 0)
-                                return r;
-
-                        l = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q);
-                        if (l == UINT32_MAX)
-                                /* avoid overflow right below */
-                                return -EBADMSG;
-
-                        r = message_peek_body(m, &rindex, 1, l+1, &q);
-                        if (r < 0)
-                                return r;
-
-                        if (type == SD_BUS_TYPE_OBJECT_PATH)
-                                ok = validate_object_path(q, l);
-                        else
-                                ok = validate_string(q, l);
-                        if (!ok)
-                                return -EBADMSG;
-
-                        if (p)
-                                *(const char**) p = q;
-
-                } else if (type == SD_BUS_TYPE_SIGNATURE) {
-                        uint8_t l;
-
-                        r = message_peek_body(m, &rindex, 1, 1, &q);
-                        if (r < 0)
-                                return r;
-
-                        l = *(uint8_t*) q;
-                        if (l == UINT8_MAX)
-                                /* avoid overflow right below */
-                                return -EBADMSG;
-
-                        r = message_peek_body(m, &rindex, 1, l+1, &q);
-                        if (r < 0)
-                                return r;
-
-                        if (!validate_signature(q, l))
-                                return -EBADMSG;
-
-                        if (p)
-                                *(const char**) p = q;
-
-                } else {
-                        ssize_t sz, align;
-
-                        align = bus_type_get_alignment(type);
-                        assert(align > 0);
-
-                        sz = bus_type_get_size(type);
-                        assert(sz > 0);
-
-                        r = message_peek_body(m, &rindex, align, sz, &q);
-                        if (r < 0)
-                                return r;
-
-                        switch (type) {
-
-                        case SD_BUS_TYPE_BYTE:
-                                if (p)
-                                        *(uint8_t*) p = *(uint8_t*) q;
-                                break;
-
-                        case SD_BUS_TYPE_BOOLEAN:
-                                if (p)
-                                        *(int*) p = !!*(uint32_t*) q;
-                                break;
-
-                        case SD_BUS_TYPE_INT16:
-                        case SD_BUS_TYPE_UINT16:
-                                if (p)
-                                        *(uint16_t*) p = BUS_MESSAGE_BSWAP16(m, *(uint16_t*) q);
-                                break;
-
-                        case SD_BUS_TYPE_INT32:
-                        case SD_BUS_TYPE_UINT32:
-                                if (p)
-                                        *(uint32_t*) p = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q);
-                                break;
-
-                        case SD_BUS_TYPE_INT64:
-                        case SD_BUS_TYPE_UINT64:
-                        case SD_BUS_TYPE_DOUBLE:
-                                if (p)
-                                        *(uint64_t*) p = BUS_MESSAGE_BSWAP64(m, *(uint64_t*) q);
-                                break;
-
-                        case SD_BUS_TYPE_UNIX_FD: {
-                                uint32_t j;
-
-                                j = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q);
-                                if (j >= m->n_fds)
-                                        return -EBADMSG;
-
-                                if (p)
-                                        *(int*) p = m->fds[j];
-                                break;
-                        }
-
-                        default:
-                                assert_not_reached("Unknown basic type...");
-                        }
-                }
-        }
-
-        m->rindex = rindex;
-
-        if (c->enclosing != SD_BUS_TYPE_ARRAY)
-                c->index++;
-
-        return 1;
-}
-
-static int bus_message_enter_array(
-                sd_bus_message *m,
-                struct bus_container *c,
-                const char *contents,
-                uint32_t **array_size,
-                size_t *item_size,
-                size_t **offsets,
-                size_t *n_offsets) {
-
-        size_t rindex;
-        void *q;
-        int r;
-
-        assert(m);
-        assert(c);
-        assert(contents);
-        assert(array_size);
-        assert(item_size);
-        assert(offsets);
-        assert(n_offsets);
-
-        if (!signature_is_single(contents, true))
-                return -EINVAL;
-
-        if (!c->signature || c->signature[c->index] == 0)
-                return -ENXIO;
-
-        if (c->signature[c->index] != SD_BUS_TYPE_ARRAY)
-                return -ENXIO;
-
-        if (!startswith(c->signature + c->index + 1, contents))
-                return -ENXIO;
-
-        rindex = m->rindex;
-
-        if (!BUS_MESSAGE_IS_GVARIANT(m)) {
-                /* dbus1 */
-                int alignment;
+        if (IN_SET(type, SD_BUS_TYPE_STRING, SD_BUS_TYPE_OBJECT_PATH)) {
+                uint32_t l;
+                bool ok;
 
                 r = message_peek_body(m, &rindex, 4, 4, &q);
                 if (r < 0)
                         return r;
 
-                if (BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q) > BUS_ARRAY_MAX_SIZE)
+                l = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q);
+                if (l == UINT32_MAX)
+                        /* avoid overflow right below */
                         return -EBADMSG;
 
-                alignment = bus_type_get_alignment(contents[0]);
-                if (alignment < 0)
-                        return alignment;
-
-                r = message_peek_body(m, &rindex, alignment, 0, NULL);
+                r = message_peek_body(m, &rindex, 1, l+1, &q);
                 if (r < 0)
                         return r;
 
-                *array_size = (uint32_t*) q;
-
-        } else if (c->item_size <= 0) {
-
-                /* gvariant: empty array */
-                *item_size = 0;
-                *offsets = NULL;
-                *n_offsets = 0;
-
-        } else if (bus_gvariant_is_fixed_size(contents)) {
-
-                /* gvariant: fixed length array */
-                *item_size = bus_gvariant_get_size(contents);
-                *offsets = NULL;
-                *n_offsets = 0;
-
-        } else {
-                size_t where, previous = 0, framing, sz;
-                int alignment;
-                unsigned i;
-
-                /* gvariant: variable length array */
-                sz = bus_gvariant_determine_word_size(c->item_size, 0);
-
-                where = rindex + c->item_size - sz;
-                r = message_peek_body(m, &where, 1, sz, &q);
-                if (r < 0)
-                        return r;
-
-                framing = bus_gvariant_read_word_le(q, sz);
-                if (framing > c->item_size - sz)
-                        return -EBADMSG;
-                if ((c->item_size - framing) % sz != 0)
+                if (type == SD_BUS_TYPE_OBJECT_PATH)
+                        ok = validate_object_path(q, l);
+                else
+                        ok = validate_string(q, l);
+                if (!ok)
                         return -EBADMSG;
 
-                *n_offsets = (c->item_size - framing) / sz;
+                if (p)
+                        *(const char**) p = q;
 
-                where = rindex + framing;
-                r = message_peek_body(m, &where, 1, *n_offsets * sz, &q);
-                if (r < 0)
-                        return r;
+        } else if (type == SD_BUS_TYPE_SIGNATURE) {
+                uint8_t l;
 
-                *offsets = new(size_t, *n_offsets);
-                if (!*offsets)
-                        return -ENOMEM;
-
-                alignment = bus_gvariant_get_alignment(c->signature);
-                assert(alignment > 0);
-
-                for (i = 0; i < *n_offsets; i++) {
-                        size_t x, start;
-
-                        start = ALIGN_TO(previous, alignment);
-
-                        x = bus_gvariant_read_word_le((uint8_t*) q + i * sz, sz);
-                        if (x > c->item_size - sz)
-                                return -EBADMSG;
-                        if (x < start)
-                                return -EBADMSG;
-
-                        (*offsets)[i] = rindex + x;
-                        previous = x;
-                }
-
-                *item_size = (*offsets)[0] - rindex;
-        }
-
-        m->rindex = rindex;
-
-        if (c->enclosing != SD_BUS_TYPE_ARRAY)
-                c->index += 1 + strlen(contents);
-
-        return 1;
-}
-
-static int bus_message_enter_variant(
-                sd_bus_message *m,
-                struct bus_container *c,
-                const char *contents,
-                size_t *item_size) {
-
-        size_t rindex;
-        uint8_t l;
-        void *q;
-        int r;
-
-        assert(m);
-        assert(c);
-        assert(contents);
-        assert(item_size);
-
-        if (!signature_is_single(contents, false))
-                return -EINVAL;
-
-        if (*contents == SD_BUS_TYPE_DICT_ENTRY_BEGIN)
-                return -EINVAL;
-
-        if (!c->signature || c->signature[c->index] == 0)
-                return -ENXIO;
-
-        if (c->signature[c->index] != SD_BUS_TYPE_VARIANT)
-                return -ENXIO;
-
-        rindex = m->rindex;
-
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                size_t k, where;
-
-                k = strlen(contents);
-                if (1+k > c->item_size)
-                        return -EBADMSG;
-
-                where = rindex + c->item_size - (1+k);
-                r = message_peek_body(m, &where, 1, 1+k, &q);
-                if (r < 0)
-                        return r;
-
-                if (*(char*) q != 0)
-                        return -EBADMSG;
-
-                if (memcmp((uint8_t*) q+1, contents, k))
-                        return -ENXIO;
-
-                *item_size = c->item_size - (1+k);
-
-        } else {
                 r = message_peek_body(m, &rindex, 1, 1, &q);
                 if (r < 0)
                         return r;
@@ -3800,8 +2766,68 @@
                 if (!validate_signature(q, l))
                         return -EBADMSG;
 
-                if (!streq(q, contents))
-                        return -ENXIO;
+                if (p)
+                        *(const char**) p = q;
+
+        } else {
+                ssize_t sz, align;
+
+                align = bus_type_get_alignment(type);
+                assert(align > 0);
+
+                sz = bus_type_get_size(type);
+                assert(sz > 0);
+
+                r = message_peek_body(m, &rindex, align, sz, &q);
+                if (r < 0)
+                        return r;
+
+                switch (type) {
+
+                case SD_BUS_TYPE_BYTE:
+                        if (p)
+                                *(uint8_t*) p = *(uint8_t*) q;
+                        break;
+
+                case SD_BUS_TYPE_BOOLEAN:
+                        if (p)
+                                *(int*) p = !!*(uint32_t*) q;
+                        break;
+
+                case SD_BUS_TYPE_INT16:
+                case SD_BUS_TYPE_UINT16:
+                        if (p)
+                                *(uint16_t*) p = BUS_MESSAGE_BSWAP16(m, *(uint16_t*) q);
+                        break;
+
+                case SD_BUS_TYPE_INT32:
+                case SD_BUS_TYPE_UINT32:
+                        if (p)
+                                *(uint32_t*) p = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q);
+                        break;
+
+                case SD_BUS_TYPE_INT64:
+                case SD_BUS_TYPE_UINT64:
+                case SD_BUS_TYPE_DOUBLE:
+                        if (p)
+                                *(uint64_t*) p = BUS_MESSAGE_BSWAP64(m, *(uint64_t*) q);
+                        break;
+
+                case SD_BUS_TYPE_UNIX_FD: {
+                        uint32_t j;
+
+                        j = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q);
+                        if (j >= m->n_fds)
+                                return -EBADMSG;
+
+                        if (p)
+                                *(int*) p = m->fds[j];
+                        break;
+                }
+
+                default:
+                        assert_not_reached();
+                }
         }
 
         m->rindex = rindex;
@@ -3812,192 +2838,119 @@
         return 1;
 }
 
-static int build_struct_offsets(
-                sd_bus_message *m,
-                const char *signature,
-                size_t size,
-                size_t *item_size,
-                size_t **offsets,
-                size_t *n_offsets) {
-
-        unsigned n_variable = 0, n_total = 0, v;
-        size_t previous, where;
-        const char *p;
-        size_t sz;
-        void *q;
-        int r;
-
-        assert(m);
-        assert(item_size);
-        assert(offsets);
-        assert(n_offsets);
-
-        if (isempty(signature)) {
-                /* Unary type is encoded as *fixed* 1 byte padding */
-                r = message_peek_body(m, &m->rindex, 1, 1, &q);
-                if (r < 0)
-                        return r;
-
-                if (*(uint8_t *) q != 0)
-                        return -EBADMSG;
-
-                *item_size = 0;
-                *offsets = NULL;
-                *n_offsets = 0;
-                return 0;
-        }
-
-        sz = bus_gvariant_determine_word_size(size, 0);
-        if (sz <= 0)
-                return -EBADMSG;
-
-        /* First, loop over signature and count variable elements and
-         * elements in general. We use this to know how large the
-         * offset array is at the end of the structure. Note that
-         * GVariant only stores offsets for all variable size elements
-         * that are not the last item. */
-
-        p = signature;
-        while (*p != 0) {
-                size_t n;
-
-                r = signature_element_length(p, &n);
-                if (r < 0)
-                        return r;
-                else {
-                        char t[n+1];
-
-                        memcpy(t, p, n);
-                        t[n] = 0;
-
-                        r = bus_gvariant_is_fixed_size(t);
-                }
-
-                if (r < 0)
-                        return r;
-                if (r == 0 && p[n] != 0) /* except the last item */
-                        n_variable++;
-                n_total++;
-
-                p += n;
-        }
-
-        if (size < n_variable * sz)
-                return -EBADMSG;
-
-        where = m->rindex + size - (n_variable * sz);
-        r = message_peek_body(m, &where, 1, n_variable * sz, &q);
-        if (r < 0)
-                return r;
-
-        v = n_variable;
-
-        *offsets = new(size_t, n_total);
-        if (!*offsets)
-                return -ENOMEM;
-
-        *n_offsets = 0;
-
-        /* Second, loop again and build an offset table */
-        p = signature;
-        previous = m->rindex;
-        while (*p != 0) {
-                size_t n, offset;
-                int k;
-
-                r = signature_element_length(p, &n);
-                if (r < 0)
-                        return r;
-                else {
-                        char t[n+1];
-
-                        memcpy(t, p, n);
-                        t[n] = 0;
-
-                        size_t align = bus_gvariant_get_alignment(t);
-                        assert(align > 0);
-
-                        /* The possible start of this member after including alignment */
-                        size_t start = ALIGN_TO(previous, align);
-
-                        k = bus_gvariant_get_size(t);
-                        if (k < 0) {
-                                size_t x;
-
-                                /* Variable size */
-                                if (v > 0) {
-                                        v--;
-
-                                        x = bus_gvariant_read_word_le((uint8_t*) q + v*sz, sz);
-                                        if (x >= size)
-                                                return -EBADMSG;
-                                } else
-                                        /* The last item's end is determined
-                                         * from the start of the offset array */
-                                        x = size - (n_variable * sz);
-
-                                offset = m->rindex + x;
-                                if (offset < start)
-                                        return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                                               "For type %s with alignment %zu, message specifies offset %zu which is smaller than previous end %zu + alignment = %zu",
-                                                               t, align,
-                                                               offset,
-                                                               previous,
-                                                               start);
-                        } else
-                                /* Fixed size */
-                                offset = start + k;
-                }
-
-                previous = (*offsets)[(*n_offsets)++] = offset;
-                p += n;
-        }
-
-        assert(v == 0);
-        assert(*n_offsets == n_total);
-
-        *item_size = (*offsets)[0] - m->rindex;
-        return 0;
-}
-
-static int enter_struct_or_dict_entry(
+static int bus_message_enter_array(
                 sd_bus_message *m,
                 struct bus_container *c,
                 const char *contents,
-                size_t *item_size,
-                size_t **offsets,
-                size_t *n_offsets) {
+                uint32_t **array_size) {
 
+        size_t rindex;
+        void *q;
+        int alignment, r;
+
+        assert(m);
+        assert(c);
+        assert(contents);
+        assert(array_size);
+
+        if (!signature_is_single(contents, true))
+                return -EINVAL;
+
+        if (!c->signature || c->signature[c->index] == 0)
+                return -ENXIO;
+
+        if (c->signature[c->index] != SD_BUS_TYPE_ARRAY)
+                return -ENXIO;
+
+        if (!startswith(c->signature + c->index + 1, contents))
+                return -ENXIO;
+
+        rindex = m->rindex;
+
+        r = message_peek_body(m, &rindex, 4, 4, &q);
+        if (r < 0)
+                return r;
+
+        if (BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q) > BUS_ARRAY_MAX_SIZE)
+                return -EBADMSG;
+
+        alignment = bus_type_get_alignment(contents[0]);
+        if (alignment < 0)
+                return alignment;
+
+        r = message_peek_body(m, &rindex, alignment, 0, NULL);
+        if (r < 0)
+                return r;
+
+        *array_size = (uint32_t*) q;
+
+        m->rindex = rindex;
+
+        if (c->enclosing != SD_BUS_TYPE_ARRAY)
+                c->index += 1 + strlen(contents);
+
+        return 1;
+}
+
+static int bus_message_enter_variant(
+                sd_bus_message *m,
+                struct bus_container *c,
+                const char *contents) {
+
+        size_t rindex;
+        uint8_t l;
+        void *q;
         int r;
 
         assert(m);
         assert(c);
         assert(contents);
-        assert(item_size);
-        assert(offsets);
-        assert(n_offsets);
 
-        if (!BUS_MESSAGE_IS_GVARIANT(m)) {
+        if (!signature_is_single(contents, false))
+                return -EINVAL;
 
-                /* dbus1 */
-                r = message_peek_body(m, &m->rindex, 8, 0, NULL);
-                if (r < 0)
-                        return r;
+        if (*contents == SD_BUS_TYPE_DICT_ENTRY_BEGIN)
+                return -EINVAL;
 
-        } else
-                /* gvariant with contents */
-                return build_struct_offsets(m, contents, c->item_size, item_size, offsets, n_offsets);
+        if (!c->signature || c->signature[c->index] == 0)
+                return -ENXIO;
 
-        return 0;
+        if (c->signature[c->index] != SD_BUS_TYPE_VARIANT)
+                return -ENXIO;
+
+        rindex = m->rindex;
+
+        r = message_peek_body(m, &rindex, 1, 1, &q);
+        if (r < 0)
+                return r;
+
+        l = *(uint8_t*) q;
+        if (l == UINT8_MAX)
+                /* avoid overflow right below */
+                return -EBADMSG;
+
+        r = message_peek_body(m, &rindex, 1, l+1, &q);
+        if (r < 0)
+                return r;
+
+        if (!validate_signature(q, l))
+                return -EBADMSG;
+
+        if (!streq(q, contents))
+                return -ENXIO;
+
+        m->rindex = rindex;
+
+        if (c->enclosing != SD_BUS_TYPE_ARRAY)
+                c->index++;
+
+        return 1;
 }
 
 static int bus_message_enter_struct(
                 sd_bus_message *m,
                 struct bus_container *c,
-                const char *contents,
-                size_t *item_size,
-                size_t **offsets,
-                size_t *n_offsets) {
+                const char *contents) {
 
         size_t l;
         int r;
@@ -4005,9 +2958,6 @@
         assert(m);
         assert(c);
         assert(contents);
-        assert(item_size);
-        assert(offsets);
-        assert(n_offsets);
 
         if (!signature_is_valid(contents, false))
                 return -EINVAL;
@@ -4022,7 +2972,7 @@
             c->signature[c->index + 1 + l] != SD_BUS_TYPE_STRUCT_END)
                 return -ENXIO;
 
-        r = enter_struct_or_dict_entry(m, c, contents, item_size, offsets, n_offsets);
+        r = message_peek_body(m, &m->rindex, 8, 0, NULL);
         if (r < 0)
                 return r;
 
@@ -4035,10 +2985,7 @@
 static int bus_message_enter_dict_entry(
                 sd_bus_message *m,
                 struct bus_container *c,
-                const char *contents,
-                size_t *item_size,
-                size_t **offsets,
-                size_t *n_offsets) {
+                const char *contents) {
 
         size_t l;
         int r;
@@ -4063,7 +3010,7 @@
             c->signature[c->index + 1 + l] != SD_BUS_TYPE_DICT_ENTRY_END)
                 return -ENXIO;
 
-        r = enter_struct_or_dict_entry(m, c, contents, item_size, offsets, n_offsets);
+        r = message_peek_body(m, &m->rindex, 8, 0, NULL);
         if (r < 0)
                 return r;
 
@@ -4079,9 +3026,7 @@
         struct bus_container *c;
         uint32_t *array_size = NULL;
         _cleanup_free_ char *signature = NULL;
-        size_t before, end;
-        _cleanup_free_ size_t *offsets = NULL;
-        size_t n_offsets = 0, item_size = 0;
+        size_t before;
         int r;
 
         assert_return(m, -EINVAL);
@@ -4145,26 +3090,19 @@
         before = m->rindex;
 
         if (type == SD_BUS_TYPE_ARRAY)
-                r = bus_message_enter_array(m, c, contents, &array_size, &item_size, &offsets, &n_offsets);
+                r = bus_message_enter_array(m, c, contents, &array_size);
         else if (type == SD_BUS_TYPE_VARIANT)
-                r = bus_message_enter_variant(m, c, contents, &item_size);
+                r = bus_message_enter_variant(m, c, contents);
         else if (type == SD_BUS_TYPE_STRUCT)
-                r = bus_message_enter_struct(m, c, contents, &item_size, &offsets, &n_offsets);
+                r = bus_message_enter_struct(m, c, contents);
         else if (type == SD_BUS_TYPE_DICT_ENTRY)
-                r = bus_message_enter_dict_entry(m, c, contents, &item_size, &offsets, &n_offsets);
+                r = bus_message_enter_dict_entry(m, c, contents);
         else
                 r = -EINVAL;
         if (r <= 0)
                 return r;
 
         /* OK, let's fill it in */
-        if (BUS_MESSAGE_IS_GVARIANT(m) &&
-            type == SD_BUS_TYPE_STRUCT &&
-            isempty(signature))
-                end = m->rindex + 0;
-        else
-                end = m->rindex + c->item_size;
-
         m->containers[m->n_containers++] = (struct bus_container) {
                  .enclosing = type,
                  .signature = TAKE_PTR(signature),
@@ -4172,11 +3110,8 @@
                  .before = before,
                  .begin = m->rindex,
                  /* Unary type has fixed size of 1, but virtual size of 0 */
-                 .end = end,
+                 .end = m->rindex,
                  .array_size = array_size,
-                 .item_size = item_size,
-                 .offsets = TAKE_PTR(offsets),
-                 .n_offsets = n_offsets,
         };
 
         return 1;
@@ -4184,8 +3119,6 @@
 
 _public_ int sd_bus_message_exit_container(sd_bus_message *m) {
         struct bus_container *c;
-        unsigned saved;
-        int r;
 
         assert_return(m, -EINVAL);
         assert_return(m->sealed, -EPERM);
@@ -4198,11 +3131,7 @@
                         return -EBUSY;
         }
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                if (m->rindex < c->end)
-                        return -EBUSY;
-
-        } else if (c->enclosing == SD_BUS_TYPE_ARRAY) {
+        if (c->enclosing == SD_BUS_TYPE_ARRAY) {
                 uint32_t l;
 
                 l = BUS_MESSAGE_BSWAP32(m, *c->array_size);
@@ -4212,14 +3141,6 @@
 
         message_free_last_container(m);
 
-        c = message_get_last_container(m);
-        saved = c->index;
-        c->index = c->saved_index;
-        r = container_next_item(m, c, &m->rindex);
-        c->index = saved;
-        if (r < 0)
-                return r;
-
         return 1;
 }
 
@@ -4317,65 +3238,27 @@
 
         if (c->signature[c->index] == SD_BUS_TYPE_VARIANT) {
                 if (contents) {
+                        size_t rindex, l;
                         void *q;
 
-                        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                                size_t k;
+                        rindex = m->rindex;
+                        r = message_peek_body(m, &rindex, 1, 1, &q);
+                        if (r < 0)
+                                return r;
 
-                                if (c->item_size < 2)
-                                        return -EBADMSG;
+                        l = *(uint8_t*) q;
+                        if (l == UINT8_MAX)
+                                /* avoid overflow right below */
+                                return -EBADMSG;
 
-                                /* Look for the NUL delimiter that
-                                   separates the payload from the
-                                   signature. Since the body might be
-                                   in a different part that then the
-                                   signature we map byte by byte. */
+                        r = message_peek_body(m, &rindex, 1, l+1, &q);
+                        if (r < 0)
+                                return r;
 
-                                for (k = 2; k <= c->item_size; k++) {
-                                        size_t where;
+                        if (!validate_signature(q, l))
+                                return -EBADMSG;
 
-                                        where = m->rindex + c->item_size - k;
-                                        r = message_peek_body(m, &where, 1, k, &q);
-                                        if (r < 0)
-                                                return r;
-
-                                        if (*(char*) q == 0)
-                                                break;
-                                }
-
-                                if (k > c->item_size)
-                                        return -EBADMSG;
-
-                                if (free_and_strndup(&c->peeked_signature,
-                                                     (char*) q + 1, k - 1) < 0)
-                                        return -ENOMEM;
-
-                                if (!signature_is_valid(c->peeked_signature, true))
-                                        return -EBADMSG;
-
-                                *contents = c->peeked_signature;
-                        } else {
-                                size_t rindex, l;
-
-                                rindex = m->rindex;
-                                r = message_peek_body(m, &rindex, 1, 1, &q);
-                                if (r < 0)
-                                        return r;
-
-                                l = *(uint8_t*) q;
-                                if (l == UINT8_MAX)
-                                        /* avoid overflow right below */
-                                        return -EBADMSG;
-
-                                r = message_peek_body(m, &rindex, 1, l+1, &q);
-                                if (r < 0)
-                                        return r;
-
-                                if (!validate_signature(q, l))
-                                        return -EBADMSG;
-
-                                *contents = q;
-                        }
+                        *contents = q;
                 }
 
                 if (type)
@@ -4412,9 +3295,6 @@
                 m->rindex = c->begin;
         }
 
-        c->offset_index = 0;
-        c->item_size = (c->n_offsets > 0 ? c->offsets[0] : c->end) - c->begin;
-
         return !isempty(c->signature);
 }
 
@@ -4652,7 +3532,7 @@
                 if (r < 0)
                         return r;
 
-                types = strndupa(c->signature + c->index, l);
+                types = strndupa_safe(c->signature + c->index, l);
         }
 
         switch (*types) {
@@ -4819,19 +3699,11 @@
 
         c = message_get_last_container(m);
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                align = bus_gvariant_get_alignment(CHAR_TO_STR(type));
-                if (align < 0)
-                        return align;
+        align = bus_type_get_alignment(type);
+        if (align < 0)
+                return align;
 
-                sz = c->end - c->begin;
-        } else {
-                align = bus_type_get_alignment(type);
-                if (align < 0)
-                        return align;
-
-                sz = BUS_MESSAGE_BSWAP32(m, *c->array_size);
-        }
+        sz = BUS_MESSAGE_BSWAP32(m, *c->array_size);
 
         if (sz == 0)
                 /* Zero length array, let's return some aligned
@@ -4864,11 +3736,35 @@
                 size_t nbytes,
                 void **ret) {
 
+        size_t start, end;
+
         assert(m);
         assert(rindex);
         assert(align > 0);
 
-        return buffer_peek(BUS_MESSAGE_FIELDS(m), m->fields_size, rindex, align, nbytes, ret);
+        start = ALIGN_TO(*rindex, align);
+        if (start > m->fields_size)
+                return -EBADMSG;
+
+        /* Avoid overflow below */
+        if (nbytes > SIZE_MAX - start)
+                return -EBADMSG;
+
+        end = start + nbytes;
+        if (end > m->fields_size)
+                return -EBADMSG;
+
+        /* Verify that padding is 0 */
+        uint8_t *p = BUS_MESSAGE_FIELDS(m);
+        for (size_t k = *rindex; k < start; k++)
+                if (p[k] != 0)
+                        return -EBADMSG;
+
+        if (ret)
+                *ret = p + start;
+
+        *rindex = end;
+        return 1;
 }
 
 static int message_peek_field_uint32(
@@ -4883,11 +3779,6 @@
         assert(m);
         assert(ri);
 
-        if (BUS_MESSAGE_IS_GVARIANT(m) && item_size != 4)
-                return -EBADMSG;
-
-        /* identical for gvariant and dbus1 */
-
         r = message_peek_fields(m, ri, 4, 4, &q);
         if (r < 0)
                 return r;
@@ -4898,33 +3789,6 @@
         return 0;
 }
 
-static int message_peek_field_uint64(
-                sd_bus_message *m,
-                size_t *ri,
-                size_t item_size,
-                uint64_t *ret) {
-
-        int r;
-        void *q;
-
-        assert(m);
-        assert(ri);
-
-        if (BUS_MESSAGE_IS_GVARIANT(m) && item_size != 8)
-                return -EBADMSG;
-
-        /* identical for gvariant and dbus1 */
-
-        r = message_peek_fields(m, ri, 8, 8, &q);
-        if (r < 0)
-                return r;
-
-        if (ret)
-                *ret = BUS_MESSAGE_BSWAP64(m, *(uint64_t*) q);
-
-        return 0;
-}
-
 static int message_peek_field_string(
                 sd_bus_message *m,
                 bool (*validate)(const char *p),
@@ -4939,29 +3803,17 @@
         assert(m);
         assert(ri);
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
+        r = message_peek_field_uint32(m, ri, 4, &l);
+        if (r < 0)
+                return r;
 
-                if (item_size <= 0)
-                        return -EBADMSG;
+        if (l == UINT32_MAX)
+                /* avoid overflow right below */
+                return -EBADMSG;
 
-                r = message_peek_fields(m, ri, 1, item_size, &q);
-                if (r < 0)
-                        return r;
-
-                l = item_size - 1;
-        } else {
-                r = message_peek_field_uint32(m, ri, 4, &l);
-                if (r < 0)
-                        return r;
-
-                if (l == UINT32_MAX)
-                        /* avoid overflow right below */
-                        return -EBADMSG;
-
-                r = message_peek_fields(m, ri, 1, l+1, &q);
-                if (r < 0)
-                        return r;
-        }
+        r = message_peek_fields(m, ri, 1, l+1, &q);
+        if (r < 0)
+                return r;
 
         if (validate) {
                 if (!validate_nul(q, l))
@@ -4993,30 +3845,18 @@
         assert(m);
         assert(ri);
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
+        r = message_peek_fields(m, ri, 1, 1, &q);
+        if (r < 0)
+                return r;
 
-                if (item_size <= 0)
-                        return -EBADMSG;
+        l = *(uint8_t*) q;
+        if (l == UINT8_MAX)
+                /* avoid overflow right below */
+                return -EBADMSG;
 
-                r = message_peek_fields(m, ri, 1, item_size, &q);
-                if (r < 0)
-                        return r;
-
-                l = item_size - 1;
-        } else {
-                r = message_peek_fields(m, ri, 1, 1, &q);
-                if (r < 0)
-                        return r;
-
-                l = *(uint8_t*) q;
-                if (l == UINT8_MAX)
-                        /* avoid overflow right below */
-                        return -EBADMSG;
-
-                r = message_peek_fields(m, ri, 1, l+1, &q);
-                if (r < 0)
-                        return r;
-        }
+        r = message_peek_fields(m, ri, 1, l+1, &q);
+        if (r < 0)
+                return r;
 
         if (!validate_signature(q, l))
                 return -EBADMSG;
@@ -5039,7 +3879,6 @@
         assert(m);
         assert(ri);
         assert(signature);
-        assert(!BUS_MESSAGE_IS_GVARIANT(m));
 
         original_index = *ri;
 
@@ -5164,161 +4003,30 @@
         }
 }
 
-int bus_message_parse_fields(sd_bus_message *m) {
-        size_t ri;
-        int r;
+static int message_parse_fields(sd_bus_message *m) {
         uint32_t unix_fds = 0;
         bool unix_fds_set = false;
-        void *offsets = NULL;
-        unsigned n_offsets = 0;
-        size_t sz = 0;
-        unsigned i = 0;
+        int r;
 
         assert(m);
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                char *p;
+        m->user_body_size = m->body_size;
 
-                /* Read the signature from the end of the body variant first */
-                sz = bus_gvariant_determine_word_size(BUS_MESSAGE_SIZE(m), 0);
-                if (m->footer_accessible < 1 + sz)
-                        return -EBADMSG;
-
-                p = (char*) m->footer + m->footer_accessible - (1 + sz);
-                for (;;) {
-                        if (p < (char*) m->footer)
-                                return -EBADMSG;
-
-                        if (*p == 0) {
-                                _cleanup_free_ char *k = NULL;
-                                size_t l;
-
-                                /* We found the beginning of the signature
-                                 * string, yay! We require the body to be a
-                                 * structure, so verify it and then strip the
-                                 * opening/closing brackets. */
-
-                                l = (char*) m->footer + m->footer_accessible - p - (1 + sz);
-                                if (l < 2 ||
-                                    p[1] != SD_BUS_TYPE_STRUCT_BEGIN ||
-                                    p[1 + l - 1] != SD_BUS_TYPE_STRUCT_END)
-                                        return -EBADMSG;
-
-                                k = memdup_suffix0(p + 1 + 1, l - 2);
-                                if (!k)
-                                        return -ENOMEM;
-
-                                if (!signature_is_valid(k, true))
-                                        return -EBADMSG;
-
-                                free_and_replace(m->root_container.signature, k);
-                                break;
-                        }
-
-                        p--;
-                }
-
-                /* Calculate the actual user body size, by removing
-                 * the trailing variant signature and struct offset
-                 * table */
-                m->user_body_size = m->body_size - ((char*) m->footer + m->footer_accessible - p);
-
-                /* Pull out the offset table for the fields array, if any */
-                if (m->fields_size > 0) {
-                        sz = bus_gvariant_determine_word_size(m->fields_size, 0);
-                        if (sz > 0) {
-                                size_t framing;
-                                void *q;
-
-                                if (m->fields_size < sz)
-                                        return -EBADMSG;
-
-                                ri = m->fields_size - sz;
-                                r = message_peek_fields(m, &ri, 1, sz, &q);
-                                if (r < 0)
-                                        return r;
-
-                                framing = bus_gvariant_read_word_le(q, sz);
-                                if (framing >= m->fields_size - sz)
-                                        return -EBADMSG;
-                                if ((m->fields_size - framing) % sz != 0)
-                                        return -EBADMSG;
-
-                                ri = framing;
-                                r = message_peek_fields(m, &ri, 1, m->fields_size - framing, &offsets);
-                                if (r < 0)
-                                        return r;
-
-                                n_offsets = (m->fields_size - framing) / sz;
-                        }
-                }
-        } else
-                m->user_body_size = m->body_size;
-
-        ri = 0;
-        while (ri < m->fields_size) {
-                _cleanup_free_ char *sig = NULL;
+        for (size_t ri = 0; ri < m->fields_size; ) {
                 const char *signature;
                 uint64_t field_type;
                 size_t item_size = SIZE_MAX;
+                uint8_t *u8;
 
-                if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                        uint64_t *u64;
+                r = message_peek_fields(m, &ri, 8, 1, (void**) &u8);
+                if (r < 0)
+                        return r;
 
-                        if (i >= n_offsets)
-                                break;
+                field_type = *u8;
 
-                        if (i == 0)
-                                ri = 0;
-                        else
-                                ri = ALIGN_TO(bus_gvariant_read_word_le((uint8_t*) offsets + (i-1)*sz, sz), 8);
-
-                        r = message_peek_fields(m, &ri, 8, 8, (void**) &u64);
-                        if (r < 0)
-                                return r;
-
-                        field_type = BUS_MESSAGE_BSWAP64(m, *u64);
-                } else {
-                        uint8_t *u8;
-
-                        r = message_peek_fields(m, &ri, 8, 1, (void**) &u8);
-                        if (r < 0)
-                                return r;
-
-                        field_type = *u8;
-                }
-
-                if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                        size_t where, end;
-                        char *b;
-                        void *q;
-
-                        end = bus_gvariant_read_word_le((uint8_t*) offsets + i*sz, sz);
-
-                        if (end < ri)
-                                return -EBADMSG;
-
-                        where = ri = ALIGN_TO(ri, 8);
-                        item_size = end - ri;
-                        r = message_peek_fields(m, &where, 1, item_size, &q);
-                        if (r < 0)
-                                return r;
-
-                        b = memrchr(q, 0, item_size);
-                        if (!b)
-                                return -EBADMSG;
-
-                        sig = memdup_suffix0(b+1, item_size - (b+1-(char*) q));
-                        if (!sig)
-                                return -ENOMEM;
-
-                        signature = sig;
-                        item_size = b - (char*) q;
-                } else {
-                        r = message_peek_field_signature(m, &ri, 0, &signature);
-                        if (r < 0)
-                                return r;
-                }
+                r = message_peek_field_signature(m, &ri, 0, &signature);
+                if (r < 0)
+                        return r;
 
                 switch (field_type) {
 
@@ -5404,9 +4112,6 @@
                         const char *s;
                         char *c;
 
-                        if (BUS_MESSAGE_IS_GVARIANT(m)) /* only applies to dbus1 */
-                                return -EBADMSG;
-
                         if (m->root_container.signature)
                                 return -EBADMSG;
 
@@ -5425,39 +4130,27 @@
                         break;
                 }
 
-                case BUS_MESSAGE_HEADER_REPLY_SERIAL:
+                case BUS_MESSAGE_HEADER_REPLY_SERIAL: {
+                        uint32_t serial;
 
                         if (m->reply_cookie != 0)
                                 return -EBADMSG;
 
-                        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                                /* 64bit on dbus2 */
 
-                                if (!streq(signature, "t"))
-                                        return -EBADMSG;
+                        if (!streq(signature, "u"))
+                                return -EBADMSG;
 
-                                r = message_peek_field_uint64(m, &ri, item_size, &m->reply_cookie);
-                                if (r < 0)
-                                        return r;
-                        } else {
-                                /* 32bit on dbus1 */
-                                uint32_t serial;
+                        r = message_peek_field_uint32(m, &ri, item_size, &serial);
+                        if (r < 0)
+                                return r;
 
-                                if (!streq(signature, "u"))
-                                        return -EBADMSG;
-
-                                r = message_peek_field_uint32(m, &ri, item_size, &serial);
-                                if (r < 0)
-                                        return r;
-
-                                m->reply_cookie = serial;
-                        }
+                        m->reply_cookie = serial;
 
                         if (m->reply_cookie == 0)
                                 return -EBADMSG;
 
                         break;
-
+                }
                 case BUS_MESSAGE_HEADER_UNIX_FDS:
                         if (unix_fds_set)
                                 return -EBADMSG;
@@ -5473,14 +4166,10 @@
                         break;
 
                 default:
-                        if (!BUS_MESSAGE_IS_GVARIANT(m))
-                                r = message_skip_fields(m, &ri, UINT32_MAX, (const char **) &signature);
+                        r = message_skip_fields(m, &ri, UINT32_MAX, (const char **) &signature);
                 }
-
                 if (r < 0)
                         return r;
-
-                i++;
         }
 
         if (m->n_fds != unix_fds)
@@ -5530,20 +4219,6 @@
 
         m->root_container.end = m->user_body_size;
 
-        if (BUS_MESSAGE_IS_GVARIANT(m)) {
-                r = build_struct_offsets(
-                                m,
-                                m->root_container.signature,
-                                m->user_body_size,
-                                &m->root_container.item_size,
-                                &m->root_container.offsets,
-                                &m->root_container.n_offsets);
-                if (r == -EINVAL)
-                        return -EBADMSG;
-                if (r < 0)
-                        return r;
-        }
-
         /* Try to read the error message, but if we can't it's a non-issue */
         if (m->header->type == SD_BUS_MESSAGE_METHOD_ERROR)
                 (void) sd_bus_message_read(m, "s", &m->error.message);
@@ -5599,7 +4274,7 @@
         return 0;
 }
 
-int bus_message_read_strv_extend(sd_bus_message *m, char ***l) {
+_public_ int sd_bus_message_read_strv_extend(sd_bus_message *m, char ***l) {
         char type;
         const char *contents, *s;
         int r;
@@ -5642,7 +4317,7 @@
         assert_return(m->sealed, -EPERM);
         assert_return(l, -EINVAL);
 
-        r = bus_message_read_strv_extend(m, &strv);
+        r = sd_bus_message_read_strv_extend(m, &strv);
         if (r <= 0)
                 return r;
 
@@ -5992,3 +4667,26 @@
         m->sensitive = true;
         return 0;
 }
+
+char** bus_message_make_log_fields(sd_bus_message *m) {
+        _cleanup_strv_free_ char **strv = NULL;
+
+        assert(m);
+
+        (void) strv_extend_assignment(&strv, "DBUS_MESSAGE_TYPE", bus_message_type_to_string(m->header->type));
+        (void) strv_extend_assignment(&strv, "DBUS_SENDER", sd_bus_message_get_sender(m));
+        (void) strv_extend_assignment(&strv, "DBUS_DESTINATION", sd_bus_message_get_destination(m));
+        (void) strv_extend_assignment(&strv, "DBUS_PATH", sd_bus_message_get_path(m));
+        (void) strv_extend_assignment(&strv, "DBUS_INTERFACE", sd_bus_message_get_interface(m));
+        (void) strv_extend_assignment(&strv, "DBUS_MEMBER", sd_bus_message_get_member(m));
+
+        (void) strv_extendf(&strv, "DBUS_MESSAGE_COOKIE=%" PRIu64, BUS_MESSAGE_COOKIE(m));
+        if (m->reply_cookie != 0)
+                (void) strv_extendf(&strv, "DBUS_MESSAGE_REPLY_COOKIE=%" PRIu64, m->reply_cookie);
+
+        (void) strv_extend_assignment(&strv, "DBUS_SIGNATURE", m->root_container.signature);
+        (void) strv_extend_assignment(&strv, "DBUS_ERROR_NAME", m->error.name);
+        (void) strv_extend_assignment(&strv, "DBUS_ERROR_MESSAGE", m->error.message);
+
+        return TAKE_PTR(strv);
+}
diff --git a/src/libsystemd/sd-bus/bus-message.h b/src/libsystemd/sd-bus/bus-message.h
index e5bf5df..76f0d85 100644
--- a/src/libsystemd/sd-bus/bus-message.h
+++ b/src/libsystemd/sd-bus/bus-message.h
@@ -14,21 +14,16 @@
 
 struct bus_container {
         char enclosing;
-        bool need_offsets:1;
 
-        /* Indexes into the signature  string */
+        /* Indexes into the signature string */
         unsigned index, saved_index;
         char *signature;
 
         size_t before, begin, end;
 
-        /* dbus1: pointer to the array size value, if this is a value */
+        /* pointer to the array size value, if this is a value */
         uint32_t *array_size;
 
-        /* gvariant: list of offsets to end of children if this is struct/dict entry/array */
-        size_t *offsets, n_offsets, offset_index;
-        size_t item_size;
-
         char *peeked_signature;
 };
 
@@ -86,13 +81,8 @@
         bool poisoned:1;
         bool sensitive:1;
 
-        /* The first and last bytes of the message */
+        /* The first bytes of the message */
         struct bus_header *header;
-        void *footer;
-
-        /* How many bytes are accessible in the above pointers */
-        size_t header_accessible;
-        size_t footer_accessible;
 
         size_t fields_size;
         size_t body_size;
@@ -148,10 +138,7 @@
 }
 
 static inline uint64_t BUS_MESSAGE_COOKIE(sd_bus_message *m) {
-        if (m->header->version == 2)
-                return BUS_MESSAGE_BSWAP64(m, m->header->dbus2.cookie);
-
-        return BUS_MESSAGE_BSWAP32(m, m->header->dbus1.serial);
+        return BUS_MESSAGE_BSWAP32(m, m->header->serial);
 }
 
 static inline size_t BUS_MESSAGE_SIZE(sd_bus_message *m) {
@@ -171,25 +158,7 @@
         return (uint8_t*) m->header + sizeof(struct bus_header);
 }
 
-static inline bool BUS_MESSAGE_IS_GVARIANT(sd_bus_message *m) {
-        return m->header->version == 2;
-}
-
 int bus_message_get_blob(sd_bus_message *m, void **buffer, size_t *sz);
-int bus_message_read_strv_extend(sd_bus_message *m, char ***l);
-
-int bus_message_from_header(
-                sd_bus *bus,
-                void *header,
-                size_t header_accessible,
-                void *footer,
-                size_t footer_accessible,
-                size_t message_size,
-                int *fds,
-                size_t n_fds,
-                const char *label,
-                size_t extra,
-                sd_bus_message **ret);
 
 int bus_message_from_malloc(
                 sd_bus *bus,
@@ -203,18 +172,12 @@
 int bus_message_get_arg(sd_bus_message *m, unsigned i, const char **str);
 int bus_message_get_arg_strv(sd_bus_message *m, unsigned i, char ***strv);
 
-int bus_message_parse_fields(sd_bus_message *m);
-
-struct bus_body_part *message_append_part(sd_bus_message *m);
-
 #define MESSAGE_FOREACH_PART(part, i, m) \
         for ((i) = 0, (part) = &(m)->body; (i) < (m)->n_body_parts; (i)++, (part) = (part)->next)
 
 int bus_body_part_map(struct bus_body_part *part);
 void bus_body_part_unmap(struct bus_body_part *part);
 
-int bus_message_to_errno(sd_bus_message *m);
-
 int bus_message_new_synthetic_error(sd_bus *bus, uint64_t serial, const sd_bus_error *e, sd_bus_message **m);
 
 int bus_message_remarshal(sd_bus *bus, sd_bus_message **m);
@@ -224,3 +187,5 @@
 
 sd_bus_message* bus_message_ref_queued(sd_bus_message *m, sd_bus *bus);
 sd_bus_message* bus_message_unref_queued(sd_bus_message *m, sd_bus *bus);
+
+char** bus_message_make_log_fields(sd_bus_message *m);
diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
index de9ff2c..2ad7a99 100644
--- a/src/libsystemd/sd-bus/bus-objects.c
+++ b/src/libsystemd/sd-bus/bus-objects.c
@@ -9,7 +9,6 @@
 #include "bus-slot.h"
 #include "bus-type.h"
 #include "missing_capability.h"
-#include "set.h"
 #include "string-util.h"
 #include "strv.h"
 
@@ -99,10 +98,9 @@
                 sd_bus *bus,
                 const char *prefix,
                 struct node_enumerator *first,
-                Set *s,
+                OrderedSet *s,
                 sd_bus_error *error) {
 
-        struct node_enumerator *c;
         int r;
 
         assert(bus);
@@ -110,7 +108,7 @@
         assert(s);
 
         LIST_FOREACH(enumerators, c, first) {
-                char **children = NULL, **k;
+                char **children = NULL;
                 sd_bus_slot *slot;
 
                 if (bus->nodes_modified)
@@ -146,7 +144,7 @@
                                 continue;
                         }
 
-                        r = set_consume(s, *k);
+                        r = ordered_set_consume(s, *k);
                         if (r == -EEXIST)
                                 r = 0;
                 }
@@ -171,10 +169,9 @@
                 const char *prefix,
                 struct node *n,
                 unsigned flags,
-                Set *s,
+                OrderedSet *s,
                 sd_bus_error *error) {
 
-        struct node *i;
         int r;
 
         assert(bus);
@@ -198,7 +195,7 @@
                 if (!t)
                         return -ENOMEM;
 
-                r = set_consume(s, t);
+                r = ordered_set_consume(s, t);
                 if (r < 0 && r != -EEXIST)
                         return r;
 
@@ -220,28 +217,26 @@
                 const char *prefix,
                 struct node *n,
                 unsigned flags,
-                Set **_s,
+                OrderedSet **ret,
                 sd_bus_error *error) {
 
-        Set *s = NULL;
+        _cleanup_ordered_set_free_free_ OrderedSet *s = NULL;
         int r;
 
         assert(bus);
         assert(prefix);
         assert(n);
-        assert(_s);
+        assert(ret);
 
-        s = set_new(&string_hash_ops);
+        s = ordered_set_new(&string_hash_ops);
         if (!s)
                 return -ENOMEM;
 
         r = add_subtree_to_set(bus, prefix, n, flags, s, error);
-        if (r < 0) {
-                set_free_free(s);
+        if (r < 0)
                 return r;
-        }
 
-        *_s = s;
+        *ret = TAKE_PTR(s);
         return 0;
 }
 
@@ -252,7 +247,6 @@
                 bool require_fallback,
                 bool *found_object) {
 
-        struct node_callback *c;
         int r;
 
         assert(bus);
@@ -808,7 +802,6 @@
                 bool *found_object) {
 
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        struct node_vtable *c;
         bool found_interface;
         int r;
 
@@ -888,8 +881,6 @@
                 const char *path,
                 bool require_fallback) {
 
-        struct node_vtable *c;
-        struct node_callback *k;
         int r;
 
         assert(bus);
@@ -935,9 +926,8 @@
                 char **ret,
                 sd_bus_error *error) {
 
-        _cleanup_set_free_free_ Set *s = NULL;
+        _cleanup_ordered_set_free_free_ OrderedSet *s = NULL;
         _cleanup_(introspect_free) struct introspect intro = {};
-        struct node_vtable *c;
         bool empty;
         int r;
 
@@ -961,7 +951,7 @@
         if (r < 0)
                 return r;
 
-        empty = set_isempty(s);
+        empty = ordered_set_isempty(s);
 
         LIST_FOREACH(vtables, c, n->vtables) {
                 if (require_fallback && !c->is_fallback)
@@ -1054,11 +1044,11 @@
                 const char *prefix,
                 const char *path,
                 bool require_fallback,
+                bool *found_object_manager,
                 sd_bus_error *error) {
 
         const char *previous_interface = NULL;
         bool found_something = false;
-        struct node_vtable *i;
         struct node *n;
         int r;
 
@@ -1066,12 +1056,16 @@
         assert(reply);
         assert(prefix);
         assert(path);
+        assert(found_object_manager);
         assert(error);
 
         n = hashmap_get(bus->nodes, prefix);
         if (!n)
                 return 0;
 
+        if (!require_fallback && n->object_managers)
+                *found_object_manager = true;
+
         LIST_FOREACH(vtables, i, n->vtables) {
                 void *u;
 
@@ -1114,9 +1108,12 @@
                         if (r < 0)
                                 return r;
 
-                        r = sd_bus_message_append(reply, "{sa{sv}}", "org.freedesktop.DBus.ObjectManager", 0);
-                        if (r < 0)
-                                return r;
+                        if (*found_object_manager) {
+                                r = sd_bus_message_append(
+                                                reply, "{sa{sv}}", "org.freedesktop.DBus.ObjectManager", 0);
+                                if (r < 0)
+                                        return r;
+                        }
 
                         found_something = true;
                 }
@@ -1191,6 +1188,7 @@
         _cleanup_free_ char *prefix = NULL;
         size_t pl;
         int r;
+        bool found_object_manager = false;
 
         assert(bus);
         assert(reply);
@@ -1198,7 +1196,7 @@
         assert(error);
 
         /* First, add all vtables registered for this path */
-        r = object_manager_serialize_path(bus, reply, path, path, false, error);
+        r = object_manager_serialize_path(bus, reply, path, path, false, &found_object_manager, error);
         if (r < 0)
                 return r;
         if (bus->nodes_modified)
@@ -1212,7 +1210,7 @@
                 return -ENOMEM;
 
         OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
-                r = object_manager_serialize_path(bus, reply, prefix, path, true, error);
+                r = object_manager_serialize_path(bus, reply, prefix, path, true, &found_object_manager, error);
                 if (r < 0)
                         return r;
                 if (bus->nodes_modified)
@@ -1231,7 +1229,7 @@
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        _cleanup_set_free_free_ Set *s = NULL;
+        _cleanup_ordered_set_free_free_ OrderedSet *s = NULL;
         char *path;
         int r;
 
@@ -1261,7 +1259,7 @@
         if (r < 0)
                 return r;
 
-        SET_FOREACH(path, s) {
+        ORDERED_SET_FOREACH(path, s) {
                 r = object_manager_serialize_path_and_fallbacks(bus, reply, path, &error);
                 if (r < 0)
                         return bus_maybe_reply_error(m, r, &error);
@@ -1482,7 +1480,7 @@
         return 1;
 }
 
-static struct node *bus_node_allocate(sd_bus *bus, const char *path) {
+static struct node* bus_node_allocate(sd_bus *bus, const char *path) {
         struct node *n, *parent;
         const char *e;
         _cleanup_free_ char *s = NULL;
@@ -1508,10 +1506,9 @@
         if (streq(path, "/"))
                 parent = NULL;
         else {
-                e = strrchr(path, '/');
-                assert(e);
+                assert_se(e = strrchr(path, '/'));
 
-                p = strndupa(path, MAX(1, e - path));
+                p = strndupa_safe(path, MAX(1, e - path));
 
                 parent = bus_node_allocate(bus, p);
                 if (!parent)
@@ -1560,13 +1557,18 @@
         free(n);
 }
 
-static int bus_find_parent_object_manager(sd_bus *bus, struct node **out, const char *path) {
+static int bus_find_parent_object_manager(sd_bus *bus, struct node **out, const char *path, bool* path_has_object_manager) {
         struct node *n;
 
         assert(bus);
         assert(path);
+        assert(path_has_object_manager);
 
         n = hashmap_get(bus->nodes, path);
+
+        if (n)
+                *path_has_object_manager = n->object_managers;
+
         if (!n) {
                 _cleanup_free_ char *prefix = NULL;
                 size_t pl;
@@ -1788,7 +1790,7 @@
                 void *userdata) {
 
         sd_bus_slot *s = NULL;
-        struct node_vtable *i, *existing = NULL;
+        struct node_vtable *existing = NULL;
         const sd_bus_vtable *v;
         struct node *n;
         int r;
@@ -2069,9 +2071,7 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         bool has_invalidating = false, has_changing = false;
         struct vtable_member key = {};
-        struct node_vtable *c;
         struct node *n;
-        char **property;
         void *u = NULL;
         int r;
 
@@ -2350,13 +2350,12 @@
 static int object_added_append_all_prefix(
                 sd_bus *bus,
                 sd_bus_message *m,
-                Set *s,
+                OrderedSet *s,
                 const char *prefix,
                 const char *path,
                 bool require_fallback) {
 
         const char *previous_interface = NULL;
-        struct node_vtable *c;
         struct node *n;
         int r;
 
@@ -2390,10 +2389,10 @@
                          * skip it on any of its parents. The child vtables
                          * always fully override any conflicting vtables of
                          * any parent node. */
-                        if (set_get(s, c->interface))
+                        if (ordered_set_get(s, c->interface))
                                 continue;
 
-                        r = set_put(s, c->interface);
+                        r = ordered_set_put(s, c->interface);
                         if (r < 0)
                                 return r;
 
@@ -2438,8 +2437,8 @@
         return 0;
 }
 
-static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *path) {
-        _cleanup_set_free_ Set *s = NULL;
+static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *path, bool path_has_object_manager) {
+        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
         _cleanup_free_ char *prefix = NULL;
         size_t pl;
         int r;
@@ -2463,7 +2462,7 @@
          * a parent that were overwritten by a child.
          */
 
-        s = set_new(&string_hash_ops);
+        s = ordered_set_new(&string_hash_ops);
         if (!s)
                 return -ENOMEM;
 
@@ -2476,9 +2475,11 @@
         r = sd_bus_message_append(m, "{sa{sv}}", "org.freedesktop.DBus.Properties", 0);
         if (r < 0)
                 return r;
-        r = sd_bus_message_append(m, "{sa{sv}}", "org.freedesktop.DBus.ObjectManager", 0);
-        if (r < 0)
-                return r;
+        if (path_has_object_manager){
+                r = sd_bus_message_append(m, "{sa{sv}}", "org.freedesktop.DBus.ObjectManager", 0);
+                if (r < 0)
+                        return r;
+        }
 
         r = object_added_append_all_prefix(bus, m, s, path, path, false);
         if (r < 0)
@@ -2527,7 +2528,8 @@
         if (!BUS_IS_OPEN(bus->state))
                 return -ENOTCONN;
 
-        r = bus_find_parent_object_manager(bus, &object_manager, path);
+        bool path_has_object_manager = false;
+        r = bus_find_parent_object_manager(bus, &object_manager, path, &path_has_object_manager);
         if (r < 0)
                 return r;
         if (r == 0)
@@ -2551,7 +2553,7 @@
                 if (r < 0)
                         return r;
 
-                r = object_added_append_all(bus, m, path);
+                r = object_added_append_all(bus, m, path, path_has_object_manager);
                 if (r < 0)
                         return r;
 
@@ -2570,13 +2572,12 @@
 static int object_removed_append_all_prefix(
                 sd_bus *bus,
                 sd_bus_message *m,
-                Set *s,
+                OrderedSet *s,
                 const char *prefix,
                 const char *path,
                 bool require_fallback) {
 
         const char *previous_interface = NULL;
-        struct node_vtable *c;
         struct node *n;
         int r;
 
@@ -2603,7 +2604,7 @@
                  * skip it on any of its parents. The child vtables
                  * always fully override any conflicting vtables of
                  * any parent node. */
-                if (set_get(s, c->interface))
+                if (ordered_set_get(s, c->interface))
                         continue;
 
                 r = node_vtable_get_userdata(bus, path, c, &u, &error);
@@ -2614,7 +2615,7 @@
                 if (r == 0)
                         continue;
 
-                r = set_put(s, c->interface);
+                r = ordered_set_put(s, c->interface);
                 if (r < 0)
                         return r;
 
@@ -2628,8 +2629,8 @@
         return 0;
 }
 
-static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char *path) {
-        _cleanup_set_free_ Set *s = NULL;
+static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char *path, bool path_has_object_manager) {
+        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
         _cleanup_free_ char *prefix = NULL;
         size_t pl;
         int r;
@@ -2640,7 +2641,7 @@
 
         /* see sd_bus_emit_object_added() for details */
 
-        s = set_new(&string_hash_ops);
+        s = ordered_set_new(&string_hash_ops);
         if (!s)
                 return -ENOMEM;
 
@@ -2653,9 +2654,12 @@
         r = sd_bus_message_append(m, "s", "org.freedesktop.DBus.Properties");
         if (r < 0)
                 return r;
-        r = sd_bus_message_append(m, "s", "org.freedesktop.DBus.ObjectManager");
-        if (r < 0)
-                return r;
+
+        if (path_has_object_manager){
+                r = sd_bus_message_append(m, "s", "org.freedesktop.DBus.ObjectManager");
+                if (r < 0)
+                        return r;
+        }
 
         r = object_removed_append_all_prefix(bus, m, s, path, path, false);
         if (r < 0)
@@ -2704,7 +2708,8 @@
         if (!BUS_IS_OPEN(bus->state))
                 return -ENOTCONN;
 
-        r = bus_find_parent_object_manager(bus, &object_manager, path);
+        bool path_has_object_manager = false;
+        r = bus_find_parent_object_manager(bus, &object_manager, path, &path_has_object_manager);
         if (r < 0)
                 return r;
         if (r == 0)
@@ -2728,7 +2733,7 @@
                 if (r < 0)
                         return r;
 
-                r = object_removed_append_all(bus, m, path);
+                r = object_removed_append_all(bus, m, path, path_has_object_manager);
                 if (r < 0)
                         return r;
 
@@ -2754,7 +2759,6 @@
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         bool found_interface = false;
-        struct node_vtable *c;
         struct node *n;
         void *u = NULL;
         int r;
@@ -2853,7 +2857,6 @@
 _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, char **interfaces) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         struct node *object_manager;
-        char **i;
         int r;
 
         assert_return(bus, -EINVAL);
@@ -2867,7 +2870,8 @@
         if (strv_isempty(interfaces))
                 return 0;
 
-        r = bus_find_parent_object_manager(bus, &object_manager, path);
+        bool path_has_object_manager = false;
+        r = bus_find_parent_object_manager(bus, &object_manager, path, &path_has_object_manager);
         if (r < 0)
                 return r;
         if (r == 0)
@@ -2954,7 +2958,8 @@
         if (strv_isempty(interfaces))
                 return 0;
 
-        r = bus_find_parent_object_manager(bus, &object_manager, path);
+        bool path_has_object_manager = false;
+        r = bus_find_parent_object_manager(bus, &object_manager, path, &path_has_object_manager);
         if (r < 0)
                 return r;
         if (r == 0)
diff --git a/src/libsystemd/sd-bus/bus-protocol.h b/src/libsystemd/sd-bus/bus-protocol.h
index c41ab58..be46b5f 100644
--- a/src/libsystemd/sd-bus/bus-protocol.h
+++ b/src/libsystemd/sd-bus/bus-protocol.h
@@ -8,32 +8,15 @@
 /* Packet header */
 
 struct _packed_ bus_header {
-        /* The first four fields are identical for dbus1, and dbus2 */
         uint8_t endian;
         uint8_t type;
         uint8_t flags;
         uint8_t version;
-
-        union _packed_ {
-                /* dbus1: Used for SOCK_STREAM connections */
-                struct _packed_ {
-                        uint32_t body_size;
-
-                        /* Note that what the bus spec calls "serial" we'll call
-                           "cookie" instead, because we don't want to imply that the
-                           cookie was in any way monotonically increasing. */
-                        uint32_t serial;
-                        uint32_t fields_size;
-                } dbus1;
-
-                /* dbus2: Used for kdbus connections */
-                struct _packed_ {
-                        uint32_t _reserved;
-                        uint64_t cookie;
-                } dbus2;
-
-                /* Note that both header versions have the same size! */
-        };
+        uint32_t body_size;
+        /* Note that what the bus spec calls "serial" we'll call "cookie" instead, because we don't
+         * want to imply that the cookie was in any way monotonically increasing. */
+        uint32_t serial;
+        uint32_t fields_size;
 };
 
 /* Endianness */
diff --git a/src/libsystemd/sd-bus/bus-signature.c b/src/libsystemd/sd-bus/bus-signature.c
index bd0842f..78c7436 100644
--- a/src/libsystemd/sd-bus/bus-signature.c
+++ b/src/libsystemd/sd-bus/bus-signature.c
@@ -1,7 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <util.h>
-
 #include "sd-bus.h"
 
 #include "bus-signature.h"
diff --git a/src/libsystemd/sd-bus/bus-slot.c b/src/libsystemd/sd-bus/bus-slot.c
index a0009a7..9f28957 100644
--- a/src/libsystemd/sd-bus/bus-slot.c
+++ b/src/libsystemd/sd-bus/bus-slot.c
@@ -161,7 +161,7 @@
                 break;
 
         default:
-                assert_not_reached("Wut? Unknown slot type?");
+                assert_not_reached();
         }
 
         bus = slot->bus;
diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c
index 42c5f17..64037e4 100644
--- a/src/libsystemd/sd-bus/bus-socket.c
+++ b/src/libsystemd/sd-bus/bus-socket.c
@@ -22,7 +22,6 @@
 #include "memory-util.h"
 #include "path-util.h"
 #include "process-util.h"
-#include "rlimit-util.h"
 #include "signal-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
@@ -124,107 +123,87 @@
         return false;
 }
 
-static int bus_socket_write_auth(sd_bus *b) {
-        ssize_t k;
-
-        assert(b);
-        assert(b->state == BUS_AUTHENTICATING);
-
-        if (!bus_socket_auth_needs_write(b))
-                return 0;
-
-        if (b->prefer_writev)
-                k = writev(b->output_fd, b->auth_iovec + b->auth_index, ELEMENTSOF(b->auth_iovec) - b->auth_index);
-        else {
-                struct msghdr mh = {
-                        .msg_iov = b->auth_iovec + b->auth_index,
-                        .msg_iovlen = ELEMENTSOF(b->auth_iovec) - b->auth_index,
-                };
-
-                k = sendmsg(b->output_fd, &mh, MSG_DONTWAIT|MSG_NOSIGNAL);
-                if (k < 0 && errno == ENOTSOCK) {
-                        b->prefer_writev = true;
-                        k = writev(b->output_fd, b->auth_iovec + b->auth_index, ELEMENTSOF(b->auth_iovec) - b->auth_index);
-                }
-        }
-
-        if (k < 0)
-                return errno == EAGAIN ? 0 : -errno;
-
-        iovec_advance(b->auth_iovec, &b->auth_index, (size_t) k);
-        return 1;
-}
-
 static int bus_socket_auth_verify_client(sd_bus *b) {
-        char *d, *e, *f, *start;
+        char *l, *lines[4] = {};
         sd_id128_t peer;
+        size_t i, n;
         int r;
 
         assert(b);
 
         /*
-         * We expect three response lines:
-         *   "DATA\r\n"
+         * We expect up to three response lines:
+         *   "DATA\r\n"                 (optional)
          *   "OK <server-id>\r\n"
          *   "AGREE_UNIX_FD\r\n"        (optional)
          */
 
-        d = memmem_safe(b->rbuffer, b->rbuffer_size, "\r\n", 2);
-        if (!d)
-                return 0;
-
-        e = memmem(d + 2, b->rbuffer_size - (d - (char*) b->rbuffer) - 2, "\r\n", 2);
-        if (!e)
-                return 0;
-
-        if (b->accept_fd) {
-                f = memmem(e + 2, b->rbuffer_size - (e - (char*) b->rbuffer) - 2, "\r\n", 2);
-                if (!f)
-                        return 0;
-
-                start = f + 2;
-        } else {
-                f = NULL;
-                start = e + 2;
+        n = 0;
+        lines[n] = b->rbuffer;
+        for (i = 0; i < 3; ++i) {
+                l = memmem_safe(lines[n], b->rbuffer_size - (lines[n] - (char*) b->rbuffer), "\r\n", 2);
+                if (l)
+                        lines[++n] = l + 2;
+                else
+                        break;
         }
 
-        /* Nice! We got all the lines we need. First check the DATA line. */
+        /*
+         * If we sent a non-empty initial response, then we just expect an OK
+         * reply. We currently do this if, and only if, we picked ANONYMOUS.
+         * If we did not send an initial response, then we expect a DATA
+         * challenge, reply with our own DATA, and expect an OK reply. We do
+         * this for EXTERNAL.
+         * If FD negotiation was requested, we additionally expect
+         * an AGREE_UNIX_FD response in all cases.
+         */
+        if (n < (b->anonymous_auth ? 1U : 2U) + !!b->accept_fd)
+                return 0; /* wait for more data */
 
-        if (d - (char*) b->rbuffer == 4) {
-                if (memcmp(b->rbuffer, "DATA", 4))
+        i = 0;
+
+        /* In case of EXTERNAL, verify the first response was DATA. */
+        if (!b->anonymous_auth) {
+                l = lines[i++];
+                if (lines[i] - l == 4 + 2) {
+                        if (memcmp(l, "DATA", 4))
+                                return -EPERM;
+                } else if (lines[i] - l == 3 + 32 + 2) {
+                        /*
+                         * Old versions of the server-side implementation of
+                         * `sd-bus` replied with "OK <id>" to "AUTH" requests
+                         * from a client, even if the "AUTH" line did not
+                         * contain inlined arguments. Therefore, we also accept
+                         * "OK <id>" here, even though it is technically the
+                         * wrong reply. We ignore the "<id>" parameter, though,
+                         * since it has no real value.
+                         */
+                        if (memcmp(l, "OK ", 3))
+                                return -EPERM;
+                } else
                         return -EPERM;
-        } else if (d - (char*) b->rbuffer == 3 + 32) {
-                /*
-                 * Old versions of the server-side implementation of `sd-bus` replied with "OK <id>" to
-                 * "AUTH" requests from a client, even if the "AUTH" line did not contain inlined
-                 * arguments. Therefore, we also accept "OK <id>" here, even though it is technically the
-                 * wrong reply. We ignore the "<id>" parameter, though, since it has no real value.
-                 */
-                if (memcmp(b->rbuffer, "OK ", 3))
-                        return -EPERM;
-        } else
-                return -EPERM;
+        }
 
         /* Now check the OK line. */
+        l = lines[i++];
 
-        if (e - d != 2 + 3 + 32)
+        if (lines[i] - l != 3 + 32 + 2)
                 return -EPERM;
-
-        if (memcmp(d + 2, "OK ", 3))
+        if (memcmp(l, "OK ", 3))
                 return -EPERM;
 
         b->auth = b->anonymous_auth ? BUS_AUTH_ANONYMOUS : BUS_AUTH_EXTERNAL;
 
-        for (unsigned i = 0; i < 32; i += 2) {
+        for (unsigned j = 0; j < 32; j += 2) {
                 int x, y;
 
-                x = unhexchar(d[2 + 3 + i]);
-                y = unhexchar(d[2 + 3 + i + 1]);
+                x = unhexchar(l[3 + j]);
+                y = unhexchar(l[3 + j + 1]);
 
                 if (x < 0 || y < 0)
                         return -EINVAL;
 
-                peer.bytes[i/2] = ((uint8_t) x << 4 | (uint8_t) y);
+                peer.bytes[j/2] = ((uint8_t) x << 4 | (uint8_t) y);
         }
 
         if (!sd_id128_is_null(b->server_id) &&
@@ -234,15 +213,15 @@
         b->server_id = peer;
 
         /* And possibly check the third line, too */
+        if (b->accept_fd) {
+                l = lines[i++];
+                b->can_fds = !!memory_startswith(l, lines[i] - l, "AGREE_UNIX_FD");
+        }
 
-        if (f)
-                b->can_fds =
-                        (f - e == STRLEN("\r\nAGREE_UNIX_FD")) &&
-                        memcmp(e + 2, "AGREE_UNIX_FD",
-                               STRLEN("AGREE_UNIX_FD")) == 0;
+        assert(i == n);
 
-        b->rbuffer_size -= (start - (char*) b->rbuffer);
-        memmove(b->rbuffer, start, b->rbuffer_size);
+        b->rbuffer_size -= (lines[i] - (char*) b->rbuffer);
+        memmove(b->rbuffer, lines[i], b->rbuffer_size);
 
         r = bus_start_running(b);
         if (r < 0)
@@ -301,7 +280,7 @@
         uid_t u;
         int r;
 
-        /* We don't do any real authentication here. Instead, if 
+        /* We don't do any real authentication here. Instead, if
          * the owner of this bus wanted authentication they should have
          * checked SO_PEERCRED before even creating the bus object. */
 
@@ -399,7 +378,7 @@
         for (;;) {
                 /* Check if line is complete */
                 line = (char*) b->rbuffer + b->auth_rbegin;
-                e = memmem(line, b->rbuffer_size - b->auth_rbegin, "\r\n", 2);
+                e = memmem_safe(line, b->rbuffer_size - b->auth_rbegin, "\r\n", 2);
                 if (!e)
                         return processed;
 
@@ -511,6 +490,41 @@
                 return bus_socket_auth_verify_client(b);
 }
 
+static int bus_socket_write_auth(sd_bus *b) {
+        ssize_t k;
+
+        assert(b);
+        assert(b->state == BUS_AUTHENTICATING);
+
+        if (!bus_socket_auth_needs_write(b))
+                return 0;
+
+        if (b->prefer_writev)
+                k = writev(b->output_fd, b->auth_iovec + b->auth_index, ELEMENTSOF(b->auth_iovec) - b->auth_index);
+        else {
+                struct msghdr mh = {
+                        .msg_iov = b->auth_iovec + b->auth_index,
+                        .msg_iovlen = ELEMENTSOF(b->auth_iovec) - b->auth_index,
+                };
+
+                k = sendmsg(b->output_fd, &mh, MSG_DONTWAIT|MSG_NOSIGNAL);
+                if (k < 0 && errno == ENOTSOCK) {
+                        b->prefer_writev = true;
+                        k = writev(b->output_fd, b->auth_iovec + b->auth_index, ELEMENTSOF(b->auth_iovec) - b->auth_index);
+                }
+        }
+
+        if (k < 0)
+                return ERRNO_IS_TRANSIENT(errno) ? 0 : -errno;
+
+        iovec_advance(b->auth_iovec, &b->auth_index, (size_t) k);
+
+        /* Now crank the state machine since we might be able to make progress after writing. For example,
+         * the server only processes "BEGIN" when the write buffer is empty.
+         */
+        return bus_socket_auth_verify(b);
+}
+
 static int bus_socket_read_auth(sd_bus *b) {
         struct msghdr mh;
         struct iovec iov = {};
@@ -565,10 +579,11 @@
                 } else
                         handle_cmsg = true;
         }
-        if (k == -EAGAIN)
-                return 0;
-        if (k < 0)
+        if (k < 0) {
+                if (ERRNO_IS_TRANSIENT(k))
+                        return 0;
                 return (int) k;
+        }
         if (k == 0) {
                 if (handle_cmsg)
                         cmsg_close_all(&mh); /* paranoia, we shouldn't have gotten any fds on EOF */
@@ -607,7 +622,7 @@
         assert(b);
 
         /* Increase the buffers to 8 MB */
-        (void) fd_inc_rcvbuf(b->input_fd, SNDBUF_SIZE);
+        (void) fd_increase_rxbuf(b->input_fd, SNDBUF_SIZE);
         (void) fd_inc_sndbuf(b->output_fd, SNDBUF_SIZE);
 
         b->message_version = 1;
@@ -645,9 +660,8 @@
                  * message broker to aid debugging of clients. We fully anonymize the connection and use a
                  * static default.
                  */
-                "\0AUTH ANONYMOUS\r\n"
-                /* HEX a n o n y m o u s */
-                "DATA 616e6f6e796d6f7573\r\n"
+                /*            HEX a n o n y m o u s */
+                "\0AUTH ANONYMOUS 616e6f6e796d6f7573\r\n"
         };
         static const char sasl_auth_external[] = {
                 "\0AUTH EXTERNAL\r\n"
@@ -726,7 +740,8 @@
         }
 
         /* Make sure the path is NUL terminated */
-        p = strndupa(b->sockaddr.un.sun_path, sizeof(b->sockaddr.un.sun_path));
+        p = strndupa_safe(b->sockaddr.un.sun_path,
+                          sizeof(b->sockaddr.un.sun_path));
 
         /* Make sure the path is absolute */
         r = path_make_absolute_cwd(p, &absolute);
@@ -967,7 +982,7 @@
                 _cleanup_free_ char *line = NULL;
 
                 if (b->exec_argv)
-                        line = quote_command_line(b->exec_argv);
+                        line = quote_command_line(b->exec_argv, SHELL_ESCAPE_EMPTY);
 
                 log_debug("sd-bus: starting bus%s%s with %s%s",
                           b->description ? " " : "", strempty(b->description),
@@ -979,7 +994,7 @@
         if (r < 0)
                 return -errno;
 
-        r = safe_fork_full("(sd-busexec)", s+1, 1, FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS, &b->busexec_pid);
+        r = safe_fork_full("(sd-busexec)", s+1, 1, FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_RLIMIT_NOFILE_SAFE, &b->busexec_pid);
         if (r < 0) {
                 safe_close_pair(s);
                 return r;
@@ -987,11 +1002,11 @@
         if (r == 0) {
                 /* Child */
 
-                if (rearrange_stdio(s[1], s[1], STDERR_FILENO) < 0)
+                r = rearrange_stdio(s[1], s[1], STDERR_FILENO);
+                TAKE_FD(s[1]);
+                if (r < 0)
                         _exit(EXIT_FAILURE);
 
-                (void) rlimit_nofile_safe();
-
                 if (b->exec_argv)
                         execvp(b->exec_path, b->exec_argv);
                 else
@@ -1070,7 +1085,7 @@
         }
 
         if (k < 0)
-                return errno == EAGAIN ? 0 : -errno;
+                return ERRNO_IS_TRANSIENT(errno) ? 0 : -errno;
 
         *idx += (size_t) k;
         return 1;
@@ -1120,7 +1135,7 @@
         } else
                 return -EBADMSG;
 
-        sum = (uint64_t) sizeof(struct bus_header) + (uint64_t) ALIGN_TO(b, 8) + (uint64_t) a;
+        sum = (uint64_t) sizeof(struct bus_header) + (uint64_t) ALIGN8(b) + (uint64_t) a;
         if (sum >= BUS_MESSAGE_SIZE_MAX)
                 return -ENOBUFS;
 
@@ -1227,10 +1242,11 @@
                 } else
                         handle_cmsg = true;
         }
-        if (k == -EAGAIN)
-                return 0;
-        if (k < 0)
+        if (k < 0) {
+                if (ERRNO_IS_TRANSIENT(k))
+                        return 0;
                 return (int) k;
+        }
         if (k == 0) {
                 if (handle_cmsg)
                         cmsg_close_all(&mh); /* On EOF we shouldn't have gotten an fd, but let's make sure */
@@ -1289,8 +1305,11 @@
         assert(b->state == BUS_OPENING);
 
         events = fd_wait_for_event(b->output_fd, POLLOUT, 0);
-        if (events < 0)
+        if (events < 0) {
+                if (ERRNO_IS_TRANSIENT(events))
+                        return 0;
                 return events;
+        }
         if (!(events & (POLLOUT|POLLERR|POLLHUP)))
                 return 0;
 
diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c
index bc36673..f9c59a1 100644
--- a/src/libsystemd/sd-bus/bus-track.c
+++ b/src/libsystemd/sd-bus/bus-track.c
@@ -40,7 +40,6 @@
                  "arg0='", name, "'")
 
 static struct track_item* track_item_free(struct track_item *i) {
-
         if (!i)
                 return NULL;
 
@@ -49,7 +48,8 @@
         return mfree(i);
 }
 
-DEFINE_TRIVIAL_CLEANUP_FUNC(struct track_item*, track_item_free);
+DEFINE_PRIVATE_TRIVIAL_UNREF_FUNC(struct track_item, track_item, track_item_free);
+DEFINE_TRIVIAL_CLEANUP_FUNC(struct track_item*, track_item_unref);
 DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(track_item_hash_ops, char, string_hash_func, string_compare_func,
                                               struct track_item, track_item_free);
 
@@ -164,14 +164,13 @@
 DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_bus_track, sd_bus_track, track_free);
 
 static int on_name_owner_changed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        sd_bus_track *track = userdata;
-        const char *name, *old, *new;
+        sd_bus_track *track = ASSERT_PTR(userdata);
+        const char *name;
         int r;
 
         assert(message);
-        assert(track);
 
-        r = sd_bus_message_read(message, "sss", &name, &old, &new);
+        r = sd_bus_message_read(message, "sss", &name, NULL, NULL);
         if (r < 0)
                 return 0;
 
@@ -180,7 +179,7 @@
 }
 
 _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) {
-        _cleanup_(track_item_freep) struct track_item *n = NULL;
+        _cleanup_(track_item_unrefp) struct track_item *n = NULL;
         struct track_item *i;
         const char *match;
         int r;
@@ -191,12 +190,16 @@
         i = hashmap_get(track->names, name);
         if (i) {
                 if (track->recursive) {
-                        unsigned k = track->n_ref + 1;
+                        assert(i->n_ref > 0);
 
-                        if (k < track->n_ref) /* Check for overflow */
+                        /* Manual overflow check (instead of a DEFINE_TRIVIAL_REF_FUNC() helper or so), so
+                         * that we can return a proper error, given this is almost always called in a
+                         * directly client controllable way, and thus better should never hit an assertion
+                         * here. */
+                        if (i->n_ref >= UINT_MAX)
                                 return -EOVERFLOW;
 
-                        track->n_ref = k;
+                        i->n_ref++;
                 }
 
                 bus_track_remove_from_queue(track);
@@ -207,9 +210,14 @@
         if (r < 0)
                 return r;
 
-        n = new0(struct track_item, 1);
+        n = new(struct track_item, 1);
         if (!n)
                 return -ENOMEM;
+
+        *n = (struct track_item) {
+                .n_ref = 1,
+        };
+
         n->name = strdup(name);
         if (!n->name)
                 return -ENOMEM;
@@ -241,8 +249,7 @@
                 return r;
         }
 
-        n->n_ref = 1;
-        n = NULL;
+        TAKE_PTR(n);
 
         bus_track_remove_from_queue(track);
         track->modified = true;
@@ -258,20 +265,16 @@
         if (!track) /* Treat a NULL track object as an empty track object */
                 return 0;
 
-        if (!track->recursive)
-                return bus_track_remove_name_fully(track, name);
-
         i = hashmap_get(track->names, name);
         if (!i)
-                return -EUNATCH;
-        if (i->n_ref <= 0)
-                return -EUNATCH;
+                return 0;
 
-        i->n_ref--;
-
-        if (i->n_ref <= 0)
+        assert(i->n_ref >= 1);
+        if (i->n_ref <= 1)
                 return bus_track_remove_name_fully(track, name);
 
+        track_item_unref(i);
+
         return 1;
 }
 
@@ -293,7 +296,7 @@
         if (!track) /* Let's consider a NULL object equivalent to an empty object */
                 return NULL;
 
-        return hashmap_get(track->names, (void*) name) ? name : NULL;
+        return hashmap_contains(track->names, name) ? name : NULL;
 }
 
 _public_ const char* sd_bus_track_first(sd_bus_track *track) {
diff --git a/src/libsystemd/sd-bus/fuzz-bus-match.c b/src/libsystemd/sd-bus/fuzz-bus-match.c
index 0585338..f74394b 100644
--- a/src/libsystemd/sd-bus/fuzz-bus-match.c
+++ b/src/libsystemd/sd-bus/fuzz-bus-match.c
@@ -15,6 +15,9 @@
         _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
         int r;
 
+        if (outside_size_range(size, 0, 65536))
+                return 0;
+
         /* We don't want to fill the logs with messages about parse errors.
          * Disable most logging if not running standalone */
         if (!getenv("SYSTEMD_LOG_LEVEL"))
diff --git a/src/libsystemd/sd-bus/fuzz-bus-match.options b/src/libsystemd/sd-bus/fuzz-bus-match.options
new file mode 100644
index 0000000..678d526
--- /dev/null
+++ b/src/libsystemd/sd-bus/fuzz-bus-match.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 65536
diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
index e85a409..01de693 100644
--- a/src/libsystemd/sd-bus/sd-bus.c
+++ b/src/libsystemd/sd-bus/sd-bus.c
@@ -27,15 +27,17 @@
 #include "bus-track.h"
 #include "bus-type.h"
 #include "cgroup-util.h"
-#include "def.h"
+#include "constants.h"
 #include "errno-util.h"
 #include "fd-util.h"
+#include "glyph-util.h"
 #include "hexdecoct.h"
 #include "hostname-util.h"
 #include "io-util.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "missing_syscall.h"
+#include "missing_threads.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -47,8 +49,10 @@
 #define log_debug_bus_message(m)                                         \
         do {                                                             \
                 sd_bus_message *_mm = (m);                               \
-                log_debug("Got message type=%s sender=%s destination=%s path=%s interface=%s member=%s cookie=%" PRIu64 " reply_cookie=%" PRIu64 " signature=%s error-name=%s error-message=%s", \
-                          bus_message_type_to_string(_mm->header->type), \
+                log_debug("Got message type=%s sender=%s destination=%s path=%s interface=%s member=%s " \
+                          " cookie=%" PRIu64 " reply_cookie=%" PRIu64   \
+                          " signature=%s error-name=%s error-message=%s", \
+                          strna(bus_message_type_to_string(_mm->header->type)), \
                           strna(sd_bus_message_get_sender(_mm)),         \
                           strna(sd_bus_message_get_destination(_mm)),    \
                           strna(sd_bus_message_get_path(_mm)),           \
@@ -239,15 +243,16 @@
 
         *b = (sd_bus) {
                 .n_ref = 1,
-                .input_fd = -1,
-                .output_fd = -1,
-                .inotify_fd = -1,
+                .input_fd = -EBADF,
+                .output_fd = -EBADF,
+                .inotify_fd = -EBADF,
                 .message_version = 1,
                 .creds_mask = SD_BUS_CREDS_WELL_KNOWN_NAMES|SD_BUS_CREDS_UNIQUE_NAME,
                 .accept_fd = true,
                 .original_pid = getpid_cached(),
                 .n_groups = SIZE_MAX,
                 .close_on_exit = true,
+                .ucred = UCRED_INVALID,
         };
 
         /* We guarantee that wqueue always has space for at least one entry */
@@ -503,15 +508,15 @@
 }
 
 void bus_set_state(sd_bus *bus, enum bus_state state) {
-        static const char * const table[_BUS_STATE_MAX] = {
-                [BUS_UNSET] = "UNSET",
-                [BUS_WATCH_BIND] = "WATCH_BIND",
-                [BUS_OPENING] = "OPENING",
+        static const char* const table[_BUS_STATE_MAX] = {
+                [BUS_UNSET]          = "UNSET",
+                [BUS_WATCH_BIND]     = "WATCH_BIND",
+                [BUS_OPENING]        = "OPENING",
                 [BUS_AUTHENTICATING] = "AUTHENTICATING",
-                [BUS_HELLO] = "HELLO",
-                [BUS_RUNNING] = "RUNNING",
-                [BUS_CLOSING] = "CLOSING",
-                [BUS_CLOSED] = "CLOSED",
+                [BUS_HELLO]          = "HELLO",
+                [BUS_RUNNING]        = "RUNNING",
+                [BUS_CLOSING]        = "CLOSING",
+                [BUS_CLOSED]         = "CLOSED",
         };
 
         assert(bus);
@@ -520,7 +525,8 @@
         if (state == bus->state)
                 return;
 
-        log_debug("Bus %s: changing state %s → %s", strna(bus->description), table[bus->state], table[state]);
+        log_debug("Bus %s: changing state %s %s %s", strna(bus->description),
+                  table[bus->state], special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), table[state]);
         bus->state = state;
 }
 
@@ -1080,10 +1086,10 @@
 }
 
 static void bus_kill_exec(sd_bus *bus) {
-        if (pid_is_valid(bus->busexec_pid) > 0) {
-                sigterm_wait(bus->busexec_pid);
-                bus->busexec_pid = 0;
-        }
+        if (!pid_is_valid(bus->busexec_pid))
+                return;
+
+        sigterm_wait(TAKE_PID(bus->busexec_pid));
 }
 
 static int bus_start_address(sd_bus *b) {
@@ -1405,7 +1411,7 @@
                 rbracket = strchr(host, ']');
                 if (!rbracket)
                         return -EINVAL;
-                t = strndupa(host + 1, rbracket - host - 1);
+                t = strndupa_safe(host + 1, rbracket - host - 1);
                 e = bus_address_escape(t);
                 if (!e)
                         return -ENOMEM;
@@ -1438,7 +1444,7 @@
 
                 t = strchr(p, '/');
                 if (t) {
-                        p = strndupa(p, t - p);
+                        p = strndupa_safe(p, t - p);
                         got_forward_slash = true;
                 }
 
@@ -1465,7 +1471,7 @@
         if (!e) {
                 char *t;
 
-                t = strndupa(host, strcspn(host, ":/"));
+                t = strndupa_safe(host, strcspn(host, ":/"));
 
                 e = bus_address_escape(t);
                 if (!e)
@@ -1965,10 +1971,8 @@
          * hence let's fill something in for synthetic messages. Since
          * synthetic messages might have a fake sender and we don't
          * want to interfere with the real sender's serial numbers we
-         * pick a fixed, artificial one. We use UINT32_MAX rather
-         * than UINT64_MAX since dbus1 only had 32bit identifiers,
-         * even though kdbus can do 64bit. */
-        return sd_bus_message_seal(m, 0xFFFFFFFFULL, 0);
+         * pick a fixed, artificial one. */
+        return sd_bus_message_seal(m, UINT32_MAX, 0);
 }
 
 static int bus_write_message(sd_bus *bus, sd_bus_message *m, size_t *idx) {
@@ -1982,7 +1986,9 @@
                 return r;
 
         if (*idx >= BUS_MESSAGE_SIZE(m))
-                log_debug("Sent message type=%s sender=%s destination=%s path=%s interface=%s member=%s cookie=%" PRIu64 " reply_cookie=%" PRIu64 " signature=%s error-name=%s error-message=%s",
+                log_debug("Sent message type=%s sender=%s destination=%s path=%s interface=%s member=%s"
+                          " cookie=%" PRIu64 " reply_cookie=%" PRIu64
+                          " signature=%s error-name=%s error-message=%s",
                           bus_message_type_to_string(m->header->type),
                           strna(sd_bus_message_get_sender(m)),
                           strna(sd_bus_message_get_destination(m)),
@@ -2411,7 +2417,8 @@
                                                 return 1;
                                         }
 
-                                        return sd_bus_error_set(error, SD_BUS_ERROR_INCONSISTENT_MESSAGE, "Reply message contained file descriptors which I couldn't accept. Sorry.");
+                                        return sd_bus_error_set(error, SD_BUS_ERROR_INCONSISTENT_MESSAGE,
+                                                                "Reply message contained file descriptors which I couldn't accept. Sorry.");
 
                                 } else if (incoming->header->type == SD_BUS_MESSAGE_METHOD_ERROR)
                                         return sd_bus_error_copy(error, &incoming->error);
@@ -2464,8 +2471,11 @@
                         left = UINT64_MAX;
 
                 r = bus_poll(bus, true, left);
-                if (r < 0)
+                if (r < 0) {
+                        if (ERRNO_IS_TRANSIENT(r))
+                                continue;
                         goto fail;
+                }
                 if (r == 0) {
                         r = -ETIMEDOUT;
                         goto fail;
@@ -2544,7 +2554,7 @@
                 break;
 
         default:
-                assert_not_reached("Unknown state");
+                assert_not_reached();
         }
 
         return flags;
@@ -2603,7 +2613,7 @@
                 return 0;
 
         default:
-                assert_not_reached("Unknown or unexpected stat");
+                assert_not_reached();
         }
 }
 
@@ -2782,7 +2792,6 @@
 
 static int process_filter(sd_bus *bus, sd_bus_message *m) {
         _cleanup_(sd_bus_error_free) sd_bus_error error_buffer = SD_BUS_ERROR_NULL;
-        struct filter_callback *l;
         int r;
 
         assert(bus);
@@ -2872,7 +2881,6 @@
                 r = sd_bus_message_new_method_return(m, &reply);
         else if (streq_ptr(m->member, "GetMachineId")) {
                 sd_id128_t id;
-                char sid[SD_ID128_STRING_MAX];
 
                 r = sd_id128_get_machine(&id);
                 if (r < 0)
@@ -2882,7 +2890,7 @@
                 if (r < 0)
                         return r;
 
-                r = sd_bus_message_append(reply, "s", sd_id128_to_string(id, sid));
+                r = sd_bus_message_append(reply, "s", SD_ID128_TO_STRING(id));
         } else {
                 r = sd_bus_message_new_method_errorf(
                                 m, &reply,
@@ -2922,10 +2930,12 @@
         if (m->header->type != SD_BUS_MESSAGE_METHOD_CALL)
                 return 1; /* just eat it up */
 
-        return sd_bus_reply_method_errorf(m, SD_BUS_ERROR_INCONSISTENT_MESSAGE, "Message contains file descriptors, which I cannot accept. Sorry.");
+        return sd_bus_reply_method_errorf(m, SD_BUS_ERROR_INCONSISTENT_MESSAGE,
+                                          "Message contains file descriptors, which I cannot accept. Sorry.");
 }
 
 static int process_message(sd_bus *bus, sd_bus_message *m) {
+        _unused_ _cleanup_(log_context_freep) LogContext *c = NULL;
         int r;
 
         assert(bus);
@@ -2934,6 +2944,9 @@
         bus->current_message = m;
         bus->iteration_counter++;
 
+        if (log_context_enabled())
+                c = log_context_new_consume(bus_message_make_log_fields(m));
+
         log_debug_bus_message(m);
 
         r = process_hello(bus, m);
@@ -3062,7 +3075,7 @@
         else
                 exit(EXIT_FAILURE);
 
-        assert_not_reached("exit() didn't exit?");
+        assert_not_reached();
 }
 
 static int process_closing_reply_callback(sd_bus *bus, struct reply_callback *c) {
@@ -3233,7 +3246,7 @@
                 return process_closing(bus, ret);
 
         default:
-                assert_not_reached("Unknown state");
+                assert_not_reached();
         }
 
         if (ERRNO_IS_DISCONNECT(r)) {
@@ -3322,6 +3335,7 @@
 }
 
 _public_ int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec) {
+        int r;
 
         assert_return(bus, -EINVAL);
         assert_return(bus = bus_resolve(bus), -ENOPKG);
@@ -3336,7 +3350,11 @@
         if (bus->rqueue_size > 0)
                 return 0;
 
-        return bus_poll(bus, false, timeout_usec);
+        r = bus_poll(bus, false, timeout_usec);
+        if (r < 0 && ERRNO_IS_TRANSIENT(r))
+                return 1; /* treat EINTR as success, but let's exit, so that the caller will call back into us soon. */
+
+        return r;
 }
 
 _public_ int sd_bus_flush(sd_bus *bus) {
@@ -3378,8 +3396,12 @@
                         return 0;
 
                 r = bus_poll(bus, false, UINT64_MAX);
-                if (r < 0)
+                if (r < 0) {
+                        if (ERRNO_IS_TRANSIENT(r))
+                                continue;
+
                         return r;
+                }
         }
 }
 
@@ -3416,12 +3438,11 @@
                 void *userdata,
                 sd_bus_error *ret_error) {
 
-        sd_bus_slot *match_slot = userdata;
+        sd_bus_slot *match_slot = ASSERT_PTR(userdata);
         bool failed = false;
         int r;
 
         assert(m);
-        assert(match_slot);
 
         sd_bus_slot_ref(match_slot);
 
@@ -3531,7 +3552,7 @@
                                                                  s);
 
                                 if (r < 0)
-                                        return r;
+                                        goto finish;
 
                                 /* Make the slot of the match call floating now. We need the reference, but we don't
                                  * want that this match pins the bus object, hence we first create it non-floating, but
@@ -3593,11 +3614,9 @@
 }
 
 static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         /* Note that this is called both on input_fd, output_fd as well as inotify_fd events */
 
         r = sd_bus_process(bus, NULL);
@@ -3610,11 +3629,9 @@
 }
 
 static int time_callback(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         r = sd_bus_process(bus, NULL);
         if (r < 0) {
                 log_debug_errno(r, "Processing of bus failed, closing down: %m");
@@ -3625,12 +3642,11 @@
 }
 
 static int prepare_callback(sd_event_source *s, void *userdata) {
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r, e;
         usec_t until;
 
         assert(s);
-        assert(bus);
 
         e = sd_bus_get_events(bus);
         if (e < 0) {
@@ -3663,7 +3679,7 @@
                 }
         }
 
-        r = sd_event_source_set_enabled(bus->time_event_source, r > 0);
+        r = sd_event_source_set_enabled(bus->time_event_source, r > 0 ? SD_EVENT_ONESHOT : SD_EVENT_OFF);
         if (r < 0)
                 goto fail;
 
@@ -3974,6 +3990,10 @@
                 return 0;
         }
 
+        /* Note that 'e' might be an empty string here. That's expected. E.g. a case where the subtree
+         * corresponds to a subtree on a disk, and we want to return something that represents the root
+         * of the filesystem. */
+
         ret = bus_label_unescape(e);
         if (!ret)
                 return -ENOMEM;
diff --git a/src/libsystemd/sd-bus/test-bus-address.c b/src/libsystemd/sd-bus/test-bus-address.c
index b92558f..347ba1a 100644
--- a/src/libsystemd/sd-bus/test-bus-address.c
+++ b/src/libsystemd/sd-bus/test-bus-address.c
@@ -15,20 +15,17 @@
 
         r = bus_set_address_system_remote(b, host);
         log_info("\"%s\" → %d, \"%s\"", host, r, strna(r >= 0 ? b->address : NULL));
-        if (result < 0 || expected) {
-                assert(r == result);
-                if (r >= 0)
-                        assert_se(streq(b->address, expected));
-        }
+        assert_se(r == result);
+        if (r >= 0)
+                assert_se(streq_ptr(b->address, expected));
 }
 
-static void test_bus_set_address_system_remote(char **args) {
+TEST(bus_set_address_system_remote) {
         _cleanup_(sd_bus_unrefp) sd_bus *b = NULL;
 
         assert_se(sd_bus_new(&b) >= 0);
-        if (!strv_isempty(args)) {
-                char **a;
-                STRV_FOREACH(a, args)
+        if (!strv_isempty(saved_argv + 1)) {
+                STRV_FOREACH(a, saved_argv + 1)
                         test_one_address(b, *a, 0, NULL);
                 return;
         };
@@ -39,8 +36,8 @@
                          0, "unixexec:path=ssh,argv1=-xT,argv2=-p,argv3=123,argv4=--,argv5=host,argv6=systemd-stdio-bridge");
         test_one_address(b, "host:123:123",
                          -EINVAL, NULL);
-                test_one_address(b, "host:",
-                                 -EINVAL, NULL);
+        test_one_address(b, "host:",
+                         -EINVAL, NULL);
         test_one_address(b, "user@host",
                          0, "unixexec:path=ssh,argv1=-xT,argv2=--,argv3=user%40host,argv4=systemd-stdio-bridge");
         test_one_address(b, "user@host@host",
@@ -61,10 +58,4 @@
                          -EINVAL, NULL);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
-        test_bus_set_address_system_remote(argv + 1);
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/libsystemd/sd-bus/test-bus-benchmark.c b/src/libsystemd/sd-bus/test-bus-benchmark.c
index 13c08fe..1eb6edd 100644
--- a/src/libsystemd/sd-bus/test-bus-benchmark.c
+++ b/src/libsystemd/sd-bus/test-bus-benchmark.c
@@ -8,12 +8,11 @@
 #include "alloc-util.h"
 #include "bus-internal.h"
 #include "bus-kernel.h"
-#include "def.h"
+#include "constants.h"
 #include "fd-util.h"
 #include "missing_resource.h"
 #include "string-util.h"
 #include "time-util.h"
-#include "util.h"
 
 #define MAX_SIZE (2*1024*1024)
 
@@ -57,7 +56,7 @@
                         return;
 
                 } else if (!sd_bus_message_is_signal(m, NULL, NULL))
-                        assert_not_reached("Unknown method");
+                        assert_not_reached();
         }
 }
 
@@ -212,9 +211,9 @@
                 MODE_CHART,
         } mode = MODE_BISECT;
         Type type = TYPE_LEGACY;
-        int i, pair[2] = { -1, -1 };
+        int i, pair[2] = PIPE_EBADF;
         _cleanup_free_ char *address = NULL, *server_name = NULL;
-        _cleanup_close_ int bus_ref = -1;
+        _cleanup_close_ int bus_ref = -EBADF;
         const char *unique;
         cpu_set_t cpuset;
         size_t result;
diff --git a/src/libsystemd/sd-bus/test-bus-chat.c b/src/libsystemd/sd-bus/test-bus-chat.c
index df6dd62..8e66919 100644
--- a/src/libsystemd/sd-bus/test-bus-chat.c
+++ b/src/libsystemd/sd-bus/test-bus-chat.c
@@ -18,10 +18,12 @@
 #include "macro.h"
 #include "string-util.h"
 #include "tests.h"
-#include "util.h"
 
 static int match_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
-        log_info("Match triggered! interface=%s member=%s", strna(sd_bus_message_get_interface(m)), strna(sd_bus_message_get_member(m)));
+        log_info("Match triggered! destination=%s interface=%s member=%s",
+                 strna(sd_bus_message_get_destination(m)),
+                 strna(sd_bus_message_get_interface(m)),
+                 strna(sd_bus_message_get_member(m)));
         return 0;
 }
 
@@ -95,6 +97,12 @@
                 goto fail;
         }
 
+        r = sd_bus_match_signal(bus, NULL, NULL, NULL, "foo.bar", "NotifyTo", match_callback, NULL);
+        if (r < 0) {
+                log_error_errno(r, "Failed to request match: %m");
+                goto fail;
+        }
+
         r = sd_bus_add_match(bus, NULL, "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'", match_callback, NULL);
         if (r < 0) {
                 log_error_errno(r, "Failed to add match: %m");
@@ -252,7 +260,7 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         const char *hello;
         int r;
-        _cleanup_close_pair_ int pp[2] = { -1, -1 };
+        _cleanup_close_pair_ int pp[2] = PIPE_EBADF;
         char x;
 
         r = sd_bus_open_user(&bus);
@@ -308,7 +316,7 @@
 
         errno = 0;
         if (read(pp[0], &x, 1) <= 0) {
-                log_error("Failed to read from pipe: %s", errno != 0 ? strerror_safe(errno) : "early read");
+                log_error("Failed to read from pipe: %s", STRERROR_OR_EOF(errno));
                 goto finish;
         }
 
@@ -397,6 +405,26 @@
 
         m = sd_bus_message_unref(m);
 
+        r = sd_bus_message_new_signal_to(
+                        bus,
+                        &m,
+                        "org.freedesktop.systemd.test",
+                        "/foobar",
+                        "foo.bar",
+                        "NotifyTo");
+        if (r < 0) {
+                log_error_errno(r, "Failed to allocate signal to: %m");
+                goto finish;
+        }
+
+        r = sd_bus_send(bus, m, NULL);
+        if (r < 0) {
+                log_error("Failed to issue signal to: %s", bus_error_message(&error, r));
+                goto finish;
+        }
+
+        m = sd_bus_message_unref(m);
+
         r = sd_bus_message_new_method_call(
                         bus,
                         &m,
diff --git a/src/libsystemd/sd-bus/test-bus-error.c b/src/libsystemd/sd-bus/test-bus-error.c
index 84728e4..a55f3f9 100644
--- a/src/libsystemd/sd-bus/test-bus-error.c
+++ b/src/libsystemd/sd-bus/test-bus-error.c
@@ -8,8 +8,9 @@
 #include "errno-list.h"
 #include "errno-util.h"
 #include "string-util.h"
+#include "tests.h"
 
-static void test_error(void) {
+TEST(error) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL, second = SD_BUS_ERROR_NULL;
         const sd_bus_error const_error = SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_FILE_EXISTS, "const error");
         const sd_bus_error temporarily_const_error = {
@@ -98,7 +99,7 @@
         assert_se(!sd_bus_error_is_set(&error));
         assert_se(sd_bus_error_set_errno(&error, EBUSY) == -EBUSY);
         assert_se(streq(error.name, "System.Error.EBUSY"));
-        assert_se(streq(error.message, strerror_safe(EBUSY)));
+        assert_se(streq(error.message, STRERROR(EBUSY)));
         assert_se(sd_bus_error_has_name(&error, "System.Error.EBUSY"));
         assert_se(sd_bus_error_get_errno(&error) == EBUSY);
         assert_se(sd_bus_error_is_set(&error));
@@ -126,15 +127,15 @@
 extern const sd_bus_error_map __start_SYSTEMD_BUS_ERROR_MAP[];
 extern const sd_bus_error_map __stop_SYSTEMD_BUS_ERROR_MAP[];
 
-static void dump_mapping_table(void) {
+static int dump_mapping_table(void) {
         const sd_bus_error_map *m;
 
         printf("----- errno mappings ------\n");
-        m = ALIGN_TO_PTR(__start_SYSTEMD_BUS_ERROR_MAP, sizeof(void*));
+        m = ALIGN_PTR(__start_SYSTEMD_BUS_ERROR_MAP);
         while (m < __stop_SYSTEMD_BUS_ERROR_MAP) {
 
                 if (m->code == BUS_ERROR_MAP_END_MARKER) {
-                        m = ALIGN_TO_PTR(m + 1, sizeof(void*));
+                        m = ALIGN_PTR(m + 1);
                         continue;
                 }
 
@@ -142,9 +143,11 @@
                 m++;
         }
         printf("---------------------------\n");
+
+        return EXIT_SUCCESS;
 }
 
-static void test_errno_mapping_standard(void) {
+TEST(errno_mapping_standard) {
         assert_se(sd_bus_error_set(NULL, "System.Error.EUCLEAN", NULL) == -EUCLEAN);
         assert_se(sd_bus_error_set(NULL, "System.Error.EBUSY", NULL) == -EBUSY);
         assert_se(sd_bus_error_set(NULL, "System.Error.EINVAL", NULL) == -EINVAL);
@@ -186,7 +189,7 @@
         SD_BUS_ERROR_MAP_END
 };
 
-static void test_errno_mapping_custom(void) {
+TEST(errno_mapping_custom) {
         assert_se(sd_bus_error_set(NULL, "org.freedesktop.custom-dbus-error", NULL) == -5);
         assert_se(sd_bus_error_set(NULL, "org.freedesktop.custom-dbus-error-2", NULL) == -52);
         assert_se(sd_bus_error_set(NULL, "org.freedesktop.custom-dbus-error-x", NULL) == -EIO);
@@ -214,7 +217,7 @@
         assert_se(sd_bus_error_add_map(test_errors_bad2) == -EINVAL);
 }
 
-static void test_sd_bus_error_set_errnof(void) {
+TEST(sd_bus_error_set_errnof) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_free_ char *str = NULL;
 
@@ -288,13 +291,4 @@
         assert_se(error._need_free == 1);
 }
 
-int main(int argc, char *argv[]) {
-        dump_mapping_table();
-
-        test_error();
-        test_errno_mapping_standard();
-        test_errno_mapping_custom();
-        test_sd_bus_error_set_errnof();
-
-        return 0;
-}
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, dump_mapping_table);
diff --git a/src/libsystemd/sd-bus/test-bus-gvariant.c b/src/libsystemd/sd-bus/test-bus-gvariant.c
deleted file mode 100644
index edd8301..0000000
--- a/src/libsystemd/sd-bus/test-bus-gvariant.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#if HAVE_GLIB
-#include <glib.h>
-#endif
-
-#include "sd-bus.h"
-
-#include "alloc-util.h"
-#include "bus-dump.h"
-#include "bus-gvariant.h"
-#include "bus-internal.h"
-#include "bus-message.h"
-#include "macro.h"
-#include "tests.h"
-#include "util.h"
-
-static void test_bus_gvariant_is_fixed_size(void) {
-        log_info("/* %s */", __func__);
-
-        assert_se(bus_gvariant_is_fixed_size("") > 0);
-        assert_se(bus_gvariant_is_fixed_size("()") == -EINVAL);
-        assert_se(bus_gvariant_is_fixed_size("y") > 0);
-        assert_se(bus_gvariant_is_fixed_size("u") > 0);
-        assert_se(bus_gvariant_is_fixed_size("b") > 0);
-        assert_se(bus_gvariant_is_fixed_size("n") > 0);
-        assert_se(bus_gvariant_is_fixed_size("q") > 0);
-        assert_se(bus_gvariant_is_fixed_size("i") > 0);
-        assert_se(bus_gvariant_is_fixed_size("t") > 0);
-        assert_se(bus_gvariant_is_fixed_size("d") > 0);
-        assert_se(bus_gvariant_is_fixed_size("s") == 0);
-        assert_se(bus_gvariant_is_fixed_size("o") == 0);
-        assert_se(bus_gvariant_is_fixed_size("g") == 0);
-        assert_se(bus_gvariant_is_fixed_size("h") > 0);
-        assert_se(bus_gvariant_is_fixed_size("ay") == 0);
-        assert_se(bus_gvariant_is_fixed_size("v") == 0);
-        assert_se(bus_gvariant_is_fixed_size("(u)") > 0);
-        assert_se(bus_gvariant_is_fixed_size("(uuuuy)") > 0);
-        assert_se(bus_gvariant_is_fixed_size("(uusuuy)") == 0);
-        assert_se(bus_gvariant_is_fixed_size("a{ss}") == 0);
-        assert_se(bus_gvariant_is_fixed_size("((u)yyy(b(iiii)))") > 0);
-        assert_se(bus_gvariant_is_fixed_size("((u)yyy(b(iiivi)))") == 0);
-}
-
-static void test_bus_gvariant_get_size(void) {
-        log_info("/* %s */", __func__);
-
-        assert_se(bus_gvariant_get_size("") == 0);
-        assert_se(bus_gvariant_get_size("()") == -EINVAL);
-        assert_se(bus_gvariant_get_size("y") == 1);
-        assert_se(bus_gvariant_get_size("u") == 4);
-        assert_se(bus_gvariant_get_size("b") == 1);
-        assert_se(bus_gvariant_get_size("n") == 2);
-        assert_se(bus_gvariant_get_size("q") == 2);
-        assert_se(bus_gvariant_get_size("i") == 4);
-        assert_se(bus_gvariant_get_size("t") == 8);
-        assert_se(bus_gvariant_get_size("d") == 8);
-        assert_se(bus_gvariant_get_size("s") < 0);
-        assert_se(bus_gvariant_get_size("o") < 0);
-        assert_se(bus_gvariant_get_size("g") < 0);
-        assert_se(bus_gvariant_get_size("h") == 4);
-        assert_se(bus_gvariant_get_size("ay") < 0);
-        assert_se(bus_gvariant_get_size("v") < 0);
-        assert_se(bus_gvariant_get_size("(u)") == 4);
-        assert_se(bus_gvariant_get_size("(uuuuy)") == 20);
-        assert_se(bus_gvariant_get_size("(uusuuy)") < 0);
-        assert_se(bus_gvariant_get_size("a{ss}") < 0);
-        assert_se(bus_gvariant_get_size("((u)yyy(b(iiii)))") == 28);
-        assert_se(bus_gvariant_get_size("((u)yyy(b(iiivi)))") < 0);
-        assert_se(bus_gvariant_get_size("((b)(t))") == 16);
-        assert_se(bus_gvariant_get_size("((b)(b)(t))") == 16);
-        assert_se(bus_gvariant_get_size("(bt)") == 16);
-        assert_se(bus_gvariant_get_size("((t)(b))") == 16);
-        assert_se(bus_gvariant_get_size("(tb)") == 16);
-        assert_se(bus_gvariant_get_size("((b)(b))") == 2);
-        assert_se(bus_gvariant_get_size("((t)(t))") == 16);
-}
-
-static void test_bus_gvariant_get_alignment(void) {
-        log_info("/* %s */", __func__);
-
-        assert_se(bus_gvariant_get_alignment("") == 1);
-        assert_se(bus_gvariant_get_alignment("()") == -EINVAL);
-        assert_se(bus_gvariant_get_alignment("y") == 1);
-        assert_se(bus_gvariant_get_alignment("b") == 1);
-        assert_se(bus_gvariant_get_alignment("u") == 4);
-        assert_se(bus_gvariant_get_alignment("s") == 1);
-        assert_se(bus_gvariant_get_alignment("o") == 1);
-        assert_se(bus_gvariant_get_alignment("g") == 1);
-        assert_se(bus_gvariant_get_alignment("v") == 8);
-        assert_se(bus_gvariant_get_alignment("h") == 4);
-        assert_se(bus_gvariant_get_alignment("i") == 4);
-        assert_se(bus_gvariant_get_alignment("t") == 8);
-        assert_se(bus_gvariant_get_alignment("x") == 8);
-        assert_se(bus_gvariant_get_alignment("q") == 2);
-        assert_se(bus_gvariant_get_alignment("n") == 2);
-        assert_se(bus_gvariant_get_alignment("d") == 8);
-        assert_se(bus_gvariant_get_alignment("ay") == 1);
-        assert_se(bus_gvariant_get_alignment("as") == 1);
-        assert_se(bus_gvariant_get_alignment("au") == 4);
-        assert_se(bus_gvariant_get_alignment("an") == 2);
-        assert_se(bus_gvariant_get_alignment("ans") == 2);
-        assert_se(bus_gvariant_get_alignment("ant") == 8);
-        assert_se(bus_gvariant_get_alignment("(ss)") == 1);
-        assert_se(bus_gvariant_get_alignment("(ssu)") == 4);
-        assert_se(bus_gvariant_get_alignment("a(ssu)") == 4);
-        assert_se(bus_gvariant_get_alignment("(u)") == 4);
-        assert_se(bus_gvariant_get_alignment("(uuuuy)") == 4);
-        assert_se(bus_gvariant_get_alignment("(uusuuy)") == 4);
-        assert_se(bus_gvariant_get_alignment("a{ss}") == 1);
-        assert_se(bus_gvariant_get_alignment("((u)yyy(b(iiii)))") == 4);
-        assert_se(bus_gvariant_get_alignment("((u)yyy(b(iiivi)))") == 8);
-        assert_se(bus_gvariant_get_alignment("((b)(t))") == 8);
-        assert_se(bus_gvariant_get_alignment("((b)(b)(t))") == 8);
-        assert_se(bus_gvariant_get_alignment("(bt)") == 8);
-        assert_se(bus_gvariant_get_alignment("((t)(b))") == 8);
-        assert_se(bus_gvariant_get_alignment("(tb)") == 8);
-        assert_se(bus_gvariant_get_alignment("((b)(b))") == 1);
-        assert_se(bus_gvariant_get_alignment("((t)(t))") == 8);
-}
-
-static int test_marshal(void) {
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *n = NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        _cleanup_free_ void *blob = NULL;
-        size_t sz;
-        int r;
-
-        r = sd_bus_open_user(&bus);
-        if (r < 0)
-                r = sd_bus_open_system(&bus);
-        if (r < 0)
-                return log_tests_skipped_errno(r, "Failed to connect to bus");
-
-        bus->message_version = 2; /* dirty hack to enable gvariant */
-
-        r = sd_bus_message_new_method_call(bus, &m, "a.service.name",
-                                           "/an/object/path/which/is/really/really/long/so/that/we/hit/the/eight/bit/boundary/by/quite/some/margin/to/test/this/stuff/that/it/really/works",
-                                           "an.interface.name", "AMethodName");
-        assert_se(r >= 0);
-
-        assert_cc(sizeof(struct bus_header) == 16);
-
-        assert_se(sd_bus_message_append(m,
-                                        "a(usv)", 3,
-                                        4711, "first-string-parameter", "(st)", "X", (uint64_t) 1111,
-                                        4712, "second-string-parameter", "(a(si))", 2, "Y", 5, "Z", 6,
-                                        4713, "third-string-parameter", "(uu)", 1, 2) >= 0);
-
-        assert_se(sd_bus_message_seal(m, 4711, 0) >= 0);
-
-#if HAVE_GLIB
-        {
-                GVariant *v;
-                char *t;
-
-#if !defined(GLIB_VERSION_2_36)
-                g_type_init();
-#endif
-
-                v = g_variant_new_from_data(G_VARIANT_TYPE("(yyyyuta{tv})"), m->header, sizeof(struct bus_header) + m->fields_size, false, NULL, NULL);
-                assert_se(g_variant_is_normal_form(v));
-                t = g_variant_print(v, TRUE);
-                printf("%s\n", t);
-                g_free(t);
-                g_variant_unref(v);
-
-                v = g_variant_new_from_data(G_VARIANT_TYPE("(a(usv))"), m->body.data, m->user_body_size, false, NULL, NULL);
-                assert_se(g_variant_is_normal_form(v));
-                t = g_variant_print(v, TRUE);
-                printf("%s\n", t);
-                g_free(t);
-                g_variant_unref(v);
-        }
-#endif
-
-        assert_se(sd_bus_message_dump(m, NULL, SD_BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
-
-        assert_se(bus_message_get_blob(m, &blob, &sz) >= 0);
-
-#if HAVE_GLIB
-        {
-                GVariant *v;
-                char *t;
-
-                v = g_variant_new_from_data(G_VARIANT_TYPE("(yyyyuta{tv}v)"), blob, sz, false, NULL, NULL);
-                assert_se(g_variant_is_normal_form(v));
-                t = g_variant_print(v, TRUE);
-                printf("%s\n", t);
-                g_free(t);
-                g_variant_unref(v);
-        }
-#endif
-
-        assert_se(bus_message_from_malloc(bus, blob, sz, NULL, 0, NULL, &n) >= 0);
-        blob = NULL;
-
-        assert_se(sd_bus_message_dump(n, NULL, SD_BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
-
-        m = sd_bus_message_unref(m);
-
-        assert_se(sd_bus_message_new_method_call(bus, &m, "a.x", "/a/x", "a.x", "Ax") >= 0);
-
-        assert_se(sd_bus_message_append(m, "as", 0) >= 0);
-
-        assert_se(sd_bus_message_seal(m, 4712, 0) >= 0);
-        assert_se(sd_bus_message_dump(m, NULL, SD_BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
-
-        return EXIT_SUCCESS;
-}
-
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_bus_gvariant_is_fixed_size();
-        test_bus_gvariant_get_size();
-        test_bus_gvariant_get_alignment();
-
-        return test_marshal();
-}
diff --git a/src/libsystemd/sd-bus/test-bus-introspect.c b/src/libsystemd/sd-bus/test-bus-introspect.c
index fb247c4..3c026ae 100644
--- a/src/libsystemd/sd-bus/test-bus-introspect.c
+++ b/src/libsystemd/sd-bus/test-bus-introspect.c
@@ -6,7 +6,7 @@
 
 #include "test-vtable-data.h"
 
-static void test_manual_introspection(const sd_bus_vtable vtable[]) {
+static void test_manual_introspection_one(const sd_bus_vtable vtable[]) {
         struct introspect intro = {};
         _cleanup_free_ char *s = NULL;
 
@@ -23,13 +23,11 @@
         fputs("\n", stdout);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_manual_introspection(test_vtable_1);
-        test_manual_introspection(test_vtable_2);
-        test_manual_introspection(test_vtable_deprecated);
-        test_manual_introspection((const sd_bus_vtable *) vtable_format_221);
-
-        return 0;
+TEST(manual_introspection) {
+        test_manual_introspection_one(test_vtable_1);
+        test_manual_introspection_one(test_vtable_2);
+        test_manual_introspection_one(test_vtable_deprecated);
+        test_manual_introspection_one((const sd_bus_vtable *) vtable_format_221);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/libsystemd/sd-bus/test-bus-marshal.c b/src/libsystemd/sd-bus/test-bus-marshal.c
index 9feeaf4..3361b06 100644
--- a/src/libsystemd/sd-bus/test-bus-marshal.c
+++ b/src/libsystemd/sd-bus/test-bus-marshal.c
@@ -23,7 +23,6 @@
 #include "fileio.h"
 #include "log.h"
 #include "tests.h"
-#include "util.h"
 
 static void test_bus_path_encode_unique(void) {
         _cleanup_free_ char *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL;
@@ -36,7 +35,7 @@
 }
 
 static void test_bus_path_encode(void) {
-        _cleanup_free_ char *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL, *f = NULL;
+        _cleanup_free_ char *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL, *f = NULL, *g = NULL;
 
         assert_se(sd_bus_path_encode("/foo/bar", "waldo", &a) >= 0 && streq(a, "/foo/bar/waldo"));
         assert_se(sd_bus_path_decode(a, "/waldo", &b) == 0 && b == NULL);
@@ -50,6 +49,8 @@
 
         assert_se(sd_bus_path_encode("/foo/bar", "foo.bar", &e) >= 0 && streq(e, "/foo/bar/foo_2ebar"));
         assert_se(sd_bus_path_decode(e, "/foo/bar", &f) > 0 && streq(f, "foo.bar"));
+
+        assert_se(sd_bus_path_decode("/waldo", "/waldo", &g) > 0 && streq(g, ""));
 }
 
 static void test_bus_path_encode_many(void) {
diff --git a/src/libsystemd/sd-bus/test-bus-objects.c b/src/libsystemd/sd-bus/test-bus-objects.c
index a71add4..0d4a6db 100644
--- a/src/libsystemd/sd-bus/test-bus-objects.c
+++ b/src/libsystemd/sd-bus/test-bus-objects.c
@@ -12,7 +12,6 @@
 #include "log.h"
 #include "macro.h"
 #include "strv.h"
-#include "util.h"
 
 struct context {
         int fds[2];
@@ -165,6 +164,12 @@
         return 1;
 }
 
+static int emit_object_with_manager_added(sd_bus_message *m, void *userdata, sd_bus_error *error) {
+        assert_se(sd_bus_emit_object_added(sd_bus_message_get_bus(m), "/value/a") >= 0);
+
+        return ASSERT_SE_NONNEG(sd_bus_reply_method_return(m, NULL));
+}
+
 static int emit_object_removed(sd_bus_message *m, void *userdata, sd_bus_error *error) {
         int r;
 
@@ -187,6 +192,7 @@
         SD_BUS_METHOD("EmitInterfacesAdded", NULL, NULL, emit_interfaces_added, 0),
         SD_BUS_METHOD("EmitInterfacesRemoved", NULL, NULL, emit_interfaces_removed, 0),
         SD_BUS_METHOD("EmitObjectAdded", NULL, NULL, emit_object_added, 0),
+        SD_BUS_METHOD("EmitObjectWithManagerAdded", NULL, NULL, emit_object_with_manager_added, 0),
         SD_BUS_METHOD("EmitObjectRemoved", NULL, NULL, emit_object_removed, 0),
         SD_BUS_VTABLE_END
 };
@@ -219,6 +225,19 @@
         return 1;
 }
 
+static int enumerator3_callback(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
+        _cleanup_strv_free_ char **v = NULL;
+
+        if (!object_path_startswith("/value/b", path))
+                return 1;
+
+        for (unsigned i = 0; i < 30; i++)
+                assert_se(strv_extendf(&v, "/value/b/%u", i) >= 0);
+
+        *nodes = TAKE_PTR(v);
+        return 1;
+}
+
 static void *server(void *p) {
         struct context *c = p;
         sd_bus *bus = NULL;
@@ -238,6 +257,7 @@
         assert_se(sd_bus_add_fallback_vtable(bus, NULL, "/value", "org.freedesktop.systemd.ValueTest", vtable2, NULL, UINT_TO_PTR(20)) >= 0);
         assert_se(sd_bus_add_node_enumerator(bus, NULL, "/value", enumerator_callback, NULL) >= 0);
         assert_se(sd_bus_add_node_enumerator(bus, NULL, "/value/a", enumerator2_callback, NULL) >= 0);
+        assert_se(sd_bus_add_node_enumerator(bus, NULL, "/value/b", enumerator3_callback, NULL) >= 0);
         assert_se(sd_bus_add_object_manager(bus, NULL, "/value") >= 0);
         assert_se(sd_bus_add_object_manager(bus, NULL, "/value/a") >= 0);
 
@@ -280,6 +300,7 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_strv_free_ char **lines = NULL;
         const char *s;
         int r;
 
@@ -400,6 +421,30 @@
         assert_se(r >= 0);
         fputs(s, stdout);
 
+        assert_se(lines = strv_split_newlines(s));
+        assert_se(strv_contains(lines, " <node name=\"x\"/>"));
+        assert_se(strv_contains(lines, " <node name=\"y\"/>"));
+        assert_se(strv_contains(lines, " <node name=\"z\"/>"));
+        lines = strv_free(lines);
+
+        reply = sd_bus_message_unref(reply);
+
+        r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/value/b", "org.freedesktop.DBus.Introspectable", "Introspect", &error, &reply, NULL);
+        assert_se(r >= 0);
+
+        r = sd_bus_message_read(reply, "s", &s);
+        assert_se(r >= 0);
+        fputs(s, stdout);
+
+        assert_se(lines = strv_split_newlines(s));
+        for (unsigned i = 0; i < 30; i++) {
+                _cleanup_free_ char *n = NULL;
+
+                assert_se(asprintf(&n, " <node name=\"%u\"/>", i) >= 0);
+                assert_se(strv_contains(lines, n));
+        }
+        lines = strv_free(lines);
+
         reply = sd_bus_message_unref(reply);
 
         r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/foo", "org.freedesktop.DBus.Properties", "GetAll", &error, &reply, "s", NULL);
@@ -424,6 +469,41 @@
 
         sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
 
+        /* Check that /value/b does not have ObjectManager interface but /value/a does */
+        assert_se(sd_bus_message_rewind(reply, 1) > 0);
+        assert_se(sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "{oa{sa{sv}}}") > 0);
+        while (ASSERT_SE_NONNEG(sd_bus_message_enter_container(reply, SD_BUS_TYPE_DICT_ENTRY, "oa{sa{sv}}")) > 0) {
+                const char *path = NULL;
+                assert_se(sd_bus_message_read_basic(reply, 'o', &path) > 0);
+                if (STR_IN_SET(path, "/value/b", "/value/a")) {
+                        /* Check that there is no object manager interface here */
+                        bool found_object_manager_interface = false;
+                        assert_se(sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "{sa{sv}}") > 0);
+                        while (ASSERT_SE_NONNEG(sd_bus_message_enter_container(reply, SD_BUS_TYPE_DICT_ENTRY, "sa{sv}")) > 0) {
+                                const char *interface_name = NULL;
+                                assert_se(sd_bus_message_read_basic(reply, 's', &interface_name) > 0);
+
+                                if (streq(interface_name, "org.freedesktop.DBus.ObjectManager")) {
+                                        assert_se(!streq(path, "/value/b"));
+                                        found_object_manager_interface = true;
+                                }
+
+                                assert_se(sd_bus_message_skip(reply, "a{sv}") >= 0);
+                                assert_se(sd_bus_message_exit_container(reply) >= 0);
+                        }
+                        assert_se(sd_bus_message_exit_container(reply) >= 0);
+
+                        if (streq(path, "/value/a")) {
+                                /* ObjectManager must be here */
+                                assert_se(found_object_manager_interface);
+                        }
+
+                } else
+                        assert_se(sd_bus_message_skip(reply, "a{sa{sv}}") >= 0);
+
+                assert_se(sd_bus_message_exit_container(reply) >= 0);
+        }
+
         reply = sd_bus_message_unref(reply);
 
         r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/value/a", "org.freedesktop.systemd.ValueTest", "NotifyTest", &error, NULL, NULL);
@@ -479,6 +559,54 @@
         assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.ObjectManager", "InterfacesAdded"));
         sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
 
+        /* Check if /value/a/x does not have org.freedesktop.DBus.ObjectManager */
+        assert_se(sd_bus_message_rewind(reply, 1) >= 0);
+        const char* should_be_value_a_x = NULL;
+        assert_se(sd_bus_message_read_basic(reply, 'o', &should_be_value_a_x) > 0);
+        assert_se(streq(should_be_value_a_x, "/value/a/x"));
+        assert_se(sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "{sa{sv}}") > 0);
+        while (ASSERT_SE_NONNEG(sd_bus_message_enter_container(reply, SD_BUS_TYPE_DICT_ENTRY, "sa{sv}")) > 0) {
+                const char* interface_name = NULL;
+                assert_se(sd_bus_message_read_basic(reply, 's', &interface_name) > 0);
+
+                assert(!streq(interface_name, "org.freedesktop.DBus.ObjectManager"));
+
+                assert_se(sd_bus_message_skip(reply, "a{sv}") >= 0);
+
+                assert_se(sd_bus_message_exit_container(reply) >= 0);
+        }
+
+        reply = sd_bus_message_unref(reply);
+
+        assert_se(sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/foo", "org.freedesktop.systemd.test", "EmitObjectWithManagerAdded", &error, NULL, NULL) >= 0);
+
+        assert_se(sd_bus_process(bus, &reply) > 0);
+
+        assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.ObjectManager", "InterfacesAdded"));
+        sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
+
+        /* Check if /value/a has org.freedesktop.DBus.ObjectManager */
+        assert_se(sd_bus_message_rewind(reply, 1) >= 0);
+        const char* should_be_value_a = NULL;
+        bool found_object_manager = false;
+        assert_se(sd_bus_message_read_basic(reply, 'o', &should_be_value_a) > 0);
+        assert_se(streq(should_be_value_a, "/value/a"));
+        assert_se(sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "{sa{sv}}") > 0);
+        while (ASSERT_SE_NONNEG(sd_bus_message_enter_container(reply, SD_BUS_TYPE_DICT_ENTRY, "sa{sv}")) > 0) {
+                const char* interface_name = NULL;
+                assert_se(sd_bus_message_read_basic(reply, 's', &interface_name));
+
+                if (streq(interface_name, "org.freedesktop.DBus.ObjectManager")) {
+                        found_object_manager = true;
+                        break;
+                }
+
+                assert_se(sd_bus_message_skip(reply, "a{sv}") >= 0);
+
+                assert_se(sd_bus_message_exit_container(reply) >= 0);
+        }
+        assert_se(found_object_manager);
+
         reply = sd_bus_message_unref(reply);
 
         r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/foo", "org.freedesktop.systemd.test", "EmitObjectRemoved", &error, NULL, NULL);
@@ -490,6 +618,18 @@
         assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.ObjectManager", "InterfacesRemoved"));
         sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
 
+        /* Check if /value/a/x does not have org.freedesktop.DBus.ObjectManager */
+        assert_se(sd_bus_message_rewind(reply, 1) >= 0);
+        should_be_value_a_x = NULL;
+        assert_se(sd_bus_message_read_basic(reply, 'o', &should_be_value_a_x) > 0);
+        assert_se(streq(should_be_value_a_x, "/value/a/x"));
+        assert_se(sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "s") > 0);
+        const char* deleted_interface_name = NULL;
+        while (ASSERT_SE_NONNEG(sd_bus_message_read_basic(reply, 's', &deleted_interface_name)) > 0) {
+                assert(!streq(deleted_interface_name, "org.freedesktop.DBus.ObjectManager"));
+        }
+        assert_se(sd_bus_message_exit_container(reply) >= 0);
+
         reply = sd_bus_message_unref(reply);
 
         r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/foo", "org.freedesktop.systemd.test", "Exit", &error, NULL, NULL);
diff --git a/src/libsystemd/sd-bus/test-bus-signature.c b/src/libsystemd/sd-bus/test-bus-signature.c
index ea7efe6..ba94804 100644
--- a/src/libsystemd/sd-bus/test-bus-signature.c
+++ b/src/libsystemd/sd-bus/test-bus-signature.c
@@ -121,7 +121,7 @@
 
         OBJECT_PATH_FOREACH_PREFIX(prefix, "/") {
                 log_info("<%s>", prefix);
-                assert_not_reached("???");
+                assert_not_reached();
         }
 
         r = 0;
diff --git a/src/libsystemd/sd-bus/test-bus-track.c b/src/libsystemd/sd-bus/test-bus-track.c
index 64aa88b..5604e84 100644
--- a/src/libsystemd/sd-bus/test-bus-track.c
+++ b/src/libsystemd/sd-bus/test-bus-track.c
@@ -10,6 +10,7 @@
 
 static bool track_cb_called_x = false;
 static bool track_cb_called_y = false;
+static bool track_destroy_called_z = false;
 
 static int track_cb_x(sd_bus_track *t, void *userdata) {
 
@@ -26,7 +27,6 @@
 }
 
 static int track_cb_y(sd_bus_track *t, void *userdata) {
-        int r;
 
         log_error("TRACK CB Y");
 
@@ -35,15 +35,22 @@
 
         /* We got disconnected, let's close everything */
 
-        r = sd_event_exit(sd_bus_get_event(sd_bus_track_get_bus(t)), EXIT_SUCCESS);
-        assert_se(r >= 0);
+        assert_se(sd_event_exit(sd_bus_get_event(sd_bus_track_get_bus(t)), EXIT_SUCCESS) >= 0);
 
         return 0;
 }
 
+static int track_cb_z(sd_bus_track *t, void *userdata) {
+        assert_not_reached();
+}
+
+static void track_destroy_z(void *userdata) {
+        track_destroy_called_z = true;
+}
+
 int main(int argc, char *argv[]) {
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
-        _cleanup_(sd_bus_track_unrefp) sd_bus_track *x = NULL, *y = NULL;
+        _cleanup_(sd_bus_track_unrefp) sd_bus_track *x = NULL, *y = NULL, *z = NULL;
         _cleanup_(sd_bus_unrefp) sd_bus *a = NULL, *b = NULL;
         bool use_system_bus = false;
         const char *unique;
@@ -51,8 +58,7 @@
 
         test_setup_logging(LOG_INFO);
 
-        r = sd_event_default(&event);
-        assert_se(r >= 0);
+        assert_se(sd_event_default(&event) >= 0);
 
         r = sd_bus_open_user(&a);
         if (IN_SET(r, -ECONNREFUSED, -ENOENT, -ENOMEDIUM)) {
@@ -63,43 +69,80 @@
         }
         assert_se(r >= 0);
 
-        r = sd_bus_attach_event(a, event, SD_EVENT_PRIORITY_NORMAL);
-        assert_se(r >= 0);
+        assert_se(sd_bus_attach_event(a, event, SD_EVENT_PRIORITY_NORMAL) >= 0);
 
         if (use_system_bus)
-                r = sd_bus_open_system(&b);
+                assert_se(sd_bus_open_system(&b) >= 0);
         else
-                r = sd_bus_open_user(&b);
-        assert_se(r >= 0);
+                assert_se(sd_bus_open_user(&b) >= 0);
 
-        r = sd_bus_attach_event(b, event, SD_EVENT_PRIORITY_NORMAL);
-        assert_se(r >= 0);
+        assert_se(sd_bus_attach_event(b, event, SD_EVENT_PRIORITY_NORMAL) >= 0);
 
         /* Watch b's name from a */
-        r = sd_bus_track_new(a, &x, track_cb_x, NULL);
-        assert_se(r >= 0);
+        assert_se(sd_bus_track_new(a, &x, track_cb_x, NULL) >= 0);
 
-        r = sd_bus_get_unique_name(b, &unique);
-        assert_se(r >= 0);
+        assert_se(sd_bus_get_unique_name(b, &unique) >= 0);
 
-        r = sd_bus_track_add_name(x, unique);
-        assert_se(r >= 0);
+        assert_se(sd_bus_track_add_name(x, unique) >= 0);
 
         /* Watch's a's own name from a */
-        r = sd_bus_track_new(a, &y, track_cb_y, NULL);
-        assert_se(r >= 0);
+        assert_se(sd_bus_track_new(a, &y, track_cb_y, NULL) >= 0);
 
-        r = sd_bus_get_unique_name(a, &unique);
-        assert_se(r >= 0);
+        assert_se(sd_bus_get_unique_name(a, &unique) >= 0);
 
-        r = sd_bus_track_add_name(y, unique);
-        assert_se(r >= 0);
+        assert_se(sd_bus_track_add_name(y, unique) >= 0);
+
+        /* Basic tests. */
+        assert_se(sd_bus_track_new(a, &z, track_cb_z, NULL) >= 0);
+
+        /* non-recursive case */
+        assert_se(sd_bus_track_set_recursive(z, false) >= 0);
+        assert_se(sd_bus_track_get_recursive(z) == 0);
+        assert_se(!sd_bus_track_contains(z, unique));
+        assert_se(sd_bus_track_count_name(z, unique) == 0);
+        assert_se(sd_bus_track_remove_name(z, unique) == 0);
+        assert_se(sd_bus_track_add_name(z, unique) >= 0);
+        assert_se(sd_bus_track_add_name(z, unique) >= 0);
+        assert_se(sd_bus_track_add_name(z, unique) >= 0);
+        assert_se(sd_bus_track_set_recursive(z, true) == -EBUSY);
+        assert_se(sd_bus_track_contains(z, unique));
+        assert_se(sd_bus_track_count_name(z, unique) == 1);
+        assert_se(sd_bus_track_remove_name(z, unique) == 1);
+        assert_se(!sd_bus_track_contains(z, unique));
+        assert_se(sd_bus_track_count_name(z, unique) == 0);
+        assert_se(sd_bus_track_remove_name(z, unique) == 0);
+
+        /* recursive case */
+        assert_se(sd_bus_track_set_recursive(z, true) >= 0);
+        assert_se(sd_bus_track_get_recursive(z) == 1);
+        assert_se(!sd_bus_track_contains(z, unique));
+        assert_se(sd_bus_track_count_name(z, unique) == 0);
+        assert_se(sd_bus_track_remove_name(z, unique) == 0);
+        assert_se(sd_bus_track_add_name(z, unique) >= 0);
+        assert_se(sd_bus_track_add_name(z, unique) >= 0);
+        assert_se(sd_bus_track_add_name(z, unique) >= 0);
+        assert_se(sd_bus_track_set_recursive(z, false) == -EBUSY);
+        assert_se(sd_bus_track_contains(z, unique));
+        assert_se(sd_bus_track_count_name(z, unique) == 3);
+        assert_se(sd_bus_track_remove_name(z, unique) == 1);
+        assert_se(sd_bus_track_contains(z, unique));
+        assert_se(sd_bus_track_count_name(z, unique) == 2);
+        assert_se(sd_bus_track_remove_name(z, unique) == 1);
+        assert_se(sd_bus_track_contains(z, unique));
+        assert_se(sd_bus_track_count_name(z, unique) == 1);
+        assert_se(sd_bus_track_remove_name(z, unique) == 1);
+        assert_se(!sd_bus_track_contains(z, unique));
+        assert_se(sd_bus_track_count_name(z, unique) == 0);
+        assert_se(sd_bus_track_remove_name(z, unique) == 0);
+
+        assert_se(sd_bus_track_set_destroy_callback(z, track_destroy_z) >= 0);
+        z = sd_bus_track_unref(z);
+        assert_se(track_destroy_called_z);
 
         /* Now make b's name disappear */
         sd_bus_close(b);
 
-        r = sd_event_loop(event);
-        assert_se(r >= 0);
+        assert_se(sd_event_loop(event) >= 0);
 
         assert_se(track_cb_called_x);
         assert_se(track_cb_called_y);
diff --git a/src/libsystemd/sd-bus/test-bus-watch-bind.c b/src/libsystemd/sd-bus/test-bus-watch-bind.c
index fdc8772..987d151 100644
--- a/src/libsystemd/sd-bus/test-bus-watch-bind.c
+++ b/src/libsystemd/sd-bus/test-bus-watch-bind.c
@@ -40,7 +40,7 @@
 
 static void* thread_server(void *p) {
         _cleanup_free_ char *suffixed = NULL, *suffixed2 = NULL, *d = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         union sockaddr_union u;
         const char *path = p;
         int r;
@@ -53,8 +53,7 @@
         assert_se(mkdir_parents(path, 0755) >= 0);
         (void) usleep(100 * USEC_PER_MSEC);
 
-        d = dirname_malloc(path);
-        assert_se(d);
+        assert_se(path_extract_directory(path, &d) >= 0);
         assert_se(asprintf(&suffixed, "%s.%" PRIx64, d, random_u64()) >= 0);
         assert_se(rename(d, suffixed) >= 0);
         (void) usleep(100 * USEC_PER_MSEC);
diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c
index b373c17..8dc11ae 100644
--- a/src/libsystemd/sd-daemon/sd-daemon.c
+++ b/src/libsystemd/sd-daemon/sd-daemon.c
@@ -23,9 +23,9 @@
 #include "path-util.h"
 #include "process-util.h"
 #include "socket-util.h"
+#include "stat-util.h"
 #include "strv.h"
 #include "time-util.h"
-#include "util.h"
 
 #define SNDBUF_SIZE (8*1024*1024)
 
@@ -150,9 +150,7 @@
                         return -errno;
                 }
 
-                return
-                        st_path.st_dev == st_fd.st_dev &&
-                        st_path.st_ino == st_fd.st_ino;
+                return stat_inode_same(&st_path, &st_fd);
         }
 
         return 1;
@@ -181,9 +179,7 @@
                 }
 
                 if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode))
-                        return
-                                st_path.st_dev == st_fd.st_dev &&
-                                st_path.st_ino == st_fd.st_ino;
+                        return stat_inode_same(&st_path, &st_fd);
                 else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode))
                         return st_path.st_rdev == st_fd.st_rdev;
                 else
@@ -193,7 +189,7 @@
         return 1;
 }
 
-static int sd_is_socket_internal(int fd, int type, int listening) {
+static int is_socket_internal(int fd, int type, int listening) {
         struct stat st_fd;
 
         assert_return(fd >= 0, -EBADF);
@@ -242,7 +238,7 @@
         assert_return(fd >= 0, -EBADF);
         assert_return(family >= 0, -EINVAL);
 
-        r = sd_is_socket_internal(fd, type, listening);
+        r = is_socket_internal(fd, type, listening);
         if (r <= 0)
                 return r;
 
@@ -270,7 +266,7 @@
         assert_return(fd >= 0, -EBADF);
         assert_return(IN_SET(family, 0, AF_INET, AF_INET6), -EINVAL);
 
-        r = sd_is_socket_internal(fd, type, listening);
+        r = is_socket_internal(fd, type, listening);
         if (r <= 0)
                 return r;
 
@@ -310,7 +306,7 @@
         assert_return(addr_len >= sizeof(sa_family_t), -ENOBUFS);
         assert_return(IN_SET(addr->sa_family, AF_INET, AF_INET6), -EPFNOSUPPORT);
 
-        r = sd_is_socket_internal(fd, type, listening);
+        r = is_socket_internal(fd, type, listening);
         if (r <= 0)
                 return r;
 
@@ -365,7 +361,7 @@
 
         assert_return(fd >= 0, -EBADF);
 
-        r = sd_is_socket_internal(fd, type, listening);
+        r = is_socket_internal(fd, type, listening);
         if (r <= 0)
                 return r;
 
@@ -415,7 +411,7 @@
         }
 
         if (path) {
-                char fpath[PATH_MAX];
+                _cleanup_free_ char *fpath = NULL;
                 struct stat a, b;
 
                 assert_return(path_is_absolute(path), -EINVAL);
@@ -423,20 +419,37 @@
                 if (fstat(fd, &a) < 0)
                         return -errno;
 
-                strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12);
-                fpath[sizeof(fpath)-1] = 0;
+                fpath = path_join("/dev/mqueue", path);
+                if (!fpath)
+                        return -ENOMEM;
 
                 if (stat(fpath, &b) < 0)
                         return -errno;
 
-                if (a.st_dev != b.st_dev ||
-                    a.st_ino != b.st_ino)
+                if (!stat_inode_same(&a, &b))
                         return 0;
         }
 
         return 1;
 }
 
+static int vsock_bind_privileged_port(int fd) {
+        union sockaddr_union sa = {
+                .vm.svm_family = AF_VSOCK,
+                .vm.svm_cid = VMADDR_CID_ANY,
+                .vm.svm_port = 1023,
+        };
+        int r;
+
+        assert(fd >= 0);
+
+        do
+                r = RET_NERRNO(bind(fd, &sa.sa, sizeof(sa.vm)));
+        while (r == -EADDRINUSE && --sa.vm.svm_port > 0);
+
+        return r;
+}
+
 _public_ int sd_pid_notify_with_fds(
                 pid_t pid,
                 int unset_environment,
@@ -444,14 +457,14 @@
                 const int *fds,
                 unsigned n_fds) {
 
-        union sockaddr_union sockaddr;
+        SocketAddress address;
         struct iovec iovec;
         struct msghdr msghdr = {
                 .msg_iov = &iovec,
                 .msg_iovlen = 1,
-                .msg_name = &sockaddr,
+                .msg_name = &address.sockaddr,
         };
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct cmsghdr *cmsg = NULL;
         const char *e;
         bool send_ucred;
@@ -471,17 +484,53 @@
         if (!e)
                 return 0;
 
-        r = sockaddr_un_set_path(&sockaddr.un, e);
+        /* Allow AF_UNIX and AF_VSOCK, reject the rest. */
+        r = socket_address_parse_unix(&address, e);
+        if (r == -EPROTO)
+                r = socket_address_parse_vsock(&address, e);
         if (r < 0)
                 goto finish;
-        msghdr.msg_namelen = r;
+        msghdr.msg_namelen = address.size;
 
-        fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
-        if (fd < 0) {
-                r = -errno;
+        /* If we didn't get an address (which is a normal pattern when specifying VSOCK tuples) error out,
+         * we always require a specific CID. */
+        if (address.sockaddr.vm.svm_family == AF_VSOCK && address.sockaddr.vm.svm_cid == VMADDR_CID_ANY) {
+                r = -EINVAL;
                 goto finish;
         }
 
+        /* At the time of writing QEMU does not yet support AF_VSOCK + SOCK_DGRAM and returns
+         * ENODEV. Fallback to SOCK_SEQPACKET in that case. */
+        fd = socket(address.sockaddr.sa.sa_family, SOCK_DGRAM|SOCK_CLOEXEC, 0);
+        if (fd < 0) {
+                if (!(ERRNO_IS_NOT_SUPPORTED(errno) || errno == ENODEV) || address.sockaddr.sa.sa_family != AF_VSOCK) {
+                        r = -errno;
+                        goto finish;
+                }
+
+                fd = socket(address.sockaddr.sa.sa_family, SOCK_SEQPACKET|SOCK_CLOEXEC, 0);
+                if (fd < 0) {
+                        r = -errno;
+                        goto finish;
+                }
+
+                r = vsock_bind_privileged_port(fd);
+                if (r < 0 && !ERRNO_IS_PRIVILEGE(r))
+                        goto finish;
+
+                if (connect(fd, &address.sockaddr.sa, address.size) < 0) {
+                        r = -errno;
+                        goto finish;
+                }
+
+                msghdr.msg_name = NULL;
+                msghdr.msg_namelen = 0;
+        } else if (address.sockaddr.sa.sa_family == AF_VSOCK) {
+                r = vsock_bind_privileged_port(fd);
+                if (r < 0 && !ERRNO_IS_PRIVILEGE(r))
+                        goto finish;
+        }
+
         (void) fd_inc_sndbuf(fd, SNDBUF_SIZE);
 
         iovec = IOVEC_MAKE_STRING(state);
@@ -553,7 +602,7 @@
 }
 
 _public_ int sd_notify_barrier(int unset_environment, uint64_t timeout) {
-        _cleanup_close_pair_ int pipe_fd[2] = { -1, -1 };
+        _cleanup_close_pair_ int pipe_fd[2] = PIPE_EBADF;
         int r;
 
         if (pipe2(pipe_fd, O_CLOEXEC) < 0)
@@ -644,7 +693,7 @@
         r = safe_atou64(s, &u);
         if (r < 0)
                 goto finish;
-        if (u <= 0 || u >= USEC_INFINITY) {
+        if (!timestamp_is_set(u)) {
                 r = -EINVAL;
                 goto finish;
         }
diff --git a/src/libsystemd/sd-device/device-enumerator-private.h b/src/libsystemd/sd-device/device-enumerator-private.h
index 9c6437d..cf62fab 100644
--- a/src/libsystemd/sd-device/device-enumerator-private.h
+++ b/src/libsystemd/sd-device/device-enumerator-private.h
@@ -1,13 +1,27 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <stdbool.h>
+
 #include "sd-device.h"
 
-int device_enumerator_scan_devices(sd_device_enumerator *enumeartor);
-int device_enumerator_scan_subsystems(sd_device_enumerator *enumeartor);
+typedef enum MatchInitializedType {
+        MATCH_INITIALIZED_NO,     /* only devices without a db entry */
+        MATCH_INITIALIZED_YES,    /* only devices with a db entry */
+        MATCH_INITIALIZED_ALL,    /* all devices */
+        MATCH_INITIALIZED_COMPAT, /* only devices that have no devnode/ifindex or have a db entry */
+        _MATCH_INITIALIZED_MAX,
+        _MATCH_INITIALIZED_INVALID = -EINVAL,
+} MatchInitializedType;
+
+int device_enumerator_scan_devices(sd_device_enumerator *enumerator);
+int device_enumerator_scan_subsystems(sd_device_enumerator *enumerator);
+int device_enumerator_scan_devices_and_subsystems(sd_device_enumerator *enumerator);
 int device_enumerator_add_device(sd_device_enumerator *enumerator, sd_device *device);
-int device_enumerator_add_match_is_initialized(sd_device_enumerator *enumerator);
+int device_enumerator_add_parent_devices(sd_device_enumerator *enumerator, sd_device *device);
+int device_enumerator_add_match_is_initialized(sd_device_enumerator *enumerator, MatchInitializedType type);
 int device_enumerator_add_match_parent_incremental(sd_device_enumerator *enumerator, sd_device *parent);
+int device_enumerator_add_prioritized_subsystem(sd_device_enumerator *enumerator, const char *subsystem);
 sd_device *device_enumerator_get_first(sd_device_enumerator *enumerator);
 sd_device *device_enumerator_get_next(sd_device_enumerator *enumerator);
 sd_device **device_enumerator_get_devices(sd_device_enumerator *enumerator, size_t *ret_n_devices);
diff --git a/src/libsystemd/sd-device/device-enumerator.c b/src/libsystemd/sd-device/device-enumerator.c
index 3ae80ab..a583a37 100644
--- a/src/libsystemd/sd-device/device-enumerator.c
+++ b/src/libsystemd/sd-device/device-enumerator.c
@@ -7,6 +7,7 @@
 
 #include "alloc-util.h"
 #include "device-enumerator-private.h"
+#include "device-filter.h"
 #include "device-util.h"
 #include "dirent-util.h"
 #include "fd-util.h"
@@ -15,11 +16,10 @@
 #include "string-util.h"
 #include "strv.h"
 
-#define DEVICE_ENUMERATE_MAX_DEPTH 256
-
 typedef enum DeviceEnumerationType {
         DEVICE_ENUMERATION_TYPE_DEVICES,
         DEVICE_ENUMERATION_TYPE_SUBSYSTEMS,
+        DEVICE_ENUMERATION_TYPE_ALL,
         _DEVICE_ENUMERATION_TYPE_MAX,
         _DEVICE_ENUMERATION_TYPE_INVALID = -EINVAL,
 } DeviceEnumerationType;
@@ -28,19 +28,23 @@
         unsigned n_ref;
 
         DeviceEnumerationType type;
+        Hashmap *devices_by_syspath;
         sd_device **devices;
         size_t n_devices, current_device_index;
         bool scan_uptodate;
+        bool sorted;
 
+        char **prioritized_subsystems;
         Set *match_subsystem;
         Set *nomatch_subsystem;
         Hashmap *match_sysattr;
         Hashmap *nomatch_sysattr;
         Hashmap *match_property;
         Set *match_sysname;
+        Set *nomatch_sysname;
         Set *match_tag;
         Set *match_parent;
-        bool match_allow_uninitialized;
+        MatchInitializedType match_initialized;
 };
 
 _public_ int sd_device_enumerator_new(sd_device_enumerator **ret) {
@@ -55,6 +59,7 @@
         *enumerator = (sd_device_enumerator) {
                 .n_ref = 1,
                 .type = _DEVICE_ENUMERATION_TYPE_INVALID,
+                .match_initialized = MATCH_INITIALIZED_COMPAT,
         };
 
         *ret = TAKE_PTR(enumerator);
@@ -62,19 +67,36 @@
         return 0;
 }
 
+static void device_unref_many(sd_device **devices, size_t n) {
+        assert(devices || n == 0);
+
+        for (size_t i = 0; i < n; i++)
+                sd_device_unref(devices[i]);
+}
+
+static void device_enumerator_unref_devices(sd_device_enumerator *enumerator) {
+        assert(enumerator);
+
+        hashmap_clear_with_destructor(enumerator->devices_by_syspath, sd_device_unref);
+        device_unref_many(enumerator->devices, enumerator->n_devices);
+        enumerator->devices = mfree(enumerator->devices);
+        enumerator->n_devices = 0;
+}
+
 static sd_device_enumerator *device_enumerator_free(sd_device_enumerator *enumerator) {
         assert(enumerator);
 
-        for (size_t i = 0; i < enumerator->n_devices; i++)
-                sd_device_unref(enumerator->devices[i]);
+        device_enumerator_unref_devices(enumerator);
 
-        free(enumerator->devices);
+        hashmap_free(enumerator->devices_by_syspath);
+        strv_free(enumerator->prioritized_subsystems);
         set_free(enumerator->match_subsystem);
         set_free(enumerator->nomatch_subsystem);
         hashmap_free(enumerator->match_sysattr);
         hashmap_free(enumerator->nomatch_sysattr);
         hashmap_free(enumerator->match_property);
         set_free(enumerator->match_sysname);
+        set_free(enumerator->nomatch_sysname);
         set_free(enumerator->match_tag);
         set_free(enumerator->match_parent);
 
@@ -83,6 +105,24 @@
 
 DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_device_enumerator, sd_device_enumerator, device_enumerator_free);
 
+int device_enumerator_add_prioritized_subsystem(sd_device_enumerator *enumerator, const char *subsystem) {
+        int r;
+
+        assert(enumerator);
+        assert(subsystem);
+
+        if (strv_contains(enumerator->prioritized_subsystems, subsystem))
+                return 0;
+
+        r = strv_extend(&enumerator->prioritized_subsystems, subsystem);
+        if (r < 0)
+                return r;
+
+        enumerator->scan_uptodate = false;
+
+        return 1;
+}
+
 _public_ int sd_device_enumerator_add_match_subsystem(sd_device_enumerator *enumerator, const char *subsystem, int match) {
         Set **set;
         int r;
@@ -116,9 +156,7 @@
         else
                 hashmap = &enumerator->nomatch_sysattr;
 
-        /* Do not use string_has_ops_free_free or hashmap_put_strdup() here, as this may be called
-         * multiple times with the same sysattr but different value. */
-        r = hashmap_put_strdup_full(hashmap, &trivial_hash_ops_free_free, sysattr, value);
+        r = update_match_strv(hashmap, sysattr, value, /* clear_on_null = */ true);
         if (r <= 0)
                 return r;
 
@@ -133,9 +171,22 @@
         assert_return(enumerator, -EINVAL);
         assert_return(property, -EINVAL);
 
-        /* Do not use string_has_ops_free_free or hashmap_put_strdup() here, as this may be called
-         * multiple times with the same property but different value. */
-        r = hashmap_put_strdup_full(&enumerator->match_property, &trivial_hash_ops_free_free, property, value);
+        r = update_match_strv(&enumerator->match_property, property, value, /* clear_on_null = */ false);
+        if (r <= 0)
+                return r;
+
+        enumerator->scan_uptodate = false;
+
+        return 1;
+}
+
+static int device_enumerator_add_match_sysname(sd_device_enumerator *enumerator, const char *sysname, bool match) {
+        int r;
+
+        assert_return(enumerator, -EINVAL);
+        assert_return(sysname, -EINVAL);
+
+        r = set_put_strdup(match ? &enumerator->match_sysname : &enumerator->nomatch_sysname, sysname);
         if (r <= 0)
                 return r;
 
@@ -145,18 +196,11 @@
 }
 
 _public_ int sd_device_enumerator_add_match_sysname(sd_device_enumerator *enumerator, const char *sysname) {
-        int r;
+        return device_enumerator_add_match_sysname(enumerator, sysname, true);
+}
 
-        assert_return(enumerator, -EINVAL);
-        assert_return(sysname, -EINVAL);
-
-        r = set_put_strdup(&enumerator->match_sysname, sysname);
-        if (r <= 0)
-                return r;
-
-        enumerator->scan_uptodate = false;
-
-        return 1;
+_public_ int sd_device_enumerator_add_nomatch_sysname(sd_device_enumerator *enumerator, const char *sysname) {
+        return device_enumerator_add_match_sysname(enumerator, sysname, false);
 }
 
 _public_ int sd_device_enumerator_add_match_tag(sd_device_enumerator *enumerator, const char *tag) {
@@ -206,111 +250,236 @@
 _public_ int sd_device_enumerator_allow_uninitialized(sd_device_enumerator *enumerator) {
         assert_return(enumerator, -EINVAL);
 
-        enumerator->match_allow_uninitialized = true;
+        enumerator->match_initialized = MATCH_INITIALIZED_ALL;
 
         enumerator->scan_uptodate = false;
 
         return 1;
 }
 
-int device_enumerator_add_match_is_initialized(sd_device_enumerator *enumerator) {
+int device_enumerator_add_match_is_initialized(sd_device_enumerator *enumerator, MatchInitializedType type) {
         assert_return(enumerator, -EINVAL);
+        assert_return(type >= 0 && type < _MATCH_INITIALIZED_MAX, -EINVAL);
 
-        enumerator->match_allow_uninitialized = false;
+        enumerator->match_initialized = type;
 
         enumerator->scan_uptodate = false;
 
         return 1;
 }
 
-static int device_compare(sd_device * const *_a, sd_device * const *_b) {
-        sd_device *a = *(sd_device **)_a, *b = *(sd_device **)_b;
-        const char *devpath_a, *devpath_b, *sound_a;
-        bool delay_a, delay_b;
-        int r;
+static int sound_device_compare(const char *devpath_a, const char *devpath_b) {
+        const char *sound_a, *sound_b;
+        size_t prefix_len;
 
-        assert_se(sd_device_get_devpath(a, &devpath_a) >= 0);
-        assert_se(sd_device_get_devpath(b, &devpath_b) >= 0);
+        assert(devpath_a);
+        assert(devpath_b);
+
+        /* For sound cards the control device must be enumerated last to make sure it's the final
+         * device node that gets ACLs applied. Applications rely on this fact and use ACL changes on
+         * the control node as an indicator that the ACL change of the entire sound card completed. The
+         * kernel makes this guarantee when creating those devices, and hence we should too when
+         * enumerating them. */
 
         sound_a = strstr(devpath_a, "/sound/card");
-        if (sound_a) {
-                /* For sound cards the control device must be enumerated last to
-                 * make sure it's the final device node that gets ACLs applied.
-                 * Applications rely on this fact and use ACL changes on the
-                 * control node as an indicator that the ACL change of the
-                 * entire sound card completed. The kernel makes this guarantee
-                 * when creating those devices, and hence we should too when
-                 * enumerating them. */
-                sound_a += STRLEN("/sound/card");
-                sound_a = strchr(sound_a, '/');
+        if (!sound_a)
+                return 0;
 
-                if (sound_a) {
-                        unsigned prefix_len;
+        sound_a += STRLEN("/sound/card");
+        sound_a = strchr(devpath_a, '/');
+        if (!sound_a)
+                return 0;
 
-                        prefix_len = sound_a - devpath_a;
+        prefix_len = sound_a - devpath_a;
 
-                        if (strncmp(devpath_a, devpath_b, prefix_len) == 0) {
-                                const char *sound_b;
+        if (!strneq(devpath_a, devpath_b, prefix_len))
+                return 0;
 
-                                sound_b = devpath_b + prefix_len;
+        sound_b = devpath_b + prefix_len;
 
-                                if (startswith(sound_a, "/controlC") &&
-                                    !startswith(sound_b, "/contolC"))
-                                        return 1;
+        return CMP(!!startswith(sound_a, "/controlC"),
+                   !!startswith(sound_b, "/controlC"));
+}
 
-                                if (!startswith(sound_a, "/controlC") &&
-                                    startswith(sound_b, "/controlC"))
-                                        return -1;
-                        }
-                }
-        }
+static bool devpath_is_late_block(const char *devpath) {
+        assert(devpath);
 
-        /* md and dm devices are enumerated after all other devices */
-        delay_a = strstr(devpath_a, "/block/md") || strstr(devpath_a, "/block/dm-");
-        delay_b = strstr(devpath_b, "/block/md") || strstr(devpath_b, "/block/dm-");
-        r = CMP(delay_a, delay_b);
+        return strstr(devpath, "/block/md") || strstr(devpath, "/block/dm-");
+}
+
+static int device_compare(sd_device * const *a, sd_device * const *b) {
+        const char *devpath_a, *devpath_b;
+        int r;
+
+        assert(a);
+        assert(b);
+        assert(*a);
+        assert(*b);
+
+        assert_se(sd_device_get_devpath(*(sd_device**) a, &devpath_a) >= 0);
+        assert_se(sd_device_get_devpath(*(sd_device**) b, &devpath_b) >= 0);
+
+        r = sound_device_compare(devpath_a, devpath_b);
         if (r != 0)
                 return r;
 
-        return strcmp(devpath_a, devpath_b);
+        /* md and dm devices are enumerated after all other devices */
+        r = CMP(devpath_is_late_block(devpath_a), devpath_is_late_block(devpath_b));
+        if (r != 0)
+                return r;
+
+        return path_compare(devpath_a, devpath_b);
+}
+
+static int enumerator_sort_devices(sd_device_enumerator *enumerator) {
+        size_t n_sorted = 0, n = 0;
+        sd_device **devices;
+        sd_device *device;
+        int r;
+
+        assert(enumerator);
+
+        if (enumerator->sorted)
+                return 0;
+
+        devices = new(sd_device*, hashmap_size(enumerator->devices_by_syspath));
+        if (!devices)
+                return -ENOMEM;
+
+        STRV_FOREACH(prioritized_subsystem, enumerator->prioritized_subsystems) {
+
+                for (;;) {
+                        const char *syspath;
+                        size_t m = n;
+
+                        HASHMAP_FOREACH_KEY(device, syspath, enumerator->devices_by_syspath) {
+                                _cleanup_free_ char *p = NULL;
+                                const char *subsys;
+
+                                if (sd_device_get_subsystem(device, &subsys) < 0)
+                                        continue;
+
+                                if (!streq(subsys, *prioritized_subsystem))
+                                        continue;
+
+                                devices[n++] = sd_device_ref(device);
+
+                                for (;;) {
+                                        _cleanup_free_ char *q = NULL;
+
+                                        r = path_extract_directory(p ?: syspath, &q);
+                                        if (r == -EADDRNOTAVAIL)
+                                                break;
+                                        if (r < 0)
+                                                goto failed;
+
+                                        device = hashmap_get(enumerator->devices_by_syspath, q);
+                                        if (device)
+                                                devices[n++] = sd_device_ref(device);
+
+                                        free_and_replace(p, q);
+                                }
+
+                                break;
+                        }
+
+                        /* We cannot remove multiple entries in the loop HASHMAP_FOREACH_KEY() above. */
+                        for (size_t i = m; i < n; i++) {
+                                r = sd_device_get_syspath(devices[i], &syspath);
+                                if (r < 0)
+                                        goto failed;
+
+                                assert_se(hashmap_remove(enumerator->devices_by_syspath, syspath) == devices[i]);
+                                sd_device_unref(devices[i]);
+                        }
+
+                        if (m == n)
+                                break;
+                }
+
+                typesafe_qsort(devices + n_sorted, n - n_sorted, device_compare);
+                n_sorted = n;
+        }
+
+        HASHMAP_FOREACH(device, enumerator->devices_by_syspath)
+                devices[n++] = sd_device_ref(device);
+
+        /* Move all devices back to the hashmap. Otherwise, devices added by
+         * udev_enumerate_add_syspath() -> device_enumerator_add_device() may not be listed. */
+        for (size_t i = 0; i < n_sorted; i++) {
+                const char *syspath;
+
+                r = sd_device_get_syspath(devices[i], &syspath);
+                if (r < 0)
+                        goto failed;
+
+                r = hashmap_put(enumerator->devices_by_syspath, syspath, devices[i]);
+                if (r < 0)
+                        goto failed;
+                assert(r > 0);
+
+                sd_device_ref(devices[i]);
+        }
+
+        typesafe_qsort(devices + n_sorted, n - n_sorted, device_compare);
+
+        device_unref_many(enumerator->devices, enumerator->n_devices);
+
+        enumerator->n_devices = n;
+        free_and_replace(enumerator->devices, devices);
+
+        enumerator->sorted = true;
+        return 0;
+
+failed:
+        device_unref_many(devices, n);
+        free(devices);
+        return r;
 }
 
 int device_enumerator_add_device(sd_device_enumerator *enumerator, sd_device *device) {
+        const char *syspath;
+        int r;
+
         assert_return(enumerator, -EINVAL);
         assert_return(device, -EINVAL);
 
-        if (!GREEDY_REALLOC(enumerator->devices, enumerator->n_devices + 1))
-                return -ENOMEM;
+        r = sd_device_get_syspath(device, &syspath);
+        if (r < 0)
+                return r;
 
-        enumerator->devices[enumerator->n_devices++] = sd_device_ref(device);
+        r = hashmap_ensure_put(&enumerator->devices_by_syspath, &string_hash_ops, syspath, device);
+        if (IN_SET(r, -EEXIST, 0))
+                return 0;
+        if (r < 0)
+                return r;
 
-        return 0;
+        sd_device_ref(device);
+
+        enumerator->sorted = false;
+        return 1;
 }
 
 static bool match_property(sd_device_enumerator *enumerator, sd_device *device) {
-        const char *property;
-        const char *value;
+        const char *property_pattern;
+        char * const *value_patterns;
 
         assert(enumerator);
         assert(device);
 
+        /* Unlike device_match_sysattr(), this accepts device that has at least one matching property. */
+
         if (hashmap_isempty(enumerator->match_property))
                 return true;
 
-        HASHMAP_FOREACH_KEY(value, property, enumerator->match_property) {
-                const char *property_dev, *value_dev;
+        HASHMAP_FOREACH_KEY(value_patterns, property_pattern, enumerator->match_property) {
+                const char *property, *value;
 
-                FOREACH_DEVICE_PROPERTY(device, property_dev, value_dev) {
-                        if (fnmatch(property, property_dev, 0) != 0)
+                FOREACH_DEVICE_PROPERTY(device, property, value) {
+                        if (fnmatch(property_pattern, property, 0) != 0)
                                 continue;
 
-                        if (!value && !value_dev)
-                                return true;
-
-                        if (!value || !value_dev)
-                                continue;
-
-                        if (fnmatch(value, value_dev, 0) == 0)
+                        if (strv_fnmatch(value_patterns, value))
                                 return true;
                 }
         }
@@ -332,26 +501,180 @@
 }
 
 static bool match_sysname(sd_device_enumerator *enumerator, const char *sysname) {
-        const char *sysname_match;
-
         assert(enumerator);
         assert(sysname);
 
-        if (set_isempty(enumerator->match_sysname))
-                return true;
-
-        SET_FOREACH(sysname_match, enumerator->match_sysname)
-                if (fnmatch(sysname_match, sysname, 0) == 0)
-                        return true;
-
-        return false;
+        return set_fnmatch(enumerator->match_sysname, enumerator->nomatch_sysname, sysname);
 }
 
-static int enumerator_scan_dir_and_add_devices(sd_device_enumerator *enumerator, const char *basedir, const char *subdir1, const char *subdir2) {
+static int match_initialized(sd_device_enumerator *enumerator, sd_device *device) {
+        int r;
+
+        assert(enumerator);
+        assert(device);
+
+        if (enumerator->match_initialized == MATCH_INITIALIZED_ALL)
+                return true;
+
+        r = sd_device_get_is_initialized(device);
+        if (r == -ENOENT) /* this is necessarily racey, so ignore missing devices */
+                return false;
+        if (r < 0)
+                return r;
+
+        if (enumerator->match_initialized == MATCH_INITIALIZED_COMPAT) {
+                /* only devices that have no devnode/ifindex or have a db entry are accepted. */
+                if (r > 0)
+                        return true;
+
+                if (sd_device_get_devnum(device, NULL) >= 0)
+                        return false;
+
+                if (sd_device_get_ifindex(device, NULL) >= 0)
+                        return false;
+
+                return true;
+        }
+
+        return (enumerator->match_initialized == MATCH_INITIALIZED_NO) == (r == 0);
+}
+
+static bool match_subsystem(sd_device_enumerator *enumerator, const char *subsystem) {
+        assert(enumerator);
+
+        if (!subsystem)
+                return false;
+
+        return set_fnmatch(enumerator->match_subsystem, enumerator->nomatch_subsystem, subsystem);
+}
+
+typedef enum MatchFlag {
+        MATCH_SYSNAME     = 1u << 0,
+        MATCH_SUBSYSTEM   = 1u << 1,
+        MATCH_PARENT      = 1u << 2,
+        MATCH_TAG         = 1u << 3,
+
+        MATCH_ALL         = (1u << 4) - 1,
+} MatchFlag;
+
+static int test_matches(
+                sd_device_enumerator *enumerator,
+                sd_device *device,
+                MatchFlag flags) {
+
+        int r;
+
+        assert(enumerator);
+        assert(device);
+
+        if (FLAGS_SET(flags, MATCH_SYSNAME)) {
+                const char *sysname;
+
+                r = sd_device_get_sysname(device, &sysname);
+                if (r < 0)
+                        return r;
+
+                if (!match_sysname(enumerator, sysname))
+                        return false;
+        }
+
+        if (FLAGS_SET(flags, MATCH_SUBSYSTEM)) {
+                const char *subsystem;
+
+                r = sd_device_get_subsystem(device, &subsystem);
+                if (r == -ENOENT)
+                        return false;
+                if (r < 0)
+                        return r;
+
+                if (!match_subsystem(enumerator, subsystem))
+                        return false;
+        }
+
+        if (FLAGS_SET(flags, MATCH_PARENT) &&
+            !device_match_parent(device, enumerator->match_parent, NULL))
+                return false;
+
+        if (FLAGS_SET(flags, MATCH_TAG) &&
+            !match_tag(enumerator, device))
+                return false;
+
+        r = match_initialized(enumerator, device);
+        if (r <= 0)
+                return r;
+
+        if (!match_property(enumerator, device))
+                return false;
+
+        if (!device_match_sysattr(device, enumerator->match_sysattr, enumerator->nomatch_sysattr))
+                return false;
+
+        return true;
+}
+
+static int enumerator_add_parent_devices(
+                sd_device_enumerator *enumerator,
+                sd_device *device,
+                MatchFlag flags) {
+
+        int k, r = 0;
+
+        assert(enumerator);
+        assert(device);
+
+        for (;;) {
+                k = sd_device_get_parent(device, &device);
+                if (k == -ENOENT) /* Reached the top? */
+                        break;
+                if (k < 0) {
+                        r = k;
+                        break;
+                }
+
+                k = test_matches(enumerator, device, flags);
+                if (k < 0) {
+                        r = k;
+                        break;
+                }
+                if (k == 0)
+                        continue;
+
+                k = device_enumerator_add_device(enumerator, device);
+                if (k < 0) {
+                        r = k;
+                        break;
+                }
+                if (k == 0) /* Exists already? Then no need to go further up. */
+                        break;
+        }
+
+        return r;
+}
+
+int device_enumerator_add_parent_devices(sd_device_enumerator *enumerator, sd_device *device) {
+        return enumerator_add_parent_devices(enumerator, device, MATCH_ALL & (~MATCH_PARENT));
+}
+
+static bool relevant_sysfs_subdir(const struct dirent *de) {
+        assert(de);
+
+        if (de->d_name[0] == '.')
+                return false;
+
+        /* Also filter out regular files and such, i.e. stuff that definitely isn't a kobject path. (Note
+         * that we rely on the fact that sysfs fills in d_type here, i.e. doesn't do DT_UNKNOWN) */
+        return IN_SET(de->d_type, DT_DIR, DT_LNK);
+}
+
+static int enumerator_scan_dir_and_add_devices(
+                sd_device_enumerator *enumerator,
+                const char *basedir,
+                const char *subdir1,
+                const char *subdir2) {
+
         _cleanup_closedir_ DIR *dir = NULL;
         char *path;
-        struct dirent *dent;
-        int r = 0;
+        int k, r = 0;
 
         assert(enumerator);
         assert(basedir);
@@ -365,22 +688,27 @@
                 path = strjoina(path, subdir2, "/");
 
         dir = opendir(path);
-        if (!dir)
+        if (!dir) {
+                bool ignore = errno == ENOENT;
+
                 /* this is necessarily racey, so ignore missing directories */
-                return (errno == ENOENT && (subdir1 || subdir2)) ? 0 : -errno;
+                log_debug_errno(errno,
+                                "sd-device-enumerator: Failed to open directory %s%s: %m",
+                                path, ignore ? ", ignoring" : "");
+                return ignore ? 0 : -errno;
+        }
 
-        FOREACH_DIRENT_ALL(dent, dir, return -errno) {
+        FOREACH_DIRENT_ALL(de, dir, return -errno) {
                 _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-                char syspath[strlen(path) + 1 + strlen(dent->d_name) + 1];
-                int initialized, k;
+                char syspath[strlen(path) + 1 + strlen(de->d_name) + 1];
 
-                if (dent->d_name[0] == '.')
+                if (!relevant_sysfs_subdir(de))
                         continue;
 
-                if (!match_sysname(enumerator, dent->d_name))
+                if (!match_sysname(enumerator, de->d_name))
                         continue;
 
-                (void) sprintf(syspath, "%s%s", path, dent->d_name);
+                (void) sprintf(syspath, "%s%s", path, de->d_name);
 
                 k = sd_device_new_from_syspath(&device, syspath);
                 if (k < 0) {
@@ -391,97 +719,60 @@
                         continue;
                 }
 
-                initialized = sd_device_get_is_initialized(device);
-                if (initialized < 0) {
-                        if (initialized != -ENOENT)
-                                /* this is necessarily racey, so ignore missing devices */
-                                r = initialized;
-
+                k = test_matches(enumerator, device, MATCH_ALL & (~MATCH_SYSNAME)); /* sysname is already tested. */
+                if (k <= 0) {
+                        if (k < 0)
+                                r = k;
                         continue;
                 }
 
-                /*
-                 * All devices with a device node or network interfaces
-                 * possibly need udev to adjust the device node permission
-                 * or context, or rename the interface before it can be
-                 * reliably used from other processes.
-                 *
-                 * For now, we can only check these types of devices, we
-                 * might not store a database, and have no way to find out
-                 * for all other types of devices.
-                 */
-                if (!enumerator->match_allow_uninitialized &&
-                    !initialized &&
-                    (sd_device_get_devnum(device, NULL) >= 0 ||
-                     sd_device_get_ifindex(device, NULL) >= 0))
-                        continue;
-
-                if (!device_match_parent(device, enumerator->match_parent, NULL))
-                        continue;
-
-                if (!match_tag(enumerator, device))
-                        continue;
-
-                if (!match_property(enumerator, device))
-                        continue;
-
-                if (!device_match_sysattr(device, enumerator->match_sysattr, enumerator->nomatch_sysattr))
-                        continue;
-
                 k = device_enumerator_add_device(enumerator, device);
                 if (k < 0)
                         r = k;
+
+                /* Also include all potentially matching parent devices in the enumeration. These are things
+                 * like root busses — e.g. /sys/devices/pci0000:00/ or /sys/devices/pnp0/, which ar not
+                 * linked from /sys/class/ or /sys/bus/, hence pick them up explicitly here. */
+                k = enumerator_add_parent_devices(enumerator, device, MATCH_ALL);
+                if (k < 0)
+                        r = k;
         }
 
         return r;
 }
 
-static bool match_subsystem(sd_device_enumerator *enumerator, const char *subsystem) {
-        const char *subsystem_match;
+static int enumerator_scan_dir(
+                sd_device_enumerator *enumerator,
+                const char *basedir,
+                const char *subdir,
+                const char *subsystem) {
 
-        assert(enumerator);
-
-        if (!subsystem)
-                return false;
-
-        SET_FOREACH(subsystem_match, enumerator->nomatch_subsystem)
-                if (fnmatch(subsystem_match, subsystem, 0) == 0)
-                        return false;
-
-        if (set_isempty(enumerator->match_subsystem))
-                return true;
-
-        SET_FOREACH(subsystem_match, enumerator->match_subsystem)
-                if (fnmatch(subsystem_match, subsystem, 0) == 0)
-                        return true;
-
-        return false;
-}
-
-static int enumerator_scan_dir(sd_device_enumerator *enumerator, const char *basedir, const char *subdir, const char *subsystem) {
         _cleanup_closedir_ DIR *dir = NULL;
         char *path;
-        struct dirent *dent;
         int r = 0;
 
         path = strjoina("/sys/", basedir);
 
         dir = opendir(path);
-        if (!dir)
-                return -errno;
+        if (!dir) {
+                bool ignore = errno == ENOENT;
 
-        log_debug("sd-device-enumerator: Scanning %s", path);
+                log_debug_errno(errno,
+                                "sd-device-enumerator: Failed to open directory %s%s: %m",
+                                path, ignore ? ", ignoring" : "");
+                return ignore ? 0 : -errno;
+        }
 
-        FOREACH_DIRENT_ALL(dent, dir, return -errno) {
+        FOREACH_DIRENT_ALL(de, dir, return -errno) {
                 int k;
 
-                if (dent->d_name[0] == '.')
+                if (!relevant_sysfs_subdir(de))
                         continue;
 
-                if (!match_subsystem(enumerator, subsystem ? : dent->d_name))
+                if (!match_subsystem(enumerator, subsystem ? : de->d_name))
                         continue;
 
-                k = enumerator_scan_dir_and_add_devices(enumerator, basedir, dent->d_name, subdir);
+                k = enumerator_scan_dir_and_add_devices(enumerator, basedir, de->d_name, subdir);
                 if (k < 0)
                         r = k;
         }
@@ -492,7 +783,6 @@
 static int enumerator_scan_devices_tag(sd_device_enumerator *enumerator, const char *tag) {
         _cleanup_closedir_ DIR *dir = NULL;
         char *path;
-        struct dirent *dent;
         int r = 0;
 
         assert(enumerator);
@@ -502,22 +792,24 @@
 
         dir = opendir(path);
         if (!dir) {
-                if (errno != ENOENT)
-                        return log_debug_errno(errno, "sd-device-enumerator: Failed to open tags directory %s: %m", path);
-                return 0;
+                bool ignore = errno == ENOENT;
+
+                log_debug_errno(errno,
+                                "sd-device-enumerator: Failed to open directory %s%s: %m",
+                                path, ignore ? ", ignoring" : "");
+                return ignore ? 0 : -errno;
         }
 
         /* TODO: filter away subsystems? */
 
-        FOREACH_DIRENT_ALL(dent, dir, return -errno) {
+        FOREACH_DIRENT_ALL(de, dir, return -errno) {
                 _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-                const char *subsystem, *sysname;
                 int k;
 
-                if (dent->d_name[0] == '.')
+                if (de->d_name[0] == '.')
                         continue;
 
-                k = sd_device_new_from_device_id(&device, dent->d_name);
+                k = sd_device_new_from_device_id(&device, de->d_name);
                 if (k < 0) {
                         if (k != -ENODEV)
                                 /* this is necessarily racy, so ignore missing devices */
@@ -526,33 +818,11 @@
                         continue;
                 }
 
-                k = sd_device_get_subsystem(device, &subsystem);
-                if (k < 0) {
-                        if (k != -ENOENT)
-                                /* this is necessarily racy, so ignore missing devices */
-                                r = k;
-                        continue;
-                }
-
-                if (!match_subsystem(enumerator, subsystem))
-                        continue;
-
-                k = sd_device_get_sysname(device, &sysname);
-                if (k < 0) {
+                /* Generated from tag, hence not necessary to check tag again. */
+                k = test_matches(enumerator, device, MATCH_ALL & (~MATCH_TAG));
+                if (k < 0)
                         r = k;
-                        continue;
-                }
-
-                if (!match_sysname(enumerator, sysname))
-                        continue;
-
-                if (!device_match_parent(device, enumerator->match_parent, NULL))
-                        continue;
-
-                if (!match_property(enumerator, device))
-                        continue;
-
-                if (!device_match_sysattr(device, enumerator->match_sysattr, enumerator->nomatch_sysattr))
+                if (k <= 0)
                         continue;
 
                 k = device_enumerator_add_device(enumerator, device);
@@ -582,9 +852,8 @@
         return r;
 }
 
-static int parent_add_child(sd_device_enumerator *enumerator, const char *path) {
+static int parent_add_child(sd_device_enumerator *enumerator, const char *path, MatchFlag flags) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-        const char *subsystem, *sysname;
         int r;
 
         r = sd_device_new_from_syspath(&device, path);
@@ -594,140 +863,105 @@
         else if (r < 0)
                 return r;
 
-        r = sd_device_get_subsystem(device, &subsystem);
-        if (r == -ENOENT)
-                return 0;
-        if (r < 0)
+        r = test_matches(enumerator, device, flags);
+        if (r <= 0)
                 return r;
 
-        if (!match_subsystem(enumerator, subsystem))
-                return 0;
-
-        r = sd_device_get_sysname(device, &sysname);
-        if (r < 0)
-                return r;
-
-        if (!match_sysname(enumerator, sysname))
-                return 0;
-
-        if (!match_property(enumerator, device))
-                return 0;
-
-        if (!device_match_sysattr(device, enumerator->match_sysattr, enumerator->nomatch_sysattr))
-                return 0;
-
-        r = device_enumerator_add_device(enumerator, device);
-        if (r < 0)
-                return r;
-
-        return 1;
+        return device_enumerator_add_device(enumerator, device);
 }
 
-static int parent_crawl_children(sd_device_enumerator *enumerator, const char *path, unsigned maxdepth) {
+static int parent_crawl_children(sd_device_enumerator *enumerator, const char *path, Set **stack) {
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *dent;
         int r = 0;
 
-        dir = opendir(path);
-        if (!dir)
-                return log_debug_errno(errno, "sd-device-enumerator: Failed to open parent directory %s: %m", path);
+        assert(enumerator);
+        assert(path);
+        assert(stack);
 
-        FOREACH_DIRENT_ALL(dent, dir, return -errno) {
+        dir = opendir(path);
+        if (!dir) {
+                bool ignore = errno == ENOENT;
+
+                log_debug_errno(errno,
+                                "sd-device-enumerator: Failed to open directory %s%s: %m",
+                                path, ignore ? ", ignoring" : "");
+                return ignore ? 0 : -errno;
+        }
+
+        FOREACH_DIRENT_ALL(de, dir, return -errno) {
                 _cleanup_free_ char *child = NULL;
                 int k;
 
-                if (dent->d_name[0] == '.')
+                if (de->d_name[0] == '.')
                         continue;
 
-                if (dent->d_type != DT_DIR)
+                if (de->d_type != DT_DIR)
                         continue;
 
-                child = path_join(path, dent->d_name);
+                child = path_join(path, de->d_name);
                 if (!child)
                         return -ENOMEM;
 
-                k = parent_add_child(enumerator, child);
+                /* Let's check sysname filter earlier. The other tests require the sd-device object created
+                 * from the path, thus much costly. */
+                if (match_sysname(enumerator, de->d_name)) {
+                        k = parent_add_child(enumerator, child, MATCH_ALL & (~(MATCH_SYSNAME|MATCH_PARENT)));
+                        if (k < 0)
+                                r = k;
+                }
+
+                k = set_ensure_consume(stack, &path_hash_ops_free, TAKE_PTR(child));
                 if (k < 0)
                         r = k;
-
-                if (maxdepth > 0)
-                        parent_crawl_children(enumerator, child, maxdepth - 1);
-                else
-                        log_debug("sd-device-enumerator: Max depth reached, %s: ignoring devices", child);
         }
 
         return r;
 }
 
 static int enumerator_scan_devices_children(sd_device_enumerator *enumerator) {
+        _cleanup_set_free_ Set *stack = NULL;
         const char *path;
         int r = 0, k;
 
+        assert(enumerator);
+
         SET_FOREACH(path, enumerator->match_parent) {
-                k = parent_add_child(enumerator, path);
+                k = parent_add_child(enumerator, path, MATCH_ALL & (~MATCH_PARENT));
                 if (k < 0)
                         r = k;
 
-                k = parent_crawl_children(enumerator, path, DEVICE_ENUMERATE_MAX_DEPTH);
+                k = parent_crawl_children(enumerator, path, &stack);
                 if (k < 0)
                         r = k;
         }
 
-        return r;
+        for (;;) {
+                _cleanup_free_ char *p = NULL;
+
+                p = set_steal_first(stack);
+                if (!p)
+                        return r;
+
+                k = parent_crawl_children(enumerator, p, &stack);
+                if (k < 0)
+                        r = k;
+        }
 }
 
 static int enumerator_scan_devices_all(sd_device_enumerator *enumerator) {
-        int r = 0;
+        int k, r = 0;
 
-        log_debug("sd-device-enumerator: Scan all dirs");
+        k = enumerator_scan_dir(enumerator, "bus", "devices", NULL);
+        if (k < 0)
+                r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/bus: %m");
 
-        if (access("/sys/subsystem", F_OK) >= 0) {
-                /* we have /subsystem/, forget all the old stuff */
-                r = enumerator_scan_dir(enumerator, "subsystem", "devices", NULL);
-                if (r < 0)
-                        return log_debug_errno(r, "sd-device-enumerator: Failed to scan /sys/subsystem: %m");
-        } else {
-                int k;
-
-                k = enumerator_scan_dir(enumerator, "bus", "devices", NULL);
-                if (k < 0)
-                        r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/bus: %m");
-
-                k = enumerator_scan_dir(enumerator, "class", NULL, NULL);
-                if (k < 0)
-                        r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/class: %m");
-        }
+        k = enumerator_scan_dir(enumerator, "class", NULL, NULL);
+        if (k < 0)
+                r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/class: %m");
 
         return r;
 }
 
-static void device_enumerator_dedup_devices(sd_device_enumerator *enumerator) {
-        sd_device **a, **b, **end;
-
-        assert(enumerator);
-
-        if (enumerator->n_devices <= 1)
-                return;
-
-        a = enumerator->devices + 1;
-        b = enumerator->devices;
-        end = enumerator->devices + enumerator->n_devices;
-
-        for (; a < end; a++) {
-                const char *devpath_a, *devpath_b;
-
-                assert_se(sd_device_get_devpath(*a, &devpath_a) >= 0);
-                assert_se(sd_device_get_devpath(*b, &devpath_b) >= 0);
-
-                if (path_equal(devpath_a, devpath_b))
-                        sd_device_unref(*a);
-                else
-                        *(++b) = *a;
-        }
-
-        enumerator->n_devices = b - enumerator->devices + 1;
-}
-
 int device_enumerator_scan_devices(sd_device_enumerator *enumerator) {
         int r = 0, k;
 
@@ -737,10 +971,7 @@
             enumerator->type == DEVICE_ENUMERATION_TYPE_DEVICES)
                 return 0;
 
-        for (size_t i = 0; i < enumerator->n_devices; i++)
-                sd_device_unref(enumerator->devices[i]);
-
-        enumerator->n_devices = 0;
+        device_enumerator_unref_devices(enumerator);
 
         if (!set_isempty(enumerator->match_tag)) {
                 k = enumerator_scan_devices_tags(enumerator);
@@ -756,9 +987,6 @@
                         r = k;
         }
 
-        typesafe_qsort(enumerator->devices, enumerator->n_devices, device_compare);
-        device_enumerator_dedup_devices(enumerator);
-
         enumerator->scan_uptodate = true;
         enumerator->type = DEVICE_ENUMERATION_TYPE_DEVICES;
 
@@ -766,12 +994,12 @@
 }
 
 _public_ sd_device *sd_device_enumerator_get_device_first(sd_device_enumerator *enumerator) {
-        int r;
-
         assert_return(enumerator, NULL);
 
-        r = device_enumerator_scan_devices(enumerator);
-        if (r < 0)
+        if (device_enumerator_scan_devices(enumerator) < 0)
+                return NULL;
+
+        if (enumerator_sort_devices(enumerator) < 0)
                 return NULL;
 
         enumerator->current_device_index = 0;
@@ -786,6 +1014,7 @@
         assert_return(enumerator, NULL);
 
         if (!enumerator->scan_uptodate ||
+            !enumerator->sorted ||
             enumerator->type != DEVICE_ENUMERATION_TYPE_DEVICES ||
             enumerator->current_device_index + 1 >= enumerator->n_devices)
                 return NULL;
@@ -794,7 +1023,6 @@
 }
 
 int device_enumerator_scan_subsystems(sd_device_enumerator *enumerator) {
-        const char *subsysdir;
         int r = 0, k;
 
         assert(enumerator);
@@ -803,10 +1031,7 @@
             enumerator->type == DEVICE_ENUMERATION_TYPE_SUBSYSTEMS)
                 return 0;
 
-        for (size_t i = 0; i < enumerator->n_devices; i++)
-                sd_device_unref(enumerator->devices[i]);
-
-        enumerator->n_devices = 0;
+        device_enumerator_unref_devices(enumerator);
 
         /* modules */
         if (match_subsystem(enumerator, "module")) {
@@ -815,28 +1040,20 @@
                         r = log_debug_errno(k, "sd-device-enumerator: Failed to scan modules: %m");
         }
 
-        if (access("/sys/subsystem", F_OK) >= 0)
-                subsysdir = "subsystem";
-        else
-                subsysdir = "bus";
-
         /* subsystems (only buses support coldplug) */
         if (match_subsystem(enumerator, "subsystem")) {
-                k = enumerator_scan_dir_and_add_devices(enumerator, subsysdir, NULL, NULL);
+                k = enumerator_scan_dir_and_add_devices(enumerator, "bus", NULL, NULL);
                 if (k < 0)
                         r = log_debug_errno(k, "sd-device-enumerator: Failed to scan subsystems: %m");
         }
 
         /* subsystem drivers */
         if (match_subsystem(enumerator, "drivers")) {
-                k = enumerator_scan_dir(enumerator, subsysdir, "drivers", "drivers");
+                k = enumerator_scan_dir(enumerator, "bus", "drivers", "drivers");
                 if (k < 0)
                         r = log_debug_errno(k, "sd-device-enumerator: Failed to scan drivers: %m");
         }
 
-        typesafe_qsort(enumerator->devices, enumerator->n_devices, device_compare);
-        device_enumerator_dedup_devices(enumerator);
-
         enumerator->scan_uptodate = true;
         enumerator->type = DEVICE_ENUMERATION_TYPE_SUBSYSTEMS;
 
@@ -844,12 +1061,12 @@
 }
 
 _public_ sd_device *sd_device_enumerator_get_subsystem_first(sd_device_enumerator *enumerator) {
-        int r;
-
         assert_return(enumerator, NULL);
 
-        r = device_enumerator_scan_subsystems(enumerator);
-        if (r < 0)
+        if (device_enumerator_scan_subsystems(enumerator) < 0)
+                return NULL;
+
+        if (enumerator_sort_devices(enumerator) < 0)
                 return NULL;
 
         enumerator->current_device_index = 0;
@@ -864,6 +1081,7 @@
         assert_return(enumerator, NULL);
 
         if (!enumerator->scan_uptodate ||
+            !enumerator->sorted ||
             enumerator->type != DEVICE_ENUMERATION_TYPE_SUBSYSTEMS ||
             enumerator->current_device_index + 1 >= enumerator->n_devices)
                 return NULL;
@@ -871,12 +1089,59 @@
         return enumerator->devices[++enumerator->current_device_index];
 }
 
+int device_enumerator_scan_devices_and_subsystems(sd_device_enumerator *enumerator) {
+        int r;
+
+        assert(enumerator);
+
+        if (enumerator->scan_uptodate &&
+            enumerator->type == DEVICE_ENUMERATION_TYPE_ALL)
+                return 0;
+
+        device_enumerator_unref_devices(enumerator);
+
+        if (!set_isempty(enumerator->match_tag))
+                r = enumerator_scan_devices_tags(enumerator);
+        else if (enumerator->match_parent)
+                r = enumerator_scan_devices_children(enumerator);
+        else {
+                int k;
+
+                r = enumerator_scan_devices_all(enumerator);
+
+                if (match_subsystem(enumerator, "module")) {
+                        k = enumerator_scan_dir_and_add_devices(enumerator, "module", NULL, NULL);
+                        if (k < 0)
+                                r = log_debug_errno(k, "sd-device-enumerator: Failed to scan modules: %m");
+                }
+                if (match_subsystem(enumerator, "subsystem")) {
+                        k = enumerator_scan_dir_and_add_devices(enumerator, "bus", NULL, NULL);
+                        if (k < 0)
+                                r = log_debug_errno(k, "sd-device-enumerator: Failed to scan subsystems: %m");
+                }
+
+                if (match_subsystem(enumerator, "drivers")) {
+                        k = enumerator_scan_dir(enumerator, "bus", "drivers", "drivers");
+                        if (k < 0)
+                                r = log_debug_errno(k, "sd-device-enumerator: Failed to scan drivers: %m");
+                }
+        }
+
+        enumerator->scan_uptodate = true;
+        enumerator->type = DEVICE_ENUMERATION_TYPE_ALL;
+
+        return r;
+}
+
 sd_device *device_enumerator_get_first(sd_device_enumerator *enumerator) {
         assert_return(enumerator, NULL);
 
         if (!enumerator->scan_uptodate)
                 return NULL;
 
+        if (enumerator_sort_devices(enumerator) < 0)
+                return NULL;
+
         enumerator->current_device_index = 0;
 
         if (enumerator->n_devices == 0)
@@ -889,6 +1154,7 @@
         assert_return(enumerator, NULL);
 
         if (!enumerator->scan_uptodate ||
+            !enumerator->sorted ||
             enumerator->current_device_index + 1 >= enumerator->n_devices)
                 return NULL;
 
@@ -902,6 +1168,9 @@
         if (!enumerator->scan_uptodate)
                 return NULL;
 
+        if (enumerator_sort_devices(enumerator) < 0)
+                return NULL;
+
         *ret_n_devices = enumerator->n_devices;
         return enumerator->devices;
 }
diff --git a/src/libsystemd/sd-device/device-filter.c b/src/libsystemd/sd-device/device-filter.c
new file mode 100644
index 0000000..4101e7d
--- /dev/null
+++ b/src/libsystemd/sd-device/device-filter.c
@@ -0,0 +1,115 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fnmatch.h>
+
+#include "device-filter.h"
+#include "path-util.h"
+
+int update_match_strv(Hashmap **match_strv, const char *key, const char *value, bool clear_on_null) {
+        char **strv;
+        int r;
+
+        assert(match_strv);
+        assert(key);
+
+        strv = hashmap_get(*match_strv, key);
+        if (strv) {
+                if (!value) {
+                        char **v;
+
+                        if (strv_isempty(strv) || !clear_on_null)
+                                return 0;
+
+                        /* Accept all value. Clear previous assignment. */
+
+                        v = new0(char*, 1);
+                        if (!v)
+                                return -ENOMEM;
+
+                        strv_free_and_replace(strv, v);
+                } else {
+                        if (strv_contains(strv, value))
+                                return 0;
+
+                        r = strv_extend(&strv, value);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = hashmap_update(*match_strv, key, strv);
+                if (r < 0)
+                        return r;
+
+        } else {
+                _cleanup_strv_free_ char **strv_alloc = NULL;
+                _cleanup_free_ char *key_alloc = NULL;
+
+                key_alloc = strdup(key);
+                if (!key_alloc)
+                        return -ENOMEM;
+
+                strv_alloc = strv_new(value);
+                if (!strv_alloc)
+                        return -ENOMEM;
+
+                r = hashmap_ensure_put(match_strv, &string_hash_ops_free_strv_free, key_alloc, strv_alloc);
+                if (r < 0)
+                        return r;
+
+                TAKE_PTR(key_alloc);
+                TAKE_PTR(strv_alloc);
+        }
+
+        return 1;
+}
+
+static bool device_match_sysattr_value(sd_device *device, const char *sysattr, char * const *patterns) {
+        const char *value;
+
+        assert(device);
+        assert(sysattr);
+
+        if (sd_device_get_sysattr_value(device, sysattr, &value) < 0)
+                return false;
+
+        return strv_fnmatch_or_empty(patterns, value, 0);
+}
+
+bool device_match_sysattr(sd_device *device, Hashmap *match_sysattr, Hashmap *nomatch_sysattr) {
+        char * const *patterns;
+        const char *sysattr;
+
+        assert(device);
+
+        HASHMAP_FOREACH_KEY(patterns, sysattr, match_sysattr)
+                if (!device_match_sysattr_value(device, sysattr, patterns))
+                        return false;
+
+        HASHMAP_FOREACH_KEY(patterns, sysattr, nomatch_sysattr)
+                if (device_match_sysattr_value(device, sysattr, patterns))
+                        return false;
+
+        return true;
+}
+
+bool device_match_parent(sd_device *device, Set *match_parent, Set *nomatch_parent) {
+        const char *syspath_parent, *syspath;
+
+        assert(device);
+
+        if (sd_device_get_syspath(device, &syspath) < 0)
+                return false;
+
+        SET_FOREACH(syspath_parent, nomatch_parent)
+                if (path_startswith(syspath, syspath_parent))
+                        return false;
+
+        if (set_isempty(match_parent))
+                return true;
+
+        SET_FOREACH(syspath_parent, match_parent)
+                if (path_startswith(syspath, syspath_parent))
+                        return true;
+
+        return false;
+}
diff --git a/src/libsystemd/sd-device/device-filter.h b/src/libsystemd/sd-device/device-filter.h
new file mode 100644
index 0000000..0c5f34e
--- /dev/null
+++ b/src/libsystemd/sd-device/device-filter.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+#include "sd-device.h"
+
+#include "hashmap.h"
+#include "set.h"
+
+int update_match_strv(Hashmap **match_strv, const char *key, const char *value, bool clear_on_null);
+bool device_match_sysattr(sd_device *device, Hashmap *match_sysattr, Hashmap *nomatch_sysattr);
+bool device_match_parent(sd_device *device, Set *match_parent, Set *nomatch_parent);
diff --git a/src/libsystemd/sd-device/device-internal.h b/src/libsystemd/sd-device/device-internal.h
index f4d02f9..a465eb2 100644
--- a/src/libsystemd/sd-device/device-internal.h
+++ b/src/libsystemd/sd-device/device-internal.h
@@ -21,8 +21,6 @@
          */
         unsigned database_version;
 
-        int watch_handle;
-
         sd_device *parent;
 
         OrderedHashmap *properties;
@@ -49,13 +47,17 @@
         uint64_t devlinks_iterator_generation; /* generation when iteration was started */
         int devlink_priority;
 
+        Hashmap *children;
+        Iterator children_iterator;
+        bool children_enumerated;
+
         int ifindex;
         char *devtype;
         char *devname;
         dev_t devnum;
 
         char **properties_strv; /* the properties hashmap as a strv */
-        uint8_t *properties_nulstr; /* the same as a nulstr */
+        char *properties_nulstr; /* the same as a nulstr */
         size_t properties_nulstr_len;
 
         char *syspath;
@@ -75,6 +77,8 @@
         uid_t devuid;
         gid_t devgid;
 
+        uint64_t diskseq; /* Block device sequence number, monothonically incremented by the kernel on create/attach */
+
         /* only set when device is passed through netlink */
         sd_device_action_t action;
         uint64_t seqnum;
@@ -99,7 +103,6 @@
 static inline int device_add_property_internal(sd_device *device, const char *key, const char *value) {
         return device_add_property_aux(device, key, value, false);
 }
-int device_read_uevent_file(sd_device *device);
 
 int device_set_syspath(sd_device *device, const char *_syspath, bool verify);
 int device_set_ifindex(sd_device *device, const char *ifindex);
@@ -108,6 +111,7 @@
 int device_set_devtype(sd_device *device, const char *devtype);
 int device_set_devnum(sd_device *device, const char *major, const char *minor);
 int device_set_subsystem(sd_device *device, const char *subsystem);
+int device_set_diskseq(sd_device *device, const char *str);
 int device_set_drivers_subsystem(sd_device *device);
 int device_set_driver(sd_device *device, const char *driver);
 int device_set_usec_initialized(sd_device *device, usec_t when);
diff --git a/src/libsystemd/sd-device/device-monitor.c b/src/libsystemd/sd-device/device-monitor.c
index 2cb3595..0d2eea5 100644
--- a/src/libsystemd/sd-device/device-monitor.c
+++ b/src/libsystemd/sd-device/device-monitor.c
@@ -12,6 +12,7 @@
 
 #include "MurmurHash2.h"
 #include "alloc-util.h"
+#include "device-filter.h"
 #include "device-monitor-private.h"
 #include "device-private.h"
 #include "device-util.h"
@@ -24,8 +25,19 @@
 #include "mountpoint-util.h"
 #include "set.h"
 #include "socket-util.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
+#include "uid-range.h"
+
+#define log_monitor(m, format, ...)                                     \
+        log_debug("sd-device-monitor(%s): " format, strna(m ? m->description : NULL), ##__VA_ARGS__)
+#define log_monitor_errno(m, r, format, ...)                            \
+        log_debug_errno(r, "sd-device-monitor(%s): " format, strna(m ? m->description : NULL), ##__VA_ARGS__)
+#define log_device_monitor(d, m, format, ...)                           \
+        log_device_debug(d, "sd-device-monitor(%s): " format, strna(m ? m->description : NULL), ##__VA_ARGS__)
+#define log_device_monitor_errno(d, m, r, format, ...)                  \
+        log_device_debug_errno(d, r, "sd-device-monitor(%s): " format, strna(m ? m->description : NULL), ##__VA_ARGS__)
 
 struct sd_device_monitor {
         unsigned n_ref;
@@ -35,6 +47,8 @@
         union sockaddr_union snl_trusted_sender;
         bool bound;
 
+        UidRange *mapped_userns_uid_range;
+
         Hashmap *subsystem_filter;
         Set *tag_filter;
         Hashmap *match_sysattr_filter;
@@ -45,6 +59,7 @@
 
         sd_event *event;
         sd_event_source *event_source;
+        char *description;
         sd_device_monitor_handler_t callback;
         void *userdata;
 };
@@ -115,7 +130,7 @@
 
 int device_monitor_new_full(sd_device_monitor **ret, MonitorNetlinkGroup group, int fd) {
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *m = NULL;
-        _cleanup_close_ int sock = -1;
+        _cleanup_close_ int sock = -EBADF;
         int r;
 
         assert(group >= 0 && group < _MONITOR_NETLINK_GROUP_MAX);
@@ -138,14 +153,14 @@
                  * will not receive any messages.
                  */
 
-                log_debug("sd-device-monitor: The udev service seems not to be active, disabling the monitor");
+                log_monitor(m, "The udev service seems not to be active, disabling the monitor.");
                 group = MONITOR_GROUP_NONE;
         }
 
         if (fd < 0) {
-                sock = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_KOBJECT_UEVENT);
+                sock = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_KOBJECT_UEVENT);
                 if (sock < 0)
-                        return log_debug_errno(errno, "sd-device-monitor: Failed to create socket: %m");
+                        return log_monitor_errno(m, errno, "Failed to create socket: %m");
         }
 
         m = new(sd_device_monitor, 1);
@@ -163,13 +178,13 @@
         if (fd >= 0) {
                 r = monitor_set_nl_address(m);
                 if (r < 0) {
-                        log_debug_errno(r, "sd-device-monitor: Failed to set netlink address: %m");
+                        log_monitor_errno(m, r, "Failed to set netlink address: %m");
                         goto fail;
                 }
         }
 
         if (DEBUG_LOGGING) {
-                _cleanup_close_ int netns = -1;
+                _cleanup_close_ int netns = -EBADF;
 
                 /* So here's the thing: only AF_NETLINK sockets from the main network namespace will get
                  * hardware events. Let's check if ours is from there, and if not generate a debug message,
@@ -178,12 +193,12 @@
 
                 netns = ioctl(m->sock, SIOCGSKNS);
                 if (netns < 0)
-                        log_debug_errno(errno, "sd-device-monitor: Unable to get network namespace of udev netlink socket, unable to determine if we are in host netns, ignoring: %m");
+                        log_monitor_errno(m, errno, "Unable to get network namespace of udev netlink socket, unable to determine if we are in host netns, ignoring: %m");
                 else {
                         struct stat a, b;
 
                         if (fstat(netns, &a) < 0) {
-                                r = log_debug_errno(errno, "sd-device-monitor: Failed to stat netns of udev netlink socket: %m");
+                                r = log_monitor_errno(m, errno, "Failed to stat netns of udev netlink socket: %m");
                                 goto fail;
                         }
 
@@ -191,12 +206,12 @@
                                 if (ERRNO_IS_PRIVILEGE(errno))
                                         /* If we can't access PID1's netns info due to permissions, it's fine, this is a
                                          * safety check only after all. */
-                                        log_debug_errno(errno, "sd-device-monitor: No permission to stat PID1's netns, unable to determine if we are in host netns, ignoring: %m");
+                                        log_monitor_errno(m, errno, "No permission to stat PID1's netns, unable to determine if we are in host netns, ignoring: %m");
                                 else
-                                        log_debug_errno(errno, "sd-device-monitor: Failed to stat PID1's netns, ignoring: %m");
+                                        log_monitor_errno(m, errno, "Failed to stat PID1's netns, ignoring: %m");
 
-                        } else if (a.st_dev != b.st_dev || a.st_ino != b.st_ino)
-                                log_debug("sd-device-monitor: Netlink socket we listen on is not from host netns, we won't see device events.");
+                        } else if (!stat_inode_same(&a, &b))
+                                log_monitor(m, "Netlink socket we listen on is not from host netns, we won't see device events.");
                 }
         }
 
@@ -227,13 +242,15 @@
 
 static int device_monitor_event_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-        sd_device_monitor *m = userdata;
-
-        assert(m);
+        _unused_ _cleanup_(log_context_freep) LogContext *c = NULL;
+        sd_device_monitor *m = ASSERT_PTR(userdata);
 
         if (device_monitor_receive_device(m, &device) <= 0)
                 return 0;
 
+        if (log_context_enabled())
+                c = log_context_new_consume(device_make_log_fields(device));
+
         if (m->callback)
                 return m->callback(m, device, m->userdata);
 
@@ -262,7 +279,7 @@
         if (r < 0)
                 return r;
 
-        (void) sd_event_source_set_description(m->event_source, "sd-device-monitor");
+        (void) sd_event_source_set_description(m->event_source, m->description ?: "sd-device-monitor");
 
         return 0;
 }
@@ -305,6 +322,29 @@
         return m->event_source;
 }
 
+_public_ int sd_device_monitor_set_description(sd_device_monitor *m, const char *description) {
+        int r;
+
+        assert_return(m, -EINVAL);
+
+        r = free_and_strdup(&m->description, description);
+        if (r <= 0)
+                return r;
+
+        if (m->event_source)
+                (void) sd_event_source_set_description(m->event_source, description);
+
+        return r;
+}
+
+_public_ int sd_device_monitor_get_description(sd_device_monitor *m, const char **ret) {
+        assert_return(m, -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        *ret = m->description;
+        return 0;
+}
+
 int device_monitor_enable_receiving(sd_device_monitor *m) {
         int r;
 
@@ -312,22 +352,22 @@
 
         r = sd_device_monitor_filter_update(m);
         if (r < 0)
-                return log_debug_errno(r, "sd-device-monitor: Failed to update filter: %m");
+                return log_monitor_errno(m, r, "Failed to update filter: %m");
 
         if (!m->bound) {
                 /* enable receiving of sender credentials */
                 r = setsockopt_int(m->sock, SOL_SOCKET, SO_PASSCRED, true);
                 if (r < 0)
-                        return log_debug_errno(r, "sd-device-monitor: Failed to set socket option SO_PASSCRED: %m");
+                        return log_monitor_errno(m, r, "Failed to set socket option SO_PASSCRED: %m");
 
                 if (bind(m->sock, &m->snl.sa, sizeof(struct sockaddr_nl)) < 0)
-                        return log_debug_errno(errno, "sd-device-monitor: Failed to bind monitoring socket: %m");
+                        return log_monitor_errno(m, errno, "Failed to bind monitoring socket: %m");
 
                 m->bound = true;
 
                 r = monitor_set_nl_address(m);
                 if (r < 0)
-                        return log_debug_errno(r, "sd-device-monitor: Failed to set address: %m");
+                        return log_monitor_errno(m, r, "Failed to set address: %m");
         }
 
         return 0;
@@ -338,6 +378,8 @@
 
         (void) sd_device_monitor_detach_event(m);
 
+        uid_range_free(m->mapped_userns_uid_range);
+        free(m->description);
         hashmap_free(m->subsystem_filter);
         set_free(m->tag_filter);
         hashmap_free(m->match_sysattr_filter);
@@ -414,16 +456,43 @@
         return device_match_parent(device, m->match_parent_filter, m->nomatch_parent_filter);
 }
 
+static bool check_sender_uid(sd_device_monitor *m, uid_t uid) {
+        int r;
+
+        assert(m);
+
+        /* Always trust messages from uid 0. */
+        if (uid == 0)
+                return true;
+
+        /* Trust messages sent by the same UID we are running. Currently, such situation happens only for
+         * unicast messages. */
+        if (uid == getuid() || uid == geteuid())
+                return true;
+
+        if (!m->mapped_userns_uid_range) {
+                r = uid_range_load_userns(&m->mapped_userns_uid_range, NULL);
+                if (r < 0)
+                        log_monitor_errno(m, r, "Failed to load UID ranges mapped to the current user namespace, ignoring: %m");
+        }
+
+        /* Trust messages come from outside of the current user namespace. */
+        if (!uid_range_contains(m->mapped_userns_uid_range, uid))
+                return true;
+
+        /* Otherwise, refuse messages. */
+        return false;
+}
+
 int device_monitor_receive_device(sd_device_monitor *m, sd_device **ret) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
+        _cleanup_free_ uint8_t *buf_alloc = NULL;
         union {
-                monitor_netlink_header nlh;
-                char raw[8192];
-        } buf;
-        struct iovec iov = {
-                .iov_base = &buf,
-                .iov_len = sizeof(buf)
-        };
+                monitor_netlink_header *nlh;
+                char *nulstr;
+                uint8_t *buf;
+        } message;
+        struct iovec iov;
         CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred))) control;
         union sockaddr_union snl;
         struct msghdr smsg = {
@@ -436,80 +505,103 @@
         };
         struct cmsghdr *cmsg;
         struct ucred *cred;
-        ssize_t buflen, bufpos;
+        size_t offset;
+        ssize_t n;
         bool is_initialized = false;
         int r;
 
         assert(m);
         assert(ret);
 
-        buflen = recvmsg(m->sock, &smsg, 0);
-        if (buflen < 0) {
-                if (errno != EINTR)
-                        log_debug_errno(errno, "sd-device-monitor: Failed to receive message: %m");
+        n = next_datagram_size_fd(m->sock);
+        if (n < 0) {
+                if (!ERRNO_IS_TRANSIENT(n))
+                        log_monitor_errno(m, n, "Failed to get the received message size: %m");
+                return n;
+        }
+
+        if ((size_t) n < ALLOCA_MAX / sizeof(uint8_t) / 2)
+                message.buf = newa(uint8_t, n);
+        else {
+                buf_alloc = new(uint8_t, n);
+                if (!buf_alloc)
+                        return log_oom_debug();
+
+                message.buf = buf_alloc;
+        }
+
+        iov = IOVEC_MAKE(message.buf, n);
+
+        n = recvmsg(m->sock, &smsg, 0);
+        if (n < 0) {
+                if (!ERRNO_IS_TRANSIENT(errno))
+                        log_monitor_errno(m, errno, "Failed to receive message: %m");
                 return -errno;
         }
 
-        if (buflen < 32 || (smsg.msg_flags & MSG_TRUNC))
-                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "sd-device-monitor: Invalid message length.");
+        if (smsg.msg_flags & MSG_TRUNC)
+                return log_monitor_errno(m, SYNTHETIC_ERRNO(EINVAL), "Received truncated message, ignoring message.");
+
+        if (n < 32)
+                return log_monitor_errno(m, SYNTHETIC_ERRNO(EINVAL), "Invalid message length (%zi), ignoring message.", n);
 
         if (snl.nl.nl_groups == MONITOR_GROUP_NONE) {
                 /* unicast message, check if we trust the sender */
                 if (m->snl_trusted_sender.nl.nl_pid == 0 ||
                     snl.nl.nl_pid != m->snl_trusted_sender.nl.nl_pid)
-                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                               "sd-device-monitor: Unicast netlink message ignored.");
+                        return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN),
+                                                 "Unicast netlink message ignored.");
 
         } else if (snl.nl.nl_groups == MONITOR_GROUP_KERNEL) {
                 if (snl.nl.nl_pid > 0)
-                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                               "sd-device-monitor: Multicast kernel netlink message from PID %"PRIu32" ignored.", snl.nl.nl_pid);
+                        return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN),
+                                                 "Multicast kernel netlink message from PID %"PRIu32" ignored.",
+                                                 snl.nl.nl_pid);
         }
 
         cmsg = CMSG_FIRSTHDR(&smsg);
         if (!cmsg || cmsg->cmsg_type != SCM_CREDENTIALS)
-                return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                       "sd-device-monitor: No sender credentials received, message ignored.");
+                return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN),
+                                         "No sender credentials received, ignoring message.");
 
         cred = (struct ucred*) CMSG_DATA(cmsg);
-        if (cred->uid != 0)
-                return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                       "sd-device-monitor: Sender uid="UID_FMT", message ignored.", cred->uid);
+        if (!check_sender_uid(m, cred->uid))
+                return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN),
+                                         "Sender uid="UID_FMT", message ignored.", cred->uid);
 
-        if (streq(buf.raw, "libudev")) {
+        if (!memchr(message.buf, 0, n))
+                return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN), "Received message without NUL, ignoring message.");
+
+        if (streq(message.nulstr, "libudev")) {
                 /* udev message needs proper version magic */
-                if (buf.nlh.magic != htobe32(UDEV_MONITOR_MAGIC))
-                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                               "sd-device-monitor: Invalid message signature (%x != %x)",
-                                               buf.nlh.magic, htobe32(UDEV_MONITOR_MAGIC));
+                if (message.nlh->magic != htobe32(UDEV_MONITOR_MAGIC))
+                        return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN),
+                                                 "Invalid message signature (%x != %x).",
+                                                 message.nlh->magic, htobe32(UDEV_MONITOR_MAGIC));
 
-                if (buf.nlh.properties_off+32 > (size_t) buflen)
-                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                               "sd-device-monitor: Invalid message length (%u > %zd)",
-                                               buf.nlh.properties_off+32, buflen);
+                if (message.nlh->properties_off + 32 > (size_t) n)
+                        return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN),
+                                                 "Invalid offset for properties (%u > %zi).",
+                                                 message.nlh->properties_off + 32, n);
 
-                bufpos = buf.nlh.properties_off;
+                offset = message.nlh->properties_off;
 
                 /* devices received from udev are always initialized */
                 is_initialized = true;
 
         } else {
-                /* kernel message with header */
-                bufpos = strlen(buf.raw) + 1;
-                if ((size_t) bufpos < sizeof("a@/d") || bufpos >= buflen)
-                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                               "sd-device-monitor: Invalid message length");
+                /* check kernel message header */
+                if (!strstr(message.nulstr, "@/"))
+                        return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN), "Invalid message header.");
 
-                /* check message header */
-                if (!strstr(buf.raw, "@/"))
-                        return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
-                                               "sd-device-monitor: Invalid message header");
+                offset = strlen(message.nulstr) + 1;
+                if (offset >= (size_t) n)
+                        return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN), "Invalid message length.");
         }
 
-        r = device_new_from_nulstr(&device, (uint8_t*) &buf.raw[bufpos], buflen - bufpos);
+        r = device_new_from_nulstr(&device, message.nulstr + offset, n - offset);
         if (r < 0)
-                return log_debug_errno(r, "sd-device-monitor: Failed to create device from received message: %m");
+                return log_monitor_errno(m, r, "Failed to create device from received message: %m");
 
         if (is_initialized)
                 device_set_is_initialized(device);
@@ -517,9 +609,9 @@
         /* Skip device, if it does not pass the current filter */
         r = passes_filter(m, device);
         if (r < 0)
-                return log_device_debug_errno(device, r, "sd-device-monitor: Failed to check received device passing filter: %m");
+                return log_device_monitor_errno(device, m, r, "Failed to check received device passing filter: %m");
         if (r == 0)
-                log_device_debug(device, "sd-device-monitor: Received device does not pass filter, ignoring");
+                log_device_monitor(device, m, "Received device does not pass filter, ignoring.");
         else
                 *ret = TAKE_PTR(device);
 
@@ -573,17 +665,17 @@
         assert(m);
         assert(device);
 
-        r = device_get_properties_nulstr(device, (const uint8_t **) &buf, &blen);
+        r = device_get_properties_nulstr(device, &buf, &blen);
         if (r < 0)
-                return log_device_debug_errno(device, r, "sd-device-monitor: Failed to get device properties: %m");
+                return log_device_monitor_errno(device, m, r, "Failed to get device properties: %m");
         if (blen < 32)
-                log_device_debug_errno(device, SYNTHETIC_ERRNO(EINVAL),
-                                       "sd-device-monitor: Length of device property nulstr is too small to contain valid device information");
+                return log_device_monitor_errno(device, m, SYNTHETIC_ERRNO(EINVAL),
+                                                "Length of device property nulstr is too small to contain valid device information.");
 
         /* fill in versioned header */
         r = sd_device_get_subsystem(device, &val);
         if (r < 0)
-                return log_device_debug_errno(device, r, "sd-device-monitor: Failed to get device subsystem: %m");
+                return log_device_monitor_errno(device, m, r, "Failed to get device subsystem: %m");
         nlh.filter_subsystem_hash = htobe32(string_hash32(val));
 
         if (sd_device_get_devtype(device, &val) >= 0)
@@ -615,13 +707,13 @@
         count = sendmsg(m->sock, &smsg, 0);
         if (count < 0) {
                 if (!destination && errno == ECONNREFUSED) {
-                        log_device_debug(device, "sd-device-monitor: Passed to netlink monitor");
+                        log_device_monitor(device, m, "Passed to netlink monitor.");
                         return 0;
                 } else
-                        return log_device_debug_errno(device, errno, "sd-device-monitor: Failed to send device to netlink monitor: %m");
+                        return log_device_monitor_errno(device, m, errno, "Failed to send device to netlink monitor: %m");
         }
 
-        log_device_debug(device, "sd-device-monitor: Passed %zi byte to netlink monitor", count);
+        log_device_monitor(device, m, "Passed %zi byte to netlink monitor.", count);
         return count;
 }
 
@@ -786,7 +878,7 @@
                 hashmap = &m->nomatch_sysattr_filter;
 
         /* TODO: unset m->filter_uptodate on success when we support this filter on BPF. */
-        return hashmap_put_strdup_full(hashmap, &trivial_hash_ops_free_free, sysattr, value);
+        return update_match_strv(hashmap, sysattr, value, /* clear_on_null = */ true);
 }
 
 _public_ int sd_device_monitor_filter_add_match_parent(sd_device_monitor *m, sd_device *device, int match) {
diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c
index 37c6555..182c4d6 100644
--- a/src/libsystemd/sd-device/device-private.c
+++ b/src/libsystemd/sd-device/device-private.c
@@ -47,6 +47,27 @@
         return 0;
 }
 
+int device_add_propertyf(sd_device *device, const char *key, const char *format, ...) {
+        _cleanup_free_ char *value = NULL;
+        va_list ap;
+        int r;
+
+        assert(device);
+        assert(key);
+
+        if (!format)
+                return device_add_property(device, key, NULL);
+
+        va_start(ap, format);
+        r = vasprintf(&value, format, ap);
+        va_end(ap);
+
+        if (r < 0)
+                return -ENOMEM;
+
+        return device_add_property(device, key, value);
+}
+
 void device_set_devlink_priority(sd_device *device, int priority) {
         assert(device);
 
@@ -90,7 +111,7 @@
         return device->devlinks_generation;
 }
 
-int device_get_devnode_mode(sd_device *device, mode_t *mode) {
+int device_get_devnode_mode(sd_device *device, mode_t *ret) {
         int r;
 
         assert(device);
@@ -102,13 +123,13 @@
         if (device->devmode == MODE_INVALID)
                 return -ENOENT;
 
-        if (mode)
-                *mode = device->devmode;
+        if (ret)
+                *ret = device->devmode;
 
         return 0;
 }
 
-int device_get_devnode_uid(sd_device *device, uid_t *uid) {
+int device_get_devnode_uid(sd_device *device, uid_t *ret) {
         int r;
 
         assert(device);
@@ -120,20 +141,20 @@
         if (device->devuid == UID_INVALID)
                 return -ENOENT;
 
-        if (uid)
-                *uid = device->devuid;
+        if (ret)
+                *ret = device->devuid;
 
         return 0;
 }
 
 static int device_set_devuid(sd_device *device, const char *uid) {
-        unsigned u;
+        uid_t u;
         int r;
 
         assert(device);
         assert(uid);
 
-        r = safe_atou(uid, &u);
+        r = parse_uid(uid, &u);
         if (r < 0)
                 return r;
 
@@ -146,7 +167,7 @@
         return 0;
 }
 
-int device_get_devnode_gid(sd_device *device, gid_t *gid) {
+int device_get_devnode_gid(sd_device *device, gid_t *ret) {
         int r;
 
         assert(device);
@@ -158,20 +179,20 @@
         if (device->devgid == GID_INVALID)
                 return -ENOENT;
 
-        if (gid)
-                *gid = device->devgid;
+        if (ret)
+                *ret = device->devgid;
 
         return 0;
 }
 
 static int device_set_devgid(sd_device *device, const char *gid) {
-        unsigned g;
+        gid_t g;
         int r;
 
         assert(device);
         assert(gid);
 
-        r = safe_atou(gid, &g);
+        r = parse_gid(gid, &g);
         if (r < 0)
                 return r;
 
@@ -184,16 +205,11 @@
         return 0;
 }
 
-static int device_set_action(sd_device *device, const char *action) {
-        sd_device_action_t a;
+int device_set_action(sd_device *device, sd_device_action_t a) {
         int r;
 
         assert(device);
-        assert(action);
-
-        a = device_action_from_string(action);
-        if (a < 0)
-                return a;
+        assert(a >= 0 && a < _SD_DEVICE_ACTION_MAX);
 
         r = device_add_property_internal(device, "ACTION", device_action_to_string(a));
         if (r < 0)
@@ -204,6 +220,19 @@
         return 0;
 }
 
+static int device_set_action_from_string(sd_device *device, const char *action) {
+        sd_device_action_t a;
+
+        assert(device);
+        assert(action);
+
+        a = device_action_from_string(action);
+        if (a < 0)
+                return a;
+
+        return device_set_action(device, a);
+}
+
 static int device_set_seqnum(sd_device *device, const char *str) {
         uint64_t seqnum;
         int r;
@@ -285,13 +314,17 @@
                 if (r < 0)
                         return log_device_debug_errno(device, r, "sd-device: Failed to set devgid to '%s': %m", value);
         } else if (streq(key, "ACTION")) {
-                r = device_set_action(device, value);
+                r = device_set_action_from_string(device, value);
                 if (r < 0)
                         return log_device_debug_errno(device, r, "sd-device: Failed to set action to '%s': %m", value);
         } else if (streq(key, "SEQNUM")) {
                 r = device_set_seqnum(device, value);
                 if (r < 0)
                         return log_device_debug_errno(device, r, "sd-device: Failed to set SEQNUM to '%s': %m", value);
+        } else if (streq(key, "DISKSEQ")) {
+                r = device_set_diskseq(device, value);
+                if (r < 0)
+                        return log_device_debug_errno(device, r, "sd-device: Failed to set DISKSEQ to '%s': %m", value);
         } else if (streq(key, "DEVLINKS")) {
                 for (const char *p = value;;) {
                         _cleanup_free_ char *word = NULL;
@@ -323,6 +356,10 @@
                         if (r < 0)
                                 return log_device_debug_errno(device, r, "sd-device: Failed to add tag '%s': %m", word);
                 }
+        } else if (streq(key, "UDEV_DATABASE_VERSION")) {
+                r = safe_atou(value, &device->database_version);
+                if (r < 0)
+                        return log_device_debug_errno(device, r, "sd-device: Failed to parse udev database version '%s': %m", value);
         } else {
                 r = device_add_property_internal(device, key, value);
                 if (r < 0)
@@ -403,7 +440,6 @@
 
 int device_new_from_strv(sd_device **ret, char **strv) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-        char **key;
         const char *major = NULL, *minor = NULL;
         int r;
 
@@ -435,7 +471,7 @@
         return 0;
 }
 
-int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) {
+int device_new_from_nulstr(sd_device **ret, char *nulstr, size_t len) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
         const char *major = NULL, *minor = NULL;
         int r;
@@ -452,7 +488,7 @@
                 char *key;
                 const char *end;
 
-                key = (char*) &nulstr[i];
+                key = nulstr + i;
                 end = memchr(key, '\0', len - i);
                 if (!end)
                         return log_device_debug_errno(device, SYNTHETIC_ERRNO(EINVAL),
@@ -485,16 +521,24 @@
 }
 
 static int device_update_properties_bufs(sd_device *device) {
+        _cleanup_free_ char **buf_strv = NULL, *buf_nulstr = NULL;
+        size_t nulstr_len = 0, num = 0;
         const char *val, *prop;
-        _cleanup_free_ char **buf_strv = NULL;
-        _cleanup_free_ uint8_t *buf_nulstr = NULL;
-        size_t nulstr_len = 0, num = 0, i = 0;
 
         assert(device);
 
         if (!device->properties_buf_outdated)
                 return 0;
 
+        /* append udev database version */
+        buf_nulstr = newdup(char, "UDEV_DATABASE_VERSION=" STRINGIFY(LATEST_UDEV_DATABASE_VERSION) "\0",
+                            STRLEN("UDEV_DATABASE_VERSION=" STRINGIFY(LATEST_UDEV_DATABASE_VERSION)) + 2);
+        if (!buf_nulstr)
+                return -ENOMEM;
+
+        nulstr_len += STRLEN("UDEV_DATABASE_VERSION=" STRINGIFY(LATEST_UDEV_DATABASE_VERSION)) + 1;
+        num++;
+
         FOREACH_DEVICE_PROPERTY(device, prop, val) {
                 size_t len = 0;
 
@@ -504,273 +548,98 @@
                 if (!buf_nulstr)
                         return -ENOMEM;
 
-                strscpyl((char *)buf_nulstr + nulstr_len, len + 1, prop, "=", val, NULL);
+                strscpyl(buf_nulstr + nulstr_len, len + 1, prop, "=", val, NULL);
                 nulstr_len += len + 1;
-                ++num;
+                num++;
         }
 
         /* build buf_strv from buf_nulstr */
-        buf_strv = new0(char *, num + 1);
+        buf_strv = new0(char*, num + 1);
         if (!buf_strv)
                 return -ENOMEM;
 
-        NULSTR_FOREACH(val, (char*) buf_nulstr) {
-                buf_strv[i] = (char *) val;
-                assert(i < num);
-                i++;
-        }
+        size_t i = 0;
+        NULSTR_FOREACH(p, buf_nulstr)
+                buf_strv[i++] = p;
+        assert(i == num);
 
         free_and_replace(device->properties_nulstr, buf_nulstr);
         device->properties_nulstr_len = nulstr_len;
         free_and_replace(device->properties_strv, buf_strv);
 
         device->properties_buf_outdated = false;
-
         return 0;
 }
 
-int device_get_properties_nulstr(sd_device *device, const uint8_t **nulstr, size_t *len) {
+int device_get_properties_nulstr(sd_device *device, const char **ret_nulstr, size_t *ret_len) {
         int r;
 
         assert(device);
-        assert(nulstr);
-        assert(len);
 
         r = device_update_properties_bufs(device);
         if (r < 0)
                 return r;
 
-        *nulstr = device->properties_nulstr;
-        *len = device->properties_nulstr_len;
+        if (ret_nulstr)
+                *ret_nulstr = device->properties_nulstr;
+        if (ret_len)
+                *ret_len = device->properties_nulstr_len;
 
         return 0;
 }
 
-int device_get_properties_strv(sd_device *device, char ***strv) {
+int device_get_properties_strv(sd_device *device, char ***ret) {
         int r;
 
         assert(device);
-        assert(strv);
 
         r = device_update_properties_bufs(device);
         if (r < 0)
                 return r;
 
-        *strv = device->properties_strv;
+        if (ret)
+                *ret = device->properties_strv;
 
         return 0;
 }
 
-int device_get_devlink_priority(sd_device *device, int *priority) {
+int device_get_devlink_priority(sd_device *device, int *ret) {
         int r;
 
         assert(device);
-        assert(priority);
 
         r = device_read_db(device);
         if (r < 0)
                 return r;
 
-        *priority = device->devlink_priority;
+        if (ret)
+                *ret = device->devlink_priority;
 
         return 0;
 }
 
-int device_get_watch_handle(sd_device *device) {
-        char path_wd[STRLEN("/run/udev/watch/") + DECIMAL_STR_MAX(int)];
-        _cleanup_free_ char *buf = NULL;
-        const char *id, *path_id;
-        int wd, r;
-
-        assert(device);
-
-        if (device->watch_handle >= 0)
-                return device->watch_handle;
-
-        r = device_get_device_id(device, &id);
-        if (r < 0)
-                return r;
-
-        path_id = strjoina("/run/udev/watch/", id);
-        r = readlink_malloc(path_id, &buf);
-        if (r < 0)
-                return r;
-
-        r = safe_atoi(buf, &wd);
-        if (r < 0)
-                return r;
-
-        if (wd < 0)
-                return -EBADF;
-
-        buf = mfree(buf);
-        xsprintf(path_wd, "/run/udev/watch/%d", wd);
-        r = readlink_malloc(path_wd, &buf);
-        if (r < 0)
-                return r;
-
-        if (!streq(buf, id))
-                return -EBADF;
-
-        return device->watch_handle = wd;
-}
-
-static void device_remove_watch_handle(sd_device *device) {
-        const char *id;
-        int wd;
-
-        assert(device);
-
-        /* First, remove the symlink from handle to device id. */
-        wd = device_get_watch_handle(device);
-        if (wd >= 0) {
-                char path_wd[STRLEN("/run/udev/watch/") + DECIMAL_STR_MAX(int)];
-
-                xsprintf(path_wd, "/run/udev/watch/%d", wd);
-                if (unlink(path_wd) < 0 && errno != ENOENT)
-                        log_device_debug_errno(device, errno,
-                                               "sd-device: failed to remove %s, ignoring: %m",
-                                               path_wd);
-        }
-
-        /* Next, remove the symlink from device id to handle. */
-        if (device_get_device_id(device, &id) >= 0) {
-                const char *path_id;
-
-                path_id = strjoina("/run/udev/watch/", id);
-                if (unlink(path_id) < 0 && errno != ENOENT)
-                        log_device_debug_errno(device, errno,
-                                               "sd-device: failed to remove %s, ignoring: %m",
-                                               path_id);
-        }
-
-        device->watch_handle = -1;
-}
-
-int device_set_watch_handle(sd_device *device, int wd) {
-        char path_wd[STRLEN("/run/udev/watch/") + DECIMAL_STR_MAX(int)];
-        const char *id, *path_id;
+static int device_shallow_clone(sd_device *device, sd_device **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *dest = NULL;
+        const char *val = NULL;
         int r;
 
         assert(device);
-
-        if (wd >= 0 && wd == device->watch_handle)
-                return 0;
-
-        device_remove_watch_handle(device);
-
-        if (wd < 0)
-                /* negative wd means that the caller requests to clear saved watch handle. */
-                return 0;
-
-        r = device_get_device_id(device, &id);
-        if (r < 0)
-                return r;
-
-        path_id = strjoina("/run/udev/watch/", id);
-        xsprintf(path_wd, "/run/udev/watch/%d", wd);
-
-        r = mkdir_parents(path_wd, 0755);
-        if (r < 0)
-                return r;
-
-        if (symlink(id, path_wd) < 0)
-                return -errno;
-
-        if (symlink(path_wd + STRLEN("/run/udev/watch/"), path_id) < 0) {
-                r = -errno;
-                if (unlink(path_wd) < 0 && errno != ENOENT)
-                        log_device_debug_errno(device, errno,
-                                               "sd-device: failed to remove %s, ignoring: %m",
-                                               path_wd);
-                return r;
-        }
-
-        device->watch_handle = wd;
-
-        return 0;
-}
-
-int device_new_from_watch_handle_at(sd_device **ret, int dirfd, int wd) {
-        char path_wd[STRLEN("/run/udev/watch/") + DECIMAL_STR_MAX(int)];
-        _cleanup_free_ char *id = NULL;
-        int r;
-
         assert(ret);
 
-        if (wd < 0)
-                return -EBADF;
-
-        if (dirfd >= 0) {
-                xsprintf(path_wd, "%d", wd);
-                r = readlinkat_malloc(dirfd, path_wd, &id);
-        } else {
-                xsprintf(path_wd, "/run/udev/watch/%d", wd);
-                r = readlink_malloc(path_wd, &id);
-        }
+        r = device_new_aux(&dest);
         if (r < 0)
                 return r;
 
-        return sd_device_new_from_device_id(ret, id);
-}
-
-int device_rename(sd_device *device, const char *name) {
-        _cleanup_free_ char *dirname = NULL;
-        const char *new_syspath, *interface;
-        int r;
-
-        assert(device);
-        assert(name);
-
-        dirname = dirname_malloc(device->syspath);
-        if (!dirname)
-                return -ENOMEM;
-
-        new_syspath = prefix_roota(dirname, name);
-
-        /* the user must trust that the new name is correct */
-        r = device_set_syspath(device, new_syspath, false);
+        r = device_set_syspath(dest, device->syspath, false);
         if (r < 0)
                 return r;
 
-        r = sd_device_get_property_value(device, "INTERFACE", &interface);
-        if (r >= 0) {
-                /* like DEVPATH_OLD, INTERFACE_OLD is not saved to the db, but only stays around for the current event */
-                r = device_add_property_internal(device, "INTERFACE_OLD", interface);
-                if (r < 0)
-                        return r;
-
-                r = device_add_property_internal(device, "INTERFACE", name);
-                if (r < 0)
-                        return r;
-        } else if (r != -ENOENT)
-                return r;
-
-        return 0;
-}
-
-int device_shallow_clone(sd_device *old_device, sd_device **new_device) {
-        _cleanup_(sd_device_unrefp) sd_device *ret = NULL;
-        const char *val;
-        int r;
-
-        assert(old_device);
-        assert(new_device);
-
-        r = device_new_aux(&ret);
-        if (r < 0)
-                return r;
-
-        r = device_set_syspath(ret, old_device->syspath, false);
-        if (r < 0)
-                return r;
-
-        (void) sd_device_get_subsystem(old_device, &val);
-        r = device_set_subsystem(ret, val);
+        (void) sd_device_get_subsystem(device, &val);
+        r = device_set_subsystem(dest, val);
         if (r < 0)
                 return r;
         if (streq_ptr(val, "drivers")) {
-                r = free_and_strdup(&ret->driver_subsystem, old_device->driver_subsystem);
+                r = free_and_strdup(&dest->driver_subsystem, device->driver_subsystem);
                 if (r < 0)
                         return r;
         }
@@ -778,100 +647,47 @@
         /* The device may be already removed. Let's copy minimal set of information to make
          * device_get_device_id() work without uevent file. */
 
-        if (sd_device_get_property_value(old_device, "IFINDEX", &val) >= 0) {
-                r = device_set_ifindex(ret, val);
+        if (sd_device_get_property_value(device, "IFINDEX", &val) >= 0) {
+                r = device_set_ifindex(dest, val);
                 if (r < 0)
                         return r;
         }
 
-        if (sd_device_get_property_value(old_device, "MAJOR", &val) >= 0) {
+        if (sd_device_get_property_value(device, "MAJOR", &val) >= 0) {
                 const char *minor = NULL;
 
-                (void) sd_device_get_property_value(old_device, "MINOR", &minor);
-                r = device_set_devnum(ret, val, minor);
+                (void) sd_device_get_property_value(device, "MINOR", &minor);
+                r = device_set_devnum(dest, val, minor);
                 if (r < 0)
                         return r;
         }
 
-        /* And then read uevent file, but ignore errors, as some devices seem to return a spurious
-         * error on read, e.g. -ENODEV, and even if ifindex or devnum is set in the above,
-         * sd_device_get_ifindex() or sd_device_get_devnum() fails. See. #19788. */
-        (void) device_read_uevent_file(ret);
+        r = device_read_uevent_file(dest);
+        if (r < 0)
+                return r;
 
-        *new_device = TAKE_PTR(ret);
+        *ret = TAKE_PTR(dest);
         return 0;
 }
 
-int device_clone_with_db(sd_device *old_device, sd_device **new_device) {
-        _cleanup_(sd_device_unrefp) sd_device *ret = NULL;
+int device_clone_with_db(sd_device *device, sd_device **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *dest = NULL;
         int r;
 
-        assert(old_device);
-        assert(new_device);
+        assert(device);
+        assert(ret);
 
-        r = device_shallow_clone(old_device, &ret);
+        r = device_shallow_clone(device, &dest);
         if (r < 0)
                 return r;
 
-        r = device_read_db(ret);
+        r = device_read_db(dest);
         if (r < 0)
                 return r;
 
-        ret->sealed = true;
+        dest->sealed = true;
 
-        *new_device = TAKE_PTR(ret);
-
-        return 0;
-}
-
-int device_new_from_synthetic_event(sd_device **new_device, const char *syspath, const char *action) {
-        _cleanup_(sd_device_unrefp) sd_device *ret = NULL;
-        int r;
-
-        assert(new_device);
-        assert(syspath);
-        assert(action);
-
-        r = sd_device_new_from_syspath(&ret, syspath);
-        if (r < 0)
-                return r;
-
-        r = device_read_uevent_file(ret);
-        if (r < 0)
-                return r;
-
-        r = device_set_action(ret, action);
-        if (r < 0)
-                return r;
-
-        *new_device = TAKE_PTR(ret);
-
-        return 0;
-}
-
-int device_copy_properties(sd_device *device_dst, sd_device *device_src) {
-        const char *property, *value;
-        int r;
-
-        assert(device_dst);
-        assert(device_src);
-
-        r = device_properties_prepare(device_src);
-        if (r < 0)
-                return r;
-
-        ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties_db) {
-                r = device_add_property_aux(device_dst, property, value, true);
-                if (r < 0)
-                        return r;
-        }
-
-        ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties) {
-                r = device_add_property_aux(device_dst, property, value, false);
-                if (r < 0)
-                        return r;
-        }
-
+        *ret = TAKE_PTR(dest);
         return 0;
 }
 
@@ -916,15 +732,11 @@
 
         path = strjoina("/run/udev/tags/", tag, "/", id);
 
-        if (add) {
-                r = touch_file(path, true, USEC_INFINITY, UID_INVALID, GID_INVALID, 0444);
-                if (r < 0)
-                        return r;
-        } else {
-                r = unlink(path);
-                if (r < 0 && errno != ENOENT)
-                        return -errno;
-        }
+        if (add)
+                return touch_file(path, true, USEC_INFINITY, UID_INVALID, GID_INVALID, 0444);
+
+        if (unlink(path) < 0 && errno != ENOENT)
+                return -errno;
 
         return 0;
 }
@@ -933,16 +745,14 @@
         const char *tag;
         int r = 0, k;
 
-        if (add && device_old) {
+        if (add && device_old)
                 /* delete possible left-over tags */
-                FOREACH_DEVICE_TAG(device_old, tag) {
+                FOREACH_DEVICE_TAG(device_old, tag)
                         if (!sd_device_has_tag(device, tag)) {
                                 k = device_tag(device_old, tag, false);
                                 if (r >= 0 && k < 0)
                                         r = k;
                         }
-                }
-        }
 
         FOREACH_DEVICE_TAG(device, tag) {
                 k = device_tag(device, tag, add);
@@ -1000,8 +810,7 @@
 
         /* do not store anything for otherwise empty devices */
         if (!has_info && major(device->devnum) == 0 && device->ifindex == 0) {
-                r = unlink(path);
-                if (r < 0 && errno != ENOENT)
+                if (unlink(path) < 0 && errno != ENOENT)
                         return -errno;
 
                 return 0;
@@ -1016,22 +825,11 @@
         if (r < 0)
                 return r;
 
-        /*
-         * set 'sticky' bit to indicate that we should not clean the
-         * database when we transition from initramfs to the real root
-         */
-        if (device->db_persist) {
-                r = fchmod(fileno(f), 01644);
-                if (r < 0) {
-                        r = -errno;
-                        goto fail;
-                }
-        } else {
-                r = fchmod(fileno(f), 0644);
-                if (r < 0) {
-                        r = -errno;
-                        goto fail;
-                }
+        /* set 'sticky' bit to indicate that we should not clean the database when we transition from initrd
+         * to the real root */
+        if (fchmod(fileno(f), device->db_persist ? 01644 : 0644) < 0) {
+                r = -errno;
+                goto fail;
         }
 
         if (has_info) {
@@ -1068,8 +866,7 @@
         if (r < 0)
                 goto fail;
 
-        r = rename(path_tmp, path);
-        if (r < 0) {
+        if (rename(path_tmp, path) < 0) {
                 r = -errno;
                 goto fail;
         }
@@ -1099,8 +896,7 @@
 
         path = strjoina("/run/udev/data/", id);
 
-        r = unlink(path);
-        if (r < 0 && errno != ENOENT)
+        if (unlink(path) < 0 && errno != ENOENT)
                 return -errno;
 
         return 0;
diff --git a/src/libsystemd/sd-device/device-private.h b/src/libsystemd/sd-device/device-private.h
index 9bb5eff..740c584 100644
--- a/src/libsystemd/sd-device/device-private.h
+++ b/src/libsystemd/sd-device/device-private.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <dirent.h>
 #include <inttypes.h>
 #include <stdbool.h>
 #include <sys/stat.h>
@@ -10,30 +11,37 @@
 
 #include "macro.h"
 
-int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len);
+int device_new_from_mode_and_devnum(sd_device **ret, mode_t mode, dev_t devnum);
+int device_new_from_nulstr(sd_device **ret, char *nulstr, size_t len);
 int device_new_from_strv(sd_device **ret, char **strv);
-int device_new_from_watch_handle_at(sd_device **ret, int dirfd, int wd);
-static inline int device_new_from_watch_handle(sd_device **ret, int wd) {
-        return device_new_from_watch_handle_at(ret, -1, wd);
-}
 
+int device_opendir(sd_device *device, const char *subdir, DIR **ret);
+
+int device_get_property_bool(sd_device *device, const char *key);
+int device_get_property_int(sd_device *device, const char *key, int *ret);
+int device_get_sysattr_int(sd_device *device, const char *sysattr, int *ret_value);
+int device_get_sysattr_unsigned(sd_device *device, const char *sysattr, unsigned *ret_value);
+int device_get_sysattr_bool(sd_device *device, const char *sysattr);
 int device_get_device_id(sd_device *device, const char **ret);
+int device_get_devlink_priority(sd_device *device, int *ret);
+int device_get_devnode_mode(sd_device *device, mode_t *ret);
+int device_get_devnode_uid(sd_device *device, uid_t *ret);
+int device_get_devnode_gid(sd_device *device, gid_t *ret);
 
-int device_get_devlink_priority(sd_device *device, int *priority);
-int device_get_watch_handle(sd_device *device);
-int device_get_devnode_mode(sd_device *device, mode_t *mode);
-int device_get_devnode_uid(sd_device *device, uid_t *uid);
-int device_get_devnode_gid(sd_device *device, gid_t *gid);
+void device_clear_sysattr_cache(sd_device *device);
+int device_cache_sysattr_value(sd_device *device, const char *key, char *value);
+int device_get_cached_sysattr_value(sd_device *device, const char *key, const char **ret_value);
 
 void device_seal(sd_device *device);
 void device_set_is_initialized(sd_device *device);
-int device_set_watch_handle(sd_device *device, int wd);
 void device_set_db_persist(sd_device *device);
 void device_set_devlink_priority(sd_device *device, int priority);
 int device_ensure_usec_initialized(sd_device *device, sd_device *device_old);
 int device_add_devlink(sd_device *device, const char *devlink);
+void device_remove_devlink(sd_device *device, const char *devlink);
 bool device_has_devlink(sd_device *device, const char *devlink);
 int device_add_property(sd_device *device, const char *property, const char *value);
+int device_add_propertyf(sd_device *device, const char *key, const char *format, ...) _printf_(3, 4);
 int device_add_tag(sd_device *device, const char *tag, bool both);
 void device_remove_tag(sd_device *device, const char *tag);
 void device_cleanup_tags(sd_device *device);
@@ -44,14 +52,10 @@
 uint64_t device_get_devlinks_generation(sd_device *device);
 
 int device_properties_prepare(sd_device *device);
-int device_get_properties_nulstr(sd_device *device, const uint8_t **nulstr, size_t *len);
-int device_get_properties_strv(sd_device *device, char ***strv);
+int device_get_properties_nulstr(sd_device *device, const char **ret_nulstr, size_t *ret_len);
+int device_get_properties_strv(sd_device *device, char ***ret);
 
-int device_rename(sd_device *device, const char *name);
-int device_shallow_clone(sd_device *old_device, sd_device **new_device);
-int device_clone_with_db(sd_device *old_device, sd_device **new_device);
-int device_copy_properties(sd_device *device_dst, sd_device *device_src);
-int device_new_from_synthetic_event(sd_device **new_device, const char *syspath, const char *action);
+int device_clone_with_db(sd_device *device, sd_device **ret);
 
 int device_tag_index(sd_device *dev, sd_device *dev_old, bool add);
 int device_update_db(sd_device *device);
@@ -62,6 +66,9 @@
         return device_read_db_internal(device, false);
 }
 
+int device_read_uevent_file(sd_device *device);
+
+int device_set_action(sd_device *device, sd_device_action_t a);
 sd_device_action_t device_action_from_string(const char *s) _pure_;
 const char *device_action_to_string(sd_device_action_t a) _const_;
 void dump_device_action_table(void);
diff --git a/src/libsystemd/sd-device/device-util.c b/src/libsystemd/sd-device/device-util.c
index 616c16c..47c5d98 100644
--- a/src/libsystemd/sd-device/device-util.c
+++ b/src/libsystemd/sd-device/device-util.c
@@ -1,63 +1,141 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <fnmatch.h>
-
+#include "device-private.h"
 #include "device-util.h"
-#include "path-util.h"
+#include "devnum-util.h"
+#include "fd-util.h"
+#include "string-util.h"
+#include "strv.h"
 
-static bool device_match_sysattr_value(sd_device *device, const char *sysattr, const char *match_value) {
-        const char *value;
+int devname_from_devnum(mode_t mode, dev_t devnum, char **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        _cleanup_free_ char *s = NULL;
+        const char *devname;
+        int r;
 
-        assert(device);
-        assert(sysattr);
+        assert(ret);
 
-        if (sd_device_get_sysattr_value(device, sysattr, &value) < 0)
-                return false;
+        if (major(devnum) == 0 && minor(devnum) == 0)
+                return device_path_make_inaccessible(mode, ret);
 
-        if (!match_value)
-                return true;
+        r = device_new_from_mode_and_devnum(&dev, mode, devnum);
+        if (r < 0)
+                return r;
 
-        if (fnmatch(match_value, value, 0) == 0)
-                return true;
+        r = sd_device_get_devname(dev, &devname);
+        if (r < 0)
+                return r;
 
-        return false;
+        s = strdup(devname);
+        if (!s)
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(s);
+        return 0;
 }
 
-bool device_match_sysattr(sd_device *device, Hashmap *match_sysattr, Hashmap *nomatch_sysattr) {
-        const char *sysattr;
-        const char *value;
+int device_open_from_devnum(mode_t mode, dev_t devnum, int flags, char **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        int r;
 
-        assert(device);
+        r = device_new_from_mode_and_devnum(&dev, mode, devnum);
+        if (r < 0)
+                return r;
 
-        HASHMAP_FOREACH_KEY(value, sysattr, match_sysattr)
-                if (!device_match_sysattr_value(device, sysattr, value))
-                        return false;
+        fd = sd_device_open(dev, flags);
+        if (fd < 0)
+                return fd;
 
-        HASHMAP_FOREACH_KEY(value, sysattr, nomatch_sysattr)
-                if (device_match_sysattr_value(device, sysattr, value))
-                        return false;
+        if (ret) {
+                const char *devname;
+                char *s;
 
-        return true;
+                r = sd_device_get_devname(dev, &devname);
+                if (r < 0)
+                        return r;
+
+                s = strdup(devname);
+                if (!s)
+                        return -ENOMEM;
+
+                *ret = s;
+        }
+
+        return TAKE_FD(fd);
 }
 
-bool device_match_parent(sd_device *device, Set *match_parent, Set *nomatch_parent) {
-        const char *syspath_parent, *syspath;
+static int add_string_field(
+                sd_device *device,
+                const char *field,
+                int (*func)(sd_device *dev, const char **s),
+                char ***strv) {
+
+        const char *s;
+        int r;
+
+        assert(device);
+        assert(field);
+        assert(func);
+        assert(strv);
+
+        r = func(device, &s);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"%s\" property, ignoring: %m", field);
+        if (r >= 0)
+                (void) strv_extend_assignment(strv, field, s);
+
+        return 0;
+}
+
+char** device_make_log_fields(sd_device *device) {
+        _cleanup_strv_free_ char **strv = NULL;
+        dev_t devnum;
+        int ifindex;
+        sd_device_action_t action;
+        uint64_t seqnum, diskseq;
+        int r;
 
         assert(device);
 
-        if (sd_device_get_syspath(device, &syspath) < 0)
-                return false;
+        (void) add_string_field(device, "SYSPATH", sd_device_get_syspath, &strv);
+        (void) add_string_field(device, "SUBSYSTEM", sd_device_get_subsystem, &strv);
+        (void) add_string_field(device, "DEVTYPE", sd_device_get_devtype, &strv);
+        (void) add_string_field(device, "DRIVER", sd_device_get_driver, &strv);
+        (void) add_string_field(device, "DEVPATH", sd_device_get_devpath, &strv);
+        (void) add_string_field(device, "DEVNAME", sd_device_get_devname, &strv);
+        (void) add_string_field(device, "SYSNAME", sd_device_get_sysname, &strv);
+        (void) add_string_field(device, "SYSNUM", sd_device_get_sysnum, &strv);
 
-        SET_FOREACH(syspath_parent, nomatch_parent)
-                if (path_startswith(syspath, syspath_parent))
-                        return false;
+        r = sd_device_get_devnum(device, &devnum);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"DEVNUM\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "DEVNUM="DEVNUM_FORMAT_STR, DEVNUM_FORMAT_VAL(devnum));
 
-        if (set_isempty(match_parent))
-                return true;
+        r = sd_device_get_ifindex(device, &ifindex);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"IFINDEX\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "IFINDEX=%i", ifindex);
 
-        SET_FOREACH(syspath_parent, match_parent)
-                if (path_startswith(syspath, syspath_parent))
-                        return true;
+        r = sd_device_get_action(device, &action);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"ACTION\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "ACTION=%s", device_action_to_string(action));
 
-        return false;
+        r = sd_device_get_seqnum(device, &seqnum);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"SEQNUM\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "SEQNUM=%"PRIu64, seqnum);
+
+        r = sd_device_get_diskseq(device, &diskseq);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"DISKSEQ\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "DISKSEQ=%"PRIu64, diskseq);
+
+        return TAKE_PTR(strv);
 }
diff --git a/src/libsystemd/sd-device/device-util.h b/src/libsystemd/sd-device/device-util.h
index e2adfe8..a1b5e91 100644
--- a/src/libsystemd/sd-device/device-util.h
+++ b/src/libsystemd/sd-device/device-util.h
@@ -2,13 +2,16 @@
 #pragma once
 
 #include <stdbool.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 
 #include "sd-device.h"
 
-#include "hashmap.h"
 #include "log.h"
 #include "macro.h"
-#include "set.h"
+
+#define device_unref_and_replace(a, b)                                  \
+        unref_and_replace_full(a, b, sd_device_ref, sd_device_unref)
 
 #define FOREACH_DEVICE_PROPERTY(device, key, value)                \
         for (key = sd_device_get_property_first(device, &(value)); \
@@ -35,6 +38,17 @@
              devlink;                                   \
              devlink = sd_device_get_devlink_next(device))
 
+#define _FOREACH_DEVICE_CHILD(device, child, suffix_ptr)                \
+        for (child = sd_device_get_child_first(device, suffix_ptr);     \
+             child;                                                     \
+             child = sd_device_get_child_next(device, suffix_ptr))
+
+#define FOREACH_DEVICE_CHILD(device, child)                             \
+        _FOREACH_DEVICE_CHILD(device, child, NULL)
+
+#define FOREACH_DEVICE_CHILD_WITH_SUFFIX(device, child, suffix)         \
+        _FOREACH_DEVICE_CHILD(device, child, &suffix)
+
 #define FOREACH_DEVICE(enumerator, device)                               \
         for (device = sd_device_enumerator_get_device_first(enumerator); \
              device;                                                     \
@@ -79,5 +93,11 @@
 #define log_device_warning_errno(device, error, ...) log_device_full_errno(device, LOG_WARNING, error, __VA_ARGS__)
 #define log_device_error_errno(device, error, ...)   log_device_full_errno(device, LOG_ERR, error, __VA_ARGS__)
 
-bool device_match_sysattr(sd_device *device, Hashmap *match_sysattr, Hashmap *nomatch_sysattr);
-bool device_match_parent(sd_device *device, Set *match_parent, Set *nomatch_parent);
+int devname_from_devnum(mode_t mode, dev_t devnum, char **ret);
+static inline int devname_from_stat_rdev(const struct stat *st, char **ret) {
+        assert(st);
+        return devname_from_devnum(st->st_mode, st->st_rdev, ret);
+}
+int device_open_from_devnum(mode_t mode, dev_t devnum, int flags, char **ret);
+
+char** device_make_log_fields(sd_device *device);
diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c
index 418a5b1..8c65ee3 100644
--- a/src/libsystemd/sd-device/sd-device.c
+++ b/src/libsystemd/sd-device/sd-device.c
@@ -8,10 +8,13 @@
 #include "sd-device.h"
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "device-internal.h"
 #include "device-private.h"
 #include "device-util.h"
+#include "devnum-util.h"
 #include "dirent-util.h"
+#include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
@@ -19,18 +22,17 @@
 #include "hashmap.h"
 #include "id128-util.h"
 #include "macro.h"
+#include "missing_magic.h"
 #include "netlink-util.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "set.h"
 #include "socket-util.h"
-#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "strxcpyx.h"
 #include "user-util.h"
-#include "util.h"
 
 int device_new_aux(sd_device **ret) {
         sd_device *device;
@@ -43,7 +45,6 @@
 
         *device = (sd_device) {
                 .n_ref = 1,
-                .watch_handle = -1,
                 .devmode = MODE_INVALID,
                 .devuid = UID_INVALID,
                 .devgid = GID_INVALID,
@@ -76,6 +77,7 @@
         set_free(device->all_tags);
         set_free(device->current_tags);
         set_free(device->devlinks);
+        hashmap_free(device->children);
 
         return mfree(device);
 }
@@ -142,16 +144,17 @@
         assert(device);
         assert(_syspath);
 
-        /* must be a subdirectory of /sys */
-        if (!path_startswith(_syspath, "/sys/"))
-                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "sd-device: Syspath '%s' is not a subdirectory of /sys",
-                                       _syspath);
-
         if (verify) {
-                r = chase_symlinks(_syspath, NULL, 0, &syspath, NULL);
+                _cleanup_close_ int fd = -EBADF;
+
+                /* The input path maybe a symlink located outside of /sys. Let's try to chase the symlink at first.
+                 * The primary usecase is that e.g. /proc/device-tree is a symlink to /sys/firmware/devicetree/base.
+                 * By chasing symlinks in the path at first, we can call sd_device_new_from_path() with such path. */
+                r = chase_symlinks(_syspath, NULL, 0, &syspath, &fd);
                 if (r == -ENOENT)
-                        return -ENODEV; /* the device does not exist (any more?) */
+                         /* the device does not exist (any more?) */
+                        return log_debug_errno(SYNTHETIC_ERRNO(ENODEV),
+                                               "sd-device: Failed to chase symlinks in \"%s\".", _syspath);
                 if (r < 0)
                         return log_debug_errno(r, "sd-device: Failed to get target of '%s': %m", _syspath);
 
@@ -172,62 +175,102 @@
 
                         new_syspath = path_join("/sys", p);
                         if (!new_syspath)
-                                return -ENOMEM;
+                                return log_oom_debug();
 
                         free_and_replace(syspath, new_syspath);
                         path_simplify(syspath);
                 }
 
-                if (path_startswith(syspath,  "/sys/devices/")) {
-                        char *path;
+                if (path_startswith(syspath, "/sys/devices/")) {
+                        /* For proper devices, stricter rules apply: they must have a 'uevent' file,
+                         * otherwise we won't allow them */
 
-                        /* all 'devices' require an 'uevent' file */
-                        path = strjoina(syspath, "/uevent");
-                        if (access(path, F_OK) < 0) {
+                        if (faccessat(fd, "uevent", F_OK, 0) < 0) {
                                 if (errno == ENOENT)
-                                        /* this is not a valid device */
-                                        return -ENODEV;
+                                        /* This is not a valid device.  Note, this condition is quite often
+                                         * satisfied when enumerating devices or finding a parent device.
+                                         * Hence, use log_trace_errno() here. */
+                                        return log_trace_errno(SYNTHETIC_ERRNO(ENODEV),
+                                                               "sd-device: the uevent file \"%s/uevent\" does not exist.", syspath);
+                                if (errno == ENOTDIR)
+                                        /* Not actually a directory. */
+                                        return log_debug_errno(SYNTHETIC_ERRNO(ENODEV),
+                                                               "sd-device: the syspath \"%s\" is not a directory.", syspath);
 
-                                return log_debug_errno(errno, "sd-device: cannot access uevent file for %s: %m", syspath);
+                                return log_debug_errno(errno, "sd-device: cannot find uevent file for %s: %m", syspath);
                         }
                 } else {
-                        /* everything else just needs to be a directory */
-                        if (!is_dir(syspath, false))
-                                return -ENODEV;
+                        struct stat st;
+
+                        /* For everything else lax rules apply: they just need to be a directory */
+
+                        if (fstat(fd, &st) < 0)
+                                return log_debug_errno(errno, "sd-device: failed to check if syspath \"%s\" is a directory: %m", syspath);
+                        if (!S_ISDIR(st.st_mode))
+                                return log_debug_errno(SYNTHETIC_ERRNO(ENODEV),
+                                                       "sd-device: the syspath \"%s\" is not a directory.", syspath);
+                }
+
+                /* Only operate on sysfs, i.e. refuse going down into /sys/fs/cgroup/ or similar places where
+                 * things are not arranged as kobjects in kernel, and hence don't necessarily have
+                 * kobject/attribute structure. */
+                r = getenv_bool_secure("SYSTEMD_DEVICE_VERIFY_SYSFS");
+                if (r < 0 && r != -ENXIO)
+                        log_debug_errno(r, "Failed to parse $SYSTEMD_DEVICE_VERIFY_SYSFS value: %m");
+                if (r != 0) {
+                        r = fd_is_fs_type(fd, SYSFS_MAGIC);
+                        if (r < 0)
+                                return log_debug_errno(r, "sd-device: failed to check if syspath \"%s\" is backed by sysfs.", syspath);
+                        if (r == 0)
+                                return log_debug_errno(SYNTHETIC_ERRNO(ENODEV),
+                                                       "sd-device: the syspath \"%s\" is outside of sysfs, refusing.", syspath);
                 }
         } else {
+                /* must be a subdirectory of /sys */
+                if (!path_startswith(_syspath, "/sys/"))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "sd-device: Syspath '%s' is not a subdirectory of /sys",
+                                               _syspath);
+
                 syspath = strdup(_syspath);
                 if (!syspath)
-                        return -ENOMEM;
+                        return log_oom_debug();
+
+                path_simplify(syspath);
         }
 
-        devpath = syspath + STRLEN("/sys");
-
+        assert_se(devpath = startswith(syspath, "/sys"));
         if (devpath[0] != '/')
-                /* '/sys' alone is not a valid device path */
-                return -ENODEV;
+                return log_debug_errno(SYNTHETIC_ERRNO(ENODEV), "sd-device: \"/sys\" alone is not a valid device path.");
 
         r = device_add_property_internal(device, "DEVPATH", devpath);
         if (r < 0)
-                return r;
+                return log_debug_errno(r, "sd-device: Failed to add \"DEVPATH\" property for device \"%s\": %m", syspath);
 
         free_and_replace(device->syspath, syspath);
         device->devpath = devpath;
+
+        /* Unset sysname and sysnum, they will be assigned when requested. */
+        device->sysnum = NULL;
+        device->sysname = mfree(device->sysname);
         return 0;
 }
 
-_public_ int sd_device_new_from_syspath(sd_device **ret, const char *syspath) {
+static int device_new_from_syspath(sd_device **ret, const char *syspath, bool strict) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
         int r;
 
         assert_return(ret, -EINVAL);
         assert_return(syspath, -EINVAL);
 
+        if (strict && !path_startswith(syspath, "/sys/"))
+                return -EINVAL;
+
         r = device_new_aux(&device);
         if (r < 0)
                 return r;
 
-        r = device_set_syspath(device, syspath, true);
+        r = device_set_syspath(device, syspath, /* verify= */ true);
         if (r < 0)
                 return r;
 
@@ -235,18 +278,59 @@
         return 0;
 }
 
-_public_ int sd_device_new_from_devnum(sd_device **ret, char type, dev_t devnum) {
-        char id[DECIMAL_STR_MAX(unsigned) * 2 + 1], *syspath;
+_public_ int sd_device_new_from_syspath(sd_device **ret, const char *syspath) {
+        return device_new_from_syspath(ret, syspath, /* strict = */ true);
+}
 
+int device_new_from_mode_and_devnum(sd_device **ret, mode_t mode, dev_t devnum) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        _cleanup_free_ char *syspath = NULL;
+        const char *t, *subsystem = NULL;
+        dev_t n;
+        int r;
+
+        assert(ret);
+
+        if (S_ISCHR(mode))
+                t = "char";
+        else if (S_ISBLK(mode))
+                t = "block";
+        else
+                return -ENOTTY;
+
+        if (major(devnum) == 0)
+                return -ENODEV;
+
+        if (asprintf(&syspath, "/sys/dev/%s/%u:%u", t, major(devnum), minor(devnum)) < 0)
+                return -ENOMEM;
+
+        r = sd_device_new_from_syspath(&dev, syspath);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_devnum(dev, &n);
+        if (r == -ENOENT)
+                return -ENXIO;
+        if (r < 0)
+                return r;
+        if (n != devnum)
+                return -ENXIO;
+
+        r = sd_device_get_subsystem(dev, &subsystem);
+        if (r < 0 && r != -ENOENT)
+                return r;
+        if (streq_ptr(subsystem, "block") != !!S_ISBLK(mode))
+                return -ENXIO;
+
+        *ret = TAKE_PTR(dev);
+        return 0;
+}
+
+_public_ int sd_device_new_from_devnum(sd_device **ret, char type, dev_t devnum) {
         assert_return(ret, -EINVAL);
         assert_return(IN_SET(type, 'b', 'c'), -EINVAL);
 
-        /* use /sys/dev/{block,char}/<maj>:<min> link */
-        xsprintf(id, "%u:%u", major(devnum), minor(devnum));
-
-        syspath = strjoina("/sys/dev/", (type == 'b' ? "block" : "char"), "/", id);
-
-        return sd_device_new_from_syspath(ret, syspath);
+        return device_new_from_mode_and_devnum(ret, type == 'b' ? S_IFBLK : S_IFCHR, devnum);
 }
 
 static int device_new_from_main_ifname(sd_device **ret, const char *ifname) {
@@ -284,15 +368,30 @@
 }
 
 _public_ int sd_device_new_from_ifindex(sd_device **ret, int ifindex) {
-        char ifname[IF_NAMESIZE + 1];
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        char ifname[IF_NAMESIZE];
+        int r, i;
 
         assert_return(ret, -EINVAL);
         assert_return(ifindex > 0, -EINVAL);
 
-        if (!format_ifname(ifindex, ifname))
+        if (format_ifname(ifindex, ifname) < 0)
                 return -ENODEV;
 
-        return device_new_from_main_ifname(ret, ifname);
+        r = device_new_from_main_ifname(&dev, ifname);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_ifindex(dev, &i);
+        if (r == -ENOENT)
+                return -ENXIO;
+        if (r < 0)
+                return r;
+        if (i != ifindex)
+                return -ENXIO;
+
+        *ret = TAKE_PTR(dev);
+        return 0;
 }
 
 static int device_strjoin_new(
@@ -321,7 +420,6 @@
                 const char *subsystem,
                 const char *sysname) {
 
-        const char *s;
         char *name;
         int r;
 
@@ -329,19 +427,21 @@
         assert_return(path_is_normalized(subsystem), -EINVAL);
         assert_return(path_is_normalized(sysname), -EINVAL);
 
-        if (streq(subsystem, "subsystem")) {
+        /* translate sysname back to sysfs filename */
+        name = strdupa_safe(sysname);
+        string_replace_char(name, '/', '!');
 
-                FOREACH_STRING(s, "/sys/subsystem/", "/sys/bus/", "/sys/class/") {
-                        r = device_strjoin_new(s, sysname, NULL, NULL, ret);
+        if (streq(subsystem, "subsystem")) {
+                FOREACH_STRING(s, "/sys/bus/", "/sys/class/") {
+                        r = device_strjoin_new(s, name, NULL, NULL, ret);
                         if (r < 0)
                                 return r;
                         if (r > 0)
                                 return 0;
                 }
 
-        } else  if (streq(subsystem, "module")) {
-
-                r = device_strjoin_new("/sys/module/", sysname, NULL, NULL, ret);
+        } else if (streq(subsystem, "module")) {
+                r = device_strjoin_new("/sys/module/", name, NULL, NULL, ret);
                 if (r < 0)
                         return r;
                 if (r > 0)
@@ -350,36 +450,28 @@
         } else if (streq(subsystem, "drivers")) {
                 const char *sep;
 
-                sep = strchr(sysname, ':');
+                sep = strchr(name, ':');
                 if (sep && sep[1] != '\0') { /* Require ":" and something non-empty after that. */
-                        const char *subsys;
 
-                        subsys = memdupa_suffix0(sysname, sep - sysname);
+                        const char *subsys = memdupa_suffix0(name, sep - name);
                         sep++;
 
-                        FOREACH_STRING(s, "/sys/subsystem/", "/sys/bus/") {
-                                r = device_strjoin_new(s, subsys, "/drivers/", sep, ret);
-                                if (r < 0)
-                                        return r;
-                                if (r > 0)
-                                        return 0;
-                        }
+                        if (streq(sep, "drivers")) /* If the sysname is "drivers", then it's the drivers directory itself that is meant. */
+                                r = device_strjoin_new("/sys/bus/", subsys, "/drivers", NULL, ret);
+                        else
+                                r = device_strjoin_new("/sys/bus/", subsys, "/drivers/", sep, ret);
+                        if (r < 0)
+                                return r;
+                        if (r > 0)
+                                return 0;
                 }
         }
 
-        /* translate sysname back to sysfs filename */
-        name = strdupa(sysname);
-        for (size_t i = 0; name[i]; i++)
-                if (name[i] == '/')
-                        name[i] = '!';
-
-        FOREACH_STRING(s, "/sys/subsystem/", "/sys/bus/") {
-                r = device_strjoin_new(s, subsystem, "/devices/", name, ret);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        return 0;
-        }
+        r = device_strjoin_new("/sys/bus/", subsystem, "/devices/", name, ret);
+        if (r < 0)
+                return r;
+        if (r > 0)
+                return 0;
 
         r = device_strjoin_new("/sys/class/", subsystem, "/", name, ret);
         if (r < 0)
@@ -387,7 +479,7 @@
         if (r > 0)
                 return 0;
 
-        r = device_strjoin_new("/sys/firmware/", subsystem, "/", sysname, ret);
+        r = device_strjoin_new("/sys/firmware/", subsystem, "/", name, ret);
         if (r < 0)
                 return r;
         if (r > 0)
@@ -397,19 +489,47 @@
 }
 
 _public_ int sd_device_new_from_stat_rdev(sd_device **ret, const struct stat *st) {
-        char type;
-
         assert_return(ret, -EINVAL);
         assert_return(st, -EINVAL);
 
-        if (S_ISBLK(st->st_mode))
-                type = 'b';
-        else if (S_ISCHR(st->st_mode))
-                type = 'c';
-        else
-                return -ENOTTY;
+        return device_new_from_mode_and_devnum(ret, st->st_mode, st->st_rdev);
+}
 
-        return sd_device_new_from_devnum(ret, type, st->st_rdev);
+_public_ int sd_device_new_from_devname(sd_device **ret, const char *devname) {
+        struct stat st;
+        dev_t devnum;
+        mode_t mode;
+
+        assert_return(ret, -EINVAL);
+        assert_return(devname, -EINVAL);
+
+        /* This function actually accepts both devlinks and devnames, i.e. both symlinks and device
+         * nodes below /dev/. */
+
+        /* Also ignore when the specified path is "/dev". */
+        if (isempty(path_startswith(devname, "/dev")))
+                return -EINVAL;
+
+        if (device_path_parse_major_minor(devname, &mode, &devnum) >= 0)
+                /* Let's shortcut when "/dev/block/maj:min" or "/dev/char/maj:min" is specified.
+                 * In that case, we can directly convert the path to syspath, hence it is not necessary
+                 * that the specified path exists. So, this works fine without udevd being running. */
+                return device_new_from_mode_and_devnum(ret, mode, devnum);
+
+        if (stat(devname, &st) < 0)
+                return ERRNO_IS_DEVICE_ABSENT(errno) ? -ENODEV : -errno;
+
+        return sd_device_new_from_stat_rdev(ret, &st);
+}
+
+_public_ int sd_device_new_from_path(sd_device **ret, const char *path) {
+        assert_return(ret, -EINVAL);
+        assert_return(path, -EINVAL);
+
+        if (path_startswith(path, "/dev"))
+                return sd_device_new_from_devname(ret, path);
+
+        return device_new_from_syspath(ret, path, /* strict = */ false);
 }
 
 int device_set_devtype(sd_device *device, const char *devtype) {
@@ -505,11 +625,15 @@
                 return r;
         if (maj == 0)
                 return 0;
+        if (!DEVICE_MAJOR_VALID(maj))
+                return -EINVAL;
 
         if (minor) {
                 r = safe_atou(minor, &min);
                 if (r < 0)
                         return r;
+                if (!DEVICE_MINOR_VALID(min))
+                        return -EINVAL;
         }
 
         r = device_add_property_internal(device, "MAJOR", major);
@@ -527,40 +651,57 @@
         return 0;
 }
 
-static int handle_uevent_line(sd_device *device, const char *key, const char *value, const char **major, const char **minor) {
+int device_set_diskseq(sd_device *device, const char *str) {
+        uint64_t diskseq;
         int r;
 
         assert(device);
+        assert(str);
+
+        r = safe_atou64(str, &diskseq);
+        if (r < 0)
+                return r;
+        if (diskseq == 0)
+                return -EINVAL;
+
+        r = device_add_property_internal(device, "DISKSEQ", str);
+        if (r < 0)
+                return r;
+
+        device->diskseq = diskseq;
+
+        return 0;
+}
+
+static int handle_uevent_line(
+                sd_device *device,
+                const char *key,
+                const char *value,
+                const char **major,
+                const char **minor) {
+
+        assert(device);
         assert(key);
         assert(value);
         assert(major);
         assert(minor);
 
-        if (streq(key, "DEVTYPE")) {
-                r = device_set_devtype(device, value);
-                if (r < 0)
-                        return r;
-        } else if (streq(key, "IFINDEX")) {
-                r = device_set_ifindex(device, value);
-                if (r < 0)
-                        return r;
-        } else if (streq(key, "DEVNAME")) {
-                r = device_set_devname(device, value);
-                if (r < 0)
-                        return r;
-        } else if (streq(key, "DEVMODE")) {
-                r = device_set_devmode(device, value);
-                if (r < 0)
-                        return r;
-        } else if (streq(key, "MAJOR"))
+        if (streq(key, "DEVTYPE"))
+                return device_set_devtype(device, value);
+        if (streq(key, "IFINDEX"))
+                return device_set_ifindex(device, value);
+        if (streq(key, "DEVNAME"))
+                return device_set_devname(device, value);
+        if (streq(key, "DEVMODE"))
+                return device_set_devmode(device, value);
+        if (streq(key, "DISKSEQ"))
+                return device_set_diskseq(device, value);
+        if (streq(key, "MAJOR"))
                 *major = value;
         else if (streq(key, "MINOR"))
                 *minor = value;
-        else {
-                r = device_add_property_internal(device, key, value);
-                if (r < 0)
-                        return r;
-        }
+        else
+                return device_add_property_internal(device, key, value);
 
         return 0;
 }
@@ -594,11 +735,14 @@
         path = strjoina(syspath, "/uevent");
 
         r = read_full_virtual_file(path, &uevent, &uevent_len);
-        if (IN_SET(r, -EACCES, -ENOENT))
-                /* The uevent files may be write-only, or the device may not have uevent file. */
-                return 0;
-        if (r < 0)
+        if (r < 0) {
+                /* The uevent files may be write-only, the device may be already removed, or the device
+                 * may not have the uevent file. */
+                if (r == -EACCES || ERRNO_IS_DEVICE_ABSENT(r))
+                        return 0;
+
                 return log_device_debug_errno(device, r, "sd-device: Failed to read uevent file '%s': %m", path);
+        }
 
         for (size_t i = 0; i < uevent_len; i++)
                 switch (state) {
@@ -641,13 +785,13 @@
 
                         break;
                 default:
-                        assert_not_reached("Invalid state when parsing uevent file");
+                        assert_not_reached();
                 }
 
         if (major) {
                 r = device_set_devnum(device, major, minor);
                 if (r < 0)
-                        log_device_debug_errno(device, r, "sd-device: Failed to set 'MAJOR=%s' or 'MINOR=%s' from '%s', ignoring: %m", major, minor, path);
+                        log_device_debug_errno(device, r, "sd-device: Failed to set 'MAJOR=%s' or 'MINOR=%s' from '%s', ignoring: %m", major, strna(minor), path);
         }
 
         return 0;
@@ -685,7 +829,7 @@
                 if (isempty(id))
                         return -EINVAL;
 
-                r = parse_dev(id + 1, &devt);
+                r = parse_devnum(id + 1, &devt);
                 if (r < 0)
                         return r;
 
@@ -730,9 +874,160 @@
         return 0;
 }
 
+DEFINE_PRIVATE_HASH_OPS_FULL(
+        device_by_path_hash_ops,
+        char, path_hash_func, path_compare, free,
+        sd_device, sd_device_unref);
+
+static int device_enumerate_children_internal(sd_device *device, const char *subdir, Set **stack, Hashmap **children) {
+        _cleanup_closedir_ DIR *dir = NULL;
+        int r;
+
+        assert(device);
+        assert(stack);
+        assert(children);
+
+        r = device_opendir(device, subdir, &dir);
+        if (r < 0)
+                return r;
+
+        FOREACH_DIRENT_ALL(de, dir, return -errno) {
+                _cleanup_(sd_device_unrefp) sd_device *child = NULL;
+                _cleanup_free_ char *p = NULL;
+
+                if (dot_or_dot_dot(de->d_name))
+                        continue;
+
+                if (!IN_SET(de->d_type, DT_LNK, DT_DIR))
+                        continue;
+
+                if (subdir)
+                        p = path_join(subdir, de->d_name);
+                else
+                        p = strdup(de->d_name);
+                if (!p)
+                        return -ENOMEM;
+
+                /* Try to create child device. */
+                r = sd_device_new_child(&child, device, p);
+                if (r >= 0) {
+                        /* OK, this is a child device, saving it. */
+                        r = hashmap_ensure_put(children, &device_by_path_hash_ops, p, child);
+                        if (r < 0)
+                                return r;
+
+                        TAKE_PTR(p);
+                        TAKE_PTR(child);
+                } else if (r == -ENODEV) {
+                        /* This is not a child device. Push the sub-directory into stack, and read it later. */
+
+                        if (de->d_type == DT_LNK)
+                                /* Do not follow symlinks, otherwise, we will enter an infinite loop, e.g.,
+                                 * /sys/class/block/nvme0n1/subsystem/nvme0n1/subsystem/nvme0n1/subsystem/… */
+                                continue;
+
+                        r = set_ensure_consume(stack, &path_hash_ops_free, TAKE_PTR(p));
+                        if (r < 0)
+                                return r;
+                } else
+                        return r;
+        }
+
+        return 0;
+}
+
+static int device_enumerate_children(sd_device *device) {
+        _cleanup_hashmap_free_ Hashmap *children = NULL;
+        _cleanup_set_free_ Set *stack = NULL;
+        int r;
+
+        assert(device);
+
+        if (device->children_enumerated)
+                return 0; /* Already enumerated. */
+
+        r = device_enumerate_children_internal(device, NULL, &stack, &children);
+        if (r < 0)
+                return r;
+
+        for (;;) {
+                _cleanup_free_ char *subdir = NULL;
+
+                subdir = set_steal_first(stack);
+                if (!subdir)
+                        break;
+
+                r = device_enumerate_children_internal(device, subdir, &stack, &children);
+                if (r < 0)
+                        return r;
+        }
+
+        device->children_enumerated = true;
+        device->children = TAKE_PTR(children);
+        return 1; /* Enumerated. */
+}
+
+_public_ sd_device *sd_device_get_child_first(sd_device *device, const char **ret_suffix) {
+        int r;
+
+        assert(device);
+
+        r = device_enumerate_children(device);
+        if (r < 0) {
+                log_device_debug_errno(device, r, "sd-device: failed to enumerate child devices: %m");
+                if (ret_suffix)
+                        *ret_suffix = NULL;
+                return NULL;
+        }
+
+        device->children_iterator = ITERATOR_FIRST;
+
+        return sd_device_get_child_next(device, ret_suffix);
+}
+
+_public_ sd_device *sd_device_get_child_next(sd_device *device, const char **ret_suffix) {
+        sd_device *child;
+
+        assert(device);
+
+        hashmap_iterate(device->children, &device->children_iterator, (void**) &child, (const void**) ret_suffix);
+        return child;
+}
+
+_public_ int sd_device_new_child(sd_device **ret, sd_device *device, const char *suffix) {
+        _cleanup_free_ char *path = NULL;
+        sd_device *child;
+        const char *s;
+        int r;
+
+        assert_return(ret, -EINVAL);
+        assert_return(device, -EINVAL);
+        assert_return(suffix, -EINVAL);
+
+        if (!path_is_safe(suffix))
+                return -EINVAL;
+
+        /* If we have already enumerated children, try to find the child from the cache. */
+        child = hashmap_get(device->children, suffix);
+        if (child) {
+                *ret = sd_device_ref(child);
+                return 0;
+        }
+
+        r = sd_device_get_syspath(device, &s);
+        if (r < 0)
+                return r;
+
+        path = path_join(s, suffix);
+        if (!path)
+                return -ENOMEM;
+
+        return sd_device_new_from_syspath(ret, path);
+}
+
 static int device_new_from_child(sd_device **ret, sd_device *child) {
         _cleanup_free_ char *path = NULL;
-        const char *subdir, *syspath;
+        const char *syspath;
         int r;
 
         assert(ret);
@@ -742,35 +1037,35 @@
         if (r < 0)
                 return r;
 
-        path = strdup(syspath);
-        if (!path)
-                return -ENOMEM;
-        subdir = path + STRLEN("/sys");
-
         for (;;) {
-                char *pos;
+                _cleanup_free_ char *p = NULL;
 
-                pos = strrchr(subdir, '/');
-                if (!pos || pos < subdir + 2)
+                r = path_extract_directory(path ?: syspath, &p);
+                if (r < 0)
+                        return r;
+
+                if (path_equal(p, "/sys"))
                         return -ENODEV;
 
-                *pos = '\0';
+                r = sd_device_new_from_syspath(ret, p);
+                if (r != -ENODEV)
+                        return r;
 
-                r = sd_device_new_from_syspath(ret, path);
-                if (r < 0)
-                        continue;
-
-                return 0;
+                free_and_replace(path, p);
         }
 }
 
 _public_ int sd_device_get_parent(sd_device *child, sd_device **ret) {
+        int r;
+
         assert_return(child, -EINVAL);
 
         if (!child->parent_set) {
-                child->parent_set = true;
+                r = device_new_from_child(&child->parent, child);
+                if (r < 0 && r != -ENODEV)
+                        return r;
 
-                (void) device_new_from_child(&child->parent, child);
+                child->parent_set = true;
         }
 
         if (!child->parent)
@@ -803,32 +1098,29 @@
 
 int device_set_drivers_subsystem(sd_device *device) {
         _cleanup_free_ char *subsystem = NULL;
-        const char *syspath, *drivers, *p;
+        const char *devpath, *drivers, *p;
         int r;
 
         assert(device);
 
-        r = sd_device_get_syspath(device, &syspath);
+        r = sd_device_get_devpath(device, &devpath);
         if (r < 0)
                 return r;
 
-        drivers = strstr(syspath, "/drivers/");
+        drivers = strstr(devpath, "/drivers/");
+        if (!drivers)
+                drivers = endswith(devpath, "/drivers");
         if (!drivers)
                 return -EINVAL;
 
-        for (p = drivers - 1; p >= syspath; p--)
-                if (*p == '/')
-                        break;
-
-        if (p <= syspath)
-                /* syspath does not start with /sys/ ?? */
-                return -EINVAL;
-        p++;
-        if (p >= drivers)
-                /* refuse duplicated slashes */
+        /* Find the path component immediately before the "/drivers/" string */
+        r = path_find_last_component(devpath, /* accept_dot_dot= */ false, &drivers, &p);
+        if (r < 0)
+                return r;
+        if (r == 0)
                 return -EINVAL;
 
-        subsystem = strndup(p, drivers - p);
+        subsystem = strndup(p, r);
         if (!subsystem)
                 return -ENOMEM;
 
@@ -864,13 +1156,11 @@
                 if (subsystem)
                         r = device_set_subsystem(device, subsystem);
                 /* use implicit names */
-                else if (path_startswith(device->devpath, "/module/"))
+                else if (!isempty(path_startswith(device->devpath, "/module/")))
                         r = device_set_subsystem(device, "module");
-                else if (strstr(syspath, "/drivers/"))
+                else if (strstr(syspath, "/drivers/") || endswith(syspath, "/drivers"))
                         r = device_set_drivers_subsystem(device);
-                else if (PATH_STARTSWITH_SET(device->devpath, "/subsystem/",
-                                                              "/class/",
-                                                              "/bus/"))
+                else if (!isempty(PATH_STARTSWITH_SET(device->devpath, "/class/", "/bus/")))
                         r = device_set_subsystem(device, "subsystem");
                 else {
                         device->subsystem_set = true;
@@ -1012,14 +1302,15 @@
         return 0;
 }
 
-_public_ int sd_device_get_devpath(sd_device *device, const char **devpath) {
+_public_ int sd_device_get_devpath(sd_device *device, const char **ret) {
         assert_return(device, -EINVAL);
 
         assert(device->devpath);
         assert(device->devpath[0] == '/');
 
-        if (devpath)
-                *devpath = device->devpath;
+        if (ret)
+                *ret = device->devpath;
+
         return 0;
 }
 
@@ -1044,42 +1335,27 @@
 
 static int device_set_sysname_and_sysnum(sd_device *device) {
         _cleanup_free_ char *sysname = NULL;
-        const char *sysnum = NULL;
-        const char *pos;
-        size_t len = 0;
+        size_t len, n;
+        int r;
 
-        if (!device->devpath)
+        assert(device);
+
+        r = path_extract_filename(device->devpath, &sysname);
+        if (r < 0)
+                return r;
+        if (r == O_DIRECTORY)
                 return -EINVAL;
 
-        pos = strrchr(device->devpath, '/');
-        if (!pos)
-                return -EINVAL;
-        pos++;
-
-        /* devpath is not a root directory */
-        if (*pos == '\0' || pos <= device->devpath)
-                return -EINVAL;
-
-        sysname = strdup(pos);
-        if (!sysname)
-                return -ENOMEM;
-
         /* some devices have '!' in their name, change that to '/' */
-        while (sysname[len] != '\0') {
-                if (sysname[len] == '!')
-                        sysname[len] = '/';
+        string_replace_char(sysname, '!', '/');
 
-                len++;
-        }
+        n = strspn_from_end(sysname, DIGITS);
+        len = strlen(sysname);
+        assert(n <= len);
+        if (n == len)
+                n = 0; /* Do not set sysnum for number only sysname. */
 
-        /* trailing number */
-        while (len > 0 && isdigit(sysname[--len]))
-                sysnum = &sysname[len];
-
-        if (len == 0)
-                sysnum = NULL;
-
-        device->sysnum = sysnum;
+        device->sysnum = n > 0 ? sysname + len - n : NULL;
         return free_and_replace(device->sysname, sysname);
 }
 
@@ -1142,6 +1418,24 @@
         return 0;
 }
 
+_public_ int sd_device_get_diskseq(sd_device *device, uint64_t *ret) {
+        int r;
+
+        assert_return(device, -EINVAL);
+
+        r = device_read_uevent_file(device);
+        if (r < 0)
+                return r;
+
+        if (device->diskseq == 0)
+                return -ENOENT;
+
+        if (ret)
+                *ret = device->diskseq;
+
+        return 0;
+}
+
 static bool is_valid_tag(const char *tag) {
         assert(tag);
 
@@ -1195,6 +1489,20 @@
         return 0;
 }
 
+void device_remove_devlink(sd_device *device, const char *devlink) {
+        _cleanup_free_ char *s = NULL;
+
+        assert(device);
+        assert(devlink);
+
+        s = set_remove(device->devlinks, devlink);
+        if (!s)
+                return;
+
+        device->devlinks_generation++;
+        device->property_devlinks_outdated = true;
+}
+
 bool device_has_devlink(sd_device *device, const char *devlink) {
         assert(device);
         assert(devlink);
@@ -1249,7 +1557,6 @@
 }
 
 static int handle_db_line(sd_device *device, char key, const char *value) {
-        char *path;
         int r;
 
         assert(device);
@@ -1258,24 +1565,17 @@
         switch (key) {
         case 'G': /* Any tag */
         case 'Q': /* Current tag */
-                r = device_add_tag(device, value, key == 'Q');
-                if (r < 0)
-                        return r;
+                return device_add_tag(device, value, key == 'Q');
 
-                break;
-        case 'S':
+        case 'S': {
+                const char *path;
+
                 path = strjoina("/dev/", value);
-                r = device_add_devlink(device, path);
-                if (r < 0)
-                        return r;
-
-                break;
+                return device_add_devlink(device, path);
+        }
         case 'E':
-                r = device_add_property_internal_from_string(device, value);
-                if (r < 0)
-                        return r;
+                return device_add_property_internal_from_string(device, value);
 
-                break;
         case 'I': {
                 usec_t t;
 
@@ -1283,35 +1583,25 @@
                 if (r < 0)
                         return r;
 
-                r = device_set_usec_initialized(device, t);
-                if (r < 0)
-                        return r;
-
-                break;
+                return device_set_usec_initialized(device, t);
         }
         case 'L':
-                r = safe_atoi(value, &device->devlink_priority);
-                if (r < 0)
-                        return r;
+                return safe_atoi(value, &device->devlink_priority);
 
-                break;
         case 'W':
                 /* Deprecated. Previously, watch handle is both saved in database and /run/udev/watch.
                  * However, the handle saved in database may not be updated when the handle is updated
                  * or removed. Moreover, it is not necessary to store the handle within the database,
                  * as its value becomes meaningless when udevd is restarted. */
-                break;
-        case 'V':
-                r = safe_atou(value, &device->database_version);
-                if (r < 0)
-                        return r;
+                return 0;
 
-                break;
+        case 'V':
+                return safe_atou(value, &device->database_version);
+
         default:
                 log_device_debug(device, "sd-device: Unknown key '%c' in device db, ignoring", key);
+                return 0;
         }
-
-        return 0;
 }
 
 int device_get_device_id(sd_device *device, const char **ret) {
@@ -1329,37 +1619,32 @@
                         return r;
 
                 if (sd_device_get_devnum(device, &devnum) >= 0) {
-                        assert(subsystem);
-
                         /* use dev_t — b259:131072, c254:0 */
-                        r = asprintf(&id, "%c%u:%u",
+                        if (asprintf(&id, "%c%u:%u",
                                      streq(subsystem, "block") ? 'b' : 'c',
-                                     major(devnum), minor(devnum));
-                        if (r < 0)
+                                     major(devnum), minor(devnum)) < 0)
                                 return -ENOMEM;
                 } else if (sd_device_get_ifindex(device, &ifindex) >= 0) {
                         /* use netdev ifindex — n3 */
-                        r = asprintf(&id, "n%u", (unsigned) ifindex);
-                        if (r < 0)
+                        if (asprintf(&id, "n%u", (unsigned) ifindex) < 0)
                                 return -ENOMEM;
                 } else {
+                        _cleanup_free_ char *sysname = NULL;
+
                         /* use $subsys:$sysname — pci:0000:00:1f.2
-                         * sysname() has '!' translated, get it from devpath
-                         */
-                        const char *sysname;
-
-                        sysname = basename(device->devpath);
-                        if (!sysname)
+                         * sd_device_get_sysname() has '!' translated, get it from devpath */
+                        r = path_extract_filename(device->devpath, &sysname);
+                        if (r < 0)
+                                return r;
+                        if (r == O_DIRECTORY)
                                 return -EINVAL;
 
-                        if (!subsystem)
-                                return -EINVAL;
-
-                        if (streq(subsystem, "drivers"))
-                                /* the 'drivers' pseudo-subsystem is special, and needs the real subsystem
-                                 * encoded as well */
+                        if (streq(subsystem, "drivers")) {
+                                /* the 'drivers' pseudo-subsystem is special, and needs the real
+                                 * subsystem encoded as well */
+                                assert(device->driver_subsystem);
                                 id = strjoin("+drivers:", device->driver_subsystem, ":", sysname);
-                        else
+                        } else
                                 id = strjoin("+", subsystem, ":", sysname);
                         if (!id)
                                 return -ENOMEM;
@@ -1406,7 +1691,7 @@
 
         device->db_loaded = true;
 
-        for (size_t i = 0; i < db_len; i++) {
+        for (size_t i = 0; i < db_len; i++)
                 switch (state) {
                 case PRE_KEY:
                         if (!strchr(NEWLINE, db[i])) {
@@ -1454,7 +1739,6 @@
                 default:
                         return log_device_debug_errno(device, SYNTHETIC_ERRNO(EINVAL), "sd-device: invalid db syntax.");
                 }
-        }
 
         return 0;
 }
@@ -1483,6 +1767,9 @@
         assert_return(device, -EINVAL);
 
         r = device_read_db(device);
+        if (r == -ENOENT)
+                /* The device may be already removed or renamed. */
+                return false;
         if (r < 0)
                 return r;
 
@@ -1494,11 +1781,10 @@
 
         assert_return(device, -EINVAL);
 
-        r = device_read_db(device);
+        r = sd_device_get_is_initialized(device);
         if (r < 0)
                 return r;
-
-        if (!device->is_initialized)
+        if (r == 0)
                 return -EBUSY;
 
         if (device->usec_initialized == 0)
@@ -1510,29 +1796,24 @@
         return 0;
 }
 
-_public_ int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *usec) {
-        usec_t now_ts;
+_public_ int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *ret) {
+        usec_t now_ts, ts;
         int r;
 
         assert_return(device, -EINVAL);
 
-        r = device_read_db(device);
+        r = sd_device_get_usec_initialized(device, &ts);
         if (r < 0)
                 return r;
 
-        if (!device->is_initialized)
-                return -EBUSY;
-
-        if (device->usec_initialized == 0)
-                return -ENODATA;
-
         now_ts = now(CLOCK_MONOTONIC);
 
-        if (now_ts < device->usec_initialized)
+        if (now_ts < ts)
                 return -EIO;
 
-        if (usec)
-                *usec = now_ts - device->usec_initialized;
+        if (ret)
+                *ret = usec_sub_unsigned(now_ts, ts);
+
         return 0;
 }
 
@@ -1731,78 +2012,69 @@
         return key;
 }
 
-static int device_sysattrs_read_all_internal(sd_device *device, const char *subdir) {
-        _cleanup_free_ char *path_dir = NULL;
+static int device_sysattrs_read_all_internal(sd_device *device, const char *subdir, Set **stack) {
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *dent;
-        const char *syspath;
         int r;
 
-        r = sd_device_get_syspath(device, &syspath);
+        assert(device);
+        assert(stack);
+
+        r = device_opendir(device, subdir, &dir);
+        if (r == -ENOENT && subdir)
+                return 0; /* Maybe, this is a child device, and is already removed. */
         if (r < 0)
                 return r;
 
         if (subdir) {
-                _cleanup_free_ char *p = NULL;
-
-                p = path_join(syspath, subdir, "uevent");
-                if (!p)
-                        return -ENOMEM;
-
-                if (access(p, F_OK) >= 0)
-                        /* this is a child device, skipping */
-                        return 0;
+                if (faccessat(dirfd(dir), "uevent", F_OK, 0) >= 0)
+                        return 0; /* this is a child device, skipping */
                 if (errno != ENOENT) {
-                        log_device_debug_errno(device, errno, "sd-device: Failed to stat %s, ignoring subdir: %m", p);
+                        log_device_debug_errno(device, errno,
+                                               "sd-device: Failed to access %s/uevent, ignoring sub-directory %s: %m",
+                                               subdir, subdir);
                         return 0;
                 }
-
-                path_dir = path_join(syspath, subdir);
-                if (!path_dir)
-                        return -ENOMEM;
         }
 
-        dir = opendir(path_dir ?: syspath);
-        if (!dir)
-                return -errno;
-
-        FOREACH_DIRENT_ALL(dent, dir, return -errno) {
-                _cleanup_free_ char *path = NULL, *p = NULL;
+        FOREACH_DIRENT_ALL(de, dir, return -errno) {
+                _cleanup_free_ char *p = NULL;
                 struct stat statbuf;
 
-                if (dot_or_dot_dot(dent->d_name))
+                if (dot_or_dot_dot(de->d_name))
                         continue;
 
                 /* only handle symlinks, regular files, and directories */
-                if (!IN_SET(dent->d_type, DT_LNK, DT_REG, DT_DIR))
+                if (!IN_SET(de->d_type, DT_LNK, DT_REG, DT_DIR))
                         continue;
 
                 if (subdir) {
-                        p = path_join(subdir, dent->d_name);
+                        p = path_join(subdir, de->d_name);
                         if (!p)
                                 return -ENOMEM;
                 }
 
-                if (dent->d_type == DT_DIR) {
-                        /* read subdirectory */
-                        r = device_sysattrs_read_all_internal(device, p ?: dent->d_name);
+                if (de->d_type == DT_DIR) {
+                        /* push the sub-directory into the stack, and read it later. */
+                        if (p)
+                                r = set_ensure_consume(stack, &path_hash_ops_free, TAKE_PTR(p));
+                        else
+                                r = set_put_strdup_full(stack, &path_hash_ops_free, de->d_name);
                         if (r < 0)
                                 return r;
 
                         continue;
                 }
 
-                path = path_join(syspath, p ?: dent->d_name);
-                if (!path)
-                        return -ENOMEM;
-
-                if (lstat(path, &statbuf) != 0)
+                if (fstatat(dirfd(dir), de->d_name, &statbuf, AT_SYMLINK_NOFOLLOW) < 0)
                         continue;
 
-                if (!(statbuf.st_mode & S_IRUSR))
+                if ((statbuf.st_mode & (S_IRUSR | S_IWUSR)) == 0)
                         continue;
 
-                r = set_put_strdup(&device->sysattrs, p ?: dent->d_name);
+                if (p)
+                        r = set_ensure_consume(&device->sysattrs, &path_hash_ops_free, TAKE_PTR(p));
+                else
+                        r = set_put_strdup_full(&device->sysattrs, &path_hash_ops_free, de->d_name);
                 if (r < 0)
                         return r;
         }
@@ -1811,6 +2083,7 @@
 }
 
 static int device_sysattrs_read_all(sd_device *device) {
+        _cleanup_set_free_ Set *stack = NULL;
         int r;
 
         assert(device);
@@ -1818,10 +2091,22 @@
         if (device->sysattrs_read)
                 return 0;
 
-        r = device_sysattrs_read_all_internal(device, NULL);
+        r = device_sysattrs_read_all_internal(device, NULL, &stack);
         if (r < 0)
                 return r;
 
+        for (;;) {
+                _cleanup_free_ char *subdir = NULL;
+
+                subdir = set_steal_first(stack);
+                if (!subdir)
+                        break;
+
+                r = device_sysattrs_read_all_internal(device, subdir, &stack);
+                if (r < 0)
+                        return r;
+        }
+
         device->sysattrs_read = true;
 
         return 0;
@@ -1900,6 +2185,40 @@
         return 0;
 }
 
+int device_get_property_bool(sd_device *device, const char *key) {
+        const char *value;
+        int r;
+
+        assert(device);
+        assert(key);
+
+        r = sd_device_get_property_value(device, key, &value);
+        if (r < 0)
+                return r;
+
+        return parse_boolean(value);
+}
+
+int device_get_property_int(sd_device *device, const char *key, int *ret) {
+        const char *value;
+        int r, v;
+
+        assert(device);
+        assert(key);
+
+        r = sd_device_get_property_value(device, key, &value);
+        if (r < 0)
+                return r;
+
+        r = safe_atoi(value, &v);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = v;
+        return 0;
+}
+
 _public_ int sd_device_get_trigger_uuid(sd_device *device, sd_id128_t *ret) {
         const char *s;
         sd_id128_t id;
@@ -1928,7 +2247,11 @@
         return 0;
 }
 
-static int device_cache_sysattr_value(sd_device *device, const char *key, char *value) {
+void device_clear_sysattr_cache(sd_device *device) {
+        device->sysattr_values = hashmap_free(device->sysattr_values);
+}
+
+int device_cache_sysattr_value(sd_device *device, const char *key, char *value) {
         _unused_ _cleanup_free_ char *old_value = NULL;
         _cleanup_free_ char *new_key = NULL;
         int r;
@@ -1956,26 +2279,27 @@
         return 0;
 }
 
-static int device_get_cached_sysattr_value(sd_device *device, const char *_key, const char **_value) {
-        const char *key = NULL, *value;
+int device_get_cached_sysattr_value(sd_device *device, const char *key, const char **ret_value) {
+        const char *k = NULL, *value;
 
         assert(device);
-        assert(_key);
+        assert(key);
 
-        value = hashmap_get2(device->sysattr_values, _key, (void **) &key);
-        if (!key)
-                return -ENOENT;
-
-        if (_value)
-                *_value = value;
+        value = hashmap_get2(device->sysattr_values, key, (void **) &k);
+        if (!k)
+                return -ESTALE; /* We have not read the attribute. */
+        if (!value)
+                return -ENOENT; /* We have looked up the attribute before and it did not exist. */
+        if (ret_value)
+                *ret_value = value;
         return 0;
 }
 
 /* We cache all sysattr lookups. If an attribute does not exist, it is stored
  * with a NULL value in the cache, otherwise the returned string is stored */
 _public_ int sd_device_get_sysattr_value(sd_device *device, const char *sysattr, const char **ret_value) {
-        _cleanup_free_ char *value = NULL;
-        const char *path, *syspath, *cached_value = NULL;
+        _cleanup_free_ char *value = NULL, *path = NULL;
+        const char *syspath;
         struct stat statbuf;
         int r;
 
@@ -1983,26 +2307,18 @@
         assert_return(sysattr, -EINVAL);
 
         /* look for possibly already cached result */
-        r = device_get_cached_sysattr_value(device, sysattr, &cached_value);
-        if (r != -ENOENT) {
-                if (r < 0)
-                        return r;
-
-                if (!cached_value)
-                        /* we looked up the sysattr before and it did not exist */
-                        return -ENOENT;
-
-                if (ret_value)
-                        *ret_value = cached_value;
-
-                return 0;
-        }
+        r = device_get_cached_sysattr_value(device, sysattr, ret_value);
+        if (r != -ESTALE)
+                return r;
 
         r = sd_device_get_syspath(device, &syspath);
         if (r < 0)
                 return r;
 
-        path = prefix_roota(syspath, sysattr);
+        path = path_join(syspath, sysattr);
+        if (!path)
+                return -ENOMEM;
+
         if (lstat(path, &statbuf) < 0) {
                 int k;
 
@@ -2054,12 +2370,69 @@
                                        sysattr, value, ret_value ? "" : ", ignoring");
                 if (ret_value)
                         return r;
-        } else if (ret_value)
-                *ret_value = TAKE_PTR(value);
 
+                return 0;
+        }
+
+        if (ret_value)
+                *ret_value = value;
+
+        TAKE_PTR(value);
         return 0;
 }
 
+int device_get_sysattr_int(sd_device *device, const char *sysattr, int *ret_value) {
+        const char *value;
+        int r;
+
+        r = sd_device_get_sysattr_value(device, sysattr, &value);
+        if (r < 0)
+                return r;
+
+        int v;
+        r = safe_atoi(value, &v);
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to parse '%s' attribute: %m", sysattr);
+
+        if (ret_value)
+                *ret_value = v;
+        /* We return "true" if the value is positive. */
+        return v > 0;
+}
+
+int device_get_sysattr_unsigned(sd_device *device, const char *sysattr, unsigned *ret_value) {
+        const char *value;
+        int r;
+
+        r = sd_device_get_sysattr_value(device, sysattr, &value);
+        if (r < 0)
+                return r;
+
+        unsigned v;
+        r = safe_atou(value, &v);
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to parse '%s' attribute: %m", sysattr);
+
+        if (ret_value)
+                *ret_value = v;
+        /* We return "true" if the value is positive. */
+        return v > 0;
+}
+
+int device_get_sysattr_bool(sd_device *device, const char *sysattr) {
+        const char *value;
+        int r;
+
+        assert(device);
+        assert(sysattr);
+
+        r = sd_device_get_sysattr_value(device, sysattr, &value);
+        if (r < 0)
+                return r;
+
+        return parse_boolean(value);
+}
+
 static void device_remove_cached_sysattr_value(sd_device *device, const char *_key) {
         _cleanup_free_ char *key = NULL;
 
@@ -2070,8 +2443,8 @@
 }
 
 _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr, const char *_value) {
-        _cleanup_free_ char *value = NULL;
-        const char *syspath, *path;
+        _cleanup_free_ char *value = NULL, *path = NULL;
+        const char *syspath;
         size_t len;
         int r;
 
@@ -2090,7 +2463,9 @@
         if (r < 0)
                 return r;
 
-        path = prefix_roota(syspath, sysattr);
+        path = path_join(syspath, sysattr);
+        if (!path)
+                return -ENOMEM;
 
         len = strlen(_value);
 
@@ -2169,7 +2544,6 @@
                 sd_device_action_t action,
                 sd_id128_t *ret_uuid) {
 
-        char buf[ID128_UUID_STRING_MAX];
         const char *s, *j;
         sd_id128_t u;
         int r;
@@ -2188,8 +2562,7 @@
         if (r < 0)
                 return r;
 
-        id128_to_uuid_string(u, buf);
-        j = strjoina(s, " ", buf);
+        j = strjoina(s, " ", SD_ID128_TO_UUID_STRING(u));
 
         r = sd_device_set_sysattr_value(device, "uevent", j);
         if (r < 0)
@@ -2198,3 +2571,110 @@
         *ret_uuid = u;
         return 0;
 }
+
+_public_ int sd_device_open(sd_device *device, int flags) {
+        _cleanup_close_ int fd = -EBADF, fd2 = -EBADF;
+        const char *devname, *subsystem = NULL;
+        uint64_t q, diskseq = 0;
+        struct stat st;
+        dev_t devnum;
+        int r;
+
+        assert_return(device, -EINVAL);
+        assert_return(FLAGS_SET(flags, O_PATH) || !FLAGS_SET(flags, O_NOFOLLOW), -EINVAL);
+
+        r = sd_device_get_devname(device, &devname);
+        if (r == -ENOENT)
+                return -ENOEXEC;
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_devnum(device, &devnum);
+        if (r == -ENOENT)
+                return -ENOEXEC;
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_subsystem(device, &subsystem);
+        if (r < 0 && r != -ENOENT)
+                return r;
+
+        fd = open(devname, FLAGS_SET(flags, O_PATH) ? flags : O_CLOEXEC|O_NOFOLLOW|O_PATH);
+        if (fd < 0)
+                return -errno;
+
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        if (st.st_rdev != devnum)
+                return -ENXIO;
+
+        if (streq_ptr(subsystem, "block") ? !S_ISBLK(st.st_mode) : !S_ISCHR(st.st_mode))
+                return -ENXIO;
+
+        /* If flags has O_PATH, then we cannot check diskseq. Let's return earlier. */
+        if (FLAGS_SET(flags, O_PATH))
+                return TAKE_FD(fd);
+
+        /* If the device is not initialized, then we cannot determine if we should check diskseq through
+         * ID_IGNORE_DISKSEQ property. Let's skip to check diskseq in that case. */
+        r = sd_device_get_is_initialized(device);
+        if (r < 0)
+                return r;
+        if (r > 0) {
+                r = device_get_property_bool(device, "ID_IGNORE_DISKSEQ");
+                if (r < 0 && r != -ENOENT)
+                        return r;
+                if (r <= 0) {
+                        r = sd_device_get_diskseq(device, &diskseq);
+                        if (r < 0 && r != -ENOENT)
+                                return r;
+                }
+        }
+
+        fd2 = fd_reopen(fd, flags);
+        if (fd2 < 0)
+                return fd2;
+
+        if (diskseq == 0)
+                return TAKE_FD(fd2);
+
+        r = fd_get_diskseq(fd2, &q);
+        if (r < 0)
+                return r;
+
+        if (q != diskseq)
+                return -ENXIO;
+
+        return TAKE_FD(fd2);
+}
+
+int device_opendir(sd_device *device, const char *subdir, DIR **ret) {
+        _cleanup_closedir_ DIR *d = NULL;
+        _cleanup_free_ char *path = NULL;
+        const char *syspath;
+        int r;
+
+        assert(device);
+        assert(ret);
+
+        r = sd_device_get_syspath(device, &syspath);
+        if (r < 0)
+                return r;
+
+        if (subdir) {
+                if (!path_is_safe(subdir))
+                        return -EINVAL;
+
+                path = path_join(syspath, subdir);
+                if (!path)
+                        return -ENOMEM;
+        }
+
+        d = opendir(path ?: syspath);
+        if (!d)
+                return -errno;
+
+        *ret = TAKE_PTR(d);
+        return 0;
+}
diff --git a/src/libsystemd/sd-device/test-device-util.c b/src/libsystemd/sd-device/test-device-util.c
index 93fc105..bc8ab66 100644
--- a/src/libsystemd/sd-device/test-device-util.c
+++ b/src/libsystemd/sd-device/test-device-util.c
@@ -3,11 +3,9 @@
 #include "device-util.h"
 #include "tests.h"
 
-static void test_log_device_full(void) {
+TEST(log_device_full) {
         int r;
 
-        log_info("/* %s */", __func__);
-
         for (int level = LOG_ERR; level <= LOG_DEBUG; level++) {
                 log_device_full(NULL, level, "test level=%d: %m", level);
 
@@ -22,9 +20,4 @@
         }
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_INFO);
-
-        test_log_device_full();
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/libsystemd/sd-device/test-sd-device-monitor.c b/src/libsystemd/sd-device/test-sd-device-monitor.c
index ae973cd..4654ef7 100644
--- a/src/libsystemd/sd-device/test-sd-device-monitor.c
+++ b/src/libsystemd/sd-device/test-sd-device-monitor.c
@@ -10,9 +10,10 @@
 #include "device-private.h"
 #include "device-util.h"
 #include "macro.h"
+#include "path-util.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "tests.h"
-#include "util.h"
 #include "virt.h"
 
 static int monitor_handler(sd_device_monitor *m, sd_device *d, void *userdata) {
@@ -24,11 +25,10 @@
         return sd_event_exit(sd_device_monitor_get_event(m), 100);
 }
 
-static int test_receive_device_fail(void) {
+static void test_receive_device_fail(void) {
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor_server = NULL, *monitor_client = NULL;
         _cleanup_(sd_device_unrefp) sd_device *loopback = NULL;
         const char *syspath;
-        int r;
 
         log_info("/* %s */", __func__);
 
@@ -39,22 +39,16 @@
         assert_se(sd_device_get_syspath(loopback, &syspath) >= 0);
 
         assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_server, "sender") >= 0);
         assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
 
         assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_client, "receiver") >= 0);
         assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
         assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
 
-        /* Do not use assert_se() here. */
-        r = device_monitor_send_device(monitor_server, monitor_client, loopback);
-        if (r < 0)
-                return log_error_errno(r, "Failed to send loopback device: %m");
-
+        assert_se(device_monitor_send_device(monitor_server, monitor_client, loopback) >= 0);
         assert_se(sd_event_run(sd_device_monitor_get_event(monitor_client), 0) >= 0);
-
-        return 0;
 }
 
 static void test_send_receive_one(sd_device *device, bool subsystem_filter, bool tag_filter, bool use_bpf) {
@@ -67,13 +61,13 @@
         assert_se(sd_device_get_syspath(device, &syspath) >= 0);
 
         assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_server, "sender") >= 0);
         assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
 
         assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_client, "receiver") >= 0);
         assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
         assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
 
         if (subsystem_filter) {
                 assert_se(sd_device_get_subsystem(device, &subsystem) >= 0);
@@ -104,14 +98,14 @@
         assert_se(sd_device_get_subsystem(device, &subsystem) >= 0);
 
         assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_server, "sender") >= 0);
         assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
 
         assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_client, "receiver") >= 0);
         assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
         assert_se(sd_device_monitor_filter_add_match_subsystem_devtype(monitor_client, subsystem, NULL) >= 0);
         assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
 
         assert_se(sd_device_enumerator_new(&e) >= 0);
         assert_se(sd_device_enumerator_add_match_subsystem(e, subsystem, false) >= 0);
@@ -121,6 +115,9 @@
                 assert_se(sd_device_get_syspath(d, &p) >= 0);
                 assert_se(sd_device_get_subsystem(d, &s) >= 0);
 
+                assert_se(device_add_property(d, "ACTION", "add") >= 0);
+                assert_se(device_add_property(d, "SEQNUM", "10") >= 0);
+
                 log_device_debug(d, "Sending device subsystem:%s syspath:%s", s, p);
                 assert_se(device_monitor_send_device(monitor_server, monitor_client, d) >= 0);
         }
@@ -141,14 +138,14 @@
         assert_se(sd_device_get_syspath(device, &syspath) >= 0);
 
         assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_server, "sender") >= 0);
         assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
 
         assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_client, "receiver") >= 0);
         assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
         assert_se(sd_device_monitor_filter_add_match_tag(monitor_client, "TEST_SD_DEVICE_MONITOR") >= 0);
         assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
 
         assert_se(sd_device_enumerator_new(&e) >= 0);
         FOREACH_DEVICE(e, d) {
@@ -156,6 +153,9 @@
 
                 assert_se(sd_device_get_syspath(d, &p) >= 0);
 
+                assert_se(device_add_property(d, "ACTION", "add") >= 0);
+                assert_se(device_add_property(d, "SEQNUM", "10") >= 0);
+
                 log_device_debug(d, "Sending device syspath:%s", p);
                 assert_se(device_monitor_send_device(monitor_server, monitor_client, d) >= 0);
         }
@@ -169,27 +169,23 @@
 static void test_sysattr_filter(sd_device *device, const char *sysattr) {
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor_server = NULL, *monitor_client = NULL;
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
-        const char *syspath, *subsystem, *sysattr_value;
+        const char *syspath, *sysattr_value;
         sd_device *d;
 
         log_device_info(device, "/* %s(%s) */", __func__, sysattr);
 
         assert_se(sd_device_get_syspath(device, &syspath) >= 0);
-        assert_se(sd_device_get_subsystem(device, &subsystem) >= 0);
         assert_se(sd_device_get_sysattr_value(device, sysattr, &sysattr_value) >= 0);
 
         assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_server, "sender") >= 0);
         assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
 
         assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_client, "receiver") >= 0);
         assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
-        /* The sysattr filter is not implemented in BPF yet, so the below device_monito_send_device()
-         * may cause EAGAIN. So, let's also filter devices with subsystem. */
-        assert_se(sd_device_monitor_filter_add_match_subsystem_devtype(monitor_client, subsystem, NULL) >= 0);
         assert_se(sd_device_monitor_filter_add_match_sysattr(monitor_client, sysattr, sysattr_value, true) >= 0);
         assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
 
         assert_se(sd_device_enumerator_new(&e) >= 0);
         assert_se(sd_device_enumerator_add_match_sysattr(e, sysattr, sysattr_value, false) >= 0);
@@ -198,8 +194,16 @@
 
                 assert_se(sd_device_get_syspath(d, &p) >= 0);
 
+                assert_se(device_add_property(d, "ACTION", "add") >= 0);
+                assert_se(device_add_property(d, "SEQNUM", "10") >= 0);
+
                 log_device_debug(d, "Sending device syspath:%s", p);
                 assert_se(device_monitor_send_device(monitor_server, monitor_client, d) >= 0);
+
+                /* The sysattr filter is not implemented in BPF yet. So, sending multiple devices may fills up
+                 * buffer and device_monitor_send_device() may return EAGAIN. Let's send one device here,
+                 * which should be filtered out by the receiver. */
+                break;
         }
 
         log_device_info(device, "Sending device syspath:%s", syspath);
@@ -211,39 +215,46 @@
 static void test_parent_filter(sd_device *device) {
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor_server = NULL, *monitor_client = NULL;
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
-        const char *syspath, *subsystem;
+        const char *syspath, *parent_syspath;
         sd_device *parent, *d;
         int r;
 
         log_device_info(device, "/* %s */", __func__);
 
         assert_se(sd_device_get_syspath(device, &syspath) >= 0);
-        assert_se(sd_device_get_subsystem(device, &subsystem) >= 0);
         r = sd_device_get_parent(device, &parent);
         if (r < 0)
                 return (void) log_device_info(device, "Device does not have parent, skipping.");
+        assert_se(sd_device_get_syspath(parent, &parent_syspath) >= 0);
 
         assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_server, "sender") >= 0);
         assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
 
         assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_client, "receiver") >= 0);
         assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
-        /* The parent filter is not implemented in BPF yet, so the below device_monito_send_device()
-         * may cause EAGAIN. So, let's also filter devices with subsystem. */
-        assert_se(sd_device_monitor_filter_add_match_subsystem_devtype(monitor_client, subsystem, NULL) >= 0);
         assert_se(sd_device_monitor_filter_add_match_parent(monitor_client, parent, true) >= 0);
         assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
 
         assert_se(sd_device_enumerator_new(&e) >= 0);
         FOREACH_DEVICE(e, d) {
                 const char *p;
 
                 assert_se(sd_device_get_syspath(d, &p) >= 0);
+                if (path_startswith(p, parent_syspath))
+                        continue;
+
+                assert_se(device_add_property(d, "ACTION", "add") >= 0);
+                assert_se(device_add_property(d, "SEQNUM", "10") >= 0);
 
                 log_device_debug(d, "Sending device syspath:%s", p);
                 assert_se(device_monitor_send_device(monitor_server, monitor_client, d) >= 0);
+
+                /* The parent filter is not implemented in BPF yet. So, sending multiple devices may fills up
+                 * buffer and device_monitor_send_device() may return EAGAIN. Let's send one device here,
+                 * which should be filtered out by the receiver. */
+                break;
         }
 
         log_device_info(device, "Sending device syspath:%s", syspath);
@@ -261,13 +272,13 @@
         assert_se(sd_device_get_syspath(device, &syspath) >= 0);
 
         assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_server, "sender") >= 0);
         assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
 
         assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+        assert_se(sd_device_monitor_set_description(monitor_client, "receiver") >= 0);
         assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
         assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
-        assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
 
         assert_se(sd_device_monitor_filter_add_match_subsystem_devtype(monitor_client, "hoge", NULL) >= 0);
         assert_se(sd_device_monitor_filter_update(monitor_client) >= 0);
@@ -281,15 +292,6 @@
         assert_se(sd_event_loop(sd_device_monitor_get_event(monitor_client)) == 100);
 }
 
-static void test_device_copy_properties(sd_device *device) {
-        _cleanup_(sd_device_unrefp) sd_device *copy = NULL;
-
-        assert_se(device_shallow_clone(device, &copy) >= 0);
-        assert_se(device_copy_properties(copy, device) >= 0);
-
-        test_send_receive_one(copy, false, false, false);
-}
-
 int main(int argc, char *argv[]) {
         _cleanup_(sd_device_unrefp) sd_device *loopback = NULL, *sda = NULL;
         int r;
@@ -299,11 +301,10 @@
         if (getuid() != 0)
                 return log_tests_skipped("not root");
 
-        r = test_receive_device_fail();
-        if (r < 0) {
-                assert_se(r == -EPERM && detect_container() > 0);
-                return log_tests_skipped("Running in container? Skipping remaining tests");
-        }
+        if (path_is_read_only_fs("/sys") > 0)
+                return log_tests_skipped("Running in container");
+
+        test_receive_device_fail();
 
         assert_se(sd_device_new_from_syspath(&loopback, "/sys/class/net/lo") >= 0);
         assert_se(device_add_property(loopback, "ACTION", "add") >= 0);
@@ -322,7 +323,6 @@
         test_tag_filter(loopback);
         test_sysattr_filter(loopback, "ifindex");
         test_sd_device_monitor_filter_remove(loopback);
-        test_device_copy_properties(loopback);
 
         r = sd_device_new_from_subsystem_sysname(&sda, "block", "sda");
         if (r < 0) {
diff --git a/src/libsystemd/sd-device/test-sd-device.c b/src/libsystemd/sd-device/test-sd-device.c
index aaa16f7..9d5cab7 100644
--- a/src/libsystemd/sd-device/test-sd-device.c
+++ b/src/libsystemd/sd-device/test-sd-device.c
@@ -1,130 +1,283 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <ctype.h>
+#include <fcntl.h>
+#include <unistd.h>
+
 #include "device-enumerator-private.h"
 #include "device-internal.h"
 #include "device-private.h"
 #include "device-util.h"
 #include "errno-util.h"
+#include "fd-util.h"
 #include "hashmap.h"
 #include "nulstr-util.h"
+#include "path-util.h"
+#include "rm-rf.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "tests.h"
 #include "time-util.h"
+#include "tmpfile-util.h"
+#include "udev-util.h"
 
 static void test_sd_device_one(sd_device *d) {
-        const char *syspath, *subsystem, *val;
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        const char *syspath, *sysname, *subsystem = NULL, *devname, *val;
+        bool is_block = false;
         dev_t devnum;
         usec_t usec;
-        int i, r;
+        int ifindex, r;
 
         assert_se(sd_device_get_syspath(d, &syspath) >= 0);
+        assert_se(path_startswith(syspath, "/sys"));
+        assert_se(sd_device_get_sysname(d, &sysname) >= 0);
+
+        log_info("%s(%s)", __func__, syspath);
+
+        assert_se(sd_device_new_from_syspath(&dev, syspath) >= 0);
+        assert_se(sd_device_get_syspath(dev, &val) >= 0);
+        assert_se(streq(syspath, val));
+        dev = sd_device_unref(dev);
+
+        assert_se(sd_device_new_from_path(&dev, syspath) >= 0);
+        assert_se(sd_device_get_syspath(dev, &val) >= 0);
+        assert_se(streq(syspath, val));
+        dev = sd_device_unref(dev);
+
+        r = sd_device_get_ifindex(d, &ifindex);
+        if (r >= 0) {
+                assert_se(ifindex > 0);
+
+                r = sd_device_new_from_ifindex(&dev, ifindex);
+                if (r == -ENODEV)
+                        log_device_warning_errno(d, r,
+                                                 "Failed to create sd-device object from ifindex %i. "
+                                                 "Maybe running on a non-host network namespace.", ifindex);
+                else {
+                        assert_se(r >= 0);
+                        assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                        assert_se(streq(syspath, val));
+                        dev = sd_device_unref(dev);
+                }
+
+                /* This does not require the interface really exists on the network namespace.
+                 * Hence, this should always succeed. */
+                assert_se(sd_device_new_from_ifname(&dev, sysname) >= 0);
+                assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                assert_se(streq(syspath, val));
+                dev = sd_device_unref(dev);
+        } else
+                assert_se(r == -ENOENT);
 
         r = sd_device_get_subsystem(d, &subsystem);
-        assert_se(r >= 0 || r == -ENOENT);
+        if (r < 0)
+                assert_se(r == -ENOENT);
+        else if (!streq(subsystem, "gpio")) { /* Unfortunately, there exist /sys/class/gpio and /sys/bus/gpio.
+                                               * Hence, sd_device_new_from_subsystem_sysname() and
+                                               * sd_device_new_from_device_id() may not work as expected. */
+                const char *name, *id;
+
+                if (streq(subsystem, "drivers"))
+                        name = strjoina(d->driver_subsystem, ":", sysname);
+                else
+                        name = sysname;
+                assert_se(sd_device_new_from_subsystem_sysname(&dev, subsystem, name) >= 0);
+                assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                assert_se(streq(syspath, val));
+                dev = sd_device_unref(dev);
+
+                /* The device ID depends on subsystem. */
+                assert_se(device_get_device_id(d, &id) >= 0);
+                r = sd_device_new_from_device_id(&dev, id);
+                if (r == -ENODEV && ifindex > 0)
+                        log_device_warning_errno(d, r,
+                                                 "Failed to create sd-device object from device ID \"%s\". "
+                                                 "Maybe running on a non-host network namespace.", id);
+                else {
+                        assert_se(r >= 0);
+                        assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                        assert_se(streq(syspath, val));
+                        dev = sd_device_unref(dev);
+                }
+
+                /* These require udev database, and reading database requires device ID. */
+                r = sd_device_get_is_initialized(d);
+                if (r > 0) {
+                        r = sd_device_get_usec_since_initialized(d, &usec);
+                        assert_se((r >= 0 && usec > 0) || r == -ENODATA);
+                } else
+                        assert(r == 0);
+
+                r = sd_device_get_property_value(d, "ID_NET_DRIVER", &val);
+                assert_se(r >= 0 || r == -ENOENT);
+        }
+
+        is_block = streq_ptr(subsystem, "block");
+
+        r = sd_device_get_devname(d, &devname);
+        if (r >= 0) {
+                r = sd_device_new_from_devname(&dev, devname);
+                if (r >= 0) {
+                        assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                        assert_se(streq(syspath, val));
+                        dev = sd_device_unref(dev);
+                } else
+                        assert_se(r == -ENODEV || ERRNO_IS_PRIVILEGE(r));
+
+                r = sd_device_new_from_path(&dev, devname);
+                if (r >= 0) {
+                        assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                        assert_se(streq(syspath, val));
+                        dev = sd_device_unref(dev);
+
+                        _cleanup_close_ int fd = -EBADF;
+                        fd = sd_device_open(d, O_CLOEXEC| O_NONBLOCK | (is_block ? O_RDONLY : O_NOCTTY | O_PATH));
+                        assert_se(fd >= 0 || ERRNO_IS_PRIVILEGE(fd));
+                } else
+                        assert_se(r == -ENODEV || ERRNO_IS_PRIVILEGE(r));
+        } else
+                assert_se(r == -ENOENT);
+
+        r = sd_device_get_devnum(d, &devnum);
+        if (r >= 0) {
+                _cleanup_free_ char *p = NULL;
+
+                assert_se(major(devnum) > 0);
+
+                assert_se(sd_device_new_from_devnum(&dev, is_block ? 'b' : 'c', devnum) >= 0);
+                assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                assert_se(streq(syspath, val));
+                dev = sd_device_unref(dev);
+
+                assert_se(asprintf(&p, "/dev/%s/%u:%u", is_block ? "block" : "char", major(devnum), minor(devnum)) >= 0);
+                assert_se(sd_device_new_from_devname(&dev, p) >= 0);
+                assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                assert_se(streq(syspath, val));
+                dev = sd_device_unref(dev);
+
+                assert_se(sd_device_new_from_path(&dev, p) >= 0);
+                assert_se(sd_device_get_syspath(dev, &val) >= 0);
+                assert_se(streq(syspath, val));
+                dev = sd_device_unref(dev);
+        } else
+                assert_se(r == -ENOENT);
+
+        assert_se(sd_device_get_devpath(d, &val) >= 0);
 
         r = sd_device_get_devtype(d, &val);
         assert_se(r >= 0 || r == -ENOENT);
 
-        r = sd_device_get_devnum(d, &devnum);
-        assert_se((r >= 0 && major(devnum) > 0) || r == -ENOENT);
-
-        r = sd_device_get_ifindex(d, &i);
-        assert_se((r >= 0 && i > 0) || r == -ENOENT);
-
         r = sd_device_get_driver(d, &val);
         assert_se(r >= 0 || r == -ENOENT);
 
-        assert_se(sd_device_get_devpath(d, &val) >= 0);
-
-        r = sd_device_get_devname(d, &val);
-        assert_se(r >= 0 || r == -ENOENT);
-
-        assert_se(sd_device_get_sysname(d, &val) >= 0);
-
         r = sd_device_get_sysnum(d, &val);
-        assert_se(r >= 0 || r == -ENOENT);
+        if (r >= 0) {
+                assert_se(val > sysname);
+                assert_se(val < sysname + strlen(sysname));
+                assert_se(in_charset(val, DIGITS));
+                assert_se(!ascii_isdigit(val[-1]));
+        } else
+                assert_se(r == -ENOENT);
 
-        i = sd_device_get_is_initialized(d);
-        assert_se(i >= 0);
-        if (i > 0) {
-                r = sd_device_get_usec_since_initialized(d, &usec);
-                assert_se((r >= 0 && usec > 0) || r == -ENODATA);
-        }
+        r = sd_device_get_sysattr_value(d, "nsid", NULL);
+        if (r >= 0) {
+                unsigned x;
 
-        r = sd_device_get_sysattr_value(d, "name_assign_type", &val);
-        assert_se(r >= 0 || ERRNO_IS_PRIVILEGE(r) || IN_SET(r, -ENOENT, -EINVAL));
-
-        r = sd_device_get_property_value(d, "ID_NET_DRIVER", &val);
-        assert_se(r >= 0 || r == -ENOENT);
-
-        log_info("syspath:%s subsystem:%s initialized:%s", syspath, strna(subsystem), yes_no(i));
+                assert_se(device_get_sysattr_unsigned(d, "nsid", NULL) >= 0);
+                r = device_get_sysattr_unsigned(d, "nsid", &x);
+                assert_se(r >= 0);
+                assert_se((x > 0) == (r > 0));
+        } else
+                assert_se(ERRNO_IS_PRIVILEGE(r) || IN_SET(r, -ENOENT, -EINVAL));
 }
 
-static void test_sd_device_enumerator_devices(void) {
+TEST(sd_device_enumerator_devices) {
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
         sd_device *d;
 
-        log_info("/* %s */", __func__);
-
         assert_se(sd_device_enumerator_new(&e) >= 0);
         assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
+        /* On some CI environments, it seems some loop block devices and corresponding bdi devices sometimes
+         * disappear during running this test. Let's exclude them here for stability. */
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "bdi", false) >= 0);
+        assert_se(sd_device_enumerator_add_nomatch_sysname(e, "loop*") >= 0);
+        /* On CentOS CI, systemd-networkd-tests.py may be running when this test is invoked. The networkd
+         * test creates and removes many network interfaces, and may interfere with this test. */
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "net", false) >= 0);
         FOREACH_DEVICE(e, d)
                 test_sd_device_one(d);
 }
 
-static void test_sd_device_enumerator_subsystems(void) {
+TEST(sd_device_enumerator_subsystems) {
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
         sd_device *d;
 
-        log_info("/* %s */", __func__);
-
         assert_se(sd_device_enumerator_new(&e) >= 0);
         assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
         FOREACH_SUBSYSTEM(e, d)
                 test_sd_device_one(d);
 }
 
-static unsigned test_sd_device_enumerator_filter_subsystem_one(const char *subsystem, Hashmap *h) {
+static void test_sd_device_enumerator_filter_subsystem_one(
+                const char *subsystem,
+                Hashmap *h,
+                unsigned *ret_n_new_dev,
+                unsigned *ret_n_removed_dev) {
+
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
-        sd_device *d, *t;
-        unsigned n_new_dev = 0;
+        unsigned n_new_dev = 0, n_removed_dev = 0;
+        sd_device *d;
 
         assert_se(sd_device_enumerator_new(&e) >= 0);
         assert_se(sd_device_enumerator_add_match_subsystem(e, subsystem, true) >= 0);
+        assert_se(sd_device_enumerator_add_nomatch_sysname(e, "loop*") >= 0);
 
         FOREACH_DEVICE(e, d) {
                 const char *syspath;
+                sd_device *t;
 
                 assert_se(sd_device_get_syspath(d, &syspath) >= 0);
                 t = hashmap_remove(h, syspath);
-                assert_se(!sd_device_unref(t));
 
-                if (t)
-                        log_debug("Removed subsystem:%s syspath:%s", subsystem, syspath);
-                else {
+                if (!t) {
                         log_warning("New device found: subsystem:%s syspath:%s", subsystem, syspath);
                         n_new_dev++;
                 }
+
+                assert_se(!sd_device_unref(t));
         }
 
-        /* Assume no device is unplugged. */
-        assert_se(hashmap_isempty(h));
+        HASHMAP_FOREACH(d, h) {
+                const char *syspath;
 
-        return n_new_dev;
+                assert_se(sd_device_get_syspath(d, &syspath) >= 0);
+                log_warning("Device removed: subsystem:%s syspath:%s", subsystem, syspath);
+                n_removed_dev++;
+
+                assert_se(!sd_device_unref(d));
+        }
+
+        hashmap_free(h);
+
+        *ret_n_new_dev = n_new_dev;
+        *ret_n_removed_dev = n_removed_dev;
 }
 
-static void test_sd_device_enumerator_filter_subsystem(void) {
+static bool test_sd_device_enumerator_filter_subsystem_trial(void) {
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
         _cleanup_(hashmap_freep) Hashmap *subsystems;
-        unsigned n_new_dev = 0;
+        unsigned n_new_dev = 0, n_removed_dev = 0;
         sd_device *d;
         Hashmap *h;
         char *s;
 
-        log_info("/* %s */", __func__);
-
         assert_se(subsystems = hashmap_new(&string_hash_ops));
         assert_se(sd_device_enumerator_new(&e) >= 0);
+        /* See comments in TEST(sd_device_enumerator_devices). */
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "bdi", false) >= 0);
+        assert_se(sd_device_enumerator_add_nomatch_sysname(e, "loop*") >= 0);
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "net", false) >= 0);
 
         FOREACH_DEVICE(e, d) {
                 const char *syspath, *subsystem;
@@ -152,19 +305,226 @@
         }
 
         while ((h = hashmap_steal_first_key_and_value(subsystems, (void**) &s))) {
-                n_new_dev += test_sd_device_enumerator_filter_subsystem_one(s, h);
-                hashmap_free(h);
+                unsigned n, m;
+
+                test_sd_device_enumerator_filter_subsystem_one(s, TAKE_PTR(h), &n, &m);
                 free(s);
+
+                n_new_dev += n;
+                n_removed_dev += m;
         }
 
         if (n_new_dev > 0)
-                log_warning("%u new device is found in re-scan", n_new_dev);
+                log_warning("%u new devices are found in re-scan", n_new_dev);
+        if (n_removed_dev > 0)
+                log_warning("%u devices removed in re-scan", n_removed_dev);
 
-        /* Assume that not so many devices are plugged. */
-        assert_se(n_new_dev <= 10);
+        return n_new_dev + n_removed_dev == 0;
 }
 
-static void test_sd_device_new_from_nulstr(void) {
+static bool test_sd_device_enumerator_filter_subsystem_trial_many(void) {
+        for (unsigned i = 0; i < 20; i++) {
+                log_debug("%s(): trial %u", __func__, i);
+                if (test_sd_device_enumerator_filter_subsystem_trial())
+                        return true;
+        }
+
+        return false;
+}
+
+static int on_inotify(sd_event_source *s, const struct inotify_event *event, void *userdata) {
+        if (test_sd_device_enumerator_filter_subsystem_trial_many())
+                return sd_event_exit(sd_event_source_get_event(s), 0);
+
+        return sd_event_exit(sd_event_source_get_event(s), -EBUSY);
+}
+
+TEST(sd_device_enumerator_filter_subsystem) {
+        /* The test test_sd_device_enumerator_filter_subsystem_trial() is quite racy. Let's run the function
+         * several times after the udev queue becomes empty. */
+
+        if (!udev_available() || (access("/run/udev", F_OK) < 0 && errno == ENOENT)) {
+                assert_se(test_sd_device_enumerator_filter_subsystem_trial_many());
+                return;
+        }
+
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        assert_se(sd_event_default(&event) >= 0);
+        assert_se(sd_event_add_inotify(event, NULL, "/run/udev" , IN_DELETE, on_inotify, NULL) >= 0);
+
+        if (udev_queue_is_empty() == 0) {
+                log_debug("udev queue is not empty, waiting for all queued events to be processed.");
+                assert_se(sd_event_loop(event) >= 0);
+        } else
+                assert_se(test_sd_device_enumerator_filter_subsystem_trial_many());
+}
+
+TEST(sd_device_enumerator_add_match_sysattr) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        int ifindex;
+
+        assert_se(sd_device_enumerator_new(&e) >= 0);
+        assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "net", true) >= 0);
+        assert_se(sd_device_enumerator_add_match_sysattr(e, "ifindex", "1", true) >= 0);
+        assert_se(sd_device_enumerator_add_match_sysattr(e, "ifindex", "hoge", true) >= 0);
+        assert_se(sd_device_enumerator_add_match_sysattr(e, "ifindex", "foo", true) >= 0);
+        assert_se(sd_device_enumerator_add_match_sysattr(e, "ifindex", "bar", false) >= 0);
+        assert_se(sd_device_enumerator_add_match_sysattr(e, "ifindex", "baz", false) >= 0);
+
+        dev = sd_device_enumerator_get_device_first(e);
+        assert_se(dev);
+        assert_se(sd_device_get_ifindex(dev, &ifindex) >= 0);
+        assert_se(ifindex == 1);
+
+        assert_se(!sd_device_enumerator_get_device_next(e));
+}
+
+TEST(sd_device_enumerator_add_match_property) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        int ifindex;
+
+        assert_se(sd_device_enumerator_new(&e) >= 0);
+        assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "net", true) >= 0);
+        assert_se(sd_device_enumerator_add_match_sysattr(e, "ifindex", "1", true) >= 0);
+        assert_se(sd_device_enumerator_add_match_property(e, "IFINDE*", "1*") >= 0);
+        assert_se(sd_device_enumerator_add_match_property(e, "IFINDE*", "hoge") >= 0);
+        assert_se(sd_device_enumerator_add_match_property(e, "IFINDE*", NULL) >= 0);
+        assert_se(sd_device_enumerator_add_match_property(e, "AAAAA", "BBBB") >= 0);
+        assert_se(sd_device_enumerator_add_match_property(e, "FOOOO", NULL) >= 0);
+
+        dev = sd_device_enumerator_get_device_first(e);
+        assert_se(dev);
+        assert_se(sd_device_get_ifindex(dev, &ifindex) >= 0);
+        assert_se(ifindex == 1);
+}
+
+static void check_parent_match(sd_device_enumerator *e, sd_device *dev) {
+        const char *syspath;
+        bool found = false;
+        sd_device *d;
+
+        assert_se(sd_device_get_syspath(dev, &syspath) >= 0);
+
+        FOREACH_DEVICE(e, d) {
+                const char *s;
+
+                assert_se(sd_device_get_syspath(d, &s) >= 0);
+                if (streq(s, syspath)) {
+                        found = true;
+                        break;
+                }
+        }
+
+        if (!found) {
+                log_device_debug(dev, "not enumerated, already removed??");
+                /* If the original device not found, then the device should be already removed. */
+                assert_se(access(syspath, F_OK) < 0);
+                assert_se(errno == ENOENT);
+        }
+}
+
+TEST(sd_device_enumerator_add_match_parent) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        int r;
+
+        assert_se(sd_device_enumerator_new(&e) >= 0);
+        assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
+        /* See comments in TEST(sd_device_enumerator_devices). */
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "bdi", false) >= 0);
+        assert_se(sd_device_enumerator_add_nomatch_sysname(e, "loop*") >= 0);
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "net", false) >= 0);
+
+        if (!slow_tests_enabled())
+                assert_se(sd_device_enumerator_add_match_subsystem(e, "block", true) >= 0);
+
+        FOREACH_DEVICE(e, dev) {
+                _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *p = NULL;
+                const char *syspath;
+                sd_device *parent;
+
+                assert_se(sd_device_get_syspath(dev, &syspath) >= 0);
+
+                r = sd_device_get_parent(dev, &parent);
+                if (r < 0) {
+                        assert_se(ERRNO_IS_DEVICE_ABSENT(r));
+                        continue;
+                }
+
+                log_debug("> %s", syspath);
+
+                assert_se(sd_device_enumerator_new(&p) >= 0);
+                assert_se(sd_device_enumerator_allow_uninitialized(p) >= 0);
+                assert_se(sd_device_enumerator_add_match_parent(p, parent) >= 0);
+
+                check_parent_match(p, dev);
+
+                /* If the device does not have subsystem, then it is not enumerated. */
+                r = sd_device_get_subsystem(parent, NULL);
+                if (r < 0) {
+                        assert_se(r == -ENOENT);
+                        continue;
+                }
+                check_parent_match(p, parent);
+        }
+}
+
+TEST(sd_device_get_child) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        int r;
+
+        assert_se(sd_device_enumerator_new(&e) >= 0);
+        assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
+        /* See comments in TEST(sd_device_enumerator_devices). */
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "bdi", false) >= 0);
+        assert_se(sd_device_enumerator_add_nomatch_sysname(e, "loop*") >= 0);
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "net", false) >= 0);
+
+        if (!slow_tests_enabled())
+                assert_se(sd_device_enumerator_add_match_subsystem(e, "block", true) >= 0);
+
+        FOREACH_DEVICE(e, dev) {
+                const char *syspath, *parent_syspath, *expected_suffix, *suffix;
+                sd_device *parent, *child;
+                bool found = false;
+
+                assert_se(sd_device_get_syspath(dev, &syspath) >= 0);
+
+                r = sd_device_get_parent(dev, &parent);
+                if (r < 0) {
+                        assert_se(ERRNO_IS_DEVICE_ABSENT(r));
+                        continue;
+                }
+
+                assert_se(sd_device_get_syspath(parent, &parent_syspath) >= 0);
+                assert_se(expected_suffix = path_startswith(syspath, parent_syspath));
+
+                log_debug("> %s", syspath);
+
+                FOREACH_DEVICE_CHILD_WITH_SUFFIX(parent, child, suffix) {
+                        const char *s;
+
+                        assert_se(child);
+                        assert_se(suffix);
+
+                        if (!streq(suffix, expected_suffix))
+                                continue;
+
+                        assert_se(sd_device_get_syspath(child, &s) >= 0);
+                        assert_se(streq(s, syspath));
+                        found = true;
+                        break;
+                }
+                assert_se(found);
+        }
+}
+
+TEST(sd_device_new_from_nulstr) {
         const char *devlinks =
                 "/dev/disk/by-partuuid/1290d63a-42cc-4c71-b87c-xxxxxxxxxxxx\0"
                 "/dev/disk/by-path/pci-0000:00:0f.0-scsi-0:0:0:0-part3\0"
@@ -174,13 +534,10 @@
                 "\0";
 
         _cleanup_(sd_device_unrefp) sd_device *device = NULL, *from_nulstr = NULL;
-        _cleanup_free_ uint8_t *nulstr_copy = NULL;
-        const char *devlink;
-        const uint8_t *nulstr;
+        _cleanup_free_ char *nulstr_copy = NULL;
+        const char *nulstr;
         size_t len;
 
-        log_info("/* %s */", __func__);
-
         assert_se(sd_device_new_from_syspath(&device, "/sys/class/net/lo") >= 0);
 
         /* Yeah, of course, setting devlink to the loopback interface is nonsense. But this is just a
@@ -191,28 +548,112 @@
                 assert_se(set_contains(device->devlinks, devlink));
         }
 
+        /* For issue #23799 */
+        assert_se(device_add_tag(device, "tag1", false) >= 0);
+        assert_se(device_add_tag(device, "tag2", false) >= 0);
+        assert_se(device_add_tag(device, "current-tag1", true) >= 0);
+        assert_se(device_add_tag(device, "current-tag2", true) >= 0);
+
         /* These properties are necessary for device_new_from_nulstr(). See device_verify(). */
         assert_se(device_add_property_internal(device, "SEQNUM", "1") >= 0);
         assert_se(device_add_property_internal(device, "ACTION", "change") >= 0);
 
         assert_se(device_get_properties_nulstr(device, &nulstr, &len) >= 0);
-        assert_se(nulstr_copy = newdup(uint8_t, nulstr, len));
+        assert_se(nulstr_copy = newdup(char, nulstr, len));
         assert_se(device_new_from_nulstr(&from_nulstr, nulstr_copy, len) >= 0);
 
+        assert_se(sd_device_has_tag(from_nulstr, "tag1") == 1);
+        assert_se(sd_device_has_tag(from_nulstr, "tag2") == 1);
+        assert_se(sd_device_has_tag(from_nulstr, "current-tag1") == 1);
+        assert_se(sd_device_has_tag(from_nulstr, "current-tag2") == 1);
+        assert_se(sd_device_has_current_tag(from_nulstr, "tag1") == 0);
+        assert_se(sd_device_has_current_tag(from_nulstr, "tag2") == 0);
+        assert_se(sd_device_has_current_tag(from_nulstr, "current-tag1") == 1);
+        assert_se(sd_device_has_current_tag(from_nulstr, "current-tag2") == 1);
+
         NULSTR_FOREACH(devlink, devlinks) {
                 log_device_info(from_nulstr, "checking devlink: %s", devlink);
                 assert_se(set_contains(from_nulstr->devlinks, devlink));
         }
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_INFO);
+TEST(sd_device_new_from_path) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        _cleanup_(rm_rf_physical_and_freep) char *tmpdir = NULL;
+        sd_device *dev;
+        int r;
 
-        test_sd_device_enumerator_devices();
-        test_sd_device_enumerator_subsystems();
-        test_sd_device_enumerator_filter_subsystem();
+        assert_se(mkdtemp_malloc("/tmp/test-sd-device.XXXXXXX", &tmpdir) >= 0);
 
-        test_sd_device_new_from_nulstr();
+        assert_se(sd_device_enumerator_new(&e) >= 0);
+        assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
+        assert_se(sd_device_enumerator_add_match_subsystem(e, "block", true) >= 0);
+        assert_se(sd_device_enumerator_add_nomatch_sysname(e, "loop*") >= 0);
+        assert_se(sd_device_enumerator_add_match_property(e, "DEVNAME", "*") >= 0);
 
-        return 0;
+        FOREACH_DEVICE(e, dev) {
+                _cleanup_(sd_device_unrefp) sd_device *d = NULL;
+                const char *syspath, *devpath, *sysname, *s;
+                _cleanup_free_ char *path = NULL;
+
+                assert_se(sd_device_get_sysname(dev, &sysname) >= 0);
+
+                log_debug("%s(%s)", __func__, sysname);
+
+                assert_se(sd_device_get_syspath(dev, &syspath) >= 0);
+                assert_se(sd_device_new_from_path(&d, syspath) >= 0);
+                assert_se(sd_device_get_syspath(d, &s) >= 0);
+                assert_se(streq(s, syspath));
+                d = sd_device_unref(d);
+
+                assert_se(sd_device_get_devname(dev, &devpath) >= 0);
+                r = sd_device_new_from_path(&d, devpath);
+                if (r >= 0) {
+                        assert_se(sd_device_get_syspath(d, &s) >= 0);
+                        assert_se(streq(s, syspath));
+                        d = sd_device_unref(d);
+                } else
+                        assert_se(r == -ENODEV || ERRNO_IS_PRIVILEGE(r));
+
+                assert_se(path = path_join(tmpdir, sysname));
+                assert_se(symlink(syspath, path) >= 0);
+                assert_se(sd_device_new_from_path(&d, path) >= 0);
+                assert_se(sd_device_get_syspath(d, &s) >= 0);
+                assert_se(streq(s, syspath));
+        }
 }
+
+static void test_devname_from_devnum_one(const char *path) {
+        _cleanup_free_ char *resolved = NULL;
+        struct stat st;
+
+        log_debug("> %s", path);
+
+        if (stat(path, &st) < 0) {
+                assert_se(errno == ENOENT);
+                log_notice("Path %s not found, skipping test", path);
+                return;
+        }
+
+        assert_se(devname_from_devnum(st.st_mode, st.st_rdev, &resolved) >= 0);
+        assert_se(path_equal(path, resolved));
+        resolved = mfree(resolved);
+        assert_se(devname_from_stat_rdev(&st, &resolved) >= 0);
+        assert_se(path_equal(path, resolved));
+}
+
+TEST(devname_from_devnum) {
+        test_devname_from_devnum_one("/dev/null");
+        test_devname_from_devnum_one("/dev/zero");
+        test_devname_from_devnum_one("/dev/full");
+        test_devname_from_devnum_one("/dev/random");
+        test_devname_from_devnum_one("/dev/urandom");
+        test_devname_from_devnum_one("/dev/tty");
+
+        if (is_device_node("/run/systemd/inaccessible/blk") > 0) {
+                test_devname_from_devnum_one("/run/systemd/inaccessible/chr");
+                test_devname_from_devnum_one("/run/systemd/inaccessible/blk");
+        }
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/libsystemd/sd-event/event-source.h b/src/libsystemd/sd-event/event-source.h
index 7a0f14e..6092652 100644
--- a/src/libsystemd/sd-event/event-source.h
+++ b/src/libsystemd/sd-event/event-source.h
@@ -7,8 +7,8 @@
 
 #include "sd-event.h"
 
-#include "fs-util.h"
 #include "hashmap.h"
+#include "inotify-util.h"
 #include "list.h"
 #include "prioq.h"
 #include "ratelimit.h"
@@ -71,6 +71,7 @@
         uint64_t prepare_iteration;
 
         sd_event_destroy_t destroy_callback;
+        sd_event_handler_t ratelimit_expire_callback;
 
         LIST_FIELDS(sd_event_source, sources);
 
@@ -98,6 +99,7 @@
                         sd_event_signal_handler_t callback;
                         struct signalfd_siginfo siginfo;
                         int sig;
+                        bool unblock;
                 } signal;
                 struct {
                         sd_event_child_handler_t callback;
diff --git a/src/libsystemd/sd-event/event-util.c b/src/libsystemd/sd-event/event-util.c
index 132796f..9863b07 100644
--- a/src/libsystemd/sd-event/event-util.c
+++ b/src/libsystemd/sd-event/event-util.c
@@ -4,6 +4,7 @@
 
 #include "event-source.h"
 #include "event-util.h"
+#include "fd-util.h"
 #include "log.h"
 #include "string-util.h"
 
@@ -84,16 +85,64 @@
         return created;
 }
 
-int event_source_disable(sd_event_source *s) {
-        if (!s)
-                return 0;
+int event_reset_time_relative(
+                sd_event *e,
+                sd_event_source **s,
+                clockid_t clock,
+                uint64_t usec,
+                uint64_t accuracy,
+                sd_event_time_handler_t callback,
+                void *userdata,
+                int64_t priority,
+                const char *description,
+                bool force_reset) {
 
-        return sd_event_source_set_enabled(s, SD_EVENT_OFF);
+        usec_t usec_now;
+        int r;
+
+        assert(e);
+
+        r = sd_event_now(e, clock, &usec_now);
+        if (r < 0)
+                return log_debug_errno(r, "sd-event: Failed to get the current time: %m");
+
+        return event_reset_time(e, s, clock, usec_add(usec_now, usec), accuracy, callback, userdata, priority, description, force_reset);
 }
 
-int event_source_is_enabled(sd_event_source *s) {
-        if (!s)
-                return false;
+int event_add_time_change(sd_event *e, sd_event_source **ret, sd_event_io_handler_t callback, void *userdata) {
+        _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        int r;
 
-        return sd_event_source_get_enabled(s, NULL);
+        assert(e);
+
+        /* Allocates an IO event source that gets woken up whenever the clock changes. Needs to be recreated on each event */
+
+        fd = time_change_fd();
+        if (fd < 0)
+                return fd;
+
+        r = sd_event_add_io(e, &s, fd, EPOLLIN, callback, userdata);
+        if (r < 0)
+                return r;
+
+        r = sd_event_source_set_io_fd_own(s, true);
+        if (r < 0)
+                return r;
+
+        TAKE_FD(fd);
+
+        r = sd_event_source_set_description(s, "time-change");
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = TAKE_PTR(s);
+        else {
+                r = sd_event_source_set_floating(s, true);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
 }
diff --git a/src/libsystemd/sd-event/event-util.h b/src/libsystemd/sd-event/event-util.h
index c8f97bc..c185584 100644
--- a/src/libsystemd/sd-event/event-util.h
+++ b/src/libsystemd/sd-event/event-util.h
@@ -5,9 +5,30 @@
 
 #include "sd-event.h"
 
-int event_reset_time(sd_event *e, sd_event_source **s,
-                     clockid_t clock, uint64_t usec, uint64_t accuracy,
-                     sd_event_time_handler_t callback, void *userdata,
-                     int64_t priority, const char *description, bool force_reset);
-int event_source_disable(sd_event_source *s);
-int event_source_is_enabled(sd_event_source *s);
+int event_reset_time(
+                sd_event *e,
+                sd_event_source **s,
+                clockid_t clock,
+                uint64_t usec,
+                uint64_t accuracy,
+                sd_event_time_handler_t callback,
+                void *userdata,
+                int64_t priority,
+                const char *description,
+                bool force_reset);
+int event_reset_time_relative(
+                sd_event *e,
+                sd_event_source **s,
+                clockid_t clock,
+                uint64_t usec,
+                uint64_t accuracy,
+                sd_event_time_handler_t callback,
+                void *userdata,
+                int64_t priority,
+                const char *description,
+                bool force_reset);
+static inline int event_source_disable(sd_event_source *s) {
+        return sd_event_source_set_enabled(s, SD_EVENT_OFF);
+}
+
+int event_add_time_change(sd_event *e, sd_event_source **ret, sd_event_io_handler_t callback, void *userdata);
diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
index 20ffd38..78b3e53 100644
--- a/src/libsystemd/sd-event/sd-event.c
+++ b/src/libsystemd/sd-event/sd-event.c
@@ -13,11 +13,14 @@
 #include "event-source.h"
 #include "fd-util.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "hashmap.h"
 #include "list.h"
+#include "logarithm.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "missing_syscall.h"
+#include "missing_threads.h"
 #include "prioq.h"
 #include "process-util.h"
 #include "set.h"
@@ -48,19 +51,19 @@
 }
 
 static const char* const event_source_type_table[_SOURCE_EVENT_SOURCE_TYPE_MAX] = {
-        [SOURCE_IO] = "io",
-        [SOURCE_TIME_REALTIME] = "realtime",
-        [SOURCE_TIME_BOOTTIME] = "bootime",
-        [SOURCE_TIME_MONOTONIC] = "monotonic",
+        [SOURCE_IO]                  = "io",
+        [SOURCE_TIME_REALTIME]       = "realtime",
+        [SOURCE_TIME_BOOTTIME]       = "bootime",
+        [SOURCE_TIME_MONOTONIC]      = "monotonic",
         [SOURCE_TIME_REALTIME_ALARM] = "realtime-alarm",
         [SOURCE_TIME_BOOTTIME_ALARM] = "boottime-alarm",
-        [SOURCE_SIGNAL] = "signal",
-        [SOURCE_CHILD] = "child",
-        [SOURCE_DEFER] = "defer",
-        [SOURCE_POST] = "post",
-        [SOURCE_EXIT] = "exit",
-        [SOURCE_WATCHDOG] = "watchdog",
-        [SOURCE_INOTIFY] = "inotify",
+        [SOURCE_SIGNAL]              = "signal",
+        [SOURCE_CHILD]               = "child",
+        [SOURCE_DEFER]               = "defer",
+        [SOURCE_POST]                = "post",
+        [SOURCE_EXIT]                = "exit",
+        [SOURCE_WATCHDOG]            = "watchdog",
+        [SOURCE_INOTIFY]             = "inotify",
 };
 
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(event_source_type, int);
@@ -123,10 +126,10 @@
         Hashmap *inotify_data; /* indexed by priority */
 
         /* A list of inode structures that still have an fd open, that we need to close before the next loop iteration */
-        LIST_HEAD(struct inode_data, inode_data_to_close);
+        LIST_HEAD(struct inode_data, inode_data_to_close_list);
 
         /* A list of inotify objects that already have events buffered which aren't processed yet */
-        LIST_HEAD(struct inotify_data, inotify_data_buffered);
+        LIST_HEAD(struct inotify_data, buffered_inotify_data_list);
 
         pid_t original_pid;
 
@@ -152,6 +155,8 @@
 
         LIST_HEAD(sd_event_source, sources);
 
+        sd_event_source *sigint_event_source, *sigterm_event_source;
+
         usec_t last_run_usec, last_log_usec;
         unsigned delays[sizeof(usec_t) * 8];
 };
@@ -322,6 +327,9 @@
 
         assert(e);
 
+        e->sigterm_event_source = sd_event_source_unref(e->sigterm_event_source);
+        e->sigint_event_source = sd_event_source_unref(e->sigint_event_source);
+
         while ((s = e->sources)) {
                 assert(s->floating);
                 source_disconnect(s);
@@ -371,22 +379,22 @@
 
         *e = (sd_event) {
                 .n_ref = 1,
-                .epoll_fd = -1,
-                .watchdog_fd = -1,
+                .epoll_fd = -EBADF,
+                .watchdog_fd = -EBADF,
                 .realtime.wakeup = WAKEUP_CLOCK_DATA,
-                .realtime.fd = -1,
+                .realtime.fd = -EBADF,
                 .realtime.next = USEC_INFINITY,
                 .boottime.wakeup = WAKEUP_CLOCK_DATA,
-                .boottime.fd = -1,
+                .boottime.fd = -EBADF,
                 .boottime.next = USEC_INFINITY,
                 .monotonic.wakeup = WAKEUP_CLOCK_DATA,
-                .monotonic.fd = -1,
+                .monotonic.fd = -EBADF,
                 .monotonic.next = USEC_INFINITY,
                 .realtime_alarm.wakeup = WAKEUP_CLOCK_DATA,
-                .realtime_alarm.fd = -1,
+                .realtime_alarm.fd = -EBADF,
                 .realtime_alarm.next = USEC_INFINITY,
                 .boottime_alarm.wakeup = WAKEUP_CLOCK_DATA,
-                .boottime_alarm.fd = -1,
+                .boottime_alarm.fd = -EBADF,
                 .boottime_alarm.next = USEC_INFINITY,
                 .perturb = USEC_INFINITY,
                 .original_pid = getpid_cached(),
@@ -405,7 +413,8 @@
         e->epoll_fd = fd_move_above_stdio(e->epoll_fd);
 
         if (secure_getenv("SD_EVENT_PROFILE_DELAYS")) {
-                log_debug("Event loop profiling enabled. Logarithmic histogram of event loop iterations in the range 2^0 … 2^63 us will be logged every 5s.");
+                log_debug("Event loop profiling enabled. Logarithmic histogram of event loop iterations in the range 2^0 %s 2^63 us will be logged every 5s.",
+                          special_glyph(SPECIAL_GLYPH_ELLIPSIS));
                 e->profile_delays = true;
         }
 
@@ -418,6 +427,8 @@
 }
 
 DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_event, sd_event, event_free);
+#define PROTECT_EVENT(e)                                                \
+        _unused_ _cleanup_(sd_event_unrefp) sd_event *_ref = sd_event_ref(e);
 
 _public_ sd_event_source* sd_event_source_disable_unref(sd_event_source *s) {
         if (s)
@@ -633,7 +644,7 @@
 
                 *d = (struct signal_data) {
                         .wakeup = WAKEUP_SIGNAL_DATA,
-                        .fd = -1,
+                        .fd = -EBADF,
                         .priority = priority,
                 };
 
@@ -649,7 +660,9 @@
         ss_copy = d->sigset;
         assert_se(sigaddset(&ss_copy, sig) >= 0);
 
-        r = signalfd(d->fd, &ss_copy, SFD_NONBLOCK|SFD_CLOEXEC);
+        r = signalfd(d->fd >= 0 ? d->fd : -1,   /* the first arg must be -1 or a valid signalfd */
+                     &ss_copy,
+                     SFD_NONBLOCK|SFD_CLOEXEC);
         if (r < 0) {
                 r = -errno;
                 goto fail;
@@ -809,6 +822,7 @@
 
 static void source_disconnect(sd_event_source *s) {
         sd_event *event;
+        int r;
 
         assert(s);
 
@@ -849,6 +863,20 @@
                                 s->event->signal_sources[s->signal.sig] = NULL;
 
                         event_gc_signal_data(s->event, &s->priority, s->signal.sig);
+
+                        if (s->signal.unblock) {
+                                sigset_t new_ss;
+
+                                if (sigemptyset(&new_ss) < 0)
+                                        log_debug_errno(errno, "Failed to reset signal set, ignoring: %m");
+                                else if (sigaddset(&new_ss, s->signal.sig) < 0)
+                                        log_debug_errno(errno, "Failed to add signal %i to signal mask, ignoring: %m", s->signal.sig);
+                                else {
+                                        r = pthread_sigmask(SIG_UNBLOCK, &new_ss, NULL);
+                                        if (r != 0)
+                                                log_debug_errno(r, "Failed to unblock signal %i, ignoring: %m", s->signal.sig);
+                                }
+                        }
                 }
 
                 break;
@@ -921,7 +949,7 @@
         }
 
         default:
-                assert_not_reached("Wut? I shouldn't exist.");
+                assert_not_reached();
         }
 
         if (s->pending)
@@ -1124,22 +1152,21 @@
 }
 
 static void initialize_perturb(sd_event *e) {
-        sd_id128_t bootid = {};
+        sd_id128_t id = {};
 
-        /* When we sleep for longer, we try to realign the wakeup to
-           the same time within each minute/second/250ms, so that
-           events all across the system can be coalesced into a single
-           CPU wakeup. However, let's take some system-specific
-           randomness for this value, so that in a network of systems
-           with synced clocks timer events are distributed a
-           bit. Here, we calculate a perturbation usec offset from the
-           boot ID. */
+        /* When we sleep for longer, we try to realign the wakeup to the same time within each
+         * minute/second/250ms, so that events all across the system can be coalesced into a single CPU
+         * wakeup. However, let's take some system-specific randomness for this value, so that in a network
+         * of systems with synced clocks timer events are distributed a bit. Here, we calculate a
+         * perturbation usec offset from the boot ID (or machine ID if failed, e.g. /proc is not mounted). */
 
         if (_likely_(e->perturb != USEC_INFINITY))
                 return;
 
-        if (sd_id128_get_boot(&bootid) >= 0)
-                e->perturb = (bootid.qwords[0] ^ bootid.qwords[1]) % USEC_PER_MINUTE;
+        if (sd_id128_get_boot(&id) >= 0 || sd_id128_get_machine(&id) >= 0)
+                e->perturb = (id.qwords[0] ^ id.qwords[1]) % USEC_PER_MINUTE;
+        else
+                e->perturb = 0; /* This is a super early process without /proc and /etc ?? */
 }
 
 static int event_setup_timer_fd(
@@ -1153,7 +1180,7 @@
         if (_likely_(d->fd >= 0))
                 return 0;
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = timerfd_create(clock, TFD_NONBLOCK|TFD_CLOEXEC);
         if (fd < 0)
@@ -1324,23 +1351,38 @@
 
         _cleanup_(source_freep) sd_event_source *s = NULL;
         struct signal_data *d;
+        sigset_t new_ss;
+        bool block_it;
         int r;
 
         assert_return(e, -EINVAL);
         assert_return(e = event_resolve(e), -ENOPKG);
-        assert_return(SIGNAL_VALID(sig), -EINVAL);
         assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
         assert_return(!event_pid_changed(e), -ECHILD);
 
+        /* Let's make sure our special flag stays outside of the valid signal range */
+        assert_cc(_NSIG < SD_EVENT_SIGNAL_PROCMASK);
+
+        if (sig & SD_EVENT_SIGNAL_PROCMASK) {
+                sig &= ~SD_EVENT_SIGNAL_PROCMASK;
+                assert_return(SIGNAL_VALID(sig), -EINVAL);
+
+                block_it = true;
+        } else {
+                assert_return(SIGNAL_VALID(sig), -EINVAL);
+
+                r = signal_is_blocked(sig);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return -EBUSY;
+
+                block_it = false;
+        }
+
         if (!callback)
                 callback = signal_exit_callback;
 
-        r = signal_is_blocked(sig);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                return -EBUSY;
-
         if (!e->signal_sources) {
                 e->signal_sources = new0(sd_event_source*, _NSIG);
                 if (!e->signal_sources)
@@ -1359,9 +1401,34 @@
 
         e->signal_sources[sig] = s;
 
+        if (block_it) {
+                sigset_t old_ss;
+
+                if (sigemptyset(&new_ss) < 0)
+                        return -errno;
+
+                if (sigaddset(&new_ss, sig) < 0)
+                        return -errno;
+
+                r = pthread_sigmask(SIG_BLOCK, &new_ss, &old_ss);
+                if (r != 0)
+                        return -r;
+
+                r = sigismember(&old_ss, sig);
+                if (r < 0)
+                        return -errno;
+
+                s->signal.unblock = !r;
+        } else
+                s->signal.unblock = false;
+
         r = event_make_signal_data(e, sig, &d);
-        if (r < 0)
+        if (r < 0) {
+                if (s->signal.unblock)
+                        (void) pthread_sigmask(SIG_UNBLOCK, &new_ss, NULL);
+
                 return r;
+        }
 
         /* Use the signal name as description for the event source by default */
         (void) sd_event_source_set_description(s, signal_to_string(sig));
@@ -1449,7 +1516,7 @@
                 } else
                         s->child.pidfd_owned = true; /* If we allocate the pidfd we own it by default */
         } else
-                s->child.pidfd = -1;
+                s->child.pidfd = -EBADF;
 
         if (EVENT_SOURCE_WATCH_PIDFD(s)) {
                 /* We have a pidfd and we only want to watch for exit */
@@ -1690,7 +1757,7 @@
         assert(hashmap_isempty(d->wd));
 
         if (d->buffer_filled > 0)
-                LIST_REMOVE(buffered, e->inotify_data_buffered, d);
+                LIST_REMOVE(buffered, e->buffered_inotify_data_list, d);
 
         hashmap_free(d->inodes);
         hashmap_free(d->wd);
@@ -1712,7 +1779,7 @@
                 int64_t priority,
                 struct inotify_data **ret) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct inotify_data *d;
         int r;
 
@@ -1802,7 +1869,7 @@
         assert(!d->event_sources);
 
         if (d->fd >= 0) {
-                LIST_REMOVE(to_close, e->inode_data_to_close, d);
+                LIST_REMOVE(to_close, e->inode_data_to_close_list, d);
                 safe_close(d->fd);
         }
 
@@ -1909,7 +1976,7 @@
                 .dev = dev,
                 .ino = ino,
                 .wd = -1,
-                .fd = -1,
+                .fd = -EBADF,
                 .inotify_data = inotify_data,
         };
 
@@ -1928,7 +1995,6 @@
 static uint32_t inode_data_determine_mask(struct inode_data *d) {
         bool excl_unlink = true;
         uint32_t combined = 0;
-        sd_event_source *s;
 
         assert(d);
 
@@ -1997,24 +2063,25 @@
         return sd_event_exit(sd_event_source_get_event(s), PTR_TO_INT(userdata));
 }
 
-_public_ int sd_event_add_inotify(
+static int event_add_inotify_fd_internal(
                 sd_event *e,
                 sd_event_source **ret,
-                const char *path,
+                int fd,
+                bool donate,
                 uint32_t mask,
                 sd_event_inotify_handler_t callback,
                 void *userdata) {
 
+        _cleanup_close_ int donated_fd = donate ? fd : -EBADF;
+        _cleanup_(source_freep) sd_event_source *s = NULL;
         struct inotify_data *inotify_data = NULL;
         struct inode_data *inode_data = NULL;
-        _cleanup_close_ int fd = -1;
-        _cleanup_(source_freep) sd_event_source *s = NULL;
         struct stat st;
         int r;
 
         assert_return(e, -EINVAL);
         assert_return(e = event_resolve(e), -ENOPKG);
-        assert_return(path, -EINVAL);
+        assert_return(fd >= 0, -EBADF);
         assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
         assert_return(!event_pid_changed(e), -ECHILD);
 
@@ -2027,12 +2094,6 @@
         if (mask & IN_MASK_ADD)
                 return -EINVAL;
 
-        fd = open(path, O_PATH|O_CLOEXEC|
-                  (mask & IN_ONLYDIR ? O_DIRECTORY : 0)|
-                  (mask & IN_DONT_FOLLOW ? O_NOFOLLOW : 0));
-        if (fd < 0)
-                return -errno;
-
         if (fstat(fd, &st) < 0)
                 return -errno;
 
@@ -2052,15 +2113,25 @@
 
         r = event_make_inode_data(e, inotify_data, st.st_dev, st.st_ino, &inode_data);
         if (r < 0) {
-                event_free_inotify_data(e, inotify_data);
+                event_gc_inotify_data(e, inotify_data);
                 return r;
         }
 
         /* Keep the O_PATH fd around until the first iteration of the loop, so that we can still change the priority of
          * the event source, until then, for which we need the original inode. */
         if (inode_data->fd < 0) {
-                inode_data->fd = TAKE_FD(fd);
-                LIST_PREPEND(to_close, e->inode_data_to_close, inode_data);
+                if (donated_fd >= 0)
+                        inode_data->fd = TAKE_FD(donated_fd);
+                else {
+                        inode_data->fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
+                        if (inode_data->fd < 0) {
+                                r = -errno;
+                                event_gc_inode_data(e, inode_data);
+                                return r;
+                        }
+                }
+
+                LIST_PREPEND(to_close, e->inode_data_to_close_list, inode_data);
         }
 
         /* Link our event source to the inode data object */
@@ -2072,8 +2143,6 @@
         if (r < 0)
                 return r;
 
-        (void) sd_event_source_set_description(s, path);
-
         if (ret)
                 *ret = s;
         TAKE_PTR(s);
@@ -2081,6 +2150,48 @@
         return 0;
 }
 
+_public_ int sd_event_add_inotify_fd(
+                sd_event *e,
+                sd_event_source **ret,
+                int fd,
+                uint32_t mask,
+                sd_event_inotify_handler_t callback,
+                void *userdata) {
+
+        return event_add_inotify_fd_internal(e, ret, fd, /* donate= */ false, mask, callback, userdata);
+}
+
+_public_ int sd_event_add_inotify(
+                sd_event *e,
+                sd_event_source **ret,
+                const char *path,
+                uint32_t mask,
+                sd_event_inotify_handler_t callback,
+                void *userdata) {
+
+        sd_event_source *s = NULL; /* avoid false maybe-uninitialized warning */
+        int fd, r;
+
+        assert_return(path, -EINVAL);
+
+        fd = open(path, O_PATH | O_CLOEXEC |
+                        (mask & IN_ONLYDIR ? O_DIRECTORY : 0) |
+                        (mask & IN_DONT_FOLLOW ? O_NOFOLLOW : 0));
+        if (fd < 0)
+                return -errno;
+
+        r = event_add_inotify_fd_internal(e, &s, fd, /* donate= */ true, mask, callback, userdata);
+        if (r < 0)
+                return r;
+
+        (void) sd_event_source_set_description(s, path);
+
+        if (ret)
+                *ret = s;
+
+        return r;
+}
+
 static sd_event_source* event_source_free(sd_event_source *s) {
         if (!s)
                 return NULL;
@@ -2093,12 +2204,9 @@
          * we still retain a valid event source object after
          * the callback. */
 
-        if (s->dispatching) {
-                if (s->type == SOURCE_IO)
-                        source_io_unregister(s);
-
+        if (s->dispatching)
                 source_disconnect(s);
-        } else
+        else
                 source_free(s);
 
         return NULL;
@@ -2307,7 +2415,7 @@
                                 goto fail;
                         }
 
-                        LIST_PREPEND(to_close, s->event->inode_data_to_close, new_inode_data);
+                        LIST_PREPEND(to_close, s->event->inode_data_to_close_list, new_inode_data);
                 }
 
                 /* Move the event source to the new inode data structure */
@@ -2367,6 +2475,10 @@
 }
 
 _public_ int sd_event_source_get_enabled(sd_event_source *s, int *ret) {
+        /* Quick mode: the event source doesn't exist and we only want to query boolean enablement state. */
+        if (!s && !ret)
+                return false;
+
         assert_return(s, -EINVAL);
         assert_return(!event_pid_changed(s->event), -ECHILD);
 
@@ -2437,7 +2549,7 @@
                 break;
 
         default:
-                assert_not_reached("Wut? I shouldn't exist.");
+                assert_not_reached();
         }
 
         /* Always reshuffle time prioq, as the ratelimited flag may be changed. */
@@ -2525,7 +2637,7 @@
                 break;
 
         default:
-                assert_not_reached("Wut? I shouldn't exist.");
+                assert_not_reached();
         }
 
         s->enabled = enabled;
@@ -2544,8 +2656,13 @@
 _public_ int sd_event_source_set_enabled(sd_event_source *s, int m) {
         int r;
 
-        assert_return(s, -EINVAL);
         assert_return(IN_SET(m, SD_EVENT_OFF, SD_EVENT_ON, SD_EVENT_ONESHOT), -EINVAL);
+
+        /* Quick mode: if the source doesn't exist, SD_EVENT_OFF is a noop. */
+        if (m == SD_EVENT_OFF && !s)
+                return 0;
+
+        assert_return(s, -EINVAL);
         assert_return(!event_pid_changed(s->event), -ECHILD);
 
         /* If we are dead anyway, we are fine with turning off sources, but everything else needs to fail. */
@@ -2609,6 +2726,9 @@
         assert_return(s, -EINVAL);
         assert_return(EVENT_SOURCE_IS_TIME(s->type), -EDOM);
 
+        if (usec == USEC_INFINITY)
+                return sd_event_source_set_time(s, USEC_INFINITY);
+
         r = sd_event_now(s->event, event_source_type_to_clock(s->type), &t);
         if (r < 0)
                 return r;
@@ -2871,7 +2991,7 @@
         return r;
 }
 
-static int event_source_leave_ratelimit(sd_event_source *s) {
+static int event_source_leave_ratelimit(sd_event_source *s, bool run_callback) {
         int r;
 
         assert(s);
@@ -2903,6 +3023,30 @@
         ratelimit_reset(&s->rate_limit);
 
         log_debug("Event source %p (%s) left rate limit state.", s, strna(s->description));
+
+        if (run_callback && s->ratelimit_expire_callback) {
+                s->dispatching = true;
+                r = s->ratelimit_expire_callback(s, s->userdata);
+                s->dispatching = false;
+
+                if (r < 0) {
+                        log_debug_errno(r, "Ratelimit expiry callback of event source %s (type %s) returned error, %s: %m",
+                                        strna(s->description),
+                                        event_source_type_to_string(s->type),
+                                        s->exit_on_failure ? "exiting" : "disabling");
+
+                        if (s->exit_on_failure)
+                                (void) sd_event_exit(s->event, r);
+                }
+
+                if (s->n_ref == 0)
+                        source_free(s);
+                else if (r < 0)
+                        assert_se(sd_event_source_set_enabled(s, SD_EVENT_OFF) >= 0);
+
+                return 1;
+        }
+
         return 0;
 
 fail:
@@ -3038,7 +3182,7 @@
         assert_se(d->fd >= 0);
 
         if (t == 0) {
-                /* We don' want to disarm here, just mean some time looooong ago. */
+                /* We don't want to disarm here, just mean some time looooong ago. */
                 its.it_value.tv_sec = 0;
                 its.it_value.tv_nsec = 1;
         } else
@@ -3081,7 +3225,7 @@
 
         ss = read(fd, &x, sizeof(x));
         if (ss < 0) {
-                if (IN_SET(errno, EAGAIN, EINTR))
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
                 return -errno;
@@ -3102,6 +3246,7 @@
                 struct clock_data *d) {
 
         sd_event_source *s;
+        bool callback_invoked = false;
         int r;
 
         assert(e);
@@ -3119,9 +3264,11 @@
                          * again. */
                         assert(s->ratelimited);
 
-                        r = event_source_leave_ratelimit(s);
+                        r = event_source_leave_ratelimit(s, /* run_callback */ true);
                         if (r < 0)
                                 return r;
+                        else if (r == 1)
+                                callback_invoked = true;
 
                         continue;
                 }
@@ -3136,7 +3283,7 @@
                 event_source_time_prioq_reshuffle(s);
         }
 
-        return 0;
+        return callback_invoked;
 }
 
 static int process_child(sd_event *e, int64_t threshold, int64_t *ret_min_priority) {
@@ -3275,7 +3422,7 @@
 
                 n = read(d->fd, &si, sizeof(si));
                 if (n < 0) {
-                        if (IN_SET(errno, EAGAIN, EINTR))
+                        if (ERRNO_IS_TRANSIENT(errno))
                                 return 0;
 
                         return -errno;
@@ -3329,7 +3476,7 @@
 
         n = read(d->fd, &d->buffer, sizeof(d->buffer));
         if (n < 0) {
-                if (IN_SET(errno, EAGAIN, EINTR))
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
                 return -errno;
@@ -3337,7 +3484,7 @@
 
         assert(n > 0);
         d->buffer_filled = (size_t) n;
-        LIST_PREPEND(buffered, e->inotify_data_buffered, d);
+        LIST_PREPEND(buffered, e->buffered_inotify_data_list, d);
 
         return 1;
 }
@@ -3355,7 +3502,7 @@
         d->buffer_filled -= sz;
 
         if (d->buffer_filled == 0)
-                LIST_REMOVE(buffered, e->inotify_data_buffered, d);
+                LIST_REMOVE(buffered, e->buffered_inotify_data_list, d);
 }
 
 static int event_inotify_data_process(sd_event *e, struct inotify_data *d) {
@@ -3385,9 +3532,7 @@
                         /* The queue overran, let's pass this event to all event sources connected to this inotify
                          * object */
 
-                        HASHMAP_FOREACH(inode_data, d->inodes) {
-                                sd_event_source *s;
-
+                        HASHMAP_FOREACH(inode_data, d->inodes)
                                 LIST_FOREACH(inotify.by_inode_data, s, inode_data->event_sources) {
 
                                         if (event_source_is_offline(s))
@@ -3397,10 +3542,8 @@
                                         if (r < 0)
                                                 return r;
                                 }
-                        }
                 } else {
                         struct inode_data *inode_data;
-                        sd_event_source *s;
 
                         /* Find the inode object for this watch descriptor. If IN_IGNORED is set we also remove it from
                          * our watch descriptor table. */
@@ -3448,12 +3591,11 @@
 }
 
 static int process_inotify(sd_event *e) {
-        struct inotify_data *d;
         int r, done = 0;
 
         assert(e);
 
-        LIST_FOREACH(buffered, d, e->inotify_data_buffered) {
+        LIST_FOREACH(buffered, d, e->buffered_inotify_data_list) {
                 r = event_inotify_data_process(e, d);
                 if (r < 0)
                         return r;
@@ -3465,8 +3607,8 @@
 }
 
 static int source_dispatch(sd_event_source *s) {
-        _cleanup_(sd_event_unrefp) sd_event *saved_event = NULL;
         EventSourceType saved_type;
+        sd_event *saved_event;
         int r = 0;
 
         assert(s);
@@ -3478,7 +3620,8 @@
 
         /* Similarly, store a reference to the event loop object, so that we can still access it after the
          * callback might have invalidated/disconnected the event source. */
-        saved_event = sd_event_ref(s->event);
+        saved_event = s->event;
+        PROTECT_EVENT(saved_event);
 
         /* Check if we hit the ratelimit for this event source, and if so, let's disable it. */
         assert(!s->ratelimited);
@@ -3600,7 +3743,7 @@
         case SOURCE_WATCHDOG:
         case _SOURCE_EVENT_SOURCE_TYPE_MAX:
         case _SOURCE_EVENT_SOURCE_TYPE_INVALID:
-                assert_not_reached("Wut? I shouldn't exist.");
+                assert_not_reached();
         }
 
         s->dispatching = false;
@@ -3618,7 +3761,7 @@
         if (s->n_ref == 0)
                 source_free(s);
         else if (r < 0)
-                sd_event_source_set_enabled(s, SD_EVENT_OFF);
+                assert_se(sd_event_source_set_enabled(s, SD_EVENT_OFF) >= 0);
 
         return 1;
 }
@@ -3636,12 +3779,9 @@
                         break;
 
                 s->prepare_iteration = e->iteration;
-                r = prioq_reshuffle(e->prepare, s, &s->prepare_index);
-                if (r < 0)
-                        return r;
+                prioq_reshuffle(e->prepare, s, &s->prepare_index);
 
                 assert(s->prepare);
-
                 s->dispatching = true;
                 r = s->prepare(s, s->userdata);
                 s->dispatching = false;
@@ -3659,7 +3799,7 @@
                 if (s->n_ref == 0)
                         source_free(s);
                 else if (r < 0)
-                        sd_event_source_set_enabled(s, SD_EVENT_OFF);
+                        assert_se(sd_event_source_set_enabled(s, SD_EVENT_OFF) >= 0);
         }
 
         return 0;
@@ -3679,7 +3819,7 @@
                 return 0;
         }
 
-        _unused_ _cleanup_(sd_event_unrefp) sd_event *ref = sd_event_ref(e);
+        PROTECT_EVENT(e);
         e->iteration++;
         e->state = SD_EVENT_EXITING;
         r = source_dispatch(p);
@@ -3720,10 +3860,7 @@
         if (its.it_value.tv_sec == 0 && its.it_value.tv_nsec == 0)
                 its.it_value.tv_nsec = 1;
 
-        if (timerfd_settime(e->watchdog_fd, TFD_TIMER_ABSTIME, &its, NULL) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(timerfd_settime(e->watchdog_fd, TFD_TIMER_ABSTIME, &its, NULL));
 }
 
 static int process_watchdog(sd_event *e) {
@@ -3749,15 +3886,15 @@
 
         /* Close the fds pointing to the inodes to watch now. We need to close them as they might otherwise pin
          * filesystems. But we can't close them right-away as we need them as long as the user still wants to make
-         * adjustments to the even source, such as changing the priority (which requires us to remove and re-add a watch
+         * adjustments to the event source, such as changing the priority (which requires us to remove and re-add a watch
          * for the inode). Hence, let's close them when entering the first iteration after they were added, as a
          * compromise. */
 
-        while ((d = e->inode_data_to_close)) {
+        while ((d = e->inode_data_to_close_list)) {
                 assert(d->fd >= 0);
                 d->fd = safe_close(d->fd);
 
-                LIST_REMOVE(to_close, e->inode_data_to_close, d);
+                LIST_REMOVE(to_close, e->inode_data_to_close_list, d);
         }
 }
 
@@ -3776,7 +3913,7 @@
         assert_return(!e->default_event_ptr || e->tid == gettid(), -EREMOTEIO);
 
         /* Make sure that none of the preparation callbacks ends up freeing the event source under our feet */
-        _unused_ _cleanup_(sd_event_unrefp) sd_event *ref = sd_event_ref(e);
+        PROTECT_EVENT(e);
 
         if (e->exit_requested)
                 goto pending;
@@ -3811,7 +3948,7 @@
 
         event_close_inode_data_fds(e);
 
-        if (event_next_pending(e) || e->need_process_child)
+        if (event_next_pending(e) || e->need_process_child || e->buffered_inotify_data_list)
                 goto pending;
 
         e->state = SD_EVENT_ARMED;
@@ -3833,23 +3970,25 @@
                 int maxevents,
                 usec_t timeout) {
 
-        int r, msec;
-#if 0
-        static bool epoll_pwait2_absent = false;
+        int msec;
+        /* A wrapper that uses epoll_pwait2() if available, and falls back to epoll_wait() if not. */
 
-        /* A wrapper that uses epoll_pwait2() if available, and falls back to epoll_wait() if not.
-         *
-         * FIXME: this is temporarily disabled until epoll_pwait2() becomes more widely available.
-         * See https://github.com/systemd/systemd/pull/18973 and
-         * https://github.com/systemd/systemd/issues/19052. */
+#if HAVE_EPOLL_PWAIT2
+        static bool epoll_pwait2_absent = false;
+        int r;
+
+        /* epoll_pwait2() was added to Linux 5.11 (2021-02-14) and to glibc in 2.35 (2022-02-03). In contrast
+         * to other syscalls we don't bother with our own fallback syscall wrappers on old libcs, since this
+         * is not that obvious to implement given the libc and kernel definitions differ in the last
+         * argument. Moreover, the only reason to use it is the more accurate time-outs (which is not a
+         * biggie), let's hence rely on glibc's definitions, and fallback to epoll_pwait() when that's
+         * missing. */
 
         if (!epoll_pwait2_absent && timeout != USEC_INFINITY) {
-                struct timespec ts;
-
                 r = epoll_pwait2(fd,
                                  events,
                                  maxevents,
-                                 timespec_store(&ts, timeout),
+                                 TIMESPEC_STORE(timeout),
                                  NULL);
                 if (r >= 0)
                         return r;
@@ -3873,14 +4012,7 @@
                         msec = (int) k;
         }
 
-        r = epoll_wait(fd,
-                       events,
-                       maxevents,
-                       msec);
-        if (r < 0)
-                return -errno;
-
-        return r;
+        return RET_NERRNO(epoll_wait(fd, events, maxevents, msec));
 }
 
 static int process_epoll(sd_event *e, usec_t timeout, int64_t threshold, int64_t *ret_min_priority) {
@@ -3899,7 +4031,7 @@
         n_event_max = MALLOC_ELEMENTSOF(e->event_queue);
 
         /* If we still have inotify data buffered, then query the other fds, but don't wait on it */
-        if (e->inotify_data_buffered)
+        if (e->buffered_inotify_data_list)
                 timeout = 0;
 
         for (;;) {
@@ -3960,7 +4092,7 @@
                                         break;
 
                                 default:
-                                        assert_not_reached("Unexpected event source type");
+                                        assert_not_reached();
                                 }
 
                                 break;
@@ -3984,7 +4116,7 @@
                                 break;
 
                         default:
-                                assert_not_reached("Invalid wake-up pointer");
+                                assert_not_reached();
                         }
                 }
                 if (r < 0)
@@ -4051,6 +4183,10 @@
         if (r < 0)
                 goto finish;
 
+        r = process_inotify(e);
+        if (r < 0)
+                goto finish;
+
         r = process_timer(e, e->timestamp.realtime, &e->realtime);
         if (r < 0)
                 goto finish;
@@ -4059,10 +4195,6 @@
         if (r < 0)
                 goto finish;
 
-        r = process_timer(e, e->timestamp.monotonic, &e->monotonic);
-        if (r < 0)
-                goto finish;
-
         r = process_timer(e, e->timestamp.realtime, &e->realtime_alarm);
         if (r < 0)
                 goto finish;
@@ -4071,9 +4203,20 @@
         if (r < 0)
                 goto finish;
 
-        r = process_inotify(e);
+        r = process_timer(e, e->timestamp.monotonic, &e->monotonic);
         if (r < 0)
                 goto finish;
+        else if (r == 1) {
+                /* Ratelimit expiry callback was called. Let's postpone processing pending sources and
+                 * put loop in the initial state in order to evaluate (in the next iteration) also sources
+                 * there were potentially re-enabled by the callback.
+                 *
+                 * Wondering why we treat only this invocation of process_timer() differently? Once event
+                 * source is ratelimited we essentially transform it into CLOCK_MONOTONIC timer hence
+                 * ratelimit expiry callback is never called for any other timer type. */
+                r = 0;
+                goto finish;
+        }
 
         if (event_next_pending(e)) {
                 e->state = SD_EVENT_PENDING;
@@ -4103,7 +4246,7 @@
 
         p = event_next_pending(e);
         if (p) {
-                _unused_ _cleanup_(sd_event_unrefp) sd_event *ref = sd_event_ref(e);
+                PROTECT_EVENT(e);
 
                 e->state = SD_EVENT_RUNNING;
                 r = source_dispatch(p);
@@ -4144,7 +4287,7 @@
 
                 this_run = now(CLOCK_MONOTONIC);
 
-                l = u64log2(this_run - e->last_run_usec);
+                l = log2u64(this_run - e->last_run_usec);
                 assert(l < ELEMENTSOF(e->delays));
                 e->delays[l]++;
 
@@ -4155,7 +4298,7 @@
         }
 
         /* Make sure that none of the preparation callbacks ends up freeing the event source under our feet */
-        _unused_ _cleanup_(sd_event_unrefp) sd_event *ref = sd_event_ref(e);
+        PROTECT_EVENT(e);
 
         r = sd_event_prepare(e);
         if (r == 0)
@@ -4185,7 +4328,7 @@
         assert_return(!event_pid_changed(e), -ECHILD);
         assert_return(e->state == SD_EVENT_INITIAL, -EBUSY);
 
-        _unused_ _cleanup_(sd_event_unrefp) sd_event *ref = sd_event_ref(e);
+        PROTECT_EVENT(e);
 
         while (e->state != SD_EVENT_FINISHED) {
                 r = sd_event_run(e, UINT64_MAX);
@@ -4246,12 +4389,6 @@
         if (!TRIPLE_TIMESTAMP_HAS_CLOCK(clock))
                 return -EOPNOTSUPP;
 
-        /* Generate a clean error in case CLOCK_BOOTTIME is not available. Note that don't use clock_supported() here,
-         * for a reason: there are systems where CLOCK_BOOTTIME is supported, but CLOCK_BOOTTIME_ALARM is not, but for
-         * the purpose of getting the time this doesn't matter. */
-        if (IN_SET(clock, CLOCK_BOOTTIME, CLOCK_BOOTTIME_ALARM) && !clock_boottime_supported())
-                return -EOPNOTSUPP;
-
         if (!triple_timestamp_is_set(&e->timestamp)) {
                 /* Implicitly fall back to now() if we never ran before and thus have no cached time. */
                 *usec = now(clock);
@@ -4442,7 +4579,7 @@
 
         /* When ratelimiting is configured we'll always reset the rate limit state first and start fresh,
          * non-ratelimited. */
-        r = event_source_leave_ratelimit(s);
+        r = event_source_leave_ratelimit(s, /* run_callback */ false);
         if (r < 0)
                 return r;
 
@@ -4450,11 +4587,18 @@
         return 0;
 }
 
+_public_ int sd_event_source_set_ratelimit_expire_callback(sd_event_source *s, sd_event_handler_t callback) {
+        assert_return(s, -EINVAL);
+
+        s->ratelimit_expire_callback = callback;
+        return 0;
+}
+
 _public_ int sd_event_source_get_ratelimit(sd_event_source *s, uint64_t *ret_interval, unsigned *ret_burst) {
         assert_return(s, -EINVAL);
 
-        /* Querying whether an event source has ratelimiting configured is not a loggable offsense, hence
-         * don't use assert_return(). Unlike turning on ratelimiting it's not really a programming error */
+        /* Querying whether an event source has ratelimiting configured is not a loggable offense, hence
+         * don't use assert_return(). Unlike turning on ratelimiting it's not really a programming error. */
         if (!EVENT_SOURCE_CAN_RATE_LIMIT(s->type))
                 return -EDOM;
 
@@ -4480,3 +4624,55 @@
 
         return s->ratelimited;
 }
+
+_public_ int sd_event_set_signal_exit(sd_event *e, int b) {
+        bool change = false;
+        int r;
+
+        assert_return(e, -EINVAL);
+
+        if (b) {
+                /* We want to maintain pointers to these event sources, so that we can destroy them when told
+                 * so. But we also don't want them to pin the event loop itself. Hence we mark them as
+                 * floating after creation (and undo this before deleting them again). */
+
+                if (!e->sigint_event_source) {
+                        r = sd_event_add_signal(e, &e->sigint_event_source, SIGINT | SD_EVENT_SIGNAL_PROCMASK, NULL, NULL);
+                        if (r < 0)
+                                return r;
+
+                        assert(sd_event_source_set_floating(e->sigint_event_source, true) >= 0);
+                        change = true;
+                }
+
+                if (!e->sigterm_event_source) {
+                        r = sd_event_add_signal(e, &e->sigterm_event_source, SIGTERM | SD_EVENT_SIGNAL_PROCMASK, NULL, NULL);
+                        if (r < 0) {
+                                if (change) {
+                                        assert(sd_event_source_set_floating(e->sigint_event_source, false) >= 0);
+                                        e->sigint_event_source = sd_event_source_unref(e->sigint_event_source);
+                                }
+
+                                return r;
+                        }
+
+                        assert(sd_event_source_set_floating(e->sigterm_event_source, true) >= 0);
+                        change = true;
+                }
+
+        } else {
+                if (e->sigint_event_source) {
+                        assert(sd_event_source_set_floating(e->sigint_event_source, false) >= 0);
+                        e->sigint_event_source = sd_event_source_unref(e->sigint_event_source);
+                        change = true;
+                }
+
+                if (e->sigterm_event_source) {
+                        assert(sd_event_source_set_floating(e->sigterm_event_source, false) >= 0);
+                        e->sigterm_event_source = sd_event_source_unref(e->sigterm_event_source);
+                        change = true;
+                }
+        }
+
+        return change;
+}
diff --git a/src/libsystemd/sd-event/test-event.c b/src/libsystemd/sd-event/test-event.c
index 7ff1452..591eab8 100644
--- a/src/libsystemd/sd-event/test-event.c
+++ b/src/libsystemd/sd-event/test-event.c
@@ -5,6 +5,7 @@
 #include "sd-event.h"
 
 #include "alloc-util.h"
+#include "exec-util.h"
 #include "fd-util.h"
 #include "fs-util.h"
 #include "log.h"
@@ -20,7 +21,6 @@
 #include "string-util.h"
 #include "tests.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 static int prepare_handler(sd_event_source *s, void *userdata) {
         log_info("preparing %c", PTR_TO_INT(userdata));
@@ -54,7 +54,7 @@
                 else
                         assert_se(sd_event_source_set_enabled(s, SD_EVENT_OFF) >= 0);
         } else
-                assert_not_reached("Yuck!");
+                assert_not_reached();
 
         return 1;
 }
@@ -169,7 +169,7 @@
                         got_c = true;
                 }
         } else
-                assert_not_reached("Huh?");
+                assert_not_reached();
 
         return 2;
 }
@@ -194,11 +194,12 @@
         return 2;
 }
 
-static void test_basic(bool with_pidfd) {
+static void test_basic_one(bool with_pidfd) {
         sd_event *e = NULL;
         sd_event_source *w = NULL, *x = NULL, *y = NULL, *z = NULL, *q = NULL, *t = NULL;
         static const char ch = 'x';
-        int a[2] = { -1, -1 }, b[2] = { -1, -1}, d[2] = { -1, -1}, k[2] = { -1, -1 };
+        int a[2] = PIPE_EBADF, b[2] = PIPE_EBADF,
+            d[2] = PIPE_EBADF, k[2] = PIPE_EBADF;
         uint64_t event_now;
         int64_t priority;
 
@@ -225,8 +226,7 @@
 
         got_a = false, got_b = false, got_c = false, got_d = 0;
 
-        /* Add a oneshot handler, trigger it, reenable it, and trigger
-         * it again. */
+        /* Add a oneshot handler, trigger it, reenable it, and trigger it again. */
         assert_se(sd_event_add_io(e, &w, d[0], EPOLLIN, io_handler, INT_TO_PTR('d')) >= 0);
         assert_se(sd_event_source_set_enabled(w, SD_EVENT_ONESHOT) >= 0);
         assert_se(write(d[1], &ch, 1) >= 0);
@@ -301,20 +301,21 @@
         assert_se(unsetenv("SYSTEMD_PIDFD") >= 0);
 }
 
-static void test_sd_event_now(void) {
+TEST(basic) {
+        test_basic_one(true);   /* test with pidfd */
+        test_basic_one(false);  /* test without pidfd */
+}
+
+TEST(sd_event_now) {
         _cleanup_(sd_event_unrefp) sd_event *e = NULL;
         uint64_t event_now;
 
-        log_info("/* %s */", __func__);
-
         assert_se(sd_event_new(&e) >= 0);
         assert_se(sd_event_now(e, CLOCK_MONOTONIC, &event_now) > 0);
         assert_se(sd_event_now(e, CLOCK_REALTIME, &event_now) > 0);
         assert_se(sd_event_now(e, CLOCK_REALTIME_ALARM, &event_now) > 0);
-        if (clock_boottime_supported()) {
-                assert_se(sd_event_now(e, CLOCK_BOOTTIME, &event_now) > 0);
-                assert_se(sd_event_now(e, CLOCK_BOOTTIME_ALARM, &event_now) > 0);
-        }
+        assert_se(sd_event_now(e, CLOCK_BOOTTIME, &event_now) > 0);
+        assert_se(sd_event_now(e, CLOCK_BOOTTIME_ALARM, &event_now) > 0);
         assert_se(sd_event_now(e, -1, &event_now) == -EOPNOTSUPP);
         assert_se(sd_event_now(e, 900 /* arbitrary big number */, &event_now) == -EOPNOTSUPP);
 
@@ -323,10 +324,8 @@
         assert_se(sd_event_now(e, CLOCK_MONOTONIC, &event_now) == 0);
         assert_se(sd_event_now(e, CLOCK_REALTIME, &event_now) == 0);
         assert_se(sd_event_now(e, CLOCK_REALTIME_ALARM, &event_now) == 0);
-        if (clock_boottime_supported()) {
-                assert_se(sd_event_now(e, CLOCK_BOOTTIME, &event_now) == 0);
-                assert_se(sd_event_now(e, CLOCK_BOOTTIME_ALARM, &event_now) == 0);
-        }
+        assert_se(sd_event_now(e, CLOCK_BOOTTIME, &event_now) == 0);
+        assert_se(sd_event_now(e, CLOCK_BOOTTIME_ALARM, &event_now) == 0);
         assert_se(sd_event_now(e, -1, &event_now) == -EOPNOTSUPP);
         assert_se(sd_event_now(e, 900 /* arbitrary big number */, &event_now) == -EOPNOTSUPP);
 }
@@ -340,12 +339,10 @@
         return 0;
 }
 
-static void test_rtqueue(void) {
+TEST(rtqueue) {
         sd_event_source *u = NULL, *v = NULL, *s = NULL;
         sd_event *e = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(sd_event_default(&e) >= 0);
 
         assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGRTMIN+2, SIGRTMIN+3, SIGUSR2, -1) >= 0);
@@ -403,8 +400,8 @@
 static void maybe_exit(sd_event_source *s, struct inotify_context *c) {
         unsigned n;
 
-        assert(s);
-        assert(c);
+        assert_se(s);
+        assert_se(c);
 
         if (!c->delete_self_handler_called)
                 return;
@@ -451,7 +448,7 @@
                 log_info("inotify-handler <%s>: delete of %s", description, ev->name);
                 assert_se(streq(ev->name, "sub"));
         } else
-                assert_not_reached("unexpected inotify event");
+                assert_not_reached();
 
         maybe_exit(s, c);
         return 1;
@@ -469,13 +466,13 @@
         } else if (ev->mask & IN_IGNORED) {
                 log_info("delete-self-handler: ignore");
         } else
-                assert_not_reached("unexpected inotify event (delete-self)");
+                assert_not_reached();
 
         maybe_exit(s, c);
         return 1;
 }
 
-static void test_inotify(unsigned n_create_events) {
+static void test_inotify_one(unsigned n_create_events) {
         _cleanup_(rm_rf_physical_and_freep) char *p = NULL;
         sd_event_source *a = NULL, *b = NULL, *c = NULL, *d = NULL;
         struct inotify_context context = {
@@ -528,6 +525,11 @@
         sd_event_unref(e);
 }
 
+TEST(inotify) {
+        test_inotify_one(100); /* should work without overflow */
+        test_inotify_one(33000); /* should trigger a q overflow */
+}
+
 static int pidfd_handler(sd_event_source *s, const siginfo_t *si, void *userdata) {
         assert_se(s);
         assert_se(si);
@@ -547,14 +549,12 @@
         return 0;
 }
 
-static void test_pidfd(void) {
+TEST(pidfd) {
         sd_event_source *s = NULL, *t = NULL;
         sd_event *e = NULL;
         int pidfd;
         pid_t pid, pid2;
 
-        log_info("/* %s */", __func__);
-
         assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGCHLD, -1) >= 0);
 
         pid = fork();
@@ -622,15 +622,18 @@
         return 0;
 }
 
-static void test_ratelimit(void) {
-        _cleanup_close_pair_ int p[2] = {-1, -1};
+static int expired = -1;
+static int ratelimit_expired(sd_event_source *s, void *userdata) {
+        return ++expired;
+}
+
+TEST(ratelimit) {
+        _cleanup_close_pair_ int p[2] = PIPE_EBADF;
         _cleanup_(sd_event_unrefp) sd_event *e = NULL;
         _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
         uint64_t interval;
         unsigned count, burst;
 
-        log_info("/* %s */", __func__);
-
         assert_se(sd_event_default(&e) >= 0);
         assert_se(pipe2(p, O_CLOEXEC|O_NONBLOCK) >= 0);
 
@@ -651,7 +654,7 @@
 
         assert_se(sd_event_source_is_ratelimited(s) == 0);
         assert_se(count == 10);
-        log_info("ratelimit_io_handler: called %d times, event source not ratelimited", count);
+        log_info("ratelimit_io_handler: called %u times, event source not ratelimited", count);
 
         assert_se(sd_event_source_set_ratelimit(s, 0, 0) >= 0);
         assert_se(sd_event_source_set_ratelimit(s, 1 * USEC_PER_SEC, 5) >= 0);
@@ -662,7 +665,7 @@
                 assert_se(sd_event_run(e, UINT64_MAX) >= 0);
                 assert_se(usleep(10) >= 0);
         }
-        log_info("ratelimit_io_handler: called %d times, event source got ratelimited", count);
+        log_info("ratelimit_io_handler: called %u times, event source got ratelimited", count);
         assert_se(count < 10);
 
         s = sd_event_source_unref(s);
@@ -676,7 +679,7 @@
                 assert_se(sd_event_run(e, UINT64_MAX) >= 0);
         } while (!sd_event_source_is_ratelimited(s));
 
-        log_info("ratelimit_time_handler: called %d times, event source got ratelimited", count);
+        log_info("ratelimit_time_handler: called %u times, event source got ratelimited", count);
         assert_se(count == 10);
 
         /* In order to get rid of active rate limit client needs to disable it explicitly */
@@ -685,15 +688,22 @@
 
         assert_se(sd_event_source_set_ratelimit(s, 1 * USEC_PER_SEC, 10) >= 0);
 
+        /* Set callback that will be invoked when we leave rate limited state. */
+        assert_se(sd_event_source_set_ratelimit_expire_callback(s, ratelimit_expired) >= 0);
+
         do {
                 assert_se(sd_event_run(e, UINT64_MAX) >= 0);
         } while (!sd_event_source_is_ratelimited(s));
 
         log_info("ratelimit_time_handler: called 10 more times, event source got ratelimited");
         assert_se(count == 20);
+
+        /* Dispatch the event loop once more and check that ratelimit expiration callback got called */
+        assert_se(sd_event_run(e, UINT64_MAX) >= 0);
+        assert_se(expired == 0);
 }
 
-static void test_simple_timeout(void) {
+TEST(simple_timeout) {
         _cleanup_(sd_event_unrefp) sd_event *e = NULL;
         usec_t f, t, some_time;
 
@@ -712,23 +722,90 @@
         assert_se(t >= usec_add(f, some_time));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+static int inotify_self_destroy_handler(sd_event_source *s, const struct inotify_event *ev, void *userdata) {
+        sd_event_source **p = userdata;
 
-        test_simple_timeout();
+        assert_se(ev);
+        assert_se(p);
+        assert_se(*p == s);
 
-        test_basic(true);   /* test with pidfd */
-        test_basic(false);  /* test without pidfd */
+        assert_se(FLAGS_SET(ev->mask, IN_ATTRIB));
 
-        test_sd_event_now();
-        test_rtqueue();
+        assert_se(sd_event_exit(sd_event_source_get_event(s), 0) >= 0);
 
-        test_inotify(100); /* should work without overflow */
-        test_inotify(33000); /* should trigger a q overflow */
-
-        test_pidfd();
-
-        test_ratelimit();
-
-        return 0;
+        *p = sd_event_source_unref(*p); /* here's what we actually intend to test: we destroy the event
+                                         * source from inside the event source handler */
+        return 1;
 }
+
+TEST(inotify_self_destroy) {
+        _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        char path[] = "/tmp/inotifyXXXXXX";
+        _cleanup_close_ int fd = -EBADF;
+
+        /* Tests that destroying an inotify event source from its own handler is safe */
+
+        assert_se(sd_event_default(&e) >= 0);
+
+        fd = mkostemp_safe(path);
+        assert_se(fd >= 0);
+        assert_se(sd_event_add_inotify_fd(e, &s, fd, IN_ATTRIB, inotify_self_destroy_handler, &s) >= 0);
+        fd = safe_close(fd);
+        assert_se(unlink(path) >= 0); /* This will trigger IN_ATTRIB because link count goes to zero */
+        assert_se(sd_event_loop(e) >= 0);
+}
+
+struct inotify_process_buffered_data_context {
+        const char *path[2];
+        unsigned i;
+};
+
+static int inotify_process_buffered_data_handler(sd_event_source *s, const struct inotify_event *ev, void *userdata) {
+        struct inotify_process_buffered_data_context *c = ASSERT_PTR(userdata);
+        const char *description;
+
+        assert_se(sd_event_source_get_description(s, &description) >= 0);
+
+        assert_se(c->i < 2);
+        assert_se(streq(c->path[c->i], description));
+        c->i++;
+
+        return 1;
+}
+
+TEST(inotify_process_buffered_data) {
+        _cleanup_(rm_rf_physical_and_freep) char *p = NULL, *q = NULL;
+        _cleanup_(sd_event_source_unrefp) sd_event_source *a = NULL, *b = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        _cleanup_free_ char *z = NULL;
+
+        /* For issue #23826 */
+
+        assert_se(sd_event_default(&e) >= 0);
+
+        assert_se(mkdtemp_malloc("/tmp/test-inotify-XXXXXX", &p) >= 0);
+        assert_se(mkdtemp_malloc("/tmp/test-inotify-XXXXXX", &q) >= 0);
+
+        struct inotify_process_buffered_data_context context = {
+                .path = { p, q },
+        };
+
+        assert_se(sd_event_add_inotify(e, &a, p, IN_CREATE, inotify_process_buffered_data_handler, &context) >= 0);
+        assert_se(sd_event_add_inotify(e, &b, q, IN_CREATE, inotify_process_buffered_data_handler, &context) >= 0);
+
+        assert_se(z = path_join(p, "aaa"));
+        assert_se(touch(z) >= 0);
+        z = mfree(z);
+        assert_se(z = path_join(q, "bbb"));
+        assert_se(touch(z) >= 0);
+        z = mfree(z);
+
+        assert_se(sd_event_run(e, 10 * USEC_PER_SEC) > 0);
+        assert_se(sd_event_prepare(e) > 0); /* issue #23826: this was 0. */
+        assert_se(sd_event_dispatch(e) > 0);
+        assert_se(sd_event_prepare(e) == 0);
+        assert_se(sd_event_wait(e, 0) == 0);
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/libsystemd/sd-hwdb/hwdb-internal.h b/src/libsystemd/sd-hwdb/hwdb-internal.h
index 5ddc221..5302679 100644
--- a/src/libsystemd/sd-hwdb/hwdb-internal.h
+++ b/src/libsystemd/sd-hwdb/hwdb-internal.h
@@ -2,8 +2,9 @@
 #pragma once
 
 #include <stdint.h>
+#include <sys/stat.h>
 
-#include "def.h"
+#include "constants.h"
 #include "hashmap.h"
 #include "sparse-endian.h"
 
diff --git a/src/libsystemd/sd-hwdb/sd-hwdb.c b/src/libsystemd/sd-hwdb/sd-hwdb.c
index 748cf26..f163314 100644
--- a/src/libsystemd/sd-hwdb/sd-hwdb.c
+++ b/src/libsystemd/sd-hwdb/sd-hwdb.c
@@ -281,9 +281,8 @@
         return 0;
 }
 
-_public_ int sd_hwdb_new(sd_hwdb **ret) {
+static int hwdb_new(const char *path, sd_hwdb **ret) {
         _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
-        const char *hwdb_bin_path;
         const char sig[] = HWDB_SIG;
 
         assert_return(ret, -EINVAL);
@@ -294,38 +293,44 @@
 
         hwdb->n_ref = 1;
 
-        /* find hwdb.bin in hwdb_bin_paths */
-        NULSTR_FOREACH(hwdb_bin_path, hwdb_bin_paths) {
-                log_debug("Trying to open \"%s\"...", hwdb_bin_path);
-                hwdb->f = fopen(hwdb_bin_path, "re");
-                if (hwdb->f)
-                        break;
-                if (errno != ENOENT)
-                        return log_debug_errno(errno, "Failed to open %s: %m", hwdb_bin_path);
+        /* Find hwdb.bin in the explicit path if provided, or iterate over hwdb_bin_paths otherwise  */
+        if (!isempty(path)) {
+                log_debug("Trying to open \"%s\"...", path);
+                hwdb->f = fopen(path, "re");
+                if (!hwdb->f)
+                        return log_debug_errno(errno, "Failed to open %s: %m", path);
+        } else {
+                NULSTR_FOREACH(p, hwdb_bin_paths) {
+                        log_debug("Trying to open \"%s\"...", p);
+                        hwdb->f = fopen(p, "re");
+                        if (hwdb->f) {
+                                path = p;
+                                break;
+                        }
+                        if (errno != ENOENT)
+                                return log_debug_errno(errno, "Failed to open %s: %m", p);
+                }
+
+                if (!hwdb->f)
+                        return log_debug_errno(SYNTHETIC_ERRNO(ENOENT),
+                                               "hwdb.bin does not exist, please run 'systemd-hwdb update'");
         }
 
-        if (!hwdb->f)
-                return log_debug_errno(SYNTHETIC_ERRNO(ENOENT),
-                                       "hwdb.bin does not exist, please run 'systemd-hwdb update'");
-
         if (fstat(fileno(hwdb->f), &hwdb->st) < 0)
-                return log_debug_errno(errno, "Failed to stat %s: %m", hwdb_bin_path);
+                return log_debug_errno(errno, "Failed to stat %s: %m", path);
         if (hwdb->st.st_size < (off_t) offsetof(struct trie_header_f, strings_len) + 8)
-                return log_debug_errno(SYNTHETIC_ERRNO(EIO),
-                                       "File %s is too short: %m", hwdb_bin_path);
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO), "File %s is too short: %m", path);
         if (file_offset_beyond_memory_size(hwdb->st.st_size))
-                return log_debug_errno(SYNTHETIC_ERRNO(EFBIG),
-                                       "File %s is too long: %m", hwdb_bin_path);
+                return log_debug_errno(SYNTHETIC_ERRNO(EFBIG), "File %s is too long: %m", path);
 
         hwdb->map = mmap(0, hwdb->st.st_size, PROT_READ, MAP_SHARED, fileno(hwdb->f), 0);
         if (hwdb->map == MAP_FAILED)
-                return log_debug_errno(errno, "Failed to map %s: %m", hwdb_bin_path);
+                return log_debug_errno(errno, "Failed to map %s: %m", path);
 
         if (memcmp(hwdb->map, sig, sizeof(hwdb->head->signature)) != 0 ||
             (size_t) hwdb->st.st_size != le64toh(hwdb->head->file_size))
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Failed to recognize the format of %s",
-                                       hwdb_bin_path);
+                                       "Failed to recognize the format of %s", path);
 
         log_debug("=== trie on-disk ===");
         log_debug("tool version:          %"PRIu64, le64toh(hwdb->head->tool_version));
@@ -339,6 +344,16 @@
         return 0;
 }
 
+_public_ int sd_hwdb_new_from_path(const char *path, sd_hwdb **ret) {
+        assert_return(!isempty(path), -EINVAL);
+
+        return hwdb_new(path, ret);
+}
+
+_public_ int sd_hwdb_new(sd_hwdb **ret) {
+        return hwdb_new(NULL, ret);
+}
+
 static sd_hwdb *hwdb_free(sd_hwdb *hwdb) {
         assert(hwdb);
 
diff --git a/src/libsystemd/sd-id128/id128-util.c b/src/libsystemd/sd-id128/id128-util.c
index 2074771..a009a11 100644
--- a/src/libsystemd/sd-id128/id128-util.c
+++ b/src/libsystemd/sd-id128/id128-util.c
@@ -5,90 +5,57 @@
 #include <unistd.h>
 
 #include "fd-util.h"
-#include "fs-util.h"
 #include "hexdecoct.h"
 #include "id128-util.h"
 #include "io-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
-
-char *id128_to_uuid_string(sd_id128_t id, char s[static ID128_UUID_STRING_MAX]) {
-        unsigned n, k = 0;
-
-        assert(s);
-
-        /* Similar to sd_id128_to_string() but formats the result as UUID instead of plain hex chars */
-
-        for (n = 0; n < 16; n++) {
-
-                if (IN_SET(n, 4, 6, 8, 10))
-                        s[k++] = '-';
-
-                s[k++] = hexchar(id.bytes[n] >> 4);
-                s[k++] = hexchar(id.bytes[n] & 0xF);
-        }
-
-        assert(k == 36);
-
-        s[k] = 0;
-
-        return s;
-}
+#include "sync-util.h"
 
 bool id128_is_valid(const char *s) {
-        size_t i, l;
+        size_t l;
 
         assert(s);
 
         l = strlen(s);
-        if (l == 32) {
 
+        if (l == SD_ID128_STRING_MAX - 1)
                 /* Plain formatted 128bit hex string */
+                return in_charset(s, HEXDIGITS);
 
-                for (i = 0; i < l; i++) {
-                        char c = s[i];
-
-                        if (!(c >= '0' && c <= '9') &&
-                            !(c >= 'a' && c <= 'z') &&
-                            !(c >= 'A' && c <= 'Z'))
-                                return false;
-                }
-
-        } else if (l == 36) {
-
+        if (l == SD_ID128_UUID_STRING_MAX - 1) {
                 /* Formatted UUID */
-
-                for (i = 0; i < l; i++) {
+                for (size_t i = 0; i < l; i++) {
                         char c = s[i];
 
                         if (IN_SET(i, 8, 13, 18, 23)) {
                                 if (c != '-')
                                         return false;
-                        } else {
-                                if (!(c >= '0' && c <= '9') &&
-                                    !(c >= 'a' && c <= 'z') &&
-                                    !(c >= 'A' && c <= 'Z'))
-                                        return false;
-                        }
+                        } else if (!ascii_ishex(c))
+                                return false;
                 }
+                return true;
+        }
 
-        } else
-                return false;
-
-        return true;
+        return false;
 }
 
-int id128_read_fd(int fd, Id128Format f, sd_id128_t *ret) {
-        char buffer[36 + 2];
+int id128_read_fd(int fd, Id128FormatFlag f, sd_id128_t *ret) {
+        char buffer[SD_ID128_UUID_STRING_MAX + 1]; /* +1 is for trailing newline */
         ssize_t l;
+        int r;
 
         assert(fd >= 0);
-        assert(f < _ID128_FORMAT_MAX);
 
         /* Reads an 128bit ID from a file, which may either be in plain format (32 hex digits), or in UUID format, both
          * optionally followed by a newline and nothing else. ID files should really be newline terminated, but if they
          * aren't that's OK too, following the rule of "Be conservative in what you send, be liberal in what you
-         * accept". */
+         * accept".
+         *
+         * This returns the following:
+         *     -ENOMEDIUM: an empty string,
+         *     -ENOPKG:    "uninitialized" or "uninitialized\n",
+         *     -EUCLEAN:   other invalid strings. */
 
         l = loop_read(fd, buffer, sizeof(buffer), false); /* we expect a short read of either 32/33 or 36/37 chars */
         if (l < 0)
@@ -98,44 +65,44 @@
 
         switch (l) {
 
-        case 13:
-        case 14:
-                /* Treat an "uninitialized" id file like an empty one */
-                return f == ID128_PLAIN_OR_UNINIT && strneq(buffer, "uninitialized\n", l) ? -ENOMEDIUM : -EINVAL;
+        case STRLEN("uninitialized"):
+        case STRLEN("uninitialized\n"):
+                return strneq(buffer, "uninitialized\n", l) ? -ENOPKG : -EINVAL;
 
-        case 33: /* plain UUID with trailing newline */
-                if (buffer[32] != '\n')
-                        return -EINVAL;
+        case SD_ID128_STRING_MAX: /* plain UUID with trailing newline */
+                if (buffer[SD_ID128_STRING_MAX-1] != '\n')
+                        return -EUCLEAN;
 
                 _fallthrough_;
-        case 32: /* plain UUID without trailing newline */
-                if (f == ID128_UUID)
-                        return -EINVAL;
+        case SD_ID128_STRING_MAX-1: /* plain UUID without trailing newline */
+                if (!FLAGS_SET(f, ID128_FORMAT_PLAIN))
+                        return -EUCLEAN;
 
-                buffer[32] = 0;
+                buffer[SD_ID128_STRING_MAX-1] = 0;
                 break;
 
-        case 37: /* RFC UUID with trailing newline */
-                if (buffer[36] != '\n')
-                        return -EINVAL;
+        case SD_ID128_UUID_STRING_MAX: /* RFC UUID with trailing newline */
+                if (buffer[SD_ID128_UUID_STRING_MAX-1] != '\n')
+                        return -EUCLEAN;
 
                 _fallthrough_;
-        case 36: /* RFC UUID without trailing newline */
-                if (IN_SET(f, ID128_PLAIN, ID128_PLAIN_OR_UNINIT))
-                        return -EINVAL;
+        case SD_ID128_UUID_STRING_MAX-1: /* RFC UUID without trailing newline */
+                if (!FLAGS_SET(f, ID128_FORMAT_UUID))
+                        return -EUCLEAN;
 
-                buffer[36] = 0;
+                buffer[SD_ID128_UUID_STRING_MAX-1] = 0;
                 break;
 
         default:
-                return -EINVAL;
+                return -EUCLEAN;
         }
 
-        return sd_id128_from_string(buffer, ret);
+        r = sd_id128_from_string(buffer, ret);
+        return r == -EINVAL ? -EUCLEAN : r;
 }
 
-int id128_read(const char *p, Id128Format f, sd_id128_t *ret) {
-        _cleanup_close_ int fd = -1;
+int id128_read(const char *p, Id128FormatFlag f, sd_id128_t *ret) {
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(p, O_RDONLY|O_CLOEXEC|O_NOCTTY);
         if (fd < 0)
@@ -144,33 +111,29 @@
         return id128_read_fd(fd, f, ret);
 }
 
-int id128_write_fd(int fd, Id128Format f, sd_id128_t id, bool do_sync) {
-        char buffer[36 + 2];
+int id128_write_fd(int fd, Id128FormatFlag f, sd_id128_t id) {
+        char buffer[SD_ID128_UUID_STRING_MAX + 1]; /* +1 is for trailing newline */
         size_t sz;
         int r;
 
         assert(fd >= 0);
-        assert(f < _ID128_FORMAT_MAX);
+        assert(IN_SET((f & ID128_FORMAT_ANY), ID128_FORMAT_PLAIN, ID128_FORMAT_UUID));
 
-        if (f != ID128_UUID) {
-                sd_id128_to_string(id, buffer);
-                buffer[32] = '\n';
-                sz = 33;
+        if (FLAGS_SET(f, ID128_FORMAT_PLAIN)) {
+                assert_se(sd_id128_to_string(id, buffer));
+                sz = SD_ID128_STRING_MAX;
         } else {
-                id128_to_uuid_string(id, buffer);
-                buffer[36] = '\n';
-                sz = 37;
+                assert_se(sd_id128_to_uuid_string(id, buffer));
+                sz = SD_ID128_UUID_STRING_MAX;
         }
 
+        buffer[sz - 1] = '\n';
         r = loop_write(fd, buffer, sz, false);
         if (r < 0)
                 return r;
 
-        if (do_sync) {
-                if (fsync(fd) < 0)
-                        return -errno;
-
-                r = fsync_directory_of_file(fd);
+        if (FLAGS_SET(f, ID128_SYNC_ON_WRITE)) {
+                r = fsync_full(fd);
                 if (r < 0)
                         return r;
         }
@@ -178,14 +141,14 @@
         return 0;
 }
 
-int id128_write(const char *p, Id128Format f, sd_id128_t id, bool do_sync) {
-        _cleanup_close_ int fd = -1;
+int id128_write(const char *p, Id128FormatFlag f, sd_id128_t id) {
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(p, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_TRUNC, 0444);
         if (fd < 0)
                 return -errno;
 
-        return id128_write_fd(fd, f, id, do_sync);
+        return id128_write_fd(fd, f, id);
 }
 
 void id128_hash_func(const sd_id128_t *p, struct siphash *state) {
@@ -210,6 +173,7 @@
 }
 
 DEFINE_HASH_OPS(id128_hash_ops, sd_id128_t, id128_hash_func, id128_compare_func);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(id128_hash_ops_free, sd_id128_t, id128_hash_func, id128_compare_func, free);
 
 int id128_get_product(sd_id128_t *ret) {
         sd_id128_t uuid;
@@ -220,9 +184,9 @@
         /* Reads the systems product UUID from DMI or devicetree (where it is located on POWER). This is
          * particularly relevant in VM environments, where VM managers typically place a VM uuid there. */
 
-        r = id128_read("/sys/class/dmi/id/product_uuid", ID128_UUID, &uuid);
+        r = id128_read("/sys/class/dmi/id/product_uuid", ID128_FORMAT_UUID, &uuid);
         if (r == -ENOENT)
-                r = id128_read("/sys/firmware/devicetree/base/vm,uuid", ID128_UUID, &uuid);
+                r = id128_read("/proc/device-tree/vm,uuid", ID128_FORMAT_UUID, &uuid);
         if (r < 0)
                 return r;
 
diff --git a/src/libsystemd/sd-id128/id128-util.h b/src/libsystemd/sd-id128/id128-util.h
index 053ef0a..e094de6 100644
--- a/src/libsystemd/sd-id128/id128-util.h
+++ b/src/libsystemd/sd-id128/id128-util.h
@@ -8,33 +8,34 @@
 #include "hash-funcs.h"
 #include "macro.h"
 
-#define ID128_UUID_STRING_MAX 37
-
-char *id128_to_uuid_string(sd_id128_t id, char s[static ID128_UUID_STRING_MAX]);
-
 bool id128_is_valid(const char *s) _pure_;
 
-typedef enum Id128Format {
-        ID128_ANY,
-        ID128_PLAIN,  /* formatted as 32 hex chars as-is */
-        ID128_PLAIN_OR_UNINIT,  /* formatted as 32 hex chars as-is; allow special "uninitialized"
-                                 * value when reading from file (id128_read() and id128_read_fd()).
-                                 *
-                                 * This format should be used when reading a machine-id file. */
-        ID128_UUID,   /* formatted as 36 character uuid string */
-        _ID128_FORMAT_MAX,
-} Id128Format;
+typedef enum Id128FormatFlag {
+        ID128_FORMAT_PLAIN = 1 << 0,  /* formatted as 32 hex chars as-is */
+        ID128_FORMAT_UUID  = 1 << 1,  /* formatted as 36 character uuid string */
+        ID128_FORMAT_ANY   = ID128_FORMAT_PLAIN | ID128_FORMAT_UUID,
 
-int id128_read_fd(int fd, Id128Format f, sd_id128_t *ret);
-int id128_read(const char *p, Id128Format f, sd_id128_t *ret);
+        ID128_SYNC_ON_WRITE = 1 << 2, /* Sync the file after write. Used only when writing an ID. */
+} Id128FormatFlag;
 
-int id128_write_fd(int fd, Id128Format f, sd_id128_t id, bool do_sync);
-int id128_write(const char *p, Id128Format f, sd_id128_t id, bool do_sync);
+int id128_read_fd(int fd, Id128FormatFlag f, sd_id128_t *ret);
+int id128_read(const char *p, Id128FormatFlag f, sd_id128_t *ret);
+
+int id128_write_fd(int fd, Id128FormatFlag f, sd_id128_t id);
+int id128_write(const char *p, Id128FormatFlag f, sd_id128_t id);
 
 void id128_hash_func(const sd_id128_t *p, struct siphash *state);
 int id128_compare_func(const sd_id128_t *a, const sd_id128_t *b) _pure_;
 extern const struct hash_ops id128_hash_ops;
+extern const struct hash_ops id128_hash_ops_free;
 
 sd_id128_t id128_make_v4_uuid(sd_id128_t id);
 
 int id128_get_product(sd_id128_t *ret);
+
+/* A helper to check for the three relevant cases of "machine ID not initialized" */
+#define ERRNO_IS_MACHINE_ID_UNSET(r)            \
+        IN_SET(abs(r),                          \
+               ENOENT,                          \
+               ENOMEDIUM,                       \
+               ENOPKG)
diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c
index d5de935..5ce36cf 100644
--- a/src/libsystemd/sd-id128/sd-id128.c
+++ b/src/libsystemd/sd-id128/sd-id128.c
@@ -9,38 +9,62 @@
 #include "alloc-util.h"
 #include "fd-util.h"
 #include "hexdecoct.h"
+#include "hmac.h"
 #include "id128-util.h"
 #include "io-util.h"
-#include "khash.h"
 #include "macro.h"
 #include "missing_syscall.h"
+#include "missing_threads.h"
 #include "random-util.h"
+#include "stat-util.h"
 #include "user-util.h"
-#include "util.h"
 
 _public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]) {
-        unsigned n;
+        size_t k = 0;
 
         assert_return(s, NULL);
 
-        for (n = 0; n < 16; n++) {
-                s[n*2] = hexchar(id.bytes[n] >> 4);
-                s[n*2+1] = hexchar(id.bytes[n] & 0xF);
+        for (size_t n = 0; n < sizeof(sd_id128_t); n++) {
+                s[k++] = hexchar(id.bytes[n] >> 4);
+                s[k++] = hexchar(id.bytes[n] & 0xF);
         }
 
-        s[32] = 0;
+        assert(k == SD_ID128_STRING_MAX - 1);
+        s[k] = 0;
 
         return s;
 }
 
-_public_ int sd_id128_from_string(const char s[], sd_id128_t *ret) {
-        unsigned n, i;
+_public_ char *sd_id128_to_uuid_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_UUID_STRING_MAX]) {
+        size_t k = 0;
+
+        assert_return(s, NULL);
+
+        /* Similar to sd_id128_to_string() but formats the result as UUID instead of plain hex chars */
+
+        for (size_t n = 0; n < sizeof(sd_id128_t); n++) {
+
+                if (IN_SET(n, 4, 6, 8, 10))
+                        s[k++] = '-';
+
+                s[k++] = hexchar(id.bytes[n] >> 4);
+                s[k++] = hexchar(id.bytes[n] & 0xF);
+        }
+
+        assert(k == SD_ID128_UUID_STRING_MAX - 1);
+        s[k] = 0;
+
+        return s;
+}
+
+_public_ int sd_id128_from_string(const char *s, sd_id128_t *ret) {
+        size_t n, i;
         sd_id128_t t;
         bool is_guid = false;
 
         assert_return(s, -EINVAL);
 
-        for (n = 0, i = 0; n < 16;) {
+        for (n = 0, i = 0; n < sizeof(sd_id128_t);) {
                 int a, b;
 
                 if (s[i] == '-') {
@@ -70,7 +94,7 @@
                 t.bytes[n++] = (a << 4) | b;
         }
 
-        if (i != (is_guid ? 36 : 32))
+        if (i != (is_guid ? SD_ID128_UUID_STRING_MAX : SD_ID128_STRING_MAX) - 1)
                 return -EINVAL;
 
         if (s[i] != 0)
@@ -81,14 +105,28 @@
         return 0;
 }
 
+_public_ int sd_id128_string_equal(const char *s, sd_id128_t id) {
+        sd_id128_t parsed;
+        int r;
+
+        if (!s)
+                return false;
+
+        /* Checks if the specified string matches a valid string representation of the specified 128 bit ID/uuid */
+
+        r = sd_id128_from_string(s, &parsed);
+        if (r < 0)
+                return r;
+
+        return sd_id128_equal(parsed, id);
+}
+
 _public_ int sd_id128_get_machine(sd_id128_t *ret) {
         static thread_local sd_id128_t saved_machine_id = {};
         int r;
 
-        assert_return(ret, -EINVAL);
-
         if (sd_id128_is_null(saved_machine_id)) {
-                r = id128_read("/etc/machine-id", ID128_PLAIN, &saved_machine_id);
+                r = id128_read("/etc/machine-id", ID128_FORMAT_PLAIN, &saved_machine_id);
                 if (r < 0)
                         return r;
 
@@ -96,7 +134,8 @@
                         return -ENOMEDIUM;
         }
 
-        *ret = saved_machine_id;
+        if (ret)
+                *ret = saved_machine_id;
         return 0;
 }
 
@@ -104,15 +143,19 @@
         static thread_local sd_id128_t saved_boot_id = {};
         int r;
 
-        assert_return(ret, -EINVAL);
-
         if (sd_id128_is_null(saved_boot_id)) {
-                r = id128_read("/proc/sys/kernel/random/boot_id", ID128_UUID, &saved_boot_id);
+                r = id128_read("/proc/sys/kernel/random/boot_id", ID128_FORMAT_UUID, &saved_boot_id);
+                if (r == -ENOENT && proc_mounted() == 0)
+                        return -ENOSYS;
                 if (r < 0)
                         return r;
+
+                if (sd_id128_is_null(saved_boot_id))
+                        return -ENOMEDIUM;
         }
 
-        *ret = saved_boot_id;
+        if (ret)
+                *ret = saved_boot_id;
         return 0;
 }
 
@@ -162,22 +205,22 @@
         /* Chop off the final description string */
         d = strrchr(description, ';');
         if (!d)
-                return -EIO;
+                return -EUCLEAN;
         *d = 0;
 
         /* Look for the permissions */
         p = strrchr(description, ';');
         if (!p)
-                return -EIO;
+                return -EUCLEAN;
 
         errno = 0;
         perms = strtoul(p + 1, &e, 16);
         if (errno > 0)
                 return -errno;
         if (e == p + 1) /* Read at least one character */
-                return -EIO;
+                return -EUCLEAN;
         if (e != d) /* Must reached the end */
-                return -EIO;
+                return -EUCLEAN;
 
         if ((perms & ~MAX_PERMS) != 0)
                 return -EPERM;
@@ -187,7 +230,7 @@
         /* Look for the group ID */
         g = strrchr(description, ';');
         if (!g)
-                return -EIO;
+                return -EUCLEAN;
         r = parse_gid(g + 1, &gid);
         if (r < 0)
                 return r;
@@ -198,7 +241,7 @@
         /* Look for the user ID */
         u = strrchr(description, ';');
         if (!u)
-                return -EIO;
+                return -EUCLEAN;
         r = parse_uid(u + 1, &uid);
         if (r < 0)
                 return r;
@@ -209,13 +252,14 @@
         if (c < 0)
                 return -errno;
         if (c != sizeof(sd_id128_t))
-                return -EIO;
+                return -EUCLEAN;
 
         return 0;
 }
 
 static int get_invocation_from_environment(sd_id128_t *ret) {
         const char *e;
+        int r;
 
         assert(ret);
 
@@ -223,44 +267,40 @@
         if (!e)
                 return -ENXIO;
 
-        return sd_id128_from_string(e, ret);
+        r = sd_id128_from_string(e, ret);
+        return r == -EINVAL ? -EUCLEAN : r;
 }
 
 _public_ int sd_id128_get_invocation(sd_id128_t *ret) {
         static thread_local sd_id128_t saved_invocation_id = {};
         int r;
 
-        assert_return(ret, -EINVAL);
-
         if (sd_id128_is_null(saved_invocation_id)) {
                 /* We first check the environment. The environment variable is primarily relevant for user
                  * services, and sufficiently safe as long as no privilege boundary is involved. */
                 r = get_invocation_from_environment(&saved_invocation_id);
-                if (r < 0 && r != -ENXIO)
-                        return r;
-
-                /* The kernel keyring is relevant for system services (as for user services we don't store
-                 * the invocation ID in the keyring, as there'd be no trust benefit in that). */
-                r = get_invocation_from_keyring(&saved_invocation_id);
+                if (r == -ENXIO)
+                        /* The kernel keyring is relevant for system services (as for user services we don't
+                         * store the invocation ID in the keyring, as there'd be no trust benefit in that). */
+                        r = get_invocation_from_keyring(&saved_invocation_id);
                 if (r < 0)
                         return r;
+
+                if (sd_id128_is_null(saved_invocation_id))
+                        return -ENOMEDIUM;
         }
 
-        *ret = saved_invocation_id;
+        if (ret)
+                *ret = saved_invocation_id;
         return 0;
 }
 
 _public_ int sd_id128_randomize(sd_id128_t *ret) {
         sd_id128_t t;
-        int r;
 
         assert_return(ret, -EINVAL);
 
-        /* We allow usage if x86-64 RDRAND here. It might not be trusted enough for keeping secrets, but it should be
-         * fine for UUIDS. */
-        r = genuine_random_bytes(&t, sizeof t, RANDOM_ALLOW_RDRAND);
-        if (r < 0)
-                return r;
+        random_bytes(&t, sizeof(t));
 
         /* Turn this into a valid v4 UUID, to be nice. Note that we
          * only guarantee this for newly generated UUIDs, not for
@@ -271,27 +311,15 @@
 }
 
 static int get_app_specific(sd_id128_t base, sd_id128_t app_id, sd_id128_t *ret) {
-        _cleanup_(khash_unrefp) khash *h = NULL;
+        uint8_t hmac[SHA256_DIGEST_SIZE];
         sd_id128_t result;
-        const void *p;
-        int r;
 
         assert(ret);
 
-        r = khash_new_with_key(&h, "hmac(sha256)", &base, sizeof(base));
-        if (r < 0)
-                return r;
+        hmac_sha256(&base, sizeof(base), &app_id, sizeof(app_id), hmac);
 
-        r = khash_put(h, &app_id, sizeof(app_id));
-        if (r < 0)
-                return r;
-
-        r = khash_digest_data(h, &p);
-        if (r < 0)
-                return r;
-
-        /* We chop off the trailing 16 bytes */
-        memcpy(&result, p, MIN(khash_get_size(h), sizeof(result)));
+        /* Take only the first half. */
+        memcpy(&result, hmac, MIN(sizeof(hmac), sizeof(result)));
 
         *ret = id128_make_v4_uuid(result);
         return 0;
diff --git a/src/libsystemd/sd-journal/audit_type-to-name.awk b/src/libsystemd/sd-journal/audit_type-to-name.awk
index 1657866..a859c44 100644
--- a/src/libsystemd/sd-journal/audit_type-to-name.awk
+++ b/src/libsystemd/sd-journal/audit_type-to-name.awk
@@ -1,11 +1,14 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 BEGIN{
-        print "const char *audit_type_to_string(int type) {\n\tswitch(type) {"
+        print "const char *audit_type_to_string(int type) {"
+        print "        switch (type) {"
 }
 {
         printf "        case AUDIT_%s: return \"%s\";\n", $1, $1
 }
 END{
-        print "        default: return NULL;\n\t}\n}\n"
+        print "        default: return NULL;"
+        print "        }"
+        print "}"
 }
diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c
index f2ad1a2..7527abf 100644
--- a/src/libsystemd/sd-journal/catalog.c
+++ b/src/libsystemd/sd-journal/catalog.c
@@ -125,15 +125,12 @@
 
         /* Body from @one */
         n = l1 - (b1 - one);
-        if (n > 0) {
-                memcpy(p, b1, n);
-                p += n;
-
+        if (n > 0)
+                p = mempcpy(p, b1, n);
         /* Body from @two */
-        } else {
+        else {
                 n = l2 - (b2 - two);
-                memcpy(p, b2, n);
-                p += n;
+                p = mempcpy(p, b2, n);
         }
 
         assert(p - dest <= (ptrdiff_t)(l1 + l2));
@@ -395,7 +392,7 @@
 
         header = (CatalogHeader) {
                 .signature = CATALOG_SIGNATURE,
-                .header_size = htole64(ALIGN_TO(sizeof(CatalogHeader), 8)),
+                .header_size = htole64(CONST_ALIGN_TO(sizeof(CatalogHeader), 8)),
                 .catalog_item_size = htole64(sizeof(CatalogItem)),
                 .n_items = htole64(n),
         };
@@ -442,7 +439,6 @@
 
 int catalog_update(const char* database, const char* root, const char* const* dirs) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         _cleanup_(strbuf_freep) struct strbuf *sb = NULL;
         _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
         _cleanup_free_ CatalogItem *items = NULL;
@@ -508,7 +504,7 @@
 }
 
 static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const CatalogHeader *h;
         struct stat st;
         void *p;
@@ -605,7 +601,7 @@
 }
 
 int catalog_get(const char* database, sd_id128_t id, char **_text) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         void *p = NULL;
         struct stat st = {};
         char *text = NULL;
@@ -672,7 +668,7 @@
 }
 
 int catalog_list(FILE *f, const char *database, bool oneline) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         void *p = NULL;
         struct stat st;
         const CatalogHeader *h;
@@ -709,7 +705,6 @@
 }
 
 int catalog_list_items(FILE *f, const char *database, bool oneline, char **items) {
-        char **item;
         int r = 0;
 
         STRV_FOREACH(item, items) {
diff --git a/src/libsystemd/sd-journal/compress.c b/src/libsystemd/sd-journal/compress.c
deleted file mode 100644
index cb2e826..0000000
--- a/src/libsystemd/sd-journal/compress.c
+++ /dev/null
@@ -1,1081 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <inttypes.h>
-#include <malloc.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#if HAVE_XZ
-#include <lzma.h>
-#endif
-
-#if HAVE_LZ4
-#include <lz4.h>
-#include <lz4frame.h>
-#endif
-
-#if HAVE_ZSTD
-#include <zstd.h>
-#include <zstd_errors.h>
-#endif
-
-#include "alloc-util.h"
-#include "compress.h"
-#include "fd-util.h"
-#include "fileio.h"
-#include "io-util.h"
-#include "journal-def.h"
-#include "macro.h"
-#include "sparse-endian.h"
-#include "string-table.h"
-#include "string-util.h"
-#include "unaligned.h"
-#include "util.h"
-
-#if HAVE_LZ4
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(LZ4F_compressionContext_t, LZ4F_freeCompressionContext, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(LZ4F_decompressionContext_t, LZ4F_freeDecompressionContext, NULL);
-#endif
-
-#if HAVE_ZSTD
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(ZSTD_CCtx*, ZSTD_freeCCtx, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(ZSTD_DCtx*, ZSTD_freeDCtx, NULL);
-
-static int zstd_ret_to_errno(size_t ret) {
-        switch (ZSTD_getErrorCode(ret)) {
-        case ZSTD_error_dstSize_tooSmall:
-                return -ENOBUFS;
-        case ZSTD_error_memory_allocation:
-                return -ENOMEM;
-        default:
-                return -EBADMSG;
-        }
-}
-#endif
-
-#define ALIGN_8(l) ALIGN_TO(l, sizeof(size_t))
-
-static const char* const object_compressed_table[_OBJECT_COMPRESSED_MAX] = {
-        [OBJECT_COMPRESSED_XZ]   = "XZ",
-        [OBJECT_COMPRESSED_LZ4]  = "LZ4",
-        [OBJECT_COMPRESSED_ZSTD] = "ZSTD",
-        /* If we add too many more entries here, it's going to grow quite large (and be mostly sparse), since
-         * the array key is actually a bitmask, not a plain enum */
-};
-
-DEFINE_STRING_TABLE_LOOKUP(object_compressed, int);
-
-int compress_blob_xz(const void *src, uint64_t src_size,
-                     void *dst, size_t dst_alloc_size, size_t *dst_size) {
-#if HAVE_XZ
-        static const lzma_options_lzma opt = {
-                1u << 20u, NULL, 0, LZMA_LC_DEFAULT, LZMA_LP_DEFAULT,
-                LZMA_PB_DEFAULT, LZMA_MODE_FAST, 128, LZMA_MF_HC3, 4
-        };
-        static const lzma_filter filters[] = {
-                { LZMA_FILTER_LZMA2, (lzma_options_lzma*) &opt },
-                { LZMA_VLI_UNKNOWN, NULL }
-        };
-        lzma_ret ret;
-        size_t out_pos = 0;
-
-        assert(src);
-        assert(src_size > 0);
-        assert(dst);
-        assert(dst_alloc_size > 0);
-        assert(dst_size);
-
-        /* Returns < 0 if we couldn't compress the data or the
-         * compressed result is longer than the original */
-
-        if (src_size < 80)
-                return -ENOBUFS;
-
-        ret = lzma_stream_buffer_encode((lzma_filter*) filters, LZMA_CHECK_NONE, NULL,
-                                        src, src_size, dst, &out_pos, dst_alloc_size);
-        if (ret != LZMA_OK)
-                return -ENOBUFS;
-
-        *dst_size = out_pos;
-        return 0;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int compress_blob_lz4(const void *src, uint64_t src_size,
-                      void *dst, size_t dst_alloc_size, size_t *dst_size) {
-#if HAVE_LZ4
-        int r;
-
-        assert(src);
-        assert(src_size > 0);
-        assert(dst);
-        assert(dst_alloc_size > 0);
-        assert(dst_size);
-
-        /* Returns < 0 if we couldn't compress the data or the
-         * compressed result is longer than the original */
-
-        if (src_size < 9)
-                return -ENOBUFS;
-
-        r = LZ4_compress_default(src, (char*)dst + 8, src_size, (int) dst_alloc_size - 8);
-        if (r <= 0)
-                return -ENOBUFS;
-
-        unaligned_write_le64(dst, src_size);
-        *dst_size = r + 8;
-
-        return 0;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int compress_blob_zstd(
-                const void *src, uint64_t src_size,
-                void *dst, size_t dst_alloc_size, size_t *dst_size) {
-#if HAVE_ZSTD
-        size_t k;
-
-        assert(src);
-        assert(src_size > 0);
-        assert(dst);
-        assert(dst_alloc_size > 0);
-        assert(dst_size);
-
-        k = ZSTD_compress(dst, dst_alloc_size, src, src_size, 0);
-        if (ZSTD_isError(k))
-                return zstd_ret_to_errno(k);
-
-        *dst_size = k;
-        return 0;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_blob_xz(
-                const void *src,
-                uint64_t src_size,
-                void **dst,
-                size_t* dst_size,
-                size_t dst_max) {
-
-#if HAVE_XZ
-        _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
-        lzma_ret ret;
-        size_t space;
-
-        assert(src);
-        assert(src_size > 0);
-        assert(dst);
-        assert(dst_size);
-
-        ret = lzma_stream_decoder(&s, UINT64_MAX, 0);
-        if (ret != LZMA_OK)
-                return -ENOMEM;
-
-        space = MIN(src_size * 2, dst_max ?: SIZE_MAX);
-        if (!greedy_realloc(dst, space, 1))
-                return -ENOMEM;
-
-        s.next_in = src;
-        s.avail_in = src_size;
-
-        s.next_out = *dst;
-        s.avail_out = space;
-
-        for (;;) {
-                size_t used;
-
-                ret = lzma_code(&s, LZMA_FINISH);
-
-                if (ret == LZMA_STREAM_END)
-                        break;
-                else if (ret != LZMA_OK)
-                        return -ENOMEM;
-
-                if (dst_max > 0 && (space - s.avail_out) >= dst_max)
-                        break;
-                else if (dst_max > 0 && space == dst_max)
-                        return -ENOBUFS;
-
-                used = space - s.avail_out;
-                space = MIN(2 * space, dst_max ?: SIZE_MAX);
-                if (!greedy_realloc(dst, space, 1))
-                        return -ENOMEM;
-
-                s.avail_out = space - used;
-                s.next_out = *(uint8_t**)dst + used;
-        }
-
-        *dst_size = space - s.avail_out;
-        return 0;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_blob_lz4(
-                const void *src,
-                uint64_t src_size,
-                void **dst,
-                size_t* dst_size,
-                size_t dst_max) {
-
-#if HAVE_LZ4
-        char* out;
-        int r, size; /* LZ4 uses int for size */
-
-        assert(src);
-        assert(src_size > 0);
-        assert(dst);
-        assert(dst_size);
-
-        if (src_size <= 8)
-                return -EBADMSG;
-
-        size = unaligned_read_le64(src);
-        if (size < 0 || (unsigned) size != unaligned_read_le64(src))
-                return -EFBIG;
-        out = greedy_realloc(dst, size, 1);
-        if (!out)
-                return -ENOMEM;
-
-        r = LZ4_decompress_safe((char*)src + 8, out, src_size - 8, size);
-        if (r < 0 || r != size)
-                return -EBADMSG;
-
-        *dst_size = size;
-        return 0;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_blob_zstd(
-                const void *src,
-                uint64_t src_size,
-                void **dst,
-                size_t *dst_size,
-                size_t dst_max) {
-
-#if HAVE_ZSTD
-        uint64_t size;
-
-        assert(src);
-        assert(src_size > 0);
-        assert(dst);
-        assert(dst_size);
-
-        size = ZSTD_getFrameContentSize(src, src_size);
-        if (IN_SET(size, ZSTD_CONTENTSIZE_ERROR, ZSTD_CONTENTSIZE_UNKNOWN))
-                return -EBADMSG;
-
-        if (dst_max > 0 && size > dst_max)
-                size = dst_max;
-        if (size > SIZE_MAX)
-                return -E2BIG;
-
-        if (!(greedy_realloc(dst, MAX(ZSTD_DStreamOutSize(), size), 1)))
-                return -ENOMEM;
-
-        _cleanup_(ZSTD_freeDCtxp) ZSTD_DCtx *dctx = ZSTD_createDCtx();
-        if (!dctx)
-                return -ENOMEM;
-
-        ZSTD_inBuffer input = {
-                .src = src,
-                .size = src_size,
-        };
-        ZSTD_outBuffer output = {
-                .dst = *dst,
-                .size = MALLOC_SIZEOF_SAFE(*dst),
-        };
-
-        size_t k = ZSTD_decompressStream(dctx, &output, &input);
-        if (ZSTD_isError(k)) {
-                log_debug("ZSTD decoder failed: %s", ZSTD_getErrorName(k));
-                return zstd_ret_to_errno(k);
-        }
-        assert(output.pos >= size);
-
-        *dst_size = size;
-        return 0;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_blob(
-                int compression,
-                const void *src,
-                uint64_t src_size,
-                void **dst,
-                size_t* dst_size,
-                size_t dst_max) {
-
-        if (compression == OBJECT_COMPRESSED_XZ)
-                return decompress_blob_xz(
-                                src, src_size,
-                                dst, dst_size, dst_max);
-        else if (compression == OBJECT_COMPRESSED_LZ4)
-                return decompress_blob_lz4(
-                                src, src_size,
-                                dst, dst_size, dst_max);
-        else if (compression == OBJECT_COMPRESSED_ZSTD)
-                return decompress_blob_zstd(
-                                src, src_size,
-                                dst, dst_size, dst_max);
-        else
-                return -EPROTONOSUPPORT;
-}
-
-int decompress_startswith_xz(
-                const void *src,
-                uint64_t src_size,
-                void **buffer,
-                const void *prefix,
-                size_t prefix_len,
-                uint8_t extra) {
-
-#if HAVE_XZ
-        _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
-        size_t allocated;
-        lzma_ret ret;
-
-        /* Checks whether the decompressed blob starts with the mentioned prefix. The byte extra needs to
-         * follow the prefix */
-
-        assert(src);
-        assert(src_size > 0);
-        assert(buffer);
-        assert(prefix);
-
-        ret = lzma_stream_decoder(&s, UINT64_MAX, 0);
-        if (ret != LZMA_OK)
-                return -EBADMSG;
-
-        if (!(greedy_realloc(buffer, ALIGN_8(prefix_len + 1), 1)))
-                return -ENOMEM;
-
-        allocated = MALLOC_SIZEOF_SAFE(*buffer);
-
-        s.next_in = src;
-        s.avail_in = src_size;
-
-        s.next_out = *buffer;
-        s.avail_out = allocated;
-
-        for (;;) {
-                ret = lzma_code(&s, LZMA_FINISH);
-
-                if (!IN_SET(ret, LZMA_OK, LZMA_STREAM_END))
-                        return -EBADMSG;
-
-                if (allocated - s.avail_out >= prefix_len + 1)
-                        return memcmp(*buffer, prefix, prefix_len) == 0 &&
-                                ((const uint8_t*) *buffer)[prefix_len] == extra;
-
-                if (ret == LZMA_STREAM_END)
-                        return 0;
-
-                s.avail_out += allocated;
-
-                if (!(greedy_realloc(buffer, allocated * 2, 1)))
-                        return -ENOMEM;
-
-                allocated = MALLOC_SIZEOF_SAFE(*buffer);
-                s.next_out = *(uint8_t**)buffer + allocated - s.avail_out;
-        }
-
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_startswith_lz4(
-                const void *src,
-                uint64_t src_size,
-                void **buffer,
-                const void *prefix,
-                size_t prefix_len,
-                uint8_t extra) {
-
-#if HAVE_LZ4
-        /* Checks whether the decompressed blob starts with the mentioned prefix. The byte extra needs to
-         * follow the prefix */
-
-        size_t allocated;
-        int r;
-
-        assert(src);
-        assert(src_size > 0);
-        assert(buffer);
-        assert(prefix);
-
-        if (src_size <= 8)
-                return -EBADMSG;
-
-        if (!(greedy_realloc(buffer, ALIGN_8(prefix_len + 1), 1)))
-                return -ENOMEM;
-        allocated = MALLOC_SIZEOF_SAFE(*buffer);
-
-        r = LZ4_decompress_safe_partial(
-                        (char*)src + 8,
-                        *buffer,
-                        src_size - 8,
-                        prefix_len + 1,
-                        allocated);
-
-        /* One lz4 < 1.8.3, we might get "failure" (r < 0), or "success" where just a part of the buffer is
-         * decompressed. But if we get a smaller amount of bytes than requested, we don't know whether there
-         * isn't enough data to fill the requested size or whether we just got a partial answer.
-         */
-        if (r < 0 || (size_t) r < prefix_len + 1) {
-                size_t size;
-
-                if (LZ4_versionNumber() >= 10803)
-                        /* We trust that the newer lz4 decompresses the number of bytes we
-                         * requested if available in the compressed string. */
-                        return 0;
-
-                if (r > 0)
-                        /* Compare what we have first, in case of mismatch we can
-                         * shortcut the full comparison. */
-                        if (memcmp(*buffer, prefix, r) != 0)
-                                return 0;
-
-                /* Before version 1.8.3, lz4 always tries to decode full a "sequence",
-                 * so in pathological cases might need to decompress the full field. */
-                r = decompress_blob_lz4(src, src_size, buffer, &size, 0);
-                if (r < 0)
-                        return r;
-
-                if (size < prefix_len + 1)
-                        return 0;
-        }
-
-        return memcmp(*buffer, prefix, prefix_len) == 0 &&
-                ((const uint8_t*) *buffer)[prefix_len] == extra;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_startswith_zstd(
-                const void *src,
-                uint64_t src_size,
-                void **buffer,
-                const void *prefix,
-                size_t prefix_len,
-                uint8_t extra) {
-#if HAVE_ZSTD
-        assert(src);
-        assert(src_size > 0);
-        assert(buffer);
-        assert(prefix);
-
-        uint64_t size = ZSTD_getFrameContentSize(src, src_size);
-        if (IN_SET(size, ZSTD_CONTENTSIZE_ERROR, ZSTD_CONTENTSIZE_UNKNOWN))
-                return -EBADMSG;
-
-        if (size < prefix_len + 1)
-                return 0; /* Decompressed text too short to match the prefix and extra */
-
-        _cleanup_(ZSTD_freeDCtxp) ZSTD_DCtx *dctx = ZSTD_createDCtx();
-        if (!dctx)
-                return -ENOMEM;
-
-        if (!(greedy_realloc(buffer, MAX(ZSTD_DStreamOutSize(), prefix_len + 1), 1)))
-                return -ENOMEM;
-
-        ZSTD_inBuffer input = {
-                .src = src,
-                .size = src_size,
-        };
-        ZSTD_outBuffer output = {
-                .dst = *buffer,
-                .size = MALLOC_SIZEOF_SAFE(*buffer),
-        };
-        size_t k;
-
-        k = ZSTD_decompressStream(dctx, &output, &input);
-        if (ZSTD_isError(k)) {
-                log_debug("ZSTD decoder failed: %s", ZSTD_getErrorName(k));
-                return zstd_ret_to_errno(k);
-        }
-        assert(output.pos >= prefix_len + 1);
-
-        return memcmp(*buffer, prefix, prefix_len) == 0 &&
-                ((const uint8_t*) *buffer)[prefix_len] == extra;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_startswith(
-                int compression,
-                const void *src,
-                uint64_t src_size,
-                void **buffer,
-                const void *prefix,
-                size_t prefix_len,
-                uint8_t extra) {
-
-        if (compression == OBJECT_COMPRESSED_XZ)
-                return decompress_startswith_xz(
-                                src, src_size,
-                                buffer,
-                                prefix, prefix_len,
-                                extra);
-
-        else if (compression == OBJECT_COMPRESSED_LZ4)
-                return decompress_startswith_lz4(
-                                src, src_size,
-                                buffer,
-                                prefix, prefix_len,
-                                extra);
-        else if (compression == OBJECT_COMPRESSED_ZSTD)
-                return decompress_startswith_zstd(
-                                src, src_size,
-                                buffer,
-                                prefix, prefix_len,
-                                extra);
-        else
-                return -EBADMSG;
-}
-
-int compress_stream_xz(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size) {
-#if HAVE_XZ
-        _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
-        lzma_ret ret;
-        uint8_t buf[BUFSIZ], out[BUFSIZ];
-        lzma_action action = LZMA_RUN;
-
-        assert(fdf >= 0);
-        assert(fdt >= 0);
-
-        ret = lzma_easy_encoder(&s, LZMA_PRESET_DEFAULT, LZMA_CHECK_CRC64);
-        if (ret != LZMA_OK)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Failed to initialize XZ encoder: code %u",
-                                       ret);
-
-        for (;;) {
-                if (s.avail_in == 0 && action == LZMA_RUN) {
-                        size_t m = sizeof(buf);
-                        ssize_t n;
-
-                        if (max_bytes != UINT64_MAX && (uint64_t) m > max_bytes)
-                                m = (size_t) max_bytes;
-
-                        n = read(fdf, buf, m);
-                        if (n < 0)
-                                return -errno;
-                        if (n == 0)
-                                action = LZMA_FINISH;
-                        else {
-                                s.next_in = buf;
-                                s.avail_in = n;
-
-                                if (max_bytes != UINT64_MAX) {
-                                        assert(max_bytes >= (uint64_t) n);
-                                        max_bytes -= n;
-                                }
-                        }
-                }
-
-                if (s.avail_out == 0) {
-                        s.next_out = out;
-                        s.avail_out = sizeof(out);
-                }
-
-                ret = lzma_code(&s, action);
-                if (!IN_SET(ret, LZMA_OK, LZMA_STREAM_END))
-                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                               "Compression failed: code %u",
-                                               ret);
-
-                if (s.avail_out == 0 || ret == LZMA_STREAM_END) {
-                        ssize_t n, k;
-
-                        n = sizeof(out) - s.avail_out;
-
-                        k = loop_write(fdt, out, n, false);
-                        if (k < 0)
-                                return k;
-
-                        if (ret == LZMA_STREAM_END) {
-                                if (ret_uncompressed_size)
-                                        *ret_uncompressed_size = s.total_in;
-
-                                log_debug("XZ compression finished (%"PRIu64" -> %"PRIu64" bytes, %.1f%%)",
-                                          s.total_in, s.total_out,
-                                          (double) s.total_out / s.total_in * 100);
-
-                                return 0;
-                        }
-                }
-        }
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-#define LZ4_BUFSIZE (512*1024u)
-
-int compress_stream_lz4(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size) {
-
-#if HAVE_LZ4
-        LZ4F_errorCode_t c;
-        _cleanup_(LZ4F_freeCompressionContextp) LZ4F_compressionContext_t ctx = NULL;
-        _cleanup_free_ void *in_buff = NULL;
-        _cleanup_free_ char *out_buff = NULL;
-        size_t out_allocsize, n, offset = 0, frame_size;
-        uint64_t total_in = 0, total_out;
-        int r;
-        static const LZ4F_preferences_t preferences = {
-                .frameInfo.blockSizeID = 5,
-        };
-
-        c = LZ4F_createCompressionContext(&ctx, LZ4F_VERSION);
-        if (LZ4F_isError(c))
-                return -ENOMEM;
-
-        frame_size = LZ4F_compressBound(LZ4_BUFSIZE, &preferences);
-        out_allocsize = frame_size + 64*1024; /* add some space for header and trailer */
-        out_buff = malloc(out_allocsize);
-        if (!out_buff)
-                return -ENOMEM;
-
-        in_buff = malloc(LZ4_BUFSIZE);
-        if (!in_buff)
-                return -ENOMEM;
-
-        n = offset = total_out = LZ4F_compressBegin(ctx, out_buff, out_allocsize, &preferences);
-        if (LZ4F_isError(n))
-                return -EINVAL;
-
-        log_debug("Buffer size is %zu bytes, header size %zu bytes.", out_allocsize, n);
-
-        for (;;) {
-                ssize_t k;
-
-                k = loop_read(fdf, in_buff, LZ4_BUFSIZE, true);
-                if (k < 0)
-                        return k;
-                if (k == 0)
-                        break;
-                n = LZ4F_compressUpdate(ctx, out_buff + offset, out_allocsize - offset,
-                                        in_buff, k, NULL);
-                if (LZ4F_isError(n))
-                        return -ENOTRECOVERABLE;
-
-                total_in += k;
-                offset += n;
-                total_out += n;
-
-                if (max_bytes != UINT64_MAX && total_out > (size_t) max_bytes)
-                        return log_debug_errno(SYNTHETIC_ERRNO(EFBIG),
-                                               "Compressed stream longer than %" PRIu64 " bytes", max_bytes);
-
-                if (out_allocsize - offset < frame_size + 4) {
-                        k = loop_write(fdt, out_buff, offset, false);
-                        if (k < 0)
-                                return k;
-                        offset = 0;
-                }
-        }
-
-        n = LZ4F_compressEnd(ctx, out_buff + offset, out_allocsize - offset, NULL);
-        if (LZ4F_isError(n))
-                return -ENOTRECOVERABLE;
-
-        offset += n;
-        total_out += n;
-        r = loop_write(fdt, out_buff, offset, false);
-        if (r < 0)
-                return r;
-
-        if (ret_uncompressed_size)
-                *ret_uncompressed_size = total_in;
-
-        log_debug("LZ4 compression finished (%" PRIu64 " -> %" PRIu64 " bytes, %.1f%%)",
-                  total_in, total_out,
-                  (double) total_out / total_in * 100);
-
-        return 0;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_stream_xz(int fdf, int fdt, uint64_t max_bytes) {
-
-#if HAVE_XZ
-        _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
-        lzma_ret ret;
-
-        uint8_t buf[BUFSIZ], out[BUFSIZ];
-        lzma_action action = LZMA_RUN;
-
-        assert(fdf >= 0);
-        assert(fdt >= 0);
-
-        ret = lzma_stream_decoder(&s, UINT64_MAX, 0);
-        if (ret != LZMA_OK)
-                return log_debug_errno(SYNTHETIC_ERRNO(ENOMEM),
-                                       "Failed to initialize XZ decoder: code %u",
-                                       ret);
-
-        for (;;) {
-                if (s.avail_in == 0 && action == LZMA_RUN) {
-                        ssize_t n;
-
-                        n = read(fdf, buf, sizeof(buf));
-                        if (n < 0)
-                                return -errno;
-                        if (n == 0)
-                                action = LZMA_FINISH;
-                        else {
-                                s.next_in = buf;
-                                s.avail_in = n;
-                        }
-                }
-
-                if (s.avail_out == 0) {
-                        s.next_out = out;
-                        s.avail_out = sizeof(out);
-                }
-
-                ret = lzma_code(&s, action);
-                if (!IN_SET(ret, LZMA_OK, LZMA_STREAM_END))
-                        return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                               "Decompression failed: code %u",
-                                               ret);
-
-                if (s.avail_out == 0 || ret == LZMA_STREAM_END) {
-                        ssize_t n, k;
-
-                        n = sizeof(out) - s.avail_out;
-
-                        if (max_bytes != UINT64_MAX) {
-                                if (max_bytes < (uint64_t) n)
-                                        return -EFBIG;
-
-                                max_bytes -= n;
-                        }
-
-                        k = loop_write(fdt, out, n, false);
-                        if (k < 0)
-                                return k;
-
-                        if (ret == LZMA_STREAM_END) {
-                                log_debug("XZ decompression finished (%"PRIu64" -> %"PRIu64" bytes, %.1f%%)",
-                                          s.total_in, s.total_out,
-                                          (double) s.total_out / s.total_in * 100);
-
-                                return 0;
-                        }
-                }
-        }
-#else
-        return log_debug_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT),
-                               "Cannot decompress file. Compiled without XZ support.");
-#endif
-}
-
-int decompress_stream_lz4(int in, int out, uint64_t max_bytes) {
-#if HAVE_LZ4
-        size_t c;
-        _cleanup_(LZ4F_freeDecompressionContextp) LZ4F_decompressionContext_t ctx = NULL;
-        _cleanup_free_ char *buf = NULL;
-        char *src;
-        struct stat st;
-        int r = 0;
-        size_t total_in = 0, total_out = 0;
-
-        c = LZ4F_createDecompressionContext(&ctx, LZ4F_VERSION);
-        if (LZ4F_isError(c))
-                return -ENOMEM;
-
-        if (fstat(in, &st) < 0)
-                return log_debug_errno(errno, "fstat() failed: %m");
-
-        if (file_offset_beyond_memory_size(st.st_size))
-                return -EFBIG;
-
-        buf = malloc(LZ4_BUFSIZE);
-        if (!buf)
-                return -ENOMEM;
-
-        src = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, in, 0);
-        if (src == MAP_FAILED)
-                return -errno;
-
-        while (total_in < (size_t) st.st_size) {
-                size_t produced = LZ4_BUFSIZE;
-                size_t used = st.st_size - total_in;
-
-                c = LZ4F_decompress(ctx, buf, &produced, src + total_in, &used, NULL);
-                if (LZ4F_isError(c)) {
-                        r = -EBADMSG;
-                        goto cleanup;
-                }
-
-                total_in += used;
-                total_out += produced;
-
-                if (max_bytes != UINT64_MAX && total_out > (size_t) max_bytes) {
-                        log_debug("Decompressed stream longer than %"PRIu64" bytes", max_bytes);
-                        r = -EFBIG;
-                        goto cleanup;
-                }
-
-                r = loop_write(out, buf, produced, false);
-                if (r < 0)
-                        goto cleanup;
-        }
-
-        log_debug("LZ4 decompression finished (%zu -> %zu bytes, %.1f%%)",
-                  total_in, total_out,
-                  total_in > 0 ? (double) total_out / total_in * 100 : 0.0);
- cleanup:
-        munmap(src, st.st_size);
-        return r;
-#else
-        return log_debug_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT),
-                               "Cannot decompress file. Compiled without LZ4 support.");
-#endif
-}
-
-int compress_stream_zstd(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size) {
-#if HAVE_ZSTD
-        _cleanup_(ZSTD_freeCCtxp) ZSTD_CCtx *cctx = NULL;
-        _cleanup_free_ void *in_buff = NULL, *out_buff = NULL;
-        size_t in_allocsize, out_allocsize;
-        size_t z;
-        uint64_t left = max_bytes, in_bytes = 0;
-
-        assert(fdf >= 0);
-        assert(fdt >= 0);
-
-        /* Create the context and buffers */
-        in_allocsize = ZSTD_CStreamInSize();
-        out_allocsize = ZSTD_CStreamOutSize();
-        in_buff = malloc(in_allocsize);
-        out_buff = malloc(out_allocsize);
-        cctx = ZSTD_createCCtx();
-        if (!cctx || !out_buff || !in_buff)
-                return -ENOMEM;
-
-        z = ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1);
-        if (ZSTD_isError(z))
-                log_debug("Failed to enable ZSTD checksum, ignoring: %s", ZSTD_getErrorName(z));
-
-        /* This loop read from the input file, compresses that entire chunk,
-         * and writes all output produced to the output file.
-         */
-        for (;;) {
-                bool is_last_chunk;
-                ZSTD_inBuffer input = {
-                        .src = in_buff,
-                        .size = 0,
-                        .pos = 0
-                };
-                ssize_t red;
-
-                red = loop_read(fdf, in_buff, in_allocsize, true);
-                if (red < 0)
-                        return red;
-                is_last_chunk = red == 0;
-
-                in_bytes += (size_t) red;
-                input.size = (size_t) red;
-
-                for (bool finished = false; !finished;) {
-                        ZSTD_outBuffer output = {
-                                .dst = out_buff,
-                                .size = out_allocsize,
-                                .pos = 0
-                        };
-                        size_t remaining;
-                        ssize_t wrote;
-
-                        /* Compress into the output buffer and write all of the
-                         * output to the file so we can reuse the buffer next
-                         * iteration.
-                         */
-                        remaining = ZSTD_compressStream2(
-                                cctx, &output, &input,
-                                is_last_chunk ? ZSTD_e_end : ZSTD_e_continue);
-
-                        if (ZSTD_isError(remaining)) {
-                                log_debug("ZSTD encoder failed: %s", ZSTD_getErrorName(remaining));
-                                return zstd_ret_to_errno(remaining);
-                        }
-
-                        if (left < output.pos)
-                                return -EFBIG;
-
-                        wrote = loop_write(fdt, output.dst, output.pos, 1);
-                        if (wrote < 0)
-                                return wrote;
-
-                        left -= output.pos;
-
-                        /* If we're on the last chunk we're finished when zstd
-                         * returns 0, which means its consumed all the input AND
-                         * finished the frame. Otherwise, we're finished when
-                         * we've consumed all the input.
-                         */
-                        finished = is_last_chunk ? (remaining == 0) : (input.pos == input.size);
-                }
-
-                /* zstd only returns 0 when the input is completely consumed */
-                assert(input.pos == input.size);
-                if (is_last_chunk)
-                        break;
-        }
-
-        if (ret_uncompressed_size)
-                *ret_uncompressed_size = in_bytes;
-
-        if (in_bytes > 0)
-                log_debug("ZSTD compression finished (%" PRIu64 " -> %" PRIu64 " bytes, %.1f%%)",
-                          in_bytes, max_bytes - left, (double) (max_bytes - left) / in_bytes * 100);
-        else
-                log_debug("ZSTD compression finished (%" PRIu64 " -> %" PRIu64 " bytes)",
-                          in_bytes, max_bytes - left);
-
-        return 0;
-#else
-        return -EPROTONOSUPPORT;
-#endif
-}
-
-int decompress_stream_zstd(int fdf, int fdt, uint64_t max_bytes) {
-#if HAVE_ZSTD
-        _cleanup_(ZSTD_freeDCtxp) ZSTD_DCtx *dctx = NULL;
-        _cleanup_free_ void *in_buff = NULL, *out_buff = NULL;
-        size_t in_allocsize, out_allocsize;
-        size_t last_result = 0;
-        uint64_t left = max_bytes, in_bytes = 0;
-
-        assert(fdf >= 0);
-        assert(fdt >= 0);
-
-        /* Create the context and buffers */
-        in_allocsize = ZSTD_DStreamInSize();
-        out_allocsize = ZSTD_DStreamOutSize();
-        in_buff = malloc(in_allocsize);
-        out_buff = malloc(out_allocsize);
-        dctx = ZSTD_createDCtx();
-        if (!dctx || !out_buff || !in_buff)
-                return -ENOMEM;
-
-        /* This loop assumes that the input file is one or more concatenated
-         * zstd streams. This example won't work if there is trailing non-zstd
-         * data at the end, but streaming decompression in general handles this
-         * case. ZSTD_decompressStream() returns 0 exactly when the frame is
-         * completed, and doesn't consume input after the frame.
-         */
-        for (;;) {
-                bool has_error = false;
-                ZSTD_inBuffer input = {
-                        .src = in_buff,
-                        .size = 0,
-                        .pos = 0
-                };
-                ssize_t red;
-
-                red = loop_read(fdf, in_buff, in_allocsize, true);
-                if (red < 0)
-                        return red;
-                if (red == 0)
-                        break;
-
-                in_bytes += (size_t) red;
-                input.size = (size_t) red;
-                input.pos = 0;
-
-                /* Given a valid frame, zstd won't consume the last byte of the
-                 * frame until it has flushed all of the decompressed data of
-                 * the frame. So input.pos < input.size means frame is not done
-                 * or there is still output available.
-                 */
-                while (input.pos < input.size) {
-                        ZSTD_outBuffer output = {
-                                .dst = out_buff,
-                                .size = out_allocsize,
-                                .pos = 0
-                        };
-                        ssize_t wrote;
-                        /* The return code is zero if the frame is complete, but
-                         * there may be multiple frames concatenated together.
-                         * Zstd will automatically reset the context when a
-                         * frame is complete. Still, calling ZSTD_DCtx_reset()
-                         * can be useful to reset the context to a clean state,
-                         * for instance if the last decompression call returned
-                         * an error.
-                         */
-                        last_result = ZSTD_decompressStream(dctx, &output, &input);
-                        if (ZSTD_isError(last_result)) {
-                                has_error = true;
-                                break;
-                        }
-
-                        if (left < output.pos)
-                                return -EFBIG;
-
-                        wrote = loop_write(fdt, output.dst, output.pos, 1);
-                        if (wrote < 0)
-                                return wrote;
-
-                        left -= output.pos;
-                }
-                if (has_error)
-                        break;
-        }
-
-        if (in_bytes == 0)
-                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "ZSTD decoder failed: no data read");
-
-        if (last_result != 0) {
-                /* The last return value from ZSTD_decompressStream did not end
-                 * on a frame, but we reached the end of the file! We assume
-                 * this is an error, and the input was truncated.
-                 */
-                log_debug("ZSTD decoder failed: %s", ZSTD_getErrorName(last_result));
-                return zstd_ret_to_errno(last_result);
-        }
-
-        log_debug(
-                "ZSTD decompression finished (%" PRIu64 " -> %" PRIu64 " bytes, %.1f%%)",
-                in_bytes,
-                max_bytes - left,
-                (double) (max_bytes - left) / in_bytes * 100);
-        return 0;
-#else
-        return log_debug_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT),
-                               "Cannot decompress file. Compiled without ZSTD support.");
-#endif
-}
-
-int decompress_stream(const char *filename, int fdf, int fdt, uint64_t max_bytes) {
-
-        if (endswith(filename, ".lz4"))
-                return decompress_stream_lz4(fdf, fdt, max_bytes);
-        else if (endswith(filename, ".xz"))
-                return decompress_stream_xz(fdf, fdt, max_bytes);
-        else if (endswith(filename, ".zst"))
-                return decompress_stream_zstd(fdf, fdt, max_bytes);
-        else
-                return -EPROTONOSUPPORT;
-}
diff --git a/src/libsystemd/sd-journal/compress.h b/src/libsystemd/sd-journal/compress.h
deleted file mode 100644
index 005e60e..0000000
--- a/src/libsystemd/sd-journal/compress.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <unistd.h>
-
-#include "journal-def.h"
-
-const char* object_compressed_to_string(int compression);
-int object_compressed_from_string(const char *compression);
-
-int compress_blob_xz(const void *src, uint64_t src_size,
-                     void *dst, size_t dst_alloc_size, size_t *dst_size);
-int compress_blob_lz4(const void *src, uint64_t src_size,
-                      void *dst, size_t dst_alloc_size, size_t *dst_size);
-int compress_blob_zstd(const void *src, uint64_t src_size,
-                       void *dst, size_t dst_alloc_size, size_t *dst_size);
-
-static inline int compress_blob(const void *src, uint64_t src_size,
-                                void *dst, size_t dst_alloc_size, size_t *dst_size) {
-        int r;
-#if HAVE_ZSTD
-        r = compress_blob_zstd(src, src_size, dst, dst_alloc_size, dst_size);
-        if (r == 0)
-                return OBJECT_COMPRESSED_ZSTD;
-#elif HAVE_LZ4
-        r = compress_blob_lz4(src, src_size, dst, dst_alloc_size, dst_size);
-        if (r == 0)
-                return OBJECT_COMPRESSED_LZ4;
-#elif HAVE_XZ
-        r = compress_blob_xz(src, src_size, dst, dst_alloc_size, dst_size);
-        if (r == 0)
-                return OBJECT_COMPRESSED_XZ;
-#else
-        r = -EOPNOTSUPP;
-#endif
-        return r;
-}
-
-int decompress_blob_xz(const void *src, uint64_t src_size,
-                       void **dst, size_t* dst_size, size_t dst_max);
-int decompress_blob_lz4(const void *src, uint64_t src_size,
-                        void **dst, size_t* dst_size, size_t dst_max);
-int decompress_blob_zstd(const void *src, uint64_t src_size,
-                        void **dst, size_t* dst_size, size_t dst_max);
-int decompress_blob(int compression,
-                    const void *src, uint64_t src_size,
-                    void **dst, size_t* dst_size, size_t dst_max);
-
-int decompress_startswith_xz(const void *src, uint64_t src_size,
-                             void **buffer,
-                             const void *prefix, size_t prefix_len,
-                             uint8_t extra);
-int decompress_startswith_lz4(const void *src, uint64_t src_size,
-                              void **buffer,
-                              const void *prefix, size_t prefix_len,
-                              uint8_t extra);
-int decompress_startswith_zstd(const void *src, uint64_t src_size,
-                               void **buffer,
-                               const void *prefix, size_t prefix_len,
-                               uint8_t extra);
-int decompress_startswith(int compression,
-                          const void *src, uint64_t src_size,
-                          void **buffer,
-                          const void *prefix, size_t prefix_len,
-                          uint8_t extra);
-
-int compress_stream_xz(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size);
-int compress_stream_lz4(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size);
-int compress_stream_zstd(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_uncompressed_size);
-
-int decompress_stream_xz(int fdf, int fdt, uint64_t max_size);
-int decompress_stream_lz4(int fdf, int fdt, uint64_t max_size);
-int decompress_stream_zstd(int fdf, int fdt, uint64_t max_size);
-
-#if HAVE_ZSTD
-#  define compress_stream compress_stream_zstd
-#  define COMPRESSED_EXT ".zst"
-#elif HAVE_LZ4
-#  define compress_stream compress_stream_lz4
-#  define COMPRESSED_EXT ".lz4"
-#elif HAVE_XZ
-#  define compress_stream compress_stream_xz
-#  define COMPRESSED_EXT ".xz"
-#else
-static inline int compress_stream(int fdf, int fdt, uint64_t max_size, uint64_t *ret_uncompressed_size) {
-        return -EOPNOTSUPP;
-}
-#  define COMPRESSED_EXT ""
-#endif
-
-int decompress_stream(const char *filename, int fdf, int fdt, uint64_t max_bytes);
diff --git a/src/libsystemd/sd-journal/fsprg.h b/src/libsystemd/sd-journal/fsprg.h
index dfe2d79..d3d88aa 100644
--- a/src/libsystemd/sd-journal/fsprg.h
+++ b/src/libsystemd/sd-journal/fsprg.h
@@ -26,7 +26,6 @@
 #include <sys/types.h>
 
 #include "macro.h"
-#include "util.h"
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/src/libsystemd/sd-journal/journal-authenticate.c b/src/libsystemd/sd-journal/journal-authenticate.c
index 0bfe9f7..3c5d9d7 100644
--- a/src/libsystemd/sd-journal/journal-authenticate.c
+++ b/src/libsystemd/sd-journal/journal-authenticate.c
@@ -31,7 +31,7 @@
 
         assert(f);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         if (!f->hmac_running)
@@ -69,7 +69,7 @@
 
         assert(f);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         if (f->hmac_running)
@@ -81,8 +81,8 @@
         err = gcry_md_setkey(f->hmac, key, sizeof(key));
         if (gcry_err_code(err) != GPG_ERR_NO_ERROR)
                 return log_debug_errno(SYNTHETIC_ERRNO(EIO),
-                                       "gcry_md_setkey() failed with error code: %d",
-                                       gcry_err_code(err));
+                                       "gcry_md_setkey() failed with error code: %s",
+                                       gcry_strerror(err));
 
         f->hmac_running = true;
 
@@ -94,7 +94,7 @@
 
         assert(f);
         assert(epoch);
-        assert(f->seal);
+        assert(JOURNAL_HEADER_SEALED(f->header));
 
         if (f->fss_start_usec == 0 ||
             f->fss_interval_usec == 0)
@@ -115,7 +115,7 @@
         int r;
         assert(f);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         r = journal_file_get_epoch(f, realtime, &goal);
@@ -135,7 +135,7 @@
 
         assert(f);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         r = journal_file_get_epoch(f, realtime, &goal);
@@ -163,7 +163,7 @@
 
         assert(f);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         assert(f->fsprg_seed);
@@ -182,14 +182,13 @@
         } else {
                 f->fsprg_state_size = FSPRG_stateinbytes(FSPRG_RECOMMENDED_SECPAR);
                 f->fsprg_state = malloc(f->fsprg_state_size);
-
                 if (!f->fsprg_state)
                         return -ENOMEM;
         }
 
         log_debug("Seeking FSPRG key to %"PRIu64".", goal);
 
-        msk = alloca(FSPRG_mskinbytes(FSPRG_RECOMMENDED_SECPAR));
+        msk = alloca_safe(FSPRG_mskinbytes(FSPRG_RECOMMENDED_SECPAR));
         FSPRG_GenMK(msk, NULL, f->fsprg_seed, f->fsprg_seed_size, FSPRG_RECOMMENDED_SECPAR);
         FSPRG_Seek(f->fsprg_state, goal, msk, f->fsprg_seed, f->fsprg_seed_size);
         return 0;
@@ -200,7 +199,7 @@
 
         assert(f);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         if (realtime <= 0)
@@ -226,7 +225,7 @@
 
         assert(f);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         r = journal_file_hmac_start(f);
@@ -249,18 +248,18 @@
         case OBJECT_DATA:
                 /* All but hash and payload are mutable */
                 gcry_md_write(f->hmac, &o->data.hash, sizeof(o->data.hash));
-                gcry_md_write(f->hmac, o->data.payload, le64toh(o->object.size) - offsetof(DataObject, payload));
+                gcry_md_write(f->hmac, journal_file_data_payload_field(f, o), le64toh(o->object.size) - journal_file_data_payload_offset(f));
                 break;
 
         case OBJECT_FIELD:
                 /* Same here */
                 gcry_md_write(f->hmac, &o->field.hash, sizeof(o->field.hash));
-                gcry_md_write(f->hmac, o->field.payload, le64toh(o->object.size) - offsetof(FieldObject, payload));
+                gcry_md_write(f->hmac, o->field.payload, le64toh(o->object.size) - offsetof(Object, field.payload));
                 break;
 
         case OBJECT_ENTRY:
                 /* All */
-                gcry_md_write(f->hmac, &o->entry.seqnum, le64toh(o->object.size) - offsetof(EntryObject, seqnum));
+                gcry_md_write(f->hmac, &o->entry.seqnum, le64toh(o->object.size) - offsetof(Object, entry.seqnum));
                 break;
 
         case OBJECT_FIELD_HASH_TABLE:
@@ -286,7 +285,7 @@
 
         assert(f);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         r = journal_file_hmac_start(f);
@@ -309,7 +308,7 @@
 }
 
 int journal_file_fss_load(JournalFile *f) {
-        int r, fd = -1;
+        int r, fd = -EBADF;
         char *p = NULL;
         struct stat st;
         FSSHeader *m = NULL;
@@ -317,8 +316,8 @@
 
         assert(f);
 
-        if (!f->seal)
-                return 0;
+        /* This function is used to determine whether sealing should be enabled in the journal header so we
+         * can't check the header to check if sealing is enabled here. */
 
         r = sd_id128_get_machine(&machine);
         if (r < 0)
@@ -419,7 +418,7 @@
 int journal_file_hmac_setup(JournalFile *f) {
         gcry_error_t e;
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         initialize_libgcrypt(true);
@@ -435,7 +434,7 @@
         int r;
         uint64_t p;
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return 0;
 
         log_debug("Calculating first tag...");
@@ -531,7 +530,7 @@
         assert(f);
         assert(u);
 
-        if (!f->seal)
+        if (!JOURNAL_HEADER_SEALED(f->header))
                 return false;
 
         epoch = FSPRG_GetEpoch(f->fsprg_state);
diff --git a/src/libsystemd/sd-journal/journal-def.h b/src/libsystemd/sd-journal/journal-def.h
index bd924bd..d35290d 100644
--- a/src/libsystemd/sd-journal/journal-def.h
+++ b/src/libsystemd/sd-journal/journal-def.h
@@ -24,7 +24,6 @@
 typedef struct EntryArrayObject EntryArrayObject;
 typedef struct TagObject TagObject;
 
-typedef struct EntryItem EntryItem;
 typedef struct HashItem HashItem;
 
 typedef struct FSSHeader FSSHeader;
@@ -42,13 +41,12 @@
         _OBJECT_TYPE_MAX
 } ObjectType;
 
-/* Object flags */
+/* Object flags (note that src/basic/compress.h uses the same values for the compression types) */
 enum {
         OBJECT_COMPRESSED_XZ   = 1 << 0,
         OBJECT_COMPRESSED_LZ4  = 1 << 1,
         OBJECT_COMPRESSED_ZSTD = 1 << 2,
-        OBJECT_COMPRESSION_MASK = (OBJECT_COMPRESSED_XZ | OBJECT_COMPRESSED_LZ4 | OBJECT_COMPRESSED_ZSTD),
-        _OBJECT_COMPRESSED_MAX = OBJECT_COMPRESSION_MASK,
+        _OBJECT_COMPRESSED_MASK = OBJECT_COMPRESSED_XZ | OBJECT_COMPRESSED_LZ4 | OBJECT_COMPRESSED_ZSTD,
 };
 
 struct ObjectHeader {
@@ -67,8 +65,17 @@
         le64_t entry_offset; /* the first array entry we store inline */ \
         le64_t entry_array_offset;                                      \
         le64_t n_entries;                                               \
-        uint8_t payload[];                                              \
-        }
+        union {                                                         \
+                struct {                                                \
+                        uint8_t payload[0];                             \
+                } regular;                                              \
+                struct {                                                \
+                        le32_t tail_entry_array_offset;                 \
+                        le32_t tail_entry_array_n_entries;              \
+                        uint8_t payload[0];                             \
+                } compact;                                              \
+        };                                                              \
+}
 
 struct DataObject DataObject__contents;
 struct DataObject__packed DataObject__contents _packed_;
@@ -86,20 +93,29 @@
 struct FieldObject__packed FieldObject__contents _packed_;
 assert_cc(sizeof(struct FieldObject) == sizeof(struct FieldObject__packed));
 
-struct EntryItem {
-        le64_t object_offset;
-        le64_t hash;
-} _packed_;
-
-#define EntryObject__contents { \
-        ObjectHeader object;    \
-        le64_t seqnum;          \
-        le64_t realtime;        \
-        le64_t monotonic;       \
-        sd_id128_t boot_id;     \
-        le64_t xor_hash;        \
-        EntryItem items[];      \
-        }
+#define EntryObject__contents {                        \
+        ObjectHeader object;                           \
+        le64_t seqnum;                                 \
+        le64_t realtime;                               \
+        le64_t monotonic;                              \
+        sd_id128_t boot_id;                            \
+        le64_t xor_hash;                               \
+        union {                                        \
+                struct {                               \
+                        dummy_t __empty__regular;      \
+                        struct {                       \
+                                le64_t object_offset;  \
+                                le64_t hash;           \
+                        } regular[];                   \
+                };                                     \
+                struct {                               \
+                        dummy_t __empty_compact;       \
+                        struct {                       \
+                                le32_t object_offset;  \
+                        } compact[];                   \
+                };                                     \
+        } items;                                       \
+}
 
 struct EntryObject EntryObject__contents;
 struct EntryObject__packed EntryObject__contents _packed_;
@@ -118,7 +134,10 @@
 struct EntryArrayObject {
         ObjectHeader object;
         le64_t next_entry_array_offset;
-        le64_t items[];
+        union {
+                DECLARE_FLEX_ARRAY(le64_t, regular);
+                DECLARE_FLEX_ARRAY(le32_t, compact);
+        } items;
 } _packed_;
 
 #define TAG_LENGTH (256/8)
@@ -153,31 +172,22 @@
         HEADER_INCOMPATIBLE_COMPRESSED_LZ4  = 1 << 1,
         HEADER_INCOMPATIBLE_KEYED_HASH      = 1 << 2,
         HEADER_INCOMPATIBLE_COMPRESSED_ZSTD = 1 << 3,
+        HEADER_INCOMPATIBLE_COMPACT         = 1 << 4,
 };
 
 #define HEADER_INCOMPATIBLE_ANY               \
         (HEADER_INCOMPATIBLE_COMPRESSED_XZ |  \
          HEADER_INCOMPATIBLE_COMPRESSED_LZ4 | \
          HEADER_INCOMPATIBLE_KEYED_HASH |     \
-         HEADER_INCOMPATIBLE_COMPRESSED_ZSTD)
+         HEADER_INCOMPATIBLE_COMPRESSED_ZSTD | \
+         HEADER_INCOMPATIBLE_COMPACT)
 
-#if HAVE_XZ && HAVE_LZ4 && HAVE_ZSTD
-#  define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_ANY
-#elif HAVE_XZ && HAVE_LZ4
-#  define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_COMPRESSED_LZ4|HEADER_INCOMPATIBLE_KEYED_HASH)
-#elif HAVE_XZ && HAVE_ZSTD
-#  define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_COMPRESSED_ZSTD|HEADER_INCOMPATIBLE_KEYED_HASH)
-#elif HAVE_LZ4 && HAVE_ZSTD
-#  define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_LZ4|HEADER_INCOMPATIBLE_COMPRESSED_ZSTD|HEADER_INCOMPATIBLE_KEYED_HASH)
-#elif HAVE_XZ
-#  define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_KEYED_HASH)
-#elif HAVE_LZ4
-#  define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_LZ4|HEADER_INCOMPATIBLE_KEYED_HASH)
-#elif HAVE_ZSTD
-#  define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_ZSTD|HEADER_INCOMPATIBLE_KEYED_HASH)
-#else
-#  define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_KEYED_HASH
-#endif
+#define HEADER_INCOMPATIBLE_SUPPORTED                            \
+        ((HAVE_XZ ? HEADER_INCOMPATIBLE_COMPRESSED_XZ : 0) |     \
+         (HAVE_LZ4 ? HEADER_INCOMPATIBLE_COMPRESSED_LZ4 : 0) |   \
+         (HAVE_ZSTD ? HEADER_INCOMPATIBLE_COMPRESSED_ZSTD : 0) | \
+         HEADER_INCOMPATIBLE_KEYED_HASH |                        \
+         HEADER_INCOMPATIBLE_COMPACT)
 
 enum {
         HEADER_COMPATIBLE_SEALED = 1 << 0,
@@ -191,7 +201,7 @@
 #endif
 
 #define HEADER_SIGNATURE                                                \
-        ((const char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
+        ((const uint8_t[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
 
 #define struct_Header__contents {                       \
         uint8_t signature[8]; /* "LPKSHHRH" */          \
@@ -227,12 +237,15 @@
         /* Added in 246 */                              \
         le64_t data_hash_chain_depth;                   \
         le64_t field_hash_chain_depth;                  \
+        /* Added in 252 */                              \
+        le32_t tail_entry_array_offset;                 \
+        le32_t tail_entry_array_n_entries;              \
         }
 
 struct Header struct_Header__contents;
 struct Header__packed struct_Header__contents _packed_;
 assert_cc(sizeof(struct Header) == sizeof(struct Header__packed));
-assert_cc(sizeof(struct Header) == 256);
+assert_cc(sizeof(struct Header) == 264);
 
 #define FSS_HEADER_SIGNATURE                                            \
         ((const char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c
index 8dce02c..f622acb 100644
--- a/src/libsystemd/sd-journal/journal-file.c
+++ b/src/libsystemd/sd-journal/journal-file.c
@@ -20,11 +20,13 @@
 #include "fd-util.h"
 #include "format-util.h"
 #include "fs-util.h"
+#include "id128-util.h"
 #if HAVE_GCRYPT
 #include "journal-authenticate.h"
 #endif
 #include "journal-def.h"
 #include "journal-file.h"
+#include "journal-internal.h"
 #include "lookup3.h"
 #include "memory-util.h"
 #include "path-util.h"
@@ -32,8 +34,11 @@
 #include "set.h"
 #include "sort-util.h"
 #include "stat-util.h"
+#include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
+#include "sync-util.h"
+#include "user-util.h"
 #include "xattr-util.h"
 
 #define DEFAULT_DATA_HASH_TABLE_SIZE (2047ULL*sizeof(HashItem))
@@ -44,6 +49,7 @@
 
 /* This is the minimum journal file size */
 #define JOURNAL_FILE_SIZE_MIN (512 * 1024ULL)             /* 512 KiB */
+#define JOURNAL_COMPACT_SIZE_MAX UINT32_MAX               /* 4 GiB */
 
 /* These are the lower and upper bounds if we deduce the max_use value
  * from the file system size */
@@ -91,66 +97,95 @@
 #  pragma GCC diagnostic ignored "-Waddress-of-packed-member"
 #endif
 
-/* This may be called from a separate thread to prevent blocking the caller for the duration of fsync().
- * As a result we use atomic operations on f->offline_state for inter-thread communications with
- * journal_file_set_offline() and journal_file_set_online(). */
-static void journal_file_set_offline_internal(JournalFile *f) {
-        assert(f);
-        assert(f->fd >= 0);
-        assert(f->header);
-
-        for (;;) {
-                switch (f->offline_state) {
-                case OFFLINE_CANCEL:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_CANCEL, OFFLINE_DONE))
-                                continue;
-                        return;
-
-                case OFFLINE_AGAIN_FROM_SYNCING:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_AGAIN_FROM_SYNCING, OFFLINE_SYNCING))
-                                continue;
-                        break;
-
-                case OFFLINE_AGAIN_FROM_OFFLINING:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_AGAIN_FROM_OFFLINING, OFFLINE_SYNCING))
-                                continue;
-                        break;
-
-                case OFFLINE_SYNCING:
-                        (void) fsync(f->fd);
-
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_SYNCING, OFFLINE_OFFLINING))
-                                continue;
-
-                        f->header->state = f->archive ? STATE_ARCHIVED : STATE_OFFLINE;
-                        (void) fsync(f->fd);
-                        break;
-
-                case OFFLINE_OFFLINING:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_OFFLINING, OFFLINE_DONE))
-                                continue;
-                        _fallthrough_;
-                case OFFLINE_DONE:
-                        return;
-
-                case OFFLINE_JOINED:
-                        log_debug("OFFLINE_JOINED unexpected offline state for journal_file_set_offline_internal()");
-                        return;
-                }
+static int mmap_prot_from_open_flags(int flags) {
+        switch (flags & O_ACCMODE) {
+        case O_RDONLY:
+                return PROT_READ;
+        case O_WRONLY:
+                return PROT_WRITE;
+        case O_RDWR:
+                return PROT_READ|PROT_WRITE;
+        default:
+                assert_not_reached();
         }
 }
 
-static void * journal_file_set_offline_thread(void *arg) {
-        JournalFile *f = arg;
+int journal_file_tail_end_by_pread(JournalFile *f, uint64_t *ret_offset) {
+        uint64_t p;
+        int r;
 
-        (void) pthread_setname_np(pthread_self(), "journal-offline");
+        assert(f);
+        assert(f->header);
+        assert(ret_offset);
 
-        journal_file_set_offline_internal(f);
+        /* Same as journal_file_tail_end_by_mmap() below, but operates with pread() to avoid the mmap cache
+         * (and thus is thread safe) */
 
-        return NULL;
+        p = le64toh(f->header->tail_object_offset);
+        if (p == 0)
+                p = le64toh(f->header->header_size);
+        else {
+                Object tail;
+                uint64_t sz;
+
+                r = journal_file_read_object_header(f, OBJECT_UNUSED, p, &tail);
+                if (r < 0)
+                        return r;
+
+                sz = le64toh(tail.object.size);
+                if (sz > UINT64_MAX - sizeof(uint64_t) + 1)
+                        return -EBADMSG;
+
+                sz = ALIGN64(sz);
+                if (p > UINT64_MAX - sz)
+                        return -EBADMSG;
+
+                p += sz;
+        }
+
+        *ret_offset = p;
+
+        return 0;
 }
 
-static int journal_file_set_offline_thread_join(JournalFile *f) {
+int journal_file_tail_end_by_mmap(JournalFile *f, uint64_t *ret_offset) {
+        uint64_t p;
+        int r;
+
+        assert(f);
+        assert(f->header);
+        assert(ret_offset);
+
+        /* Same as journal_file_tail_end_by_pread() above, but operates with the usual mmap logic */
+
+        p = le64toh(f->header->tail_object_offset);
+        if (p == 0)
+                p = le64toh(f->header->header_size);
+        else {
+                Object *tail;
+                uint64_t sz;
+
+                r = journal_file_move_to_object(f, OBJECT_UNUSED, p, &tail);
+                if (r < 0)
+                        return r;
+
+                sz = le64toh(READ_NOW(tail->object.size));
+                if (sz > UINT64_MAX - sizeof(uint64_t) + 1)
+                        return -EBADMSG;
+
+                sz = ALIGN64(sz);
+                if (p > UINT64_MAX - sz)
+                        return -EBADMSG;
+
+                p += sz;
+        }
+
+        *ret_offset = p;
+
+        return 0;
+}
+
+int journal_file_set_offline_thread_join(JournalFile *f) {
         int r;
 
         assert(f);
@@ -164,122 +199,18 @@
 
         f->offline_state = OFFLINE_JOINED;
 
-        if (mmap_cache_got_sigbus(f->mmap, f->cache_fd))
+        if (mmap_cache_fd_got_sigbus(f->cache_fd))
                 return -EIO;
 
         return 0;
 }
 
-/* Trigger a restart if the offline thread is mid-flight in a restartable state. */
-static bool journal_file_set_offline_try_restart(JournalFile *f) {
-        for (;;) {
-                switch (f->offline_state) {
-                case OFFLINE_AGAIN_FROM_SYNCING:
-                case OFFLINE_AGAIN_FROM_OFFLINING:
-                        return true;
-
-                case OFFLINE_CANCEL:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_CANCEL, OFFLINE_AGAIN_FROM_SYNCING))
-                                continue;
-                        return true;
-
-                case OFFLINE_SYNCING:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_SYNCING, OFFLINE_AGAIN_FROM_SYNCING))
-                                continue;
-                        return true;
-
-                case OFFLINE_OFFLINING:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_OFFLINING, OFFLINE_AGAIN_FROM_OFFLINING))
-                                continue;
-                        return true;
-
-                default:
-                        return false;
-                }
-        }
-}
-
-/* Sets a journal offline.
- *
- * If wait is false then an offline is dispatched in a separate thread for a
- * subsequent journal_file_set_offline() or journal_file_set_online() of the
- * same journal to synchronize with.
- *
- * If wait is true, then either an existing offline thread will be restarted
- * and joined, or if none exists the offline is simply performed in this
- * context without involving another thread.
- */
-int journal_file_set_offline(JournalFile *f, bool wait) {
-        int target_state;
-        bool restarted;
-        int r;
-
-        assert(f);
-
-        if (!f->writable)
-                return -EPERM;
-
-        if (f->fd < 0 || !f->header)
-                return -EINVAL;
-
-        target_state = f->archive ? STATE_ARCHIVED : STATE_OFFLINE;
-
-        /* An offlining journal is implicitly online and may modify f->header->state,
-         * we must also join any potentially lingering offline thread when already in
-         * the desired offline state.
-         */
-        if (!journal_file_is_offlining(f) && f->header->state == target_state)
-                return journal_file_set_offline_thread_join(f);
-
-        /* Restart an in-flight offline thread and wait if needed, or join a lingering done one. */
-        restarted = journal_file_set_offline_try_restart(f);
-        if ((restarted && wait) || !restarted) {
-                r = journal_file_set_offline_thread_join(f);
-                if (r < 0)
-                        return r;
-        }
-
-        if (restarted)
-                return 0;
-
-        /* Initiate a new offline. */
-        f->offline_state = OFFLINE_SYNCING;
-
-        if (wait) /* Without using a thread if waiting. */
-                journal_file_set_offline_internal(f);
-        else {
-                sigset_t ss, saved_ss;
-                int k;
-
-                assert_se(sigfillset(&ss) >= 0);
-                /* Don't block SIGBUS since the offlining thread accesses a memory mapped file.
-                 * Asynchronous SIGBUS signals can safely be handled by either thread. */
-                assert_se(sigdelset(&ss, SIGBUS) >= 0);
-
-                r = pthread_sigmask(SIG_BLOCK, &ss, &saved_ss);
-                if (r > 0)
-                        return -r;
-
-                r = pthread_create(&f->offline_thread, NULL, journal_file_set_offline_thread, f);
-
-                k = pthread_sigmask(SIG_SETMASK, &saved_ss, NULL);
-                if (r > 0) {
-                        f->offline_state = OFFLINE_JOINED;
-                        return -r;
-                }
-                if (k > 0)
-                        return -k;
-        }
-
-        return 0;
-}
-
 static int journal_file_set_online(JournalFile *f) {
         bool wait = true;
 
         assert(f);
 
-        if (!f->writable)
+        if (!journal_file_writable(f))
                 return -EPERM;
 
         if (f->fd < 0 || !f->header)
@@ -292,23 +223,32 @@
                         wait = false;
                         break;
 
-                case OFFLINE_SYNCING:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_SYNCING, OFFLINE_CANCEL))
-                                continue;
+                case OFFLINE_SYNCING: {
+                                OfflineState tmp_state = OFFLINE_SYNCING;
+                                if (!__atomic_compare_exchange_n(&f->offline_state, &tmp_state, OFFLINE_CANCEL,
+                                    false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                        continue;
+                        }
                         /* Canceled syncing prior to offlining, no need to wait. */
                         wait = false;
                         break;
 
-                case OFFLINE_AGAIN_FROM_SYNCING:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_AGAIN_FROM_SYNCING, OFFLINE_CANCEL))
-                                continue;
+                case OFFLINE_AGAIN_FROM_SYNCING: {
+                                OfflineState tmp_state = OFFLINE_AGAIN_FROM_SYNCING;
+                                if (!__atomic_compare_exchange_n(&f->offline_state, &tmp_state, OFFLINE_CANCEL,
+                                    false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                        continue;
+                        }
                         /* Canceled restart from syncing, no need to wait. */
                         wait = false;
                         break;
 
-                case OFFLINE_AGAIN_FROM_OFFLINING:
-                        if (!__sync_bool_compare_and_swap(&f->offline_state, OFFLINE_AGAIN_FROM_OFFLINING, OFFLINE_CANCEL))
-                                continue;
+                case OFFLINE_AGAIN_FROM_OFFLINING: {
+                                OfflineState tmp_state = OFFLINE_AGAIN_FROM_OFFLINING;
+                                if (!__atomic_compare_exchange_n(&f->offline_state, &tmp_state, OFFLINE_CANCEL,
+                                    false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))
+                                        continue;
+                        }
                         /* Canceled restart from offlining, must wait for offlining to complete however. */
                         _fallthrough_;
                 default: {
@@ -324,7 +264,7 @@
                 }
         }
 
-        if (mmap_cache_got_sigbus(f->mmap, f->cache_fd))
+        if (mmap_cache_fd_got_sigbus(f->cache_fd))
                 return -EIO;
 
         switch (f->header->state) {
@@ -341,62 +281,17 @@
         }
 }
 
-bool journal_file_is_offlining(JournalFile *f) {
-        assert(f);
-
-        __sync_synchronize();
-
-        if (IN_SET(f->offline_state, OFFLINE_DONE, OFFLINE_JOINED))
-                return false;
-
-        return true;
-}
-
 JournalFile* journal_file_close(JournalFile *f) {
         if (!f)
                 return NULL;
 
-#if HAVE_GCRYPT
-        /* Write the final tag */
-        if (f->seal && f->writable) {
-                int r;
-
-                r = journal_file_append_tag(f);
-                if (r < 0)
-                        log_error_errno(r, "Failed to append tag when closing journal: %m");
-        }
-#endif
-
-        if (f->post_change_timer) {
-                if (sd_event_source_get_enabled(f->post_change_timer, NULL) > 0)
-                        journal_file_post_change(f);
-
-                sd_event_source_disable_unref(f->post_change_timer);
-        }
-
-        journal_file_set_offline(f, true);
-
-        if (f->mmap && f->cache_fd)
-                mmap_cache_free_fd(f->mmap, f->cache_fd);
-
-        if (f->fd >= 0 && f->defrag_on_close) {
-
-                /* Be friendly to btrfs: turn COW back on again now,
-                 * and defragment the file. We won't write to the file
-                 * ever again, hence remove all fragmentation, and
-                 * reenable all the good bits COW usually provides
-                 * (such as data checksumming). */
-
-                (void) chattr_fd(f->fd, 0, FS_NOCOW_FL, NULL);
-                (void) btrfs_defrag_fd(f->fd);
-        }
+        if (f->cache_fd)
+                mmap_cache_fd_free(f->cache_fd);
 
         if (f->close_fd)
                 safe_close(f->fd);
         free(f->path);
 
-        mmap_cache_unref(f->mmap);
-
         ordered_hashmap_free_free(f->chain_cache);
 
 #if HAVE_COMPRESSION
@@ -418,24 +313,57 @@
         return mfree(f);
 }
 
-static int journal_file_init_header(JournalFile *f, JournalFile *template) {
-        Header h = {};
+static bool keyed_hash_requested(void) {
+        int r;
+
+        r = getenv_bool("SYSTEMD_JOURNAL_KEYED_HASH");
+        if (r >= 0)
+                return r;
+        if (r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_JOURNAL_KEYED_HASH environment variable, ignoring: %m");
+
+        return true;
+}
+
+static bool compact_mode_requested(void) {
+        int r;
+
+        r = getenv_bool("SYSTEMD_JOURNAL_COMPACT");
+        if (r >= 0)
+                return r;
+        if (r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_JOURNAL_COMPACT environment variable, ignoring: %m");
+
+        return true;
+}
+
+static int journal_file_init_header(
+                JournalFile *f,
+                JournalFileFlags file_flags,
+                JournalFile *template) {
+
+        bool seal = false;
         ssize_t k;
         int r;
 
         assert(f);
 
-        memcpy(h.signature, HEADER_SIGNATURE, 8);
-        h.header_size = htole64(ALIGN64(sizeof(h)));
+#if HAVE_GCRYPT
+        /* Try to load the FSPRG state, and if we can't, then just don't do sealing */
+        seal = FLAGS_SET(file_flags, JOURNAL_SEAL) && journal_file_fss_load(f) >= 0;
+#endif
 
-        h.incompatible_flags |= htole32(
-                f->compress_xz * HEADER_INCOMPATIBLE_COMPRESSED_XZ |
-                f->compress_lz4 * HEADER_INCOMPATIBLE_COMPRESSED_LZ4 |
-                f->compress_zstd * HEADER_INCOMPATIBLE_COMPRESSED_ZSTD |
-                f->keyed_hash * HEADER_INCOMPATIBLE_KEYED_HASH);
+        Header h = {
+                .header_size = htole64(ALIGN64(sizeof(h))),
+                .incompatible_flags = htole32(
+                                FLAGS_SET(file_flags, JOURNAL_COMPRESS) * COMPRESSION_TO_HEADER_INCOMPATIBLE_FLAG(DEFAULT_COMPRESSION) |
+                                keyed_hash_requested() * HEADER_INCOMPATIBLE_KEYED_HASH |
+                                compact_mode_requested() * HEADER_INCOMPATIBLE_COMPACT),
+                .compatible_flags = htole32(seal * HEADER_COMPATIBLE_SEALED),
+        };
 
-        h.compatible_flags = htole32(
-                f->seal * HEADER_COMPATIBLE_SEALED);
+        assert_cc(sizeof(h.signature) == sizeof(HEADER_SIGNATURE));
+        memcpy(h.signature, HEADER_SIGNATURE, sizeof(HEADER_SIGNATURE));
 
         r = sd_id128_randomize(&h.file_id);
         if (r < 0)
@@ -450,7 +378,6 @@
         k = pwrite(f->fd, &h, sizeof(h), 0);
         if (k < 0)
                 return -errno;
-
         if (k != sizeof(h))
                 return -EIO;
 
@@ -464,11 +391,13 @@
         assert(f->header);
 
         r = sd_id128_get_machine(&f->header->machine_id);
-        if (IN_SET(r, -ENOENT, -ENOMEDIUM))
-                /* We don't have a machine-id, let's continue without */
-                zero(f->header->machine_id);
-        else if (r < 0)
-                return r;
+        if (r < 0) {
+                if (!ERRNO_IS_MACHINE_ID_UNSET(r))
+                        return r;
+
+                /* don't have a machine-id, let's continue without */
+                f->header->machine_id = SD_ID128_NULL;
+        }
 
         r = sd_id128_get_boot(&f->header->boot_id);
         if (r < 0)
@@ -476,11 +405,9 @@
 
         r = journal_file_set_online(f);
 
-        /* Sync the online state to disk */
-        (void) fsync(f->fd);
-
-        /* We likely just created a new file, also sync the directory this file is located in. */
-        (void) fsync_directory_of_file(f->fd);
+        /* Sync the online state to disk; likely just created a new file, also sync the directory this file
+         * is located in. */
+        (void) fsync_full(f->fd);
 
         return r;
 }
@@ -491,6 +418,9 @@
         const char *type = compatible ? "compatible" : "incompatible";
         uint32_t flags;
 
+        assert(f);
+        assert(f->header);
+
         flags = le32toh(compatible ? f->header->compatible_flags : f->header->incompatible_flags);
 
         if (flags & ~supported) {
@@ -499,8 +429,8 @@
                                   f->path, type, flags & ~any);
                 flags = (flags & any) & ~supported;
                 if (flags) {
-                        const char* strv[5];
-                        unsigned n = 0;
+                        const char* strv[6];
+                        size_t n = 0;
                         _cleanup_free_ char *t = NULL;
 
                         if (compatible) {
@@ -515,6 +445,8 @@
                                         strv[n++] = "zstd-compressed";
                                 if (flags & HEADER_INCOMPATIBLE_KEYED_HASH)
                                         strv[n++] = "keyed-hash";
+                                if (flags & HEADER_INCOMPATIBLE_COMPACT)
+                                        strv[n++] = "compact";
                         }
                         strv[n] = NULL;
                         assert(n < ELEMENTSOF(strv));
@@ -544,7 +476,7 @@
                 return -EPROTONOSUPPORT;
 
         /* When open for writing we refuse to open files with compatible flags, too. */
-        if (f->writable && warn_wrong_flags(f, true))
+        if (journal_file_writable(f) && warn_wrong_flags(f, true))
                 return -EPROTONOSUPPORT;
 
         if (f->header->state >= _STATE_MAX)
@@ -556,6 +488,11 @@
         if (header_size < HEADER_SIZE_MIN)
                 return -EBADMSG;
 
+        /* When open for writing we refuse to open files with a mismatch of the header size, i.e. writing to
+         * files implementing older or new header structures. */
+        if (journal_file_writable(f) && header_size != sizeof(Header))
+                return -EPROTONOSUPPORT;
+
         if (JOURNAL_HEADER_SEALED(f->header) && !JOURNAL_HEADER_CONTAINS(f->header, n_entry_arrays))
                 return -EBADMSG;
 
@@ -573,7 +510,7 @@
             !VALID64(le64toh(f->header->entry_array_offset)))
                 return -ENODATA;
 
-        if (f->writable) {
+        if (journal_file_writable(f)) {
                 sd_id128_t machine_id;
                 uint8_t state;
                 int r;
@@ -583,17 +520,18 @@
                         return r;
 
                 if (!sd_id128_equal(machine_id, f->header->machine_id))
-                        return -EHOSTDOWN;
+                        return log_debug_errno(SYNTHETIC_ERRNO(EHOSTDOWN),
+                                               "Trying to open journal file from different host for writing, refusing.");
 
                 state = f->header->state;
 
                 if (state == STATE_ARCHIVED)
                         return -ESHUTDOWN; /* Already archived */
-                else if (state == STATE_ONLINE)
+                if (state == STATE_ONLINE)
                         return log_debug_errno(SYNTHETIC_ERRNO(EBUSY),
                                                "Journal file %s is already online. Assuming unclean closing.",
                                                f->path);
-                else if (state != STATE_OFFLINE)
+                if (state != STATE_OFFLINE)
                         return log_debug_errno(SYNTHETIC_ERRNO(EBUSY),
                                                "Journal file %s has unknown state %i.",
                                                f->path, state);
@@ -610,14 +548,6 @@
                                                f->path);
         }
 
-        f->compress_xz = JOURNAL_HEADER_COMPRESSED_XZ(f->header);
-        f->compress_lz4 = JOURNAL_HEADER_COMPRESSED_LZ4(f->header);
-        f->compress_zstd = JOURNAL_HEADER_COMPRESSED_ZSTD(f->header);
-
-        f->seal = JOURNAL_HEADER_SEALED(f->header);
-
-        f->keyed_hash = JOURNAL_HEADER_KEYED_HASH(f->header);
-
         return 0;
 }
 
@@ -657,7 +587,7 @@
         if (size > PAGE_ALIGN_DOWN(UINT64_MAX) - offset)
                 return -EINVAL;
 
-        if (mmap_cache_got_sigbus(f->mmap, f->cache_fd))
+        if (mmap_cache_fd_got_sigbus(f->cache_fd))
                 return -EIO;
 
         old_header_size = le64toh(READ_NOW(f->header->header_size));
@@ -688,6 +618,10 @@
         if (f->metrics.max_size > 0 && new_size > f->metrics.max_size)
                 return -E2BIG;
 
+        /* Refuse to go over 4G in compact mode so offsets can be stored in 32-bit. */
+        if (JOURNAL_HEADER_COMPACT(f->header) && new_size > UINT32_MAX)
+                return -E2BIG;
+
         if (new_size > f->metrics.min_size && f->metrics.keep_free > 0) {
                 struct statvfs svfs;
 
@@ -738,6 +672,10 @@
         assert(f);
         assert(ret);
 
+        /* This function may clear, overwrite, or alter previously cached entries. After this function has
+         * been called, all objects except for one obtained by this function are invalidated and must be
+         * re-read before use. */
+
         if (size <= 0)
                 return -EINVAL;
 
@@ -757,30 +695,71 @@
                         return -EADDRNOTAVAIL;
         }
 
-        return mmap_cache_get(f->mmap, f->cache_fd, type_to_context(type), keep_always, offset, size, &f->last_stat, ret);
+        return mmap_cache_fd_get(f->cache_fd, type_to_context(type), keep_always, offset, size, &f->last_stat, ret);
 }
 
-static uint64_t minimum_header_size(Object *o) {
+static uint64_t minimum_header_size(JournalFile *f, Object *o) {
 
         static const uint64_t table[] = {
-                [OBJECT_DATA] = sizeof(DataObject),
-                [OBJECT_FIELD] = sizeof(FieldObject),
-                [OBJECT_ENTRY] = sizeof(EntryObject),
-                [OBJECT_DATA_HASH_TABLE] = sizeof(HashTableObject),
+                [OBJECT_DATA]             = sizeof(DataObject),
+                [OBJECT_FIELD]            = sizeof(FieldObject),
+                [OBJECT_ENTRY]            = sizeof(EntryObject),
+                [OBJECT_DATA_HASH_TABLE]  = sizeof(HashTableObject),
                 [OBJECT_FIELD_HASH_TABLE] = sizeof(HashTableObject),
-                [OBJECT_ENTRY_ARRAY] = sizeof(EntryArrayObject),
-                [OBJECT_TAG] = sizeof(TagObject),
+                [OBJECT_ENTRY_ARRAY]      = sizeof(EntryArrayObject),
+                [OBJECT_TAG]              = sizeof(TagObject),
         };
 
+        assert(f);
+        assert(o);
+
+        if (o->object.type == OBJECT_DATA)
+                return journal_file_data_payload_offset(f);
+
         if (o->object.type >= ELEMENTSOF(table) || table[o->object.type] <= 0)
                 return sizeof(ObjectHeader);
 
         return table[o->object.type];
 }
 
+static int check_object_header(JournalFile *f, Object *o, ObjectType type, uint64_t offset) {
+        uint64_t s;
+
+        assert(f);
+        assert(o);
+
+        s = le64toh(READ_NOW(o->object.size));
+        if (s == 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                       "Attempt to move to uninitialized object: %" PRIu64,
+                                       offset);
+
+        if (s < sizeof(ObjectHeader))
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                       "Attempt to move to overly short object: %" PRIu64,
+                                       offset);
+
+        if (o->object.type <= OBJECT_UNUSED)
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                       "Attempt to move to object with invalid type: %" PRIu64,
+                                       offset);
+
+        if (type > OBJECT_UNUSED && o->object.type != type)
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                       "Attempt to move to object of unexpected type: %" PRIu64,
+                                       offset);
+
+        if (s < minimum_header_size(f, o))
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                       "Attempt to move to truncated object: %" PRIu64,
+                                       offset);
+
+        return 0;
+}
+
 /* Lightweight object checks. We want this to be fast, so that we won't
  * slowdown every journal_file_move_to_object() call too much. */
-static int journal_file_check_object(JournalFile *f, uint64_t offset, Object *o) {
+static int check_object(JournalFile *f, Object *o, uint64_t offset) {
         assert(f);
         assert(o);
 
@@ -793,10 +772,10 @@
                                                le64toh(o->data.n_entries),
                                                offset);
 
-                if (le64toh(o->object.size) <= offsetof(DataObject, payload))
+                if (le64toh(o->object.size) <= journal_file_data_payload_offset(f))
                         return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
                                                "Bad object size (<= %zu): %" PRIu64 ": %" PRIu64,
-                                               offsetof(DataObject, payload),
+                                               journal_file_data_payload_offset(f),
                                                le64toh(o->object.size),
                                                offset);
 
@@ -815,10 +794,10 @@
                 break;
 
         case OBJECT_FIELD:
-                if (le64toh(o->object.size) <= offsetof(FieldObject, payload))
+                if (le64toh(o->object.size) <= offsetof(Object, field.payload))
                         return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
                                                "Bad field size (<= %zu): %" PRIu64 ": %" PRIu64,
-                                               offsetof(FieldObject, payload),
+                                               offsetof(Object, field.payload),
                                                le64toh(o->object.size),
                                                offset);
 
@@ -835,18 +814,18 @@
                 uint64_t sz;
 
                 sz = le64toh(READ_NOW(o->object.size));
-                if (sz < offsetof(EntryObject, items) ||
-                    (sz - offsetof(EntryObject, items)) % sizeof(EntryItem) != 0)
+                if (sz < offsetof(Object, entry.items) ||
+                    (sz - offsetof(Object, entry.items)) % journal_file_entry_item_size(f) != 0)
                         return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
                                                "Bad entry size (<= %zu): %" PRIu64 ": %" PRIu64,
-                                               offsetof(EntryObject, items),
+                                               offsetof(Object, entry.items),
                                                sz,
                                                offset);
 
-                if ((sz - offsetof(EntryObject, items)) / sizeof(EntryItem) <= 0)
+                if ((sz - offsetof(Object, entry.items)) / journal_file_entry_item_size(f) <= 0)
                         return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
                                                "Invalid number items in entry: %" PRIu64 ": %" PRIu64,
-                                               (sz - offsetof(EntryObject, items)) / sizeof(EntryItem),
+                                               (sz - offsetof(Object, entry.items)) / journal_file_entry_item_size(f),
                                                offset);
 
                 if (le64toh(o->entry.seqnum) <= 0)
@@ -875,9 +854,9 @@
                 uint64_t sz;
 
                 sz = le64toh(READ_NOW(o->object.size));
-                if (sz < offsetof(HashTableObject, items) ||
-                    (sz - offsetof(HashTableObject, items)) % sizeof(HashItem) != 0 ||
-                    (sz - offsetof(HashTableObject, items)) / sizeof(HashItem) <= 0)
+                if (sz < offsetof(Object, hash_table.items) ||
+                    (sz - offsetof(Object, hash_table.items)) % sizeof(HashItem) != 0 ||
+                    (sz - offsetof(Object, hash_table.items)) / sizeof(HashItem) <= 0)
                         return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
                                                "Invalid %s hash table size: %" PRIu64 ": %" PRIu64,
                                                o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
@@ -891,9 +870,9 @@
                 uint64_t sz;
 
                 sz = le64toh(READ_NOW(o->object.size));
-                if (sz < offsetof(EntryArrayObject, items) ||
-                    (sz - offsetof(EntryArrayObject, items)) % sizeof(le64_t) != 0 ||
-                    (sz - offsetof(EntryArrayObject, items)) / sizeof(le64_t) <= 0)
+                if (sz < offsetof(Object, entry_array.items) ||
+                    (sz - offsetof(Object, entry_array.items)) % journal_file_entry_array_item_size(f) != 0 ||
+                    (sz - offsetof(Object, entry_array.items)) / journal_file_entry_array_item_size(f) <= 0)
                         return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
                                                "Invalid object entry array size: %" PRIu64 ": %" PRIu64,
                                                sz,
@@ -928,12 +907,13 @@
 
 int journal_file_move_to_object(JournalFile *f, ObjectType type, uint64_t offset, Object **ret) {
         int r;
-        void *t;
         Object *o;
-        uint64_t s;
 
         assert(f);
-        assert(ret);
+
+        /* Even if this function fails, it may clear, overwrite, or alter previously cached entries. After
+         * this function has been called, all objects except for one obtained by this function are
+         * invalidated and must be re-read before use.. */
 
         /* Objects may only be located at multiple of 64 bit */
         if (!VALID64(offset))
@@ -947,93 +927,124 @@
                                        "Attempt to move to object located in file header: %" PRIu64,
                                        offset);
 
-        r = journal_file_move_to(f, type, false, offset, sizeof(ObjectHeader), &t);
+        r = journal_file_move_to(f, type, false, offset, sizeof(ObjectHeader), (void**) &o);
         if (r < 0)
                 return r;
 
-        o = (Object*) t;
-        s = le64toh(READ_NOW(o->object.size));
-
-        if (s == 0)
-                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "Attempt to move to uninitialized object: %" PRIu64,
-                                       offset);
-        if (s < sizeof(ObjectHeader))
-                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "Attempt to move to overly short object: %" PRIu64,
-                                       offset);
-
-        if (o->object.type <= OBJECT_UNUSED)
-                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "Attempt to move to object with invalid type: %" PRIu64,
-                                       offset);
-
-        if (s < minimum_header_size(o))
-                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "Attempt to move to truncated object: %" PRIu64,
-                                       offset);
-
-        if (type > OBJECT_UNUSED && o->object.type != type)
-                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "Attempt to move to object of unexpected type: %" PRIu64,
-                                       offset);
-
-        r = journal_file_move_to(f, type, false, offset, s, &t);
+        r = check_object_header(f, o, type, offset);
         if (r < 0)
                 return r;
 
-        o = (Object*) t;
-
-        r = journal_file_check_object(f, offset, o);
+        r = journal_file_move_to(f, type, false, offset, le64toh(READ_NOW(o->object.size)), (void**) &o);
         if (r < 0)
                 return r;
 
-        *ret = o;
+        r = check_object_header(f, o, type, offset);
+        if (r < 0)
+                return r;
+
+        r = check_object(f, o, offset);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = o;
+
         return 0;
 }
 
+int journal_file_read_object_header(JournalFile *f, ObjectType type, uint64_t offset, Object *ret) {
+        ssize_t n;
+        Object o;
+        int r;
+
+        assert(f);
+
+        /* Objects may only be located at multiple of 64 bit */
+        if (!VALID64(offset))
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                       "Attempt to read object at non-64bit boundary: %" PRIu64,
+                                       offset);
+
+        /* Object may not be located in the file header */
+        if (offset < le64toh(f->header->header_size))
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                       "Attempt to read object located in file header: %" PRIu64,
+                                       offset);
+
+        /* This will likely read too much data but it avoids having to call pread() twice. */
+        n = pread(f->fd, &o, sizeof(o), offset);
+        if (n < 0)
+                return log_debug_errno(errno, "Failed to read journal file at offset: %" PRIu64,
+                                       offset);
+
+        if ((size_t) n < sizeof(o.object))
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Failed to read short object at offset: %" PRIu64,
+                                       offset);
+
+        r = check_object_header(f, &o, type, offset);
+        if (r < 0)
+                return r;
+
+        if ((size_t) n < minimum_header_size(f, &o))
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Short read while reading object: %" PRIu64,
+                                       offset);
+
+        r = check_object(f, &o, offset);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = o;
+
+        return 0;
+}
+
+static uint64_t inc_seqnum(uint64_t seqnum) {
+        if (seqnum < UINT64_MAX-1)
+                return seqnum + 1;
+
+        return 1; /* skip over UINT64_MAX and 0 when we run out of seqnums and start again */
+}
+
 static uint64_t journal_file_entry_seqnum(
                 JournalFile *f,
                 uint64_t *seqnum) {
 
-        uint64_t ret;
+        uint64_t next_seqnum;
 
         assert(f);
         assert(f->header);
 
         /* Picks a new sequence number for the entry we are about to add and returns it. */
 
-        ret = le64toh(f->header->tail_entry_seqnum) + 1;
+        next_seqnum = inc_seqnum(le64toh(f->header->tail_entry_seqnum));
 
-        if (seqnum) {
-                /* If an external seqnum counter was passed, we update both the local and the external one,
-                 * and set it to the maximum of both */
+        /* If an external seqnum counter was passed, we update both the local and the external one, and set
+         * it to the maximum of both */
+        if (seqnum)
+                *seqnum = next_seqnum = MAX(inc_seqnum(*seqnum), next_seqnum);
 
-                if (*seqnum + 1 > ret)
-                        ret = *seqnum + 1;
-
-                *seqnum = ret;
-        }
-
-        f->header->tail_entry_seqnum = htole64(ret);
+        f->header->tail_entry_seqnum = htole64(next_seqnum);
 
         if (f->header->head_entry_seqnum == 0)
-                f->header->head_entry_seqnum = htole64(ret);
+                f->header->head_entry_seqnum = htole64(next_seqnum);
 
-        return ret;
+        return next_seqnum;
 }
 
 int journal_file_append_object(
                 JournalFile *f,
                 ObjectType type,
                 uint64_t size,
-                Object **ret,
+                Object **ret_object,
                 uint64_t *ret_offset) {
 
         int r;
         uint64_t p;
-        Object *tail, *o;
-        void *t;
+        Object *o;
 
         assert(f);
         assert(f->header);
@@ -1044,36 +1055,18 @@
         if (r < 0)
                 return r;
 
-        p = le64toh(f->header->tail_object_offset);
-        if (p == 0)
-                p = le64toh(f->header->header_size);
-        else {
-                uint64_t sz;
-
-                r = journal_file_move_to_object(f, OBJECT_UNUSED, p, &tail);
-                if (r < 0)
-                        return r;
-
-                sz = le64toh(READ_NOW(tail->object.size));
-                if (sz > UINT64_MAX - sizeof(uint64_t) + 1)
-                        return -EBADMSG;
-
-                sz = ALIGN64(sz);
-                if (p > UINT64_MAX - sz)
-                        return -EBADMSG;
-
-                p += sz;
-        }
+        r = journal_file_tail_end_by_mmap(f, &p);
+        if (r < 0)
+                return r;
 
         r = journal_file_allocate(f, p, size);
         if (r < 0)
                 return r;
 
-        r = journal_file_move_to(f, type, false, p, size, &t);
+        r = journal_file_move_to(f, type, false, p, size, (void**) &o);
         if (r < 0)
                 return r;
 
-        o = (Object*) t;
         o->object = (ObjectHeader) {
                 .type = type,
                 .size = htole64(size),
@@ -1082,8 +1075,8 @@
         f->header->tail_object_offset = htole64(p);
         f->header->n_objects = htole64(le64toh(f->header->n_objects) + 1);
 
-        if (ret)
-                *ret = o;
+        if (ret_object)
+                *ret_object = o;
 
         if (ret_offset)
                 *ret_offset = p;
@@ -1302,7 +1295,7 @@
         return 0;
 }
 
-static int next_hash_offset(
+static int get_next_hash_offset(
                 JournalFile *f,
                 uint64_t *p,
                 le64_t *next_hash_offset,
@@ -1311,6 +1304,11 @@
 
         uint64_t nextp;
 
+        assert(f);
+        assert(p);
+        assert(next_hash_offset);
+        assert(depth);
+
         nextp = le64toh(READ_NOW(*next_hash_offset));
         if (nextp > 0) {
                 if (nextp <= *p) /* Refuse going in loops */
@@ -1320,7 +1318,7 @@
                 (*depth)++;
 
                 /* If the depth of this hash chain is larger than all others we have seen so far, record it */
-                if (header_max_depth && f->writable)
+                if (header_max_depth && journal_file_writable(f))
                         *header_max_depth = htole64(MAX(*depth, le64toh(*header_max_depth)));
         }
 
@@ -1330,15 +1328,19 @@
 
 int journal_file_find_field_object_with_hash(
                 JournalFile *f,
-                const void *field, uint64_t size, uint64_t hash,
-                Object **ret, uint64_t *ret_offset) {
+                const void *field,
+                uint64_t size,
+                uint64_t hash,
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
         uint64_t p, osize, h, m, depth = 0;
         int r;
 
         assert(f);
         assert(f->header);
-        assert(field && size > 0);
+        assert(field);
+        assert(size > 0);
 
         /* If the field hash table is empty, we can't find anything */
         if (le64toh(f->header->field_hash_table_size) <= 0)
@@ -1368,15 +1370,15 @@
                     le64toh(o->object.size) == osize &&
                     memcmp(o->field.payload, field, size) == 0) {
 
-                        if (ret)
-                                *ret = o;
+                        if (ret_object)
+                                *ret_object = o;
                         if (ret_offset)
                                 *ret_offset = p;
 
                         return 1;
                 }
 
-                r = next_hash_offset(
+                r = get_next_hash_offset(
                                 f,
                                 &p,
                                 &o->field.next_hash_offset,
@@ -1395,6 +1397,7 @@
                 size_t sz) {
 
         assert(f);
+        assert(f->header);
         assert(data || sz == 0);
 
         /* We try to unify our codebase on siphash, hence new-styled journal files utilizing the keyed hash
@@ -1408,25 +1411,31 @@
 
 int journal_file_find_field_object(
                 JournalFile *f,
-                const void *field, uint64_t size,
-                Object **ret, uint64_t *ret_offset) {
+                const void *field,
+                uint64_t size,
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
         assert(f);
-        assert(field && size > 0);
+        assert(field);
+        assert(size > 0);
 
         return journal_file_find_field_object_with_hash(
                         f,
                         field, size,
                         journal_file_hash_data(f, field, size),
-                        ret, ret_offset);
+                        ret_object, ret_offset);
 }
 
 int journal_file_find_data_object_with_hash(
                 JournalFile *f,
-                const void *data, uint64_t size, uint64_t hash,
-                Object **ret, uint64_t *ret_offset) {
+                const void *data,
+                uint64_t size,
+                uint64_t hash,
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
-        uint64_t p, osize, h, m, depth = 0;
+        uint64_t p, h, m, depth = 0;
         int r;
 
         assert(f);
@@ -1442,8 +1451,6 @@
         if (r < 0)
                 return r;
 
-        osize = offsetof(Object, data.payload) + size;
-
         m = le64toh(READ_NOW(f->header->data_hash_table_size)) / sizeof(HashItem);
         if (m <= 0)
                 return -EBADMSG;
@@ -1453,6 +1460,8 @@
 
         while (p > 0) {
                 Object *o;
+                void *d;
+                size_t rsize;
 
                 r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
                 if (r < 0)
@@ -1461,41 +1470,14 @@
                 if (le64toh(o->data.hash) != hash)
                         goto next;
 
-                if (o->object.flags & OBJECT_COMPRESSION_MASK) {
-#if HAVE_COMPRESSION
-                        uint64_t l;
-                        size_t rsize = 0;
+                r = journal_file_data_payload(f, o, p, NULL, 0, 0, &d, &rsize);
+                if (r < 0)
+                        return r;
+                assert(r > 0); /* journal_file_data_payload() always returns > 0 if no field is provided. */
 
-                        l = le64toh(READ_NOW(o->object.size));
-                        if (l <= offsetof(Object, data.payload))
-                                return -EBADMSG;
-
-                        l -= offsetof(Object, data.payload);
-
-                        r = decompress_blob(o->object.flags & OBJECT_COMPRESSION_MASK,
-                                            o->data.payload, l, &f->compress_buffer, &rsize, 0);
-                        if (r < 0)
-                                return r;
-
-                        if (rsize == size &&
-                            memcmp(f->compress_buffer, data, size) == 0) {
-
-                                if (ret)
-                                        *ret = o;
-
-                                if (ret_offset)
-                                        *ret_offset = p;
-
-                                return 1;
-                        }
-#else
-                        return -EPROTONOSUPPORT;
-#endif
-                } else if (le64toh(o->object.size) == osize &&
-                           memcmp(o->data.payload, data, size) == 0) {
-
-                        if (ret)
-                                *ret = o;
+                if (memcmp_nn(data, size, d, rsize) == 0) {
+                         if (ret_object)
+                                *ret_object = o;
 
                         if (ret_offset)
                                 *ret_offset = p;
@@ -1504,7 +1486,7 @@
                 }
 
         next:
-                r = next_hash_offset(
+                r = get_next_hash_offset(
                                 f,
                                 &p,
                                 &o->data.next_hash_offset,
@@ -1519,8 +1501,10 @@
 
 int journal_file_find_data_object(
                 JournalFile *f,
-                const void *data, uint64_t size,
-                Object **ret, uint64_t *ret_offset) {
+                const void *data,
+                uint64_t size,
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
         assert(f);
         assert(data || size == 0);
@@ -1529,7 +1513,7 @@
                         f,
                         data, size,
                         journal_file_hash_data(f, data, size),
-                        ret, ret_offset);
+                        ret_object, ret_offset);
 }
 
 bool journal_field_valid(const char *p, size_t l, bool allow_protected) {
@@ -1539,6 +1523,8 @@
 
            http://pubs.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap08.html */
 
+        assert(p);
+
         if (l == SIZE_MAX)
                 l = strlen(p);
 
@@ -1555,13 +1541,13 @@
                 return false;
 
         /* Don't allow digits as first character */
-        if (p[0] >= '0' && p[0] <= '9')
+        if (ascii_isdigit(p[0]))
                 return false;
 
         /* Only allow A-Z0-9 and '_' */
         for (const char *a = p; a < p + l; a++)
                 if ((*a < 'A' || *a > 'Z') &&
-                    (*a < '0' || *a > '9') &&
+                    !ascii_isdigit(*a) &&
                     *a != '_')
                         return false;
 
@@ -1570,8 +1556,10 @@
 
 static int journal_file_append_field(
                 JournalFile *f,
-                const void *field, uint64_t size,
-                Object **ret, uint64_t *ret_offset) {
+                const void *field,
+                uint64_t size,
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
         uint64_t hash, p;
         uint64_t osize;
@@ -1579,26 +1567,19 @@
         int r;
 
         assert(f);
-        assert(field && size > 0);
+        assert(field);
+        assert(size > 0);
 
         if (!journal_field_valid(field, size, true))
                 return -EBADMSG;
 
         hash = journal_file_hash_data(f, field, size);
 
-        r = journal_file_find_field_object_with_hash(f, field, size, hash, &o, &p);
+        r = journal_file_find_field_object_with_hash(f, field, size, hash, ret_object, ret_offset);
         if (r < 0)
                 return r;
-        if (r > 0) {
-
-                if (ret)
-                        *ret = o;
-
-                if (ret_offset)
-                        *ret_offset = p;
-
+        if (r > 0)
                 return 0;
-        }
 
         osize = offsetof(Object, field.payload) + size;
         r = journal_file_append_object(f, OBJECT_FIELD, osize, &o, &p);
@@ -1612,20 +1593,20 @@
         if (r < 0)
                 return r;
 
-        /* The linking might have altered the window, so let's
-         * refresh our pointer */
-        r = journal_file_move_to_object(f, OBJECT_FIELD, p, &o);
-        if (r < 0)
-                return r;
+        /* The linking might have altered the window, so let's only pass the offset to hmac which will
+         * move to the object again if needed. */
 
 #if HAVE_GCRYPT
-        r = journal_file_hmac_put_object(f, OBJECT_FIELD, o, p);
+        r = journal_file_hmac_put_object(f, OBJECT_FIELD, NULL, p);
         if (r < 0)
                 return r;
 #endif
 
-        if (ret)
-                *ret = o;
+        if (ret_object) {
+                r = journal_file_move_to_object(f, OBJECT_FIELD, p, ret_object);
+                if (r < 0)
+                        return r;
+        }
 
         if (ret_offset)
                 *ret_offset = p;
@@ -1633,100 +1614,99 @@
         return 0;
 }
 
-static int journal_file_append_data(
-                JournalFile *f,
-                const void *data, uint64_t size,
-                Object **ret, uint64_t *ret_offset) {
-
-        uint64_t hash, p;
-        uint64_t osize;
-        Object *o;
-        int r, compression = 0;
-        const void *eq;
+static Compression maybe_compress_payload(JournalFile *f, uint8_t *dst, const uint8_t *src, uint64_t size, size_t *rsize) {
+        Compression compression = COMPRESSION_NONE;
 
         assert(f);
-        assert(data || size == 0);
+        assert(f->header);
+
+#if HAVE_COMPRESSION
+        if (JOURNAL_FILE_COMPRESS(f) && size >= f->compress_threshold_bytes) {
+                compression = compress_blob(src, size, dst, size - 1, rsize);
+                if (compression > 0)
+                        log_debug("Compressed data object %"PRIu64" -> %zu using %s",
+                                  size, *rsize, compression_to_string(compression));
+                else
+                        /* Compression didn't work, we don't really care why, let's continue without compression */
+                        compression = COMPRESSION_NONE;
+        }
+#endif
+
+        return compression;
+}
+
+static int journal_file_append_data(
+                JournalFile *f,
+                const void *data,
+                uint64_t size,
+                Object **ret_object,
+                uint64_t *ret_offset) {
+
+        uint64_t hash, p, osize;
+        Object *o, *fo;
+        size_t rsize = 0;
+        Compression c;
+        const void *eq;
+        int r;
+
+        assert(f);
+
+        if (!data || size == 0)
+                return -EINVAL;
 
         hash = journal_file_hash_data(f, data, size);
 
-        r = journal_file_find_data_object_with_hash(f, data, size, hash, &o, &p);
+        r = journal_file_find_data_object_with_hash(f, data, size, hash, ret_object, ret_offset);
         if (r < 0)
                 return r;
-        if (r > 0) {
-
-                if (ret)
-                        *ret = o;
-
-                if (ret_offset)
-                        *ret_offset = p;
-
+        if (r > 0)
                 return 0;
-        }
 
-        osize = offsetof(Object, data.payload) + size;
+        eq = memchr(data, '=', size);
+        if (!eq)
+                return -EINVAL;
+
+        osize = journal_file_data_payload_offset(f) + size;
         r = journal_file_append_object(f, OBJECT_DATA, osize, &o, &p);
         if (r < 0)
                 return r;
 
         o->data.hash = htole64(hash);
 
-#if HAVE_COMPRESSION
-        if (JOURNAL_FILE_COMPRESS(f) && size >= f->compress_threshold_bytes) {
-                size_t rsize = 0;
+        c = maybe_compress_payload(f, journal_file_data_payload_field(f, o), data, size, &rsize);
 
-                compression = compress_blob(data, size, o->data.payload, size - 1, &rsize);
-
-                if (compression >= 0) {
-                        o->object.size = htole64(offsetof(Object, data.payload) + rsize);
-                        o->object.flags |= compression;
-
-                        log_debug("Compressed data object %"PRIu64" -> %zu using %s",
-                                  size, rsize, object_compressed_to_string(compression));
-                } else
-                        /* Compression didn't work, we don't really care why, let's continue without compression */
-                        compression = 0;
-        }
-#endif
-
-        if (compression == 0)
-                memcpy_safe(o->data.payload, data, size);
+        if (c != COMPRESSION_NONE) {
+                o->object.size = htole64(journal_file_data_payload_offset(f) + rsize);
+                o->object.flags |= COMPRESSION_TO_OBJECT_FLAG(c);
+        } else
+                memcpy_safe(journal_file_data_payload_field(f, o), data, size);
 
         r = journal_file_link_data(f, o, p, hash);
         if (r < 0)
                 return r;
 
+        /* The linking might have altered the window, so let's refresh our pointer. */
+        r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
+        if (r < 0)
+                return r;
+
 #if HAVE_GCRYPT
         r = journal_file_hmac_put_object(f, OBJECT_DATA, o, p);
         if (r < 0)
                 return r;
 #endif
 
-        /* The linking might have altered the window, so let's
-         * refresh our pointer */
-        r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
+        /* Create field object ... */
+        r = journal_file_append_field(f, data, (uint8_t*) eq - (uint8_t*) data, &fo, NULL);
         if (r < 0)
                 return r;
 
-        if (!data)
-                eq = NULL;
-        else
-                eq = memchr(data, '=', size);
-        if (eq && eq > data) {
-                Object *fo = NULL;
-                uint64_t fp;
+        /* ... and link it in. */
+        o->data.next_field_offset = fo->field.head_data_offset;
+        fo->field.head_data_offset = le64toh(p);
 
-                /* Create field object ... */
-                r = journal_file_append_field(f, data, (uint8_t*) eq - (uint8_t*) data, &fo, &fp);
-                if (r < 0)
-                        return r;
-
-                /* ... and link it in. */
-                o->data.next_field_offset = fo->field.head_data_offset;
-                fo->field.head_data_offset = le64toh(p);
-        }
-
-        if (ret)
-                *ret = o;
+        if (ret_object)
+                *ret_object = o;
 
         if (ret_offset)
                 *ret_offset = p;
@@ -1734,8 +1714,115 @@
         return 0;
 }
 
-uint64_t journal_file_entry_n_items(Object *o) {
+static int maybe_decompress_payload(
+                JournalFile *f,
+                uint8_t *payload,
+                uint64_t size,
+                Compression compression,
+                const char *field,
+                size_t field_length,
+                size_t data_threshold,
+                void **ret_data,
+                size_t *ret_size) {
+
+        assert(f);
+
+        /* We can't read objects larger than 4G on a 32bit machine */
+        if ((uint64_t) (size_t) size != size)
+                return -E2BIG;
+
+        if (compression != COMPRESSION_NONE) {
+#if HAVE_COMPRESSION
+                size_t rsize;
+                int r;
+
+                if (field) {
+                        r = decompress_startswith(compression, payload, size, &f->compress_buffer, field,
+                                                  field_length, '=');
+                        if (r < 0)
+                                return log_debug_errno(r,
+                                                       "Cannot decompress %s object of length %" PRIu64 ": %m",
+                                                       compression_to_string(compression),
+                                                       size);
+                        if (r == 0) {
+                                if (ret_data)
+                                        *ret_data = NULL;
+                                if (ret_size)
+                                        *ret_size = 0;
+                                return 0;
+                        }
+                }
+
+                r = decompress_blob(compression, payload, size, &f->compress_buffer, &rsize, 0);
+                if (r < 0)
+                        return r;
+
+                if (ret_data)
+                        *ret_data = f->compress_buffer;
+                if (ret_size)
+                        *ret_size = rsize;
+#else
+                return -EPROTONOSUPPORT;
+#endif
+        } else {
+                if (field && (size < field_length + 1 || memcmp(payload, field, field_length) != 0 || payload[field_length] != '=')) {
+                        if (ret_data)
+                                *ret_data = NULL;
+                        if (ret_size)
+                                *ret_size = 0;
+                        return 0;
+                }
+
+                if (ret_data)
+                        *ret_data = payload;
+                if (ret_size)
+                        *ret_size = (size_t) size;
+        }
+
+        return 1;
+}
+
+int journal_file_data_payload(
+                JournalFile *f,
+                Object *o,
+                uint64_t offset,
+                const char *field,
+                size_t field_length,
+                size_t data_threshold,
+                void **ret_data,
+                size_t *ret_size) {
+
+        uint64_t size;
+        Compression c;
+        int r;
+
+        assert(f);
+        assert(!field == (field_length == 0)); /* These must be specified together. */
+
+        if (!o) {
+                r = journal_file_move_to_object(f, OBJECT_DATA, offset, &o);
+                if (r < 0)
+                        return r;
+        }
+
+        size = le64toh(READ_NOW(o->object.size));
+        if (size < journal_file_data_payload_offset(f))
+                return -EBADMSG;
+
+        size -= journal_file_data_payload_offset(f);
+
+        c = COMPRESSION_FROM_OBJECT(o);
+        if (c < 0)
+                return -EPROTONOSUPPORT;
+
+        return maybe_decompress_payload(f, journal_file_data_payload_field(f, o), size, c, field,
+                                        field_length, data_threshold, ret_data, ret_size);
+}
+
+uint64_t journal_file_entry_n_items(JournalFile *f, Object *o) {
         uint64_t sz;
+
+        assert(f);
         assert(o);
 
         if (o->object.type != OBJECT_ENTRY)
@@ -1745,12 +1832,13 @@
         if (sz < offsetof(Object, entry.items))
                 return 0;
 
-        return (sz - offsetof(Object, entry.items)) / sizeof(EntryItem);
+        return (sz - offsetof(Object, entry.items)) / journal_file_entry_item_size(f);
 }
 
-uint64_t journal_file_entry_array_n_items(Object *o) {
+uint64_t journal_file_entry_array_n_items(JournalFile *f, Object *o) {
         uint64_t sz;
 
+        assert(f);
         assert(o);
 
         if (o->object.type != OBJECT_ENTRY_ARRAY)
@@ -1760,7 +1848,7 @@
         if (sz < offsetof(Object, entry_array.items))
                 return 0;
 
-        return (sz - offsetof(Object, entry_array.items)) / sizeof(uint64_t);
+        return (sz - offsetof(Object, entry_array.items)) / journal_file_entry_array_item_size(f);
 }
 
 uint64_t journal_file_hash_table_n_items(Object *o) {
@@ -1778,13 +1866,28 @@
         return (sz - offsetof(Object, hash_table.items)) / sizeof(HashItem);
 }
 
-static int link_entry_into_array(JournalFile *f,
-                                 le64_t *first,
-                                 le64_t *idx,
-                                 uint64_t p) {
-        int r;
+static void write_entry_array_item(JournalFile *f, Object *o, uint64_t i, uint64_t p) {
+        assert(f);
+        assert(o);
+
+        if (JOURNAL_HEADER_COMPACT(f->header)) {
+                assert(p <= UINT32_MAX);
+                o->entry_array.items.compact[i] = htole32(p);
+        } else
+                o->entry_array.items.regular[i] = htole64(p);
+}
+
+static int link_entry_into_array(
+                JournalFile *f,
+                le64_t *first,
+                le64_t *idx,
+                le32_t *tail,
+                le32_t *tidx,
+                uint64_t p) {
+
         uint64_t n = 0, ap = 0, q, i, a, hidx;
         Object *o;
+        int r;
 
         assert(f);
         assert(f->header);
@@ -1792,18 +1895,21 @@
         assert(idx);
         assert(p > 0);
 
-        a = le64toh(*first);
-        i = hidx = le64toh(READ_NOW(*idx));
-        while (a > 0) {
+        a = tail ? le32toh(*tail) : le64toh(*first);
+        hidx = le64toh(READ_NOW(*idx));
+        i = tidx ? le32toh(READ_NOW(*tidx)) : hidx;
 
+        while (a > 0) {
                 r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, a, &o);
                 if (r < 0)
                         return r;
 
-                n = journal_file_entry_array_n_items(o);
+                n = journal_file_entry_array_n_items(f, o);
                 if (i < n) {
-                        o->entry_array.items[i] = htole64(p);
+                        write_entry_array_item(f, o, i, p);
                         *idx = htole64(hidx + 1);
+                        if (tidx)
+                                *tidx = htole32(le32toh(*tidx) + 1);
                         return 0;
                 }
 
@@ -1821,7 +1927,7 @@
                 n = 4;
 
         r = journal_file_append_object(f, OBJECT_ENTRY_ARRAY,
-                                       offsetof(Object, entry_array.items) + n * sizeof(uint64_t),
+                                       offsetof(Object, entry_array.items) + n * journal_file_entry_array_item_size(f),
                                        &o, &q);
         if (r < 0)
                 return r;
@@ -1832,7 +1938,7 @@
                 return r;
 #endif
 
-        o->entry_array.items[i] = htole64(p);
+        write_entry_array_item(f, o, i, p);
 
         if (ap == 0)
                 *first = htole64(q);
@@ -1844,19 +1950,27 @@
                 o->entry_array.next_entry_array_offset = htole64(q);
         }
 
+        if (tail)
+                *tail = htole32(q);
+
         if (JOURNAL_HEADER_CONTAINS(f->header, n_entry_arrays))
                 f->header->n_entry_arrays = htole64(le64toh(f->header->n_entry_arrays) + 1);
 
         *idx = htole64(hidx + 1);
+        if (tidx)
+                *tidx = htole32(1);
 
         return 0;
 }
 
-static int link_entry_into_array_plus_one(JournalFile *f,
-                                          le64_t *extra,
-                                          le64_t *first,
-                                          le64_t *idx,
-                                          uint64_t p) {
+static int link_entry_into_array_plus_one(
+                JournalFile *f,
+                le64_t *extra,
+                le64_t *first,
+                le64_t *idx,
+                le32_t *tail,
+                le32_t *tidx,
+                uint64_t p) {
 
         uint64_t hidx;
         int r;
@@ -1876,7 +1990,7 @@
                 le64_t i;
 
                 i = htole64(hidx - 1);
-                r = link_entry_into_array(f, first, &i, p);
+                r = link_entry_into_array(f, first, &i, tail, tidx, p);
                 if (r < 0)
                         return r;
         }
@@ -1885,15 +1999,13 @@
         return 0;
 }
 
-static int journal_file_link_entry_item(JournalFile *f, Object *o, uint64_t offset, uint64_t i) {
-        uint64_t p;
+static int journal_file_link_entry_item(JournalFile *f, uint64_t offset, uint64_t p) {
+        Object *o;
         int r;
 
         assert(f);
-        assert(o);
         assert(offset > 0);
 
-        p = le64toh(o->entry.items[i].object_offset);
         r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
         if (r < 0)
                 return r;
@@ -1902,11 +2014,18 @@
                                               &o->data.entry_offset,
                                               &o->data.entry_array_offset,
                                               &o->data.n_entries,
+                                              JOURNAL_HEADER_COMPACT(f->header) ? &o->data.compact.tail_entry_array_offset : NULL,
+                                              JOURNAL_HEADER_COMPACT(f->header) ? &o->data.compact.tail_entry_array_n_entries : NULL,
                                               offset);
 }
 
-static int journal_file_link_entry(JournalFile *f, Object *o, uint64_t offset) {
-        uint64_t n;
+static int journal_file_link_entry(
+                JournalFile *f,
+                Object *o,
+                uint64_t offset,
+                const EntryItem items[],
+                size_t n_items) {
+
         int r;
 
         assert(f);
@@ -1917,12 +2036,14 @@
         if (o->object.type != OBJECT_ENTRY)
                 return -EINVAL;
 
-        __sync_synchronize();
+        __atomic_thread_fence(__ATOMIC_SEQ_CST);
 
         /* Link up the entry itself */
         r = link_entry_into_array(f,
                                   &f->header->entry_array_offset,
                                   &f->header->n_entries,
+                                  JOURNAL_HEADER_CONTAINS(f->header, tail_entry_array_offset) ? &f->header->tail_entry_array_offset : NULL,
+                                  JOURNAL_HEADER_CONTAINS(f->header, tail_entry_array_n_entries) ? &f->header->tail_entry_array_n_entries : NULL,
                                   offset);
         if (r < 0)
                 return r;
@@ -1936,14 +2057,35 @@
         f->header->tail_entry_monotonic = o->entry.monotonic;
 
         /* Link up the items */
-        n = journal_file_entry_n_items(o);
-        for (uint64_t i = 0; i < n; i++) {
-                r = journal_file_link_entry_item(f, o, offset, i);
-                if (r < 0)
-                        return r;
+        for (uint64_t i = 0; i < n_items; i++) {
+                int k;
+
+                /* If we fail to link an entry item because we can't allocate a new entry array, don't fail
+                 * immediately but try to link the other entry items since it might still be possible to link
+                 * those if they don't require a new entry array to be allocated. */
+
+                k = journal_file_link_entry_item(f, offset, items[i].object_offset);
+                if (k == -E2BIG)
+                        r = k;
+                else if (k < 0)
+                        return k;
         }
 
-        return 0;
+        return r;
+}
+
+static void write_entry_item(JournalFile *f, Object *o, uint64_t i, const EntryItem *item) {
+        assert(f);
+        assert(o);
+        assert(item);
+
+        if (JOURNAL_HEADER_COMPACT(f->header)) {
+                assert(item->object_offset <= UINT32_MAX);
+                o->entry.items.compact[i].object_offset = htole32(item->object_offset);
+        } else {
+                o->entry.items.regular[i].object_offset = htole64(item->object_offset);
+                o->entry.items.regular[i].hash = htole64(item->hash);
+        }
 }
 
 static int journal_file_append_entry_internal(
@@ -1951,9 +2093,12 @@
                 const dual_timestamp *ts,
                 const sd_id128_t *boot_id,
                 uint64_t xor_hash,
-                const EntryItem items[], unsigned n_items,
+                const EntryItem items[],
+                size_t n_items,
                 uint64_t *seqnum,
-                Object **ret, uint64_t *ret_offset) {
+                Object **ret_object,
+                uint64_t *ret_offset) {
+
         uint64_t np;
         uint64_t osize;
         Object *o;
@@ -1961,17 +2106,48 @@
 
         assert(f);
         assert(f->header);
-        assert(items || n_items == 0);
         assert(ts);
+        assert(items || n_items == 0);
 
-        osize = offsetof(Object, entry.items) + (n_items * sizeof(EntryItem));
+        if (f->strict_order) {
+                /* If requested be stricter with ordering in this journal file, to make searching via
+                 * bisection fully deterministic. This is an optional feature, so that if desired journal
+                 * files can be written where the ordering is not strictly enforced (in which case bisection
+                 * will yield *a* result, but not the *only* result, when searching for points in
+                 * time). Strict ordering mode is enabled when journald originally writes the files, but
+                 * might not necessarily be if other tools (the remoting tools for example) write journal
+                 * files from combined sources.
+                 *
+                 * Typically, if any of the errors generated here are seen journald will just rotate the
+                 * journal files and start anew. */
+
+                if (ts->realtime < le64toh(f->header->tail_entry_realtime))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EREMCHG),
+                                               "Realtime timestamp %" PRIu64 " smaller than previous realtime "
+                                               "timestamp %" PRIu64 ", refusing entry.",
+                                               ts->realtime, le64toh(f->header->tail_entry_realtime));
+
+                if (!sd_id128_is_null(f->header->boot_id) && boot_id) {
+
+                        if (!sd_id128_equal(f->header->boot_id, *boot_id))
+                                return log_debug_errno(SYNTHETIC_ERRNO(EREMOTE),
+                                                       "Boot ID to write is different from previous boot id, refusing entry.");
+
+                        if (ts->monotonic < le64toh(f->header->tail_entry_monotonic))
+                                return log_debug_errno(SYNTHETIC_ERRNO(ENOTNAM),
+                                                       "Monotonic timestamp %" PRIu64 " smaller than previous monotonic "
+                                                       "timestamp %" PRIu64 ", refusing entry.",
+                                                       ts->monotonic, le64toh(f->header->tail_entry_monotonic));
+                }
+        }
+
+        osize = offsetof(Object, entry.items) + (n_items * journal_file_entry_item_size(f));
 
         r = journal_file_append_object(f, OBJECT_ENTRY, osize, &o, &np);
         if (r < 0)
                 return r;
 
         o->entry.seqnum = htole64(journal_file_entry_seqnum(f, seqnum));
-        memcpy_safe(o->entry.items, items, n_items * sizeof(EntryItem));
         o->entry.realtime = htole64(ts->realtime);
         o->entry.monotonic = htole64(ts->monotonic);
         o->entry.xor_hash = htole64(xor_hash);
@@ -1979,18 +2155,21 @@
                 f->header->boot_id = *boot_id;
         o->entry.boot_id = f->header->boot_id;
 
+        for (size_t i = 0; i < n_items; i++)
+                write_entry_item(f, o, i, &items[i]);
+
 #if HAVE_GCRYPT
         r = journal_file_hmac_put_object(f, OBJECT_ENTRY, o, np);
         if (r < 0)
                 return r;
 #endif
 
-        r = journal_file_link_entry(f, o, np);
+        r = journal_file_link_entry(f, o, np, items, n_items);
         if (r < 0)
                 return r;
 
-        if (ret)
-                *ret = o;
+        if (ret_object)
+                *ret_object = o;
 
         if (ret_offset)
                 *ret_offset = np;
@@ -2009,7 +2188,7 @@
          * trigger IN_MODIFY by truncating the journal file to its
          * current size which triggers IN_MODIFY. */
 
-        __sync_synchronize();
+        __atomic_thread_fence(__ATOMIC_SEQ_CST);
 
         if (ftruncate(f->fd, f->last_stat.st_size) < 0)
                 log_debug_errno(errno, "Failed to truncate file to its own size: %m");
@@ -2032,7 +2211,7 @@
 
         assert_se(e = sd_event_source_get_event(f->post_change_timer));
 
-        /* If we are aleady going down, post the change immediately. */
+        /* If we are already going down, post the change immediately. */
         if (IN_SET(sd_event_get_state(e), SD_EVENT_EXITING, SD_EVENT_FINISHED))
                 goto fail;
 
@@ -2088,14 +2267,14 @@
 }
 
 static int entry_item_cmp(const EntryItem *a, const EntryItem *b) {
-        return CMP(le64toh(a->object_offset), le64toh(b->object_offset));
+        return CMP(ASSERT_PTR(a)->object_offset, ASSERT_PTR(b)->object_offset);
 }
 
 static size_t remove_duplicate_entry_items(EntryItem items[], size_t n) {
-
-        /* This function relies on the items array being sorted. */
         size_t j = 1;
 
+        assert(items || n == 0);
+
         if (n <= 1)
                 return n;
 
@@ -2110,18 +2289,23 @@
                 JournalFile *f,
                 const dual_timestamp *ts,
                 const sd_id128_t *boot_id,
-                const struct iovec iovec[], unsigned n_iovec,
+                const struct iovec iovec[],
+                size_t n_iovec,
                 uint64_t *seqnum,
-                Object **ret, uint64_t *ret_offset) {
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
+        _cleanup_free_ EntryItem *items_alloc = NULL;
         EntryItem *items;
-        int r;
         uint64_t xor_hash = 0;
         struct dual_timestamp _ts;
+        sd_id128_t _boot_id;
+        int r;
 
         assert(f);
         assert(f->header);
-        assert(iovec || n_iovec == 0);
+        assert(iovec);
+        assert(n_iovec > 0);
 
         if (ts) {
                 if (!VALID_REALTIME(ts->realtime))
@@ -2137,16 +2321,31 @@
                 ts = &_ts;
         }
 
+        if (!boot_id) {
+                r = sd_id128_get_boot(&_boot_id);
+                if (r < 0)
+                        return r;
+
+                boot_id = &_boot_id;
+        }
+
 #if HAVE_GCRYPT
         r = journal_file_maybe_append_tag(f, ts->realtime);
         if (r < 0)
                 return r;
 #endif
 
-        /* alloca() can't take 0, hence let's allocate at least one */
-        items = newa(EntryItem, MAX(1u, n_iovec));
+        if (n_iovec < ALLOCA_MAX / sizeof(EntryItem) / 2)
+                items = newa(EntryItem, n_iovec);
+        else {
+                items_alloc = new(EntryItem, n_iovec);
+                if (!items_alloc)
+                        return -ENOMEM;
 
-        for (unsigned i = 0; i < n_iovec; i++) {
+                items = items_alloc;
+        }
+
+        for (size_t i = 0; i < n_iovec; i++) {
                 uint64_t p;
                 Object *o;
 
@@ -2168,8 +2367,10 @@
                 else
                         xor_hash ^= le64toh(o->data.hash);
 
-                items[i].object_offset = htole64(p);
-                items[i].hash = o->data.hash;
+                items[i] = (EntryItem) {
+                        .object_offset = p,
+                        .hash = le64toh(o->data.hash),
+                };
         }
 
         /* Order by the position on disk, in order to improve seek
@@ -2177,14 +2378,14 @@
         typesafe_qsort(items, n_iovec, entry_item_cmp);
         n_iovec = remove_duplicate_entry_items(items, n_iovec);
 
-        r = journal_file_append_entry_internal(f, ts, boot_id, xor_hash, items, n_iovec, seqnum, ret, ret_offset);
+        r = journal_file_append_entry_internal(f, ts, boot_id, xor_hash, items, n_iovec, seqnum, ret_object, ret_offset);
 
         /* If the memory mapping triggered a SIGBUS then we return an
          * IO error and ignore the error code passed down to us, since
          * it is very likely just an effect of a nullified replacement
          * mapping page */
 
-        if (mmap_cache_got_sigbus(f->mmap, f->cache_fd))
+        if (mmap_cache_fd_got_sigbus(f->cache_fd))
                 r = -EIO;
 
         if (f->post_change_timer)
@@ -2212,6 +2413,8 @@
                 uint64_t total,
                 uint64_t last_index) {
 
+        assert(h);
+
         if (!ci) {
                 /* If the chain item to cache for this chain is the
                  * first one it's not worth caching anything */
@@ -2242,19 +2445,88 @@
         ci->last_index = last_index;
 }
 
+static int bump_array_index(uint64_t *i, direction_t direction, uint64_t n) {
+        assert(i);
+
+        /* Increase or decrease the specified index, in the right direction. */
+
+        if (direction == DIRECTION_DOWN) {
+                if (*i >= n - 1)
+                        return 0;
+
+                (*i)++;
+        } else {
+                if (*i <= 0)
+                        return 0;
+
+                (*i)--;
+        }
+
+        return 1;
+}
+
+static int bump_entry_array(
+                JournalFile *f,
+                Object *o,
+                uint64_t offset,
+                uint64_t first,
+                direction_t direction,
+                uint64_t *ret) {
+
+        uint64_t p, q = 0;
+        int r;
+
+        assert(f);
+        assert(offset);
+        assert(ret);
+
+        if (direction == DIRECTION_DOWN) {
+                assert(o);
+                *ret = le64toh(o->entry_array.next_entry_array_offset);
+                return 0;
+        }
+
+        /* Entry array chains are a singly linked list, so to find the previous array in the chain, we have
+         * to start iterating from the top. */
+
+        p = first;
+
+        while (p > 0 && p != offset) {
+                r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, p, &o);
+                if (r < 0)
+                        return r;
+
+                q = p;
+                p = le64toh(o->entry_array.next_entry_array_offset);
+        }
+
+        /* If we can't find the previous entry array in the entry array chain, we're likely dealing with a
+         * corrupted journal file. */
+        if (p == 0)
+                return -EBADMSG;
+
+        *ret = q;
+
+        return 0;
+}
+
 static int generic_array_get(
                 JournalFile *f,
                 uint64_t first,
                 uint64_t i,
-                Object **ret, uint64_t *ret_offset) {
+                direction_t direction,
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
-        Object *o;
-        uint64_t p = 0, a, t = 0;
-        int r;
+        uint64_t p = 0, a, t = 0, k;
         ChainCacheItem *ci;
+        Object *o;
+        int r;
 
         assert(f);
 
+        /* FIXME: fix return value assignment on success. */
+
         a = first;
 
         /* Try the chain cache first */
@@ -2266,40 +2538,85 @@
         }
 
         while (a > 0) {
-                uint64_t k;
-
                 r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, a, &o);
+                if (IN_SET(r, -EBADMSG, -EADDRNOTAVAIL)) {
+                        /* If there's corruption and we're going downwards, let's pretend we reached the
+                         * final entry in the entry array chain. */
+
+                        if (direction == DIRECTION_DOWN)
+                                return 0;
+
+                        /* If there's corruption and we're going upwards, move back to the previous entry
+                         * array and start iterating entries from there. */
+
+                        r = bump_entry_array(f, NULL, a, first, DIRECTION_UP, &a);
+                        if (r < 0)
+                                return r;
+
+                        i = UINT64_MAX;
+
+                        break;
+                }
                 if (r < 0)
                         return r;
 
-                k = journal_file_entry_array_n_items(o);
-                if (i < k) {
-                        p = le64toh(o->entry_array.items[i]);
-                        goto found;
-                }
+                k = journal_file_entry_array_n_items(f, o);
+                if (i < k)
+                        break;
 
                 i -= k;
                 t += k;
                 a = le64toh(o->entry_array.next_entry_array_offset);
         }
 
+        /* If we've found the right location, now look for the first non-corrupt entry object (in the right
+         * direction). */
+
+        while (a > 0) {
+                /* In the first iteration of the while loop, we reuse i, k and o from the previous while
+                 * loop. */
+                if (i == UINT64_MAX) {
+                        r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, a, &o);
+                        if (r < 0)
+                                return r;
+
+                        k = journal_file_entry_array_n_items(f, o);
+                        if (k == 0)
+                                break;
+
+                        i = direction == DIRECTION_DOWN ? 0 : k - 1;
+                }
+
+                do {
+                        p = journal_file_entry_array_item(f, o, i);
+
+                        r = journal_file_move_to_object(f, OBJECT_ENTRY, p, ret_object);
+                        if (r >= 0) {
+                                /* Let's cache this item for the next invocation */
+                                chain_cache_put(f->chain_cache, ci, first, a, journal_file_entry_array_item(f, o, 0), t, i);
+
+                                if (ret_offset)
+                                        *ret_offset = p;
+
+                                return 1;
+                        }
+                        if (!IN_SET(r, -EADDRNOTAVAIL, -EBADMSG))
+                                return r;
+
+                        /* OK, so this entry is borked. Most likely some entry didn't get synced to
+                        * disk properly, let's see if the next one might work for us instead. */
+                        log_debug_errno(r, "Entry item %" PRIu64 " is bad, skipping over it.", i);
+                } while (bump_array_index(&i, direction, k) > 0);
+
+                r = bump_entry_array(f, o, a, first, direction, &a);
+                if (r < 0)
+                        return r;
+
+                t += k;
+                i = UINT64_MAX;
+        }
+
         return 0;
-
-found:
-        /* Let's cache this item for the next invocation */
-        chain_cache_put(f->chain_cache, ci, first, a, le64toh(o->entry_array.items[0]), t, i);
-
-        r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o);
-        if (r < 0)
-                return r;
-
-        if (ret)
-                *ret = o;
-
-        if (ret_offset)
-                *ret_offset = p;
-
-        return 1;
 }
 
 static int generic_array_get_plus_one(
@@ -2307,29 +2624,30 @@
                 uint64_t extra,
                 uint64_t first,
                 uint64_t i,
-                Object **ret, uint64_t *ret_offset) {
+                direction_t direction,
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
-        Object *o;
+        int r;
 
         assert(f);
 
-        if (i == 0) {
-                int r;
+        /* FIXME: fix return value assignment on success. */
 
-                r = journal_file_move_to_object(f, OBJECT_ENTRY, extra, &o);
+        if (i == 0) {
+                r = journal_file_move_to_object(f, OBJECT_ENTRY, extra, ret_object);
+                if (IN_SET(r, -EADDRNOTAVAIL, -EBADMSG))
+                        return generic_array_get(f, first, 0, direction, ret_object, ret_offset);
                 if (r < 0)
                         return r;
 
-                if (ret)
-                        *ret = o;
-
                 if (ret_offset)
                         *ret_offset = extra;
 
                 return 1;
         }
 
-        return generic_array_get(f, first, i-1, ret, ret_offset);
+        return generic_array_get(f, first, i - 1, direction, ret_object, ret_offset);
 }
 
 enum {
@@ -2345,15 +2663,28 @@
                 uint64_t needle,
                 int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
                 direction_t direction,
-                Object **ret,
+                Object **ret_object,
                 uint64_t *ret_offset,
                 uint64_t *ret_idx) {
 
+        /* Given an entry array chain, this function finds the object "closest" to the given needle in the
+         * chain, taking into account the provided direction. A function can be provided to determine how
+         * an object is matched against the given needle.
+         *
+         * Given a journal file, the offset of an object and the needle, the test_object() function should
+         * return TEST_LEFT if the needle is located earlier in the entry array chain, TEST_RIGHT if the
+         * needle is located later in the entry array chain and TEST_FOUND if the object matches the needle.
+         * If test_object() returns TEST_FOUND for a specific object, that object's information will be used
+         * to populate the return values of this function. If test_object() never returns TEST_FOUND, the
+         * return values are populated with the details of one of the objects closest to the needle. If the
+         * direction is DIRECTION_UP, the earlier object is used. Otherwise, the later object is used.
+         */
+
         uint64_t a, p, t = 0, i = 0, last_p = 0, last_index = UINT64_MAX;
         bool subtract_one = false;
-        Object *o, *array = NULL;
-        int r;
+        Object *array = NULL;
         ChainCacheItem *ci;
+        int r;
 
         assert(f);
         assert(test_object);
@@ -2393,13 +2724,13 @@
                 if (r < 0)
                         return r;
 
-                k = journal_file_entry_array_n_items(array);
+                k = journal_file_entry_array_n_items(f, array);
                 right = MIN(k, n);
                 if (right <= 0)
                         return 0;
 
                 i = right - 1;
-                lp = p = le64toh(array->entry_array.items[i]);
+                lp = p = journal_file_entry_array_item(f, array, i);
                 if (p <= 0)
                         r = -EBADMSG;
                 else
@@ -2432,7 +2763,7 @@
                                 if (last_index > 0) {
                                         uint64_t x = last_index - 1;
 
-                                        p = le64toh(array->entry_array.items[x]);
+                                        p = journal_file_entry_array_item(f, array, x);
                                         if (p <= 0)
                                                 return -EBADMSG;
 
@@ -2452,7 +2783,7 @@
                                 if (last_index < right) {
                                         uint64_t y = last_index + 1;
 
-                                        p = le64toh(array->entry_array.items[y]);
+                                        p = journal_file_entry_array_item(f, array, y);
                                         if (p <= 0)
                                                 return -EBADMSG;
 
@@ -2482,7 +2813,7 @@
                                 assert(left < right);
                                 i = (left + right) / 2;
 
-                                p = le64toh(array->entry_array.items[i]);
+                                p = journal_file_entry_array_item(f, array, i);
                                 if (p <= 0)
                                         r = -EBADMSG;
                                 else
@@ -2530,21 +2861,20 @@
                 return 0;
 
         /* Let's cache this item for the next invocation */
-        chain_cache_put(f->chain_cache, ci, first, a, le64toh(array->entry_array.items[0]), t, subtract_one ? (i > 0 ? i-1 : UINT64_MAX) : i);
+        chain_cache_put(f->chain_cache, ci, first, a, journal_file_entry_array_item(f, array, 0), t, subtract_one ? (i > 0 ? i-1 : UINT64_MAX) : i);
 
         if (subtract_one && i == 0)
                 p = last_p;
         else if (subtract_one)
-                p = le64toh(array->entry_array.items[i-1]);
+                p = journal_file_entry_array_item(f, array, i - 1);
         else
-                p = le64toh(array->entry_array.items[i]);
+                p = journal_file_entry_array_item(f, array, i);
 
-        r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o);
-        if (r < 0)
-                return r;
-
-        if (ret)
-                *ret = o;
+        if (ret_object) {
+                r = journal_file_move_to_object(f, OBJECT_ENTRY, p, ret_object);
+                if (r < 0)
+                        return r;
+        }
 
         if (ret_offset)
                 *ret_offset = p;
@@ -2563,13 +2893,12 @@
                 uint64_t needle,
                 int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
                 direction_t direction,
-                Object **ret,
+                Object **ret_object,
                 uint64_t *ret_offset,
                 uint64_t *ret_idx) {
 
         int r;
         bool step_back = false;
-        Object *o;
 
         assert(f);
         assert(test_object);
@@ -2601,7 +2930,7 @@
                         return 0;
         }
 
-        r = generic_array_bisect(f, first, n-1, needle, test_object, direction, ret, ret_offset, ret_idx);
+        r = generic_array_bisect(f, first, n-1, needle, test_object, direction, ret_object, ret_offset, ret_idx);
 
         if (r == 0 && step_back)
                 goto found;
@@ -2612,12 +2941,11 @@
         return r;
 
 found:
-        r = journal_file_move_to_object(f, OBJECT_ENTRY, extra, &o);
-        if (r < 0)
-                return r;
-
-        if (ret)
-                *ret = o;
+        if (ret_object) {
+                r = journal_file_move_to_object(f, OBJECT_ENTRY, extra, ret_object);
+                if (r < 0)
+                        return r;
+        }
 
         if (ret_offset)
                 *ret_offset = extra;
@@ -2640,6 +2968,26 @@
                 return TEST_RIGHT;
 }
 
+int journal_file_move_to_entry_by_offset(
+                JournalFile *f,
+                uint64_t p,
+                direction_t direction,
+                Object **ret_object,
+                uint64_t *ret_offset) {
+
+        assert(f);
+        assert(f->header);
+
+        return generic_array_bisect(
+                        f,
+                        le64toh(f->header->entry_array_offset),
+                        le64toh(f->header->n_entries),
+                        p,
+                        test_object_offset,
+                        direction,
+                        ret_object, ret_offset, NULL);
+}
+
 static int test_object_seqnum(JournalFile *f, uint64_t p, uint64_t needle) {
         uint64_t sq;
         Object *o;
@@ -2665,8 +3013,9 @@
                 JournalFile *f,
                 uint64_t seqnum,
                 direction_t direction,
-                Object **ret,
+                Object **ret_object,
                 uint64_t *ret_offset) {
+
         assert(f);
         assert(f->header);
 
@@ -2677,7 +3026,7 @@
                         seqnum,
                         test_object_seqnum,
                         direction,
-                        ret, ret_offset, NULL);
+                        ret_object, ret_offset, NULL);
 }
 
 static int test_object_realtime(JournalFile *f, uint64_t p, uint64_t needle) {
@@ -2705,8 +3054,9 @@
                 JournalFile *f,
                 uint64_t realtime,
                 direction_t direction,
-                Object **ret,
+                Object **ret_object,
                 uint64_t *ret_offset) {
+
         assert(f);
         assert(f->header);
 
@@ -2717,7 +3067,7 @@
                         realtime,
                         test_object_realtime,
                         direction,
-                        ret, ret_offset, NULL);
+                        ret_object, ret_offset, NULL);
 }
 
 static int test_object_monotonic(JournalFile *f, uint64_t p, uint64_t needle) {
@@ -2744,13 +3094,15 @@
 static int find_data_object_by_boot_id(
                 JournalFile *f,
                 sd_id128_t boot_id,
-                Object **o,
-                uint64_t *b) {
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
         char t[STRLEN("_BOOT_ID=") + 32 + 1] = "_BOOT_ID=";
 
+        assert(f);
+
         sd_id128_to_string(boot_id, t + 9);
-        return journal_file_find_data_object(f, t, sizeof(t) - 1, o, b);
+        return journal_file_find_data_object(f, t, sizeof(t) - 1, ret_object, ret_offset);
 }
 
 int journal_file_move_to_entry_by_monotonic(
@@ -2758,7 +3110,7 @@
                 sd_id128_t boot_id,
                 uint64_t monotonic,
                 direction_t direction,
-                Object **ret,
+                Object **ret_object,
                 uint64_t *ret_offset) {
 
         Object *o;
@@ -2780,10 +3132,12 @@
                         monotonic,
                         test_object_monotonic,
                         direction,
-                        ret, ret_offset, NULL);
+                        ret_object, ret_offset, NULL);
 }
 
 void journal_file_reset_location(JournalFile *f) {
+        assert(f);
+
         f->location_type = LOCATION_HEAD;
         f->current_offset = 0;
         f->current_seqnum = 0;
@@ -2794,6 +3148,9 @@
 }
 
 void journal_file_save_location(JournalFile *f, Object *o, uint64_t offset) {
+        assert(f);
+        assert(o);
+
         f->location_type = LOCATION_SEEK;
         f->current_offset = offset;
         f->current_seqnum = le64toh(o->entry.seqnum);
@@ -2853,25 +3210,6 @@
         return CMP(af->current_xor_hash, bf->current_xor_hash);
 }
 
-static int bump_array_index(uint64_t *i, direction_t direction, uint64_t n) {
-
-        /* Increase or decrease the specified index, in the right direction. */
-
-        if (direction == DIRECTION_DOWN) {
-                if (*i >= n - 1)
-                        return 0;
-
-                (*i) ++;
-        } else {
-                if (*i <= 0)
-                        return 0;
-
-                (*i) --;
-        }
-
-        return 1;
-}
-
 static bool check_properly_ordered(uint64_t new_offset, uint64_t old_offset, direction_t direction) {
 
         /* Consider it an error if any of the two offsets is uninitialized */
@@ -2888,7 +3226,8 @@
                 JournalFile *f,
                 uint64_t p,
                 direction_t direction,
-                Object **ret, uint64_t *ret_offset) {
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
         uint64_t i, n, ofs;
         int r;
@@ -2896,6 +3235,8 @@
         assert(f);
         assert(f->header);
 
+        /* FIXME: fix return value assignment. */
+
         n = le64toh(READ_NOW(f->header->n_entries));
         if (n <= 0)
                 return 0;
@@ -2920,24 +3261,9 @@
         }
 
         /* And jump to it */
-        for (;;) {
-                r = generic_array_get(f,
-                                      le64toh(f->header->entry_array_offset),
-                                      i,
-                                      ret, &ofs);
-                if (r > 0)
-                        break;
-                if (r != -EBADMSG)
-                        return r;
-
-                /* OK, so this entry is borked. Most likely some entry didn't get synced to disk properly, let's see if
-                 * the next one might work for us instead. */
-                log_debug_errno(r, "Entry item %" PRIu64 " is bad, skipping over it.", i);
-
-                r = bump_array_index(&i, direction, n);
-                if (r <= 0)
-                        return r;
-        }
+        r = generic_array_get(f, le64toh(f->header->entry_array_offset), i, direction, ret_object, &ofs);
+        if (r <= 0)
+                return r;
 
         /* Ensure our array is properly ordered. */
         if (p > 0 && !check_properly_ordered(ofs, p, direction))
@@ -2953,73 +3279,34 @@
 
 int journal_file_next_entry_for_data(
                 JournalFile *f,
-                Object *o, uint64_t p,
-                uint64_t data_offset,
+                Object *d,
                 direction_t direction,
-                Object **ret, uint64_t *ret_offset) {
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
         uint64_t i, n, ofs;
-        Object *d;
         int r;
 
         assert(f);
-        assert(p > 0 || !o);
+        assert(d);
+        assert(d->object.type == OBJECT_DATA);
 
-        r = journal_file_move_to_object(f, OBJECT_DATA, data_offset, &d);
-        if (r < 0)
-                return r;
+        /* FIXME: fix return value assignment. */
 
         n = le64toh(READ_NOW(d->data.n_entries));
         if (n <= 0)
                 return n;
 
-        if (!o)
-                i = direction == DIRECTION_DOWN ? 0 : n - 1;
-        else {
-                if (o->object.type != OBJECT_ENTRY)
-                        return -EINVAL;
+        i = direction == DIRECTION_DOWN ? 0 : n - 1;
 
-                r = generic_array_bisect_plus_one(f,
-                                                  le64toh(d->data.entry_offset),
-                                                  le64toh(d->data.entry_array_offset),
-                                                  le64toh(d->data.n_entries),
-                                                  p,
-                                                  test_object_offset,
-                                                  DIRECTION_DOWN,
-                                                  NULL, NULL,
-                                                  &i);
-
-                if (r <= 0)
-                        return r;
-
-                r = bump_array_index(&i, direction, n);
-                if (r <= 0)
-                        return r;
-        }
-
-        for (;;) {
-                r = generic_array_get_plus_one(f,
-                                               le64toh(d->data.entry_offset),
-                                               le64toh(d->data.entry_array_offset),
-                                               i,
-                                               ret, &ofs);
-                if (r > 0)
-                        break;
-                if (r != -EBADMSG)
-                        return r;
-
-                log_debug_errno(r, "Data entry item %" PRIu64 " is bad, skipping over it.", i);
-
-                r = bump_array_index(&i, direction, n);
-                if (r <= 0)
-                        return r;
-        }
-
-        /* Ensure our array is properly ordered. */
-        if (p > 0 && check_properly_ordered(ofs, p, direction))
-                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "%s data entry array not properly ordered at entry %" PRIu64,
-                                       f->path, i);
+        r = generic_array_get_plus_one(f,
+                                       le64toh(d->data.entry_offset),
+                                       le64toh(d->data.entry_array_offset),
+                                       i,
+                                       direction,
+                                       ret_object, &ofs);
+        if (r <= 0)
+                return r;
 
         if (ret_offset)
                 *ret_offset = ofs;
@@ -3029,19 +3316,14 @@
 
 int journal_file_move_to_entry_by_offset_for_data(
                 JournalFile *f,
-                uint64_t data_offset,
+                Object *d,
                 uint64_t p,
                 direction_t direction,
                 Object **ret, uint64_t *ret_offset) {
 
-        int r;
-        Object *d;
-
         assert(f);
-
-        r = journal_file_move_to_object(f, OBJECT_DATA, data_offset, &d);
-        if (r < 0)
-                return r;
+        assert(d);
+        assert(d->object.type == OBJECT_DATA);
 
         return generic_array_bisect_plus_one(
                         f,
@@ -3056,17 +3338,25 @@
 
 int journal_file_move_to_entry_by_monotonic_for_data(
                 JournalFile *f,
-                uint64_t data_offset,
+                Object *d,
                 sd_id128_t boot_id,
                 uint64_t monotonic,
                 direction_t direction,
-                Object **ret, uint64_t *ret_offset) {
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
-        Object *o, *d;
+        uint64_t b, z, entry_offset, entry_array_offset, n_entries;
+        Object *o;
         int r;
-        uint64_t b, z;
 
         assert(f);
+        assert(d);
+        assert(d->object.type == OBJECT_DATA);
+
+        /* Save all the required data before the data object gets invalidated. */
+        entry_offset = le64toh(READ_NOW(d->data.entry_offset));
+        entry_array_offset = le64toh(READ_NOW(d->data.entry_array_offset));
+        n_entries = le64toh(READ_NOW(d->data.n_entries));
 
         /* First, seek by time */
         r = find_data_object_by_boot_id(f, boot_id, &o, &b);
@@ -3089,18 +3379,17 @@
         /* And now, continue seeking until we find an entry that
          * exists in both bisection arrays */
 
+        r = journal_file_move_to_object(f, OBJECT_DATA, b, &o);
+        if (r < 0)
+                return r;
+
         for (;;) {
-                Object *qo;
                 uint64_t p, q;
 
-                r = journal_file_move_to_object(f, OBJECT_DATA, data_offset, &d);
-                if (r < 0)
-                        return r;
-
                 r = generic_array_bisect_plus_one(f,
-                                                  le64toh(d->data.entry_offset),
-                                                  le64toh(d->data.entry_array_offset),
-                                                  le64toh(d->data.n_entries),
+                                                  entry_offset,
+                                                  entry_array_offset,
+                                                  n_entries,
                                                   z,
                                                   test_object_offset,
                                                   direction,
@@ -3108,10 +3397,6 @@
                 if (r <= 0)
                         return r;
 
-                r = journal_file_move_to_object(f, OBJECT_DATA, b, &o);
-                if (r < 0)
-                        return r;
-
                 r = generic_array_bisect_plus_one(f,
                                                   le64toh(o->data.entry_offset),
                                                   le64toh(o->data.entry_array_offset),
@@ -3119,14 +3404,18 @@
                                                   p,
                                                   test_object_offset,
                                                   direction,
-                                                  &qo, &q, NULL);
+                                                  NULL, &q, NULL);
 
                 if (r <= 0)
                         return r;
 
                 if (p == q) {
-                        if (ret)
-                                *ret = qo;
+                        if (ret_object) {
+                                r = journal_file_move_to_object(f, OBJECT_ENTRY, q, ret_object);
+                                if (r < 0)
+                                        return r;
+                        }
+
                         if (ret_offset)
                                 *ret_offset = q;
 
@@ -3139,19 +3428,15 @@
 
 int journal_file_move_to_entry_by_seqnum_for_data(
                 JournalFile *f,
-                uint64_t data_offset,
+                Object *d,
                 uint64_t seqnum,
                 direction_t direction,
-                Object **ret, uint64_t *ret_offset) {
-
-        Object *d;
-        int r;
+                Object **ret_object,
+                uint64_t *ret_offset) {
 
         assert(f);
-
-        r = journal_file_move_to_object(f, OBJECT_DATA, data_offset, &d);
-        if (r < 0)
-                return r;
+        assert(d);
+        assert(d->object.type == OBJECT_DATA);
 
         return generic_array_bisect_plus_one(
                         f,
@@ -3161,24 +3446,19 @@
                         seqnum,
                         test_object_seqnum,
                         direction,
-                        ret, ret_offset, NULL);
+                        ret_object, ret_offset, NULL);
 }
 
 int journal_file_move_to_entry_by_realtime_for_data(
                 JournalFile *f,
-                uint64_t data_offset,
+                Object *d,
                 uint64_t realtime,
                 direction_t direction,
                 Object **ret, uint64_t *ret_offset) {
 
-        Object *d;
-        int r;
-
         assert(f);
-
-        r = journal_file_move_to_object(f, OBJECT_DATA, data_offset, &d);
-        if (r < 0)
-                return r;
+        assert(d);
+        assert(d->object.type == OBJECT_DATA);
 
         return generic_array_bisect_plus_one(
                         f,
@@ -3193,8 +3473,8 @@
 
 void journal_file_dump(JournalFile *f) {
         Object *o;
-        int r;
         uint64_t p;
+        int r;
 
         assert(f);
         assert(f->header);
@@ -3203,57 +3483,49 @@
 
         p = le64toh(READ_NOW(f->header->header_size));
         while (p != 0) {
+                const char *s;
+                Compression c;
+
                 r = journal_file_move_to_object(f, OBJECT_UNUSED, p, &o);
                 if (r < 0)
                         goto fail;
 
+                s = journal_object_type_to_string(o->object.type);
+
                 switch (o->object.type) {
 
-                case OBJECT_UNUSED:
-                        printf("Type: OBJECT_UNUSED\n");
-                        break;
-
-                case OBJECT_DATA:
-                        printf("Type: OBJECT_DATA\n");
-                        break;
-
-                case OBJECT_FIELD:
-                        printf("Type: OBJECT_FIELD\n");
-                        break;
-
                 case OBJECT_ENTRY:
-                        printf("Type: OBJECT_ENTRY seqnum=%"PRIu64" monotonic=%"PRIu64" realtime=%"PRIu64"\n",
+                        assert(s);
+
+                        printf("Type: %s seqnum=%"PRIu64" monotonic=%"PRIu64" realtime=%"PRIu64"\n",
+                               s,
                                le64toh(o->entry.seqnum),
                                le64toh(o->entry.monotonic),
                                le64toh(o->entry.realtime));
                         break;
 
-                case OBJECT_FIELD_HASH_TABLE:
-                        printf("Type: OBJECT_FIELD_HASH_TABLE\n");
-                        break;
-
-                case OBJECT_DATA_HASH_TABLE:
-                        printf("Type: OBJECT_DATA_HASH_TABLE\n");
-                        break;
-
-                case OBJECT_ENTRY_ARRAY:
-                        printf("Type: OBJECT_ENTRY_ARRAY\n");
-                        break;
-
                 case OBJECT_TAG:
-                        printf("Type: OBJECT_TAG seqnum=%"PRIu64" epoch=%"PRIu64"\n",
+                        assert(s);
+
+                        printf("Type: %s seqnum=%"PRIu64" epoch=%"PRIu64"\n",
+                               s,
                                le64toh(o->tag.seqnum),
                                le64toh(o->tag.epoch));
                         break;
 
                 default:
-                        printf("Type: unknown (%i)\n", o->object.type);
+                        if (s)
+                                printf("Type: %s \n", s);
+                        else
+                                printf("Type: unknown (%i)", o->object.type);
+
                         break;
                 }
 
-                if (o->object.flags & OBJECT_COMPRESSION_MASK)
+                c = COMPRESSION_FROM_OBJECT(o);
+                if (c > COMPRESSION_NONE)
                         printf("Flags: %s\n",
-                               object_compressed_to_string(o->object.flags & OBJECT_COMPRESSION_MASK));
+                               compression_to_string(c));
 
                 if (p == le64toh(f->header->tail_object_offset))
                         p = 0;
@@ -3266,20 +3538,11 @@
         log_error("File corrupt");
 }
 
-static const char* format_timestamp_safe(char *buf, size_t l, usec_t t) {
-        const char *x;
-
-        x = format_timestamp(buf, l, t);
-        if (x)
-                return x;
-        return " --- ";
-}
+/* Note: the lifetime of the compound literal is the immediately surrounding block. */
+#define FORMAT_TIMESTAMP_SAFE(t) (FORMAT_TIMESTAMP(t) ?: " --- ")
 
 void journal_file_print_header(JournalFile *f) {
-        char a[SD_ID128_STRING_MAX], b[SD_ID128_STRING_MAX], c[SD_ID128_STRING_MAX], d[SD_ID128_STRING_MAX];
-        char x[FORMAT_TIMESTAMP_MAX], y[FORMAT_TIMESTAMP_MAX], z[FORMAT_TIMESTAMP_MAX];
         struct stat st;
-        char bytes[FORMAT_BYTES_MAX];
 
         assert(f);
         assert(f->header);
@@ -3291,7 +3554,7 @@
                "Sequential number ID: %s\n"
                "State: %s\n"
                "Compatible flags:%s%s\n"
-               "Incompatible flags:%s%s%s%s%s\n"
+               "Incompatible flags:%s%s%s%s%s%s\n"
                "Header size: %"PRIu64"\n"
                "Arena size: %"PRIu64"\n"
                "Data hash table size: %"PRIu64"\n"
@@ -3305,10 +3568,10 @@
                "Objects: %"PRIu64"\n"
                "Entry objects: %"PRIu64"\n",
                f->path,
-               sd_id128_to_string(f->header->file_id, a),
-               sd_id128_to_string(f->header->machine_id, b),
-               sd_id128_to_string(f->header->boot_id, c),
-               sd_id128_to_string(f->header->seqnum_id, d),
+               SD_ID128_TO_STRING(f->header->file_id),
+               SD_ID128_TO_STRING(f->header->machine_id),
+               SD_ID128_TO_STRING(f->header->boot_id),
+               SD_ID128_TO_STRING(f->header->seqnum_id),
                f->header->state == STATE_OFFLINE ? "OFFLINE" :
                f->header->state == STATE_ONLINE ? "ONLINE" :
                f->header->state == STATE_ARCHIVED ? "ARCHIVED" : "UNKNOWN",
@@ -3318,17 +3581,18 @@
                JOURNAL_HEADER_COMPRESSED_LZ4(f->header) ? " COMPRESSED-LZ4" : "",
                JOURNAL_HEADER_COMPRESSED_ZSTD(f->header) ? " COMPRESSED-ZSTD" : "",
                JOURNAL_HEADER_KEYED_HASH(f->header) ? " KEYED-HASH" : "",
+               JOURNAL_HEADER_COMPACT(f->header) ? " COMPACT" : "",
                (le32toh(f->header->incompatible_flags) & ~HEADER_INCOMPATIBLE_ANY) ? " ???" : "",
                le64toh(f->header->header_size),
                le64toh(f->header->arena_size),
                le64toh(f->header->data_hash_table_size) / sizeof(HashItem),
                le64toh(f->header->field_hash_table_size) / sizeof(HashItem),
-               yes_no(journal_file_rotate_suggested(f, 0)),
+               yes_no(journal_file_rotate_suggested(f, 0, LOG_DEBUG)),
                le64toh(f->header->head_entry_seqnum), le64toh(f->header->head_entry_seqnum),
                le64toh(f->header->tail_entry_seqnum), le64toh(f->header->tail_entry_seqnum),
-               format_timestamp_safe(x, sizeof(x), le64toh(f->header->head_entry_realtime)), le64toh(f->header->head_entry_realtime),
-               format_timestamp_safe(y, sizeof(y), le64toh(f->header->tail_entry_realtime)), le64toh(f->header->tail_entry_realtime),
-               format_timespan(z, sizeof(z), le64toh(f->header->tail_entry_monotonic), USEC_PER_MSEC), le64toh(f->header->tail_entry_monotonic),
+               FORMAT_TIMESTAMP_SAFE(le64toh(f->header->head_entry_realtime)), le64toh(f->header->head_entry_realtime),
+               FORMAT_TIMESTAMP_SAFE(le64toh(f->header->tail_entry_realtime)), le64toh(f->header->tail_entry_realtime),
+               FORMAT_TIMESPAN(le64toh(f->header->tail_entry_monotonic), USEC_PER_MSEC), le64toh(f->header->tail_entry_monotonic),
                le64toh(f->header->n_objects),
                le64toh(f->header->n_entries));
 
@@ -3360,7 +3624,7 @@
                        f->header->data_hash_chain_depth);
 
         if (fstat(f->fd, &st) >= 0)
-                printf("Disk usage: %s\n", format_bytes(bytes, sizeof(bytes), (uint64_t) st.st_blocks * 512ULL));
+                printf("Disk usage: %s\n", FORMAT_BYTES((uint64_t) st.st_blocks * 512ULL));
 }
 
 static int journal_file_warn_btrfs(JournalFile *f) {
@@ -3378,603 +3642,29 @@
 
         r = fd_is_fs_type(f->fd, BTRFS_SUPER_MAGIC);
         if (r < 0)
-                return log_warning_errno(r, "Failed to determine if journal is on btrfs: %m");
+                return log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT, "Failed to determine if journal is on btrfs: %m");
         if (!r)
                 return 0;
 
         r = read_attr_fd(f->fd, &attrs);
         if (r < 0)
-                return log_warning_errno(r, "Failed to read file attributes: %m");
+                return log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT, "Failed to read file attributes: %m");
 
         if (attrs & FS_NOCOW_FL) {
                 log_debug("Detected btrfs file system with copy-on-write disabled, all is good.");
                 return 0;
         }
 
-        log_notice("Creating journal file %s on a btrfs file system, and copy-on-write is enabled. "
-                   "This is likely to slow down journal access substantially, please consider turning "
-                   "off the copy-on-write file attribute on the journal directory, using chattr +C.", f->path);
+        log_ratelimit_notice(JOURNAL_LOG_RATELIMIT,
+                             "Creating journal file %s on a btrfs file system, and copy-on-write is enabled. "
+                             "This is likely to slow down journal access substantially, please consider turning "
+                             "off the copy-on-write file attribute on the journal directory, using chattr +C.",
+                             f->path);
 
         return 1;
 }
 
-int journal_file_open(
-                int fd,
-                const char *fname,
-                int flags,
-                mode_t mode,
-                bool compress,
-                uint64_t compress_threshold_bytes,
-                bool seal,
-                JournalMetrics *metrics,
-                MMapCache *mmap_cache,
-                Set *deferred_closes,
-                JournalFile *template,
-                JournalFile **ret) {
-
-        bool newly_created = false;
-        JournalFile *f;
-        void *h;
-        int r;
-
-        assert(ret);
-        assert(fd >= 0 || fname);
-
-        if (!IN_SET((flags & O_ACCMODE), O_RDONLY, O_RDWR))
-                return -EINVAL;
-
-        if (fname && (flags & O_CREAT) && !endswith(fname, ".journal"))
-                return -EINVAL;
-
-        f = new(JournalFile, 1);
-        if (!f)
-                return -ENOMEM;
-
-        *f = (JournalFile) {
-                .fd = fd,
-                .mode = mode,
-
-                .flags = flags,
-                .writable = (flags & O_ACCMODE) != O_RDONLY,
-
-#if HAVE_ZSTD
-                .compress_zstd = compress,
-#elif HAVE_LZ4
-                .compress_lz4 = compress,
-#elif HAVE_XZ
-                .compress_xz = compress,
-#endif
-                .compress_threshold_bytes = compress_threshold_bytes == UINT64_MAX ?
-                                            DEFAULT_COMPRESS_THRESHOLD :
-                                            MAX(MIN_COMPRESS_THRESHOLD, compress_threshold_bytes),
-#if HAVE_GCRYPT
-                .seal = seal,
-#endif
-        };
-
-        /* We turn on keyed hashes by default, but provide an environment variable to turn them off, if
-         * people really want that */
-        r = getenv_bool("SYSTEMD_JOURNAL_KEYED_HASH");
-        if (r < 0) {
-                if (r != -ENXIO)
-                        log_debug_errno(r, "Failed to parse $SYSTEMD_JOURNAL_KEYED_HASH environment variable, ignoring.");
-                f->keyed_hash = true;
-        } else
-                f->keyed_hash = r;
-
-        if (DEBUG_LOGGING) {
-                static int last_seal = -1, last_compress = -1, last_keyed_hash = -1;
-                static uint64_t last_bytes = UINT64_MAX;
-                char bytes[FORMAT_BYTES_MAX];
-
-                if (last_seal != f->seal ||
-                    last_keyed_hash != f->keyed_hash ||
-                    last_compress != JOURNAL_FILE_COMPRESS(f) ||
-                    last_bytes != f->compress_threshold_bytes) {
-
-                        log_debug("Journal effective settings seal=%s keyed_hash=%s compress=%s compress_threshold_bytes=%s",
-                                  yes_no(f->seal), yes_no(f->keyed_hash), yes_no(JOURNAL_FILE_COMPRESS(f)),
-                                  format_bytes(bytes, sizeof bytes, f->compress_threshold_bytes));
-                        last_seal = f->seal;
-                        last_keyed_hash = f->keyed_hash;
-                        last_compress = JOURNAL_FILE_COMPRESS(f);
-                        last_bytes = f->compress_threshold_bytes;
-                }
-        }
-
-        if (mmap_cache)
-                f->mmap = mmap_cache_ref(mmap_cache);
-        else {
-                f->mmap = mmap_cache_new();
-                if (!f->mmap) {
-                        r = -ENOMEM;
-                        goto fail;
-                }
-        }
-
-        if (fname) {
-                f->path = strdup(fname);
-                if (!f->path) {
-                        r = -ENOMEM;
-                        goto fail;
-                }
-        } else {
-                assert(fd >= 0);
-
-                /* If we don't know the path, fill in something explanatory and vaguely useful */
-                if (asprintf(&f->path, "/proc/self/%i", fd) < 0) {
-                        r = -ENOMEM;
-                        goto fail;
-                }
-        }
-
-        f->chain_cache = ordered_hashmap_new(&uint64_hash_ops);
-        if (!f->chain_cache) {
-                r = -ENOMEM;
-                goto fail;
-        }
-
-        if (f->fd < 0) {
-                /* We pass O_NONBLOCK here, so that in case somebody pointed us to some character device node or FIFO
-                 * or so, we likely fail quickly than block for long. For regular files O_NONBLOCK has no effect, hence
-                 * it doesn't hurt in that case. */
-
-                f->fd = open(f->path, f->flags|O_CLOEXEC|O_NONBLOCK, f->mode);
-                if (f->fd < 0) {
-                        r = -errno;
-                        goto fail;
-                }
-
-                /* fds we opened here by us should also be closed by us. */
-                f->close_fd = true;
-
-                r = fd_nonblock(f->fd, false);
-                if (r < 0)
-                        goto fail;
-        }
-
-        f->cache_fd = mmap_cache_add_fd(f->mmap, f->fd, prot_from_flags(flags));
-        if (!f->cache_fd) {
-                r = -ENOMEM;
-                goto fail;
-        }
-
-        r = journal_file_fstat(f);
-        if (r < 0)
-                goto fail;
-
-        if (f->last_stat.st_size == 0 && f->writable) {
-
-                (void) journal_file_warn_btrfs(f);
-
-                /* Let's attach the creation time to the journal file, so that the vacuuming code knows the age of this
-                 * file even if the file might end up corrupted one day... Ideally we'd just use the creation time many
-                 * file systems maintain for each file, but the API to query this is very new, hence let's emulate this
-                 * via extended attributes. If extended attributes are not supported we'll just skip this, and rely
-                 * solely on mtime/atime/ctime of the file. */
-                (void) fd_setcrtime(f->fd, 0);
-
-#if HAVE_GCRYPT
-                /* Try to load the FSPRG state, and if we can't, then
-                 * just don't do sealing */
-                if (f->seal) {
-                        r = journal_file_fss_load(f);
-                        if (r < 0)
-                                f->seal = false;
-                }
-#endif
-
-                r = journal_file_init_header(f, template);
-                if (r < 0)
-                        goto fail;
-
-                r = journal_file_fstat(f);
-                if (r < 0)
-                        goto fail;
-
-                newly_created = true;
-        }
-
-        if (f->last_stat.st_size < (off_t) HEADER_SIZE_MIN) {
-                r = -ENODATA;
-                goto fail;
-        }
-
-        r = mmap_cache_get(f->mmap, f->cache_fd, CONTEXT_HEADER, true, 0, PAGE_ALIGN(sizeof(Header)), &f->last_stat, &h);
-        if (r == -EINVAL) {
-                /* Some file systems (jffs2 or p9fs) don't support mmap() properly (or only read-only
-                 * mmap()), and return EINVAL in that case. Let's propagate that as a more recognizable error
-                 * code. */
-                r = -EAFNOSUPPORT;
-                goto fail;
-        }
-        if (r < 0)
-                goto fail;
-
-        f->header = h;
-
-        if (!newly_created) {
-                set_clear_with_destructor(deferred_closes, journal_file_close);
-
-                r = journal_file_verify_header(f);
-                if (r < 0)
-                        goto fail;
-        }
-
-#if HAVE_GCRYPT
-        if (!newly_created && f->writable) {
-                r = journal_file_fss_load(f);
-                if (r < 0)
-                        goto fail;
-        }
-#endif
-
-        if (f->writable) {
-                if (metrics) {
-                        journal_default_metrics(metrics, f->fd);
-                        f->metrics = *metrics;
-                } else if (template)
-                        f->metrics = template->metrics;
-
-                r = journal_file_refresh_header(f);
-                if (r < 0)
-                        goto fail;
-        }
-
-#if HAVE_GCRYPT
-        r = journal_file_hmac_setup(f);
-        if (r < 0)
-                goto fail;
-#endif
-
-        if (newly_created) {
-                r = journal_file_setup_field_hash_table(f);
-                if (r < 0)
-                        goto fail;
-
-                r = journal_file_setup_data_hash_table(f);
-                if (r < 0)
-                        goto fail;
-
-#if HAVE_GCRYPT
-                r = journal_file_append_first_tag(f);
-                if (r < 0)
-                        goto fail;
-#endif
-        }
-
-        if (mmap_cache_got_sigbus(f->mmap, f->cache_fd)) {
-                r = -EIO;
-                goto fail;
-        }
-
-        if (template && template->post_change_timer) {
-                r = journal_file_enable_post_change_timer(
-                                f,
-                                sd_event_source_get_event(template->post_change_timer),
-                                template->post_change_timer_period);
-
-                if (r < 0)
-                        goto fail;
-        }
-
-        /* The file is opened now successfully, thus we take possession of any passed in fd. */
-        f->close_fd = true;
-
-        *ret = f;
-        return 0;
-
-fail:
-        if (f->cache_fd && mmap_cache_got_sigbus(f->mmap, f->cache_fd))
-                r = -EIO;
-
-        (void) journal_file_close(f);
-
-        return r;
-}
-
-int journal_file_archive(JournalFile *f) {
-        _cleanup_free_ char *p = NULL;
-
-        assert(f);
-
-        if (!f->writable)
-                return -EINVAL;
-
-        /* Is this a journal file that was passed to us as fd? If so, we synthesized a path name for it, and we refuse
-         * rotation, since we don't know the actual path, and couldn't rename the file hence. */
-        if (path_startswith(f->path, "/proc/self/fd"))
-                return -EINVAL;
-
-        if (!endswith(f->path, ".journal"))
-                return -EINVAL;
-
-        if (asprintf(&p, "%.*s@" SD_ID128_FORMAT_STR "-%016"PRIx64"-%016"PRIx64".journal",
-                     (int) strlen(f->path) - 8, f->path,
-                     SD_ID128_FORMAT_VAL(f->header->seqnum_id),
-                     le64toh(f->header->head_entry_seqnum),
-                     le64toh(f->header->head_entry_realtime)) < 0)
-                return -ENOMEM;
-
-        /* Try to rename the file to the archived version. If the file already was deleted, we'll get ENOENT, let's
-         * ignore that case. */
-        if (rename(f->path, p) < 0 && errno != ENOENT)
-                return -errno;
-
-        /* Sync the rename to disk */
-        (void) fsync_directory_of_file(f->fd);
-
-        /* Set as archive so offlining commits w/state=STATE_ARCHIVED. Previously we would set old_file->header->state
-         * to STATE_ARCHIVED directly here, but journal_file_set_offline() short-circuits when state != STATE_ONLINE,
-         * which would result in the rotated journal never getting fsync() called before closing.  Now we simply queue
-         * the archive state by setting an archive bit, leaving the state as STATE_ONLINE so proper offlining
-         * occurs. */
-        f->archive = true;
-
-        /* Currently, btrfs is not very good with out write patterns and fragments heavily. Let's defrag our journal
-         * files when we archive them */
-        f->defrag_on_close = true;
-
-        return 0;
-}
-
-JournalFile* journal_initiate_close(
-                JournalFile *f,
-                Set *deferred_closes) {
-
-        int r;
-
-        assert(f);
-
-        if (deferred_closes) {
-
-                r = set_put(deferred_closes, f);
-                if (r < 0)
-                        log_debug_errno(r, "Failed to add file to deferred close set, closing immediately.");
-                else {
-                        (void) journal_file_set_offline(f, false);
-                        return NULL;
-                }
-        }
-
-        return journal_file_close(f);
-}
-
-int journal_file_rotate(
-                JournalFile **f,
-                bool compress,
-                uint64_t compress_threshold_bytes,
-                bool seal,
-                Set *deferred_closes) {
-
-        JournalFile *new_file = NULL;
-        int r;
-
-        assert(f);
-        assert(*f);
-
-        r = journal_file_archive(*f);
-        if (r < 0)
-                return r;
-
-        r = journal_file_open(
-                        -1,
-                        (*f)->path,
-                        (*f)->flags,
-                        (*f)->mode,
-                        compress,
-                        compress_threshold_bytes,
-                        seal,
-                        NULL,            /* metrics */
-                        (*f)->mmap,
-                        deferred_closes,
-                        *f,              /* template */
-                        &new_file);
-
-        journal_initiate_close(*f, deferred_closes);
-        *f = new_file;
-
-        return r;
-}
-
-int journal_file_dispose(int dir_fd, const char *fname) {
-        _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
-
-        assert(fname);
-
-        /* Renames a journal file to *.journal~, i.e. to mark it as corrupted or otherwise uncleanly shutdown. Note that
-         * this is done without looking into the file or changing any of its contents. The idea is that this is called
-         * whenever something is suspicious and we want to move the file away and make clear that it is not accessed
-         * for writing anymore. */
-
-        if (!endswith(fname, ".journal"))
-                return -EINVAL;
-
-        if (asprintf(&p, "%.*s@%016" PRIx64 "-%016" PRIx64 ".journal~",
-                     (int) strlen(fname) - 8, fname,
-                     now(CLOCK_REALTIME),
-                     random_u64()) < 0)
-                return -ENOMEM;
-
-        if (renameat(dir_fd, fname, dir_fd, p) < 0)
-                return -errno;
-
-        /* btrfs doesn't cope well with our write pattern and fragments heavily. Let's defrag all files we rotate */
-        fd = openat(dir_fd, p, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
-        if (fd < 0)
-                log_debug_errno(errno, "Failed to open file for defragmentation/FS_NOCOW_FL, ignoring: %m");
-        else {
-                (void) chattr_fd(fd, 0, FS_NOCOW_FL, NULL);
-                (void) btrfs_defrag_fd(fd);
-        }
-
-        return 0;
-}
-
-int journal_file_open_reliably(
-                const char *fname,
-                int flags,
-                mode_t mode,
-                bool compress,
-                uint64_t compress_threshold_bytes,
-                bool seal,
-                JournalMetrics *metrics,
-                MMapCache *mmap_cache,
-                Set *deferred_closes,
-                JournalFile *template,
-                JournalFile **ret) {
-
-        int r;
-
-        r = journal_file_open(-1, fname, flags, mode, compress, compress_threshold_bytes, seal, metrics, mmap_cache,
-                              deferred_closes, template, ret);
-        if (!IN_SET(r,
-                    -EBADMSG,           /* Corrupted */
-                    -ENODATA,           /* Truncated */
-                    -EHOSTDOWN,         /* Other machine */
-                    -EPROTONOSUPPORT,   /* Incompatible feature */
-                    -EBUSY,             /* Unclean shutdown */
-                    -ESHUTDOWN,         /* Already archived */
-                    -EIO,               /* IO error, including SIGBUS on mmap */
-                    -EIDRM,             /* File has been deleted */
-                    -ETXTBSY))          /* File is from the future */
-                return r;
-
-        if ((flags & O_ACCMODE) == O_RDONLY)
-                return r;
-
-        if (!(flags & O_CREAT))
-                return r;
-
-        if (!endswith(fname, ".journal"))
-                return r;
-
-        /* The file is corrupted. Rotate it away and try it again (but only once) */
-        log_warning_errno(r, "File %s corrupted or uncleanly shut down, renaming and replacing.", fname);
-
-        r = journal_file_dispose(AT_FDCWD, fname);
-        if (r < 0)
-                return r;
-
-        return journal_file_open(-1, fname, flags, mode, compress, compress_threshold_bytes, seal, metrics, mmap_cache,
-                                 deferred_closes, template, ret);
-}
-
-int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint64_t p) {
-        uint64_t q, n, xor_hash = 0;
-        const sd_id128_t *boot_id;
-        dual_timestamp ts;
-        EntryItem *items;
-        int r;
-
-        assert(from);
-        assert(to);
-        assert(o);
-        assert(p);
-
-        if (!to->writable)
-                return -EPERM;
-
-        ts.monotonic = le64toh(o->entry.monotonic);
-        ts.realtime = le64toh(o->entry.realtime);
-        boot_id = &o->entry.boot_id;
-
-        n = journal_file_entry_n_items(o);
-        /* alloca() can't take 0, hence let's allocate at least one */
-        items = newa(EntryItem, MAX(1u, n));
-
-        for (uint64_t i = 0; i < n; i++) {
-                uint64_t l, h;
-                le64_t le_hash;
-                size_t t;
-                void *data;
-                Object *u;
-
-                q = le64toh(o->entry.items[i].object_offset);
-                le_hash = o->entry.items[i].hash;
-
-                r = journal_file_move_to_object(from, OBJECT_DATA, q, &o);
-                if (r < 0)
-                        return r;
-
-                if (le_hash != o->data.hash)
-                        return -EBADMSG;
-
-                l = le64toh(READ_NOW(o->object.size));
-                if (l < offsetof(Object, data.payload))
-                        return -EBADMSG;
-
-                l -= offsetof(Object, data.payload);
-                t = (size_t) l;
-
-                /* We hit the limit on 32bit machines */
-                if ((uint64_t) t != l)
-                        return -E2BIG;
-
-                if (o->object.flags & OBJECT_COMPRESSION_MASK) {
-#if HAVE_COMPRESSION
-                        size_t rsize = 0;
-
-                        r = decompress_blob(
-                                        o->object.flags & OBJECT_COMPRESSION_MASK,
-                                        o->data.payload, l,
-                                        &from->compress_buffer, &rsize,
-                                        0);
-                        if (r < 0)
-                                return r;
-
-                        data = from->compress_buffer;
-                        l = rsize;
-#else
-                        return -EPROTONOSUPPORT;
-#endif
-                } else
-                        data = o->data.payload;
-
-                r = journal_file_append_data(to, data, l, &u, &h);
-                if (r < 0)
-                        return r;
-
-                if (JOURNAL_HEADER_KEYED_HASH(to->header))
-                        xor_hash ^= jenkins_hash64(data, l);
-                else
-                        xor_hash ^= le64toh(u->data.hash);
-
-                items[i].object_offset = htole64(h);
-                items[i].hash = u->data.hash;
-
-                r = journal_file_move_to_object(from, OBJECT_ENTRY, p, &o);
-                if (r < 0)
-                        return r;
-        }
-
-        r = journal_file_append_entry_internal(to, &ts, boot_id, xor_hash, items, n,
-                                               NULL, NULL, NULL);
-
-        if (mmap_cache_got_sigbus(to->mmap, to->cache_fd))
-                return -EIO;
-
-        return r;
-}
-
-void journal_reset_metrics(JournalMetrics *m) {
-        assert(m);
-
-        /* Set everything to "pick automatic values". */
-
-        *m = (JournalMetrics) {
-                .min_use = UINT64_MAX,
-                .max_use = UINT64_MAX,
-                .min_size = UINT64_MAX,
-                .max_size = UINT64_MAX,
-                .keep_free = UINT64_MAX,
-                .n_max_files = UINT64_MAX,
-        };
-}
-
-void journal_default_metrics(JournalMetrics *m, int fd) {
-        char a[FORMAT_BYTES_MAX], b[FORMAT_BYTES_MAX], c[FORMAT_BYTES_MAX], d[FORMAT_BYTES_MAX], e[FORMAT_BYTES_MAX];
+static void journal_default_metrics(JournalMetrics *m, int fd, bool compact) {
         struct statvfs ss;
         uint64_t fs_size = 0;
 
@@ -4017,6 +3707,9 @@
         else
                 m->max_size = PAGE_ALIGN(m->max_size);
 
+        if (compact && m->max_size > JOURNAL_COMPACT_SIZE_MAX)
+                m->max_size = JOURNAL_COMPACT_SIZE_MAX;
+
         if (m->max_size != 0) {
                 if (m->max_size < JOURNAL_FILE_SIZE_MIN)
                         m->max_size = JOURNAL_FILE_SIZE_MIN;
@@ -4044,43 +3737,494 @@
                 m->n_max_files = DEFAULT_N_MAX_FILES;
 
         log_debug("Fixed min_use=%s max_use=%s max_size=%s min_size=%s keep_free=%s n_max_files=%" PRIu64,
-                  format_bytes(a, sizeof(a), m->min_use),
-                  format_bytes(b, sizeof(b), m->max_use),
-                  format_bytes(c, sizeof(c), m->max_size),
-                  format_bytes(d, sizeof(d), m->min_size),
-                  format_bytes(e, sizeof(e), m->keep_free),
+                  FORMAT_BYTES(m->min_use),
+                  FORMAT_BYTES(m->max_use),
+                  FORMAT_BYTES(m->max_size),
+                  FORMAT_BYTES(m->min_size),
+                  FORMAT_BYTES(m->keep_free),
                   m->n_max_files);
 }
 
-int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *to) {
+int journal_file_open(
+                int fd,
+                const char *fname,
+                int open_flags,
+                JournalFileFlags file_flags,
+                mode_t mode,
+                uint64_t compress_threshold_bytes,
+                JournalMetrics *metrics,
+                MMapCache *mmap_cache,
+                JournalFile *template,
+                JournalFile **ret) {
+
+        bool newly_created = false;
+        JournalFile *f;
+        void *h;
+        int r;
+
+        assert(fd >= 0 || fname);
+        assert(file_flags >= 0);
+        assert(file_flags <= _JOURNAL_FILE_FLAGS_MAX);
+        assert(mmap_cache);
+        assert(ret);
+
+        if (!IN_SET((open_flags & O_ACCMODE), O_RDONLY, O_RDWR))
+                return -EINVAL;
+
+        if ((open_flags & O_ACCMODE) == O_RDONLY && FLAGS_SET(open_flags, O_CREAT))
+                return -EINVAL;
+
+        if (fname && (open_flags & O_CREAT) && !endswith(fname, ".journal"))
+                return -EINVAL;
+
+        f = new(JournalFile, 1);
+        if (!f)
+                return -ENOMEM;
+
+        *f = (JournalFile) {
+                .fd = fd,
+                .mode = mode,
+                .open_flags = open_flags,
+                .compress_threshold_bytes = compress_threshold_bytes == UINT64_MAX ?
+                                            DEFAULT_COMPRESS_THRESHOLD :
+                                            MAX(MIN_COMPRESS_THRESHOLD, compress_threshold_bytes),
+                .strict_order = FLAGS_SET(file_flags, JOURNAL_STRICT_ORDER),
+        };
+
+        if (fname) {
+                f->path = strdup(fname);
+                if (!f->path) {
+                        r = -ENOMEM;
+                        goto fail;
+                }
+        } else {
+                assert(fd >= 0);
+
+                /* If we don't know the path, fill in something explanatory and vaguely useful */
+                if (asprintf(&f->path, "/proc/self/%i", fd) < 0) {
+                        r = -ENOMEM;
+                        goto fail;
+                }
+        }
+
+        f->chain_cache = ordered_hashmap_new(&uint64_hash_ops);
+        if (!f->chain_cache) {
+                r = -ENOMEM;
+                goto fail;
+        }
+
+        if (f->fd < 0) {
+                /* We pass O_NONBLOCK here, so that in case somebody pointed us to some character device node or FIFO
+                 * or so, we likely fail quickly than block for long. For regular files O_NONBLOCK has no effect, hence
+                 * it doesn't hurt in that case. */
+
+                f->fd = openat_report_new(AT_FDCWD, f->path, f->open_flags|O_CLOEXEC|O_NONBLOCK, f->mode, &newly_created);
+                if (f->fd < 0) {
+                        r = f->fd;
+                        goto fail;
+                }
+
+                /* fds we opened here by us should also be closed by us. */
+                f->close_fd = true;
+
+                r = fd_nonblock(f->fd, false);
+                if (r < 0)
+                        goto fail;
+
+                if (!newly_created) {
+                        r = journal_file_fstat(f);
+                        if (r < 0)
+                                goto fail;
+                }
+        } else {
+                r = journal_file_fstat(f);
+                if (r < 0)
+                        goto fail;
+
+                /* If we just got the fd passed in, we don't really know if we created the file anew */
+                newly_created = f->last_stat.st_size == 0 && journal_file_writable(f);
+        }
+
+        f->cache_fd = mmap_cache_add_fd(mmap_cache, f->fd, mmap_prot_from_open_flags(open_flags));
+        if (!f->cache_fd) {
+                r = -ENOMEM;
+                goto fail;
+        }
+
+        if (newly_created) {
+                (void) journal_file_warn_btrfs(f);
+
+                /* Let's attach the creation time to the journal file, so that the vacuuming code knows the age of this
+                 * file even if the file might end up corrupted one day... Ideally we'd just use the creation time many
+                 * file systems maintain for each file, but the API to query this is very new, hence let's emulate this
+                 * via extended attributes. If extended attributes are not supported we'll just skip this, and rely
+                 * solely on mtime/atime/ctime of the file. */
+                (void) fd_setcrtime(f->fd, 0);
+
+                r = journal_file_init_header(f, file_flags, template);
+                if (r < 0)
+                        goto fail;
+
+                r = journal_file_fstat(f);
+                if (r < 0)
+                        goto fail;
+        }
+
+        if (f->last_stat.st_size < (off_t) HEADER_SIZE_MIN) {
+                r = -ENODATA;
+                goto fail;
+        }
+
+        r = mmap_cache_fd_get(f->cache_fd, CONTEXT_HEADER, true, 0, PAGE_ALIGN(sizeof(Header)), &f->last_stat, &h);
+        if (r == -EINVAL) {
+                /* Some file systems (jffs2 or p9fs) don't support mmap() properly (or only read-only
+                 * mmap()), and return EINVAL in that case. Let's propagate that as a more recognizable error
+                 * code. */
+                r = -EAFNOSUPPORT;
+                goto fail;
+        }
+        if (r < 0)
+                goto fail;
+
+        f->header = h;
+
+        if (!newly_created) {
+                r = journal_file_verify_header(f);
+                if (r < 0)
+                        goto fail;
+        }
+
+#if HAVE_GCRYPT
+        if (!newly_created && journal_file_writable(f) && JOURNAL_HEADER_SEALED(f->header)) {
+                r = journal_file_fss_load(f);
+                if (r < 0)
+                        goto fail;
+        }
+#endif
+
+        if (journal_file_writable(f)) {
+                if (metrics) {
+                        journal_default_metrics(metrics, f->fd, JOURNAL_HEADER_COMPACT(f->header));
+                        f->metrics = *metrics;
+                } else if (template)
+                        f->metrics = template->metrics;
+
+                r = journal_file_refresh_header(f);
+                if (r < 0)
+                        goto fail;
+        }
+
+#if HAVE_GCRYPT
+        r = journal_file_hmac_setup(f);
+        if (r < 0)
+                goto fail;
+#endif
+
+        if (newly_created) {
+                r = journal_file_setup_field_hash_table(f);
+                if (r < 0)
+                        goto fail;
+
+                r = journal_file_setup_data_hash_table(f);
+                if (r < 0)
+                        goto fail;
+
+#if HAVE_GCRYPT
+                r = journal_file_append_first_tag(f);
+                if (r < 0)
+                        goto fail;
+#endif
+        }
+
+        if (mmap_cache_fd_got_sigbus(f->cache_fd)) {
+                r = -EIO;
+                goto fail;
+        }
+
+        if (template && template->post_change_timer) {
+                r = journal_file_enable_post_change_timer(
+                                f,
+                                sd_event_source_get_event(template->post_change_timer),
+                                template->post_change_timer_period);
+
+                if (r < 0)
+                        goto fail;
+        }
+
+        /* The file is opened now successfully, thus we take possession of any passed in fd. */
+        f->close_fd = true;
+
+        if (DEBUG_LOGGING) {
+                static int last_seal = -1, last_compress = -1, last_keyed_hash = -1;
+                static uint64_t last_bytes = UINT64_MAX;
+
+                if (last_seal != JOURNAL_HEADER_SEALED(f->header) ||
+                    last_keyed_hash != JOURNAL_HEADER_KEYED_HASH(f->header) ||
+                    last_compress != JOURNAL_FILE_COMPRESS(f) ||
+                    last_bytes != f->compress_threshold_bytes) {
+
+                        log_debug("Journal effective settings seal=%s keyed_hash=%s compress=%s compress_threshold_bytes=%s",
+                                  yes_no(JOURNAL_HEADER_SEALED(f->header)), yes_no(JOURNAL_HEADER_KEYED_HASH(f->header)),
+                                  yes_no(JOURNAL_FILE_COMPRESS(f)), FORMAT_BYTES(f->compress_threshold_bytes));
+                        last_seal = JOURNAL_HEADER_SEALED(f->header);
+                        last_keyed_hash = JOURNAL_HEADER_KEYED_HASH(f->header);
+                        last_compress = JOURNAL_FILE_COMPRESS(f);
+                        last_bytes = f->compress_threshold_bytes;
+                }
+        }
+
+        *ret = f;
+        return 0;
+
+fail:
+        if (f->cache_fd && mmap_cache_fd_got_sigbus(f->cache_fd))
+                r = -EIO;
+
+        (void) journal_file_close(f);
+
+        if (newly_created && fd < 0)
+                (void) unlink(fname);
+
+        return r;
+}
+
+int journal_file_parse_uid_from_filename(const char *path, uid_t *ret_uid) {
+        _cleanup_free_ char *buf = NULL, *p = NULL;
+        const char *a, *b, *at;
+        int r;
+
+        /* This helper returns -EREMOTE when the filename doesn't match user online/offline journal
+         * pattern. Hence it currently doesn't parse archived or disposed user journals. */
+
+        assert(path);
+        assert(ret_uid);
+
+        r = path_extract_filename(path, &p);
+        if (r < 0)
+                return r;
+        if (r == O_DIRECTORY)
+                return -EISDIR;
+
+        a = startswith(p, "user-");
+        if (!a)
+                return -EREMOTE;
+        b = endswith(p, ".journal");
+        if (!b)
+                return -EREMOTE;
+
+        at = strchr(a, '@');
+        if (at)
+                return -EREMOTE;
+
+        buf = strndup(a, b-a);
+        if (!buf)
+                return -ENOMEM;
+
+        return parse_uid(buf, ret_uid);
+}
+
+int journal_file_archive(JournalFile *f, char **ret_previous_path) {
+        _cleanup_free_ char *p = NULL;
+
+        assert(f);
+
+        if (!journal_file_writable(f))
+                return -EINVAL;
+
+        /* Is this a journal file that was passed to us as fd? If so, we synthesized a path name for it, and we refuse
+         * rotation, since we don't know the actual path, and couldn't rename the file hence. */
+        if (path_startswith(f->path, "/proc/self/fd"))
+                return -EINVAL;
+
+        if (!endswith(f->path, ".journal"))
+                return -EINVAL;
+
+        if (asprintf(&p, "%.*s@" SD_ID128_FORMAT_STR "-%016"PRIx64"-%016"PRIx64".journal",
+                     (int) strlen(f->path) - 8, f->path,
+                     SD_ID128_FORMAT_VAL(f->header->seqnum_id),
+                     le64toh(f->header->head_entry_seqnum),
+                     le64toh(f->header->head_entry_realtime)) < 0)
+                return -ENOMEM;
+
+        /* Try to rename the file to the archived version. If the file already was deleted, we'll get ENOENT, let's
+         * ignore that case. */
+        if (rename(f->path, p) < 0 && errno != ENOENT)
+                return -errno;
+
+        /* Sync the rename to disk */
+        (void) fsync_directory_of_file(f->fd);
+
+        if (ret_previous_path)
+                *ret_previous_path = f->path;
+        else
+                free(f->path);
+
+        f->path = TAKE_PTR(p);
+
+        /* Set as archive so offlining commits w/state=STATE_ARCHIVED. Previously we would set old_file->header->state
+         * to STATE_ARCHIVED directly here, but journal_file_set_offline() short-circuits when state != STATE_ONLINE,
+         * which would result in the rotated journal never getting fsync() called before closing.  Now we simply queue
+         * the archive state by setting an archive bit, leaving the state as STATE_ONLINE so proper offlining
+         * occurs. */
+        f->archive = true;
+
+        return 0;
+}
+
+int journal_file_dispose(int dir_fd, const char *fname) {
+        _cleanup_free_ char *p = NULL;
+
+        assert(fname);
+
+        /* Renames a journal file to *.journal~, i.e. to mark it as corrupted or otherwise uncleanly shutdown. Note that
+         * this is done without looking into the file or changing any of its contents. The idea is that this is called
+         * whenever something is suspicious and we want to move the file away and make clear that it is not accessed
+         * for writing anymore. */
+
+        if (!endswith(fname, ".journal"))
+                return -EINVAL;
+
+        if (asprintf(&p, "%.*s@%016" PRIx64 "-%016" PRIx64 ".journal~",
+                     (int) strlen(fname) - 8, fname,
+                     now(CLOCK_REALTIME),
+                     random_u64()) < 0)
+                return -ENOMEM;
+
+        if (renameat(dir_fd, fname, dir_fd, p) < 0)
+                return -errno;
+
+        return 0;
+}
+
+int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint64_t p) {
+        _cleanup_free_ EntryItem *items_alloc = NULL;
+        EntryItem *items;
+        uint64_t q, n, xor_hash = 0;
+        const sd_id128_t *boot_id;
+        dual_timestamp ts;
+        int r;
+
+        assert(from);
+        assert(to);
+        assert(o);
+        assert(p > 0);
+
+        if (!journal_file_writable(to))
+                return -EPERM;
+
+        ts = (dual_timestamp) {
+                .monotonic = le64toh(o->entry.monotonic),
+                .realtime = le64toh(o->entry.realtime),
+        };
+        boot_id = &o->entry.boot_id;
+
+        n = journal_file_entry_n_items(from, o);
+
+        if (n < ALLOCA_MAX / sizeof(EntryItem) / 2)
+                items = newa(EntryItem, n);
+        else {
+                items_alloc = new(EntryItem, n);
+                if (!items_alloc)
+                        return -ENOMEM;
+
+                items = items_alloc;
+        }
+
+        for (uint64_t i = 0; i < n; i++) {
+                uint64_t h;
+                void *data;
+                size_t l;
+                Object *u;
+
+                q = journal_file_entry_item_object_offset(from, o, i);
+                r = journal_file_data_payload(from, NULL, q, NULL, 0, 0, &data, &l);
+                if (IN_SET(r, -EADDRNOTAVAIL, -EBADMSG)) {
+                        log_debug_errno(r, "Entry item %"PRIu64" data object is bad, skipping over it: %m", i);
+                        goto next;
+                }
+                if (r < 0)
+                        return r;
+                assert(r > 0);
+
+                if (l == 0)
+                        return -EBADMSG;
+
+                r = journal_file_append_data(to, data, l, &u, &h);
+                if (r < 0)
+                        return r;
+
+                if (JOURNAL_HEADER_KEYED_HASH(to->header))
+                        xor_hash ^= jenkins_hash64(data, l);
+                else
+                        xor_hash ^= le64toh(u->data.hash);
+
+                items[i] = (EntryItem) {
+                        .object_offset = h,
+                        .hash = le64toh(u->data.hash),
+                };
+
+        next:
+                /* The above journal_file_data_payload() may clear or overwrite cached object. Hence, we need
+                 * to re-read the object from the cache. */
+                r = journal_file_move_to_object(from, OBJECT_ENTRY, p, &o);
+                if (r < 0)
+                        return r;
+        }
+
+        r = journal_file_append_entry_internal(to, &ts, boot_id, xor_hash, items, n, NULL, NULL, NULL);
+
+        if (mmap_cache_fd_got_sigbus(to->cache_fd))
+                return -EIO;
+
+        return r;
+}
+
+void journal_reset_metrics(JournalMetrics *m) {
+        assert(m);
+
+        /* Set everything to "pick automatic values". */
+
+        *m = (JournalMetrics) {
+                .min_use = UINT64_MAX,
+                .max_use = UINT64_MAX,
+                .min_size = UINT64_MAX,
+                .max_size = UINT64_MAX,
+                .keep_free = UINT64_MAX,
+                .n_max_files = UINT64_MAX,
+        };
+}
+
+int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *ret_from, usec_t *ret_to) {
         assert(f);
         assert(f->header);
-        assert(from || to);
+        assert(ret_from || ret_to);
 
-        if (from) {
+        if (ret_from) {
                 if (f->header->head_entry_realtime == 0)
                         return -ENOENT;
 
-                *from = le64toh(f->header->head_entry_realtime);
+                *ret_from = le64toh(f->header->head_entry_realtime);
         }
 
-        if (to) {
+        if (ret_to) {
                 if (f->header->tail_entry_realtime == 0)
                         return -ENOENT;
 
-                *to = le64toh(f->header->tail_entry_realtime);
+                *ret_to = le64toh(f->header->tail_entry_realtime);
         }
 
         return 1;
 }
 
-int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot_id, usec_t *from, usec_t *to) {
+int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot_id, usec_t *ret_from, usec_t *ret_to) {
         Object *o;
         uint64_t p;
         int r;
 
         assert(f);
-        assert(from || to);
+        assert(ret_from || ret_to);
+
+        /* FIXME: fix return value assignment on success with 0. */
 
         r = find_data_object_by_boot_id(f, boot_id, &o, &p);
         if (r <= 0)
@@ -4089,15 +4233,15 @@
         if (le64toh(o->data.n_entries) <= 0)
                 return 0;
 
-        if (from) {
+        if (ret_from) {
                 r = journal_file_move_to_object(f, OBJECT_ENTRY, le64toh(o->data.entry_offset), &o);
                 if (r < 0)
                         return r;
 
-                *from = le64toh(o->entry.monotonic);
+                *ret_from = le64toh(o->entry.monotonic);
         }
 
-        if (to) {
+        if (ret_to) {
                 r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
                 if (r < 0)
                         return r;
@@ -4105,25 +4249,27 @@
                 r = generic_array_get_plus_one(f,
                                                le64toh(o->data.entry_offset),
                                                le64toh(o->data.entry_array_offset),
-                                               le64toh(o->data.n_entries)-1,
+                                               le64toh(o->data.n_entries) - 1,
+                                               DIRECTION_UP,
                                                &o, NULL);
                 if (r <= 0)
                         return r;
 
-                *to = le64toh(o->entry.monotonic);
+                *ret_to = le64toh(o->entry.monotonic);
         }
 
         return 1;
 }
 
-bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec) {
+bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec, int log_level) {
         assert(f);
         assert(f->header);
 
         /* If we gained new header fields we gained new features,
          * hence suggest a rotation */
         if (le64toh(f->header->header_size) < sizeof(Header)) {
-                log_debug("%s uses an outdated header, suggesting rotation.", f->path);
+                log_ratelimit_full(log_level, JOURNAL_LOG_RATELIMIT,
+                                   "%s uses an outdated header, suggesting rotation.", f->path);
                 return true;
         }
 
@@ -4133,23 +4279,27 @@
 
         if (JOURNAL_HEADER_CONTAINS(f->header, n_data))
                 if (le64toh(f->header->n_data) * 4ULL > (le64toh(f->header->data_hash_table_size) / sizeof(HashItem)) * 3ULL) {
-                        log_debug("Data hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items, %llu file size, %"PRIu64" bytes per hash table item), suggesting rotation.",
-                                  f->path,
-                                  100.0 * (double) le64toh(f->header->n_data) / ((double) (le64toh(f->header->data_hash_table_size) / sizeof(HashItem))),
-                                  le64toh(f->header->n_data),
-                                  le64toh(f->header->data_hash_table_size) / sizeof(HashItem),
-                                  (unsigned long long) f->last_stat.st_size,
-                                  f->last_stat.st_size / le64toh(f->header->n_data));
+                        log_ratelimit_full(
+                                log_level, JOURNAL_LOG_RATELIMIT,
+                                "Data hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items, %"PRIu64" file size, %"PRIu64" bytes per hash table item), suggesting rotation.",
+                                f->path,
+                                100.0 * (double) le64toh(f->header->n_data) / ((double) (le64toh(f->header->data_hash_table_size) / sizeof(HashItem))),
+                                le64toh(f->header->n_data),
+                                le64toh(f->header->data_hash_table_size) / sizeof(HashItem),
+                                (uint64_t) f->last_stat.st_size,
+                                f->last_stat.st_size / le64toh(f->header->n_data));
                         return true;
                 }
 
         if (JOURNAL_HEADER_CONTAINS(f->header, n_fields))
                 if (le64toh(f->header->n_fields) * 4ULL > (le64toh(f->header->field_hash_table_size) / sizeof(HashItem)) * 3ULL) {
-                        log_debug("Field hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items), suggesting rotation.",
-                                  f->path,
-                                  100.0 * (double) le64toh(f->header->n_fields) / ((double) (le64toh(f->header->field_hash_table_size) / sizeof(HashItem))),
-                                  le64toh(f->header->n_fields),
-                                  le64toh(f->header->field_hash_table_size) / sizeof(HashItem));
+                        log_ratelimit_full(
+                                log_level, JOURNAL_LOG_RATELIMIT,
+                                "Field hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items), suggesting rotation.",
+                                f->path,
+                                100.0 * (double) le64toh(f->header->n_fields) / ((double) (le64toh(f->header->field_hash_table_size) / sizeof(HashItem))),
+                                le64toh(f->header->n_fields),
+                                le64toh(f->header->field_hash_table_size) / sizeof(HashItem));
                         return true;
                 }
 
@@ -4157,15 +4307,19 @@
          * longest chain is longer than some threshold, let's suggest rotation. */
         if (JOURNAL_HEADER_CONTAINS(f->header, data_hash_chain_depth) &&
             le64toh(f->header->data_hash_chain_depth) > HASH_CHAIN_DEPTH_MAX) {
-                log_debug("Data hash table of %s has deepest hash chain of length %" PRIu64 ", suggesting rotation.",
-                          f->path, le64toh(f->header->data_hash_chain_depth));
+                log_ratelimit_full(
+                        log_level, JOURNAL_LOG_RATELIMIT,
+                        "Data hash table of %s has deepest hash chain of length %" PRIu64 ", suggesting rotation.",
+                        f->path, le64toh(f->header->data_hash_chain_depth));
                 return true;
         }
 
         if (JOURNAL_HEADER_CONTAINS(f->header, field_hash_chain_depth) &&
             le64toh(f->header->field_hash_chain_depth) > HASH_CHAIN_DEPTH_MAX) {
-                log_debug("Field hash table of %s has deepest hash chain of length at %" PRIu64 ", suggesting rotation.",
-                          f->path, le64toh(f->header->field_hash_chain_depth));
+                log_ratelimit_full(
+                        log_level, JOURNAL_LOG_RATELIMIT,
+                        "Field hash table of %s has deepest hash chain of length at %" PRIu64 ", suggesting rotation.",
+                        f->path, le64toh(f->header->field_hash_chain_depth));
                 return true;
         }
 
@@ -4173,8 +4327,13 @@
         if (JOURNAL_HEADER_CONTAINS(f->header, n_data) &&
             JOURNAL_HEADER_CONTAINS(f->header, n_fields) &&
             le64toh(f->header->n_data) > 0 &&
-            le64toh(f->header->n_fields) == 0)
+            le64toh(f->header->n_fields) == 0) {
+                log_ratelimit_full(
+                        log_level, JOURNAL_LOG_RATELIMIT,
+                        "Data objects of %s are not indexed by field objects, suggesting rotation.",
+                        f->path);
                 return true;
+        }
 
         if (max_file_usec > 0) {
                 usec_t t, h;
@@ -4182,9 +4341,27 @@
                 h = le64toh(f->header->head_entry_realtime);
                 t = now(CLOCK_REALTIME);
 
-                if (h > 0 && t > h + max_file_usec)
+                if (h > 0 && t > h + max_file_usec) {
+                        log_ratelimit_full(
+                                log_level, JOURNAL_LOG_RATELIMIT,
+                                "Oldest entry in %s is older than the configured file retention duration (%s), suggesting rotation.",
+                                f->path, FORMAT_TIMESPAN(max_file_usec, USEC_PER_SEC));
                         return true;
+                }
         }
 
         return false;
 }
+
+static const char * const journal_object_type_table[] = {
+        [OBJECT_UNUSED] = "unused",
+        [OBJECT_DATA] = "data",
+        [OBJECT_FIELD] = "field",
+        [OBJECT_ENTRY] = "entry",
+        [OBJECT_DATA_HASH_TABLE] = "data hash table",
+        [OBJECT_FIELD_HASH_TABLE] = "field hash table",
+        [OBJECT_ENTRY_ARRAY] = "entry array",
+        [OBJECT_TAG] = "tag",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(journal_object_type, ObjectType);
diff --git a/src/libsystemd/sd-journal/journal-file.h b/src/libsystemd/sd-journal/journal-file.h
index de3df76..8c809ed 100644
--- a/src/libsystemd/sd-journal/journal-file.h
+++ b/src/libsystemd/sd-journal/journal-file.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <fcntl.h>
 #include <inttypes.h>
 #include <sys/uio.h>
 
@@ -11,6 +12,7 @@
 #include "sd-event.h"
 #include "sd-id128.h"
 
+#include "compress.h"
 #include "hashmap.h"
 #include "journal-def.h"
 #include "mmap-cache.h"
@@ -18,7 +20,7 @@
 #include "time-util.h"
 
 typedef struct JournalMetrics {
-        /* For all these: -1 means "pick automatically", and 0 means "no limit enforced" */
+        /* For all these: UINT64_MAX means "pick automatically", and 0 means "no limit enforced" */
         uint64_t max_size;     /* how large journal files grow at max */
         uint64_t min_size;     /* how large journal files grow at least */
         uint64_t max_use;      /* how much disk space to use in total at max, keep_free permitting */
@@ -62,16 +64,10 @@
 
         mode_t mode;
 
-        int flags;
-        bool writable:1;
-        bool compress_xz:1;
-        bool compress_lz4:1;
-        bool compress_zstd:1;
-        bool seal:1;
-        bool defrag_on_close:1;
+        int open_flags;
         bool close_fd:1;
         bool archive:1;
-        bool keyed_hash:1;
+        bool strict_order:1;
 
         direction_t last_direction;
         LocationType location_type;
@@ -93,7 +89,6 @@
         uint64_t current_xor_hash;
 
         JournalMetrics metrics;
-        MMapCache *mmap;
 
         sd_event_source *post_change_timer;
         usec_t post_change_timer_period;
@@ -128,39 +123,35 @@
 #endif
 } JournalFile;
 
+typedef enum JournalFileFlags {
+        JOURNAL_COMPRESS        = 1 << 0,
+        JOURNAL_SEAL            = 1 << 1,
+        JOURNAL_STRICT_ORDER    = 1 << 2,
+        _JOURNAL_FILE_FLAGS_MAX = JOURNAL_COMPRESS|JOURNAL_SEAL|JOURNAL_STRICT_ORDER,
+} JournalFileFlags;
+
+typedef struct {
+        uint64_t object_offset;
+        uint64_t hash;
+} EntryItem;
+
 int journal_file_open(
                 int fd,
                 const char *fname,
-                int flags,
+                int open_flags,
+                JournalFileFlags file_flags,
                 mode_t mode,
-                bool compress,
                 uint64_t compress_threshold_bytes,
-                bool seal,
                 JournalMetrics *metrics,
                 MMapCache *mmap_cache,
-                Set *deferred_closes,
                 JournalFile *template,
                 JournalFile **ret);
 
-int journal_file_set_offline(JournalFile *f, bool wait);
-bool journal_file_is_offlining(JournalFile *f);
+int journal_file_set_offline_thread_join(JournalFile *f);
 JournalFile* journal_file_close(JournalFile *j);
 int journal_file_fstat(JournalFile *f);
 DEFINE_TRIVIAL_CLEANUP_FUNC(JournalFile*, journal_file_close);
 
-int journal_file_open_reliably(
-                const char *fname,
-                int flags,
-                mode_t mode,
-                bool compress,
-                uint64_t compress_threshold_bytes,
-                bool seal,
-                JournalMetrics *metrics,
-                MMapCache *mmap_cache,
-                Set *deferred_closes,
-                JournalFile *template,
-                JournalFile **ret);
-
 #define ALIGN64(x) (((x) + 7ULL) & ~7ULL)
 #define VALID64(x) (((x) & 7ULL) == 0ULL)
 
@@ -201,52 +192,108 @@
 #define JOURNAL_HEADER_KEYED_HASH(h) \
         FLAGS_SET(le32toh((h)->incompatible_flags), HEADER_INCOMPATIBLE_KEYED_HASH)
 
-int journal_file_move_to_object(JournalFile *f, ObjectType type, uint64_t offset, Object **ret);
+#define JOURNAL_HEADER_COMPACT(h) \
+        FLAGS_SET(le32toh((h)->incompatible_flags), HEADER_INCOMPATIBLE_COMPACT)
 
-uint64_t journal_file_entry_n_items(Object *o) _pure_;
-uint64_t journal_file_entry_array_n_items(Object *o) _pure_;
+int journal_file_move_to_object(JournalFile *f, ObjectType type, uint64_t offset, Object **ret);
+int journal_file_read_object_header(JournalFile *f, ObjectType type, uint64_t offset, Object *ret);
+
+int journal_file_tail_end_by_pread(JournalFile *f, uint64_t *ret_offset);
+int journal_file_tail_end_by_mmap(JournalFile *f, uint64_t *ret_offset);
+
+static inline uint64_t journal_file_entry_item_object_offset(JournalFile *f, Object *o, size_t i) {
+        assert(f);
+        assert(o);
+        return JOURNAL_HEADER_COMPACT(f->header) ? le32toh(o->entry.items.compact[i].object_offset) :
+                                                   le64toh(o->entry.items.regular[i].object_offset);
+}
+
+static inline size_t journal_file_entry_item_size(JournalFile *f) {
+        assert(f);
+        return JOURNAL_HEADER_COMPACT(f->header) ? sizeof_field(Object, entry.items.compact[0]) :
+                                                   sizeof_field(Object, entry.items.regular[0]);
+}
+
+uint64_t journal_file_entry_n_items(JournalFile *f, Object *o) _pure_;
+
+int journal_file_data_payload(
+                JournalFile *f,
+                Object *o,
+                uint64_t offset,
+                const char *field,
+                size_t field_length,
+                size_t data_threshold,
+                void **ret_data,
+                size_t *ret_size);
+
+static inline size_t journal_file_data_payload_offset(JournalFile *f) {
+        return JOURNAL_HEADER_COMPACT(f->header)
+                        ? offsetof(Object, data.compact.payload)
+                        : offsetof(Object, data.regular.payload);
+}
+
+static inline uint8_t* journal_file_data_payload_field(JournalFile *f, Object *o) {
+        return JOURNAL_HEADER_COMPACT(f->header) ? o->data.compact.payload : o->data.regular.payload;
+}
+
+uint64_t journal_file_entry_array_n_items(JournalFile *f, Object *o) _pure_;
+
+static inline uint64_t journal_file_entry_array_item(JournalFile *f, Object *o, size_t i) {
+        assert(f);
+        assert(o);
+        return JOURNAL_HEADER_COMPACT(f->header) ? le32toh(o->entry_array.items.compact[i]) :
+                                                   le64toh(o->entry_array.items.regular[i]);
+}
+
+static inline size_t journal_file_entry_array_item_size(JournalFile *f) {
+        assert(f);
+        return JOURNAL_HEADER_COMPACT(f->header) ? sizeof(le32_t) : sizeof(le64_t);
+}
+
 uint64_t journal_file_hash_table_n_items(Object *o) _pure_;
 
-int journal_file_append_object(JournalFile *f, ObjectType type, uint64_t size, Object **ret, uint64_t *offset);
+int journal_file_append_object(JournalFile *f, ObjectType type, uint64_t size, Object **ret_object, uint64_t *ret_offset);
 int journal_file_append_entry(
                 JournalFile *f,
                 const dual_timestamp *ts,
                 const sd_id128_t *boot_id,
-                const struct iovec iovec[], unsigned n_iovec,
+                const struct iovec iovec[],
+                size_t n_iovec,
                 uint64_t *seqno,
-                Object **ret,
-                uint64_t *offset);
+                Object **ret_object,
+                uint64_t *ret_offset);
 
-int journal_file_find_data_object(JournalFile *f, const void *data, uint64_t size, Object **ret, uint64_t *offset);
-int journal_file_find_data_object_with_hash(JournalFile *f, const void *data, uint64_t size, uint64_t hash, Object **ret, uint64_t *offset);
+int journal_file_find_data_object(JournalFile *f, const void *data, uint64_t size, Object **ret_object, uint64_t *ret_offset);
+int journal_file_find_data_object_with_hash(JournalFile *f, const void *data, uint64_t size, uint64_t hash, Object **ret_object, uint64_t *ret_offset);
 
-int journal_file_find_field_object(JournalFile *f, const void *field, uint64_t size, Object **ret, uint64_t *offset);
-int journal_file_find_field_object_with_hash(JournalFile *f, const void *field, uint64_t size, uint64_t hash, Object **ret, uint64_t *offset);
+int journal_file_find_field_object(JournalFile *f, const void *field, uint64_t size, Object **ret_object, uint64_t *ret_offset);
+int journal_file_find_field_object_with_hash(JournalFile *f, const void *field, uint64_t size, uint64_t hash, Object **ret_object, uint64_t *ret_offset);
 
 void journal_file_reset_location(JournalFile *f);
 void journal_file_save_location(JournalFile *f, Object *o, uint64_t offset);
 int journal_file_compare_locations(JournalFile *af, JournalFile *bf);
-int journal_file_next_entry(JournalFile *f, uint64_t p, direction_t direction, Object **ret, uint64_t *offset);
+int journal_file_next_entry(JournalFile *f, uint64_t p, direction_t direction, Object **ret_object, uint64_t *ret_offset);
 
-int journal_file_next_entry_for_data(JournalFile *f, Object *o, uint64_t p, uint64_t data_offset, direction_t direction, Object **ret, uint64_t *offset);
+int journal_file_next_entry_for_data(JournalFile *f, Object *d, direction_t direction, Object **ret_object, uint64_t *ret_offset);
 
-int journal_file_move_to_entry_by_seqnum(JournalFile *f, uint64_t seqnum, direction_t direction, Object **ret, uint64_t *offset);
-int journal_file_move_to_entry_by_realtime(JournalFile *f, uint64_t realtime, direction_t direction, Object **ret, uint64_t *offset);
-int journal_file_move_to_entry_by_monotonic(JournalFile *f, sd_id128_t boot_id, uint64_t monotonic, direction_t direction, Object **ret, uint64_t *offset);
+int journal_file_move_to_entry_by_offset(JournalFile *f, uint64_t p, direction_t direction, Object **ret_object, uint64_t *ret_offset);
+int journal_file_move_to_entry_by_seqnum(JournalFile *f, uint64_t seqnum, direction_t direction, Object **ret_object, uint64_t *ret_offset);
+int journal_file_move_to_entry_by_realtime(JournalFile *f, uint64_t realtime, direction_t direction, Object **ret_object, uint64_t *ret_offset);
+int journal_file_move_to_entry_by_monotonic(JournalFile *f, sd_id128_t boot_id, uint64_t monotonic, direction_t direction, Object **ret_object, uint64_t *ret_offset);
 
-int journal_file_move_to_entry_by_offset_for_data(JournalFile *f, uint64_t data_offset, uint64_t p, direction_t direction, Object **ret, uint64_t *offset);
-int journal_file_move_to_entry_by_seqnum_for_data(JournalFile *f, uint64_t data_offset, uint64_t seqnum, direction_t direction, Object **ret, uint64_t *offset);
-int journal_file_move_to_entry_by_realtime_for_data(JournalFile *f, uint64_t data_offset, uint64_t realtime, direction_t direction, Object **ret, uint64_t *offset);
-int journal_file_move_to_entry_by_monotonic_for_data(JournalFile *f, uint64_t data_offset, sd_id128_t boot_id, uint64_t monotonic, direction_t direction, Object **ret, uint64_t *offset);
+int journal_file_move_to_entry_by_offset_for_data(JournalFile *f, Object *d, uint64_t p, direction_t direction, Object **ret_object, uint64_t *ret_offset);
+int journal_file_move_to_entry_by_seqnum_for_data(JournalFile *f, Object *d, uint64_t seqnum, direction_t direction, Object **ret_object, uint64_t *ret_offset);
+int journal_file_move_to_entry_by_realtime_for_data(JournalFile *f, Object *d, uint64_t realtime, direction_t direction, Object **ret_object, uint64_t *ret_offset);
+int journal_file_move_to_entry_by_monotonic_for_data(JournalFile *f, Object *d, sd_id128_t boot_id, uint64_t monotonic, direction_t direction, Object **ret_object, uint64_t *ret_offset);
 
 int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint64_t p);
 
 void journal_file_dump(JournalFile *f);
 void journal_file_print_header(JournalFile *f);
 
-int journal_file_archive(JournalFile *f);
+int journal_file_archive(JournalFile *f, char **ret_previous_path);
+int journal_file_parse_uid_from_filename(const char *path, uid_t *uid);
 JournalFile* journal_initiate_close(JournalFile *f, Set *deferred_closes);
-int journal_file_rotate(JournalFile **f, bool compress, uint64_t compress_threshold_bytes, bool seal, Set *deferred_closes);
 
 int journal_file_dispose(int dir_fd, const char *fname);
 
@@ -254,21 +301,71 @@
 int journal_file_enable_post_change_timer(JournalFile *f, sd_event *e, usec_t t);
 
 void journal_reset_metrics(JournalMetrics *m);
-void journal_default_metrics(JournalMetrics *m, int fd);
 
-int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *to);
-int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to);
+int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *ret_from, usec_t *ret_to);
+int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *ret_from, usec_t *ret_to);
 
-bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec);
+bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec, int log_level);
 
 int journal_file_map_data_hash_table(JournalFile *f);
 int journal_file_map_field_hash_table(JournalFile *f);
 
 static inline bool JOURNAL_FILE_COMPRESS(JournalFile *f) {
         assert(f);
-        return f->compress_xz || f->compress_lz4 || f->compress_zstd;
+        return JOURNAL_HEADER_COMPRESSED_XZ(f->header) || JOURNAL_HEADER_COMPRESSED_LZ4(f->header) ||
+                        JOURNAL_HEADER_COMPRESSED_ZSTD(f->header);
 }
 
 uint64_t journal_file_hash_data(JournalFile *f, const void *data, size_t sz);
 
 bool journal_field_valid(const char *p, size_t l, bool allow_protected);
+
+const char* journal_object_type_to_string(ObjectType type) _const_;
+
+static inline Compression COMPRESSION_FROM_OBJECT(const Object *o) {
+        assert(o);
+
+        switch (o->object.flags & _OBJECT_COMPRESSED_MASK) {
+        case 0:
+                return COMPRESSION_NONE;
+        case OBJECT_COMPRESSED_XZ:
+                return COMPRESSION_XZ;
+        case OBJECT_COMPRESSED_LZ4:
+                return COMPRESSION_LZ4;
+        case OBJECT_COMPRESSED_ZSTD:
+                return COMPRESSION_ZSTD;
+        default:
+                return _COMPRESSION_INVALID;
+        }
+}
+
+static inline uint8_t COMPRESSION_TO_OBJECT_FLAG(Compression c) {
+        switch (c) {
+        case COMPRESSION_XZ:
+                return OBJECT_COMPRESSED_XZ;
+        case COMPRESSION_LZ4:
+                return OBJECT_COMPRESSED_LZ4;
+        case COMPRESSION_ZSTD:
+                return OBJECT_COMPRESSED_ZSTD;
+        default:
+                return 0;
+        }
+}
+
+static inline uint32_t COMPRESSION_TO_HEADER_INCOMPATIBLE_FLAG(Compression c) {
+        switch (c) {
+        case COMPRESSION_XZ:
+                return HEADER_INCOMPATIBLE_COMPRESSED_XZ;
+        case COMPRESSION_LZ4:
+                return HEADER_INCOMPATIBLE_COMPRESSED_LZ4;
+        case COMPRESSION_ZSTD:
+                return HEADER_INCOMPATIBLE_COMPRESSED_ZSTD;
+        default:
+                return 0;
+        }
+}
+
+static inline bool journal_file_writable(JournalFile *f) {
+        assert(f);
+        return (f->open_flags & O_ACCMODE) != O_RDONLY;
+}
diff --git a/src/libsystemd/sd-journal/journal-internal.h b/src/libsystemd/sd-journal/journal-internal.h
index 7fc6896..87ce930 100644
--- a/src/libsystemd/sd-journal/journal-internal.h
+++ b/src/libsystemd/sd-journal/journal-internal.h
@@ -14,6 +14,10 @@
 #include "list.h"
 #include "set.h"
 
+#define JOURNAL_FILES_MAX 7168u
+
+#define JOURNAL_LOG_RATELIMIT ((const RateLimit) { .interval = 60 * USEC_PER_SEC, .burst = 3 })
+
 typedef struct Match Match;
 typedef struct Location Location;
 typedef struct Directory Directory;
diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c
index d96e422..3b74d22 100644
--- a/src/libsystemd/sd-journal/journal-send.c
+++ b/src/libsystemd/sd-journal/journal-send.c
@@ -58,7 +58,8 @@
 
         fd_inc_sndbuf(fd, SNDBUF_SIZE);
 
-        if (!__sync_bool_compare_and_swap(&fd_plus_one, 0, fd+1)) {
+        if (!__atomic_compare_exchange_n(&fd_plus_one, &(int){0}, fd+1,
+                false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
                 safe_close(fd);
                 goto retry;
         }
@@ -66,6 +67,16 @@
         return fd;
 }
 
+int journal_fd_nonblock(bool nonblock) {
+        int r;
+
+        r = journal_fd();
+        if (r < 0)
+                return r;
+
+        return fd_nonblock(r, nonblock);
+}
+
 #if VALGRIND
 void close_journal_fd(void) {
         /* Be nice to valgrind. This is not atomic. This must be used only in tests. */
@@ -118,7 +129,7 @@
 
         /* Allocate large buffer to accommodate big message */
         if (len >= LINE_MAX) {
-                buffer = alloca(len + 9);
+                buffer = alloca_safe(len + 9);
                 memcpy(buffer, "MESSAGE=", 8);
                 assert_se(vsnprintf(buffer + 8, len + 1, format, ap) == len);
         }
@@ -228,7 +239,7 @@
 _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
         PROTECT_ERRNO;
         int fd, r;
-        _cleanup_close_ int buffer_fd = -1;
+        _cleanup_close_ int buffer_fd = -EBADF;
         struct iovec *w;
         uint64_t *l;
         int i, j = 0;
@@ -318,7 +329,7 @@
         if (errno == ENOENT)
                 return 0;
 
-        if (!IN_SET(errno, EMSGSIZE, ENOBUFS))
+        if (!IN_SET(errno, EMSGSIZE, ENOBUFS, EAGAIN))
                 return -errno;
 
         /* Message doesn't fit... Let's dump the data in a memfd or
@@ -408,11 +419,7 @@
 }
 
 _public_ int sd_journal_stream_fd(const char *identifier, int priority, int level_prefix) {
-        static const union sockaddr_union sa = {
-                .un.sun_family = AF_UNIX,
-                .un.sun_path = "/run/systemd/journal/stdout",
-        };
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         char *header;
         size_t l;
         int r;
@@ -424,9 +431,9 @@
         if (fd < 0)
                 return -errno;
 
-        r = connect(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un));
+        r = connect_unix_path(fd, AT_FDCWD, "/run/systemd/journal/stdout");
         if (r < 0)
-                return -errno;
+                return r;
 
         if (shutdown(fd, SHUT_RD) < 0)
                 return -errno;
@@ -494,7 +501,7 @@
 
         /* Allocate large buffer to accommodate big message */
         if (len >= LINE_MAX) {
-                buffer = alloca(len + 9);
+                buffer = alloca_safe(len + 9);
                 memcpy(buffer, "MESSAGE=", 8);
                 assert_se(vsnprintf(buffer + 8, len + 1, format, ap) == len);
         }
diff --git a/src/libsystemd/sd-journal/journal-send.h b/src/libsystemd/sd-journal/journal-send.h
index cf8b199..558d39a 100644
--- a/src/libsystemd/sd-journal/journal-send.h
+++ b/src/libsystemd/sd-journal/journal-send.h
@@ -1,6 +1,10 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <stdbool.h>
+
+int journal_fd_nonblock(bool nonblock);
+
 #if VALGRIND
 void close_journal_fd(void);
 #else
diff --git a/src/libsystemd/sd-journal/journal-vacuum.c b/src/libsystemd/sd-journal/journal-vacuum.c
index 494a54d..7395d00 100644
--- a/src/libsystemd/sd-journal/journal-vacuum.c
+++ b/src/libsystemd/sd-journal/journal-vacuum.c
@@ -13,6 +13,7 @@
 #include "fs-util.h"
 #include "journal-def.h"
 #include "journal-file.h"
+#include "journal-internal.h"
 #include "journal-vacuum.h"
 #include "sort-util.h"
 #include "string-util.h"
@@ -53,11 +54,10 @@
                 const struct stat *st,
                 unsigned long long *realtime) {
 
-        usec_t x, crtime = 0;
+        usec_t x;
 
-        /* The timestamp was determined by the file name, but let's
-         * see if the file might actually be older than the file name
-         * suggested... */
+        /* The timestamp was determined by the file name, but let's see if the file might actually be older
+         * than the file name suggested... */
 
         assert(fd >= 0);
         assert(fn);
@@ -65,30 +65,27 @@
         assert(realtime);
 
         x = timespec_load(&st->st_ctim);
-        if (x > 0 && x != USEC_INFINITY && x < *realtime)
+        if (timestamp_is_set(x) && x < *realtime)
                 *realtime = x;
 
         x = timespec_load(&st->st_atim);
-        if (x > 0 && x != USEC_INFINITY && x < *realtime)
+        if (timestamp_is_set(x) && x < *realtime)
                 *realtime = x;
 
         x = timespec_load(&st->st_mtim);
-        if (x > 0 && x != USEC_INFINITY && x < *realtime)
+        if (timestamp_is_set(x) && x < *realtime)
                 *realtime = x;
 
-        /* Let's read the original creation time, if possible. Ideally
-         * we'd just query the creation time the FS might provide, but
-         * unfortunately there's currently no sane API to query
-         * it. Hence let's implement this manually... */
+        /* Let's read the original creation time, if possible. Ideally we'd just query the creation time the
+         * FS might provide, but unfortunately there's currently no sane API to query it. Hence let's
+         * implement this manually... */
 
-        if (fd_getcrtime_at(fd, fn, &crtime, 0) >= 0) {
-                if (crtime < *realtime)
-                        *realtime = crtime;
-        }
+        if (fd_getcrtime_at(fd, fn, AT_SYMLINK_FOLLOW, &x) >= 0 && x < *realtime)
+                *realtime = x;
 }
 
 static int journal_file_empty(int dir_fd, const char *name) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
         le64_t n_entries;
         ssize_t n;
@@ -131,8 +128,6 @@
         _cleanup_closedir_ DIR *d = NULL;
         struct vacuum_info *list = NULL;
         usec_t retention_limit = 0;
-        char sbytes[FORMAT_BYTES_MAX];
-        struct dirent *de;
         int r;
 
         assert(directory);
@@ -148,7 +143,6 @@
                 return -errno;
 
         FOREACH_DIRENT_ALL(de, d, r = -errno; goto finish) {
-
                 unsigned long long seqnum = 0, realtime;
                 _cleanup_free_ char *p = NULL;
                 sd_id128_t seqnum_id;
@@ -165,6 +159,8 @@
                 if (!S_ISREG(st.st_mode))
                         continue;
 
+                size = 512UL * (uint64_t) st.st_blocks;
+
                 q = strlen(de->d_name);
 
                 if (endswith(de->d_name, ".journal")) {
@@ -174,6 +170,7 @@
 
                         if (q < 1 + 32 + 1 + 16 + 1 + 16 + 8) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -181,6 +178,7 @@
                             de->d_name[q-8-16-1-16-1] != '-' ||
                             de->d_name[q-8-16-1-16-1-32-1] != '@') {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -193,11 +191,13 @@
                         de->d_name[q-8-16-1-16-1] = 0;
                         if (sd_id128_from_string(de->d_name + q-8-16-1-16-1-32, &seqnum_id) < 0) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
                         if (sscanf(de->d_name + q-8-16-1-16, "%16llx-%16llx.journal", &seqnum, &realtime) != 2) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -213,12 +213,14 @@
 
                         if (q < 1 + 16 + 1 + 16 + 8 + 1) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
                         if (de->d_name[q-1-8-16-1] != '-' ||
                             de->d_name[q-1-8-16-1-16-1] != '@') {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -230,6 +232,7 @@
 
                         if (sscanf(de->d_name + q-1-8-16-1-16, "%16llx-%16llx.journal~", &realtime, &tmp) != 2) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -240,8 +243,6 @@
                         continue;
                 }
 
-                size = 512UL * (uint64_t) st.st_blocks;
-
                 r = journal_file_empty(dirfd(d), p);
                 if (r < 0) {
                         log_debug_errno(r, "Failed check if %s is empty, ignoring: %m", p);
@@ -254,11 +255,13 @@
                         if (r >= 0) {
 
                                 log_full(verbose ? LOG_INFO : LOG_DEBUG,
-                                         "Deleted empty archived journal %s/%s (%s).", directory, p, format_bytes(sbytes, sizeof(sbytes), size));
+                                         "Deleted empty archived journal %s/%s (%s).", directory, p, FORMAT_BYTES(size));
 
                                 freed += size;
                         } else if (r != -ENOENT)
-                                log_warning_errno(r, "Failed to delete empty archived journal %s/%s: %m", directory, p);
+                                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                            "Failed to delete empty archived journal %s/%s: %m",
+                                                            directory, p);
 
                         continue;
                 }
@@ -296,7 +299,8 @@
 
                 r = unlinkat_deallocate(dirfd(d), list[i].filename, 0);
                 if (r >= 0) {
-                        log_full(verbose ? LOG_INFO : LOG_DEBUG, "Deleted archived journal %s/%s (%s).", directory, list[i].filename, format_bytes(sbytes, sizeof(sbytes), list[i].usage));
+                        log_full(verbose ? LOG_INFO : LOG_DEBUG, "Deleted archived journal %s/%s (%s).",
+                                 directory, list[i].filename, FORMAT_BYTES(list[i].usage));
                         freed += list[i].usage;
 
                         if (list[i].usage < sum)
@@ -305,7 +309,9 @@
                                 sum = 0;
 
                 } else if (r != -ENOENT)
-                        log_warning_errno(r, "Failed to delete archived journal %s/%s: %m", directory, list[i].filename);
+                        log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                                    "Failed to delete archived journal %s/%s: %m",
+                                                    directory, list[i].filename);
         }
 
         if (oldest_usec && i < n_list && (*oldest_usec == 0 || list[i].realtime < *oldest_usec))
@@ -318,7 +324,8 @@
                 free(list[i].filename);
         free(list);
 
-        log_full(verbose ? LOG_INFO : LOG_DEBUG, "Vacuuming done, freed %s of archived journals from %s.", format_bytes(sbytes, sizeof(sbytes), freed), directory);
+        log_full(verbose ? LOG_INFO : LOG_DEBUG, "Vacuuming done, freed %s of archived journals from %s.",
+                 FORMAT_BYTES(freed), directory);
 
         return r;
 }
diff --git a/src/libsystemd/sd-journal/journal-verify.c b/src/libsystemd/sd-journal/journal-verify.c
index ce580d7..962d500 100644
--- a/src/libsystemd/sd-journal/journal-verify.c
+++ b/src/libsystemd/sd-journal/journal-verify.c
@@ -20,7 +20,6 @@
 #include "macro.h"
 #include "terminal-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 static void draw_progress(uint64_t p, usec_t *last_usec) {
         unsigned n, i, j, k;
@@ -69,7 +68,7 @@
          * Currently all callers use m >= 1, but we keep the check to be defensive.
          */
 
-        if (p >= m || m == 0) // lgtm[cpp/constant-comparison]
+        if (p >= m || m == 0)
                 return scale;
 
         return scale * p / m;
@@ -112,9 +111,36 @@
                 log_error_errno(error, OFSfmt": " _fmt, (uint64_t)_offset, ##__VA_ARGS__); \
         } while (0)
 
-static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o) {
-        uint64_t i;
+static int hash_payload(JournalFile *f, Object *o, uint64_t offset, const uint8_t *src, uint64_t size, uint64_t *res_hash) {
+        Compression c;
+        int r;
 
+        assert(o);
+        assert(src);
+        assert(res_hash);
+
+        c = COMPRESSION_FROM_OBJECT(o);
+        if (c < 0)
+                return -EBADMSG;
+        if (c != COMPRESSION_NONE) {
+                _cleanup_free_ void *b = NULL;
+                size_t b_size;
+
+                r = decompress_blob(c, src, size, &b, &b_size, 0);
+                if (r < 0) {
+                        error_errno(offset, r, "%s decompression failed: %m",
+                                    compression_to_string(c));
+                        return r;
+                }
+
+                *res_hash = journal_file_hash_data(f, b, b_size);
+        } else
+                *res_hash = journal_file_hash_data(f, src, size);
+
+        return 0;
+}
+
+static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o) {
         assert(f);
         assert(offset);
         assert(o);
@@ -123,9 +149,11 @@
          * possible field values. It does not follow any references to
          * other objects. */
 
-        if ((o->object.flags & OBJECT_COMPRESSED_XZ) &&
+        if ((o->object.flags & _OBJECT_COMPRESSED_MASK) != 0 &&
             o->object.type != OBJECT_DATA) {
-                error(offset, "Found compressed object that isn't of type DATA, which is not allowed.");
+                error(offset,
+                      "Found compressed object of type %s that isn't of type data, which is not allowed.",
+                      journal_object_type_to_string(o->object.type));
                 return -EBADMSG;
         }
 
@@ -133,7 +161,7 @@
 
         case OBJECT_DATA: {
                 uint64_t h1, h2;
-                int compression, r;
+                int r;
 
                 if (le64toh(o->data.entry_offset) == 0)
                         warning(offset, "Unused data (entry_offset==0)");
@@ -143,33 +171,19 @@
                         return -EBADMSG;
                 }
 
-                if (le64toh(o->object.size) - offsetof(DataObject, payload) <= 0) {
+                if (le64toh(o->object.size) - journal_file_data_payload_offset(f) <= 0) {
                         error(offset, "Bad object size (<= %zu): %"PRIu64,
-                              offsetof(DataObject, payload),
+                              journal_file_data_payload_offset(f),
                               le64toh(o->object.size));
                         return -EBADMSG;
                 }
 
                 h1 = le64toh(o->data.hash);
-
-                compression = o->object.flags & OBJECT_COMPRESSION_MASK;
-                if (compression) {
-                        _cleanup_free_ void *b = NULL;
-                        size_t b_size;
-
-                        r = decompress_blob(compression,
-                                            o->data.payload,
-                                            le64toh(o->object.size) - offsetof(Object, data.payload),
-                                            &b, &b_size, 0);
-                        if (r < 0) {
-                                error_errno(offset, r, "%s decompression failed: %m",
-                                            object_compressed_to_string(compression));
-                                return r;
-                        }
-
-                        h2 = journal_file_hash_data(f, b, b_size);
-                } else
-                        h2 = journal_file_hash_data(f, o->data.payload, le64toh(o->object.size) - offsetof(Object, data.payload));
+                r = hash_payload(f, o, offset, journal_file_data_payload_field(f, o),
+                                 le64toh(o->object.size) - journal_file_data_payload_offset(f),
+                                 &h2);
+                if (r < 0)
+                        return r;
 
                 if (h1 != h2) {
                         error(offset, "Invalid hash (%08" PRIx64 " vs. %08" PRIx64 ")", h1, h2);
@@ -191,15 +205,30 @@
                 break;
         }
 
-        case OBJECT_FIELD:
-                if (le64toh(o->object.size) - offsetof(FieldObject, payload) <= 0) {
+        case OBJECT_FIELD: {
+                uint64_t h1, h2;
+                int r;
+
+                if (le64toh(o->object.size) - offsetof(Object, field.payload) <= 0) {
                         error(offset,
                               "Bad field size (<= %zu): %"PRIu64,
-                              offsetof(FieldObject, payload),
+                              offsetof(Object, field.payload),
                               le64toh(o->object.size));
                         return -EBADMSG;
                 }
 
+                h1 = le64toh(o->field.hash);
+                r = hash_payload(f, o, offset, o->field.payload,
+                                 le64toh(o->object.size) - offsetof(Object, field.payload),
+                                 &h2);
+                if (r < 0)
+                        return r;
+
+                if (h1 != h2) {
+                        error(offset, "Invalid hash (%08" PRIx64 " vs. %08" PRIx64 ")", h1, h2);
+                        return -EBADMSG;
+                }
+
                 if (!VALID64(le64toh(o->field.next_hash_offset)) ||
                     !VALID64(le64toh(o->field.head_data_offset))) {
                         error(offset,
@@ -209,20 +238,21 @@
                         return -EBADMSG;
                 }
                 break;
+        }
 
         case OBJECT_ENTRY:
-                if ((le64toh(o->object.size) - offsetof(EntryObject, items)) % sizeof(EntryItem) != 0) {
+                if ((le64toh(o->object.size) - offsetof(Object, entry.items)) % journal_file_entry_item_size(f) != 0) {
                         error(offset,
                               "Bad entry size (<= %zu): %"PRIu64,
-                              offsetof(EntryObject, items),
+                              offsetof(Object, entry.items),
                               le64toh(o->object.size));
                         return -EBADMSG;
                 }
 
-                if ((le64toh(o->object.size) - offsetof(EntryObject, items)) / sizeof(EntryItem) <= 0) {
+                if ((le64toh(o->object.size) - offsetof(Object, entry.items)) / journal_file_entry_item_size(f) <= 0) {
                         error(offset,
                               "Invalid number items in entry: %"PRIu64,
-                              (le64toh(o->object.size) - offsetof(EntryObject, items)) / sizeof(EntryItem));
+                              (le64toh(o->object.size) - offsetof(Object, entry.items)) / journal_file_entry_item_size(f));
                         return -EBADMSG;
                 }
 
@@ -247,13 +277,13 @@
                         return -EBADMSG;
                 }
 
-                for (i = 0; i < journal_file_entry_n_items(o); i++) {
-                        if (le64toh(o->entry.items[i].object_offset) == 0 ||
-                            !VALID64(le64toh(o->entry.items[i].object_offset))) {
+                for (uint64_t i = 0; i < journal_file_entry_n_items(f, o); i++) {
+                        if (journal_file_entry_item_object_offset(f, o, i) == 0 ||
+                            !VALID64(journal_file_entry_item_object_offset(f, o, i))) {
                                 error(offset,
-                                      "Invalid entry item (%"PRIu64"/%"PRIu64" offset: "OFSfmt,
-                                      i, journal_file_entry_n_items(o),
-                                      le64toh(o->entry.items[i].object_offset));
+                                      "Invalid entry item (%"PRIu64"/%"PRIu64") offset: "OFSfmt,
+                                      i, journal_file_entry_n_items(f, o),
+                                      journal_file_entry_item_object_offset(f, o, i));
                                 return -EBADMSG;
                         }
                 }
@@ -262,21 +292,21 @@
 
         case OBJECT_DATA_HASH_TABLE:
         case OBJECT_FIELD_HASH_TABLE:
-                if ((le64toh(o->object.size) - offsetof(HashTableObject, items)) % sizeof(HashItem) != 0 ||
-                    (le64toh(o->object.size) - offsetof(HashTableObject, items)) / sizeof(HashItem) <= 0) {
+                if ((le64toh(o->object.size) - offsetof(Object, hash_table.items)) % sizeof(HashItem) != 0 ||
+                    (le64toh(o->object.size) - offsetof(Object, hash_table.items)) / sizeof(HashItem) <= 0) {
                         error(offset,
-                              "Invalid %s hash table size: %"PRIu64,
-                              o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
+                              "Invalid %s size: %"PRIu64,
+                              journal_object_type_to_string(o->object.type),
                               le64toh(o->object.size));
                         return -EBADMSG;
                 }
 
-                for (i = 0; i < journal_file_hash_table_n_items(o); i++) {
+                for (uint64_t i = 0; i < journal_file_hash_table_n_items(o); i++) {
                         if (o->hash_table.items[i].head_hash_offset != 0 &&
                             !VALID64(le64toh(o->hash_table.items[i].head_hash_offset))) {
                                 error(offset,
                                       "Invalid %s hash table item (%"PRIu64"/%"PRIu64") head_hash_offset: "OFSfmt,
-                                      o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
+                                      journal_object_type_to_string(o->object.type),
                                       i, journal_file_hash_table_n_items(o),
                                       le64toh(o->hash_table.items[i].head_hash_offset));
                                 return -EBADMSG;
@@ -285,7 +315,7 @@
                             !VALID64(le64toh(o->hash_table.items[i].tail_hash_offset))) {
                                 error(offset,
                                       "Invalid %s hash table item (%"PRIu64"/%"PRIu64") tail_hash_offset: "OFSfmt,
-                                      o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
+                                      journal_object_type_to_string(o->object.type),
                                       i, journal_file_hash_table_n_items(o),
                                       le64toh(o->hash_table.items[i].tail_hash_offset));
                                 return -EBADMSG;
@@ -295,7 +325,7 @@
                             (o->hash_table.items[i].tail_hash_offset != 0)) {
                                 error(offset,
                                       "Invalid %s hash table item (%"PRIu64"/%"PRIu64"): head_hash_offset="OFSfmt" tail_hash_offset="OFSfmt,
-                                      o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
+                                      journal_object_type_to_string(o->object.type),
                                       i, journal_file_hash_table_n_items(o),
                                       le64toh(o->hash_table.items[i].head_hash_offset),
                                       le64toh(o->hash_table.items[i].tail_hash_offset));
@@ -306,8 +336,8 @@
                 break;
 
         case OBJECT_ENTRY_ARRAY:
-                if ((le64toh(o->object.size) - offsetof(EntryArrayObject, items)) % sizeof(le64_t) != 0 ||
-                    (le64toh(o->object.size) - offsetof(EntryArrayObject, items)) / sizeof(le64_t) <= 0) {
+                if ((le64toh(o->object.size) - offsetof(Object, entry_array.items)) % journal_file_entry_array_item_size(f) != 0 ||
+                    (le64toh(o->object.size) - offsetof(Object, entry_array.items)) / journal_file_entry_array_item_size(f) <= 0) {
                         error(offset,
                               "Invalid object entry array size: %"PRIu64,
                               le64toh(o->object.size));
@@ -321,15 +351,15 @@
                         return -EBADMSG;
                 }
 
-                for (i = 0; i < journal_file_entry_array_n_items(o); i++)
-                        if (le64toh(o->entry_array.items[i]) != 0 &&
-                            !VALID64(le64toh(o->entry_array.items[i]))) {
+                for (uint64_t i = 0; i < journal_file_entry_array_n_items(f, o); i++) {
+                        uint64_t q = journal_file_entry_array_item(f, o, i);
+                        if (q != 0 && !VALID64(q)) {
                                 error(offset,
                                       "Invalid object entry array item (%"PRIu64"/%"PRIu64"): "OFSfmt,
-                                      i, journal_file_entry_array_n_items(o),
-                                      le64toh(o->entry_array.items[i]));
+                                      i, journal_file_entry_array_n_items(f, o), q);
                                 return -EBADMSG;
                         }
+                }
 
                 break;
 
@@ -354,23 +384,17 @@
         return 0;
 }
 
-static int write_uint64(int fd, uint64_t p) {
-        ssize_t k;
-
-        k = write(fd, &p, sizeof(p));
-        if (k < 0)
+static int write_uint64(FILE *fp, uint64_t p) {
+        if (fwrite(&p, sizeof(p), 1, fp) != 1)
                 return -errno;
-        if (k != sizeof(p))
-                return -EIO;
 
         return 0;
 }
 
-static int contains_uint64(MMapCache *m, MMapFileDescriptor *f, uint64_t n, uint64_t p) {
+static int contains_uint64(MMapFileDescriptor *f, uint64_t n, uint64_t p) {
         uint64_t a, b;
         int r;
 
-        assert(m);
         assert(f);
 
         /* Bisection ... */
@@ -381,7 +405,7 @@
 
                 c = (a + b) / 2;
 
-                r = mmap_cache_get(m, f, 0, false, c * sizeof(uint64_t), sizeof(uint64_t), NULL, (void **) &z);
+                r = mmap_cache_fd_get(f, 0, false, c * sizeof(uint64_t), sizeof(uint64_t), NULL, (void **) &z);
                 if (r < 0)
                         return r;
 
@@ -400,92 +424,6 @@
         return 0;
 }
 
-static int entry_points_to_data(
-                JournalFile *f,
-                MMapFileDescriptor *cache_entry_fd,
-                uint64_t n_entries,
-                uint64_t entry_p,
-                uint64_t data_p) {
-
-        int r;
-        uint64_t i, n, a;
-        Object *o;
-        bool found = false;
-
-        assert(f);
-        assert(cache_entry_fd);
-
-        if (!contains_uint64(f->mmap, cache_entry_fd, n_entries, entry_p)) {
-                error(data_p, "Data object references invalid entry at "OFSfmt, entry_p);
-                return -EBADMSG;
-        }
-
-        r = journal_file_move_to_object(f, OBJECT_ENTRY, entry_p, &o);
-        if (r < 0)
-                return r;
-
-        n = journal_file_entry_n_items(o);
-        for (i = 0; i < n; i++)
-                if (le64toh(o->entry.items[i].object_offset) == data_p) {
-                        found = true;
-                        break;
-                }
-
-        if (!found) {
-                error(entry_p, "Data object at "OFSfmt" not referenced by linked entry", data_p);
-                return -EBADMSG;
-        }
-
-        /* Check if this entry is also in main entry array. Since the
-         * main entry array has already been verified we can rely on
-         * its consistency. */
-
-        i = 0;
-        n = le64toh(f->header->n_entries);
-        a = le64toh(f->header->entry_array_offset);
-
-        while (i < n) {
-                uint64_t m, u;
-
-                r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, a, &o);
-                if (r < 0)
-                        return r;
-
-                m = journal_file_entry_array_n_items(o);
-                u = MIN(n - i, m);
-
-                if (entry_p <= le64toh(o->entry_array.items[u-1])) {
-                        uint64_t x, y, z;
-
-                        x = 0;
-                        y = u;
-
-                        while (x < y) {
-                                z = (x + y) / 2;
-
-                                if (le64toh(o->entry_array.items[z]) == entry_p)
-                                        return 0;
-
-                                if (x + 1 >= y)
-                                        break;
-
-                                if (entry_p < le64toh(o->entry_array.items[z]))
-                                        y = z;
-                                else
-                                        x = z;
-                        }
-
-                        error(entry_p, "Entry object doesn't exist in main entry array");
-                        return -EBADMSG;
-                }
-
-                i += u;
-                a = le64toh(o->entry_array.next_entry_array_offset);
-        }
-
-        return 0;
-}
-
 static int verify_data(
                 JournalFile *f,
                 Object *o, uint64_t p,
@@ -516,9 +454,18 @@
         assert(o->data.entry_offset);
 
         last = q = le64toh(o->data.entry_offset);
-        r = entry_points_to_data(f, cache_entry_fd, n_entries, q, p);
+        if (!contains_uint64(cache_entry_fd, n_entries, q)) {
+                error(p, "Data object references invalid entry at "OFSfmt, q);
+                return -EBADMSG;
+        }
+
+        r = journal_file_move_to_entry_by_offset(f, q, DIRECTION_DOWN, NULL, NULL);
         if (r < 0)
                 return r;
+        if (r == 0) {
+                error(q, "Entry object doesn't exist in the main entry array");
+                return -EBADMSG;
+        }
 
         i = 1;
         while (i < n) {
@@ -529,7 +476,7 @@
                         return -EBADMSG;
                 }
 
-                if (!contains_uint64(f->mmap, cache_entry_array_fd, n_entry_arrays, a)) {
+                if (!contains_uint64(cache_entry_array_fd, n_entry_arrays, a)) {
                         error(p, "Invalid array offset "OFSfmt, a);
                         return -EBADMSG;
                 }
@@ -544,19 +491,28 @@
                         return -EBADMSG;
                 }
 
-                m = journal_file_entry_array_n_items(o);
+                m = journal_file_entry_array_n_items(f, o);
                 for (j = 0; i < n && j < m; i++, j++) {
 
-                        q = le64toh(o->entry_array.items[j]);
+                        q = journal_file_entry_array_item(f, o, j);
                         if (q <= last) {
-                                error(p, "Data object's entry array not sorted");
+                                error(p, "Data object's entry array not sorted (%"PRIu64" <= %"PRIu64")", q, last);
                                 return -EBADMSG;
                         }
                         last = q;
 
-                        r = entry_points_to_data(f, cache_entry_fd, n_entries, q, p);
+                        if (!contains_uint64(cache_entry_fd, n_entries, q)) {
+                                error(p, "Data object references invalid entry at "OFSfmt, q);
+                                return -EBADMSG;
+                        }
+
+                        r = journal_file_move_to_entry_by_offset(f, q, DIRECTION_DOWN, NULL, NULL);
                         if (r < 0)
                                 return r;
+                        if (r == 0) {
+                                error(q, "Entry object doesn't exist in the main entry array");
+                                return -EBADMSG;
+                        }
 
                         /* Pointer might have moved, reposition */
                         r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, a, &o);
@@ -570,7 +526,7 @@
         return 0;
 }
 
-static int verify_hash_table(
+static int verify_data_hash_table(
                 JournalFile *f,
                 MMapFileDescriptor *cache_data_fd, uint64_t n_data,
                 MMapFileDescriptor *cache_entry_fd, uint64_t n_entries,
@@ -606,7 +562,7 @@
                         Object *o;
                         uint64_t next;
 
-                        if (!contains_uint64(f->mmap, cache_data_fd, n_data, p)) {
+                        if (!contains_uint64(cache_data_fd, n_data, p)) {
                                 error(p, "Invalid data object at hash entry %"PRIu64" of %"PRIu64, i, n);
                                 return -EBADMSG;
                         }
@@ -635,7 +591,10 @@
                 }
 
                 if (last != le64toh(f->data_hash_table[i].tail_hash_offset)) {
-                        error(p, "Tail hash pointer mismatch in hash table");
+                        error(p,
+                              "Tail hash pointer mismatch in hash table (%"PRIu64" != %"PRIu64")",
+                              last,
+                              le64toh(f->data_hash_table[i].tail_hash_offset));
                         return -EBADMSG;
                 }
         }
@@ -678,7 +637,8 @@
 static int verify_entry(
                 JournalFile *f,
                 Object *o, uint64_t p,
-                MMapFileDescriptor *cache_data_fd, uint64_t n_data) {
+                MMapFileDescriptor *cache_data_fd, uint64_t n_data,
+                bool last) {
 
         uint64_t i, n;
         int r;
@@ -687,15 +647,14 @@
         assert(o);
         assert(cache_data_fd);
 
-        n = journal_file_entry_n_items(o);
+        n = journal_file_entry_n_items(f, o);
         for (i = 0; i < n; i++) {
-                uint64_t q, h;
+                uint64_t q;
                 Object *u;
 
-                q = le64toh(o->entry.items[i].object_offset);
-                h = le64toh(o->entry.items[i].hash);
+                q = journal_file_entry_item_object_offset(f, o, i);
 
-                if (!contains_uint64(f->mmap, cache_data_fd, n_data, q)) {
+                if (!contains_uint64(cache_data_fd, n_data, q)) {
                         error(p, "Invalid data object of entry");
                         return -EBADMSG;
                 }
@@ -704,18 +663,30 @@
                 if (r < 0)
                         return r;
 
-                if (le64toh(u->data.hash) != h) {
-                        error(p, "Hash mismatch for data object of entry");
-                        return -EBADMSG;
-                }
-
-                r = data_object_in_hash_table(f, h, q);
+                r = data_object_in_hash_table(f, le64toh(u->data.hash), q);
                 if (r < 0)
                         return r;
                 if (r == 0) {
                         error(p, "Data object missing from hash table");
                         return -EBADMSG;
                 }
+
+                /* Pointer might have moved, reposition */
+                r = journal_file_move_to_object(f, OBJECT_DATA, q, &u);
+                if (r < 0)
+                        return r;
+
+                r = journal_file_move_to_entry_by_offset_for_data(f, u, p, DIRECTION_DOWN, NULL, NULL);
+                if (r < 0)
+                        return r;
+
+                /* The last entry object has a very high chance of not being referenced as journal files
+                 * almost always run out of space during linking of entry items when trying to add a new
+                 * entry array so let's not error in that scenario. */
+                if (r == 0 && !last) {
+                        error(p, "Entry object not referenced by linked data object at "OFSfmt, q);
+                        return -EBADMSG;
+                }
         }
 
         return 0;
@@ -752,7 +723,7 @@
                         return -EBADMSG;
                 }
 
-                if (!contains_uint64(f->mmap, cache_entry_array_fd, n_entry_arrays, a)) {
+                if (!contains_uint64(cache_entry_array_fd, n_entry_arrays, a)) {
                         error(a, "Invalid array %"PRIu64" of %"PRIu64, i, n);
                         return -EBADMSG;
                 }
@@ -767,18 +738,18 @@
                         return -EBADMSG;
                 }
 
-                m = journal_file_entry_array_n_items(o);
+                m = journal_file_entry_array_n_items(f, o);
                 for (j = 0; i < n && j < m; i++, j++) {
                         uint64_t p;
 
-                        p = le64toh(o->entry_array.items[j]);
+                        p = journal_file_entry_array_item(f, o, j);
                         if (p <= last) {
                                 error(a, "Entry array not sorted at %"PRIu64" of %"PRIu64, i, n);
                                 return -EBADMSG;
                         }
                         last = p;
 
-                        if (!contains_uint64(f->mmap, cache_entry_fd, n_entries, p)) {
+                        if (!contains_uint64(cache_entry_fd, n_entries, p)) {
                                 error(a, "Invalid array entry at %"PRIu64" of %"PRIu64, i, n);
                                 return -EBADMSG;
                         }
@@ -787,7 +758,7 @@
                         if (r < 0)
                                 return r;
 
-                        r = verify_entry(f, o, p, cache_data_fd, n_data);
+                        r = verify_entry(f, o, p, cache_data_fd, n_data, /*last=*/ i + 1 == n);
                         if (r < 0)
                                 return r;
 
@@ -803,6 +774,43 @@
         return 0;
 }
 
+static int verify_hash_table(
+                Object *o, uint64_t p, uint64_t *n_hash_tables, uint64_t header_offset, uint64_t header_size) {
+
+        assert(o);
+        assert(n_hash_tables);
+
+        if (*n_hash_tables > 1) {
+                error(p,
+                      "More than one %s: %" PRIu64,
+                      journal_object_type_to_string(o->object.type),
+                      *n_hash_tables);
+                return -EBADMSG;
+        }
+
+        if (header_offset != p + offsetof(Object, hash_table.items)) {
+                error(p,
+                      "Header offset for %s invalid (%" PRIu64 " != %" PRIu64 ")",
+                      journal_object_type_to_string(o->object.type),
+                      header_offset,
+                      p + offsetof(Object, hash_table.items));
+                return -EBADMSG;
+        }
+
+        if (header_size != le64toh(o->object.size) - offsetof(Object, hash_table.items)) {
+                error(p,
+                      "Header size for %s invalid (%" PRIu64 " != %" PRIu64 ")",
+                      journal_object_type_to_string(o->object.type),
+                      header_size,
+                      le64toh(o->object.size) - offsetof(Object, hash_table.items));
+                return -EBADMSG;
+        }
+
+        (*n_hash_tables)++;
+
+        return 0;
+}
+
 int journal_file_verify(
                 JournalFile *f,
                 const char *key,
@@ -813,15 +821,17 @@
         uint64_t p = 0, last_epoch = 0, last_tag_realtime = 0, last_sealed_realtime = 0;
 
         uint64_t entry_seqnum = 0, entry_monotonic = 0, entry_realtime = 0;
-        sd_id128_t entry_boot_id;
+        sd_id128_t entry_boot_id = {};  /* Unnecessary initialization to appease gcc */
         bool entry_seqnum_set = false, entry_monotonic_set = false, entry_realtime_set = false, found_main_entry_array = false;
-        uint64_t n_weird = 0, n_objects = 0, n_entries = 0, n_data = 0, n_fields = 0, n_data_hash_tables = 0, n_field_hash_tables = 0, n_entry_arrays = 0, n_tags = 0;
+        uint64_t n_objects = 0, n_entries = 0, n_data = 0, n_fields = 0, n_data_hash_tables = 0, n_field_hash_tables = 0, n_entry_arrays = 0, n_tags = 0;
         usec_t last_usec = 0;
-        int data_fd = -1, entry_fd = -1, entry_array_fd = -1;
+        _cleanup_close_ int data_fd = -EBADF, entry_fd = -EBADF, entry_array_fd = -EBADF;
+        _cleanup_fclose_ FILE *data_fp = NULL, *entry_fp = NULL, *entry_array_fp = NULL;
         MMapFileDescriptor *cache_data_fd = NULL, *cache_entry_fd = NULL, *cache_entry_array_fd = NULL;
         unsigned i;
         bool found_last = false;
         const char *tmp_dir = NULL;
+        MMapCache *m;
 
 #if HAVE_GCRYPT
         uint64_t last_tag = 0;
@@ -838,7 +848,7 @@
 #else
                 return -EOPNOTSUPP;
 #endif
-        } else if (f->seal)
+        } else if (JOURNAL_HEADER_SEALED(f->header))
                 return -ENOKEY;
 
         r = var_tmp_dir(&tmp_dir);
@@ -866,24 +876,43 @@
                 goto fail;
         }
 
-        cache_data_fd = mmap_cache_add_fd(f->mmap, data_fd, PROT_READ|PROT_WRITE);
+        m = mmap_cache_fd_cache(f->cache_fd);
+        cache_data_fd = mmap_cache_add_fd(m, data_fd, PROT_READ|PROT_WRITE);
         if (!cache_data_fd) {
                 r = log_oom();
                 goto fail;
         }
 
-        cache_entry_fd = mmap_cache_add_fd(f->mmap, entry_fd, PROT_READ|PROT_WRITE);
+        cache_entry_fd = mmap_cache_add_fd(m, entry_fd, PROT_READ|PROT_WRITE);
         if (!cache_entry_fd) {
                 r = log_oom();
                 goto fail;
         }
 
-        cache_entry_array_fd = mmap_cache_add_fd(f->mmap, entry_array_fd, PROT_READ|PROT_WRITE);
+        cache_entry_array_fd = mmap_cache_add_fd(m, entry_array_fd, PROT_READ|PROT_WRITE);
         if (!cache_entry_array_fd) {
                 r = log_oom();
                 goto fail;
         }
 
+        r = take_fdopen_unlocked(&data_fd, "w+", &data_fp);
+        if (r < 0) {
+                log_error_errno(r, "Failed to open data file stream: %m");
+                goto fail;
+        }
+
+        r = take_fdopen_unlocked(&entry_fd, "w+", &entry_fp);
+        if (r < 0) {
+                log_error_errno(r, "Failed to open entry file stream: %m");
+                goto fail;
+        }
+
+        r = take_fdopen_unlocked(&entry_array_fd, "w+", &entry_array_fp);
+        if (r < 0) {
+                log_error_errno(r, "Failed to open entry array file stream: %m");
+                goto fail;
+        }
+
         if (le32toh(f->header->compatible_flags) & ~HEADER_COMPATIBLE_SUPPORTED) {
                 log_error("Cannot verify file with unknown extensions.");
                 r = -EOPNOTSUPP;
@@ -911,12 +940,15 @@
 
                 r = journal_file_move_to_object(f, OBJECT_UNUSED, p, &o);
                 if (r < 0) {
-                        error(p, "Invalid object");
+                        error_errno(p, r, "Invalid object: %m");
                         goto fail;
                 }
 
                 if (p > le64toh(f->header->tail_object_offset)) {
-                        error(offsetof(Header, tail_object_offset), "Invalid tail object pointer");
+                        error(offsetof(Header, tail_object_offset),
+                              "Invalid tail object pointer (%"PRIu64" > %"PRIu64")",
+                              p,
+                              le64toh(f->header->tail_object_offset));
                         r = -EBADMSG;
                         goto fail;
                 }
@@ -932,7 +964,7 @@
                 if (!!(o->object.flags & OBJECT_COMPRESSED_XZ) +
                     !!(o->object.flags & OBJECT_COMPRESSED_LZ4) +
                     !!(o->object.flags & OBJECT_COMPRESSED_ZSTD) > 1) {
-                        error(p, "Object has multiple compression flags set");
+                        error(p, "Object has multiple compression flags set (flags: 0x%x)", o->object.flags);
                         r = -EINVAL;
                         goto fail;
                 }
@@ -958,7 +990,7 @@
                 switch (o->object.type) {
 
                 case OBJECT_DATA:
-                        r = write_uint64(data_fd, p);
+                        r = write_uint64(data_fp, p);
                         if (r < 0)
                                 goto fail;
 
@@ -976,26 +1008,35 @@
                                 goto fail;
                         }
 
-                        r = write_uint64(entry_fd, p);
+                        r = write_uint64(entry_fp, p);
                         if (r < 0)
                                 goto fail;
 
                         if (le64toh(o->entry.realtime) < last_tag_realtime) {
-                                error(p, "Older entry after newer tag");
+                                error(p,
+                                      "Older entry after newer tag (%"PRIu64" < %"PRIu64")",
+                                      le64toh(o->entry.realtime),
+                                      last_tag_realtime);
                                 r = -EBADMSG;
                                 goto fail;
                         }
 
                         if (!entry_seqnum_set &&
                             le64toh(o->entry.seqnum) != le64toh(f->header->head_entry_seqnum)) {
-                                error(p, "Head entry sequence number incorrect");
+                                error(p,
+                                      "Head entry sequence number incorrect (%"PRIu64" != %"PRIu64")",
+                                      le64toh(o->entry.seqnum),
+                                      le64toh(f->header->head_entry_seqnum));
                                 r = -EBADMSG;
                                 goto fail;
                         }
 
                         if (entry_seqnum_set &&
                             entry_seqnum >= le64toh(o->entry.seqnum)) {
-                                error(p, "Entry sequence number out of synchronization");
+                                error(p,
+                                      "Entry sequence number out of synchronization (%"PRIu64" >= %"PRIu64")",
+                                      entry_seqnum,
+                                      le64toh(o->entry.seqnum));
                                 r = -EBADMSG;
                                 goto fail;
                         }
@@ -1006,7 +1047,10 @@
                         if (entry_monotonic_set &&
                             sd_id128_equal(entry_boot_id, o->entry.boot_id) &&
                             entry_monotonic > le64toh(o->entry.monotonic)) {
-                                error(p, "Entry timestamp out of synchronization");
+                                error(p,
+                                      "Entry timestamp out of synchronization (%"PRIu64" > %"PRIu64")",
+                                      entry_monotonic,
+                                      le64toh(o->entry.monotonic));
                                 r = -EBADMSG;
                                 goto fail;
                         }
@@ -1017,7 +1061,10 @@
 
                         if (!entry_realtime_set &&
                             le64toh(o->entry.realtime) != le64toh(f->header->head_entry_realtime)) {
-                                error(p, "Head entry realtime timestamp incorrect");
+                                error(p,
+                                      "Head entry realtime timestamp incorrect (%"PRIu64" != %"PRIu64")",
+                                      le64toh(o->entry.realtime),
+                                      le64toh(f->header->head_entry_realtime));
                                 r = -EBADMSG;
                                 goto fail;
                         }
@@ -1029,41 +1076,24 @@
                         break;
 
                 case OBJECT_DATA_HASH_TABLE:
-                        if (n_data_hash_tables > 1) {
-                                error(p, "More than one data hash table");
-                                r = -EBADMSG;
+                        r = verify_hash_table(o, p, &n_data_hash_tables,
+                                              le64toh(f->header->data_hash_table_offset),
+                                              le64toh(f->header->data_hash_table_size));
+                        if (r < 0)
                                 goto fail;
-                        }
-
-                        if (le64toh(f->header->data_hash_table_offset) != p + offsetof(HashTableObject, items) ||
-                            le64toh(f->header->data_hash_table_size) != le64toh(o->object.size) - offsetof(HashTableObject, items)) {
-                                error(p, "header fields for data hash table invalid");
-                                r = -EBADMSG;
-                                goto fail;
-                        }
-
-                        n_data_hash_tables++;
                         break;
 
                 case OBJECT_FIELD_HASH_TABLE:
-                        if (n_field_hash_tables > 1) {
-                                error(p, "More than one field hash table");
-                                r = -EBADMSG;
+                        r = verify_hash_table(o, p, &n_field_hash_tables,
+                                              le64toh(f->header->field_hash_table_offset),
+                                              le64toh(f->header->field_hash_table_size));
+                        if (r < 0)
                                 goto fail;
-                        }
 
-                        if (le64toh(f->header->field_hash_table_offset) != p + offsetof(HashTableObject, items) ||
-                            le64toh(f->header->field_hash_table_size) != le64toh(o->object.size) - offsetof(HashTableObject, items)) {
-                                error(p, "Header fields for field hash table invalid");
-                                r = -EBADMSG;
-                                goto fail;
-                        }
-
-                        n_field_hash_tables++;
                         break;
 
                 case OBJECT_ENTRY_ARRAY:
-                        r = write_uint64(entry_array_fd, p);
+                        r = write_uint64(entry_array_fp, p);
                         if (r < 0)
                                 goto fail;
 
@@ -1088,26 +1118,35 @@
                         }
 
                         if (le64toh(o->tag.seqnum) != n_tags + 1) {
-                                error(p, "Tag sequence number out of synchronization");
+                                error(p,
+                                      "Tag sequence number out of synchronization (%"PRIu64" != %"PRIu64")",
+                                      le64toh(o->tag.seqnum),
+                                      n_tags + 1);
                                 r = -EBADMSG;
                                 goto fail;
                         }
 
                         if (le64toh(o->tag.epoch) < last_epoch) {
-                                error(p, "Epoch sequence out of synchronization");
+                                error(p,
+                                      "Epoch sequence out of synchronization (%"PRIu64" < %"PRIu64")",
+                                      le64toh(o->tag.epoch),
+                                      last_epoch);
                                 r = -EBADMSG;
                                 goto fail;
                         }
 
 #if HAVE_GCRYPT
-                        if (f->seal) {
+                        if (JOURNAL_HEADER_SEALED(f->header)) {
                                 uint64_t q, rt;
 
                                 debug(p, "Checking tag %"PRIu64"...", le64toh(o->tag.seqnum));
 
                                 rt = f->fss_start_usec + le64toh(o->tag.epoch) * f->fss_interval_usec;
                                 if (entry_realtime_set && entry_realtime >= rt + f->fss_interval_usec) {
-                                        error(p, "tag/entry realtime timestamp out of synchronization");
+                                        error(p,
+                                              "tag/entry realtime timestamp out of synchronization (%"PRIu64" >= %"PRIu64")",
+                                              entry_realtime,
+                                              rt + f->fss_interval_usec);
                                         r = -EBADMSG;
                                         goto fail;
                                 }
@@ -1167,9 +1206,6 @@
 
                         n_tags++;
                         break;
-
-                default:
-                        n_weird++;
                 }
 
                 if (p == le64toh(f->header->tail_object_offset)) {
@@ -1181,60 +1217,83 @@
         };
 
         if (!found_last && le64toh(f->header->tail_object_offset) != 0) {
-                error(le64toh(f->header->tail_object_offset), "Tail object pointer dead");
+                error(le64toh(f->header->tail_object_offset),
+                      "Tail object pointer dead (%"PRIu64" != 0)",
+                      le64toh(f->header->tail_object_offset));
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (n_objects != le64toh(f->header->n_objects)) {
-                error(offsetof(Header, n_objects), "Object number mismatch");
+                error(offsetof(Header, n_objects),
+                      "Object number mismatch (%"PRIu64" != %"PRIu64")",
+                      n_objects,
+                      le64toh(f->header->n_objects));
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (n_entries != le64toh(f->header->n_entries)) {
-                error(offsetof(Header, n_entries), "Entry number mismatch");
+                error(offsetof(Header, n_entries),
+                      "Entry number mismatch (%"PRIu64" != %"PRIu64")",
+                      n_entries,
+                      le64toh(f->header->n_entries));
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (JOURNAL_HEADER_CONTAINS(f->header, n_data) &&
             n_data != le64toh(f->header->n_data)) {
-                error(offsetof(Header, n_data), "Data number mismatch");
+                error(offsetof(Header, n_data),
+                      "Data number mismatch (%"PRIu64" != %"PRIu64")",
+                      n_data,
+                      le64toh(f->header->n_data));
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (JOURNAL_HEADER_CONTAINS(f->header, n_fields) &&
             n_fields != le64toh(f->header->n_fields)) {
-                error(offsetof(Header, n_fields), "Field number mismatch");
+                error(offsetof(Header, n_fields),
+                      "Field number mismatch (%"PRIu64" != %"PRIu64")",
+                      n_fields,
+                      le64toh(f->header->n_fields));
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (JOURNAL_HEADER_CONTAINS(f->header, n_tags) &&
             n_tags != le64toh(f->header->n_tags)) {
-                error(offsetof(Header, n_tags), "Tag number mismatch");
+                error(offsetof(Header, n_tags),
+                      "Tag number mismatch (%"PRIu64" != %"PRIu64")",
+                      n_tags,
+                      le64toh(f->header->n_tags));
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (JOURNAL_HEADER_CONTAINS(f->header, n_entry_arrays) &&
             n_entry_arrays != le64toh(f->header->n_entry_arrays)) {
-                error(offsetof(Header, n_entry_arrays), "Entry array number mismatch");
+                error(offsetof(Header, n_entry_arrays),
+                      "Entry array number mismatch (%"PRIu64" != %"PRIu64")",
+                      n_entry_arrays,
+                      le64toh(f->header->n_entry_arrays));
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (!found_main_entry_array && le64toh(f->header->entry_array_offset) != 0) {
-                error(0, "Missing entry array");
+                error(0, "Missing main entry array");
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (entry_seqnum_set &&
             entry_seqnum != le64toh(f->header->tail_entry_seqnum)) {
-                error(offsetof(Header, tail_entry_seqnum), "Invalid tail seqnum");
+                error(offsetof(Header, tail_entry_seqnum),
+                      "Tail entry sequence number incorrect (%"PRIu64" != %"PRIu64")",
+                      entry_seqnum,
+                      le64toh(f->header->tail_entry_seqnum));
                 r = -EBADMSG;
                 goto fail;
         }
@@ -1242,17 +1301,38 @@
         if (entry_monotonic_set &&
             (sd_id128_equal(entry_boot_id, f->header->boot_id) &&
              entry_monotonic != le64toh(f->header->tail_entry_monotonic))) {
-                error(0, "Invalid tail monotonic timestamp");
+                error(0,
+                      "Invalid tail monotonic timestamp (%"PRIu64" != %"PRIu64")",
+                      entry_monotonic,
+                      le64toh(f->header->tail_entry_monotonic));
                 r = -EBADMSG;
                 goto fail;
         }
 
         if (entry_realtime_set && entry_realtime != le64toh(f->header->tail_entry_realtime)) {
-                error(0, "Invalid tail realtime timestamp");
+                error(0,
+                      "Invalid tail realtime timestamp (%"PRIu64" != %"PRIu64")",
+                      entry_realtime,
+                      le64toh(f->header->tail_entry_realtime));
                 r = -EBADMSG;
                 goto fail;
         }
 
+        if (fflush(data_fp) != 0) {
+                r = log_error_errno(errno, "Failed to flush data file stream: %m");
+                goto fail;
+        }
+
+        if (fflush(entry_fp) != 0) {
+                r = log_error_errno(errno, "Failed to flush entry file stream: %m");
+                goto fail;
+        }
+
+        if (fflush(entry_array_fp) != 0) {
+                r = log_error_errno(errno, "Failed to flush entry array file stream: %m");
+                goto fail;
+        }
+
         /* Second iteration: we follow all objects referenced from the
          * two entry points: the object hash table and the entry
          * array. We also check that everything referenced (directly
@@ -1270,25 +1350,21 @@
         if (r < 0)
                 goto fail;
 
-        r = verify_hash_table(f,
-                              cache_data_fd, n_data,
-                              cache_entry_fd, n_entries,
-                              cache_entry_array_fd, n_entry_arrays,
-                              &last_usec,
-                              show_progress);
+        r = verify_data_hash_table(f,
+                                   cache_data_fd, n_data,
+                                   cache_entry_fd, n_entries,
+                                   cache_entry_array_fd, n_entry_arrays,
+                                   &last_usec,
+                                   show_progress);
         if (r < 0)
                 goto fail;
 
         if (show_progress)
                 flush_progress();
 
-        mmap_cache_free_fd(f->mmap, cache_data_fd);
-        mmap_cache_free_fd(f->mmap, cache_entry_fd);
-        mmap_cache_free_fd(f->mmap, cache_entry_array_fd);
-
-        safe_close(data_fd);
-        safe_close(entry_fd);
-        safe_close(entry_array_fd);
+        mmap_cache_fd_free(cache_data_fd);
+        mmap_cache_fd_free(cache_entry_fd);
+        mmap_cache_fd_free(cache_entry_array_fd);
 
         if (first_contained)
                 *first_contained = le64toh(f->header->head_entry_realtime);
@@ -1303,29 +1379,20 @@
         if (show_progress)
                 flush_progress();
 
-        log_error("File corruption detected at %s:"OFSfmt" (of %llu bytes, %"PRIu64"%%).",
+        log_error("File corruption detected at %s:%"PRIu64" (of %"PRIu64" bytes, %"PRIu64"%%).",
                   f->path,
                   p,
-                  (unsigned long long) f->last_stat.st_size,
-                  100 * p / f->last_stat.st_size);
-
-        if (data_fd >= 0)
-                safe_close(data_fd);
-
-        if (entry_fd >= 0)
-                safe_close(entry_fd);
-
-        if (entry_array_fd >= 0)
-                safe_close(entry_array_fd);
+                  (uint64_t) f->last_stat.st_size,
+                  100U * p / (uint64_t) f->last_stat.st_size);
 
         if (cache_data_fd)
-                mmap_cache_free_fd(f->mmap, cache_data_fd);
+                mmap_cache_fd_free(cache_data_fd);
 
         if (cache_entry_fd)
-                mmap_cache_free_fd(f->mmap, cache_entry_fd);
+                mmap_cache_fd_free(cache_entry_fd);
 
         if (cache_entry_array_fd)
-                mmap_cache_free_fd(f->mmap, cache_entry_array_fd);
+                mmap_cache_fd_free(cache_entry_array_fd);
 
         return r;
 }
diff --git a/src/libsystemd/sd-journal/mmap-cache.c b/src/libsystemd/sd-journal/mmap-cache.c
index 02d2d72..82407f9 100644
--- a/src/libsystemd/sd-journal/mmap-cache.c
+++ b/src/libsystemd/sd-journal/mmap-cache.c
@@ -38,8 +38,6 @@
 };
 
 struct Context {
-        MMapCache *cache;
-        unsigned id;
         Window *window;
 
         LIST_FIELDS(Context, by_window);
@@ -60,10 +58,11 @@
         unsigned n_context_cache_hit, n_window_list_hit, n_missed;
 
         Hashmap *fds;
-        Context *contexts[MMAP_CACHE_MAX_CONTEXTS];
 
         LIST_HEAD(Window, unused);
         Window *last_unused;
+
+        Context contexts[MMAP_CACHE_MAX_CONTEXTS];
 };
 
 #define WINDOWS_MIN 64
@@ -87,7 +86,6 @@
 }
 
 static void window_unlink(Window *w) {
-        Context *c;
 
         assert(w);
 
@@ -186,9 +184,10 @@
         return w;
 }
 
-static void context_detach_window(Context *c) {
+static void context_detach_window(MMapCache *m, Context *c) {
         Window *w;
 
+        assert(m);
         assert(c);
 
         if (!c->window)
@@ -204,29 +203,30 @@
                  * by SIGSEGV. */
                 window_free(w);
 #else
-                LIST_PREPEND(unused, c->cache->unused, w);
-                if (!c->cache->last_unused)
-                        c->cache->last_unused = w;
+                LIST_PREPEND(unused, m->unused, w);
+                if (!m->last_unused)
+                        m->last_unused = w;
 
                 w->in_unused = true;
 #endif
         }
 }
 
-static void context_attach_window(Context *c, Window *w) {
+static void context_attach_window(MMapCache *m, Context *c, Window *w) {
+        assert(m);
         assert(c);
         assert(w);
 
         if (c->window == w)
                 return;
 
-        context_detach_window(c);
+        context_detach_window(m, c);
 
         if (w->in_unused) {
                 /* Used again? */
-                if (c->cache->last_unused == w)
-                        c->cache->last_unused = w->unused_prev;
-                LIST_REMOVE(unused, c->cache->unused, w);
+                if (m->last_unused == w)
+                        m->last_unused = w->unused_prev;
+                LIST_REMOVE(unused, m->unused, w);
 
                 w->in_unused = false;
         }
@@ -235,49 +235,11 @@
         LIST_PREPEND(by_window, w->contexts, c);
 }
 
-static Context *context_add(MMapCache *m, unsigned id) {
-        Context *c;
-
-        assert(m);
-
-        c = m->contexts[id];
-        if (c)
-                return c;
-
-        c = new0(Context, 1);
-        if (!c)
-                return NULL;
-
-        c->cache = m;
-        c->id = id;
-
-        assert(!m->contexts[id]);
-        m->contexts[id] = c;
-
-        return c;
-}
-
-static void context_free(Context *c) {
-        assert(c);
-
-        context_detach_window(c);
-
-        if (c->cache) {
-                assert(c->cache->contexts[c->id] == c);
-                c->cache->contexts[c->id] = NULL;
-        }
-
-        free(c);
-}
-
 static MMapCache *mmap_cache_free(MMapCache *m) {
-        int i;
-
         assert(m);
 
-        for (i = 0; i < MMAP_CACHE_MAX_CONTEXTS; i++)
-                if (m->contexts[i])
-                        context_free(m->contexts[i]);
+        for (int i = 0; i < MMAP_CACHE_MAX_CONTEXTS; i++)
+                context_detach_window(m, &m->contexts[i]);
 
         hashmap_free(m->fds);
 
@@ -300,35 +262,27 @@
 }
 
 static int try_context(
-                MMapCache *m,
                 MMapFileDescriptor *f,
-                unsigned context,
+                Context *c,
                 bool keep_always,
                 uint64_t offset,
                 size_t size,
                 void **ret) {
 
-        Context *c;
-
-        assert(m);
-        assert(m->n_ref > 0);
         assert(f);
+        assert(f->cache);
+        assert(f->cache->n_ref > 0);
+        assert(c);
         assert(size > 0);
         assert(ret);
 
-        c = m->contexts[context];
-        if (!c)
-                return 0;
-
-        assert(c->id == context);
-
         if (!c->window)
                 return 0;
 
         if (!window_matches_fd(c->window, f, offset, size)) {
 
                 /* Drop the reference to the window, since it's unnecessary now */
-                context_detach_window(c);
+                context_detach_window(f->cache, c);
                 return 0;
         }
 
@@ -338,53 +292,51 @@
         c->window->keep_always = c->window->keep_always || keep_always;
 
         *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset);
+        f->cache->n_context_cache_hit++;
 
         return 1;
 }
 
 static int find_mmap(
-                MMapCache *m,
                 MMapFileDescriptor *f,
-                unsigned context,
+                Context *c,
                 bool keep_always,
                 uint64_t offset,
                 size_t size,
                 void **ret) {
 
-        Window *w;
-        Context *c;
+        Window *found = NULL;
 
-        assert(m);
-        assert(m->n_ref > 0);
         assert(f);
+        assert(f->cache);
+        assert(f->cache->n_ref > 0);
+        assert(c);
         assert(size > 0);
 
         if (f->sigbus)
                 return -EIO;
 
         LIST_FOREACH(by_fd, w, f->windows)
-                if (window_matches(w, offset, size))
+                if (window_matches(w, offset, size)) {
+                        found = w;
                         break;
+                }
 
-        if (!w)
+        if (!found)
                 return 0;
 
-        c = context_add(m, context);
-        if (!c)
-                return -ENOMEM;
+        context_attach_window(f->cache, c, found);
+        found->keep_always = found->keep_always || keep_always;
 
-        context_attach_window(c, w);
-        w->keep_always = w->keep_always || keep_always;
-
-        *ret = (uint8_t*) w->ptr + (offset - w->offset);
+        *ret = (uint8_t*) found->ptr + (offset - found->offset);
+        f->cache->n_window_list_hit++;
 
         return 1;
 }
 
-static int mmap_try_harder(MMapCache *m, void *addr, MMapFileDescriptor *f, int flags, uint64_t offset, size_t size, void **res) {
+static int mmap_try_harder(MMapFileDescriptor *f, void *addr, int flags, uint64_t offset, size_t size, void **res) {
         void *ptr;
 
-        assert(m);
         assert(f);
         assert(res);
 
@@ -397,7 +349,7 @@
                 if (errno != ENOMEM)
                         return negative_errno();
 
-                r = make_room(m);
+                r = make_room(f->cache);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -409,9 +361,8 @@
 }
 
 static int add_mmap(
-                MMapCache *m,
                 MMapFileDescriptor *f,
-                unsigned context,
+                Context *c,
                 bool keep_always,
                 uint64_t offset,
                 size_t size,
@@ -419,14 +370,14 @@
                 void **ret) {
 
         uint64_t woffset, wsize;
-        Context *c;
         Window *w;
         void *d;
         int r;
 
-        assert(m);
-        assert(m->n_ref > 0);
         assert(f);
+        assert(f->cache);
+        assert(f->cache->n_ref > 0);
+        assert(c);
         assert(size > 0);
         assert(ret);
 
@@ -459,19 +410,15 @@
                         wsize = PAGE_ALIGN(st->st_size - woffset);
         }
 
-        r = mmap_try_harder(m, NULL, f, MAP_SHARED, woffset, wsize, &d);
+        r = mmap_try_harder(f, NULL, MAP_SHARED, woffset, wsize, &d);
         if (r < 0)
                 return r;
 
-        c = context_add(m, context);
-        if (!c)
-                goto outofmem;
-
-        w = window_add(m, f, keep_always, woffset, wsize, d);
+        w = window_add(f->cache, f, keep_always, woffset, wsize, d);
         if (!w)
                 goto outofmem;
 
-        context_attach_window(c, w);
+        context_attach_window(f->cache, c, w);
 
         *ret = (uint8_t*) w->ptr + (offset - w->offset);
 
@@ -482,8 +429,7 @@
         return -ENOMEM;
 }
 
-int mmap_cache_get(
-                MMapCache *m,
+int mmap_cache_fd_get(
                 MMapFileDescriptor *f,
                 unsigned context,
                 bool keep_always,
@@ -492,33 +438,32 @@
                 struct stat *st,
                 void **ret) {
 
+        Context *c;
         int r;
 
-        assert(m);
-        assert(m->n_ref > 0);
         assert(f);
+        assert(f->cache);
+        assert(f->cache->n_ref > 0);
         assert(size > 0);
         assert(ret);
         assert(context < MMAP_CACHE_MAX_CONTEXTS);
 
+        c = &f->cache->contexts[context];
+
         /* Check whether the current context is the right one already */
-        r = try_context(m, f, context, keep_always, offset, size, ret);
-        if (r != 0) {
-                m->n_context_cache_hit++;
+        r = try_context(f, c, keep_always, offset, size, ret);
+        if (r != 0)
                 return r;
-        }
 
         /* Search for a matching mmap */
-        r = find_mmap(m, f, context, keep_always, offset, size, ret);
-        if (r != 0) {
-                m->n_window_list_hit++;
+        r = find_mmap(f, c, keep_always, offset, size, ret);
+        if (r != 0)
                 return r;
-        }
 
-        m->n_missed++;
+        f->cache->n_missed++;
 
         /* Create a new mmap */
-        return add_mmap(m, f, context, keep_always, offset, size, st, ret);
+        return add_mmap(f, c, keep_always, offset, size, st, ret);
 }
 
 void mmap_cache_stats_log_debug(MMapCache *m) {
@@ -550,8 +495,6 @@
 
                 ours = false;
                 HASHMAP_FOREACH(f, m->fds) {
-                        Window *w;
-
                         LIST_FOREACH(by_fd, w, f->windows) {
                                 if ((uint8_t*) addr >= (uint8_t*) w->ptr &&
                                     (uint8_t*) addr < (uint8_t*) w->ptr + w->size) {
@@ -579,8 +522,6 @@
                 return;
 
         HASHMAP_FOREACH(f, m->fds) {
-                Window *w;
-
                 if (!f->sigbus)
                         continue;
 
@@ -589,11 +530,10 @@
         }
 }
 
-bool mmap_cache_got_sigbus(MMapCache *m, MMapFileDescriptor *f) {
-        assert(m);
+bool mmap_cache_fd_got_sigbus(MMapFileDescriptor *f) {
         assert(f);
 
-        mmap_cache_process_sigbus(m);
+        mmap_cache_process_sigbus(f->cache);
 
         return f->sigbus;
 }
@@ -617,32 +557,40 @@
         if (!f)
                 return NULL;
 
-        f->cache = m;
-        f->fd = fd;
-        f->prot = prot;
-
         r = hashmap_put(m->fds, FD_TO_PTR(fd), f);
         if (r < 0)
                 return mfree(f);
 
+        f->cache = mmap_cache_ref(m);
+        f->fd = fd;
+        f->prot = prot;
+
         return f;
 }
 
-void mmap_cache_free_fd(MMapCache *m, MMapFileDescriptor *f) {
-        assert(m);
+void mmap_cache_fd_free(MMapFileDescriptor *f) {
         assert(f);
+        assert(f->cache);
 
         /* Make sure that any queued SIGBUS are first dispatched, so
          * that we don't end up with a SIGBUS entry we cannot relate
          * to any existing memory map */
 
-        mmap_cache_process_sigbus(m);
+        mmap_cache_process_sigbus(f->cache);
 
         while (f->windows)
                 window_free(f->windows);
 
-        if (f->cache)
+        if (f->cache) {
                 assert_se(hashmap_remove(f->cache->fds, FD_TO_PTR(f->fd)));
+                f->cache = mmap_cache_unref(f->cache);
+        }
 
         free(f);
 }
+
+MMapCache* mmap_cache_fd_cache(MMapFileDescriptor *f) {
+        assert(f);
+
+        return f->cache;
+}
diff --git a/src/libsystemd/sd-journal/mmap-cache.h b/src/libsystemd/sd-journal/mmap-cache.h
index 705e56e..4769414 100644
--- a/src/libsystemd/sd-journal/mmap-cache.h
+++ b/src/libsystemd/sd-journal/mmap-cache.h
@@ -13,9 +13,9 @@
 MMapCache* mmap_cache_new(void);
 MMapCache* mmap_cache_ref(MMapCache *m);
 MMapCache* mmap_cache_unref(MMapCache *m);
+DEFINE_TRIVIAL_CLEANUP_FUNC(MMapCache*, mmap_cache_unref);
 
-int mmap_cache_get(
-        MMapCache *m,
+int mmap_cache_fd_get(
         MMapFileDescriptor *f,
         unsigned context,
         bool keep_always,
@@ -23,9 +23,10 @@
         size_t size,
         struct stat *st,
         void **ret);
-MMapFileDescriptor * mmap_cache_add_fd(MMapCache *m, int fd, int prot);
-void mmap_cache_free_fd(MMapCache *m, MMapFileDescriptor *f);
+MMapFileDescriptor* mmap_cache_add_fd(MMapCache *m, int fd, int prot);
+MMapCache* mmap_cache_fd_cache(MMapFileDescriptor *f);
+void mmap_cache_fd_free(MMapFileDescriptor *f);
 
 void mmap_cache_stats_log_debug(MMapCache *m);
 
-bool mmap_cache_got_sigbus(MMapCache *m, MMapFileDescriptor *f);
+bool mmap_cache_fd_got_sigbus(MMapFileDescriptor *f);
diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c
index 3cdc629..9947947 100644
--- a/src/libsystemd/sd-journal/sd-journal.c
+++ b/src/libsystemd/sd-journal/sd-journal.c
@@ -25,6 +25,7 @@
 #include "hashmap.h"
 #include "hostname-util.h"
 #include "id128-util.h"
+#include "inotify-util.h"
 #include "io-util.h"
 #include "journal-def.h"
 #include "journal-file.h"
@@ -41,8 +42,6 @@
 #include "strv.h"
 #include "syslog-util.h"
 
-#define JOURNAL_FILES_MAX 7168
-
 #define JOURNAL_FILES_RECHECK_USEC (2 * USEC_PER_SEC)
 
 /* The maximum size of variable values we'll expand in catalog entries. We bind this to PATH_MAX for now, as
@@ -146,9 +145,7 @@
 }
 
 static int match_is_valid(const void *data, size_t size) {
-        const char *b, *p;
-
-        assert(data);
+        const char *b = ASSERT_PTR(data);
 
         if (size < 2)
                 return false;
@@ -156,8 +153,7 @@
         if (((char*) data)[0] == '_' && ((char*) data)[1] == '_')
                 return false;
 
-        b = data;
-        for (p = b; p < b + size; p++) {
+        for (const char *p = b; p < b + size; p++) {
 
                 if (*p == '=')
                         return p > b;
@@ -168,7 +164,7 @@
                 if (*p >= 'A' && *p <= 'Z')
                         continue;
 
-                if (*p >= '0' && *p <= '9')
+                if (ascii_isdigit(*p))
                         continue;
 
                 return false;
@@ -179,9 +175,8 @@
 
 static bool same_field(const void *_a, size_t s, const void *_b, size_t t) {
         const uint8_t *a = _a, *b = _b;
-        size_t j;
 
-        for (j = 0; j < s && j < t; j++) {
+        for (size_t j = 0; j < s && j < t; j++) {
 
                 if (a[j] != b[j])
                         return false;
@@ -190,7 +185,7 @@
                         return true;
         }
 
-        assert_not_reached("\"=\" not found");
+        assert_not_reached();
 }
 
 static Match *match_new(Match *p, MatchType t) {
@@ -232,7 +227,7 @@
 }
 
 _public_ int sd_journal_add_match(sd_journal *j, const void *data, size_t size) {
-        Match *l3, *l4, *add_here = NULL, *m = NULL;
+        Match *add_here = NULL, *m = NULL;
         uint64_t hash;
 
         assert_return(j, -EINVAL);
@@ -370,8 +365,7 @@
 }
 
 static char *match_make_string(Match *m) {
-        char *p = NULL, *r;
-        Match *i;
+        _cleanup_free_ char *p = NULL;
         bool enclose = false;
 
         if (!m)
@@ -381,34 +375,25 @@
                 return cescape_length(m->data, m->size);
 
         LIST_FOREACH(matches, i, m->matches) {
-                char *t, *k;
+                _cleanup_free_ char *t = NULL;
 
                 t = match_make_string(i);
                 if (!t)
-                        return mfree(p);
+                        return NULL;
 
                 if (p) {
-                        k = strjoin(p, m->type == MATCH_OR_TERM ? " OR " : " AND ", t);
-                        free(p);
-                        free(t);
-
-                        if (!k)
+                        if (!strextend(&p, m->type == MATCH_OR_TERM ? " OR " : " AND ", t))
                                 return NULL;
 
-                        p = k;
-
                         enclose = true;
                 } else
-                        p = t;
+                        p = TAKE_PTR(t);
         }
 
-        if (enclose) {
-                r = strjoin("(", p, ")");
-                free(p);
-                return r;
-        }
+        if (enclose)
+                return strjoin("(", p, ")");
 
-        return p;
+        return TAKE_PTR(p);
 }
 
 char *journal_make_match_string(sd_journal *j) {
@@ -493,14 +478,14 @@
 
         int r;
         uint64_t np = 0;
-        Object *n;
 
         assert(j);
         assert(m);
         assert(f);
 
         if (m->type == MATCH_DISCRETE) {
-                uint64_t dp, hash;
+                Object *d;
+                uint64_t hash;
 
                 /* If the keyed hash logic is used, we need to calculate the hash fresh per file. Otherwise
                  * we can use what we pre-calculated. */
@@ -509,14 +494,13 @@
                 else
                         hash = m->hash;
 
-                r = journal_file_find_data_object_with_hash(f, m->data, m->size, hash, NULL, &dp);
+                r = journal_file_find_data_object_with_hash(f, m->data, m->size, hash, &d, NULL);
                 if (r <= 0)
                         return r;
 
-                return journal_file_move_to_entry_by_offset_for_data(f, dp, after_offset, direction, ret, offset);
+                return journal_file_move_to_entry_by_offset_for_data(f, d, after_offset, direction, ret, offset);
 
         } else if (m->type == MATCH_OR_TERM) {
-                Match *i;
 
                 /* Find the earliest match beyond after_offset */
 
@@ -536,7 +520,7 @@
                         return 0;
 
         } else if (m->type == MATCH_AND_TERM) {
-                Match *i, *last_moved;
+                Match *last_moved;
 
                 /* Always jump to the next matching entry and repeat
                  * this until we find an offset that matches for all
@@ -569,12 +553,12 @@
 
         assert(np > 0);
 
-        r = journal_file_move_to_object(f, OBJECT_ENTRY, np, &n);
-        if (r < 0)
-                return r;
+        if (ret) {
+                r = journal_file_move_to_object(f, OBJECT_ENTRY, np, ret);
+                if (r < 0)
+                        return r;
+        }
 
-        if (ret)
-                *ret = n;
         if (offset)
                 *offset = np;
 
@@ -596,6 +580,7 @@
         assert(f);
 
         if (m->type == MATCH_DISCRETE) {
+                Object *d;
                 uint64_t dp, hash;
 
                 if (JOURNAL_HEADER_KEYED_HASH(f->header))
@@ -603,32 +588,35 @@
                 else
                         hash = m->hash;
 
-                r = journal_file_find_data_object_with_hash(f, m->data, m->size, hash, NULL, &dp);
+                r = journal_file_find_data_object_with_hash(f, m->data, m->size, hash, &d, &dp);
                 if (r <= 0)
                         return r;
 
                 /* FIXME: missing: find by monotonic */
 
                 if (j->current_location.type == LOCATION_HEAD)
-                        return journal_file_next_entry_for_data(f, NULL, 0, dp, DIRECTION_DOWN, ret, offset);
+                        return journal_file_next_entry_for_data(f, d, DIRECTION_DOWN, ret, offset);
                 if (j->current_location.type == LOCATION_TAIL)
-                        return journal_file_next_entry_for_data(f, NULL, 0, dp, DIRECTION_UP, ret, offset);
+                        return journal_file_next_entry_for_data(f, d, DIRECTION_UP, ret, offset);
                 if (j->current_location.seqnum_set && sd_id128_equal(j->current_location.seqnum_id, f->header->seqnum_id))
-                        return journal_file_move_to_entry_by_seqnum_for_data(f, dp, j->current_location.seqnum, direction, ret, offset);
+                        return journal_file_move_to_entry_by_seqnum_for_data(f, d, j->current_location.seqnum, direction, ret, offset);
                 if (j->current_location.monotonic_set) {
-                        r = journal_file_move_to_entry_by_monotonic_for_data(f, dp, j->current_location.boot_id, j->current_location.monotonic, direction, ret, offset);
+                        r = journal_file_move_to_entry_by_monotonic_for_data(f, d, j->current_location.boot_id, j->current_location.monotonic, direction, ret, offset);
                         if (r != -ENOENT)
                                 return r;
+
+                        /* The data object might have been invalidated. */
+                        r = journal_file_move_to_object(f, OBJECT_DATA, dp, &d);
+                        if (r < 0)
+                                return r;
                 }
                 if (j->current_location.realtime_set)
-                        return journal_file_move_to_entry_by_realtime_for_data(f, dp, j->current_location.realtime, direction, ret, offset);
+                        return journal_file_move_to_entry_by_realtime_for_data(f, d, j->current_location.realtime, direction, ret, offset);
 
-                return journal_file_next_entry_for_data(f, NULL, 0, dp, direction, ret, offset);
+                return journal_file_next_entry_for_data(f, d, direction, ret, offset);
 
         } else if (m->type == MATCH_OR_TERM) {
                 uint64_t np = 0;
-                Object *n;
-                Match *i;
 
                 /* Find the earliest match */
 
@@ -647,19 +635,18 @@
                 if (np == 0)
                         return 0;
 
-                r = journal_file_move_to_object(f, OBJECT_ENTRY, np, &n);
-                if (r < 0)
-                        return r;
+                if (ret) {
+                        r = journal_file_move_to_object(f, OBJECT_ENTRY, np, ret);
+                        if (r < 0)
+                                return r;
+                }
 
-                if (ret)
-                        *ret = n;
                 if (offset)
                         *offset = np;
 
                 return 1;
 
         } else {
-                Match *i;
                 uint64_t np = 0;
 
                 assert(m->type == MATCH_AND_TERM);
@@ -816,7 +803,7 @@
 
 static int real_journal_next(sd_journal *j, direction_t direction) {
         JournalFile *new_file = NULL;
-        unsigned i, n_files;
+        unsigned n_files;
         const void **files;
         Object *o;
         int r;
@@ -828,7 +815,7 @@
         if (r < 0)
                 return r;
 
-        for (i = 0; i < n_files; i++) {
+        for (unsigned i = 0; i < n_files; i++) {
                 JournalFile *f = (JournalFile *)files[i];
                 bool found;
 
@@ -921,7 +908,6 @@
 _public_ int sd_journal_get_cursor(sd_journal *j, char **cursor) {
         Object *o;
         int r;
-        char bid[SD_ID128_STRING_MAX], sid[SD_ID128_STRING_MAX];
 
         assert_return(j, -EINVAL);
         assert_return(!journal_pid_changed(j), -ECHILD);
@@ -934,13 +920,10 @@
         if (r < 0)
                 return r;
 
-        sd_id128_to_string(j->current_file->header->seqnum_id, sid);
-        sd_id128_to_string(o->entry.boot_id, bid);
-
         if (asprintf(cursor,
                      "s=%s;i=%"PRIx64";b=%s;m=%"PRIx64";t=%"PRIx64";x=%"PRIx64,
-                     sid, le64toh(o->entry.seqnum),
-                     bid, le64toh(o->entry.monotonic),
+                     SD_ID128_TO_STRING(j->current_file->header->seqnum_id), le64toh(o->entry.seqnum),
+                     SD_ID128_TO_STRING(o->entry.boot_id), le64toh(o->entry.monotonic),
                      le64toh(o->entry.realtime),
                      le64toh(o->entry.xor_hash)) < 0)
                 return -ENOMEM;
@@ -992,6 +975,8 @@
                 case 'b':
                         boot_id_set = true;
                         r = sd_id128_from_string(word + 2, &boot_id);
+                        if (r < 0)
+                                return r;
                         break;
 
                 case 'm':
@@ -1270,90 +1255,92 @@
                 int fd,
                 const char *path) {
 
-        bool close_fd = false;
+        _cleanup_close_ int our_fd = -EBADF;
         JournalFile *f;
         struct stat st;
-        int r, k;
+        int r;
 
         assert(j);
         assert(fd >= 0 || path);
 
         if (fd < 0) {
+                assert(path);  /* For gcc. */
                 if (j->toplevel_fd >= 0)
                         /* If there's a top-level fd defined make the path relative, explicitly, since otherwise
                          * openat() ignores the first argument. */
 
-                        fd = openat(j->toplevel_fd, skip_slash(path), O_RDONLY|O_CLOEXEC|O_NONBLOCK);
+                        fd = our_fd = openat(j->toplevel_fd, skip_slash(path), O_RDONLY|O_CLOEXEC|O_NONBLOCK);
                 else
-                        fd = open(path, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
+                        fd = our_fd = open(path, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
                 if (fd < 0) {
                         r = log_debug_errno(errno, "Failed to open journal file %s: %m", path);
-                        goto finish;
+                        goto error;
                 }
 
-                close_fd = true;
-
                 r = fd_nonblock(fd, false);
                 if (r < 0) {
                         r = log_debug_errno(errno, "Failed to turn off O_NONBLOCK for %s: %m", path);
-                        goto finish;
+                        goto error;
                 }
         }
 
         if (fstat(fd, &st) < 0) {
-                r = log_debug_errno(errno, "Failed to fstat file '%s': %m", path);
-                goto finish;
+                r = log_debug_errno(errno, "Failed to fstat %s: %m", path ?: "fd");
+                goto error;
         }
 
         r = stat_verify_regular(&st);
         if (r < 0) {
-                log_debug_errno(r, "Refusing to open '%s', as it is not a regular file.", path);
-                goto finish;
+                log_debug_errno(r, "Refusing to open %s: %m", path ?: "fd");
+                goto error;
         }
 
-        f = ordered_hashmap_get(j->files, path);
-        if (f) {
-                if (f->last_stat.st_dev == st.st_dev &&
-                    f->last_stat.st_ino == st.st_ino) {
+        if (path) {
+                f = ordered_hashmap_get(j->files, path);
+                if (f) {
+                        if (stat_inode_same(&f->last_stat, &st)) {
+                                /* We already track this file, under the same path and with the same
+                                 * device/inode numbers, it's hence really the same. Mark this file as seen
+                                 * in this generation. This is used to GC old files in process_q_overflow()
+                                 * to detect journal files that are still there and discern them from those
+                                 * which are gone. */
 
-                        /* We already track this file, under the same path and with the same device/inode numbers, it's
-                         * hence really the same. Mark this file as seen in this generation. This is used to GC old
-                         * files in process_q_overflow() to detect journal files that are still there and discern them
-                         * from those which are gone. */
+                                f->last_seen_generation = j->generation;
+                                return 0;
+                        }
 
-                        f->last_seen_generation = j->generation;
-                        r = 0;
-                        goto finish;
+                        /* So we tracked a file under this name, but it has a different inode/device. In that
+                         * case, it got replaced (probably due to rotation?), let's drop it hence from our
+                         * list. */
+                        remove_file_real(j, f);
+                        f = NULL;
                 }
-
-                /* So we tracked a file under this name, but it has a different inode/device. In that case, it got
-                 * replaced (probably due to rotation?), let's drop it hence from our list. */
-                remove_file_real(j, f);
-                f = NULL;
         }
 
         if (ordered_hashmap_size(j->files) >= JOURNAL_FILES_MAX) {
-                log_debug("Too many open journal files, not adding %s.", path);
-                r = -ETOOMANYREFS;
-                goto finish;
+                r = log_debug_errno(SYNTHETIC_ERRNO(ETOOMANYREFS),
+                                    "Too many open journal files, not adding %s.", path ?: "fd");
+                goto error;
         }
 
-        r = journal_file_open(fd, path, O_RDONLY, 0, false, 0, false, NULL, j->mmap, NULL, NULL, &f);
+        r = journal_file_open(fd, path, O_RDONLY, 0, 0, 0, NULL, j->mmap, NULL, &f);
         if (r < 0) {
-                log_debug_errno(r, "Failed to open journal file %s: %m", path);
-                goto finish;
+                log_debug_errno(r, "Failed to open journal file %s: %m", path ?: "from fd");
+                goto error;
         }
 
         /* journal_file_dump(f); */
 
+        /* journal_file_open() generates an replacement fname if necessary, so we can use f->path. */
         r = ordered_hashmap_put(j->files, f->path, f);
         if (r < 0) {
-                f->close_fd = false; /* make sure journal_file_close() doesn't close the caller's fd (or our own). We'll let the caller do that, or ourselves */
+                f->close_fd = false; /* Make sure journal_file_close() doesn't close the caller's fd
+                                      * (or our own). The caller or we will do that ourselves. */
                 (void) journal_file_close(f);
-                goto finish;
+                goto error;
         }
 
-        close_fd = false; /* the fd is now owned by the JournalFile object */
+        TAKE_FD(our_fd); /* the fd is now owned by the JournalFile object */
 
         f->last_seen_generation = j->generation;
 
@@ -1364,18 +1351,10 @@
 
         log_debug("File %s added.", f->path);
 
-        r = 0;
+        return 0;
 
-finish:
-        if (close_fd)
-                safe_close(fd);
-
-        if (r < 0) {
-                k = journal_put_error(j, r, path);
-                if (k < 0)
-                        return k;
-        }
-
+error:
+        (void) journal_put_error(j, r, path);   /* path==NULL is OK. */
         return r;
 }
 
@@ -1384,7 +1363,7 @@
                 const char *prefix,
                 const char *filename) {
 
-        const char *path;
+        _cleanup_free_ char *path = NULL;
 
         assert(j);
         assert(prefix);
@@ -1396,28 +1375,35 @@
         if (!file_type_wanted(j->flags, filename))
                 return 0;
 
-        path = prefix_roota(prefix, filename);
+        path = path_join(prefix, filename);
+        if (!path)
+                return -ENOMEM;
+
         return add_any_file(j, -1, path);
 }
 
-static void remove_file_by_name(
+static int remove_file_by_name(
                 sd_journal *j,
                 const char *prefix,
                 const char *filename) {
 
-        const char *path;
+        _cleanup_free_ char *path = NULL;
         JournalFile *f;
 
         assert(j);
         assert(prefix);
         assert(filename);
 
-        path = prefix_roota(prefix, filename);
+        path = path_join(prefix, filename);
+        if (!path)
+                return -ENOMEM;
+
         f = ordered_hashmap_get(j->files, path);
         if (!f)
-                return;
+                return 0;
 
         remove_file_real(j, f);
+        return 1;
 }
 
 static void remove_file_real(sd_journal *j, JournalFile *f) {
@@ -1472,7 +1458,7 @@
                 if (!log_namespace_name_valid(e + 1))
                         return false;
 
-                k = strndupa(fn, e - fn);
+                k = strndupa_safe(fn, e - fn);
                 r = sd_id128_from_string(k, &id);
         } else
                 r = sd_id128_from_string(fn, &id);
@@ -1497,7 +1483,7 @@
                 if (!streq(e + 1, namespace))
                         return false;
 
-                k = strndupa(fn, e - fn);
+                k = strndupa_safe(fn, e - fn);
                 return id128_is_valid(k);
         }
 
@@ -1534,7 +1520,7 @@
         if (!e)
                 return id128_is_valid(de->d_name); /* No namespace */
 
-        n = strndupa(de->d_name, e - de->d_name);
+        n = strndupa_safe(de->d_name, e - de->d_name);
         if (!id128_is_valid(n))
                 return false;
 
@@ -1564,14 +1550,11 @@
 static int add_directory(sd_journal *j, const char *prefix, const char *dirname);
 
 static void directory_enumerate(sd_journal *j, Directory *m, DIR *d) {
-        struct dirent *de;
-
         assert(j);
         assert(m);
         assert(d);
 
         FOREACH_DIRENT_ALL(de, d, goto fail) {
-
                 if (dirent_is_journal_file(de))
                         (void) add_file_by_name(j, m->path, de->d_name);
 
@@ -1580,7 +1563,6 @@
         }
 
         return;
-
 fail:
         log_debug_errno(errno, "Failed to enumerate directory %s, ignoring: %m", m->path);
 }
@@ -1737,7 +1719,7 @@
                         goto fail;
                 }
         } else {
-                _cleanup_close_ int dfd = -1;
+                _cleanup_close_ int dfd = -EBADF;
 
                 /* If there's no path specified, then we use the top-level fd itself. We duplicate the fd here, since
                  * opendir() will take possession of the fd, and close it, which we don't want. */
@@ -1835,7 +1817,6 @@
         static const char search_paths[] =
                 "/run/log/journal\0"
                 "/var/log/journal\0";
-        const char *p;
 
         assert(j);
 
@@ -1864,9 +1845,9 @@
                 _cleanup_free_ char *dir = NULL;
                 int r;
 
-                dir = dirname_malloc(f->path);
-                if (!dir)
-                        return -ENOMEM;
+                r = path_extract_directory(f->path, &dir);
+                if (r < 0)
+                        return r;
 
                 r = add_directory(j, dir, NULL);
                 if (r < 0)
@@ -1891,15 +1872,17 @@
 static sd_journal *journal_new(int flags, const char *path, const char *namespace) {
         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
 
-        j = new0(sd_journal, 1);
+        j = new(sd_journal, 1);
         if (!j)
                 return NULL;
 
-        j->original_pid = getpid_cached();
-        j->toplevel_fd = -1;
-        j->inotify_fd = -1;
-        j->flags = flags;
-        j->data_threshold = DEFAULT_DATA_THRESHOLD;
+        *j = (sd_journal) {
+                .original_pid = getpid_cached(),
+                .toplevel_fd = -EBADF,
+                .inotify_fd = -EBADF,
+                .flags = flags,
+                .data_threshold = DEFAULT_DATA_THRESHOLD,
+        };
 
         if (path) {
                 char *t;
@@ -2036,7 +2019,6 @@
 
 _public_ int sd_journal_open_files(sd_journal **ret, const char **paths, int flags) {
         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
-        const char **path;
         int r;
 
         assert_return(ret, -EINVAL);
@@ -2097,7 +2079,6 @@
 _public_ int sd_journal_open_files_fd(sd_journal **ret, int fds[], unsigned n_fds, int flags) {
         JournalFile *f;
         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
-        unsigned i;
         int r;
 
         assert_return(ret, -EINVAL);
@@ -2108,7 +2089,7 @@
         if (!j)
                 return -ENOMEM;
 
-        for (i = 0; i < n_fds; i++) {
+        for (unsigned i = 0; i < n_fds; i++) {
                 struct stat st;
 
                 if (fds[i] < 0) {
@@ -2183,18 +2164,16 @@
 }
 
 _public_ int sd_journal_get_realtime_usec(sd_journal *j, uint64_t *ret) {
-        Object *o;
         JournalFile *f;
+        Object *o;
         int r;
 
         assert_return(j, -EINVAL);
         assert_return(!journal_pid_changed(j), -ECHILD);
-        assert_return(ret, -EINVAL);
 
         f = j->current_file;
         if (!f)
                 return -EADDRNOTAVAIL;
-
         if (f->current_offset <= 0)
                 return -EADDRNOTAVAIL;
 
@@ -2202,13 +2181,19 @@
         if (r < 0)
                 return r;
 
-        *ret = le64toh(o->entry.realtime);
+        uint64_t t = le64toh(o->entry.realtime);
+        if (!VALID_REALTIME(t))
+                return -EBADMSG;
+
+        if (ret)
+                *ret = t;
+
         return 0;
 }
 
 _public_ int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id128_t *ret_boot_id) {
-        Object *o;
         JournalFile *f;
+        Object *o;
         int r;
 
         assert_return(j, -EINVAL);
@@ -2217,7 +2202,6 @@
         f = j->current_file;
         if (!f)
                 return -EADDRNOTAVAIL;
-
         if (f->current_offset <= 0)
                 return -EADDRNOTAVAIL;
 
@@ -2238,15 +2222,17 @@
                         return -ESTALE;
         }
 
+        uint64_t t = le64toh(o->entry.monotonic);
+        if (!VALID_MONOTONIC(t))
+                return -EBADMSG;
+
         if (ret)
-                *ret = le64toh(o->entry.monotonic);
+                *ret = t;
 
         return 0;
 }
 
 static bool field_is_valid(const char *field) {
-        const char *p;
-
         assert(field);
 
         if (isempty(field))
@@ -2255,7 +2241,7 @@
         if (startswith(field, "__"))
                 return false;
 
-        for (p = field; *p; p++) {
+        for (const char *p = field; *p; p++) {
 
                 if (*p == '_')
                         continue;
@@ -2263,7 +2249,7 @@
                 if (*p >= 'A' && *p <= 'Z')
                         continue;
 
-                if (*p >= '0' && *p <= '9')
+                if (ascii_isdigit(*p))
                         continue;
 
                 return false;
@@ -2274,10 +2260,9 @@
 
 _public_ int sd_journal_get_data(sd_journal *j, const char *field, const void **data, size_t *size) {
         JournalFile *f;
-        uint64_t i, n;
         size_t field_length;
-        int r;
         Object *o;
+        int r;
 
         assert_return(j, -EINVAL);
         assert_return(!journal_pid_changed(j), -ECHILD);
@@ -2299,134 +2284,38 @@
 
         field_length = strlen(field);
 
-        n = journal_file_entry_n_items(o);
-        for (i = 0; i < n; i++) {
-                Object *d;
-                uint64_t p, l;
-                le64_t le_hash;
-                size_t t;
-                int compression;
+        uint64_t n = journal_file_entry_n_items(f, o);
+        for (uint64_t i = 0; i < n; i++) {
+                uint64_t p;
+                void *d;
+                size_t l;
 
-                p = le64toh(o->entry.items[i].object_offset);
-                le_hash = o->entry.items[i].hash;
-                r = journal_file_move_to_object(f, OBJECT_DATA, p, &d);
+                p = journal_file_entry_item_object_offset(f, o, i);
+                r = journal_file_data_payload(f, NULL, p, field, field_length, j->data_threshold, &d, &l);
+                if (r == 0)
+                        goto next;
                 if (IN_SET(r, -EADDRNOTAVAIL, -EBADMSG)) {
                         log_debug_errno(r, "Entry item %"PRIu64" data object is bad, skipping over it: %m", i);
-                        continue;
+                        goto next;
                 }
                 if (r < 0)
                         return r;
 
-                if (le_hash != d->data.hash) {
-                        log_debug("Entry item %"PRIu64" hash is bad, skipping over it.", i);
-                        continue;
-                }
+                *data = d;
+                *size = l;
 
-                l = le64toh(d->object.size) - offsetof(Object, data.payload);
+                return 0;
 
-                compression = d->object.flags & OBJECT_COMPRESSION_MASK;
-                if (compression) {
-#if HAVE_COMPRESSION
-                        r = decompress_startswith(compression,
-                                                  d->data.payload, l,
-                                                  &f->compress_buffer,
-                                                  field, field_length, '=');
-                        if (r < 0)
-                                log_debug_errno(r, "Cannot decompress %s object of length %"PRIu64" at offset "OFSfmt": %m",
-                                                object_compressed_to_string(compression), l, p);
-                        else if (r > 0) {
-
-                                size_t rsize;
-
-                                r = decompress_blob(compression,
-                                                    d->data.payload, l,
-                                                    &f->compress_buffer, &rsize,
-                                                    j->data_threshold);
-                                if (r < 0)
-                                        return r;
-
-                                *data = f->compress_buffer;
-                                *size = (size_t) rsize;
-
-                                return 0;
-                        }
-#else
-                        return -EPROTONOSUPPORT;
-#endif
-                } else if (l >= field_length+1 &&
-                           memcmp(d->data.payload, field, field_length) == 0 &&
-                           d->data.payload[field_length] == '=') {
-
-                        t = (size_t) l;
-
-                        if ((uint64_t) t != l)
-                                return -E2BIG;
-
-                        *data = d->data.payload;
-                        *size = t;
-
-                        return 0;
-                }
+        next:
+                /* journal_file_data_payload() may clear or overwrite cached object. */
+                r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
+                if (r < 0)
+                        return r;
         }
 
         return -ENOENT;
 }
 
-static int return_data(
-                sd_journal *j,
-                JournalFile *f,
-                Object *o,
-                const void **ret_data,
-                size_t *ret_size) {
-
-        size_t t;
-        uint64_t l;
-        int compression;
-
-        assert(j);
-        assert(f);
-
-        l = le64toh(READ_NOW(o->object.size));
-        if (l < offsetof(Object, data.payload))
-                return -EBADMSG;
-        l -= offsetof(Object, data.payload);
-
-        /* We can't read objects larger than 4G on a 32bit machine */
-        t = (size_t) l;
-        if ((uint64_t) t != l)
-                return -E2BIG;
-
-        compression = o->object.flags & OBJECT_COMPRESSION_MASK;
-        if (compression) {
-#if HAVE_COMPRESSION
-                size_t rsize;
-                int r;
-
-                r = decompress_blob(
-                                compression,
-                                o->data.payload, l,
-                                &f->compress_buffer, &rsize,
-                                j->data_threshold);
-                if (r < 0)
-                        return r;
-
-                if (ret_data)
-                        *ret_data = f->compress_buffer;
-                if (ret_size)
-                        *ret_size = (size_t) rsize;
-#else
-                return -EPROTONOSUPPORT;
-#endif
-        } else {
-                if (ret_data)
-                        *ret_data = o->data.payload;
-                if (ret_size)
-                        *ret_size = t;
-        }
-
-        return 0;
-}
-
 _public_ int sd_journal_enumerate_data(sd_journal *j, const void **data, size_t *size) {
         JournalFile *f;
         Object *o;
@@ -2448,36 +2337,33 @@
         if (r < 0)
                 return r;
 
-        for (uint64_t n = journal_file_entry_n_items(o); j->current_field < n; j->current_field++) {
+        for (uint64_t n = journal_file_entry_n_items(f, o); j->current_field < n; j->current_field++) {
                 uint64_t p;
-                le64_t le_hash;
+                void *d;
+                size_t l;
 
-                p = le64toh(o->entry.items[j->current_field].object_offset);
-                le_hash = o->entry.items[j->current_field].hash;
-                r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
+                p = journal_file_entry_item_object_offset(f, o, j->current_field);
+                r = journal_file_data_payload(f, NULL, p, NULL, 0, j->data_threshold, &d, &l);
                 if (IN_SET(r, -EADDRNOTAVAIL, -EBADMSG)) {
                         log_debug_errno(r, "Entry item %"PRIu64" data object is bad, skipping over it: %m", j->current_field);
-                        continue;
+                        goto next;
                 }
                 if (r < 0)
                         return r;
+                assert(r > 0);
 
-                if (le_hash != o->data.hash) {
-                        log_debug("Entry item %"PRIu64" hash is bad, skipping over it.", j->current_field);
-                        continue;
-                }
-
-                r = return_data(j, f, o, data, size);
-                if (r == -EBADMSG) {
-                        log_debug("Entry item %"PRIu64" data payload is bad, skipping over it.", j->current_field);
-                        continue;
-                }
-                if (r < 0)
-                        return r;
+                *data = d;
+                *size = l;
 
                 j->current_field++;
 
                 return 1;
+
+        next:
+                /* journal_file_data_payload() may clear or overwrite cached object. */
+                r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
+                if (r < 0)
+                        return r;
         }
 
         return 0;
@@ -2646,7 +2532,7 @@
                         if (e->mask & (IN_CREATE|IN_MOVED_TO|IN_MODIFY|IN_ATTRIB))
                                 (void) add_file_by_name(j, d->path, e->name);
                         else if (e->mask & (IN_DELETE|IN_MOVED_FROM|IN_UNMOUNT))
-                                remove_file_by_name(j, d->path, e->name);
+                                (void) remove_file_by_name(j, d->path, e->name);
 
                 } else if (!d->is_root && e->len == 0) {
 
@@ -2697,12 +2583,11 @@
 
         for (;;) {
                 union inotify_event_buffer buffer;
-                struct inotify_event *e;
                 ssize_t l;
 
                 l = read(j->inotify_fd, &buffer, sizeof(buffer));
                 if (l < 0) {
-                        if (IN_SET(errno, EAGAIN, EINTR))
+                        if (ERRNO_IS_TRANSIENT(errno))
                                 return got_something ? determine_change(j) : SD_JOURNAL_NOP;
 
                         return -errno;
@@ -2725,28 +2610,23 @@
         if (j->inotify_fd < 0) {
                 JournalFile *f;
 
-                /* This is the first invocation, hence create the
-                 * inotify watch */
+                /* This is the first invocation, hence create the inotify watch */
                 r = sd_journal_get_fd(j);
                 if (r < 0)
                         return r;
 
-                /* Server might have done some vacuuming while we weren't watching.
-                   Get rid of the deleted files now so they don't stay around indefinitely. */
+                /* Server might have done some vacuuming while we weren't watching. Get rid of the deleted
+                 * files now so they don't stay around indefinitely. */
                 ORDERED_HASHMAP_FOREACH(f, j->files) {
                         r = journal_file_fstat(f);
                         if (r == -EIDRM)
                                 remove_file_real(j, f);
-                        else if (r < 0) {
-                                log_debug_errno(r,"Failed to fstat() journal file '%s' : %m", f->path);
-                                continue;
-                        }
+                        else if (r < 0)
+                                log_debug_errno(r, "Failed to fstat() journal file '%s', ignoring: %m", f->path);
                 }
 
-                /* The journal might have changed since the context
-                 * object was created and we weren't watching before,
-                 * hence don't wait for anything, and return
-                 * immediately. */
+                /* The journal might have changed since the context object was created and we weren't
+                 * watching before, hence don't wait for anything, and return immediately. */
                 return determine_change(j);
         }
 
@@ -2946,7 +2826,7 @@
         for (;;) {
                 JournalFile *of;
                 Object *o;
-                const void *odata;
+                void *odata;
                 size_t ol;
                 bool found;
                 int r;
@@ -2990,7 +2870,8 @@
                                                j->unique_offset,
                                                o->object.type, OBJECT_DATA);
 
-                r = return_data(j, j->unique_file, o, &odata, &ol);
+                r = journal_file_data_payload(j->unique_file, o, j->unique_offset, NULL, 0,
+                                              j->data_threshold, &odata, &ol);
                 if (r < 0)
                         return r;
 
@@ -3037,9 +2918,8 @@
                 if (found)
                         continue;
 
-                r = return_data(j, j->unique_file, o, ret_data, ret_size);
-                if (r < 0)
-                        return r;
+                *ret_data = odata;
+                *ret_size = ol;
 
                 return 1;
         }
@@ -3228,13 +3108,12 @@
 }
 
 static char *lookup_field(const char *field, void *userdata) {
-        sd_journal *j = userdata;
+        sd_journal *j = ASSERT_PTR(userdata);
         const void *data;
         size_t size, d;
         int r;
 
         assert(field);
-        assert(j);
 
         r = sd_journal_get_data(j, field, &data, &size);
         if (r < 0 ||
diff --git a/src/libsystemd/sd-journal/test-audit-type.c b/src/libsystemd/sd-journal/test-audit-type.c
index 5adbf0d..1d5003b 100644
--- a/src/libsystemd/sd-journal/test-audit-type.c
+++ b/src/libsystemd/sd-journal/test-audit-type.c
@@ -4,6 +4,7 @@
 #include <linux/audit.h>
 
 #include "audit-type.h"
+#include "tests.h"
 
 static void print_audit_label(int i) {
         const char *name;
@@ -13,14 +14,11 @@
         printf("%i → %s → %s\n", i, audit_type_to_string(i), name);
 }
 
-static void test_audit_type(void) {
+TEST(audit_type) {
         int i;
 
         for (i = 0; i <= AUDIT_KERNEL; i++)
                 print_audit_label(i);
 }
 
-int main(int argc, char **argv) {
-        test_audit_type();
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/libsystemd/sd-journal/test-catalog.c b/src/libsystemd/sd-journal/test-catalog.c
index ad06221..49185cc 100644
--- a/src/libsystemd/sd-journal/test-catalog.c
+++ b/src/libsystemd/sd-journal/test-catalog.c
@@ -18,7 +18,6 @@
 #include "strv.h"
 #include "tests.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 static char** catalog_dirs = NULL;
 static const char *no_catalog_dirs[] = {
@@ -196,7 +195,7 @@
 
 int main(int argc, char *argv[]) {
         _cleanup_(unlink_tempfilep) char database[] = "/tmp/test-catalog.XXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_free_ char *text = NULL;
         int r;
 
diff --git a/src/libsystemd/sd-journal/test-compress-benchmark.c b/src/libsystemd/sd-journal/test-compress-benchmark.c
deleted file mode 100644
index eb3459e..0000000
--- a/src/libsystemd/sd-journal/test-compress-benchmark.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "alloc-util.h"
-#include "compress.h"
-#include "env-util.h"
-#include "macro.h"
-#include "memory-util.h"
-#include "nulstr-util.h"
-#include "parse-util.h"
-#include "process-util.h"
-#include "random-util.h"
-#include "string-util.h"
-#include "tests.h"
-
-typedef int (compress_t)(const void *src, uint64_t src_size, void *dst,
-                         size_t dst_alloc_size, size_t *dst_size);
-typedef int (decompress_t)(const void *src, uint64_t src_size,
-                           void **dst, size_t* dst_size, size_t dst_max);
-
-#if HAVE_COMPRESSION
-
-static usec_t arg_duration;
-static size_t arg_start;
-
-#define MAX_SIZE (1024*1024LU)
-#define PRIME 1048571  /* A prime close enough to one megabyte that mod 4 == 3 */
-
-static size_t _permute(size_t x) {
-        size_t residue;
-
-        if (x >= PRIME)
-                return x;
-
-        residue = x*x % PRIME;
-        if (x <= PRIME / 2)
-                return residue;
-        else
-                return PRIME - residue;
-}
-
-static size_t permute(size_t x) {
-        return _permute((_permute(x) + arg_start) % MAX_SIZE ^ 0xFF345);
-}
-
-static char* make_buf(size_t count, const char *type) {
-        char *buf;
-        size_t i;
-
-        buf = malloc(count);
-        assert_se(buf);
-
-        if (streq(type, "zeros"))
-                memzero(buf, count);
-        else if (streq(type, "simple"))
-                for (i = 0; i < count; i++)
-                        buf[i] = 'a' + i % ('z' - 'a' + 1);
-        else if (streq(type, "random")) {
-                size_t step = count / 10;
-
-                random_bytes(buf, step);
-                memzero(buf + 1*step, step);
-                random_bytes(buf + 2*step, step);
-                memzero(buf + 3*step, step);
-                random_bytes(buf + 4*step, step);
-                memzero(buf + 5*step, step);
-                random_bytes(buf + 6*step, step);
-                memzero(buf + 7*step, step);
-                random_bytes(buf + 8*step, step);
-                memzero(buf + 9*step, step);
-        } else
-                assert_not_reached("here");
-
-        return buf;
-}
-
-static void test_compress_decompress(const char* label, const char* type,
-                                     compress_t compress, decompress_t decompress) {
-        usec_t n, n2 = 0;
-        float dt;
-
-        _cleanup_free_ char *text, *buf;
-        _cleanup_free_ void *buf2 = NULL;
-        size_t skipped = 0, compressed = 0, total = 0;
-
-        text = make_buf(MAX_SIZE, type);
-        buf = calloc(MAX_SIZE + 1, 1);
-        assert_se(text && buf);
-
-        n = now(CLOCK_MONOTONIC);
-
-        for (size_t i = 0; i <= MAX_SIZE; i++) {
-                size_t j = 0, k = 0, size;
-                int r;
-
-                size = permute(i);
-                if (size == 0)
-                        continue;
-
-                log_debug("%s %zu %zu", type, i, size);
-
-                memzero(buf, MIN(size + 1000, MAX_SIZE));
-
-                r = compress(text, size, buf, size, &j);
-                /* assume compression must be successful except for small or random inputs */
-                assert_se(r == 0 || (size < 2048 && r == -ENOBUFS) || streq(type, "random"));
-
-                /* check for overwrites */
-                assert_se(buf[size] == 0);
-                if (r != 0) {
-                        skipped += size;
-                        continue;
-                }
-
-                assert_se(j > 0);
-                if (j >= size)
-                        log_error("%s \"compressed\" %zu -> %zu", label, size, j);
-
-                r = decompress(buf, j, &buf2, &k, 0);
-                assert_se(r == 0);
-                assert_se(k == size);
-
-                assert_se(memcmp(text, buf2, size) == 0);
-
-                total += size;
-                compressed += j;
-
-                n2 = now(CLOCK_MONOTONIC);
-                if (n2 - n > arg_duration)
-                        break;
-        }
-
-        dt = (n2-n) / 1e6;
-
-        log_info("%s/%s: compressed & decompressed %zu bytes in %.2fs (%.2fMiB/s), "
-                 "mean compression %.2f%%, skipped %zu bytes",
-                 label, type, total, dt,
-                 total / 1024. / 1024 / dt,
-                 100 - compressed * 100. / total,
-                 skipped);
-}
-#endif
-
-int main(int argc, char *argv[]) {
-#if HAVE_COMPRESSION
-        test_setup_logging(LOG_INFO);
-
-        if (argc >= 2) {
-                unsigned x;
-
-                assert_se(safe_atou(argv[1], &x) >= 0);
-                arg_duration = x * USEC_PER_SEC;
-        } else
-                arg_duration = slow_tests_enabled() ?
-                        2 * USEC_PER_SEC : USEC_PER_SEC / 50;
-
-        if (argc == 3)
-                (void) safe_atozu(argv[2], &arg_start);
-        else
-                arg_start = getpid_cached();
-
-        const char *i;
-        NULSTR_FOREACH(i, "zeros\0simple\0random\0") {
-#if HAVE_XZ
-                test_compress_decompress("XZ", i, compress_blob_xz, decompress_blob_xz);
-#endif
-#if HAVE_LZ4
-                test_compress_decompress("LZ4", i, compress_blob_lz4, decompress_blob_lz4);
-#endif
-#if HAVE_ZSTD
-                test_compress_decompress("ZSTD", i, compress_blob_zstd, decompress_blob_zstd);
-#endif
-        }
-        return 0;
-#else
-        return log_tests_skipped("No compression feature is enabled");
-#endif
-}
diff --git a/src/libsystemd/sd-journal/test-compress.c b/src/libsystemd/sd-journal/test-compress.c
deleted file mode 100644
index 54e0e73..0000000
--- a/src/libsystemd/sd-journal/test-compress.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <sys/stat.h>
-
-#if HAVE_LZ4
-#include <lz4.h>
-#endif
-
-#include "alloc-util.h"
-#include "compress.h"
-#include "fd-util.h"
-#include "fs-util.h"
-#include "macro.h"
-#include "memory-util.h"
-#include "path-util.h"
-#include "random-util.h"
-#include "tests.h"
-#include "tmpfile-util.h"
-
-#if HAVE_XZ
-# define XZ_OK 0
-#else
-# define XZ_OK -EPROTONOSUPPORT
-#endif
-
-#if HAVE_LZ4
-# define LZ4_OK 0
-#else
-# define LZ4_OK -EPROTONOSUPPORT
-#endif
-
-#define HUGE_SIZE (4096*1024)
-
-typedef int (compress_blob_t)(const void *src, uint64_t src_size,
-                              void *dst, size_t dst_alloc_size, size_t *dst_size);
-typedef int (decompress_blob_t)(const void *src, uint64_t src_size,
-                                void **dst,
-                                size_t* dst_size, size_t dst_max);
-typedef int (decompress_sw_t)(const void *src, uint64_t src_size,
-                              void **buffer,
-                              const void *prefix, size_t prefix_len,
-                              uint8_t extra);
-
-typedef int (compress_stream_t)(int fdf, int fdt, uint64_t max_bytes, uint64_t *uncompressed_size);
-typedef int (decompress_stream_t)(int fdf, int fdt, uint64_t max_size);
-
-#if HAVE_COMPRESSION
-_unused_ static void test_compress_decompress(
-                const char *compression,
-                compress_blob_t compress,
-                decompress_blob_t decompress,
-                const char *data,
-                size_t data_len,
-                bool may_fail) {
-
-        char compressed[512];
-        size_t csize;
-        _cleanup_free_ char *decompressed = NULL;
-        int r;
-
-        log_info("/* testing %s %s blob compression/decompression */",
-                 compression, data);
-
-        r = compress(data, data_len, compressed, sizeof(compressed), &csize);
-        if (r == -ENOBUFS) {
-                log_info_errno(r, "compression failed: %m");
-                assert_se(may_fail);
-        } else {
-                assert_se(r == 0);
-                r = decompress(compressed, csize,
-                               (void **) &decompressed, &csize, 0);
-                assert_se(r == 0);
-                assert_se(decompressed);
-                assert_se(memcmp(decompressed, data, data_len) == 0);
-        }
-
-        r = decompress("garbage", 7,
-                       (void **) &decompressed, &csize, 0);
-        assert_se(r < 0);
-
-        /* make sure to have the minimal lz4 compressed size */
-        r = decompress("00000000\1g", 9,
-                       (void **) &decompressed, &csize, 0);
-        assert_se(r < 0);
-
-        r = decompress("\100000000g", 9,
-                       (void **) &decompressed, &csize, 0);
-        assert_se(r < 0);
-
-        explicit_bzero_safe(decompressed, MALLOC_SIZEOF_SAFE(decompressed));
-}
-
-_unused_ static void test_decompress_startswith(const char *compression,
-                                                compress_blob_t compress,
-                                                decompress_sw_t decompress_sw,
-                                                const char *data,
-                                                size_t data_len,
-                                                bool may_fail) {
-
-        char *compressed;
-        _cleanup_free_ char *compressed1 = NULL, *compressed2 = NULL, *decompressed = NULL;
-        size_t csize, len;
-        int r;
-
-        log_info("/* testing decompress_startswith with %s on %.20s text */",
-                 compression, data);
-
-#define BUFSIZE_1 512
-#define BUFSIZE_2 20000
-
-        compressed = compressed1 = malloc(BUFSIZE_1);
-        assert_se(compressed1);
-        r = compress(data, data_len, compressed, BUFSIZE_1, &csize);
-        if (r == -ENOBUFS) {
-                log_info_errno(r, "compression failed: %m");
-                assert_se(may_fail);
-
-                compressed = compressed2 = malloc(BUFSIZE_2);
-                assert_se(compressed2);
-                r = compress(data, data_len, compressed, BUFSIZE_2, &csize);
-                assert(r == 0);
-        }
-        assert_se(r == 0);
-
-        len = strlen(data);
-
-        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len, '\0');
-        assert_se(r > 0);
-        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len, 'w');
-        assert_se(r == 0);
-        r = decompress_sw(compressed, csize, (void **) &decompressed, "barbarbar", 9, ' ');
-        assert_se(r == 0);
-        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len - 1, data[len-1]);
-        assert_se(r > 0);
-        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len - 1, 'w');
-        assert_se(r == 0);
-        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len, '\0');
-        assert_se(r > 0);
-}
-
-_unused_ static void test_decompress_startswith_short(const char *compression,
-                                                      compress_blob_t compress,
-                                                      decompress_sw_t decompress_sw) {
-
-#define TEXT "HUGE=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-
-        char buf[1024];
-        size_t i, csize;
-        int r;
-
-        log_info("/* %s with %s */", __func__, compression);
-
-        r = compress(TEXT, sizeof TEXT, buf, sizeof buf, &csize);
-        assert_se(r == 0);
-
-        for (i = 1; i < strlen(TEXT); i++) {
-                _cleanup_free_ void *buf2 = NULL;
-
-                assert_se(buf2 = malloc(i));
-
-                assert_se(decompress_sw(buf, csize, &buf2, TEXT, i, TEXT[i]) == 1);
-                assert_se(decompress_sw(buf, csize, &buf2, TEXT, i, 'y') == 0);
-        }
-}
-
-_unused_ static void test_compress_stream(const char *compression,
-                                          const char *cat,
-                                          compress_stream_t compress,
-                                          decompress_stream_t decompress,
-                                          const char *srcfile) {
-
-        _cleanup_close_ int src = -1, dst = -1, dst2 = -1;
-        _cleanup_(unlink_tempfilep) char
-                pattern[] = "/tmp/systemd-test.compressed.XXXXXX",
-                pattern2[] = "/tmp/systemd-test.compressed.XXXXXX";
-        int r;
-        _cleanup_free_ char *cmd = NULL, *cmd2 = NULL;
-        struct stat st = {};
-        uint64_t uncompressed_size;
-
-        r = find_executable(cat, NULL);
-        if (r < 0) {
-                log_error_errno(r, "Skipping %s, could not find %s binary: %m", __func__, cat);
-                return;
-        }
-
-        log_debug("/* testing %s compression */", compression);
-
-        log_debug("/* create source from %s */", srcfile);
-
-        assert_se((src = open(srcfile, O_RDONLY|O_CLOEXEC)) >= 0);
-
-        log_debug("/* test compression */");
-
-        assert_se((dst = mkostemp_safe(pattern)) >= 0);
-
-        assert_se(compress(src, dst, -1, &uncompressed_size) == 0);
-
-        if (cat) {
-                assert_se(asprintf(&cmd, "%s %s | diff %s -", cat, pattern, srcfile) > 0);
-                assert_se(system(cmd) == 0);
-        }
-
-        log_debug("/* test decompression */");
-
-        assert_se((dst2 = mkostemp_safe(pattern2)) >= 0);
-
-        assert_se(stat(srcfile, &st) == 0);
-        assert_se((uint64_t)st.st_size == uncompressed_size);
-
-        assert_se(lseek(dst, 0, SEEK_SET) == 0);
-        r = decompress(dst, dst2, st.st_size);
-        assert_se(r == 0);
-
-        assert_se(asprintf(&cmd2, "diff %s %s", srcfile, pattern2) > 0);
-        assert_se(system(cmd2) == 0);
-
-        log_debug("/* test faulty decompression */");
-
-        assert_se(lseek(dst, 1, SEEK_SET) == 1);
-        r = decompress(dst, dst2, st.st_size);
-        assert_se(IN_SET(r, 0, -EBADMSG));
-
-        assert_se(lseek(dst, 0, SEEK_SET) == 0);
-        assert_se(lseek(dst2, 0, SEEK_SET) == 0);
-        r = decompress(dst, dst2, st.st_size - 1);
-        assert_se(r == -EFBIG);
-}
-#endif
-
-#if HAVE_LZ4
-static void test_lz4_decompress_partial(void) {
-        char buf[20000], buf2[100];
-        size_t buf_size = sizeof(buf), compressed;
-        int r;
-        _cleanup_free_ char *huge = NULL;
-
-        log_debug("/* %s */", __func__);
-
-        assert_se(huge = malloc(HUGE_SIZE));
-        memcpy(huge, "HUGE=", STRLEN("HUGE="));
-        memset(&huge[STRLEN("HUGE=")], 'x', HUGE_SIZE - STRLEN("HUGE=") - 1);
-        huge[HUGE_SIZE - 1] = '\0';
-
-        r = LZ4_compress_default(huge, buf, HUGE_SIZE, buf_size);
-        assert_se(r >= 0);
-        compressed = r;
-        log_info("Compressed %i → %zu", HUGE_SIZE, compressed);
-
-        r = LZ4_decompress_safe(buf, huge, r, HUGE_SIZE);
-        assert_se(r >= 0);
-        log_info("Decompressed → %i", r);
-
-        r = LZ4_decompress_safe_partial(buf, huge,
-                                        compressed,
-                                        12, HUGE_SIZE);
-        assert_se(r >= 0);
-        log_info("Decompressed partial %i/%i → %i", 12, HUGE_SIZE, r);
-
-        for (size_t size = 1; size < sizeof(buf2); size++) {
-                /* This failed in older lz4s but works in newer ones. */
-                r = LZ4_decompress_safe_partial(buf, buf2, compressed, size, size);
-                log_info("Decompressed partial %zu/%zu → %i (%s)", size, size, r,
-                                                                   r < 0 ? "bad" : "good");
-                if (r >= 0 && LZ4_versionNumber() >= 10803)
-                        /* lz4 <= 1.8.2 should fail that test, let's only check for newer ones */
-                        assert_se(memcmp(buf2, huge, r) == 0);
-        }
-}
-#endif
-
-int main(int argc, char *argv[]) {
-#if HAVE_COMPRESSION
-        _unused_ const char text[] =
-                "text\0foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF"
-                "foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF";
-
-        /* The file to test compression on can be specified as the first argument */
-        const char *srcfile = argc > 1 ? argv[1] : argv[0];
-
-        char data[512] = "random\0";
-
-        _cleanup_free_ char *huge = NULL;
-
-        assert_se(huge = malloc(HUGE_SIZE));
-        memcpy(huge, "HUGE=", STRLEN("HUGE="));
-        memset(&huge[STRLEN("HUGE=")], 'x', HUGE_SIZE - STRLEN("HUGE=") - 1);
-        huge[HUGE_SIZE - 1] = '\0';
-
-        test_setup_logging(LOG_DEBUG);
-
-        random_bytes(data + 7, sizeof(data) - 7);
-
-#if HAVE_XZ
-        test_compress_decompress("XZ", compress_blob_xz, decompress_blob_xz,
-                                 text, sizeof(text), false);
-        test_compress_decompress("XZ", compress_blob_xz, decompress_blob_xz,
-                                 data, sizeof(data), true);
-
-        test_decompress_startswith("XZ",
-                                   compress_blob_xz, decompress_startswith_xz,
-                                   text, sizeof(text), false);
-        test_decompress_startswith("XZ",
-                                   compress_blob_xz, decompress_startswith_xz,
-                                   data, sizeof(data), true);
-        test_decompress_startswith("XZ",
-                                   compress_blob_xz, decompress_startswith_xz,
-                                   huge, HUGE_SIZE, true);
-
-        test_compress_stream("XZ", "xzcat",
-                             compress_stream_xz, decompress_stream_xz, srcfile);
-
-        test_decompress_startswith_short("XZ", compress_blob_xz, decompress_startswith_xz);
-
-#else
-        log_info("/* XZ test skipped */");
-#endif
-
-#if HAVE_LZ4
-        test_compress_decompress("LZ4", compress_blob_lz4, decompress_blob_lz4,
-                                 text, sizeof(text), false);
-        test_compress_decompress("LZ4", compress_blob_lz4, decompress_blob_lz4,
-                                 data, sizeof(data), true);
-
-        test_decompress_startswith("LZ4",
-                                   compress_blob_lz4, decompress_startswith_lz4,
-                                   text, sizeof(text), false);
-        test_decompress_startswith("LZ4",
-                                   compress_blob_lz4, decompress_startswith_lz4,
-                                   data, sizeof(data), true);
-        test_decompress_startswith("LZ4",
-                                   compress_blob_lz4, decompress_startswith_lz4,
-                                   huge, HUGE_SIZE, true);
-
-        test_compress_stream("LZ4", "lz4cat",
-                             compress_stream_lz4, decompress_stream_lz4, srcfile);
-
-        test_lz4_decompress_partial();
-
-        test_decompress_startswith_short("LZ4", compress_blob_lz4, decompress_startswith_lz4);
-
-#else
-        log_info("/* LZ4 test skipped */");
-#endif
-
-#if HAVE_ZSTD
-        test_compress_decompress("ZSTD", compress_blob_zstd, decompress_blob_zstd,
-                                 text, sizeof(text), false);
-        test_compress_decompress("ZSTD", compress_blob_zstd, decompress_blob_zstd,
-                                 data, sizeof(data), true);
-
-        test_decompress_startswith("ZSTD",
-                                   compress_blob_zstd, decompress_startswith_zstd,
-                                   text, sizeof(text), false);
-        test_decompress_startswith("ZSTD",
-                                   compress_blob_zstd, decompress_startswith_zstd,
-                                   data, sizeof(data), true);
-        test_decompress_startswith("ZSTD",
-                                   compress_blob_zstd, decompress_startswith_zstd,
-                                   huge, HUGE_SIZE, true);
-
-        test_compress_stream("ZSTD", "zstdcat",
-                             compress_stream_zstd, decompress_stream_zstd, srcfile);
-
-        test_decompress_startswith_short("ZSTD", compress_blob_zstd, decompress_startswith_zstd);
-#else
-        log_info("/* ZSTD test skipped */");
-#endif
-
-        return 0;
-#else
-        log_info("/* XZ, LZ4 and ZSTD tests skipped */");
-        return EXIT_TEST_SKIP;
-#endif
-}
diff --git a/src/libsystemd/sd-journal/test-journal-file.c b/src/libsystemd/sd-journal/test-journal-file.c
new file mode 100644
index 0000000..729de1f
--- /dev/null
+++ b/src/libsystemd/sd-journal/test-journal-file.c
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "journal-file.h"
+#include "tests.h"
+#include "user-util.h"
+
+static void test_journal_file_parse_uid_from_filename_simple(
+                const char *path,
+                uid_t expected_uid,
+                int expected_error) {
+
+        uid_t uid = UID_INVALID;
+        int r;
+
+        log_info("testing %s", path);
+
+        r = journal_file_parse_uid_from_filename(path, &uid);
+        assert_se(r == expected_error);
+        if (r < 0)
+                assert_se(uid == UID_INVALID);
+        else
+                assert_se(uid == expected_uid);
+}
+
+TEST(journal_file_parse_uid_from_filename) {
+
+        test_journal_file_parse_uid_from_filename_simple("/var/log/journal/", 0, -EISDIR);
+
+        /* The helper should return -EREMOTE for any filenames that don't look like an online or offline user
+         * journals. This includes archived and disposed journal files. */
+        test_journal_file_parse_uid_from_filename_simple("/etc/password", 0, -EREMOTE);
+        test_journal_file_parse_uid_from_filename_simple("system.journal", 0, -EREMOTE);
+        test_journal_file_parse_uid_from_filename_simple("user-1000@0005d26980bdce6e-2f2a4939583822ef.journal~", 0, -EREMOTE);
+        test_journal_file_parse_uid_from_filename_simple("user-1000@xxx-yyy-zzz.journal", 0, -EREMOTE);
+
+        test_journal_file_parse_uid_from_filename_simple("user-1000.journal", 1000, 0);
+        test_journal_file_parse_uid_from_filename_simple("user-foo.journal", 0, -EINVAL);
+        test_journal_file_parse_uid_from_filename_simple("user-65535.journal", 0, -ENXIO);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/libsystemd/sd-journal/test-journal-flush.c b/src/libsystemd/sd-journal/test-journal-flush.c
deleted file mode 100644
index c6fb657..0000000
--- a/src/libsystemd/sd-journal/test-journal-flush.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "sd-journal.h"
-
-#include "alloc-util.h"
-#include "chattr-util.h"
-#include "journal-file.h"
-#include "journal-internal.h"
-#include "macro.h"
-#include "path-util.h"
-#include "string-util.h"
-
-int main(int argc, char *argv[]) {
-        _cleanup_free_ char *fn = NULL;
-        char dn[] = "/var/tmp/test-journal-flush.XXXXXX";
-        JournalFile *new_journal = NULL;
-        sd_journal *j = NULL;
-        unsigned n = 0;
-        int r;
-
-        assert_se(mkdtemp(dn));
-        (void) chattr_path(dn, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
-
-        fn = path_join(dn, "test.journal");
-
-        r = journal_file_open(-1, fn, O_CREAT|O_RDWR, 0644, false, 0, false, NULL, NULL, NULL, NULL, &new_journal);
-        assert_se(r >= 0);
-
-        if (argc > 1)
-                r = sd_journal_open_files(&j, (const char **) strv_skip(argv, 1), 0);
-        else
-                r = sd_journal_open(&j, 0);
-        assert_se(r == 0);
-
-        sd_journal_set_data_threshold(j, 0);
-
-        SD_JOURNAL_FOREACH(j) {
-                Object *o;
-                JournalFile *f;
-
-                f = j->current_file;
-                assert_se(f && f->current_offset > 0);
-
-                r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
-                if (r < 0)
-                        log_error_errno(r, "journal_file_move_to_object failed: %m");
-                assert_se(r >= 0);
-
-                r = journal_file_copy_entry(f, new_journal, o, f->current_offset);
-                if (r < 0)
-                        log_warning_errno(r, "journal_file_copy_entry failed: %m");
-                assert_se(r >= 0 ||
-                          IN_SET(r, -EBADMSG,         /* corrupted file */
-                                    -EPROTONOSUPPORT, /* unsupported compression */
-                                    -EIO));           /* file rotated */
-
-                if (++n >= 10000)
-                        break;
-        }
-
-        sd_journal_close(j);
-
-        (void) journal_file_close(new_journal);
-
-        unlink(fn);
-        assert_se(rmdir(dn) == 0);
-
-        return 0;
-}
diff --git a/src/libsystemd/sd-journal/test-journal-init.c b/src/libsystemd/sd-journal/test-journal-init.c
index 80aff75..d5702db 100644
--- a/src/libsystemd/sd-journal/test-journal-init.c
+++ b/src/libsystemd/sd-journal/test-journal-init.c
@@ -7,7 +7,6 @@
 #include "parse-util.h"
 #include "rm-rf.h"
 #include "tests.h"
-#include "util.h"
 
 int main(int argc, char *argv[]) {
         sd_journal *j;
diff --git a/src/libsystemd/sd-journal/test-journal-interleaving.c b/src/libsystemd/sd-journal/test-journal-interleaving.c
deleted file mode 100644
index 62db226..0000000
--- a/src/libsystemd/sd-journal/test-journal-interleaving.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "sd-journal.h"
-
-#include "alloc-util.h"
-#include "chattr-util.h"
-#include "io-util.h"
-#include "journal-file.h"
-#include "journal-vacuum.h"
-#include "log.h"
-#include "parse-util.h"
-#include "rm-rf.h"
-#include "tests.h"
-#include "util.h"
-
-/* This program tests skipping around in a multi-file journal. */
-
-static bool arg_keep = false;
-
-_noreturn_ static void log_assert_errno(const char *text, int error, const char *file, int line, const char *func) {
-        log_internal(LOG_CRIT, error, file, line, func,
-                     "'%s' failed at %s:%u (%s): %m", text, file, line, func);
-        abort();
-}
-
-#define assert_ret(expr)                                                \
-        do {                                                            \
-                int _r_ = (expr);                                       \
-                if (_unlikely_(_r_ < 0))                                \
-                        log_assert_errno(#expr, -_r_, PROJECT_FILE, __LINE__, __PRETTY_FUNCTION__); \
-        } while (false)
-
-static JournalFile *test_open(const char *name) {
-        JournalFile *f;
-        assert_ret(journal_file_open(-1, name, O_RDWR|O_CREAT, 0644, true, UINT64_MAX, false, NULL, NULL, NULL, NULL, &f));
-        return f;
-}
-
-static void test_close(JournalFile *f) {
-        (void) journal_file_close (f);
-}
-
-static void append_number(JournalFile *f, int n, uint64_t *seqnum) {
-        char *p;
-        dual_timestamp ts;
-        static dual_timestamp previous_ts = {};
-        struct iovec iovec[1];
-
-        dual_timestamp_get(&ts);
-
-        if (ts.monotonic <= previous_ts.monotonic)
-                ts.monotonic = previous_ts.monotonic + 1;
-
-        if (ts.realtime <= previous_ts.realtime)
-                ts.realtime = previous_ts.realtime + 1;
-
-        previous_ts = ts;
-
-        assert_se(asprintf(&p, "NUMBER=%d", n) >= 0);
-        iovec[0] = IOVEC_MAKE_STRING(p);
-        assert_ret(journal_file_append_entry(f, &ts, NULL, iovec, 1, seqnum, NULL, NULL));
-        free(p);
-}
-
-static void test_check_number (sd_journal *j, int n) {
-        const void *d;
-        _cleanup_free_ char *k;
-        size_t l;
-        int x;
-
-        assert_ret(sd_journal_get_data(j, "NUMBER", &d, &l));
-        assert_se(k = strndup(d, l));
-        printf("%s\n", k);
-
-        assert_se(safe_atoi(k + 7, &x) >= 0);
-        assert_se(n == x);
-}
-
-static void test_check_numbers_down (sd_journal *j, int count) {
-        int i;
-
-        for (i = 1; i <= count; i++) {
-                int r;
-                test_check_number(j, i);
-                assert_ret(r = sd_journal_next(j));
-                if (i == count)
-                        assert_se(r == 0);
-                else
-                        assert_se(r == 1);
-        }
-
-}
-
-static void test_check_numbers_up (sd_journal *j, int count) {
-        for (int i = count; i >= 1; i--) {
-                int r;
-                test_check_number(j, i);
-                assert_ret(r = sd_journal_previous(j));
-                if (i == 1)
-                        assert_se(r == 0);
-                else
-                        assert_se(r == 1);
-        }
-
-}
-
-static void setup_sequential(void) {
-        JournalFile *one, *two;
-        one = test_open("one.journal");
-        two = test_open("two.journal");
-        append_number(one, 1, NULL);
-        append_number(one, 2, NULL);
-        append_number(two, 3, NULL);
-        append_number(two, 4, NULL);
-        test_close(one);
-        test_close(two);
-}
-
-static void setup_interleaved(void) {
-        JournalFile *one, *two;
-        one = test_open("one.journal");
-        two = test_open("two.journal");
-        append_number(one, 1, NULL);
-        append_number(two, 2, NULL);
-        append_number(one, 3, NULL);
-        append_number(two, 4, NULL);
-        test_close(one);
-        test_close(two);
-}
-
-static void mkdtemp_chdir_chattr(char *path) {
-        assert_se(mkdtemp(path));
-        assert_se(chdir(path) >= 0);
-
-        /* Speed up things a bit on btrfs, ensuring that CoW is turned off for all files created in our
-         * directory during the test run */
-        (void) chattr_path(path, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
-}
-
-static void test_skip(void (*setup)(void)) {
-        char t[] = "/var/tmp/journal-skip-XXXXXX";
-        sd_journal *j;
-        int r;
-
-        mkdtemp_chdir_chattr(t);
-
-        setup();
-
-        /* Seek to head, iterate down.
-         */
-        assert_ret(sd_journal_open_directory(&j, t, 0));
-        assert_ret(sd_journal_seek_head(j));
-        assert_ret(sd_journal_next(j));
-        test_check_numbers_down(j, 4);
-        sd_journal_close(j);
-
-        /* Seek to tail, iterate up.
-         */
-        assert_ret(sd_journal_open_directory(&j, t, 0));
-        assert_ret(sd_journal_seek_tail(j));
-        assert_ret(sd_journal_previous(j));
-        test_check_numbers_up(j, 4);
-        sd_journal_close(j);
-
-        /* Seek to tail, skip to head, iterate down.
-         */
-        assert_ret(sd_journal_open_directory(&j, t, 0));
-        assert_ret(sd_journal_seek_tail(j));
-        assert_ret(r = sd_journal_previous_skip(j, 4));
-        assert_se(r == 4);
-        test_check_numbers_down(j, 4);
-        sd_journal_close(j);
-
-        /* Seek to head, skip to tail, iterate up.
-         */
-        assert_ret(sd_journal_open_directory(&j, t, 0));
-        assert_ret(sd_journal_seek_head(j));
-        assert_ret(r = sd_journal_next_skip(j, 4));
-        assert_se(r == 4);
-        test_check_numbers_up(j, 4);
-        sd_journal_close(j);
-
-        log_info("Done...");
-
-        if (arg_keep)
-                log_info("Not removing %s", t);
-        else {
-                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
-
-                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
-        }
-
-        puts("------------------------------------------------------------");
-}
-
-static void test_sequence_numbers(void) {
-
-        char t[] = "/var/tmp/journal-seq-XXXXXX";
-        JournalFile *one, *two;
-        uint64_t seqnum = 0;
-        sd_id128_t seqnum_id;
-
-        mkdtemp_chdir_chattr(t);
-
-        assert_se(journal_file_open(-1, "one.journal", O_RDWR|O_CREAT, 0644,
-                                    true, UINT64_MAX, false, NULL, NULL, NULL, NULL, &one) == 0);
-
-        append_number(one, 1, &seqnum);
-        printf("seqnum=%"PRIu64"\n", seqnum);
-        assert_se(seqnum == 1);
-        append_number(one, 2, &seqnum);
-        printf("seqnum=%"PRIu64"\n", seqnum);
-        assert_se(seqnum == 2);
-
-        assert_se(one->header->state == STATE_ONLINE);
-        assert_se(!sd_id128_equal(one->header->file_id, one->header->machine_id));
-        assert_se(!sd_id128_equal(one->header->file_id, one->header->boot_id));
-        assert_se(sd_id128_equal(one->header->file_id, one->header->seqnum_id));
-
-        memcpy(&seqnum_id, &one->header->seqnum_id, sizeof(sd_id128_t));
-
-        assert_se(journal_file_open(-1, "two.journal", O_RDWR|O_CREAT, 0644,
-                                    true, UINT64_MAX, false, NULL, NULL, NULL, one, &two) == 0);
-
-        assert_se(two->header->state == STATE_ONLINE);
-        assert_se(!sd_id128_equal(two->header->file_id, one->header->file_id));
-        assert_se(sd_id128_equal(one->header->machine_id, one->header->machine_id));
-        assert_se(sd_id128_equal(one->header->boot_id, one->header->boot_id));
-        assert_se(sd_id128_equal(one->header->seqnum_id, one->header->seqnum_id));
-
-        append_number(two, 3, &seqnum);
-        printf("seqnum=%"PRIu64"\n", seqnum);
-        assert_se(seqnum == 3);
-        append_number(two, 4, &seqnum);
-        printf("seqnum=%"PRIu64"\n", seqnum);
-        assert_se(seqnum == 4);
-
-        test_close(two);
-
-        append_number(one, 5, &seqnum);
-        printf("seqnum=%"PRIu64"\n", seqnum);
-        assert_se(seqnum == 5);
-
-        append_number(one, 6, &seqnum);
-        printf("seqnum=%"PRIu64"\n", seqnum);
-        assert_se(seqnum == 6);
-
-        test_close(one);
-
-        /* restart server */
-        seqnum = 0;
-
-        assert_se(journal_file_open(-1, "two.journal", O_RDWR, 0,
-                                    true, UINT64_MAX, false, NULL, NULL, NULL, NULL, &two) == 0);
-
-        assert_se(sd_id128_equal(two->header->seqnum_id, seqnum_id));
-
-        append_number(two, 7, &seqnum);
-        printf("seqnum=%"PRIu64"\n", seqnum);
-        assert_se(seqnum == 5);
-
-        /* So..., here we have the same seqnum in two files with the
-         * same seqnum_id. */
-
-        test_close(two);
-
-        log_info("Done...");
-
-        if (arg_keep)
-                log_info("Not removing %s", t);
-        else {
-                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
-
-                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
-        }
-}
-
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        /* journal_file_open requires a valid machine id */
-        if (access("/etc/machine-id", F_OK) != 0)
-                return log_tests_skipped("/etc/machine-id not found");
-
-        arg_keep = argc > 1;
-
-        test_skip(setup_sequential);
-        test_skip(setup_interleaved);
-
-        test_sequence_numbers();
-
-        return 0;
-}
diff --git a/src/libsystemd/sd-journal/test-journal-match.c b/src/libsystemd/sd-journal/test-journal-match.c
index ded6756..571a88c 100644
--- a/src/libsystemd/sd-journal/test-journal-match.c
+++ b/src/libsystemd/sd-journal/test-journal-match.c
@@ -9,7 +9,6 @@
 #include "log.h"
 #include "string-util.h"
 #include "tests.h"
-#include "util.h"
 
 int main(int argc, char *argv[]) {
         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
diff --git a/src/libsystemd/sd-journal/test-journal-send.c b/src/libsystemd/sd-journal/test-journal-send.c
index 533b8d9..ca1fe7c 100644
--- a/src/libsystemd/sd-journal/test-journal-send.c
+++ b/src/libsystemd/sd-journal/test-journal-send.c
@@ -10,16 +10,17 @@
 #include "journal-send.h"
 #include "macro.h"
 #include "memory-util.h"
+#include "tests.h"
 
-static void test_journal_print(void) {
+TEST(journal_print) {
         assert_se(sd_journal_print(LOG_INFO, "XXX") == 0);
         assert_se(sd_journal_print(LOG_INFO, "%s", "YYY") == 0);
         assert_se(sd_journal_print(LOG_INFO, "X%4094sY", "ZZZ") == 0);
-        assert_se(sd_journal_print(LOG_INFO, "X%*sY", LONG_LINE_MAX - 8 - 3, "ZZZ") == 0);
-        assert_se(sd_journal_print(LOG_INFO, "X%*sY", LONG_LINE_MAX - 8 - 2, "ZZZ") == -ENOBUFS);
+        assert_se(sd_journal_print(LOG_INFO, "X%*sY", (int) LONG_LINE_MAX - 8 - 3, "ZZZ") == 0);
+        assert_se(sd_journal_print(LOG_INFO, "X%*sY", (int) LONG_LINE_MAX - 8 - 2, "ZZZ") == -ENOBUFS);
 }
 
-static void test_journal_send(void) {
+TEST(journal_send) {
         _cleanup_free_ char *huge = NULL;
 
 #define HUGE_SIZE (4096*1024)
@@ -98,13 +99,13 @@
         closelog();
 }
 
-int main(int argc, char *argv[]) {
-        test_journal_print();
-        test_journal_send();
-
+static int outro(void) {
         /* Sleep a bit to make it easy for journald to collect metadata. */
         sleep(1);
 
         close_journal_fd();
-        return 0;
+
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_FULL(LOG_INFO, NULL, outro);
diff --git a/src/libsystemd/sd-journal/test-journal-stream.c b/src/libsystemd/sd-journal/test-journal-stream.c
deleted file mode 100644
index ca1eaae..0000000
--- a/src/libsystemd/sd-journal/test-journal-stream.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "sd-journal.h"
-
-#include "alloc-util.h"
-#include "chattr-util.h"
-#include "io-util.h"
-#include "journal-file.h"
-#include "journal-internal.h"
-#include "log.h"
-#include "macro.h"
-#include "parse-util.h"
-#include "rm-rf.h"
-#include "tests.h"
-#include "util.h"
-
-#define N_ENTRIES 200
-
-static void verify_contents(sd_journal *j, unsigned skip) {
-        unsigned i;
-
-        assert_se(j);
-
-        i = 0;
-        SD_JOURNAL_FOREACH(j) {
-                const void *d;
-                char *k, *c;
-                size_t l;
-                unsigned u = 0;
-
-                assert_se(sd_journal_get_cursor(j, &k) >= 0);
-                printf("cursor: %s\n", k);
-                free(k);
-
-                assert_se(sd_journal_get_data(j, "MAGIC", &d, &l) >= 0);
-                printf("\t%.*s\n", (int) l, (const char*) d);
-
-                assert_se(sd_journal_get_data(j, "NUMBER", &d, &l) >= 0);
-                assert_se(k = strndup(d, l));
-                printf("\t%s\n", k);
-
-                if (skip > 0) {
-                        assert_se(safe_atou(k + 7, &u) >= 0);
-                        assert_se(i == u);
-                        i += skip;
-                }
-
-                free(k);
-
-                assert_se(sd_journal_get_cursor(j, &c) >= 0);
-                assert_se(sd_journal_test_cursor(j, c) > 0);
-                free(c);
-        }
-
-        if (skip > 0)
-                assert_se(i == N_ENTRIES);
-}
-
-static void run_test(void) {
-        JournalFile *one, *two, *three;
-        char t[] = "/var/tmp/journal-stream-XXXXXX";
-        unsigned i;
-        _cleanup_(sd_journal_closep) sd_journal *j = NULL;
-        char *z;
-        const void *data;
-        size_t l;
-        dual_timestamp previous_ts = DUAL_TIMESTAMP_NULL;
-
-        assert_se(mkdtemp(t));
-        assert_se(chdir(t) >= 0);
-        (void) chattr_path(t, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
-
-        assert_se(journal_file_open(-1, "one.journal", O_RDWR|O_CREAT, 0666, true, UINT64_MAX, false, NULL, NULL, NULL, NULL, &one) == 0);
-        assert_se(journal_file_open(-1, "two.journal", O_RDWR|O_CREAT, 0666, true, UINT64_MAX, false, NULL, NULL, NULL, NULL, &two) == 0);
-        assert_se(journal_file_open(-1, "three.journal", O_RDWR|O_CREAT, 0666, true, UINT64_MAX, false, NULL, NULL, NULL, NULL, &three) == 0);
-
-        for (i = 0; i < N_ENTRIES; i++) {
-                char *p, *q;
-                dual_timestamp ts;
-                struct iovec iovec[2];
-
-                dual_timestamp_get(&ts);
-
-                if (ts.monotonic <= previous_ts.monotonic)
-                        ts.monotonic = previous_ts.monotonic + 1;
-
-                if (ts.realtime <= previous_ts.realtime)
-                        ts.realtime = previous_ts.realtime + 1;
-
-                previous_ts = ts;
-
-                assert_se(asprintf(&p, "NUMBER=%u", i) >= 0);
-                iovec[0] = IOVEC_MAKE(p, strlen(p));
-
-                assert_se(asprintf(&q, "MAGIC=%s", i % 5 == 0 ? "quux" : "waldo") >= 0);
-
-                iovec[1] = IOVEC_MAKE(q, strlen(q));
-
-                if (i % 10 == 0)
-                        assert_se(journal_file_append_entry(three, &ts, NULL, iovec, 2, NULL, NULL, NULL) == 0);
-                else {
-                        if (i % 3 == 0)
-                                assert_se(journal_file_append_entry(two, &ts, NULL, iovec, 2, NULL, NULL, NULL) == 0);
-
-                        assert_se(journal_file_append_entry(one, &ts, NULL, iovec, 2, NULL, NULL, NULL) == 0);
-                }
-
-                free(p);
-                free(q);
-        }
-
-        (void) journal_file_close(one);
-        (void) journal_file_close(two);
-        (void) journal_file_close(three);
-
-        assert_se(sd_journal_open_directory(&j, t, 0) >= 0);
-
-        assert_se(sd_journal_add_match(j, "MAGIC=quux", 0) >= 0);
-        SD_JOURNAL_FOREACH_BACKWARDS(j) {
-                _cleanup_free_ char *c;
-
-                assert_se(sd_journal_get_data(j, "NUMBER", &data, &l) >= 0);
-                printf("\t%.*s\n", (int) l, (const char*) data);
-
-                assert_se(sd_journal_get_cursor(j, &c) >= 0);
-                assert_se(sd_journal_test_cursor(j, c) > 0);
-        }
-
-        SD_JOURNAL_FOREACH(j) {
-                _cleanup_free_ char *c;
-
-                assert_se(sd_journal_get_data(j, "NUMBER", &data, &l) >= 0);
-                printf("\t%.*s\n", (int) l, (const char*) data);
-
-                assert_se(sd_journal_get_cursor(j, &c) >= 0);
-                assert_se(sd_journal_test_cursor(j, c) > 0);
-        }
-
-        sd_journal_flush_matches(j);
-
-        verify_contents(j, 1);
-
-        printf("NEXT TEST\n");
-        assert_se(sd_journal_add_match(j, "MAGIC=quux", 0) >= 0);
-
-        assert_se(z = journal_make_match_string(j));
-        printf("resulting match expression is: %s\n", z);
-        free(z);
-
-        verify_contents(j, 5);
-
-        printf("NEXT TEST\n");
-        sd_journal_flush_matches(j);
-        assert_se(sd_journal_add_match(j, "MAGIC=waldo", 0) >= 0);
-        assert_se(sd_journal_add_match(j, "NUMBER=10", 0) >= 0);
-        assert_se(sd_journal_add_match(j, "NUMBER=11", 0) >= 0);
-        assert_se(sd_journal_add_match(j, "NUMBER=12", 0) >= 0);
-
-        assert_se(z = journal_make_match_string(j));
-        printf("resulting match expression is: %s\n", z);
-        free(z);
-
-        verify_contents(j, 0);
-
-        assert_se(sd_journal_query_unique(j, "NUMBER") >= 0);
-        SD_JOURNAL_FOREACH_UNIQUE(j, data, l)
-                printf("%.*s\n", (int) l, (const char*) data);
-
-        assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
-}
-
-int main(int argc, char *argv[]) {
-
-        /* journal_file_open requires a valid machine id */
-        if (access("/etc/machine-id", F_OK) != 0)
-                return log_tests_skipped("/etc/machine-id not found");
-
-        test_setup_logging(LOG_DEBUG);
-
-        /* Run this test twice. Once with old hashing and once with new hashing */
-        assert_se(setenv("SYSTEMD_JOURNAL_KEYED_HASH", "1", 1) >= 0);
-        run_test();
-
-        assert_se(setenv("SYSTEMD_JOURNAL_KEYED_HASH", "0", 1) >= 0);
-        run_test();
-
-        return 0;
-}
diff --git a/src/libsystemd/sd-journal/test-journal-verify.c b/src/libsystemd/sd-journal/test-journal-verify.c
deleted file mode 100644
index e9abfef..0000000
--- a/src/libsystemd/sd-journal/test-journal-verify.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include "chattr-util.h"
-#include "fd-util.h"
-#include "io-util.h"
-#include "journal-file.h"
-#include "journal-verify.h"
-#include "log.h"
-#include "rm-rf.h"
-#include "terminal-util.h"
-#include "tests.h"
-#include "util.h"
-
-#define N_ENTRIES 6000
-#define RANDOM_RANGE 77
-
-static void bit_toggle(const char *fn, uint64_t p) {
-        uint8_t b;
-        ssize_t r;
-        int fd;
-
-        fd = open(fn, O_RDWR|O_CLOEXEC);
-        assert_se(fd >= 0);
-
-        r = pread(fd, &b, 1, p/8);
-        assert_se(r == 1);
-
-        b ^= 1 << (p % 8);
-
-        r = pwrite(fd, &b, 1, p/8);
-        assert_se(r == 1);
-
-        safe_close(fd);
-}
-
-static int raw_verify(const char *fn, const char *verification_key) {
-        JournalFile *f;
-        int r;
-
-        r = journal_file_open(-1, fn, O_RDONLY, 0666, true, UINT64_MAX, !!verification_key, NULL, NULL, NULL, NULL, &f);
-        if (r < 0)
-                return r;
-
-        r = journal_file_verify(f, verification_key, NULL, NULL, NULL, false);
-        (void) journal_file_close(f);
-
-        return r;
-}
-
-int main(int argc, char *argv[]) {
-        char t[] = "/var/tmp/journal-XXXXXX";
-        unsigned n;
-        JournalFile *f;
-        const char *verification_key = argv[1];
-        usec_t from = 0, to = 0, total = 0;
-        char a[FORMAT_TIMESTAMP_MAX];
-        char b[FORMAT_TIMESTAMP_MAX];
-        char c[FORMAT_TIMESPAN_MAX];
-        struct stat st;
-        uint64_t p;
-
-        /* journal_file_open requires a valid machine id */
-        if (access("/etc/machine-id", F_OK) != 0)
-                return log_tests_skipped("/etc/machine-id not found");
-
-        test_setup_logging(LOG_DEBUG);
-
-        assert_se(mkdtemp(t));
-        assert_se(chdir(t) >= 0);
-        (void) chattr_path(t, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
-
-        log_info("Generating...");
-
-        assert_se(journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, 0666, true, UINT64_MAX, !!verification_key, NULL, NULL, NULL, NULL, &f) == 0);
-
-        for (n = 0; n < N_ENTRIES; n++) {
-                struct iovec iovec;
-                struct dual_timestamp ts;
-                char *test;
-
-                dual_timestamp_get(&ts);
-
-                assert_se(asprintf(&test, "RANDOM=%lu", random() % RANDOM_RANGE));
-
-                iovec = IOVEC_MAKE_STRING(test);
-
-                assert_se(journal_file_append_entry(f, &ts, NULL, &iovec, 1, NULL, NULL, NULL) == 0);
-
-                free(test);
-        }
-
-        (void) journal_file_close(f);
-
-        log_info("Verifying...");
-
-        assert_se(journal_file_open(-1, "test.journal", O_RDONLY, 0666, true, UINT64_MAX, !!verification_key, NULL, NULL, NULL, NULL, &f) == 0);
-        /* journal_file_print_header(f); */
-        journal_file_dump(f);
-
-        assert_se(journal_file_verify(f, verification_key, &from, &to, &total, true) >= 0);
-
-        if (verification_key && JOURNAL_HEADER_SEALED(f->header))
-                log_info("=> Validated from %s to %s, %s missing",
-                         format_timestamp(a, sizeof(a), from),
-                         format_timestamp(b, sizeof(b), to),
-                         format_timespan(c, sizeof(c), total > to ? total - to : 0, 0));
-
-        (void) journal_file_close(f);
-
-        if (verification_key) {
-                log_info("Toggling bits...");
-
-                assert_se(stat("test.journal", &st) >= 0);
-
-                for (p = 38448*8+0; p < ((uint64_t) st.st_size * 8); p ++) {
-                        bit_toggle("test.journal", p);
-
-                        log_info("[ %"PRIu64"+%"PRIu64"]", p / 8, p % 8);
-
-                        if (raw_verify("test.journal", verification_key) >= 0)
-                                log_notice(ANSI_HIGHLIGHT_RED ">>>> %"PRIu64" (bit %"PRIu64") can be toggled without detection." ANSI_NORMAL, p / 8, p % 8);
-
-                        bit_toggle("test.journal", p);
-                }
-        }
-
-        log_info("Exiting...");
-
-        assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
-
-        return 0;
-}
diff --git a/src/libsystemd/sd-journal/test-journal.c b/src/libsystemd/sd-journal/test-journal.c
deleted file mode 100644
index fd3c4d9..0000000
--- a/src/libsystemd/sd-journal/test-journal.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "chattr-util.h"
-#include "io-util.h"
-#include "journal-authenticate.h"
-#include "journal-file.h"
-#include "journal-vacuum.h"
-#include "log.h"
-#include "rm-rf.h"
-#include "tests.h"
-
-static bool arg_keep = false;
-
-static void mkdtemp_chdir_chattr(char *path) {
-        assert_se(mkdtemp(path));
-        assert_se(chdir(path) >= 0);
-
-        /* Speed up things a bit on btrfs, ensuring that CoW is turned off for all files created in our
-         * directory during the test run */
-        (void) chattr_path(path, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
-}
-
-static void test_non_empty(void) {
-        dual_timestamp ts;
-        JournalFile *f;
-        struct iovec iovec;
-        static const char test[] = "TEST1=1", test2[] = "TEST2=2";
-        Object *o;
-        uint64_t p;
-        sd_id128_t fake_boot_id;
-        char t[] = "/var/tmp/journal-XXXXXX";
-
-        test_setup_logging(LOG_DEBUG);
-
-        mkdtemp_chdir_chattr(t);
-
-        assert_se(journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, 0666, true, UINT64_MAX, true, NULL, NULL, NULL, NULL, &f) == 0);
-
-        assert_se(dual_timestamp_get(&ts));
-        assert_se(sd_id128_randomize(&fake_boot_id) == 0);
-
-        iovec = IOVEC_MAKE_STRING(test);
-        assert_se(journal_file_append_entry(f, &ts, NULL, &iovec, 1, NULL, NULL, NULL) == 0);
-
-        iovec = IOVEC_MAKE_STRING(test2);
-        assert_se(journal_file_append_entry(f, &ts, NULL, &iovec, 1, NULL, NULL, NULL) == 0);
-
-        iovec = IOVEC_MAKE_STRING(test);
-        assert_se(journal_file_append_entry(f, &ts, &fake_boot_id, &iovec, 1, NULL, NULL, NULL) == 0);
-
-#if HAVE_GCRYPT
-        journal_file_append_tag(f);
-#endif
-        journal_file_dump(f);
-
-        assert_se(journal_file_next_entry(f, 0, DIRECTION_DOWN, &o, &p) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 1);
-
-        assert_se(journal_file_next_entry(f, p, DIRECTION_DOWN, &o, &p) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 2);
-
-        assert_se(journal_file_next_entry(f, p, DIRECTION_DOWN, &o, &p) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 3);
-        assert_se(sd_id128_equal(o->entry.boot_id, fake_boot_id));
-
-        assert_se(journal_file_next_entry(f, p, DIRECTION_DOWN, &o, &p) == 0);
-
-        assert_se(journal_file_next_entry(f, 0, DIRECTION_DOWN, &o, &p) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 1);
-
-        assert_se(journal_file_find_data_object(f, test, strlen(test), NULL, &p) == 1);
-        assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 1);
-
-        assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 3);
-
-        assert_se(journal_file_find_data_object(f, test2, strlen(test2), NULL, &p) == 1);
-        assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 2);
-
-        assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 2);
-
-        assert_se(journal_file_find_data_object(f, "quux", 4, NULL, &p) == 0);
-
-        assert_se(journal_file_move_to_entry_by_seqnum(f, 1, DIRECTION_DOWN, &o, NULL) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 1);
-
-        assert_se(journal_file_move_to_entry_by_seqnum(f, 3, DIRECTION_DOWN, &o, NULL) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 3);
-
-        assert_se(journal_file_move_to_entry_by_seqnum(f, 2, DIRECTION_DOWN, &o, NULL) == 1);
-        assert_se(le64toh(o->entry.seqnum) == 2);
-
-        assert_se(journal_file_move_to_entry_by_seqnum(f, 10, DIRECTION_DOWN, &o, NULL) == 0);
-
-        journal_file_rotate(&f, true, UINT64_MAX, true, NULL);
-        journal_file_rotate(&f, true, UINT64_MAX, true, NULL);
-
-        (void) journal_file_close(f);
-
-        log_info("Done...");
-
-        if (arg_keep)
-                log_info("Not removing %s", t);
-        else {
-                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
-
-                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
-        }
-
-        puts("------------------------------------------------------------");
-}
-
-static void test_empty(void) {
-        JournalFile *f1, *f2, *f3, *f4;
-        char t[] = "/var/tmp/journal-XXXXXX";
-
-        test_setup_logging(LOG_DEBUG);
-
-        mkdtemp_chdir_chattr(t);
-
-        assert_se(journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, 0666, false, UINT64_MAX, false, NULL, NULL, NULL, NULL, &f1) == 0);
-
-        assert_se(journal_file_open(-1, "test-compress.journal", O_RDWR|O_CREAT, 0666, true, UINT64_MAX, false, NULL, NULL, NULL, NULL, &f2) == 0);
-
-        assert_se(journal_file_open(-1, "test-seal.journal", O_RDWR|O_CREAT, 0666, false, UINT64_MAX, true, NULL, NULL, NULL, NULL, &f3) == 0);
-
-        assert_se(journal_file_open(-1, "test-seal-compress.journal", O_RDWR|O_CREAT, 0666, true, UINT64_MAX, true, NULL, NULL, NULL, NULL, &f4) == 0);
-
-        journal_file_print_header(f1);
-        puts("");
-        journal_file_print_header(f2);
-        puts("");
-        journal_file_print_header(f3);
-        puts("");
-        journal_file_print_header(f4);
-        puts("");
-
-        log_info("Done...");
-
-        if (arg_keep)
-                log_info("Not removing %s", t);
-        else {
-                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
-
-                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
-        }
-
-        (void) journal_file_close(f1);
-        (void) journal_file_close(f2);
-        (void) journal_file_close(f3);
-        (void) journal_file_close(f4);
-}
-
-#if HAVE_COMPRESSION
-static bool check_compressed(uint64_t compress_threshold, uint64_t data_size) {
-        dual_timestamp ts;
-        JournalFile *f;
-        struct iovec iovec;
-        Object *o;
-        uint64_t p;
-        char t[] = "/var/tmp/journal-XXXXXX";
-        char data[2048] = {0};
-        bool is_compressed;
-        int r;
-
-        assert_se(data_size <= sizeof(data));
-
-        test_setup_logging(LOG_DEBUG);
-
-        mkdtemp_chdir_chattr(t);
-
-        assert_se(journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, 0666, true, compress_threshold, true, NULL, NULL, NULL, NULL, &f) == 0);
-
-        dual_timestamp_get(&ts);
-
-        iovec = IOVEC_MAKE(data, data_size);
-        assert_se(journal_file_append_entry(f, &ts, NULL, &iovec, 1, NULL, NULL, NULL) == 0);
-
-#if HAVE_GCRYPT
-        journal_file_append_tag(f);
-#endif
-        journal_file_dump(f);
-
-        /* We have to partially reimplement some of the dump logic, because the normal next_entry does the
-         * decompression for us. */
-        p = le64toh(f->header->header_size);
-        for (;;) {
-                r = journal_file_move_to_object(f, OBJECT_UNUSED, p, &o);
-                assert_se(r == 0);
-                if (o->object.type == OBJECT_DATA)
-                        break;
-
-                assert_se(p < le64toh(f->header->tail_object_offset));
-                p = p + ALIGN64(le64toh(o->object.size));
-        }
-
-        is_compressed = (o->object.flags & OBJECT_COMPRESSION_MASK) != 0;
-
-        (void) journal_file_close(f);
-
-        log_info("Done...");
-
-        if (arg_keep)
-                log_info("Not removing %s", t);
-        else {
-                journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
-
-                assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
-        }
-
-        puts("------------------------------------------------------------");
-
-        return is_compressed;
-}
-
-static void test_min_compress_size(void) {
-        /* Note that XZ will actually fail to compress anything under 80 bytes, so you have to choose the limits
-         * carefully */
-
-        /* DEFAULT_MIN_COMPRESS_SIZE is 512 */
-        assert_se(!check_compressed(UINT64_MAX, 255));
-        assert_se(check_compressed(UINT64_MAX, 513));
-
-        /* compress everything */
-        assert_se(check_compressed(0, 96));
-        assert_se(check_compressed(8, 96));
-
-        /* Ensure we don't try to compress less than 8 bytes */
-        assert_se(!check_compressed(0, 7));
-
-        /* check boundary conditions */
-        assert_se(check_compressed(256, 256));
-        assert_se(!check_compressed(256, 255));
-}
-#endif
-
-int main(int argc, char *argv[]) {
-        arg_keep = argc > 1;
-
-        test_setup_logging(LOG_INFO);
-
-        /* journal_file_open requires a valid machine id */
-        if (access("/etc/machine-id", F_OK) != 0)
-                return log_tests_skipped("/etc/machine-id not found");
-
-        test_non_empty();
-        test_empty();
-#if HAVE_COMPRESSION
-        test_min_compress_size();
-#endif
-
-        return 0;
-}
diff --git a/src/libsystemd/sd-journal/test-mmap-cache.c b/src/libsystemd/sd-journal/test-mmap-cache.c
index c3212fe..e3dfbad 100644
--- a/src/libsystemd/sd-journal/test-mmap-cache.c
+++ b/src/libsystemd/sd-journal/test-mmap-cache.c
@@ -9,7 +9,6 @@
 #include "macro.h"
 #include "mmap-cache.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 int main(int argc, char *argv[]) {
         MMapFileDescriptor *fx;
@@ -34,28 +33,28 @@
         assert_se(z >= 0);
         unlink(pz);
 
-        r = mmap_cache_get(m, fx, 0, false, 1, 2, NULL, &p);
+        r = mmap_cache_fd_get(fx, 0, false, 1, 2, NULL, &p);
         assert_se(r >= 0);
 
-        r = mmap_cache_get(m, fx, 0, false, 2, 2, NULL, &q);
+        r = mmap_cache_fd_get(fx, 0, false, 2, 2, NULL, &q);
         assert_se(r >= 0);
 
         assert_se((uint8_t*) p + 1 == (uint8_t*) q);
 
-        r = mmap_cache_get(m, fx, 1, false, 3, 2, NULL, &q);
+        r = mmap_cache_fd_get(fx, 1, false, 3, 2, NULL, &q);
         assert_se(r >= 0);
 
         assert_se((uint8_t*) p + 2 == (uint8_t*) q);
 
-        r = mmap_cache_get(m, fx, 0, false, 16ULL*1024ULL*1024ULL, 2, NULL, &p);
+        r = mmap_cache_fd_get(fx, 0, false, 16ULL*1024ULL*1024ULL, 2, NULL, &p);
         assert_se(r >= 0);
 
-        r = mmap_cache_get(m, fx, 1, false, 16ULL*1024ULL*1024ULL+1, 2, NULL, &q);
+        r = mmap_cache_fd_get(fx, 1, false, 16ULL*1024ULL*1024ULL+1, 2, NULL, &q);
         assert_se(r >= 0);
 
         assert_se((uint8_t*) p + 1 == (uint8_t*) q);
 
-        mmap_cache_free_fd(m, fx);
+        mmap_cache_fd_free(fx);
         mmap_cache_unref(m);
 
         safe_close(x);
diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c
index f6fff20..d483889 100644
--- a/src/libsystemd/sd-login/sd-login.c
+++ b/src/libsystemd/sd-login/sd-login.c
@@ -22,12 +22,12 @@
 #include "macro.h"
 #include "parse-util.h"
 #include "path-util.h"
+#include "process-util.h"
 #include "socket-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 
 /* Error codes:
  *
@@ -135,8 +135,208 @@
         return 0;
 }
 
+_public_ int sd_pidfd_get_session(int pidfd, char **ret_session) {
+        _cleanup_free_ char *session = NULL;
+        pid_t pid;
+        int r;
+
+        assert_return(pidfd >= 0, -EBADF);
+        assert_return(ret_session, -EINVAL);
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return r;
+
+        r = sd_pid_get_session(pid, &session);
+        if (r < 0)
+                return r;
+
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r < 0)
+                return r;
+
+        *ret_session = TAKE_PTR(session);
+
+        return 0;
+}
+
+_public_ int sd_pidfd_get_unit(int pidfd, char **ret_unit) {
+        _cleanup_free_ char *unit = NULL;
+        pid_t pid;
+        int r;
+
+        assert_return(pidfd >= 0, -EBADF);
+        assert_return(ret_unit, -EINVAL);
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return r;
+
+        r = sd_pid_get_unit(pid, &unit);
+        if (r < 0)
+                return r;
+
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r < 0)
+                return r;
+
+        *ret_unit = TAKE_PTR(unit);
+
+        return 0;
+}
+
+_public_ int sd_pidfd_get_user_unit(int pidfd, char **ret_unit) {
+        _cleanup_free_ char *unit = NULL;
+        pid_t pid;
+        int r;
+
+        assert_return(pidfd >= 0, -EBADF);
+        assert_return(ret_unit, -EINVAL);
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return r;
+
+        r = sd_pid_get_user_unit(pid, &unit);
+        if (r < 0)
+                return r;
+
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r < 0)
+                return r;
+
+        *ret_unit = TAKE_PTR(unit);
+
+        return 0;
+}
+
+_public_ int sd_pidfd_get_machine_name(int pidfd, char **ret_name) {
+        _cleanup_free_ char *name = NULL;
+        pid_t pid;
+        int r;
+
+        assert_return(pidfd >= 0, -EBADF);
+        assert_return(ret_name, -EINVAL);
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return r;
+
+        r = sd_pid_get_machine_name(pid, &name);
+        if (r < 0)
+                return r;
+
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r < 0)
+                return r;
+
+        *ret_name = TAKE_PTR(name);
+
+        return 0;
+}
+
+_public_ int sd_pidfd_get_slice(int pidfd, char **ret_slice) {
+        _cleanup_free_ char *slice = NULL;
+        pid_t pid;
+        int r;
+
+        assert_return(pidfd >= 0, -EBADF);
+        assert_return(ret_slice, -EINVAL);
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return r;
+
+        r = sd_pid_get_slice(pid, &slice);
+        if (r < 0)
+                return r;
+
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r < 0)
+                return r;
+
+        *ret_slice = TAKE_PTR(slice);
+
+        return 0;
+}
+
+_public_ int sd_pidfd_get_user_slice(int pidfd, char **ret_slice) {
+        _cleanup_free_ char *slice = NULL;
+        pid_t pid;
+        int r;
+
+        assert_return(pidfd >= 0, -EBADF);
+        assert_return(ret_slice, -EINVAL);
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return r;
+
+        r = sd_pid_get_user_slice(pid, &slice);
+        if (r < 0)
+                return r;
+
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r < 0)
+                return r;
+
+        *ret_slice = TAKE_PTR(slice);
+
+        return 0;
+}
+
+_public_ int sd_pidfd_get_owner_uid(int pidfd, uid_t *ret_uid) {
+        uid_t uid;
+        pid_t pid;
+        int r;
+
+        assert_return(pidfd >= 0, -EINVAL);
+        assert_return(ret_uid, -EINVAL);
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return r;
+
+        r = sd_pid_get_owner_uid(pid, &uid);
+        if (r < 0)
+                return r;
+
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r < 0)
+                return r;
+
+        *ret_uid = uid;
+
+        return 0;
+}
+
+_public_ int sd_pidfd_get_cgroup(int pidfd, char **ret_cgroup) {
+        _cleanup_free_ char *cgroup = NULL;
+        pid_t pid;
+        int r;
+
+        assert_return(pidfd >= 0, -EBADF);
+        assert_return(ret_cgroup, -EINVAL);
+
+        r = pidfd_get_pid(pidfd, &pid);
+        if (r < 0)
+                return r;
+
+        r = sd_pid_get_cgroup(pid, &cgroup);
+        if (r < 0)
+                return r;
+
+        r = pidfd_verify_pid(pidfd, pid);
+        if (r < 0)
+                return r;
+
+        *ret_cgroup = TAKE_PTR(cgroup);
+
+        return 0;
+}
+
 _public_ int sd_peer_get_session(int fd, char **session) {
-        struct ucred ucred = {};
+        struct ucred ucred = UCRED_INVALID;
         int r;
 
         assert_return(fd >= 0, -EBADF);
@@ -269,13 +469,11 @@
                 return r;
 
         r = parse_env_file(NULL, p, "STATE", &s);
-        if (r == -ENOENT) {
+        if (r == -ENOENT)
                 r = free_and_strdup(&s, "offline");
-                if (r < 0)
-                        return r;
-        } else if (r < 0)
+        if (r < 0)
                 return r;
-        else if (isempty(s))
+        if (isempty(s))
                 return -EIO;
 
         *state = TAKE_PTR(s);
@@ -585,8 +783,8 @@
 
 _public_ int sd_session_get_desktop(const char *session, char **desktop) {
         _cleanup_free_ char *escaped = NULL;
-        char *t;
         int r;
+        ssize_t l;
 
         assert_return(desktop, -EINVAL);
 
@@ -594,11 +792,9 @@
         if (r < 0)
                 return r;
 
-        r = cunescape(escaped, 0, &t);
-        if (r < 0)
-                return r;
-
-        *desktop = t;
+        l = cunescape(escaped, 0, desktop);
+        if (l < 0)
+                return l;
         return 0;
 }
 
@@ -776,7 +972,6 @@
 
 _public_ int sd_get_uids(uid_t **users) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0;
         unsigned n = 0;
         _cleanup_free_ uid_t *l = NULL;
@@ -950,7 +1145,7 @@
 }
 
 _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         bool good = false;
         int k;
 
@@ -1001,7 +1196,7 @@
 
 _public_ sd_login_monitor* sd_login_monitor_unref(sd_login_monitor *m) {
         if (m)
-                close_nointr(MONITOR_TO_FD(m));
+                (void) close_nointr(MONITOR_TO_FD(m));
 
         return NULL;
 }
diff --git a/src/libsystemd/sd-login/test-login.c b/src/libsystemd/sd-login/test-login.c
index 3fc394d..fe4b52f 100644
--- a/src/libsystemd/sd-login/test-login.c
+++ b/src/libsystemd/sd-login/test-login.c
@@ -9,8 +9,11 @@
 #include "fd-util.h"
 #include "format-util.h"
 #include "log.h"
+#include "missing_syscall.h"
+#include "process-util.h"
 #include "string-util.h"
 #include "strv.h"
+#include "tests.h"
 #include "time-util.h"
 #include "user-util.h"
 
@@ -35,14 +38,15 @@
         return r == 0 ? "OK" : errno_to_name(r);
 }
 
-static void test_login(void) {
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+TEST(login) {
+        _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
         _cleanup_free_ char *pp = NULL, *qq = NULL,
                 *display_session = NULL, *cgroup = NULL,
                 *display = NULL, *remote_user = NULL, *remote_host = NULL,
                 *type = NULL, *class = NULL, *state = NULL, *state2 = NULL,
                 *seat = NULL, *session = NULL,
                 *unit = NULL, *user_unit = NULL, *slice = NULL;
+        _cleanup_close_ int pidfd = -EBADF;
         int r;
         uid_t u, u2 = UID_INVALID;
         char *t, **seats = NULL, **sessions = NULL;
@@ -70,6 +74,35 @@
         log_info("sd_pid_get_cgroup(0, …) → %s / \"%s\"", e(r), strnull(cgroup));
         assert_se(IN_SET(r, 0, -ENOMEDIUM));
 
+        pidfd = pidfd_open(getpid_cached(), 0);
+        if (pidfd >= 0) {
+                _cleanup_free_ char *cgroup2 = NULL, *session2 = NULL,
+                        *unit2 = NULL, *user_unit2 = NULL, *slice2 = NULL;
+
+                r = sd_pidfd_get_unit(pidfd, &unit2);
+                log_info("sd_pidfd_get_unit(pidfd, …) → %s / \"%s\"", e(r), strnull(unit2));
+                assert_se(IN_SET(r, 0, -ENODATA));
+
+                r = sd_pidfd_get_user_unit(pidfd, &user_unit2);
+                log_info("sd_pidfd_get_user_unit(pidfd, …) → %s / \"%s\"", e(r), strnull(user_unit2));
+                assert_se(IN_SET(r, 0, -ENODATA));
+
+                r = sd_pidfd_get_slice(pidfd, &slice2);
+                log_info("sd_pidfd_get_slice(pidfd, …) → %s / \"%s\"", e(r), strnull(slice2));
+                assert_se(IN_SET(r, 0, -ENODATA));
+
+                r = sd_pidfd_get_owner_uid(pidfd, &u2);
+                log_info("sd_pidfd_get_owner_uid(pidfd, …) → %s / "UID_FMT, e(r), u2);
+                assert_se(IN_SET(r, 0, -ENODATA));
+
+                r = sd_pidfd_get_session(pidfd, &session2);
+                log_info("sd_pidfd_get_session(pidfd, …) → %s / \"%s\"", e(r), strnull(session2));
+
+                r = sd_pidfd_get_cgroup(pidfd, &cgroup2);
+                log_info("sd_pidfd_get_cgroup(pidfd, …) → %s / \"%s\"", e(r), strnull(cgroup2));
+                assert_se(IN_SET(r, 0, -ENOMEDIUM));
+        }
+
         r = sd_uid_get_display(u2, &display_session);
         log_info("sd_uid_get_display("UID_FMT", …) → %s / \"%s\"", u2, e(r), strnull(display_session));
         if (u2 == UID_INVALID)
@@ -259,10 +292,13 @@
         }
 }
 
-static void test_monitor(void) {
+TEST(monitor) {
         sd_login_monitor *m = NULL;
         int r;
 
+        if (!streq_ptr(saved_argv[1], "-m"))
+                return;
+
         assert_se(sd_login_monitor_new("session", &m) == 0);
 
         for (unsigned n = 0; n < 5; n++) {
@@ -290,16 +326,9 @@
         sd_login_monitor_unref(m);
 }
 
-int main(int argc, char* argv[]) {
-        log_parse_environment();
-        log_open();
-
+static int intro(void) {
         log_info("/* Information printed is from the live system */");
-
-        test_login();
-
-        if (streq_ptr(argv[1], "-m"))
-                test_monitor();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/libsystemd/sd-netlink/generic-netlink.c b/src/libsystemd/sd-netlink/generic-netlink.c
deleted file mode 100644
index 69f1a0c..0000000
--- a/src/libsystemd/sd-netlink/generic-netlink.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <linux/genetlink.h>
-
-#include "sd-netlink.h"
-
-#include "alloc-util.h"
-#include "generic-netlink.h"
-#include "netlink-internal.h"
-
-typedef struct {
-        const char* name;
-        uint8_t version;
-} genl_family;
-
-static const genl_family genl_families[] = {
-        [SD_GENL_ID_CTRL]   = { .name = "",          .version = 1 },
-        [SD_GENL_WIREGUARD] = { .name = "wireguard", .version = 1 },
-        [SD_GENL_FOU]       = { .name = "fou",       .version = 1 },
-        [SD_GENL_L2TP]      = { .name = "l2tp",      .version = 1 },
-        [SD_GENL_MACSEC]    = { .name = "macsec",    .version = 1 },
-        [SD_GENL_NL80211]   = { .name = "nl80211",   .version = 1 },
-        [SD_GENL_BATADV]    = { .name = "batadv",    .version = 1 },
-};
-
-int sd_genl_socket_open(sd_netlink **ret) {
-        return netlink_open_family(ret, NETLINK_GENERIC);
-}
-
-static int genl_message_new(sd_netlink *nl, sd_genl_family_t family, uint16_t nlmsg_type, uint8_t cmd, sd_netlink_message **ret) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        const NLType *genl_cmd_type, *nl_type;
-        const NLTypeSystem *type_system;
-        size_t size;
-        int r;
-
-        assert(nl);
-        assert(nl->protocol == NETLINK_GENERIC);
-        assert(ret);
-
-        r = type_system_get_type(&genl_family_type_system_root, &genl_cmd_type, family);
-        if (r < 0)
-                return r;
-
-        r = message_new_empty(nl, &m);
-        if (r < 0)
-                return r;
-
-        size = NLMSG_SPACE(sizeof(struct genlmsghdr));
-        m->hdr = malloc0(size);
-        if (!m->hdr)
-                return -ENOMEM;
-
-        m->hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
-
-        type_get_type_system(genl_cmd_type, &type_system);
-
-        r = type_system_get_type(type_system, &nl_type, cmd);
-        if (r < 0)
-                return r;
-
-        m->hdr->nlmsg_len = size;
-        m->hdr->nlmsg_type = nlmsg_type;
-
-        type_get_type_system(nl_type, &m->containers[0].type_system);
-
-        *(struct genlmsghdr *) NLMSG_DATA(m->hdr) = (struct genlmsghdr) {
-                .cmd = cmd,
-                .version = genl_families[family].version,
-        };
-
-        *ret = TAKE_PTR(m);
-
-        return 0;
-}
-
-static int lookup_nlmsg_type(sd_netlink *nl, sd_genl_family_t family, uint16_t *ret) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
-        uint16_t u;
-        void *v;
-        int r;
-
-        assert(nl);
-        assert(nl->protocol == NETLINK_GENERIC);
-        assert(ret);
-
-        if (family == SD_GENL_ID_CTRL) {
-                *ret = GENL_ID_CTRL;
-                return 0;
-        }
-
-        v = hashmap_get(nl->genl_family_to_nlmsg_type, INT_TO_PTR(family));
-        if (v) {
-                *ret = PTR_TO_UINT(v);
-                return 0;
-        }
-
-        r = genl_message_new(nl, SD_GENL_ID_CTRL, GENL_ID_CTRL, CTRL_CMD_GETFAMILY, &req);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(req, CTRL_ATTR_FAMILY_NAME, genl_families[family].name);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_call(nl, req, 0, &reply);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_read_u16(reply, CTRL_ATTR_FAMILY_ID, &u);
-        if (r < 0)
-                return r;
-
-        r = hashmap_ensure_put(&nl->genl_family_to_nlmsg_type, NULL, INT_TO_PTR(family), UINT_TO_PTR(u));
-        if (r < 0)
-                return r;
-
-        r = hashmap_ensure_put(&nl->nlmsg_type_to_genl_family, NULL, UINT_TO_PTR(u), INT_TO_PTR(family));
-        if (r < 0)
-                return r;
-
-        *ret = u;
-        return 0;
-}
-
-int sd_genl_message_new(sd_netlink *nl, sd_genl_family_t family, uint8_t cmd, sd_netlink_message **ret) {
-        uint16_t nlmsg_type = 0;  /* Unnecessary initialization to appease gcc */
-        int r;
-
-        assert_return(nl, -EINVAL);
-        assert_return(nl->protocol == NETLINK_GENERIC, -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = lookup_nlmsg_type(nl, family, &nlmsg_type);
-        if (r < 0)
-                return r;
-
-        return genl_message_new(nl, family, nlmsg_type, cmd, ret);
-}
-
-int nlmsg_type_to_genl_family(const sd_netlink *nl, uint16_t nlmsg_type, sd_genl_family_t *ret) {
-        void *p;
-
-        assert(nl);
-        assert(nl->protocol == NETLINK_GENERIC);
-        assert(ret);
-
-        if (nlmsg_type == NLMSG_ERROR)
-                *ret = SD_GENL_ERROR;
-        else if (nlmsg_type == NLMSG_DONE)
-                *ret = SD_GENL_DONE;
-        else if (nlmsg_type == GENL_ID_CTRL)
-                *ret = SD_GENL_ID_CTRL;
-        else {
-                p = hashmap_get(nl->nlmsg_type_to_genl_family, UINT_TO_PTR(nlmsg_type));
-                if (!p)
-                        return -EOPNOTSUPP;
-
-                *ret = PTR_TO_INT(p);
-        }
-
-        return 0;
-}
-
-int sd_genl_message_get_family(sd_netlink *nl, sd_netlink_message *m, sd_genl_family_t *ret) {
-        uint16_t nlmsg_type;
-        int r;
-
-        assert_return(nl, -EINVAL);
-        assert_return(nl->protocol == NETLINK_GENERIC, -EINVAL);
-        assert_return(m, -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = sd_netlink_message_get_type(m, &nlmsg_type);
-        if (r < 0)
-                return r;
-
-        return nlmsg_type_to_genl_family(nl, nlmsg_type, ret);
-}
diff --git a/src/libsystemd/sd-netlink/generic-netlink.h b/src/libsystemd/sd-netlink/generic-netlink.h
deleted file mode 100644
index fd04614..0000000
--- a/src/libsystemd/sd-netlink/generic-netlink.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include "sd-netlink.h"
-
-int nlmsg_type_to_genl_family(const sd_netlink *nl, uint16_t type, sd_genl_family_t *ret);
diff --git a/src/libsystemd/sd-netlink/netlink-genl.c b/src/libsystemd/sd-netlink/netlink-genl.c
new file mode 100644
index 0000000..1dc62e8
--- /dev/null
+++ b/src/libsystemd/sd-netlink/netlink-genl.c
@@ -0,0 +1,488 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/genetlink.h>
+
+#include "sd-netlink.h"
+
+#include "alloc-util.h"
+#include "netlink-genl.h"
+#include "netlink-internal.h"
+#include "netlink-types.h"
+
+typedef struct GenericNetlinkFamily {
+        sd_netlink *genl;
+
+        const NLAPolicySet *policy_set;
+
+        uint16_t id; /* a.k.a nlmsg_type */
+        char *name;
+        uint32_t version;
+        uint32_t additional_header_size;
+        Hashmap *multicast_group_by_name;
+} GenericNetlinkFamily;
+
+static const GenericNetlinkFamily nlctrl_static = {
+        .id = GENL_ID_CTRL,
+        .name = (char*) CTRL_GENL_NAME,
+        .version = 0x01,
+};
+
+static GenericNetlinkFamily *genl_family_free(GenericNetlinkFamily *f) {
+        if (!f)
+                return NULL;
+
+        if (f->genl) {
+                if (f->id > 0)
+                        hashmap_remove(f->genl->genl_family_by_id, UINT_TO_PTR(f->id));
+                if (f->name)
+                        hashmap_remove(f->genl->genl_family_by_name, f->name);
+        }
+
+        free(f->name);
+        hashmap_free(f->multicast_group_by_name);
+
+        return mfree(f);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(GenericNetlinkFamily*, genl_family_free);
+
+void genl_clear_family(sd_netlink *nl) {
+        assert(nl);
+
+        nl->genl_family_by_name = hashmap_free_with_destructor(nl->genl_family_by_name, genl_family_free);
+        nl->genl_family_by_id = hashmap_free_with_destructor(nl->genl_family_by_id, genl_family_free);
+}
+
+static int genl_family_new_unsupported(
+                sd_netlink *nl,
+                const char *family_name,
+                const NLAPolicySet *policy_set) {
+
+        _cleanup_(genl_family_freep) GenericNetlinkFamily *f = NULL;
+        int r;
+
+        assert(nl);
+        assert(family_name);
+        assert(policy_set);
+
+        /* Kernel does not support the genl family? To prevent from resolving the family name again,
+         * let's store the family with zero id to indicate that. */
+
+        f = new(GenericNetlinkFamily, 1);
+        if (!f)
+                return -ENOMEM;
+
+        *f = (GenericNetlinkFamily) {
+                .policy_set = policy_set,
+        };
+
+        f->name = strdup(family_name);
+        if (!f->name)
+                return -ENOMEM;
+
+        r = hashmap_ensure_put(&nl->genl_family_by_name, &string_hash_ops, f->name, f);
+        if (r < 0)
+                return r;
+
+        f->genl = nl;
+        TAKE_PTR(f);
+        return 0;
+}
+
+static int genl_family_new(
+                sd_netlink *nl,
+                const char *expected_family_name,
+                const NLAPolicySet *policy_set,
+                sd_netlink_message *message,
+                const GenericNetlinkFamily **ret) {
+
+        _cleanup_(genl_family_freep) GenericNetlinkFamily *f = NULL;
+        const char *family_name;
+        uint8_t cmd;
+        int r;
+
+        assert(nl);
+        assert(expected_family_name);
+        assert(policy_set);
+        assert(message);
+        assert(ret);
+
+        f = new(GenericNetlinkFamily, 1);
+        if (!f)
+                return -ENOMEM;
+
+        *f = (GenericNetlinkFamily) {
+                .policy_set = policy_set,
+        };
+
+        r = sd_genl_message_get_family_name(nl, message, &family_name);
+        if (r < 0)
+                return r;
+
+        if (!streq(family_name, CTRL_GENL_NAME))
+                return -EINVAL;
+
+        r = sd_genl_message_get_command(nl, message, &cmd);
+        if (r < 0)
+                return r;
+
+        if (cmd != CTRL_CMD_NEWFAMILY)
+                return -EINVAL;
+
+        r = sd_netlink_message_read_u16(message, CTRL_ATTR_FAMILY_ID, &f->id);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_read_string_strdup(message, CTRL_ATTR_FAMILY_NAME, &f->name);
+        if (r < 0)
+                return r;
+
+        if (!streq(f->name, expected_family_name))
+                return -EINVAL;
+
+        r = sd_netlink_message_read_u32(message, CTRL_ATTR_VERSION, &f->version);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_read_u32(message, CTRL_ATTR_HDRSIZE, &f->additional_header_size);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_enter_container(message, CTRL_ATTR_MCAST_GROUPS);
+        if (r >= 0) {
+                for (uint16_t i = 0; i < UINT16_MAX; i++) {
+                        _cleanup_free_ char *group_name = NULL;
+                        uint32_t group_id;
+
+                        r = sd_netlink_message_enter_array(message, i + 1);
+                        if (r == -ENODATA)
+                                break;
+                        if (r < 0)
+                                return r;
+
+                        r = sd_netlink_message_read_u32(message, CTRL_ATTR_MCAST_GRP_ID, &group_id);
+                        if (r < 0)
+                                return r;
+
+                        r = sd_netlink_message_read_string_strdup(message, CTRL_ATTR_MCAST_GRP_NAME, &group_name);
+                        if (r < 0)
+                                return r;
+
+                        r = sd_netlink_message_exit_container(message);
+                        if (r < 0)
+                                return r;
+
+                        if (group_id == 0) {
+                                log_debug("sd-netlink: received multicast group '%s' for generic netlink family '%s' with id == 0, ignoring",
+                                          group_name, f->name);
+                                continue;
+                        }
+
+                        r = hashmap_ensure_put(&f->multicast_group_by_name, &string_hash_ops_free, group_name, UINT32_TO_PTR(group_id));
+                        if (r < 0)
+                                return r;
+
+                        TAKE_PTR(group_name);
+                }
+
+                r = sd_netlink_message_exit_container(message);
+                if (r < 0)
+                        return r;
+        }
+
+        r = hashmap_ensure_put(&nl->genl_family_by_id, NULL, UINT_TO_PTR(f->id), f);
+        if (r < 0)
+                return r;
+
+        r = hashmap_ensure_put(&nl->genl_family_by_name, &string_hash_ops, f->name, f);
+        if (r < 0) {
+                hashmap_remove(nl->genl_family_by_id, UINT_TO_PTR(f->id));
+                return r;
+        }
+
+        f->genl = nl;
+        *ret = TAKE_PTR(f);
+        return 0;
+}
+
+static const NLAPolicySet *genl_family_get_policy_set(const GenericNetlinkFamily *family) {
+        assert(family);
+
+        if (family->policy_set)
+                return family->policy_set;
+
+        return genl_get_policy_set_by_name(family->name);
+}
+
+static int genl_message_new(
+                sd_netlink *nl,
+                const GenericNetlinkFamily *family,
+                uint8_t cmd,
+                sd_netlink_message **ret) {
+
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        const NLAPolicySet *policy_set;
+        int r;
+
+        assert(nl);
+        assert(nl->protocol == NETLINK_GENERIC);
+        assert(family);
+        assert(ret);
+
+        policy_set = genl_family_get_policy_set(family);
+        if (!policy_set)
+                return -EOPNOTSUPP;
+
+        r = message_new_full(nl, family->id, policy_set,
+                             sizeof(struct genlmsghdr) + family->additional_header_size, &m);
+        if (r < 0)
+                return r;
+
+        *(struct genlmsghdr *) NLMSG_DATA(m->hdr) = (struct genlmsghdr) {
+                .cmd = cmd,
+                .version = family->version,
+        };
+
+        *ret = TAKE_PTR(m);
+        return 0;
+}
+
+static int genl_family_get_by_name_internal(
+                sd_netlink *nl,
+                const GenericNetlinkFamily *ctrl,
+                const char *name,
+                const GenericNetlinkFamily **ret) {
+
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
+        const NLAPolicySet *policy_set;
+        int r;
+
+        assert(nl);
+        assert(nl->protocol == NETLINK_GENERIC);
+        assert(ctrl);
+        assert(name);
+        assert(ret);
+
+        policy_set = genl_get_policy_set_by_name(name);
+        if (!policy_set)
+                return -EOPNOTSUPP;
+
+        r = genl_message_new(nl, ctrl, CTRL_CMD_GETFAMILY, &req);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(req, CTRL_ATTR_FAMILY_NAME, name);
+        if (r < 0)
+                return r;
+
+        if (sd_netlink_call(nl, req, 0, &reply) < 0) {
+                (void) genl_family_new_unsupported(nl, name, policy_set);
+                return -EOPNOTSUPP;
+        }
+
+        return genl_family_new(nl, name, policy_set, reply, ret);
+}
+
+static int genl_family_get_by_name(sd_netlink *nl, const char *name, const GenericNetlinkFamily **ret) {
+        const GenericNetlinkFamily *f, *ctrl;
+        int r;
+
+        assert(nl);
+        assert(nl->protocol == NETLINK_GENERIC);
+        assert(name);
+        assert(ret);
+
+        f = hashmap_get(nl->genl_family_by_name, name);
+        if (f) {
+                if (f->id == 0) /* kernel does not support the family. */
+                        return -EOPNOTSUPP;
+
+                *ret = f;
+                return 0;
+        }
+
+        if (streq(name, CTRL_GENL_NAME))
+                return genl_family_get_by_name_internal(nl, &nlctrl_static, CTRL_GENL_NAME, ret);
+
+        ctrl = hashmap_get(nl->genl_family_by_name, CTRL_GENL_NAME);
+        if (!ctrl) {
+                r = genl_family_get_by_name_internal(nl, &nlctrl_static, CTRL_GENL_NAME, &ctrl);
+                if (r < 0)
+                        return r;
+        }
+
+        return genl_family_get_by_name_internal(nl, ctrl, name, ret);
+}
+
+static int genl_family_get_by_id(sd_netlink *nl, uint16_t id, const GenericNetlinkFamily **ret) {
+        const GenericNetlinkFamily *f;
+
+        assert(nl);
+        assert(nl->protocol == NETLINK_GENERIC);
+        assert(ret);
+
+        f = hashmap_get(nl->genl_family_by_id, UINT_TO_PTR(id));
+        if (f) {
+                *ret = f;
+                return 0;
+        }
+
+        if (id == GENL_ID_CTRL) {
+                *ret = &nlctrl_static;
+                return 0;
+        }
+
+        return -ENOENT;
+}
+
+int genl_get_policy_set_and_header_size(
+                sd_netlink *nl,
+                uint16_t id,
+                const NLAPolicySet **ret_policy_set,
+                size_t *ret_header_size) {
+
+        const GenericNetlinkFamily *f;
+        int r;
+
+        assert(nl);
+        assert(nl->protocol == NETLINK_GENERIC);
+
+        r = genl_family_get_by_id(nl, id, &f);
+        if (r < 0)
+                return r;
+
+        if (ret_policy_set) {
+                const NLAPolicySet *p;
+
+                p = genl_family_get_policy_set(f);
+                if (!p)
+                        return -EOPNOTSUPP;
+
+                *ret_policy_set = p;
+        }
+        if (ret_header_size)
+                *ret_header_size = sizeof(struct genlmsghdr) + f->additional_header_size;
+        return 0;
+}
+
+int sd_genl_message_new(sd_netlink *nl, const char *family_name, uint8_t cmd, sd_netlink_message **ret) {
+        const GenericNetlinkFamily *family;
+        int r;
+
+        assert_return(nl, -EINVAL);
+        assert_return(nl->protocol == NETLINK_GENERIC, -EINVAL);
+        assert_return(family_name, -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = genl_family_get_by_name(nl, family_name, &family);
+        if (r < 0)
+                return r;
+
+        return genl_message_new(nl, family, cmd, ret);
+}
+
+int sd_genl_message_get_family_name(sd_netlink *nl, sd_netlink_message *m, const char **ret) {
+        const GenericNetlinkFamily *family;
+        uint16_t nlmsg_type;
+        int r;
+
+        assert_return(nl, -EINVAL);
+        assert_return(nl->protocol == NETLINK_GENERIC, -EINVAL);
+        assert_return(m, -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = sd_netlink_message_get_type(m, &nlmsg_type);
+        if (r < 0)
+                return r;
+
+        r = genl_family_get_by_id(nl, nlmsg_type, &family);
+        if (r < 0)
+                return r;
+
+        *ret = family->name;
+        return 0;
+}
+
+int sd_genl_message_get_command(sd_netlink *nl, sd_netlink_message *m, uint8_t *ret) {
+        struct genlmsghdr *h;
+        uint16_t nlmsg_type;
+        size_t size;
+        int r;
+
+        assert_return(nl, -EINVAL);
+        assert_return(nl->protocol == NETLINK_GENERIC, -EINVAL);
+        assert_return(m, -EINVAL);
+        assert_return(m->protocol == NETLINK_GENERIC, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = sd_netlink_message_get_type(m, &nlmsg_type);
+        if (r < 0)
+                return r;
+
+        r = genl_get_policy_set_and_header_size(nl, nlmsg_type, NULL, &size);
+        if (r < 0)
+                return r;
+
+        if (m->hdr->nlmsg_len < NLMSG_LENGTH(size))
+                return -EBADMSG;
+
+        h = NLMSG_DATA(m->hdr);
+
+        *ret = h->cmd;
+        return 0;
+}
+
+static int genl_family_get_multicast_group_id_by_name(const GenericNetlinkFamily *f, const char *name, uint32_t *ret) {
+        void *p;
+
+        assert(f);
+        assert(name);
+
+        p = hashmap_get(f->multicast_group_by_name, name);
+        if (!p)
+                return -ENOENT;
+
+        if (ret)
+                *ret = PTR_TO_UINT32(p);
+        return 0;
+}
+
+int sd_genl_add_match(
+                sd_netlink *nl,
+                sd_netlink_slot **ret_slot,
+                const char *family_name,
+                const char *multicast_group_name,
+                uint8_t command,
+                sd_netlink_message_handler_t callback,
+                sd_netlink_destroy_t destroy_callback,
+                void *userdata,
+                const char *description) {
+
+        const GenericNetlinkFamily *f;
+        uint32_t multicast_group_id;
+        int r;
+
+        assert_return(nl, -EINVAL);
+        assert_return(nl->protocol == NETLINK_GENERIC, -EINVAL);
+        assert_return(callback, -EINVAL);
+        assert_return(family_name, -EINVAL);
+        assert_return(multicast_group_name, -EINVAL);
+
+        /* If command == 0, then all commands belonging to the multicast group trigger the callback. */
+
+        r = genl_family_get_by_name(nl, family_name, &f);
+        if (r < 0)
+                return r;
+
+        r = genl_family_get_multicast_group_id_by_name(f, multicast_group_name, &multicast_group_id);
+        if (r < 0)
+                return r;
+
+        return netlink_add_match_internal(nl, ret_slot, &multicast_group_id, 1, f->id, command,
+                                          callback, destroy_callback, userdata, description);
+}
+
+int sd_genl_socket_open(sd_netlink **ret) {
+        return netlink_open_family(ret, NETLINK_GENERIC);
+}
diff --git a/src/libsystemd/sd-netlink/netlink-genl.h b/src/libsystemd/sd-netlink/netlink-genl.h
new file mode 100644
index 0000000..b06be05
--- /dev/null
+++ b/src/libsystemd/sd-netlink/netlink-genl.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "sd-netlink.h"
+
+#define CTRL_GENL_NAME "nlctrl"
+
+void genl_clear_family(sd_netlink *nl);
diff --git a/src/libsystemd/sd-netlink/netlink-internal.h b/src/libsystemd/sd-netlink/netlink-internal.h
index c5765c6..0add1cb 100644
--- a/src/libsystemd/sd-netlink/netlink-internal.h
+++ b/src/libsystemd/sd-netlink/netlink-internal.h
@@ -7,14 +7,15 @@
 
 #include "list.h"
 #include "netlink-types.h"
+#include "ordered-set.h"
 #include "prioq.h"
 #include "time-util.h"
 
-#define RTNL_DEFAULT_TIMEOUT ((usec_t) (25 * USEC_PER_SEC))
+#define NETLINK_DEFAULT_TIMEOUT_USEC ((usec_t) (25 * USEC_PER_SEC))
 
-#define RTNL_RQUEUE_MAX 64*1024
+#define NETLINK_RQUEUE_MAX 64*1024
 
-#define RTNL_CONTAINER_DEPTH 32
+#define NETLINK_CONTAINER_DEPTH 32
 
 struct reply_callback {
         sd_netlink_message_handler_t callback;
@@ -25,7 +26,10 @@
 
 struct match_callback {
         sd_netlink_message_handler_t callback;
+        uint32_t *groups;
+        size_t n_groups;
         uint16_t type;
+        uint8_t cmd; /* used by genl */
 
         LIST_FIELDS(struct match_callback, match_callbacks);
 };
@@ -69,11 +73,9 @@
         Hashmap *broadcast_group_refs;
         bool broadcast_group_dont_leave:1; /* until we can rely on 4.2 */
 
-        sd_netlink_message **rqueue;
-        unsigned rqueue_size;
-
-        sd_netlink_message **rqueue_partial;
-        unsigned rqueue_partial_size;
+        OrderedSet *rqueue;
+        Hashmap *rqueue_by_serial;
+        Hashmap *rqueue_partial_by_serial;
 
         struct nlmsghdr *rbuffer;
 
@@ -95,8 +97,8 @@
         sd_event_source *exit_event_source;
         sd_event *event;
 
-        Hashmap *genl_family_to_nlmsg_type;
-        Hashmap *nlmsg_type_to_genl_family;
+        Hashmap *genl_family_by_name;
+        Hashmap *genl_family_by_id;
 };
 
 struct netlink_attribute {
@@ -106,10 +108,10 @@
 };
 
 struct netlink_container {
-        const struct NLTypeSystem *type_system; /* the type system of the container */
+        const struct NLAPolicySet *policy_set; /* the policy set of the container */
         size_t offset; /* offset from hdr to the start of the container */
         struct netlink_attribute *attributes;
-        unsigned short n_attributes; /* number of attributes in container */
+        uint16_t max_attribute; /* the maximum attribute in container */
 };
 
 struct sd_netlink_message {
@@ -118,30 +120,91 @@
         int protocol;
 
         struct nlmsghdr *hdr;
-        struct netlink_container containers[RTNL_CONTAINER_DEPTH];
+        struct netlink_container containers[NETLINK_CONTAINER_DEPTH];
         unsigned n_containers; /* number of containers */
+        uint32_t multicast_group;
         bool sealed:1;
-        bool broadcast:1;
 
         sd_netlink_message *next; /* next in a chain of multi-part messages */
 };
 
-int message_new(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t type);
-int message_new_empty(sd_netlink *rtnl, sd_netlink_message **ret);
+int message_new_empty(sd_netlink *nl, sd_netlink_message **ret);
+int message_new_full(
+                sd_netlink *nl,
+                uint16_t nlmsg_type,
+                const NLAPolicySet *policy_set,
+                size_t header_size,
+                sd_netlink_message **ret);
+int message_new(sd_netlink *nl, sd_netlink_message **ret, uint16_t type);
+int message_new_synthetic_error(sd_netlink *nl, int error, uint32_t serial, sd_netlink_message **ret);
+
+static inline uint32_t message_get_serial(sd_netlink_message *m) {
+        assert(m);
+        return ASSERT_PTR(m->hdr)->nlmsg_seq;
+}
+
+void message_seal(sd_netlink_message *m);
 
 int netlink_open_family(sd_netlink **ret, int family);
+bool netlink_pid_changed(sd_netlink *nl);
 
-int socket_open(int family);
 int systemd_socket_bind(sd_netlink *nl);
 int socket_broadcast_group_ref(sd_netlink *nl, unsigned group);
 int socket_broadcast_group_unref(sd_netlink *nl, unsigned group);
 int socket_write_message(sd_netlink *nl, sd_netlink_message *m);
-int socket_writev_message(sd_netlink *nl, sd_netlink_message **m, size_t msgcount);
 int socket_read_message(sd_netlink *nl);
 
-int rtnl_rqueue_make_room(sd_netlink *rtnl);
-int rtnl_rqueue_partial_make_room(sd_netlink *rtnl);
+int netlink_add_match_internal(
+                sd_netlink *nl,
+                sd_netlink_slot **ret_slot,
+                const uint32_t *groups,
+                size_t n_groups,
+                uint16_t type,
+                uint8_t cmd,
+                sd_netlink_message_handler_t callback,
+                sd_netlink_destroy_t destroy_callback,
+                void *userdata,
+                const char *description);
 
-/* Make sure callbacks don't destroy the rtnl connection */
-#define NETLINK_DONT_DESTROY(rtnl) \
-        _cleanup_(sd_netlink_unrefp) _unused_ sd_netlink *_dont_destroy_##rtnl = sd_netlink_ref(rtnl)
+/* Make sure callbacks don't destroy the netlink connection */
+#define NETLINK_DONT_DESTROY(nl) \
+        _cleanup_(sd_netlink_unrefp) _unused_ sd_netlink *_dont_destroy_##nl = sd_netlink_ref(nl)
+
+/* nfnl */
+/* TODO: to be exported later */
+int sd_nfnl_socket_open(sd_netlink **ret);
+int sd_nfnl_send_batch(
+                sd_netlink *nfnl,
+                sd_netlink_message **messages,
+                size_t msgcount,
+                uint32_t **ret_serials);
+int sd_nfnl_call_batch(
+                sd_netlink *nfnl,
+                sd_netlink_message **messages,
+                size_t n_messages,
+                uint64_t usec,
+                sd_netlink_message ***ret_messages);
+int sd_nfnl_message_new(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int nfproto,
+                uint16_t subsys,
+                uint16_t msg_type,
+                uint16_t flags);
+int sd_nfnl_nft_message_new_table(sd_netlink *nfnl, sd_netlink_message **ret,
+                                  int nfproto, const char *table);
+int sd_nfnl_nft_message_new_basechain(sd_netlink *nfnl, sd_netlink_message **ret,
+                                      int nfproto, const char *table, const char *chain,
+                                      const char *type, uint8_t hook, int prio);
+int sd_nfnl_nft_message_new_rule(sd_netlink *nfnl, sd_netlink_message **ret,
+                                 int nfproto, const char *table, const char *chain);
+int sd_nfnl_nft_message_new_set(sd_netlink *nfnl, sd_netlink_message **ret,
+                                int nfproto, const char *table, const char *set_name,
+                                uint32_t setid, uint32_t klen);
+int sd_nfnl_nft_message_new_setelems(sd_netlink *nfnl, sd_netlink_message **ret,
+                                     int add, int nfproto, const char *table, const char *set_name);
+int sd_nfnl_nft_message_append_setelem(sd_netlink_message *m,
+                                       uint32_t index,
+                                       const void *key, size_t key_len,
+                                       const void *data, size_t data_len,
+                                       uint32_t flags);
diff --git a/src/libsystemd/sd-netlink/netlink-message-nfnl.c b/src/libsystemd/sd-netlink/netlink-message-nfnl.c
new file mode 100644
index 0000000..582f623
--- /dev/null
+++ b/src/libsystemd/sd-netlink/netlink-message-nfnl.c
@@ -0,0 +1,420 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <netinet/in.h>
+#include <linux/netfilter/nfnetlink.h>
+#include <linux/netfilter/nf_tables.h>
+#include <linux/netfilter.h>
+
+#include "sd-netlink.h"
+
+#include "io-util.h"
+#include "netlink-internal.h"
+#include "netlink-types.h"
+#include "netlink-util.h"
+
+static bool nfproto_is_valid(int nfproto) {
+        return IN_SET(nfproto,
+                      NFPROTO_UNSPEC,
+                      NFPROTO_INET,
+                      NFPROTO_IPV4,
+                      NFPROTO_ARP,
+                      NFPROTO_NETDEV,
+                      NFPROTO_BRIDGE,
+                      NFPROTO_IPV6,
+                      NFPROTO_DECNET);
+}
+
+int sd_nfnl_message_new(sd_netlink *nfnl, sd_netlink_message **ret, int nfproto, uint16_t subsys, uint16_t msg_type, uint16_t flags) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        assert_return(nfnl, -EINVAL);
+        assert_return(ret, -EINVAL);
+        assert_return(nfproto_is_valid(nfproto), -EINVAL);
+        assert_return(NFNL_MSG_TYPE(msg_type) == msg_type, -EINVAL);
+
+        r = message_new(nfnl, &m, subsys << 8 | msg_type);
+        if (r < 0)
+                return r;
+
+        m->hdr->nlmsg_flags |= flags;
+
+        *(struct nfgenmsg*) NLMSG_DATA(m->hdr) = (struct nfgenmsg) {
+                .nfgen_family = nfproto,
+                .version = NFNETLINK_V0,
+        };
+
+        *ret = TAKE_PTR(m);
+        return 0;
+}
+
+static int nfnl_message_set_res_id(sd_netlink_message *m, uint16_t res_id) {
+        struct nfgenmsg *nfgen;
+
+        assert(m);
+        assert(m->hdr);
+
+        nfgen = NLMSG_DATA(m->hdr);
+        nfgen->res_id = htobe16(res_id);
+
+        return 0;
+}
+
+static int nfnl_message_get_subsys(sd_netlink_message *m, uint16_t *ret) {
+        uint16_t t;
+        int r;
+
+        assert(m);
+        assert(ret);
+
+        r = sd_netlink_message_get_type(m, &t);
+        if (r < 0)
+                return r;
+
+        *ret = NFNL_SUBSYS_ID(t);
+        return 0;
+}
+
+static int nfnl_message_new_batch(sd_netlink *nfnl, sd_netlink_message **ret, uint16_t subsys, uint16_t msg_type) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        assert_return(nfnl, -EINVAL);
+        assert_return(ret, -EINVAL);
+        assert_return(NFNL_MSG_TYPE(msg_type) == msg_type, -EINVAL);
+
+        r = sd_nfnl_message_new(nfnl, &m, NFPROTO_UNSPEC, NFNL_SUBSYS_NONE, msg_type, 0);
+        if (r < 0)
+                return r;
+
+        r = nfnl_message_set_res_id(m, subsys);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
+        return 0;
+}
+
+int sd_nfnl_send_batch(
+                sd_netlink *nfnl,
+                sd_netlink_message **messages,
+                size_t n_messages,
+                uint32_t **ret_serials) {
+
+        /* iovs refs batch_begin and batch_end, hence, free iovs first, then free batch_begin and batch_end. */
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *batch_begin = NULL, *batch_end = NULL;
+        _cleanup_free_ struct iovec *iovs = NULL;
+        _cleanup_free_ uint32_t *serials = NULL;
+        uint16_t subsys;
+        ssize_t k;
+        size_t c = 0;
+        int r;
+
+        assert_return(nfnl, -EINVAL);
+        assert_return(!netlink_pid_changed(nfnl), -ECHILD);
+        assert_return(messages, -EINVAL);
+        assert_return(n_messages > 0, -EINVAL);
+
+        iovs = new(struct iovec, n_messages + 2);
+        if (!iovs)
+                return -ENOMEM;
+
+        if (ret_serials) {
+                serials = new(uint32_t, n_messages);
+                if (!serials)
+                        return -ENOMEM;
+        }
+
+        r = nfnl_message_get_subsys(messages[0], &subsys);
+        if (r < 0)
+                return r;
+
+        r = nfnl_message_new_batch(nfnl, &batch_begin, subsys, NFNL_MSG_BATCH_BEGIN);
+        if (r < 0)
+                return r;
+
+        netlink_seal_message(nfnl, batch_begin);
+        iovs[c++] = IOVEC_MAKE(batch_begin->hdr, batch_begin->hdr->nlmsg_len);
+
+        for (size_t i = 0; i < n_messages; i++) {
+                uint16_t s;
+
+                r = nfnl_message_get_subsys(messages[i], &s);
+                if (r < 0)
+                        return r;
+
+                if (s != subsys)
+                        return -EINVAL;
+
+                netlink_seal_message(nfnl, messages[i]);
+                if (serials)
+                        serials[i] = message_get_serial(messages[i]);
+
+                /* It seems that the kernel accepts an arbitrary number. Let's set the serial of the
+                 * first message. */
+                nfnl_message_set_res_id(messages[i], message_get_serial(batch_begin));
+
+                iovs[c++] = IOVEC_MAKE(messages[i]->hdr, messages[i]->hdr->nlmsg_len);
+        }
+
+        r = nfnl_message_new_batch(nfnl, &batch_end, subsys, NFNL_MSG_BATCH_END);
+        if (r < 0)
+                return r;
+
+        netlink_seal_message(nfnl, batch_end);
+        iovs[c++] = IOVEC_MAKE(batch_end->hdr, batch_end->hdr->nlmsg_len);
+
+        assert(c == n_messages + 2);
+        k = writev(nfnl->fd, iovs, n_messages + 2);
+        if (k < 0)
+                return -errno;
+
+        if (ret_serials)
+                *ret_serials = TAKE_PTR(serials);
+
+        return 0;
+}
+
+int sd_nfnl_call_batch(
+                sd_netlink *nfnl,
+                sd_netlink_message **messages,
+                size_t n_messages,
+                uint64_t usec,
+                sd_netlink_message ***ret_messages) {
+
+        _cleanup_free_ sd_netlink_message **replies = NULL;
+        _cleanup_free_ uint32_t *serials = NULL;
+        int k, r;
+
+        assert_return(nfnl, -EINVAL);
+        assert_return(!netlink_pid_changed(nfnl), -ECHILD);
+        assert_return(messages, -EINVAL);
+        assert_return(n_messages > 0, -EINVAL);
+
+        if (ret_messages) {
+                replies = new0(sd_netlink_message*, n_messages);
+                if (!replies)
+                        return -ENOMEM;
+        }
+
+        r = sd_nfnl_send_batch(nfnl, messages, n_messages, &serials);
+        if (r < 0)
+                return r;
+
+        for (size_t i = 0; i < n_messages; i++) {
+                k = sd_netlink_read(nfnl, serials[i], usec, ret_messages ? replies + i : NULL);
+                if (k < 0 && r >= 0)
+                        r = k;
+        }
+        if (r < 0)
+                return r;
+
+        if (ret_messages)
+                *ret_messages = TAKE_PTR(replies);
+
+        return 0;
+}
+
+int sd_nfnl_nft_message_new_basechain(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int nfproto,
+                const char *table,
+                const char *chain,
+                const char *type,
+                uint8_t hook,
+                int prio) {
+
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        r = sd_nfnl_message_new(nfnl, &m, nfproto, NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWCHAIN, NLM_F_CREATE);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_CHAIN_TABLE, table);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_CHAIN_NAME, chain);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_CHAIN_TYPE, type);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container(m, NFTA_CHAIN_HOOK);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NFTA_HOOK_HOOKNUM, htobe32(hook));
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NFTA_HOOK_PRIORITY, htobe32(prio));
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_close_container(m);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
+        return 0;
+}
+
+int sd_nfnl_nft_message_new_table(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int nfproto,
+                const char *table) {
+
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        r = sd_nfnl_message_new(nfnl, &m, nfproto, NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWTABLE, NLM_F_CREATE | NLM_F_EXCL);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_TABLE_NAME, table);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
+        return r;
+}
+
+int sd_nfnl_nft_message_new_rule(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int nfproto,
+                const char *table,
+                const char *chain) {
+
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        r = sd_nfnl_message_new(nfnl, &m, nfproto, NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWRULE, NLM_F_CREATE);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_RULE_TABLE, table);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_RULE_CHAIN, chain);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
+        return r;
+}
+
+int sd_nfnl_nft_message_new_set(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int nfproto,
+                const char *table,
+                const char *set_name,
+                uint32_t set_id,
+                uint32_t klen) {
+
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        r = sd_nfnl_message_new(nfnl, &m, nfproto, NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWSET, NLM_F_CREATE);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_SET_TABLE, table);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_SET_NAME, set_name);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NFTA_SET_ID, ++set_id);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NFTA_SET_KEY_LEN, htobe32(klen));
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
+        return r;
+}
+
+int sd_nfnl_nft_message_new_setelems(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int add, /* boolean */
+                int nfproto,
+                const char *table,
+                const char *set_name) {
+
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        if (add)
+                r = sd_nfnl_message_new(nfnl, &m, nfproto, NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWSETELEM, NLM_F_CREATE);
+        else
+                r = sd_nfnl_message_new(nfnl, &m, nfproto, NFNL_SUBSYS_NFTABLES, NFT_MSG_DELSETELEM, 0);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_SET_ELEM_LIST_TABLE, table);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NFTA_SET_ELEM_LIST_SET, set_name);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
+        return r;
+}
+
+int sd_nfnl_nft_message_append_setelem(
+                sd_netlink_message *m,
+                uint32_t index,
+                const void *key,
+                size_t key_len,
+                const void *data,
+                size_t data_len,
+                uint32_t flags) {
+
+        int r;
+
+        r = sd_netlink_message_open_array(m, index);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_container_data(m, NFTA_SET_ELEM_KEY, NFTA_DATA_VALUE, key, key_len);
+        if (r < 0)
+                goto cancel;
+
+        if (data) {
+                r = sd_netlink_message_append_container_data(m, NFTA_SET_ELEM_DATA, NFTA_DATA_VALUE, data, data_len);
+                if (r < 0)
+                        goto cancel;
+        }
+
+        if (flags != 0) {
+                r = sd_netlink_message_append_u32(m, NFTA_SET_ELEM_FLAGS, htobe32(flags));
+                if (r < 0)
+                        goto cancel;
+        }
+
+        return sd_netlink_message_close_container(m); /* array */
+
+cancel:
+        (void) sd_netlink_message_cancel_array(m);
+        return r;
+}
+
+int sd_nfnl_socket_open(sd_netlink **ret) {
+        return netlink_open_family(ret, NETLINK_NETFILTER);
+}
diff --git a/src/libsystemd/sd-netlink/netlink-message-rtnl.c b/src/libsystemd/sd-netlink/netlink-message-rtnl.c
new file mode 100644
index 0000000..008e802
--- /dev/null
+++ b/src/libsystemd/sd-netlink/netlink-message-rtnl.c
@@ -0,0 +1,1204 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <netinet/in.h>
+#include <linux/fib_rules.h>
+#include <linux/if_addrlabel.h>
+#include <linux/if_bridge.h>
+#include <linux/nexthop.h>
+#include <stdbool.h>
+#include <unistd.h>
+
+#include "sd-netlink.h"
+
+#include "format-util.h"
+#include "netlink-internal.h"
+#include "netlink-types.h"
+#include "netlink-util.h"
+#include "socket-util.h"
+
+static bool rtnl_message_type_is_neigh(uint16_t type) {
+        return IN_SET(type, RTM_NEWNEIGH, RTM_GETNEIGH, RTM_DELNEIGH);
+}
+
+static bool rtnl_message_type_is_route(uint16_t type) {
+        return IN_SET(type, RTM_NEWROUTE, RTM_GETROUTE, RTM_DELROUTE);
+}
+
+static bool rtnl_message_type_is_nexthop(uint16_t type) {
+        return IN_SET(type, RTM_NEWNEXTHOP, RTM_GETNEXTHOP, RTM_DELNEXTHOP);
+}
+
+static bool rtnl_message_type_is_link(uint16_t type) {
+        return IN_SET(type,
+                      RTM_NEWLINK, RTM_SETLINK, RTM_GETLINK, RTM_DELLINK,
+                      RTM_NEWLINKPROP, RTM_DELLINKPROP, RTM_GETLINKPROP);
+}
+
+static bool rtnl_message_type_is_addr(uint16_t type) {
+        return IN_SET(type, RTM_NEWADDR, RTM_GETADDR, RTM_DELADDR);
+}
+
+static bool rtnl_message_type_is_addrlabel(uint16_t type) {
+        return IN_SET(type, RTM_NEWADDRLABEL, RTM_DELADDRLABEL, RTM_GETADDRLABEL);
+}
+
+static bool rtnl_message_type_is_routing_policy_rule(uint16_t type) {
+        return IN_SET(type, RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE);
+}
+
+static bool rtnl_message_type_is_traffic_control(uint16_t type) {
+        return IN_SET(type,
+                      RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC,
+                      RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS);
+}
+
+static bool rtnl_message_type_is_mdb(uint16_t type) {
+        return IN_SET(type, RTM_NEWMDB, RTM_DELMDB, RTM_GETMDB);
+}
+
+int sd_rtnl_message_route_set_dst_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        if ((rtm->rtm_family == AF_INET && prefixlen > 32) ||
+            (rtm->rtm_family == AF_INET6 && prefixlen > 128))
+                return -ERANGE;
+
+        rtm->rtm_dst_len = prefixlen;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_set_src_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        if ((rtm->rtm_family == AF_INET && prefixlen > 32) ||
+            (rtm->rtm_family == AF_INET6 && prefixlen > 128))
+                return -ERANGE;
+
+        rtm->rtm_src_len = prefixlen;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_set_scope(sd_netlink_message *m, unsigned char scope) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        rtm->rtm_scope = scope;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_set_flags(sd_netlink_message *m, unsigned flags) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        rtm->rtm_flags = flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_flags(sd_netlink_message *m, unsigned *flags) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(flags, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *flags = rtm->rtm_flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_set_table(sd_netlink_message *m, unsigned char table) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        rtm->rtm_table = table;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_family(sd_netlink_message *m, int *family) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(family, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *family = rtm->rtm_family;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_type(sd_netlink_message *m, unsigned char *type) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(type, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *type = rtm->rtm_type;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_set_type(sd_netlink_message *m, unsigned char type) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        rtm->rtm_type = type;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_protocol(sd_netlink_message *m, unsigned char *protocol) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(protocol, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *protocol = rtm->rtm_protocol;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_scope(sd_netlink_message *m, unsigned char *scope) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(scope, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *scope = rtm->rtm_scope;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_tos(sd_netlink_message *m, uint8_t *tos) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(tos, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *tos = rtm->rtm_tos;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_table(sd_netlink_message *m, unsigned char *table) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(table, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *table = rtm->rtm_table;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_dst_prefixlen(sd_netlink_message *m, unsigned char *dst_len) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(dst_len, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *dst_len = rtm->rtm_dst_len;
+
+        return 0;
+}
+
+int sd_rtnl_message_route_get_src_prefixlen(sd_netlink_message *m, unsigned char *src_len) {
+        struct rtmsg *rtm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(src_len, -EINVAL);
+
+        rtm = NLMSG_DATA(m->hdr);
+
+        *src_len = rtm->rtm_src_len;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_route(sd_netlink *rtnl, sd_netlink_message **ret,
+                              uint16_t nlmsg_type, int rtm_family,
+                              unsigned char rtm_protocol) {
+        struct rtmsg *rtm;
+        int r;
+
+        assert_return(rtnl_message_type_is_route(nlmsg_type), -EINVAL);
+        assert_return((nlmsg_type == RTM_GETROUTE && rtm_family == AF_UNSPEC) ||
+                      IN_SET(rtm_family, AF_INET, AF_INET6), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        if (nlmsg_type == RTM_NEWROUTE)
+                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_APPEND;
+
+        rtm = NLMSG_DATA((*ret)->hdr);
+
+        rtm->rtm_family = rtm_family;
+        rtm->rtm_protocol = rtm_protocol;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_nexthop(sd_netlink *rtnl, sd_netlink_message **ret,
+                                uint16_t nlmsg_type, int nh_family,
+                                unsigned char nh_protocol) {
+        struct nhmsg *nhm;
+        int r;
+
+        assert_return(rtnl_message_type_is_nexthop(nlmsg_type), -EINVAL);
+        switch (nlmsg_type) {
+        case RTM_DELNEXTHOP:
+                assert_return(nh_family == AF_UNSPEC, -EINVAL);
+                _fallthrough_;
+        case RTM_GETNEXTHOP:
+                assert_return(nh_protocol == RTPROT_UNSPEC, -EINVAL);
+                break;
+        case RTM_NEWNEXTHOP:
+                assert_return(IN_SET(nh_family, AF_UNSPEC, AF_INET, AF_INET6), -EINVAL);
+                break;
+        default:
+                assert_not_reached();
+        }
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        if (nlmsg_type == RTM_NEWNEXTHOP)
+                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_APPEND;
+
+        nhm = NLMSG_DATA((*ret)->hdr);
+
+        nhm->nh_family = nh_family;
+        nhm->nh_scope = RT_SCOPE_UNIVERSE;
+        nhm->nh_protocol = nh_protocol;
+
+        return 0;
+}
+
+int sd_rtnl_message_nexthop_set_flags(sd_netlink_message *m, uint8_t flags) {
+        struct nhmsg *nhm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(m->hdr->nlmsg_type == RTM_NEWNEXTHOP, -EINVAL);
+
+        nhm = NLMSG_DATA(m->hdr);
+        nhm->nh_flags = flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_nexthop_get_flags(sd_netlink_message *m, uint8_t *ret) {
+        struct nhmsg *nhm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_nexthop(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        nhm = NLMSG_DATA(m->hdr);
+        *ret = nhm->nh_flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_nexthop_get_family(sd_netlink_message *m, uint8_t *family) {
+        struct nhmsg *nhm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_nexthop(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(family, -EINVAL);
+
+        nhm = NLMSG_DATA(m->hdr);
+        *family = nhm->nh_family;
+
+        return 0;
+}
+
+int sd_rtnl_message_nexthop_get_protocol(sd_netlink_message *m, uint8_t *protocol) {
+        struct nhmsg *nhm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_nexthop(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(protocol, -EINVAL);
+
+        nhm = NLMSG_DATA(m->hdr);
+        *protocol = nhm->nh_protocol;
+
+        return 0;
+}
+
+int sd_rtnl_message_neigh_set_flags(sd_netlink_message *m, uint8_t flags) {
+        struct ndmsg *ndm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
+
+        ndm = NLMSG_DATA(m->hdr);
+        ndm->ndm_flags = flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_neigh_set_state(sd_netlink_message *m, uint16_t state) {
+        struct ndmsg *ndm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
+
+        ndm = NLMSG_DATA(m->hdr);
+        ndm->ndm_state = state;
+
+        return 0;
+}
+
+int sd_rtnl_message_neigh_get_flags(sd_netlink_message *m, uint8_t *flags) {
+        struct ndmsg *ndm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
+
+        ndm = NLMSG_DATA(m->hdr);
+        *flags = ndm->ndm_flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_neigh_get_state(sd_netlink_message *m, uint16_t *state) {
+        struct ndmsg *ndm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
+
+        ndm = NLMSG_DATA(m->hdr);
+        *state = ndm->ndm_state;
+
+        return 0;
+}
+
+int sd_rtnl_message_neigh_get_family(sd_netlink_message *m, int *family) {
+        struct ndmsg *ndm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(family, -EINVAL);
+
+        ndm = NLMSG_DATA(m->hdr);
+
+        *family = ndm->ndm_family;
+
+        return 0;
+}
+
+int sd_rtnl_message_neigh_get_ifindex(sd_netlink_message *m, int *index) {
+        struct ndmsg *ndm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(index, -EINVAL);
+
+        ndm = NLMSG_DATA(m->hdr);
+
+        *index = ndm->ndm_ifindex;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_neigh(
+                sd_netlink *rtnl,
+                sd_netlink_message **ret,
+                uint16_t nlmsg_type,
+                int index,
+                int ndm_family) {
+
+        struct ndmsg *ndm;
+        int r;
+
+        assert_return(rtnl_message_type_is_neigh(nlmsg_type), -EINVAL);
+        assert_return(IN_SET(ndm_family, AF_UNSPEC, AF_INET, AF_INET6, AF_BRIDGE), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        if (nlmsg_type == RTM_NEWNEIGH) {
+                if (ndm_family == AF_BRIDGE)
+                        (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_APPEND;
+                else
+                        (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_REPLACE;
+        }
+
+        ndm = NLMSG_DATA((*ret)->hdr);
+
+        ndm->ndm_family = ndm_family;
+        ndm->ndm_ifindex = index;
+
+        return 0;
+}
+
+int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsigned change) {
+        struct ifinfomsg *ifi;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(change != 0, -EINVAL);
+
+        ifi = NLMSG_DATA(m->hdr);
+
+        ifi->ifi_flags = flags;
+        ifi->ifi_change = change;
+
+        return 0;
+}
+
+int sd_rtnl_message_link_set_type(sd_netlink_message *m, unsigned type) {
+        struct ifinfomsg *ifi;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
+
+        ifi = NLMSG_DATA(m->hdr);
+
+        ifi->ifi_type = type;
+
+        return 0;
+}
+
+int sd_rtnl_message_link_set_family(sd_netlink_message *m, unsigned family) {
+        struct ifinfomsg *ifi;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
+
+        ifi = NLMSG_DATA(m->hdr);
+
+        ifi->ifi_family = family;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_link(sd_netlink *rtnl, sd_netlink_message **ret,
+                             uint16_t nlmsg_type, int index) {
+        struct ifinfomsg *ifi;
+        int r;
+
+        assert_return(rtnl_message_type_is_link(nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        if (nlmsg_type == RTM_NEWLINK)
+                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
+        else if (nlmsg_type == RTM_NEWLINKPROP)
+                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL | NLM_F_APPEND;
+
+        ifi = NLMSG_DATA((*ret)->hdr);
+
+        ifi->ifi_family = AF_UNSPEC;
+        ifi->ifi_index = index;
+
+        return 0;
+}
+
+int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
+        struct ifaddrmsg *ifa;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
+
+        ifa = NLMSG_DATA(m->hdr);
+
+        if ((ifa->ifa_family == AF_INET && prefixlen > 32) ||
+            (ifa->ifa_family == AF_INET6 && prefixlen > 128))
+                return -ERANGE;
+
+        ifa->ifa_prefixlen = prefixlen;
+
+        return 0;
+}
+
+int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags) {
+        struct ifaddrmsg *ifa;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
+
+        ifa = NLMSG_DATA(m->hdr);
+
+        ifa->ifa_flags = flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope) {
+        struct ifaddrmsg *ifa;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
+
+        ifa = NLMSG_DATA(m->hdr);
+
+        ifa->ifa_scope = scope;
+
+        return 0;
+}
+
+int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *ret_family) {
+        struct ifaddrmsg *ifa;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret_family, -EINVAL);
+
+        ifa = NLMSG_DATA(m->hdr);
+
+        *ret_family = ifa->ifa_family;
+
+        return 0;
+}
+
+int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *ret_prefixlen) {
+        struct ifaddrmsg *ifa;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret_prefixlen, -EINVAL);
+
+        ifa = NLMSG_DATA(m->hdr);
+
+        *ret_prefixlen = ifa->ifa_prefixlen;
+
+        return 0;
+}
+
+int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *ret_scope) {
+        struct ifaddrmsg *ifa;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret_scope, -EINVAL);
+
+        ifa = NLMSG_DATA(m->hdr);
+
+        *ret_scope = ifa->ifa_scope;
+
+        return 0;
+}
+
+int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *ret_flags) {
+        struct ifaddrmsg *ifa;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret_flags, -EINVAL);
+
+        ifa = NLMSG_DATA(m->hdr);
+
+        *ret_flags = ifa->ifa_flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ret_ifindex) {
+        struct ifaddrmsg *ifa;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret_ifindex, -EINVAL);
+
+        ifa = NLMSG_DATA(m->hdr);
+
+        *ret_ifindex = ifa->ifa_index;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_addr(
+                sd_netlink *rtnl,
+                sd_netlink_message **ret,
+                uint16_t nlmsg_type,
+                int index,
+                int family) {
+
+        struct ifaddrmsg *ifa;
+        int r;
+
+        assert_return(rtnl_message_type_is_addr(nlmsg_type), -EINVAL);
+        assert_return((nlmsg_type == RTM_GETADDR && index == 0) ||
+                      index > 0, -EINVAL);
+        assert_return((nlmsg_type == RTM_GETADDR && family == AF_UNSPEC) ||
+                      IN_SET(family, AF_INET, AF_INET6), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        ifa = NLMSG_DATA((*ret)->hdr);
+
+        ifa->ifa_index = index;
+        ifa->ifa_family = family;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_addr_update(
+                sd_netlink *rtnl,
+                sd_netlink_message **ret,
+                int index,
+                int family) {
+        int r;
+
+        r = sd_rtnl_message_new_addr(rtnl, ret, RTM_NEWADDR, index, family);
+        if (r < 0)
+                return r;
+
+        (*ret)->hdr->nlmsg_flags |= NLM_F_REPLACE;
+
+        return 0;
+}
+
+int sd_rtnl_message_link_get_ifindex(sd_netlink_message *m, int *ifindex) {
+        struct ifinfomsg *ifi;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ifindex, -EINVAL);
+
+        ifi = NLMSG_DATA(m->hdr);
+
+        *ifindex = ifi->ifi_index;
+
+        return 0;
+}
+
+int sd_rtnl_message_link_get_flags(sd_netlink_message *m, unsigned *flags) {
+        struct ifinfomsg *ifi;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(flags, -EINVAL);
+
+        ifi = NLMSG_DATA(m->hdr);
+
+        *flags = ifi->ifi_flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_link_get_type(sd_netlink_message *m, unsigned short *type) {
+        struct ifinfomsg *ifi;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(type, -EINVAL);
+
+        ifi = NLMSG_DATA(m->hdr);
+
+        *type = ifi->ifi_type;
+
+        return 0;
+}
+
+int sd_rtnl_message_get_family(sd_netlink_message *m, int *family) {
+        assert_return(m, -EINVAL);
+        assert_return(family, -EINVAL);
+
+        assert(m->hdr);
+
+        if (rtnl_message_type_is_link(m->hdr->nlmsg_type)) {
+                struct ifinfomsg *ifi;
+
+                ifi = NLMSG_DATA(m->hdr);
+
+                *family = ifi->ifi_family;
+
+                return 0;
+        } else if (rtnl_message_type_is_route(m->hdr->nlmsg_type)) {
+                struct rtmsg *rtm;
+
+                rtm = NLMSG_DATA(m->hdr);
+
+                *family = rtm->rtm_family;
+
+                return 0;
+        } else if (rtnl_message_type_is_neigh(m->hdr->nlmsg_type)) {
+                struct ndmsg *ndm;
+
+                ndm = NLMSG_DATA(m->hdr);
+
+                *family = ndm->ndm_family;
+
+                return 0;
+        } else if (rtnl_message_type_is_addr(m->hdr->nlmsg_type)) {
+                struct ifaddrmsg *ifa;
+
+                ifa = NLMSG_DATA(m->hdr);
+
+                *family = ifa->ifa_family;
+
+                return 0;
+        } else if (rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type)) {
+                struct rtmsg *rtm;
+
+                rtm = NLMSG_DATA(m->hdr);
+
+                *family = rtm->rtm_family;
+
+                return 0;
+        } else if (rtnl_message_type_is_nexthop(m->hdr->nlmsg_type)) {
+                struct nhmsg *nhm;
+
+                nhm = NLMSG_DATA(m->hdr);
+
+                *family = nhm->nh_family;
+
+                return 0;
+        }
+
+        return -EOPNOTSUPP;
+}
+
+int sd_rtnl_message_new_addrlabel(
+                sd_netlink *rtnl,
+                sd_netlink_message **ret,
+                uint16_t nlmsg_type,
+                int ifindex,
+                int ifal_family) {
+
+        struct ifaddrlblmsg *addrlabel;
+        int r;
+
+        assert_return(rtnl_message_type_is_addrlabel(nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        if (nlmsg_type == RTM_NEWADDRLABEL)
+                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
+
+        addrlabel = NLMSG_DATA((*ret)->hdr);
+
+        addrlabel->ifal_family = ifal_family;
+        addrlabel->ifal_index = ifindex;
+
+        return 0;
+}
+
+int sd_rtnl_message_addrlabel_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
+        struct ifaddrlblmsg *addrlabel;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addrlabel(m->hdr->nlmsg_type), -EINVAL);
+
+        addrlabel = NLMSG_DATA(m->hdr);
+
+        if (prefixlen > 128)
+                return -ERANGE;
+
+        addrlabel->ifal_prefixlen = prefixlen;
+
+        return 0;
+}
+
+int sd_rtnl_message_addrlabel_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen) {
+        struct ifaddrlblmsg *addrlabel;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_addrlabel(m->hdr->nlmsg_type), -EINVAL);
+
+        addrlabel = NLMSG_DATA(m->hdr);
+
+        *prefixlen = addrlabel->ifal_prefixlen;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_routing_policy_rule(
+                sd_netlink *rtnl,
+                sd_netlink_message **ret,
+                uint16_t nlmsg_type,
+                int ifal_family) {
+
+        struct fib_rule_hdr *frh;
+        int r;
+
+        assert_return(rtnl_message_type_is_routing_policy_rule(nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        if (nlmsg_type == RTM_NEWRULE)
+                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
+
+        frh = NLMSG_DATA((*ret)->hdr);
+        frh->family = ifal_family;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t tos) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        frh->tos = tos;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_get_tos(sd_netlink_message *m, uint8_t *tos) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        *tos = frh->tos;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t table) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        frh->table = table;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_get_table(sd_netlink_message *m, uint8_t *table) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        *table = frh->table;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+        frh->flags = flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_get_flags(sd_netlink_message *m, uint32_t *flags) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+        *flags = frh->flags;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint8_t type) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        frh->action = type;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_get_fib_type(sd_netlink_message *m, uint8_t *type) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        *type = frh->action;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message *m, uint8_t len) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        frh->dst_len = len;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(sd_netlink_message *m, uint8_t *len) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        *len = frh->dst_len;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message *m, uint8_t len) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        frh->src_len = len;
+
+        return 0;
+}
+
+int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(sd_netlink_message *m, uint8_t *len) {
+        struct fib_rule_hdr *frh;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
+
+        frh = NLMSG_DATA(m->hdr);
+
+        *len = frh->src_len;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_traffic_control(
+                sd_netlink *rtnl,
+                sd_netlink_message **ret,
+                uint16_t nlmsg_type,
+                int ifindex,
+                uint32_t handle,
+                uint32_t parent) {
+
+        struct tcmsg *tcm;
+        int r;
+
+        assert_return(rtnl_message_type_is_traffic_control(nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        if (IN_SET(nlmsg_type, RTM_NEWQDISC, RTM_NEWTCLASS))
+                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
+
+        tcm = NLMSG_DATA((*ret)->hdr);
+        tcm->tcm_ifindex = ifindex;
+        tcm->tcm_handle = handle;
+        tcm->tcm_parent = parent;
+
+        return 0;
+}
+
+int sd_rtnl_message_traffic_control_get_ifindex(sd_netlink_message *m, int *ret) {
+        struct tcmsg *tcm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_traffic_control(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        tcm = NLMSG_DATA(m->hdr);
+        *ret = tcm->tcm_ifindex;
+
+        return 0;
+}
+
+int sd_rtnl_message_traffic_control_get_handle(sd_netlink_message *m, uint32_t *ret) {
+        struct tcmsg *tcm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_traffic_control(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        tcm = NLMSG_DATA(m->hdr);
+        *ret = tcm->tcm_handle;
+
+        return 0;
+}
+
+int sd_rtnl_message_traffic_control_get_parent(sd_netlink_message *m, uint32_t *ret) {
+        struct tcmsg *tcm;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->hdr, -EINVAL);
+        assert_return(rtnl_message_type_is_traffic_control(m->hdr->nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        tcm = NLMSG_DATA(m->hdr);
+        *ret = tcm->tcm_parent;
+
+        return 0;
+}
+
+int sd_rtnl_message_new_mdb(
+                sd_netlink *rtnl,
+                sd_netlink_message **ret,
+                uint16_t nlmsg_type,
+                int mdb_ifindex) {
+
+        struct br_port_msg *bpm;
+        int r;
+
+        assert_return(rtnl_message_type_is_mdb(nlmsg_type), -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = message_new(rtnl, ret, nlmsg_type);
+        if (r < 0)
+                return r;
+
+        if (nlmsg_type == RTM_NEWMDB)
+                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
+
+        bpm = NLMSG_DATA((*ret)->hdr);
+        bpm->family = AF_BRIDGE;
+        bpm->ifindex = mdb_ifindex;
+
+        return 0;
+}
diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c
index 473d74b..000a50e 100644
--- a/src/libsystemd/sd-netlink/netlink-message.c
+++ b/src/libsystemd/sd-netlink/netlink-message.c
@@ -20,15 +20,14 @@
 #define RTA_TYPE(rta) ((rta)->rta_type & NLA_TYPE_MASK)
 #define RTA_FLAGS(rta) ((rta)->rta_type & ~NLA_TYPE_MASK)
 
-int message_new_empty(sd_netlink *rtnl, sd_netlink_message **ret) {
+int message_new_empty(sd_netlink *nl, sd_netlink_message **ret) {
         sd_netlink_message *m;
 
-        assert_return(ret, -EINVAL);
+        assert(nl);
+        assert(ret);
 
-        /* Note that 'rtnl' is currently unused, if we start using it internally
-           we must take care to avoid problems due to mutual references between
-           buses and their queued messages. See sd-bus.
-         */
+        /* Note that 'nl' is currently unused, if we start using it internally we must take care to
+         * avoid problems due to mutual references between buses and their queued messages. See sd-bus. */
 
         m = new(sd_netlink_message, 1);
         if (!m)
@@ -36,59 +35,92 @@
 
         *m = (sd_netlink_message) {
                 .n_ref = 1,
-                .protocol = rtnl->protocol,
+                .protocol = nl->protocol,
                 .sealed = false,
         };
 
         *ret = m;
-
         return 0;
 }
 
-int message_new(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t type) {
+int message_new_full(
+                sd_netlink *nl,
+                uint16_t nlmsg_type,
+                const NLAPolicySet *policy_set,
+                size_t header_size,
+                sd_netlink_message **ret) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        const NLType *nl_type;
         size_t size;
         int r;
 
-        assert_return(rtnl, -EINVAL);
+        assert(nl);
+        assert(policy_set);
+        assert(ret);
 
-        r = type_system_root_get_type(rtnl, &nl_type, type);
-        if (r < 0)
-                return r;
-
-        if (type_get_type(nl_type) != NETLINK_TYPE_NESTED)
-                return -EINVAL;
-
-        r = message_new_empty(rtnl, &m);
-        if (r < 0)
-                return r;
-
-        size = NLMSG_SPACE(type_get_size(nl_type));
-
+        size = NLMSG_SPACE(header_size);
         assert(size >= sizeof(struct nlmsghdr));
+
+        r = message_new_empty(nl, &m);
+        if (r < 0)
+                return r;
+
+        m->containers[0].policy_set = policy_set;
+
         m->hdr = malloc0(size);
         if (!m->hdr)
                 return -ENOMEM;
 
         m->hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
-
-        type_get_type_system(nl_type, &m->containers[0].type_system);
         m->hdr->nlmsg_len = size;
-        m->hdr->nlmsg_type = type;
+        m->hdr->nlmsg_type = nlmsg_type;
 
         *ret = TAKE_PTR(m);
+        return 0;
+}
+
+int message_new(sd_netlink *nl, sd_netlink_message **ret, uint16_t nlmsg_type) {
+        const NLAPolicySet *policy_set;
+        size_t size;
+        int r;
+
+        assert_return(nl, -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = netlink_get_policy_set_and_header_size(nl, nlmsg_type, &policy_set, &size);
+        if (r < 0)
+                return r;
+
+        return message_new_full(nl, nlmsg_type, policy_set, size, ret);
+}
+
+int message_new_synthetic_error(sd_netlink *nl, int error, uint32_t serial, sd_netlink_message **ret) {
+        struct nlmsgerr *err;
+        int r;
+
+        assert(error <= 0);
+
+        r = message_new(nl, ret, NLMSG_ERROR);
+        if (r < 0)
+                return r;
+
+        message_seal(*ret);
+        (*ret)->hdr->nlmsg_seq = serial;
+
+        err = NLMSG_DATA((*ret)->hdr);
+        err->error = error;
 
         return 0;
 }
 
-int sd_netlink_message_request_dump(sd_netlink_message *m, int dump) {
+int sd_netlink_message_set_request_dump(sd_netlink_message *m, int dump) {
         assert_return(m, -EINVAL);
         assert_return(m->hdr, -EINVAL);
-
-        assert_return(IN_SET(m->hdr->nlmsg_type,
+        assert_return(m->protocol != NETLINK_ROUTE ||
+                      IN_SET(m->hdr->nlmsg_type,
                              RTM_GETLINK, RTM_GETLINKPROP, RTM_GETADDR, RTM_GETROUTE, RTM_GETNEIGH,
-                             RTM_GETRULE, RTM_GETADDRLABEL, RTM_GETNEXTHOP), -EINVAL);
+                             RTM_GETRULE, RTM_GETADDRLABEL, RTM_GETNEXTHOP, RTM_GETQDISC, RTM_GETTCLASS),
+                      -EINVAL);
 
         SET_FLAG(m->hdr->nlmsg_flags, NLM_F_DUMP, dump);
 
@@ -97,7 +129,7 @@
 
 DEFINE_TRIVIAL_REF_FUNC(sd_netlink_message, sd_netlink_message);
 
-sd_netlink_message *sd_netlink_message_unref(sd_netlink_message *m) {
+sd_netlink_message* sd_netlink_message_unref(sd_netlink_message *m) {
         while (m && --m->n_ref == 0) {
                 unsigned i;
 
@@ -114,18 +146,18 @@
         return NULL;
 }
 
-int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *type) {
+int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *ret) {
         assert_return(m, -EINVAL);
-        assert_return(type, -EINVAL);
+        assert_return(ret, -EINVAL);
 
-        *type = m->hdr->nlmsg_type;
+        *ret = m->hdr->nlmsg_type;
 
         return 0;
 }
 
 int sd_netlink_message_set_flags(sd_netlink_message *m, uint16_t flags) {
         assert_return(m, -EINVAL);
-        assert_return(flags, -EINVAL);
+        assert_return(flags != 0, -EINVAL);
 
         m->hdr->nlmsg_flags = flags;
 
@@ -135,12 +167,11 @@
 int sd_netlink_message_is_broadcast(sd_netlink_message *m) {
         assert_return(m, -EINVAL);
 
-        return m->broadcast;
+        return m->multicast_group != 0;
 }
 
-/* If successful the updated message will be correctly aligned, if
-   unsuccessful the old message is untouched. */
-static int add_rtattr(sd_netlink_message *m, unsigned short type, const void *data, size_t data_length) {
+/* If successful the updated message will be correctly aligned, if unsuccessful the old message is untouched. */
+static int add_rtattr(sd_netlink_message *m, uint16_t attr_type, const void *data, size_t data_length) {
         size_t message_length;
         struct nlmsghdr *new_hdr;
         struct rtattr *rta;
@@ -168,7 +199,7 @@
         /* get pointer to the attribute we are about to add */
         rta = (struct rtattr *) ((uint8_t *) m->hdr + m->hdr->nlmsg_len);
 
-        rtattr_append_attribute_internal(rta, type, data, data_length);
+        rtattr_append_attribute_internal(rta, attr_type, data, data_length);
 
         /* if we are inside containers, extend them */
         for (unsigned i = 0; i < m->n_containers; i++)
@@ -182,25 +213,24 @@
         return offset;
 }
 
-static int message_attribute_has_type(sd_netlink_message *m, size_t *out_size, uint16_t attribute_type, uint16_t data_type) {
-        const NLType *type;
-        int r;
+static int message_attribute_has_type(sd_netlink_message *m, size_t *ret_size, uint16_t attr_type, NLAType type) {
+        const NLAPolicy *policy;
 
         assert(m);
 
-        r = type_system_get_type(m->containers[m->n_containers].type_system, &type, attribute_type);
-        if (r < 0)
-                return r;
+        policy = policy_set_get_policy(m->containers[m->n_containers].policy_set, attr_type);
+        if (!policy)
+                return -EOPNOTSUPP;
 
-        if (type_get_type(type) != data_type)
+        if (policy_get_type(policy) != type)
                 return -EINVAL;
 
-        if (out_size)
-                *out_size = type_get_size(type);
+        if (ret_size)
+                *ret_size = policy_get_size(policy);
         return 0;
 }
 
-int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, const char *data) {
+int sd_netlink_message_append_string(sd_netlink_message *m, uint16_t attr_type, const char *data) {
         size_t length, size;
         int r;
 
@@ -208,7 +238,7 @@
         assert_return(!m->sealed, -EPERM);
         assert_return(data, -EINVAL);
 
-        r = message_attribute_has_type(m, &size, type, NETLINK_TYPE_STRING);
+        r = message_attribute_has_type(m, &size, attr_type, NETLINK_TYPE_STRING);
         if (r < 0)
                 return r;
 
@@ -219,23 +249,22 @@
         } else
                 length = strlen(data);
 
-        r = add_rtattr(m, type, data, length + 1);
+        r = add_rtattr(m, attr_type, data, length + 1);
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_strv(sd_netlink_message *m, unsigned short type, char * const *data) {
+int sd_netlink_message_append_strv(sd_netlink_message *m, uint16_t attr_type, const char* const *data) {
         size_t length, size;
-        char * const *p;
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
         assert_return(data, -EINVAL);
 
-        r = message_attribute_has_type(m, &size, type, NETLINK_TYPE_STRING);
+        r = message_attribute_has_type(m, &size, attr_type, NETLINK_TYPE_STRING);
         if (r < 0)
                 return r;
 
@@ -247,7 +276,7 @@
                 } else
                         length = strlen(*p);
 
-                r = add_rtattr(m, type, *p, length + 1);
+                r = add_rtattr(m, attr_type, *p, length + 1);
                 if (r < 0)
                         return r;
         }
@@ -255,174 +284,197 @@
         return 0;
 }
 
-int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type) {
+int sd_netlink_message_append_flag(sd_netlink_message *m, uint16_t attr_type) {
         size_t size;
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, &size, type, NETLINK_TYPE_FLAG);
+        r = message_attribute_has_type(m, &size, attr_type, NETLINK_TYPE_FLAG);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, NULL, 0);
+        r = add_rtattr(m, attr_type, NULL, 0);
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data) {
+int sd_netlink_message_append_u8(sd_netlink_message *m, uint16_t attr_type, uint8_t data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_U8);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_U8);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, &data, sizeof(uint8_t));
+        r = add_rtattr(m, attr_type, &data, sizeof(uint8_t));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, uint16_t data) {
+int sd_netlink_message_append_u16(sd_netlink_message *m, uint16_t attr_type, uint16_t data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_U16);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_U16);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, &data, sizeof(uint16_t));
+        r = add_rtattr(m, attr_type, &data, sizeof(uint16_t));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, uint32_t data) {
+int sd_netlink_message_append_u32(sd_netlink_message *m, uint16_t attr_type, uint32_t data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_U32);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_U32);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, &data, sizeof(uint32_t));
+        r = add_rtattr(m, attr_type, &data, sizeof(uint32_t));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_u64(sd_netlink_message *m, unsigned short type, uint64_t data) {
+int sd_netlink_message_append_u64(sd_netlink_message *m, uint16_t attr_type, uint64_t data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_U64);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_U64);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, &data, sizeof(uint64_t));
+        r = add_rtattr(m, attr_type, &data, sizeof(uint64_t));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_s8(sd_netlink_message *m, unsigned short type, int8_t data) {
+int sd_netlink_message_append_s8(sd_netlink_message *m, uint16_t attr_type, int8_t data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_S8);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_S8);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, &data, sizeof(int8_t));
+        r = add_rtattr(m, attr_type, &data, sizeof(int8_t));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_s16(sd_netlink_message *m, unsigned short type, int16_t data) {
+int sd_netlink_message_append_s16(sd_netlink_message *m, uint16_t attr_type, int16_t data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_S16);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_S16);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, &data, sizeof(int16_t));
+        r = add_rtattr(m, attr_type, &data, sizeof(int16_t));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_s32(sd_netlink_message *m, unsigned short type, int32_t data) {
+int sd_netlink_message_append_s32(sd_netlink_message *m, uint16_t attr_type, int32_t data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_S32);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_S32);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, &data, sizeof(int32_t));
+        r = add_rtattr(m, attr_type, &data, sizeof(int32_t));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_s64(sd_netlink_message *m, unsigned short type, int64_t data) {
+int sd_netlink_message_append_s64(sd_netlink_message *m, uint16_t attr_type, int64_t data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_S64);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_S64);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, &data, sizeof(int64_t));
+        r = add_rtattr(m, attr_type, &data, sizeof(int64_t));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_data(sd_netlink_message *m, unsigned short type, const void *data, size_t len) {
+int sd_netlink_message_append_data(sd_netlink_message *m, uint16_t attr_type, const void *data, size_t len) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
 
-        r = add_rtattr(m, type, data, len);
+        r = add_rtattr(m, attr_type, data, len);
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int netlink_message_append_in_addr_union(sd_netlink_message *m, unsigned short type, int family, const union in_addr_union *data) {
+int sd_netlink_message_append_container_data(
+                sd_netlink_message *m,
+                uint16_t container_type,
+                uint16_t attr_type,
+                const void *data,
+                size_t len) {
+
+        int r;
+
+        assert_return(m, -EINVAL);
+        assert_return(!m->sealed, -EPERM);
+
+        r = sd_netlink_message_open_container(m, container_type);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_data(m, attr_type, data, len);
+        if (r < 0)
+                return r;
+
+        return sd_netlink_message_close_container(m);
+}
+
+int netlink_message_append_in_addr_union(sd_netlink_message *m, uint16_t attr_type, int family, const union in_addr_union *data) {
         int r;
 
         assert_return(m, -EINVAL);
@@ -430,26 +482,26 @@
         assert_return(data, -EINVAL);
         assert_return(IN_SET(family, AF_INET, AF_INET6), -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_IN_ADDR);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_IN_ADDR);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, data, FAMILY_ADDRESS_SIZE(family));
+        r = add_rtattr(m, attr_type, data, FAMILY_ADDRESS_SIZE(family));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data) {
-        return netlink_message_append_in_addr_union(m, type, AF_INET, (const union in_addr_union *) data);
+int sd_netlink_message_append_in_addr(sd_netlink_message *m, uint16_t attr_type, const struct in_addr *data) {
+        return netlink_message_append_in_addr_union(m, attr_type, AF_INET, (const union in_addr_union *) data);
 }
 
-int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data) {
-        return netlink_message_append_in_addr_union(m, type, AF_INET6, (const union in_addr_union *) data);
+int sd_netlink_message_append_in6_addr(sd_netlink_message *m, uint16_t attr_type, const struct in6_addr *data) {
+        return netlink_message_append_in_addr_union(m, attr_type, AF_INET6, (const union in_addr_union *) data);
 }
 
-int netlink_message_append_sockaddr_union(sd_netlink_message *m, unsigned short type, const union sockaddr_union *data) {
+int netlink_message_append_sockaddr_union(sd_netlink_message *m, uint16_t attr_type, const union sockaddr_union *data) {
         int r;
 
         assert_return(m, -EINVAL);
@@ -457,44 +509,44 @@
         assert_return(data, -EINVAL);
         assert_return(IN_SET(data->sa.sa_family, AF_INET, AF_INET6), -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_SOCKADDR);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_SOCKADDR);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, data, data->sa.sa_family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6));
+        r = add_rtattr(m, attr_type, data, data->sa.sa_family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data) {
-        return netlink_message_append_sockaddr_union(m, type, (const union sockaddr_union *) data);
+int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, uint16_t attr_type, const struct sockaddr_in *data) {
+        return netlink_message_append_sockaddr_union(m, attr_type, (const union sockaddr_union *) data);
 }
 
-int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, unsigned short type, const struct sockaddr_in6 *data) {
-        return netlink_message_append_sockaddr_union(m, type, (const union sockaddr_union *) data);
+int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, uint16_t attr_type, const struct sockaddr_in6 *data) {
+        return netlink_message_append_sockaddr_union(m, attr_type, (const union sockaddr_union *) data);
 }
 
-int sd_netlink_message_append_ether_addr(sd_netlink_message *m, unsigned short type, const struct ether_addr *data) {
+int sd_netlink_message_append_ether_addr(sd_netlink_message *m, uint16_t attr_type, const struct ether_addr *data) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
         assert_return(data, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_ETHER_ADDR);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_ETHER_ADDR);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, data, ETH_ALEN);
+        r = add_rtattr(m, attr_type, data, ETH_ALEN);
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int netlink_message_append_hw_addr(sd_netlink_message *m, unsigned short type, const struct hw_addr_data *data) {
+int netlink_message_append_hw_addr(sd_netlink_message *m, uint16_t attr_type, const struct hw_addr_data *data) {
         int r;
 
         assert_return(m, -EINVAL);
@@ -502,50 +554,50 @@
         assert_return(data, -EINVAL);
         assert_return(data->length > 0, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_ETHER_ADDR);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_ETHER_ADDR);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, data->bytes, data->length);
+        r = add_rtattr(m, attr_type, data->bytes, data->length);
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_append_cache_info(sd_netlink_message *m, unsigned short type, const struct ifa_cacheinfo *info) {
+int sd_netlink_message_append_cache_info(sd_netlink_message *m, uint16_t attr_type, const struct ifa_cacheinfo *info) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
         assert_return(info, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_CACHE_INFO);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_CACHE_INFO);
         if (r < 0)
                 return r;
 
-        r = add_rtattr(m, type, info, sizeof(struct ifa_cacheinfo));
+        r = add_rtattr(m, attr_type, info, sizeof(struct ifa_cacheinfo));
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int sd_netlink_message_open_container(sd_netlink_message *m, unsigned short type) {
+int sd_netlink_message_open_container(sd_netlink_message *m, uint16_t attr_type) {
         size_t size;
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
         /* m->containers[m->n_containers + 1] is accessed both in read and write. Prevent access out of bound */
-        assert_return(m->n_containers < (RTNL_CONTAINER_DEPTH - 1), -ERANGE);
+        assert_return(m->n_containers < (NETLINK_CONTAINER_DEPTH - 1), -ERANGE);
 
-        r = message_attribute_has_type(m, &size, type, NETLINK_TYPE_NESTED);
+        r = message_attribute_has_type(m, &size, attr_type, NETLINK_TYPE_NESTED);
         if (r < 0) {
-                const NLTypeSystemUnion *type_system_union;
+                const NLAPolicySetUnion *policy_set_union;
                 int family;
 
-                r = message_attribute_has_type(m, &size, type, NETLINK_TYPE_UNION);
+                r = message_attribute_has_type(m, &size, attr_type, NETLINK_TYPE_NESTED_UNION_BY_FAMILY);
                 if (r < 0)
                         return r;
 
@@ -553,24 +605,25 @@
                 if (r < 0)
                         return r;
 
-                r = type_system_get_type_system_union(m->containers[m->n_containers].type_system, &type_system_union, type);
-                if (r < 0)
-                        return r;
+                policy_set_union = policy_set_get_policy_set_union(
+                                m->containers[m->n_containers].policy_set,
+                                attr_type);
+                if (!policy_set_union)
+                        return -EOPNOTSUPP;
 
-                r = type_system_union_protocol_get_type_system(type_system_union,
-                                                               &m->containers[m->n_containers + 1].type_system,
-                                                               family);
-                if (r < 0)
-                        return r;
-        } else {
-                r = type_system_get_type_system(m->containers[m->n_containers].type_system,
-                                                &m->containers[m->n_containers + 1].type_system,
-                                                type);
-                if (r < 0)
-                        return r;
-        }
+                m->containers[m->n_containers + 1].policy_set =
+                        policy_set_union_get_policy_set_by_family(
+                                policy_set_union,
+                                family);
+        } else
+                m->containers[m->n_containers + 1].policy_set =
+                        policy_set_get_policy_set(
+                                m->containers[m->n_containers].policy_set,
+                                attr_type);
+        if (!m->containers[m->n_containers + 1].policy_set)
+                return -EOPNOTSUPP;
 
-        r = add_rtattr(m, type | NLA_F_NESTED, NULL, size);
+        r = add_rtattr(m, attr_type | NLA_F_NESTED, NULL, size);
         if (r < 0)
                 return r;
 
@@ -579,30 +632,37 @@
         return 0;
 }
 
-int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned short type, const char *key) {
-        const NLTypeSystemUnion *type_system_union;
+int sd_netlink_message_open_container_union(sd_netlink_message *m, uint16_t attr_type, const char *key) {
+        const NLAPolicySetUnion *policy_set_union;
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
-        assert_return(m->n_containers < (RTNL_CONTAINER_DEPTH - 1), -ERANGE);
+        assert_return(m->n_containers < (NETLINK_CONTAINER_DEPTH - 1), -ERANGE);
 
-        r = type_system_get_type_system_union(m->containers[m->n_containers].type_system, &type_system_union, type);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_NESTED_UNION_BY_STRING);
         if (r < 0)
                 return r;
 
-        r = type_system_union_get_type_system(type_system_union,
-                                              &m->containers[m->n_containers + 1].type_system,
-                                              key);
-        if (r < 0)
-                return r;
+        policy_set_union = policy_set_get_policy_set_union(
+                        m->containers[m->n_containers].policy_set,
+                        attr_type);
+        if (!policy_set_union)
+                return -EOPNOTSUPP;
 
-        r = sd_netlink_message_append_string(m, type_system_union->match, key);
+        m->containers[m->n_containers + 1].policy_set =
+                policy_set_union_get_policy_set_by_string(
+                        policy_set_union,
+                        key);
+        if (!m->containers[m->n_containers + 1].policy_set)
+                return -EOPNOTSUPP;
+
+        r = sd_netlink_message_append_string(m, policy_set_union_get_match_attribute(policy_set_union), key);
         if (r < 0)
                 return r;
 
         /* do we ever need non-null size */
-        r = add_rtattr(m, type | NLA_F_NESTED, NULL, 0);
+        r = add_rtattr(m, attr_type | NLA_F_NESTED, NULL, 0);
         if (r < 0)
                 return r;
 
@@ -616,27 +676,27 @@
         assert_return(!m->sealed, -EPERM);
         assert_return(m->n_containers > 0, -EINVAL);
 
-        m->containers[m->n_containers].type_system = NULL;
+        m->containers[m->n_containers].policy_set = NULL;
         m->containers[m->n_containers].offset = 0;
         m->n_containers--;
 
         return 0;
 }
 
-int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t type) {
+int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t attr_type) {
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(!m->sealed, -EPERM);
-        assert_return(m->n_containers < (RTNL_CONTAINER_DEPTH - 1), -ERANGE);
+        assert_return(m->n_containers < (NETLINK_CONTAINER_DEPTH - 1), -ERANGE);
 
-        r = add_rtattr(m, type | NLA_F_NESTED, NULL, 0);
+        r = add_rtattr(m, attr_type | NLA_F_NESTED, NULL, 0);
         if (r < 0)
                 return r;
 
         m->containers[m->n_containers].offset = r;
         m->n_containers++;
-        m->containers[m->n_containers].type_system = m->containers[m->n_containers - 1].type_system;
+        m->containers[m->n_containers].policy_set = m->containers[m->n_containers - 1].policy_set;
 
         return 0;
 }
@@ -656,14 +716,14 @@
         m->hdr->nlmsg_len -= rta_len;
 
         m->n_containers--;
-        m->containers[m->n_containers].type_system = NULL;
+        m->containers[m->n_containers].policy_set = NULL;
 
         return 0;
 }
 
 static int netlink_message_read_internal(
                 sd_netlink_message *m,
-                unsigned short type,
+                uint16_t attr_type,
                 void **ret_data,
                 bool *ret_net_byteorder) {
 
@@ -673,15 +733,15 @@
         assert_return(m, -EINVAL);
         assert_return(m->sealed, -EPERM);
 
-        assert(m->n_containers < RTNL_CONTAINER_DEPTH);
+        assert(m->n_containers < NETLINK_CONTAINER_DEPTH);
 
         if (!m->containers[m->n_containers].attributes)
                 return -ENODATA;
 
-        if (type >= m->containers[m->n_containers].n_attributes)
+        if (attr_type > m->containers[m->n_containers].max_attribute)
                 return -ENODATA;
 
-        attribute = &m->containers[m->n_containers].attributes[type];
+        attribute = &m->containers[m->n_containers].attributes[attr_type];
 
         if (attribute->offset == 0)
                 return -ENODATA;
@@ -697,36 +757,38 @@
         return RTA_PAYLOAD(rta);
 }
 
-int sd_netlink_message_read(sd_netlink_message *m, unsigned short type, size_t size, void *data) {
+int sd_netlink_message_read(sd_netlink_message *m, uint16_t attr_type, size_t size, void *data) {
         void *attr_data;
         int r;
 
         assert_return(m, -EINVAL);
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
 
-        if ((size_t) r < size)
-                return -EIO;
+        if ((size_t) r > size)
+                return -ENOBUFS;
 
         if (data)
-                memcpy(data, attr_data, size);
+                memcpy(data, attr_data, r);
 
         return r;
 }
 
-int sd_netlink_message_read_data(sd_netlink_message *m, unsigned short type, size_t *ret_size, void **ret_data) {
-        void *attr_data, *data;
+int sd_netlink_message_read_data(sd_netlink_message *m, uint16_t attr_type, size_t *ret_size, void **ret_data) {
+        void *attr_data;
         int r;
 
         assert_return(m, -EINVAL);
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
 
         if (ret_data) {
+                void *data;
+
                 data = memdup(attr_data, r);
                 if (!data)
                         return -ENOMEM;
@@ -740,22 +802,49 @@
         return r;
 }
 
-int sd_netlink_message_read_string_strdup(sd_netlink_message *m, unsigned short type, char **data) {
+int sd_netlink_message_read_data_suffix0(sd_netlink_message *m, uint16_t attr_type, size_t *ret_size, void **ret_data) {
         void *attr_data;
-        char *str;
         int r;
 
         assert_return(m, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_STRING);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        if (ret_data) {
+                void *data;
+
+                data = memdup_suffix0(attr_data, r);
+                if (!data)
+                        return -ENOMEM;
+
+                *ret_data = data;
+        }
+
+        if (ret_size)
+                *ret_size = r;
+
+        return r;
+}
+
+int sd_netlink_message_read_string_strdup(sd_netlink_message *m, uint16_t attr_type, char **data) {
+        void *attr_data;
+        int r;
+
+        assert_return(m, -EINVAL);
+
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_STRING);
+        if (r < 0)
+                return r;
+
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
 
         if (data) {
+                char *str;
+
                 str = strndup(attr_data, r);
                 if (!str)
                         return -ENOMEM;
@@ -766,20 +855,21 @@
         return 0;
 }
 
-int sd_netlink_message_read_string(sd_netlink_message *m, unsigned short type, const char **data) {
-        int r;
+int sd_netlink_message_read_string(sd_netlink_message *m, uint16_t attr_type, const char **data) {
         void *attr_data;
+        int r;
 
         assert_return(m, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_STRING);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_STRING);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
-        else if (strnlen(attr_data, r) >= (size_t) r)
+
+        if (strnlen(attr_data, r) >= (size_t) r)
                 return -EIO;
 
         if (data)
@@ -788,20 +878,21 @@
         return 0;
 }
 
-int sd_netlink_message_read_u8(sd_netlink_message *m, unsigned short type, uint8_t *data) {
-        int r;
+int sd_netlink_message_read_u8(sd_netlink_message *m, uint16_t attr_type, uint8_t *data) {
         void *attr_data;
+        int r;
 
         assert_return(m, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_U8);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_U8);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
-        else if ((size_t) r < sizeof(uint8_t))
+
+        if ((size_t) r < sizeof(uint8_t))
                 return -EIO;
 
         if (data)
@@ -810,21 +901,22 @@
         return 0;
 }
 
-int sd_netlink_message_read_u16(sd_netlink_message *m, unsigned short type, uint16_t *data) {
+int sd_netlink_message_read_u16(sd_netlink_message *m, uint16_t attr_type, uint16_t *data) {
         void *attr_data;
         bool net_byteorder;
         int r;
 
         assert_return(m, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_U16);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_U16);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, &net_byteorder);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, &net_byteorder);
         if (r < 0)
                 return r;
-        else if ((size_t) r < sizeof(uint16_t))
+
+        if ((size_t) r < sizeof(uint16_t))
                 return -EIO;
 
         if (data) {
@@ -837,21 +929,22 @@
         return 0;
 }
 
-int sd_netlink_message_read_u32(sd_netlink_message *m, unsigned short type, uint32_t *data) {
+int sd_netlink_message_read_u32(sd_netlink_message *m, uint16_t attr_type, uint32_t *data) {
         void *attr_data;
         bool net_byteorder;
         int r;
 
         assert_return(m, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_U32);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_U32);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, &net_byteorder);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, &net_byteorder);
         if (r < 0)
                 return r;
-        else if ((size_t) r < sizeof(uint32_t))
+
+        if ((size_t) r < sizeof(uint32_t))
                 return -EIO;
 
         if (data) {
@@ -864,20 +957,21 @@
         return 0;
 }
 
-int sd_netlink_message_read_ether_addr(sd_netlink_message *m, unsigned short type, struct ether_addr *data) {
-        int r;
+int sd_netlink_message_read_ether_addr(sd_netlink_message *m, uint16_t attr_type, struct ether_addr *data) {
         void *attr_data;
+        int r;
 
         assert_return(m, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_ETHER_ADDR);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_ETHER_ADDR);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
-        else if ((size_t) r < sizeof(struct ether_addr))
+
+        if ((size_t) r < sizeof(struct ether_addr))
                 return -EIO;
 
         if (data)
@@ -886,20 +980,21 @@
         return 0;
 }
 
-int netlink_message_read_hw_addr(sd_netlink_message *m, unsigned short type, struct hw_addr_data *data) {
-        int r;
+int netlink_message_read_hw_addr(sd_netlink_message *m, uint16_t attr_type, struct hw_addr_data *data) {
         void *attr_data;
+        int r;
 
         assert_return(m, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_ETHER_ADDR);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_ETHER_ADDR);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
-        else if (r > HW_ADDR_MAX_SIZE)
+
+        if (r > HW_ADDR_MAX_SIZE)
                 return -EIO;
 
         if (data) {
@@ -910,20 +1005,21 @@
         return 0;
 }
 
-int sd_netlink_message_read_cache_info(sd_netlink_message *m, unsigned short type, struct ifa_cacheinfo *info) {
-        int r;
+int sd_netlink_message_read_cache_info(sd_netlink_message *m, uint16_t attr_type, struct ifa_cacheinfo *info) {
         void *attr_data;
+        int r;
 
         assert_return(m, -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_CACHE_INFO);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_CACHE_INFO);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
-        else if ((size_t) r < sizeof(struct ifa_cacheinfo))
+
+        if ((size_t) r < sizeof(struct ifa_cacheinfo))
                 return -EIO;
 
         if (info)
@@ -932,21 +1028,22 @@
         return 0;
 }
 
-int netlink_message_read_in_addr_union(sd_netlink_message *m, unsigned short type, int family, union in_addr_union *data) {
+int netlink_message_read_in_addr_union(sd_netlink_message *m, uint16_t attr_type, int family, union in_addr_union *data) {
         void *attr_data;
         int r;
 
         assert_return(m, -EINVAL);
         assert_return(IN_SET(family, AF_INET, AF_INET6), -EINVAL);
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_IN_ADDR);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_IN_ADDR);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r < 0)
                 return r;
-        else if ((size_t) r < FAMILY_ADDRESS_SIZE(family))
+
+        if ((size_t) r < FAMILY_ADDRESS_SIZE(family))
                 return -EIO;
 
         if (data)
@@ -955,29 +1052,29 @@
         return 0;
 }
 
-int sd_netlink_message_read_in_addr(sd_netlink_message *m, unsigned short type, struct in_addr *data) {
+int sd_netlink_message_read_in_addr(sd_netlink_message *m, uint16_t attr_type, struct in_addr *data) {
         union in_addr_union u;
         int r;
 
-        r = netlink_message_read_in_addr_union(m, type, AF_INET, &u);
+        r = netlink_message_read_in_addr_union(m, attr_type, AF_INET, &u);
         if (r >= 0 && data)
                 *data = u.in;
 
         return r;
 }
 
-int sd_netlink_message_read_in6_addr(sd_netlink_message *m, unsigned short type, struct in6_addr *data) {
+int sd_netlink_message_read_in6_addr(sd_netlink_message *m, uint16_t attr_type, struct in6_addr *data) {
         union in_addr_union u;
         int r;
 
-        r = netlink_message_read_in_addr_union(m, type, AF_INET6, &u);
+        r = netlink_message_read_in_addr_union(m, attr_type, AF_INET6, &u);
         if (r >= 0 && data)
                 *data = u.in6;
 
         return r;
 }
 
-int sd_netlink_message_has_flag(sd_netlink_message *m, unsigned short type) {
+int sd_netlink_message_has_flag(sd_netlink_message *m, uint16_t attr_type) {
         void *attr_data;
         int r;
 
@@ -985,11 +1082,11 @@
 
         /* This returns 1 when the flag is set, 0 when not set, negative errno on error. */
 
-        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_FLAG);
+        r = message_attribute_has_type(m, NULL, attr_type, NETLINK_TYPE_FLAG);
         if (r < 0)
                 return r;
 
-        r = netlink_message_read_internal(m, type, &attr_data, NULL);
+        r = netlink_message_read_internal(m, attr_type, &attr_data, NULL);
         if (r == -ENODATA)
                 return 0;
         if (r < 0)
@@ -998,38 +1095,38 @@
         return 1;
 }
 
-int sd_netlink_message_read_strv(sd_netlink_message *m, unsigned short container_type, unsigned short type_id, char ***ret) {
+int sd_netlink_message_read_strv(sd_netlink_message *m, uint16_t container_type, uint16_t attr_type, char ***ret) {
         _cleanup_strv_free_ char **s = NULL;
-        const NLTypeSystem *type_system;
-        const NLType *nl_type;
+        const NLAPolicySet *policy_set;
+        const NLAPolicy *policy;
         struct rtattr *rta;
         void *container;
         size_t rt_len;
         int r;
 
         assert_return(m, -EINVAL);
-        assert_return(m->n_containers < RTNL_CONTAINER_DEPTH, -EINVAL);
+        assert_return(m->n_containers < NETLINK_CONTAINER_DEPTH, -EINVAL);
 
-        r = type_system_get_type(m->containers[m->n_containers].type_system,
-                                 &nl_type,
-                                 container_type);
-        if (r < 0)
-                return r;
+        policy = policy_set_get_policy(
+                        m->containers[m->n_containers].policy_set,
+                        container_type);
+        if (!policy)
+                return -EOPNOTSUPP;
 
-        if (type_get_type(nl_type) != NETLINK_TYPE_NESTED)
+        if (policy_get_type(policy) != NETLINK_TYPE_NESTED)
                 return -EINVAL;
 
-        r = type_system_get_type_system(m->containers[m->n_containers].type_system,
-                                        &type_system,
-                                        container_type);
-        if (r < 0)
-                return r;
+        policy_set = policy_set_get_policy_set(
+                        m->containers[m->n_containers].policy_set,
+                        container_type);
+        if (!policy_set)
+                return -EOPNOTSUPP;
 
-        r = type_system_get_type(type_system, &nl_type, type_id);
-        if (r < 0)
-                return r;
+        policy = policy_set_get_policy(policy_set, attr_type);
+        if (!policy)
+                return -EOPNOTSUPP;
 
-        if (type_get_type(nl_type) != NETLINK_TYPE_STRING)
+        if (policy_get_type(policy) != NETLINK_TYPE_STRING)
                 return -EINVAL;
 
         r = netlink_message_read_internal(m, container_type, &container, NULL);
@@ -1044,10 +1141,10 @@
          * introduce an unsigned short variable as a workaround. */
         unsigned short len = rt_len;
         for (; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
-                unsigned short type;
+                uint16_t type;
 
                 type = RTA_TYPE(rta);
-                if (type != type_id)
+                if (type != attr_type)
                         continue;
 
                 r = strv_extend(&s, RTA_DATA(rta));
@@ -1059,116 +1156,109 @@
         return 0;
 }
 
-static int netlink_container_parse(sd_netlink_message *m,
-                                   struct netlink_container *container,
-                                   struct rtattr *rta,
-                                   size_t rt_len) {
+static int netlink_container_parse(
+                sd_netlink_message *m,
+                struct netlink_container *container,
+                struct rtattr *rta,
+                size_t rt_len) {
+
         _cleanup_free_ struct netlink_attribute *attributes = NULL;
-        size_t n = 0;
+        uint16_t max_attr = 0;
 
         /* RTA_OK() macro compares with rta->rt_len, which is unsigned short, and
          * LGTM.com analysis does not like the type difference. Hence, here we
          * introduce an unsigned short variable as a workaround. */
         unsigned short len = rt_len;
         for (; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
-                unsigned short type;
+                uint16_t attr;
 
-                type = RTA_TYPE(rta);
+                attr = RTA_TYPE(rta);
+                max_attr = MAX(max_attr, attr);
 
-                if (!GREEDY_REALLOC0(attributes, type + 1))
+                if (!GREEDY_REALLOC0(attributes, (size_t) max_attr + 1))
                         return -ENOMEM;
 
-                if (attributes[type].offset != 0)
-                        log_debug("rtnl: message parse - overwriting repeated attribute");
+                if (attributes[attr].offset != 0)
+                        log_debug("sd-netlink: message parse - overwriting repeated attribute");
 
-                attributes[type].offset = (uint8_t *) rta - (uint8_t *) m->hdr;
-                attributes[type].nested = RTA_FLAGS(rta) & NLA_F_NESTED;
-                attributes[type].net_byteorder = RTA_FLAGS(rta) & NLA_F_NET_BYTEORDER;
-
-                if (type + 1U > n)
-                        n = type + 1U;
+                attributes[attr].offset = (uint8_t *) rta - (uint8_t *) m->hdr;
+                attributes[attr].nested = RTA_FLAGS(rta) & NLA_F_NESTED;
+                attributes[attr].net_byteorder = RTA_FLAGS(rta) & NLA_F_NET_BYTEORDER;
         }
 
         container->attributes = TAKE_PTR(attributes);
-        container->n_attributes = n;
+        container->max_attribute = max_attr;
 
         return 0;
 }
 
-int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short type_id) {
-        const NLType *nl_type;
-        const NLTypeSystem *type_system;
+int sd_netlink_message_enter_container(sd_netlink_message *m, uint16_t attr_type) {
+        const NLAPolicy *policy;
+        const NLAPolicySet *policy_set;
         void *container;
-        uint16_t type;
         size_t size;
         int r;
 
         assert_return(m, -EINVAL);
-        assert_return(m->n_containers < (RTNL_CONTAINER_DEPTH - 1), -EINVAL);
+        assert_return(m->n_containers < (NETLINK_CONTAINER_DEPTH - 1), -EINVAL);
 
-        r = type_system_get_type(m->containers[m->n_containers].type_system,
-                                 &nl_type,
-                                 type_id);
-        if (r < 0)
-                return r;
+        policy = policy_set_get_policy(
+                        m->containers[m->n_containers].policy_set,
+                        attr_type);
+        if (!policy)
+                return -EOPNOTSUPP;
 
-        type = type_get_type(nl_type);
+        switch (policy_get_type(policy)) {
+        case NETLINK_TYPE_NESTED:
+                policy_set = policy_set_get_policy_set(
+                                m->containers[m->n_containers].policy_set,
+                                attr_type);
+                break;
 
-        if (type == NETLINK_TYPE_NESTED) {
-                r = type_system_get_type_system(m->containers[m->n_containers].type_system,
-                                                &type_system,
-                                                type_id);
-                if (r < 0)
-                        return r;
-        } else if (type == NETLINK_TYPE_UNION) {
-                const NLTypeSystemUnion *type_system_union;
+        case NETLINK_TYPE_NESTED_UNION_BY_STRING: {
+                const NLAPolicySetUnion *policy_set_union;
+                const char *key;
 
-                r = type_system_get_type_system_union(m->containers[m->n_containers].type_system,
-                                                      &type_system_union,
-                                                      type_id);
+                policy_set_union = policy_get_policy_set_union(policy);
+                if (!policy_set_union)
+                        return -EOPNOTSUPP;
+
+                r = sd_netlink_message_read_string(
+                                m,
+                                policy_set_union_get_match_attribute(policy_set_union),
+                                &key);
                 if (r < 0)
                         return r;
 
-                switch (type_system_union->match_type) {
-                case NL_MATCH_SIBLING:
-                {
-                        const char *key;
+                policy_set = policy_set_union_get_policy_set_by_string(
+                                policy_set_union,
+                                key);
+                break;
+        }
+        case NETLINK_TYPE_NESTED_UNION_BY_FAMILY: {
+                const NLAPolicySetUnion *policy_set_union;
+                int family;
 
-                        r = sd_netlink_message_read_string(m, type_system_union->match, &key);
-                        if (r < 0)
-                                return r;
+                policy_set_union = policy_get_policy_set_union(policy);
+                if (!policy_set_union)
+                        return -EOPNOTSUPP;
 
-                        r = type_system_union_get_type_system(type_system_union,
-                                                              &type_system,
-                                                              key);
-                        if (r < 0)
-                                return r;
+                r = sd_rtnl_message_get_family(m, &family);
+                if (r < 0)
+                        return r;
 
-                        break;
-                }
-                case NL_MATCH_PROTOCOL:
-                {
-                        int family;
+                policy_set = policy_set_union_get_policy_set_by_family(
+                                policy_set_union,
+                                family);
+                break;
+        }
+        default:
+                assert_not_reached();
+        }
+        if (!policy_set)
+                return -EOPNOTSUPP;
 
-                        r = sd_rtnl_message_get_family(m, &family);
-                        if (r < 0)
-                                return r;
-
-                        r = type_system_union_protocol_get_type_system(type_system_union,
-                                                                       &type_system,
-                                                                       family);
-                        if (r < 0)
-                                return r;
-
-                        break;
-                }
-                default:
-                        assert_not_reached("sd-netlink: invalid type system union type");
-                }
-        } else
-                return -EINVAL;
-
-        r = netlink_message_read_internal(m, type_id, &container, NULL);
+        r = netlink_message_read_internal(m, attr_type, &container, NULL);
         if (r < 0)
                 return r;
 
@@ -1184,20 +1274,20 @@
                 return r;
         }
 
-        m->containers[m->n_containers].type_system = type_system;
+        m->containers[m->n_containers].policy_set = policy_set;
 
         return 0;
 }
 
-int sd_netlink_message_enter_array(sd_netlink_message *m, unsigned short type_id) {
+int sd_netlink_message_enter_array(sd_netlink_message *m, uint16_t attr_type) {
         void *container;
         size_t size;
         int r;
 
         assert_return(m, -EINVAL);
-        assert_return(m->n_containers < (RTNL_CONTAINER_DEPTH - 1), -EINVAL);
+        assert_return(m->n_containers < (NETLINK_CONTAINER_DEPTH - 1), -EINVAL);
 
-        r = netlink_message_read_internal(m, type_id, &container, NULL);
+        r = netlink_message_read_internal(m, attr_type, &container, NULL);
         if (r < 0)
                 return r;
 
@@ -1213,7 +1303,7 @@
                 return r;
         }
 
-        m->containers[m->n_containers].type_system = m->containers[m->n_containers - 1].type_system;
+        m->containers[m->n_containers].policy_set = m->containers[m->n_containers - 1].policy_set;
 
         return 0;
 }
@@ -1224,18 +1314,21 @@
         assert_return(m->n_containers > 0, -EINVAL);
 
         m->containers[m->n_containers].attributes = mfree(m->containers[m->n_containers].attributes);
-        m->containers[m->n_containers].type_system = NULL;
+        m->containers[m->n_containers].max_attribute = 0;
+        m->containers[m->n_containers].policy_set = NULL;
 
         m->n_containers--;
 
         return 0;
 }
 
-uint32_t rtnl_message_get_serial(sd_netlink_message *m) {
-        assert(m);
-        assert(m->hdr);
+int sd_netlink_message_get_max_attribute(sd_netlink_message *m, uint16_t *ret) {
+        assert_return(m, -EINVAL);
+        assert_return(m->sealed, -EINVAL);
+        assert_return(ret, -EINVAL);
 
-        return m->hdr->nlmsg_seq;
+        *ret = m->containers[m->n_containers].max_attribute;
+        return 0;
 }
 
 int sd_netlink_message_is_error(sd_netlink_message *m) {
@@ -1280,18 +1373,15 @@
                                        NLMSG_PAYLOAD(m->hdr, hlen));
 }
 
-int sd_netlink_message_rewind(sd_netlink_message *m, sd_netlink *genl) {
-        const NLType *nl_type;
-        uint16_t type;
+int sd_netlink_message_rewind(sd_netlink_message *m, sd_netlink *nl) {
         size_t size;
         int r;
 
         assert_return(m, -EINVAL);
-        assert_return(genl || m->protocol != NETLINK_GENERIC, -EINVAL);
+        assert_return(nl, -EINVAL);
 
         /* don't allow appending to message once parsed */
-        if (!m->sealed)
-                rtnl_message_seal(m);
+        message_seal(m);
 
         for (unsigned i = 1; i <= m->n_containers; i++)
                 m->containers[i].attributes = mfree(m->containers[i].attributes);
@@ -1304,37 +1394,22 @@
 
         assert(m->hdr);
 
-        r = type_system_root_get_type(genl, &nl_type, m->hdr->nlmsg_type);
+        r = netlink_get_policy_set_and_header_size(nl, m->hdr->nlmsg_type,
+                                                   &m->containers[0].policy_set, &size);
         if (r < 0)
                 return r;
 
-        type = type_get_type(nl_type);
-        size = type_get_size(nl_type);
+        if (sd_netlink_message_is_error(m))
+                return netlink_message_parse_error(m);
 
-        if (type == NETLINK_TYPE_NESTED) {
-                const NLTypeSystem *type_system;
-
-                type_get_type_system(nl_type, &type_system);
-
-                m->containers[0].type_system = type_system;
-
-                if (sd_netlink_message_is_error(m))
-                        r = netlink_message_parse_error(m);
-                else
-                        r = netlink_container_parse(m,
-                                                    &m->containers[m->n_containers],
-                                                    (struct rtattr*)((uint8_t*) NLMSG_DATA(m->hdr) + NLMSG_ALIGN(size)),
-                                                    NLMSG_PAYLOAD(m->hdr, size));
-                if (r < 0)
-                        return r;
-        }
-
-        return 0;
+        return netlink_container_parse(m,
+                                       &m->containers[0],
+                                       (struct rtattr*)((uint8_t*) NLMSG_DATA(m->hdr) + NLMSG_ALIGN(size)),
+                                       NLMSG_PAYLOAD(m->hdr, size));
 }
 
-void rtnl_message_seal(sd_netlink_message *m) {
+void message_seal(sd_netlink_message *m) {
         assert(m);
-        assert(!m->sealed);
 
         m->sealed = true;
 }
diff --git a/src/libsystemd/sd-netlink/netlink-slot.c b/src/libsystemd/sd-netlink/netlink-slot.c
index b6de545..34f527d 100644
--- a/src/libsystemd/sd-netlink/netlink-slot.c
+++ b/src/libsystemd/sd-netlink/netlink-slot.c
@@ -70,29 +70,15 @@
         case NETLINK_MATCH_CALLBACK:
                 LIST_REMOVE(match_callbacks, nl->match_callbacks, &slot->match_callback);
 
-                switch (slot->match_callback.type) {
-                case RTM_NEWLINK:
-                case RTM_DELLINK:
-                        (void) socket_broadcast_group_unref(nl, RTNLGRP_LINK);
+                for (size_t i = 0; i < slot->match_callback.n_groups; i++)
+                        (void) socket_broadcast_group_unref(nl, slot->match_callback.groups[i]);
 
-                        break;
-                case RTM_NEWADDR:
-                case RTM_DELADDR:
-                        (void) socket_broadcast_group_unref(nl, RTNLGRP_IPV4_IFADDR);
-                        (void) socket_broadcast_group_unref(nl, RTNLGRP_IPV6_IFADDR);
-
-                        break;
-                case RTM_NEWROUTE:
-                case RTM_DELROUTE:
-                        (void) socket_broadcast_group_unref(nl, RTNLGRP_IPV4_ROUTE);
-                        (void) socket_broadcast_group_unref(nl, RTNLGRP_IPV6_ROUTE);
-
-                        break;
-                }
+                slot->match_callback.n_groups = 0;
+                slot->match_callback.groups = mfree(slot->match_callback.groups);
 
                 break;
         default:
-                assert_not_reached("Wut? Unknown slot type?");
+                assert_not_reached();
         }
 
         slot->type = _NETLINK_SLOT_INVALID;
diff --git a/src/libsystemd/sd-netlink/netlink-socket.c b/src/libsystemd/sd-netlink/netlink-socket.c
index 1951d68..4b42d49 100644
--- a/src/libsystemd/sd-netlink/netlink-socket.c
+++ b/src/libsystemd/sd-netlink/netlink-socket.c
@@ -13,19 +13,7 @@
 #include "io-util.h"
 #include "netlink-internal.h"
 #include "netlink-types.h"
-#include "netlink-util.h"
 #include "socket-util.h"
-#include "util.h"
-
-int socket_open(int family) {
-        int fd;
-
-        fd = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, family);
-        if (fd < 0)
-                return -errno;
-
-        return fd_move_above_stdio(fd);
-}
 
 static int broadcast_groups_get(sd_netlink *nl) {
         _cleanup_free_ uint32_t *groups = NULL;
@@ -81,13 +69,11 @@
 
         addrlen = sizeof(nl->sockaddr);
 
-        r = bind(nl->fd, &nl->sockaddr.sa, addrlen);
         /* ignore EINVAL to allow binding an already bound socket */
-        if (r < 0 && errno != EINVAL)
+        if (bind(nl->fd, &nl->sockaddr.sa, addrlen) < 0 && errno != EINVAL)
                 return -errno;
 
-        r = getsockname(nl->fd, &nl->sockaddr.sa, &addrlen);
-        if (r < 0)
+        if (getsockname(nl->fd, &nl->sockaddr.sa, &addrlen) < 0)
                 return -errno;
 
         return broadcast_groups_get(nl);
@@ -194,37 +180,12 @@
         return k;
 }
 
-int socket_writev_message(sd_netlink *nl, sd_netlink_message **m, size_t msgcount) {
-        _cleanup_free_ struct iovec *iovs = NULL;
-        ssize_t k;
-
-        assert(nl);
-        assert(m);
-        assert(msgcount > 0);
-
-        iovs = new(struct iovec, msgcount);
-        if (!iovs)
-                return -ENOMEM;
-
-        for (size_t i = 0; i < msgcount; i++) {
-                assert(m[i]->hdr);
-                assert(m[i]->hdr->nlmsg_len > 0);
-
-                iovs[i] = IOVEC_MAKE(m[i]->hdr, m[i]->hdr->nlmsg_len);
-        }
-
-        k = writev(nl->fd, iovs, msgcount);
-        if (k < 0)
-                return -errno;
-
-        return k;
-}
-
-static int socket_recv_message(int fd, struct iovec *iov, uint32_t *ret_mcast_group, bool peek) {
+static int socket_recv_message(int fd, void *buf, size_t buf_size, uint32_t *ret_mcast_group, bool peek) {
+        struct iovec iov = IOVEC_MAKE(buf, buf_size);
         union sockaddr_union sender;
         CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct nl_pktinfo))) control;
         struct msghdr msg = {
-                .msg_iov = iov,
+                .msg_iov = &iov,
                 .msg_iovlen = 1,
                 .msg_name = &sender,
                 .msg_namelen = sizeof(sender),
@@ -234,19 +195,23 @@
         ssize_t n;
 
         assert(fd >= 0);
-        assert(iov);
+        assert(peek || (buf && buf_size > 0));
 
         n = recvmsg_safe(fd, &msg, MSG_TRUNC | (peek ? MSG_PEEK : 0));
-        if (n == -ENOBUFS)
-                return log_debug_errno(n, "rtnl: kernel receive buffer overrun");
-        if (IN_SET(n, -EAGAIN, -EINTR))
-                return 0;
-        if (n < 0)
+        if (n < 0) {
+                if (n == -ENOBUFS)
+                        return log_debug_errno(n, "sd-netlink: kernel receive buffer overrun");
+                if (ERRNO_IS_TRANSIENT(n)) {
+                        if (ret_mcast_group)
+                                *ret_mcast_group = 0;
+                        return 0;
+                }
                 return (int) n;
+        }
 
         if (sender.nl.nl_pid != 0) {
                 /* not from the kernel, ignore */
-                log_debug("rtnl: ignoring message from PID %"PRIu32, sender.nl.nl_pid);
+                log_debug("sd-netlink: ignoring message from PID %"PRIu32, sender.nl.nl_pid);
 
                 if (peek) {
                         /* drop the message */
@@ -255,9 +220,14 @@
                                 return (int) n;
                 }
 
+                if (ret_mcast_group)
+                        *ret_mcast_group = 0;
                 return 0;
         }
 
+        if (!peek && (size_t) n > buf_size) /* message did not fit in read buffer */
+                return -EIO;
+
         if (ret_mcast_group) {
                 struct nl_pktinfo *pi;
 
@@ -271,152 +241,221 @@
         return (int) n;
 }
 
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+        netlink_message_hash_ops,
+        void, trivial_hash_func, trivial_compare_func,
+        sd_netlink_message, sd_netlink_message_unref);
+
+static int netlink_queue_received_message(sd_netlink *nl, sd_netlink_message *m) {
+        uint32_t serial;
+        int r;
+
+        assert(nl);
+        assert(m);
+
+        if (ordered_set_size(nl->rqueue) >= NETLINK_RQUEUE_MAX)
+                return log_debug_errno(SYNTHETIC_ERRNO(ENOBUFS),
+                                       "sd-netlink: exhausted the read queue size (%d)", NETLINK_RQUEUE_MAX);
+
+        r = ordered_set_ensure_put(&nl->rqueue, &netlink_message_hash_ops, m);
+        if (r < 0)
+                return r;
+
+        sd_netlink_message_ref(m);
+
+        if (sd_netlink_message_is_broadcast(m))
+                return 0;
+
+        serial = message_get_serial(m);
+        if (serial == 0)
+                return 0;
+
+        if (sd_netlink_message_get_errno(m) < 0) {
+                _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *old = NULL;
+
+                old = hashmap_remove(nl->rqueue_by_serial, UINT32_TO_PTR(serial));
+                if (old)
+                        log_debug("sd-netlink: received error message with serial %"PRIu32", but another message with "
+                                  "the same serial is already stored in the read queue, replacing.", serial);
+        }
+
+        r = hashmap_ensure_put(&nl->rqueue_by_serial, &netlink_message_hash_ops, UINT32_TO_PTR(serial), m);
+        if (r == -EEXIST) {
+                if (!sd_netlink_message_is_error(m))
+                        log_debug("sd-netlink: received message with serial %"PRIu32", but another message with "
+                                  "the same serial is already stored in the read queue, ignoring.", serial);
+                return 0;
+        }
+        if (r < 0) {
+                sd_netlink_message_unref(ordered_set_remove(nl->rqueue, m));
+                return r;
+        }
+
+        sd_netlink_message_ref(m);
+        return 0;
+}
+
+static int netlink_queue_partially_received_message(sd_netlink *nl, sd_netlink_message *m) {
+        uint32_t serial;
+        int r;
+
+        assert(nl);
+        assert(m);
+        assert(m->hdr->nlmsg_flags & NLM_F_MULTI);
+
+        if (hashmap_size(nl->rqueue_partial_by_serial) >= NETLINK_RQUEUE_MAX)
+                return log_debug_errno(SYNTHETIC_ERRNO(ENOBUFS),
+                                       "sd-netlink: exhausted the partial read queue size (%d)", NETLINK_RQUEUE_MAX);
+
+        serial = message_get_serial(m);
+        r = hashmap_ensure_put(&nl->rqueue_partial_by_serial, &netlink_message_hash_ops, UINT32_TO_PTR(serial), m);
+        if (r < 0)
+                return r;
+
+        sd_netlink_message_ref(m);
+        return 0;
+}
+
+static int parse_message_one(sd_netlink *nl, uint32_t group, const struct nlmsghdr *hdr, sd_netlink_message **ret) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        size_t size;
+        int r;
+
+        assert(nl);
+        assert(hdr);
+        assert(ret);
+
+        /* not broadcast and not for us */
+        if (group == 0 && hdr->nlmsg_pid != nl->sockaddr.nl.nl_pid)
+                goto finalize;
+
+        /* silently drop noop messages */
+        if (hdr->nlmsg_type == NLMSG_NOOP)
+                goto finalize;
+
+        /* check that we support this message type */
+        r = netlink_get_policy_set_and_header_size(nl, hdr->nlmsg_type, NULL, &size);
+        if (r == -EOPNOTSUPP) {
+                log_debug("sd-netlink: ignored message with unknown type: %i", hdr->nlmsg_type);
+                goto finalize;
+        }
+        if (r < 0)
+                return r;
+
+        /* check that the size matches the message type */
+        if (hdr->nlmsg_len < NLMSG_LENGTH(size)) {
+                log_debug("sd-netlink: message is shorter than expected, dropping.");
+                goto finalize;
+        }
+
+        r = message_new_empty(nl, &m);
+        if (r < 0)
+                return r;
+
+        m->multicast_group = group;
+        m->hdr = memdup(hdr, hdr->nlmsg_len);
+        if (!m->hdr)
+                return -ENOMEM;
+
+        /* seal and parse the top-level message */
+        r = sd_netlink_message_rewind(m, nl);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
+        return 1;
+
+finalize:
+        *ret = NULL;
+        return 0;
+}
+
 /* On success, the number of bytes received is returned and *ret points to the received message
  * which has a valid header and the correct size.
  * If nothing useful was received 0 is returned.
  * On failure, a negative error code is returned.
  */
-int socket_read_message(sd_netlink *rtnl) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *first = NULL;
-        bool multi_part = false, done = false;
-        size_t len, allocated;
-        struct iovec iov = {};
-        uint32_t group = 0;
-        unsigned i = 0;
+int socket_read_message(sd_netlink *nl) {
+        bool done = false;
+        uint32_t group;
+        size_t len;
         int r;
 
-        assert(rtnl);
-        assert(rtnl->rbuffer);
+        assert(nl);
 
         /* read nothing, just get the pending message size */
-        r = socket_recv_message(rtnl->fd, &iov, NULL, true);
+        r = socket_recv_message(nl->fd, NULL, 0, NULL, true);
         if (r <= 0)
                 return r;
-        else
-                len = (size_t) r;
+        len = (size_t) r;
 
         /* make room for the pending message */
-        if (!greedy_realloc((void **)&rtnl->rbuffer, len, sizeof(uint8_t)))
+        if (!greedy_realloc((void**) &nl->rbuffer, len, sizeof(uint8_t)))
                 return -ENOMEM;
 
-        allocated = MALLOC_SIZEOF_SAFE(rtnl->rbuffer);
-        iov = IOVEC_MAKE(rtnl->rbuffer, allocated);
-
         /* read the pending message */
-        r = socket_recv_message(rtnl->fd, &iov, &group, false);
+        r = socket_recv_message(nl->fd, nl->rbuffer, MALLOC_SIZEOF_SAFE(nl->rbuffer), &group, false);
         if (r <= 0)
                 return r;
-        else
-                len = (size_t) r;
+        len = (size_t) r;
 
-        if (len > allocated)
-                /* message did not fit in read buffer */
-                return -EIO;
-
-        if (NLMSG_OK(rtnl->rbuffer, len) && rtnl->rbuffer->nlmsg_flags & NLM_F_MULTI) {
-                multi_part = true;
-
-                for (i = 0; i < rtnl->rqueue_partial_size; i++)
-                        if (rtnl_message_get_serial(rtnl->rqueue_partial[i]) ==
-                            rtnl->rbuffer->nlmsg_seq) {
-                                first = rtnl->rqueue_partial[i];
-                                break;
-                        }
-        }
-
-        for (struct nlmsghdr *new_msg = rtnl->rbuffer; NLMSG_OK(new_msg, len) && !done; new_msg = NLMSG_NEXT(new_msg, len)) {
-                _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-                const NLType *nl_type;
-
-                if (!group && new_msg->nlmsg_pid != rtnl->sockaddr.nl.nl_pid)
-                        /* not broadcast and not for us */
-                        continue;
-
-                if (new_msg->nlmsg_type == NLMSG_NOOP)
-                        /* silently drop noop messages */
-                        continue;
-
-                if (new_msg->nlmsg_type == NLMSG_DONE) {
-                        /* finished reading multi-part message */
-                        done = true;
-
-                        /* if first is not defined, put NLMSG_DONE into the receive queue. */
-                        if (first)
-                                continue;
-                }
-
-                /* check that we support this message type */
-                r = type_system_root_get_type(rtnl, &nl_type, new_msg->nlmsg_type);
-                if (r < 0) {
-                        if (r == -EOPNOTSUPP)
-                                log_debug("sd-netlink: ignored message with unknown type: %i",
-                                          new_msg->nlmsg_type);
-
-                        continue;
-                }
-
-                /* check that the size matches the message type */
-                if (new_msg->nlmsg_len < NLMSG_LENGTH(type_get_size(nl_type))) {
-                        log_debug("sd-netlink: message is shorter than expected, dropping");
-                        continue;
-                }
-
-                r = message_new_empty(rtnl, &m);
-                if (r < 0)
-                        return r;
-
-                m->broadcast = !!group;
-
-                m->hdr = memdup(new_msg, new_msg->nlmsg_len);
-                if (!m->hdr)
-                        return -ENOMEM;
-
-                /* seal and parse the top-level message */
-                r = sd_netlink_message_rewind(m, rtnl);
-                if (r < 0)
-                        return r;
-
-                /* push the message onto the multi-part message stack */
-                if (first)
-                        m->next = first;
-                first = TAKE_PTR(m);
-        }
-
-        if (len > 0)
-                log_debug("sd-netlink: discarding %zu bytes of incoming message", len);
-
-        if (!first)
+        if (!NLMSG_OK(nl->rbuffer, len)) {
+                log_debug("sd-netlink: received invalid message, discarding %zu bytes of incoming message", len);
                 return 0;
+        }
 
-        if (!multi_part || done) {
-                /* we got a complete message, push it on the read queue */
-                r = rtnl_rqueue_make_room(rtnl);
+        for (struct nlmsghdr *hdr = nl->rbuffer; NLMSG_OK(hdr, len); hdr = NLMSG_NEXT(hdr, len)) {
+                _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+
+                r = parse_message_one(nl, group, hdr, &m);
                 if (r < 0)
                         return r;
+                if (r == 0)
+                        continue;
 
-                rtnl->rqueue[rtnl->rqueue_size++] = TAKE_PTR(first);
+                if (hdr->nlmsg_flags & NLM_F_MULTI) {
+                        if (hdr->nlmsg_type == NLMSG_DONE) {
+                                _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *existing = NULL;
 
-                if (multi_part && (i < rtnl->rqueue_partial_size)) {
-                        /* remove the message form the partial read queue */
-                        memmove(rtnl->rqueue_partial + i,rtnl->rqueue_partial + i + 1,
-                                sizeof(sd_netlink_message*) * (rtnl->rqueue_partial_size - i - 1));
-                        rtnl->rqueue_partial_size--;
-                }
+                                /* finished reading multi-part message */
+                                existing = hashmap_remove(nl->rqueue_partial_by_serial, UINT32_TO_PTR(hdr->nlmsg_seq));
 
-                return 1;
-        } else {
-                /* we only got a partial multi-part message, push it on the
-                   partial read queue */
-                if (i < rtnl->rqueue_partial_size)
-                        rtnl->rqueue_partial[i] = TAKE_PTR(first);
-                else {
-                        r = rtnl_rqueue_partial_make_room(rtnl);
+                                /* if we receive only NLMSG_DONE, put it into the receive queue. */
+                                r = netlink_queue_received_message(nl, existing ?: m);
+                                if (r < 0)
+                                        return r;
+
+                                done = true;
+                        } else {
+                                sd_netlink_message *existing;
+
+                                existing = hashmap_get(nl->rqueue_partial_by_serial, UINT32_TO_PTR(hdr->nlmsg_seq));
+                                if (existing) {
+                                        /* This is the continuation of the previously read messages.
+                                         * Let's append this message at the end. */
+                                        while (existing->next)
+                                                existing = existing->next;
+                                        existing->next = TAKE_PTR(m);
+                                } else {
+                                        /* This is the first message. Put it into the queue for partially
+                                         * received messages. */
+                                        r = netlink_queue_partially_received_message(nl, m);
+                                        if (r < 0)
+                                                return r;
+                                }
+                        }
+
+                } else {
+                        r = netlink_queue_received_message(nl, m);
                         if (r < 0)
                                 return r;
 
-                        rtnl->rqueue_partial[rtnl->rqueue_partial_size++] = TAKE_PTR(first);
+                        done = true;
                 }
-
-                return 0;
         }
+
+        if (len > 0)
+                log_debug("sd-netlink: discarding trailing %zu bytes of incoming message", len);
+
+        return done;
 }
diff --git a/src/libsystemd/sd-netlink/netlink-types-genl.c b/src/libsystemd/sd-netlink/netlink-types-genl.c
new file mode 100644
index 0000000..6fe9adc
--- /dev/null
+++ b/src/libsystemd/sd-netlink/netlink-types-genl.c
@@ -0,0 +1,251 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <linux/batman_adv.h>
+#include <linux/fou.h>
+#include <linux/genetlink.h>
+#include <linux/if.h>
+#include <linux/if_macsec.h>
+#include <linux/l2tp.h>
+#include <linux/nl80211.h>
+#include <linux/wireguard.h>
+
+#include "missing_network.h"
+#include "netlink-genl.h"
+#include "netlink-types-internal.h"
+
+/***************** genl ctrl type systems *****************/
+static const NLAPolicy genl_ctrl_mcast_group_policies[] = {
+        [CTRL_ATTR_MCAST_GRP_NAME]  = BUILD_POLICY(STRING),
+        [CTRL_ATTR_MCAST_GRP_ID]    = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(genl_ctrl_mcast_group);
+
+static const NLAPolicy genl_ctrl_ops_policies[] = {
+        [CTRL_ATTR_OP_ID]           = BUILD_POLICY(U32),
+        [CTRL_ATTR_OP_FLAGS]        = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(genl_ctrl_ops);
+
+static const NLAPolicy genl_ctrl_policies[] = {
+        [CTRL_ATTR_FAMILY_ID]    = BUILD_POLICY(U16),
+        [CTRL_ATTR_FAMILY_NAME]  = BUILD_POLICY(STRING),
+        [CTRL_ATTR_VERSION]      = BUILD_POLICY(U32),
+        [CTRL_ATTR_HDRSIZE]      = BUILD_POLICY(U32),
+        [CTRL_ATTR_MAXATTR]      = BUILD_POLICY(U32),
+        [CTRL_ATTR_OPS]          = BUILD_POLICY_NESTED(genl_ctrl_ops),
+        [CTRL_ATTR_MCAST_GROUPS] = BUILD_POLICY_NESTED(genl_ctrl_mcast_group),
+        /*
+        [CTRL_ATTR_POLICY]       = { .type = NETLINK_TYPE_NESTED, },
+        [CTRL_ATTR_OP_POLICY]    = { .type = NETLINK_TYPE_NESTED, }
+        */
+        [CTRL_ATTR_OP]           = BUILD_POLICY(U32),
+};
+
+/***************** genl batadv type systems *****************/
+static const NLAPolicy genl_batadv_policies[] = {
+        [BATADV_ATTR_VERSION]                       = BUILD_POLICY(STRING),
+        [BATADV_ATTR_ALGO_NAME]                     = BUILD_POLICY(STRING),
+        [BATADV_ATTR_MESH_IFINDEX]                  = BUILD_POLICY(U32),
+        [BATADV_ATTR_MESH_IFNAME]                   = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ),
+        [BATADV_ATTR_MESH_ADDRESS]                  = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_HARD_IFINDEX]                  = BUILD_POLICY(U32),
+        [BATADV_ATTR_HARD_IFNAME]                   = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ),
+        [BATADV_ATTR_HARD_ADDRESS]                  = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_ORIG_ADDRESS]                  = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_TPMETER_RESULT]                = BUILD_POLICY(U8),
+        [BATADV_ATTR_TPMETER_TEST_TIME]             = BUILD_POLICY(U32),
+        [BATADV_ATTR_TPMETER_BYTES]                 = BUILD_POLICY(U64),
+        [BATADV_ATTR_TPMETER_COOKIE]                = BUILD_POLICY(U32),
+        [BATADV_ATTR_PAD]                           = BUILD_POLICY(UNSPEC),
+        [BATADV_ATTR_ACTIVE]                        = BUILD_POLICY(FLAG),
+        [BATADV_ATTR_TT_ADDRESS]                    = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_TT_TTVN]                       = BUILD_POLICY(U8),
+        [BATADV_ATTR_TT_LAST_TTVN]                  = BUILD_POLICY(U8),
+        [BATADV_ATTR_TT_CRC32]                      = BUILD_POLICY(U32),
+        [BATADV_ATTR_TT_VID]                        = BUILD_POLICY(U16),
+        [BATADV_ATTR_TT_FLAGS]                      = BUILD_POLICY(U32),
+        [BATADV_ATTR_FLAG_BEST]                     = BUILD_POLICY(FLAG),
+        [BATADV_ATTR_LAST_SEEN_MSECS]               = BUILD_POLICY(U32),
+        [BATADV_ATTR_NEIGH_ADDRESS]                 = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_TQ]                            = BUILD_POLICY(U8),
+        [BATADV_ATTR_THROUGHPUT]                    = BUILD_POLICY(U32),
+        [BATADV_ATTR_BANDWIDTH_UP]                  = BUILD_POLICY(U32),
+        [BATADV_ATTR_BANDWIDTH_DOWN]                = BUILD_POLICY(U32),
+        [BATADV_ATTR_ROUTER]                        = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_BLA_OWN]                       = BUILD_POLICY(FLAG),
+        [BATADV_ATTR_BLA_ADDRESS]                   = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_BLA_VID]                       = BUILD_POLICY(U16),
+        [BATADV_ATTR_BLA_BACKBONE]                  = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_BLA_CRC]                       = BUILD_POLICY(U16),
+        [BATADV_ATTR_DAT_CACHE_IP4ADDRESS]          = BUILD_POLICY(U32),
+        [BATADV_ATTR_DAT_CACHE_HWADDRESS]           = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [BATADV_ATTR_DAT_CACHE_VID]                 = BUILD_POLICY(U16),
+        [BATADV_ATTR_MCAST_FLAGS]                   = BUILD_POLICY(U32),
+        [BATADV_ATTR_MCAST_FLAGS_PRIV]              = BUILD_POLICY(U32),
+        [BATADV_ATTR_VLANID]                        = BUILD_POLICY(U16),
+        [BATADV_ATTR_AGGREGATED_OGMS_ENABLED]       = BUILD_POLICY(U8),
+        [BATADV_ATTR_AP_ISOLATION_ENABLED]          = BUILD_POLICY(U8),
+        [BATADV_ATTR_ISOLATION_MARK]                = BUILD_POLICY(U32),
+        [BATADV_ATTR_ISOLATION_MASK]                = BUILD_POLICY(U32),
+        [BATADV_ATTR_BONDING_ENABLED]               = BUILD_POLICY(U8),
+        [BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED] = BUILD_POLICY(U8),
+        [BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED] = BUILD_POLICY(U8),
+        [BATADV_ATTR_FRAGMENTATION_ENABLED]         = BUILD_POLICY(U8),
+        [BATADV_ATTR_GW_BANDWIDTH_DOWN]             = BUILD_POLICY(U32),
+        [BATADV_ATTR_GW_BANDWIDTH_UP]               = BUILD_POLICY(U32),
+        [BATADV_ATTR_GW_MODE]                       = BUILD_POLICY(U8),
+        [BATADV_ATTR_GW_SEL_CLASS]                  = BUILD_POLICY(U32),
+        [BATADV_ATTR_HOP_PENALTY]                   = BUILD_POLICY(U8),
+        [BATADV_ATTR_LOG_LEVEL]                     = BUILD_POLICY(U32),
+        [BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED]  = BUILD_POLICY(U8),
+        [BATADV_ATTR_MULTICAST_FANOUT]              = BUILD_POLICY(U32),
+        [BATADV_ATTR_NETWORK_CODING_ENABLED]        = BUILD_POLICY(U8),
+        [BATADV_ATTR_ORIG_INTERVAL]                 = BUILD_POLICY(U32),
+        [BATADV_ATTR_ELP_INTERVAL]                  = BUILD_POLICY(U32),
+        [BATADV_ATTR_THROUGHPUT_OVERRIDE]           = BUILD_POLICY(U32),
+};
+
+/***************** genl fou type systems *****************/
+static const NLAPolicy genl_fou_policies[] = {
+        [FOU_ATTR_PORT]              = BUILD_POLICY(U16),
+        [FOU_ATTR_AF]                = BUILD_POLICY(U8),
+        [FOU_ATTR_IPPROTO]           = BUILD_POLICY(U8),
+        [FOU_ATTR_TYPE]              = BUILD_POLICY(U8),
+        [FOU_ATTR_REMCSUM_NOPARTIAL] = BUILD_POLICY(FLAG),
+        [FOU_ATTR_LOCAL_V4]          = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
+        [FOU_ATTR_PEER_V4]           = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
+        [FOU_ATTR_LOCAL_V6]          = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [FOU_ATTR_PEER_V6]           = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [FOU_ATTR_PEER_PORT]         = BUILD_POLICY(U16),
+        [FOU_ATTR_IFINDEX]           = BUILD_POLICY(U32),
+};
+
+/***************** genl l2tp type systems *****************/
+static const NLAPolicy genl_l2tp_policies[] = {
+        [L2TP_ATTR_PW_TYPE]           = BUILD_POLICY(U16),
+        [L2TP_ATTR_ENCAP_TYPE]        = BUILD_POLICY(U16),
+        [L2TP_ATTR_OFFSET]            = BUILD_POLICY(U16),
+        [L2TP_ATTR_DATA_SEQ]          = BUILD_POLICY(U16),
+        [L2TP_ATTR_L2SPEC_TYPE]       = BUILD_POLICY(U8),
+        [L2TP_ATTR_L2SPEC_LEN]        = BUILD_POLICY(U8),
+        [L2TP_ATTR_PROTO_VERSION]     = BUILD_POLICY(U8),
+        [L2TP_ATTR_IFNAME]            = BUILD_POLICY(STRING),
+        [L2TP_ATTR_CONN_ID]           = BUILD_POLICY(U32),
+        [L2TP_ATTR_PEER_CONN_ID]      = BUILD_POLICY(U32),
+        [L2TP_ATTR_SESSION_ID]        = BUILD_POLICY(U32),
+        [L2TP_ATTR_PEER_SESSION_ID]   = BUILD_POLICY(U32),
+        [L2TP_ATTR_UDP_CSUM]          = BUILD_POLICY(U8),
+        [L2TP_ATTR_VLAN_ID]           = BUILD_POLICY(U16),
+        [L2TP_ATTR_RECV_SEQ]          = BUILD_POLICY(U8),
+        [L2TP_ATTR_SEND_SEQ]          = BUILD_POLICY(U8),
+        [L2TP_ATTR_LNS_MODE]          = BUILD_POLICY(U8),
+        [L2TP_ATTR_USING_IPSEC]       = BUILD_POLICY(U8),
+        [L2TP_ATTR_FD]                = BUILD_POLICY(U32),
+        [L2TP_ATTR_IP_SADDR]          = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
+        [L2TP_ATTR_IP_DADDR]          = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
+        [L2TP_ATTR_UDP_SPORT]         = BUILD_POLICY(U16),
+        [L2TP_ATTR_UDP_DPORT]         = BUILD_POLICY(U16),
+        [L2TP_ATTR_IP6_SADDR]         = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [L2TP_ATTR_IP6_DADDR]         = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [L2TP_ATTR_UDP_ZERO_CSUM6_TX] = BUILD_POLICY(FLAG),
+        [L2TP_ATTR_UDP_ZERO_CSUM6_RX] = BUILD_POLICY(FLAG),
+};
+
+/***************** genl macsec type systems *****************/
+static const NLAPolicy genl_macsec_rxsc_policies[] = {
+        [MACSEC_RXSC_ATTR_SCI] = BUILD_POLICY(U64),
+};
+
+DEFINE_POLICY_SET(genl_macsec_rxsc);
+
+static const NLAPolicy genl_macsec_sa_policies[] = {
+        [MACSEC_SA_ATTR_AN]     = BUILD_POLICY(U8),
+        [MACSEC_SA_ATTR_ACTIVE] = BUILD_POLICY(U8),
+        [MACSEC_SA_ATTR_PN]     = BUILD_POLICY(U32),
+        [MACSEC_SA_ATTR_KEYID]  = BUILD_POLICY_WITH_SIZE(BINARY, MACSEC_KEYID_LEN),
+        [MACSEC_SA_ATTR_KEY]    = BUILD_POLICY_WITH_SIZE(BINARY, MACSEC_MAX_KEY_LEN),
+};
+
+DEFINE_POLICY_SET(genl_macsec_sa);
+
+static const NLAPolicy genl_macsec_policies[] = {
+        [MACSEC_ATTR_IFINDEX]     = BUILD_POLICY(U32),
+        [MACSEC_ATTR_RXSC_CONFIG] = BUILD_POLICY_NESTED(genl_macsec_rxsc),
+        [MACSEC_ATTR_SA_CONFIG]   = BUILD_POLICY_NESTED(genl_macsec_sa),
+};
+
+/***************** genl NetLabel type systems *****************/
+static const NLAPolicy genl_netlabel_policies[] = {
+        [NLBL_UNLABEL_A_IPV4ADDR] = BUILD_POLICY(IN_ADDR),
+        [NLBL_UNLABEL_A_IPV4MASK] = BUILD_POLICY(IN_ADDR),
+        [NLBL_UNLABEL_A_IPV6ADDR] = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [NLBL_UNLABEL_A_IPV6MASK] = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [NLBL_UNLABEL_A_IFACE]    = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ-1),
+        [NLBL_UNLABEL_A_SECCTX]   = BUILD_POLICY(STRING),
+};
+
+/***************** genl nl80211 type systems *****************/
+static const NLAPolicy genl_nl80211_policies[] = {
+        [NL80211_ATTR_WIPHY]       = BUILD_POLICY(U32),
+        [NL80211_ATTR_WIPHY_NAME]  = BUILD_POLICY(STRING),
+        [NL80211_ATTR_IFINDEX]     = BUILD_POLICY(U32),
+        [NL80211_ATTR_IFNAME]      = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ-1),
+        [NL80211_ATTR_IFTYPE]      = BUILD_POLICY(U32),
+        [NL80211_ATTR_MAC]         = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [NL80211_ATTR_SSID]        = BUILD_POLICY_WITH_SIZE(BINARY, IEEE80211_MAX_SSID_LEN),
+        [NL80211_ATTR_STATUS_CODE] = BUILD_POLICY(U16),
+        [NL80211_ATTR_4ADDR]       = BUILD_POLICY(U8),
+};
+
+/***************** genl wireguard type systems *****************/
+static const NLAPolicy genl_wireguard_allowedip_policies[] = {
+        [WGALLOWEDIP_A_FAMILY]    = BUILD_POLICY(U16),
+        [WGALLOWEDIP_A_IPADDR]    = BUILD_POLICY(IN_ADDR),
+        [WGALLOWEDIP_A_CIDR_MASK] = BUILD_POLICY(U8),
+};
+
+DEFINE_POLICY_SET(genl_wireguard_allowedip);
+
+static const NLAPolicy genl_wireguard_peer_policies[] = {
+        [WGPEER_A_PUBLIC_KEY]                    = BUILD_POLICY_WITH_SIZE(BINARY, WG_KEY_LEN),
+        [WGPEER_A_FLAGS]                         = BUILD_POLICY(U32),
+        [WGPEER_A_PRESHARED_KEY]                 = BUILD_POLICY_WITH_SIZE(BINARY, WG_KEY_LEN),
+        [WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL] = BUILD_POLICY(U16),
+        [WGPEER_A_ENDPOINT]                      = BUILD_POLICY(SOCKADDR),
+        [WGPEER_A_ALLOWEDIPS]                    = BUILD_POLICY_NESTED(genl_wireguard_allowedip),
+};
+
+DEFINE_POLICY_SET(genl_wireguard_peer);
+
+static const NLAPolicy genl_wireguard_policies[] = {
+        [WGDEVICE_A_IFINDEX]     = BUILD_POLICY(U32),
+        [WGDEVICE_A_IFNAME]      = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ-1),
+        [WGDEVICE_A_FLAGS]       = BUILD_POLICY(U32),
+        [WGDEVICE_A_PRIVATE_KEY] = BUILD_POLICY_WITH_SIZE(BINARY, WG_KEY_LEN),
+        [WGDEVICE_A_LISTEN_PORT] = BUILD_POLICY(U16),
+        [WGDEVICE_A_FWMARK]      = BUILD_POLICY(U32),
+        [WGDEVICE_A_PEERS]       = BUILD_POLICY_NESTED(genl_wireguard_peer),
+};
+
+/***************** genl families *****************/
+static const NLAPolicySetUnionElement genl_policy_set_union_elements[] = {
+        BUILD_UNION_ELEMENT_BY_STRING(CTRL_GENL_NAME,               genl_ctrl),
+        BUILD_UNION_ELEMENT_BY_STRING(BATADV_NL_NAME,               genl_batadv),
+        BUILD_UNION_ELEMENT_BY_STRING(FOU_GENL_NAME,                genl_fou),
+        BUILD_UNION_ELEMENT_BY_STRING(L2TP_GENL_NAME,               genl_l2tp),
+        BUILD_UNION_ELEMENT_BY_STRING(MACSEC_GENL_NAME,             genl_macsec),
+        BUILD_UNION_ELEMENT_BY_STRING(NETLBL_NLTYPE_UNLABELED_NAME, genl_netlabel),
+        BUILD_UNION_ELEMENT_BY_STRING(NL80211_GENL_NAME,            genl_nl80211),
+        BUILD_UNION_ELEMENT_BY_STRING(WG_GENL_NAME,                 genl_wireguard),
+};
+
+/* This is the root type system union, so match_attribute is not necessary. */
+DEFINE_POLICY_SET_UNION(genl, 0);
+
+const NLAPolicySet *genl_get_policy_set_by_name(const char *name) {
+        return policy_set_union_get_policy_set_by_string(&genl_policy_set_union, name);
+}
diff --git a/src/libsystemd/sd-netlink/netlink-types-internal.h b/src/libsystemd/sd-netlink/netlink-types-internal.h
new file mode 100644
index 0000000..1412514
--- /dev/null
+++ b/src/libsystemd/sd-netlink/netlink-types-internal.h
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "macro.h"
+#include "netlink-types.h"
+
+/* C.f. see 'struct nla_policy' at include/net/netlink.h. */
+struct NLAPolicy {
+        NLAType type;
+        size_t size;
+        union {
+                const NLAPolicySet *policy_set;
+                const NLAPolicySetUnion *policy_set_union;
+        };
+};
+
+struct NLAPolicySet {
+        uint16_t count;
+        const NLAPolicy *policies;
+};
+
+typedef struct NLAPolicySetUnionElement {
+        union {
+                int family;          /* used by NETLINK_TYPE_NESTED_UNION_BY_FAMILY */
+                const char *string;  /* used by NETLINK_TYPE_NESTED_UNION_BY_STRING */
+        };
+        NLAPolicySet policy_set;
+} NLAPolicySetUnionElement;
+
+struct NLAPolicySetUnion {
+        size_t count;
+        const NLAPolicySetUnionElement *elements;
+        uint16_t match_attribute; /* used by NETLINK_TYPE_NESTED_UNION_BY_STRING */
+};
+
+#define BUILD_POLICY_WITH_SIZE(t, n)            \
+        { .type = NETLINK_TYPE_##t, .size = n }
+#define BUILD_POLICY(t)                         \
+        BUILD_POLICY_WITH_SIZE(t, 0)
+#define BUILD_POLICY_NESTED_WITH_SIZE(name, n)                          \
+        { .type = NETLINK_TYPE_NESTED, .size = n, .policy_set = &name##_policy_set }
+#define BUILD_POLICY_NESTED(name)               \
+        BUILD_POLICY_NESTED_WITH_SIZE(name, 0)
+#define _BUILD_POLICY_NESTED_UNION(name, by)                            \
+        { .type = NETLINK_TYPE_NESTED_UNION_BY_##by, .policy_set_union = &name##_policy_set_union }
+#define BUILD_POLICY_NESTED_UNION_BY_STRING(name)       \
+        _BUILD_POLICY_NESTED_UNION(name, STRING)
+#define BUILD_POLICY_NESTED_UNION_BY_FAMILY(name)       \
+        _BUILD_POLICY_NESTED_UNION(name, FAMILY)
+
+#define _BUILD_POLICY_SET(name)                                         \
+        { .count = ELEMENTSOF(name##_policies), .policies = name##_policies }
+#define DEFINE_POLICY_SET(name)                                         \
+        static const NLAPolicySet name##_policy_set = _BUILD_POLICY_SET(name)
+
+# define BUILD_UNION_ELEMENT_BY_STRING(s, name)                 \
+        { .string = s, .policy_set = _BUILD_POLICY_SET(name) }
+# define BUILD_UNION_ELEMENT_BY_FAMILY(f, name)                 \
+        { .family = f, .policy_set = _BUILD_POLICY_SET(name) }
+
+#define DEFINE_POLICY_SET_UNION(name, attr)                             \
+        static const NLAPolicySetUnion name##_policy_set_union = {      \
+                .count = ELEMENTSOF(name##_policy_set_union_elements),  \
+                .elements = name##_policy_set_union_elements,           \
+                .match_attribute = attr,                                \
+        }
diff --git a/src/libsystemd/sd-netlink/netlink-types-nfnl.c b/src/libsystemd/sd-netlink/netlink-types-nfnl.c
new file mode 100644
index 0000000..8ef4d45
--- /dev/null
+++ b/src/libsystemd/sd-netlink/netlink-types-nfnl.c
@@ -0,0 +1,194 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/if.h>
+#include <linux/netfilter/nf_tables.h>
+#include <linux/netfilter/nfnetlink.h>
+
+#include "netlink-types-internal.h"
+
+static const NLAPolicy nfnl_nft_table_policies[] = {
+        [NFTA_TABLE_NAME]  = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_TABLE_FLAGS] = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(nfnl_nft_table);
+
+static const NLAPolicy nfnl_nft_chain_hook_policies[] = {
+        [NFTA_HOOK_HOOKNUM]  = BUILD_POLICY(U32),
+        [NFTA_HOOK_PRIORITY] = BUILD_POLICY(U32),
+        [NFTA_HOOK_DEV]      = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ - 1),
+};
+
+DEFINE_POLICY_SET(nfnl_nft_chain_hook);
+
+static const NLAPolicy nfnl_nft_chain_policies[] = {
+        [NFTA_CHAIN_TABLE] = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_CHAIN_NAME]  = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_CHAIN_HOOK]  = BUILD_POLICY_NESTED(nfnl_nft_chain_hook),
+        [NFTA_CHAIN_TYPE]  = BUILD_POLICY_WITH_SIZE(STRING, 16),
+        [NFTA_CHAIN_FLAGS] = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(nfnl_nft_chain);
+
+static const NLAPolicy nfnl_nft_expr_meta_policies[] = {
+        [NFTA_META_DREG] = BUILD_POLICY(U32),
+        [NFTA_META_KEY]  = BUILD_POLICY(U32),
+        [NFTA_META_SREG] = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy nfnl_nft_expr_payload_policies[] = {
+        [NFTA_PAYLOAD_DREG]   = BUILD_POLICY(U32),
+        [NFTA_PAYLOAD_BASE]   = BUILD_POLICY(U32),
+        [NFTA_PAYLOAD_OFFSET] = BUILD_POLICY(U32),
+        [NFTA_PAYLOAD_LEN]    = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy nfnl_nft_expr_nat_policies[] = {
+        [NFTA_NAT_TYPE]          = BUILD_POLICY(U32),
+        [NFTA_NAT_FAMILY]        = BUILD_POLICY(U32),
+        [NFTA_NAT_REG_ADDR_MIN]  = BUILD_POLICY(U32),
+        [NFTA_NAT_REG_ADDR_MAX]  = BUILD_POLICY(U32),
+        [NFTA_NAT_REG_PROTO_MIN] = BUILD_POLICY(U32),
+        [NFTA_NAT_REG_PROTO_MAX] = BUILD_POLICY(U32),
+        [NFTA_NAT_FLAGS]         = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy nfnl_nft_data_policies[] = {
+        [NFTA_DATA_VALUE] = { .type = NETLINK_TYPE_BINARY },
+};
+
+DEFINE_POLICY_SET(nfnl_nft_data);
+
+static const NLAPolicy nfnl_nft_expr_bitwise_policies[] = {
+        [NFTA_BITWISE_SREG] = BUILD_POLICY(U32),
+        [NFTA_BITWISE_DREG] = BUILD_POLICY(U32),
+        [NFTA_BITWISE_LEN]  = BUILD_POLICY(U32),
+        [NFTA_BITWISE_MASK] = BUILD_POLICY_NESTED(nfnl_nft_data),
+        [NFTA_BITWISE_XOR]  = BUILD_POLICY_NESTED(nfnl_nft_data),
+};
+
+static const NLAPolicy nfnl_nft_expr_cmp_policies[] = {
+        [NFTA_CMP_SREG] = BUILD_POLICY(U32),
+        [NFTA_CMP_OP]   = BUILD_POLICY(U32),
+        [NFTA_CMP_DATA] = BUILD_POLICY_NESTED(nfnl_nft_data),
+};
+
+static const NLAPolicy nfnl_nft_expr_fib_policies[] = {
+        [NFTA_FIB_DREG]   = BUILD_POLICY(U32),
+        [NFTA_FIB_RESULT] = BUILD_POLICY(U32),
+        [NFTA_FIB_FLAGS]  = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy nfnl_nft_expr_lookup_policies[] = {
+        [NFTA_LOOKUP_SET]   = { .type = NETLINK_TYPE_STRING },
+        [NFTA_LOOKUP_SREG]  = BUILD_POLICY(U32),
+        [NFTA_LOOKUP_DREG]  = BUILD_POLICY(U32),
+        [NFTA_LOOKUP_FLAGS] = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy nfnl_nft_expr_masq_policies[] = {
+        [NFTA_MASQ_FLAGS]         = BUILD_POLICY(U32),
+        [NFTA_MASQ_REG_PROTO_MIN] = BUILD_POLICY(U32),
+        [NFTA_MASQ_REG_PROTO_MAX] = BUILD_POLICY(U32),
+};
+
+static const NLAPolicySetUnionElement nfnl_expr_data_policy_set_union_elements[] = {
+        BUILD_UNION_ELEMENT_BY_STRING("bitwise", nfnl_nft_expr_bitwise),
+        BUILD_UNION_ELEMENT_BY_STRING("cmp",     nfnl_nft_expr_cmp),
+        BUILD_UNION_ELEMENT_BY_STRING("fib",     nfnl_nft_expr_fib),
+        BUILD_UNION_ELEMENT_BY_STRING("lookup",  nfnl_nft_expr_lookup),
+        BUILD_UNION_ELEMENT_BY_STRING("masq",    nfnl_nft_expr_masq),
+        BUILD_UNION_ELEMENT_BY_STRING("meta",    nfnl_nft_expr_meta),
+        BUILD_UNION_ELEMENT_BY_STRING("nat",     nfnl_nft_expr_nat),
+        BUILD_UNION_ELEMENT_BY_STRING("payload", nfnl_nft_expr_payload),
+};
+
+DEFINE_POLICY_SET_UNION(nfnl_expr_data, NFTA_EXPR_NAME);
+
+static const NLAPolicy nfnl_nft_rule_expr_policies[] = {
+        [NFTA_EXPR_NAME] = BUILD_POLICY_WITH_SIZE(STRING, 16),
+        [NFTA_EXPR_DATA] = BUILD_POLICY_NESTED_UNION_BY_STRING(nfnl_expr_data),
+};
+
+DEFINE_POLICY_SET(nfnl_nft_rule_expr);
+
+static const NLAPolicy nfnl_nft_rule_policies[] = {
+        [NFTA_RULE_TABLE]       = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_RULE_CHAIN]       = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_RULE_EXPRESSIONS] = BUILD_POLICY_NESTED(nfnl_nft_rule_expr),
+};
+
+DEFINE_POLICY_SET(nfnl_nft_rule);
+
+static const NLAPolicy nfnl_nft_set_policies[] = {
+        [NFTA_SET_TABLE]      = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_SET_NAME]       = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_SET_FLAGS]      = BUILD_POLICY(U32),
+        [NFTA_SET_KEY_TYPE]   = BUILD_POLICY(U32),
+        [NFTA_SET_KEY_LEN]    = BUILD_POLICY(U32),
+        [NFTA_SET_DATA_TYPE]  = BUILD_POLICY(U32),
+        [NFTA_SET_DATA_LEN]   = BUILD_POLICY(U32),
+        [NFTA_SET_POLICY]     = BUILD_POLICY(U32),
+        [NFTA_SET_ID]         = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(nfnl_nft_set);
+
+static const NLAPolicy nfnl_nft_setelem_policies[] = {
+        [NFTA_SET_ELEM_KEY]   = BUILD_POLICY_NESTED(nfnl_nft_data),
+        [NFTA_SET_ELEM_DATA]  = BUILD_POLICY_NESTED(nfnl_nft_data),
+        [NFTA_SET_ELEM_FLAGS] = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(nfnl_nft_setelem);
+
+static const NLAPolicy nfnl_nft_setelem_list_policies[] = {
+        [NFTA_SET_ELEM_LIST_TABLE]    = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_SET_ELEM_LIST_SET]      = BUILD_POLICY_WITH_SIZE(STRING, NFT_TABLE_MAXNAMELEN - 1),
+        [NFTA_SET_ELEM_LIST_ELEMENTS] = BUILD_POLICY_NESTED(nfnl_nft_setelem),
+};
+
+DEFINE_POLICY_SET(nfnl_nft_setelem_list);
+
+static const NLAPolicy nfnl_subsys_nft_policies[] = {
+        [NFT_MSG_DELTABLE]   = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_nft_table,        sizeof(struct nfgenmsg)),
+        [NFT_MSG_NEWTABLE]   = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_nft_table,        sizeof(struct nfgenmsg)),
+        [NFT_MSG_NEWCHAIN]   = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_nft_chain,        sizeof(struct nfgenmsg)),
+        [NFT_MSG_NEWRULE]    = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_nft_rule,         sizeof(struct nfgenmsg)),
+        [NFT_MSG_NEWSET]     = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_nft_set,          sizeof(struct nfgenmsg)),
+        [NFT_MSG_NEWSETELEM] = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_nft_setelem_list, sizeof(struct nfgenmsg)),
+        [NFT_MSG_DELSETELEM] = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_nft_setelem_list, sizeof(struct nfgenmsg)),
+};
+
+DEFINE_POLICY_SET(nfnl_subsys_nft);
+
+static const NLAPolicy nfnl_msg_batch_policies[] = {
+        [NFNL_BATCH_GENID] = BUILD_POLICY(U32)
+};
+
+DEFINE_POLICY_SET(nfnl_msg_batch);
+
+static const NLAPolicy nfnl_subsys_none_policies[] = {
+        [NFNL_MSG_BATCH_BEGIN] = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_msg_batch, sizeof(struct nfgenmsg)),
+        [NFNL_MSG_BATCH_END]   = BUILD_POLICY_NESTED_WITH_SIZE(nfnl_msg_batch, sizeof(struct nfgenmsg)),
+};
+
+DEFINE_POLICY_SET(nfnl_subsys_none);
+
+static const NLAPolicy nfnl_policies[] = {
+        [NFNL_SUBSYS_NONE]     = BUILD_POLICY_NESTED(nfnl_subsys_none),
+        [NFNL_SUBSYS_NFTABLES] = BUILD_POLICY_NESTED(nfnl_subsys_nft),
+};
+
+DEFINE_POLICY_SET(nfnl);
+
+const NLAPolicy *nfnl_get_policy(uint16_t nlmsg_type) {
+        const NLAPolicySet *subsys;
+
+        subsys = policy_set_get_policy_set(&nfnl_policy_set, NFNL_SUBSYS_ID(nlmsg_type));
+        if (!subsys)
+                return NULL;
+
+        return policy_set_get_policy(subsys, NFNL_MSG_TYPE(nlmsg_type));
+}
diff --git a/src/libsystemd/sd-netlink/netlink-types-rtnl.c b/src/libsystemd/sd-netlink/netlink-types-rtnl.c
new file mode 100644
index 0000000..919512d
--- /dev/null
+++ b/src/libsystemd/sd-netlink/netlink-types-rtnl.c
@@ -0,0 +1,1228 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <linux/batman_adv.h>
+#include <linux/can/netlink.h>
+#include <linux/can/vxcan.h>
+#include <linux/cfm_bridge.h>
+#include <linux/fib_rules.h>
+#include <linux/fou.h>
+#include <linux/if.h>
+#include <linux/if_addr.h>
+#include <linux/if_addrlabel.h>
+#include <linux/if_bridge.h>
+#include <linux/if_link.h>
+#include <linux/if_macsec.h>
+#include <linux/if_tunnel.h>
+#include <linux/ip.h>
+#include <linux/l2tp.h>
+#include <linux/netlink.h>
+#include <linux/nexthop.h>
+#include <linux/nl80211.h>
+#include <linux/pkt_sched.h>
+#include <linux/rtnetlink.h>
+#include <linux/veth.h>
+#include <linux/wireguard.h>
+
+#include "missing_network.h"
+#include "netlink-types-internal.h"
+
+enum {
+        BOND_ARP_TARGETS_0,
+        BOND_ARP_TARGETS_1,
+        BOND_ARP_TARGETS_2,
+        BOND_ARP_TARGETS_3,
+        BOND_ARP_TARGETS_4,
+        BOND_ARP_TARGETS_5,
+        BOND_ARP_TARGETS_6,
+        BOND_ARP_TARGETS_7,
+        BOND_ARP_TARGETS_8,
+        BOND_ARP_TARGETS_9,
+        BOND_ARP_TARGETS_10,
+        BOND_ARP_TARGETS_11,
+        BOND_ARP_TARGETS_12,
+        BOND_ARP_TARGETS_13,
+        BOND_ARP_TARGETS_14,
+        BOND_ARP_TARGETS_15,
+        _BOND_ARP_TARGETS_MAX,
+};
+
+assert_cc(_BOND_ARP_TARGETS_MAX == BOND_MAX_ARP_TARGETS);
+
+static const NLAPolicySet rtnl_link_policy_set;
+
+static const NLAPolicy rtnl_link_info_data_bareudp_policies[] = {
+        [IFLA_BAREUDP_PORT]            = BUILD_POLICY(U16),
+        [IFLA_BAREUDP_ETHERTYPE]       = BUILD_POLICY(U16),
+        [IFLA_BAREUDP_SRCPORT_MIN]     = BUILD_POLICY(U16),
+        [IFLA_BAREUDP_MULTIPROTO_MODE] = BUILD_POLICY(FLAG),
+};
+
+static const NLAPolicy rtnl_link_info_data_batadv_policies[] = {
+        [IFLA_BATADV_ALGO_NAME] = BUILD_POLICY_WITH_SIZE(STRING, 20),
+};
+
+static const NLAPolicy rtnl_bond_arp_ip_target_policies[] = {
+        [BOND_ARP_TARGETS_0]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_1]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_2]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_3]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_4]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_5]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_6]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_7]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_8]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_9]        = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_10]       = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_11]       = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_12]       = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_13]       = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_14]       = BUILD_POLICY(U32),
+        [BOND_ARP_TARGETS_15]       = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bond_arp_ip_target);
+
+static const NLAPolicy rtnl_bond_ad_info_policies[] = {
+        [IFLA_BOND_AD_INFO_AGGREGATOR]  = BUILD_POLICY(U16),
+        [IFLA_BOND_AD_INFO_NUM_PORTS]   = BUILD_POLICY(U16),
+        [IFLA_BOND_AD_INFO_ACTOR_KEY]   = BUILD_POLICY(U16),
+        [IFLA_BOND_AD_INFO_PARTNER_KEY] = BUILD_POLICY(U16),
+        [IFLA_BOND_AD_INFO_PARTNER_MAC] = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+};
+
+DEFINE_POLICY_SET(rtnl_bond_ad_info);
+
+static const NLAPolicy rtnl_link_info_data_bond_policies[] = {
+        [IFLA_BOND_MODE]                = BUILD_POLICY(U8),
+        [IFLA_BOND_ACTIVE_SLAVE]        = BUILD_POLICY(U32),
+        [IFLA_BOND_MIIMON]              = BUILD_POLICY(U32),
+        [IFLA_BOND_UPDELAY]             = BUILD_POLICY(U32),
+        [IFLA_BOND_DOWNDELAY]           = BUILD_POLICY(U32),
+        [IFLA_BOND_USE_CARRIER]         = BUILD_POLICY(U8),
+        [IFLA_BOND_ARP_INTERVAL]        = BUILD_POLICY(U32),
+        [IFLA_BOND_ARP_IP_TARGET]       = BUILD_POLICY_NESTED(rtnl_bond_arp_ip_target),
+        [IFLA_BOND_ARP_VALIDATE]        = BUILD_POLICY(U32),
+        [IFLA_BOND_ARP_ALL_TARGETS]     = BUILD_POLICY(U32),
+        [IFLA_BOND_PRIMARY]             = BUILD_POLICY(U32),
+        [IFLA_BOND_PRIMARY_RESELECT]    = BUILD_POLICY(U8),
+        [IFLA_BOND_FAIL_OVER_MAC]       = BUILD_POLICY(U8),
+        [IFLA_BOND_XMIT_HASH_POLICY]    = BUILD_POLICY(U8),
+        [IFLA_BOND_RESEND_IGMP]         = BUILD_POLICY(U32),
+        [IFLA_BOND_NUM_PEER_NOTIF]      = BUILD_POLICY(U8),
+        [IFLA_BOND_ALL_SLAVES_ACTIVE]   = BUILD_POLICY(U8),
+        [IFLA_BOND_MIN_LINKS]           = BUILD_POLICY(U32),
+        [IFLA_BOND_LP_INTERVAL]         = BUILD_POLICY(U32),
+        [IFLA_BOND_PACKETS_PER_SLAVE]   = BUILD_POLICY(U32),
+        [IFLA_BOND_AD_LACP_RATE]        = BUILD_POLICY(U8),
+        [IFLA_BOND_AD_SELECT]           = BUILD_POLICY(U8),
+        [IFLA_BOND_AD_INFO]             = BUILD_POLICY_NESTED(rtnl_bond_ad_info),
+        [IFLA_BOND_AD_ACTOR_SYS_PRIO]   = BUILD_POLICY(U16),
+        [IFLA_BOND_AD_USER_PORT_KEY]    = BUILD_POLICY(U16),
+        [IFLA_BOND_AD_ACTOR_SYSTEM]     = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [IFLA_BOND_TLB_DYNAMIC_LB]      = BUILD_POLICY(U8),
+        [IFLA_BOND_PEER_NOTIF_DELAY]    = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_link_info_data_bridge_policies[] = {
+        [IFLA_BR_FORWARD_DELAY]              = BUILD_POLICY(U32),
+        [IFLA_BR_HELLO_TIME]                 = BUILD_POLICY(U32),
+        [IFLA_BR_MAX_AGE]                    = BUILD_POLICY(U32),
+        [IFLA_BR_AGEING_TIME]                = BUILD_POLICY(U32),
+        [IFLA_BR_STP_STATE]                  = BUILD_POLICY(U32),
+        [IFLA_BR_PRIORITY]                   = BUILD_POLICY(U16),
+        [IFLA_BR_VLAN_FILTERING]             = BUILD_POLICY(U8),
+        [IFLA_BR_VLAN_PROTOCOL]              = BUILD_POLICY(U16),
+        [IFLA_BR_GROUP_FWD_MASK]             = BUILD_POLICY(U16),
+        [IFLA_BR_ROOT_ID]                    = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_bridge_id)),
+        [IFLA_BR_BRIDGE_ID]                  = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_bridge_id)),
+        [IFLA_BR_ROOT_PORT]                  = BUILD_POLICY(U16),
+        [IFLA_BR_ROOT_PATH_COST]             = BUILD_POLICY(U32),
+        [IFLA_BR_TOPOLOGY_CHANGE]            = BUILD_POLICY(U8),
+        [IFLA_BR_TOPOLOGY_CHANGE_DETECTED]   = BUILD_POLICY(U8),
+        [IFLA_BR_HELLO_TIMER]                = BUILD_POLICY(U64),
+        [IFLA_BR_TCN_TIMER]                  = BUILD_POLICY(U64),
+        [IFLA_BR_TOPOLOGY_CHANGE_TIMER]      = BUILD_POLICY(U64),
+        [IFLA_BR_GC_TIMER]                   = BUILD_POLICY(U64),
+        [IFLA_BR_GROUP_ADDR]                 = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [IFLA_BR_FDB_FLUSH]                  = BUILD_POLICY(FLAG),
+        [IFLA_BR_MCAST_ROUTER]               = BUILD_POLICY(U8),
+        [IFLA_BR_MCAST_SNOOPING]             = BUILD_POLICY(U8),
+        [IFLA_BR_MCAST_QUERY_USE_IFADDR]     = BUILD_POLICY(U8),
+        [IFLA_BR_MCAST_QUERIER]              = BUILD_POLICY(U8),
+        [IFLA_BR_MCAST_HASH_ELASTICITY]      = BUILD_POLICY(U32),
+        [IFLA_BR_MCAST_HASH_MAX]             = BUILD_POLICY(U32),
+        [IFLA_BR_MCAST_LAST_MEMBER_CNT]      = BUILD_POLICY(U32),
+        [IFLA_BR_MCAST_STARTUP_QUERY_CNT]    = BUILD_POLICY(U32),
+        [IFLA_BR_MCAST_LAST_MEMBER_INTVL]    = BUILD_POLICY(U64),
+        [IFLA_BR_MCAST_MEMBERSHIP_INTVL]     = BUILD_POLICY(U64),
+        [IFLA_BR_MCAST_QUERIER_INTVL]        = BUILD_POLICY(U64),
+        [IFLA_BR_MCAST_QUERY_INTVL]          = BUILD_POLICY(U64),
+        [IFLA_BR_MCAST_QUERY_RESPONSE_INTVL] = BUILD_POLICY(U64),
+        [IFLA_BR_MCAST_STARTUP_QUERY_INTVL]  = BUILD_POLICY(U64),
+        [IFLA_BR_NF_CALL_IPTABLES]           = BUILD_POLICY(U8),
+        [IFLA_BR_NF_CALL_IP6TABLES]          = BUILD_POLICY(U8),
+        [IFLA_BR_NF_CALL_ARPTABLES]          = BUILD_POLICY(U8),
+        [IFLA_BR_VLAN_DEFAULT_PVID]          = BUILD_POLICY(U16),
+        [IFLA_BR_VLAN_STATS_ENABLED]         = BUILD_POLICY(U8),
+        [IFLA_BR_MCAST_STATS_ENABLED]        = BUILD_POLICY(U8),
+        [IFLA_BR_MCAST_IGMP_VERSION]         = BUILD_POLICY(U8),
+        [IFLA_BR_MCAST_MLD_VERSION]          = BUILD_POLICY(U8),
+        [IFLA_BR_VLAN_STATS_PER_PORT]        = BUILD_POLICY(U8),
+        [IFLA_BR_MULTI_BOOLOPT]              = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct br_boolopt_multi)),
+};
+
+static const NLAPolicy rtnl_link_info_data_can_policies[] = {
+        [IFLA_CAN_BITTIMING]            = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct can_bittiming)),
+        [IFLA_CAN_BITTIMING_CONST]      = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct can_bittiming_const)),
+        [IFLA_CAN_CLOCK]                = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct can_clock)),
+        [IFLA_CAN_STATE]                = BUILD_POLICY(U32),
+        [IFLA_CAN_CTRLMODE]             = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct can_ctrlmode)),
+        [IFLA_CAN_RESTART_MS]           = BUILD_POLICY(U32),
+        [IFLA_CAN_RESTART]              = BUILD_POLICY(U32),
+        [IFLA_CAN_BERR_COUNTER]         = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct can_berr_counter)),
+        [IFLA_CAN_DATA_BITTIMING]       = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct can_bittiming)),
+        [IFLA_CAN_DATA_BITTIMING_CONST] = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct can_bittiming_const)),
+        [IFLA_CAN_TERMINATION]          = BUILD_POLICY(U16),
+        [IFLA_CAN_TERMINATION_CONST]    = BUILD_POLICY(BINARY), /* size = termination_const_cnt * sizeof(u16) */
+        [IFLA_CAN_BITRATE_CONST]        = BUILD_POLICY(BINARY), /* size = bitrate_const_cnt * sizeof(u32) */
+        [IFLA_CAN_DATA_BITRATE_CONST]   = BUILD_POLICY(BINARY), /* size = data_bitrate_const_cnt * sizeof(u32) */
+        [IFLA_CAN_BITRATE_MAX]          = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_link_info_data_geneve_policies[] = {
+        [IFLA_GENEVE_ID]                = BUILD_POLICY(U32),
+        [IFLA_GENEVE_REMOTE]            = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
+        [IFLA_GENEVE_TTL]               = BUILD_POLICY(U8),
+        [IFLA_GENEVE_TOS]               = BUILD_POLICY(U8),
+        [IFLA_GENEVE_PORT]              = BUILD_POLICY(U16),
+        [IFLA_GENEVE_COLLECT_METADATA]  = BUILD_POLICY(FLAG),
+        [IFLA_GENEVE_REMOTE6]           = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [IFLA_GENEVE_UDP_CSUM]          = BUILD_POLICY(U8),
+        [IFLA_GENEVE_UDP_ZERO_CSUM6_TX] = BUILD_POLICY(U8),
+        [IFLA_GENEVE_UDP_ZERO_CSUM6_RX] = BUILD_POLICY(U8),
+        [IFLA_GENEVE_LABEL]             = BUILD_POLICY(U32),
+        [IFLA_GENEVE_TTL_INHERIT]       = BUILD_POLICY(U8),
+        [IFLA_GENEVE_DF]                = BUILD_POLICY(U8),
+};
+
+static const NLAPolicy rtnl_link_info_data_gre_policies[] = {
+        [IFLA_GRE_LINK]             = BUILD_POLICY(U32),
+        [IFLA_GRE_IFLAGS]           = BUILD_POLICY(U16),
+        [IFLA_GRE_OFLAGS]           = BUILD_POLICY(U16),
+        [IFLA_GRE_IKEY]             = BUILD_POLICY(U32),
+        [IFLA_GRE_OKEY]             = BUILD_POLICY(U32),
+        [IFLA_GRE_LOCAL]            = BUILD_POLICY(IN_ADDR),
+        [IFLA_GRE_REMOTE]           = BUILD_POLICY(IN_ADDR),
+        [IFLA_GRE_TTL]              = BUILD_POLICY(U8),
+        [IFLA_GRE_TOS]              = BUILD_POLICY(U8),
+        [IFLA_GRE_PMTUDISC]         = BUILD_POLICY(U8),
+        [IFLA_GRE_ENCAP_LIMIT]      = BUILD_POLICY(U8),
+        [IFLA_GRE_FLOWINFO]         = BUILD_POLICY(U32),
+        [IFLA_GRE_FLAGS]            = BUILD_POLICY(U32),
+        [IFLA_GRE_ENCAP_TYPE]       = BUILD_POLICY(U16),
+        [IFLA_GRE_ENCAP_FLAGS]      = BUILD_POLICY(U16),
+        [IFLA_GRE_ENCAP_SPORT]      = BUILD_POLICY(U16),
+        [IFLA_GRE_ENCAP_DPORT]      = BUILD_POLICY(U16),
+        [IFLA_GRE_COLLECT_METADATA] = BUILD_POLICY(FLAG),
+        [IFLA_GRE_IGNORE_DF]        = BUILD_POLICY(U8),
+        [IFLA_GRE_FWMARK]           = BUILD_POLICY(U32),
+        [IFLA_GRE_ERSPAN_INDEX]     = BUILD_POLICY(U32),
+        [IFLA_GRE_ERSPAN_VER]       = BUILD_POLICY(U8),
+        [IFLA_GRE_ERSPAN_DIR]       = BUILD_POLICY(U8),
+        [IFLA_GRE_ERSPAN_HWID]      = BUILD_POLICY(U16),
+};
+
+static const NLAPolicy rtnl_link_info_data_ipoib_policies[] = {
+        [IFLA_IPOIB_PKEY]           = BUILD_POLICY(U16),
+        [IFLA_IPOIB_MODE]           = BUILD_POLICY(U16),
+        [IFLA_IPOIB_UMCAST]         = BUILD_POLICY(U16),
+};
+
+/* IFLA_IPTUN_ attributes are used in ipv4/ipip.c, ipv6/ip6_tunnel.c, and ipv6/sit.c. And unfortunately,
+ * IFLA_IPTUN_FLAGS is used with different types, ugh... */
+#define DEFINE_IPTUN_TYPES(name, flags_type)                            \
+        static const NLAPolicy rtnl_link_info_data_##name##_policies[] = {    \
+                [IFLA_IPTUN_LINK]                = BUILD_POLICY(U32),   \
+                [IFLA_IPTUN_LOCAL]               = BUILD_POLICY(IN_ADDR), \
+                [IFLA_IPTUN_REMOTE]              = BUILD_POLICY(IN_ADDR), \
+                [IFLA_IPTUN_TTL]                 = BUILD_POLICY(U8),    \
+                [IFLA_IPTUN_TOS]                 = BUILD_POLICY(U8),    \
+                [IFLA_IPTUN_ENCAP_LIMIT]         = BUILD_POLICY(U8),    \
+                [IFLA_IPTUN_FLOWINFO]            = BUILD_POLICY(U32),   \
+                [IFLA_IPTUN_FLAGS]               = BUILD_POLICY(flags_type), \
+                [IFLA_IPTUN_PROTO]               = BUILD_POLICY(U8),    \
+                [IFLA_IPTUN_PMTUDISC]            = BUILD_POLICY(U8),    \
+                [IFLA_IPTUN_6RD_PREFIX]          = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)), \
+                [IFLA_IPTUN_6RD_RELAY_PREFIX]    = BUILD_POLICY(U32),   \
+                [IFLA_IPTUN_6RD_PREFIXLEN]       = BUILD_POLICY(U16),   \
+                [IFLA_IPTUN_6RD_RELAY_PREFIXLEN] = BUILD_POLICY(U16),   \
+                [IFLA_IPTUN_ENCAP_TYPE]          = BUILD_POLICY(U16),   \
+                [IFLA_IPTUN_ENCAP_FLAGS]         = BUILD_POLICY(U16),   \
+                [IFLA_IPTUN_ENCAP_SPORT]         = BUILD_POLICY(U16),   \
+                [IFLA_IPTUN_ENCAP_DPORT]         = BUILD_POLICY(U16),   \
+                [IFLA_IPTUN_COLLECT_METADATA]    = BUILD_POLICY(FLAG),  \
+                [IFLA_IPTUN_FWMARK]              = BUILD_POLICY(U32),   \
+        }
+
+DEFINE_IPTUN_TYPES(iptun, U32); /* for ipip and ip6tnl */
+DEFINE_IPTUN_TYPES(sit, U16); /* for sit */
+
+static const NLAPolicy rtnl_link_info_data_ipvlan_policies[] = {
+        [IFLA_IPVLAN_MODE]  = BUILD_POLICY(U16),
+        [IFLA_IPVLAN_FLAGS] = BUILD_POLICY(U16),
+};
+
+static const NLAPolicy rtnl_link_info_data_macsec_policies[] = {
+        [IFLA_MACSEC_SCI]            = BUILD_POLICY(U64),
+        [IFLA_MACSEC_PORT]           = BUILD_POLICY(U16),
+        [IFLA_MACSEC_ICV_LEN]        = BUILD_POLICY(U8),
+        [IFLA_MACSEC_CIPHER_SUITE]   = BUILD_POLICY(U64),
+        [IFLA_MACSEC_WINDOW]         = BUILD_POLICY(U32),
+        [IFLA_MACSEC_ENCODING_SA]    = BUILD_POLICY(U8),
+        [IFLA_MACSEC_ENCRYPT]        = BUILD_POLICY(U8),
+        [IFLA_MACSEC_PROTECT]        = BUILD_POLICY(U8),
+        [IFLA_MACSEC_INC_SCI]        = BUILD_POLICY(U8),
+        [IFLA_MACSEC_ES]             = BUILD_POLICY(U8),
+        [IFLA_MACSEC_SCB]            = BUILD_POLICY(U8),
+        [IFLA_MACSEC_REPLAY_PROTECT] = BUILD_POLICY(U8),
+        [IFLA_MACSEC_VALIDATION]     = BUILD_POLICY(U8),
+        [IFLA_MACSEC_OFFLOAD]        = BUILD_POLICY(U8),
+};
+
+static const NLAPolicy rtnl_macvlan_macaddr_policies[] = {
+        [IFLA_MACVLAN_MACADDR] = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+};
+
+DEFINE_POLICY_SET(rtnl_macvlan_macaddr);
+
+static const NLAPolicy rtnl_link_info_data_macvlan_policies[] = {
+        [IFLA_MACVLAN_MODE]              = BUILD_POLICY(U32),
+        [IFLA_MACVLAN_FLAGS]             = BUILD_POLICY(U16),
+        [IFLA_MACVLAN_MACADDR_MODE]      = BUILD_POLICY(U32),
+        [IFLA_MACVLAN_MACADDR_DATA]      = BUILD_POLICY_NESTED(rtnl_macvlan_macaddr),
+        [IFLA_MACVLAN_MACADDR_COUNT]     = BUILD_POLICY(U32),
+        [IFLA_MACVLAN_BC_QUEUE_LEN]      = BUILD_POLICY(U32),
+        [IFLA_MACVLAN_BC_QUEUE_LEN_USED] = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_link_info_data_tun_policies[] = {
+        [IFLA_TUN_OWNER]               = BUILD_POLICY(U32),
+        [IFLA_TUN_GROUP]               = BUILD_POLICY(U32),
+        [IFLA_TUN_TYPE]                = BUILD_POLICY(U8),
+        [IFLA_TUN_PI]                  = BUILD_POLICY(U8),
+        [IFLA_TUN_VNET_HDR]            = BUILD_POLICY(U8),
+        [IFLA_TUN_PERSIST]             = BUILD_POLICY(U8),
+        [IFLA_TUN_MULTI_QUEUE]         = BUILD_POLICY(U8),
+        [IFLA_TUN_NUM_QUEUES]          = BUILD_POLICY(U32),
+        [IFLA_TUN_NUM_DISABLED_QUEUES] = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_link_info_data_veth_policies[] = {
+        [VETH_INFO_PEER]  = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+};
+
+static const NLAPolicy rtnl_vlan_qos_map_policies[] = {
+        [IFLA_VLAN_QOS_MAPPING]        = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vlan_qos_mapping)),
+};
+
+DEFINE_POLICY_SET(rtnl_vlan_qos_map);
+
+static const NLAPolicy rtnl_link_info_data_vlan_policies[] = {
+        [IFLA_VLAN_ID]          = BUILD_POLICY(U16),
+        [IFLA_VLAN_FLAGS]       = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vlan_flags)),
+        [IFLA_VLAN_EGRESS_QOS]  = BUILD_POLICY_NESTED(rtnl_vlan_qos_map),
+        [IFLA_VLAN_INGRESS_QOS] = BUILD_POLICY_NESTED(rtnl_vlan_qos_map),
+        [IFLA_VLAN_PROTOCOL]    = BUILD_POLICY(U16),
+};
+
+static const NLAPolicy rtnl_link_info_data_vrf_policies[] = {
+        [IFLA_VRF_TABLE]                 = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_link_info_data_vti_policies[] = {
+        [IFLA_VTI_LINK]         = BUILD_POLICY(U32),
+        [IFLA_VTI_IKEY]         = BUILD_POLICY(U32),
+        [IFLA_VTI_OKEY]         = BUILD_POLICY(U32),
+        [IFLA_VTI_LOCAL]        = BUILD_POLICY(IN_ADDR),
+        [IFLA_VTI_REMOTE]       = BUILD_POLICY(IN_ADDR),
+        [IFLA_VTI_FWMARK]       = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_link_info_data_vxcan_policies[] = {
+        [VXCAN_INFO_PEER]  = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+};
+
+static const NLAPolicy rtnl_link_info_data_vxlan_policies[] = {
+        [IFLA_VXLAN_ID]                = BUILD_POLICY(U32),
+        [IFLA_VXLAN_GROUP]             = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
+        [IFLA_VXLAN_LINK]              = BUILD_POLICY(U32),
+        [IFLA_VXLAN_LOCAL]             = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
+        [IFLA_VXLAN_TTL]               = BUILD_POLICY(U8),
+        [IFLA_VXLAN_TOS]               = BUILD_POLICY(U8),
+        [IFLA_VXLAN_LEARNING]          = BUILD_POLICY(U8),
+        [IFLA_VXLAN_AGEING]            = BUILD_POLICY(U32),
+        [IFLA_VXLAN_LIMIT]             = BUILD_POLICY(U32),
+        [IFLA_VXLAN_PORT_RANGE]        = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vxlan_port_range)),
+        [IFLA_VXLAN_PROXY]             = BUILD_POLICY(U8),
+        [IFLA_VXLAN_RSC]               = BUILD_POLICY(U8),
+        [IFLA_VXLAN_L2MISS]            = BUILD_POLICY(U8),
+        [IFLA_VXLAN_L3MISS]            = BUILD_POLICY(U8),
+        [IFLA_VXLAN_PORT]              = BUILD_POLICY(U16),
+        [IFLA_VXLAN_GROUP6]            = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [IFLA_VXLAN_LOCAL6]            = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [IFLA_VXLAN_UDP_CSUM]          = BUILD_POLICY(U8),
+        [IFLA_VXLAN_UDP_ZERO_CSUM6_TX] = BUILD_POLICY(U8),
+        [IFLA_VXLAN_UDP_ZERO_CSUM6_RX] = BUILD_POLICY(U8),
+        [IFLA_VXLAN_REMCSUM_TX]        = BUILD_POLICY(U8),
+        [IFLA_VXLAN_REMCSUM_RX]        = BUILD_POLICY(U8),
+        [IFLA_VXLAN_GBP]               = BUILD_POLICY(FLAG),
+        [IFLA_VXLAN_REMCSUM_NOPARTIAL] = BUILD_POLICY(FLAG),
+        [IFLA_VXLAN_COLLECT_METADATA]  = BUILD_POLICY(U8),
+        [IFLA_VXLAN_LABEL]             = BUILD_POLICY(U32),
+        [IFLA_VXLAN_GPE]               = BUILD_POLICY(FLAG),
+        [IFLA_VXLAN_TTL_INHERIT]       = BUILD_POLICY(FLAG),
+        [IFLA_VXLAN_DF]                = BUILD_POLICY(U8),
+};
+
+static const NLAPolicy rtnl_link_info_data_xfrm_policies[] = {
+        [IFLA_XFRM_LINK]         = BUILD_POLICY(U32),
+        [IFLA_XFRM_IF_ID]        = BUILD_POLICY(U32)
+};
+
+static const NLAPolicySetUnionElement rtnl_link_info_data_policy_set_union_elements[] = {
+        BUILD_UNION_ELEMENT_BY_STRING("bareudp",   rtnl_link_info_data_bareudp),
+        BUILD_UNION_ELEMENT_BY_STRING("batadv",    rtnl_link_info_data_batadv),
+        BUILD_UNION_ELEMENT_BY_STRING("bond",      rtnl_link_info_data_bond),
+        BUILD_UNION_ELEMENT_BY_STRING("bridge",    rtnl_link_info_data_bridge),
+/*
+        BUILD_UNION_ELEMENT_BY_STRING("caif",      rtnl_link_info_data_caif),
+*/
+        BUILD_UNION_ELEMENT_BY_STRING("can",       rtnl_link_info_data_can),
+        BUILD_UNION_ELEMENT_BY_STRING("erspan",    rtnl_link_info_data_gre),
+        BUILD_UNION_ELEMENT_BY_STRING("geneve",    rtnl_link_info_data_geneve),
+        BUILD_UNION_ELEMENT_BY_STRING("gre",       rtnl_link_info_data_gre),
+        BUILD_UNION_ELEMENT_BY_STRING("gretap",    rtnl_link_info_data_gre),
+/*
+        BUILD_UNION_ELEMENT_BY_STRING("gtp",       rtnl_link_info_data_gtp),
+        BUILD_UNION_ELEMENT_BY_STRING("hsr",       rtnl_link_info_data_hsr),
+*/
+        BUILD_UNION_ELEMENT_BY_STRING("ip6erspan", rtnl_link_info_data_gre),
+        BUILD_UNION_ELEMENT_BY_STRING("ip6gre",    rtnl_link_info_data_gre),
+        BUILD_UNION_ELEMENT_BY_STRING("ip6gretap", rtnl_link_info_data_gre),
+        BUILD_UNION_ELEMENT_BY_STRING("ip6tnl",    rtnl_link_info_data_iptun),
+        BUILD_UNION_ELEMENT_BY_STRING("ipoib",     rtnl_link_info_data_ipoib),
+        BUILD_UNION_ELEMENT_BY_STRING("ipip",      rtnl_link_info_data_iptun),
+        BUILD_UNION_ELEMENT_BY_STRING("ipvlan",    rtnl_link_info_data_ipvlan),
+        BUILD_UNION_ELEMENT_BY_STRING("ipvtap",    rtnl_link_info_data_ipvlan),
+        BUILD_UNION_ELEMENT_BY_STRING("macsec",    rtnl_link_info_data_macsec),
+        BUILD_UNION_ELEMENT_BY_STRING("macvlan",   rtnl_link_info_data_macvlan),
+        BUILD_UNION_ELEMENT_BY_STRING("macvtap",   rtnl_link_info_data_macvlan),
+/*
+        BUILD_UNION_ELEMENT_BY_STRING("ppp",       rtnl_link_info_data_ppp),
+        BUILD_UNION_ELEMENT_BY_STRING("rmnet",     rtnl_link_info_data_rmnet),
+*/
+        BUILD_UNION_ELEMENT_BY_STRING("sit",       rtnl_link_info_data_sit),
+        BUILD_UNION_ELEMENT_BY_STRING("tun",       rtnl_link_info_data_tun),
+        BUILD_UNION_ELEMENT_BY_STRING("veth",      rtnl_link_info_data_veth),
+        BUILD_UNION_ELEMENT_BY_STRING("vlan",      rtnl_link_info_data_vlan),
+        BUILD_UNION_ELEMENT_BY_STRING("vrf",       rtnl_link_info_data_vrf),
+        BUILD_UNION_ELEMENT_BY_STRING("vti",       rtnl_link_info_data_vti),
+        BUILD_UNION_ELEMENT_BY_STRING("vti6",      rtnl_link_info_data_vti),
+        BUILD_UNION_ELEMENT_BY_STRING("vxcan",     rtnl_link_info_data_vxcan),
+        BUILD_UNION_ELEMENT_BY_STRING("vxlan",     rtnl_link_info_data_vxlan),
+/*
+        BUILD_UNION_ELEMENT_BY_STRING("wwan",      rtnl_link_info_data_wwan),
+*/
+        BUILD_UNION_ELEMENT_BY_STRING("xfrm",      rtnl_link_info_data_xfrm),
+};
+
+DEFINE_POLICY_SET_UNION(rtnl_link_info_data, IFLA_INFO_KIND);
+
+static const struct NLAPolicy rtnl_bridge_port_policies[] = {
+        [IFLA_BRPORT_STATE]                 = BUILD_POLICY(U8),
+        [IFLA_BRPORT_COST]                  = BUILD_POLICY(U32),
+        [IFLA_BRPORT_PRIORITY]              = BUILD_POLICY(U16),
+        [IFLA_BRPORT_MODE]                  = BUILD_POLICY(U8),
+        [IFLA_BRPORT_GUARD]                 = BUILD_POLICY(U8),
+        [IFLA_BRPORT_PROTECT]               = BUILD_POLICY(U8),
+        [IFLA_BRPORT_FAST_LEAVE]            = BUILD_POLICY(U8),
+        [IFLA_BRPORT_LEARNING]              = BUILD_POLICY(U8),
+        [IFLA_BRPORT_UNICAST_FLOOD]         = BUILD_POLICY(U8),
+        [IFLA_BRPORT_PROXYARP]              = BUILD_POLICY(U8),
+        [IFLA_BRPORT_LEARNING_SYNC]         = BUILD_POLICY(U8),
+        [IFLA_BRPORT_PROXYARP_WIFI]         = BUILD_POLICY(U8),
+        [IFLA_BRPORT_ROOT_ID]               = BUILD_POLICY(U8),
+        [IFLA_BRPORT_BRIDGE_ID]             = BUILD_POLICY(U8),
+        [IFLA_BRPORT_DESIGNATED_PORT]       = BUILD_POLICY(U16),
+        [IFLA_BRPORT_DESIGNATED_COST]       = BUILD_POLICY(U16),
+        [IFLA_BRPORT_ID]                    = BUILD_POLICY(U16),
+        [IFLA_BRPORT_NO]                    = BUILD_POLICY(U16),
+        [IFLA_BRPORT_TOPOLOGY_CHANGE_ACK]   = BUILD_POLICY(U8),
+        [IFLA_BRPORT_CONFIG_PENDING]        = BUILD_POLICY(U8),
+        [IFLA_BRPORT_MESSAGE_AGE_TIMER]     = BUILD_POLICY(U64),
+        [IFLA_BRPORT_FORWARD_DELAY_TIMER]   = BUILD_POLICY(U64),
+        [IFLA_BRPORT_HOLD_TIMER]            = BUILD_POLICY(U64),
+        [IFLA_BRPORT_FLUSH]                 = BUILD_POLICY(U8),
+        [IFLA_BRPORT_MULTICAST_ROUTER]      = BUILD_POLICY(U8),
+        [IFLA_BRPORT_PAD]                   = BUILD_POLICY(U8),
+        [IFLA_BRPORT_MCAST_FLOOD]           = BUILD_POLICY(U8),
+        [IFLA_BRPORT_MCAST_TO_UCAST]        = BUILD_POLICY(U8),
+        [IFLA_BRPORT_VLAN_TUNNEL]           = BUILD_POLICY(U8),
+        [IFLA_BRPORT_BCAST_FLOOD]           = BUILD_POLICY(U8),
+        [IFLA_BRPORT_GROUP_FWD_MASK]        = BUILD_POLICY(U16),
+        [IFLA_BRPORT_NEIGH_SUPPRESS]        = BUILD_POLICY(U8),
+        [IFLA_BRPORT_ISOLATED]              = BUILD_POLICY(U8),
+        [IFLA_BRPORT_BACKUP_PORT]           = BUILD_POLICY(U32),
+        [IFLA_BRPORT_MRP_RING_OPEN]         = BUILD_POLICY(U8),
+        [IFLA_BRPORT_MRP_IN_OPEN]           = BUILD_POLICY(U8),
+        [IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT] = BUILD_POLICY(U32),
+        [IFLA_BRPORT_MCAST_EHT_HOSTS_CNT]   = BUILD_POLICY(U32),
+};
+
+static const NLAPolicySetUnionElement rtnl_link_info_slave_data_policy_set_union_elements[] = {
+        BUILD_UNION_ELEMENT_BY_STRING("bridge",    rtnl_bridge_port),
+};
+
+DEFINE_POLICY_SET_UNION(rtnl_link_info_slave_data, IFLA_INFO_SLAVE_KIND);
+
+static const NLAPolicy rtnl_link_info_policies[] = {
+        [IFLA_INFO_KIND]        = BUILD_POLICY(STRING),
+        [IFLA_INFO_DATA]        = BUILD_POLICY_NESTED_UNION_BY_STRING(rtnl_link_info_data),
+        /* TODO: Currently IFLA_INFO_XSTATS is used only when IFLA_INFO_KIND is "can". In the future,
+         * when multiple kinds of netdevs use this attribute, convert its type to NETLINK_TYPE_UNION. */
+        [IFLA_INFO_XSTATS]      = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct can_device_stats)),
+        [IFLA_INFO_SLAVE_KIND]  = BUILD_POLICY(STRING),
+        [IFLA_INFO_SLAVE_DATA]  = BUILD_POLICY_NESTED_UNION_BY_STRING(rtnl_link_info_slave_data),
+};
+
+DEFINE_POLICY_SET(rtnl_link_info);
+
+static const struct NLAPolicy rtnl_inet_policies[] = {
+        [IFLA_INET_CONF] = BUILD_POLICY(BINARY), /* size = IPV4_DEVCONF_MAX * 4 */
+};
+
+DEFINE_POLICY_SET(rtnl_inet);
+
+static const struct NLAPolicy rtnl_inet6_policies[] = {
+        [IFLA_INET6_FLAGS]         = BUILD_POLICY(U32),
+        [IFLA_INET6_CONF]          = BUILD_POLICY(BINARY), /* size = DEVCONF_MAX * sizeof(s32) */
+        [IFLA_INET6_STATS]         = BUILD_POLICY(BINARY), /* size = IPSTATS_MIB_MAX * sizeof(u64) */
+        [IFLA_INET6_MCAST]         = {}, /* unused. */
+        [IFLA_INET6_CACHEINFO]     = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_cacheinfo)),
+        [IFLA_INET6_ICMP6STATS]    = BUILD_POLICY(BINARY), /* size = ICMP6_MIB_MAX * sizeof(u64) */
+        [IFLA_INET6_TOKEN]         = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [IFLA_INET6_ADDR_GEN_MODE] = BUILD_POLICY(U8),
+};
+
+DEFINE_POLICY_SET(rtnl_inet6);
+
+static const NLAPolicySetUnionElement rtnl_prot_info_policy_set_union_elements[] = {
+        BUILD_UNION_ELEMENT_BY_FAMILY(AF_BRIDGE, rtnl_bridge_port),
+        BUILD_UNION_ELEMENT_BY_FAMILY(AF_INET6,  rtnl_inet6),
+};
+
+DEFINE_POLICY_SET_UNION(rtnl_prot_info, 0);
+
+static const NLAPolicy rtnl_af_spec_unspec_policies[] = {
+        [AF_INET]  = BUILD_POLICY_NESTED(rtnl_inet),
+        [AF_INET6] = BUILD_POLICY_NESTED(rtnl_inet6),
+};
+
+static const NLAPolicy rtnl_bridge_vlan_tunnel_info_policies[] = {
+        [IFLA_BRIDGE_VLAN_TUNNEL_ID]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_VLAN_TUNNEL_VID]   = BUILD_POLICY(U16),
+        [IFLA_BRIDGE_VLAN_TUNNEL_FLAGS] = BUILD_POLICY(U16),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_vlan_tunnel_info);
+
+static const NLAPolicy rtnl_bridge_mrp_instance_policies[] = {
+        [IFLA_BRIDGE_MRP_INSTANCE_RING_ID]      = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INSTANCE_P_IFINDEX]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INSTANCE_S_IFINDEX]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INSTANCE_PRIO]         = BUILD_POLICY(U16),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_instance);
+
+static const NLAPolicy rtnl_bridge_mrp_port_state_policies[] = {
+        [IFLA_BRIDGE_MRP_PORT_STATE_STATE]      = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_port_state);
+
+static const NLAPolicy rtnl_bridge_mrp_port_role_policies[] = {
+        [IFLA_BRIDGE_MRP_PORT_ROLE_ROLE]        = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_port_role);
+
+static const NLAPolicy rtnl_bridge_mrp_ring_state_policies[] = {
+        [IFLA_BRIDGE_MRP_RING_STATE_RING_ID]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_RING_STATE_STATE]      = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_ring_state);
+
+static const NLAPolicy rtnl_bridge_mrp_ring_role_policies[] = {
+        [IFLA_BRIDGE_MRP_RING_ROLE_RING_ID]     = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_RING_ROLE_ROLE]        = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_ring_role);
+
+static const NLAPolicy rtnl_bridge_mrp_start_test_policies[] = {
+        [IFLA_BRIDGE_MRP_START_TEST_RING_ID]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_START_TEST_INTERVAL]   = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_START_TEST_MAX_MISS]   = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_START_TEST_PERIOD]     = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_START_TEST_MONITOR]    = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_start_test);
+
+static const NLAPolicy rtnl_bridge_mrp_info_policies[] = {
+        [IFLA_BRIDGE_MRP_INFO_RING_ID]          = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_P_IFINDEX]        = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_S_IFINDEX]        = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_PRIO]             = BUILD_POLICY(U16),
+        [IFLA_BRIDGE_MRP_INFO_RING_STATE]       = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_RING_ROLE]        = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_TEST_INTERVAL]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_TEST_MAX_MISS]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_TEST_MONITOR]     = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_I_IFINDEX]        = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_IN_STATE]         = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_IN_ROLE]          = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_IN_TEST_INTERVAL] = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_INFO_IN_TEST_MAX_MISS] = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_info);
+
+static const NLAPolicy rtnl_bridge_mrp_in_role_policies[] = {
+        [IFLA_BRIDGE_MRP_IN_ROLE_RING_ID]       = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_IN_ROLE_IN_ID]         = BUILD_POLICY(U16),
+        [IFLA_BRIDGE_MRP_IN_ROLE_ROLE]          = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_IN_ROLE_I_IFINDEX]     = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_in_role);
+
+static const NLAPolicy rtnl_bridge_mrp_in_state_policies[] = {
+        [IFLA_BRIDGE_MRP_IN_STATE_IN_ID]        = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_IN_STATE_STATE]        = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_in_state);
+
+static const NLAPolicy rtnl_bridge_mrp_start_in_test_policies[] = {
+        [IFLA_BRIDGE_MRP_START_IN_TEST_IN_ID]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_START_IN_TEST_INTERVAL] = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_START_IN_TEST_MAX_MISS] = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_MRP_START_IN_TEST_PERIOD]   = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp_start_in_test);
+
+static const NLAPolicy rtnl_bridge_mrp_policies[] = {
+        [IFLA_BRIDGE_MRP_INSTANCE]      = BUILD_POLICY_NESTED(rtnl_bridge_mrp_instance),
+        [IFLA_BRIDGE_MRP_PORT_STATE]    = BUILD_POLICY_NESTED(rtnl_bridge_mrp_port_state),
+        [IFLA_BRIDGE_MRP_PORT_ROLE]     = BUILD_POLICY_NESTED(rtnl_bridge_mrp_port_role),
+        [IFLA_BRIDGE_MRP_RING_STATE]    = BUILD_POLICY_NESTED(rtnl_bridge_mrp_ring_state),
+        [IFLA_BRIDGE_MRP_RING_ROLE]     = BUILD_POLICY_NESTED(rtnl_bridge_mrp_ring_role),
+        [IFLA_BRIDGE_MRP_START_TEST]    = BUILD_POLICY_NESTED(rtnl_bridge_mrp_start_test),
+        [IFLA_BRIDGE_MRP_INFO]          = BUILD_POLICY_NESTED(rtnl_bridge_mrp_info),
+        [IFLA_BRIDGE_MRP_IN_ROLE]       = BUILD_POLICY_NESTED(rtnl_bridge_mrp_in_role),
+        [IFLA_BRIDGE_MRP_IN_STATE]      = BUILD_POLICY_NESTED(rtnl_bridge_mrp_in_state),
+        [IFLA_BRIDGE_MRP_START_IN_TEST] = BUILD_POLICY_NESTED(rtnl_bridge_mrp_start_in_test),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_mrp);
+
+static const NLAPolicy rtnl_bridge_cfm_mep_create_policies[] = {
+        [IFLA_BRIDGE_CFM_MEP_CREATE_INSTANCE]   = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_MEP_CREATE_DOMAIN]     = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_MEP_CREATE_DIRECTION]  = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_MEP_CREATE_IFINDEX]    = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_mep_create);
+
+static const NLAPolicy rtnl_bridge_cfm_mep_delete_policies[] = {
+        [IFLA_BRIDGE_CFM_MEP_DELETE_INSTANCE]   = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_mep_delete);
+
+static const NLAPolicy rtnl_bridge_cfm_mep_config_policies[] = {
+        [IFLA_BRIDGE_CFM_MEP_CONFIG_INSTANCE]    = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_MEP_CONFIG_UNICAST_MAC] = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [IFLA_BRIDGE_CFM_MEP_CONFIG_MDLEVEL]     = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_MEP_CONFIG_MEPID]       = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_mep_config);
+
+static const NLAPolicy rtnl_bridge_cfm_cc_config_policies[] = {
+        [IFLA_BRIDGE_CFM_CC_CONFIG_INSTANCE]     = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_CONFIG_ENABLE]       = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_CONFIG_EXP_INTERVAL] = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_CONFIG_EXP_MAID]     = BUILD_POLICY_WITH_SIZE(BINARY, CFM_MAID_LENGTH),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_cc_config);
+
+static const NLAPolicy rtnl_bridge_cfm_cc_peer_mep_policies[] = {
+        [IFLA_BRIDGE_CFM_CC_PEER_MEP_INSTANCE]  = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_PEER_MEPID]         = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_cc_peer_mep);
+
+static const NLAPolicy rtnl_bridge_cfm_cc_rdi_policies[] = {
+        [IFLA_BRIDGE_CFM_CC_RDI_INSTANCE]       = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_RDI_RDI]            = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_cc_rdi);
+
+static const NLAPolicy rtnl_bridge_cfm_cc_ccm_tx_policies[] = {
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_INSTANCE]       = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_DMAC]           = BUILD_POLICY_WITH_SIZE(ETHER_ADDR, ETH_ALEN),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_SEQ_NO_UPDATE]  = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_PERIOD]         = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV]         = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV_VALUE]   = BUILD_POLICY(U8),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV]       = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV_VALUE] = BUILD_POLICY(U8),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_cc_ccm_tx);
+
+static const NLAPolicy rtnl_bridge_cfm_mep_status_policies[] = {
+        [IFLA_BRIDGE_CFM_MEP_STATUS_INSTANCE]           = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_MEP_STATUS_OPCODE_UNEXP_SEEN]  = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_MEP_STATUS_VERSION_UNEXP_SEEN] = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_MEP_STATUS_RX_LEVEL_LOW_SEEN]  = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_mep_status);
+
+static const NLAPolicy rtnl_bridge_cfm_cc_peer_status_policies[] = {
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_INSTANCE]       = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_PEER_MEPID]     = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_CCM_DEFECT]     = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_RDI]            = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_PORT_TLV_VALUE] = BUILD_POLICY(U8),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_IF_TLV_VALUE]   = BUILD_POLICY(U8),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEEN]           = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_TLV_SEEN]       = BUILD_POLICY(U32),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEQ_UNEXP_SEEN] = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm_cc_peer_status);
+
+static const NLAPolicy rtnl_bridge_cfm_policies[] = {
+        [IFLA_BRIDGE_CFM_MEP_CREATE]          = BUILD_POLICY_NESTED(rtnl_bridge_cfm_mep_create),
+        [IFLA_BRIDGE_CFM_MEP_DELETE]          = BUILD_POLICY_NESTED(rtnl_bridge_cfm_mep_delete),
+        [IFLA_BRIDGE_CFM_MEP_CONFIG]          = BUILD_POLICY_NESTED(rtnl_bridge_cfm_mep_config),
+        [IFLA_BRIDGE_CFM_CC_CONFIG]           = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_config),
+        [IFLA_BRIDGE_CFM_CC_PEER_MEP_ADD]     = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_peer_mep),
+        [IFLA_BRIDGE_CFM_CC_PEER_MEP_REMOVE]  = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_peer_mep),
+        [IFLA_BRIDGE_CFM_CC_RDI]              = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_rdi),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX]           = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_ccm_tx),
+        [IFLA_BRIDGE_CFM_MEP_CREATE_INFO]     = BUILD_POLICY_NESTED(rtnl_bridge_cfm_mep_create),
+        [IFLA_BRIDGE_CFM_MEP_CONFIG_INFO]     = BUILD_POLICY_NESTED(rtnl_bridge_cfm_mep_config),
+        [IFLA_BRIDGE_CFM_CC_CONFIG_INFO]      = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_config),
+        [IFLA_BRIDGE_CFM_CC_RDI_INFO]         = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_rdi),
+        [IFLA_BRIDGE_CFM_CC_CCM_TX_INFO]      = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_ccm_tx),
+        [IFLA_BRIDGE_CFM_CC_PEER_MEP_INFO]    = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_peer_mep),
+        [IFLA_BRIDGE_CFM_MEP_STATUS_INFO]     = BUILD_POLICY_NESTED(rtnl_bridge_cfm_mep_status),
+        [IFLA_BRIDGE_CFM_CC_PEER_STATUS_INFO] = BUILD_POLICY_NESTED(rtnl_bridge_cfm_cc_peer_status),
+};
+
+DEFINE_POLICY_SET(rtnl_bridge_cfm);
+
+static const NLAPolicy rtnl_af_spec_bridge_policies[] = {
+        [IFLA_BRIDGE_FLAGS]            = BUILD_POLICY(U16),
+        [IFLA_BRIDGE_MODE]             = BUILD_POLICY(U16),
+        [IFLA_BRIDGE_VLAN_INFO]        = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct bridge_vlan_info)),
+        [IFLA_BRIDGE_VLAN_TUNNEL_INFO] = BUILD_POLICY_NESTED(rtnl_bridge_vlan_tunnel_info),
+        [IFLA_BRIDGE_MRP]              = BUILD_POLICY_NESTED(rtnl_bridge_mrp),
+        [IFLA_BRIDGE_CFM]              = BUILD_POLICY_NESTED(rtnl_bridge_cfm),
+};
+
+static const NLAPolicySetUnionElement rtnl_af_spec_policy_set_union_elements[] = {
+        BUILD_UNION_ELEMENT_BY_FAMILY(AF_UNSPEC, rtnl_af_spec_unspec),
+        BUILD_UNION_ELEMENT_BY_FAMILY(AF_BRIDGE, rtnl_af_spec_bridge),
+};
+
+DEFINE_POLICY_SET_UNION(rtnl_af_spec, 0);
+
+static const NLAPolicy rtnl_prop_list_policies[] = {
+        [IFLA_ALT_IFNAME]       = BUILD_POLICY_WITH_SIZE(STRING, ALTIFNAMSIZ - 1),
+};
+
+DEFINE_POLICY_SET(rtnl_prop_list);
+
+static const NLAPolicy rtnl_vf_vlan_list_policies[] = {
+        [IFLA_VF_VLAN_INFO]  = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_vlan_info)),
+};
+
+DEFINE_POLICY_SET(rtnl_vf_vlan_list);
+
+static const NLAPolicy rtnl_vf_info_policies[] = {
+        [IFLA_VF_MAC]           = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_mac)),
+        [IFLA_VF_VLAN]          = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_vlan)),
+        [IFLA_VF_VLAN_LIST]     = BUILD_POLICY_NESTED(rtnl_vf_vlan_list),
+        [IFLA_VF_TX_RATE]       = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_tx_rate)),
+        [IFLA_VF_SPOOFCHK]      = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_spoofchk)),
+        [IFLA_VF_RATE]          = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_rate)),
+        [IFLA_VF_LINK_STATE]    = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_link_state)),
+        [IFLA_VF_RSS_QUERY_EN]  = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_rss_query_en)),
+        [IFLA_VF_TRUST]         = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_trust)),
+        [IFLA_VF_IB_NODE_GUID]  = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_guid)),
+        [IFLA_VF_IB_PORT_GUID]  = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_vf_guid)),
+};
+
+DEFINE_POLICY_SET(rtnl_vf_info);
+
+static const NLAPolicy rtnl_vfinfo_list_policies[] = {
+        [IFLA_VF_INFO] = BUILD_POLICY_NESTED(rtnl_vf_info),
+};
+
+DEFINE_POLICY_SET(rtnl_vfinfo_list);
+
+static const NLAPolicy rtnl_vf_port_policies[] = {
+        [IFLA_PORT_VF]            = BUILD_POLICY(U32),
+        [IFLA_PORT_PROFILE]       = BUILD_POLICY(STRING),
+        [IFLA_PORT_VSI_TYPE]      = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct ifla_port_vsi)),
+        [IFLA_PORT_INSTANCE_UUID] = BUILD_POLICY_WITH_SIZE(BINARY, PORT_UUID_MAX),
+        [IFLA_PORT_HOST_UUID]     = BUILD_POLICY_WITH_SIZE(BINARY, PORT_UUID_MAX),
+        [IFLA_PORT_REQUEST]       = BUILD_POLICY(U8),
+        [IFLA_PORT_RESPONSE]      = BUILD_POLICY(U16),
+};
+
+DEFINE_POLICY_SET(rtnl_vf_port);
+
+static const NLAPolicy rtnl_vf_ports_policies[] = {
+        [IFLA_VF_PORT] = BUILD_POLICY_NESTED(rtnl_vf_port),
+};
+
+DEFINE_POLICY_SET(rtnl_vf_ports);
+
+static const NLAPolicy rtnl_xdp_policies[] = {
+        [IFLA_XDP_FD]          = BUILD_POLICY(S32),
+        [IFLA_XDP_ATTACHED]    = BUILD_POLICY(U8),
+        [IFLA_XDP_FLAGS]       = BUILD_POLICY(U32),
+        [IFLA_XDP_PROG_ID]     = BUILD_POLICY(U32),
+        [IFLA_XDP_DRV_PROG_ID] = BUILD_POLICY(U32),
+        [IFLA_XDP_SKB_PROG_ID] = BUILD_POLICY(U32),
+        [IFLA_XDP_HW_PROG_ID]  = BUILD_POLICY(U32),
+        [IFLA_XDP_EXPECTED_FD] = BUILD_POLICY(S32),
+};
+
+DEFINE_POLICY_SET(rtnl_xdp);
+
+static const NLAPolicy rtnl_proto_down_reason_policies[] = {
+        [IFLA_PROTO_DOWN_REASON_MASK]  = BUILD_POLICY(U32),
+        [IFLA_PROTO_DOWN_REASON_VALUE] = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_proto_down_reason);
+
+static const NLAPolicy rtnl_link_policies[] = {
+        [IFLA_ADDRESS]             = BUILD_POLICY(ETHER_ADDR),
+        [IFLA_BROADCAST]           = BUILD_POLICY(ETHER_ADDR),
+        [IFLA_IFNAME]              = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ - 1),
+        [IFLA_MTU]                 = BUILD_POLICY(U32),
+        [IFLA_LINK]                = BUILD_POLICY(U32),
+        [IFLA_QDISC]               = BUILD_POLICY(STRING),
+        [IFLA_STATS]               = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct rtnl_link_stats)),
+        [IFLA_COST]                = { /* Not used. */ },
+        [IFLA_PRIORITY]            = { /* Not used. */ },
+        [IFLA_MASTER]              = BUILD_POLICY(U32),
+        [IFLA_WIRELESS]            = { /* Used only by wext. */ },
+        [IFLA_PROTINFO]            = BUILD_POLICY_NESTED_UNION_BY_FAMILY(rtnl_prot_info),
+        [IFLA_TXQLEN]              = BUILD_POLICY(U32),
+        [IFLA_MAP]                 = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct rtnl_link_ifmap)),
+        [IFLA_WEIGHT]              = BUILD_POLICY(U32),
+        [IFLA_OPERSTATE]           = BUILD_POLICY(U8),
+        [IFLA_LINKMODE]            = BUILD_POLICY(U8),
+        [IFLA_LINKINFO]            = BUILD_POLICY_NESTED(rtnl_link_info),
+        [IFLA_NET_NS_PID]          = BUILD_POLICY(U32),
+        [IFLA_IFALIAS]             = BUILD_POLICY_WITH_SIZE(STRING, IFALIASZ - 1),
+        [IFLA_NUM_VF]              = BUILD_POLICY(U32),
+        [IFLA_VFINFO_LIST]         = BUILD_POLICY_NESTED(rtnl_vfinfo_list),
+        [IFLA_STATS64]             = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct rtnl_link_stats64)),
+        [IFLA_VF_PORTS]            = BUILD_POLICY_NESTED(rtnl_vf_ports),
+        [IFLA_PORT_SELF]           = BUILD_POLICY_NESTED(rtnl_vf_port),
+        [IFLA_AF_SPEC]             = BUILD_POLICY_NESTED_UNION_BY_FAMILY(rtnl_af_spec),
+        [IFLA_GROUP]               = BUILD_POLICY(U32),
+        [IFLA_NET_NS_FD]           = BUILD_POLICY(U32),
+        [IFLA_EXT_MASK]            = BUILD_POLICY(U32),
+        [IFLA_PROMISCUITY]         = BUILD_POLICY(U32),
+        [IFLA_NUM_TX_QUEUES]       = BUILD_POLICY(U32),
+        [IFLA_NUM_RX_QUEUES]       = BUILD_POLICY(U32),
+        [IFLA_CARRIER]             = BUILD_POLICY(U8),
+        [IFLA_PHYS_PORT_ID]        = BUILD_POLICY_WITH_SIZE(BINARY, MAX_PHYS_ITEM_ID_LEN),
+        [IFLA_CARRIER_CHANGES]     = BUILD_POLICY(U32),
+        [IFLA_PHYS_SWITCH_ID]      = BUILD_POLICY_WITH_SIZE(BINARY, MAX_PHYS_ITEM_ID_LEN),
+        [IFLA_LINK_NETNSID]        = BUILD_POLICY(S32),
+        [IFLA_PHYS_PORT_NAME]      = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ - 1),
+        [IFLA_PROTO_DOWN]          = BUILD_POLICY(U8),
+        [IFLA_GSO_MAX_SEGS]        = BUILD_POLICY(U32),
+        [IFLA_GSO_MAX_SIZE]        = BUILD_POLICY(U32),
+        [IFLA_XDP]                 = BUILD_POLICY_NESTED(rtnl_xdp),
+        [IFLA_EVENT]               = BUILD_POLICY(U32),
+        [IFLA_NEW_NETNSID]         = BUILD_POLICY(S32),
+        [IFLA_TARGET_NETNSID]      = BUILD_POLICY(S32),
+        [IFLA_CARRIER_UP_COUNT]    = BUILD_POLICY(U32),
+        [IFLA_CARRIER_DOWN_COUNT]  = BUILD_POLICY(U32),
+        [IFLA_NEW_IFINDEX]         = BUILD_POLICY(S32),
+        [IFLA_MIN_MTU]             = BUILD_POLICY(U32),
+        [IFLA_MAX_MTU]             = BUILD_POLICY(U32),
+        [IFLA_PROP_LIST]           = BUILD_POLICY_NESTED(rtnl_prop_list),
+        [IFLA_ALT_IFNAME]          = BUILD_POLICY_WITH_SIZE(STRING, ALTIFNAMSIZ - 1),
+        [IFLA_PERM_ADDRESS]        = BUILD_POLICY(ETHER_ADDR),
+        [IFLA_PROTO_DOWN_REASON]   = BUILD_POLICY_NESTED(rtnl_proto_down_reason),
+        [IFLA_PARENT_DEV_NAME]     = BUILD_POLICY(STRING),
+        [IFLA_PARENT_DEV_BUS_NAME] = BUILD_POLICY(STRING),
+};
+
+DEFINE_POLICY_SET(rtnl_link);
+
+/* IFA_FLAGS was defined in kernel 3.14, but we still support older
+ * kernels where IFA_MAX is lower. */
+static const NLAPolicy rtnl_address_policies[] = {
+        [IFA_ADDRESS]           = BUILD_POLICY(IN_ADDR),
+        [IFA_LOCAL]             = BUILD_POLICY(IN_ADDR),
+        [IFA_LABEL]             = BUILD_POLICY_WITH_SIZE(STRING, IFNAMSIZ - 1),
+        [IFA_BROADCAST]         = BUILD_POLICY(IN_ADDR),
+        [IFA_ANYCAST]           = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [IFA_CACHEINFO]         = BUILD_POLICY_WITH_SIZE(CACHE_INFO, sizeof(struct ifa_cacheinfo)),
+        [IFA_MULTICAST]         = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [IFA_FLAGS]             = BUILD_POLICY(U32),
+        [IFA_RT_PRIORITY]       = BUILD_POLICY(U32),
+        [IFA_TARGET_NETNSID]    = BUILD_POLICY(S32),
+};
+
+DEFINE_POLICY_SET(rtnl_address);
+
+/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
+
+static const NLAPolicy rtnl_route_metrics_policies[] = {
+        [RTAX_MTU]                = BUILD_POLICY(U32),
+        [RTAX_WINDOW]             = BUILD_POLICY(U32),
+        [RTAX_RTT]                = BUILD_POLICY(U32),
+        [RTAX_RTTVAR]             = BUILD_POLICY(U32),
+        [RTAX_SSTHRESH]           = BUILD_POLICY(U32),
+        [RTAX_CWND]               = BUILD_POLICY(U32),
+        [RTAX_ADVMSS]             = BUILD_POLICY(U32),
+        [RTAX_REORDERING]         = BUILD_POLICY(U32),
+        [RTAX_HOPLIMIT]           = BUILD_POLICY(U32),
+        [RTAX_INITCWND]           = BUILD_POLICY(U32),
+        [RTAX_FEATURES]           = BUILD_POLICY(U32),
+        [RTAX_RTO_MIN]            = BUILD_POLICY(U32),
+        [RTAX_INITRWND]           = BUILD_POLICY(U32),
+        [RTAX_QUICKACK]           = BUILD_POLICY(U32),
+        [RTAX_CC_ALGO]            = BUILD_POLICY(STRING),
+        [RTAX_FASTOPEN_NO_COOKIE] = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_route_metrics);
+
+static const NLAPolicy rtnl_route_policies[] = {
+        [RTA_DST]               = BUILD_POLICY(IN_ADDR),
+        [RTA_SRC]               = BUILD_POLICY(IN_ADDR),
+        [RTA_IIF]               = BUILD_POLICY(U32),
+        [RTA_OIF]               = BUILD_POLICY(U32),
+        [RTA_GATEWAY]           = BUILD_POLICY(IN_ADDR),
+        [RTA_PRIORITY]          = BUILD_POLICY(U32),
+        [RTA_PREFSRC]           = BUILD_POLICY(IN_ADDR),
+        [RTA_METRICS]           = BUILD_POLICY_NESTED(rtnl_route_metrics),
+        [RTA_MULTIPATH]         = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct rtnexthop)),
+        [RTA_FLOW]              = BUILD_POLICY(U32),
+        [RTA_CACHEINFO]         = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct rta_cacheinfo)),
+        [RTA_TABLE]             = BUILD_POLICY(U32),
+        [RTA_MARK]              = BUILD_POLICY(U32),
+        [RTA_MFC_STATS]         = BUILD_POLICY(U64),
+        [RTA_VIA]               = BUILD_POLICY(BINARY), /* See struct rtvia */
+        [RTA_NEWDST]            = BUILD_POLICY(U32),
+        [RTA_PREF]              = BUILD_POLICY(U8),
+        [RTA_ENCAP_TYPE]        = BUILD_POLICY(U16),
+        [RTA_ENCAP]             = { .type = NETLINK_TYPE_NESTED }, /* Multiple type systems i.e. LWTUNNEL_ENCAP_MPLS/LWTUNNEL_ENCAP_IP/LWTUNNEL_ENCAP_ILA etc... */
+        [RTA_EXPIRES]           = BUILD_POLICY(U32),
+        [RTA_UID]               = BUILD_POLICY(U32),
+        [RTA_TTL_PROPAGATE]     = BUILD_POLICY(U8),
+        [RTA_IP_PROTO]          = BUILD_POLICY(U8),
+        [RTA_SPORT]             = BUILD_POLICY(U16),
+        [RTA_DPORT]             = BUILD_POLICY(U16),
+        [RTA_NH_ID]             = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_route);
+
+static const NLAPolicy rtnl_neigh_policies[] = {
+        [NDA_DST]               = BUILD_POLICY(IN_ADDR),
+        [NDA_LLADDR]            = BUILD_POLICY(ETHER_ADDR),
+        [NDA_CACHEINFO]         = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct nda_cacheinfo)),
+        [NDA_PROBES]            = BUILD_POLICY(U32),
+        [NDA_VLAN]              = BUILD_POLICY(U16),
+        [NDA_PORT]              = BUILD_POLICY(U16),
+        [NDA_VNI]               = BUILD_POLICY(U32),
+        [NDA_IFINDEX]           = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_neigh);
+
+static const NLAPolicy rtnl_addrlabel_policies[] = {
+        [IFAL_ADDRESS]         = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [IFAL_LABEL]           = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_addrlabel);
+
+static const NLAPolicy rtnl_routing_policy_rule_policies[] = {
+        [FRA_DST]                 = BUILD_POLICY(IN_ADDR),
+        [FRA_SRC]                 = BUILD_POLICY(IN_ADDR),
+        [FRA_IIFNAME]             = BUILD_POLICY(STRING),
+        [FRA_GOTO]                = BUILD_POLICY(U32),
+        [FRA_PRIORITY]            = BUILD_POLICY(U32),
+        [FRA_FWMARK]              = BUILD_POLICY(U32),
+        [FRA_FLOW]                = BUILD_POLICY(U32),
+        [FRA_TUN_ID]              = BUILD_POLICY(U64),
+        [FRA_SUPPRESS_IFGROUP]    = BUILD_POLICY(U32),
+        [FRA_SUPPRESS_PREFIXLEN]  = BUILD_POLICY(U32),
+        [FRA_TABLE]               = BUILD_POLICY(U32),
+        [FRA_FWMASK]              = BUILD_POLICY(U32),
+        [FRA_OIFNAME]             = BUILD_POLICY(STRING),
+        [FRA_PAD]                 = BUILD_POLICY(U32),
+        [FRA_L3MDEV]              = BUILD_POLICY(U8),
+        [FRA_UID_RANGE]           = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct fib_rule_uid_range)),
+        [FRA_PROTOCOL]            = BUILD_POLICY(U8),
+        [FRA_IP_PROTO]            = BUILD_POLICY(U8),
+        [FRA_SPORT_RANGE]         = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct fib_rule_port_range)),
+        [FRA_DPORT_RANGE]         = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct fib_rule_port_range)),
+};
+
+DEFINE_POLICY_SET(rtnl_routing_policy_rule);
+
+static const NLAPolicy rtnl_nexthop_policies[] = {
+        [NHA_ID]                  = BUILD_POLICY(U32),
+        [NHA_GROUP]               = { /* array of struct nexthop_grp */ },
+        [NHA_GROUP_TYPE]          = BUILD_POLICY(U16),
+        [NHA_BLACKHOLE]           = BUILD_POLICY(FLAG),
+        [NHA_OIF]                 = BUILD_POLICY(U32),
+        [NHA_GATEWAY]             = BUILD_POLICY(IN_ADDR),
+        [NHA_ENCAP_TYPE]          = BUILD_POLICY(U16),
+        [NHA_ENCAP]               = { .type = NETLINK_TYPE_NESTED },
+        [NHA_GROUPS]              = BUILD_POLICY(FLAG),
+        [NHA_MASTER]              = BUILD_POLICY(U32),
+        [NHA_FDB]                 = BUILD_POLICY(FLAG),
+};
+
+DEFINE_POLICY_SET(rtnl_nexthop);
+
+static const NLAPolicy rtnl_tca_option_data_cake_policies[] = {
+        [TCA_CAKE_BASE_RATE64]   = BUILD_POLICY(U64),
+        [TCA_CAKE_DIFFSERV_MODE] = BUILD_POLICY(U32),
+        [TCA_CAKE_ATM]           = BUILD_POLICY(U32),
+        [TCA_CAKE_FLOW_MODE]     = BUILD_POLICY(U32),
+        [TCA_CAKE_OVERHEAD]      = BUILD_POLICY(S32),
+        [TCA_CAKE_RTT]           = BUILD_POLICY(U32),
+        [TCA_CAKE_TARGET]        = BUILD_POLICY(U32),
+        [TCA_CAKE_AUTORATE]      = BUILD_POLICY(U32),
+        [TCA_CAKE_MEMORY]        = BUILD_POLICY(U32),
+        [TCA_CAKE_NAT]           = BUILD_POLICY(U32),
+        [TCA_CAKE_RAW]           = BUILD_POLICY(U32),
+        [TCA_CAKE_WASH]          = BUILD_POLICY(U32),
+        [TCA_CAKE_MPU]           = BUILD_POLICY(U32),
+        [TCA_CAKE_INGRESS]       = BUILD_POLICY(U32),
+        [TCA_CAKE_ACK_FILTER]    = BUILD_POLICY(U32),
+        [TCA_CAKE_SPLIT_GSO]     = BUILD_POLICY(U32),
+        [TCA_CAKE_FWMARK]        = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_codel_policies[] = {
+        [TCA_CODEL_TARGET]        = BUILD_POLICY(U32),
+        [TCA_CODEL_LIMIT]         = BUILD_POLICY(U32),
+        [TCA_CODEL_INTERVAL]      = BUILD_POLICY(U32),
+        [TCA_CODEL_ECN]           = BUILD_POLICY(U32),
+        [TCA_CODEL_CE_THRESHOLD]  = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_drr_policies[] = {
+        [TCA_DRR_QUANTUM] = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_ets_quanta_policies[] = {
+        [TCA_ETS_QUANTA_BAND] = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_tca_option_data_ets_quanta);
+
+static const NLAPolicy rtnl_tca_option_data_ets_prio_policies[] = {
+        [TCA_ETS_PRIOMAP_BAND] = BUILD_POLICY(U8),
+};
+
+DEFINE_POLICY_SET(rtnl_tca_option_data_ets_prio);
+
+static const NLAPolicy rtnl_tca_option_data_ets_policies[] = {
+        [TCA_ETS_NBANDS]      = BUILD_POLICY(U8),
+        [TCA_ETS_NSTRICT]     = BUILD_POLICY(U8),
+        [TCA_ETS_QUANTA]      = BUILD_POLICY_NESTED(rtnl_tca_option_data_ets_quanta),
+        [TCA_ETS_PRIOMAP]     = BUILD_POLICY_NESTED(rtnl_tca_option_data_ets_prio),
+        [TCA_ETS_QUANTA_BAND] = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_fq_policies[] = {
+        [TCA_FQ_PLIMIT]             = BUILD_POLICY(U32),
+        [TCA_FQ_FLOW_PLIMIT]        = BUILD_POLICY(U32),
+        [TCA_FQ_QUANTUM]            = BUILD_POLICY(U32),
+        [TCA_FQ_INITIAL_QUANTUM]    = BUILD_POLICY(U32),
+        [TCA_FQ_RATE_ENABLE]        = BUILD_POLICY(U32),
+        [TCA_FQ_FLOW_DEFAULT_RATE]  = BUILD_POLICY(U32),
+        [TCA_FQ_FLOW_MAX_RATE]      = BUILD_POLICY(U32),
+        [TCA_FQ_BUCKETS_LOG]        = BUILD_POLICY(U32),
+        [TCA_FQ_FLOW_REFILL_DELAY]  = BUILD_POLICY(U32),
+        [TCA_FQ_LOW_RATE_THRESHOLD] = BUILD_POLICY(U32),
+        [TCA_FQ_CE_THRESHOLD]       = BUILD_POLICY(U32),
+        [TCA_FQ_ORPHAN_MASK]        = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_fq_codel_policies[] = {
+        [TCA_FQ_CODEL_TARGET]          = BUILD_POLICY(U32),
+        [TCA_FQ_CODEL_LIMIT]           = BUILD_POLICY(U32),
+        [TCA_FQ_CODEL_INTERVAL]        = BUILD_POLICY(U32),
+        [TCA_FQ_CODEL_ECN]             = BUILD_POLICY(U32),
+        [TCA_FQ_CODEL_FLOWS]           = BUILD_POLICY(U32),
+        [TCA_FQ_CODEL_QUANTUM]         = BUILD_POLICY(U32),
+        [TCA_FQ_CODEL_CE_THRESHOLD]    = BUILD_POLICY(U32),
+        [TCA_FQ_CODEL_DROP_BATCH_SIZE] = BUILD_POLICY(U32),
+        [TCA_FQ_CODEL_MEMORY_LIMIT]    = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_fq_pie_policies[] = {
+        [TCA_FQ_PIE_LIMIT]   = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_gred_policies[] = {
+        [TCA_GRED_DPS] = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct tc_gred_sopt)),
+};
+
+static const NLAPolicy rtnl_tca_option_data_hhf_policies[] = {
+        [TCA_HHF_BACKLOG_LIMIT] = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_htb_policies[] = {
+        [TCA_HTB_PARMS]  = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct tc_htb_opt)),
+        [TCA_HTB_INIT]   = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct tc_htb_glob)),
+        [TCA_HTB_CTAB]   = BUILD_POLICY_WITH_SIZE(BINARY, TC_RTAB_SIZE),
+        [TCA_HTB_RTAB]   = BUILD_POLICY_WITH_SIZE(BINARY, TC_RTAB_SIZE),
+        [TCA_HTB_RATE64] = BUILD_POLICY(U64),
+        [TCA_HTB_CEIL64] = BUILD_POLICY(U64),
+};
+
+static const NLAPolicy rtnl_tca_option_data_pie_policies[] = {
+        [TCA_PIE_LIMIT]   = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_qfq_policies[] = {
+        [TCA_QFQ_WEIGHT] = BUILD_POLICY(U32),
+        [TCA_QFQ_LMAX]   = BUILD_POLICY(U32),
+};
+
+static const NLAPolicy rtnl_tca_option_data_sfb_policies[] = {
+        [TCA_SFB_PARMS] = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct tc_sfb_qopt)),
+};
+
+static const NLAPolicy rtnl_tca_option_data_tbf_policies[] = {
+        [TCA_TBF_PARMS]   = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct tc_tbf_qopt)),
+        [TCA_TBF_RTAB]    = BUILD_POLICY_WITH_SIZE(BINARY, TC_RTAB_SIZE),
+        [TCA_TBF_PTAB]    = BUILD_POLICY_WITH_SIZE(BINARY, TC_RTAB_SIZE),
+        [TCA_TBF_RATE64]  = BUILD_POLICY(U64),
+        [TCA_TBF_PRATE64] = BUILD_POLICY(U64),
+        [TCA_TBF_BURST]   = BUILD_POLICY(U32),
+        [TCA_TBF_PBURST]  = BUILD_POLICY(U32),
+};
+
+static const NLAPolicySetUnionElement rtnl_tca_option_data_policy_set_union_elements[] = {
+        BUILD_UNION_ELEMENT_BY_STRING("cake",     rtnl_tca_option_data_cake),
+        BUILD_UNION_ELEMENT_BY_STRING("codel",    rtnl_tca_option_data_codel),
+        BUILD_UNION_ELEMENT_BY_STRING("drr",      rtnl_tca_option_data_drr),
+        BUILD_UNION_ELEMENT_BY_STRING("ets",      rtnl_tca_option_data_ets),
+        BUILD_UNION_ELEMENT_BY_STRING("fq",       rtnl_tca_option_data_fq),
+        BUILD_UNION_ELEMENT_BY_STRING("fq_codel", rtnl_tca_option_data_fq_codel),
+        BUILD_UNION_ELEMENT_BY_STRING("fq_pie",   rtnl_tca_option_data_fq_pie),
+        BUILD_UNION_ELEMENT_BY_STRING("gred",     rtnl_tca_option_data_gred),
+        BUILD_UNION_ELEMENT_BY_STRING("hhf",      rtnl_tca_option_data_hhf),
+        BUILD_UNION_ELEMENT_BY_STRING("htb",      rtnl_tca_option_data_htb),
+        BUILD_UNION_ELEMENT_BY_STRING("pie",      rtnl_tca_option_data_pie),
+        BUILD_UNION_ELEMENT_BY_STRING("qfq",      rtnl_tca_option_data_qfq),
+        BUILD_UNION_ELEMENT_BY_STRING("sfb",      rtnl_tca_option_data_sfb),
+        BUILD_UNION_ELEMENT_BY_STRING("tbf",      rtnl_tca_option_data_tbf),
+};
+
+DEFINE_POLICY_SET_UNION(rtnl_tca_option_data, TCA_KIND);
+
+static const NLAPolicy rtnl_tca_policies[] = {
+        [TCA_KIND]           = BUILD_POLICY(STRING),
+        [TCA_OPTIONS]        = BUILD_POLICY_NESTED_UNION_BY_STRING(rtnl_tca_option_data),
+        [TCA_INGRESS_BLOCK]  = BUILD_POLICY(U32),
+        [TCA_EGRESS_BLOCK]   = BUILD_POLICY(U32),
+};
+
+DEFINE_POLICY_SET(rtnl_tca);
+
+static const NLAPolicy rtnl_mdb_policies[] = {
+        [MDBA_SET_ENTRY]     = BUILD_POLICY_WITH_SIZE(BINARY, sizeof(struct br_port_msg)),
+};
+
+DEFINE_POLICY_SET(rtnl_mdb);
+
+static const NLAPolicy rtnl_policies[] = {
+        [RTM_NEWLINK]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+        [RTM_DELLINK]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+        [RTM_GETLINK]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+        [RTM_SETLINK]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+        [RTM_NEWLINKPROP]  = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+        [RTM_DELLINKPROP]  = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+        [RTM_GETLINKPROP]  = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_link, sizeof(struct ifinfomsg)),
+        [RTM_NEWADDR]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_address, sizeof(struct ifaddrmsg)),
+        [RTM_DELADDR]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_address, sizeof(struct ifaddrmsg)),
+        [RTM_GETADDR]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_address, sizeof(struct ifaddrmsg)),
+        [RTM_NEWROUTE]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_route, sizeof(struct rtmsg)),
+        [RTM_DELROUTE]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_route, sizeof(struct rtmsg)),
+        [RTM_GETROUTE]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_route, sizeof(struct rtmsg)),
+        [RTM_NEWNEIGH]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_neigh, sizeof(struct ndmsg)),
+        [RTM_DELNEIGH]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_neigh, sizeof(struct ndmsg)),
+        [RTM_GETNEIGH]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_neigh, sizeof(struct ndmsg)),
+        [RTM_NEWADDRLABEL] = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_addrlabel, sizeof(struct ifaddrlblmsg)),
+        [RTM_DELADDRLABEL] = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_addrlabel, sizeof(struct ifaddrlblmsg)),
+        [RTM_GETADDRLABEL] = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_addrlabel, sizeof(struct ifaddrlblmsg)),
+        [RTM_NEWRULE]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_routing_policy_rule, sizeof(struct fib_rule_hdr)),
+        [RTM_DELRULE]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_routing_policy_rule, sizeof(struct fib_rule_hdr)),
+        [RTM_GETRULE]      = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_routing_policy_rule, sizeof(struct fib_rule_hdr)),
+        [RTM_NEWNEXTHOP]   = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_nexthop, sizeof(struct nhmsg)),
+        [RTM_DELNEXTHOP]   = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_nexthop, sizeof(struct nhmsg)),
+        [RTM_GETNEXTHOP]   = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_nexthop, sizeof(struct nhmsg)),
+        [RTM_NEWQDISC]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_tca, sizeof(struct tcmsg)),
+        [RTM_DELQDISC]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_tca, sizeof(struct tcmsg)),
+        [RTM_GETQDISC]     = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_tca, sizeof(struct tcmsg)),
+        [RTM_NEWTCLASS]    = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_tca, sizeof(struct tcmsg)),
+        [RTM_DELTCLASS]    = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_tca, sizeof(struct tcmsg)),
+        [RTM_GETTCLASS]    = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_tca, sizeof(struct tcmsg)),
+        [RTM_NEWMDB]       = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_mdb, sizeof(struct br_port_msg)),
+        [RTM_DELMDB]       = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_mdb, sizeof(struct br_port_msg)),
+        [RTM_GETMDB]       = BUILD_POLICY_NESTED_WITH_SIZE(rtnl_mdb, sizeof(struct br_port_msg)),
+};
+
+DEFINE_POLICY_SET(rtnl);
+
+const NLAPolicy *rtnl_get_policy(uint16_t nlmsg_type) {
+        return policy_set_get_policy(&rtnl_policy_set, nlmsg_type);
+}
diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c
index beb926d..21ef80c 100644
--- a/src/libsystemd/sd-netlink/netlink-types.c
+++ b/src/libsystemd/sd-netlink/netlink-types.c
@@ -1,1852 +1,153 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <netinet/in.h>
-#include <stdint.h>
-#include <sys/socket.h>
-#include <linux/can/vxcan.h>
 #include <linux/netlink.h>
-#include <linux/rtnetlink.h>
-#include <linux/genetlink.h>
-#include <linux/ip.h>
-#include <linux/if.h>
-#include <linux/batman_adv.h>
-#include <linux/can/netlink.h>
-#include <linux/fib_rules.h>
-#include <linux/fou.h>
-#include <linux/if_addr.h>
-#include <linux/if_addrlabel.h>
-#include <linux/if_bridge.h>
-#include <linux/if_link.h>
-#include <linux/if_macsec.h>
-#include <linux/if_tunnel.h>
-#include <linux/l2tp.h>
-#include <linux/netfilter/nf_tables.h>
-#include <linux/netfilter/nfnetlink.h>
-#include <linux/nexthop.h>
-#include <linux/nl80211.h>
-#include <linux/pkt_sched.h>
-#include <linux/veth.h>
-#include <linux/wireguard.h>
 
-#include "sd-netlink.h"
-
-#include "generic-netlink.h"
-#include "hashmap.h"
-#include "macro.h"
+#include "netlink-genl.h"
 #include "netlink-internal.h"
-#include "netlink-types.h"
-#include "string-table.h"
-#include "util.h"
+#include "netlink-types-internal.h"
 
-/* Maximum ARP IP target defined in kernel */
-#define BOND_MAX_ARP_TARGETS    16
-
-typedef enum {
-        BOND_ARP_TARGETS_0,
-        BOND_ARP_TARGETS_1,
-        BOND_ARP_TARGETS_2,
-        BOND_ARP_TARGETS_3,
-        BOND_ARP_TARGETS_4,
-        BOND_ARP_TARGETS_5,
-        BOND_ARP_TARGETS_6,
-        BOND_ARP_TARGETS_7,
-        BOND_ARP_TARGETS_8,
-        BOND_ARP_TARGETS_9,
-        BOND_ARP_TARGETS_10,
-        BOND_ARP_TARGETS_11,
-        BOND_ARP_TARGETS_12,
-        BOND_ARP_TARGETS_13,
-        BOND_ARP_TARGETS_14,
-        BOND_ARP_TARGETS_MAX = BOND_MAX_ARP_TARGETS,
-} BondArpTargets;
-
-struct NLType {
-        uint16_t type;
-        size_t size;
-        const NLTypeSystem *type_system;
-        const NLTypeSystemUnion *type_system_union;
-};
-
-struct NLTypeSystem {
-        uint16_t count;
-        const NLType *types;
-};
-
-static const NLTypeSystem rtnl_link_type_system;
-
-static const NLType empty_types[1] = {
+static const NLAPolicy empty_policies[1] = {
         /* fake array to avoid .types==NULL, which denotes invalid type-systems */
 };
 
-static const NLTypeSystem empty_type_system = {
-        .count = 0,
-        .types = empty_types,
-};
+DEFINE_POLICY_SET(empty);
 
-static const NLType rtnl_link_info_data_batadv_types[] = {
-        [IFLA_BATADV_ALGO_NAME] = { .type = NETLINK_TYPE_STRING, .size = 20 },
+static const NLAPolicy error_policies[] = {
+        [NLMSGERR_ATTR_MSG]  = BUILD_POLICY(STRING),
+        [NLMSGERR_ATTR_OFFS] = BUILD_POLICY(U32),
 };
 
-static const NLType rtnl_link_info_data_veth_types[] = {
-        [VETH_INFO_PEER]  = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
-};
+DEFINE_POLICY_SET(error);
 
-static const NLType rtnl_link_info_data_vxcan_types[] = {
-        [VXCAN_INFO_PEER]  = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
+static const NLAPolicy basic_policies[] = {
+        [NLMSG_DONE]  = BUILD_POLICY_NESTED(empty),
+        [NLMSG_ERROR] = BUILD_POLICY_NESTED_WITH_SIZE(error, sizeof(struct nlmsgerr)),
 };
 
-static const NLType rtnl_link_info_data_ipvlan_types[] = {
-        [IFLA_IPVLAN_MODE]  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_IPVLAN_FLAGS]  = { .type = NETLINK_TYPE_U16 },
-};
+DEFINE_POLICY_SET(basic);
 
-static const NLType rtnl_macvlan_macaddr_types[] = {
-        [IFLA_MACVLAN_MACADDR] = { .type = NETLINK_TYPE_ETHER_ADDR },
-};
-
-static const NLTypeSystem rtnl_macvlan_macaddr_type_system = {
-        .count = ELEMENTSOF(rtnl_macvlan_macaddr_types),
-        .types = rtnl_macvlan_macaddr_types,
-};
-
-static const NLType rtnl_link_info_data_macvlan_types[] = {
-        [IFLA_MACVLAN_MODE]              = { .type = NETLINK_TYPE_U32 },
-        [IFLA_MACVLAN_FLAGS]             = { .type = NETLINK_TYPE_U16 },
-        [IFLA_MACVLAN_MACADDR_MODE]      = { .type = NETLINK_TYPE_U32 },
-        [IFLA_MACVLAN_MACADDR_DATA]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_macvlan_macaddr_type_system },
-        [IFLA_MACVLAN_MACADDR_COUNT]     = { .type = NETLINK_TYPE_U32 },
-        [IFLA_MACVLAN_BC_QUEUE_LEN]      = { .type = NETLINK_TYPE_U32 },
-        [IFLA_MACVLAN_BC_QUEUE_LEN_USED] = { .type = NETLINK_TYPE_REJECT },
-};
-
-static const NLType rtnl_link_info_data_bridge_types[] = {
-        [IFLA_BR_FORWARD_DELAY]              = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BR_HELLO_TIME]                 = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BR_MAX_AGE]                    = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BR_AGEING_TIME]                = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BR_STP_STATE]                  = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BR_PRIORITY]                   = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_VLAN_FILTERING]             = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_VLAN_PROTOCOL]              = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_GROUP_FWD_MASK]             = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_ROOT_PORT]                  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_ROOT_PATH_COST]             = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BR_TOPOLOGY_CHANGE]            = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_TOPOLOGY_CHANGE_DETECTED]   = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_HELLO_TIMER]                = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_TCN_TIMER]                  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_TOPOLOGY_CHANGE_TIMER]      = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_GC_TIMER]                   = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BR_GROUP_ADDR]                 = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_FDB_FLUSH]                  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_MCAST_ROUTER]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_MCAST_SNOOPING]             = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_MCAST_QUERY_USE_IFADDR]     = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_MCAST_QUERIER]              = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_MCAST_HASH_ELASTICITY]      = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BR_MCAST_HASH_MAX]             = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_MCAST_LAST_MEMBER_CNT]      = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BR_MCAST_STARTUP_QUERY_CNT]    = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_MCAST_LAST_MEMBER_INTVL]    = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BR_MCAST_MEMBERSHIP_INTVL]     = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BR_MCAST_QUERIER_INTVL]        = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BR_MCAST_QUERY_INTVL]          = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BR_MCAST_QUERY_RESPONSE_INTVL] = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BR_MCAST_STARTUP_QUERY_INTVL]  = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BR_NF_CALL_IPTABLES]           = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_NF_CALL_IP6TABLES]          = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_NF_CALL_ARPTABLES]          = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BR_VLAN_DEFAULT_PVID]          = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BR_MCAST_IGMP_VERSION]         = { .type = NETLINK_TYPE_U8 },
-};
-
-static const NLType rtnl_vlan_qos_map_types[] = {
-        [IFLA_VLAN_QOS_MAPPING]        = { .size = sizeof(struct ifla_vlan_qos_mapping) },
-};
-
-static const NLTypeSystem rtnl_vlan_qos_map_type_system = {
-        .count = ELEMENTSOF(rtnl_vlan_qos_map_types),
-        .types = rtnl_vlan_qos_map_types,
-};
-
-static const NLType rtnl_link_info_data_vlan_types[] = {
-        [IFLA_VLAN_ID]          = { .type = NETLINK_TYPE_U16 },
-        [IFLA_VLAN_FLAGS]       = { .size = sizeof(struct ifla_vlan_flags) },
-        [IFLA_VLAN_EGRESS_QOS]  = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_vlan_qos_map_type_system },
-        [IFLA_VLAN_INGRESS_QOS] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_vlan_qos_map_type_system },
-        [IFLA_VLAN_PROTOCOL]    = { .type = NETLINK_TYPE_U16 },
-};
-
-static const NLType rtnl_link_info_data_vxlan_types[] = {
-        [IFLA_VXLAN_ID]                = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VXLAN_GROUP]             = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_VXLAN_LINK]              = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VXLAN_LOCAL]             = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_VXLAN_TTL]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_TOS]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_LEARNING]          = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_AGEING]            = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VXLAN_LIMIT]             = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VXLAN_PORT_RANGE]        = { .type = NETLINK_TYPE_U32},
-        [IFLA_VXLAN_PROXY]             = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_RSC]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_L2MISS]            = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_L3MISS]            = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_PORT]              = { .type = NETLINK_TYPE_U16 },
-        [IFLA_VXLAN_GROUP6]            = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_VXLAN_LOCAL6]            = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_VXLAN_UDP_CSUM]          = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_UDP_ZERO_CSUM6_TX] = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_UDP_ZERO_CSUM6_RX] = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_REMCSUM_TX]        = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_REMCSUM_RX]        = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_GBP]               = { .type = NETLINK_TYPE_FLAG },
-        [IFLA_VXLAN_REMCSUM_NOPARTIAL] = { .type = NETLINK_TYPE_FLAG },
-        [IFLA_VXLAN_COLLECT_METADATA]  = { .type = NETLINK_TYPE_U8 },
-        [IFLA_VXLAN_LABEL]             = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VXLAN_GPE]               = { .type = NETLINK_TYPE_FLAG },
-        [IFLA_VXLAN_TTL_INHERIT]       = { .type = NETLINK_TYPE_FLAG },
-        [IFLA_VXLAN_DF]                = { .type = NETLINK_TYPE_U8 },
-};
-
-static const NLType rtnl_bond_arp_target_types[] = {
-        [BOND_ARP_TARGETS_0]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_1]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_2]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_3]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_4]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_5]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_6]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_7]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_8]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_9]        = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_10]       = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_11]       = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_12]       = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_13]       = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_14]       = { .type = NETLINK_TYPE_U32 },
-        [BOND_ARP_TARGETS_MAX]      = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem rtnl_bond_arp_type_system = {
-        .count = ELEMENTSOF(rtnl_bond_arp_target_types),
-        .types = rtnl_bond_arp_target_types,
-};
-
-static const NLType rtnl_link_info_data_bond_types[] = {
-        [IFLA_BOND_MODE]                = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_ACTIVE_SLAVE]        = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_MIIMON]              = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_UPDELAY]             = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_DOWNDELAY]           = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_USE_CARRIER]         = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_ARP_INTERVAL]        = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_ARP_IP_TARGET]       = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_bond_arp_type_system },
-        [IFLA_BOND_ARP_VALIDATE]        = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_ARP_ALL_TARGETS]     = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_PRIMARY]             = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_PRIMARY_RESELECT]    = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_FAIL_OVER_MAC]       = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_XMIT_HASH_POLICY]    = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_RESEND_IGMP]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_NUM_PEER_NOTIF]      = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_ALL_SLAVES_ACTIVE]   = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_MIN_LINKS]           = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_LP_INTERVAL]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_PACKETS_PER_SLAVE]   = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BOND_AD_LACP_RATE]        = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_AD_SELECT]           = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BOND_AD_INFO]             = { .type = NETLINK_TYPE_NESTED },
-        [IFLA_BOND_AD_ACTOR_SYS_PRIO]   = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BOND_AD_USER_PORT_KEY]    = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BOND_AD_ACTOR_SYSTEM]     = { .type = NETLINK_TYPE_ETHER_ADDR },
-        [IFLA_BOND_TLB_DYNAMIC_LB]      = { .type = NETLINK_TYPE_U8 },
-};
-
-static const NLType rtnl_link_info_data_iptun_types[] = {
-        [IFLA_IPTUN_LINK]                = { .type = NETLINK_TYPE_U32 },
-        [IFLA_IPTUN_LOCAL]               = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_IPTUN_REMOTE]              = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_IPTUN_TTL]                 = { .type = NETLINK_TYPE_U8 },
-        [IFLA_IPTUN_TOS]                 = { .type = NETLINK_TYPE_U8 },
-        [IFLA_IPTUN_PMTUDISC]            = { .type = NETLINK_TYPE_U8 },
-        [IFLA_IPTUN_FLAGS]               = { .type = NETLINK_TYPE_U16 },
-        [IFLA_IPTUN_PROTO]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_IPTUN_6RD_PREFIX]          = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_IPTUN_6RD_RELAY_PREFIX]    = { .type = NETLINK_TYPE_U32 },
-        [IFLA_IPTUN_6RD_PREFIXLEN]       = { .type = NETLINK_TYPE_U16 },
-        [IFLA_IPTUN_6RD_RELAY_PREFIXLEN] = { .type = NETLINK_TYPE_U16 },
-        [IFLA_IPTUN_ENCAP_TYPE]          = { .type = NETLINK_TYPE_U16 },
-        [IFLA_IPTUN_ENCAP_FLAGS]         = { .type = NETLINK_TYPE_U16 },
-        [IFLA_IPTUN_ENCAP_SPORT]         = { .type = NETLINK_TYPE_U16 },
-        [IFLA_IPTUN_ENCAP_DPORT]         = { .type = NETLINK_TYPE_U16 },
-};
-
-static  const NLType rtnl_link_info_data_ipgre_types[] = {
-        [IFLA_GRE_LINK]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GRE_IFLAGS]       = { .type = NETLINK_TYPE_U16 },
-        [IFLA_GRE_OFLAGS]       = { .type = NETLINK_TYPE_U16 },
-        [IFLA_GRE_IKEY]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GRE_OKEY]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GRE_LOCAL]        = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_GRE_REMOTE]       = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_GRE_TTL]          = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GRE_TOS]          = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GRE_PMTUDISC]     = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GRE_FLOWINFO]     = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GRE_FLAGS]        = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GRE_ENCAP_TYPE]   = { .type = NETLINK_TYPE_U16 },
-        [IFLA_GRE_ENCAP_FLAGS]  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_GRE_ENCAP_SPORT]  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_GRE_ENCAP_DPORT]  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_GRE_ERSPAN_INDEX] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_link_info_data_ipvti_types[] = {
-        [IFLA_VTI_LINK]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VTI_IKEY]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VTI_OKEY]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VTI_LOCAL]        = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_VTI_REMOTE]       = { .type = NETLINK_TYPE_IN_ADDR },
-};
-
-static const NLType rtnl_link_info_data_ip6tnl_types[] = {
-        [IFLA_IPTUN_LINK]                = { .type = NETLINK_TYPE_U32 },
-        [IFLA_IPTUN_LOCAL]               = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_IPTUN_REMOTE]              = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_IPTUN_TTL]                 = { .type = NETLINK_TYPE_U8 },
-        [IFLA_IPTUN_FLAGS]               = { .type = NETLINK_TYPE_U32 },
-        [IFLA_IPTUN_PROTO]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_IPTUN_ENCAP_LIMIT]         = { .type = NETLINK_TYPE_U8 },
-        [IFLA_IPTUN_FLOWINFO]            = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_link_info_data_vrf_types[] = {
-        [IFLA_VRF_TABLE]                 = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_link_info_data_geneve_types[] = {
-        [IFLA_GENEVE_ID]                = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GENEVE_TTL]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GENEVE_TOS]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GENEVE_PORT]              = { .type = NETLINK_TYPE_U16 },
-        [IFLA_GENEVE_REMOTE]            = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_GENEVE_REMOTE6]           = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_GENEVE_UDP_CSUM]          = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GENEVE_UDP_ZERO_CSUM6_TX] = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GENEVE_UDP_ZERO_CSUM6_RX] = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GENEVE_LABEL]             = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GENEVE_TTL_INHERIT]       = { .type = NETLINK_TYPE_U8 },
-        [IFLA_GENEVE_DF]                = { .type = NETLINK_TYPE_U8 },
-};
-
-static const NLType rtnl_link_info_data_can_types[] = {
-        [IFLA_CAN_BITTIMING]            = { .size = sizeof(struct can_bittiming) },
-        [IFLA_CAN_RESTART_MS]           = { .type = NETLINK_TYPE_U32 },
-        [IFLA_CAN_CTRLMODE]             = { .size = sizeof(struct can_ctrlmode) },
-        [IFLA_CAN_TERMINATION]          = { .type = NETLINK_TYPE_U16 },
-};
-
-static const NLType rtnl_link_info_data_macsec_types[] = {
-        [IFLA_MACSEC_SCI]            = { .type = NETLINK_TYPE_U64 },
-        [IFLA_MACSEC_PORT]           = { .type = NETLINK_TYPE_U16 },
-        [IFLA_MACSEC_ICV_LEN]        = { .type = NETLINK_TYPE_U8 },
-        [IFLA_MACSEC_CIPHER_SUITE]   = { .type = NETLINK_TYPE_U64 },
-        [IFLA_MACSEC_WINDOW]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_MACSEC_ENCODING_SA]    = { .type = NETLINK_TYPE_U8 },
-        [IFLA_MACSEC_ENCRYPT]        = { .type = NETLINK_TYPE_U8 },
-        [IFLA_MACSEC_PROTECT]        = { .type = NETLINK_TYPE_U8 },
-        [IFLA_MACSEC_INC_SCI]        = { .type = NETLINK_TYPE_U8 },
-        [IFLA_MACSEC_ES]             = { .type = NETLINK_TYPE_U8 },
-        [IFLA_MACSEC_SCB]            = { .type = NETLINK_TYPE_U8 },
-        [IFLA_MACSEC_REPLAY_PROTECT] = { .type = NETLINK_TYPE_U8 },
-        [IFLA_MACSEC_VALIDATION]     = { .type = NETLINK_TYPE_U8 },
-};
-
-static const NLType rtnl_link_info_data_xfrm_types[] = {
-        [IFLA_XFRM_LINK]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_XFRM_IF_ID]        = { .type = NETLINK_TYPE_U32 }
-};
-
-static const NLType rtnl_link_info_data_bareudp_types[] = {
-        [IFLA_BAREUDP_PORT]            = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BAREUDP_ETHERTYPE]       = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BAREUDP_SRCPORT_MIN]     = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BAREUDP_MULTIPROTO_MODE] = { .type = NETLINK_TYPE_FLAG },
-};
-
-/* these strings must match the .kind entries in the kernel */
-static const char* const nl_union_link_info_data_table[] = {
-        [NL_UNION_LINK_INFO_DATA_BOND] = "bond",
-        [NL_UNION_LINK_INFO_DATA_BRIDGE] = "bridge",
-        [NL_UNION_LINK_INFO_DATA_VLAN] = "vlan",
-        [NL_UNION_LINK_INFO_DATA_VETH] = "veth",
-        [NL_UNION_LINK_INFO_DATA_DUMMY] = "dummy",
-        [NL_UNION_LINK_INFO_DATA_MACVLAN] = "macvlan",
-        [NL_UNION_LINK_INFO_DATA_MACVTAP] = "macvtap",
-        [NL_UNION_LINK_INFO_DATA_IPVLAN] = "ipvlan",
-        [NL_UNION_LINK_INFO_DATA_IPVTAP] = "ipvtap",
-        [NL_UNION_LINK_INFO_DATA_VXLAN] = "vxlan",
-        [NL_UNION_LINK_INFO_DATA_IPIP_TUNNEL] = "ipip",
-        [NL_UNION_LINK_INFO_DATA_IPGRE_TUNNEL] = "gre",
-        [NL_UNION_LINK_INFO_DATA_ERSPAN] = "erspan",
-        [NL_UNION_LINK_INFO_DATA_IPGRETAP_TUNNEL] = "gretap",
-        [NL_UNION_LINK_INFO_DATA_IP6GRE_TUNNEL] = "ip6gre",
-        [NL_UNION_LINK_INFO_DATA_IP6GRETAP_TUNNEL] = "ip6gretap",
-        [NL_UNION_LINK_INFO_DATA_SIT_TUNNEL] = "sit",
-        [NL_UNION_LINK_INFO_DATA_VTI_TUNNEL] = "vti",
-        [NL_UNION_LINK_INFO_DATA_VTI6_TUNNEL] = "vti6",
-        [NL_UNION_LINK_INFO_DATA_IP6TNL_TUNNEL] = "ip6tnl",
-        [NL_UNION_LINK_INFO_DATA_VRF] = "vrf",
-        [NL_UNION_LINK_INFO_DATA_VCAN] = "vcan",
-        [NL_UNION_LINK_INFO_DATA_GENEVE] = "geneve",
-        [NL_UNION_LINK_INFO_DATA_VXCAN] = "vxcan",
-        [NL_UNION_LINK_INFO_DATA_WIREGUARD] = "wireguard",
-        [NL_UNION_LINK_INFO_DATA_NETDEVSIM] = "netdevsim",
-        [NL_UNION_LINK_INFO_DATA_CAN] = "can",
-        [NL_UNION_LINK_INFO_DATA_MACSEC] = "macsec",
-        [NL_UNION_LINK_INFO_DATA_NLMON] = "nlmon",
-        [NL_UNION_LINK_INFO_DATA_XFRM] = "xfrm",
-        [NL_UNION_LINK_INFO_DATA_IFB] = "ifb",
-        [NL_UNION_LINK_INFO_DATA_BAREUDP] = "bareudp",
-        [NL_UNION_LINK_INFO_DATA_BATADV] = "batadv",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(nl_union_link_info_data, NLUnionLinkInfoData);
-
-static const NLTypeSystem rtnl_link_info_data_type_systems[] = {
-        [NL_UNION_LINK_INFO_DATA_BOND] =             { .count = ELEMENTSOF(rtnl_link_info_data_bond_types),
-                                                       .types = rtnl_link_info_data_bond_types },
-        [NL_UNION_LINK_INFO_DATA_BRIDGE] =           { .count = ELEMENTSOF(rtnl_link_info_data_bridge_types),
-                                                       .types = rtnl_link_info_data_bridge_types },
-        [NL_UNION_LINK_INFO_DATA_VLAN] =             { .count = ELEMENTSOF(rtnl_link_info_data_vlan_types),
-                                                       .types = rtnl_link_info_data_vlan_types },
-        [NL_UNION_LINK_INFO_DATA_VETH] =             { .count = ELEMENTSOF(rtnl_link_info_data_veth_types),
-                                                       .types = rtnl_link_info_data_veth_types },
-        [NL_UNION_LINK_INFO_DATA_MACVLAN] =          { .count = ELEMENTSOF(rtnl_link_info_data_macvlan_types),
-                                                       .types = rtnl_link_info_data_macvlan_types },
-        [NL_UNION_LINK_INFO_DATA_MACVTAP] =          { .count = ELEMENTSOF(rtnl_link_info_data_macvlan_types),
-                                                       .types = rtnl_link_info_data_macvlan_types },
-        [NL_UNION_LINK_INFO_DATA_IPVLAN] =           { .count = ELEMENTSOF(rtnl_link_info_data_ipvlan_types),
-                                                       .types = rtnl_link_info_data_ipvlan_types },
-        [NL_UNION_LINK_INFO_DATA_IPVTAP] =           { .count = ELEMENTSOF(rtnl_link_info_data_ipvlan_types),
-                                                       .types = rtnl_link_info_data_ipvlan_types },
-        [NL_UNION_LINK_INFO_DATA_VXLAN] =            { .count = ELEMENTSOF(rtnl_link_info_data_vxlan_types),
-                                                       .types = rtnl_link_info_data_vxlan_types },
-        [NL_UNION_LINK_INFO_DATA_IPIP_TUNNEL] =      { .count = ELEMENTSOF(rtnl_link_info_data_iptun_types),
-                                                       .types = rtnl_link_info_data_iptun_types },
-        [NL_UNION_LINK_INFO_DATA_IPGRE_TUNNEL] =     { .count = ELEMENTSOF(rtnl_link_info_data_ipgre_types),
-                                                       .types = rtnl_link_info_data_ipgre_types },
-        [NL_UNION_LINK_INFO_DATA_ERSPAN] =           { .count = ELEMENTSOF(rtnl_link_info_data_ipgre_types),
-                                                       .types = rtnl_link_info_data_ipgre_types },
-        [NL_UNION_LINK_INFO_DATA_IPGRETAP_TUNNEL] =  { .count = ELEMENTSOF(rtnl_link_info_data_ipgre_types),
-                                                       .types = rtnl_link_info_data_ipgre_types },
-        [NL_UNION_LINK_INFO_DATA_IP6GRE_TUNNEL] =    { .count = ELEMENTSOF(rtnl_link_info_data_ipgre_types),
-                                                       .types = rtnl_link_info_data_ipgre_types },
-        [NL_UNION_LINK_INFO_DATA_IP6GRETAP_TUNNEL] = { .count = ELEMENTSOF(rtnl_link_info_data_ipgre_types),
-                                                       .types = rtnl_link_info_data_ipgre_types },
-        [NL_UNION_LINK_INFO_DATA_SIT_TUNNEL] =       { .count = ELEMENTSOF(rtnl_link_info_data_iptun_types),
-                                                       .types = rtnl_link_info_data_iptun_types },
-        [NL_UNION_LINK_INFO_DATA_VTI_TUNNEL] =       { .count = ELEMENTSOF(rtnl_link_info_data_ipvti_types),
-                                                       .types = rtnl_link_info_data_ipvti_types },
-        [NL_UNION_LINK_INFO_DATA_VTI6_TUNNEL] =      { .count = ELEMENTSOF(rtnl_link_info_data_ipvti_types),
-                                                       .types = rtnl_link_info_data_ipvti_types },
-        [NL_UNION_LINK_INFO_DATA_IP6TNL_TUNNEL] =    { .count = ELEMENTSOF(rtnl_link_info_data_ip6tnl_types),
-                                                       .types = rtnl_link_info_data_ip6tnl_types },
-        [NL_UNION_LINK_INFO_DATA_VRF] =              { .count = ELEMENTSOF(rtnl_link_info_data_vrf_types),
-                                                       .types = rtnl_link_info_data_vrf_types },
-        [NL_UNION_LINK_INFO_DATA_GENEVE] =           { .count = ELEMENTSOF(rtnl_link_info_data_geneve_types),
-                                                       .types = rtnl_link_info_data_geneve_types },
-        [NL_UNION_LINK_INFO_DATA_VXCAN] =            { .count = ELEMENTSOF(rtnl_link_info_data_vxcan_types),
-                                                       .types = rtnl_link_info_data_vxcan_types },
-        [NL_UNION_LINK_INFO_DATA_CAN] =              { .count = ELEMENTSOF(rtnl_link_info_data_can_types),
-                                                       .types = rtnl_link_info_data_can_types },
-        [NL_UNION_LINK_INFO_DATA_MACSEC] =           { .count = ELEMENTSOF(rtnl_link_info_data_macsec_types),
-                                                       .types = rtnl_link_info_data_macsec_types },
-        [NL_UNION_LINK_INFO_DATA_XFRM] =             { .count = ELEMENTSOF(rtnl_link_info_data_xfrm_types),
-                                                       .types = rtnl_link_info_data_xfrm_types },
-        [NL_UNION_LINK_INFO_DATA_BAREUDP] =          { .count = ELEMENTSOF(rtnl_link_info_data_bareudp_types),
-                                                       .types = rtnl_link_info_data_bareudp_types },
-        [NL_UNION_LINK_INFO_DATA_BATADV] =           { .count = ELEMENTSOF(rtnl_link_info_data_batadv_types),
-                                                       .types = rtnl_link_info_data_batadv_types },
-};
-
-static const NLTypeSystemUnion rtnl_link_info_data_type_system_union = {
-        .num = _NL_UNION_LINK_INFO_DATA_MAX,
-        .lookup = nl_union_link_info_data_from_string,
-        .type_systems = rtnl_link_info_data_type_systems,
-        .match_type = NL_MATCH_SIBLING,
-        .match = IFLA_INFO_KIND,
-};
-
-static const NLType rtnl_link_info_types[] = {
-        [IFLA_INFO_KIND]        = { .type = NETLINK_TYPE_STRING },
-        [IFLA_INFO_DATA]        = { .type = NETLINK_TYPE_UNION, .type_system_union = &rtnl_link_info_data_type_system_union },
-/*
-        [IFLA_INFO_XSTATS],
-        [IFLA_INFO_SLAVE_KIND]  = { .type = NETLINK_TYPE_STRING },
-        [IFLA_INFO_SLAVE_DATA]  = { .type = NETLINK_TYPE_NESTED },
-*/
-};
-
-static const NLTypeSystem rtnl_link_info_type_system = {
-        .count = ELEMENTSOF(rtnl_link_info_types),
-        .types = rtnl_link_info_types,
-};
-
-static const struct NLType rtnl_prot_info_bridge_port_types[] = {
-        [IFLA_BRPORT_STATE]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_COST]                = { .type = NETLINK_TYPE_U32 },
-        [IFLA_BRPORT_PRIORITY]            = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BRPORT_MODE]                = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_GUARD]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_PROTECT]             = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_FAST_LEAVE]          = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_LEARNING]            = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_UNICAST_FLOOD]       = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_PROXYARP]            = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_LEARNING_SYNC]       = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_PROXYARP_WIFI]       = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_ROOT_ID]             = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_BRIDGE_ID]           = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_DESIGNATED_PORT]     = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BRPORT_DESIGNATED_COST]     = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BRPORT_ID]                  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BRPORT_NO]                  = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BRPORT_TOPOLOGY_CHANGE_ACK] = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_CONFIG_PENDING]      = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_MESSAGE_AGE_TIMER]   = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BRPORT_FORWARD_DELAY_TIMER] = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BRPORT_HOLD_TIMER]          = { .type = NETLINK_TYPE_U64 },
-        [IFLA_BRPORT_FLUSH]               = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_MULTICAST_ROUTER]    = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_PAD]                 = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_MCAST_FLOOD]         = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_MCAST_TO_UCAST]      = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_VLAN_TUNNEL]         = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_BCAST_FLOOD]         = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_GROUP_FWD_MASK]      = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BRPORT_NEIGH_SUPPRESS]      = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_ISOLATED]            = { .type = NETLINK_TYPE_U8 },
-        [IFLA_BRPORT_BACKUP_PORT]         = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem rtnl_prot_info_type_systems[] = {
-        [AF_BRIDGE] =   { .count = ELEMENTSOF(rtnl_prot_info_bridge_port_types),
-                          .types = rtnl_prot_info_bridge_port_types },
-};
-
-static const NLTypeSystemUnion rtnl_prot_info_type_system_union = {
-        .num = AF_MAX,
-        .type_systems = rtnl_prot_info_type_systems,
-        .match_type = NL_MATCH_PROTOCOL,
-};
-
-static const struct NLType rtnl_af_spec_inet6_types[] = {
-        [IFLA_INET6_FLAGS]              = { .type = NETLINK_TYPE_U32 },
-/*
-        IFLA_INET6_CONF,
-        IFLA_INET6_STATS,
-        IFLA_INET6_MCAST,
-        IFLA_INET6_CACHEINFO,
-        IFLA_INET6_ICMP6STATS,
-*/
-        [IFLA_INET6_TOKEN]              = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFLA_INET6_ADDR_GEN_MODE]      = { .type = NETLINK_TYPE_U8 },
-};
-
-static const NLTypeSystem rtnl_af_spec_inet6_type_system = {
-        .count = ELEMENTSOF(rtnl_af_spec_inet6_types),
-        .types = rtnl_af_spec_inet6_types,
-};
-
-static const NLType rtnl_af_spec_unspec_types[] = {
-        [AF_INET6] =    { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_af_spec_inet6_type_system },
-};
-
-static const NLType rtnl_af_spec_bridge_types[] = {
-        [IFLA_BRIDGE_FLAGS]     = { .type = NETLINK_TYPE_U16 },
-        [IFLA_BRIDGE_VLAN_INFO] = { .size = sizeof(struct bridge_vlan_info) },
-};
-
-static const NLTypeSystem rtnl_af_spec_type_systems[] = {
-        [AF_UNSPEC] = { .count = ELEMENTSOF(rtnl_af_spec_unspec_types),
-                        .types = rtnl_af_spec_unspec_types },
-        [AF_BRIDGE] = { .count = ELEMENTSOF(rtnl_af_spec_bridge_types),
-                        .types = rtnl_af_spec_bridge_types },
-};
-
-static const NLTypeSystemUnion rtnl_af_spec_type_system_union = {
-        .num = AF_MAX,
-        .type_systems = rtnl_af_spec_type_systems,
-        .match_type = NL_MATCH_PROTOCOL,
-};
-
-static const NLType rtnl_prop_list_types[] = {
-        [IFLA_ALT_IFNAME]       = { .type = NETLINK_TYPE_STRING, .size = ALTIFNAMSIZ - 1 },
-};
-
-static const NLTypeSystem rtnl_prop_list_type_system = {
-        .count = ELEMENTSOF(rtnl_prop_list_types),
-        .types = rtnl_prop_list_types,
-};
-
-static const NLType rtnl_vf_vlan_list_types[] = {
-        [IFLA_VF_VLAN_INFO]  = { .size = sizeof(struct ifla_vf_vlan_info) },
-};
-
-static const NLTypeSystem rtnl_vf_vlan_type_system = {
-        .count = ELEMENTSOF(rtnl_vf_vlan_list_types),
-        .types = rtnl_vf_vlan_list_types,
-};
-
-static const NLType rtnl_vf_vlan_info_types[] = {
-        [IFLA_VF_MAC]           = { .size = sizeof(struct ifla_vf_mac) },
-        [IFLA_VF_VLAN]          = { .size = sizeof(struct ifla_vf_vlan) },
-        [IFLA_VF_VLAN_LIST]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_vf_vlan_type_system},
-        [IFLA_VF_TX_RATE]       = { .size = sizeof(struct ifla_vf_tx_rate) },
-        [IFLA_VF_SPOOFCHK]      = { .size = sizeof(struct ifla_vf_spoofchk) },
-        [IFLA_VF_RATE]          = { .size = sizeof(struct ifla_vf_rate) },
-        [IFLA_VF_LINK_STATE]    = { .size = sizeof(struct ifla_vf_link_state) },
-        [IFLA_VF_RSS_QUERY_EN]  = { .size = sizeof(struct ifla_vf_rss_query_en) },
-        [IFLA_VF_TRUST]         = { .size = sizeof(struct ifla_vf_trust) },
-        [IFLA_VF_IB_NODE_GUID]  = { .size = sizeof(struct ifla_vf_guid) },
-        [IFLA_VF_IB_PORT_GUID]  = { .size = sizeof(struct ifla_vf_guid) },
-};
-
-static const NLTypeSystem rtnl_vf_vlan_info_type_system = {
-        .count = ELEMENTSOF(rtnl_vf_vlan_info_types),
-        .types = rtnl_vf_vlan_info_types,
-};
-
-static const NLType rtnl_link_io_srv_types[] = {
-        [IFLA_VF_INFO] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_vf_vlan_info_type_system },
-};
-
-static const NLTypeSystem rtnl_io_srv_type_system = {
-        .count = ELEMENTSOF(rtnl_link_io_srv_types),
-        .types = rtnl_link_io_srv_types,
-};
-
-static const NLType rtnl_link_types[] = {
-        [IFLA_ADDRESS]          = { .type = NETLINK_TYPE_ETHER_ADDR },
-        [IFLA_BROADCAST]        = { .type = NETLINK_TYPE_ETHER_ADDR },
-        [IFLA_IFNAME]           = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ - 1 },
-        [IFLA_MTU]              = { .type = NETLINK_TYPE_U32 },
-        [IFLA_LINK]             = { .type = NETLINK_TYPE_U32 },
-        [IFLA_QDISC]            = { .type = NETLINK_TYPE_STRING },
-        [IFLA_STATS]            = { .size = sizeof(struct rtnl_link_stats) },
-/*
-        [IFLA_COST],
-        [IFLA_PRIORITY],
-*/
-        [IFLA_MASTER]           = { .type = NETLINK_TYPE_U32 },
-/*
-        [IFLA_WIRELESS],
-*/
-        [IFLA_PROTINFO]         = { .type = NETLINK_TYPE_UNION, .type_system_union = &rtnl_prot_info_type_system_union },
-        [IFLA_TXQLEN]           = { .type = NETLINK_TYPE_U32 },
-/*
-        [IFLA_MAP]              = { .len = sizeof(struct rtnl_link_ifmap) },
-*/
-        [IFLA_WEIGHT]           = { .type = NETLINK_TYPE_U32 },
-        [IFLA_OPERSTATE]        = { .type = NETLINK_TYPE_U8 },
-        [IFLA_LINKMODE]         = { .type = NETLINK_TYPE_U8 },
-        [IFLA_LINKINFO]         = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_info_type_system },
-        [IFLA_NET_NS_PID]       = { .type = NETLINK_TYPE_U32 },
-        [IFLA_IFALIAS]          = { .type = NETLINK_TYPE_STRING, .size = IFALIASZ - 1 },
-        [IFLA_NUM_VF]           = { .type = NETLINK_TYPE_U32 },
-        [IFLA_VFINFO_LIST]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_io_srv_type_system },
-        [IFLA_STATS64]          = { .size = sizeof(struct rtnl_link_stats64) },
-/*
-        [IFLA_VF_PORTS]         = { .type = NETLINK_TYPE_NESTED },
-        [IFLA_PORT_SELF]        = { .type = NETLINK_TYPE_NESTED },
-*/
-        [IFLA_AF_SPEC]          = { .type = NETLINK_TYPE_UNION, .type_system_union = &rtnl_af_spec_type_system_union },
-/*
-        [IFLA_VF_PORTS],
-        [IFLA_PORT_SELF],
-*/
-        [IFLA_GROUP]            = { .type = NETLINK_TYPE_U32 },
-        [IFLA_NET_NS_FD]        = { .type = NETLINK_TYPE_U32 },
-        [IFLA_EXT_MASK]         = { .type = NETLINK_TYPE_U32 },
-        [IFLA_PROMISCUITY]      = { .type = NETLINK_TYPE_U32 },
-        [IFLA_NUM_TX_QUEUES]    = { .type = NETLINK_TYPE_U32 },
-        [IFLA_NUM_RX_QUEUES]    = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GSO_MAX_SEGS]     = { .type = NETLINK_TYPE_U32 },
-        [IFLA_GSO_MAX_SIZE]     = { .type = NETLINK_TYPE_U32 },
-        [IFLA_CARRIER]          = { .type = NETLINK_TYPE_U8 },
-/*
-        [IFLA_PHYS_PORT_ID]     = { .type = NETLINK_TYPE_BINARY, .len = MAX_PHYS_PORT_ID_LEN },
-*/
-        [IFLA_MIN_MTU]          = { .type = NETLINK_TYPE_U32 },
-        [IFLA_MAX_MTU]          = { .type = NETLINK_TYPE_U32 },
-        [IFLA_PROP_LIST]        = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_prop_list_type_system },
-        [IFLA_ALT_IFNAME]       = { .type = NETLINK_TYPE_STRING, .size = ALTIFNAMSIZ - 1 },
-};
-
-static const NLTypeSystem rtnl_link_type_system = {
-        .count = ELEMENTSOF(rtnl_link_types),
-        .types = rtnl_link_types,
-};
-
-/* IFA_FLAGS was defined in kernel 3.14, but we still support older
- * kernels where IFA_MAX is lower. */
-static const NLType rtnl_address_types[] = {
-        [IFA_ADDRESS]           = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFA_LOCAL]             = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFA_LABEL]             = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ - 1 },
-        [IFA_BROADCAST]         = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFA_ANYCAST]           = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFA_CACHEINFO]         = { .type = NETLINK_TYPE_CACHE_INFO, .size = sizeof(struct ifa_cacheinfo) },
-        [IFA_MULTICAST]         = { .type = NETLINK_TYPE_IN_ADDR },
-        [IFA_FLAGS]             = { .type = NETLINK_TYPE_U32 },
-        [IFA_RT_PRIORITY]       = { .type = NETLINK_TYPE_U32 },
-        [IFA_TARGET_NETNSID]    = { .type = NETLINK_TYPE_S32 },
-};
-
-static const NLTypeSystem rtnl_address_type_system = {
-        .count = ELEMENTSOF(rtnl_address_types),
-        .types = rtnl_address_types,
-};
-
-/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
-
-static const NLType rtnl_route_metrics_types[] = {
-        [RTAX_MTU]                = { .type = NETLINK_TYPE_U32 },
-        [RTAX_WINDOW]             = { .type = NETLINK_TYPE_U32 },
-        [RTAX_RTT]                = { .type = NETLINK_TYPE_U32 },
-        [RTAX_RTTVAR]             = { .type = NETLINK_TYPE_U32 },
-        [RTAX_SSTHRESH]           = { .type = NETLINK_TYPE_U32 },
-        [RTAX_CWND]               = { .type = NETLINK_TYPE_U32 },
-        [RTAX_ADVMSS]             = { .type = NETLINK_TYPE_U32 },
-        [RTAX_REORDERING]         = { .type = NETLINK_TYPE_U32 },
-        [RTAX_HOPLIMIT]           = { .type = NETLINK_TYPE_U32 },
-        [RTAX_INITCWND]           = { .type = NETLINK_TYPE_U32 },
-        [RTAX_FEATURES]           = { .type = NETLINK_TYPE_U32 },
-        [RTAX_RTO_MIN]            = { .type = NETLINK_TYPE_U32 },
-        [RTAX_INITRWND]           = { .type = NETLINK_TYPE_U32 },
-        [RTAX_QUICKACK]           = { .type = NETLINK_TYPE_U32 },
-        [RTAX_CC_ALGO]            = { .type = NETLINK_TYPE_U32 },
-        [RTAX_FASTOPEN_NO_COOKIE] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem rtnl_route_metrics_type_system = {
-        .count = ELEMENTSOF(rtnl_route_metrics_types),
-        .types = rtnl_route_metrics_types,
-};
-
-static const NLType rtnl_route_types[] = {
-        [RTA_DST]               = { .type = NETLINK_TYPE_IN_ADDR }, /* 6? */
-        [RTA_SRC]               = { .type = NETLINK_TYPE_IN_ADDR }, /* 6? */
-        [RTA_IIF]               = { .type = NETLINK_TYPE_U32 },
-        [RTA_OIF]               = { .type = NETLINK_TYPE_U32 },
-        [RTA_GATEWAY]           = { .type = NETLINK_TYPE_IN_ADDR },
-        [RTA_PRIORITY]          = { .type = NETLINK_TYPE_U32 },
-        [RTA_PREFSRC]           = { .type = NETLINK_TYPE_IN_ADDR }, /* 6? */
-        [RTA_METRICS]           = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_route_metrics_type_system},
-        [RTA_MULTIPATH]         = { .size = sizeof(struct rtnexthop) },
-        [RTA_FLOW]              = { .type = NETLINK_TYPE_U32 }, /* 6? */
-        [RTA_CACHEINFO]         = { .size = sizeof(struct rta_cacheinfo) },
-        [RTA_TABLE]             = { .type = NETLINK_TYPE_U32 },
-        [RTA_MARK]              = { .type = NETLINK_TYPE_U32 },
-        [RTA_MFC_STATS]         = { .type = NETLINK_TYPE_U64 },
-        [RTA_VIA]               = { /* See struct rtvia */ },
-        [RTA_NEWDST]            = { .type = NETLINK_TYPE_U32 },
-        [RTA_PREF]              = { .type = NETLINK_TYPE_U8 },
-        [RTA_ENCAP_TYPE]        = { .type = NETLINK_TYPE_U16 },
-        [RTA_ENCAP]             = { .type = NETLINK_TYPE_NESTED }, /* Multiple type systems i.e. LWTUNNEL_ENCAP_MPLS/LWTUNNEL_ENCAP_IP/LWTUNNEL_ENCAP_ILA etc... */
-        [RTA_EXPIRES]           = { .type = NETLINK_TYPE_U32 },
-        [RTA_UID]               = { .type = NETLINK_TYPE_U32 },
-        [RTA_TTL_PROPAGATE]     = { .type = NETLINK_TYPE_U8 },
-        [RTA_IP_PROTO]          = { .type = NETLINK_TYPE_U8 },
-        [RTA_SPORT]             = { .type = NETLINK_TYPE_U16 },
-        [RTA_DPORT]             = { .type = NETLINK_TYPE_U16 },
-        [RTA_NH_ID]             = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem rtnl_route_type_system = {
-        .count = ELEMENTSOF(rtnl_route_types),
-        .types = rtnl_route_types,
-};
-
-static const NLType rtnl_neigh_types[] = {
-        [NDA_DST]               = { .type = NETLINK_TYPE_IN_ADDR },
-        [NDA_LLADDR]            = { /* struct ether_addr, struct in_addr, or struct in6_addr */ },
-        [NDA_CACHEINFO]         = { .type = NETLINK_TYPE_CACHE_INFO, .size = sizeof(struct nda_cacheinfo) },
-        [NDA_PROBES]            = { .type = NETLINK_TYPE_U32 },
-        [NDA_VLAN]              = { .type = NETLINK_TYPE_U16 },
-        [NDA_PORT]              = { .type = NETLINK_TYPE_U16 },
-        [NDA_VNI]               = { .type = NETLINK_TYPE_U32 },
-        [NDA_IFINDEX]           = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem rtnl_neigh_type_system = {
-        .count = ELEMENTSOF(rtnl_neigh_types),
-        .types = rtnl_neigh_types,
-};
-
-static const NLType rtnl_addrlabel_types[] = {
-        [IFAL_ADDRESS]         = { .type = NETLINK_TYPE_IN_ADDR, .size = sizeof(struct in6_addr) },
-        [IFAL_LABEL]           = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem rtnl_addrlabel_type_system = {
-        .count = ELEMENTSOF(rtnl_addrlabel_types),
-        .types = rtnl_addrlabel_types,
-};
-
-static const NLType rtnl_routing_policy_rule_types[] = {
-        [FRA_DST]                 = { .type = NETLINK_TYPE_IN_ADDR },
-        [FRA_SRC]                 = { .type = NETLINK_TYPE_IN_ADDR },
-        [FRA_IIFNAME]             = { .type = NETLINK_TYPE_STRING },
-        [FRA_GOTO]                = { .type = NETLINK_TYPE_U32 },
-        [FRA_PRIORITY]            = { .type = NETLINK_TYPE_U32 },
-        [FRA_FWMARK]              = { .type = NETLINK_TYPE_U32 },
-        [FRA_FLOW]                = { .type = NETLINK_TYPE_U32 },
-        [FRA_TUN_ID]              = { .type = NETLINK_TYPE_U64 },
-        [FRA_SUPPRESS_IFGROUP]    = { .type = NETLINK_TYPE_U32 },
-        [FRA_SUPPRESS_PREFIXLEN]  = { .type = NETLINK_TYPE_U32 },
-        [FRA_TABLE]               = { .type = NETLINK_TYPE_U32 },
-        [FRA_FWMASK]              = { .type = NETLINK_TYPE_U32 },
-        [FRA_OIFNAME]             = { .type = NETLINK_TYPE_STRING },
-        [FRA_PAD]                 = { .type = NETLINK_TYPE_U32 },
-        [FRA_L3MDEV]              = { .type = NETLINK_TYPE_U8 },
-        [FRA_UID_RANGE]           = { .size = sizeof(struct fib_rule_uid_range) },
-        [FRA_PROTOCOL]            = { .type = NETLINK_TYPE_U8 },
-        [FRA_IP_PROTO]            = { .type = NETLINK_TYPE_U8 },
-        [FRA_SPORT_RANGE]         = { .size = sizeof(struct fib_rule_port_range) },
-        [FRA_DPORT_RANGE]         = { .size = sizeof(struct fib_rule_port_range) },
-};
-
-static const NLTypeSystem rtnl_routing_policy_rule_type_system = {
-        .count = ELEMENTSOF(rtnl_routing_policy_rule_types),
-        .types = rtnl_routing_policy_rule_types,
-};
-
-static const NLType rtnl_nexthop_types[] = {
-        [NHA_ID]                  = { .type = NETLINK_TYPE_U32 },
-        [NHA_GROUP]               = { /* array of struct nexthop_grp */ },
-        [NHA_GROUP_TYPE]          = { .type = NETLINK_TYPE_U16 },
-        [NHA_BLACKHOLE]           = { .type = NETLINK_TYPE_FLAG },
-        [NHA_OIF]                 = { .type = NETLINK_TYPE_U32 },
-        [NHA_GATEWAY]             = { .type = NETLINK_TYPE_IN_ADDR },
-        [NHA_ENCAP_TYPE]          = { .type = NETLINK_TYPE_U16 },
-        [NHA_ENCAP]               = { .type = NETLINK_TYPE_NESTED },
-        [NHA_GROUPS]              = { .type = NETLINK_TYPE_FLAG },
-        [NHA_MASTER]              = { .type = NETLINK_TYPE_U32 },
-        [NHA_FDB]                 = { .type = NETLINK_TYPE_FLAG },
-};
-
-static const NLTypeSystem rtnl_nexthop_type_system = {
-       .count = ELEMENTSOF(rtnl_nexthop_types),
-       .types = rtnl_nexthop_types,
-};
-
-static const NLType rtnl_tca_option_data_cake_types[] = {
-        [TCA_CAKE_BASE_RATE64] = { .type = NETLINK_TYPE_U64 },
-        [TCA_CAKE_OVERHEAD]    = { .type = NETLINK_TYPE_S32 },
-        [TCA_CAKE_MPU]         = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_codel_types[] = {
-        [TCA_CODEL_TARGET]        = { .type = NETLINK_TYPE_U32 },
-        [TCA_CODEL_LIMIT]         = { .type = NETLINK_TYPE_U32 },
-        [TCA_CODEL_INTERVAL]      = { .type = NETLINK_TYPE_U32 },
-        [TCA_CODEL_ECN]           = { .type = NETLINK_TYPE_U32 },
-        [TCA_CODEL_CE_THRESHOLD]  = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_drr_types[] = {
-        [TCA_DRR_QUANTUM] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_ets_quanta_types[] = {
-        [TCA_ETS_QUANTA_BAND] = { .type = NETLINK_TYPE_U32, },
-};
-
-static const NLTypeSystem rtnl_tca_option_data_ets_quanta_type_system = {
-        .count = ELEMENTSOF(rtnl_tca_option_data_ets_quanta_types),
-        .types = rtnl_tca_option_data_ets_quanta_types,
-};
-
-static const NLType rtnl_tca_option_data_ets_prio_types[] = {
-        [TCA_ETS_PRIOMAP_BAND] = { .type = NETLINK_TYPE_U8, },
-};
-
-static const NLTypeSystem rtnl_tca_option_data_ets_prio_type_system = {
-        .count = ELEMENTSOF(rtnl_tca_option_data_ets_prio_types),
-        .types = rtnl_tca_option_data_ets_prio_types,
-};
-
-static const NLType rtnl_tca_option_data_ets_types[] = {
-        [TCA_ETS_NBANDS]      = { .type = NETLINK_TYPE_U8 },
-        [TCA_ETS_NSTRICT]     = { .type = NETLINK_TYPE_U8 },
-        [TCA_ETS_QUANTA]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_option_data_ets_quanta_type_system },
-        [TCA_ETS_PRIOMAP]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_option_data_ets_prio_type_system },
-        [TCA_ETS_QUANTA_BAND] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_fq_types[] = {
-        [TCA_FQ_PLIMIT]             = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_FLOW_PLIMIT]        = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_QUANTUM]            = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_INITIAL_QUANTUM]    = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_RATE_ENABLE]        = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_FLOW_DEFAULT_RATE]  = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_FLOW_MAX_RATE]      = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_BUCKETS_LOG]        = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_FLOW_REFILL_DELAY]  = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_LOW_RATE_THRESHOLD] = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CE_THRESHOLD]       = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_ORPHAN_MASK]        = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_fq_codel_types[] = {
-        [TCA_FQ_CODEL_TARGET]          = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CODEL_LIMIT]           = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CODEL_INTERVAL]        = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CODEL_ECN]             = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CODEL_FLOWS]           = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CODEL_QUANTUM]         = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CODEL_CE_THRESHOLD]    = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CODEL_DROP_BATCH_SIZE] = { .type = NETLINK_TYPE_U32 },
-        [TCA_FQ_CODEL_MEMORY_LIMIT]    = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_fq_pie_types[] = {
-        [TCA_FQ_PIE_LIMIT]   = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_gred_types[] = {
-        [TCA_GRED_DPS] = { .size = sizeof(struct tc_gred_sopt) },
-};
-
-static const NLType rtnl_tca_option_data_hhf_types[] = {
-        [TCA_HHF_BACKLOG_LIMIT] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_htb_types[] = {
-        [TCA_HTB_PARMS]  = { .size = sizeof(struct tc_htb_opt) },
-        [TCA_HTB_INIT]   = { .size = sizeof(struct tc_htb_glob) },
-        [TCA_HTB_CTAB]   = { .size = TC_RTAB_SIZE },
-        [TCA_HTB_RTAB]   = { .size = TC_RTAB_SIZE },
-        [TCA_HTB_RATE64] = { .type = NETLINK_TYPE_U64 },
-        [TCA_HTB_CEIL64] = { .type = NETLINK_TYPE_U64 },
-};
-
-static const NLType rtnl_tca_option_data_pie_types[] = {
-        [TCA_PIE_LIMIT]   = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_qfq_types[] = {
-        [TCA_QFQ_WEIGHT] = { .type = NETLINK_TYPE_U32 },
-        [TCA_QFQ_LMAX]   = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType rtnl_tca_option_data_sfb_types[] = {
-        [TCA_SFB_PARMS] = { .size = sizeof(struct tc_sfb_qopt) },
-};
-
-static const NLType rtnl_tca_option_data_tbf_types[] = {
-        [TCA_TBF_PARMS]   = { .size = sizeof(struct tc_tbf_qopt) },
-        [TCA_TBF_RTAB]    = { .size = TC_RTAB_SIZE },
-        [TCA_TBF_PTAB]    = { .size = TC_RTAB_SIZE },
-        [TCA_TBF_RATE64]  = { .type = NETLINK_TYPE_U64 },
-        [TCA_TBF_PRATE64] = { .type = NETLINK_TYPE_U64 },
-        [TCA_TBF_BURST]   = { .type = NETLINK_TYPE_U32 },
-        [TCA_TBF_PBURST]  = { .type = NETLINK_TYPE_U32 },
-};
-
-static const char* const nl_union_tca_option_data_table[] = {
-        [NL_UNION_TCA_OPTION_DATA_CAKE] = "cake",
-        [NL_UNION_TCA_OPTION_DATA_CODEL] = "codel",
-        [NL_UNION_TCA_OPTION_DATA_DRR] = "drr",
-        [NL_UNION_TCA_OPTION_DATA_ETS] = "ets",
-        [NL_UNION_TCA_OPTION_DATA_FQ] = "fq",
-        [NL_UNION_TCA_OPTION_DATA_FQ_CODEL] = "fq_codel",
-        [NL_UNION_TCA_OPTION_DATA_FQ_PIE] = "fq_pie",
-        [NL_UNION_TCA_OPTION_DATA_GRED] = "gred",
-        [NL_UNION_TCA_OPTION_DATA_HHF] = "hhf",
-        [NL_UNION_TCA_OPTION_DATA_HTB] = "htb",
-        [NL_UNION_TCA_OPTION_DATA_PIE] = "pie",
-        [NL_UNION_TCA_OPTION_DATA_QFQ] = "qfq",
-        [NL_UNION_TCA_OPTION_DATA_SFB] = "sfb",
-        [NL_UNION_TCA_OPTION_DATA_TBF] = "tbf",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(nl_union_tca_option_data, NLUnionTCAOptionData);
-
-static const NLTypeSystem rtnl_tca_option_data_type_systems[] = {
-        [NL_UNION_TCA_OPTION_DATA_CAKE] =        { .count = ELEMENTSOF(rtnl_tca_option_data_cake_types),
-                                                   .types = rtnl_tca_option_data_cake_types },
-        [NL_UNION_TCA_OPTION_DATA_CODEL] =       { .count = ELEMENTSOF(rtnl_tca_option_data_codel_types),
-                                                   .types = rtnl_tca_option_data_codel_types },
-        [NL_UNION_TCA_OPTION_DATA_DRR] =         { .count = ELEMENTSOF(rtnl_tca_option_data_drr_types),
-                                                   .types = rtnl_tca_option_data_drr_types },
-        [NL_UNION_TCA_OPTION_DATA_ETS] =         { .count = ELEMENTSOF(rtnl_tca_option_data_ets_types),
-                                                   .types = rtnl_tca_option_data_ets_types },
-        [NL_UNION_TCA_OPTION_DATA_FQ] =          { .count = ELEMENTSOF(rtnl_tca_option_data_fq_types),
-                                                   .types = rtnl_tca_option_data_fq_types },
-        [NL_UNION_TCA_OPTION_DATA_FQ_CODEL] =    { .count = ELEMENTSOF(rtnl_tca_option_data_fq_codel_types),
-                                                   .types = rtnl_tca_option_data_fq_codel_types },
-        [NL_UNION_TCA_OPTION_DATA_FQ_PIE] =      { .count = ELEMENTSOF(rtnl_tca_option_data_fq_pie_types),
-                                                   .types = rtnl_tca_option_data_fq_pie_types },
-        [NL_UNION_TCA_OPTION_DATA_GRED] =        { .count = ELEMENTSOF(rtnl_tca_option_data_gred_types),
-                                                   .types = rtnl_tca_option_data_gred_types },
-        [NL_UNION_TCA_OPTION_DATA_HHF] =         { .count = ELEMENTSOF(rtnl_tca_option_data_hhf_types),
-                                                   .types = rtnl_tca_option_data_hhf_types },
-        [NL_UNION_TCA_OPTION_DATA_HTB] =         { .count = ELEMENTSOF(rtnl_tca_option_data_htb_types),
-                                                   .types = rtnl_tca_option_data_htb_types },
-        [NL_UNION_TCA_OPTION_DATA_PIE] =         { .count = ELEMENTSOF(rtnl_tca_option_data_pie_types),
-                                                   .types = rtnl_tca_option_data_pie_types },
-        [NL_UNION_TCA_OPTION_DATA_QFQ] =         { .count = ELEMENTSOF(rtnl_tca_option_data_qfq_types),
-                                                   .types = rtnl_tca_option_data_qfq_types },
-        [NL_UNION_TCA_OPTION_DATA_SFB] =         { .count = ELEMENTSOF(rtnl_tca_option_data_sfb_types),
-                                                   .types = rtnl_tca_option_data_sfb_types },
-        [NL_UNION_TCA_OPTION_DATA_TBF] =         { .count = ELEMENTSOF(rtnl_tca_option_data_tbf_types),
-                                                   .types = rtnl_tca_option_data_tbf_types },
-};
-
-static const NLTypeSystemUnion rtnl_tca_option_data_type_system_union = {
-        .num = _NL_UNION_TCA_OPTION_DATA_MAX,
-        .lookup = nl_union_tca_option_data_from_string,
-        .type_systems = rtnl_tca_option_data_type_systems,
-        .match_type = NL_MATCH_SIBLING,
-        .match = TCA_KIND,
-};
-
-static const NLType rtnl_tca_types[] = {
-        [TCA_KIND]           = { .type = NETLINK_TYPE_STRING },
-        [TCA_OPTIONS]        = { .type = NETLINK_TYPE_UNION, .type_system_union = &rtnl_tca_option_data_type_system_union },
-        [TCA_INGRESS_BLOCK]  = { .type = NETLINK_TYPE_U32 },
-        [TCA_EGRESS_BLOCK]   = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem rtnl_tca_type_system = {
-        .count = ELEMENTSOF(rtnl_tca_types),
-        .types = rtnl_tca_types,
-};
-
-static const NLType mdb_types[] = {
-        [MDBA_SET_ENTRY]     = { .size = sizeof(struct br_port_msg) },
-};
-
-static const NLTypeSystem rtnl_mdb_type_system = {
-        .count = ELEMENTSOF(mdb_types),
-        .types = mdb_types,
-};
-
-static const NLType error_types[] = {
-        [NLMSGERR_ATTR_MSG]  = { .type = NETLINK_TYPE_STRING },
-        [NLMSGERR_ATTR_OFFS] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem error_type_system = {
-        .count = ELEMENTSOF(error_types),
-        .types = error_types,
-};
-
-static const NLType rtnl_types[] = {
-        [NLMSG_DONE]       = { .type = NETLINK_TYPE_NESTED, .type_system = &empty_type_system, .size = 0 },
-        [NLMSG_ERROR]      = { .type = NETLINK_TYPE_NESTED, .type_system = &error_type_system, .size = sizeof(struct nlmsgerr) },
-        [RTM_NEWLINK]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
-        [RTM_DELLINK]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
-        [RTM_GETLINK]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
-        [RTM_SETLINK]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
-        [RTM_NEWLINKPROP]  = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
-        [RTM_DELLINKPROP]  = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
-        [RTM_GETLINKPROP]  = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_type_system, .size = sizeof(struct ifinfomsg) },
-        [RTM_NEWADDR]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_address_type_system, .size = sizeof(struct ifaddrmsg) },
-        [RTM_DELADDR]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_address_type_system, .size = sizeof(struct ifaddrmsg) },
-        [RTM_GETADDR]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_address_type_system, .size = sizeof(struct ifaddrmsg) },
-        [RTM_NEWROUTE]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_route_type_system, .size = sizeof(struct rtmsg) },
-        [RTM_DELROUTE]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_route_type_system, .size = sizeof(struct rtmsg) },
-        [RTM_GETROUTE]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_route_type_system, .size = sizeof(struct rtmsg) },
-        [RTM_NEWNEIGH]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_neigh_type_system, .size = sizeof(struct ndmsg) },
-        [RTM_DELNEIGH]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_neigh_type_system, .size = sizeof(struct ndmsg) },
-        [RTM_GETNEIGH]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_neigh_type_system, .size = sizeof(struct ndmsg) },
-        [RTM_NEWADDRLABEL] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_addrlabel_type_system, .size = sizeof(struct ifaddrlblmsg) },
-        [RTM_DELADDRLABEL] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_addrlabel_type_system, .size = sizeof(struct ifaddrlblmsg) },
-        [RTM_GETADDRLABEL] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_addrlabel_type_system, .size = sizeof(struct ifaddrlblmsg) },
-        [RTM_NEWRULE]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_routing_policy_rule_type_system, .size = sizeof(struct fib_rule_hdr) },
-        [RTM_DELRULE]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_routing_policy_rule_type_system, .size = sizeof(struct fib_rule_hdr) },
-        [RTM_GETRULE]      = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_routing_policy_rule_type_system, .size = sizeof(struct fib_rule_hdr) },
-        [RTM_NEWNEXTHOP]   = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_nexthop_type_system, .size = sizeof(struct nhmsg) },
-        [RTM_DELNEXTHOP]   = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_nexthop_type_system, .size = sizeof(struct nhmsg) },
-        [RTM_GETNEXTHOP]   = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_nexthop_type_system, .size = sizeof(struct nhmsg) },
-        [RTM_NEWQDISC]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_type_system, .size = sizeof(struct tcmsg) },
-        [RTM_DELQDISC]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_type_system, .size = sizeof(struct tcmsg) },
-        [RTM_GETQDISC]     = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_type_system, .size = sizeof(struct tcmsg) },
-        [RTM_NEWTCLASS]    = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_type_system, .size = sizeof(struct tcmsg) },
-        [RTM_DELTCLASS]    = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_type_system, .size = sizeof(struct tcmsg) },
-        [RTM_GETTCLASS]    = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_type_system, .size = sizeof(struct tcmsg) },
-        [RTM_NEWMDB]       = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_mdb_type_system, .size = sizeof(struct br_port_msg) },
-        [RTM_DELMDB]       = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_mdb_type_system, .size = sizeof(struct br_port_msg) },
-        [RTM_GETMDB]       = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_mdb_type_system, .size = sizeof(struct br_port_msg) },
-};
-
-const NLTypeSystem rtnl_type_system_root = {
-        .count = ELEMENTSOF(rtnl_types),
-        .types = rtnl_types,
-};
-
-static const NLType genl_wireguard_allowedip_types[] = {
-        [WGALLOWEDIP_A_FAMILY] = { .type = NETLINK_TYPE_U16 },
-        [WGALLOWEDIP_A_IPADDR] = { .type = NETLINK_TYPE_IN_ADDR },
-        [WGALLOWEDIP_A_CIDR_MASK] = { .type = NETLINK_TYPE_U8 },
-};
-
-static const NLTypeSystem genl_wireguard_allowedip_type_system = {
-        .count = ELEMENTSOF(genl_wireguard_allowedip_types),
-        .types = genl_wireguard_allowedip_types,
-};
-
-static const NLType genl_wireguard_peer_types[] = {
-        [WGPEER_A_PUBLIC_KEY] = { .size = WG_KEY_LEN  },
-        [WGPEER_A_FLAGS] = { .type = NETLINK_TYPE_U32 },
-        [WGPEER_A_PRESHARED_KEY] = { .size = WG_KEY_LEN },
-        [WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL] = { .type = NETLINK_TYPE_U16 },
-        [WGPEER_A_ENDPOINT] = { .type = NETLINK_TYPE_SOCKADDR },
-        [WGPEER_A_ALLOWEDIPS] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_wireguard_allowedip_type_system },
-};
-
-static const NLTypeSystem genl_wireguard_peer_type_system = {
-        .count = ELEMENTSOF(genl_wireguard_peer_types),
-        .types = genl_wireguard_peer_types,
-};
-
-static const NLType genl_wireguard_set_device_types[] = {
-        [WGDEVICE_A_IFINDEX] = { .type = NETLINK_TYPE_U32 },
-        [WGDEVICE_A_IFNAME] = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ-1 },
-        [WGDEVICE_A_FLAGS] = { .type = NETLINK_TYPE_U32 },
-        [WGDEVICE_A_PRIVATE_KEY] = { .size = WG_KEY_LEN },
-        [WGDEVICE_A_LISTEN_PORT] = { .type = NETLINK_TYPE_U16 },
-        [WGDEVICE_A_FWMARK] = { .type = NETLINK_TYPE_U32 },
-        [WGDEVICE_A_PEERS] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_wireguard_peer_type_system },
-};
-
-static const NLTypeSystem genl_wireguard_set_device_type_system = {
-        .count = ELEMENTSOF(genl_wireguard_set_device_types),
-        .types = genl_wireguard_set_device_types,
-};
-
-static const NLType genl_wireguard_cmds[] = {
-        [WG_CMD_SET_DEVICE] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_wireguard_set_device_type_system },
-};
-
-static const NLTypeSystem genl_wireguard_type_system = {
-        .count = ELEMENTSOF(genl_wireguard_cmds),
-        .types = genl_wireguard_cmds,
-};
-
-static const NLType genl_mcast_group_types[] = {
-        [CTRL_ATTR_MCAST_GRP_NAME]  = { .type = NETLINK_TYPE_STRING },
-        [CTRL_ATTR_MCAST_GRP_ID]    = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem genl_mcast_group_type_system = {
-        .count = ELEMENTSOF(genl_mcast_group_types),
-        .types = genl_mcast_group_types,
-};
-
-static const NLType genl_get_family_types[] = {
-        [CTRL_ATTR_FAMILY_NAME]  = { .type = NETLINK_TYPE_STRING },
-        [CTRL_ATTR_FAMILY_ID]    = { .type = NETLINK_TYPE_U16 },
-        [CTRL_ATTR_MCAST_GROUPS] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_mcast_group_type_system },
-};
-
-static const NLTypeSystem genl_get_family_type_system = {
-        .count = ELEMENTSOF(genl_get_family_types),
-        .types = genl_get_family_types,
-};
-
-static const NLType genl_ctrl_id_ctrl_cmds[] = {
-        [CTRL_CMD_GETFAMILY] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_get_family_type_system },
-};
-
-static const NLTypeSystem genl_ctrl_id_ctrl_type_system = {
-        .count = ELEMENTSOF(genl_ctrl_id_ctrl_cmds),
-        .types = genl_ctrl_id_ctrl_cmds,
-};
-
-static const NLType genl_fou_types[] = {
-        [FOU_ATTR_PORT]              = { .type = NETLINK_TYPE_U16 },
-        [FOU_ATTR_AF]                = { .type = NETLINK_TYPE_U8 },
-        [FOU_ATTR_IPPROTO]           = { .type = NETLINK_TYPE_U8 },
-        [FOU_ATTR_TYPE]              = { .type = NETLINK_TYPE_U8 },
-        [FOU_ATTR_REMCSUM_NOPARTIAL] = { .type = NETLINK_TYPE_FLAG },
-        [FOU_ATTR_LOCAL_V4]          = { .type = NETLINK_TYPE_IN_ADDR },
-        [FOU_ATTR_PEER_V4]           = { .type = NETLINK_TYPE_IN_ADDR },
-        [FOU_ATTR_LOCAL_V6]          = { .type = NETLINK_TYPE_IN_ADDR },
-        [FOU_ATTR_PEER_V6]           = { .type = NETLINK_TYPE_IN_ADDR},
-        [FOU_ATTR_PEER_PORT]         = { .type = NETLINK_TYPE_U16},
-        [FOU_ATTR_IFINDEX]           = { .type = NETLINK_TYPE_U32},
-};
-
-static const NLTypeSystem genl_fou_type_system = {
-        .count = ELEMENTSOF(genl_fou_types),
-        .types = genl_fou_types,
-};
-
-static const NLType genl_fou_cmds[] = {
-        [FOU_CMD_ADD] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_fou_type_system },
-        [FOU_CMD_DEL] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_fou_type_system },
-        [FOU_CMD_GET] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_fou_type_system },
-};
-
-static const NLTypeSystem genl_fou_cmds_type_system = {
-        .count = ELEMENTSOF(genl_fou_cmds),
-        .types = genl_fou_cmds,
-};
-
-static const NLType genl_l2tp_types[] = {
-        [L2TP_ATTR_PW_TYPE]           = { .type = NETLINK_TYPE_U16 },
-        [L2TP_ATTR_ENCAP_TYPE]        = { .type = NETLINK_TYPE_U16 },
-        [L2TP_ATTR_OFFSET]            = { .type = NETLINK_TYPE_U16 },
-        [L2TP_ATTR_DATA_SEQ]          = { .type = NETLINK_TYPE_U16 },
-        [L2TP_ATTR_L2SPEC_TYPE]       = { .type = NETLINK_TYPE_U8 },
-        [L2TP_ATTR_L2SPEC_LEN]        = { .type = NETLINK_TYPE_U8 },
-        [L2TP_ATTR_PROTO_VERSION]     = { .type = NETLINK_TYPE_U8 },
-        [L2TP_ATTR_IFNAME]            = { .type = NETLINK_TYPE_STRING },
-        [L2TP_ATTR_CONN_ID]           = { .type = NETLINK_TYPE_U32 },
-        [L2TP_ATTR_PEER_CONN_ID]      = { .type = NETLINK_TYPE_U32 },
-        [L2TP_ATTR_SESSION_ID]        = { .type = NETLINK_TYPE_U32 },
-        [L2TP_ATTR_PEER_SESSION_ID]   = { .type = NETLINK_TYPE_U32 },
-        [L2TP_ATTR_UDP_CSUM]          = { .type = NETLINK_TYPE_U8 },
-        [L2TP_ATTR_VLAN_ID]           = { .type = NETLINK_TYPE_U16 },
-        [L2TP_ATTR_RECV_SEQ]          = { .type = NETLINK_TYPE_U8 },
-        [L2TP_ATTR_SEND_SEQ]          = { .type = NETLINK_TYPE_U8 },
-        [L2TP_ATTR_LNS_MODE]          = { .type = NETLINK_TYPE_U8 },
-        [L2TP_ATTR_USING_IPSEC]       = { .type = NETLINK_TYPE_U8 },
-        [L2TP_ATTR_FD]                = { .type = NETLINK_TYPE_U32 },
-        [L2TP_ATTR_IP_SADDR]          = { .type = NETLINK_TYPE_IN_ADDR },
-        [L2TP_ATTR_IP_DADDR]          = { .type = NETLINK_TYPE_IN_ADDR },
-        [L2TP_ATTR_UDP_SPORT]         = { .type = NETLINK_TYPE_U16 },
-        [L2TP_ATTR_UDP_DPORT]         = { .type = NETLINK_TYPE_U16 },
-        [L2TP_ATTR_IP6_SADDR]         = { .type = NETLINK_TYPE_IN_ADDR },
-        [L2TP_ATTR_IP6_DADDR]         = { .type = NETLINK_TYPE_IN_ADDR },
-        [L2TP_ATTR_UDP_ZERO_CSUM6_TX] = { .type = NETLINK_TYPE_FLAG },
-        [L2TP_ATTR_UDP_ZERO_CSUM6_RX] = { .type = NETLINK_TYPE_FLAG },
-};
-
-static const NLTypeSystem genl_l2tp_type_system = {
-        .count = ELEMENTSOF(genl_l2tp_types),
-        .types = genl_l2tp_types,
-};
-
-static const NLType genl_l2tp[]   = {
-        [L2TP_CMD_TUNNEL_CREATE]  = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-        [L2TP_CMD_TUNNEL_DELETE]  = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-        [L2TP_CMD_TUNNEL_MODIFY]  = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-        [L2TP_CMD_TUNNEL_GET]     = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-        [L2TP_CMD_SESSION_CREATE] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-        [L2TP_CMD_SESSION_DELETE] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-        [L2TP_CMD_SESSION_MODIFY] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-        [L2TP_CMD_SESSION_GET]    = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-};
-
-static const NLTypeSystem genl_l2tp_tunnel_session_type_system = {
-        .count = ELEMENTSOF(genl_l2tp),
-        .types = genl_l2tp,
-};
-
-static const NLType genl_rxsc_types[] = {
-        [MACSEC_RXSC_ATTR_SCI] = { .type = NETLINK_TYPE_U64 },
-};
-
-static const NLTypeSystem genl_rxsc_config_type_system = {
-        .count = ELEMENTSOF(genl_rxsc_types),
-        .types = genl_rxsc_types,
-};
-
-static const NLType genl_macsec_rxsc_types[] = {
-        [MACSEC_ATTR_IFINDEX]     = { .type = NETLINK_TYPE_U32 },
-        [MACSEC_ATTR_RXSC_CONFIG] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_rxsc_config_type_system },
-};
-
-static const NLTypeSystem genl_macsec_rxsc_type_system = {
-        .count = ELEMENTSOF(genl_macsec_rxsc_types),
-        .types = genl_macsec_rxsc_types,
-};
-
-static const NLType genl_macsec_sa_config_types[] = {
-        [MACSEC_SA_ATTR_AN]     = { .type = NETLINK_TYPE_U8 },
-        [MACSEC_SA_ATTR_ACTIVE] = { .type = NETLINK_TYPE_U8 },
-        [MACSEC_SA_ATTR_PN]     = { .type = NETLINK_TYPE_U32 },
-        [MACSEC_SA_ATTR_KEYID]  = { .size = MACSEC_KEYID_LEN },
-        [MACSEC_SA_ATTR_KEY]    = { .size = MACSEC_MAX_KEY_LEN },
-};
-
-static const NLTypeSystem genl_macsec_sa_config_type_system = {
-        .count = ELEMENTSOF(genl_macsec_sa_config_types),
-        .types = genl_macsec_sa_config_types,
-};
-
-static const NLType genl_macsec_rxsa_types[] = {
-        [MACSEC_ATTR_IFINDEX]   = { .type = NETLINK_TYPE_U32 },
-        [MACSEC_ATTR_SA_CONFIG] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_macsec_sa_config_type_system },
-};
-
-static const NLTypeSystem genl_macsec_rxsa_type_system = {
-        .count = ELEMENTSOF(genl_macsec_rxsa_types),
-        .types = genl_macsec_rxsa_types,
-};
-
-static const NLType genl_macsec_sa_types[] = {
-        [MACSEC_ATTR_IFINDEX]     = { .type = NETLINK_TYPE_U32 },
-        [MACSEC_ATTR_RXSC_CONFIG] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_rxsc_config_type_system },
-        [MACSEC_ATTR_SA_CONFIG]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_macsec_sa_config_type_system },
-};
-
-static const NLTypeSystem genl_macsec_sa_type_system = {
-        .count = ELEMENTSOF(genl_macsec_sa_types),
-        .types = genl_macsec_sa_types,
-};
-
-static const NLType genl_macsec[]   = {
-        [MACSEC_CMD_ADD_RXSC]  = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_macsec_rxsc_type_system },
-        [MACSEC_CMD_ADD_TXSA]  = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_macsec_rxsa_type_system},
-        [MACSEC_CMD_ADD_RXSA]  = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_macsec_sa_type_system },
-};
-
-static const NLTypeSystem genl_macsec_device_type_system = {
-        .count = ELEMENTSOF(genl_macsec),
-        .types = genl_macsec,
-};
-
-static const NLType genl_nl80211_types[] = {
-        [NL80211_ATTR_IFINDEX] = { .type = NETLINK_TYPE_U32 },
-        [NL80211_ATTR_MAC]     = { .type = NETLINK_TYPE_ETHER_ADDR },
-        [NL80211_ATTR_SSID]    = { .type = NETLINK_TYPE_STRING },
-        [NL80211_ATTR_IFTYPE]  = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem genl_nl80211_type_system = {
-        .count = ELEMENTSOF(genl_nl80211_types),
-        .types = genl_nl80211_types,
-};
-
-static const NLType genl_nl80211_cmds[] = {
-        [NL80211_CMD_GET_WIPHY]     = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_SET_WIPHY]     = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_NEW_WIPHY]     = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_DEL_WIPHY]     = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_GET_INTERFACE] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_SET_INTERFACE] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_NEW_INTERFACE] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_DEL_INTERFACE] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_GET_STATION]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_SET_STATION]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_NEW_STATION]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [NL80211_CMD_DEL_STATION]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-};
-
-static const NLTypeSystem genl_nl80211_cmds_type_system = {
-        .count = ELEMENTSOF(genl_nl80211_cmds),
-        .types = genl_nl80211_cmds,
-};
-
-static const NLType genl_batadv_types[] = {
-        [BATADV_ATTR_VERSION]                       = { .type = NETLINK_TYPE_STRING },
-        [BATADV_ATTR_ALGO_NAME]                     = { .type = NETLINK_TYPE_STRING },
-        [BATADV_ATTR_MESH_IFINDEX]                  = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_MESH_IFNAME]                   = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ },
-        [BATADV_ATTR_MESH_ADDRESS]                  = { .size = ETH_ALEN },
-        [BATADV_ATTR_HARD_IFINDEX]                  = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_HARD_IFNAME]                   = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ },
-        [BATADV_ATTR_HARD_ADDRESS]                  = { .size = ETH_ALEN },
-        [BATADV_ATTR_ORIG_ADDRESS]                  = { .size = ETH_ALEN },
-        [BATADV_ATTR_TPMETER_RESULT]                = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_TPMETER_TEST_TIME]             = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_TPMETER_BYTES]                 = { .type = NETLINK_TYPE_U64 },
-        [BATADV_ATTR_TPMETER_COOKIE]                = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_PAD]                           = { .type = NETLINK_TYPE_UNSPEC },
-        [BATADV_ATTR_ACTIVE]                        = { .type = NETLINK_TYPE_FLAG },
-        [BATADV_ATTR_TT_ADDRESS]                    = { .size = ETH_ALEN },
-        [BATADV_ATTR_TT_TTVN]                       = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_TT_LAST_TTVN]                  = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_TT_CRC32]                      = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_TT_VID]                        = { .type = NETLINK_TYPE_U16 },
-        [BATADV_ATTR_TT_FLAGS]                      = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_FLAG_BEST]                     = { .type = NETLINK_TYPE_FLAG },
-        [BATADV_ATTR_LAST_SEEN_MSECS]               = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_NEIGH_ADDRESS]                 = { .size = ETH_ALEN },
-        [BATADV_ATTR_TQ]                            = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_THROUGHPUT]                    = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_BANDWIDTH_UP]                  = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_BANDWIDTH_DOWN]                = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_ROUTER]                        = { .size = ETH_ALEN },
-        [BATADV_ATTR_BLA_OWN]                       = { .type = NETLINK_TYPE_FLAG },
-        [BATADV_ATTR_BLA_ADDRESS]                   = { .size = ETH_ALEN },
-        [BATADV_ATTR_BLA_VID]                       = { .type = NETLINK_TYPE_U16 },
-        [BATADV_ATTR_BLA_BACKBONE]                  = { .size = ETH_ALEN },
-        [BATADV_ATTR_BLA_CRC]                       = { .type = NETLINK_TYPE_U16 },
-        [BATADV_ATTR_DAT_CACHE_IP4ADDRESS]          = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_DAT_CACHE_HWADDRESS]           = { .size = ETH_ALEN },
-        [BATADV_ATTR_DAT_CACHE_VID]                 = { .type = NETLINK_TYPE_U16 },
-        [BATADV_ATTR_MCAST_FLAGS]                   = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_MCAST_FLAGS_PRIV]              = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_VLANID]                        = { .type = NETLINK_TYPE_U16 },
-        [BATADV_ATTR_AGGREGATED_OGMS_ENABLED]       = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_AP_ISOLATION_ENABLED]          = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_ISOLATION_MARK]                = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_ISOLATION_MASK]                = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_BONDING_ENABLED]               = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED] = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED] = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_FRAGMENTATION_ENABLED]         = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_GW_BANDWIDTH_DOWN]             = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_GW_BANDWIDTH_UP]               = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_GW_MODE]                       = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_GW_SEL_CLASS]                  = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_HOP_PENALTY]                   = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_LOG_LEVEL]                     = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED]  = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_MULTICAST_FANOUT]              = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_NETWORK_CODING_ENABLED]        = { .type = NETLINK_TYPE_U8 },
-        [BATADV_ATTR_ORIG_INTERVAL]                 = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_ELP_INTERVAL]                  = { .type = NETLINK_TYPE_U32 },
-        [BATADV_ATTR_THROUGHPUT_OVERRIDE]           = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem genl_batadv_type_system = {
-        .count = ELEMENTSOF(genl_batadv_types),
-        .types = genl_batadv_types,
-};
-
-static const NLType genl_batadv_cmds[] = {
-        [BATADV_CMD_SET_MESH] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_batadv_type_system },
-};
-
-static const NLTypeSystem genl_batadv_cmds_type_system = {
-        .count = ELEMENTSOF(genl_batadv_cmds),
-        .types = genl_batadv_cmds,
-};
-
-static const NLType genl_families[] = {
-        [SD_GENL_ID_CTRL]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_ctrl_id_ctrl_type_system },
-        [SD_GENL_WIREGUARD] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_wireguard_type_system },
-        [SD_GENL_FOU]       = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_fou_cmds_type_system },
-        [SD_GENL_L2TP]      = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_tunnel_session_type_system },
-        [SD_GENL_MACSEC]    = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_macsec_device_type_system },
-        [SD_GENL_NL80211]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_cmds_type_system },
-        [SD_GENL_BATADV]    = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_batadv_cmds_type_system },
-};
-
-static const NLType nfnl_nft_table_types[] = {
-        [NFTA_TABLE_NAME]  = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_TABLE_FLAGS] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem nfnl_nft_table_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_table_types),
-        .types = nfnl_nft_table_types,
-};
-
-static const NLType nfnl_nft_chain_hook_types[] = {
-        [NFTA_HOOK_HOOKNUM]  = { .type = NETLINK_TYPE_U32 },
-        [NFTA_HOOK_PRIORITY] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_HOOK_DEV]      = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ - 1 },
-};
-
-static const NLTypeSystem nfnl_nft_chain_hook_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_chain_hook_types),
-        .types = nfnl_nft_chain_hook_types,
-};
-
-static const NLType nfnl_nft_chain_types[] = {
-        [NFTA_CHAIN_TABLE] = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_CHAIN_NAME]  = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_CHAIN_HOOK]  = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_chain_hook_type_system },
-        [NFTA_CHAIN_TYPE]  = { .type = NETLINK_TYPE_STRING, .size = 16 },
-        [NFTA_CHAIN_FLAGS] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem nfnl_nft_chain_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_chain_types),
-        .types = nfnl_nft_chain_types,
-};
-
-static const NLType nfnl_nft_expr_meta_types[] = {
-        [NFTA_META_DREG] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_META_KEY]  = { .type = NETLINK_TYPE_U32 },
-        [NFTA_META_SREG] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType nfnl_nft_expr_payload_types[] = {
-        [NFTA_PAYLOAD_DREG]   = { .type = NETLINK_TYPE_U32 },
-        [NFTA_PAYLOAD_BASE]   = { .type = NETLINK_TYPE_U32 },
-        [NFTA_PAYLOAD_OFFSET] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_PAYLOAD_LEN]    = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType nfnl_nft_expr_nat_types[] = {
-        [NFTA_NAT_TYPE]          = { .type = NETLINK_TYPE_U32 },
-        [NFTA_NAT_FAMILY]        = { .type = NETLINK_TYPE_U32 },
-        [NFTA_NAT_REG_ADDR_MIN]  = { .type = NETLINK_TYPE_U32 },
-        [NFTA_NAT_REG_ADDR_MAX]  = { .type = NETLINK_TYPE_U32 },
-        [NFTA_NAT_REG_PROTO_MIN] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_NAT_REG_PROTO_MAX] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_NAT_FLAGS]         = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType nfnl_nft_data_types[] = {
-        [NFTA_DATA_VALUE] = { .type = NETLINK_TYPE_BINARY },
-};
-
-static const NLTypeSystem nfnl_nft_data_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_data_types),
-        .types = nfnl_nft_data_types,
-};
-
-static const NLType nfnl_nft_expr_bitwise_types[] = {
-        [NFTA_BITWISE_SREG] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_BITWISE_DREG] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_BITWISE_LEN]  = { .type = NETLINK_TYPE_U32 },
-        [NFTA_BITWISE_MASK] = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_data_type_system },
-        [NFTA_BITWISE_XOR]  = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_data_type_system },
-};
-
-static const NLType nfnl_nft_expr_cmp_types[] = {
-        [NFTA_CMP_SREG] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_CMP_OP]   = { .type = NETLINK_TYPE_U32 },
-        [NFTA_CMP_DATA] = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_data_type_system },
-};
-
-static const NLType nfnl_nft_expr_fib_types[] = {
-        [NFTA_FIB_DREG]   = { .type = NETLINK_TYPE_U32 },
-        [NFTA_FIB_RESULT] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_FIB_FLAGS]  = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType nfnl_nft_expr_lookup_types[] = {
-        [NFTA_LOOKUP_SET]   = { .type = NETLINK_TYPE_STRING },
-        [NFTA_LOOKUP_SREG]  = { .type = NETLINK_TYPE_U32 },
-        [NFTA_LOOKUP_DREG]  = { .type = NETLINK_TYPE_U32 },
-        [NFTA_LOOKUP_FLAGS] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLType nfnl_nft_expr_masq_types[] = {
-        [NFTA_MASQ_FLAGS]         = { .type = NETLINK_TYPE_U32 },
-        [NFTA_MASQ_REG_PROTO_MIN] = { .type = NETLINK_TYPE_U32 },
-        [NFTA_MASQ_REG_PROTO_MAX] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem nfnl_expr_data_type_systems[] = {
-        [NL_UNION_NFT_EXPR_DATA_BITWISE]   =  { .count = ELEMENTSOF(nfnl_nft_expr_bitwise_types),
-                                                .types = nfnl_nft_expr_bitwise_types },
-        [NL_UNION_NFT_EXPR_DATA_CMP]       =  { .count = ELEMENTSOF(nfnl_nft_expr_cmp_types),
-                                                .types = nfnl_nft_expr_cmp_types },
-        [NL_UNION_NFT_EXPR_DATA_FIB]       =  { .count = ELEMENTSOF(nfnl_nft_expr_fib_types),
-                                                .types = nfnl_nft_expr_fib_types },
-        [NL_UNION_NFT_EXPR_DATA_LOOKUP]    =  { .count = ELEMENTSOF(nfnl_nft_expr_lookup_types),
-                                                .types = nfnl_nft_expr_lookup_types },
-        [NL_UNION_NFT_EXPR_DATA_MASQ]      =  { .count = ELEMENTSOF(nfnl_nft_expr_masq_types),
-                                                .types = nfnl_nft_expr_masq_types },
-        [NL_UNION_NFT_EXPR_DATA_META]      =  { .count = ELEMENTSOF(nfnl_nft_expr_meta_types),
-                                                .types = nfnl_nft_expr_meta_types },
-        [NL_UNION_NFT_EXPR_DATA_NAT]       =  { .count = ELEMENTSOF(nfnl_nft_expr_nat_types),
-                                                .types = nfnl_nft_expr_nat_types },
-        [NL_UNION_NFT_EXPR_DATA_PAYLOAD]   =  { .count = ELEMENTSOF(nfnl_nft_expr_payload_types),
-                                                .types = nfnl_nft_expr_payload_types },
-};
-
-static const char* const nl_union_nft_expr_data_table[] = {
-        [NL_UNION_NFT_EXPR_DATA_BITWISE] = "bitwise",
-        [NL_UNION_NFT_EXPR_DATA_CMP]     = "cmp",
-        [NL_UNION_NFT_EXPR_DATA_LOOKUP]  = "lookup",
-        [NL_UNION_NFT_EXPR_DATA_META]    = "meta",
-        [NL_UNION_NFT_EXPR_DATA_FIB]     = "fib",
-        [NL_UNION_NFT_EXPR_DATA_MASQ]    = "masq",
-        [NL_UNION_NFT_EXPR_DATA_NAT]     = "nat",
-        [NL_UNION_NFT_EXPR_DATA_PAYLOAD] = "payload",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(nl_union_nft_expr_data, NLUnionNFTExprData);
-
-static const NLTypeSystemUnion nfnl_nft_data_expr_type_system_union = {
-        .num = _NL_UNION_NFT_EXPR_DATA_MAX,
-        .lookup = nl_union_nft_expr_data_from_string,
-        .type_systems = nfnl_expr_data_type_systems,
-        .match_type = NL_MATCH_SIBLING,
-        .match = NFTA_EXPR_NAME,
-};
-
-static const NLType nfnl_nft_rule_expr_types[] = {
-        [NFTA_EXPR_NAME] = { .type = NETLINK_TYPE_STRING, .size = 16 },
-        [NFTA_EXPR_DATA] = { .type = NETLINK_TYPE_UNION,
-                             .type_system_union = &nfnl_nft_data_expr_type_system_union },
-};
-
-static const NLTypeSystem nfnl_nft_rule_expr_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_rule_expr_types),
-        .types = nfnl_nft_rule_expr_types,
-};
-
-static const NLType nfnl_nft_rule_types[] = {
-        [NFTA_RULE_TABLE]       = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_RULE_CHAIN]       = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_RULE_EXPRESSIONS] = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_rule_expr_type_system }
-};
-
-static const NLTypeSystem nfnl_nft_rule_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_rule_types),
-        .types = nfnl_nft_rule_types,
-};
-
-static const NLType nfnl_nft_set_types[] = {
-        [NFTA_SET_TABLE]      = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_SET_NAME]       = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_SET_FLAGS]      = { .type = NETLINK_TYPE_U32 },
-        [NFTA_SET_KEY_TYPE]   = { .type = NETLINK_TYPE_U32 },
-        [NFTA_SET_KEY_LEN]    = { .type = NETLINK_TYPE_U32 },
-        [NFTA_SET_DATA_TYPE]  = { .type = NETLINK_TYPE_U32 },
-        [NFTA_SET_DATA_LEN]   = { .type = NETLINK_TYPE_U32 },
-        [NFTA_SET_POLICY]     = { .type = NETLINK_TYPE_U32 },
-        [NFTA_SET_ID]         = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem nfnl_nft_set_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_set_types),
-        .types = nfnl_nft_set_types,
-};
-
-static const NLType nfnl_nft_setelem_types[] = {
-        [NFTA_SET_ELEM_KEY]   = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_data_type_system },
-        [NFTA_SET_ELEM_DATA]  = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_data_type_system },
-        [NFTA_SET_ELEM_FLAGS] = { .type = NETLINK_TYPE_U32 },
-};
-
-static const NLTypeSystem nfnl_nft_setelem_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_setelem_types),
-        .types = nfnl_nft_setelem_types,
-};
-
-static const NLType nfnl_nft_setelem_list_types[] = {
-        [NFTA_SET_ELEM_LIST_TABLE]    = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_SET_ELEM_LIST_SET]      = { .type = NETLINK_TYPE_STRING, .size = NFT_TABLE_MAXNAMELEN - 1 },
-        [NFTA_SET_ELEM_LIST_ELEMENTS] = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_setelem_type_system },
-};
-
-static const NLTypeSystem nfnl_nft_setelem_list_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_setelem_list_types),
-        .types = nfnl_nft_setelem_list_types,
-};
-
-static const NLType nfnl_nft_msg_types [] = {
-        [NFT_MSG_DELTABLE]   = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_table_type_system, .size = sizeof(struct nfgenmsg) },
-        [NFT_MSG_NEWTABLE]   = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_table_type_system, .size = sizeof(struct nfgenmsg) },
-        [NFT_MSG_NEWCHAIN]   = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_chain_type_system, .size = sizeof(struct nfgenmsg) },
-        [NFT_MSG_NEWRULE]    = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_rule_type_system, .size = sizeof(struct nfgenmsg) },
-        [NFT_MSG_NEWSET]     = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_set_type_system, .size = sizeof(struct nfgenmsg) },
-        [NFT_MSG_NEWSETELEM] = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_setelem_list_type_system, .size = sizeof(struct nfgenmsg) },
-        [NFT_MSG_DELSETELEM] = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_setelem_list_type_system, .size = sizeof(struct nfgenmsg) },
-};
-
-static const NLTypeSystem nfnl_nft_msg_type_system = {
-        .count = ELEMENTSOF(nfnl_nft_msg_types),
-        .types = nfnl_nft_msg_types,
-};
-
-static const NLType nfnl_msg_batch_types [] = {
-        [NFNL_BATCH_GENID] = { .type = NETLINK_TYPE_U32 }
-};
-
-static const NLTypeSystem nfnl_msg_batch_type_system = {
-        .count = ELEMENTSOF(nfnl_msg_batch_types),
-        .types = nfnl_msg_batch_types,
-};
-
-static const NLType nfnl_types[] = {
-        [NLMSG_DONE]           = { .type = NETLINK_TYPE_NESTED, .type_system = &empty_type_system, .size = 0 },
-        [NLMSG_ERROR]          = { .type = NETLINK_TYPE_NESTED, .type_system = &error_type_system, .size = sizeof(struct nlmsgerr) },
-        [NFNL_MSG_BATCH_BEGIN] = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_msg_batch_type_system, .size = sizeof(struct nfgenmsg) },
-        [NFNL_MSG_BATCH_END]   = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_msg_batch_type_system, .size = sizeof(struct nfgenmsg) },
-        [NFNL_SUBSYS_NFTABLES] = { .type = NETLINK_TYPE_NESTED, .type_system = &nfnl_nft_msg_type_system, .size = sizeof(struct nfgenmsg) },
-};
-
-const NLTypeSystem nfnl_type_system_root = {
-        .count = ELEMENTSOF(nfnl_types),
-        .types = nfnl_types,
-};
-
-/* Mainly used when sending message */
-const NLTypeSystem genl_family_type_system_root = {
-        .count = ELEMENTSOF(genl_families),
-        .types = genl_families,
-};
-
-static const NLType genl_types[] = {
-        [SD_GENL_ERROR]   = { .type = NETLINK_TYPE_NESTED, .type_system = &error_type_system, .size = sizeof(struct nlmsgerr) },
-        [SD_GENL_DONE]    = { .type = NETLINK_TYPE_NESTED, .type_system = &empty_type_system },
-        [SD_GENL_ID_CTRL] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_get_family_type_system, .size = sizeof(struct genlmsghdr) },
-        [SD_GENL_NL80211] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system, .size = sizeof(struct genlmsghdr) },
-};
-
-/* Mainly used when message received */
-const NLTypeSystem genl_type_system_root = {
-        .count = ELEMENTSOF(genl_types),
-        .types = genl_types,
-};
-
-uint16_t type_get_type(const NLType *type) {
-        assert(type);
-        return type->type;
+NLAType policy_get_type(const NLAPolicy *policy) {
+        return ASSERT_PTR(policy)->type;
 }
 
-size_t type_get_size(const NLType *type) {
-        assert(type);
-        return type->size;
+size_t policy_get_size(const NLAPolicy *policy) {
+        return ASSERT_PTR(policy)->size;
 }
 
-void type_get_type_system(const NLType *nl_type, const NLTypeSystem **ret) {
-        assert(nl_type);
-        assert(ret);
-        assert(nl_type->type == NETLINK_TYPE_NESTED);
-        assert(nl_type->type_system);
+const NLAPolicySet *policy_get_policy_set(const NLAPolicy *policy) {
+        assert(policy);
+        assert(policy->type == NETLINK_TYPE_NESTED);
 
-        *ret = nl_type->type_system;
+        return ASSERT_PTR(policy->policy_set);
 }
 
-void type_get_type_system_union(const NLType *nl_type, const NLTypeSystemUnion **ret) {
-        assert(nl_type);
-        assert(ret);
-        assert(nl_type->type == NETLINK_TYPE_UNION);
-        assert(nl_type->type_system_union);
+const NLAPolicySetUnion *policy_get_policy_set_union(const NLAPolicy *policy) {
+        assert(policy);
+        assert(IN_SET(policy->type, NETLINK_TYPE_NESTED_UNION_BY_STRING, NETLINK_TYPE_NESTED_UNION_BY_FAMILY));
 
-        *ret = nl_type->type_system_union;
+        return ASSERT_PTR(policy->policy_set_union);
 }
 
-uint16_t type_system_get_count(const NLTypeSystem *type_system) {
-        assert(type_system);
-        return type_system->count;
-}
+int netlink_get_policy_set_and_header_size(
+                sd_netlink *nl,
+                uint16_t type,
+                const NLAPolicySet **ret_policy_set,
+                size_t *ret_header_size) {
 
-const NLTypeSystem *type_system_get_root(int protocol) {
-        switch (protocol) {
-                case NETLINK_GENERIC:
-                        return &genl_type_system_root;
+        const NLAPolicy *policy;
+
+        assert(nl);
+
+        if (IN_SET(type, NLMSG_DONE, NLMSG_ERROR))
+                policy = policy_set_get_policy(&basic_policy_set, type);
+        else
+                switch (nl->protocol) {
+                case NETLINK_ROUTE:
+                        policy = rtnl_get_policy(type);
+                        break;
                 case NETLINK_NETFILTER:
-                        return &nfnl_type_system_root;
-                default: /* NETLINK_ROUTE: */
-                        return &rtnl_type_system_root;
-        }
-}
-
-int type_system_root_get_type(sd_netlink *nl, const NLType **ret, uint16_t type) {
-        sd_genl_family_t family;
-        const NLType *nl_type;
-        int r;
-
-        if (!nl)
-                return type_system_get_type(&rtnl_type_system_root, ret, type);
-
-        if (nl->protocol != NETLINK_GENERIC)
-                return type_system_get_type(type_system_get_root(nl->protocol), ret, type);
-
-        r = nlmsg_type_to_genl_family(nl, type, &family);
-        if (r < 0)
-                return r;
-
-        if (family >= genl_type_system_root.count)
+                        policy = nfnl_get_policy(type);
+                        break;
+                case NETLINK_GENERIC:
+                        return genl_get_policy_set_and_header_size(nl, type, ret_policy_set, ret_header_size);
+                default:
+                        return -EOPNOTSUPP;
+                }
+        if (!policy)
                 return -EOPNOTSUPP;
 
-        nl_type = &genl_type_system_root.types[family];
-
-        if (nl_type->type == NETLINK_TYPE_UNSPEC)
+        if (policy_get_type(policy) != NETLINK_TYPE_NESTED)
                 return -EOPNOTSUPP;
 
-        *ret = nl_type;
-
+        if (ret_policy_set)
+                *ret_policy_set = policy_get_policy_set(policy);
+        if (ret_header_size)
+                *ret_header_size = policy_get_size(policy);
         return 0;
 }
 
-int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type) {
-        const NLType *nl_type;
+const NLAPolicy *policy_set_get_policy(const NLAPolicySet *policy_set, uint16_t attr_type) {
+        const NLAPolicy *policy;
 
-        assert(ret);
-        assert(type_system);
-        assert(type_system->types);
+        assert(policy_set);
+        assert(policy_set->policies);
 
-        if (type >= type_system->count)
-                return -EOPNOTSUPP;
+        if (attr_type >= policy_set->count)
+                return NULL;
 
-        nl_type = &type_system->types[type];
+        policy = &policy_set->policies[attr_type];
 
-        if (nl_type->type == NETLINK_TYPE_UNSPEC)
-                return -EOPNOTSUPP;
+        if (policy->type == NETLINK_TYPE_UNSPEC)
+                return NULL;
 
-        *ret = nl_type;
-
-        return 0;
+        return policy;
 }
 
-int type_system_get_type_system(const NLTypeSystem *type_system, const NLTypeSystem **ret, uint16_t type) {
-        const NLType *nl_type;
-        int r;
+const NLAPolicySet *policy_set_get_policy_set(const NLAPolicySet *policy_set, uint16_t attr_type) {
+        const NLAPolicy *policy;
 
-        assert(ret);
+        policy = policy_set_get_policy(policy_set, attr_type);
+        if (!policy)
+                return NULL;
 
-        r = type_system_get_type(type_system, &nl_type, type);
-        if (r < 0)
-                return r;
-
-        type_get_type_system(nl_type, ret);
-        return 0;
+        return policy_get_policy_set(policy);
 }
 
-int type_system_get_type_system_union(const NLTypeSystem *type_system, const NLTypeSystemUnion **ret, uint16_t type) {
-        const NLType *nl_type;
-        int r;
+const NLAPolicySetUnion *policy_set_get_policy_set_union(const NLAPolicySet *policy_set, uint16_t attr_type) {
+        const NLAPolicy *policy;
 
-        assert(ret);
+        policy = policy_set_get_policy(policy_set, attr_type);
+        if (!policy)
+                return NULL;
 
-        r = type_system_get_type(type_system, &nl_type, type);
-        if (r < 0)
-                return r;
-
-        type_get_type_system_union(nl_type, ret);
-        return 0;
+        return policy_get_policy_set_union(policy);
 }
 
-int type_system_union_get_type_system(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, const char *key) {
-        int type;
+uint16_t policy_set_union_get_match_attribute(const NLAPolicySetUnion *policy_set_union) {
+        assert(policy_set_union->match_attribute != 0);
 
-        assert(type_system_union);
-        assert(type_system_union->match_type == NL_MATCH_SIBLING);
-        assert(type_system_union->lookup);
-        assert(type_system_union->type_systems);
-        assert(ret);
-        assert(key);
-
-        type = type_system_union->lookup(key);
-        if (type < 0)
-                return -EOPNOTSUPP;
-
-        assert(type < type_system_union->num);
-
-        *ret = &type_system_union->type_systems[type];
-
-        return 0;
+        return policy_set_union->match_attribute;
 }
 
-int type_system_union_protocol_get_type_system(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, uint16_t protocol) {
-        const NLTypeSystem *type_system;
+const NLAPolicySet *policy_set_union_get_policy_set_by_string(const NLAPolicySetUnion *policy_set_union, const char *string) {
+        assert(policy_set_union);
+        assert(policy_set_union->elements);
+        assert(string);
 
-        assert(type_system_union);
-        assert(type_system_union->type_systems);
-        assert(type_system_union->match_type == NL_MATCH_PROTOCOL);
-        assert(ret);
+        for (size_t i = 0; i < policy_set_union->count; i++)
+                if (streq(policy_set_union->elements[i].string, string))
+                        return &policy_set_union->elements[i].policy_set;
 
-        if (protocol >= type_system_union->num)
-                return -EOPNOTSUPP;
+        return NULL;
+}
 
-        type_system = &type_system_union->type_systems[protocol];
-        if (!type_system->types)
-                return -EOPNOTSUPP;
+const NLAPolicySet *policy_set_union_get_policy_set_by_family(const NLAPolicySetUnion *policy_set_union, int family) {
+        assert(policy_set_union);
+        assert(policy_set_union->elements);
 
-        *ret = type_system;
+        for (size_t i = 0; i < policy_set_union->count; i++)
+                if (policy_set_union->elements[i].family == family)
+                        return &policy_set_union->elements[i].policy_set;
 
-        return 0;
+        return NULL;
 }
diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h
index 316d7f1..e034a98 100644
--- a/src/libsystemd/sd-netlink/netlink-types.h
+++ b/src/libsystemd/sd-netlink/netlink-types.h
@@ -1,10 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "macro.h"
+#include <errno.h>
 
-enum {
-        NETLINK_TYPE_UNSPEC,
+#include "sd-netlink.h"
+
+typedef enum NLAType {
+        NETLINK_TYPE_UNSPEC,                    /* NLA_UNSPEC */
+        NETLINK_TYPE_BINARY,                    /* NLA_BINARY */
+        NETLINK_TYPE_FLAG,                      /* NLA_FLAG */
         NETLINK_TYPE_U8,                        /* NLA_U8 */
         NETLINK_TYPE_U16,                       /* NLA_U16 */
         NETLINK_TYPE_U32,                       /* NLA_U32 */
@@ -14,126 +18,46 @@
         NETLINK_TYPE_S32,                       /* NLA_S32 */
         NETLINK_TYPE_S64,                       /* NLA_S64 */
         NETLINK_TYPE_STRING,                    /* NLA_STRING */
-        NETLINK_TYPE_FLAG,                      /* NLA_FLAG */
+        NETLINK_TYPE_BITFIELD32,                /* NLA_BITFIELD32 */
+        NETLINK_TYPE_REJECT,                    /* NLA_REJECT */
         NETLINK_TYPE_IN_ADDR,
         NETLINK_TYPE_ETHER_ADDR,
         NETLINK_TYPE_CACHE_INFO,
-        NETLINK_TYPE_NESTED,                    /* NLA_NESTED */
-        NETLINK_TYPE_UNION,
         NETLINK_TYPE_SOCKADDR,
-        NETLINK_TYPE_BINARY,
-        NETLINK_TYPE_BITFIELD32,                /* NLA_BITFIELD32 */
-        NETLINK_TYPE_REJECT,                    /* NLA_REJECT */
-};
+        NETLINK_TYPE_NESTED,                    /* NLA_NESTED */
+        NETLINK_TYPE_NESTED_UNION_BY_STRING,
+        NETLINK_TYPE_NESTED_UNION_BY_FAMILY,
+        _NETLINK_TYPE_MAX,
+        _NETLINK_TYPE_INVALID = -EINVAL,
+} NLAType;
 
-typedef enum NLMatchType {
-        NL_MATCH_SIBLING,
-        NL_MATCH_PROTOCOL,
-} NLMatchType;
+typedef struct NLAPolicy NLAPolicy;
+typedef struct NLAPolicySet NLAPolicySet;
+typedef struct NLAPolicySetUnion NLAPolicySetUnion;
 
-typedef struct NLTypeSystemUnion NLTypeSystemUnion;
-typedef struct NLTypeSystem NLTypeSystem;
-typedef struct NLType NLType;
+const NLAPolicy *rtnl_get_policy(uint16_t nlmsg_type);
+const NLAPolicy *nfnl_get_policy(uint16_t nlmsg_type);
+const NLAPolicySet *genl_get_policy_set_by_name(const char *name);
+int genl_get_policy_set_and_header_size(
+                sd_netlink *nl,
+                uint16_t id,
+                const NLAPolicySet **ret_policy_set,
+                size_t *ret_header_size);
 
-struct NLTypeSystemUnion {
-        int num;
-        NLMatchType match_type;
-        uint16_t match;
-        int (*lookup)(const char *);
-        const NLTypeSystem *type_systems;
-};
+NLAType policy_get_type(const NLAPolicy *policy);
+size_t policy_get_size(const NLAPolicy *policy);
+const NLAPolicySet *policy_get_policy_set(const NLAPolicy *policy);
+const NLAPolicySetUnion *policy_get_policy_set_union(const NLAPolicy *policy);
 
-extern const NLTypeSystem genl_family_type_system_root;
+int netlink_get_policy_set_and_header_size(
+                sd_netlink *nl,
+                uint16_t type,
+                const NLAPolicySet **ret_policy_set,
+                size_t *ret_header_size);
 
-uint16_t type_get_type(const NLType *type);
-size_t type_get_size(const NLType *type);
-void type_get_type_system(const NLType *type, const NLTypeSystem **ret);
-void type_get_type_system_union(const NLType *type, const NLTypeSystemUnion **ret);
-
-const NLTypeSystem* type_system_get_root(int protocol);
-uint16_t type_system_get_count(const NLTypeSystem *type_system);
-int type_system_root_get_type(sd_netlink *nl, const NLType **ret, uint16_t type);
-int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type);
-int type_system_get_type_system(const NLTypeSystem *type_system, const NLTypeSystem **ret, uint16_t type);
-int type_system_get_type_system_union(const NLTypeSystem *type_system, const NLTypeSystemUnion **ret, uint16_t type);
-int type_system_union_get_type_system(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, const char *key);
-int type_system_union_protocol_get_type_system(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, uint16_t protocol);
-
-typedef enum NLUnionLinkInfoData {
-        NL_UNION_LINK_INFO_DATA_BOND,
-        NL_UNION_LINK_INFO_DATA_BRIDGE,
-        NL_UNION_LINK_INFO_DATA_VLAN,
-        NL_UNION_LINK_INFO_DATA_VETH,
-        NL_UNION_LINK_INFO_DATA_DUMMY,
-        NL_UNION_LINK_INFO_DATA_MACVLAN,
-        NL_UNION_LINK_INFO_DATA_MACVTAP,
-        NL_UNION_LINK_INFO_DATA_IPVLAN,
-        NL_UNION_LINK_INFO_DATA_IPVTAP,
-        NL_UNION_LINK_INFO_DATA_VXLAN,
-        NL_UNION_LINK_INFO_DATA_IPIP_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_IPGRE_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_ERSPAN,
-        NL_UNION_LINK_INFO_DATA_IPGRETAP_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_IP6GRE_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_IP6GRETAP_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_SIT_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_VTI_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_VTI6_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_IP6TNL_TUNNEL,
-        NL_UNION_LINK_INFO_DATA_VRF,
-        NL_UNION_LINK_INFO_DATA_VCAN,
-        NL_UNION_LINK_INFO_DATA_GENEVE,
-        NL_UNION_LINK_INFO_DATA_VXCAN,
-        NL_UNION_LINK_INFO_DATA_WIREGUARD,
-        NL_UNION_LINK_INFO_DATA_NETDEVSIM,
-        NL_UNION_LINK_INFO_DATA_CAN,
-        NL_UNION_LINK_INFO_DATA_MACSEC,
-        NL_UNION_LINK_INFO_DATA_NLMON,
-        NL_UNION_LINK_INFO_DATA_XFRM,
-        NL_UNION_LINK_INFO_DATA_IFB,
-        NL_UNION_LINK_INFO_DATA_BAREUDP,
-        NL_UNION_LINK_INFO_DATA_BATADV,
-        _NL_UNION_LINK_INFO_DATA_MAX,
-        _NL_UNION_LINK_INFO_DATA_INVALID = -EINVAL,
-} NLUnionLinkInfoData;
-
-const char *nl_union_link_info_data_to_string(NLUnionLinkInfoData p) _const_;
-NLUnionLinkInfoData nl_union_link_info_data_from_string(const char *p) _pure_;
-
-typedef enum NLUnionTCAOptionData {
-        NL_UNION_TCA_OPTION_DATA_CAKE,
-        NL_UNION_TCA_OPTION_DATA_CODEL,
-        NL_UNION_TCA_OPTION_DATA_DRR,
-        NL_UNION_TCA_OPTION_DATA_ETS,
-        NL_UNION_TCA_OPTION_DATA_FQ,
-        NL_UNION_TCA_OPTION_DATA_FQ_CODEL,
-        NL_UNION_TCA_OPTION_DATA_FQ_PIE,
-        NL_UNION_TCA_OPTION_DATA_GRED,
-        NL_UNION_TCA_OPTION_DATA_HHF,
-        NL_UNION_TCA_OPTION_DATA_HTB,
-        NL_UNION_TCA_OPTION_DATA_PIE,
-        NL_UNION_TCA_OPTION_DATA_QFQ,
-        NL_UNION_TCA_OPTION_DATA_SFB,
-        NL_UNION_TCA_OPTION_DATA_TBF,
-        _NL_UNION_TCA_OPTION_DATA_MAX,
-        _NL_UNION_TCA_OPTION_DATA_INVALID = -EINVAL,
-} NLUnionTCAOptionData;
-
-const char *nl_union_tca_option_data_to_string(NLUnionTCAOptionData p) _const_;
-NLUnionTCAOptionData nl_union_tca_option_data_from_string(const char *p) _pure_;
-
-typedef enum NLUnionNFTExprData {
-        NL_UNION_NFT_EXPR_DATA_BITWISE,
-        NL_UNION_NFT_EXPR_DATA_CMP,
-        NL_UNION_NFT_EXPR_DATA_FIB,
-        NL_UNION_NFT_EXPR_DATA_LOOKUP,
-        NL_UNION_NFT_EXPR_DATA_PAYLOAD,
-        NL_UNION_NFT_EXPR_DATA_MASQ,
-        NL_UNION_NFT_EXPR_DATA_META,
-        NL_UNION_NFT_EXPR_DATA_NAT,
-        _NL_UNION_NFT_EXPR_DATA_MAX,
-        _NL_UNION_NFT_EXPR_DATA_INVALID = -EINVAL,
-} NLUnionNFTExprData;
-
-const char *nl_union_nft_expr_data_to_string(NLUnionNFTExprData p) _const_;
-NLUnionNFTExprData nl_union_nft_expr_data_from_string(const char *p) _pure_;
+const NLAPolicy *policy_set_get_policy(const NLAPolicySet *policy_set, uint16_t attr_type);
+const NLAPolicySet *policy_set_get_policy_set(const NLAPolicySet *type_system, uint16_t attr_type);
+const NLAPolicySetUnion *policy_set_get_policy_set_union(const NLAPolicySet *type_system, uint16_t attr_type);
+uint16_t policy_set_union_get_match_attribute(const NLAPolicySetUnion *policy_set_union);
+const NLAPolicySet *policy_set_union_get_policy_set_by_string(const NLAPolicySetUnion *type_system_union, const char *string);
+const NLAPolicySet *policy_set_union_get_policy_set_by_family(const NLAPolicySetUnion *type_system_union, int family);
diff --git a/src/libsystemd/sd-netlink/netlink-util.c b/src/libsystemd/sd-netlink/netlink-util.c
index 1211145..6cd916a 100644
--- a/src/libsystemd/sd-netlink/netlink-util.c
+++ b/src/libsystemd/sd-netlink/netlink-util.c
@@ -2,17 +2,19 @@
 
 #include "sd-netlink.h"
 
-#include "format-util.h"
+#include "fd-util.h"
+#include "io-util.h"
 #include "memory-util.h"
 #include "netlink-internal.h"
 #include "netlink-util.h"
 #include "parse-util.h"
+#include "process-util.h"
 #include "strv.h"
 
 int rtnl_set_link_name(sd_netlink **rtnl, int ifindex, const char *name) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
         _cleanup_strv_free_ char **alternative_names = NULL;
-        char old_name[IF_NAMESIZE + 1] = {};
+        bool altname_deleted = false;
         int r;
 
         assert(rtnl);
@@ -33,36 +35,39 @@
                         return log_debug_errno(r, "Failed to remove '%s' from alternative names on network interface %i: %m",
                                                name, ifindex);
 
-                format_ifname(ifindex, old_name);
+                altname_deleted = true;
         }
 
         r = sd_rtnl_message_new_link(*rtnl, &message, RTM_SETLINK, ifindex);
         if (r < 0)
-                return r;
+                goto fail;
 
         r = sd_netlink_message_append_string(message, IFLA_IFNAME, name);
         if (r < 0)
-                return r;
+                goto fail;
 
         r = sd_netlink_call(*rtnl, message, 0, NULL);
         if (r < 0)
-                return r;
-
-        if (!isempty(old_name)) {
-                r = rtnl_set_link_alternative_names(rtnl, ifindex, STRV_MAKE(old_name));
-                if (r < 0)
-                        log_debug_errno(r, "Failed to set '%s' as an alternative name on network interface %i, ignoring: %m",
-                                        old_name, ifindex);
-        }
+                goto fail;
 
         return 0;
+
+fail:
+        if (altname_deleted) {
+                int q = rtnl_set_link_alternative_names(rtnl, ifindex, STRV_MAKE(name));
+                if (q < 0)
+                        log_debug_errno(q, "Failed to restore '%s' as an alternative name on network interface %i, ignoring: %m",
+                                        name, ifindex);
+        }
+
+        return r;
 }
 
 int rtnl_set_link_properties(
                 sd_netlink **rtnl,
                 int ifindex,
                 const char *alias,
-                const struct ether_addr *mac,
+                const struct hw_addr_data *hw_addr,
                 uint32_t txqueues,
                 uint32_t rxqueues,
                 uint32_t txqueuelen,
@@ -75,8 +80,14 @@
         assert(rtnl);
         assert(ifindex > 0);
 
-        if (!alias && !mac && txqueues == 0 && rxqueues == 0 && txqueuelen == UINT32_MAX && mtu == 0 &&
-            gso_max_size == 0 && gso_max_segments == 0)
+        if (!alias &&
+            (!hw_addr || hw_addr->length == 0) &&
+            txqueues == 0 &&
+            rxqueues == 0 &&
+            txqueuelen == UINT32_MAX &&
+            mtu == 0 &&
+            gso_max_size == 0 &&
+            gso_max_segments == 0)
                 return 0;
 
         if (!*rtnl) {
@@ -95,8 +106,8 @@
                         return r;
         }
 
-        if (mac) {
-                r = sd_netlink_message_append_ether_addr(message, IFLA_ADDRESS, mac);
+        if (hw_addr && hw_addr->length > 0) {
+                r = netlink_message_append_hw_addr(message, IFLA_ADDRESS, hw_addr);
                 if (r < 0)
                         return r;
         }
@@ -176,7 +187,12 @@
         return 0;
 }
 
-static int rtnl_update_link_alternative_names(sd_netlink **rtnl, uint16_t nlmsg_type, int ifindex, char * const *alternative_names) {
+static int rtnl_update_link_alternative_names(
+                sd_netlink **rtnl,
+                uint16_t nlmsg_type,
+                int ifindex,
+                char* const *alternative_names) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
         int r;
 
@@ -201,7 +217,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_append_strv(message, IFLA_ALT_IFNAME, alternative_names);
+        r = sd_netlink_message_append_strv(message, IFLA_ALT_IFNAME, (const char**) alternative_names);
         if (r < 0)
                 return r;
 
@@ -216,15 +232,19 @@
         return 0;
 }
 
-int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names) {
+int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char* const *alternative_names) {
         return rtnl_update_link_alternative_names(rtnl, RTM_NEWLINKPROP, ifindex, alternative_names);
 }
 
-int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names) {
+int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char* const *alternative_names) {
         return rtnl_update_link_alternative_names(rtnl, RTM_DELLINKPROP, ifindex, alternative_names);
 }
 
-int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifname, char * const *alternative_names) {
+int rtnl_set_link_alternative_names_by_ifname(
+                sd_netlink **rtnl,
+                const char *ifname,
+                char* const *alternative_names) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
         int r;
 
@@ -252,7 +272,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_append_strv(message, IFLA_ALT_IFNAME, alternative_names);
+        r = sd_netlink_message_append_strv(message, IFLA_ALT_IFNAME, (const char**) alternative_names);
         if (r < 0)
                 return r;
 
@@ -353,8 +373,18 @@
         return r;
 }
 
-int rtnl_get_link_info(sd_netlink **rtnl, int ifindex, unsigned short *ret_iftype, unsigned *ret_flags) {
+int rtnl_get_link_info(
+                sd_netlink **rtnl,
+                int ifindex,
+                unsigned short *ret_iftype,
+                unsigned *ret_flags,
+                char **ret_kind,
+                struct hw_addr_data *ret_hw_addr,
+                struct hw_addr_data *ret_permanent_hw_addr) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL, *reply = NULL;
+        struct hw_addr_data addr = HW_ADDR_NULL, perm_addr = HW_ADDR_NULL;
+        _cleanup_free_ char *kind = NULL;
         unsigned short iftype;
         unsigned flags;
         int r;
@@ -393,29 +423,41 @@
                         return r;
         }
 
+        if (ret_kind) {
+                r = sd_netlink_message_enter_container(reply, IFLA_LINKINFO);
+                if (r >= 0) {
+                        r = sd_netlink_message_read_string_strdup(reply, IFLA_INFO_KIND, &kind);
+                        if (r < 0 && r != -ENODATA)
+                                return r;
+
+                        r = sd_netlink_message_exit_container(reply);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        if (ret_hw_addr) {
+                r = netlink_message_read_hw_addr(reply, IFLA_ADDRESS, &addr);
+                if (r < 0 && r != -ENODATA)
+                        return r;
+        }
+
+        if (ret_permanent_hw_addr) {
+                r = netlink_message_read_hw_addr(reply, IFLA_PERM_ADDRESS, &perm_addr);
+                if (r < 0 && r != -ENODATA)
+                        return r;
+        }
+
         if (ret_iftype)
                 *ret_iftype = iftype;
         if (ret_flags)
                 *ret_flags = flags;
-        return 0;
-}
-
-int rtnl_message_new_synthetic_error(sd_netlink *rtnl, int error, uint32_t serial, sd_netlink_message **ret) {
-        struct nlmsgerr *err;
-        int r;
-
-        assert(error <= 0);
-
-        r = message_new(rtnl, ret, NLMSG_ERROR);
-        if (r < 0)
-                return r;
-
-        rtnl_message_seal(*ret);
-        (*ret)->hdr->nlmsg_seq = serial;
-
-        err = NLMSG_DATA((*ret)->hdr);
-        err->error = error;
-
+        if (ret_kind)
+                *ret_kind = TAKE_PTR(kind);
+        if (ret_hw_addr)
+                *ret_hw_addr = addr;
+        if (ret_permanent_hw_addr)
+                *ret_permanent_hw_addr = perm_addr;
         return 0;
 }
 
@@ -598,3 +640,130 @@
                 *ret = TAKE_PTR(set);
         return 0;
 }
+
+bool netlink_pid_changed(sd_netlink *nl) {
+        /* We don't support people creating an nl connection and
+         * keeping it around over a fork(). Let's complain. */
+        return ASSERT_PTR(nl)->original_pid != getpid_cached();
+}
+
+static int socket_open(int family) {
+        int fd;
+
+        fd = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, family);
+        if (fd < 0)
+                return -errno;
+
+        return fd_move_above_stdio(fd);
+}
+
+int netlink_open_family(sd_netlink **ret, int family) {
+        _cleanup_close_ int fd = -EBADF;
+        int r;
+
+        fd = socket_open(family);
+        if (fd < 0)
+                return fd;
+
+        r = sd_netlink_open_fd(ret, fd);
+        if (r < 0)
+                return r;
+        TAKE_FD(fd);
+
+        return 0;
+}
+
+static bool serial_used(sd_netlink *nl, uint32_t serial) {
+        assert(nl);
+
+        return
+                hashmap_contains(nl->reply_callbacks, UINT32_TO_PTR(serial)) ||
+                hashmap_contains(nl->rqueue_by_serial, UINT32_TO_PTR(serial)) ||
+                hashmap_contains(nl->rqueue_partial_by_serial, UINT32_TO_PTR(serial));
+}
+
+void netlink_seal_message(sd_netlink *nl, sd_netlink_message *m) {
+        uint32_t picked;
+
+        assert(nl);
+        assert(!netlink_pid_changed(nl));
+        assert(m);
+        assert(m->hdr);
+
+        /* Avoid collisions with outstanding requests */
+        do {
+                picked = nl->serial;
+
+                /* Don't use seq == 0, as that is used for broadcasts, so we would get confused by replies to
+                   such messages */
+                nl->serial = nl->serial == UINT32_MAX ? 1 : nl->serial + 1;
+
+        } while (serial_used(nl, picked));
+
+        m->hdr->nlmsg_seq = picked;
+        message_seal(m);
+}
+
+static int socket_writev_message(sd_netlink *nl, sd_netlink_message **m, size_t msgcount) {
+        _cleanup_free_ struct iovec *iovs = NULL;
+        ssize_t k;
+
+        assert(nl);
+        assert(m);
+        assert(msgcount > 0);
+
+        iovs = new(struct iovec, msgcount);
+        if (!iovs)
+                return -ENOMEM;
+
+        for (size_t i = 0; i < msgcount; i++) {
+                assert(m[i]->hdr);
+                assert(m[i]->hdr->nlmsg_len > 0);
+
+                iovs[i] = IOVEC_MAKE(m[i]->hdr, m[i]->hdr->nlmsg_len);
+        }
+
+        k = writev(nl->fd, iovs, msgcount);
+        if (k < 0)
+                return -errno;
+
+        return k;
+}
+
+int sd_netlink_sendv(
+                sd_netlink *nl,
+                sd_netlink_message **messages,
+                size_t msgcount,
+                uint32_t **ret_serial) {
+
+        _cleanup_free_ uint32_t *serials = NULL;
+        int r;
+
+        assert_return(nl, -EINVAL);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
+        assert_return(messages, -EINVAL);
+        assert_return(msgcount > 0, -EINVAL);
+
+        if (ret_serial) {
+                serials = new(uint32_t, msgcount);
+                if (!serials)
+                        return -ENOMEM;
+        }
+
+        for (size_t i = 0; i < msgcount; i++) {
+                assert_return(!messages[i]->sealed, -EPERM);
+
+                netlink_seal_message(nl, messages[i]);
+                if (serials)
+                        serials[i] = message_get_serial(messages[i]);
+        }
+
+        r = socket_writev_message(nl, messages, msgcount);
+        if (r < 0)
+                return r;
+
+        if (ret_serial)
+                *ret_serial = TAKE_PTR(serials);
+
+        return r;
+}
diff --git a/src/libsystemd/sd-netlink/netlink-util.h b/src/libsystemd/sd-netlink/netlink-util.h
index a5d7256..72d16fa 100644
--- a/src/libsystemd/sd-netlink/netlink-util.h
+++ b/src/libsystemd/sd-netlink/netlink-util.h
@@ -9,7 +9,6 @@
 #include "in-addr-util.h"
 #include "ordered-set.h"
 #include "socket-util.h"
-#include "util.h"
 
 /* See struct rtvia in rtnetlink.h */
 typedef struct RouteVia {
@@ -29,58 +28,12 @@
 
 int multipath_route_dup(const MultipathRoute *m, MultipathRoute **ret);
 
-int rtnl_message_new_synthetic_error(sd_netlink *rtnl, int error, uint32_t serial, sd_netlink_message **ret);
-uint32_t rtnl_message_get_serial(sd_netlink_message *m);
-void rtnl_message_seal(sd_netlink_message *m);
-
-static inline bool rtnl_message_type_is_neigh(uint16_t type) {
-        return IN_SET(type, RTM_NEWNEIGH, RTM_GETNEIGH, RTM_DELNEIGH);
-}
-
-static inline bool rtnl_message_type_is_route(uint16_t type) {
-        return IN_SET(type, RTM_NEWROUTE, RTM_GETROUTE, RTM_DELROUTE);
-}
-
-static inline bool rtnl_message_type_is_nexthop(uint16_t type) {
-        return IN_SET(type, RTM_NEWNEXTHOP, RTM_GETNEXTHOP, RTM_DELNEXTHOP);
-}
-
-static inline bool rtnl_message_type_is_link(uint16_t type) {
-        return IN_SET(type,
-                      RTM_NEWLINK, RTM_SETLINK, RTM_GETLINK, RTM_DELLINK,
-                      RTM_NEWLINKPROP, RTM_DELLINKPROP, RTM_GETLINKPROP);
-}
-
-static inline bool rtnl_message_type_is_addr(uint16_t type) {
-        return IN_SET(type, RTM_NEWADDR, RTM_GETADDR, RTM_DELADDR);
-}
-
-static inline bool rtnl_message_type_is_addrlabel(uint16_t type) {
-        return IN_SET(type, RTM_NEWADDRLABEL, RTM_DELADDRLABEL, RTM_GETADDRLABEL);
-}
-
-static inline bool rtnl_message_type_is_routing_policy_rule(uint16_t type) {
-        return IN_SET(type, RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE);
-}
-
-static inline bool rtnl_message_type_is_qdisc(uint16_t type) {
-        return IN_SET(type, RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC);
-}
-
-static inline bool rtnl_message_type_is_tclass(uint16_t type) {
-        return IN_SET(type, RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS);
-}
-
-static inline bool rtnl_message_type_is_mdb(uint16_t type) {
-        return IN_SET(type, RTM_NEWMDB, RTM_DELMDB, RTM_GETMDB);
-}
-
 int rtnl_set_link_name(sd_netlink **rtnl, int ifindex, const char *name);
 int rtnl_set_link_properties(
                 sd_netlink **rtnl,
                 int ifindex,
                 const char *alias,
-                const struct ether_addr *mac,
+                const struct hw_addr_data *hw_addr,
                 uint32_t txqueues,
                 uint32_t rxqueues,
                 uint32_t txqueuelen,
@@ -88,14 +41,21 @@
                 uint32_t gso_max_size,
                 size_t gso_max_segments);
 int rtnl_get_link_alternative_names(sd_netlink **rtnl, int ifindex, char ***ret);
-int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names);
-int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifname, char * const *alternative_names);
-int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names);
+int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char* const *alternative_names);
+int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifname, char* const *alternative_names);
+int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char* const *alternative_names);
 int rtnl_resolve_link_alternative_name(sd_netlink **rtnl, const char *name, char **ret);
 int rtnl_resolve_ifname(sd_netlink **rtnl, const char *name);
 int rtnl_resolve_interface(sd_netlink **rtnl, const char *name);
 int rtnl_resolve_interface_or_warn(sd_netlink **rtnl, const char *name);
-int rtnl_get_link_info(sd_netlink **rtnl, int ifindex, unsigned short *ret_iftype, unsigned *ret_flags);
+int rtnl_get_link_info(
+                sd_netlink **rtnl,
+                int ifindex,
+                unsigned short *ret_iftype,
+                unsigned *ret_flags,
+                char **ret_kind,
+                struct hw_addr_data *ret_hw_addr,
+                struct hw_addr_data *ret_permanent_hw_addr);
 
 int rtnl_log_parse_error(int r);
 int rtnl_log_create_error(int r);
@@ -120,6 +80,16 @@
                                      userdata, description);            \
         })
 
+#define genl_add_match(nl, ret_slot, family, group, cmd, callback, destroy_callback, userdata, description) \
+        ({                                                              \
+                int (*_callback_)(sd_netlink *, sd_netlink_message *, typeof(userdata)) = callback; \
+                void (*_destroy_)(typeof(userdata)) = destroy_callback; \
+                sd_genl_add_match(nl, ret_slot, family, group, cmd,     \
+                                  (sd_netlink_message_handler_t) _callback_, \
+                                  (sd_netlink_destroy_t) _destroy_,     \
+                                  userdata, description);               \
+        })
+
 int netlink_message_append_hw_addr(sd_netlink_message *m, unsigned short type, const struct hw_addr_data *data);
 int netlink_message_append_in_addr_union(sd_netlink_message *m, unsigned short type, int family, const union in_addr_union *data);
 int netlink_message_append_sockaddr_union(sd_netlink_message *m, unsigned short type, const union sockaddr_union *data);
@@ -131,3 +101,8 @@
 int rtattr_append_attribute(struct rtattr **rta, unsigned short type, const void *data, size_t data_length);
 
 int rtattr_read_nexthop(const struct rtnexthop *rtnh, size_t size, int family, OrderedSet **ret);
+
+void netlink_seal_message(sd_netlink *nl, sd_netlink_message *m);
+
+/* TODO: to be exported later */
+int sd_netlink_sendv(sd_netlink *nl, sd_netlink_message **messages, size_t msgcnt, uint32_t **ret_serial);
diff --git a/src/libsystemd/sd-netlink/nfnl-message.c b/src/libsystemd/sd-netlink/nfnl-message.c
deleted file mode 100644
index 5f669f7..0000000
--- a/src/libsystemd/sd-netlink/nfnl-message.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <netinet/in.h>
-#include <linux/if_addrlabel.h>
-#include <linux/netfilter/nfnetlink.h>
-#include <linux/netfilter/nf_tables.h>
-#include <linux/nexthop.h>
-#include <stdbool.h>
-#include <unistd.h>
-
-#include "sd-netlink.h"
-
-#include "format-util.h"
-#include "netlink-internal.h"
-#include "netlink-types.h"
-#include "netlink-util.h"
-#include "socket-util.h"
-#include "util.h"
-
-static int nft_message_new(sd_netlink *nfnl, sd_netlink_message **ret, int family, uint16_t type, uint16_t flags) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        const NLType *nl_type;
-        size_t size;
-        int r;
-
-        assert_return(nfnl, -EINVAL);
-
-        r = type_system_root_get_type(nfnl, &nl_type, NFNL_SUBSYS_NFTABLES);
-        if (r < 0)
-                return r;
-
-        if (type_get_type(nl_type) != NETLINK_TYPE_NESTED)
-                return -EINVAL;
-
-        r = message_new_empty(nfnl, &m);
-        if (r < 0)
-                return r;
-
-        size = NLMSG_SPACE(type_get_size(nl_type));
-
-        assert(size >= sizeof(struct nlmsghdr));
-        m->hdr = malloc0(size);
-        if (!m->hdr)
-                return -ENOMEM;
-
-        m->hdr->nlmsg_flags = NLM_F_REQUEST | flags;
-
-        type_get_type_system(nl_type, &m->containers[0].type_system);
-
-        r = type_system_get_type_system(m->containers[0].type_system,
-                                        &m->containers[0].type_system,
-                                        type);
-        if (r < 0)
-                return r;
-
-        m->hdr->nlmsg_len = size;
-        m->hdr->nlmsg_type = NFNL_SUBSYS_NFTABLES << 8 | type;
-
-        *(struct nfgenmsg*) NLMSG_DATA(m->hdr) = (struct nfgenmsg) {
-                .nfgen_family = family,
-                .version = NFNETLINK_V0,
-                .res_id = nfnl->serial,
-        };
-
-        *ret = TAKE_PTR(m);
-        return 0;
-}
-
-static int sd_nfnl_message_batch(sd_netlink *nfnl, sd_netlink_message **ret, int v) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        int r;
-
-        r = message_new(nfnl, &m, v);
-        if (r < 0)
-                return r;
-
-        *(struct nfgenmsg*) NLMSG_DATA(m->hdr) = (struct nfgenmsg) {
-                .nfgen_family = AF_UNSPEC,
-                .version = NFNETLINK_V0,
-                .res_id = NFNL_SUBSYS_NFTABLES,
-        };
-
-        *ret = TAKE_PTR(m);
-        return r;
-}
-
-int sd_nfnl_message_batch_begin(sd_netlink *nfnl, sd_netlink_message **ret) {
-        return sd_nfnl_message_batch(nfnl, ret, NFNL_MSG_BATCH_BEGIN);
-}
-
-int sd_nfnl_message_batch_end(sd_netlink *nfnl, sd_netlink_message **ret) {
-        return sd_nfnl_message_batch(nfnl, ret, NFNL_MSG_BATCH_END);
-}
-
-int sd_nfnl_nft_message_new_basechain(sd_netlink *nfnl, sd_netlink_message **ret,
-                                      int family,
-                                      const char *table, const char *chain,
-                                      const char *type,
-                                      uint8_t hook, int prio) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        int r;
-
-        r = nft_message_new(nfnl, &m, family, NFT_MSG_NEWCHAIN, NLM_F_CREATE | NLM_F_ACK);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_CHAIN_TABLE, table);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_CHAIN_NAME, chain);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_CHAIN_TYPE, type);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_open_container(m, NFTA_CHAIN_HOOK);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_u32(m, NFTA_HOOK_HOOKNUM, htobe32(hook));
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_u32(m, NFTA_HOOK_PRIORITY, htobe32(prio));
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_close_container(m);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(m);
-        return 0;
-}
-
-int sd_nfnl_nft_message_del_table(sd_netlink *nfnl, sd_netlink_message **ret,
-                                  int family, const char *table) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        int r;
-
-        r = nft_message_new(nfnl, &m, family, NFT_MSG_DELTABLE, NLM_F_CREATE | NLM_F_ACK);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_TABLE_NAME, table);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(m);
-        return r;
-}
-
-int sd_nfnl_nft_message_new_table(sd_netlink *nfnl, sd_netlink_message **ret,
-                                  int family, const char *table, uint16_t flags) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        int r;
-
-        r = nft_message_new(nfnl, &m, family, NFT_MSG_NEWTABLE, NLM_F_CREATE | flags);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_TABLE_NAME, table);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(m);
-        return r;
-}
-
-int sd_nfnl_nft_message_new_rule(sd_netlink *nfnl, sd_netlink_message **ret,
-                                 int family, const char *table, const char *chain) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        int r;
-
-        r = nft_message_new(nfnl, &m, family, NFT_MSG_NEWRULE, NLM_F_CREATE | NLM_F_ACK);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_RULE_TABLE, table);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_RULE_CHAIN, chain);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(m);
-        return r;
-}
-
-int sd_nfnl_nft_message_new_set(sd_netlink *nfnl, sd_netlink_message **ret,
-                                int family, const char *table, const char *set_name,
-                                uint32_t set_id, uint32_t klen) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        int r;
-
-        r = nft_message_new(nfnl, &m, family, NFT_MSG_NEWSET, NLM_F_CREATE | NLM_F_ACK);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_SET_TABLE, table);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_SET_NAME, set_name);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_u32(m, NFTA_SET_ID, ++set_id);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_u32(m, NFTA_SET_KEY_LEN, htobe32(klen));
-        if (r < 0)
-                return r;
-        *ret = TAKE_PTR(m);
-        return r;
-}
-
-int sd_nfnl_nft_message_new_setelems_begin(sd_netlink *nfnl, sd_netlink_message **ret,
-                                           int family, const char *table, const char *set_name) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        int r;
-
-        r = nft_message_new(nfnl, &m, family, NFT_MSG_NEWSETELEM, NLM_F_CREATE | NLM_F_ACK);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_SET_ELEM_LIST_TABLE, table);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_SET_ELEM_LIST_SET, set_name);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_open_container(m, NFTA_SET_ELEM_LIST_ELEMENTS);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(m);
-        return r;
-}
-
-int sd_nfnl_nft_message_del_setelems_begin(sd_netlink *nfnl, sd_netlink_message **ret,
-                                           int family, const char *table, const char *set_name) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        int r;
-
-        r = nft_message_new(nfnl, &m, family, NFT_MSG_DELSETELEM, NLM_F_ACK);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_SET_ELEM_LIST_TABLE, table);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_string(m, NFTA_SET_ELEM_LIST_SET, set_name);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_open_container(m, NFTA_SET_ELEM_LIST_ELEMENTS);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(m);
-        return r;
-}
-
-static int sd_nfnl_add_data(sd_netlink_message *m, uint16_t attr, const void *data, uint32_t dlen) {
-        int r = sd_netlink_message_open_container(m, attr);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_data(m, NFTA_DATA_VALUE, data, dlen);
-        if (r < 0)
-                return r;
-
-        return sd_netlink_message_close_container(m); /* attr */
-}
-
-int sd_nfnl_nft_message_add_setelem(sd_netlink_message *m, uint32_t num,
-                                    const void *key, uint32_t klen,
-                                    const void *data, uint32_t dlen) {
-        int r;
-
-        r = sd_netlink_message_open_array(m, num);
-        if (r < 0)
-                return r;
-
-        r = sd_nfnl_add_data(m, NFTA_SET_ELEM_KEY, key, klen);
-        if (r < 0)
-                goto cancel;
-
-        if (data) {
-                r = sd_nfnl_add_data(m, NFTA_SET_ELEM_DATA, data, dlen);
-                if (r < 0)
-                        goto cancel;
-        }
-
-        return r;
-cancel:
-        sd_netlink_message_cancel_array(m);
-        return r;
-}
-
-int sd_nfnl_nft_message_add_setelem_end(sd_netlink_message *m) {
-        return sd_netlink_message_close_container(m); /* NFTA_SET_ELEM_LIST_ELEMENTS */
-}
-
-int sd_nfnl_socket_open(sd_netlink **ret) {
-        return netlink_open_family(ret, NETLINK_NETFILTER);
-}
diff --git a/src/libsystemd/sd-netlink/rtnl-message.c b/src/libsystemd/sd-netlink/rtnl-message.c
deleted file mode 100644
index 7f83bf5..0000000
--- a/src/libsystemd/sd-netlink/rtnl-message.c
+++ /dev/null
@@ -1,1137 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <netinet/in.h>
-#include <linux/fib_rules.h>
-#include <linux/if_addrlabel.h>
-#include <linux/if_bridge.h>
-#include <linux/nexthop.h>
-#include <stdbool.h>
-#include <unistd.h>
-
-#include "sd-netlink.h"
-
-#include "format-util.h"
-#include "netlink-internal.h"
-#include "netlink-types.h"
-#include "netlink-util.h"
-#include "socket-util.h"
-#include "util.h"
-
-int sd_rtnl_message_route_set_dst_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        if ((rtm->rtm_family == AF_INET && prefixlen > 32) ||
-            (rtm->rtm_family == AF_INET6 && prefixlen > 128))
-                return -ERANGE;
-
-        rtm->rtm_dst_len = prefixlen;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_set_src_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        if ((rtm->rtm_family == AF_INET && prefixlen > 32) ||
-            (rtm->rtm_family == AF_INET6 && prefixlen > 128))
-                return -ERANGE;
-
-        rtm->rtm_src_len = prefixlen;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_set_scope(sd_netlink_message *m, unsigned char scope) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        rtm->rtm_scope = scope;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_set_flags(sd_netlink_message *m, unsigned flags) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        rtm->rtm_flags = flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_flags(sd_netlink_message *m, unsigned *flags) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(flags, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *flags = rtm->rtm_flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_set_table(sd_netlink_message *m, unsigned char table) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        rtm->rtm_table = table;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_family(sd_netlink_message *m, int *family) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(family, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *family = rtm->rtm_family;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_type(sd_netlink_message *m, unsigned char *type) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(type, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *type = rtm->rtm_type;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_set_type(sd_netlink_message *m, unsigned char type) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        rtm->rtm_type = type;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_protocol(sd_netlink_message *m, unsigned char *protocol) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(protocol, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *protocol = rtm->rtm_protocol;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_scope(sd_netlink_message *m, unsigned char *scope) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(scope, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *scope = rtm->rtm_scope;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_tos(sd_netlink_message *m, uint8_t *tos) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(tos, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *tos = rtm->rtm_tos;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_table(sd_netlink_message *m, unsigned char *table) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(table, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *table = rtm->rtm_table;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_dst_prefixlen(sd_netlink_message *m, unsigned char *dst_len) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(dst_len, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *dst_len = rtm->rtm_dst_len;
-
-        return 0;
-}
-
-int sd_rtnl_message_route_get_src_prefixlen(sd_netlink_message *m, unsigned char *src_len) {
-        struct rtmsg *rtm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(src_len, -EINVAL);
-
-        rtm = NLMSG_DATA(m->hdr);
-
-        *src_len = rtm->rtm_src_len;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_route(sd_netlink *rtnl, sd_netlink_message **ret,
-                              uint16_t nlmsg_type, int rtm_family,
-                              unsigned char rtm_protocol) {
-        struct rtmsg *rtm;
-        int r;
-
-        assert_return(rtnl_message_type_is_route(nlmsg_type), -EINVAL);
-        assert_return((nlmsg_type == RTM_GETROUTE && rtm_family == AF_UNSPEC) ||
-                      IN_SET(rtm_family, AF_INET, AF_INET6), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nlmsg_type == RTM_NEWROUTE)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_APPEND;
-
-        rtm = NLMSG_DATA((*ret)->hdr);
-
-        rtm->rtm_family = rtm_family;
-        rtm->rtm_protocol = rtm_protocol;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_nexthop(sd_netlink *rtnl, sd_netlink_message **ret,
-                                uint16_t nhmsg_type, int nh_family,
-                                unsigned char nh_protocol) {
-        struct nhmsg *nhm;
-        int r;
-
-        assert_return(rtnl_message_type_is_nexthop(nhmsg_type), -EINVAL);
-        switch(nhmsg_type) {
-        case RTM_DELNEXTHOP:
-                assert_return(nh_family == AF_UNSPEC, -EINVAL);
-                _fallthrough_;
-        case RTM_GETNEXTHOP:
-                assert_return(nh_protocol == RTPROT_UNSPEC, -EINVAL);
-                break;
-        case RTM_NEWNEXTHOP:
-                assert_return(IN_SET(nh_family, AF_UNSPEC, AF_INET, AF_INET6), -EINVAL);
-                break;
-        default:
-                assert_not_reached("Invalid message type.");
-        }
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nhmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nhmsg_type == RTM_NEWNEXTHOP)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_APPEND;
-
-        nhm = NLMSG_DATA((*ret)->hdr);
-
-        nhm->nh_family = nh_family;
-        nhm->nh_scope = RT_SCOPE_UNIVERSE;
-        nhm->nh_protocol = nh_protocol;
-
-        return 0;
-}
-
-int sd_rtnl_message_nexthop_set_flags(sd_netlink_message *m, uint8_t flags) {
-        struct nhmsg *nhm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(m->hdr->nlmsg_type == RTM_NEWNEXTHOP, -EINVAL);
-
-        nhm = NLMSG_DATA(m->hdr);
-        nhm->nh_flags |= flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_nexthop_get_family(sd_netlink_message *m, uint8_t *family) {
-        struct nhmsg *nhm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_nexthop(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(family, -EINVAL);
-
-        nhm = NLMSG_DATA(m->hdr);
-        *family = nhm->nh_family;
-
-        return 0;
-}
-
-int sd_rtnl_message_nexthop_get_protocol(sd_netlink_message *m, uint8_t *protocol) {
-        struct nhmsg *nhm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_nexthop(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(protocol, -EINVAL);
-
-        nhm = NLMSG_DATA(m->hdr);
-        *protocol = nhm->nh_protocol;
-
-        return 0;
-}
-
-int sd_rtnl_message_neigh_set_flags(sd_netlink_message *m, uint8_t flags) {
-        struct ndmsg *ndm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
-
-        ndm = NLMSG_DATA(m->hdr);
-        ndm->ndm_flags |= flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_neigh_set_state(sd_netlink_message *m, uint16_t state) {
-        struct ndmsg *ndm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
-
-        ndm = NLMSG_DATA(m->hdr);
-        ndm->ndm_state |= state;
-
-        return 0;
-}
-
-int sd_rtnl_message_neigh_get_flags(sd_netlink_message *m, uint8_t *flags) {
-        struct ndmsg *ndm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
-
-        ndm = NLMSG_DATA(m->hdr);
-        *flags = ndm->ndm_flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_neigh_get_state(sd_netlink_message *m, uint16_t *state) {
-        struct ndmsg *ndm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
-
-        ndm = NLMSG_DATA(m->hdr);
-        *state = ndm->ndm_state;
-
-        return 0;
-}
-
-int sd_rtnl_message_neigh_get_family(sd_netlink_message *m, int *family) {
-        struct ndmsg *ndm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(family, -EINVAL);
-
-        ndm = NLMSG_DATA(m->hdr);
-
-        *family = ndm->ndm_family;
-
-        return 0;
-}
-
-int sd_rtnl_message_neigh_get_ifindex(sd_netlink_message *m, int *index) {
-        struct ndmsg *ndm;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_neigh(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(index, -EINVAL);
-
-        ndm = NLMSG_DATA(m->hdr);
-
-        *index = ndm->ndm_ifindex;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_neigh(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int index, int ndm_family) {
-        struct ndmsg *ndm;
-        int r;
-
-        assert_return(rtnl_message_type_is_neigh(nlmsg_type), -EINVAL);
-        assert_return(IN_SET(ndm_family, AF_UNSPEC, AF_INET, AF_INET6, AF_BRIDGE), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nlmsg_type == RTM_NEWNEIGH) {
-                if (ndm_family == AF_BRIDGE)
-                        (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_APPEND;
-                else
-                        (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_REPLACE;
-        }
-
-        ndm = NLMSG_DATA((*ret)->hdr);
-
-        ndm->ndm_family = ndm_family;
-        ndm->ndm_ifindex = index;
-
-        return 0;
-}
-
-int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsigned change) {
-        struct ifinfomsg *ifi;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(change != 0, -EINVAL);
-
-        ifi = NLMSG_DATA(m->hdr);
-
-        ifi->ifi_flags = flags;
-        ifi->ifi_change = change;
-
-        return 0;
-}
-
-int sd_rtnl_message_link_set_type(sd_netlink_message *m, unsigned type) {
-        struct ifinfomsg *ifi;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
-
-        ifi = NLMSG_DATA(m->hdr);
-
-        ifi->ifi_type = type;
-
-        return 0;
-}
-
-int sd_rtnl_message_link_set_family(sd_netlink_message *m, unsigned family) {
-        struct ifinfomsg *ifi;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
-
-        ifi = NLMSG_DATA(m->hdr);
-
-        ifi->ifi_family = family;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_link(sd_netlink *rtnl, sd_netlink_message **ret,
-                             uint16_t nlmsg_type, int index) {
-        struct ifinfomsg *ifi;
-        int r;
-
-        assert_return(rtnl_message_type_is_link(nlmsg_type), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nlmsg_type == RTM_NEWLINK)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
-        else if (nlmsg_type == RTM_NEWLINKPROP)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL | NLM_F_APPEND;
-
-        ifi = NLMSG_DATA((*ret)->hdr);
-
-        ifi->ifi_family = AF_UNSPEC;
-        ifi->ifi_index = index;
-
-        return 0;
-}
-
-int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
-        struct ifaddrmsg *ifa;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
-
-        ifa = NLMSG_DATA(m->hdr);
-
-        if ((ifa->ifa_family == AF_INET && prefixlen > 32) ||
-            (ifa->ifa_family == AF_INET6 && prefixlen > 128))
-                return -ERANGE;
-
-        ifa->ifa_prefixlen = prefixlen;
-
-        return 0;
-}
-
-int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags) {
-        struct ifaddrmsg *ifa;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
-
-        ifa = NLMSG_DATA(m->hdr);
-
-        ifa->ifa_flags = flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope) {
-        struct ifaddrmsg *ifa;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
-
-        ifa = NLMSG_DATA(m->hdr);
-
-        ifa->ifa_scope = scope;
-
-        return 0;
-}
-
-int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family) {
-        struct ifaddrmsg *ifa;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(family, -EINVAL);
-
-        ifa = NLMSG_DATA(m->hdr);
-
-        *family = ifa->ifa_family;
-
-        return 0;
-}
-
-int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen) {
-        struct ifaddrmsg *ifa;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(prefixlen, -EINVAL);
-
-        ifa = NLMSG_DATA(m->hdr);
-
-        *prefixlen = ifa->ifa_prefixlen;
-
-        return 0;
-}
-
-int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope) {
-        struct ifaddrmsg *ifa;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(scope, -EINVAL);
-
-        ifa = NLMSG_DATA(m->hdr);
-
-        *scope = ifa->ifa_scope;
-
-        return 0;
-}
-
-int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags) {
-        struct ifaddrmsg *ifa;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(flags, -EINVAL);
-
-        ifa = NLMSG_DATA(m->hdr);
-
-        *flags = ifa->ifa_flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex) {
-        struct ifaddrmsg *ifa;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(ifindex, -EINVAL);
-
-        ifa = NLMSG_DATA(m->hdr);
-
-        *ifindex = ifa->ifa_index;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_addr(sd_netlink *rtnl, sd_netlink_message **ret,
-                             uint16_t nlmsg_type, int index,
-                             int family) {
-        struct ifaddrmsg *ifa;
-        int r;
-
-        assert_return(rtnl_message_type_is_addr(nlmsg_type), -EINVAL);
-        assert_return((nlmsg_type == RTM_GETADDR && index == 0) ||
-                      index > 0, -EINVAL);
-        assert_return((nlmsg_type == RTM_GETADDR && family == AF_UNSPEC) ||
-                      IN_SET(family, AF_INET, AF_INET6), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        ifa = NLMSG_DATA((*ret)->hdr);
-
-        ifa->ifa_index = index;
-        ifa->ifa_family = family;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_addr_update(sd_netlink *rtnl, sd_netlink_message **ret,
-                                    int index, int family) {
-        int r;
-
-        r = sd_rtnl_message_new_addr(rtnl, ret, RTM_NEWADDR, index, family);
-        if (r < 0)
-                return r;
-
-        (*ret)->hdr->nlmsg_flags |= NLM_F_REPLACE;
-
-        return 0;
-}
-
-int sd_rtnl_message_link_get_ifindex(sd_netlink_message *m, int *ifindex) {
-        struct ifinfomsg *ifi;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(ifindex, -EINVAL);
-
-        ifi = NLMSG_DATA(m->hdr);
-
-        *ifindex = ifi->ifi_index;
-
-        return 0;
-}
-
-int sd_rtnl_message_link_get_flags(sd_netlink_message *m, unsigned *flags) {
-        struct ifinfomsg *ifi;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(flags, -EINVAL);
-
-        ifi = NLMSG_DATA(m->hdr);
-
-        *flags = ifi->ifi_flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_link_get_type(sd_netlink_message *m, unsigned short *type) {
-        struct ifinfomsg *ifi;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_link(m->hdr->nlmsg_type), -EINVAL);
-        assert_return(type, -EINVAL);
-
-        ifi = NLMSG_DATA(m->hdr);
-
-        *type = ifi->ifi_type;
-
-        return 0;
-}
-
-int sd_rtnl_message_get_family(sd_netlink_message *m, int *family) {
-        assert_return(m, -EINVAL);
-        assert_return(family, -EINVAL);
-
-        assert(m->hdr);
-
-        if (rtnl_message_type_is_link(m->hdr->nlmsg_type)) {
-                struct ifinfomsg *ifi;
-
-                ifi = NLMSG_DATA(m->hdr);
-
-                *family = ifi->ifi_family;
-
-                return 0;
-        } else if (rtnl_message_type_is_route(m->hdr->nlmsg_type)) {
-                struct rtmsg *rtm;
-
-                rtm = NLMSG_DATA(m->hdr);
-
-                *family = rtm->rtm_family;
-
-                return 0;
-        } else if (rtnl_message_type_is_neigh(m->hdr->nlmsg_type)) {
-                struct ndmsg *ndm;
-
-                ndm = NLMSG_DATA(m->hdr);
-
-                *family = ndm->ndm_family;
-
-                return 0;
-        } else if (rtnl_message_type_is_addr(m->hdr->nlmsg_type)) {
-                struct ifaddrmsg *ifa;
-
-                ifa = NLMSG_DATA(m->hdr);
-
-                *family = ifa->ifa_family;
-
-                return 0;
-        } else if (rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type)) {
-                struct rtmsg *rtm;
-
-                rtm = NLMSG_DATA(m->hdr);
-
-                *family = rtm->rtm_family;
-
-                return 0;
-        } else if (rtnl_message_type_is_nexthop(m->hdr->nlmsg_type)) {
-                struct nhmsg *nhm;
-
-                nhm = NLMSG_DATA(m->hdr);
-
-                *family = nhm->nh_family;
-
-                return 0;
-        }
-
-        return -EOPNOTSUPP;
-}
-
-int sd_rtnl_message_new_addrlabel(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifindex, int ifal_family) {
-        struct ifaddrlblmsg *addrlabel;
-        int r;
-
-        assert_return(rtnl_message_type_is_addrlabel(nlmsg_type), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nlmsg_type == RTM_NEWADDRLABEL)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
-
-        addrlabel = NLMSG_DATA((*ret)->hdr);
-
-        addrlabel->ifal_family = ifal_family;
-        addrlabel->ifal_index = ifindex;
-
-        return 0;
-}
-
-int sd_rtnl_message_addrlabel_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
-        struct ifaddrlblmsg *addrlabel;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addrlabel(m->hdr->nlmsg_type), -EINVAL);
-
-        addrlabel = NLMSG_DATA(m->hdr);
-
-        if (prefixlen > 128)
-                return -ERANGE;
-
-        addrlabel->ifal_prefixlen = prefixlen;
-
-        return 0;
-}
-
-int sd_rtnl_message_addrlabel_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen) {
-        struct ifaddrlblmsg *addrlabel;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_addrlabel(m->hdr->nlmsg_type), -EINVAL);
-
-        addrlabel = NLMSG_DATA(m->hdr);
-
-        *prefixlen = addrlabel->ifal_prefixlen;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifal_family) {
-        struct fib_rule_hdr *frh;
-        int r;
-
-        assert_return(rtnl_message_type_is_routing_policy_rule(nlmsg_type), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nlmsg_type == RTM_NEWRULE)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
-
-        frh = NLMSG_DATA((*ret)->hdr);
-        frh->family = ifal_family;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t tos) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        frh->tos = tos;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_get_tos(sd_netlink_message *m, uint8_t *tos) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        *tos = frh->tos;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t table) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        frh->table = table;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_get_table(sd_netlink_message *m, uint8_t *table) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        *table = frh->table;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-        frh->flags |= flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_get_flags(sd_netlink_message *m, uint32_t *flags) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-        *flags = frh->flags;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint8_t type) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        frh->action = type;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_get_fib_type(sd_netlink_message *m, uint8_t *type) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        *type = frh->action;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message *m, uint8_t len) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        frh->dst_len = len;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(sd_netlink_message *m, uint8_t *len) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        *len = frh->dst_len;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message *m, uint8_t len) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        frh->src_len = len;
-
-        return 0;
-}
-
-int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(sd_netlink_message *m, uint8_t *len) {
-        struct fib_rule_hdr *frh;
-
-        assert_return(m, -EINVAL);
-        assert_return(m->hdr, -EINVAL);
-        assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
-
-        frh = NLMSG_DATA(m->hdr);
-
-        *len = frh->src_len;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_qdisc(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex) {
-        struct tcmsg *tcm;
-        int r;
-
-        assert_return(rtnl_message_type_is_qdisc(nlmsg_type), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nlmsg_type == RTM_NEWQDISC)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
-
-        tcm = NLMSG_DATA((*ret)->hdr);
-        tcm->tcm_family = tcm_family;
-        tcm->tcm_ifindex = tcm_ifindex;
-
-        return 0;
-}
-
-int sd_rtnl_message_set_qdisc_parent(sd_netlink_message *m, uint32_t parent) {
-        struct tcmsg *tcm;
-
-        assert_return(rtnl_message_type_is_qdisc(m->hdr->nlmsg_type), -EINVAL);
-
-        tcm = NLMSG_DATA(m->hdr);
-        tcm->tcm_parent = parent;
-
-        return 0;
-}
-
-int sd_rtnl_message_set_qdisc_handle(sd_netlink_message *m, uint32_t handle) {
-        struct tcmsg *tcm;
-
-        assert_return(rtnl_message_type_is_qdisc(m->hdr->nlmsg_type), -EINVAL);
-
-        tcm = NLMSG_DATA(m->hdr);
-        tcm->tcm_handle = handle;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_tclass(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex) {
-        struct tcmsg *tcm;
-        int r;
-
-        assert_return(rtnl_message_type_is_tclass(nlmsg_type), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nlmsg_type == RTM_NEWTCLASS)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
-
-        tcm = NLMSG_DATA((*ret)->hdr);
-        tcm->tcm_family = tcm_family;
-        tcm->tcm_ifindex = tcm_ifindex;
-
-        return 0;
-}
-
-int sd_rtnl_message_set_tclass_parent(sd_netlink_message *m, uint32_t parent) {
-        struct tcmsg *tcm;
-
-        assert_return(rtnl_message_type_is_tclass(m->hdr->nlmsg_type), -EINVAL);
-
-        tcm = NLMSG_DATA(m->hdr);
-        tcm->tcm_parent = parent;
-
-        return 0;
-}
-
-int sd_rtnl_message_set_tclass_handle(sd_netlink_message *m, uint32_t handle) {
-        struct tcmsg *tcm;
-
-        assert_return(rtnl_message_type_is_tclass(m->hdr->nlmsg_type), -EINVAL);
-
-        tcm = NLMSG_DATA(m->hdr);
-        tcm->tcm_handle = handle;
-
-        return 0;
-}
-
-int sd_rtnl_message_new_mdb(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int mdb_ifindex) {
-        struct br_port_msg *bpm;
-        int r;
-
-        assert_return(rtnl_message_type_is_mdb(nlmsg_type), -EINVAL);
-        assert_return(ret, -EINVAL);
-
-        r = message_new(rtnl, ret, nlmsg_type);
-        if (r < 0)
-                return r;
-
-        if (nlmsg_type == RTM_NEWMDB)
-                (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
-
-        bpm = NLMSG_DATA((*ret)->hdr);
-        bpm->family = AF_BRIDGE;
-        bpm->ifindex = mdb_ifindex;
-
-        return 0;
-}
diff --git a/src/libsystemd/sd-netlink/sd-netlink.c b/src/libsystemd/sd-netlink/sd-netlink.c
index 9f46645..5980125 100644
--- a/src/libsystemd/sd-netlink/sd-netlink.c
+++ b/src/libsystemd/sd-netlink/sd-netlink.c
@@ -9,29 +9,29 @@
 #include "hashmap.h"
 #include "io-util.h"
 #include "macro.h"
+#include "netlink-genl.h"
 #include "netlink-internal.h"
 #include "netlink-slot.h"
 #include "netlink-util.h"
 #include "process-util.h"
 #include "socket-util.h"
 #include "string-util.h"
-#include "util.h"
 
 /* Some really high limit, to catch programming errors */
 #define REPLY_CALLBACKS_MAX UINT16_MAX
 
-static int sd_netlink_new(sd_netlink **ret) {
-        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+static int netlink_new(sd_netlink **ret) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *nl = NULL;
 
         assert_return(ret, -EINVAL);
 
-        rtnl = new(sd_netlink, 1);
-        if (!rtnl)
+        nl = new(sd_netlink, 1);
+        if (!nl)
                 return -ENOMEM;
 
-        *rtnl = (sd_netlink) {
+        *nl = (sd_netlink) {
                 .n_ref = 1,
-                .fd = -1,
+                .fd = -EBADF,
                 .sockaddr.nl.nl_family = AF_NETLINK,
                 .original_pid = getpid_cached(),
                 .protocol = -1,
@@ -61,60 +61,18 @@
                 .serial = (uint32_t) (now(CLOCK_MONOTONIC) % UINT32_MAX) + 1,
         };
 
-        /* We guarantee that the read buffer has at least space for
-         * a message header */
-        if (!greedy_realloc((void**)&rtnl->rbuffer, sizeof(struct nlmsghdr), sizeof(uint8_t)))
-                return -ENOMEM;
-
-        *ret = TAKE_PTR(rtnl);
-
+        *ret = TAKE_PTR(nl);
         return 0;
 }
 
-int sd_netlink_new_from_netlink(sd_netlink **ret, int fd) {
-        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        socklen_t addrlen;
-        int r;
-
-        assert_return(ret, -EINVAL);
-
-        r = sd_netlink_new(&rtnl);
-        if (r < 0)
-                return r;
-
-        addrlen = sizeof(rtnl->sockaddr);
-
-        r = getsockname(fd, &rtnl->sockaddr.sa, &addrlen);
-        if (r < 0)
-                return -errno;
-
-        if (rtnl->sockaddr.nl.nl_family != AF_NETLINK)
-                return -EINVAL;
-
-        rtnl->fd = fd;
-
-        *ret = TAKE_PTR(rtnl);
-
-        return 0;
-}
-
-static bool rtnl_pid_changed(const sd_netlink *rtnl) {
-        assert(rtnl);
-
-        /* We don't support people creating an rtnl connection and
-         * keeping it around over a fork(). Let's complain. */
-
-        return rtnl->original_pid != getpid_cached();
-}
-
 int sd_netlink_open_fd(sd_netlink **ret, int fd) {
-        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+        _cleanup_(sd_netlink_unrefp) sd_netlink *nl = NULL;
         int r, protocol;
 
         assert_return(ret, -EINVAL);
         assert_return(fd >= 0, -EBADF);
 
-        r = sd_netlink_new(&rtnl);
+        r = netlink_new(&nl);
         if (r < 0)
                 return r;
 
@@ -122,8 +80,8 @@
         if (r < 0)
                 return r;
 
-        rtnl->fd = fd;
-        rtnl->protocol = protocol;
+        nl->fd = fd;
+        nl->protocol = protocol;
 
         r = setsockopt_int(fd, SOL_NETLINK, NETLINK_EXT_ACK, true);
         if (r < 0)
@@ -133,30 +91,14 @@
         if (r < 0)
                 log_debug_errno(r, "sd-netlink: Failed to enable NETLINK_GET_STRICT_CHK option, ignoring: %m");
 
-        r = systemd_socket_bind(rtnl);
+        r = systemd_socket_bind(nl);
         if (r < 0) {
-                rtnl->fd = -1; /* on failure, the caller remains owner of the fd, hence don't close it here */
-                rtnl->protocol = -1;
+                nl->fd = -EBADF; /* on failure, the caller remains owner of the fd, hence don't close it here */
+                nl->protocol = -1;
                 return r;
         }
 
-        *ret = TAKE_PTR(rtnl);
-
-        return 0;
-}
-
-int netlink_open_family(sd_netlink **ret, int family) {
-        _cleanup_close_ int fd = -1;
-        int r;
-
-        fd = socket_open(family);
-        if (fd < 0)
-                return fd;
-
-        r = sd_netlink_open_fd(ret, fd);
-        if (r < 0)
-                return r;
-        TAKE_FD(fd);
+        *ret = TAKE_PTR(nl);
 
         return 0;
 }
@@ -165,196 +107,102 @@
         return netlink_open_family(ret, NETLINK_ROUTE);
 }
 
-int sd_netlink_inc_rcvbuf(sd_netlink *rtnl, size_t size) {
-        assert_return(rtnl, -EINVAL);
-        assert_return(!rtnl_pid_changed(rtnl), -ECHILD);
+int sd_netlink_increase_rxbuf(sd_netlink *nl, size_t size) {
+        assert_return(nl, -EINVAL);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
 
-        return fd_inc_rcvbuf(rtnl->fd, size);
+        return fd_increase_rxbuf(nl->fd, size);
 }
 
-static sd_netlink *netlink_free(sd_netlink *rtnl) {
+static sd_netlink *netlink_free(sd_netlink *nl) {
         sd_netlink_slot *s;
-        unsigned i;
 
-        assert(rtnl);
+        assert(nl);
 
-        for (i = 0; i < rtnl->rqueue_size; i++)
-                sd_netlink_message_unref(rtnl->rqueue[i]);
-        free(rtnl->rqueue);
+        ordered_set_free(nl->rqueue);
+        hashmap_free(nl->rqueue_by_serial);
+        hashmap_free(nl->rqueue_partial_by_serial);
+        free(nl->rbuffer);
 
-        for (i = 0; i < rtnl->rqueue_partial_size; i++)
-                sd_netlink_message_unref(rtnl->rqueue_partial[i]);
-        free(rtnl->rqueue_partial);
-
-        free(rtnl->rbuffer);
-
-        while ((s = rtnl->slots)) {
+        while ((s = nl->slots)) {
                 assert(s->floating);
                 netlink_slot_disconnect(s, true);
         }
-        hashmap_free(rtnl->reply_callbacks);
-        prioq_free(rtnl->reply_callbacks_prioq);
+        hashmap_free(nl->reply_callbacks);
+        prioq_free(nl->reply_callbacks_prioq);
 
-        sd_event_source_unref(rtnl->io_event_source);
-        sd_event_source_unref(rtnl->time_event_source);
-        sd_event_unref(rtnl->event);
+        sd_event_source_unref(nl->io_event_source);
+        sd_event_source_unref(nl->time_event_source);
+        sd_event_unref(nl->event);
 
-        hashmap_free(rtnl->broadcast_group_refs);
+        hashmap_free(nl->broadcast_group_refs);
 
-        hashmap_free(rtnl->genl_family_to_nlmsg_type);
-        hashmap_free(rtnl->nlmsg_type_to_genl_family);
+        genl_clear_family(nl);
 
-        safe_close(rtnl->fd);
-        return mfree(rtnl);
+        safe_close(nl->fd);
+        return mfree(nl);
 }
 
 DEFINE_TRIVIAL_REF_UNREF_FUNC(sd_netlink, sd_netlink, netlink_free);
 
-static void rtnl_seal_message(sd_netlink *rtnl, sd_netlink_message *m) {
-        uint32_t picked;
+int sd_netlink_send(
+                sd_netlink *nl,
+                sd_netlink_message *message,
+                uint32_t *serial) {
 
-        assert(rtnl);
-        assert(!rtnl_pid_changed(rtnl));
-        assert(m);
-        assert(m->hdr);
-
-        /* Avoid collisions with outstanding requests */
-        do {
-                picked = rtnl->serial;
-
-                /* Don't use seq == 0, as that is used for broadcasts, so we would get confused by replies to
-                   such messages */
-                rtnl->serial = rtnl->serial == UINT32_MAX ? 1 : rtnl->serial + 1;
-
-        } while (hashmap_contains(rtnl->reply_callbacks, UINT32_TO_PTR(picked)));
-
-        m->hdr->nlmsg_seq = picked;
-        rtnl_message_seal(m);
-}
-
-int sd_netlink_send(sd_netlink *nl,
-                    sd_netlink_message *message,
-                    uint32_t *serial) {
         int r;
 
         assert_return(nl, -EINVAL);
-        assert_return(!rtnl_pid_changed(nl), -ECHILD);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
         assert_return(message, -EINVAL);
         assert_return(!message->sealed, -EPERM);
 
-        rtnl_seal_message(nl, message);
+        netlink_seal_message(nl, message);
 
         r = socket_write_message(nl, message);
         if (r < 0)
                 return r;
 
         if (serial)
-                *serial = rtnl_message_get_serial(message);
+                *serial = message_get_serial(message);
 
         return 1;
 }
 
-int sd_netlink_sendv(
-                sd_netlink *nl,
-                sd_netlink_message **messages,
-                size_t msgcount,
-                uint32_t **ret_serial) {
-
-        _cleanup_free_ uint32_t *serials = NULL;
+static int dispatch_rqueue(sd_netlink *nl, sd_netlink_message **ret) {
+        sd_netlink_message *m;
         int r;
 
-        assert_return(nl, -EINVAL);
-        assert_return(!rtnl_pid_changed(nl), -ECHILD);
-        assert_return(messages, -EINVAL);
-        assert_return(msgcount > 0, -EINVAL);
+        assert(nl);
+        assert(ret);
 
-        if (ret_serial) {
-                serials = new(uint32_t, msgcount);
-                if (!serials)
-                        return -ENOMEM;
-        }
-
-        for (unsigned i = 0; i < msgcount; i++) {
-                assert_return(!messages[i]->sealed, -EPERM);
-
-                rtnl_seal_message(nl, messages[i]);
-                if (serials)
-                        serials[i] = rtnl_message_get_serial(messages[i]);
-        }
-
-        r = socket_writev_message(nl, messages, msgcount);
-        if (r < 0)
-                return r;
-
-        if (ret_serial)
-                *ret_serial = TAKE_PTR(serials);
-
-        return r;
-}
-
-int rtnl_rqueue_make_room(sd_netlink *rtnl) {
-        assert(rtnl);
-
-        if (rtnl->rqueue_size >= RTNL_RQUEUE_MAX)
-                return log_debug_errno(SYNTHETIC_ERRNO(ENOBUFS),
-                                       "rtnl: exhausted the read queue size (%d)",
-                                       RTNL_RQUEUE_MAX);
-
-        if (!GREEDY_REALLOC(rtnl->rqueue, rtnl->rqueue_size + 1))
-                return -ENOMEM;
-
-        return 0;
-}
-
-int rtnl_rqueue_partial_make_room(sd_netlink *rtnl) {
-        assert(rtnl);
-
-        if (rtnl->rqueue_partial_size >= RTNL_RQUEUE_MAX)
-                return log_debug_errno(SYNTHETIC_ERRNO(ENOBUFS),
-                                       "rtnl: exhausted the partial read queue size (%d)",
-                                       RTNL_RQUEUE_MAX);
-
-        if (!GREEDY_REALLOC(rtnl->rqueue_partial, rtnl->rqueue_partial_size + 1))
-                return -ENOMEM;
-
-        return 0;
-}
-
-static int dispatch_rqueue(sd_netlink *rtnl, sd_netlink_message **message) {
-        int r;
-
-        assert(rtnl);
-        assert(message);
-
-        if (rtnl->rqueue_size <= 0) {
+        if (ordered_set_size(nl->rqueue) <= 0) {
                 /* Try to read a new message */
-                r = socket_read_message(rtnl);
-                if (r == -ENOBUFS) { /* FIXME: ignore buffer overruns for now */
-                        log_debug_errno(r, "Got ENOBUFS from netlink socket, ignoring.");
-                        return 1;
-                }
-                if (r <= 0)
+                r = socket_read_message(nl);
+                if (r == -ENOBUFS) /* FIXME: ignore buffer overruns for now */
+                        log_debug_errno(r, "sd-netlink: Got ENOBUFS from netlink socket, ignoring.");
+                else if (r < 0)
                         return r;
         }
 
         /* Dispatch a queued message */
-        *message = rtnl->rqueue[0];
-        rtnl->rqueue_size--;
-        memmove(rtnl->rqueue, rtnl->rqueue + 1, sizeof(sd_netlink_message*) * rtnl->rqueue_size);
-
-        return 1;
+        m = ordered_set_steal_first(nl->rqueue);
+        if (m)
+                sd_netlink_message_unref(hashmap_remove_value(nl->rqueue_by_serial, UINT32_TO_PTR(message_get_serial(m)), m));
+        *ret = m;
+        return !!m;
 }
 
-static int process_timeout(sd_netlink *rtnl) {
+static int process_timeout(sd_netlink *nl) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         struct reply_callback *c;
         sd_netlink_slot *slot;
         usec_t n;
         int r;
 
-        assert(rtnl);
+        assert(nl);
 
-        c = prioq_peek(rtnl->reply_callbacks_prioq);
+        c = prioq_peek(nl->reply_callbacks_prioq);
         if (!c)
                 return 0;
 
@@ -362,17 +210,17 @@
         if (c->timeout > n)
                 return 0;
 
-        r = rtnl_message_new_synthetic_error(rtnl, -ETIMEDOUT, c->serial, &m);
+        r = message_new_synthetic_error(nl, -ETIMEDOUT, c->serial, &m);
         if (r < 0)
                 return r;
 
-        assert_se(prioq_pop(rtnl->reply_callbacks_prioq) == c);
+        assert_se(prioq_pop(nl->reply_callbacks_prioq) == c);
         c->timeout = 0;
-        hashmap_remove(rtnl->reply_callbacks, UINT32_TO_PTR(c->serial));
+        hashmap_remove(nl->reply_callbacks, UINT32_TO_PTR(c->serial));
 
         slot = container_of(c, sd_netlink_slot, reply_callback);
 
-        r = c->callback(rtnl, m, slot->userdata);
+        r = c->callback(nl, m, slot->userdata);
         if (r < 0)
                 log_debug_errno(r, "sd-netlink: timedout callback %s%s%sfailed: %m",
                                 slot->description ? "'" : "",
@@ -385,23 +233,23 @@
         return 1;
 }
 
-static int process_reply(sd_netlink *rtnl, sd_netlink_message *m) {
+static int process_reply(sd_netlink *nl, sd_netlink_message *m) {
         struct reply_callback *c;
         sd_netlink_slot *slot;
         uint32_t serial;
         uint16_t type;
         int r;
 
-        assert(rtnl);
+        assert(nl);
         assert(m);
 
-        serial = rtnl_message_get_serial(m);
-        c = hashmap_remove(rtnl->reply_callbacks, UINT32_TO_PTR(serial));
+        serial = message_get_serial(m);
+        c = hashmap_remove(nl->reply_callbacks, UINT32_TO_PTR(serial));
         if (!c)
                 return 0;
 
         if (c->timeout != 0) {
-                prioq_remove(rtnl->reply_callbacks_prioq, c, &c->prioq_idx);
+                prioq_remove(nl->reply_callbacks_prioq, c, &c->prioq_idx);
                 c->timeout = 0;
         }
 
@@ -414,7 +262,7 @@
 
         slot = container_of(c, sd_netlink_slot, reply_callback);
 
-        r = c->callback(rtnl, m, slot->userdata);
+        r = c->callback(nl, m, slot->userdata);
         if (r < 0)
                 log_debug_errno(r, "sd-netlink: reply callback %s%s%sfailed: %m",
                                 slot->description ? "'" : "",
@@ -427,26 +275,46 @@
         return 1;
 }
 
-static int process_match(sd_netlink *rtnl, sd_netlink_message *m) {
-        struct match_callback *c;
-        sd_netlink_slot *slot;
+static int process_match(sd_netlink *nl, sd_netlink_message *m) {
         uint16_t type;
+        uint8_t cmd;
         int r;
 
-        assert(rtnl);
+        assert(nl);
         assert(m);
 
         r = sd_netlink_message_get_type(m, &type);
         if (r < 0)
                 return r;
 
-        LIST_FOREACH(match_callbacks, c, rtnl->match_callbacks) {
-                if (type != c->type)
+        if (m->protocol == NETLINK_GENERIC) {
+                r = sd_genl_message_get_command(nl, m, &cmd);
+                if (r < 0)
+                        return r;
+        } else
+                cmd = 0;
+
+        LIST_FOREACH(match_callbacks, c, nl->match_callbacks) {
+                sd_netlink_slot *slot;
+                bool found = false;
+
+                if (c->type != type)
+                        continue;
+                if (c->cmd != 0 && c->cmd != cmd)
+                        continue;
+
+                for (size_t i = 0; i < c->n_groups; i++)
+                        if (c->groups[i] == m->multicast_group) {
+                                found = true;
+                                break;
+                        }
+
+                if (!found)
                         continue;
 
                 slot = container_of(c, sd_netlink_slot, match_callback);
 
-                r = c->callback(rtnl, m, slot->userdata);
+                r = c->callback(nl, m, slot->userdata);
                 if (r < 0)
                         log_debug_errno(r, "sd-netlink: match callback %s%s%sfailed: %m",
                                         slot->description ? "'" : "",
@@ -459,31 +327,28 @@
         return 1;
 }
 
-static int process_running(sd_netlink *rtnl, sd_netlink_message **ret) {
+static int process_running(sd_netlink *nl, sd_netlink_message **ret) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
-        assert(rtnl);
+        assert(nl);
 
-        r = process_timeout(rtnl);
+        r = process_timeout(nl);
         if (r != 0)
                 goto null_message;
 
-        r = dispatch_rqueue(rtnl, &m);
+        r = dispatch_rqueue(nl, &m);
         if (r < 0)
                 return r;
         if (!m)
                 goto null_message;
 
-        if (sd_netlink_message_is_broadcast(m)) {
-                r = process_match(rtnl, m);
-                if (r != 0)
-                        goto null_message;
-        } else {
-                r = process_reply(rtnl, m);
-                if (r != 0)
-                        goto null_message;
-        }
+        if (sd_netlink_message_is_broadcast(m))
+                r = process_match(nl, m);
+        else
+                r = process_reply(nl, m);
+        if (r != 0)
+                goto null_message;
 
         if (ret) {
                 *ret = TAKE_PTR(m);
@@ -500,17 +365,17 @@
         return r;
 }
 
-int sd_netlink_process(sd_netlink *rtnl, sd_netlink_message **ret) {
-        NETLINK_DONT_DESTROY(rtnl);
+int sd_netlink_process(sd_netlink *nl, sd_netlink_message **ret) {
+        NETLINK_DONT_DESTROY(nl);
         int r;
 
-        assert_return(rtnl, -EINVAL);
-        assert_return(!rtnl_pid_changed(rtnl), -ECHILD);
-        assert_return(!rtnl->processing, -EBUSY);
+        assert_return(nl, -EINVAL);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
+        assert_return(!nl->processing, -EBUSY);
 
-        rtnl->processing = true;
-        r = process_running(rtnl, ret);
-        rtnl->processing = false;
+        nl->processing = true;
+        r = process_running(nl, ret);
+        nl->processing = false;
 
         return r;
 }
@@ -520,18 +385,18 @@
                 return 0;
 
         if (usec == 0)
-                usec = RTNL_DEFAULT_TIMEOUT;
+                usec = NETLINK_DEFAULT_TIMEOUT_USEC;
 
         return usec_add(now(CLOCK_MONOTONIC), usec);
 }
 
-static int rtnl_poll(sd_netlink *rtnl, bool need_more, usec_t timeout_usec) {
+static int netlink_poll(sd_netlink *nl, bool need_more, usec_t timeout_usec) {
         usec_t m = USEC_INFINITY;
         int r, e;
 
-        assert(rtnl);
+        assert(nl);
 
-        e = sd_netlink_get_events(rtnl);
+        e = sd_netlink_get_events(nl);
         if (e < 0)
                 return e;
 
@@ -545,14 +410,14 @@
                 /* Caller wants to process if there is something to
                  * process, but doesn't care otherwise */
 
-                r = sd_netlink_get_timeout(rtnl, &until);
+                r = sd_netlink_get_timeout(nl, &until);
                 if (r < 0)
                         return r;
 
                 m = usec_sub_unsigned(until, now(CLOCK_MONOTONIC));
         }
 
-        r = fd_wait_for_event(rtnl->fd, e, MIN(m, timeout_usec));
+        r = fd_wait_for_event(nl->fd, e, MIN(m, timeout_usec));
         if (r <= 0)
                 return r;
 
@@ -560,13 +425,18 @@
 }
 
 int sd_netlink_wait(sd_netlink *nl, uint64_t timeout_usec) {
-        assert_return(nl, -EINVAL);
-        assert_return(!rtnl_pid_changed(nl), -ECHILD);
+        int r;
 
-        if (nl->rqueue_size > 0)
+        assert_return(nl, -EINVAL);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
+
+        if (ordered_set_size(nl->rqueue) > 0)
                 return 0;
 
-        return rtnl_poll(nl, false, timeout_usec);
+        r = netlink_poll(nl, false, timeout_usec);
+        if (r < 0 && ERRNO_IS_TRANSIENT(r)) /* Convert EINTR to "something happened" and give user a chance to run some code before calling back into us */
+                return 1;
+        return r;
 }
 
 static int timeout_compare(const void *a, const void *b) {
@@ -597,7 +467,7 @@
         assert_return(nl, -EINVAL);
         assert_return(m, -EINVAL);
         assert_return(callback, -EINVAL);
-        assert_return(!rtnl_pid_changed(nl), -ECHILD);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
 
         if (hashmap_size(nl->reply_callbacks) >= REPLY_CALLBACKS_MAX)
                 return -ERANGE;
@@ -635,7 +505,7 @@
                 }
         }
 
-        /* Set this at last. Otherwise, some failures in above call the destroy callback but some do not. */
+        /* Set this at last. Otherwise, some failures in above would call destroy_callback but some would not. */
         slot->destroy_callback = destroy_callback;
 
         if (ret_slot)
@@ -647,7 +517,7 @@
 }
 
 int sd_netlink_read(
-                sd_netlink *rtnl,
+                sd_netlink *nl,
                 uint32_t serial,
                 uint64_t usec,
                 sd_netlink_message **ret) {
@@ -655,49 +525,42 @@
         usec_t timeout;
         int r;
 
-        assert_return(rtnl, -EINVAL);
-        assert_return(!rtnl_pid_changed(rtnl), -ECHILD);
+        assert_return(nl, -EINVAL);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
 
         timeout = calc_elapse(usec);
 
         for (;;) {
+                _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
                 usec_t left;
 
-                for (unsigned i = 0; i < rtnl->rqueue_size; i++) {
-                        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *incoming = NULL;
-                        uint32_t received_serial;
+                m = hashmap_remove(nl->rqueue_by_serial, UINT32_TO_PTR(serial));
+                if (m) {
                         uint16_t type;
 
-                        received_serial = rtnl_message_get_serial(rtnl->rqueue[i]);
-                        if (received_serial != serial)
-                                continue;
-
-                        incoming = rtnl->rqueue[i];
-
                         /* found a match, remove from rqueue and return it */
-                        memmove(rtnl->rqueue + i,rtnl->rqueue + i + 1,
-                                sizeof(sd_netlink_message*) * (rtnl->rqueue_size - i - 1));
-                        rtnl->rqueue_size--;
+                        sd_netlink_message_unref(ordered_set_remove(nl->rqueue, m));
 
-                        r = sd_netlink_message_get_errno(incoming);
+                        r = sd_netlink_message_get_errno(m);
                         if (r < 0)
                                 return r;
 
-                        r = sd_netlink_message_get_type(incoming, &type);
+                        r = sd_netlink_message_get_type(m, &type);
                         if (r < 0)
                                 return r;
 
                         if (type == NLMSG_DONE) {
-                                *ret = NULL;
+                                if (ret)
+                                        *ret = NULL;
                                 return 0;
                         }
 
                         if (ret)
-                                *ret = TAKE_PTR(incoming);
+                                *ret = TAKE_PTR(m);
                         return 1;
                 }
 
-                r = socket_read_message(rtnl);
+                r = socket_read_message(nl);
                 if (r < 0)
                         return r;
                 if (r > 0)
@@ -715,7 +578,7 @@
                 } else
                         left = USEC_INFINITY;
 
-                r = rtnl_poll(rtnl, true, left);
+                r = netlink_poll(nl, true, left);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -724,7 +587,7 @@
 }
 
 int sd_netlink_call(
-                sd_netlink *rtnl,
+                sd_netlink *nl,
                 sd_netlink_message *message,
                 uint64_t usec,
                 sd_netlink_message **ret) {
@@ -732,54 +595,51 @@
         uint32_t serial;
         int r;
 
-        assert_return(rtnl, -EINVAL);
-        assert_return(!rtnl_pid_changed(rtnl), -ECHILD);
+        assert_return(nl, -EINVAL);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
         assert_return(message, -EINVAL);
 
-        r = sd_netlink_send(rtnl, message, &serial);
+        r = sd_netlink_send(nl, message, &serial);
         if (r < 0)
                 return r;
 
-        return sd_netlink_read(rtnl, serial, usec, ret);
+        return sd_netlink_read(nl, serial, usec, ret);
 }
 
-int sd_netlink_get_events(sd_netlink *rtnl) {
-        assert_return(rtnl, -EINVAL);
-        assert_return(!rtnl_pid_changed(rtnl), -ECHILD);
+int sd_netlink_get_events(sd_netlink *nl) {
+        assert_return(nl, -EINVAL);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
 
-        return rtnl->rqueue_size == 0 ? POLLIN : 0;
+        return ordered_set_size(nl->rqueue) == 0 ? POLLIN : 0;
 }
 
-int sd_netlink_get_timeout(sd_netlink *rtnl, uint64_t *timeout_usec) {
+int sd_netlink_get_timeout(sd_netlink *nl, uint64_t *timeout_usec) {
         struct reply_callback *c;
 
-        assert_return(rtnl, -EINVAL);
+        assert_return(nl, -EINVAL);
         assert_return(timeout_usec, -EINVAL);
-        assert_return(!rtnl_pid_changed(rtnl), -ECHILD);
+        assert_return(!netlink_pid_changed(nl), -ECHILD);
 
-        if (rtnl->rqueue_size > 0) {
+        if (ordered_set_size(nl->rqueue) > 0) {
                 *timeout_usec = 0;
                 return 1;
         }
 
-        c = prioq_peek(rtnl->reply_callbacks_prioq);
+        c = prioq_peek(nl->reply_callbacks_prioq);
         if (!c) {
                 *timeout_usec = UINT64_MAX;
                 return 0;
         }
 
         *timeout_usec = c->timeout;
-
         return 1;
 }
 
 static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        sd_netlink *rtnl = userdata;
+        sd_netlink *nl = ASSERT_PTR(userdata);
         int r;
 
-        assert(rtnl);
-
-        r = sd_netlink_process(rtnl, NULL);
+        r = sd_netlink_process(nl, NULL);
         if (r < 0)
                 return r;
 
@@ -787,12 +647,10 @@
 }
 
 static int time_callback(sd_event_source *s, uint64_t usec, void *userdata) {
-        sd_netlink *rtnl = userdata;
+        sd_netlink *nl = ASSERT_PTR(userdata);
         int r;
 
-        assert(rtnl);
-
-        r = sd_netlink_process(rtnl, NULL);
+        r = sd_netlink_process(nl, NULL);
         if (r < 0)
                 return r;
 
@@ -800,104 +658,152 @@
 }
 
 static int prepare_callback(sd_event_source *s, void *userdata) {
-        sd_netlink *rtnl = userdata;
-        int r, e;
+        sd_netlink *nl = ASSERT_PTR(userdata);
+        int r, enabled;
         usec_t until;
 
         assert(s);
-        assert(rtnl);
 
-        e = sd_netlink_get_events(rtnl);
-        if (e < 0)
-                return e;
-
-        r = sd_event_source_set_io_events(rtnl->io_event_source, e);
+        r = sd_netlink_get_events(nl);
         if (r < 0)
                 return r;
 
-        r = sd_netlink_get_timeout(rtnl, &until);
+        r = sd_event_source_set_io_events(nl->io_event_source, r);
         if (r < 0)
                 return r;
-        if (r > 0) {
-                int j;
 
-                j = sd_event_source_set_time(rtnl->time_event_source, until);
-                if (j < 0)
-                        return j;
+        enabled = sd_netlink_get_timeout(nl, &until);
+        if (enabled < 0)
+                return enabled;
+        if (enabled > 0) {
+                r = sd_event_source_set_time(nl->time_event_source, until);
+                if (r < 0)
+                        return r;
         }
 
-        r = sd_event_source_set_enabled(rtnl->time_event_source, r > 0);
+        r = sd_event_source_set_enabled(nl->time_event_source,
+                                        enabled > 0 ? SD_EVENT_ONESHOT : SD_EVENT_OFF);
         if (r < 0)
                 return r;
 
         return 1;
 }
 
-int sd_netlink_attach_event(sd_netlink *rtnl, sd_event *event, int64_t priority) {
+int sd_netlink_attach_event(sd_netlink *nl, sd_event *event, int64_t priority) {
         int r;
 
-        assert_return(rtnl, -EINVAL);
-        assert_return(!rtnl->event, -EBUSY);
+        assert_return(nl, -EINVAL);
+        assert_return(!nl->event, -EBUSY);
 
-        assert(!rtnl->io_event_source);
-        assert(!rtnl->time_event_source);
+        assert(!nl->io_event_source);
+        assert(!nl->time_event_source);
 
         if (event)
-                rtnl->event = sd_event_ref(event);
+                nl->event = sd_event_ref(event);
         else {
-                r = sd_event_default(&rtnl->event);
+                r = sd_event_default(&nl->event);
                 if (r < 0)
                         return r;
         }
 
-        r = sd_event_add_io(rtnl->event, &rtnl->io_event_source, rtnl->fd, 0, io_callback, rtnl);
+        r = sd_event_add_io(nl->event, &nl->io_event_source, nl->fd, 0, io_callback, nl);
         if (r < 0)
                 goto fail;
 
-        r = sd_event_source_set_priority(rtnl->io_event_source, priority);
+        r = sd_event_source_set_priority(nl->io_event_source, priority);
         if (r < 0)
                 goto fail;
 
-        r = sd_event_source_set_description(rtnl->io_event_source, "rtnl-receive-message");
+        r = sd_event_source_set_description(nl->io_event_source, "netlink-receive-message");
         if (r < 0)
                 goto fail;
 
-        r = sd_event_source_set_prepare(rtnl->io_event_source, prepare_callback);
+        r = sd_event_source_set_prepare(nl->io_event_source, prepare_callback);
         if (r < 0)
                 goto fail;
 
-        r = sd_event_add_time(rtnl->event, &rtnl->time_event_source, CLOCK_MONOTONIC, 0, 0, time_callback, rtnl);
+        r = sd_event_add_time(nl->event, &nl->time_event_source, CLOCK_MONOTONIC, 0, 0, time_callback, nl);
         if (r < 0)
                 goto fail;
 
-        r = sd_event_source_set_priority(rtnl->time_event_source, priority);
+        r = sd_event_source_set_priority(nl->time_event_source, priority);
         if (r < 0)
                 goto fail;
 
-        r = sd_event_source_set_description(rtnl->time_event_source, "rtnl-timer");
+        r = sd_event_source_set_description(nl->time_event_source, "netlink-timer");
         if (r < 0)
                 goto fail;
 
         return 0;
 
 fail:
-        sd_netlink_detach_event(rtnl);
+        sd_netlink_detach_event(nl);
         return r;
 }
 
-int sd_netlink_detach_event(sd_netlink *rtnl) {
-        assert_return(rtnl, -EINVAL);
-        assert_return(rtnl->event, -ENXIO);
+int sd_netlink_detach_event(sd_netlink *nl) {
+        assert_return(nl, -EINVAL);
+        assert_return(nl->event, -ENXIO);
 
-        rtnl->io_event_source = sd_event_source_unref(rtnl->io_event_source);
+        nl->io_event_source = sd_event_source_unref(nl->io_event_source);
 
-        rtnl->time_event_source = sd_event_source_unref(rtnl->time_event_source);
+        nl->time_event_source = sd_event_source_unref(nl->time_event_source);
 
-        rtnl->event = sd_event_unref(rtnl->event);
+        nl->event = sd_event_unref(nl->event);
 
         return 0;
 }
 
+int netlink_add_match_internal(
+                sd_netlink *nl,
+                sd_netlink_slot **ret_slot,
+                const uint32_t *groups,
+                size_t n_groups,
+                uint16_t type,
+                uint8_t cmd,
+                sd_netlink_message_handler_t callback,
+                sd_netlink_destroy_t destroy_callback,
+                void *userdata,
+                const char *description) {
+
+        _cleanup_free_ sd_netlink_slot *slot = NULL;
+        int r;
+
+        assert(groups);
+        assert(n_groups > 0);
+
+        for (size_t i = 0; i < n_groups; i++) {
+                r = socket_broadcast_group_ref(nl, groups[i]);
+                if (r < 0)
+                        return r;
+        }
+
+        r = netlink_slot_allocate(nl, !ret_slot, NETLINK_MATCH_CALLBACK, sizeof(struct match_callback),
+                                  userdata, description, &slot);
+        if (r < 0)
+                return r;
+
+        slot->match_callback.groups = newdup(uint32_t, groups, n_groups);
+        if (!slot->match_callback.groups)
+                return -ENOMEM;
+
+        slot->match_callback.n_groups = n_groups;
+        slot->match_callback.callback = callback;
+        slot->match_callback.type = type;
+        slot->match_callback.cmd = cmd;
+
+        LIST_PREPEND(match_callbacks, nl->match_callbacks, &slot->match_callback);
+
+        /* Set this at last. Otherwise, some failures in above call the destroy callback but some do not. */
+        slot->destroy_callback = destroy_callback;
+
+        if (ret_slot)
+                *ret_slot = slot;
+
+        TAKE_PTR(slot);
+        return 0;
+}
+
 int sd_netlink_add_match(
                 sd_netlink *rtnl,
                 sd_netlink_slot **ret_slot,
@@ -906,86 +812,79 @@
                 sd_netlink_destroy_t destroy_callback,
                 void *userdata,
                 const char *description) {
-        _cleanup_free_ sd_netlink_slot *slot = NULL;
-        int r;
+
+        static const uint32_t
+                address_groups[]  = { RTNLGRP_IPV4_IFADDR, RTNLGRP_IPV6_IFADDR, },
+                link_groups[]     = { RTNLGRP_LINK, },
+                neighbor_groups[] = { RTNLGRP_NEIGH, },
+                nexthop_groups[]  = { RTNLGRP_NEXTHOP, },
+                route_groups[]    = { RTNLGRP_IPV4_ROUTE, RTNLGRP_IPV6_ROUTE, },
+                rule_groups[]     = { RTNLGRP_IPV4_RULE, RTNLGRP_IPV6_RULE, },
+                tc_groups[]       = { RTNLGRP_TC };
+        const uint32_t *groups;
+        size_t n_groups;
 
         assert_return(rtnl, -EINVAL);
         assert_return(callback, -EINVAL);
-        assert_return(!rtnl_pid_changed(rtnl), -ECHILD);
-
-        r = netlink_slot_allocate(rtnl, !ret_slot, NETLINK_MATCH_CALLBACK, sizeof(struct match_callback), userdata, description, &slot);
-        if (r < 0)
-                return r;
-
-        slot->match_callback.callback = callback;
-        slot->match_callback.type = type;
+        assert_return(!netlink_pid_changed(rtnl), -ECHILD);
 
         switch (type) {
                 case RTM_NEWLINK:
                 case RTM_DELLINK:
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_LINK);
-                        if (r < 0)
-                                return r;
-
+                        groups = link_groups;
+                        n_groups = ELEMENTSOF(link_groups);
                         break;
                 case RTM_NEWADDR:
                 case RTM_DELADDR:
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_IPV4_IFADDR);
-                        if (r < 0)
-                                return r;
-
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_IPV6_IFADDR);
-                        if (r < 0)
-                                return r;
-
+                        groups = address_groups;
+                        n_groups = ELEMENTSOF(address_groups);
                         break;
                 case RTM_NEWNEIGH:
                 case RTM_DELNEIGH:
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_NEIGH);
-                        if (r < 0)
-                                return r;
-
+                        groups = neighbor_groups;
+                        n_groups = ELEMENTSOF(neighbor_groups);
                         break;
                 case RTM_NEWROUTE:
                 case RTM_DELROUTE:
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_IPV4_ROUTE);
-                        if (r < 0)
-                                return r;
-
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_IPV6_ROUTE);
-                        if (r < 0)
-                                return r;
+                        groups = route_groups;
+                        n_groups = ELEMENTSOF(route_groups);
                         break;
                 case RTM_NEWRULE:
                 case RTM_DELRULE:
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_IPV4_RULE);
-                        if (r < 0)
-                                return r;
-
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_IPV6_RULE);
-                        if (r < 0)
-                                return r;
+                        groups = rule_groups;
+                        n_groups = ELEMENTSOF(rule_groups);
                         break;
                 case RTM_NEWNEXTHOP:
                 case RTM_DELNEXTHOP:
-                        r = socket_broadcast_group_ref(rtnl, RTNLGRP_NEXTHOP);
-                        if (r < 0)
-                                return r;
-                break;
-
+                        groups = nexthop_groups;
+                        n_groups = ELEMENTSOF(nexthop_groups);
+                        break;
+                case RTM_NEWQDISC:
+                case RTM_DELQDISC:
+                case RTM_NEWTCLASS:
+                case RTM_DELTCLASS:
+                        groups = tc_groups;
+                        n_groups = ELEMENTSOF(tc_groups);
+                        break;
                 default:
                         return -EOPNOTSUPP;
         }
 
-        LIST_PREPEND(match_callbacks, rtnl->match_callbacks, &slot->match_callback);
+        return netlink_add_match_internal(rtnl, ret_slot, groups, n_groups, type, 0, callback,
+                                          destroy_callback, userdata, description);
+}
 
-        /* Set this at last. Otherwise, some failures in above call the destroy callback but some do not. */
-        slot->destroy_callback = destroy_callback;
+int sd_netlink_attach_filter(sd_netlink *nl, size_t len, const struct sock_filter *filter) {
+        assert_return(nl, -EINVAL);
+        assert_return(len == 0 || filter, -EINVAL);
 
-        if (ret_slot)
-                *ret_slot = slot;
-
-        TAKE_PTR(slot);
+        if (setsockopt(nl->fd, SOL_SOCKET,
+                       len == 0 ? SO_DETACH_FILTER : SO_ATTACH_FILTER,
+                       &(struct sock_fprog) {
+                               .len = len,
+                               .filter = (struct sock_filter*) filter,
+                       }, sizeof(struct sock_fprog)) < 0)
+                return -errno;
 
         return 0;
 }
diff --git a/src/libsystemd/sd-netlink/test-netlink.c b/src/libsystemd/sd-netlink/test-netlink.c
index 41a7280..9ad8ecf 100644
--- a/src/libsystemd/sd-netlink/test-netlink.c
+++ b/src/libsystemd/sd-netlink/test-netlink.c
@@ -2,31 +2,42 @@
 
 #include <net/if.h>
 #include <netinet/ether.h>
+#include <netinet/in.h>
+#include <linux/fou.h>
 #include <linux/genetlink.h>
+#include <linux/if_macsec.h>
+#include <linux/l2tp.h>
+#include <linux/nl80211.h>
+#include <unistd.h>
 
 #include "sd-netlink.h"
 
 #include "alloc-util.h"
 #include "ether-addr-util.h"
 #include "macro.h"
+#include "netlink-genl.h"
+#include "netlink-internal.h"
 #include "netlink-util.h"
 #include "socket-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
+#include "tests.h"
 
-static void test_message_link_bridge(sd_netlink *rtnl) {
+TEST(message_newlink_bridge) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
         uint32_t cost;
 
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+
         assert_se(sd_rtnl_message_new_link(rtnl, &message, RTM_NEWLINK, 1) >= 0);
         assert_se(sd_rtnl_message_link_set_family(message, AF_BRIDGE) >= 0);
         assert_se(sd_netlink_message_open_container(message, IFLA_PROTINFO) >= 0);
         assert_se(sd_netlink_message_append_u32(message, IFLA_BRPORT_COST, 10) >= 0);
         assert_se(sd_netlink_message_close_container(message) >= 0);
 
-        assert_se(sd_netlink_message_rewind(message, NULL) >= 0);
+        assert_se(sd_netlink_message_rewind(message, rtnl) >= 0);
 
         assert_se(sd_netlink_message_enter_container(message, IFLA_PROTINFO) >= 0);
         assert_se(sd_netlink_message_read_u32(message, IFLA_BRPORT_COST, &cost) >= 0);
@@ -34,93 +45,83 @@
         assert_se(sd_netlink_message_exit_container(message) >= 0);
 }
 
-static void test_link_configure(sd_netlink *rtnl, int ifindex) {
+TEST(message_getlink) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL, *reply = NULL;
-        uint32_t mtu_out;
-        const char *name_out;
-        struct ether_addr mac_out;
+        int ifindex;
+        uint8_t u8_data;
+        uint16_t u16_data;
+        uint32_t u32_data;
+        const char *str_data;
+        struct ether_addr eth_data;
+
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+        ifindex = (int) if_nametoindex("lo");
 
         /* we'd really like to test NEWLINK, but let's not mess with the running kernel */
         assert_se(sd_rtnl_message_new_link(rtnl, &message, RTM_GETLINK, ifindex) >= 0);
-
         assert_se(sd_netlink_call(rtnl, message, 0, &reply) == 1);
 
-        assert_se(sd_netlink_message_read_string(reply, IFLA_IFNAME, &name_out) >= 0);
-        assert_se(sd_netlink_message_read_ether_addr(reply, IFLA_ADDRESS, &mac_out) >= 0);
-        assert_se(sd_netlink_message_read_u32(reply, IFLA_MTU, &mtu_out) >= 0);
+        /* u8 */
+        assert_se(sd_netlink_message_read_u8(reply, IFLA_CARRIER, &u8_data) >= 0);
+        assert_se(sd_netlink_message_read_u8(reply, IFLA_OPERSTATE, &u8_data) >= 0);
+        assert_se(sd_netlink_message_read_u8(reply, IFLA_LINKMODE, &u8_data) >= 0);
+
+        /* u16 */
+        assert_se(sd_netlink_message_get_type(reply, &u16_data) >= 0);
+        assert_se(u16_data == RTM_NEWLINK);
+
+        /* u32 */
+        assert_se(sd_netlink_message_read_u32(reply, IFLA_MTU, &u32_data) >= 0);
+        assert_se(sd_netlink_message_read_u32(reply, IFLA_GROUP, &u32_data) >= 0);
+        assert_se(sd_netlink_message_read_u32(reply, IFLA_TXQLEN, &u32_data) >= 0);
+        assert_se(sd_netlink_message_read_u32(reply, IFLA_NUM_TX_QUEUES, &u32_data) >= 0);
+        assert_se(sd_netlink_message_read_u32(reply, IFLA_NUM_RX_QUEUES, &u32_data) >= 0);
+
+        /* string */
+        assert_se(sd_netlink_message_read_string(reply, IFLA_IFNAME, &str_data) >= 0);
+
+        /* ether_addr */
+        assert_se(sd_netlink_message_read_ether_addr(reply, IFLA_ADDRESS, &eth_data) >= 0);
 }
 
-static void test_link_get(sd_netlink *rtnl, int ifindex) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *r = NULL;
-        const char *str_data;
-        uint8_t u8_data;
-        uint32_t u32_data;
-        struct ether_addr eth_data;
-
-        assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_GETLINK, ifindex) >= 0);
-        assert_se(m);
-
-        assert_se(sd_netlink_call(rtnl, m, 0, &r) == 1);
-
-        assert_se(sd_netlink_message_read_string(r, IFLA_IFNAME, &str_data) == 0);
-
-        assert_se(sd_netlink_message_read_u8(r, IFLA_CARRIER, &u8_data) == 0);
-        assert_se(sd_netlink_message_read_u8(r, IFLA_OPERSTATE, &u8_data) == 0);
-        assert_se(sd_netlink_message_read_u8(r, IFLA_LINKMODE, &u8_data) == 0);
-
-        assert_se(sd_netlink_message_read_u32(r, IFLA_MTU, &u32_data) == 0);
-        assert_se(sd_netlink_message_read_u32(r, IFLA_GROUP, &u32_data) == 0);
-        assert_se(sd_netlink_message_read_u32(r, IFLA_TXQLEN, &u32_data) == 0);
-        assert_se(sd_netlink_message_read_u32(r, IFLA_NUM_TX_QUEUES, &u32_data) == 0);
-        assert_se(sd_netlink_message_read_u32(r, IFLA_NUM_RX_QUEUES, &u32_data) == 0);
-
-        assert_se(sd_netlink_message_read_ether_addr(r, IFLA_ADDRESS, &eth_data) == 0);
-}
-
-static void test_address_get(sd_netlink *rtnl, int ifindex) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *r = NULL;
+TEST(message_address) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL, *reply = NULL;
+        int ifindex;
         struct in_addr in_data;
         struct ifa_cacheinfo cache;
         const char *label;
 
-        assert_se(sd_rtnl_message_new_addr(rtnl, &m, RTM_GETADDR, ifindex, AF_INET) >= 0);
-        assert_se(m);
-        assert_se(sd_netlink_message_request_dump(m, true) >= 0);
-        assert_se(sd_netlink_call(rtnl, m, -1, &r) == 1);
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+        ifindex = (int) if_nametoindex("lo");
 
-        assert_se(sd_netlink_message_read_in_addr(r, IFA_LOCAL, &in_data) == 0);
-        assert_se(sd_netlink_message_read_in_addr(r, IFA_ADDRESS, &in_data) == 0);
-        assert_se(sd_netlink_message_read_string(r, IFA_LABEL, &label) == 0);
-        assert_se(sd_netlink_message_read_cache_info(r, IFA_CACHEINFO, &cache) == 0);
+        assert_se(sd_rtnl_message_new_addr(rtnl, &message, RTM_GETADDR, ifindex, AF_INET) >= 0);
+        assert_se(sd_netlink_message_set_request_dump(message, true) >= 0);
+        assert_se(sd_netlink_call(rtnl, message, 0, &reply) == 1);
+
+        assert_se(sd_netlink_message_read_in_addr(reply, IFA_LOCAL, &in_data) >= 0);
+        assert_se(sd_netlink_message_read_in_addr(reply, IFA_ADDRESS, &in_data) >= 0);
+        assert_se(sd_netlink_message_read_string(reply, IFA_LABEL, &label) >= 0);
+        assert_se(sd_netlink_message_read_cache_info(reply, IFA_CACHEINFO, &cache) == 0);
 }
 
-static void test_route(sd_netlink *rtnl) {
+TEST(message_route) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
         struct in_addr addr, addr_data;
         uint32_t index = 2, u32_data;
-        int r;
 
-        r = sd_rtnl_message_new_route(rtnl, &req, RTM_NEWROUTE, AF_INET, RTPROT_STATIC);
-        if (r < 0) {
-                log_error_errno(r, "Could not create RTM_NEWROUTE message: %m");
-                return;
-        }
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+
+        assert_se(sd_rtnl_message_new_route(rtnl, &req, RTM_NEWROUTE, AF_INET, RTPROT_STATIC) >= 0);
 
         addr.s_addr = htobe32(INADDR_LOOPBACK);
 
-        r = sd_netlink_message_append_in_addr(req, RTA_GATEWAY, &addr);
-        if (r < 0) {
-                log_error_errno(r, "Could not append RTA_GATEWAY attribute: %m");
-                return;
-        }
+        assert_se(sd_netlink_message_append_in_addr(req, RTA_GATEWAY, &addr) >= 0);
+        assert_se(sd_netlink_message_append_u32(req, RTA_OIF, index) >= 0);
 
-        r = sd_netlink_message_append_u32(req, RTA_OIF, index);
-        if (r < 0) {
-                log_error_errno(r, "Could not append RTA_OIF attribute: %m");
-                return;
-        }
-
-        assert_se(sd_netlink_message_rewind(req, NULL) >= 0);
+        assert_se(sd_netlink_message_rewind(req, rtnl) >= 0);
 
         assert_se(sd_netlink_message_read_in_addr(req, RTA_GATEWAY, &addr_data) >= 0);
         assert_se(addr_data.s_addr == addr.s_addr);
@@ -131,127 +132,94 @@
         assert_se((req = sd_netlink_message_unref(req)) == NULL);
 }
 
-static void test_multiple(void) {
-        sd_netlink *rtnl1, *rtnl2;
-
-        assert_se(sd_netlink_open(&rtnl1) >= 0);
-        assert_se(sd_netlink_open(&rtnl2) >= 0);
-
-        rtnl1 = sd_netlink_unref(rtnl1);
-        rtnl2 = sd_netlink_unref(rtnl2);
-}
-
 static int link_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
-        char *ifname = userdata;
         const char *data;
 
         assert_se(rtnl);
         assert_se(m);
-        assert_se(userdata);
 
-        log_info("%s: got link info about %s", __func__, ifname);
-        free(ifname);
+        assert_se(streq_ptr(userdata, "foo"));
 
         assert_se(sd_netlink_message_read_string(m, IFLA_IFNAME, &data) >= 0);
         assert_se(streq(data, "lo"));
 
+        log_info("%s: got link info about %s", __func__, data);
         return 1;
 }
 
-static void test_event_loop(int ifindex) {
+TEST(netlink_event_loop) {
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-        char *ifname;
-
-        ifname = strdup("lo2");
-        assert_se(ifname);
+        _cleanup_free_ char *userdata = NULL;
+        int ifindex;
 
         assert_se(sd_netlink_open(&rtnl) >= 0);
-        assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_GETLINK, ifindex) >= 0);
+        ifindex = (int) if_nametoindex("lo");
 
-        assert_se(sd_netlink_call_async(rtnl, NULL, m, link_handler, NULL, ifname, 0, NULL) >= 0);
+        assert_se(userdata = strdup("foo"));
 
         assert_se(sd_event_default(&event) >= 0);
-
         assert_se(sd_netlink_attach_event(rtnl, event, 0) >= 0);
 
+        assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_GETLINK, ifindex) >= 0);
+        assert_se(sd_netlink_call_async(rtnl, NULL, m, link_handler, NULL, userdata, 0, NULL) >= 0);
+
         assert_se(sd_event_run(event, 0) >= 0);
 
         assert_se(sd_netlink_detach_event(rtnl) >= 0);
-
         assert_se((rtnl = sd_netlink_unref(rtnl)) == NULL);
 }
 
 static void test_async_destroy(void *userdata) {
 }
 
-static void test_async(int ifindex) {
+TEST(netlink_call_async) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *r = NULL;
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *reply = NULL;
         _cleanup_(sd_netlink_slot_unrefp) sd_netlink_slot *slot = NULL;
+        _cleanup_free_ char *userdata = NULL;
         sd_netlink_destroy_t destroy_callback;
         const char *description;
-        char *ifname;
-
-        ifname = strdup("lo");
-        assert_se(ifname);
+        int ifindex;
 
         assert_se(sd_netlink_open(&rtnl) >= 0);
+        ifindex = (int) if_nametoindex("lo");
+
+        assert_se(userdata = strdup("foo"));
 
         assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_GETLINK, ifindex) >= 0);
-
-        assert_se(sd_netlink_call_async(rtnl, &slot, m, link_handler, test_async_destroy, ifname, 0, "hogehoge") >= 0);
+        assert_se(sd_netlink_call_async(rtnl, &slot, m, link_handler, test_async_destroy, userdata, 0, "hogehoge") >= 0);
 
         assert_se(sd_netlink_slot_get_netlink(slot) == rtnl);
-        assert_se(sd_netlink_slot_get_userdata(slot) == ifname);
+
+        assert_se(sd_netlink_slot_get_userdata(slot) == userdata);
+        assert_se(sd_netlink_slot_set_userdata(slot, NULL) == userdata);
+        assert_se(sd_netlink_slot_get_userdata(slot) == NULL);
+        assert_se(sd_netlink_slot_set_userdata(slot, userdata) == NULL);
+        assert_se(sd_netlink_slot_get_userdata(slot) == userdata);
+
         assert_se(sd_netlink_slot_get_destroy_callback(slot, &destroy_callback) == 1);
         assert_se(destroy_callback == test_async_destroy);
-        assert_se(sd_netlink_slot_get_floating(slot) == 0);
-        assert_se(sd_netlink_slot_get_description(slot, &description) == 1);
-        assert_se(streq(description, "hogehoge"));
-
-        assert_se(sd_netlink_wait(rtnl, 0) >= 0);
-        assert_se(sd_netlink_process(rtnl, &r) >= 0);
-
-        assert_se((rtnl = sd_netlink_unref(rtnl)) == NULL);
-}
-
-static void test_slot_set(int ifindex) {
-        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *r = NULL;
-        _cleanup_(sd_netlink_slot_unrefp) sd_netlink_slot *slot = NULL;
-        sd_netlink_destroy_t destroy_callback;
-        const char *description;
-        char *ifname;
-
-        ifname = strdup("lo");
-        assert_se(ifname);
-
-        assert_se(sd_netlink_open(&rtnl) >= 0);
-
-        assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_GETLINK, ifindex) >= 0);
-
-        assert_se(sd_netlink_call_async(rtnl, &slot, m, link_handler, NULL, NULL, 0, NULL) >= 0);
-
-        assert_se(sd_netlink_slot_get_netlink(slot) == rtnl);
-        assert_se(!sd_netlink_slot_get_userdata(slot));
-        assert_se(!sd_netlink_slot_set_userdata(slot, ifname));
-        assert_se(sd_netlink_slot_get_userdata(slot) == ifname);
-        assert_se(sd_netlink_slot_get_destroy_callback(slot, NULL) == 0);
+        assert_se(sd_netlink_slot_set_destroy_callback(slot, NULL) >= 0);
+        assert_se(sd_netlink_slot_get_destroy_callback(slot, &destroy_callback) == 0);
+        assert_se(destroy_callback == NULL);
         assert_se(sd_netlink_slot_set_destroy_callback(slot, test_async_destroy) >= 0);
         assert_se(sd_netlink_slot_get_destroy_callback(slot, &destroy_callback) == 1);
         assert_se(destroy_callback == test_async_destroy);
+
         assert_se(sd_netlink_slot_get_floating(slot) == 0);
         assert_se(sd_netlink_slot_set_floating(slot, 1) == 1);
         assert_se(sd_netlink_slot_get_floating(slot) == 1);
-        assert_se(sd_netlink_slot_get_description(slot, NULL) == 0);
-        assert_se(sd_netlink_slot_set_description(slot, "hogehoge") >= 0);
+
         assert_se(sd_netlink_slot_get_description(slot, &description) == 1);
         assert_se(streq(description, "hogehoge"));
+        assert_se(sd_netlink_slot_set_description(slot, NULL) >= 0);
+        assert_se(sd_netlink_slot_get_description(slot, &description) == 0);
+        assert_se(description == NULL);
 
         assert_se(sd_netlink_wait(rtnl, 0) >= 0);
-        assert_se(sd_netlink_process(rtnl, &r) >= 0);
+        assert_se(sd_netlink_process(rtnl, &reply) >= 0);
 
         assert_se((rtnl = sd_netlink_unref(rtnl)) == NULL);
 }
@@ -262,7 +230,7 @@
 };
 
 static struct test_async_object *test_async_object_free(struct test_async_object *t) {
-        assert(t);
+        assert_se(t);
 
         free(t->ifname);
         return mfree(t);
@@ -290,27 +258,27 @@
 static void test_async_object_destroy(void *userdata) {
         struct test_async_object *t = userdata;
 
-        assert(userdata);
+        assert_se(userdata);
 
         log_info("%s: n_ref=%u", __func__, t->n_ref);
         test_async_object_unref(t);
 }
 
-static void test_async_destroy_callback(int ifindex) {
+TEST(async_destroy_callback) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *r = NULL;
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *reply = NULL;
         _cleanup_(test_async_object_unrefp) struct test_async_object *t = NULL;
         _cleanup_(sd_netlink_slot_unrefp) sd_netlink_slot *slot = NULL;
-        char *ifname;
-
-        assert_se(t = new(struct test_async_object, 1));
-        assert_se(ifname = strdup("lo"));
-        *t = (struct test_async_object) {
-                .n_ref = 1,
-                .ifname = ifname,
-        };
+        int ifindex;
 
         assert_se(sd_netlink_open(&rtnl) >= 0);
+        ifindex = (int) if_nametoindex("lo");
+
+        assert_se(t = new(struct test_async_object, 1));
+        *t = (struct test_async_object) {
+                .n_ref = 1,
+        };
+        assert_se(t->ifname = strdup("lo"));
 
         /* destroy callback is called after processing message */
         assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_GETLINK, ifindex) >= 0);
@@ -321,7 +289,7 @@
         assert_se(t->n_ref == 2);
 
         assert_se(sd_netlink_wait(rtnl, 0) >= 0);
-        assert_se(sd_netlink_process(rtnl, &r) == 1);
+        assert_se(sd_netlink_process(rtnl, &reply) == 1);
         assert_se(t->n_ref == 1);
 
         assert_se(!sd_netlink_message_unref(m));
@@ -366,12 +334,13 @@
         return 1;
 }
 
-static void test_pipe(int ifindex) {
+TEST(pipe) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m1 = NULL, *m2 = NULL;
-        int counter = 0;
+        int ifindex, counter = 0;
 
         assert_se(sd_netlink_open(&rtnl) >= 0);
+        ifindex = (int) if_nametoindex("lo");
 
         assert_se(sd_rtnl_message_new_link(rtnl, &m1, RTM_GETLINK, ifindex) >= 0);
         assert_se(sd_rtnl_message_new_link(rtnl, &m2, RTM_GETLINK, ifindex) >= 0);
@@ -390,23 +359,24 @@
         assert_se((rtnl = sd_netlink_unref(rtnl)) == NULL);
 }
 
-static void test_container(sd_netlink *rtnl) {
+TEST(message_container) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         uint16_t u16_data;
         uint32_t u32_data;
         const char *string_data;
 
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+
         assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_NEWLINK, 0) >= 0);
 
         assert_se(sd_netlink_message_open_container(m, IFLA_LINKINFO) >= 0);
         assert_se(sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, "vlan") >= 0);
         assert_se(sd_netlink_message_append_u16(m, IFLA_VLAN_ID, 100) >= 0);
         assert_se(sd_netlink_message_close_container(m) >= 0);
-        assert_se(sd_netlink_message_append_string(m, IFLA_INFO_KIND, "vlan") >= 0);
         assert_se(sd_netlink_message_close_container(m) >= 0);
-        assert_se(sd_netlink_message_close_container(m) == -EINVAL);
 
-        assert_se(sd_netlink_message_rewind(m, NULL) >= 0);
+        assert_se(sd_netlink_message_rewind(m, rtnl) >= 0);
 
         assert_se(sd_netlink_message_enter_container(m, IFLA_LINKINFO) >= 0);
         assert_se(sd_netlink_message_read_string(m, IFLA_INFO_KIND, &string_data) >= 0);
@@ -421,11 +391,9 @@
         assert_se(sd_netlink_message_exit_container(m) >= 0);
 
         assert_se(sd_netlink_message_read_u32(m, IFLA_LINKINFO, &u32_data) < 0);
-
-        assert_se(sd_netlink_message_exit_container(m) == -EINVAL);
 }
 
-static void test_match(void) {
+TEST(sd_netlink_add_match) {
         _cleanup_(sd_netlink_slot_unrefp) sd_netlink_slot *s1 = NULL, *s2 = NULL;
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
 
@@ -441,15 +409,17 @@
         assert_se((rtnl = sd_netlink_unref(rtnl)) == NULL);
 }
 
-static void test_get_addresses(sd_netlink *rtnl) {
+TEST(dump_addresses) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
-        sd_netlink_message *m;
+
+        assert_se(sd_netlink_open(&rtnl) >= 0);
 
         assert_se(sd_rtnl_message_new_addr(rtnl, &req, RTM_GETADDR, 0, AF_UNSPEC) >= 0);
-        assert_se(sd_netlink_message_request_dump(req, true) >= 0);
+        assert_se(sd_netlink_message_set_request_dump(req, true) >= 0);
         assert_se(sd_netlink_call(rtnl, req, 0, &reply) >= 0);
 
-        for (m = reply; m; m = sd_netlink_message_next(m)) {
+        for (sd_netlink_message *m = reply; m; m = sd_netlink_message_next(m)) {
                 uint16_t type;
                 unsigned char scope, flags;
                 int family, ifindex;
@@ -465,23 +435,26 @@
                 assert_se(ifindex > 0);
                 assert_se(IN_SET(family, AF_INET, AF_INET6));
 
-                log_info("got IPv%u address on ifindex %i", family == AF_INET ? 4: 6, ifindex);
+                log_info("got IPv%i address on ifindex %i", family == AF_INET ? 4 : 6, ifindex);
         }
 }
 
-static void test_message(sd_netlink *rtnl) {
+TEST(sd_netlink_message_get_errno) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
 
-        assert_se(rtnl_message_new_synthetic_error(rtnl, -ETIMEDOUT, 1, &m) >= 0);
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+
+        assert_se(message_new_synthetic_error(rtnl, -ETIMEDOUT, 1, &m) >= 0);
         assert_se(sd_netlink_message_get_errno(m) == -ETIMEDOUT);
 }
 
-static void test_array(void) {
+TEST(message_array) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *genl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
 
         assert_se(sd_genl_socket_open(&genl) >= 0);
-        assert_se(sd_genl_message_new(genl, SD_GENL_ID_CTRL, CTRL_CMD_GETFAMILY, &m) >= 0);
+        assert_se(sd_genl_message_new(genl, CTRL_GENL_NAME, CTRL_CMD_GETFAMILY, &m) >= 0);
 
         assert_se(sd_netlink_message_open_container(m, CTRL_ATTR_MCAST_GROUPS) >= 0);
         for (unsigned i = 0; i < 10; i++) {
@@ -496,7 +469,7 @@
         }
         assert_se(sd_netlink_message_close_container(m) >= 0);
 
-        rtnl_message_seal(m);
+        message_seal(m);
         assert_se(sd_netlink_message_rewind(m, genl) >= 0);
 
         assert_se(sd_netlink_message_enter_container(m, CTRL_ATTR_MCAST_GROUPS) >= 0);
@@ -517,11 +490,14 @@
         assert_se(sd_netlink_message_exit_container(m) >= 0);
 }
 
-static void test_strv(sd_netlink *rtnl) {
+TEST(message_strv) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         _cleanup_strv_free_ char **names_in = NULL, **names_out;
         const char *p;
 
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+
         assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_NEWLINKPROP, 1) >= 0);
 
         for (unsigned i = 0; i < 10; i++) {
@@ -532,11 +508,11 @@
         }
 
         assert_se(sd_netlink_message_open_container(m, IFLA_PROP_LIST) >= 0);
-        assert_se(sd_netlink_message_append_strv(m, IFLA_ALT_IFNAME, names_in) >= 0);
+        assert_se(sd_netlink_message_append_strv(m, IFLA_ALT_IFNAME, (const char**) names_in) >= 0);
         assert_se(sd_netlink_message_close_container(m) >= 0);
 
-        rtnl_message_seal(m);
-        assert_se(sd_netlink_message_rewind(m, NULL) >= 0);
+        message_seal(m);
+        assert_se(sd_netlink_message_rewind(m, rtnl) >= 0);
 
         assert_se(sd_netlink_message_read_strv(m, IFLA_PROP_LIST, IFLA_ALT_IFNAME, &names_out) >= 0);
         assert_se(strv_equal(names_in, names_out));
@@ -547,63 +523,159 @@
         assert_se(sd_netlink_message_exit_container(m) >= 0);
 }
 
-int main(void) {
-        sd_netlink *rtnl;
-        sd_netlink_message *m;
-        sd_netlink_message *r;
-        const char *string_data;
-        int if_loopback;
-        uint16_t type;
+static int genl_ctrl_match_callback(sd_netlink *genl, sd_netlink_message *m, void *userdata) {
+        const char *name;
+        uint16_t id;
+        uint8_t cmd;
 
-        test_match();
-        test_multiple();
-
-        assert_se(sd_netlink_open(&rtnl) >= 0);
-        assert_se(rtnl);
-
-        test_route(rtnl);
-        test_message(rtnl);
-        test_container(rtnl);
-        test_array();
-        test_strv(rtnl);
-
-        if_loopback = (int) if_nametoindex("lo");
-        assert_se(if_loopback > 0);
-
-        test_async(if_loopback);
-        test_slot_set(if_loopback);
-        test_async_destroy_callback(if_loopback);
-        test_pipe(if_loopback);
-        test_event_loop(if_loopback);
-        test_link_configure(rtnl, if_loopback);
-
-        test_get_addresses(rtnl);
-        test_message_link_bridge(rtnl);
-
-        assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_GETLINK, if_loopback) >= 0);
+        assert_se(genl);
         assert_se(m);
 
-        assert_se(sd_netlink_message_get_type(m, &type) >= 0);
-        assert_se(type == RTM_GETLINK);
+        assert_se(sd_genl_message_get_family_name(genl, m, &name) >= 0);
+        assert_se(streq(name, CTRL_GENL_NAME));
 
-        assert_se(sd_netlink_message_read_string(m, IFLA_IFNAME, &string_data) == -EPERM);
+        assert_se(sd_genl_message_get_command(genl, m, &cmd) >= 0);
 
-        assert_se(sd_netlink_call(rtnl, m, 0, &r) == 1);
-        assert_se(sd_netlink_message_get_type(r, &type) >= 0);
-        assert_se(type == RTM_NEWLINK);
+        switch (cmd) {
+        case CTRL_CMD_NEWFAMILY:
+        case CTRL_CMD_DELFAMILY:
+                assert_se(sd_netlink_message_read_string(m, CTRL_ATTR_FAMILY_NAME, &name) >= 0);
+                assert_se(sd_netlink_message_read_u16(m, CTRL_ATTR_FAMILY_ID, &id) >= 0);
+                log_debug("%s: %s (id=%"PRIu16") family is %s.",
+                          __func__, name, id, cmd == CTRL_CMD_NEWFAMILY ? "added" : "removed");
+                break;
+        case CTRL_CMD_NEWMCAST_GRP:
+        case CTRL_CMD_DELMCAST_GRP:
+                assert_se(sd_netlink_message_read_string(m, CTRL_ATTR_FAMILY_NAME, &name) >= 0);
+                assert_se(sd_netlink_message_read_u16(m, CTRL_ATTR_FAMILY_ID, &id) >= 0);
+                log_debug("%s: multicast group for %s (id=%"PRIu16") family is %s.",
+                          __func__, name, id, cmd == CTRL_CMD_NEWMCAST_GRP ? "added" : "removed");
+                break;
+        default:
+                log_debug("%s: received nlctrl message with unknown command '%"PRIu8"'.", __func__, cmd);
+        }
 
-        assert_se((r = sd_netlink_message_unref(r)) == NULL);
-
-        assert_se(sd_netlink_call(rtnl, m, -1, &r) == -EPERM);
-        assert_se((m = sd_netlink_message_unref(m)) == NULL);
-        assert_se((r = sd_netlink_message_unref(r)) == NULL);
-
-        test_link_get(rtnl, if_loopback);
-        test_address_get(rtnl, if_loopback);
-
-        assert_se((m = sd_netlink_message_unref(m)) == NULL);
-        assert_se((r = sd_netlink_message_unref(r)) == NULL);
-        assert_se((rtnl = sd_netlink_unref(rtnl)) == NULL);
-
-        return EXIT_SUCCESS;
+        return 0;
 }
+
+TEST(genl) {
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        _cleanup_(sd_netlink_unrefp) sd_netlink *genl = NULL;
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        const char *name;
+        uint8_t cmd;
+        int r;
+
+        assert_se(sd_genl_socket_open(&genl) >= 0);
+        assert_se(sd_event_default(&event) >= 0);
+        assert_se(sd_netlink_attach_event(genl, event, 0) >= 0);
+
+        assert_se(sd_genl_message_new(genl, CTRL_GENL_NAME, CTRL_CMD_GETFAMILY, &m) >= 0);
+        assert_se(sd_genl_message_get_family_name(genl, m, &name) >= 0);
+        assert_se(streq(name, CTRL_GENL_NAME));
+        assert_se(sd_genl_message_get_command(genl, m, &cmd) >= 0);
+        assert_se(cmd == CTRL_CMD_GETFAMILY);
+
+        assert_se(sd_genl_add_match(genl, NULL, CTRL_GENL_NAME, "notify", 0, genl_ctrl_match_callback, NULL, NULL, "genl-ctrl-notify") >= 0);
+
+        m = sd_netlink_message_unref(m);
+        assert_se(sd_genl_message_new(genl, "should-not-exist", CTRL_CMD_GETFAMILY, &m) < 0);
+        assert_se(sd_genl_message_new(genl, "should-not-exist", CTRL_CMD_GETFAMILY, &m) == -EOPNOTSUPP);
+
+        /* These families may not be supported by kernel. Hence, ignore results. */
+        (void) sd_genl_message_new(genl, FOU_GENL_NAME, 0, &m);
+        m = sd_netlink_message_unref(m);
+        (void) sd_genl_message_new(genl, L2TP_GENL_NAME, 0, &m);
+        m = sd_netlink_message_unref(m);
+        (void) sd_genl_message_new(genl, MACSEC_GENL_NAME, 0, &m);
+        m = sd_netlink_message_unref(m);
+        (void) sd_genl_message_new(genl, NL80211_GENL_NAME, 0, &m);
+        m = sd_netlink_message_unref(m);
+        (void) sd_genl_message_new(genl, NETLBL_NLTYPE_UNLABELED_NAME, 0, &m);
+
+        for (;;) {
+                r = sd_event_run(event, 500 * USEC_PER_MSEC);
+                assert_se(r >= 0);
+                if (r == 0)
+                        return;
+        }
+}
+
+static void remove_dummy_interfacep(int *ifindex) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
+
+        if (!ifindex || *ifindex <= 0)
+                return;
+
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+
+        assert_se(sd_rtnl_message_new_link(rtnl, &message, RTM_DELLINK, *ifindex) >= 0);
+        assert_se(sd_netlink_call(rtnl, message, 0, NULL) == 1);
+}
+
+TEST(rtnl_set_link_name) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL, *reply = NULL;
+        _cleanup_(remove_dummy_interfacep) int ifindex = 0;
+        _cleanup_strv_free_ char **alternative_names = NULL;
+        int r;
+
+        if (geteuid() != 0)
+                return (void) log_tests_skipped("not root");
+
+        assert_se(sd_netlink_open(&rtnl) >= 0);
+
+        assert_se(sd_rtnl_message_new_link(rtnl, &message, RTM_NEWLINK, 0) >= 0);
+        assert_se(sd_netlink_message_append_string(message, IFLA_IFNAME, "test-netlink") >= 0);
+        assert_se(sd_netlink_message_open_container(message, IFLA_LINKINFO) >= 0);
+        assert_se(sd_netlink_message_append_string(message, IFLA_INFO_KIND, "dummy") >= 0);
+        r = sd_netlink_call(rtnl, message, 0, &reply);
+        if (r == -EPERM)
+                return (void) log_tests_skipped("missing required capabilities");
+        if (r == -EOPNOTSUPP)
+                return (void) log_tests_skipped("dummy network interface is not supported");
+        assert_se(r >= 0);
+
+        message = sd_netlink_message_unref(message);
+        reply = sd_netlink_message_unref(reply);
+
+        assert_se(sd_rtnl_message_new_link(rtnl, &message, RTM_GETLINK, 0) >= 0);
+        assert_se(sd_netlink_message_append_string(message, IFLA_IFNAME, "test-netlink") >= 0);
+        assert_se(sd_netlink_call(rtnl, message, 0, &reply) == 1);
+
+        assert_se(sd_rtnl_message_link_get_ifindex(reply, &ifindex) >= 0);
+        assert_se(ifindex > 0);
+
+        /* Test that the new name (which is currently an alternative name) is
+         * restored as an alternative name on error. Create an error by using
+         * an invalid device name, namely one that exceeds IFNAMSIZ
+         * (alternative names can exceed IFNAMSIZ, but not regular names). */
+        r = rtnl_set_link_alternative_names(&rtnl, ifindex, STRV_MAKE("testlongalternativename", "test-shortname"));
+        if (r == -EPERM)
+                return (void) log_tests_skipped("missing required capabilities");
+        if (r == -EOPNOTSUPP)
+                return (void) log_tests_skipped("alternative name is not supported");
+        assert_se(r >= 0);
+
+        assert_se(rtnl_get_link_alternative_names(&rtnl, ifindex, &alternative_names) >= 0);
+        assert_se(strv_contains(alternative_names, "testlongalternativename"));
+        assert_se(strv_contains(alternative_names, "test-shortname"));
+
+        assert_se(rtnl_set_link_name(&rtnl, ifindex, "testlongalternativename") == -EINVAL);
+        assert_se(rtnl_set_link_name(&rtnl, ifindex, "test-shortname") >= 0);
+
+        alternative_names = strv_free(alternative_names);
+        assert_se(rtnl_get_link_alternative_names(&rtnl, ifindex, &alternative_names) >= 0);
+        assert_se(strv_contains(alternative_names, "testlongalternativename"));
+        assert_se(!strv_contains(alternative_names, "test-shortname"));
+
+        assert_se(rtnl_delete_link_alternative_names(&rtnl, ifindex, STRV_MAKE("testlongalternativename")) >= 0);
+
+        alternative_names = strv_free(alternative_names);
+        assert_se(rtnl_get_link_alternative_names(&rtnl, ifindex, &alternative_names) >= 0);
+        assert_se(!strv_contains(alternative_names, "testlongalternativename"));
+        assert_se(!strv_contains(alternative_names, "test-shortname"));
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/libsystemd/sd-network/network-util.c b/src/libsystemd/sd-network/network-util.c
index 4a648ca..2059567 100644
--- a/src/libsystemd/sd-network/network-util.c
+++ b/src/libsystemd/sd-network/network-util.c
@@ -1,14 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "sd-id128.h"
+#include "sd-network.h"
 
 #include "alloc-util.h"
-#include "arphrd-list.h"
-#include "device-util.h"
-#include "fd-util.h"
 #include "network-util.h"
-#include "siphash24.h"
-#include "sparse-endian.h"
 #include "string-table.h"
 #include "strv.h"
 
@@ -141,78 +136,22 @@
         return 0;
 }
 
-int link_get_type_string(sd_device *device, unsigned short iftype, char **ret) {
-        const char *t;
-        char *p;
-
-        if (device &&
-            sd_device_get_devtype(device, &t) >= 0 &&
-            !isempty(t)) {
-                p = strdup(t);
-                if (!p)
-                        return -ENOMEM;
-
-                *ret = p;
-                return 0;
-        }
-
-        t = arphrd_to_name(iftype);
-        if (!t)
-                return -ENOENT;
-
-        p = strdup(t);
-        if (!p)
-                return -ENOMEM;
-
-        *ret = ascii_strlower(p);
-        return 0;
-}
-
-const char *net_get_name_persistent(sd_device *device) {
-        const char *name, *field;
-
-        assert(device);
-
-        /* fetch some persistent data unique (on this machine) to this device */
-        FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC")
-                if (sd_device_get_property_value(device, field, &name) >= 0)
-                        return name;
-
-        return NULL;
-}
-
-#define HASH_KEY SD_ID128_MAKE(d3,1e,48,fa,90,fe,4b,4c,9d,af,d5,d7,a1,b1,2e,8a)
-
-int net_get_unique_predictable_data(sd_device *device, bool use_sysname, uint64_t *result) {
-        size_t l, sz = 0;
-        const char *name;
+int network_link_get_operational_state(int ifindex, LinkOperationalState *ret) {
+        _cleanup_free_ char *str = NULL;
+        LinkOperationalState s;
         int r;
-        uint8_t *v;
 
-        assert(device);
+        assert(ifindex > 0);
+        assert(ret);
 
-        /* net_get_name_persistent() will return one of the device names based on stable information about
-         * the device. If this is not available, we fall back to using the actual device name. */
-        name = net_get_name_persistent(device);
-        if (!name && use_sysname)
-                (void) sd_device_get_sysname(device, &name);
-        if (!name)
-                return log_device_debug_errno(device, SYNTHETIC_ERRNO(ENODATA),
-                                              "No stable identifying information found");
-
-        log_device_debug(device, "Using \"%s\" as stable identifying information", name);
-        l = strlen(name);
-        sz = sizeof(sd_id128_t) + l;
-        v = newa(uint8_t, sz);
-
-        /* Fetch some persistent data unique to this machine */
-        r = sd_id128_get_machine((sd_id128_t*) v);
+        r = sd_network_link_get_operational_state(ifindex, &str);
         if (r < 0)
-                 return r;
-        memcpy(v + sizeof(sd_id128_t), name, l);
+                return r;
 
-        /* Let's hash the machine ID plus the device name. We use
-         * a fixed, but originally randomly created hash key here. */
-        *result = htole64(siphash24(v, sz, HASH_KEY.bytes));
+        s = link_operstate_from_string(str);
+        if (s < 0)
+                return s;
+
+        *ret = s;
         return 0;
 }
diff --git a/src/libsystemd/sd-network/network-util.h b/src/libsystemd/sd-network/network-util.h
index 3a2e4a7..c47e271 100644
--- a/src/libsystemd/sd-network/network-util.h
+++ b/src/libsystemd/sd-network/network-util.h
@@ -1,12 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <inttypes.h>
+#include <errno.h>
 #include <stdbool.h>
 
-#include "sd-device.h"
-#include "sd-network.h"
-
 #include "macro.h"
 
 bool network_is_online(void);
@@ -86,7 +83,4 @@
                                                                    LINK_OPERSTATE_ROUTABLE }
 
 int parse_operational_state_range(const char *str, LinkOperationalStateRange *out);
-
-int link_get_type_string(sd_device *device, unsigned short iftype, char **ret);
-int net_get_unique_predictable_data(sd_device *device, bool use_sysname, uint64_t *result);
-const char *net_get_name_persistent(sd_device *device);
+int network_link_get_operational_state(int ifindex, LinkOperationalState *ret);
diff --git a/src/libsystemd/sd-network/sd-network.c b/src/libsystemd/sd-network/sd-network.c
index 7273a77..dd440a5 100644
--- a/src/libsystemd/sd-network/sd-network.c
+++ b/src/libsystemd/sd-network/sd-network.c
@@ -10,12 +10,12 @@
 #include "env-file.h"
 #include "fd-util.h"
 #include "fs-util.h"
+#include "inotify-util.h"
 #include "macro.h"
 #include "parse-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
 
 static int network_get_string(const char *field, char **ret) {
         _cleanup_free_ char *s = NULL;
@@ -24,40 +24,37 @@
         assert_return(ret, -EINVAL);
 
         r = parse_env_file(NULL, "/run/systemd/netif/state", field, &s);
-        if (r == -ENOENT)
-                return -ENODATA;
         if (r < 0)
                 return r;
         if (isempty(s))
                 return -ENODATA;
 
         *ret = TAKE_PTR(s);
-
         return 0;
 }
 
-_public_ int sd_network_get_operational_state(char **state) {
-        return network_get_string("OPER_STATE", state);
+int sd_network_get_operational_state(char **ret) {
+        return network_get_string("OPER_STATE", ret);
 }
 
-_public_ int sd_network_get_carrier_state(char **state) {
-        return network_get_string("CARRIER_STATE", state);
+int sd_network_get_carrier_state(char **ret) {
+        return network_get_string("CARRIER_STATE", ret);
 }
 
-_public_ int sd_network_get_address_state(char **state) {
-        return network_get_string("ADDRESS_STATE", state);
+int sd_network_get_address_state(char **ret) {
+        return network_get_string("ADDRESS_STATE", ret);
 }
 
-_public_ int sd_network_get_ipv4_address_state(char **state) {
-        return network_get_string("IPV4_ADDRESS_STATE", state);
+int sd_network_get_ipv4_address_state(char **ret) {
+        return network_get_string("IPV4_ADDRESS_STATE", ret);
 }
 
-_public_ int sd_network_get_ipv6_address_state(char **state) {
-        return network_get_string("IPV6_ADDRESS_STATE", state);
+int sd_network_get_ipv6_address_state(char **ret) {
+        return network_get_string("IPV6_ADDRESS_STATE", ret);
 }
 
-_public_ int sd_network_get_online_state(char **state) {
-        return network_get_string("ONLINE_STATE", state);
+int sd_network_get_online_state(char **ret) {
+        return network_get_string("ONLINE_STATE", ret);
 }
 
 static int network_get_strv(const char *key, char ***ret) {
@@ -68,16 +65,12 @@
         assert_return(ret, -EINVAL);
 
         r = parse_env_file(NULL, "/run/systemd/netif/state", key, &s);
-        if (r == -ENOENT)
-                return -ENODATA;
         if (r < 0)
                 return r;
-        if (isempty(s)) {
-                *ret = NULL;
-                return 0;
-        }
+        if (isempty(s))
+                return -ENODATA;
 
-        a = strv_split(s, " ");
+        a = strv_split(s, NULL);
         if (!a)
                 return -ENOMEM;
 
@@ -85,28 +78,27 @@
         r = (int) strv_length(a);
 
         *ret = TAKE_PTR(a);
-
         return r;
 }
 
-_public_ int sd_network_get_dns(char ***ret) {
+int sd_network_get_dns(char ***ret) {
         return network_get_strv("DNS", ret);
 }
 
-_public_ int sd_network_get_ntp(char ***ret) {
+int sd_network_get_ntp(char ***ret) {
         return network_get_strv("NTP", ret);
 }
 
-_public_ int sd_network_get_search_domains(char ***ret) {
+int sd_network_get_search_domains(char ***ret) {
         return network_get_strv("DOMAINS", ret);
 }
 
-_public_ int sd_network_get_route_domains(char ***ret) {
+int sd_network_get_route_domains(char ***ret) {
         return network_get_strv("ROUTE_DOMAINS", ret);
 }
 
 static int network_link_get_string(int ifindex, const char *field, char **ret) {
-        char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex) + 1];
+        char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex)];
         _cleanup_free_ char *s = NULL;
         int r;
 
@@ -116,20 +108,27 @@
         xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
 
         r = parse_env_file(NULL, path, field, &s);
-        if (r == -ENOENT)
-                return -ENODATA;
         if (r < 0)
                 return r;
         if (isempty(s))
                 return -ENODATA;
 
         *ret = TAKE_PTR(s);
-
         return 0;
 }
 
+static int network_link_get_boolean(int ifindex, const char *key) {
+        _cleanup_free_ char *s = NULL;
+        int r;
+
+        r = network_link_get_string(ifindex, key, &s);
+        if (r < 0)
+                return r;
+
+        return parse_boolean(s);
+}
+
 static int network_link_get_strv(int ifindex, const char *key, char ***ret) {
-        char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex) + 1];
         _cleanup_strv_free_ char **a = NULL;
         _cleanup_free_ char *s = NULL;
         int r;
@@ -137,18 +136,11 @@
         assert_return(ifindex > 0, -EINVAL);
         assert_return(ret, -EINVAL);
 
-        xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
-        r = parse_env_file(NULL, path, key, &s);
-        if (r == -ENOENT)
-                return -ENODATA;
+        r = network_link_get_string(ifindex, key, &s);
         if (r < 0)
                 return r;
-        if (isempty(s)) {
-                *ret = NULL;
-                return 0;
-        }
 
-        a = strv_split(s, " ");
+        a = strv_split(s, NULL);
         if (!a)
                 return -ENOMEM;
 
@@ -156,188 +148,129 @@
         r = (int) strv_length(a);
 
         *ret = TAKE_PTR(a);
-
         return r;
 }
 
-_public_ int sd_network_link_get_setup_state(int ifindex, char **state) {
-        return network_link_get_string(ifindex, "ADMIN_STATE", state);
+int sd_network_link_get_setup_state(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "ADMIN_STATE", ret);
 }
 
-_public_ int sd_network_link_get_network_file(int ifindex, char **filename) {
-        return network_link_get_string(ifindex, "NETWORK_FILE", filename);
+int sd_network_link_get_network_file(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "NETWORK_FILE", ret);
 }
 
-_public_ int sd_network_link_get_operational_state(int ifindex, char **state) {
-        return network_link_get_string(ifindex, "OPER_STATE", state);
-}
-
-_public_ int sd_network_link_get_required_family_for_online(int ifindex, char **state) {
-        _cleanup_free_ char *s = NULL;
-        int r;
-
-        assert_return(state, -EINVAL);
-
-        r = network_link_get_string(ifindex, "REQUIRED_FAMILY_FOR_ONLINE", &s);
-        if (r < 0) {
-                if (r != -ENODATA)
-                        return r;
-
-                s = strdup("any");
-                if (!s)
-                        return -ENOMEM;
-        }
-
-        *state = TAKE_PTR(s);
-        return 0;
-}
-
-_public_ int sd_network_link_get_carrier_state(int ifindex, char **state) {
-        return network_link_get_string(ifindex, "CARRIER_STATE", state);
-}
-
-_public_ int sd_network_link_get_address_state(int ifindex, char **state) {
-        return network_link_get_string(ifindex, "ADDRESS_STATE", state);
-}
-
-_public_ int sd_network_link_get_ipv4_address_state(int ifindex, char **state) {
-        return network_link_get_string(ifindex, "IPV4_ADDRESS_STATE", state);
-}
-
-_public_ int sd_network_link_get_ipv6_address_state(int ifindex, char **state) {
-        return network_link_get_string(ifindex, "IPV6_ADDRESS_STATE", state);
-}
-
-_public_ int sd_network_link_get_online_state(int ifindex, char **state) {
-        return network_link_get_string(ifindex, "ONLINE_STATE", state);
-}
-
-_public_ int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid) {
-        return network_link_get_string(ifindex, "DHCP6_CLIENT_IAID", iaid);
-}
-
-_public_ int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **duid) {
-        return network_link_get_string(ifindex, "DHCP6_CLIENT_DUID", duid);
-}
-
-_public_ int sd_network_link_get_required_for_online(int ifindex) {
-        _cleanup_free_ char *s = NULL;
-        int r;
-
-        r = network_link_get_string(ifindex, "REQUIRED_FOR_ONLINE", &s);
-        if (r < 0) {
-                /* Handle -ENODATA as RequiredForOnline=yes, for compatibility */
-                if (r == -ENODATA)
-                        return true;
-                return r;
-        }
-
-        return parse_boolean(s);
-}
-
-_public_ int sd_network_link_get_required_operstate_for_online(int ifindex, char **state) {
-        _cleanup_free_ char *s = NULL;
-        int r;
-
-        assert_return(state, -EINVAL);
-
-        r = network_link_get_string(ifindex, "REQUIRED_OPER_STATE_FOR_ONLINE", &s);
-        if (r < 0) {
-                if (r != -ENODATA)
-                        return r;
-
-                /* For compatibility, assuming degraded. */
-                s = strdup("degraded");
-                if (!s)
-                        return -ENOMEM;
-        }
-
-        *state = TAKE_PTR(s);
-        return 0;
-}
-
-_public_ int sd_network_link_get_activation_policy(int ifindex, char **policy) {
-        _cleanup_free_ char *s = NULL;
-        int r;
-
-        assert_return(policy, -EINVAL);
-
-        r = network_link_get_string(ifindex, "ACTIVATION_POLICY", &s);
-        if (r < 0) {
-                if (r != -ENODATA)
-                        return r;
-
-                /* For compatibility, assuming up. */
-                s = strdup("up");
-                if (!s)
-                        return -ENOMEM;
-        }
-
-        *policy = TAKE_PTR(s);
-        return 0;
-}
-
-_public_ int sd_network_link_get_llmnr(int ifindex, char **llmnr) {
-        return network_link_get_string(ifindex, "LLMNR", llmnr);
-}
-
-_public_ int sd_network_link_get_mdns(int ifindex, char **mdns) {
-        return network_link_get_string(ifindex, "MDNS", mdns);
-}
-
-_public_ int sd_network_link_get_dns_over_tls(int ifindex, char **dns_over_tls) {
-        return network_link_get_string(ifindex, "DNS_OVER_TLS", dns_over_tls);
-}
-
-_public_ int sd_network_link_get_dnssec(int ifindex, char **dnssec) {
-        return network_link_get_string(ifindex, "DNSSEC", dnssec);
-}
-
-_public_ int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***nta) {
-        return network_link_get_strv(ifindex, "DNSSEC_NTA", nta);
-}
-
-_public_ int sd_network_link_get_dns(int ifindex, char ***ret) {
-        return network_link_get_strv(ifindex, "DNS", ret);
-}
-
-_public_ int sd_network_link_get_ntp(int ifindex, char ***ret) {
-        return network_link_get_strv(ifindex, "NTP", ret);
-}
-
-_public_ int sd_network_link_get_sip(int ifindex, char ***ret) {
-        return network_link_get_strv(ifindex, "SIP", ret);
-}
-
-_public_ int sd_network_link_get_search_domains(int ifindex, char ***ret) {
-        return network_link_get_strv(ifindex, "DOMAINS", ret);
-}
-
-_public_ int sd_network_link_get_route_domains(int ifindex, char ***ret) {
-        return network_link_get_strv(ifindex, "ROUTE_DOMAINS", ret);
-}
-
-_public_ int sd_network_link_get_dns_default_route(int ifindex) {
-        char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex) + 1];
-        _cleanup_free_ char *s = NULL;
+int sd_network_link_get_network_file_dropins(int ifindex, char ***ret) {
+        _cleanup_free_ char **sv = NULL, *joined = NULL;
         int r;
 
         assert_return(ifindex > 0, -EINVAL);
+        assert_return(ret, -EINVAL);
 
-        xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
-
-        r = parse_env_file(NULL, path, "DNS_DEFAULT_ROUTE", &s);
-        if (r == -ENOENT)
-                return -ENODATA;
+        r = network_link_get_string(ifindex, "NETWORK_FILE_DROPINS", &joined);
         if (r < 0)
                 return r;
-        if (isempty(s))
-                return -ENODATA;
-        return parse_boolean(s);
+
+        r = strv_split_full(&sv, joined, ":", EXTRACT_CUNESCAPE);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(sv);
+        return 0;
+}
+
+int sd_network_link_get_operational_state(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "OPER_STATE", ret);
+}
+
+int sd_network_link_get_required_family_for_online(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "REQUIRED_FAMILY_FOR_ONLINE", ret);
+}
+
+int sd_network_link_get_carrier_state(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "CARRIER_STATE", ret);
+}
+
+int sd_network_link_get_address_state(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "ADDRESS_STATE", ret);
+}
+
+int sd_network_link_get_ipv4_address_state(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "IPV4_ADDRESS_STATE", ret);
+}
+
+int sd_network_link_get_ipv6_address_state(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "IPV6_ADDRESS_STATE", ret);
+}
+
+int sd_network_link_get_online_state(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "ONLINE_STATE", ret);
+}
+
+int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "DHCP6_CLIENT_IAID", ret);
+}
+
+int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "DHCP6_CLIENT_DUID", ret);
+}
+
+int sd_network_link_get_required_for_online(int ifindex) {
+        return network_link_get_boolean(ifindex, "REQUIRED_FOR_ONLINE");
+}
+
+int sd_network_link_get_required_operstate_for_online(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "REQUIRED_OPER_STATE_FOR_ONLINE", ret);
+}
+
+int sd_network_link_get_activation_policy(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "ACTIVATION_POLICY", ret);
+}
+
+int sd_network_link_get_llmnr(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "LLMNR", ret);
+}
+
+int sd_network_link_get_mdns(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "MDNS", ret);
+}
+
+int sd_network_link_get_dns_over_tls(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "DNS_OVER_TLS", ret);
+}
+
+int sd_network_link_get_dnssec(int ifindex, char **ret) {
+        return network_link_get_string(ifindex, "DNSSEC", ret);
+}
+
+int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***ret) {
+        return network_link_get_strv(ifindex, "DNSSEC_NTA", ret);
+}
+
+int sd_network_link_get_dns(int ifindex, char ***ret) {
+        return network_link_get_strv(ifindex, "DNS", ret);
+}
+
+int sd_network_link_get_ntp(int ifindex, char ***ret) {
+        return network_link_get_strv(ifindex, "NTP", ret);
+}
+
+int sd_network_link_get_sip(int ifindex, char ***ret) {
+        return network_link_get_strv(ifindex, "SIP", ret);
+}
+
+int sd_network_link_get_search_domains(int ifindex, char ***ret) {
+        return network_link_get_strv(ifindex, "DOMAINS", ret);
+}
+
+int sd_network_link_get_route_domains(int ifindex, char ***ret) {
+        return network_link_get_strv(ifindex, "ROUTE_DOMAINS", ret);
+}
+
+int sd_network_link_get_dns_default_route(int ifindex) {
+        return network_link_get_boolean(ifindex, "DNS_DEFAULT_ROUTE");
 }
 
 static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) {
-        char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex) + 1];
         _cleanup_free_ int *ifis = NULL;
         _cleanup_free_ char *s = NULL;
         size_t c = 0;
@@ -346,10 +279,7 @@
         assert_return(ifindex > 0, -EINVAL);
         assert_return(ret, -EINVAL);
 
-        xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
-        r = parse_env_file(NULL, path, key, &s);
-        if (r == -ENOENT)
-                return -ENODATA;
+        r = network_link_get_string(ifindex, key, &s);
         if (r < 0)
                 return r;
 
@@ -374,18 +304,34 @@
                 ifis[c] = 0; /* Let's add a 0 ifindex to the end, to be nice */
 
         *ret = TAKE_PTR(ifis);
-
         return c;
 }
 
-_public_ int sd_network_link_get_carrier_bound_to(int ifindex, int **ret) {
+int sd_network_link_get_carrier_bound_to(int ifindex, int **ret) {
         return network_link_get_ifindexes(ifindex, "CARRIER_BOUND_TO", ret);
 }
 
-_public_ int sd_network_link_get_carrier_bound_by(int ifindex, int **ret) {
+int sd_network_link_get_carrier_bound_by(int ifindex, int **ret) {
         return network_link_get_ifindexes(ifindex, "CARRIER_BOUND_BY", ret);
 }
 
+int sd_network_link_get_stat(int ifindex, struct stat *ret) {
+        char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex)];
+        struct stat st;
+
+        assert_return(ifindex > 0, -EINVAL);
+
+        xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
+
+        if (stat(path, &st) < 0)
+                return -errno;
+
+        if (ret)
+                *ret = st;
+
+        return 0;
+}
+
 static int MONITOR_TO_FD(sd_network_monitor *m) {
         return (int) (unsigned long) m - 1;
 }
@@ -395,29 +341,29 @@
 }
 
 static int monitor_add_inotify_watch(int fd) {
-        int k;
+        int wd;
 
-        k = inotify_add_watch(fd, "/run/systemd/netif/links/", IN_MOVED_TO|IN_DELETE);
-        if (k >= 0)
-                return 0;
+        wd = inotify_add_watch(fd, "/run/systemd/netif/links/", IN_MOVED_TO|IN_DELETE);
+        if (wd >= 0)
+                return wd;
         else if (errno != ENOENT)
                 return -errno;
 
-        k = inotify_add_watch(fd, "/run/systemd/netif/", IN_CREATE|IN_ISDIR);
-        if (k >= 0)
-                return 0;
+        wd = inotify_add_watch(fd, "/run/systemd/netif/", IN_CREATE|IN_ISDIR);
+        if (wd >= 0)
+                return wd;
         else if (errno != ENOENT)
                 return -errno;
 
-        k = inotify_add_watch(fd, "/run/systemd/", IN_CREATE|IN_ISDIR);
-        if (k < 0)
+        wd = inotify_add_watch(fd, "/run/systemd/", IN_CREATE|IN_ISDIR);
+        if (wd < 0)
                 return -errno;
 
-        return 0;
+        return wd;
 }
 
-_public_ int sd_network_monitor_new(sd_network_monitor **m, const char *category) {
-        _cleanup_close_ int fd = -1;
+int sd_network_monitor_new(sd_network_monitor **m, const char *category) {
+        _cleanup_close_ int fd = -EBADF;
         int k;
         bool good = false;
 
@@ -442,18 +388,17 @@
         return 0;
 }
 
-_public_ sd_network_monitor* sd_network_monitor_unref(sd_network_monitor *m) {
+sd_network_monitor* sd_network_monitor_unref(sd_network_monitor *m) {
         if (m)
-                close_nointr(MONITOR_TO_FD(m));
+                (void) close_nointr(MONITOR_TO_FD(m));
 
         return NULL;
 }
 
-_public_ int sd_network_monitor_flush(sd_network_monitor *m) {
+int sd_network_monitor_flush(sd_network_monitor *m) {
         union inotify_event_buffer buffer;
-        struct inotify_event *e;
         ssize_t l;
-        int fd, k;
+        int fd;
 
         assert_return(m, -EINVAL);
 
@@ -461,7 +406,7 @@
 
         l = read(fd, &buffer, sizeof(buffer));
         if (l < 0) {
-                if (IN_SET(errno, EAGAIN, EINTR))
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
                 return -errno;
@@ -469,28 +414,29 @@
 
         FOREACH_INOTIFY_EVENT(e, buffer, l) {
                 if (e->mask & IN_ISDIR) {
-                        k = monitor_add_inotify_watch(fd);
-                        if (k < 0)
-                                return k;
+                        int wd;
 
-                        k = inotify_rm_watch(fd, e->wd);
-                        if (k < 0)
-                                return -errno;
+                        wd = monitor_add_inotify_watch(fd);
+                        if (wd < 0)
+                                return wd;
+
+                        if (wd != e->wd) {
+                                if (inotify_rm_watch(fd, e->wd) < 0)
+                                        return -errno;
+                        }
                 }
         }
 
         return 0;
 }
 
-_public_ int sd_network_monitor_get_fd(sd_network_monitor *m) {
-
+int sd_network_monitor_get_fd(sd_network_monitor *m) {
         assert_return(m, -EINVAL);
 
         return MONITOR_TO_FD(m);
 }
 
-_public_ int sd_network_monitor_get_events(sd_network_monitor *m) {
-
+int sd_network_monitor_get_events(sd_network_monitor *m) {
         assert_return(m, -EINVAL);
 
         /* For now we will only return POLLIN here, since we don't
@@ -500,14 +446,13 @@
         return POLLIN;
 }
 
-_public_ int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *timeout_usec) {
-
+int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *ret_usec) {
         assert_return(m, -EINVAL);
-        assert_return(timeout_usec, -EINVAL);
+        assert_return(ret_usec, -EINVAL);
 
         /* For now we will only return UINT64_MAX, since we don't
          * need any timeout. However, let's have this API to keep our
          * options open should we later on need it. */
-        *timeout_usec = UINT64_MAX;
+        *ret_usec = UINT64_MAX;
         return 0;
 }
diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c
index ff1e0d5..1af3a36 100644
--- a/src/libsystemd/sd-path/sd-path.c
+++ b/src/libsystemd/sd-path/sd-path.c
@@ -7,12 +7,12 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "nulstr-util.h"
 #include "path-lookup.h"
 #include "path-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 
 static int from_environment(const char *envname, const char *fallback, const char **ret) {
         assert(ret);
@@ -380,6 +380,14 @@
         case SD_PATH_CATALOG:
                 *ret = "/usr/lib/systemd/catalog";
                 return 0;
+
+        case SD_PATH_SYSTEMD_SYSTEM_ENVIRONMENT_GENERATOR:
+                *ret = SYSTEM_ENV_GENERATOR_DIR;
+                return 0;
+
+        case SD_PATH_SYSTEMD_USER_ENVIRONMENT_GENERATOR:
+                *ret = USER_ENV_GENERATOR_DIR;
+                return 0;
         }
 
         return -EOPNOTSUPP;
@@ -516,7 +524,7 @@
 
         assert(list);
 
-        switch(type) {
+        switch (type) {
 
         case SD_PATH_SEARCH_BINARIES:
                 return search_from_environment(list,
@@ -601,8 +609,8 @@
         case SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT:
         case SD_PATH_SYSTEMD_SEARCH_USER_UNIT: {
                 _cleanup_(lookup_paths_free) LookupPaths lp = {};
-                const UnitFileScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT ?
-                                                    UNIT_FILE_SYSTEM : UNIT_FILE_USER;
+                const LookupScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT ?
+                                                    LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER;
 
                 r = lookup_paths_init(&lp, scope, 0, NULL);
                 if (r < 0)
@@ -615,8 +623,8 @@
         case SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR:
         case SD_PATH_SYSTEMD_SEARCH_USER_GENERATOR: {
                 char **t;
-                const UnitFileScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR ?
-                                                    UNIT_FILE_SYSTEM : UNIT_FILE_USER;
+                const LookupScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR ?
+                                                    LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER;
 
                 t = generator_binary_paths(scope);
                 if (!t)
@@ -626,6 +634,18 @@
                 return 0;
         }
 
+        case SD_PATH_SYSTEMD_SEARCH_SYSTEM_ENVIRONMENT_GENERATOR:
+        case SD_PATH_SYSTEMD_SEARCH_USER_ENVIRONMENT_GENERATOR: {
+                char **t;
+
+                t = env_generator_binary_paths(type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_ENVIRONMENT_GENERATOR);
+                if (!t)
+                        return -ENOMEM;
+
+                *list = t;
+                return 0;
+        }
+
         case SD_PATH_SYSTEMD_SEARCH_NETWORK:
                 return strv_from_nulstr(list, NETWORK_DIRS_NULSTR);
 
@@ -669,7 +689,7 @@
         if (!n)
                 return -ENOMEM;
 
-        char **i, **j = n;
+        char **j = n;
         STRV_FOREACH(i, l) {
                 *j = path_join(*i, suffix);
                 if (!*j)
diff --git a/src/libsystemd/sd-resolve/sd-resolve.c b/src/libsystemd/sd-resolve/sd-resolve.c
index 073b658..f1c7e0a 100644
--- a/src/libsystemd/sd-resolve/sd-resolve.c
+++ b/src/libsystemd/sd-resolve/sd-resolve.c
@@ -22,6 +22,7 @@
 #include "list.h"
 #include "memory-util.h"
 #include "missing_syscall.h"
+#include "missing_threads.h"
 #include "process-util.h"
 #include "resolve-private.h"
 #include "socket-util.h"
@@ -397,7 +398,7 @@
                  return -ECONNRESET;
 
         default:
-                assert_not_reached("Unknown request");
+                assert_not_reached();
         }
 
         return 0;
@@ -418,7 +419,7 @@
 
                 length = recv(resolve->fds[REQUEST_RECV_FD], &buf, sizeof buf, 0);
                 if (length < 0) {
-                        if (errno == EINTR)
+                        if (ERRNO_IS_TRANSIENT(errno))
                                 continue;
 
                         break;
@@ -494,7 +495,7 @@
         resolve->original_pid = getpid_cached();
 
         for (i = 0; i < _FD_MAX; i++)
-                resolve->fds[i] = -1;
+                resolve->fds[i] = -EBADF;
 
         if (socketpair(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0, resolve->fds + REQUEST_RECV_FD) < 0)
                 return -errno;
@@ -506,9 +507,9 @@
                 resolve->fds[i] = fd_move_above_stdio(resolve->fds[i]);
 
         (void) fd_inc_sndbuf(resolve->fds[REQUEST_SEND_FD], QUERIES_MAX * BUFSIZE);
-        (void) fd_inc_rcvbuf(resolve->fds[REQUEST_RECV_FD], QUERIES_MAX * BUFSIZE);
+        (void) fd_increase_rxbuf(resolve->fds[REQUEST_RECV_FD], QUERIES_MAX * BUFSIZE);
         (void) fd_inc_sndbuf(resolve->fds[RESPONSE_SEND_FD], QUERIES_MAX * BUFSIZE);
-        (void) fd_inc_rcvbuf(resolve->fds[RESPONSE_RECV_FD], QUERIES_MAX * BUFSIZE);
+        (void) fd_increase_rxbuf(resolve->fds[RESPONSE_RECV_FD], QUERIES_MAX * BUFSIZE);
 
         (void) fd_nonblock(resolve->fds[RESPONSE_RECV_FD], true);
 
@@ -661,7 +662,7 @@
                 break;
 
         default:
-                assert_not_reached("Cannot complete unknown query type");
+                assert_not_reached();
         }
 
         resolve->current = NULL;
@@ -847,7 +848,7 @@
 
         l = recv(resolve->fds[RESPONSE_RECV_FD], &buf, sizeof buf, 0);
         if (l < 0) {
-                if (errno == EAGAIN)
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
                 return -errno;
@@ -1236,11 +1237,9 @@
 }
 
 static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        sd_resolve *resolve = userdata;
+        sd_resolve *resolve = ASSERT_PTR(userdata);
         int r;
 
-        assert(resolve);
-
         r = sd_resolve_process(resolve);
         if (r < 0)
                 return r;
diff --git a/src/libsystemd/sd-resolve/test-resolve.c b/src/libsystemd/sd-resolve/test-resolve.c
index b973dfd..9c17a36 100644
--- a/src/libsystemd/sd-resolve/test-resolve.c
+++ b/src/libsystemd/sd-resolve/test-resolve.c
@@ -2,6 +2,7 @@
 
 #include <arpa/inet.h>
 #include <errno.h>
+#include <net/if_arp.h>
 #include <netinet/in.h>
 #include <resolv.h>
 #include <stdio.h>
@@ -58,12 +59,12 @@
         struct addrinfo hints = {
                 .ai_family = AF_UNSPEC,
                 .ai_socktype = SOCK_STREAM,
-                .ai_flags = AI_CANONNAME
+                .ai_flags = AI_CANONNAME,
         };
 
-        struct sockaddr_in sa = {
-                .sin_family = AF_INET,
-                .sin_port = htobe16(80)
+        union sockaddr_union sa = {
+                .in.sin_family = AF_INET,
+                .in.sin_port = htobe16(80),
         };
 
         assert_se(sd_resolve_default(&resolve) >= 0);
@@ -79,8 +80,8 @@
                 log_error_errno(r, "sd_resolve_getaddrinfo(): %m");
 
         /* Make an address -> name query */
-        sa.sin_addr.s_addr = inet_addr(argc >= 3 ? argv[2] : "193.99.144.71");
-        r = sd_resolve_getnameinfo(resolve, &q2, (struct sockaddr*) &sa, sizeof(sa), 0, SD_RESOLVE_GET_BOTH, getnameinfo_handler, NULL);
+        sa.in.sin_addr.s_addr = inet_addr(argc >= 3 ? argv[2] : "193.99.144.71");
+        r = sd_resolve_getnameinfo(resolve, &q2, &sa.sa, SOCKADDR_LEN(sa), 0, SD_RESOLVE_GET_BOTH, getnameinfo_handler, NULL);
         if (r < 0)
                 log_error_errno(r, "sd_resolve_getnameinfo(): %m");
 
@@ -99,7 +100,7 @@
                 }
                 if (r < 0) {
                         log_error_errno(r, "sd_resolve_wait(): %m");
-                        assert_not_reached("sd_resolve_wait() failed");
+                        assert_not_reached();
                 }
         }
 
diff --git a/src/libsystemd/sd-utf8/sd-utf8.c b/src/libsystemd/sd-utf8/sd-utf8.c
deleted file mode 100644
index 82fa125..0000000
--- a/src/libsystemd/sd-utf8/sd-utf8.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "sd-utf8.h"
-
-#include "utf8.h"
-#include "util.h"
-
-_public_ const char *sd_utf8_is_valid(const char *s) {
-        assert_return(s, NULL);
-
-        return utf8_is_valid(s);
-}
-
-_public_ const char *sd_ascii_is_valid(const char *s) {
-        assert_return(s, NULL);
-
-        return ascii_is_valid(s);
-}
diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
index 2dc695b..d71a31c 100644
--- a/src/libudev/libudev-enumerate.c
+++ b/src/libudev/libudev-enumerate.c
@@ -365,7 +365,7 @@
 
         assert_return(udev_enumerate, -EINVAL);
 
-        r = device_enumerator_add_match_is_initialized(udev_enumerate->enumerator);
+        r = device_enumerator_add_match_is_initialized(udev_enumerate->enumerator, MATCH_INITIALIZED_COMPAT);
         if (r < 0)
                 return r;
 
diff --git a/src/libudev/libudev-list.c b/src/libudev/libudev-list.c
index 69efc10..0adc1d5 100644
--- a/src/libudev/libudev-list.c
+++ b/src/libudev/libudev-list.c
@@ -110,8 +110,6 @@
 }
 
 void udev_list_cleanup(struct udev_list *list) {
-        struct udev_list_entry *i, *n;
-
         if (!list)
                 return;
 
@@ -119,7 +117,7 @@
                 list->uptodate = false;
                 hashmap_clear_with_destructor(list->unique_entries, udev_list_entry_free);
         } else
-                LIST_FOREACH_SAFE(entries, i, n, list->entries)
+                LIST_FOREACH(entries, i, list->entries)
                         udev_list_entry_free(i);
 }
 
@@ -154,7 +152,6 @@
                 else {
                         _cleanup_free_ struct udev_list_entry **buf = NULL;
                         struct udev_list_entry *entry, **p;
-                        size_t j;
 
                         buf = new(struct udev_list_entry *, n);
                         if (!buf)
@@ -166,7 +163,7 @@
 
                         typesafe_qsort(buf, n, udev_list_entry_compare_func);
 
-                        for (j = n; j > 0; j--)
+                        for (size_t j = n; j > 0; j--)
                                 LIST_PREPEND(entries, list->entries, buf[j-1]);
                 }
 
diff --git a/src/libudev/libudev-queue.c b/src/libudev/libudev-queue.c
index 7ca17fa..7c5bb55 100644
--- a/src/libudev/libudev-queue.c
+++ b/src/libudev/libudev-queue.c
@@ -50,7 +50,7 @@
         *udev_queue = (struct udev_queue) {
                 .udev = udev,
                 .n_ref = 1,
-                .fd = -1,
+                .fd = -EBADF,
         };
 
         return udev_queue;
diff --git a/src/libudev/libudev.pc.in b/src/libudev/libudev.pc.in
index 89028aa..1d6487f 100644
--- a/src/libudev/libudev.pc.in
+++ b/src/libudev/libudev.pc.in
@@ -16,4 +16,5 @@
 Description: Library to access udev device information
 Version: {{PROJECT_VERSION}}
 Libs: -L${libdir} -ludev
+Libs.private: -lrt -pthread
 Cflags: -I${includedir}
diff --git a/src/libudev/meson.build b/src/libudev/meson.build
index 61e7cc2..35c024a 100644
--- a/src/libudev/meson.build
+++ b/src/libudev/meson.build
@@ -2,56 +2,48 @@
 
 libudev_sources = files(
         'libudev-device.c',
-        'libudev-device-internal.h',
         'libudev-enumerate.c',
         'libudev-hwdb.c',
         'libudev-list.c',
-        'libudev-list-internal.h',
         'libudev-monitor.c',
         'libudev-queue.c',
         'libudev-util.c',
-        'libudev-util.h',
         'libudev.c',
-        'libudev.h')
+)
 
 ############################################################
 
 libudev_includes = [includes, include_directories('.')]
 
 libudev_sym = files('libudev.sym')
-libudev_sym_path = join_paths(meson.current_source_dir(), 'libudev.sym')
+libudev_sym_path = meson.current_source_dir() / 'libudev.sym'
 
 install_headers('libudev.h')
-libudev_h_path = join_paths(meson.current_source_dir(), 'libudev.h')
+libudev_h_path = meson.current_source_dir() / 'libudev.h'
 
 libudev_basic = static_library(
         'udev-basic',
         libudev_sources,
         include_directories : includes,
-        c_args : ['-fvisibility=default'])
-
-libudev_static = static_library(
-        'udev_static',
-        include_directories : includes,
-        link_with : udev_link_with,
-        link_whole : libudev_basic)
+        c_args : ['-fvisibility=default'],
+        build_by_default : false)
 
 static_libudev = get_option('static-libudev')
 static_libudev_pic = static_libudev == 'true' or static_libudev == 'pic'
 
-custom_target(
+libudev_pc = custom_target(
         'libudev.pc',
         input : 'libudev.pc.in',
         output : 'libudev.pc',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : pkgconfiglibdir != 'no',
+        install_tag : 'devel',
         install_dir : pkgconfiglibdir)
 
 ############################################################
 
 tests += [
-        [['src/libudev/test-libudev.c'],
+        [files('test-libudev.c'),
          [libshared,
-          libudev_static]],
+          libudev_basic]],
 ]
diff --git a/src/libudev/test-libudev.c b/src/libudev/test-libudev.c
index a751056..94d34b1 100644
--- a/src/libudev/test-libudev.c
+++ b/src/libudev/test-libudev.c
@@ -6,6 +6,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "devnum-util.h"
 #include "fd-util.h"
 #include "libudev-list-internal.h"
 #include "libudev-util.h"
@@ -128,7 +129,7 @@
         dev_t devnum = makedev(1, 3);
         _cleanup_(udev_device_unrefp) struct udev_device *device;
 
-        log_info("/* %s, device %d:%d */", __func__, major(devnum), minor(devnum));
+        log_info("/* %s, device " DEVNUM_FORMAT_STR " */", __func__, DEVNUM_FORMAT_VAL(devnum));
 
         device = udev_device_new_from_devnum(udev, 'c', devnum);
         if (device)
@@ -445,7 +446,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option code.");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
index 46708a7..fd90f3c 100644
--- a/src/locale/kbd-model-map
+++ b/src/locale/kbd-model-map
@@ -33,6 +33,7 @@
 bg_pho-utf8		bg,us	pc105		,phonetic	terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
 it-ibm			it	pc105		-		terminate:ctrl_alt_bksp
 cz-us-qwertz		cz,us	pc105		-		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+cz-qwerty		cz,us	pc105		qwerty,		terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
 br-abnt2		br	abnt2		-		terminate:ctrl_alt_bksp
 ro			ro	pc105		-		terminate:ctrl_alt_bksp
 us-acentos		us	pc105		intl		terminate:ctrl_alt_bksp
diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c
deleted file mode 100644
index d2f0566..0000000
--- a/src/locale/keymap-util.c
+++ /dev/null
@@ -1,947 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "bus-polkit.h"
-#include "copy.h"
-#include "env-file-label.h"
-#include "env-file.h"
-#include "env-util.h"
-#include "fd-util.h"
-#include "fileio-label.h"
-#include "fileio.h"
-#include "fs-util.h"
-#include "kbd-util.h"
-#include "keymap-util.h"
-#include "locale-util.h"
-#include "macro.h"
-#include "mkdir.h"
-#include "nulstr-util.h"
-#include "process-util.h"
-#include "string-util.h"
-#include "strv.h"
-#include "tmpfile-util.h"
-
-static bool startswith_comma(const char *s, const char *prefix) {
-        s = startswith(s, prefix);
-        if (!s)
-                return false;
-
-        return IN_SET(*s, ',', '\0');
-}
-
-static const char* systemd_kbd_model_map(void) {
-        const char* s;
-
-        s = getenv("SYSTEMD_KBD_MODEL_MAP");
-        if (s)
-                return s;
-
-        return SYSTEMD_KBD_MODEL_MAP;
-}
-
-static const char* systemd_language_fallback_map(void) {
-        const char* s;
-
-        s = getenv("SYSTEMD_LANGUAGE_FALLBACK_MAP");
-        if (s)
-                return s;
-
-        return SYSTEMD_LANGUAGE_FALLBACK_MAP;
-}
-
-static void context_free_x11(Context *c) {
-        c->x11_layout = mfree(c->x11_layout);
-        c->x11_options = mfree(c->x11_options);
-        c->x11_model = mfree(c->x11_model);
-        c->x11_variant = mfree(c->x11_variant);
-}
-
-static void context_free_vconsole(Context *c) {
-        c->vc_keymap = mfree(c->vc_keymap);
-        c->vc_keymap_toggle = mfree(c->vc_keymap_toggle);
-}
-
-static void context_free_locale(Context *c) {
-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
-                c->locale[p] = mfree(c->locale[p]);
-}
-
-void context_clear(Context *c) {
-        context_free_locale(c);
-        context_free_x11(c);
-        context_free_vconsole(c);
-
-        sd_bus_message_unref(c->locale_cache);
-        sd_bus_message_unref(c->x11_cache);
-        sd_bus_message_unref(c->vc_cache);
-
-        bus_verify_polkit_async_registry_free(c->polkit_registry);
-};
-
-void locale_simplify(char *locale[_VARIABLE_LC_MAX]) {
-        for (LocaleVariable p = VARIABLE_LANG+1; p < _VARIABLE_LC_MAX; p++)
-                if (isempty(locale[p]) || streq_ptr(locale[VARIABLE_LANG], locale[p]))
-                        locale[p] = mfree(locale[p]);
-}
-
-int locale_read_data(Context *c, sd_bus_message *m) {
-        struct stat st;
-        int r;
-
-        /* Do not try to re-read the file within single bus operation. */
-        if (m) {
-                if (m == c->locale_cache)
-                        return 0;
-
-                sd_bus_message_unref(c->locale_cache);
-                c->locale_cache = sd_bus_message_ref(m);
-        }
-
-        r = stat("/etc/locale.conf", &st);
-        if (r < 0 && errno != ENOENT)
-                return -errno;
-
-        if (r >= 0) {
-                usec_t t;
-
-                /* If mtime is not changed, then we do not need to re-read the file. */
-                t = timespec_load(&st.st_mtim);
-                if (c->locale_mtime != USEC_INFINITY && t == c->locale_mtime)
-                        return 0;
-
-                c->locale_mtime = t;
-                context_free_locale(c);
-
-                r = parse_env_file(NULL, "/etc/locale.conf",
-                                   "LANG",              &c->locale[VARIABLE_LANG],
-                                   "LANGUAGE",          &c->locale[VARIABLE_LANGUAGE],
-                                   "LC_CTYPE",          &c->locale[VARIABLE_LC_CTYPE],
-                                   "LC_NUMERIC",        &c->locale[VARIABLE_LC_NUMERIC],
-                                   "LC_TIME",           &c->locale[VARIABLE_LC_TIME],
-                                   "LC_COLLATE",        &c->locale[VARIABLE_LC_COLLATE],
-                                   "LC_MONETARY",       &c->locale[VARIABLE_LC_MONETARY],
-                                   "LC_MESSAGES",       &c->locale[VARIABLE_LC_MESSAGES],
-                                   "LC_PAPER",          &c->locale[VARIABLE_LC_PAPER],
-                                   "LC_NAME",           &c->locale[VARIABLE_LC_NAME],
-                                   "LC_ADDRESS",        &c->locale[VARIABLE_LC_ADDRESS],
-                                   "LC_TELEPHONE",      &c->locale[VARIABLE_LC_TELEPHONE],
-                                   "LC_MEASUREMENT",    &c->locale[VARIABLE_LC_MEASUREMENT],
-                                   "LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]);
-                if (r < 0)
-                        return r;
-        } else {
-                c->locale_mtime = USEC_INFINITY;
-                context_free_locale(c);
-
-                /* Fill in what we got passed from systemd. */
-                for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
-                        const char *name;
-
-                        name = locale_variable_to_string(p);
-                        assert(name);
-
-                        r = free_and_strdup(&c->locale[p], empty_to_null(getenv(name)));
-                        if (r < 0)
-                                return r;
-                }
-        }
-
-        locale_simplify(c->locale);
-        return 0;
-}
-
-int vconsole_read_data(Context *c, sd_bus_message *m) {
-        struct stat st;
-        usec_t t;
-        int r;
-
-        /* Do not try to re-read the file within single bus operation. */
-        if (m) {
-                if (m == c->vc_cache)
-                        return 0;
-
-                sd_bus_message_unref(c->vc_cache);
-                c->vc_cache = sd_bus_message_ref(m);
-        }
-
-        if (stat("/etc/vconsole.conf", &st) < 0) {
-                if (errno != ENOENT)
-                        return -errno;
-
-                c->vc_mtime = USEC_INFINITY;
-                context_free_vconsole(c);
-                return 0;
-        }
-
-        /* If mtime is not changed, then we do not need to re-read */
-        t = timespec_load(&st.st_mtim);
-        if (c->vc_mtime != USEC_INFINITY && t == c->vc_mtime)
-                return 0;
-
-        c->vc_mtime = t;
-        context_free_vconsole(c);
-
-        r = parse_env_file(NULL, "/etc/vconsole.conf",
-                           "KEYMAP",        &c->vc_keymap,
-                           "KEYMAP_TOGGLE", &c->vc_keymap_toggle);
-        if (r < 0)
-                return r;
-
-        return 0;
-}
-
-int x11_read_data(Context *c, sd_bus_message *m) {
-        _cleanup_fclose_ FILE *f = NULL;
-        bool in_section = false;
-        struct stat st;
-        usec_t t;
-        int r;
-
-        /* Do not try to re-read the file within single bus operation. */
-        if (m) {
-                if (m == c->x11_cache)
-                        return 0;
-
-                sd_bus_message_unref(c->x11_cache);
-                c->x11_cache = sd_bus_message_ref(m);
-        }
-
-        if (stat("/etc/X11/xorg.conf.d/00-keyboard.conf", &st) < 0) {
-                if (errno != ENOENT)
-                        return -errno;
-
-                c->x11_mtime = USEC_INFINITY;
-                context_free_x11(c);
-                return 0;
-        }
-
-        /* If mtime is not changed, then we do not need to re-read */
-        t = timespec_load(&st.st_mtim);
-        if (c->x11_mtime != USEC_INFINITY && t == c->x11_mtime)
-                return 0;
-
-        c->x11_mtime = t;
-        context_free_x11(c);
-
-        f = fopen("/etc/X11/xorg.conf.d/00-keyboard.conf", "re");
-        if (!f)
-                return -errno;
-
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
-                char *l;
-
-                r = read_line(f, LONG_LINE_MAX, &line);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        break;
-
-                l = strstrip(line);
-                if (IN_SET(l[0], 0, '#'))
-                        continue;
-
-                if (in_section && first_word(l, "Option")) {
-                        _cleanup_strv_free_ char **a = NULL;
-
-                        r = strv_split_full(&a, l, WHITESPACE, EXTRACT_UNQUOTE);
-                        if (r < 0)
-                                return r;
-
-                        if (strv_length(a) == 3) {
-                                char **p = NULL;
-
-                                if (streq(a[1], "XkbLayout"))
-                                        p = &c->x11_layout;
-                                else if (streq(a[1], "XkbModel"))
-                                        p = &c->x11_model;
-                                else if (streq(a[1], "XkbVariant"))
-                                        p = &c->x11_variant;
-                                else if (streq(a[1], "XkbOptions"))
-                                        p = &c->x11_options;
-
-                                if (p)
-                                        free_and_replace(*p, a[2]);
-                        }
-
-                } else if (!in_section && first_word(l, "Section")) {
-                        _cleanup_strv_free_ char **a = NULL;
-
-                        r = strv_split_full(&a, l, WHITESPACE, EXTRACT_UNQUOTE);
-                        if (r < 0)
-                                return -ENOMEM;
-
-                        if (strv_length(a) == 2 && streq(a[1], "InputClass"))
-                                in_section = true;
-
-                } else if (in_section && first_word(l, "EndSection"))
-                        in_section = false;
-        }
-
-        return 0;
-}
-
-int locale_write_data(Context *c, char ***settings) {
-        _cleanup_strv_free_ char **l = NULL;
-        struct stat st;
-        int r;
-
-        /* Set values will be returned as strv in *settings on success. */
-
-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
-                if (!isempty(c->locale[p])) {
-                        r = strv_env_assign(&l, locale_variable_to_string(p), c->locale[p]);
-                        if (r < 0)
-                                return r;
-                }
-
-        if (strv_isempty(l)) {
-                if (unlink("/etc/locale.conf") < 0)
-                        return errno == ENOENT ? 0 : -errno;
-
-                c->locale_mtime = USEC_INFINITY;
-                return 0;
-        }
-
-        r = write_env_file_label("/etc/locale.conf", l);
-        if (r < 0)
-                return r;
-
-        *settings = TAKE_PTR(l);
-
-        if (stat("/etc/locale.conf", &st) >= 0)
-                c->locale_mtime = timespec_load(&st.st_mtim);
-
-        return 0;
-}
-
-int vconsole_write_data(Context *c) {
-        _cleanup_strv_free_ char **l = NULL;
-        struct stat st;
-        int r;
-
-        r = load_env_file(NULL, "/etc/vconsole.conf", &l);
-        if (r < 0 && r != -ENOENT)
-                return r;
-
-        r = strv_env_assign(&l, "KEYMAP", empty_to_null(c->vc_keymap));
-        if (r < 0)
-                return r;
-
-        r = strv_env_assign(&l, "KEYMAP_TOGGLE", empty_to_null(c->vc_keymap_toggle));
-        if (r < 0)
-                return r;
-
-        if (strv_isempty(l)) {
-                if (unlink("/etc/vconsole.conf") < 0)
-                        return errno == ENOENT ? 0 : -errno;
-
-                c->vc_mtime = USEC_INFINITY;
-                return 0;
-        }
-
-        r = write_env_file_label("/etc/vconsole.conf", l);
-        if (r < 0)
-                return r;
-
-        if (stat("/etc/vconsole.conf", &st) >= 0)
-                c->vc_mtime = timespec_load(&st.st_mtim);
-
-        return 0;
-}
-
-int x11_write_data(Context *c) {
-        _cleanup_fclose_ FILE *f = NULL;
-        _cleanup_free_ char *temp_path = NULL;
-        struct stat st;
-        int r;
-
-        if (isempty(c->x11_layout) &&
-            isempty(c->x11_model) &&
-            isempty(c->x11_variant) &&
-            isempty(c->x11_options)) {
-
-                if (unlink("/etc/X11/xorg.conf.d/00-keyboard.conf") < 0)
-                        return errno == ENOENT ? 0 : -errno;
-
-                c->vc_mtime = USEC_INFINITY;
-                return 0;
-        }
-
-        (void) mkdir_p_label("/etc/X11/xorg.conf.d", 0755);
-        r = fopen_temporary("/etc/X11/xorg.conf.d/00-keyboard.conf", &f, &temp_path);
-        if (r < 0)
-                return r;
-
-        (void) fchmod(fileno(f), 0644);
-
-        fputs("# Written by systemd-localed(8), read by systemd-localed and Xorg. It's\n"
-              "# probably wise not to edit this file manually. Use localectl(1) to\n"
-              "# instruct systemd-localed to update it.\n"
-              "Section \"InputClass\"\n"
-              "        Identifier \"system-keyboard\"\n"
-              "        MatchIsKeyboard \"on\"\n", f);
-
-        if (!isempty(c->x11_layout))
-                fprintf(f, "        Option \"XkbLayout\" \"%s\"\n", c->x11_layout);
-
-        if (!isempty(c->x11_model))
-                fprintf(f, "        Option \"XkbModel\" \"%s\"\n", c->x11_model);
-
-        if (!isempty(c->x11_variant))
-                fprintf(f, "        Option \"XkbVariant\" \"%s\"\n", c->x11_variant);
-
-        if (!isempty(c->x11_options))
-                fprintf(f, "        Option \"XkbOptions\" \"%s\"\n", c->x11_options);
-
-        fputs("EndSection\n", f);
-
-        r = fflush_sync_and_check(f);
-        if (r < 0)
-                goto fail;
-
-        if (rename(temp_path, "/etc/X11/xorg.conf.d/00-keyboard.conf") < 0) {
-                r = -errno;
-                goto fail;
-        }
-
-        if (stat("/etc/X11/xorg.conf.d/00-keyboard.conf", &st) >= 0)
-                c->x11_mtime = timespec_load(&st.st_mtim);
-
-        return 0;
-
-fail:
-        if (temp_path)
-                (void) unlink(temp_path);
-
-        return r;
-}
-
-static int read_next_mapping(const char* filename,
-                             unsigned min_fields, unsigned max_fields,
-                             FILE *f, unsigned *n, char ***a) {
-        assert(f);
-        assert(n);
-        assert(a);
-
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
-                size_t length;
-                char *l, **b;
-                int r;
-
-                r = read_line(f, LONG_LINE_MAX, &line);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        break;
-
-                (*n)++;
-
-                l = strstrip(line);
-                if (IN_SET(l[0], 0, '#'))
-                        continue;
-
-                r = strv_split_full(&b, l, WHITESPACE, EXTRACT_UNQUOTE);
-                if (r < 0)
-                        return r;
-
-                length = strv_length(b);
-                if (length < min_fields || length > max_fields) {
-                        log_error("Invalid line %s:%u, ignoring.", filename, *n);
-                        strv_free(b);
-                        continue;
-
-                }
-
-                *a = b;
-                return 1;
-        }
-
-        return 0;
-}
-
-int vconsole_convert_to_x11(Context *c) {
-        const char *map;
-        int modified = -1;
-
-        map = systemd_kbd_model_map();
-
-        if (isempty(c->vc_keymap)) {
-                modified =
-                        !isempty(c->x11_layout) ||
-                        !isempty(c->x11_model) ||
-                        !isempty(c->x11_variant) ||
-                        !isempty(c->x11_options);
-
-                context_free_x11(c);
-        } else {
-                _cleanup_fclose_ FILE *f = NULL;
-                unsigned n = 0;
-
-                f = fopen(map, "re");
-                if (!f)
-                        return -errno;
-
-                for (;;) {
-                        _cleanup_strv_free_ char **a = NULL;
-                        int r;
-
-                        r = read_next_mapping(map, 5, UINT_MAX, f, &n, &a);
-                        if (r < 0)
-                                return r;
-                        if (r == 0)
-                                break;
-
-                        if (!streq(c->vc_keymap, a[0]))
-                                continue;
-
-                        if (!streq_ptr(c->x11_layout, empty_or_dash_to_null(a[1])) ||
-                            !streq_ptr(c->x11_model, empty_or_dash_to_null(a[2])) ||
-                            !streq_ptr(c->x11_variant, empty_or_dash_to_null(a[3])) ||
-                            !streq_ptr(c->x11_options, empty_or_dash_to_null(a[4]))) {
-
-                                if (free_and_strdup(&c->x11_layout, empty_or_dash_to_null(a[1])) < 0 ||
-                                    free_and_strdup(&c->x11_model, empty_or_dash_to_null(a[2])) < 0 ||
-                                    free_and_strdup(&c->x11_variant, empty_or_dash_to_null(a[3])) < 0 ||
-                                    free_and_strdup(&c->x11_options, empty_or_dash_to_null(a[4])) < 0)
-                                        return -ENOMEM;
-
-                                modified = true;
-                        }
-
-                        break;
-                }
-        }
-
-        if (modified > 0)
-                log_info("Changing X11 keyboard layout to '%s' model '%s' variant '%s' options '%s'",
-                         strempty(c->x11_layout),
-                         strempty(c->x11_model),
-                         strempty(c->x11_variant),
-                         strempty(c->x11_options));
-        else if (modified < 0)
-                log_notice("X11 keyboard layout was not modified: no conversion found for \"%s\".",
-                           c->vc_keymap);
-        else
-                log_debug("X11 keyboard layout did not need to be modified.");
-
-        return modified > 0;
-}
-
-int find_converted_keymap(const char *x11_layout, const char *x11_variant, char **new_keymap) {
-        const char *dir;
-        _cleanup_free_ char *n = NULL;
-
-        if (x11_variant)
-                n = strjoin(x11_layout, "-", x11_variant);
-        else
-                n = strdup(x11_layout);
-        if (!n)
-                return -ENOMEM;
-
-        NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS) {
-                _cleanup_free_ char *p = NULL, *pz = NULL;
-                bool uncompressed;
-
-                p = strjoin(dir, "xkb/", n, ".map");
-                pz = strjoin(dir, "xkb/", n, ".map.gz");
-                if (!p || !pz)
-                        return -ENOMEM;
-
-                uncompressed = access(p, F_OK) == 0;
-                if (uncompressed || access(pz, F_OK) == 0) {
-                        log_debug("Found converted keymap %s at %s",
-                                  n, uncompressed ? p : pz);
-
-                        *new_keymap = TAKE_PTR(n);
-                        return 1;
-                }
-        }
-
-        return 0;
-}
-
-int find_legacy_keymap(Context *c, char **ret) {
-        const char *map;
-        _cleanup_fclose_ FILE *f = NULL;
-        _cleanup_free_ char *new_keymap = NULL;
-        unsigned n = 0;
-        unsigned best_matching = 0;
-        int r;
-
-        assert(!isempty(c->x11_layout));
-
-        map = systemd_kbd_model_map();
-
-        f = fopen(map, "re");
-        if (!f)
-                return -errno;
-
-        for (;;) {
-                _cleanup_strv_free_ char **a = NULL;
-                unsigned matching = 0;
-
-                r = read_next_mapping(map, 5, UINT_MAX, f, &n, &a);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        break;
-
-                /* Determine how well matching this entry is */
-                if (streq(c->x11_layout, a[1]))
-                        /* If we got an exact match, this is best */
-                        matching = 10;
-                else {
-                        /* We have multiple X layouts, look for an
-                         * entry that matches our key with everything
-                         * but the first layout stripped off. */
-                        if (startswith_comma(c->x11_layout, a[1]))
-                                matching = 5;
-                        else  {
-                                _cleanup_free_ char *x = NULL;
-
-                                /* If that didn't work, strip off the
-                                 * other layouts from the entry, too */
-                                x = strndup(a[1], strcspn(a[1], ","));
-                                if (startswith_comma(c->x11_layout, x))
-                                        matching = 1;
-                        }
-                }
-
-                if (matching > 0) {
-                        if (isempty(c->x11_model) || streq_ptr(c->x11_model, a[2])) {
-                                matching++;
-
-                                if (streq_ptr(c->x11_variant, a[3])) {
-                                        matching++;
-
-                                        if (streq_ptr(c->x11_options, a[4]))
-                                                matching++;
-                                }
-                        }
-                }
-
-                /* The best matching entry so far, then let's save that */
-                if (matching >= MAX(best_matching, 1u)) {
-                        log_debug("Found legacy keymap %s with score %u",
-                                  a[0], matching);
-
-                        if (matching > best_matching) {
-                                best_matching = matching;
-
-                                r = free_and_strdup(&new_keymap, a[0]);
-                                if (r < 0)
-                                        return r;
-                        }
-                }
-        }
-
-        if (best_matching < 10 && c->x11_layout) {
-                /* The best match is only the first part of the X11
-                 * keymap. Check if we have a converted map which
-                 * matches just the first layout.
-                 */
-                char *l, *v = NULL, *converted;
-
-                l = strndupa(c->x11_layout, strcspn(c->x11_layout, ","));
-                if (c->x11_variant)
-                        v = strndupa(c->x11_variant, strcspn(c->x11_variant, ","));
-                r = find_converted_keymap(l, v, &converted);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        free_and_replace(new_keymap, converted);
-        }
-
-        *ret = TAKE_PTR(new_keymap);
-        return (bool) *ret;
-}
-
-int find_language_fallback(const char *lang, char **language) {
-        const char *map;
-        _cleanup_fclose_ FILE *f = NULL;
-        unsigned n = 0;
-
-        assert(lang);
-        assert(language);
-
-        map = systemd_language_fallback_map();
-
-        f = fopen(map, "re");
-        if (!f)
-                return -errno;
-
-        for (;;) {
-                _cleanup_strv_free_ char **a = NULL;
-                int r;
-
-                r = read_next_mapping(map, 2, 2, f, &n, &a);
-                if (r <= 0)
-                        return r;
-
-                if (streq(lang, a[0])) {
-                        assert(strv_length(a) == 2);
-                        *language = TAKE_PTR(a[1]);
-                        return 1;
-                }
-        }
-
-        assert_not_reached("should not be here");
-}
-
-int x11_convert_to_vconsole(Context *c) {
-        bool modified = false;
-
-        if (isempty(c->x11_layout)) {
-                modified =
-                        !isempty(c->vc_keymap) ||
-                        !isempty(c->vc_keymap_toggle);
-
-                context_free_vconsole(c);
-        } else {
-                _cleanup_free_ char *new_keymap = NULL;
-                int r;
-
-                r = find_converted_keymap(c->x11_layout, c->x11_variant, &new_keymap);
-                if (r < 0)
-                        return r;
-                else if (r == 0) {
-                        r = find_legacy_keymap(c, &new_keymap);
-                        if (r < 0)
-                                return r;
-                }
-                if (r == 0)
-                        /* We search for layout-variant match first, but then we also look
-                         * for anything which matches just the layout. So it's accurate to say
-                         * that we couldn't find anything which matches the layout. */
-                        log_notice("No conversion to virtual console map found for \"%s\".",
-                                   c->x11_layout);
-
-                if (!streq_ptr(c->vc_keymap, new_keymap)) {
-                        free_and_replace(c->vc_keymap, new_keymap);
-                        c->vc_keymap_toggle = mfree(c->vc_keymap_toggle);
-                        modified = true;
-                }
-        }
-
-        if (modified)
-                log_info("Changing virtual console keymap to '%s' toggle '%s'",
-                         strempty(c->vc_keymap), strempty(c->vc_keymap_toggle));
-        else
-                log_debug("Virtual console keymap was not modified.");
-
-        return modified;
-}
-
-bool locale_gen_check_available(void) {
-#if HAVE_LOCALEGEN
-        if (access(LOCALEGEN_PATH, X_OK) < 0) {
-                if (errno != ENOENT)
-                        log_warning_errno(errno, "Unable to determine whether " LOCALEGEN_PATH " exists and is executable, assuming it is not: %m");
-                return false;
-        }
-        if (access("/etc/locale.gen", F_OK) < 0) {
-                if (errno != ENOENT)
-                        log_warning_errno(errno, "Unable to determine whether /etc/locale.gen exists, assuming it does not: %m");
-                return false;
-        }
-        return true;
-#else
-        return false;
-#endif
-}
-
-#if HAVE_LOCALEGEN
-static bool locale_encoding_is_utf8_or_unspecified(const char *locale) {
-        const char *c = strchr(locale, '.');
-        return !c || strcaseeq(c, ".UTF-8") || strcasestr(locale, ".UTF-8@");
-}
-
-static int locale_gen_locale_supported(const char *locale_entry) {
-        /* Returns an error valus <= 0 if the locale-gen entry is invalid or unsupported,
-         * 1 in case the locale entry is valid, and -EOPNOTSUPP specifically in case
-         * the distributor has not provided us with a SUPPORTED file to check
-         * locale for validity. */
-
-        _cleanup_fclose_ FILE *f = NULL;
-        int r;
-
-        assert(locale_entry);
-
-        /* Locale templates without country code are never supported */
-        if (!strstr(locale_entry, "_"))
-                return -EINVAL;
-
-        f = fopen("/usr/share/i18n/SUPPORTED", "re");
-        if (!f) {
-                if (errno == ENOENT)
-                        return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                                               "Unable to check validity of locale entry %s: /usr/share/i18n/SUPPORTED does not exist",
-                                               locale_entry);
-                return -errno;
-        }
-
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
-
-                r = read_line(f, LONG_LINE_MAX, &line);
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to read /usr/share/i18n/SUPPORTED: %m");
-                if (r == 0)
-                        return 0;
-
-                line = strstrip(line);
-                if (strcaseeq_ptr(line, locale_entry))
-                        return 1;
-        }
-}
-#endif
-
-int locale_gen_enable_locale(const char *locale) {
-#if HAVE_LOCALEGEN
-        _cleanup_fclose_ FILE *fr = NULL, *fw = NULL;
-        _cleanup_(unlink_and_freep) char *temp_path = NULL;
-        _cleanup_free_ char *locale_entry = NULL;
-        bool locale_enabled = false, first_line = false;
-        bool write_new = false;
-        int r;
-
-        if (isempty(locale))
-                return 0;
-
-        if (locale_encoding_is_utf8_or_unspecified(locale)) {
-                locale_entry = strjoin(locale, " UTF-8");
-                if (!locale_entry)
-                        return -ENOMEM;
-        } else
-                return -ENOEXEC; /* We do not process non-UTF-8 locale */
-
-        r = locale_gen_locale_supported(locale_entry);
-        if (r == 0)
-                return -EINVAL;
-        if (r < 0 && r != -EOPNOTSUPP)
-                return r;
-
-        fr = fopen("/etc/locale.gen", "re");
-        if (!fr) {
-                if (errno != ENOENT)
-                        return -errno;
-                write_new = true;
-        }
-
-        r = fopen_temporary("/etc/locale.gen", &fw, &temp_path);
-        if (r < 0)
-                return r;
-
-        if (write_new)
-                (void) fchmod(fileno(fw), 0644);
-        else {
-                /* apply mode & xattrs of the original file to new file */
-                r = copy_access(fileno(fr), fileno(fw));
-                if (r < 0)
-                        return r;
-                r = copy_xattr(fileno(fr), fileno(fw));
-                if (r < 0)
-                        return r;
-        }
-
-        if (!write_new) {
-                /* The config file ends with a line break, which we do not want to include before potentially appending a new locale
-                * instead of uncommenting an existing line. By prepending linebreaks, we can avoid buffering this file but can still write
-                * a nice config file without empty lines */
-                first_line = true;
-                for (;;) {
-                        _cleanup_free_ char *line = NULL;
-                        char *line_locale;
-
-                        r = read_line(fr, LONG_LINE_MAX, &line);
-                        if (r < 0)
-                                return r;
-                        if (r == 0)
-                                break;
-
-                        if (locale_enabled) {
-                                /* Just complete writing the file if the new locale was already enabled */
-                                if (!first_line)
-                                        fputc('\n', fw);
-                                fputs(line, fw);
-                                first_line = false;
-                                continue;
-                        }
-
-                        line = strstrip(line);
-                        if (isempty(line)) {
-                                fputc('\n', fw);
-                                first_line = false;
-                                continue;
-                        }
-
-                        line_locale = line;
-                        if (line_locale[0] == '#')
-                                line_locale = strstrip(line_locale + 1);
-                        else if (strcaseeq_ptr(line_locale, locale_entry))
-                                return 0; /* the file already had our locale activated, so skip updating it */
-
-                        if (strcaseeq_ptr(line_locale, locale_entry)) {
-                                /* Uncomment existing line for new locale */
-                                if (!first_line)
-                                        fputc('\n', fw);
-                                fputs(locale_entry, fw);
-                                locale_enabled = true;
-                                first_line = false;
-                                continue;
-                        }
-
-                        /* The line was not for the locale we want to enable, just copy it */
-                        if (!first_line)
-                                fputc('\n', fw);
-                        fputs(line, fw);
-                        first_line = false;
-                }
-        }
-
-        /* Add locale to enable to the end of the file if it was not found as commented line */
-        if (!locale_enabled) {
-                if (!write_new)
-                        fputc('\n', fw);
-                fputs(locale_entry, fw);
-        }
-        fputc('\n', fw);
-
-        r = fflush_sync_and_check(fw);
-        if (r < 0)
-                return r;
-
-        if (rename(temp_path, "/etc/locale.gen") < 0)
-                return -errno;
-        temp_path = mfree(temp_path);
-
-        return 0;
-#else
-        return -EOPNOTSUPP;
-#endif
-}
-
-int locale_gen_run(void) {
-#if HAVE_LOCALEGEN
-        pid_t pid;
-        int r;
-
-        r = safe_fork("(sd-localegen)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_WAIT, &pid);
-        if (r < 0)
-                return r;
-        if (r == 0) {
-                execl(LOCALEGEN_PATH, LOCALEGEN_PATH, NULL);
-                _exit(EXIT_FAILURE);
-        }
-
-        return 0;
-#else
-        return -EOPNOTSUPP;
-#endif
-}
diff --git a/src/locale/keymap-util.h b/src/locale/keymap-util.h
deleted file mode 100644
index c087dbc..0000000
--- a/src/locale/keymap-util.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include "sd-bus.h"
-
-#include "hashmap.h"
-#include "locale-util.h"
-#include "time-util.h"
-
-typedef struct Context {
-        sd_bus_message *locale_cache;
-        usec_t locale_mtime;
-        char *locale[_VARIABLE_LC_MAX];
-
-        sd_bus_message *x11_cache;
-        usec_t x11_mtime;
-        char *x11_layout;
-        char *x11_model;
-        char *x11_variant;
-        char *x11_options;
-
-        sd_bus_message *vc_cache;
-        usec_t vc_mtime;
-        char *vc_keymap;
-        char *vc_keymap_toggle;
-
-        Hashmap *polkit_registry;
-} Context;
-
-int find_converted_keymap(const char *x11_layout, const char *x11_variant, char **new_keymap);
-int find_legacy_keymap(Context *c, char **new_keymap);
-int find_language_fallback(const char *lang, char **language);
-
-int locale_read_data(Context *c, sd_bus_message *m);
-int vconsole_read_data(Context *c, sd_bus_message *m);
-int x11_read_data(Context *c, sd_bus_message *m);
-
-void context_clear(Context *c);
-int vconsole_convert_to_x11(Context *c);
-int vconsole_write_data(Context *c);
-int x11_convert_to_vconsole(Context *c);
-int x11_write_data(Context *c);
-void locale_simplify(char *locale[_VARIABLE_LC_MAX]);
-int locale_write_data(Context *c, char ***settings);
-
-bool locale_gen_check_available(void);
-int locale_gen_enable_locale(const char *locale);
-int locale_gen_run(void);
diff --git a/src/locale/localectl.c b/src/locale/localectl.c
index 548ac8e..fb83881 100644
--- a/src/locale/localectl.c
+++ b/src/locale/localectl.c
@@ -1,19 +1,19 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <ftw.h>
 #include <getopt.h>
 #include <stdbool.h>
-#include <stdlib.h>
 
 #include "sd-bus.h"
 
+#include "build.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-map-properties.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "format-table.h"
 #include "kbd-util.h"
-#include "locale-util.h"
+#include "locale-setup.h"
 #include "main-func.h"
 #include "memory-util.h"
 #include "pager.h"
@@ -52,71 +52,97 @@
         }
 }
 
-static void print_overridden_variables(void) {
-        _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {};
-        bool print_warning = true;
+static int print_status_info(StatusInfo *i) {
+        _cleanup_strv_free_ char **kernel_locale = NULL;
+        _cleanup_(table_unrefp) Table *table = NULL;
+        TableCell *cell;
         int r;
 
-        if (arg_transport != BUS_TRANSPORT_LOCAL)
-                return;
-
-        r = proc_cmdline_get_key_many(
-                        PROC_CMDLINE_STRIP_RD_PREFIX,
-                        "locale.LANG",              &variables[VARIABLE_LANG],
-                        "locale.LANGUAGE",          &variables[VARIABLE_LANGUAGE],
-                        "locale.LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
-                        "locale.LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
-                        "locale.LC_TIME",           &variables[VARIABLE_LC_TIME],
-                        "locale.LC_COLLATE",        &variables[VARIABLE_LC_COLLATE],
-                        "locale.LC_MONETARY",       &variables[VARIABLE_LC_MONETARY],
-                        "locale.LC_MESSAGES",       &variables[VARIABLE_LC_MESSAGES],
-                        "locale.LC_PAPER",          &variables[VARIABLE_LC_PAPER],
-                        "locale.LC_NAME",           &variables[VARIABLE_LC_NAME],
-                        "locale.LC_ADDRESS",        &variables[VARIABLE_LC_ADDRESS],
-                        "locale.LC_TELEPHONE",      &variables[VARIABLE_LC_TELEPHONE],
-                        "locale.LC_MEASUREMENT",    &variables[VARIABLE_LC_MEASUREMENT],
-                        "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]);
-        if (r < 0 && r != -ENOENT) {
-                log_warning_errno(r, "Failed to read /proc/cmdline: %m");
-                return;
-        }
-
-        for (LocaleVariable j = 0; j < _VARIABLE_LC_MAX; j++)
-                if (variables[j]) {
-                        if (print_warning) {
-                                log_warning("Warning: Settings on kernel command line override system locale settings in /etc/locale.conf.\n"
-                                            "    Command Line: %s=%s", locale_variable_to_string(j), variables[j]);
-
-                                print_warning = false;
-                        } else
-                                log_warning("                  %s=%s", locale_variable_to_string(j), variables[j]);
-                }
-}
-
-static void print_status_info(StatusInfo *i) {
         assert(i);
 
-        if (strv_isempty(i->locale))
-                puts("   System Locale: n/a");
-        else {
-                char **j;
+        if (arg_transport == BUS_TRANSPORT_LOCAL) {
+                _cleanup_(locale_context_clear) LocaleContext c = {};
 
-                printf("   System Locale: %s\n", i->locale[0]);
-                STRV_FOREACH(j, i->locale + 1)
-                        printf("                  %s\n", *j);
+                r = locale_context_load(&c, LOCALE_LOAD_PROC_CMDLINE);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read /proc/cmdline: %m");
+
+                r = locale_context_build_env(&c, &kernel_locale, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to build locale settings from kernel command line: %m");
         }
 
-        printf("       VC Keymap: %s\n", strna(i->vconsole_keymap));
-        if (!isempty(i->vconsole_keymap_toggle))
-                printf("VC Toggle Keymap: %s\n", i->vconsole_keymap_toggle);
+        table = table_new_vertical();
+        if (!table)
+                return log_oom();
 
-        printf("      X11 Layout: %s\n", strna(i->x11_layout));
-        if (!isempty(i->x11_model))
-                printf("       X11 Model: %s\n", i->x11_model);
-        if (!isempty(i->x11_variant))
-                printf("     X11 Variant: %s\n", i->x11_variant);
-        if (!isempty(i->x11_options))
-                printf("     X11 Options: %s\n", i->x11_options);
+        assert_se(cell = table_get_cell(table, 0, 0));
+        (void) table_set_ellipsize_percent(table, cell, 100);
+
+        table_set_ersatz_string(table, TABLE_ERSATZ_UNSET);
+
+        if (!strv_isempty(kernel_locale)) {
+                log_warning("Warning: Settings on kernel command line override system locale settings in /etc/locale.conf.");
+                r = table_add_many(table,
+                                   TABLE_FIELD, "Command Line",
+                                   TABLE_SET_COLOR, ansi_highlight_yellow(),
+                                   TABLE_STRV, kernel_locale,
+                                   TABLE_SET_COLOR, ansi_highlight_yellow());
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        r = table_add_many(table,
+                           TABLE_FIELD, "System Locale",
+                           TABLE_STRV, i->locale,
+                           TABLE_FIELD, "VC Keymap",
+                           TABLE_STRING, i->vconsole_keymap);
+        if (r < 0)
+                return table_log_add_error(r);
+
+        if (!isempty(i->vconsole_keymap_toggle)) {
+                r = table_add_many(table,
+                                   TABLE_FIELD, "VC Toggle Keymap",
+                                   TABLE_STRING, i->vconsole_keymap_toggle);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        r = table_add_many(table,
+                           TABLE_FIELD, "X11 Layout",
+                           TABLE_STRING, i->x11_layout);
+        if (r < 0)
+                return table_log_add_error(r);
+
+        if (!isempty(i->x11_model)) {
+                r = table_add_many(table,
+                                   TABLE_FIELD, "X11 Model",
+                                   TABLE_STRING, i->x11_model);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        if (!isempty(i->x11_variant)) {
+                r = table_add_many(table,
+                                   TABLE_FIELD, "X11 Variant",
+                                   TABLE_STRING, i->x11_variant);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        if (!isempty(i->x11_options)) {
+                r = table_add_many(table,
+                                   TABLE_FIELD, "X11 Options",
+                                   TABLE_STRING, i->x11_options);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        r = table_print(table, NULL);
+        if (r < 0)
+                return table_log_print_error(r);
+
+        return 0;
 }
 
 static int show_status(int argc, char **argv, void *userdata) {
@@ -134,11 +160,9 @@
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         r = bus_map_all_properties(bus,
                                    "org.freedesktop.locale1",
                                    "/org/freedesktop/locale1",
@@ -150,20 +174,15 @@
         if (r < 0)
                 return log_error_errno(r, "Could not get properties: %s", bus_error_message(&error, r));
 
-        print_overridden_variables();
-        print_status_info(&info);
-
-        return r;
+        return print_status_info(&info);
 }
 
 static int set_locale(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         r = bus_message_new_method_call(bus, &m, bus_locale, "SetLocale");
@@ -194,7 +213,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to read list of locales: %m");
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
         strv_print(l);
 
         return 0;
@@ -203,11 +222,9 @@
 static int set_vconsole_keymap(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         const char *map, *toggle_map;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         map = argv[1];
@@ -234,7 +251,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to read list of keymaps: %m");
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         strv_print(l);
 
@@ -293,7 +310,7 @@
         else if (streq(argv[0], "list-x11-keymap-options"))
                 look_for = OPTIONS;
         else
-                assert_not_reached("Wrong parameter");
+                assert_not_reached();
 
         for (;;) {
                 _cleanup_free_ char *line = NULL;
@@ -363,7 +380,7 @@
         strv_sort(list);
         strv_uniq(list);
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         strv_print(list);
         return 0;
@@ -474,7 +491,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -513,7 +530,7 @@
 
         r = bus_connect_transport(arg_transport, arg_host, false, &bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         return localectl_main(bus, argc, argv);
 }
diff --git a/src/locale/localed-util.c b/src/locale/localed-util.c
new file mode 100644
index 0000000..8f18ecd
--- /dev/null
+++ b/src/locale/localed-util.c
@@ -0,0 +1,1023 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "bus-polkit.h"
+#include "copy.h"
+#include "env-file-label.h"
+#include "env-file.h"
+#include "env-util.h"
+#include "fd-util.h"
+#include "fileio-label.h"
+#include "fileio.h"
+#include "fs-util.h"
+#include "kbd-util.h"
+#include "localed-util.h"
+#include "macro.h"
+#include "mkdir-label.h"
+#include "nulstr-util.h"
+#include "process-util.h"
+#include "stat-util.h"
+#include "string-util.h"
+#include "strv.h"
+#include "tmpfile-util.h"
+
+static bool startswith_comma(const char *s, const char *prefix) {
+        assert(s);
+        assert(prefix);
+
+        s = startswith(s, prefix);
+        if (!s)
+                return false;
+
+        return IN_SET(*s, ',', '\0');
+}
+
+static const char* systemd_kbd_model_map(void) {
+        const char* s;
+
+        s = getenv("SYSTEMD_KBD_MODEL_MAP");
+        if (s)
+                return s;
+
+        return SYSTEMD_KBD_MODEL_MAP;
+}
+
+static const char* systemd_language_fallback_map(void) {
+        const char* s;
+
+        s = getenv("SYSTEMD_LANGUAGE_FALLBACK_MAP");
+        if (s)
+                return s;
+
+        return SYSTEMD_LANGUAGE_FALLBACK_MAP;
+}
+
+void x11_context_clear(X11Context *xc) {
+        assert(xc);
+
+        xc->layout  = mfree(xc->layout);
+        xc->options = mfree(xc->options);
+        xc->model   = mfree(xc->model);
+        xc->variant = mfree(xc->variant);
+}
+
+void x11_context_replace(X11Context *dest, X11Context *src) {
+        assert(dest);
+        assert(src);
+
+        x11_context_clear(dest);
+        *dest = *src;
+        *src = (X11Context) {};
+}
+
+bool x11_context_isempty(const X11Context *xc) {
+        assert(xc);
+
+        return
+                isempty(xc->layout)  &&
+                isempty(xc->model)   &&
+                isempty(xc->variant) &&
+                isempty(xc->options);
+}
+
+void x11_context_empty_to_null(X11Context *xc) {
+        assert(xc);
+
+        /* Do not call x11_context_clear() for the passed object. */
+
+        xc->layout  = empty_to_null(xc->layout);
+        xc->model   = empty_to_null(xc->model);
+        xc->variant = empty_to_null(xc->variant);
+        xc->options = empty_to_null(xc->options);
+}
+
+bool x11_context_is_safe(const X11Context *xc) {
+        assert(xc);
+
+        return
+                (!xc->layout  || string_is_safe(xc->layout))  &&
+                (!xc->model   || string_is_safe(xc->model))   &&
+                (!xc->variant || string_is_safe(xc->variant)) &&
+                (!xc->options || string_is_safe(xc->options));
+}
+
+bool x11_context_equal(const X11Context *a, const X11Context *b) {
+        assert(a);
+        assert(b);
+
+        return
+                streq_ptr(a->layout,  b->layout)  &&
+                streq_ptr(a->model,   b->model)   &&
+                streq_ptr(a->variant, b->variant) &&
+                streq_ptr(a->options, b->options);
+}
+
+int x11_context_copy(X11Context *dest, const X11Context *src) {
+        bool modified;
+        int r;
+
+        assert(dest);
+
+        if (dest == src)
+                return 0;
+
+        if (!src) {
+                modified = !x11_context_isempty(dest);
+                x11_context_clear(dest);
+                return modified;
+        }
+
+        r = free_and_strdup(&dest->layout, src->layout);
+        if (r < 0)
+                return r;
+        modified = r > 0;
+
+        r = free_and_strdup(&dest->model, src->model);
+        if (r < 0)
+                return r;
+        modified = modified || r > 0;
+
+        r = free_and_strdup(&dest->variant, src->variant);
+        if (r < 0)
+                return r;
+        modified = modified || r > 0;
+
+        r = free_and_strdup(&dest->options, src->options);
+        if (r < 0)
+                return r;
+        modified = modified || r > 0;
+
+        return modified;
+}
+
+void vc_context_clear(VCContext *vc) {
+        assert(vc);
+
+        vc->keymap = mfree(vc->keymap);
+        vc->toggle = mfree(vc->toggle);
+}
+
+void vc_context_replace(VCContext *dest, VCContext *src) {
+        assert(dest);
+        assert(src);
+
+        vc_context_clear(dest);
+        *dest = *src;
+        *src = (VCContext) {};
+}
+
+bool vc_context_isempty(const VCContext *vc) {
+        assert(vc);
+
+        return
+                isempty(vc->keymap) &&
+                isempty(vc->toggle);
+}
+
+void vc_context_empty_to_null(VCContext *vc) {
+        assert(vc);
+
+        /* Do not call vc_context_clear() for the passed object. */
+
+        vc->keymap = empty_to_null(vc->keymap);
+        vc->toggle = empty_to_null(vc->toggle);
+}
+
+bool vc_context_equal(const VCContext *a, const VCContext *b) {
+        assert(a);
+        assert(b);
+
+        return
+                streq_ptr(a->keymap, b->keymap) &&
+                streq_ptr(a->toggle, b->toggle);
+}
+
+int vc_context_copy(VCContext *dest, const VCContext *src) {
+        bool modified;
+        int r;
+
+        assert(dest);
+
+        if (dest == src)
+                return 0;
+
+        if (!src) {
+                modified = !vc_context_isempty(dest);
+                vc_context_clear(dest);
+                return modified;
+        }
+
+        r = free_and_strdup(&dest->keymap, src->keymap);
+        if (r < 0)
+                return r;
+        modified = r > 0;
+
+        r = free_and_strdup(&dest->toggle, src->toggle);
+        if (r < 0)
+                return r;
+        modified = modified || r > 0;
+
+        return modified;
+}
+
+void context_clear(Context *c) {
+        assert(c);
+
+        locale_context_clear(&c->locale_context);
+        x11_context_clear(&c->x11_from_xorg);
+        x11_context_clear(&c->x11_from_vc);
+        vc_context_clear(&c->vc);
+
+        c->locale_cache = sd_bus_message_unref(c->locale_cache);
+        c->x11_cache = sd_bus_message_unref(c->x11_cache);
+        c->vc_cache = sd_bus_message_unref(c->vc_cache);
+
+        c->polkit_registry = bus_verify_polkit_async_registry_free(c->polkit_registry);
+};
+
+X11Context *context_get_x11_context(Context *c) {
+        assert(c);
+
+        if (!x11_context_isempty(&c->x11_from_vc))
+                return &c->x11_from_vc;
+
+        if (!x11_context_isempty(&c->x11_from_xorg))
+                return &c->x11_from_xorg;
+
+        return &c->x11_from_vc;
+}
+
+int locale_read_data(Context *c, sd_bus_message *m) {
+        assert(c);
+
+        /* Do not try to re-read the file within single bus operation. */
+        if (m) {
+                if (m == c->locale_cache)
+                        return 0;
+
+                sd_bus_message_unref(c->locale_cache);
+                c->locale_cache = sd_bus_message_ref(m);
+        }
+
+        return locale_context_load(&c->locale_context, LOCALE_LOAD_LOCALE_CONF | LOCALE_LOAD_ENVIRONMENT | LOCALE_LOAD_SIMPLIFY);
+}
+
+int vconsole_read_data(Context *c, sd_bus_message *m) {
+        _cleanup_close_ int fd = -EBADF;
+        struct stat st;
+
+        assert(c);
+
+        /* Do not try to re-read the file within single bus operation. */
+        if (m) {
+                if (m == c->vc_cache)
+                        return 0;
+
+                sd_bus_message_unref(c->vc_cache);
+                c->vc_cache = sd_bus_message_ref(m);
+        }
+
+        fd = RET_NERRNO(open("/etc/vconsole.conf", O_CLOEXEC | O_PATH));
+        if (fd == -ENOENT) {
+                c->vc_stat = (struct stat) {};
+                vc_context_clear(&c->vc);
+                x11_context_clear(&c->x11_from_vc);
+                return 0;
+        }
+        if (fd < 0)
+                return fd;
+
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        /* If the file is not changed, then we do not need to re-read */
+        if (stat_inode_unmodified(&c->vc_stat, &st))
+                return 0;
+
+        c->vc_stat = st;
+        vc_context_clear(&c->vc);
+        x11_context_clear(&c->x11_from_vc);
+
+        return parse_env_file_fd(fd, "/etc/vconsole.conf",
+                                 "KEYMAP",        &c->vc.keymap,
+                                 "KEYMAP_TOGGLE", &c->vc.toggle,
+                                 "XKBLAYOUT",     &c->x11_from_vc.layout,
+                                 "XKBMODEL",      &c->x11_from_vc.model,
+                                 "XKBVARIANT",    &c->x11_from_vc.variant,
+                                 "XKBOPTIONS",    &c->x11_from_vc.options);
+}
+
+int x11_read_data(Context *c, sd_bus_message *m) {
+        _cleanup_close_ int fd = -EBADF, fd_ro = -EBADF;
+        _cleanup_fclose_ FILE *f = NULL;
+        bool in_section = false;
+        struct stat st;
+        int r;
+
+        assert(c);
+
+        /* Do not try to re-read the file within single bus operation. */
+        if (m) {
+                if (m == c->x11_cache)
+                        return 0;
+
+                sd_bus_message_unref(c->x11_cache);
+                c->x11_cache = sd_bus_message_ref(m);
+        }
+
+        fd = RET_NERRNO(open("/etc/X11/xorg.conf.d/00-keyboard.conf", O_CLOEXEC | O_PATH));
+        if (fd == -ENOENT) {
+                c->x11_stat = (struct stat) {};
+                x11_context_clear(&c->x11_from_xorg);
+                return 0;
+        }
+        if (fd < 0)
+                return fd;
+
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        /* If the file is not changed, then we do not need to re-read */
+        if (stat_inode_unmodified(&c->x11_stat, &st))
+                return 0;
+
+        c->x11_stat = st;
+        x11_context_clear(&c->x11_from_xorg);
+
+        fd_ro = fd_reopen(fd, O_CLOEXEC | O_RDONLY);
+        if (fd_ro < 0)
+                return fd_ro;
+
+        f = fdopen(fd_ro, "re");
+        if (!f)
+                return -errno;
+
+        TAKE_FD(fd_ro);
+
+        for (;;) {
+                _cleanup_free_ char *line = NULL;
+                char *l;
+
+                r = read_line(f, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        break;
+
+                l = strstrip(line);
+                if (IN_SET(l[0], 0, '#'))
+                        continue;
+
+                if (in_section && first_word(l, "Option")) {
+                        _cleanup_strv_free_ char **a = NULL;
+
+                        r = strv_split_full(&a, l, WHITESPACE, EXTRACT_UNQUOTE);
+                        if (r < 0)
+                                return r;
+
+                        if (strv_length(a) == 3) {
+                                char **p = NULL;
+
+                                if (streq(a[1], "XkbLayout"))
+                                        p = &c->x11_from_xorg.layout;
+                                else if (streq(a[1], "XkbModel"))
+                                        p = &c->x11_from_xorg.model;
+                                else if (streq(a[1], "XkbVariant"))
+                                        p = &c->x11_from_xorg.variant;
+                                else if (streq(a[1], "XkbOptions"))
+                                        p = &c->x11_from_xorg.options;
+
+                                if (p)
+                                        free_and_replace(*p, a[2]);
+                        }
+
+                } else if (!in_section && first_word(l, "Section")) {
+                        _cleanup_strv_free_ char **a = NULL;
+
+                        r = strv_split_full(&a, l, WHITESPACE, EXTRACT_UNQUOTE);
+                        if (r < 0)
+                                return -ENOMEM;
+
+                        if (strv_length(a) == 2 && streq(a[1], "InputClass"))
+                                in_section = true;
+
+                } else if (in_section && first_word(l, "EndSection"))
+                        in_section = false;
+        }
+
+        return 0;
+}
+
+int vconsole_write_data(Context *c) {
+        _cleanup_strv_free_ char **l = NULL;
+        const X11Context *xc;
+        int r;
+
+        assert(c);
+
+        xc = context_get_x11_context(c);
+
+        r = load_env_file(NULL, "/etc/vconsole.conf", &l);
+        if (r < 0 && r != -ENOENT)
+                return r;
+
+        r = strv_env_assign(&l, "KEYMAP", empty_to_null(c->vc.keymap));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(&l, "KEYMAP_TOGGLE", empty_to_null(c->vc.toggle));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(&l, "XKBLAYOUT", empty_to_null(xc->layout));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(&l, "XKBMODEL", empty_to_null(xc->model));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(&l, "XKBVARIANT", empty_to_null(xc->variant));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(&l, "XKBOPTIONS", empty_to_null(xc->options));
+        if (r < 0)
+                return r;
+
+        if (strv_isempty(l)) {
+                if (unlink("/etc/vconsole.conf") < 0)
+                        return errno == ENOENT ? 0 : -errno;
+
+                c->vc_stat = (struct stat) {};
+                return 0;
+        }
+
+        r = write_env_file_label("/etc/vconsole.conf", l);
+        if (r < 0)
+                return r;
+
+        if (stat("/etc/vconsole.conf", &c->vc_stat) < 0)
+                return -errno;
+
+        return 0;
+}
+
+int x11_write_data(Context *c) {
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_(unlink_and_freep) char *temp_path = NULL;
+        const X11Context *xc;
+        int r;
+
+        assert(c);
+
+        xc = context_get_x11_context(c);
+        if (x11_context_isempty(xc)) {
+                if (unlink("/etc/X11/xorg.conf.d/00-keyboard.conf") < 0)
+                        return errno == ENOENT ? 0 : -errno;
+
+                c->x11_stat = (struct stat) {};
+                return 0;
+        }
+
+        (void) mkdir_p_label("/etc/X11/xorg.conf.d", 0755);
+        r = fopen_temporary("/etc/X11/xorg.conf.d/00-keyboard.conf", &f, &temp_path);
+        if (r < 0)
+                return r;
+
+        (void) fchmod(fileno(f), 0644);
+
+        fputs("# Written by systemd-localed(8), read by systemd-localed and Xorg. It's\n"
+              "# probably wise not to edit this file manually. Use localectl(1) to\n"
+              "# instruct systemd-localed to update it.\n"
+              "Section \"InputClass\"\n"
+              "        Identifier \"system-keyboard\"\n"
+              "        MatchIsKeyboard \"on\"\n", f);
+
+        if (!isempty(xc->layout))
+                fprintf(f, "        Option \"XkbLayout\" \"%s\"\n", xc->layout);
+
+        if (!isempty(xc->model))
+                fprintf(f, "        Option \"XkbModel\" \"%s\"\n", xc->model);
+
+        if (!isempty(xc->variant))
+                fprintf(f, "        Option \"XkbVariant\" \"%s\"\n", xc->variant);
+
+        if (!isempty(xc->options))
+                fprintf(f, "        Option \"XkbOptions\" \"%s\"\n", xc->options);
+
+        fputs("EndSection\n", f);
+
+        r = fflush_sync_and_check(f);
+        if (r < 0)
+                return r;
+
+        if (rename(temp_path, "/etc/X11/xorg.conf.d/00-keyboard.conf") < 0)
+                return -errno;
+
+        if (stat("/etc/X11/xorg.conf.d/00-keyboard.conf", &c->x11_stat) < 0)
+                return -errno;
+
+        return 0;
+}
+
+static int read_next_mapping(
+                const char *filename,
+                unsigned min_fields,
+                unsigned max_fields,
+                FILE *f,
+                unsigned *n,
+                char ***ret) {
+
+        assert(f);
+        assert(n);
+        assert(ret);
+
+        for (;;) {
+                _cleanup_strv_free_ char **b = NULL;
+                _cleanup_free_ char *line = NULL;
+                size_t length;
+                const char *l;
+                int r;
+
+                r = read_line(f, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        break;
+
+                (*n)++;
+
+                l = strstrip(line);
+                if (IN_SET(l[0], 0, '#'))
+                        continue;
+
+                r = strv_split_full(&b, l, WHITESPACE, EXTRACT_UNQUOTE);
+                if (r < 0)
+                        return r;
+
+                length = strv_length(b);
+                if (length < min_fields || length > max_fields) {
+                        log_debug("Invalid line %s:%u, ignoring.", strna(filename), *n);
+                        continue;
+
+                }
+
+                *ret = TAKE_PTR(b);
+                return 1;
+        }
+
+        *ret = NULL;
+        return 0;
+}
+
+int vconsole_convert_to_x11(const VCContext *vc, X11Context *ret) {
+        _cleanup_fclose_ FILE *f = NULL;
+        const char *map;
+        int r;
+
+        assert(vc);
+        assert(ret);
+
+        if (isempty(vc->keymap)) {
+                *ret = (X11Context) {};
+                return 0;
+        }
+
+        map = systemd_kbd_model_map();
+        f = fopen(map, "re");
+        if (!f)
+                return -errno;
+
+        for (unsigned n = 0;;) {
+                _cleanup_strv_free_ char **a = NULL;
+
+                r = read_next_mapping(map, 5, UINT_MAX, f, &n, &a);
+                if (r < 0)
+                        return r;
+                if (r == 0) {
+                        *ret = (X11Context) {};
+                        return 0;
+                }
+
+                if (!streq(vc->keymap, a[0]))
+                        continue;
+
+                return x11_context_copy(ret,
+                                     &(X11Context) {
+                                             .layout  = empty_or_dash_to_null(a[1]),
+                                             .model   = empty_or_dash_to_null(a[2]),
+                                             .variant = empty_or_dash_to_null(a[3]),
+                                             .options = empty_or_dash_to_null(a[4]),
+                                     });
+        }
+}
+
+int find_converted_keymap(const X11Context *xc, char **ret) {
+        _cleanup_free_ char *n = NULL;
+
+        assert(xc);
+        assert(!isempty(xc->layout));
+        assert(ret);
+
+        if (xc->variant)
+                n = strjoin(xc->layout, "-", xc->variant);
+        else
+                n = strdup(xc->layout);
+        if (!n)
+                return -ENOMEM;
+
+        NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS) {
+                _cleanup_free_ char *p = NULL, *pz = NULL;
+                bool uncompressed;
+
+                p = strjoin(dir, "xkb/", n, ".map");
+                pz = strjoin(dir, "xkb/", n, ".map.gz");
+                if (!p || !pz)
+                        return -ENOMEM;
+
+                uncompressed = access(p, F_OK) == 0;
+                if (uncompressed || access(pz, F_OK) == 0) {
+                        log_debug("Found converted keymap %s at %s", n, uncompressed ? p : pz);
+                        *ret = TAKE_PTR(n);
+                        return 1;
+                }
+        }
+
+        *ret = NULL;
+        return 0;
+}
+
+int find_legacy_keymap(const X11Context *xc, char **ret) {
+        const char *map;
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_free_ char *new_keymap = NULL;
+        unsigned best_matching = 0;
+        int r;
+
+        assert(xc);
+        assert(!isempty(xc->layout));
+
+        map = systemd_kbd_model_map();
+        f = fopen(map, "re");
+        if (!f)
+                return -errno;
+
+        for (unsigned n = 0;;) {
+                _cleanup_strv_free_ char **a = NULL;
+                unsigned matching = 0;
+
+                r = read_next_mapping(map, 5, UINT_MAX, f, &n, &a);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        break;
+
+                /* Determine how well matching this entry is */
+                if (streq(xc->layout, a[1]))
+                        /* If we got an exact match, this is the best */
+                        matching = 10;
+                else {
+                        /* We have multiple X layouts, look for an
+                         * entry that matches our key with everything
+                         * but the first layout stripped off. */
+                        if (startswith_comma(xc->layout, a[1]))
+                                matching = 5;
+                        else {
+                                _cleanup_free_ char *x = NULL;
+
+                                /* If that didn't work, strip off the
+                                 * other layouts from the entry, too */
+                                x = strdupcspn(a[1], ",");
+                                if (!x)
+                                        return -ENOMEM;
+                                if (startswith_comma(xc->layout, x))
+                                        matching = 1;
+                        }
+                }
+
+                if (matching > 0) {
+                        if (isempty(xc->model) || streq_ptr(xc->model, a[2])) {
+                                matching++;
+
+                                if (streq_ptr(xc->variant, a[3])) {
+                                        matching++;
+
+                                        if (streq_ptr(xc->options, a[4]))
+                                                matching++;
+                                }
+                        }
+                }
+
+                /* The best matching entry so far, then let's save that */
+                if (matching >= MAX(best_matching, 1u)) {
+                        log_debug("Found legacy keymap %s with score %u", a[0], matching);
+
+                        if (matching > best_matching) {
+                                best_matching = matching;
+
+                                r = free_and_strdup(&new_keymap, a[0]);
+                                if (r < 0)
+                                        return r;
+                        }
+                }
+        }
+
+        if (best_matching < 10 && !isempty(xc->layout)) {
+                _cleanup_free_ char *l = NULL, *v = NULL, *converted = NULL;
+
+                /* The best match is only the first part of the X11
+                 * keymap. Check if we have a converted map which
+                 * matches just the first layout.
+                 */
+
+                l = strndup(xc->layout, strcspn(xc->layout, ","));
+                if (!l)
+                        return -ENOMEM;
+
+                if (!isempty(xc->variant)) {
+                        v = strndup(xc->variant, strcspn(xc->variant, ","));
+                        if (!v)
+                                return -ENOMEM;
+                }
+
+                r = find_converted_keymap(
+                                &(X11Context) {
+                                        .layout = l,
+                                        .variant = v,
+                                },
+                                &converted);
+                if (r < 0)
+                        return r;
+                if (r > 0)
+                        free_and_replace(new_keymap, converted);
+        }
+
+        *ret = TAKE_PTR(new_keymap);
+        return !!*ret;
+}
+
+int find_language_fallback(const char *lang, char **ret) {
+        const char *map;
+        _cleanup_fclose_ FILE *f = NULL;
+        unsigned n = 0;
+        int r;
+
+        assert(lang);
+        assert(ret);
+
+        map = systemd_language_fallback_map();
+        f = fopen(map, "re");
+        if (!f)
+                return -errno;
+
+        for (;;) {
+                _cleanup_strv_free_ char **a = NULL;
+
+                r = read_next_mapping(map, 2, 2, f, &n, &a);
+                if (r <= 0)
+                        return r;
+
+                if (streq(lang, a[0])) {
+                        assert(strv_length(a) == 2);
+                        *ret = TAKE_PTR(a[1]);
+                        return 1;
+                }
+        }
+}
+
+int x11_convert_to_vconsole(const X11Context *xc, VCContext *ret) {
+        _cleanup_free_ char *keymap = NULL;
+        int r;
+
+        assert(xc);
+        assert(ret);
+
+        if (isempty(xc->layout)) {
+                *ret = (VCContext) {};
+                return 0;
+        }
+
+        r = find_converted_keymap(xc, &keymap);
+        if (r == 0)
+                r = find_legacy_keymap(xc, &keymap);
+        if (r < 0)
+                return r;
+
+        *ret = (VCContext) {
+                .keymap = TAKE_PTR(keymap),
+        };
+        return 0;
+}
+
+bool locale_gen_check_available(void) {
+#if HAVE_LOCALEGEN
+        if (access(LOCALEGEN_PATH, X_OK) < 0) {
+                if (errno != ENOENT)
+                        log_warning_errno(errno, "Unable to determine whether " LOCALEGEN_PATH " exists and is executable, assuming it is not: %m");
+                return false;
+        }
+        if (access("/etc/locale.gen", F_OK) < 0) {
+                if (errno != ENOENT)
+                        log_warning_errno(errno, "Unable to determine whether /etc/locale.gen exists, assuming it does not: %m");
+                return false;
+        }
+        return true;
+#else
+        return false;
+#endif
+}
+
+#if HAVE_LOCALEGEN
+static bool locale_encoding_is_utf8_or_unspecified(const char *locale) {
+        const char *c = strchr(locale, '.');
+        return !c || strcaseeq(c, ".UTF-8") || strcasestr(locale, ".UTF-8@");
+}
+
+static int locale_gen_locale_supported(const char *locale_entry) {
+        /* Returns an error valus <= 0 if the locale-gen entry is invalid or unsupported,
+         * 1 in case the locale entry is valid, and -EOPNOTSUPP specifically in case
+         * the distributor has not provided us with a SUPPORTED file to check
+         * locale for validity. */
+
+        _cleanup_fclose_ FILE *f = NULL;
+        int r;
+
+        assert(locale_entry);
+
+        /* Locale templates without country code are never supported */
+        if (!strstr(locale_entry, "_"))
+                return -EINVAL;
+
+        f = fopen("/usr/share/i18n/SUPPORTED", "re");
+        if (!f) {
+                if (errno == ENOENT)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                               "Unable to check validity of locale entry %s: /usr/share/i18n/SUPPORTED does not exist",
+                                               locale_entry);
+                return -errno;
+        }
+
+        for (;;) {
+                _cleanup_free_ char *line = NULL;
+
+                r = read_line(f, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to read /usr/share/i18n/SUPPORTED: %m");
+                if (r == 0)
+                        return 0;
+
+                line = strstrip(line);
+                if (strcaseeq_ptr(line, locale_entry))
+                        return 1;
+        }
+}
+#endif
+
+int locale_gen_enable_locale(const char *locale) {
+#if HAVE_LOCALEGEN
+        _cleanup_fclose_ FILE *fr = NULL, *fw = NULL;
+        _cleanup_(unlink_and_freep) char *temp_path = NULL;
+        _cleanup_free_ char *locale_entry = NULL;
+        bool locale_enabled = false, first_line = false;
+        bool write_new = false;
+        int r;
+
+        if (isempty(locale))
+                return 0;
+
+        if (locale_encoding_is_utf8_or_unspecified(locale)) {
+                locale_entry = strjoin(locale, " UTF-8");
+                if (!locale_entry)
+                        return -ENOMEM;
+        } else
+                return -ENOEXEC; /* We do not process non-UTF-8 locale */
+
+        r = locale_gen_locale_supported(locale_entry);
+        if (r == 0)
+                return -EINVAL;
+        if (r < 0 && r != -EOPNOTSUPP)
+                return r;
+
+        fr = fopen("/etc/locale.gen", "re");
+        if (!fr) {
+                if (errno != ENOENT)
+                        return -errno;
+                write_new = true;
+        }
+
+        r = fopen_temporary("/etc/locale.gen", &fw, &temp_path);
+        if (r < 0)
+                return r;
+
+        if (write_new)
+                (void) fchmod(fileno(fw), 0644);
+        else {
+                /* apply mode & xattrs of the original file to new file */
+                r = copy_access(fileno(fr), fileno(fw));
+                if (r < 0)
+                        return r;
+                r = copy_xattr(fileno(fr), fileno(fw), COPY_ALL_XATTRS);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to copy all xattrs from old to new /etc/locale.gen file, ignoring: %m");
+        }
+
+        if (!write_new) {
+                /* The config file ends with a line break, which we do not want to include before potentially appending a new locale
+                * instead of uncommenting an existing line. By prepending linebreaks, we can avoid buffering this file but can still write
+                * a nice config file without empty lines */
+                first_line = true;
+                for (;;) {
+                        _cleanup_free_ char *line = NULL;
+                        char *line_locale;
+
+                        r = read_line(fr, LONG_LINE_MAX, &line);
+                        if (r < 0)
+                                return r;
+                        if (r == 0)
+                                break;
+
+                        if (locale_enabled) {
+                                /* Just complete writing the file if the new locale was already enabled */
+                                if (!first_line)
+                                        fputc('\n', fw);
+                                fputs(line, fw);
+                                first_line = false;
+                                continue;
+                        }
+
+                        line = strstrip(line);
+                        if (isempty(line)) {
+                                fputc('\n', fw);
+                                first_line = false;
+                                continue;
+                        }
+
+                        line_locale = line;
+                        if (line_locale[0] == '#')
+                                line_locale = strstrip(line_locale + 1);
+                        else if (strcaseeq_ptr(line_locale, locale_entry))
+                                return 0; /* the file already had our locale activated, so skip updating it */
+
+                        if (strcaseeq_ptr(line_locale, locale_entry)) {
+                                /* Uncomment existing line for new locale */
+                                if (!first_line)
+                                        fputc('\n', fw);
+                                fputs(locale_entry, fw);
+                                locale_enabled = true;
+                                first_line = false;
+                                continue;
+                        }
+
+                        /* The line was not for the locale we want to enable, just copy it */
+                        if (!first_line)
+                                fputc('\n', fw);
+                        fputs(line, fw);
+                        first_line = false;
+                }
+        }
+
+        /* Add locale to enable to the end of the file if it was not found as commented line */
+        if (!locale_enabled) {
+                if (!write_new)
+                        fputc('\n', fw);
+                fputs(locale_entry, fw);
+        }
+        fputc('\n', fw);
+
+        r = fflush_sync_and_check(fw);
+        if (r < 0)
+                return r;
+
+        if (rename(temp_path, "/etc/locale.gen") < 0)
+                return -errno;
+        temp_path = mfree(temp_path);
+
+        return 0;
+#else
+        return -EOPNOTSUPP;
+#endif
+}
+
+int locale_gen_run(void) {
+#if HAVE_LOCALEGEN
+        pid_t pid;
+        int r;
+
+        r = safe_fork("(sd-localegen)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_WAIT, &pid);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                execl(LOCALEGEN_PATH, LOCALEGEN_PATH, NULL);
+                _exit(EXIT_FAILURE);
+        }
+
+        return 0;
+#else
+        return -EOPNOTSUPP;
+#endif
+}
diff --git a/src/locale/localed-util.h b/src/locale/localed-util.h
new file mode 100644
index 0000000..83d253c
--- /dev/null
+++ b/src/locale/localed-util.h
@@ -0,0 +1,72 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <sys/stat.h>
+
+#include "sd-bus.h"
+
+#include "hashmap.h"
+#include "locale-setup.h"
+
+typedef struct X11Context {
+        char *layout;
+        char *model;
+        char *variant;
+        char *options;
+} X11Context;
+
+typedef struct VCContext {
+        char *keymap;
+        char *toggle;
+} VCContext;
+
+typedef struct Context {
+        sd_bus_message *locale_cache;
+        LocaleContext locale_context;
+
+        sd_bus_message *x11_cache;
+        struct stat x11_stat;
+        X11Context x11_from_xorg;
+        X11Context x11_from_vc;
+
+        sd_bus_message *vc_cache;
+        struct stat vc_stat;
+        VCContext vc;
+
+        Hashmap *polkit_registry;
+} Context;
+
+void x11_context_clear(X11Context *xc);
+void x11_context_replace(X11Context *dest, X11Context *src);
+bool x11_context_isempty(const X11Context *xc);
+void x11_context_empty_to_null(X11Context *xc);
+bool x11_context_is_safe(const X11Context *xc);
+bool x11_context_equal(const X11Context *a, const X11Context *b);
+int x11_context_copy(X11Context *dest, const X11Context *src);
+
+X11Context *context_get_x11_context(Context *c);
+
+void vc_context_clear(VCContext *vc);
+void vc_context_replace(VCContext *dest, VCContext *src);
+bool vc_context_isempty(const VCContext *vc);
+void vc_context_empty_to_null(VCContext *vc);
+bool vc_context_equal(const VCContext *a, const VCContext *b);
+int vc_context_copy(VCContext *dest, const VCContext *src);
+
+int find_converted_keymap(const X11Context *xc, char **ret);
+int find_legacy_keymap(const X11Context *xc, char **ret);
+int find_language_fallback(const char *lang, char **ret);
+
+int locale_read_data(Context *c, sd_bus_message *m);
+int vconsole_read_data(Context *c, sd_bus_message *m);
+int x11_read_data(Context *c, sd_bus_message *m);
+
+void context_clear(Context *c);
+int vconsole_convert_to_x11(const VCContext *vc, X11Context *ret);
+int vconsole_write_data(Context *c);
+int x11_convert_to_vconsole(const X11Context *xc, VCContext *ret);
+int x11_write_data(Context *c);
+
+bool locale_gen_check_available(void);
+int locale_gen_enable_locale(const char *locale);
+int locale_gen_run(void);
diff --git a/src/locale/localed.c b/src/locale/localed.c
index c228385..841e5e3 100644
--- a/src/locale/localed.c
+++ b/src/locale/localed.c
@@ -17,11 +17,10 @@
 #include "bus-log-control-api.h"
 #include "bus-message.h"
 #include "bus-polkit.h"
-#include "def.h"
+#include "constants.h"
 #include "dlfcn-util.h"
 #include "kbd-util.h"
-#include "keymap-util.h"
-#include "locale-util.h"
+#include "localed-util.h"
 #include "macro.h"
 #include "main-func.h"
 #include "missing_capability.h"
@@ -33,63 +32,24 @@
 #include "strv.h"
 #include "user-util.h"
 
-static int locale_update_system_manager(Context *c, sd_bus *bus) {
-        _cleanup_free_ char **l_unset = NULL;
-        _cleanup_strv_free_ char **l_set = NULL;
+static int reload_system_manager(sd_bus *bus) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        size_t c_set = 0, c_unset = 0;
         int r;
 
         assert(bus);
 
-        l_unset = new0(char*, _VARIABLE_LC_MAX);
-        if (!l_unset)
-                return log_oom();
-
-        l_set = new0(char*, _VARIABLE_LC_MAX);
-        if (!l_set)
-                return log_oom();
-
-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
-                const char *name;
-
-                name = locale_variable_to_string(p);
-                assert(name);
-
-                if (isempty(c->locale[p]))
-                        l_unset[c_set++] = (char*) name;
-                else {
-                        char *s;
-
-                        s = strjoin(name, "=", c->locale[p]);
-                        if (!s)
-                                return log_oom();
-
-                        l_set[c_unset++] = s;
-                }
-        }
-
-        assert(c_set + c_unset == _VARIABLE_LC_MAX);
         r = sd_bus_message_new_method_call(bus, &m,
                         "org.freedesktop.systemd1",
                         "/org/freedesktop/systemd1",
                         "org.freedesktop.systemd1.Manager",
-                        "UnsetAndSetEnvironment");
-        if (r < 0)
-                return bus_log_create_error(r);
-
-        r = sd_bus_message_append_strv(m, l_unset);
-        if (r < 0)
-                return bus_log_create_error(r);
-
-        r = sd_bus_message_append_strv(m, l_set);
+                        "Reload");
         if (r < 0)
                 return bus_log_create_error(r);
 
         r = sd_bus_call(bus, m, 0, &error, NULL);
         if (r < 0)
-                return log_error_errno(r, "Failed to update the manager environment: %s", bus_error_message(&error, r));
+                return log_error_errno(r, "Failed to reload system manager: %s", bus_error_message(&error, r));
 
         return 0;
 }
@@ -115,58 +75,6 @@
         return 0;
 }
 
-static int vconsole_convert_to_x11_and_emit(Context *c, sd_bus_message *m) {
-        int r;
-
-        assert(m);
-
-        r = x11_read_data(c, m);
-        if (r < 0)
-                return r;
-
-        r = vconsole_convert_to_x11(c);
-        if (r <= 0)
-                return r;
-
-        /* modified */
-        r = x11_write_data(c);
-        if (r < 0)
-                return log_error_errno(r, "Failed to write X11 keyboard layout: %m");
-
-        sd_bus_emit_properties_changed(sd_bus_message_get_bus(m),
-                                       "/org/freedesktop/locale1",
-                                       "org.freedesktop.locale1",
-                                       "X11Layout", "X11Model", "X11Variant", "X11Options", NULL);
-
-        return 1;
-}
-
-static int x11_convert_to_vconsole_and_emit(Context *c, sd_bus_message *m) {
-        int r;
-
-        assert(m);
-
-        r = vconsole_read_data(c, m);
-        if (r < 0)
-                return r;
-
-        r = x11_convert_to_vconsole(c);
-        if (r <= 0)
-                return r;
-
-        /* modified */
-        r = vconsole_write_data(c);
-        if (r < 0)
-                log_error_errno(r, "Failed to save virtual console keymap: %m");
-
-        sd_bus_emit_properties_changed(sd_bus_message_get_bus(m),
-                                       "/org/freedesktop/locale1",
-                                       "org.freedesktop.locale1",
-                                       "VConsoleKeymap", "VConsoleKeymapToggle", NULL);
-
-        return vconsole_reload(sd_bus_message_get_bus(m));
-}
-
 static int property_get_locale(
                 sd_bus *bus,
                 const char *path,
@@ -176,7 +84,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         _cleanup_strv_free_ char **l = NULL;
         int r;
 
@@ -184,25 +92,9 @@
         if (r < 0)
                 return r;
 
-        l = new0(char*, _VARIABLE_LC_MAX+1);
-        if (!l)
-                return -ENOMEM;
-
-        for (LocaleVariable p = 0, q = 0; p < _VARIABLE_LC_MAX; p++) {
-                char *t;
-                const char *name;
-
-                name = locale_variable_to_string(p);
-                assert(name);
-
-                if (isempty(c->locale[p]))
-                        continue;
-
-                if (asprintf(&t, "%s=%s", name, c->locale[p]) < 0)
-                        return -ENOMEM;
-
-                l[q++] = t;
-        }
+        r = locale_context_build_env(&c->locale_context, &l, NULL);
+        if (r < 0)
+                return r;
 
         return sd_bus_message_append_strv(reply, l);
 }
@@ -216,17 +108,19 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         int r;
 
+        assert(property);
+
         r = vconsole_read_data(c, reply);
         if (r < 0)
                 return r;
 
         if (streq(property, "VConsoleKeymap"))
-                return sd_bus_message_append_basic(reply, 's', c->vc_keymap);
-        else if (streq(property, "VConsoleKeymapToggle"))
-                return sd_bus_message_append_basic(reply, 's', c->vc_keymap_toggle);
+                return sd_bus_message_append_basic(reply, 's', c->vc.keymap);
+        if (streq(property, "VConsoleKeymapToggle"))
+                return sd_bus_message_append_basic(reply, 's', c->vc.toggle);
 
         return -EINVAL;
 }
@@ -240,21 +134,30 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
+        const X11Context *xc;
         int r;
 
+        assert(property);
+
+        r = vconsole_read_data(c, reply);
+        if (r < 0)
+                return r;
+
         r = x11_read_data(c, reply);
         if (r < 0)
                 return r;
 
+        xc = context_get_x11_context(c);
+
         if (streq(property, "X11Layout"))
-                return sd_bus_message_append_basic(reply, 's', c->x11_layout);
-        else if (streq(property, "X11Model"))
-                return sd_bus_message_append_basic(reply, 's', c->x11_model);
-        else if (streq(property, "X11Variant"))
-                return sd_bus_message_append_basic(reply, 's', c->x11_variant);
-        else if (streq(property, "X11Options"))
-                return sd_bus_message_append_basic(reply, 's', c->x11_options);
+                return sd_bus_message_append_basic(reply, 's', xc->layout);
+        if (streq(property, "X11Model"))
+                return sd_bus_message_append_basic(reply, 's', xc->model);
+        if (streq(property, "X11Variant"))
+                return sd_bus_message_append_basic(reply, 's', xc->variant);
+        if (streq(property, "X11Options"))
+                return sd_bus_message_append_basic(reply, 's', xc->options);
 
         return -EINVAL;
 }
@@ -299,9 +202,9 @@
         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Locale assignment %s not valid, refusing.", assignment);
 }
 
-static int locale_gen_process_locale(char *new_locale[static _VARIABLE_LC_MAX],
-                                     sd_bus_error *error) {
+static int locale_gen_process_locale(char *new_locale[static _VARIABLE_LC_MAX], sd_bus_error *error) {
         int r;
+
         assert(new_locale);
 
         for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
@@ -319,13 +222,15 @@
                                                  SD_BUS_ERROR_INVALID_ARGS,
                                                  "Specified locale is not installed and non-UTF-8 locale will not be auto-generated: %s",
                                                  new_locale[p]);
-                } else if (r == -EINVAL) {
+                }
+                if (r == -EINVAL) {
                         log_error_errno(r, "Failed to enable invalid locale %s for generation.", new_locale[p]);
                         return sd_bus_error_setf(error,
                                                  SD_BUS_ERROR_INVALID_ARGS,
                                                  "Can not enable locale generation for invalid locale: %s",
                                                  new_locale[p]);
-                } else if (r < 0) {
+                }
+                if (r < 0) {
                         log_error_errno(r, "Failed to enable locale for generation: %m");
                         return sd_bus_error_set_errnof(error, r, "Failed to enable locale generation: %m");
                 }
@@ -342,23 +247,20 @@
 
 static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *error) {
         _cleanup_(locale_variables_freep) char *new_locale[_VARIABLE_LC_MAX] = {};
-        _cleanup_strv_free_ char **settings = NULL, **l = NULL;
-        Context *c = userdata;
-        bool modified = false;
+        _cleanup_strv_free_ char **l = NULL, **l_set = NULL, **l_unset = NULL;
+        Context *c = ASSERT_PTR(userdata);
         int interactive, r;
-        char **i;
         bool use_localegen;
 
         assert(m);
-        assert(c);
 
         r = sd_bus_message_read_strv(m, &l);
         if (r < 0)
-                return r;
+                return bus_log_parse_error(r);
 
         r = sd_bus_message_read_basic(m, 'b', &interactive);
         if (r < 0)
-                return r;
+                return bus_log_parse_error(r);
 
         use_localegen = locale_gen_check_available();
 
@@ -371,7 +273,7 @@
 
                 new_locale[VARIABLE_LANG] = strdup(l[0]);
                 if (!new_locale[VARIABLE_LANG])
-                        return -ENOMEM;
+                        return log_oom();
 
                 l = strv_free(l);
         }
@@ -403,22 +305,13 @@
         }
 
         /* Merge with the current settings */
-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
-                if (!isempty(c->locale[p]) && isempty(new_locale[p])) {
-                        new_locale[p] = strdup(c->locale[p]);
-                        if (!new_locale[p])
-                                return -ENOMEM;
-                }
+        r = locale_context_merge(&c->locale_context, new_locale);
+        if (r < 0)
+                return log_oom();
 
-        locale_simplify(new_locale);
+        locale_variables_simplify(new_locale);
 
-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
-                if (!streq_ptr(c->locale[p], new_locale[p])) {
-                        modified = true;
-                        break;
-                }
-
-        if (!modified) {
+        if (locale_context_equal(&c->locale_context, new_locale)) {
                 log_debug("Locale settings were not modified.");
                 return sd_bus_reply_method_return(m, NULL);
         }
@@ -444,22 +337,25 @@
                         return r;
         }
 
-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
-                free_and_replace(c->locale[p], new_locale[p]);
+        locale_context_take(&c->locale_context, new_locale);
 
         /* Write locale configuration */
-        r = locale_write_data(c, &settings);
+        r = locale_context_save(&c->locale_context, &l_set, &l_unset);
         if (r < 0) {
                 log_error_errno(r, "Failed to set locale: %m");
                 return sd_bus_error_set_errnof(error, r, "Failed to set locale: %m");
         }
 
-        (void) locale_update_system_manager(c, sd_bus_message_get_bus(m));
+        /* Since we just updated the locale configuration file, ask the system manager to read it again to
+         * update its default locale settings. It's important to not use UnsetAndSetEnvironment or a similar
+         * method because in this case unsetting variables means restoring them to PID1 default values, which
+         * may be outdated, since locale.conf has just changed and PID1 hasn't read it */
+        (void) reload_system_manager(sd_bus_message_get_bus(m));
 
-        if (settings) {
+        if (!strv_isempty(l_set)) {
                 _cleanup_free_ char *line = NULL;
 
-                line = strv_join(settings, ", ");
+                line = strv_join(l_set, ", ");
                 log_info("Changed locale to %s.", strnull(line));
         } else
                 log_info("Changed locale to unset.");
@@ -474,27 +370,21 @@
 }
 
 static int method_set_vc_keyboard(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        Context *c = userdata;
-        const char *name, *keymap, *keymap_toggle;
+        _cleanup_(x11_context_clear) X11Context converted = {};
+        Context *c = ASSERT_PTR(userdata);
         int convert, interactive, r;
+        bool x_needs_update;
+        VCContext in;
 
         assert(m);
-        assert(c);
 
-        r = sd_bus_message_read(m, "ssbb", &keymap, &keymap_toggle, &convert, &interactive);
+        r = sd_bus_message_read(m, "ssbb", &in.keymap, &in.toggle, &convert, &interactive);
         if (r < 0)
-                return r;
+                return bus_log_parse_error(r);
 
-        keymap = empty_to_null(keymap);
-        keymap_toggle = empty_to_null(keymap_toggle);
+        vc_context_empty_to_null(&in);
 
-        r = vconsole_read_data(c, m);
-        if (r < 0) {
-                log_error_errno(r, "Failed to read virtual console keymap data: %m");
-                return sd_bus_error_set_errnof(error, r, "Failed to read virtual console keymap data: %m");
-        }
-
-        FOREACH_STRING(name, keymap ?: keymap_toggle, keymap ? keymap_toggle : NULL) {
+        FOREACH_STRING(name, in.keymap ?: in.toggle, in.keymap ? in.toggle : NULL) {
                 r = keymap_exists(name); /* This also verifies that the keymap name is kosher. */
                 if (r < 0) {
                         log_error_errno(r, "Failed to check keymap %s: %m", name);
@@ -504,8 +394,37 @@
                         return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Keymap %s is not installed.", name);
         }
 
-        if (streq_ptr(keymap, c->vc_keymap) &&
-            streq_ptr(keymap_toggle, c->vc_keymap_toggle))
+        r = vconsole_read_data(c, m);
+        if (r < 0) {
+                log_error_errno(r, "Failed to read virtual console keymap data: %m");
+                return sd_bus_error_set_errnof(error, r, "Failed to read virtual console keymap data: %m");
+        }
+
+        r = x11_read_data(c, m);
+        if (r < 0) {
+                log_error_errno(r, "Failed to read X11 keyboard layout data: %m");
+                return sd_bus_error_set_errnof(error, r, "Failed to read X11 keyboard layout data: %m");
+        }
+
+        if (convert) {
+                r = vconsole_convert_to_x11(&in, &converted);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to convert keymap data: %m");
+                        return sd_bus_error_set_errnof(error, r, "Failed to convert keymap data: %m");
+                }
+
+                if (x11_context_isempty(&converted))
+                        log_notice("No conversion found for virtual console keymap \"%s\".", strempty(in.keymap));
+                else
+                        log_info("The virtual console keymap '%s' is converted to X11 keyboard layout '%s' model '%s' variant '%s' options '%s'",
+                                 in.keymap, strempty(converted.layout), strempty(converted.model), strempty(converted.variant), strempty(converted.options));
+
+                /* save the result of conversion to emit changed properties later. */
+                x_needs_update = !x11_context_equal(&c->x11_from_vc, &converted) || !x11_context_equal(&c->x11_from_xorg, &converted);
+        } else
+                x_needs_update = !x11_context_equal(&c->x11_from_vc, &c->x11_from_xorg);
+
+        if (vc_context_equal(&c->vc, &in) && !x_needs_update)
                 return sd_bus_reply_method_return(m, NULL);
 
         r = bus_verify_polkit_async(
@@ -522,18 +441,42 @@
         if (r == 0)
                 return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
 
-        if (free_and_strdup(&c->vc_keymap, keymap) < 0 ||
-            free_and_strdup(&c->vc_keymap_toggle, keymap_toggle) < 0)
-                return -ENOMEM;
+        r = vc_context_copy(&c->vc, &in);
+        if (r < 0)
+                return log_oom();
+
+        if (x_needs_update) {
+                if (convert) {
+                        r = x11_context_copy(&c->x11_from_vc, &converted);
+                        if (r < 0)
+                                return log_oom();
+                        x11_context_replace(&c->x11_from_xorg, &converted);
+                } else {
+                        const X11Context *xc = context_get_x11_context(c);
+
+                        /* Even if the conversion is not requested, sync the two X11 contexts. */
+                        r = x11_context_copy(&c->x11_from_vc, xc);
+                        if (r < 0)
+                                return log_oom();
+
+                        r = x11_context_copy(&c->x11_from_xorg, xc);
+                        if (r < 0)
+                                return log_oom();
+                }
+        }
 
         r = vconsole_write_data(c);
-        if (r < 0) {
-                log_error_errno(r, "Failed to set virtual console keymap: %m");
-                return sd_bus_error_set_errnof(error, r, "Failed to set virtual console keymap: %m");
+        if (r < 0)
+                log_warning_errno(r, "Failed to write virtual console keymap, ignoring: %m");
+
+        if (x_needs_update) {
+                r = x11_write_data(c);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to write X11 keyboard layout, ignoring: %m");
         }
 
         log_info("Changed virtual console keymap to '%s' toggle '%s'",
-                 strempty(c->vc_keymap), strempty(c->vc_keymap_toggle));
+                 strempty(c->vc.keymap), strempty(c->vc.toggle));
 
         (void) vconsole_reload(sd_bus_message_get_bus(m));
 
@@ -541,13 +484,12 @@
                         sd_bus_message_get_bus(m),
                         "/org/freedesktop/locale1",
                         "org.freedesktop.locale1",
-                        "VConsoleKeymap", "VConsoleKeymapToggle", NULL);
-
-        if (convert) {
-                r = vconsole_convert_to_x11_and_emit(c, m);
-                if (r < 0)
-                        log_error_errno(r, "Failed to convert keymap data: %m");
-        }
+                        "VConsoleKeymap", "VConsoleKeymapToggle",
+                        x_needs_update ? "X11Layout"  : NULL,
+                        x_needs_update ? "X11Model"   : NULL,
+                        x_needs_update ? "X11Variant" : NULL,
+                        x_needs_update ? "X11Options" : NULL,
+                        NULL);
 
         return sd_bus_reply_method_return(m, NULL);
 }
@@ -654,21 +596,37 @@
 #endif
 
 static int method_set_x11_keyboard(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        Context *c = userdata;
-        const char *layout, *model, *variant, *options;
+        _cleanup_(vc_context_clear) VCContext converted = {};
+        Context *c = ASSERT_PTR(userdata);
         int convert, interactive, r;
+        X11Context in;
 
         assert(m);
-        assert(c);
 
-        r = sd_bus_message_read(m, "ssssbb", &layout, &model, &variant, &options, &convert, &interactive);
+        r = sd_bus_message_read(m, "ssssbb", &in.layout, &in.model, &in.variant, &in.options, &convert, &interactive);
         if (r < 0)
-                return r;
+                return bus_log_parse_error(r);
 
-        layout = empty_to_null(layout);
-        model = empty_to_null(model);
-        variant = empty_to_null(variant);
-        options = empty_to_null(options);
+        x11_context_empty_to_null(&in);
+
+        if (!x11_context_is_safe(&in))
+                return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Received invalid keyboard data");
+
+        r = verify_xkb_rmlvo(in.model, in.layout, in.variant, in.options);
+        if (r == -EOPNOTSUPP)
+                log_notice_errno(r, "Cannot verify if new keymap is correct, libxkbcommon.so unavailable.");
+        else if (r < 0) {
+                log_error_errno(r, "Cannot compile XKB keymap for new x11 keyboard layout ('%s' / '%s' / '%s' / '%s'): %m",
+                               strempty(in.model), strempty(in.layout), strempty(in.variant), strempty(in.options));
+                return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS,
+                                        "Specified keymap cannot be compiled, refusing as invalid.");
+        }
+
+        r = vconsole_read_data(c, m);
+        if (r < 0) {
+                log_error_errno(r, "Failed to read virtual console keymap data: %m");
+                return sd_bus_error_set_errnof(error, r, "Failed to read virtual console keymap data: %m");
+        }
 
         r = x11_read_data(c, m);
         if (r < 0) {
@@ -676,29 +634,29 @@
                 return sd_bus_error_set(error, SD_BUS_ERROR_FAILED, "Failed to read x11 keyboard layout data");
         }
 
-        if (streq_ptr(layout, c->x11_layout) &&
-            streq_ptr(model, c->x11_model) &&
-            streq_ptr(variant, c->x11_variant) &&
-            streq_ptr(options, c->x11_options))
-                return sd_bus_reply_method_return(m, NULL);
+        if (convert) {
+                r = x11_convert_to_vconsole(&in, &converted);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to convert keymap data: %m");
+                        return sd_bus_error_set_errnof(error, r, "Failed to convert keymap data: %m");
+                }
 
-        if ((layout && !string_is_safe(layout)) ||
-            (model && !string_is_safe(model)) ||
-            (variant && !string_is_safe(variant)) ||
-            (options && !string_is_safe(options)))
-                return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Received invalid keyboard data");
+                if (vc_context_isempty(&converted))
+                        /* We search for layout-variant match first, but then we also look
+                         * for anything which matches just the layout. So it's accurate to say
+                         * that we couldn't find anything which matches the layout. */
+                        log_notice("No conversion to virtual console map found for \"%s\".", strempty(in.layout));
+                else
+                        log_info("The X11 keyboard layout '%s' is converted to virtual console keymap '%s'",
+                                 in.layout, converted.keymap);
 
-        r = verify_xkb_rmlvo(model, layout, variant, options);
-        if (r < 0) {
-                log_error_errno(r, "Cannot compile XKB keymap for new x11 keyboard layout ('%s' / '%s' / '%s' / '%s'): %m",
-                                strempty(model), strempty(layout), strempty(variant), strempty(options));
-
-                if (r == -EOPNOTSUPP)
-                        return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Local keyboard configuration not supported on this system.");
-
-                return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Specified keymap cannot be compiled, refusing as invalid.");
+                /* save the result of conversion to emit changed properties later. */
+                convert = !vc_context_equal(&c->vc, &converted);
         }
 
+        if (x11_context_equal(&c->x11_from_vc, &in) && x11_context_equal(&c->x11_from_xorg, &in) && !convert)
+                return sd_bus_reply_method_return(m, NULL);
+
         r = bus_verify_polkit_async(
                         m,
                         CAP_SYS_ADMIN,
@@ -713,35 +671,42 @@
         if (r == 0)
                 return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
 
-        if (free_and_strdup(&c->x11_layout, layout) < 0 ||
-            free_and_strdup(&c->x11_model, model) < 0 ||
-            free_and_strdup(&c->x11_variant, variant) < 0 ||
-            free_and_strdup(&c->x11_options, options) < 0)
-                return -ENOMEM;
+        r = x11_context_copy(&c->x11_from_vc, &in);
+        if (r < 0)
+                return log_oom();
+
+        r = x11_context_copy(&c->x11_from_xorg, &in);
+        if (r < 0)
+                return log_oom();
+
+        if (convert)
+                vc_context_replace(&c->vc, &converted);
+
+        r = vconsole_write_data(c);
+        if (r < 0)
+                log_warning_errno(r, "Failed to update vconsole.conf, ignoring: %m");
 
         r = x11_write_data(c);
-        if (r < 0) {
-                log_error_errno(r, "Failed to set X11 keyboard layout: %m");
-                return sd_bus_error_set_errnof(error, r, "Failed to set X11 keyboard layout: %m");
-        }
+        if (r < 0)
+                log_warning_errno(r, "Failed to write X11 keyboard layout, ignoring: %m");
 
         log_info("Changed X11 keyboard layout to '%s' model '%s' variant '%s' options '%s'",
-                 strempty(c->x11_layout),
-                 strempty(c->x11_model),
-                 strempty(c->x11_variant),
-                 strempty(c->x11_options));
+                 strempty(in.layout),
+                 strempty(in.model),
+                 strempty(in.variant),
+                 strempty(in.options));
 
         (void) sd_bus_emit_properties_changed(
                         sd_bus_message_get_bus(m),
                         "/org/freedesktop/locale1",
                         "org.freedesktop.locale1",
-                        "X11Layout", "X11Model", "X11Variant", "X11Options", NULL);
+                        "X11Layout", "X11Model", "X11Variant", "X11Options",
+                        convert ? "VConsoleKeymap" : NULL,
+                        convert ? "VConsoleKeymapToggle" : NULL,
+                        NULL);
 
-        if (convert) {
-                r = x11_convert_to_vconsole_and_emit(c, m);
-                if (r < 0)
-                        log_error_errno(r, "Failed to convert keymap data: %m");
-        }
+        if (convert)
+                (void) vconsole_reload(sd_bus_message_get_bus(m));
 
         return sd_bus_reply_method_return(m, NULL);
 }
@@ -827,11 +792,7 @@
 }
 
 static int run(int argc, char *argv[]) {
-        _cleanup_(context_clear) Context context = {
-                .locale_mtime = USEC_INFINITY,
-                .vc_mtime = USEC_INFINITY,
-                .x11_mtime = USEC_INFINITY,
-        };
+        _cleanup_(context_clear) Context context = {};
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r;
diff --git a/src/locale/meson.build b/src/locale/meson.build
index 757d445..fcf2798 100644
--- a/src/locale/meson.build
+++ b/src/locale/meson.build
@@ -1,10 +1,9 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_localed_sources = files('''
-        localed.c
-        keymap-util.c
-        keymap-util.h
-'''.split())
+systemd_localed_sources = files(
+        'localed-util.c',
+        'localed.c',
+)
 
 localectl_sources = files('localectl.c')
 
@@ -20,8 +19,8 @@
 # If you know a way that allows the same variables to be used
 # in sources list and concatenated to a string for test_env,
 # let me know.
-kbd_model_map = join_paths(meson.current_source_dir(), 'kbd-model-map')
-language_fallback_map = join_paths(meson.current_source_dir(), 'language-fallback-map')
+kbd_model_map = meson.current_source_dir() / 'kbd-model-map'
+language_fallback_map = meson.current_source_dir() / 'language-fallback-map'
 
 if conf.get('ENABLE_LOCALED') == 1
         install_data('kbd-model-map',
@@ -30,7 +29,6 @@
 endif
 
 tests += [
-        [['src/locale/test-keymap-util.c',
-          'src/locale/keymap-util.c',
-          'src/locale/keymap-util.h']],
+        [files('test-localed-util.c',
+               'localed-util.c')],
 ]
diff --git a/src/locale/org.freedesktop.locale1.conf b/src/locale/org.freedesktop.locale1.conf
index a090557..04813b2 100644
--- a/src/locale/org.freedesktop.locale1.conf
+++ b/src/locale/org.freedesktop.locale1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/locale/org.freedesktop.locale1.policy b/src/locale/org.freedesktop.locale1.policy
index ed98c4a..553e31d 100644
--- a/src/locale/org.freedesktop.locale1.policy
+++ b/src/locale/org.freedesktop.locale1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/locale/test-keymap-util.c b/src/locale/test-keymap-util.c
deleted file mode 100644
index f726e8e..0000000
--- a/src/locale/test-keymap-util.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "alloc-util.h"
-#include "keymap-util.h"
-#include "log.h"
-#include "string-util.h"
-#include "tests.h"
-
-static void test_find_language_fallback(void) {
-        _cleanup_free_ char *ans = NULL, *ans2 = NULL;
-
-        log_info("/*** %s ***/", __func__);
-
-        assert_se(find_language_fallback("foobar", &ans) == 0);
-        assert_se(ans == NULL);
-
-        assert_se(find_language_fallback("csb", &ans) == 0);
-        assert_se(ans == NULL);
-
-        assert_se(find_language_fallback("csb_PL", &ans) == 1);
-        assert_se(streq(ans, "csb:pl"));
-
-        assert_se(find_language_fallback("szl_PL", &ans2) == 1);
-        assert_se(streq(ans2, "szl:pl"));
-}
-
-static void test_find_converted_keymap(void) {
-        _cleanup_free_ char *ans = NULL, *ans2 = NULL;
-        int r;
-
-        log_info("/*** %s ***/", __func__);
-
-        assert_se(find_converted_keymap("pl", "foobar", &ans) == 0);
-        assert_se(ans == NULL);
-
-        r = find_converted_keymap("pl", NULL, &ans);
-        if (r == 0) {
-                log_info("Skipping rest of %s: keymaps are not installed", __func__);
-                return;
-        }
-
-        assert_se(r == 1);
-        assert_se(streq(ans, "pl"));
-
-        assert_se(find_converted_keymap("pl", "dvorak", &ans2) == 1);
-        assert_se(streq(ans2, "pl-dvorak"));
-}
-
-static void test_find_legacy_keymap(void) {
-        Context c = {};
-        _cleanup_free_ char *ans = NULL, *ans2 = NULL;
-
-        log_info("/*** %s ***/", __func__);
-
-        c.x11_layout = (char*) "foobar";
-        assert_se(find_legacy_keymap(&c, &ans) == 0);
-        assert_se(ans == NULL);
-
-        c.x11_layout = (char*) "pl";
-        assert_se(find_legacy_keymap(&c, &ans) == 1);
-        assert_se(streq(ans, "pl2"));
-
-        c.x11_layout = (char*) "pl,ru";
-        assert_se(find_legacy_keymap(&c, &ans2) == 1);
-        assert_se(streq(ans, "pl2"));
-}
-
-static void test_vconsole_convert_to_x11(void) {
-        _cleanup_(context_clear) Context c = {};
-
-        log_info("/*** %s ***/", __func__);
-
-        log_info("/* test emptying first (:) */");
-        assert_se(free_and_strdup(&c.x11_layout, "foo") >= 0);
-        assert_se(free_and_strdup(&c.x11_variant, "bar") >= 0);
-        assert_se(vconsole_convert_to_x11(&c) == 1);
-        assert_se(c.x11_layout == NULL);
-        assert_se(c.x11_variant == NULL);
-
-        log_info("/* test emptying second (:) */");
-
-        assert_se(vconsole_convert_to_x11(&c) == 0);
-        assert_se(c.x11_layout == NULL);
-        assert_se(c.x11_variant == NULL);
-
-        log_info("/* test without variant, new mapping (es:) */");
-        assert_se(free_and_strdup(&c.vc_keymap, "es") >= 0);
-
-        assert_se(vconsole_convert_to_x11(&c) == 1);
-        assert_se(streq(c.x11_layout, "es"));
-        assert_se(c.x11_variant == NULL);
-
-        log_info("/* test with known variant, new mapping (es:dvorak) */");
-        assert_se(free_and_strdup(&c.vc_keymap, "es-dvorak") >= 0);
-
-        assert_se(vconsole_convert_to_x11(&c) == 1);
-        assert_se(streq(c.x11_layout, "es"));
-        assert_se(streq(c.x11_variant, "dvorak"));
-
-        log_info("/* test with old mapping (fr:latin9) */");
-        assert_se(free_and_strdup(&c.vc_keymap, "fr-latin9") >= 0);
-
-        assert_se(vconsole_convert_to_x11(&c) == 1);
-        assert_se(streq(c.x11_layout, "fr"));
-        assert_se(streq(c.x11_variant, "latin9"));
-
-        log_info("/* test with a compound mapping (ru,us) */");
-        assert_se(free_and_strdup(&c.vc_keymap, "ru") >= 0);
-
-        assert_se(vconsole_convert_to_x11(&c) == 1);
-        assert_se(streq(c.x11_layout, "ru,us"));
-        assert_se(c.x11_variant == NULL);
-
-        log_info("/* test with a simple mapping (us) */");
-        assert_se(free_and_strdup(&c.vc_keymap, "us") >= 0);
-
-        assert_se(vconsole_convert_to_x11(&c) == 1);
-        assert_se(streq(c.x11_layout, "us"));
-        assert_se(c.x11_variant == NULL);
-}
-
-static void test_x11_convert_to_vconsole(void) {
-        _cleanup_(context_clear) Context c = {};
-        int r;
-
-        log_info("/*** %s ***/", __func__);
-
-        log_info("/* test emptying first (:) */");
-        assert_se(free_and_strdup(&c.vc_keymap, "foobar") >= 0);
-        assert_se(x11_convert_to_vconsole(&c) == 1);
-        assert_se(c.vc_keymap == NULL);
-
-        log_info("/* test emptying second (:) */");
-
-        assert_se(x11_convert_to_vconsole(&c) == 0);
-        assert_se(c.vc_keymap == NULL);
-
-        log_info("/* test without variant, new mapping (es:) */");
-        assert_se(free_and_strdup(&c.x11_layout, "es") >= 0);
-
-        assert_se(x11_convert_to_vconsole(&c) == 1);
-        assert_se(streq(c.vc_keymap, "es"));
-
-        log_info("/* test with unknown variant, new mapping (es:foobar) */");
-        assert_se(free_and_strdup(&c.x11_variant, "foobar") >= 0);
-
-        assert_se(x11_convert_to_vconsole(&c) == 0);
-        assert_se(streq(c.vc_keymap, "es"));
-
-        log_info("/* test with known variant, new mapping (es:dvorak) */");
-        assert_se(free_and_strdup(&c.x11_variant, "dvorak") >= 0);
-
-        r = x11_convert_to_vconsole(&c);
-        if (r == 0) {
-                log_info("Skipping rest of %s: keymaps are not installed", __func__);
-                return;
-        }
-
-        assert_se(r == 1);
-        assert_se(streq(c.vc_keymap, "es-dvorak"));
-
-        log_info("/* test with old mapping (fr:latin9) */");
-        assert_se(free_and_strdup(&c.x11_layout, "fr") >= 0);
-        assert_se(free_and_strdup(&c.x11_variant, "latin9") >= 0);
-
-        assert_se(x11_convert_to_vconsole(&c) == 1);
-        assert_se(streq(c.vc_keymap, "fr-latin9"));
-
-        log_info("/* test with a compound mapping (us,ru:) */");
-        assert_se(free_and_strdup(&c.x11_layout, "us,ru") >= 0);
-        assert_se(free_and_strdup(&c.x11_variant, NULL) >= 0);
-
-        assert_se(x11_convert_to_vconsole(&c) == 1);
-        assert_se(streq(c.vc_keymap, "us"));
-
-        log_info("/* test with a compound mapping (ru,us:) */");
-        assert_se(free_and_strdup(&c.x11_layout, "ru,us") >= 0);
-        assert_se(free_and_strdup(&c.x11_variant, NULL) >= 0);
-
-        assert_se(x11_convert_to_vconsole(&c) == 1);
-        assert_se(streq(c.vc_keymap, "ru"));
-
-        /* https://bugzilla.redhat.com/show_bug.cgi?id=1333998 */
-        log_info("/* test with a simple new mapping (ru:) */");
-        assert_se(free_and_strdup(&c.x11_layout, "ru") >= 0);
-        assert_se(free_and_strdup(&c.x11_variant, NULL) >= 0);
-
-        assert_se(x11_convert_to_vconsole(&c) == 0);
-        assert_se(streq(c.vc_keymap, "ru"));
-}
-
-int main(int argc, char **argv) {
-        _cleanup_free_ char *map = NULL;
-
-        test_setup_logging(LOG_DEBUG);
-
-        test_find_language_fallback();
-        test_find_converted_keymap();
-
-        assert_se(get_testdata_dir("test-keymap-util/kbd-model-map", &map) >= 0);
-        assert_se(setenv("SYSTEMD_KBD_MODEL_MAP", map, 1) == 0);
-
-        test_find_legacy_keymap();
-        test_vconsole_convert_to_x11();
-        test_x11_convert_to_vconsole();
-
-        return 0;
-}
diff --git a/src/locale/test-localed-util.c b/src/locale/test-localed-util.c
new file mode 100644
index 0000000..f57c9ba
--- /dev/null
+++ b/src/locale/test-localed-util.c
@@ -0,0 +1,184 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "localed-util.h"
+#include "log.h"
+#include "string-util.h"
+#include "tests.h"
+
+TEST(find_language_fallback) {
+        _cleanup_free_ char *ans = NULL, *ans2 = NULL;
+
+        assert_se(find_language_fallback("foobar", &ans) == 0);
+        assert_se(ans == NULL);
+
+        assert_se(find_language_fallback("csb", &ans) == 0);
+        assert_se(ans == NULL);
+
+        assert_se(find_language_fallback("csb_PL", &ans) == 1);
+        assert_se(streq(ans, "csb:pl"));
+
+        assert_se(find_language_fallback("szl_PL", &ans2) == 1);
+        assert_se(streq(ans2, "szl:pl"));
+}
+
+TEST(find_converted_keymap) {
+        _cleanup_free_ char *ans = NULL, *ans2 = NULL;
+        int r;
+
+        assert_se(find_converted_keymap(
+                        &(X11Context) {
+                                .layout  = (char*) "pl",
+                                .variant = (char*) "foobar",
+                        }, &ans) == 0);
+        assert_se(ans == NULL);
+
+        r = find_converted_keymap(
+                        &(X11Context) {
+                                .layout  = (char*) "pl",
+                        }, &ans);
+        if (r == 0) {
+                log_info("Skipping rest of %s: keymaps are not installed", __func__);
+                return;
+        }
+
+        assert_se(r == 1);
+        assert_se(streq(ans, "pl"));
+
+        assert_se(find_converted_keymap(
+                        &(X11Context) {
+                                .layout  = (char*) "pl",
+                                .variant = (char*) "dvorak",
+                        }, &ans2) == 1);
+        assert_se(streq(ans2, "pl-dvorak"));
+}
+
+TEST(find_legacy_keymap) {
+        X11Context xc = {};
+        _cleanup_free_ char *ans = NULL, *ans2 = NULL;
+
+        xc.layout = (char*) "foobar";
+        assert_se(find_legacy_keymap(&xc, &ans) == 0);
+        assert_se(ans == NULL);
+
+        xc.layout = (char*) "pl";
+        assert_se(find_legacy_keymap(&xc, &ans) == 1);
+        assert_se(streq(ans, "pl2"));
+
+        xc.layout = (char*) "pl,ru";
+        assert_se(find_legacy_keymap(&xc, &ans2) == 1);
+        assert_se(streq(ans, "pl2"));
+}
+
+TEST(vconsole_convert_to_x11) {
+        _cleanup_(x11_context_clear) X11Context xc = {};
+        _cleanup_(vc_context_clear) VCContext vc = {};
+
+        log_info("/* test empty keymap */");
+        assert_se(vconsole_convert_to_x11(&vc, &xc) >= 0);
+        assert_se(x11_context_isempty(&xc));
+
+        log_info("/* test without variant, new mapping (es:) */");
+        assert_se(free_and_strdup(&vc.keymap, "es") >= 0);
+        assert_se(vconsole_convert_to_x11(&vc, &xc) >= 0);
+        assert_se(streq(xc.layout, "es"));
+        assert_se(xc.variant == NULL);
+        x11_context_clear(&xc);
+
+        log_info("/* test with known variant, new mapping (es:dvorak) */");
+        assert_se(free_and_strdup(&vc.keymap, "es-dvorak") >= 0);
+        assert_se(vconsole_convert_to_x11(&vc, &xc) >= 0);
+        assert_se(streq(xc.layout, "es"));
+        assert_se(streq(xc.variant, "dvorak"));
+        x11_context_clear(&xc);
+
+        log_info("/* test with old mapping (fr:latin9) */");
+        assert_se(free_and_strdup(&vc.keymap, "fr-latin9") >= 0);
+        assert_se(vconsole_convert_to_x11(&vc, &xc) >= 0);
+        assert_se(streq(xc.layout, "fr"));
+        assert_se(streq(xc.variant, "latin9"));
+        x11_context_clear(&xc);
+
+        log_info("/* test with a compound mapping (ru,us) */");
+        assert_se(free_and_strdup(&vc.keymap, "ru") >= 0);
+        assert_se(vconsole_convert_to_x11(&vc, &xc) >= 0);
+        assert_se(streq(xc.layout, "ru,us"));
+        assert_se(xc.variant == NULL);
+        x11_context_clear(&xc);
+
+        log_info("/* test with a simple mapping (us) */");
+        assert_se(free_and_strdup(&vc.keymap, "us") >= 0);
+        assert_se(vconsole_convert_to_x11(&vc, &xc) >= 0);
+        assert_se(streq(xc.layout, "us"));
+        assert_se(xc.variant == NULL);
+}
+
+TEST(x11_convert_to_vconsole) {
+        _cleanup_(x11_context_clear) X11Context xc = {};
+        _cleanup_(vc_context_clear) VCContext vc = {};
+
+        log_info("/* test empty layout (:) */");
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        assert_se(vc_context_isempty(&vc));
+
+        log_info("/* test without variant, new mapping (es:) */");
+        assert_se(free_and_strdup(&xc.layout, "es") >= 0);
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        assert_se(streq(vc.keymap, "es"));
+        vc_context_clear(&vc);
+
+        log_info("/* test with unknown variant, new mapping (es:foobar) */");
+        assert_se(free_and_strdup(&xc.variant, "foobar") >= 0);
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        assert_se(streq(vc.keymap, "es"));
+        vc_context_clear(&vc);
+
+        log_info("/* test with known variant, new mapping (es:dvorak) */");
+        assert_se(free_and_strdup(&xc.variant, "dvorak") >= 0);
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        if (vc_context_isempty(&vc)) {
+                log_info("Skipping rest of %s: keymaps are not installed", __func__);
+                return;
+        }
+        assert_se(streq(vc.keymap, "es-dvorak"));
+        vc_context_clear(&vc);
+
+        log_info("/* test with old mapping (fr:latin9) */");
+        assert_se(free_and_strdup(&xc.layout, "fr") >= 0);
+        assert_se(free_and_strdup(&xc.variant, "latin9") >= 0);
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        assert_se(streq(vc.keymap, "fr-latin9"));
+        vc_context_clear(&vc);
+
+        log_info("/* test with a compound mapping (us,ru:) */");
+        assert_se(free_and_strdup(&xc.layout, "us,ru") >= 0);
+        assert_se(free_and_strdup(&xc.variant, NULL) >= 0);
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        assert_se(streq(vc.keymap, "us"));
+        vc_context_clear(&vc);
+
+        log_info("/* test with a compound mapping (ru,us:) */");
+        assert_se(free_and_strdup(&xc.layout, "ru,us") >= 0);
+        assert_se(free_and_strdup(&xc.variant, NULL) >= 0);
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        assert_se(streq(vc.keymap, "ru"));
+        vc_context_clear(&vc);
+
+        /* https://bugzilla.redhat.com/show_bug.cgi?id=1333998 */
+        log_info("/* test with a simple new mapping (ru:) */");
+        assert_se(free_and_strdup(&xc.layout, "ru") >= 0);
+        assert_se(free_and_strdup(&xc.variant, NULL) >= 0);
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        assert_se(streq(vc.keymap, "ru"));
+}
+
+static int intro(void) {
+        _cleanup_free_ char *map = NULL;
+
+        assert_se(get_testdata_dir("test-keymap-util/kbd-model-map", &map) >= 0);
+        assert_se(setenv("SYSTEMD_KBD_MODEL_MAP", map, 1) == 0);
+
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/login/70-uaccess.rules.in b/src/login/70-uaccess.rules.in
deleted file mode 100644
index a3301be..0000000
--- a/src/login/70-uaccess.rules.in
+++ /dev/null
@@ -1,99 +0,0 @@
-#  SPDX-License-Identifier: LGPL-2.1-or-later
-#
-#  This file is part of systemd.
-#
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
-
-ACTION=="remove", GOTO="uaccess_end"
-ENV{MAJOR}=="", GOTO="uaccess_end"
-
-# PTP/MTP protocol devices, cameras, portable media players
-SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:060101:*", TAG+="uaccess"
-
-# Digicams with proprietary protocol
-ENV{ID_GPHOTO2}=="?*", TAG+="uaccess"
-
-# SCSI and USB scanners
-ENV{libsane_matched}=="yes", TAG+="uaccess"
-
-# HPLIP devices (necessary for ink level check and HP tool maintenance)
-ENV{ID_HPLIP}=="1", TAG+="uaccess"
-
-# optical drives
-SUBSYSTEM=="block", ENV{ID_CDROM}=="1", TAG+="uaccess"
-SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", TAG+="uaccess"
-
-# Sound devices
-SUBSYSTEM=="sound", TAG+="uaccess", \
-  OPTIONS+="static_node=snd/timer", OPTIONS+="static_node=snd/seq"
-
-# Webcams, frame grabber, TV cards
-SUBSYSTEM=="video4linux", TAG+="uaccess"
-SUBSYSTEM=="dvb", TAG+="uaccess"
-SUBSYSTEM=="media", TAG+="uaccess"
-
-# industrial cameras, some webcams, camcorders, set-top boxes, TV sets, audio devices, and more
-SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_MIDI}=="1", TAG+="uaccess"
-SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_AUDIO}=="1", TAG+="uaccess"
-SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_VIDEO}=="1", TAG+="uaccess"
-
-# DRI video devices
-SUBSYSTEM=="drm", KERNEL=="card*", TAG+="uaccess"
-{% if GROUP_RENDER_UACCESS %}
-# DRI render nodes
-SUBSYSTEM=="drm", KERNEL=="renderD*", TAG+="uaccess"
-{% endif %}
-{% if DEV_KVM_UACCESS %}
-# KVM
-SUBSYSTEM=="misc", KERNEL=="kvm", TAG+="uaccess"
-{% endif %}
-
-# smart-card readers
-ENV{ID_SMARTCARD_READER}=="?*", TAG+="uaccess"
-
-# (USB) authentication devices
-ENV{ID_SECURITY_TOKEN}=="?*", TAG+="uaccess"
-
-# PDA devices
-ENV{ID_PDA}=="?*", TAG+="uaccess"
-
-# Programmable remote control
-ENV{ID_REMOTE_CONTROL}=="1", TAG+="uaccess"
-
-# joysticks
-SUBSYSTEM=="input", ENV{ID_INPUT_JOYSTICK}=="?*", TAG+="uaccess"
-
-# color measurement devices
-ENV{COLOR_MEASUREMENT_DEVICE}=="?*", TAG+="uaccess"
-
-# DDC/CI device, usually high-end monitors such as the DreamColor
-ENV{DDC_DEVICE}=="?*", TAG+="uaccess"
-
-# media player raw devices (for user-mode drivers, Android SDK, etc.)
-SUBSYSTEM=="usb", ENV{ID_MEDIA_PLAYER}=="?*", TAG+="uaccess"
-
-# software-defined radio communication devices
-ENV{ID_SOFTWARE_RADIO}=="?*", TAG+="uaccess"
-
-# 3D printers, CNC machines, laser cutters, 3D scanners, etc.
-ENV{ID_MAKER_TOOL}=="?*", TAG+="uaccess"
-
-# Protocol analyzers
-ENV{ID_SIGNAL_ANALYZER}=="?*", ENV{DEVTYPE}=="usb_device", TAG+="uaccess"
-
-# rfkill / radio killswitches
-KERNEL=="rfkill", SUBSYSTEM=="misc", TAG+="uaccess"
-
-# AV production controllers
-# Most of these devices use HID for the knobs, faders, buttons, encoders, and jog wheels.
-SUBSYSTEM=="hidraw", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
-
-# Some devices use vendor defined protocols on USB Bulk endpoints for controllers.
-# Other devices transfer graphics to screens on the device through USB Bulk endpoints.
-# This also allows accessing HID devices with the libusb backend of hidapi.
-SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
-
-LABEL="uaccess_end"
diff --git a/src/login/inhibit.c b/src/login/inhibit.c
index e871628..7cd2fd3 100644
--- a/src/login/inhibit.c
+++ b/src/login/inhibit.c
@@ -9,6 +9,7 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-error.h"
 #include "bus-util.h"
 #include "fd-util.h"
@@ -22,7 +23,6 @@
 #include "strv.h"
 #include "terminal-util.h"
 #include "user-util.h"
-#include "util.h"
 
 static const char* arg_what = "idle:sleep:shutdown";
 static const char* arg_who = NULL;
@@ -57,11 +57,7 @@
         if (r < 0)
                 return r;
 
-        r = fcntl(fd, F_DUPFD_CLOEXEC, 3);
-        if (r < 0)
-                return -errno;
-
-        return r;
+        return RET_NERRNO(fcntl(fd, F_DUPFD_CLOEXEC, 3));
 }
 
 static int print_inhibitors(sd_bus *bus) {
@@ -70,7 +66,7 @@
         _cleanup_(table_unrefp) Table *table = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = sd_bus_call_method(
                         bus,
@@ -256,7 +252,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_action == ACTION_INHIBIT && optind == argc)
@@ -283,7 +279,7 @@
 
         r = sd_bus_default_system(&bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL);
 
         if (arg_action == ACTION_LIST)
                 return print_inhibitors(bus);
@@ -291,7 +287,7 @@
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
                 _cleanup_strv_free_ char **arguments = NULL;
                 _cleanup_free_ char *w = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 pid_t pid;
 
                 /* Ignore SIGINT and allow the forked process to receive it */
diff --git a/src/login/loginctl.c b/src/login/loginctl.c
index cbb6518..244708d 100644
--- a/src/login/loginctl.c
+++ b/src/login/loginctl.c
@@ -8,6 +8,7 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-map-properties.h"
@@ -43,7 +44,7 @@
 static bool arg_full = false;
 static PagerFlags arg_pager_flags = 0;
 static bool arg_legend = true;
-static const char *arg_kill_who = NULL;
+static const char *arg_kill_whom = NULL;
 static int arg_signal = SIGTERM;
 static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
 static char *arg_host = NULL;
@@ -117,13 +118,12 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = bus_call_method(bus, bus_login_mgr, "ListSessions", &error, &reply, NULL);
         if (r < 0)
@@ -191,13 +191,12 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = bus_call_method(bus, bus_login_mgr, "ListUsers", &error, &reply, NULL);
         if (r < 0)
@@ -207,25 +206,38 @@
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        table = table_new("uid", "user");
+        table = table_new("uid", "user", "linger");
         if (!table)
                 return log_oom();
 
         (void) table_set_align_percent(table, TABLE_HEADER_CELL(0), 100);
 
         for (;;) {
-                const char *user;
+                const char *user, *object;
                 uint32_t uid;
+                int linger;
 
-                r = sd_bus_message_read(reply, "(uso)", &uid, &user, NULL);
+                r = sd_bus_message_read(reply, "(uso)", &uid, &user, &object);
                 if (r < 0)
                         return bus_log_parse_error(r);
                 if (r == 0)
                         break;
 
+                r = sd_bus_get_property_trivial(bus,
+                                                "org.freedesktop.login1",
+                                                object,
+                                                "org.freedesktop.login1.User",
+                                                "Linger",
+                                                &error,
+                                                'b',
+                                                &linger);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get linger status: %s", bus_error_message(&error, r));
+
                 r = table_add_many(table,
                                    TABLE_UID, (uid_t) uid,
-                                   TABLE_STRING, user);
+                                   TABLE_STRING, user,
+                                   TABLE_BOOLEAN, linger);
                 if (r < 0)
                         return table_log_add_error(r);
         }
@@ -241,13 +253,12 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = bus_call_method(bus, bus_login_mgr, "ListSeats", &error, &reply, NULL);
         if (r < 0)
@@ -450,9 +461,6 @@
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
-        char since1[FORMAT_TIMESTAMP_RELATIVE_MAX];
-        char since2[FORMAT_TIMESTAMP_MAX];
-        const char *s1, *s2;
         SessionStatusInfo i = {};
         int r;
 
@@ -468,22 +476,19 @@
         printf("%s - ", strna(i.id));
 
         if (i.name)
-                printf("%s (%"PRIu32")\n", i.name, i.uid);
+                printf("%s (" UID_FMT ")\n", i.name, i.uid);
         else
-                printf("%"PRIu32"\n", i.uid);
+                printf(UID_FMT "\n", i.uid);
 
-        s1 = format_timestamp_relative(since1, sizeof(since1), i.timestamp.realtime);
-        s2 = format_timestamp(since2, sizeof(since2), i.timestamp.realtime);
-
-        if (s1)
-                printf("\t   Since: %s; %s\n", s2, s1);
-        else if (s2)
-                printf("\t   Since: %s\n", s2);
+        if (timestamp_is_set(i.timestamp.realtime))
+                printf("\t   Since: %s; %s\n",
+                       FORMAT_TIMESTAMP(i.timestamp.realtime),
+                       FORMAT_TIMESTAMP_RELATIVE(i.timestamp.realtime));
 
         if (i.leader > 0) {
                 _cleanup_free_ char *t = NULL;
 
-                printf("\t  Leader: %"PRIu32, i.leader);
+                printf("\t  Leader: " PID_FMT, i.leader);
 
                 (void) get_process_comm(i.leader, &t);
                 if (t)
@@ -581,9 +586,6 @@
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
-        char since1[FORMAT_TIMESTAMP_RELATIVE_MAX];
-        char since2[FORMAT_TIMESTAMP_MAX];
-        const char *s1, *s2;
         _cleanup_(user_status_info_clear) UserStatusInfo i = {};
         int r;
 
@@ -601,19 +603,15 @@
         else
                 printf("%"PRIu32"\n", i.uid);
 
-        s1 = format_timestamp_relative(since1, sizeof(since1), i.timestamp.realtime);
-        s2 = format_timestamp(since2, sizeof(since2), i.timestamp.realtime);
-
-        if (s1)
-                printf("\t   Since: %s; %s\n", s2, s1);
-        else if (s2)
-                printf("\t   Since: %s\n", s2);
+        if (timestamp_is_set(i.timestamp.realtime))
+                printf("\t   Since: %s; %s\n",
+                       FORMAT_TIMESTAMP(i.timestamp.realtime),
+                       FORMAT_TIMESTAMP_RELATIVE(i.timestamp.realtime));
 
         if (!isempty(i.state))
                 printf("\t   State: %s\n", i.state);
 
         if (!strv_isempty(i.sessions)) {
-                char **l;
                 printf("\tSessions:");
 
                 STRV_FOREACH(l, i.sessions)
@@ -674,7 +672,6 @@
         printf("%s\n", strna(i.id));
 
         if (!strv_isempty(i.sessions)) {
-                char **l;
                 printf("\tSessions:");
 
                 STRV_FOREACH(l, i.sessions) {
@@ -812,17 +809,16 @@
 
 static int show_session(int argc, char *argv[], void *userdata) {
         bool properties, new_line = false;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_free_ char *path = NULL;
 
-        assert(bus);
         assert(argv);
 
         properties = !strstr(argv[0], "status");
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (argc <= 1) {
                 /* If no argument is specified inspect the manager itself */
@@ -851,15 +847,14 @@
 
 static int show_user(int argc, char *argv[], void *userdata) {
         bool properties, new_line = false;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         properties = !strstr(argv[0], "status");
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (argc <= 1) {
                 /* If no argument is specified inspect the manager itself */
@@ -908,15 +903,14 @@
 
 static int show_seat(int argc, char *argv[], void *userdata) {
         bool properties, new_line = false;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         properties = !strstr(argv[0], "status");
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (argc <= 1) {
                 /* If no argument is specified inspect the manager itself */
@@ -953,10 +947,9 @@
 
 static int activate(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -998,16 +991,15 @@
 
 static int kill_session(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
-        if (!arg_kill_who)
-                arg_kill_who = "all";
+        if (!arg_kill_whom)
+                arg_kill_whom = "all";
 
         for (int i = 1; i < argc; i++) {
 
@@ -1016,7 +1008,7 @@
                                 bus_login_mgr,
                                 "KillSession",
                                 &error, NULL,
-                                "ssi", argv[i], arg_kill_who, arg_signal);
+                                "ssi", argv[i], arg_kill_whom, arg_signal);
                 if (r < 0)
                         return log_error_errno(r, "Could not kill session: %s", bus_error_message(&error, r));
         }
@@ -1026,12 +1018,11 @@
 
 static int enable_linger(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         char* short_argv[3];
         bool b;
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -1075,10 +1066,9 @@
 
 static int terminate_user(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -1106,16 +1096,15 @@
 
 static int kill_user(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
-        if (!arg_kill_who)
-                arg_kill_who = "all";
+        if (!arg_kill_whom)
+                arg_kill_whom = "all";
 
         for (int i = 1; i < argc; i++) {
                 uid_t uid;
@@ -1145,10 +1134,9 @@
 
 static int attach(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -1170,10 +1158,9 @@
 
 static int flush_devices(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -1187,10 +1174,9 @@
 
 static int lock_sessions(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -1209,10 +1195,9 @@
 
 static int terminate_seat(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
         assert(argv);
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -1231,7 +1216,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("loginctl", "1", &link);
         if (r < 0)
@@ -1278,14 +1263,14 @@
                "  -a --all                 Show all properties, including empty ones\n"
                "     --value               When showing properties, only print the value\n"
                "  -l --full                Do not ellipsize output\n"
-               "     --kill-who=WHO        Who to send signal to\n"
+               "     --kill-whom=WHOM      Whom to send signal to\n"
                "  -s --signal=SIGNAL       Which signal to send\n"
                "  -n --lines=INTEGER       Number of journal entries to show\n"
                "  -o --output=STRING       Change journal output mode (short, short-precise,\n"
                "                             short-iso, short-iso-precise, short-full,\n"
-               "                             short-monotonic, short-unix, verbose, export,\n"
+               "                             short-monotonic, short-unix, short-delta,\n"
                "                             json, json-pretty, json-sse, json-seq, cat,\n"
-               "                             with-unit)\n"
+               "                             verbose, export, with-unit)\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -1301,7 +1286,7 @@
                 ARG_VALUE,
                 ARG_NO_PAGER,
                 ARG_NO_LEGEND,
-                ARG_KILL_WHO,
+                ARG_KILL_WHOM,
                 ARG_NO_ASK_PASSWORD,
         };
 
@@ -1314,7 +1299,7 @@
                 { "full",            no_argument,       NULL, 'l'                 },
                 { "no-pager",        no_argument,       NULL, ARG_NO_PAGER        },
                 { "no-legend",       no_argument,       NULL, ARG_NO_LEGEND       },
-                { "kill-who",        required_argument, NULL, ARG_KILL_WHO        },
+                { "kill-whom",       required_argument, NULL, ARG_KILL_WHOM       },
                 { "signal",          required_argument, NULL, 's'                 },
                 { "host",            required_argument, NULL, 'H'                 },
                 { "machine",         required_argument, NULL, 'M'                 },
@@ -1400,8 +1385,8 @@
                         arg_ask_password = false;
                         break;
 
-                case ARG_KILL_WHO:
-                        arg_kill_who = optarg;
+                case ARG_KILL_WHOM:
+                        arg_kill_whom = optarg;
                         break;
 
                 case 's':
@@ -1424,7 +1409,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -1480,7 +1465,7 @@
 
         r = bus_connect_transport(arg_transport, arg_host, false, &bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);
 
diff --git a/src/login/logind-action.c b/src/login/logind-action.c
index 8ed066c..c6a36a1 100644
--- a/src/login/logind-action.c
+++ b/src/login/logind-action.c
@@ -2,6 +2,8 @@
 
 #include <unistd.h>
 
+#include "sd-messages.h"
+
 #include "alloc-util.h"
 #include "bus-error.h"
 #include "bus-util.h"
@@ -11,28 +13,112 @@
 #include "logind-dbus.h"
 #include "logind-session-dbus.h"
 #include "process-util.h"
-#include "sleep-config.h"
 #include "special.h"
 #include "string-table.h"
 #include "terminal-util.h"
 #include "user-util.h"
 
-const char* manager_target_for_action(HandleAction handle) {
-        static const char * const target_table[_HANDLE_ACTION_MAX] = {
-                [HANDLE_POWEROFF] = SPECIAL_POWEROFF_TARGET,
-                [HANDLE_REBOOT] = SPECIAL_REBOOT_TARGET,
-                [HANDLE_HALT] = SPECIAL_HALT_TARGET,
-                [HANDLE_KEXEC] = SPECIAL_KEXEC_TARGET,
-                [HANDLE_SUSPEND] = SPECIAL_SUSPEND_TARGET,
-                [HANDLE_HIBERNATE] = SPECIAL_HIBERNATE_TARGET,
-                [HANDLE_HYBRID_SLEEP] = SPECIAL_HYBRID_SLEEP_TARGET,
-                [HANDLE_SUSPEND_THEN_HIBERNATE] = SPECIAL_SUSPEND_THEN_HIBERNATE_TARGET,
-        };
+static const HandleActionData handle_action_data_table[_HANDLE_ACTION_MAX] = {
+        [HANDLE_POWEROFF] = {
+                .handle                          = HANDLE_POWEROFF,
+                .target                          = SPECIAL_POWEROFF_TARGET,
+                .inhibit_what                    = INHIBIT_SHUTDOWN,
+                .polkit_action                   = "org.freedesktop.login1.power-off",
+                .polkit_action_multiple_sessions = "org.freedesktop.login1.power-off-multiple-sessions",
+                .polkit_action_ignore_inhibit    = "org.freedesktop.login1.power-off-ignore-inhibit",
+                .sleep_operation                 = _SLEEP_OPERATION_INVALID,
+                .message_id                      = SD_MESSAGE_SHUTDOWN_STR,
+                .message                         = "System is powering down",
+                .log_verb                        = "power-off",
+        },
+        [HANDLE_REBOOT] = {
+                .handle                          = HANDLE_REBOOT,
+                .target                          = SPECIAL_REBOOT_TARGET,
+                .inhibit_what                    = INHIBIT_SHUTDOWN,
+                .polkit_action                   = "org.freedesktop.login1.reboot",
+                .polkit_action_multiple_sessions = "org.freedesktop.login1.reboot-multiple-sessions",
+                .polkit_action_ignore_inhibit    = "org.freedesktop.login1.reboot-ignore-inhibit",
+                .sleep_operation                 = _SLEEP_OPERATION_INVALID,
+                .message_id                      = SD_MESSAGE_SHUTDOWN_STR,
+                .message                         = "System is rebooting",
+                .log_verb                        = "reboot",
+        },
+        [HANDLE_HALT] = {
+                .handle                          = HANDLE_HALT,
+                .target                          = SPECIAL_HALT_TARGET,
+                .inhibit_what                    = INHIBIT_SHUTDOWN,
+                .polkit_action                   = "org.freedesktop.login1.halt",
+                .polkit_action_multiple_sessions = "org.freedesktop.login1.halt-multiple-sessions",
+                .polkit_action_ignore_inhibit    = "org.freedesktop.login1.halt-ignore-inhibit",
+                .sleep_operation                 = _SLEEP_OPERATION_INVALID,
+                .message_id                      = SD_MESSAGE_SHUTDOWN_STR,
+                .message                         = "System is halting",
+                .log_verb                        = "halt",
+        },
+        [HANDLE_KEXEC] = {
+                .handle                          = HANDLE_KEXEC,
+                .target                          = SPECIAL_KEXEC_TARGET,
+                .inhibit_what                    = INHIBIT_SHUTDOWN,
+                .polkit_action                   = "org.freedesktop.login1.reboot",
+                .polkit_action_multiple_sessions = "org.freedesktop.login1.reboot-multiple-sessions",
+                .polkit_action_ignore_inhibit    = "org.freedesktop.login1.reboot-ignore-inhibit",
+                .sleep_operation                 = _SLEEP_OPERATION_INVALID,
+                .message_id                      = SD_MESSAGE_SHUTDOWN_STR,
+                .message                         = "System is rebooting with kexec",
+                .log_verb                        = "kexec",
+        },
+        [HANDLE_SUSPEND] = {
+                .handle                          = HANDLE_SUSPEND,
+                .target                          = SPECIAL_SUSPEND_TARGET,
+                .inhibit_what                    = INHIBIT_SLEEP,
+                .polkit_action                   = "org.freedesktop.login1.suspend",
+                .polkit_action_multiple_sessions = "org.freedesktop.login1.suspend-multiple-sessions",
+                .polkit_action_ignore_inhibit    = "org.freedesktop.login1.suspend-ignore-inhibit",
+                .sleep_operation                 = SLEEP_SUSPEND,
+        },
+        [HANDLE_HIBERNATE] = {
+                .handle                          = HANDLE_HIBERNATE,
+                .target                          = SPECIAL_HIBERNATE_TARGET,
+                .inhibit_what                    = INHIBIT_SLEEP,
+                .polkit_action                   = "org.freedesktop.login1.hibernate",
+                .polkit_action_multiple_sessions = "org.freedesktop.login1.hibernate-multiple-sessions",
+                .polkit_action_ignore_inhibit    = "org.freedesktop.login1.hibernate-ignore-inhibit",
+                .sleep_operation                 = SLEEP_HIBERNATE,
+        },
+        [HANDLE_HYBRID_SLEEP] = {
+                .handle                          = HANDLE_HYBRID_SLEEP,
+                .target                          = SPECIAL_HYBRID_SLEEP_TARGET,
+                .inhibit_what                    = INHIBIT_SLEEP,
+                .polkit_action                   = "org.freedesktop.login1.hibernate",
+                .polkit_action_multiple_sessions = "org.freedesktop.login1.hibernate-multiple-sessions",
+                .polkit_action_ignore_inhibit    = "org.freedesktop.login1.hibernate-ignore-inhibit",
+                .sleep_operation                 = SLEEP_HYBRID_SLEEP,
+        },
+        [HANDLE_SUSPEND_THEN_HIBERNATE] = {
+                .handle                          = HANDLE_SUSPEND_THEN_HIBERNATE,
+                .target                          = SPECIAL_SUSPEND_THEN_HIBERNATE_TARGET,
+                .inhibit_what                    = INHIBIT_SLEEP,
+                .polkit_action                   = "org.freedesktop.login1.hibernate",
+                .polkit_action_multiple_sessions = "org.freedesktop.login1.hibernate-multiple-sessions",
+                .polkit_action_ignore_inhibit    = "org.freedesktop.login1.hibernate-ignore-inhibit",
+                .sleep_operation                 = SLEEP_SUSPEND_THEN_HIBERNATE,
+        },
+        [HANDLE_FACTORY_RESET] = {
+                .handle                          = HANDLE_FACTORY_RESET,
+                .target                          = SPECIAL_FACTORY_RESET_TARGET,
+                .inhibit_what                    = _INHIBIT_WHAT_INVALID,
+                .sleep_operation                 = _SLEEP_OPERATION_INVALID,
+                .message_id                      = SD_MESSAGE_FACTORY_RESET_STR,
+                .message                         = "System is performing factory reset",
+        },
+};
 
-        assert(handle >= 0);
-        if (handle < (ssize_t) ELEMENTSOF(target_table))
-                return target_table[handle];
-        return NULL;
+const HandleActionData* handle_action_lookup(HandleAction action) {
+
+        if (action < 0 || (size_t) action >= ELEMENTSOF(handle_action_data_table))
+                return NULL;
+
+        return &handle_action_data_table[action];
 }
 
 int manager_handle_action(
@@ -43,21 +129,21 @@
                 bool is_edge) {
 
         static const char * const message_table[_HANDLE_ACTION_MAX] = {
-                [HANDLE_POWEROFF] = "Powering Off...",
-                [HANDLE_REBOOT] = "Rebooting...",
-                [HANDLE_HALT] = "Halting...",
-                [HANDLE_KEXEC] = "Rebooting via kexec...",
-                [HANDLE_SUSPEND] = "Suspending...",
-                [HANDLE_HIBERNATE] = "Hibernating...",
-                [HANDLE_HYBRID_SLEEP] = "Hibernating and suspending...",
+                [HANDLE_POWEROFF]               = "Powering off...",
+                [HANDLE_REBOOT]                 = "Rebooting...",
+                [HANDLE_HALT]                   = "Halting...",
+                [HANDLE_KEXEC]                  = "Rebooting via kexec...",
+                [HANDLE_SUSPEND]                = "Suspending...",
+                [HANDLE_HIBERNATE]              = "Hibernating...",
+                [HANDLE_HYBRID_SLEEP]           = "Hibernating and suspending...",
                 [HANDLE_SUSPEND_THEN_HIBERNATE] = "Suspending, then hibernating...",
+                [HANDLE_FACTORY_RESET]          = "Performing factory reset...",
         };
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         InhibitWhat inhibit_operation;
         Inhibitor *offending = NULL;
         bool supported;
-        const char *target;
         int r;
 
         assert(m);
@@ -127,17 +213,13 @@
                 return log_warning_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                          "Requested %s operation not supported, ignoring.", handle_action_to_string(handle));
 
-        if (m->action_what > 0)
+        if (m->delayed_action)
                 return log_debug_errno(SYNTHETIC_ERRNO(EALREADY),
                                        "Action already in progress (%s), ignoring requested %s operation.",
-                                       inhibit_what_to_string(m->action_what),
+                                       inhibit_what_to_string(m->delayed_action->inhibit_what),
                                        handle_action_to_string(handle));
 
-        assert_se(target = manager_target_for_action(handle));
-
-        inhibit_operation = IN_SET(handle, HANDLE_SUSPEND, HANDLE_HIBERNATE,
-                                           HANDLE_HYBRID_SLEEP,
-                                           HANDLE_SUSPEND_THEN_HIBERNATE) ? INHIBIT_SLEEP : INHIBIT_SHUTDOWN;
+        inhibit_operation = handle_action_lookup(handle)->inhibit_what;
 
         /* If the actual operation is inhibited, warn and fail */
         if (!ignore_inhibited &&
@@ -160,7 +242,7 @@
 
         log_info("%s", message_table[handle]);
 
-        r = bus_manager_shutdown_or_sleep_now_or_later(m, target, inhibit_operation, &error);
+        r = bus_manager_shutdown_or_sleep_now_or_later(m, handle_action_lookup(handle), &error);
         if (r < 0)
                 return log_error_errno(r, "Failed to execute %s operation: %s",
                                        handle_action_to_string(handle),
@@ -169,17 +251,34 @@
         return 1;
 }
 
+static const char* const handle_action_verb_table[_HANDLE_ACTION_MAX] = {
+        [HANDLE_IGNORE]                 = "do nothing",
+        [HANDLE_POWEROFF]               = "power off",
+        [HANDLE_REBOOT]                 = "reboot",
+        [HANDLE_HALT]                   = "halt",
+        [HANDLE_KEXEC]                  = "kexec",
+        [HANDLE_SUSPEND]                = "suspend",
+        [HANDLE_HIBERNATE]              = "hibernate",
+        [HANDLE_HYBRID_SLEEP]           = "enter hybrid sleep",
+        [HANDLE_SUSPEND_THEN_HIBERNATE] = "suspend and later hibernate",
+        [HANDLE_FACTORY_RESET]          = "perform a factory reset",
+        [HANDLE_LOCK]                   = "be locked",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(handle_action_verb, HandleAction);
+
 static const char* const handle_action_table[_HANDLE_ACTION_MAX] = {
-        [HANDLE_IGNORE] = "ignore",
-        [HANDLE_POWEROFF] = "poweroff",
-        [HANDLE_REBOOT] = "reboot",
-        [HANDLE_HALT] = "halt",
-        [HANDLE_KEXEC] = "kexec",
-        [HANDLE_SUSPEND] = "suspend",
-        [HANDLE_HIBERNATE] = "hibernate",
-        [HANDLE_HYBRID_SLEEP] = "hybrid-sleep",
+        [HANDLE_IGNORE]                 = "ignore",
+        [HANDLE_POWEROFF]               = "poweroff",
+        [HANDLE_REBOOT]                 = "reboot",
+        [HANDLE_HALT]                   = "halt",
+        [HANDLE_KEXEC]                  = "kexec",
+        [HANDLE_SUSPEND]                = "suspend",
+        [HANDLE_HIBERNATE]              = "hibernate",
+        [HANDLE_HYBRID_SLEEP]           = "hybrid-sleep",
         [HANDLE_SUSPEND_THEN_HIBERNATE] = "suspend-then-hibernate",
-        [HANDLE_LOCK] = "lock",
+        [HANDLE_FACTORY_RESET]          = "factory-reset",
+        [HANDLE_LOCK]                   = "lock",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(handle_action, HandleAction);
diff --git a/src/login/logind-action.h b/src/login/logind-action.h
index 0baad37..9a01af1 100644
--- a/src/login/logind-action.h
+++ b/src/login/logind-action.h
@@ -14,12 +14,33 @@
         HANDLE_HYBRID_SLEEP,
         HANDLE_SUSPEND_THEN_HIBERNATE,
         HANDLE_LOCK,
+        HANDLE_FACTORY_RESET,
         _HANDLE_ACTION_MAX,
         _HANDLE_ACTION_INVALID = -EINVAL,
 } HandleAction;
 
+typedef struct HandleActionData HandleActionData;
+
 #include "logind-inhibit.h"
 #include "logind.h"
+#include "sleep-config.h"
+
+static inline bool handle_action_valid(HandleAction a) {
+        return a >= 0 && a < _HANDLE_ACTION_MAX;
+}
+
+struct HandleActionData {
+        HandleAction handle;
+        const char *target;
+        InhibitWhat inhibit_what;
+        const char *polkit_action;
+        const char *polkit_action_multiple_sessions;
+        const char *polkit_action_ignore_inhibit;
+        SleepOperation sleep_operation;
+        const char* message_id;
+        const char* message;
+        const char* log_verb;
+};
 
 int manager_handle_action(
                 Manager *m,
@@ -28,9 +49,11 @@
                 bool ignore_inhibited,
                 bool is_edge);
 
+const char* handle_action_verb_to_string(HandleAction h) _const_;
+
 const char* handle_action_to_string(HandleAction h) _const_;
 HandleAction handle_action_from_string(const char *s) _pure_;
 
-const char* manager_target_for_action(HandleAction handle);
+const HandleActionData* handle_action_lookup(HandleAction handle);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_handle_action);
diff --git a/src/login/logind-brightness.c b/src/login/logind-brightness.c
index d6b9289..21feaae 100644
--- a/src/login/logind-brightness.c
+++ b/src/login/logind-brightness.c
@@ -96,12 +96,11 @@
 static int brightness_writer_fork(BrightnessWriter *w);
 
 static int on_brightness_writer_exit(sd_event_source *s, const siginfo_t *si, void *userdata) {
-        BrightnessWriter *w = userdata;
+        BrightnessWriter *w = ASSERT_PTR(userdata);
         int r;
 
         assert(s);
         assert(si);
-        assert(w);
 
         assert(si->si_pid == w->child);
         w->child = 0;
diff --git a/src/login/logind-button.c b/src/login/logind-button.c
index 0ee6702..727dad0 100644
--- a/src/login/logind-button.c
+++ b/src/login/logind-button.c
@@ -13,12 +13,13 @@
 #include "logind-button.h"
 #include "missing_input.h"
 #include "string-util.h"
-#include "util.h"
 
 #define CONST_MAX5(a, b, c, d, e) CONST_MAX(CONST_MAX(a, b), CONST_MAX(CONST_MAX(c, d), e))
 
 #define ULONG_BITS (sizeof(unsigned long)*8)
 
+#define LONG_PRESS_DURATION (5 * USEC_PER_SEC)
+
 static bool bitset_get(const unsigned long *bits, unsigned i) {
         return (bits[i / ULONG_BITS] >> (i % ULONG_BITS)) & 1UL;
 }
@@ -47,7 +48,7 @@
         }
 
         b->manager = m;
-        b->fd = -1;
+        b->fd = -EBADF;
 
         return b;
 }
@@ -82,8 +83,7 @@
          * differently */
         if (manager_is_docked_or_external_displays(manager))
                 handle_action = manager->handle_lid_switch_docked;
-        else if (manager->handle_lid_switch_ep != _HANDLE_ACTION_INVALID &&
-                 manager_is_on_external_power())
+        else if (handle_action_valid(manager->handle_lid_switch_ep) && manager_is_on_external_power())
                 handle_action = manager->handle_lid_switch_ep;
         else
                 handle_action = manager->handle_lid_switch;
@@ -92,9 +92,8 @@
 }
 
 static int button_recheck(sd_event_source *e, void *userdata) {
-        Button *b = userdata;
+        Button *b = ASSERT_PTR(userdata);
 
-        assert(b);
         assert(b->lid_closed);
 
         button_lid_switch_handle_action(b->manager, false);
@@ -117,14 +116,92 @@
         return sd_event_source_set_priority(b->check_event_source, SD_EVENT_PRIORITY_IDLE+1);
 }
 
+static int long_press_of_power_key_handler(sd_event_source *e, uint64_t usec, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+
+        assert(e);
+
+        m->power_key_long_press_event_source = sd_event_source_unref(m->power_key_long_press_event_source);
+
+        log_struct(LOG_INFO,
+                   LOG_MESSAGE("Power key pressed long."),
+                   "MESSAGE_ID=" SD_MESSAGE_POWER_KEY_LONG_PRESS_STR);
+
+        manager_handle_action(m, INHIBIT_HANDLE_POWER_KEY, m->handle_power_key_long_press, m->power_key_ignore_inhibited, true);
+        return 0;
+}
+
+static int long_press_of_reboot_key_handler(sd_event_source *e, uint64_t usec, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+
+        assert(e);
+
+        m->reboot_key_long_press_event_source = sd_event_source_unref(m->reboot_key_long_press_event_source);
+
+        log_struct(LOG_INFO,
+                   LOG_MESSAGE("Reboot key pressed long."),
+                   "MESSAGE_ID=" SD_MESSAGE_REBOOT_KEY_LONG_PRESS_STR);
+
+        manager_handle_action(m, INHIBIT_HANDLE_REBOOT_KEY, m->handle_reboot_key_long_press, m->reboot_key_ignore_inhibited, true);
+        return 0;
+}
+
+static int long_press_of_suspend_key_handler(sd_event_source *e, uint64_t usec, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+
+        assert(e);
+
+        m->suspend_key_long_press_event_source = sd_event_source_unref(m->suspend_key_long_press_event_source);
+
+        log_struct(LOG_INFO,
+                   LOG_MESSAGE("Suspend key pressed long."),
+                   "MESSAGE_ID=" SD_MESSAGE_SUSPEND_KEY_LONG_PRESS_STR);
+
+        manager_handle_action(m, INHIBIT_HANDLE_SUSPEND_KEY, m->handle_suspend_key_long_press, m->suspend_key_ignore_inhibited, true);
+        return 0;
+}
+
+static int long_press_of_hibernate_key_handler(sd_event_source *e, uint64_t usec, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+
+        assert(e);
+
+        m->hibernate_key_long_press_event_source = sd_event_source_unref(m->hibernate_key_long_press_event_source);
+
+        log_struct(LOG_INFO,
+                   LOG_MESSAGE("Hibernate key pressed long."),
+                   "MESSAGE_ID=" SD_MESSAGE_HIBERNATE_KEY_LONG_PRESS_STR);
+
+        manager_handle_action(m, INHIBIT_HANDLE_HIBERNATE_KEY, m->handle_hibernate_key_long_press, m->hibernate_key_ignore_inhibited, true);
+        return 0;
+}
+
+static void start_long_press(Manager *m, sd_event_source **e, sd_event_time_handler_t callback) {
+        int r;
+
+        assert(m);
+        assert(e);
+
+        if (*e)
+                return;
+
+        r = sd_event_add_time_relative(
+                        m->event,
+                        e,
+                        CLOCK_MONOTONIC,
+                        LONG_PRESS_DURATION, 0,
+                        callback, m);
+        if (r < 0)
+                log_warning_errno(r, "Failed to add long press timer event, ignoring: %m");
+}
+
 static int button_dispatch(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Button *b = userdata;
+        Button *b = ASSERT_PTR(userdata);
         struct input_event ev;
         ssize_t l;
 
         assert(s);
         assert(fd == b->fd);
-        assert(b);
 
         l = read(b->fd, &ev, sizeof(ev));
         if (l < 0)
@@ -138,11 +215,15 @@
 
                 case KEY_POWER:
                 case KEY_POWER2:
-                        log_struct(LOG_INFO,
-                                   LOG_MESSAGE("Power key pressed."),
-                                   "MESSAGE_ID=" SD_MESSAGE_POWER_KEY_STR);
-
-                        manager_handle_action(b->manager, INHIBIT_HANDLE_POWER_KEY, b->manager->handle_power_key, b->manager->power_key_ignore_inhibited, true);
+                        if (b->manager->handle_power_key_long_press != HANDLE_IGNORE && b->manager->handle_power_key_long_press != b->manager->handle_power_key) {
+                                log_debug("Power key pressed. Further action depends on the key press duration.");
+                                start_long_press(b->manager, &b->manager->power_key_long_press_event_source, long_press_of_power_key_handler);
+                        } else {
+                                log_struct(LOG_INFO,
+                                           LOG_MESSAGE("Power key pressed short."),
+                                           "MESSAGE_ID=" SD_MESSAGE_POWER_KEY_STR);
+                                manager_handle_action(b->manager, INHIBIT_HANDLE_POWER_KEY, b->manager->handle_power_key, b->manager->power_key_ignore_inhibited, true);
+                        }
                         break;
 
                 /* The kernel naming is a bit confusing here:
@@ -151,11 +232,15 @@
                 */
 
                 case KEY_RESTART:
-                        log_struct(LOG_INFO,
-                                   LOG_MESSAGE("Reboot key pressed."),
-                                   "MESSAGE_ID=" SD_MESSAGE_REBOOT_KEY_STR);
-
-                        manager_handle_action(b->manager, INHIBIT_HANDLE_REBOOT_KEY, b->manager->handle_reboot_key, b->manager->reboot_key_ignore_inhibited, true);
+                        if (b->manager->handle_reboot_key_long_press != HANDLE_IGNORE && b->manager->handle_reboot_key_long_press != b->manager->handle_reboot_key) {
+                                log_debug("Reboot key pressed. Further action depends on the key press duration.");
+                                start_long_press(b->manager, &b->manager->reboot_key_long_press_event_source, long_press_of_reboot_key_handler);
+                        } else {
+                                log_struct(LOG_INFO,
+                                           LOG_MESSAGE("Reboot key pressed short."),
+                                           "MESSAGE_ID=" SD_MESSAGE_REBOOT_KEY_STR);
+                                manager_handle_action(b->manager, INHIBIT_HANDLE_REBOOT_KEY, b->manager->handle_reboot_key, b->manager->reboot_key_ignore_inhibited, true);
+                        }
                         break;
 
                 /* The kernel naming is a bit confusing here:
@@ -165,19 +250,84 @@
                 */
 
                 case KEY_SLEEP:
-                        log_struct(LOG_INFO,
-                                   LOG_MESSAGE("Suspend key pressed."),
-                                   "MESSAGE_ID=" SD_MESSAGE_SUSPEND_KEY_STR);
-
-                        manager_handle_action(b->manager, INHIBIT_HANDLE_SUSPEND_KEY, b->manager->handle_suspend_key, b->manager->suspend_key_ignore_inhibited, true);
+                        if (b->manager->handle_suspend_key_long_press != HANDLE_IGNORE && b->manager->handle_suspend_key_long_press != b->manager->handle_suspend_key) {
+                                log_debug("Suspend key pressed. Further action depends on the key press duration.");
+                                start_long_press(b->manager, &b->manager->suspend_key_long_press_event_source, long_press_of_suspend_key_handler);
+                        } else {
+                                log_struct(LOG_INFO,
+                                           LOG_MESSAGE("Suspend key pressed short."),
+                                           "MESSAGE_ID=" SD_MESSAGE_SUSPEND_KEY_STR);
+                                manager_handle_action(b->manager, INHIBIT_HANDLE_SUSPEND_KEY, b->manager->handle_suspend_key, b->manager->suspend_key_ignore_inhibited, true);
+                        }
                         break;
 
                 case KEY_SUSPEND:
-                        log_struct(LOG_INFO,
-                                   LOG_MESSAGE("Hibernate key pressed."),
-                                   "MESSAGE_ID=" SD_MESSAGE_HIBERNATE_KEY_STR);
+                        if (b->manager->handle_hibernate_key_long_press != HANDLE_IGNORE && b->manager->handle_hibernate_key_long_press != b->manager->handle_hibernate_key) {
+                                log_debug("Hibernate key pressed. Further action depends on the key press duration.");
+                                start_long_press(b->manager, &b->manager->hibernate_key_long_press_event_source, long_press_of_hibernate_key_handler);
+                        } else {
+                                log_struct(LOG_INFO,
+                                           LOG_MESSAGE("Hibernate key pressed short."),
+                                           "MESSAGE_ID=" SD_MESSAGE_HIBERNATE_KEY_STR);
+                                manager_handle_action(b->manager, INHIBIT_HANDLE_HIBERNATE_KEY, b->manager->handle_hibernate_key, b->manager->hibernate_key_ignore_inhibited, true);
+                        }
+                        break;
+                }
 
-                        manager_handle_action(b->manager, INHIBIT_HANDLE_HIBERNATE_KEY, b->manager->handle_hibernate_key, b->manager->hibernate_key_ignore_inhibited, true);
+        } else if (ev.type == EV_KEY && ev.value == 0) {
+
+                switch (ev.code) {
+
+                case KEY_POWER:
+                case KEY_POWER2:
+                        if (b->manager->power_key_long_press_event_source) {
+                                /* Long press event timer is still pending and key release
+                                   event happened.  This means that key press duration was
+                                   insufficient to trigger a long press event
+                                */
+                                log_struct(LOG_INFO,
+                                           LOG_MESSAGE("Power key pressed short."),
+                                           "MESSAGE_ID=" SD_MESSAGE_POWER_KEY_STR);
+
+                                b->manager->power_key_long_press_event_source = sd_event_source_unref(b->manager->power_key_long_press_event_source);
+
+                                manager_handle_action(b->manager, INHIBIT_HANDLE_POWER_KEY, b->manager->handle_power_key, b->manager->power_key_ignore_inhibited, true);
+                        }
+                        break;
+
+                case KEY_RESTART:
+                        if (b->manager->reboot_key_long_press_event_source) {
+                                log_struct(LOG_INFO,
+                                           LOG_MESSAGE("Reboot key pressed short."),
+                                           "MESSAGE_ID=" SD_MESSAGE_REBOOT_KEY_STR);
+
+                                b->manager->reboot_key_long_press_event_source = sd_event_source_unref(b->manager->reboot_key_long_press_event_source);
+
+                                manager_handle_action(b->manager, INHIBIT_HANDLE_REBOOT_KEY, b->manager->handle_reboot_key, b->manager->reboot_key_ignore_inhibited, true);
+                        }
+                        break;
+
+                case KEY_SLEEP:
+                        if (b->manager->suspend_key_long_press_event_source) {
+                                log_struct(LOG_INFO,
+                                           LOG_MESSAGE("Suspend key pressed short."),
+                                           "MESSAGE_ID=" SD_MESSAGE_SUSPEND_KEY_STR);
+
+                                b->manager->suspend_key_long_press_event_source = sd_event_source_unref(b->manager->suspend_key_long_press_event_source);
+
+                                manager_handle_action(b->manager, INHIBIT_HANDLE_SUSPEND_KEY, b->manager->handle_suspend_key, b->manager->suspend_key_ignore_inhibited, true);
+                        }
+                        break;
+                case KEY_SUSPEND:
+                        if (b->manager->hibernate_key_long_press_event_source) {
+                                log_struct(LOG_INFO,
+                                           LOG_MESSAGE("Hibernate key pressed short."),
+                                           "MESSAGE_ID=" SD_MESSAGE_HIBERNATE_KEY_STR);
+
+                                b->manager->hibernate_key_long_press_event_source = sd_event_source_unref(b->manager->hibernate_key_long_press_event_source);
+
+                                manager_handle_action(b->manager, INHIBIT_HANDLE_HIBERNATE_KEY, b->manager->handle_hibernate_key, b->manager->hibernate_key_ignore_inhibited, true);
+                        }
                         break;
                 }
 
@@ -313,7 +463,7 @@
 }
 
 int button_open(Button *b) {
-        _cleanup_(asynchronous_closep) int fd = -1;
+        _cleanup_(asynchronous_closep) int fd = -EBADF;
         const char *p;
         char name[256];
         int r;
diff --git a/src/login/logind-core.c b/src/login/logind-core.c
index a9792fd..7d4ff6c 100644
--- a/src/login/logind-core.c
+++ b/src/login/logind-core.c
@@ -39,12 +39,18 @@
         m->user_stop_delay = 10 * USEC_PER_SEC;
 
         m->handle_power_key = HANDLE_POWEROFF;
+        m->handle_power_key_long_press = HANDLE_IGNORE;
+        m->handle_reboot_key = HANDLE_REBOOT;
+        m->handle_reboot_key_long_press = HANDLE_POWEROFF;
         m->handle_suspend_key = HANDLE_SUSPEND;
+        m->handle_suspend_key_long_press = HANDLE_HIBERNATE;
         m->handle_hibernate_key = HANDLE_HIBERNATE;
+        m->handle_hibernate_key_long_press = HANDLE_IGNORE;
+
         m->handle_lid_switch = HANDLE_SUSPEND;
         m->handle_lid_switch_ep = _HANDLE_ACTION_INVALID;
         m->handle_lid_switch_docked = HANDLE_IGNORE;
-        m->handle_reboot_key = HANDLE_REBOOT;
+
         m->power_key_ignore_inhibited = false;
         m->suspend_key_ignore_inhibited = false;
         m->hibernate_key_ignore_inhibited = false;
@@ -65,6 +71,8 @@
 
         m->kill_only_users = strv_free(m->kill_only_users);
         m->kill_exclude_users = strv_free(m->kill_exclude_users);
+
+        m->stop_idle_session_usec = USEC_INFINITY;
 }
 
 int manager_parse_config_file(Manager *m) {
@@ -456,14 +464,13 @@
                 void *data,
                 void *userdata) {
 
-        unsigned *n = data;
+        unsigned *n = ASSERT_PTR(data);
         unsigned o;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = safe_atou(rvalue, &o);
         if (r < 0) {
@@ -485,7 +492,7 @@
 static int vt_is_busy(unsigned vtnr) {
         struct vt_stat vt_stat;
         int r;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(vtnr >= 1);
 
@@ -670,18 +677,26 @@
 
         if (m->handle_power_key != HANDLE_IGNORE)
                 return false;
+        if (m->handle_power_key_long_press != HANDLE_IGNORE)
+                return false;
         if (m->handle_suspend_key != HANDLE_IGNORE)
                 return false;
+        if (m->handle_suspend_key_long_press != HANDLE_IGNORE)
+                return false;
         if (m->handle_hibernate_key != HANDLE_IGNORE)
                 return false;
+        if (m->handle_hibernate_key_long_press != HANDLE_IGNORE)
+                return false;
+        if (m->handle_reboot_key != HANDLE_IGNORE)
+                return false;
+        if (m->handle_reboot_key_long_press != HANDLE_IGNORE)
+                return false;
         if (m->handle_lid_switch != HANDLE_IGNORE)
                 return false;
         if (!IN_SET(m->handle_lid_switch_ep, _HANDLE_ACTION_INVALID, HANDLE_IGNORE))
                 return false;
         if (m->handle_lid_switch_docked != HANDLE_IGNORE)
                 return false;
-        if (m->handle_reboot_key != HANDLE_IGNORE)
-                return false;
 
         return true;
 }
@@ -765,9 +780,7 @@
 
 #if ENABLE_UTMP
 static int manager_dispatch_utmp(sd_event_source *s, const struct inotify_event *event, void *userdata) {
-        Manager *m = userdata;
-
-        assert(m);
+        Manager *m = ASSERT_PTR(userdata);
 
         /* If there's indication the file itself might have been removed or became otherwise unavailable, then let's
          * reestablish the watch on whatever there's now. */
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index b3c204f..7024bba 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -20,15 +20,19 @@
 #include "cgroup-util.h"
 #include "device-util.h"
 #include "dirent-util.h"
+#include "efi-api.h"
 #include "efi-loader.h"
 #include "efivars.h"
+#include "env-file.h"
 #include "env-util.h"
 #include "escape.h"
+#include "event-util.h"
 #include "fd-util.h"
 #include "fileio-label.h"
 #include "fileio.h"
 #include "format-util.h"
 #include "fs-util.h"
+#include "logind-action.h"
 #include "logind-dbus.h"
 #include "logind-polkit.h"
 #include "logind-seat-dbus.h"
@@ -36,7 +40,7 @@
 #include "logind-user-dbus.h"
 #include "logind.h"
 #include "missing_capability.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -44,6 +48,7 @@
 #include "selinux-util.h"
 #include "sleep-config.h"
 #include "special.h"
+#include "serialize.h"
 #include "stdio-util.h"
 #include "strv.h"
 #include "terminal-util.h"
@@ -53,6 +58,21 @@
 #include "utmp-wtmp.h"
 #include "virt.h"
 
+/* As a random fun fact sysvinit had a 252 (256-(strlen(" \r\n")+1))
+ * character limit for the wall message.
+ * https://git.savannah.nongnu.org/cgit/sysvinit.git/tree/src/shutdown.c#n72
+ * There is no real technical need for that but doesn't make sense
+ * to store arbitrary amounts either. As we are not stingy here, we
+ * allow 4k.
+ */
+#define WALL_MESSAGE_MAX 4096U
+
+#define SHUTDOWN_SCHEDULE_FILE "/run/systemd/shutdown/scheduled"
+
+static int update_schedule_file(Manager *m);
+static void reset_scheduled_shutdown(Manager *m);
+static int manager_setup_shutdown_timers(Manager* m);
+
 static int get_sender_session(
                 Manager *m,
                 sd_bus_message *message,
@@ -248,11 +268,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         return sd_bus_message_append(reply, "b", manager_get_idle_hint(m, NULL) > 0);
 }
@@ -266,12 +285,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         dual_timestamp t = DUAL_TIMESTAMP_NULL;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         manager_get_idle_hint(m, &t);
 
@@ -287,12 +305,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         InhibitWhat w;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         w = manager_inhibit_what(m, streq(property, "BlockInhibited") ? INHIBIT_BLOCK : INHIBIT_DELAY);
 
@@ -308,17 +325,18 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
-        bool b;
+        Manager *m = ASSERT_PTR(userdata);
+        bool b = false;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
-        if (streq(property, "PreparingForShutdown"))
-                b = m->action_what & INHIBIT_SHUTDOWN;
-        else
-                b = m->action_what & INHIBIT_SLEEP;
+        if (m->delayed_action) {
+                if (streq(property, "PreparingForShutdown"))
+                        b = m->delayed_action->inhibit_what & INHIBIT_SHUTDOWN;
+                else
+                        b = m->delayed_action->inhibit_what & INHIBIT_SLEEP;
+        }
 
         return sd_bus_message_append(reply, "b", b);
 }
@@ -332,18 +350,19 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         r = sd_bus_message_open_container(reply, 'r', "st");
         if (r < 0)
                 return r;
 
-        r = sd_bus_message_append(reply, "st", m->scheduled_shutdown_type, m->scheduled_shutdown_timeout);
+        r = sd_bus_message_append(reply, "st",
+                m->scheduled_shutdown_action ? handle_action_to_string(m->scheduled_shutdown_action->handle) : NULL,
+                m->scheduled_shutdown_timeout);
         if (r < 0)
                 return r;
 
@@ -353,19 +372,18 @@
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_handle_action, handle_action, HandleAction);
 static BUS_DEFINE_PROPERTY_GET(property_get_docked, "b", Manager, manager_is_docked_or_external_displays);
 static BUS_DEFINE_PROPERTY_GET(property_get_lid_closed, "b", Manager, manager_is_lid_closed);
-static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_on_external_power, "b", manager_is_on_external_power);
+static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_on_external_power, "b", manager_is_on_external_power());
 static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_compat_user_tasks_max, "t", CGROUP_LIMIT_MAX);
 static BUS_DEFINE_PROPERTY_GET_REF(property_get_hashmap_size, "t", Hashmap *, (uint64_t) hashmap_size);
 
 static int method_get_session(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Session *session;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -388,12 +406,11 @@
 static int method_get_session_by_pid(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
         Session *session = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         pid_t pid;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(pid_t) == sizeof(uint32_t));
 
@@ -426,13 +443,12 @@
 
 static int method_get_user(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint32_t uid;
         User *user;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "u", &uid);
         if (r < 0)
@@ -451,13 +467,12 @@
 
 static int method_get_user_by_pid(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         User *user = NULL;
         pid_t pid;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(pid_t) == sizeof(uint32_t));
 
@@ -490,13 +505,12 @@
 
 static int method_get_seat(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Seat *seat;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -515,12 +529,11 @@
 
 static int method_list_sessions(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_new_method_return(message, &reply);
         if (r < 0)
@@ -556,12 +569,11 @@
 
 static int method_list_users(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         User *user;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_new_method_return(message, &reply);
         if (r < 0)
@@ -595,12 +607,11 @@
 
 static int method_list_seats(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Seat *seat;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_new_method_return(message, &reply);
         if (r < 0)
@@ -631,12 +642,11 @@
 
 static int method_list_inhibitors(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Inhibitor *inhibitor;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_new_method_return(message, &reply);
         if (r < 0)
@@ -671,7 +681,7 @@
         _cleanup_free_ char *id = NULL;
         Session *session = NULL;
         uint32_t audit_id = 0;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         User *user = NULL;
         Seat *seat = NULL;
         pid_t leader;
@@ -683,7 +693,6 @@
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(pid_t) == sizeof(uint32_t));
         assert_cc(sizeof(uid_t) == sizeof(uint32_t));
@@ -975,13 +984,12 @@
 }
 
 static int method_release_session(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         const char *name;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -999,13 +1007,12 @@
 }
 
 static int method_activate_session(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         const char *name;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -1022,13 +1029,12 @@
 
 static int method_activate_session_on_seat(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *session_name, *seat_name;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         Seat *seat;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Same as ActivateSession() but refuses to work if the seat doesn't match */
 
@@ -1062,13 +1068,12 @@
 }
 
 static int method_lock_session(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         const char *name;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -1082,11 +1087,10 @@
 }
 
 static int method_lock_sessions(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = bus_verify_polkit_async(
                         message,
@@ -1111,12 +1115,11 @@
 
 static int method_kill_session(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *name;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -1130,13 +1133,12 @@
 }
 
 static int method_kill_user(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint32_t uid;
         User *user;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "u", &uid);
         if (r < 0)
@@ -1150,13 +1152,12 @@
 }
 
 static int method_terminate_session(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Session *session;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -1170,13 +1171,12 @@
 }
 
 static int method_terminate_user(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint32_t uid;
         User *user;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "u", &uid);
         if (r < 0)
@@ -1190,13 +1190,12 @@
 }
 
 static int method_terminate_seat(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Seat *seat;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -1212,14 +1211,13 @@
 static int method_set_user_linger(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
         _cleanup_free_ char *cc = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r, b, interactive;
         struct passwd *pw;
         const char *path;
         uint32_t uid, auth_uid;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "ubb", &uid, &b, &interactive);
         if (r < 0)
@@ -1370,9 +1368,7 @@
         if (!d) {
                 if (errno != ENOENT)
                         log_warning_errno(errno, "Failed to open /etc/udev/rules.d: %m");
-        } else {
-                struct dirent *de;
-
+        } else
                 FOREACH_DIRENT_ALL(de, d, break) {
                         if (!dirent_is_file(de))
                                 continue;
@@ -1386,18 +1382,16 @@
                         if (unlinkat(dirfd(d), de->d_name, 0) < 0)
                                 log_warning_errno(errno, "Failed to unlink %s: %m", de->d_name);
                 }
-        }
 
         return trigger_device(m, NULL);
 }
 
 static int method_attach_device(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *sysfs, *seat;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int interactive, r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "ssb", &seat, &sysfs, &interactive);
         if (r < 0)
@@ -1442,11 +1436,10 @@
 }
 
 static int method_flush_devices(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int interactive, r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "b", &interactive);
         if (r < 0)
@@ -1493,46 +1486,27 @@
 
 static int bus_manager_log_shutdown(
                 Manager *m,
-                const char *unit_name) {
-
-        const char *p, *q;
-
+                const HandleActionData *a) {
         assert(m);
-        assert(unit_name);
+        assert(a);
 
-        if (streq(unit_name, SPECIAL_POWEROFF_TARGET)) {
-                p = "MESSAGE=System is powering down";
-                q = "SHUTDOWN=power-off";
-        } else if (streq(unit_name, SPECIAL_REBOOT_TARGET)) {
-                p = "MESSAGE=System is rebooting";
-                q = "SHUTDOWN=reboot";
-        } else if (streq(unit_name, SPECIAL_HALT_TARGET)) {
-                p = "MESSAGE=System is halting";
-                q = "SHUTDOWN=halt";
-        } else if (streq(unit_name, SPECIAL_KEXEC_TARGET)) {
-                p = "MESSAGE=System is rebooting with kexec";
-                q = "SHUTDOWN=kexec";
-        } else {
-                p = "MESSAGE=System is shutting down";
-                q = NULL;
-        }
-
-        if (isempty(m->wall_message))
-                p = strjoina(p, ".");
-        else
-                p = strjoina(p, " (", m->wall_message, ").");
+        const char *message = a->message ?: "System is shutting down";
+        const char *log_verb = a->log_verb ? strjoina("SHUTDOWN=", a->log_verb) : NULL;
 
         return log_struct(LOG_NOTICE,
-                          "MESSAGE_ID=" SD_MESSAGE_SHUTDOWN_STR,
-                          p,
-                          q);
+                          "MESSAGE_ID=%s", a->message_id ?: SD_MESSAGE_SHUTDOWN_STR,
+                          LOG_MESSAGE("%s%s%s%s.",
+                                      message,
+                                      m->wall_message ? " (" : "",
+                                      strempty(m->wall_message),
+                                      m->wall_message ? ")" : ""),
+                          log_verb);
 }
 
 static int lid_switch_ignore_handler(sd_event_source *e, uint64_t usec, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(e);
-        assert(m);
 
         m->lid_switch_ignore_event_source = sd_event_source_unref(m->lid_switch_ignore_event_source);
         return 0;
@@ -1589,8 +1563,7 @@
 
 static int execute_shutdown_or_sleep(
                 Manager *m,
-                InhibitWhat w,
-                const char *unit_name,
+                const HandleActionData *a,
                 sd_bus_error *error) {
 
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
@@ -1598,12 +1571,10 @@
         int r;
 
         assert(m);
-        assert(w > 0);
-        assert(w < _INHIBIT_WHAT_MAX);
-        assert(unit_name);
+        assert(a);
 
-        if (w == INHIBIT_SHUTDOWN)
-                bus_manager_log_shutdown(m, unit_name);
+        if (a->inhibit_what == INHIBIT_SHUTDOWN)
+                bus_manager_log_shutdown(m, a);
 
         r = bus_call_method(
                         m->bus,
@@ -1611,7 +1582,7 @@
                         "StartUnit",
                         error,
                         &reply,
-                        "ss", unit_name, "replace-irreversibly");
+                        "ss", a->target, "replace-irreversibly");
         if (r < 0)
                 goto error;
 
@@ -1623,8 +1594,7 @@
         if (r < 0)
                 goto error;
 
-        m->action_unit = unit_name;
-        m->action_what = w;
+        m->delayed_action = a;
 
         /* Make sure the lid switch is ignored for a while */
         manager_set_lid_switch_ignore(m, usec_add(now(CLOCK_MONOTONIC), m->holdoff_timeout_usec));
@@ -1633,7 +1603,7 @@
 
 error:
         /* Tell people that they now may take a lock again */
-        (void) send_prepare_for(m, w, false);
+        (void) send_prepare_for(m, a->inhibit_what, false);
 
         return r;
 }
@@ -1645,10 +1615,10 @@
 
         assert(manager);
 
-        if (manager->action_what == 0 || manager->action_job)
+        if (!manager->delayed_action || manager->action_job)
                 return 0;
 
-        if (manager_is_inhibited(manager, manager->action_what, INHIBIT_DELAY, NULL, false, false, 0, &offending)) {
+        if (manager_is_inhibited(manager, manager->delayed_action->inhibit_what, INHIBIT_DELAY, NULL, false, false, 0, &offending)) {
                 _cleanup_free_ char *comm = NULL, *u = NULL;
 
                 if (!timeout)
@@ -1663,13 +1633,12 @@
         }
 
         /* Actually do the operation */
-        r = execute_shutdown_or_sleep(manager, manager->action_what, manager->action_unit, &error);
+        r = execute_shutdown_or_sleep(manager, manager->delayed_action, &error);
         if (r < 0) {
                 log_warning("Error during inhibitor-delayed operation (already returned success to client): %s",
                             bus_error_message(&error, r));
 
-                manager->action_unit = NULL;
-                manager->action_what = 0;
+                manager->delayed_action = NULL;
         }
 
         return 1; /* We did some work. */
@@ -1680,9 +1649,8 @@
                         uint64_t usec,
                         void *userdata) {
 
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
 
-        assert(manager);
         assert(manager->inhibit_timeout_source == s);
 
         return manager_dispatch_delayed(manager, true);
@@ -1690,15 +1658,12 @@
 
 static int delay_shutdown_or_sleep(
                 Manager *m,
-                InhibitWhat w,
-                const char *unit_name) {
+                const HandleActionData *a) {
 
         int r;
 
         assert(m);
-        assert(w >= 0);
-        assert(w < _INHIBIT_WHAT_MAX);
-        assert(unit_name);
+        assert(a);
 
         if (m->inhibit_timeout_source) {
                 r = sd_event_source_set_time_relative(m->inhibit_timeout_source, m->inhibit_delay_max);
@@ -1718,16 +1683,14 @@
                         return r;
         }
 
-        m->action_unit = unit_name;
-        m->action_what = w;
+        m->delayed_action = a;
 
         return 0;
 }
 
 int bus_manager_shutdown_or_sleep_now_or_later(
                 Manager *m,
-                const char *unit_name,
-                InhibitWhat w,
+                const HandleActionData *a,
                 sd_bus_error *error) {
 
         _cleanup_free_ char *load_state = NULL;
@@ -1735,35 +1698,33 @@
         int r;
 
         assert(m);
-        assert(unit_name);
-        assert(w > 0);
-        assert(w < _INHIBIT_WHAT_MAX);
+        assert(a);
         assert(!m->action_job);
 
-        r = unit_load_state(m->bus, unit_name, &load_state);
+        r = unit_load_state(m->bus, a->target, &load_state);
         if (r < 0)
                 return r;
 
         if (!streq(load_state, "loaded"))
                 return log_notice_errno(SYNTHETIC_ERRNO(EACCES),
                                         "Unit %s is %s, refusing operation.",
-                                        unit_name, load_state);
+                                        a->target, load_state);
 
         /* Tell everybody to prepare for shutdown/sleep */
-        (void) send_prepare_for(m, w, true);
+        (void) send_prepare_for(m, a->inhibit_what, true);
 
         delayed =
                 m->inhibit_delay_max > 0 &&
-                manager_is_inhibited(m, w, INHIBIT_DELAY, NULL, false, false, 0, NULL);
+                manager_is_inhibited(m, a->inhibit_what, INHIBIT_DELAY, NULL, false, false, 0, NULL);
 
         if (delayed)
                 /* Shutdown is delayed, keep in mind what we
                  * want to do, and start a timeout */
-                r = delay_shutdown_or_sleep(m, w, unit_name);
+                r = delay_shutdown_or_sleep(m, a);
         else
                 /* Shutdown is not delayed, execute it
                  * immediately */
-                r = execute_shutdown_or_sleep(m, w, unit_name, error);
+                r = execute_shutdown_or_sleep(m, a, error);
 
         return r;
 }
@@ -1771,10 +1732,7 @@
 static int verify_shutdown_creds(
                 Manager *m,
                 sd_bus_message *message,
-                InhibitWhat w,
-                const char *action,
-                const char *action_multiple_sessions,
-                const char *action_ignore_inhibit,
+                const HandleActionData *a,
                 uint64_t flags,
                 sd_bus_error *error) {
 
@@ -1784,9 +1742,8 @@
         int r;
 
         assert(m);
+        assert(a);
         assert(message);
-        assert(w >= 0);
-        assert(w <= _INHIBIT_WHAT_MAX);
 
         r = sd_bus_query_sender_creds(message, SD_BUS_CREDS_EUID, &creds);
         if (r < 0)
@@ -1801,11 +1758,19 @@
                 return r;
 
         multiple_sessions = r > 0;
-        blocked = manager_is_inhibited(m, w, INHIBIT_BLOCK, NULL, false, true, uid, NULL);
+        blocked = manager_is_inhibited(m, a->inhibit_what, INHIBIT_BLOCK, NULL, false, true, uid, NULL);
         interactive = flags & SD_LOGIND_INTERACTIVE;
 
-        if (multiple_sessions && action_multiple_sessions) {
-                r = bus_verify_polkit_async(message, CAP_SYS_BOOT, action_multiple_sessions, NULL, interactive, UID_INVALID, &m->polkit_registry, error);
+        if (multiple_sessions) {
+                r = bus_verify_polkit_async(
+                                message,
+                                CAP_SYS_BOOT,
+                                a->polkit_action_multiple_sessions,
+                                NULL,
+                                interactive,
+                                UID_INVALID,
+                                &m->polkit_registry,
+                                error);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -1818,17 +1783,29 @@
                         return sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED,
                                                  "Access denied to root due to active block inhibitor");
 
-                if (action_ignore_inhibit) {
-                        r = bus_verify_polkit_async(message, CAP_SYS_BOOT, action_ignore_inhibit, NULL, interactive, UID_INVALID, &m->polkit_registry, error);
-                        if (r < 0)
-                                return r;
-                        if (r == 0)
-                                return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
-                }
+                r = bus_verify_polkit_async(message,
+                                CAP_SYS_BOOT,
+                                a->polkit_action_ignore_inhibit,
+                                NULL,
+                                interactive,
+                                UID_INVALID,
+                                &m->polkit_registry,
+                                error);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
         }
 
-        if (!multiple_sessions && !blocked && action) {
-                r = bus_verify_polkit_async(message, CAP_SYS_BOOT, action, NULL, interactive, UID_INVALID, &m->polkit_registry, error);
+        if (!multiple_sessions && !blocked) {
+                r = bus_verify_polkit_async(message,
+                                CAP_SYS_BOOT,
+                                a->polkit_action,
+                                NULL,
+                                interactive,
+                                UID_INVALID,
+                                &m->polkit_registry,
+                                error);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -1838,15 +1815,33 @@
         return 0;
 }
 
+static int setup_wall_message_timer(Manager *m, sd_bus_message* message) {
+        _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
+        int r;
+
+        r = sd_bus_query_sender_creds(message, SD_BUS_CREDS_AUGMENT|SD_BUS_CREDS_TTY|SD_BUS_CREDS_UID, &creds);
+        if (r >= 0) {
+                const char *tty = NULL;
+
+                (void) sd_bus_creds_get_uid(creds, &m->scheduled_shutdown_uid);
+                (void) sd_bus_creds_get_tty(creds, &tty);
+
+                r = free_and_strdup(&m->scheduled_shutdown_tty, tty);
+                if (r < 0)
+                        return log_oom();
+        }
+
+        r = manager_setup_wall_message_timer(m);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
 static int method_do_shutdown_or_sleep(
                 Manager *m,
                 sd_bus_message *message,
-                const char *unit_name,
-                InhibitWhat w,
-                const char *action,
-                const char *action_multiple_sessions,
-                const char *action_ignore_inhibit,
-                SleepOperation sleep_operation,
+                const HandleActionData *a,
                 bool with_flags,
                 sd_bus_error *error) {
 
@@ -1855,9 +1850,7 @@
 
         assert(m);
         assert(message);
-        assert(unit_name);
-        assert(w >= 0);
-        assert(w <= _INHIBIT_WHAT_MAX);
+        assert(a);
 
         if (with_flags) {
                 /* New style method: with flags parameter (and interactive bool in the bus message header) */
@@ -1865,9 +1858,11 @@
                 if (r < 0)
                         return r;
                 if ((flags & ~SD_LOGIND_SHUTDOWN_AND_SLEEP_FLAGS_PUBLIC) != 0)
-                        return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid flags parameter");
-                if (!streq(unit_name, SPECIAL_REBOOT_TARGET) && (flags & SD_LOGIND_REBOOT_VIA_KEXEC))
-                        return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Reboot via kexec is only applicable with reboot operations");
+                        return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                "Invalid flags parameter");
+                if (a->handle != HANDLE_REBOOT && (flags & SD_LOGIND_REBOOT_VIA_KEXEC))
+                        return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                "Reboot via kexec is only applicable with reboot operations");
         } else {
                 /* Old style method: no flags parameter, but interactive bool passed as boolean in
                  * payload. Let's convert this argument to the new-style flags parameter for our internal
@@ -1882,31 +1877,40 @@
         }
 
         if ((flags & SD_LOGIND_REBOOT_VIA_KEXEC) && kexec_loaded())
-                unit_name = SPECIAL_KEXEC_TARGET;
+                a = handle_action_lookup(HANDLE_KEXEC);
 
         /* Don't allow multiple jobs being executed at the same time */
-        if (m->action_what > 0)
+        if (m->delayed_action)
                 return sd_bus_error_setf(error, BUS_ERROR_OPERATION_IN_PROGRESS,
                                          "There's already a shutdown or sleep operation in progress");
 
-        if (sleep_operation >= 0) {
-                r = can_sleep(sleep_operation);
+        if (a->sleep_operation >= 0) {
+                r = can_sleep(a->sleep_operation);
                 if (r == -ENOSPC)
                         return sd_bus_error_set(error, BUS_ERROR_SLEEP_VERB_NOT_SUPPORTED,
                                                 "Not enough swap space for hibernation");
                 if (r == 0)
                         return sd_bus_error_setf(error, BUS_ERROR_SLEEP_VERB_NOT_SUPPORTED,
-                                                 "Sleep verb \"%s\" not supported", sleep_operation_to_string(sleep_operation));
+                                                 "Sleep verb \"%s\" not supported",
+                                                 sleep_operation_to_string(a->sleep_operation));
                 if (r < 0)
                         return r;
         }
 
-        r = verify_shutdown_creds(m, message, w, action, action_multiple_sessions,
-                                  action_ignore_inhibit, flags, error);
+        r = verify_shutdown_creds(m, message, a, flags, error);
         if (r != 0)
                 return r;
 
-        r = bus_manager_shutdown_or_sleep_now_or_later(m, unit_name, w, error);
+        /* reset case we're shorting a scheduled shutdown */
+        m->unlink_nologin = false;
+        reset_scheduled_shutdown(m);
+
+        m->scheduled_shutdown_timeout = 0;
+        m->scheduled_shutdown_action = a;
+
+        (void) setup_wall_message_timer(m, message);
+
+        r = bus_manager_shutdown_or_sleep_now_or_later(m, a, error);
         if (r < 0)
                 return r;
 
@@ -1918,12 +1922,7 @@
 
         return method_do_shutdown_or_sleep(
                         m, message,
-                        SPECIAL_POWEROFF_TARGET,
-                        INHIBIT_SHUTDOWN,
-                        "org.freedesktop.login1.power-off",
-                        "org.freedesktop.login1.power-off-multiple-sessions",
-                        "org.freedesktop.login1.power-off-ignore-inhibit",
-                        _SLEEP_OPERATION_INVALID,
+                        handle_action_lookup(HANDLE_POWEROFF),
                         sd_bus_message_is_method_call(message, NULL, "PowerOffWithFlags"),
                         error);
 }
@@ -1933,12 +1932,7 @@
 
         return method_do_shutdown_or_sleep(
                         m, message,
-                        SPECIAL_REBOOT_TARGET,
-                        INHIBIT_SHUTDOWN,
-                        "org.freedesktop.login1.reboot",
-                        "org.freedesktop.login1.reboot-multiple-sessions",
-                        "org.freedesktop.login1.reboot-ignore-inhibit",
-                        _SLEEP_OPERATION_INVALID,
+                        handle_action_lookup(HANDLE_REBOOT),
                         sd_bus_message_is_method_call(message, NULL, "RebootWithFlags"),
                         error);
 }
@@ -1948,12 +1942,7 @@
 
         return method_do_shutdown_or_sleep(
                         m, message,
-                        SPECIAL_HALT_TARGET,
-                        INHIBIT_SHUTDOWN,
-                        "org.freedesktop.login1.halt",
-                        "org.freedesktop.login1.halt-multiple-sessions",
-                        "org.freedesktop.login1.halt-ignore-inhibit",
-                        _SLEEP_OPERATION_INVALID,
+                        handle_action_lookup(HANDLE_HALT),
                         sd_bus_message_is_method_call(message, NULL, "HaltWithFlags"),
                         error);
 }
@@ -1963,12 +1952,7 @@
 
         return method_do_shutdown_or_sleep(
                         m, message,
-                        SPECIAL_SUSPEND_TARGET,
-                        INHIBIT_SLEEP,
-                        "org.freedesktop.login1.suspend",
-                        "org.freedesktop.login1.suspend-multiple-sessions",
-                        "org.freedesktop.login1.suspend-ignore-inhibit",
-                        SLEEP_SUSPEND,
+                        handle_action_lookup(HANDLE_SUSPEND),
                         sd_bus_message_is_method_call(message, NULL, "SuspendWithFlags"),
                         error);
 }
@@ -1978,12 +1962,7 @@
 
         return method_do_shutdown_or_sleep(
                         m, message,
-                        SPECIAL_HIBERNATE_TARGET,
-                        INHIBIT_SLEEP,
-                        "org.freedesktop.login1.hibernate",
-                        "org.freedesktop.login1.hibernate-multiple-sessions",
-                        "org.freedesktop.login1.hibernate-ignore-inhibit",
-                        SLEEP_HIBERNATE,
+                        handle_action_lookup(HANDLE_HIBERNATE),
                         sd_bus_message_is_method_call(message, NULL, "HibernateWithFlags"),
                         error);
 }
@@ -1993,12 +1972,7 @@
 
         return method_do_shutdown_or_sleep(
                         m, message,
-                        SPECIAL_HYBRID_SLEEP_TARGET,
-                        INHIBIT_SLEEP,
-                        "org.freedesktop.login1.hibernate",
-                        "org.freedesktop.login1.hibernate-multiple-sessions",
-                        "org.freedesktop.login1.hibernate-ignore-inhibit",
-                        SLEEP_HYBRID_SLEEP,
+                        handle_action_lookup(HANDLE_HYBRID_SLEEP),
                         sd_bus_message_is_method_call(message, NULL, "HybridSleepWithFlags"),
                         error);
 }
@@ -2008,12 +1982,7 @@
 
         return method_do_shutdown_or_sleep(
                         m, message,
-                        SPECIAL_SUSPEND_THEN_HIBERNATE_TARGET,
-                        INHIBIT_SLEEP,
-                        "org.freedesktop.login1.hibernate",
-                        "org.freedesktop.login1.hibernate-multiple-sessions",
-                        "org.freedesktop.login1.hibernate-ignore-inhibit",
-                        SLEEP_SUSPEND_THEN_HIBERNATE,
+                        handle_action_lookup(HANDLE_SUSPEND_THEN_HIBERNATE),
                         sd_bus_message_is_method_call(message, NULL, "SuspendThenHibernateWithFlags"),
                         error);
 }
@@ -2038,48 +2007,118 @@
         return LESS_BY(elapse, 5 * USEC_PER_MINUTE);
 }
 
+void manager_load_scheduled_shutdown(Manager *m) {
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_free_ char *usec = NULL,
+               *warn_wall = NULL,
+               *mode = NULL,
+               *wall_message = NULL,
+               *uid = NULL,
+               *tty = NULL;
+        int r;
+
+        assert(m);
+
+        r = parse_env_file(f, SHUTDOWN_SCHEDULE_FILE,
+                        "USEC", &usec,
+                        "WARN_WALL", &warn_wall,
+                        "MODE", &mode,
+                        "WALL_MESSAGE", &wall_message,
+                        "UID", &uid,
+                        "TTY", &tty);
+
+        /* reset will delete the file */
+        reset_scheduled_shutdown(m);
+
+        if (r == -ENOENT)
+                return;
+        if (r < 0)
+                return (void) log_debug_errno(r, "Failed to parse " SHUTDOWN_SCHEDULE_FILE ": %m");
+
+        HandleAction handle = handle_action_from_string(mode);
+        if (handle < 0)
+                return (void) log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse scheduled shutdown type: %s", mode);
+
+        if (!usec)
+                return (void) log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "USEC is required");
+        if (deserialize_usec(usec, &m->scheduled_shutdown_timeout) < 0)
+                return;
+
+        /* assign parsed type only after we know usec is also valid */
+        m->scheduled_shutdown_action = handle_action_lookup(handle);
+
+        if (warn_wall) {
+                r = parse_boolean(warn_wall);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to parse enabling wall messages");
+                else
+                        m->enable_wall_messages = r;
+        }
+
+        if (wall_message) {
+                _cleanup_free_ char *unescaped = NULL;
+                r = cunescape(wall_message, 0, &unescaped);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to parse wall message: %s", wall_message);
+                else
+                        free_and_replace(m->wall_message, unescaped);
+        }
+
+        if (uid) {
+                r = parse_uid(uid, &m->scheduled_shutdown_uid);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to parse wall uid: %s", uid);
+        }
+
+        free_and_replace(m->scheduled_shutdown_tty, tty);
+
+        r = manager_setup_shutdown_timers(m);
+        if (r < 0)
+                return reset_scheduled_shutdown(m);
+
+        (void) manager_setup_wall_message_timer(m);
+        (void) update_schedule_file(m);
+
+        return;
+}
+
 static int update_schedule_file(Manager *m) {
         _cleanup_free_ char *temp_path = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         int r;
 
         assert(m);
+        assert(m->scheduled_shutdown_action);
 
-        r = mkdir_safe_label("/run/systemd/shutdown", 0755, 0, 0, MKDIR_WARN_MODE);
+        r = mkdir_parents_label(SHUTDOWN_SCHEDULE_FILE, 0755);
         if (r < 0)
                 return log_error_errno(r, "Failed to create shutdown subdirectory: %m");
 
-        r = fopen_temporary("/run/systemd/shutdown/scheduled", &f, &temp_path);
+        r = fopen_temporary(SHUTDOWN_SCHEDULE_FILE, &f, &temp_path);
         if (r < 0)
                 return log_error_errno(r, "Failed to save information about scheduled shutdowns: %m");
 
         (void) fchmod(fileno(f), 0644);
 
-        fprintf(f,
-                "USEC="USEC_FMT"\n"
-                "WARN_WALL=%i\n"
-                "MODE=%s\n",
-                m->scheduled_shutdown_timeout,
-                m->enable_wall_messages,
-                m->scheduled_shutdown_type);
+        serialize_usec(f, "USEC", m->scheduled_shutdown_timeout);
+        serialize_item_format(f, "WARN_WALL", "%s", one_zero(m->enable_wall_messages));
+        serialize_item_format(f, "MODE", "%s", handle_action_to_string(m->scheduled_shutdown_action->handle));
+        serialize_item_format(f, "UID", UID_FMT, m->scheduled_shutdown_uid);
+
+        if (m->scheduled_shutdown_tty)
+                serialize_item_format(f, "TTY", "%s", m->scheduled_shutdown_tty);
 
         if (!isempty(m->wall_message)) {
-                _cleanup_free_ char *t = NULL;
-
-                t = cescape(m->wall_message);
-                if (!t) {
-                        r = -ENOMEM;
+                r = serialize_item_escaped(f, "WALL_MESSAGE", m->wall_message);
+                if (r < 0)
                         goto fail;
-                }
-
-                fprintf(f, "WALL_MESSAGE=%s\n", t);
         }
 
         r = fflush_and_check(f);
         if (r < 0)
                 goto fail;
 
-        if (rename(temp_path, "/run/systemd/shutdown/scheduled") < 0) {
+        if (rename(temp_path, SHUTDOWN_SCHEDULE_FILE) < 0) {
                 r = -errno;
                 goto fail;
         }
@@ -2088,7 +2127,7 @@
 
 fail:
         (void) unlink(temp_path);
-        (void) unlink("/run/systemd/shutdown/scheduled");
+        (void) unlink(SHUTDOWN_SCHEDULE_FILE);
 
         return log_error_errno(r, "Failed to write information about scheduled shutdowns: %m");
 }
@@ -2100,8 +2139,11 @@
         m->wall_message_timeout_source = sd_event_source_unref(m->wall_message_timeout_source);
         m->nologin_timeout_source = sd_event_source_unref(m->nologin_timeout_source);
 
-        m->scheduled_shutdown_type = mfree(m->scheduled_shutdown_type);
-        m->scheduled_shutdown_timeout = 0;
+        m->scheduled_shutdown_action = NULL;
+        m->scheduled_shutdown_timeout = USEC_INFINITY;
+        m->scheduled_shutdown_uid = UID_INVALID;
+        m->scheduled_shutdown_tty = mfree(m->scheduled_shutdown_tty);
+        m->wall_message = mfree(m->wall_message);
         m->shutdown_dry_run = false;
 
         if (m->unlink_nologin) {
@@ -2109,7 +2151,7 @@
                 m->unlink_nologin = false;
         }
 
-        (void) unlink("/run/systemd/shutdown/scheduled");
+        (void) unlink(SHUTDOWN_SCHEDULE_FILE);
 }
 
 static int manager_scheduled_shutdown_handler(
@@ -2117,31 +2159,18 @@
                         uint64_t usec,
                         void *userdata) {
 
+        const HandleActionData *a = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        Manager *m = userdata;
-        const char *target;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
-        assert(m);
-
-        if (isempty(m->scheduled_shutdown_type))
-                return 0;
-
-        if (streq(m->scheduled_shutdown_type, "poweroff"))
-                target = SPECIAL_POWEROFF_TARGET;
-        else if (streq(m->scheduled_shutdown_type, "reboot"))
-                target = SPECIAL_REBOOT_TARGET;
-        else if (streq(m->scheduled_shutdown_type, "kexec"))
-                target = SPECIAL_KEXEC_TARGET;
-        else if (streq(m->scheduled_shutdown_type, "halt"))
-                target = SPECIAL_HALT_TARGET;
-        else
-                assert_not_reached("unexpected shutdown type");
+        a = m->scheduled_shutdown_action;
+        assert(a);
 
         /* Don't allow multiple jobs being executed at the same time */
-        if (m->action_what > 0) {
+        if (m->delayed_action) {
                 r = -EALREADY;
-                log_error("Scheduled shutdown to %s failed: shutdown or sleep operation already in progress", target);
+                log_error("Scheduled shutdown to %s failed: shutdown or sleep operation already in progress", a->target);
                 goto error;
         }
 
@@ -2151,16 +2180,16 @@
                  * above) for some seconds after our admin has seen the final
                  * wall message. */
 
-                bus_manager_log_shutdown(m, target);
+                bus_manager_log_shutdown(m, a);
                 log_info("Running in dry run, suppressing action.");
                 reset_scheduled_shutdown(m);
 
                 return 0;
         }
 
-        r = bus_manager_shutdown_or_sleep_now_or_later(m, target, INHIBIT_SHUTDOWN, &error);
+        r = bus_manager_shutdown_or_sleep_now_or_later(m, m->scheduled_shutdown_action, &error);
         if (r < 0) {
-                log_error_errno(r, "Scheduled shutdown to %s failed: %m", target);
+                log_error_errno(r, "Scheduled shutdown to %s failed: %m", a->target);
                 goto error;
         }
 
@@ -2172,17 +2201,14 @@
 }
 
 static int method_schedule_shutdown(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
-        _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
-        const char *action_multiple_sessions = NULL;
-        const char *action_ignore_inhibit = NULL;
-        const char *action = NULL;
+        Manager *m = ASSERT_PTR(userdata);
+        HandleAction handle;
+        const HandleActionData *a;
         uint64_t elapse;
         char *type;
         int r;
         bool dry_run = false;
 
-        assert(m);
         assert(message);
 
         r = sd_bus_message_read(message, "st", &type, &elapse);
@@ -2194,107 +2220,101 @@
                 dry_run = true;
         }
 
-        if (streq(type, "poweroff")) {
-                action = "org.freedesktop.login1.power-off";
-                action_multiple_sessions = "org.freedesktop.login1.power-off-multiple-sessions";
-                action_ignore_inhibit = "org.freedesktop.login1.power-off-ignore-inhibit";
-        } else if (STR_IN_SET(type, "reboot", "kexec")) {
-                action = "org.freedesktop.login1.reboot";
-                action_multiple_sessions = "org.freedesktop.login1.reboot-multiple-sessions";
-                action_ignore_inhibit = "org.freedesktop.login1.reboot-ignore-inhibit";
-        } else if (streq(type, "halt")) {
-                action = "org.freedesktop.login1.halt";
-                action_multiple_sessions = "org.freedesktop.login1.halt-multiple-sessions";
-                action_ignore_inhibit = "org.freedesktop.login1.halt-ignore-inhibit";
-        } else
+        handle = handle_action_from_string(type);
+        if (!IN_SET(handle, HANDLE_POWEROFF, HANDLE_REBOOT, HANDLE_HALT, HANDLE_KEXEC))
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Unsupported shutdown type");
 
-        r = verify_shutdown_creds(m, message, INHIBIT_SHUTDOWN, action, action_multiple_sessions,
-                                  action_ignore_inhibit, 0, error);
+        a = handle_action_lookup(handle);
+        assert(a);
+        assert(a->polkit_action);
+
+        r = verify_shutdown_creds(m, message, a, 0, error);
         if (r != 0)
                 return r;
 
-        if (m->scheduled_shutdown_timeout_source) {
-                r = sd_event_source_set_time(m->scheduled_shutdown_timeout_source, elapse);
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_source_set_time() failed: %m");
-
-                r = sd_event_source_set_enabled(m->scheduled_shutdown_timeout_source, SD_EVENT_ONESHOT);
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_source_set_enabled() failed: %m");
-        } else {
-                r = sd_event_add_time(m->event, &m->scheduled_shutdown_timeout_source,
-                                      CLOCK_REALTIME, elapse, 0, manager_scheduled_shutdown_handler, m);
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_add_time() failed: %m");
-        }
-
-        r = free_and_strdup(&m->scheduled_shutdown_type, type);
-        if (r < 0) {
-                m->scheduled_shutdown_timeout_source = sd_event_source_unref(m->scheduled_shutdown_timeout_source);
-                return log_oom();
-        }
-
+        m->scheduled_shutdown_action = a;
         m->shutdown_dry_run = dry_run;
-
-        if (m->nologin_timeout_source) {
-                r = sd_event_source_set_time(m->nologin_timeout_source, nologin_timeout_usec(elapse));
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_source_set_time() failed: %m");
-
-                r = sd_event_source_set_enabled(m->nologin_timeout_source, SD_EVENT_ONESHOT);
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_source_set_enabled() failed: %m");
-        } else {
-                r = sd_event_add_time(m->event, &m->nologin_timeout_source,
-                                      CLOCK_REALTIME, nologin_timeout_usec(elapse), 0, nologin_timeout_handler, m);
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_add_time() failed: %m");
-        }
-
         m->scheduled_shutdown_timeout = elapse;
 
-        r = sd_bus_query_sender_creds(message, SD_BUS_CREDS_AUGMENT|SD_BUS_CREDS_TTY|SD_BUS_CREDS_UID, &creds);
-        if (r >= 0) {
-                const char *tty = NULL;
+        r = manager_setup_shutdown_timers(m);
+        if (r < 0)
+                return r;
 
-                (void) sd_bus_creds_get_uid(creds, &m->scheduled_shutdown_uid);
-                (void) sd_bus_creds_get_tty(creds, &tty);
+        r = setup_wall_message_timer(m, message);
+        if (r >= 0)
+                r = update_schedule_file(m);
 
-                r = free_and_strdup(&m->scheduled_shutdown_tty, tty);
-                if (r < 0) {
-                        m->scheduled_shutdown_timeout_source = sd_event_source_unref(m->scheduled_shutdown_timeout_source);
-                        return log_oom();
-                }
+        if (r < 0) {
+                reset_scheduled_shutdown(m);
+                return r;
         }
 
-        r = manager_setup_wall_message_timer(m);
-        if (r < 0)
-                return r;
-
-        r = update_schedule_file(m);
-        if (r < 0)
-                return r;
-
         return sd_bus_reply_method_return(message, NULL);
 }
 
-static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
-        bool cancelled;
+static int manager_setup_shutdown_timers(Manager* m) {
+        int r;
 
-        assert(m);
+        r = event_reset_time(m->event, &m->scheduled_shutdown_timeout_source,
+                             CLOCK_REALTIME,
+                             m->scheduled_shutdown_timeout, 0,
+                             manager_scheduled_shutdown_handler, m,
+                             0, "scheduled-shutdown-timeout", true);
+        if (r < 0)
+                goto fail;
+
+        r = event_reset_time(m->event, &m->nologin_timeout_source,
+                             CLOCK_REALTIME,
+                             nologin_timeout_usec(m->scheduled_shutdown_timeout), 0,
+                             nologin_timeout_handler, m,
+                             0, "nologin-timeout", true);
+        if (r < 0)
+                goto fail;
+
+        return 0;
+
+fail:
+        m->scheduled_shutdown_timeout_source = sd_event_source_unref(m->scheduled_shutdown_timeout_source);
+        m->nologin_timeout_source = sd_event_source_unref(m->nologin_timeout_source);
+
+        return r;
+}
+
+static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        Manager *m = ASSERT_PTR(userdata);
+        const HandleActionData *a;
+        bool cancelled;
+        int r;
+
         assert(message);
 
-        cancelled = m->scheduled_shutdown_type != NULL;
-        reset_scheduled_shutdown(m);
+        cancelled = m->scheduled_shutdown_action
+                && !IN_SET(m->scheduled_shutdown_action->handle, HANDLE_IGNORE, _HANDLE_ACTION_INVALID);
+        if (!cancelled)
+                return sd_bus_reply_method_return(message, "b", false);
 
-        if (cancelled && m->enable_wall_messages) {
+        a = m->scheduled_shutdown_action;
+        if (!a->polkit_action)
+                return sd_bus_error_set(error, SD_BUS_ERROR_AUTH_FAILED, "Unsupported shutdown type");
+
+        r = bus_verify_polkit_async(
+                        message,
+                        CAP_SYS_BOOT,
+                        a->polkit_action,
+                        NULL,
+                        false,
+                        UID_INVALID,
+                        &m->polkit_registry,
+                        error);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
+
+        if (m->enable_wall_messages) {
                 _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
-                _cleanup_free_ char *username = NULL;
                 const char *tty = NULL;
                 uid_t uid = 0;
-                int r;
 
                 r = sd_bus_query_sender_creds(message, SD_BUS_CREDS_AUGMENT|SD_BUS_CREDS_TTY|SD_BUS_CREDS_UID, &creds);
                 if (r >= 0) {
@@ -2302,26 +2322,30 @@
                         (void) sd_bus_creds_get_tty(creds, &tty);
                 }
 
-                username = uid_to_name(uid);
-                utmp_wall("The system shutdown has been cancelled",
+                _cleanup_free_ char *username = uid_to_name(uid);
+
+                log_struct(LOG_INFO,
+                           LOG_MESSAGE("System shutdown has been cancelled"),
+                           "ACTION=%s", handle_action_to_string(a->handle),
+                           "MESSAGE_ID=" SD_MESSAGE_SHUTDOWN_CANCELED_STR,
+                           username ? "OPERATOR=%s" : NULL, username);
+
+                utmp_wall("System shutdown has been cancelled",
                           username, tty, logind_wall_tty_filter, m);
         }
 
-        return sd_bus_reply_method_return(message, "b", cancelled);
+        reset_scheduled_shutdown(m);
+
+        return sd_bus_reply_method_return(message, "b", true);
 }
 
 static int method_can_shutdown_or_sleep(
                 Manager *m,
                 sd_bus_message *message,
-                InhibitWhat w,
-                const char *action,
-                const char *action_multiple_sessions,
-                const char *action_ignore_inhibit,
-                SleepOperation sleep_operation,
+                const HandleActionData *a,
                 sd_bus_error *error) {
 
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
-        HandleAction handle;
         bool multiple_sessions, challenge, blocked;
         const char *result = NULL;
         uid_t uid;
@@ -2329,14 +2353,10 @@
 
         assert(m);
         assert(message);
-        assert(w >= 0);
-        assert(w <= _INHIBIT_WHAT_MAX);
-        assert(action);
-        assert(action_multiple_sessions);
-        assert(action_ignore_inhibit);
+        assert(a);
 
-        if (sleep_operation >= 0) {
-                r = can_sleep(sleep_operation);
+        if (a->sleep_operation >= 0) {
+                r = can_sleep(a->sleep_operation);
                 if (IN_SET(r,  0, -ENOSPC))
                         return sd_bus_reply_method_return(message, "s", "na");
                 if (r < 0)
@@ -2356,13 +2376,13 @@
                 return r;
 
         multiple_sessions = r > 0;
-        blocked = manager_is_inhibited(m, w, INHIBIT_BLOCK, NULL, false, true, uid, NULL);
+        blocked = manager_is_inhibited(m, a->inhibit_what, INHIBIT_BLOCK, NULL, false, true, uid, NULL);
 
-        handle = handle_action_from_string(sleep_operation_to_string(sleep_operation));
+        HandleAction handle = handle_action_from_string(sleep_operation_to_string(a->sleep_operation));
         if (handle >= 0) {
                 const char *target;
 
-                target = manager_target_for_action(handle);
+                target = handle_action_lookup(handle)->target;
                 if (target) {
                         _cleanup_free_ char *load_state = NULL;
 
@@ -2378,7 +2398,7 @@
         }
 
         if (multiple_sessions) {
-                r = bus_test_polkit(message, CAP_SYS_BOOT, action_multiple_sessions, NULL, UID_INVALID, &challenge, error);
+                r = bus_test_polkit(message, CAP_SYS_BOOT, a->polkit_action_multiple_sessions, NULL, UID_INVALID, &challenge, error);
                 if (r < 0)
                         return r;
 
@@ -2391,7 +2411,7 @@
         }
 
         if (blocked) {
-                r = bus_test_polkit(message, CAP_SYS_BOOT, action_ignore_inhibit, NULL, UID_INVALID, &challenge, error);
+                r = bus_test_polkit(message, CAP_SYS_BOOT, a->polkit_action_ignore_inhibit, NULL, UID_INVALID, &challenge, error);
                 if (r < 0)
                         return r;
 
@@ -2409,7 +2429,7 @@
                 /* If neither inhibit nor multiple sessions
                  * apply then just check the normal policy */
 
-                r = bus_test_polkit(message, CAP_SYS_BOOT, action, NULL, UID_INVALID, &challenge, error);
+                r = bus_test_polkit(message, CAP_SYS_BOOT, a->polkit_action, NULL, UID_INVALID, &challenge, error);
                 if (r < 0)
                         return r;
 
@@ -2429,12 +2449,7 @@
         Manager *m = userdata;
 
         return method_can_shutdown_or_sleep(
-                        m, message,
-                        INHIBIT_SHUTDOWN,
-                        "org.freedesktop.login1.power-off",
-                        "org.freedesktop.login1.power-off-multiple-sessions",
-                        "org.freedesktop.login1.power-off-ignore-inhibit",
-                        _SLEEP_OPERATION_INVALID,
+                        m, message, handle_action_lookup(HANDLE_POWEROFF),
                         error);
 }
 
@@ -2442,12 +2457,7 @@
         Manager *m = userdata;
 
         return method_can_shutdown_or_sleep(
-                        m, message,
-                        INHIBIT_SHUTDOWN,
-                        "org.freedesktop.login1.reboot",
-                        "org.freedesktop.login1.reboot-multiple-sessions",
-                        "org.freedesktop.login1.reboot-ignore-inhibit",
-                        _SLEEP_OPERATION_INVALID,
+                        m, message, handle_action_lookup(HANDLE_REBOOT),
                         error);
 }
 
@@ -2455,12 +2465,7 @@
         Manager *m = userdata;
 
         return method_can_shutdown_or_sleep(
-                        m, message,
-                        INHIBIT_SHUTDOWN,
-                        "org.freedesktop.login1.halt",
-                        "org.freedesktop.login1.halt-multiple-sessions",
-                        "org.freedesktop.login1.halt-ignore-inhibit",
-                        _SLEEP_OPERATION_INVALID,
+                        m, message, handle_action_lookup(HANDLE_HALT),
                         error);
 }
 
@@ -2468,12 +2473,7 @@
         Manager *m = userdata;
 
         return method_can_shutdown_or_sleep(
-                        m, message,
-                        INHIBIT_SLEEP,
-                        "org.freedesktop.login1.suspend",
-                        "org.freedesktop.login1.suspend-multiple-sessions",
-                        "org.freedesktop.login1.suspend-ignore-inhibit",
-                        SLEEP_SUSPEND,
+                        m, message, handle_action_lookup(HANDLE_SUSPEND),
                         error);
 }
 
@@ -2481,12 +2481,7 @@
         Manager *m = userdata;
 
         return method_can_shutdown_or_sleep(
-                        m, message,
-                        INHIBIT_SLEEP,
-                        "org.freedesktop.login1.hibernate",
-                        "org.freedesktop.login1.hibernate-multiple-sessions",
-                        "org.freedesktop.login1.hibernate-ignore-inhibit",
-                        SLEEP_HIBERNATE,
+                        m, message, handle_action_lookup(HANDLE_HIBERNATE),
                         error);
 }
 
@@ -2494,12 +2489,7 @@
         Manager *m = userdata;
 
         return method_can_shutdown_or_sleep(
-                        m, message,
-                        INHIBIT_SLEEP,
-                        "org.freedesktop.login1.hibernate",
-                        "org.freedesktop.login1.hibernate-multiple-sessions",
-                        "org.freedesktop.login1.hibernate-ignore-inhibit",
-                        SLEEP_HYBRID_SLEEP,
+                        m, message, handle_action_lookup(HANDLE_HYBRID_SLEEP),
                         error);
 }
 
@@ -2507,12 +2497,7 @@
         Manager *m = userdata;
 
         return method_can_shutdown_or_sleep(
-                        m, message,
-                        INHIBIT_SLEEP,
-                        "org.freedesktop.login1.hibernate",
-                        "org.freedesktop.login1.hibernate-multiple-sessions",
-                        "org.freedesktop.login1.hibernate-ignore-inhibit",
-                        SLEEP_SUSPEND_THEN_HIBERNATE,
+                        m, message, handle_action_lookup(HANDLE_SUSPEND_THEN_HIBERNATE),
                         error);
 }
 
@@ -2543,12 +2528,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *arg;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &arg);
         if (r < 0)
@@ -2586,11 +2570,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _unused_ Manager *m = userdata;
+        _unused_ Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = detect_container();
         if (r < 0)
@@ -2648,12 +2631,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         bool use_efi;
         int b, r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "b", &b);
         if (r < 0)
@@ -2718,11 +2700,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _unused_ Manager *m = userdata;
+        _unused_ Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = getenv_bool("SYSTEMD_REBOOT_TO_FIRMWARE_SETUP");
         if (r == -ENXIO) {
@@ -2772,7 +2753,7 @@
 
         r = getenv_bool("SYSTEMD_REBOOT_TO_BOOT_LOADER_MENU");
         if (r == -ENXIO) {
-                /* EFI case: returns the current value of LoaderConfigTimeoutOneShot. Three cases are distuingished:
+                /* EFI case: returns the current value of LoaderConfigTimeoutOneShot. Three cases are distinguished:
                  *
                  *     1. Variable not set, boot into boot loader menu is not enabled (we return UINT64_MAX to the user)
                  *     2. Variable set to "0", boot into boot loader menu is enabled with no timeout (we return 0 to the user)
@@ -2811,13 +2792,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         bool use_efi;
         uint64_t x;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "t", &x);
         if (r < 0)
@@ -2895,11 +2875,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _unused_ Manager *m = userdata;
+        _unused_ Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = getenv_bool("SYSTEMD_REBOOT_TO_BOOT_LOADER_MENU");
         if (r == -ENXIO) {
@@ -2941,13 +2920,12 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *v = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *x = NULL;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         r = getenv_bool("SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY");
         if (r == -ENXIO) {
@@ -2980,21 +2958,21 @@
 }
 
 static int boot_loader_entry_exists(Manager *m, const char *id) {
-        _cleanup_(boot_config_free) BootConfig config = {};
+        _cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
         int r;
 
         assert(m);
         assert(id);
 
-        r = boot_entries_load_config_auto(NULL, NULL, &config);
+        r = boot_config_load_auto(&config, NULL, NULL);
         if (r < 0 && r != -ENOKEY) /* don't complain if no GPT is found, hence skip ENOKEY */
                 return r;
 
         r = manager_read_efi_boot_loader_entries(m);
         if (r >= 0)
-                (void) boot_entries_augment_from_loader(&config, m->efi_boot_loader_entries, true);
+                (void) boot_config_augment_from_loader(&config, m->efi_boot_loader_entries, /* auto_only= */ true);
 
-        return boot_config_has_entry(&config, id);
+        return !!boot_config_find_entry(&config, id);
 }
 
 static int method_set_reboot_to_boot_loader_entry(
@@ -3002,13 +2980,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         bool use_efi;
         const char *v;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &v);
         if (r < 0)
@@ -3090,11 +3067,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _unused_ Manager *m = userdata;
+        _unused_ Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = getenv_bool("SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY");
         if (r == -ENXIO) {
@@ -3135,22 +3111,21 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_(boot_config_free) BootConfig config = {};
-        Manager *m = userdata;
+        _cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
+        Manager *m = ASSERT_PTR(userdata);
         size_t i;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(m);
 
-        r = boot_entries_load_config_auto(NULL, NULL, &config);
+        r = boot_config_load_auto(&config, NULL, NULL);
         if (r < 0 && r != -ENOKEY) /* don't complain if there's no GPT found */
                 return r;
 
         r = manager_read_efi_boot_loader_entries(m);
         if (r >= 0)
-                (void) boot_entries_augment_from_loader(&config, m->efi_boot_loader_entries, true);
+                (void) boot_config_augment_from_loader(&config, m->efi_boot_loader_entries, /* auto_only= */ true);
 
         r = sd_bus_message_open_container(reply, 'a', "s");
         if (r < 0)
@@ -3173,17 +3148,21 @@
                 sd_bus_error *error) {
 
         int r;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         char *wall_message;
-        unsigned enable_wall_messages;
+        int enable_wall_messages;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "sb", &wall_message, &enable_wall_messages);
         if (r < 0)
                 return r;
 
+        if (strlen(wall_message) > WALL_MESSAGE_MAX)
+                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
+                        "Wall message too long, maximum permitted length is %u characters.",
+                        WALL_MESSAGE_MAX);
+
         /* Short-circuit the operation if the desired state is already in place, to
          * avoid an unnecessary polkit permission check. */
         if (streq_ptr(m->wall_message, empty_to_null(wall_message)) &&
@@ -3217,8 +3196,8 @@
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
         const char *who, *why, *what, *mode;
         _cleanup_free_ char *id = NULL;
-        _cleanup_close_ int fifo_fd = -1;
-        Manager *m = userdata;
+        _cleanup_close_ int fifo_fd = -EBADF;
+        Manager *m = ASSERT_PTR(userdata);
         InhibitMode mm;
         InhibitWhat w;
         pid_t pid;
@@ -3226,7 +3205,6 @@
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "ssss", &what, &who, &why, &mode);
         if (r < 0)
@@ -3251,7 +3229,7 @@
          * executing the operation. We shouldn't create the impression
          * that the lock was successful if the machine is about to go
          * down/suspend any moment. */
-        if (m->action_what & w)
+        if (m->delayed_action && m->delayed_action->inhibit_what & w)
                 return sd_bus_error_setf(error, BUS_ERROR_OPERATION_IN_PROGRESS,
                                          "The operation inhibition has been requested for is already running");
 
@@ -3331,13 +3309,13 @@
 static const sd_bus_vtable manager_vtable[] = {
         SD_BUS_VTABLE_START(0),
 
-        SD_BUS_WRITABLE_PROPERTY("EnableWallMessages", "b", NULL, NULL, offsetof(Manager, enable_wall_messages), 0),
+        SD_BUS_WRITABLE_PROPERTY("EnableWallMessages", "b", bus_property_get_bool, bus_property_set_bool, offsetof(Manager, enable_wall_messages), 0),
         SD_BUS_WRITABLE_PROPERTY("WallMessage", "s", NULL, NULL, offsetof(Manager, wall_message), 0),
 
         SD_BUS_PROPERTY("NAutoVTs", "u", NULL, offsetof(Manager, n_autovts), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("KillOnlyUsers", "as", NULL, offsetof(Manager, kill_only_users), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("KillExcludeUsers", "as", NULL, offsetof(Manager, kill_exclude_users), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("KillUserProcesses", "b", NULL, offsetof(Manager, kill_user_processes), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("KillUserProcesses", "b", bus_property_get_bool, offsetof(Manager, kill_user_processes), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RebootParameter", "s", property_get_reboot_parameter, 0, 0),
         SD_BUS_PROPERTY("RebootToFirmwareSetup", "b", property_get_reboot_to_firmware_setup, 0, 0),
         SD_BUS_PROPERTY("RebootToBootLoaderMenu", "t", property_get_reboot_to_boot_loader_menu, 0, 0),
@@ -3351,8 +3329,13 @@
         SD_BUS_PROPERTY("InhibitDelayMaxUSec", "t", NULL, offsetof(Manager, inhibit_delay_max), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("UserStopDelayUSec", "t", NULL, offsetof(Manager, user_stop_delay), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HandlePowerKey", "s", property_get_handle_action, offsetof(Manager, handle_power_key), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("HandlePowerKeyLongPress", "s", property_get_handle_action, offsetof(Manager, handle_power_key_long_press), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("HandleRebootKey", "s", property_get_handle_action, offsetof(Manager, handle_reboot_key), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("HandleRebootKeyLongPress", "s", property_get_handle_action, offsetof(Manager, handle_reboot_key_long_press), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HandleSuspendKey", "s", property_get_handle_action, offsetof(Manager, handle_suspend_key), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("HandleSuspendKeyLongPress", "s", property_get_handle_action, offsetof(Manager, handle_suspend_key_long_press), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HandleHibernateKey", "s", property_get_handle_action, offsetof(Manager, handle_hibernate_key), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("HandleHibernateKeyLongPress", "s", property_get_handle_action, offsetof(Manager, handle_hibernate_key_long_press), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HandleLidSwitch", "s", property_get_handle_action, offsetof(Manager, handle_lid_switch), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HandleLidSwitchExternalPower", "s", property_get_handle_action, offsetof(Manager, handle_lid_switch_ep), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("HandleLidSwitchDocked", "s", property_get_handle_action, offsetof(Manager, handle_lid_switch_docked), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -3373,124 +3356,103 @@
         SD_BUS_PROPERTY("SessionsMax", "t", NULL, offsetof(Manager, sessions_max), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("NCurrentSessions", "t", property_get_hashmap_size, offsetof(Manager, sessions), 0),
         SD_BUS_PROPERTY("UserTasksMax", "t", property_get_compat_user_tasks_max, 0, SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
+        SD_BUS_PROPERTY("StopIdleSessionUSec", "t", NULL, offsetof(Manager, stop_idle_session_usec), SD_BUS_VTABLE_PROPERTY_CONST),
 
-        SD_BUS_METHOD_WITH_NAMES("GetSession",
-                                 "s",
-                                 SD_BUS_PARAM(session_id),
-                                 "o",
-                                 SD_BUS_PARAM(object_path),
-                                 method_get_session,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetSessionByPID",
-                                 "u",
-                                 SD_BUS_PARAM(pid),
-                                 "o",
-                                 SD_BUS_PARAM(object_path),
-                                 method_get_session_by_pid,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUser",
-                                 "u",
-                                 SD_BUS_PARAM(uid),
-                                 "o",
-                                 SD_BUS_PARAM(object_path),
-                                 method_get_user,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUserByPID",
-                                 "u",
-                                 SD_BUS_PARAM(pid),
-                                 "o",
-                                 SD_BUS_PARAM(object_path),
-                                 method_get_user_by_pid,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetSeat",
-                                 "s",
-                                 SD_BUS_PARAM(seat_id),
-                                 "o",
-                                 SD_BUS_PARAM(object_path),
-                                 method_get_seat,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListSessions",
-                                 NULL,,
-                                 "a(susso)",
-                                 SD_BUS_PARAM(sessions),
-                                 method_list_sessions,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListUsers",
-                                 NULL,,
-                                 "a(uso)",
-                                 SD_BUS_PARAM(users),
-                                 method_list_users,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListSeats",
-                                 NULL,,
-                                 "a(so)",
-                                 SD_BUS_PARAM(seats),
-                                 method_list_seats,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListInhibitors",
-                                 NULL,,
-                                 "a(ssssuu)",
-                                 SD_BUS_PARAM(inhibitors),
-                                 method_list_inhibitors,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CreateSession",
-                                 "uusssssussbssa(sv)",
-                                 SD_BUS_PARAM(uid)
-                                 SD_BUS_PARAM(pid)
-                                 SD_BUS_PARAM(service)
-                                 SD_BUS_PARAM(type)
-                                 SD_BUS_PARAM(class)
-                                 SD_BUS_PARAM(desktop)
-                                 SD_BUS_PARAM(seat_id)
-                                 SD_BUS_PARAM(vtnr)
-                                 SD_BUS_PARAM(tty)
-                                 SD_BUS_PARAM(display)
-                                 SD_BUS_PARAM(remote)
-                                 SD_BUS_PARAM(remote_user)
-                                 SD_BUS_PARAM(remote_host)
-                                 SD_BUS_PARAM(properties),
-                                 "soshusub",
-                                 SD_BUS_PARAM(session_id)
-                                 SD_BUS_PARAM(object_path)
-                                 SD_BUS_PARAM(runtime_path)
-                                 SD_BUS_PARAM(fifo_fd)
-                                 SD_BUS_PARAM(uid)
-                                 SD_BUS_PARAM(seat_id)
-                                 SD_BUS_PARAM(vtnr)
-                                 SD_BUS_PARAM(existing),
-                                 method_create_session,
-                                 0),
-        SD_BUS_METHOD_WITH_NAMES("ReleaseSession",
-                                 "s",
-                                 SD_BUS_PARAM(session_id),
-                                 NULL,,
-                                 method_release_session,
-                                 0),
-        SD_BUS_METHOD_WITH_NAMES("ActivateSession",
-                                 "s",
-                                 SD_BUS_PARAM(session_id),
-                                 NULL,,
-                                 method_activate_session,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ActivateSessionOnSeat",
-                                 "ss",
-                                 SD_BUS_PARAM(session_id)
-                                 SD_BUS_PARAM(seat_id),
-                                 NULL,,
-                                 method_activate_session_on_seat,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("LockSession",
-                                 "s",
-                                 SD_BUS_PARAM(session_id),
-                                 NULL,,
-                                 method_lock_session,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("UnlockSession",
-                                 "s",
-                                 SD_BUS_PARAM(session_id),
-                                 NULL,,
-                                 method_lock_session,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetSession",
+                                SD_BUS_ARGS("s", session_id),
+                                SD_BUS_RESULT("o", object_path),
+                                method_get_session,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetSessionByPID",
+                                SD_BUS_ARGS("u", pid),
+                                SD_BUS_RESULT("o", object_path),
+                                method_get_session_by_pid,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUser",
+                                SD_BUS_ARGS("u", uid),
+                                SD_BUS_RESULT("o", object_path),
+                                method_get_user,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUserByPID",
+                                SD_BUS_ARGS("u", pid),
+                                SD_BUS_RESULT("o", object_path),
+                                method_get_user_by_pid,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetSeat",
+                                SD_BUS_ARGS("s", seat_id),
+                                SD_BUS_RESULT("o", object_path),
+                                method_get_seat,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListSessions",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(susso)", sessions),
+                                method_list_sessions,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListUsers",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(uso)", users),
+                                method_list_users,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListSeats",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(so)", seats),
+                                method_list_seats,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListInhibitors",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(ssssuu)", inhibitors),
+                                method_list_inhibitors,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CreateSession",
+                                SD_BUS_ARGS("u", uid,
+                                            "u", pid,
+                                            "s", service,
+                                            "s", type,
+                                            "s", class,
+                                            "s", desktop,
+                                            "s", seat_id,
+                                            "u", vtnr,
+                                            "s", tty,
+                                            "s", display,
+                                            "b", remote,
+                                            "s", remote_user,
+                                            "s", remote_host,
+                                            "a(sv)", properties),
+                                SD_BUS_RESULT("s", session_id,
+                                              "o", object_path,
+                                              "s", runtime_path,
+                                              "h", fifo_fd,
+                                              "u", uid,
+                                              "s", seat_id,
+                                              "u", vtnr,
+                                              "b", existing),
+                                method_create_session,
+                                0),
+        SD_BUS_METHOD_WITH_ARGS("ReleaseSession",
+                                SD_BUS_ARGS("s", session_id),
+                                SD_BUS_NO_RESULT,
+                                method_release_session,
+                                0),
+        SD_BUS_METHOD_WITH_ARGS("ActivateSession",
+                                SD_BUS_ARGS("s", session_id),
+                                SD_BUS_NO_RESULT,
+                                method_activate_session,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ActivateSessionOnSeat",
+                                SD_BUS_ARGS("s", session_id, "s", seat_id),
+                                SD_BUS_NO_RESULT,
+                                method_activate_session_on_seat,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("LockSession",
+                                SD_BUS_ARGS("s", session_id),
+                                SD_BUS_NO_RESULT,
+                                method_lock_session,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("UnlockSession",
+                                SD_BUS_ARGS("s", session_id),
+                                SD_BUS_NO_RESULT,
+                                method_lock_session,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("LockSessions",
                       NULL,
                       NULL,
@@ -3501,304 +3463,236 @@
                       NULL,
                       method_lock_sessions,
                       SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("KillSession",
-                                 "ssi",
-                                 SD_BUS_PARAM(session_id)
-                                 SD_BUS_PARAM(who)
-                                 SD_BUS_PARAM(signal_number),
-                                 NULL,,
-                                 method_kill_session,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("KillUser",
-                                 "ui",
-                                 SD_BUS_PARAM(uid)
-                                 SD_BUS_PARAM(signal_number),
-                                 NULL,,
-                                 method_kill_user,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("TerminateSession",
-                                 "s",
-                                 SD_BUS_PARAM(session_id),
-                                 NULL,,
-                                 method_terminate_session,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("TerminateUser",
-                                 "u",
-                                 SD_BUS_PARAM(uid),
-                                 NULL,,
-                                 method_terminate_user,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("TerminateSeat",
-                                 "s",
-                                 SD_BUS_PARAM(seat_id),
-                                 NULL,,
-                                 method_terminate_seat,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetUserLinger",
-                                 "ubb",
-                                 SD_BUS_PARAM(uid)
-                                 SD_BUS_PARAM(enable)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_user_linger,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("AttachDevice",
-                                 "ssb",
-                                 SD_BUS_PARAM(seat_id)
-                                 SD_BUS_PARAM(sysfs_path)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_attach_device,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("FlushDevices",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_flush_devices,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("PowerOff",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_poweroff,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("PowerOffWithFlags",
-                                 "t",
-                                 SD_BUS_PARAM(flags),
-                                 NULL,,
-                                 method_poweroff,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Reboot",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_reboot,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("RebootWithFlags",
-                                 "t",
-                                 SD_BUS_PARAM(flags),
-                                 NULL,,
-                                 method_reboot,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Halt",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_halt,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("HaltWithFlags",
-                                 "t",
-                                 SD_BUS_PARAM(flags),
-                                 NULL,,
-                                 method_halt,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Suspend",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_suspend,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SuspendWithFlags",
-                                 "t",
-                                 SD_BUS_PARAM(flags),
-                                 NULL,,
-                                 method_suspend,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Hibernate",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_hibernate,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("HibernateWithFlags",
-                                 "t",
-                                 SD_BUS_PARAM(flags),
-                                 NULL,,
-                                 method_hibernate,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("HybridSleep",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_hybrid_sleep,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("HybridSleepWithFlags",
-                                 "t",
-                                 SD_BUS_PARAM(flags),
-                                 NULL,,
-                                 method_hybrid_sleep,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SuspendThenHibernate",
-                                 "b",
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_suspend_then_hibernate,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SuspendThenHibernateWithFlags",
-                                 "t",
-                                 SD_BUS_PARAM(flags),
-                                 NULL,,
-                                 method_suspend_then_hibernate,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanPowerOff",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_poweroff,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanReboot",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_reboot,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanHalt",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_halt,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanSuspend",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_suspend,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanHibernate",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_hibernate,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanHybridSleep",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_hybrid_sleep,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanSuspendThenHibernate",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_suspend_then_hibernate,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ScheduleShutdown",
-                                 "st",
-                                 SD_BUS_PARAM(type)
-                                 SD_BUS_PARAM(usec),
-                                 NULL,,
-                                 method_schedule_shutdown,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CancelScheduledShutdown",
-                                 NULL,,
-                                 "b",
-                                 SD_BUS_PARAM(cancelled),
-                                 method_cancel_scheduled_shutdown,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Inhibit",
-                                 "ssss",
-                                 SD_BUS_PARAM(what)
-                                 SD_BUS_PARAM(who)
-                                 SD_BUS_PARAM(why)
-                                 SD_BUS_PARAM(mode),
-                                 "h",
-                                 SD_BUS_PARAM(pipe_fd),
-                                 method_inhibit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanRebootParameter",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_reboot_parameter,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetRebootParameter",
-                                 "s",
-                                 SD_BUS_PARAM(parameter),
-                                 NULL,,
-                                 method_set_reboot_parameter,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanRebootToFirmwareSetup",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_reboot_to_firmware_setup,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetRebootToFirmwareSetup",
-                                 "b",
-                                 SD_BUS_PARAM(enable),
-                                 NULL,,
-                                 method_set_reboot_to_firmware_setup,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanRebootToBootLoaderMenu",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_reboot_to_boot_loader_menu,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetRebootToBootLoaderMenu",
-                                 "t",
-                                 SD_BUS_PARAM(timeout),
-                                 NULL,,
-                                 method_set_reboot_to_boot_loader_menu,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CanRebootToBootLoaderEntry",
-                                 NULL,,
-                                 "s",
-                                 SD_BUS_PARAM(result),
-                                 method_can_reboot_to_boot_loader_entry,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetRebootToBootLoaderEntry",
-                                 "s",
-                                 SD_BUS_PARAM(boot_loader_entry),
-                                 NULL,,
-                                 method_set_reboot_to_boot_loader_entry,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetWallMessage",
-                                 "sb",
-                                 SD_BUS_PARAM(wall_message)
-                                 SD_BUS_PARAM(enable),
-                                 NULL,,
-                                 method_set_wall_message,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("KillSession",
+                                SD_BUS_ARGS("s", session_id, "s", who, "i", signal_number),
+                                SD_BUS_NO_RESULT,
+                                method_kill_session,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("KillUser",
+                                SD_BUS_ARGS("u", uid, "i", signal_number),
+                                SD_BUS_NO_RESULT,
+                                method_kill_user,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("TerminateSession",
+                                SD_BUS_ARGS("s", session_id),
+                                SD_BUS_NO_RESULT,
+                                method_terminate_session,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("TerminateUser",
+                                SD_BUS_ARGS("u", uid),
+                                SD_BUS_NO_RESULT,
+                                method_terminate_user,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("TerminateSeat",
+                                SD_BUS_ARGS("s", seat_id),
+                                SD_BUS_NO_RESULT,
+                                method_terminate_seat,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetUserLinger",
+                                SD_BUS_ARGS("u", uid, "b", enable, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_user_linger,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("AttachDevice",
+                                SD_BUS_ARGS("s", seat_id, "s", sysfs_path, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_attach_device,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("FlushDevices",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_flush_devices,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("PowerOff",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_poweroff,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("PowerOffWithFlags",
+                                SD_BUS_ARGS("t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_poweroff,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Reboot",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_reboot,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RebootWithFlags",
+                                SD_BUS_ARGS("t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_reboot,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Halt",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_halt,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("HaltWithFlags",
+                                SD_BUS_ARGS("t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_halt,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Suspend",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_suspend,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SuspendWithFlags",
+                                SD_BUS_ARGS("t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_suspend,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Hibernate",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_hibernate,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("HibernateWithFlags",
+                                SD_BUS_ARGS("t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_hibernate,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("HybridSleep",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_hybrid_sleep,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("HybridSleepWithFlags",
+                                SD_BUS_ARGS("t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_hybrid_sleep,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SuspendThenHibernate",
+                                SD_BUS_ARGS("b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_suspend_then_hibernate,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SuspendThenHibernateWithFlags",
+                                SD_BUS_ARGS("t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_suspend_then_hibernate,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanPowerOff",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_poweroff,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanReboot",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_reboot,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanHalt",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_halt,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanSuspend",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_suspend,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanHibernate",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_hibernate,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanHybridSleep",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_hybrid_sleep,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanSuspendThenHibernate",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_suspend_then_hibernate,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ScheduleShutdown",
+                                SD_BUS_ARGS("s", type, "t", usec),
+                                SD_BUS_NO_RESULT,
+                                method_schedule_shutdown,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CancelScheduledShutdown",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("b", cancelled),
+                                method_cancel_scheduled_shutdown,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Inhibit",
+                                SD_BUS_ARGS("s", what, "s", who, "s", why, "s", mode),
+                                SD_BUS_RESULT("h", pipe_fd),
+                                method_inhibit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanRebootParameter",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_reboot_parameter,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetRebootParameter",
+                                SD_BUS_ARGS("s", parameter),
+                                SD_BUS_NO_RESULT,
+                                method_set_reboot_parameter,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanRebootToFirmwareSetup",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_reboot_to_firmware_setup,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetRebootToFirmwareSetup",
+                                SD_BUS_ARGS("b", enable),
+                                SD_BUS_NO_RESULT,
+                                method_set_reboot_to_firmware_setup,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanRebootToBootLoaderMenu",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_reboot_to_boot_loader_menu,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetRebootToBootLoaderMenu",
+                                SD_BUS_ARGS("t", timeout),
+                                SD_BUS_NO_RESULT,
+                                method_set_reboot_to_boot_loader_menu,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CanRebootToBootLoaderEntry",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("s", result),
+                                method_can_reboot_to_boot_loader_entry,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetRebootToBootLoaderEntry",
+                                SD_BUS_ARGS("s", boot_loader_entry),
+                                SD_BUS_NO_RESULT,
+                                method_set_reboot_to_boot_loader_entry,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetWallMessage",
+                                SD_BUS_ARGS("s", wall_message, "b", enable),
+                                SD_BUS_NO_RESULT,
+                                method_set_wall_message,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
-        SD_BUS_SIGNAL_WITH_NAMES("SessionNew",
-                                 "so",
-                                 SD_BUS_PARAM(session_id)
-                                 SD_BUS_PARAM(object_path),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("SessionRemoved",
-                                 "so",
-                                 SD_BUS_PARAM(session_id)
-                                 SD_BUS_PARAM(object_path),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("UserNew",
-                                 "uo",
-                                 SD_BUS_PARAM(uid)
-                                 SD_BUS_PARAM(object_path),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("UserRemoved",
-                                 "uo",
-                                 SD_BUS_PARAM(uid)
-                                 SD_BUS_PARAM(object_path),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("SeatNew",
-                                 "so",
-                                 SD_BUS_PARAM(seat_id)
-                                 SD_BUS_PARAM(object_path),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("SeatRemoved",
-                                 "so",
-                                 SD_BUS_PARAM(seat_id)
-                                 SD_BUS_PARAM(object_path),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("PrepareForShutdown",
-                                 "b",
-                                 SD_BUS_PARAM(start),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("PrepareForSleep",
-                                 "b",
-                                 SD_BUS_PARAM(start),
-                                 0),
+        SD_BUS_SIGNAL_WITH_ARGS("SessionNew",
+                                SD_BUS_ARGS("s", session_id, "o", object_path),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("SessionRemoved",
+                                SD_BUS_ARGS("s", session_id, "o", object_path),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("UserNew",
+                                SD_BUS_ARGS("u", uid, "o", object_path),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("UserRemoved",
+                                SD_BUS_ARGS("u", uid, "o", object_path),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("SeatNew",
+                                SD_BUS_ARGS("s", seat_id, "o", object_path),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("SeatRemoved",
+                                SD_BUS_ARGS("s", seat_id, "o", object_path),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("PrepareForShutdown",
+                                SD_BUS_ARGS("b", start),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("PrepareForSleep",
+                                SD_BUS_ARGS("b", start),
+                                0),
 
         SD_BUS_VTABLE_END
 };
@@ -3832,14 +3726,13 @@
 
 int match_job_removed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *path, *result, *unit;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         uint32_t id;
         User *user;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "uoss", &id, &path, &unit, &result);
         if (r < 0) {
@@ -3848,14 +3741,14 @@
         }
 
         if (m->action_job && streq(m->action_job, path)) {
-                log_info("Operation '%s' finished.", inhibit_what_to_string(m->action_what));
+                assert(m->delayed_action);
+                log_info("Operation '%s' finished.", inhibit_what_to_string(m->delayed_action->inhibit_what));
 
                 /* Tell people that they now may take a lock again */
-                (void) send_prepare_for(m, m->action_what, false);
+                (void) send_prepare_for(m, m->delayed_action->inhibit_what, false);
 
                 m->action_job = mfree(m->action_job);
-                m->action_unit = NULL;
-                m->action_what = 0;
+                m->delayed_action = NULL;
                 return 0;
         }
 
@@ -3877,8 +3770,8 @@
                 if (streq_ptr(path, user->service_job)) {
                         user->service_job = mfree(user->service_job);
 
-                        LIST_FOREACH(sessions_by_user, session, user->sessions)
-                                (void) session_jobs_reply(session, id, unit, NULL /* don't propagate user service failures to the client */);
+                        LIST_FOREACH(sessions_by_user, s, user->sessions)
+                                (void) session_jobs_reply(s, id, unit, NULL /* don't propagate user service failures to the client */);
 
                         user_save(user);
                 }
@@ -3891,13 +3784,12 @@
 
 int match_unit_removed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *path, *unit;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         User *user;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "so", &unit, &path);
         if (r < 0) {
@@ -3918,14 +3810,13 @@
 
 int match_properties_changed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *unit = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *path;
         Session *session;
         User *user;
         int r;
 
         assert(message);
-        assert(m);
 
         path = sd_bus_message_get_path(message);
         if (!path)
@@ -3951,12 +3842,11 @@
 }
 
 int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         int b, r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "b", &b);
         if (r < 0) {
@@ -4021,7 +3911,6 @@
                 char **job) {
 
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
-        char **i;
         int r;
 
         assert(manager);
@@ -4081,6 +3970,12 @@
         if (r < 0)
                 return r;
 
+        /* For login session scopes, if a process is OOM killed by the kernel, *don't* terminate the rest of
+           the scope */
+        r = sd_bus_message_append(m, "(sv)", "OOMPolicy", "s", "continue");
+        if (r < 0)
+                return r;
+
         /* disable TasksMax= for the session scope, rely on the slice setting for it */
         r = sd_bus_message_append(m, "(sv)", "TasksMax", "t", UINT64_MAX);
         if (r < 0)
diff --git a/src/login/logind-dbus.h b/src/login/logind-dbus.h
index 6b5d3ab..11eb170 100644
--- a/src/login/logind-dbus.h
+++ b/src/login/logind-dbus.h
@@ -4,6 +4,7 @@
 #include "sd-bus.h"
 
 #include "bus-object.h"
+#include "logind-action.h"
 #include "logind-session.h"
 #include "logind-user.h"
 #include "logind.h"
@@ -14,7 +15,7 @@
 
 int manager_dispatch_delayed(Manager *manager, bool timeout);
 
-int bus_manager_shutdown_or_sleep_now_or_later(Manager *m, const char *unit_name, InhibitWhat w, sd_bus_error *error);
+int bus_manager_shutdown_or_sleep_now_or_later(Manager *m, const HandleActionData *a, sd_bus_error *error);
 
 int match_job_removed(sd_bus_message *message, void *userdata, sd_bus_error *error);
 int match_unit_removed(sd_bus_message *message, void *userdata, sd_bus_error *error);
@@ -31,4 +32,6 @@
 int manager_unit_is_active(Manager *manager, const char *unit, sd_bus_error *error);
 int manager_job_is_active(Manager *manager, const char *path, sd_bus_error *error);
 
+void manager_load_scheduled_shutdown(Manager *m);
+
 extern const BusObjectImplementation manager_object;
diff --git a/src/login/logind-device.c b/src/login/logind-device.c
index 982a772..f605034 100644
--- a/src/login/logind-device.c
+++ b/src/login/logind-device.c
@@ -5,7 +5,6 @@
 #include "alloc-util.h"
 #include "logind-device.h"
 #include "logind-seat-dbus.h"
-#include "util.h"
 
 Device* device_new(Manager *m, const char *sysfs, bool master) {
         Device *d;
@@ -67,7 +66,6 @@
 }
 
 void device_attach(Device *d, Seat *s) {
-        Device *i;
         bool had_master;
 
         assert(d);
diff --git a/src/login/logind-gperf.gperf b/src/login/logind-gperf.gperf
index 25e429c..c95a3b2 100644
--- a/src/login/logind-gperf.gperf
+++ b/src/login/logind-gperf.gperf
@@ -26,12 +26,16 @@
 Login.InhibitDelayMaxSec,           config_parse_sec,                   0, offsetof(Manager, inhibit_delay_max)
 Login.UserStopDelaySec,             config_parse_sec,                   0, offsetof(Manager, user_stop_delay)
 Login.HandlePowerKey,               config_parse_handle_action,         0, offsetof(Manager, handle_power_key)
+Login.HandlePowerKeyLongPress,      config_parse_handle_action,         0, offsetof(Manager, handle_power_key_long_press)
+Login.HandleRebootKey,              config_parse_handle_action,         0, offsetof(Manager, handle_reboot_key)
+Login.HandleRebootKeyLongPress,     config_parse_handle_action,         0, offsetof(Manager, handle_reboot_key_long_press)
 Login.HandleSuspendKey,             config_parse_handle_action,         0, offsetof(Manager, handle_suspend_key)
+Login.HandleSuspendKeyLongPress,    config_parse_handle_action,         0, offsetof(Manager, handle_suspend_key_long_press)
 Login.HandleHibernateKey,           config_parse_handle_action,         0, offsetof(Manager, handle_hibernate_key)
+Login.HandleHibernateKeyLongPress,  config_parse_handle_action,         0, offsetof(Manager, handle_hibernate_key_long_press)
 Login.HandleLidSwitch,              config_parse_handle_action,         0, offsetof(Manager, handle_lid_switch)
 Login.HandleLidSwitchExternalPower, config_parse_handle_action,         0, offsetof(Manager, handle_lid_switch_ep)
 Login.HandleLidSwitchDocked,        config_parse_handle_action,         0, offsetof(Manager, handle_lid_switch_docked)
-Login.HandleRebootKey,              config_parse_handle_action,         0, offsetof(Manager, handle_reboot_key)
 Login.PowerKeyIgnoreInhibited,      config_parse_bool,                  0, offsetof(Manager, power_key_ignore_inhibited)
 Login.SuspendKeyIgnoreInhibited,    config_parse_bool,                  0, offsetof(Manager, suspend_key_ignore_inhibited)
 Login.HibernateKeyIgnoreInhibited,  config_parse_bool,                  0, offsetof(Manager, hibernate_key_ignore_inhibited)
@@ -41,8 +45,9 @@
 Login.IdleAction,                   config_parse_handle_action,         0, offsetof(Manager, idle_action)
 Login.IdleActionSec,                config_parse_sec,                   0, offsetof(Manager, idle_action_usec)
 Login.RuntimeDirectorySize,         config_parse_tmpfs_size,            0, offsetof(Manager, runtime_dir_size)
-Login.RuntimeDirectoryInodesMax,    config_parse_uint64,                0, offsetof(Manager, runtime_dir_inodes)
+Login.RuntimeDirectoryInodesMax,    config_parse_iec_uint64,            0, offsetof(Manager, runtime_dir_inodes)
 Login.RemoveIPC,                    config_parse_bool,                  0, offsetof(Manager, remove_ipc)
 Login.InhibitorsMax,                config_parse_uint64,                0, offsetof(Manager, inhibitors_max)
 Login.SessionsMax,                  config_parse_uint64,                0, offsetof(Manager, sessions_max)
 Login.UserTasksMax,                 config_parse_compat_user_tasks_max, 0, 0
+Login.StopIdleSessionSec,           config_parse_sec_fix_0,             0, offsetof(Manager, stop_idle_session_usec)
diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c
index 57198ce..af64793 100644
--- a/src/login/logind-inhibit.c
+++ b/src/login/logind-inhibit.c
@@ -9,6 +9,7 @@
 #include "alloc-util.h"
 #include "env-file.h"
 #include "errno-list.h"
+#include "errno-util.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -16,14 +17,14 @@
 #include "io-util.h"
 #include "logind-dbus.h"
 #include "logind-inhibit.h"
-#include "mkdir.h"
+#include "missing_threads.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "tmpfile-util.h"
 #include "user-util.h"
-#include "util.h"
 
 static void inhibitor_remove_fifo(Inhibitor *i);
 
@@ -44,7 +45,7 @@
                 .what = _INHIBIT_WHAT_INVALID,
                 .mode = _INHIBIT_MODE_INVALID,
                 .uid = UID_INVALID,
-                .fifo_fd = -1,
+                .fifo_fd = -EBADF,
         };
 
         i->state_file = path_join("/run/systemd/inhibit", id);
@@ -209,18 +210,11 @@
 }
 
 int inhibitor_load(Inhibitor *i) {
-
-        _cleanup_free_ char
-                *what = NULL,
-                *uid = NULL,
-                *pid = NULL,
-                *who = NULL,
-                *why = NULL,
-                *mode = NULL;
-
+        _cleanup_free_ char *what = NULL, *uid = NULL, *pid = NULL, *who = NULL, *why = NULL, *mode = NULL;
         InhibitWhat w;
         InhibitMode mm;
         char *cc;
+        ssize_t l;
         int r;
 
         r = parse_env_file(NULL, i->state_file,
@@ -255,23 +249,23 @@
         }
 
         if (who) {
-                r = cunescape(who, 0, &cc);
-                if (r < 0)
-                        return log_oom();
+                l = cunescape(who, 0, &cc);
+                if (l < 0)
+                        return log_debug_errno(l, "Failed to unescape \"who\" of inhibitor: %m");
 
                 free_and_replace(i->who, cc);
         }
 
         if (why) {
-                r = cunescape(why, 0, &cc);
-                if (r < 0)
-                        return log_oom();
+                l = cunescape(why, 0, &cc);
+                if (l < 0)
+                        return log_debug_errno(l, "Failed to unescape \"why\" of inhibitor: %m");
 
                 free_and_replace(i->why, cc);
         }
 
         if (i->fifo_path) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 /* Let's re-open the FIFO on both sides, and close the writing side right away */
                 fd = inhibitor_create_fifo(i);
@@ -283,11 +277,10 @@
 }
 
 static int inhibitor_dispatch_fifo(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Inhibitor *i = userdata;
+        Inhibitor *i = ASSERT_PTR(userdata);
 
         assert(s);
         assert(fd == i->fifo_fd);
-        assert(i);
 
         inhibitor_stop(i);
         inhibitor_free(i);
@@ -334,11 +327,7 @@
         }
 
         /* Open writing side */
-        r = open(i->fifo_path, O_WRONLY|O_CLOEXEC|O_NONBLOCK);
-        if (r < 0)
-                return -errno;
-
-        return r;
+        return RET_NERRNO(open(i->fifo_path, O_WRONLY|O_CLOEXEC|O_NONBLOCK));
 }
 
 static void inhibitor_remove_fifo(Inhibitor *i) {
diff --git a/src/login/logind-polkit.c b/src/login/logind-polkit.c
index d221bee..e4efd64 100644
--- a/src/login/logind-polkit.c
+++ b/src/login/logind-polkit.c
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "bus-polkit.h"
 #include "logind-polkit.h"
diff --git a/src/login/logind-polkit.h b/src/login/logind-polkit.h
index 8c124f8..9ec01a3 100644
--- a/src/login/logind-polkit.h
+++ b/src/login/logind-polkit.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
 #include "sd-bus.h"
diff --git a/src/login/logind-seat-dbus.c b/src/login/logind-seat-dbus.c
index cceb3b1..877b9c1 100644
--- a/src/login/logind-seat-dbus.c
+++ b/src/login/logind-seat-dbus.c
@@ -17,7 +17,6 @@
 #include "missing_capability.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 
 static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_const_true, "b", true);
 static BUS_DEFINE_PROPERTY_GET(property_get_can_tty, "b", Seat, seat_can_tty);
@@ -33,11 +32,10 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *p = NULL;
-        Seat *s = userdata;
+        Seat *s = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         p = s->active ? session_bus_path(s->active) : strdup("/");
         if (!p)
@@ -55,13 +53,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Seat *s = userdata;
-        Session *session;
+        Seat *s = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         r = sd_bus_message_open_container(reply, 'a', "(so)");
         if (r < 0)
@@ -96,11 +92,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Seat *s = userdata;
+        Seat *s = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         return sd_bus_message_append(reply, "b", seat_get_idle_hint(s, NULL) > 0);
 }
@@ -114,14 +109,13 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Seat *s = userdata;
+        Seat *s = ASSERT_PTR(userdata);
         dual_timestamp t;
         uint64_t u;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         r = seat_get_idle_hint(s, &t);
         if (r < 0)
@@ -133,11 +127,10 @@
 }
 
 int bus_seat_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Seat *s = userdata;
+        Seat *s = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(s);
 
         r = bus_verify_polkit_async(
                         message,
@@ -161,13 +154,12 @@
 }
 
 static int method_activate_session(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Seat *s = userdata;
+        Seat *s = ASSERT_PTR(userdata);
         const char *name;
         Session *session;
         int r;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -194,12 +186,11 @@
 }
 
 static int method_switch_to(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Seat *s = userdata;
+        Seat *s = ASSERT_PTR(userdata);
         unsigned to;
         int r;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "u", &to);
         if (r < 0)
@@ -222,11 +213,10 @@
 }
 
 static int method_switch_to_next(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Seat *s = userdata;
+        Seat *s = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(s);
 
         r = check_polkit_chvt(message, s->manager, error);
         if (r < 0)
@@ -242,11 +232,10 @@
 }
 
 static int method_switch_to_previous(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Seat *s = userdata;
+        Seat *s = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(s);
 
         r = check_polkit_chvt(message, s->manager, error);
         if (r < 0)
@@ -264,7 +253,7 @@
 static int seat_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
         _cleanup_free_ char *e = NULL;
         sd_bus_message *message;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *p;
         Seat *seat;
         int r;
@@ -273,7 +262,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         p = startswith(path, "/org/freedesktop/login1/seat/");
         if (!p)
@@ -429,18 +417,16 @@
 
         SD_BUS_METHOD("Terminate", NULL, NULL, bus_seat_method_terminate, SD_BUS_VTABLE_UNPRIVILEGED),
 
-        SD_BUS_METHOD_WITH_NAMES("ActivateSession",
-                                 "s",
-                                 SD_BUS_PARAM(session_id),
-                                 NULL,,
-                                 method_activate_session,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SwitchTo",
-                                 "u",
-                                 SD_BUS_PARAM(vtnr),
-                                 NULL,,
-                                 method_switch_to,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ActivateSession",
+                                SD_BUS_ARGS("s", session_id),
+                                SD_BUS_NO_RESULT,
+                                method_activate_session,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SwitchTo",
+                                SD_BUS_ARGS("u", vtnr),
+                                SD_BUS_NO_RESULT,
+                                method_switch_to,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         SD_BUS_METHOD("SwitchToNext", NULL, NULL, method_switch_to_next, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("SwitchToPrevious", NULL, NULL, method_switch_to_previous, SD_BUS_VTABLE_UNPRIVILEGED),
diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c
index 2d54681..65323f6 100644
--- a/src/login/logind-seat.c
+++ b/src/login/logind-seat.c
@@ -16,14 +16,13 @@
 #include "logind-seat-dbus.h"
 #include "logind-seat.h"
 #include "logind-session-dbus.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "terminal-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 int seat_new(Seat** ret, Manager *m, const char *id) {
         _cleanup_(seat_freep) Seat *s = NULL;
@@ -122,8 +121,6 @@
         }
 
         if (s->sessions) {
-                Session *i;
-
                 fputs("SESSIONS=", f);
                 LIST_FOREACH(sessions_by_seat, i, s->sessions) {
                         fprintf(f,
@@ -170,7 +167,7 @@
 
 static int vt_allocate(unsigned vtnr) {
         char p[sizeof("/dev/tty") + DECIMAL_STR_MAX(unsigned)];
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(vtnr >= 1);
 
@@ -323,24 +320,19 @@
 }
 
 int seat_switch_to_previous(Seat *s) {
-        unsigned start, i;
-        Session *session;
-
         if (MALLOC_ELEMENTSOF(s->positions) == 0)
                 return -EINVAL;
 
-        start = 1;
-        if (s->active && s->active->position > 0)
-                start = s->active->position;
+        size_t start = s->active && s->active->position > 0 ? s->active->position : 1;
 
-        for (i = start - 1; i > 0; --i) {
-                session = seat_get_position(s, i);
+        for (size_t i = start - 1; i > 0; i--) {
+                Session *session = seat_get_position(s, i);
                 if (session)
                         return session_activate(session);
         }
 
-        for (i = MALLOC_ELEMENTSOF(s->positions) - 1; i > start; --i) {
-                session = seat_get_position(s, i);
+        for (size_t i = MALLOC_ELEMENTSOF(s->positions) - 1; i > start; i--) {
+                Session *session = seat_get_position(s, i);
                 if (session)
                         return session_activate(session);
         }
@@ -349,7 +341,7 @@
 }
 
 int seat_active_vt_changed(Seat *s, unsigned vtnr) {
-        Session *i, *new_active = NULL;
+        Session *new_active = NULL;
         int r;
 
         assert(s);
@@ -368,7 +360,7 @@
                         break;
                 }
 
-        if (!new_active) {
+        if (!new_active)
                 /* no running one? then we can't decide which one is the
                  * active one, let the first one win */
                 LIST_FOREACH(sessions_by_seat, i, s->sessions)
@@ -376,7 +368,6 @@
                                 new_active = i;
                                 break;
                         }
-        }
 
         r = seat_set_active(s, new_active);
         manager_spawn_autovt(s->manager, vtnr);
@@ -397,11 +388,11 @@
         if (lseek(s->manager->console_active_fd, SEEK_SET, 0) < 0)
                 return log_error_errno(errno, "lseek on console_active_fd failed: %m");
 
+        errno = 0;
         k = read(s->manager->console_active_fd, t, sizeof(t)-1);
-        if (k <= 0) {
-                log_error("Failed to read current console: %s", k < 0 ? strerror_safe(errno) : "EOF");
-                return k < 0 ? -errno : -EIO;
-        }
+        if (k <= 0)
+                return log_error_errno(errno ?: EIO,
+                                       "Failed to read current console: %s", STRERROR_OR_EOF(errno));
 
         t[k] = 0;
         truncate_nl(t);
@@ -467,7 +458,6 @@
 }
 
 int seat_stop_sessions(Seat *s, bool force) {
-        Session *session;
         int r = 0, k;
 
         assert(s);
@@ -482,7 +472,6 @@
 }
 
 void seat_evict_position(Seat *s, Session *session) {
-        Session *iter;
         unsigned pos = session->position;
 
         session->position = 0;
@@ -496,12 +485,11 @@
                 /* There might be another session claiming the same
                  * position (eg., during gdm->session transition), so let's look
                  * for it and set it on the free slot. */
-                LIST_FOREACH(sessions_by_seat, iter, s->sessions) {
+                LIST_FOREACH(sessions_by_seat, iter, s->sessions)
                         if (iter->position == pos && session_get_state(iter) != SESSION_CLOSING) {
                                 s->positions[pos] = iter;
                                 break;
                         }
-                }
         }
 }
 
@@ -599,7 +587,6 @@
 }
 
 int seat_get_idle_hint(Seat *s, dual_timestamp *t) {
-        Session *session;
         bool idle_hint = true;
         dual_timestamp ts = DUAL_TIMESTAMP_NULL;
 
@@ -658,9 +645,8 @@
 
 static bool seat_name_valid_char(char c) {
         return
-                (c >= 'a' && c <= 'z') ||
-                (c >= 'A' && c <= 'Z') ||
-                (c >= '0' && c <= '9') ||
+                ascii_isalpha(c) ||
+                ascii_isdigit(c) ||
                 IN_SET(c, '-', '_');
 }
 
diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c
index afaef11..e3bebc9 100644
--- a/src/login/logind-session-dbus.c
+++ b/src/login/logind-session-dbus.c
@@ -8,6 +8,7 @@
 #include "bus-label.h"
 #include "bus-polkit.h"
 #include "bus-util.h"
+#include "devnum-util.h"
 #include "fd-util.h"
 #include "logind-brightness.h"
 #include "logind-dbus.h"
@@ -21,10 +22,8 @@
 #include "missing_capability.h"
 #include "path-util.h"
 #include "signal-util.h"
-#include "stat-util.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 
 static int property_get_user(
                 sd_bus *bus,
@@ -36,11 +35,10 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *p = NULL;
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         p = user_bus_path(s->user);
         if (!p)
@@ -58,11 +56,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         return sd_bus_message_append(reply, "s", s->user->user_record->user_name);
 }
@@ -77,11 +74,10 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *p = NULL;
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         p = s->seat ? seat_bus_path(s->seat) : strdup("/");
         if (!p)
@@ -104,11 +100,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         return sd_bus_message_append(reply, "b", session_get_idle_hint(s, NULL) > 0);
 }
@@ -122,14 +117,13 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         dual_timestamp t = DUAL_TIMESTAMP_NULL;
         uint64_t u;
         int r;
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         r = session_get_idle_hint(s, &t);
         if (r < 0)
@@ -149,21 +143,19 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(s);
 
         return sd_bus_message_append(reply, "b", session_get_locked_hint(s) > 0);
 }
 
 int bus_session_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(s);
 
         r = bus_verify_polkit_async(
                         message,
@@ -187,11 +179,10 @@
 }
 
 int bus_session_method_activate(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(s);
 
         r = check_polkit_chvt(message, s->manager, error);
         if (r < 0)
@@ -207,11 +198,10 @@
 }
 
 int bus_session_method_lock(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(s);
 
         r = bus_verify_polkit_async(
                         message,
@@ -236,12 +226,11 @@
 
 static int method_set_idle_hint(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         uid_t uid;
         int r, b;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "b", &b);
         if (r < 0)
@@ -269,12 +258,11 @@
 
 static int method_set_locked_hint(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         uid_t uid;
         int r, b;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "b", &b);
         if (r < 0)
@@ -297,14 +285,13 @@
 }
 
 int bus_session_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         const char *swho;
         int32_t signo;
         KillWho who;
         int r;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "si", &swho, &signo);
         if (r < 0)
@@ -344,12 +331,11 @@
 
 static int method_take_control(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         int r, force;
         uid_t uid;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "b", &force);
         if (r < 0)
@@ -374,10 +360,9 @@
 }
 
 static int method_release_control(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
 
         assert(message);
-        assert(s);
 
         if (!session_is_controller(s, sd_bus_message_get_sender(message)))
                 return sd_bus_error_set(error, BUS_ERROR_NOT_IN_CONTROL, "You are not in control of this session");
@@ -388,13 +373,12 @@
 }
 
 static int method_set_type(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         const char *t;
         SessionType type;
         int r;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "s", &t);
         if (r < 0)
@@ -413,15 +397,38 @@
         return sd_bus_reply_method_return(message, NULL);
 }
 
+static int method_set_display(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        Session *s = ASSERT_PTR(userdata);
+        const char *display;
+        int r;
+
+        assert(message);
+
+        r = sd_bus_message_read(message, "s", &display);
+        if (r < 0)
+                return r;
+
+        if (!session_is_controller(s, sd_bus_message_get_sender(message)))
+                return sd_bus_error_set(error, BUS_ERROR_NOT_IN_CONTROL, "You must be in control of this session to set display");
+
+        if (!SESSION_TYPE_IS_GRAPHICAL(s->type))
+                return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Setting display is only supported for graphical sessions");
+
+        r = session_set_display(s, display);
+        if (r < 0)
+                return r;
+
+        return sd_bus_reply_method_return(message, NULL);
+}
+
 static int method_take_device(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         uint32_t major, minor;
         SessionDevice *sd;
         dev_t dev;
         int r;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "uu", &major, &minor);
         if (r < 0)
@@ -464,14 +471,13 @@
 }
 
 static int method_release_device(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         uint32_t major, minor;
         SessionDevice *sd;
         dev_t dev;
         int r;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "uu", &major, &minor);
         if (r < 0)
@@ -495,14 +501,13 @@
 }
 
 static int method_pause_device_complete(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         uint32_t major, minor;
         SessionDevice *sd;
         dev_t dev;
         int r;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "uu", &major, &minor);
         if (r < 0)
@@ -528,13 +533,12 @@
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
         _cleanup_(sd_device_unrefp) sd_device *d = NULL;
         const char *subsystem, *name, *seat;
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
         uint32_t brightness;
         uid_t uid;
         int r;
 
         assert(message);
-        assert(s);
 
         r = sd_bus_message_read(message, "ssu", &subsystem, &name, &brightness);
         if (r < 0)
@@ -578,7 +582,7 @@
 static int session_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
         _cleanup_free_ char *e = NULL;
         sd_bus_message *message;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Session *session;
         const char *p;
         int r;
@@ -587,7 +591,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         p = startswith(path, "/org/freedesktop/login1/session/");
         if (!p)
@@ -771,7 +774,7 @@
 
 int session_send_create_reply(Session *s, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *c = NULL;
-        _cleanup_close_ int fifo_fd = -1;
+        _cleanup_close_ int fifo_fd = -EBADF;
         _cleanup_free_ char *p = NULL;
 
         assert(s);
@@ -871,86 +874,68 @@
                       NULL,
                       bus_session_method_lock,
                       SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetIdleHint",
-                                 "b",
-                                 SD_BUS_PARAM(idle),
-                                 NULL,,
-                                 method_set_idle_hint,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetLockedHint",
-                                 "b",
-                                 SD_BUS_PARAM(locked),
-                                 NULL,,
-                                 method_set_locked_hint,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Kill",
-                                 "si",
-                                 SD_BUS_PARAM(who)
-                                 SD_BUS_PARAM(signal_number),
-                                 NULL,,
-                                 bus_session_method_kill,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("TakeControl",
-                                 "b",
-                                 SD_BUS_PARAM(force),
-                                 NULL,,
-                                 method_take_control,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetIdleHint",
+                                SD_BUS_ARGS("b", idle),
+                                SD_BUS_NO_RESULT,
+                                method_set_idle_hint,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLockedHint",
+                                SD_BUS_ARGS("b", locked),
+                                SD_BUS_NO_RESULT,
+                                method_set_locked_hint,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Kill",
+                                SD_BUS_ARGS("s", who, "i", signal_number),
+                                SD_BUS_NO_RESULT,
+                                bus_session_method_kill,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("TakeControl",
+                                SD_BUS_ARGS("b", force),
+                                SD_BUS_NO_RESULT,
+                                method_take_control,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("ReleaseControl",
                       NULL,
                       NULL,
                       method_release_control,
                       SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetType",
-                                 "s",
-                                 SD_BUS_PARAM(type),
-                                 NULL,,
-                                 method_set_type,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("TakeDevice",
-                                 "uu",
-                                 SD_BUS_PARAM(major)
-                                 SD_BUS_PARAM(minor),
-                                 "hb",
-                                 SD_BUS_PARAM(fd)
-                                 SD_BUS_PARAM(inactive),
-                                 method_take_device,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ReleaseDevice",
-                                 "uu",
-                                 SD_BUS_PARAM(major)
-                                 SD_BUS_PARAM(minor),
-                                 NULL,,
-                                 method_release_device,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("PauseDeviceComplete",
-                                 "uu",
-                                 SD_BUS_PARAM(major)
-                                 SD_BUS_PARAM(minor),
-                                 NULL,,
-                                 method_pause_device_complete,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetBrightness",
-                                 "ssu",
-                                 SD_BUS_PARAM(subsystem)
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(brightness),
-                                 NULL,,
-                                 method_set_brightness,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetType",
+                                SD_BUS_ARGS("s", type),
+                                SD_BUS_NO_RESULT,
+                                method_set_type,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDisplay",
+                                SD_BUS_ARGS("s", display),
+                                SD_BUS_NO_RESULT,
+                                method_set_display,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("TakeDevice",
+                                SD_BUS_ARGS("u", major, "u", minor),
+                                SD_BUS_RESULT("h", fd, "b", inactive),
+                                method_take_device,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ReleaseDevice",
+                                SD_BUS_ARGS("u", major, "u", minor),
+                                SD_BUS_NO_RESULT,
+                                method_release_device,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("PauseDeviceComplete",
+                                SD_BUS_ARGS("u", major, "u", minor),
+                                SD_BUS_NO_RESULT,
+                                method_pause_device_complete,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetBrightness",
+                                SD_BUS_ARGS("s", subsystem, "s", name, "u", brightness),
+                                SD_BUS_NO_RESULT,
+                                method_set_brightness,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
-        SD_BUS_SIGNAL_WITH_NAMES("PauseDevice",
-                                 "uus",
-                                 SD_BUS_PARAM(major)
-                                 SD_BUS_PARAM(minor)
-                                 SD_BUS_PARAM(type),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("ResumeDevice",
-                                 "uuh",
-                                 SD_BUS_PARAM(major)
-                                 SD_BUS_PARAM(minor)
-                                 SD_BUS_PARAM(fd),
-                                 0),
+        SD_BUS_SIGNAL_WITH_ARGS("PauseDevice",
+                                SD_BUS_ARGS("u", major, "u", minor, "s", type),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("ResumeDevice",
+                                SD_BUS_ARGS("u", major, "u", minor, "h", fd),
+                                0),
         SD_BUS_SIGNAL("Lock", NULL, 0),
         SD_BUS_SIGNAL("Unlock", NULL, 0),
 
diff --git a/src/login/logind-session-device.c b/src/login/logind-session-device.c
index f2adb96..a8b3b48 100644
--- a/src/login/logind-session-device.c
+++ b/src/login/logind-session-device.c
@@ -10,13 +10,13 @@
 
 #include "alloc-util.h"
 #include "bus-util.h"
+#include "daemon-util.h"
 #include "fd-util.h"
 #include "logind-session-dbus.h"
 #include "logind-session-device.h"
 #include "missing_drm.h"
 #include "missing_input.h"
 #include "parse-util.h"
-#include "util.h"
 
 enum SessionDeviceNotifications {
         SESSION_DEVICE_RESUME,
@@ -48,7 +48,7 @@
                         sd->session->manager->bus,
                         &m, path,
                         "org.freedesktop.login1.Session",
-                        (type == SESSION_DEVICE_RESUME) ? "ResumeDevice" : "PauseDevice");
+                        type == SESSION_DEVICE_RESUME ? "ResumeDevice" : "PauseDevice");
         if (!m)
                 return r;
 
@@ -105,20 +105,12 @@
 
 static int sd_drmsetmaster(int fd) {
         assert(fd >= 0);
-
-        if (ioctl(fd, DRM_IOCTL_SET_MASTER, 0) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, DRM_IOCTL_SET_MASTER, 0));
 }
 
 static int sd_drmdropmaster(int fd) {
         assert(fd >= 0);
-
-        if (ioctl(fd, DRM_IOCTL_DROP_MASTER, 0) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, DRM_IOCTL_DROP_MASTER, 0));
 }
 
 static int session_device_open(SessionDevice *sd, bool active) {
@@ -128,7 +120,7 @@
         assert(sd->type != DEVICE_TYPE_UNKNOWN);
         assert(sd->node);
 
-        /* open device and try to get an udev_device from it */
+        /* open device and try to get a udev_device from it */
         fd = open(sd->node, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
         if (fd < 0)
                 return -errno;
@@ -141,7 +133,7 @@
                          * that so fail at all times and let caller retry in inactive state. */
                         r = sd_drmsetmaster(fd);
                         if (r < 0) {
-                                close_nointr(fd);
+                                (void) close_nointr(fd);
                                 return r;
                         }
                 } else
@@ -195,7 +187,7 @@
 
                 /* For evdev devices, the file descriptor might be left uninitialized. This might happen while resuming
                  * into a session and logind has been restarted right before. */
-                CLOSE_AND_REPLACE(sd->fd, r);
+                close_and_replace(sd->fd, r);
                 break;
 
         case DEVICE_TYPE_UNKNOWN:
@@ -341,7 +333,7 @@
 
         sd->session = s;
         sd->dev = dev;
-        sd->fd = -1;
+        sd->fd = -EBADF;
         sd->type = DEVICE_TYPE_UNKNOWN;
 
         r = session_device_verify(sd);
@@ -388,10 +380,7 @@
 
         /* Make sure to remove the pushed fd. */
         if (sd->pushed_fd)
-                (void) sd_notifyf(false,
-                                  "FDSTOREREMOVE=1\n"
-                                  "FDNAME=session-%s-device-%u-%u",
-                                  sd->session->id, major(sd->dev), minor(sd->dev));
+                (void) notify_remove_fd_warnf("session-%s-device-%u-%u", sd->session->id, major(sd->dev), minor(sd->dev));
 
         session_device_stop(sd);
         session_device_notify(sd, SESSION_DEVICE_RELEASE);
@@ -472,7 +461,6 @@
 }
 
 int session_device_save(SessionDevice *sd) {
-        _cleanup_free_ char *m = NULL;
         const char *id;
         int r;
 
@@ -492,13 +480,7 @@
         id = sd->session->id;
         assert(*(id + strcspn(id, "-\n")) == '\0');
 
-        r = asprintf(&m, "FDSTORE=1\n"
-                         "FDNAME=session-%s-device-%u-%u\n",
-                         id, major(sd->dev), minor(sd->dev));
-        if (r < 0)
-                return r;
-
-        r = sd_pid_notify_with_fds(0, false, m, &sd->fd, 1);
+        r = notify_push_fdf(sd->fd, "session-%s-device-%u-%u", id, major(sd->dev), minor(sd->dev));
         if (r < 0)
                 return r;
 
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
index cde2b5e..63b6d01 100644
--- a/src/login/logind-session.c
+++ b/src/login/logind-session.c
@@ -15,6 +15,7 @@
 #include "audit-util.h"
 #include "bus-error.h"
 #include "bus-util.h"
+#include "devnum-util.h"
 #include "env-file.h"
 #include "escape.h"
 #include "fd-util.h"
@@ -26,7 +27,7 @@
 #include "logind-session-dbus.h"
 #include "logind-session.h"
 #include "logind-user-dbus.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -35,8 +36,8 @@
 #include "strv.h"
 #include "terminal-util.h"
 #include "tmpfile-util.h"
+#include "uid-alloc-range.h"
 #include "user-util.h"
-#include "util.h"
 
 #define RELEASE_USEC (20*USEC_PER_SEC)
 
@@ -60,8 +61,8 @@
 
         *s = (Session) {
                 .manager = m,
-                .fifo_fd = -1,
-                .vtfd = -1,
+                .fifo_fd = -EBADF,
+                .vtfd = -EBADF,
                 .audit_id = AUDIT_SESSION_INVALID,
                 .tty_validity = _TTY_VALIDITY_INVALID,
         };
@@ -150,6 +151,8 @@
         free(s->state_file);
         free(s->fifo_path);
 
+        sd_event_source_unref(s->stop_on_idle_event_source);
+
         return mfree(s);
 }
 
@@ -358,12 +361,11 @@
 }
 
 static int session_load_devices(Session *s, const char *devices) {
-        const char *p;
         int r = 0;
 
         assert(s);
 
-        for (p = devices;;) {
+        for (const char *p = devices;;) {
                 _cleanup_free_ char *word = NULL;
                 SessionDevice *sd;
                 dev_t dev;
@@ -377,7 +379,7 @@
                         break;
                 }
 
-                k = parse_dev(word, &dev);
+                k = parse_devnum(word, &dev);
                 if (k < 0) {
                         r = k;
                         continue;
@@ -445,7 +447,6 @@
                            "ACTIVE",         &active,
                            "DEVICES",        &devices,
                            "IS_DISPLAY",     &is_display);
-
         if (r < 0)
                 return log_error_errno(r, "Failed to read %s: %m", s->state_file);
 
@@ -551,7 +552,7 @@
                         s->class = c;
         }
 
-        if (state && streq(state, "closing"))
+        if (streq_ptr(state, "closing"))
                 s->stopping = true;
 
         if (s->fifo_path) {
@@ -646,6 +647,7 @@
         assert(s->user);
 
         if (!s->scope) {
+                _cleanup_strv_free_ char **after = NULL;
                 _cleanup_free_ char *scope = NULL;
                 const char *description;
 
@@ -657,6 +659,19 @@
 
                 description = strjoina("Session ", s->id, " of User ", s->user->user_record->user_name);
 
+                /* We usually want to order session scopes after systemd-user-sessions.service since the
+                 * latter unit is used as login session barrier for unprivileged users. However the barrier
+                 * doesn't apply for root as sysadmin should always be able to log in (and without waiting
+                 * for any timeout to expire) in case something goes wrong during the boot process. Since
+                 * ordering after systemd-user-sessions.service and the user instance is optional we make use
+                 * of STRV_IGNORE with strv_new() to skip these order constraints when needed. */
+                after = strv_new("systemd-logind.service",
+                                 s->user->runtime_dir_service,
+                                 !uid_is_system(s->user->user_record->uid) ? "systemd-user-sessions.service" : STRV_IGNORE,
+                                 s->user->service);
+                if (!after)
+                        return log_oom();
+
                 r = manager_start_scope(
                                 s->manager,
                                 scope,
@@ -666,11 +681,7 @@
                                 /* These two have StopWhenUnneeded= set, hence add a dep towards them */
                                 STRV_MAKE(s->user->runtime_dir_service,
                                           s->user->service),
-                                /* And order us after some more */
-                                STRV_MAKE("systemd-logind.service",
-                                          "systemd-user-sessions.service",
-                                          s->user->runtime_dir_service,
-                                          s->user->service),
+                                after,
                                 user_record_home_directory(s->user->user_record),
                                 properties,
                                 error,
@@ -687,6 +698,58 @@
         return 0;
 }
 
+static int session_dispatch_stop_on_idle(sd_event_source *source, uint64_t t, void *userdata) {
+        Session *s = userdata;
+        dual_timestamp ts;
+        int r, idle;
+
+        assert(s);
+
+        if (s->stopping)
+                return 0;
+
+        idle = session_get_idle_hint(s, &ts);
+        if (idle) {
+                log_info("Session \"%s\" of user \"%s\" is idle, stopping.", s->id, s->user->user_record->user_name);
+
+                return session_stop(s, /* force */ true);
+        }
+
+        r = sd_event_source_set_time(
+                        source,
+                        usec_add(dual_timestamp_is_set(&ts) ? ts.monotonic : now(CLOCK_MONOTONIC),
+                                 s->manager->stop_idle_session_usec));
+        if (r < 0)
+                return log_error_errno(r, "Failed to configure stop on idle session event source: %m");
+
+        r = sd_event_source_set_enabled(source, SD_EVENT_ONESHOT);
+        if (r < 0)
+                return log_error_errno(r, "Failed to enable stop on idle session event source: %m");
+
+        return 1;
+}
+
+static int session_setup_stop_on_idle_timer(Session *s) {
+        int r;
+
+        assert(s);
+
+        if (s->manager->stop_idle_session_usec == USEC_INFINITY)
+                return 0;
+
+        r = sd_event_add_time_relative(
+                        s->manager->event,
+                        &s->stop_on_idle_event_source,
+                        CLOCK_MONOTONIC,
+                        s->manager->stop_idle_session_usec,
+                        0,
+                        session_dispatch_stop_on_idle, s);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add stop on idle session event source: %m");
+
+        return 0;
+}
+
 int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error) {
         int r;
 
@@ -709,6 +772,10 @@
         if (r < 0)
                 return r;
 
+        r = session_setup_stop_on_idle_timer(s);
+        if (r < 0)
+                return r;
+
         log_struct(s->class == SESSION_BACKGROUND ? LOG_DEBUG : LOG_INFO,
                    "MESSAGE_ID=" SD_MESSAGE_SESSION_START_STR,
                    "SESSION_ID=%s", s->id,
@@ -876,10 +943,9 @@
 }
 
 static int release_timeout_callback(sd_event_source *es, uint64_t usec, void *userdata) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
 
         assert(es);
-        assert(s);
 
         session_stop(s, /* force = */ false);
         return 0;
@@ -949,7 +1015,7 @@
 }
 
 int session_get_idle_hint(Session *s, dual_timestamp *t) {
-        usec_t atime = 0;
+        usec_t atime = 0, dtime = 0;
         int r;
 
         assert(s);
@@ -986,10 +1052,16 @@
         if (t)
                 dual_timestamp_from_realtime(t, atime);
 
-        if (s->manager->idle_action_usec <= 0)
+        if (s->manager->idle_action_usec > 0 && s->manager->stop_idle_session_usec != USEC_INFINITY)
+                dtime = MIN(s->manager->idle_action_usec, s->manager->stop_idle_session_usec);
+        else if (s->manager->idle_action_usec > 0)
+                dtime = s->manager->idle_action_usec;
+        else if (s->manager->stop_idle_session_usec != USEC_INFINITY)
+                dtime = s->manager->stop_idle_session_usec;
+        else
                 return false;
 
-        return usec_add(atime, s->manager->idle_action_usec) <= now(CLOCK_REALTIME);
+        return usec_add(atime, dtime) <= now(CLOCK_REALTIME);
 }
 
 int session_set_idle_hint(Session *s, bool b) {
@@ -1044,10 +1116,26 @@
         session_send_changed(s, "Type", NULL);
 }
 
-static int session_dispatch_fifo(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
-        Session *s = userdata;
+int session_set_display(Session *s, const char *display) {
+        int r;
 
         assert(s);
+        assert(display);
+
+        r = free_and_strdup(&s->display, display);
+        if (r <= 0)  /* 0 means the strings were equal */
+                return r;
+
+        session_save(s);
+
+        session_send_changed(s, "Display", NULL);
+
+        return 1;
+}
+
+static int session_dispatch_fifo(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
+        Session *s = ASSERT_PTR(userdata);
+
         assert(s->fifo_fd == fd);
 
         /* EOF on the FIFO means the session died abnormally. */
@@ -1097,11 +1185,7 @@
         }
 
         /* Open writing side */
-        r = open(s->fifo_path, O_WRONLY|O_CLOEXEC|O_NONBLOCK);
-        if (r < 0)
-                return -errno;
-
-        return r;
+        return RET_NERRNO(open(s->fifo_path, O_WRONLY|O_CLOEXEC|O_NONBLOCK));
 }
 
 static void session_remove_fifo(Session *s) {
@@ -1317,9 +1401,7 @@
 }
 
 bool session_is_controller(Session *s, const char *sender) {
-        assert(s);
-
-        return streq_ptr(s->controller, sender);
+        return streq_ptr(ASSERT_PTR(s)->controller, sender);
 }
 
 static void session_release_controller(Session *s, bool notify) {
@@ -1344,10 +1426,9 @@
 }
 
 static int on_bus_track(sd_bus_track *track, void *userdata) {
-        Session *s = userdata;
+        Session *s = ASSERT_PTR(userdata);
 
         assert(track);
-        assert(s);
 
         session_drop_controller(s);
 
diff --git a/src/login/logind-session.h b/src/login/logind-session.h
index 5c35071..4c28607 100644
--- a/src/login/logind-session.h
+++ b/src/login/logind-session.h
@@ -115,6 +115,8 @@
         Hashmap *devices;
         sd_bus_track *track;
 
+        sd_event_source *stop_on_idle_event_source;
+
         LIST_FIELDS(Session, sessions_by_user);
         LIST_FIELDS(Session, sessions_by_seat);
 
@@ -137,6 +139,7 @@
 int session_get_locked_hint(Session *s);
 void session_set_locked_hint(Session *s, bool b);
 void session_set_type(Session *s, SessionType t);
+int session_set_display(Session *s, const char *display);
 int session_create_fifo(Session *s);
 int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error);
 int session_stop(Session *s, bool force);
diff --git a/src/login/logind-user-dbus.c b/src/login/logind-user-dbus.c
index 9d48fd2..88649b2 100644
--- a/src/login/logind-user-dbus.c
+++ b/src/login/logind-user-dbus.c
@@ -26,11 +26,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         return sd_bus_message_append(reply, "u", (uint32_t) u->user_record->uid);
 }
@@ -44,11 +43,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         return sd_bus_message_append(reply, "u", (uint32_t) u->user_record->gid);
 }
@@ -62,11 +60,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         return sd_bus_message_append(reply, "s", u->user_record->user_name);
 }
@@ -83,11 +80,10 @@
                 sd_bus_error *error) {
 
         _cleanup_free_ char *p = NULL;
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         p = u->display ? session_bus_path(u->display) : strdup("/");
         if (!p)
@@ -105,13 +101,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        User *u = userdata;
-        Session *session;
+        User *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = sd_bus_message_open_container(reply, 'a', "(so)");
         if (r < 0)
@@ -142,11 +136,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         return sd_bus_message_append(reply, "b", user_get_idle_hint(u, NULL) > 0);
 }
@@ -160,13 +153,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
         dual_timestamp t = DUAL_TIMESTAMP_NULL;
         uint64_t k;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         (void) user_get_idle_hint(u, &t);
         k = streq(property, "IdleSinceHint") ? t.realtime : t.monotonic;
@@ -183,12 +175,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(reply);
-        assert(u);
 
         r = user_check_linger_file(u);
 
@@ -196,11 +187,10 @@
 }
 
 int bus_user_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(u);
 
         r = bus_verify_polkit_async(
                         message,
@@ -224,12 +214,11 @@
 }
 
 int bus_user_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
         int32_t signo;
         int r;
 
         assert(message);
-        assert(u);
 
         r = bus_verify_polkit_async(
                         message,
@@ -260,7 +249,7 @@
 }
 
 static int user_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uid_t uid;
         User *user;
         int r;
@@ -269,7 +258,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         if (streq(path, "/org/freedesktop/login1/user/self")) {
                 sd_bus_message *message;
@@ -381,12 +369,11 @@
         SD_BUS_PROPERTY("Linger", "b", property_get_linger, 0, 0),
 
         SD_BUS_METHOD("Terminate", NULL, NULL, bus_user_method_terminate, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Kill",
-                                 "i",
-                                 SD_BUS_PARAM(signal_number),
-                                 NULL,,
-                                 bus_user_method_kill,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Kill",
+                                SD_BUS_ARGS("i", signal_number),
+                                SD_BUS_NO_RESULT,
+                                bus_user_method_kill,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         SD_BUS_VTABLE_END
 };
diff --git a/src/login/logind-user.c b/src/login/logind-user.c
index 3c65867..5680a30 100644
--- a/src/login/logind-user.c
+++ b/src/login/logind-user.c
@@ -21,7 +21,7 @@
 #include "logind-dbus.h"
 #include "logind-user-dbus.h"
 #include "logind-user.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "percent-util.h"
@@ -32,9 +32,9 @@
 #include "string-table.h"
 #include "strv.h"
 #include "tmpfile-util.h"
+#include "uid-alloc-range.h"
 #include "unit-name.h"
 #include "user-util.h"
-#include "util.h"
 
 int user_new(User **ret,
              Manager *m,
@@ -188,7 +188,6 @@
                         u->last_session_timestamp);
 
         if (u->sessions) {
-                Session *i;
                 bool first;
 
                 fputs("SESSIONS=", f);
@@ -357,12 +356,11 @@
 }
 
 static int update_slice_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
-        _cleanup_(user_record_unrefp) UserRecord *ur = userdata;
+        _cleanup_(user_record_unrefp) UserRecord *ur = ASSERT_PTR(userdata);
         const sd_bus_error *e;
         int r;
 
         assert(m);
-        assert(ur);
 
         e = sd_bus_message_get_error(m);
         if (e) {
@@ -498,8 +496,8 @@
 }
 
 int user_stop(User *u, bool force) {
-        Session *s;
         int r = 0;
+
         assert(u);
 
         /* This is called whenever we begin with tearing down a user record. It's called in two cases: explicit API
@@ -533,7 +531,6 @@
 }
 
 int user_finalize(User *u) {
-        Session *s;
         int r = 0, k;
 
         assert(u);
@@ -574,7 +571,6 @@
 }
 
 int user_get_idle_hint(User *u, dual_timestamp *t) {
-        Session *s;
         bool idle_hint = true;
         dual_timestamp ts = DUAL_TIMESTAMP_NULL;
 
@@ -629,7 +625,6 @@
 }
 
 static bool user_unit_active(User *u) {
-        const char *i;
         int r;
 
         assert(u->service);
@@ -641,7 +636,7 @@
 
                 r = manager_unit_is_active(u->manager, i, &error);
                 if (r < 0)
-                        log_debug_errno(r, "Failed to determine whether unit '%s' is active, ignoring: %s", u->service, bus_error_message(&error, r));
+                        log_debug_errno(r, "Failed to determine whether unit '%s' is active, ignoring: %s", i, bus_error_message(&error, r));
                 if (r != 0)
                         return true;
         }
@@ -720,8 +715,6 @@
 }
 
 UserState user_get_state(User *u) {
-        Session *i;
-
         assert(u);
 
         if (u->stopping)
@@ -804,8 +797,6 @@
 }
 
 void user_elect_display(User *u) {
-        Session *s;
-
         assert(u);
 
         /* This elects a primary session for each user, which we call the "display". We try to keep the assignment
@@ -826,9 +817,8 @@
 }
 
 static int user_stop_timeout_callback(sd_event_source *es, uint64_t usec, void *userdata) {
-        User *u = userdata;
+        User *u = ASSERT_PTR(userdata);
 
-        assert(u);
         user_add_to_gc_queue(u);
 
         return 0;
@@ -855,7 +845,7 @@
         assert(!u->timer_event_source);
 
         user_stop_delay = user_get_stop_delay(u);
-        if (IN_SET(user_stop_delay, 0, USEC_INFINITY))
+        if (!timestamp_is_set(user_stop_delay))
                 return;
 
         if (sd_event_get_state(u->manager->event) == SD_EVENT_FINISHED) {
@@ -871,13 +861,10 @@
         if (r < 0)
                 log_warning_errno(r, "Failed to enqueue user stop event source, ignoring: %m");
 
-        if (DEBUG_LOGGING) {
-                char s[FORMAT_TIMESPAN_MAX];
-
+        if (DEBUG_LOGGING)
                 log_debug("Last session of user '%s' logged out, terminating user context in %s.",
                           u->user_record->user_name,
-                          format_timespan(s, sizeof(s), user_stop_delay, USEC_PER_MSEC));
-        }
+                          FORMAT_TIMESPAN(user_stop_delay, USEC_PER_MSEC));
 }
 
 static const char* const user_state_table[_USER_STATE_MAX] = {
@@ -903,13 +890,12 @@
                 void *data,
                 void *userdata) {
 
-        uint64_t *sz = data;
+        uint64_t *sz = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         /* First, try to parse as percentage */
         r = parse_permyriad(rvalue);
diff --git a/src/login/logind-utmp.c b/src/login/logind-utmp.c
index dfbbb64..3f1503a 100644
--- a/src/login/logind-utmp.c
+++ b/src/login/logind-utmp.c
@@ -10,6 +10,7 @@
 #include "bus-common-errors.h"
 #include "bus-error.h"
 #include "bus-util.h"
+#include "event-util.h"
 #include "format-util.h"
 #include "logind.h"
 #include "path-util.h"
@@ -20,9 +21,6 @@
 #include "utmp-wtmp.h"
 
 _const_ static usec_t when_wall(usec_t n, usec_t elapse) {
-
-        usec_t left;
-        unsigned i;
         static const int wall_timers[] = {
                 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                 25, 40, 55, 70, 100, 130, 150, 180,
@@ -32,57 +30,71 @@
         if (n >= elapse)
                 return 0;
 
-        left = elapse - n;
+        usec_t left = elapse - n;
 
-        for (i = 1; i < ELEMENTSOF(wall_timers); i++)
+        for (unsigned i = 1; i < ELEMENTSOF(wall_timers); i++)
                 if (wall_timers[i] * USEC_PER_MINUTE >= left)
                         return left - wall_timers[i-1] * USEC_PER_MINUTE;
 
         return left % USEC_PER_HOUR;
 }
 
-bool logind_wall_tty_filter(const char *tty, void *userdata) {
-        Manager *m = userdata;
-        const char *p;
+bool logind_wall_tty_filter(const char *tty, bool is_local, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
+        assert(m->scheduled_shutdown_action);
 
-        if (!m->scheduled_shutdown_tty)
-                return true;
-
-        p = path_startswith(tty, "/dev/");
+        const char *p = path_startswith(tty, "/dev/");
         if (!p)
                 return true;
 
-        return !streq(p, m->scheduled_shutdown_tty);
+        /* Do not send information about events which do not destroy local sessions to local terminals. We
+         * can assume that if the system enters sleep or hibernation, this will be visible in an obvious way
+         * for any local user. And once the systems exits sleep or hibernation, the notification would be
+         * just noise, in particular for auto-suspend. */
+        if (is_local &&
+            IN_SET(m->scheduled_shutdown_action->handle,
+                   HANDLE_SUSPEND,
+                   HANDLE_HIBERNATE,
+                   HANDLE_HYBRID_SLEEP,
+                   HANDLE_SUSPEND_THEN_HIBERNATE))
+                return false;
+
+        return !streq_ptr(p, m->scheduled_shutdown_tty);
 }
 
 static int warn_wall(Manager *m, usec_t n) {
-        char date[FORMAT_TIMESTAMP_MAX] = {};
-        _cleanup_free_ char *l = NULL, *username = NULL;
-        usec_t left;
-        int r;
-
         assert(m);
 
-        if (!m->enable_wall_messages)
+        if (!m->scheduled_shutdown_action)
                 return 0;
 
-        left = m->scheduled_shutdown_timeout > n;
+        bool left = m->scheduled_shutdown_timeout > n;
 
-        r = asprintf(&l, "%s%sThe system is going down for %s %s%s!",
+        _cleanup_free_ char *l = NULL;
+        if (asprintf(&l, "%s%sThe system will %s %s%s!",
                      strempty(m->wall_message),
                      isempty(m->wall_message) ? "" : "\n",
-                     m->scheduled_shutdown_type,
-                     left ? "at " : "NOW",
-                     left ? format_timestamp(date, sizeof(date), m->scheduled_shutdown_timeout) : "");
-        if (r < 0) {
+                     handle_action_verb_to_string(m->scheduled_shutdown_action->handle),
+                     left ? "at " : "now",
+                     left ? FORMAT_TIMESTAMP(m->scheduled_shutdown_timeout) : "") < 0) {
+
                 log_oom();
-                return 0;
+                return 1;  /* We're out-of-memory for now, but let's try to print the message later */
         }
 
-        username = uid_to_name(m->scheduled_shutdown_uid);
-        utmp_wall(l, username, m->scheduled_shutdown_tty, logind_wall_tty_filter, m);
+        _cleanup_free_ char *username = uid_to_name(m->scheduled_shutdown_uid);
+
+        int level = left ? LOG_INFO : LOG_NOTICE;
+
+        log_struct(level,
+                   LOG_MESSAGE("%s", l),
+                   "ACTION=%s", handle_action_to_string(m->scheduled_shutdown_action->handle),
+                   "MESSAGE_ID=" SD_MESSAGE_SHUTDOWN_SCHEDULED_STR,
+                   username ? "OPERATOR=%s" : NULL, username);
+
+        if (m->enable_wall_messages)
+                utmp_wall(l, username, m->scheduled_shutdown_tty, logind_wall_tty_filter, m);
 
         return 1;
 }
@@ -92,20 +104,18 @@
                         uint64_t usec,
                         void *userdata) {
 
-        Manager *m = userdata;
-        usec_t n, next;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
-        assert(m);
         assert(s == m->wall_message_timeout_source);
 
-        n = now(CLOCK_REALTIME);
+        usec_t n = now(CLOCK_REALTIME);
 
         r = warn_wall(m, n);
         if (r == 0)
                 return 0;
 
-        next = when_wall(n, m->scheduled_shutdown_timeout);
+        usec_t next = when_wall(n, m->scheduled_shutdown_timeout);
         if (next > 0) {
                 r = sd_event_source_set_time(s, n + next);
                 if (r < 0)
@@ -120,27 +130,23 @@
 }
 
 int manager_setup_wall_message_timer(Manager *m) {
-
-        usec_t n, elapse;
         int r;
 
         assert(m);
 
-        n = now(CLOCK_REALTIME);
-        elapse = m->scheduled_shutdown_timeout;
+        usec_t n = now(CLOCK_REALTIME);
+        usec_t elapse = m->scheduled_shutdown_timeout;
 
         /* wall message handling */
 
-        if (isempty(m->scheduled_shutdown_type)) {
-                warn_wall(m, n);
+        if (!m->scheduled_shutdown_action)
                 return 0;
-        }
 
-        if (elapse < n)
+        if (elapse > 0 && elapse < n)
                 return 0;
 
         /* Warn immediately if less than 15 minutes are left */
-        if (elapse - n < 15 * USEC_PER_MINUTE) {
+        if (elapse == 0 || elapse - n < 15 * USEC_PER_MINUTE) {
                 r = warn_wall(m, n);
                 if (r == 0)
                         return 0;
@@ -150,19 +156,15 @@
         if (elapse == 0)
                 return 0;
 
-        if (m->wall_message_timeout_source) {
-                r = sd_event_source_set_time(m->wall_message_timeout_source, n + elapse);
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_source_set_time() failed. %m");
+        r = event_reset_time(m->event, &m->wall_message_timeout_source,
+                             CLOCK_REALTIME,
+                             n + elapse, 0,
+                             wall_message_timeout_handler, m,
+                             0, "wall-message-timer", true);
 
-                r = sd_event_source_set_enabled(m->wall_message_timeout_source, SD_EVENT_ONESHOT);
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_source_set_enabled() failed. %m");
-        } else {
-                r = sd_event_add_time(m->event, &m->wall_message_timeout_source,
-                                      CLOCK_REALTIME, n + elapse, 0, wall_message_timeout_handler, m);
-                if (r < 0)
-                        return log_error_errno(r, "sd_event_add_time() failed. %m");
+        if (r < 0) {
+                m->wall_message_timeout_source = sd_event_source_unref(m->wall_message_timeout_source);
+                return log_error_errno(r, "Failed to set up wall message timer: %m");
         }
 
         return 0;
diff --git a/src/login/logind.c b/src/login/logind.c
index b642da6..1feacd3 100644
--- a/src/login/logind.c
+++ b/src/login/logind.c
@@ -14,10 +14,11 @@
 #include "bus-log-control-api.h"
 #include "bus-polkit.h"
 #include "cgroup-util.h"
+#include "constants.h"
 #include "daemon-util.h"
-#include "def.h"
 #include "device-util.h"
 #include "dirent-util.h"
+#include "escape.h"
 #include "fd-util.h"
 #include "format-util.h"
 #include "fs-util.h"
@@ -27,6 +28,7 @@
 #include "logind-user-dbus.h"
 #include "logind.h"
 #include "main-func.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "process-util.h"
 #include "selinux-util.h"
@@ -51,8 +53,9 @@
                 return -ENOMEM;
 
         *m = (Manager) {
-                .console_active_fd = -1,
-                .reserve_vt_fd = -1,
+                .console_active_fd = -EBADF,
+                .reserve_vt_fd = -EBADF,
+                .enable_wall_messages = true,
                 .idle_action_not_before_usec = now(CLOCK_MONOTONIC),
         };
 
@@ -140,6 +143,8 @@
         sd_event_source_unref(m->console_active_event_source);
         sd_event_source_unref(m->lid_switch_ignore_event_source);
 
+        sd_event_source_unref(m->reboot_key_long_press_event_source);
+
 #if ENABLE_UTMP
         sd_event_source_unref(m->utmp_event_source);
 #endif
@@ -164,7 +169,6 @@
         strv_free(m->kill_only_users);
         strv_free(m->kill_exclude_users);
 
-        free(m->scheduled_shutdown_type);
         free(m->scheduled_shutdown_tty);
         free(m->wall_message);
         free(m->action_job);
@@ -241,7 +245,6 @@
 
 static int manager_enumerate_seats(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0;
 
         assert(m);
@@ -283,7 +286,6 @@
 
 static int manager_enumerate_linger_users(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0;
 
         assert(m);
@@ -298,11 +300,16 @@
 
         FOREACH_DIRENT(de, d, return -errno) {
                 int k;
+                _cleanup_free_ char *n = NULL;
 
                 if (!dirent_is_file(de))
                         continue;
-
-                k = manager_add_user_by_name(m, de->d_name, NULL);
+                k = cunescape(de->d_name, 0, &n);
+                if (k < 0) {
+                        r = log_warning_errno(k, "Failed to unescape username '%s', ignoring: %m", de->d_name);
+                        continue;
+                }
+                k = manager_add_user_by_name(m, n, NULL);
                 if (k < 0)
                         r = log_warning_errno(k, "Couldn't add lingering user %s, ignoring: %m", de->d_name);
         }
@@ -312,7 +319,6 @@
 
 static int manager_enumerate_users(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r, k;
 
         assert(m);
@@ -455,13 +461,9 @@
                 if (deliver_fd(m, fdnames[i], fd) >= 0)
                         continue;
 
-                /* Hmm, we couldn't deliver the fd to any session device object? If so, let's close the fd */
-                safe_close(fd);
-
-                /* Remove from fdstore as well */
-                (void) sd_notifyf(false,
-                                  "FDSTOREREMOVE=1\n"
-                                  "FDNAME=%s", fdnames[i]);
+                /* Hmm, we couldn't deliver the fd to any session device object? If so, let's close the fd
+                 * and remove it from fdstore. */
+                close_and_notify_warn(fd, fdnames[i]);
         }
 
         return 0;
@@ -469,7 +471,6 @@
 
 static int manager_enumerate_sessions(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0, k;
 
         assert(m);
@@ -511,7 +512,6 @@
 
 static int manager_enumerate_inhibitors(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0;
 
         assert(m);
@@ -546,9 +546,8 @@
 }
 
 static int manager_dispatch_seat_udev(sd_device_monitor *monitor, sd_device *device, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(device);
 
         manager_process_seat_device(m, device);
@@ -556,9 +555,8 @@
 }
 
 static int manager_dispatch_device_udev(sd_device_monitor *monitor, sd_device *device, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(device);
 
         manager_process_seat_device(m, device);
@@ -566,10 +564,9 @@
 }
 
 static int manager_dispatch_vcsa_udev(sd_device_monitor *monitor, sd_device *device, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
 
-        assert(m);
         assert(device);
 
         /* Whenever a VCSA device is removed try to reallocate our
@@ -584,9 +581,8 @@
 }
 
 static int manager_dispatch_button_udev(sd_device_monitor *monitor, sd_device *device, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(device);
 
         manager_process_button_device(m, device);
@@ -594,9 +590,8 @@
 }
 
 static int manager_dispatch_console(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(m->seat0);
         assert(m->console_active_fd == fd);
 
@@ -685,7 +680,7 @@
 
 static int manager_vt_switch(sd_event_source *src, const struct signalfd_siginfo *si, void *data) {
         Manager *m = data;
-        Session *active, *iter;
+        Session *active;
 
         /*
          * We got a VT-switch signal and we have to acknowledge it immediately.
@@ -706,7 +701,7 @@
 
         active = m->seat0->active;
         if (!active || active->vtnr < 1) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 int r;
 
                 /* We are requested to acknowledge the VT-switch signal by the kernel but
@@ -732,16 +727,14 @@
                 return 0;
         }
 
-        if (active->vtfd >= 0) {
+        if (active->vtfd >= 0)
                 session_leave_vt(active);
-        } else {
-                LIST_FOREACH(sessions_by_seat, iter, m->seat0->sessions) {
+        else
+                LIST_FOREACH(sessions_by_seat, iter, m->seat0->sessions)
                         if (iter->vtnr == active->vtnr && iter->vtfd >= 0) {
                                 session_leave_vt(iter);
                                 break;
                         }
-                }
-        }
 
         return 0;
 }
@@ -784,7 +777,7 @@
 
         if (SIGRTMIN + 1 > SIGRTMAX)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Not enough real-time signals available: %u-%u",
+                                       "Not enough real-time signals available: %i-%i",
                                        SIGRTMIN, SIGRTMAX);
 
         assert_se(ignore_signals(SIGRTMIN + 1) >= 0);
@@ -822,7 +815,7 @@
         if (r < 0)
                 return r;
 
-        (void) sd_event_source_set_description(sd_device_monitor_get_event_source(m->device_seat_monitor), "logind-seat-monitor");
+        (void) sd_device_monitor_set_description(m->device_seat_monitor, "seat");
 
         r = sd_device_monitor_new(&m->device_monitor);
         if (r < 0)
@@ -848,7 +841,7 @@
         if (r < 0)
                 return r;
 
-        (void) sd_event_source_set_description(sd_device_monitor_get_event_source(m->device_monitor), "logind-device-monitor");
+        (void) sd_device_monitor_set_description(m->device_monitor, "input,graphics,drm");
 
         /* Don't watch keys if nobody cares */
         if (!manager_all_buttons_ignored(m)) {
@@ -872,7 +865,7 @@
                 if (r < 0)
                         return r;
 
-                (void) sd_event_source_set_description(sd_device_monitor_get_event_source(m->device_button_monitor), "logind-button-monitor");
+                (void) sd_device_monitor_set_description(m->device_button_monitor, "button");
         }
 
         /* Don't bother watching VCSA devices, if nobody cares */
@@ -894,7 +887,7 @@
                 if (r < 0)
                         return r;
 
-                (void) sd_event_source_set_description(sd_device_monitor_get_event_source(m->device_vcsa_monitor), "logind-vcsa-monitor");
+                (void) sd_device_monitor_set_description(m->device_vcsa_monitor, "vcsa");
         }
 
         return 0;
@@ -951,13 +944,11 @@
 }
 
 static int manager_dispatch_idle_action(sd_event_source *s, uint64_t t, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         struct dual_timestamp since;
         usec_t n, elapse;
         int r;
 
-        assert(m);
-
         if (m->idle_action == HANDLE_IGNORE ||
             m->idle_action_usec <= 0)
                 return 0;
@@ -965,18 +956,33 @@
         n = now(CLOCK_MONOTONIC);
 
         r = manager_get_idle_hint(m, &since);
-        if (r <= 0)
+        if (r <= 0) {
                 /* Not idle. Let's check if after a timeout it might be idle then. */
                 elapse = n + m->idle_action_usec;
-        else {
+                m->was_idle = false;
+        } else {
+
                 /* Idle! Let's see if it's time to do something, or if
                  * we shall sleep for longer. */
 
                 if (n >= since.monotonic + m->idle_action_usec &&
                     (m->idle_action_not_before_usec <= 0 || n >= m->idle_action_not_before_usec + m->idle_action_usec)) {
-                        log_info("System idle. Doing %s operation.", handle_action_to_string(m->idle_action));
+                        bool is_edge = false;
 
-                        manager_handle_action(m, 0, m->idle_action, false, false);
+                        /* We weren't idle previously or some activity happened while we were sleeping, and now we are
+                         * idle. Let's remember that for the next time and make this an edge transition. */
+                        if (!m->was_idle || since.monotonic >= m->idle_action_not_before_usec) {
+                                is_edge = true;
+                                m->was_idle = true;
+                        }
+
+                        if (m->idle_action == HANDLE_LOCK && !is_edge)
+                                /* We are idle and we were before so we are actually not taking any action. */
+                                log_debug("System idle.");
+                        else
+                                log_info("System idle. Will %s now.", handle_action_verb_to_string(m->idle_action));
+
+                        manager_handle_action(m, 0, m->idle_action, false, is_edge);
                         m->idle_action_not_before_usec = n;
                 }
 
@@ -1014,6 +1020,11 @@
         Manager *m = userdata;
         int r;
 
+        (void) sd_notifyf(/* unset= */ false,
+                          "RELOADING=1\n"
+                          "STATUS=Reloading configuration...\n"
+                          "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC));
+
         manager_reset_config(m);
         r = manager_parse_config_file(m);
         if (r < 0)
@@ -1021,6 +1032,7 @@
         else
                 log_info("Config file reloaded.");
 
+        (void) sd_notify(/* unset= */ false, NOTIFY_READY);
         return 0;
 }
 
@@ -1090,6 +1102,8 @@
         if (r < 0)
                 log_warning_errno(r, "Button enumeration failed: %m");
 
+        manager_load_scheduled_shutdown(m);
+
         /* Remove stale objects before we start them */
         manager_gc(m, false);
 
diff --git a/src/login/logind.conf.in b/src/login/logind.conf.in
index be2eb79..0b10df6 100644
--- a/src/login/logind.conf.in
+++ b/src/login/logind.conf.in
@@ -23,12 +23,16 @@
 #InhibitDelayMaxSec=5
 #UserStopDelaySec=10
 #HandlePowerKey=poweroff
+#HandlePowerKeyLongPress=ignore
+#HandleRebootKey=reboot
+#HandleRebootKeyLongPress=poweroff
 #HandleSuspendKey=suspend
+#HandleSuspendKeyLongPress=hibernate
 #HandleHibernateKey=hibernate
+#HandleHibernateKeyLongPress=ignore
 #HandleLidSwitch=suspend
 #HandleLidSwitchExternalPower=suspend
 #HandleLidSwitchDocked=ignore
-#HandleRebootKey=reboot
 #PowerKeyIgnoreInhibited=no
 #SuspendKeyIgnoreInhibited=no
 #HibernateKeyIgnoreInhibited=no
@@ -38,7 +42,8 @@
 #IdleAction=ignore
 #IdleActionSec=30min
 #RuntimeDirectorySize=10%
-#RuntimeDirectoryInodesMax=400k
+#RuntimeDirectoryInodesMax=
 #RemoveIPC=yes
 #InhibitorsMax=8192
 #SessionsMax=8192
+#StopIdleSessionSec=infinity
diff --git a/src/login/logind.h b/src/login/logind.h
index 761763a..d0b1f96 100644
--- a/src/login/logind.h
+++ b/src/login/logind.h
@@ -68,21 +68,15 @@
         usec_t inhibit_delay_max;
         usec_t user_stop_delay;
 
-        /* If an action is currently being executed or is delayed,
-         * this is != 0 and encodes what is being done */
-        InhibitWhat action_what;
+        /* If a shutdown/suspend was delayed due to an inhibitor this contains the action we are supposed to
+         * start after the delay is over */
+        const HandleActionData *delayed_action;
 
-        /* If a shutdown/suspend was delayed due to an inhibitor this
-           contains the unit name we are supposed to start after the
-           delay is over */
-        const char *action_unit;
-
-        /* If a shutdown/suspend is currently executed, then this is
-         * the job of it */
+        /* If a shutdown/suspend is currently executed, then this is the job of it */
         char *action_job;
         sd_event_source *inhibit_timeout_source;
 
-        char *scheduled_shutdown_type;
+        const HandleActionData *scheduled_shutdown_action;
         usec_t scheduled_shutdown_timeout;
         sd_event_source *scheduled_shutdown_timeout_source;
         uid_t scheduled_shutdown_uid;
@@ -91,7 +85,7 @@
         bool unlink_nologin;
 
         char *wall_message;
-        unsigned enable_wall_messages;
+        bool enable_wall_messages;
         sd_event_source *wall_message_timeout_source;
 
         bool shutdown_dry_run;
@@ -100,14 +94,22 @@
         usec_t idle_action_usec;
         usec_t idle_action_not_before_usec;
         HandleAction idle_action;
+        bool was_idle;
+
+        usec_t stop_idle_session_usec;
 
         HandleAction handle_power_key;
+        HandleAction handle_power_key_long_press;
+        HandleAction handle_reboot_key;
+        HandleAction handle_reboot_key_long_press;
         HandleAction handle_suspend_key;
+        HandleAction handle_suspend_key_long_press;
         HandleAction handle_hibernate_key;
+        HandleAction handle_hibernate_key_long_press;
+
         HandleAction handle_lid_switch;
         HandleAction handle_lid_switch_ep;
         HandleAction handle_lid_switch_docked;
-        HandleAction handle_reboot_key;
 
         bool power_key_ignore_inhibited;
         bool suspend_key_ignore_inhibited;
@@ -122,6 +124,11 @@
         usec_t holdoff_timeout_usec;
         sd_event_source *lid_switch_ignore_event_source;
 
+        sd_event_source *power_key_long_press_event_source;
+        sd_event_source *reboot_key_long_press_event_source;
+        sd_event_source *suspend_key_long_press_event_source;
+        sd_event_source *hibernate_key_long_press_event_source;
+
         uint64_t runtime_dir_size;
         uint64_t runtime_dir_inodes;
         uint64_t sessions_max;
@@ -176,6 +183,6 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_tmpfs_size);
 
 int manager_setup_wall_message_timer(Manager *m);
-bool logind_wall_tty_filter(const char *tty, void *userdata);
+bool logind_wall_tty_filter(const char *tty, bool is_local, void *userdata);
 
 int manager_read_efi_boot_loader_entries(Manager *m);
diff --git a/src/login/meson.build b/src/login/meson.build
index da704d2..c93a2fd 100644
--- a/src/login/meson.build
+++ b/src/login/meson.build
@@ -1,9 +1,8 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_logind_sources = files('''
-        logind.c
-        logind.h
-'''.split())
+systemd_logind_sources = files(
+        'logind.c',
+)
 
 logind_gperf_c = custom_target(
         'logind_gperf.c',
@@ -11,38 +10,24 @@
         output : 'logind-gperf.c',
         command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
-liblogind_core_sources = files('''
-        logind-action.c
-        logind-action.h
-        logind-brightness.c
-        logind-brightness.h
-        logind-button.c
-        logind-button.h
-        logind-core.c
-        logind-dbus.c
-        logind-dbus.h
-        logind-device.c
-        logind-device.h
-        logind-inhibit.c
-        logind-inhibit.h
-        logind-polkit.c
-        logind-polkit.h
-        logind-seat-dbus.c
-        logind-seat-dbus.h
-        logind-seat.c
-        logind-seat.h
-        logind-session-dbus.c
-        logind-session-dbus.h
-        logind-session-device.c
-        logind-session-device.h
-        logind-session.c
-        logind-session.h
-        logind-user-dbus.c
-        logind-user-dbus.h
-        logind-user.c
-        logind-user.h
-        logind-utmp.c
-'''.split())
+liblogind_core_sources = files(
+        'logind-action.c',
+        'logind-brightness.c',
+        'logind-button.c',
+        'logind-core.c',
+        'logind-dbus.c',
+        'logind-device.c',
+        'logind-inhibit.c',
+        'logind-polkit.c',
+        'logind-seat-dbus.c',
+        'logind-seat.c',
+        'logind-session-dbus.c',
+        'logind-session-device.c',
+        'logind-session.c',
+        'logind-user-dbus.c',
+        'logind-user.c',
+        'logind-utmp.c',
+)
 
 liblogind_core_sources += [logind_gperf_c]
 
@@ -50,42 +35,36 @@
         'logind-core',
         liblogind_core_sources,
         include_directories : includes,
-        dependencies : [libacl])
+        dependencies : libacl,
+        build_by_default : false)
 
-loginctl_sources = files('''
-        loginctl.c
-        sysfs-show.h
-        sysfs-show.c
-'''.split())
+loginctl_sources = files(
+        'loginctl.c',
+        'sysfs-show.c',
+)
 
-user_runtime_dir_sources = files('''
-        user-runtime-dir.c
-'''.split())
+user_runtime_dir_sources = files('user-runtime-dir.c')
 
 pam_systemd_sym = 'src/login/pam_systemd.sym'
 pam_systemd_c = files('pam_systemd.c')
 
 enable_logind = conf.get('ENABLE_LOGIND') == 1
-in_files = [
-        ['logind.conf',        pkgsysconfdir, enable_logind and install_sysconfdir_samples],
-        ['70-uaccess.rules',   udevrulesdir,  enable_logind and conf.get('HAVE_ACL') == 1],
-        ['71-seat.rules',      udevrulesdir,  enable_logind],
-        ['73-seat-late.rules', udevrulesdir,  enable_logind],
-        ['systemd-user',       pamconfdir,    enable_logind]]
 
-foreach tuple : in_files
-        file = tuple[0]
-        dir = tuple[1]
-        install = (dir == pkgsysconfdir) ? install_sysconfdir_samples : (dir != 'no')
-        custom_target(
-                file,
-                input : file + '.in',
-                output: file,
-                command : [meson_render_jinja2, config_h, '@INPUT@'],
-                capture : true,
-                install : tuple[2] and install,
-                install_dir : dir)
-endforeach
+custom_target(
+        'logind.conf',
+        input : 'logind.conf.in',
+        output : 'logind.conf',
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
+        install : enable_logind and install_sysconfdir_samples and pkgsysconfdir != 'no',
+        install_dir : pkgsysconfdir)
+
+custom_target(
+        'systemd-user',
+        input : 'systemd-user.in',
+        output : 'systemd-user',
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
+        install : enable_logind and pamconfdir != 'no',
+        install_dir : pamconfdir)
 
 if enable_logind
         install_data('org.freedesktop.login1.conf',
@@ -94,20 +73,21 @@
                      install_dir : dbussystemservicedir)
         install_data('org.freedesktop.login1.policy',
                      install_dir : polkitpolicydir)
-        install_data('70-power-switch.rules',
-                     install_dir : udevrulesdir)
 endif
 
 ############################################################
 
 tests += [
-        [['src/login/test-login-shared.c']],
+        [files('test-login-shared.c')],
 
-        [['src/login/test-inhibit.c'],
+        [files('test-inhibit.c'),
          [], [], [], '', 'manual'],
 
-        [['src/login/test-login-tables.c'],
+        [files('test-login-tables.c'),
          [liblogind_core,
           libshared],
          [threads]],
+
+        [files('test-session-properties.c'),
+         [], [], [], '', 'manual'],
 ]
diff --git a/src/login/org.freedesktop.login1.conf b/src/login/org.freedesktop.login1.conf
index 95d2ef0..bf905e3 100644
--- a/src/login/org.freedesktop.login1.conf
+++ b/src/login/org.freedesktop.login1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
@@ -346,6 +346,10 @@
                        send_interface="org.freedesktop.login1.User"
                        send_member="Kill"/>
 
+                <allow send_destination="org.freedesktop.login1"
+                       send_interface="org.freedesktop.login1.Session"
+                       send_member="SetDisplay"/>
+
                 <allow receive_sender="org.freedesktop.login1"/>
         </policy>
 
diff --git a/src/login/org.freedesktop.login1.policy b/src/login/org.freedesktop.login1.policy
index df906b0..012ee14 100644
--- a/src/login/org.freedesktop.login1.policy
+++ b/src/login/org.freedesktop.login1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c
index f8bd17e..ba2fca3 100644
--- a/src/login/pam_systemd.c
+++ b/src/login/pam_systemd.c
@@ -22,6 +22,7 @@
 #include "bus-internal.h"
 #include "bus-locator.h"
 #include "cgroup-setup.h"
+#include "devnum-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -106,15 +107,11 @@
         assert(handle);
 
         r = pam_get_user(handle, &username, NULL);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to get user name: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get user name: @PAMERR@");
 
-        if (isempty(username)) {
-                pam_syslog(handle, LOG_ERR, "User name not valid.");
-                return PAM_SERVICE_ERR;
-        }
+        if (isempty(username))
+                return pam_syslog_pam_error(handle, LOG_ERR, PAM_SERVICE_ERR, "User name not valid.");
 
         /* If pam_systemd_homed (or some other module) already acquired the user record we can reuse it
          * here. */
@@ -123,66 +120,53 @@
                 return pam_log_oom(handle);
 
         r = pam_get_data(handle, field, (const void**) &json);
-        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA)) {
-                pam_syslog(handle, LOG_ERR, "Failed to get PAM user record data: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM user record data: @PAMERR@");
         if (r == PAM_SUCCESS && json) {
                 _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
 
                 /* Parse cached record */
                 r = json_parse(json, JSON_PARSE_SENSITIVE, &v, NULL, NULL);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to parse JSON user record: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to parse JSON user record: %m");
 
                 ur = user_record_new();
                 if (!ur)
                         return pam_log_oom(handle);
 
                 r = user_record_load(ur, v, USER_RECORD_LOAD_REFUSE_SECRET|USER_RECORD_PERMISSIVE);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to load user record: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to load user record: %m");
 
                 /* Safety check if cached record actually matches what we are looking for */
-                if (!streq_ptr(username, ur->user_name)) {
-                        pam_syslog(handle, LOG_ERR, "Acquired user record does not match user name.");
-                        return PAM_SERVICE_ERR;
-                }
+                if (!streq_ptr(username, ur->user_name))
+                        return pam_syslog_pam_error(handle, LOG_ERR, PAM_SERVICE_ERR,
+                                                    "Acquired user record does not match user name.");
         } else {
                 _cleanup_free_ char *formatted = NULL;
 
                 /* Request the record ourselves */
                 r = userdb_by_name(username, 0, &ur);
                 if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to get user record: %s", strerror_safe(r));
+                        pam_syslog_errno(handle, LOG_ERR, r, "Failed to get user record: %m");
                         return PAM_USER_UNKNOWN;
                 }
 
                 r = json_variant_format(ur->json, 0, &formatted);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to format user JSON: %s", strerror_safe(r));
-                        return PAM_SERVICE_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to format user JSON: %m");
 
                 /* And cache it for everyone else */
                 r = pam_set_data(handle, field, formatted, pam_cleanup_free);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to set PAM user record data '%s': %s",
-                                   field, pam_strerror(handle, r));
-                        return r;
-                }
-
+                if (r != PAM_SUCCESS)
+                        return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                                    "Failed to set PAM user record data '%s': @PAMERR@", field);
                 TAKE_PTR(formatted);
         }
 
-        if (!uid_is_valid(ur->uid)) {
-                pam_syslog(handle, LOG_ERR, "Acquired user record does not have a UID.");
-                return PAM_SERVICE_ERR;
-        }
+        if (!uid_is_valid(ur->uid))
+                return pam_syslog_pam_error(handle, LOG_ERR, PAM_SERVICE_ERR,
+                                            "Acquired user record does not have a UID.");
 
         if (ret_record)
                 *ret_record = TAKE_PTR(ur);
@@ -195,40 +179,64 @@
 
         return
                 display[0] == ':' &&
-                display[1] >= '0' &&
-                display[1] <= '9';
+                ascii_isdigit(display[1]);
 }
 
-static int socket_from_display(const char *display, char **path) {
+static int socket_from_display(const char *display) {
+        _cleanup_free_ char *f = NULL;
         size_t k;
-        char *f, *c;
+        char *c;
+        union sockaddr_union sa;
+        socklen_t sa_len;
+        _cleanup_close_ int fd = -EBADF;
+        int r;
 
         assert(display);
-        assert(path);
 
         if (!display_is_local(display))
                 return -EINVAL;
 
         k = strspn(display+1, "0123456789");
 
-        f = new(char, STRLEN("/tmp/.X11-unix/X") + k + 1);
+        /* Try abstract socket first. */
+        f = new(char, STRLEN("@/tmp/.X11-unix/X") + k + 1);
         if (!f)
                 return -ENOMEM;
 
-        c = stpcpy(f, "/tmp/.X11-unix/X");
+        c = stpcpy(f, "@/tmp/.X11-unix/X");
         memcpy(c, display+1, k);
         c[k] = 0;
 
-        *path = f;
+        r = sockaddr_un_set_path(&sa.un, f);
+        if (r < 0)
+                return r;
+        sa_len = r;
 
-        return 0;
+        fd = RET_NERRNO(socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0));
+        if (fd < 0)
+                return fd;
+
+        r = RET_NERRNO(connect(fd, &sa.sa, sa_len));
+        if (r >= 0)
+                return TAKE_FD(fd);
+        if (r != -ECONNREFUSED)
+                return r;
+
+        /* Try also non-abstract socket. */
+        r = sockaddr_un_set_path(&sa.un, f + 1);
+        if (r < 0)
+                return r;
+        sa_len = r;
+
+        r = RET_NERRNO(connect(fd, &sa.sa, sa_len));
+        if (r >= 0)
+                return TAKE_FD(fd);
+        return r;
 }
 
 static int get_seat_from_display(const char *display, const char **seat, uint32_t *vtnr) {
-        union sockaddr_union sa;
-        socklen_t sa_len;
-        _cleanup_free_ char *p = NULL, *sys_path = NULL, *tty = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_free_ char *sys_path = NULL, *tty = NULL;
+        _cleanup_close_ int fd = -EBADF;
         struct ucred ucred;
         int v, r;
         dev_t display_ctty;
@@ -242,20 +250,9 @@
          * the seat and the virtual terminal. Sounds ugly, is only
          * semi-ugly. */
 
-        r = socket_from_display(display, &p);
-        if (r < 0)
-                return r;
-        r = sockaddr_un_set_path(&sa.un, p);
-        if (r < 0)
-                return r;
-        sa_len = r;
-
-        fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
+        fd = socket_from_display(display);
         if (fd < 0)
-                return -errno;
-
-        if (connect(fd, &sa.sa, sa_len) < 0)
-                return -errno;
+                return fd;
 
         r = getpeercred(fd, &ucred);
         if (r < 0)
@@ -265,7 +262,7 @@
         if (r < 0)
                 return r;
 
-        if (asprintf(&sys_path, "/sys/dev/char/%d:%d", major(display_ctty), minor(display_ctty)) < 0)
+        if (asprintf(&sys_path, "/sys/dev/char/" DEVNUM_FORMAT_STR, DEVNUM_FORMAT_VAL(display_ctty)) < 0)
                 return -ENOMEM;
         r = readlink_value(sys_path, &tty);
         if (r < 0)
@@ -312,10 +309,8 @@
                 return pam_log_oom(handle);
 
         r = pam_misc_setenv(handle, "DBUS_SESSION_BUS_ADDRESS", t, 0);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to set bus variable: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to set bus variable: @PAMERR@");
 
         return PAM_SUCCESS;
 }
@@ -398,16 +393,18 @@
 static int append_session_cg_weight(pam_handle_t *handle, sd_bus_message *m, const char *limit, const char *field) {
         uint64_t val;
         int r;
+        bool is_cpu_weight;
 
+        is_cpu_weight = streq(field, "CPUWeight");
         if (isempty(limit))
                 return PAM_SUCCESS;
 
-        r = cg_weight_parse(limit, &val);
+        r = is_cpu_weight ? cg_cpu_weight_parse(limit, &val) : cg_weight_parse(limit, &val);
         if (r >= 0) {
                 r = sd_bus_message_append(m, "(sv)", field, "t", val);
                 if (r < 0)
                         return pam_bus_log_create_error(handle, r);
-        } else if (streq(field, "CPUWeight"))
+        } else if (is_cpu_weight)
                 pam_syslog(handle, LOG_WARNING, "Failed to parse systemd.cpu_weight, ignoring: %s", limit);
         else
                 pam_syslog(handle, LOG_WARNING, "Failed to parse systemd.io_weight, ignoring: %s", limit);
@@ -455,9 +452,10 @@
 
         r = pam_misc_setenv(handle, key, value, 0);
         if (r != PAM_SUCCESS)
-                pam_syslog(handle, LOG_ERR, "Failed to set environment variable %s: %s", key, pam_strerror(handle, r));
+                return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                            "Failed to set environment variable %s: @PAMERR@", key);
 
-        return r;
+        return PAM_SUCCESS;
 }
 
 static bool validate_runtime_directory(pam_handle_t *handle, const char *path, uid_t uid) {
@@ -479,7 +477,7 @@
         }
 
         if (lstat(path, &st) < 0) {
-                pam_syslog(handle, LOG_ERR, "Failed to stat() runtime directory '%s': %s", path, strerror_safe(errno));
+                pam_syslog_errno(handle, LOG_ERR, errno, "Failed to stat() runtime directory '%s': %m", path);
                 goto fail;
         }
 
@@ -507,10 +505,9 @@
         assert(e);
 
         r = pam_putenv(handle, e);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to set PAM environment variable %s: %s", e, pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                            "Failed to set PAM environment variable %s: @PAMERR@", e);
 
         if (debug)
                 pam_syslog(handle, LOG_DEBUG, "PAM environment variable %s set based on user record.", e);
@@ -519,7 +516,6 @@
 }
 
 static int apply_user_record_settings(pam_handle_t *handle, UserRecord *ur, bool debug) {
-        char **i;
         int r;
 
         assert(handle);
@@ -612,9 +608,11 @@
 
         if (nice_is_valid(ur->nice_level)) {
                 if (nice(ur->nice_level) < 0)
-                        pam_syslog(handle, LOG_ERR, "Failed to set nice level to %i, ignoring: %s", ur->nice_level, strerror_safe(errno));
+                        pam_syslog_errno(handle, LOG_ERR, errno,
+                                         "Failed to set nice level to %i, ignoring: %m", ur->nice_level);
                 else if (debug)
-                        pam_syslog(handle, LOG_DEBUG, "Nice level set, based on user record.");
+                        pam_syslog(handle, LOG_DEBUG,
+                                   "Nice level set to %i, based on user record.", ur->nice_level);
         }
 
         for (int rl = 0; rl < _RLIMIT_MAX; rl++) {
@@ -624,9 +622,11 @@
 
                 r = setrlimit_closest(rl, ur->rlimits[rl]);
                 if (r < 0)
-                        pam_syslog(handle, LOG_ERR, "Failed to set resource limit %s, ignoring: %s", rlimit_to_string(rl), strerror_safe(r));
+                        pam_syslog_errno(handle, LOG_ERR, r,
+                                         "Failed to set resource limit %s, ignoring: %m", rlimit_to_string(rl));
                 else if (debug)
-                        pam_syslog(handle, LOG_DEBUG, "Resource limit %s set, based on user record.", rlimit_to_string(rl));
+                        pam_syslog(handle, LOG_DEBUG,
+                                   "Resource limit %s set, based on user record.", rlimit_to_string(rl));
         }
 
         return PAM_SUCCESS;
@@ -647,10 +647,8 @@
                 return PAM_SUCCESS;
 
         r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", rt, 0);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to set runtime dir: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to set runtime dir: @PAMERR@");
 
         return export_legacy_dbus_address(handle, rt);
 }
@@ -673,7 +671,7 @@
                 *memory_max = NULL, *tasks_max = NULL, *cpu_weight = NULL, *io_weight = NULL, *runtime_max_sec = NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
-        int session_fd = -1, existing, r;
+        int session_fd = -EBADF, existing, r;
         bool debug = false, remote;
         uint32_t vtnr = 0;
         uid_t original_uid;
@@ -705,7 +703,9 @@
          * "systemd-user" we simply set XDG_RUNTIME_DIR and
          * leave. */
 
-        (void) pam_get_item(handle, PAM_SERVICE, (const void**) &service);
+        r = pam_get_item(handle, PAM_SERVICE, (const void**) &service);
+        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM service: @PAMERR@");
         if (streq_ptr(service, "systemd-user")) {
                 char rt[STRLEN("/run/user/") + DECIMAL_STR_MAX(uid_t)];
 
@@ -719,10 +719,18 @@
 
         /* Otherwise, we ask logind to create a session for us */
 
-        (void) pam_get_item(handle, PAM_XDISPLAY, (const void**) &display);
-        (void) pam_get_item(handle, PAM_TTY, (const void**) &tty);
-        (void) pam_get_item(handle, PAM_RUSER, (const void**) &remote_user);
-        (void) pam_get_item(handle, PAM_RHOST, (const void**) &remote_host);
+        r = pam_get_item(handle, PAM_XDISPLAY, (const void**) &display);
+        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM_XDISPLAY: @PAMERR@");
+        r = pam_get_item(handle, PAM_TTY, (const void**) &tty);
+        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM_TTY: @PAMERR@");
+        r = pam_get_item(handle, PAM_RUSER, (const void**) &remote_user);
+        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM_RUSER: @PAMERR@");
+        r = pam_get_item(handle, PAM_RHOST, (const void**) &remote_host);
+        if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM_RHOST: @PAMERR@");
 
         seat = getenv_harder(handle, "XDG_SEAT", NULL);
         cvtnr = getenv_harder(handle, "XDG_VTNR", NULL);
@@ -789,11 +797,21 @@
 
         remote = !isempty(remote_host) && !is_localhost(remote_host);
 
-        (void) pam_get_data(handle, "systemd.memory_max", (const void **)&memory_max);
-        (void) pam_get_data(handle, "systemd.tasks_max",  (const void **)&tasks_max);
-        (void) pam_get_data(handle, "systemd.cpu_weight", (const void **)&cpu_weight);
-        (void) pam_get_data(handle, "systemd.io_weight",  (const void **)&io_weight);
-        (void) pam_get_data(handle, "systemd.runtime_max_sec", (const void **)&runtime_max_sec);
+        r = pam_get_data(handle, "systemd.memory_max", (const void **)&memory_max);
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM systemd.memory_max data: @PAMERR@");
+        r = pam_get_data(handle, "systemd.tasks_max",  (const void **)&tasks_max);
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM systemd.tasks_max data: @PAMERR@");
+        r = pam_get_data(handle, "systemd.cpu_weight", (const void **)&cpu_weight);
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM systemd.cpu_weight data: @PAMERR@");
+        r = pam_get_data(handle, "systemd.io_weight",  (const void **)&io_weight);
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM systemd.io_weight data: @PAMERR@");
+        r = pam_get_data(handle, "systemd.runtime_max_sec", (const void **)&runtime_max_sec);
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get PAM systemd.runtime_max_sec data: @PAMERR@");
 
         /* Talk to logind over the message bus */
 
@@ -939,24 +957,18 @@
         }
 
         r = pam_set_data(handle, "systemd.existing", INT_TO_PTR(!!existing), NULL);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to install existing flag: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to install existing flag: @PAMERR@");
 
         if (session_fd >= 0) {
-                session_fd = fcntl(session_fd, F_DUPFD_CLOEXEC, 3);
-                if (session_fd < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to dup session fd: %m");
-                        return PAM_SESSION_ERR;
-                }
+                _cleanup_close_ int fd = fcntl(session_fd, F_DUPFD_CLOEXEC, 3);
+                if (fd < 0)
+                        return pam_syslog_errno(handle, LOG_ERR, errno, "Failed to dup session fd: %m");
 
-                r = pam_set_data(handle, "systemd.session-fd", FD_TO_PTR(session_fd), NULL);
-                if (r != PAM_SUCCESS) {
-                        pam_syslog(handle, LOG_ERR, "Failed to install session fd: %s", pam_strerror(handle, r));
-                        safe_close(session_fd);
-                        return r;
-                }
+                r = pam_set_data(handle, "systemd.session-fd", FD_TO_PTR(fd), NULL);
+                if (r != PAM_SUCCESS)
+                        return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to install session fd: @PAMERR@");
+                TAKE_FD(fd);
         }
 
 success:
@@ -996,7 +1008,10 @@
 
         /* Only release session if it wasn't pre-existing when we
          * tried to create it */
-        (void) pam_get_data(handle, "systemd.existing", &existing);
+        r = pam_get_data(handle, "systemd.existing", &existing);
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r,
+                                            "Failed to get PAM systemd.existing data: @PAMERR@");
 
         id = pam_getenv(handle, "XDG_SESSION_ID");
         if (id && !existing) {
@@ -1011,10 +1026,9 @@
                         return r;
 
                 r = bus_call_method(bus, bus_login_mgr, "ReleaseSession", &error, NULL, "s", id);
-                if (r < 0) {
-                        pam_syslog(handle, LOG_ERR, "Failed to release session: %s", bus_error_message(&error, r));
-                        return PAM_SESSION_ERR;
-                }
+                if (r < 0)
+                        return pam_syslog_pam_error(handle, LOG_ERR, PAM_SESSION_ERR,
+                                                    "Failed to release session: %s", bus_error_message(&error, r));
         }
 
         /* Note that we are knowingly leaking the FIFO fd here. This way, logind can watch us die. If we
diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
index 5c3af06..0a8c02a 100644
--- a/src/login/sysfs-show.c
+++ b/src/login/sysfs-show.c
@@ -6,12 +6,11 @@
 
 #include "alloc-util.h"
 #include "device-enumerator-private.h"
-#include "locale-util.h"
+#include "glyph-util.h"
 #include "path-util.h"
 #include "string-util.h"
 #include "sysfs-show.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static int show_sysfs_one(
                 const char *seat,
diff --git a/src/login/systemd-user.in b/src/login/systemd-user.in
index 19e649b..9a665bd 100644
--- a/src/login/systemd-user.in
+++ b/src/login/systemd-user.in
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
 # This file is part of systemd.
 #
 # Used by systemd --user instances.
@@ -5,16 +6,17 @@
 {% if ENABLE_HOMED %}
 -account sufficient pam_systemd_home.so
 {% endif %}
-account sufficient pam_unix.so no_pass_expiry
-account required pam_permit.so
+account  sufficient pam_unix.so no_pass_expiry
+account  required   pam_permit.so
 
 {% if HAVE_SELINUX %}
-session required pam_selinux.so close
-session required pam_selinux.so nottys open
+session  required   pam_selinux.so close
+session  required   pam_selinux.so nottys open
 {% endif %}
-session required pam_loginuid.so
-session optional pam_keyinit.so force revoke
+session  required   pam_loginuid.so
+session  optional   pam_keyinit.so force revoke
+session  required   pam_namespace.so
 {% if ENABLE_HOMED %}
--session optional pam_systemd_home.so
+-session optional   pam_systemd_home.so
 {% endif %}
-session optional pam_systemd.so
+session  optional   pam_systemd.so
diff --git a/src/login/test-inhibit.c b/src/login/test-inhibit.c
index dbe79c7..aefae27 100644
--- a/src/login/test-inhibit.c
+++ b/src/login/test-inhibit.c
@@ -8,7 +8,6 @@
 #include "bus-util.h"
 #include "fd-util.h"
 #include "macro.h"
-#include "util.h"
 
 static int inhibit(sd_bus *bus, const char *what) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
diff --git a/src/login/test-login-shared.c b/src/login/test-login-shared.c
index d3de9c4..17cd479 100644
--- a/src/login/test-login-shared.c
+++ b/src/login/test-login-shared.c
@@ -2,8 +2,9 @@
 
 #include "login-util.h"
 #include "macro.h"
+#include "tests.h"
 
-static void test_session_id_valid(void) {
+TEST(session_id_valid) {
         assert_se(session_id_valid("c1"));
         assert_se(session_id_valid("1234"));
 
@@ -12,11 +13,4 @@
         assert_se(!session_id_valid("\tid"));
 }
 
-int main(int argc, char* argv[]) {
-        log_parse_environment();
-        log_open();
-
-        test_session_id_valid();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/login/test-session-properties.c b/src/login/test-session-properties.c
new file mode 100644
index 0000000..44d5481
--- /dev/null
+++ b/src/login/test-session-properties.c
@@ -0,0 +1,110 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/* Usage:
+ * ./test-session-properties <SESSION-OBJECT-PATH>
+ * e.g.,
+ * ./test-session-properties /org/freedesktop/login1/session/_32
+ */
+
+#include "alloc-util.h"
+#include "bus-common-errors.h"
+#include "bus-locator.h"
+#include "string-util.h"
+#include "tests.h"
+
+static BusLocator session;
+
+/* Tests org.freedesktop.logind.Session SetType */
+TEST(set_type) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus* bus = NULL;
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        const char* types[] = {"tty", "x11", "wayland", "mir", "web"};
+        _cleanup_free_ char *type = NULL, *type2 = NULL;
+
+        assert_se(sd_bus_open_system(&bus) >= 0);
+
+        /* Default type is set */
+        assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0);
+        assert_se(streq(type, "tty"));
+
+        /* Type can only be set by the session controller (which we're not ATM) */
+        assert_se(bus_call_method(bus, &session, "SetType", &error, NULL, "s", "x11") < 0);
+        assert_se(sd_bus_error_has_name(&error, BUS_ERROR_NOT_IN_CONTROL));
+
+        assert_se(bus_call_method(bus, &session, "TakeControl", NULL, NULL, "b", true) >= 0);
+
+        /* All defined session types can be set */
+        for (size_t i = 0; i < ELEMENTSOF(types); i++) {
+                type = mfree(type);
+                assert_se(bus_call_method(bus, &session, "SetType", NULL, NULL, "s", types[i]) >= 0);
+                assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0);
+                assert_se(streq(type, types[i]));
+        }
+
+        /* An unknown type is rejected */
+        sd_bus_error_free(&error);
+        assert_se(bus_call_method(bus, &session, "SetType", &error, NULL, "s", "hello") < 0);
+        assert_se(sd_bus_error_has_name(&error, SD_BUS_ERROR_INVALID_ARGS));
+        assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type2) >= 0);
+
+        /* Type is reset to the original value when we release control of the session */
+        assert_se(!streq(type, "tty"));
+        assert_se(bus_call_method(bus, &session, "ReleaseControl", NULL, NULL, "") >= 0);
+        type = mfree(type);
+        assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0);
+        assert_se(streq(type, "tty"));
+}
+
+/* Tests org.freedesktop.logind.Session SetDisplay */
+TEST(set_display) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus* bus = NULL;
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_free_ char *display = NULL;
+
+        assert_se(sd_bus_open_system(&bus) >= 0);
+
+        /* Display is unset by default */
+        assert_se(bus_get_property_string(bus, &session, "Display", NULL, &display) >= 0);
+        assert_se(isempty(display));
+
+        /* Display can only be set by the session controller (which we're not ATM) */
+        assert_se(bus_call_method(bus, &session, "SetDisplay", &error, NULL, "s", ":0") < 0);
+        assert_se(sd_bus_error_has_name(&error, BUS_ERROR_NOT_IN_CONTROL));
+
+        assert_se(bus_call_method(bus, &session, "TakeControl", NULL, NULL, "b", true) >= 0);
+
+        /* Display can only be set on a graphical session */
+        assert_se(bus_call_method(bus, &session, "SetType", NULL, NULL, "s", "tty") >= 0);
+        sd_bus_error_free(&error);
+        assert_se(bus_call_method(bus, &session, "SetDisplay", &error, NULL, "s", ":0") < 0);
+        assert_se(sd_bus_error_has_name(&error, SD_BUS_ERROR_NOT_SUPPORTED));
+
+        assert_se(bus_call_method(bus, &session, "SetType", NULL, NULL, "s", "x11") >= 0);
+
+        /* Non-empty display can be set */
+        assert_se(bus_call_method(bus, &session, "SetDisplay", NULL, NULL, "s", ":0") >= 0);
+        display = mfree(display);
+        assert_se(bus_get_property_string(bus, &session, "Display", NULL, &display) >= 0);
+        assert_se(streq(display, ":0"));
+
+        /* Empty display can be set too */
+        assert_se(bus_call_method(bus, &session, "SetDisplay", NULL, NULL, "s", "") >= 0);
+        display = mfree(display);
+        assert_se(bus_get_property_string(bus, &session, "Display", NULL, &display) >= 0);
+        assert_se(isempty(display));
+}
+
+static int intro(void) {
+        if (saved_argc <= 1)
+                return EXIT_FAILURE;
+
+        session = (BusLocator) {
+                .destination = "org.freedesktop.login1",
+                .path = saved_argv[1],
+                .interface = "org.freedesktop.login1.Session",
+        };
+
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/login/user-runtime-dir.c b/src/login/user-runtime-dir.c
index 07d72d2..f96a2d8 100644
--- a/src/login/user-runtime-dir.c
+++ b/src/login/user-runtime-dir.c
@@ -12,7 +12,7 @@
 #include "label.h"
 #include "limits-util.h"
 #include "main-func.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
 #include "path-util.h"
@@ -80,7 +80,9 @@
                          uid, gid, runtime_dir_size, runtime_dir_inodes,
                          mac_smack_use() ? ",smackfsroot=*" : "");
 
-                (void) mkdir_label(runtime_path, 0700);
+                r = mkdir_label(runtime_path, 0700);
+                if (r < 0 && r != -EEXIST)
+                        return log_error_errno(r, "Failed to create %s: %m", runtime_path);
 
                 r = mount_nofollow_verbose(LOG_DEBUG, "tmpfs", runtime_path, "tmpfs", MS_NODEV|MS_NOSUID, options);
                 if (r < 0) {
@@ -207,7 +209,7 @@
                 return do_mount(argv[2]);
         if (streq(argv[1], "stop"))
                 return do_umount(argv[2]);
-        assert_not_reached("Unknown verb!");
+        assert_not_reached();
 }
 
 DEFINE_MAIN_FUNCTION(run);
diff --git a/src/machine-id-setup/machine-id-setup-main.c b/src/machine-id-setup/machine-id-setup-main.c
index 5af6bfe..9101f4e 100644
--- a/src/machine-id-setup/machine-id-setup-main.c
+++ b/src/machine-id-setup/machine-id-setup-main.c
@@ -6,6 +6,7 @@
 #include <stdlib.h>
 
 #include "alloc-util.h"
+#include "build.h"
 #include "dissect-image.h"
 #include "id128-util.h"
 #include "log.h"
@@ -16,7 +17,6 @@
 #include "path-util.h"
 #include "pretty-print.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static char *arg_root = NULL;
 static char *arg_image = NULL;
@@ -110,7 +110,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
@@ -125,9 +125,7 @@
 
 static int run(int argc, char *argv[]) {
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(umount_and_rmdir_and_freep) char *unlink_dir = NULL;
-        char buf[SD_ID128_STRING_MAX];
         sd_id128_t id;
         int r;
 
@@ -149,8 +147,7 @@
                                 DISSECT_IMAGE_FSCK |
                                 DISSECT_IMAGE_GROWFS,
                                 &unlink_dir,
-                                &loop_device,
-                                &decrypted_image);
+                                &loop_device);
                 if (r < 0)
                         return r;
 
@@ -167,7 +164,7 @@
                         return r;
 
                 etc_machine_id = prefix_roota(arg_root, "/etc/machine-id");
-                r = id128_read(etc_machine_id, ID128_PLAIN, &id);
+                r = id128_read(etc_machine_id, ID128_FORMAT_PLAIN, &id);
                 if (r < 0)
                         return log_error_errno(r, "Failed to read machine ID back: %m");
         } else {
@@ -177,7 +174,7 @@
         }
 
         if (arg_print)
-                puts(sd_id128_to_string(id, buf));
+                puts(SD_ID128_TO_STRING(id));
 
         return 0;
 }
diff --git a/src/machine/image-dbus.c b/src/machine/image-dbus.c
index e6ffb52..bf65eec 100644
--- a/src/machine/image-dbus.c
+++ b/src/machine/image-dbus.c
@@ -31,23 +31,28 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_close_pair_ int errno_pipe_fd[2] = { -1, -1 };
-        Image *image = userdata;
+        _cleanup_close_pair_ int errno_pipe_fd[2] = PIPE_EBADF;
+        Image *image = ASSERT_PTR(userdata);
         Manager *m = image->userdata;
         pid_t child;
         int r;
 
         assert(message);
-        assert(image);
 
         if (m->n_operations >= OPERATIONS_MAX)
                 return sd_bus_error_set(error, SD_BUS_ERROR_LIMITS_EXCEEDED, "Too many ongoing operations.");
 
+        const char *details[] = {
+                "image", image->name,
+                "verb", "remove",
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-images",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->polkit_registry,
@@ -83,7 +88,7 @@
                 return r;
         }
 
-        errno_pipe_fd[0] = -1;
+        errno_pipe_fd[0] = -EBADF;
 
         return 1;
 }
@@ -93,13 +98,12 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Image *image = userdata;
+        Image *image = ASSERT_PTR(userdata);
         Manager *m = image->userdata;
         const char *new_name;
         int r;
 
         assert(message);
-        assert(image);
 
         r = sd_bus_message_read(message, "s", &new_name);
         if (r < 0)
@@ -108,11 +112,18 @@
         if (!image_name_is_valid(new_name))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Image name '%s' is invalid.", new_name);
 
+        const char *details[] = {
+                "image", image->name,
+                "verb", "rename",
+                "new_name", new_name,
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-images",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->polkit_registry,
@@ -134,16 +145,14 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_close_pair_ int errno_pipe_fd[2] = { -1, -1 };
-        Image *image = userdata;
-        Manager *m = image->userdata;
+        _cleanup_close_pair_ int errno_pipe_fd[2] = PIPE_EBADF;
+        Image *image = ASSERT_PTR(userdata);
+        Manager *m = ASSERT_PTR(image->userdata);
         const char *new_name;
         int r, read_only;
         pid_t child;
 
         assert(message);
-        assert(image);
-        assert(m);
 
         if (m->n_operations >= OPERATIONS_MAX)
                 return sd_bus_error_set(error, SD_BUS_ERROR_LIMITS_EXCEEDED, "Too many ongoing operations.");
@@ -155,11 +164,18 @@
         if (!image_name_is_valid(new_name))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Image name '%s' is invalid.", new_name);
 
+        const char *details[] = {
+                "image", image->name,
+                "verb", "clone",
+                "new_name", new_name,
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-images",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->polkit_registry,
@@ -195,7 +211,7 @@
                 return r;
         }
 
-        errno_pipe_fd[0] = -1;
+        errno_pipe_fd[0] = -EBADF;
 
         return 1;
 }
@@ -207,7 +223,7 @@
 
         Image *image = userdata;
         Manager *m = image->userdata;
-        int r, read_only;
+        int read_only, r;
 
         assert(message);
 
@@ -215,11 +231,18 @@
         if (r < 0)
                 return r;
 
+        const char *details[] = {
+                "image", image->name,
+                "verb", "mark_read_only",
+                "read_only", one_zero(read_only),
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-images",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->polkit_registry,
@@ -254,11 +277,17 @@
         if (!FILE_SIZE_VALID_OR_INFINITY(limit))
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "New limit out of range");
 
+        const char *details[] = {
+                "machine", image->name,
+                "verb", "set_limit",
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-images",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->polkit_registry,
@@ -356,10 +385,9 @@
 }
 
 static int image_flush_cache(sd_event_source *s, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(m);
 
         hashmap_clear(m->image_cache);
         return 0;
diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c
index 404ff1c..45bc056 100644
--- a/src/machine/machine-dbus.c
+++ b/src/machine/machine-dbus.c
@@ -4,12 +4,6 @@
 #include <sys/mount.h>
 #include <sys/wait.h>
 
-/* When we include libgen.h because we need dirname() we immediately
- * undefine basename() since libgen.h defines it as a macro to the POSIX
- * version which is really broken. We prefer GNU basename(). */
-#include <libgen.h>
-#undef basename
-
 #include "alloc-util.h"
 #include "bus-common-errors.h"
 #include "bus-get-properties.h"
@@ -55,11 +49,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
 
         assert(bus);
         assert(reply);
-        assert(m);
 
         assert_cc(sizeof(int) == sizeof(int32_t));
 
@@ -67,17 +60,22 @@
 }
 
 int bus_machine_method_unregister(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
+
+        const char *details[] = {
+                "machine", m->name,
+                "verb", "unregister",
+                NULL
+        };
 
         r = bus_verify_polkit_async(
                         message,
                         CAP_KILL,
                         "org.freedesktop.machine1.manage-machines",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->manager->polkit_registry,
@@ -95,17 +93,22 @@
 }
 
 int bus_machine_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
+
+        const char *details[] = {
+                "machine", m->name,
+                "verb", "terminate",
+                NULL
+        };
 
         r = bus_verify_polkit_async(
                         message,
                         CAP_KILL,
                         "org.freedesktop.machine1.manage-machines",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->manager->polkit_registry,
@@ -123,14 +126,13 @@
 }
 
 int bus_machine_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
         const char *swho;
         int32_t signo;
         KillWho who;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "si", &swho, &signo);
         if (r < 0)
@@ -147,11 +149,17 @@
         if (!SIGNAL_VALID(signo))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid signal %i", signo);
 
+        const char *details[] = {
+                "machine", m->name,
+                "verb", "kill",
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_KILL,
                         "org.freedesktop.machine1.manage-machines",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->manager->polkit_registry,
@@ -170,11 +178,10 @@
 
 int bus_machine_method_get_addresses(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_new_method_return(message, &reply);
         if (r < 0)
@@ -188,15 +195,13 @@
 
         case MACHINE_HOST: {
                 _cleanup_free_ struct local_address *addresses = NULL;
-                struct local_address *a;
-                int n, i;
+                int n;
 
                 n = local_addresses(NULL, 0, AF_UNSPEC, &addresses);
                 if (n < 0)
                         return n;
 
-                for (a = addresses, i = 0; i < n; a++, i++) {
-
+                for (int i = 0; i < n; i++) {
                         r = sd_bus_message_open_container(reply, 'r', "iay");
                         if (r < 0)
                                 return r;
@@ -218,9 +223,9 @@
         }
 
         case MACHINE_CONTAINER: {
-                _cleanup_close_pair_ int pair[2] = { -1, -1 };
+                _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
                 _cleanup_free_ char *us = NULL, *them = NULL;
-                _cleanup_close_ int netns_fd = -1;
+                _cleanup_close_ int netns_fd = -EBADF;
                 const char *p;
                 pid_t child;
 
@@ -350,11 +355,10 @@
 
 int bus_machine_method_get_os_release(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_strv_free_ char **l = NULL;
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         switch (m->class) {
 
@@ -366,8 +370,8 @@
                 break;
 
         case MACHINE_CONTAINER: {
-                _cleanup_close_ int mntns_fd = -1, root_fd = -1, pidns_fd = -1;
-                _cleanup_close_pair_ int pair[2] = { -1, -1 };
+                _cleanup_close_ int mntns_fd = -EBADF, root_fd = -EBADF, pidns_fd = -EBADF;
+                _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
                 _cleanup_fclose_ FILE *f = NULL;
                 pid_t child;
 
@@ -384,7 +388,7 @@
                 if (r < 0)
                         return sd_bus_error_set_errnof(error, r, "Failed to fork(): %m");
                 if (r == 0) {
-                        int fd = -1;
+                        int fd = -EBADF;
 
                         pair[0] = safe_close(pair[0]);
 
@@ -432,18 +436,22 @@
 int bus_machine_method_open_pty(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_free_ char *pty_name = NULL;
-        _cleanup_close_ int master = -1;
-        Machine *m = userdata;
+        _cleanup_close_ int master = -EBADF;
+        Machine *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
+
+        const char *details[] = {
+                "machine", m->name,
+                NULL
+        };
 
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         m->class == MACHINE_HOST ? "org.freedesktop.machine1.host-open-pty" : "org.freedesktop.machine1.open-pty",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->manager->polkit_registry,
@@ -517,20 +525,25 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_free_ char *pty_name = NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *allocated_bus = NULL;
-        _cleanup_close_ int master = -1;
+        _cleanup_close_ int master = -EBADF;
         sd_bus *container_bus = NULL;
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
         const char *p, *getty;
         int r;
 
         assert(message);
-        assert(m);
+
+        const char *details[] = {
+                "machine", m->name,
+                "verb", "login",
+                NULL
+        };
 
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         m->class == MACHINE_HOST ? "org.freedesktop.machine1.host-login" : "org.freedesktop.machine1.login",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->manager->polkit_registry,
@@ -575,14 +588,14 @@
         _cleanup_free_ char *pty_name = NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *allocated_bus = NULL;
         sd_bus *container_bus = NULL;
-        _cleanup_close_ int master = -1, slave = -1;
+        _cleanup_close_ int master = -EBADF, slave = -EBADF;
         _cleanup_strv_free_ char **env = NULL, **args_wire = NULL, **args = NULL;
-        Machine *m = userdata;
+        _cleanup_free_ char *command_line = NULL;
+        Machine *m = ASSERT_PTR(userdata);
         const char *p, *unit, *user, *path, *description, *utmp_id;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "ss", &user, &path);
         if (r < 0)
@@ -630,10 +643,14 @@
         if (!strv_env_is_valid(env))
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid environment assignments");
 
+        command_line = strv_join(args, " ");
+        if (!command_line)
+                return -ENOMEM;
         const char *details[] = {
                 "machine", m->name,
                 "user", user,
                 "program", path,
+                "command_line", command_line,
                 NULL
         };
 
@@ -813,12 +830,11 @@
 int bus_machine_method_bind_mount(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         int read_only, make_file_or_directory;
         const char *dest, *src, *propagate_directory;
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
         uid_t uid;
         int r;
 
         assert(message);
-        assert(m);
 
         if (m->class != MACHINE_CONTAINER)
                 return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Bind mounting is only supported on container machines.");
@@ -835,11 +851,19 @@
         else if (!path_is_absolute(dest) || !path_is_normalized(dest))
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Destination path must be absolute and normalized.");
 
+        const char *details[] = {
+                "machine", m->name,
+                "verb", "bind",
+                "src", src,
+                "dest", dest,
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-machines",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->manager->polkit_registry,
@@ -867,19 +891,18 @@
 }
 
 int bus_machine_method_copy(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        const char *src, *dest, *host_path, *container_path, *host_basename, *container_basename, *container_dirname;
-        _cleanup_close_pair_ int errno_pipe_fd[2] = { -1, -1 };
+        _cleanup_free_ char *host_basename = NULL, *container_basename = NULL;
+        const char *src, *dest, *host_path, *container_path;
+        _cleanup_close_pair_ int errno_pipe_fd[2] = PIPE_EBADF;
         CopyFlags copy_flags = COPY_REFLINK|COPY_MERGE|COPY_HARDLINKS;
-        _cleanup_close_ int hostfd = -1;
-        Machine *m = userdata;
+        _cleanup_close_ int hostfd = -EBADF;
+        Machine *m = ASSERT_PTR(userdata);
         bool copy_from;
         pid_t child;
         uid_t uid_shift;
-        char *t;
         int r;
 
         assert(message);
-        assert(m);
 
         if (m->manager->n_operations >= OPERATIONS_MAX)
                 return sd_bus_error_set(error, SD_BUS_ERROR_LIMITS_EXCEEDED, "Too many ongoing copies.");
@@ -891,6 +914,20 @@
         if (r < 0)
                 return r;
 
+        if (endswith(sd_bus_message_get_member(message), "WithFlags")) {
+                uint64_t raw_flags;
+
+                r = sd_bus_message_read(message, "t", &raw_flags);
+                if (r < 0)
+                        return r;
+
+                if ((raw_flags & ~_MACHINE_COPY_FLAGS_MASK_PUBLIC) != 0)
+                        return -EINVAL;
+
+                if (raw_flags & MACHINE_COPY_REPLACE)
+                        copy_flags |= COPY_REPLACE;
+        }
+
         if (!path_is_absolute(src))
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Source path must be absolute.");
 
@@ -899,11 +936,19 @@
         else if (!path_is_absolute(dest))
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Destination path must be absolute.");
 
+        const char *details[] = {
+                "machine", m->name,
+                "verb", "copy",
+                "src", src,
+                "dest", dest,
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-machines",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->manager->polkit_registry,
@@ -927,11 +972,13 @@
                 container_path = dest;
         }
 
-        host_basename = basename(host_path);
+        r = path_extract_filename(host_path, &host_basename);
+        if (r < 0)
+                return sd_bus_error_set_errnof(error, r, "Failed to extract file name of '%s' path: %m", host_path);
 
-        container_basename = basename(container_path);
-        t = strdupa(container_path);
-        container_dirname = dirname(t);
+        r = path_extract_filename(container_path, &container_basename);
+        if (r < 0)
+                return sd_bus_error_set_errnof(error, r, "Failed to extract file name of '%s' path: %m", container_path);
 
         hostfd = open_parent(host_path, O_CLOEXEC, 0);
         if (hostfd < 0)
@@ -962,9 +1009,9 @@
                         goto child_fail;
                 }
 
-                containerfd = open(container_dirname, O_CLOEXEC|O_RDONLY|O_NOCTTY|O_DIRECTORY);
+                containerfd = open_parent(container_path, O_CLOEXEC, 0);
                 if (containerfd < 0) {
-                        r = log_error_errno(errno, "Failed to open destination directory: %m");
+                        r = log_error_errno(containerfd, "Failed to open destination directory: %m");
                         goto child_fail;
                 }
 
@@ -972,9 +1019,9 @@
                  * 0 or to the actual UID shift depending on the direction we copy. If no UID shift is set we'll copy
                  * the UID/GIDs as they are. */
                 if (copy_from)
-                        r = copy_tree_at(containerfd, container_basename, hostfd, host_basename, uid_shift == 0 ? UID_INVALID : 0, uid_shift == 0 ? GID_INVALID : 0, copy_flags);
+                        r = copy_tree_at(containerfd, container_basename, hostfd, host_basename, uid_shift == 0 ? UID_INVALID : 0, uid_shift == 0 ? GID_INVALID : 0, copy_flags, NULL);
                 else
-                        r = copy_tree_at(hostfd, host_basename, containerfd, container_basename, uid_shift == 0 ? UID_INVALID : uid_shift, uid_shift == 0 ? GID_INVALID : uid_shift, copy_flags);
+                        r = copy_tree_at(hostfd, host_basename, containerfd, container_basename, uid_shift == 0 ? UID_INVALID : uid_shift, uid_shift == 0 ? GID_INVALID : uid_shift, copy_flags, NULL);
 
                 hostfd = safe_close(hostfd);
                 containerfd = safe_close(containerfd);
@@ -1000,24 +1047,29 @@
                 (void) sigkill_wait(child);
                 return r;
         }
-        errno_pipe_fd[0] = -1;
+        errno_pipe_fd[0] = -EBADF;
 
         return 1;
 }
 
 int bus_machine_method_open_root_directory(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        _cleanup_close_ int fd = -1;
-        Machine *m = userdata;
+        _cleanup_close_ int fd = -EBADF;
+        Machine *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
+
+        const char *details[] = {
+                "machine", m->name,
+                "verb", "open_root_directory",
+                NULL
+        };
 
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-machines",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->manager->polkit_registry,
@@ -1037,8 +1089,8 @@
                 break;
 
         case MACHINE_CONTAINER: {
-                _cleanup_close_ int mntns_fd = -1, root_fd = -1;
-                _cleanup_close_pair_ int pair[2] = { -1, -1 };
+                _cleanup_close_ int mntns_fd = -EBADF, root_fd = -EBADF;
+                _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
                 pid_t child;
 
                 r = namespace_open(m->leader, NULL, &mntns_fd, NULL, NULL, &root_fd);
@@ -1053,7 +1105,7 @@
                 if (r < 0)
                         return sd_bus_error_set_errnof(error, r, "Failed to fork(): %m");
                 if (r == 0) {
-                        _cleanup_close_ int dfd = -1;
+                        _cleanup_close_ int dfd = -EBADF;
 
                         pair[0] = safe_close(pair[0]);
 
@@ -1092,12 +1144,11 @@
 }
 
 int bus_machine_method_get_uid_shift(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Machine *m = userdata;
+        Machine *m = ASSERT_PTR(userdata);
         uid_t shift = 0;
         int r;
 
         assert(message);
-        assert(m);
 
         /* You wonder why this is a method and not a property? Well, properties are not supposed to return errors, but
          * we kinda have to for this. */
@@ -1118,7 +1169,7 @@
 }
 
 static int machine_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Machine *machine;
         int r;
 
@@ -1126,7 +1177,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         if (streq(path, "/org/freedesktop/machine1/machine/self")) {
                 _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
@@ -1227,85 +1277,71 @@
                       NULL,
                       bus_machine_method_terminate,
                       SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("Kill",
-                                 "si",
-                                 SD_BUS_PARAM(who)
-                                 SD_BUS_PARAM(signal),
-                                 NULL,,
-                                 bus_machine_method_kill,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetAddresses",
-                                 NULL,,
-                                 "a(iay)",
-                                 SD_BUS_PARAM(addresses),
-                                 bus_machine_method_get_addresses,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetOSRelease",
-                                 NULL,,
-                                 "a{ss}",
-                                 SD_BUS_PARAM(fields),
-                                 bus_machine_method_get_os_release,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetUIDShift",
-                                 NULL,,
-                                 "u",
-                                 SD_BUS_PARAM(shift),
-                                 bus_machine_method_get_uid_shift,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("OpenPTY",
-                                 NULL,,
-                                 "hs",
-                                 SD_BUS_PARAM(pty)
-                                 SD_BUS_PARAM(pty_path),
-                                 bus_machine_method_open_pty,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("OpenLogin",
-                                 NULL,,
-                                 "hs",
-                                 SD_BUS_PARAM(pty)
-                                 SD_BUS_PARAM(pty_path),
-                                 bus_machine_method_open_login,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("OpenShell",
-                                 "ssasas",
-                                 SD_BUS_PARAM(user)
-                                 SD_BUS_PARAM(path)
-                                 SD_BUS_PARAM(args)
-                                 SD_BUS_PARAM(environment),
-                                 "hs",
-                                 SD_BUS_PARAM(pty)
-                                 SD_BUS_PARAM(pty_path),
-                                 bus_machine_method_open_shell,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("BindMount",
-                                 "ssbb",
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination)
-                                 SD_BUS_PARAM(read_only)
-                                 SD_BUS_PARAM(mkdir),
-                                 NULL,,
-                                 bus_machine_method_bind_mount,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CopyFrom",
-                                 "ss",
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination),
-                                 NULL,,
-                                 bus_machine_method_copy,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CopyTo",
-                                 "ss",
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination),
-                                 NULL,,
-                                 bus_machine_method_copy,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("OpenRootDirectory",
-                                 NULL,,
-                                 "h",
-                                 SD_BUS_PARAM(fd),
-                                 bus_machine_method_open_root_directory,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Kill",
+                                SD_BUS_ARGS("s", who, "i", signal),
+                                SD_BUS_NO_RESULT,
+                                bus_machine_method_kill,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetAddresses",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(iay)", addresses),
+                                bus_machine_method_get_addresses,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetOSRelease",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a{ss}", fields),
+                                bus_machine_method_get_os_release,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetUIDShift",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("u", shift),
+                                bus_machine_method_get_uid_shift,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("OpenPTY",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("h", pty, "s", pty_path),
+                                bus_machine_method_open_pty,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("OpenLogin",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("h", pty, "s", pty_path),
+                                bus_machine_method_open_login,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("OpenShell",
+                                SD_BUS_ARGS("s", user, "s", path, "as", args, "as", environment),
+                                SD_BUS_RESULT("h", pty, "s", pty_path),
+                                bus_machine_method_open_shell,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("BindMount",
+                                SD_BUS_ARGS("s", source, "s", destination, "b", read_only, "b", mkdir),
+                                SD_BUS_NO_RESULT,
+                                bus_machine_method_bind_mount,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CopyFrom",
+                                SD_BUS_ARGS("s", source, "s", destination),
+                                SD_BUS_NO_RESULT,
+                                bus_machine_method_copy,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CopyTo",
+                                SD_BUS_ARGS("s", source, "s", destination),
+                                SD_BUS_NO_RESULT,
+                                bus_machine_method_copy,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CopyFromWithFlags",
+                                SD_BUS_ARGS("s", source, "s", destination, "t", flags),
+                                SD_BUS_NO_RESULT,
+                                bus_machine_method_copy,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CopyToWithFlags",
+                                SD_BUS_ARGS("s", source, "s", destination, "t", flags),
+                                SD_BUS_NO_RESULT,
+                                bus_machine_method_copy,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("OpenRootDirectory",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("h", fd),
+                                bus_machine_method_open_root_directory,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         SD_BUS_VTABLE_END
 };
diff --git a/src/machine/machine-dbus.h b/src/machine/machine-dbus.h
index 1c114f4..a013345 100644
--- a/src/machine/machine-dbus.h
+++ b/src/machine/machine-dbus.h
@@ -6,6 +6,11 @@
 #include "bus-util.h"
 #include "machine.h"
 
+typedef enum {
+        MACHINE_COPY_REPLACE = 1 << 0, /* Public API via DBUS, do not change */
+        _MACHINE_COPY_FLAGS_MASK_PUBLIC = MACHINE_COPY_REPLACE,
+} MachineCopyFlags;
+
 extern const BusObjectImplementation machine_object;
 
 char *machine_bus_path(Machine *s);
diff --git a/src/machine/machine.c b/src/machine/machine.c
index c0ed24b..c08a645 100644
--- a/src/machine/machine.c
+++ b/src/machine/machine.c
@@ -8,6 +8,7 @@
 
 #include "alloc-util.h"
 #include "bus-error.h"
+#include "bus-locator.h"
 #include "bus-util.h"
 #include "env-file.h"
 #include "errno-util.h"
@@ -19,7 +20,7 @@
 #include "hashmap.h"
 #include "machine-dbus.h"
 #include "machine.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -31,14 +32,17 @@
 #include "tmpfile-util.h"
 #include "unit-name.h"
 #include "user-util.h"
-#include "util.h"
 
-Machine* machine_new(Manager *manager, MachineClass class, const char *name) {
-        Machine *m;
+DEFINE_TRIVIAL_CLEANUP_FUNC(Machine*, machine_free);
+
+int machine_new(Manager *manager, MachineClass class, const char *name, Machine **ret) {
+        _cleanup_(machine_freep) Machine *m = NULL;
+        int r;
 
         assert(manager);
         assert(class < _MACHINE_CLASS_MAX);
         assert(name);
+        assert(ret);
 
         /* Passing class == _MACHINE_CLASS_INVALID here is fine. It
          * means as much as "we don't know yet", and that we'll figure
@@ -46,31 +50,28 @@
 
         m = new0(Machine, 1);
         if (!m)
-                return NULL;
+                return -ENOMEM;
 
         m->name = strdup(name);
         if (!m->name)
-                goto fail;
+                return -ENOMEM;
 
         if (class != MACHINE_HOST) {
                 m->state_file = path_join("/run/systemd/machines", m->name);
                 if (!m->state_file)
-                        goto fail;
+                        return -ENOMEM;
         }
 
         m->class = class;
 
-        if (hashmap_put(manager->machines, m->name, m) < 0)
-                goto fail;
+        r = hashmap_put(manager->machines, m->name, m);
+        if (r < 0)
+                return r;
 
         m->manager = manager;
 
-        return m;
-
-fail:
-        free(m->state_file);
-        free(m->name);
-        return mfree(m);
+        *ret = TAKE_PTR(m);
+        return 0;
 }
 
 Machine* machine_free(Machine *m) {
@@ -265,12 +266,10 @@
                            "REALTIME",  &realtime,
                            "MONOTONIC", &monotonic,
                            "NETIF",     &netif);
-        if (r < 0) {
-                if (r == -ENOENT)
-                        return 0;
-
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
                 return log_error_errno(r, "Failed to read %s: %m", m->state_file);
-        }
 
         if (id)
                 sd_id128_from_string(id, &m->id);
@@ -349,12 +348,10 @@
         if (!unit)
                 return log_oom();
 
-        r = sd_bus_message_new_method_call(
+        r = bus_message_new_method_call(
                         machine->manager->bus,
                         &m,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        "org.freedesktop.systemd1.Manager",
+                        bus_systemd_mgr,
                         "StartTransientUnit");
         if (r < 0)
                 return r;
@@ -575,14 +572,8 @@
         if (!m->unit)
                 return -ESRCH;
 
-        if (who == KILL_LEADER) {
-                /* If we shall simply kill the leader, do so directly */
-
-                if (kill(m->leader, signo) < 0)
-                        return -errno;
-
-                return 0;
-        }
+        if (who == KILL_LEADER) /* If we shall simply kill the leader, do so directly */
+                return RET_NERRNO(kill(m->leader, signo));
 
         /* Otherwise, make PID 1 do it for us, for the entire cgroup */
         return manager_kill_unit(m->manager, m->unit, signo, NULL);
diff --git a/src/machine/machine.h b/src/machine/machine.h
index 5e0e529..54ebcb3 100644
--- a/src/machine/machine.h
+++ b/src/machine/machine.h
@@ -66,7 +66,7 @@
         LIST_FIELDS(Machine, gc_queue);
 };
 
-Machine* machine_new(Manager *manager, MachineClass class, const char *name);
+int machine_new(Manager *manager, MachineClass class, const char *name, Machine **ret);
 Machine* machine_free(Machine *m);
 bool machine_may_gc(Machine *m, bool drop_not_started);
 void machine_add_to_gc_queue(Machine *m);
diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c
index beab50e..80eebf3 100644
--- a/src/machine/machinectl.c
+++ b/src/machine/machinectl.c
@@ -14,6 +14,7 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-common-errors.h"
 #include "bus-error.h"
 #include "bus-locator.h"
@@ -24,8 +25,8 @@
 #include "bus-wait-for-jobs.h"
 #include "cgroup-show.h"
 #include "cgroup-util.h"
+#include "constants.h"
 #include "copy.h"
-#include "def.h"
 #include "env-util.h"
 #include "fd-util.h"
 #include "format-table.h"
@@ -34,6 +35,7 @@
 #include "locale-util.h"
 #include "log.h"
 #include "logs-show.h"
+#include "machine-dbus.h"
 #include "macro.h"
 #include "main-func.h"
 #include "mkdir.h"
@@ -59,15 +61,13 @@
 #include "verbs.h"
 #include "web-util.h"
 
-#define ALL_ADDRESSES -1
-
 static char **arg_property = NULL;
 static bool arg_all = false;
 static BusPrintPropertyFlags arg_print_flags = 0;
 static bool arg_full = false;
 static PagerFlags arg_pager_flags = 0;
 static bool arg_legend = true;
-static const char *arg_kill_who = NULL;
+static const char *arg_kill_whom = NULL;
 static int arg_signal = SIGTERM;
 static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
 static const char *arg_host = NULL;
@@ -77,12 +77,13 @@
 static bool arg_ask_password = true;
 static unsigned arg_lines = 10;
 static OutputMode arg_output = OUTPUT_SHORT;
+static bool arg_now = false;
 static bool arg_force = false;
 static ImportVerify arg_verify = IMPORT_VERIFY_SIGNATURE;
 static const char* arg_format = NULL;
 static const char *arg_uid = NULL;
 static char **arg_setenv = NULL;
-static int arg_max_addresses = 1;
+static unsigned arg_max_addresses = 1;
 
 STATIC_DESTRUCTOR_REGISTER(arg_property, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_setenv, strv_freep);
@@ -98,7 +99,7 @@
 static int call_get_os_release(sd_bus *bus, const char *method, const char *name, const char *query, ...) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        const char *k, *v, *iter, **query_res = NULL;
+        const char *k, *v, **query_res = NULL;
         size_t count = 0, awaited_args = 0;
         va_list ap;
         int r;
@@ -192,7 +193,7 @@
                 int family;
                 const void *a;
                 size_t sz;
-                char buf_ifi[DECIMAL_STR_MAX(int) + 2], buffer[MAX(INET6_ADDRSTRLEN, INET_ADDRSTRLEN)];
+                char buf_ifi[1 + DECIMAL_STR_MAX(int)] = "";
 
                 r = sd_bus_message_read(reply, "i", &family);
                 if (r < 0)
@@ -204,13 +205,8 @@
 
                 if (family == AF_INET6 && ifi > 0)
                         xsprintf(buf_ifi, "%%%i", ifi);
-                else
-                        strcpy(buf_ifi, "");
 
-                if (!strextend(&addresses,
-                               prefix,
-                               inet_ntop(family, a, buffer, sizeof(buffer)),
-                               buf_ifi))
+                if (!strextend(&addresses, prefix, IN_ADDR_TO_STRING(family, a), buf_ifi))
                         return log_oom();
 
                 r = sd_bus_message_exit_container(reply);
@@ -264,27 +260,25 @@
 }
 
 static int list_machines(int argc, char *argv[], void *userdata) {
-
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = bus_call_method(bus, bus_machine_mgr, "ListMachines", &error, &reply, NULL);
         if (r < 0)
                 return log_error_errno(r, "Could not get machines: %s", bus_error_message(&error, r));
 
-        table = table_new("machine", "class", "service", "os", "version", "addresses");
+        table = table_new("machine", "class", "service", "os", "version",
+                          arg_max_addresses > 0 ? "addresses" : NULL);
         if (!table)
                 return log_oom();
 
-        table_set_empty_string(table, "-");
-        if (!arg_full && arg_max_addresses != ALL_ADDRESSES)
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
+        if (!arg_full && arg_max_addresses > 0 && arg_max_addresses < UINT_MAX)
                 table_set_cell_height_max(table, arg_max_addresses);
 
         if (arg_full)
@@ -316,23 +310,23 @@
                                 &os,
                                 &version_id);
 
-                (void) call_get_addresses(
-                                bus,
-                                name,
-                                0,
-                                "",
-                                "\n",
-                                &addresses);
-
                 r = table_add_many(table,
                                    TABLE_STRING, empty_to_null(name),
                                    TABLE_STRING, empty_to_null(class),
                                    TABLE_STRING, empty_to_null(service),
                                    TABLE_STRING, empty_to_null(os),
-                                   TABLE_STRING, empty_to_null(version_id),
-                                   TABLE_STRING, empty_to_null(addresses));
+                                   TABLE_STRING, empty_to_null(version_id));
                 if (r < 0)
                         return table_log_add_error(r);
+
+                if (arg_max_addresses > 0) {
+                        (void) call_get_addresses(bus, name, 0, "", "\n", &addresses);
+
+                        r = table_add_many(table,
+                                           TABLE_STRING, empty_to_null(addresses));
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
         }
 
         r = sd_bus_message_exit_container(reply);
@@ -347,12 +341,10 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = bus_call_method(bus, bus_machine_mgr, "ListImages", &error, &reply, NULL);
         if (r < 0)
@@ -507,10 +499,7 @@
 }
 
 static void print_machine_status_info(sd_bus *bus, MachineStatusInfo *i) {
-        char since1[FORMAT_TIMESTAMP_RELATIVE_MAX];
-        char since2[FORMAT_TIMESTAMP_MAX];
-        _cleanup_free_ char *addresses = NULL;
-        const char *s1, *s2;
+        _cleanup_free_ char *addresses = NULL, *s1 = NULL, *s2 = NULL;
         int ifi = -1;
 
         assert(bus);
@@ -523,12 +512,12 @@
         else
                 putchar('\n');
 
-        s1 = format_timestamp_relative(since1, sizeof(since1), i->timestamp.realtime);
-        s2 = format_timestamp(since2, sizeof(since2), i->timestamp.realtime);
+        s1 = strdup(strempty(FORMAT_TIMESTAMP_RELATIVE(i->timestamp.realtime)));
+        s2 = strdup(strempty(FORMAT_TIMESTAMP(i->timestamp.realtime)));
 
-        if (s1)
-                printf("\t   Since: %s; %s\n", s2, s1);
-        else if (s2)
+        if (!isempty(s1))
+                printf("\t   Since: %s; %s\n", strna(s2), s1);
+        else if (!isempty(s2))
                 printf("\t   Since: %s\n", s2);
 
         if (i->leader > 0) {
@@ -536,7 +525,7 @@
 
                 printf("\t  Leader: %u", (unsigned) i->leader);
 
-                get_process_comm(i->leader, &t);
+                (void) get_process_comm(i->leader, &t);
                 if (t)
                         printf(" (%s)", t);
 
@@ -560,9 +549,9 @@
                 fputs("\t   Iface:", stdout);
 
                 for (size_t c = 0; c < i->n_netif; c++) {
-                        char name[IF_NAMESIZE+1];
+                        char name[IF_NAMESIZE];
 
-                        if (format_ifname(i->netif[c], name)) {
+                        if (format_ifname(i->netif[c], name) >= 0) {
                                 fputc(' ', stdout);
                                 fputs(name, stdout);
 
@@ -701,14 +690,12 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         bool properties, new_line = false;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r = 0;
 
-        assert(bus);
-
         properties = !strstr(argv[0], "status");
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (properties && argc <= 1) {
 
@@ -828,12 +815,6 @@
 } ImageStatusInfo;
 
 static void print_image_status_info(sd_bus *bus, ImageStatusInfo *i) {
-        char ts_relative[FORMAT_TIMESTAMP_RELATIVE_MAX];
-        char ts_absolute[FORMAT_TIMESTAMP_MAX];
-        char bs[FORMAT_BYTES_MAX];
-        char bs_exclusive[FORMAT_BYTES_MAX];
-        const char *s1, *s2, *s3, *s4;
-
         assert(bus);
         assert(i);
 
@@ -859,33 +840,29 @@
                i->read_only ? "read-only" : "writable",
                i->read_only ? ansi_normal() : "");
 
-        s1 = format_timestamp_relative(ts_relative, sizeof(ts_relative), i->crtime);
-        s2 = format_timestamp(ts_absolute, sizeof(ts_absolute), i->crtime);
-        if (s1 && s2)
-                printf("\t Created: %s; %s\n", s2, s1);
-        else if (s2)
-                printf("\t Created: %s\n", s2);
+        if (timestamp_is_set(i->crtime))
+                printf("\t Created: %s; %s\n",
+                       FORMAT_TIMESTAMP(i->crtime), FORMAT_TIMESTAMP_RELATIVE(i->crtime));
 
-        s1 = format_timestamp_relative(ts_relative, sizeof(ts_relative), i->mtime);
-        s2 = format_timestamp(ts_absolute, sizeof(ts_absolute), i->mtime);
-        if (s1 && s2)
-                printf("\tModified: %s; %s\n", s2, s1);
-        else if (s2)
-                printf("\tModified: %s\n", s2);
+        if (timestamp_is_set(i->mtime))
+                printf("\tModified: %s; %s\n",
+                       FORMAT_TIMESTAMP(i->mtime), FORMAT_TIMESTAMP_RELATIVE(i->mtime));
 
-        s3 = format_bytes(bs, sizeof(bs), i->usage);
-        s4 = i->usage_exclusive != i->usage ? format_bytes(bs_exclusive, sizeof(bs_exclusive), i->usage_exclusive) : NULL;
-        if (s3 && s4)
-                printf("\t   Usage: %s (exclusive: %s)\n", s3, s4);
-        else if (s3)
-                printf("\t   Usage: %s\n", s3);
+        if (i->usage != UINT64_MAX) {
+                if (i->usage_exclusive != i->usage && i->usage_exclusive != UINT64_MAX)
+                        printf("\t   Usage: %s (exclusive: %s)\n",
+                               FORMAT_BYTES(i->usage), FORMAT_BYTES(i->usage_exclusive));
+                else
+                        printf("\t   Usage: %s\n", FORMAT_BYTES(i->usage));
+        }
 
-        s3 = format_bytes(bs, sizeof(bs), i->limit);
-        s4 = i->limit_exclusive != i->limit ? format_bytes(bs_exclusive, sizeof(bs_exclusive), i->limit_exclusive) : NULL;
-        if (s3 && s4)
-                printf("\t   Limit: %s (exclusive: %s)\n", s3, s4);
-        else if (s3)
-                printf("\t   Limit: %s\n", s3);
+        if (i->limit != UINT64_MAX) {
+                if (i->limit_exclusive != i->limit && i->limit_exclusive != UINT64_MAX)
+                        printf("\t   Limit: %s (exclusive: %s)\n",
+                               FORMAT_BYTES(i->limit), FORMAT_BYTES(i->limit_exclusive));
+                else
+                        printf("\t   Limit: %s\n", FORMAT_BYTES(i->limit));
+        }
 }
 
 static int show_image_info(sd_bus *bus, const char *path, bool *new_line) {
@@ -940,18 +917,14 @@
 } PoolStatusInfo;
 
 static void print_pool_status_info(sd_bus *bus, PoolStatusInfo *i) {
-        char bs[FORMAT_BYTES_MAX], *s;
-
         if (i->path)
                 printf("\t    Path: %s\n", i->path);
 
-        s = format_bytes(bs, sizeof(bs), i->usage);
-        if (s)
-                printf("\t   Usage: %s\n", s);
+        if (i->usage != UINT64_MAX)
+                printf("\t   Usage: %s\n", FORMAT_BYTES(i->usage));
 
-        s = format_bytes(bs, sizeof(bs), i->limit);
-        if (s)
-                printf("\t   Limit: %s\n", s);
+        if (i->limit != UINT64_MAX)
+                printf("\t   Limit: %s\n", FORMAT_BYTES(i->limit));
 }
 
 static int show_pool_info(sd_bus *bus) {
@@ -1014,14 +987,12 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         bool properties, new_line = false;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r = 0;
 
-        assert(bus);
-
         properties = !strstr(argv[0], "status");
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (argc <= 1) {
 
@@ -1058,15 +1029,13 @@
 
 static int kill_machine(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
-        if (!arg_kill_who)
-                arg_kill_who = "all";
+        if (!arg_kill_whom)
+                arg_kill_whom = "all";
 
         for (int i = 1; i < argc; i++) {
                 r = bus_call_method(
@@ -1075,7 +1044,7 @@
                                 "KillMachine",
                                 &error,
                                 NULL,
-                                "ssi", argv[i], arg_kill_who, arg_signal);
+                                "ssi", argv[i], arg_kill_whom, arg_signal);
                 if (r < 0)
                         return log_error_errno(r, "Could not kill machine: %s", bus_error_message(&error, r));
         }
@@ -1084,14 +1053,14 @@
 }
 
 static int reboot_machine(int argc, char *argv[], void *userdata) {
-        arg_kill_who = "leader";
+        arg_kill_whom = "leader";
         arg_signal = SIGINT; /* sysvinit + systemd */
 
         return kill_machine(argc, argv, userdata);
 }
 
 static int poweroff_machine(int argc, char *argv[], void *userdata) {
-        arg_kill_who = "leader";
+        arg_kill_whom = "leader";
         arg_signal = SIGRTMIN+4; /* only systemd */
 
         return kill_machine(argc, argv, userdata);
@@ -1099,11 +1068,9 @@
 
 static int terminate_machine(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         for (int i = 1; i < argc; i++) {
@@ -1115,17 +1082,22 @@
         return 0;
 }
 
+static const char *select_copy_method(bool copy_from, bool force) {
+        if (force)
+                return copy_from ? "CopyFromMachineWithFlags" : "CopyToMachineWithFlags";
+        else
+                return copy_from ? "CopyFromMachine" : "CopyToMachine";
+}
+
 static int copy_files(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *abs_host_path = NULL;
         char *dest, *host_path, *container_path;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         bool copy_from;
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         copy_from = streq(argv[0], "copy-from");
@@ -1145,7 +1117,7 @@
                         bus,
                         &m,
                         bus_machine_mgr,
-                        copy_from ? "CopyFromMachine" : "CopyToMachine");
+                        select_copy_method(copy_from, arg_force));
         if (r < 0)
                 return bus_log_create_error(r);
 
@@ -1158,6 +1130,12 @@
         if (r < 0)
                 return bus_log_create_error(r);
 
+        if (arg_force) {
+                r = sd_bus_message_append(m, "t", MACHINE_COPY_REPLACE);
+                if (r < 0)
+                        return bus_log_create_error(r);
+        }
+
         /* This is a slow operation, hence turn off any method call timeouts */
         r = sd_bus_call(bus, m, USEC_INFINITY, &error, NULL);
         if (r < 0)
@@ -1168,11 +1146,9 @@
 
 static int bind_mount(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         r = bus_call_method(
@@ -1311,11 +1287,9 @@
         _cleanup_(sd_bus_slot_unrefp) sd_bus_slot *slot = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         int master = -1, r;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         const char *match, *machine;
 
-        assert(bus);
-
         if (!strv_isempty(arg_setenv) || arg_uid)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "--setenv= and --uid= are not supported for 'login'. Use 'shell' instead.");
@@ -1365,12 +1339,10 @@
         _cleanup_(sd_bus_slot_unrefp) sd_bus_slot *slot = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         int master = -1, r;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         const char *match, *machine, *path;
         _cleanup_free_ char *uid = NULL;
 
-        assert(bus);
-
         if (!IN_SET(arg_transport, BUS_TRANSPORT_LOCAL, BUS_TRANSPORT_MACHINE))
                 return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                        "Shell only supported on local machines.");
@@ -1441,11 +1413,9 @@
 }
 
 static int remove_image(int argc, char *argv[], void *userdata) {
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         for (int i = 1; i < argc; i++) {
@@ -1471,11 +1441,9 @@
 
 static int rename_image(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         r = bus_call_method(
@@ -1494,11 +1462,9 @@
 static int clone_image(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         r = bus_message_new_method_call(bus, &m, bus_machine_mgr, "CloneImage");
@@ -1519,11 +1485,9 @@
 
 static int read_only_image(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int b = true, r;
 
-        assert(bus);
-
         if (argc > 2) {
                 b = parse_boolean(argv[2]);
                 if (b < 0)
@@ -1579,11 +1543,9 @@
 static int start_machine(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(bus_wait_for_jobs_freep) BusWaitForJobs *w = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
         ask_password_agent_open_if_enabled(arg_transport, arg_ask_password);
 
@@ -1608,11 +1570,9 @@
                                                "Machine image '%s' does not exist.",
                                                argv[i]);
 
-                r = sd_bus_call_method(
+                r = bus_call_method(
                                 bus,
-                                "org.freedesktop.systemd1",
-                                "/org/freedesktop/systemd1",
-                                "org.freedesktop.systemd1.Manager",
+                                bus_systemd_mgr,
                                 "StartUnit",
                                 &error,
                                 &reply,
@@ -1639,25 +1599,17 @@
 static int enable_machine(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
-        const char *method = NULL;
-        sd_bus *bus = userdata;
+        const char *method;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         method = streq(argv[0], "enable") ? "EnableUnitFiles" : "DisableUnitFiles";
 
-        r = sd_bus_message_new_method_call(
-                        bus,
-                        &m,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        "org.freedesktop.systemd1.Manager",
-                        method);
+        r = bus_message_new_method_call(bus, &m, bus_systemd_mgr, method);
         if (r < 0)
                 return bus_log_create_error(r);
 
@@ -1665,6 +1617,12 @@
         if (r < 0)
                 return bus_log_create_error(r);
 
+        if (streq(argv[0], "enable")) {
+                r = sd_bus_message_append(m, "s", "machines.target");
+                if (r < 0)
+                        return bus_log_create_error(r);
+        }
+
         for (int i = 1; i < argc; i++) {
                 _cleanup_free_ char *unit = NULL;
 
@@ -1710,24 +1668,35 @@
         if (r < 0)
                 goto finish;
 
-        r = sd_bus_call_method(
-                        bus,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        "org.freedesktop.systemd1.Manager",
-                        "Reload",
-                        &error,
-                        NULL,
-                        NULL);
+        r = bus_call_method(bus, bus_systemd_mgr, "Reload", &error, NULL, NULL);
         if (r < 0) {
                 log_error("Failed to reload daemon: %s", bus_error_message(&error, r));
                 goto finish;
         }
 
-        r = 0;
+        if (arg_now) {
+                _cleanup_strv_free_ char **new_args = NULL;
+
+                new_args = strv_new(streq(argv[0], "enable") ? "start" : "poweroff");
+                if (!new_args) {
+                        r = log_oom();
+                        goto finish;
+                }
+
+                r = strv_extend_strv(&new_args, argv + 1, /* filter_duplicates = */ false);
+                if (r < 0) {
+                        log_oom();
+                        goto finish;
+                }
+
+                if (streq(argv[0], "enable"))
+                        r = start_machine(strv_length(new_args), new_args, userdata);
+                else
+                        r = poweroff_machine(strv_length(new_args), new_args, userdata);
+        }
 
 finish:
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
         return r;
 }
@@ -1857,12 +1826,10 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *ll = NULL, *fn = NULL;
         const char *local = NULL, *path = NULL;
-        _cleanup_close_ int fd = -1;
-        sd_bus *bus = userdata;
+        _cleanup_close_ int fd = -EBADF;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2)
                 path = empty_or_dash_to_null(argv[1]);
 
@@ -1920,12 +1887,10 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *ll = NULL, *fn = NULL;
         const char *local = NULL, *path = NULL;
-        _cleanup_close_ int fd = -1;
-        sd_bus *bus = userdata;
+        _cleanup_close_ int fd = -EBADF;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2)
                 path = empty_or_dash_to_null(argv[1]);
 
@@ -1983,12 +1948,10 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         const char *local = NULL, *path = NULL;
         _cleanup_free_ char *fn = NULL;
-        _cleanup_close_ int fd = -1;
-        sd_bus *bus = userdata;
+        _cleanup_close_ int fd = -EBADF;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2)
                 path = empty_or_dash_to_null(argv[1]);
 
@@ -2050,13 +2013,11 @@
 
 static int export_tar(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *local = NULL, *path = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         local = argv[1];
         if (!hostname_is_valid(local, 0))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -2092,13 +2053,11 @@
 
 static int export_raw(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *local = NULL, *path = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         local = argv[1];
         if (!hostname_is_valid(local, 0))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -2136,13 +2095,11 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *l = NULL, *ll = NULL;
         const char *local, *remote;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         remote = argv[1];
-        if (!http_url_is_valid(remote))
+        if (!http_url_is_valid(remote) && !file_url_is_valid(remote))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "URL '%s' is not valid.", remote);
 
@@ -2192,13 +2149,11 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_free_ char *l = NULL, *ll = NULL;
         const char *local, *remote;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         remote = argv[1];
-        if (!http_url_is_valid(remote))
+        if (!http_url_is_valid(remote) && !file_url_is_valid(remote))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "URL '%s' is not valid.", remote);
 
@@ -2268,7 +2223,7 @@
         double progress;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = bus_call_method(bus, bus_import_mgr, "ListTransfers", &error, &reply, NULL);
         if (r < 0)
@@ -2353,11 +2308,9 @@
 
 static int cancel_transfer(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
         for (int i = 1; i < argc; i++) {
@@ -2409,7 +2362,6 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         uint64_t usage, total = 0;
-        char fb[FORMAT_BYTES_MAX];
         sd_bus *bus = userdata;
         const char *name;
         unsigned c = 0;
@@ -2440,7 +2392,7 @@
                         total = UINT64_MAX;
                 } else {
                         log_info("Removed image '%s'. Freed exclusive disk space: %s",
-                                 name, format_bytes(fb, sizeof(fb), usage));
+                                 name, FORMAT_BYTES(usage));
                         if (total != UINT64_MAX)
                                 total += usage;
                 }
@@ -2455,7 +2407,7 @@
                 log_info("Removed %u images in total.", c);
         else
                 log_info("Removed %u images in total. Total freed exclusive disk space: %s.",
-                         c, format_bytes(fb, sizeof(fb), total));
+                         c, FORMAT_BYTES(total));
 
         return 0;
 }
@@ -2464,7 +2416,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("machinectl", "1", &link);
         if (r < 0)
@@ -2525,22 +2477,24 @@
                "  -a --all                    Show all properties, including empty ones\n"
                "     --value                  When showing properties, only print the value\n"
                "  -l --full                   Do not ellipsize output\n"
-               "     --kill-who=WHO           Who to send signal to\n"
+               "     --kill-whom=WHOM         Whom to send signal to\n"
                "  -s --signal=SIGNAL          Which signal to send\n"
                "     --uid=USER               Specify user ID to invoke shell as\n"
-               "  -E --setenv=VAR=VALUE       Add an environment variable for shell\n"
+               "  -E --setenv=VAR[=VALUE]     Add an environment variable for shell\n"
                "     --read-only              Create read-only bind mount\n"
                "     --mkdir                  Create directory before bind mounting, if missing\n"
                "  -n --lines=INTEGER          Number of journal entries to show\n"
                "     --max-addresses=INTEGER  Number of internet addresses to show at most\n"
                "  -o --output=STRING          Change journal output mode (short, short-precise,\n"
                "                               short-iso, short-iso-precise, short-full,\n"
-               "                               short-monotonic, short-unix, verbose, export,\n"
+               "                               short-monotonic, short-unix, short-delta,\n"
                "                               json, json-pretty, json-sse, json-seq, cat,\n"
-               "                               with-unit)\n"
+               "                               verbose, export, with-unit)\n"
                "     --verify=MODE            Verification mode for downloaded images (no,\n"
-               "                              checksum, signature)\n"
+               "                               checksum, signature)\n"
                "     --force                  Download image even if already exists\n"
+               "     --now                    Start or power off container after enabling or\n"
+               "                              disabling it\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -2559,11 +2513,12 @@
                 ARG_NO_PAGER,
                 ARG_NO_LEGEND,
                 ARG_VALUE,
-                ARG_KILL_WHO,
+                ARG_KILL_WHOM,
                 ARG_READ_ONLY,
                 ARG_MKDIR,
                 ARG_NO_ASK_PASSWORD,
                 ARG_VERIFY,
+                ARG_NOW,
                 ARG_FORCE,
                 ARG_FORMAT,
                 ARG_UID,
@@ -2579,7 +2534,7 @@
                 { "full",            no_argument,       NULL, 'l'                 },
                 { "no-pager",        no_argument,       NULL, ARG_NO_PAGER        },
                 { "no-legend",       no_argument,       NULL, ARG_NO_LEGEND       },
-                { "kill-who",        required_argument, NULL, ARG_KILL_WHO        },
+                { "kill-whom",       required_argument, NULL, ARG_KILL_WHOM       },
                 { "signal",          required_argument, NULL, 's'                 },
                 { "host",            required_argument, NULL, 'H'                 },
                 { "machine",         required_argument, NULL, 'M'                 },
@@ -2590,6 +2545,7 @@
                 { "output",          required_argument, NULL, 'o'                 },
                 { "no-ask-password", no_argument,       NULL, ARG_NO_ASK_PASSWORD },
                 { "verify",          required_argument, NULL, ARG_VERIFY          },
+                { "now",             no_argument,       NULL, ARG_NOW             },
                 { "force",           no_argument,       NULL, ARG_FORCE           },
                 { "format",          required_argument, NULL, ARG_FORMAT          },
                 { "uid",             required_argument, NULL, ARG_UID             },
@@ -2718,8 +2674,8 @@
                         arg_legend = false;
                         break;
 
-                case ARG_KILL_WHO:
-                        arg_kill_who = optarg;
+                case ARG_KILL_WHOM:
+                        arg_kill_whom = optarg;
                         break;
 
                 case 's':
@@ -2766,6 +2722,10 @@
                         arg_verify = r;
                         break;
 
+                case ARG_NOW:
+                        arg_now = true;
+                        break;
+
                 case ARG_FORCE:
                         arg_force = true;
                         break;
@@ -2783,31 +2743,24 @@
                         break;
 
                 case 'E':
-                        if (!env_assignment_is_valid(optarg))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Environment assignment invalid: %s", optarg);
-
-                        r = strv_extend(&arg_setenv, optarg);
+                        r = strv_env_replace_strdup_passthrough(&arg_setenv, optarg);
                         if (r < 0)
-                                return log_oom();
+                                return log_error_errno(r, "Cannot assign environment variable %s: %m", optarg);
                         break;
 
                 case ARG_MAX_ADDRESSES:
                         if (streq(optarg, "all"))
-                                arg_max_addresses = ALL_ADDRESSES;
-                        else if (safe_atoi(optarg, &arg_max_addresses) < 0)
+                                arg_max_addresses = UINT_MAX;
+                        else if (safe_atou(optarg, &arg_max_addresses) < 0)
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                        "Invalid number of addresses: %s", optarg);
-                        else if (arg_max_addresses <= 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Number of IPs cannot be negative or zero: %s", optarg);
                         break;
 
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
         }
 
@@ -2891,7 +2844,7 @@
 
         r = bus_connect_transport(arg_transport, arg_host, false, &bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         (void) sd_bus_set_allow_interactive_authorization(bus, arg_ask_password);
 
diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c
index 342b18a..0c157a9 100644
--- a/src/machine/machined-dbus.c
+++ b/src/machine/machined-dbus.c
@@ -44,7 +44,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         uint64_t usage = UINT64_MAX;
 
         assert(bus);
@@ -70,7 +70,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         uint64_t size = UINT64_MAX;
 
         assert(bus);
@@ -89,13 +89,12 @@
 
 static int method_get_machine(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Machine *machine;
         const char *name;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -114,12 +113,11 @@
 
 static int method_get_image(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        _unused_ Manager *m = userdata;
+        _unused_ Manager *m = ASSERT_PTR(userdata);
         const char *name;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -140,13 +138,12 @@
 
 static int method_get_machine_by_pid(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Machine *machine = NULL;
         pid_t pid;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(pid_t) == sizeof(uint32_t));
 
@@ -184,12 +181,11 @@
 
 static int method_list_machines(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Machine *machine;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_new_method_return(message, &reply);
         if (r < 0)
@@ -346,12 +342,11 @@
 }
 
 static int method_create_machine_internal(sd_bus_message *message, bool read_network, void *userdata, sd_bus_error *error) {
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         Machine *m = NULL;
         int r;
 
         assert(message);
-        assert(manager);
 
         r = method_create_or_register_machine(manager, message, read_network, &m, error);
         if (r < 0)
@@ -382,13 +377,12 @@
 }
 
 static int method_register_machine_internal(sd_bus_message *message, bool read_network, void *userdata, sd_bus_error *error) {
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         _cleanup_free_ char *p = NULL;
         Machine *m = NULL;
         int r;
 
         assert(message);
-        assert(manager);
 
         r = method_create_or_register_machine(manager, message, read_network, &m, error);
         if (r < 0)
@@ -470,12 +464,11 @@
 static int method_list_images(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_hashmap_free_ Hashmap *images = NULL;
-        _unused_ Manager *m = userdata;
+        _unused_ Manager *m = ASSERT_PTR(userdata);
         Image *image;
         int r;
 
         assert(message);
-        assert(m);
 
         images = hashmap_new(&image_hash_ops);
         if (!images)
@@ -690,8 +683,8 @@
                 REMOVE_HIDDEN,
         } mode;
 
-        _cleanup_close_pair_ int errno_pipe_fd[2] = { -1, -1 };
-        _cleanup_close_ int result_fd = -1;
+        _cleanup_close_pair_ int errno_pipe_fd[2] = PIPE_EBADF;
+        _cleanup_close_ int result_fd = -EBADF;
         Manager *m = userdata;
         Operation *operation;
         const char *mm;
@@ -714,11 +707,17 @@
         else
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unknown mode '%s'.", mm);
 
+        const char *details[] = {
+                "verb", "clean_pool",
+                "mode", mm,
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-machines",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->polkit_registry,
@@ -825,8 +824,8 @@
         operation->extra_fd = result_fd;
         operation->done = clean_pool_done;
 
-        result_fd = -1;
-        errno_pipe_fd[0] = -1;
+        result_fd = -EBADF;
+        errno_pipe_fd[0] = -EBADF;
 
         return 1;
 }
@@ -844,11 +843,16 @@
         if (!FILE_SIZE_VALID_OR_INFINITY(limit))
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "New limit out of range");
 
+        const char *details[] = {
+                "verb", "set_pool_limit",
+                NULL
+        };
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
                         "org.freedesktop.machine1.manage-machines",
-                        NULL,
+                        details,
                         false,
                         UID_INVALID,
                         &m->polkit_registry,
@@ -859,7 +863,7 @@
                 return 1; /* Will call us back */
 
         /* Set up the machine directory if necessary */
-        r = setup_machine_directory(error);
+        r = setup_machine_directory(error, /* use_btrfs_subvol= */ true, /* use_btrfs_quota= */ true);
         if (r < 0)
                 return r;
 
@@ -1003,310 +1007,204 @@
         SD_BUS_PROPERTY("PoolUsage", "t", property_get_pool_usage, 0, 0),
         SD_BUS_PROPERTY("PoolLimit", "t", property_get_pool_limit, 0, 0),
 
-        SD_BUS_METHOD_WITH_NAMES("GetMachine",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "o",
-                                 SD_BUS_PARAM(machine),
-                                 method_get_machine,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetImage",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "o",
-                                 SD_BUS_PARAM(image),
-                                 method_get_image,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetMachineByPID",
-                                 "u",
-                                 SD_BUS_PARAM(pid),
-                                 "o",
-                                 SD_BUS_PARAM(machine),
-                                 method_get_machine_by_pid,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListMachines",
-                                 NULL,,
-                                 "a(ssso)",
-                                 SD_BUS_PARAM(machines),
-                                 method_list_machines,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListImages",
-                                 NULL,,
-                                 "a(ssbttto)",
-                                 SD_BUS_PARAM(images),
-                                 method_list_images,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CreateMachine",
-                                 "sayssusa(sv)",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(id)
-                                 SD_BUS_PARAM(service)
-                                 SD_BUS_PARAM(class)
-                                 SD_BUS_PARAM(leader)
-                                 SD_BUS_PARAM(root_directory)
-                                 SD_BUS_PARAM(scope_properties),
-                                 "o",
-                                 SD_BUS_PARAM(path),
-                                 method_create_machine, 0),
-        SD_BUS_METHOD_WITH_NAMES("CreateMachineWithNetwork",
-                                 "sayssusaia(sv)",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(id)
-                                 SD_BUS_PARAM(service)
-                                 SD_BUS_PARAM(class)
-                                 SD_BUS_PARAM(leader)
-                                 SD_BUS_PARAM(root_directory)
-                                 SD_BUS_PARAM(ifindices)
-                                 SD_BUS_PARAM(scope_properties),
-                                 "o",
-                                 SD_BUS_PARAM(path),
-                                 method_create_machine_with_network, 0),
-        SD_BUS_METHOD_WITH_NAMES("RegisterMachine",
-                                 "sayssus",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(id)
-                                 SD_BUS_PARAM(service)
-                                 SD_BUS_PARAM(class)
-                                 SD_BUS_PARAM(leader)
-                                 SD_BUS_PARAM(root_directory),
-                                 "o",
-                                 SD_BUS_PARAM(path),
-                                 method_register_machine, 0),
-        SD_BUS_METHOD_WITH_NAMES("RegisterMachineWithNetwork",
-                                 "sayssusai",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(id)
-                                 SD_BUS_PARAM(service)
-                                 SD_BUS_PARAM(class)
-                                 SD_BUS_PARAM(leader)
-                                 SD_BUS_PARAM(root_directory)
-                                 SD_BUS_PARAM(ifindices),
-                                 "o",
-                                 SD_BUS_PARAM(path),
-                                 method_register_machine_with_network, 0),
-        SD_BUS_METHOD_WITH_NAMES("UnregisterMachine",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_unregister_machine,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("TerminateMachine",
-                                 "s",
-                                 SD_BUS_PARAM(id),
-                                 NULL,,
-                                 method_terminate_machine,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("KillMachine",
-                                 "ssi",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(who)
-                                 SD_BUS_PARAM(signal),
-                                 NULL,,
-                                 method_kill_machine,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetMachineAddresses",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "a(iay)",
-                                 SD_BUS_PARAM(addresses),
-                                 method_get_machine_addresses,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetMachineOSRelease",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "a{ss}",
-                                 SD_BUS_PARAM(fields),
-                                 method_get_machine_os_release,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("OpenMachinePTY",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "hs",
-                                 SD_BUS_PARAM(pty)
-                                 SD_BUS_PARAM(pty_path),
-                                 method_open_machine_pty,
-                                 0),
-        SD_BUS_METHOD_WITH_NAMES("OpenMachineLogin",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "hs",
-                                 SD_BUS_PARAM(pty)
-                                 SD_BUS_PARAM(pty_path),
-                                 method_open_machine_login,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("OpenMachineShell",
-                                 "sssasas",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(user)
-                                 SD_BUS_PARAM(path)
-                                 SD_BUS_PARAM(args)
-                                 SD_BUS_PARAM(environment),
-                                 "hs",
-                                 SD_BUS_PARAM(pty)
-                                 SD_BUS_PARAM(pty_path),
-                                 method_open_machine_shell,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("BindMountMachine",
-                                 "sssbb",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination)
-                                 SD_BUS_PARAM(read_only)
-                                 SD_BUS_PARAM(mkdir),
-                                 NULL,,
-                                 method_bind_mount_machine,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CopyFromMachine",
-                                 "sss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination),
-                                 NULL,,
-                                 method_copy_machine,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CopyToMachine",
-                                 "sss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(source)
-                                 SD_BUS_PARAM(destination),
-                                 NULL,,
-                                 method_copy_machine,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("OpenMachineRootDirectory",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "h",
-                                 SD_BUS_PARAM(fd),
-                                 method_open_machine_root_directory,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetMachineUIDShift",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "u",
-                                 SD_BUS_PARAM(shift),
-                                 method_get_machine_uid_shift,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("RemoveImage",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 NULL,,
-                                 method_remove_image,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("RenameImage",
-                                 "ss",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(new_name),
-                                 NULL,,
-                                 method_rename_image,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CloneImage",
-                                 "ssb",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(new_name)
-                                 SD_BUS_PARAM(read_only),
-                                 NULL,,
-                                 method_clone_image,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("MarkImageReadOnly",
-                                 "sb",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(read_only),
-                                 NULL,,
-                                 method_mark_image_read_only,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetImageHostname",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "s",
-                                 SD_BUS_PARAM(hostname),
-                                 method_get_image_hostname,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetImageMachineID",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "ay",
-                                 SD_BUS_PARAM(id),
-                                 method_get_image_machine_id,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetImageMachineInfo",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "a{ss}",
-                                 SD_BUS_PARAM(machine_info),
-                                 method_get_image_machine_info,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("GetImageOSRelease",
-                                 "s",
-                                 SD_BUS_PARAM(name),
-                                 "a{ss}",
-                                 SD_BUS_PARAM(os_release),
-                                 method_get_image_os_release,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetPoolLimit",
-                                 "t",
-                                 SD_BUS_PARAM(size),
-                                 NULL,,
-                                 method_set_pool_limit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetImageLimit",
-                                 "st",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(size),
-                                 NULL,,
-                                 method_set_image_limit,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("CleanPool",
-                                 "s",
-                                 SD_BUS_PARAM(mode),
-                                 "a(st)",
-                                 SD_BUS_PARAM(images),
-                                 method_clean_pool,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("MapFromMachineUser",
-                                 "su",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(uid_inner),
-                                 "u",
-                                 SD_BUS_PARAM(uid_outer),
-                                 method_map_from_machine_user,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("MapToMachineUser",
-                                 "u",
-                                 SD_BUS_PARAM(uid_outer),
-                                 "sou",
-                                 SD_BUS_PARAM(machine_name)
-                                 SD_BUS_PARAM(machine_path)
-                                 SD_BUS_PARAM(uid_inner),
-                                 method_map_to_machine_user,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("MapFromMachineGroup",
-                                 "su",
-                                 SD_BUS_PARAM(name)
-                                 SD_BUS_PARAM(gid_inner),
-                                 "u",
-                                 SD_BUS_PARAM(gid_outer),
-                                 method_map_from_machine_group,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("MapToMachineGroup",
-                                 "u",
-                                 SD_BUS_PARAM(gid_outer),
-                                 "sou",
-                                 SD_BUS_PARAM(machine_name)
-                                 SD_BUS_PARAM(machine_path)
-                                 SD_BUS_PARAM(gid_inner),
-                                 method_map_to_machine_group,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetMachine",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("o", machine),
+                                method_get_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetImage",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("o", image),
+                                method_get_image,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetMachineByPID",
+                                SD_BUS_ARGS("u", pid),
+                                SD_BUS_RESULT("o", machine),
+                                method_get_machine_by_pid,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListMachines",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(ssso)", machines),
+                                method_list_machines,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListImages",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(ssbttto)", images),
+                                method_list_images,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CreateMachine",
+                                SD_BUS_ARGS("s", name, "ay", id, "s", service, "s", class, "u", leader, "s", root_directory, "a(sv)", scope_properties),
+                                SD_BUS_RESULT("o", path),
+                                method_create_machine, 0),
+        SD_BUS_METHOD_WITH_ARGS("CreateMachineWithNetwork",
+                                SD_BUS_ARGS("s", name, "ay", id, "s", service, "s", class, "u", leader, "s", root_directory, "ai", ifindices, "a(sv)", scope_properties),
+                                SD_BUS_RESULT("o", path),
+                                method_create_machine_with_network, 0),
+        SD_BUS_METHOD_WITH_ARGS("RegisterMachine",
+                                SD_BUS_ARGS("s", name, "ay", id, "s", service, "s", class, "u", leader, "s", root_directory),
+                                SD_BUS_RESULT("o", path),
+                                method_register_machine, 0),
+        SD_BUS_METHOD_WITH_ARGS("RegisterMachineWithNetwork",
+                                SD_BUS_ARGS("s", name, "ay", id, "s", service, "s", class, "u", leader, "s", root_directory, "ai", ifindices),
+                                SD_BUS_RESULT("o", path),
+                                method_register_machine_with_network, 0),
+        SD_BUS_METHOD_WITH_ARGS("UnregisterMachine",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_unregister_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("TerminateMachine",
+                                SD_BUS_ARGS("s", id),
+                                SD_BUS_NO_RESULT,
+                                method_terminate_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("KillMachine",
+                                SD_BUS_ARGS("s", name, "s", who, "i", signal),
+                                SD_BUS_NO_RESULT,
+                                method_kill_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetMachineAddresses",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("a(iay)", addresses),
+                                method_get_machine_addresses,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetMachineOSRelease",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("a{ss}", fields),
+                                method_get_machine_os_release,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("OpenMachinePTY",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("h", pty, "s", pty_path),
+                                method_open_machine_pty,
+                                0),
+        SD_BUS_METHOD_WITH_ARGS("OpenMachineLogin",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("h", pty, "s", pty_path),
+                                method_open_machine_login,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("OpenMachineShell",
+                                SD_BUS_ARGS("s", name, "s", user, "s", path, "as", args, "as", environment),
+                                SD_BUS_RESULT("h", pty, "s", pty_path),
+                                method_open_machine_shell,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("BindMountMachine",
+                                SD_BUS_ARGS("s", name, "s", source, "s", destination, "b", read_only, "b", mkdir),
+                                SD_BUS_NO_RESULT,
+                                method_bind_mount_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CopyFromMachine",
+                                SD_BUS_ARGS("s", name, "s", source, "s", destination),
+                                SD_BUS_NO_RESULT,
+                                method_copy_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CopyToMachine",
+                                SD_BUS_ARGS("s", name, "s", source, "s", destination),
+                                SD_BUS_NO_RESULT,
+                                method_copy_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CopyFromMachineWithFlags",
+                                SD_BUS_ARGS("s", name, "s", source, "s", destination, "t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_copy_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CopyToMachineWithFlags",
+                                SD_BUS_ARGS("s", name, "s", source, "s", destination, "t", flags),
+                                SD_BUS_NO_RESULT,
+                                method_copy_machine,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("OpenMachineRootDirectory",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("h", fd),
+                                method_open_machine_root_directory,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetMachineUIDShift",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("u", shift),
+                                method_get_machine_uid_shift,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RemoveImage",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_NO_RESULT,
+                                method_remove_image,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RenameImage",
+                                SD_BUS_ARGS("s", name, "s", new_name),
+                                SD_BUS_NO_RESULT,
+                                method_rename_image,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CloneImage",
+                                SD_BUS_ARGS("s", name, "s", new_name, "b", read_only),
+                                SD_BUS_NO_RESULT,
+                                method_clone_image,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("MarkImageReadOnly",
+                                SD_BUS_ARGS("s", name, "b", read_only),
+                                SD_BUS_NO_RESULT,
+                                method_mark_image_read_only,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetImageHostname",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("s", hostname),
+                                method_get_image_hostname,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetImageMachineID",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("ay", id),
+                                method_get_image_machine_id,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetImageMachineInfo",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("a{ss}", machine_info),
+                                method_get_image_machine_info,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetImageOSRelease",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("a{ss}", os_release),
+                                method_get_image_os_release,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetPoolLimit",
+                                SD_BUS_ARGS("t", size),
+                                SD_BUS_NO_RESULT,
+                                method_set_pool_limit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetImageLimit",
+                                SD_BUS_ARGS("s", name, "t", size),
+                                SD_BUS_NO_RESULT,
+                                method_set_image_limit,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("CleanPool",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_RESULT("a(st)",images),
+                                method_clean_pool,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("MapFromMachineUser",
+                                SD_BUS_ARGS("s", name, "u", uid_inner),
+                                SD_BUS_RESULT("u", uid_outer),
+                                method_map_from_machine_user,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("MapToMachineUser",
+                                SD_BUS_ARGS("u", uid_outer),
+                                SD_BUS_RESULT("s", machine_name, "o", machine_path, "u", uid_inner),
+                                method_map_to_machine_user,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("MapFromMachineGroup",
+                                SD_BUS_ARGS("s", name, "u", gid_inner),
+                                SD_BUS_RESULT("u", gid_outer),
+                                method_map_from_machine_group,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("MapToMachineGroup",
+                                SD_BUS_ARGS("u", gid_outer),
+                                SD_BUS_RESULT("s", machine_name, "o", machine_path, "u", gid_inner),
+                                method_map_to_machine_group,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
-        SD_BUS_SIGNAL_WITH_NAMES("MachineNew",
-                                 "so",
-                                 SD_BUS_PARAM(machine)
-                                 SD_BUS_PARAM(path),
-                                 0),
-        SD_BUS_SIGNAL_WITH_NAMES("MachineRemoved",
-                                 "so",
-                                 SD_BUS_PARAM(machine)
-                                 SD_BUS_PARAM(path),
-                                 0),
+        SD_BUS_SIGNAL_WITH_ARGS("MachineNew",
+                                SD_BUS_ARGS("s", machine, "o", path),
+                                0),
+        SD_BUS_SIGNAL_WITH_ARGS("MachineRemoved",
+                                SD_BUS_ARGS("s", machine, "o", path),
+                                0),
 
         SD_BUS_VTABLE_END
 };
@@ -1321,13 +1219,12 @@
 
 int match_job_removed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *path, *result, *unit;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Machine *machine;
         uint32_t id;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "uoss", &id, &path, &unit, &result);
         if (r < 0) {
@@ -1364,12 +1261,11 @@
 int match_properties_changed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *unit = NULL;
         const char *path;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Machine *machine;
         int r;
 
         assert(message);
-        assert(m);
 
         path = sd_bus_message_get_path(message);
         if (!path)
@@ -1393,12 +1289,11 @@
 
 int match_unit_removed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         const char *path, *unit;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Machine *machine;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "so", &unit, &path);
         if (r < 0) {
@@ -1415,12 +1310,11 @@
 }
 
 int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Machine *machine;
         int b, r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "b", &b);
         if (r < 0) {
@@ -1598,15 +1492,16 @@
 
 int manager_add_machine(Manager *m, const char *name, Machine **_machine) {
         Machine *machine;
+        int r;
 
         assert(m);
         assert(name);
 
         machine = hashmap_get(m->machines, name);
         if (!machine) {
-                machine = machine_new(m, _MACHINE_CLASS_INVALID, name);
-                if (!machine)
-                        return -ENOMEM;
+                r = machine_new(m, _MACHINE_CLASS_INVALID, name, &machine);
+                if (r < 0)
+                        return r;
         }
 
         if (_machine)
diff --git a/src/machine/machined-varlink.c b/src/machine/machined-varlink.c
index fc0b0f1..ec625ad 100644
--- a/src/machine/machined-varlink.c
+++ b/src/machine/machined-varlink.c
@@ -27,11 +27,11 @@
                                        JSON_BUILD_PAIR("uid", JSON_BUILD_UNSIGNED(uid)),
                                        JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(GID_NOBODY)),
                                        JSON_BUILD_PAIR_CONDITION(!isempty(real_name), "realName", JSON_BUILD_STRING(real_name)),
-                                       JSON_BUILD_PAIR("homeDirectory", JSON_BUILD_STRING("/")),
+                                       JSON_BUILD_PAIR("homeDirectory", JSON_BUILD_CONST_STRING("/")),
                                        JSON_BUILD_PAIR("shell", JSON_BUILD_STRING(NOLOGIN)),
                                        JSON_BUILD_PAIR("locked", JSON_BUILD_BOOLEAN(true)),
-                                       JSON_BUILD_PAIR("service", JSON_BUILD_STRING("io.systemd.Machine")),
-                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("container"))))));
+                                       JSON_BUILD_PAIR("service", JSON_BUILD_CONST_STRING("io.systemd.Machine")),
+                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("container"))))));
 }
 
 static bool user_match_lookup_parameters(LookupParameters *p, const char *name, uid_t uid) {
@@ -150,12 +150,11 @@
         };
         _cleanup_free_ char *found_name = NULL, *found_real_name = NULL;
         uid_t found_uid = UID_INVALID, uid;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *un;
         int r;
 
         assert(parameters);
-        assert(m);
 
         r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
         if (r < 0)
@@ -198,8 +197,8 @@
                                        JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(group_name)),
                                        JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(gid)),
                                        JSON_BUILD_PAIR_CONDITION(!isempty(description), "description", JSON_BUILD_STRING(description)),
-                                       JSON_BUILD_PAIR("service", JSON_BUILD_STRING("io.systemd.Machine")),
-                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("container"))))));
+                                       JSON_BUILD_PAIR("service", JSON_BUILD_CONST_STRING("io.systemd.Machine")),
+                                       JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("container"))))));
     }
 
 static bool group_match_lookup_parameters(LookupParameters *p, const char *name, gid_t gid) {
@@ -316,12 +315,11 @@
         };
         _cleanup_free_ char *found_name = NULL, *found_description = NULL;
         uid_t found_gid = GID_INVALID, gid;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *gn;
         int r;
 
         assert(parameters);
-        assert(m);
 
         r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
         if (r < 0)
diff --git a/src/machine/machined.c b/src/machine/machined.c
index 241be42..b4ff97a 100644
--- a/src/machine/machined.c
+++ b/src/machine/machined.c
@@ -6,23 +6,22 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "sd-daemon.h"
-
 #include "alloc-util.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-log-control-api.h"
 #include "bus-polkit.h"
 #include "cgroup-util.h"
+#include "daemon-util.h"
 #include "dirent-util.h"
 #include "discover-image.h"
 #include "fd-util.h"
 #include "format-util.h"
 #include "hostname-util.h"
-#include "label.h"
 #include "machined-varlink.h"
 #include "machined.h"
 #include "main-func.h"
+#include "mkdir-label.h"
 #include "process-util.h"
 #include "service-util.h"
 #include "signal-util.h"
@@ -118,9 +117,9 @@
         if (!unit)
                 return log_oom();
 
-        t = machine_new(m, MACHINE_HOST, ".host");
-        if (!t)
-                return log_oom();
+        r = machine_new(m, MACHINE_HOST, ".host", &t);
+        if (r < 0)
+                return log_error_errno(r, "Failed to create machine: %m");
 
         t->leader = 1;
         t->id = mid;
@@ -128,7 +127,7 @@
         t->root_directory = TAKE_PTR(rd);
         t->unit = TAKE_PTR(unit);
 
-        dual_timestamp_from_boottime_or_monotonic(&t->timestamp, 0);
+        dual_timestamp_from_boottime(&t->timestamp, 0);
 
         m->host_machine = t;
 
@@ -137,7 +136,6 @@
 
 static int manager_enumerate_machines(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r;
 
         assert(m);
@@ -352,17 +350,14 @@
                 return log_error_errno(r, "Failed to fully start up daemon: %m");
 
         log_debug("systemd-machined running as pid "PID_FMT, getpid_cached());
-        (void) sd_notify(false,
-                         "READY=1\n"
-                         "STATUS=Processing requests...");
+        r = sd_notify(false, NOTIFY_READY);
+        if (r < 0)
+                log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
 
         r = manager_run(m);
 
+        (void) sd_notify(false, NOTIFY_STOPPING);
         log_debug("systemd-machined stopped as pid "PID_FMT, getpid_cached());
-        (void) sd_notify(false,
-                         "STOPPING=1\n"
-                         "STATUS=Shutting down...");
-
         return r;
 }
 
diff --git a/src/machine/meson.build b/src/machine/meson.build
index 9b9ad1d..01d0bed 100644
--- a/src/machine/meson.build
+++ b/src/machine/meson.build
@@ -1,30 +1,25 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_machined_sources = files('''
-        machined.c
-        machined.h
-'''.split())
+systemd_machined_sources = files(
+        'machined.c',
+)
 
-libmachine_core_sources = files('''
-        image-dbus.c
-        image-dbus.h
-        machine-dbus.c
-        machine-dbus.h
-        machine.c
-        machine.h
-        machined-core.c
-        machined-dbus.c
-        machined-varlink.c
-        machined-varlink.h
-        operation.c
-        operation.h
-'''.split())
+libmachine_core_sources = files(
+        'image-dbus.c',
+        'machine-dbus.c',
+        'machine.c',
+        'machined-core.c',
+        'machined-dbus.c',
+        'machined-varlink.c',
+        'operation.c',
+)
 
 libmachine_core = static_library(
         'machine-core',
         libmachine_core_sources,
         include_directories : includes,
-        dependencies : [threads])
+        dependencies : threads,
+        build_by_default : false)
 
 if conf.get('ENABLE_MACHINED') == 1
         install_data('org.freedesktop.machine1.conf',
@@ -36,7 +31,7 @@
 endif
 
 tests += [
-        [['src/machine/test-machine-tables.c'],
+        [files('test-machine-tables.c'),
          [libmachine_core,
           libshared],
          [threads]],
diff --git a/src/machine/operation.c b/src/machine/operation.c
index 42432f1..49b6d31 100644
--- a/src/machine/operation.c
+++ b/src/machine/operation.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <sys/wait.h>
+#include <unistd.h>
 
 #include "alloc-util.h"
 #include "fd-util.h"
@@ -9,10 +10,9 @@
 
 static int operation_done(sd_event_source *s, const siginfo_t *si, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        Operation *o = userdata;
+        Operation *o = ASSERT_PTR(userdata);
         int r;
 
-        assert(o);
         assert(si);
 
         log_debug("Operating " PID_FMT " is now complete with code=%s status=%i",
@@ -81,7 +81,7 @@
         if (!o)
                 return -ENOMEM;
 
-        o->extra_fd = -1;
+        o->extra_fd = -EBADF;
 
         r = sd_event_add_child(manager->event, &o->event_source, child, WEXITED, operation_done, o);
         if (r < 0) {
diff --git a/src/machine/org.freedesktop.machine1.conf b/src/machine/org.freedesktop.machine1.conf
index eafbf6b..bafc1af 100644
--- a/src/machine/org.freedesktop.machine1.conf
+++ b/src/machine/org.freedesktop.machine1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   This file is part of systemd.
diff --git a/src/machine/org.freedesktop.machine1.policy b/src/machine/org.freedesktop.machine1.policy
index 5e43cb6..f031e4e 100644
--- a/src/machine/org.freedesktop.machine1.policy
+++ b/src/machine/org.freedesktop.machine1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
index b2a41a7..8e7f7a5 100644
--- a/src/modules-load/modules-load.c
+++ b/src/modules-load/modules-load.c
@@ -5,8 +5,9 @@
 #include <limits.h>
 #include <sys/stat.h>
 
+#include "build.h"
 #include "conf-files.h"
-#include "def.h"
+#include "constants.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "log.h"
@@ -16,7 +17,6 @@
 #include "proc-cmdline.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
 
 static char **arg_proc_cmdline_modules = NULL;
 static const char conf_file_dirs[] = CONF_PATHS_NULSTR("modules-load.d");
@@ -152,7 +152,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -194,7 +194,6 @@
 
         } else {
                 _cleanup_strv_free_ char **files = NULL;
-                char **fn, **i;
 
                 STRV_FOREACH(i, arg_proc_cmdline_modules) {
                         k = module_load_and_warn(ctx, *i, true);
diff --git a/src/mount/mount-tool.c b/src/mount/mount-tool.c
index 9659355..ea6d528 100644
--- a/src/mount/mount-tool.c
+++ b/src/mount/mount-tool.c
@@ -5,10 +5,12 @@
 #include "sd-bus.h"
 #include "sd-device.h"
 
+#include "build.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-unit-util.h"
 #include "bus-wait-for-jobs.h"
+#include "chase-symlinks.h"
 #include "device-util.h"
 #include "dirent-util.h"
 #include "escape.h"
@@ -329,7 +331,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_user)
@@ -774,54 +776,51 @@
         return n;
 }
 
-static int find_loop_device(const char *backing_file, char **loop_dev) {
-        _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
-        _cleanup_free_ char *l = NULL;
+static int find_loop_device(const char *backing_file, sd_device **ret) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        int r;
 
         assert(backing_file);
-        assert(loop_dev);
+        assert(ret);
 
-        d = opendir("/sys/devices/virtual/block");
-        if (!d)
-                return -errno;
+        r = sd_device_enumerator_new(&e);
+        if (r < 0)
+                return log_oom();
 
-        FOREACH_DIRENT(de, d, return -errno) {
-                _cleanup_free_ char *sys = NULL, *fname = NULL;
-                int r;
+        r = sd_device_enumerator_add_match_subsystem(e, "block", /* match = */ true);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add subsystem match: %m");
 
-                if (de->d_type != DT_DIR)
-                        continue;
+        r = sd_device_enumerator_add_match_property(e, "ID_FS_USAGE", "filesystem");
+        if (r < 0)
+                return log_error_errno(r, "Failed to add property match: %m");
 
-                if (!startswith(de->d_name, "loop"))
-                        continue;
+        r = sd_device_enumerator_add_match_sysname(e, "loop*");
+        if (r < 0)
+                return log_error_errno(r, "Failed to add sysname match: %m");
 
-                sys = path_join("/sys/devices/virtual/block", de->d_name, "loop/backing_file");
-                if (!sys)
-                        return -ENOMEM;
+        r = sd_device_enumerator_add_match_sysattr(e, "loop/backing_file", /* value = */ NULL, /* match = */ true);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add sysattr match: %m");
 
-                r = read_one_line_file(sys, &fname);
+        FOREACH_DEVICE(e, dev) {
+                const char *s;
+
+                r = sd_device_get_sysattr_value(dev, "loop/backing_file", &s);
                 if (r < 0) {
-                        log_debug_errno(r, "Failed to read %s, ignoring: %m", sys);
+                        log_device_debug_errno(dev, r, "Failed to read \"loop/backing_file\" sysattr, ignoring: %m");
                         continue;
                 }
 
-                if (files_same(fname, backing_file, 0) <= 0)
+                if (files_same(s, backing_file, 0) <= 0)
                         continue;
 
-                l = path_join("/dev", de->d_name);
-                if (!l)
-                        return -ENOMEM;
-
-                break;
+                *ret = sd_device_ref(dev);
+                return 0;
         }
 
-        if (!l)
-                return -ENXIO;
-
-        *loop_dev = TAKE_PTR(l);
-
-        return 0;
+        return -ENXIO;
 }
 
 static int stop_mount(
@@ -913,62 +912,69 @@
         return 0;
 }
 
-static int umount_by_device(sd_bus *bus, const char *what) {
+static int umount_by_device(sd_bus *bus, sd_device *dev) {
         _cleanup_(sd_device_unrefp) sd_device *d = NULL;
         _cleanup_strv_free_ char **list = NULL;
-        struct stat st;
         const char *v;
-        char **l;
-        int r, r2 = 0;
+        int r, ret = 0;
 
-        assert(what);
-
-        if (stat(what, &st) < 0)
-                return log_error_errno(errno, "Can't stat %s: %m", what);
-
-        if (!S_ISBLK(st.st_mode))
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK),
-                                       "Not a block device: %s", what);
-
-        r = sd_device_new_from_stat_rdev(&d, &st);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device from device number: %m");
-
-        r = sd_device_get_property_value(d, "ID_FS_USAGE", &v);
-        if (r < 0)
-                return log_device_error_errno(d, r, "Failed to get device property: %m");
-
-        if (!streq(v, "filesystem"))
-                return log_device_error_errno(d, SYNTHETIC_ERRNO(EINVAL),
-                                              "%s does not contain a known file system.", what);
+        assert(bus);
+        assert(dev);
 
         if (sd_device_get_property_value(d, "SYSTEMD_MOUNT_WHERE", &v) >= 0)
-                r2 = stop_mounts(bus, v);
+                ret = stop_mounts(bus, v);
 
-        r = find_mount_points(what, &list);
+        r = sd_device_get_devname(dev, &v);
         if (r < 0)
                 return r;
 
-        for (l = list; *l; l++) {
+        r = find_mount_points(v, &list);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(l, list) {
                 r = stop_mounts(bus, *l);
                 if (r < 0)
-                        r2 = r;
+                        ret = r;
         }
 
-        return r2;
+        return ret;
+}
+
+static int umount_by_device_node(sd_bus *bus, const char *node) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        const char *v;
+        int r;
+
+        assert(bus);
+        assert(node);
+
+        r = sd_device_new_from_devname(&dev, node);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get device from %s: %m", node);
+
+        r = sd_device_get_property_value(dev, "ID_FS_USAGE", &v);
+        if (r < 0)
+                return log_device_error_errno(dev, r, "Failed to get \"ID_FS_USAGE\" device property: %m");
+
+        if (!streq(v, "filesystem"))
+                return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                              "%s does not contain a known file system.", node);
+
+        return umount_by_device(bus, dev);
 }
 
 static int umount_loop(sd_bus *bus, const char *backing_file) {
-        _cleanup_free_ char *loop_dev = NULL;
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         int r;
 
         assert(backing_file);
 
-        r = find_loop_device(backing_file, &loop_dev);
+        r = find_loop_device(backing_file, &dev);
         if (r < 0)
                 return log_error_errno(r, r == -ENXIO ? "File %s is not mounted." : "Can't get loop device for %s: %m", backing_file);
 
-        return umount_by_device(bus, loop_dev);
+        return umount_by_device(bus, dev);
 }
 
 static int action_umount(
@@ -1013,7 +1019,7 @@
                         return log_error_errno(errno, "Can't stat %s (from %s): %m", p, argv[i]);
 
                 if (S_ISBLK(st.st_mode))
-                        r = umount_by_device(bus, p);
+                        r = umount_by_device_node(bus, p);
                 else if (S_ISREG(st.st_mode))
                         r = umount_loop(bus, p);
                 else if (S_ISDIR(st.st_mode))
@@ -1098,12 +1104,13 @@
 
 static int acquire_mount_where(sd_device *d) {
         const char *v;
+        int r;
 
         if (arg_mount_where)
                 return 0;
 
         if (sd_device_get_property_value(d, "SYSTEMD_MOUNT_WHERE", &v) < 0) {
-                _cleanup_free_ char *escaped = NULL;
+                _cleanup_free_ char *escaped = NULL, *devname_bn = NULL;
                 const char *name;
 
                 name = get_label(d);
@@ -1115,7 +1122,11 @@
                         if (sd_device_get_devname(d, &dn) < 0)
                                 return 0;
 
-                        name = basename(dn);
+                        r = path_extract_filename(dn, &devname_bn);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to extract file name from '%s': %m", dn);
+
+                        name = devname_bn;
                 }
 
                 escaped = xescape(name, "\\");
@@ -1135,24 +1146,31 @@
         return 1;
 }
 
-static int acquire_mount_where_for_loop_dev(const char *loop_dev) {
+static int acquire_mount_where_for_loop_dev(sd_device *dev) {
         _cleanup_strv_free_ char **list = NULL;
+        const char *node;
         int r;
 
+        assert(dev);
+
         if (arg_mount_where)
                 return 0;
 
-        r = find_mount_points(loop_dev, &list);
+        r = sd_device_get_devname(dev, &node);
         if (r < 0)
                 return r;
-        else if (r == 0)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Can't find mount point of %s. It is expected that %s is already mounted on a place.",
-                                       loop_dev, loop_dev);
-        else if (r >= 2)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "%s is mounted on %d places. It is expected that %s is mounted on a place.",
-                                       loop_dev, r, loop_dev);
+
+        r = find_mount_points(node, &list);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                              "Can't find mount point of %s. It is expected that %s is already mounted on a place.",
+                                              node, node);
+        if (r >= 2)
+                return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                              "%s is mounted on %d places. It is expected that %s is mounted on a place.",
+                                              node, r, node);
 
         arg_mount_where = strdup(list[0]);
         if (!arg_mount_where)
@@ -1233,22 +1251,23 @@
 
 static int discover_loop_backing_file(void) {
         _cleanup_(sd_device_unrefp) sd_device *d = NULL;
-        _cleanup_free_ char *loop_dev = NULL;
-        struct stat st;
-        const char *v;
         int r;
 
-        r = find_loop_device(arg_mount_what, &loop_dev);
+        r = find_loop_device(arg_mount_what, &d);
         if (r < 0 && r != -ENXIO)
                 return log_error_errno(errno, "Can't get loop device for %s: %m", arg_mount_what);
 
         if (r == -ENXIO) {
-                _cleanup_free_ char *escaped = NULL;
+                _cleanup_free_ char *escaped = NULL, *bn = NULL;
 
                 if (arg_mount_where)
                         return 0;
 
-                escaped = xescape(basename(arg_mount_what), "\\");
+                r = path_extract_filename(arg_mount_what, &bn);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract file name from backing file path '%s': %m", arg_mount_what);
+
+                escaped = xescape(bn, "\\");
                 if (!escaped)
                         return log_oom();
                 if (!filename_is_valid(escaped))
@@ -1264,21 +1283,6 @@
                 return 0;
         }
 
-        if (stat(loop_dev, &st) < 0)
-                return log_error_errno(errno, "Can't stat %s: %m", loop_dev);
-
-        if (!S_ISBLK(st.st_mode))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Invalid file type: %s", loop_dev);
-
-        r = sd_device_new_from_stat_rdev(&d, &st);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device from device number: %m");
-
-        if (sd_device_get_property_value(d, "ID_FS_USAGE", &v) < 0 || !streq(v, "filesystem"))
-                return log_device_error_errno(d, SYNTHETIC_ERRNO(EINVAL),
-                                              "%s does not contain a known file system.", arg_mount_what);
-
         r = acquire_mount_type(d);
         if (r < 0)
                 return r;
@@ -1287,7 +1291,7 @@
         if (r < 0)
                 return r;
 
-        r = acquire_mount_where_for_loop_dev(loop_dev);
+        r = acquire_mount_where_for_loop_dev(d);
         if (r < 0)
                 return r;
 
@@ -1431,7 +1435,7 @@
                 }
         }
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = table_print(table, NULL);
         if (r < 0)
@@ -1457,7 +1461,7 @@
 
         r = bus_connect_transport_systemd(arg_transport, arg_host, arg_user, &bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         if (arg_action == ACTION_UMOUNT)
                 return action_umount(bus, argc, argv);
@@ -1497,7 +1501,7 @@
                 arg_fsck = false;
 
         if (arg_fsck && arg_mount_type && arg_transport == BUS_TRANSPORT_LOCAL) {
-                r = fsck_exists(arg_mount_type);
+                r = fsck_exists_for_fstype(arg_mount_type);
                 if (r < 0)
                         log_warning_errno(r, "Couldn't determine whether fsck for %s exists, proceeding anyway.", arg_mount_type);
                 else if (r == 0) {
@@ -1533,7 +1537,7 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected action.");
+                assert_not_reached();
         }
 
         return r;
diff --git a/src/network/fuzz-netdev-parser.c b/src/network/fuzz-netdev-parser.c
index ddabe1c..77e87e9 100644
--- a/src/network/fuzz-netdev-parser.c
+++ b/src/network/fuzz-netdev-parser.c
@@ -11,6 +11,9 @@
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_(unlink_tempfilep) char netdev_config[] = "/tmp/fuzz-networkd.XXXXXX";
 
+        if (outside_size_range(size, 0, 65536))
+                return 0;
+
         if (!getenv("SYSTEMD_LOG_LEVEL"))
                 log_set_max_level(LOG_CRIT);
 
@@ -19,7 +22,7 @@
                 assert_se(fwrite(data, size, 1, f) == 1);
 
         fflush(f);
-        assert_se(manager_new(&manager) >= 0);
+        assert_se(manager_new(&manager, /* test_mode = */ true) >= 0);
         (void) netdev_load_one(manager, netdev_config);
         return 0;
 }
diff --git a/src/network/fuzz-netdev-parser.options b/src/network/fuzz-netdev-parser.options
new file mode 100644
index 0000000..678d526
--- /dev/null
+++ b/src/network/fuzz-netdev-parser.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 65536
diff --git a/src/network/fuzz-network-parser.c b/src/network/fuzz-network-parser.c
index 1292eba..0c9d6d2 100644
--- a/src/network/fuzz-network-parser.c
+++ b/src/network/fuzz-network-parser.c
@@ -11,7 +11,7 @@
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_(unlink_tempfilep) char network_config[] = "/tmp/fuzz-networkd.XXXXXX";
 
-        if (size > 65535)
+        if (outside_size_range(size, 0, 65536))
                 return 0;
 
         if (!getenv("SYSTEMD_LOG_LEVEL"))
@@ -22,7 +22,7 @@
                 assert_se(fwrite(data, size, 1, f) == 1);
 
         fflush(f);
-        assert_se(manager_new(&manager) >= 0);
+        assert_se(manager_new(&manager, /* test_mode = */ true) >= 0);
         (void) network_load_one(manager, &manager->networks, network_config);
         return 0;
 }
diff --git a/src/network/fuzz-network-parser.options b/src/network/fuzz-network-parser.options
index 0824b19..678d526 100644
--- a/src/network/fuzz-network-parser.options
+++ b/src/network/fuzz-network-parser.options
@@ -1,2 +1,2 @@
 [libfuzzer]
-max_len = 65535
+max_len = 65536
diff --git a/src/network/generator/main.c b/src/network/generator/main.c
index 1ac8bf0..a0af0b8 100644
--- a/src/network/generator/main.c
+++ b/src/network/generator/main.c
@@ -2,6 +2,7 @@
 
 #include <getopt.h>
 
+#include "build.h"
 #include "fd-util.h"
 #include "generator.h"
 #include "macro.h"
@@ -65,9 +66,10 @@
 
         assert(link);
 
-        r = asprintf(&filename, "90-%s.link",
-                     link->ifname);
-        if (r < 0)
+        filename = strjoin(!isempty(link->ifname) ? "90" :
+                           !hw_addr_is_null(&link->mac) ? "91" : "92",
+                           "-", link->filename, ".link");
+        if (!filename)
                 return log_oom();
 
         r = generator_open_unit_file(dest_dir, "kernel command line", filename, &f);
@@ -104,7 +106,7 @@
                         r = k;
         }
 
-        HASHMAP_FOREACH(link, context->links_by_name) {
+        HASHMAP_FOREACH(link, context->links_by_filename) {
                 k = link_save(link, p);
                 if (k < 0 && r >= 0)
                         r = k;
@@ -157,7 +159,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c
index 60e074e..1090934 100644
--- a/src/network/generator/network-generator.c
+++ b/src/network/generator/network-generator.c
@@ -1,11 +1,11 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "ether-addr-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "hostname-util.h"
 #include "log.h"
 #include "macro.h"
+#include "netif-naming-scheme.h"
 #include "network-generator.h"
 #include "parse-util.h"
 #include "proc-cmdline.h"
@@ -16,16 +16,17 @@
 
 /*
   # .network
-  ip={dhcp|on|any|dhcp6|auto6|either6}
-  ip=<interface>:{dhcp|on|any|dhcp6|auto6}[:[<mtu>][:<macaddr>]]
-  ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<mtu>][:<macaddr>]]
-  ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<dns1>][:<dns2>]]
+  ip={dhcp|on|any|dhcp6|auto6|either6|link6}
+  ip=<interface>:{dhcp|on|any|dhcp6|auto6|link6}[:[<mtu>][:<macaddr>]]
+  ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|link6|ibft}[:[<mtu>][:<macaddr>]]
+  ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|link6|ibft}[:[<dns1>][:<dns2>]]
   rd.route=<net>/<netmask>:<gateway>[:<interface>]
   nameserver=<IP> [nameserver=<IP> ...]
   rd.peerdns=0
 
   # .link
   ifname=<interface>:<MAC>
+  net.ifname-policy=policy1[,policy2,...][,<MAC>] # This is an original rule, not supported by other tools.
 
   # .netdev
   vlan=<vlanname>:<phydevice>
@@ -46,11 +47,12 @@
         [DHCP_TYPE_OFF]     = "off",
         [DHCP_TYPE_ON]      = "on",
         [DHCP_TYPE_ANY]     = "any",
-        [DHCP_TYPE_DHCP]    = "dhcp",
+        [DHCP_TYPE_DHCP4]   = "dhcp",
         [DHCP_TYPE_DHCP6]   = "dhcp6",
         [DHCP_TYPE_AUTO6]   = "auto6",
         [DHCP_TYPE_EITHER6] = "either6",
         [DHCP_TYPE_IBFT]    = "ibft",
+        [DHCP_TYPE_LINK6]   = "link6",
 };
 
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(dracut_dhcp_type, DHCPType);
@@ -60,11 +62,12 @@
         [DHCP_TYPE_OFF]     = "no",
         [DHCP_TYPE_ON]      = "yes",
         [DHCP_TYPE_ANY]     = "yes",
-        [DHCP_TYPE_DHCP]    = "ipv4",
+        [DHCP_TYPE_DHCP4]   = "ipv4",
         [DHCP_TYPE_DHCP6]   = "ipv6",
         [DHCP_TYPE_AUTO6]   = "no",   /* TODO: enable other setting? */
         [DHCP_TYPE_EITHER6] = "ipv6", /* TODO: enable other setting? */
         [DHCP_TYPE_IBFT]    = "no",
+        [DHCP_TYPE_LINK6]   = "no",
 };
 
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(networkd_dhcp_type, DHCPType);
@@ -262,36 +265,59 @@
         if (!link)
                 return NULL;
 
+        free(link->filename);
         free(link->ifname);
+        strv_free(link->policies);
+        strv_free(link->alt_policies);
         return mfree(link);
 }
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_free);
 
-static int link_new(Context *context, const char *name, struct ether_addr *mac, Link **ret) {
+static int link_new(
+                Context *context,
+                const char *name,
+                const struct hw_addr_data *mac,
+                Link **ret) {
+
         _cleanup_(link_freep) Link *link = NULL;
-        _cleanup_free_ char *ifname = NULL;
+        _cleanup_free_ char *ifname = NULL, *filename = NULL;
         int r;
 
         assert(context);
+        assert(mac);
 
-        if (!ifname_valid(name))
-                return -EINVAL;
+        if (name) {
+                if (!ifname_valid(name))
+                        return -EINVAL;
 
-        ifname = strdup(name);
-        if (!ifname)
-                return -ENOMEM;
+                ifname = strdup(name);
+                if (!ifname)
+                        return -ENOMEM;
+
+                filename = strdup(name);
+                if (!filename)
+                        return -ENOMEM;
+        }
+
+        if (!filename) {
+                filename = strdup(hw_addr_is_null(mac) ? "default" :
+                                  HW_ADDR_TO_STR_FULL(mac, HW_ADDR_TO_STRING_NO_COLON));
+                if (!filename)
+                        return -ENOMEM;
+        }
 
         link = new(Link, 1);
         if (!link)
                 return -ENOMEM;
 
         *link = (Link) {
+                .filename = TAKE_PTR(filename),
                 .ifname = TAKE_PTR(ifname),
                 .mac = *mac,
         };
 
-        r = hashmap_ensure_put(&context->links_by_name, &string_hash_ops, link->ifname, link);
+        r = hashmap_ensure_put(&context->links_by_filename, &string_hash_ops, link->filename, link);
         if (r < 0)
                 return r;
 
@@ -302,8 +328,10 @@
         return 0;
 }
 
-Link *link_get(Context *context, const char *ifname) {
-        return hashmap_get(context->links_by_name, ifname);
+Link *link_get(Context *context, const char *filename) {
+        assert(context);
+        assert(filename);
+        return hashmap_get(context->links_by_filename, filename);
 }
 
 static int network_set_dhcp_type(Context *context, const char *ifname, const char *dhcp_type) {
@@ -353,7 +381,7 @@
         if (!network)
                 return -ENODEV;
 
-        return ether_addr_from_string(mac, &network->mac);
+        return parse_ether_addr(mac, &network->mac);
 }
 
 static int network_set_address(Context *context, const char *ifname, int family, unsigned char prefixlen,
@@ -475,7 +503,7 @@
         if (!p)
                 mtu = value;
         else
-                mtu = strndupa(value, p - value);
+                mtu = strndupa_safe(value, p - value);
 
         r = network_set_mtu(context, ifname, family, mtu);
         if (r < 0)
@@ -511,14 +539,14 @@
                 if (q[1] != ':')
                         return -EINVAL;
 
-                buf = strndupa(p + 1, q - p - 1);
+                buf = strndupa_safe(p + 1, q - p - 1);
                 p = q + 2;
         } else {
                 q = strchr(p, ':');
                 if (!q)
                         return -EINVAL;
 
-                buf = strndupa(p, q - p);
+                buf = strndupa_safe(p, q - p);
                 p = q + 1;
         }
 
@@ -549,7 +577,7 @@
                 if (!p)
                         return -EINVAL;
 
-                q = strndupa(*value, p - *value);
+                q = strndupa_safe(*value, p - *value);
                 r = safe_atou8(q, ret);
                 if (r < 0)
                         return r;
@@ -566,8 +594,8 @@
         unsigned char prefixlen;
         int r;
 
-        /* ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<mtu>][:<macaddr>]]
-         * ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<dns1>][:<dns2>]] */
+        /* ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft|link6}[:[<mtu>][:<macaddr>]]
+         * ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft|link6}[:[<dns1>][:<dns2>]] */
 
         r = parse_ip_address_one(family, &value, &addr);
         if (r < 0)
@@ -588,7 +616,7 @@
                 return -EINVAL;
 
         if (p != value) {
-                hostname = strndupa(value, p - value);
+                hostname = strndupa_safe(value, p - value);
                 if (!hostname_is_valid(hostname, 0))
                         return -EINVAL;
         }
@@ -600,7 +628,7 @@
         if (!p)
                 return -EINVAL;
 
-        ifname = strndupa(value, p - value);
+        ifname = strndupa_safe(value, p - value);
 
         value = p + 1;
 
@@ -609,7 +637,7 @@
         if (!p)
                 dhcp_type = value;
         else
-                dhcp_type = strndupa(value, p - value);
+                dhcp_type = strndupa_safe(value, p - value);
 
         r = network_set_dhcp_type(context, ifname, dhcp_type);
         if (r < 0)
@@ -644,7 +672,7 @@
                 if (r < 0)
                         return r;
         } else {
-                dns = strndupa(value, p - value);
+                dns = strndupa_safe(value, p - value);
                 r = network_set_dns(context, ifname, dns);
                 if (r < 0)
                         return r;
@@ -660,20 +688,20 @@
         const char *ifname, *dhcp_type, *p;
         int r;
 
-        /* ip=<interface>:{dhcp|on|any|dhcp6|auto6}[:[<mtu>][:<macaddr>]] */
+        /* ip=<interface>:{dhcp|on|any|dhcp6|auto6|link6}[:[<mtu>][:<macaddr>]] */
 
         p = strchr(value, ':');
         if (!p)
                 return -EINVAL;
 
-        ifname = strndupa(value, p - value);
+        ifname = strndupa_safe(value, p - value);
 
         value = p + 1;
         p = strchr(value, ':');
         if (!p)
                 dhcp_type = value;
         else
-                dhcp_type = strndupa(value, p - value);
+                dhcp_type = strndupa_safe(value, p - value);
 
         r = network_set_dhcp_type(context, ifname, dhcp_type);
         if (r < 0)
@@ -694,7 +722,7 @@
 
         p = strchr(value, ':');
         if (!p)
-                /* ip={dhcp|on|any|dhcp6|auto6|either6} */
+                /* ip={dhcp|on|any|dhcp6|auto6|either6|link6} */
                 return network_set_dhcp_type(context, "", value);
 
         if (value[0] == '[')
@@ -726,7 +754,7 @@
                 if (p[1] != ':')
                         return -EINVAL;
 
-                buf = strndupa(value + 1, p - value - 1);
+                buf = strndupa_safe(value + 1, p - value - 1);
                 value = p + 2;
                 family = AF_INET6;
         } else {
@@ -734,7 +762,7 @@
                 if (!p)
                         return -EINVAL;
 
-                buf = strndupa(value, p - value);
+                buf = strndupa_safe(value, p - value);
                 value = p + 1;
                 family = AF_INET;
         }
@@ -786,7 +814,7 @@
         if (!p)
                 return -EINVAL;
 
-        name = strndupa(value, p - value);
+        name = strndupa_safe(value, p - value);
 
         netdev = netdev_get(context, name);
         if (!netdev) {
@@ -810,7 +838,7 @@
         if (!p)
                 return -EINVAL;
 
-        name = strndupa(value, p - value);
+        name = strndupa_safe(value, p - value);
 
         netdev = netdev_get(context, name);
         if (!netdev) {
@@ -848,7 +876,7 @@
         if (!p)
                 return -EINVAL;
 
-        name = strndupa(value, p - value);
+        name = strndupa_safe(value, p - value);
 
         netdev = netdev_get(context, name);
         if (!netdev) {
@@ -862,7 +890,7 @@
         if (!p)
                 slaves = value;
         else
-                slaves = strndupa(value, p - value);
+                slaves = strndupa_safe(value, p - value);
 
         if (isempty(slaves))
                 return -EINVAL;
@@ -894,7 +922,7 @@
 }
 
 static int parse_cmdline_ifname(Context *context, const char *key, const char *value) {
-        struct ether_addr mac;
+        struct hw_addr_data mac;
         const char *name, *p;
         int r;
 
@@ -907,20 +935,78 @@
         if (!p)
                 return -EINVAL;
 
-        name = strndupa(value, p - value);
+        name = strndupa_safe(value, p - value);
 
-        r = ether_addr_from_string(p + 1, &mac);
+        r = parse_hw_addr(p + 1, &mac);
         if (r < 0)
                 return r;
 
         return link_new(context, name, &mac, NULL);
 }
 
+static int parse_cmdline_ifname_policy(Context *context, const char *key, const char *value) {
+        _cleanup_strv_free_ char **policies = NULL, **alt_policies = NULL;
+        struct hw_addr_data mac = HW_ADDR_NULL;
+        Link *link;
+        int r;
+
+        /* net.ifname-policy=policy1[,policy2,...][,<MAC>] */
+
+        if (proc_cmdline_value_missing(key, value))
+                return -EINVAL;
+
+        for (const char *q = value; ; ) {
+                _cleanup_free_ char *word = NULL;
+                NamePolicy p;
+
+                r = extract_first_word(&q, &word, ",", 0);
+                if (r == 0)
+                        break;
+                if (r < 0)
+                        return r;
+
+                p = name_policy_from_string(word);
+                if (p < 0) {
+                        r = parse_hw_addr(word, &mac);
+                        if (r < 0)
+                                return r;
+
+                        if (hw_addr_is_null(&mac))
+                                return -EINVAL;
+
+                        if (!isempty(q))
+                                return -EINVAL;
+
+                        break;
+                }
+
+                if (alternative_names_policy_from_string(word) >= 0) {
+                        r = strv_extend(&alt_policies, word);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = strv_consume(&policies, TAKE_PTR(word));
+                if (r < 0)
+                        return r;
+        }
+
+        if (strv_isempty(policies))
+                return -EINVAL;
+
+        r = link_new(context, NULL, &mac, &link);
+        if (r < 0)
+                return r;
+
+        link->policies = TAKE_PTR(policies);
+        link->alt_policies = TAKE_PTR(alt_policies);
+        return 0;
+}
+
 int parse_cmdline_item(const char *key, const char *value, void *data) {
-        Context *context = data;
+        Context *context = ASSERT_PTR(data);
 
         assert(key);
-        assert(data);
 
         if (streq(key, "ip"))
                 return parse_cmdline_ip(context, key, value);
@@ -938,13 +1024,14 @@
                 return parse_cmdline_bond(context, key, value);
         if (streq(key, "ifname"))
                 return parse_cmdline_ifname(context, key, value);
+        if (streq(key, "net.ifname-policy"))
+                return parse_cmdline_ifname_policy(context, key, value);
 
         return 0;
 }
 
 int context_merge_networks(Context *context) {
         Network *all, *network;
-        Route *route;
         int r;
 
         assert(context);
@@ -989,61 +1076,33 @@
 
         hashmap_free_with_destructor(context->networks_by_name, network_free);
         hashmap_free_with_destructor(context->netdevs_by_name, netdev_free);
-        hashmap_free_with_destructor(context->links_by_name, link_free);
+        hashmap_free_with_destructor(context->links_by_filename, link_free);
 }
 
 static int address_dump(Address *address, FILE *f) {
-        _cleanup_free_ char *addr = NULL, *peer = NULL;
-        int r;
-
-        r = in_addr_prefix_to_string(address->family, &address->address, address->prefixlen, &addr);
-        if (r < 0)
-                return r;
-
-        if (in_addr_is_set(address->family, &address->peer)) {
-                r = in_addr_to_string(address->family, &address->peer, &peer);
-                if (r < 0)
-                        return r;
-        }
-
         fprintf(f,
                 "\n[Address]\n"
                 "Address=%s\n",
-                addr);
-
-        if (peer)
-                fprintf(f, "Peer=%s\n", peer);
-
+                IN_ADDR_PREFIX_TO_STRING(address->family, &address->address, address->prefixlen));
+        if (in_addr_is_set(address->family, &address->peer))
+                fprintf(f, "Peer=%s\n",
+                        IN_ADDR_TO_STRING(address->family, &address->peer));
         return 0;
 }
 
 static int route_dump(Route *route, FILE *f) {
-        _cleanup_free_ char *dest = NULL, *gateway = NULL;
-        int r;
-
-        if (in_addr_is_set(route->family, &route->dest)) {
-                r = in_addr_prefix_to_string(route->family, &route->dest, route->prefixlen, &dest);
-                if (r < 0)
-                        return r;
-        }
-
-        r = in_addr_to_string(route->family, &route->gateway, &gateway);
-        if (r < 0)
-                return r;
-
         fputs("\n[Route]\n", f);
-        if (dest)
-                fprintf(f, "Destination=%s\n", dest);
-        fprintf(f, "Gateway=%s\n", gateway);
+        if (in_addr_is_set(route->family, &route->dest))
+                fprintf(f, "Destination=%s\n",
+                        IN_ADDR_PREFIX_TO_STRING(route->family, &route->dest, route->prefixlen));
+        fprintf(f, "Gateway=%s\n",
+                IN_ADDR_TO_STRING(route->family, &route->gateway));
 
         return 0;
 }
 
 void network_dump(Network *network, FILE *f) {
-        Address *address;
-        Route *route;
         const char *dhcp;
-        char **dns;
 
         assert(network);
         assert(f);
@@ -1115,13 +1174,27 @@
 
         fputs("[Match]\n", f);
 
-        if (!ether_addr_is_null(&link->mac))
-                fprintf(f, "MACAddress=%s\n", ETHER_ADDR_TO_STR(&link->mac));
+        if (!hw_addr_is_null(&link->mac))
+                fprintf(f, "MACAddress=%s\n", HW_ADDR_TO_STR(&link->mac));
+        else
+                fputs("OriginalName=*\n", f);
 
-        fprintf(f,
-                "\n[Link]\n"
-                "Name=%s\n",
-                link->ifname);
+        fputs("\n[Link]\n", f);
+
+        if (!isempty(link->ifname))
+                fprintf(f, "Name=%s\n", link->ifname);
+
+        if (!strv_isempty(link->policies)) {
+                fputs("NamePolicy=", f);
+                fputstrv(f, link->policies, " ", NULL);
+                fputc('\n', f);
+        }
+
+        if (!strv_isempty(link->alt_policies)) {
+                fputs("AlternativeNamesPolicy=", f);
+                fputstrv(f, link->alt_policies, " ", NULL);
+                fputc('\n', f);
+        }
 }
 
 int network_format(Network *network, char **ret) {
diff --git a/src/network/generator/network-generator.h b/src/network/generator/network-generator.h
index 5131b20..0e0da2a 100644
--- a/src/network/generator/network-generator.h
+++ b/src/network/generator/network-generator.h
@@ -1,9 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <net/ethernet.h>
 #include <stdio.h>
 
+#include "ether-addr-util.h"
 #include "hashmap.h"
 #include "in-addr-util.h"
 #include "list.h"
@@ -13,11 +13,12 @@
         DHCP_TYPE_OFF,
         DHCP_TYPE_ON,
         DHCP_TYPE_ANY,
-        DHCP_TYPE_DHCP,
+        DHCP_TYPE_DHCP4,
         DHCP_TYPE_DHCP6,
         DHCP_TYPE_AUTO6,
         DHCP_TYPE_EITHER6,
         DHCP_TYPE_IBFT,
+        DHCP_TYPE_LINK6,
         _DHCP_TYPE_MAX,
         _DHCP_TYPE_INVALID = -EINVAL,
 } DHCPType;
@@ -80,15 +81,21 @@
 };
 
 struct Link {
+        char *filename;
+
         /* [Match] */
+        struct hw_addr_data mac;
+
+        /* [Link] */
         char *ifname;
-        struct ether_addr mac;
+        char **policies;
+        char **alt_policies;
 };
 
 typedef struct Context {
         Hashmap *networks_by_name;
         Hashmap *netdevs_by_name;
-        Hashmap *links_by_name;
+        Hashmap *links_by_filename;
 } Context;
 
 int parse_cmdline_item(const char *key, const char *value, void *data);
@@ -103,6 +110,6 @@
 void netdev_dump(NetDev *netdev, FILE *f);
 int netdev_format(NetDev *netdev, char **ret);
 
-Link *link_get(Context *context, const char *ifname);
+Link *link_get(Context *context, const char *filename);
 void link_dump(Link *link, FILE *f);
 int link_format(Link *link, char **ret);
diff --git a/src/network/generator/test-network-generator.c b/src/network/generator/test-network-generator.c
index e658d89..bcd4b1d 100644
--- a/src/network/generator/test-network-generator.c
+++ b/src/network/generator/test-network-generator.c
@@ -49,14 +49,14 @@
         assert_se(streq(output, expected));
 }
 
-static void test_link_one(const char *ifname, const char *key, const char *value, const char *expected) {
+static void test_link_one(const char *filename, const char *key, const char *value, const char *expected) {
         _cleanup_(context_clear) Context context = {};
         _cleanup_free_ char *output = NULL;
         Link *link;
 
         printf("# %s=%s\n", key, value);
         assert_se(parse_cmdline_item(key, value, &context) >= 0);
-        assert_se(link = link_get(&context, ifname));
+        assert_se(link = link_get(&context, filename));
         assert_se(link_format(link, &output) >= 0);
         puts(output);
         assert_se(streq(output, expected));
@@ -334,6 +334,22 @@
                       "Name=hogehoge\n"
                       );
 
+        test_link_one("001122334455", "net.ifname-policy", "keep,kernel,database,onboard,slot,path,mac,00:11:22:33:44:55",
+                      "[Match]\n"
+                      "MACAddress=00:11:22:33:44:55\n"
+                      "\n[Link]\n"
+                      "NamePolicy=keep kernel database onboard slot path mac\n"
+                      "AlternativeNamesPolicy=database onboard slot path mac\n"
+                      );
+
+        test_link_one("default", "net.ifname-policy", "keep,kernel,database,onboard,slot,path,mac",
+                      "[Match]\n"
+                      "OriginalName=*\n"
+                      "\n[Link]\n"
+                      "NamePolicy=keep kernel database onboard slot path mac\n"
+                      "AlternativeNamesPolicy=database onboard slot path mac\n"
+                      );
+
         test_network_two("eth0",
                          "ip", "192.168.0.10:192.168.0.2:192.168.0.1:255.255.255.0:hogehoge:eth0:on:10.10.10.10:10.10.10.11",
                          "rd.route", "10.1.2.3/16:10.0.2.3",
diff --git a/src/network/meson.build b/src/network/meson.build
index 4e137d7..f48c4ed 100644
--- a/src/network/meson.build
+++ b/src/network/meson.build
@@ -1,199 +1,118 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-sources = files('''
-        netdev/bareudp.c
-        netdev/bareudp.h
-        netdev/batadv.c
-        netdev/batadv.h
-        netdev/bond.c
-        netdev/bond.h
-        netdev/bridge.c
-        netdev/bridge.h
-        netdev/dummy.c
-        netdev/dummy.h
-        netdev/ifb.c
-        netdev/ifb.h
-        netdev/ipvlan.c
-        netdev/ipvlan.h
-        netdev/macvlan.c
-        netdev/macvlan.h
-        netdev/netdev.c
-        netdev/netdev.h
-        netdev/nlmon.c
-        netdev/nlmon.h
-        netdev/tunnel.c
-        netdev/tunnel.h
-        netdev/tuntap.c
-        netdev/tuntap.h
-        netdev/vcan.c
-        netdev/vcan.h
-        netdev/veth.c
-        netdev/veth.h
-        netdev/vlan.c
-        netdev/vlan.h
-        netdev/vrf.c
-        netdev/vrf.h
-        netdev/vxlan.c
-        netdev/vxlan.h
-        netdev/geneve.c
-        netdev/geneve.h
-        netdev/vxcan.c
-        netdev/vxcan.h
-        netdev/wireguard.c
-        netdev/wireguard.h
-        netdev/netdevsim.c
-        netdev/netdevsim.h
-        netdev/fou-tunnel.c
-        netdev/fou-tunnel.h
-        netdev/l2tp-tunnel.c
-        netdev/l2tp-tunnel.h
-        netdev/macsec.c
-        netdev/macsec.h
-        netdev/xfrm.c
-        netdev/xfrm.h
-        networkd-address-label.c
-        networkd-address-label.h
-        networkd-address-pool.c
-        networkd-address-pool.h
-        networkd-address.c
-        networkd-address.h
-        networkd-bridge-fdb.c
-        networkd-bridge-fdb.h
-        networkd-bridge-mdb.c
-        networkd-bridge-mdb.h
-        networkd-bridge-vlan.c
-        networkd-bridge-vlan.h
-        networkd-can.c
-        networkd-can.h
-        networkd-conf.c
-        networkd-conf.h
-        networkd-dhcp-common.c
-        networkd-dhcp-common.h
-        networkd-dhcp-server-bus.c
-        networkd-dhcp-server-bus.h
-        networkd-dhcp-server-static-lease.c
-        networkd-dhcp-server-static-lease.h
-        networkd-dhcp-server.c
-        networkd-dhcp-server.h
-        networkd-dhcp4.c
-        networkd-dhcp4.h
-        networkd-dhcp6.c
-        networkd-dhcp6.h
-        networkd-ipv4acd.c
-        networkd-ipv4acd.h
-        networkd-ipv4ll.c
-        networkd-ipv4ll.h
-        networkd-ipv6-proxy-ndp.c
-        networkd-ipv6-proxy-ndp.h
-        networkd-json.c
-        networkd-json.h
-        networkd-link-bus.c
-        networkd-link-bus.h
-        networkd-link.c
-        networkd-link.h
-        networkd-lldp-rx.c
-        networkd-lldp-rx.h
-        networkd-lldp-tx.c
-        networkd-lldp-tx.h
-        networkd-manager-bus.c
-        networkd-manager-bus.h
-        networkd-manager.c
-        networkd-manager.h
-        networkd-ndisc.c
-        networkd-ndisc.h
-        networkd-neighbor.c
-        networkd-neighbor.h
-        networkd-radv.c
-        networkd-radv.h
-        networkd-network-bus.c
-        networkd-network-bus.h
-        networkd-network.c
-        networkd-network.h
-        networkd-nexthop.c
-        networkd-nexthop.h
-        networkd-queue.c
-        networkd-queue.h
-        networkd-route.c
-        networkd-route.h
-        networkd-routing-policy-rule.c
-        networkd-routing-policy-rule.h
-        networkd-setlink.c
-        networkd-setlink.h
-        networkd-speed-meter.c
-        networkd-speed-meter.h
-        networkd-sriov.c
-        networkd-sriov.h
-        networkd-state-file.c
-        networkd-state-file.h
-        networkd-sysctl.c
-        networkd-sysctl.h
-        networkd-util.c
-        networkd-util.h
-        networkd-wifi.c
-        networkd-wifi.h
-        tc/cake.c
-        tc/cake.h
-        tc/codel.c
-        tc/codel.h
-        tc/drr.c
-        tc/drr.h
-        tc/ets.c
-        tc/ets.h
-        tc/fifo.c
-        tc/fifo.h
-        tc/fq.c
-        tc/fq.h
-        tc/fq-codel.c
-        tc/fq-codel.h
-        tc/fq-pie.c
-        tc/fq-pie.h
-        tc/gred.c
-        tc/gred.h
-        tc/hhf.c
-        tc/hhf.h
-        tc/htb.c
-        tc/htb.h
-        tc/netem.c
-        tc/netem.h
-        tc/pie.c
-        tc/pie.h
-        tc/qdisc.c
-        tc/qdisc.h
-        tc/qfq.c
-        tc/qfq.h
-        tc/sfb.c
-        tc/sfb.h
-        tc/sfq.c
-        tc/sfq.h
-        tc/tbf.c
-        tc/tbf.h
-        tc/tc-util.c
-        tc/tc-util.h
-        tc/tc.c
-        tc/tc.h
-        tc/tclass.c
-        tc/tclass.h
-        tc/teql.c
-        tc/teql.h
-'''.split())
+sources = files(
+        'netdev/bareudp.c',
+        'netdev/batadv.c',
+        'netdev/bond.c',
+        'netdev/bridge.c',
+        'netdev/dummy.c',
+        'netdev/fou-tunnel.c',
+        'netdev/geneve.c',
+        'netdev/ifb.c',
+        'netdev/ipoib.c',
+        'netdev/ipvlan.c',
+        'netdev/l2tp-tunnel.c',
+        'netdev/macsec.c',
+        'netdev/macvlan.c',
+        'netdev/netdev-util.c',
+        'netdev/netdev.c',
+        'netdev/netdevsim.c',
+        'netdev/nlmon.c',
+        'netdev/tunnel.c',
+        'netdev/tuntap.c',
+        'netdev/vcan.c',
+        'netdev/veth.c',
+        'netdev/vlan.c',
+        'netdev/vrf.c',
+        'netdev/vxcan.c',
+        'netdev/vxlan.c',
+        'netdev/wireguard.c',
+        'netdev/wlan.c',
+        'netdev/xfrm.c',
+        'networkd-address-generation.c',
+        'networkd-address-label.c',
+        'networkd-address-pool.c',
+        'networkd-address.c',
+        'networkd-bridge-fdb.c',
+        'networkd-bridge-mdb.c',
+        'networkd-bridge-vlan.c',
+        'networkd-can.c',
+        'networkd-conf.c',
+        'networkd-dhcp-common.c',
+        'networkd-dhcp-prefix-delegation.c',
+        'networkd-dhcp-server-bus.c',
+        'networkd-dhcp-server-static-lease.c',
+        'networkd-dhcp-server.c',
+        'networkd-dhcp4.c',
+        'networkd-dhcp6.c',
+        'networkd-ipv4acd.c',
+        'networkd-ipv4ll.c',
+        'networkd-ipv6-proxy-ndp.c',
+        'networkd-ipv6ll.c',
+        'networkd-json.c',
+        'networkd-link-bus.c',
+        'networkd-link.c',
+        'networkd-lldp-rx.c',
+        'networkd-lldp-tx.c',
+        'networkd-manager-bus.c',
+        'networkd-manager.c',
+        'networkd-ndisc.c',
+        'networkd-neighbor.c',
+        'networkd-netlabel.c',
+        'networkd-network-bus.c',
+        'networkd-network.c',
+        'networkd-nexthop.c',
+        'networkd-queue.c',
+        'networkd-radv.c',
+        'networkd-route-util.c',
+        'networkd-route.c',
+        'networkd-routing-policy-rule.c',
+        'networkd-setlink.c',
+        'networkd-speed-meter.c',
+        'networkd-sriov.c',
+        'networkd-state-file.c',
+        'networkd-sysctl.c',
+        'networkd-util.c',
+        'networkd-wifi.c',
+        'networkd-wiphy.c',
+        'tc/cake.c',
+        'tc/codel.c',
+        'tc/drr.c',
+        'tc/ets.c',
+        'tc/fifo.c',
+        'tc/fq-codel.c',
+        'tc/fq-pie.c',
+        'tc/fq.c',
+        'tc/gred.c',
+        'tc/hhf.c',
+        'tc/htb.c',
+        'tc/netem.c',
+        'tc/pie.c',
+        'tc/qdisc.c',
+        'tc/qfq.c',
+        'tc/sfb.c',
+        'tc/sfq.c',
+        'tc/tbf.c',
+        'tc/tc-util.c',
+        'tc/tc.c',
+        'tc/tclass.c',
+        'tc/teql.c',
+)
 
 systemd_networkd_sources = files('networkd.c')
 
-systemd_networkd_wait_online_sources = files('''
-        wait-online/link.c
-        wait-online/link.h
-        wait-online/manager.c
-        wait-online/manager.h
-        wait-online/wait-online.c
-'''.split())
+systemd_networkd_wait_online_sources = files(
+        'wait-online/link.c',
+        'wait-online/manager.c',
+        'wait-online/wait-online.c',
+)
 
 networkctl_sources = files('networkctl.c')
 
-network_generator_sources = files('''
-        generator/main.c
-        generator/network-generator.c
-        generator/network-generator.h
-'''.split())
+network_generator_sources = files(
+        'generator/main.c',
+        'generator/network-generator.c',
+)
 
 sources += custom_target(
         'networkd-gperf.c',
@@ -227,7 +146,8 @@
         'networkd-core',
         sources,
         include_directories : network_includes,
-        link_with : [networkd_link_with])
+        link_with : networkd_link_with,
+        build_by_default : false)
 
 if conf.get('ENABLE_NETWORKD') == 1
         install_data('org.freedesktop.network1.conf',
@@ -252,14 +172,14 @@
 endif
 
 fuzzers += [
-        [['src/network/fuzz-netdev-parser.c'],
+        [files('fuzz-netdev-parser.c'),
          [libnetworkd_core,
           libsystemd_network,
           networkd_link_with],
          [threads],
          network_includes],
 
-        [['src/network/fuzz-network-parser.c'],
+        [files('fuzz-network-parser.c'),
          [libnetworkd_core,
           libsystemd_network,
           networkd_link_with],
@@ -268,25 +188,36 @@
 ]
 
 tests += [
-        [['src/network/test-networkd-conf.c'],
+        [files('test-networkd-address.c'),
+         [libnetworkd_core,
+          libsystemd_network],
+         [libatomic],
+         network_includes],
+
+        [files('test-networkd-conf.c'),
+         [libnetworkd_core,
+          libsystemd_network],
+         [libatomic],
+         network_includes],
+
+        [files('test-networkd-util.c'),
          [libnetworkd_core,
           libsystemd_network],
          [],
          network_includes],
 
-        [['src/network/test-network.c'],
+        [files('test-network.c'),
          [libnetworkd_core,
           libsystemd_network],
          [threads],
          network_includes],
 
-        [['src/network/test-network-tables.c'],
+        [files('test-network-tables.c'),
          [libnetworkd_core,
           libsystemd_network],
          [threads],
          network_includes],
 
-        [['src/network/generator/test-network-generator.c',
-          'src/network/generator/network-generator.c',
-          'src/network/generator/network-generator.h']],
+        [files('generator/test-network-generator.c',
+               'generator/network-generator.c')],
 ]
diff --git a/src/network/netdev/bareudp.c b/src/network/netdev/bareudp.c
index 22c0e49..24d3afb 100644
--- a/src/network/netdev/bareudp.c
+++ b/src/network/netdev/bareudp.c
@@ -1,6 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later
  * Copyright © 2020 VMware, Inc. */
 
+#include <netinet/in.h>
+#include <linux/if_arp.h>
+
 #include "bareudp.h"
 #include "netlink-util.h"
 #include "networkd-manager.h"
@@ -17,82 +20,26 @@
 DEFINE_CONFIG_PARSE_ENUM(config_parse_bare_udp_iftype, bare_udp_protocol, BareUDPProtocol,
                          "Failed to parse EtherType=");
 
-/* callback for bareudp netdev's created without a backing Link */
-static int bare_udp_netdev_create_handler(sd_netlink *rtnl, sd_netlink_message *m, NetDev *netdev) {
-        int r;
-
-        assert(netdev);
-        assert(netdev->state != _NETDEV_STATE_INVALID);
-
-        r = sd_netlink_message_get_errno(m);
-        if (r == -EEXIST)
-                log_netdev_info(netdev, "BareUDP netdev exists, using existing without changing its parameters.");
-        else if (r < 0) {
-                log_netdev_warning_errno(netdev, r, "BareUDP netdev could not be created: %m");
-                netdev_drop(netdev);
-
-                return 1;
-        }
-
-        log_netdev_debug(netdev, "BareUDP created.");
-
-        return 1;
-}
-
-static int netdev_bare_udp_create(NetDev *netdev) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+static int netdev_bare_udp_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
         BareUDP *u;
         int r;
 
         assert(netdev);
+        assert(m);
 
         u = BAREUDP(netdev);
 
         assert(u);
 
-        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not allocate RTM_NEWLINK message: %m");
-
-        r = sd_netlink_message_append_string(m, IFLA_IFNAME, netdev->ifname);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IFNAME, attribute: %m");
-
-        r = sd_netlink_message_open_container(m, IFLA_LINKINFO);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
-
-        r = sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, netdev_kind_to_string(netdev->kind));
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
-
         r = sd_netlink_message_append_u16(m, IFLA_BAREUDP_ETHERTYPE, htobe16(u->iftype));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_BAREUDP_ETHERTYPE attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u16(m, IFLA_BAREUDP_PORT, htobe16(u->dest_port));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_BAREUDP_PORT attribute: %m");
+                return r;
 
-        r = sd_netlink_message_close_container(m);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
-
-        r = sd_netlink_message_close_container(m);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
-
-        r = netlink_call_async(netdev->manager->rtnl, NULL, m, bare_udp_netdev_create_handler,
-                               netdev_destroy_callback, netdev);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not send rtnetlink message: %m");
-
-        netdev_ref(netdev);
-        netdev->state = NETDEV_STATE_CREATING;
-
-        log_netdev_debug(netdev, "Creating");
-
-        return r;
+        return 0;
 }
 
 static int netdev_bare_udp_verify(NetDev *netdev, const char *filename) {
@@ -133,6 +80,7 @@
         .sections = NETDEV_COMMON_SECTIONS "BareUDP\0",
         .init = bare_udp_init,
         .config_verify = netdev_bare_udp_verify,
-        .create = netdev_bare_udp_create,
+        .fill_message_create = netdev_bare_udp_fill_message_create,
         .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_NONE,
 };
diff --git a/src/network/netdev/batadv.c b/src/network/netdev/batadv.c
index 1f899e9..7e97619 100644
--- a/src/network/netdev/batadv.c
+++ b/src/network/netdev/batadv.c
@@ -1,7 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <inttypes.h>
+#include <netinet/in.h>
 #include <linux/genetlink.h>
+#include <linux/if_arp.h>
 
 #include "batadv.h"
 #include "fileio.h"
@@ -112,64 +114,73 @@
         return 1;
 }
 
-static int netdev_batadv_post_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+static int netdev_batadv_post_create_message(NetDev *netdev, sd_netlink_message *message) {
         BatmanAdvanced *b;
         int r;
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
 
-        assert(netdev);
-
-        b = BATADV(netdev);
-        assert(b);
-
-        r = sd_genl_message_new(netdev->manager->genl, SD_GENL_BATADV, BATADV_CMD_SET_MESH, &message);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to allocate generic netlink message: %m");
+        assert_se(b = BATADV(netdev));
 
         r = sd_netlink_message_append_u32(message, BATADV_ATTR_MESH_IFINDEX, netdev->ifindex);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set ifindex: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(message, BATADV_ATTR_GW_MODE, b->gateway_mode);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set gateway_mode: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(message, BATADV_ATTR_AGGREGATED_OGMS_ENABLED, b->aggregation);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set aggregation: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(message, BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED, b->bridge_loop_avoidance);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set bridge_loop_avoidance: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(message, BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED, b->distributed_arp_table);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set distributed_arp_table: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(message, BATADV_ATTR_FRAGMENTATION_ENABLED, b->fragmentation);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set fragmentation: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(message, BATADV_ATTR_HOP_PENALTY, b->hop_penalty);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set hop_penalty: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(message, BATADV_ATTR_ORIG_INTERVAL, DIV_ROUND_UP(b->originator_interval, USEC_PER_MSEC));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set orig_interval: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(message, BATADV_ATTR_GW_BANDWIDTH_DOWN, b->gateway_bandwidth_down);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set gateway_bandwidth_down: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(message, BATADV_ATTR_GW_BANDWIDTH_UP, b->gateway_bandwidth_up);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to set gateway_bandwidth_up: %m");
+                return r;
+
+        return 0;
+}
+
+static int netdev_batadv_post_create(NetDev *netdev, Link *link) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
+        int r;
+
+        assert(netdev);
+
+        r = sd_genl_message_new(netdev->manager->genl, BATADV_NL_NAME, BATADV_CMD_SET_MESH, &message);
+        if (r < 0)
+                return log_netdev_error_errno(netdev, r, "Could not allocate netlink message: %m");
+
+        r = netdev_batadv_post_create_message(netdev, message);
+        if (r < 0)
+                return log_netdev_error_errno(netdev, r, "Could not create netlink message: %m");
 
         r = netlink_call_async(netdev->manager->genl, NULL, message, netdev_batman_set_handler,
                                netdev_destroy_callback, netdev);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not send batman device message: %m");
+                return log_netdev_error_errno(netdev, r, "Could not send netlink message: %m");
 
         netdev_ref(netdev);
 
@@ -188,9 +199,9 @@
 
         r = sd_netlink_message_append_string(m, IFLA_BATADV_ALGO_NAME, batadv_routing_algorithm_kernel_to_string(b->routing_algorithm));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_BATADV_ALGO_NAME attribute: %m");
+                return r;
 
-        return r;
+        return 0;
 }
 
 const NetDevVTable batadv_vtable = {
@@ -199,5 +210,7 @@
         .sections = NETDEV_COMMON_SECTIONS "BatmanAdvanced\0",
         .fill_message_create = netdev_batadv_fill_message_create,
         .post_create = netdev_batadv_post_create,
-        .create_type = NETDEV_CREATE_MASTER,
+        .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_ETHER,
+        .generate_mac = true,
 };
diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c
index a7a4adc..601bff0 100644
--- a/src/network/netdev/bond.c
+++ b/src/network/netdev/bond.c
@@ -1,5 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <netinet/in.h>
+#include <linux/if_arp.h>
+
 #include "alloc-util.h"
 #include "bond.h"
 #include "bond-util.h"
@@ -68,50 +71,50 @@
         if (b->mode != _NETDEV_BOND_MODE_INVALID) {
                 r = sd_netlink_message_append_u8(m, IFLA_BOND_MODE, b->mode);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_MODE attribute: %m");
+                        return r;
         }
 
         if (b->xmit_hash_policy != _NETDEV_BOND_XMIT_HASH_POLICY_INVALID) {
                 r = sd_netlink_message_append_u8(m, IFLA_BOND_XMIT_HASH_POLICY, b->xmit_hash_policy);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_XMIT_HASH_POLICY attribute: %m");
+                        return r;
         }
 
         if (b->lacp_rate != _NETDEV_BOND_LACP_RATE_INVALID &&
             b->mode == NETDEV_BOND_MODE_802_3AD) {
                 r = sd_netlink_message_append_u8(m, IFLA_BOND_AD_LACP_RATE, b->lacp_rate);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_AD_LACP_RATE attribute: %m");
+                        return r;
         }
 
         if (b->miimon != 0) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_MIIMON, b->miimon / USEC_PER_MSEC);
                 if (r < 0)
-                        log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_BOND_MIIMON attribute: %m");
+                        return r;
         }
 
         if (b->downdelay != 0) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_DOWNDELAY, b->downdelay / USEC_PER_MSEC);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_DOWNDELAY attribute: %m");
+                        return r;
         }
 
         if (b->updelay != 0) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_UPDELAY, b->updelay / USEC_PER_MSEC);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_UPDELAY attribute: %m");
+                        return r;
         }
 
         if (b->arp_interval != 0) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_ARP_INTERVAL, b->arp_interval / USEC_PER_MSEC);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_ARP_INTERVAL attribute: %m");
+                        return r;
 
                 if (b->lp_interval >= LEARNING_PACKETS_INTERVAL_MIN_SEC &&
                     b->lp_interval <= LEARNING_PACKETS_INTERVAL_MAX_SEC) {
                         r = sd_netlink_message_append_u32(m, IFLA_BOND_LP_INTERVAL, b->lp_interval / USEC_PER_SEC);
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_LP_INTERVAL attribute: %m");
+                                return r;
                 }
         }
 
@@ -119,85 +122,85 @@
             b->mode == NETDEV_BOND_MODE_802_3AD) {
                 r = sd_netlink_message_append_u8(m, IFLA_BOND_AD_SELECT, b->ad_select);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_AD_SELECT attribute: %m");
+                        return r;
         }
 
         if (b->fail_over_mac != _NETDEV_BOND_FAIL_OVER_MAC_INVALID &&
             b->mode == NETDEV_BOND_MODE_ACTIVE_BACKUP) {
                 r = sd_netlink_message_append_u8(m, IFLA_BOND_FAIL_OVER_MAC, b->fail_over_mac);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_FAIL_OVER_MAC attribute: %m");
+                        return r;
         }
 
         if (b->arp_validate != _NETDEV_BOND_ARP_VALIDATE_INVALID) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_ARP_VALIDATE, b->arp_validate);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_ARP_VALIDATE attribute: %m");
+                        return r;
         }
 
         if (b->arp_all_targets != _NETDEV_BOND_ARP_ALL_TARGETS_INVALID) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_ARP_ALL_TARGETS, b->arp_all_targets);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_ARP_ALL_TARGETS attribute: %m");
+                        return r;
         }
 
         if (b->primary_reselect != _NETDEV_BOND_PRIMARY_RESELECT_INVALID) {
                 r = sd_netlink_message_append_u8(m, IFLA_BOND_PRIMARY_RESELECT, b->primary_reselect);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_PRIMARY_RESELECT attribute: %m");
+                        return r;
         }
 
         if (b->resend_igmp <= RESEND_IGMP_MAX) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_RESEND_IGMP, b->resend_igmp);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_RESEND_IGMP attribute: %m");
+                        return r;
         }
 
         if (b->packets_per_slave <= PACKETS_PER_SLAVE_MAX &&
             b->mode == NETDEV_BOND_MODE_BALANCE_RR) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_PACKETS_PER_SLAVE, b->packets_per_slave);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_PACKETS_PER_SLAVE attribute: %m");
+                        return r;
         }
 
         if (b->num_grat_arp <= GRATUITOUS_ARP_MAX) {
                 r = sd_netlink_message_append_u8(m, IFLA_BOND_NUM_PEER_NOTIF, b->num_grat_arp);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_NUM_PEER_NOTIF attribute: %m");
+                        return r;
         }
 
         if (b->min_links != 0) {
                 r = sd_netlink_message_append_u32(m, IFLA_BOND_MIN_LINKS, b->min_links);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_MIN_LINKS attribute: %m");
+                        return r;
         }
 
         if (b->ad_actor_sys_prio != 0) {
                 r = sd_netlink_message_append_u16(m, IFLA_BOND_AD_ACTOR_SYS_PRIO, b->ad_actor_sys_prio);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_AD_ACTOR_SYS_PRIO attribute: %m");
+                        return r;
         }
 
         if (b->ad_user_port_key != 0) {
                 r = sd_netlink_message_append_u16(m, IFLA_BOND_AD_USER_PORT_KEY, b->ad_user_port_key);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_AD_USER_PORT_KEY attribute: %m");
+                        return r;
         }
 
         if (!ether_addr_is_null(&b->ad_actor_system)) {
                 r = sd_netlink_message_append_ether_addr(m, IFLA_BOND_AD_ACTOR_SYSTEM, &b->ad_actor_system);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_AD_ACTOR_SYSTEM attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u8(m, IFLA_BOND_ALL_SLAVES_ACTIVE, b->all_slaves_active);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_ALL_SLAVES_ACTIVE attribute: %m");
+                return r;
 
         if (b->tlb_dynamic_lb >= 0) {
                 r = sd_netlink_message_append_u8(m, IFLA_BOND_TLB_DYNAMIC_LB, b->tlb_dynamic_lb);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_TLB_DYNAMIC_LB attribute: %m");
+                        return r;
         }
 
         if (b->arp_interval > 0 && !ordered_set_isempty(b->arp_ip_targets)) {
@@ -206,17 +209,17 @@
 
                 r = sd_netlink_message_open_container(m, IFLA_BOND_ARP_IP_TARGET);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not open contaniner IFLA_BOND_ARP_IP_TARGET : %m");
+                        return r;
 
                 ORDERED_SET_FOREACH(val, b->arp_ip_targets) {
                         r = sd_netlink_message_append_u32(m, n++, PTR_TO_UINT32(val));
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_ARP_ALL_TARGETS attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_close_container(m);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not close contaniner IFLA_BOND_ARP_IP_TARGET : %m");
+                        return r;
         }
 
         return 0;
@@ -386,7 +389,7 @@
         assert(rvalue);
         assert(data);
 
-        r = ether_addr_from_string(rvalue, &n);
+        r = parse_ether_addr(rvalue, &n);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Not a valid MAC address %s. Ignoring assignment: %m",
@@ -448,6 +451,7 @@
         .done = bond_done,
         .sections = NETDEV_COMMON_SECTIONS "Bond\0",
         .fill_message_create = netdev_bond_fill_message_create,
-        .create_type = NETDEV_CREATE_MASTER,
+        .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c
index b9a0136..b65c3b4 100644
--- a/src/network/netdev/bridge.c
+++ b/src/network/netdev/bridge.c
@@ -1,6 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <net/if.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
+#include <linux/if_bridge.h>
 
 #include "bridge.h"
 #include "netlink-util.h"
@@ -8,11 +11,16 @@
 #include "string-table.h"
 #include "vlan-util.h"
 
+assert_cc((int) MULTICAST_ROUTER_NONE            == (int) MDB_RTR_TYPE_DISABLED);
+assert_cc((int) MULTICAST_ROUTER_TEMPORARY_QUERY == (int) MDB_RTR_TYPE_TEMP_QUERY);
+assert_cc((int) MULTICAST_ROUTER_PERMANENT       == (int) MDB_RTR_TYPE_PERM);
+assert_cc((int) MULTICAST_ROUTER_TEMPORARY       == (int) MDB_RTR_TYPE_TEMP);
+
 static const char* const multicast_router_table[_MULTICAST_ROUTER_MAX] = {
-        [MULTICAST_ROUTER_NONE] = "no",
+        [MULTICAST_ROUTER_NONE]            = "no",
         [MULTICAST_ROUTER_TEMPORARY_QUERY] = "query",
-        [MULTICAST_ROUTER_PERMANENT] = "permanent",
-        [MULTICAST_ROUTER_TEMPORARY] = "temporary",
+        [MULTICAST_ROUTER_PERMANENT]       = "permanent",
+        [MULTICAST_ROUTER_TEMPORARY]       = "temporary",
 };
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(multicast_router, MulticastRouter, _MULTICAST_ROUTER_INVALID);
@@ -37,124 +45,132 @@
         return 1;
 }
 
-static int netdev_bridge_post_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int netdev_bridge_post_create_message(NetDev *netdev, sd_netlink_message *req) {
         Bridge *b;
         int r;
 
-        assert(netdev);
-
-        b = BRIDGE(netdev);
-
-        assert(b);
-
-        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &req, RTM_NEWLINK, netdev->ifindex);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not allocate RTM_SETLINK message: %m");
-
-        r = sd_netlink_message_set_flags(req, NLM_F_REQUEST | NLM_F_ACK);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not set netlink flags: %m");
+        assert_se(b = BRIDGE(netdev));
 
         r = sd_netlink_message_open_container(req, IFLA_LINKINFO);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
+                return r;
 
         r = sd_netlink_message_open_container_union(req, IFLA_INFO_DATA, netdev_kind_to_string(netdev->kind));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
+                return r;
 
         /* convert to jiffes */
         if (b->forward_delay != USEC_INFINITY) {
                 r = sd_netlink_message_append_u32(req, IFLA_BR_FORWARD_DELAY, usec_to_jiffies(b->forward_delay));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_FORWARD_DELAY attribute: %m");
+                        return r;
         }
 
         if (b->hello_time > 0) {
                 r = sd_netlink_message_append_u32(req, IFLA_BR_HELLO_TIME, usec_to_jiffies(b->hello_time));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_HELLO_TIME attribute: %m");
+                        return r;
         }
 
         if (b->max_age > 0) {
                 r = sd_netlink_message_append_u32(req, IFLA_BR_MAX_AGE, usec_to_jiffies(b->max_age));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_MAX_AGE attribute: %m");
+                        return r;
         }
 
         if (b->ageing_time != USEC_INFINITY) {
                 r = sd_netlink_message_append_u32(req, IFLA_BR_AGEING_TIME, usec_to_jiffies(b->ageing_time));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_AGEING_TIME attribute: %m");
+                        return r;
         }
 
         if (b->priority > 0) {
                 r = sd_netlink_message_append_u16(req, IFLA_BR_PRIORITY, b->priority);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_PRIORITY attribute: %m");
+                        return r;
         }
 
         if (b->group_fwd_mask > 0) {
                 r = sd_netlink_message_append_u16(req, IFLA_BR_GROUP_FWD_MASK, b->group_fwd_mask);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_GROUP_FWD_MASK attribute: %m");
+                        return r;
         }
 
         if (b->default_pvid != VLANID_INVALID) {
                 r = sd_netlink_message_append_u16(req, IFLA_BR_VLAN_DEFAULT_PVID, b->default_pvid);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_VLAN_DEFAULT_PVID attribute: %m");
+                        return r;
         }
 
         if (b->mcast_querier >= 0) {
                 r = sd_netlink_message_append_u8(req, IFLA_BR_MCAST_QUERIER, b->mcast_querier);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_MCAST_QUERIER attribute: %m");
+                        return r;
         }
 
         if (b->mcast_snooping >= 0) {
                 r = sd_netlink_message_append_u8(req, IFLA_BR_MCAST_SNOOPING, b->mcast_snooping);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_MCAST_SNOOPING attribute: %m");
+                        return r;
         }
 
         if (b->vlan_filtering >= 0) {
                 r = sd_netlink_message_append_u8(req, IFLA_BR_VLAN_FILTERING, b->vlan_filtering);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_VLAN_FILTERING attribute: %m");
+                        return r;
         }
 
         if (b->vlan_protocol >= 0) {
                 r = sd_netlink_message_append_u16(req, IFLA_BR_VLAN_PROTOCOL, htobe16(b->vlan_protocol));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_VLAN_PROTOCOL attribute: %m");
+                        return r;
         }
 
         if (b->stp >= 0) {
                 r = sd_netlink_message_append_u32(req, IFLA_BR_STP_STATE, b->stp);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_STP_STATE attribute: %m");
+                        return r;
         }
 
         if (b->igmp_version > 0) {
                 r = sd_netlink_message_append_u8(req, IFLA_BR_MCAST_IGMP_VERSION, b->igmp_version);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_MCAST_IGMP_VERSION attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
+                return r;
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
+                return r;
+
+        return 0;
+}
+
+static int netdev_bridge_post_create(NetDev *netdev, Link *link) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        int r;
+
+        assert(netdev);
+
+        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &req, RTM_NEWLINK, netdev->ifindex);
+        if (r < 0)
+                return log_netdev_error_errno(netdev, r, "Could not allocate netlink message: %m");
+
+        r = sd_netlink_message_set_flags(req, NLM_F_REQUEST | NLM_F_ACK);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Could not set netlink message flags: %m");
+
+        r = netdev_bridge_post_create_message(netdev, req);
+        if (r < 0)
+                return log_netdev_error_errno(netdev, r, "Could not create netlink message: %m");
 
         r = netlink_call_async(netdev->manager->rtnl, NULL, req, netdev_bridge_set_handler,
                                netdev_destroy_callback, netdev);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not send rtnetlink message: %m");
+                return log_netdev_error_errno(netdev, r, "Could not send netlink message: %m");
 
         netdev_ref(netdev);
 
@@ -268,5 +284,7 @@
         .init = bridge_init,
         .sections = NETDEV_COMMON_SECTIONS "Bridge\0",
         .post_create = netdev_bridge_post_create,
-        .create_type = NETDEV_CREATE_MASTER,
+        .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_ETHER,
+        .generate_mac = true,
 };
diff --git a/src/network/netdev/bridge.h b/src/network/netdev/bridge.h
index 4510842..72dd3e4 100644
--- a/src/network/netdev/bridge.h
+++ b/src/network/netdev/bridge.h
@@ -1,14 +1,11 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <netinet/in.h>
-#include <linux/if_bridge.h>
-
 #include "conf-parser.h"
 #include "netdev.h"
 
-#define LINK_BRIDGE_PORT_PRIORITY_INVALID 128
-#define LINK_BRIDGE_PORT_PRIORITY_MAX 63
+#define LINK_BRIDGE_PORT_PRIORITY_INVALID 128U
+#define LINK_BRIDGE_PORT_PRIORITY_MAX 63U
 
 typedef struct Bridge {
         NetDev meta;
@@ -30,10 +27,10 @@
 } Bridge;
 
 typedef enum MulticastRouter {
-        MULTICAST_ROUTER_NONE            = MDB_RTR_TYPE_DISABLED,
-        MULTICAST_ROUTER_TEMPORARY_QUERY = MDB_RTR_TYPE_TEMP_QUERY,
-        MULTICAST_ROUTER_PERMANENT       = MDB_RTR_TYPE_PERM,
-        MULTICAST_ROUTER_TEMPORARY       = MDB_RTR_TYPE_TEMP,
+        MULTICAST_ROUTER_NONE,
+        MULTICAST_ROUTER_TEMPORARY_QUERY,
+        MULTICAST_ROUTER_PERMANENT,
+        MULTICAST_ROUTER_TEMPORARY,
         _MULTICAST_ROUTER_MAX,
         _MULTICAST_ROUTER_INVALID = -EINVAL,
 } MulticastRouter;
diff --git a/src/network/netdev/dummy.c b/src/network/netdev/dummy.c
index 754ee98..00df1d2 100644
--- a/src/network/netdev/dummy.c
+++ b/src/network/netdev/dummy.c
@@ -1,10 +1,13 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <linux/if_arp.h>
+
 #include "dummy.h"
 
 const NetDevVTable dummy_vtable = {
         .object_size = sizeof(Dummy),
         .sections = NETDEV_COMMON_SECTIONS,
         .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/fou-tunnel.c b/src/network/netdev/fou-tunnel.c
index 6863257..7baec15 100644
--- a/src/network/netdev/fou-tunnel.c
+++ b/src/network/netdev/fou-tunnel.c
@@ -13,7 +13,6 @@
 #include "parse-util.h"
 #include "string-table.h"
 #include "string-util.h"
-#include "util.h"
 
 static const char* const fou_encap_type_table[_NETDEV_FOO_OVER_UDP_ENCAP_MAX] = {
         [NETDEV_FOO_OVER_UDP_ENCAP_DIRECT] = "FooOverUDP",
@@ -24,30 +23,21 @@
 DEFINE_CONFIG_PARSE_ENUM(config_parse_fou_encap_type, fou_encap_type, FooOverUDPEncapType,
                          "Failed to parse Encapsulation=");
 
-static int netdev_fill_fou_tunnel_message(NetDev *netdev, sd_netlink_message **ret) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+static int netdev_fill_fou_tunnel_message(NetDev *netdev, sd_netlink_message *m) {
         FouTunnel *t;
         uint8_t encap_type;
         int r;
 
-        assert(netdev);
-
-        t = FOU(netdev);
-
-        assert(t);
-
-        r = sd_genl_message_new(netdev->manager->genl, SD_GENL_FOU, FOU_CMD_ADD, &m);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to allocate generic netlink message: %m");
+        assert_se(t = FOU(netdev));
 
         r = sd_netlink_message_append_u16(m, FOU_ATTR_PORT, htobe16(t->port));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_PORT attribute: %m");
+                return r;
 
         if (IN_SET(t->peer_family, AF_INET, AF_INET6)) {
                 r = sd_netlink_message_append_u16(m, FOU_ATTR_PEER_PORT, htobe16(t->peer_port));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_PEER_PORT attribute: %m");
+                        return r;
         }
 
         switch (t->fou_encap_type) {
@@ -58,41 +48,58 @@
                 encap_type = FOU_ENCAP_GUE;
                 break;
         default:
-                assert_not_reached("invalid encap type");
+                assert_not_reached();
         }
 
         r = sd_netlink_message_append_u8(m, FOU_ATTR_TYPE, encap_type);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_TYPE attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, FOU_ATTR_AF, AF_INET);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_AF attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, FOU_ATTR_IPPROTO, t->fou_protocol);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_IPPROTO attribute: %m");
+                return r;
 
         if (t->local_family == AF_INET) {
                 r = sd_netlink_message_append_in_addr(m, FOU_ATTR_LOCAL_V4, &t->local.in);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_LOCAL_V4 attribute: %m");
+                        return r;
         } else if (t->local_family == AF_INET6) {
                 r = sd_netlink_message_append_in6_addr(m, FOU_ATTR_LOCAL_V6, &t->local.in6);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_LOCAL_V6 attribute: %m");
+                        return r;
         }
 
         if (t->peer_family == AF_INET) {
                 r = sd_netlink_message_append_in_addr(m, FOU_ATTR_PEER_V4, &t->peer.in);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_PEER_V4 attribute: %m");
+                        return r;
         } else if (t->peer_family == AF_INET6){
                 r = sd_netlink_message_append_in6_addr(m, FOU_ATTR_PEER_V6, &t->peer.in6);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append FOU_ATTR_PEER_V6 attribute: %m");
+                        return r;
         }
 
+        return 0;
+}
+
+static int netdev_create_fou_tunnel_message(NetDev *netdev, sd_netlink_message **ret) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        assert(netdev);
+
+        r = sd_genl_message_new(netdev->manager->genl, FOU_GENL_NAME, FOU_CMD_ADD, &m);
+        if (r < 0)
+                return log_netdev_error_errno(netdev, r, "Could not allocate netlink message: %m");
+
+        r = netdev_fill_fou_tunnel_message(netdev, m);
+        if (r < 0)
+                return log_netdev_error_errno(netdev, r, "Could not create netlink message: %m");
+
         *ret = TAKE_PTR(m);
         return 0;
 }
@@ -108,7 +115,7 @@
                 log_netdev_info(netdev, "netdev exists, using existing without changing its parameters");
         else if (r < 0) {
                 log_netdev_warning_errno(netdev, r, "netdev could not be created: %m");
-                netdev_drop(netdev);
+                netdev_enter_failed(netdev);
 
                 return 1;
         }
@@ -124,7 +131,7 @@
         assert(netdev);
         assert(FOU(netdev));
 
-        r = netdev_fill_fou_tunnel_message(netdev, &m);
+        r = netdev_create_fou_tunnel_message(netdev, &m);
         if (r < 0)
                 return r;
 
@@ -149,7 +156,7 @@
                 void *data,
                 void *userdata) {
 
-        uint8_t *ret = data;
+        uint8_t *ret = ASSERT_PTR(data);
         unsigned protocol;
         /* linux/fou.h defines the netlink field as one byte, so we need to reject protocols numbers that
          * don't fit in one byte. */
@@ -159,7 +166,6 @@
         assert(section);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = parse_ip_protocol(rvalue);
         if (r >= 0)
@@ -196,14 +202,13 @@
                 void *data,
                 void *userdata) {
 
-        union in_addr_union *addr = data;
+        union in_addr_union *addr = ASSERT_PTR(data);
         FouTunnel *t = userdata;
         int r, *f;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (streq(lvalue, "Local"))
                 f = &t->local_family;
@@ -243,7 +248,7 @@
                                                       filename);
                 break;
         default:
-                assert_not_reached("Invalid fou encap type");
+                assert_not_reached();
         }
 
         if (t->peer_family == AF_UNSPEC && t->peer_port > 0)
diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c
index fd0b511..777a32d 100644
--- a/src/network/netdev/geneve.c
+++ b/src/network/netdev/geneve.c
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <net/if.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
 
 #include "alloc-util.h"
 #include "conf-parser.h"
@@ -25,69 +27,19 @@
 DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(geneve_df, GeneveDF, NETDEV_GENEVE_DF_YES);
 DEFINE_CONFIG_PARSE_ENUM(config_parse_geneve_df, geneve_df, GeneveDF, "Failed to parse Geneve IPDoNotFragment= setting");
 
-/* callback for geneve netdev's created without a backing Link */
-static int geneve_netdev_create_handler(sd_netlink *rtnl, sd_netlink_message *m, NetDev *netdev) {
-        int r;
-
-        assert(netdev);
-        assert(netdev->state != _NETDEV_STATE_INVALID);
-
-        r = sd_netlink_message_get_errno(m);
-        if (r == -EEXIST)
-                log_netdev_info(netdev, "Geneve netdev exists, using existing without changing its parameters");
-        else if (r < 0) {
-                log_netdev_warning_errno(netdev, r, "Geneve netdev could not be created: %m");
-                netdev_drop(netdev);
-
-                return 1;
-        }
-
-        log_netdev_debug(netdev, "Geneve created");
-
-        return 1;
-}
-
-static int netdev_geneve_create(NetDev *netdev) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+static int netdev_geneve_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
         Geneve *v;
         int r;
 
         assert(netdev);
+        assert(m);
 
         v = GENEVE(netdev);
 
-        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not allocate RTM_NEWLINK message: %m");
-
-        r = sd_netlink_message_append_string(m, IFLA_IFNAME, netdev->ifname);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IFNAME, attribute: %m");
-
-        if (netdev->mac) {
-                r = sd_netlink_message_append_ether_addr(m, IFLA_ADDRESS, netdev->mac);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_ADDRESS attribute: %m");
-        }
-
-        if (netdev->mtu != 0) {
-                r = sd_netlink_message_append_u32(m, IFLA_MTU, netdev->mtu);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_MTU attribute: %m");
-        }
-
-        r = sd_netlink_message_open_container(m, IFLA_LINKINFO);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
-
-        r = sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, netdev_kind_to_string(netdev->kind));
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
-
         if (v->id <= GENEVE_VID_MAX) {
                 r = sd_netlink_message_append_u32(m, IFLA_GENEVE_ID, v->id);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_ID attribute: %m");
+                        return r;
         }
 
         if (in_addr_is_set(v->remote_family, &v->remote)) {
@@ -96,84 +48,68 @@
                 else
                         r = sd_netlink_message_append_in6_addr(m, IFLA_GENEVE_REMOTE6, &v->remote.in6);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_REMOTE/IFLA_GENEVE_REMOTE6 attribute: %m");
+                        return r;
         }
 
         if (v->inherit) {
                 r = sd_netlink_message_append_u8(m, IFLA_GENEVE_TTL_INHERIT, 1);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_TTL_INHERIT attribute: %m");
+                        return r;
         } else {
                 r = sd_netlink_message_append_u8(m, IFLA_GENEVE_TTL, v->ttl);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_TTL attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u8(m, IFLA_GENEVE_TOS, v->tos);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_TOS attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_GENEVE_UDP_CSUM, v->udpcsum);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_UDP_CSUM attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_GENEVE_UDP_ZERO_CSUM6_TX, v->udp6zerocsumtx);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_UDP_ZERO_CSUM6_TX attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_GENEVE_UDP_ZERO_CSUM6_RX, v->udp6zerocsumrx);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_UDP_ZERO_CSUM6_RX attribute: %m");
+                return r;
 
         if (v->dest_port != DEFAULT_GENEVE_DESTINATION_PORT) {
                 r = sd_netlink_message_append_u16(m, IFLA_GENEVE_PORT, htobe16(v->dest_port));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_PORT attribute: %m");
+                        return r;
         }
 
         if (v->flow_label > 0) {
                 r = sd_netlink_message_append_u32(m, IFLA_GENEVE_LABEL, htobe32(v->flow_label));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_LABEL attribute: %m");
+                        return r;
         }
 
         if (v->geneve_df != _NETDEV_GENEVE_DF_INVALID) {
                 r = sd_netlink_message_append_u8(m, IFLA_GENEVE_DF, v->geneve_df);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_DF attribute: %m");
+                        return r;
         }
 
-        r = sd_netlink_message_close_container(m);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
-
-        r = sd_netlink_message_close_container(m);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
-
-        r = netlink_call_async(netdev->manager->rtnl, NULL, m, geneve_netdev_create_handler,
-                               netdev_destroy_callback, netdev);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not send rtnetlink message: %m");
-
-        netdev_ref(netdev);
-        netdev->state = NETDEV_STATE_CREATING;
-
-        log_netdev_debug(netdev, "Creating");
-
-        return r;
+        return 0;
 }
 
-int config_parse_geneve_vni(const char *unit,
-                           const char *filename,
-                           unsigned line,
-                           const char *section,
-                           unsigned section_line,
-                           const char *lvalue,
-                           int ltype,
-                           const char *rvalue,
-                           void *data,
-                           void *userdata) {
+int config_parse_geneve_vni(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
         Geneve *v = userdata;
         uint32_t f;
         int r;
@@ -199,16 +135,18 @@
         return 0;
 }
 
-int config_parse_geneve_address(const char *unit,
-                                const char *filename,
-                                unsigned line,
-                                const char *section,
-                                unsigned section_line,
-                                const char *lvalue,
-                                int ltype,
-                                const char *rvalue,
-                                void *data,
-                                void *userdata) {
+int config_parse_geneve_address(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
         Geneve *v = userdata;
         union in_addr_union *addr = data, buffer;
         int r, f;
@@ -236,16 +174,18 @@
         return 0;
 }
 
-int config_parse_geneve_flow_label(const char *unit,
-                                   const char *filename,
-                                   unsigned line,
-                                   const char *section,
-                                   unsigned section_line,
-                                   const char *lvalue,
-                                   int ltype,
-                                   const char *rvalue,
-                                   void *data,
-                                   void *userdata) {
+int config_parse_geneve_flow_label(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
         Geneve *v = userdata;
         uint32_t f;
         int r;
@@ -272,16 +212,18 @@
         return 0;
 }
 
-int config_parse_geneve_ttl(const char *unit,
-                            const char *filename,
-                            unsigned line,
-                            const char *section,
-                            unsigned section_line,
-                            const char *lvalue,
-                            int ltype,
-                            const char *rvalue,
-                            void *data,
-                            void *userdata) {
+int config_parse_geneve_ttl(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
         Geneve *v = userdata;
         unsigned f;
         int r;
@@ -349,8 +291,9 @@
         .object_size = sizeof(Geneve),
         .init = geneve_init,
         .sections = NETDEV_COMMON_SECTIONS "GENEVE\0",
-        .create = netdev_geneve_create,
+        .fill_message_create = netdev_geneve_fill_message_create,
         .create_type = NETDEV_CREATE_INDEPENDENT,
         .config_verify = netdev_geneve_verify,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/ifb.c b/src/network/netdev/ifb.c
index 16ff49d..d7ff44c 100644
--- a/src/network/netdev/ifb.c
+++ b/src/network/netdev/ifb.c
@@ -1,11 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later
  * Copyright © 2019 VMware, Inc. */
 
+#include <linux/if_arp.h>
+
 #include "ifb.h"
 
 const NetDevVTable ifb_vtable = {
         .object_size = sizeof(IntermediateFunctionalBlock),
         .sections = NETDEV_COMMON_SECTIONS,
         .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/ipoib.c b/src/network/netdev/ipoib.c
new file mode 100644
index 0000000..5dd9286
--- /dev/null
+++ b/src/network/netdev/ipoib.c
@@ -0,0 +1,161 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/if_arp.h>
+#include <linux/if_link.h>
+
+#include "ipoib.h"
+#include "networkd-network.h"
+#include "parse-util.h"
+#include "string-table.h"
+
+assert_cc((int) IP_OVER_INFINIBAND_MODE_DATAGRAM  == (int) IPOIB_MODE_DATAGRAM);
+assert_cc((int) IP_OVER_INFINIBAND_MODE_CONNECTED == (int) IPOIB_MODE_CONNECTED);
+
+static void netdev_ipoib_init(NetDev *netdev) {
+        IPoIB *ipoib;
+
+        assert(netdev);
+
+        ipoib = IPOIB(netdev);
+
+        assert(ipoib);
+
+        ipoib->mode = _IP_OVER_INFINIBAND_MODE_INVALID;
+        ipoib->umcast = -1;
+}
+
+static int netdev_ipoib_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+        IPoIB *ipoib;
+        int r;
+
+        assert(netdev);
+        assert(link);
+        assert(m);
+
+        ipoib = IPOIB(netdev);
+
+        assert(ipoib);
+
+        if (ipoib->pkey > 0) {
+                r = sd_netlink_message_append_u16(m, IFLA_IPOIB_PKEY, ipoib->pkey);
+                if (r < 0)
+                        return r;
+        }
+
+        if (ipoib->mode >= 0) {
+                r = sd_netlink_message_append_u16(m, IFLA_IPOIB_MODE, ipoib->mode);
+                if (r < 0)
+                        return r;
+        }
+
+        if (ipoib->umcast >= 0) {
+                r = sd_netlink_message_append_u16(m, IFLA_IPOIB_UMCAST, ipoib->umcast);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+int ipoib_set_netlink_message(Link *link, sd_netlink_message *m) {
+        int r;
+
+        assert(link);
+        assert(link->network);
+        assert(m);
+
+        r = sd_netlink_message_set_flags(m, NLM_F_REQUEST | NLM_F_ACK);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container(m, IFLA_LINKINFO);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, link->kind);
+        if (r < 0)
+                return r;
+
+        if (link->network->ipoib_mode >= 0) {
+                r = sd_netlink_message_append_u16(m, IFLA_IPOIB_MODE, link->network->ipoib_mode);
+                if (r < 0)
+                        return r;
+        }
+
+        if (link->network->ipoib_umcast >= 0) {
+                r = sd_netlink_message_append_u16(m, IFLA_IPOIB_UMCAST, link->network->ipoib_umcast);
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_netlink_message_close_container(m);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_close_container(m);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static const char * const ipoib_mode_table[_IP_OVER_INFINIBAND_MODE_MAX] = {
+        [IP_OVER_INFINIBAND_MODE_DATAGRAM]  = "datagram",
+        [IP_OVER_INFINIBAND_MODE_CONNECTED] = "connected",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(ipoib_mode, IPoIBMode);
+DEFINE_CONFIG_PARSE_ENUM(config_parse_ipoib_mode, ipoib_mode, IPoIBMode, "Failed to parse IPoIB mode");
+
+int config_parse_ipoib_pkey(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint16_t u, *pkey = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *pkey = 0; /* 0 means unset. */
+                return 0;
+        }
+
+        r = safe_atou16(rvalue, &u);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse IPoIB pkey '%s', ignoring assignment: %m",
+                           rvalue);
+                return 0;
+        }
+        if (IN_SET(u, 0, 0x8000)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "IPoIB pkey cannot be 0 nor 0x8000, ignoring assignment: %s",
+                           rvalue);
+                return 0;
+        }
+
+        *pkey = u;
+        return 0;
+}
+
+
+const NetDevVTable ipoib_vtable = {
+        .object_size = sizeof(IPoIB),
+        .sections = NETDEV_COMMON_SECTIONS "IPoIB\0",
+        .init = netdev_ipoib_init,
+        .fill_message_create = netdev_ipoib_fill_message_create,
+        .create_type = NETDEV_CREATE_STACKED,
+        .iftype = ARPHRD_INFINIBAND,
+        .generate_mac = true,
+};
diff --git a/src/network/netdev/ipoib.h b/src/network/netdev/ipoib.h
new file mode 100644
index 0000000..415d3b1
--- /dev/null
+++ b/src/network/netdev/ipoib.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <errno.h>
+
+#include "conf-parser.h"
+#include "netdev.h"
+
+typedef enum IPoIBMode {
+        IP_OVER_INFINIBAND_MODE_DATAGRAM,
+        IP_OVER_INFINIBAND_MODE_CONNECTED,
+        _IP_OVER_INFINIBAND_MODE_MAX,
+        _IP_OVER_INFINIBAND_MODE_INVALID = -EINVAL,
+} IPoIBMode;
+
+typedef struct IPoIB {
+        NetDev meta;
+
+        uint16_t pkey;
+        IPoIBMode mode;
+        int umcast;
+} IPoIB;
+
+DEFINE_NETDEV_CAST(IPOIB, IPoIB);
+extern const NetDevVTable ipoib_vtable;
+
+int ipoib_set_netlink_message(Link *link, sd_netlink_message *m);
+
+CONFIG_PARSER_PROTOTYPE(config_parse_ipoib_pkey);
+CONFIG_PARSER_PROTOTYPE(config_parse_ipoib_mode);
diff --git a/src/network/netdev/ipvlan.c b/src/network/netdev/ipvlan.c
index 92a8f58..058eade 100644
--- a/src/network/netdev/ipvlan.c
+++ b/src/network/netdev/ipvlan.c
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <net/if.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
 
 #include "conf-parser.h"
 #include "ipvlan.h"
@@ -29,13 +31,13 @@
         if (m->mode != _NETDEV_IPVLAN_MODE_INVALID) {
                 r = sd_netlink_message_append_u16(req, IFLA_IPVLAN_MODE, m->mode);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPVLAN_MODE attribute: %m");
+                        return r;
         }
 
         if (m->flags != _NETDEV_IPVLAN_FLAGS_INVALID) {
                 r = sd_netlink_message_append_u16(req, IFLA_IPVLAN_FLAGS, m->flags);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPVLAN_FLAGS attribute: %m");
+                        return r;
         }
 
         return 0;
@@ -63,6 +65,7 @@
         .sections = NETDEV_COMMON_SECTIONS "IPVLAN\0",
         .fill_message_create = netdev_ipvlan_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
 
@@ -72,20 +75,18 @@
         .sections = NETDEV_COMMON_SECTIONS "IPVTAP\0",
         .fill_message_create = netdev_ipvlan_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
 
 IPVlanMode link_get_ipvlan_mode(Link *link) {
-        NetDev *netdev;
+        IPVlan *ipvlan;
 
-        if (!streq_ptr(link->kind, "ipvlan"))
+        assert(link);
+
+        ipvlan = IPVLAN(link->netdev);
+        if (!ipvlan)
                 return _NETDEV_IPVLAN_MODE_INVALID;
 
-        if (netdev_get(link->manager, link->ifname, &netdev) < 0)
-                return _NETDEV_IPVLAN_MODE_INVALID;
-
-        if (netdev->kind != NETDEV_KIND_IPVLAN)
-                return _NETDEV_IPVLAN_MODE_INVALID;
-
-        return IPVLAN(netdev)->mode;
+        return ipvlan->mode;
 }
diff --git a/src/network/netdev/l2tp-tunnel.c b/src/network/netdev/l2tp-tunnel.c
index 32ec024..547de24 100644
--- a/src/network/netdev/l2tp-tunnel.c
+++ b/src/network/netdev/l2tp-tunnel.c
@@ -10,11 +10,11 @@
 #include "netlink-util.h"
 #include "networkd-address.h"
 #include "networkd-manager.h"
+#include "networkd-route-util.h"
 #include "parse-util.h"
 #include "socket-util.h"
 #include "string-table.h"
 #include "string-util.h"
-#include "util.h"
 
 static const char* const l2tp_l2spec_type_table[_NETDEV_L2TP_L2SPECTYPE_MAX] = {
         [NETDEV_L2TP_L2SPECTYPE_NONE]    = "none",
@@ -46,15 +46,15 @@
         if (s->tunnel && s->section)
                 ordered_hashmap_remove(s->tunnel->sessions_by_section, s->section);
 
-        network_config_section_free(s->section);
+        config_section_free(s->section);
         free(s->name);
         return mfree(s);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(L2tpSession, l2tp_session_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(L2tpSession, l2tp_session_free);
 
 static int l2tp_session_new_static(L2tpTunnel *t, const char *filename, unsigned section_line, L2tpSession **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(l2tp_session_freep) L2tpSession *s = NULL;
         int r;
 
@@ -63,7 +63,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -83,7 +83,7 @@
                 .section = TAKE_PTR(n),
         };
 
-        r = ordered_hashmap_ensure_put(&t->sessions_by_section, &network_config_hash_ops, s->section, s);
+        r = ordered_hashmap_ensure_put(&t->sessions_by_section, &config_section_hash_ops, s->section, s);
         if (r < 0)
                 return r;
 
@@ -91,7 +91,7 @@
         return 0;
 }
 
-static int netdev_l2tp_fill_message_tunnel(NetDev *netdev, union in_addr_union *local_address, sd_netlink_message **ret) {
+static int netdev_l2tp_create_message_tunnel(NetDev *netdev, union in_addr_union *local_address, sd_netlink_message **ret) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         uint16_t encap_type;
         L2tpTunnel *t;
@@ -99,28 +99,25 @@
 
         assert(netdev);
         assert(local_address);
+        assert_se(t = L2TP(netdev));
 
-        t = L2TP(netdev);
-
-        assert(t);
-
-        r = sd_genl_message_new(netdev->manager->genl, SD_GENL_L2TP, L2TP_CMD_TUNNEL_CREATE, &m);
+        r = sd_genl_message_new(netdev->manager->genl, L2TP_GENL_NAME, L2TP_CMD_TUNNEL_CREATE, &m);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to create generic netlink message: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, L2TP_ATTR_CONN_ID, t->tunnel_id);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_CONN_ID attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, L2TP_ATTR_PEER_CONN_ID, t->peer_tunnel_id);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_PEER_CONN_ID attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, L2TP_ATTR_PROTO_VERSION, 3);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_PROTO_VERSION attribute: %m");
+                return r;
 
-        switch(t->l2tp_encap_type) {
+        switch (t->l2tp_encap_type) {
         case NETDEV_L2TP_ENCAPTYPE_IP:
                 encap_type = L2TP_ENCAPTYPE_IP;
                 break;
@@ -132,51 +129,51 @@
 
         r = sd_netlink_message_append_u16(m, L2TP_ATTR_ENCAP_TYPE, encap_type);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_ENCAP_TYPE attribute: %m");
+                return r;
 
         if (t->family == AF_INET) {
                 r = sd_netlink_message_append_in_addr(m, L2TP_ATTR_IP_SADDR, &local_address->in);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_IP_SADDR attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_in_addr(m, L2TP_ATTR_IP_DADDR, &t->remote.in);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_IP_DADDR attribute: %m");
+                        return r;
         } else {
                 r = sd_netlink_message_append_in6_addr(m, L2TP_ATTR_IP6_SADDR, &local_address->in6);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_IP6_SADDR attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_in6_addr(m, L2TP_ATTR_IP6_DADDR, &t->remote.in6);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_IP6_DADDR attribute: %m");
+                        return r;
         }
 
         if (encap_type == L2TP_ENCAPTYPE_UDP) {
                 r = sd_netlink_message_append_u16(m, L2TP_ATTR_UDP_SPORT, t->l2tp_udp_sport);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_UDP_SPORT, attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_u16(m, L2TP_ATTR_UDP_DPORT, t->l2tp_udp_dport);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_UDP_DPORT attribute: %m");
+                        return r;
 
                 if (t->udp_csum) {
                         r = sd_netlink_message_append_u8(m, L2TP_ATTR_UDP_CSUM, t->udp_csum);
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_UDP_CSUM attribute: %m");
+                                return r;
                 }
 
                 if (t->udp6_csum_tx) {
                         r = sd_netlink_message_append_flag(m, L2TP_ATTR_UDP_ZERO_CSUM6_TX);
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_UDP_ZERO_CSUM6_TX attribute: %m");
+                                return r;
                 }
 
                 if (t->udp6_csum_rx) {
                         r = sd_netlink_message_append_flag(m, L2TP_ATTR_UDP_ZERO_CSUM6_RX);
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_UDP_ZERO_CSUM6_RX attribute: %m");
+                                return r;
                 }
         }
 
@@ -185,7 +182,7 @@
         return 0;
 }
 
-static int netdev_l2tp_fill_message_session(NetDev *netdev, L2tpSession *session, sd_netlink_message **ret) {
+static int netdev_l2tp_create_message_session(NetDev *netdev, L2tpSession *session, sd_netlink_message **ret) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         uint16_t l2_spec_len;
         uint8_t l2_spec_type;
@@ -195,29 +192,29 @@
         assert(session);
         assert(session->tunnel);
 
-        r = sd_genl_message_new(netdev->manager->genl, SD_GENL_L2TP, L2TP_CMD_SESSION_CREATE, &m);
+        r = sd_genl_message_new(netdev->manager->genl, L2TP_GENL_NAME, L2TP_CMD_SESSION_CREATE, &m);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to create generic netlink message: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, L2TP_ATTR_CONN_ID, session->tunnel->tunnel_id);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_CONN_ID attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, L2TP_ATTR_PEER_CONN_ID, session->tunnel->peer_tunnel_id);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_PEER_CONN_ID attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, L2TP_ATTR_SESSION_ID, session->session_id);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_SESSION_ID attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, L2TP_ATTR_PEER_SESSION_ID, session->peer_session_id);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_PEER_SESSION_ID attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u16(m, L2TP_ATTR_PW_TYPE, L2TP_PWTYPE_ETH);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_PW_TYPE attribute: %m");
+                return r;
 
         switch (session->l2tp_l2spec_type) {
         case NETDEV_L2TP_L2SPECTYPE_NONE:
@@ -233,63 +230,129 @@
 
         r = sd_netlink_message_append_u8(m, L2TP_ATTR_L2SPEC_TYPE, l2_spec_type);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_L2SPEC_TYPE attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, L2TP_ATTR_L2SPEC_LEN, l2_spec_len);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_L2SPEC_LEN attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_string(m, L2TP_ATTR_IFNAME, session->name);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append L2TP_ATTR_IFNAME attribute: %m");
+                return r;
 
         *ret = TAKE_PTR(m);
 
         return 0;
 }
 
-static int l2tp_acquire_local_address_one(L2tpTunnel *t, Address *a, union in_addr_union *ret) {
-        if (a->family != t->family)
-                return -EINVAL;
-
-        if (in_addr_is_set(a->family, &a->in_addr_peer))
-                return -EINVAL;
-
-        if (t->local_address_type == NETDEV_L2TP_LOCAL_ADDRESS_STATIC &&
-            !FLAGS_SET(a->flags, IFA_F_PERMANENT))
-                return -EINVAL;
-
-        if (t->local_address_type == NETDEV_L2TP_LOCAL_ADDRESS_DYNAMIC &&
-            FLAGS_SET(a->flags, IFA_F_PERMANENT))
-                return -EINVAL;
-
-        *ret = a->in_addr;
-        return 0;
-}
-
-static int l2tp_acquire_local_address(L2tpTunnel *t, Link *link, union in_addr_union *ret) {
+static int link_get_l2tp_local_address(Link *link, L2tpTunnel *t, union in_addr_union *ret) {
         Address *a;
 
-        assert(t);
         assert(link);
-        assert(ret);
-        assert(IN_SET(t->family, AF_INET, AF_INET6));
+        assert(t);
+
+        SET_FOREACH(a, link->addresses) {
+                if (!address_is_ready(a))
+                        continue;
+
+                if (a->family != t->family)
+                        continue;
+
+                if (in_addr_is_set(a->family, &a->in_addr_peer))
+                        continue;
+
+                if (t->local_address_type == NETDEV_L2TP_LOCAL_ADDRESS_STATIC &&
+                    !FLAGS_SET(a->flags, IFA_F_PERMANENT))
+                        continue;
+
+                if (t->local_address_type == NETDEV_L2TP_LOCAL_ADDRESS_DYNAMIC &&
+                    FLAGS_SET(a->flags, IFA_F_PERMANENT))
+                        continue;
+
+                if (ret)
+                        *ret = a->in_addr;
+        }
+
+        return -ENOENT;
+}
+
+static int l2tp_get_local_address(NetDev *netdev, union in_addr_union *ret) {
+        Link *link = NULL;
+        L2tpTunnel *t;
+        Address *a = NULL;
+        int r;
+
+        assert(netdev);
+        assert(netdev->manager);
+        assert_se(t = L2TP(netdev));
+
+        if (t->local_ifname) {
+                r = link_get_by_name(netdev->manager, t->local_ifname, &link);
+                if (r < 0)
+                        return r;
+
+                if (!link_is_ready_to_configure(link, /* allow_unmanaged = */ false))
+                        return -EBUSY;
+        }
+
+        if (netdev->manager->manage_foreign_routes) {
+                /* First, check if the remote address is accessible. */
+                if (link)
+                        r = link_address_is_reachable(link, t->family, &t->remote, &t->local, &a);
+                else
+                        r = manager_address_is_reachable(netdev->manager, t->family, &t->remote, &t->local, &a);
+                if (r < 0)
+                        return r;
+        }
 
         if (in_addr_is_set(t->family, &t->local)) {
                 /* local address is explicitly specified. */
-                *ret = t->local;
+
+                if (!a) {
+                        if (link)
+                                r = link_get_address(link, t->family, &t->local, 0, &a);
+                        else
+                                r = manager_get_address(netdev->manager, t->family, &t->local, 0, &a);
+                        if (r < 0)
+                                return r;
+
+                        if (!address_is_ready(a))
+                                return -EBUSY;
+                }
+
+                if (ret)
+                        *ret = a->in_addr;
+
                 return 0;
         }
 
-        SET_FOREACH(a, link->addresses)
-                if (l2tp_acquire_local_address_one(t, a, ret) >= 0)
-                        return 1;
+        if (a) {
+                if (t->local_address_type == NETDEV_L2TP_LOCAL_ADDRESS_STATIC &&
+                    !FLAGS_SET(a->flags, IFA_F_PERMANENT))
+                        return -EINVAL;
 
-        SET_FOREACH(a, link->addresses_foreign)
-                if (l2tp_acquire_local_address_one(t, a, ret) >= 0)
-                        return 1;
+                if (t->local_address_type == NETDEV_L2TP_LOCAL_ADDRESS_DYNAMIC &&
+                    FLAGS_SET(a->flags, IFA_F_PERMANENT))
+                        return -EINVAL;
 
-        return -ENODATA;
+                if (ret)
+                        *ret = a->in_addr;
+
+                return 0;
+        }
+
+        if (link)
+                return link_get_l2tp_local_address(link, t, ret);
+
+        HASHMAP_FOREACH(link, netdev->manager->links_by_index) {
+                if (!link_is_ready_to_configure(link, /* allow_unmanaged = */ false))
+                        continue;
+
+                if (link_get_l2tp_local_address(link, t, ret) >= 0)
+                        return 0;
+        }
+
+        return -ENOENT;
 }
 
 static void l2tp_session_destroy_callback(L2tpSession *session) {
@@ -325,9 +388,9 @@
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *n = NULL;
         int r;
 
-        r = netdev_l2tp_fill_message_session(netdev, session, &n);
+        r = netdev_l2tp_create_message_session(netdev, session, &n);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
 
         r = netlink_call_async(netdev->manager->genl, NULL, n, l2tp_create_session_handler,
                                l2tp_session_destroy_callback, session);
@@ -355,7 +418,7 @@
                 log_netdev_info(netdev, "netdev exists, using existing without changing its parameters");
         else if (r < 0) {
                 log_netdev_warning_errno(netdev, r, "netdev could not be created: %m");
-                netdev_drop(netdev);
+                netdev_enter_failed(netdev);
 
                 return 1;
         }
@@ -368,32 +431,26 @@
         return 1;
 }
 
-static int l2tp_create_tunnel(NetDev *netdev, Link *link) {
+static int l2tp_create_tunnel(NetDev *netdev) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         union in_addr_union local_address;
         L2tpTunnel *t;
         int r;
 
         assert(netdev);
+        assert_se(t = L2TP(netdev));
 
-        t = L2TP(netdev);
-
-        assert(t);
-
-        r = l2tp_acquire_local_address(t, link, &local_address);
+        r = l2tp_get_local_address(netdev, &local_address);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not find local address.");
 
-        if (r > 0 && DEBUG_LOGGING) {
-                _cleanup_free_ char *str = NULL;
+        if (t->local_address_type >= 0 && DEBUG_LOGGING)
+                log_netdev_debug(netdev, "Local address %s acquired.",
+                                 IN_ADDR_TO_STRING(t->family, &local_address));
 
-                (void) in_addr_to_string(t->family, &local_address, &str);
-                log_netdev_debug(netdev, "Local address %s acquired.", strna(str));
-        }
-
-        r = netdev_l2tp_fill_message_tunnel(netdev, &local_address, &m);
+        r = netdev_l2tp_create_message_tunnel(netdev, &local_address, &m);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
 
         r = netlink_call_async(netdev->manager->genl, NULL, m, l2tp_create_tunnel_handler,
                                netdev_destroy_callback, netdev);
@@ -405,7 +462,11 @@
         return 0;
 }
 
-int config_parse_l2tp_tunnel_address(
+static int netdev_l2tp_is_ready_to_create(NetDev *netdev, Link *link) {
+        return l2tp_get_local_address(netdev, NULL) >= 0;
+}
+
+int config_parse_l2tp_tunnel_local_address(
                 const char *unit,
                 const char *filename,
                 unsigned line,
@@ -417,45 +478,139 @@
                 void *data,
                 void *userdata) {
 
-        L2tpTunnel *t = userdata;
-        union in_addr_union *addr = data;
-        int r;
+        _cleanup_free_ char *addr_or_type = NULL, *ifname = NULL;
+        L2tpLocalAddressType type;
+        L2tpTunnel *t = ASSERT_PTR(userdata);
+        const char *p = ASSERT_PTR(rvalue);
+        union in_addr_union a;
+        int r, f;
+
+        assert(filename);
+        assert(lvalue);
+
+        if (isempty(rvalue)) {
+                t->local_ifname = mfree(t->local_ifname);
+                t->local_address_type = NETDEV_L2TP_LOCAL_ADDRESS_AUTO;
+                t->local = IN_ADDR_NULL;
+
+                if (!in_addr_is_set(t->family, &t->remote))
+                        /* If Remote= is not specified yet, then also clear family. */
+                        t->family = AF_UNSPEC;
+
+                return 0;
+        }
+
+        r = extract_first_word(&p, &addr_or_type, "@", 0);
+        if (r < 0)
+                return log_oom();
+        if (r == 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid L2TP Tunnel address specified in %s=, ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        if (!isempty(p)) {
+                if (!ifname_valid_full(p, IFNAME_VALID_ALTERNATIVE)) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Invalid interface name specified in %s=, ignoring assignment: %s", lvalue, rvalue);
+                        return 0;
+                }
+
+                ifname = strdup(p);
+                if (!ifname)
+                        return log_oom();
+        }
+
+        type = l2tp_local_address_type_from_string(addr_or_type);
+        if (type >= 0) {
+                free_and_replace(t->local_ifname, ifname);
+                t->local_address_type = type;
+                t->local = IN_ADDR_NULL;
+
+                if (!in_addr_is_set(t->family, &t->remote))
+                        /* If Remote= is not specified yet, then also clear family. */
+                        t->family = AF_UNSPEC;
+
+                return 0;
+        }
+
+        r = in_addr_from_string_auto(addr_or_type, &f, &a);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Invalid L2TP Tunnel local address \"%s\" specified, ignoring assignment: %s", addr_or_type, rvalue);
+                return 0;
+        }
+
+        if (in_addr_is_null(f, &a)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "L2TP Tunnel local address cannot be null, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (t->family != AF_UNSPEC && t->family != f) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Address family does not match the previous assignment, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        t->family = f;
+        t->local = a;
+        free_and_replace(t->local_ifname, ifname);
+        t->local_address_type = _NETDEV_L2TP_LOCAL_ADDRESS_INVALID;
+        return 0;
+}
+
+int config_parse_l2tp_tunnel_remote_address(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        L2tpTunnel *t = ASSERT_PTR(userdata);
+        union in_addr_union a;
+        int r, f;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
-        if (streq(lvalue, "Local")) {
-                L2tpLocalAddressType addr_type;
+        if (isempty(rvalue)) {
+                t->remote = IN_ADDR_NULL;
 
-                if (isempty(rvalue))
-                        addr_type = NETDEV_L2TP_LOCAL_ADDRESS_AUTO;
-                else
-                        addr_type = l2tp_local_address_type_from_string(rvalue);
+                if (!in_addr_is_set(t->family, &t->local))
+                        /* If Local= is not specified yet, then also clear family. */
+                        t->family = AF_UNSPEC;
 
-                if (addr_type >= 0) {
-                        if (!in_addr_is_set(t->family, &t->remote))
-                                /* If Remote= is not specified yet, then also clear family. */
-                                t->family = AF_UNSPEC;
-
-                        t->local = IN_ADDR_NULL;
-                        t->local_address_type = addr_type;
-
-                        return 0;
-                }
-        }
-
-        if (t->family == AF_UNSPEC)
-                r = in_addr_from_string_auto(rvalue, &t->family, addr);
-        else
-                r = in_addr_from_string(t->family, rvalue, addr);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Invalid L2TP Tunnel address specified in %s='%s', ignoring assignment: %m", lvalue, rvalue);
                 return 0;
         }
 
+        r = in_addr_from_string_auto(rvalue, &f, &a);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Invalid L2TP Tunnel remote address specified, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (in_addr_is_null(f, &a)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "L2TP Tunnel remote address cannot be null, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (t->family != AF_UNSPEC && t->family != f) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Address family does not match the previous assignment, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        t->family = f;
+        t->remote = a;
         return 0;
 }
 
@@ -709,14 +864,16 @@
         assert(t);
 
         ordered_hashmap_free_with_destructor(t->sessions_by_section, l2tp_session_free);
+        free(t->local_ifname);
 }
 
 const NetDevVTable l2tptnl_vtable = {
         .object_size = sizeof(L2tpTunnel),
         .init = l2tp_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "L2TP\0L2TPSession\0",
-        .create_after_configured = l2tp_create_tunnel,
+        .create = l2tp_create_tunnel,
         .done = l2tp_tunnel_done,
-        .create_type = NETDEV_CREATE_AFTER_CONFIGURED,
+        .create_type = NETDEV_CREATE_INDEPENDENT,
+        .is_ready_to_create = netdev_l2tp_is_ready_to_create,
         .config_verify = netdev_l2tp_tunnel_verify,
 };
diff --git a/src/network/netdev/l2tp-tunnel.h b/src/network/netdev/l2tp-tunnel.h
index a884d21..6028b35 100644
--- a/src/network/netdev/l2tp-tunnel.h
+++ b/src/network/netdev/l2tp-tunnel.h
@@ -34,7 +34,7 @@
 
 typedef struct L2tpSession {
         L2tpTunnel *tunnel;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
         char *name;
 
@@ -58,6 +58,7 @@
         bool udp6_csum_rx;
         bool udp6_csum_tx;
 
+        char *local_ifname;
         L2tpLocalAddressType local_address_type;
         union in_addr_union local;
         union in_addr_union remote;
@@ -70,7 +71,8 @@
 DEFINE_NETDEV_CAST(L2TP, L2tpTunnel);
 extern const NetDevVTable l2tptnl_vtable;
 
-CONFIG_PARSER_PROTOTYPE(config_parse_l2tp_tunnel_address);
+CONFIG_PARSER_PROTOTYPE(config_parse_l2tp_tunnel_local_address);
+CONFIG_PARSER_PROTOTYPE(config_parse_l2tp_tunnel_remote_address);
 CONFIG_PARSER_PROTOTYPE(config_parse_l2tp_tunnel_id);
 CONFIG_PARSER_PROTOTYPE(config_parse_l2tp_encap_type);
 CONFIG_PARSER_PROTOTYPE(config_parse_l2tp_session_l2spec);
diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c
index 77c5f8c..0da3dd4 100644
--- a/src/network/netdev/macsec.c
+++ b/src/network/netdev/macsec.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <netinet/in.h>
+#include <linux/if_arp.h>
 #include <linux/if_ether.h>
 #include <linux/if_macsec.h>
 #include <linux/genetlink.h>
@@ -13,11 +14,10 @@
 #include "memory-util.h"
 #include "netlink-util.h"
 #include "networkd-manager.h"
-#include "path-util.h"
+#include "parse-helpers.h"
 #include "socket-util.h"
 #include "string-table.h"
 #include "string-util.h"
-#include "util.h"
 
 static void security_association_clear(SecurityAssociation *sa) {
         if (!sa)
@@ -42,16 +42,16 @@
         if (c->macsec && c->section)
                 ordered_hashmap_remove(c->macsec->receive_associations_by_section, c->section);
 
-        network_config_section_free(c->section);
+        config_section_free(c->section);
         security_association_clear(&c->sa);
 
         return mfree(c);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(ReceiveAssociation, macsec_receive_association_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(ReceiveAssociation, macsec_receive_association_free);
 
 static int macsec_receive_association_new_static(MACsec *s, const char *filename, unsigned section_line, ReceiveAssociation **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(macsec_receive_association_freep) ReceiveAssociation *c = NULL;
         int r;
 
@@ -60,7 +60,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -81,7 +81,7 @@
 
         security_association_init(&c->sa);
 
-        r = ordered_hashmap_ensure_put(&s->receive_associations_by_section, &network_config_hash_ops, c->section, c);
+        r = ordered_hashmap_ensure_put(&s->receive_associations_by_section, &config_section_hash_ops, c->section, c);
         if (r < 0)
                 return r;
 
@@ -102,12 +102,12 @@
                         ordered_hashmap_remove(c->macsec->receive_channels_by_section, c->section);
         }
 
-        network_config_section_free(c->section);
+        config_section_free(c->section);
 
         return mfree(c);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(ReceiveChannel, macsec_receive_channel_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(ReceiveChannel, macsec_receive_channel_free);
 
 static int macsec_receive_channel_new(MACsec *s, uint64_t sci, ReceiveChannel **ret) {
         ReceiveChannel *c;
@@ -128,7 +128,7 @@
 }
 
 static int macsec_receive_channel_new_static(MACsec *s, const char *filename, unsigned section_line, ReceiveChannel **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(macsec_receive_channel_freep) ReceiveChannel *c = NULL;
         int r;
 
@@ -137,7 +137,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -153,7 +153,7 @@
 
         c->section = TAKE_PTR(n);
 
-        r = ordered_hashmap_ensure_put(&s->receive_channels_by_section, &network_config_hash_ops, c->section, c);
+        r = ordered_hashmap_ensure_put(&s->receive_channels_by_section, &config_section_hash_ops, c->section, c);
         if (r < 0)
                 return r;
 
@@ -169,16 +169,16 @@
         if (a->macsec && a->section)
                 ordered_hashmap_remove(a->macsec->transmit_associations_by_section, a->section);
 
-        network_config_section_free(a->section);
+        config_section_free(a->section);
         security_association_clear(&a->sa);
 
         return mfree(a);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(TransmitAssociation, macsec_transmit_association_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(TransmitAssociation, macsec_transmit_association_free);
 
 static int macsec_transmit_association_new_static(MACsec *s, const char *filename, unsigned section_line, TransmitAssociation **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(macsec_transmit_association_freep) TransmitAssociation *a = NULL;
         int r;
 
@@ -187,7 +187,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -208,7 +208,7 @@
 
         security_association_init(&a->sa);
 
-        r = ordered_hashmap_ensure_put(&s->transmit_associations_by_section, &network_config_hash_ops, a->section, a);
+        r = ordered_hashmap_ensure_put(&s->transmit_associations_by_section, &config_section_hash_ops, a->section, a);
         if (r < 0)
                 return r;
 
@@ -217,20 +217,20 @@
         return 0;
 }
 
-static int netdev_macsec_fill_message(NetDev *netdev, int command, sd_netlink_message **ret) {
+static int netdev_macsec_create_message(NetDev *netdev, int command, sd_netlink_message **ret) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(netdev);
         assert(netdev->ifindex > 0);
 
-        r = sd_genl_message_new(netdev->manager->genl, SD_GENL_MACSEC, command, &m);
+        r = sd_genl_message_new(netdev->manager->genl, MACSEC_GENL_NAME, command, &m);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Failed to create generic netlink message: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, MACSEC_ATTR_IFINDEX, netdev->ifindex);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append MACSEC_ATTR_IFINDEX attribute: %m");
+                return r;
 
         *ret = TAKE_PTR(m);
 
@@ -246,15 +246,15 @@
 
         r = sd_netlink_message_open_container(m, MACSEC_ATTR_RXSC_CONFIG);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append MACSEC_ATTR_RXSC_CONFIG attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u64(m, MACSEC_RXSC_ATTR_SCI, sci->as_uint64);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append MACSEC_RXSC_ATTR_SCI attribute: %m");
+                return r;
 
         r = sd_netlink_message_close_container(m);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append MACSEC_ATTR_RXSC_CONFIG attribute: %m");
+                return r;
 
         return 0;
 }
@@ -268,37 +268,37 @@
 
         r = sd_netlink_message_open_container(m, MACSEC_ATTR_SA_CONFIG);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append MACSEC_ATTR_SA_CONFIG attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, MACSEC_SA_ATTR_AN, a->association_number);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append MACSEC_SA_ATTR_AN attribute: %m");
+                return r;
 
         if (a->packet_number > 0) {
                 r = sd_netlink_message_append_u32(m, MACSEC_SA_ATTR_PN, a->packet_number);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append MACSEC_SA_ATTR_PN attribute: %m");
+                        return r;
         }
 
         if (a->key_len > 0) {
                 r = sd_netlink_message_append_data(m, MACSEC_SA_ATTR_KEYID, a->key_id, MACSEC_KEYID_LEN);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append MACSEC_SA_ATTR_KEYID attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_data(m, MACSEC_SA_ATTR_KEY, a->key, a->key_len);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append MACSEC_SA_ATTR_KEY attribute: %m");
+                        return r;
         }
 
         if (a->activate >= 0) {
                 r = sd_netlink_message_append_u8(m, MACSEC_SA_ATTR_ACTIVE, a->activate);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append MACSEC_SA_ATTR_ACTIVE attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(m);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append MACSEC_ATTR_SA_CONFIG attribute: %m");
+                return r;
 
         return 0;
 }
@@ -312,12 +312,11 @@
         r = sd_netlink_message_get_errno(m);
         if (r == -EEXIST)
                 log_netdev_info(netdev,
-                                "MACsec receive secure association exists, "
-                                "using existing without changing its parameters");
+                                "MACsec receive secure association exists, using it without changing parameters");
         else if (r < 0) {
                 log_netdev_warning_errno(netdev, r,
                                          "Failed to add receive secure association: %m");
-                netdev_drop(netdev);
+                netdev_enter_failed(netdev);
 
                 return 1;
         }
@@ -334,17 +333,17 @@
         assert(netdev);
         assert(a);
 
-        r = netdev_macsec_fill_message(netdev, MACSEC_CMD_ADD_RXSA, &m);
+        r = netdev_macsec_create_message(netdev, MACSEC_CMD_ADD_RXSA, &m);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
 
         r = netdev_macsec_fill_message_sa(netdev, &a->sa, m);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to fill netlink message: %m");
 
         r = netdev_macsec_fill_message_sci(netdev, &a->sci, m);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to fill netlink message: %m");
 
         r = netlink_call_async(netdev->manager->genl, NULL, m, macsec_receive_association_handler,
                                netdev_destroy_callback, netdev);
@@ -370,12 +369,11 @@
         r = sd_netlink_message_get_errno(m);
         if (r == -EEXIST)
                 log_netdev_debug(netdev,
-                                 "MACsec receive channel exists, "
-                                 "using existing without changing its parameters");
+                                 "MACsec receive channel exists, using it without changing parameters");
         else if (r < 0) {
                 log_netdev_warning_errno(netdev, r,
                                          "Failed to add receive secure channel: %m");
-                netdev_drop(netdev);
+                netdev_enter_failed(netdev);
 
                 return 1;
         }
@@ -387,7 +385,7 @@
                 if (r < 0) {
                         log_netdev_warning_errno(netdev, r,
                                                  "Failed to configure receive security association: %m");
-                        netdev_drop(netdev);
+                        netdev_enter_failed(netdev);
                         return 1;
                 }
         }
@@ -409,13 +407,13 @@
         assert(netdev);
         assert(c);
 
-        r = netdev_macsec_fill_message(netdev, MACSEC_CMD_ADD_RXSC, &m);
+        r = netdev_macsec_create_message(netdev, MACSEC_CMD_ADD_RXSC, &m);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
 
         r = netdev_macsec_fill_message_sci(netdev, &c->sci, m);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to fill netlink message: %m");
 
         r = netlink_call_async(netdev->manager->genl, NULL, m, macsec_receive_channel_handler,
                                receive_channel_destroy_callback, c);
@@ -436,12 +434,11 @@
         r = sd_netlink_message_get_errno(m);
         if (r == -EEXIST)
                 log_netdev_info(netdev,
-                                "MACsec transmit secure association exists, "
-                                "using existing without changing its parameters");
+                                "MACsec transmit secure association exists, using it without changing parameters");
         else if (r < 0) {
                 log_netdev_warning_errno(netdev, r,
                                          "Failed to add transmit secure association: %m");
-                netdev_drop(netdev);
+                netdev_enter_failed(netdev);
 
                 return 1;
         }
@@ -458,13 +455,13 @@
         assert(netdev);
         assert(a);
 
-        r = netdev_macsec_fill_message(netdev, MACSEC_CMD_ADD_TXSA, &m);
+        r = netdev_macsec_create_message(netdev, MACSEC_CMD_ADD_TXSA, &m);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
 
         r = netdev_macsec_fill_message_sa(netdev, &a->sa, m);
         if (r < 0)
-                return r;
+                return log_netdev_error_errno(netdev, r, "Failed to fill netlink message: %m");
 
         r = netlink_call_async(netdev->manager->genl, NULL, m, macsec_transmit_association_handler,
                                netdev_destroy_callback, netdev);
@@ -476,7 +473,7 @@
         return 0;
 }
 
-static int netdev_macsec_configure(NetDev *netdev, Link *link, sd_netlink_message *m) {
+static int netdev_macsec_configure(NetDev *netdev, Link *link) {
         TransmitAssociation *a;
         ReceiveChannel *c;
         MACsec *s;
@@ -510,23 +507,25 @@
 
         v = MACSEC(netdev);
 
+        assert(v);
+
         if (v->port > 0) {
                 r = sd_netlink_message_append_u16(m, IFLA_MACSEC_PORT, v->port);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACSEC_PORT attribute: %m");
+                        return r;
         }
 
         if (v->encrypt >= 0) {
                 r = sd_netlink_message_append_u8(m, IFLA_MACSEC_ENCRYPT, v->encrypt);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACSEC_ENCRYPT attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u8(m, IFLA_MACSEC_ENCODING_SA, v->encoding_an);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACSEC_ENCODING_SA attribute: %m");
+                return r;
 
-        return r;
+        return 0;
 }
 
 int config_parse_macsec_port(
@@ -620,7 +619,7 @@
         if (r < 0)
                 return log_oom();
 
-        r = ether_addr_from_string(rvalue, b ? &b->sci.mac : &c->sci.mac);
+        r = parse_ether_addr(rvalue, b ? &b->sci.mac : &c->sci.mac);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to parse MAC address for secure channel identifier. "
@@ -841,7 +840,7 @@
         }
         if (l > MACSEC_KEYID_LEN) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Specified KeyId= is larger then the allowed maximum (%zu > %u), ignoring: %s",
+                           "Specified KeyId= is larger then the allowed maximum (%zu > %i), ignoring: %s",
                            l, MACSEC_KEYID_LEN, rvalue);
                 return 0;
         }
@@ -970,8 +969,6 @@
         if (!sa->key_file)
                 return 0;
 
-        (void) warn_file_is_world_accessible(sa->key_file, NULL, NULL, 0);
-
         r = read_full_file_full(
                         AT_FDCWD, sa->key_file, UINT64_MAX, SIZE_MAX,
                         READ_FULL_FILE_SECURE | READ_FULL_FILE_UNHEX | READ_FULL_FILE_WARN_WORLD_READABLE | READ_FULL_FILE_CONNECT_SOCKET,
@@ -1230,5 +1227,6 @@
         .done = macsec_done,
         .create_type = NETDEV_CREATE_STACKED,
         .config_verify = netdev_macsec_verify,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/macsec.h b/src/network/netdev/macsec.h
index 4d88e49..17bb1ca 100644
--- a/src/network/netdev/macsec.h
+++ b/src/network/netdev/macsec.h
@@ -39,14 +39,14 @@
 
 typedef struct TransmitAssociation {
         MACsec *macsec;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
         SecurityAssociation sa;
 } TransmitAssociation;
 
 typedef struct ReceiveAssociation {
         MACsec *macsec;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
         MACsecSCI sci;
         SecurityAssociation sa;
@@ -54,7 +54,7 @@
 
 typedef struct ReceiveChannel {
         MACsec *macsec;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
         MACsecSCI sci;
         ReceiveAssociation *rxsa[MACSEC_MAX_ASSOCIATION_NUMBER];
diff --git a/src/network/netdev/macvlan.c b/src/network/netdev/macvlan.c
index 9d037c2..1114bb0 100644
--- a/src/network/netdev/macvlan.c
+++ b/src/network/netdev/macvlan.c
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <net/if.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
 
 #include "conf-parser.h"
 #include "macvlan.h"
@@ -31,40 +33,40 @@
 
                 r = sd_netlink_message_append_u32(req, IFLA_MACVLAN_MACADDR_MODE, MACVLAN_MACADDR_SET);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_MACADDR_MODE attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_open_container(req, IFLA_MACVLAN_MACADDR_DATA);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not open IFLA_MACVLAN_MACADDR_DATA container: %m");
+                        return r;
 
                 SET_FOREACH(mac_addr, m->match_source_mac) {
                         r = sd_netlink_message_append_ether_addr(req, IFLA_MACVLAN_MACADDR, mac_addr);
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_MACADDR attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not close IFLA_MACVLAN_MACADDR_DATA container: %m");
+                        return r;
         }
 
         if (m->mode != _NETDEV_MACVLAN_MODE_INVALID) {
                 r = sd_netlink_message_append_u32(req, IFLA_MACVLAN_MODE, m->mode);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_MODE attribute: %m");
+                        return r;
         }
 
         /* set the nopromisc flag if Promiscuous= of the link is explicitly set to false */
         if (m->mode == NETDEV_MACVLAN_MODE_PASSTHRU && link->network->promiscuous == 0) {
                 r = sd_netlink_message_append_u16(req, IFLA_MACVLAN_FLAGS, MACVLAN_FLAG_NOPROMISC);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_FLAGS attribute: %m");
+                        return r;
         }
 
         if (m->bc_queue_length != UINT32_MAX) {
                 r = sd_netlink_message_append_u32(req, IFLA_MACVLAN_BC_QUEUE_LEN, m->bc_queue_length);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_BC_QUEUE_LEN attribute: %m");
+                        return r;
         }
 
         return 0;
@@ -82,7 +84,7 @@
                 void *data,
                 void *userdata) {
 
-        MacVlan *m = userdata;
+        MacVlan *m = ASSERT_PTR(userdata);
         uint32_t v;
         int r;
 
@@ -91,7 +93,6 @@
         assert(lvalue);
         assert(rvalue);
         assert(data);
-        assert(userdata);
 
         if (isempty(rvalue)) {
                 m->bc_queue_length = UINT32_MAX;
@@ -127,7 +128,7 @@
 
         assert(m);
 
-        set_free_free(m->match_source_mac);
+        set_free(m->match_source_mac);
 }
 
 static void macvlan_init(NetDev *n) {
@@ -153,6 +154,7 @@
         .sections = NETDEV_COMMON_SECTIONS "MACVTAP\0",
         .fill_message_create = netdev_macvlan_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
 
@@ -163,5 +165,6 @@
         .sections = NETDEV_COMMON_SECTIONS "MACVLAN\0",
         .fill_message_create = netdev_macvlan_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/netdev-gperf.gperf b/src/network/netdev/netdev-gperf.gperf
index 9dd0814..3cfcd51 100644
--- a/src/network/netdev/netdev-gperf.gperf
+++ b/src/network/netdev/netdev-gperf.gperf
@@ -11,6 +11,7 @@
 #include "conf-parser.h"
 #include "fou-tunnel.h"
 #include "geneve.h"
+#include "ipoib.h"
 #include "ipvlan.h"
 #include "l2tp-tunnel.h"
 #include "macsec.h"
@@ -26,6 +27,7 @@
 #include "vxcan.h"
 #include "vxlan.h"
 #include "wireguard.h"
+#include "wlan.h"
 #include "xfrm.h"
 %}
 struct ConfigPerfItem;
@@ -43,13 +45,14 @@
 Match.Virtualization,                     config_parse_net_condition,                CONDITION_VIRTUALIZATION,      offsetof(NetDev, conditions)
 Match.KernelCommandLine,                  config_parse_net_condition,                CONDITION_KERNEL_COMMAND_LINE, offsetof(NetDev, conditions)
 Match.KernelVersion,                      config_parse_net_condition,                CONDITION_KERNEL_VERSION,      offsetof(NetDev, conditions)
+Match.Credential,                         config_parse_net_condition,                CONDITION_CREDENTIAL,          offsetof(NetDev, conditions)
 Match.Architecture,                       config_parse_net_condition,                CONDITION_ARCHITECTURE,        offsetof(NetDev, conditions)
 Match.Firmware,                           config_parse_net_condition,                CONDITION_FIRMWARE,            offsetof(NetDev, conditions)
 NetDev.Description,                       config_parse_string,                       0,                             offsetof(NetDev, description)
 NetDev.Name,                              config_parse_ifname,                       0,                             offsetof(NetDev, ifname)
 NetDev.Kind,                              config_parse_netdev_kind,                  0,                             offsetof(NetDev, kind)
 NetDev.MTUBytes,                          config_parse_mtu,                          AF_UNSPEC,                     offsetof(NetDev, mtu)
-NetDev.MACAddress,                        config_parse_hwaddr,                       0,                             offsetof(NetDev, mac)
+NetDev.MACAddress,                        config_parse_netdev_hw_addr,               ETH_ALEN,                      offsetof(NetDev, hw_addr)
 VLAN.Id,                                  config_parse_vlanid,                       0,                             offsetof(VLan, id)
 VLAN.Protocol,                            config_parse_vlanprotocol,                 0,                             offsetof(VLan, protocol)
 VLAN.GVRP,                                config_parse_tristate,                     0,                             offsetof(VLan, gvrp)
@@ -59,16 +62,16 @@
 VLAN.EgressQOSMaps,                       config_parse_vlan_qos_maps,                0,                             offsetof(VLan, egress_qos_maps)
 VLAN.IngressQOSMaps,                      config_parse_vlan_qos_maps,                0,                             offsetof(VLan, ingress_qos_maps)
 MACVLAN.Mode,                             config_parse_macvlan_mode,                 0,                             offsetof(MacVlan, mode)
-MACVLAN.SourceMACAddress,                 config_parse_hwaddrs,                      0,                             offsetof(MacVlan, match_source_mac)
+MACVLAN.SourceMACAddress,                 config_parse_ether_addrs,                  0,                             offsetof(MacVlan, match_source_mac)
 MACVLAN.BroadcastMulticastQueueLength,    config_parse_macvlan_broadcast_queue_size, 0,                             offsetof(MacVlan, bc_queue_length)
 MACVTAP.Mode,                             config_parse_macvlan_mode,                 0,                             offsetof(MacVlan, mode)
-MACVTAP.SourceMACAddress,                 config_parse_hwaddrs,                      0,                             offsetof(MacVlan, match_source_mac)
+MACVTAP.SourceMACAddress,                 config_parse_ether_addrs,                  0,                             offsetof(MacVlan, match_source_mac)
 IPVLAN.Mode,                              config_parse_ipvlan_mode,                  0,                             offsetof(IPVlan, mode)
 IPVLAN.Flags,                             config_parse_ipvlan_flags,                 0,                             offsetof(IPVlan, flags)
 IPVTAP.Mode,                              config_parse_ipvlan_mode,                  0,                             offsetof(IPVlan, mode)
 IPVTAP.Flags,                             config_parse_ipvlan_flags,                 0,                             offsetof(IPVlan, flags)
-Tunnel.Local,                             config_parse_tunnel_address,               0,                             offsetof(Tunnel, local)
-Tunnel.Remote,                            config_parse_tunnel_address,               0,                             offsetof(Tunnel, remote)
+Tunnel.Local,                             config_parse_tunnel_local_address,         0,                             0
+Tunnel.Remote,                            config_parse_tunnel_remote_address,        0,                             0
 Tunnel.TOS,                               config_parse_unsigned,                     0,                             offsetof(Tunnel, tos)
 Tunnel.TTL,                               config_parse_unsigned,                     0,                             offsetof(Tunnel, ttl)
 Tunnel.Key,                               config_parse_tunnel_key,                   0,                             offsetof(Tunnel, key)
@@ -76,9 +79,9 @@
 Tunnel.OutputKey,                         config_parse_tunnel_key,                   0,                             offsetof(Tunnel, okey)
 Tunnel.DiscoverPathMTU,                   config_parse_bool,                         0,                             offsetof(Tunnel, pmtudisc)
 Tunnel.Mode,                              config_parse_ip6tnl_mode,                  0,                             offsetof(Tunnel, ip6tnl_mode)
-Tunnel.IPv6FlowLabel,                     config_parse_ipv6_flowlabel,               0,                             offsetof(Tunnel, ipv6_flowlabel)
+Tunnel.IPv6FlowLabel,                     config_parse_ipv6_flowlabel,               0,                             0
 Tunnel.CopyDSCP,                          config_parse_bool,                         0,                             offsetof(Tunnel, copy_dscp)
-Tunnel.EncapsulationLimit,                config_parse_encap_limit,                  0,                             offsetof(Tunnel, encap_limit)
+Tunnel.EncapsulationLimit,                config_parse_encap_limit,                  0,                             0
 Tunnel.Independent,                       config_parse_bool,                         0,                             offsetof(Tunnel, independent)
 Tunnel.AssignToLoopback,                  config_parse_bool,                         0,                             offsetof(Tunnel, assign_to_loopback)
 Tunnel.AllowLocalRemote,                  config_parse_tristate,                     0,                             offsetof(Tunnel, allow_localremote)
@@ -87,9 +90,13 @@
 Tunnel.FOUSourcePort,                     config_parse_ip_port,                      0,                             offsetof(Tunnel, encap_src_port)
 Tunnel.Encapsulation,                     config_parse_fou_encap_type,               0,                             offsetof(Tunnel, fou_encap_type)
 Tunnel.IPv6RapidDeploymentPrefix,         config_parse_6rd_prefix,                   0,                             0
-Tunnel.ERSPANIndex,                       config_parse_uint32,                       0,                             offsetof(Tunnel, erspan_index)
+Tunnel.ERSPANVersion,                     config_parse_erspan_version,               0,                             offsetof(Tunnel, erspan_version)
+Tunnel.ERSPANIndex,                       config_parse_erspan_index,                 0,                             offsetof(Tunnel, erspan_index)
+Tunnel.ERSPANDirection,                   config_parse_erspan_direction,             0,                             offsetof(Tunnel, erspan_direction)
+Tunnel.ERSPANHardwareId,                  config_parse_erspan_hwid,                  0,                             offsetof(Tunnel, erspan_hwid)
 Tunnel.SerializeTunneledPackets,          config_parse_tristate,                     0,                             offsetof(Tunnel, gre_erspan_sequence)
 Tunnel.ISATAP,                            config_parse_tristate,                     0,                             offsetof(Tunnel, isatap)
+Tunnel.External,                          config_parse_bool,                         0,                             offsetof(Tunnel, external)
 FooOverUDP.Protocol,                      config_parse_ip_protocol,                  0,                             offsetof(FouTunnel, fou_protocol)
 FooOverUDP.Encapsulation,                 config_parse_fou_encap_type,               0,                             offsetof(FouTunnel, fou_encap_type)
 FooOverUDP.Port,                          config_parse_ip_port,                      0,                             offsetof(FouTunnel, port)
@@ -100,8 +107,8 @@
 L2TP.PeerTunnelId,                        config_parse_l2tp_tunnel_id,               0,                             offsetof(L2tpTunnel, peer_tunnel_id)
 L2TP.UDPSourcePort,                       config_parse_ip_port,                      0,                             offsetof(L2tpTunnel, l2tp_udp_sport)
 L2TP.UDPDestinationPort,                  config_parse_ip_port,                      0,                             offsetof(L2tpTunnel, l2tp_udp_dport)
-L2TP.Local,                               config_parse_l2tp_tunnel_address,          0,                             offsetof(L2tpTunnel, local)
-L2TP.Remote,                              config_parse_l2tp_tunnel_address,          0,                             offsetof(L2tpTunnel, remote)
+L2TP.Local,                               config_parse_l2tp_tunnel_local_address,    0,                             0
+L2TP.Remote,                              config_parse_l2tp_tunnel_remote_address,   0,                             0
 L2TP.EncapsulationType,                   config_parse_l2tp_encap_type,              0,                             offsetof(L2tpTunnel, l2tp_encap_type)
 L2TP.UDPCheckSum,                         config_parse_bool,                         0,                             offsetof(L2tpTunnel, udp_csum)
 L2TP.UDP6CheckSumRx,                      config_parse_bool,                         0,                             offsetof(L2tpTunnel, udp6_csum_rx)
@@ -111,7 +118,7 @@
 L2TPSession.Layer2SpecificHeader,         config_parse_l2tp_session_l2spec,          0,                             0
 L2TPSession.Name,                         config_parse_l2tp_session_name,            0,                             0
 Peer.Name,                                config_parse_ifname,                       0,                             offsetof(Veth, ifname_peer)
-Peer.MACAddress,                          config_parse_hwaddr,                       0,                             offsetof(Veth, mac_peer)
+Peer.MACAddress,                          config_parse_netdev_hw_addr,               ETH_ALEN,                      offsetof(Veth, hw_addr_peer)
 VXCAN.Peer,                               config_parse_ifname,                       0,                             offsetof(VxCan, ifname_peer)
 VXLAN.VNI,                                config_parse_uint32,                       0,                             offsetof(VxLan, vni)
 VXLAN.Id,                                 config_parse_uint32,                       0,                             offsetof(VxLan, vni) /* deprecated */
@@ -176,14 +183,16 @@
 Tun.MultiQueue,                           config_parse_bool,                         0,                             offsetof(TunTap, multi_queue)
 Tun.PacketInfo,                           config_parse_bool,                         0,                             offsetof(TunTap, packet_info)
 Tun.VNetHeader,                           config_parse_bool,                         0,                             offsetof(TunTap, vnet_hdr)
-Tun.User,                                 config_parse_string,                       0,                             offsetof(TunTap, user_name)
-Tun.Group,                                config_parse_string,                       0,                             offsetof(TunTap, group_name)
+Tun.User,                                 config_parse_string,                       CONFIG_PARSE_STRING_SAFE,      offsetof(TunTap, user_name)
+Tun.Group,                                config_parse_string,                       CONFIG_PARSE_STRING_SAFE,      offsetof(TunTap, group_name)
+Tun.KeepCarrier,                          config_parse_bool,                         0,                             offsetof(TunTap, keep_fd)
 Tap.OneQueue,                             config_parse_warn_compat,                  DISABLED_LEGACY,               0
 Tap.MultiQueue,                           config_parse_bool,                         0,                             offsetof(TunTap, multi_queue)
 Tap.PacketInfo,                           config_parse_bool,                         0,                             offsetof(TunTap, packet_info)
 Tap.VNetHeader,                           config_parse_bool,                         0,                             offsetof(TunTap, vnet_hdr)
-Tap.User,                                 config_parse_string,                       0,                             offsetof(TunTap, user_name)
-Tap.Group,                                config_parse_string,                       0,                             offsetof(TunTap, group_name)
+Tap.User,                                 config_parse_string,                       CONFIG_PARSE_STRING_SAFE,      offsetof(TunTap, user_name)
+Tap.Group,                                config_parse_string,                       CONFIG_PARSE_STRING_SAFE,      offsetof(TunTap, group_name)
+Tap.KeepCarrier,                          config_parse_bool,                         0,                             offsetof(TunTap, keep_fd)
 Bond.Mode,                                config_parse_bond_mode,                    0,                             offsetof(Bond, mode)
 Bond.TransmitHashPolicy,                  config_parse_bond_xmit_hash_policy,        0,                             offsetof(Bond, xmit_hash_policy)
 Bond.LACPTransmitRate,                    config_parse_bond_lacp_rate,               0,                             offsetof(Bond, lacp_rate)
@@ -229,12 +238,16 @@
 WireGuard.ListenPort,                     config_parse_wireguard_listen_port,        0,                             offsetof(Wireguard, port)
 WireGuard.PrivateKey,                     config_parse_wireguard_private_key,        0,                             0
 WireGuard.PrivateKeyFile,                 config_parse_wireguard_private_key_file,   0,                             0
+WireGuard.RouteTable,                     config_parse_wireguard_route_table,        0,                             offsetof(Wireguard, route_table)
+WireGuard.RouteMetric,                    config_parse_wireguard_route_priority,     0,                             offsetof(Wireguard, route_priority)
 WireGuardPeer.AllowedIPs,                 config_parse_wireguard_allowed_ips,        0,                             0
 WireGuardPeer.Endpoint,                   config_parse_wireguard_endpoint,           0,                             0
 WireGuardPeer.PublicKey,                  config_parse_wireguard_peer_key,           0,                             0
 WireGuardPeer.PresharedKey,               config_parse_wireguard_peer_key,           0,                             0
 WireGuardPeer.PresharedKeyFile,           config_parse_wireguard_preshared_key_file, 0,                             0
 WireGuardPeer.PersistentKeepalive,        config_parse_wireguard_keepalive,          0,                             0
+WireGuardPeer.RouteTable,                 config_parse_wireguard_peer_route_table,   0,                             0
+WireGuardPeer.RouteMetric,                config_parse_wireguard_peer_route_priority,0,                             0
 Xfrm.InterfaceId,                         config_parse_uint32,                       0,                             offsetof(Xfrm, if_id)
 Xfrm.Independent,                         config_parse_bool,                         0,                             offsetof(Xfrm, independent)
 BatmanAdvanced.Aggregation,               config_parse_bool,                         0,                             offsetof(BatmanAdvanced, aggregation)
@@ -249,3 +262,9 @@
 BatmanAdvanced.HopPenalty,                config_parse_uint8,                        0,                             offsetof(BatmanAdvanced, hop_penalty)
 BatmanAdvanced.OriginatorIntervalSec,     config_parse_sec,                          0,                             offsetof(BatmanAdvanced, originator_interval)
 BatmanAdvanced.RoutingAlgorithm,          config_parse_batadv_routing_algorithm,     0,                             offsetof(BatmanAdvanced, routing_algorithm)
+IPoIB.PartitionKey,                       config_parse_ipoib_pkey,                   0,                             offsetof(IPoIB, pkey)
+IPoIB.Mode,                               config_parse_ipoib_mode,                   0,                             offsetof(IPoIB, mode)
+IPoIB.IgnoreUserspaceMulticastGroups,     config_parse_tristate,                     0,                             offsetof(IPoIB, umcast)
+WLAN.PhysicalDevice,                      config_parse_wiphy,                        0,                             0
+WLAN.Type,                                config_parse_wlan_iftype,                  0,                             offsetof(WLan, iftype)
+WLAN.WDS,                                 config_parse_tristate,                     0,                             offsetof(WLan, wds)
diff --git a/src/network/netdev/netdev-util.c b/src/network/netdev/netdev-util.c
new file mode 100644
index 0000000..2350624
--- /dev/null
+++ b/src/network/netdev/netdev-util.c
@@ -0,0 +1,100 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "netdev-util.h"
+#include "networkd-address.h"
+#include "networkd-link.h"
+#include "string-table.h"
+
+static const char * const netdev_local_address_type_table[_NETDEV_LOCAL_ADDRESS_TYPE_MAX] = {
+        [NETDEV_LOCAL_ADDRESS_IPV4LL]  = "ipv4_link_local",
+        [NETDEV_LOCAL_ADDRESS_IPV6LL]  = "ipv6_link_local",
+        [NETDEV_LOCAL_ADDRESS_DHCP4]   = "dhcp4",
+        [NETDEV_LOCAL_ADDRESS_DHCP6]   = "dhcp6",
+        [NETDEV_LOCAL_ADDRESS_SLAAC]   = "slaac",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(netdev_local_address_type, NetDevLocalAddressType);
+
+int link_get_local_address(
+                Link *link,
+                NetDevLocalAddressType type,
+                int family,
+                int *ret_family,
+                union in_addr_union *ret_address) {
+
+        Address *a;
+
+        assert(link);
+
+        switch (type) {
+        case NETDEV_LOCAL_ADDRESS_IPV4LL:
+                assert(IN_SET(family, AF_UNSPEC, AF_INET));
+                family = AF_INET;
+                break;
+        case NETDEV_LOCAL_ADDRESS_IPV6LL:
+                assert(IN_SET(family, AF_UNSPEC, AF_INET6));
+                family = AF_INET6;
+                break;
+        case NETDEV_LOCAL_ADDRESS_DHCP4:
+                assert(IN_SET(family, AF_UNSPEC, AF_INET));
+                family = AF_INET;
+                break;
+        case NETDEV_LOCAL_ADDRESS_DHCP6:
+                assert(IN_SET(family, AF_UNSPEC, AF_INET6));
+                family = AF_INET6;
+                break;
+        case NETDEV_LOCAL_ADDRESS_SLAAC:
+                assert(IN_SET(family, AF_UNSPEC, AF_INET6));
+                family = AF_INET6;
+                break;
+        default:
+                assert_not_reached();
+        }
+
+        if (!link_is_ready_to_configure(link, /* allow_unmanaged = */ false))
+                return -EBUSY;
+
+        SET_FOREACH(a, link->addresses) {
+                if (!address_is_ready(a))
+                        continue;
+
+                if (a->family != family)
+                        continue;
+
+                if (in_addr_is_set(a->family, &a->in_addr_peer))
+                        continue;
+
+                switch (type) {
+                case NETDEV_LOCAL_ADDRESS_IPV4LL:
+                        if (a->source != NETWORK_CONFIG_SOURCE_IPV4LL)
+                                continue;
+                        break;
+                case NETDEV_LOCAL_ADDRESS_IPV6LL:
+                        if (!in6_addr_is_link_local(&a->in_addr.in6))
+                                continue;
+                        break;
+                case NETDEV_LOCAL_ADDRESS_DHCP4:
+                        if (a->source != NETWORK_CONFIG_SOURCE_DHCP4)
+                                continue;
+                        break;
+                case NETDEV_LOCAL_ADDRESS_DHCP6:
+                        if (a->source != NETWORK_CONFIG_SOURCE_DHCP6)
+                                continue;
+                        break;
+                case NETDEV_LOCAL_ADDRESS_SLAAC:
+                        if (a->source != NETWORK_CONFIG_SOURCE_NDISC)
+                                continue;
+                        break;
+                default:
+                        assert_not_reached();
+                }
+
+                if (ret_family)
+                        *ret_family = a->family;
+                if (ret_address)
+                        *ret_address = a->in_addr;
+                return 1;
+        }
+
+        return -ENXIO;
+}
diff --git a/src/network/netdev/netdev-util.h b/src/network/netdev/netdev-util.h
new file mode 100644
index 0000000..02b07e3
--- /dev/null
+++ b/src/network/netdev/netdev-util.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "in-addr-util.h"
+#include "macro.h"
+
+typedef struct Link Link;
+
+typedef enum NetDevLocalAddressType {
+        NETDEV_LOCAL_ADDRESS_IPV4LL,
+        NETDEV_LOCAL_ADDRESS_IPV6LL,
+        NETDEV_LOCAL_ADDRESS_DHCP4,
+        NETDEV_LOCAL_ADDRESS_DHCP6,
+        NETDEV_LOCAL_ADDRESS_SLAAC,
+        _NETDEV_LOCAL_ADDRESS_TYPE_MAX,
+        _NETDEV_LOCAL_ADDRESS_TYPE_INVALID = -EINVAL,
+} NetDevLocalAddressType;
+
+const char *netdev_local_address_type_to_string(NetDevLocalAddressType t) _const_;
+NetDevLocalAddressType netdev_local_address_type_from_string(const char *s) _pure_;
+
+int link_get_local_address(
+                Link *link,
+                NetDevLocalAddressType type,
+                int family,
+                int *ret_family,
+                union in_addr_union *ret_address);
diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c
index 53534d4..038a27c 100644
--- a/src/network/netdev/netdev.c
+++ b/src/network/netdev/netdev.c
@@ -2,9 +2,11 @@
 
 #include <net/if.h>
 #include <netinet/in.h>
+#include <linux/if_arp.h>
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "arphrd-util.h"
 #include "bareudp.h"
 #include "batadv.h"
 #include "bond.h"
@@ -16,6 +18,7 @@
 #include "fou-tunnel.h"
 #include "geneve.h"
 #include "ifb.h"
+#include "ipoib.h"
 #include "ipvlan.h"
 #include "l2tp-tunnel.h"
 #include "list.h"
@@ -23,10 +26,12 @@
 #include "macvlan.h"
 #include "netdev.h"
 #include "netdevsim.h"
+#include "netif-util.h"
 #include "netlink-util.h"
 #include "networkd-manager.h"
 #include "networkd-queue.h"
 #include "networkd-setlink.h"
+#include "networkd-sriov.h"
 #include "nlmon.h"
 #include "path-lookup.h"
 #include "siphash24.h"
@@ -43,123 +48,93 @@
 #include "vxcan.h"
 #include "vxlan.h"
 #include "wireguard.h"
+#include "wlan.h"
 #include "xfrm.h"
 
 const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX] = {
-        [NETDEV_KIND_BATADV] = &batadv_vtable,
-        [NETDEV_KIND_BRIDGE] = &bridge_vtable,
-        [NETDEV_KIND_BOND] = &bond_vtable,
-        [NETDEV_KIND_VLAN] = &vlan_vtable,
-        [NETDEV_KIND_MACVLAN] = &macvlan_vtable,
-        [NETDEV_KIND_MACVTAP] = &macvtap_vtable,
-        [NETDEV_KIND_IPVLAN] = &ipvlan_vtable,
-        [NETDEV_KIND_IPVTAP] = &ipvtap_vtable,
-        [NETDEV_KIND_VXLAN] = &vxlan_vtable,
-        [NETDEV_KIND_IPIP] = &ipip_vtable,
-        [NETDEV_KIND_GRE] = &gre_vtable,
-        [NETDEV_KIND_GRETAP] = &gretap_vtable,
-        [NETDEV_KIND_IP6GRE] = &ip6gre_vtable,
+        [NETDEV_KIND_BAREUDP]   = &bare_udp_vtable,
+        [NETDEV_KIND_BATADV]    = &batadv_vtable,
+        [NETDEV_KIND_BOND]      = &bond_vtable,
+        [NETDEV_KIND_BRIDGE]    = &bridge_vtable,
+        [NETDEV_KIND_DUMMY]     = &dummy_vtable,
+        [NETDEV_KIND_ERSPAN]    = &erspan_vtable,
+        [NETDEV_KIND_FOU]       = &foutnl_vtable,
+        [NETDEV_KIND_GENEVE]    = &geneve_vtable,
+        [NETDEV_KIND_GRE]       = &gre_vtable,
+        [NETDEV_KIND_GRETAP]    = &gretap_vtable,
+        [NETDEV_KIND_IFB]       = &ifb_vtable,
+        [NETDEV_KIND_IP6GRE]    = &ip6gre_vtable,
         [NETDEV_KIND_IP6GRETAP] = &ip6gretap_vtable,
-        [NETDEV_KIND_SIT] = &sit_vtable,
-        [NETDEV_KIND_VTI] = &vti_vtable,
-        [NETDEV_KIND_VTI6] = &vti6_vtable,
-        [NETDEV_KIND_VETH] = &veth_vtable,
-        [NETDEV_KIND_DUMMY] = &dummy_vtable,
-        [NETDEV_KIND_TUN] = &tun_vtable,
-        [NETDEV_KIND_TAP] = &tap_vtable,
-        [NETDEV_KIND_IP6TNL] = &ip6tnl_vtable,
-        [NETDEV_KIND_VRF] = &vrf_vtable,
-        [NETDEV_KIND_VCAN] = &vcan_vtable,
-        [NETDEV_KIND_GENEVE] = &geneve_vtable,
-        [NETDEV_KIND_VXCAN] = &vxcan_vtable,
-        [NETDEV_KIND_WIREGUARD] = &wireguard_vtable,
+        [NETDEV_KIND_IP6TNL]    = &ip6tnl_vtable,
+        [NETDEV_KIND_IPIP]      = &ipip_vtable,
+        [NETDEV_KIND_IPOIB]     = &ipoib_vtable,
+        [NETDEV_KIND_IPVLAN]    = &ipvlan_vtable,
+        [NETDEV_KIND_IPVTAP]    = &ipvtap_vtable,
+        [NETDEV_KIND_L2TP]      = &l2tptnl_vtable,
+        [NETDEV_KIND_MACSEC]    = &macsec_vtable,
+        [NETDEV_KIND_MACVLAN]   = &macvlan_vtable,
+        [NETDEV_KIND_MACVTAP]   = &macvtap_vtable,
         [NETDEV_KIND_NETDEVSIM] = &netdevsim_vtable,
-        [NETDEV_KIND_FOU] = &foutnl_vtable,
-        [NETDEV_KIND_ERSPAN] = &erspan_vtable,
-        [NETDEV_KIND_L2TP] = &l2tptnl_vtable,
-        [NETDEV_KIND_MACSEC] = &macsec_vtable,
-        [NETDEV_KIND_NLMON] = &nlmon_vtable,
-        [NETDEV_KIND_XFRM] = &xfrm_vtable,
-        [NETDEV_KIND_IFB] = &ifb_vtable,
-        [NETDEV_KIND_BAREUDP] = &bare_udp_vtable,
+        [NETDEV_KIND_NLMON]     = &nlmon_vtable,
+        [NETDEV_KIND_SIT]       = &sit_vtable,
+        [NETDEV_KIND_TAP]       = &tap_vtable,
+        [NETDEV_KIND_TUN]       = &tun_vtable,
+        [NETDEV_KIND_VCAN]      = &vcan_vtable,
+        [NETDEV_KIND_VETH]      = &veth_vtable,
+        [NETDEV_KIND_VLAN]      = &vlan_vtable,
+        [NETDEV_KIND_VRF]       = &vrf_vtable,
+        [NETDEV_KIND_VTI6]      = &vti6_vtable,
+        [NETDEV_KIND_VTI]       = &vti_vtable,
+        [NETDEV_KIND_VXCAN]     = &vxcan_vtable,
+        [NETDEV_KIND_VXLAN]     = &vxlan_vtable,
+        [NETDEV_KIND_WIREGUARD] = &wireguard_vtable,
+        [NETDEV_KIND_WLAN]      = &wlan_vtable,
+        [NETDEV_KIND_XFRM]      = &xfrm_vtable,
 };
 
 static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = {
-        [NETDEV_KIND_BAREUDP] = "bareudp",
-        [NETDEV_KIND_BATADV] = "batadv",
-        [NETDEV_KIND_BRIDGE] = "bridge",
-        [NETDEV_KIND_BOND] = "bond",
-        [NETDEV_KIND_VLAN] = "vlan",
-        [NETDEV_KIND_MACVLAN] = "macvlan",
-        [NETDEV_KIND_MACVTAP] = "macvtap",
-        [NETDEV_KIND_IPVLAN] = "ipvlan",
-        [NETDEV_KIND_IPVTAP] = "ipvtap",
-        [NETDEV_KIND_VXLAN] = "vxlan",
-        [NETDEV_KIND_IPIP] = "ipip",
-        [NETDEV_KIND_GRE] = "gre",
-        [NETDEV_KIND_GRETAP] = "gretap",
-        [NETDEV_KIND_IP6GRE] = "ip6gre",
+        [NETDEV_KIND_BAREUDP]   = "bareudp",
+        [NETDEV_KIND_BATADV]    = "batadv",
+        [NETDEV_KIND_BOND]      = "bond",
+        [NETDEV_KIND_BRIDGE]    = "bridge",
+        [NETDEV_KIND_DUMMY]     = "dummy",
+        [NETDEV_KIND_ERSPAN]    = "erspan",
+        [NETDEV_KIND_FOU]       = "fou",
+        [NETDEV_KIND_GENEVE]    = "geneve",
+        [NETDEV_KIND_GRE]       = "gre",
+        [NETDEV_KIND_GRETAP]    = "gretap",
+        [NETDEV_KIND_IFB]       = "ifb",
+        [NETDEV_KIND_IP6GRE]    = "ip6gre",
         [NETDEV_KIND_IP6GRETAP] = "ip6gretap",
-        [NETDEV_KIND_SIT] = "sit",
-        [NETDEV_KIND_VETH] = "veth",
-        [NETDEV_KIND_VTI] = "vti",
-        [NETDEV_KIND_VTI6] = "vti6",
-        [NETDEV_KIND_DUMMY] = "dummy",
-        [NETDEV_KIND_TUN] = "tun",
-        [NETDEV_KIND_TAP] = "tap",
-        [NETDEV_KIND_IP6TNL] = "ip6tnl",
-        [NETDEV_KIND_VRF] = "vrf",
-        [NETDEV_KIND_VCAN] = "vcan",
-        [NETDEV_KIND_GENEVE] = "geneve",
-        [NETDEV_KIND_VXCAN] = "vxcan",
-        [NETDEV_KIND_WIREGUARD] = "wireguard",
+        [NETDEV_KIND_IP6TNL]    = "ip6tnl",
+        [NETDEV_KIND_IPIP]      = "ipip",
+        [NETDEV_KIND_IPOIB]     = "ipoib",
+        [NETDEV_KIND_IPVLAN]    = "ipvlan",
+        [NETDEV_KIND_IPVTAP]    = "ipvtap",
+        [NETDEV_KIND_L2TP]      = "l2tp",
+        [NETDEV_KIND_MACSEC]    = "macsec",
+        [NETDEV_KIND_MACVLAN]   = "macvlan",
+        [NETDEV_KIND_MACVTAP]   = "macvtap",
         [NETDEV_KIND_NETDEVSIM] = "netdevsim",
-        [NETDEV_KIND_FOU] = "fou",
-        [NETDEV_KIND_ERSPAN] = "erspan",
-        [NETDEV_KIND_L2TP] = "l2tp",
-        [NETDEV_KIND_MACSEC] = "macsec",
-        [NETDEV_KIND_NLMON] = "nlmon",
-        [NETDEV_KIND_XFRM] = "xfrm",
-        [NETDEV_KIND_IFB] = "ifb",
+        [NETDEV_KIND_NLMON]     = "nlmon",
+        [NETDEV_KIND_SIT]       = "sit",
+        [NETDEV_KIND_TAP]       = "tap",
+        [NETDEV_KIND_TUN]       = "tun",
+        [NETDEV_KIND_VCAN]      = "vcan",
+        [NETDEV_KIND_VETH]      = "veth",
+        [NETDEV_KIND_VLAN]      = "vlan",
+        [NETDEV_KIND_VRF]       = "vrf",
+        [NETDEV_KIND_VTI6]      = "vti6",
+        [NETDEV_KIND_VTI]       = "vti",
+        [NETDEV_KIND_VXCAN]     = "vxcan",
+        [NETDEV_KIND_VXLAN]     = "vxlan",
+        [NETDEV_KIND_WIREGUARD] = "wireguard",
+        [NETDEV_KIND_WLAN]      = "wlan",
+        [NETDEV_KIND_XFRM]      = "xfrm",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind);
 
-int config_parse_netdev_kind(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        NetDevKind k, *kind = data;
-
-        assert(rvalue);
-        assert(data);
-
-        k = netdev_kind_from_string(rvalue);
-        if (k < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, k, "Failed to parse netdev kind, ignoring assignment: %s", rvalue);
-                return 0;
-        }
-
-        if (*kind != _NETDEV_KIND_INVALID && *kind != k) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Specified netdev kind is different from the previous value '%s', ignoring assignment: %s",
-                           netdev_kind_to_string(*kind), rvalue);
-                return 0;
-        }
-
-        *kind = k;
-
-        return 0;
-}
-
 bool netdev_is_managed(NetDev *netdev) {
         if (!netdev || !netdev->manager || !netdev->ifname)
                 return false;
@@ -167,6 +142,54 @@
         return hashmap_get(netdev->manager->netdevs, netdev->ifname) == netdev;
 }
 
+static bool netdev_is_stacked_and_independent(NetDev *netdev) {
+        assert(netdev);
+
+        if (netdev_get_create_type(netdev) != NETDEV_CREATE_STACKED)
+                return false;
+
+        switch (netdev->kind) {
+        case NETDEV_KIND_ERSPAN:
+                return ERSPAN(netdev)->independent;
+        case NETDEV_KIND_GRE:
+                return GRE(netdev)->independent;
+        case NETDEV_KIND_GRETAP:
+                return GRETAP(netdev)->independent;
+        case NETDEV_KIND_IP6GRE:
+                return IP6GRE(netdev)->independent;
+        case NETDEV_KIND_IP6GRETAP:
+                return IP6GRETAP(netdev)->independent;
+        case NETDEV_KIND_IP6TNL:
+                return IP6TNL(netdev)->independent;
+        case NETDEV_KIND_IPIP:
+                return IPIP(netdev)->independent;
+        case NETDEV_KIND_SIT:
+                return SIT(netdev)->independent;
+        case NETDEV_KIND_VTI:
+                return VTI(netdev)->independent;
+        case NETDEV_KIND_VTI6:
+                return VTI6(netdev)->independent;
+        case NETDEV_KIND_VXLAN:
+                return VXLAN(netdev)->independent;
+        case NETDEV_KIND_XFRM:
+                return XFRM(netdev)->independent;
+        default:
+                return false;
+        }
+}
+
+static bool netdev_is_stacked(NetDev *netdev) {
+        assert(netdev);
+
+        if (netdev_get_create_type(netdev) != NETDEV_CREATE_STACKED)
+                return false;
+
+        if (netdev_is_stacked_and_independent(netdev))
+                return false;
+
+        return true;
+}
+
 static void netdev_detach_from_manager(NetDev *netdev) {
         if (netdev->ifname && netdev->manager)
                 hashmap_remove(netdev->manager->netdevs, netdev->ifname);
@@ -181,7 +204,6 @@
 
         free(netdev->description);
         free(netdev->ifname);
-        free(netdev->mac);
         condition_free_list(netdev->conditions);
 
         /* Invoke the per-kind done() destructor, but only if the state field is initialized. We conditionalize that
@@ -202,9 +224,22 @@
 DEFINE_TRIVIAL_REF_UNREF_FUNC(NetDev, netdev, netdev_free);
 
 void netdev_drop(NetDev *netdev) {
-        if (!netdev || netdev->state == NETDEV_STATE_LINGER)
+        if (!netdev)
                 return;
 
+        if (netdev_is_stacked(netdev)) {
+                /* The netdev may be removed due to the underlying device removal, and the device may
+                 * be re-added later. */
+                netdev->state = NETDEV_STATE_LOADING;
+                netdev->ifindex = 0;
+
+                log_netdev_debug(netdev, "netdev removed");
+                return;
+        }
+
+        if (NETDEV_VTABLE(netdev) && NETDEV_VTABLE(netdev)->drop)
+                NETDEV_VTABLE(netdev)->drop(netdev);
+
         netdev->state = NETDEV_STATE_LINGER;
 
         log_netdev_debug(netdev, "netdev removed");
@@ -222,19 +257,16 @@
         assert(ret);
 
         netdev = hashmap_get(manager->netdevs, name);
-        if (!netdev) {
-                *ret = NULL;
+        if (!netdev)
                 return -ENOENT;
-        }
 
         *ret = netdev;
 
         return 0;
 }
 
-static int netdev_enter_failed(NetDev *netdev) {
+void netdev_enter_failed(NetDev *netdev) {
         netdev->state = NETDEV_STATE_FAILED;
-        return 0;
 }
 
 static int netdev_enter_ready(NetDev *netdev) {
@@ -249,7 +281,7 @@
         log_netdev_info(netdev, "netdev ready");
 
         if (NETDEV_VTABLE(netdev)->post_create)
-                NETDEV_VTABLE(netdev)->post_create(netdev, NULL, NULL);
+                NETDEV_VTABLE(netdev)->post_create(netdev, NULL);
 
         return 0;
 }
@@ -266,7 +298,7 @@
                 log_netdev_info(netdev, "netdev exists, using existing without changing its parameters");
         else if (r < 0) {
                 log_netdev_warning_errno(netdev, r, "netdev could not be created: %m");
-                netdev_drop(netdev);
+                netdev_enter_failed(netdev);
 
                 return 1;
         }
@@ -325,37 +357,40 @@
                 return -EINVAL;
         }
 
-        r = sd_netlink_message_enter_container(message, IFLA_LINKINFO);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not get LINKINFO: %m");
+        if (!NETDEV_VTABLE(netdev)->skip_netdev_kind_check) {
 
-        r = sd_netlink_message_read_string(message, IFLA_INFO_KIND, &received_kind);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not get KIND: %m");
+                r = sd_netlink_message_enter_container(message, IFLA_LINKINFO);
+                if (r < 0)
+                        return log_netdev_error_errno(netdev, r, "Could not get LINKINFO: %m");
 
-        r = sd_netlink_message_exit_container(message);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not exit container: %m");
+                r = sd_netlink_message_read_string(message, IFLA_INFO_KIND, &received_kind);
+                if (r < 0)
+                        return log_netdev_error_errno(netdev, r, "Could not get KIND: %m");
 
-        if (netdev->kind == NETDEV_KIND_TAP)
-                /* the kernel does not distinguish between tun and tap */
-                kind = "tun";
-        else {
-                kind = netdev_kind_to_string(netdev->kind);
-                if (!kind) {
-                        log_netdev_error(netdev, "Could not get kind");
+                r = sd_netlink_message_exit_container(message);
+                if (r < 0)
+                        return log_netdev_error_errno(netdev, r, "Could not exit container: %m");
+
+                if (netdev->kind == NETDEV_KIND_TAP)
+                        /* the kernel does not distinguish between tun and tap */
+                        kind = "tun";
+                else {
+                        kind = netdev_kind_to_string(netdev->kind);
+                        if (!kind) {
+                                log_netdev_error(netdev, "Could not get kind");
+                                netdev_enter_failed(netdev);
+                                return -EINVAL;
+                        }
+                }
+
+                if (!streq(kind, received_kind)) {
+                        log_netdev_error(netdev, "Received newlink with wrong KIND %s, expected %s",
+                                         received_kind, kind);
                         netdev_enter_failed(netdev);
                         return -EINVAL;
                 }
         }
 
-        if (!streq(kind, received_kind)) {
-                log_netdev_error(netdev, "Received newlink with wrong KIND %s, expected %s",
-                                 received_kind, kind);
-                netdev_enter_failed(netdev);
-                return -EINVAL;
-        }
-
         netdev->ifindex = ifindex;
 
         log_netdev_debug(netdev, "netdev has index %d", netdev->ifindex);
@@ -367,227 +402,276 @@
 
 #define HASH_KEY SD_ID128_MAKE(52,e1,45,bd,00,6f,29,96,21,c6,30,6d,83,71,04,48)
 
-int netdev_get_mac(const char *ifname, struct ether_addr **ret) {
-        _cleanup_free_ struct ether_addr *mac = NULL;
-        uint64_t result;
-        size_t l, sz;
-        uint8_t *v;
+int netdev_generate_hw_addr(
+                NetDev *netdev,
+                Link *parent,
+                const char *name,
+                const struct hw_addr_data *hw_addr,
+                struct hw_addr_data *ret) {
+
+        struct hw_addr_data a = HW_ADDR_NULL;
+        bool is_static = false;
         int r;
 
-        assert(ifname);
+        assert(netdev);
+        assert(name);
+        assert(hw_addr);
         assert(ret);
 
-        mac = new0(struct ether_addr, 1);
-        if (!mac)
-                return -ENOMEM;
+        if (hw_addr_equal(hw_addr, &HW_ADDR_NONE)) {
+                *ret = HW_ADDR_NULL;
+                return 0;
+        }
 
-        l = strlen(ifname);
-        sz = sizeof(sd_id128_t) + l;
-        v = newa(uint8_t, sz);
+        if (hw_addr->length == 0) {
+                uint64_t result;
 
-        /* fetch some persistent data unique to the machine */
-        r = sd_id128_get_machine((sd_id128_t*) v);
+                /* HardwareAddress= is not specified. */
+
+                if (!NETDEV_VTABLE(netdev)->generate_mac)
+                        goto finalize;
+
+                if (!IN_SET(NETDEV_VTABLE(netdev)->iftype, ARPHRD_ETHER, ARPHRD_INFINIBAND))
+                        goto finalize;
+
+                r = net_get_unique_predictable_data_from_name(name, &HASH_KEY, &result);
+                if (r < 0) {
+                        log_netdev_warning_errno(netdev, r,
+                                                 "Failed to generate persistent MAC address, ignoring: %m");
+                        goto finalize;
+                }
+
+                a.length = arphrd_to_hw_addr_len(NETDEV_VTABLE(netdev)->iftype);
+
+                switch (NETDEV_VTABLE(netdev)->iftype) {
+                case ARPHRD_ETHER:
+                        assert(a.length <= sizeof(result));
+                        memcpy(a.bytes, &result, a.length);
+
+                        if (ether_addr_is_null(&a.ether) || ether_addr_is_broadcast(&a.ether)) {
+                                log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                                         "Failed to generate persistent MAC address, ignoring: %m");
+                                a = HW_ADDR_NULL;
+                                goto finalize;
+                        }
+
+                        break;
+                case ARPHRD_INFINIBAND:
+                        if (result == 0) {
+                                log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                                         "Failed to generate persistent MAC address: %m");
+                                goto finalize;
+                        }
+
+                        assert(a.length >= sizeof(result));
+                        memzero(a.bytes, a.length - sizeof(result));
+                        memcpy(a.bytes + a.length - sizeof(result), &result, sizeof(result));
+                        break;
+                default:
+                        assert_not_reached();
+                }
+
+        } else {
+                a = *hw_addr;
+                is_static = true;
+        }
+
+        r = net_verify_hardware_address(name, is_static, NETDEV_VTABLE(netdev)->iftype,
+                                        parent ? &parent->hw_addr : NULL, &a);
         if (r < 0)
                 return r;
 
-        /* combine with some data unique (on this machine) to this
-         * netdev */
-        memcpy(v + sizeof(sd_id128_t), ifname, l);
+finalize:
+        *ret = a;
+        return 0;
+}
 
-        /* Let's hash the host machine ID plus the container name. We
-         * use a fixed, but originally randomly created hash key here. */
-        result = siphash24(v, sz, HASH_KEY.bytes);
+static int netdev_create_message(NetDev *netdev, Link *link, sd_netlink_message *m) {
+        int r;
 
-        assert_cc(ETH_ALEN <= sizeof(result));
-        memcpy(mac->ether_addr_octet, &result, ETH_ALEN);
+        r = sd_netlink_message_append_string(m, IFLA_IFNAME, netdev->ifname);
+        if (r < 0)
+                return r;
 
-        /* see eth_random_addr in the kernel */
-        mac->ether_addr_octet[0] &= 0xfe;        /* clear multicast bit */
-        mac->ether_addr_octet[0] |= 0x02;        /* set local assignment bit (IEEE802) */
+        struct hw_addr_data hw_addr;
+        r = netdev_generate_hw_addr(netdev, link, netdev->ifname, &netdev->hw_addr, &hw_addr);
+        if (r < 0)
+                return r;
 
-        *ret = TAKE_PTR(mac);
+        if (hw_addr.length > 0) {
+                log_netdev_debug(netdev, "Using MAC address: %s", HW_ADDR_TO_STR(&hw_addr));
+                r = netlink_message_append_hw_addr(m, IFLA_ADDRESS, &hw_addr);
+                if (r < 0)
+                        return r;
+        }
+
+        if (netdev->mtu != 0) {
+                r = sd_netlink_message_append_u32(m, IFLA_MTU, netdev->mtu);
+                if (r < 0)
+                        return r;
+        }
+
+        if (link) {
+                r = sd_netlink_message_append_u32(m, IFLA_LINK, link->ifindex);
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_netlink_message_open_container(m, IFLA_LINKINFO);
+        if (r < 0)
+                return r;
+
+        if (NETDEV_VTABLE(netdev)->fill_message_create) {
+                r = sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, netdev_kind_to_string(netdev->kind));
+                if (r < 0)
+                        return r;
+
+                r = NETDEV_VTABLE(netdev)->fill_message_create(netdev, link, m);
+                if (r < 0)
+                        return r;
+
+                r = sd_netlink_message_close_container(m);
+                if (r < 0)
+                        return r;
+        } else {
+                r = sd_netlink_message_append_string(m, IFLA_INFO_KIND, netdev_kind_to_string(netdev->kind));
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_netlink_message_close_container(m);
+        if (r < 0)
+                return r;
 
         return 0;
 }
 
-static int netdev_create(NetDev *netdev, Link *link, link_netlink_message_handler_t callback) {
+static int independent_netdev_create(NetDev *netdev) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(netdev);
-        assert(!link || callback);
 
         /* create netdev */
         if (NETDEV_VTABLE(netdev)->create) {
-                assert(!link);
-
                 r = NETDEV_VTABLE(netdev)->create(netdev);
                 if (r < 0)
                         return r;
 
                 log_netdev_debug(netdev, "Created");
-        } else {
-                _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
-
-                r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not allocate RTM_NEWLINK message: %m");
-
-                r = sd_netlink_message_append_string(m, IFLA_IFNAME, netdev->ifname);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IFNAME, attribute: %m");
-
-                if (netdev->mac) {
-                        r = sd_netlink_message_append_ether_addr(m, IFLA_ADDRESS, netdev->mac);
-                        if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_ADDRESS attribute: %m");
-                }
-
-                if (netdev->mtu != 0) {
-                        r = sd_netlink_message_append_u32(m, IFLA_MTU, netdev->mtu);
-                        if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_MTU attribute: %m");
-                }
-
-                if (link) {
-                        r = sd_netlink_message_append_u32(m, IFLA_LINK, link->ifindex);
-                        if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINK attribute: %m");
-                }
-
-                r = sd_netlink_message_open_container(m, IFLA_LINKINFO);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
-
-                r = sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, netdev_kind_to_string(netdev->kind));
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
-
-                if (NETDEV_VTABLE(netdev)->fill_message_create) {
-                        r = NETDEV_VTABLE(netdev)->fill_message_create(netdev, link, m);
-                        if (r < 0)
-                                return r;
-                }
-
-                r = sd_netlink_message_close_container(m);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
-
-                r = sd_netlink_message_close_container(m);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
-
-                if (link) {
-                        r = netlink_call_async(netdev->manager->rtnl, NULL, m, callback,
-                                               link_netlink_destroy_callback, link);
-                        if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not send rtnetlink message: %m");
-
-                        link_ref(link);
-                } else {
-                        r = netlink_call_async(netdev->manager->rtnl, NULL, m, netdev_create_handler,
-                                               netdev_destroy_callback, netdev);
-                        if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not send rtnetlink message: %m");
-
-                        netdev_ref(netdev);
-                }
-
-                netdev->state = NETDEV_STATE_CREATING;
-
-                log_netdev_debug(netdev, "Creating");
+                return 0;
         }
 
+        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
+        if (r < 0)
+                return r;
+
+        r = netdev_create_message(netdev, NULL, m);
+        if (r < 0)
+                return r;
+
+        r = netlink_call_async(netdev->manager->rtnl, NULL, m, netdev_create_handler,
+                               netdev_destroy_callback, netdev);
+        if (r < 0)
+                return r;
+
+        netdev_ref(netdev);
+
+        netdev->state = NETDEV_STATE_CREATING;
+        log_netdev_debug(netdev, "Creating");
         return 0;
 }
 
-static int netdev_create_after_configured(NetDev *netdev, Link *link) {
-        assert(netdev);
-        assert(link);
-        assert(NETDEV_VTABLE(netdev)->create_after_configured);
-
-        return NETDEV_VTABLE(netdev)->create_after_configured(netdev, link);
-}
-
-int netdev_join(NetDev *netdev, Link *link, link_netlink_message_handler_t callback) {
+static int stacked_netdev_create(NetDev *netdev, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(netdev);
         assert(netdev->manager);
-        assert(netdev->manager->rtnl);
+        assert(link);
+        assert(req);
 
-        switch (netdev_get_create_type(netdev)) {
-        case NETDEV_CREATE_STACKED:
-                r = netdev_create(netdev, link, callback);
-                if (r < 0)
-                        return r;
+        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
+        if (r < 0)
+                return r;
 
-                break;
-        case NETDEV_CREATE_AFTER_CONFIGURED:
-                r = netdev_create_after_configured(netdev, link);
-                if (r < 0)
-                        return r;
-                break;
-        default:
-                assert_not_reached("Cannot join independent netdev");
-        }
+        r = netdev_create_message(netdev, link, m);
+        if (r < 0)
+                return r;
 
+        r = request_call_netlink_async(netdev->manager->rtnl, m, req);
+        if (r < 0)
+                return r;
+
+        netdev->state = NETDEV_STATE_CREATING;
+        log_netdev_debug(netdev, "Creating");
         return 0;
 }
 
-static bool netdev_is_ready_to_create(NetDev *netdev, Link *link) {
-        Request req;
-
-        assert(netdev);
+static bool link_is_ready_to_create_stacked_netdev_one(Link *link, bool allow_unmanaged) {
         assert(link);
 
-        if (netdev->state != NETDEV_STATE_LOADING)
-                return false;
-        if (!IN_SET(link->state, LINK_STATE_INITIALIZED, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
-                return false;
-        if (netdev_get_create_type(netdev) == NETDEV_CREATE_AFTER_CONFIGURED &&
-            link->state != LINK_STATE_CONFIGURED)
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED, LINK_STATE_UNMANAGED))
                 return false;
 
-        req = (Request) {
-                .link = link,
-                .type = REQUEST_TYPE_SET_LINK,
-                .set_link_operation_ptr = INT_TO_PTR(SET_LINK_MTU),
-        };
+        if (!link->network)
+                return allow_unmanaged;
 
-        if (ordered_set_contains(link->manager->request_queue, &req))
+        if (link->set_link_messages > 0)
+                return false;
+
+        /* If stacked netdevs are created before the underlying interface being activated, then
+         * the activation policy for the netdevs are ignored. See issue #22593. */
+        if (!link->activated)
                 return false;
 
         return true;
 }
 
-int request_process_create_stacked_netdev(Request *req) {
+static bool link_is_ready_to_create_stacked_netdev(Link *link) {
+        return check_ready_for_all_sr_iov_ports(link, /* allow_unmanaged = */ false,
+                                                link_is_ready_to_create_stacked_netdev_one);
+}
+
+static int netdev_is_ready_to_create(NetDev *netdev, Link *link) {
+        assert(netdev);
+
+        if (netdev->state != NETDEV_STATE_LOADING)
+                return false;
+
+        if (link && !link_is_ready_to_create_stacked_netdev(link))
+                return false;
+
+        if (NETDEV_VTABLE(netdev)->is_ready_to_create)
+                return NETDEV_VTABLE(netdev)->is_ready_to_create(netdev, link);
+
+        return true;
+}
+
+static int stacked_netdev_process_request(Request *req, Link *link, void *userdata) {
+        NetDev *netdev = ASSERT_PTR(userdata);
         int r;
 
         assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_CREATE_STACKED_NETDEV);
-        assert(req->netdev);
-        assert(req->netlink_handler);
+        assert(link);
 
-        if (!netdev_is_ready_to_create(req->netdev, req->link))
-                return 0;
+        r = netdev_is_ready_to_create(netdev, link);
+        if (r <= 0)
+                return r;
 
-        r = netdev_join(req->netdev, req->link, req->netlink_handler);
+        r = stacked_netdev_create(netdev, link, req);
         if (r < 0)
-                return log_link_error_errno(req->link, r, "Failed to create stacked netdev '%s': %m", req->netdev->ifname);
+                return log_netdev_warning_errno(netdev, r, "Failed to create netdev: %m");
 
         return 1;
 }
 
-static int link_create_stacked_netdev_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int create_stacked_netdev_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
         int r;
 
         assert(m);
         assert(link);
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 0;
-
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
                 log_link_message_warning_errno(link, m, r, "Could not create stacked netdev");
@@ -595,93 +679,97 @@
                 return 0;
         }
 
-        return 1;
-}
-
-static int link_create_stacked_netdev_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        assert(link);
-        assert(link->create_stacked_netdev_messages > 0);
-
-        link->create_stacked_netdev_messages--;
-
-        if (link_create_stacked_netdev_handler_internal(rtnl, m, link) <= 0)
-                return 0;
-
         if (link->create_stacked_netdev_messages == 0) {
                 link->stacked_netdevs_created = true;
                 log_link_debug(link, "Stacked netdevs created.");
+                link_check_ready(link);
         }
 
         return 0;
 }
 
-static int link_create_stacked_netdev_after_configured_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        assert(link);
-        assert(link->create_stacked_netdev_after_configured_messages > 0);
-
-        link->create_stacked_netdev_after_configured_messages--;
-
-        if (link_create_stacked_netdev_handler_internal(rtnl, m, link) <= 0)
-                return 0;
-
-        if (link->create_stacked_netdev_after_configured_messages == 0) {
-                link->stacked_netdevs_after_configured_created = true;
-                log_link_debug(link, "Stacked netdevs created.");
-        }
-
-        return 0;
-}
-
-int link_request_to_crate_stacked_netdev(Link *link, NetDev *netdev) {
-        NetDevCreateType create_type;
+int link_request_stacked_netdev(Link *link, NetDev *netdev) {
         int r;
 
         assert(link);
         assert(netdev);
 
-        create_type = netdev_get_create_type(netdev);
-        if (!IN_SET(create_type, NETDEV_CREATE_STACKED, NETDEV_CREATE_AFTER_CONFIGURED))
+        if (!netdev_is_stacked(netdev))
                 return -EINVAL;
 
-        if (netdev->state != NETDEV_STATE_LOADING || netdev->ifindex > 0)
-                /* Already created (or removed?) */
-                return 0;
+        if (!IN_SET(netdev->state, NETDEV_STATE_LOADING, NETDEV_STATE_FAILED) || netdev->ifindex > 0)
+                return 0; /* Already created. */
 
-        if (create_type == NETDEV_CREATE_STACKED) {
-                link->stacked_netdevs_created = false;
-                r = link_queue_request(link, REQUEST_TYPE_CREATE_STACKED_NETDEV, netdev, false,
-                                       &link->create_stacked_netdev_messages,
-                                       link_create_stacked_netdev_handler,
-                                       NULL);
-        } else {
-                link->stacked_netdevs_after_configured_created = false;
-                r = link_queue_request(link, REQUEST_TYPE_CREATE_STACKED_NETDEV, netdev, false,
-                                       &link->create_stacked_netdev_after_configured_messages,
-                                       link_create_stacked_netdev_after_configured_handler,
-                                       NULL);
-        }
+        link->stacked_netdevs_created = false;
+        r = link_queue_request_full(link, REQUEST_TYPE_NETDEV_STACKED,
+                                    netdev_ref(netdev), (mfree_func_t) netdev_unref,
+                                    trivial_hash_func, trivial_compare_func,
+                                    stacked_netdev_process_request,
+                                    &link->create_stacked_netdev_messages,
+                                    create_stacked_netdev_handler, NULL);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to request to create stacked netdev '%s': %m",
+                return log_link_error_errno(link, r, "Failed to request stacked netdev '%s': %m",
                                             netdev->ifname);
 
-        log_link_debug(link, "Requested to create stacked netdev '%s'", netdev->ifname);
+        log_link_debug(link, "Requested stacked netdev '%s'", netdev->ifname);
+        return 0;
+}
+
+static int independent_netdev_process_request(Request *req, Link *link, void *userdata) {
+        NetDev *netdev = ASSERT_PTR(userdata);
+        int r;
+
+        assert(!link);
+
+        r = netdev_is_ready_to_create(netdev, NULL);
+        if (r <= 0)
+                return r;
+
+        r = independent_netdev_create(netdev);
+        if (r < 0)
+                return log_netdev_warning_errno(netdev, r, "Failed to create netdev: %m");
+
+        return 1;
+}
+
+static int netdev_request_to_create(NetDev *netdev) {
+        int r;
+
+        assert(netdev);
+
+        if (netdev_is_stacked(netdev))
+                return 0;
+
+        r = netdev_is_ready_to_create(netdev, NULL);
+        if (r < 0)
+                return r;
+        if (r > 0) {
+                /* If the netdev has no dependency, then create it now. */
+                r = independent_netdev_create(netdev);
+                if (r < 0)
+                        return log_netdev_warning_errno(netdev, r, "Failed to create netdev: %m");
+
+        } else {
+                /* Otherwise, wait for the dependencies being resolved. */
+                r = netdev_queue_request(netdev, independent_netdev_process_request, NULL);
+                if (r < 0)
+                        return log_netdev_warning_errno(netdev, r, "Failed to request to create netdev: %m");
+        }
+
         return 0;
 }
 
 int netdev_load_one(Manager *manager, const char *filename) {
         _cleanup_(netdev_unrefp) NetDev *netdev_raw = NULL, *netdev = NULL;
         const char *dropin_dirname;
-        bool independent = false;
         int r;
 
         assert(manager);
         assert(filename);
 
         r = null_or_empty_path(filename);
-        if (r == -ENOENT)
-                return 0;
         if (r < 0)
-                return r;
+                return log_warning_errno(r, "Failed to check if \"%s\" is empty: %m", filename);
         if (r > 0) {
                 log_debug("Skipping empty file: %s", filename);
                 return 0;
@@ -704,9 +792,10 @@
                         config_item_perf_lookup, network_netdev_gperf_lookup,
                         CONFIG_PARSE_WARN,
                         netdev_raw,
+                        NULL,
                         NULL);
         if (r < 0)
-                return r;
+                return r; /* config_parse_many() logs internally. */
 
         /* skip out early if configuration does not match the environment */
         if (!condition_test_list(netdev_raw->conditions, environ, NULL, NULL, NULL)) {
@@ -714,15 +803,11 @@
                 return 0;
         }
 
-        if (netdev_raw->kind == _NETDEV_KIND_INVALID) {
-                log_warning("NetDev has no Kind= configured in %s. Ignoring", filename);
-                return 0;
-        }
+        if (netdev_raw->kind == _NETDEV_KIND_INVALID)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "NetDev has no Kind= configured in \"%s\", ignoring.", filename);
 
-        if (!netdev_raw->ifname) {
-                log_warning("NetDev without Name= configured in %s. Ignoring", filename);
-                return 0;
-        }
+        if (!netdev_raw->ifname)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "NetDev without Name= configured in \"%s\", ignoring.", filename);
 
         netdev = malloc0(NETDEV_VTABLE(netdev_raw)->object_size);
         if (!netdev)
@@ -742,28 +827,21 @@
                         NETDEV_VTABLE(netdev)->sections,
                         config_item_perf_lookup, network_netdev_gperf_lookup,
                         CONFIG_PARSE_WARN,
-                        netdev, NULL);
+                        netdev, NULL, NULL);
         if (r < 0)
-                return r;
+                return r; /* config_parse_many() logs internally. */
 
         /* verify configuration */
         if (NETDEV_VTABLE(netdev)->config_verify) {
                 r = NETDEV_VTABLE(netdev)->config_verify(netdev, filename);
                 if (r < 0)
-                        return 0;
+                        return r; /* config_verify() logs internally. */
         }
 
         netdev->filename = strdup(filename);
         if (!netdev->filename)
                 return log_oom();
 
-        if (!netdev->mac && NETDEV_VTABLE(netdev)->generate_mac) {
-                r = netdev_get_mac(netdev->ifname, &netdev->mac);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r,
-                                                      "Failed to generate predictable MAC address: %m");
-        }
-
         r = hashmap_ensure_put(&netdev->manager->netdevs, &string_hash_ops, netdev->ifname, netdev);
         if (r == -ENOMEM)
                 return log_oom();
@@ -773,80 +851,28 @@
                 assert(n);
                 if (!streq(netdev->filename, n->filename))
                         log_netdev_warning_errno(netdev, r,
-                                                 "Device was already configured by file %s, ignoring %s.",
+                                                 "Device was already configured by \"%s\", ignoring %s.",
                                                  n->filename, netdev->filename);
 
                 /* Clear ifname before netdev_free() is called. Otherwise, the NetDev object 'n' is
                  * removed from the hashmap 'manager->netdevs'. */
                 netdev->ifname = mfree(netdev->ifname);
-                return 0;
+                return -EEXIST;
         }
+        assert(r > 0);
+
+        log_netdev_debug(netdev, "loaded \"%s\"", netdev_kind_to_string(netdev->kind));
+
+        r = netdev_request_to_create(netdev);
         if (r < 0)
-                return r;
+                return r; /* netdev_request_to_create() logs internally. */
 
-        log_netdev_debug(netdev, "loaded %s", netdev_kind_to_string(netdev->kind));
-
-        if (IN_SET(netdev_get_create_type(netdev), NETDEV_CREATE_MASTER, NETDEV_CREATE_INDEPENDENT)) {
-                r = netdev_create(netdev, NULL, NULL);
-                if (r < 0)
-                        return r;
-        }
-
-        switch (netdev->kind) {
-        case NETDEV_KIND_IPIP:
-                independent = IPIP(netdev)->independent;
-                break;
-        case NETDEV_KIND_GRE:
-                independent = GRE(netdev)->independent;
-                break;
-        case NETDEV_KIND_GRETAP:
-                independent = GRETAP(netdev)->independent;
-                break;
-        case NETDEV_KIND_IP6GRE:
-                independent = IP6GRE(netdev)->independent;
-                break;
-        case NETDEV_KIND_IP6GRETAP:
-                independent = IP6GRETAP(netdev)->independent;
-                break;
-        case NETDEV_KIND_SIT:
-                independent = SIT(netdev)->independent;
-                break;
-        case NETDEV_KIND_VTI:
-                independent = VTI(netdev)->independent;
-                break;
-        case NETDEV_KIND_VTI6:
-                independent = VTI6(netdev)->independent;
-                break;
-        case NETDEV_KIND_IP6TNL:
-                independent = IP6TNL(netdev)->independent;
-                break;
-        case NETDEV_KIND_ERSPAN:
-                independent = ERSPAN(netdev)->independent;
-                break;
-        case NETDEV_KIND_XFRM:
-                independent = XFRM(netdev)->independent;
-                break;
-        case NETDEV_KIND_VXLAN:
-                independent = VXLAN(netdev)->independent;
-                break;
-        default:
-                break;
-        }
-
-        if (independent) {
-                r = netdev_create(netdev, NULL, NULL);
-                if (r < 0)
-                        return r;
-        }
-
-        netdev = NULL;
-
+        TAKE_PTR(netdev);
         return 0;
 }
 
 int netdev_load(Manager *manager, bool reload) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(manager);
@@ -858,11 +884,67 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to enumerate netdev files: %m");
 
-        STRV_FOREACH(f, files) {
-                r = netdev_load_one(manager, *f);
-                if (r < 0)
-                        log_error_errno(r, "Failed to load %s, ignoring: %m", *f);
-        }
+        STRV_FOREACH(f, files)
+                (void) netdev_load_one(manager, *f);
 
         return 0;
 }
+
+int config_parse_netdev_kind(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        NetDevKind k, *kind = ASSERT_PTR(data);
+
+        assert(filename);
+        assert(rvalue);
+
+        k = netdev_kind_from_string(rvalue);
+        if (k < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, k, "Failed to parse netdev kind, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (*kind != _NETDEV_KIND_INVALID && *kind != k) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Specified netdev kind is different from the previous value '%s', ignoring assignment: %s",
+                           netdev_kind_to_string(*kind), rvalue);
+                return 0;
+        }
+
+        *kind = k;
+
+        return 0;
+}
+
+int config_parse_netdev_hw_addr(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        struct hw_addr_data *hw_addr = ASSERT_PTR(data);
+
+        assert(rvalue);
+
+        if (streq(rvalue, "none")) {
+                *hw_addr = HW_ADDR_NONE;
+                return 0;
+        }
+
+        return config_parse_hw_addr(unit, filename, line, section, section_line, lvalue, ltype, rvalue, data, userdata);
+}
diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h
index 493ae32..49eadbb 100644
--- a/src/network/netdev/netdev.h
+++ b/src/network/netdev/netdev.h
@@ -4,11 +4,15 @@
 #include "sd-netlink.h"
 
 #include "conf-parser.h"
+#include "ether-addr-util.h"
 #include "list.h"
 #include "log-link.h"
 #include "networkd-link.h"
 #include "time-util.h"
 
+/* Special hardware address value to suppress generating persistent hardware address for the netdev. */
+#define HW_ADDR_NONE ((struct hw_addr_data) { .length = 1, })
+
 #define NETDEV_COMMON_SECTIONS "Match\0NetDev\0"
 /* This is the list of known sections. We need to ignore them in the initial parsing phase. */
 #define NETDEV_OTHER_SECTIONS                     \
@@ -18,65 +22,69 @@
         "-Bridge\0"                               \
         "-FooOverUDP\0"                           \
         "-GENEVE\0"                               \
+        "-IPoIB\0"                                \
         "-IPVLAN\0"                               \
         "-IPVTAP\0"                               \
         "-L2TP\0"                                 \
         "-L2TPSession\0"                          \
         "-MACsec\0"                               \
+        "-MACsecReceiveAssociation\0"             \
         "-MACsecReceiveChannel\0"                 \
         "-MACsecTransmitAssociation\0"            \
-        "-MACsecReceiveAssociation\0"             \
-        "-MACVTAP\0"                              \
         "-MACVLAN\0"                              \
-        "-Tunnel\0"                               \
-        "-Tun\0"                                  \
-        "-Tap\0"                                  \
+        "-MACVTAP\0"                              \
         "-Peer\0"                                 \
+        "-Tap\0"                                  \
+        "-Tun\0"                                  \
+        "-Tunnel\0"                               \
         "-VLAN\0"                                 \
         "-VRF\0"                                  \
         "-VXCAN\0"                                \
         "-VXLAN\0"                                \
+        "-WLAN\0"                                 \
         "-WireGuard\0"                            \
         "-WireGuardPeer\0"                        \
         "-Xfrm\0"
 
 typedef enum NetDevKind {
-        NETDEV_KIND_BRIDGE,
-        NETDEV_KIND_BOND,
-        NETDEV_KIND_VLAN,
-        NETDEV_KIND_MACVLAN,
-        NETDEV_KIND_MACVTAP,
-        NETDEV_KIND_IPVLAN,
-        NETDEV_KIND_IPVTAP,
-        NETDEV_KIND_VXLAN,
-        NETDEV_KIND_IPIP,
-        NETDEV_KIND_GRE,
-        NETDEV_KIND_GRETAP,
-        NETDEV_KIND_IP6GRE,
-        NETDEV_KIND_IP6GRETAP,
-        NETDEV_KIND_SIT,
-        NETDEV_KIND_VETH,
-        NETDEV_KIND_VTI,
-        NETDEV_KIND_VTI6,
-        NETDEV_KIND_IP6TNL,
-        NETDEV_KIND_DUMMY,
-        NETDEV_KIND_TUN,
-        NETDEV_KIND_TAP,
-        NETDEV_KIND_VRF,
-        NETDEV_KIND_VCAN,
-        NETDEV_KIND_GENEVE,
-        NETDEV_KIND_VXCAN,
-        NETDEV_KIND_WIREGUARD,
-        NETDEV_KIND_NETDEVSIM,
-        NETDEV_KIND_FOU,
-        NETDEV_KIND_ERSPAN,
-        NETDEV_KIND_L2TP,
-        NETDEV_KIND_MACSEC,
-        NETDEV_KIND_NLMON,
-        NETDEV_KIND_XFRM,
-        NETDEV_KIND_IFB,
         NETDEV_KIND_BAREUDP,
         NETDEV_KIND_BATADV,
+        NETDEV_KIND_BOND,
+        NETDEV_KIND_BRIDGE,
+        NETDEV_KIND_DUMMY,
+        NETDEV_KIND_ERSPAN,
+        NETDEV_KIND_FOU,
+        NETDEV_KIND_GENEVE,
+        NETDEV_KIND_GRE,
+        NETDEV_KIND_GRETAP,
+        NETDEV_KIND_IFB,
+        NETDEV_KIND_IP6GRE,
+        NETDEV_KIND_IP6GRETAP,
+        NETDEV_KIND_IP6TNL,
+        NETDEV_KIND_IPIP,
+        NETDEV_KIND_IPOIB,
+        NETDEV_KIND_IPVLAN,
+        NETDEV_KIND_IPVTAP,
+        NETDEV_KIND_L2TP,
+        NETDEV_KIND_MACSEC,
+        NETDEV_KIND_MACVLAN,
+        NETDEV_KIND_MACVTAP,
+        NETDEV_KIND_NETDEVSIM,
+        NETDEV_KIND_NLMON,
+        NETDEV_KIND_SIT,
+        NETDEV_KIND_TAP,
+        NETDEV_KIND_TUN,
+        NETDEV_KIND_VCAN,
+        NETDEV_KIND_VETH,
+        NETDEV_KIND_VLAN,
+        NETDEV_KIND_VRF,
+        NETDEV_KIND_VTI,
+        NETDEV_KIND_VTI6,
+        NETDEV_KIND_VXCAN,
+        NETDEV_KIND_VXLAN,
+        NETDEV_KIND_WIREGUARD,
+        NETDEV_KIND_WLAN,
+        NETDEV_KIND_XFRM,
         _NETDEV_KIND_MAX,
         _NETDEV_KIND_TUNNEL, /* Used by config_parse_stacked_netdev() */
         _NETDEV_KIND_INVALID = -EINVAL,
@@ -94,16 +102,13 @@
 
 typedef enum NetDevCreateType {
         NETDEV_CREATE_INDEPENDENT,
-        NETDEV_CREATE_MASTER,
         NETDEV_CREATE_STACKED,
-        NETDEV_CREATE_AFTER_CONFIGURED,
         _NETDEV_CREATE_MAX,
         _NETDEV_CREATE_INVALID = -EINVAL,
 } NetDevCreateType;
 
 typedef struct Manager Manager;
 typedef struct Condition Condition;
-typedef struct Request Request;
 
 typedef struct NetDev {
         Manager *manager;
@@ -118,7 +123,7 @@
         NetDevKind kind;
         char *description;
         char *ifname;
-        struct ether_addr *mac;
+        struct hw_addr_data hw_addr;
         uint32_t mtu;
         int ifindex;
 } NetDev;
@@ -137,6 +142,9 @@
          * to be set != 0. */
         void (*init)(NetDev *n);
 
+        /* This is called when the interface is removed. */
+        void (*drop)(NetDev *n);
+
         /* This should free all kind-specific variables. It should be
          * idempotent. */
         void (*done)(NetDev *n);
@@ -147,20 +155,26 @@
         /* specifies if netdev is independent, or a master device or a stacked device */
         NetDevCreateType create_type;
 
+        /* This is used for stacked netdev. Return true when the underlying link is ready. */
+        int (*is_ready_to_create)(NetDev *netdev, Link *link);
+
         /* create netdev, if not done via rtnl */
         int (*create)(NetDev *netdev);
 
-        /* create netdev after link is fully configured */
-        int (*create_after_configured)(NetDev *netdev, Link *link);
-
         /* perform additional configuration after netdev has been createad */
-        int (*post_create)(NetDev *netdev, Link *link, sd_netlink_message *message);
+        int (*post_create)(NetDev *netdev, Link *link);
 
         /* verify that compulsory configuration options were specified */
         int (*config_verify)(NetDev *netdev, const char *filename);
 
-        /* Generate MAC address or not When MACAddress= is not specified. */
+        /* expected iftype, e.g. ARPHRD_ETHER. */
+        uint16_t iftype;
+
+        /* Generate MAC address when MACAddress= is not specified. */
         bool generate_mac;
+
+        /* When assigning ifindex to the netdev, skip to check if the netdev kind matches. */
+        bool skip_netdev_kind_check;
 } NetDevVTable;
 
 extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX];
@@ -184,6 +198,7 @@
 int netdev_load(Manager *manager, bool reload);
 int netdev_load_one(Manager *manager, const char *filename);
 void netdev_drop(NetDev *netdev);
+void netdev_enter_failed(NetDev *netdev);
 
 NetDev *netdev_unref(NetDev *netdev);
 NetDev *netdev_ref(NetDev *netdev);
@@ -193,11 +208,10 @@
 bool netdev_is_managed(NetDev *netdev);
 int netdev_get(Manager *manager, const char *name, NetDev **ret);
 int netdev_set_ifindex(NetDev *netdev, sd_netlink_message *newlink);
-int netdev_get_mac(const char *ifname, struct ether_addr **ret);
-int netdev_join(NetDev *netdev, Link *link, link_netlink_message_handler_t cb);
+int netdev_generate_hw_addr(NetDev *netdev, Link *link, const char *name,
+                            const struct hw_addr_data *hw_addr, struct hw_addr_data *ret);
 
-int request_process_create_stacked_netdev(Request *req);
-int link_request_to_crate_stacked_netdev(Link *link, NetDev *netdev);
+int link_request_stacked_netdev(Link *link, NetDev *netdev);
 
 const char *netdev_kind_to_string(NetDevKind d) _const_;
 NetDevKind netdev_kind_from_string(const char *d) _pure_;
@@ -210,6 +224,7 @@
 }
 
 CONFIG_PARSER_PROTOTYPE(config_parse_netdev_kind);
+CONFIG_PARSER_PROTOTYPE(config_parse_netdev_hw_addr);
 
 /* gperf */
 const struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
diff --git a/src/network/netdev/netdevsim.c b/src/network/netdev/netdevsim.c
index b281428..15d5c13 100644
--- a/src/network/netdev/netdevsim.c
+++ b/src/network/netdev/netdevsim.c
@@ -1,10 +1,13 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <linux/if_arp.h>
+
 #include "netdevsim.h"
 
 const NetDevVTable netdevsim_vtable = {
         .object_size = sizeof(NetDevSim),
         .sections = NETDEV_COMMON_SECTIONS,
         .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/nlmon.c b/src/network/netdev/nlmon.c
index a8faed5..ff37209 100644
--- a/src/network/netdev/nlmon.c
+++ b/src/network/netdev/nlmon.c
@@ -1,14 +1,16 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <linux/if_arp.h>
+
 #include "nlmon.h"
 
 static int netdev_nlmon_verify(NetDev *netdev, const char *filename) {
         assert(netdev);
         assert(filename);
 
-        if (netdev->mac) {
+        if (netdev->hw_addr.length > 0) {
                 log_netdev_warning(netdev, "%s: MACAddress= is not supported. Ignoring", filename);
-                netdev->mac = mfree(netdev->mac);
+                netdev->hw_addr = HW_ADDR_NULL;
         }
 
         return 0;
@@ -19,4 +21,5 @@
         .sections = NETDEV_COMMON_SECTIONS,
         .create_type = NETDEV_CREATE_INDEPENDENT,
         .config_verify = netdev_nlmon_verify,
+        .iftype = ARPHRD_NETLINK,
 };
diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c
index 2371808..2addfee 100644
--- a/src/network/netdev/tunnel.c
+++ b/src/network/netdev/tunnel.c
@@ -2,20 +2,24 @@
 
 #include <netinet/in.h>
 #include <linux/fou.h>
-#include <linux/ip.h>
+#include <linux/if_arp.h>
 #include <linux/if_tunnel.h>
+#include <linux/ip.h>
 #include <linux/ip6_tunnel.h>
 
+#include "af-list.h"
 #include "conf-parser.h"
+#include "hexdecoct.h"
 #include "missing_network.h"
 #include "netlink-util.h"
+#include "networkd-manager.h"
 #include "parse-util.h"
+#include "siphash24.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "tunnel.h"
-#include "util.h"
 
-#define DEFAULT_TNL_HOP_LIMIT   64
+#define DEFAULT_IPV6_TTL   64
 #define IP6_FLOWINFO_FLOWLABEL  htobe32(0x000FFFFF)
 #define IP6_TNL_F_ALLOW_LOCAL_REMOTE 0x40
 
@@ -28,68 +32,248 @@
 DEFINE_STRING_TABLE_LOOKUP(ip6tnl_mode, Ip6TnlMode);
 DEFINE_CONFIG_PARSE_ENUM(config_parse_ip6tnl_mode, ip6tnl_mode, Ip6TnlMode, "Failed to parse ip6 tunnel Mode");
 
+#define HASH_KEY SD_ID128_MAKE(74,c4,de,12,f3,d9,41,34,bb,3d,c1,a4,42,93,50,87)
+
+int dhcp4_pd_create_6rd_tunnel_name(Link *link, char **ret) {
+        _cleanup_free_ char *ifname_alloc = NULL;
+        uint8_t ipv4masklen, sixrd_prefixlen, *buf, *p;
+        struct in_addr ipv4address;
+        struct in6_addr sixrd_prefix;
+        char ifname[IFNAMSIZ];
+        uint64_t result;
+        size_t sz;
+        int r;
+
+        assert(link);
+        assert(link->dhcp_lease);
+
+        r = sd_dhcp_lease_get_address(link->dhcp_lease, &ipv4address);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to get DHCPv4 address: %m");
+
+        r = sd_dhcp_lease_get_6rd(link->dhcp_lease, &ipv4masklen, &sixrd_prefixlen, &sixrd_prefix, NULL, NULL);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to get 6rd option: %m");
+
+        sz = sizeof(uint8_t) * 2 + sizeof(struct in6_addr) + sizeof(struct in_addr);
+        buf = newa(uint8_t, sz);
+        p = buf;
+        p = mempcpy(p, &ipv4masklen, sizeof(uint8_t));
+        p = mempcpy(p, &ipv4address, sizeof(struct in_addr));
+        p = mempcpy(p, &sixrd_prefixlen, sizeof(uint8_t));
+        p = mempcpy(p, &sixrd_prefix, sizeof(struct in6_addr));
+
+        result = siphash24(buf, sz, HASH_KEY.bytes);
+        memcpy(ifname, "6rd-", STRLEN("6rd-"));
+        ifname[STRLEN("6rd-")    ] = urlsafe_base64char(result >> 54);
+        ifname[STRLEN("6rd-") + 1] = urlsafe_base64char(result >> 48);
+        ifname[STRLEN("6rd-") + 2] = urlsafe_base64char(result >> 42);
+        ifname[STRLEN("6rd-") + 3] = urlsafe_base64char(result >> 36);
+        ifname[STRLEN("6rd-") + 4] = urlsafe_base64char(result >> 30);
+        ifname[STRLEN("6rd-") + 5] = urlsafe_base64char(result >> 24);
+        ifname[STRLEN("6rd-") + 6] = urlsafe_base64char(result >> 18);
+        ifname[STRLEN("6rd-") + 7] = urlsafe_base64char(result >> 12);
+        ifname[STRLEN("6rd-") + 8] = urlsafe_base64char(result >> 6);
+        ifname[STRLEN("6rd-") + 9] = urlsafe_base64char(result);
+        ifname[STRLEN("6rd-") + 10] = '\0';
+        assert_cc(STRLEN("6rd-") + 10 <= IFNAMSIZ);
+
+        ifname_alloc = strdup(ifname);
+        if (!ifname_alloc)
+                return log_oom_debug();
+
+        *ret = TAKE_PTR(ifname_alloc);
+        return 0;
+}
+
+static int dhcp4_pd_create_6rd_tunnel_message(
+                Link *link,
+                sd_netlink_message *m,
+                const struct in_addr *ipv4address,
+                uint8_t ipv4masklen,
+                const struct in6_addr *sixrd_prefix,
+                uint8_t sixrd_prefixlen) {
+        int r;
+
+        r = sd_netlink_message_append_string(m, IFLA_IFNAME, link->dhcp4_6rd_tunnel_name);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container(m, IFLA_LINKINFO);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, "sit");
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_in_addr(m, IFLA_IPTUN_LOCAL, ipv4address);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u8(m, IFLA_IPTUN_TTL, 64);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_in6_addr(m, IFLA_IPTUN_6RD_PREFIX, sixrd_prefix);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u16(m, IFLA_IPTUN_6RD_PREFIXLEN, sixrd_prefixlen);
+        if (r < 0)
+                return r;
+
+        struct in_addr relay_prefix = *ipv4address;
+        (void) in4_addr_mask(&relay_prefix, ipv4masklen);
+        r = sd_netlink_message_append_u32(m, IFLA_IPTUN_6RD_RELAY_PREFIX, relay_prefix.s_addr);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u16(m, IFLA_IPTUN_6RD_RELAY_PREFIXLEN, ipv4masklen);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_close_container(m);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_close_container(m);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+int dhcp4_pd_create_6rd_tunnel(Link *link, link_netlink_message_handler_t callback) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        uint8_t ipv4masklen, sixrd_prefixlen;
+        struct in_addr ipv4address;
+        struct in6_addr sixrd_prefix;
+        int r;
+
+        assert(link);
+        assert(link->ifindex > 0);
+        assert(link->manager);
+        assert(link->dhcp_lease);
+        assert(link->dhcp4_6rd_tunnel_name);
+        assert(callback);
+
+        r = sd_dhcp_lease_get_address(link->dhcp_lease, &ipv4address);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to get DHCPv4 address: %m");
+
+        r = sd_dhcp_lease_get_6rd(link->dhcp_lease, &ipv4masklen, &sixrd_prefixlen, &sixrd_prefix, NULL, NULL);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to get 6rd option: %m");
+
+        r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_NEWLINK, 0);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to create netlink message: %m");
+
+        r = dhcp4_pd_create_6rd_tunnel_message(link, m,
+                                               &ipv4address, ipv4masklen,
+                                               &sixrd_prefix, sixrd_prefixlen);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to fill netlink message: %m");
+
+        r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+                               link_netlink_destroy_callback, link);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Could not send netlink message: %m");
+
+        link_ref(link);
+
+        return 0;
+}
+
+static int tunnel_get_local_address(Tunnel *t, Link *link, union in_addr_union *ret) {
+        assert(t);
+
+        if (t->local_type < 0) {
+                if (ret)
+                        *ret = t->local;
+                return 0;
+        }
+
+        return link_get_local_address(link, t->local_type, t->family, NULL, ret);
+}
+
 static int netdev_ipip_sit_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+        union in_addr_union local;
         Tunnel *t;
         int r;
 
         assert(netdev);
+        assert(m);
 
         if (netdev->kind == NETDEV_KIND_IPIP)
                 t = IPIP(netdev);
         else
                 t = SIT(netdev);
 
-        assert(m);
         assert(t);
 
+        if (t->external) {
+                r = sd_netlink_message_append_flag(m, IFLA_IPTUN_COLLECT_METADATA);
+                if (r < 0)
+                        return r;
+
+                /* If external mode is enabled, then the following settings should not be appended. */
+                return 0;
+        }
+
         if (link || t->assign_to_loopback) {
                 r = sd_netlink_message_append_u32(m, IFLA_IPTUN_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_LINK attribute: %m");
+                        return r;
         }
 
-        r = sd_netlink_message_append_in_addr(m, IFLA_IPTUN_LOCAL, &t->local.in);
+        r = tunnel_get_local_address(t, link, &local);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_LOCAL attribute: %m");
+                return log_netdev_error_errno(netdev, r, "Could not find local address: %m");
+
+        r = sd_netlink_message_append_in_addr(m, IFLA_IPTUN_LOCAL, &local.in);
+        if (r < 0)
+                return r;
 
         r = sd_netlink_message_append_in_addr(m, IFLA_IPTUN_REMOTE, &t->remote.in);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_REMOTE attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_IPTUN_TTL, t->ttl);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_TTL attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_IPTUN_PMTUDISC, t->pmtudisc);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_PMTUDISC attribute: %m");
+                return r;
 
         if (t->fou_tunnel) {
                 r = sd_netlink_message_append_u16(m, IFLA_IPTUN_ENCAP_TYPE, t->fou_encap_type);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_ENCAP_TYPE attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_u16(m, IFLA_IPTUN_ENCAP_SPORT, htobe16(t->encap_src_port));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_ENCAP_SPORT attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_u16(m, IFLA_IPTUN_ENCAP_DPORT, htobe16(t->fou_destination_port));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_ENCAP_DPORT attribute: %m");
+                        return r;
         }
 
         if (netdev->kind == NETDEV_KIND_SIT) {
                 if (t->sixrd_prefixlen > 0) {
                         r = sd_netlink_message_append_in6_addr(m, IFLA_IPTUN_6RD_PREFIX, &t->sixrd_prefix);
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_6RD_PREFIX attribute: %m");
+                                return r;
 
                         /* u16 is deliberate here, even though we're passing a netmask that can never be >128. The kernel is
                          * expecting to receive the prefixlen as a u16.
                          */
                         r = sd_netlink_message_append_u16(m, IFLA_IPTUN_6RD_PREFIXLEN, t->sixrd_prefixlen);
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_6RD_PREFIXLEN attribute: %m");
+                                return r;
                 }
 
                 if (t->isatap >= 0) {
@@ -99,14 +283,15 @@
 
                         r = sd_netlink_message_append_u16(m, IFLA_IPTUN_FLAGS, flags);
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_FLAGS attribute: %m");
+                                return r;
                 }
         }
 
-        return r;
+        return 0;
 }
 
 static int netdev_gre_erspan_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+        union in_addr_union local;
         uint32_t ikey = 0;
         uint32_t okey = 0;
         uint16_t iflags = 0;
@@ -128,42 +313,70 @@
                 t = GRETAP(netdev);
                 break;
         default:
-                assert_not_reached("invalid netdev kind");
+                assert_not_reached();
         }
 
         assert(t);
 
+        if (t->external) {
+                r = sd_netlink_message_append_flag(m, IFLA_GRE_COLLECT_METADATA);
+                if (r < 0)
+                        return r;
+
+                /* If external mode is enabled, then the following settings should not be appended. */
+                return 0;
+        }
+
         if (link || t->assign_to_loopback) {
                 r = sd_netlink_message_append_u32(m, IFLA_GRE_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_LINK attribute: %m");
+                        return r;
         }
 
         if (netdev->kind == NETDEV_KIND_ERSPAN) {
-                r = sd_netlink_message_append_u32(m, IFLA_GRE_ERSPAN_INDEX, t->erspan_index);
+                r = sd_netlink_message_append_u8(m, IFLA_GRE_ERSPAN_VER, t->erspan_version);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_ERSPAN_INDEX attribute: %m");
+                        return r;
+
+                if (t->erspan_version == 1) {
+                        r = sd_netlink_message_append_u32(m, IFLA_GRE_ERSPAN_INDEX, t->erspan_index);
+                        if (r < 0)
+                                return r;
+
+                } else if (t->erspan_version == 2) {
+                        r = sd_netlink_message_append_u8(m, IFLA_GRE_ERSPAN_DIR, t->erspan_direction);
+                        if (r < 0)
+                                return r;
+
+                        r = sd_netlink_message_append_u16(m, IFLA_GRE_ERSPAN_HWID, t->erspan_hwid);
+                        if (r < 0)
+                                return r;
+                }
         }
 
-        r = sd_netlink_message_append_in_addr(m, IFLA_GRE_LOCAL, &t->local.in);
+        r = tunnel_get_local_address(t, link, &local);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_LOCAL attribute: %m");
+                return log_netdev_error_errno(netdev, r, "Could not find local address: %m");
+
+        r = sd_netlink_message_append_in_addr(m, IFLA_GRE_LOCAL, &local.in);
+        if (r < 0)
+                return r;
 
         r = sd_netlink_message_append_in_addr(m, IFLA_GRE_REMOTE, &t->remote.in);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_REMOTE attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_GRE_TTL, t->ttl);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_TTL attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_GRE_TOS, t->tos);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_TOS attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_GRE_PMTUDISC, t->pmtudisc);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_PMTUDISC attribute: %m");
+                return r;
 
         if (t->key != 0) {
                 ikey = okey = htobe32(t->key);
@@ -191,38 +404,39 @@
 
         r = sd_netlink_message_append_u32(m, IFLA_GRE_IKEY, ikey);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_IKEY attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, IFLA_GRE_OKEY, okey);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_OKEY attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u16(m, IFLA_GRE_IFLAGS, iflags);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_IFLAGS attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u16(m, IFLA_GRE_OFLAGS, oflags);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_OFLAGS, attribute: %m");
+                return r;
 
         if (t->fou_tunnel) {
                 r = sd_netlink_message_append_u16(m, IFLA_GRE_ENCAP_TYPE, t->fou_encap_type);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_ENCAP_TYPE attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_u16(m, IFLA_GRE_ENCAP_SPORT, htobe16(t->encap_src_port));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_ENCAP_SPORT attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_u16(m, IFLA_GRE_ENCAP_DPORT, htobe16(t->fou_destination_port));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_ENCAP_DPORT attribute: %m");
+                        return r;
         }
 
-        return r;
+        return 0;
 }
 
 static int netdev_ip6gre_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+        union in_addr_union local;
         uint32_t ikey = 0;
         uint32_t okey = 0;
         uint16_t iflags = 0;
@@ -231,6 +445,7 @@
         int r;
 
         assert(netdev);
+        assert(m);
 
         if (netdev->kind == NETDEV_KIND_IP6GRE)
                 t = IP6GRE(netdev);
@@ -238,35 +453,47 @@
                 t = IP6GRETAP(netdev);
 
         assert(t);
-        assert(m);
+
+        if (t->external) {
+                r = sd_netlink_message_append_flag(m, IFLA_GRE_COLLECT_METADATA);
+                if (r < 0)
+                        return r;
+
+                /* If external mode is enabled, then the following settings should not be appended. */
+                return 0;
+        }
 
         if (link || t->assign_to_loopback) {
                 r = sd_netlink_message_append_u32(m, IFLA_GRE_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_LINK attribute: %m");
+                        return r;
         }
 
-        r = sd_netlink_message_append_in6_addr(m, IFLA_GRE_LOCAL, &t->local.in6);
+        r = tunnel_get_local_address(t, link, &local);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_LOCAL attribute: %m");
+                return log_netdev_error_errno(netdev, r, "Could not find local address: %m");
+
+        r = sd_netlink_message_append_in6_addr(m, IFLA_GRE_LOCAL, &local.in6);
+        if (r < 0)
+                return r;
 
         r = sd_netlink_message_append_in6_addr(m, IFLA_GRE_REMOTE, &t->remote.in6);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_REMOTE attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_GRE_TTL, t->ttl);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_TTL attribute: %m");
+                return r;
 
         if (t->ipv6_flowlabel != _NETDEV_IPV6_FLOWLABEL_INVALID) {
                 r = sd_netlink_message_append_u32(m, IFLA_GRE_FLOWINFO, t->ipv6_flowlabel);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_FLOWINFO attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u32(m, IFLA_GRE_FLAGS, t->flags);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_FLAGS attribute: %m");
+                return r;
 
         if (t->key != 0) {
                 ikey = okey = htobe32(t->key);
@@ -286,24 +513,25 @@
 
         r = sd_netlink_message_append_u32(m, IFLA_GRE_IKEY, ikey);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_IKEY attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, IFLA_GRE_OKEY, okey);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_OKEY attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u16(m, IFLA_GRE_IFLAGS, iflags);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_IFLAGS attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u16(m, IFLA_GRE_OFLAGS, oflags);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_GRE_OFLAGS, attribute: %m");
+                return r;
 
-        return r;
+        return 0;
 }
 
 static int netdev_vti_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+        union in_addr_union local;
         uint32_t ikey, okey;
         Tunnel *t;
         int r;
@@ -321,7 +549,7 @@
         if (link || t->assign_to_loopback) {
                 r = sd_netlink_message_append_u32(m, IFLA_VTI_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VTI_LINK attribute: %m");
+                        return r;
         }
 
         if (t->key != 0)
@@ -333,72 +561,40 @@
 
         r = sd_netlink_message_append_u32(m, IFLA_VTI_IKEY, ikey);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VTI_IKEY attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(m, IFLA_VTI_OKEY, okey);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VTI_OKEY attribute: %m");
+                return r;
 
-        r = netlink_message_append_in_addr_union(m, IFLA_VTI_LOCAL, t->family, &t->local);
+        r = tunnel_get_local_address(t, link, &local);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VTI_LOCAL attribute: %m");
+                return log_netdev_error_errno(netdev, r, "Could not find local address: %m");
+
+        r = netlink_message_append_in_addr_union(m, IFLA_VTI_LOCAL, t->family, &local);
+        if (r < 0)
+                return r;
 
         r = netlink_message_append_in_addr_union(m, IFLA_VTI_REMOTE, t->family, &t->remote);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VTI_REMOTE attribute: %m");
+                return r;
 
-        return r;
+        return 0;
 }
 
 static int netdev_ip6tnl_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
-        Tunnel *t = IP6TNL(netdev);
+        union in_addr_union local;
         uint8_t proto;
+        Tunnel *t;
         int r;
 
         assert(netdev);
         assert(m);
+
+        t = IP6TNL(netdev);
+
         assert(t);
 
-        if (link || t->assign_to_loopback) {
-                r = sd_netlink_message_append_u32(m, IFLA_IPTUN_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_LINK attribute: %m");
-        }
-
-        r = sd_netlink_message_append_in6_addr(m, IFLA_IPTUN_LOCAL, &t->local.in6);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_LOCAL attribute: %m");
-
-        r = sd_netlink_message_append_in6_addr(m, IFLA_IPTUN_REMOTE, &t->remote.in6);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_REMOTE attribute: %m");
-
-        r = sd_netlink_message_append_u8(m, IFLA_IPTUN_TTL, t->ttl);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_TTL attribute: %m");
-
-        if (t->ipv6_flowlabel != _NETDEV_IPV6_FLOWLABEL_INVALID) {
-                r = sd_netlink_message_append_u32(m, IFLA_IPTUN_FLOWINFO, t->ipv6_flowlabel);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_FLOWINFO attribute: %m");
-        }
-
-        if (t->copy_dscp)
-                t->flags |= IP6_TNL_F_RCV_DSCP_COPY;
-
-        if (t->allow_localremote >= 0)
-                SET_FLAG(t->flags, IP6_TNL_F_ALLOW_LOCAL_REMOTE, t->allow_localremote);
-
-        if (t->encap_limit != 0) {
-                r = sd_netlink_message_append_u8(m, IFLA_IPTUN_ENCAP_LIMIT, t->encap_limit);
-                if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_ENCAP_LIMIT attribute: %m");
-        }
-
-        r = sd_netlink_message_append_u32(m, IFLA_IPTUN_FLAGS, t->flags);
-        if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_FLAGS attribute: %m");
-
         switch (t->ip6tnl_mode) {
         case NETDEV_IP6_TNL_MODE_IP6IP6:
                 proto = IPPROTO_IPV6;
@@ -414,54 +610,106 @@
 
         r = sd_netlink_message_append_u8(m, IFLA_IPTUN_PROTO, proto);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_PROTO attribute: %m");
+                return r;
 
-        return r;
+        if (t->external) {
+                r = sd_netlink_message_append_flag(m, IFLA_IPTUN_COLLECT_METADATA);
+                if (r < 0)
+                        return r;
+
+                /* If external mode is enabled, then the following settings should not be appended. */
+                return 0;
+        }
+
+        if (link || t->assign_to_loopback) {
+                r = sd_netlink_message_append_u32(m, IFLA_IPTUN_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
+                if (r < 0)
+                        return r;
+        }
+
+        r = tunnel_get_local_address(t, link, &local);
+        if (r < 0)
+                return log_netdev_error_errno(netdev, r, "Could not find local address: %m");
+
+        r = sd_netlink_message_append_in6_addr(m, IFLA_IPTUN_LOCAL, &local.in6);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_in6_addr(m, IFLA_IPTUN_REMOTE, &t->remote.in6);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u8(m, IFLA_IPTUN_TTL, t->ttl);
+        if (r < 0)
+                return r;
+
+        if (t->ipv6_flowlabel != _NETDEV_IPV6_FLOWLABEL_INVALID) {
+                r = sd_netlink_message_append_u32(m, IFLA_IPTUN_FLOWINFO, t->ipv6_flowlabel);
+                if (r < 0)
+                        return r;
+        }
+
+        if (t->copy_dscp)
+                t->flags |= IP6_TNL_F_RCV_DSCP_COPY;
+
+        if (t->allow_localremote >= 0)
+                SET_FLAG(t->flags, IP6_TNL_F_ALLOW_LOCAL_REMOTE, t->allow_localremote);
+
+        r = sd_netlink_message_append_u32(m, IFLA_IPTUN_FLAGS, t->flags);
+        if (r < 0)
+                return r;
+
+        if (t->encap_limit != 0) {
+                r = sd_netlink_message_append_u8(m, IFLA_IPTUN_ENCAP_LIMIT, t->encap_limit);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int netdev_tunnel_is_ready_to_create(NetDev *netdev, Link *link) {
+        Tunnel *t;
+
+        assert(netdev);
+
+        t = TUNNEL(netdev);
+
+        assert(t);
+
+        if (t->independent)
+                return true;
+
+        return tunnel_get_local_address(t, link, NULL) >= 0;
 }
 
 static int netdev_tunnel_verify(NetDev *netdev, const char *filename) {
-        Tunnel *t = NULL;
+        Tunnel *t;
 
         assert(netdev);
         assert(filename);
 
-        switch (netdev->kind) {
-        case NETDEV_KIND_IPIP:
-                t = IPIP(netdev);
-                break;
-        case NETDEV_KIND_SIT:
-                t = SIT(netdev);
-                break;
-        case NETDEV_KIND_GRE:
-                t = GRE(netdev);
-                break;
-        case NETDEV_KIND_GRETAP:
-                t = GRETAP(netdev);
-                break;
-        case NETDEV_KIND_IP6GRE:
-                t = IP6GRE(netdev);
-                break;
-        case NETDEV_KIND_IP6GRETAP:
-                t = IP6GRETAP(netdev);
-                break;
-        case NETDEV_KIND_VTI:
-                t = VTI(netdev);
-                break;
-        case NETDEV_KIND_VTI6:
-                t = VTI6(netdev);
-                break;
-        case NETDEV_KIND_IP6TNL:
-                t = IP6TNL(netdev);
-                break;
-        case NETDEV_KIND_ERSPAN:
-                t = ERSPAN(netdev);
-                break;
-        default:
-                assert_not_reached("Invalid tunnel kind");
-        }
+        t = TUNNEL(netdev);
 
         assert(t);
 
+        if (netdev->kind == NETDEV_KIND_IP6TNL &&
+            t->ip6tnl_mode == _NETDEV_IP6_TNL_MODE_INVALID)
+                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                              "ip6tnl without mode configured in %s. Ignoring", filename);
+
+        if (t->external) {
+                if (IN_SET(netdev->kind, NETDEV_KIND_VTI, NETDEV_KIND_VTI6))
+                        log_netdev_debug(netdev, "vti/vti6 tunnel do not support external mode, ignoring.");
+                else {
+                        /* tunnel with external mode does not require underlying interface. */
+                        t->independent = true;
+
+                        /* tunnel with external mode does not require any settings checked below. */
+                        return 0;
+                }
+        }
+
         if (IN_SET(netdev->kind, NETDEV_KIND_VTI, NETDEV_KIND_IPIP, NETDEV_KIND_SIT, NETDEV_KIND_GRE) &&
             !IN_SET(t->family, AF_UNSPEC, AF_INET))
                 return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
@@ -482,61 +730,130 @@
                 return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
                                               "ip6gretap tunnel without a remote IPv6 address configured in %s. Ignoring", filename);
 
-        if (netdev->kind == NETDEV_KIND_IP6TNL &&
-            t->ip6tnl_mode == _NETDEV_IP6_TNL_MODE_INVALID)
-                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
-                                              "ip6tnl without mode configured in %s. Ignoring", filename);
-
         if (t->fou_tunnel && t->fou_destination_port <= 0)
                 return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
                                               "FooOverUDP missing port configured in %s. Ignoring", filename);
 
-        if (netdev->kind == NETDEV_KIND_ERSPAN && (t->erspan_index >= (1 << 20) || t->erspan_index == 0))
-                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL), "Invalid erspan index %d. Ignoring", t->erspan_index);
-
         /* netlink_message_append_in_addr_union() is used for vti/vti6. So, t->family cannot be AF_UNSPEC. */
         if (netdev->kind == NETDEV_KIND_VTI)
                 t->family = AF_INET;
 
+        if (t->assign_to_loopback)
+                t->independent = true;
+
+        if (t->independent && t->local_type >= 0)
+                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                              "The local address cannot be '%s' when Independent= or AssignToLoopback= is enabled, ignoring.",
+                                              strna(netdev_local_address_type_to_string(t->local_type)));
+
         return 0;
 }
 
-int config_parse_tunnel_address(const char *unit,
-                                const char *filename,
-                                unsigned line,
-                                const char *section,
-                                unsigned section_line,
-                                const char *lvalue,
-                                int ltype,
-                                const char *rvalue,
-                                void *data,
-                                void *userdata) {
-        Tunnel *t = userdata;
-        union in_addr_union *addr = data, buffer;
+static int unset_local(Tunnel *t) {
+        assert(t);
+
+        /* Unset the previous assignment. */
+        t->local = IN_ADDR_NULL;
+        t->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
+
+        /* If the remote address is not specified, also clear the address family. */
+        if (!in_addr_is_set(t->family, &t->remote))
+                t->family = AF_UNSPEC;
+
+        return 0;
+}
+
+int config_parse_tunnel_local_address(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        union in_addr_union buffer = IN_ADDR_NULL;
+        NetDevLocalAddressType type;
+        Tunnel *t = ASSERT_PTR(userdata);
         int r, f;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
-        /* This is used to parse addresses on both local and remote ends of the tunnel.
-         * Address families must match.
-         *
-         * "any" is a special value which means that the address is unspecified.
-         */
+        if (isempty(rvalue) || streq(rvalue, "any"))
+                return unset_local(t);
 
-        if (streq(rvalue, "any")) {
-                *addr = IN_ADDR_NULL;
+        type = netdev_local_address_type_from_string(rvalue);
+        if (IN_SET(type, NETDEV_LOCAL_ADDRESS_IPV4LL, NETDEV_LOCAL_ADDRESS_DHCP4))
+                f = AF_INET;
+        else if (IN_SET(type, NETDEV_LOCAL_ADDRESS_IPV6LL, NETDEV_LOCAL_ADDRESS_DHCP6, NETDEV_LOCAL_ADDRESS_SLAAC))
+                f = AF_INET6;
+        else {
+                type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
+                r = in_addr_from_string_auto(rvalue, &f, &buffer);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Tunnel address \"%s\" invalid, ignoring assignment: %m", rvalue);
+                        return 0;
+                }
 
-                /* As a special case, if both the local and remote addresses are
-                 * unspecified, also clear the address family. */
-                if (!in_addr_is_set(t->family, &t->local) &&
-                    !in_addr_is_set(t->family, &t->remote))
-                        t->family = AF_UNSPEC;
+                if (in_addr_is_null(f, &buffer))
+                        return unset_local(t);
+        }
+
+        if (t->family != AF_UNSPEC && t->family != f) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Address family does not match the previous assignment, ignoring assignment: %s", rvalue);
                 return 0;
         }
 
+        t->family = f;
+        t->local = buffer;
+        t->local_type = type;
+        return 0;
+}
+
+static int unset_remote(Tunnel *t) {
+        assert(t);
+
+        /* Unset the previous assignment. */
+        t->remote = IN_ADDR_NULL;
+
+        /* If the local address is not specified, also clear the address family. */
+        if (t->local_type == _NETDEV_LOCAL_ADDRESS_TYPE_INVALID &&
+            !in_addr_is_set(t->family, &t->local))
+                t->family = AF_UNSPEC;
+
+        return 0;
+}
+
+int config_parse_tunnel_remote_address(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        union in_addr_union buffer;
+        Tunnel *t = ASSERT_PTR(userdata);
+        int r, f;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue) || streq(rvalue, "any"))
+                return unset_remote(t);
+
         r = in_addr_from_string_auto(rvalue, &f, &buffer);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
@@ -544,36 +861,38 @@
                 return 0;
         }
 
+        if (in_addr_is_null(f, &buffer))
+                return unset_remote(t);
+
         if (t->family != AF_UNSPEC && t->family != f) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Tunnel addresses incompatible, ignoring assignment: %s", rvalue);
+                           "Address family does not match the previous assignment, ignoring assignment: %s", rvalue);
                 return 0;
         }
 
         t->family = f;
-        *addr = buffer;
+        t->remote = buffer;
         return 0;
 }
 
-int config_parse_tunnel_key(const char *unit,
-                            const char *filename,
-                            unsigned line,
-                            const char *section,
-                            unsigned section_line,
-                            const char *lvalue,
-                            int ltype,
-                            const char *rvalue,
-                            void *data,
-                            void *userdata) {
+int config_parse_tunnel_key(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint32_t *dest = ASSERT_PTR(data), k;
         union in_addr_union buffer;
-        Tunnel *t = userdata;
-        uint32_t k;
         int r;
 
         assert(filename);
-        assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = in_addr_from_string(AF_INET, rvalue, &buffer);
         if (r < 0) {
@@ -586,113 +905,115 @@
         } else
                 k = be32toh(buffer.in.s_addr);
 
-        if (streq(lvalue, "Key"))
-                t->key = k;
-        else if (streq(lvalue, "InputKey"))
-                t->ikey = k;
-        else
-                t->okey = k;
-
+        *dest = k;
         return 0;
 }
 
-int config_parse_ipv6_flowlabel(const char* unit,
-                                const char *filename,
-                                unsigned line,
-                                const char *section,
-                                unsigned section_line,
-                                const char *lvalue,
-                                int ltype,
-                                const char *rvalue,
-                                void *data,
-                                void *userdata) {
-        IPv6FlowLabel *ipv6_flowlabel = data;
-        Tunnel *t = userdata;
-        int k = 0;
-        int r;
+int config_parse_ipv6_flowlabel(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Tunnel *t = ASSERT_PTR(userdata);
+        int k, r;
 
         assert(filename);
-        assert(lvalue);
         assert(rvalue);
-        assert(ipv6_flowlabel);
 
         if (streq(rvalue, "inherit")) {
-                *ipv6_flowlabel = IP6_FLOWINFO_FLOWLABEL;
+                t->ipv6_flowlabel = IP6_FLOWINFO_FLOWLABEL;
                 t->flags |= IP6_TNL_F_USE_ORIG_FLOWLABEL;
-        } else {
-                r = config_parse_int(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &k, userdata);
-                if (r < 0)
-                        return r;
-
-                if (k > 0xFFFFF)
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse IPv6 flowlabel option, ignoring: %s", rvalue);
-                else {
-                        *ipv6_flowlabel = htobe32(k) & IP6_FLOWINFO_FLOWLABEL;
-                        t->flags &= ~IP6_TNL_F_USE_ORIG_FLOWLABEL;
-                }
+                return 0;
         }
 
+        r = safe_atoi(rvalue, &k);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse tunnel IPv6 flowlabel, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (k > 0xFFFFF) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid tunnel IPv6 flowlabel, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        t->ipv6_flowlabel = htobe32(k) & IP6_FLOWINFO_FLOWLABEL;
+        t->flags &= ~IP6_TNL_F_USE_ORIG_FLOWLABEL;
         return 0;
 }
 
-int config_parse_encap_limit(const char* unit,
-                             const char *filename,
-                             unsigned line,
-                             const char *section,
-                             unsigned section_line,
-                             const char *lvalue,
-                             int ltype,
-                             const char *rvalue,
-                             void *data,
-                             void *userdata) {
-        Tunnel *t = userdata;
-        int k = 0;
-        int r;
+int config_parse_encap_limit(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Tunnel *t = ASSERT_PTR(userdata);
+        int k, r;
 
         assert(filename);
-        assert(lvalue);
         assert(rvalue);
 
-        if (streq(rvalue, "none"))
+        if (streq(rvalue, "none")) {
                 t->flags |= IP6_TNL_F_IGN_ENCAP_LIMIT;
-        else {
-                r = safe_atoi(rvalue, &k);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse Tunnel Encapsulation Limit option, ignoring: %s", rvalue);
-                        return 0;
-                }
-
-                if (k > 255 || k < 0)
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid Tunnel Encapsulation value, ignoring: %d", k);
-                else {
-                        t->encap_limit = k;
-                        t->flags &= ~IP6_TNL_F_IGN_ENCAP_LIMIT;
-                }
+                t->encap_limit = 0;
+                return 0;
         }
 
+        r = safe_atoi(rvalue, &k);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse Tunnel Encapsulation Limit option, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (k > 255 || k < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid Tunnel Encapsulation value, ignoring assignment: %d", k);
+                return 0;
+        }
+
+        t->encap_limit = k;
+        t->flags &= ~IP6_TNL_F_IGN_ENCAP_LIMIT;
         return 0;
 }
 
-int config_parse_6rd_prefix(const char* unit,
-                            const char *filename,
-                            unsigned line,
-                            const char *section,
-                            unsigned section_line,
-                            const char *lvalue,
-                            int ltype,
-                            const char *rvalue,
-                            void *data,
-                            void *userdata) {
+int config_parse_6rd_prefix(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
         Tunnel *t = userdata;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-
         union in_addr_union p;
         uint8_t l;
         int r;
 
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
         r = in_addr_prefix_from_string(rvalue, AF_INET6, &p, &l);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse 6rd prefix \"%s\", ignoring: %m", rvalue);
@@ -709,194 +1030,288 @@
         return 0;
 }
 
-static void ipip_sit_init(NetDev *n) {
+int config_parse_erspan_version(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint8_t n, *v = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *v = 1; /* defaults to 1 */
+                return 0;
+        }
+
+        r = safe_atou8(rvalue, &n);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse erspan version \"%s\", ignoring: %m", rvalue);
+                return 0;
+        }
+        if (!IN_SET(n, 0, 1, 2)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid erspan version \"%s\", which must be 0, 1 or 2, ignoring.", rvalue);
+                return 0;
+        }
+
+        *v = n;
+        return 0;
+}
+
+int config_parse_erspan_index(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint32_t n, *v = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *v = 0; /* defaults to 0 */
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, &n);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse erspan index \"%s\", ignoring: %m", rvalue);
+                return 0;
+        }
+        if (n >= 0x100000) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid erspan index \"%s\", which must be less than 0x100000, ignoring.", rvalue);
+                return 0;
+        }
+
+        *v = n;
+        return 0;
+}
+
+int config_parse_erspan_direction(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint8_t *v = ASSERT_PTR(data);
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue) || streq(rvalue, "ingress"))
+                *v = 0; /* defaults to ingress */
+        else if (streq(rvalue, "egress"))
+                *v = 1;
+        else
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid erspan direction \"%s\", which must be \"ingress\" or \"egress\", ignoring.", rvalue);
+
+        return 0;
+}
+
+int config_parse_erspan_hwid(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint16_t n, *v = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *v = 0; /* defaults to 0 */
+                return 0;
+        }
+
+        r = safe_atou16(rvalue, &n);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse erspan hwid \"%s\", ignoring: %m", rvalue);
+                return 0;
+        }
+        if (n >= 64) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid erspan index \"%s\", which must be less than 64, ignoring.", rvalue);
+                return 0;
+        }
+
+        *v = n;
+        return 0;
+}
+
+static void netdev_tunnel_init(NetDev *netdev) {
         Tunnel *t;
 
-        assert(n);
+        assert(netdev);
 
-        switch (n->kind) {
-        case NETDEV_KIND_IPIP:
-                t = IPIP(n);
-                break;
-        case NETDEV_KIND_SIT:
-                t = SIT(n);
-                break;
-        default:
-                assert_not_reached("invalid netdev kind");
-        }
+        t = TUNNEL(netdev);
 
         assert(t);
 
+        t->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
         t->pmtudisc = true;
         t->fou_encap_type = NETDEV_FOO_OVER_UDP_ENCAP_DIRECT;
         t->isatap = -1;
-}
-
-static void vti_init(NetDev *n) {
-        Tunnel *t;
-
-        assert(n);
-
-        if (n->kind == NETDEV_KIND_VTI)
-                t = VTI(n);
-        else
-                t = VTI6(n);
-
-        assert(t);
-
-        t->pmtudisc = true;
-}
-
-static void gre_erspan_init(NetDev *n) {
-        Tunnel *t;
-
-        assert(n);
-
-        switch (n->kind) {
-        case NETDEV_KIND_GRE:
-                t = GRE(n);
-                break;
-        case NETDEV_KIND_ERSPAN:
-                t = ERSPAN(n);
-                break;
-        case NETDEV_KIND_GRETAP:
-                t = GRETAP(n);
-                break;
-        default:
-                assert_not_reached("invalid netdev kind");
-        }
-
-        assert(t);
-
-        t->pmtudisc = true;
         t->gre_erspan_sequence = -1;
-        t->fou_encap_type = NETDEV_FOO_OVER_UDP_ENCAP_DIRECT;
-}
-
-static void ip6gre_init(NetDev *n) {
-        Tunnel *t;
-
-        assert(n);
-
-        if (n->kind == NETDEV_KIND_IP6GRE)
-                t = IP6GRE(n);
-        else
-                t = IP6GRETAP(n);
-
-        assert(t);
-
-        t->ttl = DEFAULT_TNL_HOP_LIMIT;
-}
-
-static void ip6tnl_init(NetDev *n) {
-        Tunnel *t = IP6TNL(n);
-
-        assert(n);
-        assert(t);
-
-        t->ttl = DEFAULT_TNL_HOP_LIMIT;
         t->encap_limit = IPV6_DEFAULT_TNL_ENCAP_LIMIT;
         t->ip6tnl_mode = _NETDEV_IP6_TNL_MODE_INVALID;
         t->ipv6_flowlabel = _NETDEV_IPV6_FLOWLABEL_INVALID;
         t->allow_localremote = -1;
+        t->erspan_version = 1;
+
+        if (IN_SET(netdev->kind, NETDEV_KIND_IP6GRE, NETDEV_KIND_IP6GRETAP, NETDEV_KIND_IP6TNL))
+                t->ttl = DEFAULT_IPV6_TTL;
 }
 
 const NetDevVTable ipip_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = ipip_sit_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_ipip_sit_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_TUNNEL,
 };
 
 const NetDevVTable sit_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = ipip_sit_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_ipip_sit_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_SIT,
 };
 
 const NetDevVTable vti_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = vti_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_vti_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_TUNNEL,
 };
 
 const NetDevVTable vti6_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = vti_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_vti_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_TUNNEL6,
 };
 
 const NetDevVTable gre_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = gre_erspan_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_gre_erspan_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_IPGRE,
 };
 
 const NetDevVTable gretap_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = gre_erspan_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_gre_erspan_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
 
 const NetDevVTable ip6gre_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = ip6gre_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_ip6gre_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_IP6GRE,
 };
 
 const NetDevVTable ip6gretap_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = ip6gre_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_ip6gre_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
 
 const NetDevVTable ip6tnl_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = ip6tnl_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_ip6tnl_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_TUNNEL6,
 };
 
 const NetDevVTable erspan_vtable = {
         .object_size = sizeof(Tunnel),
-        .init = gre_erspan_init,
+        .init = netdev_tunnel_init,
         .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
         .fill_message_create = netdev_gre_erspan_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_tunnel_is_ready_to_create,
         .config_verify = netdev_tunnel_verify,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/tunnel.h b/src/network/netdev/tunnel.h
index 35021e9..7c81f22 100644
--- a/src/network/netdev/tunnel.h
+++ b/src/network/netdev/tunnel.h
@@ -5,7 +5,9 @@
 
 #include "conf-parser.h"
 #include "fou-tunnel.h"
+#include "netdev-util.h"
 #include "netdev.h"
+#include "networkd-link.h"
 
 typedef enum Ip6TnlMode {
         NETDEV_IP6_TNL_MODE_IP6IP6,
@@ -39,8 +41,13 @@
         uint32_t key;
         uint32_t ikey;
         uint32_t okey;
-        uint32_t erspan_index;
 
+        uint8_t erspan_version;
+        uint32_t erspan_index;    /* version 1 */
+        uint8_t erspan_direction; /* version 2 */
+        uint16_t erspan_hwid;     /* version 2 */
+
+        NetDevLocalAddressType local_type;
         union in_addr_union local;
         union in_addr_union remote;
 
@@ -52,6 +59,7 @@
         bool independent;
         bool fou_tunnel;
         bool assign_to_loopback;
+        bool external; /* a.k.a collect metadata mode */
 
         uint16_t encap_src_port;
         uint16_t fou_destination_port;
@@ -60,6 +68,9 @@
         uint8_t sixrd_prefixlen;
 } Tunnel;
 
+int dhcp4_pd_create_6rd_tunnel_name(Link *link, char **ret);
+int dhcp4_pd_create_6rd_tunnel(Link *link, link_netlink_message_handler_t callback);
+
 DEFINE_NETDEV_CAST(IPIP, Tunnel);
 DEFINE_NETDEV_CAST(GRE, Tunnel);
 DEFINE_NETDEV_CAST(GRETAP, Tunnel);
@@ -70,6 +81,36 @@
 DEFINE_NETDEV_CAST(VTI6, Tunnel);
 DEFINE_NETDEV_CAST(IP6TNL, Tunnel);
 DEFINE_NETDEV_CAST(ERSPAN, Tunnel);
+
+static inline Tunnel* TUNNEL(NetDev *netdev) {
+        assert(netdev);
+
+        switch (netdev->kind) {
+        case NETDEV_KIND_IPIP:
+                return IPIP(netdev);
+        case NETDEV_KIND_SIT:
+                return SIT(netdev);
+        case NETDEV_KIND_GRE:
+                return GRE(netdev);
+        case NETDEV_KIND_GRETAP:
+                return GRETAP(netdev);
+        case NETDEV_KIND_IP6GRE:
+                return IP6GRE(netdev);
+        case NETDEV_KIND_IP6GRETAP:
+                return IP6GRETAP(netdev);
+        case NETDEV_KIND_VTI:
+                return VTI(netdev);
+        case NETDEV_KIND_VTI6:
+                return VTI6(netdev);
+        case NETDEV_KIND_IP6TNL:
+                return IP6TNL(netdev);
+        case NETDEV_KIND_ERSPAN:
+                return ERSPAN(netdev);
+        default:
+                return NULL;
+        }
+}
+
 extern const NetDevVTable ipip_vtable;
 extern const NetDevVTable sit_vtable;
 extern const NetDevVTable vti_vtable;
@@ -85,8 +126,13 @@
 Ip6TnlMode ip6tnl_mode_from_string(const char *d) _pure_;
 
 CONFIG_PARSER_PROTOTYPE(config_parse_ip6tnl_mode);
-CONFIG_PARSER_PROTOTYPE(config_parse_tunnel_address);
+CONFIG_PARSER_PROTOTYPE(config_parse_tunnel_local_address);
+CONFIG_PARSER_PROTOTYPE(config_parse_tunnel_remote_address);
 CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_flowlabel);
 CONFIG_PARSER_PROTOTYPE(config_parse_encap_limit);
 CONFIG_PARSER_PROTOTYPE(config_parse_tunnel_key);
 CONFIG_PARSER_PROTOTYPE(config_parse_6rd_prefix);
+CONFIG_PARSER_PROTOTYPE(config_parse_erspan_version);
+CONFIG_PARSER_PROTOTYPE(config_parse_erspan_index);
+CONFIG_PARSER_PROTOTYPE(config_parse_erspan_direction);
+CONFIG_PARSER_PROTOTYPE(config_parse_erspan_hwid);
diff --git a/src/network/netdev/tuntap.c b/src/network/netdev/tuntap.c
index 0e13c4f..1a37ba3 100644
--- a/src/network/netdev/tuntap.c
+++ b/src/network/netdev/tuntap.c
@@ -10,119 +10,197 @@
 #include <linux/if_tun.h>
 
 #include "alloc-util.h"
+#include "daemon-util.h"
 #include "fd-util.h"
+#include "networkd-link.h"
+#include "networkd-manager.h"
+#include "socket-util.h"
 #include "tuntap.h"
 #include "user-util.h"
 
 #define TUN_DEV "/dev/net/tun"
 
-static int netdev_fill_tuntap_message(NetDev *netdev, struct ifreq *ifr) {
-        TunTap *t;
-
+static TunTap* TUNTAP(NetDev *netdev) {
         assert(netdev);
-        assert(netdev->ifname);
-        assert(ifr);
 
-        if (netdev->kind == NETDEV_KIND_TAP) {
-                t = TAP(netdev);
-                ifr->ifr_flags |= IFF_TAP;
-        } else {
-                t = TUN(netdev);
-                ifr->ifr_flags |= IFF_TUN;
+        switch (netdev->kind) {
+        case NETDEV_KIND_TAP:
+                return TAP(netdev);
+        case NETDEV_KIND_TUN:
+                return TUN(netdev);
+        default:
+                return NULL;
         }
+}
 
-        if (!t->packet_info)
-                ifr->ifr_flags |= IFF_NO_PI;
+static void *close_fd_ptr(void *p) {
+        safe_close(PTR_TO_FD(p));
+        return NULL;
+}
 
-        if (t->multi_queue)
-                ifr->ifr_flags |= IFF_MULTI_QUEUE;
+DEFINE_PRIVATE_HASH_OPS_FULL(named_fd_hash_ops, char, string_hash_func, string_compare_func, free, void, close_fd_ptr);
 
-        if (t->vnet_hdr)
-                ifr->ifr_flags |= IFF_VNET_HDR;
+int manager_add_tuntap_fd(Manager *m, int fd, const char *name) {
+        _cleanup_free_ char *tuntap_name = NULL;
+        const char *p;
+        int r;
 
-        strncpy(ifr->ifr_name, netdev->ifname, IFNAMSIZ-1);
+        assert(m);
+        assert(fd >= 0);
+        assert(name);
 
+        p = startswith(name, "tuntap-");
+        if (!p)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Received unknown fd (%s).", name);
+
+        if (!ifname_valid(p))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Received tuntap fd with invalid name (%s).", p);
+
+        tuntap_name = strdup(p);
+        if (!tuntap_name)
+                return log_oom_debug();
+
+        r = hashmap_ensure_put(&m->tuntap_fds_by_name, &named_fd_hash_ops, tuntap_name, FD_TO_PTR(fd));
+        if (r < 0)
+                return log_debug_errno(r, "Failed to store tuntap fd: %m");
+
+        TAKE_PTR(tuntap_name);
         return 0;
 }
 
-static int netdev_tuntap_add(NetDev *netdev, struct ifreq *ifr) {
-        _cleanup_close_ int fd = -1;
-        TunTap *t = NULL;
-        const char *user;
-        const char *group;
-        uid_t uid;
-        gid_t gid;
+void manager_clear_unmanaged_tuntap_fds(Manager *m) {
+        char *name;
+        void *p;
+
+        assert(m);
+
+        while ((p = hashmap_steal_first_key_and_value(m->tuntap_fds_by_name, (void**) &name))) {
+                close_and_notify_warn(PTR_TO_FD(p), name);
+                name = mfree(name);
+        }
+}
+
+static int tuntap_take_fd(NetDev *netdev) {
+        _cleanup_free_ char *name = NULL;
+        void *p;
         int r;
 
         assert(netdev);
-        assert(ifr);
+        assert(netdev->manager);
 
-        fd = open(TUN_DEV, O_RDWR|O_CLOEXEC);
-        if (fd < 0)
-                return log_netdev_error_errno(netdev, -errno,  "Failed to open tun dev: %m");
+        r = link_get_by_name(netdev->manager, netdev->ifname, NULL);
+        if (r < 0)
+                return r;
 
-        if (ioctl(fd, TUNSETIFF, ifr) < 0)
-                return log_netdev_error_errno(netdev, -errno, "TUNSETIFF failed on tun dev: %m");
+        p = hashmap_remove2(netdev->manager->tuntap_fds_by_name, netdev->ifname, (void**) &name);
+        if (!p)
+                return -ENOENT;
 
-        if (netdev->kind == NETDEV_KIND_TAP)
-                t = TAP(netdev);
-        else
-                t = TUN(netdev);
+        log_netdev_debug(netdev, "Found file descriptor in fd store.");
+        return PTR_TO_FD(p);
+}
 
+static int netdev_create_tuntap(NetDev *netdev) {
+        _cleanup_close_ int fd = -EBADF;
+        struct ifreq ifr = {};
+        TunTap *t;
+        int r;
+
+        assert(netdev);
+        t = TUNTAP(netdev);
         assert(t);
 
+        fd = TAKE_FD(t->fd);
+        if (fd < 0)
+                fd = tuntap_take_fd(netdev);
+        if (fd < 0)
+                fd = open(TUN_DEV, O_RDWR|O_CLOEXEC);
+        if (fd < 0)
+                return log_netdev_error_errno(netdev, errno,  "Failed to open " TUN_DEV ": %m");
+
+        if (netdev->kind == NETDEV_KIND_TAP)
+                ifr.ifr_flags |= IFF_TAP;
+        else
+                ifr.ifr_flags |= IFF_TUN;
+
+        if (!t->packet_info)
+                ifr.ifr_flags |= IFF_NO_PI;
+
+        if (t->multi_queue)
+                ifr.ifr_flags |= IFF_MULTI_QUEUE;
+
+        if (t->vnet_hdr)
+                ifr.ifr_flags |= IFF_VNET_HDR;
+
+        strncpy(ifr.ifr_name, netdev->ifname, IFNAMSIZ-1);
+
+        if (ioctl(fd, TUNSETIFF, &ifr) < 0)
+                return log_netdev_error_errno(netdev, errno, "TUNSETIFF failed: %m");
+
         if (t->user_name) {
-                user = t->user_name;
+                const char *user = t->user_name;
+                uid_t uid;
 
                 r = get_user_creds(&user, &uid, NULL, NULL, NULL, USER_CREDS_ALLOW_MISSING);
                 if (r < 0)
                         return log_netdev_error_errno(netdev, r, "Cannot resolve user name %s: %m", t->user_name);
 
                 if (ioctl(fd, TUNSETOWNER, uid) < 0)
-                        return log_netdev_error_errno(netdev, -errno, "TUNSETOWNER failed on tun dev: %m");
+                        return log_netdev_error_errno(netdev, errno, "TUNSETOWNER failed: %m");
         }
 
         if (t->group_name) {
-                group = t->group_name;
+                const char *group = t->group_name;
+                gid_t gid;
 
                 r = get_group_creds(&group, &gid, USER_CREDS_ALLOW_MISSING);
                 if (r < 0)
                         return log_netdev_error_errno(netdev, r, "Cannot resolve group name %s: %m", t->group_name);
 
                 if (ioctl(fd, TUNSETGROUP, gid) < 0)
-                        return log_netdev_error_errno(netdev, -errno, "TUNSETGROUP failed on tun dev: %m");
+                        return log_netdev_error_errno(netdev, errno, "TUNSETGROUP failed: %m");
 
         }
 
         if (ioctl(fd, TUNSETPERSIST, 1) < 0)
-                return log_netdev_error_errno(netdev, -errno, "TUNSETPERSIST failed on tun dev: %m");
+                return log_netdev_error_errno(netdev, errno, "TUNSETPERSIST failed: %m");
+
+        if (t->keep_fd) {
+                t->fd = TAKE_FD(fd);
+                (void) notify_push_fdf(t->fd, "tuntap-%s", netdev->ifname);
+        }
 
         return 0;
 }
 
-static int netdev_create_tuntap(NetDev *netdev) {
-        struct ifreq ifr = {};
-        int r;
+static void tuntap_init(NetDev *netdev) {
+        TunTap *t;
 
-        r = netdev_fill_tuntap_message(netdev, &ifr);
-        if (r < 0)
-                return r;
+        assert(netdev);
+        t = TUNTAP(netdev);
+        assert(t);
 
-        return netdev_tuntap_add(netdev, &ifr);
+        t->fd = -EBADF;
+}
+
+static void tuntap_drop(NetDev *netdev) {
+        TunTap *t;
+
+        assert(netdev);
+        t = TUNTAP(netdev);
+        assert(t);
+
+        t->fd = close_and_notify_warn(t->fd, netdev->ifname);
 }
 
 static void tuntap_done(NetDev *netdev) {
-        TunTap *t = NULL;
+        TunTap *t;
 
         assert(netdev);
-
-        if (netdev->kind == NETDEV_KIND_TUN)
-                t = TUN(netdev);
-        else
-                t = TAP(netdev);
-
+        t = TUNTAP(netdev);
         assert(t);
 
+        t->fd = safe_close(t->fd);
         t->user_name = mfree(t->user_name);
         t->group_name = mfree(t->group_name);
 }
@@ -136,7 +214,7 @@
                                    "Please set it in the corresponding .network file.",
                                    netdev_kind_to_string(netdev->kind), filename);
 
-        if (netdev->mac)
+        if (netdev->hw_addr.length > 0)
                 log_netdev_warning(netdev,
                                    "MACAddress= configured for %s device in %s will be ignored.\n"
                                    "Please set it in the corresponding .network file.",
@@ -149,16 +227,22 @@
         .object_size = sizeof(TunTap),
         .sections = NETDEV_COMMON_SECTIONS "Tun\0",
         .config_verify = tuntap_verify,
+        .init = tuntap_init,
+        .drop = tuntap_drop,
         .done = tuntap_done,
         .create = netdev_create_tuntap,
         .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_NONE,
 };
 
 const NetDevVTable tap_vtable = {
         .object_size = sizeof(TunTap),
         .sections = NETDEV_COMMON_SECTIONS "Tap\0",
         .config_verify = tuntap_verify,
+        .init = tuntap_init,
+        .drop = tuntap_drop,
         .done = tuntap_done,
         .create = netdev_create_tuntap,
         .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_ETHER,
 };
diff --git a/src/network/netdev/tuntap.h b/src/network/netdev/tuntap.h
index 4d1e643..88e0ce5 100644
--- a/src/network/netdev/tuntap.h
+++ b/src/network/netdev/tuntap.h
@@ -8,14 +8,19 @@
 struct TunTap {
         NetDev meta;
 
+        int fd;
         char *user_name;
         char *group_name;
         bool multi_queue;
         bool packet_info;
         bool vnet_hdr;
+        bool keep_fd;
 };
 
 DEFINE_NETDEV_CAST(TUN, TunTap);
 DEFINE_NETDEV_CAST(TAP, TunTap);
 extern const NetDevVTable tun_vtable;
 extern const NetDevVTable tap_vtable;
+
+int manager_add_tuntap_fd(Manager *m, int fd, const char *name);
+void manager_clear_unmanaged_tuntap_fds(Manager *m);
diff --git a/src/network/netdev/vcan.c b/src/network/netdev/vcan.c
index 3621d4c..380547e 100644
--- a/src/network/netdev/vcan.c
+++ b/src/network/netdev/vcan.c
@@ -1,10 +1,12 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <linux/if_arp.h>
+
 #include "vcan.h"
 
 const NetDevVTable vcan_vtable = {
         .object_size = sizeof(VCan),
         .sections = NETDEV_COMMON_SECTIONS,
         .create_type = NETDEV_CREATE_INDEPENDENT,
-        .generate_mac = true,
+        .iftype = ARPHRD_CAN,
 };
diff --git a/src/network/netdev/veth.c b/src/network/netdev/veth.c
index 840a327..fb00e66 100644
--- a/src/network/netdev/veth.c
+++ b/src/network/netdev/veth.c
@@ -2,11 +2,15 @@
 
 #include <errno.h>
 #include <net/if.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
 #include <linux/veth.h>
 
+#include "netlink-util.h"
 #include "veth.h"
 
 static int netdev_veth_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+        struct hw_addr_data hw_addr;
         Veth *v;
         int r;
 
@@ -20,30 +24,40 @@
 
         r = sd_netlink_message_open_container(m, VETH_INFO_PEER);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append VETH_INFO_PEER attribute: %m");
+                return r;
 
         if (v->ifname_peer) {
                 r = sd_netlink_message_append_string(m, IFLA_IFNAME, v->ifname_peer);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Failed to add netlink interface name: %m");
+                        return r;
         }
 
-        if (v->mac_peer) {
-                r = sd_netlink_message_append_ether_addr(m, IFLA_ADDRESS, v->mac_peer);
+        r = netdev_generate_hw_addr(netdev, NULL, v->ifname_peer, &v->hw_addr_peer, &hw_addr);
+        if (r < 0)
+                return r;
+
+        if (hw_addr.length > 0) {
+                log_netdev_debug(netdev, "Using MAC address for peer: %s", HW_ADDR_TO_STR(&hw_addr));
+                r = netlink_message_append_hw_addr(m, IFLA_ADDRESS, &hw_addr);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_ADDRESS attribute: %m");
+                        return r;
+        }
+
+        if (netdev->mtu != 0) {
+                r = sd_netlink_message_append_u32(m, IFLA_MTU, netdev->mtu);
+                if (r < 0)
+                        return r;
         }
 
         r = sd_netlink_message_close_container(m);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
+                return r;
 
-        return r;
+        return 0;
 }
 
 static int netdev_veth_verify(NetDev *netdev, const char *filename) {
         Veth *v;
-        int r;
 
         assert(netdev);
         assert(filename);
@@ -52,21 +66,10 @@
 
         assert(v);
 
-        if (!v->ifname_peer) {
-                log_netdev_warning(netdev, "Veth NetDev without peer name configured in %s. Ignoring",
-                                   filename);
-                return -EINVAL;
-        }
-
-        if (!v->mac_peer) {
-                r = netdev_get_mac(v->ifname_peer, &v->mac_peer);
-                if (r < 0) {
-                        log_netdev_warning(netdev,
-                                           "Failed to generate predictable MAC address for %s. Ignoring",
-                                           v->ifname_peer);
-                        return -EINVAL;
-                }
-        }
+        if (!v->ifname_peer)
+                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                                "Veth NetDev without peer name configured in %s. Ignoring",
+                                                filename);
 
         return 0;
 }
@@ -81,7 +84,6 @@
         assert(v);
 
         free(v->ifname_peer);
-        free(v->mac_peer);
 }
 
 const NetDevVTable veth_vtable = {
@@ -91,5 +93,6 @@
         .fill_message_create = netdev_veth_fill_message_create,
         .create_type = NETDEV_CREATE_INDEPENDENT,
         .config_verify = netdev_veth_verify,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/veth.h b/src/network/netdev/veth.h
index 643f737..e0d6fd4 100644
--- a/src/network/netdev/veth.h
+++ b/src/network/netdev/veth.h
@@ -9,7 +9,7 @@
         NetDev meta;
 
         char *ifname_peer;
-        struct ether_addr *mac_peer;
+        struct hw_addr_data hw_addr_peer;
 };
 
 DEFINE_NETDEV_CAST(VETH, Veth);
diff --git a/src/network/netdev/vlan.c b/src/network/netdev/vlan.c
index de3eb72..a3d961d 100644
--- a/src/network/netdev/vlan.c
+++ b/src/network/netdev/vlan.c
@@ -2,6 +2,7 @@
 
 #include <errno.h>
 #include <net/if.h>
+#include <linux/if_arp.h>
 #include <linux/if_vlan.h>
 
 #include "parse-util.h"
@@ -23,12 +24,12 @@
 
         r = sd_netlink_message_append_u16(req, IFLA_VLAN_ID, v->id);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_ID attribute: %m");
+                return r;
 
         if (v->protocol >= 0) {
                 r = sd_netlink_message_append_u16(req, IFLA_VLAN_PROTOCOL, htobe16(v->protocol));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_PROTOCOL attribute: %m");
+                        return r;
         }
 
         if (v->gvrp != -1) {
@@ -53,24 +54,24 @@
 
         r = sd_netlink_message_append_data(req, IFLA_VLAN_FLAGS, &flags, sizeof(struct ifla_vlan_flags));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_FLAGS attribute: %m");
+                return r;
 
         if (!set_isempty(v->egress_qos_maps)) {
                 struct ifla_vlan_qos_mapping *m;
 
                 r = sd_netlink_message_open_container(req, IFLA_VLAN_EGRESS_QOS);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not open container IFLA_VLAN_EGRESS_QOS: %m");
+                        return r;
 
                 SET_FOREACH(m, v->egress_qos_maps) {
                         r = sd_netlink_message_append_data(req, IFLA_VLAN_QOS_MAPPING, m, sizeof(struct ifla_vlan_qos_mapping));
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_QOS_MAPPING attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not close container IFLA_VLAN_EGRESS_QOS: %m");
+                        return r;
         }
 
         if (!set_isempty(v->ingress_qos_maps)) {
@@ -78,17 +79,17 @@
 
                 r = sd_netlink_message_open_container(req, IFLA_VLAN_INGRESS_QOS);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not open container IFLA_VLAN_INGRESS_QOS: %m");
+                        return r;
 
                 SET_FOREACH(m, v->ingress_qos_maps) {
                         r = sd_netlink_message_append_data(req, IFLA_VLAN_QOS_MAPPING, m, sizeof(struct ifla_vlan_qos_mapping));
                         if (r < 0)
-                                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_QOS_MAPPING attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not close container IFLA_VLAN_INGRESS_QOS: %m");
+                        return r;
         }
 
         return 0;
@@ -128,13 +129,12 @@
                 void *data,
                 void *userdata) {
 
-        Set **s = data;
+        Set **s = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *s = set_free(*s);
@@ -229,4 +229,5 @@
         .create_type = NETDEV_CREATE_STACKED,
         .config_verify = netdev_vlan_verify,
         .done = vlan_done,
+        .iftype = ARPHRD_ETHER,
 };
diff --git a/src/network/netdev/vrf.c b/src/network/netdev/vrf.c
index ae71ae9..05ef3ff 100644
--- a/src/network/netdev/vrf.c
+++ b/src/network/netdev/vrf.c
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <net/if.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
 
 #include "vrf.h"
 
@@ -18,15 +20,16 @@
 
         r = sd_netlink_message_append_u32(m, IFLA_VRF_TABLE, v->table);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IPLA_VRF_TABLE attribute: %m");
+                return r;
 
-        return r;
+        return 0;
 }
 
 const NetDevVTable vrf_vtable = {
         .object_size = sizeof(Vrf),
         .sections = NETDEV_COMMON_SECTIONS "VRF\0",
         .fill_message_create = netdev_vrf_fill_message_create,
-        .create_type = NETDEV_CREATE_MASTER,
+        .create_type = NETDEV_CREATE_INDEPENDENT,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/vxcan.c b/src/network/netdev/vxcan.c
index e4e32ff..83269b0 100644
--- a/src/network/netdev/vxcan.c
+++ b/src/network/netdev/vxcan.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <linux/can/vxcan.h>
+#include <linux/if_arp.h>
 
 #include "vxcan.h"
 
@@ -18,19 +19,19 @@
 
         r = sd_netlink_message_open_container(m, VXCAN_INFO_PEER);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append VXCAN_INFO_PEER attribute: %m");
+                return r;
 
         if (v->ifname_peer) {
                 r = sd_netlink_message_append_string(m, IFLA_IFNAME, v->ifname_peer);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Failed to add vxcan netlink interface peer name: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(m);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append VXCAN_INFO_PEER attribute: %m");
+                return r;
 
-        return r;
+        return 0;
 }
 
 static int netdev_vxcan_verify(NetDev *netdev, const char *filename) {
@@ -43,10 +44,9 @@
 
         assert(v);
 
-        if (!v->ifname_peer) {
-                log_netdev_warning(netdev, "VxCan NetDev without peer name configured in %s. Ignoring", filename);
-                return -EINVAL;
-        }
+        if (!v->ifname_peer)
+                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                                "VxCan NetDev without peer name configured in %s. Ignoring", filename);
 
         return 0;
 }
@@ -70,5 +70,5 @@
         .fill_message_create = netdev_vxcan_fill_message_create,
         .create_type = NETDEV_CREATE_INDEPENDENT,
         .config_verify = netdev_vxcan_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_CAN,
 };
diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c
index 52d8b37..5891619 100644
--- a/src/network/netdev/vxlan.c
+++ b/src/network/netdev/vxlan.c
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <net/if.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
 
 #include "conf-parser.h"
 #include "alloc-util.h"
@@ -20,9 +22,24 @@
 DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(df, VxLanDF, NETDEV_VXLAN_DF_YES);
 DEFINE_CONFIG_PARSE_ENUM(config_parse_df, df, VxLanDF, "Failed to parse VXLAN IPDoNotFragment= setting");
 
+static int vxlan_get_local_address(VxLan *v, Link *link, int *ret_family, union in_addr_union *ret_address) {
+        assert(v);
+
+        if (v->local_type < 0) {
+                if (ret_family)
+                        *ret_family = v->local_family;
+                if (ret_address)
+                        *ret_address = v->local;
+                return 0;
+        }
+
+        return link_get_local_address(link, v->local_type, v->local_family, ret_family, ret_address);
+}
+
 static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+        union in_addr_union local;
+        int local_family, r;
         VxLan *v;
-        int r;
 
         assert(netdev);
         assert(m);
@@ -34,7 +51,7 @@
         if (v->vni <= VXLAN_VID_MAX) {
                 r = sd_netlink_message_append_u32(m, IFLA_VXLAN_ID, v->vni);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_ID attribute: %m");
+                        return r;
         }
 
         if (in_addr_is_set(v->group_family, &v->group)) {
@@ -43,100 +60,104 @@
                 else
                         r = sd_netlink_message_append_in6_addr(m, IFLA_VXLAN_GROUP6, &v->group.in6);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GROUP attribute: %m");
+                        return r;
         } else if (in_addr_is_set(v->remote_family, &v->remote)) {
                 if (v->remote_family == AF_INET)
                         r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_GROUP, &v->remote.in);
                 else
                         r = sd_netlink_message_append_in6_addr(m, IFLA_VXLAN_GROUP6, &v->remote.in6);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GROUP attribute: %m");
+                        return r;
         }
 
-        if (in_addr_is_set(v->local_family, &v->local)) {
-                if (v->local_family == AF_INET)
-                        r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_LOCAL, &v->local.in);
+        r = vxlan_get_local_address(v, link, &local_family, &local);
+        if (r < 0)
+                return r;
+
+        if (in_addr_is_set(local_family, &local)) {
+                if (local_family == AF_INET)
+                        r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_LOCAL, &local.in);
                 else
-                        r = sd_netlink_message_append_in6_addr(m, IFLA_VXLAN_LOCAL6, &v->local.in6);
+                        r = sd_netlink_message_append_in6_addr(m, IFLA_VXLAN_LOCAL6, &local.in6);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LOCAL attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u32(m, IFLA_VXLAN_LINK, link ? link->ifindex : 0);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LINK attribute: %m");
+                return r;
 
         if (v->inherit) {
                 r = sd_netlink_message_append_flag(m, IFLA_VXLAN_TTL_INHERIT);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_TTL_INHERIT attribute: %m");
+                        return r;
         } else {
                 r = sd_netlink_message_append_u8(m, IFLA_VXLAN_TTL, v->ttl);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_TTL attribute: %m");
+                        return r;
         }
 
         if (v->tos != 0) {
                 r = sd_netlink_message_append_u8(m, IFLA_VXLAN_TOS, v->tos);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_TOS attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_LEARNING, v->learning);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LEARNING attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_RSC, v->route_short_circuit);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_RSC attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_PROXY, v->arp_proxy);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_PROXY attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_L2MISS, v->l2miss);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_L2MISS attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_L3MISS, v->l3miss);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_L3MISS attribute: %m");
+                return r;
 
         if (v->fdb_ageing != 0) {
                 r = sd_netlink_message_append_u32(m, IFLA_VXLAN_AGEING, v->fdb_ageing / USEC_PER_SEC);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_AGEING attribute: %m");
+                        return r;
         }
 
         if (v->max_fdb != 0) {
                 r = sd_netlink_message_append_u32(m, IFLA_VXLAN_LIMIT, v->max_fdb);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LIMIT attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_UDP_CSUM, v->udpcsum);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_UDP_CSUM attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_UDP_ZERO_CSUM6_TX, v->udp6zerocsumtx);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_UDP_ZERO_CSUM6_TX attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_UDP_ZERO_CSUM6_RX, v->udp6zerocsumrx);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_UDP_ZERO_CSUM6_RX attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_REMCSUM_TX, v->remote_csum_tx);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_REMCSUM_TX attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, IFLA_VXLAN_REMCSUM_RX, v->remote_csum_rx);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_REMCSUM_RX attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u16(m, IFLA_VXLAN_PORT, htobe16(v->dest_port));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_PORT attribute: %m");
+                return r;
 
         if (v->port_range.low != 0 || v->port_range.high != 0) {
                 struct ifla_vxlan_port_range port_range;
@@ -146,56 +167,86 @@
 
                 r = sd_netlink_message_append_data(m, IFLA_VXLAN_PORT_RANGE, &port_range, sizeof(port_range));
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_PORT_RANGE attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u32(m, IFLA_VXLAN_LABEL, htobe32(v->flow_label));
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LABEL attribute: %m");
+                return r;
 
         if (v->group_policy) {
                 r = sd_netlink_message_append_flag(m, IFLA_VXLAN_GBP);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GBP attribute: %m");
+                        return r;
         }
 
         if (v->generic_protocol_extension) {
                 r = sd_netlink_message_append_flag(m, IFLA_VXLAN_GPE);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GPE attribute: %m");
+                        return r;
         }
 
         if (v->df != _NETDEV_VXLAN_DF_INVALID) {
                 r = sd_netlink_message_append_u8(m, IFLA_VXLAN_DF, v->df);
                 if (r < 0)
-                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_DF attribute: %m");
+                        return r;
         }
 
-        return r;
+        return 0;
 }
 
-int config_parse_vxlan_address(const char *unit,
-                               const char *filename,
-                               unsigned line,
-                               const char *section,
-                               unsigned section_line,
-                               const char *lvalue,
-                               int ltype,
-                               const char *rvalue,
-                               void *data,
-                               void *userdata) {
-        VxLan *v = userdata;
+int config_parse_vxlan_address(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        VxLan *v = ASSERT_PTR(userdata);
         union in_addr_union *addr = data, buffer;
-        int r, f;
+        int *family, f, r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
         assert(data);
 
+        if (streq(lvalue, "Local"))
+                family = &v->local_family;
+        else if (streq(lvalue, "Remote"))
+                family = &v->remote_family;
+        else if (streq(lvalue, "Group"))
+                family = &v->group_family;
+        else
+                assert_not_reached();
+
+        if (isempty(rvalue)) {
+                *addr = IN_ADDR_NULL;
+                *family = AF_UNSPEC;
+                return 0;
+        }
+
+        if (streq(lvalue, "Local")) {
+                NetDevLocalAddressType t;
+
+                t = netdev_local_address_type_from_string(rvalue);
+                if (t >= 0) {
+                        v->local = IN_ADDR_NULL;
+                        v->local_family = AF_UNSPEC;
+                        v->local_type = t;
+                        return 0;
+                }
+        }
+
         r = in_addr_from_string_auto(rvalue, &f, &buffer);
         if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "vxlan '%s' address is invalid, ignoring assignment: %s", lvalue, rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
                 return 0;
         }
 
@@ -203,38 +254,38 @@
 
         if (streq(lvalue, "Group")) {
                 if (r <= 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "vxlan %s invalid multicast address, ignoring assignment: %s", lvalue, rvalue);
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "%s= must be a multicast address, ignoring assignment: %s", lvalue, rvalue);
                         return 0;
                 }
-
-                v->group_family = f;
         } else {
                 if (r > 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "vxlan %s cannot be a multicast address, ignoring assignment: %s", lvalue, rvalue);
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "%s= cannot be a multicast address, ignoring assignment: %s", lvalue, rvalue);
                         return 0;
                 }
-
-                if (streq(lvalue, "Remote"))
-                        v->remote_family = f;
-                else
-                        v->local_family = f;
         }
 
+        if (streq(lvalue, "Local"))
+                v->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
         *addr = buffer;
+        *family = f;
 
         return 0;
 }
 
-int config_parse_port_range(const char *unit,
-                            const char *filename,
-                            unsigned line,
-                            const char *section,
-                            unsigned section_line,
-                            const char *lvalue,
-                            int ltype,
-                            const char *rvalue,
-                            void *data,
-                            void *userdata) {
+int config_parse_port_range(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
         VxLan *v = userdata;
         uint16_t low, high;
         int r;
@@ -257,16 +308,18 @@
         return 0;
 }
 
-int config_parse_flow_label(const char *unit,
-                            const char *filename,
-                            unsigned line,
-                            const char *section,
-                            unsigned section_line,
-                            const char *lvalue,
-                            int ltype,
-                            const char *rvalue,
-                            void *data,
-                            void *userdata) {
+int config_parse_flow_label(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
         VxLan *v = userdata;
         unsigned f;
         int r;
@@ -293,16 +346,18 @@
         return 0;
 }
 
-int config_parse_vxlan_ttl(const char *unit,
-                           const char *filename,
-                           unsigned line,
-                           const char *section,
-                           unsigned section_line,
-                           const char *lvalue,
-                           int ltype,
-                           const char *rvalue,
-                            void *data,
-                           void *userdata) {
+int config_parse_vxlan_ttl(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
         VxLan *v = userdata;
         unsigned f;
         int r;
@@ -359,9 +414,29 @@
                                                 "%s: VXLAN both 'Group=' and 'Remote=' cannot be specified. Ignoring.",
                                                 filename);
 
+        if (v->independent && v->local_type >= 0)
+                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                              "The local address cannot be '%s' when Independent= is enabled, ignoring.",
+                                              strna(netdev_local_address_type_to_string(v->local_type)));
+
         return 0;
 }
 
+static int netdev_vxlan_is_ready_to_create(NetDev *netdev, Link *link) {
+        VxLan *v;
+
+        assert(netdev);
+
+        v = VXLAN(netdev);
+
+        assert(v);
+
+        if (v->independent)
+                return true;
+
+        return vxlan_get_local_address(v, link, NULL, NULL) >= 0;
+}
+
 static void vxlan_init(NetDev *netdev) {
         VxLan *v;
 
@@ -371,6 +446,7 @@
 
         assert(v);
 
+        v->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
         v->vni = VXLAN_VID_MAX + 1;
         v->df = _NETDEV_VXLAN_DF_INVALID;
         v->learning = true;
@@ -385,6 +461,8 @@
         .sections = NETDEV_COMMON_SECTIONS "VXLAN\0",
         .fill_message_create = netdev_vxlan_fill_message_create,
         .create_type = NETDEV_CREATE_STACKED,
+        .is_ready_to_create = netdev_vxlan_is_ready_to_create,
         .config_verify = netdev_vxlan_verify,
+        .iftype = ARPHRD_ETHER,
         .generate_mac = true,
 };
diff --git a/src/network/netdev/vxlan.h b/src/network/netdev/vxlan.h
index 12ef46e..141ac4d 100644
--- a/src/network/netdev/vxlan.h
+++ b/src/network/netdev/vxlan.h
@@ -6,6 +6,7 @@
 #include <linux/if_link.h>
 
 #include "in-addr-util.h"
+#include "netdev-util.h"
 #include "netdev.h"
 
 #define VXLAN_VID_MAX (1u << 24) - 1
@@ -30,8 +31,9 @@
 
         VxLanDF df;
 
-        union in_addr_union remote;
+        NetDevLocalAddressType local_type;
         union in_addr_union local;
+        union in_addr_union remote;
         union in_addr_union group;
 
         unsigned tos;
diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c
index b8fc492..51e7e02 100644
--- a/src/network/netdev/wireguard.c
+++ b/src/network/netdev/wireguard.c
@@ -5,10 +5,14 @@
 
 #include <sys/ioctl.h>
 #include <net/if.h>
+#include <netinet/in.h>
+#include <linux/if_arp.h>
+#include <linux/ipv6_route.h>
 
 #include "sd-resolve.h"
 
 #include "alloc-util.h"
+#include "dns-domain.h"
 #include "event-util.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -16,15 +20,19 @@
 #include "memory-util.h"
 #include "netlink-util.h"
 #include "networkd-manager.h"
+#include "networkd-route-util.h"
+#include "networkd-route.h"
 #include "networkd-util.h"
+#include "parse-helpers.h"
 #include "parse-util.h"
-#include "path-util.h"
+#include "random-util.h"
 #include "resolve-private.h"
 #include "string-util.h"
 #include "strv.h"
 #include "wireguard.h"
 
-static void resolve_endpoints(NetDev *netdev);
+static void wireguard_resolve_endpoints(NetDev *netdev);
+static int peer_resolve_endpoint(WireguardPeer *peer);
 
 static WireguardPeer* wireguard_peer_free(WireguardPeer *peer) {
         WireguardIPmask *mask;
@@ -35,14 +43,11 @@
         if (peer->wireguard) {
                 LIST_REMOVE(peers, peer->wireguard->peers, peer);
 
-                set_remove(peer->wireguard->peers_with_unresolved_endpoint, peer);
-                set_remove(peer->wireguard->peers_with_failed_endpoint, peer);
-
                 if (peer->section)
                         hashmap_remove(peer->wireguard->peers_by_section, peer->section);
         }
 
-        network_config_section_free(peer->section);
+        config_section_free(peer->section);
 
         while ((mask = peer->ipmasks)) {
                 LIST_REMOVE(ipmasks, peer->ipmasks, mask);
@@ -54,13 +59,16 @@
         free(peer->preshared_key_file);
         explicit_bzero_safe(peer->preshared_key, WG_KEY_LEN);
 
+        sd_event_source_disable_unref(peer->resolve_retry_event_source);
+        sd_resolve_query_unref(peer->resolve_query);
+
         return mfree(peer);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(WireguardPeer, wireguard_peer_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(WireguardPeer, wireguard_peer_free);
 
 static int wireguard_peer_new_static(Wireguard *w, const char *filename, unsigned section_line, WireguardPeer **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(wireguard_peer_freep) WireguardPeer *peer = NULL;
         int r;
 
@@ -69,7 +77,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -91,7 +99,7 @@
 
         LIST_PREPEND(peers, w->peers, peer);
 
-        r = hashmap_ensure_put(&w->peers_by_section, &network_config_hash_ops, peer->section, peer);
+        r = hashmap_ensure_put(&w->peers_by_section, &config_section_hash_ops, peer->section, peer);
         if (r < 0)
                 return r;
 
@@ -139,7 +147,7 @@
 }
 
 static int wireguard_set_peer_one(NetDev *netdev, sd_netlink_message *message, const WireguardPeer *peer, uint16_t index, WireguardIPmask **mask_start) {
-        WireguardIPmask *mask, *start;
+        WireguardIPmask *start, *last = NULL;
         uint16_t j = 0;
         int r;
 
@@ -188,8 +196,10 @@
                 r = wireguard_set_ipmask_one(netdev, message, mask, ++j);
                 if (r < 0)
                         return r;
-                if (r == 0)
+                if (r == 0) {
+                        last = mask;
                         break;
+                }
         }
 
         r = sd_netlink_message_close_container(message);
@@ -200,8 +210,8 @@
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not add wireguard peer: %m");
 
-        *mask_start = mask; /* Start next cycle from this mask. */
-        return !mask;
+        *mask_start = last; /* Start next cycle from this mask. */
+        return !last;
 
 cancel:
         r = sd_netlink_message_cancel_array(message);
@@ -214,7 +224,7 @@
 static int wireguard_set_interface(NetDev *netdev) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
         WireguardIPmask *mask_start = NULL;
-        WireguardPeer *peer, *peer_start;
+        WireguardPeer *peer_start;
         bool sent_once = false;
         uint32_t serial;
         Wireguard *w;
@@ -229,7 +239,7 @@
 
                 message = sd_netlink_message_unref(message);
 
-                r = sd_genl_message_new(netdev->manager->genl, SD_GENL_WIREGUARD, WG_CMD_SET_DEVICE, &message);
+                r = sd_genl_message_new(netdev->manager->genl, WG_GENL_NAME, WG_CMD_SET_DEVICE, &message);
                 if (r < 0)
                         return log_netdev_error_errno(netdev, r, "Failed to allocate generic netlink message: %m");
 
@@ -259,14 +269,17 @@
                 if (r < 0)
                         return log_netdev_error_errno(netdev, r, "Could not append wireguard peer attributes: %m");
 
+                WireguardPeer *peer_last = NULL;
                 LIST_FOREACH(peers, peer, peer_start) {
                         r = wireguard_set_peer_one(netdev, message, peer, ++i, &mask_start);
                         if (r < 0)
                                 return r;
-                        if (r == 0)
+                        if (r == 0) {
+                                peer_last = peer;
                                 break;
+                        }
                 }
-                peer_start = peer; /* Start next cycle from this peer. */
+                peer_start = peer_last; /* Start next cycle from this peer. */
 
                 r = sd_netlink_message_close_container(message);
                 if (r < 0)
@@ -282,150 +295,156 @@
         return 0;
 }
 
-static void wireguard_peer_destroy_callback(WireguardPeer *peer) {
+static int on_resolve_retry(sd_event_source *s, usec_t usec, void *userdata) {
+        WireguardPeer *peer = ASSERT_PTR(userdata);
         NetDev *netdev;
 
+        assert(peer->wireguard);
+
+        netdev = NETDEV(peer->wireguard);
+
+        if (!netdev_is_managed(netdev))
+                return 0;
+
+        peer->resolve_query = sd_resolve_query_unref(peer->resolve_query);
+
+        (void) peer_resolve_endpoint(peer);
+        return 0;
+}
+
+static usec_t peer_next_resolve_usec(WireguardPeer *peer) {
+        usec_t usec;
+
+        /* Given the number of retries this function will return an exponential increasing amount of
+         * milliseconds to wait starting at 200ms and capped at 25 seconds. */
+
+        assert(peer);
+
+        usec = (2 << MIN(peer->n_retries, 7U)) * 100 * USEC_PER_MSEC;
+
+        return random_u64_range(usec / 10) + usec * 9 / 10;
+}
+
+static int wireguard_peer_resolve_handler(
+              sd_resolve_query *q,
+              int ret,
+              const struct addrinfo *ai,
+              void *userdata) {
+
+        WireguardPeer *peer = ASSERT_PTR(userdata);
+        NetDev *netdev;
+        int r;
+
+        assert(peer->wireguard);
+
+        netdev = NETDEV(peer->wireguard);
+
+        if (!netdev_is_managed(netdev))
+                return 0;
+
+        if (ret != 0) {
+                log_netdev_warning(netdev, "Failed to resolve host '%s:%s', ignoring: %s",
+                                   peer->endpoint_host, peer->endpoint_port, gai_strerror(ret));
+                peer->n_retries++;
+
+        } else {
+                bool found = false;
+                for (; ai; ai = ai->ai_next) {
+                        if (!IN_SET(ai->ai_family, AF_INET, AF_INET6))
+                                continue;
+
+                        if (ai->ai_addrlen != (ai->ai_family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6)))
+                                continue;
+
+                        memcpy(&peer->endpoint, ai->ai_addr, ai->ai_addrlen);
+                        (void) wireguard_set_interface(netdev);
+                        peer->n_retries = 0;
+                        found = true;
+                        break;
+                }
+
+                if (!found) {
+                        log_netdev_warning(netdev, "Neither IPv4 nor IPv6 address found for peer endpoint %s:%s, ignoring the endpoint.",
+                                           peer->endpoint_host, peer->endpoint_port);
+                        peer->n_retries++;
+                }
+        }
+
+        if (peer->n_retries > 0) {
+                r = event_reset_time_relative(netdev->manager->event,
+                                              &peer->resolve_retry_event_source,
+                                              CLOCK_BOOTTIME,
+                                              peer_next_resolve_usec(peer), 0,
+                                              on_resolve_retry, peer, 0, "wireguard-resolve-retry", true);
+                if (r < 0)
+                        log_netdev_warning_errno(netdev, r, "Could not arm resolve retry handler for endpoint %s:%s, ignoring: %m",
+                                                 peer->endpoint_host, peer->endpoint_port);
+        }
+
+        wireguard_resolve_endpoints(netdev);
+        return 0;
+}
+
+static int peer_resolve_endpoint(WireguardPeer *peer) {
+        static const struct addrinfo hints = {
+                .ai_family = AF_UNSPEC,
+                .ai_socktype = SOCK_DGRAM,
+                .ai_protocol = IPPROTO_UDP
+        };
+        NetDev *netdev;
+        int r;
+
         assert(peer);
         assert(peer->wireguard);
 
         netdev = NETDEV(peer->wireguard);
 
-        if (section_is_invalid(peer->section))
-                wireguard_peer_free(peer);
+        if (!peer->endpoint_host || !peer->endpoint_port)
+                /* Not necessary to resolve the endpoint. */
+                return 0;
 
-        netdev_unref(netdev);
+        if (sd_event_source_get_enabled(peer->resolve_retry_event_source, NULL) > 0)
+                /* Timer event source is enabled. The endpoint will be resolved later. */
+                return 0;
+
+        if (peer->resolve_query)
+                /* Being resolved, or already resolved. */
+                return 0;
+
+        r = sd_resolve_getaddrinfo(netdev->manager->resolve,
+                                   &peer->resolve_query,
+                                   peer->endpoint_host,
+                                   peer->endpoint_port,
+                                   &hints,
+                                   wireguard_peer_resolve_handler,
+                                   peer);
+        if (r < 0)
+                return log_netdev_full_errno(netdev, r == -ENOBUFS ? LOG_DEBUG : LOG_WARNING, r,
+                                             "Failed to create endpoint resolver for %s:%s, ignoring: %m",
+                                             peer->endpoint_host, peer->endpoint_port);
+
+        return 0;
 }
 
-static int on_resolve_retry(sd_event_source *s, usec_t usec, void *userdata) {
-        NetDev *netdev = userdata;
+static void wireguard_resolve_endpoints(NetDev *netdev) {
         Wireguard *w;
 
         assert(netdev);
         w = WIREGUARD(netdev);
         assert(w);
 
-        if (!netdev_is_managed(netdev))
-                return 0;
-
-        assert(set_isempty(w->peers_with_unresolved_endpoint));
-
-        SWAP_TWO(w->peers_with_unresolved_endpoint, w->peers_with_failed_endpoint);
-
-        resolve_endpoints(netdev);
-
-        return 0;
-}
-
-/*
- * Given the number of retries this function will return will an exponential
- * increasing time in milliseconds to wait starting at 200ms and capped at 25 seconds.
- */
-static int exponential_backoff_milliseconds(unsigned n_retries) {
-        return (2 << MIN(n_retries, 7U)) * 100 * USEC_PER_MSEC;
-}
-
-static int wireguard_resolve_handler(sd_resolve_query *q,
-                                     int ret,
-                                     const struct addrinfo *ai,
-                                     WireguardPeer *peer) {
-        NetDev *netdev;
-        Wireguard *w;
-        int r;
-
-        assert(peer);
-        assert(peer->wireguard);
-
-        w = peer->wireguard;
-        netdev = NETDEV(w);
-
-        if (!netdev_is_managed(netdev))
-                return 0;
-
-        if (ret != 0) {
-                log_netdev_error(netdev, "Failed to resolve host '%s:%s': %s", peer->endpoint_host, peer->endpoint_port, gai_strerror(ret));
-
-                r = set_ensure_put(&w->peers_with_failed_endpoint, NULL, peer);
-                if (r < 0) {
-                        log_netdev_error(netdev, "Failed to save a peer, dropping the peer: %m");
-                        peer->section->invalid = true;
-                        goto resolve_next;
-                }
-
-        } else if ((ai->ai_family == AF_INET && ai->ai_addrlen == sizeof(struct sockaddr_in)) ||
-                   (ai->ai_family == AF_INET6 && ai->ai_addrlen == sizeof(struct sockaddr_in6)))
-                memcpy(&peer->endpoint, ai->ai_addr, ai->ai_addrlen);
-        else
-                log_netdev_error(netdev, "Neither IPv4 nor IPv6 address found for peer endpoint %s:%s, ignoring the address.",
-                                 peer->endpoint_host, peer->endpoint_port);
-
-resolve_next:
-        if (!set_isempty(w->peers_with_unresolved_endpoint)) {
-                resolve_endpoints(netdev);
-                return 0;
-        }
-
-        (void) wireguard_set_interface(netdev);
-
-        if (!set_isempty(w->peers_with_failed_endpoint)) {
-                usec_t usec;
-
-                w->n_retries++;
-                usec = usec_add(now(CLOCK_MONOTONIC), exponential_backoff_milliseconds(w->n_retries));
-                r = event_reset_time(netdev->manager->event, &w->resolve_retry_event_source,
-                                     CLOCK_MONOTONIC, usec, 0, on_resolve_retry, netdev,
-                                     0, "wireguard-resolve-retry", true);
-                if (r < 0) {
-                        log_netdev_warning_errno(netdev, r, "Could not arm resolve retry handler: %m");
-                        return 0;
-                }
-        }
-
-        return 0;
-}
-
-static void resolve_endpoints(NetDev *netdev) {
-        static const struct addrinfo hints = {
-                .ai_family = AF_UNSPEC,
-                .ai_socktype = SOCK_DGRAM,
-                .ai_protocol = IPPROTO_UDP
-        };
-        WireguardPeer *peer;
-        Wireguard *w;
-        int r;
-
-        assert(netdev);
-        w = WIREGUARD(netdev);
-        assert(w);
-
-        SET_FOREACH(peer, w->peers_with_unresolved_endpoint) {
-                r = resolve_getaddrinfo(netdev->manager->resolve,
-                                        NULL,
-                                        peer->endpoint_host,
-                                        peer->endpoint_port,
-                                        &hints,
-                                        wireguard_resolve_handler,
-                                        wireguard_peer_destroy_callback,
-                                        peer);
-                if (r == -ENOBUFS)
+        LIST_FOREACH(peers, peer, w->peers)
+                if (peer_resolve_endpoint(peer) == -ENOBUFS)
+                        /* Too many requests. Let's resolve remaining endpoints later. */
                         break;
-                if (r < 0) {
-                        log_netdev_error_errno(netdev, r, "Failed to create resolver: %m");
-                        continue;
-                }
-
-                /* Avoid freeing netdev. It will be unrefed by the destroy callback. */
-                netdev_ref(netdev);
-
-                (void) set_remove(w->peers_with_unresolved_endpoint, peer);
-        }
 }
 
-static int netdev_wireguard_post_create(NetDev *netdev, Link *link, sd_netlink_message *m) {
+static int netdev_wireguard_post_create(NetDev *netdev, Link *link) {
         assert(netdev);
         assert(WIREGUARD(netdev));
 
         (void) wireguard_set_interface(netdev);
-        resolve_endpoints(netdev);
+        wireguard_resolve_endpoints(netdev);
         return 0;
 }
 
@@ -441,11 +460,10 @@
                 void *data,
                 void *userdata) {
 
-        uint16_t *s = data;
+        uint16_t *s = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue) || streq(rvalue, "auto")) {
                 *s = 0;
@@ -669,6 +687,7 @@
 
         for (const char *p = rvalue;;) {
                 _cleanup_free_ char *word = NULL;
+                union in_addr_union masked;
 
                 r = extract_first_word(&p, &word, "," WHITESPACE, 0);
                 if (r == 0)
@@ -688,13 +707,21 @@
                         continue;
                 }
 
+                masked = addr;
+                assert_se(in_addr_mask(family, &masked, prefixlen) >= 0);
+                if (!in_addr_equal(family, &masked, &addr))
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Specified address '%s' is not properly masked, assuming '%s'.",
+                                   word,
+                                   IN_ADDR_PREFIX_TO_STRING(family, &masked, prefixlen));
+
                 ipmask = new(WireguardIPmask, 1);
                 if (!ipmask)
                         return log_oom();
 
                 *ipmask = (WireguardIPmask) {
                         .family = family,
-                        .ip.in6 = addr.in6,
+                        .ip = masked,
                         .cidr = prefixlen,
                 };
 
@@ -718,65 +745,85 @@
                 void *userdata) {
 
         _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
-        const char *begin, *end;
+        _cleanup_free_ char *host = NULL;
+        union in_addr_union addr;
+        const char *p;
+        uint16_t port;
         Wireguard *w;
-        size_t len;
-        int r;
+        int family, r;
 
-        assert(data);
+        assert(filename);
         assert(rvalue);
+        assert(userdata);
 
-        w = WIREGUARD(data);
+        w = WIREGUARD(userdata);
         assert(w);
 
-        if (rvalue[0] == '[') {
-                begin = &rvalue[1];
-                end = strchr(rvalue, ']');
-                if (!end) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "Unable to find matching brace of endpoint, ignoring assignment: %s",
-                                   rvalue);
-                        return 0;
-                }
-                len = end - begin;
-                ++end;
-                if (*end != ':' || !*(end + 1)) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "Unable to find port of endpoint, ignoring assignment: %s",
-                                   rvalue);
-                        return 0;
-                }
-                ++end;
-        } else {
-                begin = rvalue;
-                end = strrchr(rvalue, ':');
-                if (!end || !*(end + 1)) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "Unable to find port of endpoint, ignoring assignment: %s",
-                                   rvalue);
-                        return 0;
-                }
-                len = end - begin;
-                ++end;
-        }
-
         r = wireguard_peer_new_static(w, filename, section_line, &peer);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strndup(&peer->endpoint_host, begin, len);
+        r = in_addr_port_ifindex_name_from_string_auto(rvalue, &family, &addr, &port, NULL, NULL);
+        if (r >= 0) {
+                if (family == AF_INET)
+                        peer->endpoint.in = (struct sockaddr_in) {
+                                .sin_family = AF_INET,
+                                .sin_addr = addr.in,
+                                .sin_port = htobe16(port),
+                        };
+                else if (family == AF_INET6)
+                        peer->endpoint.in6 = (struct sockaddr_in6) {
+                                .sin6_family = AF_INET6,
+                                .sin6_addr = addr.in6,
+                                .sin6_port = htobe16(port),
+                        };
+                else
+                        assert_not_reached();
+
+                peer->endpoint_host = mfree(peer->endpoint_host);
+                peer->endpoint_port = mfree(peer->endpoint_port);
+
+                TAKE_PTR(peer);
+                return 0;
+        }
+
+        p = strrchr(rvalue, ':');
+        if (!p) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Unable to find port of endpoint, ignoring assignment: %s",
+                           rvalue);
+                return 0;
+        }
+
+        host = strndup(rvalue, p - rvalue);
+        if (!host)
+                return log_oom();
+
+        if (!dns_name_is_valid(host)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid domain name of endpoint, ignoring assignment: %s",
+                           rvalue);
+                return 0;
+        }
+
+        p++;
+        r = parse_ip_port(p, &port);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Invalid port of endpoint, ignoring assignment: %s",
+                           rvalue);
+                return 0;
+        }
+
+        peer->endpoint = (union sockaddr_union) {};
+
+        free_and_replace(peer->endpoint_host, host);
+
+        r = free_and_strdup(&peer->endpoint_port, p);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strdup(&peer->endpoint_port, end);
-        if (r < 0)
-                return log_oom();
-
-        r = set_ensure_put(&w->peers_with_unresolved_endpoint, NULL, peer);
-        if (r < 0)
-                return log_oom();
         TAKE_PTR(peer); /* The peer may already have been in the hash map, that is fine too. */
-
         return 0;
 }
 
@@ -825,6 +872,177 @@
         return 0;
 }
 
+int config_parse_wireguard_route_table(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        NetDev *netdev = ASSERT_PTR(userdata);
+        uint32_t *table = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue) || parse_boolean(rvalue) == 0) {
+                *table = 0; /* Disabled. */
+                return 0;
+        }
+
+        r = manager_get_route_table_from_string(netdev->manager, rvalue, table);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        return 0;
+}
+
+int config_parse_wireguard_peer_route_table(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
+        NetDev *netdev = ASSERT_PTR(userdata);
+        Wireguard *w;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+        assert(netdev->manager);
+
+        w = WIREGUARD(netdev);
+        assert(w);
+
+        r = wireguard_peer_new_static(w, filename, section_line, &peer);
+        if (r < 0)
+                return log_oom();
+
+        if (isempty(rvalue)) {
+                peer->route_table_set = false; /* Use the table specified in [WireGuard] section. */
+                TAKE_PTR(peer);
+                return 0;
+        }
+
+        if (parse_boolean(rvalue) == 0) {
+                peer->route_table = 0; /* Disabled. */
+                peer->route_table_set = true;
+                TAKE_PTR(peer);
+                return 0;
+        }
+
+        r = manager_get_route_table_from_string(netdev->manager, rvalue, &peer->route_table);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        peer->route_table_set = true;
+        TAKE_PTR(peer);
+        return 0;
+}
+
+int config_parse_wireguard_route_priority(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint32_t *priority = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *priority = 0;
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, priority);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Could not parse route priority \"%s\", ignoring assignment: %m", rvalue);
+                return 0;
+        }
+
+        return 0;
+}
+
+int config_parse_wireguard_peer_route_priority(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
+        Wireguard *w;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+        assert(userdata);
+
+        w = WIREGUARD(userdata);
+        assert(w);
+
+        r = wireguard_peer_new_static(w, filename, section_line, &peer);
+        if (r < 0)
+                return log_oom();
+
+        if (isempty(rvalue)) {
+                peer->route_priority_set = false; /* Use the priority specified in [WireGuard] section. */
+                TAKE_PTR(peer);
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, &peer->route_priority);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Could not parse route priority \"%s\", ignoring assignment: %m", rvalue);
+                return 0;
+        }
+
+        peer->route_priority_set = true;
+        TAKE_PTR(peer);
+        return 0;
+}
+
 static void wireguard_init(NetDev *netdev) {
         Wireguard *w;
 
@@ -842,14 +1060,12 @@
         w = WIREGUARD(netdev);
         assert(w);
 
-        sd_event_source_unref(w->resolve_retry_event_source);
-
         explicit_bzero_safe(w->private_key, WG_KEY_LEN);
         free(w->private_key_file);
 
         hashmap_free_with_destructor(w->peers_by_section, wireguard_peer_free);
-        set_free(w->peers_with_unresolved_endpoint);
-        set_free(w->peers_with_failed_endpoint);
+
+        set_free(w->routes);
 }
 
 static int wireguard_read_key_file(const char *filename, uint8_t dest[static WG_KEY_LEN]) {
@@ -862,8 +1078,6 @@
 
         assert(dest);
 
-        (void) warn_file_is_world_accessible(filename, NULL, NULL, 0);
-
         r = read_full_file_full(
                         AT_FDCWD, filename, UINT64_MAX, SIZE_MAX,
                         READ_FULL_FILE_SECURE | READ_FULL_FILE_UNBASE64 | READ_FULL_FILE_WARN_WORLD_READABLE | READ_FULL_FILE_CONNECT_SOCKET,
@@ -903,7 +1117,6 @@
 }
 
 static int wireguard_verify(NetDev *netdev, const char *filename) {
-        WireguardPeer *peer, *peer_next;
         Wireguard *w;
         int r;
 
@@ -922,9 +1135,38 @@
                                               "%s: Missing PrivateKey= or PrivateKeyFile=, "
                                               "Ignoring network device.", filename);
 
-        LIST_FOREACH_SAFE(peers, peer, peer_next, w->peers)
-                if (wireguard_peer_verify(peer) < 0)
+        LIST_FOREACH(peers, peer, w->peers) {
+                if (wireguard_peer_verify(peer) < 0) {
                         wireguard_peer_free(peer);
+                        continue;
+                }
+
+                if ((peer->route_table_set ? peer->route_table : w->route_table) == 0)
+                        continue;
+
+                LIST_FOREACH(ipmasks, ipmask, peer->ipmasks) {
+                        _cleanup_(route_freep) Route *route = NULL;
+
+                        r = route_new(&route);
+                        if (r < 0)
+                                return log_oom();
+
+                        route->family = ipmask->family;
+                        route->dst = ipmask->ip;
+                        route->dst_prefixlen = ipmask->cidr;
+                        route->scope = RT_SCOPE_UNIVERSE;
+                        route->protocol = RTPROT_STATIC;
+                        route->table = peer->route_table_set ? peer->route_table : w->route_table;
+                        route->priority = peer->route_priority_set ? peer->route_priority : w->route_priority;
+                        if (route->priority == 0 && route->family == AF_INET6)
+                                route->priority = IP6_RT_PRIO_USER;
+                        route->source = NETWORK_CONFIG_SOURCE_STATIC;
+
+                        r = set_ensure_consume(&w->routes, &route_hash_ops, TAKE_PTR(route));
+                        if (r < 0)
+                                return log_oom();
+                }
+        }
 
         return 0;
 }
@@ -937,5 +1179,5 @@
         .done = wireguard_done,
         .create_type = NETDEV_CREATE_INDEPENDENT,
         .config_verify = wireguard_verify,
-        .generate_mac = true,
+        .iftype = ARPHRD_NONE,
 };
diff --git a/src/network/netdev/wireguard.h b/src/network/netdev/wireguard.h
index b9b5ae9..09dca88 100644
--- a/src/network/netdev/wireguard.h
+++ b/src/network/netdev/wireguard.h
@@ -7,6 +7,9 @@
 #include <netinet/in.h>
 #include <linux/wireguard.h>
 
+#include "sd-event.h"
+#include "sd-resolve.h"
+
 #include "in-addr-util.h"
 #include "netdev.h"
 #include "socket-util.h"
@@ -21,7 +24,7 @@
 
 typedef struct WireguardPeer {
         Wireguard *wireguard;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
         uint8_t public_key[WG_KEY_LEN];
         uint8_t preshared_key[WG_KEY_LEN];
@@ -33,6 +36,15 @@
         char *endpoint_host;
         char *endpoint_port;
 
+        unsigned n_retries;
+        sd_event_source *resolve_retry_event_source;
+        sd_resolve_query *resolve_query;
+
+        uint32_t route_table;
+        uint32_t route_priority;
+        bool route_table_set;
+        bool route_priority_set;
+
         LIST_HEAD(WireguardIPmask, ipmasks);
         LIST_FIELDS(struct WireguardPeer, peers);
 } WireguardPeer;
@@ -48,13 +60,11 @@
         uint32_t fwmark;
 
         Hashmap *peers_by_section;
-        Set *peers_with_unresolved_endpoint;
-        Set *peers_with_failed_endpoint;
-
         LIST_HEAD(WireguardPeer, peers);
 
-        unsigned n_retries;
-        sd_event_source *resolve_retry_event_source;
+        Set *routes;
+        uint32_t route_table;
+        uint32_t route_priority;
 };
 
 DEFINE_NETDEV_CAST(WIREGUARD, Wireguard);
@@ -68,3 +78,7 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_private_key_file);
 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_preshared_key_file);
 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_keepalive);
+CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_route_table);
+CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_peer_route_table);
+CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_route_priority);
+CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_peer_route_priority);
diff --git a/src/network/netdev/wlan.c b/src/network/netdev/wlan.c
new file mode 100644
index 0000000..816e106
--- /dev/null
+++ b/src/network/netdev/wlan.c
@@ -0,0 +1,258 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <net/if_arp.h>
+
+#include "sd-netlink.h"
+
+#include "netlink-util.h"
+#include "networkd-manager.h"
+#include "networkd-wiphy.h"
+#include "parse-util.h"
+#include "wifi-util.h"
+#include "wlan.h"
+
+static void wlan_done(NetDev *netdev) {
+        WLan *w;
+
+        assert(netdev);
+
+        w = WLAN(netdev);
+
+        assert(w);
+
+        w->wiphy_name = mfree(w->wiphy_name);
+}
+
+static void wlan_init(NetDev *netdev) {
+        WLan *w;
+
+        assert(netdev);
+
+        w = WLAN(netdev);
+
+        assert(w);
+
+        w->wiphy_index = UINT32_MAX;
+        w->wds = -1;
+}
+
+static int wlan_get_wiphy(NetDev *netdev, Wiphy **ret) {
+        WLan *w;
+
+        assert(netdev);
+
+        w = WLAN(netdev);
+
+        assert(w);
+
+        if (w->wiphy_name)
+                return wiphy_get_by_name(netdev->manager, w->wiphy_name, ret);
+
+        return wiphy_get_by_index(netdev->manager, w->wiphy_index, ret);
+}
+
+static int wlan_is_ready_to_create(NetDev *netdev, Link *link) {
+        return wlan_get_wiphy(netdev, NULL) >= 0;
+}
+
+static int wlan_fill_message(NetDev *netdev, sd_netlink_message *m) {
+        Wiphy *wiphy;
+        WLan *w;
+        int r;
+
+        assert(netdev);
+        assert(m);
+
+        w = WLAN(netdev);
+
+        assert(w);
+
+        r = wlan_get_wiphy(netdev, &wiphy);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NL80211_ATTR_WIPHY, wiphy->index);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NL80211_ATTR_IFNAME, netdev->ifname);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NL80211_ATTR_IFTYPE, w->iftype);
+        if (r < 0)
+                return r;
+
+        if (!hw_addr_is_null(&netdev->hw_addr) && netdev->hw_addr.length == ETH_ALEN) {
+                r = sd_netlink_message_append_ether_addr(m, NL80211_ATTR_MAC, &netdev->hw_addr.ether);
+                if (r < 0)
+                        return r;
+        }
+
+        if (w->wds >= 0) {
+                r = sd_netlink_message_append_u8(m, NL80211_ATTR_4ADDR, w->wds);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int wlan_create_handler(sd_netlink *genl, sd_netlink_message *m, NetDev *netdev) {
+        int r;
+
+        assert(netdev);
+        assert(netdev->state != _NETDEV_STATE_INVALID);
+
+        r = sd_netlink_message_get_errno(m);
+        if (IN_SET(r, -EEXIST, -ENFILE))
+                /* Unlike the other netdevs, the kernel may return -ENFILE. See dev_alloc_name(). */
+                log_netdev_info(netdev, "WLAN interface exists, using existing without changing its parameters.");
+        else if (r < 0) {
+                log_netdev_warning_errno(netdev, r, "WLAN interface could not be created: %m");
+                netdev_enter_failed(netdev);
+
+                return 1;
+        }
+
+        log_netdev_debug(netdev, "WLAN interface is created.");
+        return 1;
+}
+
+static int wlan_create(NetDev *netdev) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        assert(netdev);
+        assert(netdev->manager);
+        assert(netdev->manager->genl);
+
+        r = sd_genl_message_new(netdev->manager->genl, NL80211_GENL_NAME, NL80211_CMD_NEW_INTERFACE, &m);
+        if (r < 0)
+                return log_netdev_warning_errno(netdev, r, "Failed to allocate netlink message: %m");
+
+        r = wlan_fill_message(netdev, m);
+        if (r < 0)
+                return log_netdev_warning_errno(netdev, r, "Failed to fill netlink message: %m");
+
+        r = netlink_call_async(netdev->manager->genl, NULL, m, wlan_create_handler,
+                               netdev_destroy_callback, netdev);
+        if (r < 0)
+                return log_netdev_warning_errno(netdev, r, "Failed to send netlink message: %m");
+
+        netdev_ref(netdev);
+        return 0;
+}
+
+static int wlan_verify(NetDev *netdev, const char *filename) {
+        WLan *w;
+
+        assert(netdev);
+        assert(filename);
+
+        w = WLAN(netdev);
+
+        assert(w);
+
+        if (w->iftype == NL80211_IFTYPE_UNSPECIFIED)
+                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                                "%s: WLAN interface type is not specified, ignoring.",
+                                                filename);
+
+        if (w->wiphy_index == UINT32_MAX && isempty(w->wiphy_name))
+                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+                                                "%s: physical WLAN device is not specified, ignoring.",
+                                                filename);
+
+        return 0;
+}
+
+int config_parse_wiphy(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        WLan *w = ASSERT_PTR(userdata);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                w->wiphy_name = mfree(w->wiphy_name);
+                w->wiphy_index = UINT32_MAX;
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, &w->wiphy_index);
+        if (r >= 0) {
+                w->wiphy_name = mfree(w->wiphy_name);
+                return 0;
+        }
+
+        r = free_and_strdup_warn(&w->wiphy_name, rvalue);
+        if (r < 0)
+                return r;
+
+        w->wiphy_index = UINT32_MAX;
+        return 0;
+}
+
+int config_parse_wlan_iftype(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        enum nl80211_iftype t, *iftype = ASSERT_PTR(data);
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *iftype = NL80211_IFTYPE_UNSPECIFIED;
+                return 0;
+        }
+
+        t = nl80211_iftype_from_string(rvalue);
+        /* We reuse the kernel provided enum which does not contain negative value. So, the cast
+         * below is mandatory. Otherwise, the check below always passes. */
+        if ((int) t < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, t,
+                           "Failed to parse wlan interface type, ignoring assignment: %s",
+                           rvalue);
+                return 0;
+        }
+
+        *iftype = t;
+        return 0;
+}
+
+const NetDevVTable wlan_vtable = {
+        .object_size = sizeof(WLan),
+        .init = wlan_init,
+        .done = wlan_done,
+        .sections = NETDEV_COMMON_SECTIONS "WLAN\0",
+        .is_ready_to_create = wlan_is_ready_to_create,
+        .create = wlan_create,
+        .create_type = NETDEV_CREATE_INDEPENDENT,
+        .config_verify = wlan_verify,
+        .iftype = ARPHRD_ETHER,
+        .generate_mac = true,
+        .skip_netdev_kind_check = true,
+};
diff --git a/src/network/netdev/wlan.h b/src/network/netdev/wlan.h
new file mode 100644
index 0000000..bcc2dbc
--- /dev/null
+++ b/src/network/netdev/wlan.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <linux/nl80211.h>
+
+#include "conf-parser.h"
+#include "netdev.h"
+
+typedef struct WLan {
+        NetDev meta;
+
+        char *wiphy_name;
+        uint32_t wiphy_index;
+        enum nl80211_iftype iftype;
+        int wds; /* tristate */
+} WLan;
+
+DEFINE_NETDEV_CAST(WLAN, WLan);
+extern const NetDevVTable wlan_vtable;
+
+CONFIG_PARSER_PROTOTYPE(config_parse_wiphy);
+CONFIG_PARSER_PROTOTYPE(config_parse_wlan_iftype);
diff --git a/src/network/netdev/xfrm.c b/src/network/netdev/xfrm.c
index 2e8245c..a961d8f 100644
--- a/src/network/netdev/xfrm.c
+++ b/src/network/netdev/xfrm.c
@@ -1,5 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <linux/if_arp.h>
+
 #include "missing_network.h"
 #include "xfrm.h"
 
@@ -17,11 +19,11 @@
 
         r = sd_netlink_message_append_u32(message, IFLA_XFRM_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_XFRM_LINK: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(message, IFLA_XFRM_IF_ID, x->if_id);
         if (r < 0)
-                return log_netdev_error_errno(netdev, r, "Could not append IFLA_XFRM_IF_ID: %m");
+                return r;
 
         return 0;
 }
@@ -48,5 +50,6 @@
         .sections = NETDEV_COMMON_SECTIONS "Xfrm\0",
         .fill_message_create = xfrm_fill_message_create,
         .config_verify = xfrm_verify,
-        .create_type = NETDEV_CREATE_STACKED
+        .create_type = NETDEV_CREATE_STACKED,
+        .iftype = ARPHRD_NONE,
 };
diff --git a/src/network/networkctl.c b/src/network/networkctl.c
index 90feb26..65015b1 100644
--- a/src/network/networkctl.c
+++ b/src/network/networkctl.c
@@ -15,13 +15,14 @@
 #include "sd-device.h"
 #include "sd-dhcp-client.h"
 #include "sd-hwdb.h"
-#include "sd-lldp.h"
+#include "sd-lldp-rx.h"
 #include "sd-netlink.h"
 #include "sd-network.h"
 
 #include "alloc-util.h"
 #include "bond-util.h"
 #include "bridge-util.h"
+#include "build.h"
 #include "bus-common-errors.h"
 #include "bus-error.h"
 #include "bus-locator.h"
@@ -42,6 +43,7 @@
 #include "macro.h"
 #include "macvlan-util.h"
 #include "main-func.h"
+#include "netif-util.h"
 #include "netlink-util.h"
 #include "network-internal.h"
 #include "network-util.h"
@@ -78,17 +80,12 @@
 static unsigned arg_lines = 10;
 static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 
-static int get_description(JsonVariant **ret) {
+static int get_description(sd_bus *bus, JsonVariant **ret) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         const char *text = NULL;
         int r;
 
-        r = sd_bus_open_system(&bus);
-        if (r < 0)
-                return log_error_errno(r, "Failed to connect system bus: %m");
-
         r = bus_call_method(bus, bus_network_mgr, "Describe", &error, &reply, NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to get description: %s", bus_error_message(&error, r));
@@ -104,11 +101,11 @@
         return 0;
 }
 
-static int dump_manager_description(void) {
+static int dump_manager_description(sd_bus *bus) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         int r;
 
-        r = get_description(&v);
+        r = get_description(bus, &v);
         if (r < 0)
                 return r;
 
@@ -116,14 +113,14 @@
         return 0;
 }
 
-static int dump_link_description(char **patterns) {
+static int dump_link_description(sd_bus *bus, char **patterns) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         _cleanup_free_ bool *matched_patterns = NULL;
         JsonVariant *i;
         size_t c = 0;
         int r;
 
-        r = get_description(&v);
+        r = get_description(bus, &v);
         if (r < 0)
                 return r;
 
@@ -132,14 +129,14 @@
                 return log_oom();
 
         JSON_VARIANT_ARRAY_FOREACH(i, json_variant_by_key(v, "Interfaces")) {
-                char ifindex_str[DECIMAL_STR_MAX(intmax_t)];
+                char ifindex_str[DECIMAL_STR_MAX(int64_t)];
                 const char *name;
-                intmax_t index;
+                int64_t index;
                 size_t pos;
 
                 name = json_variant_string(json_variant_by_key(i, "Name"));
                 index = json_variant_integer(json_variant_by_key(i, "Index"));
-                xsprintf(ifindex_str, "%ji", index);
+                xsprintf(ifindex_str, "%" PRIi64, index);
 
                 if (!strv_fnmatch_full(patterns, ifindex_str, 0, &pos) &&
                     !strv_fnmatch_full(patterns, name, 0, &pos)) {
@@ -267,12 +264,12 @@
 
 typedef struct LinkInfo {
         char name[IFNAMSIZ+1];
-        char netdev_kind[NETDEV_KIND_MAX];
+        char *netdev_kind;
         sd_device *sd_device;
         int ifindex;
         unsigned short iftype;
         struct hw_addr_data hw_address;
-        struct ether_addr permanent_mac_address;
+        struct hw_addr_data permanent_hw_address;
         uint32_t master;
         uint32_t mtu;
         uint32_t min_mtu;
@@ -346,8 +343,8 @@
         char *ssid;
         struct ether_addr bssid;
 
-        bool has_mac_address:1;
-        bool has_permanent_mac_address:1;
+        bool has_hw_address:1;
+        bool has_permanent_hw_address:1;
         bool has_tx_queues:1;
         bool has_rx_queues:1;
         bool has_stats64:1;
@@ -368,6 +365,7 @@
 static LinkInfo* link_info_array_free(LinkInfo *array) {
         for (unsigned i = 0; array && array[i].needs_freeing; i++) {
                 sd_device_unref(array[i].sd_device);
+                free(array[i].netdev_kind);
                 free(array[i].ssid);
                 free(array[i].qdisc);
                 strv_free(array[i].alternative_names);
@@ -378,7 +376,6 @@
 DEFINE_TRIVIAL_CLEANUP_FUNC(LinkInfo*, link_info_array_free);
 
 static int decode_netdev(sd_netlink_message *m, LinkInfo *info) {
-        const char *received_kind;
         int r;
 
         assert(m);
@@ -388,15 +385,17 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_read_string(m, IFLA_INFO_KIND, &received_kind);
-        if (r < 0)
+        r = sd_netlink_message_read_string_strdup(m, IFLA_INFO_KIND, &info->netdev_kind);
+        if (r < 0) {
+                (void) sd_netlink_message_exit_container(m);
                 return r;
+        }
 
         r = sd_netlink_message_enter_container(m, IFLA_INFO_DATA);
         if (r < 0)
                 return r;
 
-        if (streq(received_kind, "bridge")) {
+        if (streq(info->netdev_kind, "bridge")) {
                 (void) sd_netlink_message_read_u32(m, IFLA_BR_FORWARD_DELAY, &info->forward_delay);
                 (void) sd_netlink_message_read_u32(m, IFLA_BR_HELLO_TIME, &info->hello_time);
                 (void) sd_netlink_message_read_u32(m, IFLA_BR_MAX_AGE, &info->max_age);
@@ -406,12 +405,12 @@
                 (void) sd_netlink_message_read_u16(m, IFLA_BR_PRIORITY, &info->priority);
                 (void) sd_netlink_message_read_u8(m, IFLA_BR_MCAST_IGMP_VERSION, &info->mcast_igmp_version);
                 (void) sd_netlink_message_read_u8(m, IFLA_BRPORT_STATE, &info->port_state);
-        } if (streq(received_kind, "bond")) {
+        } if (streq(info->netdev_kind, "bond")) {
                 (void) sd_netlink_message_read_u8(m, IFLA_BOND_MODE, &info->mode);
                 (void) sd_netlink_message_read_u32(m, IFLA_BOND_MIIMON, &info->miimon);
                 (void) sd_netlink_message_read_u32(m, IFLA_BOND_DOWNDELAY, &info->downdelay);
                 (void) sd_netlink_message_read_u32(m, IFLA_BOND_UPDELAY, &info->updelay);
-        } else if (streq(received_kind, "vxlan")) {
+        } else if (streq(info->netdev_kind, "vxlan")) {
                 (void) sd_netlink_message_read_u32(m, IFLA_VXLAN_ID, &info->vxlan_info.vni);
 
                 r = sd_netlink_message_read_in_addr(m, IFLA_VXLAN_GROUP, &info->vxlan_info.group.in);
@@ -441,12 +440,12 @@
                 (void) sd_netlink_message_read_u8(m, IFLA_VXLAN_L2MISS, &info->vxlan_info.l2miss);
                 (void) sd_netlink_message_read_u8(m, IFLA_VXLAN_TOS, &info->vxlan_info.tos);
                 (void) sd_netlink_message_read_u8(m, IFLA_VXLAN_TTL, &info->vxlan_info.ttl);
-        } else if (streq(received_kind, "vlan"))
+        } else if (streq(info->netdev_kind, "vlan"))
                 (void) sd_netlink_message_read_u16(m, IFLA_VLAN_ID, &info->vlan_id);
-        else if (STR_IN_SET(received_kind, "ipip", "sit")) {
+        else if (STR_IN_SET(info->netdev_kind, "ipip", "sit")) {
                 (void) sd_netlink_message_read_in_addr(m, IFLA_IPTUN_LOCAL, &info->local.in);
                 (void) sd_netlink_message_read_in_addr(m, IFLA_IPTUN_REMOTE, &info->remote.in);
-        } else if (streq(received_kind, "geneve")) {
+        } else if (streq(info->netdev_kind, "geneve")) {
                 (void) sd_netlink_message_read_u32(m, IFLA_GENEVE_ID, &info->vni);
 
                 r = sd_netlink_message_read_in_addr(m, IFLA_GENEVE_REMOTE, &info->remote.in);
@@ -464,27 +463,25 @@
                 (void) sd_netlink_message_read_u8(m, IFLA_GENEVE_UDP_ZERO_CSUM6_RX, &info->csum6_rx);
                 (void) sd_netlink_message_read_u16(m, IFLA_GENEVE_PORT, &info->tunnel_port);
                 (void) sd_netlink_message_read_u32(m, IFLA_GENEVE_LABEL, &info->label);
-        } else if (STR_IN_SET(received_kind, "gre", "gretap", "erspan")) {
+        } else if (STR_IN_SET(info->netdev_kind, "gre", "gretap", "erspan")) {
                 (void) sd_netlink_message_read_in_addr(m, IFLA_GRE_LOCAL, &info->local.in);
                 (void) sd_netlink_message_read_in_addr(m, IFLA_GRE_REMOTE, &info->remote.in);
-        } else if (STR_IN_SET(received_kind, "ip6gre", "ip6gretap", "ip6erspan")) {
+        } else if (STR_IN_SET(info->netdev_kind, "ip6gre", "ip6gretap", "ip6erspan")) {
                 (void) sd_netlink_message_read_in6_addr(m, IFLA_GRE_LOCAL, &info->local.in6);
                 (void) sd_netlink_message_read_in6_addr(m, IFLA_GRE_REMOTE, &info->remote.in6);
-        } else if (streq(received_kind, "vti")) {
+        } else if (streq(info->netdev_kind, "vti")) {
                 (void) sd_netlink_message_read_in_addr(m, IFLA_VTI_LOCAL, &info->local.in);
                 (void) sd_netlink_message_read_in_addr(m, IFLA_VTI_REMOTE, &info->remote.in);
-        } else if (streq(received_kind, "vti6")) {
+        } else if (streq(info->netdev_kind, "vti6")) {
                 (void) sd_netlink_message_read_in6_addr(m, IFLA_VTI_LOCAL, &info->local.in6);
                 (void) sd_netlink_message_read_in6_addr(m, IFLA_VTI_REMOTE, &info->remote.in6);
-        } else if (STR_IN_SET(received_kind, "macvlan", "macvtap"))
+        } else if (STR_IN_SET(info->netdev_kind, "macvlan", "macvtap"))
                 (void) sd_netlink_message_read_u32(m, IFLA_MACVLAN_MODE, &info->macvlan_mode);
-        else if (streq(received_kind, "ipvlan")) {
+        else if (streq(info->netdev_kind, "ipvlan")) {
                 (void) sd_netlink_message_read_u16(m, IFLA_IPVLAN_MODE, &info->ipvlan_mode);
                 (void) sd_netlink_message_read_u16(m, IFLA_IPVLAN_FLAGS, &info->ipvlan_flags);
         }
 
-        strncpy(info->netdev_kind, received_kind, IFNAMSIZ);
-
         (void) sd_netlink_message_exit_container(m);
         (void) sd_netlink_message_exit_container(m);
 
@@ -529,7 +526,6 @@
                 if (!strv_fnmatch_full(patterns, str, 0, &pos) &&
                     !strv_fnmatch_full(patterns, name, 0, &pos)) {
                         bool match = false;
-                        char **p;
 
                         STRV_FOREACH(p, altnames)
                                 if (strv_fnmatch_full(patterns, *p, 0, &pos)) {
@@ -551,15 +547,15 @@
         info->ifindex = ifindex;
         info->alternative_names = TAKE_PTR(altnames);
 
-        info->has_mac_address =
+        info->has_hw_address =
                 netlink_message_read_hw_addr(m, IFLA_ADDRESS, &info->hw_address) >= 0 &&
-                !hw_addr_is_null(&info->hw_address);
+                info->hw_address.length > 0;
 
-        info->has_permanent_mac_address =
-                ethtool_get_permanent_macaddr(NULL, info->name, &info->permanent_mac_address) >= 0 &&
-                !ether_addr_is_null(&info->permanent_mac_address) &&
-                (info->hw_address.length != sizeof(struct ether_addr) ||
-                 memcmp(&info->permanent_mac_address, info->hw_address.bytes, sizeof(struct ether_addr)) != 0);
+        info->has_permanent_hw_address =
+                (netlink_message_read_hw_addr(m, IFLA_PERM_ADDRESS, &info->permanent_hw_address) >= 0 ||
+                 ethtool_get_permanent_hw_addr(NULL, info->name, &info->permanent_hw_address) >= 0) &&
+                !hw_addr_is_null(&info->permanent_hw_address) &&
+                !hw_addr_equal(&info->permanent_hw_address, &info->hw_address);
 
         (void) sd_netlink_message_read_u32(m, IFLA_MTU, &info->mtu);
         (void) sd_netlink_message_read_u32(m, IFLA_MIN_MTU, &info->min_mtu);
@@ -617,11 +613,12 @@
                 sd_bus_message **reply,
                 const char *iface,
                 const char *propname) {
-        _cleanup_free_ char *path = NULL, *ifindex_str = NULL;
+
+        char ifindex_str[DECIMAL_STR_MAX(int)];
+        _cleanup_free_ char *path = NULL;
         int r;
 
-        if (asprintf(&ifindex_str, "%i", link->ifindex) < 0)
-                return -ENOMEM;
+        xsprintf(ifindex_str, "%i", link->ifindex);
 
         r = sd_bus_path_encode("/org/freedesktop/network1/link", ifindex_str, &path);
         if (r < 0)
@@ -696,7 +693,7 @@
                 return;
         }
 
-        (void) sd_netlink_inc_rcvbuf(genl, RCVBUF_SIZE);
+        (void) sd_netlink_increase_rxbuf(genl, RCVBUF_SIZE);
 
         r = wifi_get_interface(genl, link->ifindex, &link->wlan_iftype, &link->ssid);
         if (r < 0)
@@ -714,7 +711,7 @@
 static int acquire_link_info(sd_bus *bus, sd_netlink *rtnl, char **patterns, LinkInfo **ret) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
         _cleanup_(link_info_array_freep) LinkInfo *links = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         size_t c = 0;
         int r;
 
@@ -725,7 +722,7 @@
         if (r < 0)
                 return rtnl_log_create_error(r);
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return rtnl_log_create_error(r);
 
@@ -789,6 +786,7 @@
 }
 
 static int list_links(int argc, char *argv[], void *userdata) {
+        sd_bus *bus = ASSERT_PTR(userdata);
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(link_info_array_freep) LinkInfo *links = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
@@ -797,9 +795,9 @@
 
         if (arg_json_format_flags != JSON_FORMAT_OFF) {
                 if (arg_all || argc <= 1)
-                        return dump_manager_description();
+                        return dump_manager_description(bus);
                 else
-                        return dump_link_description(strv_skip(argv, 1));
+                        return dump_link_description(bus, strv_skip(argv, 1));
         }
 
         r = sd_netlink_open(&rtnl);
@@ -810,7 +808,7 @@
         if (c < 0)
                 return c;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         table = table_new("idx", "link", "type", "operational", "setup");
         if (!table)
@@ -820,8 +818,7 @@
                 table_set_width(table, 0);
 
         table_set_header(table, arg_legend);
-        if (table_set_empty_string(table, "n/a") < 0)
-                return log_oom();
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         assert_se(cell = table_get_cell(table, 0, 0));
         (void) table_set_minimum_width(table, cell, 3);
@@ -840,12 +837,10 @@
                 (void) sd_network_link_get_operational_state(links[i].ifindex, &operational_state);
                 operational_state_to_color(links[i].name, operational_state, &on_color_operational, NULL);
 
-                r = sd_network_link_get_setup_state(links[i].ifindex, &setup_state);
-                if (r == -ENODATA) /* If there's no info available about this iface, it's unmanaged by networkd */
-                        setup_state = strdup("unmanaged");
+                (void) sd_network_link_get_setup_state(links[i].ifindex, &setup_state);
                 setup_state_to_color(setup_state, &on_color_setup, NULL);
 
-                r = link_get_type_string(links[i].sd_device, links[i].iftype, &t);
+                r = net_get_type_string(links[i].sd_device, links[i].iftype, &t);
                 if (r == -ENOMEM)
                         return log_oom();
 
@@ -855,7 +850,7 @@
                                    TABLE_STRING, t,
                                    TABLE_STRING, operational_state,
                                    TABLE_SET_COLOR, on_color_operational,
-                                   TABLE_STRING, setup_state,
+                                   TABLE_STRING, setup_state ?: "unmanaged",
                                    TABLE_SET_COLOR, on_color_setup);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -925,7 +920,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
@@ -1043,27 +1038,20 @@
                 return n;
 
         for (int i = 0; i < n; i++) {
-                _cleanup_free_ char *gateway = NULL, *description = NULL;
-                char name[IF_NAMESIZE+1];
-
-                r = in_addr_to_string(local[i].family, &local[i].address, &gateway);
-                if (r < 0)
-                        return log_oom();
+                _cleanup_free_ char *description = NULL;
 
                 r = get_gateway_description(rtnl, hwdb, local[i].ifindex, local[i].family, &local[i].address, &description);
                 if (r < 0)
                         log_debug_errno(r, "Could not get description of gateway, ignoring: %m");
 
-                if (description) {
-                        if (!strextend(&gateway, " (", description, ")"))
-                                return log_oom();
-                }
-
                 /* Show interface name for the entry if we show entries for all interfaces */
-                r = strv_extendf(&buf, "%s%s%s",
-                                 gateway,
+                r = strv_extendf(&buf, "%s%s%s%s%s%s",
+                                 IN_ADDR_TO_STRING(local[i].family, &local[i].address),
+                                 description ? " (" : "",
+                                 strempty(description),
+                                 description ? ")" : "",
                                  ifindex <= 0 ? " on " : "",
-                                 ifindex <= 0 ? format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT) : "");
+                                 ifindex <= 0 ? FORMAT_IFNAME_FULL(local[i].ifindex, FORMAT_IFNAME_IFINDEX_WITH_PERCENT) : "");
                 if (r < 0)
                         return log_oom();
         }
@@ -1093,32 +1081,19 @@
                 (void) sd_dhcp_lease_get_address(lease, &dhcp4_address);
 
         for (int i = 0; i < n; i++) {
-                _cleanup_free_ char *pretty = NULL;
-                char name[IF_NAMESIZE+1];
+                struct in_addr server_address;
+                bool dhcp4 = false;
 
-                r = in_addr_to_string(local[i].family, &local[i].address, &pretty);
-                if (r < 0)
-                        return r;
+                if (local[i].family == AF_INET && in4_addr_equal(&local[i].address.in, &dhcp4_address))
+                        dhcp4 = sd_dhcp_lease_get_server_identifier(lease, &server_address) >= 0;
 
-                if (local[i].family == AF_INET && in4_addr_equal(&local[i].address.in, &dhcp4_address)) {
-                        struct in_addr server_address;
-                        char *p, s[INET_ADDRSTRLEN];
-
-                        r = sd_dhcp_lease_get_server_identifier(lease, &server_address);
-                        if (r >= 0 && inet_ntop(AF_INET, &server_address, s, sizeof(s)))
-                                p = strjoin(pretty, " (DHCP4 via ", s, ")");
-                        else
-                                p = strjoin(pretty, " (DHCP4)");
-                        if (!p)
-                                return log_oom();
-
-                        free_and_replace(pretty, p);
-                }
-
-                r = strv_extendf(&buf, "%s%s%s",
-                                 pretty,
+                r = strv_extendf(&buf, "%s%s%s%s%s%s",
+                                 IN_ADDR_TO_STRING(local[i].family, &local[i].address),
+                                 dhcp4 ? " (DHCP4 via " : "",
+                                 dhcp4 ? IN4_ADDR_TO_STRING(&server_address) : "",
+                                 dhcp4 ? ")" : "",
                                  ifindex <= 0 ? " on " : "",
-                                 ifindex <= 0 ? format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT) : "");
+                                 ifindex <= 0 ? FORMAT_IFNAME_FULL(local[i].ifindex, FORMAT_IFNAME_IFINDEX_WITH_PERCENT) : "");
                 if (r < 0)
                         return log_oom();
         }
@@ -1138,7 +1113,7 @@
         if (r < 0)
                 return log_error_errno(r, "Could not allocate RTM_GETADDRLABEL message: %m");
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
@@ -1165,8 +1140,7 @@
         (void) table_set_align_percent(table, cell, 100);
 
         for (sd_netlink_message *m = reply; m; m = sd_netlink_message_next(m)) {
-                _cleanup_free_ char *pretty = NULL;
-                union in_addr_union prefix = IN_ADDR_NULL;
+                struct in6_addr prefix;
                 uint8_t prefixlen;
                 uint32_t label;
 
@@ -1182,11 +1156,7 @@
                         continue;
                 }
 
-                r = sd_netlink_message_read_in6_addr(m, IFAL_ADDRESS, &prefix.in6);
-                if (r < 0)
-                        continue;
-
-                r = in_addr_to_string(AF_INET6, &prefix, &pretty);
+                r = sd_netlink_message_read_in6_addr(m, IFAL_ADDRESS, &prefix);
                 if (r < 0)
                         continue;
 
@@ -1198,7 +1168,7 @@
                 if (r < 0)
                         return table_log_add_error(r);
 
-                r = table_add_cell_stringf(table, NULL, "%s/%u", pretty, prefixlen);
+                r = table_add_cell_stringf(table, NULL, "%s/%u", IN6_ADDR_TO_STRING(&prefix), prefixlen);
                 if (r < 0)
                         return table_log_add_error(r);
         }
@@ -1224,12 +1194,10 @@
 }
 
 static int open_lldp_neighbors(int ifindex, FILE **ret) {
-        _cleanup_free_ char *p = NULL;
+        char p[STRLEN("/run/systemd/netif/lldp/") + DECIMAL_STR_MAX(int)];
         FILE *f;
 
-        if (asprintf(&p, "/run/systemd/netif/lldp/%i", ifindex) < 0)
-                return -ENOMEM;
-
+        xsprintf(p, "/run/systemd/netif/lldp/%i", ifindex);
         f = fopen(p, "re");
         if (!f)
                 return -errno;
@@ -1458,6 +1426,34 @@
         return 0;
 }
 
+static int dump_hw_address(Table *table, sd_hwdb *hwdb, const char *field, const struct hw_addr_data *addr) {
+        _cleanup_free_ char *description = NULL;
+        int r;
+
+        assert(table);
+        assert(field);
+        assert(addr);
+
+        if (addr->length == ETH_ALEN)
+                (void) ieee_oui(hwdb, &addr->ether, &description);
+
+        r = table_add_many(table,
+                           TABLE_EMPTY,
+                           TABLE_STRING, field);
+        if (r < 0)
+                return table_log_add_error(r);
+
+        r = table_add_cell_stringf(table, NULL, "%s%s%s%s",
+                                   HW_ADDR_TO_STR(addr),
+                                   description ? " (" : "",
+                                   strempty(description),
+                                   description ? ")" : "");
+        if (r < 0)
+                return table_log_add_error(r);
+
+        return 0;
+}
+
 static OutputFlags get_output_flags(void) {
         return
                 arg_all * OUTPUT_SHOW_ALL |
@@ -1521,15 +1517,50 @@
                         NULL);
 }
 
+static int table_add_string_line(Table *table, const char *key, const char *value) {
+        int r;
+
+        assert(table);
+        assert(key);
+
+        if (isempty(value))
+                return 0;
+
+        r = table_add_many(table,
+                           TABLE_EMPTY,
+                           TABLE_STRING, key,
+                           TABLE_STRING, value);
+        if (r < 0)
+                return table_log_add_error(r);
+
+        return 0;
+}
+
+static int format_dropins(char **dropins) {
+        STRV_FOREACH(d, dropins) {
+                _cleanup_free_ char *s = NULL;
+                int glyph = *(d + 1) == NULL ? SPECIAL_GLYPH_TREE_RIGHT : SPECIAL_GLYPH_TREE_BRANCH;
+
+                s = strjoin(special_glyph(glyph), *d);
+                if (!s)
+                        return log_oom();
+
+                free_and_replace(*d, s);
+        }
+
+        return 0;
+}
+
 static int link_status_one(
                 sd_bus *bus,
                 sd_netlink *rtnl,
                 sd_hwdb *hwdb,
                 const LinkInfo *info) {
 
-        _cleanup_strv_free_ char **dns = NULL, **ntp = NULL, **sip = NULL, **search_domains = NULL, **route_domains = NULL;
+        _cleanup_strv_free_ char **dns = NULL, **ntp = NULL, **sip = NULL, **search_domains = NULL,
+                **route_domains = NULL, **link_dropins = NULL, **network_dropins = NULL;
         _cleanup_free_ char *t = NULL, *network = NULL, *iaid = NULL, *duid = NULL,
-                *setup_state = NULL, *operational_state = NULL, *online_state = NULL, *lease_file = NULL, *activation_policy = NULL;
+                *setup_state = NULL, *operational_state = NULL, *online_state = NULL, *activation_policy = NULL;
         const char *driver = NULL, *path = NULL, *vendor = NULL, *model = NULL, *link = NULL,
                 *on_color_operational, *off_color_operational, *on_color_setup, *off_color_setup, *on_color_online;
         _cleanup_free_ int *carrier_bound_to = NULL, *carrier_bound_by = NULL;
@@ -1547,9 +1578,7 @@
         (void) sd_network_link_get_online_state(info->ifindex, &online_state);
         online_state_to_color(online_state, &on_color_online, NULL);
 
-        r = sd_network_link_get_setup_state(info->ifindex, &setup_state);
-        if (r == -ENODATA) /* If there's no info available about this iface, it's unmanaged by networkd */
-                setup_state = strdup("unmanaged");
+        (void) sd_network_link_get_setup_state(info->ifindex, &setup_state);
         setup_state_to_color(setup_state, &on_color_setup, &off_color_setup);
 
         (void) sd_network_link_get_dns(info->ifindex, &dns);
@@ -1557,9 +1586,23 @@
         (void) sd_network_link_get_route_domains(info->ifindex, &route_domains);
         (void) sd_network_link_get_ntp(info->ifindex, &ntp);
         (void) sd_network_link_get_sip(info->ifindex, &sip);
+        (void) sd_network_link_get_network_file(info->ifindex, &network);
+        (void) sd_network_link_get_network_file_dropins(info->ifindex, &network_dropins);
+        (void) sd_network_link_get_carrier_bound_to(info->ifindex, &carrier_bound_to);
+        (void) sd_network_link_get_carrier_bound_by(info->ifindex, &carrier_bound_by);
+        (void) sd_network_link_get_activation_policy(info->ifindex, &activation_policy);
 
         if (info->sd_device) {
+                const char *joined;
+
                 (void) sd_device_get_property_value(info->sd_device, "ID_NET_LINK_FILE", &link);
+
+                if (sd_device_get_property_value(info->sd_device, "ID_NET_LINK_FILE_DROPINS", &joined) >= 0) {
+                        r = strv_split_full(&link_dropins, joined, ":", EXTRACT_CUNESCAPE);
+                        if (r < 0)
+                                return r;
+                }
+
                 (void) sd_device_get_property_value(info->sd_device, "ID_NET_DRIVER", &driver);
                 (void) sd_device_get_property_value(info->sd_device, "ID_PATH", &path);
 
@@ -1570,20 +1613,29 @@
                         (void) sd_device_get_property_value(info->sd_device, "ID_MODEL", &model);
         }
 
-        r = link_get_type_string(info->sd_device, info->iftype, &t);
+        r = net_get_type_string(info->sd_device, info->iftype, &t);
         if (r == -ENOMEM)
                 return log_oom();
 
-        (void) sd_network_link_get_network_file(info->ifindex, &network);
-
-        (void) sd_network_link_get_carrier_bound_to(info->ifindex, &carrier_bound_to);
-        (void) sd_network_link_get_carrier_bound_by(info->ifindex, &carrier_bound_by);
-
-        if (asprintf(&lease_file, "/run/systemd/netif/leases/%d", info->ifindex) < 0)
-                return log_oom();
+        char lease_file[STRLEN("/run/systemd/netif/leases/") + DECIMAL_STR_MAX(int)];
+        xsprintf(lease_file, "/run/systemd/netif/leases/%i", info->ifindex);
 
         (void) dhcp_lease_load(&lease, lease_file);
 
+        r = format_dropins(network_dropins);
+        if (r < 0)
+                return r;
+
+        if (strv_prepend(&network_dropins, network) < 0)
+                return log_oom();
+
+        r = format_dropins(link_dropins);
+        if (r < 0)
+                return r;
+
+        if (strv_prepend(&link_dropins, link) < 0)
+                return log_oom();
+
         table = table_new("dot", "key", "value");
         if (!table)
                 return log_oom();
@@ -1599,6 +1651,7 @@
 
         table_set_header(table, false);
 
+        /* First line: circle, ifindex, ifname. */
         r = table_add_many(table,
                            TABLE_STRING, special_glyph(SPECIAL_GLYPH_BLACK_CIRCLE),
                            TABLE_SET_COLOR, on_color_operational);
@@ -1607,27 +1660,29 @@
         r = table_add_cell_stringf(table, &cell, "%i: %s", info->ifindex, info->name);
         if (r < 0)
                 return table_log_add_error(r);
+        r = table_add_many(table, TABLE_EMPTY);
+        if (r < 0)
+                return table_log_add_error(r);
+
         (void) table_set_align_percent(table, cell, 0);
 
+        /* unit files and basic states. */
         r = table_add_many(table,
                            TABLE_EMPTY,
-                           TABLE_EMPTY,
                            TABLE_STRING, "Link File:",
                            TABLE_SET_ALIGN_PERCENT, 100,
-                           TABLE_STRING, strna(link),
+                           TABLE_STRV, link_dropins ?: STRV_MAKE("n/a"),
                            TABLE_EMPTY,
                            TABLE_STRING, "Network File:",
-                           TABLE_STRING, strna(network),
-                           TABLE_EMPTY,
-                           TABLE_STRING, "Type:",
-                           TABLE_STRING, strna(t),
+                           TABLE_STRV, network_dropins ?: STRV_MAKE("n/a"),
                            TABLE_EMPTY,
                            TABLE_STRING, "State:");
         if (r < 0)
                 return table_log_add_error(r);
+
         r = table_add_cell_stringf(table, NULL, "%s%s%s (%s%s%s)",
                                    on_color_operational, strna(operational_state), off_color_operational,
-                                   on_color_setup, strna(setup_state), off_color_setup);
+                                   on_color_setup, setup_state ?: "unmanaged", off_color_setup);
         if (r < 0)
                 return table_log_add_error(r);
 
@@ -1639,81 +1694,45 @@
         if (r < 0)
                 return table_log_add_error(r);
 
+        r = table_add_string_line(table, "Type:", t);
+        if (r < 0)
+                return r;
+
+        r = table_add_string_line(table, "Kind:", info->netdev_kind);
+        if (r < 0)
+                return r;
+
+        r = table_add_string_line(table, "Path:", path);
+        if (r < 0)
+                return r;
+
+        r = table_add_string_line(table, "Driver:", driver);
+        if (r < 0)
+                return r;
+
+        r = table_add_string_line(table, "Vendor:", vendor);
+        if (r < 0)
+                return r;
+
+        r = table_add_string_line(table, "Model:", model);
+        if (r < 0)
+                return r;
+
         strv_sort(info->alternative_names);
         r = dump_list(table, "Alternative Names:", info->alternative_names);
         if (r < 0)
                 return r;
 
-        if (path) {
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, "Path:",
-                                   TABLE_STRING, path);
+        if (info->has_hw_address) {
+                r = dump_hw_address(table, hwdb, "Hardware Address:", &info->hw_address);
                 if (r < 0)
-                        return table_log_add_error(r);
-        }
-        if (driver) {
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, "Driver:",
-                                   TABLE_STRING, driver);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
-        if (vendor) {
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, "Vendor:",
-                                   TABLE_STRING, vendor);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
-        if (model) {
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, "Model:",
-                                   TABLE_STRING, model);
-                if (r < 0)
-                        return table_log_add_error(r);
+                        return r;
         }
 
-        if (info->has_mac_address) {
-                _cleanup_free_ char *description = NULL;
-
-                if (info->hw_address.length == ETH_ALEN)
-                        (void) ieee_oui(hwdb, &info->hw_address.ether, &description);
-
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, "HW Address:");
+        if (info->has_permanent_hw_address) {
+                r = dump_hw_address(table, hwdb, "Permanent Hardware Address:", &info->permanent_hw_address);
                 if (r < 0)
-                        return table_log_add_error(r);
-                r = table_add_cell_stringf(table, NULL, "%s%s%s%s",
-                                           HW_ADDR_TO_STR(&info->hw_address),
-                                           description ? " (" : "",
-                                           strempty(description),
-                                           description ? ")" : "");
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
-
-        if (info->has_permanent_mac_address) {
-                _cleanup_free_ char *description = NULL;
-
-                (void) ieee_oui(hwdb, &info->permanent_mac_address, &description);
-
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, "HW Permanent Address:");
-                if (r < 0)
-                        return table_log_add_error(r);
-                r = table_add_cell_stringf(table, NULL, "%s%s%s%s",
-                                           ETHER_ADDR_TO_STR(&info->permanent_mac_address),
-                                           description ? " (" : "",
-                                           strempty(description),
-                                           description ? ")" : "");
-                if (r < 0)
-                        return table_log_add_error(r);
+                        return r;
         }
 
         if (info->mtu > 0) {
@@ -1740,14 +1759,9 @@
                         return table_log_add_error(r);
         }
 
-        if (info->qdisc) {
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, "QDisc:",
-                                   TABLE_STRING, info->qdisc);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
+        r = table_add_string_line(table, "QDisc:", info->qdisc);
+        if (r < 0)
+                return r;
 
         if (info->master > 0) {
                 r = table_add_many(table,
@@ -1805,11 +1819,15 @@
                 if (r < 0)
                         return table_log_add_error(r);
 
-                if (info->port_state <= BR_STATE_BLOCKING)
+                if (info->port_state <= BR_STATE_BLOCKING) {
                         r = table_add_many(table,
                                            TABLE_EMPTY,
                                            TABLE_STRING, "Port State:",
                                            TABLE_STRING, bridge_state_to_string(info->port_state));
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
+
         } else if (streq_ptr(info->netdev_kind, "bond")) {
                 r = table_add_many(table,
                                    TABLE_EMPTY,
@@ -1933,6 +1951,7 @@
                                    TABLE_STRING, ttl);
                 if (r < 0)
                         return table_log_add_error(r);
+
         } else if (streq_ptr(info->netdev_kind, "vlan") && info->vlan_id > 0) {
                 r = table_add_many(table,
                                    TABLE_EMPTY,
@@ -1940,6 +1959,7 @@
                                    TABLE_UINT16, info->vlan_id);
                 if (r < 0)
                         return table_log_add_error(r);
+
         } else if (STRPTR_IN_SET(info->netdev_kind, "ipip", "sit", "gre", "gretap", "erspan", "vti")) {
                 if (in_addr_is_set(AF_INET, &info->local)) {
                         r = table_add_many(table,
@@ -1958,6 +1978,7 @@
                         if (r < 0)
                                 return table_log_add_error(r);
                 }
+
         } else if (STRPTR_IN_SET(info->netdev_kind, "ip6gre", "ip6gretap", "ip6erspan", "vti6")) {
                 if (in_addr_is_set(AF_INET6, &info->local)) {
                         r = table_add_many(table,
@@ -1976,6 +1997,7 @@
                         if (r < 0)
                                 return table_log_add_error(r);
                 }
+
         } else if (streq_ptr(info->netdev_kind, "geneve")) {
                 r = table_add_many(table,
                                    TABLE_EMPTY,
@@ -2070,6 +2092,7 @@
                         if (r < 0)
                                 return table_log_add_error(r);
                 }
+
         } else if (STRPTR_IN_SET(info->netdev_kind, "macvlan", "macvtap")) {
                 r = table_add_many(table,
                                    TABLE_EMPTY,
@@ -2077,6 +2100,7 @@
                                    TABLE_STRING, macvlan_mode_to_string(info->macvlan_mode));
                 if (r < 0)
                         return table_log_add_error(r);
+
         } else if (streq_ptr(info->netdev_kind, "ipvlan")) {
                 _cleanup_free_ char *p = NULL, *s = NULL;
 
@@ -2121,16 +2145,14 @@
         }
 
         if (info->has_bitrates) {
-                char tx[FORMAT_BYTES_MAX], rx[FORMAT_BYTES_MAX];
-
                 r = table_add_many(table,
                                    TABLE_EMPTY,
                                    TABLE_STRING, "Bit Rate (Tx/Rx):");
                 if (r < 0)
                         return table_log_add_error(r);
                 r = table_add_cell_stringf(table, NULL, "%sbps/%sbps",
-                                           format_bytes_full(tx, sizeof tx, info->tx_bitrate, 0),
-                                           format_bytes_full(rx, sizeof rx, info->rx_bitrate, 0));
+                                           FORMAT_BYTES_FULL(info->tx_bitrate, 0),
+                                           FORMAT_BYTES_FULL(info->rx_bitrate, 0));
                 if (r < 0)
                         return table_log_add_error(r);
         }
@@ -2138,7 +2160,7 @@
         if (info->has_tx_queues || info->has_rx_queues) {
                 r = table_add_many(table,
                                    TABLE_EMPTY,
-                                   TABLE_STRING, "Queue Length (Tx/Rx):");
+                                   TABLE_STRING, "Number of Queues (Tx/Rx):");
                 if (r < 0)
                         return table_log_add_error(r);
                 r = table_add_cell_stringf(table, NULL, "%" PRIu32 "/%" PRIu32, info->tx_queues, info->rx_queues);
@@ -2147,9 +2169,6 @@
         }
 
         if (info->has_ethtool_link_info) {
-                const char *duplex = duplex_to_string(info->duplex);
-                const char *port = port_to_string(info->port);
-
                 if (IN_SET(info->autonegotiation, AUTONEG_DISABLE, AUTONEG_ENABLE)) {
                         r = table_add_many(table,
                                            TABLE_EMPTY,
@@ -2159,7 +2178,7 @@
                                 return table_log_add_error(r);
                 }
 
-                if (info->speed > 0) {
+                if (info->speed > 0 && info->speed != UINT64_MAX) {
                         r = table_add_many(table,
                                            TABLE_EMPTY,
                                            TABLE_STRING, "Speed:",
@@ -2168,23 +2187,13 @@
                                 return table_log_add_error(r);
                 }
 
-                if (duplex) {
-                        r = table_add_many(table,
-                                           TABLE_EMPTY,
-                                           TABLE_STRING, "Duplex:",
-                                           TABLE_STRING, duplex);
-                        if (r < 0)
-                                return table_log_add_error(r);
-                }
+                r = table_add_string_line(table, "Duplex:", duplex_to_string(info->duplex));
+                if (r < 0)
+                        return r;
 
-                if (port) {
-                        r = table_add_many(table,
-                                           TABLE_EMPTY,
-                                           TABLE_STRING, "Port:",
-                                           TABLE_STRING, port);
-                        if (r < 0)
-                                return table_log_add_error(r);
-                }
+                r = table_add_string_line(table, "Port:", port_to_string(info->port));
+                if (r < 0)
+                        return r;
         }
 
         r = dump_addresses(rtnl, lease, table, info->ifindex);
@@ -2215,15 +2224,9 @@
         if (r < 0)
                 return r;
 
-        r = sd_network_link_get_activation_policy(info->ifindex, &activation_policy);
-        if (r >= 0) {
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, "Activation Policy:",
-                                   TABLE_STRING, activation_policy);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
+        r = table_add_string_line(table, "Activation Policy:", activation_policy);
+        if (r < 0)
+                return r;
 
         r = sd_network_link_get_required_for_online(info->ifindex);
         if (r >= 0) {
@@ -2385,7 +2388,7 @@
 }
 
 static int link_status(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        sd_bus *bus = ASSERT_PTR(userdata);
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
         _cleanup_(link_info_array_freep) LinkInfo *links = NULL;
@@ -2393,16 +2396,12 @@
 
         if (arg_json_format_flags != JSON_FORMAT_OFF) {
                 if (arg_all || argc <= 1)
-                        return dump_manager_description();
+                        return dump_manager_description(bus);
                 else
-                        return dump_link_description(strv_skip(argv, 1));
+                        return dump_link_description(bus, strv_skip(argv, 1));
         }
 
-        (void) pager_open(arg_pager_flags);
-
-        r = sd_bus_open_system(&bus);
-        if (r < 0)
-                return log_error_errno(r, "Failed to connect system bus: %m");
+        pager_open(arg_pager_flags);
 
         r = sd_netlink_open(&rtnl);
         if (r < 0)
@@ -2497,14 +2496,14 @@
         if (c < 0)
                 return c;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         table = table_new("link",
-                          "chassis id",
-                          "system name",
+                          "chassis-id",
+                          "system-name",
                           "caps",
-                          "port id",
-                          "port description");
+                          "port-id",
+                          "port-description");
         if (!table)
                 return log_oom();
 
@@ -2513,23 +2512,9 @@
 
         table_set_header(table, arg_legend);
 
-        assert_se(cell = table_get_cell(table, 0, 0));
-        table_set_minimum_width(table, cell, 16);
-
-        assert_se(cell = table_get_cell(table, 0, 1));
-        table_set_minimum_width(table, cell, 17);
-
-        assert_se(cell = table_get_cell(table, 0, 2));
-        table_set_minimum_width(table, cell, 16);
-
         assert_se(cell = table_get_cell(table, 0, 3));
         table_set_minimum_width(table, cell, 11);
-
-        assert_se(cell = table_get_cell(table, 0, 4));
-        table_set_minimum_width(table, cell, 17);
-
-        assert_se(cell = table_get_cell(table, 0, 5));
-        table_set_minimum_width(table, cell, 16);
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (int i = 0; i < c; i++) {
                 _cleanup_fclose_ FILE *f = NULL;
@@ -2543,9 +2528,9 @@
                 }
 
                 for (;;) {
-                        _cleanup_free_ char *cid = NULL, *pid = NULL, *sname = NULL, *pdesc = NULL, *capabilities = NULL;
                         const char *chassis_id = NULL, *port_id = NULL, *system_name = NULL, *port_description = NULL;
                         _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *n = NULL;
+                        _cleanup_free_ char *capabilities = NULL;
                         uint16_t cc;
 
                         r = next_lldp_neighbor(f, &n);
@@ -2561,30 +2546,6 @@
                         (void) sd_lldp_neighbor_get_system_name(n, &system_name);
                         (void) sd_lldp_neighbor_get_port_description(n, &port_description);
 
-                        if (chassis_id) {
-                                cid = ellipsize(chassis_id, 17, 100);
-                                if (cid)
-                                        chassis_id = cid;
-                        }
-
-                        if (port_id) {
-                                pid = ellipsize(port_id, 17, 100);
-                                if (pid)
-                                        port_id = pid;
-                        }
-
-                        if (system_name) {
-                                sname = ellipsize(system_name, 16, 100);
-                                if (sname)
-                                        system_name = sname;
-                        }
-
-                        if (port_description) {
-                                pdesc = ellipsize(port_description, 16, 100);
-                                if (pdesc)
-                                        port_description = pdesc;
-                        }
-
                         if (sd_lldp_neighbor_get_enabled_capabilities(n, &cc) >= 0) {
                                 capabilities = lldp_capabilities_to_string(cc);
                                 all |= cc;
@@ -2592,11 +2553,11 @@
 
                         r = table_add_many(table,
                                            TABLE_STRING, links[i].name,
-                                           TABLE_STRING, strna(chassis_id),
-                                           TABLE_STRING, strna(system_name),
-                                           TABLE_STRING, strna(capabilities),
-                                           TABLE_STRING, strna(port_id),
-                                           TABLE_STRING, strna(port_description));
+                                           TABLE_STRING, chassis_id,
+                                           TABLE_STRING, system_name,
+                                           TABLE_STRING, capabilities,
+                                           TABLE_STRING, port_id,
+                                           TABLE_STRING, port_description);
                         if (r < 0)
                                 return table_log_add_error(r);
 
@@ -2684,12 +2645,9 @@
         SET_FOREACH(p, indexes) {
                 index = PTR_TO_INT(p);
                 r = link_up_down_send_message(rtnl, argv[0], index);
-                if (r < 0) {
-                        char ifname[IF_NAMESIZE + 1];
-
+                if (r < 0)
                         return log_error_errno(r, "Failed to bring %s interface %s: %m",
-                                               argv[0], format_ifname_full(index, ifname, FORMAT_IFNAME_IFINDEX));
-                }
+                                               argv[0], FORMAT_IFNAME_FULL(index, FORMAT_IFNAME_IFINDEX));
         }
 
         return r;
@@ -2722,12 +2680,9 @@
         SET_FOREACH(p, indexes) {
                 index = PTR_TO_INT(p);
                 r = link_delete_send_message(rtnl, index);
-                if (r < 0) {
-                        char ifname[IF_NAMESIZE + 1];
-
+                if (r < 0)
                         return log_error_errno(r, "Failed to delete interface %s: %m",
-                                               format_ifname_full(index, ifname, FORMAT_IFNAME_IFINDEX));
-                }
+                                               FORMAT_IFNAME_FULL(index, FORMAT_IFNAME_IFINDEX));
         }
 
         return r;
@@ -2746,14 +2701,10 @@
 }
 
 static int link_renew(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        sd_bus *bus = ASSERT_PTR(userdata);
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         int index, k = 0, r;
 
-        r = sd_bus_open_system(&bus);
-        if (r < 0)
-                return log_error_errno(r, "Failed to connect system bus: %m");
-
         for (int i = 1; i < argc; i++) {
                 index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]);
                 if (index < 0)
@@ -2780,14 +2731,10 @@
 }
 
 static int link_force_renew(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        sd_bus *bus = ASSERT_PTR(userdata);
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         int k = 0, r;
 
-        r = sd_bus_open_system(&bus);
-        if (r < 0)
-                return log_error_errno(r, "Failed to connect system bus: %m");
-
         for (int i = 1; i < argc; i++) {
                 int index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]);
                 if (index < 0)
@@ -2802,33 +2749,25 @@
 }
 
 static int verb_reload(int argc, char *argv[], void *userdata) {
+        sd_bus *bus = ASSERT_PTR(userdata);
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r;
 
-        r = sd_bus_open_system(&bus);
-        if (r < 0)
-                return log_error_errno(r, "Failed to connect system bus: %m");
-
         r = bus_call_method(bus, bus_network_mgr, "Reload", &error, NULL, NULL);
         if (r < 0)
-                return log_error_errno(r, "Failed to reload network settings: %m");
+                return log_error_errno(r, "Failed to reload network settings: %s", bus_error_message(&error, r));
 
         return 0;
 }
 
 static int verb_reconfigure(int argc, char *argv[], void *userdata) {
+        sd_bus *bus = ASSERT_PTR(userdata);
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_set_free_ Set *indexes = NULL;
         int index, r;
         void *p;
 
-        r = sd_bus_open_system(&bus);
-        if (r < 0)
-                return log_error_errno(r, "Failed to connect system bus: %m");
-
         indexes = set_new(NULL);
         if (!indexes)
                 return log_oom();
@@ -2846,12 +2785,10 @@
         SET_FOREACH(p, indexes) {
                 index = PTR_TO_INT(p);
                 r = bus_call_method(bus, bus_network_mgr, "ReconfigureLink", &error, NULL, "i", index);
-                if (r < 0) {
-                        char ifname[IF_NAMESIZE + 1];
-
-                        return log_error_errno(r, "Failed to reconfigure network interface %s: %m",
-                                               format_ifname_full(index, ifname, FORMAT_IFNAME_IFINDEX));
-                }
+                if (r < 0)
+                        return log_error_errno(r, "Failed to reconfigure network interface %s: %s",
+                                               FORMAT_IFNAME_FULL(index, FORMAT_IFNAME_IFINDEX),
+                                               bus_error_message(&error, r));
         }
 
         return 0;
@@ -2885,7 +2822,7 @@
                "     --no-pager          Do not pipe output into a pager\n"
                "     --no-legend         Do not show the headers and footers\n"
                "  -a --all               Show status for all links\n"
-               "  -s --stats             Show detailed link statics\n"
+               "  -s --stats             Show detailed link statistics\n"
                "  -l --full              Do not ellipsize output\n"
                "  -n --lines=INTEGER     Number of journal entries to show\n"
                "     --json=pretty|short|off\n"
@@ -2972,14 +2909,14 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
         }
 
         return 1;
 }
 
-static int networkctl_main(int argc, char *argv[]) {
+static int networkctl_main(sd_bus *bus, int argc, char *argv[]) {
         static const Verb verbs[] = {
                 { "list",        VERB_ANY, VERB_ANY, VERB_DEFAULT, list_links          },
                 { "status",      VERB_ANY, VERB_ANY, 0,            link_status         },
@@ -2995,20 +2932,15 @@
                 {}
         };
 
-        return dispatch_verb(argc, argv, verbs, NULL);
+        return dispatch_verb(argc, argv, verbs, bus);
 }
 
-static int check_netns_match(void) {
+static int check_netns_match(sd_bus *bus) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         struct stat st;
         uint64_t id;
         int r;
 
-        r = sd_bus_open_system(&bus);
-        if (r < 0)
-                return log_error_errno(r, "Failed to connect system bus: %m");
-
         r = sd_bus_get_property_trivial(
                         bus,
                         "org.freedesktop.network1",
@@ -3046,6 +2978,7 @@
 }
 
 static int run(int argc, char* argv[]) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r;
 
         log_setup();
@@ -3054,13 +2987,17 @@
         if (r <= 0)
                 return r;
 
-        r = check_netns_match();
+        r = sd_bus_open_system(&bus);
+        if (r < 0)
+                return log_error_errno(r, "Failed to connect system bus: %m");
+
+        r = check_netns_match(bus);
         if (r < 0)
                 return r;
 
         warn_networkd_missing();
 
-        return networkctl_main(argc, argv);
+        return networkctl_main(bus, argc, argv);
 }
 
 DEFINE_MAIN_FUNCTION(run);
diff --git a/src/network/networkd-address-generation.c b/src/network/networkd-address-generation.c
new file mode 100644
index 0000000..769cccf
--- /dev/null
+++ b/src/network/networkd-address-generation.c
@@ -0,0 +1,440 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <net/if_arp.h>
+
+#include "sd-id128.h"
+
+#include "arphrd-util.h"
+#include "id128-util.h"
+#include "memory-util.h"
+#include "networkd-address-generation.h"
+#include "networkd-link.h"
+#include "networkd-network.h"
+#include "string-util.h"
+
+#define DAD_CONFLICTS_IDGEN_RETRIES_RFC7217 3
+
+/* https://www.iana.org/assignments/ipv6-interface-ids/ipv6-interface-ids.xml */
+#define SUBNET_ROUTER_ANYCAST_ADDRESS            ((const struct in6_addr) { .s6_addr = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } })
+#define SUBNET_ROUTER_ANYCAST_PREFIXLEN          64
+#define RESERVED_INTERFACE_IDENTIFIERS_ADDRESS   ((const struct in6_addr) { .s6_addr = { 0x02, 0x00, 0x5E, 0xFF, 0xFE } })
+#define RESERVED_INTERFACE_IDENTIFIERS_PREFIXLEN 40
+#define RESERVED_SUBNET_ANYCAST_ADDRESSES        ((const struct in6_addr) { .s6_addr = { 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80 } })
+#define RESERVED_SUBNET_ANYCAST_PREFIXLEN        57
+
+#define DHCP_PD_APP_ID SD_ID128_MAKE(fb,b9,37,ca,4a,ed,4a,4d,b0,70,7f,aa,71,c0,c9,85)
+#define NDISC_APP_ID   SD_ID128_MAKE(13,ac,81,a7,d5,3f,49,78,92,79,5d,0c,29,3a,bc,7e)
+#define RADV_APP_ID    SD_ID128_MAKE(1f,1e,90,c8,5c,78,4f,dc,8e,61,2d,59,0d,53,c1,25)
+
+typedef enum AddressGenerationType {
+        ADDRESS_GENERATION_EUI64,
+        ADDRESS_GENERATION_STATIC,
+        ADDRESS_GENERATION_PREFIXSTABLE,
+        _ADDRESS_GENERATION_TYPE_MAX,
+        _ADDRESS_GENERATION_TYPE_INVALID = -EINVAL,
+} AddressGenerationType;
+
+typedef struct IPv6Token {
+        AddressGenerationType type;
+        struct in6_addr address;
+        sd_id128_t secret_key;
+} IPv6Token;
+
+static int generate_eui64_address(const Link *link, const struct in6_addr *prefix, struct in6_addr *ret) {
+        assert(link);
+        assert(prefix);
+        assert(ret);
+
+        memcpy(ret->s6_addr, prefix, 8);
+
+        switch (link->iftype) {
+        case ARPHRD_INFINIBAND:
+                /* Use last 8 byte. See RFC4391 section 8 */
+                memcpy(&ret->s6_addr[8], &link->hw_addr.infiniband[INFINIBAND_ALEN - 8], 8);
+                break;
+        case ARPHRD_ETHER:
+                /* see RFC4291 section 2.5.1 */
+                ret->s6_addr[8]  = link->hw_addr.ether.ether_addr_octet[0];
+                ret->s6_addr[9]  = link->hw_addr.ether.ether_addr_octet[1];
+                ret->s6_addr[10] = link->hw_addr.ether.ether_addr_octet[2];
+                ret->s6_addr[11] = 0xff;
+                ret->s6_addr[12] = 0xfe;
+                ret->s6_addr[13] = link->hw_addr.ether.ether_addr_octet[3];
+                ret->s6_addr[14] = link->hw_addr.ether.ether_addr_octet[4];
+                ret->s6_addr[15] = link->hw_addr.ether.ether_addr_octet[5];
+                break;
+        default:
+                return log_link_debug_errno(link, SYNTHETIC_ERRNO(EINVAL),
+                                            "Token=eui64 is not supported for interface type %s, ignoring.",
+                                            strna(arphrd_to_name(link->iftype)));
+        }
+
+        ret->s6_addr[8] ^= 1 << 1;
+        return 0;
+}
+
+static bool stable_private_address_is_valid(const struct in6_addr *addr) {
+        assert(addr);
+
+        /* According to rfc4291, generated address should not be in the following ranges. */
+
+        if (in6_addr_prefix_covers(&SUBNET_ROUTER_ANYCAST_ADDRESS, SUBNET_ROUTER_ANYCAST_PREFIXLEN, addr))
+                return false;
+
+        if (in6_addr_prefix_covers(&RESERVED_INTERFACE_IDENTIFIERS_ADDRESS, RESERVED_INTERFACE_IDENTIFIERS_PREFIXLEN, addr))
+                return false;
+
+        if (in6_addr_prefix_covers(&RESERVED_SUBNET_ANYCAST_ADDRESSES, RESERVED_SUBNET_ANYCAST_PREFIXLEN, addr))
+                return false;
+
+        return true;
+}
+
+static void generate_stable_private_address_one(
+                Link *link,
+                const sd_id128_t *secret_key,
+                const struct in6_addr *prefix,
+                uint8_t dad_counter,
+                struct in6_addr *ret) {
+
+        struct siphash state;
+        uint64_t rid;
+
+        assert(link);
+        assert(secret_key);
+        assert(prefix);
+        assert(ret);
+
+        /* According to RFC7217 section 5.1
+         * RID = F(Prefix, Net_Iface, Network_ID, DAD_Counter, secret_key) */
+
+        siphash24_init(&state, secret_key->bytes);
+
+        siphash24_compress(prefix, 8, &state);
+        siphash24_compress_string(link->ifname, &state);
+        if (link->iftype == ARPHRD_INFINIBAND)
+                /* Only last 8 bytes of IB MAC are stable */
+                siphash24_compress(&link->hw_addr.infiniband[INFINIBAND_ALEN - 8], 8, &state);
+        else
+                siphash24_compress(link->hw_addr.bytes, link->hw_addr.length, &state);
+        siphash24_compress(&dad_counter, sizeof(uint8_t), &state);
+
+        rid = htole64(siphash24_finalize(&state));
+
+        memcpy(ret->s6_addr, prefix->s6_addr, 8);
+        memcpy(ret->s6_addr + 8, &rid, 8);
+}
+
+static int generate_stable_private_address(
+                Link *link,
+                const sd_id128_t *app_id,
+                const sd_id128_t *secret_key,
+                const struct in6_addr *prefix,
+                struct in6_addr *ret) {
+
+        sd_id128_t secret_machine_key;
+        struct in6_addr addr;
+        uint8_t i;
+        int r;
+
+        assert(link);
+        assert(app_id);
+        assert(secret_key);
+        assert(prefix);
+        assert(ret);
+
+        if (sd_id128_is_null(*secret_key)) {
+                r = sd_id128_get_machine_app_specific(*app_id, &secret_machine_key);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to generate secret key for IPv6 stable private address: %m");
+
+                secret_key = &secret_machine_key;
+        }
+
+        /* While this loop uses dad_counter and a retry limit as specified in RFC 7217, the loop does
+         * not actually attempt Duplicate Address Detection; the counter will be incremented only when
+         * the address generation algorithm produces an invalid address, and the loop may exit with an
+         * address which ends up being unusable due to duplication on the link. */
+        for (i = 0; i < DAD_CONFLICTS_IDGEN_RETRIES_RFC7217; i++) {
+                generate_stable_private_address_one(link, secret_key, prefix, i, &addr);
+
+                if (stable_private_address_is_valid(&addr))
+                        break;
+        }
+        if (i >= DAD_CONFLICTS_IDGEN_RETRIES_RFC7217)
+                /* propagate recognizable errors. */
+                return log_link_debug_errno(link, SYNTHETIC_ERRNO(ENOANO),
+                                            "Failed to generate stable private address.");
+
+        *ret = addr;
+        return 0;
+}
+
+static int generate_addresses(
+                Link *link,
+                Set *tokens,
+                const sd_id128_t *app_id,
+                const struct in6_addr *prefix,
+                uint8_t prefixlen,
+                Set **ret) {
+
+        _cleanup_set_free_ Set *addresses = NULL;
+        struct in6_addr masked;
+        IPv6Token *j;
+        int r;
+
+        assert(link);
+        assert(app_id);
+        assert(prefix);
+        assert(prefixlen > 0 && prefixlen <= 64);
+        assert(ret);
+
+        masked = *prefix;
+        in6_addr_mask(&masked, prefixlen);
+
+        SET_FOREACH(j, tokens) {
+                struct in6_addr addr, *copy;
+
+                switch (j->type) {
+                case ADDRESS_GENERATION_EUI64:
+                        if (generate_eui64_address(link, &masked, &addr) < 0)
+                                continue;
+                        break;
+
+                case ADDRESS_GENERATION_STATIC:
+                        memcpy(addr.s6_addr, masked.s6_addr, 8);
+                        memcpy(addr.s6_addr + 8, j->address.s6_addr + 8, 8);
+                        break;
+
+                case ADDRESS_GENERATION_PREFIXSTABLE:
+                        if (in6_addr_is_set(&j->address) && !in6_addr_equal(&j->address, &masked))
+                                continue;
+
+                        if (generate_stable_private_address(link, app_id, &j->secret_key, &masked, &addr) < 0)
+                                continue;
+
+                        break;
+
+                default:
+                        assert_not_reached();
+                }
+
+                copy = newdup(struct in6_addr, &addr, 1);
+                if (!copy)
+                        return -ENOMEM;
+
+                r = set_ensure_consume(&addresses, &in6_addr_hash_ops_free, copy);
+                if (r < 0)
+                        return r;
+        }
+
+        /* fall back to EUI-64 if no token is provided */
+        if (set_isempty(addresses)) {
+                _cleanup_free_ struct in6_addr *addr = NULL;
+
+                addr = new(struct in6_addr, 1);
+                if (!addr)
+                        return -ENOMEM;
+
+                if (IN_SET(link->iftype, ARPHRD_ETHER, ARPHRD_INFINIBAND))
+                        r = generate_eui64_address(link, &masked, addr);
+                else
+                        r = generate_stable_private_address(link, app_id, &SD_ID128_NULL, &masked, addr);
+                if (r < 0)
+                        return r;
+
+                r = set_ensure_consume(&addresses, &in6_addr_hash_ops_free, TAKE_PTR(addr));
+                if (r < 0)
+                        return r;
+        }
+
+        *ret = TAKE_PTR(addresses);
+        return 0;
+}
+
+int dhcp_pd_generate_addresses(Link *link, const struct in6_addr *prefix, Set **ret) {
+        return generate_addresses(link, link->network->dhcp_pd_tokens, &DHCP_PD_APP_ID, prefix, 64, ret);
+}
+
+int ndisc_generate_addresses(Link *link, const struct in6_addr *prefix, uint8_t prefixlen, Set **ret) {
+        return generate_addresses(link, link->network->ndisc_tokens, &NDISC_APP_ID, prefix, prefixlen, ret);
+}
+
+int radv_generate_addresses(Link *link, Set *tokens, const struct in6_addr *prefix, uint8_t prefixlen, Set **ret) {
+        return generate_addresses(link, tokens, &RADV_APP_ID, prefix, prefixlen, ret);
+}
+
+static void ipv6_token_hash_func(const IPv6Token *p, struct siphash *state) {
+        siphash24_compress(&p->type, sizeof(p->type), state);
+        siphash24_compress(&p->address, sizeof(p->address), state);
+        id128_hash_func(&p->secret_key, state);
+}
+
+static int ipv6_token_compare_func(const IPv6Token *a, const IPv6Token *b) {
+        int r;
+
+        r = CMP(a->type, b->type);
+        if (r != 0)
+                return r;
+
+        r = memcmp(&a->address, &b->address, sizeof(struct in6_addr));
+        if (r != 0)
+                return r;
+
+        return id128_compare_func(&a->secret_key, &b->secret_key);
+}
+
+DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+                ipv6_token_hash_ops,
+                IPv6Token,
+                ipv6_token_hash_func,
+                ipv6_token_compare_func,
+                free);
+
+static int ipv6_token_add(Set **tokens, AddressGenerationType type, const struct in6_addr *addr, const sd_id128_t *secret_key) {
+        IPv6Token *p;
+
+        assert(tokens);
+        assert(type >= 0 && type < _ADDRESS_GENERATION_TYPE_MAX);
+        assert(addr);
+        assert(secret_key);
+
+        p = new(IPv6Token, 1);
+        if (!p)
+                return -ENOMEM;
+
+        *p = (IPv6Token) {
+                 .type = type,
+                 .address = *addr,
+                 .secret_key = *secret_key,
+        };
+
+        return set_ensure_consume(tokens, &ipv6_token_hash_ops, p);
+}
+
+int config_parse_address_generation_type(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_free_ char *addr_alloc = NULL;
+        sd_id128_t secret_key = SD_ID128_NULL;
+        union in_addr_union buffer = {};
+        AddressGenerationType type;
+        Set **tokens = ASSERT_PTR(data);
+        const char *addr;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *tokens = set_free(*tokens);
+                return 0;
+        }
+
+        if ((addr = startswith(rvalue, "prefixstable"))) {
+                const char *comma;
+
+                type = ADDRESS_GENERATION_PREFIXSTABLE;
+
+                if (*addr == ':') {
+                        addr++;
+
+                        comma = strchr(addr, ',');
+                        if (comma) {
+                                addr_alloc = strndup(addr, comma - addr);
+                                if (!addr_alloc)
+                                        return log_oom();
+
+                                addr = addr_alloc;
+                        }
+                } else if (*addr == ',')
+                        comma = TAKE_PTR(addr);
+                else if (*addr == '\0') {
+                        comma = NULL;
+                        addr = NULL;
+                } else {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Invalid IPv6 token mode in %s=, ignoring assignment: %s",
+                                   lvalue, rvalue);
+                        return 0;
+                }
+
+                if (comma) {
+                        r = sd_id128_from_string(comma + 1, &secret_key);
+                        if (r < 0) {
+                                log_syntax(unit, LOG_WARNING, filename, line, r,
+                                           "Failed to parse secret key in %s=, ignoring assignment: %s",
+                                           lvalue, rvalue);
+                                return 0;
+                        }
+                        if (sd_id128_is_null(secret_key)) {
+                                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                           "Secret key in %s= cannot be null, ignoring assignment: %s",
+                                           lvalue, rvalue);
+                                return 0;
+                        }
+                }
+
+        } else if (streq(rvalue, "eui64")) {
+                type = ADDRESS_GENERATION_EUI64;
+                addr = NULL;
+        } else {
+                type = ADDRESS_GENERATION_STATIC;
+
+                addr = startswith(rvalue, "static:");
+                if (!addr)
+                        addr = rvalue;
+        }
+
+        if (addr) {
+                r = in_addr_from_string(AF_INET6, addr, &buffer);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to parse IP address in %s=, ignoring assignment: %s",
+                                   lvalue, rvalue);
+                        return 0;
+                }
+        }
+
+        switch (type) {
+        case ADDRESS_GENERATION_EUI64:
+                assert(in6_addr_is_null(&buffer.in6));
+                break;
+
+        case ADDRESS_GENERATION_STATIC:
+                /* Only last 64 bits are used. */
+                memzero(buffer.in6.s6_addr, 8);
+
+                if (in6_addr_is_null(&buffer.in6)) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "IPv6 address in %s= cannot be the ANY address, ignoring assignment: %s",
+                                   lvalue, rvalue);
+                        return 0;
+                }
+                break;
+
+        case ADDRESS_GENERATION_PREFIXSTABLE:
+                /* At most, the initial 64 bits are used. */
+                (void) in6_addr_mask(&buffer.in6, 64);
+                break;
+
+        default:
+                assert_not_reached();
+        }
+
+        r = ipv6_token_add(tokens, type, &buffer.in6, &secret_key);
+        if (r < 0)
+                return log_oom();
+
+        return 0;
+}
diff --git a/src/network/networkd-address-generation.h b/src/network/networkd-address-generation.h
new file mode 100644
index 0000000..901b2ec
--- /dev/null
+++ b/src/network/networkd-address-generation.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "conf-parser.h"
+#include "in-addr-util.h"
+#include "set.h"
+
+typedef struct Link Link;
+
+int dhcp_pd_generate_addresses(Link *link, const struct in6_addr *prefix, Set **ret);
+int ndisc_generate_addresses(Link *link, const struct in6_addr *prefix, uint8_t prefixlen, Set **ret);
+int radv_generate_addresses(Link *link, Set *tokens, const struct in6_addr *prefix, uint8_t prefixlen, Set **ret);
+
+CONFIG_PARSER_PROTOTYPE(config_parse_address_generation_type);
diff --git a/src/network/networkd-address-label.c b/src/network/networkd-address-label.c
index 1396106..745b959 100644
--- a/src/network/networkd-address-label.c
+++ b/src/network/networkd-address-label.c
@@ -21,14 +21,14 @@
                 hashmap_remove(label->network->address_labels_by_section, label->section);
         }
 
-        network_config_section_free(label->section);
+        config_section_free(label->section);
         return mfree(label);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(AddressLabel, address_label_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(AddressLabel, address_label_free);
 
 static int address_label_new_static(Network *network, const char *filename, unsigned section_line, AddressLabel **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(address_label_freep) AddressLabel *label = NULL;
         int r;
 
@@ -37,7 +37,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -54,9 +54,10 @@
         *label = (AddressLabel) {
                 .network = network,
                 .section = TAKE_PTR(n),
+                .label = UINT32_MAX,
         };
 
-        r = hashmap_ensure_put(&network->address_labels_by_section, &network_config_hash_ops, label->section, label);
+        r = hashmap_ensure_put(&network->address_labels_by_section, &config_section_hash_ops, label->section, label);
         if (r < 0)
                 return r;
 
@@ -64,19 +65,17 @@
         return 0;
 }
 
-static int address_label_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int address_label_configure_handler(
+                sd_netlink *rtnl,
+                sd_netlink_message *m,
+                Request *req,
+                Link *link,
+                void *userdata) {
+
         int r;
 
-        assert(rtnl);
         assert(m);
         assert(link);
-        assert(link->ifname);
-        assert(link->static_address_label_messages > 0);
-
-        link->static_address_label_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
@@ -94,8 +93,8 @@
         return 1;
 }
 
-static int address_label_configure(AddressLabel *label, Link *link, link_netlink_message_handler_t callback) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int address_label_configure(AddressLabel *label, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(label);
@@ -103,31 +102,41 @@
         assert(link->ifindex > 0);
         assert(link->manager);
         assert(link->manager->rtnl);
-        assert(callback);
+        assert(req);
 
-        r = sd_rtnl_message_new_addrlabel(link->manager->rtnl, &req, RTM_NEWADDRLABEL,
+        r = sd_rtnl_message_new_addrlabel(link->manager->rtnl, &m, RTM_NEWADDRLABEL,
                                           link->ifindex, AF_INET6);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not allocate RTM_NEWADDR message: %m");
+                return r;
 
-        r = sd_rtnl_message_addrlabel_set_prefixlen(req, label->prefixlen);
+        r = sd_rtnl_message_addrlabel_set_prefixlen(m, label->prefixlen);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set prefixlen: %m");
+                return r;
 
-        r = sd_netlink_message_append_u32(req, IFAL_LABEL, label->label);
+        r = sd_netlink_message_append_u32(m, IFAL_LABEL, label->label);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append IFAL_LABEL attribute: %m");
+                return r;
 
-        r = sd_netlink_message_append_in6_addr(req, IFA_ADDRESS, &label->in_addr);
+        r = sd_netlink_message_append_in6_addr(m, IFA_ADDRESS, &label->prefix);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append IFA_ADDRESS attribute: %m");
+                return r;
 
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
+        return request_call_netlink_async(link->manager->rtnl, m, req);
+}
+
+static int address_label_process_request(Request *req, Link *link, void *userdata) {
+        AddressLabel *label = ASSERT_PTR(userdata);
+        int r;
+
+        assert(req);
+        assert(link);
+
+        if (!link_is_ready_to_configure(link, false))
+                return 0;
+
+        r = address_label_configure(label, link, req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
+                return log_link_warning_errno(link, r, "Failed to configure address label: %m");
 
         return 1;
 }
@@ -142,8 +151,11 @@
         link->static_address_labels_configured = false;
 
         HASHMAP_FOREACH(label, link->network->address_labels_by_section) {
-                r = link_queue_request(link, REQUEST_TYPE_ADDRESS_LABEL, label, false,
-                                       &link->static_address_label_messages, address_label_configure_handler, NULL);
+                r = link_queue_request_full(link, REQUEST_TYPE_ADDRESS_LABEL,
+                                            label, NULL, trivial_hash_func, trivial_compare_func,
+                                            address_label_process_request,
+                                            &link->static_address_label_messages,
+                                            address_label_configure_handler, NULL);
                 if (r < 0)
                         return log_link_warning_errno(link, r, "Failed to request address label: %m");
         }
@@ -159,16 +171,26 @@
         return 0;
 }
 
-int request_process_address_label(Request *req) {
-        assert(req);
-        assert(req->link);
-        assert(req->label);
-        assert(req->type == REQUEST_TYPE_ADDRESS_LABEL);
+static int address_label_section_verify(AddressLabel *label) {
+        assert(label);
+        assert(label->section);
 
-        if (!link_is_ready_to_configure(req->link, false))
-                return 0;
+        if (section_is_invalid(label->section))
+                return -EINVAL;
 
-        return address_label_configure(req->label, req->link, req->netlink_handler);
+        if (!label->prefix_set)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: [IPv6AddressLabel] section without Prefix= setting specified. "
+                                         "Ignoring [IPv6AddressLabel] section from line %u.",
+                                         label->section->filename, label->section->line);
+
+        if (label->label == UINT32_MAX)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: [IPv6AddressLabel] section without Label= setting specified. "
+                                         "Ignoring [IPv6AddressLabel] section from line %u.",
+                                         label->section->filename, label->section->line);
+
+        return 0;
 }
 
 void network_drop_invalid_address_labels(Network *network) {
@@ -177,7 +199,7 @@
         assert(network);
 
         HASHMAP_FOREACH(label, network->address_labels_by_section)
-                if (section_is_invalid(label->section))
+                if (address_label_section_verify(label) < 0)
                         address_label_free(label);
 }
 
@@ -223,8 +245,9 @@
                 return 0;
         }
 
-        n->in_addr = a.in6;
+        n->prefix = a.in6;
         n->prefixlen = prefixlen;
+        n->prefix_set = true;
 
         TAKE_PTR(n);
         return 0;
@@ -263,7 +286,7 @@
                 return 0;
         }
 
-        if (k == UINT32_C(0xffffffff)) {
+        if (k == UINT_MAX) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0, "Address label is invalid, ignoring: %s", rvalue);
                 return 0;
         }
diff --git a/src/network/networkd-address-label.h b/src/network/networkd-address-label.h
index 26d2d94..1e2ee70 100644
--- a/src/network/networkd-address-label.h
+++ b/src/network/networkd-address-label.h
@@ -9,15 +9,15 @@
 
 typedef struct Link Link;
 typedef struct Network Network;
-typedef struct Request Request;
 
 typedef struct AddressLabel {
         Network *network;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
-        unsigned char prefixlen;
         uint32_t label;
-        struct in6_addr in_addr;
+        struct in6_addr prefix;
+        unsigned char prefixlen;
+        bool prefix_set;
 } AddressLabel;
 
 AddressLabel *address_label_free(AddressLabel *label);
@@ -25,7 +25,6 @@
 void network_drop_invalid_address_labels(Network *network);
 
 int link_request_static_address_labels(Link *link);
-int request_process_address_label(Request *req);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_address_label);
 CONFIG_PARSER_PROTOTYPE(config_parse_address_label_prefix);
diff --git a/src/network/networkd-address-pool.c b/src/network/networkd-address-pool.c
index e1cefbe..51f092a 100644
--- a/src/network/networkd-address-pool.c
+++ b/src/network/networkd-address-pool.c
@@ -106,24 +106,6 @@
                         if (in_addr_prefix_intersect(p->family, u, prefixlen, &a->in_addr, a->prefixlen))
                                 return true;
                 }
-
-                /* Don't clash with assigned foreign addresses */
-                SET_FOREACH(a, l->addresses_foreign) {
-                        if (a->family != p->family)
-                                continue;
-
-                        if (in_addr_prefix_intersect(p->family, u, prefixlen, &a->in_addr, a->prefixlen))
-                                return true;
-                }
-
-                /* Don't clash with addresses already pulled from the pool, but not assigned yet */
-                SET_FOREACH(a, l->pool_addresses) {
-                        if (a->family != p->family)
-                                continue;
-
-                        if (in_addr_prefix_intersect(p->family, u, prefixlen, &a->in_addr, a->prefixlen))
-                                return true;
-                }
         }
 
         /* And don't clash with configured but un-assigned addresses either */
@@ -164,12 +146,7 @@
                         return r;
 
                 if (!address_pool_prefix_is_taken(p, &u, prefixlen)) {
-                        if (DEBUG_LOGGING) {
-                                _cleanup_free_ char *s = NULL;
-
-                                (void) in_addr_prefix_to_string(p->family, &u, prefixlen, &s);
-                                log_debug("Found range %s", strna(s));
-                        }
+                        log_debug("Found range %s", IN_ADDR_PREFIX_TO_STRING(p->family, &u, prefixlen));
 
                         *found = u;
                         return 1;
diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
index 2f19a82..b8b9dc1 100644
--- a/src/network/networkd-address.c
+++ b/src/network/networkd-address.c
@@ -5,81 +5,58 @@
 
 #include "alloc-util.h"
 #include "firewall-util.h"
+#include "logarithm.h"
 #include "memory-util.h"
 #include "netlink-util.h"
 #include "networkd-address-pool.h"
 #include "networkd-address.h"
+#include "networkd-dhcp-server.h"
 #include "networkd-ipv4acd.h"
 #include "networkd-manager.h"
+#include "networkd-netlabel.h"
 #include "networkd-network.h"
 #include "networkd-queue.h"
+#include "networkd-route-util.h"
+#include "networkd-route.h"
 #include "parse-util.h"
 #include "string-util.h"
 #include "strv.h"
+#include "strxcpyx.h"
 
 #define ADDRESSES_PER_LINK_MAX 2048U
 #define STATIC_ADDRESSES_PER_NETWORK_MAX 1024U
 
-static int address_flags_to_string_alloc(uint32_t flags, int family, char **ret) {
+int address_flags_to_string_alloc(uint32_t flags, int family, char **ret) {
         _cleanup_free_ char *str = NULL;
-        static const struct {
-                uint32_t flag;
-                const char *name;
-        } map[] = {
-                { IFA_F_SECONDARY,      "secondary"                }, /* This is also called "temporary" for ipv6. */
-                { IFA_F_NODAD,          "nodad"                    },
-                { IFA_F_OPTIMISTIC,     "optimistic"               },
-                { IFA_F_DADFAILED,      "dadfailed"                },
-                { IFA_F_HOMEADDRESS,    "home-address"             },
-                { IFA_F_DEPRECATED,     "deprecated"               },
-                { IFA_F_TENTATIVE,      "tentative"                },
-                { IFA_F_PERMANENT,      "permanent"                },
-                { IFA_F_MANAGETEMPADDR, "manage-temporary-address" },
-                { IFA_F_NOPREFIXROUTE,  "no-prefixroute"           },
-                { IFA_F_MCAUTOJOIN,     "auto-join"                },
-                { IFA_F_STABLE_PRIVACY, "stable-privacy"           },
+        static const char* map[] = {
+                [LOG2U(IFA_F_SECONDARY)]      = "secondary", /* This is also called "temporary" for ipv6. */
+                [LOG2U(IFA_F_NODAD)]          = "nodad",
+                [LOG2U(IFA_F_OPTIMISTIC)]     = "optimistic",
+                [LOG2U(IFA_F_DADFAILED)]      = "dadfailed",
+                [LOG2U(IFA_F_HOMEADDRESS)]    = "home-address",
+                [LOG2U(IFA_F_DEPRECATED)]     = "deprecated",
+                [LOG2U(IFA_F_TENTATIVE)]      = "tentative",
+                [LOG2U(IFA_F_PERMANENT)]      = "permanent",
+                [LOG2U(IFA_F_MANAGETEMPADDR)] = "manage-temporary-address",
+                [LOG2U(IFA_F_NOPREFIXROUTE)]  = "no-prefixroute",
+                [LOG2U(IFA_F_MCAUTOJOIN)]     = "auto-join",
+                [LOG2U(IFA_F_STABLE_PRIVACY)] = "stable-privacy",
         };
 
         assert(IN_SET(family, AF_INET, AF_INET6));
         assert(ret);
 
         for (size_t i = 0; i < ELEMENTSOF(map); i++)
-                if (flags & map[i].flag &&
-                    !strextend_with_separator(
-                                &str, ",",
-                                map[i].flag == IFA_F_SECONDARY && family == AF_INET6 ? "temporary" : map[i].name))
-                        return -ENOMEM;
+                if (FLAGS_SET(flags, 1 << i) && map[i])
+                        if (!strextend_with_separator(
+                                            &str, ",",
+                                            family == AF_INET6 && (1 << i) == IFA_F_SECONDARY ? "temporary" : map[i]))
+                                return -ENOMEM;
 
         *ret = TAKE_PTR(str);
         return 0;
 }
 
-int generate_ipv6_eui_64_address(const Link *link, struct in6_addr *ret) {
-        assert(link);
-        assert(ret);
-
-        if (link->iftype == ARPHRD_INFINIBAND) {
-                /* see RFC4391 section 8 */
-                memcpy(&ret->s6_addr[8], &link->hw_addr.infiniband[12], 8);
-                ret->s6_addr[8] ^= 1 << 1;
-
-                return 0;
-        }
-
-        /* see RFC4291 section 2.5.1 */
-        ret->s6_addr[8]  = link->hw_addr.ether.ether_addr_octet[0];
-        ret->s6_addr[8] ^= 1 << 1;
-        ret->s6_addr[9]  = link->hw_addr.ether.ether_addr_octet[1];
-        ret->s6_addr[10] = link->hw_addr.ether.ether_addr_octet[2];
-        ret->s6_addr[11] = 0xff;
-        ret->s6_addr[12] = 0xfe;
-        ret->s6_addr[13] = link->hw_addr.ether.ether_addr_octet[3];
-        ret->s6_addr[14] = link->hw_addr.ether.ether_addr_octet[4];
-        ret->s6_addr[15] = link->hw_addr.ether.ether_addr_octet[5];
-
-        return 0;
-}
-
 int address_new(Address **ret) {
         _cleanup_(address_freep) Address *address = NULL;
 
@@ -90,8 +67,8 @@
         *address = (Address) {
                 .family = AF_UNSPEC,
                 .scope = RT_SCOPE_UNIVERSE,
-                .cinfo.ifa_prefered = CACHE_INFO_INFINITY_LIFE_TIME,
-                .cinfo.ifa_valid = CACHE_INFO_INFINITY_LIFE_TIME,
+                .lifetime_valid_usec = USEC_INFINITY,
+                .lifetime_preferred_usec = USEC_INFINITY,
                 .set_broadcast = -1,
         };
 
@@ -101,7 +78,7 @@
 }
 
 static int address_new_static(Network *network, const char *filename, unsigned section_line, Address **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(address_freep) Address *address = NULL;
         int r;
 
@@ -110,7 +87,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -129,11 +106,11 @@
 
         address->network = network;
         address->section = TAKE_PTR(n);
-        address->is_static = true;
+        address->source = NETWORK_CONFIG_SOURCE_STATIC;
         /* This will be adjusted in address_section_verify(). */
         address->duplicate_address_detection = _ADDRESS_FAMILY_INVALID;
 
-        r = ordered_hashmap_ensure_put(&network->addresses_by_section, &network_config_hash_ops, address->section, address);
+        r = ordered_hashmap_ensure_put(&network->addresses_by_section, &config_section_hash_ops, address->section, address);
         if (r < 0)
                 return r;
 
@@ -151,23 +128,7 @@
         }
 
         if (address->link) {
-                NDiscAddress *n;
-
                 set_remove(address->link->addresses, address);
-                set_remove(address->link->addresses_foreign, address);
-                set_remove(address->link->addresses_ipv4acd, address);
-                set_remove(address->link->static_addresses, address);
-                if (address->link->dhcp_address == address)
-                        address->link->dhcp_address = NULL;
-                if (address->link->dhcp_address_old == address)
-                        address->link->dhcp_address_old = NULL;
-                set_remove(address->link->dhcp6_addresses, address);
-                set_remove(address->link->dhcp6_addresses_old, address);
-                set_remove(address->link->dhcp6_pd_addresses, address);
-                set_remove(address->link->dhcp6_pd_addresses_old, address);
-                SET_FOREACH(n, address->link->ndisc_addresses)
-                        if (address_equal(n->address, address))
-                                free(set_remove(address->link->ndisc_addresses, n));
 
                 if (address->family == AF_INET6 &&
                     in6_addr_equal(&address->in_addr.in6, &address->link->ipv6ll_address))
@@ -176,14 +137,47 @@
 
         sd_ipv4acd_unref(address->acd);
 
-        network_config_section_free(address->section);
+        config_section_free(address->section);
         free(address->label);
+        free(address->netlabel);
         return mfree(address);
 }
 
-static bool address_may_have_broadcast(const Address *a) {
+bool address_is_ready(const Address *a) {
         assert(a);
 
+        if (!ipv4acd_bound(a))
+                return false;
+
+        if (FLAGS_SET(a->flags, IFA_F_TENTATIVE))
+                return false;
+
+        if (FLAGS_SET(a->state, NETWORK_CONFIG_STATE_REMOVING))
+                return false;
+
+        if (!FLAGS_SET(a->state, NETWORK_CONFIG_STATE_CONFIGURED))
+                return false;
+
+        return true;
+}
+
+void link_mark_addresses(Link *link, NetworkConfigSource source) {
+        Address *a;
+
+        assert(link);
+
+        SET_FOREACH(a, link->addresses) {
+                if (a->source != source)
+                        continue;
+
+                address_mark(a);
+        }
+}
+
+static bool address_needs_to_set_broadcast(const Address *a, Link *link) {
+        assert(a);
+        assert(link);
+
         if (a->family != AF_INET)
                 return false;
 
@@ -195,38 +189,54 @@
         if (a->prefixlen > 30)
                 return false;
 
+        /* If explicitly configured, do not update the address. */
+        if (in4_addr_is_set(&a->broadcast))
+                return false;
+
         if (a->set_broadcast >= 0)
                 return a->set_broadcast;
 
-        return true; /* Defaults to true. */
+        /* Defaults to true, except for wireguard, as typical configuration for wireguard does not set
+         * broadcast. */
+        return !streq_ptr(link->kind, "wireguard");
 }
 
-void address_set_broadcast(Address *a) {
+void address_set_broadcast(Address *a, Link *link) {
         assert(a);
+        assert(link);
 
-        if (!address_may_have_broadcast(a))
-                return;
-
-        /* If explicitly configured, do not update the address. */
-        if (in4_addr_is_set(&a->broadcast))
-                return;
-
-        /* If Address= is 0.0.0.0, then the broadcast address will be set later in address_acquire(). */
-        if (in4_addr_is_null(&a->in_addr.in))
+        if (!address_needs_to_set_broadcast(a, link))
                 return;
 
         a->broadcast.s_addr = a->in_addr.in.s_addr | htobe32(UINT32_C(0xffffffff) >> a->prefixlen);
 }
 
-static bool address_may_set_broadcast(const Address *a, const Link *link) {
+static void address_set_cinfo(Manager *m, const Address *a, struct ifa_cacheinfo *cinfo) {
+        usec_t now_usec;
+
+        assert(m);
         assert(a);
-        assert(link);
+        assert(cinfo);
 
-        if (!address_may_have_broadcast(a))
-                return false;
+        assert_se(sd_event_now(m->event, CLOCK_BOOTTIME, &now_usec) >= 0);
 
-        /* Typical configuration for wireguard does not set broadcast. */
-        return !streq_ptr(link->kind, "wireguard");
+        *cinfo = (struct ifa_cacheinfo) {
+                .ifa_valid = usec_to_sec(a->lifetime_valid_usec, now_usec),
+                .ifa_prefered = usec_to_sec(a->lifetime_preferred_usec, now_usec),
+        };
+}
+
+static void address_set_lifetime(Manager *m, Address *a, const struct ifa_cacheinfo *cinfo) {
+        usec_t now_usec;
+
+        assert(m);
+        assert(a);
+        assert(cinfo);
+
+        assert_se(sd_event_now(m->event, CLOCK_BOOTTIME, &now_usec) >= 0);
+
+        a->lifetime_valid_usec = sec_to_usec(cinfo->ifa_valid, now_usec);
+        a->lifetime_preferred_usec = sec_to_usec(cinfo->ifa_prefered, now_usec);
 }
 
 static uint32_t address_prefix(const Address *a) {
@@ -243,7 +253,7 @@
                 return be32toh(a->in_addr.in.s_addr) >> (32 - a->prefixlen);
 }
 
-void address_hash_func(const Address *a, struct siphash *state) {
+static void address_kernel_hash_func(const Address *a, struct siphash *state) {
         assert(a);
 
         siphash24_compress(&a->family, sizeof(a->family), state);
@@ -265,7 +275,7 @@
         }
 }
 
-int address_compare_func(const Address *a1, const Address *a2) {
+static int address_kernel_compare_func(const Address *a1, const Address *a2) {
         int r;
 
         r = CMP(a1->family, a2->family);
@@ -293,9 +303,79 @@
         }
 }
 
-DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(address_hash_ops, Address, address_hash_func, address_compare_func, address_free);
+DEFINE_PRIVATE_HASH_OPS(
+        address_kernel_hash_ops,
+        Address,
+        address_kernel_hash_func,
+        address_kernel_compare_func);
 
-bool address_equal(const Address *a1, const Address *a2) {
+DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+        address_kernel_hash_ops_free,
+        Address,
+        address_kernel_hash_func,
+        address_kernel_compare_func,
+        address_free);
+
+/* The functions below are mainly used by managing Request. */
+static void address_hash_func(const Address *a, struct siphash *state) {
+        assert(a);
+
+        siphash24_compress(&a->family, sizeof(a->family), state);
+
+        /* treat any other address family as AF_UNSPEC */
+        if (!IN_SET(a->family, AF_INET, AF_INET6))
+                return;
+
+        siphash24_compress(&a->prefixlen, sizeof(a->prefixlen), state);
+        siphash24_compress(&a->in_addr, FAMILY_ADDRESS_SIZE(a->family), state);
+        siphash24_compress(&a->in_addr_peer, FAMILY_ADDRESS_SIZE(a->family), state);
+
+        if (a->family == AF_INET) {
+                /* On update, the kernel ignores the address label and broadcast address, hence we need
+                 * to distinguish addresses with different labels or broadcast addresses. Otherwise,
+                 * the label or broadcast address change will not be applied when we reconfigure the
+                 * interface. */
+                siphash24_compress_string(a->label, state);
+                siphash24_compress(&a->broadcast, sizeof(a->broadcast), state);
+        }
+}
+
+int address_compare_func(const Address *a1, const Address *a2) {
+        int r;
+
+        r = CMP(a1->family, a2->family);
+        if (r != 0)
+                return r;
+
+        if (!IN_SET(a1->family, AF_INET, AF_INET6))
+                return 0;
+
+        r = CMP(a1->prefixlen, a2->prefixlen);
+        if (r != 0)
+                return r;
+
+        r = memcmp(&a1->in_addr, &a2->in_addr, FAMILY_ADDRESS_SIZE(a1->family));
+        if (r != 0)
+                return r;
+
+        r = memcmp(&a1->in_addr_peer, &a2->in_addr_peer, FAMILY_ADDRESS_SIZE(a1->family));
+        if (r != 0)
+                return r;
+
+        if (a1->family == AF_INET) {
+                r = strcmp_ptr(a1->label, a2->label);
+                if (r != 0)
+                        return r;
+
+                r = CMP(a1->broadcast.s_addr, a2->broadcast.s_addr);
+                if (r != 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+int address_equal(const Address *a1, const Address *a2) {
         if (a1 == a2)
                 return true;
 
@@ -305,6 +385,28 @@
         return address_compare_func(a1, a2) == 0;
 }
 
+static int address_equalify(Address *address, const Address *src) {
+        int r;
+
+        assert(address);
+        assert(src);
+
+        if (address_kernel_compare_func(address, src) != 0)
+                return -EINVAL;
+
+        if (address->family == AF_INET) {
+                address->broadcast = src->broadcast;
+                r = free_and_strdup(&address->label, src->label);
+                if (r < 0)
+                        return r;
+        } else {
+                address->prefixlen = src->prefixlen;
+                address->in_addr_peer = src->in_addr_peer;
+        }
+
+        return 0;
+}
+
 int address_dup(const Address *src, Address **ret) {
         _cleanup_(address_freep) Address *dest = NULL;
         int r;
@@ -322,6 +424,7 @@
         dest->link = NULL;
         dest->label = NULL;
         dest->acd = NULL;
+        dest->netlabel = NULL;
 
         if (src->family == AF_INET) {
                 r = free_and_strdup(&dest->label, src->label);
@@ -329,6 +432,10 @@
                         return r;
         }
 
+        r = free_and_strdup(&dest->netlabel, src->netlabel);
+        if (r < 0)
+                return r;
+
         *ret = TAKE_PTR(dest);
         return 0;
 }
@@ -371,132 +478,73 @@
         return 0;
 }
 
-static int address_add_internal(Link *link, Set **addresses, const Address *in, Address **ret) {
-        _cleanup_(address_freep) Address *address = NULL;
+static int address_add(Link *link, Address *address) {
         int r;
 
         assert(link);
-        assert(addresses);
-        assert(in);
+        assert(address);
 
-        r = address_dup(in, &address);
-        if (r < 0)
-                return r;
-
-        /* Consider address tentative until we get the real flags from the kernel */
-        address->flags |= IFA_F_TENTATIVE;
-
-        r = set_ensure_put(addresses, &address_hash_ops, address);
+        r = set_ensure_put(&link->addresses, &address_kernel_hash_ops_free, address);
         if (r < 0)
                 return r;
         if (r == 0)
                 return -EEXIST;
 
         address->link = link;
-
-        if (ret)
-                *ret = address;
-        TAKE_PTR(address);
         return 0;
 }
 
-static int address_add_foreign(Link *link, const Address *in, Address **ret) {
-        return address_add_internal(link, &link->addresses_foreign, in, ret);
-}
-
-static int address_add(Link *link, const Address *in, Address **ret) {
-        Address *address;
+static int address_update(Address *address) {
+        Link *link = ASSERT_PTR(ASSERT_PTR(address)->link);
         int r;
 
-        assert(link);
-        assert(in);
+        if (address_is_ready(address) &&
+            address->family == AF_INET6 &&
+            in6_addr_is_link_local(&address->in_addr.in6) &&
+            in6_addr_is_null(&link->ipv6ll_address)) {
 
-        r = address_get(link, in, &address);
-        if (r == -ENOENT) {
-                /* Address does not exist, create a new one */
-                r = address_add_internal(link, &link->addresses, in, &address);
+                link->ipv6ll_address = address->in_addr.in6;
+
+                r = link_ipv6ll_gained(link);
                 if (r < 0)
                         return r;
-        } else if (r == 0) {
-                /* Take over a foreign address */
-                r = set_ensure_put(&link->addresses, &address_hash_ops, address);
-                if (r < 0)
-                        return r;
-
-                set_remove(link->addresses_foreign, address);
-        } else if (r == 1) {
-                /* Already exists, do nothing */
-                ;
-        } else
-                return r;
-
-        if (ret)
-                *ret = address;
-        return 0;
-}
-
-static int address_update(Address *address, const Address *src) {
-        bool ready;
-        int r;
-
-        assert(address);
-        assert(address->link);
-        assert(src);
-
-        ready = address_is_ready(address);
-
-        address->flags = src->flags;
-        address->scope = src->scope;
-        address->cinfo = src->cinfo;
-
-        if (IN_SET(address->link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 0;
-
-        link_update_operstate(address->link, true);
-        link_check_ready(address->link);
-
-        if (!ready && address_is_ready(address)) {
-                if (address->callback) {
-                        r = address->callback(address);
-                        if (r < 0)
-                                return r;
-                }
-
-                if (address->family == AF_INET6 &&
-                    in6_addr_is_link_local(&address->in_addr.in6) > 0 &&
-                    in6_addr_is_null(&address->link->ipv6ll_address)) {
-
-                        r = link_ipv6ll_gained(address->link, &address->in_addr.in6);
-                        if (r < 0)
-                                return r;
-                }
         }
 
+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 0;
+
+        r = address_set_masquerade(address, /* add = */ true);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Could not enable IP masquerading: %m");
+
+        address_add_netlabel(address);
+
+        if (address_is_ready(address) && address->callback) {
+                r = address->callback(address);
+                if (r < 0)
+                        return r;
+        }
+
+        link_update_operstate(link, /* also_update_master = */ true);
+        link_check_ready(link);
         return 0;
 }
 
 static int address_drop(Address *address) {
-        Link *link;
-        bool ready;
+        Link *link = ASSERT_PTR(ASSERT_PTR(address)->link);
         int r;
 
-        if (!address)
-                return 0;
-
-        ready = address_is_ready(address);
-        link = address->link;
-
-        r = address_set_masquerade(address, false);
+        r = address_set_masquerade(address, /* add = */ false);
         if (r < 0)
                 log_link_warning_errno(link, r, "Failed to disable IP masquerading, ignoring: %m");
 
-        address_free(address);
+        address_del_netlabel(address);
 
-        link_update_operstate(link, true);
+        if (address->state == 0)
+                address_free(address);
 
-        if (link && !ready)
-                link_check_ready(link);
-
+        link_update_operstate(link, /* also_update_master = */ true);
+        link_check_ready(link);
         return 0;
 }
 
@@ -507,51 +555,66 @@
         assert(in);
 
         existing = set_get(link->addresses, in);
-        if (existing) {
-                if (ret)
-                        *ret = existing;
-                return 1;
-        }
+        if (!existing)
+                return -ENOENT;
 
-        existing = set_get(link->addresses_foreign, in);
-        if (existing) {
-                if (ret)
-                        *ret = existing;
-                return 0;
-        }
-
-        return -ENOENT;
+        if (ret)
+                *ret = existing;
+        return 0;
 }
 
-int link_get_ipv6_address(Link *link, const struct in6_addr *address, Address **ret) {
-        _cleanup_(address_freep) Address *a = NULL;
+int link_get_address(Link *link, int family, const union in_addr_union *address, unsigned char prefixlen, Address **ret) {
+        Address *a;
         int r;
 
         assert(link);
+        assert(IN_SET(family, AF_INET, AF_INET6));
         assert(address);
 
-        r = address_new(&a);
-        if (r < 0)
-                return r;
+        /* This find an Address object on the link which matches the given address and prefix length
+         * and does not have peer address. When the prefixlen is zero, then an Address object with an
+         * arbitrary prefixlen will be returned. */
 
-        /* address_compare_func() only compares the local address for IPv6 case. So, it is enough to
-         * set only family and the address. */
-        a->family = AF_INET6;
-        a->in_addr.in6 = *address;
+        if (family == AF_INET6 || prefixlen != 0) {
+                _cleanup_(address_freep) Address *tmp = NULL;
 
-        return address_get(link, a, ret);
-}
+                /* In this case, we can use address_get(). */
 
-static int addresses_get_ipv4_address(Set *addresses, const struct in_addr *address, Address **ret) {
-        Address *a;
+                r = address_new(&tmp);
+                if (r < 0)
+                        return r;
 
-        assert(address);
+                tmp->family = family;
+                tmp->in_addr = *address;
+                tmp->prefixlen = prefixlen;
 
-        SET_FOREACH(a, addresses) {
-                if (a->family != AF_INET)
+                r = address_get(link, tmp, &a);
+                if (r < 0)
+                        return r;
+
+                if (family == AF_INET6) {
+                        /* IPv6 addresses are managed without peer address and prefix length. Hence, we need
+                         * to check them explicitly. */
+                        if (in_addr_is_set(family, &a->in_addr_peer))
+                                return -ENOENT;
+                        if (prefixlen != 0 && a->prefixlen != prefixlen)
+                                return -ENOENT;
+                }
+
+                if (ret)
+                        *ret = a;
+
+                return 0;
+        }
+
+        SET_FOREACH(a, link->addresses) {
+                if (a->family != family)
                         continue;
 
-                if (!in4_addr_equal(&a->in_addr.in, address))
+                if (!in_addr_equal(family, &a->in_addr, address))
+                        continue;
+
+                if (in_addr_is_set(family, &a->in_addr_peer))
                         continue;
 
                 if (ret)
@@ -563,69 +626,52 @@
         return -ENOENT;
 }
 
-int link_get_ipv4_address(Link *link, const struct in_addr *address, unsigned char prefixlen, Address **ret) {
-        int r;
-
-        assert(link);
-        assert(address);
-
-        if (prefixlen != 0) {
-                _cleanup_(address_freep) Address *a = NULL;
-
-                /* If prefixlen is set, then we can use address_get(). */
-
-                r = address_new(&a);
-                if (r < 0)
-                        return r;
-
-                a->family = AF_INET;
-                a->in_addr.in = *address;
-                a->prefixlen = prefixlen;
-
-                return address_get(link, a, ret);
-        }
-
-        if (addresses_get_ipv4_address(link->addresses, address, ret) >= 0)
-                return 0;
-        return addresses_get_ipv4_address(link->addresses_foreign, address, ret);
-}
-
-int manager_has_address(Manager *manager, int family, const union in_addr_union *address, bool check_ready) {
-        Address *a;
+int manager_get_address(Manager *manager, int family, const union in_addr_union *address, unsigned char prefixlen, Address **ret) {
         Link *link;
-        int r;
 
         assert(manager);
         assert(IN_SET(family, AF_INET, AF_INET6));
         assert(address);
 
-        if (family == AF_INET) {
-                HASHMAP_FOREACH(link, manager->links_by_index)
-                        if (link_get_ipv4_address(link, &address->in, 0, &a) >= 0)
-                                return !check_ready || address_is_ready(a);
-        } else {
-                _cleanup_(address_freep) Address *tmp = NULL;
+        HASHMAP_FOREACH(link, manager->links_by_index) {
+                if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                        continue;
 
-                r = address_new(&tmp);
-                if (r < 0)
-                        return r;
-
-                tmp->family = family;
-                tmp->in_addr = *address;
-
-                HASHMAP_FOREACH(link, manager->links_by_index)
-                        if (address_get(link, tmp, &a) >= 0)
-                                return !check_ready || address_is_ready(a);
+                if (link_get_address(link, family, address, prefixlen, ret) >= 0)
+                        return 0;
         }
 
-        return false;
+        return -ENOENT;
+}
+
+bool manager_has_address(Manager *manager, int family, const union in_addr_union *address, bool check_ready) {
+        Address *a;
+
+        assert(manager);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(address);
+
+        if (manager_get_address(manager, family, address, 0, &a) < 0)
+                return false;
+
+        return check_ready ? address_is_ready(a) : address_exists(a);
+}
+
+const char* format_lifetime(char *buf, size_t l, usec_t lifetime_usec) {
+        assert(buf);
+        assert(l > 4);
+
+        if (lifetime_usec == USEC_INFINITY)
+                return "forever";
+
+        sprintf(buf, "for ");
+        /* format_timespan() never fails */
+        assert_se(format_timespan(buf + 4, l - 4, usec_sub_unsigned(lifetime_usec, now(CLOCK_BOOTTIME)), USEC_PER_SEC));
+        return buf;
 }
 
 static void log_address_debug(const Address *address, const char *str, const Link *link) {
-        _cleanup_free_ char *addr = NULL, *peer = NULL, *flags_str = NULL;
-        char valid_buf[FORMAT_TIMESPAN_MAX], preferred_buf[FORMAT_TIMESPAN_MAX];
-        const char *valid_str = NULL, *preferred_str = NULL;
-        bool has_peer;
+        _cleanup_free_ char *state = NULL, *flags_str = NULL, *scope_str = NULL;
 
         assert(address);
         assert(str);
@@ -634,61 +680,53 @@
         if (!DEBUG_LOGGING)
                 return;
 
-        (void) in_addr_to_string(address->family, &address->in_addr, &addr);
-        has_peer = in_addr_is_set(address->family, &address->in_addr_peer);
-        if (has_peer)
-                (void) in_addr_to_string(address->family, &address->in_addr_peer, &peer);
+        (void) network_config_state_to_string_alloc(address->state, &state);
 
-        if (address->cinfo.ifa_valid != CACHE_INFO_INFINITY_LIFE_TIME)
-                valid_str = format_timespan(valid_buf, FORMAT_TIMESPAN_MAX,
-                                            address->cinfo.ifa_valid * USEC_PER_SEC,
-                                            USEC_PER_SEC);
-
-        if (address->cinfo.ifa_prefered != CACHE_INFO_INFINITY_LIFE_TIME)
-                preferred_str = format_timespan(preferred_buf, FORMAT_TIMESPAN_MAX,
-                                                address->cinfo.ifa_prefered * USEC_PER_SEC,
-                                                USEC_PER_SEC);
+        const char *peer = in_addr_is_set(address->family, &address->in_addr_peer) ?
+                IN_ADDR_TO_STRING(address->family, &address->in_addr_peer) : NULL;
 
         (void) address_flags_to_string_alloc(address->flags, address->family, &flags_str);
+        (void) route_scope_to_string_alloc(address->scope, &scope_str);
 
-        log_link_debug(link, "%s address: %s%s%s/%u (valid %s%s, preferred %s%s), flags: %s",
-                       str, strnull(addr), has_peer ? " peer " : "",
-                       has_peer ? strnull(peer) : "", address->prefixlen,
-                       valid_str ? "for " : "forever", strempty(valid_str),
-                       preferred_str ? "for " : "forever", strempty(preferred_str),
-                       strna(flags_str));
+        log_link_debug(link, "%s %s address (%s): %s%s%s/%u (valid %s, preferred %s), flags: %s, scope: %s",
+                       str, strna(network_config_source_to_string(address->source)), strna(state),
+                       IN_ADDR_TO_STRING(address->family, &address->in_addr),
+                       peer ? " peer " : "", strempty(peer), address->prefixlen,
+                       FORMAT_LIFETIME(address->lifetime_valid_usec),
+                       FORMAT_LIFETIME(address->lifetime_preferred_usec),
+                       strna(flags_str), strna(scope_str));
 }
 
-static int address_set_netlink_message(const Address *address, sd_netlink_message *req, Link *link) {
+static int address_set_netlink_message(const Address *address, sd_netlink_message *m, Link *link) {
         uint32_t flags;
         int r;
 
         assert(address);
-        assert(req);
+        assert(m);
         assert(link);
 
-        r = sd_rtnl_message_addr_set_prefixlen(req, address->prefixlen);
+        r = sd_rtnl_message_addr_set_prefixlen(m, address->prefixlen);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set prefixlen: %m");
+                return r;
 
         /* On remove, only IFA_F_MANAGETEMPADDR flag for IPv6 addresses are used. But anyway, set all
          * flags except tentative flag here unconditionally. Without setting the flag, the template
          * addresses generated by kernel will not be removed automatically when the main address is
          * removed. */
         flags = address->flags & ~IFA_F_TENTATIVE;
-        r = sd_rtnl_message_addr_set_flags(req, flags & 0xff);
+        r = sd_rtnl_message_addr_set_flags(m, flags & 0xff);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set flags: %m");
+                return r;
 
         if ((flags & ~0xff) != 0) {
-                r = sd_netlink_message_append_u32(req, IFA_FLAGS, flags);
+                r = sd_netlink_message_append_u32(m, IFA_FLAGS, flags);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set extended flags: %m");
+                        return r;
         }
 
-        r = netlink_message_append_in_addr_union(req, IFA_LOCAL, address->family, &address->in_addr);
+        r = netlink_message_append_in_addr_union(m, IFA_LOCAL, address->family, &address->in_addr);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append IFA_LOCAL attribute: %m");
+                return r;
 
         return 0;
 }
@@ -696,12 +734,8 @@
 static int address_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
         int r;
 
-        assert(rtnl);
         assert(m);
         assert(link);
-        assert(link->address_remove_messages > 0);
-
-        link->address_remove_messages--;
 
         if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
                 return 0;
@@ -713,54 +747,57 @@
         return 1;
 }
 
-int address_remove(const Address *address, Link *link) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+int address_remove(Address *address) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        Link *link;
         int r;
 
         assert(address);
         assert(IN_SET(address->family, AF_INET, AF_INET6));
-        assert(link);
-        assert(link->ifindex > 0);
-        assert(link->manager);
-        assert(link->manager->rtnl);
+        assert(address->link);
+        assert(address->link->ifindex > 0);
+        assert(address->link->manager);
+        assert(address->link->manager->rtnl);
+
+        link = address->link;
 
         log_address_debug(address, "Removing", link);
 
-        r = sd_rtnl_message_new_addr(link->manager->rtnl, &req, RTM_DELADDR,
+        r = sd_rtnl_message_new_addr(link->manager->rtnl, &m, RTM_DELADDR,
                                      link->ifindex, address->family);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not allocate RTM_DELADDR message: %m");
+                return log_link_warning_errno(link, r, "Could not allocate RTM_DELADDR message: %m");
 
-        r = address_set_netlink_message(address, req, link);
+        r = address_set_netlink_message(address, m, link);
         if (r < 0)
-                return r;
+                return log_link_warning_errno(link, r, "Could not set netlink attributes: %m");
 
-        r = netlink_call_async(link->manager->rtnl, NULL, req,
+        r = netlink_call_async(link->manager->rtnl, NULL, m,
                                address_remove_handler,
                                link_netlink_destroy_callback, link);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
+                return log_link_warning_errno(link, r, "Could not send rtnetlink message: %m");
 
         link_ref(link);
-        link->address_remove_messages++;
 
+        address_enter_removing(address);
+
+        /* The operational state is determined by address state and carrier state. Hence, if we remove
+         * an address, the operational state may be changed. */
+        link_update_operstate(link, true);
         return 0;
 }
 
-static bool link_is_static_address_configured(const Link *link, const Address *address) {
-        Address *net_address;
+int address_remove_and_drop(Address *address) {
+        if (!address)
+                return 0;
 
-        assert(link);
-        assert(address);
+        address_cancel_request(address);
 
-        if (!link->network)
-                return false;
+        if (address_exists(address))
+                return address_remove(address);
 
-        ORDERED_HASHMAP_FOREACH(net_address, link->network->addresses_by_section)
-                if (address_equal(net_address, address))
-                        return true;
-
-        return false;
+        return address_drop(address);
 }
 
 bool link_address_is_dynamic(const Link *link, const Address *address) {
@@ -769,13 +806,20 @@
         assert(link);
         assert(address);
 
-        if (address->cinfo.ifa_prefered != CACHE_INFO_INFINITY_LIFE_TIME)
+        if (address->lifetime_preferred_usec != USEC_INFINITY)
                 return true;
 
         /* Even when the address is leased from a DHCP server, networkd assign the address
          * without lifetime when KeepConfiguration=dhcp. So, let's check that we have
          * corresponding routes with RTPROT_DHCP. */
-        SET_FOREACH(route, link->routes_foreign) {
+        SET_FOREACH(route, link->routes) {
+                if (route->source != NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
+
+                /* The route is not assigned yet, or already removed. Ignoring. */
+                if (!route_exists(route))
+                        continue;
+
                 if (route->protocol != RTPROT_DHCP)
                         continue;
 
@@ -800,14 +844,14 @@
         /* IPv6LL address may be in the tentative state, and in that case networkd has not received it.
          * So, we need to dump all IPv6 addresses. */
 
-        if (link_ipv6ll_enabled(link))
+        if (link_may_have_ipv6ll(link, /* check_multicast = */ false))
                 return 0;
 
         r = sd_rtnl_message_new_addr(link->manager->rtnl, &req, RTM_GETADDR, link->ifindex, AF_INET6);
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
@@ -819,6 +863,7 @@
                 _cleanup_(address_freep) Address *a = NULL;
                 unsigned char flags, prefixlen;
                 struct in6_addr address;
+                Address *existing;
                 int ifindex;
 
                 /* NETLINK_GET_STRICT_CHK socket option is supported since kernel 4.20. To support
@@ -864,7 +909,15 @@
                 a->prefixlen = prefixlen;
                 a->flags = flags;
 
-                r = address_remove(a, link);
+                if (address_get(link, a, &existing) < 0) {
+                        r = address_add(link, a);
+                        if (r < 0)
+                                return r;
+
+                        existing = TAKE_PTR(a);
+                }
+
+                r = address_remove(existing);
                 if (r < 0)
                         return r;
         }
@@ -877,63 +930,96 @@
         int k, r = 0;
 
         assert(link);
+        assert(link->network);
 
-        SET_FOREACH(address, link->addresses_foreign) {
+        /* First, mark all addresses. */
+        SET_FOREACH(address, link->addresses) {
                 /* We consider IPv6LL addresses to be managed by the kernel, or dropped in link_drop_ipv6ll_addresses() */
-                if (address->family == AF_INET6 && in6_addr_is_link_local(&address->in_addr.in6) == 1)
+                if (address->family == AF_INET6 && in6_addr_is_link_local(&address->in_addr.in6))
                         continue;
 
-                if (link_address_is_dynamic(link, address)) {
-                        if (link->network && FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP))
-                                continue;
-                } else if (link->network && FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_STATIC))
+                /* Do not remove localhost address (127.0.0.1 and ::1) */
+                if (link->flags & IFF_LOOPBACK && in_addr_is_localhost_one(address->family, &address->in_addr) > 0)
                         continue;
 
-                if (link_is_static_address_configured(link, address)) {
-                        k = address_add(link, address, NULL);
-                        if (k < 0) {
-                                log_link_error_errno(link, k, "Failed to add address: %m");
-                                if (r >= 0)
-                                        r = k;
-                        }
-                } else {
-                        k = address_remove(address, link);
-                        if (k < 0 && r >= 0)
-                                r = k;
-                }
+                /* Ignore addresses we configured. */
+                if (address->source != NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
+
+                /* Ignore addresses not assigned yet or already removing. */
+                if (!address_exists(address))
+                        continue;
+
+                /* link_address_is_dynamic() is slightly heavy. Let's call the function only when KeepConfiguration= is set. */
+                if (IN_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP, KEEP_CONFIGURATION_STATIC) &&
+                    link_address_is_dynamic(link, address) == (link->network->keep_configuration == KEEP_CONFIGURATION_DHCP))
+                        continue;
+
+                address_mark(address);
+        }
+
+        /* Then, unmark requested addresses. */
+        ORDERED_HASHMAP_FOREACH(address, link->network->addresses_by_section) {
+                Address *existing;
+
+                /* On update, the kernel ignores the address label and broadcast address. Hence we need to
+                 * distinguish addresses with different labels or broadcast addresses. Thus, we need to check
+                 * the existing address with address_equal(). Otherwise, the label or broadcast address
+                 * change will not be applied when we reconfigure the interface. */
+                if (address_get(link, address, &existing) >= 0 && address_equal(address, existing))
+                        address_unmark(existing);
+        }
+
+        /* Finally, remove all marked addresses. */
+        SET_FOREACH(address, link->addresses) {
+                if (!address_is_marked(address))
+                        continue;
+
+                k = address_remove(address);
+                if (k < 0 && r >= 0)
+                        r = k;
         }
 
         return r;
 }
 
-int link_drop_addresses(Link *link) {
-        Address *address, *pool_address;
+int link_drop_managed_addresses(Link *link) {
+        Address *address;
         int k, r = 0;
 
         assert(link);
 
         SET_FOREACH(address, link->addresses) {
-                /* we consider IPv6LL addresses to be managed by the kernel */
-                if (address->family == AF_INET6 && in6_addr_is_link_local(&address->in_addr.in6) == 1 && link_ipv6ll_enabled(link))
+                /* Do not touch addresses managed by kernel or other tools. */
+                if (address->source == NETWORK_CONFIG_SOURCE_FOREIGN)
                         continue;
 
-                k = address_remove(address, link);
+                /* Ignore addresses not assigned yet or already removing. */
+                if (!address_exists(address))
+                        continue;
+
+                k = address_remove(address);
                 if (k < 0 && r >= 0) {
                         r = k;
                         continue;
                 }
-
-                SET_FOREACH(pool_address, link->pool_addresses)
-                        if (address_equal(address, pool_address))
-                                address_free(set_remove(link->pool_addresses, pool_address));
         }
 
         return r;
 }
 
+void link_foreignize_addresses(Link *link) {
+        Address *address;
+
+        assert(link);
+
+        SET_FOREACH(address, link->addresses)
+                address->source = NETWORK_CONFIG_SOURCE_FOREIGN;
+}
+
 static int address_acquire(Link *link, const Address *original, Address **ret) {
-        union in_addr_union in_addr = IN_ADDR_NULL;
         _cleanup_(address_freep) Address *na = NULL;
+        union in_addr_union in_addr;
         int r;
 
         assert(link);
@@ -965,13 +1051,6 @@
                 return r;
 
         na->in_addr = in_addr;
-        address_set_broadcast(na);
-
-        r = set_ensure_put(&link->pool_addresses, &address_hash_ops, na);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                return -EEXIST;
 
         *ret = TAKE_PTR(na);
         return 1;
@@ -985,9 +1064,6 @@
         assert(link);
         assert(error_msg);
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 0;
-
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
                 log_link_message_warning_errno(link, m, r, error_msg);
@@ -998,76 +1074,213 @@
         return 1;
 }
 
-static int address_configure(
-                const Address *address,
-                Link *link,
-                link_netlink_message_handler_t callback) {
-
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int address_configure(const Address *address, const struct ifa_cacheinfo *c, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(address);
         assert(IN_SET(address->family, AF_INET, AF_INET6));
+        assert(c);
         assert(link);
         assert(link->ifindex > 0);
         assert(link->manager);
         assert(link->manager->rtnl);
-        assert(callback);
+        assert(req);
 
         log_address_debug(address, "Configuring", link);
 
-        r = sd_rtnl_message_new_addr_update(link->manager->rtnl, &req,
-                                            link->ifindex, address->family);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not allocate RTM_NEWADDR message: %m");
-
-        r = address_set_netlink_message(address, req, link);
+        r = sd_rtnl_message_new_addr_update(link->manager->rtnl, &m, link->ifindex, address->family);
         if (r < 0)
                 return r;
 
-        r = sd_rtnl_message_addr_set_scope(req, address->scope);
+        r = address_set_netlink_message(address, m, link);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set scope: %m");
+                return r;
+
+        r = sd_rtnl_message_addr_set_scope(m, address->scope);
+        if (r < 0)
+                return r;
 
         if (in_addr_is_set(address->family, &address->in_addr_peer)) {
-                r = netlink_message_append_in_addr_union(req, IFA_ADDRESS, address->family, &address->in_addr_peer);
+                r = netlink_message_append_in_addr_union(m, IFA_ADDRESS, address->family, &address->in_addr_peer);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFA_ADDRESS attribute: %m");
-        } else if (address_may_set_broadcast(address, link)) {
-                r = sd_netlink_message_append_in_addr(req, IFA_BROADCAST, &address->broadcast);
+                        return r;
+        } else if (in4_addr_is_set(&address->broadcast)) {
+                r = sd_netlink_message_append_in_addr(m, IFA_BROADCAST, &address->broadcast);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFA_BROADCAST attribute: %m");
+                        return r;
         }
 
         if (address->family == AF_INET && address->label) {
-                r = sd_netlink_message_append_string(req, IFA_LABEL, address->label);
+                r = sd_netlink_message_append_string(m, IFA_LABEL, address->label);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFA_LABEL attribute: %m");
+                        return r;
         }
 
-        r = sd_netlink_message_append_cache_info(req, IFA_CACHEINFO, &address->cinfo);
+        r = sd_netlink_message_append_cache_info(m, IFA_CACHEINFO, c);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append IFA_CACHEINFO attribute: %m");
+                return r;
 
-        r = sd_netlink_message_append_u32(req, IFA_RT_PRIORITY, address->route_metric);
+        r = sd_netlink_message_append_u32(m, IFA_RT_PRIORITY, address->route_metric);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append IFA_RT_PRIORITY attribute: %m");
+                return r;
 
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback, link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-        return 0;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-static int static_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static bool address_is_ready_to_configure(Link *link, const Address *address) {
+        assert(link);
+        assert(address);
+
+        if (!link_is_ready_to_configure(link, false))
+                return false;
+
+        if (!ipv4acd_bound(address))
+                return false;
+
+        /* Refuse adding more than the limit */
+        if (set_size(link->addresses) >= ADDRESSES_PER_LINK_MAX)
+                return false;
+
+        return true;
+}
+
+static int address_process_request(Request *req, Link *link, Address *address) {
+        struct ifa_cacheinfo c;
+        int r;
+
+        assert(req);
+        assert(link);
+        assert(address);
+
+        if (!address_is_ready_to_configure(link, address))
+                return 0;
+
+        address_set_cinfo(link->manager, address, &c);
+        if (c.ifa_valid == 0) {
+                log_link_debug(link, "Refuse to configure %s address %s, as its valid lifetime is zero.",
+                               network_config_source_to_string(address->source),
+                               IN_ADDR_PREFIX_TO_STRING(address->family, &address->in_addr, address->prefixlen));
+                address_cancel_requesting(address);
+                return 1;
+        }
+
+        r = address_configure(address, &c, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure address: %m");
+
+        address_enter_configuring(address);
+        return 1;
+}
+
+int link_request_address(
+                Link *link,
+                Address *address,
+                bool consume_object,
+                unsigned *message_counter,
+                address_netlink_handler_t netlink_handler,
+                Request **ret) {
+
+        Address *acquired, *existing = NULL;
         int r;
 
         assert(link);
-        assert(link->static_address_messages > 0);
+        assert(address);
+        assert(address->source != NETWORK_CONFIG_SOURCE_FOREIGN);
 
-        link->static_address_messages--;
+        r = address_acquire(link, address, &acquired);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to acquire an address from pool: %m");
+        if (r > 0) {
+                if (consume_object)
+                        address_free(address);
+
+                address = acquired;
+                consume_object = true;
+        }
+
+        if (address_needs_to_set_broadcast(address, link)) {
+                if (!consume_object) {
+                        Address *a;
+
+                        r = address_dup(address, &a);
+                        if (r < 0)
+                                return r;
+
+                        address = a;
+                        consume_object = true;
+                }
+
+                address_set_broadcast(address, link);
+        }
+
+        (void) address_get(link, address, &existing);
+
+        if (address->lifetime_valid_usec == 0) {
+                if (consume_object)
+                        address_free(address);
+
+                /* The requested address is outdated. Let's remove it. */
+                return address_remove_and_drop(existing);
+        }
+
+        if (!existing) {
+                _cleanup_(address_freep) Address *tmp = NULL;
+
+                if (consume_object)
+                        tmp = address;
+                else {
+                        r = address_dup(address, &tmp);
+                        if (r < 0)
+                                return r;
+                }
+
+                /* Consider address tentative until we get the real flags from the kernel */
+                tmp->flags |= IFA_F_TENTATIVE;
+
+                r = address_add(link, tmp);
+                if (r < 0)
+                        return r;
+
+                existing = TAKE_PTR(tmp);
+        } else {
+                r = address_equalify(existing, address);
+                if (r < 0)
+                        return r;
+                existing->source = address->source;
+                existing->provider = address->provider;
+                existing->duplicate_address_detection = address->duplicate_address_detection;
+                existing->lifetime_valid_usec = address->lifetime_valid_usec;
+                existing->lifetime_preferred_usec = address->lifetime_preferred_usec;
+                if (consume_object)
+                        address_free(address);
+        }
+
+        r = ipv4acd_configure(existing);
+        if (r < 0)
+                return r;
+
+        log_address_debug(existing, "Requesting", link);
+        r = link_queue_request_safe(link, REQUEST_TYPE_ADDRESS,
+                                    existing, NULL,
+                                    address_hash_func,
+                                    address_compare_func,
+                                    address_process_request,
+                                    message_counter, netlink_handler, ret);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to request address: %m");
+        if (r == 0)
+                return 0;
+
+        address_enter_requesting(existing);
+
+        return 1;
+}
+
+static int static_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Address *address) {
+        int r;
+
+        assert(link);
 
         r = address_configure_handler_internal(rtnl, m, link, "Failed to set static address");
         if (r <= 0)
@@ -1082,77 +1295,17 @@
         return 1;
 }
 
-static int static_address_after_configure(Request *req, void *object) {
-        Address *address = object;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ADDRESS);
-        assert(address);
-
-        link = req->link;
-
-        r = set_ensure_put(&link->static_addresses, &address_hash_ops, address);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to store static address: %m");
-
-        return 0;
-}
-
-int link_request_address(
-                Link *link,
-                Address *address,
-                bool consume_object,
-                unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
-                Request **ret) {
-
-        Address *acquired;
-        int r;
-
-        assert(link);
-        assert(address);
-
-        r = address_acquire(link, address, &acquired);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to acquire an address from pool: %m");
-        if (r > 0) {
-                if (consume_object) {
-                        address_free(address);
-                        consume_object = false; /* address from pool is already managed by Link. */
-                }
-                address = acquired;
-        }
-
-        log_address_debug(address, "Requesting", link);
-        r = link_queue_request(link, REQUEST_TYPE_ADDRESS, address, consume_object,
-                               message_counter, netlink_handler, ret);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to request address: %m");
-        return r;
-}
-
 int link_request_static_address(Link *link, Address *address, bool consume) {
-        Request *req;
-        int r;
-
         assert(link);
         assert(address);
+        assert(address->source == NETWORK_CONFIG_SOURCE_STATIC);
 
-        r = link_request_address(link, address, consume, &link->static_address_messages,
-                                 static_address_handler, &req);
-        if (r <= 0)
-                return r;
-
-        req->after_configure = static_address_after_configure;
-        return 0;
+        return link_request_address(link, address, consume, &link->static_address_messages,
+                                    static_address_handler, NULL);
 }
 
 int link_request_static_addresses(Link *link) {
         Address *a;
-        Prefix *p;
         int r;
 
         assert(link);
@@ -1166,52 +1319,13 @@
                         return r;
         }
 
-        HASHMAP_FOREACH(p, link->network->prefixes_by_section) {
-                _cleanup_(address_freep) Address *address = NULL;
+        r = link_request_radv_addresses(link);
+        if (r < 0)
+                return r;
 
-                if (!p->assign)
-                        continue;
-
-                r = address_new(&address);
-                if (r < 0)
-                        return log_oom();
-
-                r = sd_radv_prefix_get_prefix(p->radv_prefix, &address->in_addr.in6, &address->prefixlen);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Could not get RA prefix: %m");
-
-                r = generate_ipv6_eui_64_address(link, &address->in_addr.in6);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Could not generate EUI64 address: %m");
-
-                address->family = AF_INET6;
-                address->route_metric = p->route_metric;
-
-                r = link_request_static_address(link, TAKE_PTR(address), true);
-                if (r < 0)
-                        return r;
-        }
-
-        if (in4_addr_is_set(&link->network->dhcp_server_address)) {
-                _cleanup_(address_freep) Address *address = NULL;
-
-                r = address_new(&address);
-                if (r < 0)
-                        return log_oom();
-
-                address->family = AF_INET;
-                address->in_addr.in = link->network->dhcp_server_address;
-                address->prefixlen = link->network->dhcp_server_address_prefixlen;
-                address_set_broadcast(address);
-
-                /* The same address may be explicitly configured in [Address] or [Network] section.
-                 * Configure the DHCP server address only when it is not. */
-                if (!link_is_static_address_configured(link, address)) {
-                        r = link_request_static_address(link, TAKE_PTR(address), true);
-                        if (r < 0)
-                                return r;
-                }
-        }
+        r = link_request_dhcp_server_address(link);
+        if (r < 0)
+                return r;
 
         if (link->static_address_messages == 0) {
                 link->static_addresses_configured = true;
@@ -1224,81 +1338,30 @@
         return 0;
 }
 
-static int address_is_ready_to_configure(Link *link, const Address *address) {
-        int r;
+void address_cancel_request(Address *address) {
+        Request req;
 
-        assert(link);
         assert(address);
+        assert(address->link);
 
-        if (!link_is_ready_to_configure(link, false))
-                return false;
+        if (!address_is_requesting(address))
+                return;
 
-        if (link->address_remove_messages > 0)
-                return false;
+        req = (Request) {
+                .link = address->link,
+                .type = REQUEST_TYPE_ADDRESS,
+                .userdata = address,
+                .hash_func = (hash_func_t) address_hash_func,
+                .compare_func = (compare_func_t) address_compare_func,
+        };
 
-        if (address_get(link, address, NULL) >= 0)
-                return true;
-
-        /* If this is a new address, then refuse adding more than the limit */
-        if (set_size(link->addresses) >= ADDRESSES_PER_LINK_MAX)
-                return log_link_warning_errno(link, SYNTHETIC_ERRNO(E2BIG),
-                                              "Too many addresses are configured, refusing: %m");
-
-        if (address->family == AF_INET &&
-            address->duplicate_address_detection & ADDRESS_FAMILY_IPV4 &&
-            link->hw_addr.length == ETH_ALEN &&
-            !ether_addr_is_null(&link->hw_addr.ether))
-                return ipv4acd_address_is_ready_to_configure(link, address);
-
-        r = address_add(link, address, NULL);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Could not add address: %m");;
-
-        return true;
-}
-
-int request_process_address(Request *req) {
-        Address *a;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->address);
-        assert(req->type == REQUEST_TYPE_ADDRESS);
-
-        link = req->link;
-
-        r = address_is_ready_to_configure(link, req->address);
-        if (r <= 0)
-                return r;
-
-        r = address_configure(req->address, link, req->netlink_handler);
-        if (r < 0)
-                return r;
-
-        /* To prevent a double decrement on failure in after_configure(). */
-        req->message_counter = NULL;
-
-        r = address_get(link, req->address, &a);
-        if (r < 0)
-                return r;
-
-        if (req->after_configure) {
-                r = req->after_configure(req, a);
-                if (r < 0)
-                        return r;
-        }
-
-        r = address_set_masquerade(a, true);
-        if (r < 0)
-                log_link_warning_errno(link, r, "Could not enable IP masquerading, ignoring: %m");
-
-        return 1;
+        request_detach(address->link->manager, &req);
+        address_cancel_requesting(address);
 }
 
 int manager_rtnl_process_address(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
         _cleanup_(address_freep) Address *tmp = NULL;
+        struct ifa_cacheinfo cinfo;
         Link *link = NULL;
         uint16_t type;
         Address *address = NULL;
@@ -1438,10 +1501,10 @@
                 break;
 
         default:
-                assert_not_reached("Received unsupported address family");
+                assert_not_reached();
         }
 
-        r = sd_netlink_message_read_cache_info(message, IFA_CACHEINFO, &tmp->cinfo);
+        r = sd_netlink_message_read_cache_info(message, IFA_CACHEINFO, &cinfo);
         if (r < 0 && r != -ENODATA) {
                 log_link_warning_errno(link, r, "rtnl: cannot get IFA_CACHEINFO attribute, ignoring: %m");
                 return 0;
@@ -1451,35 +1514,53 @@
 
         switch (type) {
         case RTM_NEWADDR:
-                log_address_debug(tmp, address ? "Remembering updated" : "Remembering foreign", link);
-                if (!address) {
-                        /* An address appeared that we did not request */
-                        r = address_add_foreign(link, tmp, &address);
+                if (address) {
+                        /* update flags and etc. */
+                        r = address_equalify(address, tmp);
                         if (r < 0) {
-                                _cleanup_free_ char *buf = NULL;
-
-                                (void) in_addr_prefix_to_string(tmp->family, &tmp->in_addr, tmp->prefixlen, &buf);
-                                log_link_warning_errno(link, r, "Failed to remember foreign address %s, ignoring: %m",
-                                                       strnull(buf));
+                                log_link_warning_errno(link, r, "Failed to update properties of address %s, ignoring: %m",
+                                                       IN_ADDR_PREFIX_TO_STRING(address->family, &address->in_addr, address->prefixlen));
                                 return 0;
                         }
+                        address->flags = tmp->flags;
+                        address->scope = tmp->scope;
+                        address_set_lifetime(m, address, &cinfo);
+                        address_enter_configured(address);
+                        log_address_debug(address, "Received updated", link);
+                } else {
+                        address_set_lifetime(m, tmp, &cinfo);
+                        address_enter_configured(tmp);
+                        log_address_debug(tmp, "Received new", link);
+
+                        r = address_add(link, tmp);
+                        if (r < 0) {
+                                log_link_warning_errno(link, r, "Failed to remember foreign address %s, ignoring: %m",
+                                                       IN_ADDR_PREFIX_TO_STRING(tmp->family, &tmp->in_addr, tmp->prefixlen));
+                                return 0;
+                        }
+
+                        address = TAKE_PTR(tmp);
                 }
 
                 /* address_update() logs internally, so we don't need to here. */
-                r = address_update(address, tmp);
+                r = address_update(address);
                 if (r < 0)
                         link_enter_failed(link);
 
                 break;
 
         case RTM_DELADDR:
-                log_address_debug(tmp, address ? "Forgetting" : "Kernel removed unknown", link);
-                (void) address_drop(address);
+                if (address) {
+                        address_enter_removed(address);
+                        log_address_debug(address, address->state == 0 ? "Forgetting" : "Removed", link);
+                        (void) address_drop(address);
+                } else
+                        log_address_debug(tmp, "Kernel removed unknown", link);
 
                 break;
 
         default:
-                assert_not_reached("Received invalid RTNL message type");
+                assert_not_reached();
         }
 
         return 1;
@@ -1602,12 +1683,11 @@
         /* Address=address/prefixlen */
         r = in_addr_prefix_from_string_auto_internal(rvalue, PREFIXLEN_REFUSE, &f, &buffer, &prefixlen);
         if (r == -ENOANO) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "An address '%s' is specified without prefix length. "
-                           "The behavior of parsing addresses without prefix length will be changed in the future release. "
-                           "Please specify prefix length explicitly.", rvalue);
-
-                r = in_addr_prefix_from_string_auto_internal(rvalue, PREFIXLEN_LEGACY, &f, &buffer, &prefixlen);
+                r = in_addr_prefix_from_string_auto(rvalue, &f, &buffer, &prefixlen);
+                if (r >= 0)
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "An address '%s' is specified without prefix length. Assuming the prefix length is %u."
+                                   "Please specify the prefix length explicitly.", rvalue, prefixlen);
         }
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r, "Invalid address '%s', ignoring assignment: %m", rvalue);
@@ -1703,7 +1783,7 @@
 
         Network *network = userdata;
         _cleanup_(address_free_or_set_invalidp) Address *n = NULL;
-        uint32_t k;
+        usec_t k;
         int r;
 
         assert(filename);
@@ -1723,7 +1803,7 @@
 
         /* We accept only "forever", "infinity", empty, or "0". */
         if (STR_IN_SET(rvalue, "forever", "infinity", ""))
-                k = CACHE_INFO_INFINITY_LIFE_TIME;
+                k = USEC_INFINITY;
         else if (streq(rvalue, "0"))
                 k = 0;
         else {
@@ -1732,7 +1812,7 @@
                 return 0;
         }
 
-        n->cinfo.ifa_prefered = k;
+        n->lifetime_preferred_usec = k;
         TAKE_PTR(n);
 
         return 0;
@@ -1816,21 +1896,14 @@
                 return 0;
         }
 
-        if (streq(rvalue, "host"))
-                n->scope = RT_SCOPE_HOST;
-        else if (streq(rvalue, "link"))
-                n->scope = RT_SCOPE_LINK;
-        else if (streq(rvalue, "global"))
-                n->scope = RT_SCOPE_UNIVERSE;
-        else {
-                r = safe_atou8(rvalue , &n->scope);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Could not parse address scope \"%s\", ignoring assignment: %m", rvalue);
-                        return 0;
-                }
+        r = route_scope_from_string(rvalue);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Could not parse address scope \"%s\", ignoring assignment: %m", rvalue);
+                return 0;
         }
 
+        n->scope = r;
         n->scope_set = true;
         TAKE_PTR(n);
         return 0;
@@ -1932,10 +2005,45 @@
         return 0;
 }
 
-bool address_is_ready(const Address *a) {
-        assert(a);
+int config_parse_address_netlabel(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
 
-        return !(a->flags & IFA_F_TENTATIVE);
+        Network *network = userdata;
+        _cleanup_(address_free_or_set_invalidp) Address *n = NULL;
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+        assert(data);
+        assert(network);
+
+        r = address_new_static(network, filename, section_line, &n);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to allocate new address, ignoring assignment: %m");
+                return 0;
+        }
+
+        r = config_parse_string(unit, filename, line, section, section_line,
+                                lvalue, CONFIG_PARSE_STRING_SAFE, rvalue, &n->netlabel, network);
+        if (r < 0)
+                return r;
+
+        TAKE_PTR(n);
+        return 0;
 }
 
 static int address_section_verify(Address *address) {
@@ -1953,10 +2061,11 @@
 
         assert(IN_SET(address->family, AF_INET, AF_INET6));
 
-        if (address_may_have_broadcast(address))
-                address_set_broadcast(address);
-        else if (address->broadcast.s_addr != 0) {
-                log_warning("%s: broadcast address is set for IPv6 address or IPv4 address with prefixlength larger than 30. "
+        if (in4_addr_is_set(&address->broadcast) &&
+            (address->family == AF_INET6 || address->prefixlen > 30 ||
+             in_addr_is_set(address->family, &address->in_addr_peer))) {
+                log_warning("%s: broadcast address is set for an IPv6 address, "
+                            "an IPv4 address with peer address, or with prefix length larger than 30. "
                             "Ignoring Broadcast= setting in the [Address] section from line %u.",
                             address->section->filename, address->section->line);
 
@@ -1971,18 +2080,11 @@
                 address->label = mfree(address->label);
         }
 
-        if (in_addr_is_localhost(address->family, &address->in_addr) > 0 &&
-            (address->family == AF_INET || !address->scope_set)) {
-                /* For IPv4, scope must be always RT_SCOPE_HOST.
-                 * For IPv6, use RT_SCOPE_HOST only when it is not explicitly specified. */
-
-                if (address->scope_set && address->scope != RT_SCOPE_HOST)
-                        log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
-                                          "%s: non-host scope is set in the [Address] section from line %u. "
-                                          "Ignoring Scope= setting.",
-                                          address->section->filename, address->section->line);
-
-                address->scope = RT_SCOPE_HOST;
+        if (!address->scope_set) {
+                if (in_addr_is_localhost(address->family, &address->in_addr) > 0)
+                        address->scope = RT_SCOPE_HOST;
+                else if (in_addr_is_link_local(address->family, &address->in_addr) > 0)
+                        address->scope = RT_SCOPE_LINK;
         }
 
         if (address->duplicate_address_detection < 0) {
@@ -2006,12 +2108,43 @@
         return 0;
 }
 
-void network_drop_invalid_addresses(Network *network) {
+int network_drop_invalid_addresses(Network *network) {
+        _cleanup_set_free_ Set *addresses = NULL;
         Address *address;
+        int r;
 
         assert(network);
 
-        ORDERED_HASHMAP_FOREACH(address, network->addresses_by_section)
-                if (address_section_verify(address) < 0)
+        ORDERED_HASHMAP_FOREACH(address, network->addresses_by_section) {
+                Address *dup;
+
+                if (address_section_verify(address) < 0) {
+                        /* Drop invalid [Address] sections or Address= settings in [Network].
+                         * Note that address_free() will drop the address from addresses_by_section. */
                         address_free(address);
+                        continue;
+                }
+
+                /* Always use the setting specified later. So, remove the previously assigned setting. */
+                dup = set_remove(addresses, address);
+                if (dup) {
+                        log_warning("%s: Duplicated address %s is specified at line %u and %u, "
+                                    "dropping the address setting specified at line %u.",
+                                    dup->section->filename,
+                                    IN_ADDR_PREFIX_TO_STRING(address->family, &address->in_addr, address->prefixlen),
+                                    address->section->line,
+                                    dup->section->line, dup->section->line);
+                        /* address_free() will drop the address from addresses_by_section. */
+                        address_free(dup);
+                }
+
+                /* Use address_kernel_hash_ops, instead of address_kernel_hash_ops_free. Otherwise, the
+                 * Address objects will be freed. */
+                r = set_ensure_put(&addresses, &address_kernel_hash_ops, address);
+                if (r < 0)
+                        return log_oom();
+                assert(r > 0);
+        }
+
+        return 0;
 }
diff --git a/src/network/networkd-address.h b/src/network/networkd-address.h
index 1fef111..89b9621 100644
--- a/src/network/networkd-address.h
+++ b/src/network/networkd-address.h
@@ -11,88 +11,118 @@
 #include "in-addr-util.h"
 #include "networkd-link.h"
 #include "networkd-util.h"
+#include "time-util.h"
 
-#define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
-
+typedef struct Address Address;
 typedef struct Manager Manager;
 typedef struct Network Network;
 typedef struct Request Request;
 typedef int (*address_ready_callback_t)(Address *address);
+typedef int (*address_netlink_handler_t)(
+                sd_netlink *rtnl,
+                sd_netlink_message *m,
+                Request *req,
+                Link *link,
+                Address *address);
 
-typedef struct Address {
-        Network *network;
-        NetworkConfigSection *section;
-
+struct Address {
         Link *link;
+        Network *network;
+        ConfigSection *section;
+        NetworkConfigSource source;
+        NetworkConfigState state;
+        union in_addr_union provider; /* DHCP server or router address */
 
         int family;
         unsigned char prefixlen;
         unsigned char scope;
         uint32_t flags;
         uint32_t route_metric; /* route metric for prefix route */
-        char *label;
+        char *label, *netlabel;
 
         int set_broadcast;
         struct in_addr broadcast;
-        struct ifa_cacheinfo cinfo;
 
         union in_addr_union in_addr;
         union in_addr_union in_addr_peer;
 
+        /* These are absolute points in time, and NOT timespans/durations.
+         * Must be specified with clock_boottime_or_monotonic(). */
+        usec_t lifetime_valid_usec;
+        usec_t lifetime_preferred_usec;
+
         bool scope_set:1;
         bool ip_masquerade_done:1;
-        bool is_static:1; /* currently only used by IPv4ACD */
-        bool acd_announced:1;
 
         /* duplicate_address_detection is only used by static or IPv4 dynamic addresses.
          * To control DAD for IPv6 dynamic addresses, set IFA_F_NODAD to flags. */
         AddressFamily duplicate_address_detection;
         sd_ipv4acd *acd;
+        bool acd_bound;
 
         /* Called when address become ready */
         address_ready_callback_t callback;
-} Address;
+};
+
+const char* format_lifetime(char *buf, size_t l, usec_t lifetime_usec) _warn_unused_result_;
+/* Note: the lifetime of the compound literal is the immediately surrounding block,
+ * see C11 §6.5.2.5, and
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
+#define FORMAT_LIFETIME(lifetime) \
+        format_lifetime((char[FORMAT_TIMESPAN_MAX+STRLEN("for ")]){}, FORMAT_TIMESPAN_MAX+STRLEN("for "), lifetime)
+
+int address_flags_to_string_alloc(uint32_t flags, int family, char **ret);
 
 int address_new(Address **ret);
-Address *address_free(Address *address);
+Address* address_free(Address *address);
 int address_get(Link *link, const Address *in, Address **ret);
 int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
-int address_remove(const Address *address, Link *link);
-bool address_equal(const Address *a1, const Address *a2);
+int address_remove(Address *address);
+int address_remove_and_drop(Address *address);
 int address_dup(const Address *src, Address **ret);
 bool address_is_ready(const Address *a);
-void address_set_broadcast(Address *a);
+void address_set_broadcast(Address *a, Link *link);
 
-int generate_ipv6_eui_64_address(const Link *link, struct in6_addr *ret);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(Address, address_free);
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(Address, address_free);
-
-int link_drop_addresses(Link *link);
+int link_drop_managed_addresses(Link *link);
 int link_drop_foreign_addresses(Link *link);
 int link_drop_ipv6ll_addresses(Link *link);
+void link_foreignize_addresses(Link *link);
 bool link_address_is_dynamic(const Link *link, const Address *address);
-int link_get_ipv6_address(Link *link, const struct in6_addr *address, Address **ret);
-int link_get_ipv4_address(Link *link, const struct in_addr *address, unsigned char prefixlen, Address **ret);
-int manager_has_address(Manager *manager, int family, const union in_addr_union *address, bool check_ready);
+int link_get_address(Link *link, int family, const union in_addr_union *address, unsigned char prefixlen, Address **ret);
+static inline int link_get_ipv6_address(Link *link, const struct in6_addr *address, unsigned char prefixlen, Address **ret) {
+        assert(address);
+        return link_get_address(link, AF_INET6, &(union in_addr_union) { .in6 = *address }, prefixlen, ret);
+}
+static inline int link_get_ipv4_address(Link *link, const struct in_addr *address, unsigned char prefixlen, Address **ret) {
+        assert(address);
+        return link_get_address(link, AF_INET, &(union in_addr_union) { .in = *address }, prefixlen, ret);
+}
+int manager_get_address(Manager *manager, int family, const union in_addr_union *address, unsigned char prefixlen, Address **ret);
+bool manager_has_address(Manager *manager, int family, const union in_addr_union *address, bool check_ready);
 
+void address_cancel_request(Address *address);
 int link_request_address(
                 Link *link,
                 Address *address,
                 bool consume_object,
                 unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
+                address_netlink_handler_t netlink_handler,
                 Request **ret);
 int link_request_static_address(Link *link, Address *address, bool consume);
 int link_request_static_addresses(Link *link);
-int request_process_address(Request *req);
 
 int manager_rtnl_process_address(sd_netlink *nl, sd_netlink_message *message, Manager *m);
 
-void network_drop_invalid_addresses(Network *network);
+int network_drop_invalid_addresses(Network *network);
 
-void address_hash_func(const Address *a, struct siphash *state);
 int address_compare_func(const Address *a1, const Address *a2);
-extern const struct hash_ops address_hash_ops;
+int address_equal(const Address *a1, const Address *a2);
+
+DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(Address, address);
+
+void link_mark_addresses(Link *link, NetworkConfigSource source);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_address);
 CONFIG_PARSER_PROTOTYPE(config_parse_broadcast);
@@ -102,3 +132,4 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_address_scope);
 CONFIG_PARSER_PROTOTYPE(config_parse_address_route_metric);
 CONFIG_PARSER_PROTOTYPE(config_parse_duplicate_address_detection);
+CONFIG_PARSER_PROTOTYPE(config_parse_address_netlabel);
diff --git a/src/network/networkd-bridge-fdb.c b/src/network/networkd-bridge-fdb.c
index ab1b766..803e27c 100644
--- a/src/network/networkd-bridge-fdb.c
+++ b/src/network/networkd-bridge-fdb.c
@@ -32,13 +32,13 @@
                 hashmap_remove(fdb->network->bridge_fdb_entries_by_section, fdb->section);
         }
 
-        network_config_section_free(fdb->section);
+        config_section_free(fdb->section);
 
         free(fdb->outgoing_ifname);
         return mfree(fdb);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(BridgeFDB, bridge_fdb_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(BridgeFDB, bridge_fdb_free);
 
 /* create a new FDB entry or get an existing one. */
 static int bridge_fdb_new_static(
@@ -47,7 +47,7 @@
                 unsigned section_line,
                 BridgeFDB **ret) {
 
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(bridge_fdb_freep) BridgeFDB *fdb = NULL;
         int r;
 
@@ -56,7 +56,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -83,7 +83,7 @@
                 .ntf_flags = NEIGHBOR_CACHE_ENTRY_FLAGS_SELF,
         };
 
-        r = hashmap_ensure_put(&network->bridge_fdb_entries_by_section, &network_config_hash_ops, fdb->section, fdb);
+        r = hashmap_ensure_put(&network->bridge_fdb_entries_by_section, &config_section_hash_ops, fdb->section, fdb);
         if (r < 0)
                 return r;
 
@@ -93,16 +93,11 @@
         return 0;
 }
 
-static int bridge_fdb_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int bridge_fdb_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
         int r;
 
+        assert(m);
         assert(link);
-        assert(link->static_bridge_fdb_messages > 0);
-
-        link->static_bridge_fdb_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 0;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
@@ -121,97 +116,73 @@
 }
 
 /* send a request to the kernel to add a FDB entry in its static MAC table. */
-static int bridge_fdb_configure(const BridgeFDB *fdb, Link *link, link_netlink_message_handler_t callback) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int bridge_fdb_configure_message(const BridgeFDB *fdb, Link *link, sd_netlink_message *req) {
         int r;
 
         assert(fdb);
         assert(link);
-        assert(link->manager);
-        assert(link->manager->rtnl);
-        assert(callback);
-
-        /* create new RTM message */
-        r = sd_rtnl_message_new_neigh(link->manager->rtnl, &req, RTM_NEWNEIGH, link->ifindex, AF_BRIDGE);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not create RTM_NEWNEIGH message: %m");
 
         r = sd_rtnl_message_neigh_set_flags(req, fdb->ntf_flags);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set neighbor flags: %m");
+                return r;
 
         /* only NUD_PERMANENT state supported. */
         r = sd_rtnl_message_neigh_set_state(req, NUD_NOARP | NUD_PERMANENT);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set neighbor state: %m");
+                return r;
 
         r = sd_netlink_message_append_data(req, NDA_LLADDR, &fdb->mac_addr, sizeof(fdb->mac_addr));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append NDA_LLADDR attribute: %m");
+                return r;
 
         /* VLAN Id is optional. We'll add VLAN Id only if it's specified. */
         if (fdb->vlan_id > 0) {
                 r = sd_netlink_message_append_u16(req, NDA_VLAN, fdb->vlan_id);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append NDA_VLAN attribute: %m");
+                        return r;
         }
 
         if (fdb->outgoing_ifindex > 0) {
                 r = sd_netlink_message_append_u32(req, NDA_IFINDEX, fdb->outgoing_ifindex);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append NDA_IFINDEX attribute: %m");
+                        return r;
         }
 
         if (in_addr_is_set(fdb->family, &fdb->destination_addr)) {
                 r = netlink_message_append_in_addr_union(req, NDA_DST, fdb->family, &fdb->destination_addr);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append NDA_DST attribute: %m");
+                        return r;
         }
 
         if (fdb->vni <= VXLAN_VID_MAX) {
                 r = sd_netlink_message_append_u32(req, NDA_VNI, fdb->vni);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append NDA_VNI attribute: %m");
-        }
-
-        /* send message to the kernel to update its internal static MAC table. */
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-
-        return 1;
-}
-
-int link_request_static_bridge_fdb(Link *link) {
-        BridgeFDB *fdb;
-        int r;
-
-        assert(link);
-        assert(link->network);
-
-        link->static_bridge_fdb_configured = false;
-
-        HASHMAP_FOREACH(fdb, link->network->bridge_fdb_entries_by_section) {
-                r = link_queue_request(link, REQUEST_TYPE_BRIDGE_FDB, fdb, false,
-                                       &link->static_bridge_fdb_messages, bridge_fdb_configure_handler, NULL);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to request static bridge FDB entry: %m");
-        }
-
-        if (link->static_bridge_fdb_messages == 0) {
-                link->static_bridge_fdb_configured = true;
-                link_check_ready(link);
-        } else {
-                log_link_debug(link, "Setting bridge FDB entries");
-                link_set_state(link, LINK_STATE_CONFIGURING);
+                        return r;
         }
 
         return 0;
 }
 
+static int bridge_fdb_configure(BridgeFDB *fdb, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        assert(fdb);
+        assert(link);
+        assert(link->manager);
+        assert(req);
+
+        r = sd_rtnl_message_new_neigh(link->manager->rtnl, &m, RTM_NEWNEIGH, link->ifindex, AF_BRIDGE);
+        if (r < 0)
+                return r;
+
+        r = bridge_fdb_configure_message(fdb, link, m);
+        if (r < 0)
+                return r;
+
+        return request_call_netlink_async(link->manager->rtnl, m, req);
+}
+
 static bool bridge_fdb_is_ready_to_configure(BridgeFDB *fdb, Link *link) {
         Link *out = NULL;
 
@@ -237,16 +208,54 @@
         return true;
 }
 
-int request_process_bridge_fdb(Request *req) {
-        assert(req);
-        assert(req->link);
-        assert(req->fdb);
-        assert(req->type == REQUEST_TYPE_BRIDGE_FDB);
+static int bridge_fdb_process_request(Request *req, Link *link, void *userdata) {
+        BridgeFDB *fdb = ASSERT_PTR(userdata);
+        int r;
 
-        if (!bridge_fdb_is_ready_to_configure(req->fdb, req->link))
+        assert(req);
+        assert(link);
+
+        if (!bridge_fdb_is_ready_to_configure(fdb, link))
                 return 0;
 
-        return bridge_fdb_configure(req->fdb, req->link, req->netlink_handler);
+        r = bridge_fdb_configure(fdb, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure bridge FDB: %m");
+
+        return 1;
+}
+
+int link_request_static_bridge_fdb(Link *link) {
+        BridgeFDB *fdb;
+        int r;
+
+        assert(link);
+        assert(link->network);
+
+        link->static_bridge_fdb_configured = false;
+
+        HASHMAP_FOREACH(fdb, link->network->bridge_fdb_entries_by_section) {
+                r = link_queue_request_full(link, REQUEST_TYPE_BRIDGE_FDB,
+                                            fdb, NULL,
+                                            trivial_hash_func,
+                                            trivial_compare_func,
+                                            bridge_fdb_process_request,
+                                            &link->static_bridge_fdb_messages,
+                                            bridge_fdb_configure_handler,
+                                            NULL);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Failed to request static bridge FDB entry: %m");
+        }
+
+        if (link->static_bridge_fdb_messages == 0) {
+                link->static_bridge_fdb_configured = true;
+                link_check_ready(link);
+        } else {
+                log_link_debug(link, "Setting bridge FDB entries");
+                link_set_state(link, LINK_STATE_CONFIGURING);
+        }
+
+        return 0;
 }
 
 void network_drop_invalid_bridge_fdb_entries(Network *network) {
@@ -286,7 +295,7 @@
         if (r < 0)
                 return log_oom();
 
-        r = ether_addr_from_string(rvalue, &fdb->mac_addr);
+        r = parse_ether_addr(rvalue, &fdb->mac_addr);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r, "Not a valid MAC address, ignoring assignment: %s", rvalue);
                 return 0;
diff --git a/src/network/networkd-bridge-fdb.h b/src/network/networkd-bridge-fdb.h
index fae7da5..b59d673 100644
--- a/src/network/networkd-bridge-fdb.h
+++ b/src/network/networkd-bridge-fdb.h
@@ -14,7 +14,6 @@
 
 typedef struct Link Link;
 typedef struct Network Network;
-typedef struct Request Request;
 
 typedef enum NeighborCacheEntryFlags {
         NEIGHBOR_CACHE_ENTRY_FLAGS_USE = NTF_USE,
@@ -27,7 +26,7 @@
 
 typedef struct BridgeFDB {
         Network *network;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
         uint32_t vni;
 
@@ -47,8 +46,6 @@
 
 int link_request_static_bridge_fdb(Link *link);
 
-int request_process_bridge_fdb(Request *req);
-
 CONFIG_PARSER_PROTOTYPE(config_parse_fdb_hwaddr);
 CONFIG_PARSER_PROTOTYPE(config_parse_fdb_vlan_id);
 CONFIG_PARSER_PROTOTYPE(config_parse_fdb_destination);
diff --git a/src/network/networkd-bridge-mdb.c b/src/network/networkd-bridge-mdb.c
index 0f808fb..bd1a974 100644
--- a/src/network/networkd-bridge-mdb.c
+++ b/src/network/networkd-bridge-mdb.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <net/if.h>
+#include <linux/if_bridge.h>
 
 #include "netlink-util.h"
 #include "networkd-bridge-mdb.h"
@@ -23,12 +24,12 @@
                 hashmap_remove(mdb->network->bridge_mdb_entries_by_section, mdb->section);
         }
 
-        network_config_section_free(mdb->section);
+        config_section_free(mdb->section);
 
         return mfree(mdb);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(BridgeMDB, bridge_mdb_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(BridgeMDB, bridge_mdb_free);
 
 /* create a new MDB entry or get an existing one. */
 static int bridge_mdb_new_static(
@@ -37,7 +38,7 @@
                 unsigned section_line,
                 BridgeMDB **ret) {
 
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(bridge_mdb_freep) BridgeMDB *mdb = NULL;
         int r;
 
@@ -46,7 +47,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -71,7 +72,7 @@
                 .section = TAKE_PTR(n),
         };
 
-        r = hashmap_ensure_put(&network->bridge_mdb_entries_by_section, &network_config_hash_ops, mdb->section, mdb);
+        r = hashmap_ensure_put(&network->bridge_mdb_entries_by_section, &config_section_hash_ops, mdb->section, mdb);
         if (r < 0)
                 return r;
 
@@ -80,19 +81,14 @@
         return 0;
 }
 
-static int bridge_mdb_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int bridge_mdb_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
         int r;
 
+        assert(m);
         assert(link);
-        assert(link->static_bridge_mdb_messages > 0);
-
-        link->static_bridge_mdb_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
 
         r = sd_netlink_message_get_errno(m);
-        if (r == -EINVAL && streq_ptr(link->kind, "bridge") && (!link->network || !link->network->bridge)) {
+        if (r == -EINVAL && streq_ptr(link->kind, "bridge") && link->master_ifindex <= 0) {
                 /* To configure bridge MDB entries on bridge master, 1bc844ee0faa1b92e3ede00bdd948021c78d7088 (v5.4) is required. */
                 if (!link->manager->bridge_mdb_on_master_not_supported) {
                         log_link_warning_errno(link, r, "Kernel seems not to support bridge MDB entries on bridge master, ignoring: %m");
@@ -112,46 +108,25 @@
         return 1;
 }
 
-static int link_get_bridge_master_ifindex(Link *link) {
-        assert(link);
-
-        if (link->network && link->network->bridge)
-                return link->network->bridge->ifindex;
-
-        if (streq_ptr(link->kind, "bridge"))
-                return link->ifindex;
-
-        return 0;
-}
-
 /* send a request to the kernel to add an MDB entry */
-static int bridge_mdb_configure(BridgeMDB *mdb, Link *link, link_netlink_message_handler_t callback) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int bridge_mdb_configure(BridgeMDB *mdb, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         struct br_mdb_entry entry;
-        int master, r;
+        int r;
 
         assert(mdb);
         assert(link);
-        assert(link->network);
         assert(link->manager);
-        assert(callback);
+        assert(req);
 
-        if (DEBUG_LOGGING) {
-                _cleanup_free_ char *a = NULL;
-
-                (void) in_addr_to_string(mdb->family, &mdb->group_addr, &a);
+        if (DEBUG_LOGGING)
                 log_link_debug(link, "Configuring bridge MDB entry: MulticastGroupAddress=%s, VLANId=%u",
-                               strna(a), mdb->vlan_id);
-        }
-
-        master = link_get_bridge_master_ifindex(link);
-        if (master <= 0)
-                return log_link_error_errno(link, SYNTHETIC_ERRNO(EINVAL), "Invalid bridge master ifindex %i", master);
+                               IN_ADDR_TO_STRING(mdb->family, &mdb->group_addr), mdb->vlan_id);
 
         entry = (struct br_mdb_entry) {
                 /* If MDB entry is added on bridge master, then the state must be MDB_TEMPORARY.
                  * See br_mdb_add_group() in net/bridge/br_mdb.c of kernel. */
-                .state = master == link->ifindex ? MDB_TEMPORARY : MDB_PERMANENT,
+                .state = link->master_ifindex <= 0 ? MDB_TEMPORARY : MDB_PERMANENT,
                 .ifindex = link->ifindex,
                 .vid = mdb->vlan_id,
         };
@@ -168,24 +143,66 @@
                 break;
 
         default:
-                assert_not_reached("Invalid address family");
+                assert_not_reached();
         }
 
-        /* create new RTM message */
-        r = sd_rtnl_message_new_mdb(link->manager->rtnl, &req, RTM_NEWMDB, master);
+        r = sd_rtnl_message_new_mdb(link->manager->rtnl, &m, RTM_NEWMDB,
+                                    link->master_ifindex > 0 ? link->master_ifindex : link->ifindex);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not create RTM_NEWMDB message: %m");
+                return r;
 
-        r = sd_netlink_message_append_data(req, MDBA_SET_ENTRY, &entry, sizeof(entry));
+        r = sd_netlink_message_append_data(m, MDBA_SET_ENTRY, &entry, sizeof(entry));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append MDBA_SET_ENTRY attribute: %m");
+                return r;
 
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
+        return request_call_netlink_async(link->manager->rtnl, m, req);
+}
+
+static bool bridge_mdb_is_ready_to_configure(Link *link) {
+        Link *master;
+
+        assert(link);
+
+        if (!link_is_ready_to_configure(link, false))
+                return false;
+
+        if (!link->master_set)
+                return false;
+
+        if (link->master_ifindex <= 0 && streq_ptr(link->kind, "bridge"))
+                return true; /* The interface is bridge master. */
+
+        if (link_get_master(link, &master) < 0)
+                return false;
+
+        if (!streq_ptr(master->kind, "bridge"))
+                return false;
+
+        if (!IN_SET(master->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return false;
+
+        if (master->set_flags_messages > 0)
+                return false;
+
+        if (!link_has_carrier(master))
+                return false;
+
+        return true;
+}
+
+static int bridge_mdb_process_request(Request *req, Link *link, void *userdata) {
+        BridgeMDB *mdb = ASSERT_PTR(userdata);
+        int r;
+
+        assert(req);
+        assert(link);
+
+        if (!bridge_mdb_is_ready_to_configure(link))
+                return 0;
+
+        r = bridge_mdb_configure(mdb, link, req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
+                return log_link_warning_errno(link, r, "Failed to configure bridge MDB: %m");
 
         return 1;
 }
@@ -205,19 +222,15 @@
         if (hashmap_isempty(link->network->bridge_mdb_entries_by_section))
                 goto finish;
 
-        if (!link->network->bridge) {
-                if (!streq_ptr(link->kind, "bridge")) {
-                        log_link_warning(link, "Link is neither a bridge master nor a bridge port, ignoring [BridgeMDB] sections.");
-                        goto finish;
-                } else if (link->manager->bridge_mdb_on_master_not_supported) {
-                        log_link_debug(link, "Kernel seems not to support bridge MDB entries on bridge master, ignoring [BridgeMDB] sections.");
-                        goto finish;
-                }
-        }
-
         HASHMAP_FOREACH(mdb, link->network->bridge_mdb_entries_by_section) {
-                r = link_queue_request(link, REQUEST_TYPE_BRIDGE_MDB, mdb, false,
-                                       &link->static_bridge_mdb_messages, bridge_mdb_configure_handler, NULL);
+                r = link_queue_request_full(link, REQUEST_TYPE_BRIDGE_MDB,
+                                            mdb, NULL,
+                                            trivial_hash_func,
+                                            trivial_compare_func,
+                                            bridge_mdb_process_request,
+                                            &link->static_bridge_mdb_messages,
+                                            bridge_mdb_configure_handler,
+                                            NULL);
                 if (r < 0)
                         return log_link_error_errno(link, r, "Failed to request MDB entry to multicast group database: %m");
         }
@@ -234,51 +247,6 @@
         return 0;
 }
 
-static bool bridge_mdb_is_ready_to_configure(Link *link) {
-        Link *master;
-
-        if (!link_is_ready_to_configure(link, false))
-                return false;
-
-        if (!link->network->bridge)
-                return true; /* The interface is bridge master. */
-
-        if (link->master_ifindex <= 0)
-                return false;
-
-        if (link->master_ifindex != link->network->bridge->ifindex)
-                return false;
-
-        if (link_get_by_index(link->manager, link->master_ifindex, &master) < 0)
-                return false;
-
-        if (!streq_ptr(master->kind, "bridge"))
-                return false;
-
-        if (!IN_SET(master->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
-                return false;
-
-        if (master->set_flags_messages > 0)
-                return false;
-
-        if (!link_has_carrier(master))
-                return false;
-
-        return true;
-}
-
-int request_process_bridge_mdb(Request *req) {
-        assert(req);
-        assert(req->link);
-        assert(req->mdb);
-        assert(req->type == REQUEST_TYPE_BRIDGE_MDB);
-
-        if (!bridge_mdb_is_ready_to_configure(req->link))
-                return 0;
-
-        return bridge_mdb_configure(req->mdb, req->link, req->netlink_handler);
-}
-
 static int bridge_mdb_verify(BridgeMDB *mdb) {
         if (section_is_invalid(mdb->section))
                 return -EINVAL;
diff --git a/src/network/networkd-bridge-mdb.h b/src/network/networkd-bridge-mdb.h
index 9ca262e..edea255 100644
--- a/src/network/networkd-bridge-mdb.h
+++ b/src/network/networkd-bridge-mdb.h
@@ -9,11 +9,10 @@
 
 typedef struct Link Link;
 typedef struct Network Network;
-typedef struct Request Request;
 
 typedef struct BridgeMDB {
         Network *network;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
         int family;
         union in_addr_union group_addr;
@@ -25,7 +24,6 @@
 void network_drop_invalid_bridge_mdb_entries(Network *network);
 
 int link_request_static_bridge_mdb(Link *link);
-int request_process_bridge_mdb(Request *req);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_mdb_group_address);
 CONFIG_PARSER_PROTOTYPE(config_parse_mdb_vlan_id);
diff --git a/src/network/networkd-bridge-vlan.c b/src/network/networkd-bridge-vlan.c
index 3153bf6..36e3610 100644
--- a/src/network/networkd-bridge-vlan.c
+++ b/src/network/networkd-bridge-vlan.c
@@ -65,11 +65,9 @@
         for (int k = 0; k < BRIDGE_VLAN_BITMAP_LEN; k++) {
                 uint32_t untagged_map = br_untagged_bitmap[k];
                 uint32_t vid_map = br_vid_bitmap[k];
-                unsigned base_bit;
-                int i;
+                unsigned base_bit = k * 32;
+                int i = -1;
 
-                base_bit = k * 32;
-                i = -1;
                 done = false;
                 do {
                         int j = find_next_bit(i, vid_map);
@@ -106,14 +104,14 @@
 
                                         r = sd_netlink_message_append_data(req, IFLA_BRIDGE_VLAN_INFO, &br_vlan, sizeof(br_vlan));
                                         if (r < 0)
-                                                return log_link_error_errno(link, r, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m");
+                                                return r;
                                 } else {
                                         br_vlan.vid = begin;
                                         br_vlan.flags |= BRIDGE_VLAN_INFO_RANGE_BEGIN;
 
                                         r = sd_netlink_message_append_data(req, IFLA_BRIDGE_VLAN_INFO, &br_vlan, sizeof(br_vlan));
                                         if (r < 0)
-                                                return log_link_error_errno(link, r, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m");
+                                                return r;
 
                                         br_vlan.vid = end;
                                         br_vlan.flags &= ~BRIDGE_VLAN_INFO_RANGE_BEGIN;
@@ -121,7 +119,7 @@
 
                                         r = sd_netlink_message_append_data(req, IFLA_BRIDGE_VLAN_INFO, &br_vlan, sizeof(br_vlan));
                                         if (r < 0)
-                                                return log_link_error_errno(link, r, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m");
+                                                return r;
                                 }
 
                                 if (done)
diff --git a/src/network/networkd-can.c b/src/network/networkd-can.c
index 1fa37a0..b8a1871 100644
--- a/src/network/networkd-can.c
+++ b/src/network/networkd-can.c
@@ -10,7 +10,132 @@
 #include "parse-util.h"
 #include "string-util.h"
 
-#define CAN_TERMINATION_OHM_VALUE 120
+#define CAN_TERMINATION_DEFAULT_OHM_VALUE 120
+
+int can_set_netlink_message(Link *link, sd_netlink_message *m) {
+        int r;
+
+        assert(link);
+        assert(link->network);
+        assert(m);
+
+        r = sd_netlink_message_set_flags(m, NLM_F_REQUEST | NLM_F_ACK);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container(m, IFLA_LINKINFO);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, link->kind);
+        if (r < 0)
+                return r;
+
+        if (link->network->can_bitrate > 0) {
+                struct can_bittiming bt = {
+                        .bitrate = link->network->can_bitrate,
+                        .sample_point = link->network->can_sample_point,
+                        .sjw = link->network->can_sync_jump_width,
+                };
+
+                log_link_debug(link, "Setting bitrate = %u bit/s", bt.bitrate);
+                if (link->network->can_sample_point > 0)
+                        log_link_debug(link, "Setting sample point = %u.%u%%", bt.sample_point / 10, bt.sample_point % 10);
+                else
+                        log_link_debug(link, "Using default sample point");
+
+                r = sd_netlink_message_append_data(m, IFLA_CAN_BITTIMING, &bt, sizeof(bt));
+                if (r < 0)
+                        return r;
+        } else if (link->network->can_time_quanta_ns > 0) {
+                struct can_bittiming bt = {
+                        .tq = link->network->can_time_quanta_ns,
+                        .prop_seg = link->network->can_propagation_segment,
+                        .phase_seg1 = link->network->can_phase_buffer_segment_1,
+                        .phase_seg2 = link->network->can_phase_buffer_segment_2,
+                        .sjw = link->network->can_sync_jump_width,
+                };
+
+                log_link_debug(link, "Setting time quanta = %"PRIu32" nsec", bt.tq);
+                r = sd_netlink_message_append_data(m, IFLA_CAN_BITTIMING, &bt, sizeof(bt));
+                if (r < 0)
+                        return r;
+        }
+
+        if (link->network->can_data_bitrate > 0) {
+                struct can_bittiming bt = {
+                        .bitrate = link->network->can_data_bitrate,
+                        .sample_point = link->network->can_data_sample_point,
+                        .sjw = link->network->can_data_sync_jump_width,
+                };
+
+                log_link_debug(link, "Setting data bitrate = %u bit/s", bt.bitrate);
+                if (link->network->can_data_sample_point > 0)
+                        log_link_debug(link, "Setting data sample point = %u.%u%%", bt.sample_point / 10, bt.sample_point % 10);
+                else
+                        log_link_debug(link, "Using default data sample point");
+
+                r = sd_netlink_message_append_data(m, IFLA_CAN_DATA_BITTIMING, &bt, sizeof(bt));
+                if (r < 0)
+                        return r;
+        } else if (link->network->can_data_time_quanta_ns > 0) {
+                struct can_bittiming bt = {
+                        .tq = link->network->can_data_time_quanta_ns,
+                        .prop_seg = link->network->can_data_propagation_segment,
+                        .phase_seg1 = link->network->can_data_phase_buffer_segment_1,
+                        .phase_seg2 = link->network->can_data_phase_buffer_segment_2,
+                        .sjw = link->network->can_data_sync_jump_width,
+                };
+
+                log_link_debug(link, "Setting data time quanta = %"PRIu32" nsec", bt.tq);
+                r = sd_netlink_message_append_data(m, IFLA_CAN_DATA_BITTIMING, &bt, sizeof(bt));
+                if (r < 0)
+                        return r;
+        }
+
+        if (link->network->can_restart_us > 0) {
+                uint64_t restart_ms;
+
+                if (link->network->can_restart_us == USEC_INFINITY)
+                        restart_ms = 0;
+                else
+                        restart_ms = DIV_ROUND_UP(link->network->can_restart_us, USEC_PER_MSEC);
+
+                log_link_debug(link, "Setting restart = %s", FORMAT_TIMESPAN(restart_ms * 1000, MSEC_PER_SEC));
+                r = sd_netlink_message_append_u32(m, IFLA_CAN_RESTART_MS, restart_ms);
+                if (r < 0)
+                        return r;
+        }
+
+        if (link->network->can_control_mode_mask != 0) {
+                struct can_ctrlmode cm = {
+                        .mask = link->network->can_control_mode_mask,
+                        .flags = link->network->can_control_mode_flags,
+                };
+
+                r = sd_netlink_message_append_data(m, IFLA_CAN_CTRLMODE, &cm, sizeof(cm));
+                if (r < 0)
+                        return r;
+        }
+
+        if (link->network->can_termination_set) {
+                log_link_debug(link, "Setting can-termination to '%u'.", link->network->can_termination);
+
+                r = sd_netlink_message_append_u16(m, IFLA_CAN_TERMINATION, link->network->can_termination);
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_netlink_message_close_container(m);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_close_container(m);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
 
 int config_parse_can_bitrate(
                 const char* unit,
@@ -24,14 +149,13 @@
                 void *data,
                 void *userdata) {
 
-        uint32_t *br = data;
+        uint32_t *br = ASSERT_PTR(data);
         uint64_t sz;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = parse_size(rvalue, 1000, &sz);
         if (r < 0) {
@@ -52,133 +176,161 @@
         return 0;
 }
 
-int can_set_netlink_message(Link *link, sd_netlink_message *m) {
-        struct can_ctrlmode cm = {};
+int config_parse_can_time_quanta(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        nsec_t val, *tq = ASSERT_PTR(data);
         int r;
 
-        assert(link);
-        assert(link->network);
-        assert(m);
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
 
-        r = sd_netlink_message_set_flags(m, NLM_F_REQUEST | NLM_F_ACK);
-        if (r < 0)
-                return log_link_debug_errno(link, r, "Could not set netlink flags: %m");
-
-        r = sd_netlink_message_open_container(m, IFLA_LINKINFO);
-        if (r < 0)
-                return log_link_debug_errno(link, r, "Failed to open IFLA_LINKINFO container: %m");
-
-        r = sd_netlink_message_open_container_union(m, IFLA_INFO_DATA, link->kind);
-        if (r < 0)
-                return log_link_debug_errno(link, r, "Could not open IFLA_INFO_DATA container: %m");
-
-        if (link->network->can_bitrate > 0 || link->network->can_sample_point > 0) {
-                struct can_bittiming bt = {
-                        .bitrate = link->network->can_bitrate,
-                        .sample_point = link->network->can_sample_point,
-                };
-
-                log_link_debug(link, "Setting bitrate = %d bit/s", bt.bitrate);
-                if (link->network->can_sample_point > 0)
-                        log_link_debug(link, "Setting sample point = %d.%d%%", bt.sample_point / 10, bt.sample_point % 10);
-                else
-                        log_link_debug(link, "Using default sample point");
-
-                r = sd_netlink_message_append_data(m, IFLA_CAN_BITTIMING, &bt, sizeof(bt));
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_CAN_BITTIMING attribute: %m");
+        r = parse_nsec(rvalue, &val);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse can time quanta '%s', ignoring: %m", rvalue);
+                return 0;
         }
 
-        if (link->network->can_data_bitrate > 0 || link->network->can_data_sample_point > 0) {
-                struct can_bittiming bt = {
-                        .bitrate = link->network->can_data_bitrate,
-                        .sample_point = link->network->can_data_sample_point,
-                };
-
-                log_link_debug(link, "Setting data bitrate = %d bit/s", bt.bitrate);
-                if (link->network->can_data_sample_point > 0)
-                        log_link_debug(link, "Setting data sample point = %d.%d%%", bt.sample_point / 10, bt.sample_point % 10);
-                else
-                        log_link_debug(link, "Using default data sample point");
-
-                r = sd_netlink_message_append_data(m, IFLA_CAN_DATA_BITTIMING, &bt, sizeof(bt));
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_CAN_DATA_BITTIMING attribute: %m");
+        /* Linux uses __u32 for bitrates, so the value should not exceed that. */
+        if (val <= 0 || val > UINT32_MAX) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Time quanta out of permitted range 1...4294967295");
+                return 0;
         }
 
-        if (link->network->can_restart_us > 0) {
-                char time_string[FORMAT_TIMESPAN_MAX];
-                uint64_t restart_ms;
+        *tq = val;
+        return 0;
+}
 
-                if (link->network->can_restart_us == USEC_INFINITY)
-                        restart_ms = 0;
-                else
-                        restart_ms = DIV_ROUND_UP(link->network->can_restart_us, USEC_PER_MSEC);
+int config_parse_can_restart_usec(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
 
-                format_timespan(time_string, FORMAT_TIMESPAN_MAX, restart_ms * 1000, MSEC_PER_SEC);
+        usec_t usec, *restart_usec = ASSERT_PTR(data);
+        int r;
 
-                if (restart_ms > UINT32_MAX)
-                        return log_link_debug_errno(link, SYNTHETIC_ERRNO(ERANGE), "restart timeout (%s) too big.", time_string);
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
 
-                log_link_debug(link, "Setting restart = %s", time_string);
-
-                r = sd_netlink_message_append_u32(m, IFLA_CAN_RESTART_MS, restart_ms);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_CAN_RESTART_MS attribute: %m");
+        r = parse_sec(rvalue, &usec);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse CAN restart sec '%s', ignoring: %m", rvalue);
+                return 0;
         }
 
-        if (link->network->can_fd_mode >= 0) {
-                cm.mask |= CAN_CTRLMODE_FD;
-                SET_FLAG(cm.flags, CAN_CTRLMODE_FD, link->network->can_fd_mode);
-                log_link_debug(link, "Setting FD mode to '%s'.", yes_no(link->network->can_fd_mode));
+        if (usec != USEC_INFINITY &&
+            DIV_ROUND_UP(usec, USEC_PER_MSEC) > UINT32_MAX) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "CAN RestartSec= must be in the range 0...%"PRIu32"ms, ignoring: %s", UINT32_MAX, rvalue);
+                return 0;
         }
 
-        if (link->network->can_non_iso >= 0) {
-                cm.mask |= CAN_CTRLMODE_FD_NON_ISO;
-                SET_FLAG(cm.flags, CAN_CTRLMODE_FD_NON_ISO, link->network->can_non_iso);
-                log_link_debug(link, "Setting FD non-ISO mode to '%s'.", yes_no(link->network->can_non_iso));
+        *restart_usec = usec;
+        return 0;
+}
+
+int config_parse_can_control_mode(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Network *network = ASSERT_PTR(userdata);
+        uint32_t mask = ltype;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+        assert(mask != 0);
+
+        if (isempty(rvalue)) {
+                network->can_control_mode_mask &= ~mask;
+                network->can_control_mode_flags &= ~mask;
+                return 0;
         }
 
-        if (link->network->can_triple_sampling >= 0) {
-                cm.mask |= CAN_CTRLMODE_3_SAMPLES;
-                SET_FLAG(cm.flags, CAN_CTRLMODE_3_SAMPLES, link->network->can_triple_sampling);
-                log_link_debug(link, "Setting triple-sampling to '%s'.", yes_no(link->network->can_triple_sampling));
+        r = parse_boolean(rvalue);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse CAN control mode '%s', ignoring: %s", lvalue, rvalue);
+                return 0;
         }
 
-        if (link->network->can_berr_reporting >= 0) {
-                cm.mask |= CAN_CTRLMODE_BERR_REPORTING;
-                SET_FLAG(cm.flags, CAN_CTRLMODE_BERR_REPORTING, link->network->can_berr_reporting);
-                log_link_debug(link, "Setting bus error reporting to '%s'.", yes_no(link->network->can_berr_reporting));
+        network->can_control_mode_mask |= mask;
+        SET_FLAG(network->can_control_mode_flags, mask, r);
+        return 0;
+}
+
+int config_parse_can_termination(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Network *network = userdata;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+        assert(data);
+
+        if (isempty(rvalue)) {
+                network->can_termination_set = false;
+                return 0;
         }
 
-        if (link->network->can_listen_only >= 0) {
-                cm.mask |= CAN_CTRLMODE_LISTENONLY;
-                SET_FLAG(cm.flags, CAN_CTRLMODE_LISTENONLY, link->network->can_listen_only);
-                log_link_debug(link, "Setting listen-only mode to '%s'.", yes_no(link->network->can_listen_only));
+        /* Note that 0 termination ohm value means no termination resistor, and there is no conflict
+         * between parse_boolean() and safe_atou16() when Termination=0. However, Termination=1 must be
+         * treated as 1 ohm, instead of true (and then the default ohm value). So, we need to parse the
+         * string with safe_atou16() at first. */
+
+        r = safe_atou16(rvalue, &network->can_termination);
+        if (r < 0) {
+                r = parse_boolean(rvalue);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to parse CAN termination value, ignoring: %s", rvalue);
+                        return 0;
+                }
+
+                network->can_termination = r ? CAN_TERMINATION_DEFAULT_OHM_VALUE : 0;
         }
 
-        if (cm.mask != 0) {
-                r = sd_netlink_message_append_data(m, IFLA_CAN_CTRLMODE, &cm, sizeof(cm));
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_CAN_CTRLMODE attribute: %m");
-        }
-
-        if (link->network->can_termination >= 0) {
-                log_link_debug(link, "Setting can-termination to '%s'.", yes_no(link->network->can_termination));
-
-                r = sd_netlink_message_append_u16(m, IFLA_CAN_TERMINATION,
-                                link->network->can_termination ? CAN_TERMINATION_OHM_VALUE : 0);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_CAN_TERMINATION attribute: %m");
-        }
-
-        r = sd_netlink_message_close_container(m);
-        if (r < 0)
-                return log_link_debug_errno(link, r, "Failed to close IFLA_INFO_DATA container: %m");
-
-        r = sd_netlink_message_close_container(m);
-        if (r < 0)
-                return log_link_debug_errno(link, r, "Failed to close IFLA_LINKINFO container: %m");
-
+        network->can_termination_set = true;
         return 0;
 }
diff --git a/src/network/networkd-can.h b/src/network/networkd-can.h
index 781494e..3945082 100644
--- a/src/network/networkd-can.h
+++ b/src/network/networkd-can.h
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <linux/can/netlink.h>
+
 #include "sd-netlink.h"
 
 #include "conf-parser.h"
@@ -10,3 +12,7 @@
 int can_set_netlink_message(Link *link, sd_netlink_message *m);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_can_bitrate);
+CONFIG_PARSER_PROTOTYPE(config_parse_can_time_quanta);
+CONFIG_PARSER_PROTOTYPE(config_parse_can_restart_usec);
+CONFIG_PARSER_PROTOTYPE(config_parse_can_control_mode);
+CONFIG_PARSER_PROTOTYPE(config_parse_can_termination);
diff --git a/src/network/networkd-conf.c b/src/network/networkd-conf.c
index 0b55ef2..f73b2d4 100644
--- a/src/network/networkd-conf.c
+++ b/src/network/networkd-conf.c
@@ -4,7 +4,7 @@
  ***/
 
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
 #include "networkd-conf.h"
 #include "networkd-manager.h"
 #include "networkd-speed-meter.h"
@@ -29,10 +29,8 @@
                 return r;
 
         if (m->use_speed_meter && m->speed_meter_interval_usec < SPEED_METER_MINIMUM_TIME_INTERVAL) {
-                char buf[FORMAT_TIMESPAN_MAX];
-
                 log_warning("SpeedMeterIntervalSec= is too small, using %s.",
-                            format_timespan(buf, sizeof buf, SPEED_METER_MINIMUM_TIME_INTERVAL, USEC_PER_SEC));
+                            FORMAT_TIMESPAN(SPEED_METER_MINIMUM_TIME_INTERVAL, USEC_PER_SEC));
                 m->speed_meter_interval_usec = SPEED_METER_MINIMUM_TIME_INTERVAL;
         }
 
diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c
index 02cef0f..ca9a825 100644
--- a/src/network/networkd-dhcp-common.c
+++ b/src/network/networkd-dhcp-common.c
@@ -4,25 +4,60 @@
 #include <linux/if_arp.h>
 
 #include "bus-error.h"
+#include "bus-locator.h"
 #include "dhcp-identifier.h"
 #include "dhcp-internal.h"
 #include "dhcp6-internal.h"
 #include "escape.h"
 #include "hexdecoct.h"
-#include "in-addr-util.h"
+#include "in-addr-prefix-util.h"
 #include "networkd-dhcp-common.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
 #include "networkd-network.h"
+#include "networkd-route-util.h"
 #include "parse-util.h"
 #include "socket-util.h"
 #include "string-table.h"
 #include "strv.h"
+#include "vrf.h"
+
+static uint32_t link_get_vrf_table(Link *link) {
+        assert(link);
+        assert(link->network);
+
+        return link->network->vrf ? VRF(link->network->vrf)->table : RT_TABLE_MAIN;
+}
+
+uint32_t link_get_dhcp4_route_table(Link *link) {
+        assert(link);
+        assert(link->network);
+
+        /* When the interface is part of an VRF use the VRFs routing table, unless
+         * another table is explicitly specified. */
+
+        if (link->network->dhcp_route_table_set)
+                return link->network->dhcp_route_table;
+        return link_get_vrf_table(link);
+}
+
+uint32_t link_get_ipv6_accept_ra_route_table(Link *link) {
+        assert(link);
+        assert(link->network);
+
+        if (link->network->ipv6_accept_ra_route_table_set)
+                return link->network->ipv6_accept_ra_route_table;
+        return link_get_vrf_table(link);
+}
 
 bool link_dhcp_enabled(Link *link, int family) {
         assert(link);
         assert(IN_SET(family, AF_INET, AF_INET6));
 
+        /* Currently, sd-dhcp-client supports only ethernet and infiniband. */
+        if (family == AF_INET && !IN_SET(link->iftype, ARPHRD_ETHER, ARPHRD_INFINIBAND))
+                return false;
+
         if (family == AF_INET6 && !socket_ipv6_is_supported())
                 return false;
 
@@ -55,7 +90,7 @@
 
         if (!FLAGS_SET(network->link_local, ADDRESS_FAMILY_IPV6) &&
             FLAGS_SET(network->dhcp, ADDRESS_FAMILY_IPV6)) {
-                log_warning("%s: DHCPv6 client is enabled but IPv6 link local addressing is disabled. "
+                log_warning("%s: DHCPv6 client is enabled but IPv6 link-local addressing is disabled. "
                             "Disabling DHCPv6 client.", network->filename);
                 SET_FLAG(network->dhcp, ADDRESS_FAMILY_IPV6, false);
         }
@@ -96,119 +131,67 @@
         return duid;
 }
 
-static int link_configure_and_start_dhcp_delayed(Link *link) {
-        int r;
-
-        assert(link);
-
-        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
-                return 0;
-
-        if (!link->dhcp_client) {
-                r = dhcp4_configure(link);
-                if (r < 0)
-                        return r;
-        }
-
-        if (!link->dhcp6_client) {
-                r = dhcp6_configure(link);
-                if (r < 0)
-                        return r;
-        }
-
-        if (link->set_flags_messages > 0)
-                return 0;
-
-        if (!link_has_carrier(link))
-                return 0;
-
-        r = dhcp4_start(link);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to start DHCPv4 client: %m");
-
-        r = ndisc_start(link);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to start IPv6 Router Discovery: %m");
-
-        r = dhcp6_start(link);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to start DHCPv6 client: %m");
-
-        return 0;
-}
-
 static int get_product_uuid_handler(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         const sd_bus_error *e;
         const void *a;
         size_t sz;
-        Link *link;
         int r;
 
         assert(m);
-        assert(manager);
+
+        /* To avoid calling GetProductUUID() bus method so frequently, set the flag below
+         * even if the method fails. */
+        manager->has_product_uuid = true;
 
         e = sd_bus_message_get_error(m);
         if (e) {
                 r = sd_bus_error_get_errno(e);
                 log_warning_errno(r, "Could not get product UUID. Falling back to use machine-app-specific ID as DUID-UUID: %s",
                                   bus_error_message(e, r));
-                goto configure;
+                return 0;
         }
 
         r = sd_bus_message_read_array(m, 'y', &a, &sz);
         if (r < 0) {
                 log_warning_errno(r, "Failed to get product UUID. Falling back to use machine-app-specific ID as DUID-UUID: %m");
-                goto configure;
+                return 0;
         }
 
         if (sz != sizeof(sd_id128_t)) {
                 log_warning("Invalid product UUID. Falling back to use machine-app-specific ID as DUID-UUID.");
-                goto configure;
+                return 0;
         }
 
+        log_debug("Successfully obtained product UUID");
+
         memcpy(&manager->duid_product_uuid.raw_data, a, sz);
         manager->duid_product_uuid.raw_data_len = sz;
 
-configure:
-        /* To avoid calling GetProductUUID() bus method so frequently, set the flag below
-         * even if the method fails. */
-        manager->has_product_uuid = true;
-
-        while ((link = set_steal_first(manager->links_requesting_uuid))) {
-                r = link_configure_and_start_dhcp_delayed(link);
-                if (r < 0)
-                        link_enter_failed(link);
-
-                link_unref(link);
-        }
-
-        manager->links_requesting_uuid = set_free(manager->links_requesting_uuid);
-
-        return 1;
+        return 0;
 }
 
 int manager_request_product_uuid(Manager *m) {
+        static bool bus_method_is_called = false;
         int r;
 
         assert(m);
 
-        if (m->product_uuid_requested)
+        if (bus_method_is_called)
                 return 0;
 
-        log_debug("Requesting product UUID");
-
-        if (sd_bus_is_ready(m->bus) <= 0) {
+        if (sd_bus_is_ready(m->bus) <= 0 && !m->product_uuid_requested) {
                 log_debug("Not connected to system bus, requesting product UUID later.");
+                m->product_uuid_requested = true;
                 return 0;
         }
 
-        r = sd_bus_call_method_async(
+        m->product_uuid_requested = false;
+
+        r = bus_call_method_async(
                         m->bus,
                         NULL,
-                        "org.freedesktop.hostname1",
-                        "/org/freedesktop/hostname1",
-                        "org.freedesktop.hostname1",
+                        bus_hostname,
                         "GetProductUUID",
                         get_product_uuid_handler,
                         m,
@@ -217,7 +200,9 @@
         if (r < 0)
                 return log_warning_errno(r, "Failed to get product UUID: %m");
 
-        m->product_uuid_requested = true;
+        log_debug("Requesting product UUID.");
+
+        bus_method_is_called = true;
 
         return 0;
 }
@@ -242,18 +227,38 @@
         if (r < 0) {
                 log_link_warning_errno(link, r,
                                        "Failed to get product UUID. Falling back to use machine-app-specific ID as DUID-UUID: %m");
+
+                m->has_product_uuid = true; /* Do not request UUID again on failure. */
                 return 1;
         }
 
-        r = set_ensure_put(&m->links_requesting_uuid, NULL, link);
-        if (r < 0)
-                return log_oom();
-        if (r > 0)
-                link_ref(link);
-
         return 0;
 }
 
+bool address_is_filtered(int family, const union in_addr_union *address, uint8_t prefixlen, Set *allow_list, Set *deny_list) {
+        struct in_addr_prefix *p;
+
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(address);
+
+        if (allow_list) {
+                SET_FOREACH(p, allow_list)
+                        if (p->family == family &&
+                            p->prefixlen <= prefixlen &&
+                            in_addr_prefix_covers(family, &p->address, p->prefixlen, address) > 0)
+                                return false;
+
+                return true;
+        }
+
+        SET_FOREACH(p, deny_list)
+                if (p->family == family &&
+                    in_addr_prefix_intersect(family, &p->address, p->prefixlen, address, prefixlen) > 0)
+                        return true;
+
+        return false;
+}
+
 int config_parse_dhcp(
                 const char* unit,
                 const char *filename,
@@ -317,6 +322,7 @@
 
         assert(filename);
         assert(lvalue);
+        assert(IN_SET(ltype, AF_UNSPEC, AF_INET));
         assert(rvalue);
         assert(data);
 
@@ -327,22 +333,86 @@
                 return 0;
         }
 
-        if (streq_ptr(section, "DHCPv4")) {
+        switch (ltype) {
+        case AF_INET:
                 network->dhcp_route_metric = metric;
                 network->dhcp_route_metric_set = true;
-        } else if (STRPTR_IN_SET(section, "DHCPv6", "IPv6AcceptRA")) {
-                network->ipv6_accept_ra_route_metric = metric;
-                network->ipv6_accept_ra_route_metric_set = true;
-        } else { /* [DHCP] section */
+                break;
+        case AF_UNSPEC:
+                /* For backward compatibility. */
                 if (!network->dhcp_route_metric_set)
                         network->dhcp_route_metric = metric;
-                if (!network->ipv6_accept_ra_route_metric_set)
-                        network->ipv6_accept_ra_route_metric = metric;
+                if (!network->ipv6_accept_ra_route_metric_set) {
+                        network->ipv6_accept_ra_route_metric_high = metric;
+                        network->ipv6_accept_ra_route_metric_medium = metric;
+                        network->ipv6_accept_ra_route_metric_low = metric;
+                }
+                break;
+        default:
+                assert_not_reached();
         }
 
         return 0;
 }
 
+int config_parse_ipv6_accept_ra_route_metric(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Network *network = ASSERT_PTR(userdata);
+        uint32_t metric_high, metric_medium, metric_low;
+        int r, s, t;
+
+        assert(filename);
+        assert(rvalue);
+
+        if (safe_atou32(rvalue, &metric_low) >= 0)
+                metric_high = metric_medium = metric_low;
+        else {
+                _cleanup_free_ char *high = NULL, *medium = NULL, *low = NULL;
+                const char *p = rvalue;
+
+                r = extract_many_words(&p, ":", EXTRACT_DONT_COALESCE_SEPARATORS, &high, &medium, &low, NULL);
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r != 3 || !isempty(p)) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r < 0 ? r : 0,
+                                   "Failed to parse RouteTable=%s, ignoring assignment: %m", rvalue);
+                        return 0;
+                }
+
+                r = safe_atou32(high, &metric_high);
+                s = safe_atou32(medium, &metric_medium);
+                t = safe_atou32(low, &metric_low);
+                if (r < 0 || s < 0 || t < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r < 0 ? r : s < 0 ? s : t,
+                                   "Failed to parse RouteTable=%s, ignoring assignment: %m", rvalue);
+                        return 0;
+                }
+
+                if (metric_high >= metric_medium || metric_medium >= metric_low) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Invalid RouteTable=%s, ignoring assignment: %m", rvalue);
+                        return 0;
+                }
+        }
+
+        network->ipv6_accept_ra_route_metric_high = metric_high;
+        network->ipv6_accept_ra_route_metric_medium = metric_medium;
+        network->ipv6_accept_ra_route_metric_low = metric_low;
+        network->ipv6_accept_ra_route_metric_set = true;
+
+        return 0;
+}
+
 int config_parse_dhcp_use_dns(
                 const char* unit,
                 const char *filename,
@@ -360,6 +430,7 @@
 
         assert(filename);
         assert(lvalue);
+        assert(IN_SET(ltype, AF_UNSPEC, AF_INET, AF_INET6));
         assert(rvalue);
         assert(data);
 
@@ -370,17 +441,24 @@
                 return 0;
         }
 
-        if (streq_ptr(section, "DHCPv4")) {
+        switch (ltype) {
+        case AF_INET:
                 network->dhcp_use_dns = r;
                 network->dhcp_use_dns_set = true;
-        } else if (streq_ptr(section, "DHCPv6")) {
+                break;
+        case AF_INET6:
                 network->dhcp6_use_dns = r;
                 network->dhcp6_use_dns_set = true;
-        } else { /* [DHCP] section */
+                break;
+        case AF_UNSPEC:
+                /* For backward compatibility. */
                 if (!network->dhcp_use_dns_set)
                         network->dhcp_use_dns = r;
                 if (!network->dhcp6_use_dns_set)
                         network->dhcp6_use_dns = r;
+                break;
+        default:
+                assert_not_reached();
         }
 
         return 0;
@@ -403,6 +481,7 @@
 
         assert(filename);
         assert(lvalue);
+        assert(IN_SET(ltype, AF_UNSPEC, AF_INET, AF_INET6));
         assert(rvalue);
         assert(data);
 
@@ -413,17 +492,24 @@
                 return 0;
         }
 
-        if (streq_ptr(section, "DHCPv4")) {
+        switch (ltype) {
+        case AF_INET:
                 network->dhcp_use_domains = d;
                 network->dhcp_use_domains_set = true;
-        } else if (streq_ptr(section, "DHCPv6")) {
+                break;
+        case AF_INET6:
                 network->dhcp6_use_domains = d;
                 network->dhcp6_use_domains_set = true;
-        } else { /* [DHCP] section */
+                break;
+        case AF_UNSPEC:
+                /* For backward compatibility. */
                 if (!network->dhcp_use_domains_set)
                         network->dhcp_use_domains = d;
                 if (!network->dhcp6_use_domains_set)
                         network->dhcp6_use_domains = d;
+                break;
+        default:
+                assert_not_reached();
         }
 
         return 0;
@@ -446,6 +532,7 @@
 
         assert(filename);
         assert(lvalue);
+        assert(IN_SET(ltype, AF_UNSPEC, AF_INET, AF_INET6));
         assert(rvalue);
         assert(data);
 
@@ -456,23 +543,30 @@
                 return 0;
         }
 
-        if (streq_ptr(section, "DHCPv4")) {
+        switch (ltype) {
+        case AF_INET:
                 network->dhcp_use_ntp = r;
                 network->dhcp_use_ntp_set = true;
-        } else if (streq_ptr(section, "DHCPv6")) {
+                break;
+        case AF_INET6:
                 network->dhcp6_use_ntp = r;
                 network->dhcp6_use_ntp_set = true;
-        } else { /* [DHCP] section */
+                break;
+        case AF_UNSPEC:
+                /* For backward compatibility. */
                 if (!network->dhcp_use_ntp_set)
                         network->dhcp_use_ntp = r;
                 if (!network->dhcp6_use_ntp_set)
                         network->dhcp6_use_ntp = r;
+                break;
+        default:
+                assert_not_reached();
         }
 
         return 0;
 }
 
-int config_parse_section_route_table(
+int config_parse_dhcp_or_ra_route_table(
                 const char *unit,
                 const char *filename,
                 unsigned line,
@@ -484,52 +578,57 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         uint32_t rt;
         int r;
 
         assert(filename);
         assert(lvalue);
+        assert(IN_SET(ltype, AF_INET, AF_INET6));
         assert(rvalue);
-        assert(data);
 
-        r = safe_atou32(rvalue, &rt);
+        r = manager_get_route_table_from_string(network->manager, rvalue, &rt);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to parse RouteTable=%s, ignoring assignment: %m", rvalue);
                 return 0;
         }
 
-        if (STRPTR_IN_SET(section, "DHCP", "DHCPv4")) {
+        switch (ltype) {
+        case AF_INET:
                 network->dhcp_route_table = rt;
                 network->dhcp_route_table_set = true;
-        } else { /* section is IPv6AcceptRA */
+                break;
+        case AF_INET6:
                 network->ipv6_accept_ra_route_table = rt;
                 network->ipv6_accept_ra_route_table_set = true;
+                break;
+        default:
+                assert_not_reached();
         }
 
         return 0;
 }
 
-int config_parse_iaid(const char *unit,
-                      const char *filename,
-                      unsigned line,
-                      const char *section,
-                      unsigned section_line,
-                      const char *lvalue,
-                      int ltype,
-                      const char *rvalue,
-                      void *data,
-                      void *userdata) {
+int config_parse_iaid(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
 
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         uint32_t iaid;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(network);
         assert(IN_SET(ltype, AF_INET, AF_INET6));
 
         r = safe_atou32(rvalue, &iaid);
@@ -543,8 +642,8 @@
                 network->dhcp_iaid = iaid;
                 network->dhcp_iaid_set = true;
                 if (!network->dhcp6_iaid_set_explicitly) {
-                        /* Backward compatibility. Previously, IAID is shared by DHCP4 and DHCP6.
-                         * If DHCP6 IAID is not specified explicitly, then use DHCP4 IAID for DHCP6. */
+                        /* Backward compatibility. Previously, IAID is shared by DHCPv4 and DHCPv6.
+                         * If DHCPv6 IAID is not specified explicitly, then use DHCPv4 IAID for DHCPv6. */
                         network->dhcp6_iaid = iaid;
                         network->dhcp6_iaid_set = true;
                 }
@@ -570,10 +669,9 @@
                 void *data,
                 void *userdata) {
 
-        char ***l = data;
+        char ***l = ASSERT_PTR(data);
         int r;
 
-        assert(l);
         assert(lvalue);
         assert(rvalue);
         assert(IN_SET(ltype, AF_INET, AF_INET6));
@@ -637,7 +735,7 @@
         _unused_ _cleanup_(sd_dhcp6_option_unrefp) sd_dhcp6_option *old6 = NULL;
         uint32_t uint32_data, enterprise_identifier = 0;
         _cleanup_free_ char *word = NULL, *q = NULL;
-        OrderedHashmap **options = data;
+        OrderedHashmap **options = ASSERT_PTR(data);
         uint16_t u16, uint16_data;
         union in_addr_union addr;
         DHCPOptionDataType type;
@@ -650,7 +748,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *options = ordered_hashmap_free(*options);
@@ -729,7 +826,7 @@
                 return 0;
         }
 
-        switch(type) {
+        switch (type) {
         case DHCP_OPTION_DATA_UINT8:{
                 r = safe_atou8(p, &uint8_data);
                 if (r < 0) {
@@ -961,16 +1058,14 @@
                 void *userdata) {
 
         _cleanup_free_ char *type_string = NULL;
-        const char *p = rvalue;
+        const char *p = ASSERT_PTR(rvalue);
         bool force = ltype;
-        DUID *duid = data;
+        DUID *duid = ASSERT_PTR(data);
         DUIDType type;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
-        assert(duid);
 
         if (!force && duid->set)
                 return 0;
@@ -1033,12 +1128,10 @@
                 void *data,
                 void *userdata) {
 
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         int r;
 
-        assert(manager);
-
-        /* For backward compatibility. Setting both DHCP4 and DHCP6 DUID if they are not specified explicitly. */
+        /* For backward compatibility. Setting both DHCPv4 and DHCPv6 DUID if they are not specified explicitly. */
 
         r = config_parse_duid_type(unit, filename, line, section, section_line, lvalue, false, rvalue, &manager->dhcp_duid, manager);
         if (r < 0)
@@ -1059,16 +1152,14 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         int r;
 
-        assert(network);
-
         r = config_parse_duid_type(unit, filename, line, section, section_line, lvalue, true, rvalue, &network->dhcp_duid, network);
         if (r < 0)
                 return r;
 
-        /* For backward compatibility, also set DHCP6 DUID if not specified explicitly. */
+        /* For backward compatibility, also set DHCPv6 DUID if not specified explicitly. */
         return config_parse_duid_type(unit, filename, line, section, section_line, lvalue, false, rvalue, &network->dhcp6_duid, network);
 }
 
@@ -1087,12 +1178,11 @@
         uint8_t raw_data[MAX_DUID_LEN];
         unsigned count = 0;
         bool force = ltype;
-        DUID *duid = data;
+        DUID *duid = ASSERT_PTR(data);
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(duid);
 
         if (!force && duid->set)
                 return 0;
@@ -1158,12 +1248,10 @@
                 void *data,
                 void *userdata) {
 
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         int r;
 
-        assert(manager);
-
-        /* For backward compatibility. Setting both DHCP4 and DHCP6 DUID if they are not specified explicitly. */
+        /* For backward compatibility. Setting both DHCPv4 and DHCPv6 DUID if they are not specified explicitly. */
 
         r = config_parse_duid_rawdata(unit, filename, line, section, section_line, lvalue, false, rvalue, &manager->dhcp_duid, manager);
         if (r < 0)
@@ -1184,15 +1272,90 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         int r;
 
-        assert(network);
-
         r = config_parse_duid_rawdata(unit, filename, line, section, section_line, lvalue, true, rvalue, &network->dhcp_duid, network);
         if (r < 0)
                 return r;
 
-        /* For backward compatibility, also set DHCP6 DUID if not specified explicitly. */
+        /* For backward compatibility, also set DHCPv6 DUID if not specified explicitly. */
         return config_parse_duid_rawdata(unit, filename, line, section, section_line, lvalue, false, rvalue, &network->dhcp6_duid, network);
 }
+
+int config_parse_uplink(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Network *network = ASSERT_PTR(userdata);
+        bool accept_none = true;
+        int *index, r;
+        char **name;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (streq(section, "DHCPServer")) {
+                index = &network->dhcp_server_uplink_index;
+                name = &network->dhcp_server_uplink_name;
+        } else if (streq(section, "IPv6SendRA")) {
+                index = &network->router_uplink_index;
+                name = &network->router_uplink_name;
+        } else if (STR_IN_SET(section, "DHCPv6PrefixDelegation", "DHCPPrefixDelegation")) {
+                index = &network->dhcp_pd_uplink_index;
+                name = &network->dhcp_pd_uplink_name;
+                accept_none = false;
+        } else
+                assert_not_reached();
+
+        if (isempty(rvalue) || streq(rvalue, ":auto")) {
+                *index = UPLINK_INDEX_AUTO;
+                *name = mfree(*name);
+                return 0;
+        }
+
+        if (accept_none && streq(rvalue, ":none")) {
+                *index = UPLINK_INDEX_NONE;
+                *name = mfree(*name);
+                return 0;
+        }
+
+        if (!accept_none && streq(rvalue, ":self")) {
+                *index = UPLINK_INDEX_SELF;
+                *name = mfree(*name);
+                return 0;
+        }
+
+        r = parse_ifindex(rvalue);
+        if (r > 0) {
+                *index = r;
+                *name = mfree(*name);
+                return 0;
+        }
+
+        if (!ifname_valid_full(rvalue, IFNAME_VALID_ALTERNATIVE)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid interface name in %s=, ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        /* The interface name will be resolved later. */
+        r = free_and_strdup_warn(name, rvalue);
+        if (r < 0)
+                return r;
+
+        /* Note, if uplink_name is set, then uplink_index will be ignored. So, the below does not mean
+         * an uplink interface will be selected automatically. */
+        *index = UPLINK_INDEX_AUTO;
+        return 0;
+}
diff --git a/src/network/networkd-dhcp-common.h b/src/network/networkd-dhcp-common.h
index 316f5cf..6f57b78 100644
--- a/src/network/networkd-dhcp-common.h
+++ b/src/network/networkd-dhcp-common.h
@@ -5,9 +5,20 @@
 
 #include "conf-parser.h"
 #include "dhcp-identifier.h"
+#include "in-addr-util.h"
+#include "set.h"
 #include "time-util.h"
 
+/* Special values for *_uplink_index. */
+#define UPLINK_INDEX_AUTO  0 /* uplink will be selected automatically */
+#define UPLINK_INDEX_NONE -1 /* uplink will not be selected automatically */
+#define UPLINK_INDEX_SELF -2 /* the interface itself is uplink */
+
 #define DHCP_ROUTE_METRIC 1024
+#define IPV6RA_ROUTE_METRIC_HIGH    512
+#define IPV6RA_ROUTE_METRIC_MEDIUM 1024
+#define IPV6RA_ROUTE_METRIC_LOW    2048
+#define DHCP6PD_ROUTE_METRIC 256
 
 typedef struct Link Link;
 typedef struct Manager Manager;
@@ -42,6 +53,9 @@
         bool set;
 } DUID;
 
+uint32_t link_get_dhcp4_route_table(Link *link);
+uint32_t link_get_ipv6_accept_ra_route_table(Link *link);
+
 bool link_dhcp_enabled(Link *link, int family);
 static inline bool link_dhcp4_enabled(Link *link) {
         return link_dhcp_enabled(link, AF_INET);
@@ -63,6 +77,14 @@
 int dhcp_configure_duid(Link *link, const DUID *duid);
 int manager_request_product_uuid(Manager *m);
 
+bool address_is_filtered(int family, const union in_addr_union *address, uint8_t prefixlen, Set *allow_list, Set *deny_list);
+static inline bool in4_address_is_filtered(const struct in_addr *address, Set *allow_list, Set *deny_list) {
+        return address_is_filtered(AF_INET, &(union in_addr_union) { .in = *address }, 32, allow_list, deny_list);
+}
+static inline bool in6_prefix_is_filtered(const struct in6_addr *prefix, uint8_t prefixlen, Set *allow_list, Set *deny_list) {
+        return address_is_filtered(AF_INET6, &(union in_addr_union) { .in6 = *prefix }, prefixlen, allow_list, deny_list);
+}
+
 const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
 DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
 
@@ -71,11 +93,12 @@
 
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_route_metric);
+CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_accept_ra_route_metric);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_dns);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_domains);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_ntp);
 CONFIG_PARSER_PROTOTYPE(config_parse_iaid);
-CONFIG_PARSER_PROTOTYPE(config_parse_section_route_table);
+CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_or_ra_route_table);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_user_or_vendor_class);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_option);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_request_options);
@@ -85,3 +108,4 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_duid_rawdata);
 CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_rawdata);
 CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_rawdata);
+CONFIG_PARSER_PROTOTYPE(config_parse_uplink);
diff --git a/src/network/networkd-dhcp-prefix-delegation.c b/src/network/networkd-dhcp-prefix-delegation.c
new file mode 100644
index 0000000..66c5e97
--- /dev/null
+++ b/src/network/networkd-dhcp-prefix-delegation.c
@@ -0,0 +1,1294 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/ipv6_route.h>
+
+#include "sd-dhcp6-client.h"
+
+#include "hashmap.h"
+#include "in-addr-prefix-util.h"
+#include "networkd-address-generation.h"
+#include "networkd-address.h"
+#include "networkd-dhcp-prefix-delegation.h"
+#include "networkd-dhcp6.h"
+#include "networkd-link.h"
+#include "networkd-manager.h"
+#include "networkd-queue.h"
+#include "networkd-radv.h"
+#include "networkd-route.h"
+#include "networkd-setlink.h"
+#include "parse-util.h"
+#include "string-util.h"
+#include "strv.h"
+#include "tunnel.h"
+
+bool link_dhcp_pd_is_enabled(Link *link) {
+        assert(link);
+
+        if (!link->network)
+                return false;
+
+        return link->network->dhcp_pd;
+}
+
+bool dhcp_pd_is_uplink(Link *link, Link *target, bool accept_auto) {
+        assert(link);
+        assert(target);
+
+        if (!link_dhcp_pd_is_enabled(link))
+                return false;
+
+        if (link->network->dhcp_pd_uplink_name)
+                return streq_ptr(target->ifname, link->network->dhcp_pd_uplink_name) ||
+                        strv_contains(target->alternative_names, link->network->dhcp_pd_uplink_name);
+
+        if (link->network->dhcp_pd_uplink_index > 0)
+                return target->ifindex == link->network->dhcp_pd_uplink_index;
+
+        if (link->network->dhcp_pd_uplink_index == UPLINK_INDEX_SELF)
+                return link == target;
+
+        assert(link->network->dhcp_pd_uplink_index == UPLINK_INDEX_AUTO);
+        return accept_auto;
+}
+
+bool dhcp4_lease_has_pd_prefix(sd_dhcp_lease *lease) {
+        if (!lease)
+                return false;
+
+        return sd_dhcp_lease_get_6rd(lease, NULL, NULL, NULL, NULL, NULL) >= 0;
+}
+
+bool dhcp6_lease_has_pd_prefix(sd_dhcp6_lease *lease) {
+        uint32_t lifetime_preferred_sec, lifetime_valid_sec;
+        struct in6_addr pd_prefix;
+        uint8_t pd_prefix_len;
+
+        if (!lease)
+                return false;
+
+        sd_dhcp6_lease_reset_pd_prefix_iter(lease);
+
+        return sd_dhcp6_lease_get_pd(lease, &pd_prefix, &pd_prefix_len, &lifetime_preferred_sec, &lifetime_valid_sec) >= 0;
+}
+
+static void link_remove_dhcp_pd_subnet_prefix(Link *link, const struct in6_addr *prefix) {
+        void *key;
+
+        assert(link);
+        assert(link->manager);
+        assert(prefix);
+
+        if (hashmap_get(link->manager->links_by_dhcp_pd_subnet_prefix, prefix) != link)
+                return;
+
+        hashmap_remove2(link->manager->links_by_dhcp_pd_subnet_prefix, prefix, &key);
+        free(key);
+}
+
+static int link_add_dhcp_pd_subnet_prefix(Link *link, const struct in6_addr *prefix) {
+        _cleanup_free_ struct in6_addr *copy = NULL;
+        int r;
+
+        assert(link);
+        assert(prefix);
+
+        copy = newdup(struct in6_addr, prefix, 1);
+        if (!copy)
+                return -ENOMEM;
+
+        r = hashmap_ensure_put(&link->manager->links_by_dhcp_pd_subnet_prefix, &in6_addr_hash_ops_free, copy, link);
+        if (r < 0)
+                return r;
+        if (r > 0)
+                TAKE_PTR(copy);
+
+        return 0;
+}
+
+static int link_get_by_dhcp_pd_subnet_prefix(Manager *manager, const struct in6_addr *prefix, Link **ret) {
+        Link *link;
+
+        assert(manager);
+        assert(prefix);
+
+        link = hashmap_get(manager->links_by_dhcp_pd_subnet_prefix, prefix);
+        if (!link)
+                return -ENODEV;
+
+        if (ret)
+                *ret = link;
+        return 0;
+}
+
+static int dhcp_pd_get_assigned_subnet_prefix(Link *link, const struct in6_addr *pd_prefix, uint8_t pd_prefix_len, struct in6_addr *ret) {
+        assert(link);
+        assert(pd_prefix);
+
+        if (!link_dhcp_pd_is_enabled(link))
+                return -ENOENT;
+
+        if (link->network->dhcp_pd_assign) {
+                Address *address;
+
+                SET_FOREACH(address, link->addresses) {
+                        if (address->source != NETWORK_CONFIG_SOURCE_DHCP_PD)
+                                continue;
+                        assert(address->family == AF_INET6);
+
+                        if (in6_addr_prefix_covers(pd_prefix, pd_prefix_len, &address->in_addr.in6) <= 0)
+                                continue;
+
+                        if (ret) {
+                                struct in6_addr prefix = address->in_addr.in6;
+
+                                in6_addr_mask(&prefix, 64);
+                                *ret = prefix;
+                        }
+                        return 0;
+                }
+        } else {
+                Route *route;
+
+                SET_FOREACH(route, link->routes) {
+                        if (route->source != NETWORK_CONFIG_SOURCE_DHCP_PD)
+                                continue;
+                        assert(route->family == AF_INET6);
+
+                        if (in6_addr_prefix_covers(pd_prefix, pd_prefix_len, &route->dst.in6) > 0) {
+                                if (ret)
+                                        *ret = route->dst.in6;
+                                return 0;
+                        }
+                }
+        }
+
+        return -ENOENT;
+}
+
+int dhcp_pd_remove(Link *link, bool only_marked) {
+        int k, r = 0;
+
+        assert(link);
+        assert(link->manager);
+
+        if (!link_dhcp_pd_is_enabled(link))
+                return 0;
+
+        if (!only_marked)
+                link->dhcp_pd_configured = false;
+
+        if (!link->network->dhcp_pd_assign) {
+                Route *route;
+
+                SET_FOREACH(route, link->routes) {
+                        if (route->source != NETWORK_CONFIG_SOURCE_DHCP_PD)
+                                continue;
+                        if (only_marked && !route_is_marked(route))
+                                continue;
+
+                        if (link->radv)
+                                sd_radv_remove_prefix(link->radv, &route->dst.in6, 64);
+
+                        link_remove_dhcp_pd_subnet_prefix(link, &route->dst.in6);
+
+                        k = route_remove(route);
+                        if (k < 0)
+                                r = k;
+
+                        route_cancel_request(route, link);
+                }
+        } else {
+                Address *address;
+
+                SET_FOREACH(address, link->addresses) {
+                        struct in6_addr prefix;
+
+                        if (address->source != NETWORK_CONFIG_SOURCE_DHCP_PD)
+                                continue;
+                        if (only_marked && !address_is_marked(address))
+                                continue;
+
+                        prefix = address->in_addr.in6;
+                        in6_addr_mask(&prefix, 64);
+
+                        if (link->radv)
+                                sd_radv_remove_prefix(link->radv, &prefix, 64);
+
+                        link_remove_dhcp_pd_subnet_prefix(link, &prefix);
+
+                        k = address_remove(address);
+                        if (k < 0)
+                                r = k;
+
+                        address_cancel_request(address);
+                }
+        }
+
+        return r;
+}
+
+static int dhcp_pd_check_ready(Link *link);
+
+static int dhcp_pd_address_ready_callback(Address *address) {
+        Address *a;
+
+        assert(address);
+        assert(address->link);
+
+        SET_FOREACH(a, address->link->addresses)
+                if (a->source == NETWORK_CONFIG_SOURCE_DHCP_PD)
+                        a->callback = NULL;
+
+        return dhcp_pd_check_ready(address->link);
+}
+
+static int dhcp_pd_check_ready(Link *link) {
+        int r;
+
+        assert(link);
+        assert(link->network);
+
+        if (link->dhcp_pd_messages > 0) {
+                log_link_debug(link, "%s(): DHCP-PD addresses and routes are not set.", __func__);
+                return 0;
+        }
+
+        if (link->network->dhcp_pd_assign) {
+                bool has_ready = false;
+                Address *address;
+
+                SET_FOREACH(address, link->addresses) {
+                        if (address->source != NETWORK_CONFIG_SOURCE_DHCP_PD)
+                                continue;
+                        if (address_is_ready(address)) {
+                                has_ready = true;
+                                break;
+                        }
+                }
+
+                if (!has_ready) {
+                        SET_FOREACH(address, link->addresses)
+                                if (address->source == NETWORK_CONFIG_SOURCE_DHCP_PD)
+                                        address->callback = dhcp_pd_address_ready_callback;
+
+                        log_link_debug(link, "%s(): no DHCP-PD address is ready.", __func__);
+                        return 0;
+                }
+        }
+
+        link->dhcp_pd_configured = true;
+
+        log_link_debug(link, "DHCP-PD addresses and routes set.");
+
+        r = dhcp_pd_remove(link, /* only_marked = */ true);
+        if (r < 0)
+                return r;
+
+        link_check_ready(link);
+        return 1;
+}
+
+static int dhcp_pd_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) {
+        int r;
+
+        assert(link);
+
+        r = route_configure_handler_internal(rtnl, m, link, "Failed to add prefix route for DHCP delegated subnet prefix");
+        if (r <= 0)
+                return r;
+
+        r = dhcp_pd_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
+
+        return 1;
+}
+
+static int dhcp_pd_request_route(Link *link, const struct in6_addr *prefix, usec_t lifetime_usec) {
+        _cleanup_(route_freep) Route *route = NULL;
+        Route *existing;
+        int r;
+
+        assert(link);
+        assert(link->network);
+        assert(prefix);
+
+        if (link->network->dhcp_pd_assign)
+                return 0;
+
+        r = route_new(&route);
+        if (r < 0)
+                return r;
+
+        route->source = NETWORK_CONFIG_SOURCE_DHCP_PD;
+        route->family = AF_INET6;
+        route->dst.in6 = *prefix;
+        route->dst_prefixlen = 64;
+        route->protocol = RTPROT_DHCP;
+        route->priority = link->network->dhcp_pd_route_metric;
+        route->lifetime_usec = lifetime_usec;
+
+        if (route_get(NULL, link, route, &existing) < 0)
+                link->dhcp_pd_configured = false;
+        else
+                route_unmark(existing);
+
+        r = link_request_route(link, TAKE_PTR(route), true, &link->dhcp_pd_messages,
+                               dhcp_pd_route_handler, NULL);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to request DHCP-PD prefix route: %m");
+
+        return 0;
+}
+
+static int dhcp_pd_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Address *address) {
+        int r;
+
+        assert(link);
+
+        r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCP-PD address");
+        if (r <= 0)
+                return r;
+
+        r = dhcp_pd_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
+
+        return 1;
+}
+
+static void log_dhcp_pd_address(Link *link, const Address *address) {
+        assert(address);
+        assert(address->family == AF_INET6);
+
+        int log_level = address_get(link, address, NULL) >= 0 ? LOG_DEBUG : LOG_INFO;
+
+        if (log_level < log_get_max_level())
+                return;
+
+        log_link_full(link, log_level, "DHCP-PD address %s (valid %s, preferred %s)",
+                      IN6_ADDR_PREFIX_TO_STRING(&address->in_addr.in6, address->prefixlen),
+                      FORMAT_LIFETIME(address->lifetime_valid_usec),
+                      FORMAT_LIFETIME(address->lifetime_preferred_usec));
+}
+
+static int dhcp_pd_request_address(
+                Link *link,
+                const struct in6_addr *prefix,
+                usec_t lifetime_preferred_usec,
+                usec_t lifetime_valid_usec) {
+
+        _cleanup_set_free_ Set *addresses = NULL;
+        struct in6_addr *a;
+        int r;
+
+        assert(link);
+        assert(link->network);
+        assert(prefix);
+
+        if (!link->network->dhcp_pd_assign)
+                return 0;
+
+        r = dhcp_pd_generate_addresses(link, prefix, &addresses);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to generate addresses for acquired DHCP delegated prefix: %m");
+
+        SET_FOREACH(a, addresses) {
+                _cleanup_(address_freep) Address *address = NULL;
+                Address *existing;
+
+                r = address_new(&address);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Failed to allocate address for DHCP delegated prefix: %m");
+
+                address->source = NETWORK_CONFIG_SOURCE_DHCP_PD;
+                address->family = AF_INET6;
+                address->in_addr.in6 = *a;
+                address->prefixlen = 64;
+                address->lifetime_preferred_usec = lifetime_preferred_usec;
+                address->lifetime_valid_usec = lifetime_valid_usec;
+                SET_FLAG(address->flags, IFA_F_MANAGETEMPADDR, link->network->dhcp_pd_manage_temporary_address);
+                address->route_metric = link->network->dhcp_pd_route_metric;
+
+                log_dhcp_pd_address(link, address);
+
+                r = free_and_strdup_warn(&address->netlabel, link->network->dhcp_pd_netlabel);
+                if (r < 0)
+                        return r;
+
+                if (address_get(link, address, &existing) < 0)
+                        link->dhcp_pd_configured = false;
+                else
+                        address_unmark(existing);
+
+                r = link_request_address(link, TAKE_PTR(address), true, &link->dhcp_pd_messages,
+                                         dhcp_pd_address_handler, NULL);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Failed to request DHCP delegated prefix address: %m");
+        }
+
+        return 0;
+}
+
+static int dhcp_pd_calculate_subnet_prefix(
+                const struct in6_addr *pd_prefix,
+                uint8_t pd_prefix_len,
+                uint64_t subnet_id,
+                struct in6_addr *ret) {
+
+        struct in6_addr prefix;
+
+        assert(pd_prefix);
+        assert(pd_prefix_len <= 64);
+        assert(ret);
+
+        if (subnet_id >= UINT64_C(1) << (64 - pd_prefix_len))
+                return -ERANGE;
+
+        prefix = *pd_prefix;
+
+        if (pd_prefix_len < 32)
+                prefix.s6_addr32[0] |= htobe32(subnet_id >> 32);
+
+        prefix.s6_addr32[1] |= htobe32(subnet_id & 0xffffffff);
+
+        *ret = prefix;
+        return 0;
+}
+
+static int dhcp_pd_get_preferred_subnet_prefix(
+                Link *link,
+                const struct in6_addr *pd_prefix,
+                uint8_t pd_prefix_len,
+                struct in6_addr *ret) {
+
+        struct in6_addr prefix;
+        Link *assigned_link;
+        int r;
+
+        assert(link);
+        assert(link->manager);
+        assert(link->network);
+        assert(pd_prefix);
+
+        if (link->network->dhcp_pd_subnet_id >= 0) {
+                /* If the link has a preference for a particular subnet id try to allocate that */
+
+                r = dhcp_pd_calculate_subnet_prefix(pd_prefix, pd_prefix_len, link->network->dhcp_pd_subnet_id, &prefix);
+                if (r < 0)
+                        return log_link_warning_errno(link, r,
+                                                      "subnet id %" PRIi64 " is out of range. Only have %" PRIu64 " subnets.",
+                                                      link->network->dhcp_pd_subnet_id, UINT64_C(1) << (64 - pd_prefix_len));
+
+                *ret = prefix;
+                return 0;
+        }
+
+        if (dhcp_pd_get_assigned_subnet_prefix(link, pd_prefix, pd_prefix_len, ret) >= 0)
+                return 0;
+
+        for (uint64_t n = 0; ; n++) {
+                /* If we do not have an allocation preference just iterate
+                 * through the address space and return the first free prefix. */
+
+                r = dhcp_pd_calculate_subnet_prefix(pd_prefix, pd_prefix_len, n, &prefix);
+                if (r < 0)
+                        return log_link_warning_errno(link, r,
+                                                      "Couldn't find a suitable prefix. Ran out of address space.");
+
+                /* Do not use explicitly requested subnet IDs. Note that the corresponding link may not
+                 * appear yet. So, we need to check the ID is not used in any .network files. */
+                if (set_contains(link->manager->dhcp_pd_subnet_ids, &n))
+                        continue;
+
+                /* Check that the prefix is not assigned to another link. */
+                if (link_get_by_dhcp_pd_subnet_prefix(link->manager, &prefix, &assigned_link) < 0 ||
+                    assigned_link == link)
+                        break;
+        }
+
+        r = link_add_dhcp_pd_subnet_prefix(link, &prefix);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to save acquired free subnet prefix: %m");
+
+        *ret = prefix;
+        return 0;
+}
+
+static int dhcp_pd_assign_subnet_prefix(
+                Link *link,
+                const struct in6_addr *pd_prefix,
+                uint8_t pd_prefix_len,
+                usec_t lifetime_preferred_usec,
+                usec_t lifetime_valid_usec,
+                bool is_uplink) {
+
+        struct in6_addr prefix;
+        int r;
+
+        assert(link);
+        assert(link->network);
+        assert(pd_prefix);
+
+        r = dhcp_pd_get_preferred_subnet_prefix(link, pd_prefix, pd_prefix_len, &prefix);
+        if (r < 0)
+                return r == -ERANGE ? 0 : r;
+
+        const char *pretty = IN6_ADDR_PREFIX_TO_STRING(&prefix, 64);
+
+        if (link_radv_enabled(link) && link->network->dhcp_pd_announce) {
+                if (is_uplink)
+                        log_link_debug(link, "Ignoring Announce= setting on upstream interface.");
+                else {
+                        r = radv_add_prefix(link, &prefix, 64, lifetime_preferred_usec, lifetime_valid_usec);
+                        if (r < 0)
+                                return log_link_warning_errno(link, r,
+                                                              "Failed to assign/update prefix %s to IPv6 Router Advertisement: %m",
+                                                              pretty);
+                }
+        }
+
+        r = dhcp_pd_request_route(link, &prefix, lifetime_valid_usec);
+        if (r < 0)
+                return log_link_warning_errno(link, r,
+                                              "Failed to assign/update route for prefix %s: %m", pretty);
+
+        r = dhcp_pd_request_address(link, &prefix, lifetime_preferred_usec, lifetime_valid_usec);
+        if (r < 0)
+                return log_link_warning_errno(link, r,
+                                              "Failed to assign/update address for prefix %s: %m", pretty);
+
+        log_link_debug(link, "Assigned prefix %s", pretty);
+        return 1;
+}
+
+static int dhcp_pd_prepare(Link *link) {
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return 0;
+
+        if (!link_dhcp_pd_is_enabled(link))
+                return 0;
+
+        if (link_radv_enabled(link) && link->network->dhcp_pd_announce && !link->radv)
+                return 0;
+
+        link_mark_addresses(link, NETWORK_CONFIG_SOURCE_DHCP_PD);
+        link_mark_routes(link, NETWORK_CONFIG_SOURCE_DHCP_PD);
+
+        return 1;
+}
+
+static int dhcp_pd_finalize(Link *link) {
+        int r;
+
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return 0;
+
+        if (link->dhcp_pd_messages == 0) {
+                link->dhcp_pd_configured = false;
+
+                r = dhcp_pd_remove(link, /* only_marked = */ true);
+                if (r < 0)
+                        return r;
+        }
+
+        if (!link->dhcp_pd_configured)
+                link_set_state(link, LINK_STATE_CONFIGURING);
+
+        link_check_ready(link);
+        return 0;
+}
+
+void dhcp_pd_prefix_lost(Link *uplink) {
+        Route *route;
+        Link *link;
+        int r;
+
+        assert(uplink);
+        assert(uplink->manager);
+
+        HASHMAP_FOREACH(link, uplink->manager->links_by_index) {
+                if (!dhcp_pd_is_uplink(link, uplink, /* accept_auto = */ true))
+                        continue;
+
+                r = dhcp_pd_remove(link, /* only_marked = */ false);
+                if (r < 0)
+                        link_enter_failed(link);
+        }
+
+        SET_FOREACH(route, uplink->manager->routes) {
+                if (!IN_SET(route->source, NETWORK_CONFIG_SOURCE_DHCP4, NETWORK_CONFIG_SOURCE_DHCP6))
+                        continue;
+                if (route->family != AF_INET6)
+                        continue;
+                if (route->type != RTN_UNREACHABLE)
+                        continue;
+                if (!set_contains(uplink->dhcp_pd_prefixes,
+                                  &(struct in_addr_prefix) {
+                                          .family = AF_INET6,
+                                          .prefixlen = route->dst_prefixlen,
+                                          .address = route->dst }))
+                        continue;
+
+                (void) route_remove(route);
+
+                route_cancel_request(route, uplink);
+        }
+
+        set_clear(uplink->dhcp_pd_prefixes);
+}
+
+void dhcp4_pd_prefix_lost(Link *uplink) {
+        Link *tunnel;
+
+        dhcp_pd_prefix_lost(uplink);
+
+        if (uplink->dhcp4_6rd_tunnel_name &&
+            link_get_by_name(uplink->manager, uplink->dhcp4_6rd_tunnel_name, &tunnel) >= 0)
+                (void) link_remove(tunnel);
+}
+
+static int dhcp4_unreachable_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) {
+        int r;
+
+        assert(link);
+
+        r = route_configure_handler_internal(rtnl, m, link, "Failed to set unreachable route for DHCPv4 delegated prefix");
+        if (r <= 0)
+                return r;
+
+        r = dhcp4_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
+
+        return 1;
+}
+
+static int dhcp6_unreachable_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) {
+        int r;
+
+        assert(link);
+
+        r = route_configure_handler_internal(rtnl, m, link, "Failed to set unreachable route for DHCPv6 delegated prefix");
+        if (r <= 0)
+                return r;
+
+        r = dhcp6_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
+
+        return 1;
+}
+
+static int dhcp_request_unreachable_route(
+                Link *link,
+                const struct in6_addr *addr,
+                uint8_t prefixlen,
+                usec_t lifetime_usec,
+                NetworkConfigSource source,
+                const union in_addr_union *server_address,
+                unsigned *counter,
+                route_netlink_handler_t callback) {
+
+        _cleanup_(route_freep) Route *route = NULL;
+        Route *existing;
+        int r;
+
+        assert(link);
+        assert(addr);
+        assert(IN_SET(source, NETWORK_CONFIG_SOURCE_DHCP4, NETWORK_CONFIG_SOURCE_DHCP6));
+        assert(server_address);
+        assert(counter);
+        assert(callback);
+
+        if (prefixlen >= 64) {
+                log_link_debug(link, "Not adding a blocking route for DHCP delegated prefix %s since the prefix has length >= 64.",
+                               IN6_ADDR_PREFIX_TO_STRING(addr, prefixlen));
+                return 0;
+        }
+
+        r = route_new(&route);
+        if (r < 0)
+                return log_oom();
+
+        route->source = source;
+        route->provider = *server_address;
+        route->family = AF_INET6;
+        route->dst.in6 = *addr;
+        route->dst_prefixlen = prefixlen;
+        route->type = RTN_UNREACHABLE;
+        route->protocol = RTPROT_DHCP;
+        route->priority = IP6_RT_PRIO_USER;
+        route->lifetime_usec = lifetime_usec;
+
+        if (route_get(link->manager, NULL, route, &existing) < 0)
+                link->dhcp6_configured = false;
+        else
+                route_unmark(existing);
+
+        r = link_request_route(link, TAKE_PTR(route), true, counter, callback, NULL);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to request unreachable route for DHCP delegated prefix %s: %m",
+                                            IN6_ADDR_PREFIX_TO_STRING(addr, prefixlen));
+
+        return 0;
+}
+
+static int dhcp4_request_unreachable_route(
+                Link *link,
+                const struct in6_addr *addr,
+                uint8_t prefixlen,
+                usec_t lifetime_usec,
+                const union in_addr_union *server_address) {
+
+        return dhcp_request_unreachable_route(link, addr, prefixlen, lifetime_usec,
+                                              NETWORK_CONFIG_SOURCE_DHCP4, server_address,
+                                              &link->dhcp4_messages, dhcp4_unreachable_route_handler);
+}
+
+static int dhcp6_request_unreachable_route(
+                Link *link,
+                const struct in6_addr *addr,
+                uint8_t prefixlen,
+                usec_t lifetime_usec,
+                const union in_addr_union *server_address) {
+
+        return dhcp_request_unreachable_route(link, addr, prefixlen, lifetime_usec,
+                                              NETWORK_CONFIG_SOURCE_DHCP6, server_address,
+                                              &link->dhcp6_messages, dhcp6_unreachable_route_handler);
+}
+
+static int dhcp_pd_prefix_add(Link *link, const struct in6_addr *prefix, uint8_t prefixlen) {
+        struct in_addr_prefix *p;
+        int r;
+
+        assert(link);
+        assert(prefix);
+
+        p = new(struct in_addr_prefix, 1);
+        if (!p)
+                return log_oom();
+
+        *p = (struct in_addr_prefix) {
+                .family = AF_INET6,
+                .prefixlen = prefixlen,
+                .address.in6 = *prefix,
+        };
+
+        int log_level = set_contains(link->dhcp_pd_prefixes, p) ? LOG_DEBUG :
+                               prefixlen > 64 || prefixlen < 48 ? LOG_WARNING : LOG_INFO;
+        log_link_full(link,
+                      log_level,
+                      "DHCP: received delegated prefix %s%s",
+                      IN6_ADDR_PREFIX_TO_STRING(prefix, prefixlen),
+                      prefixlen > 64 ? " with prefix length > 64, ignoring." :
+                      prefixlen < 48 ? " with prefix length < 48, looks unusual.": "");
+
+        /* Store PD prefix even if prefixlen > 64, not to make logged at warning level so frequently. */
+        r = set_ensure_consume(&link->dhcp_pd_prefixes, &in_addr_prefix_hash_ops_free, p);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to store DHCP delegated prefix %s: %m",
+                                            IN6_ADDR_PREFIX_TO_STRING(prefix, prefixlen));
+        return 0;
+}
+
+static int dhcp4_pd_request_default_gateway_on_6rd_tunnel(Link *link, const struct in_addr *br_address, usec_t lifetime_usec) {
+        _cleanup_(route_freep) Route *route = NULL;
+        Route *existing;
+        int r;
+
+        assert(link);
+        assert(br_address);
+
+        r = route_new(&route);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to allocate default gateway for DHCP delegated prefix: %m");
+
+        route->source = NETWORK_CONFIG_SOURCE_DHCP_PD;
+        route->family = AF_INET6;
+        route->gw_family = AF_INET6;
+        route->gw.in6.s6_addr32[3] = br_address->s_addr;
+        route->scope = RT_SCOPE_UNIVERSE;
+        route->protocol = RTPROT_DHCP;
+        route->priority = IP6_RT_PRIO_USER;
+        route->lifetime_usec = lifetime_usec;
+
+        if (route_get(NULL, link, route, &existing) < 0) /* This is a new route. */
+                link->dhcp_pd_configured = false;
+        else
+                route_unmark(existing);
+
+        r = link_request_route(link, TAKE_PTR(route), true, &link->dhcp_pd_messages,
+                               dhcp_pd_route_handler, NULL);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to request default gateway for DHCP delegated prefix: %m");
+
+        return 0;
+}
+
+static void dhcp4_calculate_pd_prefix(
+                const struct in_addr *ipv4address,
+                uint8_t ipv4masklen,
+                const struct in6_addr *sixrd_prefix,
+                uint8_t sixrd_prefixlen,
+                struct in6_addr *ret_pd_prefix,
+                uint8_t *ret_pd_prefixlen) {
+
+        struct in6_addr pd_prefix;
+
+        assert(ipv4address);
+        assert(ipv4masklen <= 32);
+        assert(sixrd_prefix);
+        assert(32 - ipv4masklen + sixrd_prefixlen <= 128);
+        assert(ret_pd_prefix);
+
+        pd_prefix = *sixrd_prefix;
+        for (unsigned i = 0; i < (unsigned) (32 - ipv4masklen); i++)
+                if (ipv4address->s_addr & htobe32(UINT32_C(1) << (32 - ipv4masklen - i - 1)))
+                        pd_prefix.s6_addr[(i + sixrd_prefixlen) / 8] |= 1 << (7 - (i + sixrd_prefixlen) % 8);
+
+        *ret_pd_prefix = pd_prefix;
+        if (ret_pd_prefixlen)
+                *ret_pd_prefixlen = 32 - ipv4masklen + sixrd_prefixlen;
+}
+
+static int dhcp4_pd_assign_subnet_prefix(Link *link, Link *uplink) {
+        uint8_t ipv4masklen, sixrd_prefixlen, pd_prefixlen;
+        struct in6_addr sixrd_prefix, pd_prefix;
+        const struct in_addr *br_addresses;
+        struct in_addr ipv4address;
+        uint32_t lifetime_sec;
+        usec_t lifetime_usec, now_usec;
+        int r;
+
+        assert(link);
+        assert(uplink);
+        assert(uplink->manager);
+        assert(uplink->dhcp_lease);
+
+        r = sd_dhcp_lease_get_address(uplink->dhcp_lease, &ipv4address);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get DHCPv4 address: %m");
+
+        r = sd_dhcp_lease_get_lifetime(uplink->dhcp_lease, &lifetime_sec);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get lifetime of DHCPv4 lease: %m");
+
+        assert_se(sd_event_now(uplink->manager->event, CLOCK_BOOTTIME, &now_usec) >= 0);
+        lifetime_usec = sec_to_usec(lifetime_sec, now_usec);
+
+        r = sd_dhcp_lease_get_6rd(uplink->dhcp_lease, &ipv4masklen, &sixrd_prefixlen, &sixrd_prefix, &br_addresses, NULL);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get DHCPv4 6rd option: %m");
+
+        dhcp4_calculate_pd_prefix(&ipv4address, ipv4masklen, &sixrd_prefix, sixrd_prefixlen, &pd_prefix, &pd_prefixlen);
+
+        if (pd_prefixlen > 64)
+                return 0;
+
+        r = dhcp_pd_prepare(link);
+        if (r <= 0)
+                return r;
+
+        if (streq_ptr(uplink->dhcp4_6rd_tunnel_name, link->ifname)) {
+                r = dhcp4_pd_request_default_gateway_on_6rd_tunnel(link, &br_addresses[0], lifetime_usec);
+                if (r < 0)
+                        return r;
+        }
+
+        r = dhcp_pd_assign_subnet_prefix(link, &pd_prefix, pd_prefixlen, lifetime_usec, lifetime_usec, /* is_uplink = */ false);
+        if (r < 0)
+                return r;
+
+        return dhcp_pd_finalize(link);
+}
+
+static int dhcp4_pd_6rd_tunnel_create_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+        int r;
+
+        assert(m);
+        assert(link);
+        assert(link->manager);
+        assert(link->dhcp4_6rd_tunnel_name);
+
+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 0;
+
+        r = sd_netlink_message_get_errno(m);
+        if (r < 0) {
+                log_link_message_warning_errno(link, m, r, "Failed to create tunnel device for DHCPv4 6rd");
+                link_enter_failed(link);
+                return 0;
+        }
+
+        return 0;
+}
+
+int dhcp4_pd_prefix_acquired(Link *uplink) {
+        _cleanup_free_ char *tunnel_name = NULL;
+        uint8_t ipv4masklen, sixrd_prefixlen, pd_prefixlen;
+        struct in6_addr sixrd_prefix, pd_prefix;
+        struct in_addr ipv4address;
+        union in_addr_union server_address;
+        const struct in_addr *br_addresses;
+        uint32_t lifetime_sec;
+        usec_t lifetime_usec, now_usec;
+        Link *link;
+        int r;
+
+        assert(uplink);
+        assert(uplink->manager);
+        assert(uplink->dhcp_lease);
+
+        r = sd_dhcp_lease_get_address(uplink->dhcp_lease, &ipv4address);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get DHCPv4 address: %m");
+
+        r = sd_dhcp_lease_get_lifetime(uplink->dhcp_lease, &lifetime_sec);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get lifetime of DHCPv4 lease: %m");
+
+        assert_se(sd_event_now(uplink->manager->event, CLOCK_BOOTTIME, &now_usec) >= 0);
+        lifetime_usec = sec_to_usec(lifetime_sec, now_usec);
+
+        r = sd_dhcp_lease_get_server_identifier(uplink->dhcp_lease, &server_address.in);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get server address of DHCPv4 lease: %m");
+
+        r = sd_dhcp_lease_get_6rd(uplink->dhcp_lease, &ipv4masklen, &sixrd_prefixlen, &sixrd_prefix, &br_addresses, NULL);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get DHCPv4 6rd option: %m");
+
+        if (DEBUG_LOGGING)
+                log_link_debug(uplink, "DHCPv4: 6rd option is acquired: IPv4_masklen=%u, 6rd_prefix=%s, br_address="IPV4_ADDRESS_FMT_STR,
+                               ipv4masklen,
+                               IN6_ADDR_PREFIX_TO_STRING(&sixrd_prefix, sixrd_prefixlen),
+                               IPV4_ADDRESS_FMT_VAL(*br_addresses));
+
+        /* Calculate PD prefix */
+        dhcp4_calculate_pd_prefix(&ipv4address, ipv4masklen, &sixrd_prefix, sixrd_prefixlen, &pd_prefix, &pd_prefixlen);
+
+        /* Register and log PD prefix */
+        r = dhcp_pd_prefix_add(uplink, &pd_prefix, pd_prefixlen);
+        if (r < 0)
+                return r;
+
+        /* Request unreachable route */
+        r = dhcp4_request_unreachable_route(uplink, &pd_prefix, pd_prefixlen, lifetime_usec, &server_address);
+        if (r < 0)
+                return r;
+
+        /* Generate 6rd SIT tunnel device name. */
+        r = dhcp4_pd_create_6rd_tunnel_name(uplink, &tunnel_name);
+        if (r < 0)
+                return r;
+
+        /* Remove old tunnel device if exists. */
+        if (!streq_ptr(uplink->dhcp4_6rd_tunnel_name, tunnel_name)) {
+                Link *old_tunnel;
+
+                if (uplink->dhcp4_6rd_tunnel_name &&
+                    link_get_by_name(uplink->manager, uplink->dhcp4_6rd_tunnel_name, &old_tunnel) >= 0)
+                        (void) link_remove(old_tunnel);
+
+                free_and_replace(uplink->dhcp4_6rd_tunnel_name, tunnel_name);
+        }
+
+        /* Create 6rd SIT tunnel device if it does not exist yet. */
+        if (link_get_by_name(uplink->manager, uplink->dhcp4_6rd_tunnel_name, NULL) < 0) {
+                r = dhcp4_pd_create_6rd_tunnel(uplink, dhcp4_pd_6rd_tunnel_create_handler);
+                if (r < 0)
+                        return r;
+        }
+
+        /* Then, assign subnet prefixes to downstream interfaces. */
+        HASHMAP_FOREACH(link, uplink->manager->links_by_index) {
+                if (!dhcp_pd_is_uplink(link, uplink, /* accept_auto = */ true))
+                        continue;
+
+                r = dhcp4_pd_assign_subnet_prefix(link, uplink);
+                if (r < 0) {
+                        /* When failed on the upstream interface (i.e., the case link == uplink),
+                         * immediately abort the assignment of the prefixes. As, the all assigned
+                         * prefixes will be dropped soon in link_enter_failed(), and it is meaningless
+                         * to continue the assignment. */
+                        if (link == uplink)
+                                return r;
+
+                        link_enter_failed(link);
+                }
+        }
+
+        return 0;
+}
+
+static int dhcp6_pd_assign_subnet_prefixes(Link *link, Link *uplink) {
+        usec_t timestamp_usec;
+        int r;
+
+        assert(link);
+        assert(uplink);
+        assert(uplink->dhcp6_lease);
+
+        r = dhcp_pd_prepare(link);
+        if (r <= 0)
+                return r;
+
+        r = sd_dhcp6_lease_get_timestamp(uplink->dhcp6_lease, CLOCK_BOOTTIME, &timestamp_usec);
+        if (r < 0)
+                return r;
+
+        for (sd_dhcp6_lease_reset_pd_prefix_iter(uplink->dhcp6_lease);;) {
+                uint32_t lifetime_preferred_sec, lifetime_valid_sec;
+                struct in6_addr pd_prefix;
+                uint8_t pd_prefix_len;
+
+                r = sd_dhcp6_lease_get_pd(uplink->dhcp6_lease, &pd_prefix, &pd_prefix_len,
+                                          &lifetime_preferred_sec, &lifetime_valid_sec);
+                if (r < 0)
+                        break;
+
+                if (pd_prefix_len > 64)
+                        continue;
+
+                /* Mask prefix for safety. */
+                r = in6_addr_mask(&pd_prefix, pd_prefix_len);
+                if (r < 0)
+                        return r;
+
+                r = dhcp_pd_assign_subnet_prefix(link, &pd_prefix, pd_prefix_len,
+                                                 sec_to_usec(lifetime_preferred_sec, timestamp_usec),
+                                                 sec_to_usec(lifetime_valid_sec, timestamp_usec),
+                                                 /* is_uplink = */ link == uplink);
+                if (r < 0)
+                        return r;
+        }
+
+        return dhcp_pd_finalize(link);
+}
+
+int dhcp6_pd_prefix_acquired(Link *uplink) {
+        union in_addr_union server_address;
+        usec_t timestamp_usec;
+        Link *link;
+        int r;
+
+        assert(uplink);
+        assert(uplink->dhcp6_lease);
+
+        r = sd_dhcp6_lease_get_server_address(uplink->dhcp6_lease, &server_address.in6);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get server address of DHCPv6 lease: %m");
+
+        r = sd_dhcp6_lease_get_timestamp(uplink->dhcp6_lease, CLOCK_BOOTTIME, &timestamp_usec);
+        if (r < 0)
+                return log_link_warning_errno(uplink, r, "Failed to get timestamp of DHCPv6 lease: %m");
+
+        /* First, logs acquired prefixes and request unreachable routes. */
+        for (sd_dhcp6_lease_reset_pd_prefix_iter(uplink->dhcp6_lease);;) {
+                uint32_t lifetime_preferred_sec, lifetime_valid_sec;
+                struct in6_addr pd_prefix;
+                uint8_t pd_prefix_len;
+
+                r = sd_dhcp6_lease_get_pd(uplink->dhcp6_lease, &pd_prefix, &pd_prefix_len,
+                                          &lifetime_preferred_sec, &lifetime_valid_sec);
+                if (r < 0)
+                        break;
+
+                /* Mask prefix for safety. */
+                r = in6_addr_mask(&pd_prefix, pd_prefix_len);
+                if (r < 0)
+                        return log_link_error_errno(uplink, r, "Failed to mask DHCPv6 delegated prefix: %m");
+
+                r = dhcp_pd_prefix_add(uplink, &pd_prefix, pd_prefix_len);
+                if (r < 0)
+                        return r;
+
+                r = dhcp6_request_unreachable_route(uplink, &pd_prefix, pd_prefix_len,
+                                                    sec_to_usec(lifetime_valid_sec, timestamp_usec),
+                                                    &server_address);
+                if (r < 0)
+                        return r;
+        }
+
+        /* Then, assign subnet prefixes. */
+        HASHMAP_FOREACH(link, uplink->manager->links_by_index) {
+                if (!dhcp_pd_is_uplink(link, uplink, /* accept_auto = */ true))
+                        continue;
+
+                r = dhcp6_pd_assign_subnet_prefixes(link, uplink);
+                if (r < 0) {
+                        /* When failed on the upstream interface (i.e., the case link == uplink),
+                         * immediately abort the assignment of the prefixes. As, the all assigned
+                         * prefixes will be dropped soon in link_enter_failed(), and it is meaningless
+                         * to continue the assignment. */
+                        if (link == uplink)
+                                return r;
+
+                        link_enter_failed(link);
+                }
+        }
+
+        return 0;
+}
+
+static bool dhcp4_pd_uplink_is_ready(Link *link) {
+        assert(link);
+
+        if (!link->network)
+                return false;
+
+        if (!link->network->dhcp_use_6rd)
+                return false;
+
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return false;
+
+        if (!link->dhcp_client)
+                return false;
+
+        if (sd_dhcp_client_is_running(link->dhcp_client) <= 0)
+                return false;
+
+        if (!link->dhcp_lease)
+                return false;
+
+        return dhcp4_lease_has_pd_prefix(link->dhcp_lease);
+}
+
+static bool dhcp6_pd_uplink_is_ready(Link *link) {
+        assert(link);
+
+        if (!link->network)
+                return false;
+
+        if (!link->network->dhcp6_use_pd_prefix)
+                return false;
+
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return false;
+
+        if (!link->dhcp6_client)
+                return false;
+
+        if (sd_dhcp6_client_is_running(link->dhcp6_client) <= 0)
+                return false;
+
+        if (!link->dhcp6_lease)
+                return false;
+
+        return dhcp6_lease_has_pd_prefix(link->dhcp6_lease);
+}
+
+int dhcp_pd_find_uplink(Link *link, Link **ret) {
+        Link *uplink = NULL;
+        int r = 0;
+
+        assert(link);
+        assert(link->manager);
+        assert(link_dhcp_pd_is_enabled(link));
+        assert(ret);
+
+        if (link->network->dhcp_pd_uplink_name)
+                r = link_get_by_name(link->manager, link->network->dhcp_pd_uplink_name, &uplink);
+        else if (link->network->dhcp_pd_uplink_index > 0)
+                r = link_get_by_index(link->manager, link->network->dhcp_pd_uplink_index, &uplink);
+        else if (link->network->dhcp_pd_uplink_index == UPLINK_INDEX_SELF)
+                uplink = link;
+        if (r < 0)
+                return r;
+
+        if (uplink) {
+                if (dhcp4_pd_uplink_is_ready(uplink)) {
+                        *ret = uplink;
+                        return AF_INET;
+                }
+
+                if (dhcp6_pd_uplink_is_ready(uplink)) {
+                        *ret = uplink;
+                        return AF_INET6;
+                }
+
+                return -EBUSY;
+        }
+
+        HASHMAP_FOREACH(uplink, link->manager->links_by_index) {
+                /* Assume that there exists at most one link which acquired delegated prefixes. */
+                if (dhcp4_pd_uplink_is_ready(uplink)) {
+                        *ret = uplink;
+                        return AF_INET;
+                }
+
+                if (dhcp6_pd_uplink_is_ready(uplink)) {
+                        *ret = uplink;
+                        return AF_INET6;
+                }
+        }
+
+        return -ENODEV;
+}
+
+int dhcp_request_prefix_delegation(Link *link) {
+        Link *uplink;
+        int r;
+
+        assert(link);
+
+        if (!link_dhcp_pd_is_enabled(link))
+                return 0;
+
+        r = dhcp_pd_find_uplink(link, &uplink);
+        if (r < 0)
+                return 0;
+
+        log_link_debug(link, "Requesting subnets of delegated prefixes acquired by DHCPv%c client on %s",
+                       r == AF_INET ? '4' : '6', uplink->ifname);
+
+        return r == AF_INET ?
+                dhcp4_pd_assign_subnet_prefix(link, uplink) :
+                dhcp6_pd_assign_subnet_prefixes(link, uplink);
+}
+
+int config_parse_dhcp_pd_subnet_id(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        int64_t *p = ASSERT_PTR(data);
+        uint64_t t;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue) || streq(rvalue, "auto")) {
+                *p = -1;
+                return 0;
+        }
+
+        r = safe_atoux64(rvalue, &t);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+        if (t > INT64_MAX) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid subnet id '%s', ignoring assignment.",
+                           rvalue);
+                return 0;
+        }
+
+        *p = (int64_t) t;
+
+        return 0;
+}
diff --git a/src/network/networkd-dhcp-prefix-delegation.h b/src/network/networkd-dhcp-prefix-delegation.h
new file mode 100644
index 0000000..d67f919
--- /dev/null
+++ b/src/network/networkd-dhcp-prefix-delegation.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+#include "sd-dhcp-lease.h"
+#include "sd-dhcp6-lease.h"
+
+#include "conf-parser.h"
+
+typedef struct Link Link;
+
+bool link_dhcp_pd_is_enabled(Link *link);
+bool dhcp_pd_is_uplink(Link *link, Link *target, bool accept_auto);
+int dhcp_pd_find_uplink(Link *link, Link **ret);
+bool dhcp4_lease_has_pd_prefix(sd_dhcp_lease *lease);
+bool dhcp6_lease_has_pd_prefix(sd_dhcp6_lease *lease);
+int dhcp_pd_remove(Link *link, bool only_marked);
+int dhcp_request_prefix_delegation(Link *link);
+int dhcp4_pd_prefix_acquired(Link *uplink);
+int dhcp6_pd_prefix_acquired(Link *uplink);
+void dhcp_pd_prefix_lost(Link *uplink);
+void dhcp4_pd_prefix_lost(Link *uplink);
+
+CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_pd_subnet_id);
diff --git a/src/network/networkd-dhcp-server-bus.c b/src/network/networkd-dhcp-server-bus.c
index a38cb99..e3397c3 100644
--- a/src/network/networkd-dhcp-server-bus.c
+++ b/src/network/networkd-dhcp-server-bus.c
@@ -1,7 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "sd-dhcp-server.h"
-
 #include "alloc-util.h"
 #include "bus-common-errors.h"
 #include "bus-util.h"
@@ -19,13 +17,12 @@
                 sd_bus_message *reply,
                 void *userdata,
                 sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         sd_dhcp_server *s;
         DHCPLease *lease;
         int r;
 
         assert(reply);
-        assert(l);
 
         s = l->dhcp_server;
         if (!s)
@@ -38,7 +35,7 @@
         if (r < 0)
                 return r;
 
-        HASHMAP_FOREACH(lease, s->leases_by_client_id) {
+        HASHMAP_FOREACH(lease, s->bound_leases_by_client_id) {
                 r = sd_bus_message_open_container(reply, 'r', "uayayayayt");
                 if (r < 0)
                         return r;
@@ -98,19 +95,23 @@
 }
 
 void dhcp_server_callback(sd_dhcp_server *s, uint64_t event, void *data) {
-        Link *l = data;
-
-        assert(l);
+        Link *l = ASSERT_PTR(data);
 
         if (event & SD_DHCP_SERVER_EVENT_LEASE_CHANGED)
                 (void) dhcp_server_emit_changed(l, "Leases", NULL);
 }
 
-
-const sd_bus_vtable dhcp_server_vtable[] = {
+static const sd_bus_vtable dhcp_server_vtable[] = {
         SD_BUS_VTABLE_START(0),
 
         SD_BUS_PROPERTY("Leases", "a(uayayayayt)", property_get_leases, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
 
         SD_BUS_VTABLE_END
 };
+
+const BusObjectImplementation dhcp_server_object = {
+        "/org/freedesktop/network1/link",
+        "org.freedesktop.network1.DHCPServer",
+        .fallback_vtables = BUS_FALLBACK_VTABLES({dhcp_server_vtable, link_object_find}),
+        .node_enumerator = link_node_enumerator,
+};
diff --git a/src/network/networkd-dhcp-server-bus.h b/src/network/networkd-dhcp-server-bus.h
index 7191478..f52be82 100644
--- a/src/network/networkd-dhcp-server-bus.h
+++ b/src/network/networkd-dhcp-server-bus.h
@@ -2,8 +2,10 @@
 #pragma once
 
 #include "sd-bus.h"
-#include "networkd-link.h"
+#include "sd-dhcp-server.h"
 
-extern const sd_bus_vtable dhcp_server_vtable[];
+#include "bus-object.h"
+
+extern const BusObjectImplementation dhcp_server_object;
 
 void dhcp_server_callback(sd_dhcp_server *server, uint64_t event, void *data);
diff --git a/src/network/networkd-dhcp-server-static-lease.c b/src/network/networkd-dhcp-server-static-lease.c
index 0d73d32..8e7eec6 100644
--- a/src/network/networkd-dhcp-server-static-lease.c
+++ b/src/network/networkd-dhcp-server-static-lease.c
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
 #include "ether-addr-util.h"
@@ -7,7 +7,7 @@
 #include "networkd-network.h"
 #include "networkd-util.h"
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(DHCPStaticLease, dhcp_static_lease_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(DHCPStaticLease, dhcp_static_lease_free);
 
 DHCPStaticLease *dhcp_static_lease_free(DHCPStaticLease *static_lease) {
         if (!static_lease)
@@ -16,7 +16,7 @@
         if (static_lease->network && static_lease->section)
                 hashmap_remove(static_lease->network->dhcp_static_leases_by_section, static_lease->section);
 
-        network_config_section_free(static_lease->section);
+        config_section_free(static_lease->section);
         free(static_lease->client_id);
         return mfree(static_lease);
 }
@@ -35,7 +35,7 @@
 }
 
 static int lease_new_static(Network *network, const char *filename, unsigned section_line, DHCPStaticLease **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(dhcp_static_lease_freep) DHCPStaticLease *static_lease = NULL;
         int r;
 
@@ -44,7 +44,7 @@
         assert(section_line > 0);
         assert(ret);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -60,7 +60,7 @@
 
         static_lease->network = network;
         static_lease->section = TAKE_PTR(n);
-        r = hashmap_ensure_put(&network->dhcp_static_leases_by_section, &network_config_hash_ops, static_lease->section, static_lease);
+        r = hashmap_ensure_put(&network->dhcp_static_leases_by_section, &config_section_hash_ops, static_lease->section, static_lease);
         if (r < 0)
                 return r;
 
@@ -114,14 +114,13 @@
                 void *userdata) {
 
         _cleanup_(dhcp_static_lease_free_or_set_invalidp) DHCPStaticLease *lease = NULL;
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         union in_addr_union addr;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(network);
 
         r = lease_new_static(network, filename, section_line, &lease);
         if (r < 0)
@@ -164,7 +163,7 @@
                 void *userdata) {
 
         _cleanup_(dhcp_static_lease_free_or_set_invalidp) DHCPStaticLease *lease = NULL;
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         struct ether_addr hwaddr;
         uint8_t *c;
         int r;
@@ -172,7 +171,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(network);
 
         r = lease_new_static(network, filename, section_line, &lease);
         if (r < 0)
@@ -184,7 +182,7 @@
                 return 0;
         }
 
-        r = ether_addr_from_string(rvalue, &hwaddr);
+        r = parse_ether_addr(rvalue, &hwaddr);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to parse MAC address for DHCPv4 static lease, ignoring assignment: %s", rvalue);
diff --git a/src/network/networkd-dhcp-server-static-lease.h b/src/network/networkd-dhcp-server-static-lease.h
index 81c3598..9b8e78b 100644
--- a/src/network/networkd-dhcp-server-static-lease.h
+++ b/src/network/networkd-dhcp-server-static-lease.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #pragma once
 
@@ -8,11 +8,11 @@
 #include "in-addr-util.h"
 
 typedef struct Network Network;
-typedef struct NetworkConfigSection NetworkConfigSection;
+typedef struct ConfigSection ConfigSection;
 
 typedef struct DHCPStaticLease {
         Network *network;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
         struct in_addr address;
         uint8_t *client_id;
diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c
index 9e2faa5..620fbbd 100644
--- a/src/network/networkd-dhcp-server.c
+++ b/src/network/networkd-dhcp-server.c
@@ -16,6 +16,7 @@
 #include "networkd-manager.h"
 #include "networkd-network.h"
 #include "networkd-queue.h"
+#include "networkd-route-util.h"
 #include "parse-util.h"
 #include "socket-netlink.h"
 #include "string-table.h"
@@ -57,12 +58,21 @@
                 ORDERED_HASHMAP_FOREACH(address, network->addresses_by_section) {
                         if (section_is_invalid(address->section))
                                 continue;
-                        if (address->family == AF_INET &&
-                            !in4_addr_is_localhost(&address->in_addr.in) &&
-                            in4_addr_is_null(&address->in_addr_peer.in)) {
-                                have = true;
-                                break;
-                        }
+
+                        if (address->family != AF_INET)
+                                continue;
+
+                        if (in4_addr_is_localhost(&address->in_addr.in))
+                                continue;
+
+                        if (in4_addr_is_link_local(&address->in_addr.in))
+                                continue;
+
+                        if (in4_addr_is_set(&address->in_addr_peer.in))
+                                continue;
+
+                        have = true;
+                        break;
                 }
                 if (!have) {
                         log_warning("%s: DHCPServer= is enabled, but no static address configured. "
@@ -74,6 +84,40 @@
         }
 }
 
+int link_request_dhcp_server_address(Link *link) {
+        _cleanup_(address_freep) Address *address = NULL;
+        Address *existing;
+        int r;
+
+        assert(link);
+        assert(link->network);
+
+        if (!link_dhcp4_server_enabled(link))
+                return 0;
+
+        if (!in4_addr_is_set(&link->network->dhcp_server_address))
+                return 0;
+
+        r = address_new(&address);
+        if (r < 0)
+                return r;
+
+        address->source = NETWORK_CONFIG_SOURCE_STATIC;
+        address->family = AF_INET;
+        address->in_addr.in = link->network->dhcp_server_address;
+        address->prefixlen = link->network->dhcp_server_address_prefixlen;
+        address_set_broadcast(address, link);
+
+        if (address_get(link, address, &existing) >= 0 &&
+            address_exists(existing) &&
+            existing->source == NETWORK_CONFIG_SOURCE_STATIC)
+                /* The same address seems explicitly configured in [Address] or [Network] section.
+                 * Configure the DHCP server address only when it is not. */
+                return 0;
+
+        return link_request_static_address(link, TAKE_PTR(address), true);
+}
+
 static int link_find_dhcp_server_address(Link *link, Address **ret) {
         Address *address;
 
@@ -86,13 +130,23 @@
                                              link->network->dhcp_server_address_prefixlen, ret);
 
         /* If not, then select one from static addresses. */
-        SET_FOREACH(address, link->static_addresses)
-                if (address->family == AF_INET &&
-                    !in4_addr_is_localhost(&address->in_addr.in) &&
-                    in4_addr_is_null(&address->in_addr_peer.in)) {
-                        *ret = address;
-                        return 0;
-                }
+        SET_FOREACH(address, link->addresses) {
+                if (address->source != NETWORK_CONFIG_SOURCE_STATIC)
+                        continue;
+                if (!address_exists(address))
+                        continue;
+                if (address->family != AF_INET)
+                        continue;
+                if (in4_addr_is_localhost(&address->in_addr.in))
+                        continue;
+                if (in4_addr_is_link_local(&address->in_addr.in))
+                        continue;
+                if (in4_addr_is_set(&address->in_addr_peer.in))
+                        continue;
+
+                *ret = address;
+                return 0;
+        }
 
         return -ENOENT;
 }
@@ -106,7 +160,7 @@
         if (link->network->dhcp_server_uplink_index > 0)
                 return link_get_by_index(link->manager, link->network->dhcp_server_uplink_index, ret);
 
-        if (link->network->dhcp_server_uplink_index == 0) {
+        if (link->network->dhcp_server_uplink_index == UPLINK_INDEX_AUTO) {
                 /* It is not necessary to propagate error in automatic selection. */
                 if (manager_find_uplink(link->manager, AF_INET, link, ret) < 0)
                         *ret = NULL;
@@ -163,8 +217,6 @@
                 break;
 
         case SD_DHCP_LEASE_NTP: {
-                char **i;
-
                 /* For NTP things are similar, but for NTP hostnames can be configured too, which we cannot
                  * propagate via DHCP. Hence let's only propagate those which are IP addresses. */
 
@@ -202,7 +254,7 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected server type");
+                assert_not_reached();
         }
 
         if (use_dhcp_lease_data && link->dhcp_lease) {
@@ -268,7 +320,7 @@
         _cleanup_free_ struct in_addr *addresses = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         size_t n_addresses = 0;
-        int n = 0, r;
+        int r;
 
         f = fopen(PRIVATE_UPLINK_RESOLV_CONF, "re");
         if (!f) {
@@ -289,8 +341,6 @@
                 if (r == 0)
                         break;
 
-                n++;
-
                 l = strstrip(line);
                 if (IN_SET(*l, '#', ';', 0))
                         continue;
@@ -348,12 +398,6 @@
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to configure address pool for DHCPv4 server instance: %m");
 
-        /* TODO:
-        r = sd_dhcp_server_set_router(link->dhcp_server, &main_address->in_addr.in);
-        if (r < 0)
-                return r;
-        */
-
         if (link->network->dhcp_server_max_lease_time_usec > 0) {
                 r = sd_dhcp_server_set_max_lease_time(link->dhcp_server,
                                                       DIV_ROUND_UP(link->network->dhcp_server_max_lease_time_usec, USEC_PER_SEC));
@@ -368,6 +412,18 @@
                         return log_link_error_errno(link, r, "Failed to set default lease time for DHCPv4 server instance: %m");
         }
 
+        r = sd_dhcp_server_set_boot_server_address(link->dhcp_server, &link->network->dhcp_server_boot_server_address);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to set boot server address for DHCPv4 server instance: %m");
+
+        r = sd_dhcp_server_set_boot_server_name(link->dhcp_server, link->network->dhcp_server_boot_server_name);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to set boot server name for DHCPv4 server instance: %m");
+
+        r = sd_dhcp_server_set_boot_filename(link->dhcp_server, link->network->dhcp_server_boot_filename);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to set boot filename for DHCPv4 server instance: %m");
+
         for (sd_dhcp_lease_server_type_t type = 0; type < _SD_DHCP_LEASE_SERVER_TYPE_MAX; type ++) {
 
                 if (!link->network->dhcp_server_emit[type].emit)
@@ -405,9 +461,11 @@
                                                dhcp_lease_server_type_to_string(type));
         }
 
-        r = sd_dhcp_server_set_emit_router(link->dhcp_server, link->network->dhcp_server_emit_router);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to set router emission for DHCP server: %m");
+        if (link->network->dhcp_server_emit_router) {
+                r = sd_dhcp_server_set_router(link->dhcp_server, &link->network->dhcp_server_router);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Failed to set router address for DHCP server: %m");
+        }
 
         r = sd_dhcp_server_set_relay_target(link->dhcp_server, &link->network->dhcp_server_relay_target);
         if (r < 0)
@@ -470,21 +528,7 @@
                 return log_link_error_errno(link, r, "Could not start DHCPv4 server instance: %m");
 
         log_link_debug(link, "Offering DHCPv4 leases");
-
-        return 1;
-}
-
-int link_request_dhcp_server(Link *link) {
-        assert(link);
-
-        if (!link_dhcp4_server_enabled(link))
-                return 0;
-
-        if (link->dhcp_server)
-                return 0;
-
-        log_link_debug(link, "Requesting DHCP server.");
-        return link_queue_request(link, REQUEST_TYPE_DHCP_SERVER, NULL, false, NULL, NULL, NULL);
+        return 0;
 }
 
 static bool dhcp_server_is_ready_to_configure(Link *link) {
@@ -493,21 +537,12 @@
 
         assert(link);
 
-        if (!link->network)
-                return false;
-
-        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
-                return false;
-
-        if (link->set_flags_messages > 0)
+        if (!link_is_ready_to_configure(link, /* allow_unmanaged = */ false))
                 return false;
 
         if (!link_has_carrier(link))
                 return false;
 
-        if (link->address_remove_messages > 0)
-                return false;
-
         if (!link->static_addresses_configured)
                 return false;
 
@@ -526,15 +561,38 @@
         return true;
 }
 
-int request_process_dhcp_server(Request *req) {
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_DHCP_SERVER);
+static int dhcp_server_process_request(Request *req, Link *link, void *userdata) {
+        int r;
 
-        if (!dhcp_server_is_ready_to_configure(req->link))
+        assert(link);
+
+        if (!dhcp_server_is_ready_to_configure(link))
                 return 0;
 
-        return dhcp4_server_configure(req->link);
+        r = dhcp4_server_configure(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure DHCP server: %m");
+
+        return 1;
+}
+
+int link_request_dhcp_server(Link *link) {
+        int r;
+
+        assert(link);
+
+        if (!link_dhcp4_server_enabled(link))
+                return 0;
+
+        if (link->dhcp_server)
+                return 0;
+
+        log_link_debug(link, "Requesting DHCP server.");
+        r = link_queue_request(link, REQUEST_TYPE_DHCP_SERVER, dhcp_server_process_request, NULL);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to request configuration of DHCP server: %m");
+
+        return 0;
 }
 
 int config_parse_dhcp_server_relay_agent_suboption(
@@ -582,11 +640,16 @@
                 void *data,
                 void *userdata) {
 
-        NetworkDHCPServerEmitAddress *emit = data;
+        NetworkDHCPServerEmitAddress *emit = ASSERT_PTR(data);
 
-        assert(emit);
         assert(rvalue);
 
+        if (isempty(rvalue)) {
+                emit->addresses = mfree(emit->addresses);
+                emit->n_addresses = 0;
+                return 0;
+        }
+
         for (const char *p = rvalue;;) {
                 _cleanup_free_ char *w = NULL;
                 union in_addr_union a;
@@ -603,18 +666,26 @@
                 if (r == 0)
                         return 0;
 
-                r = in_addr_from_string(AF_INET, w, &a);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Failed to parse %s= address '%s', ignoring: %m", lvalue, w);
-                        continue;
+                if (streq(w, "_server_address"))
+                        a = IN_ADDR_NULL; /* null address will be converted to the server address. */
+                else {
+                        r = in_addr_from_string(AF_INET, w, &a);
+                        if (r < 0) {
+                                log_syntax(unit, LOG_WARNING, filename, line, r,
+                                           "Failed to parse %s= address '%s', ignoring: %m", lvalue, w);
+                                continue;
+                        }
+
+                        if (in4_addr_is_null(&a.in)) {
+                                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                           "Found a null address in %s=, ignoring.", lvalue);
+                                continue;
+                        }
                 }
 
-                struct in_addr *m = reallocarray(emit->addresses, emit->n_addresses + 1, sizeof(struct in_addr));
-                if (!m)
+                if (!GREEDY_REALLOC(emit->addresses, emit->n_addresses + 1))
                         return log_oom();
 
-                emit->addresses = m;
                 emit->addresses[emit->n_addresses++] = a.in;
         }
 }
@@ -631,7 +702,7 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         union in_addr_union a;
         unsigned char prefixlen;
         int r;
@@ -663,55 +734,3 @@
         network->dhcp_server_address_prefixlen = prefixlen;
         return 0;
 }
-
-int config_parse_dhcp_server_uplink(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Network *network = userdata;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-
-        if (isempty(rvalue) || streq(rvalue, ":auto")) {
-                network->dhcp_server_uplink_index = 0; /* uplink will be selected automatically */
-                network->dhcp_server_uplink_name = mfree(network->dhcp_server_uplink_name);
-                return 0;
-        }
-
-        if (streq(rvalue, ":none")) {
-                network->dhcp_server_uplink_index = -1; /* uplink will not be selected automatically */
-                network->dhcp_server_uplink_name = mfree(network->dhcp_server_uplink_name);
-                return 0;
-        }
-
-        r = parse_ifindex(rvalue);
-        if (r > 0) {
-                network->dhcp_server_uplink_index = r;
-                network->dhcp_server_uplink_name = mfree(network->dhcp_server_uplink_name);
-                return 0;
-        }
-
-        if (!ifname_valid_full(rvalue, IFNAME_VALID_ALTERNATIVE)) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Invalid interface name in %s=, ignoring assignment: %s", lvalue, rvalue);
-                return 0;
-        }
-
-        r = free_and_strdup_warn(&network->dhcp_server_uplink_name, rvalue);
-        if (r < 0)
-                return r;
-
-        network->dhcp_server_uplink_index = 0;
-        return 0;
-}
diff --git a/src/network/networkd-dhcp-server.h b/src/network/networkd-dhcp-server.h
index 3f23f97..cb2a8b6 100644
--- a/src/network/networkd-dhcp-server.h
+++ b/src/network/networkd-dhcp-server.h
@@ -5,14 +5,12 @@
 
 typedef struct Link Link;
 typedef struct Network Network;
-typedef struct Request Request;
 
 void network_adjust_dhcp_server(Network *network);
 
+int link_request_dhcp_server_address(Link *link);
 int link_request_dhcp_server(Link *link);
-int request_process_dhcp_server(Request *req);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_server_relay_agent_suboption);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_server_emit);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_server_address);
-CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_server_uplink);
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
index f80adcd..d4b4942 100644
--- a/src/network/networkd-dhcp4.c
+++ b/src/network/networkd-dhcp4.c
@@ -5,7 +5,6 @@
 #include <linux/if.h>
 #include <linux/if_arp.h>
 
-#include "escape.h"
 #include "alloc-util.h"
 #include "dhcp-client-internal.h"
 #include "hostname-setup.h"
@@ -13,6 +12,7 @@
 #include "parse-util.h"
 #include "network-internal.h"
 #include "networkd-address.h"
+#include "networkd-dhcp-prefix-delegation.h"
 #include "networkd-dhcp4.h"
 #include "networkd-ipv4acd.h"
 #include "networkd-link.h"
@@ -26,10 +26,6 @@
 #include "string-table.h"
 #include "strv.h"
 #include "sysctl-util.h"
-#include "web-util.h"
-
-static int dhcp4_request_address_and_routes(Link *link, bool announce);
-static int dhcp4_remove_all(Link *link);
 
 void network_adjust_dhcp4(Network *network) {
         assert(network);
@@ -56,169 +52,170 @@
                 network->dhcp_client_identifier = network->dhcp_anonymize ? DHCP_CLIENT_ID_MAC : DHCP_CLIENT_ID_DUID;
 }
 
-static int dhcp4_release_old_lease(Link *link) {
+static int dhcp4_remove_address_and_routes(Link *link, bool only_marked) {
+        Address *address;
         Route *route;
         int k, r = 0;
 
         assert(link);
 
-        if (!link->dhcp_address_old && set_isempty(link->dhcp_routes_old))
-                return 0;
+        SET_FOREACH(route, link->routes) {
+                if (route->source != NETWORK_CONFIG_SOURCE_DHCP4)
+                        continue;
+                if (only_marked && !route_is_marked(route))
+                        continue;
 
-        log_link_debug(link, "Removing old DHCPv4 address and routes.");
-
-        SET_FOREACH(route, link->dhcp_routes_old) {
-                k = route_remove(route, NULL, link);
+                k = route_remove(route);
                 if (k < 0)
                         r = k;
+
+                route_cancel_request(route, link);
         }
 
-        if (link->dhcp_address_old) {
-                k = address_remove(link->dhcp_address_old, link);
+        SET_FOREACH(address, link->addresses) {
+                if (address->source != NETWORK_CONFIG_SOURCE_DHCP4)
+                        continue;
+                if (only_marked && !address_is_marked(address))
+                        continue;
+
+                k = address_remove(address);
                 if (k < 0)
                         r = k;
+
+                address_cancel_request(address);
         }
 
         return r;
 }
 
-static void dhcp4_check_ready(Link *link) {
-        int r;
+static int dhcp4_address_get(Link *link, Address **ret) {
+        Address *address;
 
-        if (link->dhcp4_messages > 0) {
-                log_link_debug(link, "%s(): DHCPv4 address and routes are not set.", __func__);
-                return;
+        assert(link);
+
+        SET_FOREACH(address, link->addresses) {
+                if (address->source != NETWORK_CONFIG_SOURCE_DHCP4)
+                        continue;
+                if (address_is_marked(address))
+                        continue;
+
+                if (ret)
+                        *ret = address;
+                return 0;
         }
 
-        if (!link->dhcp_address) {
-                log_link_debug(link, "%s(): DHCPv4 address is not set.", __func__);
-                return;
-        }
-
-        if (!address_is_ready(link->dhcp_address)) {
-                log_link_debug(link, "%s(): DHCPv4 address is not ready.", __func__);
-                return;
-        }
-
-        link->dhcp4_configured = true;
-
-        /* New address and routes are configured now. Let's release old lease. */
-        r = dhcp4_release_old_lease(link);
-        if (r < 0) {
-                link_enter_failed(link);
-                return;
-        }
-
-        r = sd_ipv4ll_stop(link->ipv4ll);
-        if (r < 0)
-                log_link_warning_errno(link, r, "Failed to drop IPv4 link-local address, ignoring: %m");
-
-        link_check_ready(link);
+        return -ENOENT;
 }
 
-static int dhcp4_after_route_configure(Request *req, void *object) {
-        Route *route = object;
-        Link *link;
-        int r;
+static int dhcp4_address_ready_callback(Address *address) {
+        assert(address);
+        assert(address->link);
 
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ROUTE);
-        assert(route);
+        /* Do not call this again. */
+        address->callback = NULL;
 
-        link = req->link;
-
-        r = set_ensure_put(&link->dhcp_routes, &route_hash_ops, route);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store DHCPv4 route: %m");
-
-        set_remove(link->dhcp_routes_old, route);
-
-        return 0;
+        return dhcp4_check_ready(address->link);
 }
 
-static int dhcp4_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+int dhcp4_check_ready(Link *link) {
+        Address *address;
         int r;
 
         assert(link);
-        assert(link->dhcp4_messages > 0);
 
-        link->dhcp4_messages--;
+        if (link->dhcp4_messages > 0) {
+                log_link_debug(link, "%s(): DHCPv4 address and routes are not set.", __func__);
+                return 0;
+        }
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
+        if (dhcp4_address_get(link, &address) < 0) {
+                log_link_debug(link, "%s(): DHCPv4 address is not set.", __func__);
+                return 0;
+        }
+
+        if (!address_is_ready(address)) {
+                log_link_debug(link, "%s(): DHCPv4 address is not ready.", __func__);
+                address->callback = dhcp4_address_ready_callback;
+                return 0;
+        }
+
+        link->dhcp4_configured = true;
+        log_link_debug(link, "DHCPv4 address and routes set.");
+
+        /* New address and routes are configured now. Let's release old lease. */
+        r = dhcp4_remove_address_and_routes(link, /* only_marked = */ true);
+        if (r < 0)
+                return r;
+
+        r = sd_ipv4ll_stop(link->ipv4ll);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to drop IPv4 link-local address: %m");
+
+        link_check_ready(link);
+        return 0;
+}
+
+static int dhcp4_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) {
+        int r;
+
+        assert(m);
+        assert(link);
 
         r = sd_netlink_message_get_errno(m);
-        if (r == -ENETUNREACH && !link->dhcp4_route_retrying) {
-
-                /* It seems kernel does not support that the prefix route cannot be configured with
-                 * route table. Let's once drop the config and reconfigure them later. */
-
-                log_link_message_debug_errno(link, m, r, "Could not set DHCPv4 route, retrying later");
-                link->dhcp4_route_failed = true;
-                link->manager->dhcp4_prefix_root_cannot_set_table = true;
-        } else if (r < 0 && r != -EEXIST) {
+        if (r < 0 && r != -EEXIST) {
                 log_link_message_warning_errno(link, m, r, "Could not set DHCPv4 route");
                 link_enter_failed(link);
                 return 1;
         }
 
-        if (link->dhcp4_messages == 0 && link->dhcp4_route_failed) {
-                link->dhcp4_route_failed = false;
-                link->dhcp4_route_retrying = true;
-
-                r = dhcp4_remove_all(link);
-                if (r < 0)
-                        link_enter_failed(link);
-
-                r = link_request_static_nexthops(link, true);
-                if (r < 0)
-                        link_enter_failed(link);
-
-                r = link_request_static_routes(link, true);
-                if (r < 0)
-                        link_enter_failed(link);
-
-                r = dhcp4_request_address_and_routes(link, false);
-                if (r < 0)
-                        link_enter_failed(link);
-
-                return 1;
-        }
-
-        dhcp4_check_ready(link);
+        r = dhcp4_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
 
         return 1;
 }
 
 static int dhcp4_request_route(Route *in, Link *link) {
         _cleanup_(route_freep) Route *route = in;
-        Request *req;
+        struct in_addr server;
+        Route *existing;
         int r;
 
         assert(route);
         assert(link);
+        assert(link->network);
+        assert(link->dhcp_lease);
 
-        r = link_has_route(link, route);
+        r = sd_dhcp_lease_get_server_identifier(link->dhcp_lease, &server);
         if (r < 0)
-                return r;
-        if (r == 0)
+                return log_link_debug_errno(link, r, "Failed to get DHCP server IP address: %m");
+
+        route->source = NETWORK_CONFIG_SOURCE_DHCP4;
+        route->provider.in = server;
+        route->family = AF_INET;
+        if (!route->protocol_set)
+                route->protocol = RTPROT_DHCP;
+        if (!route->priority_set)
+                route->priority = link->network->dhcp_route_metric;
+        if (!route->table_set)
+                route->table = link_get_dhcp4_route_table(link);
+        if (route->mtu == 0)
+                route->mtu = link->network->dhcp_route_mtu;
+        if (route->quickack < 0)
+                route->quickack = link->network->dhcp_quickack;
+
+        if (route_get(NULL, link, route, &existing) < 0) /* This is a new route. */
                 link->dhcp4_configured = false;
+        else
+                route_unmark(existing);
 
-        r = link_request_route(link, TAKE_PTR(route), true, &link->dhcp4_messages,
-                               dhcp4_route_handler, &req);
-        if (r <= 0)
-                return r;
-
-        req->after_configure = dhcp4_after_route_configure;
-
-        return 0;
+        return link_request_route(link, TAKE_PTR(route), true, &link->dhcp4_messages,
+                                  dhcp4_route_handler, NULL);
 }
 
 static bool link_prefixroute(Link *link) {
         return !link->network->dhcp_route_table_set ||
-                link->network->dhcp_route_table == RT_TABLE_MAIN ||
-                link->manager->dhcp4_prefix_root_cannot_set_table;
+                link->network->dhcp_route_table == RT_TABLE_MAIN;
 }
 
 static int dhcp4_request_prefix_route(Link *link) {
@@ -245,14 +242,10 @@
         if (r < 0)
                 return r;
 
-        route->family = AF_INET;
         route->dst.in.s_addr = address.s_addr & netmask.s_addr;
         route->dst_prefixlen = in4_addr_netmask_to_prefixlen(&netmask);
         route->prefsrc.in = address;
         route->scope = RT_SCOPE_LINK;
-        route->protocol = RTPROT_DHCP;
-        route->table = link_get_dhcp_route_table(link);
-        route->mtu = link->network->dhcp_route_mtu;
 
         return dhcp4_request_route(TAKE_PTR(route), link);
 }
@@ -274,15 +267,10 @@
         if (r < 0)
                 return r;
 
-        route->family = AF_INET;
         route->dst.in = *gw;
         route->dst_prefixlen = 32;
         route->prefsrc.in = address;
         route->scope = RT_SCOPE_LINK;
-        route->protocol = RTPROT_DHCP;
-        route->priority = link->network->dhcp_route_metric;
-        route->table = link_get_dhcp_route_table(link);
-        route->mtu = link->network->dhcp_route_mtu;
 
         return dhcp4_request_route(TAKE_PTR(route), link);
 }
@@ -349,15 +337,18 @@
                 route->gw = IN_ADDR_NULL;
                 route->prefsrc.in = address;
 
-        } else {
-                if (in4_addr_is_null(gw)) {
-                        log_link_debug(link, "DHCP: requested route destination "IPV4_ADDRESS_FMT_STR"/%u is not in the assigned network "
-                                       IPV4_ADDRESS_FMT_STR"/%u, but no gateway is specified, ignoring.",
-                                       IPV4_ADDRESS_FMT_VAL(route->dst.in), route->dst_prefixlen,
-                                       IPV4_ADDRESS_FMT_VAL(prefix), prefixlen);
-                        return 0;
-                }
+        } else if (in4_addr_is_null(gw)) {
+                log_link_debug(link, "DHCP: requested route destination "IPV4_ADDRESS_FMT_STR"/%u is not in the assigned network "
+                               IPV4_ADDRESS_FMT_STR"/%u, but no gateway is specified, using 'link' scope.",
+                               IPV4_ADDRESS_FMT_VAL(route->dst.in), route->dst_prefixlen,
+                               IPV4_ADDRESS_FMT_VAL(prefix), prefixlen);
 
+                route->scope = RT_SCOPE_LINK;
+                route->gw_family = AF_UNSPEC;
+                route->gw = IN_ADDR_NULL;
+                route->prefsrc.in = address;
+
+        } else {
                 r = dhcp4_request_route_to_gateway(link, gw);
                 if (r < 0)
                         return r;
@@ -372,77 +363,112 @@
 }
 
 static int dhcp4_request_static_routes(Link *link, struct in_addr *ret_default_gw) {
-        _cleanup_free_ sd_dhcp_route **static_routes = NULL;
-        bool classless_route = false, static_route = false;
+        _cleanup_free_ sd_dhcp_route **static_routes = NULL, **classless_routes = NULL;
+        size_t n_static_routes, n_classless_routes, n;
         struct in_addr default_gw = {};
-        int n, r;
+        sd_dhcp_route **routes;
+        int r;
 
         assert(link);
         assert(link->dhcp_lease);
         assert(ret_default_gw);
 
-        if (!link->network->dhcp_use_routes)
-                return 0;
+        r = sd_dhcp_lease_get_static_routes(link->dhcp_lease, &static_routes);
+        if (r == -ENODATA)
+                n_static_routes = 0;
+        else if (r < 0)
+                return r;
+        else
+                n_static_routes = r;
 
-        n = sd_dhcp_lease_get_routes(link->dhcp_lease, &static_routes);
-        if (IN_SET(n, 0, -ENODATA)) {
+        r = sd_dhcp_lease_get_classless_routes(link->dhcp_lease, &classless_routes);
+        if (r == -ENODATA)
+                n_classless_routes = 0;
+        else if (r < 0)
+                return r;
+        else
+                n_classless_routes = r;
+
+        if (n_classless_routes == 0 && n_static_routes == 0) {
                 log_link_debug(link, "DHCP: No static routes received from DHCP server.");
                 return 0;
         }
-        if (n < 0)
-                return n;
-
-        for (int i = 0; i < n; i++) {
-                switch (sd_dhcp_route_get_option(static_routes[i])) {
-                case SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE:
-                        classless_route = true;
-                        break;
-                case SD_DHCP_OPTION_STATIC_ROUTE:
-                        static_route = true;
-                        break;
-                }
-        }
 
         /* if the DHCP server returns both a Classless Static Routes option and a Static Routes option,
          * the DHCP client MUST ignore the Static Routes option. */
-        if (classless_route && static_route)
+        if (n_classless_routes > 0 && n_static_routes > 0)
                 log_link_debug(link, "Classless static routes received from DHCP server: ignoring static-route option");
 
-        for (int i = 0; i < n; i++) {
+        if (!link->network->dhcp_use_routes) {
+
+                /* Even if UseRoutes=no, try to find default gateway to make semi-static routes and
+                 * routes to DNS or NTP servers can be configured in later steps. */
+
+                for (size_t i = 0; i < n_classless_routes; i++) {
+                        struct in_addr dst;
+                        uint8_t prefixlen;
+
+                        r = sd_dhcp_route_get_destination(classless_routes[i], &dst);
+                        if (r < 0)
+                                return r;
+
+                        if (in4_addr_is_set(&dst))
+                                continue;
+
+                        r = sd_dhcp_route_get_destination_prefix_length(classless_routes[i], &prefixlen);
+                        if (r < 0)
+                                return r;
+
+                        if (prefixlen != 0)
+                                continue;
+
+                        r = sd_dhcp_route_get_gateway(classless_routes[i], ret_default_gw);
+                        if (r < 0)
+                                return r;
+
+                        break;
+                }
+
+                /* Do not return 1 here, to ensure the router option can override the default gateway
+                 * that was found. */
+                return 0;
+        }
+
+        if (n_classless_routes > 0) {
+                n = n_classless_routes;
+                routes = classless_routes;
+        } else if (n_static_routes > 0){
+                n = n_static_routes;
+                routes = static_routes;
+        } else
+                assert_not_reached();
+
+        for (size_t i = 0; i < n; i++) {
                 _cleanup_(route_freep) Route *route = NULL;
                 struct in_addr gw;
 
-                if (sd_dhcp_route_get_option(static_routes[i]) !=
-                    (classless_route ? SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE : SD_DHCP_OPTION_STATIC_ROUTE))
-                        continue;
-
                 r = route_new(&route);
                 if (r < 0)
                         return r;
 
-                route->family = AF_INET;
                 route->gw_family = AF_INET;
-                route->protocol = RTPROT_DHCP;
-                route->priority = link->network->dhcp_route_metric;
-                route->table = link_get_dhcp_route_table(link);
-                route->mtu = link->network->dhcp_route_mtu;
 
-                r = sd_dhcp_route_get_gateway(static_routes[i], &gw);
+                r = sd_dhcp_route_get_gateway(routes[i], &gw);
                 if (r < 0)
                         return r;
 
-                r = sd_dhcp_route_get_destination(static_routes[i], &route->dst.in);
+                r = sd_dhcp_route_get_destination(routes[i], &route->dst.in);
                 if (r < 0)
                         return r;
 
-                r = sd_dhcp_route_get_destination_prefix_length(static_routes[i], &route->dst_prefixlen);
+                r = sd_dhcp_route_get_destination_prefix_length(routes[i], &route->dst_prefixlen);
                 if (r < 0)
                         return r;
 
                 /* When classless static routes are provided, then router option will be ignored. To
                  * use the default gateway later in other routes, e.g., routes to dns servers, here we
                  * need to find the default gateway in the classless static routes. */
-                if (classless_route &&
+                if (n_classless_routes > 0 &&
                     in4_addr_is_null(&route->dst.in) && route->dst_prefixlen == 0 &&
                     in4_addr_is_null(&default_gw))
                         default_gw = gw;
@@ -453,22 +479,18 @@
         }
 
         *ret_default_gw = default_gw;
-        return classless_route;
+        return n_classless_routes > 0;
 }
 
-static int dhcp4_request_gateway(Link *link, struct in_addr *ret_gw) {
+static int dhcp4_request_gateway(Link *link, struct in_addr *gw) {
         _cleanup_(route_freep) Route *route = NULL;
         const struct in_addr *router;
         struct in_addr address;
-        Route *rt;
         int r;
 
         assert(link);
         assert(link->dhcp_lease);
-        assert(ret_gw);
-
-        if (!link->network->dhcp_use_gateway)
-                return 0;
+        assert(gw);
 
         r = sd_dhcp_lease_get_address(link->dhcp_lease, &address);
         if (r < 0)
@@ -486,6 +508,16 @@
                 return 0;
         }
 
+        if (!link->network->dhcp_use_gateway) {
+                /* When no classless static route is provided, even if UseGateway=no, use the gateway
+                 * address to configure semi-static routes or routes to DNS or NTP servers. Note, if
+                 * neither UseRoutes= nor UseGateway= is disabled, use the default gateway in classless
+                 * static routes if provided (in that case, in4_addr_is_null(gw) below is true). */
+                if (in4_addr_is_null(gw))
+                        *gw = router[0];
+                return 0;
+        }
+
         /* The dhcp netmask may mask out the gateway. First, add an explicit route for the gateway host
          * so that we can route no matter the netmask or existing kernel route tables. */
         r = dhcp4_request_route_to_gateway(link, &router[0]);
@@ -497,46 +529,56 @@
                 return r;
 
         /* Next, add a default gateway. */
-        route->family = AF_INET;
         route->gw_family = AF_INET;
         route->gw.in = router[0];
         route->prefsrc.in = address;
-        route->protocol = RTPROT_DHCP;
-        route->priority = link->network->dhcp_route_metric;
-        route->table = link_get_dhcp_route_table(link);
-        route->mtu = link->network->dhcp_route_mtu;
 
         r = dhcp4_request_route(TAKE_PTR(route), link);
         if (r < 0)
                 return r;
 
+        /* When no classless static route is provided, or UseRoutes=no, then use the router address to
+         * configure semi-static routes and routes to DNS or NTP servers in later steps. */
+        *gw = router[0];
+        return 0;
+}
+
+static int dhcp4_request_semi_static_routes(Link *link, const struct in_addr *gw) {
+        Route *rt;
+        int r;
+
+        assert(link);
+        assert(link->dhcp_lease);
+        assert(link->network);
+        assert(gw);
+
+        if (in4_addr_is_null(gw))
+                return 0;
+
         HASHMAP_FOREACH(rt, link->network->routes_by_section) {
+                _cleanup_(route_freep) Route *route = NULL;
+
                 if (!rt->gateway_from_dhcp_or_ra)
                         continue;
 
                 if (rt->gw_family != AF_INET)
                         continue;
 
+                r = dhcp4_request_route_to_gateway(link, gw);
+                if (r < 0)
+                        return r;
+
                 r = route_dup(rt, &route);
                 if (r < 0)
                         return r;
 
-                route->gw.in = router[0];
-                if (!route->protocol_set)
-                        route->protocol = RTPROT_DHCP;
-                if (!route->priority_set)
-                        route->priority = link->network->dhcp_route_metric;
-                if (!route->table_set)
-                        route->table = link_get_dhcp_route_table(link);
-                if (route->mtu == 0)
-                        route->mtu = link->network->dhcp_route_mtu;
+                route->gw.in = *gw;
 
                 r = dhcp4_request_route(TAKE_PTR(route), link);
                 if (r < 0)
                         return r;
         }
 
-        *ret_gw = router[0];
         return 0;
 }
 
@@ -564,13 +606,8 @@
                 if (r < 0)
                         return r;
 
-                route->family = AF_INET;
                 route->dst.in = servers[i];
                 route->dst_prefixlen = 32;
-                route->protocol = RTPROT_DHCP;
-                route->priority = link->network->dhcp_route_metric;
-                route->table = link_get_dhcp_route_table(link);
-                route->mtu = link->network->dhcp_route_mtu;
 
                 r = dhcp4_request_route_auto(TAKE_PTR(route), link, gw);
                 if (r < 0)
@@ -626,19 +663,10 @@
 
 static int dhcp4_request_routes(Link *link) {
         struct in_addr gw = {};
-        Route *rt;
         int r;
 
         assert(link);
-
-        if (!link->dhcp_lease)
-                return 0;
-
-        while ((rt = set_steal_first(link->dhcp_routes))) {
-                r = set_ensure_put(&link->dhcp_routes_old, &route_hash_ops, rt);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to store old DHCPv4 route: %m");
-        }
+        assert(link->dhcp_lease);
 
         r = dhcp4_request_prefix_route(link);
         if (r < 0)
@@ -655,6 +683,10 @@
                         return log_link_error_errno(link, r, "DHCP error: Could not request gateway: %m");
         }
 
+        r = dhcp4_request_semi_static_routes(link, &gw);
+        if (r < 0)
+                return log_link_error_errno(link, r, "DHCP error: Could not request routes with Gateway=_dhcp4 setting: %m");
+
         r = dhcp4_request_routes_to_dns(link, &gw);
         if (r < 0)
                 return log_link_error_errno(link, r, "DHCP error: Could not request routes to DNS servers: %m");
@@ -667,7 +699,6 @@
 }
 
 static int dhcp_reset_mtu(Link *link) {
-        uint16_t mtu;
         int r;
 
         assert(link);
@@ -675,18 +706,9 @@
         if (!link->network->dhcp_use_mtu)
                 return 0;
 
-        r = sd_dhcp_lease_get_mtu(link->dhcp_lease, &mtu);
-        if (r == -ENODATA)
-                return 0;
-        if (r < 0)
-                return log_link_error_errno(link, r, "DHCP error: failed to get MTU from lease: %m");
-
-        if (link->original_mtu == mtu)
-                return 0;
-
         r = link_request_to_set_mtu(link, link->original_mtu);
         if (r < 0)
-                return log_link_error_errno(link, r, "DHCP error: could not reset MTU: %m");
+                return log_link_error_errno(link, r, "DHCP error: Could not queue request to reset MTU: %m");
 
         return 0;
 }
@@ -715,43 +737,22 @@
         return 0;
 }
 
-static int dhcp4_remove_all(Link *link) {
-        Route *route;
-        int k, r = 0;
-
-        assert(link);
-
-        SET_FOREACH(route, link->dhcp_routes) {
-                k = route_remove(route, NULL, link);
-                if (k < 0)
-                        r = k;
-        }
-
-        if (link->dhcp_address) {
-                k = address_remove(link->dhcp_address, link);
-                if (k < 0)
-                        r = k;
-        }
-
-        return r;
-}
-
 int dhcp4_lease_lost(Link *link) {
         int k, r = 0;
 
         assert(link);
         assert(link->dhcp_lease);
+        assert(link->network);
 
         log_link_info(link, "DHCP lease lost");
 
         link->dhcp4_configured = false;
 
-        /* dhcp4_lease_lost() may be called during renewing IP address. */
-        k = dhcp4_release_old_lease(link);
-        if (k < 0)
-                r = k;
+        if (link->network->dhcp_use_6rd &&
+            dhcp4_lease_has_pd_prefix(link->dhcp_lease))
+                dhcp4_pd_prefix_lost(link);
 
-        k = dhcp4_remove_all(link);
+        k = dhcp4_remove_address_and_routes(link, /* only_marked = */ false);
         if (k < 0)
                 r = k;
 
@@ -766,24 +767,7 @@
         link->dhcp_lease = sd_dhcp_lease_unref(link->dhcp_lease);
         link_dirty(link);
 
-        if (link->network->dhcp_send_decline) {
-                Address *a;
-
-                /* The acquired address may be still ARP probing and not configured. */
-
-                SET_FOREACH(a, link->addresses_ipv4acd)
-                        if (!a->is_static && address_get(link, a, NULL) < 0) {
-                                Request req = {
-                                        .link = link,
-                                        .address = a,
-                                };
-
-                                log_link_debug(link, "Canceling the request to configure DHCPv4 address "IPV4_ADDRESS_FMT_STR,
-                                               IPV4_ADDRESS_FMT_VAL(a->in_addr.in));
-                                request_drop(ordered_set_get(link->manager->request_queue, &req));
-                        }
-        }
-
+        /* If one of the above failed. Do not request nexthops and routes. */
         if (r < 0)
                 return r;
 
@@ -794,78 +778,34 @@
         return link_request_static_routes(link, true);
 }
 
-static int dhcp4_address_ready_callback(Address *address) {
-        assert(address);
-
-        /* Do not call this again. */
-        address->callback = NULL;
-
-        dhcp4_check_ready(address->link);
-        return 0;
-}
-
-static int dhcp4_after_address_configure(Request *req, void *object) {
-        Address *address = object;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ADDRESS);
-        assert(address);
-
-        link = req->link;
-
-        if (!address_equal(link->dhcp_address, address)) {
-                if (link->dhcp_address_old &&
-                    !address_equal(link->dhcp_address_old, link->dhcp_address)) {
-                        /* Still too old address exists? Let's remove it immediately. */
-                        r = address_remove(link->dhcp_address_old, link);
-                        if (r < 0)
-                                return r;
-                }
-                link->dhcp_address_old = link->dhcp_address;
-        }
-
-        link->dhcp_address = address;
-        return 0;
-}
-
-static int dhcp4_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int dhcp4_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Address *address) {
         int r;
 
         assert(link);
-        assert(link->dhcp4_messages > 0);
-
-        link->dhcp4_messages--;
 
         r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCPv4 address");
         if (r <= 0)
                 return r;
 
-        if (address_is_ready(link->dhcp_address)) {
-                r = dhcp4_address_ready_callback(link->dhcp_address);
-                if (r < 0)
-                        link_enter_failed(link);
-        } else
-                link->dhcp_address->callback = dhcp4_address_ready_callback;
+        r = dhcp4_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
 
         return 1;
 }
 
 static int dhcp4_request_address(Link *link, bool announce) {
         _cleanup_(address_freep) Address *addr = NULL;
-        uint32_t lifetime = CACHE_INFO_INFINITY_LIFE_TIME;
-        struct in_addr address, netmask;
+        struct in_addr address, netmask, server;
         unsigned prefixlen;
-        Request *req;
+        Address *existing;
+        usec_t lifetime_usec;
         int r;
 
         assert(link);
+        assert(link->manager);
         assert(link->network);
-
-        if (!link->dhcp_lease)
-                return 0;
+        assert(link->dhcp_lease);
 
         r = sd_dhcp_lease_get_address(link->dhcp_lease, &address);
         if (r < 0)
@@ -875,11 +815,22 @@
         if (r < 0)
                 return log_link_warning_errno(link, r, "DHCP error: no netmask: %m");
 
+        r = sd_dhcp_lease_get_server_identifier(link->dhcp_lease, &server);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "DHCP error: failed to get DHCP server IP address: %m");
+
         if (!FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP)) {
-                r = sd_dhcp_lease_get_lifetime(link->dhcp_lease, &lifetime);
+                uint32_t lifetime_sec;
+                usec_t now_usec;
+
+                r = sd_dhcp_lease_get_lifetime(link->dhcp_lease, &lifetime_sec);
                 if (r < 0)
                         return log_link_warning_errno(link, r, "DHCP error: no lifetime: %m");
-        }
+
+                assert_se(sd_event_now(link->manager->event, CLOCK_BOOTTIME, &now_usec) >= 0);
+                lifetime_usec = sec_to_usec(lifetime_sec, now_usec);
+        } else
+                lifetime_usec = USEC_INFINITY;
 
         prefixlen = in4_addr_netmask_to_prefixlen(&netmask);
 
@@ -893,19 +844,21 @@
                 if (r > 0 && in4_addr_is_set(&router[0]))
                         log_struct(LOG_INFO,
                                    LOG_LINK_INTERFACE(link),
-                                   LOG_LINK_MESSAGE(link, "DHCPv4 address "IPV4_ADDRESS_FMT_STR"/%u via "IPV4_ADDRESS_FMT_STR,
+                                   LOG_LINK_MESSAGE(link, "DHCPv4 address "IPV4_ADDRESS_FMT_STR"/%u, gateway "IPV4_ADDRESS_FMT_STR" acquired from "IPV4_ADDRESS_FMT_STR,
                                                     IPV4_ADDRESS_FMT_VAL(address),
                                                     prefixlen,
-                                                    IPV4_ADDRESS_FMT_VAL(router[0])),
+                                                    IPV4_ADDRESS_FMT_VAL(router[0]),
+                                                    IPV4_ADDRESS_FMT_VAL(server)),
                                    "ADDRESS="IPV4_ADDRESS_FMT_STR, IPV4_ADDRESS_FMT_VAL(address),
                                    "PREFIXLEN=%u", prefixlen,
                                    "GATEWAY="IPV4_ADDRESS_FMT_STR, IPV4_ADDRESS_FMT_VAL(router[0]));
                 else
                         log_struct(LOG_INFO,
                                    LOG_LINK_INTERFACE(link),
-                                   LOG_LINK_MESSAGE(link, "DHCPv4 address "IPV4_ADDRESS_FMT_STR"/%u",
+                                   LOG_LINK_MESSAGE(link, "DHCPv4 address "IPV4_ADDRESS_FMT_STR"/%u acquired from "IPV4_ADDRESS_FMT_STR,
                                                     IPV4_ADDRESS_FMT_VAL(address),
-                                                    prefixlen),
+                                                    prefixlen,
+                                                    IPV4_ADDRESS_FMT_VAL(server)),
                                    "ADDRESS="IPV4_ADDRESS_FMT_STR, IPV4_ADDRESS_FMT_VAL(address),
                                    "PREFIXLEN=%u", prefixlen);
         }
@@ -914,28 +867,35 @@
         if (r < 0)
                 return log_oom();
 
+        addr->source = NETWORK_CONFIG_SOURCE_DHCP4;
+        addr->provider.in = server;
         addr->family = AF_INET;
         addr->in_addr.in.s_addr = address.s_addr;
-        addr->cinfo.ifa_prefered = lifetime;
-        addr->cinfo.ifa_valid = lifetime;
+        addr->lifetime_preferred_usec = lifetime_usec;
+        addr->lifetime_valid_usec = lifetime_usec;
         addr->prefixlen = prefixlen;
-        if (prefixlen <= 30)
-                addr->broadcast.s_addr = address.s_addr | ~netmask.s_addr;
+        address_set_broadcast(addr, link);
         SET_FLAG(addr->flags, IFA_F_NOPREFIXROUTE, !link_prefixroute(link));
         addr->route_metric = link->network->dhcp_route_metric;
         addr->duplicate_address_detection = link->network->dhcp_send_decline ? ADDRESS_FAMILY_IPV4 : ADDRESS_FAMILY_NO;
 
-        if (address_get(link, addr, NULL) < 0)
+        r = free_and_strdup_warn(&addr->label, link->network->dhcp_label);
+        if (r < 0)
+                return r;
+
+        r = free_and_strdup_warn(&addr->netlabel, link->network->dhcp_netlabel);
+        if (r < 0)
+                return r;
+
+        if (address_get(link, addr, &existing) < 0) /* The address is new. */
                 link->dhcp4_configured = false;
+        else
+                address_unmark(existing);
 
         r = link_request_address(link, TAKE_PTR(addr), true, &link->dhcp4_messages,
-                                 dhcp4_address_handler, &req);
+                                 dhcp4_address_handler, NULL);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to request DHCPv4 address: %m");
-        if (r == 0)
-                return 0;
-
-        req->after_configure = dhcp4_after_address_configure;
 
         return 0;
 }
@@ -945,6 +905,9 @@
 
         assert(link);
 
+        link_mark_addresses(link, NETWORK_CONFIG_SOURCE_DHCP4);
+        link_mark_routes(link, NETWORK_CONFIG_SOURCE_DHCP4);
+
         r = dhcp4_request_address(link, announce);
         if (r < 0)
                 return r;
@@ -953,27 +916,40 @@
         if (r < 0)
                 return r;
 
-        link_set_state(link, LINK_STATE_CONFIGURING);
-        link_check_ready(link);
+        if (!link->dhcp4_configured) {
+                link_set_state(link, LINK_STATE_CONFIGURING);
+                link_check_ready(link);
+        }
 
         return 0;
 }
 
 static int dhcp_lease_renew(sd_dhcp_client *client, Link *link) {
+        _cleanup_(sd_dhcp_lease_unrefp) sd_dhcp_lease *old_lease = NULL;
         sd_dhcp_lease *lease;
         int r;
 
         assert(link);
+        assert(link->network);
         assert(client);
 
         r = sd_dhcp_client_get_lease(client, &lease);
         if (r < 0)
                 return log_link_warning_errno(link, r, "DHCP error: no lease: %m");
 
-        sd_dhcp_lease_unref(link->dhcp_lease);
+        old_lease = TAKE_PTR(link->dhcp_lease);
         link->dhcp_lease = sd_dhcp_lease_ref(lease);
         link_dirty(link);
 
+        if (link->network->dhcp_use_6rd) {
+                if (dhcp4_lease_has_pd_prefix(link->dhcp_lease)) {
+                        r = dhcp4_pd_prefix_acquired(link);
+                        if (r < 0)
+                                return log_link_warning_errno(link, r, "Failed to process 6rd option: %m");
+                } else if (dhcp4_lease_has_pd_prefix(old_lease))
+                        dhcp4_pd_prefix_lost(link);
+        }
+
         return dhcp4_request_address_and_routes(link, false);
 }
 
@@ -1039,6 +1015,13 @@
                 }
         }
 
+        if (link->network->dhcp_use_6rd &&
+            dhcp4_lease_has_pd_prefix(link->dhcp_lease)) {
+                r = dhcp4_pd_prefix_acquired(link);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to process 6rd option: %m");
+        }
+
         return dhcp4_request_address_and_routes(link, true);
 }
 
@@ -1052,7 +1035,7 @@
         return r;
 }
 
-static int dhcp_server_is_deny_listed(Link *link, sd_dhcp_client *client) {
+static int dhcp_server_is_filtered(Link *link, sd_dhcp_client *client) {
         sd_dhcp_lease *lease;
         struct in_addr addr;
         int r;
@@ -1069,39 +1052,16 @@
         if (r < 0)
                 return log_link_debug_errno(link, r, "Failed to get DHCP server IP address: %m");
 
-        if (set_contains(link->network->dhcp_deny_listed_ip, UINT32_TO_PTR(addr.s_addr))) {
-                log_struct(LOG_DEBUG,
-                           LOG_LINK_INTERFACE(link),
-                           LOG_LINK_MESSAGE(link, "DHCPv4 server IP address "IPV4_ADDRESS_FMT_STR" found in deny-list, ignoring offer",
-                                            IPV4_ADDRESS_FMT_VAL(addr)));
-                return true;
-        }
+        if (in4_address_is_filtered(&addr, link->network->dhcp_allow_listed_ip, link->network->dhcp_deny_listed_ip)) {
+                if (DEBUG_LOGGING) {
+                        if (link->network->dhcp_allow_listed_ip)
+                                log_link_debug(link, "DHCPv4 server IP address "IPV4_ADDRESS_FMT_STR" not found in allow-list, ignoring offer.",
+                                               IPV4_ADDRESS_FMT_VAL(addr));
+                        else
+                                log_link_debug(link, "DHCPv4 server IP address "IPV4_ADDRESS_FMT_STR" found in deny-list, ignoring offer.",
+                                               IPV4_ADDRESS_FMT_VAL(addr));
+                }
 
-        return false;
-}
-
-static int dhcp_server_is_allow_listed(Link *link, sd_dhcp_client *client) {
-        sd_dhcp_lease *lease;
-        struct in_addr addr;
-        int r;
-
-        assert(link);
-        assert(link->network);
-        assert(client);
-
-        r = sd_dhcp_client_get_lease(client, &lease);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get DHCP lease: %m");
-
-        r = sd_dhcp_lease_get_server_identifier(lease, &addr);
-        if (r < 0)
-                return log_link_debug_errno(link, r, "Failed to get DHCP server IP address: %m");
-
-        if (set_contains(link->network->dhcp_allow_listed_ip, UINT32_TO_PTR(addr.s_addr))) {
-                log_struct(LOG_DEBUG,
-                           LOG_LINK_INTERFACE(link),
-                           LOG_LINK_MESSAGE(link, "DHCPv4 server IP address "IPV4_ADDRESS_FMT_STR" found in allow-list, accepting offer",
-                                            IPV4_ADDRESS_FMT_VAL(addr)));
                 return true;
         }
 
@@ -1109,10 +1069,9 @@
 }
 
 static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) {
-        Link *link = userdata;
+        Link *link = ASSERT_PTR(userdata);
         int r;
 
-        assert(link);
         assert(link->network);
         assert(link->manager);
 
@@ -1124,6 +1083,12 @@
                         if (link->ipv4ll) {
                                 log_link_debug(link, "DHCP client is stopped. Acquiring IPv4 link-local address");
 
+                                if (in4_addr_is_set(&link->network->ipv4ll_start_address)) {
+                                        r = sd_ipv4ll_set_address(link->ipv4ll, &link->network->ipv4ll_start_address);
+                                        if (r < 0)
+                                                return log_link_warning_errno(link, r, "Could not set IPv4 link-local start address: %m");
+                                }
+
                                 r = sd_ipv4ll_start(link->ipv4ll);
                                 if (r < 0)
                                         return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m");
@@ -1194,25 +1159,25 @@
                         }
                         break;
                 case SD_DHCP_CLIENT_EVENT_SELECTING:
-                        if (!set_isempty(link->network->dhcp_allow_listed_ip)) {
-                                r = dhcp_server_is_allow_listed(link, client);
-                                if (r < 0)
-                                        return r;
-                                if (r == 0)
-                                        return -ENOMSG;
-                        } else {
-                                r = dhcp_server_is_deny_listed(link, client);
-                                if (r < 0)
-                                        return r;
-                                if (r != 0)
-                                        return -ENOMSG;
+                        r = dhcp_server_is_filtered(link, client);
+                        if (r < 0) {
+                                link_enter_failed(link);
+                                return r;
                         }
+                        if (r > 0)
+                                return -ENOMSG;
                         break;
 
                 case SD_DHCP_CLIENT_EVENT_TRANSIENT_FAILURE:
                         if (link->ipv4ll && !sd_ipv4ll_is_running(link->ipv4ll)) {
                                 log_link_debug(link, "Problems acquiring DHCP lease, acquiring IPv4 link-local address");
 
+                                if (in4_addr_is_set(&link->network->ipv4ll_start_address)) {
+                                        r = sd_ipv4ll_set_address(link->ipv4ll, &link->network->ipv4ll_start_address);
+                                        if (r < 0)
+                                                return log_link_warning_errno(link, r, "Could not set IPv4 link-local start address: %m");
+                                }
+
                                 r = sd_ipv4ll_start(link->ipv4ll);
                                 if (r < 0)
                                         return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m");
@@ -1244,7 +1209,7 @@
         else {
                 r = gethostname_strict(&hostname);
                 if (r < 0 && r != -ENXIO) /* ENXIO: no hostname set or hostname is "localhost" */
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to get hostname: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to get hostname: %m");
 
                 hn = hostname;
         }
@@ -1252,9 +1217,9 @@
         r = sd_dhcp_client_set_hostname(link->dhcp_client, hn);
         if (r == -EINVAL && hostname)
                 /* Ignore error when the machine's hostname is not suitable to send in DHCP packet. */
-                log_link_debug_errno(link, r, "DHCP4 CLIENT: Failed to set hostname from kernel hostname, ignoring: %m");
+                log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set hostname from kernel hostname, ignoring: %m");
         else if (r < 0)
-                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set hostname: %m");
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set hostname: %m");
 
         return 0;
 }
@@ -1284,7 +1249,7 @@
                                                          duid->raw_data_len > 0 ? duid->raw_data : NULL,
                                                          duid->raw_data_len);
                 if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set IAID+DUID: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set IAID+DUID: %m");
                 break;
         }
         case DHCP_CLIENT_ID_DUID_ONLY: {
@@ -1300,7 +1265,7 @@
                                                     duid->raw_data_len > 0 ? duid->raw_data : NULL,
                                                     duid->raw_data_len);
                 if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set DUID: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set DUID: %m");
                 break;
         }
         case DHCP_CLIENT_ID_MAC: {
@@ -1318,25 +1283,16 @@
                                                  hw_addr,
                                                  hw_addr_len);
                 if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set client ID: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set client ID: %m");
                 break;
         }
         default:
-                assert_not_reached("Unknown client identifier type.");
+                assert_not_reached();
         }
 
         return 0;
 }
 
-static int dhcp4_configure_duid(Link *link) {
-        assert(link);
-
-        if (!IN_SET(link->network->dhcp_client_identifier, DHCP_CLIENT_ID_DUID, DHCP_CLIENT_ID_DUID_ONLY))
-                return 1;
-
-        return dhcp_configure_duid(link, link_get_dhcp4_duid(link));
-}
-
 static int dhcp4_set_request_address(Link *link) {
         Address *a;
 
@@ -1347,7 +1303,9 @@
         if (!FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP))
                 return 0;
 
-        SET_FOREACH(a, link->addresses_foreign) {
+        SET_FOREACH(a, link->addresses) {
+                if (a->source != NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
                 if (a->family != AF_INET)
                         continue;
                 if (link_address_is_dynamic(link, a))
@@ -1357,7 +1315,7 @@
         if (!a)
                 return 0;
 
-        log_link_debug(link, "DHCP4 CLIENT: requesting " IPV4_ADDRESS_FMT_STR, IPV4_ADDRESS_FMT_VAL(a->in_addr.in));
+        log_link_debug(link, "DHCPv4 CLIENT: requesting " IPV4_ADDRESS_FMT_STR, IPV4_ADDRESS_FMT_VAL(a->in_addr.in));
 
         return sd_dhcp_client_set_request_address(link->dhcp_client, &a->in_addr.in);
 }
@@ -1375,18 +1333,18 @@
          * If neither is set or a failure occurs, return false, which is the default for this flag.
          */
         r = link->network->dhcp_broadcast;
-        if (r < 0 && link->sd_device && sd_device_get_property_value(link->sd_device, "ID_NET_DHCP_BROADCAST", &val) >= 0) {
+        if (r < 0 && link->dev && sd_device_get_property_value(link->dev, "ID_NET_DHCP_BROADCAST", &val) >= 0) {
                 r = parse_boolean(val);
                 if (r < 0)
-                        log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to parse ID_NET_DHCP_BROADCAST, ignoring: %m");
+                        log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to parse ID_NET_DHCP_BROADCAST, ignoring: %m");
                 else
-                        log_link_debug(link, "DHCP4 CLIENT: Detected ID_NET_DHCP_BROADCAST='%d'.", r);
+                        log_link_debug(link, "DHCPv4 CLIENT: Detected ID_NET_DHCP_BROADCAST='%d'.", r);
 
         }
         return r == true;
 }
 
-int dhcp4_configure(Link *link) {
+static int dhcp4_configure(Link *link) {
         sd_dhcp_option *send_option;
         void *request_options;
         int r;
@@ -1394,88 +1352,91 @@
         assert(link);
         assert(link->network);
 
-        if (!link_dhcp4_enabled(link))
-                return 0;
-
         if (link->dhcp_client)
-                return -EBUSY; /* Already configured. */
-
-        r = dhcp4_configure_duid(link);
-        if (r <= 0)
-                return r;
+                return log_link_debug_errno(link, SYNTHETIC_ERRNO(EBUSY), "DHCPv4 client is already configured.");
 
         r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize);
         if (r < 0)
-                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to allocate DHCP4 client: %m");
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to allocate DHCPv4 client: %m");
 
         r = sd_dhcp_client_attach_event(link->dhcp_client, link->manager->event, 0);
         if (r < 0)
-                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to attach event to DHCP4 client: %m");
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to attach event to DHCPv4 client: %m");
+
+        r = sd_dhcp_client_attach_device(link->dhcp_client, link->dev);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to attach device: %m");
 
         r = sd_dhcp_client_set_mac(link->dhcp_client,
                                    link->hw_addr.bytes,
                                    link->bcast_addr.length > 0 ? link->bcast_addr.bytes : NULL,
                                    link->hw_addr.length, link->iftype);
         if (r < 0)
-                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set MAC address: %m");
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set MAC address: %m");
 
         r = sd_dhcp_client_set_ifindex(link->dhcp_client, link->ifindex);
         if (r < 0)
-                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set ifindex: %m");
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set ifindex: %m");
 
         r = sd_dhcp_client_set_callback(link->dhcp_client, dhcp4_handler, link);
         if (r < 0)
-                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set callback: %m");
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set callback: %m");
 
         r = sd_dhcp_client_set_request_broadcast(link->dhcp_client, link_needs_dhcp_broadcast(link));
         if (r < 0)
-                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for broadcast: %m");
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for broadcast: %m");
 
         if (link->mtu > 0) {
                 r = sd_dhcp_client_set_mtu(link->dhcp_client, link->mtu);
                 if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set MTU: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set MTU: %m");
         }
 
         if (!link->network->dhcp_anonymize) {
                 if (link->network->dhcp_use_mtu) {
-                        r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_INTERFACE_MTU);
+                        r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_MTU_INTERFACE);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for MTU: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for MTU: %m");
                 }
 
                 if (link->network->dhcp_use_routes) {
                         r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_STATIC_ROUTE);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for static route: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for static route: %m");
 
                         r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for classless static route: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for classless static route: %m");
                 }
 
                 if (link->network->dhcp_use_domains != DHCP_USE_DOMAINS_NO) {
-                        r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_DOMAIN_SEARCH_LIST);
+                        r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_DOMAIN_SEARCH);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for domain search list: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for domain search list: %m");
                 }
 
                 if (link->network->dhcp_use_ntp) {
                         r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_NTP_SERVER);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for NTP server: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for NTP server: %m");
                 }
 
                 if (link->network->dhcp_use_sip) {
                         r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_SIP_SERVER);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for SIP server: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for SIP server: %m");
                 }
 
                 if (link->network->dhcp_use_timezone) {
-                        r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_NEW_TZDB_TIMEZONE);
+                        r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_TZDB_TIMEZONE);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for timezone: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for timezone: %m");
+                }
+
+                if (link->network->dhcp_use_6rd) {
+                        r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_6RD);
+                        if (r < 0)
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for 6rd: %m");
                 }
 
                 SET_FOREACH(request_options, link->network->dhcp_request_options) {
@@ -1483,7 +1444,7 @@
 
                         r = sd_dhcp_client_set_request_option(link->dhcp_client, option);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for '%u': %m", option);
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for '%u': %m", option);
                 }
 
                 ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp_client_send_options) {
@@ -1491,7 +1452,7 @@
                         if (r == -EEXIST)
                                 continue;
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set send option: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set send option: %m");
                 }
 
                 ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp_client_send_vendor_options) {
@@ -1499,7 +1460,7 @@
                         if (r == -EEXIST)
                                 continue;
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set send option: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set send option: %m");
                 }
 
                 r = dhcp4_set_hostname(link);
@@ -1510,54 +1471,61 @@
                         r = sd_dhcp_client_set_vendor_class_identifier(link->dhcp_client,
                                                                        link->network->dhcp_vendor_class_identifier);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set vendor class identifier: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set vendor class identifier: %m");
                 }
 
                 if (link->network->dhcp_mudurl) {
                         r = sd_dhcp_client_set_mud_url(link->dhcp_client, link->network->dhcp_mudurl);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set MUD URL: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set MUD URL: %m");
                 }
 
                 if (link->network->dhcp_user_class) {
                         r = sd_dhcp_client_set_user_class(link->dhcp_client, link->network->dhcp_user_class);
                         if (r < 0)
-                                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set user class: %m");
+                                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set user class: %m");
                 }
         }
 
         if (link->network->dhcp_client_port > 0) {
                 r = sd_dhcp_client_set_client_port(link->dhcp_client, link->network->dhcp_client_port);
                 if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set listen port: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set listen port: %m");
         }
 
         if (link->network->dhcp_max_attempts > 0) {
                 r = sd_dhcp_client_set_max_attempts(link->dhcp_client, link->network->dhcp_max_attempts);
                 if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set max attempts: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set max attempts: %m");
         }
 
-        if (link->network->dhcp_ip_service_type > 0) {
+        if (link->network->dhcp_ip_service_type >= 0) {
                 r = sd_dhcp_client_set_service_type(link->dhcp_client, link->network->dhcp_ip_service_type);
                 if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set IP service type: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set IP service type: %m");
+        }
+
+        if (link->network->dhcp_socket_priority_set) {
+                r = sd_dhcp_client_set_socket_priority(link->dhcp_client, link->network->dhcp_socket_priority);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set socket priority: %m");
         }
 
         if (link->network->dhcp_fallback_lease_lifetime > 0) {
                 r = sd_dhcp_client_set_fallback_lease_lifetime(link->dhcp_client, link->network->dhcp_fallback_lease_lifetime);
                 if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed set to lease lifetime: %m");
+                        return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed set to lease lifetime: %m");
         }
 
         r = dhcp4_set_request_address(link);
         if (r < 0)
-                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to set initial DHCPv4 address: %m");
+                return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set initial DHCPv4 address: %m");
 
         return dhcp4_set_client_identifier(link);
 }
 
 int dhcp4_update_mac(Link *link) {
+        bool restart;
         int r;
 
         assert(link);
@@ -1565,27 +1533,104 @@
         if (!link->dhcp_client)
                 return 0;
 
-        r = sd_dhcp_client_set_mac(link->dhcp_client, link->hw_addr.bytes,
+        restart = sd_dhcp_client_is_running(link->dhcp_client);
+
+        r = sd_dhcp_client_stop(link->dhcp_client);
+        if (r < 0)
+                return r;
+
+        r = sd_dhcp_client_set_mac(link->dhcp_client,
+                                   link->hw_addr.bytes,
                                    link->bcast_addr.length > 0 ? link->bcast_addr.bytes : NULL,
                                    link->hw_addr.length, link->iftype);
         if (r < 0)
                 return r;
 
-        return dhcp4_set_client_identifier(link);
+        r = dhcp4_set_client_identifier(link);
+        if (r < 0)
+                return r;
+
+        if (restart) {
+                r = sd_dhcp_client_start(link->dhcp_client);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
 }
 
 int dhcp4_start(Link *link) {
+        int r;
+
         assert(link);
 
         if (!link->dhcp_client)
                 return 0;
 
+        if (!link_has_carrier(link))
+                return 0;
+
         if (sd_dhcp_client_is_running(link->dhcp_client) > 0)
                 return 0;
 
-        log_link_debug(link, "Acquiring DHCPv4 lease");
+        r = sd_dhcp_client_start(link->dhcp_client);
+        if (r < 0)
+                return r;
 
-        return sd_dhcp_client_start(link->dhcp_client);
+        return 1;
+}
+
+static int dhcp4_configure_duid(Link *link) {
+        assert(link);
+
+        if (!IN_SET(link->network->dhcp_client_identifier, DHCP_CLIENT_ID_DUID, DHCP_CLIENT_ID_DUID_ONLY))
+                return 1;
+
+        return dhcp_configure_duid(link, link_get_dhcp4_duid(link));
+}
+
+static int dhcp4_process_request(Request *req, Link *link, void *userdata) {
+        int r;
+
+        assert(link);
+
+        if (!link_is_ready_to_configure(link, /* allow_unmanaged = */ false))
+                return 0;
+
+        r = dhcp4_configure_duid(link);
+        if (r <= 0)
+                return r;
+
+        r = dhcp4_configure(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure DHCPv4 client: %m");
+
+        r = dhcp4_start(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to start DHCPv4 client: %m");
+
+        log_link_debug(link, "DHCPv4 client is configured%s.",
+                       r > 0 ? ", acquiring DHCPv4 lease" : "");
+        return 1;
+}
+
+int link_request_dhcp4_client(Link *link) {
+        int r;
+
+        assert(link);
+
+        if (!link_dhcp4_enabled(link))
+                return 0;
+
+        if (link->dhcp_client)
+                return 0;
+
+        r = link_queue_request(link, REQUEST_TYPE_DHCP4_CLIENT, dhcp4_process_request, NULL);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to request configuring of the DHCPv4 client: %m");
+
+        log_link_debug(link, "Requested configuring of the DHCPv4 client.");
+        return 0;
 }
 
 int config_parse_dhcp_max_attempts(
@@ -1600,11 +1645,10 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t a;
         int r;
 
-        assert(network);
         assert(lvalue);
         assert(rvalue);
 
@@ -1636,64 +1680,6 @@
         return 0;
 }
 
-int config_parse_dhcp_acl_ip_address(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Network *network = data;
-        Set **acl;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        acl = STR_IN_SET(lvalue, "DenyList", "BlackList") ? &network->dhcp_deny_listed_ip : &network->dhcp_allow_listed_ip;
-
-        if (isempty(rvalue)) {
-                *acl = set_free(*acl);
-                return 0;
-        }
-
-        for (const char *p = rvalue;;) {
-                _cleanup_free_ char *n = NULL;
-                union in_addr_union ip;
-
-                r = extract_first_word(&p, &n, NULL, 0);
-                if (r == -ENOMEM)
-                        return log_oom();
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Failed to parse DHCP '%s=' IP address, ignoring assignment: %s",
-                                   lvalue, rvalue);
-                        return 0;
-                }
-                if (r == 0)
-                        return 0;
-
-                r = in_addr_from_string(AF_INET, n, &ip);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "DHCP '%s=' IP address is invalid, ignoring assignment: %s", lvalue, n);
-                        continue;
-                }
-
-                r = set_ensure_put(acl, NULL, UINT32_TO_PTR(ip.in.s_addr));
-                if (r < 0)
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Failed to store DHCP '%s=' IP address '%s', ignoring assignment: %m", lvalue, n);
-        }
-}
-
 int config_parse_dhcp_ip_service_type(
                 const char *unit,
                 const char *filename,
@@ -1706,22 +1692,28 @@
                 void *data,
                 void *userdata) {
 
+        int *tos = ASSERT_PTR(data);
+
         assert(filename);
         assert(lvalue);
         assert(rvalue);
 
-        if (streq(rvalue, "CS4"))
-                *((int *)data) = IPTOS_CLASS_CS4;
+        if (isempty(rvalue))
+                *tos = -1; /* use sd_dhcp_client's default (currently, CS6). */
+        else if (streq(rvalue, "none"))
+                *tos = 0;
+        else if (streq(rvalue, "CS4"))
+                *tos = IPTOS_CLASS_CS4;
         else if (streq(rvalue, "CS6"))
-                *((int *)data) = IPTOS_CLASS_CS6;
+                *tos = IPTOS_CLASS_CS6;
         else
                 log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Failed to parse IPServiceType type '%s', ignoring.", rvalue);
+                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
 
         return 0;
 }
 
-int config_parse_dhcp_mud_url(
+int config_parse_dhcp_socket_priority(
                 const char *unit,
                 const char *filename,
                 unsigned line,
@@ -1733,37 +1725,32 @@
                 void *data,
                 void *userdata) {
 
-        _cleanup_free_ char *unescaped = NULL;
-        Network *network = data;
-        int r;
+        Network *network = ASSERT_PTR(data);
+        int a, r;
 
-        assert(filename);
         assert(lvalue);
         assert(rvalue);
 
         if (isempty(rvalue)) {
-                network->dhcp_mudurl = mfree(network->dhcp_mudurl);
+                network->dhcp_socket_priority_set = false;
                 return 0;
         }
 
-        r = cunescape(rvalue, 0, &unescaped);
+        r = safe_atoi(rvalue, &a);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to Failed to unescape MUD URL, ignoring: %s", rvalue);
+                           "Failed to parse socket priority, ignoring: %s", rvalue);
                 return 0;
         }
 
-        if (!http_url_is_valid(unescaped) || strlen(unescaped) > 255) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Failed to parse MUD URL '%s', ignoring: %m", rvalue);
+        network->dhcp_socket_priority_set = true;
+        network->dhcp_socket_priority = a;
 
-                return 0;
-        }
-
-        return free_and_strdup_warn(&network->dhcp_mudurl, unescaped);
+        return 0;
 }
 
-int config_parse_dhcp_fallback_lease_lifetime(const char *unit,
+int config_parse_dhcp_fallback_lease_lifetime(
+                const char *unit,
                 const char *filename,
                 unsigned line,
                 const char *section,
@@ -1773,8 +1760,8 @@
                 const char *rvalue,
                 void *data,
                 void *userdata) {
+
         Network *network = userdata;
-        uint32_t k;
 
         assert(filename);
         assert(section);
@@ -1788,19 +1775,49 @@
         }
 
         /* We accept only "forever" or "infinity". */
-        if (STR_IN_SET(rvalue, "forever", "infinity"))
-                k = CACHE_INFO_INFINITY_LIFE_TIME;
-        else {
+        if (!STR_IN_SET(rvalue, "forever", "infinity")) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0,
                            "Invalid LeaseLifetime= value, ignoring: %s", rvalue);
                 return 0;
         }
 
-        network->dhcp_fallback_lease_lifetime = k;
+        network->dhcp_fallback_lease_lifetime = UINT32_MAX;
 
         return 0;
 }
 
+int config_parse_dhcp_label(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        char **label = ASSERT_PTR(data);
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *label = mfree(*label);
+                return 0;
+        }
+
+        if (!address_label_valid(rvalue)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Address label is too long or invalid, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        return free_and_strdup_warn(label, rvalue);
+}
+
 static const char* const dhcp_client_identifier_table[_DHCP_CLIENT_ID_MAX] = {
         [DHCP_CLIENT_ID_MAC] = "mac",
         [DHCP_CLIENT_ID_DUID] = "duid",
diff --git a/src/network/networkd-dhcp4.h b/src/network/networkd-dhcp4.h
index e41e39f..0f14e07 100644
--- a/src/network/networkd-dhcp4.h
+++ b/src/network/networkd-dhcp4.h
@@ -4,6 +4,7 @@
 #include "conf-parser.h"
 
 typedef struct Link Link;
+typedef struct Network Network;
 
 typedef enum DHCPClientIdentifier {
         DHCP_CLIENT_ID_MAC,
@@ -18,14 +19,17 @@
 } DHCPClientIdentifier;
 
 void network_adjust_dhcp4(Network *network);
-int dhcp4_configure(Link *link);
 int dhcp4_update_mac(Link *link);
 int dhcp4_start(Link *link);
 int dhcp4_lease_lost(Link *link);
+int dhcp4_check_ready(Link *link);
+
+int link_request_dhcp4_client(Link *link);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_client_identifier);
-CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_acl_ip_address);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_max_attempts);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_ip_service_type);
+CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_socket_priority);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_mud_url);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_fallback_lease_lifetime);
+CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_label);
diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c
index 2b72b61..43be988 100644
--- a/src/network/networkd-dhcp6.c
+++ b/src/network/networkd-dhcp6.c
@@ -3,28 +3,20 @@
   Copyright © 2014 Intel Corporation. All rights reserved.
 ***/
 
-#include <netinet/in.h>
-#include <linux/if.h>
-#include <linux/if_arp.h>
-
 #include "sd-dhcp6-client.h"
 
-#include "escape.h"
 #include "hashmap.h"
 #include "hostname-setup.h"
 #include "hostname-util.h"
-#include "missing_network.h"
 #include "networkd-address.h"
+#include "networkd-dhcp-prefix-delegation.h"
 #include "networkd-dhcp6.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
 #include "networkd-queue.h"
-#include "networkd-radv.h"
-#include "siphash24.h"
+#include "networkd-route.h"
 #include "string-table.h"
 #include "string-util.h"
-#include "radv-internal.h"
-#include "web-util.h"
 
 bool link_dhcp6_with_address_enabled(Link *link) {
         if (!link_dhcp6_enabled(link))
@@ -33,1161 +25,224 @@
         return link->network->dhcp6_use_address;
 }
 
-bool link_dhcp6_pd_is_enabled(Link *link) {
+static DHCP6ClientStartMode link_get_dhcp6_client_start_mode(Link *link) {
         assert(link);
 
         if (!link->network)
-                return false;
+                return DHCP6_CLIENT_START_MODE_NO;
 
-        return link->network->dhcp6_pd;
+        /* When WithoutRA= is explicitly specified, then honor it. */
+        if (link->network->dhcp6_client_start_mode >= 0)
+                return link->network->dhcp6_client_start_mode;
+
+        /* When this interface itself is an uplink interface, then start dhcp6 client in solicit mode. */
+        if (dhcp_pd_is_uplink(link, link, /* accept_auto = */ false))
+                return DHCP6_CLIENT_START_MODE_SOLICIT;
+
+        /* Otherwise, start dhcp6 client when RA is received. */
+        return DHCP6_CLIENT_START_MODE_NO;
 }
 
-static bool dhcp6_lease_has_pd_prefix(sd_dhcp6_lease *lease) {
-        uint32_t lifetime_preferred, lifetime_valid;
-        struct in6_addr pd_prefix;
-        uint8_t pd_prefix_len;
+static int dhcp6_remove(Link *link, bool only_marked) {
+        Address *address;
+        Route *route;
+        int k, r = 0;
 
-        if (!lease)
-                return false;
+        assert(link);
 
-        sd_dhcp6_lease_reset_pd_prefix_iter(lease);
+        if (!only_marked)
+                link->dhcp6_configured = false;
 
-        return sd_dhcp6_lease_get_pd(lease, &pd_prefix, &pd_prefix_len, &lifetime_preferred, &lifetime_valid) >= 0;
-}
+        SET_FOREACH(route, link->routes) {
+                if (route->source != NETWORK_CONFIG_SOURCE_DHCP6)
+                        continue;
+                if (only_marked && !route_is_marked(route))
+                        continue;
 
-DHCP6DelegatedPrefix *dhcp6_pd_free(DHCP6DelegatedPrefix *p) {
-        if (!p)
-                return NULL;
+                k = route_remove(route);
+                if (k < 0)
+                        r = k;
 
-        if (p->link && p->link->manager) {
-                hashmap_remove(p->link->manager->dhcp6_prefixes, &p->prefix);
-                set_remove(p->link->manager->dhcp6_pd_prefixes, p);
+                route_cancel_request(route, link);
         }
 
-        link_unref(p->link);
-        return mfree(p);
+        SET_FOREACH(address, link->addresses) {
+                if (address->source != NETWORK_CONFIG_SOURCE_DHCP6)
+                        continue;
+                if (only_marked && !address_is_marked(address))
+                        continue;
+
+                k = address_remove(address);
+                if (k < 0)
+                        r = k;
+
+                address_cancel_request(address);
+        }
+
+        return r;
 }
 
-static void dhcp6_pd_hash_func(const DHCP6DelegatedPrefix *p, struct siphash *state) {
-        assert(p);
-
-        siphash24_compress(&p->pd_prefix, sizeof(p->pd_prefix), state);
-        siphash24_compress(&p->link, sizeof(p->link), state);
-}
-
-static int dhcp6_pd_compare_func(const DHCP6DelegatedPrefix *a, const DHCP6DelegatedPrefix *b) {
-        int r;
-
-        r = memcmp(&a->pd_prefix, &b->pd_prefix, sizeof(a->pd_prefix));
-        if (r != 0)
-                return r;
-
-        return CMP(a->link, b->link);
-}
-
-DEFINE_HASH_OPS(dhcp6_pd_hash_ops, DHCP6DelegatedPrefix, dhcp6_pd_hash_func, dhcp6_pd_compare_func);
-
-static Link *dhcp6_pd_get_link_by_prefix(Link *link, const struct in6_addr *prefix) {
-        DHCP6DelegatedPrefix *pd;
-
-        assert(link);
-        assert(link->manager);
-        assert(prefix);
-
-        pd = hashmap_get(link->manager->dhcp6_prefixes, prefix);
-        if (!pd)
-                return NULL;
-
-        return pd->link;
-}
-
-static int dhcp6_pd_get_assigned_prefix(Link *link, const struct in6_addr *pd_prefix, struct in6_addr *ret_prefix) {
-        DHCP6DelegatedPrefix *pd, in;
-
-        assert(link);
-        assert(link->manager);
-        assert(pd_prefix);
-        assert(ret_prefix);
-
-        in = (DHCP6DelegatedPrefix) {
-                .pd_prefix = *pd_prefix,
-                .link = link,
-        };
-
-        pd = set_get(link->manager->dhcp6_pd_prefixes, &in);
-        if (!pd)
-                return -ENOENT;
-
-        *ret_prefix = pd->prefix;
-        return 0;
-}
-
-static int dhcp6_pd_remove_old(Link *link, bool force);
-
-static int dhcp6_pd_address_callback(Address *address) {
+static int dhcp6_address_ready_callback(Address *address) {
         Address *a;
 
         assert(address);
         assert(address->link);
 
-        /* Make this called only once */
-        SET_FOREACH(a, address->link->dhcp6_pd_addresses)
-                a->callback = NULL;
+        SET_FOREACH(a, address->link->addresses)
+                if (a->source == NETWORK_CONFIG_SOURCE_DHCP6)
+                        a->callback = NULL;
 
-        return dhcp6_pd_remove_old(address->link, true);
+        return dhcp6_check_ready(address->link);
 }
 
-static int dhcp6_pd_remove_old(Link *link, bool force) {
+int dhcp6_check_ready(Link *link) {
+        bool has_ready = false;
         Address *address;
-        Route *route;
-        int k, r = 0;
-
-        assert(link);
-        assert(link->manager);
-
-        if (!force && (link->dhcp6_pd_address_messages > 0 || link->dhcp6_pd_route_messages > 0))
-                return 0;
-
-        if (set_isempty(link->dhcp6_pd_addresses_old) && set_isempty(link->dhcp6_pd_routes_old))
-                return 0;
-
-        if (!force) {
-                bool set_callback = !set_isempty(link->dhcp6_pd_addresses);
-
-                SET_FOREACH(address, link->dhcp6_pd_addresses)
-                        if (address_is_ready(address)) {
-                                set_callback = false;
-                                break;
-                        }
-
-                if (set_callback) {
-                        SET_FOREACH(address, link->dhcp6_pd_addresses)
-                                address->callback = dhcp6_pd_address_callback;
-                        return 0;
-                }
-        }
-
-        log_link_debug(link, "Removing old DHCPv6 Prefix Delegation addresses and routes.");
-
-        SET_FOREACH(route, link->dhcp6_pd_routes_old) {
-                k = route_remove(route, NULL, link);
-                if (k < 0)
-                        r = k;
-
-                if (link->radv)
-                        (void) sd_radv_remove_prefix(link->radv, &route->dst.in6, 64);
-                dhcp6_pd_free(hashmap_get(link->manager->dhcp6_prefixes, &route->dst.in6));
-        }
-
-        SET_FOREACH(address, link->dhcp6_pd_addresses_old) {
-                k = address_remove(address, link);
-                if (k < 0)
-                        r = k;
-        }
-
-        return r;
-}
-
-int dhcp6_pd_remove(Link *link) {
-        Address *address;
-        Route *route;
-        int k, r = 0;
-
-        assert(link);
-        assert(link->manager);
-
-        if (!link_dhcp6_pd_is_enabled(link))
-                return 0;
-
-        link->dhcp6_pd_address_configured = false;
-        link->dhcp6_pd_route_configured = false;
-
-        k = dhcp6_pd_remove_old(link, true);
-        if (k < 0)
-                r = k;
-
-        if (set_isempty(link->dhcp6_pd_addresses) && set_isempty(link->dhcp6_pd_routes))
-                return r;
-
-        log_link_debug(link, "Removing DHCPv6 Prefix Delegation addresses and routes.");
-
-        SET_FOREACH(route, link->dhcp6_pd_routes) {
-                k = route_remove(route, NULL, link);
-                if (k < 0)
-                        r = k;
-
-                if (link->radv)
-                        (void) sd_radv_remove_prefix(link->radv, &route->dst.in6, 64);
-                dhcp6_pd_free(hashmap_get(link->manager->dhcp6_prefixes, &route->dst.in6));
-        }
-
-        SET_FOREACH(address, link->dhcp6_pd_addresses) {
-                k = address_remove(address, link);
-                if (k < 0)
-                        r = k;
-        }
-
-        return r;
-}
-
-static int dhcp6_pd_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
         int r;
 
         assert(link);
-        assert(link->dhcp6_pd_route_messages > 0);
 
-        link->dhcp6_pd_route_messages--;
-
-        r = route_configure_handler_internal(rtnl, m, link, "Failed to add DHCPv6 Prefix Delegation route");
-        if (r <= 0)
-                return r;
-
-        if (link->dhcp6_pd_route_messages == 0) {
-                log_link_debug(link, "DHCPv6 prefix delegation routes set");
-                if (link->dhcp6_pd_prefixes_assigned)
-                        link->dhcp6_pd_route_configured = true;
-
-                r = dhcp6_pd_remove_old(link, false);
-                if (r < 0) {
-                        link_enter_failed(link);
-                        return 1;
-                }
-
-                link_check_ready(link);
-        }
-
-        return 1;
-}
-
-static int dhcp6_pd_after_route_configure(Request *req, void *object) {
-        Route *route = object;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ROUTE);
-        assert(route);
-
-        link = req->link;
-
-        r = set_ensure_put(&link->dhcp6_pd_routes, &route_hash_ops, route);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store DHCPv6 prefix route: %m");
-
-        set_remove(link->dhcp6_pd_routes_old, route);
-
-        return 0;
-}
-
-static int dhcp6_pd_request_route(Link *link, const struct in6_addr *prefix, const struct in6_addr *pd_prefix) {
-        _cleanup_(dhcp6_pd_freep) DHCP6DelegatedPrefix *pd = NULL;
-        _cleanup_(route_freep) Route *route = NULL;
-        Link *assigned_link;
-        Request *req;
-        int r;
-
-        assert(link);
-        assert(link->manager);
-        assert(prefix);
-        assert(pd_prefix);
-
-        r = route_new(&route);
-        if (r < 0)
-                return r;
-
-        route->family = AF_INET6;
-        route->dst.in6 = *prefix;
-        route->dst_prefixlen = 64;
-        route->protocol = RTPROT_DHCP;
-        route->priority = link->network->dhcp6_pd_route_metric;
-
-        r = link_has_route(link, route);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                link->dhcp6_pd_route_configured = false;
-
-        r = link_request_route(link, TAKE_PTR(route), true, &link->dhcp6_pd_route_messages,
-                               dhcp6_pd_route_handler, &req);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to request DHCPv6 prefix route: %m");
-        if (r == 0)
-                return 0;
-
-        req->after_configure = dhcp6_pd_after_route_configure;
-
-        assigned_link = dhcp6_pd_get_link_by_prefix(link, prefix);
-        if (assigned_link) {
-                assert(assigned_link == link);
+        if (link->dhcp6_messages > 0) {
+                log_link_debug(link, "%s(): DHCPv6 addresses and routes are not set.", __func__);
                 return 0;
         }
 
-        pd = new(DHCP6DelegatedPrefix, 1);
-        if (!pd)
-                return log_oom();
-
-        *pd = (DHCP6DelegatedPrefix) {
-                .prefix = *prefix,
-                .pd_prefix = *pd_prefix,
-                .link = link_ref(link),
-        };
-
-        r = hashmap_ensure_put(&link->manager->dhcp6_prefixes, &in6_addr_hash_ops, &pd->prefix, pd);
-        if (r == -ENOMEM)
-                return log_oom();
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store DHCPv6 prefix route at manager: %m");
-
-        r = set_ensure_put(&link->manager->dhcp6_pd_prefixes, &dhcp6_pd_hash_ops, pd);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store DHCPv6 prefix route at manager: %m");
-
-        TAKE_PTR(pd);
-        return 0;
-}
-
-static int dhcp6_pd_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        int r;
-
-        assert(link);
-        assert(link->dhcp6_pd_address_messages > 0);
-
-        link->dhcp6_pd_address_messages--;
-
-        r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCPv6 delegated prefix address");
-        if (r <= 0)
-                return r;
-
-        if (link->dhcp6_pd_address_messages == 0) {
-                log_link_debug(link, "DHCPv6 delegated prefix addresses set");
-                if (link->dhcp6_pd_prefixes_assigned)
-                        link->dhcp6_pd_address_configured = true;
-
-                r = dhcp6_pd_remove_old(link, false);
-                if (r < 0) {
-                        link_enter_failed(link);
-                        return 1;
-                }
-        }
-
-        return 1;
-}
-
-static void log_dhcp6_pd_address(Link *link, const Address *address) {
-        char valid_buf[FORMAT_TIMESPAN_MAX], preferred_buf[FORMAT_TIMESPAN_MAX];
-        const char *valid_str = NULL, *preferred_str = NULL;
-        _cleanup_free_ char *buffer = NULL;
-        int log_level;
-
-        assert(address);
-        assert(address->family == AF_INET6);
-
-        log_level = address_get(link, address, NULL) >= 0 ? LOG_DEBUG : LOG_INFO;
-
-        if (log_level < log_get_max_level())
-                return;
-
-        (void) in6_addr_prefix_to_string(&address->in_addr.in6, address->prefixlen, &buffer);
-        if (address->cinfo.ifa_valid != CACHE_INFO_INFINITY_LIFE_TIME)
-                valid_str = format_timespan(valid_buf, FORMAT_TIMESPAN_MAX,
-                                            address->cinfo.ifa_valid * USEC_PER_SEC,
-                                            USEC_PER_SEC);
-        if (address->cinfo.ifa_prefered != CACHE_INFO_INFINITY_LIFE_TIME)
-                preferred_str = format_timespan(preferred_buf, FORMAT_TIMESPAN_MAX,
-                                                address->cinfo.ifa_prefered * USEC_PER_SEC,
-                                                USEC_PER_SEC);
-
-        log_link_full(link, log_level, "DHCPv6-PD address %s (valid %s%s, preferred %s%s)",
-                      strna(buffer),
-                      valid_str ? "for " : "forever", strempty(valid_str),
-                      preferred_str ? "for " : "forever", strempty(preferred_str));
-}
-
-static int dhcp6_pd_after_address_configure(Request *req, void *object) {
-        Address *address = object;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ADDRESS);
-        assert(address);
-
-        link = req->link;
-
-        r = set_ensure_put(&link->dhcp6_pd_addresses, &address_hash_ops, address);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store DHCPv6 delegated prefix address: %m");
-
-        set_remove(link->dhcp6_pd_addresses_old, address);
-
-        return 0;
-}
-
-static int dhcp6_pd_request_address(
-                Link *link,
-                const struct in6_addr *prefix,
-                uint32_t lifetime_preferred,
-                uint32_t lifetime_valid) {
-
-        _cleanup_(address_freep) Address *address = NULL;
-        Request *req;
-        int r;
-
-        assert(link);
-        assert(link->network);
-        assert(prefix);
-
-        if (!link->network->dhcp6_pd_assign)
-                return 0;
-
-        r = address_new(&address);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to allocate address for DHCPv6 delegated prefix: %m");
-
-        address->in_addr.in6 = *prefix;
-
-        if (in6_addr_is_set(&link->network->dhcp6_pd_token))
-                memcpy(address->in_addr.in6.s6_addr + 8, link->network->dhcp6_pd_token.s6_addr + 8, 8);
-        else {
-                r = generate_ipv6_eui_64_address(link, &address->in_addr.in6);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Failed to generate EUI64 address for acquired DHCPv6 delegated prefix: %m");
-        }
-
-        address->prefixlen = 64;
-        address->family = AF_INET6;
-        address->cinfo.ifa_prefered = lifetime_preferred;
-        address->cinfo.ifa_valid = lifetime_valid;
-        SET_FLAG(address->flags, IFA_F_MANAGETEMPADDR, link->network->dhcp6_pd_manage_temporary_address);
-        address->route_metric = link->network->dhcp6_pd_route_metric;
-
-        log_dhcp6_pd_address(link, address);
-
-        if (address_get(link, address, NULL) < 0)
-                link->dhcp6_pd_address_configured = false;
-
-        r = link_request_address(link, TAKE_PTR(address), true, &link->dhcp6_pd_address_messages,
-                                 dhcp6_pd_address_handler, &req);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to request DHCPv6 delegated prefix address: %m");
-        if (r == 0)
-                return 0;
-
-        req->after_configure = dhcp6_pd_after_address_configure;
-
-        return 0;
-}
-
-static int dhcp6_pd_assign_prefix(
-                Link *link,
-                const struct in6_addr *prefix,
-                const struct in6_addr *pd_prefix,
-                uint32_t lifetime_preferred,
-                uint32_t lifetime_valid) {
-
-        int r;
-
-        assert(link);
-        assert(link->network);
-        assert(prefix);
-
-        if (link->network->dhcp6_pd_announce) {
-                r = radv_add_prefix(link, prefix, 64, lifetime_preferred, lifetime_valid);
-                if (r < 0)
-                        return r;
-        }
-
-        r = dhcp6_pd_request_route(link, prefix, pd_prefix);
-        if (r < 0)
-                return r;
-
-        r = dhcp6_pd_request_address(link, prefix, lifetime_preferred, lifetime_valid);
-        if (r < 0)
-                return r;
-
-        return 0;
-}
-
-static bool link_has_preferred_subnet_id(Link *link) {
-        if (!link->network)
-                return false;
-
-        return link->network->dhcp6_pd_subnet_id >= 0;
-}
-
-static int dhcp6_get_preferred_delegated_prefix(
-                Link *link,
-                const struct in6_addr *masked_pd_prefix,
-                uint8_t pd_prefix_len,
-                struct in6_addr *ret) {
-
-        /* We start off with the original PD prefix we have been assigned and iterate from there */
-        union in_addr_union prefix;
-        uint64_t n_prefixes;
-        Link *assigned_link;
-        int r;
-
-        assert(link);
-        assert(link->manager);
-        assert(masked_pd_prefix);
-        assert(pd_prefix_len <= 64);
-
-        n_prefixes = UINT64_C(1) << (64 - pd_prefix_len);
-        prefix.in6 = *masked_pd_prefix;
-
-        if (link_has_preferred_subnet_id(link)) {
-                uint64_t subnet_id = link->network->dhcp6_pd_subnet_id;
-
-                /* If the link has a preference for a particular subnet id try to allocate that */
-                if (subnet_id >= n_prefixes)
-                        return log_link_warning_errno(link, SYNTHETIC_ERRNO(ERANGE),
-                                                      "subnet id %" PRIu64 " is out of range. Only have %" PRIu64 " subnets.",
-                                                      subnet_id, n_prefixes);
-
-                r = in_addr_prefix_nth(AF_INET6, &prefix, 64, subnet_id);
-                if (r < 0)
-                        return log_link_warning_errno(link, r,
-                                                      "subnet id %" PRIu64 " is out of range. Only have %" PRIu64 " subnets.",
-                                                      subnet_id, n_prefixes);
-
-                /* Verify that the prefix we did calculate fits in the pd prefix.
-                 * This should not fail as we checked the prefix size beforehand */
-                assert_se(in_addr_prefix_covers(AF_INET6, (const union in_addr_union*) masked_pd_prefix, pd_prefix_len, &prefix) > 0);
-
-                assigned_link = dhcp6_pd_get_link_by_prefix(link, &prefix.in6);
-                if (assigned_link && assigned_link != link) {
-                        _cleanup_free_ char *assigned_buf = NULL;
-
-                        (void) in6_addr_to_string(&prefix.in6, &assigned_buf);
-                        return log_link_warning_errno(link, SYNTHETIC_ERRNO(EAGAIN),
-                                                      "The requested prefix %s is already assigned to another link.",
-                                                      strna(assigned_buf));
-                }
-
-                *ret = prefix.in6;
-                return 0;
-        }
-
-        for (uint64_t n = 0; n < n_prefixes; n++) {
-                /* If we do not have an allocation preference just iterate
-                 * through the address space and return the first free prefix. */
-                assigned_link = dhcp6_pd_get_link_by_prefix(link, &prefix.in6);
-                if (!assigned_link || assigned_link == link) {
-                        *ret = prefix.in6;
-                        return 0;
-                }
-
-                r = in_addr_prefix_next(AF_INET6, &prefix, 64);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Can't allocate another prefix. Out of address space?: %m");
-        }
-
-        return log_link_warning_errno(link, SYNTHETIC_ERRNO(ERANGE), "Couldn't find a suitable prefix. Ran out of address space.");
-}
-
-static void dhcp6_pd_prefix_distribute(Link *dhcp6_link,
-                                      const struct in6_addr *masked_pd_prefix,
-                                      uint8_t pd_prefix_len,
-                                      uint32_t lifetime_preferred,
-                                      uint32_t lifetime_valid,
-                                      bool assign_preferred_subnet_id) {
-
-        Link *link;
-        int r;
-
-        assert(dhcp6_link);
-        assert(dhcp6_link->manager);
-        assert(masked_pd_prefix);
-        assert(pd_prefix_len <= 64);
-
-        HASHMAP_FOREACH(link, dhcp6_link->manager->links_by_index) {
-                _cleanup_free_ char *assigned_buf = NULL;
-                struct in6_addr assigned_prefix;
-
-                if (link == dhcp6_link)
+        SET_FOREACH(address, link->addresses) {
+                if (address->source != NETWORK_CONFIG_SOURCE_DHCP6)
                         continue;
-
-                if (!link_dhcp6_pd_is_enabled(link))
-                        continue;
-
-                if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                        continue;
-
-                if (assign_preferred_subnet_id != link_has_preferred_subnet_id(link))
-                        continue;
-
-                r = dhcp6_pd_get_assigned_prefix(link, masked_pd_prefix, &assigned_prefix);
-                if (r < 0) {
-                        r = dhcp6_get_preferred_delegated_prefix(link, masked_pd_prefix, pd_prefix_len, &assigned_prefix);
-                        if (r < 0) {
-                                link->dhcp6_pd_prefixes_assigned = false;
-                                continue;
-                        }
+                if (address_is_ready(address)) {
+                        has_ready = true;
+                        break;
                 }
-
-                (void) in6_addr_to_string(&assigned_prefix, &assigned_buf);
-                r = dhcp6_pd_assign_prefix(link, &assigned_prefix, masked_pd_prefix,
-                                           lifetime_preferred, lifetime_valid);
-                if (r < 0) {
-                        log_link_error_errno(link, r, "Unable to assign/update prefix %s/64: %m",
-                                             strna(assigned_buf));
-                        link_enter_failed(link);
-                } else
-                        log_link_debug(link, "Assigned prefix %s/64", strna(assigned_buf));
-        }
-}
-
-static int dhcp6_pd_prepare(Link *link) {
-        Address *address;
-        Route *route;
-        int r;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 0;
-
-        if (!link_dhcp6_pd_is_enabled(link))
-                return 0;
-
-        link->dhcp6_pd_prefixes_assigned = true;
-
-        while ((address = set_steal_first(link->dhcp6_pd_addresses))) {
-                r = set_ensure_put(&link->dhcp6_pd_addresses_old, &address_hash_ops, address);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to store old DHCPv6 Prefix Delegation address: %m");
         }
 
-        while ((route = set_steal_first(link->dhcp6_pd_routes))) {
-                r = set_ensure_put(&link->dhcp6_pd_routes_old, &route_hash_ops, route);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to store old DHCPv6 Prefix Delegation route: %m");
+        if (!has_ready) {
+                SET_FOREACH(address, link->addresses)
+                        if (address->source == NETWORK_CONFIG_SOURCE_DHCP6)
+                                address->callback = dhcp6_address_ready_callback;
+
+                log_link_debug(link, "%s(): no DHCPv6 address is ready.", __func__);
+                return 0;
         }
 
-        return 0;
-}
+        link->dhcp6_configured = true;
+        log_link_debug(link, "DHCPv6 addresses and routes set.");
 
-static int dhcp6_pd_finalize(Link *link) {
-        int r;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 0;
-
-        if (!link_dhcp6_pd_is_enabled(link))
-                return 0;
-
-        if (link->dhcp6_pd_address_messages == 0) {
-                if (link->dhcp6_pd_prefixes_assigned)
-                        link->dhcp6_pd_address_configured = true;
-        } else
-                log_link_debug(link, "Setting DHCPv6 PD addresses");
-
-        if (link->dhcp6_pd_route_messages == 0) {
-                if (link->dhcp6_pd_prefixes_assigned)
-                        link->dhcp6_pd_route_configured = true;
-        } else
-                log_link_debug(link, "Setting DHCPv6 PD routes");
-
-        r = dhcp6_pd_remove_old(link, false);
+        r = dhcp6_remove(link, /* only_marked = */ true);
         if (r < 0)
                 return r;
 
-        if (!link->dhcp6_pd_address_configured || !link->dhcp6_pd_route_configured)
-                link_set_state(link, LINK_STATE_CONFIGURING);
-
         link_check_ready(link);
         return 0;
 }
 
-static void dhcp6_pd_prefix_lost(Link *dhcp6_link) {
-        Link *link;
-        int r;
-
-        assert(dhcp6_link);
-        assert(dhcp6_link->manager);
-
-        HASHMAP_FOREACH(link, dhcp6_link->manager->links_by_index) {
-                if (link == dhcp6_link)
-                        continue;
-
-                r = dhcp6_pd_remove(link);
-                if (r < 0)
-                        link_enter_failed(link);
-        }
-
-        set_clear(dhcp6_link->dhcp6_pd_prefixes);
-}
-
-static int dhcp6_remove_old(Link *link, bool force);
-
-static int dhcp6_address_callback(Address *address) {
-        Address *a;
-
-        assert(address);
-        assert(address->link);
-
-        /* Make this called only once */
-        SET_FOREACH(a, address->link->dhcp6_addresses)
-                a->callback = NULL;
-
-        return dhcp6_remove_old(address->link, true);
-}
-
-static int dhcp6_remove_old(Link *link, bool force) {
-        Address *address;
-        Route *route;
-        int k, r = 0;
-
-        assert(link);
-
-        if (!force && (link->dhcp6_address_messages > 0 || link->dhcp6_route_messages > 0))
-                return 0;
-
-        if (set_isempty(link->dhcp6_addresses_old) && set_isempty(link->dhcp6_routes_old))
-                return 0;
-
-        if (!force) {
-                bool set_callback = !set_isempty(link->dhcp6_addresses);
-
-                SET_FOREACH(address, link->dhcp6_addresses)
-                        if (address_is_ready(address)) {
-                                set_callback = false;
-                                break;
-                        }
-
-                if (set_callback) {
-                        SET_FOREACH(address, link->dhcp6_addresses)
-                                address->callback = dhcp6_address_callback;
-                        return 0;
-                }
-        }
-
-        log_link_debug(link, "Removing old DHCPv6 addresses and routes.");
-
-        SET_FOREACH(route, link->dhcp6_routes_old) {
-                k = route_remove(route, NULL, link);
-                if (k < 0)
-                        r = k;
-        }
-
-        SET_FOREACH(address, link->dhcp6_addresses_old) {
-                k = address_remove(address, link);
-                if (k < 0)
-                        r = k;
-        }
-
-        return r;
-}
-
-static int dhcp6_remove(Link *link) {
-        Address *address;
-        Route *route;
-        int k, r = 0;
-
-        assert(link);
-
-        link->dhcp6_address_configured = false;
-        link->dhcp6_route_configured = false;
-
-        k = dhcp6_remove_old(link, true);
-        if (k < 0)
-                r = k;
-
-        if (set_isempty(link->dhcp6_addresses) && set_isempty(link->dhcp6_routes))
-                return r;
-
-        log_link_debug(link, "Removing DHCPv6 addresses and routes.");
-
-        SET_FOREACH(route, link->dhcp6_routes) {
-                k = route_remove(route, NULL, link);
-                if (k < 0)
-                        r = k;
-        }
-
-        SET_FOREACH(address, link->dhcp6_addresses) {
-                k = address_remove(address, link);
-                if (k < 0)
-                        r = k;
-        }
-
-        return r;
-}
-
-static int dhcp6_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int dhcp6_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Address *address) {
         int r;
 
         assert(link);
-        assert(link->dhcp6_route_messages > 0);
-
-        link->dhcp6_route_messages--;
-
-        r = route_configure_handler_internal(rtnl, m, link, "Failed to set unreachable route for DHCPv6 delegated subnet");
-        if (r <= 0)
-                return r;
-
-        if (link->dhcp6_route_messages == 0) {
-                log_link_debug(link, "Unreachable routes for DHCPv6 delegated subnets set");
-                link->dhcp6_route_configured = true;
-
-                r = dhcp6_remove_old(link, false);
-                if (r < 0) {
-                        link_enter_failed(link);
-                        return 1;
-                }
-
-                link_check_ready(link);
-        }
-
-        return 1;
-}
-
-static int dhcp6_after_route_configure(Request *req, void *object) {
-        Route *route = object;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ROUTE);
-        assert(route);
-
-        link = req->link;
-
-        r = set_ensure_put(&link->dhcp6_routes, &route_hash_ops, route);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store unreachable route for DHCPv6 delegated subnet: %m");
-
-        set_remove(link->dhcp6_routes_old, route);
-
-        return 0;
-}
-
-static int dhcp6_request_unreachable_route(Link *link, const struct in6_addr *addr, uint8_t prefixlen) {
-        _cleanup_(route_freep) Route *route = NULL;
-        _cleanup_free_ char *buf = NULL;
-        Request *req;
-        int r;
-
-        assert(link);
-        assert(addr);
-
-        (void) in6_addr_prefix_to_string(addr, prefixlen, &buf);
-
-        if (prefixlen == 64) {
-                log_link_debug(link, "Not adding a blocking route for DHCPv6 delegated subnet %s since distributed prefix is 64",
-                               strna(buf));
-                return 0;
-        }
-
-        r = route_new(&route);
-        if (r < 0)
-                return log_oom();
-
-        route->family = AF_INET6;
-        route->dst.in6 = *addr;
-        route->dst_prefixlen = prefixlen;
-        route->table = link_get_dhcp_route_table(link);
-        route->type = RTN_UNREACHABLE;
-        route->protocol = RTPROT_DHCP;
-
-        r = link_has_route(link, route);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                link->dhcp6_route_configured = false;
-
-        r = link_request_route(link, TAKE_PTR(route), true, &link->dhcp6_route_messages,
-                               dhcp6_route_handler, &req);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to request unreachable route for DHCPv6 delegated subnet %s: %m",
-                                            strna(buf));
-        if (r == 0)
-                return 0;
-
-        req->after_configure = dhcp6_after_route_configure;
-
-        return 0;
-}
-
-static int dhcp6_pd_prefix_add(Link *link, const struct in6_addr *prefix, uint8_t prefixlen) {
-        _cleanup_free_ struct in_addr_prefix *p = NULL;
-        _cleanup_free_ char *buf = NULL;
-        int r;
-
-        assert(link);
-        assert(prefix);
-
-        p = new(struct in_addr_prefix, 1);
-        if (!p)
-                return log_oom();
-
-        *p = (struct in_addr_prefix) {
-                .family = AF_INET6,
-                .prefixlen = prefixlen,
-                .address.in6 = *prefix,
-        };
-
-        (void) in6_addr_prefix_to_string(prefix, prefixlen, &buf);
-
-        log_link_full(link,
-                      set_contains(link->dhcp6_pd_prefixes, p) ? LOG_DEBUG :
-                      prefixlen > 64 || prefixlen < 48 ? LOG_WARNING : LOG_INFO,
-                      "DHCP6: received PD Prefix %s%s",
-                      strna(buf),
-                      prefixlen > 64 ? " with prefix length > 64, ignoring." :
-                      prefixlen < 48 ? " with prefix length < 48, looks unusual.": "");
-
-        /* Store PD prefix even if prefixlen > 64, not to make logged at warning level so frequently. */
-        r = set_ensure_put(&link->dhcp6_pd_prefixes, &in_addr_prefix_hash_ops_free, p);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store DHCP6 PD prefix %s: %m", strna(buf));
-        if (r > 0)
-                TAKE_PTR(p);
-
-        return prefixlen <= 64;
-}
-
-static int dhcp6_pd_prefix_acquired(Link *dhcp6_link) {
-        Link *link;
-        int r;
-
-        assert(dhcp6_link);
-        assert(dhcp6_link->dhcp6_lease);
-
-        HASHMAP_FOREACH(link, dhcp6_link->manager->links_by_index) {
-                if (link == dhcp6_link)
-                        continue;
-
-                r = dhcp6_pd_prepare(link);
-                if (r < 0)
-                        link_enter_failed(link);
-        }
-
-        for (sd_dhcp6_lease_reset_pd_prefix_iter(dhcp6_link->dhcp6_lease);;) {
-                uint32_t lifetime_preferred, lifetime_valid;
-                struct in6_addr pd_prefix;
-                union in_addr_union prefix;
-                uint8_t pd_prefix_len;
-
-                r = sd_dhcp6_lease_get_pd(dhcp6_link->dhcp6_lease, &pd_prefix, &pd_prefix_len,
-                                          &lifetime_preferred, &lifetime_valid);
-                if (r < 0)
-                        break;
-
-                r = dhcp6_pd_prefix_add(dhcp6_link, &pd_prefix, pd_prefix_len);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        continue;
-
-                r = dhcp6_request_unreachable_route(dhcp6_link, &pd_prefix, pd_prefix_len);
-                if (r < 0)
-                        return r;
-
-                /* We are doing prefix allocation in two steps:
-                 * 1. all those links that have a preferred subnet id will be assigned their subnet
-                 * 2. all those links that remain will receive prefixes in sequential order. Prefixes
-                 *    that were previously already allocated to another link will be skipped.
-                 * The assignment has to be split in two phases since subnet id
-                 * preferences should be honored. Meaning that any subnet id should be
-                 * handed out to the requesting link and not to some link that didn't
-                 * specify any preference. */
-
-                assert(pd_prefix_len <= 64);
-
-                prefix.in6 = pd_prefix;
-                r = in_addr_mask(AF_INET6, &prefix, pd_prefix_len);
-                if (r < 0)
-                        return log_link_error_errno(dhcp6_link, r, "Failed to mask DHCPv6 PD prefix: %m");
-
-                if (DEBUG_LOGGING) {
-                        uint64_t n_prefixes = UINT64_C(1) << (64 - pd_prefix_len);
-                        _cleanup_free_ char *buf = NULL;
-
-                        (void) in6_addr_prefix_to_string(&prefix.in6, pd_prefix_len, &buf);
-                        log_link_debug(dhcp6_link, "Assigning up to %" PRIu64 " prefixes from %s",
-                                       n_prefixes, strna(buf));
-                }
-
-                dhcp6_pd_prefix_distribute(dhcp6_link,
-                                           &prefix.in6,
-                                           pd_prefix_len,
-                                           lifetime_preferred,
-                                           lifetime_valid,
-                                           true);
-
-                dhcp6_pd_prefix_distribute(dhcp6_link,
-                                           &prefix.in6,
-                                           pd_prefix_len,
-                                           lifetime_preferred,
-                                           lifetime_valid,
-                                           false);
-        }
-
-        HASHMAP_FOREACH(link, dhcp6_link->manager->links_by_index) {
-                if (link == dhcp6_link)
-                        continue;
-
-                r = dhcp6_pd_finalize(link);
-                if (r < 0)
-                        link_enter_failed(link);
-        }
-
-        return 0;
-}
-
-static int dhcp6_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        int r;
-
-        assert(link);
-        assert(link->dhcp6_address_messages > 0);
-
-        link->dhcp6_address_messages--;
 
         r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCPv6 address");
         if (r <= 0)
                 return r;
 
-        if (link->dhcp6_address_messages == 0) {
-                log_link_debug(link, "DHCPv6 addresses set");
-                link->dhcp6_address_configured = true;
-
-                r = dhcp6_remove_old(link, false);
-                if (r < 0) {
-                        link_enter_failed(link);
-                        return 1;
-                }
-        }
+        r = dhcp6_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
 
         return 1;
 }
 
-static void log_dhcp6_address(Link *link, const Address *address, char **ret) {
-        char valid_buf[FORMAT_TIMESPAN_MAX], preferred_buf[FORMAT_TIMESPAN_MAX];
-        const char *valid_str = NULL, *preferred_str = NULL;
-        _cleanup_free_ char *buffer = NULL;
+static int verify_dhcp6_address(Link *link, const Address *address) {
         bool by_ndisc = false;
         Address *existing;
-        NDiscAddress *na;
-        int log_level, r;
+        int log_level;
 
         assert(link);
         assert(address);
         assert(address->family == AF_INET6);
 
-        (void) in6_addr_prefix_to_string(&address->in_addr.in6, address->prefixlen, &buffer);
-        if (address->cinfo.ifa_valid != CACHE_INFO_INFINITY_LIFE_TIME)
-                valid_str = format_timespan(valid_buf, FORMAT_TIMESPAN_MAX,
-                                            address->cinfo.ifa_valid * USEC_PER_SEC,
-                                            USEC_PER_SEC);
-        if (address->cinfo.ifa_prefered != CACHE_INFO_INFINITY_LIFE_TIME)
-                preferred_str = format_timespan(preferred_buf, FORMAT_TIMESPAN_MAX,
-                                                address->cinfo.ifa_prefered * USEC_PER_SEC,
-                                                USEC_PER_SEC);
+        const char *pretty = IN6_ADDR_TO_STRING(&address->in_addr.in6);
 
-        r = address_get(link, address, &existing);
-        if (r < 0) {
+        if (address_get(link, address, &existing) < 0) {
                 /* New address. */
                 log_level = LOG_INFO;
                 goto simple_log;
         } else
                 log_level = LOG_DEBUG;
 
-        if (set_contains(link->dhcp6_addresses, address))
-                /* Already warned. */
-                goto simple_log;
-
         if (address->prefixlen == existing->prefixlen)
                 /* Currently, only conflict in prefix length is reported. */
                 goto simple_log;
 
-        SET_FOREACH(na, link->ndisc_addresses)
-                if (address_compare_func(na->address, existing)) {
-                        by_ndisc = true;
-                        break;
-                }
+        if (existing->source == NETWORK_CONFIG_SOURCE_NDISC)
+                by_ndisc = true;
 
-        log_link_warning(link, "DHCPv6 address %s (valid %s%s, preferred %s%s) conflicts the existing address %s %s.",
-                         strna(buffer),
-                         valid_str ? "for " : "forever", strempty(valid_str),
-                         preferred_str ? "for " : "forever", strempty(preferred_str),
-                         strna(buffer),
-                         by_ndisc ? "assigned by NDISC. Please try to use or update IPv6Token= setting "
-                         "to change the address generated by NDISC, or disable UseAutonomousPrefix=" : "");
-        goto finalize;
+        log_link_warning(link, "Ignoring DHCPv6 address %s/%u (valid %s, preferred %s) which conflicts with %s/%u%s.",
+                         pretty, address->prefixlen,
+                         FORMAT_LIFETIME(address->lifetime_valid_usec),
+                         FORMAT_LIFETIME(address->lifetime_preferred_usec),
+                         pretty, existing->prefixlen,
+                         by_ndisc ? " assigned by NDisc" : "");
+        if (by_ndisc)
+                log_link_warning(link, "Hint: use IPv6Token= setting to change the address generated by NDisc or set UseAutonomousPrefix=no.");
+
+        return -EEXIST;
 
 simple_log:
-        log_link_full(link, log_level, "DHCPv6 address %s (valid %s%s, preferred %s%s)",
-                      strna(buffer),
-                      valid_str ? "for " : "forever", strempty(valid_str),
-                      preferred_str ? "for " : "forever", strempty(preferred_str));
-
-finalize:
-        if (ret)
-                *ret = TAKE_PTR(buffer);
-}
-
-static int dhcp6_after_address_configure(Request *req, void *object) {
-        Address *address = object;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ADDRESS);
-        assert(address);
-
-        link = req->link;
-
-        r = set_ensure_put(&link->dhcp6_addresses, &address_hash_ops, address);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store DHCPv6 address: %m");
-
-        set_remove(link->dhcp6_addresses_old, address);
-
+        log_link_full(link, log_level, "DHCPv6 address %s/%u (valid %s, preferred %s)",
+                      pretty, address->prefixlen,
+                      FORMAT_LIFETIME(address->lifetime_valid_usec),
+                      FORMAT_LIFETIME(address->lifetime_preferred_usec));
         return 0;
 }
 
 static int dhcp6_request_address(
                 Link *link,
+                const struct in6_addr *server_address,
                 const struct in6_addr *ip6_addr,
-                uint32_t lifetime_preferred,
-                uint32_t lifetime_valid) {
+                usec_t lifetime_preferred_usec,
+                usec_t lifetime_valid_usec) {
 
         _cleanup_(address_freep) Address *addr = NULL;
-        _cleanup_free_ char *buffer = NULL;
-        Request *req;
+        Address *existing;
         int r;
 
         r = address_new(&addr);
         if (r < 0)
                 return log_oom();
 
+        addr->source = NETWORK_CONFIG_SOURCE_DHCP6;
+        addr->provider.in6 = *server_address;
         addr->family = AF_INET6;
         addr->in_addr.in6 = *ip6_addr;
         addr->flags = IFA_F_NOPREFIXROUTE;
         addr->prefixlen = 128;
-        addr->cinfo.ifa_prefered = lifetime_preferred;
-        addr->cinfo.ifa_valid = lifetime_valid;
+        addr->lifetime_preferred_usec = lifetime_preferred_usec;
+        addr->lifetime_valid_usec = lifetime_valid_usec;
 
-        log_dhcp6_address(link, addr, &buffer);
-
-        if (address_get(link, addr, NULL) < 0)
-                link->dhcp6_address_configured = false;
-
-        r = link_request_address(link, TAKE_PTR(addr), true, &link->dhcp6_address_messages,
-                                 dhcp6_address_handler, &req);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to request DHCPv6 address %s: %m", strna(buffer));
-        if (r == 0)
+        if (verify_dhcp6_address(link, addr) < 0)
                 return 0;
 
-        req->after_configure = dhcp6_after_address_configure;
+        r = free_and_strdup_warn(&addr->netlabel, link->network->dhcp6_netlabel);
+        if (r < 0)
+                return r;
 
+        if (address_get(link, addr, &existing) < 0)
+                link->dhcp6_configured = false;
+        else
+                address_unmark(existing);
+
+        r = link_request_address(link, TAKE_PTR(addr), true, &link->dhcp6_messages,
+                                 dhcp6_address_handler, NULL);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to request DHCPv6 address %s/128: %m",
+                                            IN6_ADDR_TO_STRING(ip6_addr));
         return 0;
 }
 
 static int dhcp6_address_acquired(Link *link) {
+        struct in6_addr server_address;
+        usec_t timestamp_usec;
         int r;
 
         assert(link);
@@ -1197,15 +252,25 @@
         if (!link->network->dhcp6_use_address)
                 return 0;
 
+        r = sd_dhcp6_lease_get_server_address(link->dhcp6_lease, &server_address);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to get server address of DHCPv6 lease: %m");
+
+        r = sd_dhcp6_lease_get_timestamp(link->dhcp6_lease, CLOCK_BOOTTIME, &timestamp_usec);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to get timestamp of DHCPv6 lease: %m");
+
         for (sd_dhcp6_lease_reset_address_iter(link->dhcp6_lease);;) {
-                uint32_t lifetime_preferred, lifetime_valid;
+                uint32_t lifetime_preferred_sec, lifetime_valid_sec;
                 struct in6_addr ip6_addr;
 
-                r = sd_dhcp6_lease_get_address(link->dhcp6_lease, &ip6_addr, &lifetime_preferred, &lifetime_valid);
+                r = sd_dhcp6_lease_get_address(link->dhcp6_lease, &ip6_addr, &lifetime_preferred_sec, &lifetime_valid_sec);
                 if (r < 0)
                         break;
 
-                r = dhcp6_request_address(link, &ip6_addr, lifetime_preferred, lifetime_valid);
+                r = dhcp6_request_address(link, &server_address, &ip6_addr,
+                                          sec_to_usec(lifetime_preferred_sec, timestamp_usec),
+                                          sec_to_usec(lifetime_valid_sec, timestamp_usec));
                 if (r < 0)
                         return r;
         }
@@ -1236,21 +301,10 @@
 static int dhcp6_lease_ip_acquired(sd_dhcp6_client *client, Link *link) {
         _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease_old = NULL;
         sd_dhcp6_lease *lease;
-        Address *a;
-        Route *rt;
         int r;
 
-        while ((a = set_steal_first(link->dhcp6_addresses))) {
-                r = set_ensure_put(&link->dhcp6_addresses_old, &address_hash_ops, a);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to store old DHCPv6 address: %m");
-        }
-
-        while ((rt = set_steal_first(link->dhcp6_routes))) {
-                r = set_ensure_put(&link->dhcp6_routes_old, &route_hash_ops, rt);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to store old DHCPv6 route: %m");
-        }
+        link_mark_addresses(link, NETWORK_CONFIG_SOURCE_DHCP6);
+        link_mark_routes(link, NETWORK_CONFIG_SOURCE_DHCP6);
 
         r = sd_dhcp6_client_get_lease(client, &lease);
         if (r < 0)
@@ -1269,23 +323,18 @@
                         return r;
         } else if (dhcp6_lease_has_pd_prefix(lease_old))
                 /* When we had PD prefixes but not now, we need to remove them. */
-                dhcp6_pd_prefix_lost(link);
+                dhcp_pd_prefix_lost(link);
 
-        if (link->dhcp6_address_messages == 0)
-                link->dhcp6_address_configured = true;
-        else
-                log_link_debug(link, "Setting DHCPv6 addresses");
+        if (link->dhcp6_messages == 0) {
+                link->dhcp6_configured = true;
 
-        if (link->dhcp6_route_messages == 0)
-                link->dhcp6_route_configured = true;
-        else
-                log_link_debug(link, "Setting unreachable routes for DHCPv6 delegated subnets");
+                r = dhcp6_remove(link, /* only_marked = */ true);
+                if (r < 0)
+                        return r;
+        } else
+                log_link_debug(link, "Setting DHCPv6 addresses and routes");
 
-        r = dhcp6_remove_old(link, false);
-        if (r < 0)
-                return r;
-
-        if (!link->dhcp6_address_configured || !link->dhcp6_route_configured)
+        if (!link->dhcp6_configured)
                 link_set_state(link, LINK_STATE_CONFIGURING);
 
         link_check_ready(link);
@@ -1305,11 +354,11 @@
         log_link_info(link, "DHCPv6 lease lost");
 
         if (dhcp6_lease_has_pd_prefix(link->dhcp6_lease))
-                dhcp6_pd_prefix_lost(link);
+                dhcp_pd_prefix_lost(link);
 
         link->dhcp6_lease = sd_dhcp6_lease_unref(link->dhcp6_lease);
 
-        r = dhcp6_remove(link);
+        r = dhcp6_remove(link, /* only_marked = */ false);
         if (r < 0)
                 return r;
 
@@ -1317,10 +366,9 @@
 }
 
 static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) {
-        Link *link = userdata;
+        Link *link = ASSERT_PTR(userdata);
         int r;
 
-        assert(link);
         assert(link->network);
 
         if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
@@ -1358,42 +406,45 @@
         }
 }
 
-int dhcp6_request_information(Link *link, int ir) {
-        int r, inf_req, pd;
-        bool running;
+int dhcp6_start_on_ra(Link *link, bool information_request) {
+        int r;
 
         assert(link);
         assert(link->dhcp6_client);
         assert(link->network);
         assert(in6_addr_is_link_local(&link->ipv6ll_address));
 
+        if (link_get_dhcp6_client_start_mode(link) != DHCP6_CLIENT_START_MODE_NO)
+                /* When WithoutRA= is specified, then the DHCPv6 client should be already running in
+                 * the requested mode. Hence, ignore the requests by RA. */
+                return 0;
+
         r = sd_dhcp6_client_is_running(link->dhcp6_client);
         if (r < 0)
                 return r;
-        running = r;
 
-        r = sd_dhcp6_client_get_prefix_delegation(link->dhcp6_client, &pd);
-        if (r < 0)
-                return r;
+        if (r > 0) {
+                int inf_req;
 
-        if (pd && ir && link->network->dhcp6_force_pd_other_information) {
-                log_link_debug(link, "Enabling managed mode to request DHCPv6 PD with 'Other Information' set");
-
-                r = sd_dhcp6_client_set_address_request(link->dhcp6_client, false);
-                if (r < 0)
-                        return r;
-
-                ir = false;
-        }
-
-        if (running) {
                 r = sd_dhcp6_client_get_information_request(link->dhcp6_client, &inf_req);
                 if (r < 0)
                         return r;
 
-                if (inf_req == ir)
+                if (inf_req == information_request)
+                        /* The client is already running in the requested mode. */
                         return 0;
 
+                if (!inf_req) {
+                        log_link_debug(link,
+                                       "The DHCPv6 client is already running in the managed mode, "
+                                       "refusing to start the client in the information requesting mode.");
+                        return 0;
+                }
+
+                log_link_debug(link,
+                               "The DHCPv6 client is running in the information requesting mode. "
+                               "Restarting the client in the managed mode.");
+
                 r = sd_dhcp6_client_stop(link->dhcp6_client);
                 if (r < 0)
                         return r;
@@ -1403,7 +454,7 @@
                         return r;
         }
 
-        r = sd_dhcp6_client_set_information_request(link->dhcp6_client, ir);
+        r = sd_dhcp6_client_set_information_request(link->dhcp6_client, information_request);
         if (r < 0)
                 return r;
 
@@ -1415,7 +466,11 @@
 }
 
 int dhcp6_start(Link *link) {
+        DHCP6ClientStartMode start_mode;
+        int r;
+
         assert(link);
+        assert(link->network);
 
         if (!link->dhcp6_client)
                 return 0;
@@ -1423,7 +478,10 @@
         if (!link_dhcp6_enabled(link))
                 return 0;
 
-        if (link->network->dhcp6_without_ra == DHCP6_CLIENT_START_MODE_NO)
+        if (!link_has_carrier(link))
+                return 0;
+
+        if (sd_dhcp6_client_is_running(link->dhcp6_client) > 0)
                 return 0;
 
         if (!in6_addr_is_link_local(&link->ipv6ll_address)) {
@@ -1431,86 +489,24 @@
                 return 0;
         }
 
-        if (sd_dhcp6_client_is_running(link->dhcp6_client) > 0)
+        r = sd_dhcp6_client_set_local_address(link->dhcp6_client, &link->ipv6ll_address);
+        if (r < 0)
+                return r;
+
+        start_mode = link_get_dhcp6_client_start_mode(link);
+        if (start_mode == DHCP6_CLIENT_START_MODE_NO)
                 return 0;
 
-        log_link_debug(link, "Acquiring DHCPv6 lease");
+        r = sd_dhcp6_client_set_information_request(link->dhcp6_client,
+                                                    start_mode == DHCP6_CLIENT_START_MODE_INFORMATION_REQUEST);
+        if (r < 0)
+                return r;
 
-        return dhcp6_request_information(link, link->network->dhcp6_without_ra == DHCP6_CLIENT_START_MODE_INFORMATION_REQUEST);
-}
+        r = sd_dhcp6_client_start(link->dhcp6_client);
+        if (r < 0)
+                return r;
 
-int dhcp6_request_prefix_delegation(Link *link) {
-        Link *l;
-
-        assert(link);
-        assert(link->manager);
-
-        if (!link_dhcp6_pd_is_enabled(link))
-                return 0;
-
-        log_link_debug(link, "Requesting DHCPv6 prefixes to be delegated for new link");
-
-        HASHMAP_FOREACH(l, link->manager->links_by_index) {
-                int r, enabled;
-
-                if (l == link)
-                        continue;
-
-                if (!l->dhcp6_client)
-                        continue;
-
-                r = sd_dhcp6_client_get_prefix_delegation(l->dhcp6_client, &enabled);
-                if (r < 0) {
-                        log_link_warning_errno(l, r, "Cannot get prefix delegation when adding new link: %m");
-                        link_enter_failed(l);
-                        continue;
-                }
-
-                if (enabled == 0) {
-                        r = sd_dhcp6_client_set_prefix_delegation(l->dhcp6_client, 1);
-                        if (r < 0) {
-                                log_link_warning_errno(l, r, "Cannot enable prefix delegation when adding new link: %m");
-                                link_enter_failed(l);
-                                continue;
-                        }
-                }
-
-                r = sd_dhcp6_client_is_running(l->dhcp6_client);
-                if (r <= 0)
-                        continue;
-
-                if (enabled != 0) {
-                        if (dhcp6_lease_has_pd_prefix(l->dhcp6_lease)) {
-                                log_link_debug(l, "Requesting re-assignment of delegated prefixes after adding new link");
-                                r = dhcp6_pd_prefix_acquired(l);
-                                if (r < 0)
-                                        link_enter_failed(l);
-                        }
-                        continue;
-                }
-
-                r = sd_dhcp6_client_stop(l->dhcp6_client);
-                if (r < 0) {
-                        log_link_warning_errno(l, r, "Cannot stop DHCPv6 prefix delegation client after adding new link: %m");
-                        link_enter_failed(l);
-                        continue;
-                }
-
-                r = sd_dhcp6_client_start(l->dhcp6_client);
-                if (r < 0) {
-                        log_link_warning_errno(l, r, "Cannot restart DHCPv6 prefix delegation client after adding new link: %m");
-                        link_enter_failed(l);
-                        continue;
-                }
-
-                log_link_debug(l, "Restarted DHCPv6 client to acquire prefix delegations after adding new link");
-        }
-
-        /* dhcp6_pd_prefix_acquired() may make the link in failed state. */
-        if (link->state == LINK_STATE_FAILED)
-                return -ENOANO;
-
-        return 0;
+        return 1;
 }
 
 static int dhcp6_set_hostname(sd_dhcp6_client *client, Link *link) {
@@ -1527,7 +523,7 @@
         else {
                 r = gethostname_strict(&hostname);
                 if (r < 0 && r != -ENXIO) /* ENXIO: no hostname set or hostname is "localhost" */
-                        return r;
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to get hostname: %m");
 
                 hn = hostname;
         }
@@ -1535,32 +531,13 @@
         r = sd_dhcp6_client_set_fqdn(client, hn);
         if (r == -EINVAL && hostname)
                 /* Ignore error when the machine's hostname is not suitable to send in DHCP packet. */
-                log_link_warning_errno(link, r, "DHCP6 CLIENT: Failed to set hostname from kernel hostname, ignoring: %m");
+                log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set hostname from kernel hostname, ignoring: %m");
         else if (r < 0)
-                return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set hostname: %m");
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set hostname: %m");
 
         return 0;
 }
 
-static bool dhcp6_enable_prefix_delegation(Link *dhcp6_link) {
-        Link *link;
-
-        assert(dhcp6_link);
-        assert(dhcp6_link->manager);
-
-        HASHMAP_FOREACH(link, dhcp6_link->manager->links_by_index) {
-                if (link == dhcp6_link)
-                        continue;
-
-                if (!link_dhcp6_pd_is_enabled(link))
-                        continue;
-
-                return true;
-        }
-
-        return false;
-}
-
 static int dhcp6_set_identifier(Link *link, sd_dhcp6_client *client) {
         const DUID *duid;
         int r;
@@ -1593,7 +570,7 @@
         return 0;
 }
 
-int dhcp6_configure(Link *link) {
+static int dhcp6_configure(Link *link) {
         _cleanup_(sd_dhcp6_client_unrefp) sd_dhcp6_client *client = NULL;
         sd_dhcp6_option *vendor_option;
         sd_dhcp6_option *send_option;
@@ -1603,36 +580,33 @@
         assert(link);
         assert(link->network);
 
-        if (!link_dhcp6_enabled(link) && !link_ipv6_accept_ra_enabled(link))
-                return 0;
-
         if (link->dhcp6_client)
-                return -EBUSY;
-
-        r = dhcp_configure_duid(link, link_get_dhcp6_duid(link));
-        if (r <= 0)
-                return r;
+                return log_link_debug_errno(link, SYNTHETIC_ERRNO(EBUSY), "DHCPv6 client is already configured.");
 
         r = sd_dhcp6_client_new(&client);
         if (r == -ENOMEM)
-                return log_oom();
+                return log_oom_debug();
         if (r < 0)
-                return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to create DHCP6 client: %m");
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to create DHCPv6 client: %m");
 
         r = sd_dhcp6_client_attach_event(client, link->manager->event, 0);
         if (r < 0)
-                return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to attach event: %m");
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to attach event: %m");
+
+        r = sd_dhcp6_client_attach_device(client, link->dev);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to attach device: %m");
 
         r = dhcp6_set_identifier(link, client);
         if (r < 0)
-                return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set identifier: %m");
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set identifier: %m");
 
         ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp6_client_send_options) {
                 r = sd_dhcp6_client_add_option(client, send_option);
                 if (r == -EEXIST)
                         continue;
                 if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set option: %m");
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set option: %m");
         }
 
         r = dhcp6_set_hostname(client, link);
@@ -1641,18 +615,35 @@
 
         r = sd_dhcp6_client_set_ifindex(client, link->ifindex);
         if (r < 0)
-                return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set ifindex: %m");
-
-        if (link->network->dhcp6_rapid_commit) {
-                r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_RAPID_COMMIT);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set request flag for rapid commit: %m");
-        }
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set ifindex: %m");
 
         if (link->network->dhcp6_mudurl) {
                 r = sd_dhcp6_client_set_request_mud_url(client, link->network->dhcp6_mudurl);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set MUD URL: %m");
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set MUD URL: %m");
+        }
+
+        if (link->network->dhcp6_use_dns) {
+                r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DNS_SERVER);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to request DNS servers: %m");
+        }
+
+        if (link->network->dhcp6_use_domains > 0) {
+                r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DOMAIN);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to request domains: %m");
+        }
+
+        if (link->network->dhcp6_use_ntp) {
+                r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NTP_SERVER);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to request NTP servers: %m");
+
+                /* If the server does not provide NTP servers, then we fallback to use SNTP servers. */
+                r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_SNTP_SERVER);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to request SNTP servers: %m");
         }
 
         SET_FOREACH(request_options, link->network->dhcp6_request_options) {
@@ -1660,23 +651,23 @@
 
                 r = sd_dhcp6_client_set_request_option(client, option);
                 if (r == -EEXIST) {
-                        log_link_debug(link, "DHCP6 CLIENT: Failed to set request flag for '%u' already exists, ignoring.", option);
+                        log_link_debug(link, "DHCPv6 CLIENT: Failed to set request flag for '%u' already exists, ignoring.", option);
                         continue;
                 }
                 if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set request flag for '%u': %m", option);
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set request flag for '%u': %m", option);
         }
 
         if (link->network->dhcp6_user_class) {
                 r = sd_dhcp6_client_set_request_user_class(client, link->network->dhcp6_user_class);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set user class: %m");
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set user class: %m");
         }
 
         if (link->network->dhcp6_vendor_class) {
                 r = sd_dhcp6_client_set_request_vendor_class(client, link->network->dhcp6_vendor_class);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set vendor class: %m");
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set vendor class: %m");
         }
 
         ORDERED_HASHMAP_FOREACH(vendor_option, link->network->dhcp6_client_send_vendor_options) {
@@ -1684,24 +675,43 @@
                 if (r == -EEXIST)
                         continue;
                 if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set vendor option: %m");
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set vendor option: %m");
         }
 
         r = sd_dhcp6_client_set_callback(client, dhcp6_handler, link);
         if (r < 0)
-                return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set callback: %m");
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set callback: %m");
 
-        if (dhcp6_enable_prefix_delegation(link)) {
-                r = sd_dhcp6_client_set_prefix_delegation(client, true);
+        r = sd_dhcp6_client_set_prefix_delegation(client, link->network->dhcp6_use_pd_prefix);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to %s requesting prefixes to be delegated: %m",
+                                            enable_disable(link->network->dhcp6_use_pd_prefix));
+
+        /* Even if UseAddress=no, we need to request IA_NA, as the dhcp6 client may be started in solicit mode. */
+        r = sd_dhcp6_client_set_address_request(client, link->network->dhcp6_use_pd_prefix ? link->network->dhcp6_use_address : true);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to %s requesting address: %m",
+                                            enable_disable(link->network->dhcp6_use_address));
+
+        if (link->network->dhcp6_pd_prefix_length > 0) {
+                r = sd_dhcp6_client_set_prefix_delegation_hint(client,
+                                                               link->network->dhcp6_pd_prefix_length,
+                                                               &link->network->dhcp6_pd_prefix_hint);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set prefix delegation: %m");
+                        return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set prefix delegation hint: %m");
         }
 
-        if (link->network->dhcp6_pd_length > 0) {
-                r = sd_dhcp6_client_set_prefix_delegation_hint(client, link->network->dhcp6_pd_length, &link->network->dhcp6_pd_address);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set prefix hint: %m");
-        }
+        r = sd_dhcp6_client_set_rapid_commit(client, link->network->dhcp6_use_rapid_commit);
+        if (r < 0)
+                return log_link_debug_errno(link, r,
+                                            "DHCPv6 CLIENT: Failed to %s rapid commit: %m",
+                                            enable_disable(link->network->dhcp6_use_rapid_commit));
+
+        r = sd_dhcp6_client_set_send_release(client, link->network->dhcp6_send_release);
+        if (r < 0)
+                return log_link_debug_errno(link, r,
+                                            "DHCPv6 CLIENT: Failed to %s sending release message on stop: %m",
+                                            enable_disable(link->network->dhcp6_send_release));
 
         link->dhcp6_client = TAKE_PTR(client);
 
@@ -1738,6 +748,54 @@
         return 0;
 }
 
+static int dhcp6_process_request(Request *req, Link *link, void *userdata) {
+        int r;
+
+        assert(link);
+
+        if (!link_is_ready_to_configure(link, /* allow_unmanaged = */ false))
+                return 0;
+
+        r = dhcp_configure_duid(link, link_get_dhcp6_duid(link));
+        if (r <= 0)
+                return r;
+
+        r = dhcp6_configure(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure DHCPv6 client: %m");
+
+        r = ndisc_start(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to start IPv6 Router Discovery: %m");
+
+        r = dhcp6_start(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to start DHCPv6 client: %m");
+
+        log_link_debug(link, "DHCPv6 client is configured%s.",
+                       r > 0 ? ", acquiring DHCPv6 lease" : "");
+        return 1;
+}
+
+int link_request_dhcp6_client(Link *link) {
+        int r;
+
+        assert(link);
+
+        if (!link_dhcp6_enabled(link) && !link_ipv6_accept_ra_enabled(link))
+                return 0;
+
+        if (link->dhcp6_client)
+                return 0;
+
+        r = link_queue_request(link, REQUEST_TYPE_DHCP6_CLIENT, dhcp6_process_request, NULL);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to request configuring of the DHCPv6 client: %m");
+
+        log_link_debug(link, "Requested configuring of the DHCPv6 client.");
+        return 0;
+}
+
 int link_serialize_dhcp6_client(Link *link, FILE *f) {
         _cleanup_free_ char *duid = NULL;
         uint32_t iaid;
@@ -1759,7 +817,7 @@
         return 0;
 }
 
-int config_parse_dhcp6_pd_hint(
+int config_parse_dhcp6_pd_prefix_hint(
                 const char* unit,
                 const char *filename,
                 unsigned line,
@@ -1771,7 +829,7 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = data;
+        Network *network = ASSERT_PTR(userdata);
         union in_addr_union u;
         unsigned char prefixlen;
         int r;
@@ -1779,7 +837,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = in_addr_prefix_from_string(rvalue, AF_INET6, &u, &prefixlen);
         if (r < 0) {
@@ -1794,53 +851,12 @@
                 return 0;
         }
 
-        network->dhcp6_pd_address = u.in6;
-        network->dhcp6_pd_length = prefixlen;
+        network->dhcp6_pd_prefix_hint = u.in6;
+        network->dhcp6_pd_prefix_length = prefixlen;
 
         return 0;
 }
 
-int config_parse_dhcp6_mud_url(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        _cleanup_free_ char *unescaped = NULL;
-        Network *network = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-
-        if (isempty(rvalue)) {
-                network->dhcp6_mudurl = mfree(network->dhcp6_mudurl);
-                return 0;
-        }
-
-        r = cunescape(rvalue, 0, &unescaped);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to Failed to unescape MUD URL, ignoring: %s", rvalue);
-                return 0;
-        }
-
-        if (!http_url_is_valid(unescaped) || strlen(unescaped) > UINT8_MAX) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Failed to parse MUD URL '%s', ignoring: %m", rvalue);
-                return 0;
-        }
-
-        return free_and_replace(network->dhcp6_mudurl, unescaped);
-}
-
 DEFINE_CONFIG_PARSE_ENUM(config_parse_dhcp6_client_start_mode, dhcp6_client_start_mode, DHCP6ClientStartMode,
                          "Failed to parse WithoutRA= setting");
 
@@ -1851,48 +867,3 @@
 };
 
 DEFINE_STRING_TABLE_LOOKUP(dhcp6_client_start_mode, DHCP6ClientStartMode);
-
-int config_parse_dhcp6_pd_subnet_id(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        int64_t *p = data;
-        uint64_t t;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        if (isempty(rvalue) || streq(rvalue, "auto")) {
-                *p = -1;
-                return 0;
-        }
-
-        r = safe_atoux64(rvalue, &t);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to parse %s=, ignoring assignment: %s",
-                           lvalue, rvalue);
-                return 0;
-        }
-        if (t > INT64_MAX) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Invalid subnet id '%s', ignoring assignment.",
-                           rvalue);
-                return 0;
-        }
-
-        *p = (int64_t) t;
-
-        return 0;
-}
diff --git a/src/network/networkd-dhcp6.h b/src/network/networkd-dhcp6.h
index 82becb0..81267c2 100644
--- a/src/network/networkd-dhcp6.h
+++ b/src/network/networkd-dhcp6.h
@@ -1,8 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "sd-dhcp6-client.h"
-
 #include "conf-parser.h"
 #include "macro.h"
 
@@ -15,32 +13,20 @@
 } DHCP6ClientStartMode;
 
 typedef struct Link Link;
-typedef struct Manager Manager;
-
-typedef struct DHCP6DelegatedPrefix {
-        struct in6_addr prefix;     /* Prefix assigned to the link */
-        struct in6_addr pd_prefix;  /* PD prefix provided by DHCP6 lease */
-        Link *link;
-} DHCP6DelegatedPrefix;
-
-DHCP6DelegatedPrefix *dhcp6_pd_free(DHCP6DelegatedPrefix *p);
-DEFINE_TRIVIAL_CLEANUP_FUNC(DHCP6DelegatedPrefix*, dhcp6_pd_free);
 
 bool link_dhcp6_with_address_enabled(Link *link);
-bool link_dhcp6_pd_is_enabled(Link *link);
-int dhcp6_pd_remove(Link *link);
-int dhcp6_configure(Link *link);
+int dhcp6_check_ready(Link *link);
 int dhcp6_update_mac(Link *link);
 int dhcp6_start(Link *link);
-int dhcp6_request_information(Link *link, int ir);
-int dhcp6_request_prefix_delegation(Link *link);
+int dhcp6_start_on_ra(Link *link, bool information_request);
+
+int link_request_dhcp6_client(Link *link);
 
 int link_serialize_dhcp6_client(Link *link, FILE *f);
 
-CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_pd_hint);
+CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_pd_prefix_hint);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_mud_url);
 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_client_start_mode);
-CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_pd_subnet_id);
 
 const char* dhcp6_client_start_mode_to_string(DHCP6ClientStartMode i) _const_;
 DHCP6ClientStartMode dhcp6_client_start_mode_from_string(const char *s) _pure_;
diff --git a/src/network/networkd-gperf.gperf b/src/network/networkd-gperf.gperf
index 20c33e8..8ed90f0 100644
--- a/src/network/networkd-gperf.gperf
+++ b/src/network/networkd-gperf.gperf
@@ -8,7 +8,7 @@
 #include "networkd-conf.h"
 #include "networkd-dhcp-common.h"
 #include "networkd-manager.h"
-#include "networkd-route.h"
+#include "networkd-route-util.h"
 %}
 struct ConfigPerfItem;
 %null_strings
diff --git a/src/network/networkd-ipv4acd.c b/src/network/networkd-ipv4acd.c
index c2cadc0..877dee0 100644
--- a/src/network/networkd-ipv4acd.c
+++ b/src/network/networkd-ipv4acd.c
@@ -1,50 +1,91 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <net/if.h> /* IFF_LOOPBACK */
+#include <net/if_arp.h> /* ARPHRD_ETHER */
+
 #include "sd-dhcp-client.h"
 #include "sd-ipv4acd.h"
 
+#include "ipvlan.h"
 #include "networkd-address.h"
 #include "networkd-dhcp4.h"
 #include "networkd-ipv4acd.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
 
-static int static_address_on_stop(Link *link, Address *address) {
-        int r;
-
+bool link_ipv4acd_supported(Link *link) {
         assert(link);
-        assert(address);
 
-        if (address_get(link, address, NULL) < 0)
-                return 0;
+        if (link->flags & IFF_LOOPBACK)
+                return false;
 
-        log_link_debug(link, "Removing address "IPV4_ADDRESS_FMT_STR", as the ACD client is stopped.",
-                       IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
+        /* ARPHRD_INFINIBAND seems to potentially support IPv4ACD.
+         * But currently sd-ipv4acd only supports ARPHRD_ETHER. */
+        if (link->iftype != ARPHRD_ETHER)
+                return false;
 
-        r = address_remove(address, link);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to remove address "IPV4_ADDRESS_FMT_STR": %m",
-                                              IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
+        if (link->hw_addr.length != ETH_ALEN)
+                return false;
 
-        return 0;
+        if (ether_addr_is_null(&link->hw_addr.ether))
+                return false;
+
+        if (streq_ptr(link->kind, "vrf"))
+                return false;
+
+        /* L3 or L3S mode do not support ARP. */
+        if (IN_SET(link_get_ipvlan_mode(link), NETDEV_IPVLAN_MODE_L3, NETDEV_IPVLAN_MODE_L3S))
+                return false;
+
+        return true;
 }
 
-static int static_address_on_conflict(Link *link, Address *address) {
+static bool address_ipv4acd_enabled(Address *address) {
+        assert(address);
+        assert(address->link);
+
+        if (address->family != AF_INET)
+                return false;
+
+        if (!FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV4))
+                return false;
+
+        /* Currently, only static and DHCP4 addresses are supported. */
+        if (!IN_SET(address->source, NETWORK_CONFIG_SOURCE_STATIC, NETWORK_CONFIG_SOURCE_DHCP4))
+                return false;
+
+        if (!link_ipv4acd_supported(address->link))
+                return false;
+
+        return true;
+}
+
+bool ipv4acd_bound(const Address *address) {
+        assert(address);
+
+        if (!address->acd)
+                return true;
+
+        return address->acd_bound;
+}
+
+static int static_ipv4acd_address_remove(Link *link, Address *address, bool on_conflict) {
         int r;
 
         assert(link);
         assert(address);
 
-        if (address_get(link, address, NULL) < 0) {
-                log_link_warning(link, "Cannot configure requested address "IPV4_ADDRESS_FMT_STR", as an address conflict was detected.",
+        if (!address_exists(address))
+                return 0; /* Not assigned. */
+
+        if (on_conflict)
+                log_link_warning(link, "Dropping address "IPV4_ADDRESS_FMT_STR", as an address conflict was detected.",
                                  IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
-                return 0;
-        }
+        else
+                log_link_debug(link, "Removing address "IPV4_ADDRESS_FMT_STR", as the ACD client is stopped.",
+                               IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
 
-        log_link_warning(link, "Dropping address "IPV4_ADDRESS_FMT_STR", as an address conflict was detected.",
-                         IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
-
-        r = address_remove(address, link);
+        r = address_remove(address);
         if (r < 0)
                 return log_link_warning_errno(link, r, "Failed to remove address "IPV4_ADDRESS_FMT_STR": %m",
                                               IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
@@ -52,7 +93,7 @@
         return 0;
 }
 
-static int dhcp4_address_on_conflict(Link *link) {
+static int dhcp4_address_on_conflict(Link *link, Address *address) {
         int r;
 
         assert(link);
@@ -75,23 +116,25 @@
         return 0;
 }
 
-static void on_acd(sd_ipv4acd *acd, int event, void *userdata, bool is_static) {
-        Address *address = userdata;
+static void on_acd(sd_ipv4acd *acd, int event, void *userdata) {
+        Address *address = ASSERT_PTR(userdata);
         Link *link;
         int r;
 
         assert(acd);
-        assert(address);
         assert(address->acd == acd);
         assert(address->link);
         assert(address->family == AF_INET);
+        assert(IN_SET(address->source, NETWORK_CONFIG_SOURCE_STATIC, NETWORK_CONFIG_SOURCE_DHCP4));
 
         link = address->link;
 
         switch (event) {
         case SD_IPV4ACD_EVENT_STOP:
-                if (is_static) {
-                        r = static_address_on_stop(link, address);
+                address->acd_bound = false;
+
+                if (address->source == NETWORK_CONFIG_SOURCE_STATIC) {
+                        r = static_ipv4acd_address_remove(link, address, /* on_conflict = */ false);
                         if (r < 0)
                                 link_enter_failed(link);
                 }
@@ -101,39 +144,35 @@
                 break;
 
         case SD_IPV4ACD_EVENT_BIND:
+                address->acd_bound = true;
+
                 log_link_debug(link, "Successfully claimed address "IPV4_ADDRESS_FMT_STR,
                                IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
-
-                address->acd_announced = true;
                 break;
 
         case SD_IPV4ACD_EVENT_CONFLICT:
-                if (is_static)
-                        r = static_address_on_conflict(link, address);
+                address->acd_bound = false;
+
+                log_link_warning(link, "Dropping address "IPV4_ADDRESS_FMT_STR", as an address conflict was detected.",
+                                 IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
+
+                if (address->source == NETWORK_CONFIG_SOURCE_STATIC)
+                        r = static_ipv4acd_address_remove(link, address, /* on_conflict = */ true);
                 else
-                        r = dhcp4_address_on_conflict(link);
+                        r = dhcp4_address_on_conflict(link, address);
                 if (r < 0)
                         link_enter_failed(link);
                 break;
 
         default:
-                assert_not_reached("Invalid IPv4ACD event.");
+                assert_not_reached();
         }
 }
 
-static void static_address_on_acd(sd_ipv4acd *acd, int event, void *userdata) {
-        on_acd(acd, event, userdata, true);
-}
-
-static void dhcp4_address_on_acd(sd_ipv4acd *acd, int event, void *userdata) {
-        on_acd(acd, event, userdata, false);
-}
-
 static int ipv4acd_check_mac(sd_ipv4acd *acd, const struct ether_addr *mac, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         struct hw_addr_data hw_addr;
 
-        assert(m);
         assert(mac);
 
         hw_addr = (struct hw_addr_data) {
@@ -144,27 +183,41 @@
         return link_get_by_hw_addr(m, &hw_addr, NULL) >= 0;
 }
 
-static int ipv4acd_configure(Link *link, const Address *a) {
-        _cleanup_(address_freep) Address *address = NULL;
+static int address_ipv4acd_start(Address *address) {
+        assert(address);
+        assert(address->link);
+
+        if (!address->acd)
+                return 0;
+
+        if (sd_ipv4acd_is_running(address->acd))
+                return 0;
+
+        if (!link_has_carrier(address->link))
+                return 0;
+
+        return sd_ipv4acd_start(address->acd, true);
+}
+
+int ipv4acd_configure(Address *address) {
+        Link *link;
         int r;
 
-        assert(link);
-        assert(a);
-        assert(a->family == AF_INET);
+        assert(address);
+
+        link = ASSERT_PTR(address->link);
+
+        if (!address_ipv4acd_enabled(address)) {
+                address->acd = sd_ipv4acd_unref(address->acd);
+                address->acd_bound = false;
+                return 0;
+        }
+
+        if (address->acd)
+                return address_ipv4acd_start(address);
 
         log_link_debug(link, "Configuring IPv4ACD for address "IPV4_ADDRESS_FMT_STR,
-                       IPV4_ADDRESS_FMT_VAL(a->in_addr.in));
-
-        r = address_dup(a, &address);
-        if (r < 0)
-                return r;
-
-        r = set_ensure_put(&link->addresses_ipv4acd, &address_hash_ops, address);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                return -EEXIST;
-        address->link = link;
+                       IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
 
         r = sd_ipv4acd_new(&address->acd);
         if (r < 0)
@@ -186,9 +239,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_ipv4acd_set_callback(address->acd,
-                                    address->is_static ? static_address_on_acd : dhcp4_address_on_acd,
-                                    address);
+        r = sd_ipv4acd_set_callback(address->acd, on_acd, address);
         if (r < 0)
                 return r;
 
@@ -196,40 +247,7 @@
         if (r < 0)
                 return r;
 
-        if (link_has_carrier(link)) {
-                r = sd_ipv4acd_start(address->acd, true);
-                if (r < 0)
-                        return r;
-        }
-
-        TAKE_PTR(address);
-        return 0;
-}
-
-int ipv4acd_address_is_ready_to_configure(Link *link, const Address *address) {
-        Address *acd_address;
-        int r;
-
-        acd_address = set_get(link->addresses_ipv4acd, address);
-        if (!acd_address) {
-                r = ipv4acd_configure(link, address);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Failed to configure IPv4ACD client: %m");
-
-                return false;
-        }
-
-        if (!acd_address->acd_announced)
-                return false;
-
-        r = set_ensure_put(&link->addresses, &address_hash_ops, acd_address);
-        if (r < 0)
-                return log_oom();
-        if (r == 0)
-                return log_link_warning_errno(link, SYNTHETIC_ERRNO(EEXIST), "Address already exists.");
-
-        acd_address->flags |= IFA_F_TENTATIVE;
-        return true;
+        return address_ipv4acd_start(address);
 }
 
 int ipv4acd_update_mac(Link *link) {
@@ -243,8 +261,9 @@
         if (ether_addr_is_null(&link->hw_addr.ether))
                 return 0;
 
-        SET_FOREACH(address, link->addresses_ipv4acd) {
-                assert(address->acd);
+        SET_FOREACH(address, link->addresses) {
+                if (!address->acd)
+                        continue;
 
                 k = sd_ipv4acd_set_mac(address->acd, &link->hw_addr.ether);
                 if (k < 0)
@@ -262,11 +281,8 @@
 
         assert(link);
 
-        SET_FOREACH(address, link->addresses_ipv4acd) {
-                if (sd_ipv4acd_is_running(address->acd))
-                        continue;
-
-                r = sd_ipv4acd_start(address->acd, true);
+        SET_FOREACH(address, link->addresses) {
+                r = address_ipv4acd_start(address);
                 if (r < 0)
                         return r;
         }
@@ -280,7 +296,10 @@
 
         assert(link);
 
-        SET_FOREACH(address, link->addresses_ipv4acd) {
+        SET_FOREACH(address, link->addresses) {
+                if (!address->acd)
+                        continue;
+
                 k = sd_ipv4acd_stop(address->acd);
                 if (k < 0)
                         r = k;
@@ -288,3 +307,21 @@
 
         return r;
 }
+
+int ipv4acd_set_ifname(Link *link) {
+        Address *address;
+        int r;
+
+        assert(link);
+
+        SET_FOREACH(address, link->addresses) {
+                if (!address->acd)
+                        continue;
+
+                r = sd_ipv4acd_set_ifname(address->acd, link->ifname);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
diff --git a/src/network/networkd-ipv4acd.h b/src/network/networkd-ipv4acd.h
index d2b4ff7..1ec9481 100644
--- a/src/network/networkd-ipv4acd.h
+++ b/src/network/networkd-ipv4acd.h
@@ -4,7 +4,10 @@
 typedef struct Address Address;
 typedef struct Link Link;
 
-int ipv4acd_address_is_ready_to_configure(Link *link, const Address *address);
+bool link_ipv4acd_supported(Link *link);
+bool ipv4acd_bound(const Address *address);
+int ipv4acd_configure(Address *address);
 int ipv4acd_update_mac(Link *link);
 int ipv4acd_start(Link *link);
 int ipv4acd_stop(Link *link);
+int ipv4acd_set_ifname(Link *link);
diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c
index 83ed372..8450b34 100644
--- a/src/network/networkd-ipv4ll.c
+++ b/src/network/networkd-ipv4ll.c
@@ -3,14 +3,30 @@
 #include <netinet/in.h>
 #include <linux/if.h>
 
-#include "network-internal.h"
+#include "netif-util.h"
 #include "networkd-address.h"
+#include "networkd-ipv4acd.h"
 #include "networkd-ipv4ll.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
 #include "networkd-queue.h"
 #include "parse-util.h"
 
+bool link_ipv4ll_enabled(Link *link) {
+        assert(link);
+
+        if (!link_ipv4acd_supported(link))
+                return false;
+
+        if (!link->network)
+                return false;
+
+        if (link->network->bond)
+                return false;
+
+        return link->network->link_local & ADDRESS_FAMILY_IPV4;
+}
+
 static int address_new_from_ipv4ll(Link *link, Address **ret) {
         _cleanup_(address_freep) Address *address = NULL;
         struct in_addr addr;
@@ -28,12 +44,13 @@
         if (r < 0)
                 return -ENOMEM;
 
+        address->source = NETWORK_CONFIG_SOURCE_IPV4LL;
         address->family = AF_INET;
         address->in_addr.in = addr;
         address->prefixlen = 16;
         address->scope = RT_SCOPE_LINK;
         address->route_metric = IPV4LL_ROUTE_METRIC;
-        address_set_broadcast(address);
+        address_set_broadcast(address, link);
 
         *ret = TAKE_PTR(address);
         return 0;
@@ -41,6 +58,7 @@
 
 static int ipv4ll_address_lost(Link *link) {
         _cleanup_(address_freep) Address *address = NULL;
+        Address *existing;
         int r;
 
         assert(link);
@@ -53,13 +71,22 @@
         if (r < 0)
                 return r;
 
+        if (address_get(link, address, &existing) < 0)
+                return 0;
+
+        if (existing->source != NETWORK_CONFIG_SOURCE_IPV4LL)
+                return 0;
+
+        if (!address_exists(existing))
+                return 0;
+
         log_link_debug(link, "IPv4 link-local release "IPV4_ADDRESS_FMT_STR,
                        IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
 
-        return address_remove(address, link);
+        return address_remove(existing);
 }
 
-static int ipv4ll_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int ipv4ll_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Address *address) {
         int r;
 
         assert(link);
@@ -97,16 +124,15 @@
 }
 
 static void ipv4ll_handler(sd_ipv4ll *ll, int event, void *userdata) {
-        Link *link = userdata;
+        Link *link = ASSERT_PTR(userdata);
         int r;
 
-        assert(link);
         assert(link->network);
 
         if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
                 return;
 
-        switch(event) {
+        switch (event) {
                 case SD_IPV4LL_EVENT_STOP:
                         r = ipv4ll_address_lost(link);
                         if (r < 0) {
@@ -142,10 +168,9 @@
 }
 
 static int ipv4ll_check_mac(sd_ipv4ll *ll, const struct ether_addr *mac, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         struct hw_addr_data hw_addr;
 
-        assert(m);
         assert(mac);
 
         hw_addr = (struct hw_addr_data) {
@@ -176,8 +201,8 @@
         if (r < 0)
                 return r;
 
-        if (link->sd_device &&
-            net_get_unique_predictable_data(link->sd_device, true, &seed) >= 0) {
+        if (link->dev &&
+            net_get_unique_predictable_data(link->dev, true, &seed) >= 0) {
                 r = sd_ipv4ll_set_address_seed(link->ipv4ll, seed);
                 if (r < 0)
                         return r;
@@ -223,13 +248,12 @@
                 void *data,
                 void *userdata) {
 
-        AddressFamily *link_local = data;
+        AddressFamily *link_local = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         /* Note that this is mostly like
          * config_parse_address_family(), except that it
@@ -252,3 +276,45 @@
 
         return 0;
 }
+
+int config_parse_ipv4ll_address(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        union in_addr_union a;
+        struct in_addr *ipv4ll_address = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *ipv4ll_address = (struct in_addr) {};
+                return 0;
+        }
+
+        r = in_addr_from_string(AF_INET, rvalue, &a);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+        if (!in4_addr_is_link_local_dynamic(&a.in)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Specified address cannot be used as an IPv4 link local address, ignoring assignment: %s",
+                           rvalue);
+                return 0;
+        }
+
+        *ipv4ll_address = a.in;
+        return 0;
+}
diff --git a/src/network/networkd-ipv4ll.h b/src/network/networkd-ipv4ll.h
index 82acc2e..fa53bd2 100644
--- a/src/network/networkd-ipv4ll.h
+++ b/src/network/networkd-ipv4ll.h
@@ -7,7 +7,10 @@
 
 typedef struct Link Link;
 
+bool link_ipv4ll_enabled(Link *link);
+
 int ipv4ll_configure(Link *link);
 int ipv4ll_update_mac(Link *link);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_ipv4ll);
+CONFIG_PARSER_PROTOTYPE(config_parse_ipv4ll_address);
diff --git a/src/network/networkd-ipv6-proxy-ndp.c b/src/network/networkd-ipv6-proxy-ndp.c
index a332eae..edd369a 100644
--- a/src/network/networkd-ipv6-proxy-ndp.c
+++ b/src/network/networkd-ipv6-proxy-ndp.c
@@ -26,13 +26,17 @@
         }
 }
 
-static int ipv6_proxy_ndp_address_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int ipv6_proxy_ndp_address_configure_handler(
+                sd_netlink *rtnl,
+                sd_netlink_message *m,
+                Request *req,
+                Link *link,
+                struct in6_addr *address) {
+
         int r;
 
+        assert(m);
         assert(link);
-        assert(link->static_ipv6_proxy_ndp_messages > 0);
-
-        link->static_ipv6_proxy_ndp_messages--;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0)
@@ -48,39 +52,45 @@
 }
 
 /* send a request to the kernel to add an IPv6 Proxy entry to the neighbour table */
-static int ipv6_proxy_ndp_address_configure(
-                const struct in6_addr *address,
-                Link *link,
-                link_netlink_message_handler_t callback) {
-
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int ipv6_proxy_ndp_address_configure(const struct in6_addr *address, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(address);
         assert(link);
         assert(link->manager);
         assert(link->manager->rtnl);
-        assert(callback);
+        assert(req);
 
         /* create new netlink message */
-        r = sd_rtnl_message_new_neigh(link->manager->rtnl, &req, RTM_NEWNEIGH, link->ifindex, AF_INET6);
+        r = sd_rtnl_message_new_neigh(link->manager->rtnl, &m, RTM_NEWNEIGH, link->ifindex, AF_INET6);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not create RTM_NEWNEIGH message: %m");
+                return r;
 
-        r = sd_rtnl_message_neigh_set_flags(req, NTF_PROXY);
+        r = sd_rtnl_message_neigh_set_flags(m, NTF_PROXY);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set neighbor flags: %m");
+                return r;
 
-        r = sd_netlink_message_append_in6_addr(req, NDA_DST, address);
+        r = sd_netlink_message_append_in6_addr(m, NDA_DST, address);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append NDA_DST attribute: %m");
+                return r;
 
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
+        return request_call_netlink_async(link->manager->rtnl, m, req);
+}
+
+static int ipv6_proxy_ndp_address_process_request(Request *req, Link *link, struct in6_addr *address) {
+        int r;
+
+        assert(req);
+        assert(link);
+        assert(address);
+
+        if (!link_is_ready_to_configure(link, false))
+                return 0;
+
+        r = ipv6_proxy_ndp_address_configure(address, link, req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
+                return log_link_warning_errno(link, r, "Failed to configure IPv6 proxy NDP address: %m");
 
         return 1;
 }
@@ -95,9 +105,14 @@
         link->static_ipv6_proxy_ndp_configured = false;
 
         SET_FOREACH(address, link->network->ipv6_proxy_ndp_addresses) {
-                r = link_queue_request(link, REQUEST_TYPE_IPV6_PROXY_NDP, address, false,
-                                       &link->static_ipv6_proxy_ndp_messages,
-                                       ipv6_proxy_ndp_address_configure_handler, NULL);
+                r = link_queue_request_safe(link, REQUEST_TYPE_IPV6_PROXY_NDP,
+                                            address, NULL,
+                                            in6_addr_hash_func,
+                                            in6_addr_compare_func,
+                                            ipv6_proxy_ndp_address_process_request,
+                                            &link->static_ipv6_proxy_ndp_messages,
+                                            ipv6_proxy_ndp_address_configure_handler,
+                                            NULL);
                 if (r < 0)
                         return log_link_warning_errno(link, r, "Failed to request IPv6 proxy NDP address: %m");
         }
@@ -113,18 +128,6 @@
         return 0;
 }
 
-int request_process_ipv6_proxy_ndp_address(Request *req) {
-        assert(req);
-        assert(req->link);
-        assert(req->ipv6_proxy_ndp);
-        assert(req->type == REQUEST_TYPE_IPV6_PROXY_NDP);
-
-        if (!link_is_ready_to_configure(req->link, false))
-                return 0;
-
-        return ipv6_proxy_ndp_address_configure(req->ipv6_proxy_ndp, req->link, req->netlink_handler);
-}
-
 int config_parse_ipv6_proxy_ndp_address(
                 const char *unit,
                 const char *filename,
@@ -138,13 +141,12 @@
                 void *userdata) {
 
         _cleanup_free_ struct in6_addr *address = NULL;
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         union in_addr_union buffer;
         int r;
 
         assert(filename);
         assert(rvalue);
-        assert(network);
 
         if (isempty(rvalue)) {
                 network->ipv6_proxy_ndp_addresses = set_free_free(network->ipv6_proxy_ndp_addresses);
diff --git a/src/network/networkd-ipv6-proxy-ndp.h b/src/network/networkd-ipv6-proxy-ndp.h
index b35cd56..e57d28f 100644
--- a/src/network/networkd-ipv6-proxy-ndp.h
+++ b/src/network/networkd-ipv6-proxy-ndp.h
@@ -5,11 +5,9 @@
 
 typedef struct Link Link;
 typedef struct Network Network;
-typedef struct Request Request;
 
 void network_adjust_ipv6_proxy_ndp(Network *network);
 
 int link_request_static_ipv6_proxy_ndp_addresses(Link *link);
-int request_process_ipv6_proxy_ndp_address(Request *req);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_proxy_ndp_address);
diff --git a/src/network/networkd-ipv6ll.c b/src/network/networkd-ipv6ll.c
new file mode 100644
index 0000000..32229a3
--- /dev/null
+++ b/src/network/networkd-ipv6ll.c
@@ -0,0 +1,247 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/if.h>
+#include <linux/if_arp.h>
+
+#include "in-addr-util.h"
+#include "networkd-address.h"
+#include "networkd-ipv6ll.h"
+#include "networkd-link.h"
+#include "networkd-network.h"
+#include "networkd-util.h"
+#include "socket-util.h"
+#include "string-table.h"
+#include "strv.h"
+#include "sysctl-util.h"
+
+bool link_ipv6ll_enabled(Link *link) {
+        assert(link);
+
+        if (!socket_ipv6_is_supported())
+                return false;
+
+        if (link->flags & IFF_LOOPBACK)
+                return false;
+
+        if (!link->network)
+                return false;
+
+        if (link->iftype == ARPHRD_CAN)
+                return false;
+
+        if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "sit", "vti", "nlmon"))
+                return false;
+
+        if (link->network->bond)
+                return false;
+
+        return link->network->link_local & ADDRESS_FAMILY_IPV6;
+}
+
+bool link_may_have_ipv6ll(Link *link, bool check_multicast) {
+        assert(link);
+
+        /*
+         * This is equivalent to link_ipv6ll_enabled() for non-WireGuard interfaces.
+         *
+         * For WireGuard interface, the kernel does not assign any IPv6LL addresses, but we can assign
+         * it manually. It is necessary to set an IPv6LL address manually to run NDisc or RADV on
+         * WireGuard interface. Note, also Multicast=yes must be set. See #17380.
+         *
+         * TODO: May be better to introduce GenerateIPv6LinkLocalAddress= setting, and use algorithms
+         *       used in networkd-address-generation.c
+         */
+
+        if (link_ipv6ll_enabled(link))
+                return true;
+
+        /* IPv6LL address can be manually assigned on WireGuard interface. */
+        if (streq_ptr(link->kind, "wireguard")) {
+                Address *a;
+
+                if (!link->network)
+                        return false;
+
+                if (check_multicast && !FLAGS_SET(link->flags, IFF_MULTICAST) && link->network->multicast <= 0)
+                        return false;
+
+                ORDERED_HASHMAP_FOREACH(a, link->network->addresses_by_section) {
+                        if (a->family != AF_INET6)
+                                continue;
+                        if (in6_addr_is_set(&a->in_addr_peer.in6))
+                                continue;
+                        if (in6_addr_is_link_local(&a->in_addr.in6))
+                                return true;
+                }
+        }
+
+        return false;
+}
+
+IPv6LinkLocalAddressGenMode link_get_ipv6ll_addrgen_mode(Link *link) {
+        assert(link);
+
+        if (!link_ipv6ll_enabled(link))
+                return IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE;
+
+        if (link->network->ipv6ll_address_gen_mode >= 0)
+                return link->network->ipv6ll_address_gen_mode;
+
+        if (in6_addr_is_set(&link->network->ipv6ll_stable_secret))
+                return IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY;
+
+        return IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64;
+}
+
+int ipv6ll_addrgen_mode_fill_message(sd_netlink_message *message, IPv6LinkLocalAddressGenMode mode) {
+        int r;
+
+        assert(message);
+        assert(mode >= 0 && mode < _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX);
+
+        r = sd_netlink_message_open_container(message, IFLA_AF_SPEC);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container(message, AF_INET6);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u8(message, IFLA_INET6_ADDR_GEN_MODE, mode);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_close_container(message);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_close_container(message);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+int link_update_ipv6ll_addrgen_mode(Link *link, sd_netlink_message *message) {
+        uint8_t mode;
+        int family, r;
+
+        assert(link);
+        assert(message);
+
+        r = sd_rtnl_message_get_family(message, &family);
+        if (r < 0)
+                return r;
+
+        if (family != AF_UNSPEC)
+                return 0;
+
+        r = sd_netlink_message_enter_container(message, IFLA_AF_SPEC);
+        if (r == -ENODATA)
+                return 0;
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_enter_container(message, AF_INET6);
+        if (r == -ENODATA)
+                return sd_netlink_message_exit_container(message);
+        if (r < 0)
+                return r;
+
+        mode = (uint8_t) link->ipv6ll_address_gen_mode;
+        r = sd_netlink_message_read_u8(message, IFLA_INET6_ADDR_GEN_MODE, &mode);
+        if (r < 0 && r != -ENODATA)
+                return r;
+
+        r = sd_netlink_message_exit_container(message);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_exit_container(message);
+        if (r < 0)
+                return r;
+
+        if (mode == (uint8_t) link->ipv6ll_address_gen_mode)
+                return 0;
+
+        if (mode >= _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX) {
+                log_link_debug(link, "Received invalid IPv6 link-local address generation mode (%u), ignoring.", mode);
+                return 0;
+        }
+
+        if (link->ipv6ll_address_gen_mode < 0)
+                log_link_debug(link, "Saved IPv6 link-local address generation mode: %s",
+                               ipv6_link_local_address_gen_mode_to_string(mode));
+        else
+                log_link_debug(link, "IPv6 link-local address generation mode is changed: %s -> %s",
+                               ipv6_link_local_address_gen_mode_to_string(link->ipv6ll_address_gen_mode),
+                               ipv6_link_local_address_gen_mode_to_string(mode));
+
+        link->ipv6ll_address_gen_mode = mode;
+        return 0;
+}
+
+#define STABLE_SECRET_APP_ID_1 SD_ID128_MAKE(aa,05,1d,94,43,68,45,07,b9,73,f1,e8,e4,b7,34,52)
+#define STABLE_SECRET_APP_ID_2 SD_ID128_MAKE(52,c4,40,a0,9f,2f,48,58,a9,3a,f6,29,25,ba,7a,7d)
+
+int link_set_ipv6ll_stable_secret(Link *link) {
+        struct in6_addr a;
+        int r;
+
+        assert(link);
+        assert(link->network);
+
+        if (link->network->ipv6ll_address_gen_mode != IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY)
+                return 0;
+
+        if (in6_addr_is_set(&link->network->ipv6ll_stable_secret))
+                a = link->network->ipv6ll_stable_secret;
+        else {
+                sd_id128_t key;
+                le64_t v;
+
+                /* Generate a stable secret address from machine-ID and the interface name. */
+
+                r = sd_id128_get_machine_app_specific(STABLE_SECRET_APP_ID_1, &key);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to generate key: %m");
+
+                v = htole64(siphash24_string(link->ifname, key.bytes));
+                memcpy(a.s6_addr, &v, sizeof(v));
+
+                r = sd_id128_get_machine_app_specific(STABLE_SECRET_APP_ID_2, &key);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to generate key: %m");
+
+                v = htole64(siphash24_string(link->ifname, key.bytes));
+                assert_cc(sizeof(v) * 2 == sizeof(a.s6_addr));
+                memcpy(a.s6_addr + sizeof(v), &v, sizeof(v));
+        }
+
+        return sysctl_write_ip_property(AF_INET6, link->ifname, "stable_secret",
+                                        IN6_ADDR_TO_STRING(&a));
+}
+
+int link_set_ipv6ll_addrgen_mode(Link *link, IPv6LinkLocalAddressGenMode mode) {
+        assert(link);
+        assert(mode >= 0 && mode < _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX);
+
+        if (mode == link->ipv6ll_address_gen_mode)
+                return 0;
+
+        return sysctl_write_ip_property_uint32(AF_INET6, link->ifname, "addr_gen_mode", mode);
+}
+
+static const char* const ipv6_link_local_address_gen_mode_table[_IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX] = {
+        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64]          = "eui64",
+        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE]           = "none",
+        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY] = "stable-privacy",
+        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_RANDOM]         = "random",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(ipv6_link_local_address_gen_mode, IPv6LinkLocalAddressGenMode);
+DEFINE_CONFIG_PARSE_ENUM(
+        config_parse_ipv6_link_local_address_gen_mode,
+        ipv6_link_local_address_gen_mode,
+        IPv6LinkLocalAddressGenMode,
+        "Failed to parse IPv6 link-local address generation mode");
diff --git a/src/network/networkd-ipv6ll.h b/src/network/networkd-ipv6ll.h
new file mode 100644
index 0000000..2759eed
--- /dev/null
+++ b/src/network/networkd-ipv6ll.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <errno.h>
+#include <linux/if_link.h>
+#include <stdbool.h>
+
+#include "sd-netlink.h"
+
+#include "conf-parser.h"
+#include "macro.h"
+
+typedef struct Link Link;
+
+typedef enum IPv6LinkLocalAddressGenMode {
+       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64          = IN6_ADDR_GEN_MODE_EUI64,
+       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE           = IN6_ADDR_GEN_MODE_NONE,
+       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY = IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
+       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_RANDOM         = IN6_ADDR_GEN_MODE_RANDOM,
+       _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX,
+       _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_INVALID        = -EINVAL,
+} IPv6LinkLocalAddressGenMode;
+
+bool link_ipv6ll_enabled(Link *link);
+bool link_may_have_ipv6ll(Link *link, bool check_multicast);
+
+IPv6LinkLocalAddressGenMode link_get_ipv6ll_addrgen_mode(Link *link);
+int ipv6ll_addrgen_mode_fill_message(sd_netlink_message *message, IPv6LinkLocalAddressGenMode mode);
+int link_update_ipv6ll_addrgen_mode(Link *link, sd_netlink_message *message);
+
+int link_set_ipv6ll_stable_secret(Link *link);
+int link_set_ipv6ll_addrgen_mode(Link *link, IPv6LinkLocalAddressGenMode mode);
+
+const char* ipv6_link_local_address_gen_mode_to_string(IPv6LinkLocalAddressGenMode s) _const_;
+IPv6LinkLocalAddressGenMode ipv6_link_local_address_gen_mode_from_string(const char *s) _pure_;
+
+CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_link_local_address_gen_mode);
diff --git a/src/network/networkd-json.c b/src/network/networkd-json.c
index 2bae2f2..c37f734 100644
--- a/src/network/networkd-json.c
+++ b/src/network/networkd-json.c
@@ -1,27 +1,500 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "network-util.h"
+#include <linux/nexthop.h>
+
+#include "dns-domain.h"
+#include "ip-protocol-list.h"
+#include "netif-util.h"
+#include "networkd-address.h"
 #include "networkd-json.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
+#include "networkd-neighbor.h"
+#include "networkd-nexthop.h"
 #include "networkd-network.h"
+#include "networkd-route-util.h"
+#include "networkd-route.h"
+#include "networkd-routing-policy-rule.h"
 #include "sort-util.h"
+#include "user-util.h"
+#include "wifi-util.h"
 
-static int network_build_json(Network *network, JsonVariant **ret) {
-        assert(network);
+static int address_build_json(Address *address, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        _cleanup_free_ char *scope = NULL, *flags = NULL, *state = NULL;
+        int r;
+
+        assert(address);
         assert(ret);
 
+        r = route_scope_to_string_alloc(address->scope, &scope);
+        if (r < 0)
+                return r;
+
+        r = address_flags_to_string_alloc(address->flags, address->family, &flags);
+        if (r < 0)
+                return r;
+
+        r = network_config_state_to_string_alloc(address->state, &state);
+        if (r < 0)
+                return r;
+
+        r = json_build(&v, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_INTEGER("Family", address->family),
+                                JSON_BUILD_PAIR_IN_ADDR("Address", &address->in_addr, address->family),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("Peer", &address->in_addr_peer, address->family),
+                                JSON_BUILD_PAIR_IN4_ADDR_NON_NULL("Broadcast", &address->broadcast),
+                                JSON_BUILD_PAIR_UNSIGNED("PrefixLength", address->prefixlen),
+                                JSON_BUILD_PAIR_UNSIGNED("Scope", address->scope),
+                                JSON_BUILD_PAIR_STRING("ScopeString", scope),
+                                JSON_BUILD_PAIR_UNSIGNED("Flags", address->flags),
+                                JSON_BUILD_PAIR_STRING("FlagsString", flags),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("Label", address->label),
+                                JSON_BUILD_PAIR_FINITE_USEC("PreferredLifetimeUsec", address->lifetime_preferred_usec),
+                                JSON_BUILD_PAIR_FINITE_USEC("ValidLifetimeUsec", address->lifetime_valid_usec),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(address->source)),
+                                JSON_BUILD_PAIR_STRING("ConfigState", state),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ConfigProvider", &address->provider, address->family)));
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(v);
+        return 0;
+}
+
+static int addresses_build_json(Set *addresses, JsonVariant **ret) {
+        JsonVariant **elements;
+        Address *address;
+        size_t n = 0;
+        int r;
+
+        assert(ret);
+
+        if (set_isempty(addresses)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        elements = new(JsonVariant*, set_size(addresses));
+        if (!elements)
+                return -ENOMEM;
+
+        SET_FOREACH(address, addresses) {
+                r = address_build_json(address, elements + n);
+                if (r < 0)
+                        goto finalize;
+                n++;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("Addresses", JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int neighbor_build_json(Neighbor *n, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        _cleanup_free_ char *state = NULL;
+        int r;
+
+        assert(n);
+        assert(ret);
+
+        r = network_config_state_to_string_alloc(n->state, &state);
+        if (r < 0)
+                return r;
+
+        r = json_build(&v, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_INTEGER("Family", n->family),
+                                JSON_BUILD_PAIR_IN_ADDR("Destination", &n->in_addr, n->family),
+                                JSON_BUILD_PAIR_HW_ADDR("LinkLayerAddress", &n->ll_addr),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(n->source)),
+                                JSON_BUILD_PAIR_STRING("ConfigState", state)));
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(v);
+        return 0;
+}
+
+static int neighbors_build_json(Set *neighbors, JsonVariant **ret) {
+        JsonVariant **elements;
+        Neighbor *neighbor;
+        size_t n = 0;
+        int r;
+
+        assert(ret);
+
+        if (set_isempty(neighbors)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        elements = new(JsonVariant*, set_size(neighbors));
+        if (!elements)
+                return -ENOMEM;
+
+        SET_FOREACH(neighbor, neighbors) {
+                r = neighbor_build_json(neighbor, elements + n);
+                if (r < 0)
+                        goto finalize;
+                n++;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("Neighbors", JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int nexthop_group_build_json(NextHop *nexthop, JsonVariant **ret) {
+        JsonVariant **elements;
+        struct nexthop_grp *g;
+        size_t n = 0;
+        int r;
+
+        assert(nexthop);
+        assert(ret);
+
+        if (hashmap_isempty(nexthop->group)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        elements = new(JsonVariant*, hashmap_size(nexthop->group));
+        if (!elements)
+                return -ENOMEM;
+
+        HASHMAP_FOREACH(g, nexthop->group) {
+                r = json_build(elements + n, JSON_BUILD_OBJECT(
+                                        JSON_BUILD_PAIR_UNSIGNED("ID", g->id),
+                                        JSON_BUILD_PAIR_UNSIGNED("Weight", g->weight+1)));
+                if (r < 0)
+                        goto failure;
+
+                n++;
+        }
+
+        r = json_variant_new_array(ret, elements, n);
+
+failure:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int nexthop_build_json(NextHop *n, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *group = NULL;
+        _cleanup_free_ char *flags = NULL, *protocol = NULL, *state = NULL;
+        int r;
+
+        assert(n);
+        assert(ret);
+
+        r = route_flags_to_string_alloc(n->flags, &flags);
+        if (r < 0)
+                return r;
+
+        r = route_protocol_to_string_alloc(n->protocol, &protocol);
+        if (r < 0)
+                return r;
+
+        r = network_config_state_to_string_alloc(n->state, &state);
+        if (r < 0)
+                return r;
+
+        r = nexthop_group_build_json(n, &group);
+        if (r < 0)
+                return r;
+
+        r = json_build(&v, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_UNSIGNED("ID", n->id),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("Gateway", &n->gw, n->family),
+                                JSON_BUILD_PAIR_UNSIGNED("Flags", n->flags),
+                                JSON_BUILD_PAIR_STRING("FlagsString", strempty(flags)),
+                                JSON_BUILD_PAIR_UNSIGNED("Protocol", n->protocol),
+                                JSON_BUILD_PAIR_STRING("ProtocolString", protocol),
+                                JSON_BUILD_PAIR_BOOLEAN("Blackhole", n->blackhole),
+                                JSON_BUILD_PAIR_VARIANT_NON_NULL("Group", group),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(n->source)),
+                                JSON_BUILD_PAIR_STRING("ConfigState", state)));
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(v);
+        return 0;
+}
+
+static int nexthops_build_json(Set *nexthops, JsonVariant **ret) {
+        JsonVariant **elements;
+        NextHop *nexthop;
+        size_t n = 0;
+        int r;
+
+        assert(ret);
+
+        if (set_isempty(nexthops)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        elements = new(JsonVariant*, set_size(nexthops));
+        if (!elements)
+                return -ENOMEM;
+
+        SET_FOREACH(nexthop, nexthops) {
+                r = nexthop_build_json(nexthop, elements + n);
+                if (r < 0)
+                        goto finalize;
+                n++;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("NextHops", JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int route_build_json(Route *route, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        _cleanup_free_ char *scope = NULL, *protocol = NULL, *table = NULL, *flags = NULL, *state = NULL;
+        Manager *manager;
+        int r;
+
+        assert(route);
+        assert(ret);
+
+        manager = route->link ? route->link->manager : route->manager;
+
+        assert(manager);
+
+        r = route_scope_to_string_alloc(route->scope, &scope);
+        if (r < 0)
+                return r;
+
+        r = route_protocol_to_string_alloc(route->protocol, &protocol);
+        if (r < 0)
+                return r;
+
+        r = manager_get_route_table_to_string(manager, route->table, &table);
+        if (r < 0)
+                return r;
+
+        r = route_flags_to_string_alloc(route->flags, &flags);
+        if (r < 0)
+                return r;
+
+        r = network_config_state_to_string_alloc(route->state, &state);
+        if (r < 0)
+                return r;
+
+        r = json_build(&v, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_INTEGER("Family", route->family),
+                                JSON_BUILD_PAIR_IN_ADDR("Destination", &route->dst, route->family),
+                                JSON_BUILD_PAIR_UNSIGNED("DestinationPrefixLength", route->dst_prefixlen),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("Gateway", &route->gw, route->gw_family),
+                                JSON_BUILD_PAIR_CONDITION(route->src_prefixlen > 0,
+                                                          "Source", JSON_BUILD_IN_ADDR(&route->src, route->family)),
+                                JSON_BUILD_PAIR_UNSIGNED_NON_ZERO("SourcePrefixLength", route->src_prefixlen),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("PreferredSource", &route->prefsrc, route->family),
+                                JSON_BUILD_PAIR_UNSIGNED("Scope", route->scope),
+                                JSON_BUILD_PAIR_STRING("ScopeString", scope),
+                                JSON_BUILD_PAIR_UNSIGNED("Protocol", route->protocol),
+                                JSON_BUILD_PAIR_STRING("ProtocolString", protocol),
+                                JSON_BUILD_PAIR_UNSIGNED("Type", route->type),
+                                JSON_BUILD_PAIR_STRING("TypeString", route_type_to_string(route->type)),
+                                JSON_BUILD_PAIR_UNSIGNED("Priority", route->priority),
+                                JSON_BUILD_PAIR_UNSIGNED("Table", route->table),
+                                JSON_BUILD_PAIR_STRING("TableString", table),
+                                JSON_BUILD_PAIR_UNSIGNED_NON_ZERO("MTU", route->mtu),
+                                JSON_BUILD_PAIR_UNSIGNED("Preference", route->pref),
+                                JSON_BUILD_PAIR_UNSIGNED("Flags", route->flags),
+                                JSON_BUILD_PAIR_STRING("FlagsString", strempty(flags)),
+                                JSON_BUILD_PAIR_FINITE_USEC("LifetimeUSec", route->lifetime_usec),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(route->source)),
+                                JSON_BUILD_PAIR_STRING("ConfigState", state),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ConfigProvider", &route->provider, route->family)));
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(v);
+        return 0;
+}
+
+static int routes_build_json(Set *routes, JsonVariant **ret) {
+        JsonVariant **elements;
+        Route *route;
+        size_t n = 0;
+        int r;
+
+        assert(ret);
+
+        if (set_isempty(routes)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        elements = new(JsonVariant*, set_size(routes));
+        if (!elements)
+                return -ENOMEM;
+
+        SET_FOREACH(route, routes) {
+                r = route_build_json(route, elements + n);
+                if (r < 0)
+                        goto finalize;
+                n++;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("Routes", JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int routing_policy_rule_build_json(RoutingPolicyRule *rule, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        _cleanup_free_ char *table = NULL, *protocol = NULL, *state = NULL;
+        int r;
+
+        assert(rule);
+        assert(rule->manager);
+        assert(ret);
+
+        r = manager_get_route_table_to_string(rule->manager, rule->table, &table);
+        if (r < 0 && r != -EINVAL)
+                return r;
+
+        r = route_protocol_to_string_alloc(rule->protocol, &protocol);
+        if (r < 0)
+                return r;
+
+        r = network_config_state_to_string_alloc(rule->state, &state);
+        if (r < 0)
+                return r;
+
+        r = json_build(&v, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_INTEGER("Family", rule->family),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("FromPrefix", &rule->from, rule->family),
+                                JSON_BUILD_PAIR_CONDITION(in_addr_is_set(rule->family, &rule->from),
+                                                          "FromPrefixLength", JSON_BUILD_UNSIGNED(rule->from_prefixlen)),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ToPrefix", &rule->to, rule->family),
+                                JSON_BUILD_PAIR_CONDITION(in_addr_is_set(rule->family, &rule->to),
+                                                          "ToPrefixLength", JSON_BUILD_UNSIGNED(rule->to_prefixlen)),
+                                JSON_BUILD_PAIR_UNSIGNED("Protocol", rule->protocol),
+                                JSON_BUILD_PAIR_STRING("ProtocolString", protocol),
+                                JSON_BUILD_PAIR_UNSIGNED("TOS", rule->tos),
+                                JSON_BUILD_PAIR_UNSIGNED("Type", rule->type),
+                                JSON_BUILD_PAIR_STRING("TypeString", fr_act_type_full_to_string(rule->type)),
+                                JSON_BUILD_PAIR_UNSIGNED("IPProtocol", rule->ipproto),
+                                JSON_BUILD_PAIR_STRING("IPProtocolString", ip_protocol_to_name(rule->ipproto)),
+                                JSON_BUILD_PAIR_UNSIGNED("Priority", rule->priority),
+                                JSON_BUILD_PAIR_UNSIGNED("FirewallMark", rule->fwmark),
+                                JSON_BUILD_PAIR_UNSIGNED("FirewallMask", rule->fwmask),
+                                JSON_BUILD_PAIR_UNSIGNED_NON_ZERO("Table", rule->table),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("TableString", table),
+                                JSON_BUILD_PAIR_BOOLEAN("Invert", rule->invert_rule),
+                                JSON_BUILD_PAIR_CONDITION(rule->suppress_prefixlen >= 0,
+                                                          "SuppressPrefixLength", JSON_BUILD_UNSIGNED(rule->suppress_prefixlen)),
+                                JSON_BUILD_PAIR_CONDITION(rule->suppress_ifgroup >= 0,
+                                                          "SuppressInterfaceGroup", JSON_BUILD_UNSIGNED(rule->suppress_ifgroup)),
+                                JSON_BUILD_PAIR_CONDITION(rule->sport.start != 0 || rule->sport.end != 0, "SourcePort",
+                                                          JSON_BUILD_ARRAY(JSON_BUILD_UNSIGNED(rule->sport.start), JSON_BUILD_UNSIGNED(rule->sport.end))),
+                                JSON_BUILD_PAIR_CONDITION(rule->dport.start != 0 || rule->dport.end != 0, "DestinationPort",
+                                                          JSON_BUILD_ARRAY(JSON_BUILD_UNSIGNED(rule->dport.start), JSON_BUILD_UNSIGNED(rule->dport.end))),
+                                JSON_BUILD_PAIR_CONDITION(rule->uid_range.start != UID_INVALID && rule->uid_range.end != UID_INVALID, "User",
+                                                          JSON_BUILD_ARRAY(JSON_BUILD_UNSIGNED(rule->uid_range.start), JSON_BUILD_UNSIGNED(rule->uid_range.end))),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("IncomingInterface", rule->iif),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("OutgoingInterface", rule->oif),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(rule->source)),
+                                JSON_BUILD_PAIR_STRING("ConfigState", state)));
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(v);
+        return 0;
+}
+
+static int routing_policy_rules_build_json(Set *rules, JsonVariant **ret) {
+        JsonVariant **elements;
+        RoutingPolicyRule *rule;
+        size_t n = 0;
+        int r;
+
+        assert(ret);
+
+        if (set_isempty(rules)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        elements = new(JsonVariant*, set_size(rules));
+        if (!elements)
+                return -ENOMEM;
+
+        SET_FOREACH(rule, rules) {
+                r = routing_policy_rule_build_json(rule, elements + n);
+                if (r < 0)
+                        goto finalize;
+                n++;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("RoutingPolicyRules", JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int network_build_json(Network *network, JsonVariant **ret) {
+        assert(ret);
+
+        if (!network) {
+                *ret = NULL;
+                return 0;
+        }
+
         return json_build(ret, JSON_BUILD_OBJECT(
-                                        JSON_BUILD_PAIR("NetworkFile", JSON_BUILD_STRING(network->filename))));
+                                JSON_BUILD_PAIR_STRING("NetworkFile", network->filename),
+                                JSON_BUILD_PAIR_STRV("NetworkFileDropins", network->dropins),
+                                JSON_BUILD_PAIR_BOOLEAN("RequiredForOnline", network->required_for_online),
+                                JSON_BUILD_PAIR("RequiredOperationalStateForOnline",
+                                                JSON_BUILD_ARRAY(JSON_BUILD_STRING(link_operstate_to_string(network->required_operstate_for_online.min)),
+                                                                 JSON_BUILD_STRING(link_operstate_to_string(network->required_operstate_for_online.max)))),
+                                JSON_BUILD_PAIR_STRING("RequiredFamilyForOnline",
+                                                       link_required_address_family_to_string(network->required_family_for_online)),
+                                JSON_BUILD_PAIR_STRING("ActivationPolicy",
+                                                       activation_policy_to_string(network->activation_policy))));
 }
 
 static int device_build_json(sd_device *device, JsonVariant **ret) {
-        const char *link = NULL, *path = NULL, *vendor = NULL, *model = NULL;
+        _cleanup_strv_free_ char **link_dropins = NULL;
+        const char *link = NULL, *path = NULL, *vendor = NULL, *model = NULL, *joined;
+        int r;
 
-        assert(device);
         assert(ret);
 
+        if (!device) {
+                *ret = NULL;
+                return 0;
+        }
+
         (void) sd_device_get_property_value(device, "ID_NET_LINK_FILE", &link);
+
+        if (sd_device_get_property_value(device, "ID_NET_LINK_FILE_DROPINS", &joined) >= 0) {
+                 r = strv_split_full(&link_dropins, joined, ":", EXTRACT_CUNESCAPE);
+                 if (r < 0)
+                        return r;
+        }
+
         (void) sd_device_get_property_value(device, "ID_PATH", &path);
 
         if (sd_device_get_property_value(device, "ID_VENDOR_FROM_DATABASE", &vendor) < 0)
@@ -31,70 +504,852 @@
                 (void) sd_device_get_property_value(device, "ID_MODEL", &model);
 
         return json_build(ret, JSON_BUILD_OBJECT(
-                                        JSON_BUILD_PAIR("LinkFile", JSON_BUILD_STRING(link)),
-                                        JSON_BUILD_PAIR("Path", JSON_BUILD_STRING(path)),
-                                        JSON_BUILD_PAIR("Vendor", JSON_BUILD_STRING(vendor)),
-                                        JSON_BUILD_PAIR("Model", JSON_BUILD_STRING(model))));
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("LinkFile", link),
+                                JSON_BUILD_PAIR_STRV_NON_EMPTY("LinkFileDropins", link_dropins),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("Path", path),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("Vendor", vendor),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("Model", model)));
 }
 
-int link_build_json(Link *link, JsonVariant **ret) {
+static int dns_build_json_one(Link *link, const struct in_addr_full *a, NetworkConfigSource s, const union in_addr_union *p, JsonVariant **ret) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
-        _cleanup_free_ char *type = NULL;
+        int r;
+
+        assert(link);
+        assert(a);
+        assert(ret);
+
+        if (a->ifindex != 0 && a->ifindex != link->ifindex) {
+                *ret = NULL;
+                return 0;
+        }
+
+        r = json_build(&v, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_INTEGER("Family", a->family),
+                                JSON_BUILD_PAIR_IN_ADDR("Address", &a->address, a->family),
+                                JSON_BUILD_PAIR_UNSIGNED_NON_ZERO("Port", a->port),
+                                JSON_BUILD_PAIR_CONDITION(a->ifindex != 0, "InterfaceIndex", JSON_BUILD_INTEGER(a->ifindex)),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("ServerName", a->server_name),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(s)),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ConfigProvider", p, a->family)));
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(v);
+        return 1;
+}
+
+static int dns_build_json(Link *link, JsonVariant **ret) {
+        JsonVariant **elements = NULL;
+        size_t n = 0;
         int r;
 
         assert(link);
         assert(ret);
 
-        r = link_get_type_string(link->sd_device, link->iftype, &type);
-        if (r == -ENOMEM)
-                return r;
+        if (!link->network) {
+                *ret = NULL;
+                return 0;
+        }
 
-        r = json_build(&v, JSON_BUILD_OBJECT(
-                                        JSON_BUILD_PAIR("Index", JSON_BUILD_INTEGER(link->ifindex)),
-                                        JSON_BUILD_PAIR("Name", JSON_BUILD_STRING(link->ifname)),
-                                        JSON_BUILD_PAIR("AlternativeNames", JSON_BUILD_STRV(link->alternative_names)),
-                                        JSON_BUILD_PAIR("Type", JSON_BUILD_STRING(type)),
-                                        JSON_BUILD_PAIR("Driver", JSON_BUILD_STRING(link->driver)),
-                                        JSON_BUILD_PAIR("SetupState", JSON_BUILD_STRING(link_state_to_string(link->state))),
-                                        JSON_BUILD_PAIR("OperationalState", JSON_BUILD_STRING(link_operstate_to_string(link->operstate))),
-                                        JSON_BUILD_PAIR("CarrierState", JSON_BUILD_STRING(link_carrier_state_to_string(link->carrier_state))),
-                                        JSON_BUILD_PAIR("AddressState", JSON_BUILD_STRING(link_address_state_to_string(link->address_state))),
-                                        JSON_BUILD_PAIR("IPv4AddressState", JSON_BUILD_STRING(link_address_state_to_string(link->ipv4_address_state))),
-                                        JSON_BUILD_PAIR("IPv6AddressState", JSON_BUILD_STRING(link_address_state_to_string(link->ipv6_address_state))),
-                                        JSON_BUILD_PAIR("OnlineState", JSON_BUILD_STRING(link_online_state_to_string(link->online_state)))));
+        if (link->n_dns != UINT_MAX) {
+                for (unsigned i = 0; i < link->n_dns; i++) {
+                        if (!GREEDY_REALLOC(elements, n + 1)) {
+                                r = -ENOMEM;
+                                goto finalize;
+                        }
+
+                        r = dns_build_json_one(link, link->dns[i], NETWORK_CONFIG_SOURCE_RUNTIME, NULL, elements + n);
+                        if (r < 0)
+                                goto finalize;
+                        if (r > 0)
+                                n++;
+                }
+        } else {
+                for (unsigned i = 0; i < link->network->n_dns; i++) {
+                        if (!GREEDY_REALLOC(elements, n + 1)) {
+                                r = -ENOMEM;
+                                goto finalize;
+                        }
+
+                        r = dns_build_json_one(link, link->network->dns[i], NETWORK_CONFIG_SOURCE_STATIC, NULL, elements + n);
+                        if (r < 0)
+                                goto finalize;
+                        if (r > 0)
+                                n++;
+                }
+
+                if (link->dhcp_lease && link->network->dhcp_use_dns) {
+                        const struct in_addr *dns;
+                        union in_addr_union s;
+                        int n_dns;
+
+                        r = sd_dhcp_lease_get_server_identifier(link->dhcp_lease, &s.in);
+                        if (r < 0)
+                                goto finalize;
+
+                        n_dns = sd_dhcp_lease_get_dns(link->dhcp_lease, &dns);
+                        for (int i = 0; i < n_dns; i++) {
+                                if (!GREEDY_REALLOC(elements, n + 1)) {
+                                        r = -ENOMEM;
+                                        goto finalize;
+                                }
+
+                                r = dns_build_json_one(link,
+                                                       &(struct in_addr_full) { .family = AF_INET, .address.in = dns[i], },
+                                                       NETWORK_CONFIG_SOURCE_DHCP4,
+                                                       &s,
+                                                       elements + n);
+                                if (r < 0)
+                                        goto finalize;
+                                if (r > 0)
+                                        n++;
+                        }
+                }
+
+                if (link->dhcp6_lease && link->network->dhcp6_use_dns) {
+                        const struct in6_addr *dns;
+                        union in_addr_union s;
+                        int n_dns;
+
+                        r = sd_dhcp6_lease_get_server_address(link->dhcp6_lease, &s.in6);
+                        if (r < 0)
+                                goto finalize;
+
+                        n_dns = sd_dhcp6_lease_get_dns(link->dhcp6_lease, &dns);
+                        for (int i = 0; i < n_dns; i++) {
+                                if (!GREEDY_REALLOC(elements, n + 1)) {
+                                        r = -ENOMEM;
+                                        goto finalize;
+                                }
+
+                                r = dns_build_json_one(link,
+                                                       &(struct in_addr_full) { .family = AF_INET6, .address.in6 = dns[i], },
+                                                       NETWORK_CONFIG_SOURCE_DHCP6,
+                                                       &s,
+                                                       elements + n);
+                                if (r < 0)
+                                        goto finalize;
+                                if (r > 0)
+                                        n++;
+                        }
+                }
+
+                if (link->network->ipv6_accept_ra_use_dns) {
+                        NDiscRDNSS *a;
+
+                        SET_FOREACH(a, link->ndisc_rdnss) {
+                                if (!GREEDY_REALLOC(elements, n + 1)) {
+                                        r = -ENOMEM;
+                                        goto finalize;
+                                }
+
+                                r = dns_build_json_one(link,
+                                                       &(struct in_addr_full) { .family = AF_INET6, .address.in6 = a->address, },
+                                                       NETWORK_CONFIG_SOURCE_NDISC,
+                                                       &(union in_addr_union) { .in6 = a->router },
+                                                       elements + n);
+                                if (r < 0)
+                                        goto finalize;
+                                if (r > 0)
+                                        n++;
+                        }
+                }
+        }
+
+        if (n == 0) {
+                *ret = NULL;
+                r = 0;
+                goto finalize;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("DNS", JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int server_build_json_one_addr(int family, const union in_addr_union *a, NetworkConfigSource s, const union in_addr_union *p, JsonVariant **ret) {
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(a);
+        assert(ret);
+
+        return json_build(ret, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_INTEGER("Family", family),
+                                JSON_BUILD_PAIR_IN_ADDR("Address", a, family),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(s)),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ConfigProvider", p, family)));
+}
+
+static int server_build_json_one_fqdn(int family, const char *fqdn, NetworkConfigSource s, const union in_addr_union *p, JsonVariant **ret) {
+        assert(IN_SET(family, AF_UNSPEC, AF_INET, AF_INET6));
+        assert(fqdn);
+        assert(ret);
+
+        return json_build(ret, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_STRING("Server", fqdn),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(s)),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ConfigProvider", p, family)));
+}
+
+static int server_build_json_one_string(const char *str, NetworkConfigSource s, JsonVariant **ret) {
+        union in_addr_union a;
+        int family;
+
+        assert(str);
+        assert(ret);
+
+        if (in_addr_from_string_auto(str, &family, &a) >= 0)
+                return server_build_json_one_addr(family, &a, s, NULL, ret);
+
+        return server_build_json_one_fqdn(AF_UNSPEC, str, s, NULL, ret);
+}
+
+static int ntp_build_json(Link *link, JsonVariant **ret) {
+        JsonVariant **elements = NULL;
+        size_t n = 0;
+        int r;
+
+        assert(link);
+        assert(ret);
+
+        if (!link->network) {
+                *ret = NULL;
+                return 0;
+        }
+
+        STRV_FOREACH(p, link->ntp ?: link->network->ntp) {
+                if (!GREEDY_REALLOC(elements, n + 1)) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+
+                r = server_build_json_one_string(*p, NETWORK_CONFIG_SOURCE_RUNTIME, elements + n);
+                if (r < 0)
+                        goto finalize;
+
+                n++;
+        }
+
+        if (!link->ntp) {
+                if (link->dhcp_lease && link->network->dhcp_use_ntp) {
+                        const struct in_addr *ntp;
+                        union in_addr_union s;
+                        int n_ntp;
+
+                        r = sd_dhcp_lease_get_server_identifier(link->dhcp_lease, &s.in);
+                        if (r < 0)
+                                goto finalize;
+
+                        n_ntp = sd_dhcp_lease_get_ntp(link->dhcp_lease, &ntp);
+                        for (int i = 0; i < n_ntp; i++) {
+                                if (!GREEDY_REALLOC(elements, n + 1)) {
+                                        r = -ENOMEM;
+                                        goto finalize;
+                                }
+
+                                r = server_build_json_one_addr(AF_INET,
+                                                               &(union in_addr_union) { .in = ntp[i], },
+                                                               NETWORK_CONFIG_SOURCE_DHCP4,
+                                                               &s,
+                                                               elements + n);
+                                if (r < 0)
+                                        goto finalize;
+
+                                n++;
+                        }
+                }
+
+                if (link->dhcp6_lease && link->network->dhcp6_use_ntp) {
+                        const struct in6_addr *ntp_addr;
+                        union in_addr_union s;
+                        char **ntp_fqdn;
+                        int n_ntp;
+
+                        r = sd_dhcp6_lease_get_server_address(link->dhcp6_lease, &s.in6);
+                        if (r < 0)
+                                goto finalize;
+
+                        n_ntp = sd_dhcp6_lease_get_ntp_addrs(link->dhcp6_lease, &ntp_addr);
+                        for (int i = 0; i < n_ntp; i++) {
+                                if (!GREEDY_REALLOC(elements, n + 1)) {
+                                        r = -ENOMEM;
+                                        goto finalize;
+                                }
+
+                                r = server_build_json_one_addr(AF_INET6,
+                                                               &(union in_addr_union) { .in6 = ntp_addr[i], },
+                                                               NETWORK_CONFIG_SOURCE_DHCP6,
+                                                               &s,
+                                                               elements + n);
+                                if (r < 0)
+                                        goto finalize;
+
+                                n++;
+                        }
+
+                        n_ntp = sd_dhcp6_lease_get_ntp_fqdn(link->dhcp6_lease, &ntp_fqdn);
+                        for (int i = 0; i < n_ntp; i++) {
+                                if (!GREEDY_REALLOC(elements, n + 1)) {
+                                        r = -ENOMEM;
+                                        goto finalize;
+                                }
+
+                                r = server_build_json_one_fqdn(AF_INET6,
+                                                               ntp_fqdn[i],
+                                                               NETWORK_CONFIG_SOURCE_DHCP6,
+                                                               &s,
+                                                               elements + n);
+                                if (r < 0)
+                                        goto finalize;
+
+                                n++;
+                        }
+                }
+        }
+
+        if (n == 0) {
+                *ret = NULL;
+                return 0;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("NTP", JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int sip_build_json(Link *link, JsonVariant **ret) {
+        const struct in_addr *sip;
+        JsonVariant **elements;
+        union in_addr_union s;
+        size_t n = 0;
+        int n_sip, r;
+
+        assert(link);
+        assert(ret);
+
+        if (!link->network || !link->network->dhcp_use_sip || !link->dhcp_lease) {
+                *ret = NULL;
+                return 0;
+        }
+
+        n_sip = sd_dhcp_lease_get_sip(link->dhcp_lease, &sip);
+        if (n_sip <= 0) {
+                *ret = NULL;
+                return 0;
+        }
+
+        r = sd_dhcp_lease_get_server_identifier(link->dhcp_lease, &s.in);
         if (r < 0)
                 return r;
 
-        if (link->network) {
-                _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+        elements = new(JsonVariant*, n_sip);
+        if (!elements)
+                return -ENOMEM;
 
-                r = network_build_json(link->network, &w);
+        for (int i = 0; i < n_sip; i++) {
+                r = server_build_json_one_addr(AF_INET,
+                                               &(union in_addr_union) { .in = sip[i], },
+                                               NETWORK_CONFIG_SOURCE_DHCP4,
+                                               &s,
+                                               elements + n);
                 if (r < 0)
-                        return r;
-
-                r = json_variant_merge(&v, w);
-                if (r < 0)
-                        return r;
+                        goto finalize;
+                if (r > 0)
+                        n++;
         }
 
-        if (link->sd_device) {
-                _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("SIP", JSON_BUILD_VARIANT_ARRAY(elements, n))));
 
-                r = device_build_json(link->sd_device, &w);
-                if (r < 0)
-                        return r;
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
 
-                r = json_variant_merge(&v, w);
-                if (r < 0)
-                        return r;
+static int domain_build_json(int family, const char *domain, NetworkConfigSource s, const union in_addr_union *p, JsonVariant **ret) {
+        assert(IN_SET(family, AF_UNSPEC, AF_INET, AF_INET6));
+        assert(domain);
+        assert(ret);
+
+        return json_build(ret, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_STRING("Domain", domain),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(s)),
+                                JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ConfigProvider", p, family)));
+}
+
+static int domains_build_json(Link *link, bool is_route, JsonVariant **ret) {
+        OrderedSet *link_domains, *network_domains;
+        JsonVariant **elements = NULL;
+        DHCPUseDomains use_domains;
+        union in_addr_union s;
+        char **domains;
+        const char *domain;
+        size_t n = 0;
+        int r;
+
+        assert(link);
+        assert(ret);
+
+        if (!link->network) {
+                *ret = NULL;
+                return 0;
         }
 
+        link_domains = is_route ? link->route_domains : link->search_domains;
+        network_domains = is_route ? link->network->route_domains : link->network->search_domains;
+        use_domains = is_route ? DHCP_USE_DOMAINS_ROUTE : DHCP_USE_DOMAINS_YES;
+
+        ORDERED_SET_FOREACH(domain, link_domains ?: network_domains) {
+                if (!GREEDY_REALLOC(elements, n + 1)) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+
+                r = domain_build_json(AF_UNSPEC, domain,
+                                      link_domains ? NETWORK_CONFIG_SOURCE_RUNTIME : NETWORK_CONFIG_SOURCE_STATIC,
+                                      NULL, elements + n);
+                if (r < 0)
+                        goto finalize;
+
+                n++;
+        }
+
+        if (!link_domains) {
+                if (link->dhcp_lease &&
+                    link->network->dhcp_use_domains == use_domains) {
+                        r = sd_dhcp_lease_get_server_identifier(link->dhcp_lease, &s.in);
+                        if (r < 0)
+                                goto finalize;
+
+                        if (sd_dhcp_lease_get_domainname(link->dhcp_lease, &domain) >= 0) {
+                                if (!GREEDY_REALLOC(elements, n + 1)) {
+                                        r = -ENOMEM;
+                                        goto finalize;
+                                }
+
+                                r = domain_build_json(AF_INET, domain, NETWORK_CONFIG_SOURCE_DHCP4, &s, elements + n);
+                                if (r < 0)
+                                        goto finalize;
+
+                                n++;
+                        }
+
+                        if (sd_dhcp_lease_get_search_domains(link->dhcp_lease, &domains) >= 0) {
+                                STRV_FOREACH(p, domains) {
+                                        if (!GREEDY_REALLOC(elements, n + 1)) {
+                                                r = -ENOMEM;
+                                                goto finalize;
+                                        }
+
+                                        r = domain_build_json(AF_INET, *p, NETWORK_CONFIG_SOURCE_DHCP4, &s, elements + n);
+                                        if (r < 0)
+                                                goto finalize;
+
+                                        n++;
+                                }
+                        }
+                }
+
+                if (link->dhcp6_lease &&
+                    link->network->dhcp6_use_domains == use_domains) {
+                        r = sd_dhcp6_lease_get_server_address(link->dhcp6_lease, &s.in6);
+                        if (r < 0)
+                                goto finalize;
+
+                        if (sd_dhcp6_lease_get_domains(link->dhcp6_lease, &domains) >= 0) {
+                                STRV_FOREACH(p, domains) {
+                                        if (!GREEDY_REALLOC(elements, n + 1)) {
+                                                r = -ENOMEM;
+                                                goto finalize;
+                                        }
+
+                                        r = domain_build_json(AF_INET6, *p, NETWORK_CONFIG_SOURCE_DHCP6, &s, elements + n);
+                                        if (r < 0)
+                                                goto finalize;
+
+                                        n++;
+                                }
+                        }
+                }
+
+                if (link->network->ipv6_accept_ra_use_domains == use_domains) {
+                        NDiscDNSSL *a;
+
+                        SET_FOREACH(a, link->ndisc_dnssl) {
+                                if (!GREEDY_REALLOC(elements, n + 1)) {
+                                        r = -ENOMEM;
+                                        goto finalize;
+                                }
+
+                                r = domain_build_json(AF_INET6, NDISC_DNSSL_DOMAIN(a), NETWORK_CONFIG_SOURCE_NDISC,
+                                                      &(union in_addr_union) { .in6 = a->router },
+                                                      elements + n);
+                                if (r < 0)
+                                        goto finalize;
+
+                                n++;
+                        }
+                }
+        }
+
+        if (n == 0) {
+                *ret = NULL;
+                return 0;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR(is_route ? "RouteDomains" : "SearchDomains",
+                                                              JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int nta_build_json(const char *nta, NetworkConfigSource s, JsonVariant **ret) {
+        assert(nta);
+        assert(ret);
+
+        return json_build(ret, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR_STRING("DNSSECNegativeTrustAnchor", nta),
+                                JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(s))));
+}
+
+static int ntas_build_json(Link *link, JsonVariant **ret) {
+        JsonVariant **elements = NULL;
+        const char *nta;
+        size_t n = 0;
+        int r;
+
+        assert(link);
+        assert(ret);
+
+        if (!link->network) {
+                *ret = NULL;
+                return 0;
+        }
+
+        SET_FOREACH(nta, link->dnssec_negative_trust_anchors ?: link->network->dnssec_negative_trust_anchors) {
+                if (!GREEDY_REALLOC(elements, n + 1)) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+
+                r = nta_build_json(nta,
+                                   link->dnssec_negative_trust_anchors ? NETWORK_CONFIG_SOURCE_RUNTIME : NETWORK_CONFIG_SOURCE_STATIC,
+                                   elements + n);
+                if (r < 0)
+                        goto finalize;
+
+                n++;
+        }
+
+        if (n == 0) {
+                *ret = NULL;
+                return 0;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("DNSSECNegativeTrustAnchors",
+                                                              JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+static int dns_misc_build_json(Link *link, JsonVariant **ret) {
+        JsonVariant **elements = NULL;
+        ResolveSupport resolve_support;
+        NetworkConfigSource source;
+        DnsOverTlsMode mode;
+        size_t n = 0;
+        int t, r;
+
+        assert(link);
+        assert(ret);
+
+        if (!link->network) {
+                *ret = NULL;
+                return 0;
+        }
+
+        resolve_support = link->llmnr >= 0 ? link->llmnr : link->network->llmnr;
+        if (resolve_support >= 0) {
+                source = link->llmnr >= 0 ? NETWORK_CONFIG_SOURCE_RUNTIME : NETWORK_CONFIG_SOURCE_STATIC;
+
+                if (!GREEDY_REALLOC(elements, n + 1)) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+
+                r = json_build(elements + n, JSON_BUILD_OBJECT(
+                                        JSON_BUILD_PAIR_STRING("LLMNR", resolve_support_to_string(resolve_support)),
+                                        JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(source))));
+                if (r < 0)
+                        goto finalize;
+
+                n++;
+        }
+
+        resolve_support = link->mdns >= 0 ? link->mdns : link->network->mdns;
+        if (resolve_support >= 0) {
+                source = link->mdns >= 0 ? NETWORK_CONFIG_SOURCE_RUNTIME : NETWORK_CONFIG_SOURCE_STATIC;
+
+                if (!GREEDY_REALLOC(elements, n + 1)) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+
+                r = json_build(elements + n, JSON_BUILD_OBJECT(
+                                        JSON_BUILD_PAIR_STRING("MDNS", resolve_support_to_string(resolve_support)),
+                                        JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(source))));
+                if (r < 0)
+                        goto finalize;
+
+                n++;
+        }
+
+        t = link->dns_default_route >= 0 ? link->dns_default_route : link->network->dns_default_route;
+        if (t >= 0) {
+                source = link->dns_default_route >= 0 ? NETWORK_CONFIG_SOURCE_RUNTIME : NETWORK_CONFIG_SOURCE_STATIC;
+
+                if (!GREEDY_REALLOC(elements, n + 1)) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+
+                r = json_build(elements + n, JSON_BUILD_OBJECT(
+                                        JSON_BUILD_PAIR_BOOLEAN("DNSDefaultRoute", t),
+                                        JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(source))));
+                if (r < 0)
+                        goto finalize;
+
+                n++;
+        }
+
+        mode = link->dns_over_tls_mode >= 0 ? link->dns_over_tls_mode : link->network->dns_over_tls_mode;
+        if (mode >= 0) {
+                source = link->dns_over_tls_mode >= 0 ? NETWORK_CONFIG_SOURCE_RUNTIME : NETWORK_CONFIG_SOURCE_STATIC;
+
+                if (!GREEDY_REALLOC(elements, n + 1)) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+
+                r = json_build(elements + n, JSON_BUILD_OBJECT(
+                                        JSON_BUILD_PAIR_STRING("DNSOverTLS", dns_over_tls_mode_to_string(mode)),
+                                        JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(source))));
+                if (r < 0)
+                        goto finalize;
+
+                n++;
+        }
+
+        r = json_build(ret, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("DNSSettings",
+                                                              JSON_BUILD_VARIANT_ARRAY(elements, n))));
+
+finalize:
+        json_variant_unref_many(elements, n);
+        free(elements);
+        return r;
+}
+
+int link_build_json(Link *link, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
+        _cleanup_free_ char *type = NULL, *flags = NULL;
+        int r;
+
+        assert(link);
+        assert(ret);
+
+        r = net_get_type_string(link->dev, link->iftype, &type);
+        if (r == -ENOMEM)
+                return r;
+
+        r = link_flags_to_string_alloc(link->flags, &flags);
+        if (r < 0)
+                return r;
+
+        r = json_build(&v, JSON_BUILD_OBJECT(
+                                /* basic information */
+                                JSON_BUILD_PAIR_INTEGER("Index", link->ifindex),
+                                JSON_BUILD_PAIR_STRING("Name", link->ifname),
+                                JSON_BUILD_PAIR_STRV_NON_EMPTY("AlternativeNames", link->alternative_names),
+                                JSON_BUILD_PAIR_CONDITION(link->master_ifindex > 0,
+                                                          "MasterInterfaceIndex", JSON_BUILD_INTEGER(link->master_ifindex)),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("Kind", link->kind),
+                                JSON_BUILD_PAIR_STRING("Type", type),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("Driver", link->driver),
+                                JSON_BUILD_PAIR_UNSIGNED("Flags", link->flags),
+                                JSON_BUILD_PAIR_STRING("FlagsString", flags),
+                                JSON_BUILD_PAIR_UNSIGNED("KernelOperationalState", link->kernel_operstate),
+                                JSON_BUILD_PAIR_STRING("KernelOperationalStateString", kernel_operstate_to_string(link->kernel_operstate)),
+                                JSON_BUILD_PAIR_UNSIGNED("MTU", link->mtu),
+                                JSON_BUILD_PAIR_UNSIGNED("MinimumMTU", link->min_mtu),
+                                JSON_BUILD_PAIR_UNSIGNED("MaximumMTU", link->max_mtu),
+                                JSON_BUILD_PAIR_HW_ADDR_NON_NULL("HardwareAddress", &link->hw_addr),
+                                JSON_BUILD_PAIR_HW_ADDR_NON_NULL("PermanentHardwareAddress", &link->permanent_hw_addr),
+                                JSON_BUILD_PAIR_HW_ADDR_NON_NULL("BroadcastAddress", &link->bcast_addr),
+                                JSON_BUILD_PAIR_IN6_ADDR_NON_NULL("IPv6LinkLocalAddress", &link->ipv6ll_address),
+                                /* wlan information */
+                                JSON_BUILD_PAIR_CONDITION(link->wlan_iftype > 0, "WirelessLanInterfaceType",
+                                                          JSON_BUILD_UNSIGNED(link->wlan_iftype)),
+                                JSON_BUILD_PAIR_CONDITION(link->wlan_iftype > 0, "WirelessLanInterfaceTypeString",
+                                                          JSON_BUILD_STRING(nl80211_iftype_to_string(link->wlan_iftype))),
+                                JSON_BUILD_PAIR_STRING_NON_EMPTY("SSID", link->ssid),
+                                JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL("BSSID", &link->bssid),
+                                /* link state */
+                                JSON_BUILD_PAIR_STRING("AdministrativeState", link_state_to_string(link->state)),
+                                JSON_BUILD_PAIR_STRING("OperationalState", link_operstate_to_string(link->operstate)),
+                                JSON_BUILD_PAIR_STRING("CarrierState", link_carrier_state_to_string(link->carrier_state)),
+                                JSON_BUILD_PAIR_STRING("AddressState", link_address_state_to_string(link->address_state)),
+                                JSON_BUILD_PAIR_STRING("IPv4AddressState", link_address_state_to_string(link->ipv4_address_state)),
+                                JSON_BUILD_PAIR_STRING("IPv6AddressState", link_address_state_to_string(link->ipv6_address_state)),
+                                JSON_BUILD_PAIR_STRING("OnlineState", link_online_state_to_string(link->online_state))));
+        if (r < 0)
+                return r;
+
+        r = network_build_json(link->network, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = device_build_json(link->dev, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = dns_build_json(link, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = ntp_build_json(link, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = sip_build_json(link, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = domains_build_json(link, /* is_route = */ false, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = domains_build_json(link, /* is_route = */ true, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = ntas_build_json(link, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = dns_misc_build_json(link, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = addresses_build_json(link->addresses, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = neighbors_build_json(link->neighbors, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = nexthops_build_json(link->nexthops, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = routes_build_json(link->routes, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
         *ret = TAKE_PTR(v);
         return 0;
 }
 
 static int link_json_compare(JsonVariant * const *a, JsonVariant * const *b) {
-        intmax_t index_a, index_b;
+        int64_t index_a, index_b;
 
         assert(a && *a);
         assert(b && *b);
@@ -105,7 +1360,7 @@
         return CMP(index_a, index_b);
 }
 
-int manager_build_json(Manager *manager, JsonVariant **ret) {
+static int links_build_json(Manager *manager, JsonVariant **ret) {
         JsonVariant **elements;
         Link *link;
         size_t n = 0;
@@ -134,3 +1389,46 @@
         free(elements);
         return r;
 }
+
+int manager_build_json(Manager *manager, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
+        int r;
+
+        assert(manager);
+        assert(ret);
+
+        r = links_build_json(manager, &v);
+        if (r < 0)
+                return r;
+
+        r = nexthops_build_json(manager->nexthops, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = routes_build_json(manager->routes, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        w = json_variant_unref(w);
+
+        r = routing_policy_rules_build_json(manager->rules, &w);
+        if (r < 0)
+                return r;
+
+        r = json_variant_merge(&v, w);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(v);
+        return 0;
+}
diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c
index f4e3556..e9c18f0 100644
--- a/src/network/networkd-link-bus.c
+++ b/src/network/networkd-link-bus.c
@@ -36,14 +36,13 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Link *link = userdata;
+        Link *link = ASSERT_PTR(userdata);
         Manager *manager;
         double interval_sec;
         uint64_t tx, rx;
 
         assert(bus);
         assert(reply);
-        assert(userdata);
 
         manager = link->manager;
 
@@ -79,12 +78,10 @@
 
 int bus_link_method_set_ntp_servers(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_strv_free_ char **ntp = NULL;
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
-        char **i;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -123,12 +120,11 @@
 
 static int bus_link_method_set_dns_servers_internal(sd_bus_message *message, void *userdata, sd_bus_error *error, bool extended) {
         struct in_addr_full **dns;
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         size_t n;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -181,11 +177,10 @@
 
 int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_ordered_set_free_ OrderedSet *search_domains = NULL, *route_domains = NULL;
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -195,9 +190,16 @@
         if (r < 0)
                 return r;
 
+        search_domains = ordered_set_new(&string_hash_ops_free);
+        if (!search_domains)
+                return -ENOMEM;
+
+        route_domains = ordered_set_new(&string_hash_ops_free);
+        if (!route_domains)
+                return -ENOMEM;
+
         for (;;) {
                 _cleanup_free_ char *str = NULL;
-                OrderedSet **domains;
                 const char *name;
                 int route_only;
 
@@ -219,12 +221,7 @@
                 if (r < 0)
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid search domain %s", name);
 
-                domains = route_only ? &route_domains : &search_domains;
-                r = ordered_set_ensure_allocated(domains, &string_hash_ops_free);
-                if (r < 0)
-                        return r;
-
-                r = ordered_set_consume(*domains, TAKE_PTR(str));
+                r = ordered_set_consume(route_only ? route_domains : search_domains, TAKE_PTR(str));
                 if (r == -EEXIST)
                         continue;
                 if (r < 0)
@@ -258,11 +255,10 @@
 }
 
 int bus_link_method_set_default_route(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r, b;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -294,13 +290,12 @@
 }
 
 int bus_link_method_set_llmnr(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         ResolveSupport mode;
         const char *llmnr;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -340,13 +335,12 @@
 }
 
 int bus_link_method_set_mdns(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         ResolveSupport mode;
         const char *mdns;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -386,13 +380,12 @@
 }
 
 int bus_link_method_set_dns_over_tls(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         const char *dns_over_tls;
         DnsOverTlsMode mode;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -432,13 +425,12 @@
 }
 
 int bus_link_method_set_dnssec(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         const char *dnssec;
         DnssecMode mode;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -480,12 +472,10 @@
 int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_set_free_free_ Set *ns = NULL;
         _cleanup_strv_free_ char **ntas = NULL;
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
-        char **i;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -534,11 +524,10 @@
 }
 
 int bus_link_method_revert_ntp(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -564,11 +553,10 @@
 }
 
 int bus_link_method_revert_dns(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_managed_link(l, error);
         if (r < 0)
@@ -594,11 +582,9 @@
 }
 
 int bus_link_method_force_renew(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
-        assert(l);
-
         if (!l->network)
                 return sd_bus_error_setf(error, BUS_ERROR_UNMANAGED_INTERFACE,
                                          "Interface %s is not managed by systemd-networkd",
@@ -623,11 +609,9 @@
 }
 
 int bus_link_method_renew(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
-        assert(l);
-
         if (!l->network)
                 return sd_bus_error_setf(error, BUS_ERROR_UNMANAGED_INTERFACE,
                                          "Interface %s is not managed by systemd-networkd",
@@ -652,11 +636,10 @@
 }
 
 int bus_link_method_reconfigure(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(l);
 
         r = bus_verify_polkit_async(message, CAP_NET_ADMIN,
                                     "org.freedesktop.network1.reconfigure",
@@ -684,11 +667,10 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         _cleanup_free_ char *text = NULL;
-        Link *link = userdata;
+        Link *link = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(link);
 
         r = link_build_json(link, &v);
         if (r < 0)
@@ -709,7 +691,7 @@
         return sd_bus_send(NULL, reply, NULL);
 }
 
-const sd_bus_vtable link_vtable[] = {
+static const sd_bus_vtable link_vtable[] = {
         SD_BUS_VTABLE_START(0),
 
         SD_BUS_PROPERTY("OperationalState", "s", property_get_operational_state, offsetof(Link, operstate), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
@@ -825,13 +807,12 @@
 
 int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
         _cleanup_strv_free_ char **l = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         unsigned c = 0;
         Link *link;
 
         assert(bus);
         assert(path);
-        assert(m);
         assert(nodes);
 
         l = new0(char*, hashmap_size(m->links_by_index) + 1);
@@ -856,14 +837,13 @@
 
 int link_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
         _cleanup_free_ char *identifier = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Link *link;
         int ifindex, r;
 
         assert(bus);
         assert(path);
         assert(interface);
-        assert(m);
         assert(found);
 
         r = sd_bus_path_decode(path, "/org/freedesktop/network1/link", &identifier);
@@ -878,7 +858,8 @@
         if (r < 0)
                 return 0;
 
-        if (streq(interface, "org.freedesktop.network1.DHCPServer") && !link->dhcp_server)
+        if (streq(interface, "org.freedesktop.network1.DHCPServer") &&
+            (!link->dhcp_server || sd_dhcp_server_is_in_relay_mode(link->dhcp_server)))
                 return 0;
 
         *found = link;
@@ -914,3 +895,10 @@
 
         return link_send_changed_strv(link, properties);
 }
+
+const BusObjectImplementation link_object = {
+        "/org/freedesktop/network1/link",
+        "org.freedesktop.network1.Link",
+        .fallback_vtables = BUS_FALLBACK_VTABLES({link_vtable, link_object_find}),
+        .node_enumerator = link_node_enumerator,
+};
diff --git a/src/network/networkd-link-bus.h b/src/network/networkd-link-bus.h
index e8fa84b..924d997 100644
--- a/src/network/networkd-link-bus.h
+++ b/src/network/networkd-link-bus.h
@@ -3,11 +3,12 @@
 
 #include "sd-bus.h"
 
+#include "bus-object.h"
 #include "macro.h"
 
 typedef struct Link Link;
 
-extern const sd_bus_vtable link_vtable[];
+extern const BusObjectImplementation link_object;
 
 char *link_bus_path(Link *link);
 int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 20675f2..f2839ec 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -10,6 +10,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "arphrd-util.h"
 #include "batadv.h"
 #include "bond.h"
 #include "bridge.h"
@@ -20,11 +21,13 @@
 #include "dhcp-lease-internal.h"
 #include "env-file.h"
 #include "ethtool-util.h"
+#include "event-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
 #include "fs-util.h"
-#include "ipvlan.h"
+#include "glyph-util.h"
+#include "logarithm.h"
 #include "missing_network.h"
 #include "netlink-util.h"
 #include "network-internal.h"
@@ -33,6 +36,7 @@
 #include "networkd-bridge-fdb.h"
 #include "networkd-bridge-mdb.h"
 #include "networkd-can.h"
+#include "networkd-dhcp-prefix-delegation.h"
 #include "networkd-dhcp-server.h"
 #include "networkd-dhcp4.h"
 #include "networkd-dhcp6.h"
@@ -48,6 +52,7 @@
 #include "networkd-nexthop.h"
 #include "networkd-queue.h"
 #include "networkd-radv.h"
+#include "networkd-route.h"
 #include "networkd-routing-policy-rule.h"
 #include "networkd-setlink.h"
 #include "networkd-sriov.h"
@@ -56,87 +61,31 @@
 #include "networkd-wifi.h"
 #include "set.h"
 #include "socket-util.h"
-#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
 #include "strv.h"
 #include "tc.h"
 #include "tmpfile-util.h"
+#include "tuntap.h"
 #include "udev-util.h"
-#include "util.h"
 #include "vrf.h"
 
-bool link_ipv4ll_enabled(Link *link) {
-        assert(link);
-
-        if (link->flags & IFF_LOOPBACK)
-                return false;
-
-        if (!link->network)
-                return false;
-
-        if (link->iftype == ARPHRD_CAN)
-                return false;
-
-        if (link->hw_addr.length != ETH_ALEN)
-                return false;
-
-        if (ether_addr_is_null(&link->hw_addr.ether))
-                return false;
-
-        if (STRPTR_IN_SET(link->kind,
-                          "vrf", "wireguard", "ipip", "gre", "ip6gre","ip6tnl", "sit", "vti",
-                          "vti6", "nlmon", "xfrm", "bareudp"))
-                return false;
-
-        /* L3 or L3S mode do not support ARP. */
-        if (IN_SET(link_get_ipvlan_mode(link), NETDEV_IPVLAN_MODE_L3, NETDEV_IPVLAN_MODE_L3S))
-                return false;
-
-        if (link->network->bond)
-                return false;
-
-        return link->network->link_local & ADDRESS_FAMILY_IPV4;
-}
-
-bool link_ipv6ll_enabled(Link *link) {
-        assert(link);
-
-        if (!socket_ipv6_is_supported())
-                return false;
-
-        if (link->flags & IFF_LOOPBACK)
-                return false;
-
-        if (!link->network)
-                return false;
-
-        if (link->iftype == ARPHRD_CAN)
-                return false;
-
-        if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "sit", "vti", "nlmon"))
-                return false;
-
-        if (link->network->bond)
-                return false;
-
-        return link->network->link_local & ADDRESS_FAMILY_IPV6;
-}
-
 bool link_ipv6_enabled(Link *link) {
         assert(link);
 
         if (!socket_ipv6_is_supported())
                 return false;
 
-        if (link->network->bond)
-                return false;
-
         if (link->iftype == ARPHRD_CAN)
                 return false;
 
-        /* DHCPv6 client will not be started if no IPv6 link-local address is configured. */
-        if (link_ipv6ll_enabled(link))
+        if (!link->network)
+                return false;
+
+        if (link->network->bond)
+                return false;
+
+        if (link_may_have_ipv6ll(link, /* check_multicast = */ false))
                 return true;
 
         if (network_has_static_ipv6_configurations(link->network))
@@ -145,19 +94,15 @@
         return false;
 }
 
-bool link_is_ready_to_configure(Link *link, bool allow_unmanaged) {
+static bool link_is_ready_to_configure_one(Link *link, bool allow_unmanaged) {
         assert(link);
 
-        if (!link->network) {
-                if (!allow_unmanaged)
-                        return false;
-
-                return link_has_carrier(link);
-        }
-
-        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED, LINK_STATE_UNMANAGED))
                 return false;
 
+        if (!link->network)
+                return allow_unmanaged;
+
         if (!link->network->configure_without_carrier) {
                 if (link->set_flags_messages > 0)
                         return false;
@@ -169,15 +114,16 @@
         if (link->set_link_messages > 0)
                 return false;
 
-        if (!link->stacked_netdevs_created)
-                return false;
-
         if (!link->activated)
                 return false;
 
         return true;
 }
 
+bool link_is_ready_to_configure(Link *link, bool allow_unmanaged) {
+        return check_ready_for_all_sr_iov_ports(link, allow_unmanaged, link_is_ready_to_configure_one);
+}
+
 void link_ntp_settings_clear(Link *link) {
         link->ntp = strv_free(link->ntp);
 }
@@ -206,18 +152,23 @@
                 return;
 
         link->dhcp_server = sd_dhcp_server_unref(link->dhcp_server);
+
         link->dhcp_client = sd_dhcp_client_unref(link->dhcp_client);
         link->dhcp_lease = sd_dhcp_lease_unref(link->dhcp_lease);
+        link->dhcp4_6rd_tunnel_name = mfree(link->dhcp4_6rd_tunnel_name);
 
-        link->lldp = sd_lldp_unref(link->lldp);
-        link_lldp_emit_stop(link);
-
-        ndisc_flush(link);
+        link->lldp_rx = sd_lldp_rx_unref(link->lldp_rx);
+        link->lldp_tx = sd_lldp_tx_unref(link->lldp_tx);
 
         link->ipv4ll = sd_ipv4ll_unref(link->ipv4ll);
+
         link->dhcp6_client = sd_dhcp6_client_unref(link->dhcp6_client);
         link->dhcp6_lease = sd_dhcp6_lease_unref(link->dhcp6_lease);
+
         link->ndisc = sd_ndisc_unref(link->ndisc);
+        link->ndisc_expire = sd_event_source_disable_unref(link->ndisc_expire);
+        ndisc_flush(link);
+
         link->radv = sd_radv_unref(link->radv);
 }
 
@@ -228,47 +179,30 @@
         link_dns_settings_clear(link);
 
         link->routes = set_free(link->routes);
-        link->routes_foreign = set_free(link->routes_foreign);
-        link->dhcp_routes = set_free(link->dhcp_routes);
-        link->dhcp_routes_old = set_free(link->dhcp_routes_old);
-        link->dhcp6_routes = set_free(link->dhcp6_routes);
-        link->dhcp6_routes_old = set_free(link->dhcp6_routes_old);
-        link->dhcp6_pd_routes = set_free(link->dhcp6_pd_routes);
-        link->dhcp6_pd_routes_old = set_free(link->dhcp6_pd_routes_old);
-        link->ndisc_routes = set_free(link->ndisc_routes);
-
         link->nexthops = set_free(link->nexthops);
-        link->nexthops_foreign = set_free(link->nexthops_foreign);
-
         link->neighbors = set_free(link->neighbors);
-        link->neighbors_foreign = set_free(link->neighbors_foreign);
-
         link->addresses = set_free(link->addresses);
-        link->addresses_foreign = set_free(link->addresses_foreign);
-        link->addresses_ipv4acd = set_free(link->addresses_ipv4acd);
-        link->pool_addresses = set_free(link->pool_addresses);
-        link->static_addresses = set_free(link->static_addresses);
-        link->dhcp6_addresses = set_free(link->dhcp6_addresses);
-        link->dhcp6_addresses_old = set_free(link->dhcp6_addresses_old);
-        link->dhcp6_pd_addresses = set_free(link->dhcp6_pd_addresses);
-        link->dhcp6_pd_addresses_old = set_free(link->dhcp6_pd_addresses_old);
-        link->ndisc_addresses = set_free(link->ndisc_addresses);
+        link->qdiscs = set_free(link->qdiscs);
+        link->tclasses = set_free(link->tclasses);
 
-        link->dhcp6_pd_prefixes = set_free(link->dhcp6_pd_prefixes);
+        link->dhcp_pd_prefixes = set_free(link->dhcp_pd_prefixes);
 
         link_free_engines(link);
 
+        set_free(link->sr_iov_virt_port_ifindices);
         free(link->ifname);
         strv_free(link->alternative_names);
         free(link->kind);
         free(link->ssid);
+        free(link->previous_ssid);
         free(link->driver);
 
         unlink_and_free(link->lease_file);
         unlink_and_free(link->lldp_file);
         unlink_and_free(link->state_file);
 
-        sd_device_unref(link->sd_device);
+        sd_device_unref(link->dev);
+        netdev_unref(link->netdev);
 
         hashmap_free(link->bound_to_links);
         hashmap_free(link->bound_by_links);
@@ -277,6 +211,8 @@
 
         network_unref(link->network);
 
+        sd_event_source_disable_unref(link->carrier_lost_timer);
+
         return mfree(link);
 }
 
@@ -377,9 +313,13 @@
         if (k < 0)
                 r = log_link_warning_errno(link, k, "Could not stop DHCPv4 server: %m");
 
-        k = sd_lldp_stop(link->lldp);
+        k = sd_lldp_rx_stop(link->lldp_rx);
         if (k < 0)
-                r = log_link_warning_errno(link, k, "Could not stop LLDP: %m");
+                r = log_link_warning_errno(link, k, "Could not stop LLDP Rx: %m");
+
+        k = sd_lldp_tx_stop(link->lldp_tx);
+        if (k < 0)
+                r = log_link_warning_errno(link, k, "Could not stop LLDP Tx: %m");
 
         k = sd_ipv4ll_stop(link->ipv4ll);
         if (k < 0)
@@ -393,19 +333,20 @@
         if (k < 0)
                 r = log_link_warning_errno(link, k, "Could not stop DHCPv6 client: %m");
 
-        k = dhcp6_pd_remove(link);
+        k = dhcp_pd_remove(link, /* only_marked = */ false);
         if (k < 0)
                 r = log_link_warning_errno(link, k, "Could not remove DHCPv6 PD addresses and routes: %m");
 
-        k = sd_ndisc_stop(link->ndisc);
+        k = ndisc_stop(link);
         if (k < 0)
                 r = log_link_warning_errno(link, k, "Could not stop IPv6 Router Discovery: %m");
 
+        ndisc_flush(link);
+
         k = sd_radv_stop(link->radv);
         if (k < 0)
                 r = log_link_warning_errno(link, k, "Could not stop IPv6 Router Advertisement: %m");
 
-        link_lldp_emit_stop(link);
         return r;
 }
 
@@ -451,16 +392,16 @@
                 return;
         }
 
+        if (!link->stacked_netdevs_created)
+                return (void) log_link_debug(link, "%s(): stacked netdevs are not created.", __func__);
+
         if (!link->static_addresses_configured)
                 return (void) log_link_debug(link, "%s(): static addresses are not configured.", __func__);
 
         SET_FOREACH(a, link->addresses)
-                if (!address_is_ready(a)) {
-                        _cleanup_free_ char *str = NULL;
-
-                        (void) in_addr_prefix_to_string(a->family, &a->in_addr, a->prefixlen, &str);
-                        return (void) log_link_debug(link, "%s(): an address %s is not ready.", __func__, strna(str));
-                }
+                if (!address_is_ready(a))
+                        return (void) log_link_debug(link, "%s(): address %s is not ready.", __func__,
+                                                     IN_ADDR_PREFIX_TO_STRING(a->family, &a->in_addr, a->prefixlen));
 
         if (!link->static_address_labels_configured)
                 return (void) log_link_debug(link, "%s(): static address labels are not configured.", __func__);
@@ -495,44 +436,45 @@
             !in6_addr_is_set(&link->ipv6ll_address))
                 return (void) log_link_debug(link, "%s(): IPv6LL is not configured yet.", __func__);
 
-        bool has_ndisc_address = false;
-        NDiscAddress *n;
-        SET_FOREACH(n, link->ndisc_addresses)
-                if (!n->marked) {
-                        has_ndisc_address = true;
+        bool has_dynamic_address = false;
+        SET_FOREACH(a, link->addresses) {
+                if (address_is_marked(a))
+                        continue;
+                if (!address_exists(a))
+                        continue;
+                if (IN_SET(a->source,
+                           NETWORK_CONFIG_SOURCE_IPV4LL,
+                           NETWORK_CONFIG_SOURCE_DHCP4,
+                           NETWORK_CONFIG_SOURCE_DHCP6,
+                           NETWORK_CONFIG_SOURCE_DHCP_PD,
+                           NETWORK_CONFIG_SOURCE_NDISC)) {
+                        has_dynamic_address = true;
                         break;
                 }
+        }
 
-        if ((link_dhcp4_enabled(link) || link_dhcp6_with_address_enabled(link) || link_ipv4ll_enabled(link)) &&
-            !link->dhcp_address && set_isempty(link->dhcp6_addresses) && !has_ndisc_address &&
-            !link->ipv4ll_address_configured)
+        if ((link_ipv4ll_enabled(link) || link_dhcp4_enabled(link) || link_dhcp6_with_address_enabled(link) ||
+             (link_dhcp_pd_is_enabled(link) && link->network->dhcp_pd_assign)) && !has_dynamic_address)
                 /* When DHCP[46] or IPv4LL is enabled, at least one address is acquired by them. */
-                return (void) log_link_debug(link, "%s(): DHCP4, DHCP6 or IPv4LL is enabled but no dynamic address is assigned yet.", __func__);
+                return (void) log_link_debug(link, "%s(): DHCPv4, DHCPv6, DHCP-PD or IPv4LL is enabled but no dynamic address is assigned yet.", __func__);
 
         /* Ignore NDisc when ConfigureWithoutCarrier= is enabled, as IPv6AcceptRA= is enabled by default. */
-        if (link_dhcp4_enabled(link) || link_dhcp6_enabled(link) || link_dhcp6_pd_is_enabled(link) ||
-            (!link->network->configure_without_carrier && link_ipv6_accept_ra_enabled(link)) ||
-            link_ipv4ll_enabled(link)) {
+        if (link_ipv4ll_enabled(link) || link_dhcp4_enabled(link) ||
+            link_dhcp6_enabled(link) || link_dhcp_pd_is_enabled(link) ||
+            (!link->network->configure_without_carrier && link_ipv6_accept_ra_enabled(link))) {
 
-                if (!link->dhcp4_configured &&
-                    !(link->dhcp6_address_configured && link->dhcp6_route_configured) &&
-                    !(link->dhcp6_pd_address_configured && link->dhcp6_pd_route_configured) &&
-                    !(link->ndisc_addresses_configured && link->ndisc_routes_configured) &&
-                    !link->ipv4ll_address_configured)
+                if (!link->ipv4ll_address_configured && !link->dhcp4_configured &&
+                    !link->dhcp6_configured && !link->dhcp_pd_configured && !link->ndisc_configured)
                         /* When DHCP[46], NDisc, or IPv4LL is enabled, at least one protocol must be finished. */
                         return (void) log_link_debug(link, "%s(): dynamic addresses or routes are not configured.", __func__);
 
-                log_link_debug(link, "%s(): dhcp4:%s ipv4ll:%s dhcp6_addresses:%s dhcp6_routes:%s "
-                               "dhcp6_pd_addresses:%s dhcp6_pd_routes:%s ndisc_addresses:%s ndisc_routes:%s",
+                log_link_debug(link, "%s(): IPv4LL:%s DHCPv4:%s DHCPv6:%s DHCP-PD:%s NDisc:%s",
                                __func__,
-                               yes_no(link->dhcp4_configured),
                                yes_no(link->ipv4ll_address_configured),
-                               yes_no(link->dhcp6_address_configured),
-                               yes_no(link->dhcp6_route_configured),
-                               yes_no(link->dhcp6_pd_address_configured),
-                               yes_no(link->dhcp6_pd_route_configured),
-                               yes_no(link->ndisc_addresses_configured),
-                               yes_no(link->ndisc_routes_configured));
+                               yes_no(link->dhcp4_configured),
+                               yes_no(link->dhcp6_configured),
+                               yes_no(link->dhcp_pd_configured),
+                               yes_no(link->ndisc_configured));
         }
 
         link_set_state(link, LINK_STATE_CONFIGURED);
@@ -591,18 +533,17 @@
         assert(link);
 
         link->stacked_netdevs_created = false;
-        link->stacked_netdevs_after_configured_created = false;
 
         HASHMAP_FOREACH(netdev, link->network->stacked_netdevs) {
-                r = link_request_to_crate_stacked_netdev(link, netdev);
+                r = link_request_stacked_netdev(link, netdev);
                 if (r < 0)
                         return r;
         }
 
-        if (link->create_stacked_netdev_messages == 0)
+        if (link->create_stacked_netdev_messages == 0) {
                 link->stacked_netdevs_created = true;
-        if (link->create_stacked_netdev_after_configured_messages == 0)
-                link->stacked_netdevs_after_configured_created = true;
+                link_check_ready(link);
+        }
 
         return 0;
 }
@@ -612,20 +553,9 @@
 
         assert(link);
 
-        if (link->radv) {
-                assert(link->radv);
-                assert(in6_addr_is_link_local(&link->ipv6ll_address));
-
-                log_link_debug(link, "Starting IPv6 Router Advertisements");
-
-                r = radv_emit_dns(link);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Failed to configure DNS or Domains in IPv6 Router Advertisement: %m");
-
-                r = sd_radv_start(link->radv);
-                if (r < 0 && r != -EBUSY)
-                        return log_link_warning_errno(link, r, "Could not start IPv6 Router Advertisement: %m");
-        }
+        r = radv_start(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to start IPv6 Router Advertisement engine: %m");
 
         r = ndisc_start(link);
         if (r < 0)
@@ -635,10 +565,6 @@
         if (r < 0)
                 return log_link_warning_errno(link, r, "Failed to start DHCPv6 client: %m");
 
-        r = dhcp6_request_prefix_delegation(link);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to request DHCPv6 prefix delegation: %m");
-
         return 0;
 }
 
@@ -654,12 +580,20 @@
                 if (r < 0)
                         return log_link_warning_errno(link, r, "Failed to start DHCPv4 client: %m");
 
+                log_link_debug(link, "Acquiring DHCPv4 lease.");
+
         } else if (link->ipv4ll) {
-                log_link_debug(link, "Acquiring IPv4 link-local address");
+                if (in4_addr_is_set(&link->network->ipv4ll_start_address)) {
+                        r = sd_ipv4ll_set_address(link->ipv4ll, &link->network->ipv4ll_start_address);
+                        if (r < 0)
+                                return log_link_warning_errno(link, r, "Could not set IPv4 link-local start address: %m");
+                }
 
                 r = sd_ipv4ll_start(link->ipv4ll);
                 if (r < 0)
                         return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m");
+
+                log_link_debug(link, "Acquiring IPv4 link-local address.");
         }
 
         if (link->dhcp_server) {
@@ -679,6 +613,7 @@
         int r;
 
         assert(link);
+        assert(link->network);
 
         r = link_acquire_dynamic_ipv4_conf(link);
         if (r < 0)
@@ -690,31 +625,46 @@
                         return r;
         }
 
-        r = link_lldp_emit_start(link);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Failed to start LLDP transmission: %m");
+        if (!link_radv_enabled(link) || !link->network->dhcp_pd_announce) {
+                /* DHCPv6PD downstream does not require IPv6LL address. But may require RADV to be
+                 * configured, and RADV may not be configured yet here. Only acquire subnet prefix when
+                 * RADV is disabled, or the announcement of the prefix is disabled. Otherwise, the
+                 * below will be called in radv_start(). */
+                r = dhcp_request_prefix_delegation(link);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to request DHCP delegated subnet prefix: %m");
+        }
+
+        if (link->lldp_tx) {
+                r = sd_lldp_tx_start(link->lldp_tx);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to start LLDP transmission: %m");
+        }
+
+        if (link->lldp_rx) {
+                r = sd_lldp_rx_start(link->lldp_rx);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to start LLDP client: %m");
+        }
 
         return 0;
 }
 
-int link_ipv6ll_gained(Link *link, const struct in6_addr *address) {
+int link_ipv6ll_gained(Link *link) {
         int r;
 
         assert(link);
 
         log_link_info(link, "Gained IPv6LL");
 
-        link->ipv6ll_address = *address;
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return 0;
+
+        r = link_acquire_dynamic_ipv6_conf(link);
+        if (r < 0)
+                return r;
+
         link_check_ready(link);
-
-        if (IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED)) {
-                r = link_acquire_dynamic_ipv6_conf(link);
-                if (r < 0) {
-                        link_enter_failed(link);
-                        return r;
-                }
-        }
-
         return 0;
 }
 
@@ -855,24 +805,6 @@
         return 0;
 }
 
-static int link_new_carrier_maps(Link *link) {
-        int r;
-
-        r = link_new_bound_by_list(link);
-        if (r < 0)
-                return r;
-
-        r = link_handle_bound_by_list(link);
-        if (r < 0)
-                return r;
-
-        r = link_new_bound_to_list(link);
-        if (r < 0)
-                return r;
-
-        return link_handle_bound_to_list(link);
-}
-
 static void link_free_bound_to_list(Link *link) {
         bool updated = false;
         Link *bound_to;
@@ -909,13 +841,6 @@
                 link_dirty(link);
 }
 
-static void link_free_carrier_maps(Link *link) {
-        assert(link);
-
-        link_free_bound_to_list(link);
-        link_free_bound_by_list(link);
-}
-
 static int link_append_to_master(Link *link) {
         Link *master;
         int r;
@@ -957,12 +882,10 @@
 
         ORDERED_SET_FOREACH(req, link->manager->request_queue)
                 if (req->link == link)
-                        request_drop(req);
+                        request_detach(link->manager, req);
 }
 
 static Link *link_drop(Link *link) {
-        char **n;
-
         if (!link)
                 return NULL;
 
@@ -975,13 +898,16 @@
 
         link_drop_requests(link);
 
-        link_free_carrier_maps(link);
+        link_free_bound_to_list(link);
+        link_free_bound_by_list(link);
+
+        link_clear_sr_iov_ifindices(link);
 
         link_drop_from_master(link);
 
-        link_unref(set_remove(link->manager->links_requesting_uuid, link));
+        if (link->state_file)
+                (void) unlink(link->state_file);
 
-        (void) unlink(link->state_file);
         link_clean(link);
 
         STRV_FOREACH(n, link->alternative_names)
@@ -989,8 +915,7 @@
         hashmap_remove(link->manager->links_by_name, link->ifname);
 
         /* bonding master and its slaves have the same hardware address. */
-        if (hashmap_get(link->manager->links_by_hw_addr, &link->hw_addr) == link)
-                hashmap_remove(link->manager->links_by_hw_addr, &link->hw_addr);
+        hashmap_remove_value(link->manager->links_by_hw_addr, &link->hw_addr, link);
 
         /* The following must be called at last. */
         assert_se(hashmap_remove(link->manager->links_by_index, INT_TO_PTR(link->ifindex)) == link);
@@ -1003,6 +928,16 @@
         assert(link);
         assert(link->manager);
 
+        /* Drop foreign config, but ignore unmanaged, loopback, or critical interfaces. We do not want
+         * to remove loopback address or addresses used for root NFS. */
+
+        if (IN_SET(link->state, LINK_STATE_UNMANAGED, LINK_STATE_PENDING, LINK_STATE_INITIALIZED))
+                return 0;
+        if (FLAGS_SET(link->flags, IFF_LOOPBACK))
+                return 0;
+        if (link->network->keep_configuration == KEEP_CONFIGURATION_YES)
+                return 0;
+
         r = link_drop_foreign_routes(link);
 
         k = link_drop_foreign_nexthops(link);
@@ -1024,35 +959,44 @@
         return r;
 }
 
-static int link_drop_config(Link *link) {
+static int link_drop_managed_config(Link *link) {
         int k, r;
 
         assert(link);
         assert(link->manager);
 
-        r = link_drop_routes(link);
+        r = link_drop_managed_routes(link);
 
-        k = link_drop_nexthops(link);
+        k = link_drop_managed_nexthops(link);
         if (k < 0 && r >= 0)
                 r = k;
 
-        k = link_drop_addresses(link);
+        k = link_drop_managed_addresses(link);
         if (k < 0 && r >= 0)
                 r = k;
 
-        k = link_drop_neighbors(link);
+        k = link_drop_managed_neighbors(link);
         if (k < 0 && r >= 0)
                 r = k;
 
-        k = manager_drop_routing_policy_rules(link->manager, link);
+        k = link_drop_managed_routing_policy_rules(link);
         if (k < 0 && r >= 0)
                 r = k;
 
-        ndisc_flush(link);
-
         return r;
 }
 
+static void link_foreignize_config(Link *link) {
+        assert(link);
+        assert(link->manager);
+
+        link_foreignize_routes(link);
+        link_foreignize_nexthops(link);
+        link_foreignize_addresses(link);
+        link_foreignize_neighbors(link);
+        link_foreignize_routing_policy_rules(link);
+}
+
 static int link_configure(Link *link) {
         int r;
 
@@ -1062,7 +1006,11 @@
 
         link_set_state(link, LINK_STATE_CONFIGURING);
 
-        r = link_configure_traffic_control(link);
+        r = link_new_bound_to_list(link);
+        if (r < 0)
+                return r;
+
+        r = link_request_traffic_control(link);
         if (r < 0)
                 return r;
 
@@ -1075,7 +1023,7 @@
                 return link_request_to_activate(link);
         }
 
-        r = link_configure_sr_iov(link);
+        r = link_request_sr_iov_vfs(link);
         if (r < 0)
                 return r;
 
@@ -1087,6 +1035,10 @@
         if (r < 0)
                 return r;
 
+        r = link_request_to_set_ipoib(link);
+        if (r < 0)
+                return r;
+
         r = link_request_to_set_flags(link);
         if (r < 0)
                 return r;
@@ -1131,15 +1083,15 @@
         if (r < 0)
                 return r;
 
-        r = dhcp4_configure(link);
+        r = link_request_dhcp4_client(link);
         if (r < 0)
                 return r;
 
-        r = dhcp6_configure(link);
+        r = link_request_dhcp6_client(link);
         if (r < 0)
                 return r;
 
-        r = ndisc_configure(link);
+        r = link_request_ndisc(link);
         if (r < 0)
                 return r;
 
@@ -1147,7 +1099,7 @@
         if (r < 0)
                 return r;
 
-        r = radv_configure(link);
+        r = link_request_radv(link);
         if (r < 0)
                 return r;
 
@@ -1155,14 +1107,13 @@
         if (r < 0)
                 return r;
 
-        /* Drop foreign config, but ignore loopback or critical devices.
-         * We do not want to remove loopback address or addresses used for root NFS. */
-        if (!(link->flags & IFF_LOOPBACK) &&
-            link->network->keep_configuration != KEEP_CONFIGURATION_YES) {
-                r = link_drop_foreign_config(link);
-                if (r < 0)
-                        return r;
-        }
+        r = link_lldp_tx_configure(link);
+        if (r < 0)
+                return r;
+
+        r = link_drop_foreign_config(link);
+        if (r < 0)
+                return r;
 
         r = link_request_static_configs(link);
         if (r < 0)
@@ -1187,11 +1138,12 @@
 
                 r = net_match_config(
                                 &network->match,
-                                link->sd_device,
-                                &link->hw_addr.ether,
-                                &link->permanent_mac,
+                                link->dev,
+                                &link->hw_addr,
+                                &link->permanent_hw_addr,
                                 link->driver,
                                 link->iftype,
+                                link->kind,
                                 link->ifname,
                                 link->alternative_names,
                                 link->wlan_iftype,
@@ -1202,11 +1154,11 @@
                 if (r == 0)
                         continue;
 
-                if (network->match.ifname && link->sd_device) {
+                if (network->match.ifname && link->dev) {
                         uint8_t name_assign_type = NET_NAME_UNKNOWN;
                         const char *attr;
 
-                        if (sd_device_get_sysattr_value(link->sd_device, "name_assign_type", &attr) >= 0)
+                        if (sd_device_get_sysattr_value(link->dev, "name_assign_type", &attr) >= 0)
                                 (void) safe_atou8(attr, &name_assign_type);
 
                         warn = name_assign_type == NET_NAME_ENUM;
@@ -1227,24 +1179,39 @@
         return -ENOENT;
 }
 
-static int link_reconfigure_impl(Link *link, bool force) {
-        Network *network;
+int link_reconfigure_impl(Link *link, bool force) {
+        Network *network = NULL;
+        NetDev *netdev = NULL;
         int r;
 
         assert(link);
 
-        r = link_get_network(link, &network);
-        if (r == -ENOENT) {
-                link_set_state(link, LINK_STATE_UNMANAGED);
+        if (IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_LINGER))
                 return 0;
-        }
-        if (r < 0)
+
+        r = netdev_get(link->manager, link->ifname, &netdev);
+        if (r < 0 && r != -ENOENT)
                 return r;
 
+        r = link_get_network(link, &network);
+        if (r < 0 && r != -ENOENT)
+                return r;
+
+        if (link->state != LINK_STATE_UNMANAGED && !network)
+                /* If link is in initialized state, then link->network is also NULL. */
+                force = true;
+
         if (link->network == network && !force)
                 return 0;
 
-        log_link_info(link, "Re-configuring with %s", network->filename);
+        if (network) {
+                if (link->state == LINK_STATE_INITIALIZED)
+                        log_link_info(link, "Configuring with %s.", network->filename);
+                else
+                        log_link_info(link, "Reconfiguring with %s.", network->filename);
+        } else
+                log_link_full(link, link->state == LINK_STATE_INITIALIZED ? LOG_DEBUG : LOG_INFO,
+                              "Unmanaging interface.");
 
         /* Dropping old .network file */
         r = link_stop_engines(link, false);
@@ -1253,31 +1220,44 @@
 
         link_drop_requests(link);
 
-        r = link_drop_config(link);
-        if (r < 0)
-                return r;
-
-        if (!IN_SET(link->state, LINK_STATE_UNMANAGED, LINK_STATE_PENDING, LINK_STATE_INITIALIZED)) {
-                log_link_debug(link, "State is %s, dropping foreign config", link_state_to_string(link->state));
-                r = link_drop_foreign_config(link);
+        if (network && !force && network->keep_configuration != KEEP_CONFIGURATION_YES)
+                /* When a new/updated .network file is assigned, first make all configs (addresses,
+                 * routes, and so on) foreign, and then drop unnecessary configs later by
+                 * link_drop_foreign_config() in link_configure().
+                 * Note, when KeepConfiguration=yes, link_drop_foreign_config() does nothing. Hence,
+                 * here we need to drop the configs such as addresses, routes, and so on configured by
+                 * the previously assigned .network file. */
+                link_foreignize_config(link);
+        else {
+                /* Remove all managed configs. Note, foreign configs are removed in later by
+                 * link_configure() -> link_drop_foreign_config() if the link is managed by us. */
+                r = link_drop_managed_config(link);
                 if (r < 0)
                         return r;
         }
 
-        link_free_carrier_maps(link);
+        /* The bound_to map depends on .network file, hence it needs to be freed. But, do not free the
+         * bound_by map. Otherwise, if a link enters unmanaged state below, then its carrier state will
+         * not propagated to other interfaces anymore. Moreover, it is not necessary to recreate the
+         * map here, as it depends on .network files assigned to other links. */
+        link_free_bound_to_list(link);
+
         link_free_engines(link);
         link->network = network_unref(link->network);
-        link_unref(set_remove(link->manager->links_requesting_uuid, link));
+
+        netdev_unref(link->netdev);
+        link->netdev = netdev_ref(netdev);
+
+        if (!network) {
+                link_set_state(link, LINK_STATE_UNMANAGED);
+                return 0;
+        }
 
         /* Then, apply new .network file */
         link->network = network_ref(network);
         link_update_operstate(link, true);
         link_dirty(link);
 
-        r = link_new_carrier_maps(link);
-        if (r < 0)
-                return r;
-
         link_set_state(link, LINK_STATE_INITIALIZED);
         link->activated = false;
 
@@ -1291,28 +1271,34 @@
 static int link_reconfigure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, bool force) {
         int r;
 
+        assert(link);
+
         r = link_getlink_handler_internal(rtnl, m, link, "Failed to update link state");
         if (r <= 0)
                 return r;
 
         r = link_reconfigure_impl(link, force);
-        if (r < 0)
+        if (r < 0) {
                 link_enter_failed(link);
+                return 0;
+        }
 
-        return 0;
+        return r;
 }
 
 static int link_reconfigure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return link_reconfigure_handler_internal(rtnl, m, link, false);
+        return link_reconfigure_handler_internal(rtnl, m, link, /* force = */ false);
 }
 
 static int link_force_reconfigure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return link_reconfigure_handler_internal(rtnl, m, link, true);
+        return link_reconfigure_handler_internal(rtnl, m, link, /* force = */ true);
 }
 
 int link_reconfigure(Link *link, bool force) {
         int r;
 
+        assert(link);
+
         /* When link in pending or initialized state, then link_configure() will be called. To prevent
          * the function from being called multiple times simultaneously, refuse to reconfigure the
          * interface in these cases. */
@@ -1327,63 +1313,31 @@
 }
 
 static int link_initialized_and_synced(Link *link) {
-        Network *network;
         int r;
 
         assert(link);
-        assert(link->ifname);
         assert(link->manager);
 
-        /* We may get called either from the asynchronous netlink callback,
-         * or directly from link_check_initialized() if running in a container. */
-        if (!IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_INITIALIZED))
+        if (link->manager->test_mode) {
+                log_link_debug(link, "Running in test mode, refusing to enter initialized state.");
+                link_set_state(link, LINK_STATE_UNMANAGED);
                 return 0;
-
-        log_link_debug(link, "Link state is up-to-date");
-        link_set_state(link, LINK_STATE_INITIALIZED);
-
-        r = link_new_bound_by_list(link);
-        if (r < 0)
-                return r;
-
-        r = link_handle_bound_by_list(link);
-        if (r < 0)
-                return r;
-
-        if (!link->network) {
-                r = wifi_get_info(link);
-                if (r < 0)
-                        return r;
-
-                r = link_get_network(link, &network);
-                if (r == -ENOENT) {
-                        link_set_state(link, LINK_STATE_UNMANAGED);
-                        return 0;
-                }
-                if (r < 0)
-                        return r;
-
-                if (link->flags & IFF_LOOPBACK) {
-                        if (network->link_local != ADDRESS_FAMILY_NO)
-                                log_link_debug(link, "Ignoring link-local autoconfiguration for loopback link");
-
-                        if (network->dhcp != ADDRESS_FAMILY_NO)
-                                log_link_debug(link, "Ignoring DHCP clients for loopback link");
-
-                        if (network->dhcp_server)
-                                log_link_debug(link, "Ignoring DHCP server for loopback link");
-                }
-
-                link->network = network_ref(network);
-                link_update_operstate(link, false);
-                link_dirty(link);
         }
 
-        r = link_new_bound_to_list(link);
-        if (r < 0)
-                return r;
+        if (link->state == LINK_STATE_PENDING) {
+                log_link_debug(link, "Link state is up-to-date");
+                link_set_state(link, LINK_STATE_INITIALIZED);
 
-        return link_configure(link);
+                r = link_new_bound_by_list(link);
+                if (r < 0)
+                        return r;
+
+                r = link_handle_bound_by_list(link);
+                if (r < 0)
+                        return r;
+        }
+
+        return link_reconfigure_impl(link, /* force = */ false);
 }
 
 static int link_initialized_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
@@ -1401,23 +1355,35 @@
 }
 
 static int link_initialized(Link *link, sd_device *device) {
+        int r;
+
         assert(link);
         assert(device);
 
         /* Always replace with the new sd_device object. As the sysname (and possibly other properties
          * or sysattrs) may be outdated. */
-        sd_device_ref(device);
-        sd_device_unref(link->sd_device);
-        link->sd_device = device;
+        device_unref_and_replace(link->dev, device);
 
-        /* Do not ignore unamanaged state case here. If an interface is renamed after being once
-         * configured, and the corresponding .network file has Name= in [Match] section, then the
-         * interface may be already in unmanaged state. See #20657. */
-        if (!IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_UNMANAGED))
-                return 0;
+        if (link->dhcp_client) {
+                r = sd_dhcp_client_attach_device(link->dhcp_client, link->dev);
+                if (r < 0)
+                        log_link_warning_errno(link, r, "Failed to attach device to DHCPv4 client, ignoring: %m");
+        }
+
+        if (link->dhcp6_client) {
+                r = sd_dhcp6_client_attach_device(link->dhcp6_client, link->dev);
+                if (r < 0)
+                        log_link_warning_errno(link, r, "Failed to attach device to DHCPv6 client, ignoring: %m");
+        }
+
+        r = link_set_sr_iov_ifindices(link);
+        if (r < 0)
+                log_link_warning_errno(link, r, "Failed to manage SR-IOV PF and VF ports, ignoring: %m");
+
+        if (link->state != LINK_STATE_PENDING)
+                return link_reconfigure(link, /* force = */ false);
 
         log_link_debug(link, "udev initialized link");
-        link_set_state(link, LINK_STATE_INITIALIZED);
 
         /* udev has initialized the link, but we don't know if we have yet
          * processed the NEWLINK messages with the latest state. Do a GETLINK,
@@ -1433,8 +1399,7 @@
 
         assert(link);
 
-        if (path_is_read_only_fs("/sys") > 0)
-                /* no udev */
+        if (!udev_available())
                 return link_initialized_and_synced(link);
 
         /* udev should be around */
@@ -1464,48 +1429,39 @@
         return link_initialized(link, device);
 }
 
-int manager_udev_process_link(sd_device_monitor *monitor, sd_device *device, void *userdata) {
-        sd_device_action_t action;
-        Manager *m = userdata;
-        Link *link = NULL;
+int manager_udev_process_link(Manager *m, sd_device *device, sd_device_action_t action) {
         int r, ifindex;
+        Link *link;
 
         assert(m);
         assert(device);
 
-        r = sd_device_get_action(device, &action);
+        r = sd_device_get_ifindex(device, &ifindex);
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to get ifindex: %m");
+
+        r = link_get_by_index(m, ifindex, &link);
         if (r < 0) {
-                log_device_debug_errno(device, r, "Failed to get udev action, ignoring device: %m");
+                /* This error is not critical, as the corresponding rtnl message may be received later. */
+                log_device_debug_errno(device, r, "Failed to get link from ifindex %i, ignoring: %m", ifindex);
                 return 0;
         }
 
-        /* Ignore the "remove" uevent — let's remove a device only if rtnetlink says so. All other uevents
-         * are "positive" events in some form, i.e. inform us about a changed or new network interface, that
-         * still exists — and we are interested in that. */
-        if (action == SD_DEVICE_REMOVE)
-                return 0;
-
-        r = sd_device_get_ifindex(device, &ifindex);
-        if (r < 0) {
-                log_device_debug_errno(device, r, "Ignoring udev %s event for device without ifindex or with invalid ifindex: %m",
-                                       device_action_to_string(action));
+        /* Let's unref the sd-device object assigned to the corresponding Link object, but keep the Link
+         * object here. It will be removed only when rtnetlink says so. */
+        if (action == SD_DEVICE_REMOVE) {
+                link->dev = sd_device_unref(link->dev);
                 return 0;
         }
 
         r = device_is_renaming(device);
-        if (r < 0) {
-                log_device_debug_errno(device, r, "Failed to determine the device is renamed or not, ignoring '%s' uevent: %m",
-                                       device_action_to_string(action));
-                return 0;
-        }
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to determine if the device is renaming or not: %m");
         if (r > 0) {
-                log_device_debug(device, "Interface is under renaming, wait for the interface to be renamed.");
-                return 0;
-        }
-
-        r = link_get_by_index(m, ifindex, &link);
-        if (r < 0) {
-                log_device_debug_errno(device, r, "Failed to get link from ifindex %i, ignoring: %m", ifindex);
+                log_device_debug(device, "Device is renaming, waiting for the interface to be renamed.");
+                /* TODO:
+                 * What happens when a device is initialized, then soon renamed after that? When we detect
+                 * such, maybe we should cancel or postpone all queued requests for the interface. */
                 return 0;
         }
 
@@ -1517,10 +1473,48 @@
 }
 
 static int link_carrier_gained(Link *link) {
+        bool force_reconfigure;
         int r;
 
         assert(link);
 
+        r = event_source_disable(link->carrier_lost_timer);
+        if (r < 0)
+                log_link_warning_errno(link, r, "Failed to disable carrier lost timer, ignoring: %m");
+
+        /* If a wireless interface was connected to an access point, and the SSID is changed (that is,
+         * both previous_ssid and ssid are non-NULL), then the connected wireless network could be
+         * changed. So, always reconfigure the link. Which means e.g. the DHCP client will be
+         * restarted, and the correct network information will be gained.
+         *
+         * However, do not reconfigure the wireless interface forcibly if it was not connected to any
+         * access points previously (previous_ssid is NULL in this case). As, a .network file may be
+         * already assigned to the interface (in that case, the .network file does not have the SSID=
+         * setting in the [Match] section), and the interface is already being configured. Of course,
+         * there may exist another .network file with higher priority and a matching SSID= setting. But
+         * in that case, link_reconfigure_impl() can handle that without the force_reconfigure flag.
+         *
+         * For non-wireless interfaces, we have no way to detect the connected network change. So,
+         * setting force_reconfigure = false. Note, both ssid and previous_ssid are NULL in that case. */
+        force_reconfigure = link->previous_ssid && !streq_ptr(link->previous_ssid, link->ssid);
+        link->previous_ssid = mfree(link->previous_ssid);
+
+        /* AP and P2P-GO interfaces may have a new SSID - update the link properties in case a new .network
+         * profile wants to match on it with SSID= in its [Match] section.
+         */
+        if (IN_SET(link->wlan_iftype, NL80211_IFTYPE_AP, NL80211_IFTYPE_P2P_GO)) {
+                r = link_get_wlan_interface(link);
+                if (r < 0)
+                        return r;
+        }
+
+        /* At this stage, both wlan and link information should be up-to-date. Hence, it is not necessary to
+         * call RTM_GETLINK, NL80211_CMD_GET_INTERFACE, or NL80211_CMD_GET_STATION commands, and simply call
+         * link_reconfigure_impl(). Note, link_reconfigure_impl() returns 1 when the link is reconfigured. */
+        r = link_reconfigure_impl(link, force_reconfigure);
+        if (r != 0)
+                return r;
+
         r = link_handle_bound_by_list(link);
         if (r < 0)
                 return r;
@@ -1542,7 +1536,46 @@
         return 0;
 }
 
+static int link_carrier_lost_impl(Link *link) {
+        int r, ret = 0;
+
+        assert(link);
+
+        link->previous_ssid = mfree(link->previous_ssid);
+
+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 0;
+
+        if (!link->network)
+                return 0;
+
+        r = link_stop_engines(link, false);
+        if (r < 0)
+                ret = r;
+
+        r = link_drop_managed_config(link);
+        if (r < 0 && ret >= 0)
+                ret = r;
+
+        return ret;
+}
+
+static int link_carrier_lost_handler(sd_event_source *s, uint64_t usec, void *userdata) {
+        Link *link = ASSERT_PTR(userdata);
+        int r;
+
+        r = link_carrier_lost_impl(link);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "Failed to process carrier lost event: %m");
+                link_enter_failed(link);
+        }
+
+        return 0;
+}
+
 static int link_carrier_lost(Link *link) {
+        uint16_t dhcp_mtu;
+        usec_t usec;
         int r;
 
         assert(link);
@@ -1555,47 +1588,47 @@
                 /* let's shortcut things for CAN which doesn't need most of what's done below. */
                 return 0;
 
-        if (link->network && link->network->ignore_carrier_loss)
+        if (!link->network)
                 return 0;
 
-        r = link_stop_engines(link, false);
-        if (r < 0) {
-                link_enter_failed(link);
-                return r;
-        }
+        if (link->network->ignore_carrier_loss_set)
+                /* If IgnoreCarrierLoss= is explicitly specified, then use the specified value. */
+                usec = link->network->ignore_carrier_loss_usec;
 
-        r = link_drop_config(link);
-        if (r < 0)
-                return r;
+        else if (link->network->bond && link->wlan_iftype > 0)
+                /* Enslaving wlan interface to a bond disconnects from the connected AP, and causes its
+                 * carrier to be lost. See #19832. */
+                usec = 3 * USEC_PER_SEC;
 
-        if (!IN_SET(link->state, LINK_STATE_UNMANAGED, LINK_STATE_PENDING, LINK_STATE_INITIALIZED)) {
-                log_link_debug(link, "State is %s, dropping foreign config", link_state_to_string(link->state));
-                r = link_drop_foreign_config(link);
-                if (r < 0)
-                        return r;
-        }
+        else if (link->network->dhcp_use_mtu &&
+                 link->dhcp_lease &&
+                 sd_dhcp_lease_get_mtu(link->dhcp_lease, &dhcp_mtu) >= 0 &&
+                 dhcp_mtu != link->original_mtu)
+                /* Some drivers reset interfaces when changing MTU. Resetting interfaces by the static
+                 * MTU should not cause any issues, as MTU is changed only once. However, setting MTU
+                 * through DHCP lease causes an infinite loop of resetting the interface. See #18738. */
+                usec = 5 * USEC_PER_SEC;
 
-        return 0;
-}
+        else
+                /* Otherwise, use the currently set value. */
+                usec = link->network->ignore_carrier_loss_usec;
 
-int link_carrier_reset(Link *link) {
-        int r;
-
-        assert(link);
-
-        if (!link_has_carrier(link))
+        if (usec == USEC_INFINITY)
                 return 0;
 
-        r = link_carrier_lost(link);
-        if (r < 0)
-                return r;
+        if (usec == 0)
+                return link_carrier_lost_impl(link);
 
-        r = link_carrier_gained(link);
-        if (r < 0)
-                return r;
-
-        log_link_info(link, "Reset carrier");
-        return 0;
+        return event_reset_time_relative(link->manager->event,
+                                         &link->carrier_lost_timer,
+                                         CLOCK_BOOTTIME,
+                                         usec,
+                                         0,
+                                         link_carrier_lost_handler,
+                                         link,
+                                         0,
+                                         "link-carrier-loss",
+                                         true);
 }
 
 static int link_admin_state_up(Link *link) {
@@ -1610,7 +1643,7 @@
                 return 0;
 
         if (link->activated && link->network->activation_policy == ACTIVATION_POLICY_ALWAYS_DOWN) {
-                log_link_info(link, "ActivationPolicy is \"always-off\", forcing link down.");
+                log_link_info(link, "Activation policy is \"always-down\", forcing link down.");
                 return link_request_to_bring_up_or_down(link, /* up = */ false);
         }
 
@@ -1630,41 +1663,20 @@
                 return 0;
 
         if (link->activated && link->network->activation_policy == ACTIVATION_POLICY_ALWAYS_UP) {
-                log_link_info(link, "ActivationPolicy is \"always-on\", forcing link up.");
+                log_link_info(link, "Activation policy is \"always-up\", forcing link up.");
                 return link_request_to_bring_up_or_down(link, /* up = */ true);
         }
 
         return 0;
 }
 
-bool link_has_carrier(Link *link) {
-        /* see Documentation/networking/operstates.txt in the kernel sources */
-
-        if (link->kernel_operstate == IF_OPER_UP)
-                return true;
-
-        if (link->kernel_operstate == IF_OPER_UNKNOWN)
-                /* operstate may not be implemented, so fall back to flags */
-                if (FLAGS_SET(link->flags, IFF_LOWER_UP | IFF_RUNNING) &&
-                    !FLAGS_SET(link->flags, IFF_DORMANT))
-                        return true;
-
-        return false;
-}
-
 static bool link_is_enslaved(Link *link) {
         if (link->flags & IFF_SLAVE)
-                /* Even if the link is not managed by networkd, honor IFF_SLAVE flag. */
                 return true;
 
-        if (!link->network)
-                return false;
-
-        if (link->master_ifindex > 0 && link->network->bridge)
+        if (link->master_ifindex > 0)
                 return true;
 
-        /* TODO: add conditions for other netdevs. */
-
         return false;
 }
 
@@ -1727,18 +1739,6 @@
                         ipv6_scope = MIN(ipv6_scope, address->scope);
         }
 
-        /* for operstate we also take foreign addresses into account */
-        SET_FOREACH(address, link->addresses_foreign) {
-                if (!address_is_ready(address))
-                        continue;
-
-                if (address->family == AF_INET)
-                        ipv4_scope = MIN(ipv4_scope, address->scope);
-
-                if (address->family == AF_INET6)
-                        ipv6_scope = MIN(ipv6_scope, address->scope);
-        }
-
         ipv4_address_state = address_state_from_scope(ipv4_scope);
         ipv6_address_state = address_state_from_scope(ipv6_scope);
         address_state = address_state_from_scope(MIN(ipv4_scope, ipv6_scope));
@@ -1853,7 +1853,7 @@
          : "")
 
 static int link_update_flags(Link *link, sd_netlink_message *message) {
-        bool link_was_lower_up, link_was_admin_up, had_carrier;
+        bool link_was_admin_up, had_carrier;
         uint8_t operstate;
         unsigned flags;
         int r;
@@ -1915,7 +1915,6 @@
                         log_link_debug(link, "Unknown link flags lost, ignoring: %#.5x", unknown_flags_removed);
         }
 
-        link_was_lower_up = link->flags & IFF_LOWER_UP;
         link_was_admin_up = link->flags & IFF_UP;
         had_carrier = link_has_carrier(link);
 
@@ -1924,19 +1923,6 @@
 
         link_update_operstate(link, true);
 
-        if (!link_was_lower_up && (link->flags & IFF_LOWER_UP)) {
-                r = wifi_get_info(link);
-                if (r < 0)
-                        return r;
-                if (r > 0) {
-                        /* All link information is up-to-date. So, it is not necessary to call
-                         * RTM_GETLINK netlink method again. */
-                        r = link_reconfigure_impl(link, /* force = */ false);
-                        if (r < 0)
-                                return r;
-                }
-        }
-
         if (!link_was_admin_up && (link->flags & IFF_UP)) {
                 log_link_info(link, "Link UP");
 
@@ -1951,10 +1937,6 @@
                         return r;
         }
 
-        r = link_update_lldp(link);
-        if (r < 0)
-                return r;
-
         if (!had_carrier && link_has_carrier(link)) {
                 log_link_info(link, "Gained carrier");
 
@@ -1984,15 +1966,19 @@
         if (r < 0)
                 return log_link_debug_errno(link, r, "rtnl: failed to read master ifindex: %m");
 
+        if (master_ifindex == link->ifindex)
+                master_ifindex = 0;
+
         if (master_ifindex == link->master_ifindex)
                 return 0;
 
         if (link->master_ifindex == 0)
-                log_link_debug(link, "Joined to master interface: %i", master_ifindex);
+                log_link_debug(link, "Attached to master interface: %i", master_ifindex);
         else if (master_ifindex == 0)
-                log_link_debug(link, "Leaved from master interface: %i", link->master_ifindex);
+                log_link_debug(link, "Detached from master interface: %i", link->master_ifindex);
         else
-                log_link_debug(link, "Master interface is changed: %i → %i", link->master_ifindex, master_ifindex);
+                log_link_debug(link, "Master interface changed: %i %s %i", link->master_ifindex,
+                               special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), master_ifindex);
 
         link_drop_from_master(link);
 
@@ -2005,6 +1991,111 @@
         return 0;
 }
 
+static int link_update_driver(Link *link, sd_netlink_message *message) {
+        int r;
+
+        assert(link);
+        assert(link->manager);
+        assert(message);
+
+        /* Driver is already read. Assuming the driver is never changed. */
+        if (link->ethtool_driver_read)
+                return 0;
+
+        /* When udevd is running, read the driver after the interface is initialized by udevd.
+         * Otherwise, ethtool may not work correctly. See issue #22538.
+         * When udevd is not running, read the value when the interface is detected. */
+        if (udev_available() && !link->dev)
+                return 0;
+
+        link->ethtool_driver_read = true;
+
+        r = ethtool_get_driver(&link->manager->ethtool_fd, link->ifname, &link->driver);
+        if (r < 0) {
+                log_link_debug_errno(link, r, "Failed to get driver, continuing without: %m");
+                return 0;
+        }
+
+        log_link_debug(link, "Found driver: %s", strna(link->driver));
+
+        if (streq_ptr(link->driver, "dsa")) {
+                uint32_t dsa_master_ifindex = 0;
+
+                r = sd_netlink_message_read_u32(message, IFLA_LINK, &dsa_master_ifindex);
+                if (r < 0 && r != -ENODATA)
+                        return log_link_debug_errno(link, r, "rtnl: failed to read ifindex of the DSA master interface: %m");
+
+                if (dsa_master_ifindex > INT_MAX) {
+                        log_link_debug(link, "rtnl: received too large DSA master ifindex (%"PRIu32" > INT_MAX), ignoring.",
+                                       dsa_master_ifindex);
+                        dsa_master_ifindex = 0;
+                }
+
+                link->dsa_master_ifindex = (int) dsa_master_ifindex;
+        }
+
+        return 1; /* needs reconfigure */
+}
+
+static int link_update_permanent_hardware_address_from_ethtool(Link *link, sd_netlink_message *message) {
+        int r;
+
+        assert(link);
+        assert(link->manager);
+        assert(message);
+
+        if (link->ethtool_permanent_hw_addr_read)
+                return 0;
+
+        /* When udevd is running, read the permanent hardware address after the interface is
+         * initialized by udevd. Otherwise, ethtool may not work correctly. See issue #22538.
+         * When udevd is not running, read the value when the interface is detected. */
+        if (udev_available() && !link->dev)
+                return 0;
+
+        /* If the interface does not have a hardware address, then it will not have a permanent address either. */
+        r = netlink_message_read_hw_addr(message, IFLA_ADDRESS, NULL);
+        if (r == -ENODATA)
+                return 0;
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to read IFLA_ADDRESS attribute: %m");
+
+        link->ethtool_permanent_hw_addr_read = true;
+
+        r = ethtool_get_permanent_hw_addr(&link->manager->ethtool_fd, link->ifname, &link->permanent_hw_addr);
+        if (r < 0)
+                log_link_debug_errno(link, r, "Permanent hardware address not found, continuing without: %m");
+
+        return 0;
+}
+
+static int link_update_permanent_hardware_address(Link *link, sd_netlink_message *message) {
+        int r;
+
+        assert(link);
+        assert(link->manager);
+        assert(message);
+
+        if (link->permanent_hw_addr.length > 0)
+                return 0;
+
+        r = netlink_message_read_hw_addr(message, IFLA_PERM_ADDRESS, &link->permanent_hw_addr);
+        if (r < 0) {
+                if (r != -ENODATA)
+                        return log_link_debug_errno(link, r, "Failed to read IFLA_PERM_ADDRESS attribute: %m");
+
+                /* Fallback to ethtool for older kernels. */
+                r = link_update_permanent_hardware_address_from_ethtool(link, message);
+                if (r < 0)
+                        return r;
+        }
+
+        if (link->permanent_hw_addr.length > 0)
+                log_link_debug(link, "Saved permanent hardware address: %s", HW_ADDR_TO_STR(&link->permanent_hw_addr));
+
+        return 1; /* needs reconfigure */
+}
+
 static int link_update_hardware_address(Link *link, sd_netlink_message *message) {
         struct hw_addr_data addr;
         int r;
@@ -2025,14 +2116,15 @@
         if (hw_addr_equal(&link->hw_addr, &addr))
                 return 0;
 
-        if (hw_addr_is_null(&link->hw_addr))
+        if (link->hw_addr.length == 0)
                 log_link_debug(link, "Saved hardware address: %s", HW_ADDR_TO_STR(&addr));
         else {
-                log_link_debug(link, "Hardware address is changed: %s → %s",
-                               HW_ADDR_TO_STR(&link->hw_addr), HW_ADDR_TO_STR(&addr));
+                log_link_debug(link, "Hardware address is changed: %s %s %s",
+                               HW_ADDR_TO_STR(&link->hw_addr),
+                               special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                               HW_ADDR_TO_STR(&addr));
 
-                if (hashmap_get(link->manager->links_by_hw_addr, &link->hw_addr) == link)
-                        hashmap_remove(link->manager->links_by_hw_addr, &link->hw_addr);
+                hashmap_remove_value(link->manager->links_by_hw_addr, &link->hw_addr, link);
         }
 
         link->hw_addr = addr;
@@ -2046,7 +2138,7 @@
                         log_link_debug_errno(link, r, "Failed to manage link by its new hardware address, ignoring: %m");
         }
 
-        r = ipv4ll_update_mac(link);
+        r = ipv4acd_update_mac(link);
         if (r < 0)
                 return log_link_debug_errno(link, r, "Could not update MAC address in IPv4 ACD client: %m");
 
@@ -2066,19 +2158,25 @@
         if (r < 0)
                 return log_link_debug_errno(link, r, "Could not update MAC address for Router Advertisement: %m");
 
-        if (link->ndisc) {
+        if (link->ndisc && link->hw_addr.length == ETH_ALEN) {
                 r = sd_ndisc_set_mac(link->ndisc, &link->hw_addr.ether);
                 if (r < 0)
                         return log_link_debug_errno(link, r, "Could not update MAC for NDisc: %m");
         }
 
-        if (link->lldp) {
-                r = sd_lldp_set_filter_address(link->lldp, &link->hw_addr.ether);
+        if (link->lldp_rx) {
+                r = sd_lldp_rx_set_filter_address(link->lldp_rx, &link->hw_addr.ether);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not update MAC address for LLDP: %m");
+                        return log_link_debug_errno(link, r, "Could not update MAC address for LLDP Rx: %m");
         }
 
-        return 0;
+        if (link->lldp_tx) {
+                r = sd_lldp_tx_set_hwaddr(link->lldp_tx, &link->hw_addr.ether);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Could not update MAC address for LLDP Tx: %m");
+        }
+
+        return 1; /* needs reconfigure */
 }
 
 static int link_update_mtu(Link *link, sd_netlink_message *message) {
@@ -2120,8 +2218,9 @@
                 return 0;
 
         if (link->mtu != 0)
-                log_link_debug(link, "MTU is changed: %"PRIu32" → %"PRIu32" (min: %"PRIu32", max: %"PRIu32")",
-                               link->mtu, mtu, link->min_mtu, link->max_mtu);
+                log_link_debug(link, "MTU is changed: %"PRIu32" %s %"PRIu32" (min: %"PRIu32", max: %"PRIu32")",
+                               link->mtu, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), mtu,
+                               link->min_mtu, link->max_mtu);
 
         link->mtu = mtu;
 
@@ -2142,16 +2241,22 @@
 
 static int link_update_alternative_names(Link *link, sd_netlink_message *message) {
         _cleanup_strv_free_ char **altnames = NULL;
-        char **n;
         int r;
 
         assert(link);
         assert(message);
 
         r = sd_netlink_message_read_strv(message, IFLA_PROP_LIST, IFLA_ALT_IFNAME, &altnames);
-        if (r < 0 && r != -ENODATA)
+        if (r == -ENODATA)
+                /* The message does not have IFLA_PROP_LIST container attribute. It does not mean the
+                 * interface has no alternative name. */
+                return 0;
+        if (r < 0)
                 return log_link_debug_errno(link, r, "rtnl: failed to read alternative names: %m");
 
+        if (strv_equal(altnames, link->alternative_names))
+                return 0;
+
         STRV_FOREACH(n, link->alternative_names)
                 hashmap_remove(link->manager->links_by_name, *n);
 
@@ -2163,11 +2268,11 @@
                         return log_link_debug_errno(link, r, "Failed to manage link by its new alternative names: %m");
         }
 
-        return 0;
+        return 1; /* needs reconfigure */
 }
 
 static int link_update_name(Link *link, sd_netlink_message *message) {
-        char ifname_from_index[IF_NAMESIZE + 1];
+        char ifname_from_index[IF_NAMESIZE];
         const char *ifname;
         int r;
 
@@ -2184,8 +2289,9 @@
         if (streq(ifname, link->ifname))
                 return 0;
 
-        if (!format_ifname(link->ifindex, ifname_from_index))
-                return log_link_debug_errno(link, SYNTHETIC_ERRNO(ENXIO), "Could not get interface name for index %i.", link->ifindex);
+        r = format_ifname(link->ifindex, ifname_from_index);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Could not get interface name for index %i.", link->ifindex);
 
         if (!streq(ifname, ifname_from_index)) {
                 log_link_debug(link, "New interface name '%s' received from the kernel does not correspond "
@@ -2206,10 +2312,63 @@
         if (r < 0)
                 return log_link_debug_errno(link, r, "Failed to manage link by its new name: %m");
 
-        return 0;
+        if (link->dhcp_client) {
+                r = sd_dhcp_client_set_ifname(link->dhcp_client, link->ifname);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to update interface name in DHCP client: %m");
+        }
+
+        if (link->dhcp6_client) {
+                r = sd_dhcp6_client_set_ifname(link->dhcp6_client, link->ifname);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to update interface name in DHCP6 client: %m");
+        }
+
+        if (link->ndisc) {
+                r = sd_ndisc_set_ifname(link->ndisc, link->ifname);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to update interface name in NDisc: %m");
+        }
+
+        if (link->dhcp_server) {
+                r = sd_dhcp_server_set_ifname(link->dhcp_server, link->ifname);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to update interface name in DHCP server: %m");
+        }
+
+        if (link->radv) {
+                r = sd_radv_set_ifname(link->radv, link->ifname);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to update interface name in Router Advertisement: %m");
+        }
+
+        if (link->lldp_rx) {
+                r = sd_lldp_rx_set_ifname(link->lldp_rx, link->ifname);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to update interface name in LLDP Rx: %m");
+        }
+
+        if (link->lldp_tx) {
+                r = sd_lldp_tx_set_ifname(link->lldp_tx, link->ifname);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to update interface name in LLDP Tx: %m");
+        }
+
+        if (link->ipv4ll) {
+                r = sd_ipv4ll_set_ifname(link->ipv4ll, link->ifname);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to update interface name in IPv4LL client: %m");
+        }
+
+        r = ipv4acd_set_ifname(link);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to update interface name in IPv4ACD client: %m");
+
+        return 1; /* needs reconfigure */
 }
 
 static int link_update(Link *link, sd_netlink_message *message) {
+        bool needs_reconfigure = false;
         int r;
 
         assert(link);
@@ -2218,24 +2377,45 @@
         r = link_update_name(link, message);
         if (r < 0)
                 return r;
+        needs_reconfigure = needs_reconfigure || r > 0;
 
         r = link_update_alternative_names(link, message);
         if (r < 0)
                 return r;
+        needs_reconfigure = needs_reconfigure || r > 0;
 
         r = link_update_mtu(link, message);
         if (r < 0)
                 return r;
 
+        r = link_update_driver(link, message);
+        if (r < 0)
+                return r;
+        needs_reconfigure = needs_reconfigure || r > 0;
+
+        r = link_update_permanent_hardware_address(link, message);
+        if (r < 0)
+                return r;
+        needs_reconfigure = needs_reconfigure || r > 0;
+
         r = link_update_hardware_address(link, message);
         if (r < 0)
                 return r;
+        needs_reconfigure = needs_reconfigure || r > 0;
 
         r = link_update_master(link, message);
         if (r < 0)
                 return r;
 
-        return link_update_flags(link, message);
+        r = link_update_ipv6ll_addrgen_mode(link, message);
+        if (r < 0)
+                return r;
+
+        r = link_update_flags(link, message);
+        if (r < 0)
+                return r;
+
+        return needs_reconfigure;
 }
 
 static Link *link_drop_or_unref(Link *link) {
@@ -2283,14 +2463,17 @@
                         return log_debug_errno(r, "rtnl: failed to exit IFLA_LINKINFO container: %m");
         }
 
-        if (asprintf(&state_file, "/run/systemd/netif/links/%d", ifindex) < 0)
-                return log_oom_debug();
+        if (!manager->test_mode) {
+                /* Do not update state files when running in test mode. */
+                if (asprintf(&state_file, "/run/systemd/netif/links/%d", ifindex) < 0)
+                        return log_oom_debug();
 
-        if (asprintf(&lease_file, "/run/systemd/netif/leases/%d", ifindex) < 0)
-                return log_oom_debug();
+                if (asprintf(&lease_file, "/run/systemd/netif/leases/%d", ifindex) < 0)
+                        return log_oom_debug();
 
-        if (asprintf(&lldp_file, "/run/systemd/netif/lldp/%d", ifindex) < 0)
-                return log_oom_debug();
+                if (asprintf(&lldp_file, "/run/systemd/netif/lldp/%d", ifindex) < 0)
+                        return log_oom_debug();
+        }
 
         link = new(Link, 1);
         if (!link)
@@ -2305,6 +2488,8 @@
                 .ifname = TAKE_PTR(ifname),
                 .kind = TAKE_PTR(kind),
 
+                .ipv6ll_address_gen_mode = _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_INVALID,
+
                 .state_file = TAKE_PTR(state_file),
                 .lease_file = TAKE_PTR(lease_file),
                 .lldp_file = TAKE_PTR(lldp_file),
@@ -2327,15 +2512,18 @@
         if (r < 0)
                 return log_link_debug_errno(link, r, "Failed to manage link by its interface name: %m");
 
-        r = ethtool_get_permanent_macaddr(&manager->ethtool_fd, link->ifname, &link->permanent_mac);
-        if (r < 0)
-                log_link_debug_errno(link, r, "Permanent MAC address not found for new device, continuing without: %m");
+        log_link_debug(link, "Saved new link: ifindex=%i, iftype=%s(%u), kind=%s",
+                       link->ifindex, strna(arphrd_to_name(link->iftype)), link->iftype, strna(link->kind));
 
-        r = ethtool_get_driver(&manager->ethtool_fd, link->ifname, &link->driver);
-        if (r < 0)
-                log_link_debug_errno(link, r, "Failed to get driver, continuing without: %m");
+        /* If contained in this set, the link is wireless and the corresponding NL80211_CMD_NEW_INTERFACE
+         * message arrived too early. Request the wireless link information again.
+         */
+        if (set_remove(manager->new_wlan_ifindices, INT_TO_PTR(link->ifindex))) {
+                r = link_get_wlan_interface(link);
+                if (r < 0)
+                        log_link_warning_errno(link, r, "Failed to get wireless interface, ignoring: %m");
+        }
 
-        log_link_debug(link, "Link %d added", link->ifindex);
         *ret = TAKE_PTR(link);
         return 0;
 }
@@ -2392,7 +2580,7 @@
                         /* netdev exists, so make sure the ifindex matches */
                         r = netdev_set_ifindex(netdev, message);
                         if (r < 0) {
-                                log_warning_errno(r, "Could not process new link message for netdev, ignoring: %m");
+                                log_netdev_warning_errno(netdev, r, "Could not process new link message for netdev, ignoring: %m");
                                 return 0;
                         }
                 }
@@ -2407,36 +2595,42 @@
 
                         r = link_update(link, message);
                         if (r < 0) {
-                                log_warning_errno(r, "Could not process link message: %m");
+                                log_link_warning_errno(link, r, "Could not process link message: %m");
                                 link_enter_failed(link);
                                 return 0;
                         }
 
                         r = link_check_initialized(link);
                         if (r < 0) {
-                                log_warning_errno(r, "Failed to check link is initialized: %m");
+                                log_link_warning_errno(link, r, "Failed to check link is initialized: %m");
                                 link_enter_failed(link);
                                 return 0;
                         }
                 } else {
                         r = link_update(link, message);
                         if (r < 0) {
-                                log_warning_errno(r, "Could not process link message: %m");
+                                log_link_warning_errno(link, r, "Could not process link message: %m");
                                 link_enter_failed(link);
                                 return 0;
                         }
+                        if (r > 0) {
+                                r = link_reconfigure_impl(link, /* force = */ false);
+                                if (r < 0) {
+                                        log_link_warning_errno(link, r, "Failed to reconfigure interface: %m");
+                                        link_enter_failed(link);
+                                        return 0;
+                                }
+                        }
                 }
-
                 break;
 
         case RTM_DELLINK:
                 link_drop(link);
                 netdev_drop(netdev);
-
                 break;
 
         default:
-                assert_not_reached("Received link message with invalid RTNL message type.");
+                assert_not_reached();
         }
 
         return 1;
@@ -2502,13 +2696,60 @@
 }
 
 static const char* const link_state_table[_LINK_STATE_MAX] = {
-        [LINK_STATE_PENDING] = "pending",
+        [LINK_STATE_PENDING]     = "pending",
         [LINK_STATE_INITIALIZED] = "initialized",
         [LINK_STATE_CONFIGURING] = "configuring",
-        [LINK_STATE_CONFIGURED] = "configured",
-        [LINK_STATE_UNMANAGED] = "unmanaged",
-        [LINK_STATE_FAILED] = "failed",
-        [LINK_STATE_LINGER] = "linger",
+        [LINK_STATE_CONFIGURED]  = "configured",
+        [LINK_STATE_UNMANAGED]   = "unmanaged",
+        [LINK_STATE_FAILED]      = "failed",
+        [LINK_STATE_LINGER]      = "linger",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(link_state, LinkState);
+
+int link_flags_to_string_alloc(uint32_t flags, char **ret) {
+        _cleanup_free_ char *str = NULL;
+        static const char* map[] = {
+                [LOG2U(IFF_UP)]          = "up",             /* interface is up. */
+                [LOG2U(IFF_BROADCAST)]   = "broadcast",      /* broadcast address valid. */
+                [LOG2U(IFF_DEBUG)]       = "debug",          /* turn on debugging. */
+                [LOG2U(IFF_LOOPBACK)]    = "loopback",       /* interface is a loopback net. */
+                [LOG2U(IFF_POINTOPOINT)] = "point-to-point", /* interface has p-p link. */
+                [LOG2U(IFF_NOTRAILERS)]  = "no-trailers",    /* avoid use of trailers. */
+                [LOG2U(IFF_RUNNING)]     = "running",        /* interface RFC2863 OPER_UP. */
+                [LOG2U(IFF_NOARP)]       = "no-arp",         /* no ARP protocol. */
+                [LOG2U(IFF_PROMISC)]     = "promiscuous",    /* receive all packets. */
+                [LOG2U(IFF_ALLMULTI)]    = "all-multicast",  /* receive all multicast packets. */
+                [LOG2U(IFF_MASTER)]      = "master",         /* master of a load balancer. */
+                [LOG2U(IFF_SLAVE)]       = "slave",          /* slave of a load balancer. */
+                [LOG2U(IFF_MULTICAST)]   = "multicast",      /* supports multicast. */
+                [LOG2U(IFF_PORTSEL)]     = "portsel",        /* can set media type. */
+                [LOG2U(IFF_AUTOMEDIA)]   = "auto-media",     /* auto media select active. */
+                [LOG2U(IFF_DYNAMIC)]     = "dynamic",        /* dialup device with changing addresses. */
+                [LOG2U(IFF_LOWER_UP)]    = "lower-up",       /* driver signals L1 up. */
+                [LOG2U(IFF_DORMANT)]     = "dormant",        /* driver signals dormant. */
+                [LOG2U(IFF_ECHO)]        = "echo",           /* echo sent packets. */
+        };
+
+        assert(ret);
+
+        for (size_t i = 0; i < ELEMENTSOF(map); i++)
+                if (FLAGS_SET(flags, 1 << i) && map[i])
+                        if (!strextend_with_separator(&str, ",", map[i]))
+                                return -ENOMEM;
+
+        *ret = TAKE_PTR(str);
+        return 0;
+}
+
+static const char * const kernel_operstate_table[] = {
+        [IF_OPER_UNKNOWN]        = "unknown",
+        [IF_OPER_NOTPRESENT]     = "not-present",
+        [IF_OPER_DOWN]           = "down",
+        [IF_OPER_LOWERLAYERDOWN] = "lower-layer-down",
+        [IF_OPER_TESTING]        = "testing",
+        [IF_OPER_DORMANT]        = "dormant",
+        [IF_OPER_UP]             = "up",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(kernel_operstate, int);
diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
index 4077cca..0d601ab 100644
--- a/src/network/networkd-link.h
+++ b/src/network/networkd-link.h
@@ -11,14 +11,17 @@
 #include "sd-dhcp6-client.h"
 #include "sd-ipv4acd.h"
 #include "sd-ipv4ll.h"
-#include "sd-lldp.h"
+#include "sd-lldp-rx.h"
+#include "sd-lldp-tx.h"
 #include "sd-ndisc.h"
 #include "sd-radv.h"
 #include "sd-netlink.h"
 
 #include "ether-addr-util.h"
 #include "log-link.h"
+#include "netif-util.h"
 #include "network-util.h"
+#include "networkd-ipv6ll.h"
 #include "networkd-util.h"
 #include "ordered-set.h"
 #include "resolve-util.h"
@@ -38,7 +41,7 @@
 
 typedef struct Manager Manager;
 typedef struct Network Network;
-typedef struct Address Address;
+typedef struct NetDev NetDev;
 typedef struct DUID DUID;
 
 typedef struct Link {
@@ -48,6 +51,10 @@
 
         int ifindex;
         int master_ifindex;
+        int dsa_master_ifindex;
+        int sr_iov_phys_port_ifindex;
+        Set *sr_iov_virt_port_ifindices;
+
         char *ifname;
         char **alternative_names;
         char *kind;
@@ -55,24 +62,36 @@
         char *state_file;
         struct hw_addr_data hw_addr;
         struct hw_addr_data bcast_addr;
-        struct ether_addr permanent_mac;
+        struct hw_addr_data permanent_hw_addr;
+        struct hw_addr_data requested_hw_addr;
         struct in6_addr ipv6ll_address;
         uint32_t mtu;
         uint32_t min_mtu;
         uint32_t max_mtu;
         uint32_t original_mtu;
-        sd_device *sd_device;
+        sd_device *dev;
         char *driver;
 
+        /* to prevent multiple ethtool calls */
+        bool ethtool_driver_read;
+        bool ethtool_permanent_hw_addr_read;
+
+        /* link-local addressing */
+        IPv6LinkLocalAddressGenMode ipv6ll_address_gen_mode;
+
         /* wlan */
         enum nl80211_iftype wlan_iftype;
         char *ssid;
+        char *previous_ssid;
         struct ether_addr bssid;
 
         unsigned flags;
         uint8_t kernel_operstate;
 
+        sd_event_source *carrier_lost_timer;
+
         Network *network;
+        NetDev *netdev;
 
         LinkState state;
         LinkOperationalState operstate;
@@ -91,38 +110,25 @@
         unsigned static_nexthop_messages;
         unsigned static_route_messages;
         unsigned static_routing_policy_rule_messages;
-        unsigned address_remove_messages;
-        unsigned neighbor_remove_messages;
-        unsigned nexthop_remove_messages;
-        unsigned route_remove_messages;
         unsigned tc_messages;
         unsigned sr_iov_messages;
         unsigned set_link_messages;
         unsigned set_flags_messages;
         unsigned create_stacked_netdev_messages;
-        unsigned create_stacked_netdev_after_configured_messages;
 
         Set *addresses;
-        Set *addresses_foreign;
-        Set *addresses_ipv4acd;
-        Set *pool_addresses;
-        Set *static_addresses;
         Set *neighbors;
-        Set *neighbors_foreign;
         Set *routes;
-        Set *routes_foreign;
         Set *nexthops;
-        Set *nexthops_foreign;
+        Set *qdiscs;
+        Set *tclasses;
 
         sd_dhcp_client *dhcp_client;
         sd_dhcp_lease *dhcp_lease;
-        Address *dhcp_address, *dhcp_address_old;
-        Set *dhcp_routes, *dhcp_routes_old;
         char *lease_file;
         unsigned dhcp4_messages;
-        bool dhcp4_route_failed:1;
-        bool dhcp4_route_retrying:1;
         bool dhcp4_configured:1;
+        char *dhcp4_6rd_tunnel_name;
 
         sd_ipv4ll *ipv4ll;
         bool ipv4ll_address_configured:1;
@@ -141,46 +147,33 @@
         bool activated:1;
         bool master_set:1;
         bool stacked_netdevs_created:1;
-        bool stacked_netdevs_after_configured_created:1;
 
         sd_dhcp_server *dhcp_server;
 
         sd_ndisc *ndisc;
+        sd_event_source *ndisc_expire;
         Set *ndisc_rdnss;
         Set *ndisc_dnssl;
-        Set *ndisc_addresses;
-        Set *ndisc_routes;
-        unsigned ndisc_addresses_messages;
-        unsigned ndisc_routes_messages;
-        bool ndisc_addresses_configured:1;
-        bool ndisc_routes_configured:1;
+        unsigned ndisc_messages;
+        bool ndisc_configured:1;
 
         sd_radv *radv;
 
         sd_dhcp6_client *dhcp6_client;
         sd_dhcp6_lease *dhcp6_lease;
-        Set *dhcp6_addresses, *dhcp6_addresses_old;
-        Set *dhcp6_routes, *dhcp6_routes_old;
-        Set *dhcp6_pd_prefixes;
-        Set *dhcp6_pd_addresses, *dhcp6_pd_addresses_old;
-        Set *dhcp6_pd_routes, *dhcp6_pd_routes_old;
-        unsigned dhcp6_address_messages;
-        unsigned dhcp6_route_messages;
-        unsigned dhcp6_pd_address_messages;
-        unsigned dhcp6_pd_route_messages;
-        bool dhcp6_address_configured:1;
-        bool dhcp6_route_configured:1;
-        bool dhcp6_pd_address_configured:1;
-        bool dhcp6_pd_route_configured:1;
-        bool dhcp6_pd_prefixes_assigned:1;
+        unsigned dhcp6_messages;
+        bool dhcp6_configured;
+
+        Set *dhcp_pd_prefixes;
+        unsigned dhcp_pd_messages;
+        bool dhcp_pd_configured;
 
         /* This is about LLDP reception */
-        sd_lldp *lldp;
+        sd_lldp_rx *lldp_rx;
         char *lldp_file;
 
         /* This is about LLDP transmission */
-        unsigned lldp_tx_fast; /* The LLDP txFast counter (See 802.1ab-2009, section 9.2.5.18) */
-        sd_event_source *lldp_emit_event_source;
+        sd_lldp_tx *lldp_tx;
 
         Hashmap *bound_by_links;
         Hashmap *bound_to_links;
@@ -232,21 +225,24 @@
 
 void link_update_operstate(Link *link, bool also_update_bond_master);
 
-int link_carrier_reset(Link *link);
-bool link_has_carrier(Link *link);
+static inline bool link_has_carrier(Link *link) {
+        assert(link);
+        return netif_has_carrier(link->kernel_operstate, link->flags);
+}
 
 bool link_ipv6_enabled(Link *link);
-bool link_ipv6ll_enabled(Link *link);
-int link_ipv6ll_gained(Link *link, const struct in6_addr *address);
-
-bool link_ipv4ll_enabled(Link *link);
+int link_ipv6ll_gained(Link *link);
 
 int link_stop_engines(Link *link, bool may_keep_dhcp);
 
 const char* link_state_to_string(LinkState s) _const_;
 LinkState link_state_from_string(const char *s) _pure_;
 
+int link_reconfigure_impl(Link *link, bool force);
 int link_reconfigure(Link *link, bool force);
 
-int manager_udev_process_link(sd_device_monitor *monitor, sd_device *device, void *userdata);
+int manager_udev_process_link(Manager *m, sd_device *device, sd_device_action_t action);
 int manager_rtnl_process_link(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
+
+int link_flags_to_string_alloc(uint32_t flags, char **ret);
+const char *kernel_operstate_to_string(int t) _const_;
diff --git a/src/network/networkd-lldp-rx.c b/src/network/networkd-lldp-rx.c
index c30cc36..3a59884 100644
--- a/src/network/networkd-lldp-rx.c
+++ b/src/network/networkd-lldp-rx.c
@@ -48,20 +48,19 @@
         return link->network->lldp_mode != LLDP_MODE_NO;
 }
 
-static void lldp_handler(sd_lldp *lldp, sd_lldp_event_t event, sd_lldp_neighbor *n, void *userdata) {
-        Link *link = userdata;
+static void lldp_rx_handler(sd_lldp_rx *lldp_rx, sd_lldp_rx_event_t event, sd_lldp_neighbor *n, void *userdata) {
+        Link *link = ASSERT_PTR(userdata);
         int r;
 
-        assert(link);
-
         (void) link_lldp_save(link);
 
-        if (link_lldp_emit_enabled(link) && event == SD_LLDP_EVENT_ADDED) {
+        if (link->lldp_tx && event == SD_LLDP_RX_EVENT_ADDED) {
                 /* If we received information about a new neighbor, restart the LLDP "fast" logic */
 
                 log_link_debug(link, "Received LLDP datagram from previously unknown neighbor, restarting 'fast' LLDP transmission.");
 
-                r = link_lldp_emit_start(link);
+                (void) sd_lldp_tx_stop(link->lldp_tx);
+                r = sd_lldp_tx_start(link->lldp_tx);
                 if (r < 0)
                         log_link_warning_errno(link, r, "Failed to restart LLDP transmission: %m");
         }
@@ -73,68 +72,39 @@
         if (!link_lldp_rx_enabled(link))
                 return 0;
 
-        if (link->lldp)
+        if (link->lldp_rx)
                 return -EBUSY;
 
-        r = sd_lldp_new(&link->lldp);
+        r = sd_lldp_rx_new(&link->lldp_rx);
         if (r < 0)
                 return r;
 
-        r = sd_lldp_attach_event(link->lldp, link->manager->event, 0);
+        r = sd_lldp_rx_attach_event(link->lldp_rx, link->manager->event, 0);
         if (r < 0)
                 return r;
 
-        r = sd_lldp_set_ifindex(link->lldp, link->ifindex);
+        r = sd_lldp_rx_set_ifindex(link->lldp_rx, link->ifindex);
         if (r < 0)
                 return r;
 
-        r = sd_lldp_match_capabilities(link->lldp,
-                                       link->network->lldp_mode == LLDP_MODE_ROUTERS_ONLY ?
-                                       SD_LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS :
-                                       SD_LLDP_SYSTEM_CAPABILITIES_ALL);
+        r = sd_lldp_rx_match_capabilities(link->lldp_rx,
+                                          link->network->lldp_mode == LLDP_MODE_ROUTERS_ONLY ?
+                                          SD_LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS :
+                                          SD_LLDP_SYSTEM_CAPABILITIES_ALL);
         if (r < 0)
                 return r;
 
-        r = sd_lldp_set_filter_address(link->lldp, &link->hw_addr.ether);
+        r = sd_lldp_rx_set_filter_address(link->lldp_rx, &link->hw_addr.ether);
         if (r < 0)
                 return r;
 
-        r = sd_lldp_set_callback(link->lldp, lldp_handler, link);
-        if (r < 0)
-                return r;
-
-        r = link_update_lldp(link);
+        r = sd_lldp_rx_set_callback(link->lldp_rx, lldp_rx_handler, link);
         if (r < 0)
                 return r;
 
         return 0;
 }
 
-int link_update_lldp(Link *link) {
-        int r;
-
-        assert(link);
-
-        if (!link->lldp)
-                return 0;
-
-        if (link->flags & IFF_UP) {
-                r = sd_lldp_start(link->lldp);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Failed to start LLDP: %m");
-                if (r > 0)
-                        log_link_debug(link, "Started LLDP.");
-        } else {
-                r = sd_lldp_stop(link->lldp);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Failed to stop LLDP: %m");
-                if (r > 0)
-                        log_link_debug(link, "Stopped LLDP.");
-        }
-
-        return r;
-}
-
 int link_lldp_save(Link *link) {
         _cleanup_(unlink_and_freep) char *temp_path = NULL;
         _cleanup_fclose_ FILE *f = NULL;
@@ -142,14 +112,16 @@
         int n = 0, r, i;
 
         assert(link);
-        assert(link->lldp_file);
 
-        if (!link->lldp) {
+        if (isempty(link->lldp_file))
+                return 0; /* Do not update state file when running in test mode. */
+
+        if (!link->lldp_rx) {
                 (void) unlink(link->lldp_file);
                 return 0;
         }
 
-        r = sd_lldp_get_neighbors(link->lldp, &l);
+        r = sd_lldp_rx_get_neighbors(link->lldp_rx, &l);
         if (r < 0)
                 return r;
         if (r == 0) {
diff --git a/src/network/networkd-lldp-rx.h b/src/network/networkd-lldp-rx.h
index 49306ea..22f6602 100644
--- a/src/network/networkd-lldp-rx.h
+++ b/src/network/networkd-lldp-rx.h
@@ -14,7 +14,6 @@
 } LLDPMode;
 
 int link_lldp_rx_configure(Link *link);
-int link_update_lldp(Link *link);
 int link_lldp_save(Link *link);
 
 const char* lldp_mode_to_string(LLDPMode m) _const_;
diff --git a/src/network/networkd-lldp-tx.c b/src/network/networkd-lldp-tx.c
index 82a403f..fc9196f 100644
--- a/src/network/networkd-lldp-tx.c
+++ b/src/network/networkd-lldp-tx.c
@@ -1,50 +1,19 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <endian.h>
-#include <inttypes.h>
 #include <net/if.h>
 #include <net/if_arp.h>
 
-#include "alloc-util.h"
-#include "env-file.h"
-#include "escape.h"
-#include "fd-util.h"
-#include "hostname-util.h"
-#include "missing_network.h"
+#include "sd-lldp-tx.h"
+
 #include "networkd-link.h"
 #include "networkd-lldp-tx.h"
 #include "networkd-manager.h"
 #include "parse-util.h"
-#include "random-util.h"
-#include "socket-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
-#include "unaligned.h"
-#include "web-util.h"
 
-/* The LLDP spec calls this "txFastInit", see 9.2.5.19 */
-#define LLDP_TX_FAST_INIT 4U
-
-/* The LLDP spec calls this "msgTxHold", see 9.2.5.6 */
-#define LLDP_TX_HOLD 4U
-
-/* The jitter range to add, see 9.2.2. */
-#define LLDP_JITTER_USEC (400U * USEC_PER_MSEC)
-
-/* The LLDP spec calls this msgTxInterval, but we subtract half the jitter off it. */
-#define LLDP_TX_INTERVAL_USEC (30U * USEC_PER_SEC - LLDP_JITTER_USEC / 2)
-
-/* The LLDP spec calls this msgFastTx, but we subtract half the jitter off it. */
-#define LLDP_FAST_TX_USEC (1U * USEC_PER_SEC - LLDP_JITTER_USEC / 2)
-
-static const struct ether_addr lldp_multicast_addr[_LLDP_EMIT_MAX] = {
-        [LLDP_EMIT_NEAREST_BRIDGE]  = {{ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e }},
-        [LLDP_EMIT_NON_TPMR_BRIDGE] = {{ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 }},
-        [LLDP_EMIT_CUSTOMER_BRIDGE] = {{ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 }},
-};
-
-bool link_lldp_emit_enabled(Link *link) {
+static bool link_lldp_tx_enabled(Link *link) {
         assert(link);
 
         if (link->flags & IFF_LOOPBACK)
@@ -59,364 +28,73 @@
         if (link->kind && STR_IN_SET(link->kind, "bridge", "bond"))
                 return false;
 
-        return link->network->lldp_emit != LLDP_EMIT_NO;
+        return link->network->lldp_multicast_mode >= 0 &&
+                link->network->lldp_multicast_mode < _SD_LLDP_MULTICAST_MODE_MAX;
 }
 
-static int lldp_write_tlv_header(uint8_t **p, uint8_t id, size_t sz) {
-        assert(p);
-
-        if (id > 127)
-                return -EBADMSG;
-        if (sz > 511)
-                return -ENOBUFS;
-
-        (*p)[0] = (id << 1) | !!(sz & 256);
-        (*p)[1] = sz & 255;
-
-        *p = *p + 2;
-        return 0;
-}
-
-static int lldp_make_packet(
-                LLDPEmit mode,
-                const struct ether_addr *hwaddr,
-                const char *machine_id,
-                const char *ifname,
-                uint16_t ttl,
-                const char *port_description,
-                const char *hostname,
-                const char *pretty_hostname,
-                uint16_t system_capabilities,
-                uint16_t enabled_capabilities,
-                char *mud,
-                void **ret, size_t *sz) {
-
-        size_t machine_id_length, ifname_length, port_description_length = 0, hostname_length = 0,
-                pretty_hostname_length = 0, mud_length = 0;
-        _cleanup_free_ void *packet = NULL;
-        struct ether_header *h;
-        uint8_t *p;
-        size_t l;
-        int r;
-
-        assert(mode > LLDP_EMIT_NO);
-        assert(mode < _LLDP_EMIT_MAX);
-        assert(hwaddr);
-        assert(machine_id);
-        assert(ifname);
-        assert(ret);
-        assert(sz);
-
-        machine_id_length = strlen(machine_id);
-        ifname_length = strlen(ifname);
-
-        if (port_description)
-                port_description_length = strlen(port_description);
-
-        if (hostname)
-                hostname_length = strlen(hostname);
-
-        if (pretty_hostname)
-                pretty_hostname_length = strlen(pretty_hostname);
-
-        if (mud)
-                mud_length = strlen(mud);
-
-        l = sizeof(struct ether_header) +
-                /* Chassis ID */
-                2 + 1 + machine_id_length +
-                /* Port ID */
-                2 + 1 + ifname_length +
-                /* TTL */
-                2 + 2 +
-                /* System Capabilities */
-                2 + 4 +
-                /* End */
-                2;
-
-        /* Port Description */
-        if (port_description)
-                l += 2 + port_description_length;
-
-        /* System Name */
-        if (hostname)
-                l += 2 + hostname_length;
-
-        /* System Description */
-        if (pretty_hostname)
-                l += 2 + pretty_hostname_length;
-
-        /* MUD URL */
-        if (mud)
-                l += 2 + sizeof(SD_LLDP_OUI_MUD) + 1 + mud_length;
-
-        packet = malloc(l);
-        if (!packet)
-                return -ENOMEM;
-
-        h = (struct ether_header*) packet;
-        h->ether_type = htobe16(ETHERTYPE_LLDP);
-        memcpy(h->ether_dhost, lldp_multicast_addr + mode, ETH_ALEN);
-        memcpy(h->ether_shost, hwaddr, ETH_ALEN);
-
-        p = (uint8_t*) packet + sizeof(struct ether_header);
-
-        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_CHASSIS_ID, 1 + machine_id_length);
-        if (r < 0)
-                return r;
-        *(p++) = SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED;
-        p = mempcpy(p, machine_id, machine_id_length);
-
-        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_PORT_ID, 1 + ifname_length);
-        if (r < 0)
-                return r;
-        *(p++) = SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME;
-        p = mempcpy(p, ifname, ifname_length);
-
-        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_TTL, 2);
-        if (r < 0)
-                return r;
-        unaligned_write_be16(p, ttl);
-        p += 2;
-
-        if (port_description) {
-                r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_PORT_DESCRIPTION, port_description_length);
-                if (r < 0)
-                        return r;
-                p = mempcpy(p, port_description, port_description_length);
-        }
-
-        if (hostname) {
-                r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_SYSTEM_NAME, hostname_length);
-                if (r < 0)
-                        return r;
-                p = mempcpy(p, hostname, hostname_length);
-        }
-
-        if (pretty_hostname) {
-                r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_SYSTEM_DESCRIPTION, pretty_hostname_length);
-                if (r < 0)
-                        return r;
-                p = mempcpy(p, pretty_hostname, pretty_hostname_length);
-        }
-
-        if (mud) {
-                uint8_t oui_mud[sizeof(SD_LLDP_OUI_MUD)] = {0x00, 0x00, 0x5E};
-                /*
-                 * +--------+--------+----------+---------+--------------
-                 * |TLV Type|  len   |   OUI    |subtype  | MUDString
-                 * |  =127  |        |= 00 00 5E|  = 1    |
-                 * |(7 bits)|(9 bits)|(3 octets)|(1 octet)|(1-255 octets)
-                 * +--------+--------+----------+---------+--------------
-                 * where:
-
-                 * o  TLV Type = 127 indicates a vendor-specific TLV
-                 * o  len = indicates the TLV string length
-                 * o  OUI = 00 00 5E is the organizationally unique identifier of IANA
-                 * o  subtype = 1 (as assigned by IANA for the MUDstring)
-                 * o  MUDstring = the length MUST NOT exceed 255 octets
-                 */
-
-                r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_PRIVATE, sizeof(SD_LLDP_OUI_MUD) + 1 + mud_length);
-                if (r < 0)
-                        return r;
-
-                p = mempcpy(p, &oui_mud, sizeof(SD_LLDP_OUI_MUD));
-                *(p++) = SD_LLDP_OUI_SUBTYPE_MUD_USAGE_DESCRIPTION;
-                p = mempcpy(p, mud, mud_length);
-        }
-
-        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_SYSTEM_CAPABILITIES, 4);
-        if (r < 0)
-                return r;
-        unaligned_write_be16(p, system_capabilities);
-        p += 2;
-        unaligned_write_be16(p, enabled_capabilities);
-        p += 2;
-
-        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_END, 0);
-        if (r < 0)
-                return r;
-
-        assert(p == (uint8_t*) packet + l);
-
-        *ret = TAKE_PTR(packet);
-        *sz = l;
-
-        return 0;
-}
-
-static int lldp_send_packet(
-                int ifindex,
-                const struct ether_addr *address,
-                const void *packet,
-                size_t packet_size) {
-
-        union sockaddr_union sa = {
-                .ll.sll_family = AF_PACKET,
-                .ll.sll_protocol = htobe16(ETHERTYPE_LLDP),
-                .ll.sll_ifindex = ifindex,
-                .ll.sll_halen = ETH_ALEN,
-        };
-
-        _cleanup_close_ int fd = -1;
-        ssize_t l;
-
-        assert(ifindex > 0);
-        assert(address);
-        assert(packet || packet_size <= 0);
-
-        memcpy(sa.ll.sll_addr, address, ETH_ALEN);
-
-        fd = socket(AF_PACKET, SOCK_RAW|SOCK_CLOEXEC, IPPROTO_RAW);
-        if (fd < 0)
-                return -errno;
-
-        l = sendto(fd, packet, packet_size, MSG_NOSIGNAL, &sa.sa, sizeof(sa.ll));
-        if (l < 0)
-                return -errno;
-
-        if ((size_t) l != packet_size)
-                return -EIO;
-
-        return 0;
-}
-
-static int link_send_lldp(Link *link) {
-        char machine_id_string[SD_ID128_STRING_MAX];
-        _cleanup_free_ char *hostname = NULL, *pretty_hostname = NULL;
-        _cleanup_free_ void *packet = NULL;
-        size_t packet_size = 0;
-        sd_id128_t machine_id;
-        uint16_t caps;
-        usec_t ttl;
+int link_lldp_tx_configure(Link *link) {
         int r;
 
         assert(link);
 
-        if (!link->network || link->network->lldp_emit == LLDP_EMIT_NO)
+        if (!link_lldp_tx_enabled(link))
                 return 0;
 
-        assert(link->network->lldp_emit < _LLDP_EMIT_MAX);
+        if (link->lldp_tx)
+                return -EBUSY;
 
-        r = sd_id128_get_machine(&machine_id);
+        r = sd_lldp_tx_new(&link->lldp_tx);
         if (r < 0)
                 return r;
 
-        (void) gethostname_strict(&hostname);
-        (void) parse_env_file(NULL, "/etc/machine-info", "PRETTY_HOSTNAME", &pretty_hostname);
-
-        assert_cc(LLDP_TX_INTERVAL_USEC * LLDP_TX_HOLD + 1 <= (UINT16_MAX - 1) * USEC_PER_SEC);
-        ttl = DIV_ROUND_UP(LLDP_TX_INTERVAL_USEC * LLDP_TX_HOLD + 1, USEC_PER_SEC);
-
-        caps = (link->network && link->network->ip_forward != ADDRESS_FAMILY_NO) ?
-                SD_LLDP_SYSTEM_CAPABILITIES_ROUTER :
-                SD_LLDP_SYSTEM_CAPABILITIES_STATION;
-
-        r = lldp_make_packet(link->network->lldp_emit,
-                             &link->hw_addr.ether,
-                             sd_id128_to_string(machine_id, machine_id_string),
-                             link->ifname,
-                             (uint16_t) ttl,
-                             link->network ? link->network->description : NULL,
-                             hostname,
-                             pretty_hostname,
-                             SD_LLDP_SYSTEM_CAPABILITIES_STATION|SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE|SD_LLDP_SYSTEM_CAPABILITIES_ROUTER,
-                             caps,
-                             link->network ? link->network->lldp_mud : NULL,
-                             &packet, &packet_size);
+        r = sd_lldp_tx_attach_event(link->lldp_tx, link->manager->event, 0);
         if (r < 0)
                 return r;
 
-        return lldp_send_packet(link->ifindex, lldp_multicast_addr + link->network->lldp_emit, packet, packet_size);
-}
-
-static int on_lldp_timer(sd_event_source *s, usec_t t, void *userdata) {
-        Link *link = userdata;
-        usec_t delay;
-        int r;
-
-        assert(s);
-        assert(userdata);
-
-        log_link_debug(link, "Sending LLDP packet...");
-
-        r = link_send_lldp(link);
+        r = sd_lldp_tx_set_ifindex(link->lldp_tx, link->ifindex);
         if (r < 0)
-                log_link_debug_errno(link, r, "Failed to send LLDP packet, ignoring: %m");
+                return r;
 
-        if (link->lldp_tx_fast > 0)
-                link->lldp_tx_fast--;
-
-        delay = link->lldp_tx_fast > 0 ? LLDP_FAST_TX_USEC : LLDP_TX_INTERVAL_USEC;
-        delay = usec_add(delay, (usec_t) random_u64() % LLDP_JITTER_USEC);
-
-        r = sd_event_source_set_time_relative(s, delay);
+        r = sd_lldp_tx_set_hwaddr(link->lldp_tx, &link->hw_addr.ether);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to restart LLDP timer: %m");
+                return r;
 
-        r = sd_event_source_set_enabled(s, SD_EVENT_ONESHOT);
+        assert(link->network);
+
+        r = sd_lldp_tx_set_multicast_mode(link->lldp_tx, link->network->lldp_multicast_mode);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to enable LLDP timer: %m");
+                return r;
+
+        r = sd_lldp_tx_set_capabilities(link->lldp_tx,
+                                        SD_LLDP_SYSTEM_CAPABILITIES_STATION |
+                                        SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE |
+                                        SD_LLDP_SYSTEM_CAPABILITIES_ROUTER,
+                                        (link->network->ip_forward != ADDRESS_FAMILY_NO) ?
+                                        SD_LLDP_SYSTEM_CAPABILITIES_ROUTER :
+                                        SD_LLDP_SYSTEM_CAPABILITIES_STATION);
+        if (r < 0)
+                return r;
+
+        r = sd_lldp_tx_set_port_description(link->lldp_tx, link->network->description);
+        if (r < 0)
+                return r;
+
+        r = sd_lldp_tx_set_mud_url(link->lldp_tx, link->network->lldp_mudurl);
+        if (r < 0)
+                return r;
 
         return 0;
 }
 
-int link_lldp_emit_start(Link *link) {
-        usec_t next;
-        int r;
+static const char * const lldp_multicast_mode_table[_SD_LLDP_MULTICAST_MODE_MAX] = {
+        [SD_LLDP_MULTICAST_MODE_NEAREST_BRIDGE]  = "nearest-bridge",
+        [SD_LLDP_MULTICAST_MODE_NON_TPMR_BRIDGE] = "non-tpmr-bridge",
+        [SD_LLDP_MULTICAST_MODE_CUSTOMER_BRIDGE] = "customer-bridge",
+};
 
-        assert(link);
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(lldp_multicast_mode, sd_lldp_multicast_mode_t);
 
-        if (!link_lldp_emit_enabled(link)) {
-                link_lldp_emit_stop(link);
-                return 0;
-        }
-
-        /* Starts the LLDP transmission in "fast" mode. If it is already started, turns "fast" mode back on again. */
-
-        link->lldp_tx_fast = LLDP_TX_FAST_INIT;
-
-        next = usec_add(usec_add(now(clock_boottime_or_monotonic()), LLDP_FAST_TX_USEC),
-                        (usec_t) random_u64() % LLDP_JITTER_USEC);
-
-        if (link->lldp_emit_event_source) {
-                usec_t old;
-
-                /* Lower the timeout, maybe */
-                r = sd_event_source_get_time(link->lldp_emit_event_source, &old);
-                if (r < 0)
-                        return r;
-
-                if (old <= next)
-                        return 0;
-
-                return sd_event_source_set_time(link->lldp_emit_event_source, next);
-        } else {
-                r = sd_event_add_time(
-                                link->manager->event,
-                                &link->lldp_emit_event_source,
-                                clock_boottime_or_monotonic(),
-                                next,
-                                0,
-                                on_lldp_timer,
-                                link);
-                if (r < 0)
-                        return r;
-
-                (void) sd_event_source_set_description(link->lldp_emit_event_source, "lldp-tx");
-        }
-
-        return 0;
-}
-
-void link_lldp_emit_stop(Link *link) {
-        assert(link);
-
-        link->lldp_emit_event_source = sd_event_source_disable_unref(link->lldp_emit_event_source);
-}
-
-int config_parse_lldp_mud(
+int config_parse_lldp_multicast_mode(
                 const char *unit,
                 const char *filename,
                 unsigned line,
@@ -428,37 +106,32 @@
                 void *data,
                 void *userdata) {
 
-        _cleanup_free_ char *unescaped = NULL;
-        Network *n = data;
+        sd_lldp_multicast_mode_t m, *mode = ASSERT_PTR(data);
         int r;
 
         assert(filename);
+        assert(section);
         assert(lvalue);
         assert(rvalue);
 
-        r = cunescape(rvalue, 0, &unescaped);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to Failed to unescape LLDP MUD URL, ignoring: %s", rvalue);
+        if (isempty(rvalue)) {
+                *mode = _SD_LLDP_MULTICAST_MODE_INVALID;
                 return 0;
         }
 
-        if (!http_url_is_valid(unescaped) || strlen(unescaped) > 255) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Failed to parse LLDP MUD URL '%s', ignoring: %m", rvalue);
-
+        r = parse_boolean(rvalue);
+        if (r >= 0) {
+                *mode = r == 0 ? _SD_LLDP_MULTICAST_MODE_INVALID : SD_LLDP_MULTICAST_MODE_NEAREST_BRIDGE;
                 return 0;
         }
 
-        return free_and_replace(n->lldp_mud, unescaped);
+        m = lldp_multicast_mode_from_string(rvalue);
+        if (m < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, m,
+                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        *mode = m;
+        return 0;
 }
-
-static const char * const lldp_emit_table[_LLDP_EMIT_MAX] = {
-        [LLDP_EMIT_NO]              = "no",
-        [LLDP_EMIT_NEAREST_BRIDGE]  = "nearest-bridge",
-        [LLDP_EMIT_NON_TPMR_BRIDGE] = "non-tpmr-bridge",
-        [LLDP_EMIT_CUSTOMER_BRIDGE] = "customer-bridge",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(lldp_emit, LLDPEmit, LLDP_EMIT_NEAREST_BRIDGE);
-DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_lldp_emit, lldp_emit, LLDPEmit, LLDP_EMIT_NO, "Failed to parse LLDP emission setting");
diff --git a/src/network/networkd-lldp-tx.h b/src/network/networkd-lldp-tx.h
index b8917f9..73757f1 100644
--- a/src/network/networkd-lldp-tx.h
+++ b/src/network/networkd-lldp-tx.h
@@ -1,24 +1,10 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <stdbool.h>
-
 #include "conf-parser.h"
 
 typedef struct Link Link;
 
-typedef enum LLDPEmit {
-        LLDP_EMIT_NO,
-        LLDP_EMIT_NEAREST_BRIDGE,
-        LLDP_EMIT_NON_TPMR_BRIDGE,
-        LLDP_EMIT_CUSTOMER_BRIDGE,
-        _LLDP_EMIT_MAX,
-        _LLDP_EMIT_INVALID = -EINVAL,
-} LLDPEmit;
+int link_lldp_tx_configure(Link *link);
 
-bool link_lldp_emit_enabled(Link *link);
-int link_lldp_emit_start(Link *link);
-void link_lldp_emit_stop(Link *link);
-
-CONFIG_PARSER_PROTOTYPE(config_parse_lldp_emit);
-CONFIG_PARSER_PROTOTYPE(config_parse_lldp_mud);
+CONFIG_PARSER_PROTOTYPE(config_parse_lldp_multicast_mode);
diff --git a/src/network/networkd-manager-bus.c b/src/network/networkd-manager-bus.c
index 8a5ad8e..67f951d 100644
--- a/src/network/networkd-manager-bus.c
+++ b/src/network/networkd-manager-bus.c
@@ -8,11 +8,13 @@
 #include "bus-common-errors.h"
 #include "bus-message-util.h"
 #include "bus-polkit.h"
+#include "networkd-dhcp-server-bus.h"
 #include "networkd-json.h"
 #include "networkd-link-bus.h"
 #include "networkd-link.h"
 #include "networkd-manager-bus.h"
 #include "networkd-manager.h"
+#include "networkd-network-bus.h"
 #include "path-util.h"
 #include "strv.h"
 #include "user-util.h"
@@ -195,7 +197,6 @@
 
 static int bus_method_reload(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         Manager *manager = userdata;
-        Link *link;
         int r;
 
         r = bus_verify_polkit_async(message, CAP_NET_ADMIN,
@@ -207,20 +208,10 @@
         if (r == 0)
                 return 1; /* Polkit will call us back */
 
-        r = netdev_load(manager, true);
+        r = manager_reload(manager);
         if (r < 0)
                 return r;
 
-        r = network_reload(manager);
-        if (r < 0)
-                return r;
-
-        HASHMAP_FOREACH(link, manager->links_by_index) {
-                r = link_reconfigure(link, /* force = */ false);
-                if (r < 0)
-                        return r;
-        }
-
         return sd_bus_reply_method_return(message, NULL);
 }
 
@@ -232,11 +223,10 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         _cleanup_free_ char *text = NULL;
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(manager);
 
         r = manager_build_json(manager, &v);
         if (r < 0)
@@ -285,7 +275,7 @@
         return sd_bus_message_append(reply, "t", id);
 }
 
-const sd_bus_vtable manager_vtable[] = {
+static const sd_bus_vtable manager_vtable[] = {
         SD_BUS_VTABLE_START(0),
 
         SD_BUS_PROPERTY("OperationalState", "s", property_get_operational_state, offsetof(Manager, operational_state), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
@@ -418,3 +408,10 @@
                         "org.freedesktop.network1.Manager",
                         properties);
 }
+
+const BusObjectImplementation manager_object = {
+        "/org/freedesktop/network1",
+        "org.freedesktop.network1.Manager",
+        .vtables = BUS_VTABLES(manager_vtable),
+        .children = BUS_IMPLEMENTATIONS(&dhcp_server_object, &link_object, &network_object),
+};
diff --git a/src/network/networkd-manager-bus.h b/src/network/networkd-manager-bus.h
index 08ddfbd..5cd7f16 100644
--- a/src/network/networkd-manager-bus.h
+++ b/src/network/networkd-manager-bus.h
@@ -3,8 +3,10 @@
 
 #include "sd-bus.h"
 
+#include "bus-object.h"
+
 typedef struct Manager Manager;
 
-extern const sd_bus_vtable manager_vtable[];
+extern const BusObjectImplementation manager_object;
 
 int manager_send_changed_strv(Manager *m, char **properties);
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index 374d27b..ad66821 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -6,26 +6,32 @@
 #include <linux/if.h>
 #include <linux/fib_rules.h>
 #include <linux/nexthop.h>
+#include <linux/nl80211.h>
 
-#include "sd-daemon.h"
 #include "sd-netlink.h"
 
 #include "alloc-util.h"
 #include "bus-error.h"
+#include "bus-locator.h"
 #include "bus-log-control-api.h"
 #include "bus-polkit.h"
 #include "bus-util.h"
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
+#include "daemon-util.h"
+#include "device-private.h"
+#include "device-util.h"
 #include "dns-domain.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "firewall-util.h"
 #include "fs-util.h"
+#include "initrd-util.h"
 #include "local-addresses.h"
 #include "netlink-util.h"
 #include "network-internal.h"
 #include "networkd-address-pool.h"
+#include "networkd-address.h"
 #include "networkd-dhcp-server-bus.h"
 #include "networkd-dhcp6.h"
 #include "networkd-link-bus.h"
@@ -35,46 +41,36 @@
 #include "networkd-network-bus.h"
 #include "networkd-nexthop.h"
 #include "networkd-queue.h"
+#include "networkd-route.h"
 #include "networkd-routing-policy-rule.h"
 #include "networkd-speed-meter.h"
 #include "networkd-state-file.h"
+#include "networkd-wifi.h"
+#include "networkd-wiphy.h"
 #include "ordered-set.h"
 #include "path-lookup.h"
 #include "path-util.h"
+#include "qdisc.h"
 #include "selinux-util.h"
 #include "set.h"
 #include "signal-util.h"
 #include "stat-util.h"
 #include "strv.h"
 #include "sysctl-util.h"
+#include "tclass.h"
 #include "tmpfile-util.h"
+#include "tuntap.h"
+#include "udev-util.h"
 
 /* use 128 MB for receive socket kernel queue. */
 #define RCVBUF_SIZE    (128*1024*1024)
 
-static int manager_reset_all(Manager *m) {
-        Link *link;
-        int r;
-
-        assert(m);
-
-        HASHMAP_FOREACH(link, m->links_by_index) {
-                r = link_carrier_reset(link);
-                if (r < 0) {
-                        log_link_warning_errno(link, r, "Could not reset carrier: %m");
-                        link_enter_failed(link);
-                }
-        }
-
-        return 0;
-}
-
 static int match_prepare_for_sleep(sd_bus_message *message, void *userdata, sd_bus_error *ret_error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
+        Link *link;
         int b, r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "b", &b);
         if (r < 0) {
@@ -85,65 +81,48 @@
         if (b)
                 return 0;
 
-        log_debug("Coming back from suspend, resetting all connections...");
+        log_debug("Coming back from suspend, reconfiguring all connections...");
 
-        (void) manager_reset_all(m);
+        HASHMAP_FOREACH(link, m->links_by_index) {
+                r = link_reconfigure(link, /* force = */ true);
+                if (r < 0) {
+                        log_link_warning_errno(link, r, "Failed to reconfigure interface: %m");
+                        link_enter_failed(link);
+                }
+        }
 
         return 0;
 }
 
 static int on_connected(sd_bus_message *message, void *userdata, sd_bus_error *ret_error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(message);
-        assert(m);
 
         /* Did we get a timezone or transient hostname from DHCP while D-Bus wasn't up yet? */
         if (m->dynamic_hostname)
                 (void) manager_set_hostname(m, m->dynamic_hostname);
         if (m->dynamic_timezone)
                 (void) manager_set_timezone(m, m->dynamic_timezone);
-        if (!set_isempty(m->links_requesting_uuid))
+        if (m->product_uuid_requested)
                 (void) manager_request_product_uuid(m);
 
         return 0;
 }
 
-int manager_connect_bus(Manager *m) {
+static int manager_connect_bus(Manager *m) {
         int r;
 
         assert(m);
-
-        if (m->bus)
-                return 0;
+        assert(!m->bus);
 
         r = bus_open_system_watch_bind_with_description(&m->bus, "bus-api-network");
         if (r < 0)
                 return log_error_errno(r, "Failed to connect to bus: %m");
 
-        r = sd_bus_add_object_vtable(m->bus, NULL, "/org/freedesktop/network1", "org.freedesktop.network1.Manager", manager_vtable, m);
+        r = bus_add_implementation(m->bus, &manager_object, m);
         if (r < 0)
-                return log_error_errno(r, "Failed to add manager object vtable: %m");
-
-        r = sd_bus_add_fallback_vtable(m->bus, NULL, "/org/freedesktop/network1/link", "org.freedesktop.network1.Link", link_vtable, link_object_find, m);
-        if (r < 0)
-               return log_error_errno(r, "Failed to add link object vtable: %m");
-
-        r = sd_bus_add_fallback_vtable(m->bus, NULL, "/org/freedesktop/network1/link", "org.freedesktop.network1.DHCPServer", dhcp_server_vtable, link_object_find, m);
-        if (r < 0)
-               return log_error_errno(r, "Failed to add link object vtable: %m");
-
-        r = sd_bus_add_node_enumerator(m->bus, NULL, "/org/freedesktop/network1/link", link_node_enumerator, m);
-        if (r < 0)
-                return log_error_errno(r, "Failed to add link enumerator: %m");
-
-        r = sd_bus_add_fallback_vtable(m->bus, NULL, "/org/freedesktop/network1/network", "org.freedesktop.network1.Network", network_vtable, network_object_find, m);
-        if (r < 0)
-               return log_error_errno(r, "Failed to add network object vtable: %m");
-
-        r = sd_bus_add_node_enumerator(m->bus, NULL, "/org/freedesktop/network1/network", network_node_enumerator, m);
-        if (r < 0)
-                return log_error_errno(r, "Failed to add network enumerator: %m");
+                return r;
 
         r = bus_log_control_api_register(m->bus);
         if (r < 0)
@@ -182,12 +161,45 @@
         return 0;
 }
 
+static int manager_process_uevent(sd_device_monitor *monitor, sd_device *device, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+        sd_device_action_t action;
+        const char *s;
+        int r;
+
+        assert(device);
+
+        r = sd_device_get_action(device, &action);
+        if (r < 0)
+                return log_device_warning_errno(device, r, "Failed to get udev action, ignoring: %m");
+
+        r = sd_device_get_subsystem(device, &s);
+        if (r < 0)
+                return log_device_warning_errno(device, r, "Failed to get subsystem, ignoring: %m");
+
+        if (streq(s, "net"))
+                r = manager_udev_process_link(m, device, action);
+        else if (streq(s, "ieee80211"))
+                r = manager_udev_process_wiphy(m, device, action);
+        else if (streq(s, "rfkill"))
+                r = manager_udev_process_rfkill(m, device, action);
+        else {
+                log_device_debug(device, "Received device with unexpected subsystem \"%s\", ignoring.", s);
+                return 0;
+        }
+        if (r < 0)
+                log_device_warning_errno(device, r, "Failed to process \"%s\" uevent, ignoring: %m",
+                                         device_action_to_string(action));
+
+        return 0;
+}
+
 static int manager_connect_udev(Manager *m) {
         int r;
 
         /* udev does not initialize devices inside containers, so we rely on them being already
          * initialized before entering the container. */
-        if (path_is_read_only_fs("/sys") > 0)
+        if (!udev_available())
                 return 0;
 
         r = sd_device_monitor_new(&m->device_monitor);
@@ -200,35 +212,66 @@
 
         r = sd_device_monitor_filter_add_match_subsystem_devtype(m->device_monitor, "net", NULL);
         if (r < 0)
-                return log_error_errno(r, "Could not add device monitor filter: %m");
+                return log_error_errno(r, "Could not add device monitor filter for net subsystem: %m");
+
+        r = sd_device_monitor_filter_add_match_subsystem_devtype(m->device_monitor, "ieee80211", NULL);
+        if (r < 0)
+                return log_error_errno(r, "Could not add device monitor filter for ieee80211 subsystem: %m");
+
+        r = sd_device_monitor_filter_add_match_subsystem_devtype(m->device_monitor, "rfkill", NULL);
+        if (r < 0)
+                return log_error_errno(r, "Could not add device monitor filter for rfkill subsystem: %m");
 
         r = sd_device_monitor_attach_event(m->device_monitor, m->event);
         if (r < 0)
                 return log_error_errno(r, "Failed to attach event to device monitor: %m");
 
-        r = sd_device_monitor_start(m->device_monitor, manager_udev_process_link, m);
+        r = sd_device_monitor_start(m->device_monitor, manager_process_uevent, m);
         if (r < 0)
                 return log_error_errno(r, "Failed to start device monitor: %m");
 
         return 0;
 }
 
-static int systemd_netlink_fd(void) {
-        int n, fd, rtnl_fd = -EINVAL;
+static int manager_listen_fds(Manager *m, int *ret_rtnl_fd) {
+        _cleanup_strv_free_ char **names = NULL;
+        int n, rtnl_fd = -EBADF;
 
-        n = sd_listen_fds(true);
-        if (n <= 0)
+        assert(m);
+        assert(ret_rtnl_fd);
+
+        n = sd_listen_fds_with_names(/* unset_environment = */ true, &names);
+        if (n < 0)
+                return n;
+
+        if (strv_length(names) != (size_t) n)
                 return -EINVAL;
 
-        for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd ++)
+        for (int i = 0; i < n; i++) {
+                int fd = i + SD_LISTEN_FDS_START;
+
                 if (sd_is_socket(fd, AF_NETLINK, SOCK_RAW, -1) > 0) {
-                        if (rtnl_fd >= 0)
-                                return -EINVAL;
+                        if (rtnl_fd >= 0) {
+                                log_debug("Received multiple netlink socket, ignoring.");
+                                safe_close(fd);
+                                continue;
+                        }
 
                         rtnl_fd = fd;
+                        continue;
                 }
 
-        return rtnl_fd;
+                if (manager_add_tuntap_fd(m, fd, names[i]) >= 0)
+                        continue;
+
+                if (m->test_mode)
+                        safe_close(fd);
+                else
+                        close_and_notify_warn(fd, names[i]);
+        }
+
+        *ret_rtnl_fd = rtnl_fd;
+        return 0;
 }
 
 static int manager_connect_genl(Manager *m) {
@@ -240,7 +283,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_inc_rcvbuf(m->genl, RCVBUF_SIZE);
+        r = sd_netlink_increase_rxbuf(m->genl, RCVBUF_SIZE);
         if (r < 0)
                 log_warning_errno(r, "Failed to increase receive buffer size for general netlink socket, ignoring: %m");
 
@@ -248,27 +291,74 @@
         if (r < 0)
                 return r;
 
+        r = genl_add_match(m->genl, NULL, NL80211_GENL_NAME, NL80211_MULTICAST_GROUP_CONFIG, 0,
+                           &manager_genl_process_nl80211_config, NULL, m, "network-genl_process_nl80211_config");
+        if (r < 0 && r != -EOPNOTSUPP)
+                return r;
+
+        r = genl_add_match(m->genl, NULL, NL80211_GENL_NAME, NL80211_MULTICAST_GROUP_MLME, 0,
+                           &manager_genl_process_nl80211_mlme, NULL, m, "network-genl_process_nl80211_mlme");
+        if (r < 0 && r != -EOPNOTSUPP)
+                return r;
+
         return 0;
 }
 
-static int manager_connect_rtnl(Manager *m) {
-        int fd, r;
+static int manager_setup_rtnl_filter(Manager *manager) {
+        struct sock_filter filter[] = {
+                /* Check the packet length. */
+                BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0),                                      /* A <- packet length */
+                BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(struct nlmsghdr), 1, 0),         /* A (packet length) >= sizeof(struct nlmsghdr) ? */
+                BPF_STMT(BPF_RET + BPF_K, 0),                                               /* reject */
+                /* Always accept multipart message. */
+                BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct nlmsghdr, nlmsg_flags)), /* A <- message flags */
+                BPF_JUMP(BPF_JMP + BPF_JSET + BPF_K, htobe16(NLM_F_MULTI), 0, 1),           /* message flags has NLM_F_MULTI ? */
+                BPF_STMT(BPF_RET + BPF_K, UINT32_MAX),                                      /* accept */
+                /* Accept all message types except for RTM_NEWNEIGH or RTM_DELNEIGH. */
+                BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct nlmsghdr, nlmsg_type)),  /* A <- message type */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htobe16(RTM_NEWNEIGH), 2, 0),           /* message type == RTM_NEWNEIGH ? */
+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htobe16(RTM_DELNEIGH), 1, 0),           /* message type == RTM_DELNEIGH ? */
+                BPF_STMT(BPF_RET + BPF_K, UINT32_MAX),                                      /* accept */
+                /* Check the packet length. */
+                BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0),                                      /* A <- packet length */
+                BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(struct nlmsghdr) + sizeof(struct ndmsg), 1, 0),
+                                                                                            /* packet length >= sizeof(struct nlmsghdr) + sizeof(struct ndmsg) ? */
+                BPF_STMT(BPF_RET + BPF_K, 0),                                               /* reject */
+                /* Reject the message when the neighbor state does not have NUD_PERMANENT flag. */
+                BPF_STMT(BPF_LD + BPF_H + BPF_ABS, sizeof(struct nlmsghdr) + offsetof(struct ndmsg, ndm_state)),
+                                                                                            /* A <- neighbor state */
+                BPF_JUMP(BPF_JMP + BPF_JSET + BPF_K, htobe16(NUD_PERMANENT), 1, 0),         /* neighbor state has NUD_PERMANENT ? */
+                BPF_STMT(BPF_RET + BPF_K, 0),                                               /* reject */
+                BPF_STMT(BPF_RET + BPF_K, UINT32_MAX),                                      /* accept */
+        };
+
+        assert(manager);
+        assert(manager->rtnl);
+
+        return sd_netlink_attach_filter(manager->rtnl, ELEMENTSOF(filter), filter);
+}
+
+static int manager_connect_rtnl(Manager *m, int fd) {
+        _unused_ _cleanup_close_ int fd_close = fd;
+        int r;
 
         assert(m);
 
-        fd = systemd_netlink_fd();
+        /* This takes input fd. */
+
         if (fd < 0)
                 r = sd_netlink_open(&m->rtnl);
         else
                 r = sd_netlink_open_fd(&m->rtnl, fd);
         if (r < 0)
                 return r;
+        TAKE_FD(fd_close);
 
         /* Bump receiver buffer, but only if we are not called via socket activation, as in that
          * case systemd sets the receive buffer size for us, and the value in the .socket unit
          * should take full effect. */
         if (fd < 0) {
-                r = sd_netlink_inc_rcvbuf(m->rtnl, RCVBUF_SIZE);
+                r = sd_netlink_increase_rxbuf(m->rtnl, RCVBUF_SIZE);
                 if (r < 0)
                         log_warning_errno(r, "Failed to increase receive buffer size for rtnl socket, ignoring: %m");
         }
@@ -285,6 +375,22 @@
         if (r < 0)
                 return r;
 
+        r = netlink_add_match(m->rtnl, NULL, RTM_NEWQDISC, &manager_rtnl_process_qdisc, NULL, m, "network-rtnl_process_qdisc");
+        if (r < 0)
+                return r;
+
+        r = netlink_add_match(m->rtnl, NULL, RTM_DELQDISC, &manager_rtnl_process_qdisc, NULL, m, "network-rtnl_process_qdisc");
+        if (r < 0)
+                return r;
+
+        r = netlink_add_match(m->rtnl, NULL, RTM_NEWTCLASS, &manager_rtnl_process_tclass, NULL, m, "network-rtnl_process_tclass");
+        if (r < 0)
+                return r;
+
+        r = netlink_add_match(m->rtnl, NULL, RTM_DELTCLASS, &manager_rtnl_process_tclass, NULL, m, "network-rtnl_process_tclass");
+        if (r < 0)
+                return r;
+
         r = netlink_add_match(m->rtnl, NULL, RTM_NEWADDR, &manager_rtnl_process_address, NULL, m, "network-rtnl_process_address");
         if (r < 0)
                 return r;
@@ -325,16 +431,14 @@
         if (r < 0)
                 return r;
 
-        return 0;
+        return manager_setup_rtnl_filter(m);
 }
 
 static int manager_dirty_handler(sd_event_source *s, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Link *link;
         int r;
 
-        assert(m);
-
         if (m->dirty) {
                 r = manager_save(m);
                 if (r < 0)
@@ -351,9 +455,8 @@
 }
 
 static int signal_terminate_callback(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         m->restarting = false;
 
         log_debug("Terminate operation initiated.");
@@ -362,9 +465,8 @@
 }
 
 static int signal_restart_callback(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         m->restarting = true;
 
         log_debug("Restart operation initiated.");
@@ -372,39 +474,53 @@
         return sd_event_exit(sd_event_source_get_event(s), 0);
 }
 
-int manager_new(Manager **ret) {
-        _cleanup_(manager_freep) Manager *m = NULL;
+static int signal_reload_callback(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+
+        manager_reload(m);
+
+        return 0;
+}
+
+static int manager_set_keep_configuration(Manager *m) {
         int r;
 
-        m = new(Manager, 1);
-        if (!m)
-                return -ENOMEM;
+        assert(m);
 
-        *m = (Manager) {
-                .speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL,
-                .online_state = _LINK_ONLINE_STATE_INVALID,
-                .manage_foreign_routes = true,
-                .manage_foreign_rules = true,
-                .ethtool_fd = -1,
-                .dhcp_duid.type = DUID_TYPE_EN,
-                .dhcp6_duid.type = DUID_TYPE_EN,
-                .duid_product_uuid.type = DUID_TYPE_UUID,
-        };
+        if (in_initrd()) {
+                log_debug("Running in initrd, keep DHCPv4 addresses on stopping networkd by default.");
+                m->keep_configuration = KEEP_CONFIGURATION_DHCP_ON_STOP;
+                return 0;
+        }
 
-        m->state_file = strdup("/run/systemd/netif/state");
-        if (!m->state_file)
-                return -ENOMEM;
+        r = path_is_network_fs("/");
+        if (r < 0)
+                return log_error_errno(r, "Failed to detect if root is network filesystem: %m");
+        if (r == 0) {
+                m->keep_configuration = _KEEP_CONFIGURATION_INVALID;
+                return 0;
+        }
+
+        log_debug("Running on network filesystem, enabling KeepConfiguration= by default.");
+        m->keep_configuration = KEEP_CONFIGURATION_YES;
+        return 0;
+}
+
+int manager_setup(Manager *m) {
+        _cleanup_close_ int rtnl_fd = -EBADF;
+        int r;
+
+        assert(m);
 
         r = sd_event_default(&m->event);
         if (r < 0)
                 return r;
 
-        assert_se(sigprocmask_many(SIG_SETMASK, NULL, SIGINT, SIGTERM, SIGUSR2, -1) >= 0);
-
         (void) sd_event_set_watchdog(m->event, true);
-        (void) sd_event_add_signal(m->event, NULL, SIGTERM, signal_terminate_callback, m);
-        (void) sd_event_add_signal(m->event, NULL, SIGINT, signal_terminate_callback, m);
-        (void) sd_event_add_signal(m->event, NULL, SIGUSR2, signal_restart_callback, m);
+        (void) sd_event_add_signal(m->event, NULL, SIGTERM | SD_EVENT_SIGNAL_PROCMASK, signal_terminate_callback, m);
+        (void) sd_event_add_signal(m->event, NULL, SIGINT | SD_EVENT_SIGNAL_PROCMASK, signal_terminate_callback, m);
+        (void) sd_event_add_signal(m->event, NULL, SIGUSR2 | SD_EVENT_SIGNAL_PROCMASK, signal_restart_callback, m);
+        (void) sd_event_add_signal(m->event, NULL, SIGHUP | SD_EVENT_SIGNAL_PROCMASK, signal_reload_callback, m);
 
         r = sd_event_add_post(m->event, NULL, manager_dirty_handler, m);
         if (r < 0)
@@ -414,7 +530,11 @@
         if (r < 0)
                 return r;
 
-        r = manager_connect_rtnl(m);
+        r = manager_listen_fds(m, &rtnl_fd);
+        if (r < 0)
+                return r;
+
+        r = manager_connect_rtnl(m, TAKE_FD(rtnl_fd));
         if (r < 0)
                 return r;
 
@@ -422,6 +542,13 @@
         if (r < 0)
                 return r;
 
+        if (m->test_mode)
+                return 0;
+
+        r = manager_connect_bus(m);
+        if (r < 0)
+                return r;
+
         r = manager_connect_udev(m);
         if (r < 0)
                 return r;
@@ -438,8 +565,38 @@
         if (r < 0)
                 return r;
 
-        *ret = TAKE_PTR(m);
+        r = manager_set_keep_configuration(m);
+        if (r < 0)
+                return r;
 
+        m->state_file = strdup("/run/systemd/netif/state");
+        if (!m->state_file)
+                return -ENOMEM;
+
+        return 0;
+}
+
+int manager_new(Manager **ret, bool test_mode) {
+        _cleanup_(manager_freep) Manager *m = NULL;
+
+        m = new(Manager, 1);
+        if (!m)
+                return -ENOMEM;
+
+        *m = (Manager) {
+                .keep_configuration = _KEEP_CONFIGURATION_INVALID,
+                .test_mode = test_mode,
+                .speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL,
+                .online_state = _LINK_ONLINE_STATE_INVALID,
+                .manage_foreign_routes = true,
+                .manage_foreign_rules = true,
+                .ethtool_fd = -EBADF,
+                .dhcp_duid.type = DUID_TYPE_EN,
+                .dhcp6_duid.type = DUID_TYPE_EN,
+                .duid_product_uuid.type = DUID_TYPE_UUID,
+        };
+
+        *ret = TAKE_PTR(m);
         return 0;
 }
 
@@ -456,28 +613,29 @@
 
         m->request_queue = ordered_set_free(m->request_queue);
 
-        m->dhcp6_prefixes = hashmap_free_with_destructor(m->dhcp6_prefixes, dhcp6_pd_free);
-        m->dhcp6_pd_prefixes = set_free_with_destructor(m->dhcp6_pd_prefixes, dhcp6_pd_free);
-
         m->dirty_links = set_free_with_destructor(m->dirty_links, link_unref);
-        m->links_requesting_uuid = set_free_with_destructor(m->links_requesting_uuid, link_unref);
+        m->new_wlan_ifindices = set_free(m->new_wlan_ifindices);
         m->links_by_name = hashmap_free(m->links_by_name);
         m->links_by_hw_addr = hashmap_free(m->links_by_hw_addr);
+        m->links_by_dhcp_pd_subnet_prefix = hashmap_free(m->links_by_dhcp_pd_subnet_prefix);
         m->links_by_index = hashmap_free_with_destructor(m->links_by_index, link_unref);
 
+        m->dhcp_pd_subnet_ids = set_free(m->dhcp_pd_subnet_ids);
         m->networks = ordered_hashmap_free_with_destructor(m->networks, network_unref);
 
         m->netdevs = hashmap_free_with_destructor(m->netdevs, netdev_unref);
 
+        m->tuntap_fds_by_name = hashmap_free(m->tuntap_fds_by_name);
+
+        m->wiphy_by_name = hashmap_free(m->wiphy_by_name);
+        m->wiphy_by_index = hashmap_free_with_destructor(m->wiphy_by_index, wiphy_free);
+
         ordered_set_free_free(m->address_pools);
 
         hashmap_free(m->route_table_names_by_number);
         hashmap_free(m->route_table_numbers_by_name);
 
-        /* routing_policy_rule_free() access m->rules and m->rules_foreign.
-         * So, it is necessary to set NULL after the sets are freed. */
-        m->rules = set_free(m->rules);
-        m->rules_foreign = set_free(m->rules_foreign);
+        set_free(m->rules);
 
         sd_netlink_unref(m->rtnl);
         sd_netlink_unref(m->genl);
@@ -491,7 +649,6 @@
         m->routes_foreign = set_free(m->routes_foreign);
 
         m->nexthops = set_free(m->nexthops);
-        m->nexthops_foreign = set_free(m->nexthops_foreign);
         m->nexthops_by_id = hashmap_free(m->nexthops_by_id);
 
         sd_event_source_unref(m->speed_meter_event_source);
@@ -541,63 +698,48 @@
 int manager_load_config(Manager *m) {
         int r;
 
-        /* update timestamp */
-        paths_check_timestamp(NETWORK_DIRS, &m->network_dirs_ts_usec, true);
-
         r = netdev_load(m, false);
         if (r < 0)
                 return r;
 
+        manager_clear_unmanaged_tuntap_fds(m);
+
         r = network_load(m, &m->networks);
         if (r < 0)
                 return r;
 
-        return 0;
-}
-
-bool manager_should_reload(Manager *m) {
-        return paths_check_timestamp(NETWORK_DIRS, &m->network_dirs_ts_usec, false);
+        return manager_build_dhcp_pd_subnet_ids(m);
 }
 
 static int manager_enumerate_internal(
                 Manager *m,
+                sd_netlink *nl,
                 sd_netlink_message *req,
-                int (*process)(sd_netlink *, sd_netlink_message *, Manager *),
-                const char *name) {
+                int (*process)(sd_netlink *, sd_netlink_message *, Manager *)) {
 
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *reply = NULL;
-        int r;
+        int k, r;
 
         assert(m);
-        assert(m->rtnl);
+        assert(nl);
         assert(req);
         assert(process);
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
-        r = sd_netlink_call(m->rtnl, req, 0, &reply);
-        if (r < 0) {
-                if (name && (r == -EOPNOTSUPP || (r == -EINVAL && mac_selinux_enforcing()))) {
-                        log_debug_errno(r, "%s are not supported by the kernel. Ignoring.", name);
-                        return 0;
-                }
-
+        r = sd_netlink_call(nl, req, 0, &reply);
+        if (r < 0)
                 return r;
-        }
 
+        m->enumerating = true;
         for (sd_netlink_message *reply_one = reply; reply_one; reply_one = sd_netlink_message_next(reply_one)) {
-                int k;
-
-                m->enumerating = true;
-
-                k = process(m->rtnl, reply_one, m);
+                k = process(nl, reply_one, m);
                 if (k < 0 && r >= 0)
                         r = k;
-
-                m->enumerating = false;
         }
+        m->enumerating = false;
 
         return r;
 }
@@ -613,7 +755,35 @@
         if (r < 0)
                 return r;
 
-        return manager_enumerate_internal(m, req, manager_rtnl_process_link, NULL);
+        return manager_enumerate_internal(m, m->rtnl, req, manager_rtnl_process_link);
+}
+
+static int manager_enumerate_qdisc(Manager *m) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        int r;
+
+        assert(m);
+        assert(m->rtnl);
+
+        r = sd_rtnl_message_new_traffic_control(m->rtnl, &req, RTM_GETQDISC, 0, 0, 0);
+        if (r < 0)
+                return r;
+
+        return manager_enumerate_internal(m, m->rtnl, req, manager_rtnl_process_qdisc);
+}
+
+static int manager_enumerate_tclass(Manager *m) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        int r;
+
+        assert(m);
+        assert(m->rtnl);
+
+        r = sd_rtnl_message_new_traffic_control(m->rtnl, &req, RTM_GETTCLASS, 0, 0, 0);
+        if (r < 0)
+                return r;
+
+        return manager_enumerate_internal(m, m->rtnl, req, manager_rtnl_process_tclass);
 }
 
 static int manager_enumerate_addresses(Manager *m) {
@@ -627,7 +797,7 @@
         if (r < 0)
                 return r;
 
-        return manager_enumerate_internal(m, req, manager_rtnl_process_address, NULL);
+        return manager_enumerate_internal(m, m->rtnl, req, manager_rtnl_process_address);
 }
 
 static int manager_enumerate_neighbors(Manager *m) {
@@ -641,7 +811,7 @@
         if (r < 0)
                 return r;
 
-        return manager_enumerate_internal(m, req, manager_rtnl_process_neighbor, NULL);
+        return manager_enumerate_internal(m, m->rtnl, req, manager_rtnl_process_neighbor);
 }
 
 static int manager_enumerate_routes(Manager *m) {
@@ -658,7 +828,7 @@
         if (r < 0)
                 return r;
 
-        return manager_enumerate_internal(m, req, manager_rtnl_process_route, NULL);
+        return manager_enumerate_internal(m, m->rtnl, req, manager_rtnl_process_route);
 }
 
 static int manager_enumerate_rules(Manager *m) {
@@ -675,7 +845,7 @@
         if (r < 0)
                 return r;
 
-        return manager_enumerate_internal(m, req, manager_rtnl_process_rule, "Routing policy rules");
+        return manager_enumerate_internal(m, m->rtnl, req, manager_rtnl_process_rule);
 }
 
 static int manager_enumerate_nexthop(Manager *m) {
@@ -689,7 +859,64 @@
         if (r < 0)
                 return r;
 
-        return manager_enumerate_internal(m, req, manager_rtnl_process_nexthop, "Nexthop rules");
+        return manager_enumerate_internal(m, m->rtnl, req, manager_rtnl_process_nexthop);
+}
+
+static int manager_enumerate_nl80211_wiphy(Manager *m) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        int r;
+
+        assert(m);
+        assert(m->genl);
+
+        r = sd_genl_message_new(m->genl, NL80211_GENL_NAME, NL80211_CMD_GET_WIPHY, &req);
+        if (r < 0)
+                return r;
+
+        return manager_enumerate_internal(m, m->genl, req, manager_genl_process_nl80211_wiphy);
+}
+
+static int manager_enumerate_nl80211_config(Manager *m) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        int r;
+
+        assert(m);
+        assert(m->genl);
+
+        r = sd_genl_message_new(m->genl, NL80211_GENL_NAME, NL80211_CMD_GET_INTERFACE, &req);
+        if (r < 0)
+                return r;
+
+        return manager_enumerate_internal(m, m->genl, req, manager_genl_process_nl80211_config);
+}
+
+static int manager_enumerate_nl80211_mlme(Manager *m) {
+        Link *link;
+        int r;
+
+        assert(m);
+        assert(m->genl);
+
+        HASHMAP_FOREACH(link, m->links_by_index) {
+                _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+
+                if (link->wlan_iftype != NL80211_IFTYPE_STATION)
+                        continue;
+
+                r = sd_genl_message_new(m->genl, NL80211_GENL_NAME, NL80211_CMD_GET_STATION, &req);
+                if (r < 0)
+                        return r;
+
+                r = sd_netlink_message_append_u32(req, NL80211_ATTR_IFINDEX, link->ifindex);
+                if (r < 0)
+                        return r;
+
+                r = manager_enumerate_internal(m, m->genl, req, manager_genl_process_nl80211_mlme);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
 }
 
 int manager_enumerate(Manager *m) {
@@ -699,6 +926,18 @@
         if (r < 0)
                 return log_error_errno(r, "Could not enumerate links: %m");
 
+        r = manager_enumerate_qdisc(m);
+        if (r == -EOPNOTSUPP)
+                log_debug_errno(r, "Could not enumerate QDiscs, ignoring: %m");
+        else if (r < 0)
+                return log_error_errno(r, "Could not enumerate QDisc: %m");
+
+        r = manager_enumerate_tclass(m);
+        if (r == -EOPNOTSUPP)
+                log_debug_errno(r, "Could not enumerate TClasses, ignoring: %m");
+        else if (r < 0)
+                return log_error_errno(r, "Could not enumerate TClass: %m");
+
         r = manager_enumerate_addresses(m);
         if (r < 0)
                 return log_error_errno(r, "Could not enumerate addresses: %m");
@@ -707,18 +946,43 @@
         if (r < 0)
                 return log_error_errno(r, "Could not enumerate neighbors: %m");
 
+        /* NextHop support is added in kernel v5.3 (65ee00a9409f751188a8cdc0988167858eb4a536),
+         * and older kernels return -EOPNOTSUPP, or -EINVAL if SELinux is enabled. */
         r = manager_enumerate_nexthop(m);
-        if (r < 0)
-                return log_error_errno(r, "Could not enumerate nexthop rules: %m");
+        if (r == -EOPNOTSUPP || (r == -EINVAL && mac_selinux_enforcing()))
+                log_debug_errno(r, "Could not enumerate nexthops, ignoring: %m");
+        else if (r < 0)
+                return log_error_errno(r, "Could not enumerate nexthops: %m");
 
         r = manager_enumerate_routes(m);
         if (r < 0)
                 return log_error_errno(r, "Could not enumerate routes: %m");
 
+        /* If kernel is built with CONFIG_FIB_RULES=n, it returns -EOPNOTSUPP. */
         r = manager_enumerate_rules(m);
-        if (r < 0)
+        if (r == -EOPNOTSUPP)
+                log_debug_errno(r, "Could not enumerate routing policy rules, ignoring: %m");
+        else if (r < 0)
                 return log_error_errno(r, "Could not enumerate routing policy rules: %m");
 
+        r = manager_enumerate_nl80211_wiphy(m);
+        if (r == -EOPNOTSUPP)
+                log_debug_errno(r, "Could not enumerate wireless LAN phy, ignoring: %m");
+        else if (r < 0)
+                return log_error_errno(r, "Could not enumerate wireless LAN phy: %m");
+
+        r = manager_enumerate_nl80211_config(m);
+        if (r == -EOPNOTSUPP)
+                log_debug_errno(r, "Could not enumerate wireless LAN interfaces, ignoring: %m");
+        else if (r < 0)
+                return log_error_errno(r, "Could not enumerate wireless LAN interfaces: %m");
+
+        r = manager_enumerate_nl80211_mlme(m);
+        if (r == -EOPNOTSUPP)
+                log_debug_errno(r, "Could not enumerate wireless LAN stations, ignoring: %m");
+        else if (r < 0)
+                return log_error_errno(r, "Could not enumerate wireless LAN stations: %m");
+
         return 0;
 }
 
@@ -751,12 +1015,10 @@
                 return 0;
         }
 
-        r = sd_bus_call_method_async(
+        r = bus_call_method_async(
                         m->bus,
                         NULL,
-                        "org.freedesktop.hostname1",
-                        "/org/freedesktop/hostname1",
-                        "org.freedesktop.hostname1",
+                        bus_hostname,
                         "SetHostname",
                         set_hostname_handler,
                         m,
@@ -800,12 +1062,10 @@
                 return 0;
         }
 
-        r = sd_bus_call_method_async(
+        r = bus_call_method_async(
                         m->bus,
                         NULL,
-                        "org.freedesktop.timedate1",
-                        "/org/freedesktop/timedate1",
-                        "org.freedesktop.timedate1",
+                        bus_timedate,
                         "SetTimezone",
                         set_timezone_handler,
                         m,
@@ -817,3 +1077,34 @@
 
         return 0;
 }
+
+int manager_reload(Manager *m) {
+        Link *link;
+        int r;
+
+        assert(m);
+
+        (void) sd_notifyf(/* unset= */ false,
+                          "RELOADING=1\n"
+                          "STATUS=Reloading configuration...\n"
+                          "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC));
+
+        r = netdev_load(m, /* reload= */ true);
+        if (r < 0)
+                goto finish;
+
+        r = network_reload(m);
+        if (r < 0)
+                goto finish;
+
+        HASHMAP_FOREACH(link, m->links_by_index) {
+                r = link_reconfigure(link, /* force = */ false);
+                if (r < 0)
+                        goto finish;
+        }
+
+        r = 0;
+finish:
+        (void) sd_notify(/* unset= */ false, NOTIFY_READY);
+        return r;
+}
diff --git a/src/network/networkd-manager.h b/src/network/networkd-manager.h
index 4ee48f3..c9cbcf9 100644
--- a/src/network/networkd-manager.h
+++ b/src/network/networkd-manager.h
@@ -28,6 +28,9 @@
         Hashmap *polkit_registry;
         int ethtool_fd;
 
+        KeepConfiguration keep_configuration;
+
+        bool test_mode;
         bool enumerating;
         bool dirty;
         bool restarting;
@@ -35,6 +38,7 @@
         bool manage_foreign_rules;
 
         Set *dirty_links;
+        Set *new_wlan_ifindices;
 
         char *state_file;
         LinkOperationalState operational_state;
@@ -47,35 +51,28 @@
         Hashmap *links_by_index;
         Hashmap *links_by_name;
         Hashmap *links_by_hw_addr;
+        Hashmap *links_by_dhcp_pd_subnet_prefix;
         Hashmap *netdevs;
         OrderedHashmap *networks;
-        Hashmap *dhcp6_prefixes;
-        Set *dhcp6_pd_prefixes;
         OrderedSet *address_pools;
-
-        usec_t network_dirs_ts_usec;
+        Set *dhcp_pd_subnet_ids;
 
         DUID dhcp_duid;
         DUID dhcp6_duid;
         DUID duid_product_uuid;
         bool has_product_uuid;
         bool product_uuid_requested;
-        Set *links_requesting_uuid;
 
         char* dynamic_hostname;
         char* dynamic_timezone;
 
-        unsigned routing_policy_rule_remove_messages;
         Set *rules;
-        Set *rules_foreign;
 
         /* Manage nexthops by id. */
         Hashmap *nexthops_by_id;
 
         /* Manager stores nexthops without RTA_OIF attribute. */
-        unsigned nexthop_remove_messages;
         Set *nexthops;
-        Set *nexthops_foreign;
 
         /* Manager stores routes without RTA_OIF attribute. */
         unsigned route_remove_messages;
@@ -86,6 +83,10 @@
         Hashmap *route_table_numbers_by_name;
         Hashmap *route_table_names_by_number;
 
+        /* Wiphy */
+        Hashmap *wiphy_by_index;
+        Hashmap *wiphy_by_name;
+
         /* For link speed meter */
         bool use_speed_meter;
         sd_event_source *speed_meter_event_source;
@@ -93,26 +94,28 @@
         usec_t speed_meter_usec_new;
         usec_t speed_meter_usec_old;
 
-        bool dhcp4_prefix_root_cannot_set_table;
         bool bridge_mdb_on_master_not_supported;
 
         FirewallContext *fw_ctx;
 
         OrderedSet *request_queue;
+
+        Hashmap *tuntap_fds_by_name;
 };
 
-int manager_new(Manager **ret);
+int manager_new(Manager **ret, bool test_mode);
 Manager* manager_free(Manager *m);
 
-int manager_connect_bus(Manager *m);
+int manager_setup(Manager *m);
 int manager_start(Manager *m);
 
 int manager_load_config(Manager *m);
-bool manager_should_reload(Manager *m);
 
 int manager_enumerate(Manager *m);
 
 int manager_set_hostname(Manager *m, const char *hostname);
 int manager_set_timezone(Manager *m, const char *timezone);
 
+int manager_reload(Manager *m);
+
 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index e3705bf..99a07e1 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -5,17 +5,20 @@
 
 #include <arpa/inet.h>
 #include <netinet/icmp6.h>
-#include <net/if_arp.h>
 #include <linux/if.h>
+#include <linux/if_arp.h>
 
 #include "sd-ndisc.h"
 
+#include "event-util.h"
 #include "missing_network.h"
+#include "networkd-address-generation.h"
 #include "networkd-address.h"
 #include "networkd-dhcp6.h"
 #include "networkd-manager.h"
 #include "networkd-ndisc.h"
 #include "networkd-queue.h"
+#include "networkd-route.h"
 #include "networkd-state-file.h"
 #include "string-table.h"
 #include "string-util.h"
@@ -24,20 +27,6 @@
 #define NDISC_DNSSL_MAX 64U
 #define NDISC_RDNSS_MAX 64U
 
-#define DAD_CONFLICTS_IDGEN_RETRIES_RFC7217 3
-
-/* https://tools.ietf.org/html/rfc5453 */
-/* https://www.iana.org/assignments/ipv6-interface-ids/ipv6-interface-ids.xml */
-
-#define SUBNET_ROUTER_ANYCAST_ADDRESS_RFC4291               ((struct in6_addr) { .s6_addr = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } })
-#define SUBNET_ROUTER_ANYCAST_PREFIXLEN                     8
-#define RESERVED_IPV6_INTERFACE_IDENTIFIERS_ADDRESS_RFC4291 ((struct in6_addr) { .s6_addr = { 0x02, 0x00, 0x5E, 0xFF, 0xFE } })
-#define RESERVED_IPV6_INTERFACE_IDENTIFIERS_PREFIXLEN       5
-#define RESERVED_SUBNET_ANYCAST_ADDRESSES_RFC4291           ((struct in6_addr) { .s6_addr = { 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } })
-#define RESERVED_SUBNET_ANYCAST_PREFIXLEN                   7
-
-#define NDISC_APP_ID SD_ID128_MAKE(13,ac,81,a7,d5,3f,49,78,92,79,5d,0c,29,3a,bc,7e)
-
 bool link_ipv6_accept_ra_enabled(Link *link) {
         assert(link);
 
@@ -47,10 +36,13 @@
         if (link->flags & IFF_LOOPBACK)
                 return false;
 
+        if (link->iftype == ARPHRD_CAN)
+                return false;
+
         if (!link->network)
                 return false;
 
-        if (!link_ipv6ll_enabled(link))
+        if (!link_may_have_ipv6ll(link, /* check_multicast = */ true))
                 return false;
 
         assert(link->network->ipv6_accept_ra >= 0);
@@ -62,7 +54,7 @@
 
         if (!FLAGS_SET(network->link_local, ADDRESS_FAMILY_IPV6)) {
                 if (network->ipv6_accept_ra > 0)
-                        log_warning("%s: IPv6AcceptRA= is enabled but IPv6 link local addressing is disabled or not supported. "
+                        log_warning("%s: IPv6AcceptRA= is enabled but IPv6 link-local addressing is disabled or not supported. "
                                     "Disabling IPv6AcceptRA=.", network->filename);
                 network->ipv6_accept_ra = false;
         }
@@ -81,474 +73,218 @@
                 network->ndisc_deny_listed_route_prefix = set_free_free(network->ndisc_deny_listed_route_prefix);
 }
 
-static int ndisc_remove_old_one(Link *link, const struct in6_addr *router, bool force);
+static int ndisc_check_ready(Link *link);
 
-static int ndisc_address_callback(Address *address) {
-        struct in6_addr router = {};
-        NDiscAddress *n;
+static int ndisc_address_ready_callback(Address *address) {
+        Address *a;
 
         assert(address);
         assert(address->link);
-        assert(address->family == AF_INET6);
 
-        SET_FOREACH(n, address->link->ndisc_addresses)
-                if (n->address == address) {
-                        router = n->router;
+        SET_FOREACH(a, address->link->addresses)
+                if (a->source == NETWORK_CONFIG_SOURCE_NDISC)
+                        a->callback = NULL;
+
+        return ndisc_check_ready(address->link);
+}
+
+static int ndisc_check_ready(Link *link) {
+        bool found = false, ready = false;
+        Address *address;
+
+        assert(link);
+
+        if (link->ndisc_messages > 0) {
+                log_link_debug(link, "%s(): SLAAC addresses and routes are not set.", __func__);
+                return 0;
+        }
+
+        SET_FOREACH(address, link->addresses) {
+                if (address->source != NETWORK_CONFIG_SOURCE_NDISC)
+                        continue;
+
+                found = true;
+
+                if (address_is_ready(address)) {
+                        ready = true;
                         break;
                 }
+        }
 
-        if (in6_addr_is_null(&router)) {
-                _cleanup_free_ char *buf = NULL;
+        if (found && !ready) {
+                SET_FOREACH(address, link->addresses)
+                        if (address->source == NETWORK_CONFIG_SOURCE_NDISC)
+                                address->callback = ndisc_address_ready_callback;
 
-                (void) in6_addr_prefix_to_string(&address->in_addr.in6, address->prefixlen, &buf);
-                log_link_debug(address->link, "%s is called for %s, but it is already removed, ignoring.",
-                               __func__, strna(buf));
+                log_link_debug(link, "%s(): no SLAAC address is ready.", __func__);
                 return 0;
         }
 
-        /* Make this called only once */
-        SET_FOREACH(n, address->link->ndisc_addresses)
-                if (in6_addr_equal(&n->router, &router))
-                        n->address->callback = NULL;
+        link->ndisc_configured = true;
+        log_link_debug(link, "SLAAC addresses and routes set.");
 
-        return ndisc_remove_old_one(address->link, &router, true);
+        link_check_ready(link);
+        return 0;
 }
 
-static int ndisc_remove_old_one(Link *link, const struct in6_addr *router, bool force) {
-        NDiscAddress *na;
-        NDiscRoute *nr;
-        NDiscDNSSL *dnssl;
-        NDiscRDNSS *rdnss;
-        int k, r = 0;
-        bool updated = false;
-
-        assert(link);
-        assert(router);
-
-        if (!force) {
-                bool set_callback = false;
-
-                SET_FOREACH(na, link->ndisc_addresses)
-                        if (!na->marked && in6_addr_equal(&na->router, router)) {
-                                set_callback = true;
-                                break;
-                        }
-
-                if (set_callback)
-                        SET_FOREACH(na, link->ndisc_addresses)
-                                if (!na->marked && address_is_ready(na->address)) {
-                                        set_callback = false;
-                                        break;
-                                }
-
-                if (set_callback) {
-                        SET_FOREACH(na, link->ndisc_addresses)
-                                if (!na->marked && in6_addr_equal(&na->router, router))
-                                        na->address->callback = ndisc_address_callback;
-
-                        if (DEBUG_LOGGING) {
-                                _cleanup_free_ char *buf = NULL;
-
-                                (void) in6_addr_to_string(router, &buf);
-                                log_link_debug(link, "No SLAAC address obtained from %s is ready. "
-                                               "The old NDisc information will be removed later.",
-                                               strna(buf));
-                        }
-                        return 0;
-                }
-        }
-
-        if (DEBUG_LOGGING) {
-                _cleanup_free_ char *buf = NULL;
-
-                (void) in6_addr_to_string(router, &buf);
-                log_link_debug(link, "Removing old NDisc information obtained from %s.", strna(buf));
-        }
-
-        SET_FOREACH(na, link->ndisc_addresses)
-                if (na->marked && in6_addr_equal(&na->router, router)) {
-                        k = address_remove(na->address, link);
-                        if (k < 0)
-                                r = k;
-                }
-
-        SET_FOREACH(nr, link->ndisc_routes)
-                if (nr->marked && in6_addr_equal(&nr->router, router)) {
-                        k = route_remove(nr->route, NULL, link);
-                        if (k < 0)
-                                r = k;
-                }
-
-        SET_FOREACH(rdnss, link->ndisc_rdnss)
-                if (rdnss->marked && in6_addr_equal(&rdnss->router, router)) {
-                        free(set_remove(link->ndisc_rdnss, rdnss));
-                        updated = true;
-                }
-
-        SET_FOREACH(dnssl, link->ndisc_dnssl)
-                if (dnssl->marked && in6_addr_equal(&dnssl->router, router)) {
-                        free(set_remove(link->ndisc_dnssl, dnssl));
-                        updated = true;
-                }
-
-        if (updated)
-                link_dirty(link);
-
-        return r;
-}
-
-static int ndisc_remove_old(Link *link) {
-        _cleanup_set_free_free_ Set *routers = NULL;
-        _cleanup_free_ struct in6_addr *router = NULL;
-        struct in6_addr *a;
-        NDiscAddress *na;
-        NDiscRoute *nr;
-        NDiscDNSSL *dnssl;
-        NDiscRDNSS *rdnss;
-        int k, r;
-
-        assert(link);
-
-        if (link->ndisc_addresses_messages > 0 ||
-            link->ndisc_routes_messages > 0)
-                return 0;
-
-        routers = set_new(&in6_addr_hash_ops);
-        if (!routers)
-                return -ENOMEM;
-
-        SET_FOREACH(na, link->ndisc_addresses)
-                if (!set_contains(routers, &na->router)) {
-                        router = newdup(struct in6_addr, &na->router, 1);
-                        if (!router)
-                                return -ENOMEM;
-
-                        r = set_put(routers, router);
-                        if (r < 0)
-                                return r;
-
-                        assert(r > 0);
-                        TAKE_PTR(router);
-                }
-
-        SET_FOREACH(nr, link->ndisc_routes)
-                if (!set_contains(routers, &nr->router)) {
-                        router = newdup(struct in6_addr, &nr->router, 1);
-                        if (!router)
-                                return -ENOMEM;
-
-                        r = set_put(routers, router);
-                        if (r < 0)
-                                return r;
-
-                        assert(r > 0);
-                        TAKE_PTR(router);
-                }
-
-        SET_FOREACH(rdnss, link->ndisc_rdnss)
-                if (!set_contains(routers, &rdnss->router)) {
-                        router = newdup(struct in6_addr, &rdnss->router, 1);
-                        if (!router)
-                                return -ENOMEM;
-
-                        r = set_put(routers, router);
-                        if (r < 0)
-                                return r;
-
-                        assert(r > 0);
-                        TAKE_PTR(router);
-                }
-
-        SET_FOREACH(dnssl, link->ndisc_dnssl)
-                if (!set_contains(routers, &dnssl->router)) {
-                        router = newdup(struct in6_addr, &dnssl->router, 1);
-                        if (!router)
-                                return -ENOMEM;
-
-                        r = set_put(routers, router);
-                        if (r < 0)
-                                return r;
-
-                        assert(r > 0);
-                        TAKE_PTR(router);
-                }
-
-        r = 0;
-        SET_FOREACH(a, routers) {
-                k = ndisc_remove_old_one(link, a, false);
-                if (k < 0)
-                        r = k;
-        }
-
-        return r;
-}
-
-static void ndisc_route_hash_func(const NDiscRoute *x, struct siphash *state) {
-        route_hash_func(x->route, state);
-}
-
-static int ndisc_route_compare_func(const NDiscRoute *a, const NDiscRoute *b) {
-        return route_compare_func(a->route, b->route);
-}
-
-DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
-                ndisc_route_hash_ops,
-                NDiscRoute,
-                ndisc_route_hash_func,
-                ndisc_route_compare_func,
-                free);
-
-static int ndisc_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int ndisc_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) {
         int r;
 
         assert(link);
-        assert(link->ndisc_routes_messages > 0);
-
-        link->ndisc_routes_messages--;
 
         r = route_configure_handler_internal(rtnl, m, link, "Could not set NDisc route");
         if (r <= 0)
                 return r;
 
-        if (link->ndisc_routes_messages == 0) {
-                log_link_debug(link, "NDisc routes set.");
-                link->ndisc_routes_configured = true;
-
-                r = ndisc_remove_old(link);
-                if (r < 0) {
-                        link_enter_failed(link);
-                        return 1;
-                }
-
-                link_check_ready(link);
-        }
+        r = ndisc_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
 
         return 1;
 }
 
-static int ndisc_after_route_configure(Request *req, void *object) {
-        _cleanup_free_ NDiscRoute *nr = NULL;
-        NDiscRoute *nr_exist;
-        struct in6_addr router;
-        Route *route = object;
-        sd_ndisc_router *rt;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ROUTE);
-        assert(req->userdata);
+static void ndisc_set_route_priority(Link *link, Route *route) {
+        assert(link);
         assert(route);
 
-        link = req->link;
-        rt = req->userdata;
+        if (route->priority_set)
+                return; /* explicitly configured. */
 
-        r = sd_ndisc_router_get_address(rt, &router);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get router address from RA: %m");
-
-        nr = new(NDiscRoute, 1);
-        if (!nr)
-                return log_oom();
-
-        *nr = (NDiscRoute) {
-                .router = router,
-                .route = route,
-        };
-
-        nr_exist = set_get(link->ndisc_routes, nr);
-        if (nr_exist) {
-                nr_exist->marked = false;
-                nr_exist->router = router;
-                return 0;
+        switch (route->pref) {
+        case SD_NDISC_PREFERENCE_LOW:
+                route->priority = link->network->ipv6_accept_ra_route_metric_low;
+                break;
+        case SD_NDISC_PREFERENCE_MEDIUM:
+                route->priority = link->network->ipv6_accept_ra_route_metric_medium;
+                break;
+        case SD_NDISC_PREFERENCE_HIGH:
+                route->priority = link->network->ipv6_accept_ra_route_metric_high;
+                break;
+        default:
+                assert_not_reached();
         }
-
-        r = set_ensure_put(&link->ndisc_routes, &ndisc_route_hash_ops, nr);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store NDisc SLAAC route: %m");
-        assert(r > 0);
-        TAKE_PTR(nr);
-
-        return 0;
-}
-
-static void ndisc_request_on_free(Request *req) {
-        assert(req);
-
-        sd_ndisc_router_unref(req->userdata);
 }
 
 static int ndisc_request_route(Route *in, Link *link, sd_ndisc_router *rt) {
         _cleanup_(route_freep) Route *route = in;
-        Request *req;
+        struct in6_addr router;
+        bool is_new;
         int r;
 
         assert(route);
         assert(link);
+        assert(link->network);
         assert(rt);
 
-        r = link_has_route(link, route);
+        r = sd_ndisc_router_get_address(rt, &router);
         if (r < 0)
                 return r;
-        if (r == 0)
-                link->ndisc_routes_configured = false;
 
-        r = link_request_route(link, TAKE_PTR(route), true, &link->ndisc_routes_messages,
-                               ndisc_route_handler, &req);
-        if (r <= 0)
+        route->source = NETWORK_CONFIG_SOURCE_NDISC;
+        route->provider.in6 = router;
+        if (!route->table_set)
+                route->table = link_get_ipv6_accept_ra_route_table(link);
+        ndisc_set_route_priority(link, route);
+        if (!route->protocol_set)
+                route->protocol = RTPROT_RA;
+        if (route->quickack < 0)
+                route->quickack = link->network->ipv6_accept_ra_quickack;
+
+        is_new = route_get(NULL, link, route, NULL) < 0;
+
+        r = link_request_route(link, TAKE_PTR(route), true, &link->ndisc_messages,
+                               ndisc_route_handler, NULL);
+        if (r < 0)
                 return r;
-
-        req->userdata = sd_ndisc_router_ref(rt);
-        req->after_configure = ndisc_after_route_configure;
-        req->on_free = ndisc_request_on_free;
+        if (r > 0 && is_new)
+                link->ndisc_configured = false;
 
         return 0;
 }
 
-static void ndisc_address_hash_func(const NDiscAddress *x, struct siphash *state) {
-        address_hash_func(x->address, state);
-}
-
-static int ndisc_address_compare_func(const NDiscAddress *a, const NDiscAddress *b) {
-        return address_compare_func(a->address, b->address);
-}
-
-DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
-                ndisc_address_hash_ops,
-                NDiscAddress,
-                ndisc_address_hash_func,
-                ndisc_address_compare_func,
-                free);
-
-static int ndisc_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int ndisc_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Address *address) {
         int r;
 
         assert(link);
-        assert(link->ndisc_addresses_messages > 0);
-
-        link->ndisc_addresses_messages--;
 
         r = address_configure_handler_internal(rtnl, m, link, "Could not set NDisc address");
         if (r <= 0)
                 return r;
 
-        if (link->ndisc_addresses_messages == 0) {
-                log_link_debug(link, "NDisc SLAAC addresses set.");
-                link->ndisc_addresses_configured = true;
-
-                r = ndisc_remove_old(link);
-                if (r < 0) {
-                        link_enter_failed(link);
-                        return 1;
-                }
-        }
+        r = ndisc_check_ready(link);
+        if (r < 0)
+                link_enter_failed(link);
 
         return 1;
 }
 
-static int ndisc_after_address_configure(Request *req, void *object) {
-        _cleanup_free_ NDiscAddress *na = NULL;
-        NDiscAddress *na_exist;
-        struct in6_addr router;
-        sd_ndisc_router *rt;
-        Address *address = object;
-        Link *link;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ADDRESS);
-        assert(req->userdata);
-        assert(address);
-
-        link = req->link;
-        rt = req->userdata;
-
-        r = sd_ndisc_router_get_address(rt, &router);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get router address from RA: %m");
-
-        na = new(NDiscAddress, 1);
-        if (!na)
-                return log_oom();
-
-        *na = (NDiscAddress) {
-                .router = router,
-                .address = address,
-        };
-
-        na_exist = set_get(link->ndisc_addresses, na);
-        if (na_exist) {
-                na_exist->marked = false;
-                na_exist->router = router;
-                return 0;
-        }
-
-        r = set_ensure_put(&link->ndisc_addresses, &ndisc_address_hash_ops, na);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to store NDisc SLAAC address: %m");
-        assert(r > 0);
-        TAKE_PTR(na);
-
-        return 0;
-}
-
 static int ndisc_request_address(Address *in, Link *link, sd_ndisc_router *rt) {
         _cleanup_(address_freep) Address *address = in;
-        Request *req;
+        struct in6_addr router;
+        bool is_new;
         int r;
 
         assert(address);
         assert(link);
         assert(rt);
 
-        if (address_get(link, address, NULL) < 0)
-                link->ndisc_addresses_configured = false;
-
-        r = link_request_address(link, TAKE_PTR(address), true, &link->ndisc_addresses_messages,
-                                 ndisc_address_handler, &req);
-        if (r <= 0)
+        r = sd_ndisc_router_get_address(rt, &router);
+        if (r < 0)
                 return r;
 
-        req->userdata = sd_ndisc_router_ref(rt);
-        req->after_configure = ndisc_after_address_configure;
-        req->on_free = ndisc_request_on_free;
+        address->source = NETWORK_CONFIG_SOURCE_NDISC;
+        address->provider.in6 = router;
+
+        r = free_and_strdup_warn(&address->netlabel, link->network->ndisc_netlabel);
+        if (r < 0)
+                return r;
+
+        is_new = address_get(link, address, NULL) < 0;
+
+        r = link_request_address(link, TAKE_PTR(address), true, &link->ndisc_messages,
+                                 ndisc_address_handler, NULL);
+        if (r < 0)
+                return r;
+        if (r > 0 && is_new)
+                link->ndisc_configured = false;
 
         return 0;
 }
 
 static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) {
-        _cleanup_(route_freep) Route *route = NULL;
+        usec_t lifetime_usec, timestamp_usec;
         struct in6_addr gateway;
-        uint16_t lifetime;
+        uint16_t lifetime_sec;
         unsigned preference;
-        uint32_t table, mtu;
-        usec_t time_now;
+        uint32_t mtu = 0;
         int r;
 
         assert(link);
+        assert(link->network);
         assert(rt);
 
-        r = sd_ndisc_router_get_lifetime(rt, &lifetime);
+        if (!link->network->ipv6_accept_ra_use_gateway &&
+            hashmap_isempty(link->network->routes_by_section))
+                return 0;
+
+        r = sd_ndisc_router_get_lifetime(rt, &lifetime_sec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get gateway lifetime from RA: %m");
 
-        if (lifetime == 0) /* not a default router */
-                return 0;
+        r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, &timestamp_usec);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
+
+        lifetime_usec = sec16_to_usec(lifetime_sec, timestamp_usec);
 
         r = sd_ndisc_router_get_address(rt, &gateway);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get gateway address from RA: %m");
 
-        if (link_get_ipv6_address(link, &gateway, NULL) >= 0) {
-                if (DEBUG_LOGGING) {
-                        _cleanup_free_ char *buffer = NULL;
-
-                        (void) in6_addr_to_string(&gateway, &buffer);
+        if (link_get_ipv6_address(link, &gateway, 0, NULL) >= 0) {
+                if (DEBUG_LOGGING)
                         log_link_debug(link, "No NDisc route added, gateway %s matches local address",
-                                       strna(buffer));
-                }
+                                       IN6_ADDR_TO_STRING(&gateway));
                 return 0;
         }
 
@@ -556,38 +292,35 @@
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get default router preference from RA: %m");
 
-        r = sd_ndisc_router_get_timestamp(rt, clock_boottime_or_monotonic(), &time_now);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
+        if (link->network->ipv6_accept_ra_use_mtu) {
+                r = sd_ndisc_router_get_mtu(rt, &mtu);
+                if (r < 0 && r != -ENODATA)
+                        return log_link_error_errno(link, r, "Failed to get default router MTU from RA: %m");
+        }
 
-        r = sd_ndisc_router_get_mtu(rt, &mtu);
-        if (r == -ENODATA)
-                mtu = 0;
-        else if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get default router MTU from RA: %m");
+        if (link->network->ipv6_accept_ra_use_gateway) {
+                _cleanup_(route_freep) Route *route = NULL;
 
-        table = link_get_ipv6_accept_ra_route_table(link);
+                r = route_new(&route);
+                if (r < 0)
+                        return log_oom();
 
-        r = route_new(&route);
-        if (r < 0)
-                return log_oom();
+                route->family = AF_INET6;
+                route->pref = preference;
+                route->gw_family = AF_INET6;
+                route->gw.in6 = gateway;
+                route->lifetime_usec = lifetime_usec;
+                route->mtu = mtu;
 
-        route->family = AF_INET6;
-        route->table = table;
-        route->priority = link->network->ipv6_accept_ra_route_metric;
-        route->protocol = RTPROT_RA;
-        route->pref = preference;
-        route->gw_family = AF_INET6;
-        route->gw.in6 = gateway;
-        route->lifetime = usec_add(time_now, lifetime * USEC_PER_SEC);
-        route->mtu = mtu;
-
-        r = ndisc_request_route(TAKE_PTR(route), link, rt);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not request default route: %m");
+                r = ndisc_request_route(TAKE_PTR(route), link, rt);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Could not request default route: %m");
+        }
 
         Route *route_gw;
         HASHMAP_FOREACH(route_gw, link->network->routes_by_section) {
+                _cleanup_(route_freep) Route *route = NULL;
+
                 if (!route_gw->gateway_from_dhcp_or_ra)
                         continue;
 
@@ -599,15 +332,9 @@
                         return r;
 
                 route->gw.in6 = gateway;
-                if (!route->table_set)
-                        route->table = table;
-                if (!route->priority_set)
-                        route->priority = link->network->ipv6_accept_ra_route_metric;
-                if (!route->protocol_set)
-                        route->protocol = RTPROT_RA;
                 if (!route->pref_set)
                         route->pref = preference;
-                route->lifetime = usec_add(time_now, lifetime * USEC_PER_SEC);
+                route->lifetime_usec = lifetime_usec;
                 if (route->mtu == 0)
                         route->mtu = mtu;
 
@@ -619,190 +346,61 @@
         return 0;
 }
 
-static bool stableprivate_address_is_valid(const struct in6_addr *addr) {
-        assert(addr);
-
-        /* According to rfc4291, generated address should not be in the following ranges. */
-
-        if (memcmp(addr, &SUBNET_ROUTER_ANYCAST_ADDRESS_RFC4291, SUBNET_ROUTER_ANYCAST_PREFIXLEN) == 0)
-                return false;
-
-        if (memcmp(addr, &RESERVED_IPV6_INTERFACE_IDENTIFIERS_ADDRESS_RFC4291, RESERVED_IPV6_INTERFACE_IDENTIFIERS_PREFIXLEN) == 0)
-                return false;
-
-        if (memcmp(addr, &RESERVED_SUBNET_ANYCAST_ADDRESSES_RFC4291, RESERVED_SUBNET_ANYCAST_PREFIXLEN) == 0)
-                return false;
-
-        return true;
-}
-
-static int make_stableprivate_address(Link *link, const struct in6_addr *prefix, uint8_t prefix_len, uint8_t dad_counter, struct in6_addr **ret) {
-        _cleanup_free_ struct in6_addr *addr = NULL;
-        sd_id128_t secret_key;
-        struct siphash state;
-        uint64_t rid;
-        size_t l;
-        int r;
-
-        /* According to rfc7217 section 5.1
-         * RID = F(Prefix, Net_Iface, Network_ID, DAD_Counter, secret_key) */
-
-        r = sd_id128_get_machine_app_specific(NDISC_APP_ID, &secret_key);
-        if (r < 0)
-                return log_error_errno(r, "Failed to generate key: %m");
-
-        siphash24_init(&state, secret_key.bytes);
-
-        l = MAX(DIV_ROUND_UP(prefix_len, 8), 8);
-        siphash24_compress(prefix, l, &state);
-        siphash24_compress_string(link->ifname, &state);
-        /* Only last 8 bytes of IB MAC are stable */
-        if (link->iftype == ARPHRD_INFINIBAND)
-                siphash24_compress(&link->hw_addr.infiniband[12], 8, &state);
-        else
-                siphash24_compress(link->hw_addr.bytes, link->hw_addr.length, &state);
-        siphash24_compress(&dad_counter, sizeof(uint8_t), &state);
-
-        rid = htole64(siphash24_finalize(&state));
-
-        addr = new(struct in6_addr, 1);
-        if (!addr)
-                return log_oom();
-
-        memcpy(addr->s6_addr, prefix->s6_addr, l);
-        memcpy(addr->s6_addr + l, &rid, 16 - l);
-
-        if (!stableprivate_address_is_valid(addr)) {
-                *ret = NULL;
-                return 0;
-        }
-
-        *ret = TAKE_PTR(addr);
-        return 1;
-}
-
-static int ndisc_router_generate_addresses(Link *link, struct in6_addr *address, uint8_t prefixlen, Set **ret) {
-        _cleanup_set_free_free_ Set *addresses = NULL;
-        IPv6Token *j;
-        int r;
-
-        assert(link);
-        assert(address);
-        assert(ret);
-
-        addresses = set_new(&in6_addr_hash_ops);
-        if (!addresses)
-                return log_oom();
-
-        ORDERED_SET_FOREACH(j, link->network->ipv6_tokens) {
-                _cleanup_free_ struct in6_addr *new_address = NULL;
-
-                if (j->address_generation_type == IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE
-                    && (in6_addr_is_null(&j->prefix) || in6_addr_equal(&j->prefix, address))) {
-                        /* While this loop uses dad_counter and a retry limit as specified in RFC 7217, the loop
-                         * does not actually attempt Duplicate Address Detection; the counter will be incremented
-                         * only when the address generation algorithm produces an invalid address, and the loop
-                         * may exit with an address which ends up being unusable due to duplication on the link. */
-                        for (; j->dad_counter < DAD_CONFLICTS_IDGEN_RETRIES_RFC7217; j->dad_counter++) {
-                                r = make_stableprivate_address(link, address, prefixlen, j->dad_counter, &new_address);
-                                if (r < 0)
-                                        return r;
-                                if (r > 0)
-                                        break;
-                        }
-                } else if (j->address_generation_type == IPV6_TOKEN_ADDRESS_GENERATION_STATIC) {
-                        new_address = new(struct in6_addr, 1);
-                        if (!new_address)
-                                return log_oom();
-
-                        memcpy(new_address->s6_addr, address->s6_addr, 8);
-                        memcpy(new_address->s6_addr + 8, j->prefix.s6_addr + 8, 8);
-                }
-
-                if (new_address) {
-                        r = set_put(addresses, new_address);
-                        if (r < 0)
-                                return log_link_error_errno(link, r, "Failed to store SLAAC address: %m");
-                        else if (r == 0)
-                                log_link_debug_errno(link, r, "Generated SLAAC address is duplicated, ignoring.");
-                        else
-                                TAKE_PTR(new_address);
-                }
-        }
-
-        /* fall back to EUI-64 if no tokens provided addresses */
-        if (set_isempty(addresses)) {
-                _cleanup_free_ struct in6_addr *new_address = NULL;
-
-                new_address = newdup(struct in6_addr, address, 1);
-                if (!new_address)
-                        return log_oom();
-
-                r = generate_ipv6_eui_64_address(link, new_address);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to generate EUI64 address: %m");
-
-                r = set_put(addresses, new_address);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to store SLAAC address: %m");
-
-                TAKE_PTR(new_address);
-        }
-
-        *ret = TAKE_PTR(addresses);
-
-        return 0;
-}
-
 static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *rt) {
-        uint32_t lifetime_valid, lifetime_preferred;
-        _cleanup_set_free_free_ Set *addresses = NULL;
-        struct in6_addr addr, *a;
+        uint32_t lifetime_valid_sec, lifetime_preferred_sec;
+        usec_t lifetime_valid_usec, lifetime_preferred_usec, timestamp_usec;
+        _cleanup_set_free_ Set *addresses = NULL;
+        struct in6_addr prefix, *a;
         unsigned prefixlen;
-        usec_t time_now;
         int r;
 
         assert(link);
+        assert(link->network);
         assert(rt);
 
-        /* Do not use clock_boottime_or_monotonic() here, as the kernel internally manages cstamp and
-         * tstamp with jiffies, and it is not increased while the system is suspended. */
-        r = sd_ndisc_router_get_timestamp(rt, CLOCK_MONOTONIC, &time_now);
+        if (!link->network->ipv6_accept_ra_use_autonomous_prefix)
+                return 0;
+
+        r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, &timestamp_usec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
 
+        r = sd_ndisc_router_prefix_get_address(rt, &prefix);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get prefix address: %m");
+
         r = sd_ndisc_router_prefix_get_prefixlen(rt, &prefixlen);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get prefix length: %m");
 
-        r = sd_ndisc_router_prefix_get_valid_lifetime(rt, &lifetime_valid);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get prefix valid lifetime: %m");
-
-        if (lifetime_valid == 0) {
-                log_link_debug(link, "Ignoring prefix as its valid lifetime is zero.");
+        /* ndisc_generate_addresses() below requires the prefix length <= 64. */
+        if (prefixlen > 64) {
+                log_link_debug(link, "Prefix is longer than 64, ignoring autonomous prefix %s.",
+                               IN6_ADDR_PREFIX_TO_STRING(&prefix, prefixlen));
                 return 0;
         }
 
-        r = sd_ndisc_router_prefix_get_preferred_lifetime(rt, &lifetime_preferred);
+        r = sd_ndisc_router_prefix_get_valid_lifetime(rt, &lifetime_valid_sec);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get prefix valid lifetime: %m");
+
+        r = sd_ndisc_router_prefix_get_preferred_lifetime(rt, &lifetime_preferred_sec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get prefix preferred lifetime: %m");
 
         /* The preferred lifetime is never greater than the valid lifetime */
-        if (lifetime_preferred > lifetime_valid)
+        if (lifetime_preferred_sec > lifetime_valid_sec)
                 return 0;
 
-        r = sd_ndisc_router_prefix_get_address(rt, &addr);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get prefix address: %m");
+        lifetime_valid_usec = sec_to_usec(lifetime_valid_sec, timestamp_usec);
+        lifetime_preferred_usec = sec_to_usec(lifetime_preferred_sec, timestamp_usec);
 
-        r = ndisc_router_generate_addresses(link, &addr, prefixlen, &addresses);
+        r = ndisc_generate_addresses(link, &prefix, prefixlen, &addresses);
         if (r < 0)
-                return r;
+                return log_link_error_errno(link, r, "Failed to generate SLAAC addresses: %m");
 
         SET_FOREACH(a, addresses) {
                 _cleanup_(address_freep) Address *address = NULL;
-                Address *e;
 
                 r = address_new(&address);
                 if (r < 0)
@@ -812,21 +410,8 @@
                 address->in_addr.in6 = *a;
                 address->prefixlen = prefixlen;
                 address->flags = IFA_F_NOPREFIXROUTE|IFA_F_MANAGETEMPADDR;
-                address->cinfo.ifa_valid = lifetime_valid;
-                address->cinfo.ifa_prefered = lifetime_preferred;
-
-                /* See RFC4862, section 5.5.3.e. But the following logic is deviated from RFC4862 by
-                 * honoring all valid lifetimes to improve the reaction of SLAAC to renumbering events.
-                 * See draft-ietf-6man-slaac-renum-02, section 4.2. */
-                r = address_get(link, address, &e);
-                if (r > 0) {
-                        /* If the address is already assigned, but not valid anymore, then refuse to
-                         * update the address, and it will be removed. */
-                        if (e->cinfo.ifa_valid != CACHE_INFO_INFINITY_LIFE_TIME &&
-                            usec_add(e->cinfo.tstamp / 100 * USEC_PER_SEC,
-                                     e->cinfo.ifa_valid * USEC_PER_SEC) < time_now)
-                                continue;
-                }
+                address->lifetime_valid_usec = lifetime_valid_usec;
+                address->lifetime_preferred_usec = lifetime_preferred_usec;
 
                 r = ndisc_request_address(TAKE_PTR(address), link, rt);
                 if (r < 0)
@@ -838,82 +423,144 @@
 
 static int ndisc_router_process_onlink_prefix(Link *link, sd_ndisc_router *rt) {
         _cleanup_(route_freep) Route *route = NULL;
-        usec_t time_now;
-        uint32_t lifetime;
+        usec_t timestamp_usec;
+        uint32_t lifetime_sec;
+        struct in6_addr prefix;
         unsigned prefixlen;
         int r;
 
         assert(link);
+        assert(link->network);
         assert(rt);
 
-        r = sd_ndisc_router_get_timestamp(rt, clock_boottime_or_monotonic(), &time_now);
+        if (!link->network->ipv6_accept_ra_use_onlink_prefix)
+                return 0;
+
+        r = sd_ndisc_router_prefix_get_valid_lifetime(rt, &lifetime_sec);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get prefix lifetime: %m");
+
+        r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, &timestamp_usec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
 
+        r = sd_ndisc_router_prefix_get_address(rt, &prefix);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get prefix address: %m");
+
         r = sd_ndisc_router_prefix_get_prefixlen(rt, &prefixlen);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get prefix length: %m");
 
-        r = sd_ndisc_router_prefix_get_valid_lifetime(rt, &lifetime);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get prefix lifetime: %m");
-
         r = route_new(&route);
         if (r < 0)
                 return log_oom();
 
         route->family = AF_INET6;
-        route->table = link_get_ipv6_accept_ra_route_table(link);
-        route->priority = link->network->ipv6_accept_ra_route_metric;
-        route->protocol = RTPROT_RA;
-        route->flags = RTM_F_PREFIX;
+        route->dst.in6 = prefix;
         route->dst_prefixlen = prefixlen;
-        route->lifetime = usec_add(time_now, lifetime * USEC_PER_SEC);
-
-        r = sd_ndisc_router_prefix_get_address(rt, &route->dst.in6);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get prefix address: %m");
+        route->lifetime_usec = sec_to_usec(lifetime_sec, timestamp_usec);
 
         r = ndisc_request_route(TAKE_PTR(route), link, rt);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not request prefix route: %m");;
+                return log_link_error_errno(link, r, "Could not request prefix route: %m");
+
+        return 0;
+}
+
+static int ndisc_router_process_prefix(Link *link, sd_ndisc_router *rt) {
+        unsigned prefixlen;
+        struct in6_addr a;
+        uint8_t flags;
+        int r;
+
+        assert(link);
+        assert(link->network);
+        assert(rt);
+
+        r = sd_ndisc_router_prefix_get_address(rt, &a);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get prefix address: %m");
+
+        /* RFC 4861 Section 4.6.2:
+         * A router SHOULD NOT send a prefix option for the link-local prefix and a host SHOULD ignore such
+         * a prefix option. */
+        if (in6_addr_is_link_local(&a)) {
+                log_link_debug(link, "Received link-local prefix, ignoring autonomous prefix.");
+                return 0;
+        }
+
+        r = sd_ndisc_router_prefix_get_prefixlen(rt, &prefixlen);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get prefix length: %m");
+
+        if (in6_prefix_is_filtered(&a, prefixlen, link->network->ndisc_allow_listed_prefix, link->network->ndisc_deny_listed_prefix)) {
+                if (DEBUG_LOGGING)
+                        log_link_debug(link, "Prefix '%s' is %s, ignoring",
+                                       !set_isempty(link->network->ndisc_allow_listed_prefix) ? "not in allow list"
+                                                                                              : "in deny list",
+                                       IN6_ADDR_PREFIX_TO_STRING(&a, prefixlen));
+                return 0;
+        }
+
+        r = sd_ndisc_router_prefix_get_flags(rt, &flags);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get RA prefix flags: %m");
+
+        if (FLAGS_SET(flags, ND_OPT_PI_FLAG_ONLINK)) {
+                r = ndisc_router_process_onlink_prefix(link, rt);
+                if (r < 0)
+                        return r;
+        }
+
+        if (FLAGS_SET(flags, ND_OPT_PI_FLAG_AUTO)) {
+                r = ndisc_router_process_autonomous_prefix(link, rt);
+                if (r < 0)
+                        return r;
+        }
 
         return 0;
 }
 
 static int ndisc_router_process_route(Link *link, sd_ndisc_router *rt) {
         _cleanup_(route_freep) Route *route = NULL;
-        struct in6_addr gateway, dst;
-        uint32_t lifetime;
         unsigned preference, prefixlen;
-        usec_t time_now;
+        struct in6_addr gateway, dst;
+        uint32_t lifetime_sec;
+        usec_t timestamp_usec;
         int r;
 
         assert(link);
 
-        r = sd_ndisc_router_route_get_lifetime(rt, &lifetime);
+        if (!link->network->ipv6_accept_ra_use_route_prefix)
+                return 0;
+
+        r = sd_ndisc_router_route_get_lifetime(rt, &lifetime_sec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get route lifetime from RA: %m");
 
-        if (lifetime == 0)
-                return 0;
-
         r = sd_ndisc_router_route_get_address(rt, &dst);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get route destination address: %m");
 
-        if ((!set_isempty(link->network->ndisc_allow_listed_route_prefix) &&
-             !set_contains(link->network->ndisc_allow_listed_route_prefix, &dst)) ||
-            set_contains(link->network->ndisc_deny_listed_route_prefix, &dst)) {
-                if (DEBUG_LOGGING) {
-                        _cleanup_free_ char *buf = NULL;
+        r = sd_ndisc_router_route_get_prefixlen(rt, &prefixlen);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get route prefix length: %m");
 
-                        (void) in6_addr_to_string(&dst, &buf);
-                        if (!set_isempty(link->network->ndisc_allow_listed_route_prefix))
-                                log_link_debug(link, "Route prefix '%s' is not in allow list, ignoring", strna(buf));
-                        else
-                                log_link_debug(link, "Route prefix '%s' is in deny list, ignoring", strna(buf));
-                }
+        if (in6_addr_is_null(&dst) && prefixlen == 0) {
+                log_link_debug(link, "Route prefix is ::/0, ignoring");
+                return 0;
+        }
+
+        if (in6_prefix_is_filtered(&dst, prefixlen,
+                                   link->network->ndisc_allow_listed_route_prefix,
+                                   link->network->ndisc_deny_listed_route_prefix)) {
+
+                if (DEBUG_LOGGING)
+                        log_link_debug(link, "Route prefix %s is %s, ignoring",
+                                       !set_isempty(link->network->ndisc_allow_listed_route_prefix) ? "not in allow list"
+                                                                                                    : "in deny list",
+                                       IN6_ADDR_PREFIX_TO_STRING(&dst, prefixlen));
                 return 0;
         }
 
@@ -921,25 +568,18 @@
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get gateway address from RA: %m");
 
-        if (link_get_ipv6_address(link, &gateway, NULL) >= 0) {
-                if (DEBUG_LOGGING) {
-                        _cleanup_free_ char *buf = NULL;
-
-                        (void) in6_addr_to_string(&gateway, &buf);
-                        log_link_debug(link, "Advertised route gateway %s is local to the link, ignoring route", strna(buf));
-                }
+        if (link_get_ipv6_address(link, &gateway, 0, NULL) >= 0) {
+                if (DEBUG_LOGGING)
+                        log_link_debug(link, "Advertised route gateway %s is local to the link, ignoring route",
+                                       IN6_ADDR_TO_STRING(&gateway));
                 return 0;
         }
 
-        r = sd_ndisc_router_route_get_prefixlen(rt, &prefixlen);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get route prefix length: %m");
-
         r = sd_ndisc_router_route_get_preference(rt, &preference);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get default router preference from RA: %m");
 
-        r = sd_ndisc_router_get_timestamp(rt, clock_boottime_or_monotonic(), &time_now);
+        r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, &timestamp_usec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
 
@@ -948,15 +588,12 @@
                 return log_oom();
 
         route->family = AF_INET6;
-        route->table = link_get_ipv6_accept_ra_route_table(link);
-        route->priority = link->network->ipv6_accept_ra_route_metric;
-        route->protocol = RTPROT_RA;
         route->pref = preference;
         route->gw.in6 = gateway;
         route->gw_family = AF_INET6;
         route->dst.in6 = dst;
         route->dst_prefixlen = prefixlen;
-        route->lifetime = usec_add(time_now, lifetime * USEC_PER_SEC);
+        route->lifetime_usec = sec_to_usec(lifetime_sec, timestamp_usec);
 
         r = ndisc_request_route(TAKE_PTR(route), link, rt);
         if (r < 0)
@@ -981,56 +618,62 @@
                 free);
 
 static int ndisc_router_process_rdnss(Link *link, sd_ndisc_router *rt) {
-        uint32_t lifetime;
+        usec_t lifetime_usec, timestamp_usec;
+        uint32_t lifetime_sec;
         const struct in6_addr *a;
         struct in6_addr router;
-        NDiscRDNSS *rdnss;
-        usec_t time_now;
-        bool updated = false;
+        bool updated = false, logged_about_too_many = false;
         int n, r;
 
         assert(link);
+        assert(link->network);
         assert(rt);
 
+        if (!link->network->ipv6_accept_ra_use_dns)
+                return 0;
+
         r = sd_ndisc_router_get_address(rt, &router);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get router address from RA: %m");
 
-        r = sd_ndisc_router_get_timestamp(rt, clock_boottime_or_monotonic(), &time_now);
+        r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, &timestamp_usec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
 
-        r = sd_ndisc_router_rdnss_get_lifetime(rt, &lifetime);
+        r = sd_ndisc_router_rdnss_get_lifetime(rt, &lifetime_sec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get RDNSS lifetime: %m");
 
+        lifetime_usec = sec_to_usec(lifetime_sec, timestamp_usec);
+
         n = sd_ndisc_router_rdnss_get_addresses(rt, &a);
         if (n < 0)
                 return log_link_error_errno(link, n, "Failed to get RDNSS addresses: %m");
 
-        SET_FOREACH(rdnss, link->ndisc_rdnss)
-                if (in6_addr_equal(&rdnss->router, &router))
-                        rdnss->marked = true;
-
-        if (lifetime == 0)
-                return 0;
-
-        if (n >= (int) NDISC_RDNSS_MAX) {
-                log_link_warning(link, "Too many RDNSS records per link. Only first %i records will be used.", NDISC_RDNSS_MAX);
-                n = NDISC_RDNSS_MAX;
-        }
-
         for (int j = 0; j < n; j++) {
                 _cleanup_free_ NDiscRDNSS *x = NULL;
-                NDiscRDNSS d = {
+                NDiscRDNSS *rdnss, d = {
                         .address = a[j],
                 };
 
+                if (lifetime_usec == 0) {
+                        /* The entry is outdated. */
+                        free(set_remove(link->ndisc_rdnss, &d));
+                        updated = true;
+                        continue;
+                }
+
                 rdnss = set_get(link->ndisc_rdnss, &d);
                 if (rdnss) {
-                        rdnss->marked = false;
                         rdnss->router = router;
-                        rdnss->valid_until = time_now + lifetime * USEC_PER_SEC;
+                        rdnss->lifetime_usec = lifetime_usec;
+                        continue;
+                }
+
+                if (set_size(link->ndisc_rdnss) >= NDISC_RDNSS_MAX) {
+                        if (!logged_about_too_many)
+                                log_link_warning(link, "Too many RDNSS records per link. Only first %u records will be used.", NDISC_RDNSS_MAX);
+                        logged_about_too_many = true;
                         continue;
                 }
 
@@ -1041,7 +684,7 @@
                 *x = (NDiscRDNSS) {
                         .address = a[j],
                         .router = router,
-                        .valid_until = time_now + lifetime * USEC_PER_SEC,
+                        .lifetime_usec = lifetime_usec,
                 };
 
                 r = set_ensure_consume(&link->ndisc_rdnss, &ndisc_rdnss_hash_ops, TAKE_PTR(x));
@@ -1075,48 +718,40 @@
 
 static int ndisc_router_process_dnssl(Link *link, sd_ndisc_router *rt) {
         _cleanup_strv_free_ char **l = NULL;
+        usec_t lifetime_usec, timestamp_usec;
         struct in6_addr router;
-        uint32_t lifetime;
-        usec_t time_now;
-        NDiscDNSSL *dnssl;
-        bool updated = false;
-        char **j;
+        uint32_t lifetime_sec;
+        bool updated = false, logged_about_too_many = false;
         int r;
 
         assert(link);
+        assert(link->network);
         assert(rt);
 
+        if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_NO)
+                return 0;
+
         r = sd_ndisc_router_get_address(rt, &router);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get router address from RA: %m");
 
-        r = sd_ndisc_router_get_timestamp(rt, clock_boottime_or_monotonic(), &time_now);
+        r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, &timestamp_usec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
 
-        r = sd_ndisc_router_dnssl_get_lifetime(rt, &lifetime);
+        r = sd_ndisc_router_dnssl_get_lifetime(rt, &lifetime_sec);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get DNSSL lifetime: %m");
 
+        lifetime_usec = sec_to_usec(lifetime_sec, timestamp_usec);
+
         r = sd_ndisc_router_dnssl_get_domains(rt, &l);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get DNSSL addresses: %m");
 
-        SET_FOREACH(dnssl, link->ndisc_dnssl)
-                if (in6_addr_equal(&dnssl->router, &router))
-                        dnssl->marked = true;
-
-        if (lifetime == 0)
-                return 0;
-
-        if (strv_length(l) >= NDISC_DNSSL_MAX) {
-                log_link_warning(link, "Too many DNSSL records per link. Only first %i records will be used.", NDISC_DNSSL_MAX);
-                STRV_FOREACH(j, l + NDISC_DNSSL_MAX)
-                        *j = mfree(*j);
-        }
-
         STRV_FOREACH(j, l) {
                 _cleanup_free_ NDiscDNSSL *s = NULL;
+                NDiscDNSSL *dnssl;
 
                 s = malloc0(ALIGN(sizeof(NDiscDNSSL)) + strlen(*j) + 1);
                 if (!s)
@@ -1124,16 +759,29 @@
 
                 strcpy(NDISC_DNSSL_DOMAIN(s), *j);
 
+                if (lifetime_usec == 0) {
+                        /* The entry is outdated. */
+                        free(set_remove(link->ndisc_dnssl, s));
+                        updated = true;
+                        continue;
+                }
+
                 dnssl = set_get(link->ndisc_dnssl, s);
                 if (dnssl) {
-                        dnssl->marked = false;
                         dnssl->router = router;
-                        dnssl->valid_until = time_now + lifetime * USEC_PER_SEC;
+                        dnssl->lifetime_usec = lifetime_usec;
+                        continue;
+                }
+
+                if (set_size(link->ndisc_dnssl) >= NDISC_DNSSL_MAX) {
+                        if (!logged_about_too_many)
+                                log_link_warning(link, "Too many DNSSL records per link. Only first %u records will be used.", NDISC_DNSSL_MAX);
+                        logged_about_too_many = true;
                         continue;
                 }
 
                 s->router = router;
-                s->valid_until = time_now + lifetime * USEC_PER_SEC;
+                s->lifetime_usec = lifetime_usec;
 
                 r = set_ensure_consume(&link->ndisc_dnssl, &ndisc_dnssl_hash_ops, TAKE_PTR(s));
                 if (r < 0)
@@ -1150,11 +798,13 @@
 }
 
 static int ndisc_router_process_options(Link *link, sd_ndisc_router *rt) {
+        int r;
+
         assert(link);
         assert(link->network);
         assert(rt);
 
-        for (int r = sd_ndisc_router_option_rewind(rt); ; r = sd_ndisc_router_option_next(rt)) {
+        for (r = sd_ndisc_router_option_rewind(rt); ; r = sd_ndisc_router_option_next(rt)) {
                 uint8_t type;
 
                 if (r < 0)
@@ -1167,80 +817,198 @@
                         return log_link_error_errno(link, r, "Failed to get RA option type: %m");
 
                 switch (type) {
-
-                case SD_NDISC_OPTION_PREFIX_INFORMATION: {
-                        struct in6_addr a;
-                        uint8_t flags;
-
-                        r = sd_ndisc_router_prefix_get_address(rt, &a);
-                        if (r < 0)
-                                return log_link_error_errno(link, r, "Failed to get prefix address: %m");
-
-                        if ((!set_isempty(link->network->ndisc_allow_listed_prefix) &&
-                             !set_contains(link->network->ndisc_allow_listed_prefix, &a)) ||
-                            set_contains(link->network->ndisc_deny_listed_prefix, &a)) {
-                                if (DEBUG_LOGGING) {
-                                        _cleanup_free_ char *b = NULL;
-
-                                        (void) in6_addr_to_string(&a, &b);
-                                        if (!set_isempty(link->network->ndisc_allow_listed_prefix))
-                                                log_link_debug(link, "Prefix '%s' is not in allow list, ignoring", strna(b));
-                                        else
-                                                log_link_debug(link, "Prefix '%s' is in deny list, ignoring", strna(b));
-                                }
-                                break;
-                        }
-
-                        r = sd_ndisc_router_prefix_get_flags(rt, &flags);
-                        if (r < 0)
-                                return log_link_error_errno(link, r, "Failed to get RA prefix flags: %m");
-
-                        if (link->network->ipv6_accept_ra_use_onlink_prefix &&
-                            FLAGS_SET(flags, ND_OPT_PI_FLAG_ONLINK)) {
-                                r = ndisc_router_process_onlink_prefix(link, rt);
-                                if (r < 0)
-                                        return r;
-                        }
-
-                        if (link->network->ipv6_accept_ra_use_autonomous_prefix &&
-                            FLAGS_SET(flags, ND_OPT_PI_FLAG_AUTO)) {
-                                r = ndisc_router_process_autonomous_prefix(link, rt);
-                                if (r < 0)
-                                        return r;
-                        }
+                case SD_NDISC_OPTION_PREFIX_INFORMATION:
+                        r = ndisc_router_process_prefix(link, rt);
                         break;
-                }
 
                 case SD_NDISC_OPTION_ROUTE_INFORMATION:
                         r = ndisc_router_process_route(link, rt);
-                        if (r < 0)
-                                return r;
                         break;
 
                 case SD_NDISC_OPTION_RDNSS:
-                        if (link->network->ipv6_accept_ra_use_dns) {
-                                r = ndisc_router_process_rdnss(link, rt);
-                                if (r < 0)
-                                        return r;
-                        }
+                        r = ndisc_router_process_rdnss(link, rt);
                         break;
 
                 case SD_NDISC_OPTION_DNSSL:
-                        if (link->network->ipv6_accept_ra_use_dns) {
-                                r = ndisc_router_process_dnssl(link, rt);
-                                if (r < 0)
-                                        return r;
-                        }
+                        r = ndisc_router_process_dnssl(link, rt);
                         break;
                 }
+                if (r < 0 && r != -EBADMSG)
+                        return r;
         }
 }
 
+static int ndisc_drop_outdated(Link *link, usec_t timestamp_usec) {
+        bool updated = false;
+        NDiscDNSSL *dnssl;
+        NDiscRDNSS *rdnss;
+        Address *address;
+        Route *route;
+        int r = 0, k;
+
+        assert(link);
+
+        /* If an address or friends is already assigned, but not valid anymore, then refuse to update it,
+         * and let's immediately remove it.
+         * See RFC4862, section 5.5.3.e. But the following logic is deviated from RFC4862 by honoring all
+         * valid lifetimes to improve the reaction of SLAAC to renumbering events.
+         * See draft-ietf-6man-slaac-renum-02, section 4.2. */
+
+        SET_FOREACH(route, link->routes) {
+                if (route->source != NETWORK_CONFIG_SOURCE_NDISC)
+                        continue;
+
+                if (route->lifetime_usec >= timestamp_usec)
+                        continue; /* the route is still valid */
+
+                k = route_remove_and_drop(route);
+                if (k < 0)
+                        r = log_link_warning_errno(link, k, "Failed to remove outdated SLAAC route, ignoring: %m");
+        }
+
+        SET_FOREACH(address, link->addresses) {
+                if (address->source != NETWORK_CONFIG_SOURCE_NDISC)
+                        continue;
+
+                if (address->lifetime_valid_usec >= timestamp_usec)
+                        continue; /* the address is still valid */
+
+                k = address_remove_and_drop(address);
+                if (k < 0)
+                        r = log_link_warning_errno(link, k, "Failed to remove outdated SLAAC address, ignoring: %m");
+        }
+
+        SET_FOREACH(rdnss, link->ndisc_rdnss) {
+                if (rdnss->lifetime_usec >= timestamp_usec)
+                        continue; /* the DNS server is still valid */
+
+                free(set_remove(link->ndisc_rdnss, rdnss));
+                updated = true;
+        }
+
+        SET_FOREACH(dnssl, link->ndisc_dnssl) {
+                if (dnssl->lifetime_usec >= timestamp_usec)
+                        continue; /* the DNS domain is still valid */
+
+                free(set_remove(link->ndisc_dnssl, dnssl));
+                updated = true;
+        }
+
+        if (updated)
+                link_dirty(link);
+
+        return r;
+}
+
+static int ndisc_setup_expire(Link *link);
+
+static int ndisc_expire_handler(sd_event_source *s, uint64_t usec, void *userdata) {
+        Link *link = ASSERT_PTR(userdata);
+        usec_t now_usec;
+
+        assert(link->manager);
+
+        assert_se(sd_event_now(link->manager->event, CLOCK_BOOTTIME, &now_usec) >= 0);
+
+        (void) ndisc_drop_outdated(link, now_usec);
+        (void) ndisc_setup_expire(link);
+        return 0;
+}
+
+static int ndisc_setup_expire(Link *link) {
+        usec_t lifetime_usec = USEC_INFINITY;
+        NDiscDNSSL *dnssl;
+        NDiscRDNSS *rdnss;
+        Address *address;
+        Route *route;
+        int r;
+
+        assert(link);
+        assert(link->manager);
+
+        SET_FOREACH(route, link->routes) {
+                if (route->source != NETWORK_CONFIG_SOURCE_NDISC)
+                        continue;
+
+                if (!route_exists(route))
+                        continue;
+
+                lifetime_usec = MIN(lifetime_usec, route->lifetime_usec);
+        }
+
+        SET_FOREACH(address, link->addresses) {
+                if (address->source != NETWORK_CONFIG_SOURCE_NDISC)
+                        continue;
+
+                if (!address_exists(address))
+                        continue;
+
+                lifetime_usec = MIN(lifetime_usec, address->lifetime_valid_usec);
+        }
+
+        SET_FOREACH(rdnss, link->ndisc_rdnss)
+                lifetime_usec = MIN(lifetime_usec, rdnss->lifetime_usec);
+
+        SET_FOREACH(dnssl, link->ndisc_dnssl)
+                lifetime_usec = MIN(lifetime_usec, dnssl->lifetime_usec);
+
+        if (lifetime_usec == USEC_INFINITY)
+                return 0;
+
+        r = event_reset_time(link->manager->event, &link->ndisc_expire, CLOCK_BOOTTIME,
+                             lifetime_usec, 0, ndisc_expire_handler, link, 0, "ndisc-expiration", true);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to update expiration timer for ndisc: %m");
+
+        return 0;
+}
+
+static int ndisc_start_dhcp6_client(Link *link, sd_ndisc_router *rt) {
+        int r;
+
+        assert(link);
+        assert(link->network);
+
+        switch (link->network->ipv6_accept_ra_start_dhcp6_client) {
+        case IPV6_ACCEPT_RA_START_DHCP6_CLIENT_NO:
+                return 0;
+
+        case IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES: {
+                uint64_t flags;
+
+                r = sd_ndisc_router_get_flags(rt, &flags);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to get RA flags: %m");
+
+                if ((flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER)) == 0)
+                        return 0;
+
+                /* (re)start DHCPv6 client in stateful or stateless mode according to RA flags.
+                 * Note, if both "managed" and "other configuration" bits are set, then ignore
+                 * "other configuration" bit. See RFC 4861. */
+                r = dhcp6_start_on_ra(link, !(flags & ND_RA_FLAG_MANAGED));
+                break;
+        }
+        case IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS:
+                /* When IPv6AcceptRA.DHCPv6Client=always, start dhcp6 client in solicit mode
+                 * even if the router flags have neither M nor O flags. */
+                r = dhcp6_start_on_ra(link, /* information_request = */ false);
+                break;
+
+        default:
+                assert_not_reached();
+        }
+
+        if (r < 0)
+                return log_link_error_errno(link, r, "Could not acquire DHCPv6 lease on NDisc request: %m");
+
+        log_link_debug(link, "Acquiring DHCPv6 lease on NDisc request");
+        return 0;
+}
+
 static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
         struct in6_addr router;
-        uint64_t flags;
-        NDiscAddress *na;
-        NDiscRoute *nr;
+        usec_t timestamp_usec;
         int r;
 
         assert(link);
@@ -1249,75 +1017,57 @@
         assert(rt);
 
         r = sd_ndisc_router_get_address(rt, &router);
+        if (r == -ENODATA) {
+                log_link_debug(link, "Received RA without router address, ignoring.");
+                return 0;
+        }
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get router address from RA: %m");
 
-        if ((!set_isempty(link->network->ndisc_allow_listed_router) &&
-             !set_contains(link->network->ndisc_allow_listed_router, &router)) ||
-            set_contains(link->network->ndisc_deny_listed_router, &router)) {
+        if (in6_prefix_is_filtered(&router, 128, link->network->ndisc_allow_listed_router, link->network->ndisc_deny_listed_router)) {
                 if (DEBUG_LOGGING) {
-                        _cleanup_free_ char *buf = NULL;
-
-                        (void) in6_addr_to_string(&router, &buf);
                         if (!set_isempty(link->network->ndisc_allow_listed_router))
-                                log_link_debug(link, "Router '%s' is not in allow list, ignoring", strna(buf));
+                                log_link_debug(link, "Router %s is not in allow list, ignoring.", IN6_ADDR_TO_STRING(&router));
                         else
-                                log_link_debug(link, "Router '%s' is in deny list, ignoring", strna(buf));
+                                log_link_debug(link, "Router %s is in deny list, ignoring.", IN6_ADDR_TO_STRING(&router));
                 }
                 return 0;
         }
 
-        SET_FOREACH(na, link->ndisc_addresses)
-                if (in6_addr_equal(&na->router, &router))
-                        na->marked = true;
-
-        SET_FOREACH(nr, link->ndisc_routes)
-                if (in6_addr_equal(&nr->router, &router))
-                        nr->marked = true;
-
-        r = sd_ndisc_router_get_flags(rt, &flags);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get RA flags: %m");
-
-        if ((flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER) &&
-             link->network->ipv6_accept_ra_start_dhcp6_client != IPV6_ACCEPT_RA_START_DHCP6_CLIENT_NO) ||
-            link->network->ipv6_accept_ra_start_dhcp6_client == IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS) {
-
-                if (flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER))
-                        /* (re)start DHCPv6 client in stateful or stateless mode according to RA flags */
-                        r = dhcp6_request_information(link, !(flags & ND_RA_FLAG_MANAGED));
-                else
-                        /* When IPv6AcceptRA.DHCPv6Client=always, start dhcp6 client in managed mode
-                         * even if router does not have M or O flag. */
-                        r = dhcp6_request_information(link, false);
-                if (r < 0 && r != -EBUSY)
-                        return log_link_error_errno(link, r, "Could not acquire DHCPv6 lease on NDisc request: %m");
-                else
-                        log_link_debug(link, "Acquiring DHCPv6 lease on NDisc request");
+        r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, &timestamp_usec);
+        if (r == -ENODATA) {
+                log_link_debug(link, "Received RA without timestamp, ignoring.");
+                return 0;
         }
+        if (r < 0)
+                return r;
+
+        r = ndisc_drop_outdated(link, timestamp_usec);
+        if (r < 0)
+                return r;
+
+        r = ndisc_start_dhcp6_client(link, rt);
+        if (r < 0)
+                return r;
 
         r = ndisc_router_process_default(link, rt);
         if (r < 0)
                 return r;
+
         r = ndisc_router_process_options(link, rt);
         if (r < 0)
                 return r;
 
-        if (link->ndisc_addresses_messages == 0)
-                link->ndisc_addresses_configured = true;
-        else
-                log_link_debug(link, "Setting SLAAC addresses.");
-
-        if (link->ndisc_routes_messages == 0)
-                link->ndisc_routes_configured = true;
-        else
-                log_link_debug(link, "Setting NDisc routes.");
-
-        r = ndisc_remove_old(link);
+        r = ndisc_setup_expire(link);
         if (r < 0)
                 return r;
 
-        if (!link->ndisc_addresses_configured || !link->ndisc_routes_configured)
+        if (link->ndisc_messages == 0)
+                link->ndisc_configured = true;
+        else
+                log_link_debug(link, "Setting SLAAC addresses and router.");
+
+        if (!link->ndisc_configured)
                 link_set_state(link, LINK_STATE_CONFIGURING);
 
         link_check_ready(link);
@@ -1325,11 +1075,9 @@
 }
 
 static void ndisc_handler(sd_ndisc *nd, sd_ndisc_event_t event, sd_ndisc_router *rt, void *userdata) {
-        Link *link = userdata;
+        Link *link = ASSERT_PTR(userdata);
         int r;
 
-        assert(link);
-
         if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
                 return;
 
@@ -1337,7 +1085,7 @@
 
         case SD_NDISC_EVENT_ROUTER:
                 r = ndisc_router_handler(link, rt);
-                if (r < 0) {
+                if (r < 0 && r != -EBADMSG) {
                         link_enter_failed(link);
                         return;
                 }
@@ -1345,18 +1093,17 @@
 
         case SD_NDISC_EVENT_TIMEOUT:
                 log_link_debug(link, "NDisc handler get timeout event");
-                if (link->ndisc_addresses_messages == 0 && link->ndisc_routes_messages == 0) {
-                        link->ndisc_addresses_configured = true;
-                        link->ndisc_routes_configured = true;
+                if (link->ndisc_messages == 0) {
+                        link->ndisc_configured = true;
                         link_check_ready(link);
                 }
                 break;
         default:
-                assert_not_reached("Unknown NDisc event");
+                assert_not_reached();
         }
 }
 
-int ndisc_configure(Link *link) {
+static int ndisc_configure(Link *link) {
         int r;
 
         assert(link);
@@ -1375,9 +1122,11 @@
         if (r < 0)
                 return r;
 
-        r = sd_ndisc_set_mac(link->ndisc, &link->hw_addr.ether);
-        if (r < 0)
-                return r;
+        if (link->hw_addr.length == ETH_ALEN) {
+                r = sd_ndisc_set_mac(link->ndisc, &link->hw_addr.ether);
+                if (r < 0)
+                        return r;
+        }
 
         r = sd_ndisc_set_ifindex(link->ndisc, link->ifindex);
         if (r < 0)
@@ -1391,36 +1140,77 @@
 }
 
 int ndisc_start(Link *link) {
+        int r;
+
         assert(link);
 
         if (!link->ndisc || !link->dhcp6_client)
                 return 0;
 
+        if (!link_has_carrier(link))
+                return 0;
+
+        if (in6_addr_is_null(&link->ipv6ll_address))
+                return 0;
+
         log_link_debug(link, "Discovering IPv6 routers");
 
-        return sd_ndisc_start(link->ndisc);
+        r = sd_ndisc_start(link->ndisc);
+        if (r < 0)
+                return r;
+
+        return 1;
 }
 
-void ndisc_vacuum(Link *link) {
-        NDiscRDNSS *r;
-        NDiscDNSSL *d;
-        usec_t time_now;
+static int ndisc_process_request(Request *req, Link *link, void *userdata) {
+        int r;
 
         assert(link);
 
-        /* Removes all RDNSS and DNSSL entries whose validity time has passed */
+        if (!link_is_ready_to_configure(link, /* allow_unmanaged = */ false))
+                return 0;
 
-        time_now = now(clock_boottime_or_monotonic());
+        r = ndisc_configure(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure IPv6 Router Discovery: %m");
 
-        SET_FOREACH(r, link->ndisc_rdnss)
-                if (r->valid_until < time_now)
-                        free(set_remove(link->ndisc_rdnss, r));
+        r = ndisc_start(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to start IPv6 Router Discovery: %m");
 
-        SET_FOREACH(d, link->ndisc_dnssl)
-                if (d->valid_until < time_now)
-                        free(set_remove(link->ndisc_dnssl, d));
+        log_link_debug(link, "IPv6 Router Discovery is configured%s.",
+                       r > 0 ? " and started" : "");
+        return 1;
 }
 
+int link_request_ndisc(Link *link) {
+        int r;
+
+        assert(link);
+
+        if (!link_ipv6_accept_ra_enabled(link))
+                return 0;
+
+        if (link->ndisc)
+                return 0;
+
+        r = link_queue_request(link, REQUEST_TYPE_NDISC, ndisc_process_request, NULL);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to request configuring of the IPv6 Router Discovery: %m");
+
+        log_link_debug(link, "Requested configuring of the IPv6 Router Discovery.");
+        return 0;
+}
+
+int ndisc_stop(Link *link) {
+        assert(link);
+
+        link->ndisc_expire = sd_event_source_disable_unref(link->ndisc_expire);
+
+        return sd_ndisc_stop(link->ndisc);
+}
+
+
 void ndisc_flush(Link *link) {
         assert(link);
 
@@ -1430,200 +1220,15 @@
         link->ndisc_dnssl = set_free(link->ndisc_dnssl);
 }
 
-int ipv6token_new(IPv6Token **ret) {
-        IPv6Token *p;
-
-        p = new(IPv6Token, 1);
-        if (!p)
-                return -ENOMEM;
-
-        *p = (IPv6Token) {
-                 .address_generation_type = IPV6_TOKEN_ADDRESS_GENERATION_NONE,
-        };
-
-        *ret = TAKE_PTR(p);
-
-        return 0;
-}
-
-static void ipv6_token_hash_func(const IPv6Token *p, struct siphash *state) {
-        siphash24_compress(&p->address_generation_type, sizeof(p->address_generation_type), state);
-        siphash24_compress(&p->prefix, sizeof(p->prefix), state);
-}
-
-static int ipv6_token_compare_func(const IPv6Token *a, const IPv6Token *b) {
-        int r;
-
-        r = CMP(a->address_generation_type, b->address_generation_type);
-        if (r != 0)
-                return r;
-
-        return memcmp(&a->prefix, &b->prefix, sizeof(struct in6_addr));
-}
-
-DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
-                ipv6_token_hash_ops,
-                IPv6Token,
-                ipv6_token_hash_func,
-                ipv6_token_compare_func,
-                free);
-
-int config_parse_ndisc_address_filter(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Set **list = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        if (isempty(rvalue)) {
-                *list = set_free_free(*list);
-                return 0;
-        }
-
-        for (const char *p = rvalue;;) {
-                _cleanup_free_ char *n = NULL;
-                _cleanup_free_ struct in6_addr *a = NULL;
-                union in_addr_union ip;
-
-                r = extract_first_word(&p, &n, NULL, 0);
-                if (r == -ENOMEM)
-                        return log_oom();
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Failed to parse NDisc %s=, ignoring assignment: %s",
-                                   lvalue, rvalue);
-                        return 0;
-                }
-                if (r == 0)
-                        return 0;
-
-                r = in_addr_from_string(AF_INET6, n, &ip);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "NDisc %s= entry is invalid, ignoring assignment: %s",
-                                   lvalue, n);
-                        continue;
-                }
-
-                a = newdup(struct in6_addr, &ip.in6, 1);
-                if (!a)
-                        return log_oom();
-
-                r = set_ensure_consume(list, &in6_addr_hash_ops, TAKE_PTR(a));
-                if (r < 0)
-                        return log_oom();
-                if (r == 0)
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "NDisc %s= entry is duplicated, ignoring assignment: %s",
-                                   lvalue, n);
-        }
-}
-
-int config_parse_address_generation_type(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        _cleanup_free_ IPv6Token *token = NULL;
-        union in_addr_union buffer;
-        Network *network = data;
-        const char *p;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        if (isempty(rvalue)) {
-                network->ipv6_tokens = ordered_set_free(network->ipv6_tokens);
-                return 0;
-        }
-
-        r = ipv6token_new(&token);
-        if (r < 0)
-                return log_oom();
-
-        if ((p = startswith(rvalue, "prefixstable"))) {
-                token->address_generation_type = IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE;
-                if (*p == ':')
-                        p++;
-                else if (*p == '\0')
-                        p = NULL;
-                else {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "Invalid IPv6 token mode in %s=, ignoring assignment: %s",
-                                   lvalue, rvalue);
-                        return 0;
-                }
-        } else {
-                token->address_generation_type = IPV6_TOKEN_ADDRESS_GENERATION_STATIC;
-                p = startswith(rvalue, "static:");
-                if (!p)
-                        p = rvalue;
-        }
-
-        if (p) {
-                r = in_addr_from_string(AF_INET6, p, &buffer);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Failed to parse IP address in %s=, ignoring assignment: %s",
-                                   lvalue, rvalue);
-                        return 0;
-                }
-                if (token->address_generation_type == IPV6_TOKEN_ADDRESS_GENERATION_STATIC &&
-                    in_addr_is_null(AF_INET6, &buffer)) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "IPv6 address in %s= cannot be the ANY address, ignoring assignment: %s",
-                                   lvalue, rvalue);
-                        return 0;
-                }
-                token->prefix = buffer.in6;
-        }
-
-        r = ordered_set_ensure_put(&network->ipv6_tokens, &ipv6_token_hash_ops, token);
-        if (r == -ENOMEM)
-                return log_oom();
-        if (r == -EEXIST)
-                log_syntax(unit, LOG_DEBUG, filename, line, r,
-                           "IPv6 token '%s' is duplicated, ignoring: %m", rvalue);
-        else if (r < 0)
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to store IPv6 token '%s', ignoring: %m", rvalue);
-        else
-                TAKE_PTR(token);
-
-        return 0;
-}
-
-DEFINE_CONFIG_PARSE_ENUM(config_parse_ipv6_accept_ra_use_domains, dhcp_use_domains, DHCPUseDomains,
-                         "Failed to parse UseDomains= setting");
-DEFINE_CONFIG_PARSE_ENUM(config_parse_ipv6_accept_ra_start_dhcp6_client, ipv6_accept_ra_start_dhcp6_client, IPv6AcceptRAStartDHCP6Client,
-                         "Failed to parse DHCPv6Client= setting");
 static const char* const ipv6_accept_ra_start_dhcp6_client_table[_IPV6_ACCEPT_RA_START_DHCP6_CLIENT_MAX] = {
         [IPV6_ACCEPT_RA_START_DHCP6_CLIENT_NO]     = "no",
         [IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS] = "always",
         [IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES]    = "yes",
 };
 
-DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(ipv6_accept_ra_start_dhcp6_client, IPv6AcceptRAStartDHCP6Client, IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES);
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(ipv6_accept_ra_start_dhcp6_client, IPv6AcceptRAStartDHCP6Client, IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES);
+
+DEFINE_CONFIG_PARSE_ENUM(config_parse_ipv6_accept_ra_use_domains, dhcp_use_domains, DHCPUseDomains,
+                         "Failed to parse UseDomains= setting");
+DEFINE_CONFIG_PARSE_ENUM(config_parse_ipv6_accept_ra_start_dhcp6_client, ipv6_accept_ra_start_dhcp6_client, IPv6AcceptRAStartDHCP6Client,
+                         "Failed to parse DHCPv6Client= setting");
diff --git a/src/network/networkd-ndisc.h b/src/network/networkd-ndisc.h
index 2ff9a89..6ccc129 100644
--- a/src/network/networkd-ndisc.h
+++ b/src/network/networkd-ndisc.h
@@ -2,20 +2,10 @@
 #pragma once
 
 #include "conf-parser.h"
-#include "networkd-address.h"
-#include "networkd-link.h"
-#include "networkd-route.h"
 #include "time-util.h"
 
-typedef struct IPv6Token IPv6Token;
-
-typedef enum IPv6TokenAddressGeneration {
-        IPV6_TOKEN_ADDRESS_GENERATION_NONE,
-        IPV6_TOKEN_ADDRESS_GENERATION_STATIC,
-        IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE,
-        _IPV6_TOKEN_ADDRESS_GENERATION_MAX,
-        _IPV6_TOKEN_ADDRESS_GENERATION_INVALID = -EINVAL,
-} IPv6TokenAddressGeneration;
+typedef struct Link Link;
+typedef struct Network Network;
 
 typedef enum IPv6AcceptRAStartDHCP6Client {
         IPV6_ACCEPT_RA_START_DHCP6_CLIENT_NO,
@@ -25,45 +15,22 @@
         _IPV6_ACCEPT_RA_START_DHCP6_CLIENT_INVALID = -EINVAL,
 } IPv6AcceptRAStartDHCP6Client;
 
-typedef struct NDiscAddress {
-        /* Used when GC'ing old DNS servers when configuration changes. */
-        bool marked;
-        struct in6_addr router;
-        Address *address;
-} NDiscAddress;
-
-typedef struct NDiscRoute {
-        /* Used when GC'ing old DNS servers when configuration changes. */
-        bool marked;
-        struct in6_addr router;
-        Route *route;
-} NDiscRoute;
-
 typedef struct NDiscRDNSS {
-        /* Used when GC'ing old DNS servers when configuration changes. */
-        bool marked;
         struct in6_addr router;
-        usec_t valid_until;
+        /* This is an absolute point in time, and NOT a timespan/duration.
+         * Must be specified with clock_boottime_or_monotonic(). */
+        usec_t lifetime_usec;
         struct in6_addr address;
 } NDiscRDNSS;
 
 typedef struct NDiscDNSSL {
-        /* Used when GC'ing old domains when configuration changes. */
-        bool marked;
         struct in6_addr router;
-        usec_t valid_until;
+        /* This is an absolute point in time, and NOT a timespan/duration.
+         * Must be specified with clock_boottime_or_monotonic(). */
+        usec_t lifetime_usec;
         /* The domain name follows immediately. */
 } NDiscDNSSL;
 
-struct IPv6Token {
-        IPv6TokenAddressGeneration address_generation_type;
-
-        uint8_t dad_counter;
-        struct in6_addr prefix;
-};
-
-int ipv6token_new(IPv6Token **ret);
-
 static inline char* NDISC_DNSSL_DOMAIN(const NDiscDNSSL *n) {
         return ((char*) n) + ALIGN(sizeof(NDiscDNSSL));
 }
@@ -72,15 +39,11 @@
 
 void network_adjust_ipv6_accept_ra(Network *network);
 
-int ndisc_configure(Link *link);
 int ndisc_start(Link *link);
-void ndisc_vacuum(Link *link);
+int ndisc_stop(Link *link);
 void ndisc_flush(Link *link);
 
-CONFIG_PARSER_PROTOTYPE(config_parse_ndisc_address_filter);
-CONFIG_PARSER_PROTOTYPE(config_parse_address_generation_type);
+int link_request_ndisc(Link *link);
+
 CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_accept_ra_start_dhcp6_client);
 CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_accept_ra_use_domains);
-
-const char* ipv6_accept_ra_start_dhcp6_client_to_string(IPv6AcceptRAStartDHCP6Client i) _const_;
-IPv6AcceptRAStartDHCP6Client ipv6_accept_ra_start_dhcp6_client_from_string(const char *s) _pure_;
diff --git a/src/network/networkd-neighbor.c b/src/network/networkd-neighbor.c
index b23f081..f0f78b9 100644
--- a/src/network/networkd-neighbor.c
+++ b/src/network/networkd-neighbor.c
@@ -19,20 +19,18 @@
                 hashmap_remove(neighbor->network->neighbors_by_section, neighbor->section);
         }
 
-        network_config_section_free(neighbor->section);
+        config_section_free(neighbor->section);
 
-        if (neighbor->link) {
+        if (neighbor->link)
                 set_remove(neighbor->link->neighbors, neighbor);
-                set_remove(neighbor->link->neighbors_foreign, neighbor);
-        }
 
         return mfree(neighbor);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(Neighbor, neighbor_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(Neighbor, neighbor_free);
 
 static int neighbor_new_static(Network *network, const char *filename, unsigned section_line, Neighbor **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(neighbor_freep) Neighbor *neighbor = NULL;
         int r;
 
@@ -41,7 +39,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -59,9 +57,10 @@
                 .network = network,
                 .family = AF_UNSPEC,
                 .section = TAKE_PTR(n),
+                .source = NETWORK_CONFIG_SOURCE_STATIC,
         };
 
-        r = hashmap_ensure_put(&network->neighbors_by_section, &network_config_hash_ops, neighbor->section, neighbor);
+        r = hashmap_ensure_put(&network->neighbors_by_section, &config_section_hash_ops, neighbor->section, neighbor);
         if (r < 0)
                 return r;
 
@@ -69,11 +68,29 @@
         return 0;
 }
 
-void neighbor_hash_func(const Neighbor *neighbor, struct siphash *state) {
+static int neighbor_dup(const Neighbor *neighbor, Neighbor **ret) {
+        _cleanup_(neighbor_freep) Neighbor *dest = NULL;
+
+        assert(neighbor);
+        assert(ret);
+
+        dest = newdup(Neighbor, neighbor, 1);
+        if (!dest)
+                return -ENOMEM;
+
+        /* Unset all pointers */
+        dest->link = NULL;
+        dest->network = NULL;
+        dest->section = NULL;
+
+        *ret = TAKE_PTR(dest);
+        return 0;
+}
+
+static void neighbor_hash_func(const Neighbor *neighbor, struct siphash *state) {
         assert(neighbor);
 
         siphash24_compress(&neighbor->family, sizeof(neighbor->family), state);
-        siphash24_compress(&neighbor->lladdr_size, sizeof(neighbor->lladdr_size), state);
 
         switch (neighbor->family) {
         case AF_INET:
@@ -86,20 +103,16 @@
                 break;
         }
 
-        siphash24_compress(&neighbor->lladdr, neighbor->lladdr_size, state);
+        hw_addr_hash_func(&neighbor->ll_addr, state);
 }
 
-int neighbor_compare_func(const Neighbor *a, const Neighbor *b) {
+static int neighbor_compare_func(const Neighbor *a, const Neighbor *b) {
         int r;
 
         r = CMP(a->family, b->family);
         if (r != 0)
                 return r;
 
-        r = CMP(a->lladdr_size, b->lladdr_size);
-        if (r != 0)
-                return r;
-
         switch (a->family) {
         case AF_INET:
         case AF_INET6:
@@ -108,7 +121,7 @@
                         return r;
         }
 
-        return memcmp(&a->lladdr, &b->lladdr, a->lladdr_size);
+        return hw_addr_compare(&a->ll_addr, &b->ll_addr);
 }
 
 DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(neighbor_hash_ops, Neighbor, neighbor_hash_func, neighbor_compare_func, neighbor_free);
@@ -120,100 +133,32 @@
         assert(in);
 
         existing = set_get(link->neighbors, in);
-        if (existing) {
-                if (ret)
-                        *ret = existing;
-                return 1;
-        }
+        if (!existing)
+                return -ENOENT;
 
-        existing = set_get(link->neighbors_foreign, in);
-        if (existing) {
-                if (ret)
-                        *ret = existing;
-                return 0;
-        }
-
-        return -ENOENT;
+        if (ret)
+                *ret = existing;
+        return 0;
 }
 
-static int neighbor_add_internal(Link *link, Set **neighbors, const Neighbor *in, Neighbor **ret) {
-        _cleanup_(neighbor_freep) Neighbor *neighbor = NULL;
+static int neighbor_add(Link *link, Neighbor *neighbor) {
         int r;
 
         assert(link);
-        assert(neighbors);
-        assert(in);
+        assert(neighbor);
 
-        neighbor = new(Neighbor, 1);
-        if (!neighbor)
-                return -ENOMEM;
-
-        *neighbor = (Neighbor) {
-                .family = in->family,
-                .in_addr = in->in_addr,
-                .lladdr = in->lladdr,
-                .lladdr_size = in->lladdr_size,
-        };
-
-        r = set_ensure_put(neighbors, &neighbor_hash_ops, neighbor);
+        r = set_ensure_put(&link->neighbors, &neighbor_hash_ops, neighbor);
         if (r < 0)
                 return r;
         if (r == 0)
                 return -EEXIST;
 
         neighbor->link = link;
-
-        if (ret)
-                *ret = neighbor;
-
-        TAKE_PTR(neighbor);
         return 0;
 }
 
-static int neighbor_add(Link *link, const Neighbor *in, Neighbor **ret) {
-        Neighbor *neighbor;
-        int r;
-
-        r = neighbor_get(link, in, &neighbor);
-        if (r == -ENOENT) {
-                /* Neighbor doesn't exist, make a new one */
-                r = neighbor_add_internal(link, &link->neighbors, in, &neighbor);
-                if (r < 0)
-                        return r;
-        } else if (r == 0) {
-                /* Neighbor is foreign, claim it as recognized */
-                r = set_ensure_put(&link->neighbors, &neighbor_hash_ops, neighbor);
-                if (r < 0)
-                        return r;
-
-                set_remove(link->neighbors_foreign, neighbor);
-        } else if (r == 1) {
-                /* Neighbor already exists */
-                ;
-        } else
-                return r;
-
-        if (ret)
-                *ret = neighbor;
-        return 0;
-}
-
-static int neighbor_add_foreign(Link *link, const Neighbor *in, Neighbor **ret) {
-        return neighbor_add_internal(link, &link->neighbors_foreign, in, ret);
-}
-
-static bool neighbor_equal(const Neighbor *n1, const Neighbor *n2) {
-        if (n1 == n2)
-                return true;
-
-        if (!n1 || !n2)
-                return false;
-
-        return neighbor_compare_func(n1, n2) == 0;
-}
-
 static void log_neighbor_debug(const Neighbor *neighbor, const char *str, const Link *link) {
-        _cleanup_free_ char *lladdr = NULL, *dst = NULL;
+        _cleanup_free_ char *state = NULL;
 
         assert(neighbor);
         assert(str);
@@ -221,26 +166,35 @@
         if (!DEBUG_LOGGING)
                 return;
 
-        if (neighbor->lladdr_size == sizeof(struct ether_addr))
-                (void) ether_addr_to_string_alloc(&neighbor->lladdr.mac, &lladdr);
-        else if (neighbor->lladdr_size == sizeof(struct in_addr))
-                (void) in_addr_to_string(AF_INET, &neighbor->lladdr.ip, &lladdr);
-        else if (neighbor->lladdr_size == sizeof(struct in6_addr))
-                (void) in_addr_to_string(AF_INET6, &neighbor->lladdr.ip, &lladdr);
-
-        (void) in_addr_to_string(neighbor->family, &neighbor->in_addr, &dst);
+        (void) network_config_state_to_string_alloc(neighbor->state, &state);
 
         log_link_debug(link,
-                       "%s neighbor: lladdr: %s, dst: %s",
-                       str, strna(lladdr), strna(dst));
+                       "%s %s neighbor (%s): lladdr: %s, dst: %s",
+                       str, strna(network_config_source_to_string(neighbor->source)), strna(state),
+                       HW_ADDR_TO_STR(&neighbor->ll_addr),
+                       IN_ADDR_TO_STRING(neighbor->family, &neighbor->in_addr));
 }
-static int neighbor_configure(
-                const Neighbor *neighbor,
-                Link *link,
-                link_netlink_message_handler_t callback,
-                Neighbor **ret) {
 
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int neighbor_configure_message(Neighbor *neighbor, Link *link, sd_netlink_message *req) {
+        int r;
+
+        r = sd_rtnl_message_neigh_set_state(req, NUD_PERMANENT);
+        if (r < 0)
+                return r;
+
+        r = netlink_message_append_hw_addr(req, NDA_LLADDR, &neighbor->ll_addr);
+        if (r < 0)
+                return r;
+
+        r = netlink_message_append_in_addr_union(req, NDA_DST, neighbor->family, &neighbor->in_addr);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static int neighbor_configure(Neighbor *neighbor, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(neighbor);
@@ -248,52 +202,45 @@
         assert(link->ifindex > 0);
         assert(link->manager);
         assert(link->manager->rtnl);
-        assert(callback);
+        assert(req);
 
         log_neighbor_debug(neighbor, "Configuring", link);
 
-        r = sd_rtnl_message_new_neigh(link->manager->rtnl, &req, RTM_NEWNEIGH,
+        r = sd_rtnl_message_new_neigh(link->manager->rtnl, &m, RTM_NEWNEIGH,
                                       link->ifindex, neighbor->family);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not allocate RTM_NEWNEIGH message: %m");
+                return r;
 
-        r = sd_rtnl_message_neigh_set_state(req, NUD_PERMANENT);
+        r = neighbor_configure_message(neighbor, link, m);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set state: %m");
+                return r;
 
-        r = sd_netlink_message_append_data(req, NDA_LLADDR, &neighbor->lladdr, neighbor->lladdr_size);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not append NDA_LLADDR attribute: %m");
-
-        r = netlink_message_append_in_addr_union(req, NDA_DST, neighbor->family, &neighbor->in_addr);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not append NDA_DST attribute: %m");
-
-        r = neighbor_add(link, neighbor, ret);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not add neighbor: %m");
-
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-
-        return r;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-static int static_neighbor_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int neighbor_process_request(Request *req, Link *link, Neighbor *neighbor) {
+        int r;
+
+        assert(req);
+        assert(link);
+        assert(neighbor);
+
+        if (!link_is_ready_to_configure(link, false))
+                return 0;
+
+        r = neighbor_configure(neighbor, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure neighbor: %m");
+
+        neighbor_enter_configuring(neighbor);
+        return 1;
+}
+
+static int static_neighbor_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Neighbor *neighbor) {
         int r;
 
         assert(m);
         assert(link);
-        assert(link->static_neighbor_messages > 0);
-
-        link->static_neighbor_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
@@ -311,20 +258,43 @@
         return 1;
 }
 
-static int link_request_neighbor(
-                Link *link,
-                Neighbor *neighbor,
-                bool consume_object,
-                unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
-                Request **ret) {
+static int link_request_neighbor(Link *link, const Neighbor *neighbor) {
+        Neighbor *existing;
+        int r;
 
         assert(link);
         assert(neighbor);
+        assert(neighbor->source != NETWORK_CONFIG_SOURCE_FOREIGN);
 
-        log_neighbor_debug(neighbor, "Requesting", link);
-        return link_queue_request(link, REQUEST_TYPE_NEIGHBOR, neighbor, consume_object,
-                                  message_counter, netlink_handler, ret);
+        if (neighbor_get(link, neighbor, &existing) < 0) {
+                _cleanup_(neighbor_freep) Neighbor *tmp = NULL;
+
+                r = neighbor_dup(neighbor, &tmp);
+                if (r < 0)
+                        return r;
+
+                r = neighbor_add(link, tmp);
+                if (r < 0)
+                        return r;
+
+                existing = TAKE_PTR(tmp);
+        } else
+                existing->source = neighbor->source;
+
+        log_neighbor_debug(existing, "Requesting", link);
+        r = link_queue_request_safe(link, REQUEST_TYPE_NEIGHBOR,
+                                    existing, NULL,
+                                    neighbor_hash_func,
+                                    neighbor_compare_func,
+                                    neighbor_process_request,
+                                    &link->static_neighbor_messages,
+                                    static_neighbor_configure_handler,
+                                    NULL);
+        if (r <= 0)
+                return r;
+
+        neighbor_enter_requesting(existing);
+        return 1;
 }
 
 int link_request_static_neighbors(Link *link) {
@@ -338,8 +308,7 @@
         link->static_neighbors_configured = false;
 
         HASHMAP_FOREACH(neighbor, link->network->neighbors_by_section) {
-                r = link_request_neighbor(link, neighbor, false, &link->static_neighbor_messages,
-                                          static_neighbor_configure_handler, NULL);
+                r = link_request_neighbor(link, neighbor);
                 if (r < 0)
                         return log_link_warning_errno(link, r, "Could not request neighbor: %m");
         }
@@ -360,9 +329,6 @@
 
         assert(m);
         assert(link);
-        assert(link->neighbor_remove_messages > 0);
-
-        link->neighbor_remove_messages--;
 
         if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
                 return 1;
@@ -375,15 +341,17 @@
         return 1;
 }
 
-static int neighbor_remove(Neighbor *neighbor, Link *link) {
+static int neighbor_remove(Neighbor *neighbor) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        Link *link;
         int r;
 
         assert(neighbor);
-        assert(link);
-        assert(link->ifindex > 0);
-        assert(link->manager);
-        assert(link->manager->rtnl);
+        assert(neighbor->link);
+        assert(neighbor->link->manager);
+        assert(neighbor->link->manager->rtnl);
+
+        link = neighbor->link;
 
         log_neighbor_debug(neighbor, "Removing", link);
 
@@ -402,55 +370,44 @@
                 return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
 
         link_ref(link);
-        link->neighbor_remove_messages++;
 
+        neighbor_enter_removing(neighbor);
         return 0;
 }
 
-static bool link_is_neighbor_configured(Link *link, Neighbor *neighbor) {
-        Neighbor *net_neighbor;
-
-        assert(link);
-        assert(neighbor);
-
-        if (!link->network)
-                return false;
-
-        HASHMAP_FOREACH(net_neighbor, link->network->neighbors_by_section)
-                if (neighbor_equal(net_neighbor, neighbor))
-                        return true;
-
-        return false;
-}
-
 int link_drop_foreign_neighbors(Link *link) {
         Neighbor *neighbor;
-        int r;
-
-        assert(link);
-
-        SET_FOREACH(neighbor, link->neighbors_foreign)
-                if (link_is_neighbor_configured(link, neighbor)) {
-                        r = neighbor_add(link, neighbor, NULL);
-                        if (r < 0)
-                                return r;
-                } else {
-                        r = neighbor_remove(neighbor, link);
-                        if (r < 0)
-                                return r;
-                }
-
-        return 0;
-}
-
-int link_drop_neighbors(Link *link) {
-        Neighbor *neighbor;
         int k, r = 0;
 
         assert(link);
+        assert(link->network);
+
+        /* First, mark all neighbors. */
+        SET_FOREACH(neighbor, link->neighbors) {
+                /* Do not remove neighbors we configured. */
+                if (neighbor->source != NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
+
+                /* Ignore neighbors not assigned yet or already removing. */
+                if (!neighbor_exists(neighbor))
+                        continue;
+
+                neighbor_mark(neighbor);
+        }
+
+        /* Next, unmark requested neighbors. They will be configured later. */
+        HASHMAP_FOREACH(neighbor, link->network->neighbors_by_section) {
+                Neighbor *existing;
+
+                if (neighbor_get(link, neighbor, &existing) >= 0)
+                        neighbor_unmark(existing);
+        }
 
         SET_FOREACH(neighbor, link->neighbors) {
-                k = neighbor_remove(neighbor, link);
+                if (!neighbor_is_marked(neighbor))
+                        continue;
+
+                k = neighbor_remove(neighbor);
                 if (k < 0 && r >= 0)
                         r = k;
         }
@@ -458,40 +415,40 @@
         return r;
 }
 
-int request_process_neighbor(Request *req) {
-        Neighbor *ret;
-        int r;
+int link_drop_managed_neighbors(Link *link) {
+        Neighbor *neighbor;
+        int k, r = 0;
 
-        assert(req);
-        assert(req->link);
-        assert(req->neighbor);
-        assert(req->type == REQUEST_TYPE_NEIGHBOR);
+        assert(link);
 
-        if (!link_is_ready_to_configure(req->link, false))
-                return 0;
+        SET_FOREACH(neighbor, link->neighbors) {
+                /* Do not touch nexthops managed by kernel or other tools. */
+                if (neighbor->source == NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
 
-        if (req->link->neighbor_remove_messages > 0)
-                return 0;
+                /* Ignore neighbors not assigned yet or already removing. */
+                if (!neighbor_exists(neighbor))
+                        continue;
 
-        r = neighbor_configure(req->neighbor, req->link, req->netlink_handler, &ret);
-        if (r < 0)
-                return r;
-
-        /* To prevent a double decrement on failure in after_configure(). */
-        req->message_counter = NULL;
-
-        if (req->after_configure) {
-                r = req->after_configure(req, ret);
-                if (r < 0)
-                        return r;
+                k = neighbor_remove(neighbor);
+                if (k < 0 && r >= 0)
+                        r = k;
         }
 
-        return 1;
+        return r;
+}
+
+void link_foreignize_neighbors(Link *link) {
+        Neighbor *neighbor;
+
+        assert(link);
+
+        SET_FOREACH(neighbor, link->neighbors)
+                neighbor->source = NETWORK_CONFIG_SOURCE_FOREIGN;
 }
 
 int manager_rtnl_process_neighbor(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
         _cleanup_(neighbor_freep) Neighbor *tmp = NULL;
-        _cleanup_free_ void *lladdr = NULL;
         Neighbor *neighbor = NULL;
         uint16_t type, state;
         int ifindex, r;
@@ -561,41 +518,47 @@
                 return 0;
         }
 
-        r = sd_netlink_message_read_data(message, NDA_LLADDR, &tmp->lladdr_size, &lladdr);
+        r = netlink_message_read_hw_addr(message, NDA_LLADDR, &tmp->ll_addr);
         if (r < 0) {
-                log_link_warning_errno(link, r, "rtnl: received neighbor message without valid lladdr, ignoring: %m");
-                return 0;
-        } else if (!IN_SET(tmp->lladdr_size, sizeof(struct ether_addr), sizeof(struct in_addr), sizeof(struct in6_addr))) {
-                log_link_warning(link, "rtnl: received neighbor message with invalid lladdr size (%zu), ignoring: %m", tmp->lladdr_size);
+                log_link_warning_errno(link, r, "rtnl: received neighbor message without valid link layer address, ignoring: %m");
                 return 0;
         }
-        memcpy(&tmp->lladdr, lladdr, tmp->lladdr_size);
 
         (void) neighbor_get(link, tmp, &neighbor);
 
         switch (type) {
         case RTM_NEWNEIGH:
-                if (neighbor)
-                        log_neighbor_debug(tmp, "Received remembered", link);
-                else {
-                        log_neighbor_debug(tmp, "Remembering foreign", link);
-                        r = neighbor_add_foreign(link, tmp, NULL);
+                if (neighbor) {
+                        neighbor_enter_configured(neighbor);
+                        log_neighbor_debug(neighbor, "Received remembered", link);
+                } else {
+                        neighbor_enter_configured(tmp);
+                        log_neighbor_debug(tmp, "Remembering", link);
+                        r = neighbor_add(link, tmp);
                         if (r < 0) {
                                 log_link_warning_errno(link, r, "Failed to remember foreign neighbor, ignoring: %m");
                                 return 0;
                         }
+                        TAKE_PTR(tmp);
                 }
 
                 break;
 
         case RTM_DELNEIGH:
-                log_neighbor_debug(tmp, neighbor ? "Forgetting" : "Kernel removed unknown", link);
-                neighbor_free(neighbor);
+                if (neighbor) {
+                        neighbor_enter_removed(neighbor);
+                        if (neighbor->state == 0) {
+                                log_neighbor_debug(neighbor, "Forgetting", link);
+                                neighbor_free(neighbor);
+                        } else
+                                log_neighbor_debug(neighbor, "Removed", link);
+                } else
+                        log_neighbor_debug(tmp, "Kernel removed unknown", link);
 
                 break;
 
         default:
-                assert_not_reached("Received invalid RTNL message type");
+                assert_not_reached();
         }
 
         return 1;
@@ -611,7 +574,7 @@
                                          "Ignoring [Neighbor] section from line %u.",
                                          neighbor->section->filename, neighbor->section->line);
 
-        if (neighbor->lladdr_size == 0)
+        if (neighbor->ll_addr.length == 0)
                 return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
                                          "%s: Neighbor section without LinkLayerAddress= configured. "
                                          "Ignoring [Neighbor] section from line %u.",
@@ -643,20 +606,26 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
         _cleanup_(neighbor_free_or_set_invalidp) Neighbor *n = NULL;
+        Network *network = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(section);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = neighbor_new_static(network, filename, section_line, &n);
         if (r < 0)
                 return log_oom();
 
+        if (isempty(rvalue)) {
+                n->family = AF_UNSPEC;
+                n->in_addr = IN_ADDR_NULL;
+                TAKE_PTR(n);
+                return 0;
+        }
+
         r = in_addr_from_string_auto(rvalue, &n->family, &n->in_addr);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
@@ -665,7 +634,6 @@
         }
 
         TAKE_PTR(n);
-
         return 0;
 }
 
@@ -681,74 +649,33 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
         _cleanup_(neighbor_free_or_set_invalidp) Neighbor *n = NULL;
-        int family, r;
-
-        assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = neighbor_new_static(network, filename, section_line, &n);
-        if (r < 0)
-                return log_oom();
-
-        r = ether_addr_from_string(rvalue, &n->lladdr.mac);
-        if (r >= 0)
-                n->lladdr_size = sizeof(n->lladdr.mac);
-        else {
-                r = in_addr_from_string_auto(rvalue, &family, &n->lladdr.ip);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Neighbor LinkLayerAddress= is invalid, ignoring assignment: %s",
-                                   rvalue);
-                        return 0;
-                }
-                n->lladdr_size = family == AF_INET ? sizeof(n->lladdr.ip.in) : sizeof(n->lladdr.ip.in6);
-        }
-
-        TAKE_PTR(n);
-
-        return 0;
-}
-
-int config_parse_neighbor_hwaddr(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Network *network = userdata;
-        _cleanup_(neighbor_free_or_set_invalidp) Neighbor *n = NULL;
+        Network *network = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(section);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = neighbor_new_static(network, filename, section_line, &n);
         if (r < 0)
                 return log_oom();
 
-        r = ether_addr_from_string(rvalue, &n->lladdr.mac);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Neighbor MACAddress= is invalid, ignoring assignment: %s", rvalue);
+        if (isempty(rvalue)) {
+                n->ll_addr = HW_ADDR_NULL;
+                TAKE_PTR(n);
                 return 0;
         }
 
-        n->lladdr_size = sizeof(n->lladdr.mac);
-        TAKE_PTR(n);
+        r = parse_hw_addr(rvalue, &n->ll_addr);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Neighbor %s= is invalid, ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
 
+        TAKE_PTR(n);
         return 0;
 }
diff --git a/src/network/networkd-neighbor.h b/src/network/networkd-neighbor.h
index 8feb515..758475a 100644
--- a/src/network/networkd-neighbor.h
+++ b/src/network/networkd-neighbor.h
@@ -13,39 +13,32 @@
 typedef struct Link Link;
 typedef struct Manager Manager;
 typedef struct Network Network;
-typedef struct Request Request;
-
-union lladdr_union {
-        struct ether_addr mac;
-        union in_addr_union ip;
-};
 
 typedef struct Neighbor {
         Network *network;
         Link *link;
-        NetworkConfigSection *section;
+        ConfigSection *section;
+        NetworkConfigSource source;
+        NetworkConfigState state;
 
         int family;
         union in_addr_union in_addr;
-        union lladdr_union lladdr;
-        size_t lladdr_size;
+        struct hw_addr_data ll_addr;
 } Neighbor;
 
 Neighbor *neighbor_free(Neighbor *neighbor);
 
-void neighbor_hash_func(const Neighbor *neighbor, struct siphash *state);
-int neighbor_compare_func(const Neighbor *a, const Neighbor *b);
-
 void network_drop_invalid_neighbors(Network *network);
 
-int link_drop_neighbors(Link *link);
+int link_drop_managed_neighbors(Link *link);
 int link_drop_foreign_neighbors(Link *link);
+void link_foreignize_neighbors(Link *link);
 
 int link_request_static_neighbors(Link *link);
-int request_process_neighbor(Request *req);
 
 int manager_rtnl_process_neighbor(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
 
+DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(Neighbor, neighbor);
+
 CONFIG_PARSER_PROTOTYPE(config_parse_neighbor_address);
-CONFIG_PARSER_PROTOTYPE(config_parse_neighbor_hwaddr);
 CONFIG_PARSER_PROTOTYPE(config_parse_neighbor_lladdr);
diff --git a/src/network/networkd-netlabel.c b/src/network/networkd-netlabel.c
new file mode 100644
index 0000000..94bf8f5
--- /dev/null
+++ b/src/network/networkd-netlabel.c
@@ -0,0 +1,128 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "escape.h"
+#include "netlink-util.h"
+#include "networkd-address.h"
+#include "networkd-link.h"
+#include "networkd-manager.h"
+#include "networkd-netlabel.h"
+#include "networkd-network.h"
+
+static int netlabel_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+        int r;
+
+        assert_se(rtnl);
+        assert_se(m);
+        assert_se(link);
+
+        r = sd_netlink_message_get_errno(m);
+        if (r < 0) {
+                log_link_message_warning_errno(link, m, r, "NetLabel operation failed, ignoring");
+                return 1;
+        }
+
+        log_link_debug(link, "NetLabel operation successful");
+
+        return 1;
+}
+
+static int netlabel_command(uint16_t command, const char *label, const Address *address) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        assert(command != NLBL_UNLABEL_C_UNSPEC && command < __NLBL_UNLABEL_C_MAX);
+        assert(address);
+        assert(address->link);
+        assert(address->link->ifname);
+        assert(address->link->manager);
+        assert(address->link->manager->genl);
+        assert(IN_SET(address->family, AF_INET, AF_INET6));
+
+        r = sd_genl_message_new(address->link->manager->genl, NETLBL_NLTYPE_UNLABELED_NAME, command, &m);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_string(m, NLBL_UNLABEL_A_IFACE, address->link->ifname);
+        if (r < 0)
+                return r;
+
+        if (command == NLBL_UNLABEL_C_STATICADD) {
+                assert(label);
+                r = sd_netlink_message_append_string(m, NLBL_UNLABEL_A_SECCTX, label);
+                if (r < 0)
+                        return r;
+        }
+
+        union in_addr_union netmask, masked_addr;
+        r = in_addr_prefixlen_to_netmask(address->family, &netmask, address->prefixlen);
+        if (r < 0)
+                return r;
+
+        /*
+         * When adding rules, kernel adds the address to its hash table _applying also the netmask_, but on
+         * removal, an exact match is required _without netmask applied_, so apply the mask on both
+         * operations.
+         */
+        masked_addr = address->in_addr;
+        r = in_addr_mask(address->family, &masked_addr, address->prefixlen);
+        if (r < 0)
+                return r;
+
+        if (address->family == AF_INET) {
+                r = sd_netlink_message_append_in_addr(m, NLBL_UNLABEL_A_IPV4ADDR, &masked_addr.in);
+                if (r < 0)
+                        return r;
+
+                r = sd_netlink_message_append_in_addr(m, NLBL_UNLABEL_A_IPV4MASK, &netmask.in);
+        } else if (address->family == AF_INET6) {
+                r = sd_netlink_message_append_in6_addr(m, NLBL_UNLABEL_A_IPV6ADDR, &masked_addr.in6);
+                if (r < 0)
+                        return r;
+
+                r = sd_netlink_message_append_in6_addr(m, NLBL_UNLABEL_A_IPV6MASK, &netmask.in6);
+        }
+        if (r < 0)
+                return r;
+
+        r = netlink_call_async(address->link->manager->genl, NULL, m, netlabel_handler, link_netlink_destroy_callback,
+                               address->link);
+        if (r < 0)
+                return r;
+
+        link_ref(address->link);
+        return 0;
+}
+
+void address_add_netlabel(const Address *address) {
+        int r;
+
+        assert(address);
+
+        if (!address->netlabel)
+                return;
+
+        r = netlabel_command(NLBL_UNLABEL_C_STATICADD, address->netlabel, address);
+        if (r < 0)
+                log_link_warning_errno(address->link, r, "Adding NetLabel %s for IP address %s failed, ignoring", address->netlabel,
+                                       IN_ADDR_PREFIX_TO_STRING(address->family, &address->in_addr, address->prefixlen));
+        else
+                log_link_debug(address->link, "Adding NetLabel %s for IP address %s", address->netlabel,
+                               IN_ADDR_PREFIX_TO_STRING(address->family, &address->in_addr, address->prefixlen));
+}
+
+void address_del_netlabel(const Address *address) {
+        int r;
+
+        assert(address);
+
+        if (!address->netlabel)
+                return;
+
+        r = netlabel_command(NLBL_UNLABEL_C_STATICREMOVE, address->netlabel, address);
+        if (r < 0)
+                log_link_warning_errno(address->link, r, "Deleting NetLabel %s for IP address %s failed, ignoring", address->netlabel,
+                                       IN_ADDR_PREFIX_TO_STRING(address->family, &address->in_addr, address->prefixlen));
+        else
+                log_link_debug(address->link, "Deleting NetLabel %s for IP address %s", address->netlabel,
+                               IN_ADDR_PREFIX_TO_STRING(address->family, &address->in_addr, address->prefixlen));
+}
diff --git a/src/network/networkd-netlabel.h b/src/network/networkd-netlabel.h
new file mode 100644
index 0000000..2f30b8f
--- /dev/null
+++ b/src/network/networkd-netlabel.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+void address_add_netlabel(const Address *address);
+void address_del_netlabel(const Address *address);
diff --git a/src/network/networkd-network-bus.c b/src/network/networkd-network-bus.c
index e265277..e1e89e8 100644
--- a/src/network/networkd-network-bus.c
+++ b/src/network/networkd-network-bus.c
@@ -7,7 +7,7 @@
 #include "string-util.h"
 #include "strv.h"
 
-static int property_get_ether_addrs(
+static int property_get_hw_addrs(
                 sd_bus *bus,
                 const char *path,
                 const char *interface,
@@ -16,7 +16,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        const struct ether_addr *p;
+        const struct hw_addr_data *p;
         Set *s;
         int r;
 
@@ -31,7 +31,7 @@
                 return r;
 
         SET_FOREACH(p, s) {
-                r = sd_bus_message_append(reply, "s", ETHER_ADDR_TO_STR(p));
+                r = sd_bus_message_append(reply, "s", HW_ADDR_TO_STR(p));
                 if (r < 0)
                         return r;
         }
@@ -39,12 +39,12 @@
         return sd_bus_message_close_container(reply);
 }
 
-const sd_bus_vtable network_vtable[] = {
+static const sd_bus_vtable network_vtable[] = {
         SD_BUS_VTABLE_START(0),
 
         SD_BUS_PROPERTY("Description", "s", NULL, offsetof(Network, description), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("SourcePath", "s", NULL, offsetof(Network, filename), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("MatchMAC", "as", property_get_ether_addrs, offsetof(Network, match.mac), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("MatchMAC", "as", property_get_hw_addrs, offsetof(Network, match.hw_addr), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("MatchPath", "as", NULL, offsetof(Network, match.path), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("MatchDriver", "as", NULL, offsetof(Network, match.driver), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("MatchType", "as", NULL, offsetof(Network, match.iftype), SD_BUS_VTABLE_PROPERTY_CONST),
@@ -84,13 +84,12 @@
 
 int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
         _cleanup_strv_free_ char **l = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Network *network;
         int r;
 
         assert(bus);
         assert(path);
-        assert(m);
         assert(nodes);
 
         ORDERED_HASHMAP_FOREACH(network, m->networks) {
@@ -111,7 +110,7 @@
 }
 
 int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Network *network;
         _cleanup_free_ char *name = NULL;
         int r;
@@ -119,7 +118,6 @@
         assert(bus);
         assert(path);
         assert(interface);
-        assert(m);
         assert(found);
 
         r = sd_bus_path_decode(path, "/org/freedesktop/network1/network", &name);
@@ -134,3 +132,10 @@
 
         return 1;
 }
+
+const BusObjectImplementation network_object = {
+        "/org/freedesktop/network1/network",
+        "org.freedesktop.network1.Network",
+        .fallback_vtables = BUS_FALLBACK_VTABLES({network_vtable, network_object_find}),
+        .node_enumerator = network_node_enumerator,
+};
diff --git a/src/network/networkd-network-bus.h b/src/network/networkd-network-bus.h
index cca1e0a..68ed951 100644
--- a/src/network/networkd-network-bus.h
+++ b/src/network/networkd-network-bus.h
@@ -3,9 +3,11 @@
 
 #include "sd-bus.h"
 
+#include "bus-object.h"
+
 typedef struct Link Link;
 
-extern const sd_bus_vtable network_vtable[];
+extern const BusObjectImplementation network_object;
 
 int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
 int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf
index e3ced5a..716904c 100644
--- a/src/network/networkd-network-gperf.gperf
+++ b/src/network/networkd-network-gperf.gperf
@@ -5,21 +5,27 @@
 #endif
 #include <stddef.h>
 #include "conf-parser.h"
+#include "in-addr-prefix-util.h"
 #include "netem.h"
 #include "net-condition.h"
+#include "networkd-address-generation.h"
 #include "networkd-address-label.h"
 #include "networkd-address.h"
 #include "networkd-bridge-fdb.h"
 #include "networkd-bridge-mdb.h"
 #include "networkd-can.h"
 #include "networkd-dhcp-common.h"
+#include "networkd-dhcp-prefix-delegation.h"
 #include "networkd-dhcp-server-static-lease.h"
 #include "networkd-dhcp-server.h"
 #include "networkd-dhcp4.h"
 #include "networkd-dhcp6.h"
 #include "networkd-ipv4ll.h"
 #include "networkd-ipv6-proxy-ndp.h"
+#include "networkd-ipv6ll.h"
+#include "networkd-lldp-tx.h"
 #include "networkd-ndisc.h"
+#include "networkd-netlabel.h"
 #include "networkd-network.h"
 #include "networkd-neighbor.h"
 #include "networkd-nexthop.h"
@@ -42,23 +48,25 @@
 %struct-type
 %includes
 %%
-Match.MACAddress,                            config_parse_hwaddrs,                                     0,                             offsetof(Network, match.mac)
-Match.PermanentMACAddress,                   config_parse_hwaddrs,                                     0,                             offsetof(Network, match.permanent_mac)
+Match.MACAddress,                            config_parse_hw_addrs,                                    0,                             offsetof(Network, match.hw_addr)
+Match.PermanentMACAddress,                   config_parse_hw_addrs,                                    0,                             offsetof(Network, match.permanent_hw_addr)
 Match.Path,                                  config_parse_match_strv,                                  0,                             offsetof(Network, match.path)
 Match.Driver,                                config_parse_match_strv,                                  0,                             offsetof(Network, match.driver)
 Match.Type,                                  config_parse_match_strv,                                  0,                             offsetof(Network, match.iftype)
-Match.WLANInterfaceType,                     config_parse_match_strv,                                  0,                             offsetof(Network, match.wifi_iftype)
+Match.Kind,                                  config_parse_match_strv,                                  0,                             offsetof(Network, match.kind)
+Match.WLANInterfaceType,                     config_parse_match_strv,                                  0,                             offsetof(Network, match.wlan_iftype)
 Match.SSID,                                  config_parse_match_strv,                                  0,                             offsetof(Network, match.ssid)
-Match.BSSID,                                 config_parse_hwaddrs,                                     0,                             offsetof(Network, match.bssid)
+Match.BSSID,                                 config_parse_ether_addrs,                                 0,                             offsetof(Network, match.bssid)
 Match.Name,                                  config_parse_match_ifnames,                               IFNAME_VALID_ALTERNATIVE,      offsetof(Network, match.ifname)
 Match.Property,                              config_parse_match_property,                              0,                             offsetof(Network, match.property)
 Match.Host,                                  config_parse_net_condition,                               CONDITION_HOST,                offsetof(Network, conditions)
 Match.Virtualization,                        config_parse_net_condition,                               CONDITION_VIRTUALIZATION,      offsetof(Network, conditions)
 Match.KernelCommandLine,                     config_parse_net_condition,                               CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, conditions)
 Match.KernelVersion,                         config_parse_net_condition,                               CONDITION_KERNEL_VERSION,      offsetof(Network, conditions)
+Match.Credential,                            config_parse_net_condition,                               CONDITION_CREDENTIAL,          offsetof(Network, conditions)
 Match.Architecture,                          config_parse_net_condition,                               CONDITION_ARCHITECTURE,        offsetof(Network, conditions)
 Match.Firmware,                              config_parse_net_condition,                               CONDITION_FIRMWARE,            offsetof(Network, conditions)
-Link.MACAddress,                             config_parse_hwaddr,                                      0,                             offsetof(Network, mac)
+Link.MACAddress,                             config_parse_hw_addr,                                     0,                             offsetof(Network, hw_addr)
 Link.MTUBytes,                               config_parse_mtu,                                         AF_UNSPEC,                     offsetof(Network, mtu)
 Link.Group,                                  config_parse_link_group,                                  0,                             0
 Link.ARP,                                    config_parse_tristate,                                    0,                             offsetof(Network, arp)
@@ -69,23 +77,25 @@
 Link.ActivationPolicy,                       config_parse_activation_policy,                           0,                             offsetof(Network, activation_policy)
 Link.RequiredForOnline,                      config_parse_required_for_online,                         0,                             0
 Link.RequiredFamilyForOnline,                config_parse_required_family_for_online,                  0,                             offsetof(Network, required_family_for_online)
-SR-IOV.VirtualFunction,                      config_parse_sr_iov_uint32,                               0,                             0
-SR-IOV.VLANId,                               config_parse_sr_iov_uint32,                               0,                             0
-SR-IOV.QualityOfService,                     config_parse_sr_iov_uint32,                               0,                             0
-SR-IOV.VLANProtocol,                         config_parse_sr_iov_vlan_proto,                           0,                             0
-SR-IOV.MACSpoofCheck,                        config_parse_sr_iov_boolean,                              0,                             0
-SR-IOV.QueryReceiveSideScaling,              config_parse_sr_iov_boolean,                              0,                             0
-SR-IOV.Trust,                                config_parse_sr_iov_boolean,                              0,                             0
-SR-IOV.LinkState,                            config_parse_sr_iov_link_state,                           0,                             0
-SR-IOV.MACAddress,                           config_parse_sr_iov_mac,                                  0,                             0
+SR-IOV.VirtualFunction,                      config_parse_sr_iov_uint32,                               0,                             offsetof(Network, sr_iov_by_section)
+SR-IOV.VLANId,                               config_parse_sr_iov_uint32,                               0,                             offsetof(Network, sr_iov_by_section)
+SR-IOV.QualityOfService,                     config_parse_sr_iov_uint32,                               0,                             offsetof(Network, sr_iov_by_section)
+SR-IOV.VLANProtocol,                         config_parse_sr_iov_vlan_proto,                           0,                             offsetof(Network, sr_iov_by_section)
+SR-IOV.MACSpoofCheck,                        config_parse_sr_iov_boolean,                              0,                             offsetof(Network, sr_iov_by_section)
+SR-IOV.QueryReceiveSideScaling,              config_parse_sr_iov_boolean,                              0,                             offsetof(Network, sr_iov_by_section)
+SR-IOV.Trust,                                config_parse_sr_iov_boolean,                              0,                             offsetof(Network, sr_iov_by_section)
+SR-IOV.LinkState,                            config_parse_sr_iov_link_state,                           0,                             offsetof(Network, sr_iov_by_section)
+SR-IOV.MACAddress,                           config_parse_sr_iov_mac,                                  0,                             offsetof(Network, sr_iov_by_section)
 Network.Description,                         config_parse_string,                                      0,                             offsetof(Network, description)
+Network.KeepMaster,                          config_parse_bool,                                        0,                             offsetof(Network, keep_master)
 Network.BatmanAdvanced,                      config_parse_ifname,                                      0,                             offsetof(Network, batadv_name)
 Network.Bond,                                config_parse_ifname,                                      0,                             offsetof(Network, bond_name)
 Network.Bridge,                              config_parse_ifname,                                      0,                             offsetof(Network, bridge_name)
 Network.VRF,                                 config_parse_ifname,                                      0,                             offsetof(Network, vrf_name)
+Network.IPoIB,                               config_parse_stacked_netdev,                              NETDEV_KIND_IPOIB,             offsetof(Network, stacked_netdev_names)
 Network.IPVLAN,                              config_parse_stacked_netdev,                              NETDEV_KIND_IPVLAN,            offsetof(Network, stacked_netdev_names)
 Network.IPVTAP,                              config_parse_stacked_netdev,                              NETDEV_KIND_IPVTAP,            offsetof(Network, stacked_netdev_names)
-Network.L2TP,                                config_parse_stacked_netdev,                              NETDEV_KIND_L2TP,              offsetof(Network, stacked_netdev_names)
+Network.L2TP,                                config_parse_warn_compat,                                 DISABLED_LEGACY,               0
 Network.MACsec,                              config_parse_stacked_netdev,                              NETDEV_KIND_MACSEC,            offsetof(Network, stacked_netdev_names)
 Network.MACVLAN,                             config_parse_stacked_netdev,                              NETDEV_KIND_MACVLAN,           offsetof(Network, stacked_netdev_names)
 Network.MACVTAP,                             config_parse_stacked_netdev,                              NETDEV_KIND_MACVTAP,           offsetof(Network, stacked_netdev_names)
@@ -98,11 +108,11 @@
 Network.LinkLocalAddressing,                 config_parse_link_local_address_family,                   0,                             offsetof(Network, link_local)
 Network.IPv6LinkLocalAddressGenerationMode,  config_parse_ipv6_link_local_address_gen_mode,            0,                             offsetof(Network, ipv6ll_address_gen_mode)
 Network.IPv6StableSecretAddress,             config_parse_in_addr_non_null,                            AF_INET6,                      offsetof(Network, ipv6ll_stable_secret)
+Network.IPv4LLStartAddress,                  config_parse_ipv4ll_address,                              0,                             offsetof(Network, ipv4ll_start_address)
 Network.IPv4LLRoute,                         config_parse_bool,                                        0,                             offsetof(Network, ipv4ll_route)
 Network.DefaultRouteOnDevice,                config_parse_bool,                                        0,                             offsetof(Network, default_route_on_device)
-Network.IPv6Token,                           config_parse_address_generation_type,                     0,                             0
 Network.LLDP,                                config_parse_lldp_mode,                                   0,                             offsetof(Network, lldp_mode)
-Network.EmitLLDP,                            config_parse_lldp_emit,                                   0,                             offsetof(Network, lldp_emit)
+Network.EmitLLDP,                            config_parse_lldp_multicast_mode,                         0,                             offsetof(Network, lldp_multicast_mode)
 Network.Address,                             config_parse_address,                                     0,                             0
 Network.Gateway,                             config_parse_gateway,                                     0,                             0
 Network.Domains,                             config_parse_domains,                                     0,                             0
@@ -132,10 +142,10 @@
 Network.IPv6ProxyNDPAddress,                 config_parse_ipv6_proxy_ndp_address,                      0,                             0
 Network.BindCarrier,                         config_parse_strv,                                        0,                             offsetof(Network, bind_carrier)
 Network.ConfigureWithoutCarrier,             config_parse_bool,                                        0,                             offsetof(Network, configure_without_carrier)
-Network.IgnoreCarrierLoss,                   config_parse_tristate,                                    0,                             offsetof(Network, ignore_carrier_loss)
+Network.IgnoreCarrierLoss,                   config_parse_ignore_carrier_loss,                         0,                             0
 Network.KeepConfiguration,                   config_parse_keep_configuration,                          0,                             offsetof(Network, keep_configuration)
 Network.IPv6SendRA,                          config_parse_router_prefix_delegation,                    0,                             offsetof(Network, router_prefix_delegation)
-Network.DHCPv6PrefixDelegation,              config_parse_tristate,                                    0,                             offsetof(Network, dhcp6_pd)
+Network.DHCPPrefixDelegation,                config_parse_tristate,                                    0,                             offsetof(Network, dhcp_pd)
 Address.Address,                             config_parse_address,                                     0,                             0
 Address.Peer,                                config_parse_address,                                     0,                             0
 Address.Broadcast,                           config_parse_broadcast,                                   0,                             0
@@ -149,11 +159,12 @@
 Address.DuplicateAddressDetection,           config_parse_duplicate_address_detection,                 0,                             0
 Address.Scope,                               config_parse_address_scope,                               0,                             0
 Address.RouteMetric,                         config_parse_address_route_metric,                        0,                             0
+Address.NetLabel,                            config_parse_address_netlabel,                            0,                             0
 IPv6AddressLabel.Prefix,                     config_parse_address_label_prefix,                        0,                             0
 IPv6AddressLabel.Label,                      config_parse_address_label,                               0,                             0
 Neighbor.Address,                            config_parse_neighbor_address,                            0,                             0
 Neighbor.LinkLayerAddress,                   config_parse_neighbor_lladdr,                             0,                             0
-Neighbor.MACAddress,                         config_parse_neighbor_hwaddr,                             0,                             0 /* deprecated */
+Neighbor.MACAddress,                         config_parse_neighbor_lladdr,                             0,                             0 /* deprecated */
 RoutingPolicyRule.TypeOfService,             config_parse_routing_policy_rule_tos,                     0,                             0
 RoutingPolicyRule.Priority,                  config_parse_routing_policy_rule_priority,                0,                             0
 RoutingPolicyRule.Table,                     config_parse_routing_policy_rule_table,                   0,                             0
@@ -168,6 +179,7 @@
 RoutingPolicyRule.InvertRule,                config_parse_routing_policy_rule_invert,                  0,                             0
 RoutingPolicyRule.Family,                    config_parse_routing_policy_rule_family,                  0,                             0
 RoutingPolicyRule.User,                      config_parse_routing_policy_rule_uid_range,               0,                             0
+RoutingPolicyRule.SuppressInterfaceGroup,    config_parse_routing_policy_rule_suppress_ifgroup,        0,                             0
 RoutingPolicyRule.SuppressPrefixLength,      config_parse_routing_policy_rule_suppress_prefixlen,      0,                             0
 RoutingPolicyRule.Type,                      config_parse_routing_policy_rule_type,                    0,                             0
 Route.Gateway,                               config_parse_gateway,                                     0,                             0
@@ -186,6 +198,7 @@
 Route.InitialCongestionWindow,               config_parse_tcp_window,                                  0,                             0
 Route.InitialAdvertisedReceiveWindow,        config_parse_tcp_window,                                  0,                             0
 Route.TCPAdvertisedMaximumSegmentSize,       config_parse_tcp_advmss,                                  0,                             0
+Route.TCPCongestionControlAlgorithm,         config_parse_tcp_congestion,                              0,                             0
 Route.QuickAck,                              config_parse_route_boolean,                               0,                             0
 Route.FastOpenNoCookie,                      config_parse_route_boolean,                               0,                             0
 Route.TTLPropagate,                          config_parse_route_boolean,                               0,                             0
@@ -198,74 +211,87 @@
 NextHop.Blackhole,                           config_parse_nexthop_blackhole,                           0,                             0
 NextHop.Group,                               config_parse_nexthop_group,                               0,                             0
 DHCPv4.ClientIdentifier,                     config_parse_dhcp_client_identifier,                      0,                             offsetof(Network, dhcp_client_identifier)
-DHCPv4.UseDNS,                               config_parse_dhcp_use_dns,                                0,                             0
+DHCPv4.UseDNS,                               config_parse_dhcp_use_dns,                                AF_INET,                       0
 DHCPv4.RoutesToDNS,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_routes_to_dns)
-DHCPv4.UseNTP,                               config_parse_dhcp_use_ntp,                                0,                             0
+DHCPv4.UseNTP,                               config_parse_dhcp_use_ntp,                                AF_INET,                       0
 DHCPv4.RoutesToNTP,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_routes_to_ntp)
 DHCPv4.UseSIP,                               config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_sip)
 DHCPv4.UseMTU,                               config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_mtu)
 DHCPv4.UseHostname,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_hostname)
-DHCPv4.UseDomains,                           config_parse_dhcp_use_domains,                            0,                             0
+DHCPv4.UseDomains,                           config_parse_dhcp_use_domains,                            AF_INET,                       0
 DHCPv4.UseRoutes,                            config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_routes)
 DHCPv4.UseGateway,                           config_parse_tristate,                                    0,                             offsetof(Network, dhcp_use_gateway)
+DHCPv4.QuickAck,                             config_parse_bool,                                        0,                             offsetof(Network, dhcp_quickack)
 DHCPv4.RequestOptions,                       config_parse_dhcp_request_options,                        AF_INET,                       0
 DHCPv4.Anonymize,                            config_parse_bool,                                        0,                             offsetof(Network, dhcp_anonymize)
 DHCPv4.SendHostname,                         config_parse_bool,                                        0,                             offsetof(Network, dhcp_send_hostname)
 DHCPv4.Hostname,                             config_parse_hostname,                                    0,                             offsetof(Network, dhcp_hostname)
+DHCPv4.Label,                                config_parse_dhcp_label,                                  0,                             offsetof(Network, dhcp_label)
 DHCPv4.RequestBroadcast,                     config_parse_tristate,                                    0,                             offsetof(Network, dhcp_broadcast)
-DHCPv4.VendorClassIdentifier,                config_parse_string,                                      0,                             offsetof(Network, dhcp_vendor_class_identifier)
-DHCPv4.MUDURL,                               config_parse_dhcp_mud_url,                                0,                             0
+DHCPv4.VendorClassIdentifier,                config_parse_string,                                      CONFIG_PARSE_STRING_SAFE,      offsetof(Network, dhcp_vendor_class_identifier)
+DHCPv4.MUDURL,                               config_parse_mud_url,                                     0,                             offsetof(Network, dhcp_mudurl)
 DHCPv4.MaxAttempts,                          config_parse_dhcp_max_attempts,                           0,                             0
 DHCPv4.UserClass,                            config_parse_dhcp_user_or_vendor_class,                   AF_INET,                       offsetof(Network, dhcp_user_class)
 DHCPv4.IAID,                                 config_parse_iaid,                                        AF_INET,                       0
 DHCPv4.DUIDType,                             config_parse_network_duid_type,                           0,                             0
 DHCPv4.DUIDRawData,                          config_parse_network_duid_rawdata,                        0,                             0
-DHCPv4.RouteMetric,                          config_parse_dhcp_route_metric,                           0,                             0
-DHCPv4.RouteTable,                           config_parse_section_route_table,                         0,                             0
+DHCPv4.RouteMetric,                          config_parse_dhcp_route_metric,                           AF_INET,                       0
+DHCPv4.RouteTable,                           config_parse_dhcp_or_ra_route_table,                      AF_INET,                       0
 DHCPv4.UseTimezone,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_timezone)
 DHCPv4.ListenPort,                           config_parse_uint16,                                      0,                             offsetof(Network, dhcp_client_port)
 DHCPv4.SendRelease,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_send_release)
 DHCPv4.SendDecline,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_send_decline)
-DHCPv4.DenyList,                             config_parse_dhcp_acl_ip_address,                         0,                             0
-DHCPv4.AllowList,                            config_parse_dhcp_acl_ip_address,                         0,                             0
+DHCPv4.DenyList,                             config_parse_in_addr_prefixes,                            AF_INET,                       offsetof(Network, dhcp_deny_listed_ip)
+DHCPv4.AllowList,                            config_parse_in_addr_prefixes,                            AF_INET,                       offsetof(Network, dhcp_allow_listed_ip)
 DHCPv4.IPServiceType,                        config_parse_dhcp_ip_service_type,                        0,                             offsetof(Network, dhcp_ip_service_type)
+DHCPv4.SocketPriority,                       config_parse_dhcp_socket_priority,                        0,                             0
 DHCPv4.SendOption,                           config_parse_dhcp_send_option,                            AF_INET,                       offsetof(Network, dhcp_client_send_options)
 DHCPv4.SendVendorOption,                     config_parse_dhcp_send_option,                            0,                             offsetof(Network, dhcp_client_send_vendor_options)
 DHCPv4.RouteMTUBytes,                        config_parse_mtu,                                         AF_INET,                       offsetof(Network, dhcp_route_mtu)
 DHCPv4.FallbackLeaseLifetimeSec,             config_parse_dhcp_fallback_lease_lifetime,                0,                             0
+DHCPv4.Use6RD,                               config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_6rd)
+DHCPv4.NetLabel,                             config_parse_string,                                      CONFIG_PARSE_STRING_SAFE,      offsetof(Network, dhcp_netlabel)
 DHCPv6.UseAddress,                           config_parse_bool,                                        0,                             offsetof(Network, dhcp6_use_address)
-DHCPv6.UseDNS,                               config_parse_dhcp_use_dns,                                0,                             0
+DHCPv6.UseDelegatedPrefix,                   config_parse_bool,                                        0,                             offsetof(Network, dhcp6_use_pd_prefix)
+DHCPv6.UseDNS,                               config_parse_dhcp_use_dns,                                AF_INET6,                      0
 DHCPv6.UseHostname,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp6_use_hostname)
-DHCPv6.UseDomains,                           config_parse_dhcp_use_domains,                            0,                             0
-DHCPv6.UseNTP,                               config_parse_dhcp_use_ntp,                                0,                             0
-DHCPv6.RapidCommit,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp6_rapid_commit)
-DHCPv6.MUDURL,                               config_parse_dhcp6_mud_url,                               0,                             0
+DHCPv6.UseDomains,                           config_parse_dhcp_use_domains,                            AF_INET6,                      0
+DHCPv6.UseNTP,                               config_parse_dhcp_use_ntp,                                AF_INET6,                      0
+DHCPv6.MUDURL,                               config_parse_mud_url,                                     0,                             offsetof(Network, dhcp6_mudurl)
 DHCPv6.RequestOptions,                       config_parse_dhcp_request_options,                        AF_INET6,                      0
 DHCPv6.UserClass,                            config_parse_dhcp_user_or_vendor_class,                   AF_INET6,                      offsetof(Network, dhcp6_user_class)
 DHCPv6.VendorClass,                          config_parse_dhcp_user_or_vendor_class,                   AF_INET6,                      offsetof(Network, dhcp6_vendor_class)
 DHCPv6.SendVendorOption,                     config_parse_dhcp_send_option,                            AF_INET6,                      offsetof(Network, dhcp6_client_send_vendor_options)
-DHCPv6.ForceDHCPv6PDOtherInformation,        config_parse_bool,                                        0,                             offsetof(Network, dhcp6_force_pd_other_information)
-DHCPv6.PrefixDelegationHint,                 config_parse_dhcp6_pd_hint,                               0,                             0
-DHCPv6.WithoutRA,                            config_parse_dhcp6_client_start_mode,                     0,                             offsetof(Network, dhcp6_without_ra)
+DHCPv6.PrefixDelegationHint,                 config_parse_dhcp6_pd_prefix_hint,                        0,                             0
+DHCPv6.WithoutRA,                            config_parse_dhcp6_client_start_mode,                     0,                             offsetof(Network, dhcp6_client_start_mode)
 DHCPv6.SendOption,                           config_parse_dhcp_send_option,                            AF_INET6,                      offsetof(Network, dhcp6_client_send_options)
 DHCPv6.IAID,                                 config_parse_iaid,                                        AF_INET6,                      0
 DHCPv6.DUIDType,                             config_parse_duid_type,                                   0,                             offsetof(Network, dhcp6_duid)
 DHCPv6.DUIDRawData,                          config_parse_duid_rawdata,                                0,                             offsetof(Network, dhcp6_duid)
+DHCPv6.RapidCommit,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp6_use_rapid_commit)
+DHCPv6.NetLabel,                             config_parse_string,                                      CONFIG_PARSE_STRING_SAFE,      offsetof(Network, dhcp6_netlabel)
+DHCPv6.SendRelease,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp6_send_release)
+IPv6AcceptRA.UseGateway,                     config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_gateway)
+IPv6AcceptRA.UseRoutePrefix,                 config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_route_prefix)
 IPv6AcceptRA.UseAutonomousPrefix,            config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_autonomous_prefix)
 IPv6AcceptRA.UseOnLinkPrefix,                config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_onlink_prefix)
 IPv6AcceptRA.UseDNS,                         config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_dns)
 IPv6AcceptRA.UseDomains,                     config_parse_ipv6_accept_ra_use_domains,                  0,                             offsetof(Network, ipv6_accept_ra_use_domains)
+IPv6AcceptRA.UseMTU,                         config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_mtu)
 IPv6AcceptRA.DHCPv6Client,                   config_parse_ipv6_accept_ra_start_dhcp6_client,           0,                             offsetof(Network, ipv6_accept_ra_start_dhcp6_client)
-IPv6AcceptRA.RouteTable,                     config_parse_section_route_table,                         0,                             0
-IPv6AcceptRA.RouteMetric,                    config_parse_dhcp_route_metric,                           0,                             0
-IPv6AcceptRA.RouterAllowList,                config_parse_ndisc_address_filter,                        0,                             offsetof(Network, ndisc_allow_listed_router)
-IPv6AcceptRA.RouterDenyList,                 config_parse_ndisc_address_filter,                        0,                             offsetof(Network, ndisc_deny_listed_router)
-IPv6AcceptRA.PrefixAllowList,                config_parse_ndisc_address_filter,                        0,                             offsetof(Network, ndisc_allow_listed_prefix)
-IPv6AcceptRA.PrefixDenyList,                 config_parse_ndisc_address_filter,                        0,                             offsetof(Network, ndisc_deny_listed_prefix)
-IPv6AcceptRA.RouteAllowList,                 config_parse_ndisc_address_filter,                        0,                             offsetof(Network, ndisc_allow_listed_route_prefix)
-IPv6AcceptRA.RouteDenyList,                  config_parse_ndisc_address_filter,                        0,                             offsetof(Network, ndisc_deny_listed_route_prefix)
+IPv6AcceptRA.RouteTable,                     config_parse_dhcp_or_ra_route_table,                      AF_INET6,                      0
+IPv6AcceptRA.RouteMetric,                    config_parse_ipv6_accept_ra_route_metric,                 0,                             0
+IPv6AcceptRA.QuickAck,                       config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_quickack)
+IPv6AcceptRA.RouterAllowList,                config_parse_in_addr_prefixes,                            AF_INET6,                      offsetof(Network, ndisc_allow_listed_router)
+IPv6AcceptRA.RouterDenyList,                 config_parse_in_addr_prefixes,                            AF_INET6,                      offsetof(Network, ndisc_deny_listed_router)
+IPv6AcceptRA.PrefixAllowList,                config_parse_in_addr_prefixes,                            AF_INET6,                      offsetof(Network, ndisc_allow_listed_prefix)
+IPv6AcceptRA.PrefixDenyList,                 config_parse_in_addr_prefixes,                            AF_INET6,                      offsetof(Network, ndisc_deny_listed_prefix)
+IPv6AcceptRA.RouteAllowList,                 config_parse_in_addr_prefixes,                            AF_INET6,                      offsetof(Network, ndisc_allow_listed_route_prefix)
+IPv6AcceptRA.RouteDenyList,                  config_parse_in_addr_prefixes,                            AF_INET6,                      offsetof(Network, ndisc_deny_listed_route_prefix)
+IPv6AcceptRA.Token,                          config_parse_address_generation_type,                     0,                             offsetof(Network, ndisc_tokens)
+IPv6AcceptRA.NetLabel,                       config_parse_string,                                      CONFIG_PARSE_STRING_SAFE,      offsetof(Network, ndisc_netlabel)
 DHCPServer.ServerAddress,                    config_parse_dhcp_server_address,                         0,                             0
-DHCPServer.UplinkInterface,                  config_parse_dhcp_server_uplink,                          0,                             0
+DHCPServer.UplinkInterface,                  config_parse_uplink,                                      0,                             0
 DHCPServer.RelayTarget,                      config_parse_in_addr_non_null,                            AF_INET,                       offsetof(Network, dhcp_server_relay_target)
 DHCPServer.RelayAgentCircuitId,              config_parse_dhcp_server_relay_agent_suboption,           0,                             offsetof(Network, dhcp_server_relay_agent_circuit_id)
 DHCPServer.RelayAgentRemoteId,               config_parse_dhcp_server_relay_agent_suboption,           0,                             offsetof(Network, dhcp_server_relay_agent_remote_id)
@@ -284,6 +310,7 @@
 DHCPServer.EmitLPR,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_server_emit[SD_DHCP_LEASE_LPR].emit)
 DHCPServer.LPR,                              config_parse_dhcp_server_emit,                            0,                             offsetof(Network, dhcp_server_emit[SD_DHCP_LEASE_LPR])
 DHCPServer.EmitRouter,                       config_parse_bool,                                        0,                             offsetof(Network, dhcp_server_emit_router)
+DHCPServer.Router,                           config_parse_in_addr_non_null,                            AF_INET,                       offsetof(Network, dhcp_server_router)
 DHCPServer.EmitTimezone,                     config_parse_bool,                                        0,                             offsetof(Network, dhcp_server_emit_timezone)
 DHCPServer.Timezone,                         config_parse_timezone,                                    0,                             offsetof(Network, dhcp_server_timezone)
 DHCPServer.PoolOffset,                       config_parse_uint32,                                      0,                             offsetof(Network, dhcp_server_pool_offset)
@@ -291,11 +318,15 @@
 DHCPServer.SendVendorOption,                 config_parse_dhcp_send_option,                            0,                             offsetof(Network, dhcp_server_send_vendor_options)
 DHCPServer.SendOption,                       config_parse_dhcp_send_option,                            0,                             offsetof(Network, dhcp_server_send_options)
 DHCPServer.BindToInterface,                  config_parse_bool,                                        0,                             offsetof(Network, dhcp_server_bind_to_interface)
+DHCPServer.BootServerAddress,                config_parse_in_addr_non_null,                            AF_INET,                       offsetof(Network, dhcp_server_boot_server_address)
+DHCPServer.BootServerName,                   config_parse_dns_name,                                    0,                             offsetof(Network, dhcp_server_boot_server_name)
+DHCPServer.BootFilename,                     config_parse_string,                                      CONFIG_PARSE_STRING_SAFE_AND_ASCII, offsetof(Network, dhcp_server_boot_filename)
 DHCPServerStaticLease.Address,               config_parse_dhcp_static_lease_address,                   0,                             0
 DHCPServerStaticLease.MACAddress,            config_parse_dhcp_static_lease_hwaddr,                    0,                             0
 Bridge.Cost,                                 config_parse_uint32,                                      0,                             offsetof(Network, cost)
 Bridge.UseBPDU,                              config_parse_tristate,                                    0,                             offsetof(Network, use_bpdu)
 Bridge.HairPin,                              config_parse_tristate,                                    0,                             offsetof(Network, hairpin)
+Bridge.Isolated,                             config_parse_tristate,                                    0,                             offsetof(Network, isolated)
 Bridge.FastLeave,                            config_parse_tristate,                                    0,                             offsetof(Network, fast_leave)
 Bridge.AllowPortToBeRoot,                    config_parse_tristate,                                    0,                             offsetof(Network, allow_port_to_be_root)
 Bridge.UnicastFlood,                         config_parse_tristate,                                    0,                             offsetof(Network, unicast_flood)
@@ -318,13 +349,15 @@
 BridgeVLAN.PVID,                             config_parse_brvlan_pvid,                                 0,                             0
 BridgeVLAN.VLAN,                             config_parse_brvlan_vlan,                                 0,                             0
 BridgeVLAN.EgressUntagged,                   config_parse_brvlan_untagged,                             0,                             0
-DHCPv6PrefixDelegation.SubnetId,             config_parse_dhcp6_pd_subnet_id,                          0,                             offsetof(Network, dhcp6_pd_subnet_id)
-DHCPv6PrefixDelegation.Announce,             config_parse_bool,                                        0,                             offsetof(Network, dhcp6_pd_announce)
-DHCPv6PrefixDelegation.Assign,               config_parse_bool,                                        0,                             offsetof(Network, dhcp6_pd_assign)
-DHCPv6PrefixDelegation.ManageTemporaryAddress, config_parse_bool,                                      0,                             offsetof(Network, dhcp6_pd_manage_temporary_address)
-DHCPv6PrefixDelegation.Token,                config_parse_in_addr_non_null,                            AF_INET6,                      offsetof(Network, dhcp6_pd_token)
-DHCPv6PrefixDelegation.RouteMetric,          config_parse_uint32,                                      0,                             offsetof(Network, dhcp6_pd_route_metric)
-IPv6SendRA.RouterLifetimeSec,                config_parse_sec,                                         0,                             offsetof(Network, router_lifetime_usec)
+DHCPPrefixDelegation.UplinkInterface,        config_parse_uplink,                                      0,                             0
+DHCPPrefixDelegation.SubnetId,               config_parse_dhcp_pd_subnet_id,                           0,                             offsetof(Network, dhcp_pd_subnet_id)
+DHCPPrefixDelegation.Announce,               config_parse_bool,                                        0,                             offsetof(Network, dhcp_pd_announce)
+DHCPPrefixDelegation.Assign,                 config_parse_bool,                                        0,                             offsetof(Network, dhcp_pd_assign)
+DHCPPrefixDelegation.ManageTemporaryAddress, config_parse_bool,                                        0,                             offsetof(Network, dhcp_pd_manage_temporary_address)
+DHCPPrefixDelegation.Token,                  config_parse_address_generation_type,                     0,                             offsetof(Network, dhcp_pd_tokens)
+DHCPPrefixDelegation.RouteMetric,            config_parse_uint32,                                      0,                             offsetof(Network, dhcp_pd_route_metric)
+DHCPPrefixDelegation.NetLabel,               config_parse_string,                                      CONFIG_PARSE_STRING_SAFE,      offsetof(Network, dhcp_pd_netlabel)
+IPv6SendRA.RouterLifetimeSec,                config_parse_router_lifetime,                             0,                             offsetof(Network, router_lifetime_usec)
 IPv6SendRA.Managed,                          config_parse_bool,                                        0,                             offsetof(Network, router_managed)
 IPv6SendRA.OtherInformation,                 config_parse_bool,                                        0,                             offsetof(Network, router_other_information)
 IPv6SendRA.RouterPreference,                 config_parse_router_preference,                           0,                             0
@@ -333,27 +366,45 @@
 IPv6SendRA.EmitDomains,                      config_parse_bool,                                        0,                             offsetof(Network, router_emit_domains)
 IPv6SendRA.Domains,                          config_parse_radv_search_domains,                         0,                             0
 IPv6SendRA.DNSLifetimeSec,                   config_parse_sec,                                         0,                             offsetof(Network, router_dns_lifetime_usec)
+IPv6SendRA.UplinkInterface,                  config_parse_uplink,                                      0,                             0
 IPv6Prefix.Prefix,                           config_parse_prefix,                                      0,                             0
-IPv6Prefix.OnLink,                           config_parse_prefix_flags,                                0,                             0
-IPv6Prefix.AddressAutoconfiguration,         config_parse_prefix_flags,                                0,                             0
+IPv6Prefix.OnLink,                           config_parse_prefix_boolean,                              0,                             0
+IPv6Prefix.AddressAutoconfiguration,         config_parse_prefix_boolean,                              0,                             0
 IPv6Prefix.ValidLifetimeSec,                 config_parse_prefix_lifetime,                             0,                             0
 IPv6Prefix.PreferredLifetimeSec,             config_parse_prefix_lifetime,                             0,                             0
-IPv6Prefix.Assign,                           config_parse_prefix_assign,                               0,                             0
+IPv6Prefix.Assign,                           config_parse_prefix_boolean,                              0,                             0
 IPv6Prefix.RouteMetric,                      config_parse_prefix_metric,                               0,                             0
+IPv6Prefix.Token,                            config_parse_prefix_token,                                0,                             0
 IPv6RoutePrefix.Route,                       config_parse_route_prefix,                                0,                             0
 IPv6RoutePrefix.LifetimeSec,                 config_parse_route_prefix_lifetime,                       0,                             0
-LLDP.MUDURL,                                 config_parse_lldp_mud,                                    0,                             0
+LLDP.MUDURL,                                 config_parse_mud_url,                                     0,                             offsetof(Network, lldp_mudurl)
 CAN.BitRate,                                 config_parse_can_bitrate,                                 0,                             offsetof(Network, can_bitrate)
 CAN.SamplePoint,                             config_parse_permille,                                    0,                             offsetof(Network, can_sample_point)
+CAN.TimeQuantaNSec,                          config_parse_can_time_quanta,                             0,                             offsetof(Network, can_time_quanta_ns)
+CAN.PropagationSegment,                      config_parse_uint32,                                      0,                             offsetof(Network, can_propagation_segment)
+CAN.PhaseBufferSegment1,                     config_parse_uint32,                                      0,                             offsetof(Network, can_phase_buffer_segment_1)
+CAN.PhaseBufferSegment2,                     config_parse_uint32,                                      0,                             offsetof(Network, can_phase_buffer_segment_2)
+CAN.SyncJumpWidth,                           config_parse_uint32,                                      0,                             offsetof(Network, can_sync_jump_width)
 CAN.DataBitRate,                             config_parse_can_bitrate,                                 0,                             offsetof(Network, can_data_bitrate)
 CAN.DataSamplePoint,                         config_parse_permille,                                    0,                             offsetof(Network, can_data_sample_point)
-CAN.FDMode,                                  config_parse_tristate,                                    0,                             offsetof(Network, can_fd_mode)
-CAN.FDNonISO,                                config_parse_tristate,                                    0,                             offsetof(Network, can_non_iso)
-CAN.RestartSec,                              config_parse_sec,                                         0,                             offsetof(Network, can_restart_us)
-CAN.TripleSampling,                          config_parse_tristate,                                    0,                             offsetof(Network, can_triple_sampling)
-CAN.BusErrorReporting,                       config_parse_tristate,                                    0,                             offsetof(Network, can_berr_reporting)
-CAN.Termination,                             config_parse_tristate,                                    0,                             offsetof(Network, can_termination)
-CAN.ListenOnly,                              config_parse_tristate,                                    0,                             offsetof(Network, can_listen_only)
+CAN.DataTimeQuantaNSec,                      config_parse_can_time_quanta,                             0,                             offsetof(Network, can_data_time_quanta_ns)
+CAN.DataPropagationSegment,                  config_parse_uint32,                                      0,                             offsetof(Network, can_data_propagation_segment)
+CAN.DataPhaseBufferSegment1,                 config_parse_uint32,                                      0,                             offsetof(Network, can_data_phase_buffer_segment_1)
+CAN.DataPhaseBufferSegment2,                 config_parse_uint32,                                      0,                             offsetof(Network, can_data_phase_buffer_segment_2)
+CAN.DataSyncJumpWidth,                       config_parse_uint32,                                      0,                             offsetof(Network, can_data_sync_jump_width)
+CAN.RestartSec,                              config_parse_can_restart_usec,                            0,                             offsetof(Network, can_restart_us)
+CAN.Loopback,                                config_parse_can_control_mode,                            CAN_CTRLMODE_LOOPBACK,         0
+CAN.ListenOnly,                              config_parse_can_control_mode,                            CAN_CTRLMODE_LISTENONLY,       0
+CAN.TripleSampling,                          config_parse_can_control_mode,                            CAN_CTRLMODE_3_SAMPLES,        0
+CAN.OneShot,                                 config_parse_can_control_mode,                            CAN_CTRLMODE_ONE_SHOT,         0
+CAN.BusErrorReporting,                       config_parse_can_control_mode,                            CAN_CTRLMODE_BERR_REPORTING,   0
+CAN.FDMode,                                  config_parse_can_control_mode,                            CAN_CTRLMODE_FD,               0
+CAN.PresumeACK,                              config_parse_can_control_mode,                            CAN_CTRLMODE_PRESUME_ACK,      0
+CAN.FDNonISO,                                config_parse_can_control_mode,                            CAN_CTRLMODE_FD_NON_ISO,       0
+CAN.ClassicDataLengthCode,                   config_parse_can_control_mode,                            CAN_CTRLMODE_CC_LEN8_DLC,      0
+CAN.Termination,                             config_parse_can_termination,                             0,                             0
+IPoIB.Mode,                                  config_parse_ipoib_mode,                                  0,                             offsetof(Network, ipoib_mode)
+IPoIB.IgnoreUserspaceMulticastGroups,        config_parse_tristate,                                    0,                             offsetof(Network, ipoib_umcast)
 QDisc.Parent,                                config_parse_qdisc_parent,                                _QDISC_KIND_INVALID,           0
 QDisc.Handle,                                config_parse_qdisc_handle,                                _QDISC_KIND_INVALID,           0
 BFIFO.Parent,                                config_parse_qdisc_parent,                                QDISC_KIND_BFIFO,              0
@@ -362,7 +413,19 @@
 CAKE.Parent,                                 config_parse_qdisc_parent,                                QDISC_KIND_CAKE,               0
 CAKE.Handle,                                 config_parse_qdisc_handle,                                QDISC_KIND_CAKE,               0
 CAKE.Bandwidth,                              config_parse_cake_bandwidth,                              QDISC_KIND_CAKE,               0
+CAKE.AutoRateIngress,                        config_parse_cake_tristate,                               QDISC_KIND_CAKE,               0
 CAKE.OverheadBytes,                          config_parse_cake_overhead,                               QDISC_KIND_CAKE,               0
+CAKE.MPUBytes,                               config_parse_cake_mpu,                                    QDISC_KIND_CAKE,               0
+CAKE.CompensationMode,                       config_parse_cake_compensation_mode,                      QDISC_KIND_CAKE,               0
+CAKE.UseRawPacketSize,                       config_parse_cake_tristate,                               QDISC_KIND_CAKE,               0
+CAKE.FlowIsolationMode,                      config_parse_cake_flow_isolation_mode,                    QDISC_KIND_CAKE,               0
+CAKE.NAT,                                    config_parse_cake_tristate,                               QDISC_KIND_CAKE,               0
+CAKE.PriorityQueueingPreset,                 config_parse_cake_priority_queueing_preset,               QDISC_KIND_CAKE,               0
+CAKE.FirewallMark,                           config_parse_cake_fwmark,                                 QDISC_KIND_CAKE,               0
+CAKE.Wash,                                   config_parse_cake_tristate,                               QDISC_KIND_CAKE,               0
+CAKE.SplitGSO,                               config_parse_cake_tristate,                               QDISC_KIND_CAKE,               0
+CAKE.RTTSec,                                 config_parse_cake_rtt,                                    QDISC_KIND_CAKE,               0
+CAKE.AckFilter,                              config_parse_cake_ack_filter,                             QDISC_KIND_CAKE,               0
 ControlledDelay.Parent,                      config_parse_qdisc_parent,                                QDISC_KIND_CODEL,              0
 ControlledDelay.Handle,                      config_parse_qdisc_handle,                                QDISC_KIND_CODEL,              0
 ControlledDelay.PacketLimit,                 config_parse_controlled_delay_u32,                        QDISC_KIND_CODEL,              0
@@ -471,7 +534,9 @@
 TrivialLinkEqualizer.Id,                     config_parse_trivial_link_equalizer_id,                   QDISC_KIND_TEQL,               0
 /* backwards compatibility: do not add new entries to this section */
 Network.IPv4LL,                              config_parse_ipv4ll,                                      0,                             offsetof(Network, link_local)
+Network.IPv6Token,                           config_parse_address_generation_type,                     0,                             offsetof(Network, ndisc_tokens)
 Network.IPv6PrefixDelegation,                config_parse_router_prefix_delegation,                    0,                             offsetof(Network, router_prefix_delegation)
+Network.DHCPv6PrefixDelegation,              config_parse_tristate,                                    0,                             offsetof(Network, dhcp_pd)
 IPv6PrefixDelegation.RouterLifetimeSec,      config_parse_sec,                                         0,                             offsetof(Network, router_lifetime_usec)
 IPv6PrefixDelegation.Managed,                config_parse_bool,                                        0,                             offsetof(Network, router_managed)
 IPv6PrefixDelegation.OtherInformation,       config_parse_bool,                                        0,                             offsetof(Network, router_other_information)
@@ -481,36 +546,43 @@
 IPv6PrefixDelegation.EmitDomains,            config_parse_bool,                                        0,                             offsetof(Network, router_emit_domains)
 IPv6PrefixDelegation.Domains,                config_parse_radv_search_domains,                         0,                             0
 IPv6PrefixDelegation.DNSLifetimeSec,         config_parse_sec,                                         0,                             offsetof(Network, router_dns_lifetime_usec)
-DHCPv4.BlackList,                            config_parse_dhcp_acl_ip_address,                         0,                             0
+DHCPv4.BlackList,                            config_parse_in_addr_prefixes,                            AF_INET,                       offsetof(Network, dhcp_deny_listed_ip)
 DHCP.ClientIdentifier,                       config_parse_dhcp_client_identifier,                      0,                             offsetof(Network, dhcp_client_identifier)
-DHCP.UseDNS,                                 config_parse_dhcp_use_dns,                                0,                             0
-DHCP.UseNTP,                                 config_parse_dhcp_use_ntp,                                0,                             0
+DHCP.UseDNS,                                 config_parse_dhcp_use_dns,                                AF_UNSPEC,                     0
+DHCP.UseNTP,                                 config_parse_dhcp_use_ntp,                                AF_UNSPEC,                     0
 DHCP.UseMTU,                                 config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_mtu)
 DHCP.UseHostname,                            config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_hostname)
-DHCP.UseDomains,                             config_parse_dhcp_use_domains,                            0,                             0
-DHCP.UseDomainName,                          config_parse_dhcp_use_domains,                            0,                             0
+DHCP.UseDomains,                             config_parse_dhcp_use_domains,                            AF_UNSPEC,                     0
+DHCP.UseDomainName,                          config_parse_dhcp_use_domains,                            AF_UNSPEC,                     0
 DHCP.UseRoutes,                              config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_routes)
 DHCP.Anonymize,                              config_parse_bool,                                        0,                             offsetof(Network, dhcp_anonymize)
 DHCP.SendHostname,                           config_parse_bool,                                        0,                             offsetof(Network, dhcp_send_hostname)
 DHCP.Hostname,                               config_parse_hostname,                                    0,                             offsetof(Network, dhcp_hostname)
 DHCP.RequestBroadcast,                       config_parse_tristate,                                    0,                             offsetof(Network, dhcp_broadcast)
 DHCP.CriticalConnection,                     config_parse_tristate,                                    0,                             offsetof(Network, dhcp_critical)
-DHCP.VendorClassIdentifier,                  config_parse_string,                                      0,                             offsetof(Network, dhcp_vendor_class_identifier)
+DHCP.VendorClassIdentifier,                  config_parse_string,                                      CONFIG_PARSE_STRING_SAFE,      offsetof(Network, dhcp_vendor_class_identifier)
 DHCP.UserClass,                              config_parse_dhcp_user_or_vendor_class,                   AF_INET,                       offsetof(Network, dhcp_user_class)
 DHCP.IAID,                                   config_parse_iaid,                                        AF_INET,                       0
 DHCP.DUIDType,                               config_parse_network_duid_type,                           0,                             0
 DHCP.DUIDRawData,                            config_parse_network_duid_rawdata,                        0,                             0
-DHCP.RouteMetric,                            config_parse_dhcp_route_metric,                           0,                             0
-DHCP.RouteTable,                             config_parse_section_route_table,                         0,                             0
+DHCP.RouteMetric,                            config_parse_dhcp_route_metric,                           AF_UNSPEC,                     0
+DHCP.RouteTable,                             config_parse_dhcp_or_ra_route_table,                      AF_INET,                       0
 DHCP.UseTimezone,                            config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_timezone)
 DHCP.ListenPort,                             config_parse_uint16,                                      0,                             offsetof(Network, dhcp_client_port)
-DHCP.RapidCommit,                            config_parse_bool,                                        0,                             offsetof(Network, dhcp6_rapid_commit)
-DHCP.ForceDHCPv6PDOtherInformation,          config_parse_bool,                                        0,                             offsetof(Network, dhcp6_force_pd_other_information)
-DHCPv4.UseDomainName,                        config_parse_dhcp_use_domains,                            0,                             0
+DHCP.RapidCommit,                            config_parse_bool,                                        0,                             offsetof(Network, dhcp6_use_rapid_commit)
+DHCP.ForceDHCPv6PDOtherInformation,          config_parse_warn_compat,                                 DISABLED_LEGACY,               0
+DHCPv4.UseDomainName,                        config_parse_dhcp_use_domains,                            AF_INET,                       0
 DHCPv4.CriticalConnection,                   config_parse_tristate,                                    0,                             offsetof(Network, dhcp_critical)
-DHCPv6.RouteMetric,                          config_parse_dhcp_route_metric,                           0,                             0
-IPv6AcceptRA.DenyList,                       config_parse_ndisc_address_filter,                        0,                             offsetof(Network, ndisc_deny_listed_prefix)
-IPv6AcceptRA.BlackList,                      config_parse_ndisc_address_filter,                        0,                             offsetof(Network, ndisc_deny_listed_prefix)
+DHCPv6.RouteMetric,                          config_parse_ipv6_accept_ra_route_metric,                 AF_INET6,                      0
+DHCPv6.ForceDHCPv6PDOtherInformation,        config_parse_warn_compat,                                 DISABLED_LEGACY,               0
+DHCPv6PrefixDelegation.SubnetId,             config_parse_dhcp_pd_subnet_id,                           0,                             offsetof(Network, dhcp_pd_subnet_id)
+DHCPv6PrefixDelegation.Announce,             config_parse_bool,                                        0,                             offsetof(Network, dhcp_pd_announce)
+DHCPv6PrefixDelegation.Assign,               config_parse_bool,                                        0,                             offsetof(Network, dhcp_pd_assign)
+DHCPv6PrefixDelegation.ManageTemporaryAddress, config_parse_bool,                                      0,                             offsetof(Network, dhcp_pd_manage_temporary_address)
+DHCPv6PrefixDelegation.Token,                config_parse_address_generation_type,                     0,                             offsetof(Network, dhcp_pd_tokens)
+DHCPv6PrefixDelegation.RouteMetric,          config_parse_uint32,                                      0,                             offsetof(Network, dhcp_pd_route_metric)
+IPv6AcceptRA.DenyList,                       config_parse_in_addr_prefixes,                            AF_INET6,                      offsetof(Network, ndisc_deny_listed_prefix)
+IPv6AcceptRA.BlackList,                      config_parse_in_addr_prefixes,                            AF_INET6,                      offsetof(Network, ndisc_deny_listed_prefix)
 TrafficControlQueueingDiscipline.Parent,                        config_parse_qdisc_parent,             _QDISC_KIND_INVALID,           0
 TrafficControlQueueingDiscipline.NetworkEmulatorDelaySec,       config_parse_network_emulator_delay,   0,                             0
 TrafficControlQueueingDiscipline.NetworkEmulatorDelayJitterSec, config_parse_network_emulator_delay,   0,                             0
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index 850b4f4..7c5d691 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -13,6 +13,7 @@
 #include "hostname-util.h"
 #include "in-addr-util.h"
 #include "net-condition.h"
+#include "netdev/macvlan.h"
 #include "networkd-address-label.h"
 #include "networkd-address.h"
 #include "networkd-bridge-fdb.h"
@@ -27,23 +28,25 @@
 #include "networkd-network.h"
 #include "networkd-nexthop.h"
 #include "networkd-radv.h"
+#include "networkd-route.h"
 #include "networkd-routing-policy-rule.h"
 #include "networkd-sriov.h"
 #include "parse-util.h"
 #include "path-lookup.h"
+#include "qdisc.h"
+#include "radv-internal.h"
 #include "set.h"
 #include "socket-util.h"
 #include "stat-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
-#include "tc.h"
-#include "util.h"
+#include "tclass.h"
 
 /* Let's assume that anything above this number is a user misconfiguration. */
-#define MAX_NTP_SERVERS 128
+#define MAX_NTP_SERVERS 128U
 
-static int network_resolve_netdev_one(Network *network, const char *name, NetDevKind kind, NetDev **ret_netdev) {
+static int network_resolve_netdev_one(Network *network, const char *name, NetDevKind kind, NetDev **ret) {
         const char *kind_string;
         NetDev *netdev;
         int r;
@@ -55,40 +58,40 @@
         assert(network);
         assert(network->manager);
         assert(network->filename);
-        assert(ret_netdev);
+        assert(ret);
 
         if (kind == _NETDEV_KIND_TUNNEL)
                 kind_string = "tunnel";
         else {
                 kind_string = netdev_kind_to_string(kind);
                 if (!kind_string)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "%s: Invalid NetDev kind of %s, ignoring assignment.",
-                                               network->filename, name);
+                        return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                 "%s: Invalid NetDev kind of %s, ignoring assignment.",
+                                                 network->filename, name);
         }
 
         r = netdev_get(network->manager, name, &netdev);
         if (r < 0)
-                return log_error_errno(r, "%s: %s NetDev could not be found, ignoring assignment.",
-                                       network->filename, name);
+                return log_warning_errno(r, "%s: %s NetDev could not be found, ignoring assignment.",
+                                         network->filename, name);
 
         if (netdev->kind != kind && !(kind == _NETDEV_KIND_TUNNEL &&
                                       IN_SET(netdev->kind,
-                                             NETDEV_KIND_IPIP,
-                                             NETDEV_KIND_SIT,
+                                             NETDEV_KIND_ERSPAN,
                                              NETDEV_KIND_GRE,
                                              NETDEV_KIND_GRETAP,
                                              NETDEV_KIND_IP6GRE,
                                              NETDEV_KIND_IP6GRETAP,
-                                             NETDEV_KIND_VTI,
-                                             NETDEV_KIND_VTI6,
                                              NETDEV_KIND_IP6TNL,
-                                             NETDEV_KIND_ERSPAN)))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "%s: NetDev %s is not a %s, ignoring assignment",
-                                       network->filename, name, kind_string);
+                                             NETDEV_KIND_IPIP,
+                                             NETDEV_KIND_SIT,
+                                             NETDEV_KIND_VTI,
+                                             NETDEV_KIND_VTI6)))
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: NetDev %s is not a %s, ignoring assignment",
+                                         network->filename, name, kind_string);
 
-        *ret_netdev = netdev_ref(netdev);
+        *ret = netdev_ref(netdev);
         return 1;
 }
 
@@ -101,16 +104,15 @@
         HASHMAP_FOREACH_KEY(kind, name, network->stacked_netdev_names) {
                 _cleanup_(netdev_unrefp) NetDev *netdev = NULL;
 
-                r = network_resolve_netdev_one(network, name, PTR_TO_INT(kind), &netdev);
-                if (r <= 0)
+                if (network_resolve_netdev_one(network, name, PTR_TO_INT(kind), &netdev) <= 0)
                         continue;
 
                 r = hashmap_ensure_put(&network->stacked_netdevs, &string_hash_ops, netdev->ifname, netdev);
                 if (r == -ENOMEM)
                         return log_oom();
                 if (r < 0)
-                        return log_error_errno(r, "%s: Failed to add NetDev '%s' to network: %m",
-                                               network->filename, (const char *) name);
+                        log_warning_errno(r, "%s: Failed to add NetDev '%s' to network, ignoring: %m",
+                                          network->filename, (const char *) name);
 
                 netdev = NULL;
         }
@@ -119,7 +121,10 @@
 }
 
 int network_verify(Network *network) {
+        int r;
+
         assert(network);
+        assert(network->manager);
         assert(network->filename);
 
         if (net_match_is_empty(&network->match) && !network->conditions)
@@ -134,11 +139,33 @@
                                        "%s: Conditions in the file do not match the system environment, skipping.",
                                        network->filename);
 
+        if (network->keep_master) {
+                if (network->batadv_name)
+                        log_warning("%s: BatmanAdvanced= set with KeepMaster= enabled, ignoring BatmanAdvanced=.",
+                                    network->filename);
+                if (network->bond_name)
+                        log_warning("%s: Bond= set with KeepMaster= enabled, ignoring Bond=.",
+                                    network->filename);
+                if (network->bridge_name)
+                        log_warning("%s: Bridge= set with KeepMaster= enabled, ignoring Bridge=.",
+                                    network->filename);
+                if (network->vrf_name)
+                        log_warning("%s: VRF= set with KeepMaster= enabled, ignoring VRF=.",
+                                    network->filename);
+
+                network->batadv_name = mfree(network->batadv_name);
+                network->bond_name = mfree(network->bond_name);
+                network->bridge_name = mfree(network->bridge_name);
+                network->vrf_name = mfree(network->vrf_name);
+        }
+
         (void) network_resolve_netdev_one(network, network->batadv_name, NETDEV_KIND_BATADV, &network->batadv);
         (void) network_resolve_netdev_one(network, network->bond_name, NETDEV_KIND_BOND, &network->bond);
         (void) network_resolve_netdev_one(network, network->bridge_name, NETDEV_KIND_BRIDGE, &network->bridge);
         (void) network_resolve_netdev_one(network, network->vrf_name, NETDEV_KIND_VRF, &network->vrf);
-        (void) network_resolve_stacked_netdevs(network);
+        r = network_resolve_stacked_netdevs(network);
+        if (r < 0)
+                return r;
 
         /* Free unnecessary entries. */
         network->batadv_name = mfree(network->batadv_name);
@@ -170,8 +197,35 @@
                 network->routes_by_section = hashmap_free_with_destructor(network->routes_by_section, route_free);
         }
 
-        if (network->link_local < 0)
-                network->link_local = network->bridge ? ADDRESS_FAMILY_NO : ADDRESS_FAMILY_IPV6;
+        if (network->link_local < 0) {
+                network->link_local = ADDRESS_FAMILY_IPV6;
+
+                if (network->keep_master || network->bridge)
+                        network->link_local = ADDRESS_FAMILY_NO;
+                else {
+                        NetDev *netdev;
+
+                        HASHMAP_FOREACH(netdev, network->stacked_netdevs) {
+                                MacVlan *m;
+
+                                if (netdev->kind == NETDEV_KIND_MACVLAN)
+                                        m = MACVLAN(netdev);
+                                else if (netdev->kind == NETDEV_KIND_MACVTAP)
+                                        m = MACVTAP(netdev);
+                                else
+                                        continue;
+
+                                assert(m);
+
+                                if (m->mode == NETDEV_MACVLAN_MODE_PASSTHRU)
+                                        network->link_local = ADDRESS_FAMILY_NO;
+
+                                /* There won't be a passthru MACVLAN/MACVTAP if there's already one in another mode */
+                                break;
+                        }
+                }
+        }
+
         if (network->ipv6ll_address_gen_mode == IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE)
                 SET_FLAG(network->link_local, ADDRESS_FAMILY_IPV6, false);
 
@@ -195,10 +249,11 @@
         }
 
         if (network->dhcp_critical >= 0) {
-                if (network->keep_configuration >= 0)
-                        log_warning("%s: Both KeepConfiguration= and deprecated CriticalConnection= are set. "
-                                    "Ignoring CriticalConnection=.", network->filename);
-                else if (network->dhcp_critical)
+                if (network->keep_configuration >= 0) {
+                        if (network->manager->keep_configuration < 0)
+                                log_warning("%s: Both KeepConfiguration= and deprecated CriticalConnection= are set. "
+                                            "Ignoring CriticalConnection=.", network->filename);
+                } else if (network->dhcp_critical)
                         /* CriticalConnection=yes also preserve foreign static configurations. */
                         network->keep_configuration = KEEP_CONFIGURATION_YES;
                 else
@@ -220,14 +275,17 @@
                 network->activation_policy = ACTIVATION_POLICY_UP;
 
         if (network->activation_policy == ACTIVATION_POLICY_ALWAYS_UP) {
-                if (network->ignore_carrier_loss == false)
-                        log_warning("%s: IgnoreCarrierLoss=false conflicts with ActivationPolicy=always-up. "
-                                    "Setting IgnoreCarrierLoss=true.", network->filename);
-                network->ignore_carrier_loss = true;
+                if (network->ignore_carrier_loss_set && network->ignore_carrier_loss_usec < USEC_INFINITY)
+                        log_warning("%s: IgnoreCarrierLoss=no or finite timespan conflicts with ActivationPolicy=always-up. "
+                                    "Setting IgnoreCarrierLoss=yes.", network->filename);
+                network->ignore_carrier_loss_set = true;
+                network->ignore_carrier_loss_usec = USEC_INFINITY;
         }
 
-        if (network->ignore_carrier_loss < 0)
-                network->ignore_carrier_loss = network->configure_without_carrier;
+        if (!network->ignore_carrier_loss_set) {
+                network->ignore_carrier_loss_set = true;
+                network->ignore_carrier_loss_usec = network->configure_without_carrier ? USEC_INFINITY : 0;
+        }
 
         if (IN_SET(network->activation_policy, ACTIVATION_POLICY_DOWN, ACTIVATION_POLICY_ALWAYS_DOWN, ACTIVATION_POLICY_MANUAL)) {
                 if (network->required_for_online < 0 ||
@@ -252,7 +310,9 @@
                 network->ipv6_proxy_ndp_addresses = set_free_free(network->ipv6_proxy_ndp_addresses);
         }
 
-        network_drop_invalid_addresses(network);
+        r = network_drop_invalid_addresses(network);
+        if (r < 0)
+                return r; /* network_drop_invalid_addresses() logs internally. */
         network_drop_invalid_routes(network);
         network_drop_invalid_nexthops(network);
         network_drop_invalid_bridge_fdb_entries(network);
@@ -262,8 +322,11 @@
         network_drop_invalid_prefixes(network);
         network_drop_invalid_route_prefixes(network);
         network_drop_invalid_routing_policy_rules(network);
-        network_drop_invalid_traffic_control(network);
-        network_drop_invalid_sr_iov(network);
+        network_drop_invalid_qdisc(network);
+        network_drop_invalid_tclass(network);
+        r = sr_iov_drop_invalid_sections(UINT32_MAX, network->sr_iov_by_section);
+        if (r < 0)
+                return r; /* sr_iov_drop_invalid_sections() logs internally. */
         network_drop_invalid_static_leases(network);
 
         network_adjust_dhcp_server(network);
@@ -282,10 +345,8 @@
         assert(filename);
 
         r = null_or_empty_path(filename);
-        if (r == -ENOENT)
-                return 0;
         if (r < 0)
-                return r;
+                return log_warning_errno(r, "Failed to check if \"%s\" is empty: %m", filename);
         if (r > 0) {
                 log_debug("Skipping empty file: %s", filename);
                 return 0;
@@ -301,7 +362,7 @@
 
         d = strrchr(name, '.');
         if (!d)
-                return -EINVAL;
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid file name: %s", filename);
 
         *d = '\0';
 
@@ -321,13 +382,13 @@
                 .required_for_online = -1,
                 .required_operstate_for_online = LINK_OPERSTATE_RANGE_DEFAULT,
                 .activation_policy = _ACTIVATION_POLICY_INVALID,
+                .group = -1,
                 .arp = -1,
                 .multicast = -1,
                 .allmulticast = -1,
                 .promiscuous = -1,
 
-                .ignore_carrier_loss = -1,
-                .keep_configuration = _KEEP_CONFIGURATION_INVALID,
+                .keep_configuration = manager->keep_configuration,
 
                 .dhcp_duid.type = _DUID_TYPE_INVALID,
                 .dhcp_critical = -1,
@@ -348,17 +409,21 @@
                 .dhcp_broadcast = -1,
 
                 .dhcp6_use_address = true,
+                .dhcp6_use_pd_prefix = true,
                 .dhcp6_use_dns = true,
                 .dhcp6_use_hostname = true,
                 .dhcp6_use_ntp = true,
-                .dhcp6_rapid_commit = true,
+                .dhcp6_use_rapid_commit = true,
                 .dhcp6_duid.type = _DUID_TYPE_INVALID,
+                .dhcp6_client_start_mode = _DHCP6_CLIENT_START_MODE_INVALID,
+                .dhcp6_send_release = true,
 
-                .dhcp6_pd = -1,
-                .dhcp6_pd_announce = true,
-                .dhcp6_pd_assign = true,
-                .dhcp6_pd_manage_temporary_address = true,
-                .dhcp6_pd_subnet_id = -1,
+                .dhcp_pd = -1,
+                .dhcp_pd_announce = true,
+                .dhcp_pd_assign = true,
+                .dhcp_pd_manage_temporary_address = true,
+                .dhcp_pd_subnet_id = -1,
+                .dhcp_pd_route_metric = DHCP6PD_ROUTE_METRIC,
 
                 .dhcp_server_bind_to_interface = true,
                 .dhcp_server_emit[SD_DHCP_LEASE_DNS].emit = true,
@@ -367,12 +432,14 @@
                 .dhcp_server_emit_router = true,
                 .dhcp_server_emit_timezone = true,
 
-                .router_lifetime_usec = 30 * USEC_PER_MINUTE,
+                .router_lifetime_usec = RADV_DEFAULT_ROUTER_LIFETIME_USEC,
+                .router_dns_lifetime_usec = RADV_DEFAULT_VALID_LIFETIME_USEC,
                 .router_emit_dns = true,
                 .router_emit_domains = true,
 
                 .use_bpdu = -1,
                 .hairpin = -1,
+                .isolated = -1,
                 .fast_leave = -1,
                 .allow_port_to_be_root = -1,
                 .unicast_flood = -1,
@@ -386,6 +453,7 @@
                 .multicast_router = _MULTICAST_ROUTER_INVALID,
 
                 .lldp_mode = LLDP_MODE_ROUTERS_ONLY,
+                .lldp_multicast_mode = _SD_LLDP_MULTICAST_MODE_INVALID,
 
                 .dns_default_route = -1,
                 .llmnr = RESOLVE_SUPPORT_YES,
@@ -400,25 +468,28 @@
                 .ipv4_accept_local = -1,
                 .ipv4_route_localnet = -1,
                 .ipv6_privacy_extensions = IPV6_PRIVACY_EXTENSIONS_NO,
-                .ipv6_accept_ra = -1,
                 .ipv6_dad_transmits = -1,
                 .ipv6_hop_limit = -1,
                 .ipv6_proxy_ndp = -1,
                 .proxy_arp = -1,
 
+                .ipv6_accept_ra = -1,
                 .ipv6_accept_ra_use_dns = true,
+                .ipv6_accept_ra_use_gateway = true,
+                .ipv6_accept_ra_use_route_prefix = true,
                 .ipv6_accept_ra_use_autonomous_prefix = true,
                 .ipv6_accept_ra_use_onlink_prefix = true,
+                .ipv6_accept_ra_use_mtu = true,
                 .ipv6_accept_ra_route_table = RT_TABLE_MAIN,
-                .ipv6_accept_ra_route_metric = DHCP_ROUTE_METRIC,
+                .ipv6_accept_ra_route_metric_high = IPV6RA_ROUTE_METRIC_HIGH,
+                .ipv6_accept_ra_route_metric_medium = IPV6RA_ROUTE_METRIC_MEDIUM,
+                .ipv6_accept_ra_route_metric_low = IPV6RA_ROUTE_METRIC_LOW,
                 .ipv6_accept_ra_start_dhcp6_client = IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES,
 
-                .can_triple_sampling = -1,
-                .can_berr_reporting = -1,
                 .can_termination = -1,
-                .can_listen_only = -1,
-                .can_fd_mode = -1,
-                .can_non_iso = -1,
+
+                .ipoib_mode = _IP_OVER_INFINIBAND_MODE_INVALID,
+                .ipoib_umcast = -1,
         };
 
         r = config_parse_many(
@@ -436,7 +507,8 @@
                         "DHCP\0" /* compat */
                         "DHCPv4\0"
                         "DHCPv6\0"
-                        "DHCPv6PrefixDelegation\0"
+                        "DHCPv6PrefixDelegation\0" /* compat */
+                        "DHCPPrefixDelegation\0"
                         "DHCPServer\0"
                         "DHCPServerStaticLease\0"
                         "IPv6AcceptRA\0"
@@ -480,26 +552,27 @@
                         config_item_perf_lookup, network_network_gperf_lookup,
                         CONFIG_PARSE_WARN,
                         network,
-                        &network->timestamp);
+                        &network->stats_by_path,
+                        &network->dropins);
         if (r < 0)
-                return r;
+                return r; /* config_parse_many() logs internally. */
 
         r = network_add_ipv4ll_route(network);
         if (r < 0)
-                log_warning_errno(r, "%s: Failed to add IPv4LL route, ignoring: %m", network->filename);
+                return log_warning_errno(r, "%s: Failed to add IPv4LL route: %m", network->filename);
 
         r = network_add_default_route_on_device(network);
         if (r < 0)
-                log_warning_errno(r, "%s: Failed to add default route on device, ignoring: %m",
-                                  network->filename);
+                return log_warning_errno(r, "%s: Failed to add default route on device: %m",
+                                         network->filename);
 
-        if (network_verify(network) < 0)
-                /* Ignore .network files that do not match the conditions. */
-                return 0;
+        r = network_verify(network);
+        if (r < 0)
+                return r; /* network_verify() logs internally. */
 
         r = ordered_hashmap_ensure_put(networks, &string_hash_ops, network->name, network);
         if (r < 0)
-                return r;
+                return log_warning_errno(r, "%s: Failed to store configuration into hashmap: %m", filename);
 
         TAKE_PTR(network);
         return 0;
@@ -507,7 +580,6 @@
 
 int network_load(Manager *manager, OrderedHashmap **networks) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(manager);
@@ -518,11 +590,8 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to enumerate network files: %m");
 
-        STRV_FOREACH(f, files) {
-                r = network_load_one(manager, networks, *f);
-                if (r < 0)
-                        log_error_errno(r, "Failed to load %s, ignoring: %m", *f);
-        }
+        STRV_FOREACH(f, files)
+                (void) network_load_one(manager, networks, *f);
 
         return 0;
 }
@@ -540,14 +609,15 @@
 
         ORDERED_HASHMAP_FOREACH(n, new_networks) {
                 r = network_get_by_name(manager, n->name, &old);
-                if (r < 0)
-                        continue; /* The .network file is new. */
-
-                if (n->timestamp != old->timestamp)
-                        continue; /* The .network file is modified. */
-
-                if (!streq(n->filename, old->filename))
+                if (r < 0) {
+                        log_debug("Found new .network file: %s", n->filename);
                         continue;
+                }
+
+                if (!stats_by_path_equal(n->stats_by_path, old->stats_by_path)) {
+                        log_debug("Found updated .network file: %s", n->filename);
+                        continue;
+                }
 
                 r = ordered_hashmap_replace(new_networks, old->name, old);
                 if (r < 0)
@@ -560,7 +630,7 @@
         ordered_hashmap_free_with_destructor(manager->networks, network_unref);
         manager->networks = new_networks;
 
-        return 0;
+        return manager_build_dhcp_pd_subnet_ids(manager);
 
 failure:
         ordered_hashmap_free_with_destructor(new_networks, network_unref);
@@ -568,49 +638,118 @@
         return r;
 }
 
+int manager_build_dhcp_pd_subnet_ids(Manager *manager) {
+        Network *n;
+        int r;
+
+        assert(manager);
+
+        set_clear(manager->dhcp_pd_subnet_ids);
+
+        ORDERED_HASHMAP_FOREACH(n, manager->networks) {
+                if (n->unmanaged)
+                        continue;
+
+                if (!n->dhcp_pd)
+                        continue;
+
+                if (n->dhcp_pd_subnet_id < 0)
+                        continue;
+
+                r = set_ensure_put(&manager->dhcp_pd_subnet_ids, &uint64_hash_ops, &n->dhcp_pd_subnet_id);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 static Network *network_free(Network *network) {
         if (!network)
                 return NULL;
 
+        free(network->name);
         free(network->filename);
+        free(network->description);
+        strv_free(network->dropins);
+        hashmap_free(network->stats_by_path);
 
+        /* conditions */
         net_match_clear(&network->match);
         condition_free_list(network->conditions);
 
-        free(network->dhcp_server_relay_agent_circuit_id);
-        free(network->dhcp_server_relay_agent_remote_id);
+        /* link settings */
+        strv_free(network->bind_carrier);
 
-        free(network->description);
-        free(network->dhcp_vendor_class_identifier);
-        free(network->dhcp_mudurl);
-        strv_free(network->dhcp_user_class);
-        free(network->dhcp_hostname);
-        set_free(network->dhcp_deny_listed_ip);
-        set_free(network->dhcp_allow_listed_ip);
-        set_free(network->dhcp_request_options);
-        set_free(network->dhcp6_request_options);
-        free(network->mac);
-        free(network->dhcp6_mudurl);
-        strv_free(network->dhcp6_user_class);
-        strv_free(network->dhcp6_vendor_class);
-
+        /* NTP */
         strv_free(network->ntp);
+
+        /* DNS */
         for (unsigned i = 0; i < network->n_dns; i++)
                 in_addr_full_free(network->dns[i]);
         free(network->dns);
         ordered_set_free(network->search_domains);
         ordered_set_free(network->route_domains);
-        strv_free(network->bind_carrier);
+        set_free_free(network->dnssec_negative_trust_anchors);
 
+        /* DHCP server */
+        free(network->dhcp_server_relay_agent_circuit_id);
+        free(network->dhcp_server_relay_agent_remote_id);
+        free(network->dhcp_server_boot_server_name);
+        free(network->dhcp_server_boot_filename);
+        free(network->dhcp_server_timezone);
+        free(network->dhcp_server_uplink_name);
+        for (sd_dhcp_lease_server_type_t t = 0; t < _SD_DHCP_LEASE_SERVER_TYPE_MAX; t++)
+                free(network->dhcp_server_emit[t].addresses);
+        ordered_hashmap_free(network->dhcp_server_send_options);
+        ordered_hashmap_free(network->dhcp_server_send_vendor_options);
+
+        /* DHCP client */
+        free(network->dhcp_vendor_class_identifier);
+        free(network->dhcp_mudurl);
+        free(network->dhcp_hostname);
+        free(network->dhcp_label);
+        set_free(network->dhcp_deny_listed_ip);
+        set_free(network->dhcp_allow_listed_ip);
+        strv_free(network->dhcp_user_class);
+        set_free(network->dhcp_request_options);
+        ordered_hashmap_free(network->dhcp_client_send_options);
+        ordered_hashmap_free(network->dhcp_client_send_vendor_options);
+        free(network->dhcp_netlabel);
+
+        /* DHCPv6 client */
+        free(network->dhcp6_mudurl);
+        strv_free(network->dhcp6_user_class);
+        strv_free(network->dhcp6_vendor_class);
+        set_free(network->dhcp6_request_options);
+        ordered_hashmap_free(network->dhcp6_client_send_options);
+        ordered_hashmap_free(network->dhcp6_client_send_vendor_options);
+        free(network->dhcp6_netlabel);
+
+        /* DHCP PD */
+        free(network->dhcp_pd_uplink_name);
+        set_free(network->dhcp_pd_tokens);
+        free(network->dhcp_pd_netlabel);
+
+        /* Router advertisement */
         ordered_set_free(network->router_search_domains);
         free(network->router_dns);
-        set_free_free(network->ndisc_deny_listed_router);
-        set_free_free(network->ndisc_allow_listed_router);
-        set_free_free(network->ndisc_deny_listed_prefix);
-        set_free_free(network->ndisc_allow_listed_prefix);
-        set_free_free(network->ndisc_deny_listed_route_prefix);
-        set_free_free(network->ndisc_allow_listed_route_prefix);
+        free(network->router_uplink_name);
 
+        /* NDisc */
+        set_free(network->ndisc_deny_listed_router);
+        set_free(network->ndisc_allow_listed_router);
+        set_free(network->ndisc_deny_listed_prefix);
+        set_free(network->ndisc_allow_listed_prefix);
+        set_free(network->ndisc_deny_listed_route_prefix);
+        set_free(network->ndisc_allow_listed_route_prefix);
+        set_free(network->ndisc_tokens);
+        free(network->ndisc_netlabel);
+
+        /* LLDP */
+        free(network->lldp_mudurl);
+
+        /* netdev */
         free(network->batadv_name);
         free(network->bridge_name);
         free(network->bond_name);
@@ -621,6 +760,7 @@
         netdev_unref(network->vrf);
         hashmap_free_with_destructor(network->stacked_netdevs, netdev_unref);
 
+        /* static configs */
         set_free_free(network->ipv6_proxy_ndp_addresses);
         ordered_hashmap_free_with_destructor(network->addresses_by_section, address_free);
         hashmap_free_with_destructor(network->routes_by_section, route_free);
@@ -634,27 +774,8 @@
         hashmap_free_with_destructor(network->rules_by_section, routing_policy_rule_free);
         hashmap_free_with_destructor(network->dhcp_static_leases_by_section, dhcp_static_lease_free);
         ordered_hashmap_free_with_destructor(network->sr_iov_by_section, sr_iov_free);
-        ordered_hashmap_free_with_destructor(network->tc_by_section, traffic_control_free);
-
-        free(network->name);
-
-        free(network->dhcp_server_timezone);
-        free(network->dhcp_server_uplink_name);
-
-        for (sd_dhcp_lease_server_type_t t = 0; t < _SD_DHCP_LEASE_SERVER_TYPE_MAX; t++)
-                free(network->dhcp_server_emit[t].addresses);
-
-        set_free_free(network->dnssec_negative_trust_anchors);
-
-        free(network->lldp_mud);
-
-        ordered_hashmap_free(network->dhcp_client_send_options);
-        ordered_hashmap_free(network->dhcp_client_send_vendor_options);
-        ordered_hashmap_free(network->dhcp_server_send_options);
-        ordered_hashmap_free(network->dhcp_server_send_vendor_options);
-        ordered_set_free(network->ipv6_tokens);
-        ordered_hashmap_free(network->dhcp6_client_send_options);
-        ordered_hashmap_free(network->dhcp6_client_send_vendor_options);
+        hashmap_free_with_destructor(network->qdiscs_by_section, qdisc_free);
+        hashmap_free_with_destructor(network->tclasses_by_section, tclass_free);
 
         return mfree(network);
 }
@@ -718,7 +839,8 @@
         return false;
 }
 
-int config_parse_stacked_netdev(const char *unit,
+int config_parse_stacked_netdev(
+                const char *unit,
                 const char *filename,
                 unsigned line,
                 const char *section,
@@ -728,20 +850,26 @@
                 const char *rvalue,
                 void *data,
                 void *userdata) {
+
         _cleanup_free_ char *name = NULL;
         NetDevKind kind = ltype;
-        Hashmap **h = data;
+        Hashmap **h = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
         assert(IN_SET(kind,
-                      NETDEV_KIND_VLAN, NETDEV_KIND_MACVLAN, NETDEV_KIND_MACVTAP,
-                      NETDEV_KIND_IPVLAN, NETDEV_KIND_IPVTAP, NETDEV_KIND_VXLAN,
-                      NETDEV_KIND_L2TP, NETDEV_KIND_MACSEC, _NETDEV_KIND_TUNNEL,
-                      NETDEV_KIND_XFRM));
+                      NETDEV_KIND_IPOIB,
+                      NETDEV_KIND_IPVLAN,
+                      NETDEV_KIND_IPVTAP,
+                      NETDEV_KIND_MACSEC,
+                      NETDEV_KIND_MACVLAN,
+                      NETDEV_KIND_MACVTAP,
+                      NETDEV_KIND_VLAN,
+                      NETDEV_KIND_VXLAN,
+                      NETDEV_KIND_XFRM,
+                      _NETDEV_KIND_TUNNEL));
 
         if (!ifname_valid(rvalue)) {
                 log_syntax(unit, LOG_WARNING, filename, line, 0,
@@ -780,13 +908,12 @@
                 void *data,
                 void *userdata) {
 
-        Network *n = userdata;
+        Network *n = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(n);
 
         if (isempty(rvalue)) {
                 n->search_domains = ordered_set_free(n->search_domains);
@@ -846,52 +973,6 @@
         }
 }
 
-int config_parse_hostname(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        _cleanup_free_ char *hn = NULL;
-        char **hostname = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(hostname);
-
-        r = config_parse_string(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &hn, userdata);
-        if (r < 0)
-                return r;
-
-        if (!hostname_is_valid(hn, 0)) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Hostname is not valid, ignoring assignment: %s", rvalue);
-                return 0;
-        }
-
-        r = dns_name_is_valid(hn);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to check validity of hostname '%s', ignoring assignment: %m", rvalue);
-                return 0;
-        }
-        if (r == 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Hostname is not a valid DNS domain name, ignoring assignment: %s", rvalue);
-                return 0;
-        }
-
-        return free_and_replace(*hostname, hn);
-}
-
 int config_parse_timezone(
                 const char *unit,
                 const char *filename,
@@ -904,26 +985,26 @@
                 void *data,
                 void *userdata) {
 
-        _cleanup_free_ char *tz = NULL;
-        char **datap = data;
+        char **tz = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(datap);
 
-        r = config_parse_string(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &tz, userdata);
-        if (r < 0)
-                return r;
+        if (isempty(rvalue)) {
+                *tz = mfree(*tz);
+                return 0;
+        }
 
-        if (!timezone_is_valid(tz, LOG_WARNING)) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+        r = verify_timezone(rvalue, LOG_WARNING);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Timezone is not valid, ignoring assignment: %s", rvalue);
                 return 0;
         }
 
-        return free_and_replace(*datap, tz);
+        return free_and_strdup_warn(tz, rvalue);
 }
 
 int config_parse_dns(
@@ -938,13 +1019,12 @@
                 void *data,
                 void *userdata) {
 
-        Network *n = userdata;
+        Network *n = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(n);
 
         if (isempty(rvalue)) {
                 for (unsigned i = 0; i < n->n_dns; i++)
@@ -1001,13 +1081,12 @@
                 void *data,
                 void *userdata) {
 
-        Set **nta = data;
+        Set **nta = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(nta);
 
         if (isempty(rvalue)) {
                 *nta = set_free_free(*nta);
@@ -1053,13 +1132,12 @@
                 void *data,
                 void *userdata) {
 
-        char ***l = data;
+        char ***l = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(l);
 
         if (isempty(rvalue)) {
                 *l = strv_free(*l);
@@ -1112,7 +1190,7 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         LinkOperationalStateRange range;
         bool required = true;
         int r;
@@ -1120,7 +1198,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(network);
 
         if (isempty(rvalue)) {
                 network->required_for_online = -1;
@@ -1160,28 +1237,77 @@
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
+        Network *network = ASSERT_PTR(userdata);
         int r;
+        int32_t group;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(network);
 
         if (isempty(rvalue)) {
-                network->group = 0;
-                network->group_set = false;
+                network->group = -1;
                 return 0;
         }
 
-        r = safe_atou32(rvalue, &network->group);
+        r = safe_atoi32(rvalue, &group);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Failed to parse Group=, ignoring assignment: %s", rvalue);
                 return 0;
         }
 
-        network->group_set = true;
+        if (group < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Value of Group= must be in the range 0…2147483647, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        network->group = group;
+        return 0;
+}
+
+int config_parse_ignore_carrier_loss(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Network *network = ASSERT_PTR(userdata);
+        usec_t usec;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                network->ignore_carrier_loss_set = false;
+                return 0;
+        }
+
+        r = parse_boolean(rvalue);
+        if (r >= 0) {
+                network->ignore_carrier_loss_set = true;
+                network->ignore_carrier_loss_usec = r > 0 ? USEC_INFINITY : 0;
+                return 0;
+        }
+
+        r = parse_sec(rvalue, &usec);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        network->ignore_carrier_loss_set = true;
+        network->ignore_carrier_loss_usec = usec;
         return 0;
 }
 
@@ -1201,16 +1327,6 @@
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(keep_configuration, KeepConfiguration, KEEP_CONFIGURATION_YES);
 
-static const char* const ipv6_link_local_address_gen_mode_table[_IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX] = {
-        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64] = "eui64",
-        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE] = "none",
-        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY] = "stable-privacy",
-        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_RANDOM] = "random",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(ipv6_link_local_address_gen_mode, IPv6LinkLocalAddressGenMode);
-DEFINE_CONFIG_PARSE_ENUM(config_parse_ipv6_link_local_address_gen_mode, ipv6_link_local_address_gen_mode, IPv6LinkLocalAddressGenMode, "Failed to parse IPv6 link local address generation mode");
-
 static const char* const activation_policy_table[_ACTIVATION_POLICY_MAX] = {
         [ACTIVATION_POLICY_UP] =          "up",
         [ACTIVATION_POLICY_ALWAYS_UP] =   "always-up",
diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h
index b39063f..7685c98 100644
--- a/src/network/networkd-network.h
+++ b/src/network/networkd-network.h
@@ -5,19 +5,21 @@
 
 #include "sd-bus.h"
 #include "sd-device.h"
+#include "sd-lldp-tx.h"
 
 #include "bridge.h"
 #include "condition.h"
 #include "conf-parser.h"
 #include "hashmap.h"
+#include "ipoib.h"
 #include "net-condition.h"
 #include "netdev.h"
 #include "networkd-bridge-vlan.h"
 #include "networkd-dhcp-common.h"
 #include "networkd-dhcp4.h"
 #include "networkd-dhcp6.h"
+#include "networkd-ipv6ll.h"
 #include "networkd-lldp-rx.h"
-#include "networkd-lldp-tx.h"
 #include "networkd-ndisc.h"
 #include "networkd-radv.h"
 #include "networkd-sysctl.h"
@@ -37,15 +39,6 @@
         _KEEP_CONFIGURATION_INVALID = -EINVAL,
 } KeepConfiguration;
 
-typedef enum IPv6LinkLocalAddressGenMode {
-       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64          = IN6_ADDR_GEN_MODE_EUI64,
-       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE           = IN6_ADDR_GEN_MODE_NONE,
-       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY = IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
-       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_RANDOM         = IN6_ADDR_GEN_MODE_RANDOM,
-       _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX,
-       _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_INVALID        = -EINVAL,
-} IPv6LinkLocalAddressGenMode;
-
 typedef enum ActivationPolicy {
         ACTIVATION_POLICY_UP,
         ACTIVATION_POLICY_ALWAYS_UP,
@@ -72,7 +65,8 @@
 
         char *name;
         char *filename;
-        usec_t timestamp;
+        char **dropins;
+        Hashmap *stats_by_path;
         char *description;
 
         /* [Match] section */
@@ -80,6 +74,7 @@
         LIST_HEAD(Condition, conditions);
 
         /* Master or stacked netdevs */
+        bool keep_master;
         NetDev *batadv;
         NetDev *bridge;
         NetDev *bond;
@@ -93,10 +88,9 @@
         Hashmap *stacked_netdev_names;
 
         /* [Link] section */
-        struct ether_addr *mac;
+        struct hw_addr_data hw_addr;
         uint32_t mtu;
-        uint32_t group;
-        bool group_set;
+        int32_t group;
         int arp;
         int multicast;
         int allmulticast;
@@ -109,7 +103,8 @@
 
         /* misc settings */
         bool configure_without_carrier;
-        int ignore_carrier_loss;
+        bool ignore_carrier_loss_set;
+        usec_t ignore_carrier_loss_usec; /* timespan */
         KeepConfiguration keep_configuration;
         char **bind_carrier;
         bool default_route_on_device;
@@ -125,15 +120,19 @@
         char *dhcp_mudurl;
         char **dhcp_user_class;
         char *dhcp_hostname;
+        char *dhcp_label;
         uint64_t dhcp_max_attempts;
         uint32_t dhcp_route_metric;
         bool dhcp_route_metric_set;
         uint32_t dhcp_route_table;
+        bool dhcp_route_table_set;
         uint32_t dhcp_fallback_lease_lifetime;
         uint32_t dhcp_route_mtu;
         uint16_t dhcp_client_port;
         int dhcp_critical;
         int dhcp_ip_service_type;
+        int dhcp_socket_priority;
+        bool dhcp_socket_priority_set;
         bool dhcp_anonymize;
         bool dhcp_send_hostname;
         int dhcp_broadcast;
@@ -147,9 +146,10 @@
         bool dhcp_use_mtu;
         bool dhcp_use_routes;
         int dhcp_use_gateway;
+        bool dhcp_quickack;
         bool dhcp_use_timezone;
         bool dhcp_use_hostname;
-        bool dhcp_route_table_set;
+        bool dhcp_use_6rd;
         bool dhcp_send_release;
         bool dhcp_send_decline;
         DHCPUseDomains dhcp_use_domains;
@@ -159,32 +159,34 @@
         Set *dhcp_request_options;
         OrderedHashmap *dhcp_client_send_options;
         OrderedHashmap *dhcp_client_send_vendor_options;
+        char *dhcp_netlabel;
 
         /* DHCPv6 Client support */
         bool dhcp6_use_address;
+        bool dhcp6_use_pd_prefix;
         bool dhcp6_use_dns;
         bool dhcp6_use_dns_set;
         bool dhcp6_use_hostname;
         bool dhcp6_use_ntp;
         bool dhcp6_use_ntp_set;
-        bool dhcp6_rapid_commit;
+        bool dhcp6_use_rapid_commit;
         DHCPUseDomains dhcp6_use_domains;
         bool dhcp6_use_domains_set;
         uint32_t dhcp6_iaid;
         bool dhcp6_iaid_set;
         bool dhcp6_iaid_set_explicitly;
         DUID dhcp6_duid;
-        uint8_t dhcp6_pd_length;
+        uint8_t dhcp6_pd_prefix_length;
+        struct in6_addr dhcp6_pd_prefix_hint;
         char *dhcp6_mudurl;
         char **dhcp6_user_class;
         char **dhcp6_vendor_class;
-        struct in6_addr dhcp6_pd_address;
-        DHCP6ClientStartMode dhcp6_without_ra;
+        DHCP6ClientStartMode dhcp6_client_start_mode;
         OrderedHashmap *dhcp6_client_send_options;
         OrderedHashmap *dhcp6_client_send_vendor_options;
         Set *dhcp6_request_options;
-        /* Start DHCPv6 PD also when 'O' RA flag is set, see RFC 7084, WPD-4 */
-        bool dhcp6_force_pd_other_information;
+        char *dhcp6_netlabel;
+        bool dhcp6_send_release;
 
         /* DHCP Server Support */
         bool dhcp_server;
@@ -198,6 +200,7 @@
         char *dhcp_server_relay_agent_remote_id;
         NetworkDHCPServerEmitAddress dhcp_server_emit[_SD_DHCP_LEASE_SERVER_TYPE_MAX];
         bool dhcp_server_emit_router;
+        struct in_addr dhcp_server_router;
         bool dhcp_server_emit_timezone;
         char *dhcp_server_timezone;
         usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec;
@@ -205,11 +208,15 @@
         uint32_t dhcp_server_pool_size;
         OrderedHashmap *dhcp_server_send_options;
         OrderedHashmap *dhcp_server_send_vendor_options;
+        struct in_addr dhcp_server_boot_server_address;
+        char *dhcp_server_boot_server_name;
+        char *dhcp_server_boot_filename;
 
-        /* link local addressing support */
+        /* link-local addressing support */
         AddressFamily link_local;
         IPv6LinkLocalAddressGenMode ipv6ll_address_gen_mode;
         struct in6_addr ipv6ll_stable_secret;
+        struct in_addr ipv4ll_start_address;
         bool ipv4ll_route;
 
         /* IPv6 RA support */
@@ -224,19 +231,25 @@
         struct in6_addr *router_dns;
         unsigned n_router_dns;
         OrderedSet *router_search_domains;
+        int router_uplink_index;
+        char *router_uplink_name;
 
-        /* DHCPv6 Prefix Delegation support */
-        int dhcp6_pd;
-        bool dhcp6_pd_announce;
-        bool dhcp6_pd_assign;
-        bool dhcp6_pd_manage_temporary_address;
-        int64_t dhcp6_pd_subnet_id;
-        uint32_t dhcp6_pd_route_metric;
-        struct in6_addr dhcp6_pd_token;
+        /* DHCP Prefix Delegation support */
+        int dhcp_pd;
+        bool dhcp_pd_announce;
+        bool dhcp_pd_assign;
+        bool dhcp_pd_manage_temporary_address;
+        int64_t dhcp_pd_subnet_id;
+        uint32_t dhcp_pd_route_metric;
+        Set *dhcp_pd_tokens;
+        int dhcp_pd_uplink_index;
+        char *dhcp_pd_uplink_name;
+        char *dhcp_pd_netlabel;
 
         /* Bridge Support */
         int use_bpdu;
         int hairpin;
+        int isolated;
         int fast_leave;
         int allow_port_to_be_root;
         int unicast_flood;
@@ -259,15 +272,27 @@
         /* CAN support */
         uint32_t can_bitrate;
         unsigned can_sample_point;
+        nsec_t can_time_quanta_ns;
+        uint32_t can_propagation_segment;
+        uint32_t can_phase_buffer_segment_1;
+        uint32_t can_phase_buffer_segment_2;
+        uint32_t can_sync_jump_width;
         uint32_t can_data_bitrate;
         unsigned can_data_sample_point;
+        nsec_t can_data_time_quanta_ns;
+        uint32_t can_data_propagation_segment;
+        uint32_t can_data_phase_buffer_segment_1;
+        uint32_t can_data_phase_buffer_segment_2;
+        uint32_t can_data_sync_jump_width;
         usec_t can_restart_us;
-        int can_triple_sampling;
-        int can_berr_reporting;
-        int can_termination;
-        int can_listen_only;
-        int can_fd_mode;
-        int can_non_iso;
+        uint32_t can_control_mode_mask;
+        uint32_t can_control_mode_flags;
+        uint16_t can_termination;
+        bool can_termination_set;
+
+        /* IPoIB support */
+        IPoIBMode ipoib_mode;
+        int ipoib_umcast;
 
         /* sysctl settings */
         AddressFamily ip_forward;
@@ -284,15 +309,21 @@
         /* IPv6 accept RA */
         int ipv6_accept_ra;
         bool ipv6_accept_ra_use_dns;
+        bool ipv6_accept_ra_use_gateway;
+        bool ipv6_accept_ra_use_route_prefix;
         bool ipv6_accept_ra_use_autonomous_prefix;
         bool ipv6_accept_ra_use_onlink_prefix;
+        bool ipv6_accept_ra_use_mtu;
+        bool ipv6_accept_ra_quickack;
         bool active_slave;
         bool primary_slave;
         DHCPUseDomains ipv6_accept_ra_use_domains;
         IPv6AcceptRAStartDHCP6Client ipv6_accept_ra_start_dhcp6_client;
         uint32_t ipv6_accept_ra_route_table;
         bool ipv6_accept_ra_route_table_set;
-        uint32_t ipv6_accept_ra_route_metric;
+        uint32_t ipv6_accept_ra_route_metric_high;
+        uint32_t ipv6_accept_ra_route_metric_medium;
+        uint32_t ipv6_accept_ra_route_metric_low;
         bool ipv6_accept_ra_route_metric_set;
         Set *ndisc_deny_listed_router;
         Set *ndisc_allow_listed_router;
@@ -300,12 +331,13 @@
         Set *ndisc_allow_listed_prefix;
         Set *ndisc_deny_listed_route_prefix;
         Set *ndisc_allow_listed_route_prefix;
-        OrderedSet *ipv6_tokens;
+        Set *ndisc_tokens;
+        char *ndisc_netlabel;
 
         /* LLDP support */
         LLDPMode lldp_mode; /* LLDP reception */
-        LLDPEmit lldp_emit; /* LLDP transmission */
-        char *lldp_mud;    /* LLDP MUD URL */
+        sd_lldp_multicast_mode_t lldp_multicast_mode; /* LLDP transmission */
+        char *lldp_mudurl;  /* LLDP MUD URL */
 
         OrderedHashmap *addresses_by_section;
         Hashmap *routes_by_section;
@@ -318,7 +350,8 @@
         Hashmap *route_prefixes_by_section;
         Hashmap *rules_by_section;
         Hashmap *dhcp_static_leases_by_section;
-        OrderedHashmap *tc_by_section;
+        Hashmap *qdiscs_by_section;
+        Hashmap *tclasses_by_section;
         OrderedHashmap *sr_iov_by_section;
 
         /* All kinds of DNS configuration */
@@ -345,6 +378,8 @@
 int network_load_one(Manager *manager, OrderedHashmap **networks, const char *filename);
 int network_verify(Network *network);
 
+int manager_build_dhcp_pd_subnet_ids(Manager *manager);
+
 int network_get_by_name(Manager *manager, const char *name, Network **ret);
 void network_apply_anonymize_if_set(Network *network);
 
@@ -354,24 +389,20 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_tunnel);
 CONFIG_PARSER_PROTOTYPE(config_parse_domains);
 CONFIG_PARSER_PROTOTYPE(config_parse_dns);
-CONFIG_PARSER_PROTOTYPE(config_parse_hostname);
 CONFIG_PARSER_PROTOTYPE(config_parse_timezone);
 CONFIG_PARSER_PROTOTYPE(config_parse_dnssec_negative_trust_anchors);
 CONFIG_PARSER_PROTOTYPE(config_parse_ntp);
 CONFIG_PARSER_PROTOTYPE(config_parse_required_for_online);
 CONFIG_PARSER_PROTOTYPE(config_parse_required_family_for_online);
 CONFIG_PARSER_PROTOTYPE(config_parse_keep_configuration);
-CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_link_local_address_gen_mode);
 CONFIG_PARSER_PROTOTYPE(config_parse_activation_policy);
 CONFIG_PARSER_PROTOTYPE(config_parse_link_group);
+CONFIG_PARSER_PROTOTYPE(config_parse_ignore_carrier_loss);
 
 const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
 
 const char* keep_configuration_to_string(KeepConfiguration i) _const_;
 KeepConfiguration keep_configuration_from_string(const char *s) _pure_;
 
-const char* ipv6_link_local_address_gen_mode_to_string(IPv6LinkLocalAddressGenMode s) _const_;
-IPv6LinkLocalAddressGenMode ipv6_link_local_address_gen_mode_from_string(const char *s) _pure_;
-
 const char* activation_policy_to_string(ActivationPolicy i) _const_;
 ActivationPolicy activation_policy_from_string(const char *s) _pure_;
diff --git a/src/network/networkd-nexthop.c b/src/network/networkd-nexthop.c
index c5cba88..d827667 100644
--- a/src/network/networkd-nexthop.c
+++ b/src/network/networkd-nexthop.c
@@ -12,9 +12,10 @@
 #include "networkd-network.h"
 #include "networkd-nexthop.h"
 #include "networkd-queue.h"
-#include "networkd-route.h"
+#include "networkd-route-util.h"
 #include "parse-util.h"
 #include "set.h"
+#include "stdio-util.h"
 #include "string-util.h"
 
 NextHop *nexthop_free(NextHop *nexthop) {
@@ -26,11 +27,10 @@
                 hashmap_remove(nexthop->network->nexthops_by_section, nexthop->section);
         }
 
-        network_config_section_free(nexthop->section);
+        config_section_free(nexthop->section);
 
         if (nexthop->link) {
                 set_remove(nexthop->link->nexthops, nexthop);
-                set_remove(nexthop->link->nexthops_foreign, nexthop);
 
                 if (nexthop->link->manager && nexthop->id > 0)
                         hashmap_remove(nexthop->link->manager->nexthops_by_id, UINT32_TO_PTR(nexthop->id));
@@ -38,7 +38,6 @@
 
         if (nexthop->manager) {
                 set_remove(nexthop->manager->nexthops, nexthop);
-                set_remove(nexthop->manager->nexthops_foreign, nexthop);
 
                 if (nexthop->id > 0)
                         hashmap_remove(nexthop->manager->nexthops_by_id, UINT32_TO_PTR(nexthop->id));
@@ -49,7 +48,7 @@
         return mfree(nexthop);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(NextHop, nexthop_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(NextHop, nexthop_free);
 
 static int nexthop_new(NextHop **ret) {
         _cleanup_(nexthop_freep) NextHop *nexthop = NULL;
@@ -69,7 +68,7 @@
 }
 
 static int nexthop_new_static(Network *network, const char *filename, unsigned section_line, NextHop **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(nexthop_freep) NextHop *nexthop = NULL;
         int r;
 
@@ -78,7 +77,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -95,8 +94,9 @@
         nexthop->protocol = RTPROT_STATIC;
         nexthop->network = network;
         nexthop->section = TAKE_PTR(n);
+        nexthop->source = NETWORK_CONFIG_SOURCE_STATIC;
 
-        r = hashmap_ensure_put(&network->nexthops_by_section, &network_config_hash_ops, nexthop->section, nexthop);
+        r = hashmap_ensure_put(&network->nexthops_by_section, &config_section_hash_ops, nexthop->section, nexthop);
         if (r < 0)
                 return r;
 
@@ -104,7 +104,7 @@
         return 0;
 }
 
-void nexthop_hash_func(const NextHop *nexthop, struct siphash *state) {
+static void nexthop_hash_func(const NextHop *nexthop, struct siphash *state) {
         assert(nexthop);
 
         siphash24_compress(&nexthop->protocol, sizeof(nexthop->protocol), state);
@@ -124,7 +124,7 @@
         }
 }
 
-int nexthop_compare_func(const NextHop *a, const NextHop *b) {
+static int nexthop_compare_func(const NextHop *a, const NextHop *b) {
         int r;
 
         r = CMP(a->protocol, b->protocol);
@@ -149,7 +149,7 @@
         return 0;
 }
 
-DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
                 nexthop_hash_ops,
                 NextHop,
                 nexthop_hash_func,
@@ -220,155 +220,133 @@
         return 0;
 }
 
-static int nexthop_get(Manager *manager, Link *link, const NextHop *in, NextHop **ret) {
-        NextHop *existing;
+static bool nexthop_owned_by_link(const NextHop *nexthop) {
+        return !nexthop->blackhole && hashmap_isempty(nexthop->group);
+}
 
-        assert(manager || link);
+static int nexthop_get(Manager *manager, Link *link, NextHop *in, NextHop **ret) {
+        NextHop *nexthop;
+        Set *nexthops;
+
         assert(in);
 
-        existing = set_get(link ? link->nexthops : manager->nexthops, in);
-        if (existing) {
-                if (ret)
-                        *ret = existing;
-                return 1;
+        if (nexthop_owned_by_link(in)) {
+                if (!link)
+                        return -ENOENT;
+
+                nexthops = link->nexthops;
+        } else {
+                if (!manager)
+                        return -ENOENT;
+
+                nexthops = manager->nexthops;
         }
 
-        existing = set_get(link ? link->nexthops_foreign : manager->nexthops_foreign, in);
-        if (existing) {
+        nexthop = set_get(nexthops, in);
+        if (nexthop) {
                 if (ret)
-                        *ret = existing;
+                        *ret = nexthop;
+                return 0;
+        }
+
+        if (in->id > 0)
+                return -ENOENT;
+
+        /* Also find nexthop configured without ID. */
+        SET_FOREACH(nexthop, nexthops) {
+                uint32_t id;
+                bool found;
+
+                id = nexthop->id;
+                nexthop->id = 0;
+                found = nexthop_equal(nexthop, in);
+                nexthop->id = id;
+
+                if (!found)
+                        continue;
+
+                if (ret)
+                        *ret = nexthop;
                 return 0;
         }
 
         return -ENOENT;
 }
 
-static int nexthop_add_internal(Manager *manager, Link *link, Set **nexthops, const NextHop *in, NextHop **ret) {
-        _cleanup_(nexthop_freep) NextHop *nexthop = NULL;
+static int nexthop_add(Manager *manager, Link *link, NextHop *nexthop) {
         int r;
 
-        assert(manager || link);
-        assert(nexthops);
-        assert(in);
-
-        r = nexthop_dup(in, &nexthop);
-        if (r < 0)
-                return r;
-
-        r = set_ensure_put(nexthops, &nexthop_hash_ops, nexthop);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                return -EEXIST;
-
-        nexthop->link = link;
-        nexthop->manager = manager;
-
-        if (ret)
-                *ret = nexthop;
-
-        TAKE_PTR(nexthop);
-        return 0;
-}
-
-static int nexthop_add_foreign(Manager *manager, Link *link, const NextHop *in, NextHop **ret) {
-        assert(manager || link);
-        return nexthop_add_internal(manager, link, link ? &link->nexthops_foreign : &manager->nexthops_foreign, in, ret);
-}
-
-static bool nexthop_has_link(const NextHop *nexthop) {
-        return !nexthop->blackhole && hashmap_isempty(nexthop->group);
-}
-
-static int nexthop_add(Link *link, const NextHop *in, NextHop **ret) {
-        bool by_manager;
-        NextHop *nexthop;
-        int r;
-
-        assert(link);
-        assert(in);
-
-        by_manager = !nexthop_has_link(in);
-
-        if (by_manager)
-                r = nexthop_get(link->manager, NULL, in, &nexthop);
-        else
-                r = nexthop_get(NULL, link, in, &nexthop);
-        if (r == -ENOENT) {
-                /* NextHop does not exist, create a new one */
-                r = nexthop_add_internal(link->manager,
-                                         by_manager ? NULL : link,
-                                         by_manager ? &link->manager->nexthops : &link->nexthops,
-                                         in, &nexthop);
-                if (r < 0)
-                        return r;
-        } else if (r == 0) {
-                /* Take over a foreign nexthop */
-                r = set_ensure_put(by_manager ? &link->manager->nexthops : &link->nexthops,
-                                   &nexthop_hash_ops, nexthop);
-                if (r < 0)
-                        return r;
-
-                set_remove(by_manager ? link->manager->nexthops_foreign : link->nexthops_foreign, nexthop);
-        } else if (r == 1) {
-                /* NextHop exists, do nothing */
-                ;
-        } else
-                return r;
-
-        if (ret)
-                *ret = nexthop;
-        return 0;
-}
-
-static int nexthop_update(Manager *manager, Link *link, NextHop *nexthop, const NextHop *in) {
-        Set *nexthops;
-        int r;
-
-        /* link may be NULL. */
-
-        assert(manager);
         assert(nexthop);
-        assert(in);
-        assert(in->id > 0);
+        assert(nexthop->id > 0);
 
-        /* This updates nexthop ID if necessary, and register the nexthop to Manager. */
+        if (nexthop_owned_by_link(nexthop)) {
+                assert(link);
 
-        if (nexthop->id > 0) {
-                if (nexthop->id == in->id)
-                        goto set_manager;
-                return -EINVAL;
+                r = set_ensure_put(&link->nexthops, &nexthop_hash_ops, nexthop);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return -EEXIST;
+
+                nexthop->link = link;
+
+                manager = link->manager;
+        } else {
+                assert(manager);
+
+                r = set_ensure_put(&manager->nexthops, &nexthop_hash_ops, nexthop);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return -EEXIST;
+
+                nexthop->manager = manager;
         }
 
-        nexthops = link ? link->nexthops : manager->nexthops;
-
-        nexthop = set_remove(nexthops, nexthop);
-        if (!nexthop)
-                return -ENOENT;
-
-        nexthop->id = in->id;
-
-        r = set_put(nexthops, nexthop);
-        if (r <= 0) {
-                int k;
-
-                /* On failure, revert the change. */
-                nexthop->id = 0;
-                k = set_put(nexthops, nexthop);
-                if (k <= 0) {
-                        nexthop_free(nexthop);
-                        return k < 0 ? k : -EEXIST;
-                }
-
-                return r < 0 ? r : -EEXIST;
-        }
-
-set_manager:
         return hashmap_ensure_put(&manager->nexthops_by_id, NULL, UINT32_TO_PTR(nexthop->id), nexthop);
 }
 
-static void log_nexthop_debug(const NextHop *nexthop, uint32_t id, const char *str, const Link *link) {
-        _cleanup_free_ char *gw = NULL, *new_id = NULL, *group = NULL;
+static int nexthop_acquire_id(Manager *manager, NextHop *nexthop) {
+        _cleanup_set_free_ Set *ids = NULL;
+        Network *network;
+        uint32_t id;
+        int r;
+
+        assert(manager);
+        assert(nexthop);
+
+        if (nexthop->id > 0)
+                return 0;
+
+        /* Find the lowest unused ID. */
+
+        ORDERED_HASHMAP_FOREACH(network, manager->networks) {
+                NextHop *tmp;
+
+                HASHMAP_FOREACH(tmp, network->nexthops_by_section) {
+                        if (tmp->id == 0)
+                                continue;
+
+                        r = set_ensure_put(&ids, NULL, UINT32_TO_PTR(tmp->id));
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        for (id = 1; id < UINT32_MAX; id++) {
+                if (manager_get_nexthop_by_id(manager, id, NULL) >= 0)
+                        continue;
+                if (set_contains(ids, UINT32_TO_PTR(id)))
+                        continue;
+                break;
+        }
+
+        nexthop->id = id;
+        return 0;
+}
+
+static void log_nexthop_debug(const NextHop *nexthop, const char *str, const Link *link) {
+        _cleanup_free_ char *state = NULL, *group = NULL, *flags = NULL;
         struct nexthop_grp *nhg;
 
         assert(nexthop);
@@ -379,28 +357,27 @@
         if (!DEBUG_LOGGING)
                 return;
 
-        if (nexthop->id != id)
-                (void) asprintf(&new_id, "→%"PRIu32, id);
-
-        (void) in_addr_to_string(nexthop->family, &nexthop->gw, &gw);
+        (void) network_config_state_to_string_alloc(nexthop->state, &state);
+        (void) route_flags_to_string_alloc(nexthop->flags, &flags);
 
         HASHMAP_FOREACH(nhg, nexthop->group)
-                (void) strextendf_with_separator(&group, ",", "%"PRIu32":%"PRIu32, nhg->id, nhg->weight+1);
+                (void) strextendf_with_separator(&group, ",", "%"PRIu32":%"PRIu32, nhg->id, nhg->weight+1u);
 
-        log_link_debug(link, "%s nexthop: id: %"PRIu32"%s, gw: %s, blackhole: %s, group: %s",
-                       str, nexthop->id, strempty(new_id), strna(gw), yes_no(nexthop->blackhole), strna(group));
+        log_link_debug(link, "%s %s nexthop (%s): id: %"PRIu32", gw: %s, blackhole: %s, group: %s, flags: %s",
+                       str, strna(network_config_source_to_string(nexthop->source)), strna(state),
+                       nexthop->id,
+                       IN_ADDR_TO_STRING(nexthop->family, &nexthop->gw),
+                       yes_no(nexthop->blackhole), strna(group), strna(flags));
 }
 
-static int link_nexthop_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int nexthop_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
         int r;
 
         assert(m);
-        assert(link);
-        assert(link->nexthop_remove_messages > 0);
 
-        link->nexthop_remove_messages--;
+        /* link may be NULL. */
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+        if (link && IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
                 return 1;
 
         r = sd_netlink_message_get_errno(m);
@@ -410,37 +387,25 @@
         return 1;
 }
 
-static int manager_nexthop_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Manager *manager) {
-        int r;
-
-        assert(m);
-        assert(manager);
-        assert(manager->nexthop_remove_messages > 0);
-
-        manager->nexthop_remove_messages--;
-
-        r = sd_netlink_message_get_errno(m);
-        if (r < 0 && r != -ENOENT)
-                log_message_warning_errno(m, r, "Could not drop nexthop, ignoring");
-
-        return 1;
-}
-
-static int nexthop_remove(const NextHop *nexthop, Manager *manager, Link *link) {
+static int nexthop_remove(NextHop *nexthop) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        Manager *manager;
+        Link *link;
         int r;
 
         assert(nexthop);
-        assert(manager);
+        assert(nexthop->manager || (nexthop->link && nexthop->link->manager));
 
         /* link may be NULL. */
+        link = nexthop->link;
+        manager = nexthop->manager ?: nexthop->link->manager;
 
         if (nexthop->id == 0) {
                 log_link_debug(link, "Cannot remove nexthop without valid ID, ignoring.");
                 return 0;
         }
 
-        log_nexthop_debug(nexthop, nexthop->id, "Removing", link);
+        log_nexthop_debug(nexthop, "Removing", link);
 
         r = sd_rtnl_message_new_nexthop(manager->rtnl, &req, RTM_DELNEXTHOP, AF_UNSPEC, RTPROT_UNSPEC);
         if (r < 0)
@@ -450,53 +415,39 @@
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not append NHA_ID attribute: %m");
 
-        if (link)
-                r = netlink_call_async(manager->rtnl, NULL, req, link_nexthop_remove_handler,
-                                       link_netlink_destroy_callback, link);
-        else
-                r = netlink_call_async(manager->rtnl, NULL, req, manager_nexthop_remove_handler,
-                                       NULL, manager);
+        r = netlink_call_async(manager->rtnl, NULL, req, nexthop_remove_handler,
+                               link ? link_netlink_destroy_callback : NULL, link);
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
 
         link_ref(link); /* link may be NULL, link_ref() is OK with that */
 
-        if (link)
-                link->nexthop_remove_messages++;
-        else
-                manager->nexthop_remove_messages++;
-
+        nexthop_enter_removing(nexthop);
         return 0;
 }
 
-static int nexthop_configure(
-                const NextHop *nexthop,
-                Link *link,
-                link_netlink_message_handler_t callback,
-                NextHop **ret) {
-
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int nexthop_configure(NextHop *nexthop, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(nexthop);
+        assert(IN_SET(nexthop->family, AF_UNSPEC, AF_INET, AF_INET6));
         assert(link);
         assert(link->manager);
         assert(link->manager->rtnl);
         assert(link->ifindex > 0);
-        assert(IN_SET(nexthop->family, AF_UNSPEC, AF_INET, AF_INET6));
-        assert(callback);
+        assert(req);
 
-        log_nexthop_debug(nexthop, nexthop->id, "Configuring", link);
+        log_nexthop_debug(nexthop, "Configuring", link);
 
-        r = sd_rtnl_message_new_nexthop(link->manager->rtnl, &req,
-                                        RTM_NEWNEXTHOP, nexthop->family,
-                                        nexthop->protocol);
+        r = sd_rtnl_message_new_nexthop(link->manager->rtnl, &m, RTM_NEWNEXTHOP, nexthop->family, nexthop->protocol);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not create RTM_NEWNEXTHOP message: %m");
+                return r;
 
         if (nexthop->id > 0) {
-                r = sd_netlink_message_append_u32(req, NHA_ID, nexthop->id);
+                r = sd_netlink_message_append_u32(m, NHA_ID, nexthop->id);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append NHA_ID attribute: %m");
+                        return r;
         }
 
         if (!hashmap_isempty(nexthop->group)) {
@@ -511,56 +462,38 @@
                 HASHMAP_FOREACH(nhg, nexthop->group)
                         *p++ = *nhg;
 
-                r = sd_netlink_message_append_data(req, NHA_GROUP, group, sizeof(struct nexthop_grp) * hashmap_size(nexthop->group));
+                r = sd_netlink_message_append_data(m, NHA_GROUP, group, sizeof(struct nexthop_grp) * hashmap_size(nexthop->group));
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append NHA_GROUP attribute: %m");
+                        return r;
 
         } else if (nexthop->blackhole) {
-                r = sd_netlink_message_append_flag(req, NHA_BLACKHOLE);
+                r = sd_netlink_message_append_flag(m, NHA_BLACKHOLE);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append NHA_BLACKHOLE attribute: %m");
+                        return r;
         } else {
-                r = sd_netlink_message_append_u32(req, NHA_OIF, link->ifindex);
+                r = sd_netlink_message_append_u32(m, NHA_OIF, link->ifindex);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append NHA_OIF attribute: %m");
+                        return r;
 
                 if (in_addr_is_set(nexthop->family, &nexthop->gw)) {
-                        r = netlink_message_append_in_addr_union(req, NHA_GATEWAY, nexthop->family, &nexthop->gw);
+                        r = netlink_message_append_in_addr_union(m, NHA_GATEWAY, nexthop->family, &nexthop->gw);
                         if (r < 0)
-                                return log_link_error_errno(link, r, "Could not append NHA_GATEWAY attribute: %m");
+                                return r;
 
-                        if (nexthop->onlink > 0) {
-                                r = sd_rtnl_message_nexthop_set_flags(req, RTNH_F_ONLINK);
-                                if (r < 0)
-                                        return log_link_error_errno(link, r, "Failed to set RTNH_F_ONLINK flag: %m");
-                        }
+                        r = sd_rtnl_message_nexthop_set_flags(m, nexthop->flags & RTNH_F_ONLINK);
+                        if (r < 0)
+                                return r;
                 }
         }
 
-        r = nexthop_add(link, nexthop, ret);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not add nexthop: %m");
-
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-
-        return r;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-static int static_nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int static_nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, NextHop *nexthop) {
         int r;
 
+        assert(m);
         assert(link);
-        assert(link->static_nexthop_messages > 0);
-
-        link->static_nexthop_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
@@ -578,20 +511,109 @@
         return 1;
 }
 
-static int link_request_nexthop(
-                Link *link,
-                NextHop *nexthop,
-                bool consume_object,
-                unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
-                Request **ret) {
+static bool nexthop_is_ready_to_configure(Link *link, const NextHop *nexthop) {
+        struct nexthop_grp *nhg;
 
         assert(link);
         assert(nexthop);
 
-        log_nexthop_debug(nexthop, nexthop->id, "Requesting", link);
-        return link_queue_request(link, REQUEST_TYPE_NEXTHOP, nexthop, consume_object,
-                                  message_counter, netlink_handler, ret);
+        if (!link_is_ready_to_configure(link, false))
+                return false;
+
+        if (nexthop_owned_by_link(nexthop)) {
+                /* TODO: fdb nexthop does not require IFF_UP. The conditions below needs to be updated
+                 * when fdb nexthop support is added. See rtm_to_nh_config() in net/ipv4/nexthop.c of
+                 * kernel. */
+                if (link->set_flags_messages > 0)
+                        return false;
+                if (!FLAGS_SET(link->flags, IFF_UP))
+                        return false;
+        }
+
+        /* All group members must be configured first. */
+        HASHMAP_FOREACH(nhg, nexthop->group) {
+                NextHop *g;
+
+                if (manager_get_nexthop_by_id(link->manager, nhg->id, &g) < 0)
+                        return false;
+
+                if (!nexthop_exists(g))
+                        return false;
+        }
+
+        if (nexthop->id == 0) {
+                Request *req;
+
+                ORDERED_SET_FOREACH(req, link->manager->request_queue) {
+                        if (req->type != REQUEST_TYPE_NEXTHOP)
+                                continue;
+                        if (((NextHop*) req->userdata)->id != 0)
+                                return false; /* first configure nexthop with id. */
+                }
+        }
+
+        return gateway_is_ready(link, FLAGS_SET(nexthop->flags, RTNH_F_ONLINK), nexthop->family, &nexthop->gw);
+}
+
+static int nexthop_process_request(Request *req, Link *link, NextHop *nexthop) {
+        int r;
+
+        assert(req);
+        assert(link);
+        assert(nexthop);
+
+        if (!nexthop_is_ready_to_configure(link, nexthop))
+                return 0;
+
+        r = nexthop_configure(nexthop, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure nexthop");
+
+        nexthop_enter_configuring(nexthop);
+        return 1;
+}
+
+static int link_request_nexthop(Link *link, NextHop *nexthop) {
+        NextHop *existing;
+        int r;
+
+        assert(link);
+        assert(nexthop);
+        assert(nexthop->source != NETWORK_CONFIG_SOURCE_FOREIGN);
+
+        if (nexthop_get(link->manager, link, nexthop, &existing) < 0) {
+                _cleanup_(nexthop_freep) NextHop *tmp = NULL;
+
+                r = nexthop_dup(nexthop, &tmp);
+                if (r < 0)
+                        return r;
+
+                r = nexthop_acquire_id(link->manager, tmp);
+                if (r < 0)
+                        return r;
+
+                r = nexthop_add(link->manager, link, tmp);
+                if (r < 0)
+                        return r;
+
+                existing = TAKE_PTR(tmp);
+        } else
+                existing->source = nexthop->source;
+
+        log_nexthop_debug(existing, "Requesting", link);
+        r = link_queue_request_safe(link, REQUEST_TYPE_NEXTHOP,
+                                    existing, NULL,
+                                    nexthop_hash_func,
+                                    nexthop_compare_func,
+                                    nexthop_process_request,
+                                    &link->static_nexthop_messages,
+                                    static_nexthop_handler,
+                                    NULL);
+        if (r <= 0)
+                return r;
+
+        nexthop_enter_requesting(existing);
+        return 1;
 }
 
 int link_request_static_nexthops(Link *link, bool only_ipv4) {
@@ -607,8 +629,7 @@
                 if (only_ipv4 && nh->family != AF_INET)
                         continue;
 
-                r = link_request_nexthop(link, nh, false, &link->static_nexthop_messages,
-                                         static_nexthop_handler, NULL);
+                r = link_request_nexthop(link, nh);
                 if (r < 0)
                         return log_link_warning_errno(link, r, "Could not request nexthop: %m");
         }
@@ -624,58 +645,57 @@
         return 0;
 }
 
-static bool link_has_nexthop(const Link *link, const NextHop *nexthop) {
-        NextHop *net_nexthop;
-
-        assert(link);
-        assert(nexthop);
-
-        if (!link->network)
-                return false;
-
-        HASHMAP_FOREACH(net_nexthop, link->network->nexthops_by_section)
-                if (nexthop_equal(net_nexthop, nexthop))
-                        return true;
-
-        return false;
-}
-
-static bool links_have_nexthop(const Manager *manager, const NextHop *nexthop, const Link *except) {
+static void manager_mark_nexthops(Manager *manager, bool foreign, const Link *except) {
+        NextHop *nexthop;
         Link *link;
 
         assert(manager);
 
-        HASHMAP_FOREACH(link, manager->links_by_index) {
-                if (link == except)
-                        continue;
-
-                if (link_has_nexthop(link, nexthop))
-                        return true;
-        }
-
-        return false;
-}
-
-static int manager_drop_nexthops_internal(Manager *manager, bool foreign, const Link *except) {
-        NextHop *nexthop;
-        Set *nexthops;
-        int k, r = 0;
-
-        assert(manager);
-
-        nexthops = foreign ? manager->nexthops_foreign : manager->nexthops;
-        SET_FOREACH(nexthop, nexthops) {
+        /* First, mark all nexthops. */
+        SET_FOREACH(nexthop, manager->nexthops) {
                 /* do not touch nexthop created by the kernel */
                 if (nexthop->protocol == RTPROT_KERNEL)
                         continue;
 
-                /* The nexthop will be configured later, or already configured by a link. */
-                if (links_have_nexthop(manager, nexthop, except))
+                /* When 'foreign' is true, mark only foreign nexthops, and vice versa. */
+                if (foreign != (nexthop->source == NETWORK_CONFIG_SOURCE_FOREIGN))
                         continue;
 
-                /* The existing links do not have the nexthop. Let's drop this now. It may be
-                 * re-configured later. */
-                k = nexthop_remove(nexthop, manager, NULL);
+                /* Ignore nexthops not assigned yet or already removed. */
+                if (!nexthop_exists(nexthop))
+                        continue;
+
+                nexthop_mark(nexthop);
+        }
+
+        /* Then, unmark all nexthops requested by active links. */
+        HASHMAP_FOREACH(link, manager->links_by_index) {
+                if (link == except)
+                        continue;
+
+                if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                        continue;
+
+                HASHMAP_FOREACH(nexthop, link->network->nexthops_by_section) {
+                        NextHop *existing;
+
+                        if (nexthop_get(manager, NULL, nexthop, &existing) >= 0)
+                                nexthop_unmark(existing);
+                }
+        }
+}
+
+static int manager_drop_marked_nexthops(Manager *manager) {
+        NextHop *nexthop;
+        int k, r = 0;
+
+        assert(manager);
+
+        SET_FOREACH(nexthop, manager->nexthops) {
+                if (!nexthop_is_marked(nexthop))
+                        continue;
+
+                k = nexthop_remove(nexthop);
                 if (k < 0 && r >= 0)
                         r = k;
         }
@@ -683,42 +703,59 @@
         return r;
 }
 
-static int manager_drop_foreign_nexthops(Manager *manager) {
-        return manager_drop_nexthops_internal(manager, true, NULL);
-}
-
-static int manager_drop_nexthops(Manager *manager, const Link *except) {
-        return manager_drop_nexthops_internal(manager, false, except);
-}
-
 int link_drop_foreign_nexthops(Link *link) {
         NextHop *nexthop;
         int k, r = 0;
 
         assert(link);
         assert(link->manager);
+        assert(link->network);
 
-        SET_FOREACH(nexthop, link->nexthops_foreign) {
+        /* First, mark all nexthops. */
+        SET_FOREACH(nexthop, link->nexthops) {
                 /* do not touch nexthop created by the kernel */
                 if (nexthop->protocol == RTPROT_KERNEL)
                         continue;
 
-                if (link_has_nexthop(link, nexthop))
-                        k = nexthop_add(link, nexthop, NULL);
-                else
-                        k = nexthop_remove(nexthop, link->manager, link);
+                /* Do not remove nexthops we configured. */
+                if (nexthop->source != NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
+
+                /* Ignore nexthops not assigned yet or already removed. */
+                if (!nexthop_exists(nexthop))
+                        continue;
+
+                nexthop_mark(nexthop);
+        }
+
+        /* Then, unmark all nexthops requested by active links. */
+        HASHMAP_FOREACH(nexthop, link->network->nexthops_by_section) {
+                NextHop *existing;
+
+                if (nexthop_get(NULL, link, nexthop, &existing) >= 0)
+                        nexthop_unmark(existing);
+        }
+
+        /* Finally, remove all marked rules. */
+        SET_FOREACH(nexthop, link->nexthops) {
+                if (!nexthop_is_marked(nexthop))
+                        continue;
+
+                k = nexthop_remove(nexthop);
                 if (k < 0 && r >= 0)
                         r = k;
         }
 
-        k = manager_drop_foreign_nexthops(link->manager);
+        manager_mark_nexthops(link->manager, /* foreign = */ true, NULL);
+
+        k = manager_drop_marked_nexthops(link->manager);
         if (k < 0 && r >= 0)
                 r = k;
 
         return r;
 }
 
-int link_drop_nexthops(Link *link) {
+int link_drop_managed_nexthops(Link *link) {
         NextHop *nexthop;
         int k, r = 0;
 
@@ -730,96 +767,44 @@
                 if (nexthop->protocol == RTPROT_KERNEL)
                         continue;
 
-                k = nexthop_remove(nexthop, link->manager, link);
+                /* Do not touch addresses managed by kernel or other tools. */
+                if (nexthop->source == NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
+
+                /* Ignore nexthops not assigned yet or already removing. */
+                if (!nexthop_exists(nexthop))
+                        continue;
+
+                k = nexthop_remove(nexthop);
                 if (k < 0 && r >= 0)
                         r = k;
         }
 
-        k = manager_drop_nexthops(link->manager, link);
+        manager_mark_nexthops(link->manager, /* foreign = */ false, link);
+
+        k = manager_drop_marked_nexthops(link->manager);
         if (k < 0 && r >= 0)
                 r = k;
 
         return r;
 }
 
-static bool nexthop_is_ready_to_configure(Link *link, const NextHop *nexthop) {
-        struct nexthop_grp *nhg;
+void link_foreignize_nexthops(Link *link) {
+        NextHop *nexthop;
 
         assert(link);
-        assert(nexthop);
 
-        if (!link_is_ready_to_configure(link, false))
-                return false;
+        SET_FOREACH(nexthop, link->nexthops)
+                nexthop->source = NETWORK_CONFIG_SOURCE_FOREIGN;
 
-        if (!nexthop_has_link(nexthop)) {
-                if (link->manager->nexthop_remove_messages > 0)
-                        return false;
-        } else {
-                Link *l;
+        manager_mark_nexthops(link->manager, /* foreign = */ false, link);
 
-                /* TODO: fdb nexthop does not require IFF_UP. The conditions below needs to be updated
-                 * when fdb nexthop support is added. See rtm_to_nh_config() in net/ipv4/nexthop.c of
-                 * kernel. */
-                if (link->set_flags_messages > 0)
-                        return false;
-                if (!FLAGS_SET(link->flags, IFF_UP))
-                        return false;
+        SET_FOREACH(nexthop, link->manager->nexthops) {
+                if (!nexthop_is_marked(nexthop))
+                        continue;
 
-                HASHMAP_FOREACH(l, link->manager->links_by_index) {
-                        if (l->address_remove_messages > 0)
-                                return false;
-                        if (l->nexthop_remove_messages > 0)
-                                return false;
-                        if (l->route_remove_messages > 0)
-                                return false;
-                }
+                nexthop->source = NETWORK_CONFIG_SOURCE_FOREIGN;
         }
-
-        /* All group members must be configured first. */
-        HASHMAP_FOREACH(nhg, nexthop->group)
-                if (manager_get_nexthop_by_id(link->manager, nhg->id, NULL) < 0)
-                        return false;
-
-        if (nexthop->id == 0) {
-                Request *req;
-
-                ORDERED_SET_FOREACH(req, link->manager->request_queue) {
-                        if (req->type != REQUEST_TYPE_NEXTHOP)
-                                continue;
-                        if (req->nexthop->id != 0)
-                                return false; /* first configure nexthop with id. */
-                }
-        }
-
-        return gateway_is_ready(link, nexthop->onlink, nexthop->family, &nexthop->gw);
-}
-
-int request_process_nexthop(Request *req) {
-        NextHop *ret;
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->nexthop);
-        assert(req->type == REQUEST_TYPE_NEXTHOP);
-
-        if (!nexthop_is_ready_to_configure(req->link, req->nexthop))
-                return 0;
-
-        r = nexthop_configure(req->nexthop, req->link, req->netlink_handler, &ret);
-        if (r < 0)
-                return r;
-
-        /* To prevent a double decrement on failure in after_configure(). */
-        req->message_counter = NULL;
-
-        if (req->after_configure) {
-                r = req->after_configure(req, ret);
-                if (r < 0)
-                        return r;
-        }
-
-        return 1;
 }
 
 int manager_rtnl_process_nexthop(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
@@ -890,6 +875,12 @@
                 return 0;
         }
 
+        r = sd_rtnl_message_nexthop_get_flags(message, &tmp->flags);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "rtnl: could not get nexthop flags, ignoring: %m");
+                return 0;
+        }
+
         r = sd_netlink_message_read_data(message, NHA_GROUP, &raw_group_size, &raw_group);
         if (r < 0 && r != -ENODATA) {
                 log_link_warning_errno(link, r, "rtnl: could not get NHA_GROUP attribute, ignoring: %m");
@@ -963,49 +954,45 @@
 
         /* All blackhole or group nexthops are managed by Manager. Note that the linux kernel does not
          * set NHA_OID attribute when NHA_BLACKHOLE or NHA_GROUP is set. Just for safety. */
-        if (!nexthop_has_link(tmp))
+        if (!nexthop_owned_by_link(tmp))
                 link = NULL;
 
-        r = nexthop_get(m, link, tmp, &nexthop);
-        if (r < 0) {
-                uint32_t id;
-
-                /* The nexthop may be created without setting NHA_ID. */
-
-                id = tmp->id;
-                tmp->id = 0;
-
-                (void) nexthop_get(m, link, tmp, &nexthop);
-
-                tmp->id = id;
-        }
+        (void) nexthop_get(m, link, tmp, &nexthop);
 
         switch (type) {
         case RTM_NEWNEXTHOP:
-                if (nexthop)
-                        log_nexthop_debug(nexthop, tmp->id, "Received remembered", link);
-                else {
-                        log_nexthop_debug(tmp, tmp->id, "Remembering foreign", link);
-                        r = nexthop_add_foreign(m, link, tmp, &nexthop);
+                if (nexthop) {
+                        nexthop->flags = tmp->flags;
+                        nexthop_enter_configured(nexthop);
+                        log_nexthop_debug(tmp, "Received remembered", link);
+                } else {
+                        nexthop_enter_configured(tmp);
+                        log_nexthop_debug(tmp, "Remembering", link);
+
+                        r = nexthop_add(m, link, tmp);
                         if (r < 0) {
                                 log_link_warning_errno(link, r, "Could not remember foreign nexthop, ignoring: %m");
                                 return 0;
                         }
+
+                        TAKE_PTR(tmp);
                 }
 
-                r = nexthop_update(m, link, nexthop, tmp);
-                if (r < 0) {
-                        log_link_warning_errno(link, r, "Could not update nexthop, ignoring: %m");
-                        return 0;
-                }
                 break;
         case RTM_DELNEXTHOP:
-                log_nexthop_debug(tmp, tmp->id, nexthop ? "Forgetting" : "Kernel removed unknown", link);
-                nexthop_free(nexthop);
+                if (nexthop) {
+                        nexthop_enter_removed(nexthop);
+                        if (nexthop->state == 0) {
+                                log_nexthop_debug(nexthop, "Forgetting", link);
+                                nexthop_free(nexthop);
+                        } else
+                                log_nexthop_debug(nexthop, "Removed", link);
+                } else
+                        log_nexthop_debug(tmp, "Kernel removed unknown", link);
                 break;
 
         default:
-                assert_not_reached("Received invalid RTNL message type");
+                assert_not_reached();
         }
 
         return 1;
@@ -1053,6 +1040,9 @@
                 nh->onlink = true;
         }
 
+        if (nh->onlink >= 0)
+                SET_FLAG(nh->flags, RTNH_F_ONLINK, nh->onlink);
+
         return 0;
 }
 
@@ -1212,7 +1202,7 @@
                 return 0;
         }
 
-        switch(a) {
+        switch (a) {
         case ADDRESS_FAMILY_IPV4:
                 n->family = AF_INET;
                 break;
@@ -1220,7 +1210,7 @@
                 n->family = AF_INET6;
                 break;
         default:
-                assert_not_reached("Invalid family.");
+                assert_not_reached();
         }
 
         TAKE_PTR(n);
diff --git a/src/network/networkd-nexthop.h b/src/network/networkd-nexthop.h
index 9904ab8..6f2aa6f 100644
--- a/src/network/networkd-nexthop.h
+++ b/src/network/networkd-nexthop.h
@@ -16,14 +16,14 @@
 typedef struct Link Link;
 typedef struct Manager Manager;
 typedef struct Network Network;
-typedef struct Request Request;
 
 typedef struct NextHop {
         Network *network;
-        NetworkConfigSection *section;
-
         Manager *manager;
         Link *link;
+        ConfigSection *section;
+        NetworkConfigSource source;
+        NetworkConfigState state;
 
         uint8_t protocol;
 
@@ -31,26 +31,26 @@
         bool blackhole;
         int family;
         union in_addr_union gw;
-        int onlink;
+        uint8_t flags;
+        int onlink; /* Only used in conf parser and nexthop_section_verify(). */
         Hashmap *group;
 } NextHop;
 
 NextHop *nexthop_free(NextHop *nexthop);
 
-void nexthop_hash_func(const NextHop *nexthop, struct siphash *state);
-int nexthop_compare_func(const NextHop *a, const NextHop *b);
-
 void network_drop_invalid_nexthops(Network *network);
 
-int link_drop_nexthops(Link *link);
+int link_drop_managed_nexthops(Link *link);
 int link_drop_foreign_nexthops(Link *link);
+void link_foreignize_nexthops(Link *link);
 
 int link_request_static_nexthops(Link *link, bool only_ipv4);
-int request_process_nexthop(Request *req);
 
 int manager_get_nexthop_by_id(Manager *manager, uint32_t id, NextHop **ret);
 int manager_rtnl_process_nexthop(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
 
+DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(NextHop, nexthop);
+
 CONFIG_PARSER_PROTOTYPE(config_parse_nexthop_id);
 CONFIG_PARSER_PROTOTYPE(config_parse_nexthop_gateway);
 CONFIG_PARSER_PROTOTYPE(config_parse_nexthop_family);
diff --git a/src/network/networkd-queue.c b/src/network/networkd-queue.c
index 5ef4acf..cf2ffa0 100644
--- a/src/network/networkd-queue.c
+++ b/src/network/networkd-queue.c
@@ -1,141 +1,64 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "networkd-address.h"
-#include "networkd-address-label.h"
-#include "networkd-bridge-fdb.h"
-#include "networkd-bridge-mdb.h"
-#include "networkd-dhcp-server.h"
-#include "networkd-ipv6-proxy-ndp.h"
+#include "netdev.h"
+#include "netlink-util.h"
+#include "networkd-link.h"
 #include "networkd-manager.h"
-#include "networkd-neighbor.h"
-#include "networkd-nexthop.h"
-#include "networkd-route.h"
-#include "networkd-routing-policy-rule.h"
 #include "networkd-queue.h"
-#include "networkd-setlink.h"
-
-static void request_free_object(RequestType type, void *object) {
-        switch(type) {
-        case REQUEST_TYPE_ACTIVATE_LINK:
-                break;
-        case REQUEST_TYPE_ADDRESS:
-                address_free(object);
-                break;
-        case REQUEST_TYPE_ADDRESS_LABEL:
-                address_label_free(object);
-                break;
-        case REQUEST_TYPE_BRIDGE_FDB:
-                bridge_fdb_free(object);
-                break;
-        case REQUEST_TYPE_BRIDGE_MDB:
-                bridge_mdb_free(object);
-                break;
-        case REQUEST_TYPE_CREATE_STACKED_NETDEV:
-                break;
-        case REQUEST_TYPE_DHCP_SERVER:
-                break;
-        case REQUEST_TYPE_IPV6_PROXY_NDP:
-                free(object);
-                break;
-        case REQUEST_TYPE_NEIGHBOR:
-                neighbor_free(object);
-                break;
-        case REQUEST_TYPE_NEXTHOP:
-                nexthop_free(object);
-                break;
-        case REQUEST_TYPE_ROUTE:
-                route_free(object);
-                break;
-        case REQUEST_TYPE_ROUTING_POLICY_RULE:
-                routing_policy_rule_free(object);
-                break;
-        case REQUEST_TYPE_SET_LINK:
-        case REQUEST_TYPE_UP_DOWN:
-                break;
-        default:
-                assert_not_reached("invalid request type.");
-        }
-}
+#include "string-table.h"
 
 static Request *request_free(Request *req) {
         if (!req)
                 return NULL;
 
-        if (req->link && req->link->manager)
-                /* To prevent from triggering assertions in hash functions, remove this request before
-                 * freeing object below. */
-                ordered_set_remove(req->link->manager->request_queue, req);
-        if (req->on_free)
-                /* on_free() may use object. So, let's call this earlier. */
-                req->on_free(req);
-        if (req->consume_object)
-                request_free_object(req->type, req->object);
-        link_unref(req->link);
+        /* To prevent from triggering assertions in the hash and compare functions, remove this request
+         * before freeing userdata below. */
+        if (req->manager)
+                ordered_set_remove(req->manager->request_queue, req);
+
+        if (req->free_func)
+                req->free_func(req->userdata);
+
+        if (req->counter)
+                (*req->counter)--;
+
+        link_unref(req->link); /* link may be NULL, but link_unref() can handle it gracefully. */
 
         return mfree(req);
 }
 
-DEFINE_TRIVIAL_CLEANUP_FUNC(Request*, request_free);
+DEFINE_TRIVIAL_REF_UNREF_FUNC(Request, request, request_free);
+DEFINE_TRIVIAL_DESTRUCTOR(request_destroy_callback, Request, request_unref);
 
-void request_drop(Request *req) {
+void request_detach(Manager *manager, Request *req) {
+        assert(manager);
+
         if (!req)
                 return;
 
-        if (req->message_counter)
-                (*req->message_counter)--;
+        req = ordered_set_remove(manager->request_queue, req);
+        if (!req)
+                return;
 
-        request_free(req);
+        req->manager = NULL;
+        request_unref(req);
 }
 
 static void request_hash_func(const Request *req, struct siphash *state) {
         assert(req);
-        assert(req->link);
         assert(state);
 
-        siphash24_compress(&req->link->ifindex, sizeof(req->link->ifindex), state);
+        siphash24_compress_boolean(req->link, state);
+        if (req->link)
+                siphash24_compress(&req->link->ifindex, sizeof(req->link->ifindex), state);
+
         siphash24_compress(&req->type, sizeof(req->type), state);
 
-        switch(req->type) {
-        case REQUEST_TYPE_ACTIVATE_LINK:
-                break;
-        case REQUEST_TYPE_ADDRESS:
-                address_hash_func(req->address, state);
-                break;
-        case REQUEST_TYPE_ADDRESS_LABEL:
-        case REQUEST_TYPE_BRIDGE_FDB:
-        case REQUEST_TYPE_BRIDGE_MDB:
-        case REQUEST_TYPE_CREATE_STACKED_NETDEV:
-                /* TODO: Currently, these types do not have any specific hash and compare functions.
-                 * Fortunately, all these objects are 'static', thus we can use the trivial functions. */
-                trivial_hash_func(req->object, state);
-                break;
-        case REQUEST_TYPE_DHCP_SERVER:
-                /* This type does not have object. */
-                break;
-        case REQUEST_TYPE_IPV6_PROXY_NDP:
-                in6_addr_hash_func(req->ipv6_proxy_ndp, state);
-                break;
-        case REQUEST_TYPE_NEIGHBOR:
-                neighbor_hash_func(req->neighbor, state);
-                break;
-        case REQUEST_TYPE_NEXTHOP:
-                nexthop_hash_func(req->nexthop, state);
-                break;
-        case REQUEST_TYPE_ROUTE:
-                route_hash_func(req->route, state);
-                break;
-        case REQUEST_TYPE_ROUTING_POLICY_RULE:
-                routing_policy_rule_hash_func(req->rule, state);
-                break;
-        case REQUEST_TYPE_SET_LINK: {
-                trivial_hash_func(req->set_link_operation_ptr, state);
-                break;
-        }
-        case REQUEST_TYPE_UP_DOWN:
-                break;
-        default:
-                assert_not_reached("invalid request type.");
-        }
+        siphash24_compress(&req->hash_func, sizeof(req->hash_func), state);
+        siphash24_compress(&req->compare_func, sizeof(req->compare_func), state);
+
+        if (req->hash_func)
+                req->hash_func(req->userdata, state);
 }
 
 static int request_compare_func(const struct Request *a, const struct Request *b) {
@@ -143,46 +66,33 @@
 
         assert(a);
         assert(b);
-        assert(a->link);
-        assert(b->link);
 
-        r = CMP(a->link->ifindex, b->link->ifindex);
+        r = CMP(!!a->link, !!b->link);
         if (r != 0)
                 return r;
 
+        if (a->link) {
+                r = CMP(a->link->ifindex, b->link->ifindex);
+                if (r != 0)
+                        return r;
+        }
+
         r = CMP(a->type, b->type);
         if (r != 0)
                 return r;
 
-        switch (a->type) {
-        case REQUEST_TYPE_ACTIVATE_LINK:
-                return 0;
-        case REQUEST_TYPE_ADDRESS:
-                return address_compare_func(a->address, b->address);
-        case REQUEST_TYPE_ADDRESS_LABEL:
-        case REQUEST_TYPE_BRIDGE_FDB:
-        case REQUEST_TYPE_BRIDGE_MDB:
-        case REQUEST_TYPE_CREATE_STACKED_NETDEV:
-                return trivial_compare_func(a->object, b->object);
-        case REQUEST_TYPE_DHCP_SERVER:
-                return 0;
-        case REQUEST_TYPE_IPV6_PROXY_NDP:
-                return in6_addr_compare_func(a->ipv6_proxy_ndp, b->ipv6_proxy_ndp);
-        case REQUEST_TYPE_NEIGHBOR:
-                return neighbor_compare_func(a->neighbor, b->neighbor);
-        case REQUEST_TYPE_NEXTHOP:
-                return nexthop_compare_func(a->nexthop, b->nexthop);
-        case REQUEST_TYPE_ROUTE:
-                return route_compare_func(a->route, b->route);
-        case REQUEST_TYPE_ROUTING_POLICY_RULE:
-                return routing_policy_rule_compare_func(a->rule, b->rule);
-        case REQUEST_TYPE_SET_LINK:
-                return trivial_compare_func(a->set_link_operation_ptr, b->set_link_operation_ptr);
-        case REQUEST_TYPE_UP_DOWN:
-                return 0;
-        default:
-                assert_not_reached("invalid request type.");
-        }
+        r = CMP(PTR_TO_UINT64(a->hash_func), PTR_TO_UINT64(b->hash_func));
+        if (r != 0)
+                return r;
+
+        r = CMP(PTR_TO_UINT64(a->compare_func), PTR_TO_UINT64(b->compare_func));
+        if (r != 0)
+                return r;
+
+        if (a->compare_func)
+                return a->compare_func(a->userdata, b->userdata);
+
+        return 0;
 }
 
 DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
@@ -190,64 +100,62 @@
                 Request,
                 request_hash_func,
                 request_compare_func,
-                request_free);
+                request_unref);
 
-int link_queue_request(
+static int request_new(
+                Manager *manager,
                 Link *link,
                 RequestType type,
-                void *object,
-                bool consume_object,
-                unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
+                void *userdata,
+                mfree_func_t free_func,
+                hash_func_t hash_func,
+                compare_func_t compare_func,
+                request_process_func_t process,
+                unsigned *counter,
+                request_netlink_handler_t netlink_handler,
                 Request **ret) {
 
-        _cleanup_(request_freep) Request *req = NULL;
+        _cleanup_(request_unrefp) Request *req = NULL;
         Request *existing;
         int r;
 
-        assert(link);
-        assert(link->manager);
-        assert(type >= 0 && type < _REQUEST_TYPE_MAX);
-        assert(IN_SET(type,
-                      REQUEST_TYPE_ACTIVATE_LINK,
-                      REQUEST_TYPE_DHCP_SERVER,
-                      REQUEST_TYPE_SET_LINK,
-                      REQUEST_TYPE_UP_DOWN) ||
-               object);
-        assert(type == REQUEST_TYPE_DHCP_SERVER || netlink_handler);
+        assert(manager);
+        assert(process);
 
         req = new(Request, 1);
         if (!req) {
-                if (consume_object)
-                        request_free_object(type, object);
+                if (free_func)
+                        free_func(userdata);
                 return -ENOMEM;
         }
 
         *req = (Request) {
-                .link = link_ref(link),
+                .n_ref = 1,
+                .link = link_ref(link), /* link may be NULL, but link_ref() handles it gracefully. */
                 .type = type,
-                .object = object,
-                .consume_object = consume_object,
-                .message_counter = message_counter,
+                .userdata = userdata,
+                .free_func = free_func,
+                .hash_func = hash_func,
+                .compare_func = compare_func,
+                .process = process,
                 .netlink_handler = netlink_handler,
         };
 
-        existing = ordered_set_get(link->manager->request_queue, req);
+        existing = ordered_set_get(manager->request_queue, req);
         if (existing) {
-                /* To prevent from removing the existing request. */
-                req->link = link_unref(req->link);
-
                 if (ret)
                         *ret = existing;
                 return 0;
         }
 
-        r = ordered_set_ensure_put(&link->manager->request_queue, &request_hash_ops, req);
+        r = ordered_set_ensure_put(&manager->request_queue, &request_hash_ops, req);
         if (r < 0)
                 return r;
 
-        if (req->message_counter)
-                (*req->message_counter)++;
+        req->manager = manager;
+        req->counter = counter;
+        if (req->counter)
+                (*req->counter)++;
 
         if (ret)
                 *ret = req;
@@ -256,75 +164,141 @@
         return 1;
 }
 
-int manager_process_requests(sd_event_source *s, void *userdata) {
-        Manager *manager = userdata;
-        int r;
+int netdev_queue_request(
+                NetDev *netdev,
+                request_process_func_t process,
+                Request **ret) {
 
-        assert(manager);
+        assert(netdev);
+
+        return request_new(netdev->manager, NULL, REQUEST_TYPE_NETDEV_INDEPENDENT,
+                           netdev_ref(netdev), (mfree_func_t) netdev_unref,
+                           trivial_hash_func, trivial_compare_func,
+                           process, NULL, NULL, ret);
+}
+
+int link_queue_request_full(
+                Link *link,
+                RequestType type,
+                void *userdata,
+                mfree_func_t free_func,
+                hash_func_t hash_func,
+                compare_func_t compare_func,
+                request_process_func_t process,
+                unsigned *counter,
+                request_netlink_handler_t netlink_handler,
+                Request **ret) {
+
+        assert(link);
+
+        return request_new(link->manager, link, type,
+                           userdata, free_func, hash_func, compare_func,
+                           process, counter, netlink_handler, ret);
+}
+
+int manager_process_requests(sd_event_source *s, void *userdata) {
+        Manager *manager = ASSERT_PTR(userdata);
+        int r;
 
         for (;;) {
                 bool processed = false;
                 Request *req;
 
                 ORDERED_SET_FOREACH(req, manager->request_queue) {
-                        switch(req->type) {
-                        case REQUEST_TYPE_ACTIVATE_LINK:
-                                r = request_process_activation(req);
+                        _unused_ _cleanup_(request_unrefp) Request *ref = request_ref(req);
+                        _cleanup_(link_unrefp) Link *link = link_ref(req->link);
+
+                        assert(req->process);
+
+                        r = req->process(req, link, req->userdata);
+                        if (r == 0)
+                                continue;
+
+                        processed = true;
+                        request_detach(manager, req);
+
+                        if (r < 0 && link) {
+                                link_enter_failed(link);
+                                /* link_enter_failed() may remove multiple requests,
+                                 * hence we need to exit from the loop. */
                                 break;
-                        case REQUEST_TYPE_ADDRESS:
-                                r = request_process_address(req);
-                                break;
-                        case REQUEST_TYPE_ADDRESS_LABEL:
-                                r = request_process_address_label(req);
-                                break;
-                        case REQUEST_TYPE_BRIDGE_FDB:
-                                r = request_process_bridge_fdb(req);
-                                break;
-                        case REQUEST_TYPE_BRIDGE_MDB:
-                                r = request_process_bridge_mdb(req);
-                                break;
-                        case REQUEST_TYPE_CREATE_STACKED_NETDEV:
-                                r = request_process_create_stacked_netdev(req);
-                                break;
-                        case REQUEST_TYPE_DHCP_SERVER:
-                                r = request_process_dhcp_server(req);
-                                break;
-                        case REQUEST_TYPE_IPV6_PROXY_NDP:
-                                r = request_process_ipv6_proxy_ndp_address(req);
-                                break;
-                        case REQUEST_TYPE_NEIGHBOR:
-                                r = request_process_neighbor(req);
-                                break;
-                        case REQUEST_TYPE_NEXTHOP:
-                                r = request_process_nexthop(req);
-                                break;
-                        case REQUEST_TYPE_ROUTE:
-                                r = request_process_route(req);
-                                break;
-                        case REQUEST_TYPE_ROUTING_POLICY_RULE:
-                                r = request_process_routing_policy_rule(req);
-                                break;
-                        case REQUEST_TYPE_SET_LINK:
-                                r = request_process_set_link(req);
-                                break;
-                        case REQUEST_TYPE_UP_DOWN:
-                                r = request_process_link_up_or_down(req);
-                                break;
-                        default:
-                                return -EINVAL;
-                        }
-                        if (r < 0)
-                                link_enter_failed(req->link);
-                        if (r > 0) {
-                                ordered_set_remove(manager->request_queue, req);
-                                request_free(req);
-                                processed = true;
                         }
                 }
 
+                /* When at least one request is processed, then another request may be ready now. */
                 if (!processed)
                         break;
         }
 
         return 0;
 }
+
+static int request_netlink_handler(sd_netlink *nl, sd_netlink_message *m, Request *req) {
+        assert(req);
+
+        if (req->counter) {
+                assert(*req->counter > 0);
+                (*req->counter)--;
+                req->counter = NULL; /* To prevent double decrement on free. */
+        }
+
+        if (req->link && IN_SET(req->link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 0;
+
+        if (req->netlink_handler)
+                return req->netlink_handler(nl, m, req, req->link, req->userdata);
+
+        return 0;
+}
+
+int request_call_netlink_async(sd_netlink *nl, sd_netlink_message *m, Request *req) {
+        int r;
+
+        assert(nl);
+        assert(m);
+        assert(req);
+
+        r = netlink_call_async(nl, NULL, m, request_netlink_handler, request_destroy_callback, req);
+        if (r < 0)
+                return r;
+
+        request_ref(req);
+        return 0;
+}
+
+static const char *const request_type_table[_REQUEST_TYPE_MAX] = {
+        [REQUEST_TYPE_ACTIVATE_LINK]                    = "activate link",
+        [REQUEST_TYPE_ADDRESS]                          = "address",
+        [REQUEST_TYPE_ADDRESS_LABEL]                    = "address label",
+        [REQUEST_TYPE_BRIDGE_FDB]                       = "bridge FDB",
+        [REQUEST_TYPE_BRIDGE_MDB]                       = "bridge MDB",
+        [REQUEST_TYPE_DHCP_SERVER]                      = "DHCP server",
+        [REQUEST_TYPE_DHCP4_CLIENT]                     = "DHCPv4 client",
+        [REQUEST_TYPE_DHCP6_CLIENT]                     = "DHCPv6 client",
+        [REQUEST_TYPE_IPV6_PROXY_NDP]                   = "IPv6 proxy NDP",
+        [REQUEST_TYPE_NDISC]                            = "NDisc",
+        [REQUEST_TYPE_NEIGHBOR]                         = "neighbor",
+        [REQUEST_TYPE_NETDEV_INDEPENDENT]               = "independent netdev",
+        [REQUEST_TYPE_NETDEV_STACKED]                   = "stacked netdev",
+        [REQUEST_TYPE_NEXTHOP]                          = "nexthop",
+        [REQUEST_TYPE_RADV]                             = "RADV",
+        [REQUEST_TYPE_ROUTE]                            = "route",
+        [REQUEST_TYPE_ROUTING_POLICY_RULE]              = "routing policy rule",
+        [REQUEST_TYPE_SET_LINK_ADDRESS_GENERATION_MODE] = "IPv6LL address generation mode",
+        [REQUEST_TYPE_SET_LINK_BOND]                    = "bond configurations",
+        [REQUEST_TYPE_SET_LINK_BRIDGE]                  = "bridge configurations",
+        [REQUEST_TYPE_SET_LINK_BRIDGE_VLAN]             = "bridge VLAN configurations",
+        [REQUEST_TYPE_SET_LINK_CAN]                     = "CAN interface configurations",
+        [REQUEST_TYPE_SET_LINK_FLAGS]                   = "link flags",
+        [REQUEST_TYPE_SET_LINK_GROUP]                   = "interface group",
+        [REQUEST_TYPE_SET_LINK_IPOIB]                   = "IPoIB configurations",
+        [REQUEST_TYPE_SET_LINK_MAC]                     = "MAC address",
+        [REQUEST_TYPE_SET_LINK_MASTER]                  = "master interface",
+        [REQUEST_TYPE_SET_LINK_MTU]                     = "MTU",
+        [REQUEST_TYPE_SRIOV]                            = "SR-IOV",
+        [REQUEST_TYPE_TC_QDISC]                         = "QDisc",
+        [REQUEST_TYPE_TC_CLASS]                         = "TClass",
+        [REQUEST_TYPE_UP_DOWN]                          = "bring link up or down",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(request_type, RequestType);
diff --git a/src/network/networkd-queue.h b/src/network/networkd-queue.h
index 1f4b15f..6db0005 100644
--- a/src/network/networkd-queue.h
+++ b/src/network/networkd-queue.h
@@ -2,23 +2,18 @@
 #pragma once
 
 #include "sd-event.h"
+#include "sd-netlink.h"
 
-#include "networkd-link.h"
+#include "alloc-util.h"
+#include "hash-funcs.h"
 
-typedef struct Address Address;
-typedef struct AddressLabel AddressLabel;
-typedef struct BridgeFDB BridgeFDB;
-typedef struct BridgeMDB BridgeMDB;
-typedef struct Neighbor Neighbor;
+typedef struct Link Link;
 typedef struct NetDev NetDev;
-typedef struct NextHop NextHop;
-typedef struct Route Route;
-typedef struct RoutingPolicyRule RoutingPolicyRule;
-
+typedef struct Manager Manager;
 typedef struct Request Request;
 
-typedef int (*request_after_configure_handler_t)(Request*, void*);
-typedef void (*request_on_free_handler_t)(Request*);
+typedef int (*request_process_func_t)(Request *req, Link *link, void *userdata);
+typedef int (*request_netlink_handler_t)(sd_netlink *nl, sd_netlink_message *m, Request *req, Link *link, void *userdata);
 
 typedef enum RequestType {
         REQUEST_TYPE_ACTIVATE_LINK,
@@ -26,53 +21,119 @@
         REQUEST_TYPE_ADDRESS_LABEL,
         REQUEST_TYPE_BRIDGE_FDB,
         REQUEST_TYPE_BRIDGE_MDB,
-        REQUEST_TYPE_CREATE_STACKED_NETDEV,
         REQUEST_TYPE_DHCP_SERVER,
+        REQUEST_TYPE_DHCP4_CLIENT,
+        REQUEST_TYPE_DHCP6_CLIENT,
         REQUEST_TYPE_IPV6_PROXY_NDP,
+        REQUEST_TYPE_NDISC,
         REQUEST_TYPE_NEIGHBOR,
+        REQUEST_TYPE_NETDEV_INDEPENDENT,
+        REQUEST_TYPE_NETDEV_STACKED,
         REQUEST_TYPE_NEXTHOP,
+        REQUEST_TYPE_RADV,
         REQUEST_TYPE_ROUTE,
         REQUEST_TYPE_ROUTING_POLICY_RULE,
-        REQUEST_TYPE_SET_LINK,
+        REQUEST_TYPE_SET_LINK_ADDRESS_GENERATION_MODE, /* Setting IPv6LL address generation mode. */
+        REQUEST_TYPE_SET_LINK_BOND,                    /* Setting bond configs. */
+        REQUEST_TYPE_SET_LINK_BRIDGE,                  /* Setting bridge configs. */
+        REQUEST_TYPE_SET_LINK_BRIDGE_VLAN,             /* Setting bridge VLAN configs. */
+        REQUEST_TYPE_SET_LINK_CAN,                     /* Setting CAN interface configs. */
+        REQUEST_TYPE_SET_LINK_FLAGS,                   /* Setting IFF_NOARP or friends. */
+        REQUEST_TYPE_SET_LINK_GROUP,                   /* Setting interface group. */
+        REQUEST_TYPE_SET_LINK_IPOIB,                   /* Setting IPoIB configs. */
+        REQUEST_TYPE_SET_LINK_MAC,                     /* Setting MAC address. */
+        REQUEST_TYPE_SET_LINK_MASTER,                  /* Setting IFLA_MASTER. */
+        REQUEST_TYPE_SET_LINK_MTU,                     /* Setting MTU. */
+        REQUEST_TYPE_SRIOV,
+        REQUEST_TYPE_TC_CLASS,
+        REQUEST_TYPE_TC_QDISC,
         REQUEST_TYPE_UP_DOWN,
         _REQUEST_TYPE_MAX,
         _REQUEST_TYPE_INVALID = -EINVAL,
 } RequestType;
 
-typedef struct Request {
-        Link *link;
+struct Request {
+        unsigned n_ref;
+
+        Manager *manager; /* must be non-NULL */
+        Link *link; /* can be NULL */
+
         RequestType type;
-        bool consume_object;
-        union {
-                Address *address;
-                AddressLabel *label;
-                BridgeFDB *fdb;
-                BridgeMDB *mdb;
-                struct in6_addr *ipv6_proxy_ndp;
-                Neighbor *neighbor;
-                NextHop *nexthop;
-                Route *route;
-                RoutingPolicyRule *rule;
-                void *set_link_operation_ptr;
-                NetDev *netdev;
-                void *object;
-        };
+
+        /* Target object, e.g. Address, Route, NetDev, and so on. */
         void *userdata;
-        unsigned *message_counter;
-        link_netlink_message_handler_t netlink_handler;
-        request_after_configure_handler_t after_configure;
-        request_on_free_handler_t on_free;
-} Request;
+        /* freeing userdata when the request is completed or failed. */
+        mfree_func_t free_func;
 
-void request_drop(Request *req);
+        /* hash and compare functions for userdata, used for dedup requests. */
+        hash_func_t hash_func;
+        compare_func_t compare_func;
 
-int link_queue_request(
-                Link *link,
-                RequestType type,
-                void *object,
-                bool consume_object,
-                unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
+        /* Checks the request dependencies, and then processes this request, e.g. call address_configure().
+         * Return 1 when processed, 0 when its dependencies not resolved, and negative errno on failure. */
+        request_process_func_t process;
+
+        /* incremented when requested, decremented when request is completed or failed. */
+        unsigned *counter;
+        /* called in netlink handler, the 'counter' is decremented before this is called.
+         * If this is specified, then the 'process' function must increment the reference of this
+         * request, and pass this request to the netlink_call_async(), and set the destroy function
+         * to the slot. */
+        request_netlink_handler_t netlink_handler;
+};
+
+Request *request_ref(Request *req);
+Request *request_unref(Request *req);
+DEFINE_TRIVIAL_CLEANUP_FUNC(Request*, request_unref);
+
+void request_detach(Manager *manager, Request *req);
+
+int netdev_queue_request(
+                NetDev *netdev,
+                request_process_func_t process,
                 Request **ret);
 
+int link_queue_request_full(
+                Link *link,
+                RequestType type,
+                void *userdata,
+                mfree_func_t free_func,
+                hash_func_t hash_func,
+                compare_func_t compare_func,
+                request_process_func_t process,
+                unsigned *counter,
+                request_netlink_handler_t netlink_handler,
+                Request **ret);
+
+static inline int link_queue_request(
+                Link *link,
+                RequestType type,
+                request_process_func_t process,
+                Request **ret) {
+
+        return link_queue_request_full(link, type, NULL, NULL, NULL, NULL,
+                                       process, NULL, NULL, ret);
+}
+
+#define link_queue_request_safe(link, type, userdata, free_func, hash_func, compare_func, process, counter, netlink_handler, ret) \
+        ({                                                              \
+                typeof(userdata) (*_f)(typeof(userdata)) = (free_func); \
+                void (*_h)(const typeof(*userdata)*, struct siphash*) = (hash_func); \
+                int (*_c)(const typeof(*userdata)*, const typeof(*userdata)*) = (compare_func); \
+                int (*_p)(Request*, Link*, typeof(userdata)) = (process); \
+                int (*_n)(sd_netlink*, sd_netlink_message*, Request*, Link*, typeof(userdata)) = (netlink_handler); \
+                                                                        \
+                link_queue_request_full(link, type, userdata,           \
+                                        (mfree_func_t) _f,              \
+                                        (hash_func_t) _h,               \
+                                        (compare_func_t) _c,            \
+                                        (request_process_func_t) _p,    \
+                                        counter,                        \
+                                        (request_netlink_handler_t) _n, \
+                                        ret);                           \
+        })
+
 int manager_process_requests(sd_event_source *s, void *userdata);
+int request_call_netlink_async(sd_netlink *nl, sd_netlink_message *m, Request *req);
+
+const char* request_type_to_string(RequestType t) _const_;
diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c
index 805d3ff..db1ecb4 100644
--- a/src/network/networkd-radv.c
+++ b/src/network/networkd-radv.c
@@ -7,183 +7,33 @@
 #include <arpa/inet.h>
 
 #include "dns-domain.h"
+#include "networkd-address-generation.h"
+#include "networkd-address.h"
+#include "networkd-dhcp-prefix-delegation.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
 #include "networkd-network.h"
+#include "networkd-queue.h"
 #include "networkd-radv.h"
+#include "networkd-route-util.h"
 #include "parse-util.h"
+#include "radv-internal.h"
 #include "string-util.h"
 #include "string-table.h"
 #include "strv.h"
 
-Prefix *prefix_free(Prefix *prefix) {
-        if (!prefix)
-                return NULL;
-
-        if (prefix->network) {
-                assert(prefix->section);
-                hashmap_remove(prefix->network->prefixes_by_section, prefix->section);
-        }
-
-        network_config_section_free(prefix->section);
-        sd_radv_prefix_unref(prefix->radv_prefix);
-
-        return mfree(prefix);
-}
-
-DEFINE_NETWORK_SECTION_FUNCTIONS(Prefix, prefix_free);
-
-static int prefix_new(Prefix **ret) {
-        _cleanup_(prefix_freep) Prefix *prefix = NULL;
-
-        prefix = new0(Prefix, 1);
-        if (!prefix)
-                return -ENOMEM;
-
-        if (sd_radv_prefix_new(&prefix->radv_prefix) < 0)
-                return -ENOMEM;
-
-        *ret = TAKE_PTR(prefix);
-
-        return 0;
-}
-
-static int prefix_new_static(Network *network, const char *filename, unsigned section_line, Prefix **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
-        _cleanup_(prefix_freep) Prefix *prefix = NULL;
-        int r;
-
-        assert(network);
-        assert(ret);
-        assert(filename);
-        assert(section_line > 0);
-
-        r = network_config_section_new(filename, section_line, &n);
-        if (r < 0)
-                return r;
-
-        prefix = hashmap_get(network->prefixes_by_section, n);
-        if (prefix) {
-                *ret = TAKE_PTR(prefix);
-                return 0;
-        }
-
-        r = prefix_new(&prefix);
-        if (r < 0)
-                return r;
-
-        prefix->network = network;
-        prefix->section = TAKE_PTR(n);
-
-        r = hashmap_ensure_put(&network->prefixes_by_section, &network_config_hash_ops, prefix->section, prefix);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(prefix);
-
-        return 0;
-}
-
-RoutePrefix *route_prefix_free(RoutePrefix *prefix) {
-        if (!prefix)
-                return NULL;
-
-        if (prefix->network) {
-                assert(prefix->section);
-                hashmap_remove(prefix->network->route_prefixes_by_section, prefix->section);
-        }
-
-        network_config_section_free(prefix->section);
-        sd_radv_route_prefix_unref(prefix->radv_route_prefix);
-
-        return mfree(prefix);
-}
-
-DEFINE_NETWORK_SECTION_FUNCTIONS(RoutePrefix, route_prefix_free);
-
-static int route_prefix_new(RoutePrefix **ret) {
-        _cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL;
-
-        prefix = new0(RoutePrefix, 1);
-        if (!prefix)
-                return -ENOMEM;
-
-        if (sd_radv_route_prefix_new(&prefix->radv_route_prefix) < 0)
-                return -ENOMEM;
-
-        *ret = TAKE_PTR(prefix);
-
-        return 0;
-}
-
-static int route_prefix_new_static(Network *network, const char *filename, unsigned section_line, RoutePrefix **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
-        _cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL;
-        int r;
-
-        assert(network);
-        assert(ret);
-        assert(filename);
-        assert(section_line > 0);
-
-        r = network_config_section_new(filename, section_line, &n);
-        if (r < 0)
-                return r;
-
-        prefix = hashmap_get(network->route_prefixes_by_section, n);
-        if (prefix) {
-                *ret = TAKE_PTR(prefix);
-                return 0;
-        }
-
-        r = route_prefix_new(&prefix);
-        if (r < 0)
-                return r;
-
-        prefix->network = network;
-        prefix->section = TAKE_PTR(n);
-
-        r = hashmap_ensure_put(&network->route_prefixes_by_section, &network_config_hash_ops, prefix->section, prefix);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(prefix);
-
-        return 0;
-}
-
-void network_drop_invalid_prefixes(Network *network) {
-        Prefix *prefix;
-
-        assert(network);
-
-        HASHMAP_FOREACH(prefix, network->prefixes_by_section)
-                if (section_is_invalid(prefix->section))
-                        prefix_free(prefix);
-}
-
-void network_drop_invalid_route_prefixes(Network *network) {
-        RoutePrefix *prefix;
-
-        assert(network);
-
-        HASHMAP_FOREACH(prefix, network->route_prefixes_by_section)
-                if (section_is_invalid(prefix->section))
-                        route_prefix_free(prefix);
-}
-
 void network_adjust_radv(Network *network) {
         assert(network);
 
         /* After this function is called, network->router_prefix_delegation can be treated as a boolean. */
 
-        if (network->dhcp6_pd < 0)
+        if (network->dhcp_pd < 0)
                 /* For backward compatibility. */
-                network->dhcp6_pd = FLAGS_SET(network->router_prefix_delegation, RADV_PREFIX_DELEGATION_DHCP6);
+                network->dhcp_pd = FLAGS_SET(network->router_prefix_delegation, RADV_PREFIX_DELEGATION_DHCP6);
 
         if (!FLAGS_SET(network->link_local, ADDRESS_FAMILY_IPV6)) {
                 if (network->router_prefix_delegation != RADV_PREFIX_DELEGATION_NONE)
-                        log_warning("%s: IPv6PrefixDelegation= is enabled but IPv6 link local addressing is disabled. "
+                        log_warning("%s: IPv6PrefixDelegation= is enabled but IPv6 link-local addressing is disabled. "
                                     "Disabling IPv6PrefixDelegation=.", network->filename);
 
                 network->router_prefix_delegation = RADV_PREFIX_DELEGATION_NONE;
@@ -201,316 +51,247 @@
         }
 }
 
-int config_parse_prefix(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
+bool link_radv_enabled(Link *link) {
+        assert(link);
 
-        Network *network = userdata;
-        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
-        uint8_t prefixlen = 64;
-        union in_addr_union in6addr;
+        if (!link_may_have_ipv6ll(link, /* check_multicast = */ true))
+                return false;
+
+        if (link->hw_addr.length != ETH_ALEN)
+                return false;
+
+        return link->network->router_prefix_delegation;
+}
+
+Prefix *prefix_free(Prefix *prefix) {
+        if (!prefix)
+                return NULL;
+
+        if (prefix->network) {
+                assert(prefix->section);
+                hashmap_remove(prefix->network->prefixes_by_section, prefix->section);
+        }
+
+        config_section_free(prefix->section);
+        set_free(prefix->tokens);
+
+        return mfree(prefix);
+}
+
+DEFINE_SECTION_CLEANUP_FUNCTIONS(Prefix, prefix_free);
+
+static int prefix_new_static(Network *network, const char *filename, unsigned section_line, Prefix **ret) {
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
+        _cleanup_(prefix_freep) Prefix *prefix = NULL;
         int r;
 
+        assert(network);
+        assert(ret);
         assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
+        assert(section_line > 0);
 
-        r = prefix_new_static(network, filename, section_line, &p);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
-                return log_oom();
+                return r;
 
-        r = in_addr_prefix_from_string(rvalue, AF_INET6, &in6addr, &prefixlen);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Prefix is invalid, ignoring assignment: %s", rvalue);
+        prefix = hashmap_get(network->prefixes_by_section, n);
+        if (prefix) {
+                *ret = TAKE_PTR(prefix);
                 return 0;
         }
 
-        r = sd_radv_prefix_set_prefix(p->radv_prefix, &in6addr.in6, prefixlen);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to set radv prefix, ignoring assignment: %s", rvalue);
+        prefix = new(Prefix, 1);
+        if (!prefix)
+                return -ENOMEM;
+
+        *prefix = (Prefix) {
+                .network = network,
+                .section = TAKE_PTR(n),
+
+                .preferred_lifetime = RADV_DEFAULT_PREFERRED_LIFETIME_USEC,
+                .valid_lifetime = RADV_DEFAULT_VALID_LIFETIME_USEC,
+                .onlink = true,
+                .address_auto_configuration = true,
+        };
+
+        r = hashmap_ensure_put(&network->prefixes_by_section, &config_section_hash_ops, prefix->section, prefix);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(prefix);
+        return 0;
+}
+
+RoutePrefix *route_prefix_free(RoutePrefix *prefix) {
+        if (!prefix)
+                return NULL;
+
+        if (prefix->network) {
+                assert(prefix->section);
+                hashmap_remove(prefix->network->route_prefixes_by_section, prefix->section);
+        }
+
+        config_section_free(prefix->section);
+
+        return mfree(prefix);
+}
+
+DEFINE_SECTION_CLEANUP_FUNCTIONS(RoutePrefix, route_prefix_free);
+
+static int route_prefix_new_static(Network *network, const char *filename, unsigned section_line, RoutePrefix **ret) {
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
+        _cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL;
+        int r;
+
+        assert(network);
+        assert(ret);
+        assert(filename);
+        assert(section_line > 0);
+
+        r = config_section_new(filename, section_line, &n);
+        if (r < 0)
+                return r;
+
+        prefix = hashmap_get(network->route_prefixes_by_section, n);
+        if (prefix) {
+                *ret = TAKE_PTR(prefix);
                 return 0;
         }
 
-        p = NULL;
+        prefix = new(RoutePrefix, 1);
+        if (!prefix)
+                return -ENOMEM;
+
+        *prefix = (RoutePrefix) {
+                .network = network,
+                .section = TAKE_PTR(n),
+
+                .lifetime = RADV_DEFAULT_VALID_LIFETIME_USEC,
+        };
+
+        r = hashmap_ensure_put(&network->route_prefixes_by_section, &config_section_hash_ops, prefix->section, prefix);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(prefix);
+        return 0;
+}
+
+int link_request_radv_addresses(Link *link) {
+        Prefix *p;
+        int r;
+
+        assert(link);
+
+        if (!link_radv_enabled(link))
+                return 0;
+
+        HASHMAP_FOREACH(p, link->network->prefixes_by_section) {
+                _cleanup_set_free_ Set *addresses = NULL;
+                struct in6_addr *a;
+
+                if (!p->assign)
+                        continue;
+
+                /* radv_generate_addresses() below requires the prefix length <= 64. */
+                if (p->prefixlen > 64)
+                        continue;
+
+                r = radv_generate_addresses(link, p->tokens, &p->prefix, p->prefixlen, &addresses);
+                if (r < 0)
+                        return r;
+
+                SET_FOREACH(a, addresses) {
+                        _cleanup_(address_freep) Address *address = NULL;
+
+                        r = address_new(&address);
+                        if (r < 0)
+                                return -ENOMEM;
+
+                        address->source = NETWORK_CONFIG_SOURCE_STATIC;
+                        address->family = AF_INET6;
+                        address->in_addr.in6 = *a;
+                        address->prefixlen = p->prefixlen;
+                        address->route_metric = p->route_metric;
+
+                        r = link_request_static_address(link, TAKE_PTR(address), true);
+                        if (r < 0)
+                                return r;
+                }
+        }
 
         return 0;
 }
 
-int config_parse_prefix_flags(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
+static uint32_t usec_to_lifetime(usec_t usec) {
+        uint64_t t;
 
-        Network *network = userdata;
-        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
-        int r;
+        if (usec == USEC_INFINITY)
+                return UINT32_MAX;
 
-        assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
+        t = DIV_ROUND_UP(usec, USEC_PER_SEC);
+        if (t >= UINT32_MAX)
+                return UINT32_MAX;
 
-        r = prefix_new_static(network, filename, section_line, &p);
-        if (r < 0)
-                return log_oom();
-
-        r = parse_boolean(rvalue);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
-                return 0;
-        }
-
-        if (streq(lvalue, "OnLink"))
-                r = sd_radv_prefix_set_onlink(p->radv_prefix, r);
-        else if (streq(lvalue, "AddressAutoconfiguration"))
-                r = sd_radv_prefix_set_address_autoconfiguration(p->radv_prefix, r);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to set %s=, ignoring assignment: %m", lvalue);
-                return 0;
-        }
-
-        p = NULL;
-
-        return 0;
+        return (uint32_t) t;
 }
 
-int config_parse_prefix_lifetime(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Network *network = userdata;
-        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
-        usec_t usec;
+static int radv_set_prefix(Link *link, Prefix *prefix) {
+        _cleanup_(sd_radv_prefix_unrefp) sd_radv_prefix *p = NULL;
         int r;
 
-        assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
+        assert(link);
+        assert(link->radv);
+        assert(prefix);
 
-        r = prefix_new_static(network, filename, section_line, &p);
+        r = sd_radv_prefix_new(&p);
         if (r < 0)
-                return log_oom();
+                return r;
 
-        r = parse_sec(rvalue, &usec);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Lifetime is invalid, ignoring assignment: %s", rvalue);
-                return 0;
-        }
+        r = sd_radv_prefix_set_prefix(p, &prefix->prefix, prefix->prefixlen);
+        if (r < 0)
+                return r;
 
-        /* a value of 0xffffffff represents infinity */
-        if (streq(lvalue, "PreferredLifetimeSec"))
-                r = sd_radv_prefix_set_preferred_lifetime(p->radv_prefix,
-                                                          DIV_ROUND_UP(usec, USEC_PER_SEC));
-        else if (streq(lvalue, "ValidLifetimeSec"))
-                r = sd_radv_prefix_set_valid_lifetime(p->radv_prefix,
-                                                      DIV_ROUND_UP(usec, USEC_PER_SEC));
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to set %s=, ignoring assignment: %m", lvalue);
-                return 0;
-        }
+        r = sd_radv_prefix_set_preferred_lifetime(p, prefix->preferred_lifetime, USEC_INFINITY);
+        if (r < 0)
+                return r;
 
-        p = NULL;
+        r = sd_radv_prefix_set_valid_lifetime(p, prefix->valid_lifetime, USEC_INFINITY);
+        if (r < 0)
+                return r;
 
-        return 0;
+        r = sd_radv_prefix_set_onlink(p, prefix->onlink);
+        if (r < 0)
+                return r;
+
+        r = sd_radv_prefix_set_address_autoconfiguration(p, prefix->address_auto_configuration);
+        if (r < 0)
+                return r;
+
+        return sd_radv_add_prefix(link->radv, p);
 }
 
-int config_parse_prefix_assign(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Network *network = userdata;
-        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
+static int radv_set_route_prefix(Link *link, RoutePrefix *prefix) {
+        _cleanup_(sd_radv_route_prefix_unrefp) sd_radv_route_prefix *p = NULL;
         int r;
 
-        assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
+        assert(link);
+        assert(link->radv);
+        assert(prefix);
 
-        r = prefix_new_static(network, filename, section_line, &p);
+        r = sd_radv_route_prefix_new(&p);
         if (r < 0)
-                return log_oom();
+                return r;
 
-        r = parse_boolean(rvalue);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to parse %s=, ignoring assignment: %s",
-                           lvalue, rvalue);
-                return 0;
-        }
-
-        p->assign = r;
-        p = NULL;
-
-        return 0;
-}
-
-int config_parse_prefix_metric(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Network *network = userdata;
-        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
-        int r;
-
-        assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = prefix_new_static(network, filename, section_line, &p);
+        r = sd_radv_route_prefix_set_prefix(p, &prefix->prefix, prefix->prefixlen);
         if (r < 0)
-                return log_oom();
+                return r;
 
-        r = safe_atou32(rvalue, &p->route_metric);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to parse %s=, ignoring assignment: %s",
-                           lvalue, rvalue);
-                return 0;
-        }
-
-        TAKE_PTR(p);
-
-        return 0;
-}
-
-int config_parse_route_prefix(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Network *network = userdata;
-        _cleanup_(route_prefix_free_or_set_invalidp) RoutePrefix *p = NULL;
-        uint8_t prefixlen = 64;
-        union in_addr_union in6addr;
-        int r;
-
-        assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = route_prefix_new_static(network, filename, section_line, &p);
+        r = sd_radv_route_prefix_set_lifetime(p, prefix->lifetime, USEC_INFINITY);
         if (r < 0)
-                return log_oom();
+                return r;
 
-        r = in_addr_prefix_from_string(rvalue, AF_INET6, &in6addr, &prefixlen);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Route prefix is invalid, ignoring assignment: %s", rvalue);
-                return 0;
-        }
-
-        r = sd_radv_prefix_set_route_prefix(p->radv_route_prefix, &in6addr.in6, prefixlen);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to set route prefix, ignoring assignment: %m");
-                return 0;
-        }
-
-        p = NULL;
-
-        return 0;
-}
-
-int config_parse_route_prefix_lifetime(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Network *network = userdata;
-        _cleanup_(route_prefix_free_or_set_invalidp) RoutePrefix *p = NULL;
-        usec_t usec;
-        int r;
-
-        assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = route_prefix_new_static(network, filename, section_line, &p);
-        if (r < 0)
-                return log_oom();
-
-        r = parse_sec(rvalue, &usec);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Route lifetime is invalid, ignoring assignment: %s", rvalue);
-                return 0;
-        }
-
-        /* a value of 0xffffffff represents infinity */
-        r = sd_radv_route_prefix_set_lifetime(p->radv_route_prefix, DIV_ROUND_UP(usec, USEC_PER_SEC));
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to set route lifetime, ignoring assignment: %m");
-                return 0;
-        }
-
-        p = NULL;
-
-        return 0;
+        return sd_radv_add_route_prefix(link->radv, p);
 }
 
 static int network_get_ipv6_dns(Network *network, struct in6_addr **ret_addresses, size_t *ret_size) {
@@ -548,7 +329,6 @@
 
 static int radv_set_dns(Link *link, Link *uplink) {
         _cleanup_free_ struct in6_addr *dns = NULL;
-        usec_t lifetime_usec;
         size_t n_dns;
         int r;
 
@@ -571,22 +351,16 @@
                                 *(p++) = link->network->router_dns[i];
 
                 n_dns = p - dns;
-                lifetime_usec = link->network->router_dns_lifetime_usec;
 
                 goto set_dns;
         }
 
-        lifetime_usec = SD_RADV_DEFAULT_DNS_LIFETIME_USEC;
-
         r = network_get_ipv6_dns(link->network, &dns, &n_dns);
         if (r > 0)
                 goto set_dns;
 
         if (uplink) {
-                if (!uplink->network) {
-                        log_link_debug(uplink, "Cannot fetch DNS servers as uplink interface is not managed by us");
-                        return 0;
-                }
+                assert(uplink->network);
 
                 r = network_get_ipv6_dns(uplink->network, &dns, &n_dns);
                 if (r > 0)
@@ -595,37 +369,30 @@
 
         return 0;
 
- set_dns:
+set_dns:
         return sd_radv_set_rdnss(link->radv,
-                                 DIV_ROUND_UP(lifetime_usec, USEC_PER_SEC),
+                                 usec_to_lifetime(link->network->router_dns_lifetime_usec),
                                  dns, n_dns);
 }
 
 static int radv_set_domains(Link *link, Link *uplink) {
-        OrderedSet *search_domains;
-        usec_t lifetime_usec;
         _cleanup_free_ char **s = NULL; /* just free() because the strings are owned by the set */
+        OrderedSet *search_domains;
 
         if (!link->network->router_emit_domains)
                 return 0;
 
         search_domains = link->network->router_search_domains;
-        lifetime_usec = link->network->router_dns_lifetime_usec;
 
         if (search_domains)
                 goto set_domains;
 
-        lifetime_usec = SD_RADV_DEFAULT_DNS_LIFETIME_USEC;
-
         search_domains = link->network->search_domains;
         if (search_domains)
                 goto set_domains;
 
         if (uplink) {
-                if (!uplink->network) {
-                        log_link_debug(uplink, "Cannot fetch DNS search domains as uplink interface is not managed by us");
-                        return 0;
-                }
+                assert(uplink->network);
 
                 search_domains = uplink->network->search_domains;
                 if (search_domains)
@@ -634,45 +401,45 @@
 
         return 0;
 
- set_domains:
+set_domains:
         s = ordered_set_get_strv(search_domains);
         if (!s)
                 return log_oom();
 
         return sd_radv_set_dnssl(link->radv,
-                                 DIV_ROUND_UP(lifetime_usec, USEC_PER_SEC),
+                                 usec_to_lifetime(link->network->router_dns_lifetime_usec),
                                  s);
 
 }
 
-int radv_emit_dns(Link *link) {
-        Link *uplink = NULL;
+static int radv_find_uplink(Link *link, Link **ret) {
         int r;
 
-        (void) manager_find_uplink(link->manager, AF_INET6, link, &uplink);
+        assert(link);
 
-        r = radv_set_dns(link, uplink);
-        if (r < 0)
-                log_link_warning_errno(link, r, "Could not set RA DNS: %m");
+        if (link->network->router_uplink_name)
+                return link_get_by_name(link->manager, link->network->router_uplink_name, ret);
 
-        r = radv_set_domains(link, uplink);
-        if (r < 0)
-                log_link_warning_errno(link, r, "Could not set RA Domains: %m");
+        if (link->network->router_uplink_index > 0)
+                return link_get_by_index(link->manager, link->network->router_uplink_index, ret);
 
+        if (link->network->router_uplink_index == UPLINK_INDEX_AUTO) {
+                if (link_dhcp_pd_is_enabled(link))
+                        r = dhcp_pd_find_uplink(link, ret); /* When DHCP-PD is enabled, use its uplink. */
+                else
+                        r = manager_find_uplink(link->manager, AF_INET6, link, ret);
+                if (r < 0)
+                        /* It is not necessary to propagate error in automatic selection. */
+                        *ret = NULL;
+                return 0;
+        }
+
+        *ret = NULL;
         return 0;
 }
 
-static bool link_radv_enabled(Link *link) {
-        assert(link);
-
-        if (!link_ipv6ll_enabled(link))
-                return false;
-
-        return link->network->router_prefix_delegation;
-}
-
-int radv_configure(Link *link) {
-        uint16_t router_lifetime;
+static int radv_configure(Link *link) {
+        Link *uplink = NULL;
         RoutePrefix *q;
         Prefix *p;
         int r;
@@ -680,9 +447,6 @@
         assert(link);
         assert(link->network);
 
-        if (!link_radv_enabled(link))
-                return 0;
-
         if (link->radv)
                 return -EBUSY;
 
@@ -694,9 +458,11 @@
         if (r < 0)
                 return r;
 
-        r = sd_radv_set_mac(link->radv, &link->hw_addr.ether);
-        if (r < 0)
-                return r;
+        if (link->hw_addr.length == ETH_ALEN) {
+                r = sd_radv_set_mac(link->radv, &link->hw_addr.ether);
+                if (r < 0)
+                        return r;
+        }
 
         r = sd_radv_set_ifindex(link->radv, link->ifindex);
         if (r < 0)
@@ -710,44 +476,38 @@
         if (r < 0)
                 return r;
 
-        /* a value of UINT16_MAX represents infinity, 0x0 means this host is not a router */
-        if (link->network->router_lifetime_usec == USEC_INFINITY)
-                router_lifetime = UINT16_MAX;
-        else if (link->network->router_lifetime_usec > (UINT16_MAX - 1) * USEC_PER_SEC)
-                router_lifetime = UINT16_MAX - 1;
-        else
-                router_lifetime = DIV_ROUND_UP(link->network->router_lifetime_usec, USEC_PER_SEC);
-
-        r = sd_radv_set_router_lifetime(link->radv, router_lifetime);
+        r = sd_radv_set_router_lifetime(link->radv, link->network->router_lifetime_usec);
         if (r < 0)
                 return r;
 
-        if (router_lifetime > 0) {
+        if (link->network->router_lifetime_usec > 0) {
                 r = sd_radv_set_preference(link->radv, link->network->router_preference);
                 if (r < 0)
                         return r;
         }
 
         HASHMAP_FOREACH(p, link->network->prefixes_by_section) {
-                r = sd_radv_add_prefix(link->radv, p->radv_prefix, false);
-                if (r == -EEXIST)
-                        continue;
-                if (r == -ENOEXEC) {
-                        log_link_warning_errno(link, r, "[IPv6Prefix] section configured without Prefix= setting, ignoring section.");
-                        continue;
-                }
-                if (r < 0)
+                r = radv_set_prefix(link, p);
+                if (r < 0 && r != -EEXIST)
                         return r;
         }
 
         HASHMAP_FOREACH(q, link->network->route_prefixes_by_section) {
-                r = sd_radv_add_route_prefix(link->radv, q->radv_route_prefix, false);
-                if (r == -EEXIST)
-                        continue;
-                if (r < 0)
+                r = radv_set_route_prefix(link, q);
+                if (r < 0 && r != -EEXIST)
                         return r;
         }
 
+        (void) radv_find_uplink(link, &uplink);
+
+        r = radv_set_dns(link, uplink);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Could not set RA DNS: %m");
+
+        r = radv_set_domains(link, uplink);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Could not set RA Domains: %m");
+
         return 0;
 }
 
@@ -760,6 +520,9 @@
         if (!link->radv)
                 return 0;
 
+        if (link->hw_addr.length != ETH_ALEN)
+                return 0;
+
         restart = sd_radv_is_running(link->radv);
 
         r = sd_radv_stop(link->radv);
@@ -779,12 +542,128 @@
         return 0;
 }
 
+static int radv_is_ready_to_configure(Link *link) {
+        bool needs_uplink = false;
+        int r;
+
+        assert(link);
+        assert(link->network);
+
+        if (!link_is_ready_to_configure(link, /* allow_unmanaged = */ false))
+                return false;
+
+        if (in6_addr_is_null(&link->ipv6ll_address))
+                return false;
+
+        if (link->hw_addr.length != ETH_ALEN || hw_addr_is_null(&link->hw_addr))
+                return false;
+
+        if (link->network->router_emit_dns && !link->network->router_dns) {
+                _cleanup_free_ struct in6_addr *dns = NULL;
+                size_t n_dns;
+
+                r = network_get_ipv6_dns(link->network, &dns, &n_dns);
+                if (r < 0)
+                        return r;
+
+                needs_uplink = r == 0;
+        }
+
+        if (link->network->router_emit_domains &&
+            !link->network->router_search_domains &&
+            !link->network->search_domains)
+                needs_uplink = true;
+
+        if (needs_uplink) {
+                Link *uplink = NULL;
+
+                if (radv_find_uplink(link, &uplink) < 0)
+                        return false;
+
+                if (uplink && !uplink->network)
+                        return false;
+        }
+
+        return true;
+}
+
+static int radv_process_request(Request *req, Link *link, void *userdata) {
+        int r;
+
+        assert(link);
+
+        r = radv_is_ready_to_configure(link);
+        if (r <= 0)
+                return r;
+
+        r = radv_configure(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure IPv6 Router Advertisement engine: %m");
+
+        if (link_has_carrier(link)) {
+                r = radv_start(link);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to start IPv6 Router Advertisement engine: %m");
+        }
+
+        log_link_debug(link, "IPv6 Router Advertisement engine is configured%s.",
+                       link_has_carrier(link) ? " and started" : "");
+        return 1;
+}
+
+int link_request_radv(Link *link) {
+        int r;
+
+        assert(link);
+
+        if (!link_radv_enabled(link))
+                return 0;
+
+        if (link->radv)
+                return 0;
+
+        r = link_queue_request(link, REQUEST_TYPE_RADV, radv_process_request, NULL);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to request configuring of the IPv6 Router Advertisement engine: %m");
+
+        log_link_debug(link, "Requested configuring of the IPv6 Router Advertisement engine.");
+        return 0;
+}
+
+int radv_start(Link *link) {
+        int r;
+
+        assert(link);
+        assert(link->network);
+
+        if (!link->radv)
+                return 0;
+
+        if (!link_has_carrier(link))
+                return 0;
+
+        if (in6_addr_is_null(&link->ipv6ll_address))
+                return 0;
+
+        if (sd_radv_is_running(link->radv))
+                return 0;
+
+        if (link->network->dhcp_pd_announce) {
+                r = dhcp_request_prefix_delegation(link);
+                if (r < 0)
+                        return log_link_debug_errno(link, r, "Failed to request DHCP delegated subnet prefix: %m");
+        }
+
+        log_link_debug(link, "Starting IPv6 Router Advertisements");
+        return sd_radv_start(link->radv);
+}
+
 int radv_add_prefix(
                 Link *link,
                 const struct in6_addr *prefix,
                 uint8_t prefix_len,
-                uint32_t lifetime_preferred,
-                uint32_t lifetime_valid) {
+                usec_t lifetime_preferred_usec,
+                usec_t lifetime_valid_usec) {
 
         _cleanup_(sd_radv_prefix_unrefp) sd_radv_prefix *p = NULL;
         int r;
@@ -802,21 +681,398 @@
         if (r < 0)
                 return r;
 
-        r = sd_radv_prefix_set_preferred_lifetime(p, lifetime_preferred);
+        r = sd_radv_prefix_set_preferred_lifetime(p, RADV_DEFAULT_PREFERRED_LIFETIME_USEC, lifetime_preferred_usec);
         if (r < 0)
                 return r;
 
-        r = sd_radv_prefix_set_valid_lifetime(p, lifetime_valid);
+        r = sd_radv_prefix_set_valid_lifetime(p, RADV_DEFAULT_VALID_LIFETIME_USEC, lifetime_valid_usec);
         if (r < 0)
                 return r;
 
-        r = sd_radv_add_prefix(link->radv, p, true);
+        r = sd_radv_add_prefix(link->radv, p);
         if (r < 0 && r != -EEXIST)
                 return r;
 
         return 0;
 }
 
+static int prefix_section_verify(Prefix *p) {
+        assert(p);
+
+        if (section_is_invalid(p->section))
+                return -EINVAL;
+
+        if (in6_addr_is_null(&p->prefix))
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: [IPv6Prefix] section without Prefix= field configured, "
+                                         "or specified prefix is the null address. "
+                                         "Ignoring [IPv6Prefix] section from line %u.",
+                                         p->section->filename, p->section->line);
+
+        if (p->prefixlen < 3 || p->prefixlen > 128)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: Invalid prefix length %u is specified in [IPv6Prefix] section. "
+                                         "Valid range is 3…128. Ignoring [IPv6Prefix] section from line %u.",
+                                         p->section->filename, p->prefixlen, p->section->line);
+
+        if (p->prefixlen > 64) {
+                log_info("%s:%u: Unusual prefix length %u (> 64) is specified in [IPv6Prefix] section from line %s%s.",
+                         p->section->filename, p->section->line,
+                         p->prefixlen,
+                         p->assign ? ", refusing to assign an address in " : "",
+                         p->assign ? IN6_ADDR_PREFIX_TO_STRING(&p->prefix, p->prefixlen) : "");
+
+                p->assign = false;
+        }
+
+        if (p->valid_lifetime == 0)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: The valid lifetime of prefix cannot be zero. "
+                                         "Ignoring [IPv6Prefix] section from line %u.",
+                                         p->section->filename, p->section->line);
+
+        if (p->preferred_lifetime > p->valid_lifetime)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: The preferred lifetime %s is longer than the valid lifetime %s. "
+                                         "Ignoring [IPv6Prefix] section from line %u.",
+                                         p->section->filename,
+                                         FORMAT_TIMESPAN(p->preferred_lifetime, USEC_PER_SEC),
+                                         FORMAT_TIMESPAN(p->valid_lifetime, USEC_PER_SEC),
+                                         p->section->line);
+
+        return 0;
+}
+
+void network_drop_invalid_prefixes(Network *network) {
+        Prefix *p;
+
+        assert(network);
+
+        HASHMAP_FOREACH(p, network->prefixes_by_section)
+                if (prefix_section_verify(p) < 0)
+                        prefix_free(p);
+}
+
+static int route_prefix_section_verify(RoutePrefix *p) {
+        if (section_is_invalid(p->section))
+                return -EINVAL;
+
+        if (p->prefixlen > 128)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: Invalid prefix length %u is specified in [IPv6RoutePrefix] section. "
+                                         "Valid range is 0…128. Ignoring [IPv6RoutePrefix] section from line %u.",
+                                         p->section->filename, p->prefixlen, p->section->line);
+
+        if (p->lifetime == 0)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: The lifetime of route cannot be zero. "
+                                         "Ignoring [IPv6RoutePrefix] section from line %u.",
+                                         p->section->filename, p->section->line);
+
+        return 0;
+}
+
+void network_drop_invalid_route_prefixes(Network *network) {
+        RoutePrefix *p;
+
+        assert(network);
+
+        HASHMAP_FOREACH(p, network->route_prefixes_by_section)
+                if (route_prefix_section_verify(p) < 0)
+                        route_prefix_free(p);
+}
+
+int config_parse_prefix(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
+        Network *network = ASSERT_PTR(userdata);
+        union in_addr_union a;
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = prefix_new_static(network, filename, section_line, &p);
+        if (r < 0)
+                return log_oom();
+
+        r = in_addr_prefix_from_string(rvalue, AF_INET6, &a, &p->prefixlen);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Prefix is invalid, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        (void) in6_addr_mask(&a.in6, p->prefixlen);
+        p->prefix = a.in6;
+
+        TAKE_PTR(p);
+        return 0;
+}
+
+int config_parse_prefix_boolean(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
+        Network *network = ASSERT_PTR(userdata);
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = prefix_new_static(network, filename, section_line, &p);
+        if (r < 0)
+                return log_oom();
+
+        r = parse_boolean(rvalue);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        if (streq(lvalue, "OnLink"))
+                p->onlink = r;
+        else if (streq(lvalue, "AddressAutoconfiguration"))
+                p->address_auto_configuration = r;
+        else if (streq(lvalue, "Assign"))
+                p->assign = r;
+        else
+                assert_not_reached();
+
+        TAKE_PTR(p);
+        return 0;
+}
+
+int config_parse_prefix_lifetime(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
+        Network *network = ASSERT_PTR(userdata);
+        usec_t usec;
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = prefix_new_static(network, filename, section_line, &p);
+        if (r < 0)
+                return log_oom();
+
+        r = parse_sec(rvalue, &usec);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Lifetime is invalid, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (usec != USEC_INFINITY && DIV_ROUND_UP(usec, USEC_PER_SEC) >= UINT32_MAX) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Lifetime is too long, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (streq(lvalue, "PreferredLifetimeSec"))
+                p->preferred_lifetime = usec;
+        else if (streq(lvalue, "ValidLifetimeSec"))
+                p->valid_lifetime = usec;
+        else
+                assert_not_reached();
+
+        TAKE_PTR(p);
+        return 0;
+}
+
+int config_parse_prefix_metric(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
+        Network *network = ASSERT_PTR(userdata);
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = prefix_new_static(network, filename, section_line, &p);
+        if (r < 0)
+                return log_oom();
+
+        r = safe_atou32(rvalue, &p->route_metric);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        TAKE_PTR(p);
+        return 0;
+}
+
+int config_parse_prefix_token(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL;
+        Network *network = ASSERT_PTR(userdata);
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = prefix_new_static(network, filename, section_line, &p);
+        if (r < 0)
+                return log_oom();
+
+        r = config_parse_address_generation_type(unit, filename, line, section, section_line,
+                                                 lvalue, ltype, rvalue, &p->tokens, userdata);
+        if (r < 0)
+                return r;
+
+        TAKE_PTR(p);
+        return 0;
+}
+
+int config_parse_route_prefix(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(route_prefix_free_or_set_invalidp) RoutePrefix *p = NULL;
+        Network *network = ASSERT_PTR(userdata);
+        union in_addr_union a;
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = route_prefix_new_static(network, filename, section_line, &p);
+        if (r < 0)
+                return log_oom();
+
+        r = in_addr_prefix_from_string(rvalue, AF_INET6, &a, &p->prefixlen);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Route prefix is invalid, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        (void) in6_addr_mask(&a.in6, p->prefixlen);
+        p->prefix = a.in6;
+
+        TAKE_PTR(p);
+        return 0;
+}
+
+int config_parse_route_prefix_lifetime(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(route_prefix_free_or_set_invalidp) RoutePrefix *p = NULL;
+        Network *network = ASSERT_PTR(userdata);
+        usec_t usec;
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = route_prefix_new_static(network, filename, section_line, &p);
+        if (r < 0)
+                return log_oom();
+
+        r = parse_sec(rvalue, &usec);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Route lifetime is invalid, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        if (usec != USEC_INFINITY && DIV_ROUND_UP(usec, USEC_PER_SEC) >= UINT32_MAX) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Lifetime is too long, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        p->lifetime = usec;
+
+        TAKE_PTR(p);
+        return 0;
+}
+
 int config_parse_radv_dns(
                 const char *unit,
                 const char *filename,
@@ -965,13 +1221,12 @@
                 void *data,
                 void *userdata) {
 
-        RADVPrefixDelegation val, *ra = data;
+        RADVPrefixDelegation val, *ra = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (streq(lvalue, "IPv6SendRA")) {
                 r = parse_boolean(rvalue);
@@ -999,6 +1254,57 @@
         return 0;
 }
 
+int config_parse_router_lifetime(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        usec_t usec, *lifetime = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *lifetime = RADV_DEFAULT_ROUTER_LIFETIME_USEC;
+                return 0;
+        }
+
+        r = parse_sec(rvalue, &usec);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse router lifetime, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+        if (usec > 0) {
+                if (usec < RADV_MIN_ROUTER_LIFETIME_USEC) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Router lifetime %s is too short, using %s.",
+                                   FORMAT_TIMESPAN(usec, USEC_PER_SEC),
+                                   FORMAT_TIMESPAN(RADV_MIN_ROUTER_LIFETIME_USEC, USEC_PER_SEC));
+                        usec = RADV_MIN_ROUTER_LIFETIME_USEC;
+                } else if (usec > RADV_MAX_ROUTER_LIFETIME_USEC) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Router lifetime %s is too large, using %s.",
+                                   FORMAT_TIMESPAN(usec, USEC_PER_SEC),
+                                   FORMAT_TIMESPAN(RADV_MAX_ROUTER_LIFETIME_USEC, USEC_PER_SEC));
+                        usec = RADV_MAX_ROUTER_LIFETIME_USEC;
+                }
+        }
+
+        *lifetime = usec;
+        return 0;
+}
+
 int config_parse_router_preference(
                 const char *unit,
                 const char *filename,
diff --git a/src/network/networkd-radv.h b/src/network/networkd-radv.h
index f6efd32..ebebb39 100644
--- a/src/network/networkd-radv.h
+++ b/src/network/networkd-radv.h
@@ -14,8 +14,8 @@
 #include "conf-parser.h"
 #include "networkd-util.h"
 
-typedef struct Network Network;
 typedef struct Link Link;
+typedef struct Network Network;
 
 typedef enum RADVPrefixDelegation {
         RADV_PREFIX_DELEGATION_NONE   = 0,
@@ -28,19 +28,28 @@
 
 typedef struct Prefix {
         Network *network;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
-        sd_radv_prefix *radv_prefix;
+        struct in6_addr prefix;
+        uint8_t prefixlen;
+        usec_t preferred_lifetime;
+        usec_t valid_lifetime;
+
+        bool onlink;
+        bool address_auto_configuration;
 
         bool assign;
         uint32_t route_metric;
+        Set *tokens;
 } Prefix;
 
 typedef struct RoutePrefix {
         Network *network;
-        NetworkConfigSection *section;
+        ConfigSection *section;
 
-        sd_radv_route_prefix *radv_route_prefix;
+        struct in6_addr prefix;
+        uint8_t prefixlen;
+        usec_t lifetime;
 } RoutePrefix;
 
 Prefix *prefix_free(Prefix *prefix);
@@ -50,22 +59,27 @@
 void network_drop_invalid_route_prefixes(Network *network);
 void network_adjust_radv(Network *network);
 
-int radv_emit_dns(Link *link);
-int radv_configure(Link *link);
+int link_request_radv_addresses(Link *link);
+
+bool link_radv_enabled(Link *link);
+int radv_start(Link *link);
 int radv_update_mac(Link *link);
 int radv_add_prefix(Link *link, const struct in6_addr *prefix, uint8_t prefix_len,
-                    uint32_t lifetime_preferred, uint32_t lifetime_valid);
+                    usec_t lifetime_preferred_usec, usec_t lifetime_valid_usec);
+
+int link_request_radv(Link *link);
 
 const char* radv_prefix_delegation_to_string(RADVPrefixDelegation i) _const_;
 RADVPrefixDelegation radv_prefix_delegation_from_string(const char *s) _pure_;
 
 CONFIG_PARSER_PROTOTYPE(config_parse_router_prefix_delegation);
+CONFIG_PARSER_PROTOTYPE(config_parse_router_lifetime);
 CONFIG_PARSER_PROTOTYPE(config_parse_router_preference);
 CONFIG_PARSER_PROTOTYPE(config_parse_prefix);
-CONFIG_PARSER_PROTOTYPE(config_parse_prefix_flags);
+CONFIG_PARSER_PROTOTYPE(config_parse_prefix_boolean);
 CONFIG_PARSER_PROTOTYPE(config_parse_prefix_lifetime);
-CONFIG_PARSER_PROTOTYPE(config_parse_prefix_assign);
 CONFIG_PARSER_PROTOTYPE(config_parse_prefix_metric);
+CONFIG_PARSER_PROTOTYPE(config_parse_prefix_token);
 CONFIG_PARSER_PROTOTYPE(config_parse_radv_dns);
 CONFIG_PARSER_PROTOTYPE(config_parse_radv_search_domains);
 CONFIG_PARSER_PROTOTYPE(config_parse_route_prefix);
diff --git a/src/network/networkd-route-util.c b/src/network/networkd-route-util.c
new file mode 100644
index 0000000..e497f05
--- /dev/null
+++ b/src/network/networkd-route-util.c
@@ -0,0 +1,555 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/rtnetlink.h>
+
+#include "alloc-util.h"
+#include "logarithm.h"
+#include "missing_threads.h"
+#include "networkd-address.h"
+#include "networkd-link.h"
+#include "networkd-manager.h"
+#include "networkd-route-util.h"
+#include "networkd-route.h"
+#include "parse-util.h"
+#include "string-table.h"
+#include "string-util.h"
+#include "strv.h"
+#include "sysctl-util.h"
+
+#define ROUTES_DEFAULT_MAX_PER_FAMILY 4096U
+
+unsigned routes_max(void) {
+        static thread_local unsigned cached = 0;
+        _cleanup_free_ char *s4 = NULL, *s6 = NULL;
+        unsigned val4 = ROUTES_DEFAULT_MAX_PER_FAMILY, val6 = ROUTES_DEFAULT_MAX_PER_FAMILY;
+
+        if (cached > 0)
+                return cached;
+
+        if (sysctl_read_ip_property(AF_INET, NULL, "route/max_size", &s4) >= 0)
+                if (safe_atou(s4, &val4) >= 0 && val4 == 2147483647U)
+                        /* This is the default "no limit" value in the kernel */
+                        val4 = ROUTES_DEFAULT_MAX_PER_FAMILY;
+
+        if (sysctl_read_ip_property(AF_INET6, NULL, "route/max_size", &s6) >= 0)
+                (void) safe_atou(s6, &val6);
+
+        cached = MAX(ROUTES_DEFAULT_MAX_PER_FAMILY, val4) +
+                 MAX(ROUTES_DEFAULT_MAX_PER_FAMILY, val6);
+        return cached;
+}
+
+static Route *link_find_default_gateway(Link *link, int family, Route *gw) {
+        Route *route;
+
+        assert(link);
+
+        SET_FOREACH(route, link->routes) {
+                if (!route_exists(route))
+                        continue;
+                if (family != AF_UNSPEC && route->family != family)
+                        continue;
+                if (route->dst_prefixlen != 0)
+                        continue;
+                if (route->src_prefixlen != 0)
+                        continue;
+                if (route->table != RT_TABLE_MAIN)
+                        continue;
+                if (route->type != RTN_UNICAST)
+                        continue;
+                if (route->scope != RT_SCOPE_UNIVERSE)
+                        continue;
+                if (!in_addr_is_set(route->gw_family, &route->gw))
+                        continue;
+                if (gw) {
+                        if (route->gw_weight > gw->gw_weight)
+                                continue;
+                        if (route->priority >= gw->priority)
+                                continue;
+                }
+                gw = route;
+        }
+
+        return gw;
+}
+
+int manager_find_uplink(Manager *m, int family, Link *exclude, Link **ret) {
+        Route *gw = NULL;
+        Link *link;
+
+        assert(m);
+        assert(IN_SET(family, AF_UNSPEC, AF_INET, AF_INET6));
+
+        /* Looks for a suitable "uplink", via black magic: an interface that is up and where the
+         * default route with the highest priority points to. */
+
+        HASHMAP_FOREACH(link, m->links_by_index) {
+                if (link == exclude)
+                        continue;
+
+                if (link->state != LINK_STATE_CONFIGURED)
+                        continue;
+
+                gw = link_find_default_gateway(link, family, gw);
+        }
+
+        if (!gw)
+                return -ENOENT;
+
+        if (ret) {
+                assert(gw->link);
+                *ret = gw->link;
+        }
+
+        return 0;
+}
+
+bool gateway_is_ready(Link *link, bool onlink, int family, const union in_addr_union *gw) {
+        Route *route;
+        Address *a;
+
+        assert(link);
+        assert(link->manager);
+
+        if (onlink)
+                return true;
+
+        if (!gw || !in_addr_is_set(family, gw))
+                return true;
+
+        if (family == AF_INET6 && in6_addr_is_link_local(&gw->in6))
+                return true;
+
+        SET_FOREACH(route, link->routes) {
+                if (!route_exists(route))
+                        continue;
+                if (route->family != family)
+                        continue;
+                if (!in_addr_is_set(route->family, &route->dst) && route->dst_prefixlen == 0)
+                        continue;
+                if (in_addr_prefix_covers(family, &route->dst, route->dst_prefixlen, gw) > 0)
+                        return true;
+        }
+
+        if (link->manager->manage_foreign_routes)
+                return false;
+
+        /* If we do not manage foreign routes, then there may exist a prefix route we do not know,
+         * which was created on configuring an address. Hence, also check the addresses. */
+        SET_FOREACH(a, link->addresses) {
+                if (!address_is_ready(a))
+                        continue;
+                if (a->family != family)
+                        continue;
+                if (FLAGS_SET(a->flags, IFA_F_NOPREFIXROUTE))
+                        continue;
+                if (in_addr_is_set(a->family, &a->in_addr_peer))
+                        continue;
+                if (in_addr_prefix_covers(family, &a->in_addr, a->prefixlen, gw) > 0)
+                        return true;
+        }
+
+        return false;
+}
+
+static int link_address_is_reachable_internal(
+                Link *link,
+                int family,
+                const union in_addr_union *address,
+                const union in_addr_union *prefsrc, /* optional */
+                Route **ret) {
+
+        Route *route, *found = NULL;
+
+        assert(link);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(address);
+
+        SET_FOREACH(route, link->routes) {
+                if (!route_exists(route))
+                        continue;
+
+                if (route->type != RTN_UNICAST)
+                        continue;
+
+                if (route->family != family)
+                        continue;
+
+                if (in_addr_prefix_covers(family, &route->dst, route->dst_prefixlen, address) <= 0)
+                        continue;
+
+                if (prefsrc &&
+                    in_addr_is_set(family, prefsrc) &&
+                    in_addr_is_set(family, &route->prefsrc) &&
+                    !in_addr_equal(family, prefsrc, &route->prefsrc))
+                        continue;
+
+                if (found && found->priority <= route->priority)
+                        continue;
+
+                found = route;
+        }
+
+        if (!found)
+                return -ENOENT;
+
+        if (ret)
+                *ret = found;
+
+        return 0;
+}
+
+int link_address_is_reachable(
+                Link *link,
+                int family,
+                const union in_addr_union *address,
+                const union in_addr_union *prefsrc, /* optional */
+                Address **ret) {
+
+        Route *route;
+        Address *a;
+        int r;
+
+        assert(link);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(address);
+
+        /* This checks if the address is reachable, and optionally return the Address object of the
+         * preferred source to access the address. */
+
+        r = link_address_is_reachable_internal(link, family, address, prefsrc, &route);
+        if (r < 0)
+                return r;
+
+        if (!in_addr_is_set(route->family, &route->prefsrc)) {
+                if (ret)
+                        *ret = NULL;
+                return 0;
+        }
+
+        r = link_get_address(link, route->family, &route->prefsrc, 0, &a);
+        if (r < 0)
+                return r;
+
+        if (!address_is_ready(a))
+                return -EBUSY;
+
+        if (ret)
+                *ret = a;
+
+        return 0;
+}
+
+int manager_address_is_reachable(
+                Manager *manager,
+                int family,
+                const union in_addr_union *address,
+                const union in_addr_union *prefsrc, /* optional */
+                Address **ret) {
+
+        Route *route, *found = NULL;
+        Address *a;
+        Link *link;
+        int r;
+
+        assert(manager);
+
+        HASHMAP_FOREACH(link, manager->links_by_index) {
+                if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                        continue;
+
+                if (link_address_is_reachable_internal(link, family, address, prefsrc, &route) < 0)
+                        continue;
+
+                if (found && found->priority <= route->priority)
+                        continue;
+
+                found = route;
+        }
+
+        if (!found)
+                return -ENOENT;
+
+        if (!in_addr_is_set(found->family, &found->prefsrc)) {
+                if (ret)
+                        *ret = NULL;
+                return 0;
+        }
+
+        r = link_get_address(found->link, found->family, &found->prefsrc, 0, &a);
+        if (r < 0)
+                return r;
+
+        if (!address_is_ready(a))
+                return -EBUSY;
+
+        if (ret)
+                *ret = a;
+
+        return 0;
+}
+
+static const char * const route_type_table[__RTN_MAX] = {
+        [RTN_UNICAST]     = "unicast",
+        [RTN_LOCAL]       = "local",
+        [RTN_BROADCAST]   = "broadcast",
+        [RTN_ANYCAST]     = "anycast",
+        [RTN_MULTICAST]   = "multicast",
+        [RTN_BLACKHOLE]   = "blackhole",
+        [RTN_UNREACHABLE] = "unreachable",
+        [RTN_PROHIBIT]    = "prohibit",
+        [RTN_THROW]       = "throw",
+        [RTN_NAT]         = "nat",
+        [RTN_XRESOLVE]    = "xresolve",
+};
+
+assert_cc(__RTN_MAX <= UCHAR_MAX);
+DEFINE_STRING_TABLE_LOOKUP(route_type, int);
+
+static const char * const route_scope_table[] = {
+        [RT_SCOPE_UNIVERSE] = "global",
+        [RT_SCOPE_SITE]     = "site",
+        [RT_SCOPE_LINK]     = "link",
+        [RT_SCOPE_HOST]     = "host",
+        [RT_SCOPE_NOWHERE]  = "nowhere",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(route_scope, int, UINT8_MAX);
+
+static const char * const route_protocol_table[] = {
+        [RTPROT_KERNEL] = "kernel",
+        [RTPROT_BOOT]   = "boot",
+        [RTPROT_STATIC] = "static",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(route_protocol, int, UINT8_MAX);
+
+static const char * const route_protocol_full_table[] = {
+        [RTPROT_REDIRECT] = "redirect",
+        [RTPROT_KERNEL]   = "kernel",
+        [RTPROT_BOOT]     = "boot",
+        [RTPROT_STATIC]   = "static",
+        [RTPROT_GATED]    = "gated",
+        [RTPROT_RA]       = "ra",
+        [RTPROT_MRT]      = "mrt",
+        [RTPROT_ZEBRA]    = "zebra",
+        [RTPROT_BIRD]     = "bird",
+        [RTPROT_DNROUTED] = "dnrouted",
+        [RTPROT_XORP]     = "xorp",
+        [RTPROT_NTK]      = "ntk",
+        [RTPROT_DHCP]     = "dhcp",
+        [RTPROT_MROUTED]  = "mrouted",
+        [RTPROT_BABEL]    = "babel",
+        [RTPROT_BGP]      = "bgp",
+        [RTPROT_ISIS]     = "isis",
+        [RTPROT_OSPF]     = "ospf",
+        [RTPROT_RIP]      = "rip",
+        [RTPROT_EIGRP]    = "eigrp",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(route_protocol_full, int, UINT8_MAX);
+
+int route_flags_to_string_alloc(uint32_t flags, char **ret) {
+        _cleanup_free_ char *str = NULL;
+        static const char* map[] = {
+                [LOG2U(RTNH_F_DEAD)]       = "dead",       /* Nexthop is dead (used by multipath) */
+                [LOG2U(RTNH_F_PERVASIVE)]  = "pervasive",  /* Do recursive gateway lookup */
+                [LOG2U(RTNH_F_ONLINK)]     = "onlink" ,    /* Gateway is forced on link */
+                [LOG2U(RTNH_F_OFFLOAD)]    = "offload",    /* Nexthop is offloaded */
+                [LOG2U(RTNH_F_LINKDOWN)]   = "linkdown",   /* carrier-down on nexthop */
+                [LOG2U(RTNH_F_UNRESOLVED)] = "unresolved", /* The entry is unresolved (ipmr) */
+                [LOG2U(RTNH_F_TRAP)]       = "trap",       /* Nexthop is trapping packets */
+        };
+
+        assert(ret);
+
+        for (size_t i = 0; i < ELEMENTSOF(map); i++)
+                if (FLAGS_SET(flags, 1 << i) && map[i])
+                        if (!strextend_with_separator(&str, ",", map[i]))
+                                return -ENOMEM;
+
+        *ret = TAKE_PTR(str);
+        return 0;
+}
+
+static const char * const route_table_table[] = {
+        [RT_TABLE_DEFAULT] = "default",
+        [RT_TABLE_MAIN]    = "main",
+        [RT_TABLE_LOCAL]   = "local",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP(route_table, int);
+
+int manager_get_route_table_from_string(const Manager *m, const char *s, uint32_t *ret) {
+        uint32_t t;
+        int r;
+
+        assert(m);
+        assert(s);
+        assert(ret);
+
+        r = route_table_from_string(s);
+        if (r >= 0) {
+                *ret = (uint32_t) r;
+                return 0;
+        }
+
+        t = PTR_TO_UINT32(hashmap_get(m->route_table_numbers_by_name, s));
+        if (t != 0) {
+                *ret = t;
+                return 0;
+        }
+
+        r = safe_atou32(s, &t);
+        if (r < 0)
+                return r;
+
+        if (t == 0)
+                return -ERANGE;
+
+        *ret = t;
+        return 0;
+}
+
+int manager_get_route_table_to_string(const Manager *m, uint32_t table, char **ret) {
+        _cleanup_free_ char *str = NULL;
+        const char *s;
+        int r;
+
+        assert(m);
+        assert(ret);
+
+        /* Unlike manager_get_route_table_from_string(), this accepts 0, as the kernel may create routes with
+         * table 0. See issue #25089. */
+
+        s = route_table_to_string(table);
+        if (!s)
+                s = hashmap_get(m->route_table_names_by_number, UINT32_TO_PTR(table));
+
+        if (s)
+                /* Currently, this is only used in debugging logs. To not confuse any bug
+                 * reports, let's include the table number. */
+                r = asprintf(&str, "%s(%" PRIu32 ")", s, table);
+        else
+                r = asprintf(&str, "%" PRIu32, table);
+        if (r < 0)
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(str);
+        return 0;
+}
+
+int config_parse_route_table_names(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Manager *m = ASSERT_PTR(userdata);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                m->route_table_names_by_number = hashmap_free(m->route_table_names_by_number);
+                m->route_table_numbers_by_name = hashmap_free(m->route_table_numbers_by_name);
+                return 0;
+        }
+
+        for (const char *p = rvalue;;) {
+                _cleanup_free_ char *name = NULL;
+                uint32_t table;
+                char *num;
+
+                r = extract_first_word(&p, &name, NULL, 0);
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Invalid RouteTable=, ignoring assignment: %s", rvalue);
+                        return 0;
+                }
+                if (r == 0)
+                        return 0;
+
+                num = strchr(name, ':');
+                if (!num) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Invalid route table name and number pair, ignoring assignment: %s", name);
+                        continue;
+                }
+
+                *num++ = '\0';
+
+                if (isempty(name)) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Route table name cannot be empty. Ignoring assignment: %s:%s", name, num);
+                        continue;
+                }
+                if (in_charset(name, DIGITS)) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Route table name cannot be numeric. Ignoring assignment: %s:%s", name, num);
+                        continue;
+                }
+                if (STR_IN_SET(name, "default", "main", "local")) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Route table name %s is already predefined. Ignoring assignment: %s:%s", name, name, num);
+                        continue;
+                }
+
+                r = safe_atou32(num, &table);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to parse route table number '%s', ignoring assignment: %s:%s", num, name, num);
+                        continue;
+                }
+                if (table == 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Invalid route table number, ignoring assignment: %s:%s", name, num);
+                        continue;
+                }
+
+                r = hashmap_ensure_put(&m->route_table_numbers_by_name, &string_hash_ops_free, name, UINT32_TO_PTR(table));
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r == -EEXIST) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Specified route table name and number pair conflicts with others, ignoring assignment: %s:%s", name, num);
+                        continue;
+                }
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to store route table name and number pair, ignoring assignment: %s:%s", name, num);
+                        continue;
+                }
+                if (r == 0)
+                        /* The entry is duplicated. It should not be added to route_table_names_by_number hashmap. */
+                        continue;
+
+                r = hashmap_ensure_put(&m->route_table_names_by_number, NULL, UINT32_TO_PTR(table), name);
+                if (r < 0) {
+                        hashmap_remove(m->route_table_numbers_by_name, name);
+
+                        if (r == -ENOMEM)
+                                return log_oom();
+                        if (r == -EEXIST)
+                                log_syntax(unit, LOG_WARNING, filename, line, r,
+                                           "Specified route table name and number pair conflicts with others, ignoring assignment: %s:%s", name, num);
+                        else
+                                log_syntax(unit, LOG_WARNING, filename, line, r,
+                                           "Failed to store route table name and number pair, ignoring assignment: %s:%s", name, num);
+                        continue;
+                }
+                assert(r > 0);
+
+                TAKE_PTR(name);
+        }
+}
diff --git a/src/network/networkd-route-util.h b/src/network/networkd-route-util.h
new file mode 100644
index 0000000..b862cd6
--- /dev/null
+++ b/src/network/networkd-route-util.h
@@ -0,0 +1,49 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+
+#include "conf-parser.h"
+
+typedef struct Link Link;
+typedef struct Manager Manager;
+typedef struct Address Address;
+
+unsigned routes_max(void);
+
+int manager_find_uplink(Manager *m, int family, Link *exclude, Link **ret);
+
+bool gateway_is_ready(Link *link, bool onlink, int family, const union in_addr_union *gw);
+
+int link_address_is_reachable(
+                Link *link,
+                int family,
+                const union in_addr_union *address,
+                const union in_addr_union *prefsrc, /* optional */
+                Address **ret);
+
+int manager_address_is_reachable(
+                Manager *manager,
+                int family,
+                const union in_addr_union *address,
+                const union in_addr_union *prefsrc, /* optional */
+                Address **ret);
+
+int route_type_from_string(const char *s) _pure_;
+const char *route_type_to_string(int t) _const_;
+
+int route_scope_from_string(const char *s);
+int route_scope_to_string_alloc(int t, char **ret);
+
+int route_protocol_from_string(const char *s);
+int route_protocol_to_string_alloc(int t, char **ret);
+int route_protocol_full_from_string(const char *s);
+int route_protocol_full_to_string_alloc(int t, char **ret);
+
+int route_flags_to_string_alloc(uint32_t flags, char **ret);
+
+int manager_get_route_table_from_string(const Manager *m, const char *table, uint32_t *ret);
+int manager_get_route_table_to_string(const Manager *m, uint32_t table, char **ret);
+
+CONFIG_PARSER_PROTOTYPE(config_parse_route_table_names);
diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c
index eeba31c..5214a8a 100644
--- a/src/network/networkd-route.c
+++ b/src/network/networkd-route.c
@@ -5,192 +5,21 @@
 #include <linux/nexthop.h>
 
 #include "alloc-util.h"
+#include "event-util.h"
 #include "netlink-util.h"
+#include "networkd-address.h"
 #include "networkd-ipv4ll.h"
 #include "networkd-manager.h"
 #include "networkd-network.h"
 #include "networkd-nexthop.h"
 #include "networkd-queue.h"
+#include "networkd-route-util.h"
 #include "networkd-route.h"
 #include "parse-util.h"
-#include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
-#include "strxcpyx.h"
-#include "sysctl-util.h"
 #include "vrf.h"
-
-#define ROUTES_DEFAULT_MAX_PER_FAMILY 4096U
-
-static uint32_t link_get_vrf_table(const Link *link) {
-        return link->network->vrf ? VRF(link->network->vrf)->table : RT_TABLE_MAIN;
-}
-
-uint32_t link_get_dhcp_route_table(const Link *link) {
-        /* When the interface is part of an VRF use the VRFs routing table, unless
-         * another table is explicitly specified. */
-        if (link->network->dhcp_route_table_set)
-                return link->network->dhcp_route_table;
-        return link_get_vrf_table(link);
-}
-
-uint32_t link_get_ipv6_accept_ra_route_table(const Link *link) {
-        if (link->network->ipv6_accept_ra_route_table_set)
-                return link->network->ipv6_accept_ra_route_table;
-        return link_get_vrf_table(link);
-}
-
-static const char * const route_type_table[__RTN_MAX] = {
-        [RTN_UNICAST]     = "unicast",
-        [RTN_LOCAL]       = "local",
-        [RTN_BROADCAST]   = "broadcast",
-        [RTN_ANYCAST]     = "anycast",
-        [RTN_MULTICAST]   = "multicast",
-        [RTN_BLACKHOLE]   = "blackhole",
-        [RTN_UNREACHABLE] = "unreachable",
-        [RTN_PROHIBIT]    = "prohibit",
-        [RTN_THROW]       = "throw",
-        [RTN_NAT]         = "nat",
-        [RTN_XRESOLVE]    = "xresolve",
-};
-
-assert_cc(__RTN_MAX <= UCHAR_MAX);
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP(route_type, int);
-
-static const char * const route_scope_table[] = {
-        [RT_SCOPE_UNIVERSE] = "global",
-        [RT_SCOPE_SITE]     = "site",
-        [RT_SCOPE_LINK]     = "link",
-        [RT_SCOPE_HOST]     = "host",
-        [RT_SCOPE_NOWHERE]  = "nowhere",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(route_scope, int);
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING_FALLBACK(route_scope, int, UINT8_MAX);
-
-static const char * const route_table_table[] = {
-        [RT_TABLE_DEFAULT] = "default",
-        [RT_TABLE_MAIN]    = "main",
-        [RT_TABLE_LOCAL]   = "local",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP(route_table, int);
-
-int manager_get_route_table_from_string(const Manager *m, const char *s, uint32_t *ret) {
-        uint32_t t;
-        int r;
-
-        assert(m);
-        assert(s);
-        assert(ret);
-
-        r = route_table_from_string(s);
-        if (r >= 0) {
-                *ret = (uint32_t) r;
-                return 0;
-        }
-
-        t = PTR_TO_UINT32(hashmap_get(m->route_table_numbers_by_name, s));
-        if (t != 0) {
-                *ret = t;
-                return 0;
-        }
-
-        r = safe_atou32(s, &t);
-        if (r < 0)
-                return r;
-
-        if (t == 0)
-                return -ERANGE;
-
-        *ret = t;
-        return 0;
-}
-
-int manager_get_route_table_to_string(const Manager *m, uint32_t table, char **ret) {
-        _cleanup_free_ char *str = NULL;
-        const char *s;
-
-        assert(m);
-        assert(ret);
-
-        if (table == 0)
-                return -EINVAL;
-
-        s = route_table_to_string(table);
-        if (!s)
-                s = hashmap_get(m->route_table_names_by_number, UINT32_TO_PTR(table));
-
-        if (s) {
-                /* Currently, this is only used in debugging logs. To not confuse any bug
-                 * reports, let's include the table number. */
-                if (asprintf(&str, "%s(%" PRIu32 ")", s, table) < 0)
-                        return -ENOMEM;
-
-                *ret = TAKE_PTR(str);
-                return 0;
-        }
-
-        if (asprintf(&str, "%" PRIu32, table) < 0)
-                return -ENOMEM;
-
-        *ret = TAKE_PTR(str);
-        return 0;
-}
-
-static const char * const route_protocol_table[] = {
-        [RTPROT_KERNEL] = "kernel",
-        [RTPROT_BOOT]   = "boot",
-        [RTPROT_STATIC] = "static",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_FALLBACK(route_protocol, int, UINT8_MAX);
-
-static const char * const route_protocol_full_table[] = {
-        [RTPROT_REDIRECT] = "redirect",
-        [RTPROT_KERNEL]   = "kernel",
-        [RTPROT_BOOT]     = "boot",
-        [RTPROT_STATIC]   = "static",
-        [RTPROT_GATED]    = "gated",
-        [RTPROT_RA]       = "ra",
-        [RTPROT_MRT]      = "mrt",
-        [RTPROT_ZEBRA]    = "zebra",
-        [RTPROT_BIRD]     = "bird",
-        [RTPROT_DNROUTED] = "dnrouted",
-        [RTPROT_XORP]     = "xorp",
-        [RTPROT_NTK]      = "ntk",
-        [RTPROT_DHCP]     = "dhcp",
-        [RTPROT_MROUTED]  = "mrouted",
-        [RTPROT_BABEL]    = "babel",
-        [RTPROT_BGP]      = "bgp",
-        [RTPROT_ISIS]     = "isis",
-        [RTPROT_OSPF]     = "ospf",
-        [RTPROT_RIP]      = "rip",
-        [RTPROT_EIGRP]    = "eigrp",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING_FALLBACK(route_protocol_full, int, UINT8_MAX);
-
-static unsigned routes_max(void) {
-        static thread_local unsigned cached = 0;
-        _cleanup_free_ char *s4 = NULL, *s6 = NULL;
-        unsigned val4 = ROUTES_DEFAULT_MAX_PER_FAMILY, val6 = ROUTES_DEFAULT_MAX_PER_FAMILY;
-
-        if (cached > 0)
-                return cached;
-
-        if (sysctl_read_ip_property(AF_INET, NULL, "route/max_size", &s4) >= 0)
-                if (safe_atou(s4, &val4) >= 0 && val4 == 2147483647U)
-                        /* This is the default "no limit" value in the kernel */
-                        val4 = ROUTES_DEFAULT_MAX_PER_FAMILY;
-
-        if (sysctl_read_ip_property(AF_INET6, NULL, "route/max_size", &s6) >= 0)
-                (void) safe_atou(s6, &val6);
-
-        cached = MAX(ROUTES_DEFAULT_MAX_PER_FAMILY, val4) +
-                 MAX(ROUTES_DEFAULT_MAX_PER_FAMILY, val6);
-        return cached;
-}
+#include "wireguard.h"
 
 int route_new(Route **ret) {
         _cleanup_(route_freep) Route *route = NULL;
@@ -205,7 +34,7 @@
                 .protocol = RTPROT_UNSPEC,
                 .type = RTN_UNICAST,
                 .table = RT_TABLE_MAIN,
-                .lifetime = USEC_INFINITY,
+                .lifetime_usec = USEC_INFINITY,
                 .quickack = -1,
                 .fast_open_no_cookie = -1,
                 .gateway_onlink = -1,
@@ -218,7 +47,7 @@
 }
 
 static int route_new_static(Network *network, const char *filename, unsigned section_line, Route **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(route_freep) Route *route = NULL;
         int r;
 
@@ -227,7 +56,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -247,8 +76,9 @@
         route->protocol = RTPROT_STATIC;
         route->network = network;
         route->section = TAKE_PTR(n);
+        route->source = NETWORK_CONFIG_SOURCE_STATIC;
 
-        r = hashmap_ensure_put(&network->routes_by_section, &network_config_hash_ops, route->section, route);
+        r = hashmap_ensure_put(&network->routes_by_section, &config_section_hash_ops, route->section, route);
         if (r < 0)
                 return r;
 
@@ -265,37 +95,24 @@
                 hashmap_remove(route->network->routes_by_section, route->section);
         }
 
-        network_config_section_free(route->section);
+        config_section_free(route->section);
 
-        if (route->link) {
-                NDiscRoute *n;
-
+        if (route->link)
                 set_remove(route->link->routes, route);
-                set_remove(route->link->routes_foreign, route);
-                set_remove(route->link->dhcp_routes, route);
-                set_remove(route->link->dhcp_routes_old, route);
-                set_remove(route->link->dhcp6_routes, route);
-                set_remove(route->link->dhcp6_routes_old, route);
-                set_remove(route->link->dhcp6_pd_routes, route);
-                set_remove(route->link->dhcp6_pd_routes_old, route);
-                SET_FOREACH(n, route->link->ndisc_routes)
-                        if (route_equal(n->route, route))
-                                free(set_remove(route->link->ndisc_routes, n));
-        }
 
-        if (route->manager) {
+        if (route->manager)
                 set_remove(route->manager->routes, route);
-                set_remove(route->manager->routes_foreign, route);
-        }
 
         ordered_set_free_with_destructor(route->multipath_routes, multipath_route_free);
 
         sd_event_source_disable_unref(route->expire);
 
+        free(route->tcp_congestion_control_algo);
+
         return mfree(route);
 }
 
-void route_hash_func(const Route *route, struct siphash *state) {
+static void route_hash_func(const Route *route, struct siphash *state) {
         assert(route);
 
         siphash24_compress(&route->family, sizeof(route->family), state);
@@ -337,7 +154,7 @@
         }
 }
 
-int route_compare_func(const Route *a, const Route *b) {
+static int route_compare_func(const Route *a, const Route *b) {
         int r;
 
         r = CMP(a->family, b->family);
@@ -435,88 +252,79 @@
                 route_compare_func,
                 route_free);
 
-bool route_equal(const Route *r1, const Route *r2) {
-        if (r1 == r2)
-                return true;
+static bool route_type_is_reject(const Route *route) {
+        assert(route);
 
-        if (!r1 || !r2)
-                return false;
-
-        return route_compare_func(r1, r2) == 0;
+        return IN_SET(route->type, RTN_UNREACHABLE, RTN_PROHIBIT, RTN_BLACKHOLE, RTN_THROW);
 }
 
-static int route_get(const Manager *manager, const Link *link, const Route *in, Route **ret) {
-        Route *existing;
+static bool route_needs_convert(const Route *route) {
+        assert(route);
 
-        assert(manager || link);
+        return route->nexthop_id > 0 || !ordered_set_isempty(route->multipath_routes);
+}
+
+static int route_add(Manager *manager, Link *link, Route *route) {
+        int r;
+
+        assert(route);
+
+        if (route_type_is_reject(route)) {
+                assert(manager);
+
+                r = set_ensure_put(&manager->routes, &route_hash_ops, route);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return -EEXIST;
+
+                route->manager = manager;
+        } else {
+                assert(link);
+
+                r = set_ensure_put(&link->routes, &route_hash_ops, route);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return -EEXIST;
+
+                route->link = link;
+        }
+
+        return 0;
+}
+
+int route_get(Manager *manager, Link *link, const Route *in, Route **ret) {
+        Route *route;
+
         assert(in);
 
-        existing = set_get(link ? link->routes : manager->routes, in);
-        if (existing) {
-                if (ret)
-                        *ret = existing;
-                return 1;
-        }
+        if (route_type_is_reject(in)) {
+                if (!manager)
+                        return -ENOENT;
 
-        existing = set_get(link ? link->routes_foreign : manager->routes_foreign, in);
-        if (existing) {
-                if (ret)
-                        *ret = existing;
-                return 0;
-        }
-
-        return -ENOENT;
-}
-
-static void route_copy(Route *dest, const Route *src, const MultipathRoute *m, const NextHop *nh, uint8_t nh_weight) {
-        assert(dest);
-        assert(src);
-
-        /* This only copies entries used by the above hash and compare functions. */
-
-        dest->family = src->family;
-        dest->src = src->src;
-        dest->src_prefixlen = src->src_prefixlen;
-        dest->dst = src->dst;
-        dest->dst_prefixlen = src->dst_prefixlen;
-        dest->prefsrc = src->prefsrc;
-        dest->scope = src->scope;
-        dest->protocol = src->protocol;
-        if (nh && nh->blackhole)
-                dest->type = RTN_BLACKHOLE;
-        else
-                dest->type = src->type;
-        dest->tos = src->tos;
-        dest->priority = src->priority;
-        dest->table = src->table;
-        dest->initcwnd = src->initcwnd;
-        dest->initrwnd = src->initrwnd;
-        dest->lifetime = src->lifetime;
-        dest->advmss = src->advmss;
-        dest->nexthop_id = src->nexthop_id;
-
-        if (nh) {
-                assert(hashmap_isempty(nh->group));
-
-                dest->gw_family = nh->family;
-                dest->gw = nh->gw;
-                dest->gw_weight = nh_weight != UINT8_MAX ? nh_weight : src->gw_weight;
-        } else if (m) {
-                dest->gw_family = m->gateway.family;
-                dest->gw = m->gateway.address;
-                dest->gw_weight = m->weight;
+                route = set_get(manager->routes, in);
         } else {
-                dest->gw_family = src->gw_family;
-                dest->gw = src->gw;
-                dest->gw_weight = src->gw_weight;
+                if (!link)
+                        return -ENOENT;
+
+                route = set_get(link->routes, in);
         }
+        if (!route)
+                return -ENOENT;
+
+        if (ret)
+                *ret = route;
+
+        return 0;
 }
 
 int route_dup(const Route *src, Route **ret) {
         _cleanup_(route_freep) Route *dest = NULL;
-        MultipathRoute *m;
         int r;
 
+        /* This does not copy mulipath routes. */
+
         assert(src);
         assert(ret);
 
@@ -531,338 +339,218 @@
         dest->manager = NULL;
         dest->multipath_routes = NULL;
         dest->expire = NULL;
+        dest->tcp_congestion_control_algo = NULL;
 
-        ORDERED_SET_FOREACH(m, src->multipath_routes) {
-                _cleanup_(multipath_route_freep) MultipathRoute *n = NULL;
-
-                r = multipath_route_dup(m, &n);
-                if (r < 0)
-                        return r;
-
-                r = ordered_set_ensure_put(&dest->multipath_routes, NULL, n);
-                if (r < 0)
-                        return r;
-
-                TAKE_PTR(n);
-        }
+        r = free_and_strdup(&dest->tcp_congestion_control_algo, src->tcp_congestion_control_algo);
+        if (r < 0)
+                return r;
 
         *ret = TAKE_PTR(dest);
         return 0;
 }
 
-static int route_add_internal(Manager *manager, Link *link, Set **routes, const Route *in, Route **ret) {
-        _cleanup_(route_freep) Route *route = NULL;
-        int r;
-
-        assert(manager || link);
-        assert(routes);
-        assert(in);
-
-        r = route_new(&route);
-        if (r < 0)
-                return r;
-
-        route_copy(route, in, NULL, NULL, UINT8_MAX);
-
-        r = set_ensure_put(routes, &route_hash_ops, route);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                return -EEXIST;
-
-        route->link = link;
-        route->manager = manager;
-
-        if (ret)
-                *ret = route;
-
-        route = NULL;
-
-        return 0;
-}
-
-static int route_add_foreign(Manager *manager, Link *link, const Route *in, Route **ret) {
-        assert(manager || link);
-        return route_add_internal(manager, link, link ? &link->routes_foreign : &manager->routes_foreign, in, ret);
-}
-
-static int route_add(Manager *manager, Link *link, const Route *in, const MultipathRoute *m, const NextHop *nh, uint8_t nh_weight, Route **ret) {
-        _cleanup_(route_freep) Route *tmp = NULL;
-        Route *route;
-        int r;
-
-        assert(manager || link);
-        assert(in);
-
-        if (nh) {
-                assert(hashmap_isempty(nh->group));
-
-                r = route_new(&tmp);
-                if (r < 0)
-                        return r;
-
-                route_copy(tmp, in, NULL, nh, nh_weight);
-                in = tmp;
-        } else if (m) {
-                assert(link && (m->ifindex == 0 || m->ifindex == link->ifindex));
-
-                r = route_new(&tmp);
-                if (r < 0)
-                        return r;
-
-                route_copy(tmp, in, m, NULL, UINT8_MAX);
-                in = tmp;
-        }
-
-        r = route_get(manager, link, in, &route);
-        if (r == -ENOENT) {
-                /* Route does not exist, create a new one */
-                r = route_add_internal(manager, link, link ? &link->routes : &manager->routes, in, &route);
-                if (r < 0)
-                        return r;
-        } else if (r == 0) {
-                /* Take over a foreign route */
-                r = set_ensure_put(link ? &link->routes : &manager->routes, &route_hash_ops, route);
-                if (r < 0)
-                        return r;
-
-                set_remove(link ? link->routes_foreign : manager->routes_foreign, route);
-        } else if (r == 1) {
-                /* Route exists, do nothing */
-                ;
-        } else
-                return r;
-
-        if (ret)
-                *ret = route;
-        return 0;
-}
-
-static bool route_type_is_reject(const Route *route) {
-        assert(route);
-
-        return IN_SET(route->type, RTN_UNREACHABLE, RTN_PROHIBIT, RTN_BLACKHOLE, RTN_THROW);
-}
-
-static int link_has_route_one(Link *link, const Route *route, const NextHop *nh, uint8_t nh_weight) {
-        _cleanup_(route_freep) Route *tmp = NULL;
-        int r;
-
-        assert(link);
+static void route_apply_nexthop(Route *route, const NextHop *nh, uint8_t nh_weight) {
         assert(route);
         assert(nh);
+        assert(hashmap_isempty(nh->group));
 
-        r = route_new(&tmp);
-        if (r < 0)
-                return r;
+        route->gw_family = nh->family;
+        route->gw = nh->gw;
 
-        route_copy(tmp, route, NULL, nh, nh_weight);
+        if (nh_weight != UINT8_MAX)
+                route->gw_weight = nh_weight;
 
-        if (route_type_is_reject(route) || (nh && nh->blackhole))
-                return route_get(link->manager, NULL, tmp, NULL) >= 0;
-        else
-                return route_get(NULL, link, tmp, NULL) >= 0;
+        if (nh->blackhole)
+                route->type = RTN_BLACKHOLE;
 }
 
-int link_has_route(Link *link, const Route *route) {
-        MultipathRoute *m;
+static void route_apply_multipath_route(Route *route, const MultipathRoute *m) {
+        assert(route);
+        assert(m);
+
+        route->gw_family = m->gateway.family;
+        route->gw = m->gateway.address;
+        route->gw_weight = m->weight;
+}
+
+static int multipath_route_get_link(Manager *manager, const MultipathRoute *m, Link **ret) {
         int r;
 
-        assert(link);
+        assert(manager);
+        assert(m);
+
+        if (m->ifname) {
+                r = link_get_by_name(manager, m->ifname, ret);
+                return r < 0 ? r : 1;
+
+        } else if (m->ifindex > 0) { /* Always ignore ifindex if ifname is set. */
+                r = link_get_by_index(manager, m->ifindex, ret);
+                return r < 0 ? r : 1;
+        }
+
+        if (ret)
+                *ret = NULL;
+        return 0;
+}
+
+typedef struct ConvertedRoutes {
+        size_t n;
+        Route **routes;
+        Link **links;
+} ConvertedRoutes;
+
+static ConvertedRoutes *converted_routes_free(ConvertedRoutes *c) {
+        if (!c)
+                return NULL;
+
+        for (size_t i = 0; i < c->n; i++)
+                route_free(c->routes[i]);
+
+        free(c->routes);
+        free(c->links);
+
+        return mfree(c);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(ConvertedRoutes*, converted_routes_free);
+
+static int converted_routes_new(size_t n, ConvertedRoutes **ret) {
+        _cleanup_(converted_routes_freep) ConvertedRoutes *c = NULL;
+        _cleanup_free_ Route **routes = NULL;
+        _cleanup_free_ Link **links = NULL;
+
+        assert(n > 0);
+        assert(ret);
+
+        routes = new0(Route*, n);
+        if (!routes)
+                return -ENOMEM;
+
+        links = new0(Link*, n);
+        if (!links)
+                return -ENOMEM;
+
+        c = new(ConvertedRoutes, 1);
+        if (!c)
+                return -ENOMEM;
+
+        *c = (ConvertedRoutes) {
+                .n = n,
+                .routes = TAKE_PTR(routes),
+                .links = TAKE_PTR(links),
+        };
+
+        *ret = TAKE_PTR(c);
+        return 0;
+}
+
+static int route_convert(Manager *manager, const Route *route, ConvertedRoutes **ret) {
+        _cleanup_(converted_routes_freep) ConvertedRoutes *c = NULL;
+        int r;
+
+        assert(manager);
         assert(route);
+        assert(ret);
+
+        if (!route_needs_convert(route)) {
+                *ret = NULL;
+                return 0;
+        }
 
         if (route->nexthop_id > 0) {
                 struct nexthop_grp *nhg;
                 NextHop *nh;
 
-                if (manager_get_nexthop_by_id(link->manager, route->nexthop_id, &nh) < 0)
-                        return false;
-
-                if (hashmap_isempty(nh->group))
-                        return link_has_route_one(link, route, nh, UINT8_MAX);
-
-                HASHMAP_FOREACH(nhg, nh->group) {
-                        NextHop *h;
-
-                        if (manager_get_nexthop_by_id(link->manager, nhg->id, &h) < 0)
-                                return false;
-
-                        r = link_has_route_one(link, route, h, nhg->weight);
-                        if (r <= 0)
-                                return r;
-                }
-
-                return true;
-        }
-
-        if (ordered_set_isempty(route->multipath_routes)) {
-                if (route_type_is_reject(route))
-                        return route_get(link->manager, NULL, route, NULL) >= 0;
-                else
-                        return route_get(NULL, link, route, NULL) >= 0;
-        }
-
-        ORDERED_SET_FOREACH(m, route->multipath_routes) {
-                _cleanup_(route_freep) Route *tmp = NULL;
-                Link *l;
-
-                if (m->ifname) {
-                        if (link_get_by_name(link->manager, m->ifname, &l) < 0)
-                                return false;
-
-                        m->ifindex = l->ifindex;
-                } else
-                        l = link;
-
-                r = route_new(&tmp);
+                r = manager_get_nexthop_by_id(manager, route->nexthop_id, &nh);
                 if (r < 0)
                         return r;
 
-                route_copy(tmp, route, m, NULL, UINT8_MAX);
+                if (hashmap_isempty(nh->group)) {
+                        r = converted_routes_new(1, &c);
+                        if (r < 0)
+                                return r;
 
-                if (route_get(NULL, l, tmp, NULL) < 0)
-                        return false;
+                        r = route_dup(route, &c->routes[0]);
+                        if (r < 0)
+                                return r;
+
+                        route_apply_nexthop(c->routes[0], nh, UINT8_MAX);
+                        c->links[0] = nh->link;
+
+                        *ret = TAKE_PTR(c);
+                        return 1;
+                }
+
+                r = converted_routes_new(hashmap_size(nh->group), &c);
+                if (r < 0)
+                        return r;
+
+                size_t i = 0;
+                HASHMAP_FOREACH(nhg, nh->group) {
+                        NextHop *h;
+
+                        r = manager_get_nexthop_by_id(manager, nhg->id, &h);
+                        if (r < 0)
+                                return r;
+
+                        r = route_dup(route, &c->routes[i]);
+                        if (r < 0)
+                                return r;
+
+                        route_apply_nexthop(c->routes[i], h, nhg->weight);
+                        c->links[i] = h->link;
+
+                        i++;
+                }
+
+                *ret = TAKE_PTR(c);
+                return 1;
+
         }
 
-        return true;
+        assert(!ordered_set_isempty(route->multipath_routes));
+
+        r = converted_routes_new(ordered_set_size(route->multipath_routes), &c);
+        if (r < 0)
+                return r;
+
+        size_t i = 0;
+        MultipathRoute *m;
+        ORDERED_SET_FOREACH(m, route->multipath_routes) {
+                r = route_dup(route, &c->routes[i]);
+                if (r < 0)
+                        return r;
+
+                route_apply_multipath_route(c->routes[i], m);
+
+                r = multipath_route_get_link(manager, m, &c->links[i]);
+                if (r < 0)
+                        return r;
+
+                i++;
+        }
+
+        *ret = TAKE_PTR(c);
+        return 1;
 }
 
-static bool route_address_is_reachable(const Route *route, int family, const union in_addr_union *address) {
-        assert(route);
-        assert(IN_SET(family, AF_INET, AF_INET6));
-        assert(address);
-
-        if (route->family != family)
-                return false;
-
-        if (!in_addr_is_set(route->family, &route->dst))
-                return false;
-
-        return in_addr_prefix_intersect(
-                        route->family,
-                        &route->dst,
-                        route->dst_prefixlen,
-                        address,
-                        FAMILY_ADDRESS_SIZE(family) * 8) > 0;
-}
-
-static bool prefix_route_address_is_reachable(const Address *a, int family, const union in_addr_union *address) {
-        assert(a);
-        assert(IN_SET(family, AF_INET, AF_INET6));
-        assert(address);
-
-        if (a->family != family)
-                return false;
-        if (!address_is_ready(a))
-                return false;
-        if (FLAGS_SET(a->flags, IFA_F_NOPREFIXROUTE))
-                return false;
-        if (in_addr_is_set(a->family, &a->in_addr_peer))
-                return false;
-
-        return in_addr_prefix_intersect(
-                        family,
-                        &a->in_addr,
-                        a->prefixlen,
-                        address,
-                        FAMILY_ADDRESS_SIZE(family) * 8) > 0;
-}
-
-static bool link_address_is_reachable(Link *link, int family, const union in_addr_union *address) {
+void link_mark_routes(Link *link, NetworkConfigSource source) {
         Route *route;
 
         assert(link);
-        assert(link->manager);
-        assert(IN_SET(family, AF_INET, AF_INET6));
-        assert(address);
 
+        SET_FOREACH(route, link->routes) {
+                if (route->source != source)
+                        continue;
 
-        SET_FOREACH(route, link->routes)
-                if (route_address_is_reachable(route, family, address))
-                        return true;
-        SET_FOREACH(route, link->routes_foreign)
-                if (route_address_is_reachable(route, family, address))
-                        return true;
-
-        /* If we do not manage foreign routes, then there may exist a prefix route we do not know,
-         * which was created on configuring an address. Hence, also check the addresses. */
-        if (!link->manager->manage_foreign_routes) {
-                Address *a;
-
-                SET_FOREACH(a, link->addresses)
-                        if (prefix_route_address_is_reachable(a, family, address))
-                                return true;
-                SET_FOREACH(a, link->addresses_foreign)
-                        if (prefix_route_address_is_reachable(a, family, address))
-                                return true;
+                route_mark(route);
         }
-
-        return false;
-}
-
-static Route *routes_get_default_gateway(Set *routes, int family, Route *gw) {
-        Route *route;
-
-        SET_FOREACH(route, routes) {
-                if (family != AF_UNSPEC && route->family != family)
-                        continue;
-                if (route->dst_prefixlen != 0)
-                        continue;
-                if (route->src_prefixlen != 0)
-                        continue;
-                if (route->table != RT_TABLE_MAIN)
-                        continue;
-                if (route->type != RTN_UNICAST)
-                        continue;
-                if (route->scope != RT_SCOPE_UNIVERSE)
-                        continue;
-                if (!in_addr_is_set(route->gw_family, &route->gw))
-                        continue;
-                if (gw) {
-                        if (route->gw_weight > gw->gw_weight)
-                                continue;
-                        if (route->priority >= gw->priority)
-                                continue;
-                }
-                gw = route;
-        }
-
-        return gw;
-}
-
-int manager_find_uplink(Manager *m, int family, Link *exclude, Link **ret) {
-        Route *gw = NULL;
-        Link *link;
-
-        assert(m);
-        assert(IN_SET(family, AF_UNSPEC, AF_INET, AF_INET6));
-
-        /* Looks for a suitable "uplink", via black magic: an interface that is up and where the
-         * default route with the highest priority points to. */
-
-        HASHMAP_FOREACH(link, m->links_by_index) {
-                if (link == exclude)
-                        continue;
-
-                if (link->state != LINK_STATE_CONFIGURED)
-                        continue;
-
-                gw = routes_get_default_gateway(link->routes, family, gw);
-                gw = routes_get_default_gateway(link->routes_foreign, family, gw);
-        }
-
-        if (!gw)
-                return -ENOENT;
-
-        assert(gw->link);
-        *ret = gw->link;
-        return 0;
 }
 
 static void log_route_debug(const Route *route, const char *str, const Link *link, const Manager *manager) {
-        _cleanup_free_ char *dst = NULL, *src = NULL, *gw_alloc = NULL, *prefsrc = NULL,
-                *table = NULL, *scope = NULL, *proto = NULL;
-        const char *gw = NULL;
+        _cleanup_free_ char *state = NULL, *gw_alloc = NULL, *prefsrc = NULL,
+                *table = NULL, *scope = NULL, *proto = NULL, *flags = NULL;
+        const char *gw = NULL, *dst, *src;
 
         assert(route);
         assert(str);
@@ -873,10 +561,13 @@
         if (!DEBUG_LOGGING)
                 return;
 
-        if (in_addr_is_set(route->family, &route->dst))
-                (void) in_addr_prefix_to_string(route->family, &route->dst, route->dst_prefixlen, &dst);
-        if (in_addr_is_set(route->family, &route->src))
-                (void) in_addr_to_string(route->family, &route->src, &src);
+        (void) network_config_state_to_string_alloc(route->state, &state);
+
+        dst = in_addr_is_set(route->family, &route->dst) || route->dst_prefixlen > 0 ?
+                IN_ADDR_PREFIX_TO_STRING(route->family, &route->dst, route->dst_prefixlen) : NULL;
+        src = in_addr_is_set(route->family, &route->src) || route->src_prefixlen > 0 ?
+                IN_ADDR_PREFIX_TO_STRING(route->family, &route->src, route->src_prefixlen) : NULL;
+
         if (in_addr_is_set(route->gw_family, &route->gw)) {
                 (void) in_addr_to_string(route->gw_family, &route->gw, &gw_alloc);
                 gw = gw_alloc;
@@ -897,7 +588,7 @@
                         if (m->ifname)
                                 (void) strextend(&gw_alloc, "@", m->ifname);
                         else if (m->ifindex > 0)
-                                (void) strextendf(&gw_alloc, "@%"PRIu32, m->ifindex);
+                                (void) strextendf(&gw_alloc, "@%i", m->ifindex);
                         /* See comments in config_parse_multipath_route(). */
                         (void) strextendf(&gw_alloc, ":%"PRIu32, m->weight + 1);
                 }
@@ -908,17 +599,19 @@
         (void) route_scope_to_string_alloc(route->scope, &scope);
         (void) manager_get_route_table_to_string(manager, route->table, &table);
         (void) route_protocol_full_to_string_alloc(route->protocol, &proto);
+        (void) route_flags_to_string_alloc(route->flags, &flags);
 
         log_link_debug(link,
-                       "%s route: dst: %s, src: %s, gw: %s, prefsrc: %s, scope: %s, table: %s, proto: %s, type: %s, nexthop: %"PRIu32", priority: %"PRIu32,
-                       str, strna(dst), strna(src), strna(gw), strna(prefsrc),
+                       "%s %s route (%s): dst: %s, src: %s, gw: %s, prefsrc: %s, scope: %s, table: %s, "
+                       "proto: %s, type: %s, nexthop: %"PRIu32", priority: %"PRIu32", flags: %s",
+                       str, strna(network_config_source_to_string(route->source)), strna(state),
+                       strna(dst), strna(src), strna(gw), strna(prefsrc),
                        strna(scope), strna(table), strna(proto),
                        strna(route_type_to_string(route->type)),
-                       route->nexthop_id, route->priority);
+                       route->nexthop_id, route->priority, strna(flags));
 }
 
 static int route_set_netlink_message(const Route *route, sd_netlink_message *req, Link *link) {
-        unsigned flags;
         int r;
 
         assert(route);
@@ -930,7 +623,7 @@
                 if (route->gw_family == route->family) {
                         r = netlink_message_append_in_addr_union(req, RTA_GATEWAY, route->gw_family, &route->gw);
                         if (r < 0)
-                                return log_link_error_errno(link, r, "Could not append RTA_GATEWAY attribute: %m");
+                                return r;
                 } else {
                         RouteVia rtvia = {
                                 .family = route->gw_family,
@@ -939,61 +632,57 @@
 
                         r = sd_netlink_message_append_data(req, RTA_VIA, &rtvia, sizeof(rtvia));
                         if (r < 0)
-                                return log_link_error_errno(link, r, "Could not append RTA_VIA attribute: %m");
+                                return r;
                 }
         }
 
         if (route->dst_prefixlen > 0) {
                 r = netlink_message_append_in_addr_union(req, RTA_DST, route->family, &route->dst);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_DST attribute: %m");
+                        return r;
 
                 r = sd_rtnl_message_route_set_dst_prefixlen(req, route->dst_prefixlen);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set destination prefix length: %m");
+                        return r;
         }
 
         if (route->src_prefixlen > 0) {
                 r = netlink_message_append_in_addr_union(req, RTA_SRC, route->family, &route->src);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_SRC attribute: %m");
+                        return r;
 
                 r = sd_rtnl_message_route_set_src_prefixlen(req, route->src_prefixlen);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set source prefix length: %m");
+                        return r;
         }
 
         if (in_addr_is_set(route->family, &route->prefsrc)) {
                 r = netlink_message_append_in_addr_union(req, RTA_PREFSRC, route->family, &route->prefsrc);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_PREFSRC attribute: %m");
+                        return r;
         }
 
         r = sd_rtnl_message_route_set_scope(req, route->scope);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set scope: %m");
+                return r;
 
-        flags = route->flags;
-        if (route->gateway_onlink >= 0)
-                SET_FLAG(flags, RTNH_F_ONLINK, route->gateway_onlink);
-
-        r = sd_rtnl_message_route_set_flags(req, flags);
+        r = sd_rtnl_message_route_set_flags(req, route->flags & RTNH_F_ONLINK);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set flags: %m");
+                return r;
 
         if (route->table < 256) {
                 r = sd_rtnl_message_route_set_table(req, route->table);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set route table: %m");
+                        return r;
         } else {
                 r = sd_rtnl_message_route_set_table(req, RT_TABLE_UNSPEC);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set route table: %m");
+                        return r;
 
                 /* Table attribute to allow more than 256. */
-                r = sd_netlink_message_append_data(req, RTA_TABLE, &route->table, sizeof(route->table));
+                r = sd_netlink_message_append_u32(req, RTA_TABLE, route->table);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_TABLE attribute: %m");
+                        return r;
         }
 
         if (!route_type_is_reject(route) &&
@@ -1003,36 +692,34 @@
 
                 r = sd_netlink_message_append_u32(req, RTA_OIF, link->ifindex);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_OIF attribute: %m");
+                        return r;
         }
 
         if (route->nexthop_id > 0) {
                 r = sd_netlink_message_append_u32(req, RTA_NH_ID, route->nexthop_id);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_NH_ID attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u8(req, RTA_PREF, route->pref);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append RTA_PREF attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u32(req, RTA_PRIORITY, route->priority);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append RTA_PRIORITY attribute: %m");
+                return r;
 
         return 0;
 }
 
-static int link_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
         int r;
 
         assert(m);
-        assert(link);
-        assert(link->route_remove_messages > 0);
 
-        link->route_remove_messages--;
+        /* link may be NULL. */
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+        if (link && IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
                 return 0;
 
         r = sd_netlink_message_get_errno(m);
@@ -1042,32 +729,19 @@
         return 1;
 }
 
-static int manager_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Manager *manager) {
-        int r;
-
-        assert(m);
-        assert(manager);
-        assert(manager->route_remove_messages > 0);
-
-        manager->route_remove_messages--;
-
-        r = sd_netlink_message_get_errno(m);
-        if (r < 0 && r != -ESRCH)
-                log_message_warning_errno(m, r, "Could not drop route, ignoring");
-
-        return 1;
-}
-
-int route_remove(const Route *route, Manager *manager, Link *link) {
+int route_remove(Route *route) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
         unsigned char type;
+        Manager *manager;
+        Link *link;
         int r;
 
-        assert(link || manager);
+        assert(route);
+        assert(route->manager || (route->link && route->link->manager));
         assert(IN_SET(route->family, AF_INET, AF_INET6));
 
-        if (!manager)
-                manager = link->manager;
+        link = route->link;
+        manager = route->manager ?: link->manager;
 
         log_route_debug(route, "Removing", link, manager);
 
@@ -1075,7 +749,7 @@
                                       RTM_DELROUTE, route->family,
                                       route->protocol);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not create RTM_DELROUTE message: %m");
+                return log_link_error_errno(link, r, "Could not create netlink message: %m");
 
         if (route->family == AF_INET && route->nexthop_id > 0 && route->type == RTN_BLACKHOLE)
                 /* When IPv4 route has nexthop id and the nexthop type is blackhole, even though kernel
@@ -1094,147 +768,215 @@
 
         r = route_set_netlink_message(route, req, link);
         if (r < 0)
-                return r;
+                return log_error_errno(r, "Could not fill netlink message: %m");
 
-        if (link) {
-                r = netlink_call_async(manager->rtnl, NULL, req,
-                                       link_route_remove_handler,
-                                       link_netlink_destroy_callback, link);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
+        r = netlink_call_async(manager->rtnl, NULL, req, route_remove_handler,
+                               link ? link_netlink_destroy_callback : NULL, link);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Could not send netlink message: %m");
 
-                link_ref(link);
-                link->route_remove_messages++;
-        } else {
-                r = netlink_call_async(manager->rtnl, NULL, req,
-                                       manager_route_remove_handler,
-                                       NULL, manager);
-                if (r < 0)
-                        return log_error_errno(r, "Could not send rtnetlink message: %m");
+        link_ref(link);
 
-                manager->route_remove_messages++;
-        }
+        route_enter_removing(route);
+        return 0;
+}
+
+int route_remove_and_drop(Route *route) {
+        if (!route)
+                return 0;
+
+        route_cancel_request(route, NULL);
+
+        if (route_exists(route))
+                return route_remove(route);
+
+        if (route->state == 0)
+                route_free(route);
 
         return 0;
 }
 
-static bool link_has_static_route(const Link *link, const Route *route) {
-        Route *net_route;
-
-        assert(link);
-        assert(route);
-
-        if (!link->network)
-                return false;
-
-        HASHMAP_FOREACH(net_route, link->network->routes_by_section)
-                if (route_equal(net_route, route))
-                        return true;
-
-        return false;
-}
-
-static bool links_have_static_route(const Manager *manager, const Route *route, const Link *except) {
-        Link *link;
-
-        assert(manager);
-
-        HASHMAP_FOREACH(link, manager->links_by_index) {
-                if (link == except)
-                        continue;
-
-                if (link_has_static_route(link, route))
-                        return true;
-        }
-
-        return false;
-}
-
-static int manager_drop_routes_internal(Manager *manager, bool foreign, const Link *except) {
+static void manager_mark_routes(Manager *manager, bool foreign, const Link *except) {
         Route *route;
-        int k, r = 0;
-        Set *routes;
+        Link *link;
+        int r;
 
         assert(manager);
 
-        routes = foreign ? manager->routes_foreign : manager->routes;
-        SET_FOREACH(route, routes) {
-                if (route->removing)
-                        continue;
-
+        /* First, mark all routes. */
+        SET_FOREACH(route, manager->routes) {
                 /* Do not touch routes managed by the kernel. */
                 if (route->protocol == RTPROT_KERNEL)
                         continue;
 
-                /* The route will be configured later, or already configured by a link. */
-                if (links_have_static_route(manager, route, except))
+                /* When 'foreign' is true, mark only foreign routes, and vice versa. */
+                if (foreign != (route->source == NETWORK_CONFIG_SOURCE_FOREIGN))
                         continue;
 
-                /* The existing links do not have the route. Let's drop this now. It may be
-                 * re-configured later. */
-                k = route_remove(route, manager, NULL);
+                /* Do not touch dynamic routes. They will removed by dhcp_pd_prefix_lost() */
+                if (IN_SET(route->source, NETWORK_CONFIG_SOURCE_DHCP4, NETWORK_CONFIG_SOURCE_DHCP6))
+                        continue;
+
+                /* Ignore routes not assigned yet or already removed. */
+                if (!route_exists(route))
+                        continue;
+
+                route_mark(route);
+        }
+
+        /* Then, unmark all routes requested by active links. */
+        HASHMAP_FOREACH(link, manager->links_by_index) {
+                if (link == except)
+                        continue;
+
+                if (!link->network)
+                        continue;
+
+                if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                        continue;
+
+                HASHMAP_FOREACH(route, link->network->routes_by_section) {
+                        _cleanup_(converted_routes_freep) ConvertedRoutes *converted = NULL;
+                        Route *existing;
+
+                        r = route_convert(manager, route, &converted);
+                        if (r < 0)
+                                continue;
+                        if (r == 0) {
+                                if (route_get(manager, NULL, route, &existing) >= 0)
+                                        route_unmark(existing);
+                                continue;
+                        }
+
+                        for (size_t i = 0; i < converted->n; i++)
+                                if (route_get(manager, NULL, converted->routes[i], &existing) >= 0)
+                                        route_unmark(existing);
+                }
+        }
+}
+
+static int manager_drop_marked_routes(Manager *manager) {
+        Route *route;
+        int k, r = 0;
+
+        assert(manager);
+
+        SET_FOREACH(route, manager->routes) {
+                if (!route_is_marked(route))
+                        continue;
+
+                k = route_remove(route);
                 if (k < 0 && r >= 0)
                         r = k;
-
-                route->removing = true;
         }
 
         return r;
 }
 
-static int manager_drop_foreign_routes(Manager *manager) {
-        return manager_drop_routes_internal(manager, true, NULL);
+static bool route_by_kernel(const Route *route) {
+        assert(route);
+
+        if (route->protocol == RTPROT_KERNEL)
+                return true;
+
+        /* The kernels older than a826b04303a40d52439aa141035fca5654ccaccd (v5.11) create the IPv6
+         * multicast with RTPROT_BOOT. Do not touch it. */
+        if (route->protocol == RTPROT_BOOT &&
+            route->family == AF_INET6 &&
+            route->dst_prefixlen == 8 &&
+            in6_addr_equal(&route->dst.in6, & (struct in6_addr) {{{ 0xff,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }}}))
+                return true;
+
+        return false;
 }
 
-static int manager_drop_routes(Manager *manager, const Link *except) {
-        return manager_drop_routes_internal(manager, false, except);
+static void link_unmark_wireguard_routes(Link *link) {
+        Route *route, *existing;
+        Wireguard *w;
+
+        assert(link);
+
+        w = WIREGUARD(link->netdev);
+        if (!w)
+                return;
+
+        SET_FOREACH(route, w->routes)
+                if (route_get(NULL, link, route, &existing) >= 0)
+                        route_unmark(existing);
 }
 
 int link_drop_foreign_routes(Link *link) {
         Route *route;
-        int k, r = 0;
+        int k, r;
 
         assert(link);
         assert(link->manager);
+        assert(link->network);
 
-        SET_FOREACH(route, link->routes_foreign) {
+        SET_FOREACH(route, link->routes) {
                 /* do not touch routes managed by the kernel */
-                if (route->protocol == RTPROT_KERNEL)
+                if (route_by_kernel(route))
                         continue;
 
-                /* do not touch multicast route added by kernel */
-                /* FIXME: Why the kernel adds this route with protocol RTPROT_BOOT??? We need to investigate that.
-                 * https://tools.ietf.org/html/rfc4862#section-5.4 may explain why. */
-                if (route->protocol == RTPROT_BOOT &&
-                    route->family == AF_INET6 &&
-                    route->dst_prefixlen == 8 &&
-                    in_addr_equal(AF_INET6, &route->dst, &(union in_addr_union) { .in6 = {{{ 0xff,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }}} }))
+                /* Do not remove routes we configured. */
+                if (route->source != NETWORK_CONFIG_SOURCE_FOREIGN)
                         continue;
 
-                if (route->protocol == RTPROT_STATIC && link->network &&
+                /* Ignore routes not assigned yet or already removed. */
+                if (!route_exists(route))
+                        continue;
+
+                if (route->protocol == RTPROT_STATIC &&
                     FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_STATIC))
                         continue;
 
-                if (route->protocol == RTPROT_DHCP && link->network &&
+                if (route->protocol == RTPROT_DHCP &&
                     FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP))
                         continue;
 
-                if (link_has_static_route(link, route))
-                        k = route_add(NULL, link, route, NULL, NULL, UINT8_MAX, NULL);
-                else
-                        k = route_remove(route, NULL, link);
+                route_mark(route);
+        }
+
+        HASHMAP_FOREACH(route, link->network->routes_by_section) {
+                _cleanup_(converted_routes_freep) ConvertedRoutes *converted = NULL;
+                Route *existing;
+
+                r = route_convert(link->manager, route, &converted);
+                if (r < 0)
+                        continue;
+                if (r == 0) {
+                        if (route_get(NULL, link, route, &existing) >= 0)
+                                route_unmark(existing);
+                        continue;
+                }
+
+                for (size_t i = 0; i < converted->n; i++)
+                        if (route_get(NULL, link, converted->routes[i], &existing) >= 0)
+                                route_unmark(existing);
+        }
+
+        link_unmark_wireguard_routes(link);
+
+        r = 0;
+        SET_FOREACH(route, link->routes) {
+                if (!route_is_marked(route))
+                        continue;
+
+                k = route_remove(route);
                 if (k < 0 && r >= 0)
                         r = k;
         }
 
-        k = manager_drop_foreign_routes(link->manager);
+        manager_mark_routes(link->manager, /* foreign = */ true, NULL);
+
+        k = manager_drop_marked_routes(link->manager);
         if (k < 0 && r >= 0)
                 r = k;
 
         return r;
 }
 
-int link_drop_routes(Link *link) {
+int link_drop_managed_routes(Link *link) {
         Route *route;
         int k, r = 0;
 
@@ -1242,151 +984,89 @@
 
         SET_FOREACH(route, link->routes) {
                 /* do not touch routes managed by the kernel */
-                if (route->protocol == RTPROT_KERNEL)
+                if (route_by_kernel(route))
                         continue;
 
-                k = route_remove(route, NULL, link);
+                /* Do not touch routes managed by kernel or other tools. */
+                if (route->source == NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
+
+                if (!route_exists(route))
+                        continue;
+
+                k = route_remove(route);
                 if (k < 0 && r >= 0)
                         r = k;
         }
 
-        k = manager_drop_routes(link->manager, link);
+        manager_mark_routes(link->manager, /* foreign = */ false, link);
+
+        k = manager_drop_marked_routes(link->manager);
         if (k < 0 && r >= 0)
                 r = k;
 
         return r;
 }
 
+void link_foreignize_routes(Link *link) {
+        Route *route;
+
+        assert(link);
+
+        SET_FOREACH(route, link->routes)
+                route->source = NETWORK_CONFIG_SOURCE_FOREIGN;
+
+        manager_mark_routes(link->manager, /* foreign = */ false, link);
+
+        SET_FOREACH(route, link->manager->routes) {
+                if (!route_is_marked(route))
+                        continue;
+
+                route->source = NETWORK_CONFIG_SOURCE_FOREIGN;
+        }
+}
+
 static int route_expire_handler(sd_event_source *s, uint64_t usec, void *userdata) {
-        Route *route = userdata;
+        Route *route = ASSERT_PTR(userdata);
+        Link *link;
         int r;
 
-        assert(route);
+        assert(route->manager || (route->link && route->link->manager));
 
-        r = route_remove(route, route->manager, route->link);
+        link = route->link; /* This may be NULL. */
+
+        r = route_remove(route);
         if (r < 0) {
-                log_link_warning_errno(route->link, r, "Could not remove route: %m");
-                route_free(route);
+                log_link_warning_errno(link, r, "Could not remove route: %m");
+                if (link)
+                        link_enter_failed(link);
         }
 
         return 1;
 }
 
-static int route_add_and_setup_timer_one(Link *link, const Route *route, const MultipathRoute *m, const NextHop *nh, uint8_t nh_weight, Route **ret) {
-        _cleanup_(sd_event_source_disable_unrefp) sd_event_source *expire = NULL;
-        Route *nr;
+static int route_setup_timer(Route *route, const struct rta_cacheinfo *cacheinfo) {
+        Manager *manager;
         int r;
 
-        assert(link);
-        assert(link->manager);
         assert(route);
-        assert(!(m && nh));
-        assert(ret);
+        assert(route->manager || (route->link && route->link->manager));
 
-        if (route_type_is_reject(route) || (nh && nh->blackhole))
-                r = route_add(link->manager, NULL, route, NULL, nh, nh_weight, &nr);
-        else if (nh) {
-                assert(nh->link);
-                assert(hashmap_isempty(nh->group));
+        manager = route->manager ?: route->link->manager;
 
-                r = route_add(NULL, nh->link, route, NULL, nh, nh_weight, &nr);
-        } else if (m && m->ifindex != 0 && m->ifindex != link->ifindex) {
-                Link *link_gw;
+        if (route->lifetime_usec == USEC_INFINITY)
+                return 0;
 
-                r = link_get_by_index(link->manager, m->ifindex, &link_gw);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to get link with ifindex %d: %m", m->ifindex);
+        if (cacheinfo && cacheinfo->rta_expires != 0)
+                /* Assume that non-zero rta_expires means kernel will handle the route expiration. */
+                return 0;
 
-                r = route_add(NULL, link_gw, route, m, NULL, UINT8_MAX, &nr);
-        } else
-                r = route_add(NULL, link, route, m, NULL, UINT8_MAX, &nr);
+        r = event_reset_time(manager->event, &route->expire, CLOCK_BOOTTIME,
+                             route->lifetime_usec, 0, route_expire_handler, route, 0, "route-expiration", true);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not add route: %m");
+                return r;
 
-        /* TODO: drop expiration handling once it can be pushed into the kernel */
-        if (nr->lifetime != USEC_INFINITY && !kernel_route_expiration_supported()) {
-                r = sd_event_add_time(link->manager->event, &expire, clock_boottime_or_monotonic(),
-                                      nr->lifetime, 0, route_expire_handler, nr);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not arm expiration timer: %m");
-        }
-
-        sd_event_source_disable_unref(nr->expire);
-        nr->expire = TAKE_PTR(expire);
-
-        *ret = nr;
-        return 0;
-}
-
-static int route_add_and_setup_timer(Link *link, const Route *route, unsigned *ret_n_routes, Route ***ret_routes) {
-        _cleanup_free_ Route **routes = NULL;
-        unsigned n_routes;
-        NextHop *nh;
-        Route **p;
-        int r;
-
-        assert(link);
-        assert(route);
-        assert(ret_n_routes);
-        assert(ret_routes);
-
-        if (route->nexthop_id > 0) {
-                r = manager_get_nexthop_by_id(link->manager, route->nexthop_id, &nh);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not get nexthop by ID %"PRIu32": %m", route->nexthop_id);
-        } else
-                nh = NULL;
-
-        if (nh && !hashmap_isempty(nh->group)) {
-                struct nexthop_grp *nhg;
-
-                n_routes = hashmap_size(nh->group);
-                p = routes = new(Route*, n_routes);
-                if (!routes)
-                        return log_oom();
-
-                HASHMAP_FOREACH(nhg, nh->group) {
-                        NextHop *h;
-
-                        r = manager_get_nexthop_by_id(link->manager, nhg->id, &h);
-                        if (r < 0)
-                                return log_link_error_errno(link, r, "Could not get nexthop group member by ID %"PRIu32": %m", nhg->id);
-
-                        /* The nexthop h may be a blackhole nexthop. In that case, h->link is NULL. */
-                        r = route_add_and_setup_timer_one(h->link ?: link, route, NULL, h, nhg->weight, p++);
-                        if (r < 0)
-                                return r;
-                }
-        } else if (!ordered_set_isempty(route->multipath_routes)) {
-                MultipathRoute *m;
-
-                assert(!nh);
-                assert(!in_addr_is_set(route->gw_family, &route->gw));
-
-                n_routes = ordered_set_size(route->multipath_routes);
-                p = routes = new(Route*, n_routes);
-                if (!routes)
-                        return log_oom();
-
-                ORDERED_SET_FOREACH(m, route->multipath_routes) {
-                        r = route_add_and_setup_timer_one(link, route, m, NULL, UINT8_MAX, p++);
-                        if (r < 0)
-                                return r;
-                }
-        } else {
-                n_routes = 1;
-                routes = new(Route*, n_routes);
-                if (!routes)
-                        return log_oom();
-
-                r = route_add_and_setup_timer_one(link, route, NULL, nh, UINT8_MAX, routes);
-                if (r < 0)
-                        return r;
-        }
-
-        *ret_n_routes = n_routes;
-        *ret_routes = TAKE_PTR(routes);
-        return 0;
+        return 1;
 }
 
 static int append_nexthop_one(const Link *link, const Route *route, const MultipathRoute *m, struct rtattr **rta, size_t offset) {
@@ -1481,9 +1161,6 @@
         assert(link);
         assert(error_msg);
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 0;
-
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
                 log_link_message_warning_errno(link, m, r, "Could not set route");
@@ -1494,139 +1171,332 @@
         return 1;
 }
 
-static int route_configure(
-                const Route *route,
-                Link *link,
-                link_netlink_message_handler_t callback,
-                unsigned *ret_n_routes,
-                Route ***ret_routes) {
-
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
-        _cleanup_free_ Route **routes = NULL;
-        unsigned n_routes = 0;  /* avoid false maybe-uninitialized warning */
+static int route_configure(const Route *route, uint32_t lifetime_sec, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(route);
+        assert(IN_SET(route->family, AF_INET, AF_INET6));
         assert(link);
         assert(link->manager);
         assert(link->manager->rtnl);
         assert(link->ifindex > 0);
-        assert(IN_SET(route->family, AF_INET, AF_INET6));
-        assert(callback);
-        assert(!!ret_n_routes == !!ret_routes);
-
-        if (route_get(link->manager, link, route, NULL) <= 0 &&
-            set_size(link->routes) >= routes_max())
-                return log_link_error_errno(link, SYNTHETIC_ERRNO(E2BIG),
-                                            "Too many routes are configured, refusing: %m");
+        assert(req);
 
         log_route_debug(route, "Configuring", link, link->manager);
 
-        r = sd_rtnl_message_new_route(link->manager->rtnl, &req,
-                                      RTM_NEWROUTE, route->family,
-                                      route->protocol);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not create RTM_NEWROUTE message: %m");
-
-        r = sd_rtnl_message_route_set_type(req, route->type);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not set route type: %m");
-
-        r = route_set_netlink_message(route, req, link);
+        r = sd_rtnl_message_new_route(link->manager->rtnl, &m, RTM_NEWROUTE, route->family, route->protocol);
         if (r < 0)
                 return r;
 
-        if (route->lifetime != USEC_INFINITY && kernel_route_expiration_supported()) {
-                r = sd_netlink_message_append_u32(req, RTA_EXPIRES,
-                        MIN(DIV_ROUND_UP(usec_sub_unsigned(route->lifetime, now(clock_boottime_or_monotonic())), USEC_PER_SEC), UINT32_MAX));
+        r = sd_rtnl_message_route_set_type(m, route->type);
+        if (r < 0)
+                return r;
+
+        r = route_set_netlink_message(route, m, link);
+        if (r < 0)
+                return r;
+
+        if (lifetime_sec != UINT32_MAX) {
+                r = sd_netlink_message_append_u32(m, RTA_EXPIRES, lifetime_sec);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_EXPIRES attribute: %m");
+                        return r;
         }
 
         if (route->ttl_propagate >= 0) {
-                r = sd_netlink_message_append_u8(req, RTA_TTL_PROPAGATE, route->ttl_propagate);
+                r = sd_netlink_message_append_u8(m, RTA_TTL_PROPAGATE, route->ttl_propagate);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_TTL_PROPAGATE attribute: %m");
+                        return r;
         }
 
-        r = sd_netlink_message_open_container(req, RTA_METRICS);
+        r = sd_netlink_message_open_container(m, RTA_METRICS);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append RTA_METRICS attribute: %m");
+                return r;
 
         if (route->mtu > 0) {
-                r = sd_netlink_message_append_u32(req, RTAX_MTU, route->mtu);
+                r = sd_netlink_message_append_u32(m, RTAX_MTU, route->mtu);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTAX_MTU attribute: %m");
+                        return r;
         }
 
         if (route->initcwnd > 0) {
-                r = sd_netlink_message_append_u32(req, RTAX_INITCWND, route->initcwnd);
+                r = sd_netlink_message_append_u32(m, RTAX_INITCWND, route->initcwnd);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTAX_INITCWND attribute: %m");
+                        return r;
         }
 
         if (route->initrwnd > 0) {
-                r = sd_netlink_message_append_u32(req, RTAX_INITRWND, route->initrwnd);
+                r = sd_netlink_message_append_u32(m, RTAX_INITRWND, route->initrwnd);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTAX_INITRWND attribute: %m");
+                        return r;
         }
 
         if (route->quickack >= 0) {
-                r = sd_netlink_message_append_u32(req, RTAX_QUICKACK, route->quickack);
+                r = sd_netlink_message_append_u32(m, RTAX_QUICKACK, route->quickack);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTAX_QUICKACK attribute: %m");
+                        return r;
         }
 
         if (route->fast_open_no_cookie >= 0) {
-                r = sd_netlink_message_append_u32(req, RTAX_FASTOPEN_NO_COOKIE, route->fast_open_no_cookie);
+                r = sd_netlink_message_append_u32(m, RTAX_FASTOPEN_NO_COOKIE, route->fast_open_no_cookie);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTAX_FASTOPEN_NO_COOKIE attribute: %m");
+                        return r;
         }
 
         if (route->advmss > 0) {
-                r = sd_netlink_message_append_u32(req, RTAX_ADVMSS, route->advmss);
+                r = sd_netlink_message_append_u32(m, RTAX_ADVMSS, route->advmss);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTAX_ADVMSS attribute: %m");
+                        return r;
         }
 
-        r = sd_netlink_message_close_container(req);
+        if (!isempty(route->tcp_congestion_control_algo)) {
+                r = sd_netlink_message_append_string(m, RTAX_CC_ALGO, route->tcp_congestion_control_algo);
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_netlink_message_close_container(m);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append RTA_METRICS attribute: %m");
+                return r;
 
         if (!ordered_set_isempty(route->multipath_routes)) {
                 assert(route->nexthop_id == 0);
                 assert(!in_addr_is_set(route->gw_family, &route->gw));
 
-                r = append_nexthops(link, route, req);
+                r = append_nexthops(link, route, m);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append RTA_MULTIPATH attribute: %m");
+                        return r;
         }
 
-        r = route_add_and_setup_timer(link, route, &n_routes, &routes);
-        if (r < 0)
-                return r;
-
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-
-        if (ret_routes) {
-                *ret_n_routes = n_routes;
-                *ret_routes = TAKE_PTR(routes);
-        }
-
-        return r;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-static int static_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int route_is_ready_to_configure(const Route *route, Link *link) {
+        int r;
+
+        assert(route);
+        assert(link);
+
+        if (!link_is_ready_to_configure(link, false))
+                return false;
+
+        if (set_size(link->routes) >= routes_max())
+                return false;
+
+        if (route->nexthop_id > 0) {
+                struct nexthop_grp *nhg;
+                NextHop *nh;
+
+                if (manager_get_nexthop_by_id(link->manager, route->nexthop_id, &nh) < 0)
+                        return false;
+
+                if (!nexthop_exists(nh))
+                        return false;
+
+                HASHMAP_FOREACH(nhg, nh->group) {
+                        NextHop *g;
+
+                        if (manager_get_nexthop_by_id(link->manager, nhg->id, &g) < 0)
+                                return false;
+
+                        if (!nexthop_exists(g))
+                                return false;
+                }
+        }
+
+        if (in_addr_is_set(route->family, &route->prefsrc) > 0) {
+                r = manager_has_address(link->manager, route->family, &route->prefsrc, route->family == AF_INET6);
+                if (r <= 0)
+                        return r;
+        }
+
+        if (!gateway_is_ready(link, FLAGS_SET(route->flags, RTNH_F_ONLINK), route->gw_family, &route->gw))
+                return false;
+
+        MultipathRoute *m;
+        ORDERED_SET_FOREACH(m, route->multipath_routes) {
+                union in_addr_union a = m->gateway.address;
+                Link *l = NULL;
+
+                r = multipath_route_get_link(link->manager, m, &l);
+                if (r < 0)
+                        return false;
+                if (r > 0) {
+                        if (!link_is_ready_to_configure(l, /* allow_unmanaged = */ true) ||
+                            !link_has_carrier(l))
+                                return false;
+
+                        m->ifindex = l->ifindex;
+                }
+
+                if (!gateway_is_ready(l ?: link, FLAGS_SET(route->flags, RTNH_F_ONLINK), m->gateway.family, &a))
+                        return false;
+        }
+
+        return true;
+}
+
+static int route_process_request(Request *req, Link *link, Route *route) {
+        _cleanup_(converted_routes_freep) ConvertedRoutes *converted = NULL;
+        int r;
+
+        assert(req);
+        assert(link);
+        assert(link->manager);
+        assert(route);
+
+        r = route_is_ready_to_configure(route, link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to check if route is ready to configure: %m");
+        if (r == 0)
+                return 0;
+
+        if (route_needs_convert(route)) {
+                r = route_convert(link->manager, route, &converted);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to convert route: %m");
+
+                assert(r > 0);
+                assert(converted);
+
+                for (size_t i = 0; i < converted->n; i++) {
+                        Route *existing;
+
+                        if (route_get(link->manager, converted->links[i] ?: link, converted->routes[i], &existing) < 0) {
+                                _cleanup_(route_freep) Route *tmp = NULL;
+
+                                r = route_dup(converted->routes[i], &tmp);
+                                if (r < 0)
+                                        return log_oom();
+
+                                r = route_add(link->manager, converted->links[i] ?: link, tmp);
+                                if (r < 0)
+                                        return log_link_warning_errno(link, r, "Failed to add route: %m");
+
+                                TAKE_PTR(tmp);
+                        } else {
+                                existing->source = converted->routes[i]->source;
+                                existing->provider = converted->routes[i]->provider;
+                        }
+                }
+        }
+
+        usec_t now_usec;
+        assert_se(sd_event_now(link->manager->event, CLOCK_BOOTTIME, &now_usec) >= 0);
+        uint32_t sec = usec_to_sec(route->lifetime_usec, now_usec);
+        if (sec == 0) {
+                log_link_debug(link, "Refuse to configure %s route with zero lifetime.",
+                               network_config_source_to_string(route->source));
+
+                if (converted)
+                        for (size_t i = 0; i < converted->n; i++) {
+                                Route *existing;
+
+                                assert_se(route_get(link->manager, converted->links[i] ?: link, converted->routes[i], &existing) >= 0);
+                                route_cancel_requesting(existing);
+                        }
+                else
+                        route_cancel_requesting(route);
+
+                return 1;
+        }
+
+        r = route_configure(route, sec, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure route: %m");
+
+        if (converted)
+                for (size_t i = 0; i < converted->n; i++) {
+                        Route *existing;
+
+                        assert_se(route_get(link->manager, converted->links[i] ?: link, converted->routes[i], &existing) >= 0);
+                        route_enter_configuring(existing);
+                }
+        else
+                route_enter_configuring(route);
+
+        return 1;
+}
+
+int link_request_route(
+                Link *link,
+                Route *route,
+                bool consume_object,
+                unsigned *message_counter,
+                route_netlink_handler_t netlink_handler,
+                Request **ret) {
+
+        Route *existing = NULL;
         int r;
 
         assert(link);
-        assert(link->static_route_messages > 0);
+        assert(link->manager);
+        assert(route);
+        assert(route->source != NETWORK_CONFIG_SOURCE_FOREIGN);
+        assert(!route_needs_convert(route));
 
-        link->static_route_messages--;
+        (void) route_get(link->manager, link, route, &existing);
+
+        if (route->lifetime_usec == 0) {
+                if (consume_object)
+                        route_free(route);
+
+                /* The requested route is outdated. Let's remove it. */
+                return route_remove_and_drop(existing);
+        }
+
+        if (!existing) {
+                _cleanup_(route_freep) Route *tmp = NULL;
+
+                if (consume_object)
+                        tmp = route;
+                else {
+                        r = route_dup(route, &tmp);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = route_add(link->manager, link, tmp);
+                if (r < 0)
+                        return r;
+
+                existing = TAKE_PTR(tmp);
+        } else {
+                existing->source = route->source;
+                existing->provider = route->provider;
+                existing->lifetime_usec = route->lifetime_usec;
+                if (consume_object)
+                        route_free(route);
+
+                if (existing->expire) {
+                        /* When re-configuring an existing route, kernel does not send RTM_NEWROUTE
+                         * message, so we need to update the timer here. */
+                        r = route_setup_timer(existing, NULL);
+                        if (r < 0)
+                                log_link_warning_errno(link, r, "Failed to update expiration timer for route, ignoring: %m");
+                        if (r > 0)
+                                log_route_debug(existing, "Updated expiration timer for", link, link->manager);
+                }
+        }
+
+        log_route_debug(existing, "Requesting", link, link->manager);
+        r = link_queue_request_safe(link, REQUEST_TYPE_ROUTE,
+                                    existing, NULL,
+                                    route_hash_func,
+                                    route_compare_func,
+                                    route_process_request,
+                                    message_counter, netlink_handler, ret);
+        if (r <= 0)
+                return r;
+
+        route_enter_requesting(existing);
+        return 1;
+}
+
+static int static_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) {
+        int r;
+
+        assert(link);
 
         r = route_configure_handler_internal(rtnl, m, link, "Could not set route");
         if (r <= 0)
@@ -1641,21 +1511,50 @@
         return 1;
 }
 
-int link_request_route(
-                Link *link,
-                Route *route,
-                bool consume_object,
-                unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
-                Request **ret) {
-
+static int link_request_static_route(Link *link, Route *route) {
         assert(link);
         assert(link->manager);
         assert(route);
 
+        if (!route_needs_convert(route))
+                return link_request_route(link, route, false, &link->static_route_messages,
+                                          static_route_handler, NULL);
+
         log_route_debug(route, "Requesting", link, link->manager);
-        return link_queue_request(link, REQUEST_TYPE_ROUTE, route, consume_object,
-                                  message_counter, netlink_handler, ret);
+        return link_queue_request_safe(link, REQUEST_TYPE_ROUTE,
+                                       route, NULL, route_hash_func, route_compare_func,
+                                       route_process_request,
+                                       &link->static_route_messages, static_route_handler, NULL);
+}
+
+static int link_request_wireguard_routes(Link *link, bool only_ipv4) {
+        NetDev *netdev;
+        Wireguard *w;
+        Route *route;
+        int r;
+
+        assert(link);
+
+        if (!streq_ptr(link->kind, "wireguard"))
+                return 0;
+
+        if (netdev_get(link->manager, link->ifname, &netdev) < 0)
+                return 0;
+
+        w = WIREGUARD(netdev);
+        if (!w)
+                return 0;
+
+        SET_FOREACH(route, w->routes) {
+                if (only_ipv4 && route->family != AF_INET)
+                        continue;
+
+                r = link_request_static_route(link, route);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
 }
 
 int link_request_static_routes(Link *link, bool only_ipv4) {
@@ -1674,12 +1573,15 @@
                 if (only_ipv4 && route->family != AF_INET)
                         continue;
 
-                r = link_request_route(link, route, false, &link->static_route_messages,
-                                       static_route_handler, NULL);
+                r = link_request_static_route(link, route);
                 if (r < 0)
                         return r;
         }
 
+        r = link_request_wireguard_routes(link, only_ipv4);
+        if (r < 0)
+                return r;
+
         if (link->static_route_messages == 0) {
                 link->static_routes_configured = true;
                 link_check_ready(link);
@@ -1691,225 +1593,111 @@
         return 0;
 }
 
-bool gateway_is_ready(Link *link, int onlink, int family, const union in_addr_union *gw) {
-        assert(link);
-        assert(gw);
-
-        if (onlink > 0)
-                return true;
-
-        if (!in_addr_is_set(family, gw))
-                return true;
-
-        if (family == AF_INET6 && in6_addr_is_link_local(&gw->in6))
-                return true;
-
-        return link_address_is_reachable(link, family, gw);
-}
-
-static int route_is_ready_to_configure(const Route *route, Link *link) {
-        MultipathRoute *m;
-        NextHop *nh = NULL;
-        int r;
+void route_cancel_request(Route *route, Link *link) {
+        Request req;
 
         assert(route);
+
+        link = route->link ?: link;
+
         assert(link);
 
-        if (route->nexthop_id > 0) {
-                struct nexthop_grp *nhg;
+        if (!route_is_requesting(route))
+                return;
 
-                if (manager_get_nexthop_by_id(link->manager, route->nexthop_id, &nh) < 0)
-                        return false;
+        req = (Request) {
+                .link = link,
+                .type = REQUEST_TYPE_ROUTE,
+                .userdata = route,
+                .hash_func = (hash_func_t) route_hash_func,
+                .compare_func = (compare_func_t) route_compare_func,
+        };
 
-                HASHMAP_FOREACH(nhg, nh->group)
-                        if (manager_get_nexthop_by_id(link->manager, nhg->id, NULL) < 0)
-                                return false;
-        }
-
-        if (route_type_is_reject(route) || (nh && nh->blackhole)) {
-                if (nh && link->manager->nexthop_remove_messages > 0)
-                        return false;
-                if (link->manager->route_remove_messages > 0)
-                        return false;
-        } else {
-                Link *l;
-
-                HASHMAP_FOREACH(l, link->manager->links_by_index) {
-                        if (l->address_remove_messages > 0)
-                                return false;
-                        if (l->nexthop_remove_messages > 0)
-                                return false;
-                        if (l->route_remove_messages > 0)
-                                return false;
-                }
-        }
-
-        if (in_addr_is_set(route->family, &route->prefsrc) > 0) {
-                r = manager_has_address(link->manager, route->family, &route->prefsrc, route->family == AF_INET6);
-                if (r <= 0)
-                        return r;
-        }
-
-        if (!gateway_is_ready(link, route->gateway_onlink, route->gw_family, &route->gw))
-                return false;
-
-        ORDERED_SET_FOREACH(m, route->multipath_routes) {
-                union in_addr_union a = m->gateway.address;
-                Link *l = NULL;
-
-                if (m->ifname) {
-                        if (link_get_by_name(link->manager, m->ifname, &l) < 0)
-                                return false;
-
-                        m->ifindex = l->ifindex;
-                } else if (m->ifindex > 0) {
-                        if (link_get_by_index(link->manager, m->ifindex, &l) < 0)
-                                return false;
-                }
-                if (l && !link_is_ready_to_configure(l, true))
-                        return false;
-
-                if (!gateway_is_ready(l ?: link, route->gateway_onlink, m->gateway.family, &a))
-                        return false;
-        }
-
-        return true;
+        request_detach(link->manager, &req);
+        route_cancel_requesting(route);
 }
 
-int request_process_route(Request *req) {
-        _cleanup_free_ Route **routes = NULL;
-        unsigned n_routes;
-        int r;
+static int process_route_one(
+                Manager *manager,
+                Link *link,
+                uint16_t type,
+                Route *in,
+                const struct rta_cacheinfo *cacheinfo) {
 
-        assert(req);
-        assert(req->link);
-        assert(req->route);
-        assert(req->type == REQUEST_TYPE_ROUTE);
-
-        if (!link_is_ready_to_configure(req->link, false))
-                return 0;
-
-        r = route_is_ready_to_configure(req->route, req->link);
-        if (r <= 0)
-                return r;
-
-        r = route_configure(req->route, req->link, req->netlink_handler,
-                            req->after_configure ? &n_routes : NULL,
-                            req->after_configure ? &routes : NULL);
-        if (r < 0)
-                return r;
-
-        /* To prevent a double decrement on failure in after_configure(). */
-        req->message_counter = NULL;
-
-        if (req->after_configure) {
-                assert(n_routes > 0);
-
-                for (unsigned i = 0; i < n_routes; i++) {
-                        r = req->after_configure(req, routes[i]);
-                        if (r < 0)
-                                return r;
-                }
-        }
-
-        return 1;
-}
-
-static int process_route_one(Manager *manager, Link *link, uint16_t type, const Route *tmp, const MultipathRoute *m) {
-        _cleanup_(route_freep) Route *nr = NULL;
+        _cleanup_(route_freep) Route *tmp = in;
         Route *route = NULL;
-        NextHop *nh = NULL;
         int r;
 
         assert(manager);
         assert(tmp);
         assert(IN_SET(type, RTM_NEWROUTE, RTM_DELROUTE));
 
-        (void) manager_get_nexthop_by_id(manager, tmp->nexthop_id, &nh);
-
-        if (nh && hashmap_isempty(nh->group)) {
-                if (link && nh->link && link != nh->link)
-                        return log_link_warning_errno(link, SYNTHETIC_ERRNO(EINVAL),
-                                                      "rtnl: received RTA_OIF and ifindex of nexthop corresponding to RTA_NH_ID do not match, ignoring.");
-
-                if (nh->link)
-                        link = nh->link;
-
-                r = route_new(&nr);
-                if (r < 0)
-                        return log_oom();
-
-                route_copy(nr, tmp, NULL, nh, UINT8_MAX);
-
-                tmp = nr;
-        } else if (m) {
-                if (link)
-                        return log_link_warning_errno(link, SYNTHETIC_ERRNO(EINVAL),
-                                                "rtnl: received route contains both RTA_OIF and RTA_MULTIPATH, ignoring.");
-
-                if (m->ifindex <= 0)
-                        return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                 "rtnl: received multipath route with invalid ifindex, ignoring.");
-
-                r = link_get_by_index(manager, m->ifindex, &link);
-                if (r < 0) {
-                        log_warning_errno(r, "rtnl: received multipath route for link (%d) we do not know, ignoring: %m", m->ifindex);
-                        return 0;
-                }
-
-                r = route_new(&nr);
-                if (r < 0)
-                        return log_oom();
-
-                route_copy(nr, tmp, m, NULL, UINT8_MAX);
-
-                tmp = nr;
-        }
+        /* link may be NULL. This consumes 'in'. */
 
         (void) route_get(manager, link, tmp, &route);
 
         switch (type) {
         case RTM_NEWROUTE:
-                if (!route) {
-                        if (!manager->manage_foreign_routes)
-                                log_route_debug(tmp, "Ignoring received foreign", link, manager);
-                        else {
-                                /* A route appeared that we did not request */
-                                log_route_debug(tmp, "Remembering foreign", link, manager);
-                                r = route_add_foreign(manager, link, tmp, NULL);
-                                if (r < 0) {
-                                        log_link_warning_errno(link, r, "Failed to remember foreign route, ignoring: %m");
-                                        return 0;
-                                }
+                if (route) {
+                        route->flags = tmp->flags;
+                        route_enter_configured(route);
+                        log_route_debug(route, "Received remembered", link, manager);
+
+                        r = route_setup_timer(route, cacheinfo);
+                        if (r < 0)
+                                log_link_warning_errno(link, r, "Failed to configure expiration timer for route, ignoring: %m");
+                        if (r > 0)
+                                log_route_debug(route, "Configured expiration timer for", link, manager);
+
+                } else if (!manager->manage_foreign_routes) {
+                        route_enter_configured(tmp);
+                        log_route_debug(tmp, "Ignoring received", link, manager);
+
+                } else {
+                        /* A route appeared that we did not request */
+                        route_enter_configured(tmp);
+                        log_route_debug(tmp, "Received new", link, manager);
+                        r = route_add(manager, link, tmp);
+                        if (r < 0) {
+                                log_link_warning_errno(link, r, "Failed to remember foreign route, ignoring: %m");
+                                return 0;
                         }
-                } else
-                        log_route_debug(tmp, "Received remembered", link, manager);
+                        TAKE_PTR(tmp);
+                }
 
                 break;
 
         case RTM_DELROUTE:
-                log_route_debug(tmp,
-                                route ? "Forgetting" :
-                                manager->manage_foreign_routes ? "Kernel removed unknown" : "Ignoring received foreign",
-                                link, manager);
-                route_free(route);
+                if (route) {
+                        route_enter_removed(route);
+                        if (route->state == 0) {
+                                log_route_debug(route, "Forgetting", link, manager);
+                                route_free(route);
+                        } else
+                                log_route_debug(route, "Removed", link, manager);
+                } else
+                        log_route_debug(tmp,
+                                        manager->manage_foreign_routes ? "Kernel removed unknown" : "Ignoring received",
+                                        link, manager);
+
                 break;
 
         default:
-                assert_not_reached("Received route message with invalid RTNL message type");
+                assert_not_reached();
         }
 
         return 1;
 }
 
 int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
-        _cleanup_ordered_set_free_free_ OrderedSet *multipath_routes = NULL;
+        _cleanup_(converted_routes_freep) ConvertedRoutes *converted = NULL;
         _cleanup_(route_freep) Route *tmp = NULL;
         _cleanup_free_ void *rta_multipath = NULL;
+        struct rta_cacheinfo cacheinfo;
+        bool has_cacheinfo;
         Link *link = NULL;
         uint32_t ifindex;
         uint16_t type;
-        unsigned char table;
         size_t rta_len;
         int r;
 
@@ -1940,7 +1728,7 @@
                 return 0;
         } else if (r >= 0) {
                 if (ifindex <= 0) {
-                        log_warning("rtnl: received route message with invalid ifindex %d, ignoring.", ifindex);
+                        log_warning("rtnl: received route message with invalid ifindex %u, ignoring.", ifindex);
                         return 0;
                 }
 
@@ -1949,7 +1737,7 @@
                         /* when enumerating we might be out of sync, but we will
                          * get the route again, so just ignore it */
                         if (!m->enumerating)
-                                log_warning("rtnl: received route message for link (%d) we do not know about, ignoring", ifindex);
+                                log_warning("rtnl: received route message for link (%u) we do not know about, ignoring", ifindex);
                         return 0;
                 }
         }
@@ -1969,7 +1757,13 @@
 
         r = sd_rtnl_message_route_get_protocol(message, &tmp->protocol);
         if (r < 0) {
-                log_warning_errno(r, "rtnl: received route message without route protocol: %m");
+                log_warning_errno(r, "rtnl: received route message without route protocol, ignoring: %m");
+                return 0;
+        }
+
+        r = sd_rtnl_message_route_get_flags(message, &tmp->flags);
+        if (r < 0) {
+                log_warning_errno(r, "rtnl: received route message without route flags, ignoring: %m");
                 return 0;
         }
 
@@ -2040,12 +1834,18 @@
                 return 0;
         }
 
-        r = sd_rtnl_message_route_get_table(message, &table);
+        r = sd_netlink_message_read_u32(message, RTA_TABLE, &tmp->table);
+        if (r == -ENODATA) {
+                unsigned char table;
+
+                r = sd_rtnl_message_route_get_table(message, &table);
+                if (r >= 0)
+                        tmp->table = table;
+        }
         if (r < 0) {
                 log_link_warning_errno(link, r, "rtnl: received route message with invalid table, ignoring: %m");
                 return 0;
         }
-        tmp->table = table;
 
         r = sd_netlink_message_read_u32(message, RTA_PRIORITY, &tmp->priority);
         if (r < 0 && r != -ENODATA) {
@@ -2061,7 +1861,7 @@
 
         r = sd_netlink_message_enter_container(message, RTA_METRICS);
         if (r < 0 && r != -ENODATA) {
-                log_link_error_errno(link, r, "rtnl: Could not enter RTA_METRICS container: %m");
+                log_link_error_errno(link, r, "rtnl: Could not enter RTA_METRICS container, ignoring: %m");
                 return 0;
         }
         if (r >= 0) {
@@ -2085,7 +1885,7 @@
 
                 r = sd_netlink_message_exit_container(message);
                 if (r < 0) {
-                        log_link_error_errno(link, r, "rtnl: Could not exit from RTA_METRICS container: %m");
+                        log_link_error_errno(link, r, "rtnl: Could not exit from RTA_METRICS container, ignoring: %m");
                         return 0;
                 }
         }
@@ -2095,31 +1895,45 @@
                 log_link_warning_errno(link, r, "rtnl: failed to read RTA_MULTIPATH attribute, ignoring: %m");
                 return 0;
         } else if (r >= 0) {
-                r = rtattr_read_nexthop(rta_multipath, rta_len, tmp->family, &multipath_routes);
+                r = rtattr_read_nexthop(rta_multipath, rta_len, tmp->family, &tmp->multipath_routes);
                 if (r < 0) {
                         log_link_warning_errno(link, r, "rtnl: failed to parse RTA_MULTIPATH attribute, ignoring: %m");
                         return 0;
                 }
         }
 
+        r = sd_netlink_message_read(message, RTA_CACHEINFO, sizeof(cacheinfo), &cacheinfo);
+        if (r < 0 && r != -ENODATA) {
+                log_link_warning_errno(link, r, "rtnl: failed to read RTA_CACHEINFO attribute, ignoring: %m");
+                return 0;
+        }
+        has_cacheinfo = r >= 0;
+
         /* IPv6 routes with reject type are always assigned to the loopback interface. See kernel's
          * fib6_nh_init() in net/ipv6/route.c. However, we'd like to manage them by Manager. Hence, set
          * link to NULL here. */
         if (route_type_is_reject(tmp))
                 link = NULL;
 
-        if (ordered_set_isempty(multipath_routes))
-                (void) process_route_one(m, link, type, tmp, NULL);
-        else {
-                MultipathRoute *mr;
+        if (!route_needs_convert(tmp))
+                return process_route_one(m, link, type, TAKE_PTR(tmp), has_cacheinfo ? &cacheinfo : NULL);
 
-                ORDERED_SET_FOREACH(mr, multipath_routes) {
-                        r = process_route_one(m, link, type, tmp, mr);
-                        if (r < 0)
-                                break;
-                }
+        r = route_convert(m, tmp, &converted);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "rtnl: failed to convert received route, ignoring: %m");
+                return 0;
         }
 
+        assert(r > 0);
+        assert(converted);
+
+        for (size_t i = 0; i < converted->n; i++)
+                (void) process_route_one(m,
+                                         converted->links[i] ?: link,
+                                         type,
+                                         TAKE_PTR(converted->routes[i]),
+                                         has_cacheinfo ? &cacheinfo : NULL);
+
         return 1;
 }
 
@@ -2350,7 +2164,7 @@
                 buffer = &n->src;
                 prefixlen = &n->src_prefixlen;
         } else
-                assert_not_reached(lvalue);
+                assert_not_reached();
 
         if (n->family == AF_UNSPEC)
                 r = in_addr_prefix_from_string_auto(rvalue, &n->family, buffer, prefixlen);
@@ -2362,6 +2176,8 @@
                 return 0;
         }
 
+        (void) in_addr_mask(n->family, buffer, *prefixlen);
+
         TAKE_PTR(n);
         return 0;
 }
@@ -2539,7 +2355,7 @@
         r = manager_get_route_table_from_string(network->manager, rvalue, &n->table);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Could not parse route table number \"%s\", ignoring assignment: %m", rvalue);
+                           "Could not parse route table \"%s\", ignoring assignment: %m", rvalue);
                 return 0;
         }
 
@@ -2595,7 +2411,7 @@
         else if (streq(lvalue, "TTLPropagate"))
                 n->ttl_propagate = r;
         else
-                assert_not_reached("Invalid lvalue");
+                assert_not_reached();
 
         TAKE_PTR(n);
         return 0;
@@ -2718,6 +2534,46 @@
         return 0;
 }
 
+int config_parse_tcp_congestion(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Network *network = userdata;
+        _cleanup_(route_free_or_set_invalidp) Route *n = NULL;
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+        assert(data);
+
+        r = route_new_static(network, filename, section_line, &n);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to allocate route, ignoring assignment: %m");
+                return 0;
+        }
+
+        r = config_parse_string(unit, filename, line, section, section_line, lvalue, ltype,
+                                rvalue, &n->tcp_congestion_control_algo, userdata);
+        if (r < 0)
+                return r;
+
+        TAKE_PTR(n);
+        return 0;
+}
+
 int config_parse_tcp_advmss(
                 const char *unit,
                 const char *filename,
@@ -2829,7 +2685,7 @@
         else if (streq(lvalue, "InitialAdvertisedReceiveWindow"))
                 n->initrwnd = k;
         else
-                assert_not_reached("Invalid TCP window type.");
+                assert_not_reached();
 
         TAKE_PTR(n);
         return 0;
@@ -2991,116 +2847,13 @@
         return 0;
 }
 
-int config_parse_route_table_names(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        Manager *m = userdata;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(userdata);
-
-        if (isempty(rvalue)) {
-                m->route_table_names_by_number = hashmap_free(m->route_table_names_by_number);
-                m->route_table_numbers_by_name = hashmap_free(m->route_table_numbers_by_name);
-                return 0;
-        }
-
-        for (const char *p = rvalue;;) {
-                _cleanup_free_ char *name = NULL;
-                uint32_t table;
-                char *num;
-
-                r = extract_first_word(&p, &name, NULL, 0);
-                if (r == -ENOMEM)
-                        return log_oom();
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Invalid RouteTable=, ignoring assignment: %s", rvalue);
-                        return 0;
-                }
-                if (r == 0)
-                        return 0;
-
-                num = strchr(name, ':');
-                if (!num) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "Invalid route table name and number pair, ignoring assignment: %s", name);
-                        continue;
-                }
-
-                *num++ = '\0';
-
-                if (STR_IN_SET(name, "default", "main", "local")) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "Route table name %s already predefined. Ignoring assignment: %s:%s", name, name, num);
-                        continue;
-                }
-
-                r = safe_atou32(num, &table);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Failed to parse route table number '%s', ignoring assignment: %s:%s", num, name, num);
-                        continue;
-                }
-                if (table == 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "Invalid route table number, ignoring assignment: %s:%s", name, num);
-                        continue;
-                }
-
-                r = hashmap_ensure_put(&m->route_table_numbers_by_name, &string_hash_ops_free, name, UINT32_TO_PTR(table));
-                if (r == -ENOMEM)
-                        return log_oom();
-                if (r == -EEXIST) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Specified route table name and number pair conflicts with others, ignoring assignment: %s:%s", name, num);
-                        continue;
-                }
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Failed to store route table name and number pair, ignoring assignment: %s:%s", name, num);
-                        continue;
-                }
-                if (r == 0)
-                        /* The entry is duplicated. It should not be added to route_table_names_by_number hashmap. */
-                        continue;
-
-                r = hashmap_ensure_put(&m->route_table_names_by_number, NULL, UINT32_TO_PTR(table), name);
-                if (r < 0) {
-                        hashmap_remove(m->route_table_numbers_by_name, name);
-
-                        if (r == -ENOMEM)
-                                return log_oom();
-                        if (r == -EEXIST)
-                                log_syntax(unit, LOG_WARNING, filename, line, r,
-                                           "Specified route table name and number pair conflicts with others, ignoring assignment: %s:%s", name, num);
-                        else
-                                log_syntax(unit, LOG_WARNING, filename, line, r,
-                                           "Failed to store route table name and number pair, ignoring assignment: %s:%s", name, num);
-                        continue;
-                }
-                assert(r > 0);
-
-                TAKE_PTR(name);
-        }
-}
-
 static int route_section_verify(Route *route, Network *network) {
         if (section_is_invalid(route->section))
                 return -EINVAL;
 
+        /* Currently, we do not support static route with finite lifetime. */
+        assert(route->lifetime_usec == USEC_INFINITY);
+
         if (route->gateway_from_dhcp_or_ra) {
                 if (route->gw_family == AF_UNSPEC) {
                         /* When deprecated Gateway=_dhcp is set, then assume gateway family based on other settings. */
@@ -3171,6 +2924,12 @@
                         route->scope = RT_SCOPE_HOST;
                 else if (IN_SET(route->type, RTN_BROADCAST, RTN_ANYCAST, RTN_MULTICAST))
                         route->scope = RT_SCOPE_LINK;
+                else if (IN_SET(route->type, RTN_UNICAST, RTN_UNSPEC) &&
+                         !route->gateway_from_dhcp_or_ra &&
+                         !in_addr_is_set(route->gw_family, &route->gw) &&
+                         ordered_set_isempty(route->multipath_routes) &&
+                         route->nexthop_id == 0)
+                        route->scope = RT_SCOPE_LINK;
         }
 
         if (route->scope != RT_SCOPE_UNIVERSE && route->family == AF_INET6) {
@@ -3191,6 +2950,9 @@
                 route->gateway_onlink = true;
         }
 
+        if (route->gateway_onlink >= 0)
+                SET_FLAG(route->flags, RTNH_F_ONLINK, route->gateway_onlink);
+
         if (route->family == AF_INET6) {
                 MultipathRoute *m;
 
diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h
index 235a91f..5fc76b1 100644
--- a/src/network/networkd-route.h
+++ b/src/network/networkd-route.h
@@ -14,13 +14,22 @@
 typedef struct Manager Manager;
 typedef struct Network Network;
 typedef struct Request Request;
+typedef struct Route Route;
+typedef int (*route_netlink_handler_t)(
+                sd_netlink *rtnl,
+                sd_netlink_message *m,
+                Request *req,
+                Link *link,
+                Route *route);
 
-typedef struct Route {
-        Network *network;
-        NetworkConfigSection *section;
-
+struct Route {
         Link *link;
         Manager *manager;
+        Network *network;
+        ConfigSection *section;
+        NetworkConfigSource source;
+        NetworkConfigState state;
+        union in_addr_union provider; /* DHCP server or router address */
 
         int family;
         int gw_family;
@@ -41,9 +50,10 @@
         uint32_t initcwnd;
         uint32_t initrwnd;
         uint32_t advmss;
+        char *tcp_congestion_control_algo;
         unsigned char pref;
         unsigned flags;
-        int gateway_onlink;
+        int gateway_onlink; /* Only used in conf parser and route_section_verify(). */
         uint32_t nexthop_id;
 
         bool scope_set:1;
@@ -52,7 +62,6 @@
         bool protocol_set:1;
         bool pref_set:1;
         bool gateway_from_dhcp_or_ra:1;
-        bool removing:1;
 
         union in_addr_union gw;
         union in_addr_union dst;
@@ -60,42 +69,39 @@
         union in_addr_union prefsrc;
         OrderedSet *multipath_routes;
 
-        usec_t lifetime;
+        /* This is an absolute point in time, and NOT a timespan/duration.
+         * Must be specified with clock_boottime_or_monotonic(). */
+        usec_t lifetime_usec;
+        /* Used when kernel does not support RTA_EXPIRES attribute. */
         sd_event_source *expire;
-} Route;
+};
 
-void route_hash_func(const Route *route, struct siphash *state);
-int route_compare_func(const Route *a, const Route *b);
-bool route_equal(const Route *r1, const Route *r2);
 extern const struct hash_ops route_hash_ops;
 
 int route_new(Route **ret);
 Route *route_free(Route *route);
-DEFINE_NETWORK_SECTION_FUNCTIONS(Route, route_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(Route, route_free);
 int route_dup(const Route *src, Route **ret);
 
 int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
-int route_remove(const Route *route, Manager *manager, Link *link);
+int route_remove(Route *route);
+int route_remove_and_drop(Route *route);
 
-int link_has_route(Link *link, const Route *route);
-int manager_find_uplink(Manager *m, int family, Link *exclude, Link **ret);
-bool gateway_is_ready(Link *link, int onlink, int family, const union in_addr_union *gw);
+int route_get(Manager *manager, Link *link, const Route *in, Route **ret);
 
-int link_drop_routes(Link *link);
+int link_drop_managed_routes(Link *link);
 int link_drop_foreign_routes(Link *link);
+void link_foreignize_routes(Link *link);
 
-uint32_t link_get_dhcp_route_table(const Link *link);
-uint32_t link_get_ipv6_accept_ra_route_table(const Link *link);
-
+void route_cancel_request(Route *route, Link *link);
 int link_request_route(
                 Link *link,
                 Route *route,
                 bool consume_object,
                 unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
+                route_netlink_handler_t netlink_handler,
                 Request **ret);
 int link_request_static_routes(Link *link, bool only_ipv4);
-int request_process_route(Request *req);
 
 int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
 
@@ -103,8 +109,8 @@
 int network_add_default_route_on_device(Network *network);
 void network_drop_invalid_routes(Network *network);
 
-int manager_get_route_table_from_string(const Manager *m, const char *table, uint32_t *ret);
-int manager_get_route_table_to_string(const Manager *m, uint32_t table, char **ret);
+DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(Route, route);
+void link_mark_routes(Link *link, NetworkConfigSource source);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_gateway);
 CONFIG_PARSER_PROTOTYPE(config_parse_preferred_src);
@@ -119,6 +125,6 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_tcp_window);
 CONFIG_PARSER_PROTOTYPE(config_parse_route_mtu);
 CONFIG_PARSER_PROTOTYPE(config_parse_multipath_route);
+CONFIG_PARSER_PROTOTYPE(config_parse_tcp_congestion);
 CONFIG_PARSER_PROTOTYPE(config_parse_tcp_advmss);
-CONFIG_PARSER_PROTOTYPE(config_parse_route_table_names);
 CONFIG_PARSER_PROTOTYPE(config_parse_route_nexthop);
diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c
index b7e0fd7..130ed5e 100644
--- a/src/network/networkd-routing-policy-rule.c
+++ b/src/network/networkd-routing-policy-rule.c
@@ -13,7 +13,7 @@
 #include "netlink-util.h"
 #include "networkd-manager.h"
 #include "networkd-queue.h"
-#include "networkd-route.h"
+#include "networkd-route-util.h"
 #include "networkd-routing-policy-rule.h"
 #include "networkd-util.h"
 #include "parse-util.h"
@@ -29,8 +29,18 @@
         [FR_ACT_PROHIBIT]    = "prohibit",
 };
 
+static const char *const fr_act_type_full_table[__FR_ACT_MAX] = {
+        [FR_ACT_TO_TBL]      = "table",
+        [FR_ACT_GOTO]        = "goto",
+        [FR_ACT_NOP]         = "nop",
+        [FR_ACT_BLACKHOLE]   = "blackhole",
+        [FR_ACT_UNREACHABLE] = "unreachable",
+        [FR_ACT_PROHIBIT]    = "prohibit",
+};
+
 assert_cc(__FR_ACT_MAX <= UINT8_MAX);
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(fr_act_type, int);
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(fr_act_type_full, int);
 
 RoutingPolicyRule *routing_policy_rule_free(RoutingPolicyRule *rule) {
         if (!rule)
@@ -41,19 +51,17 @@
                 hashmap_remove(rule->network->rules_by_section, rule->section);
         }
 
-        if (rule->manager) {
+        if (rule->manager)
                 set_remove(rule->manager->rules, rule);
-                set_remove(rule->manager->rules_foreign, rule);
-        }
 
-        network_config_section_free(rule->section);
+        config_section_free(rule->section);
         free(rule->iif);
         free(rule->oif);
 
         return mfree(rule);
 }
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(RoutingPolicyRule, routing_policy_rule_free);
+DEFINE_SECTION_CLEANUP_FUNCTIONS(RoutingPolicyRule, routing_policy_rule_free);
 
 static int routing_policy_rule_new(RoutingPolicyRule **ret) {
         RoutingPolicyRule *rule;
@@ -67,6 +75,7 @@
                 .uid_range.start = UID_INVALID,
                 .uid_range.end = UID_INVALID,
                 .suppress_prefixlen = -1,
+                .suppress_ifgroup = -1,
                 .protocol = RTPROT_UNSPEC,
                 .type = FR_ACT_TO_TBL,
         };
@@ -77,7 +86,7 @@
 
 static int routing_policy_rule_new_static(Network *network, const char *filename, unsigned section_line, RoutingPolicyRule **ret) {
         _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *rule = NULL;
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         int r;
 
         assert(network);
@@ -85,7 +94,7 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
@@ -101,9 +110,10 @@
 
         rule->network = network;
         rule->section = TAKE_PTR(n);
+        rule->source = NETWORK_CONFIG_SOURCE_STATIC;
         rule->protocol = RTPROT_STATIC;
 
-        r = hashmap_ensure_put(&network->rules_by_section, &network_config_hash_ops, rule->section, rule);
+        r = hashmap_ensure_put(&network->rules_by_section, &config_section_hash_ops, rule->section, rule);
         if (r < 0)
                 return r;
 
@@ -143,7 +153,7 @@
         return 0;
 }
 
-void routing_policy_rule_hash_func(const RoutingPolicyRule *rule, struct siphash *state) {
+static void routing_policy_rule_hash_func(const RoutingPolicyRule *rule, struct siphash *state) {
         assert(rule);
 
         siphash24_compress(&rule->family, sizeof(rule->family), state);
@@ -163,11 +173,10 @@
                 siphash24_compress(&rule->type, sizeof(rule->type), state);
                 siphash24_compress(&rule->fwmark, sizeof(rule->fwmark), state);
                 siphash24_compress(&rule->fwmask, sizeof(rule->fwmask), state);
-                siphash24_compress_boolean(rule->priority_set, state);
-                if (rule->priority_set)
-                        siphash24_compress(&rule->priority, sizeof(rule->priority), state);
+                siphash24_compress(&rule->priority, sizeof(rule->priority), state);
                 siphash24_compress(&rule->table, sizeof(rule->table), state);
                 siphash24_compress(&rule->suppress_prefixlen, sizeof(rule->suppress_prefixlen), state);
+                siphash24_compress(&rule->suppress_ifgroup, sizeof(rule->suppress_ifgroup), state);
 
                 siphash24_compress(&rule->ipproto, sizeof(rule->ipproto), state);
                 siphash24_compress(&rule->protocol, sizeof(rule->protocol), state);
@@ -185,7 +194,7 @@
         }
 }
 
-int routing_policy_rule_compare_func(const RoutingPolicyRule *a, const RoutingPolicyRule *b) {
+static int routing_policy_rule_compare_func(const RoutingPolicyRule *a, const RoutingPolicyRule *b) {
         int r;
 
         r = CMP(a->family, b->family);
@@ -231,16 +240,10 @@
                 if (r != 0)
                         return r;
 
-                r = CMP(a->priority_set, b->priority_set);
+                r = CMP(a->priority, b->priority);
                 if (r != 0)
                         return r;
 
-                if (a->priority_set) {
-                        r = CMP(a->priority, b->priority);
-                        if (r != 0)
-                                return r;
-                }
-
                 r = CMP(a->table, b->table);
                 if (r != 0)
                         return r;
@@ -249,6 +252,10 @@
                 if (r != 0)
                         return r;
 
+                r = CMP(a->suppress_ifgroup, b->suppress_ifgroup);
+                if (r != 0)
+                        return r;
+
                 r = CMP(a->ipproto, b->ipproto);
                 if (r != 0)
                         return r;
@@ -301,130 +308,113 @@
                 routing_policy_rule_compare_func,
                 routing_policy_rule_free);
 
-static int routing_policy_rule_get(Manager *m, const RoutingPolicyRule *rule, bool require_priority, RoutingPolicyRule **ret) {
-        RoutingPolicyRule *existing;
-        int r;
+static int routing_policy_rule_get(Manager *m, const RoutingPolicyRule *in, RoutingPolicyRule **ret) {
+        RoutingPolicyRule *rule;
 
         assert(m);
+        assert(in);
 
-        existing = set_get(m->rules, rule);
-        if (existing) {
+        rule = set_get(m->rules, in);
+        if (rule) {
                 if (ret)
-                        *ret = existing;
-                return 1;
-        }
-
-        existing = set_get(m->rules_foreign, rule);
-        if (existing) {
-                if (ret)
-                        *ret = existing;
+                        *ret = rule;
                 return 0;
         }
 
-        if (!require_priority && rule->priority_set) {
-                _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *tmp = NULL;
+        if (in->priority_set)
+                return -ENOENT;
 
-                r = routing_policy_rule_dup(rule, &tmp);
-                if (r < 0)
-                        return r;
+        /* Also find rules configured without priority. */
+        SET_FOREACH(rule, m->rules) {
+                uint32_t priority;
+                bool found;
 
-                tmp->priority_set = false;
+                if (rule->priority_set)
+                        /* The rule is configured with priority. */
+                        continue;
 
-                existing = set_get(m->rules, tmp);
-                if (existing) {
+                priority = rule->priority;
+                rule->priority = 0;
+                found = routing_policy_rule_equal(rule, in);
+                rule->priority = priority;
+
+                if (found) {
                         if (ret)
-                                *ret = existing;
-                        return 1;
+                                *ret = rule;
+                        return 0;
                 }
         }
 
         return -ENOENT;
 }
 
-static int routing_policy_rule_add(Manager *m, const RoutingPolicyRule *in, RoutingPolicyRule **ret) {
-        _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *rule = NULL;
-        RoutingPolicyRule *existing;
-        int r;
-
-        assert(m);
-        assert(in);
-        assert(IN_SET(in->family, AF_INET, AF_INET6));
-
-        r = routing_policy_rule_dup(in, &rule);
-        if (r < 0)
-                return r;
-
-        r = routing_policy_rule_get(m, rule, true, &existing);
-        if (r == -ENOENT) {
-                /* Rule does not exist, use a new one. */
-                r = set_ensure_put(&m->rules, &routing_policy_rule_hash_ops, rule);
-                if (r < 0)
-                        return r;
-                assert(r > 0);
-
-                rule->manager = m;
-                existing = TAKE_PTR(rule);
-        } else if (r < 0)
-                return r;
-        else if (r == 0) {
-                /* Take over a foreign rule. */
-                r = set_ensure_put(&m->rules, &routing_policy_rule_hash_ops, existing);
-                if (r < 0)
-                        return r;
-                assert(r > 0);
-
-                set_remove(m->rules_foreign, existing);
-        } /* else r > 0: already exists, do nothing. */
-
-        if (ret)
-                *ret = existing;
-        return 0;
-}
-
-static int routing_policy_rule_consume_foreign(Manager *m, RoutingPolicyRule *rule) {
+static int routing_policy_rule_add(Manager *m, RoutingPolicyRule *rule) {
         int r;
 
         assert(m);
         assert(rule);
         assert(IN_SET(rule->family, AF_INET, AF_INET6));
 
-        r = set_ensure_consume(&m->rules_foreign, &routing_policy_rule_hash_ops, rule);
-        if (r <= 0)
+        r = set_ensure_put(&m->rules, &routing_policy_rule_hash_ops, rule);
+        if (r < 0)
                 return r;
+        if (r == 0)
+                return -EEXIST;
 
         rule->manager = m;
-
-        return 1;
+        return 0;
 }
 
-static int routing_policy_rule_update_priority(RoutingPolicyRule *rule, uint32_t priority) {
+static int routing_policy_rule_acquire_priority(Manager *manager, RoutingPolicyRule *rule) {
+        _cleanup_set_free_ Set *priorities = NULL;
+        RoutingPolicyRule *tmp;
+        uint32_t priority;
+        Network *network;
         int r;
 
+        assert(manager);
         assert(rule);
-        assert(rule->manager);
+        assert(IN_SET(rule->family, AF_INET, AF_INET6));
 
         if (rule->priority_set)
                 return 0;
 
-        if (!set_remove(rule->manager->rules, rule))
-                return -ENOENT;
+        /* Find the highest unused priority. Note that 32766 is already used by kernel.
+         * See kernel_rules[] below. */
 
-        rule->priority = priority;
-        rule->priority_set = true;
-
-        r = set_put(rule->manager->rules, rule);
-        if (r <= 0) {
-                /* Undo */
-                rule->priority_set = false;
-                assert_se(set_put(rule->manager->rules, rule) > 0);
-                return r == 0 ? -EEXIST : r;
+        SET_FOREACH(tmp, manager->rules) {
+                if (tmp->family != rule->family)
+                        continue;
+                if (tmp->priority == 0 || tmp->priority > 32765)
+                        continue;
+                r = set_ensure_put(&priorities, NULL, UINT32_TO_PTR(tmp->priority));
+                if (r < 0)
+                        return r;
         }
 
-        return 1;
+        ORDERED_HASHMAP_FOREACH(network, manager->networks)
+                HASHMAP_FOREACH(tmp, network->rules_by_section) {
+                        if (tmp->family != AF_UNSPEC && tmp->family != rule->family)
+                                continue;
+                        if (!tmp->priority_set)
+                                continue;
+                        if (tmp->priority == 0 || tmp->priority > 32765)
+                                continue;
+                        r = set_ensure_put(&priorities, NULL, UINT32_TO_PTR(tmp->priority));
+                        if (r < 0)
+                                return r;
+                }
+
+        for (priority = 32765; priority > 0; priority--)
+                if (!set_contains(priorities, UINT32_TO_PTR(priority)))
+                        break;
+
+        rule->priority = priority;
+        return 0;
 }
 
 static void log_routing_policy_rule_debug(const RoutingPolicyRule *rule, const char *str, const Link *link, const Manager *m) {
-        _cleanup_free_ char *from = NULL, *to = NULL, *table = NULL;
+        _cleanup_free_ char *state = NULL, *table = NULL;
 
         assert(rule);
         assert(IN_SET(rule->family, AF_INET, AF_INET6));
@@ -436,13 +426,15 @@
         if (!DEBUG_LOGGING)
                 return;
 
-        (void) in_addr_prefix_to_string(rule->family, &rule->from, rule->from_prefixlen, &from);
-        (void) in_addr_prefix_to_string(rule->family, &rule->to, rule->to_prefixlen, &to);
+        (void) network_config_state_to_string_alloc(rule->state, &state);
         (void) manager_get_route_table_to_string(m, rule->table, &table);
 
         log_link_debug(link,
-                       "%s routing policy rule: priority: %"PRIu32", %s -> %s, iif: %s, oif: %s, table: %s",
-                       str, rule->priority, strna(from), strna(to),
+                       "%s %s routing policy rule (%s): priority: %"PRIu32", %s -> %s, iif: %s, oif: %s, table: %s",
+                       str, strna(network_config_source_to_string(rule->source)), strna(state),
+                       rule->priority,
+                       IN_ADDR_PREFIX_TO_STRING(rule->family, &rule->from, rule->from_prefixlen),
+                       IN_ADDR_PREFIX_TO_STRING(rule->family, &rule->to, rule->to_prefixlen),
                        strna(rule->iif), strna(rule->oif), strna(table));
 }
 
@@ -457,124 +449,124 @@
         if (rule->from_prefixlen > 0) {
                 r = netlink_message_append_in_addr_union(m, FRA_SRC, rule->family, &rule->from);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_SRC attribute: %m");
+                        return r;
 
                 r = sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(m, rule->from_prefixlen);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set source prefix length: %m");
+                        return r;
         }
 
         if (rule->to_prefixlen > 0) {
                 r = netlink_message_append_in_addr_union(m, FRA_DST, rule->family, &rule->to);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_DST attribute: %m");
+                        return r;
 
                 r = sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(m, rule->to_prefixlen);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set destination prefix length: %m");
+                        return r;
         }
 
-        if (rule->priority_set) {
-                r = sd_netlink_message_append_u32(m, FRA_PRIORITY, rule->priority);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_PRIORITY attribute: %m");
-        }
+        r = sd_netlink_message_append_u32(m, FRA_PRIORITY, rule->priority);
+        if (r < 0)
+                return r;
 
         if (rule->tos > 0) {
                 r = sd_rtnl_message_routing_policy_rule_set_tos(m, rule->tos);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set IP rule TOS: %m");
+                        return r;
         }
 
         if (rule->table < 256) {
                 r = sd_rtnl_message_routing_policy_rule_set_table(m, rule->table);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set IP rule table: %m");
+                        return r;
         } else {
                 r = sd_rtnl_message_routing_policy_rule_set_table(m, RT_TABLE_UNSPEC);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set IP rule table: %m");
+                        return r;
 
                 r = sd_netlink_message_append_u32(m, FRA_TABLE, rule->table);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_TABLE attribute: %m");
+                        return r;
         }
 
         if (rule->fwmark > 0) {
                 r = sd_netlink_message_append_u32(m, FRA_FWMARK, rule->fwmark);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_FWMARK attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_u32(m, FRA_FWMASK, rule->fwmask);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_FWMASK attribute: %m");
+                        return r;
         }
 
         if (rule->iif) {
                 r = sd_netlink_message_append_string(m, FRA_IIFNAME, rule->iif);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_IIFNAME attribute: %m");
+                        return r;
         }
 
         if (rule->oif) {
                 r = sd_netlink_message_append_string(m, FRA_OIFNAME, rule->oif);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_OIFNAME attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_u8(m, FRA_IP_PROTO, rule->ipproto);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append FRA_IP_PROTO attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(m, FRA_PROTOCOL, rule->protocol);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append FRA_PROTOCOL attribute: %m");
+                return r;
 
         if (rule->sport.start != 0 || rule->sport.end != 0) {
                 r = sd_netlink_message_append_data(m, FRA_SPORT_RANGE, &rule->sport, sizeof(rule->sport));
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_SPORT_RANGE attribute: %m");
+                        return r;
         }
 
         if (rule->dport.start != 0 || rule->dport.end != 0) {
                 r = sd_netlink_message_append_data(m, FRA_DPORT_RANGE, &rule->dport, sizeof(rule->dport));
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_DPORT_RANGE attribute: %m");
+                        return r;
         }
 
         if (rule->uid_range.start != UID_INVALID && rule->uid_range.end != UID_INVALID) {
                 r = sd_netlink_message_append_data(m, FRA_UID_RANGE, &rule->uid_range, sizeof(rule->uid_range));
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_UID_RANGE attribute: %m");
+                        return r;
         }
 
         if (rule->invert_rule) {
                 r = sd_rtnl_message_routing_policy_rule_set_flags(m, FIB_RULE_INVERT);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FIB_RULE_INVERT attribute: %m");
+                        return r;
         }
 
         if (rule->suppress_prefixlen >= 0) {
                 r = sd_netlink_message_append_u32(m, FRA_SUPPRESS_PREFIXLEN, (uint32_t) rule->suppress_prefixlen);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append FRA_SUPPRESS_PREFIXLEN attribute: %m");
+                        return r;
+        }
+
+        if (rule->suppress_ifgroup >= 0) {
+                r = sd_netlink_message_append_u32(m, FRA_SUPPRESS_IFGROUP, (uint32_t) rule->suppress_ifgroup);
+                if (r < 0)
+                        return r;
         }
 
         r = sd_rtnl_message_routing_policy_rule_set_fib_type(m, rule->type);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append FIB rule type attribute: %m");
+                return r;
 
         return 0;
 }
 
-static int routing_policy_rule_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Manager *manager) {
+static int routing_policy_rule_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
         int r;
 
         assert(m);
-        assert(manager);
-        assert(manager->routing_policy_rule_remove_messages > 0);
-
-        manager->routing_policy_rule_remove_messages--;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0)
@@ -583,42 +575,36 @@
         return 1;
 }
 
-static int routing_policy_rule_remove(const RoutingPolicyRule *rule, Manager *manager) {
+static int routing_policy_rule_remove(RoutingPolicyRule *rule) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(rule);
-        assert(manager);
-        assert(manager->rtnl);
+        assert(rule->manager);
+        assert(rule->manager->rtnl);
         assert(IN_SET(rule->family, AF_INET, AF_INET6));
 
-        log_routing_policy_rule_debug(rule, "Removing", NULL, manager);
+        log_routing_policy_rule_debug(rule, "Removing", NULL, rule->manager);
 
-        r = sd_rtnl_message_new_routing_policy_rule(manager->rtnl, &m, RTM_DELRULE, rule->family);
+        r = sd_rtnl_message_new_routing_policy_rule(rule->manager->rtnl, &m, RTM_DELRULE, rule->family);
         if (r < 0)
-                return log_error_errno(r, "Could not allocate RTM_DELRULE message: %m");
+                return log_warning_errno(r, "Could not allocate netlink message: %m");
 
         r = routing_policy_rule_set_netlink_message(rule, m, NULL);
         if (r < 0)
-                return r;
+                return log_warning_errno(r, "Could not create netlink message: %m");
 
-        r = netlink_call_async(manager->rtnl, NULL, m,
+        r = netlink_call_async(rule->manager->rtnl, NULL, m,
                                routing_policy_rule_remove_handler,
-                               NULL, manager);
+                               NULL, NULL);
         if (r < 0)
-                return log_error_errno(r, "Could not send rtnetlink message: %m");
+                return log_warning_errno(r, "Could not send netlink message: %m");
 
-        manager->routing_policy_rule_remove_messages++;
-
+        routing_policy_rule_enter_removing(rule);
         return 0;
 }
 
-static int routing_policy_rule_configure(
-                const RoutingPolicyRule *rule,
-                Link *link,
-                link_netlink_message_handler_t callback,
-                RoutingPolicyRule **ret) {
-
+static int routing_policy_rule_configure(RoutingPolicyRule *rule, Link *link, Request *req) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
@@ -628,117 +614,87 @@
         assert(link->ifindex > 0);
         assert(link->manager);
         assert(link->manager->rtnl);
-        assert(callback);
+        assert(req);
 
         log_routing_policy_rule_debug(rule, "Configuring", link, link->manager);
 
         r = sd_rtnl_message_new_routing_policy_rule(link->manager->rtnl, &m, RTM_NEWRULE, rule->family);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not allocate RTM_NEWRULE message: %m");
+                return r;
 
         r = routing_policy_rule_set_netlink_message(rule, m, link);
         if (r < 0)
                 return r;
 
-        r = routing_policy_rule_add(link->manager, rule, ret);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not add rule: %m");
-
-        r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
-                               link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-
-        return r;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-static int links_have_routing_policy_rule(const Manager *m, const RoutingPolicyRule *rule, const Link *except) {
+static void manager_mark_routing_policy_rules(Manager *m, bool foreign, const Link *except) {
+        RoutingPolicyRule *rule;
         Link *link;
-        int r;
 
         assert(m);
-        assert(rule);
 
+        /* First, mark all existing rules. */
+        SET_FOREACH(rule, m->rules) {
+                /* Do not touch rules managed by kernel. */
+                if (rule->protocol == RTPROT_KERNEL)
+                        continue;
+
+                /* When 'foreign' is true, mark only foreign rules, and vice versa. */
+                if (foreign != (rule->source == NETWORK_CONFIG_SOURCE_FOREIGN))
+                        continue;
+
+                /* Ignore rules not assigned yet or already removing. */
+                if (!routing_policy_rule_exists(rule))
+                        continue;
+
+                routing_policy_rule_mark(rule);
+        }
+
+        /* Then, unmark all rules requested by active links. */
         HASHMAP_FOREACH(link, m->links_by_index) {
-                RoutingPolicyRule *link_rule;
-
                 if (link == except)
                         continue;
 
-                if (!link->network)
+                if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
                         continue;
 
-                HASHMAP_FOREACH(link_rule, link->network->rules_by_section)
-                        if (IN_SET(link_rule->family, AF_INET, AF_INET6)) {
-                                if (routing_policy_rule_equal(link_rule, rule))
-                                        return true;
+                HASHMAP_FOREACH(rule, link->network->rules_by_section) {
+                        RoutingPolicyRule *existing;
+
+                        if (IN_SET(rule->family, AF_INET, AF_INET6)) {
+                                if (routing_policy_rule_get(m, rule, &existing) >= 0)
+                                        routing_policy_rule_unmark(existing);
                         } else {
                                 /* The case Family=both. */
-                                _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *tmp = NULL;
+                                rule->family = AF_INET;
+                                if (routing_policy_rule_get(m, rule, &existing) >= 0)
+                                        routing_policy_rule_unmark(existing);
 
-                                r = routing_policy_rule_dup(link_rule, &tmp);
-                                if (r < 0)
-                                        return r;
+                                rule->family = AF_INET6;
+                                if (routing_policy_rule_get(m, rule, &existing) >= 0)
+                                        routing_policy_rule_unmark(existing);
 
-                                tmp->family = AF_INET;
-                                if (routing_policy_rule_equal(tmp, rule))
-                                        return true;
-
-                                tmp->family = AF_INET6;
-                                if (routing_policy_rule_equal(tmp, rule))
-                                        return true;
+                                rule->family = AF_UNSPEC;
                         }
+                }
         }
-
-        return false;
 }
 
 int manager_drop_routing_policy_rules_internal(Manager *m, bool foreign, const Link *except) {
         RoutingPolicyRule *rule;
         int k, r = 0;
-        Set *rules;
 
         assert(m);
 
-        rules = foreign ? m->rules_foreign : m->rules;
-        SET_FOREACH(rule, rules) {
-                /* Do not touch rules managed by kernel. */
-                if (rule->protocol == RTPROT_KERNEL)
+        manager_mark_routing_policy_rules(m, foreign, except);
+
+        SET_FOREACH(rule, m->rules) {
+                if (!routing_policy_rule_is_marked(rule))
                         continue;
 
-                /* The rule will be configured later, or already configured by a link. */
-                k = links_have_routing_policy_rule(m, rule, except);
-                if (k != 0) {
-                        if (k < 0 && r >= 0)
-                                r = k;
-                        continue;
-                }
-
-                if (!foreign) {
-                        _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *tmp = NULL;
-
-                        /* The rule may be configured without priority. Try to find without priority. */
-
-                        k = routing_policy_rule_dup(rule, &tmp);
-                        if (k < 0) {
-                                if (r >= 0)
-                                        r = k;
-                                continue;
-                        }
-
-                        tmp->priority_set = false;
-
-                        k = links_have_routing_policy_rule(m, tmp, except);
-                        if (k != 0) {
-                                if (k < 0 && r >= 0)
-                                        r = k;
-                                continue;
-                        }
-                }
-
-                k = routing_policy_rule_remove(rule, m);
+                k = routing_policy_rule_remove(rule);
                 if (k < 0 && r >= 0)
                         r = k;
         }
@@ -746,19 +702,51 @@
         return r;
 }
 
-static int static_routing_policy_rule_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+void link_foreignize_routing_policy_rules(Link *link) {
+        RoutingPolicyRule *rule;
+
+        assert(link);
+        assert(link->manager);
+
+        manager_mark_routing_policy_rules(link->manager, /* foreign = */ false, link);
+
+        SET_FOREACH(rule, link->manager->rules) {
+                if (!routing_policy_rule_is_marked(rule))
+                        continue;
+
+                rule->source = NETWORK_CONFIG_SOURCE_FOREIGN;
+        }
+}
+
+static int routing_policy_rule_process_request(Request *req, Link *link, RoutingPolicyRule *rule) {
         int r;
 
-        assert(rtnl);
+        assert(req);
+        assert(link);
+        assert(rule);
+
+        if (!link_is_ready_to_configure(link, false))
+                return 0;
+
+        r = routing_policy_rule_configure(rule, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure routing policy rule: %m");
+
+        routing_policy_rule_enter_configuring(rule);
+        return 1;
+}
+
+static int static_routing_policy_rule_configure_handler(
+                sd_netlink *rtnl,
+                sd_netlink_message *m,
+                Request *req,
+                Link *link,
+                RoutingPolicyRule *rule) {
+
+        int r;
+
         assert(m);
         assert(link);
-        assert(link->ifname);
-        assert(link->static_routing_policy_rule_messages > 0);
-
-        link->static_routing_policy_rule_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
@@ -776,67 +764,67 @@
         return 1;
 }
 
-static int link_request_routing_policy_rule(
-                Link *link,
-                RoutingPolicyRule *rule,
-                bool consume_object,
-                unsigned *message_counter,
-                link_netlink_message_handler_t netlink_handler,
-                Request **ret) {
+static int link_request_routing_policy_rule(Link *link, RoutingPolicyRule *rule) {
+        RoutingPolicyRule *existing;
+        int r;
 
         assert(link);
         assert(link->manager);
         assert(rule);
+        assert(rule->source != NETWORK_CONFIG_SOURCE_FOREIGN);
 
-        log_routing_policy_rule_debug(rule, "Requesting", link, link->manager);
-        return link_queue_request(link, REQUEST_TYPE_ROUTING_POLICY_RULE, rule, consume_object,
-                                  message_counter, netlink_handler, ret);
+        if (routing_policy_rule_get(link->manager, rule, &existing) < 0) {
+                _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *tmp = NULL;
+
+                r = routing_policy_rule_dup(rule, &tmp);
+                if (r < 0)
+                        return r;
+
+                r = routing_policy_rule_acquire_priority(link->manager, tmp);
+                if (r < 0)
+                        return r;
+
+                r = routing_policy_rule_add(link->manager, tmp);
+                if (r < 0)
+                        return r;
+
+                existing = TAKE_PTR(tmp);
+        } else
+                existing->source = rule->source;
+
+        log_routing_policy_rule_debug(existing, "Requesting", link, link->manager);
+        r = link_queue_request_safe(link, REQUEST_TYPE_ROUTING_POLICY_RULE,
+                                    existing, NULL,
+                                    routing_policy_rule_hash_func,
+                                    routing_policy_rule_compare_func,
+                                    routing_policy_rule_process_request,
+                                    &link->static_routing_policy_rule_messages,
+                                    static_routing_policy_rule_configure_handler,
+                                    NULL);
+        if (r <= 0)
+                return r;
+
+        routing_policy_rule_enter_requesting(existing);
+        return 1;
 }
 
 static int link_request_static_routing_policy_rule(Link *link, RoutingPolicyRule *rule) {
         int r;
 
         if (IN_SET(rule->family, AF_INET, AF_INET6))
-                return link_request_routing_policy_rule(link, rule, false,
-                                                        &link->static_routing_policy_rule_messages,
-                                                        static_routing_policy_rule_configure_handler,
-                                                        NULL);
+                return link_request_routing_policy_rule(link, rule);
 
-        if (FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV4)) {
-                _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *tmp = NULL;
-
-                r = routing_policy_rule_dup(rule, &tmp);
-                if (r < 0)
-                        return r;
-
-                tmp->family = AF_INET;
-
-                r = link_request_routing_policy_rule(link, TAKE_PTR(tmp), true,
-                                                     &link->static_routing_policy_rule_messages,
-                                                     static_routing_policy_rule_configure_handler,
-                                                     NULL);
-                if (r < 0)
-                        return r;
+        rule->family = AF_INET;
+        r = link_request_routing_policy_rule(link, rule);
+        if (r < 0) {
+                rule->family = AF_UNSPEC;
+                return r;
         }
 
-        if (FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV6)) {
-                _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *tmp = NULL;
-
-                r = routing_policy_rule_dup(rule, &tmp);
-                if (r < 0)
-                        return r;
-
-                tmp->family = AF_INET6;
-
-                r = link_request_routing_policy_rule(link, TAKE_PTR(tmp), true,
-                                                     &link->static_routing_policy_rule_messages,
-                                                     static_routing_policy_rule_configure_handler,
-                                                     NULL);
-                if (r < 0)
-                        return r;
-        }
-
-        return 0;
+        rule->family = AF_INET6;
+        r = link_request_routing_policy_rule(link, rule);
+        rule->family = AF_UNSPEC;
+        return r;
 }
 
 int link_request_static_routing_policy_rules(Link *link) {
@@ -865,43 +853,12 @@
         return 0;
 }
 
-int request_process_routing_policy_rule(Request *req) {
-        RoutingPolicyRule *ret = NULL;  /* avoid false maybe-uninitialized warning */
-        int r;
-
-        assert(req);
-        assert(req->link);
-        assert(req->rule);
-        assert(req->type == REQUEST_TYPE_ROUTING_POLICY_RULE);
-
-        if (!link_is_ready_to_configure(req->link, false))
-                return 0;
-
-        if (req->link->manager->routing_policy_rule_remove_messages > 0)
-                return 0;
-
-        r = routing_policy_rule_configure(req->rule, req->link, req->netlink_handler, &ret);
-        if (r < 0)
-                return r;
-
-        /* To prevent a double decrement on failure in after_configure(). */
-        req->message_counter = NULL;
-
-        if (req->after_configure) {
-                r = req->after_configure(req, ret);
-                if (r < 0)
-                        return r;
-        }
-
-        return 1;
-}
-
 static const RoutingPolicyRule kernel_rules[] = {
-        { .family = AF_INET,  .priority_set = true, .priority = 0,     .table = RT_TABLE_LOCAL,   .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, },
-        { .family = AF_INET,  .priority_set = true, .priority = 32766, .table = RT_TABLE_MAIN,    .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, },
-        { .family = AF_INET,  .priority_set = true, .priority = 32767, .table = RT_TABLE_DEFAULT, .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, },
-        { .family = AF_INET6, .priority_set = true, .priority = 0,     .table = RT_TABLE_LOCAL,   .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, },
-        { .family = AF_INET6, .priority_set = true, .priority = 32766, .table = RT_TABLE_MAIN,    .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, },
+        { .family = AF_INET,  .priority_set = true, .priority = 0,     .table = RT_TABLE_LOCAL,   .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, .suppress_ifgroup = -1, },
+        { .family = AF_INET,  .priority_set = true, .priority = 32766, .table = RT_TABLE_MAIN,    .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, .suppress_ifgroup = -1, },
+        { .family = AF_INET,  .priority_set = true, .priority = 32767, .table = RT_TABLE_DEFAULT, .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, .suppress_ifgroup = -1, },
+        { .family = AF_INET6, .priority_set = true, .priority = 0,     .table = RT_TABLE_LOCAL,   .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, .suppress_ifgroup = -1, },
+        { .family = AF_INET6, .priority_set = true, .priority = 32766, .table = RT_TABLE_MAIN,    .type = FR_ACT_TO_TBL, .uid_range.start = UID_INVALID, .uid_range.end = UID_INVALID, .suppress_prefixlen = -1, .suppress_ifgroup = -1, },
 };
 
 static bool routing_policy_rule_is_created_by_kernel(const RoutingPolicyRule *rule) {
@@ -922,10 +879,7 @@
 int manager_rtnl_process_rule(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
         _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *tmp = NULL;
         RoutingPolicyRule *rule = NULL;
-        const char *iif = NULL, *oif = NULL;
         bool adjust_protocol = false;
-        uint32_t suppress_prefixlen;
-        unsigned flags;
         uint16_t type;
         int r;
 
@@ -988,6 +942,7 @@
                 }
         }
 
+        unsigned flags;
         r = sd_rtnl_message_routing_policy_rule_get_flags(message, &flags);
         if (r < 0) {
                 log_warning_errno(r, "rtnl: received rule message without valid flag, ignoring: %m");
@@ -1034,23 +989,17 @@
                 return 0;
         }
 
-        r = sd_netlink_message_read_string(message, FRA_IIFNAME, &iif);
+        r = sd_netlink_message_read_string_strdup(message, FRA_IIFNAME, &tmp->iif);
         if (r < 0 && r != -ENODATA) {
                 log_warning_errno(r, "rtnl: could not get FRA_IIFNAME attribute, ignoring: %m");
                 return 0;
         }
-        r = free_and_strdup(&tmp->iif, iif);
-        if (r < 0)
-                return log_oom();
 
-        r = sd_netlink_message_read_string(message, FRA_OIFNAME, &oif);
+        r = sd_netlink_message_read_string_strdup(message, FRA_OIFNAME, &tmp->oif);
         if (r < 0 && r != -ENODATA) {
                 log_warning_errno(r, "rtnl: could not get FRA_OIFNAME attribute, ignoring: %m");
                 return 0;
         }
-        r = free_and_strdup(&tmp->oif, oif);
-        if (r < 0)
-                return log_oom();
 
         r = sd_netlink_message_read_u8(message, FRA_IP_PROTO, &tmp->ipproto);
         if (r < 0 && r != -ENODATA) {
@@ -1093,47 +1042,64 @@
                 return 0;
         }
 
+        uint32_t suppress_prefixlen;
         r = sd_netlink_message_read_u32(message, FRA_SUPPRESS_PREFIXLEN, &suppress_prefixlen);
         if (r < 0 && r != -ENODATA) {
                 log_warning_errno(r, "rtnl: could not get FRA_SUPPRESS_PREFIXLEN attribute, ignoring: %m");
                 return 0;
         }
         if (r >= 0)
-                tmp->suppress_prefixlen = (int) suppress_prefixlen;
+                tmp->suppress_prefixlen = (int32_t) suppress_prefixlen;
+
+        uint32_t suppress_ifgroup;
+        r = sd_netlink_message_read_u32(message, FRA_SUPPRESS_IFGROUP, &suppress_ifgroup);
+        if (r < 0 && r != -ENODATA) {
+                log_warning_errno(r, "rtnl: could not get FRA_SUPPRESS_IFGROUP attribute, ignoring: %m");
+                return 0;
+        }
+        if (r >= 0)
+                tmp->suppress_ifgroup = (int32_t) suppress_ifgroup;
 
         if (adjust_protocol)
                 /* As .network files does not have setting to specify protocol, we can assume the
                  * protocol of the received rule is RTPROT_KERNEL or RTPROT_STATIC. */
                 tmp->protocol = routing_policy_rule_is_created_by_kernel(tmp) ? RTPROT_KERNEL : RTPROT_STATIC;
 
-        (void) routing_policy_rule_get(m, tmp, false, &rule);
+        (void) routing_policy_rule_get(m, tmp, &rule);
 
         switch (type) {
         case RTM_NEWRULE:
                 if (rule) {
-                        log_routing_policy_rule_debug(tmp, "Received remembered", NULL, m);
-                        r = routing_policy_rule_update_priority(rule, tmp->priority);
-                        if (r < 0)
-                                log_warning_errno(r, "Failed to update priority of remembered routing policy rule, ignoring: %m");
-                } else if (!m->manage_foreign_rules)
-                        log_routing_policy_rule_debug(tmp, "Ignoring received foreign", NULL, m);
-                else {
-                        log_routing_policy_rule_debug(tmp, "Remembering foreign", NULL, m);
-                        r = routing_policy_rule_consume_foreign(m, TAKE_PTR(tmp));
-                        if (r < 0)
+                        routing_policy_rule_enter_configured(rule);
+                        log_routing_policy_rule_debug(rule, "Received remembered", NULL, m);
+                } else if (!m->manage_foreign_rules) {
+                        routing_policy_rule_enter_configured(tmp);
+                        log_routing_policy_rule_debug(tmp, "Ignoring received", NULL, m);
+                } else {
+                        routing_policy_rule_enter_configured(tmp);
+                        log_routing_policy_rule_debug(tmp, "Remembering", NULL, m);
+                        r = routing_policy_rule_add(m, tmp);
+                        if (r < 0) {
                                 log_warning_errno(r, "Could not remember foreign rule, ignoring: %m");
+                                return 0;
+                        }
+                        TAKE_PTR(tmp);
                 }
                 break;
         case RTM_DELRULE:
                 if (rule) {
-                        log_routing_policy_rule_debug(tmp, "Forgetting", NULL, m);
-                        routing_policy_rule_free(rule);
+                        routing_policy_rule_enter_removed(rule);
+                        if (rule->state == 0) {
+                                log_routing_policy_rule_debug(rule, "Forgetting", NULL, m);
+                                routing_policy_rule_free(rule);
+                        } else
+                                log_routing_policy_rule_debug(rule, "Removed", NULL, m);
                 } else
                         log_routing_policy_rule_debug(tmp, "Kernel removed unknown", NULL, m);
                 break;
 
         default:
-                assert_not_reached("Received invalid RTNL message type");
+                assert_not_reached();
         }
 
         return 1;
@@ -1284,7 +1250,7 @@
         r = manager_get_route_table_from_string(network->manager, rvalue, &n->table);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Could not parse RPDB rule route table number \"%s\", ignoring assignment: %m", rvalue);
+                           "Could not parse RPDB rule route table \"%s\", ignoring assignment: %m", rvalue);
                 return 0;
         }
 
@@ -1664,6 +1630,54 @@
         return 0;
 }
 
+int config_parse_routing_policy_rule_suppress_ifgroup(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(routing_policy_rule_free_or_set_invalidp) RoutingPolicyRule *n = NULL;
+        Network *network = userdata;
+        int32_t suppress_ifgroup;
+        int r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+        assert(data);
+
+        r = routing_policy_rule_new_static(network, filename, section_line, &n);
+        if (r < 0)
+                return log_oom();
+
+        if (isempty(rvalue)) {
+                n->suppress_ifgroup = -1;
+                return 0;
+        }
+
+        r = safe_atoi32(rvalue, &suppress_ifgroup);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse SuppressInterfaceGroup=, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+        if (suppress_ifgroup < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Value of SuppressInterfaceGroup= must be in the range 0…2147483647, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+        n->suppress_ifgroup = suppress_ifgroup;
+        TAKE_PTR(n);
+        return 0;
+}
+
 int config_parse_routing_policy_rule_type(
                 const char *unit,
                 const char *filename,
@@ -1726,7 +1740,7 @@
          * update routing_policy_rule_is_created_by_kernel() when a new setting which sets the flag is
          * added in the future. */
         if (rule->l3mdev > 0)
-                assert_not_reached("FRA_L3MDEV flag should not be configured.");
+                assert_not_reached();
 
         return 0;
 }
diff --git a/src/network/networkd-routing-policy-rule.h b/src/network/networkd-routing-policy-rule.h
index 557048c..b6ce2fa 100644
--- a/src/network/networkd-routing-policy-rule.h
+++ b/src/network/networkd-routing-policy-rule.h
@@ -12,12 +12,13 @@
 typedef struct Link Link;
 typedef struct Manager Manager;
 typedef struct Network Network;
-typedef struct Request Request;
 
 typedef struct RoutingPolicyRule {
         Manager *manager;
         Network *network;
-        NetworkConfigSection *section;
+        ConfigSection *section;
+        NetworkConfigSource source;
+        NetworkConfigState state;
 
         bool invert_rule;
         bool priority_set;
@@ -49,26 +50,29 @@
         struct fib_rule_uid_range uid_range;
 
         int suppress_prefixlen;
+        int32_t suppress_ifgroup;
 } RoutingPolicyRule;
 
-RoutingPolicyRule *routing_policy_rule_free(RoutingPolicyRule *rule);
+const char *fr_act_type_full_to_string(int t) _const_;
 
-void routing_policy_rule_hash_func(const RoutingPolicyRule *rule, struct siphash *state);
-int routing_policy_rule_compare_func(const RoutingPolicyRule *a, const RoutingPolicyRule *b);
+RoutingPolicyRule *routing_policy_rule_free(RoutingPolicyRule *rule);
 
 void network_drop_invalid_routing_policy_rules(Network *network);
 
 int link_request_static_routing_policy_rules(Link *link);
-int request_process_routing_policy_rule(Request *req);
 
 int manager_rtnl_process_rule(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
 int manager_drop_routing_policy_rules_internal(Manager *m, bool foreign, const Link *except);
 static inline int manager_drop_foreign_routing_policy_rules(Manager *m) {
         return manager_drop_routing_policy_rules_internal(m, true, NULL);
 }
-static inline int manager_drop_routing_policy_rules(Manager *m, const Link *except) {
-        return manager_drop_routing_policy_rules_internal(m, false, except);
+static inline int link_drop_managed_routing_policy_rules(Link *link) {
+        assert(link);
+        return manager_drop_routing_policy_rules_internal(link->manager, false, link);
 }
+void link_foreignize_routing_policy_rules(Link *link);
+
+DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(RoutingPolicyRule, routing_policy_rule);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_tos);
 CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_table);
@@ -82,4 +86,5 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_family);
 CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_uid_range);
 CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_suppress_prefixlen);
+CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_suppress_ifgroup);
 CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_type);
diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c
index 13c4ced..541c4b8 100644
--- a/src/network/networkd-setlink.c
+++ b/src/network/networkd-setlink.c
@@ -3,30 +3,19 @@
 #include <netinet/in.h>
 #include <linux/if.h>
 #include <linux/if_arp.h>
+#include <linux/if_bridge.h>
 
 #include "missing_network.h"
+#include "netif-util.h"
 #include "netlink-util.h"
+#include "networkd-address.h"
 #include "networkd-can.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
 #include "networkd-queue.h"
 #include "networkd-setlink.h"
-#include "string-table.h"
-
-static const char *const set_link_operation_table[_SET_LINK_OPERATION_MAX] = {
-        [SET_LINK_ADDRESS_GENERATION_MODE] = "IPv6LL address generation mode",
-        [SET_LINK_BOND]                    = "bond configurations",
-        [SET_LINK_BRIDGE]                  = "bridge configurations",
-        [SET_LINK_BRIDGE_VLAN]             = "bridge VLAN configurations",
-        [SET_LINK_CAN]                     = "CAN interface configurations",
-        [SET_LINK_FLAGS]                   = "link flags",
-        [SET_LINK_GROUP]                   = "interface group",
-        [SET_LINK_MAC]                     = "MAC address",
-        [SET_LINK_MASTER]                  = "master interface",
-        [SET_LINK_MTU]                     = "MTU",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(set_link_operation, SetLinkOperation);
+#include "networkd-sriov.h"
+#include "networkd-wiphy.h"
 
 static int get_link_default_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
         return link_getlink_handler_internal(rtnl, m, link, "Failed to sync link information");
@@ -50,42 +39,36 @@
 static int set_link_handler_internal(
                 sd_netlink *rtnl,
                 sd_netlink_message *m,
+                Request *req,
                 Link *link,
-                SetLinkOperation op,
                 bool ignore,
                 link_netlink_message_handler_t get_link_handler) {
 
         int r;
 
         assert(m);
+        assert(req);
         assert(link);
-        assert(link->set_link_messages > 0);
-        assert(op >= 0 && op < _SET_LINK_OPERATION_MAX);
-
-        link->set_link_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                goto on_error;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0) {
                 const char *error_msg;
 
-                error_msg = strjoina("Failed to set ", set_link_operation_to_string(op), ignore ? ", ignoring" : "");
+                error_msg = strjoina("Failed to set ", request_type_to_string(req->type), ignore ? ", ignoring" : "");
                 log_link_message_warning_errno(link, m, r, error_msg);
 
                 if (!ignore)
                         link_enter_failed(link);
-                goto on_error;
+                return 0;
         }
 
-        log_link_debug(link, "%s set.", set_link_operation_to_string(op));
+        log_link_debug(link, "%s set.", request_type_to_string(req->type));
 
         if (get_link_handler) {
                 r = link_call_getlink(link, get_link_handler);
                 if (r < 0) {
                         link_enter_failed(link);
-                        goto on_error;
+                        return 0;
                 }
         }
 
@@ -93,27 +76,12 @@
                 link_check_ready(link);
 
         return 1;
-
-on_error:
-        switch (op) {
-        case SET_LINK_FLAGS:
-                assert(link->set_flags_messages > 0);
-                link->set_flags_messages--;
-                break;
-        case SET_LINK_MASTER:
-                link->master_set = true;
-                break;
-        default:
-                break;
-        }
-
-        return 0;
 }
 
-static int link_set_addrgen_mode_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int link_set_addrgen_mode_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
         int r;
 
-        r = set_link_handler_internal(rtnl, m, link, SET_LINK_ADDRESS_GENERATION_MODE, /* ignore = */ true, NULL);
+        r = set_link_handler_internal(rtnl, m, req, link, /* ignore = */ true, NULL);
         if (r <= 0)
                 return r;
 
@@ -126,45 +94,43 @@
         return 0;
 }
 
-static int link_set_bond_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_BOND, /* ignore = */ false, NULL);
+static int link_set_bond_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ false, NULL);
 }
 
-static int link_set_bridge_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_BRIDGE, /* ignore = */ true, NULL);
+static int link_set_bridge_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ true, NULL);
 }
 
-static int link_set_bridge_vlan_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_BRIDGE_VLAN, /* ignore = */ false, NULL);
+static int link_set_bridge_vlan_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ false, NULL);
 }
 
-static int link_set_can_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_CAN, /* ignore = */ false, NULL);
+static int link_set_can_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ false, NULL);
 }
 
-static int link_set_flags_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_FLAGS, /* ignore = */ false, get_link_update_flag_handler);
+static int link_set_flags_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ false, get_link_default_handler);
 }
 
-static int link_set_group_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_GROUP, /* ignore = */ false, NULL);
+static int link_set_group_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ false, NULL);
 }
 
-static int link_set_mac_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_MAC, /* ignore = */ true, get_link_default_handler);
+static int link_set_ipoib_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ true, NULL);
 }
 
-static int link_set_mac_allow_retry_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int link_set_mac_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ true, get_link_default_handler);
+}
+
+static int link_set_mac_allow_retry_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
         int r;
 
         assert(m);
         assert(link);
-        assert(link->set_link_messages > 0);
-
-        link->set_link_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 0;
 
         r = sd_netlink_message_get_errno(m);
         if (r == -EBUSY) {
@@ -181,24 +147,22 @@
                 return 0;
         }
 
-        /* set_link_mac_handler() also decrement set_link_messages, so once increment the value. */
-        link->set_link_messages++;
-        return link_set_mac_handler(rtnl, m, link);
+        return link_set_mac_handler(rtnl, m, req, link, userdata);
 }
 
-static int link_set_master_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_MASTER, /* ignore = */ false, get_link_master_handler);
+static int link_set_master_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ false, get_link_master_handler);
 }
 
-static int link_unset_master_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int link_unset_master_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
         /* Some devices do not support setting master ifindex. Let's ignore error on unsetting master ifindex. */
-        return set_link_handler_internal(rtnl, m, link, SET_LINK_MASTER, /* ignore = */ true, get_link_master_handler);
+        return set_link_handler_internal(rtnl, m, req, link, /* ignore = */ true, get_link_master_handler);
 }
 
-static int link_set_mtu_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int link_set_mtu_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
         int r;
 
-        r = set_link_handler_internal(rtnl, m, link, SET_LINK_MTU, /* ignore = */ true, get_link_default_handler);
+        r = set_link_handler_internal(rtnl, m, req, link, /* ignore = */ true, get_link_default_handler);
         if (r <= 0)
                 return r;
 
@@ -211,222 +175,187 @@
         return 0;
 }
 
-static int link_configure(
+static int link_configure_fill_message(
                 Link *link,
-                SetLinkOperation op,
-                void *userdata,
-                link_netlink_message_handler_t callback) {
-
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+                sd_netlink_message *req,
+                RequestType type,
+                void *userdata) {
         int r;
 
-        assert(link);
-        assert(link->manager);
-        assert(link->manager->rtnl);
-        assert(link->network);
-        assert(op >= 0 && op < _SET_LINK_OPERATION_MAX);
-        assert(callback);
-
-        log_link_debug(link, "Setting %s", set_link_operation_to_string(op));
-
-        if (op == SET_LINK_BOND) {
-                r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_NEWLINK, link->master_ifindex);
+        switch (type) {
+        case REQUEST_TYPE_SET_LINK_ADDRESS_GENERATION_MODE:
+                r = ipv6ll_addrgen_mode_fill_message(req, PTR_TO_UINT8(userdata));
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not allocate RTM_NEWLINK message: %m");
-        } else if (op == SET_LINK_CAN) {
-                r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_NEWLINK, link->ifindex);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not allocate RTM_NEWLINK message: %m");
-        } else {
-                r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not allocate RTM_SETLINK message: %m");
-        }
-
-        switch (op) {
-        case SET_LINK_ADDRESS_GENERATION_MODE:
-                r = sd_netlink_message_open_container(req, IFLA_AF_SPEC);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not open IFLA_AF_SPEC container: %m");
-
-                r = sd_netlink_message_open_container(req, AF_INET6);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not open AF_INET6 container: %m");
-
-                r = sd_netlink_message_append_u8(req, IFLA_INET6_ADDR_GEN_MODE, PTR_TO_UINT8(userdata));
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_INET6_ADDR_GEN_MODE attribute: %m");
-
-                r = sd_netlink_message_close_container(req);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not close AF_INET6 container: %m");
-
-                r = sd_netlink_message_close_container(req);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not close IFLA_AF_SPEC container: %m");
+                        return r;
                 break;
-        case SET_LINK_BOND:
+        case REQUEST_TYPE_SET_LINK_BOND:
                 r = sd_netlink_message_set_flags(req, NLM_F_REQUEST | NLM_F_ACK);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not set netlink message flags: %m");
+                        return r;
 
                 r = sd_netlink_message_open_container(req, IFLA_LINKINFO);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not open IFLA_LINKINFO container: %m");
+                        return r;
 
                 r = sd_netlink_message_open_container_union(req, IFLA_INFO_DATA, "bond");
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not open IFLA_INFO_DATA container: %m");
+                        return r;
 
                 if (link->network->active_slave) {
                         r = sd_netlink_message_append_u32(req, IFLA_BOND_ACTIVE_SLAVE, link->ifindex);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BOND_ACTIVE_SLAVE attribute: %m");
+                                return r;
                 }
 
                 if (link->network->primary_slave) {
                         r = sd_netlink_message_append_u32(req, IFLA_BOND_PRIMARY, link->ifindex);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BOND_PRIMARY attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not close IFLA_INFO_DATA container: %m");
+                        return r;
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not close IFLA_LINKINFO container: %m");
+                        return r;
 
                 break;
-        case SET_LINK_BRIDGE:
+        case REQUEST_TYPE_SET_LINK_BRIDGE:
                 r = sd_rtnl_message_link_set_family(req, AF_BRIDGE);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not set message family: %m");
+                        return r;
 
                 r = sd_netlink_message_open_container(req, IFLA_PROTINFO);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not open IFLA_PROTINFO container: %m");
+                        return r;
 
                 if (link->network->use_bpdu >= 0) {
-                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_GUARD, link->network->use_bpdu);
+                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_GUARD, !link->network->use_bpdu);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_GUARD attribute: %m");
+                                return r;
                 }
 
                 if (link->network->hairpin >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_MODE, link->network->hairpin);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_MODE attribute: %m");
+                                return r;
+                }
+
+                if (link->network->isolated >= 0) {
+                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_ISOLATED, link->network->isolated);
+                        if (r < 0)
+                                return r;
                 }
 
                 if (link->network->fast_leave >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_FAST_LEAVE, link->network->fast_leave);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_FAST_LEAVE attribute: %m");
+                                return r;
                 }
 
                 if (link->network->allow_port_to_be_root >= 0) {
-                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROTECT, link->network->allow_port_to_be_root);
+                        r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROTECT, !link->network->allow_port_to_be_root);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_PROTECT attribute: %m");
+                                return r;
                 }
 
                 if (link->network->unicast_flood >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_UNICAST_FLOOD, link->network->unicast_flood);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_UNICAST_FLOOD attribute: %m");
+                                return r;
                 }
 
                 if (link->network->multicast_flood >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_MCAST_FLOOD, link->network->multicast_flood);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_MCAST_FLOOD attribute: %m");
+                                return r;
                 }
 
                 if (link->network->multicast_to_unicast >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_MCAST_TO_UCAST, link->network->multicast_to_unicast);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_MCAST_TO_UCAST attribute: %m");
+                                return r;
                 }
 
                 if (link->network->neighbor_suppression >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_NEIGH_SUPPRESS, link->network->neighbor_suppression);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_NEIGH_SUPPRESS attribute: %m");
+                                return r;
                 }
 
                 if (link->network->learning >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_LEARNING, link->network->learning);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_LEARNING attribute: %m");
+                                return r;
                 }
 
                 if (link->network->bridge_proxy_arp >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROXYARP, link->network->bridge_proxy_arp);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_PROXYARP attribute: %m");
+                                return r;
                 }
 
                 if (link->network->bridge_proxy_arp_wifi >= 0) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROXYARP_WIFI, link->network->bridge_proxy_arp_wifi);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_PROXYARP_WIFI attribute: %m");
+                                return r;
                 }
 
                 if (link->network->cost != 0) {
                         r = sd_netlink_message_append_u32(req, IFLA_BRPORT_COST, link->network->cost);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_COST attribute: %m");
+                                return r;
                 }
 
                 if (link->network->priority != LINK_BRIDGE_PORT_PRIORITY_INVALID) {
                         r = sd_netlink_message_append_u16(req, IFLA_BRPORT_PRIORITY, link->network->priority);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_PRIORITY attribute: %m");
+                                return r;
                 }
 
                 if (link->network->multicast_router != _MULTICAST_ROUTER_INVALID) {
                         r = sd_netlink_message_append_u8(req, IFLA_BRPORT_MULTICAST_ROUTER, link->network->multicast_router);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRPORT_MULTICAST_ROUTER attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not close IFLA_PROTINFO container: %m");
+                        return r;
                 break;
-        case SET_LINK_BRIDGE_VLAN:
+        case REQUEST_TYPE_SET_LINK_BRIDGE_VLAN:
                 r = sd_rtnl_message_link_set_family(req, AF_BRIDGE);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not set message family: %m");
+                        return r;
 
                 r = sd_netlink_message_open_container(req, IFLA_AF_SPEC);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not open IFLA_AF_SPEC container: %m");
+                        return r;
 
-                if (!link->network->bridge) {
+                if (link->master_ifindex <= 0) {
                         /* master needs BRIDGE_FLAGS_SELF flag */
                         r = sd_netlink_message_append_u16(req, IFLA_BRIDGE_FLAGS, BRIDGE_FLAGS_SELF);
                         if (r < 0)
-                                return log_link_debug_errno(link, r, "Could not append IFLA_BRIDGE_FLAGS attribute: %m");
+                                return r;
                 }
 
                 r = bridge_vlan_append_info(link, req, link->network->pvid, link->network->br_vid_bitmap, link->network->br_untagged_bitmap);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append VLANs: %m");
+                        return r;
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not close IFLA_AF_SPEC container: %m");
+                        return r;
 
                 break;
-        case SET_LINK_CAN:
+        case REQUEST_TYPE_SET_LINK_CAN:
                 r = can_set_netlink_message(link, req);
                 if (r < 0)
                         return r;
                 break;
-        case SET_LINK_FLAGS: {
+        case REQUEST_TYPE_SET_LINK_FLAGS: {
                 unsigned ifi_change = 0, ifi_flags = 0;
 
                 if (link->network->arp >= 0) {
@@ -451,43 +380,68 @@
 
                 r = sd_rtnl_message_link_set_flags(req, ifi_flags, ifi_change);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not set link flags: %m");
+                        return r;
 
                 break;
         }
-        case SET_LINK_GROUP:
-                r = sd_netlink_message_append_u32(req, IFLA_GROUP, link->network->group);
+        case REQUEST_TYPE_SET_LINK_GROUP:
+                r = sd_netlink_message_append_u32(req, IFLA_GROUP, (uint32_t) link->network->group);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_GROUP attribute: %m");
+                        return r;
                 break;
-        case SET_LINK_MAC:
-                r = sd_netlink_message_append_ether_addr(req, IFLA_ADDRESS, link->network->mac);
+        case REQUEST_TYPE_SET_LINK_MAC:
+                r = netlink_message_append_hw_addr(req, IFLA_ADDRESS, &link->requested_hw_addr);
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_ADDRESS attribute: %m");
+                        return r;
                 break;
-        case SET_LINK_MASTER:
+        case REQUEST_TYPE_SET_LINK_IPOIB:
+                r = ipoib_set_netlink_message(link, req);
+                if (r < 0)
+                        return r;
+                break;
+        case REQUEST_TYPE_SET_LINK_MASTER:
                 r = sd_netlink_message_append_u32(req, IFLA_MASTER, PTR_TO_UINT32(userdata));
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_MASTER attribute: %m");
+                        return r;
                 break;
-        case SET_LINK_MTU:
+        case REQUEST_TYPE_SET_LINK_MTU:
                 r = sd_netlink_message_append_u32(req, IFLA_MTU, PTR_TO_UINT32(userdata));
                 if (r < 0)
-                        return log_link_debug_errno(link, r, "Could not append IFLA_MTU attribute: %m");
+                        return r;
                 break;
         default:
-                assert_not_reached("Invalid set link operation");
+                assert_not_reached();
         }
 
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_debug_errno(link, r, "Could not send RTM_SETLINK message: %m");
-
-        link_ref(link);
         return 0;
 }
 
+static int link_configure(Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
+        int r;
+
+        assert(link);
+        assert(link->manager);
+        assert(req);
+
+        log_link_debug(link, "Setting %s", request_type_to_string(req->type));
+
+        if (req->type == REQUEST_TYPE_SET_LINK_BOND)
+                r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_NEWLINK, link->master_ifindex);
+        else if (IN_SET(req->type, REQUEST_TYPE_SET_LINK_CAN, REQUEST_TYPE_SET_LINK_IPOIB))
+                r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_NEWLINK, link->ifindex);
+        else
+                r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_SETLINK, link->ifindex);
+        if (r < 0)
+                return r;
+
+        r = link_configure_fill_message(link, m, req->type, req->userdata);
+        if (r < 0)
+                return r;
+
+        return request_call_netlink_async(link->manager->rtnl, m, req);
+}
+
 static bool netdev_is_ready(NetDev *netdev) {
         assert(netdev);
 
@@ -499,60 +453,80 @@
         return true;
 }
 
-static bool link_is_ready_to_call_set_link(Request *req) {
-        SetLinkOperation op;
-        Link *link;
+static int link_is_ready_to_set_link(Link *link, Request *req) {
         int r;
 
+        assert(link);
+        assert(link->manager);
+        assert(link->network);
         assert(req);
 
-        link = req->link;
-        op = PTR_TO_INT(req->set_link_operation_ptr);
-
-        if (!IN_SET(link->state, LINK_STATE_INITIALIZED, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
                 return false;
 
-        switch (op) {
-        case SET_LINK_BOND:
-        case SET_LINK_BRIDGE:
-        case SET_LINK_BRIDGE_VLAN:
+        switch (req->type) {
+        case REQUEST_TYPE_SET_LINK_BOND:
+        case REQUEST_TYPE_SET_LINK_BRIDGE:
                 if (!link->master_set)
                         return false;
+
+                if (link->network->keep_master && link->master_ifindex <= 0)
+                        return false;
                 break;
-        case SET_LINK_CAN:
+
+        case REQUEST_TYPE_SET_LINK_BRIDGE_VLAN:
+                if (!link->master_set)
+                        return false;
+
+                if (link->network->keep_master && link->master_ifindex <= 0 && !streq_ptr(link->kind, "bridge"))
+                        return false;
+
+                break;
+
+        case REQUEST_TYPE_SET_LINK_CAN:
                 /* Do not check link->set_flgas_messages here, as it is ok even if link->flags
                  * is outdated, and checking the counter causes a deadlock. */
                 if (FLAGS_SET(link->flags, IFF_UP)) {
                         /* The CAN interface must be down to configure bitrate, etc... */
-                        r = link_down(link);
-                        if (r < 0) {
-                                link_enter_failed(link);
-                                return false;
-                        }
+                        r = link_down_now(link);
+                        if (r < 0)
+                                return r;
                 }
                 break;
-        case SET_LINK_MAC:
-                if (req->netlink_handler == link_set_mac_handler) {
-                        /* This is the second trial to set MTU. On the first attempt
-                         * req->netlink_handler points to link_set_mac_allow_retry_handler().
-                         * The first trial failed as the interface was up. */
-                        r = link_down(link);
-                        if (r < 0) {
-                                link_enter_failed(link);
-                                return false;
-                        }
-                }
-                break;
-        case SET_LINK_MASTER: {
-                uint32_t m = 0;
 
-                assert(link->network);
+        case REQUEST_TYPE_SET_LINK_MAC:
+                if (req->netlink_handler == link_set_mac_handler) {
+                        /* This is the second attempt to set hardware address. On the first attempt
+                         * req->netlink_handler points to link_set_mac_allow_retry_handler().
+                         * The first attempt failed as the interface was up. */
+                        r = link_down_now(link);
+                        if (r < 0)
+                                return r;
+
+                        /* If the kind of the link is "bond", we need
+                         * set the slave link down as well. */
+                        if (streq_ptr(link->kind, "bond")) {
+                                r = link_down_slave_links(link);
+                                if (r < 0)
+                                        return r;
+                        }
+                }
+                break;
+
+        case REQUEST_TYPE_SET_LINK_MASTER: {
+                uint32_t m = 0;
+                Request req_mac = {
+                        .link = link,
+                        .type = REQUEST_TYPE_SET_LINK_MAC,
+                };
 
                 if (link->network->batadv) {
                         if (!netdev_is_ready(link->network->batadv))
                                 return false;
                         m = link->network->batadv->ifindex;
                 } else if (link->network->bond) {
+                        if (ordered_set_contains(link->manager->request_queue, &req_mac))
+                                return false;
                         if (!netdev_is_ready(link->network->bond))
                                 return false;
                         m = link->network->bond->ifindex;
@@ -561,13 +535,13 @@
                          * is outdated, and checking the counter causes a deadlock. */
                         if (FLAGS_SET(link->flags, IFF_UP)) {
                                 /* link must be down when joining to bond master. */
-                                r = link_down(link);
-                                if (r < 0) {
-                                        link_enter_failed(link);
-                                        return false;
-                                }
+                                r = link_down_now(link);
+                                if (r < 0)
+                                        return r;
                         }
                 } else if (link->network->bridge) {
+                        if (ordered_set_contains(link->manager->request_queue, &req_mac))
+                                return false;
                         if (!netdev_is_ready(link->network->bridge))
                                 return false;
                         m = link->network->bridge->ifindex;
@@ -577,9 +551,23 @@
                         m = link->network->vrf->ifindex;
                 }
 
+                if (m == (uint32_t) link->master_ifindex) {
+                        /* The requested master is already set. */
+                        link->master_set = true;
+                        return -EALREADY; /* indicate to cancel the request. */
+                }
+
                 req->userdata = UINT32_TO_PTR(m);
                 break;
         }
+        case REQUEST_TYPE_SET_LINK_MTU: {
+                Request req_ipoib = {
+                        .link = link,
+                        .type = REQUEST_TYPE_SET_LINK_IPOIB,
+                };
+
+                return !ordered_set_contains(link->manager->request_queue, &req_ipoib);
+        }
         default:
                 break;
         }
@@ -587,53 +575,46 @@
         return true;
 }
 
-int request_process_set_link(Request *req) {
-        SetLinkOperation op;
+static int link_process_set_link(Request *req, Link *link, void *userdata) {
         int r;
 
         assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_SET_LINK);
-        assert(req->netlink_handler);
+        assert(link);
 
-        op = PTR_TO_INT(req->set_link_operation_ptr);
+        r = link_is_ready_to_set_link(link, req);
+        if (r == -EALREADY)
+                return 1; /* Cancel the request. */
+        if (r <= 0)
+                return r;
 
-        assert(op >= 0 && op < _SET_LINK_OPERATION_MAX);
-
-        if (!link_is_ready_to_call_set_link(req))
-                return 0;
-
-        r = link_configure(req->link, op, req->userdata, req->netlink_handler);
+        r = link_configure(link, req);
         if (r < 0)
-                return log_link_error_errno(req->link, r, "Failed to set %s: %m",
-                                            set_link_operation_to_string(op));
-
-        if (op == SET_LINK_FLAGS)
-                req->link->set_flags_messages++;
+                return log_link_warning_errno(link, r, "Failed to set %s", request_type_to_string(req->type));
 
         return 1;
 }
 
 static int link_request_set_link(
                 Link *link,
-                SetLinkOperation op,
-                link_netlink_message_handler_t netlink_handler,
+                RequestType type,
+                request_netlink_handler_t netlink_handler,
                 Request **ret) {
 
         Request *req;
         int r;
 
         assert(link);
-        assert(op >= 0 && op < _SET_LINK_OPERATION_MAX);
-        assert(netlink_handler);
 
-        r = link_queue_request(link, REQUEST_TYPE_SET_LINK, INT_TO_PTR(op), false,
-                               &link->set_link_messages, netlink_handler, &req);
+        r = link_queue_request_full(link, type, NULL, NULL, NULL, NULL,
+                                    link_process_set_link,
+                                    &link->set_link_messages,
+                                    netlink_handler,
+                                    &req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to request to set %s: %m",
-                                            set_link_operation_to_string(op));
+                return log_link_warning_errno(link, r, "Failed to request to set %s: %m",
+                                              request_type_to_string(type));
 
-        log_link_debug(link, "Requested to set %s", set_link_operation_to_string(op));
+        log_link_debug(link, "Requested to set %s", request_type_to_string(type));
 
         if (ret)
                 *ret = req;
@@ -641,8 +622,8 @@
 }
 
 int link_request_to_set_addrgen_mode(Link *link) {
+        IPv6LinkLocalAddressGenMode mode;
         Request *req;
-        uint8_t mode;
         int r;
 
         assert(link);
@@ -651,16 +632,27 @@
         if (!socket_ipv6_is_supported())
                 return 0;
 
-        if (!link_ipv6ll_enabled(link))
-                mode = IN6_ADDR_GEN_MODE_NONE;
-        else if (link->network->ipv6ll_address_gen_mode >= 0)
-                mode = link->network->ipv6ll_address_gen_mode;
-        else if (in6_addr_is_set(&link->network->ipv6ll_stable_secret))
-                mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
-        else
-                mode = IN6_ADDR_GEN_MODE_EUI64;
+        mode = link_get_ipv6ll_addrgen_mode(link);
 
-        r = link_request_set_link(link, SET_LINK_ADDRESS_GENERATION_MODE, link_set_addrgen_mode_handler, &req);
+        if (mode == link->ipv6ll_address_gen_mode)
+                return 0;
+
+        /* If the link is already up, then changing the mode by netlink does not take effect until the
+         * link goes down. Hence, we need to reset the interface. However, setting the mode by sysctl
+         * does not need that. Let's use the sysctl interface when the link is already up.
+         * See also issue #22424. */
+        if (mode != IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE &&
+            FLAGS_SET(link->flags, IFF_UP)) {
+                r = link_set_ipv6ll_addrgen_mode(link, mode);
+                if (r < 0)
+                        log_link_warning_errno(link, r, "Cannot set IPv6 address generation mode, ignoring: %m");
+
+                return 0;
+        }
+
+        r = link_request_set_link(link, REQUEST_TYPE_SET_LINK_ADDRESS_GENERATION_MODE,
+                                  link_set_addrgen_mode_handler,
+                                  &req);
         if (r < 0)
                 return r;
 
@@ -672,20 +664,43 @@
         assert(link);
         assert(link->network);
 
-        if (!link->network->bond)
-                return 0;
+        if (!link->network->bond) {
+                Link *master;
 
-        return link_request_set_link(link, SET_LINK_BOND, link_set_bond_handler, NULL);
+                if (!link->network->keep_master)
+                        return 0;
+
+                if (link_get_master(link, &master) < 0)
+                        return 0;
+
+                if (!streq_ptr(master->kind, "bond"))
+                        return 0;
+        }
+
+        return link_request_set_link(link, REQUEST_TYPE_SET_LINK_BOND,
+                                     link_set_bond_handler, NULL);
 }
 
 int link_request_to_set_bridge(Link *link) {
         assert(link);
         assert(link->network);
 
-        if (!link->network->bridge)
-                return 0;
+        if (!link->network->bridge) {
+                Link *master;
 
-        return link_request_set_link(link, SET_LINK_BRIDGE, link_set_bridge_handler, NULL);
+                if (!link->network->keep_master)
+                        return 0;
+
+                if (link_get_master(link, &master) < 0)
+                        return 0;
+
+                if (!streq_ptr(master->kind, "bridge"))
+                        return 0;
+        }
+
+        return link_request_set_link(link, REQUEST_TYPE_SET_LINK_BRIDGE,
+                                     link_set_bridge_handler,
+                                     NULL);
 }
 
 int link_request_to_set_bridge_vlan(Link *link) {
@@ -695,10 +710,22 @@
         if (!link->network->use_br_vlan)
                 return 0;
 
-        if (!link->network->bridge && !streq_ptr(link->kind, "bridge"))
-                return 0;
+        if (!link->network->bridge && !streq_ptr(link->kind, "bridge")) {
+                Link *master;
 
-        return link_request_set_link(link, SET_LINK_BRIDGE_VLAN, link_set_bridge_vlan_handler, NULL);
+                if (!link->network->keep_master)
+                        return 0;
+
+                if (link_get_master(link, &master) < 0)
+                        return 0;
+
+                if (!streq_ptr(master->kind, "bridge"))
+                        return 0;
+        }
+
+        return link_request_set_link(link, REQUEST_TYPE_SET_LINK_BRIDGE_VLAN,
+                                     link_set_bridge_vlan_handler,
+                                     NULL);
 }
 
 int link_request_to_set_can(Link *link) {
@@ -711,7 +738,9 @@
         if (!streq_ptr(link->kind, "can"))
                 return 0;
 
-        return link_request_set_link(link, SET_LINK_CAN, link_set_can_handler, NULL);
+        return link_request_set_link(link, REQUEST_TYPE_SET_LINK_CAN,
+                                     link_set_can_handler,
+                                     NULL);
 }
 
 int link_request_to_set_flags(Link *link) {
@@ -724,57 +753,95 @@
             link->network->promiscuous < 0)
                 return 0;
 
-        return link_request_set_link(link, SET_LINK_FLAGS, link_set_flags_handler, NULL);
+        return link_request_set_link(link, REQUEST_TYPE_SET_LINK_FLAGS,
+                                     link_set_flags_handler,
+                                     NULL);
 }
 
 int link_request_to_set_group(Link *link) {
         assert(link);
         assert(link->network);
 
-        if (!link->network->group_set)
+        if (link->network->group < 0)
                 return 0;
 
-        return link_request_set_link(link, SET_LINK_GROUP, link_set_group_handler, NULL);
+        return link_request_set_link(link, REQUEST_TYPE_SET_LINK_GROUP,
+                                     link_set_group_handler,
+                                     NULL);
 }
 
 int link_request_to_set_mac(Link *link, bool allow_retry) {
+        int r;
+
         assert(link);
         assert(link->network);
 
-        if (!link->network->mac)
+        if (link->network->hw_addr.length == 0)
                 return 0;
 
-        if (link->hw_addr.length != sizeof(struct ether_addr)) {
-                /* Note that for now we only support changing hardware addresses on Ethernet. */
-                log_link_debug(link, "Size of the hardware address (%zu) does not match the size of MAC address (%zu), ignoring.",
-                               link->hw_addr.length, sizeof(struct ether_addr));
-                return 0;
-        }
+        link->requested_hw_addr = link->network->hw_addr;
+        r = net_verify_hardware_address(link->ifname, /* is_static = */ true,
+                                        link->iftype, &link->hw_addr, &link->requested_hw_addr);
+        if (r < 0)
+                return r;
 
-        if (ether_addr_equal(&link->hw_addr.ether, link->network->mac))
+        if (hw_addr_equal(&link->hw_addr, &link->requested_hw_addr))
                 return 0;
 
-        return link_request_set_link(link, SET_LINK_MAC,
+        return link_request_set_link(link, REQUEST_TYPE_SET_LINK_MAC,
                                      allow_retry ? link_set_mac_allow_retry_handler : link_set_mac_handler,
                                      NULL);
 }
 
+int link_request_to_set_ipoib(Link *link) {
+        assert(link);
+        assert(link->network);
+
+        if (link->iftype != ARPHRD_INFINIBAND)
+                return 0;
+
+        if (link->network->ipoib_mode < 0 &&
+            link->network->ipoib_umcast < 0)
+                return 0;
+
+        return link_request_set_link(link, REQUEST_TYPE_SET_LINK_IPOIB,
+                                     link_set_ipoib_handler,
+                                     NULL);
+}
+
 int link_request_to_set_master(Link *link) {
         assert(link);
         assert(link->network);
 
-        link->master_set = false;
+        if (link->network->keep_master) {
+                /* When KeepMaster=yes, BatmanAdvanced=, Bond=, Bridge=, and VRF= are ignored. */
+                link->master_set = true;
+                return 0;
 
-        if (link->network->batadv || link->network->bond || link->network->bridge || link->network->vrf)
-                return link_request_set_link(link, SET_LINK_MASTER, link_set_master_handler, NULL);
-        else
-                return link_request_set_link(link, SET_LINK_MASTER, link_unset_master_handler, NULL);
+        } else if (link->network->batadv || link->network->bond || link->network->bridge || link->network->vrf) {
+                link->master_set = false;
+                return link_request_set_link(link, REQUEST_TYPE_SET_LINK_MASTER,
+                                             link_set_master_handler,
+                                             NULL);
+
+        } else if (link->master_ifindex != 0) {
+                /* Unset master only when it is set. */
+                link->master_set = false;
+                return link_request_set_link(link, REQUEST_TYPE_SET_LINK_MASTER,
+                                             link_unset_master_handler,
+                                             NULL);
+
+        } else {
+                /* Nothing we need to do. */
+                link->master_set = true;
+                return 0;
+        }
 }
 
 int link_request_to_set_mtu(Link *link, uint32_t mtu) {
-        Request *req;
         const char *origin;
         uint32_t min_mtu;
+        Request *req;
         int r;
 
         assert(link);
@@ -810,7 +877,9 @@
         if (link->mtu == mtu)
                 return 0;
 
-        r = link_request_set_link(link, SET_LINK_MTU, link_set_mtu_handler, &req);
+        r = link_request_set_link(link, REQUEST_TYPE_SET_LINK_MTU,
+                                  link_set_mtu_handler,
+                                  &req);
         if (r < 0)
                 return r;
 
@@ -859,17 +928,56 @@
         return link_request_to_set_mtu(link, mtu);
 }
 
-static int link_up_or_down_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, bool up, bool check_ready) {
+static int link_up_dsa_slave(Link *link) {
+        Link *master;
+        int r;
+
+        assert(link);
+
+        /* For older kernels (specifically, older than 9d5ef190e5615a7b63af89f88c4106a5bc127974, kernel-5.12),
+         * it is necessary to bring up a DSA slave that its master interface is already up. And bringing up
+         * the slave fails with -ENETDOWN. So, let's bring up the master even if it is not managed by us,
+         * and try to bring up the slave after the master becomes up. */
+
+        if (link->dsa_master_ifindex <= 0)
+                return 0;
+
+        if (!streq_ptr(link->driver, "dsa"))
+                return 0;
+
+        if (link_get_by_index(link->manager, link->dsa_master_ifindex, &master) < 0)
+                return 0;
+
+        if (master->state == LINK_STATE_UNMANAGED) {
+                /* If the DSA master interface is unmanaged, then it will never become up.
+                 * Let's request to bring up the master. */
+                r = link_request_to_bring_up_or_down(master, /* up = */ true);
+                if (r < 0)
+                        return r;
+        }
+
+        r = link_request_to_bring_up_or_down(link, /* up = */ true);
+        if (r < 0)
+                return r;
+
+        return 1;
+}
+
+static int link_up_or_down_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, void *userdata) {
+        bool on_activate, up;
         int r;
 
         assert(m);
+        assert(req);
         assert(link);
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                goto on_error;
+        on_activate = req->type == REQUEST_TYPE_ACTIVATE_LINK;
+        up = PTR_TO_INT(req->userdata);
 
         r = sd_netlink_message_get_errno(m);
-        if (r < 0)
+        if (r == -ENETDOWN && up && link_up_dsa_slave(link) > 0)
+                log_link_message_debug_errno(link, m, r, "Could not bring up dsa slave, retrying again after dsa master becomes up");
+        else if (r < 0)
                 log_link_message_warning_errno(link, m, r, up ?
                                                "Could not bring up interface, ignoring" :
                                                "Could not bring down interface, ignoring");
@@ -877,122 +985,91 @@
         r = link_call_getlink(link, get_link_update_flag_handler);
         if (r < 0) {
                 link_enter_failed(link);
-                goto on_error;
+                return 0;
         }
 
-        if (check_ready) {
+        link->set_flags_messages++;
+
+        if (on_activate) {
                 link->activated = true;
                 link_check_ready(link);
         }
 
-        return 1;
-
-on_error:
-        assert(link->set_flags_messages > 0);
-        link->set_flags_messages--;
-
         return 0;
 }
 
-static int link_activate_up_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return link_up_or_down_handler_internal(rtnl, m, link, true, true);
-}
-
-static int link_activate_down_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return link_up_or_down_handler_internal(rtnl, m, link, false, true);
-}
-
-static int link_up_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return link_up_or_down_handler_internal(rtnl, m, link, true, false);
-}
-
-static int link_down_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return link_up_or_down_handler_internal(rtnl, m, link, false, false);
-}
-
 static const char *up_or_down(bool up) {
         return up ? "up" : "down";
 }
 
-static int link_up_or_down(Link *link, bool up, link_netlink_message_handler_t callback) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int link_up_or_down(Link *link, bool up, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(link);
         assert(link->manager);
         assert(link->manager->rtnl);
-        assert(callback);
+        assert(req);
 
         log_link_debug(link, "Bringing link %s", up_or_down(up));
 
-        r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
+        r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_SETLINK, link->ifindex);
         if (r < 0)
-                return log_link_debug_errno(link, r, "Could not allocate RTM_SETLINK message: %m");
+                return r;
 
-        r = sd_rtnl_message_link_set_flags(req, up ? IFF_UP : 0, IFF_UP);
+        r = sd_rtnl_message_link_set_flags(m, up ? IFF_UP : 0, IFF_UP);
         if (r < 0)
-                return log_link_debug_errno(link, r, "Could not set link flags: %m");
+                return r;
 
-        r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
-                               link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_debug_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-
-        return 0;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-int link_down(Link *link) {
-        int r;
-
+static bool link_is_ready_to_activate_one(Link *link, bool allow_unmanaged) {
         assert(link);
 
-        r = link_up_or_down(link, false, link_down_handler);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to bring down interface: %m");
-
-        link->set_flags_messages++;
-        return 0;
-}
-
-static bool link_is_ready_to_activate(Link *link) {
-        assert(link);
-
-        if (!IN_SET(link->state, LINK_STATE_INITIALIZED, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED, LINK_STATE_UNMANAGED))
                 return false;
 
+        if (!link->network)
+                return allow_unmanaged;
+
         if (link->set_link_messages > 0)
                 return false;
 
         return true;
 }
 
-int request_process_activation(Request *req) {
-        Link *link;
-        bool up;
+ static bool link_is_ready_to_activate(Link *link, bool up) {
+        assert(link);
+
+        if (!check_ready_for_all_sr_iov_ports(link, /* allow_unmanaged = */ false,
+                                              link_is_ready_to_activate_one))
+                return false;
+
+        if (up && link_rfkilled(link) > 0)
+                return false;
+
+        return true;
+}
+
+static int link_process_activation(Request *req, Link *link, void *userdata) {
+        bool up = PTR_TO_INT(userdata);
         int r;
 
         assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_ACTIVATE_LINK);
-        assert(req->netlink_handler);
+        assert(link);
 
-        link = req->link;
-        up = PTR_TO_INT(req->userdata);
-
-        if (!link_is_ready_to_activate(link))
+        if (!link_is_ready_to_activate(link, up))
                 return 0;
 
-        r = link_up_or_down(link, up, req->netlink_handler);
+        r = link_up_or_down(link, up, req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to bring %s: %m", up_or_down(up));
+                return log_link_warning_errno(link, r, "Failed to activate link: %m");
 
         return 1;
 }
 
 int link_request_to_activate(Link *link) {
-        Request *req;
         bool up;
         int r;
 
@@ -1018,25 +1095,38 @@
                 up = false;
                 break;
         default:
-                assert_not_reached("invalid activation policy");
+                assert_not_reached();
         }
 
         link->activated = false;
 
-        r = link_queue_request(link, REQUEST_TYPE_ACTIVATE_LINK, NULL, false, &link->set_flags_messages,
-                               up ? link_activate_up_handler : link_activate_down_handler, &req);
+        r = link_queue_request_full(link, REQUEST_TYPE_ACTIVATE_LINK,
+                                    INT_TO_PTR(up), NULL, NULL, NULL,
+                                    link_process_activation,
+                                    &link->set_flags_messages,
+                                    link_up_or_down_handler, NULL);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to request to activate link: %m");
 
-        req->userdata = INT_TO_PTR(up);
-
         log_link_debug(link, "Requested to activate link");
         return 0;
 }
 
-static bool link_is_ready_to_bring_up_or_down(Link *link) {
+static bool link_is_ready_to_bring_up_or_down(Link *link, bool up) {
         assert(link);
 
+        if (up && link->dsa_master_ifindex > 0) {
+                Link *master;
+
+                /* The master interface must be up. See comments in link_up_dsa_slave(). */
+
+                if (link_get_by_index(link->manager, link->dsa_master_ifindex, &master) < 0)
+                        return false;
+
+                if (!FLAGS_SET(master->flags, IFF_UP))
+                        return false;
+        }
+
         if (link->state == LINK_STATE_UNMANAGED)
                 return true;
 
@@ -1049,45 +1139,152 @@
         if (!link->activated)
                 return false;
 
+        if (up && link_rfkilled(link) > 0)
+                return false;
+
         return true;
 }
 
-int request_process_link_up_or_down(Request *req) {
-        Link *link;
-        bool up;
+static int link_process_up_or_down(Request *req, Link *link, void *userdata) {
+        bool up = PTR_TO_INT(userdata);
         int r;
 
         assert(req);
-        assert(req->link);
-        assert(req->type == REQUEST_TYPE_UP_DOWN);
+        assert(link);
 
-        link = req->link;
-        up = PTR_TO_INT(req->userdata);
-
-        if (!link_is_ready_to_bring_up_or_down(link))
+        if (!link_is_ready_to_bring_up_or_down(link, up))
                 return 0;
 
-        r = link_up_or_down(link, up, req->netlink_handler);
+        r = link_up_or_down(link, up, req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to bring %s: %m", up_or_down(up));
+                return log_link_warning_errno(link, r, "Failed to bring link %s: %m", up_or_down(up));
 
         return 1;
 }
 
 int link_request_to_bring_up_or_down(Link *link, bool up) {
-        Request *req;
         int r;
 
         assert(link);
 
-        r = link_queue_request(link, REQUEST_TYPE_UP_DOWN, NULL, false, &link->set_flags_messages,
-                               up ? link_up_handler : link_down_handler, &req);
+        r = link_queue_request_full(link, REQUEST_TYPE_UP_DOWN,
+                                    INT_TO_PTR(up), NULL, NULL, NULL,
+                                    link_process_up_or_down,
+                                    &link->set_flags_messages,
+                                    link_up_or_down_handler, NULL);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to request to bring %s link: %m",
-                                            up_or_down(up));
-
-        req->userdata = INT_TO_PTR(up);
+                return log_link_warning_errno(link, r, "Failed to request to bring link %s: %m",
+                                              up_or_down(up));
 
         log_link_debug(link, "Requested to bring link %s", up_or_down(up));
         return 0;
 }
+
+static int link_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+        int r;
+
+        assert(m);
+        assert(link);
+        assert(link->set_flags_messages > 0);
+
+        link->set_flags_messages--;
+
+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 0;
+
+        r = sd_netlink_message_get_errno(m);
+        if (r < 0)
+                log_link_message_warning_errno(link, m, r, "Could not bring down interface, ignoring");
+
+        r = link_call_getlink(link, get_link_update_flag_handler);
+        if (r < 0) {
+                link_enter_failed(link);
+                return 0;
+        }
+
+        link->set_flags_messages++;
+        return 0;
+}
+
+int link_down_now(Link *link) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        int r;
+
+        assert(link);
+        assert(link->manager);
+        assert(link->manager->rtnl);
+
+        log_link_debug(link, "Bringing link down");
+
+        r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Could not allocate RTM_SETLINK message: %m");
+
+        r = sd_rtnl_message_link_set_flags(req, 0, IFF_UP);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Could not set link flags: %m");
+
+        r = netlink_call_async(link->manager->rtnl, NULL, req, link_down_now_handler,
+                               link_netlink_destroy_callback, link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Could not send rtnetlink message: %m");
+
+        link->set_flags_messages++;
+        link_ref(link);
+        return 0;
+}
+
+int link_down_slave_links(Link *link) {
+        Link *slave;
+        int r;
+
+        assert(link);
+
+        SET_FOREACH(slave, link->slaves) {
+                r = link_down_now(slave);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int link_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+        int r;
+
+        assert(m);
+        assert(link);
+
+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 0;
+
+        r = sd_netlink_message_get_errno(m);
+        if (r < 0)
+                log_link_message_warning_errno(link, m, r, "Could not remove interface, ignoring");
+
+        return 0;
+}
+
+int link_remove(Link *link) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+        int r;
+
+        assert(link);
+        assert(link->manager);
+        assert(link->manager->rtnl);
+
+        log_link_debug(link, "Removing link.");
+
+        r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_DELLINK, link->ifindex);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Could not allocate RTM_DELLINK message: %m");
+
+        r = netlink_call_async(link->manager->rtnl, NULL, req, link_remove_handler,
+                               link_netlink_destroy_callback, link);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Could not send rtnetlink message: %m");
+
+        link_ref(link);
+
+        return 0;
+}
diff --git a/src/network/networkd-setlink.h b/src/network/networkd-setlink.h
index d3e9f2b..841e5ee 100644
--- a/src/network/networkd-setlink.h
+++ b/src/network/networkd-setlink.h
@@ -2,28 +2,9 @@
 #pragma once
 
 #include <inttypes.h>
+#include <stdbool.h>
 
 typedef struct Link Link;
-typedef struct Request Request;
-
-typedef enum SetLinkOperation {
-        SET_LINK_ADDRESS_GENERATION_MODE, /* Setting IPv6LL address generation mode. */
-        SET_LINK_BOND,                    /* Setting bond configs. */
-        SET_LINK_BRIDGE,                  /* Setting bridge configs. */
-        SET_LINK_BRIDGE_VLAN,             /* Setting bridge VLAN configs. */
-        SET_LINK_CAN,                     /* Setting CAN interface configs. */
-        SET_LINK_FLAGS,                   /* Setting IFF_NOARP or friends. */
-        SET_LINK_GROUP,                   /* Setting interface group. */
-        SET_LINK_MAC,                     /* Setting MAC address. */
-        SET_LINK_MASTER,                  /* Setting IFLA_MASTER. */
-        SET_LINK_MTU,                     /* Setting MTU. */
-        _SET_LINK_OPERATION_MAX,
-        _SET_LINK_OPERATION_INVALID = -EINVAL,
-} SetLinkOperation;
-
-/* SetLinkOperation is casted to int, then stored in void* with INT_TO_PTR(). */
-assert_cc(sizeof(SetLinkOperation) <= sizeof(void*));
-assert_cc(sizeof(SetLinkOperation) <= sizeof(int));
 
 int link_request_to_set_addrgen_mode(Link *link);
 int link_request_to_set_bond(Link *link);
@@ -33,17 +14,16 @@
 int link_request_to_set_flags(Link *link);
 int link_request_to_set_group(Link *link);
 int link_request_to_set_mac(Link *link, bool allow_retry);
+int link_request_to_set_ipoib(Link *link);
 int link_request_to_set_master(Link *link);
 int link_request_to_set_mtu(Link *link, uint32_t mtu);
 
 int link_configure_mtu(Link *link);
 
-int request_process_set_link(Request *req);
-
-int link_down(Link *link);
-
-int request_process_activation(Request *req);
 int link_request_to_activate(Link *link);
 
-int request_process_link_up_or_down(Request *req);
 int link_request_to_bring_up_or_down(Link *link, bool up);
+
+int link_down_now(Link *link);
+int link_down_slave_links(Link *link);
+int link_remove(Link *link);
diff --git a/src/network/networkd-speed-meter.c b/src/network/networkd-speed-meter.c
index 6c3f970..cf8294e 100644
--- a/src/network/networkd-speed-meter.c
+++ b/src/network/networkd-speed-meter.c
@@ -43,13 +43,12 @@
 
 static int speed_meter_handler(sd_event_source *s, uint64_t usec, void *userdata) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         usec_t usec_now;
         Link *link;
         int r;
 
         assert(s);
-        assert(userdata);
 
         r = sd_event_now(sd_event_source_get_event(s), CLOCK_MONOTONIC, &usec_now);
         if (r < 0)
@@ -71,7 +70,7 @@
                 return 0;
         }
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0) {
                 log_warning_errno(r, "Failed to set dump flag, ignoring: %m");
                 return 0;
diff --git a/src/network/networkd-sriov.c b/src/network/networkd-sriov.c
index 7a76b61..77ada23 100644
--- a/src/network/networkd-sriov.c
+++ b/src/network/networkd-sriov.c
@@ -1,92 +1,19 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later
  * Copyright © 2020 VMware, Inc. */
 
-#include "alloc-util.h"
-#include "netlink-util.h"
+#include "device-enumerator-private.h"
+#include "device-util.h"
+#include "fd-util.h"
+#include "networkd-link.h"
 #include "networkd-manager.h"
+#include "networkd-queue.h"
 #include "networkd-sriov.h"
-#include "parse-util.h"
-#include "set.h"
-#include "string-util.h"
 
-static int sr_iov_new(SRIOV **ret) {
-        SRIOV *sr_iov;
-
-        sr_iov = new(SRIOV, 1);
-        if (!sr_iov)
-                return -ENOMEM;
-
-        *sr_iov = (SRIOV) {
-                  .vf = UINT32_MAX,
-                  .vlan_proto = ETH_P_8021Q,
-                  .vf_spoof_check_setting = -1,
-                  .trust = -1,
-                  .query_rss = -1,
-                  .link_state = _SR_IOV_LINK_STATE_INVALID,
-        };
-
-        *ret = TAKE_PTR(sr_iov);
-
-        return 0;
-}
-
-static int sr_iov_new_static(Network *network, const char *filename, unsigned section_line, SRIOV **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
-        _cleanup_(sr_iov_freep) SRIOV *sr_iov = NULL;
-        SRIOV *existing = NULL;
+static int sr_iov_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, SRIOV *sr_iov) {
         int r;
 
-        assert(network);
-        assert(ret);
-        assert(filename);
-        assert(section_line > 0);
-
-        r = network_config_section_new(filename, section_line, &n);
-        if (r < 0)
-                return r;
-
-        existing = ordered_hashmap_get(network->sr_iov_by_section, n);
-        if (existing) {
-                *ret = existing;
-                return 0;
-        }
-
-        r = sr_iov_new(&sr_iov);
-        if (r < 0)
-                return r;
-
-        sr_iov->network = network;
-        sr_iov->section = TAKE_PTR(n);
-
-        r = ordered_hashmap_ensure_put(&network->sr_iov_by_section, &network_config_hash_ops, sr_iov->section, sr_iov);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(sr_iov);
-        return 0;
-}
-
-SRIOV *sr_iov_free(SRIOV *sr_iov) {
-        if (!sr_iov)
-                return NULL;
-
-        if (sr_iov->network && sr_iov->section)
-                ordered_hashmap_remove(sr_iov->network->sr_iov_by_section, sr_iov->section);
-
-        network_config_section_free(sr_iov->section);
-
-        return mfree(sr_iov);
-}
-
-static int sr_iov_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        int r;
-
+        assert(m);
         assert(link);
-        assert(link->sr_iov_messages > 0);
-        link->sr_iov_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
@@ -104,432 +31,324 @@
         return 1;
 }
 
-static int sr_iov_configure(Link *link, SRIOV *sr_iov) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int sr_iov_configure(SRIOV *sr_iov, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(sr_iov);
         assert(link);
         assert(link->manager);
         assert(link->manager->rtnl);
         assert(link->ifindex > 0);
+        assert(req);
 
-        log_link_debug(link, "Setting SR-IOV virtual function %"PRIu32, sr_iov->vf);
+        log_link_debug(link, "Setting SR-IOV virtual function %"PRIu32".", sr_iov->vf);
 
-        r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
+        r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_SETLINK, link->ifindex);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not allocate RTM_SETLINK message: %m");
+                return r;
 
-        r = sd_netlink_message_open_container(req, IFLA_VFINFO_LIST);
+        r = sr_iov_set_netlink_message(sr_iov, m);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open IFLA_VFINFO_LIST container: %m");
+                return r;
 
-        r = sd_netlink_message_open_container(req, IFLA_VF_INFO);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not open IFLA_VF_INFO container: %m");
-
-        if (!ether_addr_is_null(&sr_iov->mac)) {
-                struct ifla_vf_mac ivm = {
-                        .vf = sr_iov->vf,
-                };
-
-                memcpy(ivm.mac, &sr_iov->mac, ETH_ALEN);
-                r = sd_netlink_message_append_data(req, IFLA_VF_MAC, &ivm, sizeof(struct ifla_vf_mac));
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFLA_VF_MAC: %m");
-        }
-
-        if (sr_iov->vf_spoof_check_setting >= 0) {
-                struct ifla_vf_spoofchk ivs = {
-                        .vf = sr_iov->vf,
-                        .setting = sr_iov->vf_spoof_check_setting,
-                };
-
-                r = sd_netlink_message_append_data(req, IFLA_VF_SPOOFCHK, &ivs, sizeof(struct ifla_vf_spoofchk));
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFLA_VF_SPOOFCHK: %m");
-        }
-
-        if (sr_iov->query_rss >= 0) {
-                struct ifla_vf_rss_query_en ivs = {
-                        .vf = sr_iov->vf,
-                        .setting = sr_iov->query_rss,
-                };
-
-                r = sd_netlink_message_append_data(req, IFLA_VF_RSS_QUERY_EN, &ivs, sizeof(struct ifla_vf_rss_query_en));
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFLA_VF_RSS_QUERY_EN: %m");
-        }
-
-        if (sr_iov->trust >= 0) {
-                struct ifla_vf_trust ivt = {
-                        .vf = sr_iov->vf,
-                        .setting = sr_iov->trust,
-                };
-
-                r = sd_netlink_message_append_data(req, IFLA_VF_TRUST, &ivt, sizeof(struct ifla_vf_trust));
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFLA_VF_TRUST: %m");
-        }
-
-        if (sr_iov->link_state >= 0) {
-                struct ifla_vf_link_state ivl = {
-                        .vf = sr_iov->vf,
-                        .link_state = sr_iov->link_state,
-                };
-
-                r = sd_netlink_message_append_data(req, IFLA_VF_LINK_STATE, &ivl, sizeof(struct ifla_vf_link_state));
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFLA_VF_LINK_STATE: %m");
-        }
-
-        if (sr_iov->vlan > 0) {
-                /* Because of padding, first the buffer must be initialized with 0. */
-                struct ifla_vf_vlan_info ivvi = {};
-                ivvi.vf = sr_iov->vf;
-                ivvi.vlan = sr_iov->vlan;
-                ivvi.qos = sr_iov->qos;
-                ivvi.vlan_proto = htobe16(sr_iov->vlan_proto);
-
-                r = sd_netlink_message_open_container(req, IFLA_VF_VLAN_LIST);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not open IFLA_VF_VLAN_LIST container: %m");
-
-                r = sd_netlink_message_append_data(req, IFLA_VF_VLAN_INFO, &ivvi, sizeof(struct ifla_vf_vlan_info));
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append IFLA_VF_VLAN_INFO: %m");
-
-                r = sd_netlink_message_close_container(req);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not close IFLA_VF_VLAN_LIST container: %m");
-        }
-
-        r = sd_netlink_message_close_container(req);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not close IFLA_VF_INFO container: %m");
-
-        r = sd_netlink_message_close_container(req);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not close IFLA_VFINFO_LIST container: %m");
-
-        r = netlink_call_async(link->manager->rtnl, NULL, req, sr_iov_handler,
-                               link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-        link->sr_iov_messages++;
-
-        return 0;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-int link_configure_sr_iov(Link *link) {
+static int sr_iov_process_request(Request *req, Link *link, SRIOV *sr_iov) {
+        int r;
+
+        assert(req);
+        assert(link);
+        assert(sr_iov);
+
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return 0;
+
+        r = sr_iov_configure(sr_iov, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r,
+                                              "Failed to configure SR-IOV virtual function %"PRIu32": %m",
+                                              sr_iov->vf);
+
+        return 1;
+}
+
+int link_request_sr_iov_vfs(Link *link) {
         SRIOV *sr_iov;
         int r;
 
         assert(link);
         assert(link->network);
 
-        if (link->sr_iov_messages != 0) {
-                log_link_debug(link, "SR-IOV is configuring.");
-                return 0;
-        }
-
         link->sr_iov_configured = false;
 
         ORDERED_HASHMAP_FOREACH(sr_iov, link->network->sr_iov_by_section) {
-                r = sr_iov_configure(link, sr_iov);
+                r = link_queue_request_safe(link, REQUEST_TYPE_SRIOV,
+                                            sr_iov, NULL,
+                                            sr_iov_hash_func,
+                                            sr_iov_compare_func,
+                                            sr_iov_process_request,
+                                            &link->sr_iov_messages,
+                                            sr_iov_handler,
+                                            NULL);
                 if (r < 0)
-                        return r;
+                        return log_link_warning_errno(link, r,
+                                                      "Failed to request SR-IOV virtual function %"PRIu32": %m",
+                                                      sr_iov->vf);
         }
 
-        if (link->sr_iov_messages == 0)
+        if (link->sr_iov_messages == 0) {
                 link->sr_iov_configured = true;
-        else
+                link_check_ready(link);
+        } else
                 log_link_debug(link, "Configuring SR-IOV");
 
         return 0;
 }
 
-static int sr_iov_section_verify(SRIOV *sr_iov) {
-        assert(sr_iov);
+static int find_ifindex_from_pci_dev_port(sd_device *pci_dev, const char *dev_port) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        int ifindex, r;
 
-        if (section_is_invalid(sr_iov->section))
-                return -EINVAL;
+        assert(pci_dev);
+        assert(dev_port);
 
-        if (sr_iov->vf == UINT32_MAX)
-                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
-                                         "%s: [SRIOV] section without VirtualFunction= field configured. "
-                                         "Ignoring [SRIOV] section from line %u.",
-                                         sr_iov->section->filename, sr_iov->section->line);
-
-        return 0;
-}
-
-void network_drop_invalid_sr_iov(Network *network) {
-        SRIOV *sr_iov;
-
-        assert(network);
-
-        ORDERED_HASHMAP_FOREACH(sr_iov, network->sr_iov_by_section)
-                if (sr_iov_section_verify(sr_iov) < 0)
-                        sr_iov_free(sr_iov);
-}
-
-int config_parse_sr_iov_uint32(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
-        Network *network = data;
-        uint32_t k;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+        r = sd_device_enumerator_new(&e);
         if (r < 0)
                 return r;
 
-        if (isempty(rvalue)) {
-                if (streq(lvalue, "VirtualFunction"))
-                        sr_iov->vf = UINT32_MAX;
-                else if (streq(lvalue, "VLANId"))
-                        sr_iov->vlan = 0;
-                else if (streq(lvalue, "QualityOfService"))
-                        sr_iov->qos = 0;
-                else
-                        assert_not_reached("Invalid lvalue");
-
-                TAKE_PTR(sr_iov);
-                return 0;
-        }
-
-        r = safe_atou32(rvalue, &k);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
-                return 0;
-        }
-
-        if (streq(lvalue, "VLANId")) {
-                if (k == 0 || k > 4095) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid SR-IOV VLANId: %d", k);
-                        return 0;
-                }
-                sr_iov->vlan = k;
-        } else if (streq(lvalue, "VirtualFunction")) {
-                if (k >= INT_MAX) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid SR-IOV virtual function: %d", k);
-                        return 0;
-                }
-                sr_iov->vf = k;
-        } else if (streq(lvalue, "QualityOfService"))
-                sr_iov->qos = k;
-        else
-                assert_not_reached("Invalid lvalue");
-
-        TAKE_PTR(sr_iov);
-        return 0;
-}
-
-int config_parse_sr_iov_vlan_proto(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
-        Network *network = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+        r = sd_device_enumerator_allow_uninitialized(e);
         if (r < 0)
                 return r;
 
-        if (isempty(rvalue) || streq(rvalue, "802.1Q"))
-                sr_iov->vlan_proto = ETH_P_8021Q;
-        else if (streq(rvalue, "802.1ad"))
-                sr_iov->vlan_proto = ETH_P_8021AD;
-        else {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Invalid SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
-                return 0;
-        }
-
-        TAKE_PTR(sr_iov);
-        return 0;
-}
-
-int config_parse_sr_iov_link_state(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
-        Network *network = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+        r = sd_device_enumerator_add_match_parent(e, pci_dev);
         if (r < 0)
                 return r;
 
-        /* Unfortunately, SR_IOV_LINK_STATE_DISABLE is 2, not 0. So, we cannot use
-         * DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN() macro. */
-
-        if (isempty(rvalue)) {
-                sr_iov->link_state = _SR_IOV_LINK_STATE_INVALID;
-                TAKE_PTR(sr_iov);
-                return 0;
-        }
-
-        if (streq(rvalue, "auto")) {
-                sr_iov->link_state = SR_IOV_LINK_STATE_AUTO;
-                TAKE_PTR(sr_iov);
-                return 0;
-        }
-
-        r = parse_boolean(rvalue);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
-                return 0;
-        }
-
-        sr_iov->link_state = r ? SR_IOV_LINK_STATE_ENABLE : SR_IOV_LINK_STATE_DISABLE;
-        TAKE_PTR(sr_iov);
-        return 0;
-}
-
-int config_parse_sr_iov_boolean(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
-        Network *network = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+        r = sd_device_enumerator_add_match_subsystem(e, "net", true);
         if (r < 0)
                 return r;
 
-        if (isempty(rvalue)) {
-                if (streq(lvalue, "MACSpoofCheck"))
-                        sr_iov->vf_spoof_check_setting = -1;
-                else if (streq(lvalue, "QueryReceiveSideScaling"))
-                        sr_iov->query_rss = -1;
-                else if (streq(lvalue, "Trust"))
-                        sr_iov->trust = -1;
-                else
-                        assert_not_reached("Invalid lvalue");
-
-                TAKE_PTR(sr_iov);
-                return 0;
-        }
-
-        r = parse_boolean(rvalue);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse '%s=', ignoring: %s", lvalue, rvalue);
-                return 0;
-        }
-
-        if (streq(lvalue, "MACSpoofCheck"))
-                sr_iov->vf_spoof_check_setting = r;
-        else if (streq(lvalue, "QueryReceiveSideScaling"))
-                sr_iov->query_rss = r;
-        else if (streq(lvalue, "Trust"))
-                sr_iov->trust = r;
-        else
-                assert_not_reached("Invalid lvalue");
-
-        TAKE_PTR(sr_iov);
-        return 0;
-}
-
-int config_parse_sr_iov_mac(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
-        Network *network = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
-
-        r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+        r = sd_device_enumerator_add_match_sysattr(e, "dev_port", dev_port, true);
         if (r < 0)
                 return r;
 
-        if (isempty(rvalue)) {
-                sr_iov->mac = ETHER_ADDR_NULL;
-                TAKE_PTR(sr_iov);
-                return 0;
+        dev = sd_device_enumerator_get_device_first(e);
+        if (!dev)
+                return -ENODEV; /* no device found */
+
+        if (sd_device_enumerator_get_device_next(e))
+                return -ENXIO; /* multiple devices found */
+
+        r = sd_device_get_ifindex(dev, &ifindex);
+        if (r < 0)
+                return r;
+
+        assert(ifindex > 0);
+        return ifindex;
+}
+
+static int manager_update_sr_iov_ifindices(Manager *manager, int phys_port_ifindex, int virt_port_ifindex) {
+        Link *phys_link = NULL, *virt_link = NULL;
+        int r;
+
+        assert(manager);
+        assert(phys_port_ifindex > 0);
+        assert(virt_port_ifindex > 0);
+
+        /* This sets ifindices only when both interfaces are already managed by us. */
+
+        r = link_get_by_index(manager, phys_port_ifindex, &phys_link);
+        if (r < 0)
+                return r;
+
+        r = link_get_by_index(manager, virt_port_ifindex, &virt_link);
+        if (r < 0)
+                return r;
+
+        /* update VF ifindex in PF */
+        r = set_ensure_put(&phys_link->sr_iov_virt_port_ifindices, NULL, INT_TO_PTR(virt_port_ifindex));
+        if (r < 0)
+                return r;
+
+        log_link_debug(phys_link,
+                       "Found SR-IOV VF port %s(%i).",
+                       virt_link ? virt_link->ifname : "n/a", virt_port_ifindex);
+
+        /* update PF ifindex in VF */
+        if (virt_link->sr_iov_phys_port_ifindex > 0 && virt_link->sr_iov_phys_port_ifindex != phys_port_ifindex) {
+                Link *old_phys_link;
+
+                if (link_get_by_index(manager, virt_link->sr_iov_phys_port_ifindex, &old_phys_link) >= 0)
+                        set_remove(old_phys_link->sr_iov_virt_port_ifindices, INT_TO_PTR(virt_port_ifindex));
         }
 
-        r = ether_addr_from_string(rvalue, &sr_iov->mac);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
-                return 0;
-        }
+        virt_link->sr_iov_phys_port_ifindex = phys_port_ifindex;
 
-        TAKE_PTR(sr_iov);
+        log_link_debug(virt_link,
+                       "Found SR-IOV PF port %s(%i).",
+                       phys_link ? phys_link->ifname : "n/a", phys_port_ifindex);
+
         return 0;
 }
+
+static int link_set_sr_iov_phys_port(Link *link) {
+        _cleanup_(sd_device_unrefp) sd_device *pci_physfn_dev = NULL;
+        const char *dev_port;
+        sd_device *pci_dev;
+        int r;
+
+        assert(link);
+        assert(link->manager);
+
+        if (link->sr_iov_phys_port_ifindex > 0)
+                return 0;
+
+        if (!link->dev)
+                return -ENODEV;
+
+        r = sd_device_get_sysattr_value(link->dev, "dev_port", &dev_port);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_parent_with_subsystem_devtype(link->dev, "pci", NULL, &pci_dev);
+        if (r < 0)
+                return r;
+
+        r = sd_device_new_child(&pci_physfn_dev, pci_dev, "physfn");
+        if (r < 0)
+                return r;
+
+        r = find_ifindex_from_pci_dev_port(pci_physfn_dev, dev_port);
+        if (r < 0)
+                return r;
+
+        return manager_update_sr_iov_ifindices(link->manager, r, link->ifindex);
+}
+
+static int link_set_sr_iov_virt_ports(Link *link) {
+        const char *dev_port, *name;
+        sd_device *pci_dev, *child;
+        int r;
+
+        assert(link);
+        assert(link->manager);
+
+        set_clear(link->sr_iov_virt_port_ifindices);
+
+        if (!link->dev)
+                return -ENODEV;
+
+        r = sd_device_get_sysattr_value(link->dev, "dev_port", &dev_port);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_parent_with_subsystem_devtype(link->dev, "pci", NULL, &pci_dev);
+        if (r < 0)
+                return r;
+
+        FOREACH_DEVICE_CHILD_WITH_SUFFIX(pci_dev, child, name) {
+                const char *n;
+
+                /* Accept name prefixed with "virtfn", but refuse "virtfn" itself. */
+                n = startswith(name, "virtfn");
+                if (isempty(n) || !in_charset(n, DIGITS))
+                        continue;
+
+                r = find_ifindex_from_pci_dev_port(child, dev_port);
+                if (r < 0)
+                        continue;
+
+                if (manager_update_sr_iov_ifindices(link->manager, link->ifindex, r) < 0)
+                        continue;
+        }
+
+        return 0;
+}
+
+int link_set_sr_iov_ifindices(Link *link) {
+        int r;
+
+        assert(link);
+
+        r = link_set_sr_iov_phys_port(link);
+        if (r < 0 && !ERRNO_IS_DEVICE_ABSENT(r))
+                return r;
+
+        r = link_set_sr_iov_virt_ports(link);
+        if (r < 0 && !ERRNO_IS_DEVICE_ABSENT(r))
+                return r;
+
+        return 0;
+}
+
+void link_clear_sr_iov_ifindices(Link *link) {
+        void *v;
+
+        assert(link);
+        assert(link->manager);
+
+        if (link->sr_iov_phys_port_ifindex > 0) {
+                Link *phys_link;
+
+                if (link_get_by_index(link->manager, link->sr_iov_phys_port_ifindex, &phys_link) >= 0)
+                        set_remove(phys_link->sr_iov_virt_port_ifindices, INT_TO_PTR(link->ifindex));
+
+                link->sr_iov_phys_port_ifindex = 0;
+        }
+
+        while ((v = set_steal_first(link->sr_iov_virt_port_ifindices))) {
+                Link *virt_link;
+
+                if (link_get_by_index(link->manager, PTR_TO_INT(v), &virt_link) >= 0)
+                        virt_link->sr_iov_phys_port_ifindex = 0;
+        }
+}
+
+bool check_ready_for_all_sr_iov_ports(
+                Link *link,
+                bool allow_unmanaged, /* for the main target */
+                bool (check_one)(Link *link, bool allow_unmanaged)) {
+
+        Link *phys_link;
+        void *v;
+
+        assert(link);
+        assert(link->manager);
+        assert(check_one);
+
+        /* Some drivers make VF ports become down when their PF port becomes down, and may fail to configure
+         * VF ports. Also, when a VF port becomes up/down, its PF port and other VF ports may become down.
+         * See issue #23315. */
+
+        /* First, check the main target. */
+        if (!check_one(link, allow_unmanaged))
+                return false;
+
+        /* If this is a VF port, then also check the PF port. */
+        if (link->sr_iov_phys_port_ifindex > 0) {
+                if (link_get_by_index(link->manager, link->sr_iov_phys_port_ifindex, &phys_link) < 0 ||
+                    !check_one(phys_link, /* allow_unmanaged = */ true))
+                        return false;
+        } else
+                phys_link = link;
+
+        /* Also check all VF ports. */
+        SET_FOREACH(v, phys_link->sr_iov_virt_port_ifindices) {
+                int ifindex = PTR_TO_INT(v);
+                Link *virt_link;
+
+                if (ifindex == link->ifindex)
+                        continue; /* The main target link is a VF port, and its state is already checked. */
+
+                if (link_get_by_index(link->manager, ifindex, &virt_link) < 0)
+                        return false;
+
+                if (!check_one(virt_link, /* allow_unmanaged = */ true))
+                        return false;
+        }
+
+        return true;
+}
diff --git a/src/network/networkd-sriov.h b/src/network/networkd-sriov.h
index 950d1f9..0d4276e 100644
--- a/src/network/networkd-sriov.h
+++ b/src/network/networkd-sriov.h
@@ -2,45 +2,16 @@
  * Copyright © 2020 VMware, Inc. */
 #pragma once
 
-#include <linux/if_link.h>
+#include "netif-sriov.h"
 
-#include "conf-parser.h"
-#include "ether-addr-util.h"
-#include "networkd-link.h"
-#include "networkd-network.h"
-#include "networkd-util.h"
+typedef struct Link Link;
 
-typedef enum SRIOVLinkState {
-        SR_IOV_LINK_STATE_AUTO = IFLA_VF_LINK_STATE_AUTO,
-        SR_IOV_LINK_STATE_ENABLE = IFLA_VF_LINK_STATE_ENABLE,
-        SR_IOV_LINK_STATE_DISABLE = IFLA_VF_LINK_STATE_DISABLE,
-        _SR_IOV_LINK_STATE_MAX,
-        _SR_IOV_LINK_STATE_INVALID = -EINVAL,
-} SRIOVLinkState;
+int link_request_sr_iov_vfs(Link *link);
 
-typedef struct SRIOV {
-        NetworkConfigSection *section;
-        Network *network;
+int link_set_sr_iov_ifindices(Link *link);
+void link_clear_sr_iov_ifindices(Link *link);
 
-        uint32_t vf;   /* 0 - 2147483646 */
-        uint32_t vlan; /* 0 - 4095, 0 disables VLAN filter */
-        uint32_t qos;
-        uint16_t vlan_proto; /* ETH_P_8021Q or ETH_P_8021AD */
-        int vf_spoof_check_setting;
-        int query_rss;
-        int trust;
-        SRIOVLinkState link_state;
-        struct ether_addr mac;
-} SRIOV;
-
-SRIOV *sr_iov_free(SRIOV *sr_iov);
-int link_configure_sr_iov(Link *link);
-void network_drop_invalid_sr_iov(Network *network);
-
-DEFINE_NETWORK_SECTION_FUNCTIONS(SRIOV, sr_iov_free);
-
-CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_uint32);
-CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_boolean);
-CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_link_state);
-CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_vlan_proto);
-CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_mac);
+bool check_ready_for_all_sr_iov_ports(
+                Link *link,
+                bool allow_unmanaged, /* for the main target */
+                bool (check_one)(Link *link, bool allow_unmanaged));
diff --git a/src/network/networkd-state-file.c b/src/network/networkd-state-file.c
index 745aa4a..6e962c0 100644
--- a/src/network/networkd-state-file.c
+++ b/src/network/networkd-state-file.c
@@ -5,6 +5,7 @@
 
 #include "alloc-util.h"
 #include "dns-domain.h"
+#include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
@@ -119,7 +120,9 @@
         int r;
 
         assert(m);
-        assert(m->state_file);
+
+        if (isempty(m->state_file))
+                return 0; /* Do not update state file when running in test mode. */
 
         HASHMAP_FOREACH(link, m->links_by_index) {
                 const struct in_addr *addresses;
@@ -202,7 +205,7 @@
                         const char *domainname;
                         char **domains = NULL;
 
-                        target_domains = (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_YES) ? &search_domains : &route_domains;
+                        target_domains = link->network->dhcp_use_domains == DHCP_USE_DOMAINS_YES ? &search_domains : &route_domains;
                         r = sd_dhcp_lease_get_domainname(link->dhcp_lease, &domainname);
                         if (r >= 0) {
                                 r = ordered_set_put_strdup(target_domains, domainname);
@@ -348,6 +351,11 @@
 }
 
 static void link_save_dns(Link *link, FILE *f, struct in_addr_full **dns, unsigned n_dns, bool *space) {
+        bool _space = false;
+
+        if (!space)
+                space = &_space;
+
         for (unsigned j = 0; j < n_dns; j++) {
                 const char *str;
 
@@ -416,6 +424,45 @@
                 fputc('\n', f);
 }
 
+static void link_save_domains(Link *link, FILE *f, OrderedSet *static_domains, DHCPUseDomains use_domains) {
+        bool space = false;
+        const char *p;
+
+        assert(link);
+        assert(link->network);
+        assert(f);
+
+        ORDERED_SET_FOREACH(p, static_domains)
+                fputs_with_space(f, p, NULL, &space);
+
+        if (use_domains == DHCP_USE_DOMAINS_NO)
+                return;
+
+        if (link->dhcp_lease && link->network->dhcp_use_domains == use_domains) {
+                const char *domainname;
+                char **domains;
+
+                if (sd_dhcp_lease_get_domainname(link->dhcp_lease, &domainname) >= 0)
+                        fputs_with_space(f, domainname, NULL, &space);
+                if (sd_dhcp_lease_get_search_domains(link->dhcp_lease, &domains) >= 0)
+                        fputstrv(f, domains, NULL, &space);
+        }
+
+        if (link->dhcp6_lease && link->network->dhcp6_use_domains == use_domains) {
+                char **domains;
+
+                if (sd_dhcp6_lease_get_domains(link->dhcp6_lease, &domains) >= 0)
+                        fputstrv(f, domains, NULL, &space);
+        }
+
+        if (link->network->ipv6_accept_ra_use_domains == use_domains) {
+                NDiscDNSSL *dd;
+
+                SET_FOREACH(dd, link->ndisc_dnssl)
+                        fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space);
+        }
+}
+
 int link_save(Link *link) {
         const char *admin_state, *oper_state, *carrier_state, *address_state, *ipv4_address_state, *ipv6_address_state;
         _cleanup_(unlink_and_freep) char *temp_path = NULL;
@@ -423,10 +470,11 @@
         int r;
 
         assert(link);
-        assert(link->state_file);
-        assert(link->lease_file);
         assert(link->manager);
 
+        if (isempty(link->state_file))
+                return 0; /* Do not update state files when running in test mode. */
+
         if (link->state == LINK_STATE_LINGER)
                 return 0;
 
@@ -467,9 +515,8 @@
                 admin_state, oper_state, carrier_state, address_state, ipv4_address_state, ipv6_address_state);
 
         if (link->network) {
-                char **dhcp6_domains = NULL, **dhcp_domains = NULL;
-                const char *dhcp_domainname = NULL, *online_state, *p;
-                bool space;
+                const char *online_state;
+                bool space = false;
 
                 online_state = link_online_state_to_string(link->online_state);
                 if (online_state)
@@ -492,48 +539,63 @@
 
                 fprintf(f, "NETWORK_FILE=%s\n", link->network->filename);
 
+                fputs("NETWORK_FILE_DROPINS=\"", f);
+                STRV_FOREACH(d, link->network->dropins) {
+                        _cleanup_free_ char *escaped = NULL;
+
+                        escaped = xescape(*d, ":");
+                        if (!escaped)
+                                return -ENOMEM;
+
+                        fputs_with_space(f, escaped, ":", &space);
+                }
+                fputs("\"\n", f);
+
                 /************************************************************/
 
                 fputs("DNS=", f);
-                space = false;
                 if (link->n_dns != UINT_MAX)
-                        link_save_dns(link, f, link->dns, link->n_dns, &space);
-                else
+                        link_save_dns(link, f, link->dns, link->n_dns, NULL);
+                else {
+                        space = false;
                         link_save_dns(link, f, link->network->dns, link->network->n_dns, &space);
 
-                serialize_addresses(f, NULL, &space,
-                                    NULL,
-                                    link->dhcp_lease,
-                                    link->network->dhcp_use_dns,
-                                    SD_DHCP_LEASE_DNS,
-                                    link->dhcp6_lease,
-                                    link->network->dhcp6_use_dns,
-                                    sd_dhcp6_lease_get_dns,
-                                    NULL);
+                        serialize_addresses(f, NULL, &space,
+                                            NULL,
+                                            link->dhcp_lease,
+                                            link->network->dhcp_use_dns,
+                                            SD_DHCP_LEASE_DNS,
+                                            link->dhcp6_lease,
+                                            link->network->dhcp6_use_dns,
+                                            sd_dhcp6_lease_get_dns,
+                                            NULL);
 
-                /* Make sure to flush out old entries before we use the NDisc data */
-                ndisc_vacuum(link);
+                        if (link->network->ipv6_accept_ra_use_dns) {
+                                NDiscRDNSS *dd;
 
-                if (link->network->ipv6_accept_ra_use_dns && link->ndisc_rdnss) {
-                        NDiscRDNSS *dd;
-
-                        SET_FOREACH(dd, link->ndisc_rdnss)
-                                serialize_in6_addrs(f, &dd->address, 1, &space);
+                                SET_FOREACH(dd, link->ndisc_rdnss)
+                                        serialize_in6_addrs(f, &dd->address, 1, &space);
+                        }
                 }
 
                 fputc('\n', f);
 
                 /************************************************************/
 
-                serialize_addresses(f, "NTP", NULL,
-                                    link->ntp ?: link->network->ntp,
-                                    link->dhcp_lease,
-                                    link->network->dhcp_use_ntp,
-                                    SD_DHCP_LEASE_NTP,
-                                    link->dhcp6_lease,
-                                    link->network->dhcp6_use_ntp,
-                                    sd_dhcp6_lease_get_ntp_addrs,
-                                    sd_dhcp6_lease_get_ntp_fqdn);
+                if (link->ntp) {
+                        fputs("NTP=", f);
+                        fputstrv(f, link->ntp, NULL, NULL);
+                        fputc('\n', f);
+                } else
+                        serialize_addresses(f, "NTP", NULL,
+                                            link->network->ntp,
+                                            link->dhcp_lease,
+                                            link->network->dhcp_use_ntp,
+                                            SD_DHCP_LEASE_NTP,
+                                            link->dhcp6_lease,
+                                            link->network->dhcp6_use_ntp,
+                                            sd_dhcp6_lease_get_ntp_addrs,
+                                            sd_dhcp6_lease_get_ntp_fqdn);
 
                 serialize_addresses(f, "SIP", NULL,
                                     NULL,
@@ -544,59 +606,20 @@
 
                 /************************************************************/
 
-                if (link->network->dhcp_use_domains != DHCP_USE_DOMAINS_NO && link->dhcp_lease) {
-                        (void) sd_dhcp_lease_get_domainname(link->dhcp_lease, &dhcp_domainname);
-                        (void) sd_dhcp_lease_get_search_domains(link->dhcp_lease, &dhcp_domains);
-                }
-                if (link->network->dhcp6_use_domains != DHCP_USE_DOMAINS_NO && link->dhcp6_lease)
-                        (void) sd_dhcp6_lease_get_domains(link->dhcp6_lease, &dhcp6_domains);
-
                 fputs("DOMAINS=", f);
-                space = false;
-                ORDERED_SET_FOREACH(p, link->search_domains ?: link->network->search_domains)
-                        fputs_with_space(f, p, NULL, &space);
-
-                if (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_YES) {
-                        if (dhcp_domainname)
-                                fputs_with_space(f, dhcp_domainname, NULL, &space);
-                        if (dhcp_domains)
-                                fputstrv(f, dhcp_domains, NULL, &space);
-                        if (dhcp6_domains)
-                                fputstrv(f, dhcp6_domains, NULL, &space);
-                }
-
-                if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_YES) {
-                        NDiscDNSSL *dd;
-
-                        SET_FOREACH(dd, link->ndisc_dnssl)
-                                fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space);
-                }
-
+                if (link->search_domains)
+                        link_save_domains(link, f, link->search_domains, DHCP_USE_DOMAINS_NO);
+                else
+                        link_save_domains(link, f, link->network->search_domains, DHCP_USE_DOMAINS_YES);
                 fputc('\n', f);
 
                 /************************************************************/
 
                 fputs("ROUTE_DOMAINS=", f);
-                space = false;
-                ORDERED_SET_FOREACH(p, link->route_domains ?: link->network->route_domains)
-                        fputs_with_space(f, p, NULL, &space);
-
-                if (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_ROUTE) {
-                        if (dhcp_domainname)
-                                fputs_with_space(f, dhcp_domainname, NULL, &space);
-                        if (dhcp_domains)
-                                fputstrv(f, dhcp_domains, NULL, &space);
-                        if (dhcp6_domains)
-                                fputstrv(f, dhcp6_domains, NULL, &space);
-                }
-
-                if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_ROUTE) {
-                        NDiscDNSSL *dd;
-
-                        SET_FOREACH(dd, link->ndisc_dnssl)
-                                fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space);
-                }
-
+                if (link->route_domains)
+                        link_save_domains(link, f, link->route_domains, DHCP_USE_DOMAINS_NO);
+                else
+                        link_save_domains(link, f, link->network->route_domains, DHCP_USE_DOMAINS_ROUTE);
                 fputc('\n', f);
 
                 /************************************************************/
diff --git a/src/network/networkd-sysctl.c b/src/network/networkd-sysctl.c
index 6c7a606..51a697a 100644
--- a/src/network/networkd-sysctl.c
+++ b/src/network/networkd-sysctl.c
@@ -11,9 +11,6 @@
 #include "string-table.h"
 #include "sysctl-util.h"
 
-#define STABLE_SECRET_APP_ID_1 SD_ID128_MAKE(aa,05,1d,94,43,68,45,07,b9,73,f1,e8,e4,b7,34,52)
-#define STABLE_SECRET_APP_ID_2 SD_ID128_MAKE(52,c4,40,a0,9f,2f,48,58,a9,3a,f6,29,25,ba,7a,7d)
-
 static int link_update_ipv6_sysctl(Link *link) {
         assert(link);
 
@@ -214,48 +211,6 @@
         return sysctl_write_ip_property_uint32(AF_INET6, link->ifname, "mtu", mtu);
 }
 
-static int link_set_ipv6ll_stable_secret(Link *link) {
-        _cleanup_free_ char *str = NULL;
-        struct in6_addr a;
-        int r;
-
-        assert(link);
-        assert(link->network);
-
-        if (link->network->ipv6ll_address_gen_mode != IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY)
-                return 0;
-
-        if (in6_addr_is_set(&link->network->ipv6ll_stable_secret))
-                a = link->network->ipv6ll_stable_secret;
-        else {
-                sd_id128_t key;
-                le64_t v;
-
-                /* Generate a stable secret address from machine-ID and the interface name. */
-
-                r = sd_id128_get_machine_app_specific(STABLE_SECRET_APP_ID_1, &key);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Failed to generate key: %m");
-
-                v = htole64(siphash24_string(link->ifname, key.bytes));
-                memcpy(a.s6_addr, &v, sizeof(v));
-
-                r = sd_id128_get_machine_app_specific(STABLE_SECRET_APP_ID_2, &key);
-                if (r < 0)
-                        return log_link_debug_errno(link, r, "Failed to generate key: %m");
-
-                v = htole64(siphash24_string(link->ifname, key.bytes));
-                assert_cc(sizeof(v) * 2 == sizeof(a.s6_addr));
-                memcpy(a.s6_addr + sizeof(v), &v, sizeof(v));
-        }
-
-        r = in6_addr_to_string(&a, &str);
-        if (r < 0)
-                return r;
-
-        return sysctl_write_ip_property(AF_INET6, link->ifname, "stable_secret", str);
-}
-
 static int link_set_ipv4_accept_local(Link *link) {
         assert(link);
 
@@ -301,7 +256,7 @@
 
         r = link_set_ipv6_forward(link);
         if (r < 0)
-                log_link_warning_errno(link, r, "Cannot configure IPv6 packet forwarding, ignoring: %m");;
+                log_link_warning_errno(link, r, "Cannot configure IPv6 packet forwarding, ignoring: %m");
 
         r = link_set_ipv6_privacy_extensions(link);
         if (r < 0)
@@ -329,7 +284,7 @@
 
         r = link_set_ipv6ll_stable_secret(link);
         if (r < 0)
-                log_link_warning_errno(link, r, "Cannot set stable secret address for IPv6 link local address: %m");
+                log_link_warning_errno(link, r, "Cannot set stable secret address for IPv6 link-local address: %m");
 
         r = link_set_ipv4_accept_local(link);
         if (r < 0)
@@ -372,12 +327,11 @@
                 void *data,
                 void *userdata) {
 
-        IPv6PrivacyExtensions s, *ipv6_privacy_extensions = data;
+        IPv6PrivacyExtensions s, *ipv6_privacy_extensions = ASSERT_PTR(data);
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(ipv6_privacy_extensions);
 
         s = ipv6_privacy_extensions_from_string(rvalue);
         if (s < 0) {
diff --git a/src/network/networkd-util.c b/src/network/networkd-util.c
index 43ddf12..33352ba 100644
--- a/src/network/networkd-util.c
+++ b/src/network/networkd-util.c
@@ -2,53 +2,93 @@
 
 #include "condition.h"
 #include "conf-parser.h"
+#include "escape.h"
+#include "logarithm.h"
 #include "networkd-link.h"
 #include "networkd-util.h"
 #include "parse-util.h"
 #include "string-table.h"
 #include "string-util.h"
-#include "util.h"
+#include "web-util.h"
 
-static const char* const address_family_table[_ADDRESS_FAMILY_MAX] = {
+/* This is used in log messages, and never used in parsing settings. So, upper cases are OK. */
+static const char * const network_config_source_table[_NETWORK_CONFIG_SOURCE_MAX] = {
+        [NETWORK_CONFIG_SOURCE_FOREIGN] = "foreign",
+        [NETWORK_CONFIG_SOURCE_STATIC]  = "static",
+        [NETWORK_CONFIG_SOURCE_IPV4LL]  = "IPv4LL",
+        [NETWORK_CONFIG_SOURCE_DHCP4]   = "DHCPv4",
+        [NETWORK_CONFIG_SOURCE_DHCP6]   = "DHCPv6",
+        [NETWORK_CONFIG_SOURCE_DHCP_PD] = "DHCP-PD",
+        [NETWORK_CONFIG_SOURCE_NDISC]   = "NDisc",
+        [NETWORK_CONFIG_SOURCE_RUNTIME] = "runtime",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(network_config_source, NetworkConfigSource);
+
+int network_config_state_to_string_alloc(NetworkConfigState s, char **ret) {
+        static const char* states[] = {
+                [LOG2U(NETWORK_CONFIG_STATE_REQUESTING)]  = "requesting",
+                [LOG2U(NETWORK_CONFIG_STATE_CONFIGURING)] = "configuring",
+                [LOG2U(NETWORK_CONFIG_STATE_CONFIGURED)]  = "configured",
+                [LOG2U(NETWORK_CONFIG_STATE_MARKED)]      = "marked",
+                [LOG2U(NETWORK_CONFIG_STATE_REMOVING)]    = "removing",
+        };
+        _cleanup_free_ char *buf = NULL;
+
+        assert(ret);
+
+        for (size_t i = 0; i < ELEMENTSOF(states); i++)
+                if (FLAGS_SET(s, 1 << i)) {
+                        assert(states[i]);
+
+                        if (!strextend_with_separator(&buf, ",", states[i]))
+                                return -ENOMEM;
+                }
+
+        *ret = TAKE_PTR(buf);
+        return 0;
+}
+
+static const char * const address_family_table[_ADDRESS_FAMILY_MAX] = {
         [ADDRESS_FAMILY_NO]   = "no",
         [ADDRESS_FAMILY_YES]  = "yes",
         [ADDRESS_FAMILY_IPV4] = "ipv4",
         [ADDRESS_FAMILY_IPV6] = "ipv6",
 };
 
-static const char* const routing_policy_rule_address_family_table[_ADDRESS_FAMILY_MAX] = {
+static const char * const routing_policy_rule_address_family_table[_ADDRESS_FAMILY_MAX] = {
         [ADDRESS_FAMILY_YES]  = "both",
         [ADDRESS_FAMILY_IPV4] = "ipv4",
         [ADDRESS_FAMILY_IPV6] = "ipv6",
 };
 
-static const char* const nexthop_address_family_table[_ADDRESS_FAMILY_MAX] = {
+static const char * const nexthop_address_family_table[_ADDRESS_FAMILY_MAX] = {
         [ADDRESS_FAMILY_IPV4] = "ipv4",
         [ADDRESS_FAMILY_IPV6] = "ipv6",
 };
 
-static const char* const duplicate_address_detection_address_family_table[_ADDRESS_FAMILY_MAX] = {
+static const char * const duplicate_address_detection_address_family_table[_ADDRESS_FAMILY_MAX] = {
         [ADDRESS_FAMILY_NO]   = "none",
         [ADDRESS_FAMILY_YES]  = "both",
         [ADDRESS_FAMILY_IPV4] = "ipv4",
         [ADDRESS_FAMILY_IPV6] = "ipv6",
 };
 
-static const char* const dhcp_deprecated_address_family_table[_ADDRESS_FAMILY_MAX] = {
+static const char * const dhcp_deprecated_address_family_table[_ADDRESS_FAMILY_MAX] = {
         [ADDRESS_FAMILY_NO]   = "none",
         [ADDRESS_FAMILY_YES]  = "both",
         [ADDRESS_FAMILY_IPV4] = "v4",
         [ADDRESS_FAMILY_IPV6] = "v6",
 };
 
-static const char* const ip_masquerade_address_family_table[_ADDRESS_FAMILY_MAX] = {
+static const char * const ip_masquerade_address_family_table[_ADDRESS_FAMILY_MAX] = {
         [ADDRESS_FAMILY_NO]   = "no",
         [ADDRESS_FAMILY_YES]  = "both",
         [ADDRESS_FAMILY_IPV4] = "ipv4",
         [ADDRESS_FAMILY_IPV6] = "ipv6",
 };
 
-static const char* const dhcp_lease_server_type_table[_SD_DHCP_LEASE_SERVER_TYPE_MAX] = {
+static const char * const dhcp_lease_server_type_table[_SD_DHCP_LEASE_SERVER_TYPE_MAX] = {
         [SD_DHCP_LEASE_DNS]  = "DNS servers",
         [SD_DHCP_LEASE_NTP]  = "NTP servers",
         [SD_DHCP_LEASE_SIP]  = "SIP servers",
@@ -161,68 +201,45 @@
         return 0;
 }
 
-/* Router lifetime can be set with netlink interface since kernel >= 4.5
- * so for the supported kernel we don't need to expire routes in userspace */
-int kernel_route_expiration_supported(void) {
-        static int cached = -1;
-        int r;
+int config_parse_mud_url(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
 
-        if (cached < 0) {
-                Condition c = {
-                        .type = CONDITION_KERNEL_VERSION,
-                        .parameter = (char *) ">= 4.5"
-                };
-                r = condition_test(&c, NULL);
-                if (r < 0)
-                        return r;
+        _cleanup_free_ char *unescaped = NULL;
+        char **url = ASSERT_PTR(data);
+        ssize_t l;
 
-                cached = r;
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *url = mfree(*url);
+                return 0;
         }
-        return cached;
-}
 
-static void network_config_hash_func(const NetworkConfigSection *c, struct siphash *state) {
-        siphash24_compress_string(c->filename, state);
-        siphash24_compress(&c->line, sizeof(c->line), state);
-}
+        l = cunescape(rvalue, 0, &unescaped);
+        if (l < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, l,
+                           "Failed to unescape MUD URL, ignoring: %s", rvalue);
+                return 0;
+        }
 
-static int network_config_compare_func(const NetworkConfigSection *x, const NetworkConfigSection *y) {
-        int r;
+        if (l > UINT8_MAX || !http_url_is_valid(unescaped)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid MUD URL, ignoring: %s", rvalue);
+                return 0;
+        }
 
-        r = strcmp(x->filename, y->filename);
-        if (r != 0)
-                return r;
-
-        return CMP(x->line, y->line);
-}
-
-DEFINE_HASH_OPS(network_config_hash_ops, NetworkConfigSection, network_config_hash_func, network_config_compare_func);
-
-int network_config_section_new(const char *filename, unsigned line, NetworkConfigSection **s) {
-        NetworkConfigSection *cs;
-
-        cs = malloc0(offsetof(NetworkConfigSection, filename) + strlen(filename) + 1);
-        if (!cs)
-                return -ENOMEM;
-
-        strcpy(cs->filename, filename);
-        cs->line = line;
-
-        *s = TAKE_PTR(cs);
-
-        return 0;
-}
-
-unsigned hashmap_find_free_section_line(Hashmap *hashmap) {
-        NetworkConfigSection *cs;
-        unsigned n = 0;
-        void *entry;
-
-        HASHMAP_FOREACH_KEY(entry, cs, hashmap)
-                if (n < cs->line)
-                        n = cs->line;
-
-        return n + 1;
+        return free_and_replace(*url, unescaped);
 }
 
 int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg) {
diff --git a/src/network/networkd-util.h b/src/network/networkd-util.h
index 62f38bc..f75fb1f 100644
--- a/src/network/networkd-util.h
+++ b/src/network/networkd-util.h
@@ -13,15 +13,124 @@
 
 typedef struct Link Link;
 
-typedef struct NetworkConfigSection {
-        unsigned line;
-        bool invalid;
-        char filename[];
-} NetworkConfigSection;
+typedef enum NetworkConfigSource {
+        NETWORK_CONFIG_SOURCE_FOREIGN, /* configured by kernel */
+        NETWORK_CONFIG_SOURCE_STATIC,
+        NETWORK_CONFIG_SOURCE_IPV4LL,
+        NETWORK_CONFIG_SOURCE_DHCP4,
+        NETWORK_CONFIG_SOURCE_DHCP6,
+        NETWORK_CONFIG_SOURCE_DHCP_PD,
+        NETWORK_CONFIG_SOURCE_NDISC,
+        NETWORK_CONFIG_SOURCE_RUNTIME, /* through D-Bus method */
+        _NETWORK_CONFIG_SOURCE_MAX,
+        _NETWORK_CONFIG_SOURCE_INVALID = -EINVAL,
+} NetworkConfigSource;
+
+typedef enum NetworkConfigState {
+        NETWORK_CONFIG_STATE_REQUESTING  = 1 << 0, /* request is queued */
+        NETWORK_CONFIG_STATE_CONFIGURING = 1 << 1, /* e.g. address_configure() is called, but no response is received yet */
+        NETWORK_CONFIG_STATE_CONFIGURED  = 1 << 2, /* e.g. address_configure() is called and received a response from kernel.
+                                                    * Note that address may not be ready yet, so please use address_is_ready()
+                                                    * to check whether the address can be usable or not. */
+        NETWORK_CONFIG_STATE_MARKED      = 1 << 3, /* used GC'ing the old config */
+        NETWORK_CONFIG_STATE_REMOVING    = 1 << 4, /* e.g. address_remove() is called, but no response is received yet */
+} NetworkConfigState;
+
+static inline usec_t sec_to_usec(uint32_t sec, usec_t timestamp_usec) {
+        return
+                sec == 0 ? 0 :
+                sec == UINT32_MAX ? USEC_INFINITY :
+                usec_add(timestamp_usec, sec * USEC_PER_SEC);
+}
+
+static inline usec_t sec16_to_usec(uint16_t sec, usec_t timestamp_usec) {
+        return sec_to_usec(sec == UINT16_MAX ? UINT32_MAX : (uint32_t) sec, timestamp_usec);
+}
+
+static inline uint32_t usec_to_sec(usec_t usec, usec_t now_usec) {
+        return MIN(DIV_ROUND_UP(usec_sub_unsigned(usec, now_usec), USEC_PER_SEC), UINT32_MAX);
+}
 
 CONFIG_PARSER_PROTOTYPE(config_parse_link_local_address_family);
 CONFIG_PARSER_PROTOTYPE(config_parse_address_family_with_kernel);
 CONFIG_PARSER_PROTOTYPE(config_parse_ip_masquerade);
+CONFIG_PARSER_PROTOTYPE(config_parse_mud_url);
+
+const char *network_config_source_to_string(NetworkConfigSource s) _const_;
+
+int network_config_state_to_string_alloc(NetworkConfigState s, char **ret);
+
+#define DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(type, name)               \
+        static inline void name##_update_state(                         \
+                        type *t,                                        \
+                        NetworkConfigState mask,                        \
+                        NetworkConfigState value) {                     \
+                                                                        \
+                assert(t);                                              \
+                                                                        \
+                t->state = (t->state & ~mask) | (value & mask);         \
+        }                                                               \
+        static inline bool name##_exists(type *t) {                     \
+                assert(t);                                              \
+                                                                        \
+                if ((t->state & (NETWORK_CONFIG_STATE_CONFIGURING |     \
+                                 NETWORK_CONFIG_STATE_CONFIGURED)) == 0) \
+                        return false; /* Not assigned yet. */           \
+                if (FLAGS_SET(t->state, NETWORK_CONFIG_STATE_REMOVING)) \
+                        return false; /* Already removing. */           \
+                return true;                                            \
+        }                                                               \
+        static inline void name##_enter_requesting(type *t) {           \
+                name##_update_state(t,                                  \
+                                    NETWORK_CONFIG_STATE_REQUESTING,    \
+                                    NETWORK_CONFIG_STATE_REQUESTING);   \
+        }                                                               \
+        static inline void name##_cancel_requesting(type *t) {          \
+                name##_update_state(t,                                  \
+                                    NETWORK_CONFIG_STATE_REQUESTING,    \
+                                    0);                                 \
+        }                                                               \
+        static inline bool name##_is_requesting(type *t) {              \
+                assert(t);                                              \
+                return FLAGS_SET(t->state, NETWORK_CONFIG_STATE_REQUESTING); \
+        }                                                               \
+        static inline void name##_enter_configuring(type *t) {          \
+                name##_update_state(t,                                  \
+                                    NETWORK_CONFIG_STATE_REQUESTING |   \
+                                    NETWORK_CONFIG_STATE_CONFIGURING |  \
+                                    NETWORK_CONFIG_STATE_REMOVING,      \
+                                    NETWORK_CONFIG_STATE_CONFIGURING);  \
+        }                                                               \
+        static inline void name##_enter_configured(type *t) {           \
+                name##_update_state(t,                                  \
+                                    NETWORK_CONFIG_STATE_CONFIGURING |  \
+                                    NETWORK_CONFIG_STATE_CONFIGURED,    \
+                                    NETWORK_CONFIG_STATE_CONFIGURED);   \
+        }                                                               \
+        static inline void name##_mark(type *t) {                       \
+                name##_update_state(t,                                  \
+                                    NETWORK_CONFIG_STATE_MARKED,        \
+                                    NETWORK_CONFIG_STATE_MARKED);       \
+        }                                                               \
+        static inline void name##_unmark(type *t) {                     \
+                name##_update_state(t, NETWORK_CONFIG_STATE_MARKED, 0); \
+        }                                                               \
+        static inline bool name##_is_marked(type *t) {                  \
+                assert(t);                                              \
+                return FLAGS_SET(t->state, NETWORK_CONFIG_STATE_MARKED); \
+        }                                                               \
+        static inline void name##_enter_removing(type *t) {             \
+                name##_update_state(t,                                  \
+                                    NETWORK_CONFIG_STATE_MARKED |       \
+                                    NETWORK_CONFIG_STATE_REMOVING,      \
+                                    NETWORK_CONFIG_STATE_REMOVING);     \
+        }                                                               \
+        static inline void name##_enter_removed(type *t) {              \
+                name##_update_state(t,                                  \
+                                    NETWORK_CONFIG_STATE_CONFIGURED |   \
+                                    NETWORK_CONFIG_STATE_REMOVING,      \
+                                    0);                                 \
+        }
 
 const char *address_family_to_string(AddressFamily b) _const_;
 AddressFamily address_family_from_string(const char *s) _pure_;
@@ -42,39 +151,6 @@
 const char *dhcp_lease_server_type_to_string(sd_dhcp_lease_server_type_t t) _const_;
 sd_dhcp_lease_server_type_t dhcp_lease_server_type_from_string(const char *s) _pure_;
 
-int kernel_route_expiration_supported(void);
-
-static inline NetworkConfigSection* network_config_section_free(NetworkConfigSection *cs) {
-        return mfree(cs);
-}
-DEFINE_TRIVIAL_CLEANUP_FUNC(NetworkConfigSection*, network_config_section_free);
-
-int network_config_section_new(const char *filename, unsigned line, NetworkConfigSection **s);
-extern const struct hash_ops network_config_hash_ops;
-unsigned hashmap_find_free_section_line(Hashmap *hashmap);
-
-static inline bool section_is_invalid(NetworkConfigSection *section) {
-        /* If this returns false, then it does _not_ mean the section is valid. */
-
-        if (!section)
-                return false;
-
-        return section->invalid;
-}
-
-#define DEFINE_NETWORK_SECTION_FUNCTIONS(type, free_func)               \
-        static inline type* free_func##_or_set_invalid(type *p) {       \
-                assert(p);                                              \
-                                                                        \
-                if (p->section)                                         \
-                        p->section->invalid = true;                     \
-                else                                                    \
-                        free_func(p);                                   \
-                return NULL;                                            \
-        }                                                               \
-        DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func);                  \
-        DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func##_or_set_invalid);
-
 int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg);
 #define log_link_message_error_errno(link, m, err, msg)   log_link_message_full_errno(link, m, LOG_ERR, err, msg)
 #define log_link_message_warning_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_WARNING, err, msg)
diff --git a/src/network/networkd-wifi.c b/src/network/networkd-wifi.c
index 37700af..1a3754b 100644
--- a/src/network/networkd-wifi.c
+++ b/src/network/networkd-wifi.c
@@ -3,68 +3,343 @@
 #include <net/ethernet.h>
 #include <linux/nl80211.h>
 
-#include "sd-bus.h"
-
-#include "bus-util.h"
 #include "ether-addr-util.h"
-#include "netlink-internal.h"
 #include "netlink-util.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
 #include "networkd-wifi.h"
+#include "networkd-wiphy.h"
 #include "string-util.h"
 #include "wifi-util.h"
 
-int wifi_get_info(Link *link) {
-        _cleanup_free_ char *ssid = NULL;
-        enum nl80211_iftype iftype;
-        bool updated = false;
-        const char *type;
+int link_get_wlan_interface(Link *link) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
         int r;
 
         assert(link);
 
-        if (!link->sd_device)
-                return 0;
-
-        r = sd_device_get_devtype(link->sd_device, &type);
-        if (r == -ENOENT)
-                return 0;
-        else if (r < 0)
-                return r;
-
-        if (!streq(type, "wlan"))
-                return 0;
-
-        r = wifi_get_interface(link->manager->genl, link->ifindex, &iftype, &ssid);
+        r = sd_genl_message_new(link->manager->genl, NL80211_GENL_NAME, NL80211_CMD_GET_INTERFACE, &req);
         if (r < 0)
-                return r;
-        if (r == 0)
-                iftype = link->wlan_iftype; /* Assume iftype is not changed. */
+                return log_link_debug_errno(link, r, "Failed to create generic netlink message: %m");
 
-        if (iftype == NL80211_IFTYPE_STATION) {
-                struct ether_addr bssid;
+        r = sd_netlink_message_append_u32(req, NL80211_ATTR_IFINDEX, link->ifindex);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Could not append NL80211_ATTR_IFINDEX attribute: %m");
 
-                r = wifi_get_station(link->manager->genl, link->ifindex, &bssid);
-                if (r < 0)
-                        return r;
-
-                updated = !ether_addr_equal(&link->bssid, &bssid);
-                link->bssid = bssid;
+        r = sd_netlink_call(link->manager->genl, req, 0, &reply);
+        if (r < 0)
+                return log_link_debug_errno(link, r, "Failed to request information about wlan interface: %m");
+        if (!reply) {
+                log_link_debug(link, "No reply received to request for information about wifi interface, ignoring.");
+                return 0;
         }
 
-        updated = updated || link->wlan_iftype != iftype;
-        link->wlan_iftype = iftype;
-        updated = updated || !streq_ptr(link->ssid, ssid);
-        free_and_replace(link->ssid, ssid);
+        return manager_genl_process_nl80211_config(link->manager->genl, reply, link->manager);
+}
 
-        if (updated) {
+int manager_genl_process_nl80211_config(sd_netlink *genl, sd_netlink_message *message, Manager *manager) {
+        _cleanup_free_ char *ssid = NULL;
+        uint32_t ifindex, wlan_iftype;
+        const char *family, *ifname;
+        uint8_t cmd;
+        size_t len;
+        Link *link;
+        int r;
+
+        assert(genl);
+        assert(message);
+        assert(manager);
+
+        if (sd_netlink_message_is_error(message)) {
+                r = sd_netlink_message_get_errno(message);
+                if (r < 0)
+                        log_message_warning_errno(message, r, "nl80211: received error message, ignoring");
+
+                return 0;
+        }
+
+        r = sd_genl_message_get_family_name(genl, message, &family);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: failed to determine genl family, ignoring: %m");
+                return 0;
+        }
+        if (!streq(family, NL80211_GENL_NAME)) {
+                log_debug("nl80211: received message of unexpected genl family '%s', ignoring.", family);
+                return 0;
+        }
+
+        r = sd_genl_message_get_command(genl, message, &cmd);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: failed to determine genl message command, ignoring: %m");
+                return 0;
+        }
+        if (IN_SET(cmd, NL80211_CMD_NEW_WIPHY, NL80211_CMD_DEL_WIPHY))
+                return manager_genl_process_nl80211_wiphy(genl, message, manager);
+        if (!IN_SET(cmd, NL80211_CMD_SET_INTERFACE, NL80211_CMD_NEW_INTERFACE, NL80211_CMD_DEL_INTERFACE)) {
+                log_debug("nl80211: ignoring nl80211 %s(%u) message.",
+                          strna(nl80211_cmd_to_string(cmd)), cmd);
+                return 0;
+        }
+
+        r = sd_netlink_message_read_u32(message, NL80211_ATTR_IFINDEX, &ifindex);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: received %s(%u) message without valid ifindex, ignoring: %m",
+                                strna(nl80211_cmd_to_string(cmd)), cmd);
+                return 0;
+        }
+
+        r = link_get_by_index(manager, ifindex, &link);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: received %s(%u) message for link '%"PRIu32"' we don't know about, ignoring.",
+                                strna(nl80211_cmd_to_string(cmd)), cmd, ifindex);
+
+                /* The NL80211_CMD_NEW_INTERFACE message might arrive before RTM_NEWLINK, in which case a
+                 * link will not have been created yet. Store the interface index such that the wireless
+                 * properties of the link (such as wireless interface type) are queried again after the link
+                 * is created.
+                 */
+                if (cmd == NL80211_CMD_NEW_INTERFACE) {
+                        r = set_ensure_put(&manager->new_wlan_ifindices, NULL, INT_TO_PTR(ifindex));
+                        if (r < 0)
+                                log_warning_errno(r, "Failed to add new wireless interface index to set, ignoring: %m");
+                } else if (cmd == NL80211_CMD_DEL_INTERFACE)
+                        set_remove(manager->new_wlan_ifindices, INT_TO_PTR(ifindex));
+
+                return 0;
+        }
+
+        r = sd_netlink_message_read_string(message, NL80211_ATTR_IFNAME, &ifname);
+        if (r < 0) {
+                log_link_debug_errno(link, r, "nl80211: received %s(%u) message without valid interface name, ignoring: %m",
+                                     strna(nl80211_cmd_to_string(cmd)), cmd);
+                return 0;
+        }
+
+        if (!streq(ifname, link->ifname)) {
+                log_link_debug_errno(link, r, "nl80211: received %s(%u) message with invalid interface name '%s', ignoring: %m",
+                                     strna(nl80211_cmd_to_string(cmd)), cmd, ifname);
+                return 0;
+        }
+
+        r = sd_netlink_message_read_u32(message, NL80211_ATTR_IFTYPE, &wlan_iftype);
+        if (r < 0) {
+                log_link_debug_errno(link, r, "nl80211: received %s(%u) message without valid wlan interface type, ignoring: %m",
+                                     strna(nl80211_cmd_to_string(cmd)), cmd);
+                return 0;
+        }
+
+        r = sd_netlink_message_read_data_suffix0(message, NL80211_ATTR_SSID, &len, (void**) &ssid);
+        if (r < 0 && r != -ENODATA) {
+                log_link_debug_errno(link, r, "nl80211: received %s(%u) message without valid SSID, ignoring: %m",
+                                     strna(nl80211_cmd_to_string(cmd)), cmd);
+                return 0;
+        }
+        if (r >= 0) {
+                if (len == 0) {
+                        log_link_debug(link, "nl80211: received SSID has zero length, ignoring it: %m");
+                        ssid = mfree(ssid);
+                } else if (strlen_ptr(ssid) != len) {
+                        log_link_debug(link, "nl80211: received SSID contains NUL characters, ignoring it.");
+                        ssid = mfree(ssid);
+                }
+        }
+
+        log_link_debug(link, "nl80211: received %s(%u) message: iftype=%s, ssid=%s",
+                       strna(nl80211_cmd_to_string(cmd)), cmd,
+                       strna(nl80211_iftype_to_string(wlan_iftype)), strna(ssid));
+
+        switch (cmd) {
+        case NL80211_CMD_SET_INTERFACE:
+        case NL80211_CMD_NEW_INTERFACE:
+                link->wlan_iftype = wlan_iftype;
+                free_and_replace(link->ssid, ssid);
+                break;
+
+        case NL80211_CMD_DEL_INTERFACE:
+                link->wlan_iftype = NL80211_IFTYPE_UNSPECIFIED;
+                link->ssid = mfree(link->ssid);
+                break;
+
+        default:
+                assert_not_reached();
+        }
+
+        return 0;
+}
+
+int manager_genl_process_nl80211_mlme(sd_netlink *genl, sd_netlink_message *message, Manager *manager) {
+        const char *family;
+        uint32_t ifindex;
+        uint8_t cmd;
+        Link *link;
+        int r;
+
+        assert(genl);
+        assert(message);
+        assert(manager);
+
+        if (sd_netlink_message_is_error(message)) {
+                r = sd_netlink_message_get_errno(message);
+                if (r < 0)
+                        log_message_warning_errno(message, r, "nl80211: received error message, ignoring");
+
+                return 0;
+        }
+
+        r = sd_genl_message_get_family_name(genl, message, &family);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: failed to determine genl family, ignoring: %m");
+                return 0;
+        }
+        if (!streq(family, NL80211_GENL_NAME)) {
+                log_debug("nl80211: Received message of unexpected genl family '%s', ignoring.", family);
+                return 0;
+        }
+
+        r = sd_genl_message_get_command(genl, message, &cmd);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: failed to determine genl message command, ignoring: %m");
+                return 0;
+        }
+
+        r = sd_netlink_message_read_u32(message, NL80211_ATTR_IFINDEX, &ifindex);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: received %s(%u) message without valid ifindex, ignoring: %m",
+                                strna(nl80211_cmd_to_string(cmd)), cmd);
+                return 0;
+        }
+
+        r = link_get_by_index(manager, ifindex, &link);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: received %s(%u) message for link '%"PRIu32"' we don't know about, ignoring.",
+                                strna(nl80211_cmd_to_string(cmd)), cmd, ifindex);
+                return 0;
+        }
+
+        switch (cmd) {
+        case NL80211_CMD_NEW_STATION:
+        case NL80211_CMD_DEL_STATION: {
+                struct ether_addr bssid;
+
+                r = sd_netlink_message_read_ether_addr(message, NL80211_ATTR_MAC, &bssid);
+                if (r < 0) {
+                        log_link_debug_errno(link, r, "nl80211: received %s(%u) message without valid BSSID, ignoring: %m",
+                                             strna(nl80211_cmd_to_string(cmd)), cmd);
+                        return 0;
+                }
+
+                log_link_debug(link, "nl80211: received %s(%u) message: bssid=%s",
+                               strna(nl80211_cmd_to_string(cmd)), cmd, ETHER_ADDR_TO_STR(&bssid));
+
+                if (cmd == NL80211_CMD_DEL_STATION) {
+                        link->bssid = ETHER_ADDR_NULL;
+                        return 0;
+                }
+
+                link->bssid = bssid;
+
+                if (manager->enumerating &&
+                    link->wlan_iftype == NL80211_IFTYPE_STATION && link->ssid)
+                        log_link_info(link, "Connected WiFi access point: %s (%s)",
+                                      link->ssid, ETHER_ADDR_TO_STR(&link->bssid));
+                break;
+        }
+        case NL80211_CMD_CONNECT: {
+                struct ether_addr bssid;
+                uint16_t status_code;
+
+                r = sd_netlink_message_read_ether_addr(message, NL80211_ATTR_MAC, &bssid);
+                if (r < 0 && r != -ENODATA) {
+                        log_link_debug_errno(link, r, "nl80211: received %s(%u) message without valid BSSID, ignoring: %m",
+                                             strna(nl80211_cmd_to_string(cmd)), cmd);
+                        return 0;
+                }
+
+                r = sd_netlink_message_read_u16(message, NL80211_ATTR_STATUS_CODE, &status_code);
+                if (r < 0) {
+                        log_link_debug_errno(link, r, "nl80211: received %s(%u) message without valid status code, ignoring: %m",
+                                             strna(nl80211_cmd_to_string(cmd)), cmd);
+                        return 0;
+                }
+
+                log_link_debug(link, "nl80211: received %s(%u) message: status=%u, bssid=%s",
+                               strna(nl80211_cmd_to_string(cmd)), cmd, status_code, ETHER_ADDR_TO_STR(&bssid));
+
+                if (status_code != 0)
+                        return 0;
+
+                link->bssid = bssid;
+
+                if (!manager->enumerating) {
+                        r = link_get_wlan_interface(link);
+                        if (r < 0) {
+                                log_link_warning_errno(link, r, "Failed to update wireless LAN interface: %m");
+                                link_enter_failed(link);
+                                return 0;
+                        }
+                }
+
                 if (link->wlan_iftype == NL80211_IFTYPE_STATION && link->ssid)
                         log_link_info(link, "Connected WiFi access point: %s (%s)",
                                       link->ssid, ETHER_ADDR_TO_STR(&link->bssid));
 
-                return 1; /* Some information is updated. */
+                /* Sometimes, RTM_NEWLINK message with carrier is received earlier than NL80211_CMD_CONNECT.
+                 * To make SSID= or other WiFi related settings in [Match] section work, let's try to
+                 * reconfigure the interface. */
+                if (link->ssid && link_has_carrier(link)) {
+                        r = link_reconfigure_impl(link, /* force = */ false);
+                        if (r < 0) {
+                                log_link_warning_errno(link, r, "Failed to reconfigure interface: %m");
+                                link_enter_failed(link);
+                                return 0;
+                        }
+                }
+                break;
+        }
+        case NL80211_CMD_DISCONNECT:
+                log_link_debug(link, "nl80211: received %s(%u) message.",
+                               strna(nl80211_cmd_to_string(cmd)), cmd);
+
+                link->bssid = ETHER_ADDR_NULL;
+                free_and_replace(link->previous_ssid, link->ssid);
+                break;
+
+        case NL80211_CMD_START_AP: {
+                log_link_debug(link, "nl80211: received %s(%u) message.",
+                               strna(nl80211_cmd_to_string(cmd)), cmd);
+
+                /* No need to reconfigure during enumeration */
+                if (manager->enumerating)
+                        break;
+
+                /* If there is no carrier, let the link get configured on
+                 * carrier gain instead */
+                if (!link_has_carrier(link))
+                        break;
+
+                /* AP start event may indicate different properties (e.g. SSID)  */
+                r = link_get_wlan_interface(link);
+                if (r < 0) {
+                        log_link_warning_errno(link, r, "Failed to update wireless LAN interface: %m");
+                        link_enter_failed(link);
+                        return 0;
+                }
+
+                /* If necessary, reconfigure based on those new properties */
+                r = link_reconfigure_impl(link, /* force = */ false);
+                if (r < 0) {
+                        log_link_warning_errno(link, r, "Failed to reconfigure interface: %m");
+                        link_enter_failed(link);
+                        return 0;
+                }
+
+                break;
         }
 
-        return 0; /* No new information. */
+        default:
+                log_link_debug(link, "nl80211: received %s(%u) message.",
+                               strna(nl80211_cmd_to_string(cmd)), cmd);
+        }
+
+        return 0;
 }
diff --git a/src/network/networkd-wifi.h b/src/network/networkd-wifi.h
index ab868eb..2ef0d30 100644
--- a/src/network/networkd-wifi.h
+++ b/src/network/networkd-wifi.h
@@ -1,8 +1,11 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "sd-bus.h"
+#include "sd-netlink.h"
 
 typedef struct Link Link;
+typedef struct Manager Manager;
 
-int wifi_get_info(Link *link);
+int manager_genl_process_nl80211_config(sd_netlink *genl, sd_netlink_message *message, Manager *manager);
+int manager_genl_process_nl80211_mlme(sd_netlink *genl, sd_netlink_message *message, Manager *manager);
+int link_get_wlan_interface(Link *link);
diff --git a/src/network/networkd-wiphy.c b/src/network/networkd-wiphy.c
new file mode 100644
index 0000000..63874cd
--- /dev/null
+++ b/src/network/networkd-wiphy.c
@@ -0,0 +1,500 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <net/if_arp.h>
+#include <linux/nl80211.h>
+
+#include "device-private.h"
+#include "device-util.h"
+#include "networkd-manager.h"
+#include "networkd-wiphy.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "udev-util.h"
+#include "wifi-util.h"
+
+Wiphy *wiphy_free(Wiphy *w) {
+        if (!w)
+                return NULL;
+
+        if (w->manager) {
+                hashmap_remove_value(w->manager->wiphy_by_index, UINT32_TO_PTR(w->index), w);
+                if (w->name)
+                        hashmap_remove_value(w->manager->wiphy_by_name, w->name, w);
+        }
+
+        sd_device_unref(w->dev);
+        sd_device_unref(w->rfkill);
+
+        free(w->name);
+        return mfree(w);
+}
+
+static int wiphy_new(Manager *manager, sd_netlink_message *message, Wiphy **ret) {
+        _cleanup_(wiphy_freep) Wiphy *w = NULL;
+        _cleanup_free_ char *name = NULL;
+        uint32_t index;
+        int r;
+
+        assert(manager);
+        assert(message);
+
+        r = sd_netlink_message_read_u32(message, NL80211_ATTR_WIPHY, &index);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_read_string_strdup(message, NL80211_ATTR_WIPHY_NAME, &name);
+        if (r < 0)
+                return r;
+
+        w = new(Wiphy, 1);
+        if (!w)
+                return -ENOMEM;
+
+        *w = (Wiphy) {
+                .manager = manager,
+                .index = index,
+                .name = TAKE_PTR(name),
+        };
+
+        r = hashmap_ensure_put(&manager->wiphy_by_index, NULL, UINT32_TO_PTR(w->index), w);
+        if (r < 0)
+                return r;
+
+        r = hashmap_ensure_put(&w->manager->wiphy_by_name, &string_hash_ops, w->name, w);
+        if (r < 0)
+                return r;
+
+        log_wiphy_debug(w, "Saved new wiphy: index=%"PRIu32, w->index);
+
+        if (ret)
+                *ret = w;
+
+        TAKE_PTR(w);
+        return 0;
+}
+
+int wiphy_get_by_index(Manager *manager, uint32_t index, Wiphy **ret) {
+        Wiphy *w;
+
+        assert(manager);
+
+        w = hashmap_get(manager->wiphy_by_index, UINT32_TO_PTR(index));
+        if (!w)
+                return -ENODEV;
+
+        if (ret)
+                *ret = w;
+
+        return 0;
+}
+
+int wiphy_get_by_name(Manager *manager, const char *name, Wiphy **ret) {
+        Wiphy *w;
+
+        assert(manager);
+        assert(name);
+
+        w = hashmap_get(manager->wiphy_by_name, name);
+        if (!w)
+                return -ENODEV;
+
+        if (ret)
+                *ret = w;
+
+        return 0;
+}
+
+static int link_get_wiphy(Link *link, Wiphy **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *phy = NULL;
+        const char *s;
+        int r;
+
+        assert(link);
+        assert(link->manager);
+
+        if (link->iftype != ARPHRD_ETHER)
+                return -EOPNOTSUPP;
+
+        if (!link->dev)
+                return -ENODEV;
+
+        r = sd_device_get_devtype(link->dev, &s);
+        if (r < 0)
+                return r;
+
+        if (!streq_ptr(s, "wlan"))
+                return -EOPNOTSUPP;
+
+        r = sd_device_new_child(&phy, link->dev, "phy80211");
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_sysname(phy, &s);
+        if (r < 0)
+                return r;
+
+        /* TODO:
+         * Maybe, it is better to cache the found Wiphy object in the Link object.
+         * To support that, we need to investigate what happens when the _phy_ is renamed. */
+
+        return wiphy_get_by_name(link->manager, s, ret);
+}
+
+static int rfkill_get_state(sd_device *dev) {
+        int r;
+
+        assert(dev);
+
+        /* The previous values may be outdated. Let's clear cache and re-read the values. */
+        device_clear_sysattr_cache(dev);
+
+        r = device_get_sysattr_bool(dev, "soft");
+        if (r < 0 && r != -ENOENT)
+                return r;
+        if (r > 0)
+                return RFKILL_SOFT;
+
+        r = device_get_sysattr_bool(dev, "hard");
+        if (r < 0 && r != -ENOENT)
+                return r;
+        if (r > 0)
+                return RFKILL_HARD;
+
+        return RFKILL_UNBLOCKED;
+}
+
+static int wiphy_rfkilled(Wiphy *w) {
+        int r;
+
+        assert(w);
+
+        if (!udev_available()) {
+                if (w->rfkill_state != RFKILL_UNBLOCKED) {
+                        log_wiphy_debug(w, "Running in container, assuming the radio transmitter is unblocked.");
+                        w->rfkill_state = RFKILL_UNBLOCKED; /* To suppress the above log message, cache the state. */
+                }
+                return false;
+        }
+
+        if (!w->rfkill) {
+                if (w->rfkill_state != RFKILL_UNBLOCKED) {
+                        log_wiphy_debug(w, "No rfkill device found, assuming the radio transmitter is unblocked.");
+                        w->rfkill_state = RFKILL_UNBLOCKED; /* To suppress the above log message, cache the state. */
+                }
+                return false;
+        }
+
+        r = rfkill_get_state(w->rfkill);
+        if (r < 0)
+                return log_wiphy_debug_errno(w, r, "Could not get rfkill state: %m");
+
+        if (w->rfkill_state != r)
+                switch (r) {
+                case RFKILL_UNBLOCKED:
+                        log_wiphy_debug(w, "The radio transmitter is unblocked.");
+                        break;
+                case RFKILL_SOFT:
+                        log_wiphy_debug(w, "The radio transmitter is turned off by software.");
+                        break;
+                case RFKILL_HARD:
+                        log_wiphy_debug(w, "The radio transmitter is forced off by something outside of the driver's control.");
+                        break;
+                default:
+                        assert_not_reached();
+                }
+
+        w->rfkill_state = r; /* Cache the state to suppress the above log messages. */
+        return r != RFKILL_UNBLOCKED;
+}
+
+int link_rfkilled(Link *link) {
+        Wiphy *w;
+        int r;
+
+        assert(link);
+
+        r = link_get_wiphy(link, &w);
+        if (r < 0) {
+                if (ERRNO_IS_NOT_SUPPORTED(r) || ERRNO_IS_DEVICE_ABSENT(r))
+                        return false; /* Typically, non-wifi interface or running in container */
+                return log_link_debug_errno(link, r, "Could not get phy: %m");
+        }
+
+        return wiphy_rfkilled(w);
+}
+
+static int wiphy_update_name(Wiphy *w, sd_netlink_message *message) {
+        const char *name;
+        int r;
+
+        assert(w);
+        assert(w->manager);
+        assert(message);
+
+        r = sd_netlink_message_read_string(message, NL80211_ATTR_WIPHY_NAME, &name);
+        if (r == -ENODATA)
+                return 0;
+        if (r < 0)
+                return r;
+
+        if (streq(w->name, name))
+                return 0;
+
+        log_wiphy_debug(w, "Wiphy name change detected, renamed to %s.", name);
+
+        hashmap_remove_value(w->manager->wiphy_by_name, w->name, w);
+
+        r = free_and_strdup(&w->name, name);
+        if (r < 0)
+                return r;
+
+        r = hashmap_ensure_put(&w->manager->wiphy_by_name, &string_hash_ops, w->name, w);
+        if (r < 0)
+                return r;
+
+        return 1; /* updated */
+}
+
+static int wiphy_update_device(Wiphy *w) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        int r;
+
+        assert(w);
+        assert(w->name);
+
+        if (!udev_available())
+                return 0;
+
+        w->dev = sd_device_unref(w->dev);
+
+        r = sd_device_new_from_subsystem_sysname(&dev, "ieee80211", w->name);
+        if (r < 0)
+                return r;
+
+        if (DEBUG_LOGGING) {
+                const char *s = NULL;
+
+                (void) sd_device_get_syspath(dev, &s);
+                log_wiphy_debug(w, "Found device: %s", strna(s));
+        }
+
+        w->dev = TAKE_PTR(dev);
+        return 0;
+}
+
+static int wiphy_update_rfkill(Wiphy *w) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *rfkill;
+        int r;
+
+        assert(w);
+
+        if (!udev_available())
+                return 0;
+
+        w->rfkill = sd_device_unref(w->rfkill);
+
+        if (!w->dev)
+                return 0;
+
+        r = sd_device_enumerator_new(&e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_allow_uninitialized(e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_subsystem(e, "rfkill", true);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_parent(e, w->dev);
+        if (r < 0)
+                return r;
+
+        rfkill = sd_device_enumerator_get_device_first(e);
+        if (!rfkill)
+                /* rfkill device may not detected by the kernel yet, and may appear later. */
+                return -ENODEV;
+
+        if (sd_device_enumerator_get_device_next(e))
+                return -ENXIO; /* multiple devices found */
+
+        w->rfkill = sd_device_ref(rfkill);
+
+        if (DEBUG_LOGGING) {
+                const char *s = NULL;
+
+                (void) sd_device_get_syspath(rfkill, &s);
+                log_wiphy_debug(w, "Found rfkill device: %s", strna(s));
+        }
+
+        return 0;
+}
+
+static int wiphy_update(Wiphy *w) {
+        int r;
+
+        assert(w);
+
+        r = wiphy_update_device(w);
+        if (r < 0) {
+                if (ERRNO_IS_DEVICE_ABSENT(r))
+                        log_wiphy_debug_errno(w, r, "Failed to update wiphy device, ignoring: %m");
+                else
+                        return log_wiphy_warning_errno(w, r, "Failed to update wiphy device: %m");
+        }
+
+        r = wiphy_update_rfkill(w);
+        if (r < 0) {
+                if (ERRNO_IS_DEVICE_ABSENT(r))
+                        log_wiphy_debug_errno(w, r, "Failed to update rfkill device, ignoring: %m");
+                else
+                        return log_wiphy_warning_errno(w, r, "Failed to update rfkill device: %m");
+        }
+
+        return 0;
+}
+
+int manager_genl_process_nl80211_wiphy(sd_netlink *genl, sd_netlink_message *message, Manager *manager) {
+        const char *family;
+        uint32_t index;
+        uint8_t cmd;
+        Wiphy *w = NULL;
+        int r;
+
+        assert(genl);
+        assert(message);
+        assert(manager);
+
+        if (sd_netlink_message_is_error(message)) {
+                r = sd_netlink_message_get_errno(message);
+                if (r < 0)
+                        log_message_warning_errno(message, r, "nl80211: received error message, ignoring");
+
+                return 0;
+        }
+
+        r = sd_genl_message_get_family_name(genl, message, &family);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: failed to determine genl family, ignoring: %m");
+                return 0;
+        }
+        if (!streq(family, NL80211_GENL_NAME)) {
+                log_debug("nl80211: Received message of unexpected genl family '%s', ignoring.", family);
+                return 0;
+        }
+
+        r = sd_genl_message_get_command(genl, message, &cmd);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: failed to determine genl message command, ignoring: %m");
+                return 0;
+        }
+
+        r = sd_netlink_message_read_u32(message, NL80211_ATTR_WIPHY, &index);
+        if (r < 0) {
+                log_debug_errno(r, "nl80211: received %s(%u) message without valid index, ignoring: %m",
+                                strna(nl80211_cmd_to_string(cmd)), cmd);
+                return 0;
+        }
+
+        (void) wiphy_get_by_index(manager, index, &w);
+
+        switch (cmd) {
+        case NL80211_CMD_NEW_WIPHY: {
+
+                if (!w) {
+                        r = wiphy_new(manager, message, &w);
+                        if (r < 0) {
+                                log_warning_errno(r, "Failed to save new wiphy, ignoring: %m");
+                                return 0;
+                        }
+                } else {
+                        r = wiphy_update_name(w, message);
+                        if (r < 0) {
+                                log_wiphy_warning_errno(w, r, "Failed to update wiphy name, ignoring: %m");
+                                return 0;
+                        }
+                        if (r == 0)
+                                return 0;
+                }
+
+                r = wiphy_update(w);
+                if (r < 0)
+                        log_wiphy_warning_errno(w, r, "Failed to update wiphy, ignoring: %m");
+
+                break;
+        }
+        case NL80211_CMD_DEL_WIPHY:
+
+                if (!w) {
+                        log_debug("The kernel removes wiphy we do not know, ignoring: %m");
+                        return 0;
+                }
+
+                log_wiphy_debug(w, "Removed.");
+                wiphy_free(w);
+                break;
+
+        default:
+                log_wiphy_debug(w, "nl80211: received %s(%u) message.",
+                                strna(nl80211_cmd_to_string(cmd)), cmd);
+        }
+
+        return 0;
+}
+
+int manager_udev_process_wiphy(Manager *m, sd_device *device, sd_device_action_t action) {
+        const char *name;
+        Wiphy *w;
+        int r;
+
+        assert(m);
+        assert(device);
+
+        r = sd_device_get_sysname(device, &name);
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to get sysname: %m");
+
+        r = wiphy_get_by_name(m, name, &w);
+        if (r < 0) {
+                /* This error is not critical, as the corresponding genl message may be received later. */
+                log_device_debug_errno(device, r, "Failed to get Wiphy object, ignoring: %m");
+                return 0;
+        }
+
+        return device_unref_and_replace(w->dev, action == SD_DEVICE_REMOVE ? NULL : device);
+}
+
+int manager_udev_process_rfkill(Manager *m, sd_device *device, sd_device_action_t action) {
+        _cleanup_free_ char *parent_path = NULL, *parent_name = NULL;
+        const char *s;
+        Wiphy *w;
+        int r;
+
+        assert(m);
+        assert(device);
+
+        r = sd_device_get_syspath(device, &s);
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to get syspath: %m");
+
+        /* Do not use sd_device_get_parent() here, as this might be a 'remove' uevent. */
+        r = path_extract_directory(s, &parent_path);
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to get parent syspath: %m");
+
+        r = path_extract_filename(parent_path, &parent_name);
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to get parent name: %m");
+
+        r = wiphy_get_by_name(m, parent_name, &w);
+        if (r < 0) {
+                /* This error is not critical, as the corresponding genl message may be received later. */
+                log_device_debug_errno(device, r, "Failed to get Wiphy object: %m");
+                return 0;
+        }
+
+        return device_unref_and_replace(w->rfkill, action == SD_DEVICE_REMOVE ? NULL : device);
+}
diff --git a/src/network/networkd-wiphy.h b/src/network/networkd-wiphy.h
new file mode 100644
index 0000000..b9056e8
--- /dev/null
+++ b/src/network/networkd-wiphy.h
@@ -0,0 +1,71 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+
+#include "sd-device.h"
+
+#include "macro.h"
+
+typedef struct Link Link;
+typedef struct Manager Manager;
+
+/* The following values are different from the ones defined in linux/rfkill.h. */
+typedef enum RFKillState {
+        RFKILL_UNKNOWN,
+        RFKILL_UNBLOCKED,
+        RFKILL_SOFT,
+        RFKILL_HARD,
+        _RFKILL_STATE_MAX,
+        _RFKILL_STATE_INVALID = -EINVAL,
+} RFKillState;
+
+typedef struct Wiphy {
+        Manager *manager;
+
+        uint32_t index;
+        char *name;
+
+        sd_device *dev;
+        sd_device *rfkill;
+        RFKillState rfkill_state;
+} Wiphy;
+
+Wiphy *wiphy_free(Wiphy *w);
+DEFINE_TRIVIAL_CLEANUP_FUNC(Wiphy*, wiphy_free);
+
+int wiphy_get_by_index(Manager *manager, uint32_t index, Wiphy **ret);
+int wiphy_get_by_name(Manager *manager, const char *name, Wiphy **ret);
+
+int link_rfkilled(Link *link);
+
+int manager_genl_process_nl80211_wiphy(sd_netlink *genl, sd_netlink_message *message, Manager *manager);
+int manager_udev_process_wiphy(Manager *m, sd_device *device, sd_device_action_t action);
+int manager_udev_process_rfkill(Manager *m, sd_device *device, sd_device_action_t action);
+
+#define log_wiphy_full_errno_zerook(w, level, error, ...)               \
+        ({                                                              \
+                const Wiphy *_w = (w);                                  \
+                log_interface_full_errno_zerook(_w ? _w->name : NULL, level, error, __VA_ARGS__); \
+        })
+
+#define log_wiphy_full_errno(w, level, error, ...)                      \
+        ({                                                              \
+                int _error = (error);                                   \
+                ASSERT_NON_ZERO(_error);                                \
+                log_wiphy_full_errno_zerook(w, level, _error, __VA_ARGS__); \
+        })
+
+#define log_wiphy_full(w, level, ...) (void) log_wiphy_full_errno_zerook(w, level, 0, __VA_ARGS__)
+
+#define log_wiphy_debug(w, ...)   log_wiphy_full(w, LOG_DEBUG, __VA_ARGS__)
+#define log_wiphy_info(w, ...)    log_wiphy_full(w, LOG_INFO, __VA_ARGS__)
+#define log_wiphy_notice(w, ...)  log_wiphy_full(w, LOG_NOTICE, __VA_ARGS__)
+#define log_wiphy_warning(w, ...) log_wiphy_full(w, LOG_WARNING, __VA_ARGS__)
+#define log_wiphy_error(w, ...)   log_wiphy_full(w, LOG_ERR, __VA_ARGS__)
+
+#define log_wiphy_debug_errno(w, error, ...)   log_wiphy_full_errno(w, LOG_DEBUG, error, __VA_ARGS__)
+#define log_wiphy_info_errno(w, error, ...)    log_wiphy_full_errno(w, LOG_INFO, error, __VA_ARGS__)
+#define log_wiphy_notice_errno(w, error, ...)  log_wiphy_full_errno(w, LOG_NOTICE, error, __VA_ARGS__)
+#define log_wiphy_warning_errno(w, error, ...) log_wiphy_full_errno(w, LOG_WARNING, error, __VA_ARGS__)
+#define log_wiphy_error_errno(w, error, ...)   log_wiphy_full_errno(w, LOG_ERR, error, __VA_ARGS__)
diff --git a/src/network/networkd.c b/src/network/networkd.c
index ff3380c..68760e8 100644
--- a/src/network/networkd.c
+++ b/src/network/networkd.c
@@ -7,13 +7,16 @@
 #include "sd-daemon.h"
 #include "sd-event.h"
 
+#include "bus-log-control-api.h"
 #include "capability-util.h"
 #include "daemon-util.h"
 #include "firewall-util.h"
 #include "main-func.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "networkd-conf.h"
+#include "networkd-manager-bus.h"
 #include "networkd-manager.h"
+#include "service-util.h"
 #include "signal-util.h"
 #include "user-util.h"
 
@@ -24,6 +27,13 @@
 
         log_setup();
 
+        r = service_parse_argv("systemd-networkd.service",
+                               "Manage and configure network devices, create virtual network devices",
+                               BUS_IMPLEMENTATIONS(&manager_object, &log_control_object),
+                               argc, argv);
+        if (r <= 0)
+                return r;
+
         umask(0022);
 
         if (argc != 1)
@@ -71,15 +81,13 @@
         if (r < 0)
                 log_warning_errno(r, "Could not create runtime directory 'lldp': %m");
 
-        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
-
-        r = manager_new(&m);
+        r = manager_new(&m, /* test_mode = */ false);
         if (r < 0)
                 return log_error_errno(r, "Could not create manager: %m");
 
-        r = manager_connect_bus(m);
+        r = manager_setup(m);
         if (r < 0)
-                return log_error_errno(r, "Could not connect to bus: %m");
+                return log_error_errno(r, "Could not setup manager: %m");
 
         r = manager_parse_config_file(m);
         if (r < 0)
diff --git a/src/network/org.freedesktop.network1.conf b/src/network/org.freedesktop.network1.conf
index 366c630..5bd796d 100644
--- a/src/network/org.freedesktop.network1.conf
+++ b/src/network/org.freedesktop.network1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   This file is part of systemd.
diff --git a/src/network/org.freedesktop.network1.policy b/src/network/org.freedesktop.network1.policy
index c39f206..1e2d8d7 100644
--- a/src/network/org.freedesktop.network1.policy
+++ b/src/network/org.freedesktop.network1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/network/tc/cake.c b/src/network/tc/cake.c
index 70dd095..a22a11c 100644
--- a/src/network/tc/cake.c
+++ b/src/network/tc/cake.c
@@ -9,8 +9,29 @@
 #include "netlink-util.h"
 #include "parse-util.h"
 #include "qdisc.h"
+#include "string-table.h"
 #include "string-util.h"
 
+static int cake_init(QDisc *qdisc) {
+        CommonApplicationsKeptEnhanced *c;
+
+        assert(qdisc);
+
+        c = CAKE(qdisc);
+
+        c->autorate = -1;
+        c->compensation_mode = _CAKE_COMPENSATION_MODE_INVALID;
+        c->raw = -1;
+        c->flow_isolation_mode = _CAKE_FLOW_ISOLATION_MODE_INVALID;
+        c->nat = -1;
+        c->preset = _CAKE_PRESET_INVALID;
+        c->wash = -1;
+        c->split_gso = -1;
+        c->ack_filter = _CAKE_ACK_FILTER_INVALID;
+
+        return 0;
+}
+
 static int cake_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
         CommonApplicationsKeptEnhanced *c;
         int r;
@@ -19,25 +40,100 @@
         assert(qdisc);
         assert(req);
 
-        c = CAKE(qdisc);
+        assert_se(c = CAKE(qdisc));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "cake");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (c->bandwidth > 0) {
                 r = sd_netlink_message_append_u64(req, TCA_CAKE_BASE_RATE64, c->bandwidth);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_CAKE_BASE_RATE64 attribute: %m");
+                        return r;
         }
 
-        r = sd_netlink_message_append_s32(req, TCA_CAKE_OVERHEAD, c->overhead);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_CAKE_OVERHEAD attribute: %m");
+        if (c->autorate >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_AUTORATE, c->autorate);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->overhead_set) {
+                r = sd_netlink_message_append_s32(req, TCA_CAKE_OVERHEAD, c->overhead);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->mpu > 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_MPU, c->mpu);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->compensation_mode >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_ATM, c->compensation_mode);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->raw > 0) {
+                /* TCA_CAKE_RAW attribute is mostly a flag, not boolean. */
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_RAW, 0);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->flow_isolation_mode >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_FLOW_MODE, c->flow_isolation_mode);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->nat >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_NAT, c->nat);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->preset >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_DIFFSERV_MODE, c->preset);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->fwmark > 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_FWMARK, c->fwmark);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->wash >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_WASH, c->wash);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->split_gso >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_SPLIT_GSO, c->split_gso);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->rtt > 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_RTT, c->rtt);
+                if (r < 0)
+                        return r;
+        }
+
+        if (c->ack_filter >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_ACK_FILTER, c->ack_filter);
+                if (r < 0)
+                        return r;
+        }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -56,14 +152,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         CommonApplicationsKeptEnhanced *c;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t k;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -111,14 +206,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         CommonApplicationsKeptEnhanced *c;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int32_t v;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -132,7 +226,7 @@
         c = CAKE(qdisc);
 
         if (isempty(rvalue)) {
-                c->overhead = 0;
+                c->overhead_set = false;
                 TAKE_PTR(qdisc);
                 return 0;
         }
@@ -152,6 +246,492 @@
         }
 
         c->overhead = v;
+        c->overhead_set = true;
+        TAKE_PTR(qdisc);
+        return 0;
+}
+
+int config_parse_cake_mpu(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+        CommonApplicationsKeptEnhanced *c;
+        Network *network = ASSERT_PTR(data);
+        uint32_t v;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "More than one kind of queueing discipline, ignoring assignment: %m");
+                return 0;
+        }
+
+        c = CAKE(qdisc);
+
+        if (isempty(rvalue)) {
+                c->mpu = 0;
+                TAKE_PTR(qdisc);
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, &v);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+        if (v <= 0 || v > 256) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        c->mpu = v;
+        TAKE_PTR(qdisc);
+        return 0;
+}
+
+int config_parse_cake_tristate(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+        CommonApplicationsKeptEnhanced *c;
+        Network *network = ASSERT_PTR(data);
+        int *dest, r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "More than one kind of queueing discipline, ignoring assignment: %m");
+                return 0;
+        }
+
+        c = CAKE(qdisc);
+
+        if (streq(lvalue, "AutoRateIngress"))
+                dest = &c->autorate;
+        else if (streq(lvalue, "UseRawPacketSize"))
+                dest = &c->raw;
+        else if (streq(lvalue, "NAT"))
+                dest = &c->nat;
+        else if (streq(lvalue, "Wash"))
+                dest = &c->wash;
+        else if (streq(lvalue, "SplitGSO"))
+                dest = &c->split_gso;
+        else
+                assert_not_reached();
+
+        if (isempty(rvalue)) {
+                *dest = -1;
+                TAKE_PTR(qdisc);
+                return 0;
+        }
+
+        r = parse_boolean(rvalue);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        *dest = r;
+        TAKE_PTR(qdisc);
+        return 0;
+}
+
+static const char * const cake_compensation_mode_table[_CAKE_COMPENSATION_MODE_MAX] = {
+        [CAKE_COMPENSATION_MODE_NONE] = "none",
+        [CAKE_COMPENSATION_MODE_ATM]  = "atm",
+        [CAKE_COMPENSATION_MODE_PTM]  = "ptm",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(cake_compensation_mode, CakeCompensationMode);
+
+int config_parse_cake_compensation_mode(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+        CommonApplicationsKeptEnhanced *c;
+        Network *network = ASSERT_PTR(data);
+        CakeCompensationMode mode;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "More than one kind of queueing discipline, ignoring assignment: %m");
+                return 0;
+        }
+
+        c = CAKE(qdisc);
+
+        if (isempty(rvalue)) {
+                c->compensation_mode = _CAKE_COMPENSATION_MODE_INVALID;
+                TAKE_PTR(qdisc);
+                return 0;
+        }
+
+        mode = cake_compensation_mode_from_string(rvalue);
+        if (mode < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, mode,
+                           "Failed to parse '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        c->compensation_mode = mode;
+        TAKE_PTR(qdisc);
+        return 0;
+}
+
+static const char * const cake_flow_isolation_mode_table[_CAKE_FLOW_ISOLATION_MODE_MAX] = {
+        [CAKE_FLOW_ISOLATION_MODE_NONE]     = "none",
+        [CAKE_FLOW_ISOLATION_MODE_SRC_IP]   = "src-host",
+        [CAKE_FLOW_ISOLATION_MODE_DST_IP]   = "dst-host",
+        [CAKE_FLOW_ISOLATION_MODE_HOSTS]    = "hosts",
+        [CAKE_FLOW_ISOLATION_MODE_FLOWS]    = "flows",
+        [CAKE_FLOW_ISOLATION_MODE_DUAL_SRC] = "dual-src-host",
+        [CAKE_FLOW_ISOLATION_MODE_DUAL_DST] = "dual-dst-host",
+        [CAKE_FLOW_ISOLATION_MODE_TRIPLE]   = "triple",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(cake_flow_isolation_mode, CakeFlowIsolationMode);
+
+int config_parse_cake_flow_isolation_mode(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+        CommonApplicationsKeptEnhanced *c;
+        Network *network = ASSERT_PTR(data);
+        CakeFlowIsolationMode mode;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "More than one kind of queueing discipline, ignoring assignment: %m");
+                return 0;
+        }
+
+        c = CAKE(qdisc);
+
+        if (isempty(rvalue)) {
+                c->flow_isolation_mode = _CAKE_FLOW_ISOLATION_MODE_INVALID;
+                TAKE_PTR(qdisc);
+                return 0;
+        }
+
+        mode = cake_flow_isolation_mode_from_string(rvalue);
+        if (mode < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, mode,
+                           "Failed to parse '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        c->flow_isolation_mode = mode;
+        TAKE_PTR(qdisc);
+        return 0;
+}
+
+static const char * const cake_priority_queueing_preset_table[_CAKE_PRESET_MAX] = {
+        [CAKE_PRESET_DIFFSERV3]  = "diffserv3",
+        [CAKE_PRESET_DIFFSERV4]  = "diffserv4",
+        [CAKE_PRESET_DIFFSERV8]  = "diffserv8",
+        [CAKE_PRESET_BESTEFFORT] = "besteffort",
+        [CAKE_PRESET_PRECEDENCE] = "precedence",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(cake_priority_queueing_preset, CakePriorityQueueingPreset);
+
+int config_parse_cake_priority_queueing_preset(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+        CommonApplicationsKeptEnhanced *c;
+        CakePriorityQueueingPreset preset;
+        Network *network = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "More than one kind of queueing discipline, ignoring assignment: %m");
+                return 0;
+        }
+
+        c = CAKE(qdisc);
+
+        if (isempty(rvalue)) {
+                c->preset = _CAKE_PRESET_INVALID;
+                TAKE_PTR(qdisc);
+                return 0;
+        }
+
+        preset = cake_priority_queueing_preset_from_string(rvalue);
+        if (preset < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, preset,
+                           "Failed to parse '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        c->preset = preset;
+        TAKE_PTR(qdisc);
+        return 0;
+}
+
+int config_parse_cake_fwmark(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+        CommonApplicationsKeptEnhanced *c;
+        Network *network = ASSERT_PTR(data);
+        uint32_t fwmark;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "More than one kind of queueing discipline, ignoring assignment: %m");
+                return 0;
+        }
+
+        c = CAKE(qdisc);
+
+        if (isempty(rvalue)) {
+                c->fwmark = 0;
+                TAKE_PTR(qdisc);
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, &fwmark);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+        if (fwmark <= 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        c->fwmark = fwmark;
+        TAKE_PTR(qdisc);
+        return 0;
+}
+
+int config_parse_cake_rtt(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+        CommonApplicationsKeptEnhanced *c;
+        Network *network = ASSERT_PTR(data);
+        usec_t t;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "More than one kind of queueing discipline, ignoring assignment: %m");
+                return 0;
+        }
+
+        c = CAKE(qdisc);
+
+        if (isempty(rvalue)) {
+                c->rtt = 0;
+                TAKE_PTR(qdisc);
+                return 0;
+        }
+
+        r = parse_sec(rvalue, &t);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+        if (t <= 0 || t > UINT32_MAX) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        c->rtt = t;
+        TAKE_PTR(qdisc);
+        return 0;
+}
+
+static const char * const cake_ack_filter_table[_CAKE_ACK_FILTER_MAX] = {
+        [CAKE_ACK_FILTER_NO]         = "no",
+        [CAKE_ACK_FILTER_YES]        = "yes",
+        [CAKE_ACK_FILTER_AGGRESSIVE] = "aggressive",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(cake_ack_filter, CakeAckFilter, CAKE_ACK_FILTER_YES);
+
+int config_parse_cake_ack_filter(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+        CommonApplicationsKeptEnhanced *c;
+        CakeAckFilter ack_filter;
+        Network *network = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = qdisc_new_static(QDISC_KIND_CAKE, network, filename, section_line, &qdisc);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "More than one kind of queueing discipline, ignoring assignment: %m");
+                return 0;
+        }
+
+        c = CAKE(qdisc);
+
+        if (isempty(rvalue)) {
+                c->ack_filter = _CAKE_ACK_FILTER_INVALID;
+                TAKE_PTR(qdisc);
+                return 0;
+        }
+
+        ack_filter = cake_ack_filter_from_string(rvalue);
+        if (ack_filter < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, ack_filter,
+                           "Failed to parse '%s=', ignoring assignment: %s",
+                           lvalue, rvalue);
+                return 0;
+        }
+
+        c->ack_filter = ack_filter;
         TAKE_PTR(qdisc);
         return 0;
 }
@@ -159,5 +739,6 @@
 const QDiscVTable cake_vtable = {
         .object_size = sizeof(CommonApplicationsKeptEnhanced),
         .tca_kind = "cake",
+        .init = cake_init,
         .fill_message = cake_fill_message,
 };
diff --git a/src/network/tc/cake.h b/src/network/tc/cake.h
index 1da28b7..5ca6dc6 100644
--- a/src/network/tc/cake.h
+++ b/src/network/tc/cake.h
@@ -2,15 +2,77 @@
  * Copyright © 2020 VMware, Inc. */
 #pragma once
 
+#include <linux/pkt_sched.h>
+
 #include "conf-parser.h"
 #include "qdisc.h"
 
+typedef enum CakeCompensationMode {
+        CAKE_COMPENSATION_MODE_NONE = CAKE_ATM_NONE,
+        CAKE_COMPENSATION_MODE_ATM  = CAKE_ATM_ATM,
+        CAKE_COMPENSATION_MODE_PTM  = CAKE_ATM_PTM,
+        _CAKE_COMPENSATION_MODE_MAX,
+        _CAKE_COMPENSATION_MODE_INVALID = -EINVAL,
+} CakeCompensationMode;
+
+typedef enum CakeFlowIsolationMode {
+        CAKE_FLOW_ISOLATION_MODE_NONE     = CAKE_FLOW_NONE,
+        CAKE_FLOW_ISOLATION_MODE_SRC_IP   = CAKE_FLOW_SRC_IP,
+        CAKE_FLOW_ISOLATION_MODE_DST_IP   = CAKE_FLOW_DST_IP,
+        CAKE_FLOW_ISOLATION_MODE_HOSTS    = CAKE_FLOW_HOSTS,
+        CAKE_FLOW_ISOLATION_MODE_FLOWS    = CAKE_FLOW_FLOWS,
+        CAKE_FLOW_ISOLATION_MODE_DUAL_SRC = CAKE_FLOW_DUAL_SRC,
+        CAKE_FLOW_ISOLATION_MODE_DUAL_DST = CAKE_FLOW_DUAL_DST,
+        CAKE_FLOW_ISOLATION_MODE_TRIPLE   = CAKE_FLOW_TRIPLE,
+        _CAKE_FLOW_ISOLATION_MODE_MAX,
+        _CAKE_FLOW_ISOLATION_MODE_INVALID = -EINVAL,
+} CakeFlowIsolationMode;
+
+typedef enum CakePriorityQueueingPreset {
+        CAKE_PRESET_DIFFSERV3  = CAKE_DIFFSERV_DIFFSERV3,
+        CAKE_PRESET_DIFFSERV4  = CAKE_DIFFSERV_DIFFSERV4,
+        CAKE_PRESET_DIFFSERV8  = CAKE_DIFFSERV_DIFFSERV8,
+        CAKE_PRESET_BESTEFFORT = CAKE_DIFFSERV_BESTEFFORT,
+        CAKE_PRESET_PRECEDENCE = CAKE_DIFFSERV_PRECEDENCE,
+        _CAKE_PRESET_MAX,
+        _CAKE_PRESET_INVALID = -EINVAL,
+} CakePriorityQueueingPreset;
+
+typedef enum CakeAckFilter {
+        CAKE_ACK_FILTER_NO         = CAKE_ACK_NONE,
+        CAKE_ACK_FILTER_YES        = CAKE_ACK_FILTER,
+        CAKE_ACK_FILTER_AGGRESSIVE = CAKE_ACK_AGGRESSIVE,
+        _CAKE_ACK_FILTER_MAX,
+        _CAKE_ACK_FILTER_INVALID   = -EINVAL,
+} CakeAckFilter;
+
 typedef struct CommonApplicationsKeptEnhanced {
         QDisc meta;
 
-        int overhead;
+        /* Shaper parameters */
+        int autorate;
         uint64_t bandwidth;
 
+        /* Overhead compensation parameters */
+        bool overhead_set;
+        int overhead;
+        uint32_t mpu;
+        CakeCompensationMode compensation_mode;
+        int raw;
+
+        /* Flow isolation parameters */
+        CakeFlowIsolationMode flow_isolation_mode;
+        int nat;
+
+        /* Priority queue parameters */
+        CakePriorityQueueingPreset preset;
+        uint32_t fwmark;
+
+        /* Other parameters */
+        int wash;
+        int split_gso;
+        usec_t rtt;
+        CakeAckFilter ack_filter;
 } CommonApplicationsKeptEnhanced;
 
 DEFINE_QDISC_CAST(CAKE, CommonApplicationsKeptEnhanced);
@@ -18,3 +80,11 @@
 
 CONFIG_PARSER_PROTOTYPE(config_parse_cake_bandwidth);
 CONFIG_PARSER_PROTOTYPE(config_parse_cake_overhead);
+CONFIG_PARSER_PROTOTYPE(config_parse_cake_mpu);
+CONFIG_PARSER_PROTOTYPE(config_parse_cake_tristate);
+CONFIG_PARSER_PROTOTYPE(config_parse_cake_compensation_mode);
+CONFIG_PARSER_PROTOTYPE(config_parse_cake_flow_isolation_mode);
+CONFIG_PARSER_PROTOTYPE(config_parse_cake_priority_queueing_preset);
+CONFIG_PARSER_PROTOTYPE(config_parse_cake_fwmark);
+CONFIG_PARSER_PROTOTYPE(config_parse_cake_rtt);
+CONFIG_PARSER_PROTOTYPE(config_parse_cake_ack_filter);
diff --git a/src/network/tc/codel.c b/src/network/tc/codel.c
index 807c247..b5f95f7 100644
--- a/src/network/tc/codel.c
+++ b/src/network/tc/codel.c
@@ -31,45 +31,45 @@
         assert(qdisc);
         assert(req);
 
-        cd = CODEL(qdisc);
+        assert_se(cd = CODEL(qdisc));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "codel");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (cd->packet_limit > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_CODEL_LIMIT, cd->packet_limit);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_CODEL_LIMIT attribute: %m");
+                        return r;
         }
 
         if (cd->interval_usec > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_CODEL_INTERVAL, cd->interval_usec);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_CODEL_INTERVAL attribute: %m");
+                        return r;
         }
 
         if (cd->target_usec > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_CODEL_TARGET, cd->target_usec);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_CODEL_TARGET attribute: %m");
+                        return r;
         }
 
         if (cd->ecn >= 0) {
                 r = sd_netlink_message_append_u32(req, TCA_CODEL_ECN, cd->ecn);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_CODEL_ECN attribute: %m");
+                        return r;
         }
 
         if (cd->ce_threshold_usec != USEC_INFINITY) {
                 r = sd_netlink_message_append_u32(req, TCA_CODEL_CE_THRESHOLD, cd->ce_threshold_usec);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_CODEL_CE_THRESHOLD attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -88,13 +88,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         ControlledDelay *cd;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_CODEL, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -141,14 +140,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         ControlledDelay *cd;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         usec_t *p;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_CODEL, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -168,7 +166,7 @@
         else if (streq(lvalue, "CEThresholdSec"))
                 p = &cd->ce_threshold_usec;
         else
-                assert_not_reached("Invalid lvalue");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 if (streq(lvalue, "CEThresholdSec"))
@@ -207,13 +205,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         ControlledDelay *cd;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_CODEL, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/drr.c b/src/network/tc/drr.c
index ab67b0a..373911b 100644
--- a/src/network/tc/drr.c
+++ b/src/network/tc/drr.c
@@ -23,21 +23,21 @@
         assert(tclass);
         assert(req);
 
-        drr = TCLASS_TO_DRR(tclass);
+        assert_se(drr = TCLASS_TO_DRR(tclass));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "drr");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (drr->quantum > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_DRR_QUANTUM, drr->quantum);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_DRR_QUANTUM, attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -56,14 +56,13 @@
 
         _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
         DeficitRoundRobinSchedulerClass *drr;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t u;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = tclass_new_static(TCLASS_KIND_DRR, network, filename, section_line, &tclass);
         if (r == -ENOMEM)
diff --git a/src/network/tc/ets.c b/src/network/tc/ets.c
index 8214a57..730b0a1 100644
--- a/src/network/tc/ets.c
+++ b/src/network/tc/ets.c
@@ -5,6 +5,7 @@
 #include "alloc-util.h"
 #include "conf-parser.h"
 #include "ets.h"
+#include "extract-word.h"
 #include "memory-util.h"
 #include "netlink-util.h"
 #include "parse-util.h"
@@ -20,57 +21,57 @@
         assert(qdisc);
         assert(req);
 
-        ets = ETS(qdisc);
+        assert_se(ets = ETS(qdisc));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "ets");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         r = sd_netlink_message_append_u8(req, TCA_ETS_NBANDS, ets->n_bands);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_ETS_NBANDS attribute: %m");
+                return r;
 
         if (ets->n_strict > 0) {
                 r = sd_netlink_message_append_u8(req, TCA_ETS_NSTRICT, ets->n_strict);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_ETS_NSTRICT attribute: %m");
+                        return r;
         }
 
         if (ets->n_quanta > 0) {
                 r = sd_netlink_message_open_container(req, TCA_ETS_QUANTA);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not open container TCA_ETS_QUANTA: %m");
+                        return r;
 
                 for (unsigned i = 0; i < ets->n_quanta; i++) {
                         r = sd_netlink_message_append_u32(req, TCA_ETS_QUANTA_BAND, ets->quanta[i]);
                         if (r < 0)
-                                return log_link_error_errno(link, r, "Could not append TCA_ETS_QUANTA_BAND attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not close container TCA_ETS_QUANTA: %m");
+                        return r;
         }
 
         if (ets->n_prio > 0) {
                 r = sd_netlink_message_open_container(req, TCA_ETS_PRIOMAP);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not open container TCA_ETS_PRIOMAP: %m");
+                        return r;
 
                 for (unsigned i = 0; i < ets->n_prio; i++) {
                         r = sd_netlink_message_append_u8(req, TCA_ETS_PRIOMAP_BAND, ets->prio[i]);
                         if (r < 0)
-                                return log_link_error_errno(link, r, "Could not append TCA_ETS_PRIOMAP_BAND attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_close_container(req);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not close container TCA_ETS_PRIOMAP: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -89,14 +90,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         EnhancedTransmissionSelection *ets;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint8_t v, *p;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_ETS, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -113,7 +113,7 @@
         else if (streq(lvalue, "StrictBands"))
                 p = &ets->n_strict;
         else
-                assert_not_reached("Invalid lvalue.");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 *p = 0;
@@ -156,13 +156,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         EnhancedTransmissionSelection *ets;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_ETS, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -240,13 +239,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         EnhancedTransmissionSelection *ets;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_ETS, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/fifo.c b/src/network/tc/fifo.c
index 3aa9573..940fa00 100644
--- a/src/network/tc/fifo.c
+++ b/src/network/tc/fifo.c
@@ -11,7 +11,6 @@
 #include "string-util.h"
 
 static int fifo_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
-        struct tc_fifo_qopt opt = {};
         FirstInFirstOut *fifo;
         int r;
 
@@ -19,25 +18,24 @@
         assert(qdisc);
         assert(req);
 
-        switch(qdisc->kind) {
+        switch (qdisc->kind) {
         case QDISC_KIND_PFIFO:
-                fifo = PFIFO(qdisc);
+                assert_se(fifo = PFIFO(qdisc));
                 break;
         case QDISC_KIND_BFIFO:
-                fifo = BFIFO(qdisc);
+                assert_se(fifo = BFIFO(qdisc));
                 break;
         case QDISC_KIND_PFIFO_HEAD_DROP:
-                fifo = PFIFO_HEAD_DROP(qdisc);
+                assert_se(fifo = PFIFO_HEAD_DROP(qdisc));
                 break;
         default:
-                assert_not_reached("Invalid QDisc kind.");
+                assert_not_reached();
         }
 
-        opt.limit = fifo->limit;
-
-        r = sd_netlink_message_append_data(req, TCA_OPTIONS, &opt, sizeof(struct tc_fifo_qopt));
+        const struct tc_fifo_qopt opt = { .limit = fifo->limit };
+        r = sd_netlink_message_append_data(req, TCA_OPTIONS, &opt, sizeof(opt));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_OPTIONS attribute: %m");
+                return r;
 
         return 0;
 }
@@ -55,14 +53,13 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         FirstInFirstOut *fifo;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(ltype, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -73,7 +70,7 @@
                 return 0;
         }
 
-        switch(qdisc->kind) {
+        switch (qdisc->kind) {
         case QDISC_KIND_PFIFO:
                 fifo = PFIFO(qdisc);
                 break;
@@ -81,7 +78,7 @@
                 fifo = PFIFO_HEAD_DROP(qdisc);
                 break;
         default:
-                assert_not_reached("Invalid QDisc kind.");
+                assert_not_reached();
         }
 
         if (isempty(rvalue)) {
@@ -116,7 +113,7 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         FirstInFirstOut *fifo;
         uint64_t u;
         int r;
@@ -124,7 +121,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_BFIFO, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/fq-codel.c b/src/network/tc/fq-codel.c
index bcc734d..50ec203 100644
--- a/src/network/tc/fq-codel.c
+++ b/src/network/tc/fq-codel.c
@@ -33,63 +33,63 @@
         assert(qdisc);
         assert(req);
 
-        fqcd = FQ_CODEL(qdisc);
+        assert_se(fqcd = FQ_CODEL(qdisc));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "fq_codel");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (fqcd->packet_limit > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CODEL_LIMIT, fqcd->packet_limit);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CODEL_LIMIT attribute: %m");
+                        return r;
         }
 
         if (fqcd->flows > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CODEL_FLOWS, fqcd->flows);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CODEL_FLOWS attribute: %m");
+                        return r;
         }
 
         if (fqcd->quantum > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CODEL_QUANTUM, fqcd->quantum);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CODEL_QUANTUM attribute: %m");
+                        return r;
         }
 
         if (fqcd->interval_usec > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CODEL_INTERVAL, fqcd->interval_usec);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CODEL_INTERVAL attribute: %m");
+                        return r;
         }
 
         if (fqcd->target_usec > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CODEL_TARGET, fqcd->target_usec);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CODEL_TARGET attribute: %m");
+                        return r;
         }
 
         if (fqcd->ecn >= 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CODEL_ECN, fqcd->ecn);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CODEL_ECN attribute: %m");
+                        return r;
         }
 
         if (fqcd->ce_threshold_usec != USEC_INFINITY) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CODEL_CE_THRESHOLD, fqcd->ce_threshold_usec);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CODEL_CE_THRESHOLD attribute: %m");
+                        return r;
         }
 
         if (fqcd->memory_limit != UINT32_MAX) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CODEL_MEMORY_LIMIT, fqcd->memory_limit);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CODEL_MEMORY_LIMIT attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -108,14 +108,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueingControlledDelay *fqcd;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint32_t *p;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ_CODEL, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -133,7 +132,7 @@
         else if (streq(lvalue, "Flows"))
                 p = &fqcd->flows;
         else
-                assert_not_reached("Invalid lvalue.");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 *p = 0;
@@ -169,14 +168,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueingControlledDelay *fqcd;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         usec_t *p;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ_CODEL, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -196,7 +194,7 @@
         else if (streq(lvalue, "CEThresholdSec"))
                 p = &fqcd->ce_threshold_usec;
         else
-                assert_not_reached("Invalid lvalue.");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 if (streq(lvalue, "CEThresholdSec"))
@@ -235,13 +233,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueingControlledDelay *fqcd;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ_CODEL, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -289,7 +286,7 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueingControlledDelay *fqcd;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t sz;
         uint32_t *p;
         int r;
@@ -297,7 +294,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ_CODEL, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -315,7 +311,7 @@
         else if (STR_IN_SET(lvalue, "QuantumBytes", "Quantum"))
                 p = &fqcd->quantum;
         else
-                assert_not_reached("Invalid lvalue.");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 if (STR_IN_SET(lvalue, "MemoryLimitBytes", "MemoryLimit"))
diff --git a/src/network/tc/fq-pie.c b/src/network/tc/fq-pie.c
index c7d7623..c8b2e7b 100644
--- a/src/network/tc/fq-pie.c
+++ b/src/network/tc/fq-pie.c
@@ -18,21 +18,21 @@
         assert(qdisc);
         assert(req);
 
-        fq_pie = FQ_PIE(qdisc);
+        assert_se(fq_pie = FQ_PIE(qdisc));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "fq_pie");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (fq_pie->packet_limit > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_PIE_LIMIT, fq_pie->packet_limit);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_PIE_PLIMIT attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -51,14 +51,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FlowQueuePIE *fq_pie;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint32_t val;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ_PIE, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/fq.c b/src/network/tc/fq.c
index d48aea8..149a72e 100644
--- a/src/network/tc/fq.c
+++ b/src/network/tc/fq.c
@@ -6,6 +6,7 @@
 #include "alloc-util.h"
 #include "conf-parser.h"
 #include "fq.h"
+#include "logarithm.h"
 #include "netlink-util.h"
 #include "parse-util.h"
 #include "string-util.h"
@@ -32,46 +33,46 @@
         assert(qdisc);
         assert(req);
 
-        fq = FQ(qdisc);
+        assert_se(fq = FQ(qdisc));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "fq");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (fq->packet_limit > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_PLIMIT, fq->packet_limit);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_PLIMIT attribute: %m");
+                        return r;
         }
 
         if (fq->flow_limit > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_FLOW_PLIMIT, fq->flow_limit);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_FLOW_PLIMIT attribute: %m");
+                        return r;
         }
 
         if (fq->quantum > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_QUANTUM, fq->quantum);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_QUANTUM attribute: %m");
+                        return r;
         }
 
         if (fq->initial_quantum > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_INITIAL_QUANTUM, fq->initial_quantum);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_INITIAL_QUANTUM attribute: %m");
+                        return r;
         }
 
         if (fq->pacing >= 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_RATE_ENABLE, fq->pacing);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_RATE_ENABLE attribute: %m");
+                        return r;
         }
 
         if (fq->max_rate > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_FLOW_MAX_RATE, fq->max_rate);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_FLOW_MAX_RATE attribute: %m");
+                        return r;
         }
 
         if (fq->buckets > 0) {
@@ -80,24 +81,24 @@
                 l = log2u(fq->buckets);
                 r = sd_netlink_message_append_u32(req, TCA_FQ_BUCKETS_LOG, l);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_BUCKETS_LOG attribute: %m");
+                        return r;
         }
 
         if (fq->orphan_mask > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_ORPHAN_MASK, fq->orphan_mask);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_ORPHAN_MASK attribute: %m");
+                        return r;
         }
 
         if (fq->ce_threshold_usec != USEC_INFINITY) {
                 r = sd_netlink_message_append_u32(req, TCA_FQ_CE_THRESHOLD, fq->ce_threshold_usec);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_FQ_CE_THRESHOLD attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -116,14 +117,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueing *fq;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint32_t *p;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -145,7 +145,7 @@
         else if (streq(lvalue, "OrphanMask"))
                 p = &fq->orphan_mask;
         else
-                assert_not_reached("Invalid lvalue");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 *p = 0;
@@ -181,7 +181,7 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueing *fq;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t sz;
         uint32_t *p;
         int r;
@@ -189,7 +189,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -207,7 +206,7 @@
         else if (STR_IN_SET(lvalue, "InitialQuantumBytes", "InitialQuantum"))
                 p = &fq->initial_quantum;
         else
-                assert_not_reached("Invalid lvalue");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 *p = 0;
@@ -250,13 +249,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueing *fq;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -304,14 +302,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueing *fq;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         usec_t sec;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -365,14 +362,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         FairQueueing *fq;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t sz;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_FQ, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/gred.c b/src/network/tc/gred.c
index 04fcd59..476122c 100644
--- a/src/network/tc/gred.c
+++ b/src/network/tc/gred.c
@@ -24,32 +24,31 @@
 
 static int generic_random_early_detection_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
         GenericRandomEarlyDetection *gred;
-        struct tc_gred_sopt opt = {};
         int r;
 
         assert(link);
         assert(qdisc);
         assert(req);
 
-        gred = GRED(qdisc);
+        assert_se(gred = GRED(qdisc));
 
-        opt.DPs = gred->virtual_queues;
-        opt.def_DP = gred->default_virtual_queue;
-
-        if (gred->grio >= 0)
-                opt.grio = gred->grio;
+        const struct tc_gred_sopt opt = {
+                .DPs = gred->virtual_queues,
+                .def_DP = gred->default_virtual_queue,
+                .grio = gred->grio,
+        };
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "gred");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
-        r = sd_netlink_message_append_data(req, TCA_GRED_DPS, &opt, sizeof(struct tc_gred_sopt));
+        r = sd_netlink_message_append_data(req, TCA_GRED_DPS, &opt, sizeof(opt));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_GRED_DPS attribute: %m");
+                return r;
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -80,7 +79,7 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         GenericRandomEarlyDetection *gred;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint32_t *p;
         uint32_t v;
         int r;
@@ -88,7 +87,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_GRED, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -106,7 +104,7 @@
         else if (streq(lvalue, "DefaultVirtualQueue"))
                 p = &gred->default_virtual_queue;
         else
-                assert_not_reached("Invalid lvalue.");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 *p = 0;
@@ -147,13 +145,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         GenericRandomEarlyDetection *gred;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_GRED, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/hhf.c b/src/network/tc/hhf.c
index 68a4b45..d44522f 100644
--- a/src/network/tc/hhf.c
+++ b/src/network/tc/hhf.c
@@ -9,7 +9,6 @@
 #include "netlink-util.h"
 #include "parse-util.h"
 #include "string-util.h"
-#include "util.h"
 
 static int heavy_hitter_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
         HeavyHitterFilter *hhf;
@@ -19,21 +18,21 @@
         assert(qdisc);
         assert(req);
 
-        hhf = HHF(qdisc);
+        assert_se(hhf = HHF(qdisc));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "hhf");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (hhf->packet_limit > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_HHF_BACKLOG_LIMIT, hhf->packet_limit);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_HHF_BACKLOG_LIMIT attribute: %m");
+                        return r;
         }
 
        r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -52,13 +51,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         HeavyHitterFilter *hhf;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_HHF, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/htb.c b/src/network/tc/htb.c
index 1745524..eb2c8cf 100644
--- a/src/network/tc/htb.c
+++ b/src/network/tc/htb.c
@@ -5,6 +5,7 @@
 #include "alloc-util.h"
 #include "conf-parser.h"
 #include "netlink-util.h"
+#include "networkd-link.h"
 #include "parse-util.h"
 #include "qdisc.h"
 #include "htb.h"
@@ -16,31 +17,31 @@
 
 static int hierarchy_token_bucket_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
         HierarchyTokenBucket *htb;
-        struct tc_htb_glob opt = {
-                .version = 3,
-        };
         int r;
 
         assert(link);
         assert(qdisc);
         assert(req);
 
-        htb = HTB(qdisc);
+        assert_se(htb = HTB(qdisc));
 
-        opt.rate2quantum = htb->rate_to_quantum;
-        opt.defcls = htb->default_class;
+        struct tc_htb_glob opt = {
+                .version = 3,
+                .rate2quantum = htb->rate_to_quantum,
+                .defcls = htb->default_class,
+        };
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "htb");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         r = sd_netlink_message_append_data(req, TCA_HTB_INIT, &opt, sizeof(opt));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_HTB_INIT attribute: %m");
+                return r;
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
         return 0;
 }
 
@@ -58,13 +59,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         HierarchyTokenBucket *htb;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_HTB, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -111,13 +111,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         HierarchyTokenBucket *htb;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_HTB, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -171,7 +170,6 @@
 
 static int hierarchy_token_bucket_class_fill_message(Link *link, TClass *tclass, sd_netlink_message *req) {
         HierarchyTokenBucketClass *htb;
-        struct tc_htb_opt opt = {};
         uint32_t rtab[256], ctab[256];
         int r;
 
@@ -179,62 +177,65 @@
         assert(tclass);
         assert(req);
 
-        htb = TCLASS_TO_HTB(tclass);
+        assert_se(htb = TCLASS_TO_HTB(tclass));
 
-        opt.prio = htb->priority;
-        opt.quantum = htb->quantum;
-        opt.rate.rate = (htb->rate >= (1ULL << 32)) ? ~0U : htb->rate;
-        opt.ceil.rate = (htb->ceil_rate >= (1ULL << 32)) ? ~0U : htb->ceil_rate;
-        opt.rate.overhead = htb->overhead;
-        opt.ceil.overhead = htb->overhead;
+        struct tc_htb_opt opt = {
+                .prio = htb->priority,
+                .quantum = htb->quantum,
+                .rate.rate = (htb->rate >= (1ULL << 32)) ? ~0U : htb->rate,
+                .ceil.rate = (htb->ceil_rate >= (1ULL << 32)) ? ~0U : htb->ceil_rate,
+                .rate.overhead = htb->overhead,
+                .ceil.overhead = htb->overhead,
+        };
 
         r = tc_transmit_time(htb->rate, htb->buffer, &opt.buffer);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to calculate buffer size: %m");
+                return log_link_debug_errno(link, r, "Failed to calculate buffer size: %m");
 
         r = tc_transmit_time(htb->ceil_rate, htb->ceil_buffer, &opt.cbuffer);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to calculate ceil buffer size: %m");
+                return log_link_debug_errno(link, r, "Failed to calculate ceil buffer size: %m");
 
         r = tc_fill_ratespec_and_table(&opt.rate, rtab, htb->mtu);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to calculate rate table: %m");
+                return log_link_debug_errno(link, r, "Failed to calculate rate table: %m");
 
         r = tc_fill_ratespec_and_table(&opt.ceil, ctab, htb->mtu);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to calculate ceil rate table: %m");
+                return log_link_debug_errno(link, r, "Failed to calculate ceil rate table: %m");
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "htb");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         r = sd_netlink_message_append_data(req, TCA_HTB_PARMS, &opt, sizeof(opt));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_HTB_PARMS attribute: %m");
+                return r;
 
         if (htb->rate >= (1ULL << 32)) {
                 r = sd_netlink_message_append_u64(req, TCA_HTB_RATE64, htb->rate);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_HTB_RATE64 attribute: %m");
+                        return r;
         }
 
         if (htb->ceil_rate >= (1ULL << 32)) {
                 r = sd_netlink_message_append_u64(req, TCA_HTB_CEIL64, htb->ceil_rate);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_HTB_CEIL64 attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_data(req, TCA_HTB_RTAB, rtab, sizeof(rtab));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_HTB_RTAB attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_data(req, TCA_HTB_CTAB, ctab, sizeof(ctab));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_HTB_CTAB attribute: %m");
+                return r;
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
+
         return 0;
 }
 
@@ -252,14 +253,13 @@
 
         _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
         HierarchyTokenBucketClass *htb;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint32_t v;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = tclass_new_static(TCLASS_KIND_HTB, network, filename, section_line, &tclass);
         if (r == -ENOMEM)
@@ -306,14 +306,13 @@
 
         _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
         HierarchyTokenBucketClass *htb;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t v;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = tclass_new_static(TCLASS_KIND_HTB, network, filename, section_line, &tclass);
         if (r == -ENOMEM)
@@ -338,7 +337,7 @@
                 else if (streq(lvalue, "CeilBufferBytes"))
                         htb->ceil_buffer = 0;
                 else
-                        assert_not_reached("Invalid lvalue");
+                        assert_not_reached();
 
                 tclass = NULL;
                 return 0;
@@ -369,7 +368,7 @@
         else if (streq(lvalue, "CeilBufferBytes"))
                 htb->ceil_buffer = v;
         else
-                assert_not_reached("Invalid lvalue");
+                assert_not_reached();
 
         tclass = NULL;
 
@@ -390,14 +389,13 @@
 
         _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
         HierarchyTokenBucketClass *htb;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t *v;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = tclass_new_static(TCLASS_KIND_HTB, network, filename, section_line, &tclass);
         if (r == -ENOMEM)
@@ -414,7 +412,7 @@
         else if (streq(lvalue, "CeilRate"))
                 v = &htb->ceil_rate;
         else
-                assert_not_reached("Invalid lvalue");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 *v = 0;
diff --git a/src/network/tc/netem.c b/src/network/tc/netem.c
index 2d86d53..6a63221 100644
--- a/src/network/tc/netem.c
+++ b/src/network/tc/netem.c
@@ -14,9 +14,6 @@
 #include "tc-util.h"
 
 static int network_emulator_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
-        struct tc_netem_qopt opt = {
-               .limit = 1000,
-        };
         NetworkEmulator *ne;
         int r;
 
@@ -24,16 +21,13 @@
         assert(qdisc);
         assert(req);
 
-        ne = NETEM(qdisc);
+        assert_se(ne = NETEM(qdisc));
 
-        if (ne->limit > 0)
-                opt.limit = ne->limit;
-
-        if (ne->loss > 0)
-                opt.loss = ne->loss;
-
-        if (ne->duplicate > 0)
-                opt.duplicate = ne->duplicate;
+        struct tc_netem_qopt opt = {
+                .limit = ne->limit > 0 ? ne->limit : 1000,
+                .loss = ne->loss,
+                .duplicate = ne->duplicate,
+        };
 
         if (ne->delay != USEC_INFINITY) {
                 r = tc_time_to_tick(ne->delay, &opt.latency);
@@ -47,9 +41,9 @@
                         return log_link_error_errno(link, r, "Failed to calculate jitter in TCA_OPTION: %m");
         }
 
-        r = sd_netlink_message_append_data(req, TCA_OPTIONS, &opt, sizeof(struct tc_netem_qopt));
+        r = sd_netlink_message_append_data(req, TCA_OPTIONS, &opt, sizeof(opt));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_OPTION attribute: %m");
+                return r;
 
         return 0;
 }
@@ -67,7 +61,7 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         NetworkEmulator *ne;
         usec_t u;
         int r;
@@ -75,7 +69,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_NETEM, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -129,7 +122,7 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         NetworkEmulator *ne;
         uint32_t rate;
         int r;
@@ -137,7 +130,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_NETEM, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -190,14 +182,13 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         NetworkEmulator *ne;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_NETEM, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/pie.c b/src/network/tc/pie.c
index 4fcfe62..c9b171b 100644
--- a/src/network/tc/pie.c
+++ b/src/network/tc/pie.c
@@ -18,21 +18,21 @@
         assert(qdisc);
         assert(req);
 
-        pie = PIE(qdisc);
+        assert_se(pie = PIE(qdisc));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "pie");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (pie->packet_limit > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_PIE_LIMIT, pie->packet_limit);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_PIE_PLIMIT attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -51,13 +51,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         ProportionalIntegralControllerEnhanced *pie;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_PIE, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/qdisc.c b/src/network/tc/qdisc.c
index 2e0f0a1..ca89169 100644
--- a/src/network/tc/qdisc.c
+++ b/src/network/tc/qdisc.c
@@ -7,7 +7,10 @@
 #include "conf-parser.h"
 #include "in-addr-util.h"
 #include "netlink-util.h"
+#include "networkd-link.h"
 #include "networkd-manager.h"
+#include "networkd-network.h"
+#include "networkd-queue.h"
 #include "parse-util.h"
 #include "qdisc.h"
 #include "set.h"
@@ -49,18 +52,15 @@
                         return -ENOMEM;
 
                 *qdisc = (QDisc) {
-                        .meta.kind = TC_KIND_QDISC,
-                        .family = AF_UNSPEC,
                         .parent = TC_H_ROOT,
                         .kind = kind,
                 };
         } else {
+                assert(kind >= 0 && kind < _QDISC_KIND_MAX);
                 qdisc = malloc0(qdisc_vtable[kind]->object_size);
                 if (!qdisc)
                         return -ENOMEM;
 
-                qdisc->meta.kind = TC_KIND_QDISC,
-                qdisc->family = AF_UNSPEC;
                 qdisc->parent = TC_H_ROOT;
                 qdisc->kind = kind;
 
@@ -77,10 +77,9 @@
 }
 
 int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, unsigned section_line, QDisc **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(qdisc_freep) QDisc *qdisc = NULL;
-        TrafficControl *existing;
-        QDisc *q = NULL;
+        QDisc *existing;
         int r;
 
         assert(network);
@@ -88,24 +87,19 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
-        existing = ordered_hashmap_get(network->tc_by_section, n);
+        existing = hashmap_get(network->qdiscs_by_section, n);
         if (existing) {
-                if (existing->kind != TC_KIND_QDISC)
-                        return -EINVAL;
-
-                q = TC_TO_QDISC(existing);
-
-                if (q->kind != _QDISC_KIND_INVALID &&
+                if (existing->kind != _QDISC_KIND_INVALID &&
                     kind != _QDISC_KIND_INVALID &&
-                    q->kind != kind)
+                    existing->kind != kind)
                         return -EINVAL;
 
-                if (q->kind == kind || kind == _QDISC_KIND_INVALID) {
-                        *ret = q;
+                if (existing->kind == kind || kind == _QDISC_KIND_INVALID) {
+                        *ret = existing;
                         return 0;
                 }
         }
@@ -114,19 +108,19 @@
         if (r < 0)
                 return r;
 
-        if (q) {
-                qdisc->family = q->family;
-                qdisc->handle = q->handle;
-                qdisc->parent = q->parent;
-                qdisc->tca_kind = TAKE_PTR(q->tca_kind);
+        if (existing) {
+                qdisc->handle = existing->handle;
+                qdisc->parent = existing->parent;
+                qdisc->tca_kind = TAKE_PTR(existing->tca_kind);
 
-                qdisc_free(q);
+                qdisc_free(existing);
         }
 
         qdisc->network = network;
         qdisc->section = TAKE_PTR(n);
+        qdisc->source = NETWORK_CONFIG_SOURCE_STATIC;
 
-        r = ordered_hashmap_ensure_put(&network->tc_by_section, &network_config_hash_ops, qdisc->section, TC(qdisc));
+        r = hashmap_ensure_put(&network->qdiscs_by_section, &config_section_hash_ops, qdisc->section, qdisc);
         if (r < 0)
                 return r;
 
@@ -139,23 +133,171 @@
                 return NULL;
 
         if (qdisc->network && qdisc->section)
-                ordered_hashmap_remove(qdisc->network->tc_by_section, qdisc->section);
+                hashmap_remove(qdisc->network->qdiscs_by_section, qdisc->section);
 
-        network_config_section_free(qdisc->section);
+        config_section_free(qdisc->section);
+
+        if (qdisc->link)
+                set_remove(qdisc->link->qdiscs, qdisc);
 
         free(qdisc->tca_kind);
         return mfree(qdisc);
 }
 
-static int qdisc_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static const char *qdisc_get_tca_kind(const QDisc *qdisc) {
+        assert(qdisc);
+
+        return (QDISC_VTABLE(qdisc) && QDISC_VTABLE(qdisc)->tca_kind) ?
+                QDISC_VTABLE(qdisc)->tca_kind : qdisc->tca_kind;
+}
+
+static void qdisc_hash_func(const QDisc *qdisc, struct siphash *state) {
+        assert(qdisc);
+        assert(state);
+
+        siphash24_compress(&qdisc->handle, sizeof(qdisc->handle), state);
+        siphash24_compress(&qdisc->parent, sizeof(qdisc->parent), state);
+        siphash24_compress_string(qdisc_get_tca_kind(qdisc), state);
+}
+
+static int qdisc_compare_func(const QDisc *a, const QDisc *b) {
+        int r;
+
+        assert(a);
+        assert(b);
+
+        r = CMP(a->handle, b->handle);
+        if (r != 0)
+                return r;
+
+        r = CMP(a->parent, b->parent);
+        if (r != 0)
+                return r;
+
+        return strcmp_ptr(qdisc_get_tca_kind(a), qdisc_get_tca_kind(b));
+}
+
+DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+        qdisc_hash_ops,
+        QDisc,
+        qdisc_hash_func,
+        qdisc_compare_func,
+        qdisc_free);
+
+static int qdisc_get(Link *link, const QDisc *in, QDisc **ret) {
+        QDisc *existing;
+
+        assert(link);
+        assert(in);
+
+        existing = set_get(link->qdiscs, in);
+        if (!existing)
+                return -ENOENT;
+
+        if (ret)
+                *ret = existing;
+        return 0;
+}
+
+static int qdisc_add(Link *link, QDisc *qdisc) {
         int r;
 
         assert(link);
-        assert(link->tc_messages > 0);
-        link->tc_messages--;
+        assert(qdisc);
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
+        r = set_ensure_put(&link->qdiscs, &qdisc_hash_ops, qdisc);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return -EEXIST;
+
+        qdisc->link = link;
+        return 0;
+}
+
+static int qdisc_dup(const QDisc *src, QDisc **ret) {
+        _cleanup_(qdisc_freep) QDisc *dst = NULL;
+
+        assert(src);
+        assert(ret);
+
+        if (QDISC_VTABLE(src))
+                dst = memdup(src, QDISC_VTABLE(src)->object_size);
+        else
+                dst = newdup(QDisc, src, 1);
+        if (!dst)
+                return -ENOMEM;
+
+        /* clear all pointers */
+        dst->network = NULL;
+        dst->section = NULL;
+        dst->link = NULL;
+        dst->tca_kind = NULL;
+
+        if (src->tca_kind) {
+                dst->tca_kind = strdup(src->tca_kind);
+                if (!dst->tca_kind)
+                        return -ENOMEM;
+        }
+
+        *ret = TAKE_PTR(dst);
+        return 0;
+}
+
+static void log_qdisc_debug(QDisc *qdisc, Link *link, const char *str) {
+        _cleanup_free_ char *state = NULL;
+
+        assert(qdisc);
+        assert(str);
+
+        if (!DEBUG_LOGGING)
+                return;
+
+        (void) network_config_state_to_string_alloc(qdisc->state, &state);
+
+        log_link_debug(link, "%s %s QDisc (%s): handle=%"PRIx32":%"PRIx32", parent=%"PRIx32":%"PRIx32", kind=%s",
+                       str, strna(network_config_source_to_string(qdisc->source)), strna(state),
+                       TC_H_MAJ(qdisc->handle) >> 16, TC_H_MIN(qdisc->handle),
+                       TC_H_MAJ(qdisc->parent) >> 16, TC_H_MIN(qdisc->parent),
+                       strna(qdisc_get_tca_kind(qdisc)));
+}
+
+int link_find_qdisc(Link *link, uint32_t handle, uint32_t parent, const char *kind, QDisc **ret) {
+        QDisc *qdisc;
+
+        assert(link);
+
+        handle = TC_H_MAJ(handle);
+
+        SET_FOREACH(qdisc, link->qdiscs) {
+                if (qdisc->handle != handle)
+                        continue;
+
+                if (qdisc->parent != parent)
+                        continue;
+
+                if (qdisc->source == NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
+
+                if (!qdisc_exists(qdisc))
+                        continue;
+
+                if (kind && !streq_ptr(kind, qdisc_get_tca_kind(qdisc)))
+                        continue;
+
+                if (ret)
+                        *ret = qdisc;
+                return 0;
+        }
+
+        return -ENOENT;
+}
+
+static int qdisc_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, QDisc *qdisc) {
+        int r;
+
+        assert(m);
+        assert(link);
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
@@ -173,62 +315,223 @@
         return 1;
 }
 
-int qdisc_configure(Link *link, QDisc *qdisc) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int qdisc_configure(QDisc *qdisc, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(qdisc);
         assert(link);
         assert(link->manager);
         assert(link->manager->rtnl);
         assert(link->ifindex > 0);
+        assert(req);
 
-        r = sd_rtnl_message_new_qdisc(link->manager->rtnl, &req, RTM_NEWQDISC, qdisc->family, link->ifindex);
+        log_qdisc_debug(qdisc, link, "Configuring");
+
+        r = sd_rtnl_message_new_traffic_control(link->manager->rtnl, &m, RTM_NEWQDISC,
+                                                link->ifindex, qdisc->handle, qdisc->parent);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not create RTM_NEWQDISC message: %m");
+                return r;
 
-        r = sd_rtnl_message_set_qdisc_parent(req, qdisc->parent);
+        r = sd_netlink_message_append_string(m, TCA_KIND, qdisc_get_tca_kind(qdisc));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not create tcm_parent message: %m");
+                return r;
 
-        if (qdisc->handle != TC_H_UNSPEC) {
-                r = sd_rtnl_message_set_qdisc_handle(req, qdisc->handle);
+        if (QDISC_VTABLE(qdisc) && QDISC_VTABLE(qdisc)->fill_message) {
+                r = QDISC_VTABLE(qdisc)->fill_message(link, qdisc, m);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set tcm_handle message: %m");
+                        return r;
         }
 
-        if (QDISC_VTABLE(qdisc)) {
-                if (QDISC_VTABLE(qdisc)->fill_tca_kind) {
-                        r = QDISC_VTABLE(qdisc)->fill_tca_kind(link, qdisc, req);
-                        if (r < 0)
-                                return r;
-                } else {
-                        r = sd_netlink_message_append_string(req, TCA_KIND, QDISC_VTABLE(qdisc)->tca_kind);
-                        if (r < 0)
-                                return log_link_error_errno(link, r, "Could not append TCA_KIND attribute: %m");
-                }
-
-                if (QDISC_VTABLE(qdisc)->fill_message) {
-                        r = QDISC_VTABLE(qdisc)->fill_message(link, qdisc, req);
-                        if (r < 0)
-                                return r;
-                }
-        } else {
-                r = sd_netlink_message_append_string(req, TCA_KIND, qdisc->tca_kind);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_KIND attribute: %m");
-        }
-
-        r = netlink_call_async(link->manager->rtnl, NULL, req, qdisc_handler, link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-        link->tc_messages++;
-
-        return 0;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-int qdisc_section_verify(QDisc *qdisc, bool *has_root, bool *has_clsact) {
+static bool qdisc_is_ready_to_configure(QDisc *qdisc, Link *link) {
+        assert(qdisc);
+        assert(link);
+
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return false;
+
+        /* TC_H_CLSACT == TC_H_INGRESS */
+        if (!IN_SET(qdisc->parent, TC_H_ROOT, TC_H_CLSACT) &&
+            link_find_tclass(link, qdisc->parent, NULL) < 0)
+                return false;
+
+        if (QDISC_VTABLE(qdisc) &&
+            QDISC_VTABLE(qdisc)->is_ready &&
+            QDISC_VTABLE(qdisc)->is_ready(qdisc, link) <= 0)
+                return false;
+
+        return true;
+}
+
+static int qdisc_process_request(Request *req, Link *link, QDisc *qdisc) {
+        int r;
+
+        assert(req);
+        assert(link);
+        assert(qdisc);
+
+        if (!qdisc_is_ready_to_configure(qdisc, link))
+                return 0;
+
+        r = qdisc_configure(qdisc, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure QDisc: %m");
+
+        qdisc_enter_configuring(qdisc);
+        return 1;
+}
+
+int link_request_qdisc(Link *link, QDisc *qdisc) {
+        QDisc *existing;
+        int r;
+
+        assert(link);
+        assert(qdisc);
+
+        if (qdisc_get(link, qdisc, &existing) < 0) {
+                _cleanup_(qdisc_freep) QDisc *tmp = NULL;
+
+                r = qdisc_dup(qdisc, &tmp);
+                if (r < 0)
+                        return log_oom();
+
+                r = qdisc_add(link, tmp);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to store QDisc: %m");
+
+                existing = TAKE_PTR(tmp);
+        } else
+                existing->source = qdisc->source;
+
+        log_qdisc_debug(existing, link, "Requesting");
+        r = link_queue_request_safe(link, REQUEST_TYPE_TC_QDISC,
+                                    existing, NULL,
+                                    qdisc_hash_func,
+                                    qdisc_compare_func,
+                                    qdisc_process_request,
+                                    &link->tc_messages,
+                                    qdisc_handler,
+                                    NULL);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to request QDisc: %m");
+        if (r == 0)
+                return 0;
+
+        qdisc_enter_requesting(existing);
+        return 1;
+}
+
+int manager_rtnl_process_qdisc(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
+        _cleanup_(qdisc_freep) QDisc *tmp = NULL;
+        QDisc *qdisc = NULL;
+        Link *link;
+        uint16_t type;
+        int ifindex, r;
+
+        assert(rtnl);
+        assert(message);
+        assert(m);
+
+        if (sd_netlink_message_is_error(message)) {
+                r = sd_netlink_message_get_errno(message);
+                if (r < 0)
+                        log_message_warning_errno(message, r, "rtnl: failed to receive QDisc message, ignoring");
+
+                return 0;
+        }
+
+        r = sd_netlink_message_get_type(message, &type);
+        if (r < 0) {
+                log_warning_errno(r, "rtnl: could not get message type, ignoring: %m");
+                return 0;
+        } else if (!IN_SET(type, RTM_NEWQDISC, RTM_DELQDISC)) {
+                log_warning("rtnl: received unexpected message type %u when processing QDisc, ignoring.", type);
+                return 0;
+        }
+
+        r = sd_rtnl_message_traffic_control_get_ifindex(message, &ifindex);
+        if (r < 0) {
+                log_warning_errno(r, "rtnl: could not get ifindex from message, ignoring: %m");
+                return 0;
+        } else if (ifindex <= 0) {
+                log_warning("rtnl: received QDisc message with invalid ifindex %d, ignoring.", ifindex);
+                return 0;
+        }
+
+        if (link_get_by_index(m, ifindex, &link) < 0) {
+                if (!m->enumerating)
+                        log_warning("rtnl: received QDisc for link '%d' we don't know about, ignoring.", ifindex);
+                return 0;
+        }
+
+        r = qdisc_new(_QDISC_KIND_INVALID, &tmp);
+        if (r < 0)
+                return log_oom();
+
+        r = sd_rtnl_message_traffic_control_get_handle(message, &tmp->handle);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "rtnl: received QDisc message without handle, ignoring: %m");
+                return 0;
+        }
+
+        r = sd_rtnl_message_traffic_control_get_parent(message, &tmp->parent);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "rtnl: received QDisc message without parent, ignoring: %m");
+                return 0;
+        }
+
+        r = sd_netlink_message_read_string_strdup(message, TCA_KIND, &tmp->tca_kind);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "rtnl: received QDisc message without kind, ignoring: %m");
+                return 0;
+        }
+
+        (void) qdisc_get(link, tmp, &qdisc);
+
+        switch (type) {
+        case RTM_NEWQDISC:
+                if (qdisc) {
+                        qdisc_enter_configured(qdisc);
+                        log_qdisc_debug(qdisc, link, "Received remembered");
+                } else {
+                        qdisc_enter_configured(tmp);
+                        log_qdisc_debug(tmp, link, "Received new");
+
+                        r = qdisc_add(link, tmp);
+                        if (r < 0) {
+                                log_link_warning_errno(link, r, "Failed to remember QDisc, ignoring: %m");
+                                return 0;
+                        }
+
+                        qdisc = TAKE_PTR(tmp);
+                }
+
+                break;
+
+        case RTM_DELQDISC:
+                if (qdisc) {
+                        qdisc_enter_removed(qdisc);
+                        if (qdisc->state == 0) {
+                                log_qdisc_debug(qdisc, link, "Forgetting");
+                                qdisc_free(qdisc);
+                        } else
+                                log_qdisc_debug(qdisc, link, "Removed");
+                } else
+                        log_qdisc_debug(tmp, link, "Kernel removed unknown");
+
+                break;
+
+        default:
+                assert_not_reached();
+        }
+
+        return 1;
+}
+
+static int qdisc_section_verify(QDisc *qdisc, bool *has_root, bool *has_clsact) {
         int r;
 
         assert(qdisc);
@@ -263,6 +566,17 @@
         return 0;
 }
 
+void network_drop_invalid_qdisc(Network *network) {
+        bool has_root = false, has_clsact = false;
+        QDisc *qdisc;
+
+        assert(network);
+
+        HASHMAP_FOREACH(qdisc, network->qdiscs_by_section)
+                if (qdisc_section_verify(qdisc, &has_root, &has_clsact) < 0)
+                        qdisc_free(qdisc);
+}
+
 int config_parse_qdisc_parent(
                 const char *unit,
                 const char *filename,
@@ -276,13 +590,12 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(ltype, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -293,11 +606,9 @@
                 return 0;
         }
 
-        if (streq(rvalue, "root")) {
+        if (streq(rvalue, "root"))
                 qdisc->parent = TC_H_ROOT;
-                if (qdisc->handle == 0)
-                        qdisc->handle = TC_H_UNSPEC;
-        } else if (streq(rvalue, "clsact")) {
+        else if (streq(rvalue, "clsact")) {
                 qdisc->parent = TC_H_CLSACT;
                 qdisc->handle = TC_H_MAKE(TC_H_CLSACT, 0);
         } else if (streq(rvalue, "ingress")) {
@@ -338,14 +649,13 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint16_t n;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(ltype, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/qdisc.h b/src/network/tc/qdisc.h
index bf2df14..155e2ad 100644
--- a/src/network/tc/qdisc.h
+++ b/src/network/tc/qdisc.h
@@ -3,10 +3,11 @@
 #pragma once
 
 #include "conf-parser.h"
-#include "networkd-link.h"
-#include "networkd-network.h"
 #include "networkd-util.h"
-#include "tc.h"
+
+typedef struct Link Link;
+typedef struct Manager Manager;
+typedef struct Network Network;
 
 typedef enum QDiscKind {
         QDISC_KIND_BFIFO,
@@ -35,12 +36,12 @@
 } QDiscKind;
 
 typedef struct QDisc {
-        TrafficControl meta;
-
-        NetworkConfigSection *section;
+        Link *link;
         Network *network;
+        ConfigSection *section;
+        NetworkConfigSource source;
+        NetworkConfigState state;
 
-        int family;
         uint32_t handle;
         uint32_t parent;
 
@@ -53,9 +54,9 @@
         const char *tca_kind;
         /* called in qdisc_new() */
         int (*init)(QDisc *qdisc);
-        int (*fill_tca_kind)(Link *link, QDisc *qdisc, sd_netlink_message *m);
         int (*fill_message)(Link *link, QDisc *qdisc, sd_netlink_message *m);
         int (*verify)(QDisc *qdisc);
+        int (*is_ready)(QDisc *qdisc, Link *link);
 } QDiscVTable;
 
 extern const QDiscVTable * const qdisc_vtable[_QDISC_KIND_MAX];
@@ -71,18 +72,20 @@
                 return (MixedCase*) q;                                    \
         }
 
-/* For casting the various qdisc kinds into a qdisc */
-#define QDISC(q) (&(q)->meta)
+DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(QDisc, qdisc);
 
 QDisc* qdisc_free(QDisc *qdisc);
 int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, unsigned section_line, QDisc **ret);
 
-int qdisc_configure(Link *link, QDisc *qdisc);
-int qdisc_section_verify(QDisc *qdisc, bool *has_root, bool *has_clsact);
+int link_find_qdisc(Link *link, uint32_t handle, uint32_t parent, const char *kind, QDisc **qdisc);
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(QDisc, qdisc_free);
+int link_request_qdisc(Link *link, QDisc *qdisc);
 
-DEFINE_TC_CAST(QDISC, QDisc);
+void network_drop_invalid_qdisc(Network *network);
+
+int manager_rtnl_process_qdisc(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
+
+DEFINE_SECTION_CLEANUP_FUNCTIONS(QDisc, qdisc_free);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_parent);
 CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_handle);
diff --git a/src/network/tc/qfq.c b/src/network/tc/qfq.c
index d2e7b87..7702e6f 100644
--- a/src/network/tc/qfq.c
+++ b/src/network/tc/qfq.c
@@ -25,27 +25,28 @@
         assert(tclass);
         assert(req);
 
-        qfq = TCLASS_TO_QFQ(tclass);
+        assert_se(qfq = TCLASS_TO_QFQ(tclass));
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "qfq");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
         if (qfq->weight > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_QFQ_WEIGHT, qfq->weight);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_QFQ_WEIGHT attribute: %m");
+                        return r;
         }
 
         if (qfq->max_packet > 0) {
                 r = sd_netlink_message_append_u32(req, TCA_QFQ_LMAX, qfq->max_packet);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_QFQ_LMAX attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
+
         return 0;
 }
 
@@ -63,14 +64,13 @@
 
         _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
         QuickFairQueueingClass *qfq;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint32_t v;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = tclass_new_static(TCLASS_KIND_QFQ, network, filename, section_line, &tclass);
         if (r == -ENOMEM)
@@ -124,14 +124,13 @@
 
         _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
         QuickFairQueueingClass *qfq;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         uint64_t v;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = tclass_new_static(TCLASS_KIND_QFQ, network, filename, section_line, &tclass);
         if (r == -ENOMEM)
diff --git a/src/network/tc/sfb.c b/src/network/tc/sfb.c
index a4ca488..861c5fe 100644
--- a/src/network/tc/sfb.c
+++ b/src/network/tc/sfb.c
@@ -13,7 +13,15 @@
 
 static int stochastic_fair_blue_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
         StochasticFairBlue *sfb;
-        struct tc_sfb_qopt opt = {
+        int r;
+
+        assert(link);
+        assert(qdisc);
+        assert(req);
+
+        assert_se(sfb = SFB(qdisc));
+
+        const struct tc_sfb_qopt opt = {
             .rehash_interval = 600*1000,
             .warmup_time = 60*1000,
             .penalty_rate = 10,
@@ -22,28 +30,20 @@
             .decrement = (SFB_MAX_PROB + 10000) / 20000,
             .max = 25,
             .bin_size = 20,
+            .limit = sfb->packet_limit,
         };
-        int r;
-
-        assert(link);
-        assert(qdisc);
-        assert(req);
-
-        sfb = SFB(qdisc);
-
-        opt.limit = sfb->packet_limit;
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "sfb");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
-        r = sd_netlink_message_append_data(req, TCA_SFB_PARMS, &opt, sizeof(struct tc_sfb_qopt));
+        r = sd_netlink_message_append_data(req, TCA_SFB_PARMS, &opt, sizeof(opt));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_SFB_PARMS attribute: %m");
+                return r;
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -62,13 +62,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         StochasticFairBlue *sfb;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_SFB, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/sfq.c b/src/network/tc/sfq.c
index f67ffc1..92dbae1 100644
--- a/src/network/tc/sfq.c
+++ b/src/network/tc/sfq.c
@@ -13,20 +13,21 @@
 
 static int stochastic_fairness_queueing_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
         StochasticFairnessQueueing *sfq;
-        struct tc_sfq_qopt_v1 opt = {};
         int r;
 
         assert(link);
         assert(qdisc);
         assert(req);
 
-        sfq = SFQ(qdisc);
+        assert_se(sfq = SFQ(qdisc));
 
-        opt.v0.perturb_period = sfq->perturb_period / USEC_PER_SEC;
+        const struct tc_sfq_qopt_v1 opt = {
+                .v0.perturb_period = sfq->perturb_period / USEC_PER_SEC,
+        };
 
-        r = sd_netlink_message_append_data(req, TCA_OPTIONS, &opt, sizeof(struct tc_sfq_qopt_v1));
+        r = sd_netlink_message_append_data(req, TCA_OPTIONS, &opt, sizeof(opt));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_OPTIONS attribute: %m");
+                return r;
 
         return 0;
 }
@@ -45,13 +46,12 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         StochasticFairnessQueueing *sfq;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_SFQ, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/tbf.c b/src/network/tc/tbf.c
index 50d14a5..d434490 100644
--- a/src/network/tc/tbf.c
+++ b/src/network/tc/tbf.c
@@ -17,7 +17,6 @@
 
 static int token_bucket_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
         uint32_t rtab[256], ptab[256];
-        struct tc_tbf_qopt opt = {};
         TokenBucketFilter *tbf;
         int r;
 
@@ -25,10 +24,13 @@
         assert(qdisc);
         assert(req);
 
-        tbf = TBF(qdisc);
+        assert_se(tbf = TBF(qdisc));
 
-        opt.rate.rate = tbf->rate >= (1ULL << 32) ? ~0U : tbf->rate;
-        opt.peakrate.rate = tbf->peak_rate >= (1ULL << 32) ? ~0U : tbf->peak_rate;
+        struct tc_tbf_qopt opt = {
+                .rate.rate = tbf->rate >= (1ULL << 32) ? ~0U : tbf->rate,
+                .peakrate.rate = tbf->peak_rate >= (1ULL << 32) ? ~0U : tbf->peak_rate,
+                .rate.mpu = tbf->mpu,
+        };
 
         if (tbf->limit > 0)
                 opt.limit = tbf->limit;
@@ -43,69 +45,67 @@
                 opt.limit = lim;
         }
 
-        opt.rate.mpu = tbf->mpu;
-
         r = tc_fill_ratespec_and_table(&opt.rate, rtab, tbf->mtu);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to calculate ratespec: %m");
+                return log_link_debug_errno(link, r, "Failed to calculate ratespec: %m");
 
         r = tc_transmit_time(opt.rate.rate, tbf->burst, &opt.buffer);
         if (r < 0)
-                return log_link_error_errno(link, r, "Failed to calculate buffer size: %m");
+                return log_link_debug_errno(link, r, "Failed to calculate buffer size: %m");
 
         if (opt.peakrate.rate > 0) {
                 opt.peakrate.mpu = tbf->mpu;
 
                 r = tc_fill_ratespec_and_table(&opt.peakrate, ptab, tbf->mtu);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to calculate ratespec: %m");
+                        return log_link_debug_errno(link, r, "Failed to calculate ratespec: %m");
 
                 r = tc_transmit_time(opt.peakrate.rate, tbf->mtu, &opt.mtu);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to calculate mtu size: %m");
+                        return log_link_debug_errno(link, r, "Failed to calculate mtu size: %m");
         }
 
         r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "tbf");
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+                return r;
 
-        r = sd_netlink_message_append_data(req, TCA_TBF_PARMS, &opt, sizeof(struct tc_tbf_qopt));
+        r = sd_netlink_message_append_data(req, TCA_TBF_PARMS, &opt, sizeof(opt));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_TBF_PARMS attribute: %m");
+                return r;
 
         r = sd_netlink_message_append_data(req, TCA_TBF_BURST, &tbf->burst, sizeof(tbf->burst));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_TBF_BURST attribute: %m");
+                return r;
 
         if (tbf->rate >= (1ULL << 32)) {
                 r = sd_netlink_message_append_u64(req, TCA_TBF_RATE64, tbf->rate);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_TBF_RATE64 attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_append_data(req, TCA_TBF_RTAB, rtab, sizeof(rtab));
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_TBF_RTAB attribute: %m");
+                return r;
 
         if (opt.peakrate.rate > 0) {
                 if (tbf->peak_rate >= (1ULL << 32)) {
                         r = sd_netlink_message_append_u64(req, TCA_TBF_PRATE64, tbf->peak_rate);
                         if (r < 0)
-                                return log_link_error_errno(link, r, "Could not append TCA_TBF_PRATE64 attribute: %m");
+                                return r;
                 }
 
                 r = sd_netlink_message_append_u32(req, TCA_TBF_PBURST, tbf->mtu);
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_TBF_PBURST attribute: %m");
+                        return r;
 
                 r = sd_netlink_message_append_data(req, TCA_TBF_PTAB, ptab, sizeof(ptab));
                 if (r < 0)
-                        return log_link_error_errno(link, r, "Could not append TCA_TBF_PTAB attribute: %m");
+                        return r;
         }
 
         r = sd_netlink_message_close_container(req);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+                return r;
 
         return 0;
 }
@@ -123,7 +123,7 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         TokenBucketFilter *tbf;
         uint64_t k;
         int r;
@@ -131,7 +131,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_TBF, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -154,7 +153,7 @@
                 else if (streq(lvalue, "MPUBytes"))
                         tbf->mpu = 0;
                 else
-                        assert_not_reached("unknown lvalue");
+                        assert_not_reached();
 
                 TAKE_PTR(qdisc);
                 return 0;
@@ -177,7 +176,7 @@
         else if (streq(lvalue, "MTUBytes"))
                 tbf->mtu = k;
         else
-                assert_not_reached("unknown lvalue");
+                assert_not_reached();
 
         TAKE_PTR(qdisc);
 
@@ -197,7 +196,7 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         TokenBucketFilter *tbf;
         uint64_t k, *p;
         int r;
@@ -205,7 +204,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_TBF, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
@@ -222,7 +220,7 @@
         else if (streq(lvalue, "PeakRate"))
                 p = &tbf->peak_rate;
         else
-                assert_not_reached("unknown lvalue");
+                assert_not_reached();
 
         if (isempty(rvalue)) {
                 *p = 0;
@@ -259,7 +257,7 @@
                 void *userdata) {
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         TokenBucketFilter *tbf;
         usec_t u;
         int r;
@@ -267,7 +265,6 @@
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_TBF, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/tc/tc.c b/src/network/tc/tc.c
index 0cd46cf..8a1c5b3 100644
--- a/src/network/tc/tc.c
+++ b/src/network/tc/tc.c
@@ -1,88 +1,41 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "macro.h"
+#include "networkd-link.h"
+#include "networkd-network.h"
 #include "qdisc.h"
 #include "tc.h"
 #include "tclass.h"
 
-void traffic_control_free(TrafficControl *tc) {
-        if (!tc)
-                return;
-
-        switch (tc->kind) {
-        case TC_KIND_QDISC:
-                qdisc_free(TC_TO_QDISC(tc));
-                break;
-        case TC_KIND_TCLASS:
-                tclass_free(TC_TO_TCLASS(tc));
-                break;
-        default:
-                assert_not_reached("Invalid traffic control type");
-        }
-}
-
-static int traffic_control_configure(Link *link, TrafficControl *tc) {
-        assert(link);
-        assert(tc);
-
-        switch(tc->kind) {
-        case TC_KIND_QDISC:
-                return qdisc_configure(link, TC_TO_QDISC(tc));
-        case TC_KIND_TCLASS:
-                return tclass_configure(link, TC_TO_TCLASS(tc));
-        default:
-                assert_not_reached("Invalid traffic control type");
-        }
-}
-
-int link_configure_traffic_control(Link *link) {
-        TrafficControl *tc;
+int link_request_traffic_control(Link *link) {
+        TClass *tclass;
+        QDisc *qdisc;
         int r;
 
         assert(link);
         assert(link->network);
 
-        if (link->tc_messages != 0) {
-                log_link_debug(link, "Traffic control is configuring.");
-                return 0;
-        }
-
         link->tc_configured = false;
 
-        ORDERED_HASHMAP_FOREACH(tc, link->network->tc_by_section) {
-                r = traffic_control_configure(link, tc);
+        HASHMAP_FOREACH(qdisc, link->network->qdiscs_by_section) {
+                r = link_request_qdisc(link, qdisc);
                 if (r < 0)
                         return r;
         }
 
-        if (link->tc_messages == 0)
+        HASHMAP_FOREACH(tclass, link->network->tclasses_by_section) {
+                r = link_request_tclass(link, tclass);
+                if (r < 0)
+                        return r;
+        }
+
+        if (link->tc_messages == 0) {
                 link->tc_configured = true;
-        else
-                log_link_debug(link, "Configuring traffic control");
+                link_check_ready(link);
+        } else {
+                log_link_debug(link, "Setting traffic control");
+                link_set_state(link, LINK_STATE_CONFIGURING);
+        }
 
         return 0;
 }
-
-static int traffic_control_section_verify(TrafficControl *tc, bool *qdisc_has_root, bool *qdisc_has_clsact) {
-        assert(tc);
-
-        switch(tc->kind) {
-        case TC_KIND_QDISC:
-                return qdisc_section_verify(TC_TO_QDISC(tc), qdisc_has_root, qdisc_has_clsact);
-        case TC_KIND_TCLASS:
-                return tclass_section_verify(TC_TO_TCLASS(tc));
-        default:
-                assert_not_reached("Invalid traffic control type");
-        }
-}
-
-void network_drop_invalid_traffic_control(Network *network) {
-        bool has_root = false, has_clsact = false;
-        TrafficControl *tc;
-
-        assert(network);
-
-        ORDERED_HASHMAP_FOREACH(tc, network->tc_by_section)
-                if (traffic_control_section_verify(tc, &has_root, &has_clsact) < 0)
-                        traffic_control_free(tc);
-}
diff --git a/src/network/tc/tc.h b/src/network/tc/tc.h
index badd522..6226578 100644
--- a/src/network/tc/tc.h
+++ b/src/network/tc/tc.h
@@ -1,32 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "networkd-link.h"
+typedef struct Link Link;
 
-typedef enum TrafficControlKind {
-        TC_KIND_QDISC,
-        TC_KIND_TCLASS,
-        TC_KIND_FILTER,
-        _TC_KIND_MAX,
-        _TC_KIND_INVALID = -EINVAL,
-} TrafficControlKind;
-
-typedef struct TrafficControl {
-        TrafficControlKind kind;
-} TrafficControl;
-
-/* For casting a tc into the various tc kinds */
-#define DEFINE_TC_CAST(UPPERCASE, MixedCase)                           \
-        static inline MixedCase* TC_TO_##UPPERCASE(TrafficControl *tc) {                    \
-                if (_unlikely_(!tc || tc->kind != TC_KIND_##UPPERCASE))  \
-                        return NULL;                                      \
-                                                                          \
-                return (MixedCase*) tc;                                    \
-        }
-
-/* For casting the various tc kinds into a tc */
-#define TC(tc) (&(tc)->meta)
-
-void traffic_control_free(TrafficControl *tc);
-int link_configure_traffic_control(Link *link);
-void network_drop_invalid_traffic_control(Network *network);
+int link_request_traffic_control(Link *link);
diff --git a/src/network/tc/tclass.c b/src/network/tc/tclass.c
index d814599..0452cc9 100644
--- a/src/network/tc/tclass.c
+++ b/src/network/tc/tclass.c
@@ -7,7 +7,10 @@
 #include "conf-parser.h"
 #include "in-addr-util.h"
 #include "netlink-util.h"
+#include "networkd-link.h"
 #include "networkd-manager.h"
+#include "networkd-network.h"
+#include "networkd-queue.h"
 #include "parse-util.h"
 #include "set.h"
 #include "string-util.h"
@@ -25,18 +28,29 @@
         _cleanup_(tclass_freep) TClass *tclass = NULL;
         int r;
 
-        tclass = malloc0(tclass_vtable[kind]->object_size);
-        if (!tclass)
-                return -ENOMEM;
+        if (kind == _TCLASS_KIND_INVALID) {
+                tclass = new(TClass, 1);
+                if (!tclass)
+                        return -ENOMEM;
 
-        tclass->meta.kind = TC_KIND_TCLASS,
-        tclass->parent = TC_H_ROOT;
-        tclass->kind = kind;
+                *tclass = (TClass) {
+                        .parent = TC_H_ROOT,
+                        .kind = kind,
+                };
+        } else {
+                assert(kind >= 0 && kind < _TCLASS_KIND_MAX);
+                tclass = malloc0(tclass_vtable[kind]->object_size);
+                if (!tclass)
+                        return -ENOMEM;
 
-        if (TCLASS_VTABLE(tclass)->init) {
-                r = TCLASS_VTABLE(tclass)->init(tclass);
-                if (r < 0)
-                        return r;
+                tclass->parent = TC_H_ROOT;
+                tclass->kind = kind;
+
+                if (TCLASS_VTABLE(tclass)->init) {
+                        r = TCLASS_VTABLE(tclass)->init(tclass);
+                        if (r < 0)
+                                return r;
+                }
         }
 
         *ret = TAKE_PTR(tclass);
@@ -45,9 +59,9 @@
 }
 
 int tclass_new_static(TClassKind kind, Network *network, const char *filename, unsigned section_line, TClass **ret) {
-        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
         _cleanup_(tclass_freep) TClass *tclass = NULL;
-        TrafficControl *existing;
+        TClass *existing;
         int r;
 
         assert(network);
@@ -55,23 +69,16 @@
         assert(filename);
         assert(section_line > 0);
 
-        r = network_config_section_new(filename, section_line, &n);
+        r = config_section_new(filename, section_line, &n);
         if (r < 0)
                 return r;
 
-        existing = ordered_hashmap_get(network->tc_by_section, n);
+        existing = hashmap_get(network->tclasses_by_section, n);
         if (existing) {
-                TClass *t;
-
-                if (existing->kind != TC_KIND_TCLASS)
+                if (existing->kind != kind)
                         return -EINVAL;
 
-                t = TC_TO_TCLASS(existing);
-
-                if (t->kind != kind)
-                        return -EINVAL;
-
-                *ret = t;
+                *ret = existing;
                 return 0;
         }
 
@@ -81,8 +88,9 @@
 
         tclass->network = network;
         tclass->section = TAKE_PTR(n);
+        tclass->source = NETWORK_CONFIG_SOURCE_STATIC;
 
-        r = ordered_hashmap_ensure_put(&network->tc_by_section, &network_config_hash_ops, tclass->section, tclass);
+        r = hashmap_ensure_put(&network->tclasses_by_section, &config_section_hash_ops, tclass->section, tclass);
         if (r < 0)
                 return r;
 
@@ -95,22 +103,163 @@
                 return NULL;
 
         if (tclass->network && tclass->section)
-                ordered_hashmap_remove(tclass->network->tc_by_section, tclass->section);
+                hashmap_remove(tclass->network->tclasses_by_section, tclass->section);
 
-        network_config_section_free(tclass->section);
+        config_section_free(tclass->section);
 
+        if (tclass->link)
+                set_remove(tclass->link->tclasses, tclass);
+
+        free(tclass->tca_kind);
         return mfree(tclass);
 }
 
-static int tclass_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static const char *tclass_get_tca_kind(const TClass *tclass) {
+        assert(tclass);
+
+        return (TCLASS_VTABLE(tclass) && TCLASS_VTABLE(tclass)->tca_kind) ?
+                TCLASS_VTABLE(tclass)->tca_kind : tclass->tca_kind;
+}
+
+static void tclass_hash_func(const TClass *tclass, struct siphash *state) {
+        assert(tclass);
+        assert(state);
+
+        siphash24_compress(&tclass->classid, sizeof(tclass->classid), state);
+        siphash24_compress(&tclass->parent, sizeof(tclass->parent), state);
+        siphash24_compress_string(tclass_get_tca_kind(tclass), state);
+}
+
+static int tclass_compare_func(const TClass *a, const TClass *b) {
+        int r;
+
+        assert(a);
+        assert(b);
+
+        r = CMP(a->classid, b->classid);
+        if (r != 0)
+                return r;
+
+        r = CMP(a->parent, b->parent);
+        if (r != 0)
+                return r;
+
+        return strcmp_ptr(tclass_get_tca_kind(a), tclass_get_tca_kind(b));
+}
+
+DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+        tclass_hash_ops,
+        TClass,
+        tclass_hash_func,
+        tclass_compare_func,
+        tclass_free);
+
+static int tclass_get(Link *link, const TClass *in, TClass **ret) {
+        TClass *existing;
+
+        assert(link);
+        assert(in);
+
+        existing = set_get(link->tclasses, in);
+        if (!existing)
+                return -ENOENT;
+
+        if (ret)
+                *ret = existing;
+        return 0;
+}
+
+static int tclass_add(Link *link, TClass *tclass) {
         int r;
 
         assert(link);
-        assert(link->tc_messages > 0);
-        link->tc_messages--;
+        assert(tclass);
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
+        r = set_ensure_put(&link->tclasses, &tclass_hash_ops, tclass);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return -EEXIST;
+
+        tclass->link = link;
+        return 0;
+}
+
+static int tclass_dup(const TClass *src, TClass **ret) {
+        _cleanup_(tclass_freep) TClass *dst = NULL;
+
+        assert(src);
+        assert(ret);
+
+        if (TCLASS_VTABLE(src))
+                dst = memdup(src, TCLASS_VTABLE(src)->object_size);
+        else
+                dst = newdup(TClass, src, 1);
+        if (!dst)
+                return -ENOMEM;
+
+        /* clear all pointers */
+        dst->network = NULL;
+        dst->section = NULL;
+        dst->link = NULL;
+        dst->tca_kind = NULL;
+
+        if (src->tca_kind) {
+                dst->tca_kind = strdup(src->tca_kind);
+                if (!dst->tca_kind)
+                        return -ENOMEM;
+        }
+
+        *ret = TAKE_PTR(dst);
+        return 0;
+}
+
+int link_find_tclass(Link *link, uint32_t classid, TClass **ret) {
+        TClass *tclass;
+
+        assert(link);
+
+        SET_FOREACH(tclass, link->tclasses) {
+                if (tclass->classid != classid)
+                        continue;
+
+                if (tclass->source == NETWORK_CONFIG_SOURCE_FOREIGN)
+                        continue;
+
+                if (!tclass_exists(tclass))
+                        continue;
+
+                if (ret)
+                        *ret = tclass;
+                return 0;
+        }
+
+        return -ENOENT;
+}
+
+static void log_tclass_debug(TClass *tclass, Link *link, const char *str) {
+        _cleanup_free_ char *state = NULL;
+
+        assert(tclass);
+        assert(str);
+
+        if (!DEBUG_LOGGING)
+                return;
+
+        (void) network_config_state_to_string_alloc(tclass->state, &state);
+
+        log_link_debug(link, "%s %s TClass (%s): classid=%"PRIx32":%"PRIx32", parent=%"PRIx32":%"PRIx32", kind=%s",
+                       str, strna(network_config_source_to_string(tclass->source)), strna(state),
+                       TC_H_MAJ(tclass->classid) >> 16, TC_H_MIN(tclass->classid),
+                       TC_H_MAJ(tclass->parent) >> 16, TC_H_MIN(tclass->parent),
+                       strna(tclass_get_tca_kind(tclass)));
+}
+
+static int tclass_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, TClass *tclass) {
+        int r;
+
+        assert(m);
+        assert(link);
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
@@ -128,50 +277,213 @@
         return 1;
 }
 
-int tclass_configure(Link *link, TClass *tclass) {
-        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int tclass_configure(TClass *tclass, Link *link, Request *req) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(tclass);
         assert(link);
         assert(link->manager);
         assert(link->manager->rtnl);
         assert(link->ifindex > 0);
+        assert(req);
 
-        r = sd_rtnl_message_new_tclass(link->manager->rtnl, &req, RTM_NEWTCLASS, AF_UNSPEC, link->ifindex);
+        log_tclass_debug(tclass, link, "Configuring");
+
+        r = sd_rtnl_message_new_traffic_control(link->manager->rtnl, &m, RTM_NEWTCLASS,
+                                                link->ifindex, tclass->classid, tclass->parent);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not create RTM_NEWTCLASS message: %m");
+                return r;
 
-        r = sd_rtnl_message_set_tclass_parent(req, tclass->parent);
+        r = sd_netlink_message_append_string(m, TCA_KIND, TCLASS_VTABLE(tclass)->tca_kind);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not create tcm_parent message: %m");
-
-        if (tclass->classid != TC_H_UNSPEC) {
-                r = sd_rtnl_message_set_tclass_handle(req, tclass->classid);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set tcm_handle message: %m");
-        }
-
-        r = sd_netlink_message_append_string(req, TCA_KIND, TCLASS_VTABLE(tclass)->tca_kind);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_KIND attribute: %m");
+                return r;
 
         if (TCLASS_VTABLE(tclass)->fill_message) {
-                r = TCLASS_VTABLE(tclass)->fill_message(link, tclass, req);
+                r = TCLASS_VTABLE(tclass)->fill_message(link, tclass, m);
                 if (r < 0)
                         return r;
         }
 
-        r = netlink_call_async(link->manager->rtnl, NULL, req, tclass_handler, link_netlink_destroy_callback, link);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
-
-        link_ref(link);
-        link->tc_messages++;
-
-        return 0;
+        return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-int tclass_section_verify(TClass *tclass) {
+static bool tclass_is_ready_to_configure(TClass *tclass, Link *link) {
+        assert(tclass);
+        assert(link);
+
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
+                return false;
+
+        return link_find_qdisc(link, tclass->classid, tclass->parent, tclass_get_tca_kind(tclass), NULL) >= 0;
+}
+
+static int tclass_process_request(Request *req, Link *link, TClass *tclass) {
+        int r;
+
+        assert(req);
+        assert(link);
+        assert(tclass);
+
+        if (!tclass_is_ready_to_configure(tclass, link))
+                return 0;
+
+        r = tclass_configure(tclass, link, req);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to configure TClass: %m");
+
+        tclass_enter_configuring(tclass);
+        return 1;
+}
+
+int link_request_tclass(Link *link, TClass *tclass) {
+        TClass *existing;
+        int r;
+
+        assert(link);
+        assert(tclass);
+
+        if (tclass_get(link, tclass, &existing) < 0) {
+                _cleanup_(tclass_freep) TClass *tmp = NULL;
+
+                r = tclass_dup(tclass, &tmp);
+                if (r < 0)
+                        return log_oom();
+
+                r = tclass_add(link, tmp);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to store TClass: %m");
+
+                existing = TAKE_PTR(tmp);
+        } else
+                existing->source = tclass->source;
+
+        log_tclass_debug(existing, link, "Requesting");
+        r = link_queue_request_safe(link, REQUEST_TYPE_TC_CLASS,
+                                    existing, NULL,
+                                    tclass_hash_func,
+                                    tclass_compare_func,
+                                    tclass_process_request,
+                                    &link->tc_messages,
+                                    tclass_handler,
+                                    NULL);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to request TClass: %m");
+        if (r == 0)
+                return 0;
+
+        tclass_enter_requesting(existing);
+        return 1;
+}
+
+int manager_rtnl_process_tclass(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
+        _cleanup_(tclass_freep) TClass *tmp = NULL;
+        TClass *tclass = NULL;
+        Link *link;
+        uint16_t type;
+        int ifindex, r;
+
+        assert(rtnl);
+        assert(message);
+        assert(m);
+
+        if (sd_netlink_message_is_error(message)) {
+                r = sd_netlink_message_get_errno(message);
+                if (r < 0)
+                        log_message_warning_errno(message, r, "rtnl: failed to receive TClass message, ignoring");
+
+                return 0;
+        }
+
+        r = sd_netlink_message_get_type(message, &type);
+        if (r < 0) {
+                log_warning_errno(r, "rtnl: could not get message type, ignoring: %m");
+                return 0;
+        } else if (!IN_SET(type, RTM_NEWTCLASS, RTM_DELTCLASS)) {
+                log_warning("rtnl: received unexpected message type %u when processing TClass, ignoring.", type);
+                return 0;
+        }
+
+        r = sd_rtnl_message_traffic_control_get_ifindex(message, &ifindex);
+        if (r < 0) {
+                log_warning_errno(r, "rtnl: could not get ifindex from message, ignoring: %m");
+                return 0;
+        } else if (ifindex <= 0) {
+                log_warning("rtnl: received TClass message with invalid ifindex %d, ignoring.", ifindex);
+                return 0;
+        }
+
+        if (link_get_by_index(m, ifindex, &link) < 0) {
+                if (!m->enumerating)
+                        log_warning("rtnl: received TClass for link '%d' we don't know about, ignoring.", ifindex);
+                return 0;
+        }
+
+        r = tclass_new(_TCLASS_KIND_INVALID, &tmp);
+        if (r < 0)
+                return log_oom();
+
+        r = sd_rtnl_message_traffic_control_get_handle(message, &tmp->classid);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "rtnl: received TClass message without handle, ignoring: %m");
+                return 0;
+        }
+
+        r = sd_rtnl_message_traffic_control_get_parent(message, &tmp->parent);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "rtnl: received TClass message without parent, ignoring: %m");
+                return 0;
+        }
+
+        r = sd_netlink_message_read_string_strdup(message, TCA_KIND, &tmp->tca_kind);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "rtnl: received TClass message without kind, ignoring: %m");
+                return 0;
+        }
+
+        (void) tclass_get(link, tmp, &tclass);
+
+        switch (type) {
+        case RTM_NEWTCLASS:
+                if (tclass) {
+                        tclass_enter_configured(tclass);
+                        log_tclass_debug(tclass, link, "Received remembered");
+                } else {
+                        tclass_enter_configured(tmp);
+                        log_tclass_debug(tmp, link, "Received new");
+
+                        r = tclass_add(link, tmp);
+                        if (r < 0) {
+                                log_link_warning_errno(link, r, "Failed to remember TClass, ignoring: %m");
+                                return 0;
+                        }
+
+                        tclass = TAKE_PTR(tmp);
+                }
+
+                break;
+
+        case RTM_DELTCLASS:
+                if (tclass) {
+                        tclass_enter_removed(tclass);
+                        if (tclass->state == 0) {
+                                log_tclass_debug(tclass, link, "Forgetting");
+                                tclass_free(tclass);
+                        } else
+                                log_tclass_debug(tclass, link, "Removed");
+                } else
+                        log_tclass_debug(tmp, link, "Kernel removed unknown");
+
+                break;
+
+        default:
+                assert_not_reached();
+        }
+
+        return 1;
+}
+
+static int tclass_section_verify(TClass *tclass) {
         int r;
 
         assert(tclass);
@@ -188,6 +500,16 @@
         return 0;
 }
 
+void network_drop_invalid_tclass(Network *network) {
+        TClass *tclass;
+
+        assert(network);
+
+        HASHMAP_FOREACH(tclass, network->tclasses_by_section)
+                if (tclass_section_verify(tclass) < 0)
+                        tclass_free(tclass);
+}
+
 int config_parse_tclass_parent(
                 const char *unit,
                 const char *filename,
@@ -201,13 +523,12 @@
                 void *userdata) {
 
         _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = tclass_new_static(ltype, network, filename, section_line, &tclass);
         if (r == -ENOMEM)
@@ -248,13 +569,12 @@
                 void *userdata) {
 
         _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = tclass_new_static(ltype, network, filename, section_line, &tclass);
         if (r == -ENOMEM)
diff --git a/src/network/tc/tclass.h b/src/network/tc/tclass.h
index fc91789..606bb3f 100644
--- a/src/network/tc/tclass.h
+++ b/src/network/tc/tclass.h
@@ -3,10 +3,11 @@
 #pragma once
 
 #include "conf-parser.h"
-#include "networkd-link.h"
-#include "networkd-network.h"
 #include "networkd-util.h"
-#include "tc.h"
+
+typedef struct Link Link;
+typedef struct Manager Manager;
+typedef struct Network Network;
 
 typedef enum TClassKind {
         TCLASS_KIND_DRR,
@@ -17,15 +18,17 @@
 } TClassKind;
 
 typedef struct TClass {
-        TrafficControl meta;
-
-        NetworkConfigSection *section;
+        Link *link;
         Network *network;
+        ConfigSection *section;
+        NetworkConfigSource source;
+        NetworkConfigState state;
 
         uint32_t classid;
         uint32_t parent;
 
         TClassKind kind;
+        char *tca_kind;
 } TClass;
 
 typedef struct TClassVTable {
@@ -50,18 +53,20 @@
                 return (MixedCase*) t;                                    \
         }
 
-/* For casting the various tclass kinds into a tclass */
-#define TCLASS(t) (&(t)->meta)
+DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(TClass, tclass);
 
 TClass* tclass_free(TClass *tclass);
 int tclass_new_static(TClassKind kind, Network *network, const char *filename, unsigned section_line, TClass **ret);
 
-int tclass_configure(Link *link, TClass *tclass);
-int tclass_section_verify(TClass *tclass);
+int link_find_tclass(Link *link, uint32_t classid, TClass **ret);
 
-DEFINE_NETWORK_SECTION_FUNCTIONS(TClass, tclass_free);
+int link_request_tclass(Link *link, TClass *tclass);
 
-DEFINE_TC_CAST(TCLASS, TClass);
+void network_drop_invalid_tclass(Network *network);
+
+int manager_rtnl_process_tclass(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
+
+DEFINE_SECTION_CLEANUP_FUNCTIONS(TClass, tclass_free);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_tclass_parent);
 CONFIG_PARSER_PROTOTYPE(config_parse_tclass_classid);
diff --git a/src/network/tc/teql.c b/src/network/tc/teql.c
index 633a782..dcb149d 100644
--- a/src/network/tc/teql.c
+++ b/src/network/tc/teql.c
@@ -1,34 +1,41 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "macro.h"
-#include "netlink-util.h"
+#include "networkd-link.h"
 #include "parse-util.h"
-#include "stdio-util.h"
 #include "string-util.h"
 #include "teql.h"
 
-static int trivial_link_equalizer_fill_tca_kind(Link *link, QDisc *qdisc, sd_netlink_message *req) {
-        char kind[STRLEN("teql") + DECIMAL_STR_MAX(unsigned)];
+static int trivial_link_equalizer_verify(QDisc *qdisc) {
+        _cleanup_free_ char *tca_kind = NULL;
         TrivialLinkEqualizer *teql;
-        int r;
 
-        assert(link);
+        teql = TEQL(ASSERT_PTR(qdisc));
+
+        if (asprintf(&tca_kind, "teql%u", teql->id) < 0)
+                return log_oom();
+
+        return free_and_replace(qdisc->tca_kind, tca_kind);
+}
+
+static int trivial_link_equalizer_is_ready(QDisc *qdisc, Link *link) {
+        Link *teql;
+
         assert(qdisc);
-        assert(req);
+        assert(qdisc->tca_kind);
+        assert(link);
+        assert(link->manager);
 
-        teql = TEQL(qdisc);
+        if (link_get_by_name(link->manager, qdisc->tca_kind, &teql) < 0)
+                return false;
 
-        xsprintf(kind, "teql%u", teql->id);
-        r = sd_netlink_message_append_string(req, TCA_KIND, kind);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_KIND attribute: %m");
-
-        return 0;
+        return link_is_ready_to_configure(teql, /* allow_unmanaged = */ true);
 }
 
 const QDiscVTable teql_vtable = {
         .object_size = sizeof(TrivialLinkEqualizer),
-        .fill_tca_kind = trivial_link_equalizer_fill_tca_kind,
+        .verify = trivial_link_equalizer_verify,
+        .is_ready = trivial_link_equalizer_is_ready,
 };
 
 int config_parse_trivial_link_equalizer_id(
@@ -45,14 +52,13 @@
 
         _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
         TrivialLinkEqualizer *teql;
-        Network *network = data;
+        Network *network = ASSERT_PTR(data);
         unsigned id;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = qdisc_new_static(QDISC_KIND_TEQL, network, filename, section_line, &qdisc);
         if (r == -ENOMEM)
diff --git a/src/network/test-network-tables.c b/src/network/test-network-tables.c
index f55e524..e3e2607 100644
--- a/src/network/test-network-tables.c
+++ b/src/network/test-network-tables.c
@@ -5,10 +5,9 @@
 #include "dhcp6-protocol.h"
 #include "ethtool-util.h"
 #include "ipvlan.h"
-#include "lldp-internal.h"
+#include "lldp-rx-internal.h"
 #include "macvlan.h"
 #include "ndisc-internal.h"
-#include "netlink-internal.h"
 #include "networkd-link.h"
 #include "networkd-network.h"
 #include "networkd-util.h"
@@ -25,7 +24,7 @@
         test_table(bond_primary_reselect, NETDEV_BOND_PRIMARY_RESELECT);
         test_table(bond_xmit_hash_policy, NETDEV_BOND_XMIT_HASH_POLICY);
         test_table(dhcp6_message_status, DHCP6_STATUS);
-        test_table_sparse(dhcp6_message_type, DHCP6_MESSAGE); /* enum starts from 1 */
+        test_table_sparse(dhcp6_message_type, DHCP6_MESSAGE_TYPE); /* enum starts from 1 */
         test_table(dhcp_use_domains, DHCP_USE_DOMAINS);
         test_table(duplex, DUP);
         test_table(ip6tnl_mode, NETDEV_IP6_TNL_MODE);
@@ -35,9 +34,8 @@
         /* test_table(link_state, LINK_STATE);  — not a reversible mapping */
         test_table(lldp_mode, LLDP_MODE);
         test_table(netdev_kind, NETDEV_KIND);
-        test_table(nl_union_link_info_data, NL_UNION_LINK_INFO_DATA);
         test_table(radv_prefix_delegation, RADV_PREFIX_DELEGATION);
-        test_table(lldp_event, SD_LLDP_EVENT);
+        test_table(lldp_rx_event, SD_LLDP_RX_EVENT);
         test_table(ndisc_event, SD_NDISC_EVENT);
         test_table(dhcp_lease_server_type, SD_DHCP_LEASE_SERVER_TYPE);
 
@@ -45,10 +43,9 @@
         test_table_sparse(macvlan_mode, NETDEV_MACVLAN_MODE);
         test_table_sparse(address_family, ADDRESS_FAMILY);
 
-        assert_cc(sizeof(sd_lldp_event_t) == sizeof(int64_t));
+        assert_cc(sizeof(sd_lldp_rx_event_t) == sizeof(int64_t));
         assert_cc(sizeof(sd_ndisc_event_t) == sizeof(int64_t));
         assert_cc(sizeof(sd_dhcp_lease_server_type_t) == sizeof(int64_t));
-        assert_cc(sizeof(sd_genl_family_t) == sizeof(int64_t));
 
         return EXIT_SUCCESS;
 }
diff --git a/src/network/test-network.c b/src/network/test-network.c
index d04a7e3..250ab9e 100644
--- a/src/network/test-network.c
+++ b/src/network/test-network.c
@@ -10,7 +10,9 @@
 #include "ether-addr-util.h"
 #include "hostname-setup.h"
 #include "network-internal.h"
+#include "networkd-address.h"
 #include "networkd-manager.h"
+#include "networkd-route-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
@@ -144,6 +146,12 @@
         assert_se(!manager->route_table_names_by_number);
         assert_se(!manager->route_table_numbers_by_name);
 
+        /* Invalid pairs */
+        assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "main:123 default:333 local:999", manager, manager) >= 0);
+        assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "1234:321 :567 hoge:foo aaa:-888", manager, manager) >= 0);
+        assert_se(!manager->route_table_names_by_number);
+        assert_se(!manager->route_table_numbers_by_name);
+
         test_route_tables_one(manager, "default", 253);
         test_route_tables_one(manager, "main", 254);
         test_route_tables_one(manager, "local", 255);
@@ -163,8 +171,6 @@
                 return r;
         assert_se(r >= 0);
 
-        assert_se(manager_should_reload(manager) == false);
-
         return 0;
 }
 
@@ -190,8 +196,10 @@
         assert_se(in_addr_from_string(AF_INET, "192.168.3.9", &a2->in_addr) >= 0);
         assert_se(address_equal(a1, a2));
         assert_se(in_addr_from_string(AF_INET, "192.168.3.10", &a1->in_addr_peer) >= 0);
-        assert_se(address_equal(a1, a2));
+        assert_se(!address_equal(a1, a2));
         assert_se(in_addr_from_string(AF_INET, "192.168.3.11", &a2->in_addr_peer) >= 0);
+        assert_se(!address_equal(a1, a2));
+        assert_se(in_addr_from_string(AF_INET, "192.168.3.10", &a2->in_addr_peer) >= 0);
         assert_se(address_equal(a1, a2));
         a1->prefixlen = 10;
         assert_se(!address_equal(a1, a2));
@@ -207,8 +215,9 @@
         assert_se(address_equal(a1, a2));
 
         a2->prefixlen = 8;
-        assert_se(address_equal(a1, a2));
+        assert_se(!address_equal(a1, a2));
 
+        a2->prefixlen = 10;
         assert_se(in_addr_from_string(AF_INET6, "2001:4ca0:4f01::1", &a2->in_addr) >= 0);
         assert_se(!address_equal(a1, a2));
 }
@@ -269,7 +278,8 @@
         test_address_equality();
         test_dhcp_hostname_shorten_overlong();
 
-        assert_se(manager_new(&manager) >= 0);
+        assert_se(manager_new(&manager, /* test_mode = */ true) >= 0);
+        assert_se(manager_setup(manager) >= 0);
 
         test_route_tables(manager);
 
diff --git a/src/network/test-networkd-address.c b/src/network/test-networkd-address.c
new file mode 100644
index 0000000..a40c571
--- /dev/null
+++ b/src/network/test-networkd-address.c
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "networkd-address.h"
+#include "tests.h"
+#include "time-util.h"
+
+static void test_FORMAT_LIFETIME_one(usec_t lifetime, const char *expected) {
+        const char *t = FORMAT_LIFETIME(lifetime);
+
+        log_debug(USEC_FMT " → \"%s\" (expected \"%s\")", lifetime, t, expected);
+        assert_se(streq(t, expected));
+}
+
+TEST(FORMAT_LIFETIME) {
+        usec_t now_usec;
+
+        now_usec = now(CLOCK_BOOTTIME);
+
+        test_FORMAT_LIFETIME_one(now_usec, "for 0");
+        test_FORMAT_LIFETIME_one(usec_add(now_usec, 2 * USEC_PER_SEC - 1), "for 1s");
+        test_FORMAT_LIFETIME_one(usec_add(now_usec, 3 * USEC_PER_WEEK + USEC_PER_SEC - 1), "for 3w");
+        test_FORMAT_LIFETIME_one(USEC_INFINITY, "forever");
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/network/test-networkd-conf.c b/src/network/test-networkd-conf.c
index 5156fcc..f6f0687 100644
--- a/src/network/test-networkd-conf.c
+++ b/src/network/test-networkd-conf.c
@@ -4,9 +4,12 @@
 #include "log.h"
 #include "macro.h"
 #include "net-condition.h"
+#include "networkd-address.h"
 #include "networkd-conf.h"
+#include "networkd-manager.h"
 #include "networkd-network.h"
 #include "strv.h"
+#include "tests.h"
 
 static void test_config_parse_duid_type_one(const char *rvalue, int ret, DUIDType expected, usec_t expected_time) {
         DUID actual = {};
@@ -20,7 +23,7 @@
                 assert_se(expected_time == actual.llt_time);
 }
 
-static void test_config_parse_duid_type(void) {
+TEST(config_parse_duid_type) {
         test_config_parse_duid_type_one("", 0, 0, 0);
         test_config_parse_duid_type_one("link-layer-time", 0, DUID_TYPE_LLT, 0);
         test_config_parse_duid_type_one("link-layer-time:2000-01-01 00:00:00 UTC", 0, DUID_TYPE_LLT, (usec_t) 946684800000000);
@@ -50,11 +53,11 @@
         }
 }
 
-static void test_config_parse_hwaddr_one(const char *rvalue, int ret, const struct ether_addr* expected) {
+static void test_config_parse_ether_addr_one(const char *rvalue, int ret, const struct ether_addr* expected) {
         struct ether_addr *actual = NULL;
         int r;
 
-        r = config_parse_hwaddr("network", "filename", 1, "section", 1, "lvalue", 0, rvalue, &actual, NULL);
+        r = config_parse_ether_addr("network", "filename", 1, "section", 1, "lvalue", 0, rvalue, &actual, NULL);
         assert_se(ret == r);
         if (expected) {
                 assert_se(actual);
@@ -65,10 +68,10 @@
         free(actual);
 }
 
-static void test_config_parse_hwaddrs_one(const char *rvalue, const struct ether_addr* list, size_t n) {
+static void test_config_parse_ether_addrs_one(const char *rvalue, const struct ether_addr* list, size_t n) {
         _cleanup_set_free_free_ Set *s = NULL;
 
-        assert_se(config_parse_hwaddrs("network", "filename", 1, "section", 1, "lvalue", 0, rvalue, &s, NULL) == 0);
+        assert_se(config_parse_ether_addrs("network", "filename", 1, "section", 1, "lvalue", 0, rvalue, &s, NULL) == 0);
         assert_se(set_size(s) == n);
 
         for (size_t m = 0; m < n; m++) {
@@ -84,7 +87,7 @@
 
 #define BYTES_1_128 {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80}
 
-static void test_config_parse_duid_rawdata(void) {
+TEST(config_parse_duid_rawdata) {
         test_config_parse_duid_rawdata_one("", 0, &(DUID){});
         test_config_parse_duid_rawdata_one("00:11:22:33:44:55:66:77", 0,
                                            &(DUID){0, 8, {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77}});
@@ -100,76 +103,80 @@
         test_config_parse_duid_rawdata_one(&BYTES_0_128[2], 0, &(DUID){0, 128, BYTES_1_128});
 }
 
-static void test_config_parse_hwaddr(void) {
+TEST(config_parse_ether_addr) {
         const struct ether_addr t[] = {
                 { .ether_addr_octet = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff } },
                 { .ether_addr_octet = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab } },
         };
 
-        test_config_parse_hwaddr_one("", 0, NULL);
-        test_config_parse_hwaddr_one("no:ta:ma:ca:dd:re", 0, NULL);
-        test_config_parse_hwaddr_one("aa:bb:cc:dd:ee:fx", 0, NULL);
-        test_config_parse_hwaddr_one("aa:bb:cc:dd:ee:ff", 0, &t[0]);
-        test_config_parse_hwaddr_one(" aa:bb:cc:dd:ee:ff", 0, &t[0]);
-        test_config_parse_hwaddr_one("aa:bb:cc:dd:ee:ff \t\n", 0, NULL);
-        test_config_parse_hwaddr_one("aa:bb:cc:dd:ee:ff \t\nxxx", 0, NULL);
-        test_config_parse_hwaddr_one("aa:bb:cc: dd:ee:ff", 0, NULL);
-        test_config_parse_hwaddr_one("aa:bb:cc:d d:ee:ff", 0, NULL);
-        test_config_parse_hwaddr_one("aa:bb:cc:dd:ee", 0, NULL);
-        test_config_parse_hwaddr_one("9:aa:bb:cc:dd:ee:ff", 0, NULL);
-        test_config_parse_hwaddr_one("aa:bb:cc:dd:ee:ff:gg", 0, NULL);
-        test_config_parse_hwaddr_one("aa:Bb:CC:dd:ee:ff", 0, &t[0]);
-        test_config_parse_hwaddr_one("01:23:45:67:89:aB", 0, &t[1]);
-        test_config_parse_hwaddr_one("1:23:45:67:89:aB", 0, &t[1]);
-        test_config_parse_hwaddr_one("aa-bb-cc-dd-ee-ff", 0, &t[0]);
-        test_config_parse_hwaddr_one("AA-BB-CC-DD-EE-FF", 0, &t[0]);
-        test_config_parse_hwaddr_one("01-23-45-67-89-ab", 0, &t[1]);
-        test_config_parse_hwaddr_one("aabb.ccdd.eeff", 0, &t[0]);
-        test_config_parse_hwaddr_one("0123.4567.89ab", 0, &t[1]);
-        test_config_parse_hwaddr_one("123.4567.89ab.", 0, NULL);
-        test_config_parse_hwaddr_one("aabbcc.ddeeff", 0, NULL);
-        test_config_parse_hwaddr_one("aabbccddeeff", 0, NULL);
-        test_config_parse_hwaddr_one("aabbccddee:ff", 0, NULL);
-        test_config_parse_hwaddr_one("012345.6789ab", 0, NULL);
-        test_config_parse_hwaddr_one("123.4567.89ab", 0, &t[1]);
+        test_config_parse_ether_addr_one("", 0, NULL);
+        test_config_parse_ether_addr_one("no:ta:ma:ca:dd:re", 0, NULL);
+        test_config_parse_ether_addr_one("aa:bb:cc:dd:ee:fx", 0, NULL);
+        test_config_parse_ether_addr_one("aa:bb:cc:dd:ee:ff", 0, &t[0]);
+        test_config_parse_ether_addr_one(" aa:bb:cc:dd:ee:ff", 0, NULL);
+        test_config_parse_ether_addr_one("aa:bb:cc:dd:ee:ff \t\n", 0, NULL);
+        test_config_parse_ether_addr_one("aa:bb:cc:dd:ee:ff \t\nxxx", 0, NULL);
+        test_config_parse_ether_addr_one("aa:bb:cc: dd:ee:ff", 0, NULL);
+        test_config_parse_ether_addr_one("aa:bb:cc:d d:ee:ff", 0, NULL);
+        test_config_parse_ether_addr_one("aa:bb:cc:dd:ee", 0, NULL);
+        test_config_parse_ether_addr_one("9:aa:bb:cc:dd:ee:ff", 0, NULL);
+        test_config_parse_ether_addr_one("aa:bb:cc:dd:ee:ff:gg", 0, NULL);
+        test_config_parse_ether_addr_one("aa:Bb:CC:dd:ee:ff", 0, &t[0]);
+        test_config_parse_ether_addr_one("01:23:45:67:89:aB", 0, &t[1]);
+        test_config_parse_ether_addr_one("1:23:45:67:89:aB", 0, &t[1]);
+        test_config_parse_ether_addr_one("aa-bb-cc-dd-ee-ff", 0, &t[0]);
+        test_config_parse_ether_addr_one("AA-BB-CC-DD-EE-FF", 0, &t[0]);
+        test_config_parse_ether_addr_one("01-23-45-67-89-ab", 0, &t[1]);
+        test_config_parse_ether_addr_one("aabb.ccdd.eeff", 0, &t[0]);
+        test_config_parse_ether_addr_one("0123.4567.89ab", 0, &t[1]);
+        test_config_parse_ether_addr_one("123.4567.89ab.", 0, NULL);
+        test_config_parse_ether_addr_one("aabbcc.ddeeff", 0, NULL);
+        test_config_parse_ether_addr_one("aabbccddeeff", 0, NULL);
+        test_config_parse_ether_addr_one("aabbccddee:ff", 0, NULL);
+        test_config_parse_ether_addr_one("012345.6789ab", 0, NULL);
+        test_config_parse_ether_addr_one("123.4567.89ab", 0, &t[1]);
 
-        test_config_parse_hwaddrs_one("", t, 0);
-        test_config_parse_hwaddrs_one("no:ta:ma:ca:dd:re", t, 0);
-        test_config_parse_hwaddrs_one("aa:bb:cc:dd:ee:fx", t, 0);
-        test_config_parse_hwaddrs_one("aa:bb:cc:dd:ee:ff", t, 1);
-        test_config_parse_hwaddrs_one(" aa:bb:cc:dd:ee:ff", t, 1);
-        test_config_parse_hwaddrs_one("aa:bb:cc:dd:ee:ff \t\n", t, 1);
-        test_config_parse_hwaddrs_one("aa:bb:cc:dd:ee:ff \t\nxxx", t, 1);
-        test_config_parse_hwaddrs_one("aa:bb:cc: dd:ee:ff", t, 0);
-        test_config_parse_hwaddrs_one("aa:bb:cc:d d:ee:ff", t, 0);
-        test_config_parse_hwaddrs_one("aa:bb:cc:dd:ee", t, 0);
-        test_config_parse_hwaddrs_one("9:aa:bb:cc:dd:ee:ff", t, 0);
-        test_config_parse_hwaddrs_one("aa:bb:cc:dd:ee:ff:gg", t, 0);
-        test_config_parse_hwaddrs_one("aa:Bb:CC:dd:ee:ff", t, 1);
-        test_config_parse_hwaddrs_one("01:23:45:67:89:aB", &t[1], 1);
-        test_config_parse_hwaddrs_one("1:23:45:67:89:aB", &t[1], 1);
-        test_config_parse_hwaddrs_one("aa-bb-cc-dd-ee-ff", t, 1);
-        test_config_parse_hwaddrs_one("AA-BB-CC-DD-EE-FF", t, 1);
-        test_config_parse_hwaddrs_one("01-23-45-67-89-ab", &t[1], 1);
-        test_config_parse_hwaddrs_one("aabb.ccdd.eeff", t, 1);
-        test_config_parse_hwaddrs_one("0123.4567.89ab", &t[1], 1);
-        test_config_parse_hwaddrs_one("123.4567.89ab.", t, 0);
-        test_config_parse_hwaddrs_one("aabbcc.ddeeff", t, 0);
-        test_config_parse_hwaddrs_one("aabbccddeeff", t, 0);
-        test_config_parse_hwaddrs_one("aabbccddee:ff", t, 0);
-        test_config_parse_hwaddrs_one("012345.6789ab", t, 0);
-        test_config_parse_hwaddrs_one("123.4567.89ab", &t[1], 1);
+        test_config_parse_ether_addrs_one("", t, 0);
+        test_config_parse_ether_addrs_one("no:ta:ma:ca:dd:re", t, 0);
+        test_config_parse_ether_addrs_one("aa:bb:cc:dd:ee:fx", t, 0);
+        test_config_parse_ether_addrs_one("aa:bb:cc:dd:ee:ff", t, 1);
+        test_config_parse_ether_addrs_one(" aa:bb:cc:dd:ee:ff", t, 1);
+        test_config_parse_ether_addrs_one("aa:bb:cc:dd:ee:ff \t\n", t, 1);
+        test_config_parse_ether_addrs_one("aa:bb:cc:dd:ee:ff \t\nxxx", t, 1);
+        test_config_parse_ether_addrs_one("aa:bb:cc: dd:ee:ff", t, 0);
+        test_config_parse_ether_addrs_one("aa:bb:cc:d d:ee:ff", t, 0);
+        test_config_parse_ether_addrs_one("aa:bb:cc:dd:ee", t, 0);
+        test_config_parse_ether_addrs_one("9:aa:bb:cc:dd:ee:ff", t, 0);
+        test_config_parse_ether_addrs_one("aa:bb:cc:dd:ee:ff:gg", t, 0);
+        test_config_parse_ether_addrs_one("aa:Bb:CC:dd:ee:ff", t, 1);
+        test_config_parse_ether_addrs_one("01:23:45:67:89:aB", &t[1], 1);
+        test_config_parse_ether_addrs_one("1:23:45:67:89:aB", &t[1], 1);
+        test_config_parse_ether_addrs_one("aa-bb-cc-dd-ee-ff", t, 1);
+        test_config_parse_ether_addrs_one("AA-BB-CC-DD-EE-FF", t, 1);
+        test_config_parse_ether_addrs_one("01-23-45-67-89-ab", &t[1], 1);
+        test_config_parse_ether_addrs_one("aabb.ccdd.eeff", t, 1);
+        test_config_parse_ether_addrs_one("0123.4567.89ab", &t[1], 1);
+        test_config_parse_ether_addrs_one("123.4567.89ab.", t, 0);
+        test_config_parse_ether_addrs_one("aabbcc.ddeeff", t, 0);
+        test_config_parse_ether_addrs_one("aabbccddeeff", t, 0);
+        test_config_parse_ether_addrs_one("aabbccddee:ff", t, 0);
+        test_config_parse_ether_addrs_one("012345.6789ab", t, 0);
+        test_config_parse_ether_addrs_one("123.4567.89ab", &t[1], 1);
 
-        test_config_parse_hwaddrs_one("123.4567.89ab aa:bb:cc:dd:ee:ff 01-23-45-67-89-ab aa:Bb:CC:dd:ee:ff", t, 2);
-        test_config_parse_hwaddrs_one("123.4567.89ab aa:bb:cc:dd:ee:fx hogehoge 01-23-45-67-89-ab aaaa aa:Bb:CC:dd:ee:ff", t, 2);
+        test_config_parse_ether_addrs_one("123.4567.89ab aa:bb:cc:dd:ee:ff 01-23-45-67-89-ab aa:Bb:CC:dd:ee:ff", t, 2);
+        test_config_parse_ether_addrs_one("123.4567.89ab aa:bb:cc:dd:ee:fx hogehoge 01-23-45-67-89-ab aaaa aa:Bb:CC:dd:ee:ff", t, 2);
 }
 
 static void test_config_parse_address_one(const char *rvalue, int family, unsigned n_addresses, const union in_addr_union *u, unsigned char prefixlen) {
+        _cleanup_(manager_freep) Manager *manager = NULL;
         _cleanup_(network_unrefp) Network *network = NULL;
 
+        assert_se(manager_new(&manager, /* test_mode = */ true) >= 0);
         assert_se(network = new0(Network, 1));
         network->n_ref = 1;
+        network->manager = manager;
         assert_se(network->filename = strdup("hogehoge.network"));
+
         assert_se(config_parse_match_ifnames("network", "filename", 1, "section", 1, "Name", 0, "*", &network->match.ifname, network) == 0);
         assert_se(config_parse_address("network", "filename", 1, "section", 1, "Address", 0, rvalue, network, network) == 0);
         assert_se(ordered_hashmap_size(network->addresses_by_section) == 1);
@@ -186,11 +193,11 @@
         }
 }
 
-static void test_config_parse_address(void) {
+TEST(config_parse_address) {
         test_config_parse_address_one("", AF_INET, 0, NULL, 0);
         test_config_parse_address_one("/", AF_INET, 0, NULL, 0);
         test_config_parse_address_one("/8", AF_INET, 0, NULL, 0);
-        test_config_parse_address_one("1.2.3.4", AF_INET, 1, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 8);
+        test_config_parse_address_one("1.2.3.4", AF_INET, 1, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32);
         test_config_parse_address_one("1.2.3.4/0", AF_INET, 1, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 0);
         test_config_parse_address_one("1.2.3.4/1", AF_INET, 1, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 1);
         test_config_parse_address_one("1.2.3.4/2", AF_INET, 1, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 2);
@@ -201,7 +208,7 @@
         test_config_parse_address_one("", AF_INET6, 0, NULL, 0);
         test_config_parse_address_one("/", AF_INET6, 0, NULL, 0);
         test_config_parse_address_one("/8", AF_INET6, 0, NULL, 0);
-        test_config_parse_address_one("::1", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0);
+        test_config_parse_address_one("::1", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128);
         test_config_parse_address_one("::1/0", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0);
         test_config_parse_address_one("::1/1", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 1);
         test_config_parse_address_one("::1/2", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 2);
@@ -213,7 +220,7 @@
         test_config_parse_address_one("::1/-1", AF_INET6, 0, NULL, 0);
 }
 
-static void test_config_parse_match_ifnames(void) {
+TEST(config_parse_match_ifnames) {
         _cleanup_strv_free_ char **names = NULL;
 
         assert_se(config_parse_match_ifnames("network", "filename", 1, "section", 1, "Name", 0, "!hoge hogehoge foo", &names, NULL) == 0);
@@ -223,7 +230,7 @@
         assert_se(strv_equal(names, STRV_MAKE("!hoge", "!hogehoge", "!foo", "!baz", "aaa", "bbb", "ccc")));
 }
 
-static void test_config_parse_match_strv(void) {
+TEST(config_parse_match_strv) {
         _cleanup_strv_free_ char **names = NULL;
 
         assert_se(config_parse_match_strv("network", "filename", 1, "section", 1, "Name", 0, "!hoge hogehoge foo", &names, NULL) == 0);
@@ -241,16 +248,4 @@
                                        "KEY3=val with \\quotation\\")));
 }
 
-int main(int argc, char **argv) {
-        log_parse_environment();
-        log_open();
-
-        test_config_parse_duid_type();
-        test_config_parse_duid_rawdata();
-        test_config_parse_hwaddr();
-        test_config_parse_address();
-        test_config_parse_match_ifnames();
-        test_config_parse_match_strv();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/network/test-networkd-util.c b/src/network/test-networkd-util.c
new file mode 100644
index 0000000..f29ca2c
--- /dev/null
+++ b/src/network/test-networkd-util.c
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "networkd-util.h"
+#include "tests.h"
+
+TEST(network_config_state_to_string_alloc) {
+        for (unsigned i = 1; i <= NETWORK_CONFIG_STATE_REMOVING; i <<= 1) {
+                _cleanup_free_ char *x;
+
+                assert_se(network_config_state_to_string_alloc(i, &x) == 0);
+                log_debug("%u → %s", i, x);
+        }
+
+        _cleanup_free_ char *x;
+        assert_se(network_config_state_to_string_alloc(~0u, &x) == 0);
+        log_debug("%u → %s", ~0u, x);
+};
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/network/wait-online/link.c b/src/network/wait-online/link.c
index 0f5f68e..a8ab7f5 100644
--- a/src/network/wait-online/link.c
+++ b/src/network/wait-online/link.c
@@ -3,10 +3,12 @@
 #include "sd-network.h"
 
 #include "alloc-util.h"
+#include "format-util.h"
 #include "hashmap.h"
 #include "link.h"
 #include "manager.h"
 #include "string-util.h"
+#include "strv.h"
 
 int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) {
         _cleanup_(link_freep) Link *l = NULL;
@@ -55,15 +57,95 @@
         if (l->manager) {
                 hashmap_remove(l->manager->links_by_index, INT_TO_PTR(l->ifindex));
                 hashmap_remove(l->manager->links_by_name, l->ifname);
+
+                STRV_FOREACH(n, l->altnames)
+                        hashmap_remove(l->manager->links_by_name, *n);
         }
 
         free(l->state);
         free(l->ifname);
+        strv_free(l->altnames);
         return mfree(l);
- }
+}
+
+static int link_update_name(Link *l, sd_netlink_message *m) {
+        char ifname_from_index[IF_NAMESIZE];
+        const char *ifname;
+        int r;
+
+        assert(l);
+        assert(l->manager);
+        assert(m);
+
+        r = sd_netlink_message_read_string(m, IFLA_IFNAME, &ifname);
+        if (r == -ENODATA)
+                /* Hmm? But ok. */
+                return 0;
+        if (r < 0)
+                return r;
+
+        if (streq(ifname, l->ifname))
+                return 0;
+
+        /* The kernel sometimes sends wrong ifname change. Let's confirm the received name. */
+        r = format_ifname(l->ifindex, ifname_from_index);
+        if (r < 0)
+                return r;
+
+        if (!streq(ifname, ifname_from_index)) {
+                log_link_debug(l, "New interface name '%s' received from the kernel does not correspond "
+                               "with the name currently configured on the actual interface '%s'. Ignoring.",
+                               ifname, ifname_from_index);
+                return 0;
+        }
+
+        hashmap_remove(l->manager->links_by_name, l->ifname);
+
+        r = free_and_strdup(&l->ifname, ifname);
+        if (r < 0)
+                return r;
+
+        r = hashmap_ensure_put(&l->manager->links_by_name, &string_hash_ops, l->ifname, l);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static int link_update_altnames(Link *l, sd_netlink_message *m) {
+        _cleanup_strv_free_ char **altnames = NULL;
+        int r;
+
+        assert(l);
+        assert(l->manager);
+        assert(m);
+
+        r = sd_netlink_message_read_strv(m, IFLA_PROP_LIST, IFLA_ALT_IFNAME, &altnames);
+        if (r == -ENODATA)
+                /* The message does not have IFLA_PROP_LIST container attribute. It does not mean the
+                 * interface has no alternative name. */
+                return 0;
+        if (r < 0)
+                return r;
+
+        if (strv_equal(altnames, l->altnames))
+                return 0;
+
+        STRV_FOREACH(n, l->altnames)
+                hashmap_remove(l->manager->links_by_name, *n);
+
+        strv_free_and_replace(l->altnames, altnames);
+
+        STRV_FOREACH(n, l->altnames) {
+                r = hashmap_ensure_put(&l->manager->links_by_name, &string_hash_ops, *n, l);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
 
 int link_update_rtnl(Link *l, sd_netlink_message *m) {
-        const char *ifname;
         int r;
 
         assert(l);
@@ -74,30 +156,19 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_read_string(m, IFLA_IFNAME, &ifname);
+        r = link_update_name(l, m);
         if (r < 0)
                 return r;
 
-        if (!streq(l->ifname, ifname)) {
-                char *new_ifname;
-
-                new_ifname = strdup(ifname);
-                if (!new_ifname)
-                        return -ENOMEM;
-
-                assert_se(hashmap_remove(l->manager->links_by_name, l->ifname) == l);
-                free_and_replace(l->ifname, new_ifname);
-
-                r = hashmap_put(l->manager->links_by_name, l->ifname, l);
-                if (r < 0)
-                        return r;
-        }
+        r = link_update_altnames(l, m);
+        if (r < 0)
+                return r;
 
         return 0;
 }
 
 int link_update_monitor(Link *l) {
-        _cleanup_free_ char *operstate = NULL, *required_operstate = NULL, *required_family = NULL,
+        _cleanup_free_ char *required_operstate = NULL, *required_family = NULL,
                 *ipv4_address_state = NULL, *ipv6_address_state = NULL, *state = NULL;
         int r, ret = 0;
 
@@ -105,16 +176,16 @@
         assert(l->ifname);
 
         r = sd_network_link_get_required_for_online(l->ifindex);
-        if (r < 0)
+        if (r < 0 && r != -ENODATA)
                 ret = log_link_debug_errno(l, r, "Failed to determine whether the link is required for online or not, "
-                                           "ignoring: %m");
-        else
-                l->required_for_online = r > 0;
+                                           "assuming required: %m");
+        l->required_for_online = r != 0;
 
         r = sd_network_link_get_required_operstate_for_online(l->ifindex, &required_operstate);
-        if (r < 0)
+        if (r < 0 && r != -ENODATA)
                 ret = log_link_debug_errno(l, r, "Failed to get required operational state, ignoring: %m");
-        else if (isempty(required_operstate))
+
+        if (isempty(required_operstate))
                 l->required_operstate = LINK_OPERSTATE_RANGE_DEFAULT;
         else {
                 r = parse_operational_state_range(required_operstate, &l->required_operstate);
@@ -123,23 +194,15 @@
                                                    "Failed to parse required operational state, ignoring: %m");
         }
 
-        r = sd_network_link_get_operational_state(l->ifindex, &operstate);
+        r = network_link_get_operational_state(l->ifindex, &l->operational_state);
         if (r < 0)
                 ret = log_link_debug_errno(l, r, "Failed to get operational state, ignoring: %m");
-        else {
-                LinkOperationalState s;
-
-                s = link_operstate_from_string(operstate);
-                if (s < 0)
-                        ret = log_link_debug_errno(l, s, "Failed to parse operational state, ignoring: %m");
-                else
-                        l->operational_state = s;
-        }
 
         r = sd_network_link_get_required_family_for_online(l->ifindex, &required_family);
-        if (r < 0)
+        if (r < 0 && r != -ENODATA)
                 ret = log_link_debug_errno(l, r, "Failed to get required address family, ignoring: %m");
-        else if (isempty(required_family))
+
+        if (isempty(required_family))
                 l->required_family = ADDRESS_FAMILY_NO;
         else {
                 AddressFamily f;
diff --git a/src/network/wait-online/link.h b/src/network/wait-online/link.h
index 3072a91..5dc26d9 100644
--- a/src/network/wait-online/link.h
+++ b/src/network/wait-online/link.h
@@ -14,6 +14,7 @@
 
         int ifindex;
         char *ifname;
+        char **altnames;
         unsigned flags;
 
         bool required_for_online;
diff --git a/src/network/wait-online/manager.c b/src/network/wait-online/manager.c
index 17b7475..f481149 100644
--- a/src/network/wait-online/manager.c
+++ b/src/network/wait-online/manager.c
@@ -10,7 +10,20 @@
 #include "netlink-util.h"
 #include "strv.h"
 #include "time-util.h"
-#include "util.h"
+
+static bool link_in_command_line_interfaces(Link *link, Manager *m) {
+        assert(link);
+        assert(m);
+
+        if (hashmap_contains(m->command_line_interfaces_by_name, link->ifname))
+                return true;
+
+        STRV_FOREACH(n, link->altnames)
+                if (hashmap_contains(m->command_line_interfaces_by_name, *n))
+                        return true;
+
+        return false;
+}
 
 static bool manager_ignore_link(Manager *m, Link *link) {
         assert(m);
@@ -22,14 +35,21 @@
 
         /* if interfaces are given on the command line, ignore all others */
         if (m->command_line_interfaces_by_name &&
-            !hashmap_contains(m->command_line_interfaces_by_name, link->ifname))
+            !link_in_command_line_interfaces(link, m))
                 return true;
 
         if (!link->required_for_online)
                 return true;
 
         /* ignore interfaces we explicitly are asked to ignore */
-        return strv_fnmatch(m->ignored_interfaces, link->ifname);
+        if (strv_fnmatch(m->ignored_interfaces, link->ifname))
+                return true;
+
+        STRV_FOREACH(n, link->altnames)
+                if (strv_fnmatch(m->ignored_interfaces, *n))
+                        return true;
+
+        return false;
 }
 
 static int manager_link_is_online(Manager *m, Link *l, LinkOperationalStateRange s) {
@@ -41,9 +61,11 @@
         assert(l);
 
         /* This returns the following:
-         * -EAGAIN: not processed by udev or networkd
-         *       0: operstate is not enough
-         *       1: online */
+         * -EAGAIN       : not processed by udev
+         * -EBUSY        : being processed by networkd
+         * -EADDRNOTAVAIL: requested conditions (operstate and/or addresses) are not satisfied
+         * false         : unmanaged
+         * true          : online */
 
         if (!l->state || streq(l->state, "pending"))
                 /* If no state string exists, networkd (and possibly also udevd) has not detected the
@@ -58,14 +80,14 @@
         if (streq(l->state, "unmanaged")) {
                 /* If the link is in unmanaged state, then ignore the interface unless the interface is
                  * specified in '--interface/-i' option. */
-                if (!hashmap_contains(m->command_line_interfaces_by_name, l->ifname)) {
-                        log_link_debug(l, "link is not managed by networkd (yet?).");
-                        return 0;
+                if (!link_in_command_line_interfaces(l, m)) {
+                        log_link_debug(l, "link is not managed by networkd.");
+                        return false;
                 }
 
         } else if (!streq(l->state, "configured"))
                 /* If the link is in non-configured state, return negative value here. */
-                return log_link_debug_errno(l, SYNTHETIC_ERRNO(EAGAIN),
+                return log_link_debug_errno(l, SYNTHETIC_ERRNO(EBUSY),
                                             "link is being processed by networkd: setup state is %s.",
                                             l->state);
 
@@ -77,86 +99,75 @@
                 s.max = m->required_operstate.max >= 0 ? m->required_operstate.max
                                                        : l->required_operstate.max;
 
-        if (l->operational_state < s.min || l->operational_state > s.max) {
-                log_link_debug(l, "Operational state '%s' is not in range ['%s':'%s']",
-                               link_operstate_to_string(l->operational_state),
-                               link_operstate_to_string(s.min), link_operstate_to_string(s.max));
-                return 0;
-        }
+        if (l->operational_state < s.min || l->operational_state > s.max)
+                return log_link_debug_errno(l, SYNTHETIC_ERRNO(EADDRNOTAVAIL),
+                                            "Operational state '%s' is not in range ['%s':'%s']",
+                                            link_operstate_to_string(l->operational_state),
+                                            link_operstate_to_string(s.min), link_operstate_to_string(s.max));
 
         required_family = m->required_family > 0 ? m->required_family : l->required_family;
         needs_ipv4 = required_family & ADDRESS_FAMILY_IPV4;
         needs_ipv6 = required_family & ADDRESS_FAMILY_IPV6;
 
-        if (s.min >= LINK_OPERSTATE_DEGRADED) {
-                if (needs_ipv4 && l->ipv4_address_state < LINK_ADDRESS_STATE_DEGRADED) {
-                        log_link_debug(l, "No routable or link-local IPv4 address is configured.");
-                        return 0;
-                }
+        if (s.min < LINK_OPERSTATE_ROUTABLE) {
+                if (needs_ipv4 && l->ipv4_address_state < LINK_ADDRESS_STATE_DEGRADED)
+                        return log_link_debug_errno(l, SYNTHETIC_ERRNO(EADDRNOTAVAIL),
+                                                    "No routable or link-local IPv4 address is configured.");
 
-                if (needs_ipv6 && l->ipv6_address_state < LINK_ADDRESS_STATE_DEGRADED) {
-                        log_link_debug(l, "No routable or link-local IPv6 address is configured.");
-                        return 0;
-                }
-        }
+                if (needs_ipv6 && l->ipv6_address_state < LINK_ADDRESS_STATE_DEGRADED)
+                        return log_link_debug_errno(l, SYNTHETIC_ERRNO(EADDRNOTAVAIL),
+                                                    "No routable or link-local IPv6 address is configured.");
+        } else {
+                if (needs_ipv4 && l->ipv4_address_state < LINK_ADDRESS_STATE_ROUTABLE)
+                        return log_link_debug_errno(l, SYNTHETIC_ERRNO(EADDRNOTAVAIL),
+                                                    "No routable IPv4 address is configured.");
 
-        if (s.min >= LINK_OPERSTATE_ROUTABLE) {
-                if (needs_ipv4 && l->ipv4_address_state < LINK_ADDRESS_STATE_ROUTABLE) {
-                        log_link_debug(l, "No routable IPv4 address is configured.");
-                        return 0;
-                }
-
-                if (needs_ipv6 && l->ipv6_address_state < LINK_ADDRESS_STATE_ROUTABLE) {
-                        log_link_debug(l, "No routable IPv6 address is configured.");
-                        return 0;
-                }
+                if (needs_ipv6 && l->ipv6_address_state < LINK_ADDRESS_STATE_ROUTABLE)
+                        return log_link_debug_errno(l, SYNTHETIC_ERRNO(EADDRNOTAVAIL),
+                                                    "No routable IPv6 address is configured.");
         }
 
         log_link_debug(l, "link is configured by networkd and online.");
-        return 1;
+        return true;
 }
 
 bool manager_configured(Manager *m) {
-        bool one_ready = false;
-        const char *ifname;
         Link *l;
         int r;
 
         if (!hashmap_isempty(m->command_line_interfaces_by_name)) {
                 LinkOperationalStateRange *range;
+                const char *ifname;
 
                 /* wait for all the links given on the command line to appear */
                 HASHMAP_FOREACH_KEY(range, ifname, m->command_line_interfaces_by_name) {
 
                         l = hashmap_get(m->links_by_name, ifname);
-                        if (!l && range->min == LINK_OPERSTATE_MISSING) {
-                                one_ready = true;
-                                continue;
-                        }
-
                         if (!l) {
-                                log_debug("still waiting for %s", ifname);
-                                if (!m->any)
-                                        return false;
+                                if (range->min == LINK_OPERSTATE_MISSING) {
+                                        if (m->any)
+                                                return true;
+                                } else {
+                                        log_debug("still waiting for %s", ifname);
+                                        if (!m->any)
+                                                return false;
+                                }
                                 continue;
                         }
 
-                        if (manager_link_is_online(m, l, *range) <= 0) {
-                                if (!m->any)
-                                        return false;
-                                continue;
-                        }
-
-                        one_ready = true;
+                        r = manager_link_is_online(m, l, *range);
+                        if (r <= 0 && !m->any)
+                                return false;
+                        if (r > 0 && m->any)
+                                return true;
                 }
 
-                /* all interfaces given by the command line are online, or
-                 * one of the specified interfaces is online. */
-                return one_ready;
+                /* With '--any'   : no interface is ready
+                 * Without '--any': all interfaces are ready */
+                return !m->any;
         }
 
-        /* wait for all links networkd manages to be in admin state 'configured'
-         * and at least one link to gain a carrier */
+        /* wait for all links networkd manages */
         HASHMAP_FOREACH(l, m->links_by_index) {
                 if (manager_ignore_link(m, l)) {
                         log_link_debug(l, "link is ignored");
@@ -166,26 +177,25 @@
                 r = manager_link_is_online(m, l,
                                            (LinkOperationalStateRange) { _LINK_OPERSTATE_INVALID,
                                                                          _LINK_OPERSTATE_INVALID });
-                if (r < 0 && !m->any)
+                if (r < 0 && !m->any) /* Unlike the above loop, unmanaged interfaces are ignored here. */
                         return false;
-                if (r > 0)
-                        /* we wait for at least one link to be ready,
-                         * regardless of who manages it */
-                        one_ready = true;
+                if (r > 0 && m->any)
+                        return true;
         }
 
-        return one_ready;
+        /* With '--any'   : no interface is ready
+         * Without '--any': all interfaces are ready or unmanaged */
+        return !m->any;
 }
 
 static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint16_t type;
         Link *l;
         const char *ifname;
         int ifindex, r;
 
         assert(rtnl);
-        assert(m);
         assert(mm);
 
         r = sd_netlink_message_get_type(mm, &type);
@@ -215,11 +225,13 @@
 
         case RTM_NEWLINK:
                 if (!l) {
-                        log_debug("Found link %i", ifindex);
+                        log_debug("Found link %s(%i)", ifname, ifindex);
 
                         r = link_new(m, &l, ifindex, ifname);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to create link object: %m");
+                        if (r < 0) {
+                                log_warning_errno(r, "Failed to create link object for %s(%i), ignoring: %m", ifname, ifindex);
+                                return 0;
+                        }
                 }
 
                 r = link_update_rtnl(l, mm);
@@ -286,7 +298,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
@@ -304,12 +316,10 @@
 }
 
 static int on_network_event(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Link *l;
         int r;
 
-        assert(m);
-
         sd_network_monitor_flush(m->network_monitor);
 
         HASHMAP_FOREACH(l, m->links_by_index) {
@@ -382,7 +392,7 @@
         (void) sd_event_add_signal(m->event, NULL, SIGINT, NULL, NULL);
 
         if (timeout > 0) {
-                r = sd_event_add_time_relative(m->event, NULL, clock_boottime_or_monotonic(), timeout, 0, NULL, INT_TO_PTR(-ETIMEDOUT));
+                r = sd_event_add_time_relative(m->event, NULL, CLOCK_BOOTTIME, timeout, 0, NULL, INT_TO_PTR(-ETIMEDOUT));
                 if (r < 0 && r != -EOVERFLOW)
                         return r;
         }
diff --git a/src/network/wait-online/wait-online.c b/src/network/wait-online/wait-online.c
index 3ce29ac..5328bba 100644
--- a/src/network/wait-online/wait-online.c
+++ b/src/network/wait-online/wait-online.c
@@ -6,6 +6,7 @@
 
 #include "sd-daemon.h"
 
+#include "build.h"
 #include "daemon-util.h"
 #include "main-func.h"
 #include "manager.h"
@@ -187,7 +188,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/notify/notify.c b/src/notify/notify.c
index 99f54ce..b134838 100644
--- a/src/notify/notify.c
+++ b/src/notify/notify.c
@@ -9,6 +9,7 @@
 #include "sd-daemon.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "env-util.h"
 #include "format-util.h"
 #include "log.h"
@@ -20,9 +21,10 @@
 #include "terminal-util.h"
 #include "time-util.h"
 #include "user-util.h"
-#include "util.h"
 
 static bool arg_ready = false;
+static bool arg_reloading = false;
+static bool arg_stopping = false;
 static pid_t arg_pid = 0;
 static const char *arg_status = NULL;
 static bool arg_booted = false;
@@ -42,7 +44,10 @@
                "\n%sNotify the init system about service status updates.%s\n\n"
                "  -h --help            Show this help\n"
                "     --version         Show package version\n"
-               "     --ready           Inform the init system about service start-up completion\n"
+               "     --ready           Inform the service manager about service start-up/reload\n"
+               "                       completion\n"
+               "     --reloading       Inform the service manager about configuration reloading\n"
+               "     --stopping        Inform the service manager about service shutdown\n"
                "     --pid[=PID]       Set main PID of daemon\n"
                "     --uid=USER        Set user to send from\n"
                "     --status=TEXT     Set status text\n"
@@ -81,6 +86,8 @@
 
         enum {
                 ARG_READY = 0x100,
+                ARG_RELOADING,
+                ARG_STOPPING,
                 ARG_VERSION,
                 ARG_PID,
                 ARG_STATUS,
@@ -93,6 +100,8 @@
                 { "help",      no_argument,       NULL, 'h'           },
                 { "version",   no_argument,       NULL, ARG_VERSION   },
                 { "ready",     no_argument,       NULL, ARG_READY     },
+                { "reloading", no_argument,       NULL, ARG_RELOADING },
+                { "stopping",  no_argument,       NULL, ARG_STOPPING  },
                 { "pid",       optional_argument, NULL, ARG_PID       },
                 { "status",    required_argument, NULL, ARG_STATUS    },
                 { "booted",    no_argument,       NULL, ARG_BOOTED    },
@@ -120,6 +129,14 @@
                         arg_ready = true;
                         break;
 
+                case ARG_RELOADING:
+                        arg_reloading = true;
+                        break;
+
+                case ARG_STOPPING:
+                        arg_stopping = true;
+                        break;
+
                 case ARG_PID:
                         if (isempty(optarg) || streq(optarg, "auto")) {
                                 arg_pid = getppid();
@@ -170,12 +187,14 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
         }
 
         if (optind >= argc &&
             !arg_ready &&
+            !arg_stopping &&
+            !arg_reloading &&
             !arg_status &&
             !arg_pid &&
             !arg_booted) {
@@ -187,10 +206,10 @@
 }
 
 static int run(int argc, char* argv[]) {
-        _cleanup_free_ char *status = NULL, *cpid = NULL, *n = NULL;
+        _cleanup_free_ char *status = NULL, *cpid = NULL, *n = NULL, *monotonic_usec = NULL;
         _cleanup_strv_free_ char **final_env = NULL;
-        char* our_env[4];
-        unsigned i = 0;
+        char* our_env[7];
+        size_t i = 0;
         pid_t source_pid;
         int r;
 
@@ -212,9 +231,21 @@
                 return r <= 0;
         }
 
+        if (arg_reloading) {
+                our_env[i++] = (char*) "RELOADING=1";
+
+                if (asprintf(&monotonic_usec, "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC)) < 0)
+                        return log_oom();
+
+                our_env[i++] = monotonic_usec;
+        }
+
         if (arg_ready)
                 our_env[i++] = (char*) "READY=1";
 
+        if (arg_stopping)
+                our_env[i++] = (char*) "STOPPING=1";
+
         if (arg_status) {
                 status = strjoin("STATUS=", arg_status);
                 if (!status)
@@ -232,7 +263,7 @@
 
         our_env[i++] = NULL;
 
-        final_env = strv_env_merge(2, our_env, argv + optind);
+        final_env = strv_env_merge(our_env, argv + optind);
         if (!final_env)
                 return log_oom();
 
@@ -285,4 +316,4 @@
         return 0;
 }
 
-DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE (run);
+DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
diff --git a/src/nspawn/fuzz-nspawn-oci.c b/src/nspawn/fuzz-nspawn-oci.c
index cfebf65..5d03834 100644
--- a/src/nspawn/fuzz-nspawn-oci.c
+++ b/src/nspawn/fuzz-nspawn-oci.c
@@ -2,7 +2,6 @@
 
 #include "alloc-util.h"
 #include "fd-util.h"
-#include "fileio.h"
 #include "fuzz.h"
 #include "nspawn-oci.h"
 
@@ -10,10 +9,10 @@
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_(settings_freep) Settings *s = NULL;
 
-        if (size == 0)
+        if (outside_size_range(size, 0, 65536))
                 return 0;
 
-        f = fmemopen_unlocked((char*) data, size, "re");
+        f = data_to_file(data, size);
         assert_se(f);
 
         /* We don't want to fill the logs with messages about parse errors.
diff --git a/src/nspawn/fuzz-nspawn-settings.c b/src/nspawn/fuzz-nspawn-settings.c
index bd98ed2..40ee784 100644
--- a/src/nspawn/fuzz-nspawn-settings.c
+++ b/src/nspawn/fuzz-nspawn-settings.c
@@ -2,7 +2,6 @@
 
 #include "alloc-util.h"
 #include "fd-util.h"
-#include "fileio.h"
 #include "fuzz.h"
 #include "nspawn-settings.h"
 
@@ -10,10 +9,10 @@
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_(settings_freep) Settings *s = NULL;
 
-        if (size == 0)
+        if (outside_size_range(size, 0, 65536))
                 return 0;
 
-        f = fmemopen_unlocked((char*) data, size, "re");
+        f = data_to_file(data, size);
         assert_se(f);
 
         /* We don't want to fill the logs with messages about parse errors.
diff --git a/src/nspawn/meson.build b/src/nspawn/meson.build
index d465b3d..36f0a92 100644
--- a/src/nspawn/meson.build
+++ b/src/nspawn/meson.build
@@ -1,35 +1,21 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-libnspawn_core_sources = files('''
-        nspawn-bind-user.c
-        nspawn-bind-user.h
-        nspawn-cgroup.c
-        nspawn-cgroup.h
-        nspawn-creds.c
-        nspawn-creds.h
-        nspawn-def.h
-        nspawn-expose-ports.c
-        nspawn-expose-ports.h
-        nspawn-mount.c
-        nspawn-mount.h
-        nspawn-network.c
-        nspawn-network.h
-        nspawn-oci.c
-        nspawn-oci.h
-        nspawn-patch-uid.c
-        nspawn-patch-uid.h
-        nspawn-register.c
-        nspawn-register.h
-        nspawn-seccomp.c
-        nspawn-seccomp.h
-        nspawn-settings.c
-        nspawn-settings.h
-        nspawn-setuid.c
-        nspawn-setuid.h
-        nspawn-stub-pid1.c
-        nspawn-stub-pid1.h
-        nspawn.h
-'''.split())
+libnspawn_core_sources = files(
+        'nspawn-bind-user.c',
+        'nspawn-cgroup.c',
+        'nspawn-creds.c',
+        'nspawn-expose-ports.c',
+        'nspawn-mount.c',
+        'nspawn-network.c',
+        'nspawn-oci.c',
+        'nspawn-patch-uid.c',
+        'nspawn-register.c',
+        'nspawn-seccomp.c',
+        'nspawn-settings.c',
+        'nspawn-setuid.c',
+        'nspawn-stub-pid1.c',
+        'nspawn-util.c',
+)
 
 nspawn_gperf_c = custom_target(
         'nspawn-gperf.c',
@@ -45,19 +31,25 @@
         include_directories : includes,
         dependencies : [libacl,
                         libseccomp,
-                        libselinux])
+                        libselinux],
+        build_by_default : false)
 
 systemd_nspawn_sources = files('nspawn.c')
 
 ############################################################
 
 tests += [
-        [['src/nspawn/test-nspawn-tables.c'],
+        [files('test-nspawn-tables.c'),
          [libnspawn_core,
           libshared],
          [libseccomp]],
 
-        [['src/nspawn/test-patch-uid.c'],
+        [files('test-nspawn-util.c'),
+         [libnspawn_core,
+          libshared],
+         [libseccomp]],
+
+        [files('test-patch-uid.c'),
          [libnspawn_core,
           libshared],
          [libacl],
@@ -65,12 +57,12 @@
 ]
 
 fuzzers += [
-        [['src/nspawn/fuzz-nspawn-settings.c'],
+        [files('fuzz-nspawn-settings.c'),
          [libshared,
           libnspawn_core],
          [libseccomp]],
 
-        [['src/nspawn/fuzz-nspawn-oci.c'],
+        [files('fuzz-nspawn-oci.c'),
          [libshared,
           libnspawn_core],
          [libseccomp]],
diff --git a/src/nspawn/nspawn-bind-user.c b/src/nspawn/nspawn-bind-user.c
index 6852125..2e3c3c3 100644
--- a/src/nspawn/nspawn-bind-user.c
+++ b/src/nspawn/nspawn-bind-user.c
@@ -1,18 +1,15 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "chase-symlinks.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
-#include "fs-util.h"
 #include "nspawn-bind-user.h"
 #include "nspawn.h"
 #include "path-util.h"
 #include "user-util.h"
 #include "userdb.h"
 
-#define MAP_UID_START 60514
-#define MAP_UID_END 60577
-
 static int check_etc_passwd_collisions(
                 const char *directory,
                 const char *name,
@@ -24,7 +21,7 @@
         assert(directory);
         assert(name || uid_is_valid(uid));
 
-        r = chase_symlinks_and_fopen_unlocked("/etc/passwd", directory, CHASE_PREFIX_ROOT, "re", &f, NULL);
+        r = chase_symlinks_and_fopen_unlocked("/etc/passwd", directory, CHASE_PREFIX_ROOT, "re", NULL, &f);
         if (r == -ENOENT)
                 return 0; /* no user database? then no user, hence no collision */
         if (r < 0)
@@ -57,7 +54,7 @@
         assert(directory);
         assert(name || gid_is_valid(gid));
 
-        r = chase_symlinks_and_fopen_unlocked("/etc/group", directory, CHASE_PREFIX_ROOT, "re", &f, NULL);
+        r = chase_symlinks_and_fopen_unlocked("/etc/group", directory, CHASE_PREFIX_ROOT, "re", NULL, &f);
         if (r == -ENOENT)
                 return 0; /* no group database? then no group, hence no collision */
         if (r < 0)
@@ -128,7 +125,7 @@
                                         JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(allocate_uid)),
                                         JSON_BUILD_PAIR_CONDITION(u->disposition >= 0, "disposition", JSON_BUILD_STRING(user_disposition_to_string(u->disposition))),
                                         JSON_BUILD_PAIR("homeDirectory", JSON_BUILD_STRING(h)),
-                                        JSON_BUILD_PAIR("service", JSON_BUILD_STRING("io.systemd.NSpawn")),
+                                        JSON_BUILD_PAIR("service", JSON_BUILD_CONST_STRING("io.systemd.NSpawn")),
                                         JSON_BUILD_PAIR_CONDITION(!strv_isempty(u->hashed_password), "privileged", JSON_BUILD_OBJECT(
                                                                                   JSON_BUILD_PAIR("hashedPassword", JSON_BUILD_VARIANT(hp))))));
         if (r < 0)
@@ -140,7 +137,7 @@
                                         JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(g->group_name)),
                                         JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(allocate_uid)),
                                         JSON_BUILD_PAIR_CONDITION(g->disposition >= 0, "disposition", JSON_BUILD_STRING(user_disposition_to_string(g->disposition))),
-                                        JSON_BUILD_PAIR("service", JSON_BUILD_STRING("io.systemd.NSpawn"))));
+                                        JSON_BUILD_PAIR("service", JSON_BUILD_CONST_STRING("io.systemd.NSpawn"))));
         if (r < 0)
                 return log_error_errno(r, "Failed to build container group record: %m");
 
@@ -157,11 +154,11 @@
         assert(current_uid);
 
         for (;; (*current_uid) ++) {
-                if (*current_uid > MAP_UID_END || *current_uid > max_uid)
+                if (*current_uid > MAP_UID_MAX || *current_uid > max_uid)
                         return log_error_errno(
                                         SYNTHETIC_ERRNO(EBUSY),
                                         "No suitable available UID in range " UID_FMT "…" UID_FMT " in container detected, can't map user.",
-                                        MAP_UID_START, MAP_UID_END);
+                                        MAP_UID_MIN, MAP_UID_MAX);
 
                 r = check_etc_passwd_collisions(directory, NULL, *current_uid);
                 if (r < 0)
@@ -171,10 +168,8 @@
 
                 /* We want to use the UID also as GID, hence check for it in /etc/group too */
                 r = check_etc_group_collisions(directory, NULL, (gid_t) *current_uid);
-                if (r < 0)
+                if (r <= 0)
                         return r;
-                if (r == 0) /* free! yay! */
-                        return 0;
         }
 }
 
@@ -204,8 +199,7 @@
                 BindUserContext **ret) {
 
         _cleanup_(bind_user_context_freep) BindUserContext *c = NULL;
-        uid_t current_uid = MAP_UID_START;
-        char **n;
+        uid_t current_uid = MAP_UID_MIN;
         int r;
 
         assert(custom_mounts);
@@ -400,7 +394,7 @@
 
         r = userns_mkdir(root, "/run/host/home", 0755, 0, 0);
         if (r < 0)
-                return log_error_errno(r, "Failed to create /run/host/userdb: %m");
+                return log_error_errno(r, "Failed to create /run/host/home: %m");
 
         r = userns_mkdir(root, "/run/host/userdb", 0755, 0, 0);
         if (r < 0)
diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c
index cb01b25..0deb4eb 100644
--- a/src/nspawn/nspawn-cgroup.c
+++ b/src/nspawn/nspawn-cgroup.c
@@ -18,11 +18,9 @@
 #include "string-util.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 
 static int chown_cgroup_path(const char *path, uid_t uid_shift) {
-        _cleanup_close_ int fd = -1;
-        const char *fn;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
         if (fd < 0)
@@ -154,7 +152,7 @@
          * the unified hierarchy and the container does the same, and we did not create a scope unit for the container
          * move us and the container into two separate subcgroups.
          *
-         * Moreover, container payloads such as systemd try to manage the cgroup they run in in full (i.e. including
+         * Moreover, container payloads such as systemd try to manage the cgroup they run in full (i.e. including
          * its attributes), while the host systemd will only delegate cgroups for children of the cgroup created for a
          * delegation unit, instead of the cgroup itself. This means, if we'd pass on the cgroup allocated from the
          * host systemd directly to the payload, the host and payload systemd might fight for the cgroup
@@ -319,7 +317,7 @@
                  * uid/gid as seen from e.g. /proc/1/mountinfo. So we simply
                  * pass uid 0 and not uid_shift to tmpfs_patch_options().
                  */
-                r = tmpfs_patch_options("mode=755" TMPFS_LIMITS_SYS_FS_CGROUP, 0, selinux_apifs_context, &options);
+                r = tmpfs_patch_options("mode=0755" TMPFS_LIMITS_SYS_FS_CGROUP, 0, selinux_apifs_context, &options);
                 if (r < 0)
                         return log_oom();
 
@@ -392,7 +390,8 @@
 
         if (!userns)
                 return mount_nofollow_verbose(LOG_ERR, NULL, cgroup_root, NULL,
-                                              MS_REMOUNT|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME|MS_RDONLY, "mode=755");
+                                              MS_REMOUNT|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME|MS_RDONLY,
+                                              "mode=0755");
 
         return 0;
 }
@@ -406,7 +405,7 @@
                 uid_t uid_range,
                 const char *selinux_apifs_context) {
 
-        _cleanup_set_free_free_ Set *controllers = NULL;
+        _cleanup_set_free_ Set *controllers = NULL;
         const char *cgroup_root;
         int r;
 
@@ -421,7 +420,10 @@
         if (r == 0) {
                 _cleanup_free_ char *options = NULL;
 
-                r = tmpfs_patch_options("mode=755" TMPFS_LIMITS_SYS_FS_CGROUP, uid_shift == 0 ? UID_INVALID : uid_shift, selinux_apifs_context, &options);
+                r = tmpfs_patch_options("mode=0755" TMPFS_LIMITS_SYS_FS_CGROUP,
+                                        uid_shift == 0 ? UID_INVALID : uid_shift,
+                                        selinux_apifs_context,
+                                        &options);
                 if (r < 0)
                         return log_oom();
 
@@ -500,7 +502,8 @@
                 return r;
 
         return mount_nofollow_verbose(LOG_ERR, NULL, cgroup_root, NULL,
-                                      MS_REMOUNT|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME|MS_RDONLY, "mode=755");
+                                      MS_REMOUNT|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME|MS_RDONLY,
+                                      "mode=0755");
 }
 
 static int mount_unified_cgroups(const char *dest) {
diff --git a/src/nspawn/nspawn-expose-ports.c b/src/nspawn/nspawn-expose-ports.c
index 9d5051d..b35f8b6 100644
--- a/src/nspawn/nspawn-expose-ports.c
+++ b/src/nspawn/nspawn-expose-ports.c
@@ -13,14 +13,12 @@
 #include "parse-util.h"
 #include "socket-util.h"
 #include "string-util.h"
-#include "util.h"
 
 int expose_port_parse(ExposePort **l, const char *s) {
-
         const char *split, *e;
         uint16_t container_port, host_port;
+        ExposePort *port;
         int protocol;
-        ExposePort *p;
         int r;
 
         assert(l);
@@ -59,17 +57,17 @@
                 if (p->protocol == protocol && p->host_port == host_port)
                         return -EEXIST;
 
-        p = new(ExposePort, 1);
-        if (!p)
+        port = new(ExposePort, 1);
+        if (!port)
                 return -ENOMEM;
 
-        *p = (ExposePort) {
+        *port = (ExposePort) {
                 .protocol = protocol,
                 .host_port = host_port,
                 .container_port = container_port,
         };
 
-        LIST_PREPEND(ports, *l, p);
+        LIST_PREPEND(ports, *l, port);
 
         return 0;
 }
@@ -84,7 +82,6 @@
 }
 
 int expose_port_flush(FirewallContext **fw_ctx, ExposePort* l, int af, union in_addr_union *exposed) {
-        ExposePort *p;
         int r;
 
         assert(exposed);
@@ -117,7 +114,6 @@
 int expose_port_execute(sd_netlink *rtnl, FirewallContext **fw_ctx, ExposePort *l, int af, union in_addr_union *exposed) {
         _cleanup_free_ struct local_address *addresses = NULL;
         union in_addr_union new_exposed;
-        ExposePort *p;
         bool add;
         int r;
 
@@ -144,14 +140,9 @@
         if (in_addr_equal(af, exposed, &new_exposed))
                 return 0;
 
-        if (DEBUG_LOGGING) {
-                _cleanup_free_ char *pretty = NULL;
-                in_addr_to_string(af, &new_exposed, &pretty);
-                log_debug("New container IP is %s.", strna(pretty));
-        }
+        log_debug("New container IP is %s.", IN_ADDR_TO_STRING(af, &new_exposed));
 
         LIST_FOREACH(ports, p, l) {
-
                 r = fw_add_local_dnat(fw_ctx,
                                       true,
                                       af,
@@ -169,12 +160,12 @@
 }
 
 int expose_port_send_rtnl(int send_fd) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(send_fd >= 0);
 
-        fd = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_ROUTE);
+        fd = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_ROUTE);
         if (fd < 0)
                 return log_error_errno(errno, "Failed to allocate container netlink: %m");
 
diff --git a/src/nspawn/nspawn-gperf.gperf b/src/nspawn/nspawn-gperf.gperf
index ea15e27..a93b8c3 100644
--- a/src/nspawn/nspawn-gperf.gperf
+++ b/src/nspawn/nspawn-gperf.gperf
@@ -19,63 +19,64 @@
 %struct-type
 %includes
 %%
-Exec.Boot,                    config_parse_boot,           0,                 0
-Exec.Ephemeral,               config_parse_bool,           0,                 offsetof(Settings, ephemeral)
-Exec.ProcessTwo,              config_parse_pid2,           0,                 0
-Exec.Parameters,              config_parse_strv,           0,                 offsetof(Settings, parameters)
-Exec.Environment,             config_parse_strv,           0,                 offsetof(Settings, environment)
-Exec.User,                    config_parse_string,         0,                 offsetof(Settings, user)
-Exec.Capability,              config_parse_capability,     0,                 offsetof(Settings, capability)
-Exec.AmbientCapability,       config_parse_capability,     0,                 offsetof(Settings, ambient_capability)
-Exec.DropCapability,          config_parse_capability,     0,                 offsetof(Settings, drop_capability)
-Exec.KillSignal,              config_parse_signal,         0,                 offsetof(Settings, kill_signal)
-Exec.Personality,             config_parse_personality,    0,                 offsetof(Settings, personality)
-Exec.MachineID,               config_parse_id128,          0,                 offsetof(Settings, machine_id)
-Exec.WorkingDirectory,        config_parse_path,           0,                 offsetof(Settings, working_directory)
-Exec.PivotRoot,               config_parse_pivot_root,     0,                 0
-Exec.PrivateUsers,            config_parse_private_users,  0,                 0
-Exec.NotifyReady,             config_parse_bool,           0,                 offsetof(Settings, notify_ready)
-Exec.SystemCallFilter,        config_parse_syscall_filter, 0,                 0,
-Exec.LimitCPU,                config_parse_rlimit,         RLIMIT_CPU,        offsetof(Settings, rlimit)
-Exec.LimitFSIZE,              config_parse_rlimit,         RLIMIT_FSIZE,      offsetof(Settings, rlimit)
-Exec.LimitDATA,               config_parse_rlimit,         RLIMIT_DATA,       offsetof(Settings, rlimit)
-Exec.LimitSTACK,              config_parse_rlimit,         RLIMIT_STACK,      offsetof(Settings, rlimit)
-Exec.LimitCORE,               config_parse_rlimit,         RLIMIT_CORE,       offsetof(Settings, rlimit)
-Exec.LimitRSS,                config_parse_rlimit,         RLIMIT_RSS,        offsetof(Settings, rlimit)
-Exec.LimitNOFILE,             config_parse_rlimit,         RLIMIT_NOFILE,     offsetof(Settings, rlimit)
-Exec.LimitAS,                 config_parse_rlimit,         RLIMIT_AS,         offsetof(Settings, rlimit)
-Exec.LimitNPROC,              config_parse_rlimit,         RLIMIT_NPROC,      offsetof(Settings, rlimit)
-Exec.LimitMEMLOCK,            config_parse_rlimit,         RLIMIT_MEMLOCK,    offsetof(Settings, rlimit)
-Exec.LimitLOCKS,              config_parse_rlimit,         RLIMIT_LOCKS,      offsetof(Settings, rlimit)
-Exec.LimitSIGPENDING,         config_parse_rlimit,         RLIMIT_SIGPENDING, offsetof(Settings, rlimit)
-Exec.LimitMSGQUEUE,           config_parse_rlimit,         RLIMIT_MSGQUEUE,   offsetof(Settings, rlimit)
-Exec.LimitNICE,               config_parse_rlimit,         RLIMIT_NICE,       offsetof(Settings, rlimit)
-Exec.LimitRTPRIO,             config_parse_rlimit,         RLIMIT_RTPRIO,     offsetof(Settings, rlimit)
-Exec.LimitRTTIME,             config_parse_rlimit,         RLIMIT_RTTIME,     offsetof(Settings, rlimit)
-Exec.Hostname,                config_parse_hostname,       0,                 offsetof(Settings, hostname)
-Exec.NoNewPrivileges,         config_parse_tristate,       0,                 offsetof(Settings, no_new_privileges)
-Exec.OOMScoreAdjust,          config_parse_oom_score_adjust, 0,               0
-Exec.CPUAffinity,             config_parse_cpu_affinity,   0,                 0
-Exec.ResolvConf,              config_parse_resolv_conf,    0,                 offsetof(Settings, resolv_conf)
-Exec.LinkJournal,             config_parse_link_journal,   0,                 0
-Exec.Timezone,                config_parse_timezone,       0,                 offsetof(Settings, timezone)
-Files.ReadOnly,               config_parse_tristate,       0,                 offsetof(Settings, read_only)
-Files.Volatile,               config_parse_volatile_mode,  0,                 offsetof(Settings, volatile_mode)
-Files.Bind,                   config_parse_bind,           0,                 0
-Files.BindReadOnly,           config_parse_bind,           1,                 0
-Files.TemporaryFileSystem,    config_parse_tmpfs,          0,                 0
-Files.Inaccessible,           config_parse_inaccessible,   0,                 0
-Files.Overlay,                config_parse_overlay,        0,                 0
-Files.OverlayReadOnly,        config_parse_overlay,        1,                 0
-Files.PrivateUsersChown,      config_parse_userns_chown,   0,                 offsetof(Settings, userns_ownership)
-Files.PrivateUsersOwnership,  config_parse_userns_ownership, 0,               offsetof(Settings, userns_ownership)
-Files.BindUser,               config_parse_bind_user,      0,                 offsetof(Settings, bind_user)
-Network.Private,              config_parse_tristate,       0,                 offsetof(Settings, private_network)
-Network.Interface,            config_parse_strv,           0,                 offsetof(Settings, network_interfaces)
-Network.MACVLAN,              config_parse_strv,           0,                 offsetof(Settings, network_macvlan)
-Network.IPVLAN,               config_parse_strv,           0,                 offsetof(Settings, network_ipvlan)
-Network.VirtualEthernet,      config_parse_tristate,       0,                 offsetof(Settings, network_veth)
-Network.VirtualEthernetExtra, config_parse_veth_extra,     0,                 0
-Network.Bridge,               config_parse_ifname,         0,                 offsetof(Settings, network_bridge)
-Network.Zone,                 config_parse_network_zone,   0,                 0
-Network.Port,                 config_parse_expose_port,    0,                 0
+Exec.Boot,                    config_parse_boot,           0,                        0
+Exec.Ephemeral,               config_parse_tristate,       0,                        offsetof(Settings, ephemeral)
+Exec.ProcessTwo,              config_parse_pid2,           0,                        0
+Exec.Parameters,              config_parse_strv,           0,                        offsetof(Settings, parameters)
+Exec.Environment,             config_parse_strv,           0,                        offsetof(Settings, environment)
+Exec.User,                    config_parse_string,         CONFIG_PARSE_STRING_SAFE, offsetof(Settings, user)
+Exec.Capability,              config_parse_capability,     0,                        offsetof(Settings, capability)
+Exec.AmbientCapability,       config_parse_capability,     0,                        offsetof(Settings, ambient_capability)
+Exec.DropCapability,          config_parse_capability,     0,                        offsetof(Settings, drop_capability)
+Exec.KillSignal,              config_parse_signal,         0,                        offsetof(Settings, kill_signal)
+Exec.Personality,             config_parse_personality,    0,                        offsetof(Settings, personality)
+Exec.MachineID,               config_parse_id128,          0,                        offsetof(Settings, machine_id)
+Exec.WorkingDirectory,        config_parse_path,           0,                        offsetof(Settings, working_directory)
+Exec.PivotRoot,               config_parse_pivot_root,     0,                        0
+Exec.PrivateUsers,            config_parse_private_users,  0,                        0
+Exec.NotifyReady,             config_parse_tristate,       0,                        offsetof(Settings, notify_ready)
+Exec.SystemCallFilter,        config_parse_syscall_filter, 0,                        0
+Exec.LimitCPU,                config_parse_rlimit,         RLIMIT_CPU,               offsetof(Settings, rlimit)
+Exec.LimitFSIZE,              config_parse_rlimit,         RLIMIT_FSIZE,             offsetof(Settings, rlimit)
+Exec.LimitDATA,               config_parse_rlimit,         RLIMIT_DATA,              offsetof(Settings, rlimit)
+Exec.LimitSTACK,              config_parse_rlimit,         RLIMIT_STACK,             offsetof(Settings, rlimit)
+Exec.LimitCORE,               config_parse_rlimit,         RLIMIT_CORE,              offsetof(Settings, rlimit)
+Exec.LimitRSS,                config_parse_rlimit,         RLIMIT_RSS,               offsetof(Settings, rlimit)
+Exec.LimitNOFILE,             config_parse_rlimit,         RLIMIT_NOFILE,            offsetof(Settings, rlimit)
+Exec.LimitAS,                 config_parse_rlimit,         RLIMIT_AS,                offsetof(Settings, rlimit)
+Exec.LimitNPROC,              config_parse_rlimit,         RLIMIT_NPROC,             offsetof(Settings, rlimit)
+Exec.LimitMEMLOCK,            config_parse_rlimit,         RLIMIT_MEMLOCK,           offsetof(Settings, rlimit)
+Exec.LimitLOCKS,              config_parse_rlimit,         RLIMIT_LOCKS,             offsetof(Settings, rlimit)
+Exec.LimitSIGPENDING,         config_parse_rlimit,         RLIMIT_SIGPENDING,        offsetof(Settings, rlimit)
+Exec.LimitMSGQUEUE,           config_parse_rlimit,         RLIMIT_MSGQUEUE,          offsetof(Settings, rlimit)
+Exec.LimitNICE,               config_parse_rlimit,         RLIMIT_NICE,              offsetof(Settings, rlimit)
+Exec.LimitRTPRIO,             config_parse_rlimit,         RLIMIT_RTPRIO,            offsetof(Settings, rlimit)
+Exec.LimitRTTIME,             config_parse_rlimit,         RLIMIT_RTTIME,            offsetof(Settings, rlimit)
+Exec.Hostname,                config_parse_hostname,       0,                        offsetof(Settings, hostname)
+Exec.NoNewPrivileges,         config_parse_tristate,       0,                        offsetof(Settings, no_new_privileges)
+Exec.OOMScoreAdjust,          config_parse_oom_score_adjust, 0,                      0
+Exec.CPUAffinity,             config_parse_cpu_affinity,   0,                        0
+Exec.ResolvConf,              config_parse_resolv_conf,    0,                        offsetof(Settings, resolv_conf)
+Exec.LinkJournal,             config_parse_link_journal,   0,                        0
+Exec.Timezone,                config_parse_timezone,       0,                        offsetof(Settings, timezone)
+Exec.SuppressSync,            config_parse_tristate,       0,                        offsetof(Settings, suppress_sync)
+Files.ReadOnly,               config_parse_tristate,       0,                        offsetof(Settings, read_only)
+Files.Volatile,               config_parse_volatile_mode,  0,                        offsetof(Settings, volatile_mode)
+Files.Bind,                   config_parse_bind,           0,                        0
+Files.BindReadOnly,           config_parse_bind,           1,                        0
+Files.TemporaryFileSystem,    config_parse_tmpfs,          0,                        0
+Files.Inaccessible,           config_parse_inaccessible,   0,                        0
+Files.Overlay,                config_parse_overlay,        0,                        0
+Files.OverlayReadOnly,        config_parse_overlay,        1,                        0
+Files.PrivateUsersChown,      config_parse_userns_chown,   0,                        offsetof(Settings, userns_ownership)
+Files.PrivateUsersOwnership,  config_parse_userns_ownership, 0,                      offsetof(Settings, userns_ownership)
+Files.BindUser,               config_parse_bind_user,      0,                        offsetof(Settings, bind_user)
+Network.Private,              config_parse_tristate,       0,                        offsetof(Settings, private_network)
+Network.Interface,            config_parse_strv,           0,                        offsetof(Settings, network_interfaces)
+Network.MACVLAN,              config_parse_strv,           0,                        offsetof(Settings, network_macvlan)
+Network.IPVLAN,               config_parse_strv,           0,                        offsetof(Settings, network_ipvlan)
+Network.VirtualEthernet,      config_parse_tristate,       0,                        offsetof(Settings, network_veth)
+Network.VirtualEthernetExtra, config_parse_veth_extra,     0,                        0
+Network.Bridge,               config_parse_ifname,         0,                        offsetof(Settings, network_bridge)
+Network.Zone,                 config_parse_network_zone,   0,                        0
+Network.Port,                 config_parse_expose_port,    0,                        0
diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c
index 60f956d..ee00362 100644
--- a/src/nspawn/nspawn-mount.c
+++ b/src/nspawn/nspawn-mount.c
@@ -4,14 +4,16 @@
 #include <linux/magic.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "format-util.h"
 #include "fs-util.h"
 #include "label.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
+#include "namespace-util.h"
 #include "nspawn-mount.h"
 #include "parse-util.h"
 #include "path-util.h"
@@ -82,13 +84,38 @@
         return CMP(a->type, b->type);
 }
 
-static bool source_path_is_valid(const char *p) {
+static int source_path_parse(const char *p, char **ret) {
         assert(p);
+        assert(ret);
 
-        if (*p == '+')
-                p++;
+        if (isempty(p))
+                return -EINVAL;
 
-        return path_is_absolute(p);
+        if (*p == '+') {
+                if (!path_is_absolute(p + 1))
+                        return -EINVAL;
+
+                char *s = strdup(p);
+                if (!s)
+                        return -ENOMEM;
+
+                *ret = TAKE_PTR(s);
+                return 0;
+        }
+
+        return path_make_absolute_cwd(p, ret);
+}
+
+static int source_path_parse_nullable(const char *p, char **ret) {
+        assert(p);
+        assert(ret);
+
+        if (isempty(p)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        return source_path_parse(p, ret);
 }
 
 static char *resolve_source_path(const char *dest, const char *source) {
@@ -165,8 +192,6 @@
                 }
 
                 if (m->type == CUSTOM_MOUNT_OVERLAY) {
-                        char **j;
-
                         STRV_FOREACH(j, m->lower) {
                                 char *s;
 
@@ -213,15 +238,14 @@
 }
 
 int bind_mount_parse(CustomMount **l, size_t *n, const char *s, bool read_only) {
-        _cleanup_free_ char *source = NULL, *destination = NULL, *opts = NULL;
-        const char *p = s;
+        _cleanup_free_ char *source = NULL, *destination = NULL, *opts = NULL, *p = NULL;
         CustomMount *m;
         int r;
 
         assert(l);
         assert(n);
 
-        r = extract_many_words(&p, ":", EXTRACT_DONT_COALESCE_SEPARATORS, &source, &destination, NULL);
+        r = extract_many_words(&s, ":", EXTRACT_DONT_COALESCE_SEPARATORS, &source, &destination, NULL);
         if (r < 0)
                 return r;
         if (r == 0)
@@ -231,16 +255,15 @@
                 if (!destination)
                         return -ENOMEM;
         }
-        if (r == 2 && !isempty(p)) {
-                opts = strdup(p);
+        if (r == 2 && !isempty(s)) {
+                opts = strdup(s);
                 if (!opts)
                         return -ENOMEM;
         }
 
-        if (isempty(source))
-                source = mfree(source);
-        else if (!source_path_is_valid(source))
-                return -EINVAL;
+        r = source_path_parse_nullable(source, &p);
+        if (r < 0)
+                return r;
 
         if (!path_is_absolute(destination))
                 return -EINVAL;
@@ -249,7 +272,7 @@
         if (!m)
                 return -ENOMEM;
 
-        m->source = TAKE_PTR(source);
+        m->source = TAKE_PTR(p);
         m->destination = TAKE_PTR(destination);
         m->read_only = read_only;
         m->options = TAKE_PTR(opts);
@@ -259,13 +282,12 @@
 
 int tmpfs_mount_parse(CustomMount **l, size_t *n, const char *s) {
         _cleanup_free_ char *path = NULL, *opts = NULL;
-        const char *p = s;
+        const char *p = ASSERT_PTR(s);
         CustomMount *m;
         int r;
 
         assert(l);
         assert(n);
-        assert(s);
 
         r = extract_first_word(&p, &path, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
         if (r < 0)
@@ -297,7 +319,7 @@
         _cleanup_free_ char *upper = NULL, *destination = NULL;
         _cleanup_strv_free_ char **lower = NULL;
         CustomMount *m;
-        int k;
+        int r, k;
 
         k = strv_split_full(&lower, s, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
         if (k < 0)
@@ -305,12 +327,22 @@
         if (k < 2)
                 return -EADDRNOTAVAIL;
         if (k == 2) {
+                _cleanup_free_ char *p = NULL;
+
                 /* If two parameters are specified, the first one is the lower, the second one the upper directory. And
                  * we'll also define the destination mount point the same as the upper. */
 
-                if (!source_path_is_valid(lower[0]) ||
-                    !source_path_is_valid(lower[1]))
-                        return -EINVAL;
+                r = source_path_parse(lower[0], &p);
+                if (r < 0)
+                        return r;
+
+                free_and_replace(lower[0], p);
+
+                r = source_path_parse(lower[1], &p);
+                if (r < 0)
+                        return r;
+
+                free_and_replace(lower[1], p);
 
                 upper = TAKE_PTR(lower[1]);
 
@@ -318,7 +350,7 @@
                 if (!destination)
                         return -ENOMEM;
         } else {
-                char **i;
+                _cleanup_free_ char *p = NULL;
 
                 /* If more than two parameters are specified, the last one is the destination, the second to last one
                  * the "upper", and all before that the "lower" directories. */
@@ -326,16 +358,21 @@
                 destination = lower[k - 1];
                 upper = TAKE_PTR(lower[k - 2]);
 
-                STRV_FOREACH(i, lower)
-                        if (!source_path_is_valid(*i))
-                                return -EINVAL;
+                STRV_FOREACH(i, lower) {
+                        r = source_path_parse(*i, &p);
+                        if (r < 0)
+                                return r;
+
+                        free_and_replace(*i, p);
+                }
 
                 /* If the upper directory is unspecified, then let's create it automatically as a throw-away directory
                  * in /var/tmp */
-                if (isempty(upper))
-                        upper = mfree(upper);
-                else if (!source_path_is_valid(upper))
-                        return -EINVAL;
+                r = source_path_parse_nullable(upper, &p);
+                if (r < 0)
+                        return r;
+
+                free_and_replace(upper, p);
 
                 if (!path_is_absolute(destination))
                         return -EINVAL;
@@ -407,7 +444,7 @@
 }
 
 int mount_sysfs(const char *dest, MountSettingsMask mount_settings) {
-        const char *full, *top, *x;
+        const char *full, *top;
         int r;
         unsigned long extra_flags = 0;
 
@@ -467,13 +504,16 @@
         /* Create mountpoint for cgroups. Otherwise we are not allowed since we
          * remount /sys read-only.
          */
-        x = prefix_roota(top, "/fs/cgroup");
+        const char *x = prefix_roota(top, "/fs/cgroup");
         (void) mkdir_p(x, 0755);
 
         return mount_nofollow_verbose(LOG_ERR, NULL, top, NULL,
                                       MS_BIND|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_REMOUNT|extra_flags, NULL);
 }
 
+#define PROC_DEFAULT_MOUNT_FLAGS (MS_NOSUID|MS_NOEXEC|MS_NODEV)
+#define SYS_DEFAULT_MOUNT_FLAGS  (MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV)
+
 int mount_all(const char *dest,
               MountSettingsMask mount_settings,
               uid_t uid_shift,
@@ -502,7 +542,7 @@
 
         static const MountPoint mount_table[] = {
                 /* First we list inner child mounts (i.e. mounts applied *after* entering user namespacing) */
-                { "proc",            "/proc",           "proc",  NULL,        MS_NOSUID|MS_NOEXEC|MS_NODEV,
+                { "proc",            "/proc",           "proc",  NULL,        PROC_DEFAULT_MOUNT_FLAGS,
                   MOUNT_FATAL|MOUNT_IN_USERNS|MOUNT_MKDIR|MOUNT_FOLLOW_SYMLINKS }, /* we follow symlinks here since not following them requires /proc/ already being mounted, which we don't have here. */
 
                 { "/proc/sys",       "/proc/sys",       NULL,    NULL,        MS_BIND,
@@ -536,19 +576,19 @@
                   MOUNT_IN_USERNS|MOUNT_MKDIR },
 
                 /* Then we list outer child mounts (i.e. mounts applied *before* entering user namespacing) */
-                { "tmpfs",                  "/tmp",                         "tmpfs", "mode=1777" NESTED_TMPFS_LIMITS,  MS_NOSUID|MS_NODEV|MS_STRICTATIME,
+                { "tmpfs",                  "/tmp",                         "tmpfs", "mode=01777" NESTED_TMPFS_LIMITS, MS_NOSUID|MS_NODEV|MS_STRICTATIME,
                   MOUNT_FATAL|MOUNT_APPLY_TMPFS_TMP|MOUNT_MKDIR },
-                { "tmpfs",                  "/sys",                         "tmpfs", "mode=555" TMPFS_LIMITS_SYS,      MS_NOSUID|MS_NOEXEC|MS_NODEV,
+                { "tmpfs",                  "/sys",                         "tmpfs", "mode=0555" TMPFS_LIMITS_SYS,     MS_NOSUID|MS_NOEXEC|MS_NODEV,
                   MOUNT_FATAL|MOUNT_APPLY_APIVFS_NETNS|MOUNT_MKDIR },
-                { "sysfs",                  "/sys",                         "sysfs", NULL,                             MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV,
+                { "sysfs",                  "/sys",                         "sysfs", NULL,                             SYS_DEFAULT_MOUNT_FLAGS,
                   MOUNT_FATAL|MOUNT_APPLY_APIVFS_RO|MOUNT_MKDIR },    /* skipped if above was mounted */
                 { "sysfs",                  "/sys",                         "sysfs", NULL,                             MS_NOSUID|MS_NOEXEC|MS_NODEV,
                   MOUNT_FATAL|MOUNT_MKDIR },                          /* skipped if above was mounted */
-                { "tmpfs",                  "/dev",                         "tmpfs", "mode=755" TMPFS_LIMITS_DEV,      MS_NOSUID|MS_STRICTATIME,
+                { "tmpfs",                  "/dev",                         "tmpfs", "mode=0755" TMPFS_LIMITS_PRIVATE_DEV, MS_NOSUID|MS_STRICTATIME,
                   MOUNT_FATAL|MOUNT_MKDIR },
-                { "tmpfs",                  "/dev/shm",                     "tmpfs", "mode=1777" NESTED_TMPFS_LIMITS,  MS_NOSUID|MS_NODEV|MS_STRICTATIME,
+                { "tmpfs",                  "/dev/shm",                     "tmpfs", "mode=01777" NESTED_TMPFS_LIMITS, MS_NOSUID|MS_NODEV|MS_STRICTATIME,
                   MOUNT_FATAL|MOUNT_MKDIR },
-                { "tmpfs",                  "/run",                         "tmpfs", "mode=755" TMPFS_LIMITS_RUN,      MS_NOSUID|MS_NODEV|MS_STRICTATIME,
+                { "tmpfs",                  "/run",                         "tmpfs", "mode=0755" TMPFS_LIMITS_RUN,     MS_NOSUID|MS_NODEV|MS_STRICTATIME,
                   MOUNT_FATAL|MOUNT_MKDIR },
                 { "/run/host",              "/run/host",                    NULL,    NULL,                             MS_BIND,
                   MOUNT_FATAL|MOUNT_MKDIR|MOUNT_PREFIX_ROOT }, /* Prepare this so that we can make it read-only when we are done */
@@ -671,9 +711,10 @@
         return 0;
 }
 
-static int parse_mount_bind_options(const char *options, unsigned long *mount_flags, char **mount_opts) {
+static int parse_mount_bind_options(const char *options, unsigned long *mount_flags, char **mount_opts, RemountIdmapping *idmapping) {
         unsigned long flags = *mount_flags;
         char *opts = NULL;
+        RemountIdmapping new_idmapping = *idmapping;
         int r;
 
         assert(options);
@@ -691,33 +732,46 @@
                         flags |= MS_REC;
                 else if (streq(word, "norbind"))
                         flags &= ~MS_REC;
+                else if (streq(word, "idmap"))
+                        new_idmapping = REMOUNT_IDMAPPING_HOST_ROOT;
+                else if (streq(word, "noidmap"))
+                        new_idmapping = REMOUNT_IDMAPPING_NONE;
+                else if (streq(word, "rootidmap"))
+                        new_idmapping = REMOUNT_IDMAPPING_HOST_OWNER;
                 else
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                "Invalid bind mount option: %s", word);
         }
 
         *mount_flags = flags;
+        *idmapping = new_idmapping;
         /* in the future mount_opts will hold string options for mount(2) */
         *mount_opts = opts;
 
         return 0;
 }
 
-static int mount_bind(const char *dest, CustomMount *m) {
+static int mount_bind(const char *dest, CustomMount *m, uid_t uid_shift, uid_t uid_range) {
         _cleanup_free_ char *mount_opts = NULL, *where = NULL;
         unsigned long mount_flags = MS_BIND | MS_REC;
         struct stat source_st, dest_st;
         int r;
+        RemountIdmapping idmapping = REMOUNT_IDMAPPING_NONE;
 
         assert(dest);
         assert(m);
 
         if (m->options) {
-                r = parse_mount_bind_options(m->options, &mount_flags, &mount_opts);
+                r = parse_mount_bind_options(m->options, &mount_flags, &mount_opts, &idmapping);
                 if (r < 0)
                         return r;
         }
 
+        /* If this is a bind mount from a temporary sources change ownership of the source to the container's
+         * root UID. Otherwise it would always show up as "nobody" if user namespacing is used. */
+        if (m->rm_rf_tmpdir && chown(m->source, uid_shift, uid_shift) < 0)
+                return log_error_errno(errno, "Failed to chown %s: %m", m->source);
+
         if (stat(m->source, &source_st) < 0)
                 return log_error_errno(errno, "Failed to stat %s: %m", m->source);
 
@@ -740,7 +794,7 @@
                                                m->source, where);
 
         } else { /* Path doesn't exist yet? */
-                r = mkdir_parents_label(where, 0755);
+                r = mkdir_parents_safe_label(dest, where, 0755, uid_shift, uid_shift, MKDIR_IGNORE_EXISTING);
                 if (r < 0)
                         return log_error_errno(r, "Failed to make parents of %s: %m", where);
 
@@ -754,6 +808,9 @@
                         r = touch(where);
                 if (r < 0)
                         return log_error_errno(r, "Failed to create mount point %s: %m", where);
+
+                if (chown(where, uid_shift, uid_shift) < 0)
+                        return log_error_errno(errno, "Failed to chown %s: %m", where);
         }
 
         r = mount_nofollow_verbose(LOG_ERR, m->source, where, NULL, mount_flags, mount_opts);
@@ -766,6 +823,12 @@
                         return log_error_errno(r, "Read-only bind mount failed: %m");
         }
 
+        if (idmapping != REMOUNT_IDMAPPING_NONE) {
+                r = remount_idmap(where, uid_shift, uid_range, source_st.st_uid, idmapping);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to map ids for bind mount %s: %m", where);
+        }
+
         return 0;
 }
 
@@ -905,6 +968,7 @@
                 const char *dest,
                 CustomMount *mounts, size_t n,
                 uid_t uid_shift,
+                uid_t uid_range,
                 const char *selinux_apifs_context,
                 MountSettingsMask mount_settings) {
         int r;
@@ -926,7 +990,7 @@
                 switch (m->type) {
 
                 case CUSTOM_MOUNT_BIND:
-                        r = mount_bind(dest, m);
+                        r = mount_bind(dest, m, uid_shift, uid_range);
                         break;
 
                 case CUSTOM_MOUNT_TMPFS:
@@ -946,7 +1010,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unknown custom mount type");
+                        assert_not_reached();
                 }
 
                 if (r < 0)
@@ -982,7 +1046,7 @@
         if (r < 0 && errno != EEXIST)
                 return log_error_errno(errno, "Failed to create %s: %m", directory);
 
-        options = "mode=755" TMPFS_LIMITS_VOLATILE_STATE;
+        options = "mode=0755" TMPFS_LIMITS_VOLATILE_STATE;
         r = tmpfs_patch_options(options, uid_shift == 0 ? UID_INVALID : uid_shift, selinux_apifs_context, &buf);
         if (r < 0)
                 return log_oom();
@@ -1026,7 +1090,7 @@
         if (!mkdtemp(template))
                 return log_error_errno(errno, "Failed to create temporary directory: %m");
 
-        options = "mode=755" TMPFS_LIMITS_ROOTFS;
+        options = "mode=0755" TMPFS_LIMITS_ROOTFS;
         r = tmpfs_patch_options(options, uid_shift == 0 ? UID_INVALID : uid_shift, selinux_apifs_context, &buf);
         if (r < 0)
                 goto fail;
@@ -1093,7 +1157,7 @@
         if (!mkdtemp(template))
                 return log_error_errno(errno, "Failed to create temporary directory: %m");
 
-        options = "mode=755" TMPFS_LIMITS_ROOTFS;
+        options = "mode=0755" TMPFS_LIMITS_ROOTFS;
         r = tmpfs_patch_options(options, uid_shift == 0 ? UID_INVALID : uid_shift, selinux_apifs_context, &buf);
         if (r < 0)
                 goto finish;
@@ -1213,10 +1277,9 @@
          * This requires a temporary directory, pivot_tmp, which is
          * not a child of either.
          *
-         * This is typically used for OSTree-style containers, where
-         * the root partition contains several sysroots which could be
-         * run. Normally, one would be chosen by the bootloader and
-         * pivoted to / by initramfs.
+         * This is typically used for OSTree-style containers, where the root partition contains several
+         * sysroots which could be run. Normally, one would be chosen by the bootloader and pivoted to / by
+         * initrd.
          *
          * For example, for an OSTree deployment, pivot_root_new
          * would be: /ostree/deploy/$os/deploy/$checksum. Note that this
@@ -1280,3 +1343,60 @@
 
         return r;
 }
+
+#define NSPAWN_PRIVATE_FULLY_VISIBLE_PROCFS "/run/host/proc"
+#define NSPAWN_PRIVATE_FULLY_VISIBLE_SYSFS "/run/host/sys"
+
+int pin_fully_visible_fs(void) {
+        int r;
+
+        (void) mkdir_p(NSPAWN_PRIVATE_FULLY_VISIBLE_PROCFS, 0755);
+        (void) mkdir_p(NSPAWN_PRIVATE_FULLY_VISIBLE_SYSFS, 0755);
+
+        r = mount_follow_verbose(LOG_ERR, "proc", NSPAWN_PRIVATE_FULLY_VISIBLE_PROCFS, "proc", PROC_DEFAULT_MOUNT_FLAGS, NULL);
+        if (r < 0)
+                return r;
+
+        r = mount_follow_verbose(LOG_ERR, "sysfs", NSPAWN_PRIVATE_FULLY_VISIBLE_SYSFS, "sysfs", SYS_DEFAULT_MOUNT_FLAGS, NULL);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static int do_wipe_fully_visible_fs(void) {
+        if (umount2(NSPAWN_PRIVATE_FULLY_VISIBLE_PROCFS, MNT_DETACH) < 0)
+                return log_error_errno(errno, "Failed to unmount temporary proc: %m");
+
+        if (rmdir(NSPAWN_PRIVATE_FULLY_VISIBLE_PROCFS) < 0)
+                return log_error_errno(errno, "Failed to remove temporary proc mountpoint: %m");
+
+        if (umount2(NSPAWN_PRIVATE_FULLY_VISIBLE_SYSFS, MNT_DETACH) < 0)
+                return log_error_errno(errno, "Failed to unmount temporary sys: %m");
+
+        if (rmdir(NSPAWN_PRIVATE_FULLY_VISIBLE_SYSFS) < 0)
+                return log_error_errno(errno, "Failed to remove temporary sys mountpoint: %m");
+
+        return 0;
+}
+
+int wipe_fully_visible_fs(int mntns_fd) {
+        _cleanup_close_ int orig_mntns_fd = -EBADF;
+        int r, rr;
+
+        r = namespace_open(0, NULL, &orig_mntns_fd, NULL, NULL, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to pin originating mount namespace: %m");
+
+        r = namespace_enter(-EBADF, mntns_fd, -EBADF, -EBADF, -EBADF);
+        if (r < 0)
+                return log_error_errno(r, "Failed to enter mount namespace: %m");
+
+        rr = do_wipe_fully_visible_fs();
+
+        r = namespace_enter(-EBADF, orig_mntns_fd, -EBADF, -EBADF, -EBADF);
+        if (r < 0)
+                return log_error_errno(r, "Failed to enter original mount namespace: %m");
+
+        return rr;
+}
diff --git a/src/nspawn/nspawn-mount.h b/src/nspawn/nspawn-mount.h
index e19b2cc..bf5e47d 100644
--- a/src/nspawn/nspawn-mount.h
+++ b/src/nspawn/nspawn-mount.h
@@ -58,7 +58,7 @@
 int mount_all(const char *dest, MountSettingsMask mount_settings, uid_t uid_shift, const char *selinux_apifs_context);
 int mount_sysfs(const char *dest, MountSettingsMask mount_settings);
 
-int mount_custom(const char *dest, CustomMount *mounts, size_t n, uid_t uid_shift, const char *selinux_apifs_context, MountSettingsMask mount_settings);
+int mount_custom(const char *dest, CustomMount *mounts, size_t n, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context, MountSettingsMask mount_settings);
 bool has_custom_root_mount(const CustomMount *mounts, size_t n);
 
 int setup_volatile_mode(const char *directory, VolatileMode mode, uid_t uid_shift, const char *selinux_apifs_context);
@@ -67,3 +67,5 @@
 int setup_pivot_root(const char *directory, const char *pivot_root_new, const char *pivot_root_old);
 
 int tmpfs_patch_options(const char *options,uid_t uid_shift, const char *selinux_apifs_context, char **ret);
+int pin_fully_visible_fs(void);
+int wipe_fully_visible_fs(int mntns_fd);
diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c
index 023b1e7..3a0e155 100644
--- a/src/nspawn/nspawn-network.c
+++ b/src/nspawn/nspawn-network.c
@@ -25,7 +25,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "udev-util.h"
-#include "util.h"
 
 #define HOST_HASH_KEY SD_ID128_MAKE(1a,37,6f,c7,46,ec,45,0b,ad,a3,d5,31,06,60,5d,b1)
 #define CONTAINER_HASH_KEY SD_ID128_MAKE(c3,c4,f9,19,b5,57,b2,1c,e6,cf,14,27,03,9c,ee,a2)
@@ -288,7 +287,6 @@
 
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         uint64_t idx = 0;
-        char **a, **b;
         int r;
 
         assert(machine_name);
@@ -450,7 +448,7 @@
 
         path = strjoina("/sys/class/net/", bridge_name, "/brif");
 
-        r = dir_is_empty(path);
+        r = dir_is_empty(path, /* ignore_hidden_or_backup= */ false);
         if (r == -ENOENT) /* Already gone? */
                 return 0;
         if (r < 0)
@@ -469,7 +467,7 @@
         _cleanup_(sd_device_unrefp) sd_device *d = NULL;
         int r;
 
-        if (path_is_read_only_fs("/sys") > 0)
+        if (!udev_available())
                 return 0;
 
         /* udev should be around. */
@@ -495,7 +493,6 @@
 
 int move_network_interfaces(int netns_fd, char **ifaces) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        char **i;
         int r;
 
         if (strv_isempty(ifaces))
@@ -532,7 +529,6 @@
 int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         unsigned idx = 0;
-        char **i;
         int r;
 
         if (strv_isempty(ifaces))
@@ -619,7 +615,6 @@
 
 int setup_ipvlan(const char *machine_name, pid_t pid, char **ifaces) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        char **i;
         int r;
 
         if (strv_isempty(ifaces))
@@ -728,7 +723,6 @@
 
 int remove_veth_links(const char *primary, char **pairs) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        char **a, **b;
         int r;
 
         /* In some cases the kernel might pin the veth links between host and container even after the namespace
diff --git a/src/nspawn/nspawn-oci.c b/src/nspawn/nspawn-oci.c
index 1db69b4..3c6bfd3 100644
--- a/src/nspawn/nspawn-oci.c
+++ b/src/nspawn/nspawn-oci.c
@@ -8,6 +8,8 @@
 #include "bus-util.h"
 #include "cap-list.h"
 #include "cpu-set-util.h"
+#include "device-util.h"
+#include "devnum-util.h"
 #include "env-util.h"
 #include "format-util.h"
 #include "fs-util.h"
@@ -20,7 +22,6 @@
 #if HAVE_SECCOMP
 #include "seccomp-util.h"
 #endif
-#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
@@ -48,7 +49,7 @@
  * should escaping be applied when joining mount options with ","?
  * devices cgroup support is bogus, "allow" and "deny" on the kernel level is about adding/removing entries, not about access
  * spec needs to say that "rwm" devices cgroup combination can't be the empty string
- * cgrouspv1 crap: kernel, kernelTCP, swapiness, disableOOMKiller, swap, devices, leafWeight
+ * cgrouspv1 crap: kernel, kernelTCP, swappiness, disableOOMKiller, swap, devices, leafWeight
  * general: it shouldn't leak lower level abstractions this obviously
  * unmanagable cgroups stuff: realtimeRuntime/realtimePeriod
  * needs to say what happense when some option is not specified, i.e. which defaults apply
@@ -98,10 +99,8 @@
 }
 
 static int oci_console_dimension(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        unsigned *u = userdata;
-        uintmax_t k;
-
-        assert(u);
+        unsigned *u = ASSERT_PTR(userdata);
+        uint64_t k;
 
         k = json_variant_unsigned(variant);
         if (k == 0)
@@ -127,11 +126,9 @@
 }
 
 static int oci_absolute_path(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        char **p = userdata;
+        char **p = ASSERT_PTR(userdata);
         const char *n;
 
-        assert(p);
-
         n = json_variant_string(v);
 
         if (!path_is_absolute(n))
@@ -142,12 +139,10 @@
 }
 
 static int oci_env(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        char ***l = userdata;
+        char ***l = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(l);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 const char *n;
 
@@ -171,11 +166,9 @@
 
 static int oci_args(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         _cleanup_strv_free_ char **l = NULL;
-        char ***value = userdata;
+        char ***value = ASSERT_PTR(userdata);
         int r;
 
-        assert(value);
-
         r = json_variant_strv(v, &l);
         if (r < 0)
                 return json_log(v, flags, r, "Cannot parse arguments as list of strings: %m");
@@ -213,9 +206,7 @@
 }
 
 static int oci_rlimit_value(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        rlim_t z, *value = userdata;
-
-        assert(value);
+        rlim_t z, *value = ASSERT_PTR(userdata);
 
         if (json_variant_is_negative(v))
                 z = RLIM_INFINITY;
@@ -226,7 +217,7 @@
 
                 z = (rlim_t) json_variant_unsigned(v);
 
-                if ((uintmax_t) z != json_variant_unsigned(v))
+                if ((uint64_t) z != json_variant_unsigned(v))
                         return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
                                         "rlimits limit out of range, refusing.");
         }
@@ -237,12 +228,10 @@
 
 static int oci_rlimits(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
 
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
 
                 struct rlimit_data {
@@ -327,11 +316,9 @@
                 {}
         };
 
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         int r;
 
-        assert(s);
-
         r = json_dispatch(v, table, oci_unexpected, flags, &s->full_capabilities);
         if (r < 0)
                 return r;
@@ -345,15 +332,13 @@
 }
 
 static int oci_oom_score_adj(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
-        intmax_t k;
-
-        assert(s);
+        Settings *s = ASSERT_PTR(userdata);
+        int64_t k;
 
         k = json_variant_integer(v);
         if (k < OOM_SCORE_ADJ_MIN || k > OOM_SCORE_ADJ_MAX)
                 return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
-                                "oomScoreAdj value out of range: %ji", k);
+                                "oomScoreAdj value out of range: %" PRIi64, k);
 
         s->oom_score_adjust = (int) k;
         s->oom_score_adjust_set = true;
@@ -363,16 +348,16 @@
 
 static int oci_uid_gid(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         uid_t *uid = userdata, u;
-        uintmax_t k;
+        uint64_t k;
 
         assert(uid);
         assert_cc(sizeof(uid_t) == sizeof(gid_t));
 
         k = json_variant_unsigned(v);
         u = (uid_t) k;
-        if ((uintmax_t) u != k)
+        if ((uint64_t) u != k)
                 return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
-                                "UID/GID out of range: %ji", k);
+                                "UID/GID out of range: %" PRIu64, k);
 
         if (!uid_is_valid(u))
                 return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
@@ -383,12 +368,10 @@
 }
 
 static int oci_supplementary_gids(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 gid_t gid, *a;
 
@@ -471,11 +454,9 @@
 }
 
 static int oci_hostname(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         const char *n;
 
-        assert(s);
-
         assert_se(n = json_variant_string(v));
 
         if (!hostname_is_valid(n, 0))
@@ -538,12 +519,10 @@
 }
 
 static int oci_mounts(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 static const JsonDispatch table[] = {
                         { "destination", JSON_VARIANT_STRING, oci_absolute_path,    offsetof(oci_mount_data, destination), JSON_MANDATORY },
@@ -603,10 +582,9 @@
 }
 
 static int oci_namespace_type(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        unsigned long *nsflags = userdata;
+        unsigned long *nsflags = ASSERT_PTR(userdata);
         const char *n;
 
-        assert(nsflags);
         assert_se(n = json_variant_string(v));
 
         /* We don't use namespace_flags_from_string() here, as the OCI spec uses slightly different names than the
@@ -698,7 +676,7 @@
 
 static int oci_uid_gid_range(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         uid_t *uid = userdata, u;
-        uintmax_t k;
+        uint64_t k;
 
         assert(uid);
         assert_cc(sizeof(uid_t) == sizeof(gid_t));
@@ -709,9 +687,9 @@
 
         k = json_variant_unsigned(v);
         u = (uid_t) k;
-        if ((uintmax_t) u != k)
+        if ((uint64_t) u != k)
                 return json_log(v, flags, SYNTHETIC_ERRNO(ERANGE),
-                                "UID/GID out of range: %ji", k);
+                                "UID/GID out of range: %" PRIu64, k);
         if (u == 0)
                 return json_log(v, flags, SYNTHETIC_ERRNO(ERANGE),
                                 "UID/GID range can't be zero.");
@@ -738,12 +716,10 @@
                 {}
         };
 
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         if (json_variant_elements(v) == 0)
                 return 0;
 
@@ -782,10 +758,9 @@
 }
 
 static int oci_device_type(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        mode_t *mode = userdata;
+        mode_t *mode = ASSERT_PTR(userdata);
         const char *t;
 
-        assert(mode);
         assert_se(t = json_variant_string(v));
 
         if (STR_IN_SET(t, "c", "u"))
@@ -803,14 +778,14 @@
 
 static int oci_device_major(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         unsigned *u = userdata;
-        uintmax_t k;
+        uint64_t k;
 
         assert_se(u);
 
         k = json_variant_unsigned(v);
         if (!DEVICE_MAJOR_VALID(k))
                 return json_log(v, flags, SYNTHETIC_ERRNO(ERANGE),
-                                "Device major %ji out of range.", k);
+                                "Device major %" PRIu64 " out of range.", k);
 
         *u = (unsigned) k;
         return 0;
@@ -818,14 +793,14 @@
 
 static int oci_device_minor(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         unsigned *u = userdata;
-        uintmax_t k;
+        uint64_t k;
 
         assert_se(u);
 
         k = json_variant_unsigned(v);
         if (!DEVICE_MINOR_VALID(k))
                 return json_log(v, flags, SYNTHETIC_ERRNO(ERANGE),
-                                "Device minor %ji out of range.", k);
+                                "Device minor %" PRIu64 " out of range.", k);
 
         *u = (unsigned) k;
         return 0;
@@ -833,14 +808,14 @@
 
 static int oci_device_file_mode(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         mode_t *mode = userdata, m;
-        uintmax_t k;
+        uint64_t k;
 
         assert(mode);
 
         k = json_variant_unsigned(v);
         m = (mode_t) k;
 
-        if ((m & ~07777) != 0 || (uintmax_t) m != k)
+        if ((m & ~07777) != 0 || (uint64_t) m != k)
                 return json_log(v, flags, SYNTHETIC_ERRNO(ERANGE),
                                 "fileMode out of range, refusing.");
 
@@ -849,12 +824,10 @@
 }
 
 static int oci_devices(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
 
                 static const JsonDispatch table[] = {
@@ -899,7 +872,7 @@
                         }
 
                         /* Suppress a couple of implicit device nodes */
-                        r = device_path_make_canonical(node->mode, makedev(node->major, node->minor), &path);
+                        r = devname_from_devnum(node->mode, makedev(node->major, node->minor), &path);
                         if (r < 0)
                                 json_log(e, flags|JSON_DEBUG, 0, "Failed to resolve device node %u:%u, ignoring: %m", node->major, node->minor);
                         else {
@@ -935,12 +908,10 @@
 
 static int oci_cgroups_path(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         _cleanup_free_ char *slice = NULL, *backwards = NULL;
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         const char *p;
         int r;
 
-        assert(s);
-
         assert_se(p = json_variant_string(v));
 
         r = cg_path_get_slice(p, &slice);
@@ -1015,14 +986,12 @@
 static int oci_cgroup_devices(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
 
         _cleanup_free_ struct device_data *list = NULL;
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         size_t n_list = 0, i;
         bool noop = false;
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
 
                 struct device_data data = {
@@ -1174,10 +1143,8 @@
 }
 
 static int oci_cgroup_memory_limit(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        uint64_t *m = userdata;
-        uintmax_t k;
-
-        assert(m);
+        uint64_t *m = ASSERT_PTR(userdata);
+        uint64_t k;
 
         if (json_variant_is_negative(v)) {
                 *m = UINT64_MAX;
@@ -1191,7 +1158,7 @@
         k = json_variant_unsigned(v);
         if (k >= UINT64_MAX)
                 return json_log(v, flags, SYNTHETIC_ERRNO(ERANGE),
-                                "Memory limit too large: %ji", k);
+                                "Memory limit too large: %" PRIu64, k);
 
         *m = (uint64_t) k;
         return 0;
@@ -1274,10 +1241,8 @@
 };
 
 static int oci_cgroup_cpu_shares(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        uint64_t *u = userdata;
-        uintmax_t k;
-
-        assert(u);
+        uint64_t *u = ASSERT_PTR(userdata);
+        uint64_t k;
 
         k = json_variant_unsigned(v);
         if (k < CGROUP_CPU_SHARES_MIN || k > CGROUP_CPU_SHARES_MAX)
@@ -1289,10 +1254,8 @@
 }
 
 static int oci_cgroup_cpu_quota(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        uint64_t *u = userdata;
-        uintmax_t k;
-
-        assert(u);
+        uint64_t *u = ASSERT_PTR(userdata);
+        uint64_t k;
 
         k = json_variant_unsigned(v);
         if (k <= 0 || k >= UINT64_MAX)
@@ -1304,13 +1267,11 @@
 }
 
 static int oci_cgroup_cpu_cpus(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        struct cpu_data *data = userdata;
+        struct cpu_data *data = ASSERT_PTR(userdata);
         CPUSet set;
         const char *n;
         int r;
 
-        assert(data);
-
         assert_se(n = json_variant_string(v));
 
         r = parse_cpu_set(n, &set);
@@ -1381,12 +1342,10 @@
 }
 
 static int oci_cgroup_block_io_weight(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
-        uintmax_t k;
+        Settings *s = ASSERT_PTR(userdata);
+        uint64_t k;
         int r;
 
-        assert(s);
-
         k = json_variant_unsigned(v);
         if (k < CGROUP_BLKIO_WEIGHT_MIN || k > CGROUP_BLKIO_WEIGHT_MAX)
                 return json_log(v, flags, SYNTHETIC_ERRNO(ERANGE),
@@ -1404,28 +1363,26 @@
 }
 
 static int oci_cgroup_block_io_weight_device(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 struct device_data {
                         unsigned major;
                         unsigned minor;
-                        uintmax_t weight;
+                        uint64_t weight;
                 } data = {
                         .major = UINT_MAX,
                         .minor = UINT_MAX,
-                        .weight = UINTMAX_MAX,
+                        .weight = UINT64_MAX,
                 };
 
                 static const JsonDispatch table[] =  {
-                        { "major",      JSON_VARIANT_UNSIGNED, oci_device_major,       offsetof(struct device_data, major),  JSON_MANDATORY  },
-                        { "minor",      JSON_VARIANT_UNSIGNED, oci_device_minor,       offsetof(struct device_data, minor),  JSON_MANDATORY  },
-                        { "weight",     JSON_VARIANT_UNSIGNED, json_dispatch_uintmax,  offsetof(struct device_data, weight), 0               },
-                        { "leafWeight", JSON_VARIANT_INTEGER,  oci_unsupported,        0,                                    JSON_PERMISSIVE },
+                        { "major",      JSON_VARIANT_UNSIGNED, oci_device_major,     offsetof(struct device_data, major),  JSON_MANDATORY  },
+                        { "minor",      JSON_VARIANT_UNSIGNED, oci_device_minor,     offsetof(struct device_data, minor),  JSON_MANDATORY  },
+                        { "weight",     JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(struct device_data, weight), 0               },
+                        { "leafWeight", JSON_VARIANT_INTEGER,  oci_unsupported,      0,                                    JSON_PERMISSIVE },
                         {}
                 };
 
@@ -1435,7 +1392,7 @@
                 if (r < 0)
                         return r;
 
-                if (data.weight == UINTMAX_MAX)
+                if (data.weight == UINT64_MAX)
                         continue;
 
                 if (data.weight < CGROUP_BLKIO_WEIGHT_MIN || data.weight > CGROUP_BLKIO_WEIGHT_MAX)
@@ -1459,13 +1416,11 @@
 }
 
 static int oci_cgroup_block_io_throttle(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         const char *pname;
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         pname = streq(name, "throttleReadBpsDevice")  ? "IOReadBandwidthMax" :
                 streq(name, "throttleWriteBpsDevice") ? "IOWriteBandwidthMax" :
                 streq(name, "throttleReadIOPSDevice") ? "IOReadIOPSMax" :
@@ -1475,16 +1430,16 @@
                 struct device_data {
                         unsigned major;
                         unsigned minor;
-                        uintmax_t rate;
+                        uint64_t rate;
                 } data = {
                         .major = UINT_MAX,
                         .minor = UINT_MAX,
                 };
 
                 static const JsonDispatch table[] = {
-                        { "major", JSON_VARIANT_UNSIGNED, oci_device_major,       offsetof(struct device_data, major), JSON_MANDATORY },
-                        { "minor", JSON_VARIANT_UNSIGNED, oci_device_minor,       offsetof(struct device_data, minor), JSON_MANDATORY },
-                        { "rate",  JSON_VARIANT_UNSIGNED, json_dispatch_uintmax,  offsetof(struct device_data, rate),  JSON_MANDATORY },
+                        { "major", JSON_VARIANT_UNSIGNED, oci_device_major,     offsetof(struct device_data, major), JSON_MANDATORY },
+                        { "minor", JSON_VARIANT_UNSIGNED, oci_device_minor,     offsetof(struct device_data, minor), JSON_MANDATORY },
+                        { "rate",  JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(struct device_data, rate),  JSON_MANDATORY },
                         {}
                 };
 
@@ -1538,12 +1493,10 @@
         };
 
         _cleanup_(json_variant_unrefp) JsonVariant *k = NULL;
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         uint64_t m;
         int r;
 
-        assert(s);
-
         r = json_dispatch(v, table, oci_unexpected, flags, &k);
         if (r < 0)
                 return r;
@@ -1557,7 +1510,7 @@
 
                 m = (uint64_t) json_variant_unsigned(k);
 
-                if ((uintmax_t) m != json_variant_unsigned(k))
+                if ((uint64_t) m != json_variant_unsigned(k))
                         return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
                                         "pids limit out of range, refusing.");
         }
@@ -1622,13 +1575,11 @@
 }
 
 static int oci_sysctl(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *w;
         const char *k;
         int r;
 
-        assert(s);
-
         JSON_VARIANT_OBJECT_FOREACH(k, w, v) {
                 const char *m;
 
@@ -1758,12 +1709,10 @@
 }
 
 static int oci_seccomp_archs(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        scmp_filter_ctx *sc = userdata;
+        scmp_filter_ctx *sc = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(sc);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 uint32_t a;
 
@@ -1800,11 +1749,9 @@
 };
 
 static int oci_seccomp_action(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        uint32_t *action = userdata;
+        uint32_t *action = ASSERT_PTR(userdata);
         int r;
 
-        assert(action);
-
         r = oci_seccomp_action_from_string(json_variant_string(v), action);
         if (r < 0)
                 return json_log(v, flags, r, "Unknown system call action '%s': %m", json_variant_string(v));
@@ -1813,11 +1760,9 @@
 }
 
 static int oci_seccomp_op(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        enum scmp_compare *op = userdata;
+        enum scmp_compare *op = ASSERT_PTR(userdata);
         int r;
 
-        assert(op);
-
         r = oci_seccomp_compare_from_string(json_variant_string(v), op);
         if (r < 0)
                 return json_log(v, flags, r, "Unknown seccomp operator '%s': %m", json_variant_string(v));
@@ -1826,12 +1771,10 @@
 }
 
 static int oci_seccomp_args(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        struct syscall_rule *rule = userdata;
+        struct syscall_rule *rule = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(rule);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 static const struct JsonDispatch table[] = {
                         { "index",    JSON_VARIANT_UNSIGNED, json_dispatch_uint32, offsetof(struct scmp_arg_cmp, arg),     JSON_MANDATORY },
@@ -1864,7 +1807,7 @@
 
                 expected = p->op == SCMP_CMP_MASKED_EQ ? 4 : 3;
                 if (r != expected)
-                        json_log(e, flags|JSON_WARNING, 0, "Wrong number of system call arguments for JSON data data, ignoring.");
+                        json_log(e, flags|JSON_WARNING, 0, "Wrong number of system call arguments for JSON data, ignoring.");
 
                 /* Note that we are a bit sloppy here and do not insist that SCMP_CMP_MASKED_EQ gets two datum values,
                  * and the other only one. That's because buildah for example by default calls things with
@@ -1877,12 +1820,10 @@
 }
 
 static int oci_seccomp_syscalls(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        scmp_filter_ctx *sc = userdata;
+        scmp_filter_ctx *sc = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(sc);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 static const JsonDispatch table[] = {
                         { "names",  JSON_VARIANT_ARRAY,  json_dispatch_strv, offsetof(struct syscall_rule, names),  JSON_MANDATORY },
@@ -1892,7 +1833,6 @@
                 struct syscall_rule rule = {
                         .action = UINT32_MAX,
                 };
-                char **i;
 
                 r = json_dispatch(e, table, oci_unexpected, flags, &rule);
                 if (r < 0)
@@ -1941,13 +1881,11 @@
         };
 
         _cleanup_(seccomp_releasep) scmp_filter_ctx sc = NULL;
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *def;
         uint32_t d;
         int r;
 
-        assert(s);
-
         def = json_variant_by_key(v, "defaultAction");
         if (!def)
                 return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL), "defaultAction element missing.");
@@ -1988,11 +1926,9 @@
 }
 
 static int oci_masked_paths(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 _cleanup_free_ char *destination = NULL;
                 CustomMount *m;
@@ -2006,7 +1942,7 @@
 
                 if (!path_is_absolute(p))
                         return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
-                                        "Path is not not absolute, refusing: %s", p);
+                                        "Path is not absolute, refusing: %s", p);
 
                 if (oci_exclude_mount(p))
                         continue;
@@ -2030,11 +1966,9 @@
 }
 
 static int oci_readonly_paths(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
                 _cleanup_free_ char *source = NULL, *destination = NULL;
                 CustomMount *m;
@@ -2048,7 +1982,7 @@
 
                 if (!path_is_absolute(p))
                         return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
-                                        "Path is not not absolute, refusing: %s", p);
+                                        "Path is not absolute, refusing: %s", p);
 
                 if (oci_exclude_mount(p))
                         continue;
@@ -2097,7 +2031,7 @@
 
 static int oci_hook_timeout(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         usec_t *u = userdata;
-        uintmax_t k;
+        uint64_t k;
 
         k = json_variant_unsigned(v);
         if (k == 0 || k > (UINT64_MAX-1)/USEC_PER_SEC)
@@ -2109,12 +2043,10 @@
 }
 
 static int oci_hooks_array(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        Settings *s = userdata;
+        Settings *s = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
-        assert(s);
-
         JSON_VARIANT_ARRAY_FOREACH(e, v) {
 
                 static const JsonDispatch table[] = {
diff --git a/src/nspawn/nspawn-patch-uid.c b/src/nspawn/nspawn-patch-uid.c
index 785332e..21a1707 100644
--- a/src/nspawn/nspawn-patch-uid.c
+++ b/src/nspawn/nspawn-patch-uid.c
@@ -22,27 +22,23 @@
 #if HAVE_ACL
 
 static int get_acl(int fd, const char *name, acl_type_t type, acl_t *ret) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
         acl_t acl;
 
         assert(fd >= 0);
         assert(ret);
 
         if (name) {
-                _cleanup_close_ int child_fd = -1;
+                _cleanup_close_ int child_fd = -EBADF;
 
                 child_fd = openat(fd, name, O_PATH|O_CLOEXEC|O_NOFOLLOW);
                 if (child_fd < 0)
                         return -errno;
 
-                xsprintf(procfs_path, "/proc/self/fd/%i", child_fd);
-                acl = acl_get_file(procfs_path, type);
+                acl = acl_get_file(FORMAT_PROC_FD_PATH(child_fd), type);
         } else if (type == ACL_TYPE_ACCESS)
                 acl = acl_get_fd(fd);
-        else {
-                xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-                acl = acl_get_file(procfs_path, type);
-        }
+        else
+                acl = acl_get_file(FORMAT_PROC_FD_PATH(fd), type);
         if (!acl)
                 return -errno;
 
@@ -51,27 +47,23 @@
 }
 
 static int set_acl(int fd, const char *name, acl_type_t type, acl_t acl) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
         int r;
 
         assert(fd >= 0);
         assert(acl);
 
         if (name) {
-                _cleanup_close_ int child_fd = -1;
+                _cleanup_close_ int child_fd = -EBADF;
 
                 child_fd = openat(fd, name, O_PATH|O_CLOEXEC|O_NOFOLLOW);
                 if (child_fd < 0)
                         return -errno;
 
-                xsprintf(procfs_path, "/proc/self/fd/%i", child_fd);
-                r = acl_set_file(procfs_path, type, acl);
+                r = acl_set_file(FORMAT_PROC_FD_PATH(child_fd), type, acl);
         } else if (type == ACL_TYPE_ACCESS)
                 r = acl_set_fd(fd, acl);
-        else {
-                xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-                r = acl_set_file(procfs_path, type, acl);
-        }
+        else
+                r = acl_set_file(FORMAT_PROC_FD_PATH(fd), type, acl);
         if (r < 0)
                 return -errno;
 
@@ -189,7 +181,9 @@
 
         if (S_ISDIR(st->st_mode)) {
                 acl_free(acl);
-                acl_free(shifted);
+
+                if (shifted)
+                        acl_free(shifted);
 
                 acl = shifted = NULL;
 
@@ -321,8 +315,6 @@
                 goto read_only;
 
         if (S_ISDIR(st->st_mode)) {
-                struct dirent *de;
-
                 if (!donate_fd) {
                         int copy;
 
diff --git a/src/nspawn/nspawn-register.c b/src/nspawn/nspawn-register.c
index c78bead..8995e0f 100644
--- a/src/nspawn/nspawn-register.c
+++ b/src/nspawn/nspawn-register.c
@@ -11,7 +11,6 @@
 #include "special.h"
 #include "stat-util.h"
 #include "strv.h"
-#include "util.h"
 
 static int append_machine_properties(
                 sd_bus_message *m,
diff --git a/src/nspawn/nspawn-seccomp.c b/src/nspawn/nspawn-seccomp.c
index c94512e..3d666ee 100644
--- a/src/nspawn/nspawn-seccomp.c
+++ b/src/nspawn/nspawn-seccomp.c
@@ -33,89 +33,90 @@
                 const char* name;
         } allow_list[] = {
                 /* Let's use set names where we can */
-                { 0,                  "@aio"                   },
-                { 0,                  "@basic-io"              },
-                { 0,                  "@chown"                 },
-                { 0,                  "@default"               },
-                { 0,                  "@file-system"           },
-                { 0,                  "@io-event"              },
-                { 0,                  "@ipc"                   },
-                { 0,                  "@mount"                 },
-                { 0,                  "@network-io"            },
-                { 0,                  "@process"               },
-                { 0,                  "@resources"             },
-                { 0,                  "@setuid"                },
-                { 0,                  "@signal"                },
-                { 0,                  "@sync"                  },
-                { 0,                  "@timer"                 },
+                { 0,                  "@aio"                         },
+                { 0,                  "@basic-io"                    },
+                { 0,                  "@chown"                       },
+                { 0,                  "@default"                     },
+                { 0,                  "@file-system"                 },
+                { 0,                  "@io-event"                    },
+                { 0,                  "@ipc"                         },
+                { 0,                  "@mount"                       },
+                { 0,                  "@network-io"                  },
+                { 0,                  "@process"                     },
+                { 0,                  "@resources"                   },
+                { 0,                  "@setuid"                      },
+                { 0,                  "@signal"                      },
+                { 0,                  "@sync"                        },
+                { 0,                  "@timer"                       },
 
-                /* The following four are sets we optionally enable, in case the caps have been configured for it */
-                { CAP_SYS_TIME,       "@clock"                 },
-                { CAP_SYS_MODULE,     "@module"                },
-                { CAP_SYS_RAWIO,      "@raw-io"                },
-                { CAP_IPC_LOCK,       "@memlock"               },
+                /* The following four are sets we optionally enable, n case the caps have been configured for it */
+                { CAP_SYS_TIME,       "@clock"                       },
+                { CAP_SYS_MODULE,     "@module"                      },
+                { CAP_SYS_RAWIO,      "@raw-io"                      },
+                { CAP_IPC_LOCK,       "@memlock"                     },
 
                 /* Plus a good set of additional syscalls which are not part of any of the groups above */
-                { 0,                  "brk"                    },
-                { 0,                  "capget"                 },
-                { 0,                  "capset"                 },
-                { 0,                  "copy_file_range"        },
-                { 0,                  "fadvise64"              },
-                { 0,                  "fadvise64_64"           },
-                { 0,                  "flock"                  },
-                { 0,                  "get_mempolicy"          },
-                { 0,                  "getcpu"                 },
-                { 0,                  "getpriority"            },
-                { 0,                  "getrandom"              },
-                { 0,                  "ioctl"                  },
-                { 0,                  "ioprio_get"             },
-                { 0,                  "kcmp"                   },
-                { 0,                  "madvise"                },
-                { 0,                  "mincore"                },
-                { 0,                  "mprotect"               },
-                { 0,                  "mremap"                 },
-                { 0,                  "name_to_handle_at"      },
-                { 0,                  "oldolduname"            },
-                { 0,                  "olduname"               },
-                { 0,                  "personality"            },
-                { 0,                  "readahead"              },
-                { 0,                  "readdir"                },
-                { 0,                  "remap_file_pages"       },
-                { 0,                  "sched_get_priority_max" },
-                { 0,                  "sched_get_priority_min" },
-                { 0,                  "sched_getaffinity"      },
-                { 0,                  "sched_getattr"          },
-                { 0,                  "sched_getparam"         },
-                { 0,                  "sched_getscheduler"     },
-                { 0,                  "sched_rr_get_interval"  },
-                { 0,                  "sched_yield"            },
-                { 0,                  "seccomp"                },
-                { 0,                  "sendfile"               },
-                { 0,                  "sendfile64"             },
-                { 0,                  "setdomainname"          },
-                { 0,                  "setfsgid"               },
-                { 0,                  "setfsgid32"             },
-                { 0,                  "setfsuid"               },
-                { 0,                  "setfsuid32"             },
-                { 0,                  "sethostname"            },
-                { 0,                  "setpgid"                },
-                { 0,                  "setsid"                 },
-                { 0,                  "splice"                 },
-                { 0,                  "sysinfo"                },
-                { 0,                  "tee"                    },
-                { 0,                  "umask"                  },
-                { 0,                  "uname"                  },
-                { 0,                  "userfaultfd"            },
-                { 0,                  "vmsplice"               },
+                { 0,                  "brk"                          },
+                { 0,                  "capget"                       },
+                { 0,                  "capset"                       },
+                { 0,                  "copy_file_range"              },
+                { 0,                  "fadvise64"                    },
+                { 0,                  "fadvise64_64"                 },
+                { 0,                  "flock"                        },
+                { 0,                  "get_mempolicy"                },
+                { 0,                  "getcpu"                       },
+                { 0,                  "getpriority"                  },
+                { 0,                  "getrandom"                    },
+                { 0,                  "ioctl"                        },
+                { 0,                  "ioprio_get"                   },
+                { 0,                  "kcmp"                         },
+                { 0,                  "madvise"                      },
+                { 0,                  "mincore"                      },
+                { 0,                  "mprotect"                     },
+                { 0,                  "mremap"                       },
+                { 0,                  "name_to_handle_at"            },
+                { 0,                  "oldolduname"                  },
+                { 0,                  "olduname"                     },
+                { 0,                  "personality"                  },
+                { 0,                  "readahead"                    },
+                { 0,                  "readdir"                      },
+                { 0,                  "remap_file_pages"             },
+                { 0,                  "sched_get_priority_max"       },
+                { 0,                  "sched_get_priority_min"       },
+                { 0,                  "sched_getaffinity"            },
+                { 0,                  "sched_getattr"                },
+                { 0,                  "sched_getparam"               },
+                { 0,                  "sched_getscheduler"           },
+                { 0,                  "sched_rr_get_interval"        },
+                { 0,                  "sched_rr_get_interval_time64" },
+                { 0,                  "sched_yield"                  },
+                { 0,                  "seccomp"                      },
+                { 0,                  "sendfile"                     },
+                { 0,                  "sendfile64"                   },
+                { 0,                  "setdomainname"                },
+                { 0,                  "setfsgid"                     },
+                { 0,                  "setfsgid32"                   },
+                { 0,                  "setfsuid"                     },
+                { 0,                  "setfsuid32"                   },
+                { 0,                  "sethostname"                  },
+                { 0,                  "setpgid"                      },
+                { 0,                  "setsid"                       },
+                { 0,                  "splice"                       },
+                { 0,                  "sysinfo"                      },
+                { 0,                  "tee"                          },
+                { 0,                  "umask"                        },
+                { 0,                  "uname"                        },
+                { 0,                  "userfaultfd"                  },
+                { 0,                  "vmsplice"                     },
 
                 /* The following individual syscalls are added depending on specified caps */
-                { CAP_SYS_PACCT,      "acct"                   },
-                { CAP_SYS_PTRACE,     "process_vm_readv"       },
-                { CAP_SYS_PTRACE,     "process_vm_writev"      },
-                { CAP_SYS_PTRACE,     "ptrace"                 },
-                { CAP_SYS_BOOT,       "reboot"                 },
-                { CAP_SYSLOG,         "syslog"                 },
-                { CAP_SYS_TTY_CONFIG, "vhangup"                },
+                { CAP_SYS_PACCT,      "acct"                         },
+                { CAP_SYS_PTRACE,     "process_vm_readv"             },
+                { CAP_SYS_PTRACE,     "process_vm_writev"            },
+                { CAP_SYS_PTRACE,     "ptrace"                       },
+                { CAP_SYS_BOOT,       "reboot"                       },
+                { CAP_SYSLOG,         "syslog"                       },
+                { CAP_SYS_TTY_CONFIG, "vhangup"                      },
 
                 /*
                  * The following syscalls and groups are knowingly excluded:
@@ -140,7 +141,6 @@
         };
 
         _cleanup_strv_free_ char **added = NULL;
-        char **p;
         int r;
 
         for (size_t i = 0; i < ELEMENTSOF(allow_list); i++) {
diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c
index 3847fe4..05bde1c 100644
--- a/src/nspawn/nspawn-settings.c
+++ b/src/nspawn/nspawn-settings.c
@@ -16,7 +16,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 
 Settings *settings_new(void) {
         Settings *s;
@@ -27,6 +26,7 @@
 
         *s = (Settings) {
                 .start_mode = _START_MODE_INVALID,
+                .ephemeral = -1,
                 .personality = PERSONALITY_INVALID,
 
                 .resolv_conf = _RESOLV_CONF_MODE_INVALID,
@@ -57,6 +57,9 @@
 
                 .clone_ns_flags = ULONG_MAX,
                 .use_cgns = -1,
+
+                .notify_ready = -1,
+                .suppress_sync = -1,
         };
 
         return s;
@@ -170,6 +173,8 @@
 bool settings_private_network(Settings *s) {
         assert(s);
 
+        /* Determines whether we shall open up our own private network */
+
         return
                 s->private_network > 0 ||
                 s->network_veth > 0 ||
@@ -190,6 +195,25 @@
                 s->network_zone;
 }
 
+bool settings_network_configured(Settings *s) {
+        assert(s);
+
+        /* Determines whether any network configuration setting was used. (i.e. in contrast to
+         * settings_private_network() above this might also indicate if private networking was explicitly
+         * turned off.) */
+
+        return
+                s->private_network >= 0 ||
+                s->network_veth >= 0 ||
+                s->network_bridge ||
+                s->network_zone ||
+                s->network_interfaces ||
+                s->network_macvlan ||
+                s->network_ipvlan ||
+                s->network_veth_extra ||
+                s->network_namespace_path;
+}
+
 int settings_allocate_properties(Settings *s) {
         _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
         int r;
@@ -285,9 +309,6 @@
                 }
         }
 
-        if (u == 0)
-                return 0;
-
         *result |= u;
         return 0;
 }
@@ -601,6 +622,11 @@
                 settings->userns_mode = USER_NAMESPACE_PICK;
                 settings->uid_shift = UID_INVALID;
                 settings->uid_range = UINT32_C(0x10000);
+        } else if (streq(rvalue, "identity")) {
+                /* identity: User namespacing on, UID range is 0:65536 */
+                settings->userns_mode = USER_NAMESPACE_FIXED;
+                settings->uid_shift = 0;
+                settings->uid_range = UINT32_C(0x10000);
         } else {
                 const char *range, *shift;
                 uid_t sh, rn;
@@ -609,7 +635,7 @@
 
                 range = strchr(rvalue, ':');
                 if (range) {
-                        shift = strndupa(rvalue, range - rvalue);
+                        shift = strndupa_safe(rvalue, range - rvalue);
                         range++;
 
                         r = safe_atou32(range, &rn);
@@ -688,31 +714,6 @@
         }
 }
 
-int config_parse_hostname(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        char **s = data;
-
-        assert(rvalue);
-        assert(s);
-
-        if (!hostname_is_valid(rvalue, 0)) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid hostname, ignoring: %s", rvalue);
-                return 0;
-        }
-
-        return free_and_strdup_warn(s, empty_to_null(rvalue));
-}
-
 int config_parse_oom_score_adjust(
                 const char *unit,
                 const char *filename,
@@ -725,11 +726,10 @@
                 void *data,
                 void *userdata) {
 
-        Settings *settings = data;
+        Settings *settings = ASSERT_PTR(data);
         int oa, r;
 
         assert(rvalue);
-        assert(settings);
 
         if (isempty(rvalue)) {
                 settings->oom_score_adjust_set = false;
@@ -764,10 +764,9 @@
                 void *data,
                 void *userdata) {
 
-        Settings *settings = data;
+        Settings *settings = ASSERT_PTR(data);
 
         assert(rvalue);
-        assert(settings);
 
         return parse_cpu_set_extend(rvalue, &settings->cpu_set, true, unit, filename, line, lvalue);
 }
@@ -842,11 +841,10 @@
                 void *data,
                 void *userdata) {
 
-        Settings *settings = data;
+        Settings *settings = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(settings);
 
         r = parse_link_journal(rvalue, &settings->link_journal, &settings->link_journal_try);
         if (r < 0)
@@ -891,11 +889,10 @@
                 void *data,
                 void *userdata) {
 
-        UserNamespaceOwnership *ownership = data;
+        UserNamespaceOwnership *ownership = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(ownership);
 
         /* Compatibility support for UserNamespaceChown=, whose job has been taken over by UserNamespaceOwnership= */
 
@@ -921,11 +918,10 @@
                 void *data,
                 void *userdata) {
 
-        char ***bind_user = data;
+        char ***bind_user = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(bind_user);
 
         if (isempty(rvalue)) {
                 *bind_user = strv_free(*bind_user);
diff --git a/src/nspawn/nspawn-settings.h b/src/nspawn/nspawn-settings.h
index 939e1c7..004b663 100644
--- a/src/nspawn/nspawn-settings.h
+++ b/src/nspawn/nspawn-settings.h
@@ -127,9 +127,10 @@
         SETTING_CONSOLE_MODE      = UINT64_C(1) << 29,
         SETTING_CREDENTIALS       = UINT64_C(1) << 30,
         SETTING_BIND_USER         = UINT64_C(1) << 31,
-        SETTING_RLIMIT_FIRST      = UINT64_C(1) << 32, /* we define one bit per resource limit here */
-        SETTING_RLIMIT_LAST       = UINT64_C(1) << (32 + _RLIMIT_MAX - 1),
-        _SETTINGS_MASK_ALL        = (UINT64_C(1) << (32 + _RLIMIT_MAX)) -1,
+        SETTING_SUPPRESS_SYNC     = UINT64_C(1) << 32,
+        SETTING_RLIMIT_FIRST      = UINT64_C(1) << 33, /* we define one bit per resource limit here */
+        SETTING_RLIMIT_LAST       = UINT64_C(1) << (33 + _RLIMIT_MAX - 1),
+        _SETTINGS_MASK_ALL        = (UINT64_C(1) << (33 + _RLIMIT_MAX)) -1,
         _SETTING_FORCE_ENUM_WIDTH = UINT64_MAX
 } SettingsMask;
 
@@ -161,7 +162,7 @@
 typedef struct Settings {
         /* [Exec] */
         StartMode start_mode;
-        bool ephemeral;
+        int ephemeral;
         char **parameters;
         char **environment;
         char *user;
@@ -176,7 +177,7 @@
         char *pivot_root_old;
         UserNamespaceMode userns_mode;
         uid_t uid_shift, uid_range;
-        bool notify_ready;
+        int notify_ready;
         char **syscall_allow_list;
         char **syscall_deny_list;
         struct rlimit *rlimit[_RLIMIT_MAX];
@@ -189,6 +190,7 @@
         LinkJournal link_journal;
         bool link_journal_try;
         TimezoneMode timezone;
+        int suppress_sync;
 
         /* [Files] */
         int read_only;
@@ -240,6 +242,8 @@
 
 bool settings_network_veth(Settings *s);
 bool settings_private_network(Settings *s);
+bool settings_network_configured(Settings *s);
+
 int settings_allocate_properties(Settings *s);
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Settings*, settings_free);
@@ -260,7 +264,6 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_pid2);
 CONFIG_PARSER_PROTOTYPE(config_parse_private_users);
 CONFIG_PARSER_PROTOTYPE(config_parse_syscall_filter);
-CONFIG_PARSER_PROTOTYPE(config_parse_hostname);
 CONFIG_PARSER_PROTOTYPE(config_parse_oom_score_adjust);
 CONFIG_PARSER_PROTOTYPE(config_parse_cpu_affinity);
 CONFIG_PARSER_PROTOTYPE(config_parse_resolv_conf);
diff --git a/src/nspawn/nspawn-setuid.c b/src/nspawn/nspawn-setuid.c
index 2639b70..5772d96 100644
--- a/src/nspawn/nspawn-setuid.c
+++ b/src/nspawn/nspawn-setuid.c
@@ -5,19 +5,17 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
-#include "def.h"
+#include "constants.h"
 #include "errno.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "mkdir.h"
 #include "nspawn-setuid.h"
 #include "process-util.h"
-#include "rlimit-util.h"
 #include "signal-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 
 static int spawn_getent(const char *database, const char *key, pid_t *rpid) {
         int pipe_fds[2], r;
@@ -30,7 +28,7 @@
         if (pipe2(pipe_fds, O_CLOEXEC) < 0)
                 return log_error_errno(errno, "Failed to allocate pipe: %m");
 
-        r = safe_fork("(getent)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
+        r = safe_fork("(getent)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG|FORK_RLIMIT_NOFILE_SAFE, &pid);
         if (r < 0) {
                 safe_close_pair(pipe_fds);
                 return r;
@@ -38,15 +36,13 @@
         if (r == 0) {
                 char *empty_env = NULL;
 
-                safe_close(pipe_fds[0]);
+                pipe_fds[0] = safe_close(pipe_fds[0]);
 
-                if (rearrange_stdio(-1, pipe_fds[1], -1) < 0)
+                if (rearrange_stdio(-EBADF, TAKE_FD(pipe_fds[1]), -EBADF) < 0)
                         _exit(EXIT_FAILURE);
 
                 (void) close_all_fds(NULL, 0);
 
-                (void) rlimit_nofile_safe();
-
                 execle("/usr/bin/getent", "getent", database, key, NULL, &empty_env);
                 execle("/bin/getent", "getent", database, key, NULL, &empty_env);
                 _exit(EXIT_FAILURE);
@@ -94,7 +90,7 @@
         _cleanup_free_ gid_t *gids = NULL;
         _cleanup_free_ char *home = NULL, *line = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         unsigned n_gids = 0;
         uid_t uid;
         gid_t gid;
diff --git a/src/nspawn/nspawn-stub-pid1.c b/src/nspawn/nspawn-stub-pid1.c
index 3cbe4ef..47f7155 100644
--- a/src/nspawn/nspawn-stub-pid1.c
+++ b/src/nspawn/nspawn-stub-pid1.c
@@ -6,7 +6,8 @@
 #include <sys/prctl.h>
 #include <unistd.h>
 
-#include "def.h"
+#include "argv-util.h"
+#include "constants.h"
 #include "exit-status.h"
 #include "fd-util.h"
 #include "log.h"
@@ -142,10 +143,8 @@
 
                 if (quit_usec == USEC_INFINITY)
                         r = sigwaitinfo(&waitmask, &si);
-                else {
-                        struct timespec ts;
-                        r = sigtimedwait(&waitmask, &si, timespec_store(&ts, quit_usec - current_usec));
-                }
+                else
+                        r = sigtimedwait(&waitmask, &si, TIMESPEC_STORE(quit_usec - current_usec));
                 if (r < 0) {
                         if (errno == EINTR) /* strace -p attach can result in EINTR, let's handle this nicely. */
                                 continue;
@@ -180,7 +179,7 @@
 
                         state = STATE_REBOOT;
                 else
-                        assert_not_reached("Got unexpected signal");
+                        assert_not_reached();
 
                 r = kill_and_sigcont(pid, SIGTERM);
 
diff --git a/src/nspawn/nspawn-util.c b/src/nspawn/nspawn-util.c
new file mode 100644
index 0000000..6c38489
--- /dev/null
+++ b/src/nspawn/nspawn-util.c
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "glob-util.h"
+#include "log.h"
+#include "nspawn-util.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "string-util.h"
+
+int systemd_installation_has_version(const char *root, const char *minimal_version) {
+        int r;
+
+        /* Try to guess if systemd installation is later than the specified version. This
+         * is hacky and likely to yield false negatives, particularly if the installation
+         * is non-standard. False positives should be relatively rare.
+         */
+
+        FOREACH_STRING(pattern,
+                       /* /lib works for systems without usr-merge, and for systems with a sane
+                        * usr-merge, where /lib is a symlink to /usr/lib. /usr/lib is necessary
+                        * for Gentoo which does a merge without making /lib a symlink.
+                        * Also support multiarch paths von Debian/Ubuntu; *-linux-* is a small
+                        * optimization based on the naming scheme of existing multiarch tuples.
+                        */
+                       "/lib/systemd/libsystemd-shared-*.so",
+                       "/lib64/systemd/libsystemd-shared-*.so",
+                       "/usr/lib/*-linux-*/systemd/libsystemd-shared-*.so",
+                       "/usr/lib/systemd/libsystemd-shared-*.so",
+                       "/usr/lib64/systemd/libsystemd-shared-*.so") {
+
+                _cleanup_strv_free_ char **names = NULL;
+                _cleanup_free_ char *path = NULL;
+                char *c;
+
+                path = path_join(root, pattern);
+                if (!path)
+                        return -ENOMEM;
+
+                r = glob_extend(&names, path, 0);
+                if (r == -ENOENT)
+                        continue;
+                if (r < 0)
+                        return r;
+
+                assert_se(c = endswith(path, "*.so"));
+                *c = '\0'; /* truncate the glob part */
+
+                STRV_FOREACH(name, names) {
+                        _cleanup_free_ char *bn = NULL;
+                        /* This is most likely to run only once, hence let's not optimize anything. */
+                        char *t, *t2;
+
+                        if (path_extract_filename(*name, &bn) < 0)
+                                continue;
+
+                        t = startswith(bn, "libsystemd-shared-");
+                        if (!t)
+                                continue;
+
+                        t2 = endswith(t, ".so");
+                        if (!t2)
+                                continue;
+                        *t2 = '\0';
+
+                        r = strverscmp_improved(t, minimal_version);
+                        log_debug("Found libsystemd shared at \"%s.so\", version %s (%s).",
+                                  *name, t,
+                                  r >= 0 ? "OK" : "too old");
+                        if (r >= 0)
+                                return true;
+                }
+        }
+
+        return false;
+}
diff --git a/src/nspawn/nspawn-util.h b/src/nspawn/nspawn-util.h
new file mode 100644
index 0000000..e83cd56
--- /dev/null
+++ b/src/nspawn/nspawn-util.h
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int systemd_installation_has_version(const char *root, const char *minimal_version);
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 9a95ebc..a697ea5 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -28,11 +28,13 @@
 #include "base-filesystem.h"
 #include "blkid-util.h"
 #include "btrfs-util.h"
+#include "build.h"
 #include "bus-error.h"
 #include "bus-util.h"
 #include "cap-list.h"
 #include "capability-util.h"
 #include "cgroup-util.h"
+#include "chase-symlinks.h"
 #include "copy.h"
 #include "cpu-set-util.h"
 #include "creds-util.h"
@@ -77,13 +79,13 @@
 #include "nspawn-settings.h"
 #include "nspawn-setuid.h"
 #include "nspawn-stub-pid1.h"
+#include "nspawn-util.h"
 #include "nspawn.h"
 #include "nulstr-util.h"
 #include "os-util.h"
 #include "pager.h"
 #include "parse-argument.h"
 #include "parse-util.h"
-#include "path-util.h"
 #include "pretty-print.h"
 #include "process-util.h"
 #include "ptyfwd.h"
@@ -109,10 +111,10 @@
 #include "umask-util.h"
 #include "unit-name.h"
 #include "user-util.h"
-#include "util.h"
 
 /* The notify socket inside the container it can use to talk to nspawn using the sd_notify(3) protocol */
 #define NSPAWN_NOTIFY_SOCKET_PATH "/run/host/notify"
+#define NSPAWN_MOUNT_TUNNEL "/run/host/incoming"
 
 #define EXIT_FORCE_RESTART 133
 
@@ -228,6 +230,7 @@
 static Credential *arg_credentials = NULL;
 static size_t arg_n_credentials = 0;
 static char **arg_bind_user = NULL;
+static bool arg_suppress_sync = false;
 static char *arg_settings_filename = NULL;
 
 STATIC_DESTRUCTOR_REGISTER(arg_directory, freep);
@@ -304,7 +307,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("systemd-nspawn", "1", &link);
         if (r < 0)
@@ -340,10 +343,12 @@
                "  -a --as-pid2              Maintain a stub init as PID1, invoke binary as PID2\n"
                "  -b --boot                 Boot up full system (i.e. invoke init)\n"
                "     --chdir=PATH           Set working directory in the container\n"
-               "  -E --setenv=NAME=VALUE    Pass an environment variable to PID 1\n"
+               "  -E --setenv=NAME[=VALUE]  Pass an environment variable to PID 1\n"
                "  -u --user=USER            Run the command under specified user or UID\n"
                "     --kill-signal=SIGNAL   Select signal to use for shutting down PID 1\n"
-               "     --notify-ready=BOOLEAN Receive notifications from the child init process\n\n"
+               "     --notify-ready=BOOLEAN Receive notifications from the child init process\n"
+               "     --suppress-sync=BOOLEAN\n"
+               "                            Suppress any form of disk data synchronization\n\n"
                "%3$sSystem Identity:%4$s\n"
                "  -M --machine=NAME         Set the machine name for the container\n"
                "     --hostname=NAME        Override the hostname for the container\n"
@@ -355,12 +360,16 @@
                "     --keep-unit            Do not register a scope for the machine, reuse\n"
                "                            the service unit nspawn is running in\n\n"
                "%3$sUser Namespacing:%4$s\n"
-               "  -U --private-users=pick   Run within user namespace, autoselect UID/GID range\n"
-               "     --private-users[=UIDBASE[:NUIDS]]\n"
+               "     --private-users=no     Run without user namespacing\n"
+               "     --private-users=yes|pick|identity\n"
+               "                            Run within user namespace, autoselect UID/GID range\n"
+               "     --private-users=UIDBASE[:NUIDS]\n"
                "                            Similar, but with user configured UID/GID range\n"
                "     --private-users-ownership=MODE\n"
                "                            Adjust ('chown') or map ('map') OS tree ownership\n"
-               "                            to private UID/GID range\n\n"
+               "                            to private UID/GID range\n"
+               "  -U                        Equivalent to --private-users=pick and\n"
+               "                            --private-users-ownership=auto\n\n"
                "%3$sNetworking:%4$s\n"
                "     --private-network      Disable network in container\n"
                "     --network-interface=INTERFACE\n"
@@ -507,7 +516,7 @@
         if (r > 0) {
                 /* Unified cgroup hierarchy support was added in 230. Unfortunately the detection
                  * routine only detects 231, so we'll have a false negative here for 230. */
-                r = systemd_installation_has_version(directory, 230);
+                r = systemd_installation_has_version(directory, "230");
                 if (r < 0)
                         return log_error_errno(r, "Failed to determine systemd version in container: %m");
                 if (r > 0)
@@ -516,7 +525,7 @@
                         arg_unified_cgroup_hierarchy = CGROUP_UNIFIED_NONE;
         } else if (cg_unified_controller(SYSTEMD_CGROUP_CONTROLLER) > 0) {
                 /* Mixed cgroup hierarchy support was added in 233 */
-                r = systemd_installation_has_version(directory, 233);
+                r = systemd_installation_has_version(directory, "233");
                 if (r < 0)
                         return log_error_errno(r, "Failed to determine systemd version in container: %m");
                 if (r > 0)
@@ -655,6 +664,12 @@
         if (e)
                 arg_container_service_name = e;
 
+        r = getenv_bool("SYSTEMD_SUPPRESS_SYNC");
+        if (r >= 0)
+                arg_suppress_sync = r;
+        else if (r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_SUPPRESS_SYNC, ignoring: %m");
+
         return detect_unified_cgroup_hierarchy_from_environment();
 }
 
@@ -714,6 +729,7 @@
                 ARG_SET_CREDENTIAL,
                 ARG_LOAD_CREDENTIAL,
                 ARG_BIND_USER,
+                ARG_SUPPRESS_SYNC,
         };
 
         static const struct option options[] = {
@@ -786,6 +802,7 @@
                 { "set-credential",         required_argument, NULL, ARG_SET_CREDENTIAL         },
                 { "load-credential",        required_argument, NULL, ARG_LOAD_CREDENTIAL        },
                 { "bind-user",              required_argument, NULL, ARG_BIND_USER              },
+                { "suppress-sync",          required_argument, NULL, ARG_SUPPRESS_SYNC          },
                 {}
         };
 
@@ -1123,17 +1140,13 @@
                         arg_settings_mask |= SETTING_CUSTOM_MOUNTS;
                         break;
 
-                case 'E': {
-                        if (!env_assignment_is_valid(optarg))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Environment variable assignment '%s' is not valid.", optarg);
-                        r = strv_env_replace_strdup(&arg_setenv, optarg);
+                case 'E':
+                        r = strv_env_replace_strdup_passthrough(&arg_setenv, optarg);
                         if (r < 0)
-                                return r;
+                                return log_error_errno(r, "Cannot assign environment variable %s: %m", optarg);
 
                         arg_settings_mask |= SETTING_ENVIRONMENT;
                         break;
-                }
 
                 case 'q':
                         arg_quiet = true;
@@ -1237,7 +1250,7 @@
                                 arg_uid_range = UINT32_C(0x10000);
 
                         } else if (streq(optarg, "identity")) {
-                                /* identitiy: User namespaces on, UID range is map the 0…0xFFFF range to
+                                /* identity: User namespaces on, UID range is map the 0…0xFFFF range to
                                  * itself, i.e. we don't actually map anything, but do take benefit of
                                  * isolation of capability sets. */
                                 arg_userns_mode = USER_NAMESPACE_FIXED;
@@ -1566,8 +1579,7 @@
                         _cleanup_free_ char *word = NULL, *data = NULL;
                         const char *p = optarg;
                         Credential *a;
-                        size_t i;
-                        int l;
+                        ssize_t l;
 
                         r = extract_first_word(&p, &word, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
                         if (r == -ENOMEM)
@@ -1580,7 +1592,7 @@
                         if (!credential_name_valid(word))
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Credential name is not valid: %s", word);
 
-                        for (i = 0; i < arg_n_credentials; i++)
+                        for (size_t i = 0; i < arg_n_credentials; i++)
                                 if (streq(arg_credentials[i].id, word))
                                         return log_error_errno(SYNTHETIC_ERRNO(EEXIST), "Duplicate credential '%s', refusing.", word);
 
@@ -1616,9 +1628,9 @@
                         if (r == -ENOMEM)
                                 return log_oom();
                         if (r < 0)
-                                return log_error_errno(r, "Failed to parse --set-credential= parameter: %m");
+                                return log_error_errno(r, "Failed to parse --load-credential= parameter: %m");
                         if (r == 0 || !p)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing value for --set-credential=: %s", optarg);
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing value for --load-credential=: %s", optarg);
 
                         if (!credential_name_valid(word))
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Credential name is not valid: %s", word);
@@ -1674,11 +1686,19 @@
                         arg_settings_mask |= SETTING_BIND_USER;
                         break;
 
+                case ARG_SUPPRESS_SYNC:
+                        r = parse_boolean_argument("--suppress-sync=", optarg, &arg_suppress_sync);
+                        if (r < 0)
+                                return r;
+
+                        arg_settings_mask |= SETTING_SUPPRESS_SYNC;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (argc > optind) {
@@ -1697,7 +1717,16 @@
                  * --directory=". */
                 arg_directory = TAKE_PTR(arg_template);
 
-        arg_caps_retain = (arg_caps_retain | plus | (arg_private_network ? UINT64_C(1) << CAP_NET_ADMIN : 0)) & ~minus;
+        arg_caps_retain |= plus;
+        arg_caps_retain |= arg_private_network ? UINT64_C(1) << CAP_NET_ADMIN : 0;
+
+        /* If we're not unsharing the network namespace and are unsharing the user namespace, we won't have
+         * permissions to bind ports in the container, so let's drop the CAP_NET_BIND_SERVICE capability to
+         * indicate that. */
+        if (!arg_private_network && arg_userns_mode != USER_NAMESPACE_NO && arg_uid_shift > 0)
+                arg_caps_retain &= ~(UINT64_C(1) << CAP_NET_BIND_SERVICE);
+
+        arg_caps_retain &= ~minus;
 
         /* Make sure to parse environment before we reset the settings mask below */
         r = parse_environment();
@@ -1866,10 +1895,7 @@
                         return -EOVERFLOW;
         }
 
-        if (lchown(p, uid, gid) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(lchown(p, uid, gid));
 }
 
 int userns_mkdir(const char *root, const char *path, mode_t mode, uid_t uid, gid_t gid) {
@@ -1877,7 +1903,7 @@
         int r;
 
         q = prefix_roota(root, path);
-        r = mkdir_errno_wrapper(q, mode);
+        r = RET_NERRNO(mkdir(q, mode));
         if (r == -EEXIST)
                 return 0;
         if (r < 0)
@@ -2016,7 +2042,7 @@
                 break;
 
         default:
-                assert_not_reached("unexpected mode");
+                assert_not_reached();
         }
 
         /* Fix permissions of the symlink or file copy we just created */
@@ -2179,7 +2205,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to generate random boot id: %m");
 
-        r = id128_write(path, ID128_UUID, rnd, false);
+        r = id128_write(path, ID128_FORMAT_UUID, rnd);
         if (r < 0)
                 return log_error_errno(r, "Failed to write boot id: %m");
 
@@ -2203,7 +2229,6 @@
                 "tty\0"
                 "net/tun\0";
 
-        const char *d;
         int r = 0;
 
         assert(dest);
@@ -2331,7 +2356,7 @@
 
         /* Mount /dev/pts itself */
         p = prefix_roota(dest, "/dev/pts");
-        r = mkdir_errno_wrapper(p, 0755);
+        r = RET_NERRNO(mkdir(p, 0755));
         if (r < 0)
                 return log_error_errno(r, "Failed to create /dev/pts: %m");
 
@@ -2360,7 +2385,7 @@
 }
 
 static int setup_stdio_as_dev_console(void) {
-        _cleanup_close_ int terminal = -1;
+        _cleanup_close_ int terminal = -EBADF;
         int r;
 
         /* We open the TTY in O_NOCTTY mode, so that we do not become controller yet. We'll do that later
@@ -2443,7 +2468,7 @@
 
         for (size_t i = 0; i < arg_n_credentials; i++) {
                 _cleanup_free_ char *j = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 j = path_join(q, arg_credentials[i].id);
                 if (!j)
@@ -2481,17 +2506,17 @@
         return mount_nofollow_verbose(LOG_ERR, NULL, q, NULL, MS_REMOUNT|MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV, "mode=0500");
 }
 
-static int setup_kmsg(int kmsg_socket) {
+static int setup_kmsg(int fd_inner_socket) {
         _cleanup_(unlink_and_freep) char *from = NULL;
         _cleanup_free_ char *fifo = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
-        assert(kmsg_socket >= 0);
+        assert(fd_inner_socket >= 0);
 
         BLOCK_WITH_UMASK(0000);
 
-        /* We create the kmsg FIFO as as temporary file in /run, but immediately delete it after bind mounting it to
+        /* We create the kmsg FIFO as a temporary file in /run, but immediately delete it after bind mounting it to
          * /proc/kmsg. While FIFOs on the reading side behave very similar to /proc/kmsg, their writing side behaves
          * differently from /dev/kmsg in that writing blocks when nothing is reading. In order to avoid any problems
          * with containers deadlocking due to this we simply make /dev/kmsg unavailable to the container. */
@@ -2514,7 +2539,7 @@
                 return log_error_errno(errno, "Failed to open fifo: %m");
 
         /* Store away the fd in the socket, so that it stays open as long as we run the child */
-        r = send_one_fd(kmsg_socket, fd, 0);
+        r = send_one_fd(fd_inner_socket, fd, 0);
         if (r < 0)
                 return log_error_errno(r, "Failed to send FIFO fd: %m");
 
@@ -2528,14 +2553,13 @@
 };
 
 static int on_address_change(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
-        struct ExposeArgs *args = userdata;
+        struct ExposeArgs *args = ASSERT_PTR(userdata);
 
         assert(rtnl);
         assert(m);
-        assert(args);
 
-        expose_port_execute(rtnl, &args->fw_ctx, arg_expose_ports, AF_INET, &args->address4);
-        expose_port_execute(rtnl, &args->fw_ctx, arg_expose_ports, AF_INET6, &args->address6);
+        (void) expose_port_execute(rtnl, &args->fw_ctx, arg_expose_ports, AF_INET, &args->address4);
+        (void) expose_port_execute(rtnl, &args->fw_ctx, arg_expose_ports, AF_INET6, &args->address6);
         return 0;
 }
 
@@ -2554,8 +2578,7 @@
 
 static int setup_journal(const char *directory) {
         _cleanup_free_ char *d = NULL;
-        char id[SD_ID128_STRING_MAX];
-        const char *dirname, *p, *q;
+        const char *p, *q;
         sd_id128_t this_id;
         bool try;
         int r;
@@ -2575,7 +2598,7 @@
 
         if (sd_id128_equal(arg_uuid, this_id)) {
                 log_full(try ? LOG_WARNING : LOG_ERR,
-                         "Host and machine ids are equal (%s): refusing to link journals", sd_id128_to_string(arg_uuid, id));
+                         "Host and machine ids are equal (%s): refusing to link journals", SD_ID128_TO_STRING(arg_uuid));
                 if (try)
                         return 0;
                 return -EEXIST;
@@ -2591,9 +2614,7 @@
                 }
         }
 
-        (void) sd_id128_to_string(arg_uuid, id);
-
-        p = strjoina("/var/log/journal/", id);
+        p = strjoina("/var/log/journal/", SD_ID128_TO_STRING(arg_uuid));
         q = prefix_roota(directory, p);
 
         if (path_is_mount_point(p, NULL, 0) > 0) {
@@ -2659,7 +2680,7 @@
                 /* don't create parents here — if the host doesn't have
                  * permanent journal set up, don't force it here */
 
-                r = mkdir_errno_wrapper(p, 0755);
+                r = RET_NERRNO(mkdir(p, 0755));
                 if (r < 0 && r != -EEXIST) {
                         if (try) {
                                 log_debug_errno(r, "Failed to create %s, skipping journal setup: %m", p);
@@ -2671,7 +2692,7 @@
         } else if (access(p, F_OK) < 0)
                 return 0;
 
-        if (dir_is_empty(q) == 0)
+        if (dir_is_empty(q, /* ignore_hidden_or_backup= */ false) == 0)
                 log_warning("%s is not empty, proceeding anyway.", q);
 
         r = userns_mkdir(directory, p, 0755, 0, 0);
@@ -2765,7 +2786,7 @@
         return 0;
 }
 
-static int setup_propagate(const char *root) {
+static int mount_tunnel_dig(const char *root) {
         const char *p, *q;
         int r;
 
@@ -2778,11 +2799,11 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to create /run/host: %m");
 
-        r = userns_mkdir(root, "/run/host/incoming", 0600, 0, 0);
+        r = userns_mkdir(root, NSPAWN_MOUNT_TUNNEL, 0600, 0, 0);
         if (r < 0)
-                return log_error_errno(r, "Failed to create /run/host/incoming: %m");
+                return log_error_errno(r, "Failed to create "NSPAWN_MOUNT_TUNNEL": %m");
 
-        q = prefix_roota(root, "/run/host/incoming");
+        q = prefix_roota(root, NSPAWN_MOUNT_TUNNEL);
         r = mount_nofollow_verbose(LOG_ERR, p, q, NULL, MS_BIND, NULL);
         if (r < 0)
                 return r;
@@ -2791,8 +2812,17 @@
         if (r < 0)
                 return r;
 
-        /* machined will MS_MOVE into that directory, and that's only supported for non-shared mounts. */
-        return mount_nofollow_verbose(LOG_ERR, NULL, q, NULL, MS_SLAVE, NULL);
+        return 0;
+}
+
+static int mount_tunnel_open(void) {
+        int r;
+
+        r = mount_follow_verbose(LOG_ERR, NULL, NSPAWN_MOUNT_TUNNEL, NULL, MS_SLAVE, NULL);
+        if (r < 0)
+                return r;
+
+        return 0;
 }
 
 static int setup_machine_id(const char *directory) {
@@ -2809,9 +2839,9 @@
 
         etc_machine_id = prefix_roota(directory, "/etc/machine-id");
 
-        r = id128_read(etc_machine_id, ID128_PLAIN_OR_UNINIT, &id);
+        r = id128_read(etc_machine_id, ID128_FORMAT_PLAIN, &id);
         if (r < 0) {
-                if (!IN_SET(r, -ENOENT, -ENOMEDIUM)) /* If the file is missing or empty, we don't mind */
+                if (!ERRNO_IS_MACHINE_ID_UNSET(r)) /* If the file is missing, empty, or uninitialized, we don't mind */
                         return log_error_errno(r, "Failed to read machine ID from container image: %m");
 
                 if (sd_id128_is_null(arg_uuid)) {
@@ -3024,16 +3054,19 @@
                 else if (arg_image) {
                         char *e;
 
-                        arg_machine = strdup(basename(arg_image));
+                        r = path_extract_filename(arg_image, &arg_machine);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to extract file name from '%s': %m", arg_image);
 
                         /* Truncate suffix if there is one */
                         e = endswith(arg_machine, ".raw");
                         if (e)
                                 *e = 0;
-                } else
-                        arg_machine = strdup(basename(arg_directory));
-                if (!arg_machine)
-                        return log_oom();
+                } else {
+                        r = path_extract_filename(arg_directory, &arg_machine);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to extract file name from '%s': %m", arg_directory);
+                }
 
                 hostname_cleanup(arg_machine);
                 if (!hostname_is_valid(arg_machine, 0))
@@ -3152,7 +3185,6 @@
         };
 
         unsigned long flags;
-        char **k, **v;
         int r;
 
         flags = effective_clone_ns_flags();
@@ -3190,17 +3222,14 @@
                 Barrier *barrier,
                 const char *directory,
                 bool secondary,
-                int kmsg_socket,
-                int rtnl_socket,
-                int master_pty_socket,
+                int fd_inner_socket,
                 FDSet *fds,
                 char **os_release_pairs) {
 
         _cleanup_free_ char *home = NULL;
-        char as_uuid[ID128_UUID_STRING_MAX];
         size_t n_env = 1;
-        const char *envp[] = {
-                "PATH=" DEFAULT_PATH_COMPAT,
+        char *envp[] = {
+                (char*) "PATH=" DEFAULT_PATH_COMPAT,
                 NULL, /* container */
                 NULL, /* TERM */
                 NULL, /* HOME */
@@ -3211,6 +3240,7 @@
                 NULL, /* LISTEN_PID */
                 NULL, /* NOTIFY_SOCKET */
                 NULL, /* CREDENTIALS_DIRECTORY */
+                NULL, /* LANG */
                 NULL
         };
         const char *exec_target;
@@ -3230,7 +3260,7 @@
 
         assert(barrier);
         assert(directory);
-        assert(kmsg_socket >= 0);
+        assert(fd_inner_socket >= 0);
 
         log_debug("Inner child is initializing.");
 
@@ -3302,16 +3332,16 @@
         if (r < 0)
                 return r;
 
-        r = setup_kmsg(kmsg_socket);
+        r = setup_kmsg(fd_inner_socket);
         if (r < 0)
                 return r;
-        kmsg_socket = safe_close(kmsg_socket);
 
         r = mount_custom(
                         "/",
                         arg_custom_mounts,
                         arg_n_custom_mounts,
                         0,
+                        0,
                         arg_selinux_apifs_context,
                         MOUNT_NON_ROOT_ONLY | MOUNT_IN_USERNS);
         if (r < 0)
@@ -3324,14 +3354,13 @@
                 (void) loopback_setup();
 
         if (arg_expose_ports) {
-                r = expose_port_send_rtnl(rtnl_socket);
+                r = expose_port_send_rtnl(fd_inner_socket);
                 if (r < 0)
                         return r;
-                rtnl_socket = safe_close(rtnl_socket);
         }
 
         if (arg_console_mode != CONSOLE_PIPE) {
-                _cleanup_close_ int master = -1;
+                _cleanup_close_ int master = -EBADF;
                 _cleanup_free_ char *console = NULL;
 
                 /* Allocate a pty and make it available as /dev/console. */
@@ -3343,10 +3372,9 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to set up /dev/console: %m");
 
-                r = send_one_fd(master_pty_socket, master, 0);
+                r = send_one_fd(fd_inner_socket, master, 0);
                 if (r < 0)
                         return log_error_errno(r, "Failed to send master fd: %m");
-                master_pty_socket = safe_close(master_pty_socket);
 
                 r = setup_stdio_as_dev_console();
                 if (r < 0)
@@ -3402,6 +3430,16 @@
                         return r;
         }
 
+        if (arg_suppress_sync) {
+#if HAVE_SECCOMP
+                r = seccomp_suppress_sync();
+                if (r < 0)
+                        log_debug_errno(r, "Failed to install sync() suppression seccomp filter, ignoring: %m");
+#else
+                log_debug("systemd is built without SECCOMP support. Ignoring --suppress-sync= command line option and SuppressSync= setting.");
+#endif
+        }
+
 #if HAVE_SELINUX
         if (arg_selinux_context)
                 if (setexeccon(arg_selinux_context) < 0)
@@ -3436,17 +3474,17 @@
                 n_env++;
 
         if (home || !uid_is_valid(arg_uid) || arg_uid == 0)
-                if (asprintf((char**)(envp + n_env++), "HOME=%s", home ?: "/root") < 0)
+                if (asprintf(envp + n_env++, "HOME=%s", home ?: "/root") < 0)
                         return log_oom();
 
         if (arg_user || !uid_is_valid(arg_uid) || arg_uid == 0)
-                if (asprintf((char**)(envp + n_env++), "USER=%s", arg_user ?: "root") < 0 ||
-                    asprintf((char**)(envp + n_env++), "LOGNAME=%s", arg_user ? arg_user : "root") < 0)
+                if (asprintf(envp + n_env++, "USER=%s", arg_user ?: "root") < 0 ||
+                    asprintf(envp + n_env++, "LOGNAME=%s", arg_user ? arg_user : "root") < 0)
                         return log_oom();
 
         assert(!sd_id128_is_null(arg_uuid));
 
-        if (asprintf((char**)(envp + n_env++), "container_uuid=%s", id128_to_uuid_string(arg_uuid, as_uuid)) < 0)
+        if (asprintf(envp + n_env++, "container_uuid=%s", SD_ID128_TO_UUID_STRING(arg_uuid)) < 0)
                 return log_oom();
 
         if (fdset_size(fds) > 0) {
@@ -3454,11 +3492,11 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to unset O_CLOEXEC for file descriptors.");
 
-                if ((asprintf((char **)(envp + n_env++), "LISTEN_FDS=%u", fdset_size(fds)) < 0) ||
-                    (asprintf((char **)(envp + n_env++), "LISTEN_PID=1") < 0))
+                if ((asprintf(envp + n_env++, "LISTEN_FDS=%u", fdset_size(fds)) < 0) ||
+                    (asprintf(envp + n_env++, "LISTEN_PID=1") < 0))
                         return log_oom();
         }
-        if (asprintf((char **)(envp + n_env++), "NOTIFY_SOCKET=%s", NSPAWN_NOTIFY_SOCKET_PATH) < 0)
+        if (asprintf(envp + n_env++, "NOTIFY_SOCKET=%s", NSPAWN_NOTIFY_SOCKET_PATH) < 0)
                 return log_oom();
 
         if (arg_n_credentials > 0) {
@@ -3468,7 +3506,14 @@
                 n_env++;
         }
 
-        env_use = strv_env_merge(3, envp, os_release_pairs, arg_setenv);
+        if (arg_start_mode != START_BOOT) {
+                envp[n_env] = strdup("LANG=" SYSTEMD_NSPAWN_LOCALE);
+                if (!envp[n_env])
+                        return log_oom();
+                n_env++;
+        }
+
+        env_use = strv_env_merge(envp, os_release_pairs, arg_setenv);
         if (!env_use)
                 return log_oom();
 
@@ -3502,6 +3547,7 @@
          * it again. Note that the other fds closed here are at least the locking and barrier fds. */
         log_close();
         log_set_open_when_needed(true);
+        log_settle_target();
 
         (void) fdset_close_others(fds);
 
@@ -3516,14 +3562,13 @@
                 memcpy_safe(a + 1, arg_parameters, m * sizeof(char*));
                 a[1 + m] = NULL;
 
-                a[0] = (char*) "/usr/lib/systemd/systemd";
-                execve(a[0], a, env_use);
-
-                a[0] = (char*) "/lib/systemd/systemd";
-                execve(a[0], a, env_use);
-
-                a[0] = (char*) "/sbin/init";
-                execve(a[0], a, env_use);
+                FOREACH_STRING(init,
+                               "/usr/lib/systemd/systemd",
+                               "/lib/systemd/systemd",
+                               "/sbin/init") {
+                        a[0] = (char*) init;
+                        execve(a[0], a, env_use);
+                }
 
                 exec_target = "/usr/lib/systemd/systemd, /lib/systemd/systemd, /sbin/init";
         } else if (!strv_isempty(arg_parameters)) {
@@ -3545,18 +3590,21 @@
                         /* If we cannot change the directory, we'll end up in /, that is expected. */
                         (void) chdir(home ?: "/root");
 
-                execle("/bin/bash", "-bash", NULL, env_use);
-                execle("/bin/sh", "-sh", NULL, env_use);
+                execle(DEFAULT_USER_SHELL, "-" DEFAULT_USER_SHELL_NAME, NULL, env_use);
+                if (!streq(DEFAULT_USER_SHELL, "/bin/bash"))
+                        execle("/bin/bash", "-bash", NULL, env_use);
+                if (!streq(DEFAULT_USER_SHELL, "/bin/sh"))
+                        execle("/bin/sh", "-sh", NULL, env_use);
 
-                exec_target = "/bin/bash, /bin/sh";
+                exec_target = DEFAULT_USER_SHELL ", /bin/bash, /bin/sh";
         }
 
         return log_error_errno(errno, "execv(%s) failed: %m", exec_target);
 }
 
 static int setup_notify_child(void) {
-        _cleanup_close_ int fd = -1;
-        union sockaddr_union sa = {
+        _cleanup_close_ int fd = -EBADF;
+        static const union sockaddr_union sa = {
                 .un.sun_family = AF_UNIX,
                 .un.sun_path = NSPAWN_NOTIFY_SOCKET_PATH,
         };
@@ -3589,38 +3637,30 @@
                 const char *directory,
                 DissectedImage *dissected_image,
                 bool secondary,
-                int pid_socket,
-                int uuid_socket,
-                int notify_socket,
-                int kmsg_socket,
-                int rtnl_socket,
-                int uid_shift_socket,
-                int master_pty_socket,
-                int unified_cgroup_hierarchy_socket,
+                int fd_outer_socket,
+                int fd_inner_socket,
                 FDSet *fds,
                 int netns_fd) {
 
         _cleanup_(bind_user_context_freep) BindUserContext *bind_user_context = NULL;
         _cleanup_strv_free_ char **os_release_pairs = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF, mntns_fd = -EBADF;
         bool idmap = false;
         const char *p;
         pid_t pid;
         ssize_t l;
         int r;
 
-        /* This is the "outer" child process, i.e the one forked off by the container manager itself. It already has
-         * its own CLONE_NEWNS namespace (which was created by the clone()). It still lives in the host's CLONE_NEWPID,
-         * CLONE_NEWUTS, CLONE_NEWIPC, CLONE_NEWUSER and CLONE_NEWNET namespaces. After it completed a number of
-         * initializations a second child (the "inner" one) is forked off it, and it exits. */
+        /* This is the "outer" child process, i.e the one forked off by the container manager itself. It
+         * already has its own CLONE_NEWNS namespace (which was created by the clone()). It still lives in
+         * the host's CLONE_NEWPID, CLONE_NEWUTS, CLONE_NEWIPC, CLONE_NEWUSER and CLONE_NEWNET
+         * namespaces. After it completed a number of initializations a second child (the "inner" one) is
+         * forked off it, and it exits. */
 
         assert(barrier);
         assert(directory);
-        assert(pid_socket >= 0);
-        assert(uuid_socket >= 0);
-        assert(notify_socket >= 0);
-        assert(master_pty_socket >= 0);
-        assert(kmsg_socket >= 0);
+        assert(fd_outer_socket >= 0);
+        assert(fd_inner_socket >= 0);
 
         log_debug("Outer child is initializing.");
 
@@ -3642,10 +3682,10 @@
                 return r;
 
         if (dissected_image) {
-                /* If we are operating on a disk image, then mount its root directory now, but leave out the rest. We
-                 * can read the UID shift from it if we need to. Further down we'll mount the rest, but then with the
-                 * uid shift known. That way we can mount VFAT file systems shifted to the right place right away. This
-                 * makes sure ESP partitions and userns are compatible. */
+                /* If we are operating on a disk image, then mount its root directory now, but leave out the
+                 * rest. We can read the UID shift from it if we need to. Further down we'll mount the rest,
+                 * but then with the uid shift known. That way we can mount VFAT file systems shifted to the
+                 * right place right away. This makes sure ESP partitions and userns are compatible. */
 
                 r = dissected_image_mount_and_warn(
                                 dissected_image,
@@ -3666,8 +3706,17 @@
                 return r;
 
         if (arg_userns_mode != USER_NAMESPACE_NO) {
+                r = namespace_open(0, NULL, &mntns_fd, NULL, NULL, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to pin outer mount namespace: %m");
+
+                l = send_one_fd(fd_outer_socket, mntns_fd, 0);
+                if (l < 0)
+                        return log_error_errno(l, "Failed to send outer mount namespace fd: %m");
+                mntns_fd = safe_close(mntns_fd);
+
                 /* Let the parent know which UID shift we read from the image */
-                l = send(uid_shift_socket, &arg_uid_shift, sizeof(arg_uid_shift), MSG_NOSIGNAL);
+                l = send(fd_outer_socket, &arg_uid_shift, sizeof(arg_uid_shift), MSG_NOSIGNAL);
                 if (l < 0)
                         return log_error_errno(errno, "Failed to send UID shift: %m");
                 if (l != sizeof(arg_uid_shift))
@@ -3675,11 +3724,11 @@
                                                "Short write while sending UID shift.");
 
                 if (arg_userns_mode == USER_NAMESPACE_PICK) {
-                        /* When we are supposed to pick the UID shift, the parent will check now whether the UID shift
-                         * we just read from the image is available. If yes, it will send the UID shift back to us, if
-                         * not it will pick a different one, and send it back to us. */
+                        /* When we are supposed to pick the UID shift, the parent will check now whether the
+                         * UID shift we just read from the image is available. If yes, it will send the UID
+                         * shift back to us, if not it will pick a different one, and send it back to us. */
 
-                        l = recv(uid_shift_socket, &arg_uid_shift, sizeof(arg_uid_shift), 0);
+                        l = recv(fd_outer_socket, &arg_uid_shift, sizeof(arg_uid_shift), 0);
                         if (l < 0)
                                 return log_error_errno(errno, "Failed to recv UID shift: %m");
                         if (l != sizeof(arg_uid_shift))
@@ -3696,7 +3745,7 @@
                  * place, so that we can make changes to its mount structure (for example, to implement
                  * --volatile=) without this interfering with our ability to access files such as
                  * /etc/localtime to copy into the container. Note that we use a fixed place for this
-                 * (instead of a temporary directory, since we are living in our own mount namspace here
+                 * (instead of a temporary directory, since we are living in our own mount namespace here
                  * already, and thus don't need to be afraid of colliding with anyone else's mounts). */
                 (void) mkdir_p("/run/systemd/nspawn-root", 0755);
 
@@ -3707,32 +3756,6 @@
                 directory = "/run/systemd/nspawn-root";
         }
 
-        if (arg_userns_mode != USER_NAMESPACE_NO &&
-            IN_SET(arg_userns_ownership, USER_NAMESPACE_OWNERSHIP_MAP, USER_NAMESPACE_OWNERSHIP_AUTO) &&
-            arg_uid_shift != 0) {
-                r = make_mount_point(directory);
-                if (r < 0)
-                        return r;
-
-                r = remount_idmap(directory, arg_uid_shift, arg_uid_range);
-                if (r == -EINVAL || ERRNO_IS_NOT_SUPPORTED(r)) {
-                        /* This might fail because the kernel or file system doesn't support idmapping. We
-                         * can't really distinguish this nicely, nor do we have any guarantees about the
-                         * error codes we see, could be EOPNOTSUPP or EINVAL. */
-                        if (arg_userns_ownership != USER_NAMESPACE_OWNERSHIP_AUTO)
-                                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                                                       "ID mapped mounts are apparently not available, sorry.");
-
-                        log_debug("ID mapped mounts are apparently not available on this kernel or for the selected file system, reverting to recursive chown()ing.");
-                        arg_userns_ownership = USER_NAMESPACE_OWNERSHIP_CHOWN;
-                } else if (r < 0)
-                        return log_error_errno(r, "Failed to set up ID mapped mounts: %m");
-                else {
-                        log_debug("ID mapped mounts available, making use of them.");
-                        idmap = true;
-                }
-        }
-
         r = setup_pivot_root(
                         directory,
                         arg_pivot_root_new,
@@ -3759,7 +3782,8 @@
                 return r;
 
         if (arg_userns_mode != USER_NAMESPACE_NO && bind_user_context) {
-                /* Send the user maps we determined to the parent, so that it installs it in our user namespace UID map table */
+                /* Send the user maps we determined to the parent, so that it installs it in our user
+                 * namespace UID map table */
 
                 for (size_t i = 0; i < bind_user_context->n_data; i++)  {
                         uid_t map[] = {
@@ -3769,7 +3793,7 @@
                                 (uid_t) bind_user_context->data[i].host_group->gid,
                         };
 
-                        l = send(uid_shift_socket, map, sizeof(map), MSG_NOSIGNAL);
+                        l = send(fd_outer_socket, map, sizeof(map), MSG_NOSIGNAL);
                         if (l < 0)
                                 return log_error_errno(errno, "Failed to send user UID map: %m");
                         if (l != sizeof(map))
@@ -3783,6 +3807,7 @@
                         arg_custom_mounts,
                         arg_n_custom_mounts,
                         arg_uid_shift,
+                        arg_uid_range,
                         arg_selinux_apifs_context,
                         MOUNT_ROOT_ONLY);
         if (r < 0)
@@ -3793,6 +3818,29 @@
         if (r < 0)
                 return r;
 
+        if (arg_userns_mode != USER_NAMESPACE_NO &&
+            IN_SET(arg_userns_ownership, USER_NAMESPACE_OWNERSHIP_MAP, USER_NAMESPACE_OWNERSHIP_AUTO) &&
+            arg_uid_shift != 0) {
+
+                r = remount_idmap(directory, arg_uid_shift, arg_uid_range, UID_INVALID, REMOUNT_IDMAPPING_HOST_ROOT);
+                if (r == -EINVAL || ERRNO_IS_NOT_SUPPORTED(r)) {
+                        /* This might fail because the kernel or file system doesn't support idmapping. We
+                         * can't really distinguish this nicely, nor do we have any guarantees about the
+                         * error codes we see, could be EOPNOTSUPP or EINVAL. */
+                        if (arg_userns_ownership != USER_NAMESPACE_OWNERSHIP_AUTO)
+                                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                                       "ID mapped mounts are apparently not available, sorry.");
+
+                        log_debug("ID mapped mounts are apparently not available on this kernel or for the selected file system, reverting to recursive chown()ing.");
+                        arg_userns_ownership = USER_NAMESPACE_OWNERSHIP_CHOWN;
+                } else if (r < 0)
+                        return log_error_errno(r, "Failed to set up ID mapped mounts: %m");
+                else {
+                        log_debug("ID mapped mounts available, making use of them.");
+                        idmap = true;
+                }
+        }
+
         if (dissected_image) {
                 /* Now we know the uid shift, let's now mount everything else that might be in the image. */
                 r = dissected_image_mount(
@@ -3818,31 +3866,14 @@
                 if (r < 0)
                         return r;
 
-                l = send(unified_cgroup_hierarchy_socket, &arg_unified_cgroup_hierarchy, sizeof(arg_unified_cgroup_hierarchy), MSG_NOSIGNAL);
+                l = send(fd_outer_socket, &arg_unified_cgroup_hierarchy, sizeof(arg_unified_cgroup_hierarchy), MSG_NOSIGNAL);
                 if (l < 0)
                         return log_error_errno(errno, "Failed to send cgroup mode: %m");
                 if (l != sizeof(arg_unified_cgroup_hierarchy))
                         return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                                "Short write while sending cgroup mode.");
-
-                unified_cgroup_hierarchy_socket = safe_close(unified_cgroup_hierarchy_socket);
         }
 
-        /* Mark everything as shared so our mounts get propagated down. This is
-         * required to make new bind mounts available in systemd services
-         * inside the container that create a new mount namespace.
-         * See https://github.com/systemd/systemd/issues/3860
-         * Further submounts (such as /dev) done after this will inherit the
-         * shared propagation mode.
-         *
-         * IMPORTANT: Do not overmount the root directory anymore from now on to
-         * enable moving the root directory mount to root later on.
-         * https://github.com/systemd/systemd/issues/3847#issuecomment-562735251
-         */
-        r = mount_nofollow_verbose(LOG_ERR, NULL, directory, NULL, MS_SHARED|MS_REC, NULL);
-        if (r < 0)
-                return r;
-
         r = recursive_chown(directory, arg_uid_shift, arg_uid_range);
         if (r < 0)
                 return r;
@@ -3882,7 +3913,7 @@
         if (r < 0)
                 return r;
 
-        r = setup_propagate(directory);
+        r = mount_tunnel_dig(directory);
         if (r < 0)
                 return r;
 
@@ -3903,6 +3934,7 @@
                         arg_custom_mounts,
                         arg_n_custom_mounts,
                         arg_uid_shift,
+                        arg_uid_range,
                         arg_selinux_apifs_context,
                         MOUNT_NON_ROOT_ONLY);
         if (r < 0)
@@ -3945,10 +3977,40 @@
                         return r;
         }
 
-        r = mount_move_root(directory);
+        /* Mark everything as shared so our mounts get propagated down. This is required to make new bind
+         * mounts available in systemd services inside the container that create a new mount namespace.  See
+         * https://github.com/systemd/systemd/issues/3860 Further submounts (such as /dev) done after this
+         * will inherit the shared propagation mode.
+         *
+         * IMPORTANT: Do not overmount the root directory anymore from now on to enable moving the root
+         * directory mount to root later on.
+         * https://github.com/systemd/systemd/issues/3847#issuecomment-562735251
+         */
+        r = mount_switch_root(directory, MS_SHARED);
         if (r < 0)
                 return log_error_errno(r, "Failed to move root directory: %m");
 
+        /* We finished setting up the rootfs which is a shared mount. The mount tunnel needs to be a
+         * dependent mount otherwise we can't MS_MOVE mounts that were propagated from the host into
+         * the container. */
+        r = mount_tunnel_open();
+        if (r < 0)
+                return r;
+
+        if (arg_userns_mode != USER_NAMESPACE_NO) {
+                /* In order to mount procfs and sysfs in an unprivileged container the kernel
+                 * requires that a fully visible instance is already present in the target mount
+                 * namespace. Mount one here so the inner child can mount its own instances. Later
+                 * we umount the temporary instances created here before we actually exec the
+                 * payload. Since the rootfs is shared the umount will propagate into the container.
+                 * Note, the inner child wouldn't be able to unmount the instances on its own since
+                 * it doesn't own the originating mount namespace. IOW, the outer child needs to do
+                 * this. */
+                r = pin_fully_visible_fs();
+                if (r < 0)
+                        return r;
+        }
+
         fd = setup_notify_child();
         if (fd < 0)
                 return fd;
@@ -3959,10 +4021,7 @@
         if (pid < 0)
                 return log_error_errno(errno, "Failed to fork inner child: %m");
         if (pid == 0) {
-                pid_socket = safe_close(pid_socket);
-                uuid_socket = safe_close(uuid_socket);
-                notify_socket = safe_close(notify_socket);
-                uid_shift_socket = safe_close(uid_shift_socket);
+                fd_outer_socket = safe_close(fd_outer_socket);
 
                 /* The inner child has all namespaces that are requested, so that we all are owned by the
                  * user if user namespaces are turned on. */
@@ -3973,37 +4032,33 @@
                                 return log_error_errno(r, "Failed to join network namespace: %m");
                 }
 
-                r = inner_child(barrier, directory, secondary, kmsg_socket, rtnl_socket, master_pty_socket, fds, os_release_pairs);
+                r = inner_child(barrier, directory, secondary, fd_inner_socket, fds, os_release_pairs);
                 if (r < 0)
                         _exit(EXIT_FAILURE);
 
                 _exit(EXIT_SUCCESS);
         }
 
-        l = send(pid_socket, &pid, sizeof(pid), MSG_NOSIGNAL);
+        l = send(fd_outer_socket, &pid, sizeof(pid), MSG_NOSIGNAL);
         if (l < 0)
                 return log_error_errno(errno, "Failed to send PID: %m");
         if (l != sizeof(pid))
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                        "Short write while sending PID.");
 
-        l = send(uuid_socket, &arg_uuid, sizeof(arg_uuid), MSG_NOSIGNAL);
+        l = send(fd_outer_socket, &arg_uuid, sizeof(arg_uuid), MSG_NOSIGNAL);
         if (l < 0)
                 return log_error_errno(errno, "Failed to send machine ID: %m");
         if (l != sizeof(arg_uuid))
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                        "Short write while sending machine ID.");
 
-        l = send_one_fd(notify_socket, fd, 0);
+        l = send_one_fd(fd_outer_socket, fd, 0);
         if (l < 0)
                 return log_error_errno(l, "Failed to send notify fd: %m");
 
-        pid_socket = safe_close(pid_socket);
-        uuid_socket = safe_close(uuid_socket);
-        notify_socket = safe_close(notify_socket);
-        master_pty_socket = safe_close(master_pty_socket);
-        kmsg_socket = safe_close(kmsg_socket);
-        rtnl_socket = safe_close(rtnl_socket);
+        fd_outer_socket = safe_close(fd_outer_socket);
+        fd_inner_socket = safe_close(fd_inner_socket);
         netns_fd = safe_close(netns_fd);
 
         return 0;
@@ -4100,15 +4155,15 @@
         int r;
 
         assert(n_bind_user_uid == 0 || bind_user_uid);
-        assert(offset == 0 || offset == 2); /* used to switch between UID and GID map */
+        assert(IN_SET(offset, 0, 2)); /* used to switch between UID and GID map */
         assert(ret);
 
         /* The bind_user_uid[] array is a series of 4 uid_t values, for each --bind-user= entry one
          * quadruplet, consisting of host and container UID + GID. */
 
         for (size_t i = 0; i < n_bind_user_uid; i++) {
-                uid_t payload_uid = bind_user_uid[i*2+offset],
-                        host_uid = bind_user_uid[i*2+offset+1];
+                uid_t payload_uid = bind_user_uid[i*4+offset],
+                        host_uid = bind_user_uid[i*4+offset+1];
 
                 assert(previous_uid <= payload_uid);
                 assert(payload_uid < arg_uid_range);
@@ -4193,6 +4248,7 @@
         ssize_t n;
         pid_t inner_child_pid;
         _cleanup_strv_free_ char **tags = NULL;
+        int r;
 
         assert(userdata);
 
@@ -4204,14 +4260,15 @@
         }
 
         n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
-        if (IN_SET(n, -EAGAIN, -EINTR))
-                return 0;
-        if (n == -EXFULL) {
-                log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
-                return 0;
-        }
-        if (n < 0)
+        if (n < 0) {
+                if (ERRNO_IS_TRANSIENT(n))
+                        return 0;
+                if (n == -EXFULL) {
+                        log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
+                        return 0;
+                }
                 return log_warning_errno(n, "Couldn't read notification socket: %m");
+        }
 
         cmsg_close_all(&msghdr);
 
@@ -4231,8 +4288,11 @@
         if (!tags)
                 return log_oom();
 
-        if (strv_find(tags, "READY=1"))
-                (void) sd_notifyf(false, "READY=1\n");
+        if (strv_contains(tags, "READY=1")) {
+                r = sd_notify(false, "READY=1\n");
+                if (r < 0)
+                        log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
+        }
 
         p = strv_find_startswith(tags, "STATUS=");
         if (p)
@@ -4268,7 +4328,8 @@
                 strv_free_and_replace(arg_parameters, settings->parameters);
         }
 
-        if ((arg_settings_mask & SETTING_EPHEMERAL) == 0)
+        if ((arg_settings_mask & SETTING_EPHEMERAL) == 0 &&
+            settings->ephemeral >= 0)
                 arg_ephemeral = settings->ephemeral;
 
         if ((arg_settings_mask & SETTING_DIRECTORY) == 0 &&
@@ -4320,7 +4381,8 @@
                 plus = settings->capability;
                 minus = settings->drop_capability;
 
-                if ((arg_settings_mask & SETTING_NETWORK) == 0) {
+                if ((arg_settings_mask & SETTING_NETWORK) == 0 &&
+                    settings_network_configured(settings)) {
                         if (settings_private_network(settings))
                                 plus |= UINT64_C(1) << CAP_NET_ADMIN;
                         else
@@ -4391,15 +4453,7 @@
         }
 
         if ((arg_settings_mask & SETTING_NETWORK) == 0 &&
-            (settings->private_network >= 0 ||
-             settings->network_veth >= 0 ||
-             settings->network_bridge ||
-             settings->network_zone ||
-             settings->network_interfaces ||
-             settings->network_macvlan ||
-             settings->network_ipvlan ||
-             settings->network_veth_extra ||
-             settings->network_namespace_path)) {
+            settings_network_configured(settings)) {
 
                 if (!arg_settings_trusted)
                         log_warning("Ignoring network settings, file %s is not trusted.", path);
@@ -4443,27 +4497,33 @@
                 }
         }
 
-        if ((arg_settings_mask & SETTING_BIND_USER) == 0)
+        if ((arg_settings_mask & SETTING_BIND_USER) == 0 &&
+            !strv_isempty(settings->bind_user))
                 strv_free_and_replace(arg_bind_user, settings->bind_user);
 
-        if ((arg_settings_mask & SETTING_NOTIFY_READY) == 0)
+        if ((arg_settings_mask & SETTING_NOTIFY_READY) == 0 &&
+            settings->notify_ready >= 0)
                 arg_notify_ready = settings->notify_ready;
 
         if ((arg_settings_mask & SETTING_SYSCALL_FILTER) == 0) {
 
-                if (!arg_settings_trusted && !strv_isempty(settings->syscall_allow_list))
-                        log_warning("Ignoring SystemCallFilter= settings, file %s is not trusted.", path);
-                else {
-                        strv_free_and_replace(arg_syscall_allow_list, settings->syscall_allow_list);
-                        strv_free_and_replace(arg_syscall_deny_list, settings->syscall_deny_list);
+                if (!strv_isempty(settings->syscall_allow_list) || !strv_isempty(settings->syscall_deny_list)) {
+                        if (!arg_settings_trusted && !strv_isempty(settings->syscall_allow_list))
+                                log_warning("Ignoring SystemCallFilter= settings, file %s is not trusted.", path);
+                        else {
+                                strv_free_and_replace(arg_syscall_allow_list, settings->syscall_allow_list);
+                                strv_free_and_replace(arg_syscall_deny_list, settings->syscall_deny_list);
+                        }
                 }
 
 #if HAVE_SECCOMP
-                if (!arg_settings_trusted && settings->seccomp)
-                        log_warning("Ignoring SECCOMP filter, file %s is not trusted.", path);
-                else {
-                        seccomp_release(arg_seccomp);
-                        arg_seccomp = TAKE_PTR(settings->seccomp);
+                if (settings->seccomp) {
+                        if (!arg_settings_trusted)
+                                log_warning("Ignoring SECCOMP filter, file %s is not trusted.", path);
+                        else {
+                                seccomp_release(arg_seccomp);
+                                arg_seccomp = TAKE_PTR(settings->seccomp);
+                        }
                 }
 #endif
         }
@@ -4569,6 +4629,10 @@
                         arg_console_mode = settings->console_mode;
         }
 
+        if ((arg_settings_mask & SETTING_SUPPRESS_SYNC) == 0 &&
+            settings->suppress_sync >= 0)
+                arg_suppress_sync = settings->suppress_sync;
+
         /* The following properties can only be set through the OCI settings logic, not from the command line, hence we
          * don't consult arg_settings_mask for them. */
 
@@ -4589,7 +4653,6 @@
         _cleanup_(settings_freep) Settings *settings = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *p = NULL;
-        const char *i;
         int r;
 
         if (arg_oci_bundle)
@@ -4628,13 +4691,13 @@
                  * actual image we shall boot. */
 
                 if (arg_image) {
-                        p = file_in_same_dir(arg_image, arg_settings_filename);
-                        if (!p)
-                                return log_oom();
-                } else if (arg_directory && !path_equal(arg_directory, "/")) {
-                        p = file_in_same_dir(arg_directory, arg_settings_filename);
-                        if (!p)
-                                return log_oom();
+                        r = file_in_same_dir(arg_image, arg_settings_filename, &p);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to generate settings path from image path: %m");
+                } else if (arg_directory) {
+                        r = file_in_same_dir(arg_directory, arg_settings_filename, &p);
+                        if (r < 0 && r != -EADDRNOTAVAIL) /* if directory is root fs, don't complain */
+                                return log_error_errno(r, "Failed to generate settings path from directory path: %m");
                 }
 
                 if (p) {
@@ -4692,18 +4755,12 @@
         };
 
         _cleanup_(release_lock_file) LockFile uid_shift_lock = LOCK_FILE_INIT;
-        _cleanup_close_ int etc_passwd_lock = -1;
+        _cleanup_close_ int etc_passwd_lock = -EBADF;
         _cleanup_close_pair_ int
-                kmsg_socket_pair[2] = { -1, -1 },
-                rtnl_socket_pair[2] = { -1, -1 },
-                pid_socket_pair[2] = { -1, -1 },
-                uuid_socket_pair[2] = { -1, -1 },
-                notify_socket_pair[2] = { -1, -1 },
-                uid_shift_socket_pair[2] = { -1, -1 },
-                master_pty_socket_pair[2] = { -1, -1 },
-                unified_cgroup_hierarchy_socket_pair[2] = { -1, -1};
+                fd_inner_socket_pair[2] = PIPE_EBADF,
+                fd_outer_socket_pair[2] = PIPE_EBADF;
 
-        _cleanup_close_ int notify_socket = -1;
+        _cleanup_close_ int notify_socket = -EBADF, mntns_fd = -EBADF, fd_kmsg_fifo = -EBADF;
         _cleanup_(barrier_destroy) Barrier barrier = BARRIER_NULL;
         _cleanup_(sd_event_source_unrefp) sd_event_source *notify_event_source = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
@@ -4716,7 +4773,7 @@
         int ifi = 0, r;
         ssize_t l;
         sigset_t mask_chld;
-        _cleanup_close_ int child_netns_fd = -1;
+        _cleanup_close_ int child_netns_fd = -EBADF;
 
         assert_se(sigemptyset(&mask_chld) == 0);
         assert_se(sigaddset(&mask_chld, SIGCHLD) == 0);
@@ -4738,31 +4795,11 @@
         if (r < 0)
                 return log_error_errno(r, "Cannot initialize IPC barrier: %m");
 
-        if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, kmsg_socket_pair) < 0)
-                return log_error_errno(errno, "Failed to create kmsg socket pair: %m");
+        if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, fd_inner_socket_pair) < 0)
+                return log_error_errno(errno, "Failed to create inner socket pair: %m");
 
-        if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, rtnl_socket_pair) < 0)
-                return log_error_errno(errno, "Failed to create rtnl socket pair: %m");
-
-        if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, pid_socket_pair) < 0)
-                return log_error_errno(errno, "Failed to create pid socket pair: %m");
-
-        if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, uuid_socket_pair) < 0)
-                return log_error_errno(errno, "Failed to create id socket pair: %m");
-
-        if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, notify_socket_pair) < 0)
-                return log_error_errno(errno, "Failed to create notify socket pair: %m");
-
-        if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, master_pty_socket_pair) < 0)
-                return log_error_errno(errno, "Failed to create console socket pair: %m");
-
-        if (arg_userns_mode != USER_NAMESPACE_NO)
-                if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, uid_shift_socket_pair) < 0)
-                        return log_error_errno(errno, "Failed to create uid shift socket pair: %m");
-
-        if (arg_unified_cgroup_hierarchy == CGROUP_UNIFIED_UNKNOWN)
-                if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, unified_cgroup_hierarchy_socket_pair) < 0)
-                        return log_error_errno(errno, "Failed to create unified cgroup socket pair: %m");
+        if (socketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CLOEXEC, 0, fd_outer_socket_pair) < 0)
+                return log_error_errno(errno, "Failed to create outer socket pair: %m");
 
         /* Child can be killed before execv(), so handle SIGCHLD in order to interrupt
          * parent's blocking calls and give it a chance to call wait() and terminate. */
@@ -4799,14 +4836,8 @@
                 /* The outer child only has a file system namespace. */
                 barrier_set_role(&barrier, BARRIER_CHILD);
 
-                kmsg_socket_pair[0] = safe_close(kmsg_socket_pair[0]);
-                rtnl_socket_pair[0] = safe_close(rtnl_socket_pair[0]);
-                pid_socket_pair[0] = safe_close(pid_socket_pair[0]);
-                uuid_socket_pair[0] = safe_close(uuid_socket_pair[0]);
-                notify_socket_pair[0] = safe_close(notify_socket_pair[0]);
-                master_pty_socket_pair[0] = safe_close(master_pty_socket_pair[0]);
-                uid_shift_socket_pair[0] = safe_close(uid_shift_socket_pair[0]);
-                unified_cgroup_hierarchy_socket_pair[0] = safe_close(unified_cgroup_hierarchy_socket_pair[0]);
+                fd_inner_socket_pair[0] = safe_close(fd_inner_socket_pair[0]);
+                fd_outer_socket_pair[0] = safe_close(fd_outer_socket_pair[0]);
 
                 (void) reset_all_signal_handlers();
                 (void) reset_signal_mask();
@@ -4815,14 +4846,8 @@
                                 arg_directory,
                                 dissected_image,
                                 secondary,
-                                pid_socket_pair[1],
-                                uuid_socket_pair[1],
-                                notify_socket_pair[1],
-                                kmsg_socket_pair[1],
-                                rtnl_socket_pair[1],
-                                uid_shift_socket_pair[1],
-                                master_pty_socket_pair[1],
-                                unified_cgroup_hierarchy_socket_pair[1],
+                                fd_outer_socket_pair[1],
+                                fd_inner_socket_pair[1],
                                 fds,
                                 child_netns_fd);
                 if (r < 0)
@@ -4835,18 +4860,16 @@
 
         fdset_close(fds);
 
-        kmsg_socket_pair[1] = safe_close(kmsg_socket_pair[1]);
-        rtnl_socket_pair[1] = safe_close(rtnl_socket_pair[1]);
-        pid_socket_pair[1] = safe_close(pid_socket_pair[1]);
-        uuid_socket_pair[1] = safe_close(uuid_socket_pair[1]);
-        notify_socket_pair[1] = safe_close(notify_socket_pair[1]);
-        master_pty_socket_pair[1] = safe_close(master_pty_socket_pair[1]);
-        uid_shift_socket_pair[1] = safe_close(uid_shift_socket_pair[1]);
-        unified_cgroup_hierarchy_socket_pair[1] = safe_close(unified_cgroup_hierarchy_socket_pair[1]);
+        fd_inner_socket_pair[1] = safe_close(fd_inner_socket_pair[1]);
+        fd_outer_socket_pair[1] = safe_close(fd_outer_socket_pair[1]);
 
         if (arg_userns_mode != USER_NAMESPACE_NO) {
+                mntns_fd = receive_one_fd(fd_outer_socket_pair[0], 0);
+                if (mntns_fd < 0)
+                        return log_error_errno(mntns_fd, "Failed to receive mount namespace fd from outer child: %m");
+
                 /* The child just let us know the UID shift it might have read from the image. */
-                l = recv(uid_shift_socket_pair[0], &arg_uid_shift, sizeof arg_uid_shift, 0);
+                l = recv(fd_outer_socket_pair[0], &arg_uid_shift, sizeof arg_uid_shift, 0);
                 if (l < 0)
                         return log_error_errno(errno, "Failed to read UID shift: %m");
                 if (l != sizeof arg_uid_shift)
@@ -4861,7 +4884,7 @@
                         if (r < 0)
                                 return log_error_errno(r, "Failed to pick suitable UID/GID range: %m");
 
-                        l = send(uid_shift_socket_pair[0], &arg_uid_shift, sizeof arg_uid_shift, MSG_NOSIGNAL);
+                        l = send(fd_outer_socket_pair[0], &arg_uid_shift, sizeof arg_uid_shift, MSG_NOSIGNAL);
                         if (l < 0)
                                 return log_error_errno(errno, "Failed to send UID shift: %m");
                         if (l != sizeof arg_uid_shift)
@@ -4878,7 +4901,7 @@
                                 return log_oom();
 
                         for (size_t i = 0; i < n_bind_user_uid; i++) {
-                                l = recv(uid_shift_socket_pair[0], bind_user_uid + i*4, sizeof(uid_t)*4, 0);
+                                l = recv(fd_outer_socket_pair[0], bind_user_uid + i*4, sizeof(uid_t)*4, 0);
                                 if (l < 0)
                                         return log_error_errno(errno, "Failed to read user UID map pair: %m");
                                 if (l != sizeof(uid_t)*4)
@@ -4891,11 +4914,11 @@
 
         if (arg_unified_cgroup_hierarchy == CGROUP_UNIFIED_UNKNOWN) {
                 /* The child let us know the support cgroup mode it might have read from the image. */
-                l = recv(unified_cgroup_hierarchy_socket_pair[0], &arg_unified_cgroup_hierarchy, sizeof(arg_unified_cgroup_hierarchy), 0);
+                l = recv(fd_outer_socket_pair[0], &arg_unified_cgroup_hierarchy, sizeof(arg_unified_cgroup_hierarchy), 0);
                 if (l < 0)
                         return log_error_errno(errno, "Failed to read cgroup mode: %m");
                 if (l != sizeof(arg_unified_cgroup_hierarchy))
-                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short read while reading cgroup mode (%zu bytes).%s",
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short read while reading cgroup mode (%zi bytes).%s",
                                                l, l == 0 ? " The child is most likely dead." : "");
         }
 
@@ -4907,21 +4930,21 @@
                 return -EIO;
 
         /* And now retrieve the PID of the inner child. */
-        l = recv(pid_socket_pair[0], pid, sizeof *pid, 0);
+        l = recv(fd_outer_socket_pair[0], pid, sizeof *pid, 0);
         if (l < 0)
                 return log_error_errno(errno, "Failed to read inner child PID: %m");
         if (l != sizeof *pid)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short read while reading inner child PID.");
 
         /* We also retrieve container UUID in case it was generated by outer child */
-        l = recv(uuid_socket_pair[0], &arg_uuid, sizeof arg_uuid, 0);
+        l = recv(fd_outer_socket_pair[0], &arg_uuid, sizeof arg_uuid, 0);
         if (l < 0)
                 return log_error_errno(errno, "Failed to read container machine ID: %m");
         if (l != sizeof(arg_uuid))
                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short read while reading container machined ID.");
 
         /* We also retrieve the socket used for notifications generated by outer child */
-        notify_socket = receive_one_fd(notify_socket_pair[0], 0);
+        notify_socket = receive_one_fd(fd_outer_socket_pair[0], 0);
         if (notify_socket < 0)
                 return log_error_errno(notify_socket,
                                        "Failed to receive notification socket from the outer child: %m");
@@ -5106,6 +5129,13 @@
         if (r < 0)
                 return r;
 
+        if (arg_userns_mode != USER_NAMESPACE_NO) {
+                r = wipe_fully_visible_fs(mntns_fd);
+                if (r < 0)
+                        return r;
+                mntns_fd = safe_close(mntns_fd);
+        }
+
         /* Let the child know that we are ready and wait that the child is completely ready now. */
         if (!barrier_place_and_sync(&barrier)) /* #5 */
                 return log_error_errno(SYNTHETIC_ERRNO(ESRCH), "Child died too early.");
@@ -5117,8 +5147,11 @@
         (void) sd_notifyf(false,
                           "STATUS=Container running.\n"
                           "X_NSPAWN_LEADER_PID=" PID_FMT, *pid);
-        if (!arg_notify_ready)
-                (void) sd_notify(false, "READY=1\n");
+        if (!arg_notify_ready) {
+                r = sd_notify(false, "READY=1\n");
+                if (r < 0)
+                        log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
+        }
 
         if (arg_kill_signal > 0) {
                 /* Try to kill the init system on SIGINT or SIGTERM */
@@ -5133,8 +5166,13 @@
         /* Exit when the child exits */
         (void) sd_event_add_signal(event, NULL, SIGCHLD, on_sigchld, PID_TO_PTR(*pid));
 
+        /* Retrieve the kmsg fifo allocated by inner child */
+        fd_kmsg_fifo = receive_one_fd(fd_inner_socket_pair[0], 0);
+        if (fd_kmsg_fifo < 0)
+                return log_error_errno(fd_kmsg_fifo, "Failed to receive kmsg fifo from inner child: %m");
+
         if (arg_expose_ports) {
-                r = expose_port_watch_rtnl(event, rtnl_socket_pair[0], on_address_change, expose_args, &rtnl);
+                r = expose_port_watch_rtnl(event, fd_inner_socket_pair[0], on_address_change, expose_args, &rtnl);
                 if (r < 0)
                         return r;
 
@@ -5142,14 +5180,12 @@
                 (void) expose_port_execute(rtnl, &expose_args->fw_ctx, arg_expose_ports, AF_INET6, &expose_args->address6);
         }
 
-        rtnl_socket_pair[0] = safe_close(rtnl_socket_pair[0]);
-
         if (arg_console_mode != CONSOLE_PIPE) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 PTYForwardFlags flags = 0;
 
                 /* Retrieve the master pty allocated by inner child */
-                fd = receive_one_fd(master_pty_socket_pair[0], 0);
+                fd = receive_one_fd(fd_inner_socket_pair[0], 0);
                 if (fd < 0)
                         return log_error_errno(fd, "Failed to receive master pty from the inner child: %m");
 
@@ -5180,6 +5216,8 @@
                 *master = TAKE_FD(fd);
         }
 
+        fd_inner_socket_pair[0] = safe_close(fd_inner_socket_pair[0]);
+
         r = sd_event_loop(event);
         if (r < 0)
                 return log_error_errno(r, "Failed to run event loop: %m");
@@ -5201,6 +5239,8 @@
         /* Normally redundant, but better safe than sorry */
         (void) kill(*pid, SIGKILL);
 
+        fd_kmsg_fifo = safe_close(fd_kmsg_fifo);
+
         if (arg_private_network) {
                 /* Move network interfaces back to the parent network namespace. We use `safe_fork`
                  * to avoid having to move the parent to the child network namespace. */
@@ -5209,7 +5249,7 @@
                         return r;
 
                 if (r == 0) {
-                        _cleanup_close_ int parent_netns_fd = -1;
+                        _cleanup_close_ int parent_netns_fd = -EBADF;
 
                         r = namespace_open(getpid(), NULL, NULL, &parent_netns_fd, NULL, NULL);
                         if (r < 0) {
@@ -5231,8 +5271,7 @@
                 }
         }
 
-        r = wait_for_container(*pid, &container_status);
-        *pid = 0;
+        r = wait_for_container(TAKE_PID(*pid), &container_status);
 
         /* Tell machined that we are gone. */
         if (bus)
@@ -5275,25 +5314,25 @@
 }
 
 static int initialize_rlimits(void) {
-        /* The default resource limits the kernel passes to PID 1, as per kernel 4.16. Let's pass our container payload
+        /* The default resource limits the kernel passes to PID 1, as per kernel 5.16. Let's pass our container payload
          * the same values as the kernel originally passed to PID 1, in order to minimize differences between host and
          * container execution environments. */
 
         static const struct rlimit kernel_defaults[_RLIMIT_MAX] = {
-                [RLIMIT_AS]       = { RLIM_INFINITY, RLIM_INFINITY },
-                [RLIMIT_CORE]     = { 0,             RLIM_INFINITY },
-                [RLIMIT_CPU]      = { RLIM_INFINITY, RLIM_INFINITY },
-                [RLIMIT_DATA]     = { RLIM_INFINITY, RLIM_INFINITY },
-                [RLIMIT_FSIZE]    = { RLIM_INFINITY, RLIM_INFINITY },
-                [RLIMIT_LOCKS]    = { RLIM_INFINITY, RLIM_INFINITY },
-                [RLIMIT_MEMLOCK]  = { 65536,         65536         },
-                [RLIMIT_MSGQUEUE] = { 819200,        819200        },
-                [RLIMIT_NICE]     = { 0,             0             },
-                [RLIMIT_NOFILE]   = { 1024,          4096          },
-                [RLIMIT_RSS]      = { RLIM_INFINITY, RLIM_INFINITY },
-                [RLIMIT_RTPRIO]   = { 0,             0             },
-                [RLIMIT_RTTIME]   = { RLIM_INFINITY, RLIM_INFINITY },
-                [RLIMIT_STACK]    = { 8388608,       RLIM_INFINITY },
+                [RLIMIT_AS]       = { RLIM_INFINITY,          RLIM_INFINITY          },
+                [RLIMIT_CORE]     = { 0,                      RLIM_INFINITY          },
+                [RLIMIT_CPU]      = { RLIM_INFINITY,          RLIM_INFINITY          },
+                [RLIMIT_DATA]     = { RLIM_INFINITY,          RLIM_INFINITY          },
+                [RLIMIT_FSIZE]    = { RLIM_INFINITY,          RLIM_INFINITY          },
+                [RLIMIT_LOCKS]    = { RLIM_INFINITY,          RLIM_INFINITY          },
+                [RLIMIT_MEMLOCK]  = { DEFAULT_RLIMIT_MEMLOCK, DEFAULT_RLIMIT_MEMLOCK },
+                [RLIMIT_MSGQUEUE] = { 819200,                 819200                 },
+                [RLIMIT_NICE]     = { 0,                      0                      },
+                [RLIMIT_NOFILE]   = { 1024,                   4096                   },
+                [RLIMIT_RSS]      = { RLIM_INFINITY,          RLIM_INFINITY          },
+                [RLIMIT_RTPRIO]   = { 0,                      0                      },
+                [RLIMIT_RTTIME]   = { RLIM_INFINITY,          RLIM_INFINITY          },
+                [RLIMIT_STACK]    = { 8388608,                RLIM_INFINITY          },
 
                 /* The kernel scales the default for RLIMIT_NPROC and RLIMIT_SIGPENDING based on the system's amount of
                  * RAM. To provide best compatibility we'll read these limits off PID 1 instead of hardcoding them
@@ -5318,6 +5357,15 @@
                                         return log_error_errno(errno, "Failed to read resource limit RLIMIT_%s of PID 1: %m", rlimit_to_string(rl));
 
                                 v = &buffer;
+                        } else if (rl == RLIMIT_NOFILE) {
+                                /* We nowadays bump RLIMIT_NOFILE's hard limit early in PID 1 for all
+                                 * userspace. Given that nspawn containers are often run without our PID 1,
+                                 * let's grant the containers a raised RLIMIT_NOFILE hard limit by default,
+                                 * so that container userspace gets similar resources as host userspace
+                                 * gets. */
+                                buffer = kernel_defaults[rl];
+                                buffer.rlim_max = MIN((rlim_t) read_nr_open(), (rlim_t) HIGH_RLIMIT_NOFILE);
+                                v = &buffer;
                         } else
                                 v = kernel_defaults + rl;
 
@@ -5338,15 +5386,7 @@
 }
 
 static int cant_be_in_netns(void) {
-        union sockaddr_union sa = {
-                .un = {
-                        .sun_family = AF_UNIX,
-                        .sun_path = "/run/udev/control",
-                },
-        };
-        char udev_path[STRLEN("/proc//ns/net") + DECIMAL_STR_MAX(pid_t)];
-        _cleanup_free_ char *udev_ns = NULL, *our_ns = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct ucred ucred;
         int r;
 
@@ -5361,29 +5401,23 @@
         if (fd < 0)
                 return log_error_errno(errno, "Failed to allocate udev control socket: %m");
 
-        if (connect(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0) {
-
-                if (errno == ENOENT || ERRNO_IS_DISCONNECT(errno))
+        r = connect_unix_path(fd, AT_FDCWD, "/run/udev/control");
+        if (r < 0) {
+                if (r == -ENOENT || ERRNO_IS_DISCONNECT(r))
                         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                                "Sorry, but --image= requires access to the host's /run/ hierarchy, since we need access to udev.");
 
-                return log_error_errno(errno, "Failed to connect socket to udev control socket: %m");
+                return log_error_errno(r, "Failed to connect socket to udev control socket: %m");
         }
 
         r = getpeercred(fd, &ucred);
         if (r < 0)
                 return log_error_errno(r, "Failed to determine peer of udev control socket: %m");
 
-        xsprintf(udev_path, "/proc/" PID_FMT "/ns/net", ucred.pid);
-        r = readlink_malloc(udev_path, &udev_ns);
+        r = in_same_namespace(ucred.pid, 0, NAMESPACE_NET);
         if (r < 0)
-                return log_error_errno(r, "Failed to read network namespace of udev: %m");
-
-        r = readlink_malloc("/proc/self/ns/net", &our_ns);
-        if (r < 0)
-                return log_error_errno(r, "Failed to read our own network namespace: %m");
-
-        if (!streq(our_ns, udev_ns))
+                return log_error_errno(r, "Failed to determine network namespace of udev: %m");
+        if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                        "Sorry, but --image= is only supported in the main network namespace, since we need access to udev/AF_NETLINK.");
         return 0;
@@ -5392,7 +5426,7 @@
 static int run(int argc, char *argv[]) {
         bool secondary = false, remove_directory = false, remove_image = false,
                 veth_created = false, remove_tmprootdir = false;
-        _cleanup_close_ int master = -1;
+        _cleanup_close_ int master = -EBADF;
         _cleanup_fdset_free_ FDSet *fds = NULL;
         int r, n_fd_passed, ret = EXIT_SUCCESS;
         char veth_name[IFNAMSIZ] = "";
@@ -5400,7 +5434,6 @@
         _cleanup_(release_lock_file) LockFile tree_global_lock = LOCK_FILE_INIT, tree_local_lock = LOCK_FILE_INIT;
         char tmprootdir[] = "/tmp/nspawn-root-XXXXXX";
         _cleanup_(loop_device_unrefp) LoopDevice *loop = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(dissected_image_unrefp) DissectedImage *dissected_image = NULL;
         _cleanup_(fw_ctx_freep) FirewallContext *fw_ctx = NULL;
         pid_t pid = 0;
@@ -5584,31 +5617,36 @@
                 }
 
                 if (arg_start_mode == START_BOOT) {
+                        _cleanup_free_ char *b = NULL;
                         const char *p;
 
-                        if (arg_pivot_root_new)
-                                p = prefix_roota(arg_directory, arg_pivot_root_new);
-                        else
+                        if (arg_pivot_root_new) {
+                                b = path_join(arg_directory, arg_pivot_root_new);
+                                if (!b)
+                                        return log_oom();
+
+                                p = b;
+                        } else
                                 p = arg_directory;
 
                         if (path_is_os_tree(p) <= 0) {
-                                log_error("Directory %s doesn't look like an OS root directory (os-release file is missing). Refusing.", p);
-                                r = -EINVAL;
+                                r = log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                    "Directory %s doesn't look like an OS root directory (os-release file is missing). Refusing.", p);
                                 goto finish;
                         }
                 } else {
-                        const char *p, *q;
+                        _cleanup_free_ char *p = NULL;
 
                         if (arg_pivot_root_new)
-                                p = prefix_roota(arg_directory, arg_pivot_root_new);
+                                p = path_join(arg_directory, arg_pivot_root_new, "/usr/");
                         else
-                                p = arg_directory;
+                                p = path_join(arg_directory, "/usr/");
+                        if (!p)
+                                return log_oom();
 
-                        q = strjoina(p, "/usr/");
-
-                        if (laccess(q, F_OK) < 0) {
-                                log_error("Directory %s doesn't look like it has an OS tree. Refusing.", p);
-                                r = -EINVAL;
+                        if (laccess(p, F_OK) < 0) {
+                                r = log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                    "Directory %s doesn't look like it has an OS tree (/usr/ directory is missing). Refusing.", arg_directory);
                                 goto finish;
                         }
                 }
@@ -5618,7 +5656,9 @@
                         DISSECT_IMAGE_GENERIC_ROOT |
                         DISSECT_IMAGE_REQUIRE_ROOT |
                         DISSECT_IMAGE_RELAX_VAR_CHECK |
-                        DISSECT_IMAGE_USR_NO_ROOT;
+                        DISSECT_IMAGE_USR_NO_ROOT |
+                        DISSECT_IMAGE_ADD_PARTITION_DEVICES |
+                        DISSECT_IMAGE_PIN_PARTITION_DEVICES;
                 assert(arg_image);
                 assert(!arg_template);
 
@@ -5696,20 +5736,19 @@
                 r = loop_device_make_by_path(
                                 arg_image,
                                 arg_read_only ? O_RDONLY : O_RDWR,
+                                /* sector_size= */ UINT32_MAX,
                                 FLAGS_SET(dissect_image_flags, DISSECT_IMAGE_NO_PARTITION_TABLE) ? 0 : LO_FLAGS_PARTSCAN,
+                                LOCK_SH,
                                 &loop);
                 if (r < 0) {
                         log_error_errno(r, "Failed to set up loopback block device: %m");
                         goto finish;
                 }
 
-                r = dissect_image_and_warn(
-                                loop->fd,
-                                arg_image,
+                r = dissect_loop_device_and_warn(
+                                loop,
                                 &arg_verity_settings,
                                 NULL,
-                                loop->uevent_seqnum_not_before,
-                                loop->timestamp_not_before,
                                 dissect_image_flags,
                                 &dissected_image);
                 if (r == -ENOPKG) {
@@ -5717,7 +5756,7 @@
                         log_notice("Note that the disk image needs to\n"
                                    "    a) either contain only a single MBR partition of type 0x83 that is marked bootable\n"
                                    "    b) or contain a single GPT partition of type 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n"
-                                   "    c) or follow https://systemd.io/DISCOVERABLE_PARTITIONS\n"
+                                   "    c) or follow https://uapi-group.org/specifications/specs/discoverable_partitions_specification\n"
                                    "    d) or contain a file system without a partition table\n"
                                    "in order to be bootable with systemd-nspawn.");
                         goto finish;
@@ -5725,15 +5764,22 @@
                 if (r < 0)
                         goto finish;
 
-                if (!arg_verity_settings.root_hash && dissected_image->can_verity)
-                        log_notice("Note: image %s contains verity information, but no root hash specified! Proceeding without integrity checking.", arg_image);
+                r = dissected_image_load_verity_sig_partition(
+                                dissected_image,
+                                loop->fd,
+                                &arg_verity_settings);
+                if (r < 0)
+                        goto finish;
+
+                if (dissected_image->has_verity && !arg_verity_settings.root_hash && !dissected_image->has_verity_sig)
+                        log_notice("Note: image %s contains verity information, but no root hash specified and no embedded "
+                                   "root hash signature found! Proceeding without integrity checking.", arg_image);
 
                 r = dissected_image_decrypt_interactively(
                                 dissected_image,
                                 NULL,
                                 &arg_verity_settings,
-                                0,
-                                &decrypted_image);
+                                0);
                 if (r < 0)
                         goto finish;
 
@@ -5755,7 +5801,7 @@
                 arg_quiet = true;
 
         if (!arg_quiet)
-                log_info("Spawning container %s on %s.\nPress ^] three times within 1s to kill container.",
+                log_info("Spawning container %s on %s.\nPress Ctrl-] three times within 1s to kill container.",
                          arg_machine, arg_image ?: arg_directory);
 
         assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGCHLD, SIGWINCH, SIGTERM, SIGINT, -1) >= 0);
diff --git a/src/nspawn/test-nspawn-util.c b/src/nspawn/test-nspawn-util.c
new file mode 100644
index 0000000..08c8050
--- /dev/null
+++ b/src/nspawn/test-nspawn-util.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "nspawn-util.h"
+#include "string-util.h"
+#include "strv.h"
+#include "tests.h"
+
+TEST(systemd_installation_has_version) {
+        int r;
+
+        FOREACH_STRING(version, "0", "231", STRINGIFY(PROJECT_VERSION), "999") {
+                r = systemd_installation_has_version(saved_argv[1], version);
+                assert_se(r >= 0);
+                log_info("%s has systemd >= %s: %s",
+                         saved_argv[1] ?: "Current installation", version, yes_no(r));
+        }
+}
+
+/* This program can be called with a path to an installation root.
+ * For example: build/test-nspawn-util /var/lib/machines/rawhide
+ */
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/nss-myhostname/nss-myhostname.c b/src/nss-myhostname/nss-myhostname.c
index 67b1554..ed41730 100644
--- a/src/nss-myhostname/nss-myhostname.c
+++ b/src/nss-myhostname/nss-myhostname.c
@@ -12,7 +12,9 @@
 #include "local-addresses.h"
 #include "macro.h"
 #include "nss-util.h"
+#include "resolve-util.h"
 #include "signal-util.h"
+#include "socket-util.h"
 #include "string-util.h"
 
 /* We use 127.0.0.2 as IPv4 address. This has the advantage over
@@ -20,7 +22,7 @@
  * IPv6 we use ::1 which unfortunately will not translate back to the
  * hostname but instead something like "localhost" or so. */
 
-#define LOCALADDRESS_IPV4 (htobe32(0x7F000002))
+#define LOCALADDRESS_IPV4 (htobe32(INADDR_LOCALADDRESS))
 #define LOCALADDRESS_IPV6 &in6addr_loopback
 
 NSS_GETHOSTBYNAME_PROTOTYPES(myhostname);
@@ -95,7 +97,7 @@
         }
 
         l = strlen(canonical);
-        ms = ALIGN(l+1) + ALIGN(sizeof(struct gaih_addrtuple)) * (n_addresses > 0 ? n_addresses : 2);
+        ms = ALIGN(l+1) + ALIGN(sizeof(struct gaih_addrtuple)) * (n_addresses > 0 ? n_addresses : 1 + socket_ipv6_is_enabled());
         if (buflen < ms) {
                 UNPROTECT_ERRNO;
                 *errnop = ERANGE;
@@ -111,15 +113,17 @@
         assert(n_addresses >= 0);
         if (n_addresses == 0) {
                 /* Second, fill in IPv6 tuple */
-                r_tuple = (struct gaih_addrtuple*) (buffer + idx);
-                r_tuple->next = r_tuple_prev;
-                r_tuple->name = r_name;
-                r_tuple->family = AF_INET6;
-                memcpy(r_tuple->addr, LOCALADDRESS_IPV6, 16);
-                r_tuple->scopeid = 0;
+                if (socket_ipv6_is_enabled()) {
+                        r_tuple = (struct gaih_addrtuple*) (buffer + idx);
+                        r_tuple->next = r_tuple_prev;
+                        r_tuple->name = r_name;
+                        r_tuple->family = AF_INET6;
+                        memcpy(r_tuple->addr, LOCALADDRESS_IPV6, 16);
+                        r_tuple->scopeid = 0;
 
-                idx += ALIGN(sizeof(struct gaih_addrtuple));
-                r_tuple_prev = r_tuple;
+                        idx += ALIGN(sizeof(struct gaih_addrtuple));
+                        r_tuple_prev = r_tuple;
+                }
 
                 /* Third, fill in IPv4 tuple */
                 r_tuple = (struct gaih_addrtuple*) (buffer + idx);
@@ -189,6 +193,7 @@
         unsigned n, c;
 
         assert(canonical);
+        assert(IN_SET(af, AF_INET, AF_INET6));
         assert(result);
         assert(buffer);
         assert(errnop);
@@ -208,8 +213,8 @@
                 (additional ? ALIGN(l_additional+1) : 0) +
                 sizeof(char*) +
                 (additional ? sizeof(char*) : 0) +
-                (c > 0 ? c : 1) * ALIGN(alen) +
-                (c > 0 ? c+1 : 2) * sizeof(char*);
+                (c > 0 ? c : af == AF_INET ? 1 : socket_ipv6_is_enabled()) * ALIGN(alen) +
+                (c > 0 ? c+1 : af == AF_INET ? 2 : (unsigned) socket_ipv6_is_enabled() + 1) * sizeof(char*);
 
         if (buflen < ms) {
                 UNPROTECT_ERRNO;
@@ -255,12 +260,12 @@
 
                 assert(i == c);
                 idx += c*ALIGN(alen);
-        } else {
-                if (af == AF_INET)
-                        *(uint32_t*) r_addr = local_address_ipv4;
-                else
-                        memcpy(r_addr, LOCALADDRESS_IPV6, 16);
 
+        } else if (af == AF_INET) {
+                *(uint32_t*) r_addr = local_address_ipv4;
+                idx += ALIGN(alen);
+        } else if (socket_ipv6_is_enabled()) {
+                memcpy(r_addr, LOCALADDRESS_IPV6, 16);
                 idx += ALIGN(alen);
         }
 
@@ -275,10 +280,13 @@
                 ((char**) r_addr_list)[i] = NULL;
                 idx += (c+1) * sizeof(char*);
 
-        } else {
+        } else if (af == AF_INET || socket_ipv6_is_enabled()) {
                 ((char**) r_addr_list)[0] = r_addr;
                 ((char**) r_addr_list)[1] = NULL;
                 idx += 2 * sizeof(char*);
+        } else {
+                ((char**) r_addr_list)[0] = NULL;
+                idx += sizeof(char*);
         }
 
         /* Verify the size matches */
@@ -338,7 +346,11 @@
                 return NSS_STATUS_UNAVAIL;
         }
 
+        if (af == AF_INET6 && !socket_ipv6_is_enabled())
+                goto not_found;
+
         if (is_localhost(name)) {
+
                 canonical = "localhost";
                 local_address_ipv4 = htobe32(INADDR_LOOPBACK);
 
@@ -450,6 +462,9 @@
         } else {
                 assert(af == AF_INET6);
 
+                if (!socket_ipv6_is_enabled())
+                        goto not_found;
+
                 if (memcmp(addr, LOCALADDRESS_IPV6, 16) == 0) {
                         canonical = "localhost";
                         additional_from_hostname = true;
@@ -457,28 +472,21 @@
                 }
         }
 
-        n_addresses = local_addresses(NULL, 0, AF_UNSPEC, &addresses);
-        for (a = addresses, n = 0; (int) n < n_addresses; n++, a++) {
-                if (af != a->family)
-                        continue;
-
+        n_addresses = local_addresses(NULL, 0, af, &addresses);
+        for (a = addresses, n = 0; (int) n < n_addresses; n++, a++)
                 if (memcmp(addr, &a->address, FAMILY_ADDRESS_SIZE(af)) == 0)
                         goto found;
-        }
 
         addresses = mfree(addresses);
 
-        n_addresses = local_gateways(NULL, 0, AF_UNSPEC, &addresses);
-        for (a = addresses, n = 0; (int) n < n_addresses; n++, a++) {
-                if (af != a->family)
-                        continue;
-
+        n_addresses = local_gateways(NULL, 0, af, &addresses);
+        for (a = addresses, n = 0; (int) n < n_addresses; n++, a++)
                 if (memcmp(addr, &a->address, FAMILY_ADDRESS_SIZE(af)) == 0) {
                         canonical = "_gateway";
                         goto found;
                 }
-        }
 
+not_found:
         *h_errnop = HOST_NOT_FOUND;
         return NSS_STATUS_NOTFOUND;
 
diff --git a/src/nss-resolve/nss-resolve.c b/src/nss-resolve/nss-resolve.c
index dd2e520..0226752 100644
--- a/src/nss-resolve/nss-resolve.c
+++ b/src/nss-resolve/nss-resolve.c
@@ -10,6 +10,7 @@
 
 #include "env-util.h"
 #include "errno-util.h"
+#include "glyph-util.h"
 #include "in-addr-util.h"
 #include "macro.h"
 #include "nss-util.h"
@@ -94,11 +95,10 @@
 }
 
 static int json_dispatch_ifindex(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        int *ifi = userdata;
-        intmax_t t;
+        int *ifi = ASSERT_PTR(userdata);
+        int64_t t;
 
         assert(variant);
-        assert(ifi);
 
         if (!json_variant_is_integer(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name));
@@ -112,11 +112,10 @@
 }
 
 static int json_dispatch_family(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        int *family = userdata;
-        intmax_t t;
+        int *family = ASSERT_PTR(userdata);
+        int64_t t;
 
         assert(variant);
-        assert(family);
 
         if (!json_variant_is_integer(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name));
@@ -157,13 +156,12 @@
 } AddressParameters;
 
 static int json_dispatch_address(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        AddressParameters *p = userdata;
+        AddressParameters *p = ASSERT_PTR(userdata);
         union in_addr_union buf = {};
         JsonVariant *i;
         size_t n, k = 0;
 
         assert(variant);
-        assert(p);
 
         if (!json_variant_is_array(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array.", strna(name));
@@ -173,14 +171,16 @@
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is array of unexpected size.", strna(name));
 
         JSON_VARIANT_ARRAY_FOREACH(i, variant) {
-                intmax_t b;
+                int64_t b;
 
                 if (!json_variant_is_integer(i))
                         return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Element %zu of JSON field '%s' is not an integer.", k, strna(name));
 
                 b = json_variant_integer(i);
                 if (b < 0 || b > 0xff)
-                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Element %zu of JSON field '%s' is out of range 0…255.", k, strna(name));
+                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL),
+                                        "Element %zu of JSON field '%s' is out of range 0%s255.",
+                                        k, strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
                 buf.bytes[k++] = (uint8_t) b;
         }
@@ -198,19 +198,29 @@
         {}
 };
 
-static uint64_t query_flags(void) {
-        uint64_t f = 0;
+static uint64_t query_flag(
+                const char *name,
+                const int value,
+                uint64_t flag) {
         int r;
 
-        /* Allow callers to turn off validation, when we resolve via nss-resolve */
+        r = getenv_bool_secure(name);
+        if (r >= 0)
+                return r == value ? flag : 0;
+        if (r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $%s, ignoring.", name);
+        return 0;
+}
 
-        r = getenv_bool_secure("SYSTEMD_NSS_RESOLVE_VALIDATE");
-        if (r < 0 && r != -ENXIO)
-                log_debug_errno(r, "Failed to parse $SYSTEMD_NSS_RESOLVE_VALIDATE value, ignoring.");
-        else if (r == 0)
-                f |= SD_RESOLVED_NO_VALIDATE;
-
-        return f;
+static uint64_t query_flags(void) {
+        /* Allow callers to turn off validation, synthetization, caching, etc., when we resolve via
+         * nss-resolve. */
+        return  query_flag("SYSTEMD_NSS_RESOLVE_VALIDATE", 0, SD_RESOLVED_NO_VALIDATE) |
+                query_flag("SYSTEMD_NSS_RESOLVE_SYNTHESIZE", 0, SD_RESOLVED_NO_SYNTHESIZE) |
+                query_flag("SYSTEMD_NSS_RESOLVE_CACHE", 0, SD_RESOLVED_NO_CACHE) |
+                query_flag("SYSTEMD_NSS_RESOLVE_ZONE", 0, SD_RESOLVED_NO_ZONE) |
+                query_flag("SYSTEMD_NSS_RESOLVE_TRUST_ANCHOR", 0, SD_RESOLVED_NO_TRUST_ANCHOR) |
+                query_flag("SYSTEMD_NSS_RESOLVE_NETWORK", 0, SD_RESOLVED_NO_NETWORK);
 }
 
 enum nss_status _nss_resolve_gethostbyname4_r(
diff --git a/src/nss-systemd/nss-systemd.c b/src/nss-systemd/nss-systemd.c
index e87f1d3..1d6e253 100644
--- a/src/nss-systemd/nss-systemd.c
+++ b/src/nss-systemd/nss-systemd.c
@@ -9,6 +9,7 @@
 #include "fd-util.h"
 #include "log.h"
 #include "macro.h"
+#include "missing_threads.h"
 #include "nss-systemd.h"
 #include "nss-util.h"
 #include "pthread-util.h"
@@ -26,7 +27,7 @@
         .pw_gid = 0,
         .pw_gecos = (char*) "Super User",
         .pw_dir = (char*) "/root",
-        .pw_shell = (char*) "/bin/sh",
+        .pw_shell = NULL,
 };
 
 static const struct spwd root_spwd = {
@@ -46,7 +47,7 @@
         .pw_passwd = (char*) PASSWORD_LOCKED_AND_INVALID,
         .pw_uid = UID_NOBODY,
         .pw_gid = GID_NOBODY,
-        .pw_gecos = (char*) "User Nobody",
+        .pw_gecos = (char*) "Kernel Overflow User",
         .pw_dir = (char*) "/",
         .pw_shell = (char*) NOLOGIN,
 };
@@ -142,24 +143,25 @@
 static enum nss_status copy_synthesized_passwd(
                 struct passwd *dest,
                 const struct passwd *src,
+                const char *fallback_shell,
                 char *buffer, size_t buflen,
                 int *errnop) {
 
-        size_t required;
-
         assert(dest);
         assert(src);
         assert(src->pw_name);
         assert(src->pw_passwd);
         assert(src->pw_gecos);
         assert(src->pw_dir);
-        assert(src->pw_shell);
 
-        required = strlen(src->pw_name) + 1;
-        required += strlen(src->pw_passwd) + 1;
-        required += strlen(src->pw_gecos) + 1;
-        required += strlen(src->pw_dir) + 1;
-        required += strlen(src->pw_shell) + 1;
+        const char *shell = ASSERT_PTR(src->pw_shell ?: fallback_shell);
+
+        size_t required =
+                strlen(src->pw_name) + 1 +
+                strlen(src->pw_passwd) + 1 +
+                strlen(src->pw_gecos) + 1 +
+                strlen(src->pw_dir) + 1 +
+                strlen(shell) + 1;
 
         if (buflen < required) {
                 *errnop = ERANGE;
@@ -176,7 +178,7 @@
         dest->pw_gecos = stpcpy(dest->pw_passwd, src->pw_passwd) + 1;
         dest->pw_dir = stpcpy(dest->pw_gecos, src->pw_gecos) + 1;
         dest->pw_shell = stpcpy(dest->pw_dir, src->pw_dir) + 1;
-        strcpy(dest->pw_shell, src->pw_shell);
+        strcpy(dest->pw_shell, shell);
 
         return NSS_STATUS_SUCCESS;
 }
@@ -187,15 +189,14 @@
                 char *buffer, size_t buflen,
                 int *errnop) {
 
-        size_t required;
-
         assert(dest);
         assert(src);
         assert(src->sp_namp);
         assert(src->sp_pwdp);
 
-        required = strlen(src->sp_namp) + 1;
-        required += strlen(src->sp_pwdp) + 1;
+        size_t required =
+                strlen(src->sp_namp) + 1 +
+                strlen(src->sp_pwdp) + 1;
 
         if (buflen < required) {
                 *errnop = ERANGE;
@@ -220,8 +221,6 @@
                 char *buffer, size_t buflen,
                 int *errnop) {
 
-        size_t required;
-
         assert(dest);
         assert(src);
         assert(src->gr_name);
@@ -229,9 +228,10 @@
         assert(src->gr_mem);
         assert(!*src->gr_mem); /* Our synthesized records' gr_mem is always just NULL... */
 
-        required = strlen(src->gr_name) + 1;
-        required += strlen(src->gr_passwd) + 1;
-        required += sizeof(char*); /* ...but that NULL still needs to be stored into the buffer! */
+        size_t required =
+                strlen(src->gr_name) + 1 +
+                strlen(src->gr_passwd) + 1 +
+                sizeof(char*); /* ...but that NULL still needs to be stored into the buffer! */
 
         if (buflen < ALIGN(required)) {
                 *errnop = ERANGE;
@@ -257,15 +257,14 @@
                 char *buffer, size_t buflen,
                 int *errnop) {
 
-        size_t required;
-
         assert(dest);
         assert(src);
         assert(src->sg_namp);
         assert(src->sg_passwd);
 
-        required = strlen(src->sg_namp) + 1;
-        required += strlen(src->sg_passwd) + 1;
+        size_t required =
+                strlen(src->sg_namp) + 1 +
+                strlen(src->sg_passwd) + 1;
 
         if (buflen < required) {
                 *errnop = ERANGE;
@@ -310,13 +309,17 @@
         if (getenv_bool_secure("SYSTEMD_NSS_BYPASS_SYNTHETIC") <= 0) {
 
                 if (streq(name, root_passwd.pw_name))
-                        return copy_synthesized_passwd(pwd, &root_passwd, buffer, buflen, errnop);
+                        return copy_synthesized_passwd(pwd, &root_passwd,
+                                                       default_root_shell(NULL),
+                                                       buffer, buflen, errnop);
 
                 if (streq(name, nobody_passwd.pw_name)) {
                         if (!synthesize_nobody())
                                 return NSS_STATUS_NOTFOUND;
 
-                        return copy_synthesized_passwd(pwd, &nobody_passwd, buffer, buflen, errnop);
+                        return copy_synthesized_passwd(pwd, &nobody_passwd,
+                                                       NULL,
+                                                       buffer, buflen, errnop);
                 }
 
         } else if (STR_IN_SET(name, root_passwd.pw_name, nobody_passwd.pw_name))
@@ -354,13 +357,17 @@
         if (getenv_bool_secure("SYSTEMD_NSS_BYPASS_SYNTHETIC") <= 0) {
 
                 if (uid == root_passwd.pw_uid)
-                        return copy_synthesized_passwd(pwd, &root_passwd, buffer, buflen, errnop);
+                        return copy_synthesized_passwd(pwd, &root_passwd,
+                                                       default_root_shell(NULL),
+                                                       buffer, buflen, errnop);
 
                 if (uid == nobody_passwd.pw_uid) {
                         if (!synthesize_nobody())
                                 return NSS_STATUS_NOTFOUND;
 
-                        return copy_synthesized_passwd(pwd, &nobody_passwd, buffer, buflen, errnop);
+                        return copy_synthesized_passwd(pwd, &nobody_passwd,
+                                                       NULL,
+                                                       buffer, buflen, errnop);
                 }
 
         } else if (uid == root_passwd.pw_uid || uid == nobody_passwd.pw_uid)
diff --git a/src/nss-systemd/userdb-glue.c b/src/nss-systemd/userdb-glue.c
index 002e692..c69667d 100644
--- a/src/nss-systemd/userdb-glue.c
+++ b/src/nss-systemd/userdb-glue.c
@@ -217,7 +217,7 @@
                 char *buffer,
                 size_t buflen) {
 
-        char **array = NULL, *p, **m;
+        char **array = NULL, *p;
         size_t required, n = 0, i = 0;
 
         assert(g);
diff --git a/src/oom/meson.build b/src/oom/meson.build
index 4e1c854..1c4e7f1 100644
--- a/src/oom/meson.build
+++ b/src/oom/meson.build
@@ -1,18 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_oomd_sources = files('''
-        oomd-manager-bus.c
-        oomd-manager-bus.h
-        oomd-manager.c
-        oomd-manager.h
-        oomd-util.c
-        oomd-util.h
-        oomd.c
-'''.split())
+systemd_oomd_sources = files(
+        'oomd-manager-bus.c',
+        'oomd-manager.c',
+        'oomd-util.c',
+        'oomd.c',
+)
 
-oomctl_sources = files('''
-        oomctl.c
-'''.split())
+oomctl_sources = files('oomctl.c')
 
 if conf.get('ENABLE_OOMD') == 1
         install_data('org.freedesktop.oom1.conf',
@@ -28,7 +23,8 @@
 endif
 
 tests += [
-        [['src/oom/test-oomd-util.c',
-          'src/oom/oomd-util.c',
-          'src/oom/oomd-util.h']],
+        [files('test-oomd-util.c',
+               'oomd-util.c'),
+	 [],
+	 [libatomic]]
 ]
diff --git a/src/oom/oomctl.c b/src/oom/oomctl.c
index 0d215cf..d18f999 100644
--- a/src/oom/oomctl.c
+++ b/src/oom/oomctl.c
@@ -3,6 +3,7 @@
 #include <getopt.h>
 #include <unistd.h>
 
+#include "build.h"
 #include "bus-error.h"
 #include "copy.h"
 #include "main-func.h"
@@ -16,7 +17,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("oomctl", "1", &link);
         if (r < 0)
@@ -45,14 +46,14 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        int fd = -1;
+        int fd = -EBADF;
         int r;
 
         r = sd_bus_open_system(&bus);
         if (r < 0)
                 return log_error_errno(r, "Failed to connect system bus: %m");
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = sd_bus_call_method(
                         bus,
@@ -110,7 +111,7 @@
                                 return -EINVAL;
 
                         default:
-                                assert_not_reached("Invalid option passed.");
+                                assert_not_reached();
                 }
 
         return 1;
diff --git a/src/oom/oomd-manager-bus.c b/src/oom/oomd-manager-bus.c
index b41e366..0581d58 100644
--- a/src/oom/oomd-manager-bus.c
+++ b/src/oom/oomd-manager-bus.c
@@ -12,12 +12,11 @@
 
 static int bus_method_dump_by_fd(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *dump = NULL;
-        _cleanup_close_ int fd = -1;
-        Manager *m = userdata;
+        _cleanup_close_ int fd = -EBADF;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(m);
 
         r = manager_get_dump_string(m, &dump);
         if (r < 0)
@@ -38,6 +37,11 @@
                                  SD_BUS_PARAM(fd),
                                  bus_method_dump_by_fd,
                                  SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_SIGNAL_WITH_NAMES("Killed",
+                                 "ss",
+                                 SD_BUS_PARAM(cgroup)
+                                 SD_BUS_PARAM(reason),
+                                 0),
         SD_BUS_VTABLE_END
 };
 
diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c
index 891b0ac..4a43807 100644
--- a/src/oom/oomd-manager.c
+++ b/src/oom/oomd-manager.c
@@ -1,28 +1,31 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "sd-daemon.h"
+
 #include "bus-log-control-api.h"
 #include "bus-util.h"
 #include "bus-polkit.h"
 #include "cgroup-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "format-util.h"
 #include "memory-util.h"
 #include "oomd-manager-bus.h"
 #include "oomd-manager.h"
 #include "path-util.h"
 #include "percent-util.h"
 
-typedef struct ManagedOOMReply {
+typedef struct ManagedOOMMessage {
         ManagedOOMMode mode;
         char *path;
         char *property;
         uint32_t limit;
-} ManagedOOMReply;
+} ManagedOOMMessage;
 
-static void managed_oom_reply_destroy(ManagedOOMReply *reply) {
-        assert(reply);
-        free(reply->path);
-        free(reply->property);
+static void managed_oom_message_destroy(ManagedOOMMessage *message) {
+        assert(message);
+        free(message->path);
+        free(message->property);
 }
 
 static int managed_oom_mode(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
@@ -40,25 +43,117 @@
         return 0;
 }
 
+static int process_managed_oom_message(Manager *m, uid_t uid, JsonVariant *parameters) {
+        JsonVariant *c, *cgroups;
+        int r;
+
+        static const JsonDispatch dispatch_table[] = {
+                { "mode",     JSON_VARIANT_STRING,   managed_oom_mode,     offsetof(ManagedOOMMessage, mode),     JSON_MANDATORY },
+                { "path",     JSON_VARIANT_STRING,   json_dispatch_string, offsetof(ManagedOOMMessage, path),     JSON_MANDATORY },
+                { "property", JSON_VARIANT_STRING,   json_dispatch_string, offsetof(ManagedOOMMessage, property), JSON_MANDATORY },
+                { "limit",    JSON_VARIANT_UNSIGNED, json_dispatch_uint32, offsetof(ManagedOOMMessage, limit),    0 },
+                {},
+        };
+
+        assert(m);
+        assert(parameters);
+
+        cgroups = json_variant_by_key(parameters, "cgroups");
+        if (!cgroups)
+                return -EINVAL;
+
+        /* Skip malformed elements and keep processing in case the others are good */
+        JSON_VARIANT_ARRAY_FOREACH(c, cgroups) {
+                _cleanup_(managed_oom_message_destroy) ManagedOOMMessage message = {};
+                OomdCGroupContext *ctx;
+                Hashmap *monitor_hm;
+                loadavg_t limit;
+
+                if (!json_variant_is_object(c))
+                        continue;
+
+                r = json_dispatch(c, dispatch_table, NULL, 0, &message);
+                if (r == -ENOMEM)
+                        return r;
+                if (r < 0)
+                        continue;
+
+                if (uid != 0) {
+                        uid_t cg_uid;
+
+                        r = cg_path_get_owner_uid(message.path, &cg_uid);
+                        if (r < 0) {
+                                log_debug_errno(r, "Failed to get cgroup %s owner uid: %m", message.path);
+                                continue;
+                        }
+
+                        /* Let's not be lenient for permission errors and skip processing if we receive an
+                        * update for a cgroup that doesn't belong to the user. */
+                        if (uid != cg_uid)
+                                return log_error_errno(SYNTHETIC_ERRNO(EPERM),
+                                                       "cgroup path owner UID does not match sender uid "
+                                                       "(" UID_FMT " != " UID_FMT ")", uid, cg_uid);
+                }
+
+                monitor_hm = streq(message.property, "ManagedOOMSwap") ?
+                                m->monitored_swap_cgroup_contexts : m->monitored_mem_pressure_cgroup_contexts;
+
+                if (message.mode == MANAGED_OOM_AUTO) {
+                        (void) oomd_cgroup_context_free(hashmap_remove(monitor_hm, empty_to_root(message.path)));
+                        continue;
+                }
+
+                limit = m->default_mem_pressure_limit;
+
+                if (streq(message.property, "ManagedOOMMemoryPressure") && message.limit > 0) {
+                        int permyriad = UINT32_SCALE_TO_PERMYRIAD(message.limit);
+
+                        r = store_loadavg_fixed_point(permyriad / 100LU, permyriad % 100LU, &limit);
+                        if (r < 0)
+                                continue;
+                }
+
+                r = oomd_insert_cgroup_context(NULL, monitor_hm, message.path);
+                if (r == -ENOMEM)
+                        return r;
+                if (r < 0 && r != -EEXIST)
+                        log_debug_errno(r, "Failed to insert message, ignoring: %m");
+
+                /* Always update the limit in case it was changed. For non-memory pressure detection the value is
+                 * ignored so always updating it here is not a problem. */
+                ctx = hashmap_get(monitor_hm, empty_to_root(message.path));
+                if (ctx)
+                        ctx->mem_pressure_limit = limit;
+        }
+
+        return 0;
+}
+
+static int process_managed_oom_request(
+                Varlink *link,
+                JsonVariant *parameters,
+                VarlinkMethodFlags flags,
+                void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+        uid_t uid;
+        int r;
+
+        r = varlink_get_peer_uid(link, &uid);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get varlink peer uid: %m");
+
+        return process_managed_oom_message(m, uid, parameters);
+}
+
 static int process_managed_oom_reply(
                 Varlink *link,
                 JsonVariant *parameters,
                 const char *error_id,
                 VarlinkReplyFlags flags,
                 void *userdata) {
-        JsonVariant *c, *cgroups;
-        Manager *m = userdata;
-        int r = 0;
-
-        assert(m);
-
-        static const JsonDispatch dispatch_table[] = {
-                { "mode",     JSON_VARIANT_STRING,   managed_oom_mode,     offsetof(ManagedOOMReply, mode),     JSON_MANDATORY },
-                { "path",     JSON_VARIANT_STRING,   json_dispatch_string, offsetof(ManagedOOMReply, path),     JSON_MANDATORY },
-                { "property", JSON_VARIANT_STRING,   json_dispatch_string, offsetof(ManagedOOMReply, property), JSON_MANDATORY },
-                { "limit",    JSON_VARIANT_UNSIGNED, json_dispatch_uint32, offsetof(ManagedOOMReply, limit),    0 },
-                {},
-        };
+        Manager *m = ASSERT_PTR(userdata);
+        uid_t uid;
+        int r;
 
         if (error_id) {
                 r = -EIO;
@@ -66,81 +161,28 @@
                 goto finish;
         }
 
-        cgroups = json_variant_by_key(parameters, "cgroups");
-        if (!cgroups) {
-                r = -EINVAL;
+        r = varlink_get_peer_uid(link, &uid);
+        if (r < 0) {
+                log_error_errno(r, "Failed to get varlink peer uid: %m");
                 goto finish;
         }
 
-        /* Skip malformed elements and keep processing in case the others are good */
-        JSON_VARIANT_ARRAY_FOREACH(c, cgroups) {
-                _cleanup_(managed_oom_reply_destroy) ManagedOOMReply reply = {};
-                OomdCGroupContext *ctx;
-                Hashmap *monitor_hm;
-                loadavg_t limit;
-                int ret;
-
-                if (!json_variant_is_object(c))
-                        continue;
-
-                ret = json_dispatch(c, dispatch_table, NULL, 0, &reply);
-                if (ret == -ENOMEM) {
-                        r = ret;
-                        goto finish;
-                }
-                if (ret < 0)
-                        continue;
-
-                monitor_hm = streq(reply.property, "ManagedOOMSwap") ?
-                                m->monitored_swap_cgroup_contexts : m->monitored_mem_pressure_cgroup_contexts;
-
-                if (reply.mode == MANAGED_OOM_AUTO) {
-                        (void) oomd_cgroup_context_free(hashmap_remove(monitor_hm, empty_to_root(reply.path)));
-                        continue;
-                }
-
-                limit = m->default_mem_pressure_limit;
-
-                if (streq(reply.property, "ManagedOOMMemoryPressure") && reply.limit > 0) {
-                        int permyriad = UINT32_SCALE_TO_PERMYRIAD(reply.limit);
-
-                        ret = store_loadavg_fixed_point(
-                                        (unsigned long) permyriad / 100,
-                                        (unsigned long) permyriad % 100,
-                                        &limit);
-                        if (ret < 0)
-                                continue;
-                }
-
-                ret = oomd_insert_cgroup_context(NULL, monitor_hm, reply.path);
-                if (ret == -ENOMEM) {
-                        r = ret;
-                        goto finish;
-                }
-                if (ret < 0 && ret != -EEXIST)
-                        log_debug_errno(ret, "Failed to insert reply, ignoring: %m");
-
-                /* Always update the limit in case it was changed. For non-memory pressure detection the value is
-                 * ignored so always updating it here is not a problem. */
-                ctx = hashmap_get(monitor_hm, empty_to_root(reply.path));
-                if (ctx)
-                        ctx->mem_pressure_limit = limit;
-        }
+        r = process_managed_oom_message(m, uid, parameters);
 
 finish:
         if (!FLAGS_SET(flags, VARLINK_REPLY_CONTINUES))
-                m->varlink = varlink_close_unref(link);
+                m->varlink_client = varlink_close_unref(link);
 
         return r;
 }
 
-/* Fill `new_h` with `path`'s descendent OomdCGroupContexts. Only include descendent cgroups that are possible
+/* Fill 'new_h' with 'path's descendant OomdCGroupContexts. Only include descendant cgroups that are possible
  * candidates for action. That is, only leaf cgroups or cgroups with memory.oom.group set to "1".
  *
- * This function ignores most errors in order to handle cgroups that may have been cleaned up while populating
- * the hashmap.
+ * This function ignores most errors in order to handle cgroups that may have been cleaned up while
+ * populating the hashmap.
  *
- * `new_h` is of the form { key: cgroup paths -> value: OomdCGroupContext } */
+ * 'new_h' is of the form { key: cgroup paths -> value: OomdCGroupContext } */
 static int recursively_get_cgroup_context(Hashmap *new_h, const char *path) {
         _cleanup_free_ char *subpath = NULL;
         _cleanup_closedir_ DIR *d = NULL;
@@ -275,9 +317,9 @@
         assert(m);
         assert(m->event);
 
-        r = varlink_connect_address(&link, VARLINK_ADDR_PATH_MANAGED_OOM);
+        r = varlink_connect_address(&link, VARLINK_ADDR_PATH_MANAGED_OOM_SYSTEM);
         if (r < 0)
-                return log_error_errno(r, "Failed to connect to %s: %m", VARLINK_ADDR_PATH_MANAGED_OOM);
+                return log_error_errno(r, "Failed to connect to " VARLINK_ADDR_PATH_MANAGED_OOM_SYSTEM ": %m");
 
         (void) varlink_set_userdata(link, m);
         (void) varlink_set_description(link, "oomd");
@@ -295,17 +337,16 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to observe varlink call: %m");
 
-        m->varlink = TAKE_PTR(link);
+        m->varlink_client = TAKE_PTR(link);
         return 0;
 }
 
 static int monitor_swap_contexts_handler(sd_event_source *s, uint64_t usec, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         usec_t usec_now;
         int r;
 
         assert(s);
-        assert(userdata);
 
         /* Reset timer */
         r = sd_event_now(sd_event_source_get_event(s), CLOCK_MONOTONIC, &usec_now);
@@ -317,7 +358,7 @@
                 return log_error_errno(r, "Failed to set relative time for timer: %m");
 
         /* Reconnect if our connection dropped */
-        if (!m->varlink) {
+        if (!m->varlink_client) {
                 r = acquire_managed_oom_connect(m);
                 if (r < 0)
                         return log_error_errno(r, "Failed to acquire varlink connection: %m");
@@ -338,8 +379,8 @@
          * is only used to decide which cgroups to kill (and even then only the resource usages of its descendent
          * nodes are the ones that matter). */
 
-        /* Check amount of memory free and swap free so we don't free up swap when memory is still available. */
-        if (oomd_mem_free_below(&m->system_context, 10000 - m->swap_used_limit_permyriad) &&
+        /* Check amount of memory available and swap free so we don't free up swap when memory is still available. */
+        if (oomd_mem_available_below(&m->system_context, 10000 - m->swap_used_limit_permyriad) &&
                         oomd_swap_free_below(&m->system_context, 10000 - m->swap_used_limit_permyriad)) {
                 _cleanup_hashmap_free_ Hashmap *candidates = NULL;
                 _cleanup_free_ char *selected = NULL;
@@ -362,9 +403,9 @@
                 if (r == -ENOMEM)
                         return log_oom();
                 if (r < 0)
-                        log_notice_errno(r, "Failed to kill any cgroup(s) based on swap: %m");
+                        log_notice_errno(r, "Failed to kill any cgroups based on swap: %m");
                 else {
-                        if (selected && r > 0)
+                        if (selected && r > 0) {
                                 log_notice("Killed %s due to memory used (%"PRIu64") / total (%"PRIu64") and "
                                            "swap used (%"PRIu64") / total (%"PRIu64") being more than "
                                            PERMYRIAD_AS_PERCENT_FORMAT_STR,
@@ -372,6 +413,16 @@
                                            m->system_context.mem_used, m->system_context.mem_total,
                                            m->system_context.swap_used, m->system_context.swap_total,
                                            PERMYRIAD_AS_PERCENT_FORMAT_VAL(m->swap_used_limit_permyriad));
+
+                                /* send dbus signal */
+                                (void) sd_bus_emit_signal(m->bus,
+                                                          "/org/freedesktop/oom1",
+                                                          "org.freedesktop.oom1.Manager",
+                                                          "Killed",
+                                                          "ss",
+                                                          selected,
+                                                          "memory-used");
+                        }
                         return 0;
                 }
         }
@@ -390,12 +441,11 @@
         _unused_ _cleanup_(clear_candidate_hashmapp) Manager *clear_candidates = userdata;
         _cleanup_set_free_ Set *targets = NULL;
         bool in_post_action_delay = false;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         usec_t usec_now;
         int r;
 
         assert(s);
-        assert(userdata);
 
         /* Reset timer */
         r = sd_event_now(sd_event_source_get_event(s), CLOCK_MONOTONIC, &usec_now);
@@ -407,7 +457,7 @@
                 return log_error_errno(r, "Failed to set relative time for timer: %m");
 
         /* Reconnect if our connection dropped */
-        if (!m->varlink) {
+        if (!m->varlink_client) {
                 r = acquire_managed_oom_connect(m);
                 if (r < 0)
                         return log_error_errno(r, "Failed to acquire varlink connection: %m");
@@ -442,7 +492,6 @@
                 OomdCGroupContext *t;
                 SET_FOREACH(t, targets) {
                         _cleanup_free_ char *selected = NULL;
-                        char ts[FORMAT_TIMESPAN_MAX];
 
                         /* Check if there was reclaim activity in the given interval. The concern is the following case:
                          * Pressure climbed, a lot of high-frequency pages were reclaimed, and we killed the offending
@@ -454,11 +503,9 @@
 
                         log_debug("Memory pressure for %s is %lu.%02lu%% > %lu.%02lu%% for > %s with reclaim activity",
                                   t->path,
-                                  LOAD_INT(t->memory_pressure.avg10), LOAD_FRAC(t->memory_pressure.avg10),
-                                  LOAD_INT(t->mem_pressure_limit), LOAD_FRAC(t->mem_pressure_limit),
-                                  format_timespan(ts, sizeof ts,
-                                                  m->default_mem_pressure_duration_usec,
-                                                  USEC_PER_SEC));
+                                  LOADAVG_INT_SIDE(t->memory_pressure.avg10), LOADAVG_DECIMAL_SIDE(t->memory_pressure.avg10),
+                                  LOADAVG_INT_SIDE(t->mem_pressure_limit), LOADAVG_DECIMAL_SIDE(t->mem_pressure_limit),
+                                  FORMAT_TIMESPAN(m->default_mem_pressure_duration_usec, USEC_PER_SEC));
 
                         r = update_monitored_cgroup_contexts_candidates(
                                         m->monitored_mem_pressure_cgroup_contexts, &m->monitored_mem_pressure_cgroup_contexts_candidates);
@@ -473,7 +520,7 @@
                         if (r == -ENOMEM)
                                 return log_oom();
                         if (r < 0)
-                                log_notice_errno(r, "Failed to kill any cgroup(s) under %s based on pressure: %m", t->path);
+                                log_notice_errno(r, "Failed to kill any cgroups under %s based on pressure: %m", t->path);
                         else {
                                 /* Don't act on all the high pressure cgroups at once; return as soon as we kill one.
                                  * If r == 0 then it means there were not eligible candidates, the candidate cgroup
@@ -481,15 +528,23 @@
                                  * it. In either case, go through the event loop again and select a new candidate if
                                  * pressure is still high. */
                                 m->mem_pressure_post_action_delay_start = usec_now;
-                                if (selected && r > 0)
+                                if (selected && r > 0) {
                                         log_notice("Killed %s due to memory pressure for %s being %lu.%02lu%% > %lu.%02lu%%"
                                                    " for > %s with reclaim activity",
                                                    selected, t->path,
-                                                   LOAD_INT(t->memory_pressure.avg10), LOAD_FRAC(t->memory_pressure.avg10),
-                                                   LOAD_INT(t->mem_pressure_limit), LOAD_FRAC(t->mem_pressure_limit),
-                                                   format_timespan(ts, sizeof ts,
-                                                                   m->default_mem_pressure_duration_usec,
-                                                                   USEC_PER_SEC));
+                                                   LOADAVG_INT_SIDE(t->memory_pressure.avg10), LOADAVG_DECIMAL_SIDE(t->memory_pressure.avg10),
+                                                   LOADAVG_INT_SIDE(t->mem_pressure_limit), LOADAVG_DECIMAL_SIDE(t->mem_pressure_limit),
+                                                   FORMAT_TIMESPAN(m->default_mem_pressure_duration_usec, USEC_PER_SEC));
+
+                                        /* send dbus signal */
+                                        (void) sd_bus_emit_signal(m->bus,
+                                                                  "/org/freedesktop/oom1",
+                                                                  "org.freedesktop.oom1.Manager",
+                                                                  "Killed",
+                                                                  "ss",
+                                                                  selected,
+                                                                  "memory-pressure");
+                                }
                                 return 0;
                         }
                 }
@@ -573,7 +628,8 @@
 Manager* manager_free(Manager *m) {
         assert(m);
 
-        varlink_close_unref(m->varlink);
+        varlink_server_unref(m->varlink_server);
+        varlink_close_unref(m->varlink_client);
         sd_event_source_unref(m->swap_context_event_source);
         sd_event_source_unref(m->mem_pressure_context_event_source);
         sd_event_unref(m->event);
@@ -657,12 +713,47 @@
         return 0;
 }
 
+static int manager_varlink_init(Manager *m, int fd) {
+        _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
+        int r;
+
+        assert(m);
+        assert(!m->varlink_server);
+
+        r = varlink_server_new(&s, VARLINK_SERVER_ACCOUNT_UID|VARLINK_SERVER_INHERIT_USERDATA);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate varlink server object: %m");
+
+        varlink_server_set_userdata(s, m);
+
+        r = varlink_server_bind_method(s, "io.systemd.oom.ReportManagedOOMCGroups", process_managed_oom_request);
+        if (r < 0)
+                return log_error_errno(r, "Failed to register varlink method: %m");
+
+        if (fd < 0)
+                r = varlink_server_listen_address(s, VARLINK_ADDR_PATH_MANAGED_OOM_USER, 0666);
+        else
+                r = varlink_server_listen_fd(s, fd);
+        if (r < 0)
+                return log_error_errno(r, "Failed to bind to varlink socket: %m");
+
+        r = varlink_server_attach_event(s, m->event, SD_EVENT_PRIORITY_NORMAL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
+
+        log_debug("Initialized systemd-oomd varlink server");
+
+        m->varlink_server = TAKE_PTR(s);
+        return 0;
+}
+
 int manager_start(
                 Manager *m,
                 bool dry_run,
                 int swap_used_limit_permyriad,
                 int mem_pressure_limit_permyriad,
-                usec_t mem_pressure_usec) {
+                usec_t mem_pressure_usec,
+                int fd) {
 
         unsigned long l, f;
         int r;
@@ -697,6 +788,10 @@
         if (r < 0)
                 return r;
 
+        r = manager_varlink_init(m, fd);
+        if (r < 0)
+                return r;
+
         r = monitor_memory_pressure_contexts(m);
         if (r < 0)
                 return r;
@@ -711,7 +806,6 @@
 int manager_get_dump_string(Manager *m, char **ret) {
         _cleanup_free_ char *dump = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        char buf[FORMAT_TIMESPAN_MAX];
         OomdCGroupContext *c;
         size_t size;
         char *key;
@@ -732,8 +826,8 @@
                 "System Context:\n",
                 yes_no(m->dry_run),
                 PERMYRIAD_AS_PERCENT_FORMAT_VAL(m->swap_used_limit_permyriad),
-                LOAD_INT(m->default_mem_pressure_limit), LOAD_FRAC(m->default_mem_pressure_limit),
-                format_timespan(buf, sizeof(buf), m->default_mem_pressure_duration_usec, USEC_PER_SEC));
+                LOADAVG_INT_SIDE(m->default_mem_pressure_limit), LOADAVG_DECIMAL_SIDE(m->default_mem_pressure_limit),
+                FORMAT_TIMESPAN(m->default_mem_pressure_duration_usec, USEC_PER_SEC));
         oomd_dump_system_context(&m->system_context, f, "\t");
 
         fprintf(f, "Swap Monitored CGroups:\n");
diff --git a/src/oom/oomd-manager.h b/src/oom/oomd-manager.h
index dc170f2..8f0dd41 100644
--- a/src/oom/oomd-manager.h
+++ b/src/oom/oomd-manager.h
@@ -1,9 +1,11 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include "sd-bus.h"
+#include "sd-event.h"
+
 #include "conf-parser.h"
 #include "oomd-util.h"
-#include "sd-event.h"
 #include "varlink.h"
 
 /* Polling interval for monitoring stats */
@@ -51,7 +53,12 @@
         sd_event_source *swap_context_event_source;
         sd_event_source *mem_pressure_context_event_source;
 
-        Varlink *varlink;
+        /* This varlink object is used to manage the subscription from systemd-oomd to PID1 which it uses to
+         * listen for changes in ManagedOOM settings (oomd client - systemd server). */
+        Varlink *varlink_client;
+        /* This varlink server object is used to manage systemd-oomd's varlink server which is used by user
+         * managers to report changes in ManagedOOM settings (oomd server - systemd client). */
+        VarlinkServer *varlink_server;
 };
 
 Manager* manager_free(Manager *m);
@@ -59,7 +66,7 @@
 
 int manager_new(Manager **ret);
 
-int manager_start(Manager *m, bool dry_run, int swap_used_limit_permyriad, int mem_pressure_limit_permyriad, usec_t mem_pressure_usec);
+int manager_start(Manager *m, bool dry_run, int swap_used_limit_permyriad, int mem_pressure_limit_permyriad, usec_t mem_pressure_usec, int fd);
 
 int manager_get_dump_string(Manager *m, char **ret);
 
diff --git a/src/oom/oomd-util.c b/src/oom/oomd-util.c
index 5867d29..f97b771 100644
--- a/src/oom/oomd-util.c
+++ b/src/oom/oomd-util.c
@@ -3,6 +3,7 @@
 #include <sys/xattr.h>
 #include <unistd.h>
 
+#include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
@@ -14,6 +15,7 @@
 #include "sort-util.h"
 #include "stat-util.h"
 #include "stdio-util.h"
+#include "user-util.h"
 
 DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
                 oomd_cgroup_ctx_hash_ops,
@@ -38,7 +40,7 @@
         assert(xattr);
 
         r = cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, path, xattr, &value);
-        if (r < 0 && r != -ENODATA)
+        if (r < 0 && !ERRNO_IS_XATTR_ABSENT(r))
                 return r;
 
         if (!isempty(value)) {
@@ -122,7 +124,7 @@
         return c->pgscan - last_pgscan;
 }
 
-bool oomd_mem_free_below(const OomdSystemContext *ctx, int threshold_permyriad) {
+bool oomd_mem_available_below(const OomdSystemContext *ctx, int threshold_permyriad) {
         uint64_t mem_threshold;
 
         assert(ctx);
@@ -142,10 +144,59 @@
         return (ctx->swap_total - ctx->swap_used) < swap_threshold;
 }
 
+int oomd_fetch_cgroup_oom_preference(OomdCGroupContext *ctx, const char *prefix) {
+        uid_t uid;
+        int r;
+
+        assert(ctx);
+
+        prefix = empty_to_root(prefix);
+
+        if (!path_startswith(ctx->path, prefix))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "%s is not a descendant of %s", ctx->path, prefix);
+
+        r = cg_get_owner(SYSTEMD_CGROUP_CONTROLLER, ctx->path, &uid);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to get owner/group from %s: %m", ctx->path);
+
+        if (uid != 0) {
+                uid_t prefix_uid;
+
+                r = cg_get_owner(SYSTEMD_CGROUP_CONTROLLER, prefix, &prefix_uid);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to get owner/group from %s: %m", prefix);
+
+                if (uid != prefix_uid) {
+                        ctx->preference = MANAGED_OOM_PREFERENCE_NONE;
+                        return 0;
+                }
+        }
+
+        /* Ignore most errors when reading the xattr since it is usually unset and cgroup xattrs are only used
+         * as an optional feature of systemd-oomd (and the system might not even support them). */
+        r = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, ctx->path, "user.oomd_avoid");
+        if (r == -ENOMEM)
+                return log_oom_debug();
+        if (r < 0 && !ERRNO_IS_XATTR_ABSENT(r))
+                log_debug_errno(r, "Failed to get xattr user.oomd_avoid, ignoring: %m");
+        ctx->preference = r > 0 ? MANAGED_OOM_PREFERENCE_AVOID : ctx->preference;
+
+        r = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, ctx->path, "user.oomd_omit");
+        if (r == -ENOMEM)
+                return log_oom_debug();
+        if (r < 0 && !ERRNO_IS_XATTR_ABSENT(r))
+                log_debug_errno(r, "Failed to get xattr user.oomd_omit, ignoring: %m");
+        ctx->preference = r > 0 ? MANAGED_OOM_PREFERENCE_OMIT : ctx->preference;
+
+        return 0;
+}
+
 int oomd_sort_cgroup_contexts(Hashmap *h, oomd_compare_t compare_func, const char *prefix, OomdCGroupContext ***ret) {
         _cleanup_free_ OomdCGroupContext **sorted = NULL;
         OomdCGroupContext *item;
         size_t k = 0;
+        int r;
 
         assert(h);
         assert(compare_func);
@@ -157,7 +208,14 @@
 
         HASHMAP_FOREACH(item, h) {
                 /* Skip over cgroups that are not valid candidates or are explicitly marked for omission */
-                if ((item->path && prefix && !path_startswith(item->path, prefix)) || item->preference == MANAGED_OOM_PREFERENCE_OMIT)
+                if (item->path && prefix && !path_startswith(item->path, prefix))
+                        continue;
+
+                r = oomd_fetch_cgroup_oom_preference(item, prefix);
+                if (r == -ENOMEM)
+                        return r;
+
+                if (item->preference == MANAGED_OOM_PREFERENCE_OMIT)
                         continue;
 
                 sorted[k++] = item;
@@ -184,7 +242,7 @@
                 if (r < 0)
                         return r;
 
-                log_debug("oomd dry-run: Would have tried to kill %s with recurse=%s", cg_path, true_false(recurse));
+                log_info("oomd dry-run: Would have tried to kill %s with recurse=%s", cg_path, true_false(recurse));
                 return 0;
         }
 
@@ -192,6 +250,10 @@
         if (!pids_killed)
                 return -ENOMEM;
 
+        r = increment_oomd_xattr(path, "user.oomd_ooms", 1);
+        if (r < 0)
+                log_debug_errno(r, "Failed to set user.oomd_ooms before kill: %m");
+
         if (recurse)
                 r = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, path, SIGKILL, CGROUP_IGNORE_SELF, pids_killed, log_kill, NULL);
         else
@@ -216,9 +278,34 @@
         return set_size(pids_killed) != 0;
 }
 
+typedef void (*dump_candidate_func)(const OomdCGroupContext *ctx, FILE *f, const char *prefix);
+
+static int dump_kill_candidates(OomdCGroupContext **sorted, int n, int dump_until, dump_candidate_func dump_func) {
+        /* Try dumping top offendors, ignoring any errors that might happen. */
+        _cleanup_free_ char *dump = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        int r;
+        size_t size;
+
+        f = open_memstream_unlocked(&dump, &size);
+        if (!f)
+                return -errno;
+
+        fprintf(f, "Considered %d cgroups for killing, top candidates were:\n", n);
+        for (int i = 0; i < dump_until; i++)
+                dump_func(sorted[i], f, "\t");
+
+        r = fflush_and_check(f);
+        if (r < 0)
+                return r;
+
+        return log_dump(LOG_INFO, dump);
+}
+
 int oomd_kill_by_pgscan_rate(Hashmap *h, const char *prefix, bool dry_run, char **ret_selected) {
         _cleanup_free_ OomdCGroupContext **sorted = NULL;
         int n, r, ret = 0;
+        int dump_until;
 
         assert(h);
         assert(ret_selected);
@@ -227,6 +314,7 @@
         if (n < 0)
                 return n;
 
+        dump_until = MIN(n, DUMP_ON_KILL_COUNT);
         for (int i = 0; i < n; i++) {
                 /* Skip cgroups with no reclaim and memory usage; it won't alleviate pressure.
                  * Continue since there might be "avoid" cgroups at the end. */
@@ -242,19 +330,24 @@
                         continue; /* Try to find something else to kill */
                 }
 
+                dump_until = MAX(dump_until, i + 1);
                 char *selected = strdup(sorted[i]->path);
                 if (!selected)
                         return -ENOMEM;
                 *ret_selected = selected;
-                return r;
+                ret = r;
+                break;
         }
 
+        dump_kill_candidates(sorted, n, dump_until, oomd_dump_memory_pressure_cgroup_context);
+
         return ret;
 }
 
 int oomd_kill_by_swap_usage(Hashmap *h, uint64_t threshold_usage, bool dry_run, char **ret_selected) {
         _cleanup_free_ OomdCGroupContext **sorted = NULL;
         int n, r, ret = 0;
+        int dump_until;
 
         assert(h);
         assert(ret_selected);
@@ -263,6 +356,7 @@
         if (n < 0)
                 return n;
 
+        dump_until = MIN(n, DUMP_ON_KILL_COUNT);
         /* Try to kill cgroups with non-zero swap usage until we either succeed in killing or we get to a cgroup with
          * no swap usage. Threshold killing only cgroups with more than threshold swap usage. */
         for (int i = 0; i < n; i++) {
@@ -280,13 +374,17 @@
                         continue; /* Try to find something else to kill */
                 }
 
+                dump_until = MAX(dump_until, i + 1);
                 char *selected = strdup(sorted[i]->path);
                 if (!selected)
                         return -ENOMEM;
                 *ret_selected = selected;
-                return r;
+                ret = r;
+                break;
         }
 
+        dump_kill_candidates(sorted, n, dump_until, oomd_dump_swap_cgroup_context);
+
         return ret;
 }
 
@@ -294,7 +392,6 @@
         _cleanup_(oomd_cgroup_context_freep) OomdCGroupContext *ctx = NULL;
         _cleanup_free_ char *p = NULL, *val = NULL;
         bool is_root;
-        uid_t uid;
         int r;
 
         assert(path);
@@ -315,23 +412,6 @@
         if (r < 0)
                 return log_debug_errno(r, "Error parsing memory pressure from %s: %m", p);
 
-        r = cg_get_owner(SYSTEMD_CGROUP_CONTROLLER, path, &uid);
-        if (r < 0)
-                log_debug_errno(r, "Failed to get owner/group from %s: %m", path);
-        else if (uid == 0) {
-                /* Ignore most errors when reading the xattr since it is usually unset and cgroup xattrs are only used
-                 * as an optional feature of systemd-oomd (and the system might not even support them). */
-                r = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, path, "user.oomd_avoid");
-                if (r == -ENOMEM)
-                        return r;
-                ctx->preference = r == 1 ? MANAGED_OOM_PREFERENCE_AVOID : ctx->preference;
-
-                r = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, path, "user.oomd_omit");
-                if (r == -ENOMEM)
-                        return r;
-                ctx->preference = r == 1 ? MANAGED_OOM_PREFERENCE_OMIT : ctx->preference;
-        }
-
         if (is_root) {
                 r = procfs_memory_get_used(&ctx->current_memory_usage);
                 if (r < 0)
@@ -378,15 +458,15 @@
         _cleanup_fclose_ FILE *f = NULL;
         unsigned field_filled = 0;
         OomdSystemContext ctx = {};
-        uint64_t mem_free, swap_free;
+        uint64_t mem_available, swap_free;
         int r;
 
         enum {
                 MEM_TOTAL = 1U << 0,
-                MEM_FREE = 1U << 1,
+                MEM_AVAILABLE = 1U << 1,
                 SWAP_TOTAL = 1U << 2,
                 SWAP_FREE = 1U << 3,
-                ALL = MEM_TOTAL|MEM_FREE|SWAP_TOTAL|SWAP_FREE,
+                ALL = MEM_TOTAL|MEM_AVAILABLE|SWAP_TOTAL|SWAP_FREE,
         };
 
         assert(proc_meminfo_path);
@@ -409,9 +489,9 @@
                 if ((word = startswith(line, "MemTotal:"))) {
                         field_filled |= MEM_TOTAL;
                         r = convert_meminfo_value_to_uint64_bytes(word, &ctx.mem_total);
-                } else if ((word = startswith(line, "MemFree:"))) {
-                        field_filled |= MEM_FREE;
-                        r = convert_meminfo_value_to_uint64_bytes(word, &mem_free);
+                } else if ((word = startswith(line, "MemAvailable:"))) {
+                        field_filled |= MEM_AVAILABLE;
+                        r = convert_meminfo_value_to_uint64_bytes(word, &mem_available);
                 } else if ((word = startswith(line, "SwapTotal:"))) {
                         field_filled |= SWAP_TOTAL;
                         r = convert_meminfo_value_to_uint64_bytes(word, &ctx.swap_total);
@@ -431,10 +511,10 @@
         if (field_filled != ALL)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "%s is missing expected fields", proc_meminfo_path);
 
-        if (mem_free > ctx.mem_total)
+        if (mem_available > ctx.mem_total)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "MemFree (%" PRIu64 ") cannot be greater than MemTotal (%" PRIu64 ") %m",
-                                       mem_free,
+                                       "MemAvailable (%" PRIu64 ") cannot be greater than MemTotal (%" PRIu64 ") %m",
+                                       mem_available,
                                        ctx.mem_total);
 
         if (swap_free > ctx.swap_total)
@@ -443,7 +523,7 @@
                                        swap_free,
                                        ctx.swap_total);
 
-        ctx.mem_used = ctx.mem_total - mem_free;
+        ctx.mem_used = ctx.mem_total - mem_available;
         ctx.swap_used = ctx.swap_total - swap_free;
 
         *ret = ctx;
@@ -509,8 +589,6 @@
 }
 
 void oomd_dump_swap_cgroup_context(const OomdCGroupContext *ctx, FILE *f, const char *prefix) {
-        char swap[FORMAT_BYTES_MAX];
-
         assert(ctx);
         assert(f);
 
@@ -519,7 +597,7 @@
                         "%sPath: %s\n"
                         "%s\tSwap Usage: %s\n",
                         strempty(prefix), ctx->path,
-                        strempty(prefix), format_bytes(swap, sizeof(swap), ctx->swap_usage));
+                        strempty(prefix), FORMAT_BYTES(ctx->swap_usage));
         else
                 fprintf(f,
                         "%sPath: %s\n"
@@ -529,9 +607,6 @@
 }
 
 void oomd_dump_memory_pressure_cgroup_context(const OomdCGroupContext *ctx, FILE *f, const char *prefix) {
-        char tbuf[FORMAT_TIMESPAN_MAX], mem_use[FORMAT_BYTES_MAX];
-        char mem_min[FORMAT_BYTES_MAX], mem_low[FORMAT_BYTES_MAX];
-
         assert(ctx);
         assert(f);
 
@@ -541,13 +616,13 @@
                 "%s\tPressure: Avg10: %lu.%02lu Avg60: %lu.%02lu Avg300: %lu.%02lu Total: %s\n"
                 "%s\tCurrent Memory Usage: %s\n",
                 strempty(prefix), ctx->path,
-                strempty(prefix), LOAD_INT(ctx->mem_pressure_limit), LOAD_FRAC(ctx->mem_pressure_limit),
+                strempty(prefix), LOADAVG_INT_SIDE(ctx->mem_pressure_limit), LOADAVG_DECIMAL_SIDE(ctx->mem_pressure_limit),
                 strempty(prefix),
-                LOAD_INT(ctx->memory_pressure.avg10), LOAD_FRAC(ctx->memory_pressure.avg10),
-                LOAD_INT(ctx->memory_pressure.avg60), LOAD_FRAC(ctx->memory_pressure.avg60),
-                LOAD_INT(ctx->memory_pressure.avg300), LOAD_FRAC(ctx->memory_pressure.avg300),
-                format_timespan(tbuf, sizeof(tbuf), ctx->memory_pressure.total, USEC_PER_SEC),
-                strempty(prefix), format_bytes(mem_use, sizeof(mem_use), ctx->current_memory_usage));
+                LOADAVG_INT_SIDE(ctx->memory_pressure.avg10), LOADAVG_DECIMAL_SIDE(ctx->memory_pressure.avg10),
+                LOADAVG_INT_SIDE(ctx->memory_pressure.avg60), LOADAVG_DECIMAL_SIDE(ctx->memory_pressure.avg60),
+                LOADAVG_INT_SIDE(ctx->memory_pressure.avg300), LOADAVG_DECIMAL_SIDE(ctx->memory_pressure.avg300),
+                FORMAT_TIMESPAN(ctx->memory_pressure.total, USEC_PER_SEC),
+                strempty(prefix), FORMAT_BYTES(ctx->current_memory_usage));
 
         if (!empty_or_root(ctx->path))
                 fprintf(f,
@@ -555,16 +630,13 @@
                         "%s\tMemory Low: %s\n"
                         "%s\tPgscan: %" PRIu64 "\n"
                         "%s\tLast Pgscan: %" PRIu64 "\n",
-                        strempty(prefix), format_bytes_cgroup_protection(mem_min, sizeof(mem_min), ctx->memory_min),
-                        strempty(prefix), format_bytes_cgroup_protection(mem_low, sizeof(mem_low), ctx->memory_low),
+                        strempty(prefix), FORMAT_BYTES_CGROUP_PROTECTION(ctx->memory_min),
+                        strempty(prefix), FORMAT_BYTES_CGROUP_PROTECTION(ctx->memory_low),
                         strempty(prefix), ctx->pgscan,
                         strempty(prefix), ctx->last_pgscan);
 }
 
 void oomd_dump_system_context(const OomdSystemContext *ctx, FILE *f, const char *prefix) {
-        char mem_used[FORMAT_BYTES_MAX], mem_total[FORMAT_BYTES_MAX];
-        char swap_used[FORMAT_BYTES_MAX], swap_total[FORMAT_BYTES_MAX];
-
         assert(ctx);
         assert(f);
 
@@ -572,9 +644,9 @@
                 "%sMemory: Used: %s Total: %s\n"
                 "%sSwap: Used: %s Total: %s\n",
                 strempty(prefix),
-                format_bytes(mem_used, sizeof(mem_used), ctx->mem_used),
-                format_bytes(mem_total, sizeof(mem_total), ctx->mem_total),
+                FORMAT_BYTES(ctx->mem_used),
+                FORMAT_BYTES(ctx->mem_total),
                 strempty(prefix),
-                format_bytes(swap_used, sizeof(swap_used), ctx->swap_used),
-                format_bytes(swap_total, sizeof(swap_total), ctx->swap_total));
+                FORMAT_BYTES(ctx->swap_used),
+                FORMAT_BYTES(ctx->swap_total));
 }
diff --git a/src/oom/oomd-util.h b/src/oom/oomd-util.h
index 3a91a31..f53e4c4 100644
--- a/src/oom/oomd-util.h
+++ b/src/oom/oomd-util.h
@@ -7,6 +7,7 @@
 #include "hashmap.h"
 #include "psi-util.h"
 
+#define DUMP_ON_KILL_COUNT 10
 #define GROWING_SIZE_PERCENTILE 80
 
 extern const struct hash_ops oomd_cgroup_ctx_hash_ops;
@@ -59,8 +60,8 @@
  * Returns -ENOMEM for allocation errors. */
 int oomd_pressure_above(Hashmap *h, usec_t duration, Set **ret);
 
-/* Returns true if the amount of memory free is below the permyriad of memory specified by `threshold_permyriad`. */
-bool oomd_mem_free_below(const OomdSystemContext *ctx, int threshold_permyriad);
+/* Returns true if the amount of memory available (see proc(5)) is below the permyriad of memory specified by `threshold_permyriad`. */
+bool oomd_mem_available_below(const OomdSystemContext *ctx, int threshold_permyriad);
 
 /* Returns true if the amount of swap free is below the permyriad of swap specified by `threshold_permyriad`. */
 bool oomd_swap_free_below(const OomdSystemContext *ctx, int threshold_permyriad);
@@ -108,6 +109,16 @@
  * Returns the number of sorted items; negative on error. */
 int oomd_sort_cgroup_contexts(Hashmap *h, oomd_compare_t compare_func, const char *prefix, OomdCGroupContext ***ret);
 
+/* If the cgroup is owned by root, or the cgroups represented by `ctx` and
+ * `prefix` are owned by the same user, then set `ctx->preference` using the
+ * `user.oomd_avoid` and `user.oomd_omit` xattrs. Otherwise, set
+ * `ctx->preference` to MANAGED_OOM_PREFERENCE_NONE.
+ *
+ * If `prefix` is NULL or the empty string, it is treated as root. If `prefix`
+ * does not specify an ancestor cgroup of `ctx`, -EINVAL is returned. Returns
+ * negative on all other errors. */
+int oomd_fetch_cgroup_oom_preference(OomdCGroupContext *ctx, const char *prefix);
+
 /* Returns a negative value on error, 0 if no processes were killed, or 1 if processes were killed. */
 int oomd_cgroup_kill(const char *path, bool recurse, bool dry_run);
 
diff --git a/src/oom/oomd.c b/src/oom/oomd.c
index e13a1b3..2d6819d 100644
--- a/src/oom/oomd.c
+++ b/src/oom/oomd.c
@@ -2,17 +2,19 @@
 
 #include <getopt.h>
 
+#include "build.h"
 #include "bus-log-control-api.h"
 #include "bus-object.h"
 #include "cgroup-util.h"
 #include "conf-parser.h"
 #include "daemon-util.h"
+#include "fileio.h"
 #include "log.h"
 #include "main-func.h"
-#include "oomd-manager.h"
 #include "oomd-manager-bus.h"
+#include "oomd-manager.h"
 #include "parse-util.h"
-#include "pretty-print.c"
+#include "pretty-print.h"
 #include "psi-util.h"
 #include "signal-util.h"
 
@@ -43,7 +45,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        r = terminal_urlify_man("systemd-oomd", "1", &link);
+        r = terminal_urlify_man("systemd-oomd", "8", &link);
         if (r < 0)
                 return log_oom();
 
@@ -105,7 +107,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unknown option code.");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
@@ -120,6 +122,7 @@
         _cleanup_(manager_freep) Manager *m = NULL;
         _cleanup_free_ char *swap = NULL;
         unsigned long long s = 0;
+        CGroupMask mask;
         int r;
 
         log_setup();
@@ -135,6 +138,12 @@
         /* Do some basic requirement checks for running systemd-oomd. It's not exhaustive as some of the other
          * requirements do not have a reliable means to check for in code. */
 
+        int n = sd_listen_fds(0);
+        if (n > 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Received too many file descriptors");
+
+        int fd = n == 1 ? SD_LISTEN_FDS_START : -1;
+
         /* SwapTotal is always available in /proc/meminfo and defaults to 0, even on swap-disabled kernels. */
         r = get_proc_field("/proc/meminfo", "SwapTotal", WHITESPACE, &swap);
         if (r < 0)
@@ -153,10 +162,17 @@
         if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Requires the unified cgroups hierarchy");
 
+        r = cg_mask_supported(&mask);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get supported cgroup controllers: %m");
+
+        if (!FLAGS_SET(mask, CGROUP_MASK_MEMORY))
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Requires the cgroup memory controller.");
+
         assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
 
         if (arg_mem_pressure_usec > 0 && arg_mem_pressure_usec < 1 * USEC_PER_SEC)
-                log_error_errno(SYNTHETIC_ERRNO(EINVAL), "DefaultMemoryPressureDurationSec= must be 0 or at least 1s");
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "DefaultMemoryPressureDurationSec= must be 0 or at least 1s");
 
         r = manager_new(&m);
         if (r < 0)
@@ -167,7 +183,8 @@
                         arg_dry_run,
                         arg_swap_used_limit_permyriad,
                         arg_mem_pressure_limit_permyriad,
-                        arg_mem_pressure_usec);
+                        arg_mem_pressure_usec,
+                        fd);
         if (r < 0)
                 return log_error_errno(r, "Failed to start up daemon: %m");
 
diff --git a/src/oom/org.freedesktop.oom1.conf b/src/oom/org.freedesktop.oom1.conf
index cc1143a..d00bdcd 100644
--- a/src/oom/org.freedesktop.oom1.conf
+++ b/src/oom/org.freedesktop.oom1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
diff --git a/src/oom/test-oomd-util.c b/src/oom/test-oomd-util.c
index 2c2ee11..ef99d92 100644
--- a/src/oom/test-oomd-util.c
+++ b/src/oom/test-oomd-util.c
@@ -54,7 +54,7 @@
         /* Create another cgroup below this one for the pids we forked off. We need this to be managed
          * by the test so that pid1 doesn't delete it before we can read the xattrs. */
         cgroup = path_join(cgroup_root, "oomdkilltest");
-        assert(cgroup);
+        assert_se(cgroup);
         assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, cgroup) >= 0);
 
         /* If we don't have permissions to set xattrs we're likely in a userns or missing capabilities */
@@ -77,12 +77,16 @@
                         abort();
                 }
 
+                assert_se(cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_ooms", &v) >= 0);
+                assert_se(streq(v, i == 0 ? "1" : "2"));
+                v = mfree(v);
+
                 /* Wait a bit since processes may take some time to be cleaned up. */
                 sleep(2);
                 assert_se(cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, cgroup) == true);
 
                 assert_se(cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_kill", &v) >= 0);
-                assert_se(memcmp(v, i == 0 ? "2" : "4", 2) == 0);
+                assert_se(streq(v, i == 0 ? "2" : "4"));
         }
 }
 
@@ -90,11 +94,8 @@
         _cleanup_hashmap_free_ Hashmap *h1 = NULL, *h2 = NULL;
         _cleanup_(oomd_cgroup_context_freep) OomdCGroupContext *ctx = NULL;
         _cleanup_free_ char *cgroup = NULL;
-        ManagedOOMPreference root_pref;
         OomdCGroupContext *c1, *c2;
         CGroupMask mask;
-        bool test_xattrs;
-        int root_xattrs, r;
 
         if (geteuid() != 0)
                 return (void) log_tests_skipped("not root");
@@ -111,17 +112,6 @@
                 return (void) log_tests_skipped("cgroup memory controller is not available");
 
         assert_se(cg_pid_get_path(NULL, 0, &cgroup) >= 0);
-
-        /* If we don't have permissions to set xattrs we're likely in a userns or missing capabilities
-         * so skip the xattr portions of the test. */
-        r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_test", "1", 1, 0);
-        test_xattrs = !ERRNO_IS_PRIVILEGE(r) && !ERRNO_IS_NOT_SUPPORTED(r);
-
-        if (test_xattrs) {
-                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_omit", "1", 1, 0) >= 0);
-                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_avoid", "1", 1, 0) >= 0);
-        }
-
         assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
 
         assert_se(streq(ctx->path, cgroup));
@@ -131,34 +121,11 @@
         assert_se(ctx->swap_usage == 0);
         assert_se(ctx->last_pgscan == 0);
         assert_se(ctx->pgscan == 0);
-        /* omit takes precedence over avoid when both are set to true */
-        if (test_xattrs)
-                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_OMIT);
-        else
-                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_NONE);
         ctx = oomd_cgroup_context_free(ctx);
 
-        /* also check when only avoid is set to true */
-        if (test_xattrs) {
-                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_omit", "0", 1, 0) >= 0);
-                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_avoid", "1", 1, 0) >= 0);
-        }
-        assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
-        if (test_xattrs)
-                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_AVOID);
-        ctx = oomd_cgroup_context_free(ctx);
-
-        /* Test the root cgroup */
-        /* Root cgroup is live and not made on demand like the cgroup the test runs in. It can have varying
-         * xattrs set already so let's read in the booleans first to get the final preference value. */
-        root_xattrs = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, "", "user.oomd_omit");
-        root_pref = root_xattrs > 0 ? MANAGED_OOM_PREFERENCE_OMIT : MANAGED_OOM_PREFERENCE_NONE;
-        root_xattrs = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, "", "user.oomd_avoid");
-        root_pref = root_xattrs > 0 ? MANAGED_OOM_PREFERENCE_AVOID : MANAGED_OOM_PREFERENCE_NONE;
         assert_se(oomd_cgroup_context_acquire("", &ctx) == 0);
         assert_se(streq(ctx->path, "/"));
         assert_se(ctx->current_memory_usage > 0);
-        assert_se(ctx->preference == root_pref);
 
         /* Test hashmap inserts */
         assert_se(h1 = hashmap_new(&oomd_cgroup_ctx_hash_ops));
@@ -183,14 +150,6 @@
         assert_se(c2->mem_pressure_limit == 6789);
         assert_se(c2->mem_pressure_limit_hit_start == 42);
         assert_se(c2->last_had_mem_reclaim == 888); /* assumes the live pgscan is less than UINT64_MAX */
-
-        /* Assert that avoid/omit are not set if the cgroup is not owned by root */
-        if (test_xattrs) {
-                ctx = oomd_cgroup_context_free(ctx);
-                assert_se(cg_set_access(SYSTEMD_CGROUP_CONTROLLER, cgroup, 65534, 0) >= 0);
-                assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
-                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_NONE);
-        }
 }
 
 static void test_oomd_update_cgroup_contexts_between_hashmaps(void) {
@@ -246,7 +205,7 @@
 
 static void test_oomd_system_context_acquire(void) {
         _cleanup_(unlink_tempfilep) char path[] = "/oomdgetsysctxtestXXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         OomdSystemContext ctx;
 
         if (geteuid() != 0)
@@ -278,7 +237,7 @@
                                           "SwapFree:           7604 kB\n", WRITE_STRING_FILE_CREATE) == 0);
         assert_se(oomd_system_context_acquire(path, &ctx) == 0);
         assert_se(ctx.mem_total == 33275142144);
-        assert_se(ctx.mem_used == 23157497856);
+        assert_se(ctx.mem_used == 10975404032);
         assert_se(ctx.swap_total == 8589930496);
         assert_se(ctx.swap_used == 8582144000);
 }
@@ -337,7 +296,7 @@
                 .swap_total = 20971512 * 1024U,
                 .swap_used = 20971440 * 1024U,
         };
-        assert_se(oomd_mem_free_below(&ctx, 2000) == false);
+        assert_se(oomd_mem_available_below(&ctx, 2000) == false);
         assert_se(oomd_swap_free_below(&ctx, 2000) == true);
 
         ctx = (OomdSystemContext) {
@@ -346,7 +305,7 @@
                 .swap_total = 20971512 * 1024U,
                 .swap_used = 3310136 * 1024U,
         };
-        assert_se(oomd_mem_free_below(&ctx, 2000) == true);
+        assert_se(oomd_mem_available_below(&ctx, 2000) == true);
         assert_se(oomd_swap_free_below(&ctx, 2000) == false);
 
         ctx = (OomdSystemContext) {
@@ -355,7 +314,7 @@
                 .swap_total = 0,
                 .swap_used = 0,
         };
-        assert_se(oomd_mem_free_below(&ctx, 2000) == false);
+        assert_se(oomd_mem_available_below(&ctx, 2000) == false);
         assert_se(oomd_swap_free_below(&ctx, 2000) == false);
 }
 
@@ -447,6 +406,88 @@
         sorted_cgroups = mfree(sorted_cgroups);
 }
 
+static void test_oomd_fetch_cgroup_oom_preference(void) {
+        _cleanup_(oomd_cgroup_context_freep) OomdCGroupContext *ctx = NULL;
+        _cleanup_free_ char *cgroup = NULL;
+        ManagedOOMPreference root_pref;
+        CGroupMask mask;
+        bool test_xattrs;
+        int root_xattrs, r;
+
+        if (geteuid() != 0)
+                return (void) log_tests_skipped("not root");
+
+        if (!is_pressure_supported())
+                return (void) log_tests_skipped("system does not support pressure");
+
+        if (cg_all_unified() <= 0)
+                return (void) log_tests_skipped("cgroups are not running in unified mode");
+
+        assert_se(cg_mask_supported(&mask) >= 0);
+
+        if (!FLAGS_SET(mask, CGROUP_MASK_MEMORY))
+                return (void) log_tests_skipped("cgroup memory controller is not available");
+
+        assert_se(cg_pid_get_path(NULL, 0, &cgroup) >= 0);
+        assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
+
+        /* If we don't have permissions to set xattrs we're likely in a userns or missing capabilities
+         * so skip the xattr portions of the test. */
+        r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_test", "1", 1, 0);
+        test_xattrs = !ERRNO_IS_PRIVILEGE(r) && !ERRNO_IS_NOT_SUPPORTED(r);
+
+        if (test_xattrs) {
+                assert_se(oomd_fetch_cgroup_oom_preference(ctx, NULL) == 0);
+                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_omit", "1", 1, 0) >= 0);
+                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_avoid", "1", 1, 0) >= 0);
+
+                /* omit takes precedence over avoid when both are set to true */
+                assert_se(oomd_fetch_cgroup_oom_preference(ctx, NULL) == 0);
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_OMIT);
+        } else {
+                assert_se(oomd_fetch_cgroup_oom_preference(ctx, NULL) < 0);
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_NONE);
+        }
+        ctx = oomd_cgroup_context_free(ctx);
+
+        /* also check when only avoid is set to true */
+        if (test_xattrs) {
+                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_omit", "0", 1, 0) >= 0);
+                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_avoid", "1", 1, 0) >= 0);
+                assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
+                assert_se(oomd_fetch_cgroup_oom_preference(ctx, NULL) == 0);
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_AVOID);
+                ctx = oomd_cgroup_context_free(ctx);
+        }
+
+        /* Test the root cgroup */
+        /* Root cgroup is live and not made on demand like the cgroup the test runs in. It can have varying
+         * xattrs set already so let's read in the booleans first to get the final preference value. */
+        assert_se(oomd_cgroup_context_acquire("", &ctx) == 0);
+        root_xattrs = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, "", "user.oomd_omit");
+        root_pref = root_xattrs > 0 ? MANAGED_OOM_PREFERENCE_OMIT : MANAGED_OOM_PREFERENCE_NONE;
+        root_xattrs = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, "", "user.oomd_avoid");
+        root_pref = root_xattrs > 0 ? MANAGED_OOM_PREFERENCE_AVOID : MANAGED_OOM_PREFERENCE_NONE;
+        assert_se(oomd_fetch_cgroup_oom_preference(ctx, NULL) == 0);
+        assert_se(ctx->preference == root_pref);
+
+        assert_se(oomd_fetch_cgroup_oom_preference(ctx, "/herp.slice/derp.scope") == -EINVAL);
+
+        /* Assert that avoid/omit are not set if the cgroup and prefix are not
+         * owned by the same user. */
+        if (test_xattrs && !empty_or_root(cgroup)) {
+                ctx = oomd_cgroup_context_free(ctx);
+                assert_se(cg_set_access(SYSTEMD_CGROUP_CONTROLLER, cgroup, 61183, 0) >= 0);
+                assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
+
+                assert_se(oomd_fetch_cgroup_oom_preference(ctx, NULL) == 0);
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_NONE);
+
+                assert_se(oomd_fetch_cgroup_oom_preference(ctx, ctx->path) == 0);
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_AVOID);
+        }
+}
+
 int main(void) {
         int r;
 
@@ -466,6 +507,7 @@
 
         test_oomd_cgroup_kill();
         test_oomd_cgroup_context_acquire_and_insert();
+        test_oomd_fetch_cgroup_oom_preference();
 
         return 0;
 }
diff --git a/src/partition/growfs.c b/src/partition/growfs.c
index 15c56d0..62f3ee6 100644
--- a/src/partition/growfs.c
+++ b/src/partition/growfs.c
@@ -3,17 +3,27 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <getopt.h>
-#include <linux/btrfs.h>
 #include <linux/magic.h>
 #include <sys/ioctl.h>
 #include <sys/mount.h>
 #include <sys/types.h>
 #include <sys/vfs.h>
+/* This needs to be included after sys/mount.h, as since [0] linux/btrfs.h
+ * includes linux/fs.h causing build errors
+ * See: https://github.com/systemd/systemd/issues/8507
+ * [0] https://github.com/torvalds/linux/commit/a28135303a669917002f569aecebd5758263e4aa
+ */
+#include <linux/btrfs.h>
+
+#include "sd-device.h"
 
 #include "blockdev-util.h"
 #include "btrfs-util.h"
+#include "build.h"
 #include "cryptsetup-util.h"
 #include "device-nodes.h"
+#include "device-util.h"
+#include "devnum-util.h"
 #include "dissect-image.h"
 #include "escape.h"
 #include "fd-util.h"
@@ -32,7 +42,7 @@
 static int resize_crypt_luks_device(dev_t devno, const char *fstype, dev_t main_devno) {
         _cleanup_free_ char *devpath = NULL, *main_devpath = NULL;
         _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
-        _cleanup_close_ int main_devfd = -1;
+        _cleanup_close_ int main_devfd = -EBADF;
         uint64_t size;
         int r;
 
@@ -40,22 +50,21 @@
         if (r < 0)
                 return log_error_errno(r, "Cannot resize LUKS device: %m");
 
-        r = device_path_make_major_minor(S_IFBLK, main_devno, &main_devpath);
+        main_devfd = r = device_open_from_devnum(S_IFBLK, main_devno, O_RDONLY|O_CLOEXEC, &main_devpath);
         if (r < 0)
-                return log_error_errno(r, "Failed to format device major/minor path: %m");
-
-        main_devfd = open(main_devpath, O_RDONLY|O_CLOEXEC);
-        if (main_devfd < 0)
-                return log_error_errno(errno, "Failed to open \"%s\": %m", main_devpath);
+                return log_error_errno(r, "Failed to open main block device " DEVNUM_FORMAT_STR ": %m",
+                                       DEVNUM_FORMAT_VAL(main_devno));
 
         if (ioctl(main_devfd, BLKGETSIZE64, &size) != 0)
                 return log_error_errno(errno, "Failed to query size of \"%s\" (before resize): %m",
                                        main_devpath);
 
         log_debug("%s is %"PRIu64" bytes", main_devpath, size);
-        r = device_path_make_major_minor(S_IFBLK, devno, &devpath);
+
+        r = devname_from_devnum(S_IFBLK, devno, &devpath);
         if (r < 0)
-                return log_error_errno(r, "Failed to format major/minor path: %m");
+                return log_error_errno(r, "Failed to get devpath of " DEVNUM_FORMAT_STR ": %m",
+                                       DEVNUM_FORMAT_VAL(devno));
 
         r = sym_crypt_init(&cd, devpath);
         if (r < 0)
@@ -84,32 +93,40 @@
 }
 #endif
 
-static int maybe_resize_underlying_device(const char *mountpath, dev_t main_devno) {
-        _cleanup_free_ char *fstype = NULL, *devpath = NULL;
+static int maybe_resize_underlying_device(
+                int mountfd,
+                const char *mountpath,
+                dev_t main_devno) {
+
+        _cleanup_free_ char *devpath = NULL, *fstype = NULL;
         dev_t devno;
         int r;
 
+        assert(mountfd >= 0);
+        assert(mountpath);
+
 #if HAVE_LIBCRYPTSETUP
         cryptsetup_enable_logging(NULL);
 #endif
 
-        r = get_block_device_harder(mountpath, &devno);
+        r = get_block_device_harder_fd(mountfd, &devno);
         if (r < 0)
                 return log_error_errno(r, "Failed to determine underlying block device of \"%s\": %m",
                                        mountpath);
         if (devno == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system \"%s\" not backed by block device.", arg_target);
 
-        log_debug("Underlying device %d:%d, main dev %d:%d, %s",
-                  major(devno), minor(devno),
-                  major(main_devno), minor(main_devno),
+        log_debug("Underlying device " DEVNUM_FORMAT_STR ", main dev " DEVNUM_FORMAT_STR ", %s",
+                  DEVNUM_FORMAT_VAL(devno),
+                  DEVNUM_FORMAT_VAL(main_devno),
                   devno == main_devno ? "same" : "different");
         if (devno == main_devno)
                 return 0;
 
-        r = device_path_make_major_minor(S_IFBLK, devno, &devpath);
+        r = devname_from_devnum(S_IFBLK, devno, &devpath);
         if (r < 0)
-                return log_error_errno(r, "Failed to format device major/minor path: %m");
+                return log_error_errno(r, "Failed to get devpath for block device " DEVNUM_FORMAT_STR ": %m",
+                                       DEVNUM_FORMAT_VAL(devno));
 
         r = probe_filesystem(devpath, &fstype);
         if (r == -EUCLEAN)
@@ -165,7 +182,7 @@
         assert(argv);
 
         while ((c = getopt_long(argc, argv, "hn", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
                 case 'h':
                         return help();
 
@@ -180,7 +197,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind + 1 != argc)
@@ -194,10 +211,9 @@
 }
 
 static int run(int argc, char *argv[]) {
-        _cleanup_close_ int mountfd = -1, devfd = -1;
+        _cleanup_close_ int mountfd = -EBADF, devfd = -EBADF;
         _cleanup_free_ char *devpath = NULL;
         uint64_t size, newsize;
-        char fb[FORMAT_BYTES_MAX];
         dev_t devno;
         int r;
 
@@ -213,7 +229,11 @@
         if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "\"%s\" is not a mount point: %m", arg_target);
 
-        r = get_block_device(arg_target, &devno);
+        mountfd = open(arg_target, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+        if (mountfd < 0)
+                return log_error_errno(errno, "Failed to open \"%s\": %m", arg_target);
+
+        r = get_block_device_fd(mountfd, &devno);
         if (r == -EUCLEAN)
                 return btrfs_log_dev_root(LOG_ERR, r, arg_target);
         if (r < 0)
@@ -221,26 +241,23 @@
         if (devno == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system \"%s\" not backed by block device.", arg_target);
 
-        r = maybe_resize_underlying_device(arg_target, devno);
+        r = maybe_resize_underlying_device(mountfd, arg_target, devno);
         if (r < 0)
-                return r;
+                log_warning_errno(r, "Unable to resize underlying device of \"%s\", proceeding anyway: %m", arg_target);
 
-        mountfd = open(arg_target, O_RDONLY|O_CLOEXEC);
-        if (mountfd < 0)
-                return log_error_errno(errno, "Failed to open \"%s\": %m", arg_target);
-
-        r = device_path_make_major_minor(S_IFBLK, devno, &devpath);
+        devfd = r = device_open_from_devnum(S_IFBLK, devno, O_RDONLY|O_CLOEXEC, &devpath);
         if (r < 0)
-                return log_error_errno(r, "Failed to format device major/minor path: %m");
-
-        devfd = open(devpath, O_RDONLY|O_CLOEXEC);
-        if (devfd < 0)
-                return log_error_errno(errno, "Failed to open \"%s\": %m", devpath);
+                return log_error_errno(r, "Failed to open block device " DEVNUM_FORMAT_STR ": %m",
+                                       DEVNUM_FORMAT_VAL(devno));
 
         if (ioctl(devfd, BLKGETSIZE64, &size) != 0)
                 return log_error_errno(errno, "Failed to query size of \"%s\": %m", devpath);
 
         log_debug("Resizing \"%s\" to %"PRIu64" bytes...", arg_target, size);
+
+        if (arg_dry_run)
+                return 0;
+
         r = resize_fs(mountfd, size, &newsize);
         if (r < 0)
                 return log_error_errno(r, "Failed to resize \"%s\" to %"PRIu64" bytes: %m",
@@ -248,11 +265,11 @@
         if (newsize == size)
                 log_info("Successfully resized \"%s\" to %s bytes.",
                          arg_target,
-                         format_bytes(fb, sizeof fb, newsize));
+                         FORMAT_BYTES(newsize));
         else
                 log_info("Successfully resized \"%s\" to %s bytes (%"PRIu64" bytes lost due to blocksize).",
                          arg_target,
-                         format_bytes(fb, sizeof fb, newsize),
+                         FORMAT_BYTES(newsize),
                          size - newsize);
         return 0;
 }
diff --git a/src/partition/makefs.c b/src/partition/makefs.c
index 7c94fbf..b37a3b9 100644
--- a/src/partition/makefs.c
+++ b/src/partition/makefs.c
@@ -13,13 +13,14 @@
 #include "fd-util.h"
 #include "main-func.h"
 #include "mkfs-util.h"
+#include "path-util.h"
 #include "process-util.h"
 #include "signal-util.h"
 #include "string-util.h"
 
 static int run(int argc, char *argv[]) {
-        _cleanup_free_ char *device = NULL, *fstype = NULL, *detected = NULL;
-        _cleanup_close_ int lock_fd = -1;
+        _cleanup_free_ char *device = NULL, *fstype = NULL, *detected = NULL, *label = NULL;
+        _cleanup_close_ int lock_fd = -EBADF;
         sd_id128_t uuid;
         struct stat st;
         int r;
@@ -49,7 +50,7 @@
                 if (lock_fd < 0)
                         return log_error_errno(lock_fd, "Failed to lock whole block device of \"%s\": %m", device);
         } else
-                log_info("%s is not a block device.", device);
+                log_debug("%s is not a block device, no need to lock.", device);
 
         r = probe_filesystem(device, &detected);
         if (r == -EUCLEAN)
@@ -65,7 +66,11 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to generate UUID for file system: %m");
 
-        return make_filesystem(device, fstype, basename(device), uuid, true);
+        r = path_extract_filename(device, &label);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract file name from '%s': %m", device);
+
+        return make_filesystem(device, fstype, label, NULL, uuid, true, 0, NULL);
 }
 
 DEFINE_MAIN_FUNCTION(run);
diff --git a/src/partition/meson.build b/src/partition/meson.build
index d2729da..a7a6c29 100644
--- a/src/partition/meson.build
+++ b/src/partition/meson.build
@@ -1,7 +1,3 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_repart_sources = files('''
-        repart.c
-'''.split())
-
-test_repart_sh = find_program('test-repart.sh')
+systemd_repart_sources = files('repart.c')
diff --git a/src/partition/repart.c b/src/partition/repart.c
index 9f0fe9e..99e7d3c 100644
--- a/src/partition/repart.c
+++ b/src/partition/repart.c
@@ -6,77 +6,95 @@
 
 #include <fcntl.h>
 #include <getopt.h>
-#include <libfdisk.h>
 #include <linux/fs.h>
 #include <linux/loop.h>
 #include <sys/file.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 
-#include <openssl/hmac.h>
-#include <openssl/sha.h>
-
+#include "sd-device.h"
 #include "sd-id128.h"
 
 #include "alloc-util.h"
 #include "blkid-util.h"
 #include "blockdev-util.h"
 #include "btrfs-util.h"
+#include "build.h"
+#include "chase-symlinks.h"
 #include "conf-files.h"
 #include "conf-parser.h"
+#include "constants.h"
 #include "cryptsetup-util.h"
-#include "def.h"
+#include "device-util.h"
+#include "devnum-util.h"
 #include "dirent-util.h"
 #include "efivars.h"
 #include "errno-util.h"
 #include "fd-util.h"
+#include "fdisk-util.h"
 #include "fileio.h"
 #include "format-table.h"
 #include "format-util.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "gpt.h"
 #include "hexdecoct.h"
+#include "hmac.h"
 #include "id128-util.h"
+#include "initrd-util.h"
+#include "io-util.h"
 #include "json.h"
 #include "list.h"
-#include "locale-util.h"
 #include "loop-util.h"
 #include "main-func.h"
 #include "mkdir.h"
 #include "mkfs-util.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
+#include "nulstr-util.h"
+#include "openssl-util.h"
 #include "parse-argument.h"
-#include "parse-util.h"
-#include "path-util.h"
+#include "parse-helpers.h"
 #include "pretty-print.h"
 #include "proc-cmdline.h"
 #include "process-util.h"
 #include "random-util.h"
 #include "resize-fs.h"
+#include "rm-rf.h"
 #include "sort-util.h"
 #include "specifier.h"
-#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
+#include "sync-util.h"
+#include "tmpfile-util.h"
 #include "terminal-util.h"
+#include "tpm-pcr.h"
 #include "tpm2-util.h"
 #include "user-util.h"
 #include "utf8.h"
 
 /* If not configured otherwise use a minimal partition size of 10M */
-#define DEFAULT_MIN_SIZE (10*1024*1024)
+#define DEFAULT_MIN_SIZE (10ULL*1024ULL*1024ULL)
 
 /* Hard lower limit for new partition sizes */
-#define HARD_MIN_SIZE 4096
+#define HARD_MIN_SIZE 4096ULL
+
+/* We know up front we're never going to put more than this in a verity sig partition. */
+#define VERITY_SIG_SIZE (HARD_MIN_SIZE*4ULL)
 
 /* libfdisk takes off slightly more than 1M of the disk size when creating a GPT disk label */
-#define GPT_METADATA_SIZE (1044*1024)
+#define GPT_METADATA_SIZE (1044ULL*1024ULL)
 
 /* LUKS2 takes off 16M of the partition size with its metadata by default */
-#define LUKS2_METADATA_SIZE (16*1024*1024)
+#define LUKS2_METADATA_SIZE (16ULL*1024ULL*1024ULL)
+
+/* To do LUKS2 offline encryption, we need to keep some extra free space at the end of the partition. */
+#define LUKS2_METADATA_KEEP_FREE (LUKS2_METADATA_SIZE*2ULL)
+
+/* LUKS2 volume key size. */
+#define VOLUME_KEY_SIZE (512ULL/8ULL)
 
 /* Note: When growing and placing new partitions we always align to 4K sector size. It's how newer hard disks
  * are designed, and if everything is aligned to that performance is best. And for older hard disks with 512B
@@ -91,11 +109,19 @@
         EMPTY_CREATE,   /* create disk as loopback file, create a partition table always */
 } arg_empty = EMPTY_REFUSE;
 
+typedef enum FilterPartitionType {
+        FILTER_PARTITIONS_NONE,
+        FILTER_PARTITIONS_EXCLUDE,
+        FILTER_PARTITIONS_INCLUDE,
+        _FILTER_PARTITIONS_MAX,
+        _FILTER_PARTITIONS_INVALID = -EINVAL,
+} FilterPartitionsType;
+
 static bool arg_dry_run = true;
 static const char *arg_node = NULL;
 static char *arg_root = NULL;
 static char *arg_image = NULL;
-static char *arg_definitions = NULL;
+static char **arg_definitions = NULL;
 static bool arg_discard = true;
 static bool arg_can_factory_reset = false;
 static int arg_factory_reset = -1;
@@ -109,18 +135,31 @@
 static bool arg_legend = true;
 static void *arg_key = NULL;
 static size_t arg_key_size = 0;
+static EVP_PKEY *arg_private_key = NULL;
+static X509 *arg_certificate = NULL;
 static char *arg_tpm2_device = NULL;
 static uint32_t arg_tpm2_pcr_mask = UINT32_MAX;
+static char *arg_tpm2_public_key = NULL;
+static uint32_t arg_tpm2_public_key_pcr_mask = UINT32_MAX;
+static bool arg_split = false;
+static sd_id128_t *arg_filter_partitions = NULL;
+static size_t arg_n_filter_partitions = 0;
+static FilterPartitionsType arg_filter_partitions_type = FILTER_PARTITIONS_NONE;
+static sd_id128_t *arg_defer_partitions = NULL;
+static size_t arg_n_defer_partitions = 0;
+static uint64_t arg_sector_size = 0;
 
 STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
-STATIC_DESTRUCTOR_REGISTER(arg_definitions, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_definitions, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_key, erase_and_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_private_key, EVP_PKEY_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_certificate, X509_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_tpm2_device, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_tpm2_public_key, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_filter_partitions, freep);
 
-typedef struct Partition Partition;
 typedef struct FreeArea FreeArea;
-typedef struct Context Context;
 
 typedef enum EncryptMode {
         ENCRYPT_OFF,
@@ -131,12 +170,32 @@
         _ENCRYPT_MODE_INVALID = -EINVAL,
 } EncryptMode;
 
-struct Partition {
-        char *definition_path;
+typedef enum VerityMode {
+        VERITY_OFF,
+        VERITY_DATA,
+        VERITY_HASH,
+        VERITY_SIG,
+        _VERITY_MODE_MAX,
+        _VERITY_MODE_INVALID = -EINVAL,
+} VerityMode;
 
-        sd_id128_t type_uuid;
+typedef enum MinimizeMode {
+        MINIMIZE_OFF,
+        MINIMIZE_BEST,
+        MINIMIZE_GUESS,
+        _MINIMIZE_MODE_MAX,
+        _MINIMIZE_MODE_INVALID = -EINVAL,
+} MinimizeMode;
+
+typedef struct Partition {
+        char *definition_path;
+        char **drop_in_files;
+
+        GptPartitionType type;
         sd_id128_t current_uuid, new_uuid;
+        bool new_uuid_is_set;
         char *current_label, *new_label;
+        sd_id128_t fs_uuid, luks_uuid;
 
         bool dropped;
         bool factory_reset;
@@ -159,7 +218,9 @@
         FreeArea *allocated_to_area;
 
         char *copy_blocks_path;
+        bool copy_blocks_path_is_our_file;
         bool copy_blocks_auto;
+        const char *copy_blocks_root;
         int copy_blocks_fd;
         uint64_t copy_blocks_size;
 
@@ -167,14 +228,25 @@
         char **copy_files;
         char **make_directories;
         EncryptMode encrypt;
+        VerityMode verity;
+        char *verity_match_key;
+        MinimizeMode minimize;
 
         uint64_t gpt_flags;
         int no_auto;
         int read_only;
         int growfs;
 
-        LIST_FIELDS(Partition, partitions);
-};
+        uint8_t *roothash;
+        size_t roothash_size;
+
+        char *split_name_format;
+        char *split_path;
+
+        struct Partition *siblings[_VERITY_MODE_MAX];
+
+        LIST_FIELDS(struct Partition, partitions);
+} Partition;
 
 #define PARTITION_IS_FOREIGN(p) (!(p)->definition_path)
 #define PARTITION_EXISTS(p) (!!(p)->current_partition)
@@ -185,7 +257,7 @@
         uint64_t allocated;
 };
 
-struct Context {
+typedef struct Context {
         LIST_HEAD(Partition, partitions);
         size_t n_partitions;
 
@@ -195,9 +267,17 @@
         uint64_t start, end, total;
 
         struct fdisk_context *fdisk_context;
+        uint64_t sector_size;
+        uint64_t grain_size;
 
         sd_id128_t seed;
-};
+
+        char *node;
+        bool node_is_our_file;
+        int backing_fd;
+
+        bool from_scratch;
+} Context;
 
 static const char *encrypt_mode_table[_ENCRYPT_MODE_MAX] = {
         [ENCRYPT_OFF] = "off",
@@ -206,12 +286,22 @@
         [ENCRYPT_KEY_FILE_TPM2] = "key-file+tpm2",
 };
 
-#if HAVE_LIBCRYPTSETUP
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(encrypt_mode, EncryptMode, ENCRYPT_KEY_FILE);
-#else
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(encrypt_mode, EncryptMode, ENCRYPT_KEY_FILE);
-#endif
+static const char *verity_mode_table[_VERITY_MODE_MAX] = {
+        [VERITY_OFF]  = "off",
+        [VERITY_DATA] = "data",
+        [VERITY_HASH] = "hash",
+        [VERITY_SIG]  = "signature",
+};
 
+static const char *minimize_mode_table[_MINIMIZE_MODE_MAX] = {
+        [MINIMIZE_OFF]   = "off",
+        [MINIMIZE_BEST]  = "best",
+        [MINIMIZE_GUESS] = "guess",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(encrypt_mode, EncryptMode, ENCRYPT_KEY_FILE);
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP(verity_mode, VerityMode);
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(minimize_mode, MinimizeMode, MINIMIZE_BEST);
 
 static uint64_t round_down_size(uint64_t v, uint64_t p) {
         return (v / p) * p;
@@ -247,7 +337,7 @@
                 .padding_max = UINT64_MAX,
                 .partno = UINT64_MAX,
                 .offset = UINT64_MAX,
-                .copy_blocks_fd = -1,
+                .copy_blocks_fd = -EBADF,
                 .copy_blocks_size = UINT64_MAX,
                 .no_auto = -1,
                 .read_only = -1,
@@ -264,22 +354,86 @@
         free(p->current_label);
         free(p->new_label);
         free(p->definition_path);
+        strv_free(p->drop_in_files);
 
         if (p->current_partition)
                 fdisk_unref_partition(p->current_partition);
         if (p->new_partition)
                 fdisk_unref_partition(p->new_partition);
 
-        free(p->copy_blocks_path);
+        if (p->copy_blocks_path_is_our_file)
+                unlink_and_free(p->copy_blocks_path);
+        else
+                free(p->copy_blocks_path);
         safe_close(p->copy_blocks_fd);
 
         free(p->format);
         strv_free(p->copy_files);
         strv_free(p->make_directories);
+        free(p->verity_match_key);
+
+        free(p->roothash);
+
+        free(p->split_name_format);
+        unlink_and_free(p->split_path);
 
         return mfree(p);
 }
 
+static void partition_foreignize(Partition *p) {
+        assert(p);
+        assert(PARTITION_EXISTS(p));
+
+        /* Reset several parameters set through definition file to make the partition foreign. */
+
+        p->definition_path = mfree(p->definition_path);
+        p->drop_in_files = strv_free(p->drop_in_files);
+
+        p->copy_blocks_path = mfree(p->copy_blocks_path);
+        p->copy_blocks_fd = safe_close(p->copy_blocks_fd);
+        p->copy_blocks_root = NULL;
+
+        p->format = mfree(p->format);
+        p->copy_files = strv_free(p->copy_files);
+        p->make_directories = strv_free(p->make_directories);
+        p->verity_match_key = mfree(p->verity_match_key);
+
+        p->priority = 0;
+        p->weight = 1000;
+        p->padding_weight = 0;
+        p->size_min = UINT64_MAX;
+        p->size_max = UINT64_MAX;
+        p->padding_min = UINT64_MAX;
+        p->padding_max = UINT64_MAX;
+        p->no_auto = -1;
+        p->read_only = -1;
+        p->growfs = -1;
+        p->verity = VERITY_OFF;
+}
+
+static bool partition_exclude(const Partition *p) {
+        assert(p);
+
+        if (arg_filter_partitions_type == FILTER_PARTITIONS_NONE)
+                return false;
+
+        for (size_t i = 0; i < arg_n_filter_partitions; i++)
+                if (sd_id128_equal(p->type.uuid, arg_filter_partitions[i]))
+                        return arg_filter_partitions_type == FILTER_PARTITIONS_EXCLUDE;
+
+        return arg_filter_partitions_type == FILTER_PARTITIONS_INCLUDE;
+}
+
+static bool partition_defer(const Partition *p) {
+        assert(p);
+
+        for (size_t i = 0; i < arg_n_defer_partitions; i++)
+                if (sd_id128_equal(p->type.uuid, arg_defer_partitions[i]))
+                        return true;
+
+        return false;
+}
+
 static Partition* partition_unlink_and_free(Context *context, Partition *p) {
         if (!p)
                 return NULL;
@@ -334,6 +488,12 @@
         if (context->fdisk_context)
                 fdisk_unref_context(context->fdisk_context);
 
+        safe_close(context->backing_fd);
+        if (context->node_is_our_file)
+                unlink_and_free(context->node);
+        else
+                free(context->node);
+
         return mfree(context);
 }
 
@@ -369,47 +529,62 @@
         return 0;
 }
 
-static bool context_drop_one_priority(Context *context) {
+static void partition_drop_or_foreignize(Partition *p) {
+        if (!p || p->dropped || PARTITION_IS_FOREIGN(p))
+                return;
+
+        if (PARTITION_EXISTS(p)) {
+                log_info("Can't grow existing partition %s of priority %" PRIi32 ", ignoring.",
+                         strna(p->current_label ?: p->new_label), p->priority);
+
+                /* Handle the partition as foreign. Do not set dropped flag. */
+                partition_foreignize(p);
+        } else {
+                log_info("Can't fit partition %s of priority %" PRIi32 ", dropping.",
+                         p->definition_path, p->priority);
+
+                p->dropped = true;
+                p->allocated_to_area = NULL;
+        }
+}
+
+static bool context_drop_or_foreignize_one_priority(Context *context) {
         int32_t priority = 0;
-        Partition *p;
-        bool exists = false;
 
         LIST_FOREACH(partitions, p, context->partitions) {
                 if (p->dropped)
                         continue;
-                if (p->priority < priority)
-                        continue;
-                if (p->priority == priority) {
-                        exists = exists || PARTITION_EXISTS(p);
-                        continue;
-                }
 
-                priority = p->priority;
-                exists = PARTITION_EXISTS(p);
+                priority = MAX(priority, p->priority);
         }
 
         /* Refuse to drop partitions with 0 or negative priorities or partitions of priorities that have at
          * least one existing priority */
-        if (priority <= 0 || exists)
+        if (priority <= 0)
                 return false;
 
         LIST_FOREACH(partitions, p, context->partitions) {
                 if (p->priority < priority)
                         continue;
 
-                if (p->dropped)
-                        continue;
+                partition_drop_or_foreignize(p);
 
-                p->dropped = true;
-                log_info("Can't fit partition %s of priority %" PRIi32 ", dropping.", p->definition_path, p->priority);
+                /* We ensure that all verity sibling partitions have the same priority, so it's safe
+                 * to drop all siblings here as well. */
+
+                for (VerityMode mode = VERITY_OFF + 1; mode < _VERITY_MODE_MAX; mode++)
+                        partition_drop_or_foreignize(p->siblings[mode]);
         }
 
         return true;
 }
 
-static uint64_t partition_min_size(const Partition *p) {
+static uint64_t partition_min_size(const Context *context, const Partition *p) {
         uint64_t sz;
 
+        assert(context);
+        assert(p);
+
         /* Calculate the disk space we really need at minimum for this partition. If the partition already
          * exists the current size is what we really need. If it doesn't exist yet refuse to allocate less
          * than 4K.
@@ -422,68 +597,94 @@
                 return p->current_size;
         }
 
+        if (p->verity == VERITY_SIG)
+                return VERITY_SIG_SIZE;
+
         sz = p->current_size != UINT64_MAX ? p->current_size : HARD_MIN_SIZE;
 
         if (!PARTITION_EXISTS(p)) {
                 uint64_t d = 0;
 
                 if (p->encrypt != ENCRYPT_OFF)
-                        d += round_up_size(LUKS2_METADATA_SIZE, 4096);
+                        d += round_up_size(LUKS2_METADATA_KEEP_FREE, context->grain_size);
 
                 if (p->copy_blocks_size != UINT64_MAX)
-                        d += round_up_size(p->copy_blocks_size, 4096);
+                        d += round_up_size(p->copy_blocks_size, context->grain_size);
                 else if (p->format || p->encrypt != ENCRYPT_OFF) {
                         uint64_t f;
 
                         /* If we shall synthesize a file system, take minimal fs size into account (assumed to be 4K if not known) */
-                        f = p->format ? minimal_size_by_fs_name(p->format) : UINT64_MAX;
-                        d += f == UINT64_MAX ? 4096 : f;
+                        f = p->format ? round_up_size(minimal_size_by_fs_name(p->format), context->grain_size) : UINT64_MAX;
+                        d += f == UINT64_MAX ? context->grain_size : f;
                 }
 
                 if (d > sz)
                         sz = d;
         }
 
-        return MAX(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, sz);
+        return MAX(round_up_size(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, context->grain_size), sz);
 }
 
-static uint64_t partition_max_size(const Partition *p) {
+static uint64_t partition_max_size(const Context *context, const Partition *p) {
+        uint64_t sm;
+
         /* Calculate how large the partition may become at max. This is generally the configured maximum
          * size, except when it already exists and is larger than that. In that case it's the existing size,
          * since we never want to shrink partitions. */
 
+        assert(context);
+        assert(p);
+
         if (PARTITION_IS_FOREIGN(p)) {
                 /* Don't allow changing size of partitions not managed by us */
                 assert(p->current_size != UINT64_MAX);
                 return p->current_size;
         }
 
-        if (p->current_size != UINT64_MAX)
-                return MAX(p->current_size, p->size_max);
+        if (p->verity == VERITY_SIG)
+                return VERITY_SIG_SIZE;
 
-        return p->size_max;
+        if (p->size_max == UINT64_MAX)
+                return UINT64_MAX;
+
+        sm = round_down_size(p->size_max, context->grain_size);
+
+        if (p->current_size != UINT64_MAX)
+                sm = MAX(p->current_size, sm);
+
+        return MAX(partition_min_size(context, p), sm);
 }
 
-static uint64_t partition_min_size_with_padding(const Partition *p) {
+static uint64_t partition_min_padding(const Partition *p) {
+        assert(p);
+        return p->padding_min != UINT64_MAX ? p->padding_min : 0;
+}
+
+static uint64_t partition_max_padding(const Partition *p) {
+        assert(p);
+        return p->padding_max;
+}
+
+static uint64_t partition_min_size_with_padding(Context *context, const Partition *p) {
         uint64_t sz;
 
         /* Calculate the disk space we need for this partition plus any free space coming after it. This
          * takes user configured padding into account as well as any additional whitespace needed to align
          * the next partition to 4K again. */
 
-        sz = partition_min_size(p);
+        assert(context);
+        assert(p);
 
-        if (p->padding_min != UINT64_MAX)
-                sz += p->padding_min;
+        sz = partition_min_size(context, p) + partition_min_padding(p);
 
         if (PARTITION_EXISTS(p)) {
                 /* If the partition wasn't aligned, add extra space so that any we might add will be aligned */
                 assert(p->offset != UINT64_MAX);
-                return round_up_size(p->offset + sz, 4096) - p->offset;
+                return round_up_size(p->offset + sz, context->grain_size) - p->offset;
         }
 
         /* If this is a new partition we'll place it aligned, hence we just need to round up the required size here */
-        return round_up_size(sz, 4096);
+        return round_up_size(sz, context->grain_size);
 }
 
 static uint64_t free_area_available(const FreeArea *a) {
@@ -495,47 +696,56 @@
         return a->size - a->allocated;
 }
 
-static uint64_t free_area_available_for_new_partitions(const FreeArea *a) {
-        uint64_t avail;
+static uint64_t free_area_current_end(Context *context, const FreeArea *a) {
+        assert(context);
+        assert(a);
+
+        if (!a->after)
+                return free_area_available(a);
+
+        assert(a->after->offset != UINT64_MAX);
+        assert(a->after->current_size != UINT64_MAX);
+
+        /* Calculate where the free area ends, based on the offset of the partition preceding it. */
+        return round_up_size(a->after->offset + a->after->current_size, context->grain_size) + free_area_available(a);
+}
+
+static uint64_t free_area_min_end(Context *context, const FreeArea *a) {
+        assert(context);
+        assert(a);
+
+        if (!a->after)
+                return 0;
+
+        assert(a->after->offset != UINT64_MAX);
+        assert(a->after->current_size != UINT64_MAX);
+
+        /* Calculate where the partition would end when we give it as much as it needs. */
+        return round_up_size(a->after->offset + partition_min_size_with_padding(context, a->after), context->grain_size);
+}
+
+static uint64_t free_area_available_for_new_partitions(Context *context, const FreeArea *a) {
+        assert(context);
+        assert(a);
 
         /* Similar to free_area_available(), but takes into account that the required size and padding of the
          * preceding partition is honoured. */
 
-        avail = free_area_available(a);
-        if (a->after) {
-                uint64_t need, space;
-
-                need = partition_min_size_with_padding(a->after);
-
-                assert(a->after->offset != UINT64_MAX);
-                assert(a->after->current_size != UINT64_MAX);
-
-                space = round_up_size(a->after->offset + a->after->current_size, 4096) - a->after->offset + avail;
-                if (need >= space)
-                        return 0;
-
-                return space - need;
-        }
-
-        return avail;
+        return LESS_BY(free_area_current_end(context, a), free_area_min_end(context, a));
 }
 
-static int free_area_compare(FreeArea *const *a, FreeArea *const*b) {
-        return CMP(free_area_available_for_new_partitions(*a),
-                   free_area_available_for_new_partitions(*b));
+static int free_area_compare(FreeArea *const *a, FreeArea *const*b, Context *context) {
+        assert(context);
+
+        return CMP(free_area_available_for_new_partitions(context, *a),
+                   free_area_available_for_new_partitions(context, *b));
 }
 
-static uint64_t charge_size(uint64_t total, uint64_t amount) {
-        uint64_t rounded;
-
-        assert(amount <= total);
-
+static uint64_t charge_size(Context *context, uint64_t total, uint64_t amount) {
+        assert(context);
         /* Subtract the specified amount from total, rounding up to multiple of 4K if there's room */
-        rounded = round_up_size(amount, 4096);
-        if (rounded >= total)
-                return 0;
-
-        return total - rounded;
+        assert(amount <= total);
+        return LESS_BY(total, round_up_size(amount, context->grain_size));
 }
 
 static uint64_t charge_weight(uint64_t total, uint64_t amount) {
@@ -543,14 +753,30 @@
         return total - amount;
 }
 
-static bool context_allocate_partitions(Context *context) {
-        Partition *p;
-
+static bool context_allocate_partitions(Context *context, uint64_t *ret_largest_free_area) {
         assert(context);
 
-        /* A simple first-fit algorithm, assuming the array of free areas is sorted by size in decreasing
-         * order. */
+        /* This may be called multiple times. Reset previous assignments. */
+        for (size_t i = 0; i < context->n_free_areas; i++)
+                context->free_areas[i]->allocated = 0;
 
+        /* Sort free areas by size, putting smallest first */
+        typesafe_qsort_r(context->free_areas, context->n_free_areas, free_area_compare, context);
+
+        /* In any case return size of the largest free area (i.e. not the size of all free areas
+         * combined!) */
+        if (ret_largest_free_area)
+                *ret_largest_free_area =
+                        context->n_free_areas == 0 ? 0 :
+                        free_area_available_for_new_partitions(context, context->free_areas[context->n_free_areas-1]);
+
+        /* Check that each existing partition can fit its area. */
+        for (size_t i = 0; i < context->n_free_areas; i++)
+                if (free_area_current_end(context, context->free_areas[i]) <
+                    free_area_min_end(context, context->free_areas[i]))
+                        return false;
+
+        /* A simple first-fit algorithm. We return true if we can fit the partitions in, otherwise false. */
         LIST_FOREACH(partitions, p, context->partitions) {
                 bool fits = false;
                 uint64_t required;
@@ -560,17 +786,14 @@
                 if (p->dropped || PARTITION_EXISTS(p))
                         continue;
 
-                /* Sort by size */
-                typesafe_qsort(context->free_areas, context->n_free_areas, free_area_compare);
-
                 /* How much do we need to fit? */
-                required = partition_min_size_with_padding(p);
-                assert(required % 4096 == 0);
+                required = partition_min_size_with_padding(context, p);
+                assert(required % context->grain_size == 0);
 
                 for (size_t i = 0; i < context->n_free_areas; i++) {
                         a = context->free_areas[i];
 
-                        if (free_area_available_for_new_partitions(a) >= required) {
+                        if (free_area_available_for_new_partitions(context, a) >= required) {
                                 fits = true;
                                 break;
                         }
@@ -591,7 +814,6 @@
 
 static int context_sum_weights(Context *context, FreeArea *a, uint64_t *ret) {
         uint64_t weight_sum = 0;
-        Partition *p;
 
         assert(context);
         assert(a);
@@ -619,23 +841,30 @@
         return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Combined weight of partition exceeds unsigned 64bit range, refusing.");
 }
 
-static int scale_by_weight(uint64_t value, uint64_t weight, uint64_t weight_sum, uint64_t *ret) {
+static uint64_t scale_by_weight(uint64_t value, uint64_t weight, uint64_t weight_sum) {
         assert(weight_sum >= weight);
-        assert(ret);
 
-        if (weight == 0) {
-                *ret = 0;
-                return 0;
+        for (;;) {
+                if (weight == 0)
+                        return 0;
+                if (weight == weight_sum)
+                        return value;
+                if (value <= UINT64_MAX / weight)
+                        return value * weight / weight_sum;
+
+                /* Rescale weight and weight_sum to make not the calculation overflow. To satisfy the
+                 * following conditions, 'weight_sum' is rounded up but 'weight' is rounded down:
+                 * - the sum of scale_by_weight() for all weights must not be larger than the input value,
+                 * - scale_by_weight() must not be larger than the ideal value (i.e. calculated with uint128_t). */
+                weight_sum = DIV_ROUND_UP(weight_sum, 2);
+                weight /= 2;
         }
-
-        if (value > UINT64_MAX / weight)
-                return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Scaling by weight of partition exceeds unsigned 64bit range, refusing.");
-
-        *ret = value * weight / weight_sum;
-        return 0;
 }
 
 typedef enum GrowPartitionPhase {
+        /* The zeroth phase: do not touch foreign partitions (i.e. those we don't manage). */
+        PHASE_FOREIGN,
+
         /* The first phase: we charge partitions which need more (according to constraints) than their weight-based share. */
         PHASE_OVERCHARGE,
 
@@ -644,20 +873,23 @@
 
         /* The third phase: we distribute what remains among the remaining partitions, according to the weights */
         PHASE_DISTRIBUTE,
+
+        _GROW_PARTITION_PHASE_MAX,
 } GrowPartitionPhase;
 
-static int context_grow_partitions_phase(
+static bool context_grow_partitions_phase(
                 Context *context,
                 FreeArea *a,
                 GrowPartitionPhase phase,
                 uint64_t *span,
                 uint64_t *weight_sum) {
 
-        Partition *p;
-        int r;
+        bool try_again = false;
 
         assert(context);
         assert(a);
+        assert(span);
+        assert(weight_sum);
 
         /* Now let's look at the intended weights and adjust them taking the minimum space assignments into
          * account. i.e. if a partition has a small weight but a high minimum space value set it should not
@@ -671,19 +903,23 @@
                         continue;
 
                 if (p->new_size == UINT64_MAX) {
-                        bool charge = false, try_again = false;
                         uint64_t share, rsz, xsz;
+                        bool charge = false;
 
                         /* Calculate how much this space this partition needs if everyone would get
                          * the weight based share */
-                        r = scale_by_weight(*span, p->weight, *weight_sum, &share);
-                        if (r < 0)
-                                return r;
+                        share = scale_by_weight(*span, p->weight, *weight_sum);
 
-                        rsz = partition_min_size(p);
-                        xsz = partition_max_size(p);
+                        rsz = partition_min_size(context, p);
+                        xsz = partition_max_size(context, p);
 
-                        if (phase == PHASE_OVERCHARGE && rsz > share) {
+                        if (phase == PHASE_FOREIGN && PARTITION_IS_FOREIGN(p)) {
+                                /* Never change of foreign partitions (i.e. those we don't manage) */
+
+                                p->new_size = p->current_size;
+                                charge = true;
+
+                        } else if (phase == PHASE_OVERCHARGE && rsz > share) {
                                 /* This partition needs more than its calculated share. Let's assign
                                  * it that, and take this partition out of all calculations and start
                                  * again. */
@@ -691,7 +927,7 @@
                                 p->new_size = rsz;
                                 charge = try_again = true;
 
-                        } else if (phase == PHASE_UNDERCHARGE && xsz != UINT64_MAX && xsz < share) {
+                        } else if (phase == PHASE_UNDERCHARGE && xsz < share) {
                                 /* This partition accepts less than its calculated
                                  * share. Let's assign it that, and take this partition out
                                  * of all calculations and start again. */
@@ -705,58 +941,78 @@
                                  * assigning this shouldn't impact the shares of the other
                                  * partitions. */
 
-                                if (PARTITION_IS_FOREIGN(p))
-                                        /* Never change of foreign partitions (i.e. those we don't manage) */
-                                        p->new_size = p->current_size;
-                                else
-                                        p->new_size = MAX(round_down_size(share, 4096), rsz);
-
+                                assert(share >= rsz);
+                                p->new_size = CLAMP(round_down_size(share, context->grain_size), rsz, xsz);
                                 charge = true;
                         }
 
                         if (charge) {
-                                *span = charge_size(*span, p->new_size);
+                                *span = charge_size(context, *span, p->new_size);
                                 *weight_sum = charge_weight(*weight_sum, p->weight);
                         }
-
-                        if (try_again)
-                                return 0; /* try again */
                 }
 
                 if (p->new_padding == UINT64_MAX) {
-                        bool charge = false, try_again = false;
-                        uint64_t share;
+                        uint64_t share, rsz, xsz;
+                        bool charge = false;
 
-                        r = scale_by_weight(*span, p->padding_weight, *weight_sum, &share);
-                        if (r < 0)
-                                return r;
+                        share = scale_by_weight(*span, p->padding_weight, *weight_sum);
 
-                        if (phase == PHASE_OVERCHARGE && p->padding_min != UINT64_MAX && p->padding_min > share) {
-                                p->new_padding = p->padding_min;
+                        rsz = partition_min_padding(p);
+                        xsz = partition_max_padding(p);
+
+                        if (phase == PHASE_OVERCHARGE && rsz > share) {
+                                p->new_padding = rsz;
                                 charge = try_again = true;
-                        } else if (phase == PHASE_UNDERCHARGE && p->padding_max != UINT64_MAX && p->padding_max < share) {
-                                p->new_padding = p->padding_max;
+                        } else if (phase == PHASE_UNDERCHARGE && xsz < share) {
+                                p->new_padding = xsz;
                                 charge = try_again = true;
                         } else if (phase == PHASE_DISTRIBUTE) {
-
-                                p->new_padding = round_down_size(share, 4096);
-                                if (p->padding_min != UINT64_MAX && p->new_padding < p->padding_min)
-                                        p->new_padding = p->padding_min;
-
+                                assert(share >= rsz);
+                                p->new_padding = CLAMP(round_down_size(share, context->grain_size), rsz, xsz);
                                 charge = true;
                         }
 
                         if (charge) {
-                                *span = charge_size(*span, p->new_padding);
+                                *span = charge_size(context, *span, p->new_padding);
                                 *weight_sum = charge_weight(*weight_sum, p->padding_weight);
                         }
-
-                        if (try_again)
-                                return 0; /* try again */
                 }
         }
 
-        return 1; /* done */
+        return !try_again;
+}
+
+static void context_grow_partition_one(Context *context, FreeArea *a, Partition *p, uint64_t *span) {
+        uint64_t m;
+
+        assert(context);
+        assert(a);
+        assert(p);
+        assert(span);
+
+        if (*span == 0)
+                return;
+
+        if (p->allocated_to_area != a)
+                return;
+
+        if (PARTITION_IS_FOREIGN(p))
+                return;
+
+        assert(p->new_size != UINT64_MAX);
+
+        /* Calculate new size and align. */
+        m = round_down_size(p->new_size + *span, context->grain_size);
+        /* But ensure this doesn't shrink the size. */
+        m = MAX(m, p->new_size);
+        /* And ensure this doesn't exceed the maximum size. */
+        m = MIN(m, partition_max_size(context, p));
+
+        assert(m >= p->new_size);
+
+        *span = charge_size(context, *span, m - p->new_size);
+        p->new_size = m;
 }
 
 static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) {
@@ -776,68 +1032,25 @@
                 assert(a->after->offset != UINT64_MAX);
                 assert(a->after->current_size != UINT64_MAX);
 
-                span += round_up_size(a->after->offset + a->after->current_size, 4096) - a->after->offset;
+                span += round_up_size(a->after->offset + a->after->current_size, context->grain_size) - a->after->offset;
         }
 
-        GrowPartitionPhase phase = PHASE_OVERCHARGE;
-        for (;;) {
-                r = context_grow_partitions_phase(context, a, phase, &span, &weight_sum);
-                if (r < 0)
-                        return r;
-                if (r == 0) /* not done yet, re-run this phase */
-                        continue;
-
-                if (phase == PHASE_OVERCHARGE)
-                        phase = PHASE_UNDERCHARGE;
-                else if (phase == PHASE_UNDERCHARGE)
-                        phase = PHASE_DISTRIBUTE;
-                else if (phase == PHASE_DISTRIBUTE)
-                        break;
-        }
+        for (GrowPartitionPhase phase = 0; phase < _GROW_PARTITION_PHASE_MAX;)
+                if (context_grow_partitions_phase(context, a, phase, &span, &weight_sum))
+                        phase++; /* go to the next phase */
 
         /* We still have space left over? Donate to preceding partition if we have one */
-        if (span > 0 && a->after && !PARTITION_IS_FOREIGN(a->after)) {
-                uint64_t m, xsz;
-
-                assert(a->after->new_size != UINT64_MAX);
-                m = a->after->new_size + span;
-
-                xsz = partition_max_size(a->after);
-                if (xsz != UINT64_MAX && m > xsz)
-                        m = xsz;
-
-                span = charge_size(span, m - a->after->new_size);
-                a->after->new_size = m;
-        }
+        if (span > 0 && a->after)
+                context_grow_partition_one(context, a, a->after, &span);
 
         /* What? Even still some space left (maybe because there was no preceding partition, or it had a
          * size limit), then let's donate it to whoever wants it. */
-        if (span > 0) {
-                Partition *p;
-
+        if (span > 0)
                 LIST_FOREACH(partitions, p, context->partitions) {
-                        uint64_t m, xsz;
-
-                        if (p->allocated_to_area != a)
-                                continue;
-
-                        if (PARTITION_IS_FOREIGN(p))
-                                continue;
-
-                        assert(p->new_size != UINT64_MAX);
-                        m = p->new_size + span;
-
-                        xsz = partition_max_size(p);
-                        if (xsz != UINT64_MAX && m > xsz)
-                                m = xsz;
-
-                        span = charge_size(span, m - p->new_size);
-                        p->new_size = m;
-
+                        context_grow_partition_one(context, a, p, &span);
                         if (span == 0)
                                 break;
                 }
-        }
 
         /* Yuck, still no one? Then make it padding */
         if (span > 0 && a->after) {
@@ -849,7 +1062,6 @@
 }
 
 static int context_grow_partitions(Context *context) {
-        Partition *p;
         int r;
 
         assert(context);
@@ -881,25 +1093,31 @@
         return 0;
 }
 
-static void context_place_partitions(Context *context) {
+static uint64_t find_first_unused_partno(Context *context) {
         uint64_t partno = 0;
-        Partition *p;
 
         assert(context);
 
-        /* Determine next partition number to assign */
-        LIST_FOREACH(partitions, p, context->partitions) {
-                if (!PARTITION_EXISTS(p))
-                        continue;
-
-                assert(p->partno != UINT64_MAX);
-                if (p->partno >= partno)
-                        partno = p->partno + 1;
+        for (partno = 0;; partno++) {
+                bool found = false;
+                LIST_FOREACH(partitions, p, context->partitions)
+                        if (p->partno != UINT64_MAX && p->partno == partno)
+                                found = true;
+                if (!found)
+                        break;
         }
 
+        return partno;
+}
+
+static void context_place_partitions(Context *context) {
+
+        assert(context);
+
         for (size_t i = 0; i < context->n_free_areas; i++) {
                 FreeArea *a = context->free_areas[i];
-                uint64_t start, left;
+                _unused_ uint64_t left;
+                uint64_t start;
 
                 if (a->after) {
                         assert(a->after->offset != UINT64_MAX);
@@ -910,7 +1128,7 @@
                 } else
                         start = context->start;
 
-                start = round_up_size(start, 4096);
+                start = round_up_size(start, context->grain_size);
                 left = a->size;
 
                 LIST_FOREACH(partitions, p, context->partitions) {
@@ -918,7 +1136,7 @@
                                 continue;
 
                         p->offset = start;
-                        p->partno = partno++;
+                        p->partno = find_first_unused_partno(context);
 
                         assert(left >= p->new_size);
                         start += p->new_size;
@@ -943,13 +1161,12 @@
                 void *data,
                 void *userdata) {
 
-        sd_id128_t *type_uuid = data;
+        GptPartitionType *type = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(type_uuid);
 
-        r = gpt_partition_type_uuid_from_string(rvalue, type_uuid);
+        r = gpt_partition_type_from_string(rvalue, type);
         if (r < 0)
                 return log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse partition type: %s", rvalue);
 
@@ -969,11 +1186,10 @@
                 void *userdata) {
 
         _cleanup_free_ char *resolved = NULL;
-        char **label = data;
+        char **label = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(label);
 
         /* Nota bene: the empty label is a totally valid one. Let's hence not follow our usual rule of
          * assigning the empty string to reset to default here, but really accept it as label to set. */
@@ -1021,11 +1237,10 @@
                 void *data,
                 void *userdata) {
 
-        uint32_t *priority = data, v;
+        uint32_t *w = ASSERT_PTR(data), v;
         int r;
 
         assert(rvalue);
-        assert(priority);
 
         r = safe_atou32(rvalue, &v);
         if (r < 0) {
@@ -1040,7 +1255,7 @@
                 return 0;
         }
 
-        *priority = v;
+        *w = v;
         return 0;
 }
 
@@ -1075,7 +1290,8 @@
                 *sz = parsed;
 
         if (*sz != parsed)
-                log_syntax(unit, LOG_NOTICE, filename, line, r, "Rounded %s= size %" PRIu64 " → %" PRIu64 ", a multiple of 4096.", lvalue, parsed, *sz);
+                log_syntax(unit, LOG_NOTICE, filename, line, r, "Rounded %s= size %" PRIu64 " %s %" PRIu64 ", a multiple of 4096.",
+                           lvalue, parsed, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), *sz);
 
         return 0;
 }
@@ -1092,10 +1308,9 @@
                 void *data,
                 void *userdata) {
 
-        char **fstype = data;
+        char **fstype = ASSERT_PTR(data);
 
         assert(rvalue);
-        assert(data);
 
         if (!filename_is_valid(rvalue))
                 return log_syntax(unit, LOG_ERR, filename, line, 0,
@@ -1118,11 +1333,10 @@
 
         _cleanup_free_ char *source = NULL, *buffer = NULL, *resolved_source = NULL, *resolved_target = NULL;
         const char *p = rvalue, *target;
-        Partition *partition = data;
+        Partition *partition = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(partition);
 
         r = extract_first_word(&p, &source, ":", EXTRACT_CUNESCAPE|EXTRACT_DONT_COALESCE_SEPARATORS);
         if (r < 0)
@@ -1185,11 +1399,10 @@
                 void *userdata) {
 
         _cleanup_free_ char *d = NULL;
-        Partition *partition = data;
+        Partition *partition = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(partition);
 
         if (isempty(rvalue)) {
                 partition->copy_blocks_path = mfree(partition->copy_blocks_path);
@@ -1200,6 +1413,7 @@
         if (streq(rvalue, "auto")) {
                 partition->copy_blocks_path = mfree(partition->copy_blocks_path);
                 partition->copy_blocks_auto = true;
+                partition->copy_blocks_root = arg_root;
                 return 0;
         }
 
@@ -1216,6 +1430,7 @@
 
         free_and_replace(partition->copy_blocks_path, d);
         partition->copy_blocks_auto = false;
+        partition->copy_blocks_root = arg_root;
         return 0;
 }
 
@@ -1231,13 +1446,10 @@
                 void *data,
                 void *userdata) {
 
-        Partition *partition = data;
-        const char *p = rvalue;
+        Partition *partition = ASSERT_PTR(data);
+        const char *p = ASSERT_PTR(rvalue);
         int r;
 
-        assert(rvalue);
-        assert(partition);
-
         for (;;) {
                 _cleanup_free_ char *word = NULL, *d = NULL;
 
@@ -1282,11 +1494,10 @@
                 void *data,
                 void *userdata) {
 
-        uint64_t *gpt_flags = data;
+        uint64_t *gpt_flags = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(gpt_flags);
 
         r = safe_atou64(rvalue, gpt_flags);
         if (r < 0) {
@@ -1298,42 +1509,102 @@
         return 0;
 }
 
-static int partition_read_definition(Partition *p, const char *path) {
+static int config_parse_uuid(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Partition *partition = ASSERT_PTR(data);
+        int r;
+
+        if (isempty(rvalue)) {
+                partition->new_uuid = SD_ID128_NULL;
+                partition->new_uuid_is_set = false;
+                return 0;
+        }
+
+        if (streq(rvalue, "null")) {
+                partition->new_uuid = SD_ID128_NULL;
+                partition->new_uuid_is_set = true;
+                return 0;
+        }
+
+        r = sd_id128_from_string(rvalue, &partition->new_uuid);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse 128bit ID/UUID, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        partition->new_uuid_is_set = true;
+
+        return 0;
+}
+
+static DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_verity, verity_mode, VerityMode, VERITY_OFF, "Invalid verity mode");
+static DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_minimize, minimize_mode, MinimizeMode, MINIMIZE_OFF, "Invalid minimize mode");
+
+static int partition_read_definition(Partition *p, const char *path, const char *const *conf_file_dirs) {
 
         ConfigTableItem table[] = {
-                { "Partition", "Type",            config_parse_type,        0, &p->type_uuid        },
-                { "Partition", "Label",           config_parse_label,       0, &p->new_label        },
-                { "Partition", "UUID",            config_parse_id128,       0, &p->new_uuid         },
-                { "Partition", "Priority",        config_parse_int32,       0, &p->priority         },
-                { "Partition", "Weight",          config_parse_weight,      0, &p->weight           },
-                { "Partition", "PaddingWeight",   config_parse_weight,      0, &p->padding_weight   },
-                { "Partition", "SizeMinBytes",    config_parse_size4096,    1, &p->size_min         },
-                { "Partition", "SizeMaxBytes",    config_parse_size4096,   -1, &p->size_max         },
-                { "Partition", "PaddingMinBytes", config_parse_size4096,    1, &p->padding_min      },
-                { "Partition", "PaddingMaxBytes", config_parse_size4096,   -1, &p->padding_max      },
-                { "Partition", "FactoryReset",    config_parse_bool,        0, &p->factory_reset    },
-                { "Partition", "CopyBlocks",      config_parse_copy_blocks, 0, p                    },
-                { "Partition", "Format",          config_parse_fstype,      0, &p->format           },
-                { "Partition", "CopyFiles",       config_parse_copy_files,  0, p                    },
-                { "Partition", "MakeDirectories", config_parse_make_dirs,   0, p                    },
-                { "Partition", "Encrypt",         config_parse_encrypt,     0, &p->encrypt          },
-                { "Partition", "Flags",           config_parse_gpt_flags,   0, &p->gpt_flags        },
-                { "Partition", "ReadOnly",        config_parse_tristate,    0, &p->read_only        },
-                { "Partition", "NoAuto",          config_parse_tristate,    0, &p->no_auto          },
-                { "Partition", "GrowFileSystem",  config_parse_tristate,    0, &p->growfs           },
+                { "Partition", "Type",            config_parse_type,        0, &p->type              },
+                { "Partition", "Label",           config_parse_label,       0, &p->new_label         },
+                { "Partition", "UUID",            config_parse_uuid,        0, p                     },
+                { "Partition", "Priority",        config_parse_int32,       0, &p->priority          },
+                { "Partition", "Weight",          config_parse_weight,      0, &p->weight            },
+                { "Partition", "PaddingWeight",   config_parse_weight,      0, &p->padding_weight    },
+                { "Partition", "SizeMinBytes",    config_parse_size4096,    1, &p->size_min          },
+                { "Partition", "SizeMaxBytes",    config_parse_size4096,   -1, &p->size_max          },
+                { "Partition", "PaddingMinBytes", config_parse_size4096,    1, &p->padding_min       },
+                { "Partition", "PaddingMaxBytes", config_parse_size4096,   -1, &p->padding_max       },
+                { "Partition", "FactoryReset",    config_parse_bool,        0, &p->factory_reset     },
+                { "Partition", "CopyBlocks",      config_parse_copy_blocks, 0, p                     },
+                { "Partition", "Format",          config_parse_fstype,      0, &p->format            },
+                { "Partition", "CopyFiles",       config_parse_copy_files,  0, p                     },
+                { "Partition", "MakeDirectories", config_parse_make_dirs,   0, p                     },
+                { "Partition", "Encrypt",         config_parse_encrypt,     0, &p->encrypt           },
+                { "Partition", "Verity",          config_parse_verity,      0, &p->verity            },
+                { "Partition", "VerityMatchKey",  config_parse_string,      0, &p->verity_match_key  },
+                { "Partition", "Flags",           config_parse_gpt_flags,   0, &p->gpt_flags         },
+                { "Partition", "ReadOnly",        config_parse_tristate,    0, &p->read_only         },
+                { "Partition", "NoAuto",          config_parse_tristate,    0, &p->no_auto           },
+                { "Partition", "GrowFileSystem",  config_parse_tristate,    0, &p->growfs            },
+                { "Partition", "SplitName",       config_parse_string,      0, &p->split_name_format },
+                { "Partition", "Minimize",        config_parse_minimize,    0, &p->minimize          },
                 {}
         };
         int r;
+        _cleanup_free_ char *filename = NULL;
+        const char* dropin_dirname;
 
-        r = config_parse(NULL, path, NULL,
-                         "Partition\0",
-                         config_item_table_lookup, table,
-                         CONFIG_PARSE_WARN,
-                         p,
-                         NULL);
+        r = path_extract_filename(path, &filename);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", path);
+
+        dropin_dirname = strjoina(filename, ".d");
+
+        r = config_parse_many(
+                        STRV_MAKE_CONST(path),
+                        conf_file_dirs,
+                        dropin_dirname,
+                        "Partition\0",
+                        config_item_table_lookup, table,
+                        CONFIG_PARSE_WARN,
+                        p,
+                        NULL,
+                        &p->drop_in_files);
         if (r < 0)
                 return r;
 
+        if (partition_exclude(p))
+                return 0;
+
         if (p->size_min != UINT64_MAX && p->size_max != UINT64_MAX && p->size_min > p->size_max)
                 return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
                                   "SizeMinBytes= larger than SizeMaxBytes=, refusing.");
@@ -1342,7 +1613,7 @@
                 return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
                                   "PaddingMinBytes= larger than PaddingMaxBytes=, refusing.");
 
-        if (sd_id128_is_null(p->type_uuid))
+        if (sd_id128_is_null(p->type.uuid))
                 return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
                                   "Type= not defined, refusing.");
 
@@ -1362,36 +1633,138 @@
                         return log_oom();
         }
 
+        if (p->minimize != MINIMIZE_OFF && !p->format)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Minimize= can only be enabled if Format= is set");
+
+        if (p->minimize == MINIMIZE_BEST && !fstype_is_ro(p->format))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Minimize=best can only be used with read-only filesystems");
+
+        if ((!strv_isempty(p->copy_files) || !strv_isempty(p->make_directories)) && !mkfs_supports_root_option(p->format) && geteuid() != 0)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EPERM),
+                                  "Need to be root to populate %s filesystems with CopyFiles=/MakeDirectories=",
+                                  p->format);
+
+        if (p->format && fstype_is_ro(p->format) && strv_isempty(p->copy_files) && strv_isempty(p->make_directories))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Cannot format %s filesystem without source files, refusing", p->format);
+
+        if (p->verity != VERITY_OFF || p->encrypt != ENCRYPT_OFF) {
+                r = dlopen_cryptsetup();
+                if (r < 0)
+                        return log_syntax(NULL, LOG_ERR, path, 1, r,
+                                          "libcryptsetup not found, Verity=/Encrypt= are not supported: %m");
+        }
+
+        if (p->verity != VERITY_OFF && !p->verity_match_key)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "VerityMatchKey= must be set if Verity=%s", verity_mode_to_string(p->verity));
+
+        if (p->verity == VERITY_OFF && p->verity_match_key)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "VerityMatchKey= can only be set if Verity= is not \"%s\"",
+                                  verity_mode_to_string(p->verity));
+
+        if (IN_SET(p->verity, VERITY_HASH, VERITY_SIG) &&
+                (p->copy_files || p->copy_blocks_path || p->copy_blocks_auto || p->format || p->make_directories))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "CopyBlocks=/CopyFiles=/Format=/MakeDirectories= cannot be used with Verity=%s",
+                                  verity_mode_to_string(p->verity));
+
+        if (p->verity != VERITY_OFF && p->encrypt != ENCRYPT_OFF)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Encrypting verity hash/data partitions is not supported");
+
+        if (p->verity == VERITY_SIG && !arg_private_key)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Verity signature partition requested but no private key provided (--private-key=)");
+
+        if (p->verity == VERITY_SIG && !arg_certificate)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Verity signature partition requested but no PEM certificate provided (--certificate=)");
+
+        if (p->verity == VERITY_SIG && (p->size_min != UINT64_MAX || p->size_max != UINT64_MAX))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "SizeMinBytes=/SizeMaxBytes= cannot be used with Verity=%s",
+                                  verity_mode_to_string(p->verity));
+
         /* Verity partitions are read only, let's imply the RO flag hence, unless explicitly configured otherwise. */
-        if ((gpt_partition_type_is_root_verity(p->type_uuid) ||
-             gpt_partition_type_is_usr_verity(p->type_uuid)) &&
-            p->read_only < 0)
+        if (IN_SET(p->type.designator, PARTITION_ROOT_VERITY, PARTITION_USR_VERITY) && p->read_only < 0)
                 p->read_only = true;
 
         /* Default to "growfs" on, unless read-only */
-        if (gpt_partition_type_knows_growfs(p->type_uuid) &&
+        if (gpt_partition_type_knows_growfs(p->type) &&
             p->read_only <= 0)
                 p->growfs = true;
 
+        if (!p->split_name_format) {
+                char *s = strdup("%t");
+                if (!s)
+                        return log_oom();
+
+                p->split_name_format = s;
+        } else if (streq(p->split_name_format, "-"))
+                p->split_name_format = mfree(p->split_name_format);
+
+        return 1;
+}
+
+static int find_verity_sibling(Context *context, Partition *p, VerityMode mode, Partition **ret) {
+        Partition *s = NULL;
+
+        assert(p);
+        assert(p->verity != VERITY_OFF);
+        assert(p->verity_match_key);
+        assert(mode != VERITY_OFF);
+        assert(p->verity != mode);
+        assert(ret);
+
+        /* Try to find the matching sibling partition of the given type for a verity partition. For a data
+         * partition, this is the corresponding hash partition with the same verity name (and vice versa for
+         * the hash partition). */
+
+        LIST_FOREACH(partitions, q, context->partitions) {
+                if (p == q)
+                        continue;
+
+                if (q->verity != mode)
+                        continue;
+
+                assert(q->verity_match_key);
+
+                if (!streq(p->verity_match_key, q->verity_match_key))
+                        continue;
+
+                if (s)
+                        return -ENOTUNIQ;
+
+                s = q;
+        }
+
+        if (!s)
+                return -ENXIO;
+
+        *ret = s;
+
         return 0;
 }
 
 static int context_read_definitions(
                 Context *context,
-                const char *directory,
+                char **directories,
                 const char *root) {
 
         _cleanup_strv_free_ char **files = NULL;
         Partition *last = NULL;
-        char **f;
         int r;
+        const char *const *dirs;
 
         assert(context);
 
-        if (directory)
-                r = conf_files_list_strv(&files, ".conf", NULL, CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, (const char**) STRV_MAKE(directory));
-        else
-                r = conf_files_list_strv(&files, ".conf", root, CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, (const char**) CONF_PATHS_STRV("repart.d"));
+        dirs = (const char* const*) (directories ?: CONF_PATHS_STRV("repart.d"));
+
+        r = conf_files_list_strv(&files, ".conf", directories ? NULL : root, CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, dirs);
         if (r < 0)
                 return log_error_errno(r, "Failed to enumerate *.conf files: %m");
 
@@ -1406,27 +1779,67 @@
                 if (!p->definition_path)
                         return log_oom();
 
-                r = partition_read_definition(p, *f);
+                r = partition_read_definition(p, *f, dirs);
                 if (r < 0)
                         return r;
+                if (r == 0)
+                        continue;
 
                 LIST_INSERT_AFTER(partitions, context->partitions, last, p);
                 last = TAKE_PTR(p);
                 context->n_partitions++;
         }
 
+        /* Check that each configured verity hash/data partition has a matching verity data/hash partition. */
+
+        LIST_FOREACH(partitions, p, context->partitions) {
+                if (p->verity == VERITY_OFF)
+                        continue;
+
+                for (VerityMode mode = VERITY_OFF + 1; mode < _VERITY_MODE_MAX; mode++) {
+                        Partition *q = NULL;
+
+                        if (p->verity == mode)
+                                continue;
+
+                        if (p->siblings[mode])
+                                continue;
+
+                        r = find_verity_sibling(context, p, mode, &q);
+                        if (r == -ENXIO) {
+                                if (mode != VERITY_SIG)
+                                        return log_syntax(NULL, LOG_ERR, p->definition_path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                                          "Missing verity %s partition for verity %s partition with VerityMatchKey=%s",
+                                                          verity_mode_to_string(mode), verity_mode_to_string(p->verity), p->verity_match_key);
+                        } else if (r == -ENOTUNIQ)
+                                return log_syntax(NULL, LOG_ERR, p->definition_path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                                  "Multiple verity %s partitions found for verity %s partition with VerityMatchKey=%s",
+                                                  verity_mode_to_string(mode), verity_mode_to_string(p->verity), p->verity_match_key);
+                        else if (r < 0)
+                                return log_syntax(NULL, LOG_ERR, p->definition_path, 1, r,
+                                                  "Failed to find verity %s partition for verity %s partition with VerityMatchKey=%s",
+                                                  verity_mode_to_string(mode), verity_mode_to_string(p->verity), p->verity_match_key);
+
+                        if (q) {
+                                if (q->priority != p->priority)
+                                        return log_syntax(NULL, LOG_ERR, p->definition_path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                                        "Priority mismatch (%i != %i) for verity sibling partitions with VerityMatchKey=%s",
+                                                        p->priority, q->priority, p->verity_match_key);
+
+                                p->siblings[mode] = q;
+                        }
+                }
+        }
+
         return 0;
 }
 
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_context*, fdisk_unref_context, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_partition*, fdisk_unref_partition, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_parttype*, fdisk_unref_parttype, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_table*, fdisk_unref_table, NULL);
-
 static int determine_current_padding(
                 struct fdisk_context *c,
                 struct fdisk_table *t,
                 struct fdisk_partition *p,
+                uint64_t secsz,
+                uint64_t grainsz,
                 uint64_t *ret) {
 
         size_t n_partitions;
@@ -1440,11 +1853,11 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Partition has no end!");
 
         offset = fdisk_partition_get_end(p);
-        assert(offset < UINT64_MAX / 512);
-        offset *= 512;
+        assert(offset < UINT64_MAX / secsz);
+        offset *= secsz;
 
         n_partitions = fdisk_table_get_nents(t);
-        for (size_t i = 0; i < n_partitions; i++)  {
+        for (size_t i = 0; i < n_partitions; i++) {
                 struct fdisk_partition *q;
                 uint64_t start;
 
@@ -1459,8 +1872,8 @@
                         continue;
 
                 start = fdisk_partition_get_start(q);
-                assert(start < UINT64_MAX / 512);
-                start *= 512;
+                assert(start < UINT64_MAX / secsz);
+                start *= secsz;
 
                 if (start >= offset && (next == UINT64_MAX || next > start))
                         next = start;
@@ -1472,22 +1885,18 @@
                 assert(next < UINT64_MAX);
                 next++; /* The last LBA is one sector before the end */
 
-                assert(next < UINT64_MAX / 512);
-                next *= 512;
+                assert(next < UINT64_MAX / secsz);
+                next *= secsz;
 
                 if (offset > next)
                         return log_error_errno(SYNTHETIC_ERRNO(EIO), "Partition end beyond disk end.");
         }
 
         assert(next >= offset);
-        offset = round_up_size(offset, 4096);
-        next = round_down_size(next, 4096);
+        offset = round_up_size(offset, grainsz);
+        next = round_down_size(next, grainsz);
 
-        if (next >= offset) /* Check again, rounding might have fucked things up */
-                *ret = next - offset;
-        else
-                *ret = 0;
-
+        *ret = LESS_BY(next, offset); /* Saturated subtraction, rounding might have fucked things up */
         return 0;
 }
 
@@ -1498,11 +1907,11 @@
         if (fdisk_ask_get_type(ask) != FDISK_ASKTYPE_STRING)
                 return -EINVAL;
 
-        ids = new(char, ID128_UUID_STRING_MAX);
+        ids = new(char, SD_ID128_UUID_STRING_MAX);
         if (!ids)
                 return -ENOMEM;
 
-        r = fdisk_ask_string_set_result(ask, id128_to_uuid_string(*(sd_id128_t*) data, ids));
+        r = fdisk_ask_string_set_result(ask, sd_id128_to_uuid_string(*(sd_id128_t*) data, ids));
         if (r < 0)
                 return r;
 
@@ -1526,7 +1935,7 @@
 
 static int derive_uuid(sd_id128_t base, const char *token, sd_id128_t *ret) {
         union {
-                unsigned char md[SHA256_DIGEST_LENGTH];
+                uint8_t md[SHA256_DIGEST_SIZE];
                 sd_id128_t id;
         } result;
 
@@ -1538,11 +1947,7 @@
          * machine ID). We use the machine ID as key (and not as cleartext!) of the HMAC operation since it's
          * the machine ID we don't want to leak. */
 
-        if (!HMAC(EVP_sha256(),
-                  &base, sizeof(base),
-                  (const unsigned char*) token, strlen(token),
-                  result.md, NULL))
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "HMAC-SHA256 calculation failed.");
+        hmac_sha256(base.bytes, sizeof(base.bytes), token, strlen(token), result.md);
 
         /* Take the first half, mark it as v4 UUID */
         assert_cc(sizeof(result.md) == sizeof(result.id) * 2);
@@ -1550,11 +1955,7 @@
         return 0;
 }
 
-static int context_load_partition_table(
-                Context *context,
-                const char *node,
-                int *backing_fd) {
-
+static int context_load_partition_table(Context *context) {
         _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
         _cleanup_(fdisk_unref_tablep) struct fdisk_table *t = NULL;
         uint64_t left_boundary = UINT64_MAX, first_lba, last_lba, nsectors;
@@ -1562,11 +1963,11 @@
         bool from_scratch = false;
         sd_id128_t disk_uuid;
         size_t n_partitions;
+        unsigned long secsz;
+        uint64_t grainsz;
         int r;
 
         assert(context);
-        assert(node);
-        assert(backing_fd);
         assert(!context->fdisk_context);
         assert(!context->free_areas);
         assert(context->start == UINT64_MAX);
@@ -1577,54 +1978,92 @@
         if (!c)
                 return log_oom();
 
+        if (arg_sector_size > 0)
+                r = fdisk_save_user_sector_size(c, /* phy= */ 0, arg_sector_size);
+        else {
+                uint32_t ssz;
+
+                if (context->backing_fd < 0) {
+                        context->backing_fd = open(context->node, O_RDONLY|O_CLOEXEC);
+                        if (context->backing_fd < 0)
+                                return log_error_errno(errno, "Failed to open device '%s': %m", context->node);
+                }
+
+                /* Auto-detect sector size if not specified. */
+                r = probe_sector_size_prefer_ioctl(context->backing_fd, &ssz);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to probe sector size of '%s': %m", context->node);
+
+                r = fdisk_save_user_sector_size(c, /* phy= */ 0, ssz);
+        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to set sector size: %m");
+
         /* libfdisk doesn't have an API to operate on arbitrary fds, hence reopen the fd going via the
          * /proc/self/fd/ magic path if we have an existing fd. Open the original file otherwise. */
-        if (*backing_fd < 0)
-                r = fdisk_assign_device(c, node, arg_dry_run);
-        else {
-                char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-                xsprintf(procfs_path, "/proc/self/fd/%i", *backing_fd);
-
-                r = fdisk_assign_device(c, procfs_path, arg_dry_run);
-        }
+        r = fdisk_assign_device(
+                        c,
+                        context->backing_fd >= 0 ? FORMAT_PROC_FD_PATH(context->backing_fd) : context->node,
+                        arg_dry_run);
         if (r == -EINVAL && arg_size_auto) {
                 struct stat st;
 
                 /* libfdisk returns EINVAL if opening a file of size zero. Let's check for that, and accept
                  * it if automatic sizing is requested. */
 
-                if (*backing_fd < 0)
-                        r = stat(node, &st);
+                if (context->backing_fd < 0)
+                        r = stat(context->node, &st);
                 else
-                        r = fstat(*backing_fd, &st);
+                        r = fstat(context->backing_fd, &st);
                 if (r < 0)
-                        return log_error_errno(errno, "Failed to stat block device '%s': %m", node);
+                        return log_error_errno(errno, "Failed to stat block device '%s': %m", context->node);
 
-                if (S_ISREG(st.st_mode) && st.st_size == 0)
+                if (S_ISREG(st.st_mode) && st.st_size == 0) {
+                        /* User the fallback values if we have no better idea */
+                        context->sector_size = arg_sector_size ?: 512;
+                        context->grain_size = 4096;
                         return /* from_scratch = */ true;
+                }
 
                 r = -EINVAL;
         }
         if (r < 0)
-                return log_error_errno(r, "Failed to open device '%s': %m", node);
+                return log_error_errno(r, "Failed to open device '%s': %m", context->node);
 
-        if (*backing_fd < 0) {
+        if (context->backing_fd < 0) {
                 /* If we have no fd referencing the device yet, make a copy of the fd now, so that we have one */
-                *backing_fd = fcntl(fdisk_get_devfd(c), F_DUPFD_CLOEXEC, 3);
-                if (*backing_fd < 0)
-                        return log_error_errno(errno, "Failed to duplicate fdisk fd: %m");
+                context->backing_fd = fd_reopen(fdisk_get_devfd(c), O_RDONLY|O_CLOEXEC);
+                if (context->backing_fd < 0)
+                        return log_error_errno(context->backing_fd, "Failed to duplicate fdisk fd: %m");
+
+                /* Tell udev not to interfere while we are processing the device */
+                if (flock(context->backing_fd, arg_dry_run ? LOCK_SH : LOCK_EX) < 0)
+                        return log_error_errno(errno, "Failed to lock block device: %m");
         }
 
-        /* Tell udev not to interfere while we are processing the device */
-        if (flock(fdisk_get_devfd(c), arg_dry_run ? LOCK_SH : LOCK_EX) < 0)
-                return log_error_errno(errno, "Failed to lock block device: %m");
+        /* The offsets/sizes libfdisk returns to us will be in multiple of the sector size of the
+         * device. This is typically 512, and sometimes 4096. Let's query libfdisk once for it, and then use
+         * it for all our needs. Note that the values we use ourselves always are in bytes though, thus mean
+         * the same thing universally. Also note that regardless what kind of sector size is in use we'll
+         * place partitions at multiples of 4K. */
+        secsz = fdisk_get_sector_size(c);
+
+        /* Insist on a power of two, and that it's a multiple of 512, i.e. the traditional sector size. */
+        if (secsz < 512 || !ISPOWEROF2(secsz))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Sector size %lu is not a power of two larger than 512? Refusing.", secsz);
+
+        /* Use at least 4K, and ensure it's a multiple of the sector size, regardless if that is smaller or
+         * larger */
+        grainsz = secsz < 4096 ? 4096 : secsz;
+
+        log_debug("Sector size of device is %lu bytes. Using grain size of %" PRIu64 ".", secsz, grainsz);
 
         switch (arg_empty) {
 
         case EMPTY_REFUSE:
                 /* Refuse empty disks, insist on an existing GPT partition table */
                 if (!fdisk_is_labeltype(c, FDISK_DISKLABEL_GPT))
-                        return log_notice_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s has no GPT disk label, not repartitioning.", node);
+                        return log_notice_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s has no GPT disk label, not repartitioning.", context->node);
 
                 break;
 
@@ -1632,9 +2071,9 @@
                 /* Require an empty disk, refuse any existing partition table */
                 r = fdisk_has_label(c);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to determine whether disk %s has a disk label: %m", node);
+                        return log_error_errno(r, "Failed to determine whether disk %s has a disk label: %m", context->node);
                 if (r > 0)
-                        return log_notice_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s already has a disk label, refusing.", node);
+                        return log_notice_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s already has a disk label, refusing.", context->node);
 
                 from_scratch = true;
                 break;
@@ -1643,10 +2082,10 @@
                 /* Allow both an empty disk and an existing partition table, but only GPT */
                 r = fdisk_has_label(c);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to determine whether disk %s has a disk label: %m", node);
+                        return log_error_errno(r, "Failed to determine whether disk %s has a disk label: %m", context->node);
                 if (r > 0) {
                         if (!fdisk_is_labeltype(c, FDISK_DISKLABEL_GPT))
-                                return log_notice_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s has non-GPT disk label, not repartitioning.", node);
+                                return log_notice_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s has non-GPT disk label, not repartitioning.", context->node);
                 } else
                         from_scratch = true;
 
@@ -1698,12 +2137,11 @@
                 return log_error_errno(r, "Failed to acquire partition table: %m");
 
         n_partitions = fdisk_table_get_nents(t);
-        for (size_t i = 0; i < n_partitions; i++)  {
+        for (size_t i = 0; i < n_partitions; i++) {
                 _cleanup_free_ char *label_copy = NULL;
-                Partition *pp, *last = NULL;
+                Partition *last = NULL;
                 struct fdisk_partition *p;
-                struct fdisk_parttype *pt;
-                const char *pts, *ids, *label;
+                const char *label;
                 uint64_t sz, start;
                 bool found = false;
                 sd_id128_t ptid, id;
@@ -1721,25 +2159,13 @@
                     fdisk_partition_has_partno(p) <= 0)
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Found a partition without a position, size or number.");
 
-                pt = fdisk_partition_get_type(p);
-                if (!pt)
-                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to acquire type of partition: %m");
-
-                pts = fdisk_parttype_get_string(pt);
-                if (!pts)
-                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to acquire type of partition as string: %m");
-
-                r = sd_id128_from_string(pts, &ptid);
+                r = fdisk_partition_get_type_as_id128(p, &ptid);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to parse partition type UUID %s: %m", pts);
+                        return log_error_errno(r, "Failed to query partition type UUID: %m");
 
-                ids = fdisk_partition_get_uuid(p);
-                if (!ids)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Found a partition without a UUID.");
-
-                r = sd_id128_from_string(ids, &id);
+                r = fdisk_partition_get_uuid_as_id128(p, &id);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to parse partition UUID %s: %m", ids);
+                        return log_error_errno(r, "Failed to query partition UUID: %m");
 
                 label = fdisk_partition_get_name(p);
                 if (!isempty(label)) {
@@ -1749,12 +2175,12 @@
                 }
 
                 sz = fdisk_partition_get_size(p);
-                assert_se(sz <= UINT64_MAX/512);
-                sz *= 512;
+                assert(sz <= UINT64_MAX/secsz);
+                sz *= secsz;
 
                 start = fdisk_partition_get_start(p);
-                assert_se(start <= UINT64_MAX/512);
-                start *= 512;
+                assert(start <= UINT64_MAX/secsz);
+                start *= secsz;
 
                 partno = fdisk_partition_get_partno(p);
 
@@ -1766,7 +2192,7 @@
                 LIST_FOREACH(partitions, pp, context->partitions) {
                         last = pp;
 
-                        if (!sd_id128_equal(pp->type_uuid, ptid))
+                        if (!sd_id128_equal(pp->type.uuid, ptid))
                                 continue;
 
                         if (!pp->current_partition) {
@@ -1779,7 +2205,7 @@
                                 pp->current_partition = p;
                                 fdisk_ref_partition(p);
 
-                                r = determine_current_padding(c, t, p, &pp->current_padding);
+                                r = determine_current_padding(c, t, p, secsz, grainsz, &pp->current_padding);
                                 if (r < 0)
                                         return r;
 
@@ -1803,7 +2229,7 @@
                                 return log_oom();
 
                         np->current_uuid = id;
-                        np->type_uuid = ptid;
+                        np->type = gpt_partition_type_from_uuid(ptid);
                         np->current_size = sz;
                         np->offset = start;
                         np->partno = partno;
@@ -1812,7 +2238,7 @@
                         np->current_partition = p;
                         fdisk_ref_partition(p);
 
-                        r = determine_current_padding(c, t, p, &np->current_padding);
+                        r = determine_current_padding(c, t, p, secsz, grainsz, &np->current_padding);
                         if (r < 0)
                                 return r;
 
@@ -1829,26 +2255,26 @@
 
 add_initial_free_area:
         nsectors = fdisk_get_nsectors(c);
-        assert(nsectors <= UINT64_MAX/512);
-        nsectors *= 512;
+        assert(nsectors <= UINT64_MAX/secsz);
+        nsectors *= secsz;
 
         first_lba = fdisk_get_first_lba(c);
-        assert(first_lba <= UINT64_MAX/512);
-        first_lba *= 512;
+        assert(first_lba <= UINT64_MAX/secsz);
+        first_lba *= secsz;
 
         last_lba = fdisk_get_last_lba(c);
         assert(last_lba < UINT64_MAX);
         last_lba++;
-        assert(last_lba <= UINT64_MAX/512);
-        last_lba *= 512;
+        assert(last_lba <= UINT64_MAX/secsz);
+        last_lba *= secsz;
 
         assert(last_lba >= first_lba);
 
         if (left_boundary == UINT64_MAX) {
                 /* No partitions at all? Then the whole disk is up for grabs. */
 
-                first_lba = round_up_size(first_lba, 4096);
-                last_lba = round_down_size(last_lba, 4096);
+                first_lba = round_up_size(first_lba, grainsz);
+                last_lba = round_down_size(last_lba, grainsz);
 
                 if (last_lba > first_lba) {
                         r = context_add_free_area(context, last_lba - first_lba, NULL);
@@ -1859,9 +2285,9 @@
                 /* Add space left of first partition */
                 assert(left_boundary >= first_lba);
 
-                first_lba = round_up_size(first_lba, 4096);
-                left_boundary = round_down_size(left_boundary, 4096);
-                last_lba = round_down_size(last_lba, 4096);
+                first_lba = round_up_size(first_lba, grainsz);
+                left_boundary = round_down_size(left_boundary, grainsz);
+                last_lba = round_down_size(last_lba, grainsz);
 
                 if (left_boundary > first_lba) {
                         r = context_add_free_area(context, left_boundary - first_lba, NULL);
@@ -1873,17 +2299,17 @@
         context->start = first_lba;
         context->end = last_lba;
         context->total = nsectors;
+        context->sector_size = secsz;
+        context->grain_size = grainsz;
         context->fdisk_context = TAKE_PTR(c);
 
         return from_scratch;
 }
 
 static void context_unload_partition_table(Context *context) {
-        Partition *p, *next;
-
         assert(context);
 
-        LIST_FOREACH_SAFE(partitions, p, next, context->partitions) {
+        LIST_FOREACH(partitions, p, context->partitions) {
 
                 /* Entirely remove partitions that have no configuration */
                 if (PARTITION_IS_FOREIGN(p)) {
@@ -1932,29 +2358,24 @@
 }
 
 static int format_size_change(uint64_t from, uint64_t to, char **ret) {
-        char format_buffer1[FORMAT_BYTES_MAX], format_buffer2[FORMAT_BYTES_MAX], *buf;
-
-        if (from != UINT64_MAX)
-                format_bytes(format_buffer1, sizeof(format_buffer1), from);
-        if (to != UINT64_MAX)
-                format_bytes(format_buffer2, sizeof(format_buffer2), to);
+        char *t;
 
         if (from != UINT64_MAX) {
                 if (from == to || to == UINT64_MAX)
-                        buf = strdup(format_buffer1);
+                        t = strdup(FORMAT_BYTES(from));
                 else
-                        buf = strjoin(format_buffer1, " ", special_glyph(SPECIAL_GLYPH_ARROW), " ", format_buffer2);
+                        t = strjoin(FORMAT_BYTES(from), " ", special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), " ", FORMAT_BYTES(to));
         } else if (to != UINT64_MAX)
-                buf = strjoin(special_glyph(SPECIAL_GLYPH_ARROW), " ", format_buffer2);
+                t = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), " ", FORMAT_BYTES(to));
         else {
                 *ret = NULL;
                 return 0;
         }
 
-        if (!buf)
+        if (!t)
                 return log_oom();
 
-        *ret = TAKE_PTR(buf);
+        *ret = t;
         return 1;
 }
 
@@ -1967,31 +2388,50 @@
         if (p->current_label)
                 return p->current_label;
 
-        return gpt_partition_type_uuid_to_string(p->type_uuid);
+        return gpt_partition_type_uuid_to_string(p->type.uuid);
 }
 
-static int context_dump_partitions(Context *context, const char *node) {
+static int context_dump_partitions(Context *context) {
         _cleanup_(table_unrefp) Table *t = NULL;
         uint64_t sum_padding = 0, sum_size = 0;
-        Partition *p;
         int r;
+        const size_t roothash_col = 13, dropin_files_col = 14, split_path_col = 15;
+        bool has_roothash = false, has_dropin_files = false, has_split_path = false;
 
         if ((arg_json_format_flags & JSON_FORMAT_OFF) && context->n_partitions == 0) {
                 log_info("Empty partition table.");
                 return 0;
         }
 
-        t = table_new("type", "label", "uuid", "file", "node", "offset", "old size", "raw size", "size", "old padding", "raw padding", "padding", "activity");
+        t = table_new("type",
+                      "label",
+                      "uuid",
+                      "file",
+                      "node",
+                      "offset",
+                      "old size",
+                      "raw size",
+                      "size",
+                      "old padding",
+                      "raw padding",
+                      "padding",
+                      "activity",
+                      "roothash",
+                      "drop-in files",
+                      "split path");
         if (!t)
                 return log_oom();
 
         if (!DEBUG_LOGGING) {
                 if (arg_json_format_flags & JSON_FORMAT_OFF)
                         (void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4,
-                                                    (size_t) 8, (size_t) 11);
+                                                    (size_t) 8, (size_t) 11, roothash_col, dropin_files_col,
+                                                    split_path_col);
                 else
                         (void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4,
-                                                    (size_t) 5, (size_t) 6, (size_t) 7, (size_t) 9, (size_t) 10, (size_t) 12);
+                                                    (size_t) 5, (size_t) 6, (size_t) 7, (size_t) 9, (size_t) 10,
+                                                    (size_t) 12, roothash_col, dropin_files_col,
+                                                    split_path_col);
         }
 
         (void) table_set_align_percent(t, table_get_cell(t, 0, 5), 100);
@@ -2003,8 +2443,8 @@
         (void) table_set_align_percent(t, table_get_cell(t, 0, 11), 100);
 
         LIST_FOREACH(partitions, p, context->partitions) {
-                _cleanup_free_ char *size_change = NULL, *padding_change = NULL, *partname = NULL;
-                char uuid_buffer[ID128_UUID_STRING_MAX];
+                _cleanup_free_ char *size_change = NULL, *padding_change = NULL, *partname = NULL, *rh = NULL;
+                char uuid_buffer[SD_ID128_UUID_STRING_MAX];
                 const char *label, *activity = NULL;
 
                 if (p->dropped)
@@ -2016,7 +2456,7 @@
                         activity = "resize";
 
                 label = partition_label(p);
-                partname = p->partno != UINT64_MAX ? fdisk_partname(node, p->partno+1) : NULL;
+                partname = p->partno != UINT64_MAX ? fdisk_partname(context->node, p->partno+1) : NULL;
 
                 r = format_size_change(p->current_size, p->new_size, &size_change);
                 if (r < 0)
@@ -2031,12 +2471,20 @@
                 if (p->new_padding != UINT64_MAX)
                         sum_padding += p->new_padding;
 
+                if (p->verity != VERITY_OFF) {
+                        Partition *hp = p->verity == VERITY_HASH ? p : p->siblings[VERITY_HASH];
+
+                        rh = hp->roothash ? hexmem(hp->roothash, hp->roothash_size) : strdup("TBD");
+                        if (!rh)
+                                return log_oom();
+                }
+
                 r = table_add_many(
                                 t,
-                                TABLE_STRING, gpt_partition_type_uuid_to_string_harder(p->type_uuid, uuid_buffer),
+                                TABLE_STRING, gpt_partition_type_uuid_to_string_harder(p->type.uuid, uuid_buffer),
                                 TABLE_STRING, empty_to_null(label) ?: "-", TABLE_SET_COLOR, empty_to_null(label) ? NULL : ansi_grey(),
-                                TABLE_UUID, sd_id128_is_null(p->new_uuid) ? p->current_uuid : p->new_uuid,
-                                TABLE_STRING, p->definition_path ? basename(p->definition_path) : "-", TABLE_SET_COLOR, p->definition_path ? NULL : ansi_grey(),
+                                TABLE_UUID, p->new_uuid_is_set ? p->new_uuid : p->current_uuid,
+                                TABLE_PATH_BASENAME, p->definition_path, TABLE_SET_COLOR, p->definition_path ? NULL : ansi_grey(),
                                 TABLE_STRING, partname ?: "-", TABLE_SET_COLOR, partname ? NULL : ansi_highlight(),
                                 TABLE_UINT64, p->offset,
                                 TABLE_UINT64, p->current_size == UINT64_MAX ? 0 : p->current_size,
@@ -2045,17 +2493,23 @@
                                 TABLE_UINT64, p->current_padding == UINT64_MAX ? 0 : p->current_padding,
                                 TABLE_UINT64, p->new_padding,
                                 TABLE_STRING, padding_change, TABLE_SET_COLOR, !p->partitions_next && sum_padding > 0 ? ansi_underline() : NULL,
-                                TABLE_STRING, activity ?: "unchanged");
+                                TABLE_STRING, activity ?: "unchanged",
+                                TABLE_STRING, rh,
+                                TABLE_STRV, p->drop_in_files,
+                                TABLE_STRING, empty_to_null(p->split_path) ?: "-");
                 if (r < 0)
                         return table_log_add_error(r);
+
+                has_roothash = has_roothash || !isempty(rh);
+                has_dropin_files = has_dropin_files || !strv_isempty(p->drop_in_files);
+                has_split_path = has_split_path || !isempty(p->split_path);
         }
 
         if ((arg_json_format_flags & JSON_FORMAT_OFF) && (sum_padding > 0 || sum_size > 0)) {
-                char s[FORMAT_BYTES_MAX];
                 const char *a, *b;
 
-                a = strjoina(special_glyph(SPECIAL_GLYPH_SIGMA), " = ", format_bytes(s, sizeof(s), sum_size));
-                b = strjoina(special_glyph(SPECIAL_GLYPH_SIGMA), " = ", format_bytes(s, sizeof(s), sum_padding));
+                a = strjoina(special_glyph(SPECIAL_GLYPH_SIGMA), " = ", FORMAT_BYTES(sum_size));
+                b = strjoina(special_glyph(SPECIAL_GLYPH_SIGMA), " = ", FORMAT_BYTES(sum_padding));
 
                 r = table_add_many(
                                 t,
@@ -2071,11 +2525,32 @@
                                 TABLE_EMPTY,
                                 TABLE_EMPTY,
                                 TABLE_STRING, b,
+                                TABLE_EMPTY,
+                                TABLE_EMPTY,
+                                TABLE_EMPTY,
                                 TABLE_EMPTY);
                 if (r < 0)
                         return table_log_add_error(r);
         }
 
+        if (!has_roothash) {
+                r = table_hide_column_from_display(t, roothash_col);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set columns to display: %m");
+        }
+
+        if (!has_dropin_files) {
+                r = table_hide_column_from_display(t, dropin_files_col);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set columns to display: %m");
+        }
+
+        if (!has_split_path) {
+                r = table_hide_column_from_display(t, split_path_col);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set columns to display: %m");
+        }
+
         return table_print_with_pager(t, arg_json_format_flags, arg_pager_flags, arg_legend);
 }
 
@@ -2123,16 +2598,13 @@
 
 static int partition_hint(const Partition *p, const char *node, char **ret) {
         _cleanup_free_ char *buf = NULL;
-        char ids[ID128_UUID_STRING_MAX];
         const char *label;
         sd_id128_t id;
 
         /* Tries really hard to find a suitable description for this partition */
 
-        if (p->definition_path) {
-                buf = strdup(basename(p->definition_path));
-                goto done;
-        }
+        if (p->definition_path)
+                return path_extract_filename(p->definition_path, ret);
 
         label = partition_label(p);
         if (!isempty(label)) {
@@ -2145,14 +2617,14 @@
                 goto done;
         }
 
-        if (!sd_id128_is_null(p->new_uuid))
+        if (p->new_uuid_is_set)
                 id = p->new_uuid;
         else if (!sd_id128_is_null(p->current_uuid))
                 id = p->current_uuid;
         else
-                id = p->type_uuid;
+                id = p->type.uuid;
 
-        buf = strdup(id128_to_uuid_string(id, ids));
+        buf = strdup(SD_ID128_TO_UUID_STRING(id));
 
 done:
         if (!buf)
@@ -2162,10 +2634,10 @@
         return 0;
 }
 
-static int context_dump_partition_bar(Context *context, const char *node) {
+static int context_dump_partition_bar(Context *context) {
         _cleanup_free_ Partition **bar = NULL;
         _cleanup_free_ size_t *start_array = NULL;
-        Partition *p, *last = NULL;
+        Partition *last = NULL;
         bool z = false;
         size_t c, j = 0;
 
@@ -2238,7 +2710,7 @@
                         } else if (i == context->n_partitions - j) {
                                 _cleanup_free_ char *hint = NULL;
 
-                                (void) partition_hint(p, node, &hint);
+                                (void) partition_hint(p, context->node, &hint);
 
                                 if (streq_ptr(line[start_array[j-1]], special_glyph(SPECIAL_GLYPH_TREE_VERTICAL)))
                                         d = strjoin(special_glyph(SPECIAL_GLYPH_TREE_BRANCH), " ", strna(hint));
@@ -2275,8 +2747,56 @@
         return 0;
 }
 
+static bool context_has_roothash(Context *context) {
+        LIST_FOREACH(partitions, p, context->partitions)
+                if (p->roothash)
+                        return true;
+
+        return false;
+}
+
+static int context_dump(Context *context, bool late) {
+        int r;
+
+        assert(context);
+
+        if (arg_pretty == 0 && FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
+                return 0;
+
+        /* If we're outputting JSON, only dump after doing all operations so we can include the roothashes
+         * in the output.  */
+        if (!late && !FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
+                return 0;
+
+        /* If we're not outputting JSON, only dump again after doing all operations if there are any
+         * roothashes that we need to communicate to the user. */
+        if (late && FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF) && !context_has_roothash(context))
+                return 0;
+
+        r = context_dump_partitions(context);
+        if (r < 0)
+                return r;
+
+        /* Make sure we only write the partition bar once, even if we're writing the partition table twice to
+         * communicate roothashes. */
+        if (FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF) && !late) {
+                putc('\n', stdout);
+
+                r = context_dump_partition_bar(context);
+                if (r < 0)
+                        return r;
+
+                putc('\n', stdout);
+        }
+
+        fflush(stdout);
+
+        return 0;
+}
+
+
 static bool context_changed(const Context *context) {
-        Partition *p;
+        assert(context);
 
         LIST_FOREACH(partitions, p, context->partitions) {
                 if (p->dropped)
@@ -2384,7 +2904,7 @@
         if (S_ISBLK(st.st_mode)) {
                 uint64_t range[2], end;
 
-                range[0] = round_up_size(offset, 512);
+                range[0] = round_up_size(offset, context->sector_size);
 
                 if (offset > UINT64_MAX - size)
                         return -ERANGE;
@@ -2393,7 +2913,7 @@
                 if (end <= range[0])
                         return 0;
 
-                range[1] = round_down_size(end - range[0], 512);
+                range[1] = round_down_size(end - range[0], context->sector_size);
                 if (range[1] <= 0)
                         return 0;
 
@@ -2446,12 +2966,14 @@
 
 static int context_discard_gap_after(Context *context, Partition *p) {
         uint64_t gap, next = UINT64_MAX;
-        Partition *q;
         int r;
 
         assert(context);
         assert(!p || (p->offset != UINT64_MAX && p->new_size != UINT64_MAX));
 
+        if (!arg_discard)
+                return 0;
+
         if (p)
                 gap = p->offset + p->new_size;
         else
@@ -2503,8 +3025,7 @@
         return 0;
 }
 
-static int context_wipe_and_discard(Context *context, bool from_scratch) {
-        Partition *p;
+static int context_wipe_and_discard(Context *context) {
         int r;
 
         assert(context);
@@ -2518,11 +3039,14 @@
                 if (!p->allocated_to_area)
                         continue;
 
+                if (partition_defer(p))
+                        continue;
+
                 r = context_wipe_partition(context, p);
                 if (r < 0)
                         return r;
 
-                if (!from_scratch) {
+                if (!context->from_scratch) {
                         r = context_discard_partition(context, p);
                         if (r < 0)
                                 return r;
@@ -2533,7 +3057,7 @@
                 }
         }
 
-        if (!from_scratch) {
+        if (!context->from_scratch) {
                 r = context_discard_gap_after(context, NULL);
                 if (r < 0)
                         return r;
@@ -2542,70 +3066,265 @@
         return 0;
 }
 
-static int partition_encrypt(
-                Partition *p,
-                const char *node,
-                struct crypt_device **ret_cd,
-                char **ret_volume,
-                int *ret_fd) {
-#if HAVE_LIBCRYPTSETUP
-        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
-        _cleanup_(erase_and_freep) void *volume_key = NULL;
-        _cleanup_free_ char *dm_name = NULL, *vol = NULL;
-        char suuid[ID128_UUID_STRING_MAX];
-        size_t volume_key_size = 256 / 8;
-        sd_id128_t uuid;
+typedef struct {
+        LoopDevice *loop;
+        int fd;
+        char *path;
+        int whole_fd;
+} PartitionTarget;
+
+static int partition_target_fd(PartitionTarget *t) {
+        assert(t);
+        assert(t->loop || t->fd >= 0 || t->whole_fd >= 0);
+        return t->loop ? t->loop->fd : t->fd >= 0 ?  t->fd : t->whole_fd;
+}
+
+static const char* partition_target_path(PartitionTarget *t) {
+        assert(t);
+        assert(t->loop || t->path);
+        return t->loop ? t->loop->node : t->path;
+}
+
+static PartitionTarget *partition_target_free(PartitionTarget *t) {
+        if (!t)
+                return NULL;
+
+        loop_device_unref(t->loop);
+        safe_close(t->fd);
+        unlink_and_free(t->path);
+
+        return mfree(t);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(PartitionTarget*, partition_target_free);
+
+static int prepare_temporary_file(PartitionTarget *t, uint64_t size) {
+        _cleanup_(unlink_and_freep) char *temp = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        const char *vt;
         int r;
 
+        assert(t);
+
+        r = var_tmp_dir(&vt);
+        if (r < 0)
+                return log_error_errno(r, "Could not determine temporary directory: %m");
+
+        temp = path_join(vt, "repart-XXXXXX");
+        if (!temp)
+                return log_oom();
+
+        fd = mkostemp_safe(temp);
+        if (fd < 0)
+                return log_error_errno(fd, "Failed to create temporary file: %m");
+
+        if (ftruncate(fd, size) < 0)
+                return log_error_errno(errno, "Failed to truncate temporary file to %s: %m",
+                                        FORMAT_BYTES(size));
+
+        t->fd = TAKE_FD(fd);
+        t->path = TAKE_PTR(temp);
+
+        return 0;
+}
+
+static int partition_target_prepare(
+                Context *context,
+                Partition *p,
+                uint64_t size,
+                bool need_path,
+                PartitionTarget **ret) {
+
+        _cleanup_(partition_target_freep) PartitionTarget *t = NULL;
+        _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
+        int whole_fd, r;
+
+        assert(context);
+        assert(p);
+        assert(ret);
+
+        assert_se((whole_fd = fdisk_get_devfd(context->fdisk_context)) >= 0);
+
+        t = new(PartitionTarget, 1);
+        if (!t)
+                return log_oom();
+        *t = (PartitionTarget) {
+                .fd = -EBADF,
+                .whole_fd = -EBADF,
+        };
+
+        if (!need_path) {
+                if (lseek(whole_fd, p->offset, SEEK_SET) == (off_t) -1)
+                        return log_error_errno(errno, "Failed to seek to partition offset: %m");
+
+                t->whole_fd = whole_fd;
+                *ret = TAKE_PTR(t);
+                return 0;
+        }
+
+        /* Loopback block devices are not only useful to turn regular files into block devices, but
+         * also to cut out sections of block devices into new block devices. */
+
+        r = loop_device_make(whole_fd, O_RDWR, p->offset, size, 0, 0, LOCK_EX, &d);
+        if (r < 0 && r != -ENOENT && !ERRNO_IS_PRIVILEGE(r))
+                return log_error_errno(r, "Failed to make loopback device of future partition %" PRIu64 ": %m", p->partno);
+        if (r >= 0) {
+                t->loop = TAKE_PTR(d);
+                *ret = TAKE_PTR(t);
+                return 0;
+        }
+
+        /* If we can't allocate a loop device, let's write to a regular file that we copy into the final
+         * image so we can run in containers and without needing root privileges. On filesystems with
+         * reflinking support, we can take advantage of this and just reflink the result into the image.
+         */
+
+        log_debug_errno(r, "No access to loop devices, falling back to a regular file");
+
+        r = prepare_temporary_file(t, size);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(t);
+
+        return 0;
+}
+
+static int partition_target_grow(PartitionTarget *t, uint64_t size) {
+        int r;
+
+        assert(t);
+
+        if (t->loop) {
+                r = loop_device_refresh_size(t->loop, UINT64_MAX, size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to refresh loopback device size: %m");
+        } else if (t->fd >= 0) {
+                if (ftruncate(t->fd, size) < 0)
+                        return log_error_errno(errno, "Failed to grow '%s' to %s by truncation: %m",
+                                               t->path, FORMAT_BYTES(size));
+        }
+
+        return 0;
+}
+
+static int partition_target_sync(Context *context, Partition *p, PartitionTarget *t) {
+        int whole_fd, r;
+
+        assert(context);
+        assert(p);
+        assert(t);
+
+        assert_se((whole_fd = fdisk_get_devfd(context->fdisk_context)) >= 0);
+
+        if (t->loop) {
+                r = loop_device_sync(t->loop);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to sync loopback device: %m");
+        } else if (t->fd >= 0) {
+                struct stat st;
+
+                if (lseek(whole_fd, p->offset, SEEK_SET) == (off_t) -1)
+                        return log_error_errno(errno, "Failed to seek to partition offset: %m");
+
+                if (lseek(t->fd, 0, SEEK_SET) == (off_t) -1)
+                        return log_error_errno(errno, "Failed to seek to start of temporary file: %m");
+
+                if (fstat(t->fd, &st) < 0)
+                        return log_error_errno(errno, "Failed to stat temporary file: %m");
+
+                if (st.st_size > (off_t) p->new_size)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOSPC),
+                                               "Partition %" PRIu64 "'s contents (%s) don't fit in the partition (%s)",
+                                               p->partno, FORMAT_BYTES(st.st_size), FORMAT_BYTES(p->new_size));
+
+                r = copy_bytes(t->fd, whole_fd, UINT64_MAX, COPY_REFLINK|COPY_HOLES|COPY_FSYNC);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to copy bytes to partition: %m");
+        } else {
+                if (fsync(t->whole_fd) < 0)
+                        return log_error_errno(errno, "Failed to sync changes: %m");
+        }
+
+        return 0;
+}
+
+static int partition_encrypt(Context *context, Partition *p, const char *node) {
+#if HAVE_LIBCRYPTSETUP && HAVE_CRYPT_SET_DATA_OFFSET && HAVE_CRYPT_REENCRYPT_INIT_BY_PASSPHRASE && HAVE_CRYPT_REENCRYPT
+        struct crypt_params_luks2 luks_params = {
+                .label = strempty(ASSERT_PTR(p)->new_label),
+                .sector_size = ASSERT_PTR(context)->sector_size,
+                .data_device = node,
+        };
+        struct crypt_params_reencrypt reencrypt_params = {
+                .mode = CRYPT_REENCRYPT_ENCRYPT,
+                .direction = CRYPT_REENCRYPT_BACKWARD,
+                .resilience = "datashift",
+                .data_shift = LUKS2_METADATA_SIZE / 512,
+                .luks2 = &luks_params,
+                .flags = CRYPT_REENCRYPT_INITIALIZE_ONLY|CRYPT_REENCRYPT_MOVE_FIRST_SEGMENT,
+        };
+        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
+        _cleanup_(erase_and_freep) char *base64_encoded = NULL;
+        _cleanup_fclose_ FILE *h = NULL;
+        _cleanup_free_ char *hp = NULL;
+        const char *passphrase = NULL;
+        size_t passphrase_size = 0;
+        const char *vt;
+        int r;
+
+        assert(context);
         assert(p);
         assert(p->encrypt != ENCRYPT_OFF);
 
-        log_debug("Encryption mode for partition %" PRIu64 ": %s", p->partno, encrypt_mode_to_string(p->encrypt));
-
         r = dlopen_cryptsetup();
         if (r < 0)
                 return log_error_errno(r, "libcryptsetup not found, cannot encrypt: %m");
 
-        if (asprintf(&dm_name, "luks-repart-%08" PRIx64, random_u64()) < 0)
-                return log_oom();
-
-        if (ret_volume) {
-                vol = path_join("/dev/mapper/", dm_name);
-                if (!vol)
-                        return log_oom();
-        }
-
-        r = derive_uuid(p->new_uuid, "luks-uuid", &uuid);
-        if (r < 0)
-                return r;
-
         log_info("Encrypting future partition %" PRIu64 "...", p->partno);
 
-        volume_key = malloc(volume_key_size);
-        if (!volume_key)
-                return log_oom();
-
-        r = genuine_random_bytes(volume_key, volume_key_size, RANDOM_BLOCK);
+        r = var_tmp_dir(&vt);
         if (r < 0)
-                return log_error_errno(r, "Failed to generate volume key: %m");
+                return log_error_errno(r, "Failed to determine temporary files directory: %m");
 
-        r = sym_crypt_init(&cd, node);
+        r = fopen_temporary_child(vt, &h, &hp);
         if (r < 0)
-                return log_error_errno(r, "Failed to allocate libcryptsetup context: %m");
+                return log_error_errno(r, "Failed to create temporary LUKS header file: %m");
+
+        /* Weird cryptsetup requirement which requires the header file to be the size of at least one sector. */
+        r = ftruncate(fileno(h), context->sector_size);
+        if (r < 0)
+                return log_error_errno(r, "Failed to grow temporary LUKS header file: %m");
+
+        r = sym_crypt_init(&cd, hp);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate libcryptsetup context for %s: %m", hp);
 
         cryptsetup_enable_logging(cd);
 
+        /* Disable kernel keyring usage by libcryptsetup as a workaround for
+         * https://gitlab.com/cryptsetup/cryptsetup/-/merge_requests/273. This makes sure that we can do
+         * offline encryption even when repart is running in a container. */
+        r = sym_crypt_volume_key_keyring(cd, false);
+        if (r < 0)
+                return log_error_errno(r, "Failed to disable kernel keyring: %m");
+
+        r = sym_crypt_metadata_locking(cd, false);
+        if (r < 0)
+                return log_error_errno(r, "Failed to disable metadata locking: %m");
+
+        r = sym_crypt_set_data_offset(cd, LUKS2_METADATA_SIZE / 512);
+        if (r < 0)
+                return log_error_errno(r, "Failed to set data offset: %m");
+
         r = sym_crypt_format(cd,
                          CRYPT_LUKS2,
                          "aes",
                          "xts-plain64",
-                         id128_to_uuid_string(uuid, suuid),
-                         volume_key,
-                         volume_key_size,
-                         &(struct crypt_params_luks2) {
-                                 .label = strempty(p->new_label),
-                                 .sector_size = 512U,
-                         });
+                         SD_ID128_TO_UUID_STRING(p->luks_uuid),
+                         NULL,
+                         VOLUME_KEY_SIZE,
+                         &luks_params);
         if (r < 0)
                 return log_error_errno(r, "Failed to LUKS2 format future partition: %m");
 
@@ -2613,30 +3332,55 @@
                 r = sym_crypt_keyslot_add_by_volume_key(
                                 cd,
                                 CRYPT_ANY_SLOT,
-                                volume_key,
-                                volume_key_size,
+                                NULL,
+                                VOLUME_KEY_SIZE,
                                 strempty(arg_key),
                                 arg_key_size);
                 if (r < 0)
                         return log_error_errno(r, "Failed to add LUKS2 key: %m");
+
+                passphrase = strempty(arg_key);
+                passphrase_size = arg_key_size;
         }
 
         if (IN_SET(p->encrypt, ENCRYPT_TPM2, ENCRYPT_KEY_FILE_TPM2)) {
 #if HAVE_TPM2
-                _cleanup_(erase_and_freep) char *base64_encoded = NULL;
                 _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
                 _cleanup_(erase_and_freep) void *secret = NULL;
+                _cleanup_free_ void *pubkey = NULL;
                 _cleanup_free_ void *blob = NULL, *hash = NULL;
-                size_t secret_size, blob_size, hash_size;
+                size_t secret_size, blob_size, hash_size, pubkey_size = 0;
+                ssize_t base64_encoded_size;
+                uint16_t pcr_bank, primary_alg;
                 int keyslot;
 
-                r = tpm2_seal(arg_tpm2_device, arg_tpm2_pcr_mask, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size);
+                if (arg_tpm2_public_key_pcr_mask != 0) {
+                        r = tpm2_load_pcr_public_key(arg_tpm2_public_key, &pubkey, &pubkey_size);
+                        if (r < 0) {
+                                if (arg_tpm2_public_key || r != -ENOENT)
+                                        return log_error_errno(r, "Failed read TPM PCR public key: %m");
+
+                                log_debug_errno(r, "Failed to read TPM2 PCR public key, proceeding without: %m");
+                                arg_tpm2_public_key_pcr_mask = 0;
+                        }
+                }
+
+                r = tpm2_seal(arg_tpm2_device,
+                              arg_tpm2_pcr_mask,
+                              pubkey, pubkey_size,
+                              arg_tpm2_public_key_pcr_mask,
+                              /* pin= */ NULL,
+                              &secret, &secret_size,
+                              &blob, &blob_size,
+                              &hash, &hash_size,
+                              &pcr_bank,
+                              &primary_alg);
                 if (r < 0)
                         return log_error_errno(r, "Failed to seal to TPM2: %m");
 
-                r = base64mem(secret, secret_size, &base64_encoded);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to base64 encode secret key: %m");
+                base64_encoded_size = base64mem(secret, secret_size, &base64_encoded);
+                if (base64_encoded_size < 0)
+                        return log_error_errno(base64_encoded_size, "Failed to base64 encode secret key: %m");
 
                 r = cryptsetup_set_minimal_pbkdf(cd);
                 if (r < 0)
@@ -2645,95 +3389,325 @@
                 keyslot = sym_crypt_keyslot_add_by_volume_key(
                                 cd,
                                 CRYPT_ANY_SLOT,
-                                volume_key,
-                                volume_key_size,
+                                NULL,
+                                VOLUME_KEY_SIZE,
                                 base64_encoded,
-                                strlen(base64_encoded));
+                                base64_encoded_size);
                 if (keyslot < 0)
-                        return log_error_errno(keyslot, "Failed to add new TPM2 key to %s: %m", node);
+                        return log_error_errno(keyslot, "Failed to add new TPM2 key: %m");
 
-                r = tpm2_make_luks2_json(keyslot, arg_tpm2_pcr_mask, blob, blob_size, hash, hash_size, &v);
+                r = tpm2_make_luks2_json(
+                                keyslot,
+                                arg_tpm2_pcr_mask,
+                                pcr_bank,
+                                pubkey, pubkey_size,
+                                arg_tpm2_public_key_pcr_mask,
+                                primary_alg,
+                                blob, blob_size,
+                                hash, hash_size,
+                                NULL, 0, /* no salt because tpm2_seal has no pin */
+                                0,
+                                &v);
                 if (r < 0)
                         return log_error_errno(r, "Failed to prepare TPM2 JSON token object: %m");
 
                 r = cryptsetup_add_token_json(cd, v);
                 if (r < 0)
                         return log_error_errno(r, "Failed to add TPM2 JSON token to LUKS2 header: %m");
+
+                passphrase = base64_encoded;
+                passphrase_size = strlen(base64_encoded);
 #else
                 return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                        "Support for TPM2 enrollment not enabled.");
 #endif
         }
 
-        r = sym_crypt_activate_by_volume_key(
+        r = sym_crypt_reencrypt_init_by_passphrase(
                         cd,
-                        dm_name,
-                        volume_key,
-                        volume_key_size,
-                        arg_discard ? CRYPT_ACTIVATE_ALLOW_DISCARDS : 0);
+                        NULL,
+                        passphrase,
+                        passphrase_size,
+                        CRYPT_ANY_SLOT,
+                        0,
+                        sym_crypt_get_cipher(cd),
+                        sym_crypt_get_cipher_mode(cd),
+                        &reencrypt_params);
         if (r < 0)
-                return log_error_errno(r, "Failed to activate LUKS superblock: %m");
+                return log_error_errno(r, "Failed to prepare for reencryption: %m");
+
+        /* crypt_reencrypt_init_by_passphrase() doesn't actually put the LUKS header at the front, we have
+         * to do that ourselves. */
+
+        sym_crypt_free(cd);
+        cd = NULL;
+
+        r = sym_crypt_init(&cd, node);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate libcryptsetup context for %s: %m", node);
+
+        r = sym_crypt_header_restore(cd, CRYPT_LUKS2, hp);
+        if (r < 0)
+                return log_error_errno(r, "Failed to place new LUKS header at head of %s: %m", node);
+
+        reencrypt_params.flags &= ~CRYPT_REENCRYPT_INITIALIZE_ONLY;
+
+        r = sym_crypt_reencrypt_init_by_passphrase(
+                        cd,
+                        NULL,
+                        passphrase,
+                        passphrase_size,
+                        CRYPT_ANY_SLOT,
+                        0,
+                        NULL,
+                        NULL,
+                        &reencrypt_params);
+        if (r < 0)
+                return log_error_errno(r, "Failed to load reencryption context: %m");
+
+        r = sym_crypt_reencrypt(cd, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to encrypt %s: %m", node);
 
         log_info("Successfully encrypted future partition %" PRIu64 ".", p->partno);
 
-        if (ret_fd) {
-                _cleanup_close_ int dev_fd = -1;
-
-                dev_fd = open(vol, O_RDWR|O_CLOEXEC|O_NOCTTY);
-                if (dev_fd < 0)
-                        return log_error_errno(errno, "Failed to open LUKS volume '%s': %m", vol);
-
-                *ret_fd = TAKE_FD(dev_fd);
-        }
-
-        if (ret_cd)
-                *ret_cd = TAKE_PTR(cd);
-        if (ret_volume)
-                *ret_volume = TAKE_PTR(vol);
-
         return 0;
 #else
-        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "libcryptsetup is not supported, cannot encrypt: %m");
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                               "libcryptsetup is not supported or is missing required symbols, cannot encrypt: %m");
 #endif
 }
 
-static int deactivate_luks(struct crypt_device *cd, const char *node) {
+static int partition_format_verity_hash(
+                Context *context,
+                Partition *p,
+                const char *data_node) {
+
 #if HAVE_LIBCRYPTSETUP
+        Partition *dp;
+        _cleanup_(partition_target_freep) PartitionTarget *t = NULL;
+        _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
+        _cleanup_free_ uint8_t *rh = NULL;
+        size_t rhs;
         int r;
 
-        if (!cd)
+        assert(context);
+        assert(p);
+        assert(data_node);
+
+        if (p->dropped)
                 return 0;
 
-        assert(node);
+        if (PARTITION_EXISTS(p)) /* Never format existing partitions */
+                return 0;
 
-        /* udev or so might access out block device in the background while we are done. Let's hence force
-         * detach the volume. We sync'ed before, hence this should be safe. */
+        if (p->verity != VERITY_HASH)
+                return 0;
 
-        r = sym_crypt_deactivate_by_name(cd, basename(node), CRYPT_DEACTIVATE_FORCE);
+        if (partition_defer(p))
+                return 0;
+
+        assert_se(dp = p->siblings[VERITY_DATA]);
+        assert(!dp->dropped);
+
+        r = dlopen_cryptsetup();
         if (r < 0)
-                return log_error_errno(r, "Failed to deactivate LUKS device: %m");
+                return log_error_errno(r, "libcryptsetup not found, cannot setup verity: %m");
 
-        return 1;
-#else
+        r = partition_target_prepare(context, p, p->new_size, /*need_path=*/ true, &t);
+        if (r < 0)
+                return r;
+
+        r = sym_crypt_init(&cd, partition_target_path(t));
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate libcryptsetup context: %m");
+
+        cryptsetup_enable_logging(cd);
+
+        r = sym_crypt_format(
+                        cd, CRYPT_VERITY, NULL, NULL, NULL, NULL, 0,
+                        &(struct crypt_params_verity){
+                                .data_device = data_node,
+                                .flags = CRYPT_VERITY_CREATE_HASH,
+                                .hash_name = "sha256",
+                                .hash_type = 1,
+                                .data_block_size = context->sector_size,
+                                .hash_block_size = context->sector_size,
+                                .salt_size = 32,
+                        });
+        if (r < 0) {
+                /* libcryptsetup reports non-descriptive EIO errors for every I/O failure. Luckily, it
+                 * doesn't clobber errno so let's check for ENOSPC so we can report a better error if the
+                 * partition is too small. */
+                if (r == -EIO && errno == ENOSPC)
+                        return log_error_errno(errno,
+                                               "Verity hash data does not fit in partition %"PRIu64" with size %s",
+                                               p->partno, FORMAT_BYTES(p->new_size));
+
+                return log_error_errno(r, "Failed to setup verity hash data: %m");
+        }
+
+        r = partition_target_sync(context, p, t);
+        if (r < 0)
+                return r;
+
+        r = sym_crypt_get_volume_key_size(cd);
+        if (r < 0)
+                return log_error_errno(r, "Failed to determine verity root hash size: %m");
+        rhs = (size_t) r;
+
+        rh = malloc(rhs);
+        if (!rh)
+                return log_oom();
+
+        r = sym_crypt_volume_key_get(cd, CRYPT_ANY_SLOT, (char *) rh, &rhs, NULL, 0);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get verity root hash: %m");
+
+        assert(rhs >= sizeof(sd_id128_t) * 2);
+
+        if (!dp->new_uuid_is_set) {
+                memcpy_safe(dp->new_uuid.bytes, rh, sizeof(sd_id128_t));
+                dp->new_uuid_is_set = true;
+        }
+
+        if (!p->new_uuid_is_set) {
+                memcpy_safe(p->new_uuid.bytes, rh + rhs - sizeof(sd_id128_t), sizeof(sd_id128_t));
+                p->new_uuid_is_set = true;
+        }
+
+        p->roothash = TAKE_PTR(rh);
+        p->roothash_size = rhs;
+
         return 0;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "libcryptsetup is not supported, cannot setup verity hashes: %m");
 #endif
 }
 
+static int sign_verity_roothash(
+                const uint8_t *roothash,
+                size_t roothash_size,
+                uint8_t **ret_signature,
+                size_t *ret_signature_size) {
+
+#if HAVE_OPENSSL
+        _cleanup_(BIO_freep) BIO *rb = NULL;
+        _cleanup_(PKCS7_freep) PKCS7 *p7 = NULL;
+        _cleanup_free_ char *hex = NULL;
+        _cleanup_free_ uint8_t *sig = NULL;
+        int sigsz;
+
+        assert(roothash);
+        assert(roothash_size > 0);
+        assert(ret_signature);
+        assert(ret_signature_size);
+
+        hex = hexmem(roothash, roothash_size);
+        if (!hex)
+                return log_oom();
+
+        rb = BIO_new_mem_buf(hex, -1);
+        if (!rb)
+                return log_oom();
+
+        p7 = PKCS7_sign(arg_certificate, arg_private_key, NULL, rb, PKCS7_DETACHED|PKCS7_NOATTR|PKCS7_BINARY);
+        if (!p7)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to calculate PKCS7 signature: %s",
+                                       ERR_error_string(ERR_get_error(), NULL));
+
+        sigsz = i2d_PKCS7(p7, &sig);
+        if (sigsz < 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to convert PKCS7 signature to DER: %s",
+                                       ERR_error_string(ERR_get_error(), NULL));
+
+        *ret_signature = TAKE_PTR(sig);
+        *ret_signature_size = sigsz;
+
+        return 0;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "openssl is not supported, cannot setup verity signature: %m");
+#endif
+}
+
+static int partition_format_verity_sig(Context *context, Partition *p) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        _cleanup_free_ uint8_t *sig = NULL;
+        _cleanup_free_ char *text = NULL;
+        Partition *hp;
+        uint8_t fp[X509_FINGERPRINT_SIZE];
+        size_t sigsz = 0; /* avoid false maybe-uninitialized warning */
+        int whole_fd, r;
+
+        assert(p->verity == VERITY_SIG);
+
+        if (p->dropped)
+                return 0;
+
+        if (PARTITION_EXISTS(p))
+                return 0;
+
+        if (partition_defer(p))
+                return 0;
+
+        assert_se(hp = p->siblings[VERITY_HASH]);
+        assert(!hp->dropped);
+
+        assert(arg_certificate);
+
+        assert_se((whole_fd = fdisk_get_devfd(context->fdisk_context)) >= 0);
+
+        r = sign_verity_roothash(hp->roothash, hp->roothash_size, &sig, &sigsz);
+        if (r < 0)
+                return r;
+
+        r = x509_fingerprint(arg_certificate, fp);
+        if (r < 0)
+                return log_error_errno(r, "Unable to calculate X509 certificate fingerprint: %m");
+
+        r = json_build(&v,
+                        JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR("rootHash", JSON_BUILD_HEX(hp->roothash, hp->roothash_size)),
+                                JSON_BUILD_PAIR(
+                                        "certificateFingerprint",
+                                        JSON_BUILD_HEX(fp, sizeof(fp))
+                                ),
+                                JSON_BUILD_PAIR("signature", JSON_BUILD_BASE64(sig, sigsz))
+                        )
+        );
+        if (r < 0)
+                return log_error_errno(r, "Failed to build JSON object: %m");
+
+        r = json_variant_format(v, 0, &text);
+        if (r < 0)
+                return log_error_errno(r, "Failed to format JSON object: %m");
+
+        r = strgrowpad0(&text, p->new_size);
+        if (r < 0)
+                return log_error_errno(r, "Failed to pad string to %s", FORMAT_BYTES(p->new_size));
+
+        if (lseek(whole_fd, p->offset, SEEK_SET) == (off_t) -1)
+                return log_error_errno(errno, "Failed to seek to partition offset: %m");
+
+        r = loop_write(whole_fd, text, p->new_size, /*do_poll=*/ false);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write verity signature to partition: %m");
+
+        if (fsync(whole_fd) < 0)
+                return log_error_errno(errno, "Failed to synchronize verity signature JSON: %m");
+
+        return 0;
+}
+
 static int context_copy_blocks(Context *context) {
-        Partition *p;
-        int whole_fd = -1, r;
+        int r;
 
         assert(context);
 
         /* Copy in file systems on the block level */
 
         LIST_FOREACH(partitions, p, context->partitions) {
-                _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
-                _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
-                _cleanup_free_ char *encrypted = NULL;
-                _cleanup_close_ int encrypted_dev_fd = -1;
-                char buf[FORMAT_BYTES_MAX];
-                int target_fd;
+                _cleanup_(partition_target_freep) PartitionTarget *t = NULL;
 
                 if (p->copy_blocks_fd < 0)
                         continue;
@@ -2744,78 +3718,65 @@
                 if (PARTITION_EXISTS(p)) /* Never copy over existing partitions */
                         continue;
 
+                if (partition_defer(p))
+                        continue;
+
                 assert(p->new_size != UINT64_MAX);
                 assert(p->copy_blocks_size != UINT64_MAX);
-                assert(p->new_size >= p->copy_blocks_size);
+                assert(p->new_size >= p->copy_blocks_size + (p->encrypt != ENCRYPT_OFF ? LUKS2_METADATA_KEEP_FREE : 0));
 
-                if (whole_fd < 0)
-                        assert_se((whole_fd = fdisk_get_devfd(context->fdisk_context)) >= 0);
+                r = partition_target_prepare(context, p, p->new_size,
+                                             /*need_path=*/ p->encrypt != ENCRYPT_OFF || p->siblings[VERITY_HASH],
+                                             &t);
+                if (r < 0)
+                        return r;
 
-                if (p->encrypt != ENCRYPT_OFF) {
-                        r = loop_device_make(whole_fd, O_RDWR, p->offset, p->new_size, 0, &d);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to make loopback device of future partition %" PRIu64 ": %m", p->partno);
+                log_info("Copying in '%s' (%s) on block level into future partition %" PRIu64 ".",
+                         p->copy_blocks_path, FORMAT_BYTES(p->copy_blocks_size), p->partno);
 
-                        r = loop_device_flock(d, LOCK_EX);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to lock loopback device: %m");
-
-                        r = partition_encrypt(p, d->node, &cd, &encrypted, &encrypted_dev_fd);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to encrypt device: %m");
-
-                        if (flock(encrypted_dev_fd, LOCK_EX) < 0)
-                                return log_error_errno(errno, "Failed to lock LUKS device: %m");
-
-                        target_fd = encrypted_dev_fd;
-                }  else {
-                        if (lseek(whole_fd, p->offset, SEEK_SET) == (off_t) -1)
-                                return log_error_errno(errno, "Failed to seek to partition offset: %m");
-
-                        target_fd = whole_fd;
-                }
-
-                log_info("Copying in '%s' (%s) on block level into future partition %" PRIu64 ".", p->copy_blocks_path, format_bytes(buf, sizeof(buf), p->copy_blocks_size), p->partno);
-
-                r = copy_bytes_full(p->copy_blocks_fd, target_fd, p->copy_blocks_size, 0, NULL, NULL, NULL, NULL);
+                r = copy_bytes(p->copy_blocks_fd, partition_target_fd(t), p->copy_blocks_size, COPY_REFLINK);
                 if (r < 0)
                         return log_error_errno(r, "Failed to copy in data from '%s': %m", p->copy_blocks_path);
 
-                if (fsync(target_fd) < 0)
-                        return log_error_errno(errno, "Failed to synchronize copied data blocks: %m");
-
                 if (p->encrypt != ENCRYPT_OFF) {
-                        encrypted_dev_fd = safe_close(encrypted_dev_fd);
-
-                        r = deactivate_luks(cd, encrypted);
+                        r = partition_encrypt(context, p, partition_target_path(t));
                         if (r < 0)
                                 return r;
-
-                        sym_crypt_free(cd);
-                        cd = NULL;
-
-                        r = loop_device_sync(d);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to sync loopback device: %m");
                 }
 
+                r = partition_target_sync(context, p, t);
+                if (r < 0)
+                        return r;
+
                 log_info("Copying in of '%s' on block level completed.", p->copy_blocks_path);
+
+                if (p->siblings[VERITY_HASH]) {
+                        r = partition_format_verity_hash(context, p->siblings[VERITY_HASH],
+                                                         partition_target_path(t));
+                        if (r < 0)
+                                return r;
+                }
+
+                if (p->siblings[VERITY_SIG]) {
+                        r = partition_format_verity_sig(context, p->siblings[VERITY_SIG]);
+                        if (r < 0)
+                                return r;
+                }
         }
 
         return 0;
 }
 
-static int do_copy_files(Partition *p, const char *fs) {
-        char **source, **target;
+static int do_copy_files(Partition *p, const char *root, const Set *denylist) {
         int r;
 
         assert(p);
-        assert(fs);
+        assert(root);
 
         STRV_FOREACH_PAIR(source, target, p->copy_files) {
-                _cleanup_close_ int sfd = -1, pfd = -1, tfd = -1;
+                _cleanup_close_ int sfd = -EBADF, pfd = -EBADF, tfd = -EBADF;
 
-                sfd = chase_symlinks_and_open(*source, arg_root, CHASE_PREFIX_ROOT|CHASE_WARN, O_CLOEXEC|O_NOCTTY, NULL);
+                sfd = chase_symlinks_and_open(*source, arg_root, CHASE_PREFIX_ROOT, O_CLOEXEC|O_NOCTTY, NULL);
                 if (sfd < 0)
                         return log_error_errno(sfd, "Failed to open source file '%s%s': %m", strempty(arg_root), *source);
 
@@ -2825,7 +3786,7 @@
                                 return log_error_errno(r, "Failed to check type of source file '%s': %m", *source);
 
                         /* We are looking at a directory */
-                        tfd = chase_symlinks_and_open(*target, fs, CHASE_PREFIX_ROOT|CHASE_WARN, O_RDONLY|O_DIRECTORY|O_CLOEXEC, NULL);
+                        tfd = chase_symlinks_and_open(*target, root, CHASE_PREFIX_ROOT, O_RDONLY|O_DIRECTORY|O_CLOEXEC, NULL);
                         if (tfd < 0) {
                                 _cleanup_free_ char *dn = NULL, *fn = NULL;
 
@@ -2840,27 +3801,34 @@
                                 if (r < 0)
                                         return log_error_errno(r, "Failed to extract directory from '%s': %m", *target);
 
-                                r = mkdir_p_root(fs, dn, UID_INVALID, GID_INVALID, 0755);
+                                r = mkdir_p_root(root, dn, UID_INVALID, GID_INVALID, 0755);
                                 if (r < 0)
                                         return log_error_errno(r, "Failed to create parent directory '%s': %m", dn);
 
-                                pfd = chase_symlinks_and_open(dn, fs, CHASE_PREFIX_ROOT|CHASE_WARN, O_RDONLY|O_DIRECTORY|O_CLOEXEC, NULL);
+                                pfd = chase_symlinks_and_open(dn, root, CHASE_PREFIX_ROOT, O_RDONLY|O_DIRECTORY|O_CLOEXEC, NULL);
                                 if (pfd < 0)
                                         return log_error_errno(pfd, "Failed to open parent directory of target: %m");
 
+                                /* Make sure everything is owned by the user running repart so that
+                                 * make_filesystem() can map the user running repart to "root" in a user
+                                 * namespace to have the files owned by root in the final image. */
+
                                 r = copy_tree_at(
                                                 sfd, ".",
                                                 pfd, fn,
                                                 UID_INVALID, GID_INVALID,
-                                                COPY_REFLINK|COPY_MERGE|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS);
+                                                COPY_REFLINK|COPY_HOLES|COPY_MERGE|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS|COPY_ALL_XATTRS|COPY_GRACEFUL_WARN,
+                                                denylist);
                         } else
                                 r = copy_tree_at(
                                                 sfd, ".",
                                                 tfd, ".",
                                                 UID_INVALID, GID_INVALID,
-                                                COPY_REFLINK|COPY_MERGE|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS);
+                                                COPY_REFLINK|COPY_HOLES|COPY_MERGE|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS|COPY_ALL_XATTRS|COPY_GRACEFUL_WARN,
+                                                denylist);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to copy '%s' to '%s%s': %m", *source, strempty(arg_root), *target);
+                                return log_error_errno(r, "Failed to copy '%s%s' to '%s%s': %m",
+                                                       strempty(arg_root), *source, strempty(root), *target);
                 } else {
                         _cleanup_free_ char *dn = NULL, *fn = NULL;
 
@@ -2877,11 +3845,11 @@
                         if (r < 0)
                                 return log_error_errno(r, "Failed to extract directory from '%s': %m", *target);
 
-                        r = mkdir_p_root(fs, dn, UID_INVALID, GID_INVALID, 0755);
+                        r = mkdir_p_root(root, dn, UID_INVALID, GID_INVALID, 0755);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to create parent directory: %m");
 
-                        pfd = chase_symlinks_and_open(dn, fs, CHASE_PREFIX_ROOT|CHASE_WARN, O_RDONLY|O_DIRECTORY|O_CLOEXEC, NULL);
+                        pfd = chase_symlinks_and_open(dn, root, CHASE_PREFIX_ROOT, O_RDONLY|O_DIRECTORY|O_CLOEXEC, NULL);
                         if (pfd < 0)
                                 return log_error_errno(pfd, "Failed to open parent directory of target: %m");
 
@@ -2889,11 +3857,11 @@
                         if (tfd < 0)
                                 return log_error_errno(errno, "Failed to create target file '%s': %m", *target);
 
-                        r = copy_bytes(sfd, tfd, UINT64_MAX, COPY_REFLINK|COPY_SIGINT);
+                        r = copy_bytes(sfd, tfd, UINT64_MAX, COPY_REFLINK|COPY_HOLES|COPY_SIGINT);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to copy '%s' to '%s%s': %m", *source, strempty(arg_root), *target);
 
-                        (void) copy_xattr(sfd, tfd);
+                        (void) copy_xattr(sfd, tfd, COPY_ALL_XATTRS);
                         (void) copy_access(sfd, tfd);
                         (void) copy_times(sfd, tfd, 0);
                 }
@@ -2902,16 +3870,15 @@
         return 0;
 }
 
-static int do_make_directories(Partition *p, const char *fs) {
-        char **d;
+static int do_make_directories(Partition *p, const char *root) {
         int r;
 
         assert(p);
-        assert(fs);
+        assert(root);
 
         STRV_FOREACH(d, p->make_directories) {
 
-                r = mkdir_p_root(fs, *d, UID_INVALID, GID_INVALID, 0755);
+                r = mkdir_p_root(root, *d, UID_INVALID, GID_INVALID, 0755);
                 if (r < 0)
                         return log_error_errno(r, "Failed to create directory '%s' in file system: %m", *d);
         }
@@ -2919,16 +3886,44 @@
         return 0;
 }
 
-static int partition_populate(Partition *p, const char *node) {
+static bool partition_needs_populate(Partition *p) {
+        assert(p);
+        return !strv_isempty(p->copy_files) || !strv_isempty(p->make_directories);
+}
+
+static int partition_populate_directory(Partition *p, const Set *denylist, char **ret) {
+        _cleanup_(rm_rf_physical_and_freep) char *root = NULL;
+        _cleanup_close_ int rfd = -EBADF;
+        int r;
+
+        assert(ret);
+
+        rfd = mkdtemp_open("/var/tmp/repart-XXXXXX", 0, &root);
+        if (rfd < 0)
+                return log_error_errno(rfd, "Failed to create temporary directory: %m");
+
+        if (fchmod(rfd, 0755) < 0)
+                return log_error_errno(errno, "Failed to change mode of temporary directory: %m");
+
+        r = do_copy_files(p, root, denylist);
+        if (r < 0)
+                return r;
+
+        r = do_make_directories(p, root);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(root);
+        return 0;
+}
+
+static int partition_populate_filesystem(Partition *p, const char *node, const Set *denylist) {
         int r;
 
         assert(p);
         assert(node);
 
-        if (strv_isempty(p->copy_files) && strv_isempty(p->make_directories))
-                return 0;
-
-        log_info("Populating partition %" PRIu64 " with files.", p->partno);
+        log_info("Populating %s filesystem with files.", p->format);
 
         /* We copy in a child process, since we have to mount the fs for that, and we don't want that fs to
          * appear in the host namespace. Hence we fork a child that has its own file system namespace and
@@ -2950,7 +3945,7 @@
                 if (mount_nofollow_verbose(LOG_ERR, node, fs, p->format, MS_NOATIME|MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL) < 0)
                         _exit(EXIT_FAILURE);
 
-                if (do_copy_files(p, fs) < 0)
+                if (do_copy_files(p, fs, denylist) < 0)
                         _exit(EXIT_FAILURE);
 
                 if (do_make_directories(p, fs) < 0)
@@ -2965,25 +3960,65 @@
                 _exit(EXIT_SUCCESS);
         }
 
-        log_info("Successfully populated partition %" PRIu64 " with files.", p->partno);
+        log_info("Successfully populated %s filesystem with files.", p->format);
+        return 0;
+}
+
+static int make_copy_files_denylist(Context *context, Set **ret) {
+        _cleanup_set_free_ Set *denylist = NULL;
+        int r;
+
+        assert(context);
+        assert(ret);
+
+        LIST_FOREACH(partitions, p, context->partitions) {
+                const char *sources = gpt_partition_type_mountpoint_nulstr(p->type);
+                if (!sources)
+                        continue;
+
+                NULSTR_FOREACH(s, sources) {
+                        _cleanup_free_ char *d = NULL;
+                        struct stat st;
+
+                        r = chase_symlinks_and_stat(s, arg_root, CHASE_PREFIX_ROOT, NULL, &st, NULL);
+                        if (r == -ENOENT)
+                                continue;
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to stat source file '%s%s': %m",
+                                                       strempty(arg_root), s);
+
+                        if (set_contains(denylist, &st))
+                                continue;
+
+                        d = memdup(&st, sizeof(st));
+                        if (!d)
+                                return log_oom();
+                        if (set_ensure_put(&denylist, &inode_hash_ops, d) < 0)
+                                return log_oom();
+
+                        TAKE_PTR(d);
+                }
+        }
+
+        *ret = TAKE_PTR(denylist);
         return 0;
 }
 
 static int context_mkfs(Context *context) {
-        Partition *p;
-        int fd = -1, r;
+        _cleanup_set_free_ Set *denylist = NULL;
+        int r;
 
         assert(context);
 
         /* Make a file system */
 
+        r = make_copy_files_denylist(context, &denylist);
+        if (r < 0)
+                return r;
+
         LIST_FOREACH(partitions, p, context->partitions) {
-                _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
-                _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
-                _cleanup_free_ char *encrypted = NULL;
-                _cleanup_close_ int encrypted_dev_fd = -1;
-                const char *fsdev;
-                sd_id128_t fs_uuid;
+                _cleanup_(rm_rf_physical_and_freep) char *root = NULL;
+                _cleanup_(partition_target_freep) PartitionTarget *t = NULL;
 
                 if (p->dropped)
                         continue;
@@ -2994,101 +4029,159 @@
                 if (!p->format)
                         continue;
 
+                /* Minimized partitions will use the copy blocks logic so let's make sure to skip those here. */
+                if (p->copy_blocks_fd >= 0)
+                        continue;
+
+                if (partition_defer(p))
+                        continue;
+
                 assert(p->offset != UINT64_MAX);
                 assert(p->new_size != UINT64_MAX);
+                assert(p->new_size >= (p->encrypt != ENCRYPT_OFF ? LUKS2_METADATA_KEEP_FREE : 0));
 
-                if (fd < 0)
-                        assert_se((fd = fdisk_get_devfd(context->fdisk_context)) >= 0);
-
-                /* Loopback block devices are not only useful to turn regular files into block devices, but
-                 * also to cut out sections of block devices into new block devices. */
-
-                r = loop_device_make(fd, O_RDWR, p->offset, p->new_size, 0, &d);
+                /* If we're doing encryption, we make sure we keep free space at the end which is required
+                 * for cryptsetup's offline encryption. */
+                r = partition_target_prepare(context, p,
+                                             p->new_size - (p->encrypt != ENCRYPT_OFF ? LUKS2_METADATA_KEEP_FREE : 0),
+                                             /*need_path=*/ true,
+                                             &t);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to make loopback device of future partition %" PRIu64 ": %m", p->partno);
-
-                r = loop_device_flock(d, LOCK_EX);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to lock loopback device: %m");
-
-                if (p->encrypt != ENCRYPT_OFF) {
-                        r = partition_encrypt(p, d->node, &cd, &encrypted, &encrypted_dev_fd);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to encrypt device: %m");
-
-                        if (flock(encrypted_dev_fd, LOCK_EX) < 0)
-                                return log_error_errno(errno, "Failed to lock LUKS device: %m");
-
-                        fsdev = encrypted;
-                } else
-                        fsdev = d->node;
+                        return r;
 
                 log_info("Formatting future partition %" PRIu64 ".", p->partno);
 
-                /* Calculate the UUID for the file system as HMAC-SHA256 of the string "file-system-uuid",
-                 * keyed off the partition UUID. */
-                r = derive_uuid(p->new_uuid, "file-system-uuid", &fs_uuid);
+                /* If we're not writing to a loop device or if we're populating a read-only filesystem, we
+                 * have to populate using the filesystem's mkfs's --root (or equivalent) option. To do that,
+                 * we need to set up the final directory tree beforehand. */
+
+                if (partition_needs_populate(p) && (!t->loop || fstype_is_ro(p->format))) {
+                        if (!mkfs_supports_root_option(p->format))
+                                return log_error_errno(SYNTHETIC_ERRNO(ENODEV),
+                                                        "Loop device access is required to populate %s filesystems.",
+                                                        p->format);
+
+                        r = partition_populate_directory(p, denylist, &root);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = make_filesystem(partition_target_path(t), p->format, strempty(p->new_label), root,
+                                    p->fs_uuid, arg_discard, context->sector_size, NULL);
                 if (r < 0)
                         return r;
 
-                r = make_filesystem(fsdev, p->format, strempty(p->new_label), fs_uuid, arg_discard);
-                if (r < 0) {
-                        encrypted_dev_fd = safe_close(encrypted_dev_fd);
-                        (void) deactivate_luks(cd, encrypted);
-                        return r;
-                }
-
                 log_info("Successfully formatted future partition %" PRIu64 ".", p->partno);
 
-                /* The file system is now created, no need to delay udev further */
-                if (p->encrypt != ENCRYPT_OFF)
-                        if (flock(encrypted_dev_fd, LOCK_UN) < 0)
-                                return log_error_errno(errno, "Failed to unlock LUKS device: %m");
+                /* If we're writing to a loop device, we can now mount the empty filesystem and populate it. */
+                if (partition_needs_populate(p) && !root) {
+                        assert(t->loop);
 
-                r = partition_populate(p, fsdev);
-                if (r < 0) {
-                        encrypted_dev_fd = safe_close(encrypted_dev_fd);
-                        (void) deactivate_luks(cd, encrypted);
-                        return r;
+                        r = partition_populate_filesystem(p, t->loop->node, denylist);
+                        if (r < 0)
+                                return r;
+                }
+
+                if (p->encrypt != ENCRYPT_OFF) {
+                        r = partition_target_grow(t, p->new_size);
+                        if (r < 0)
+                                return r;
+
+                        r = partition_encrypt(context, p, partition_target_path(t));
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to encrypt device: %m");
                 }
 
                 /* Note that we always sync explicitly here, since mkfs.fat doesn't do that on its own, and
                  * if we don't sync before detaching a block device the in-flight sectors possibly won't hit
                  * the disk. */
 
-                if (p->encrypt != ENCRYPT_OFF) {
-                        if (fsync(encrypted_dev_fd) < 0)
-                                return log_error_errno(errno, "Failed to synchronize LUKS volume: %m");
-                        encrypted_dev_fd = safe_close(encrypted_dev_fd);
+                r = partition_target_sync(context, p, t);
+                if (r < 0)
+                        return r;
 
-                        r = deactivate_luks(cd, encrypted);
+                if (p->siblings[VERITY_HASH]) {
+                        r = partition_format_verity_hash(context, p->siblings[VERITY_HASH],
+                                                         partition_target_path(t));
                         if (r < 0)
                                 return r;
-
-                        sym_crypt_free(cd);
-                        cd = NULL;
                 }
 
-                r = loop_device_sync(d);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to sync loopback device: %m");
+                if (p->siblings[VERITY_SIG]) {
+                        r = partition_format_verity_sig(context, p->siblings[VERITY_SIG]);
+                        if (r < 0)
+                                return r;
+                }
         }
 
         return 0;
 }
 
+static int parse_x509_certificate(const char *certificate, size_t certificate_size, X509 **ret) {
+#if HAVE_OPENSSL
+        _cleanup_(X509_freep) X509 *cert = NULL;
+        _cleanup_(BIO_freep) BIO *cb = NULL;
+
+        assert(certificate);
+        assert(certificate_size > 0);
+        assert(ret);
+
+        cb = BIO_new_mem_buf(certificate, certificate_size);
+        if (!cb)
+                return log_oom();
+
+        cert = PEM_read_bio_X509(cb, NULL, NULL, NULL);
+        if (!cert)
+                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Failed to parse X.509 certificate: %s",
+                                       ERR_error_string(ERR_get_error(), NULL));
+
+        if (ret)
+                *ret = TAKE_PTR(cert);
+
+        return 0;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "openssl is not supported, cannot parse X509 certificate.");
+#endif
+}
+
+static int parse_private_key(const char *key, size_t key_size, EVP_PKEY **ret) {
+#if HAVE_OPENSSL
+        _cleanup_(BIO_freep) BIO *kb = NULL;
+        _cleanup_(EVP_PKEY_freep) EVP_PKEY *pk = NULL;
+
+        assert(key);
+        assert(key_size > 0);
+        assert(ret);
+
+        kb = BIO_new_mem_buf(key, key_size);
+        if (!kb)
+                return log_oom();
+
+        pk = PEM_read_bio_PrivateKey(kb, NULL, NULL, NULL);
+        if (!pk)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to parse PEM private key: %s",
+                                       ERR_error_string(ERR_get_error(), NULL));
+
+        if (ret)
+                *ret = TAKE_PTR(pk);
+
+        return 0;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "openssl is not supported, cannot parse private key.");
+#endif
+}
+
 static int partition_acquire_uuid(Context *context, Partition *p, sd_id128_t *ret) {
         struct {
                 sd_id128_t type_uuid;
                 uint64_t counter;
-        } _packed_  plaintext = {};
+        } _packed_ plaintext = {};
         union {
-                unsigned char md[SHA256_DIGEST_LENGTH];
+                uint8_t md[SHA256_DIGEST_SIZE];
                 sd_id128_t id;
         } result;
 
         uint64_t k = 0;
-        Partition *q;
         int r;
 
         assert(context);
@@ -3118,20 +4211,19 @@
                 if (p == q)
                         break;
 
-                if (!sd_id128_equal(p->type_uuid, q->type_uuid))
+                if (!sd_id128_equal(p->type.uuid, q->type.uuid))
                         continue;
 
                 k++;
         }
 
-        plaintext.type_uuid = p->type_uuid;
+        plaintext.type_uuid = p->type.uuid;
         plaintext.counter = htole64(k);
 
-        if (!HMAC(EVP_sha256(),
-                  &context->seed, sizeof(context->seed),
-                  (const unsigned char*) &plaintext, k == 0 ? sizeof(sd_id128_t) : sizeof(plaintext),
-                  result.md, NULL))
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "SHA256 calculation failed.");
+        hmac_sha256(context->seed.bytes, sizeof(context->seed.bytes),
+                    &plaintext,
+                    k == 0 ? sizeof(sd_id128_t) : sizeof(plaintext),
+                    result.md);
 
         /* Take the first half, mark it as v4 UUID */
         assert_cc(sizeof(result.md) == sizeof(result.id) * 2);
@@ -3166,14 +4258,13 @@
         assert(p);
         assert(ret);
 
-        prefix = gpt_partition_type_uuid_to_string(p->type_uuid);
+        prefix = gpt_partition_type_uuid_to_string(p->type.uuid);
         if (!prefix)
                 prefix = "linux";
 
         for (;;) {
                 const char *ll = label ?: prefix;
                 bool retry = false;
-                Partition *q;
 
                 LIST_FOREACH(partitions, q, context->partitions) {
                         if (p == q)
@@ -3205,12 +4296,13 @@
 }
 
 static int context_acquire_partition_uuids_and_labels(Context *context) {
-        Partition *p;
         int r;
 
         assert(context);
 
         LIST_FOREACH(partitions, p, context->partitions) {
+                sd_id128_t uuid;
+
                 /* Never touch foreign partitions */
                 if (PARTITION_IS_FOREIGN(p)) {
                         p->new_uuid = p->current_uuid;
@@ -3225,10 +4317,34 @@
                 }
 
                 if (!sd_id128_is_null(p->current_uuid))
-                        p->new_uuid = p->current_uuid; /* Never change initialized UUIDs */
-                else if (sd_id128_is_null(p->new_uuid)) {
+                        p->new_uuid = uuid = p->current_uuid; /* Never change initialized UUIDs */
+                else if (p->new_uuid_is_set)
+                        uuid = p->new_uuid;
+                else {
                         /* Not explicitly set by user! */
-                        r = partition_acquire_uuid(context, p, &p->new_uuid);
+                        r = partition_acquire_uuid(context, p, &uuid);
+                        if (r < 0)
+                                return r;
+
+                        /* The final verity hash/data UUIDs can only be determined after formatting the
+                         * verity hash partition. However, we still want to use the generated partition UUID
+                         * to derive other UUIDs to keep things unique and reproducible, so we always
+                         * generate a UUID if none is set, but we only use it as the actual partition UUID if
+                         * verity is not configured. */
+                        if (!IN_SET(p->verity, VERITY_DATA, VERITY_HASH)) {
+                                p->new_uuid = uuid;
+                                p->new_uuid_is_set = true;
+                        }
+                }
+
+                /* Calculate the UUID for the file system as HMAC-SHA256 of the string "file-system-uuid",
+                 * keyed off the partition UUID. */
+                r = derive_uuid(uuid, "file-system-uuid", &p->fs_uuid);
+                if (r < 0)
+                        return r;
+
+                if (p->encrypt != ENCRYPT_OFF) {
+                        r = derive_uuid(uuid, "luks-uuid", &p->luks_uuid);
                         if (r < 0)
                                 return r;
                 }
@@ -3276,35 +4392,35 @@
         f = p->gpt_flags;
 
         if (p->no_auto >= 0) {
-                if (gpt_partition_type_knows_no_auto(p->type_uuid))
-                        SET_FLAG(f, GPT_FLAG_NO_AUTO, p->no_auto);
+                if (gpt_partition_type_knows_no_auto(p->type))
+                        SET_FLAG(f, SD_GPT_FLAG_NO_AUTO, p->no_auto);
                 else {
-                        char buffer[ID128_UUID_STRING_MAX];
+                        char buffer[SD_ID128_UUID_STRING_MAX];
                         log_warning("Configured NoAuto=%s for partition type '%s' that doesn't support it, ignoring.",
                                     yes_no(p->no_auto),
-                                    gpt_partition_type_uuid_to_string_harder(p->type_uuid, buffer));
+                                    gpt_partition_type_uuid_to_string_harder(p->type.uuid, buffer));
                 }
         }
 
         if (p->read_only >= 0) {
-                if (gpt_partition_type_knows_read_only(p->type_uuid))
-                        SET_FLAG(f, GPT_FLAG_READ_ONLY, p->read_only);
+                if (gpt_partition_type_knows_read_only(p->type))
+                        SET_FLAG(f, SD_GPT_FLAG_READ_ONLY, p->read_only);
                 else {
-                        char buffer[ID128_UUID_STRING_MAX];
+                        char buffer[SD_ID128_UUID_STRING_MAX];
                         log_warning("Configured ReadOnly=%s for partition type '%s' that doesn't support it, ignoring.",
                                     yes_no(p->read_only),
-                                    gpt_partition_type_uuid_to_string_harder(p->type_uuid, buffer));
+                                    gpt_partition_type_uuid_to_string_harder(p->type.uuid, buffer));
                 }
         }
 
         if (p->growfs >= 0) {
-                if (gpt_partition_type_knows_growfs(p->type_uuid))
-                        SET_FLAG(f, GPT_FLAG_GROWFS, p->growfs);
+                if (gpt_partition_type_knows_growfs(p->type))
+                        SET_FLAG(f, SD_GPT_FLAG_GROWFS, p->growfs);
                 else {
-                        char buffer[ID128_UUID_STRING_MAX];
+                        char buffer[SD_ID128_UUID_STRING_MAX];
                         log_warning("Configured GrowFileSystem=%s for partition type '%s' that doesn't support it, ignoring.",
                                     yes_no(p->growfs),
-                                    gpt_partition_type_uuid_to_string_harder(p->type_uuid, buffer));
+                                    gpt_partition_type_uuid_to_string_harder(p->type.uuid, buffer));
                 }
         }
 
@@ -3312,7 +4428,6 @@
 }
 
 static int context_mangle_partitions(Context *context) {
-        Partition *p;
         int r;
 
         assert(context);
@@ -3321,6 +4436,9 @@
                 if (p->dropped)
                         continue;
 
+                if (partition_defer(p))
+                        continue;
+
                 assert(p->new_size != UINT64_MAX);
                 assert(p->offset != UINT64_MAX);
                 assert(p->partno != UINT64_MAX);
@@ -3332,13 +4450,13 @@
 
                         if (p->new_size != p->current_size) {
                                 assert(p->new_size >= p->current_size);
-                                assert(p->new_size % 512 == 0);
+                                assert(p->new_size % context->sector_size == 0);
 
                                 r = fdisk_partition_size_explicit(p->current_partition, true);
                                 if (r < 0)
                                         return log_error_errno(r, "Failed to enable explicit sizing: %m");
 
-                                r = fdisk_partition_set_size(p->current_partition, p->new_size / 512);
+                                r = fdisk_partition_set_size(p->current_partition, p->new_size / context->sector_size);
                                 if (r < 0)
                                         return log_error_errno(r, "Failed to grow partition: %m");
 
@@ -3347,11 +4465,7 @@
                         }
 
                         if (!sd_id128_equal(p->new_uuid, p->current_uuid)) {
-                                char buf[ID128_UUID_STRING_MAX];
-
-                                assert(!sd_id128_is_null(p->new_uuid));
-
-                                r = fdisk_partition_set_uuid(p->current_partition, id128_to_uuid_string(p->new_uuid, buf));
+                                r = fdisk_partition_set_uuid(p->current_partition, SD_ID128_TO_UUID_STRING(p->new_uuid));
                                 if (r < 0)
                                         return log_error_errno(r, "Failed to set partition UUID: %m");
 
@@ -3378,19 +4492,17 @@
                 } else {
                         _cleanup_(fdisk_unref_partitionp) struct fdisk_partition *q = NULL;
                         _cleanup_(fdisk_unref_parttypep) struct fdisk_parttype *t = NULL;
-                        char ids[ID128_UUID_STRING_MAX];
 
                         assert(!p->new_partition);
-                        assert(p->offset % 512 == 0);
-                        assert(p->new_size % 512 == 0);
-                        assert(!sd_id128_is_null(p->new_uuid));
+                        assert(p->offset % context->sector_size == 0);
+                        assert(p->new_size % context->sector_size == 0);
                         assert(p->new_label);
 
                         t = fdisk_new_parttype();
                         if (!t)
                                 return log_oom();
 
-                        r = fdisk_parttype_set_typestr(t, id128_to_uuid_string(p->type_uuid, ids));
+                        r = fdisk_parttype_set_typestr(t, SD_ID128_TO_UUID_STRING(p->type.uuid));
                         if (r < 0)
                                 return log_error_errno(r, "Failed to initialize partition type: %m");
 
@@ -3406,11 +4518,11 @@
                         if (r < 0)
                                 return log_error_errno(r, "Failed to enable explicit sizing: %m");
 
-                        r = fdisk_partition_set_start(q, p->offset / 512);
+                        r = fdisk_partition_set_start(q, p->offset / context->sector_size);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to position partition: %m");
 
-                        r = fdisk_partition_set_size(q, p->new_size / 512);
+                        r = fdisk_partition_set_size(q, p->new_size / context->sector_size);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to grow partition: %m");
 
@@ -3418,7 +4530,7 @@
                         if (r < 0)
                                 return log_error_errno(r, "Failed to set partition number: %m");
 
-                        r = fdisk_partition_set_uuid(q, id128_to_uuid_string(p->new_uuid, ids));
+                        r = fdisk_partition_set_uuid(q, SD_ID128_TO_UUID_STRING(p->new_uuid));
                         if (r < 0)
                                 return log_error_errno(r, "Failed to set partition UUID: %m");
 
@@ -3445,31 +4557,162 @@
         return 0;
 }
 
-static int context_write_partition_table(
-                Context *context,
-                const char *node,
-                bool from_scratch) {
+static int split_name_printf(Partition *p, char **ret) {
+        assert(p);
 
+        const Specifier table[] = {
+                { 't', specifier_string, GPT_PARTITION_TYPE_UUID_TO_STRING_HARDER(p->type.uuid) },
+                { 'T', specifier_id128,  &p->type.uuid                                          },
+                { 'U', specifier_id128,  &p->new_uuid                                           },
+                { 'n', specifier_uint64, &p->partno                                             },
+
+                COMMON_SYSTEM_SPECIFIERS,
+                {}
+        };
+
+        return specifier_printf(p->split_name_format, NAME_MAX, table, arg_root, p, ret);
+}
+
+static int split_node(const char *node, char **ret_base, char **ret_ext) {
+        _cleanup_free_ char *base = NULL, *ext = NULL;
+        char *e;
+        int r;
+
+        assert(node);
+        assert(ret_base);
+        assert(ret_ext);
+
+        r = path_extract_filename(node, &base);
+        if (r == O_DIRECTORY || r == -EADDRNOTAVAIL)
+                return log_error_errno(r, "Device node %s cannot be a directory", node);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from %s: %m", node);
+
+        e = endswith(base, ".raw");
+        if (e) {
+                ext = strdup(e);
+                if (!ext)
+                        return log_oom();
+
+                *e = 0;
+        }
+
+        *ret_base = TAKE_PTR(base);
+        *ret_ext = TAKE_PTR(ext);
+
+        return 0;
+}
+
+static int split_name_resolve(Context *context) {
+        _cleanup_free_ char *parent = NULL, *base = NULL, *ext = NULL;
+        int r;
+
+        assert(context);
+
+        r = path_extract_directory(context->node, &parent);
+        if (r < 0 && r != -EDESTADDRREQ)
+                return log_error_errno(r, "Failed to extract directory from %s: %m", context->node);
+
+        r = split_node(context->node, &base, &ext);
+        if (r < 0)
+                return r;
+
+        LIST_FOREACH(partitions, p, context->partitions) {
+                _cleanup_free_ char *resolved = NULL;
+
+                if (p->dropped)
+                        continue;
+
+                if (!p->split_name_format)
+                        continue;
+
+                r = split_name_printf(p, &resolved);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to resolve specifiers in %s: %m", p->split_name_format);
+
+                if (parent)
+                        p->split_path = strjoin(parent, "/", base, ".", resolved, ext);
+                else
+                        p->split_path = strjoin(base, ".", resolved, ext);
+                if (!p->split_path)
+                        return log_oom();
+        }
+
+        LIST_FOREACH(partitions, p, context->partitions) {
+                if (!p->split_path)
+                        continue;
+
+                LIST_FOREACH(partitions, q, context->partitions) {
+                        if (p == q)
+                                continue;
+
+                        if (!q->split_path)
+                                continue;
+
+                        if (!streq(p->split_path, q->split_path))
+                                continue;
+
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTUNIQ),
+                                               "%s and %s have the same resolved split name \"%s\", refusing",
+                                               p->definition_path, q->definition_path, p->split_path);
+                }
+        }
+
+        return 0;
+}
+
+static int context_split(Context *context) {
+        int fd = -EBADF, r;
+
+        if (!arg_split)
+                return 0;
+
+        assert(context);
+
+        /* We can't do resolution earlier because the partition UUIDs for verity partitions are only filled
+         * in after they've been generated. */
+
+        r = split_name_resolve(context);
+        if (r < 0)
+                return r;
+
+        LIST_FOREACH(partitions, p, context->partitions) {
+                _cleanup_close_ int fdt = -EBADF;
+
+                if (p->dropped)
+                        continue;
+
+                if (!p->split_path)
+                        continue;
+
+                if (partition_defer(p))
+                        continue;
+
+                fdt = open(p->split_path, O_WRONLY|O_NOCTTY|O_CLOEXEC|O_NOFOLLOW|O_CREAT|O_EXCL, 0666);
+                if (fdt < 0)
+                        return log_error_errno(fdt, "Failed to open split partition file %s: %m", p->split_path);
+
+                if (fd < 0)
+                        assert_se((fd = fdisk_get_devfd(context->fdisk_context)) >= 0);
+
+                if (lseek(fd, p->offset, SEEK_SET) < 0)
+                        return log_error_errno(errno, "Failed to seek to partition offset: %m");
+
+                r = copy_bytes(fd, fdt, p->new_size, COPY_REFLINK|COPY_HOLES);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to copy to split partition %s: %m", p->split_path);
+        }
+
+        return 0;
+}
+
+static int context_write_partition_table(Context *context) {
         _cleanup_(fdisk_unref_tablep) struct fdisk_table *original_table = NULL;
         int capable, r;
 
         assert(context);
 
-        if (arg_pretty > 0 ||
-            (arg_pretty < 0 && isatty(STDOUT_FILENO) > 0) ||
-            !FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) {
-
-                (void) context_dump_partitions(context, node);
-
-                putc('\n', stdout);
-
-                if (arg_json_format_flags & JSON_FORMAT_OFF)
-                        (void) context_dump_partition_bar(context, node);
-                putc('\n', stdout);
-                fflush(stdout);
-        }
-
-        if (!from_scratch && !context_changed(context)) {
+        if (!context->from_scratch && !context_changed(context)) {
                 log_info("No changes.");
                 return 0;
         }
@@ -3481,20 +4724,22 @@
 
         log_info("Applying changes.");
 
-        if (from_scratch) {
+        if (context->from_scratch) {
                 r = context_wipe_range(context, 0, context->total);
                 if (r < 0)
                         return r;
 
                 log_info("Wiped block device.");
 
-                r = context_discard_range(context, 0, context->total);
-                if (r == -EOPNOTSUPP)
-                        log_info("Storage does not support discard, not discarding entire block device data.");
-                else if (r < 0)
-                        return log_error_errno(r, "Failed to discard entire block device: %m");
-                else if (r > 0)
-                        log_info("Discarded entire block device.");
+                if (arg_discard) {
+                        r = context_discard_range(context, 0, context->total);
+                        if (r == -EOPNOTSUPP)
+                                log_info("Storage does not support discard, not discarding entire block device data.");
+                        else if (r < 0)
+                                return log_error_errno(r, "Failed to discard entire block device: %m");
+                        else if (r > 0)
+                                log_info("Discarded entire block device.");
+                }
         }
 
         r = fdisk_get_partitions(context->fdisk_context, &original_table);
@@ -3503,7 +4748,7 @@
 
         /* Wipe fs signatures and discard sectors where the new partitions are going to be placed and in the
          * gaps between partitions, just to be sure. */
-        r = context_wipe_and_discard(context, from_scratch);
+        r = context_wipe_and_discard(context);
         if (r < 0)
                 return r;
 
@@ -3533,7 +4778,7 @@
         else if (capable > 0) {
                 log_info("Telling kernel to reread partition table.");
 
-                if (from_scratch)
+                if (context->from_scratch)
                         r = fdisk_reread_partition_table(context->fdisk_context);
                 else
                         r = fdisk_reread_changes(context->fdisk_context, original_table);
@@ -3556,7 +4801,7 @@
                 return 0;
 
         if (!arg_randomize) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 fd = chase_symlinks_and_open("/etc/machine-id", root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC, NULL);
                 if (fd == -ENOENT)
@@ -3564,11 +4809,13 @@
                 else if (fd < 0)
                         return log_error_errno(fd, "Failed to determine machine ID of image: %m");
                 else {
-                        r = id128_read_fd(fd, ID128_PLAIN_OR_UNINIT, &context->seed);
-                        if (r == -ENOMEDIUM)
+                        r = id128_read_fd(fd, ID128_FORMAT_PLAIN, &context->seed);
+                        if (r < 0) {
+                                if (!ERRNO_IS_MACHINE_ID_UNSET(r))
+                                        return log_error_errno(r, "Failed to parse machine ID of image: %m");
+
                                 log_info("No machine ID set, using randomized partition UUIDs.");
-                        else if (r < 0)
-                                return log_error_errno(r, "Failed to parse machine ID of image: %m");
+                        }
 
                         return 0;
                 }
@@ -3581,8 +4828,7 @@
         return 0;
 }
 
-static int context_factory_reset(Context *context, bool from_scratch) {
-        Partition *p;
+static int context_factory_reset(Context *context) {
         size_t n = 0;
         int r;
 
@@ -3591,7 +4837,7 @@
         if (arg_factory_reset <= 0)
                 return 0;
 
-        if (from_scratch) /* Nothing to reset if we start from scratch */
+        if (context->from_scratch) /* Nothing to reset if we start from scratch */
                 return 0;
 
         if (arg_dry_run) {
@@ -3631,8 +4877,6 @@
 }
 
 static int context_can_factory_reset(Context *context) {
-        Partition *p;
-
         assert(context);
 
         LIST_FOREACH(partitions, p, context->partitions)
@@ -3644,19 +4888,18 @@
 
 static int resolve_copy_blocks_auto_candidate(
                 dev_t partition_devno,
-                sd_id128_t partition_type_uuid,
+                GptPartitionType partition_type,
                 dev_t restrict_devno,
                 sd_id128_t *ret_uuid) {
 
         _cleanup_(blkid_free_probep) blkid_probe b = NULL;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
         const char *pttype, *t;
         sd_id128_t pt_parsed, u;
         blkid_partition pp;
         dev_t whole_devno;
         blkid_partlist pl;
-        struct stat st;
         int r;
 
         /* Checks if the specified partition has the specified GPT type UUID, and is located on the specified
@@ -3679,21 +4922,10 @@
                                 major(partition_devno), minor(partition_devno),
                                 major(restrict_devno), minor(restrict_devno));
 
-        r = device_path_make_major_minor(S_IFBLK, whole_devno, &p);
+        fd = r = device_open_from_devnum(S_IFBLK, whole_devno, O_RDONLY|O_CLOEXEC|O_NONBLOCK, &p);
         if (r < 0)
-                return log_error_errno(r, "Failed to convert block device to device node path: %m");
-
-        fd = open(p, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
-        if (fd < 0)
-                return log_error_errno(r, "Failed to open '%s': %m", p);
-
-        if (fstat(fd, &st) < 0)
-                return log_error_errno(r, "Failed to stat '%s': %m", p);
-
-        if (!S_ISBLK(st.st_mode) || st.st_rdev != whole_devno)
-                return log_error_errno(
-                                SYNTHETIC_ERRNO(EPERM),
-                                "Opened and determined block device don't match, refusing.");
+                return log_error_errno(r, "Failed to open block device " DEVNUM_FORMAT_STR ": %m",
+                                       DEVNUM_FORMAT_VAL(whole_devno));
 
         b = blkid_new_probe();
         if (!b)
@@ -3709,12 +4941,14 @@
 
         errno = 0;
         r = blkid_do_safeprobe(b);
-        if (IN_SET(r, -2, 1)) { /* nothing found or ambiguous result */
+        if (r == _BLKID_SAFEPROBE_ERROR)
+                return log_error_errno(errno_or_else(EIO), "Unable to probe for partition table of '%s': %m", p);
+        if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND)) {
                 log_debug("Didn't find partition table on block device '%s'.", p);
                 return false;
         }
-        if (r != 0)
-                return log_error_errno(errno_or_else(EIO), "Unable to probe for partition table of '%s': %m", p);
+
+        assert(r == _BLKID_SAFEPROBE_FOUND);
 
         (void) blkid_probe_lookup_value(b, "PTTYPE", &pttype, NULL);
         if (!streq_ptr(pttype, "gpt")) {
@@ -3726,7 +4960,6 @@
         pl = blkid_probe_get_partitions(b);
         if (!pl)
                 return log_error_errno(errno_or_else(EIO), "Unable read partition table of '%s': %m", p);
-        errno = 0;
 
         pp = blkid_partlist_devno_to_partition(pl, partition_devno);
         if (!pp) {
@@ -3748,28 +4981,25 @@
                 return false;
         }
 
-        if (!sd_id128_equal(pt_parsed, partition_type_uuid)) {
+        if (!sd_id128_equal(pt_parsed, partition_type.uuid)) {
                 log_debug("Partition %u:%u has non-matching partition type " SD_ID128_FORMAT_STR " (needed: " SD_ID128_FORMAT_STR "), ignoring.",
                           major(partition_devno), minor(partition_devno),
-                          SD_ID128_FORMAT_VAL(pt_parsed), SD_ID128_FORMAT_VAL(partition_type_uuid));
+                          SD_ID128_FORMAT_VAL(pt_parsed), SD_ID128_FORMAT_VAL(partition_type.uuid));
                 return false;
         }
 
-        t = blkid_partition_get_uuid(pp);
-        if (isempty(t)) {
-                log_debug("Partition %u:%u has no UUID.",
-                          major(partition_devno), minor(partition_devno));
+        r = blkid_partition_get_uuid_id128(pp, &u);
+        if (r == -ENXIO) {
+                log_debug_errno(r, "Partition " DEVNUM_FORMAT_STR " has no UUID.", DEVNUM_FORMAT_VAL(partition_devno));
                 return false;
         }
-
-        r = sd_id128_from_string(t, &u);
         if (r < 0) {
-                log_debug_errno(r, "Failed to parse partition UUID \"%s\": %m", t);
+                log_debug_errno(r, "Failed to read partition UUID of " DEVNUM_FORMAT_STR ": %m", DEVNUM_FORMAT_VAL(partition_devno));
                 return false;
         }
 
-        log_debug("Automatically found partition %u:%u of right type " SD_ID128_FORMAT_STR ".",
-                  major(partition_devno), minor(partition_devno),
+        log_debug("Automatically found partition " DEVNUM_FORMAT_STR " of right type " SD_ID128_FORMAT_STR ".",
+                  DEVNUM_FORMAT_VAL(partition_devno),
                   SD_ID128_FORMAT_VAL(pt_parsed));
 
         if (ret_uuid)
@@ -3808,10 +5038,10 @@
 }
 
 static int resolve_copy_blocks_auto(
-                sd_id128_t type_uuid,
+                GptPartitionType type,
                 const char *root,
                 dev_t restrict_devno,
-                char **ret_path,
+                dev_t *ret_devno,
                 sd_id128_t *ret_uuid) {
 
         const char *try1 = NULL, *try2 = NULL;
@@ -3821,8 +5051,6 @@
         dev_t devno, found = 0;
         int r;
 
-        assert(ret_path);
-
         /* Enforce some security restrictions: CopyBlocks=auto should not be an avenue to get outside of the
          * --root=/--image= confinement. Specifically, refuse CopyBlocks= in combination with --root= at all,
          * and restrict block device references in the --image= case to loopback block device we set up.
@@ -3840,30 +5068,30 @@
          * partitions in the host, using the appropriate directory as key and ensuring that the partition
          * type matches. */
 
-        if (gpt_partition_type_is_root(type_uuid))
+        if (type.designator == PARTITION_ROOT)
                 try1 = "/";
-        else if (gpt_partition_type_is_usr(type_uuid))
+        else if (type.designator == PARTITION_USR)
                 try1 = "/usr/";
-        else if (gpt_partition_type_is_root_verity(type_uuid))
+        else if (type.designator == PARTITION_ROOT_VERITY)
                 try1 = "/";
-        else if (gpt_partition_type_is_usr_verity(type_uuid))
+        else if (type.designator == PARTITION_USR_VERITY)
                 try1 = "/usr/";
-        else if (sd_id128_equal(type_uuid, GPT_ESP)) {
+        else if (type.designator == PARTITION_ESP) {
                 try1 = "/efi/";
                 try2 = "/boot/";
-        } else if (sd_id128_equal(type_uuid, GPT_XBOOTLDR))
+        } else if (type.designator == PARTITION_XBOOTLDR)
                 try1 = "/boot/";
         else
                 return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                        "Partition type " SD_ID128_FORMAT_STR " not supported from automatic source block device discovery.",
-                                       SD_ID128_FORMAT_VAL(type_uuid));
+                                       SD_ID128_FORMAT_VAL(type.uuid));
 
         r = find_backing_devno(try1, root, &devno);
         if (r == -ENOENT && try2)
                 r = find_backing_devno(try2, root, &devno);
         if (r < 0)
                 return log_error_errno(r, "Failed to resolve automatic CopyBlocks= path for partition type " SD_ID128_FORMAT_STR ", sorry: %m",
-                                       SD_ID128_FORMAT_VAL(type_uuid));
+                                       SD_ID128_FORMAT_VAL(type.uuid));
 
         xsprintf_sys_block_path(p, "/slaves", devno);
         d = opendir(p);
@@ -3895,17 +5123,17 @@
                         if (r < 0)
                                 return log_error_errno(r, "Failed to read %s: %m", q);
 
-                        r = parse_dev(t, &sl);
+                        r = parse_devnum(t, &sl);
                         if (r < 0) {
                                 log_debug_errno(r, "Failed to parse %s, ignoring: %m", q);
                                 continue;
                         }
                         if (major(sl) == 0) {
-                                log_debug_errno(r, "Device backing %s is special, ignoring: %m", q);
+                                log_debug("Device backing %s is special, ignoring.", q);
                                 continue;
                         }
 
-                        r = resolve_copy_blocks_auto_candidate(sl, type_uuid, restrict_devno, &u);
+                        r = resolve_copy_blocks_auto_candidate(sl, type, restrict_devno, &u);
                         if (r < 0)
                                 return r;
                         if (r > 0) {
@@ -3921,7 +5149,7 @@
         } else if (errno != ENOENT)
                 return log_error_errno(errno, "Failed open %s: %m", p);
         else {
-                r = resolve_copy_blocks_auto_candidate(devno, type_uuid, restrict_devno, &found_uuid);
+                r = resolve_copy_blocks_auto_candidate(devno, type, restrict_devno, &found_uuid);
                 if (r < 0)
                         return r;
                 if (r > 0)
@@ -3932,9 +5160,8 @@
                 return log_error_errno(SYNTHETIC_ERRNO(ENXIO),
                                        "Unable to automatically discover suitable partition to copy blocks from.");
 
-        r = device_path_make_major_minor(S_IFBLK, found, ret_path);
-        if (r < 0)
-                return log_error_errno(r, "Failed to convert dev_t to device node path: %m");
+        if (ret_devno)
+                *ret_devno = found;
 
         if (ret_uuid)
                 *ret_uuid = found_uuid;
@@ -3944,16 +5171,14 @@
 
 static int context_open_copy_block_paths(
                 Context *context,
-                const char *root,
                 dev_t restrict_devno) {
 
-        Partition *p;
         int r;
 
         assert(context);
 
         LIST_FOREACH(partitions, p, context->partitions) {
-                _cleanup_close_ int source_fd = -1;
+                _cleanup_close_ int source_fd = -EBADF;
                 _cleanup_free_ char *opened = NULL;
                 sd_id128_t uuid = SD_ID128_NULL;
                 uint64_t size;
@@ -3967,7 +5192,7 @@
 
                 if (p->copy_blocks_path) {
 
-                        source_fd = chase_symlinks_and_open(p->copy_blocks_path, root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_NONBLOCK, &opened);
+                        source_fd = chase_symlinks_and_open(p->copy_blocks_path, p->copy_blocks_root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_NONBLOCK, &opened);
                         if (source_fd < 0)
                                 return log_error_errno(source_fd, "Failed to open '%s': %m", p->copy_blocks_path);
 
@@ -3979,59 +5204,48 @@
                                                        "Copying from block device node is not permitted in --image=/--root= mode, refusing.");
 
                 } else if (p->copy_blocks_auto) {
+                        dev_t devno = 0;  /* Fake initialization to appease gcc. */
 
-                        r = resolve_copy_blocks_auto(p->type_uuid, root, restrict_devno, &opened, &uuid);
+                        r = resolve_copy_blocks_auto(p->type, p->copy_blocks_root, restrict_devno, &devno, &uuid);
                         if (r < 0)
                                 return r;
+                        assert(devno != 0);
 
-                        source_fd = open(opened, O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                        if (source_fd < 0)
-                                return log_error_errno(errno, "Failed to open automatically determined source block copy device '%s': %m", opened);
+                        source_fd = r = device_open_from_devnum(S_IFBLK, devno, O_RDONLY|O_CLOEXEC|O_NONBLOCK, &opened);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to open automatically determined source block copy device " DEVNUM_FORMAT_STR ": %m",
+                                                       DEVNUM_FORMAT_VAL(devno));
 
                         if (fstat(source_fd, &st) < 0)
                                 return log_error_errno(errno, "Failed to stat block copy file '%s': %m", opened);
-
-                        /* If we found it automatically, it must be a block device, let's enforce that */
-                        if (!S_ISBLK(st.st_mode))
-                                return log_error_errno(SYNTHETIC_ERRNO(EBADF),
-                                                       "Automatically detected source block copy device '%s' is not a block device, refusing: %m", opened);
-                }  else
+                } else
                         continue;
 
                 if (S_ISDIR(st.st_mode)) {
                         _cleanup_free_ char *bdev = NULL;
+                        dev_t devt;
 
                         /* If the file is a directory, automatically find the backing block device */
 
                         if (major(st.st_dev) != 0)
-                                r = device_path_make_major_minor(S_IFBLK, st.st_dev, &bdev);
+                                devt = st.st_dev;
                         else {
-                                dev_t devt;
-
                                 /* Special support for btrfs */
-
                                 r = btrfs_get_block_device_fd(source_fd, &devt);
                                 if (r == -EUCLEAN)
                                         return btrfs_log_dev_root(LOG_ERR, r, opened);
                                 if (r < 0)
                                         return log_error_errno(r, "Unable to determine backing block device of '%s': %m", opened);
-
-                                r = device_path_make_major_minor(S_IFBLK, devt, &bdev);
                         }
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to determine block device path for block device backing '%s': %m", opened);
 
                         safe_close(source_fd);
 
-                        source_fd = open(bdev, O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                        if (source_fd < 0)
-                                return log_error_errno(errno, "Failed to open block device '%s': %m", bdev);
+                        source_fd = r = device_open_from_devnum(S_IFBLK, devt, O_RDONLY|O_CLOEXEC|O_NONBLOCK, &bdev);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to open block device backing '%s': %m", opened);
 
                         if (fstat(source_fd, &st) < 0)
                                 return log_error_errno(errno, "Failed to stat block device '%s': %m", bdev);
-
-                        if (!S_ISBLK(st.st_mode))
-                                return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK), "Block device '%s' is not actually a block device, refusing.", bdev);
                 }
 
                 if (S_ISREG(st.st_mode))
@@ -4053,8 +5267,237 @@
                 free_and_replace(p->copy_blocks_path, opened);
 
                 /* When copying from an existing partition copy that partitions UUID if none is configured explicitly */
-                if (sd_id128_is_null(p->new_uuid) && !sd_id128_is_null(uuid))
+                if (!p->new_uuid_is_set && !sd_id128_is_null(uuid)) {
                         p->new_uuid = uuid;
+                        p->new_uuid_is_set = true;
+                }
+        }
+
+        return 0;
+}
+
+static int fd_apparent_size(int fd, uint64_t *ret) {
+        off_t initial = 0;
+        uint64_t size = 0;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        initial = lseek(fd, 0, SEEK_CUR);
+        if (initial < 0)
+                return log_error_errno(errno, "Failed to get file offset: %m");
+
+        for (off_t off = 0;;) {
+                off_t r;
+
+                r = lseek(fd, off, SEEK_DATA);
+                if (r < 0 && errno == ENXIO)
+                        /* If errno == ENXIO, that means we've reached the final hole of the file and
+                         * that hole isn't followed by more data. */
+                        break;
+                if (r < 0)
+                        return log_error_errno(errno, "Failed to seek data in file from offset %"PRIi64": %m", off);
+
+                off = r; /* Set the offset to the start of the data segment. */
+
+                /* After copying a potential hole, find the end of the data segment by looking for
+                 * the next hole. If we get ENXIO, we're at EOF. */
+                r = lseek(fd, off, SEEK_HOLE);
+                if (r < 0) {
+                        if (errno == ENXIO)
+                                break;
+                        return log_error_errno(errno, "Failed to seek hole in file from offset %"PRIi64": %m", off);
+                }
+
+                size += r - off;
+                off = r;
+        }
+
+        if (lseek(fd, initial, SEEK_SET) < 0)
+                return log_error_errno(errno, "Failed to reset file offset: %m");
+
+        *ret = size;
+
+        return 0;
+}
+
+static int context_minimize(Context *context) {
+        _cleanup_set_free_ Set *denylist = NULL;
+        const char *vt;
+        int r;
+
+        assert(context);
+
+        r = make_copy_files_denylist(context, &denylist);
+        if (r < 0)
+                return r;
+
+        r = var_tmp_dir(&vt);
+        if (r < 0)
+                return log_error_errno(r, "Could not determine temporary directory: %m");
+
+        LIST_FOREACH(partitions, p, context->partitions) {
+                _cleanup_(rm_rf_physical_and_freep) char *root = NULL;
+                _cleanup_(unlink_and_freep) char *temp = NULL;
+                _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
+                _cleanup_close_ int fd = -EBADF;
+                sd_id128_t fs_uuid;
+                uint64_t fsz;
+
+                if (p->dropped)
+                        continue;
+
+                if (PARTITION_EXISTS(p)) /* Never format existing partitions */
+                        continue;
+
+                if (!p->format)
+                        continue;
+
+                if (p->minimize == MINIMIZE_OFF)
+                        continue;
+
+                if (!partition_needs_populate(p))
+                        continue;
+
+                assert(!p->copy_blocks_path);
+
+                r = tempfn_random_child(vt, "repart", &temp);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to generate temporary file path: %m");
+
+                if (fstype_is_ro(p->format))
+                        fs_uuid = p->fs_uuid;
+                else {
+                        fd = open(temp, O_CREAT|O_EXCL|O_CLOEXEC|O_RDWR|O_NOCTTY, 0600);
+                        if (fd < 0)
+                                return log_error_errno(errno, "Failed to open temporary file %s: %m", temp);
+
+                        /* This may seem huge but it will be created sparse so it doesn't take up any space
+                         * on disk until written to. */
+                        if (ftruncate(fd, 1024ULL * 1024ULL * 1024ULL * 1024ULL) < 0)
+                                return log_error_errno(errno, "Failed to truncate temporary file to %s: %m",
+                                                       FORMAT_BYTES(1024ULL * 1024ULL * 1024ULL * 1024ULL));
+
+                        r = loop_device_make(fd, O_RDWR, 0, UINT64_MAX, 0, 0, LOCK_EX, &d);
+                        if (r < 0 && r != -ENOENT && !ERRNO_IS_PRIVILEGE(r))
+                                return log_error_errno(r, "Failed to make loopback device of %s: %m", temp);
+
+                        /* We're going to populate this filesystem twice so use a random UUID the first time
+                         * to avoid UUID conflicts. */
+                        r = sd_id128_randomize(&fs_uuid);
+                        if (r < 0)
+                                return r;
+                }
+
+                if (!d || fstype_is_ro(p->format)) {
+                        if (!mkfs_supports_root_option(p->format))
+                                return log_error_errno(SYNTHETIC_ERRNO(ENODEV),
+                                                       "Loop device access is required to populate %s filesystems",
+                                                       p->format);
+
+                        r = partition_populate_directory(p, denylist, &root);
+                        if (r < 0)
+                                return r;
+                }
+
+                r = make_filesystem(d ? d->node : temp, p->format, strempty(p->new_label), root, fs_uuid,
+                                    arg_discard, context->sector_size, NULL);
+                if (r < 0)
+                        return r;
+
+                /* Read-only filesystems are minimal from the first try because they create and size the
+                 * loopback file for us. */
+                if (fstype_is_ro(p->format)) {
+                        p->copy_blocks_path = TAKE_PTR(temp);
+                        p->copy_blocks_path_is_our_file = true;
+                        continue;
+                }
+
+                if (!root) {
+                        assert(d);
+
+                        r = partition_populate_filesystem(p, d->node, denylist);
+                        if (r < 0)
+                                return r;
+                }
+
+                /* Other filesystems need to be provided with a pre-sized loopback file and will adapt to
+                 * fully occupy it. Because we gave the filesystem a 1T sparse file, we need to shrink the
+                 * filesystem down to a reasonable size again to fit it in the disk image. While there are
+                 * some filesystems that support shrinking, it doesn't always work properly (e.g. shrinking
+                 * btrfs gives us a 2.0G filesystem regardless of what we put in it). Instead, let's populate
+                 * the filesystem again, but this time, instead of providing the filesystem with a 1T sparse
+                 * loopback file, let's size the loopback file based on the actual data used by the
+                 * filesystem in the sparse file after the first attempt. This should be a good guess of the
+                 * minimal amount of space needed in the filesystem to fit all the required data.
+                 */
+                r = fd_apparent_size(fd, &fsz);
+                if (r < 0)
+                        return r;
+
+                /* Massage the size a bit because just going by actual data used in the sparse file isn't
+                 * fool-proof. */
+                fsz = round_up_size(fsz + (fsz / 2), context->grain_size);
+                if (minimal_size_by_fs_name(p->format) != UINT64_MAX)
+                        fsz = MAX(minimal_size_by_fs_name(p->format), fsz);
+
+                d = loop_device_unref(d);
+
+                /* Erase the previous filesystem first. */
+                if (ftruncate(fd, 0))
+                        return log_error_errno(errno, "Failed to erase temporary file: %m");
+
+                if (ftruncate(fd, fsz))
+                        return log_error_errno(errno, "Failed to truncate temporary file to %s: %m", FORMAT_BYTES(fsz));
+
+                r = loop_device_make(fd, O_RDWR, 0, UINT64_MAX, 0, 0, LOCK_EX, &d);
+                if (r < 0 && r != -ENOENT && !ERRNO_IS_PRIVILEGE(r))
+                        return log_error_errno(r, "Failed to make loopback device of %s: %m", temp);
+
+                r = make_filesystem(d ? d->node : temp, p->format, strempty(p->new_label), root, p->fs_uuid,
+                                    arg_discard, context->sector_size, NULL);
+                if (r < 0)
+                        return r;
+
+                if (!root) {
+                        assert(d);
+
+                        r = partition_populate_filesystem(p, d->node, denylist);
+                        if (r < 0)
+                                return r;
+                }
+
+                p->copy_blocks_path = TAKE_PTR(temp);
+                p->copy_blocks_path_is_our_file = true;
+        }
+
+        return 0;
+}
+
+static int parse_partition_types(const char *p, sd_id128_t **partitions, size_t *n_partitions) {
+        int r;
+
+        assert(partitions);
+        assert(n_partitions);
+
+        for (;;) {
+                _cleanup_free_ char *name = NULL;
+                GptPartitionType type;
+
+                r = extract_first_word(&p, &name, ",", EXTRACT_CUNESCAPE|EXTRACT_DONT_COALESCE_SEPARATORS);
+                if (r == 0)
+                        break;
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract partition type identifier or GUID: %s", p);
+
+                r = gpt_partition_type_from_string(name, &type);
+                if (r < 0)
+                        return log_error_errno(r, "'%s' is not a valid partition type identifier or GUID", name);
+
+                if (!GREEDY_REALLOC(*partitions, *n_partitions + 1))
+                        return log_oom();
+
+                (*partitions)[(*n_partitions)++] = type.uuid;
         }
 
         return 0;
@@ -4064,7 +5507,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        r = terminal_urlify_man("systemd-repart", "1", &link);
+        r = terminal_urlify_man("systemd-repart", "8", &link);
         if (r < 0)
                 return log_oom();
 
@@ -4086,13 +5529,30 @@
                "     --image=PATH         Operate relative to image file\n"
                "     --definitions=DIR    Find partition definitions in specified directory\n"
                "     --key-file=PATH      Key to use when encrypting partitions\n"
+               "     --private-key=PATH   Private key to use when generating verity roothash\n"
+               "                          signatures\n"
+               "     --certificate=PATH   PEM certificate to use when generating verity\n"
+               "                          roothash signatures\n"
                "     --tpm2-device=PATH   Path to TPM2 device node to use\n"
                "     --tpm2-pcrs=PCR1+PCR2+PCR3+…\n"
                "                          TPM2 PCR indexes to use for TPM2 enrollment\n"
+               "     --tpm2-public-key=PATH\n"
+               "                          Enroll signed TPM2 PCR policy against PEM public key\n"
+               "     --tpm2-public-key-pcrs=PCR1+PCR2+PCR3+…\n"
+               "                          Enroll signed TPM2 PCR policy for specified TPM2 PCRs\n"
                "     --seed=UUID          128bit seed UUID to derive all UUIDs from\n"
                "     --size=BYTES         Grow loopback file to specified size\n"
                "     --json=pretty|short|off\n"
                "                          Generate JSON output\n"
+               "     --split=BOOL         Whether to generate split artifacts\n"
+               "     --include-partitions=PARTITION1,PARTITION2,PARTITION3,…\n"
+               "                          Ignore partitions not of the specified types\n"
+               "     --exclude-partitions=PARTITION1,PARTITION2,PARTITION3,…\n"
+               "                          Ignore partitions of the specified types\n"
+               "     --defer-partitions=PARTITION1,PARTITION2,PARTITION3,…\n"
+               "                          Take partitions of the specified types into account\n"
+               "                          but don't populate them yet\n"
+               "     --sector-size=SIZE   Set the logical sector size for the image\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -4121,30 +5581,48 @@
                 ARG_SIZE,
                 ARG_JSON,
                 ARG_KEY_FILE,
+                ARG_PRIVATE_KEY,
+                ARG_CERTIFICATE,
                 ARG_TPM2_DEVICE,
                 ARG_TPM2_PCRS,
+                ARG_TPM2_PUBLIC_KEY,
+                ARG_TPM2_PUBLIC_KEY_PCRS,
+                ARG_SPLIT,
+                ARG_INCLUDE_PARTITIONS,
+                ARG_EXCLUDE_PARTITIONS,
+                ARG_DEFER_PARTITIONS,
+                ARG_SECTOR_SIZE,
         };
 
         static const struct option options[] = {
-                { "help",              no_argument,       NULL, 'h'                   },
-                { "version",           no_argument,       NULL, ARG_VERSION           },
-                { "no-pager",          no_argument,       NULL, ARG_NO_PAGER          },
-                { "no-legend",         no_argument,       NULL, ARG_NO_LEGEND         },
-                { "dry-run",           required_argument, NULL, ARG_DRY_RUN           },
-                { "empty",             required_argument, NULL, ARG_EMPTY             },
-                { "discard",           required_argument, NULL, ARG_DISCARD           },
-                { "factory-reset",     required_argument, NULL, ARG_FACTORY_RESET     },
-                { "can-factory-reset", no_argument,       NULL, ARG_CAN_FACTORY_RESET },
-                { "root",              required_argument, NULL, ARG_ROOT              },
-                { "image",             required_argument, NULL, ARG_IMAGE             },
-                { "seed",              required_argument, NULL, ARG_SEED              },
-                { "pretty",            required_argument, NULL, ARG_PRETTY            },
-                { "definitions",       required_argument, NULL, ARG_DEFINITIONS       },
-                { "size",              required_argument, NULL, ARG_SIZE              },
-                { "json",              required_argument, NULL, ARG_JSON              },
-                { "key-file",          required_argument, NULL, ARG_KEY_FILE          },
-                { "tpm2-device",       required_argument, NULL, ARG_TPM2_DEVICE       },
-                { "tpm2-pcrs",         required_argument, NULL, ARG_TPM2_PCRS         },
+                { "help",                 no_argument,       NULL, 'h'                      },
+                { "version",              no_argument,       NULL, ARG_VERSION              },
+                { "no-pager",             no_argument,       NULL, ARG_NO_PAGER             },
+                { "no-legend",            no_argument,       NULL, ARG_NO_LEGEND            },
+                { "dry-run",              required_argument, NULL, ARG_DRY_RUN              },
+                { "empty",                required_argument, NULL, ARG_EMPTY                },
+                { "discard",              required_argument, NULL, ARG_DISCARD              },
+                { "factory-reset",        required_argument, NULL, ARG_FACTORY_RESET        },
+                { "can-factory-reset",    no_argument,       NULL, ARG_CAN_FACTORY_RESET    },
+                { "root",                 required_argument, NULL, ARG_ROOT                 },
+                { "image",                required_argument, NULL, ARG_IMAGE                },
+                { "seed",                 required_argument, NULL, ARG_SEED                 },
+                { "pretty",               required_argument, NULL, ARG_PRETTY               },
+                { "definitions",          required_argument, NULL, ARG_DEFINITIONS          },
+                { "size",                 required_argument, NULL, ARG_SIZE                 },
+                { "json",                 required_argument, NULL, ARG_JSON                 },
+                { "key-file",             required_argument, NULL, ARG_KEY_FILE             },
+                { "private-key",          required_argument, NULL, ARG_PRIVATE_KEY          },
+                { "certificate",          required_argument, NULL, ARG_CERTIFICATE          },
+                { "tpm2-device",          required_argument, NULL, ARG_TPM2_DEVICE          },
+                { "tpm2-pcrs",            required_argument, NULL, ARG_TPM2_PCRS            },
+                { "tpm2-public-key",      required_argument, NULL, ARG_TPM2_PUBLIC_KEY      },
+                { "tpm2-public-key-pcrs", required_argument, NULL, ARG_TPM2_PUBLIC_KEY_PCRS },
+                { "split",                required_argument, NULL, ARG_SPLIT                },
+                { "include-partitions",   required_argument, NULL, ARG_INCLUDE_PARTITIONS   },
+                { "exclude-partitions",   required_argument, NULL, ARG_EXCLUDE_PARTITIONS   },
+                { "defer-partitions",     required_argument, NULL, ARG_DEFER_PARTITIONS     },
+                { "sector-size",          required_argument, NULL, ARG_SECTOR_SIZE          },
                 {}
         };
 
@@ -4250,11 +5728,15 @@
                         arg_pretty = r;
                         break;
 
-                case ARG_DEFINITIONS:
-                        r = parse_path_argument(optarg, false, &arg_definitions);
+                case ARG_DEFINITIONS: {
+                        _cleanup_free_ char *path = NULL;
+                        r = parse_path_argument(optarg, false, &path);
                         if (r < 0)
                                 return r;
+                        if (strv_consume(&arg_definitions, TAKE_PTR(path)) < 0)
+                                return log_oom();
                         break;
+                }
 
                 case ARG_SIZE: {
                         uint64_t parsed, rounded;
@@ -4276,8 +5758,8 @@
                                 return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Specified image size too large, refusing.");
 
                         if (rounded != parsed)
-                                log_warning("Specified size is not a multiple of 4096, rounding up automatically. (%" PRIu64 " → %" PRIu64 ")",
-                                            parsed, rounded);
+                                log_warning("Specified size is not a multiple of 4096, rounding up automatically. (%" PRIu64 " %s %" PRIu64 ")",
+                                            parsed, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), rounded);
 
                         arg_size = rounded;
                         arg_size_auto = false;
@@ -4309,6 +5791,46 @@
                         break;
                 }
 
+                case ARG_PRIVATE_KEY: {
+                        _cleanup_(erase_and_freep) char *k = NULL;
+                        size_t n = 0;
+
+                        r = read_full_file_full(
+                                        AT_FDCWD, optarg, UINT64_MAX, SIZE_MAX,
+                                        READ_FULL_FILE_SECURE|READ_FULL_FILE_WARN_WORLD_READABLE|READ_FULL_FILE_CONNECT_SOCKET,
+                                        NULL,
+                                        &k, &n);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to read key file '%s': %m", optarg);
+
+                        EVP_PKEY_free(arg_private_key);
+                        arg_private_key = NULL;
+                        r = parse_private_key(k, n, &arg_private_key);
+                        if (r < 0)
+                                return r;
+                        break;
+                }
+
+                case ARG_CERTIFICATE: {
+                        _cleanup_free_ char *cert = NULL;
+                        size_t n = 0;
+
+                        r = read_full_file_full(
+                                        AT_FDCWD, optarg, UINT64_MAX, SIZE_MAX,
+                                        READ_FULL_FILE_CONNECT_SOCKET,
+                                        NULL,
+                                        &cert, &n);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to read certificate file '%s': %m", optarg);
+
+                        X509_free(arg_certificate);
+                        arg_certificate = NULL;
+                        r = parse_x509_certificate(cert, n, &arg_certificate);
+                        if (r < 0)
+                                return r;
+                        break;
+                }
+
                 case ARG_TPM2_DEVICE: {
                         _cleanup_free_ char *device = NULL;
 
@@ -4326,31 +5848,80 @@
                         break;
                 }
 
-                case ARG_TPM2_PCRS: {
-                        uint32_t mask;
-
-                        if (isempty(optarg)) {
-                                arg_tpm2_pcr_mask = 0;
-                                break;
-                        }
-
-                        r = tpm2_parse_pcrs(optarg, &mask);
+                case ARG_TPM2_PCRS:
+                        r = tpm2_parse_pcr_argument(optarg, &arg_tpm2_pcr_mask);
                         if (r < 0)
                                 return r;
 
-                        if (arg_tpm2_pcr_mask == UINT32_MAX)
-                                arg_tpm2_pcr_mask = mask;
-                        else
-                                arg_tpm2_pcr_mask |= mask;
+                        break;
+
+                case ARG_TPM2_PUBLIC_KEY:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_tpm2_public_key);
+                        if (r < 0)
+                                return r;
 
                         break;
-                }
+
+                case ARG_TPM2_PUBLIC_KEY_PCRS:
+                        r = tpm2_parse_pcr_argument(optarg, &arg_tpm2_public_key_pcr_mask);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_SPLIT:
+                        r = parse_boolean_argument("--split=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        arg_split = r;
+                        break;
+
+                case ARG_INCLUDE_PARTITIONS:
+                        if (arg_filter_partitions_type == FILTER_PARTITIONS_EXCLUDE)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Combination of --include-partitions= and --exclude-partitions= is invalid.");
+
+                        r = parse_partition_types(optarg, &arg_filter_partitions, &arg_n_filter_partitions);
+                        if (r < 0)
+                                return r;
+
+                        arg_filter_partitions_type = FILTER_PARTITIONS_INCLUDE;
+
+                        break;
+
+                case ARG_EXCLUDE_PARTITIONS:
+                        if (arg_filter_partitions_type == FILTER_PARTITIONS_INCLUDE)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Combination of --include-partitions= and --exclude-partitions= is invalid.");
+
+                        r = parse_partition_types(optarg, &arg_filter_partitions, &arg_n_filter_partitions);
+                        if (r < 0)
+                                return r;
+
+                        arg_filter_partitions_type = FILTER_PARTITIONS_EXCLUDE;
+
+                        break;
+
+                case ARG_DEFER_PARTITIONS:
+                        r = parse_partition_types(optarg, &arg_defer_partitions, &arg_n_defer_partitions);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_SECTOR_SIZE:
+                        r = parse_sector_size(optarg, &arg_sector_size);
+                        if (r < 0)
+                                return r;
+
+                        break;
 
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (argc - optind > 1)
@@ -4397,8 +5968,17 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "A path to a device node or loopback file must be specified when --empty=force, --empty=require or --empty=create are used.");
 
+        if (arg_split && !arg_node)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "A path to a loopback file must be specified when --split is used.");
+
         if (arg_tpm2_pcr_mask == UINT32_MAX)
                 arg_tpm2_pcr_mask = TPM2_PCR_MASK_DEFAULT;
+        if (arg_tpm2_public_key_pcr_mask == UINT32_MAX)
+                arg_tpm2_public_key_pcr_mask = UINT32_C(1) << TPM_PCR_INDEX_KERNEL_IMAGE;
+
+        if (arg_pretty < 0 && isatty(STDOUT_FILENO))
+                arg_pretty = true;
 
         return 1;
 }
@@ -4475,7 +6055,7 @@
 
         _cleanup_free_ char *found_path = NULL;
         dev_t devno, fd_devno = MODE_INVALID;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
         int r;
 
@@ -4528,61 +6108,25 @@
         if (r < 0)
                 log_debug_errno(r, "Failed to find whole disk block device for '%s', ignoring: %m", p);
 
-        r = device_path_make_canonical(S_IFBLK, devno, ret);
+        r = devname_from_devnum(S_IFBLK, devno, ret);
         if (r < 0)
                 return log_debug_errno(r, "Failed to determine canonical path for '%s': %m", p);
 
-        /* Only if we still lock at the same block device we can reuse the fd. Otherwise return an
+        /* Only if we still look at the same block device we can reuse the fd. Otherwise return an
          * invalidated fd. */
         *ret_fd = fd_devno != MODE_INVALID && fd_devno == devno ? TAKE_FD(fd) : -1;
         return 0;
 }
 
-static int find_os_prefix(const char **ret) {
+static int find_root(Context *context) {
+        _cleanup_free_ char *device = NULL;
         int r;
 
-        assert(ret);
-
-        /* Searches for the right place to look for the OS root. This is relevant in the initrd: in the
-         * initrd the host OS is typically mounted to /sysroot/ — except in setups where /usr/ is a separate
-         * partition, in which case it is mounted to /sysusr/usr/ before being moved to /sysroot/usr/. */
-
-        if (!in_initrd()) {
-                *ret = NULL; /* no prefix */
-                return 0;
-        }
-
-        r = path_is_mount_point("/sysroot", NULL, 0);
-        if (r < 0 && r != -ENOENT)
-                log_debug_errno(r, "Failed to determine whether /sysroot/ is a mount point, assuming it is not: %m");
-        else if (r > 0) {
-                log_debug("/sysroot/ is a mount point, assuming it's the prefix.");
-                *ret = "/sysroot";
-                return 0;
-        }
-
-        r = path_is_mount_point("/sysusr/usr", NULL, 0);
-        if (r < 0 && r != -ENOENT)
-                log_debug_errno(r, "Failed to determine whether /sysusr/usr is a mount point, assuming it is not: %m");
-        else if (r > 0) {
-                log_debug("/sysusr/usr/ is a mount point, assuming /sysusr/ is the prefix.");
-                *ret = "/sysusr";
-                return 0;
-        }
-
-        return -ENOENT;
-}
-
-static int find_root(char **ret, int *ret_fd) {
-        const char *t, *prefix;
-        int r;
-
-        assert(ret);
-        assert(ret_fd);
+        assert(context);
 
         if (arg_node) {
                 if (arg_empty == EMPTY_CREATE) {
-                        _cleanup_close_ int fd = -1;
+                        _cleanup_close_ int fd = -EBADF;
                         _cleanup_free_ char *s = NULL;
 
                         s = strdup(arg_node);
@@ -4593,14 +6137,15 @@
                         if (fd < 0)
                                 return log_error_errno(errno, "Failed to create '%s': %m", arg_node);
 
-                        *ret = TAKE_PTR(s);
-                        *ret_fd = TAKE_FD(fd);
+                        context->node = TAKE_PTR(s);
+                        context->node_is_our_file = true;
+                        context->backing_fd = TAKE_FD(fd);
                         return 0;
                 }
 
                 /* Note that we don't specify a root argument here: if the user explicitly configured a node
                  * we'll take it relative to the host, not the image */
-                r = acquire_root_devno(arg_node, NULL, O_RDONLY|O_CLOEXEC, ret, ret_fd);
+                r = acquire_root_devno(arg_node, NULL, O_RDONLY|O_CLOEXEC, &context->node, &context->backing_fd);
                 if (r == -EUCLEAN)
                         return btrfs_log_dev_root(LOG_ERR, r, arg_node);
                 if (r < 0)
@@ -4611,42 +6156,43 @@
 
         assert(IN_SET(arg_empty, EMPTY_REFUSE, EMPTY_ALLOW));
 
-        /* Let's search for the root device. We look for two cases here: first in /, and then in /usr. The
-         * latter we check for cases where / is a tmpfs and only /usr is an actual persistent block device
-         * (think: volatile setups) */
+        /* If the root mount has been replaced by some form of volatile file system (overlayfs), the
+         * original root block device node is symlinked in /run/systemd/volatile-root. Let's read that
+         * here. */
+        r = readlink_malloc("/run/systemd/volatile-root", &device);
+        if (r == -ENOENT) { /* volatile-root not found */
+                /* Let's search for the root device. We look for two cases here: first in /, and then in /usr. The
+                * latter we check for cases where / is a tmpfs and only /usr is an actual persistent block device
+                * (think: volatile setups) */
 
-        r = find_os_prefix(&prefix);
-        if (r < 0)
-                return log_error_errno(r, "Failed to determine OS prefix: %m");
+                FOREACH_STRING(p, "/", "/usr") {
 
-        FOREACH_STRING(t, "/", "/usr") {
-                _cleanup_free_ char *j = NULL;
-                const char *p;
+                        r = acquire_root_devno(p, arg_root, O_RDONLY|O_DIRECTORY|O_CLOEXEC, &context->node,
+                                               &context->backing_fd);
+                        if (r < 0) {
+                                if (r == -EUCLEAN)
+                                        return btrfs_log_dev_root(LOG_ERR, r, p);
+                                if (r != -ENODEV)
+                                        return log_error_errno(r, "Failed to determine backing device of %s: %m", p);
+                        } else
+                                return 0;
+                }
+        } else if (r < 0)
+                return log_error_errno(r, "Failed to read symlink /run/systemd/volatile-root: %m");
+        else {
+                r = acquire_root_devno(device, NULL, O_RDONLY|O_CLOEXEC, &context->node, &context->backing_fd);
+                if (r == -EUCLEAN)
+                        return btrfs_log_dev_root(LOG_ERR, r, device);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to open file or determine backing device of %s: %m", device);
 
-                if (prefix) {
-                        j = path_join(prefix, t);
-                        if (!j)
-                                return log_oom();
-
-                        p = j;
-                } else
-                        p = t;
-
-                r = acquire_root_devno(p, arg_root, O_RDONLY|O_DIRECTORY|O_CLOEXEC, ret, ret_fd);
-                if (r < 0) {
-                        if (r == -EUCLEAN)
-                                return btrfs_log_dev_root(LOG_ERR, r, p);
-                        if (r != -ENODEV)
-                                return log_error_errno(r, "Failed to determine backing device of %s: %m", p);
-                } else
-                        return 0;
+                return 0;
         }
 
         return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "Failed to discover root block device.");
 }
 
-static int resize_pt(int fd) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
+static int resize_pt(int fd, uint64_t sector_size) {
         _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
         int r;
 
@@ -4654,18 +6200,13 @@
          * possession of the enlarged backing file. For this it suffices to open the device with libfdisk and
          * immediately write it again, with no changes. */
 
-        c = fdisk_new_context();
-        if (!c)
-                return log_oom();
-
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-        r = fdisk_assign_device(c, procfs_path, 0);
+        r = fdisk_new_context_fd(fd, /* read_only= */ false, sector_size, &c);
         if (r < 0)
-                return log_error_errno(r, "Failed to open device '%s': %m", procfs_path);
+                return log_error_errno(r, "Failed to open device '%s': %m", FORMAT_PROC_FD_PATH(fd));
 
         r = fdisk_has_label(c);
         if (r < 0)
-                return log_error_errno(r, "Failed to determine whether disk '%s' has a disk label: %m", procfs_path);
+                return log_error_errno(r, "Failed to determine whether disk '%s' has a disk label: %m", FORMAT_PROC_FD_PATH(fd));
         if (r == 0) {
                 log_debug("Not resizing partition table, as there currently is none.");
                 return 0;
@@ -4683,10 +6224,10 @@
                 const char *node,           /* The primary way we access the disk image to operate on */
                 int *fd,                    /* An O_RDONLY fd referring to that inode */
                 const char *backing_file,   /* If the above refers to a loopback device, the backing regular file for that, which we can grow */
-                LoopDevice *loop_device) {
+                LoopDevice *loop_device,
+                uint64_t sector_size) {
 
-        char buf1[FORMAT_BYTES_MAX], buf2[FORMAT_BYTES_MAX];
-        _cleanup_close_ int writable_fd = -1;
+        _cleanup_close_ int writable_fd = -EBADF;
         uint64_t current_size;
         struct stat st;
         int r;
@@ -4726,11 +6267,9 @@
                 current_size = st.st_size;
         }
 
-        assert_se(format_bytes(buf1, sizeof(buf1), current_size));
-        assert_se(format_bytes(buf2, sizeof(buf2), arg_size));
-
         if (current_size >= arg_size) {
-                log_info("File '%s' already is of requested size or larger, not growing. (%s >= %s)", node, buf1, buf2);
+                log_info("File '%s' already is of requested size or larger, not growing. (%s >= %s)",
+                         node, FORMAT_BYTES(current_size), FORMAT_BYTES(arg_size));
                 return 0;
         }
 
@@ -4753,7 +6292,8 @@
 
                 if ((uint64_t) st.st_size != current_size)
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Size of backing file '%s' of loopback block device '%s' don't match, refusing.", node, backing_file);
+                                               "Size of backing file '%s' of loopback block device '%s' don't match, refusing.",
+                                               node, backing_file);
         } else {
                 assert(S_ISREG(st.st_mode));
                 assert(!backing_file);
@@ -4771,15 +6311,16 @@
                 if (fallocate(writable_fd, 0, 0, arg_size) < 0) {
                         if (!ERRNO_IS_NOT_SUPPORTED(errno))
                                 return log_error_errno(errno, "Failed to grow '%s' from %s to %s by allocation: %m",
-                                                       node, buf1, buf2);
+                                                       node, FORMAT_BYTES(current_size), FORMAT_BYTES(arg_size));
 
                         /* Fallback to truncation, if fallocate() is not supported. */
                         log_debug("Backing file system does not support fallocate(), falling back to ftruncate().");
                 } else {
                         if (current_size == 0) /* Likely regular file just created by us */
-                                log_info("Allocated %s for '%s'.", buf2, node);
+                                log_info("Allocated %s for '%s'.", FORMAT_BYTES(arg_size), node);
                         else
-                                log_info("File '%s' grown from %s to %s by allocation.", node, buf1, buf2);
+                                log_info("File '%s' grown from %s to %s by allocation.",
+                                         node, FORMAT_BYTES(current_size), FORMAT_BYTES(arg_size));
 
                         goto done;
                 }
@@ -4787,15 +6328,16 @@
 
         if (ftruncate(writable_fd, arg_size) < 0)
                 return log_error_errno(errno, "Failed to grow '%s' from %s to %s by truncation: %m",
-                                       node, buf1, buf2);
+                                       node, FORMAT_BYTES(current_size), FORMAT_BYTES(arg_size));
 
         if (current_size == 0) /* Likely regular file just created by us */
-                log_info("Sized '%s' to %s.", node, buf2);
+                log_info("Sized '%s' to %s.", node, FORMAT_BYTES(arg_size));
         else
-                log_info("File '%s' grown from %s to %s by truncation.", node, buf1, buf2);
+                log_info("File '%s' grown from %s to %s by truncation.",
+                         node, FORMAT_BYTES(current_size), FORMAT_BYTES(arg_size));
 
 done:
-        r = resize_pt(writable_fd);
+        r = resize_pt(writable_fd, sector_size);
         if (r < 0)
                 return r;
 
@@ -4809,11 +6351,11 @@
 }
 
 static int determine_auto_size(Context *c) {
-        uint64_t sum = round_up_size(GPT_METADATA_SIZE, 4096);
-        char buf[FORMAT_BYTES_MAX];
-        Partition *p;
+        uint64_t sum;
 
-        assert_se(c);
+        assert(c);
+
+        sum = round_up_size(GPT_METADATA_SIZE, 4096);
 
         LIST_FOREACH(partitions, p, c->partitions) {
                 uint64_t m;
@@ -4821,15 +6363,21 @@
                 if (p->dropped)
                         continue;
 
-                m = partition_min_size_with_padding(p);
+                m = partition_min_size_with_padding(c, p);
                 if (m > UINT64_MAX - sum)
                         return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Image would grow too large, refusing.");
 
                 sum += m;
         }
 
-        assert_se(format_bytes(buf, sizeof(buf), sum));
-        log_info("Automatically determined minimal disk image size as %s.", buf);
+        if (c->total != UINT64_MAX)
+                /* Image already allocated? Then show its size. */
+                log_info("Automatically determined minimal disk image size as %s, current image size is %s.",
+                         FORMAT_BYTES(sum), FORMAT_BYTES(c->total));
+        else
+                /* If the image is being created right now, then it has no previous size, suppress any comment about it hence. */
+                log_info("Automatically determined minimal disk image size as %s.",
+                         FORMAT_BYTES(sum));
 
         arg_size = sum;
         return 0;
@@ -4837,12 +6385,9 @@
 
 static int run(int argc, char *argv[]) {
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
         _cleanup_(context_freep) Context* context = NULL;
-        _cleanup_free_ char *node = NULL;
-        _cleanup_close_ int backing_fd = -1;
-        bool from_scratch, node_is_our_loop = false;
+        bool node_is_our_loop = false;
         int r;
 
         log_show_color(true);
@@ -4879,8 +6424,7 @@
                                 DISSECT_IMAGE_USR_NO_ROOT |
                                 DISSECT_IMAGE_REQUIRE_ROOT,
                                 &mounted_dir,
-                                &loop_device,
-                                &decrypted_image);
+                                &loop_device);
                 if (r < 0)
                         return r;
 
@@ -4903,36 +6447,34 @@
         if (!context)
                 return log_oom();
 
+        strv_uniq(arg_definitions);
+
         r = context_read_definitions(context, arg_definitions, arg_root);
         if (r < 0)
                 return r;
 
-        if (context->n_partitions <= 0 && arg_empty == EMPTY_REFUSE) {
-                log_info("Didn't find any partition definition files, nothing to do.");
-                return 0;
-        }
-
-        r = find_root(&node, &backing_fd);
+        r = find_root(context);
         if (r < 0)
                 return r;
 
         if (arg_size != UINT64_MAX) {
                 r = resize_backing_fd(
-                                node,
-                                &backing_fd,
+                                context->node,
+                                &context->backing_fd,
                                 node_is_our_loop ? arg_image : NULL,
-                                node_is_our_loop ? loop_device : NULL);
+                                node_is_our_loop ? loop_device : NULL,
+                                context->sector_size);
                 if (r < 0)
                         return r;
         }
 
-        r = context_load_partition_table(context, node, &backing_fd);
+        r = context_load_partition_table(context);
         if (r == -EHWPOISON)
                 return 77; /* Special return value which means "Not GPT, so not doing anything". This isn't
                             * really an error when called at boot. */
         if (r < 0)
                 return r;
-        from_scratch = r > 0; /* Starting from scratch */
+        context->from_scratch = r > 0; /* Starting from scratch */
 
         if (arg_can_factory_reset) {
                 r = context_can_factory_reset(context);
@@ -4944,7 +6486,7 @@
                 return 0;
         }
 
-        r = context_factory_reset(context, from_scratch);
+        r = context_factory_reset(context);
         if (r < 0)
                 return r;
         if (r > 0) {
@@ -4955,24 +6497,27 @@
 
                 /* Reload the reduced partition table */
                 context_unload_partition_table(context);
-                r = context_load_partition_table(context, node, &backing_fd);
+                r = context_load_partition_table(context);
                 if (r < 0)
                         return r;
         }
 
-#if 0
-        (void) context_dump_partitions(context, node);
-        putchar('\n');
-#endif
-
         r = context_read_seed(context, arg_root);
         if (r < 0)
                 return r;
 
+        /* Make sure each partition has a unique UUID and unique label */
+        r = context_acquire_partition_uuids_and_labels(context);
+        if (r < 0)
+                return r;
+
+        r = context_minimize(context);
+        if (r < 0)
+                return r;
+
         /* Open all files to copy blocks from now, since we want to take their size into consideration */
         r = context_open_copy_block_paths(
                         context,
-                        arg_root,
                         loop_device ? loop_device->devno :         /* if --image= is specified, only allow partitions on the loopback device */
                                       arg_root && !arg_image ? 0 : /* if --root= is specified, don't accept any block device */
                                       (dev_t) -1);                 /* if neither is specified, make no restrictions */
@@ -4987,29 +6532,32 @@
                 /* Flush out everything again, and let's grow the file first, then start fresh */
                 context_unload_partition_table(context);
 
-                assert_se(arg_size != UINT64_MAX);
+                assert(arg_size != UINT64_MAX);
                 r = resize_backing_fd(
-                                node,
-                                &backing_fd,
+                                context->node,
+                                &context->backing_fd,
                                 node_is_our_loop ? arg_image : NULL,
-                                node_is_our_loop ? loop_device : NULL);
+                                node_is_our_loop ? loop_device : NULL,
+                                context->sector_size);
                 if (r < 0)
                         return r;
 
-                r = context_load_partition_table(context, node, &backing_fd);
+                r = context_load_partition_table(context);
                 if (r < 0)
                         return r;
         }
 
         /* First try to fit new partitions in, dropping by priority until it fits */
         for (;;) {
-                if (context_allocate_partitions(context))
+                uint64_t largest_free_area;
+
+                if (context_allocate_partitions(context, &largest_free_area))
                         break; /* Success! */
 
-                if (!context_drop_one_priority(context)) {
+                if (!context_drop_or_foreignize_one_priority(context)) {
                         r = log_error_errno(SYNTHETIC_ERRNO(ENOSPC),
-                                            "Can't fit requested partitions into free space, refusing.");
-
+                                            "Can't fit requested partitions into available free space (%s), refusing.",
+                                            FORMAT_BYTES(largest_free_area));
                         determine_auto_size(context);
                         return r;
                 }
@@ -5020,18 +6568,26 @@
         if (r < 0)
                 return r;
 
-        /* Now calculate where each partition gets placed */
+        /* Now calculate where each new partition gets placed */
         context_place_partitions(context);
 
-        /* Make sure each partition has a unique UUID and unique label */
-        r = context_acquire_partition_uuids_and_labels(context);
+        (void) context_dump(context, /*late=*/ false);
+
+        r = context_write_partition_table(context);
         if (r < 0)
                 return r;
 
-        r = context_write_partition_table(context, node, from_scratch);
+        r = context_split(context);
         if (r < 0)
                 return r;
 
+        (void) context_dump(context, /*late=*/ true);
+
+        context->node = mfree(context->node);
+
+        LIST_FOREACH(partitions, p, context->partitions)
+                p->split_path = mfree(p->split_path);
+
         return 0;
 }
 
diff --git a/src/partition/test-repart.sh b/src/partition/test-repart.sh
deleted file mode 100755
index 525be8e..0000000
--- a/src/partition/test-repart.sh
+++ /dev/null
@@ -1,218 +0,0 @@
-#!/usr/bin/env bash
-# SPDX-License-Identifier: LGPL-2.1-or-later
-set -eux
-set -o pipefail
-
-[[ -e /dev/loop-control ]] || exit 77
-
-repart="${1:?}"
-test -x "$repart"
-
-D="$(mktemp --tmpdir --directory "test-repart.XXXXXXXXXX")"
-
-# shellcheck disable=SC2064
-trap "rm -rf '$D'" EXIT INT QUIT PIPE
-mkdir -p "$D/definitions"
-
-SEED=e2a40bf9-73f1-4278-9160-49c031e7aef8
-
-echo "### Testing systemd-repart --empty=create ###"
-
-"$repart" "$D/zzz" --empty=create --size=1G --seed="$SEED"
-
-sfdisk -d "$D/zzz" | grep -v -e 'sector-size' -e '^$' >"$D/empty"
-
-cmp "$D/empty" - <<EOF
-label: gpt
-label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
-device: $D/zzz
-unit: sectors
-first-lba: 2048
-last-lba: 2097118
-EOF
-
-echo "### Testing with root, root2, home, & swap ###"
-
-cat >"$D/definitions/root.conf" <<EOF
-[Partition]
-Type=root-x86-64
-EOF
-
-ln -s root.conf "$D/definitions/root2.conf"
-
-cat >"$D/definitions/home.conf" <<EOF
-[Partition]
-Type=home
-Label=home-first
-Label=home-always-too-long-xxxxxxxxxxxxxx-%v
-EOF
-
-cat >"$D/definitions/swap.conf" <<EOF
-[Partition]
-Type=swap
-SizeMaxBytes=64M
-PaddingMinBytes=92M
-EOF
-
-"$repart" "$D/zzz" --dry-run=no --seed="$SEED" --definitions="$D/definitions"
-
-sfdisk -d "$D/zzz" | grep -v -e 'sector-size' -e '^$' >"$D/populated"
-
-cmp "$D/populated" - <<EOF
-label: gpt
-label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
-device: $D/zzz
-unit: sectors
-first-lba: 2048
-last-lba: 2097118
-$D/zzz1 : start=        2048, size=      591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first", attrs="GUID:59"
-$D/zzz2 : start=      593904, size=      591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64", attrs="GUID:59"
-$D/zzz3 : start=     1185760, size=      591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2", attrs="GUID:59"
-$D/zzz4 : start=     1777624, size=      131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
-EOF
-
-echo "### Testing with root, root2, home, swap, & another partition ###"
-
-cat >"$D/definitions/swap.conf" <<EOF
-[Partition]
-Type=swap
-SizeMaxBytes=64M
-EOF
-
-cat >"$D/definitions/extra.conf" <<EOF
-[Partition]
-Type=linux-generic
-Label=custom_label
-UUID=a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
-EOF
-
-echo "Label=ignored_label" >>"$D/definitions/home.conf"
-echo "UUID=b0b1b2b3b4b5b6b7b8b9babbbcbdbebf" >>"$D/definitions/home.conf"
-
-"$repart" "$D/zzz" --dry-run=no --seed="$SEED" --definitions="$D/definitions"
-
-sfdisk -d "$D/zzz" | grep -v -e 'sector-size' -e '^$' >"$D/populated2"
-
-cmp "$D/populated2" - <<EOF
-label: gpt
-label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
-device: $D/zzz
-unit: sectors
-first-lba: 2048
-last-lba: 2097118
-$D/zzz1 : start=        2048, size=      591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first", attrs="GUID:59"
-$D/zzz2 : start=      593904, size=      591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64", attrs="GUID:59"
-$D/zzz3 : start=     1185760, size=      591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2", attrs="GUID:59"
-$D/zzz4 : start=     1777624, size=      131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
-$D/zzz5 : start=     1908696, size=      188416, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
-EOF
-
-echo "### Resizing to 2G ###"
-
-"$repart" "$D/zzz" --size=2G --dry-run=no --seed="$SEED" --definitions="$D/definitions"
-
-sfdisk -d "$D/zzz" | grep -v -e 'sector-size' -e '^$' >"$D/populated3"
-
-cmp "$D/populated3" - <<EOF
-label: gpt
-label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
-device: $D/zzz
-unit: sectors
-first-lba: 2048
-last-lba: 4194270
-$D/zzz1 : start=        2048, size=      591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first", attrs="GUID:59"
-$D/zzz2 : start=      593904, size=      591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64", attrs="GUID:59"
-$D/zzz3 : start=     1185760, size=      591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2", attrs="GUID:59"
-$D/zzz4 : start=     1777624, size=      131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
-$D/zzz5 : start=     1908696, size=     2285568, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
-EOF
-
-dd if=/dev/urandom of="$D/block-copy" bs=4096 count=10240
-
-echo "### Testing with root, root2, home, swap, another partition, & partition copy ###"
-
-cat >"$D/definitions/extra2.conf" <<EOF
-[Partition]
-Type=linux-generic
-Label=block-copy
-UUID=2a1d97e1d0a346cca26eadc643926617
-CopyBlocks=$D/block-copy
-EOF
-
-"$repart" "$D/zzz" --size=3G --dry-run=no --seed="$SEED" --definitions="$D/definitions"
-
-sfdisk -d "$D/zzz" | grep -v -e 'sector-size' -e '^$' >"$D/populated4"
-
-cmp "$D/populated4" - <<EOF
-label: gpt
-label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
-device: $D/zzz
-unit: sectors
-first-lba: 2048
-last-lba: 6291422
-$D/zzz1 : start=        2048, size=      591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first", attrs="GUID:59"
-$D/zzz2 : start=      593904, size=      591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64", attrs="GUID:59"
-$D/zzz3 : start=     1185760, size=      591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2", attrs="GUID:59"
-$D/zzz4 : start=     1777624, size=      131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
-$D/zzz5 : start=     1908696, size=     2285568, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
-$D/zzz6 : start=     4194264, size=     2097152, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=2A1D97E1-D0A3-46CC-A26E-ADC643926617, name="block-copy"
-EOF
-
-cmp --bytes=41943040 --ignore-initial=0:$((512*4194264)) "$D/block-copy" "$D/zzz"
-
-if [ "$(id -u)" -eq 0 ] && type -P cryptsetup diff losetup >/dev/null ; then
-    echo "### Testing Format=/Encrypt=/CopyFiles="
-
-    # These tests require privileges unfortunately
-
-    cat >"$D/definitions/extra3.conf" <<EOF
-[Partition]
-Type=linux-generic
-Label=luks-format-copy
-UUID=7b93d1f2-595d-4ce3-b0b9-837fbd9e63b0
-Format=ext4
-Encrypt=yes
-CopyFiles=$D/definitions:/def
-SizeMinBytes=48M
-EOF
-
-    "$repart" "$D/zzz" --size=auto --dry-run=no --seed="$SEED" --definitions="$D/definitions"
-
-    sfdisk -d "$D/zzz" | grep -v -e 'sector-size' -e '^$' >"$D/populated5"
-
-    cmp "$D/populated5" - <<EOF
-label: gpt
-label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
-device: $D/zzz
-unit: sectors
-first-lba: 2048
-last-lba: 6389726
-$D/zzz1 : start=        2048, size=      591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first", attrs="GUID:59"
-$D/zzz2 : start=      593904, size=      591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64", attrs="GUID:59"
-$D/zzz3 : start=     1185760, size=      591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2", attrs="GUID:59"
-$D/zzz4 : start=     1777624, size=      131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
-$D/zzz5 : start=     1908696, size=     2285568, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
-$D/zzz6 : start=     4194264, size=     2097152, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=2A1D97E1-D0A3-46CC-A26E-ADC643926617, name="block-copy"
-$D/zzz7 : start=     6291416, size=       98304, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=7B93D1F2-595D-4CE3-B0B9-837FBD9E63B0, name="luks-format-copy"
-EOF
-
-    LOOP="$(losetup -P --show --find "$D/zzz")"
-    VOLUME="test-repart-$RANDOM"
-
-    touch "$D/empty-password"
-    cryptsetup open --type=luks2 --key-file="$D/empty-password" "${LOOP}p7" "$VOLUME"
-    mkdir "$D/mount"
-    mount -t ext4 "/dev/mapper/$VOLUME" "$D/mount"
-    # Use deferred closing on the mapper and autoclear on the loop, so they are cleaned up on umount
-    cryptsetup close --deferred "$VOLUME"
-    losetup -d "$LOOP"
-    diff -r "$D/mount/def" "$D/definitions" >/dev/null
-    umount "$D/mount"
-else
-    echo "### Skipping Format=/Encrypt=/CopyFiles= test, lacking privileges or missing cryptsetup/diff/losetup"
-fi
-
-echo "### Testing json output ###"
-"$repart" "$D/zzz" --size=3G --dry-run=no --seed="$SEED" --definitions="$D/definitions" --json=help
-"$repart" "$D/zzz" --size=3G --dry-run=no --seed="$SEED" --definitions="$D/definitions" --json=pretty
-"$repart" "$D/zzz" --size=3G --dry-run=no --seed="$SEED" --definitions="$D/definitions" --json=short
diff --git a/src/path/path.c b/src/path/path.c
index aec75f1..5266240 100644
--- a/src/path/path.c
+++ b/src/path/path.c
@@ -8,81 +8,86 @@
 #include "sd-path.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "log.h"
 #include "macro.h"
 #include "main-func.h"
 #include "pretty-print.h"
 #include "string-util.h"
-#include "util.h"
 
 static const char *arg_suffix = NULL;
 
 static const char* const path_table[_SD_PATH_MAX] = {
-        [SD_PATH_TEMPORARY]                       = "temporary",
-        [SD_PATH_TEMPORARY_LARGE]                 = "temporary-large",
-        [SD_PATH_SYSTEM_BINARIES]                 = "system-binaries",
-        [SD_PATH_SYSTEM_INCLUDE]                  = "system-include",
-        [SD_PATH_SYSTEM_LIBRARY_PRIVATE]          = "system-library-private",
-        [SD_PATH_SYSTEM_LIBRARY_ARCH]             = "system-library-arch",
-        [SD_PATH_SYSTEM_SHARED]                   = "system-shared",
-        [SD_PATH_SYSTEM_CONFIGURATION_FACTORY]    = "system-configuration-factory",
-        [SD_PATH_SYSTEM_STATE_FACTORY]            = "system-state-factory",
-        [SD_PATH_SYSTEM_CONFIGURATION]            = "system-configuration",
-        [SD_PATH_SYSTEM_RUNTIME]                  = "system-runtime",
-        [SD_PATH_SYSTEM_RUNTIME_LOGS]             = "system-runtime-logs",
-        [SD_PATH_SYSTEM_STATE_PRIVATE]            = "system-state-private",
-        [SD_PATH_SYSTEM_STATE_LOGS]               = "system-state-logs",
-        [SD_PATH_SYSTEM_STATE_CACHE]              = "system-state-cache",
-        [SD_PATH_SYSTEM_STATE_SPOOL]              = "system-state-spool",
-        [SD_PATH_USER_BINARIES]                   = "user-binaries",
-        [SD_PATH_USER_LIBRARY_PRIVATE]            = "user-library-private",
-        [SD_PATH_USER_LIBRARY_ARCH]               = "user-library-arch",
-        [SD_PATH_USER_SHARED]                     = "user-shared",
-        [SD_PATH_USER_CONFIGURATION]              = "user-configuration",
-        [SD_PATH_USER_RUNTIME]                    = "user-runtime",
-        [SD_PATH_USER_STATE_CACHE]                = "user-state-cache",
-        [SD_PATH_USER]                            = "user",
-        [SD_PATH_USER_DOCUMENTS]                  = "user-documents",
-        [SD_PATH_USER_MUSIC]                      = "user-music",
-        [SD_PATH_USER_PICTURES]                   = "user-pictures",
-        [SD_PATH_USER_VIDEOS]                     = "user-videos",
-        [SD_PATH_USER_DOWNLOAD]                   = "user-download",
-        [SD_PATH_USER_PUBLIC]                     = "user-public",
-        [SD_PATH_USER_TEMPLATES]                  = "user-templates",
-        [SD_PATH_USER_DESKTOP]                    = "user-desktop",
-        [SD_PATH_SEARCH_BINARIES]                 = "search-binaries",
-        [SD_PATH_SEARCH_BINARIES_DEFAULT]         = "search-binaries-default",
-        [SD_PATH_SEARCH_LIBRARY_PRIVATE]          = "search-library-private",
-        [SD_PATH_SEARCH_LIBRARY_ARCH]             = "search-library-arch",
-        [SD_PATH_SEARCH_SHARED]                   = "search-shared",
-        [SD_PATH_SEARCH_CONFIGURATION_FACTORY]    = "search-configuration-factory",
-        [SD_PATH_SEARCH_STATE_FACTORY]            = "search-state-factory",
-        [SD_PATH_SEARCH_CONFIGURATION]            = "search-configuration",
+        [SD_PATH_TEMPORARY]                                   = "temporary",
+        [SD_PATH_TEMPORARY_LARGE]                             = "temporary-large",
+        [SD_PATH_SYSTEM_BINARIES]                             = "system-binaries",
+        [SD_PATH_SYSTEM_INCLUDE]                              = "system-include",
+        [SD_PATH_SYSTEM_LIBRARY_PRIVATE]                      = "system-library-private",
+        [SD_PATH_SYSTEM_LIBRARY_ARCH]                         = "system-library-arch",
+        [SD_PATH_SYSTEM_SHARED]                               = "system-shared",
+        [SD_PATH_SYSTEM_CONFIGURATION_FACTORY]                = "system-configuration-factory",
+        [SD_PATH_SYSTEM_STATE_FACTORY]                        = "system-state-factory",
+        [SD_PATH_SYSTEM_CONFIGURATION]                        = "system-configuration",
+        [SD_PATH_SYSTEM_RUNTIME]                              = "system-runtime",
+        [SD_PATH_SYSTEM_RUNTIME_LOGS]                         = "system-runtime-logs",
+        [SD_PATH_SYSTEM_STATE_PRIVATE]                        = "system-state-private",
+        [SD_PATH_SYSTEM_STATE_LOGS]                           = "system-state-logs",
+        [SD_PATH_SYSTEM_STATE_CACHE]                          = "system-state-cache",
+        [SD_PATH_SYSTEM_STATE_SPOOL]                          = "system-state-spool",
+        [SD_PATH_USER_BINARIES]                               = "user-binaries",
+        [SD_PATH_USER_LIBRARY_PRIVATE]                        = "user-library-private",
+        [SD_PATH_USER_LIBRARY_ARCH]                           = "user-library-arch",
+        [SD_PATH_USER_SHARED]                                 = "user-shared",
+        [SD_PATH_USER_CONFIGURATION]                          = "user-configuration",
+        [SD_PATH_USER_RUNTIME]                                = "user-runtime",
+        [SD_PATH_USER_STATE_CACHE]                            = "user-state-cache",
+        [SD_PATH_USER]                                        = "user",
+        [SD_PATH_USER_DOCUMENTS]                              = "user-documents",
+        [SD_PATH_USER_MUSIC]                                  = "user-music",
+        [SD_PATH_USER_PICTURES]                               = "user-pictures",
+        [SD_PATH_USER_VIDEOS]                                 = "user-videos",
+        [SD_PATH_USER_DOWNLOAD]                               = "user-download",
+        [SD_PATH_USER_PUBLIC]                                 = "user-public",
+        [SD_PATH_USER_TEMPLATES]                              = "user-templates",
+        [SD_PATH_USER_DESKTOP]                                = "user-desktop",
+        [SD_PATH_SEARCH_BINARIES]                             = "search-binaries",
+        [SD_PATH_SEARCH_BINARIES_DEFAULT]                     = "search-binaries-default",
+        [SD_PATH_SEARCH_LIBRARY_PRIVATE]                      = "search-library-private",
+        [SD_PATH_SEARCH_LIBRARY_ARCH]                         = "search-library-arch",
+        [SD_PATH_SEARCH_SHARED]                               = "search-shared",
+        [SD_PATH_SEARCH_CONFIGURATION_FACTORY]                = "search-configuration-factory",
+        [SD_PATH_SEARCH_STATE_FACTORY]                        = "search-state-factory",
+        [SD_PATH_SEARCH_CONFIGURATION]                        = "search-configuration",
 
-        [SD_PATH_SYSTEMD_UTIL]                    = "systemd-util",
-        [SD_PATH_SYSTEMD_SYSTEM_UNIT]             = "systemd-system-unit",
-        [SD_PATH_SYSTEMD_SYSTEM_PRESET]           = "systemd-system-preset",
-        [SD_PATH_SYSTEMD_SYSTEM_CONF]             = "systemd-system-conf",
-        [SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT]      = "systemd-search-system-unit",
-        [SD_PATH_SYSTEMD_SYSTEM_GENERATOR]        = "systemd-system-generator",
-        [SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR] = "systemd-search-system-generator",
-        [SD_PATH_SYSTEMD_USER_UNIT]               = "systemd-user-unit",
-        [SD_PATH_SYSTEMD_USER_PRESET]             = "systemd-user-preset",
-        [SD_PATH_SYSTEMD_USER_CONF]               = "systemd-user-conf",
-        [SD_PATH_SYSTEMD_SEARCH_USER_UNIT]        = "systemd-search-user-unit",
-        [SD_PATH_SYSTEMD_SEARCH_USER_GENERATOR]   = "systemd-search-user-generator",
-        [SD_PATH_SYSTEMD_USER_GENERATOR]          = "systemd-user-generator",
-        [SD_PATH_SYSTEMD_SLEEP]                   = "systemd-sleep",
-        [SD_PATH_SYSTEMD_SHUTDOWN]                = "systemd-shutdown",
+        [SD_PATH_SYSTEMD_UTIL]                                = "systemd-util",
+        [SD_PATH_SYSTEMD_SYSTEM_UNIT]                         = "systemd-system-unit",
+        [SD_PATH_SYSTEMD_SYSTEM_PRESET]                       = "systemd-system-preset",
+        [SD_PATH_SYSTEMD_SYSTEM_CONF]                         = "systemd-system-conf",
+        [SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT]                  = "systemd-search-system-unit",
+        [SD_PATH_SYSTEMD_SYSTEM_GENERATOR]                    = "systemd-system-generator",
+        [SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR]             = "systemd-search-system-generator",
+        [SD_PATH_SYSTEMD_USER_UNIT]                           = "systemd-user-unit",
+        [SD_PATH_SYSTEMD_USER_PRESET]                         = "systemd-user-preset",
+        [SD_PATH_SYSTEMD_USER_CONF]                           = "systemd-user-conf",
+        [SD_PATH_SYSTEMD_SEARCH_USER_UNIT]                    = "systemd-search-user-unit",
+        [SD_PATH_SYSTEMD_SEARCH_USER_GENERATOR]               = "systemd-search-user-generator",
+        [SD_PATH_SYSTEMD_USER_GENERATOR]                      = "systemd-user-generator",
+        [SD_PATH_SYSTEMD_SLEEP]                               = "systemd-sleep",
+        [SD_PATH_SYSTEMD_SHUTDOWN]                            = "systemd-shutdown",
 
-        [SD_PATH_TMPFILES]                        = "tmpfiles",
-        [SD_PATH_SYSUSERS]                        = "sysusers",
-        [SD_PATH_SYSCTL]                          = "sysctl",
-        [SD_PATH_BINFMT]                          = "binfmt",
-        [SD_PATH_MODULES_LOAD]                    = "modules-load",
-        [SD_PATH_CATALOG]                         = "catalog",
+        [SD_PATH_TMPFILES]                                    = "tmpfiles",
+        [SD_PATH_SYSUSERS]                                    = "sysusers",
+        [SD_PATH_SYSCTL]                                      = "sysctl",
+        [SD_PATH_BINFMT]                                      = "binfmt",
+        [SD_PATH_MODULES_LOAD]                                = "modules-load",
+        [SD_PATH_CATALOG]                                     = "catalog",
 
-        [SD_PATH_SYSTEMD_SEARCH_NETWORK]          = "systemd-search-network",
+        [SD_PATH_SYSTEMD_SEARCH_NETWORK]                      = "systemd-search-network",
+
+        [SD_PATH_SYSTEMD_SYSTEM_ENVIRONMENT_GENERATOR]        = "systemd-system-environment-generator",
+        [SD_PATH_SYSTEMD_USER_ENVIRONMENT_GENERATOR]          = "systemd-user-environment-generator",
+        [SD_PATH_SYSTEMD_SEARCH_SYSTEM_ENVIRONMENT_GENERATOR] = "systemd-search-system-environment-generator",
+        [SD_PATH_SYSTEMD_SEARCH_USER_ENVIRONMENT_GENERATOR]   = "systemd-search-user-environment-generator",
 };
 
 static int list_homes(void) {
@@ -185,7 +190,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/portable/meson.build b/src/portable/meson.build
index 8f866f5..3a151d4 100644
--- a/src/portable/meson.build
+++ b/src/portable/meson.build
@@ -1,18 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_portabled_sources = files('''
-        portable.c
-        portable.h
-        portabled-bus.c
-        portabled-image-bus.c
-        portabled-image-bus.h
-        portabled-image.c
-        portabled-image.h
-        portabled-operation.c
-        portabled-operation.h
-        portabled.c
-        portabled.h
-'''.split())
+systemd_portabled_sources = files(
+        'portable.c',
+        'portabled-bus.c',
+        'portabled-image-bus.c',
+        'portabled-image.c',
+        'portabled-operation.c',
+        'portabled.c',
+)
 
 if conf.get('ENABLE_PORTABLED') == 1
         install_data('org.freedesktop.portable1.conf',
@@ -22,8 +17,8 @@
         install_data('org.freedesktop.portable1.policy',
                      install_dir : polkitpolicydir)
 
-        install_data('profile/default/service.conf', install_dir : join_paths(profiledir, 'default'))
-        install_data('profile/nonetwork/service.conf', install_dir : join_paths(profiledir, 'nonetwork'))
-        install_data('profile/strict/service.conf', install_dir : join_paths(profiledir, 'strict'))
-        install_data('profile/trusted/service.conf', install_dir : join_paths(profiledir, 'trusted'))
+        install_data('profile/default/service.conf', install_dir : profiledir / 'default')
+        install_data('profile/nonetwork/service.conf', install_dir : profiledir / 'nonetwork')
+        install_data('profile/strict/service.conf', install_dir : profiledir / 'strict')
+        install_data('profile/trusted/service.conf', install_dir : profiledir / 'trusted')
 endif
diff --git a/src/portable/org.freedesktop.portable1.conf b/src/portable/org.freedesktop.portable1.conf
index 5a09f5c..4899305 100644
--- a/src/portable/org.freedesktop.portable1.conf
+++ b/src/portable/org.freedesktop.portable1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
diff --git a/src/portable/org.freedesktop.portable1.policy b/src/portable/org.freedesktop.portable1.policy
index 09f9028..a26b00f 100644
--- a/src/portable/org.freedesktop.portable1.policy
+++ b/src/portable/org.freedesktop.portable1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 
diff --git a/src/portable/portable.c b/src/portable/portable.c
index 23fe6bf..7811833 100644
--- a/src/portable/portable.c
+++ b/src/portable/portable.c
@@ -4,14 +4,16 @@
 
 #include "bus-common-errors.h"
 #include "bus-error.h"
+#include "chase-symlinks.h"
 #include "conf-files.h"
 #include "copy.h"
 #include "data-fd-util.h"
-#include "def.h"
+#include "constants.h"
 #include "dirent-util.h"
 #include "discover-image.h"
 #include "dissect-image.h"
 #include "env-file.h"
+#include "env-util.h"
 #include "errno-list.h"
 #include "escape.h"
 #include "extension-release.h"
@@ -28,6 +30,7 @@
 #include "path-lookup.h"
 #include "portable.h"
 #include "process-util.h"
+#include "selinux-util.h"
 #include "set.h"
 #include "signal-util.h"
 #include "socket-util.h"
@@ -55,7 +58,6 @@
 
 static bool unit_match(const char *unit, char **matches) {
         const char *dot;
-        char **i;
 
         dot = strrchr(unit, '.');
         if (!dot)
@@ -76,7 +78,7 @@
         return false;
 }
 
-static PortableMetadata *portable_metadata_new(const char *name, const char *path, int fd) {
+static PortableMetadata *portable_metadata_new(const char *name, const char *path, const char *selinux_label, int fd) {
         PortableMetadata *m;
 
         m = malloc0(offsetof(PortableMetadata, name) + strlen(name) + 1);
@@ -86,9 +88,16 @@
         /* In case of a layered attach, we want to remember which image the unit came from */
         if (path) {
                 m->image_path = strdup(path);
-                if (!m->image_path) {
-                        free(m);
-                        return NULL;
+                if (!m->image_path)
+                        return mfree(m);
+        }
+
+        /* The metadata file might have SELinux labels, we need to carry them and reapply them */
+        if (!isempty(selinux_label)) {
+                m->selinux_label = strdup(selinux_label);
+                if (!m->selinux_label) {
+                        free(m->image_path);
+                        return mfree(m);
                 }
         }
 
@@ -105,6 +114,7 @@
         safe_close(i->fd);
         free(i->source);
         free(i->image_path);
+        free(i->selinux_label);
 
         return mfree(i);
 }
@@ -134,96 +144,23 @@
         return 0;
 }
 
-static int send_item(
+static int send_one_fd_iov_with_data_fd(
                 int socket_fd,
-                const char *name,
+                const struct iovec *iov,
+                size_t iovlen,
                 int fd) {
 
-        CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(int))) control = {};
-        struct iovec iovec;
-        struct msghdr mh = {
-                .msg_control = &control,
-                .msg_controllen = sizeof(control),
-                .msg_iov = &iovec,
-                .msg_iovlen = 1,
-        };
-        struct cmsghdr *cmsg;
-        _cleanup_close_ int data_fd = -1;
+        _cleanup_close_ int data_fd = -EBADF;
 
+        assert(iov || iovlen == 0);
         assert(socket_fd >= 0);
-        assert(name);
         assert(fd >= 0);
 
         data_fd = copy_data_fd(fd);
         if (data_fd < 0)
                 return data_fd;
 
-        cmsg = CMSG_FIRSTHDR(&mh);
-        cmsg->cmsg_level = SOL_SOCKET;
-        cmsg->cmsg_type = SCM_RIGHTS;
-        cmsg->cmsg_len = CMSG_LEN(sizeof(int));
-        memcpy(CMSG_DATA(cmsg), &data_fd, sizeof(int));
-
-        iovec = IOVEC_MAKE_STRING(name);
-
-        if (sendmsg(socket_fd, &mh, MSG_NOSIGNAL) < 0)
-                return -errno;
-
-        return 0;
-}
-
-static int recv_item(
-                int socket_fd,
-                char **ret_name,
-                int *ret_fd) {
-
-        CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(int))) control;
-        char buffer[PATH_MAX+2];
-        struct iovec iov = IOVEC_INIT(buffer, sizeof(buffer)-1);
-        struct msghdr mh = {
-                .msg_control = &control,
-                .msg_controllen = sizeof(control),
-                .msg_iov = &iov,
-                .msg_iovlen = 1,
-        };
-        struct cmsghdr *cmsg;
-        _cleanup_close_ int found_fd = -1;
-        char *copy;
-        ssize_t n;
-
-        assert(socket_fd >= 0);
-        assert(ret_name);
-        assert(ret_fd);
-
-        n = recvmsg_safe(socket_fd, &mh, MSG_CMSG_CLOEXEC);
-        if (n < 0)
-                return (int) n;
-
-        CMSG_FOREACH(cmsg, &mh) {
-                if (cmsg->cmsg_level == SOL_SOCKET &&
-                    cmsg->cmsg_type == SCM_RIGHTS) {
-
-                        if (cmsg->cmsg_len == CMSG_LEN(sizeof(int))) {
-                                assert(found_fd < 0);
-                                found_fd = *(int*) CMSG_DATA(cmsg);
-                                break;
-                        }
-
-                        cmsg_close_all(&mh);
-                        return -EIO;
-                }
-        }
-
-        buffer[n] = 0;
-
-        copy = strdup(buffer);
-        if (!copy)
-                return -ENOMEM;
-
-        *ret_name = copy;
-        *ret_fd = TAKE_FD(found_fd);
-
-        return 0;
+        return send_one_fd_iov(socket_fd, data_fd, iov, iovlen, 0);
 }
 
 DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(portable_metadata_hash_ops, char, string_hash_func, string_compare_func,
@@ -234,6 +171,7 @@
                 char **matches,
                 const char *image_name,
                 bool path_is_extension,
+                bool relax_extension_release_check,
                 int socket_fd,
                 PortableMetadata **ret_os_release,
                 Hashmap **ret_unit_files) {
@@ -241,10 +179,9 @@
         _cleanup_hashmap_free_ Hashmap *unit_files = NULL;
         _cleanup_(portable_metadata_unrefp) PortableMetadata *os_release = NULL;
         _cleanup_(lookup_paths_free) LookupPaths paths = {};
-        _cleanup_close_ int os_release_fd = -1;
+        _cleanup_close_ int os_release_fd = -EBADF;
         _cleanup_free_ char *os_release_path = NULL;
         const char *os_release_id;
-        char **i;
         int r;
 
         /* Extracts the metadata from a directory tree 'where'. Extracts two kinds of information: the /etc/os-release
@@ -261,7 +198,7 @@
         /* First, find os-release/extension-release and send it upstream (or just save it). */
         if (path_is_extension) {
                 os_release_id = strjoina("/usr/lib/extension-release.d/extension-release.", image_name);
-                r = open_extension_release(where, image_name, &os_release_path, &os_release_fd);
+                r = open_extension_release(where, image_name, relax_extension_release_check, &os_release_path, &os_release_fd);
         } else {
                 os_release_id = "/etc/os-release";
                 r = open_os_release(where, &os_release_path, &os_release_fd);
@@ -272,17 +209,22 @@
                                 path_is_extension ? "extension-release " : "os-release");
         else {
                 if (socket_fd >= 0) {
-                        r = send_item(socket_fd, os_release_id, os_release_fd);
+                        struct iovec iov[] = {
+                                IOVEC_MAKE_STRING(os_release_id),
+                                IOVEC_MAKE((char *)"\0", sizeof(char)),
+                        };
+
+                        r = send_one_fd_iov_with_data_fd(socket_fd, iov, ELEMENTSOF(iov), os_release_fd);
                         if (r < 0)
                                 return log_debug_errno(r, "Failed to send os-release file: %m");
                 }
 
                 if (ret_os_release) {
-                        os_release = portable_metadata_new(os_release_id, NULL, os_release_fd);
+                        os_release = portable_metadata_new(os_release_id, NULL, NULL, os_release_fd);
                         if (!os_release)
                                 return -ENOMEM;
 
-                        os_release_fd = -1;
+                        os_release_fd = -EBADF;
                         os_release->source = TAKE_PTR(os_release_path);
                 }
         }
@@ -290,7 +232,7 @@
         /* Then, send unit file data to the parent (or/and add it to the hashmap). For that we use our usual unit
          * discovery logic. Note that we force looking inside of /lib/systemd/system/ for units too, as we mightbe
          * compiled for a split-usr system but the image might be a legacy-usr one. */
-        r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, where);
+        r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, where);
         if (r < 0)
                 return log_debug_errno(r, "Failed to acquire lookup paths: %m");
 
@@ -301,7 +243,6 @@
         STRV_FOREACH(i, paths.search_path) {
                 _cleanup_free_ char *resolved = NULL;
                 _cleanup_closedir_ DIR *d = NULL;
-                struct dirent *de;
 
                 r = chase_symlinks_and_opendir(*i, where, 0, &resolved, &d);
                 if (r < 0) {
@@ -311,7 +252,8 @@
 
                 FOREACH_DIRENT(de, d, return log_debug_errno(errno, "Failed to read directory: %m")) {
                         _cleanup_(portable_metadata_unrefp) PortableMetadata *m = NULL;
-                        _cleanup_close_ int fd = -1;
+                        _cleanup_(mac_selinux_freep) char *con = NULL;
+                        _cleanup_close_ int fd = -EBADF;
 
                         if (!unit_name_is_valid(de->d_name, UNIT_NAME_ANY))
                                 continue;
@@ -332,16 +274,31 @@
                                 continue;
                         }
 
+#if HAVE_SELINUX
+                        /* The units will be copied on the host's filesystem, so if they had a SELinux label
+                         * we have to preserve it. Copy it out so that it can be applied later. */
+
+                        r = fgetfilecon_raw(fd, &con);
+                        if (r < 0 && !ERRNO_IS_XATTR_ABSENT(errno))
+                                log_debug_errno(errno, "Failed to get SELinux file context from '%s', ignoring: %m", de->d_name);
+#endif
+
                         if (socket_fd >= 0) {
-                                r = send_item(socket_fd, de->d_name, fd);
+                                struct iovec iov[] = {
+                                        IOVEC_MAKE_STRING(de->d_name),
+                                        IOVEC_MAKE((char *)"\0", sizeof(char)),
+                                        IOVEC_MAKE_STRING(strempty(con)),
+                                };
+
+                                r = send_one_fd_iov_with_data_fd(socket_fd, iov, ELEMENTSOF(iov), fd);
                                 if (r < 0)
                                         return log_debug_errno(r, "Failed to send unit metadata to parent: %m");
                         }
 
-                        m = portable_metadata_new(de->d_name, NULL, fd);
+                        m = portable_metadata_new(de->d_name, where, con, fd);
                         if (!m)
                                 return -ENOMEM;
-                        fd = -1;
+                        fd = -EBADF;
 
                         m->source = path_join(resolved, de->d_name);
                         if (!m->source)
@@ -365,6 +322,7 @@
 static int portable_extract_by_path(
                 const char *path,
                 bool path_is_extension,
+                bool relax_extension_release_check,
                 char **matches,
                 PortableMetadata **ret_os_release,
                 Hashmap **ret_unit_files,
@@ -377,12 +335,18 @@
 
         assert(path);
 
-        r = loop_device_make_by_path(path, O_RDONLY, LO_FLAGS_PARTSCAN, &d);
+        r = loop_device_make_by_path(path, O_RDONLY, /* sector_size= */ UINT32_MAX, LO_FLAGS_PARTSCAN, LOCK_SH, &d);
         if (r == -EISDIR) {
+                _cleanup_free_ char *image_name = NULL;
+
                 /* We can't turn this into a loop-back block device, and this returns EISDIR? Then this is a directory
                  * tree and not a raw device. It's easy then. */
 
-                r = extract_now(path, matches, NULL, path_is_extension, -1, &os_release, &unit_files);
+                r = path_extract_filename(path, &image_name);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract image name from path '%s': %m", path);
+
+                r = extract_now(path, matches, image_name, path_is_extension, /* relax_extension_release_check= */ false, -1, &os_release, &unit_files);
                 if (r < 0)
                         return r;
 
@@ -391,7 +355,7 @@
         else {
                 _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
                 _cleanup_(rmdir_and_freep) char *tmpdir = NULL;
-                _cleanup_(close_pairp) int seq[2] = { -1, -1 };
+                _cleanup_(close_pairp) int seq[2] = PIPE_EBADF;
                 _cleanup_(sigkill_waitp) pid_t child = 0;
 
                 /* We now have a loopback block device, let's fork off a child in its own mount namespace, mount it
@@ -403,17 +367,17 @@
                 if (r < 0)
                         return log_debug_errno(r, "Failed to create temporary directory: %m");
 
-                r = dissect_image(
-                                d->fd,
+                r = dissect_loop_device(
+                                d,
                                 NULL, NULL,
-                                d->uevent_seqnum_not_before,
-                                d->timestamp_not_before,
                                 DISSECT_IMAGE_READ_ONLY |
                                 DISSECT_IMAGE_GENERIC_ROOT |
                                 DISSECT_IMAGE_REQUIRE_ROOT |
                                 DISSECT_IMAGE_DISCARD_ON_LOOP |
                                 DISSECT_IMAGE_RELAX_VAR_CHECK |
-                                DISSECT_IMAGE_USR_NO_ROOT,
+                                DISSECT_IMAGE_USR_NO_ROOT |
+                                DISSECT_IMAGE_ADD_PARTITION_DEVICES |
+                                DISSECT_IMAGE_PIN_PARTITION_DEVICES,
                                 &m);
                 if (r == -ENOPKG)
                         sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Couldn't identify a suitable partition table or file system in '%s'.", path);
@@ -440,7 +404,7 @@
                         seq[0] = safe_close(seq[0]);
 
                         if (path_is_extension)
-                                flags |= DISSECT_IMAGE_VALIDATE_OS_EXT;
+                                flags |= DISSECT_IMAGE_VALIDATE_OS_EXT | (relax_extension_release_check ? DISSECT_IMAGE_RELAX_SYSEXT_CHECK : 0);
                         else
                                 flags |= DISSECT_IMAGE_VALIDATE_OS;
 
@@ -450,7 +414,7 @@
                                 goto child_finish;
                         }
 
-                        r = extract_now(tmpdir, matches, m->image_name, path_is_extension, seq[1], NULL, NULL);
+                        r = extract_now(tmpdir, matches, m->image_name, path_is_extension, relax_extension_release_check, seq[1], NULL, NULL);
 
                 child_finish:
                         _exit(r < 0 ? EXIT_FAILURE : EXIT_SUCCESS);
@@ -464,26 +428,40 @@
 
                 for (;;) {
                         _cleanup_(portable_metadata_unrefp) PortableMetadata *add = NULL;
-                        _cleanup_free_ char *name = NULL;
-                        _cleanup_close_ int fd = -1;
+                        _cleanup_close_ int fd = -EBADF;
+                        /* We use NAME_MAX space for the SELinux label here. The kernel currently enforces no limit, but
+                         * according to suggestions from the SELinux people this will change and it will probably be
+                         * identical to NAME_MAX. For now we use that, but this should be updated one day when the final
+                         * limit is known. */
+                        char iov_buffer[PATH_MAX + NAME_MAX + 2];
+                        struct iovec iov = IOVEC_INIT(iov_buffer, sizeof(iov_buffer));
 
-                        r = recv_item(seq[0], &name, &fd);
-                        if (r < 0)
-                                return log_debug_errno(r, "Failed to receive item: %m");
+                        ssize_t n = receive_one_fd_iov(seq[0], &iov, 1, 0, &fd);
+                        if (n == -EIO)
+                                break;
+                        if (n < 0)
+                                return log_debug_errno(n, "Failed to receive item: %m");
+                        iov_buffer[n] = 0;
 
                         /* We can't really distinguish a zero-length datagram without any fds from EOF (both are signalled the
                          * same way by recvmsg()). Hence, accept either as end notification. */
-                        if (isempty(name) && fd < 0)
+                        if (isempty(iov_buffer) && fd < 0)
                                 break;
 
-                        if (isempty(name) || fd < 0)
+                        if (isempty(iov_buffer) || fd < 0)
                                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
                                                        "Invalid item sent from child.");
 
-                        add = portable_metadata_new(name, path, fd);
+                        /* Given recvmsg cannot be used with multiple io vectors if you don't know the size in advance,
+                         * use a marker to separate the name and the optional SELinux context. */
+                        char *selinux_label = memchr(iov_buffer, 0, n);
+                        assert(selinux_label);
+                        selinux_label++;
+
+                        add = portable_metadata_new(iov_buffer, path, selinux_label, fd);
                         if (!add)
                                 return -ENOMEM;
-                        fd = -1;
+                        fd = -EBADF;
 
                         /* Note that we do not initialize 'add->source' here, as the source path is not usable here as
                          * it refers to a path only valid in the short-living namespaced child process we forked
@@ -501,7 +479,7 @@
                                 assert(!os_release);
                                 os_release = TAKE_PTR(add);
                         } else
-                                assert_not_reached("Unexpected metadata item from child.");
+                                assert_not_reached();
                 }
 
                 r = wait_for_terminate_and_check("(sd-dissect)", child, 0);
@@ -531,33 +509,31 @@
                 char **matches,
                 char **extension_image_paths,
                 bool validate_sysext,
+                bool relax_extension_release_check,
                 Image **ret_image,
                 OrderedHashmap **ret_extension_images,
                 OrderedHashmap **ret_extension_releases,
                 PortableMetadata **ret_os_release,
                 Hashmap **ret_unit_files,
+                char ***ret_valid_prefixes,
                 sd_bus_error *error) {
 
         _cleanup_free_ char *id = NULL, *version_id = NULL, *sysext_level = NULL;
         _cleanup_(portable_metadata_unrefp) PortableMetadata *os_release = NULL;
         _cleanup_ordered_hashmap_free_ OrderedHashmap *extension_images = NULL, *extension_releases = NULL;
         _cleanup_hashmap_free_ Hashmap *unit_files = NULL;
+        _cleanup_strv_free_ char **valid_prefixes = NULL;
         _cleanup_(image_unrefp) Image *image = NULL;
         Image *ext;
         int r;
 
         assert(name_or_path);
-        assert(matches);
-        assert(ret_image);
-        assert(ret_extension_images);
 
         r = image_find_harder(IMAGE_PORTABLE, name_or_path, NULL, &image);
         if (r < 0)
                 return r;
 
         if (!strv_isempty(extension_image_paths)) {
-                char **p;
-
                 extension_images = ordered_hashmap_new(&image_hash_ops);
                 if (!extension_images)
                         return -ENOMEM;
@@ -582,14 +558,16 @@
                 }
         }
 
-        r = portable_extract_by_path(image->path, /* path_is_extension= */ false, matches, &os_release, &unit_files, error);
+        r = portable_extract_by_path(image->path, /* path_is_extension= */ false, /* relax_extension_release_check= */ false, matches, &os_release, &unit_files, error);
         if (r < 0)
                 return r;
 
-        /* If we are layering extension images on top of a runtime image, check that the os-release and extension-release metadata
-         * match, otherwise reject it immediately as invalid, or it will fail when the units are started. */
-        if (validate_sysext) {
+        /* If we are layering extension images on top of a runtime image, check that the os-release and
+         * extension-release metadata match, otherwise reject it immediately as invalid, or it will fail when
+         * the units are started. Also, collect valid portable prefixes if caller requested that. */
+        if (validate_sysext || ret_valid_prefixes) {
                 _cleanup_fclose_ FILE *f = NULL;
+                _cleanup_free_ char *prefixes = NULL;
 
                 r = take_fdopen_unlocked(&os_release->fd, "r", &f);
                 if (r < 0)
@@ -598,19 +576,29 @@
                 r = parse_env_file(f, os_release->name,
                                    "ID", &id,
                                    "VERSION_ID", &version_id,
-                                   "SYSEXT_LEVEL", &sysext_level);
+                                   "SYSEXT_LEVEL", &sysext_level,
+                                   "PORTABLE_PREFIXES", &prefixes);
                 if (r < 0)
                         return r;
+                if (isempty(id))
+                        return sd_bus_error_set_errnof(error, SYNTHETIC_ERRNO(ESTALE), "Image %s os-release metadata lacks the ID field", name_or_path);
+
+                if (prefixes) {
+                        valid_prefixes = strv_split(prefixes, WHITESPACE);
+                        if (!valid_prefixes)
+                                return -ENOMEM;
+                }
         }
 
         ORDERED_HASHMAP_FOREACH(ext, extension_images) {
                 _cleanup_(portable_metadata_unrefp) PortableMetadata *extension_release_meta = NULL;
                 _cleanup_hashmap_free_ Hashmap *extra_unit_files = NULL;
                 _cleanup_strv_free_ char **extension_release = NULL;
-                _cleanup_close_ int extension_release_fd = -1;
+                _cleanup_close_ int extension_release_fd = -EBADF;
                 _cleanup_fclose_ FILE *f = NULL;
+                const char *e;
 
-                r = portable_extract_by_path(ext->path, /* path_is_extension= */ true, matches, &extension_release_meta, &extra_unit_files, error);
+                r = portable_extract_by_path(ext->path, /* path_is_extension= */ true, relax_extension_release_check, matches, &extension_release_meta, &extra_unit_files, error);
                 if (r < 0)
                         return r;
 
@@ -618,11 +606,11 @@
                 if (r < 0)
                         return r;
 
-                if (!validate_sysext && !ret_extension_releases)
+                if (!validate_sysext && !ret_valid_prefixes && !ret_extension_releases)
                         continue;
 
                 /* We need to keep the fd valid, to return the PortableMetadata to the caller. */
-                extension_release_fd = fd_reopen(extension_release_meta->fd, O_CLOEXEC);
+                extension_release_fd = fd_reopen(extension_release_meta->fd, O_CLOEXEC|O_RDONLY);
                 if (extension_release_fd < 0)
                         return extension_release_fd;
 
@@ -635,13 +623,26 @@
                         return r;
 
                 if (validate_sysext) {
-                        r = extension_release_validate(ext->path, id, version_id, sysext_level, extension_release);
+                        r = extension_release_validate(ext->path, id, version_id, sysext_level, "portable", extension_release);
                         if (r == 0)
                                 return sd_bus_error_set_errnof(error, SYNTHETIC_ERRNO(ESTALE), "Image %s extension-release metadata does not match the root's", ext->path);
                         if (r < 0)
                                 return sd_bus_error_set_errnof(error, r, "Failed to compare image %s extension-release metadata with the root's os-release: %m", ext->path);
                 }
 
+                e = strv_env_pairs_get(extension_release, "PORTABLE_PREFIXES");
+                if (e) {
+                        _cleanup_strv_free_ char **l = NULL;
+
+                        l = strv_split(e, WHITESPACE);
+                        if (!l)
+                                return -ENOMEM;
+
+                        r = strv_extend_strv(&valid_prefixes, l, true);
+                        if (r < 0)
+                                return r;
+                }
+
                 if (ret_extension_releases) {
                         r = ordered_hashmap_put(extension_releases, ext->name, extension_release_meta);
                         if (r < 0)
@@ -650,6 +651,8 @@
                 }
         }
 
+        strv_sort(valid_prefixes);
+
         if (ret_image)
                 *ret_image = TAKE_PTR(image);
         if (ret_extension_images)
@@ -660,6 +663,8 @@
                 *ret_os_release = TAKE_PTR(os_release);
         if (ret_unit_files)
                 *ret_unit_files = TAKE_PTR(unit_files);
+        if (ret_valid_prefixes)
+                *ret_valid_prefixes = TAKE_PTR(valid_prefixes);
 
         return 0;
 }
@@ -668,14 +673,17 @@
                 const char *name_or_path,
                 char **matches,
                 char **extension_image_paths,
+                PortableFlags flags,
                 PortableMetadata **ret_os_release,
                 OrderedHashmap **ret_extension_releases,
                 Hashmap **ret_unit_files,
+                char ***ret_valid_prefixes,
                 sd_bus_error *error) {
 
         _cleanup_(portable_metadata_unrefp) PortableMetadata *os_release = NULL;
         _cleanup_ordered_hashmap_free_ OrderedHashmap *extension_images = NULL, *extension_releases = NULL;
         _cleanup_hashmap_free_ Hashmap *unit_files = NULL;
+        _cleanup_(strv_freep) char **valid_prefixes = NULL;
         _cleanup_(image_unrefp) Image *image = NULL;
         int r;
 
@@ -686,11 +694,13 @@
                         matches,
                         extension_image_paths,
                         /* validate_sysext= */ false,
+                        /* relax_extension_release_check= */ FLAGS_SET(flags, PORTABLE_FORCE_SYSEXT),
                         &image,
                         &extension_images,
                         &extension_releases,
                         &os_release,
                         &unit_files,
+                        ret_valid_prefixes ? &valid_prefixes : NULL,
                         error);
         if (r < 0)
                 return r;
@@ -714,6 +724,8 @@
                 *ret_extension_releases = TAKE_PTR(extension_releases);
         if (ret_unit_files)
                 *ret_unit_files = TAKE_PTR(unit_files);
+        if (ret_valid_prefixes)
+                *ret_valid_prefixes = TAKE_PTR(valid_prefixes);
 
         return 0;
 }
@@ -779,7 +791,7 @@
                 at = strchr(name, '@');
                 assert(at);
 
-                prefix = strndupa(name, at + 1 - name);
+                prefix = strndupa_safe(name, at + 1 - name);
                 joined = strjoina(prefix, "*", at + 1);
 
                 r = sd_bus_message_append_strv(m, STRV_MAKE(joined));
@@ -861,6 +873,8 @@
                 const char *path,
                 const char *source) {
 
+        _cleanup_free_ char *path_buf = NULL, *source_buf = NULL;
+
         assert(path);
         assert(!changes == !n_changes);
 
@@ -868,10 +882,19 @@
                 return 0;
 
         if (prefix) {
-                path = prefix_roota(prefix, path);
+                path_buf = path_join(prefix, path);
+                if (!path_buf)
+                        return -ENOMEM;
 
-                if (source)
-                        source = prefix_roota(prefix, source);
+                path = path_buf;
+
+                if (source) {
+                        source_buf = path_join(prefix, source);
+                        if (!source_buf)
+                                return -ENOMEM;
+
+                        source = source_buf;
+                }
         }
 
         return portable_changes_add(changes, n_changes, type_or_errno, path, source);
@@ -894,6 +917,10 @@
         return IN_SET(type, IMAGE_DIRECTORY, IMAGE_SUBVOLUME) ? "RootDirectory=" : "RootImage=";
 }
 
+static const char *extension_setting_from_image(ImageType type) {
+        return IN_SET(type, IMAGE_DIRECTORY, IMAGE_SUBVOLUME) ? "ExtensionDirectories=" : "ExtensionImages=";
+}
+
 static int make_marker_text(const char *image_path, OrderedHashmap *extension_images, char **ret_text) {
         _cleanup_free_ char *text = NULL, *escaped_image_path = NULL;
         Image *ext;
@@ -935,12 +962,12 @@
                 OrderedHashmap *extension_images,
                 const PortableMetadata *m,
                 const char *dropin_dir,
+                PortableFlags flags,
                 char **ret_dropin,
                 PortableChange **changes,
                 size_t *n_changes) {
 
         _cleanup_free_ char *text = NULL, *dropin = NULL;
-        Image *ext;
         int r;
 
         assert(image_path);
@@ -958,6 +985,7 @@
         if (endswith(m->name, ".service")) {
                 const char *os_release_source, *root_type;
                 _cleanup_free_ char *base_name = NULL;
+                Image *ext;
 
                 root_type = root_setting_from_image(type);
 
@@ -984,7 +1012,16 @@
 
                 if (m->image_path && !path_equal(m->image_path, image_path))
                         ORDERED_HASHMAP_FOREACH(ext, extension_images)
-                                if (!strextend(&text, "ExtensionImages=", ext->path, "\n"))
+                                if (!strextend(&text,
+                                               extension_setting_from_image(ext->type),
+                                               ext->path,
+                                               /* With --force tell PID1 to avoid enforcing that the image <name> and
+                                                * extension-release.<name> have to match. */
+                                               !IN_SET(type, IMAGE_DIRECTORY, IMAGE_SUBVOLUME) &&
+                                                   FLAGS_SET(flags, PORTABLE_FORCE_SYSEXT) ?
+                                                       ":x-systemd.relax-extension-release-check" :
+                                                       "",
+                                               "\n"))
                                         return -ENOMEM;
         }
 
@@ -1037,14 +1074,14 @@
 
                 r = copy_file_atomic(from, dropin, 0644, 0, 0, COPY_REFLINK);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to copy %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW), dropin);
+                        return log_debug_errno(r, "Failed to copy %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dropin);
 
                 (void) portable_changes_add(changes, n_changes, PORTABLE_COPY, dropin, from);
 
         } else {
 
                 if (symlink(from, dropin) < 0)
-                        return log_debug_errno(errno, "Failed to link %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW), dropin);
+                        return log_debug_errno(errno, "Failed to link %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dropin);
 
                 (void) portable_changes_add(changes, n_changes, PORTABLE_SYMLINK, dropin, from);
         }
@@ -1082,7 +1119,8 @@
 
         _cleanup_(unlink_and_freep) char *chroot_dropin = NULL, *profile_dropin = NULL;
         _cleanup_(rmdir_and_freep) char *dropin_dir = NULL;
-        const char *where, *path;
+        _cleanup_free_ char *path = NULL;
+        const char *where;
         int r;
 
         assert(paths);
@@ -1095,18 +1133,21 @@
         (void) mkdir_parents(where, 0755);
         if (mkdir(where, 0755) < 0) {
                 if (errno != EEXIST)
-                        return -errno;
+                        return log_debug_errno(errno, "Failed to create attach directory %s: %m", where);
         } else
                 (void) portable_changes_add(changes, n_changes, PORTABLE_MKDIR, where, NULL);
 
-        path = prefix_roota(where, m->name);
+        path = path_join(where, m->name);
+        if (!path)
+                return -ENOMEM;
+
         dropin_dir = strjoin(path, ".d");
         if (!dropin_dir)
                 return -ENOMEM;
 
         if (mkdir(dropin_dir, 0755) < 0) {
                 if (errno != EEXIST)
-                        return -errno;
+                        return log_debug_errno(errno, "Failed to create drop-in directory %s: %m", dropin_dir);
         } else
                 (void) portable_changes_add(changes, n_changes, PORTABLE_MKDIR, dropin_dir, NULL);
 
@@ -1114,7 +1155,7 @@
          * is reloaded while we are creating things here: as long as only the drop-ins exist the unit doesn't exist at
          * all for PID 1. */
 
-        r = install_chroot_dropin(image_path, type, extension_images, m, dropin_dir, &chroot_dropin, changes, n_changes);
+        r = install_chroot_dropin(image_path, type, extension_images, m, dropin_dir, flags, &chroot_dropin, changes, n_changes);
         if (r < 0)
                 return r;
 
@@ -1131,9 +1172,12 @@
 
         } else {
                 _cleanup_(unlink_and_freep) char *tmp = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
+
+                (void) mac_selinux_create_file_prepare_label(path, m->selinux_label);
 
                 fd = open_tmpfile_linkable(path, O_WRONLY|O_CLOEXEC, &tmp);
+                mac_selinux_create_file_clear(); /* Clear immediately in case of errors */
                 if (fd < 0)
                         return log_debug_errno(fd, "Failed to create unit file '%s': %m", path);
 
@@ -1211,7 +1255,7 @@
         (void) mkdir_parents(sl, 0755);
 
         if (symlink(image_path, sl) < 0)
-                return log_debug_errno(errno, "Failed to link %s %s %s: %m", image_path, special_glyph(SPECIAL_GLYPH_ARROW), sl);
+                return log_debug_errno(errno, "Failed to link %s %s %s: %m", image_path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), sl);
 
         (void) portable_changes_add(changes, n_changes, PORTABLE_SYMLINK, sl, image_path);
         return 0;
@@ -1242,6 +1286,16 @@
         return 0;
 }
 
+static bool prefix_matches_compatible(char **matches, char **valid_prefixes) {
+        /* Checks if all 'matches' are included in the list of 'valid_prefixes' */
+
+        STRV_FOREACH(m, matches)
+                if (!strv_contains(valid_prefixes, *m))
+                        return false;
+
+        return true;
+}
+
 int portable_attach(
                 sd_bus *bus,
                 const char *name_or_path,
@@ -1256,6 +1310,7 @@
         _cleanup_ordered_hashmap_free_ OrderedHashmap *extension_images = NULL;
         _cleanup_hashmap_free_ Hashmap *unit_files = NULL;
         _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        _cleanup_strv_free_ char **valid_prefixes = NULL;
         _cleanup_(image_unrefp) Image *image = NULL;
         PortableMetadata *item;
         int r;
@@ -1265,51 +1320,81 @@
                         matches,
                         extension_image_paths,
                         /* validate_sysext= */ true,
+                        /* relax_extension_release_check= */ FLAGS_SET(flags, PORTABLE_FORCE_SYSEXT),
                         &image,
                         &extension_images,
                         /* extension_releases= */ NULL,
                         /* os_release= */ NULL,
                         &unit_files,
+                        &valid_prefixes,
                         error);
         if (r < 0)
                 return r;
 
-        if (hashmap_isempty(unit_files)) {
-                _cleanup_free_ char *extensions = strv_join(extension_image_paths, ", ");
-                if (!extensions)
+        if (valid_prefixes && !prefix_matches_compatible(matches, valid_prefixes)) {
+                _cleanup_free_ char *matches_joined = NULL, *extensions_joined = NULL, *valid_prefixes_joined = NULL;
+
+                matches_joined = strv_join(matches, "', '");
+                if (!matches_joined)
                         return -ENOMEM;
 
-                return sd_bus_error_setf(error,
-                                         SD_BUS_ERROR_INVALID_ARGS,
-                                         "Couldn't find any matching unit files in image '%s%s%s', refusing.",
-                                         image->path,
-                                         isempty(extensions) ? "" : "' or any of its extensions '",
-                                         isempty(extensions) ? "" : extensions);
+                extensions_joined = strv_join(extension_image_paths, ", ");
+                if (!extensions_joined)
+                        return -ENOMEM;
+
+                valid_prefixes_joined = strv_join(valid_prefixes, ", ");
+                if (!valid_prefixes_joined)
+                        return -ENOMEM;
+
+                return sd_bus_error_setf(
+                                error,
+                                SD_BUS_ERROR_INVALID_ARGS,
+                                "Selected matches '%s' are not compatible with portable service image '%s%s%s', refusing. (Acceptable prefix matches are: %s)",
+                                matches_joined,
+                                image->path,
+                                isempty(extensions_joined) ? "" : "' or any of its extensions '",
+                                strempty(extensions_joined),
+                                valid_prefixes_joined);
         }
 
-        r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
+        if (hashmap_isempty(unit_files)) {
+                _cleanup_free_ char *extensions_joined = strv_join(extension_image_paths, ", ");
+                if (!extensions_joined)
+                        return -ENOMEM;
+
+                return sd_bus_error_setf(
+                                error,
+                                SD_BUS_ERROR_INVALID_ARGS,
+                                "Couldn't find any matching unit files in image '%s%s%s', refusing.",
+                                image->path,
+                                isempty(extensions_joined) ? "" : "' or any of its extensions '",
+                                strempty(extensions_joined));
+        }
+
+        r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
         if (r < 0)
                 return r;
 
-        HASHMAP_FOREACH(item, unit_files) {
-                r = unit_file_exists(UNIT_FILE_SYSTEM, &paths, item->name);
-                if (r < 0)
-                        return sd_bus_error_set_errnof(error, r, "Failed to determine whether unit '%s' exists on the host: %m", item->name);
-                if (!FLAGS_SET(flags, PORTABLE_REATTACH) && r > 0)
-                        return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' exists on the host already, refusing.", item->name);
+        if (!FLAGS_SET(flags, PORTABLE_REATTACH) && !FLAGS_SET(flags, PORTABLE_FORCE_ATTACH))
+                HASHMAP_FOREACH(item, unit_files) {
+                        r = unit_file_exists(LOOKUP_SCOPE_SYSTEM, &paths, item->name);
+                        if (r < 0)
+                                return sd_bus_error_set_errnof(error, r, "Failed to determine whether unit '%s' exists on the host: %m", item->name);
+                        if (r > 0)
+                                return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' exists on the host already, refusing.", item->name);
 
-                r = unit_file_is_active(bus, item->name, error);
-                if (r < 0)
-                        return r;
-                if (!FLAGS_SET(flags, PORTABLE_REATTACH) && r > 0)
-                        return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is active already, refusing.", item->name);
-        }
+                        r = unit_file_is_active(bus, item->name, error);
+                        if (r < 0)
+                                return r;
+                        if (r > 0)
+                                return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is active already, refusing.", item->name);
+                }
 
         HASHMAP_FOREACH(item, unit_files) {
                 r = attach_unit_file(&paths, image->path, image->type, extension_images,
                                      item, profile, flags, changes, n_changes);
                 if (r < 0)
-                        return r;
+                        return sd_bus_error_set_errnof(error, r, "Failed to attach unit '%s': %m", item->name);
         }
 
         /* We don't care too much for the image symlink, it's just a convenience thing, it's not necessary for proper
@@ -1321,7 +1406,6 @@
 
 static bool marker_matches_images(const char *marker, const char *name_or_path, char **extension_image_paths) {
         _cleanup_strv_free_ char **root_and_extensions = NULL;
-        char **image_name_or_path;
         const char *a;
         int r;
 
@@ -1377,17 +1461,28 @@
                         size_t l;
 
                         /* We shall match against a path. Let's ignore any prefix here though, as often there are many ways to
-                        * reach the same file. However, in this mode, let's validate any file suffix. */
+                         * reach the same file. However, in this mode, let's validate any file suffix.
+                         * But also ensure that we don't fail if both components don't have a '/' at all
+                         * (strcspn returns the full length of the string in that case, which might not
+                         * match as the versions might differ). */
 
                         l = strcspn(a, "/");
                         b = last_path_component(*image_name_or_path);
 
-                        if (strcspn(b, "/") != l)
+                        if ((a[l] != '/') != !strchr(b, '/')) /* One is a directory, the other is not */
+                                return false;
+
+                        if (a[l] != 0 && strcspn(b, "/") != l)
                                 return false;
 
                         underscore = strchr(b, '_');
                         if (underscore)
                                 l = underscore - b;
+                        else { /* Either component could be versioned */
+                                underscore = strchr(a, '_');
+                                if (underscore)
+                                        l = underscore - a;
+                        }
 
                         if (!strneq(a, b, l))
                                 return false;
@@ -1407,7 +1502,7 @@
 
         _cleanup_free_ char *line = NULL, *marker = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *p, *e, *k;
         int r;
 
@@ -1468,15 +1563,15 @@
 
         _cleanup_(lookup_paths_free) LookupPaths paths = {};
         _cleanup_set_free_ Set *unit_files = NULL, *markers = NULL;
+        _cleanup_free_ char *extensions = NULL;
         _cleanup_closedir_ DIR *d = NULL;
         const char *where, *item;
-        struct dirent *de;
         int ret = 0;
         int r;
 
         assert(name_or_path);
 
-        r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
+        r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
         if (r < 0)
                 return r;
 
@@ -1491,40 +1586,49 @@
         }
 
         FOREACH_DIRENT(de, d, return log_debug_errno(errno, "Failed to enumerate '%s' directory: %m", where)) {
-                _cleanup_free_ char *marker = NULL;
-                UnitFileState state;
+                _cleanup_free_ char *marker = NULL, *unit_name = NULL;
+                const char *dot;
 
-                if (!unit_name_is_valid(de->d_name, UNIT_NAME_ANY))
+                /* When a portable service is enabled with "portablectl --copy=symlink --enable --now attach",
+                 * and is disabled with "portablectl --enable --now detach", which calls DisableUnitFilesWithFlags
+                 * DBus method, the main unit file is removed, but its drop-ins are not. Hence, here we need
+                 * to list both main unit files and drop-in directories (without the main unit files). */
+
+                dot = endswith(de->d_name, ".d");
+                if (dot)
+                        unit_name = strndup(de->d_name, dot - de->d_name);
+                else
+                        unit_name = strdup(de->d_name);
+                if (!unit_name)
+                        return -ENOMEM;
+
+                if (!unit_name_is_valid(unit_name, UNIT_NAME_ANY))
                         continue;
 
                 /* Filter out duplicates */
-                if (set_contains(unit_files, de->d_name))
+                if (set_contains(unit_files, unit_name))
                         continue;
 
-                if (!IN_SET(de->d_type, DT_LNK, DT_REG))
+                if (dot ? !IN_SET(de->d_type, DT_LNK, DT_DIR) : !IN_SET(de->d_type, DT_LNK, DT_REG))
                         continue;
 
-                r = test_chroot_dropin(d, where, de->d_name, name_or_path, extension_image_paths, &marker);
+                r = test_chroot_dropin(d, where, unit_name, name_or_path, extension_image_paths, &marker);
                 if (r < 0)
                         return r;
                 if (r == 0)
                         continue;
 
-                r = unit_file_lookup_state(UNIT_FILE_SYSTEM, &paths, de->d_name, &state);
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to determine unit file state of '%s': %m", de->d_name);
-                if (!IN_SET(state, UNIT_FILE_STATIC, UNIT_FILE_DISABLED, UNIT_FILE_LINKED, UNIT_FILE_RUNTIME, UNIT_FILE_LINKED_RUNTIME))
-                        return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is in state '%s', can't detach.", de->d_name, unit_file_state_to_string(state));
+                if (!FLAGS_SET(flags, PORTABLE_REATTACH) && !FLAGS_SET(flags, PORTABLE_FORCE_ATTACH)) {
+                        r = unit_file_is_active(bus, unit_name, error);
+                        if (r < 0)
+                                return r;
+                        if (r > 0)
+                                return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is active, can't detach.", unit_name);
+                }
 
-                r = unit_file_is_active(bus, de->d_name, error);
+                r = set_ensure_consume(&unit_files, &string_hash_ops_free, TAKE_PTR(unit_name));
                 if (r < 0)
-                        return r;
-                if (!FLAGS_SET(flags, PORTABLE_REATTACH) && r > 0)
-                        return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is active, can't detach.", de->d_name);
-
-                r = set_put_strdup(&unit_files, de->d_name);
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to add unit name '%s' to set: %m", de->d_name);
+                        return log_oom_debug();
 
                 for (const char *p = marker;;) {
                         _cleanup_free_ char *image = NULL;
@@ -1548,7 +1652,6 @@
 
         SET_FOREACH(item, unit_files) {
                 _cleanup_free_ char *md = NULL;
-                const char *suffix;
 
                 if (unlinkat(dirfd(d), item, 0) < 0) {
                         log_debug_errno(errno, "Can't remove unit file %s/%s: %m", where, item);
@@ -1624,13 +1727,23 @@
         return ret;
 
 not_found:
-        log_debug("No unit files associated with '%s' found. Image not attached?", name_or_path);
-        return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, "No unit files associated with '%s' found. Image not attached?", name_or_path);
+        extensions = strv_join(extension_image_paths, ", ");
+        if (!extensions)
+                return -ENOMEM;
+
+        r = sd_bus_error_setf(error,
+                              BUS_ERROR_NO_SUCH_UNIT,
+                              "No unit files associated with '%s%s%s' found attached to the system. Image not attached?",
+                              name_or_path,
+                              isempty(extensions) ? "" : "' or any of its extensions '",
+                              isempty(extensions) ? "" : extensions);
+        return log_debug_errno(r, "%s", error->message);
 }
 
 static int portable_get_state_internal(
                 sd_bus *bus,
                 const char *name_or_path,
+                char **extension_image_paths,
                 PortableFlags flags,
                 PortableState *ret,
                 sd_bus_error *error) {
@@ -1640,13 +1753,12 @@
         _cleanup_set_free_ Set *unit_files = NULL;
         _cleanup_closedir_ DIR *d = NULL;
         const char *where;
-        struct dirent *de;
         int r;
 
         assert(name_or_path);
         assert(ret);
 
-        r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
+        r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
         if (r < 0)
                 return r;
 
@@ -1676,13 +1788,13 @@
                 if (!IN_SET(de->d_type, DT_LNK, DT_REG))
                         continue;
 
-                r = test_chroot_dropin(d, where, de->d_name, name_or_path, NULL, NULL);
+                r = test_chroot_dropin(d, where, de->d_name, name_or_path, extension_image_paths, NULL);
                 if (r < 0)
                         return r;
                 if (r == 0)
                         continue;
 
-                r = unit_file_lookup_state(UNIT_FILE_SYSTEM, &paths, de->d_name, &state);
+                r = unit_file_lookup_state(LOOKUP_SCOPE_SYSTEM, &paths, de->d_name, &state);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to determine unit file state of '%s': %m", de->d_name);
                 if (!IN_SET(state, UNIT_FILE_STATIC, UNIT_FILE_DISABLED, UNIT_FILE_LINKED, UNIT_FILE_LINKED_RUNTIME))
@@ -1709,6 +1821,7 @@
 int portable_get_state(
                 sd_bus *bus,
                 const char *name_or_path,
+                char **extension_image_paths,
                 PortableFlags flags,
                 PortableState *ret,
                 sd_bus_error *error) {
@@ -1722,12 +1835,12 @@
         /* We look for matching units twice: once in the regular directories, and once in the runtime directories — but
          * the latter only if we didn't find anything in the former. */
 
-        r = portable_get_state_internal(bus, name_or_path, flags & ~PORTABLE_RUNTIME, &state, error);
+        r = portable_get_state_internal(bus, name_or_path, extension_image_paths, flags & ~PORTABLE_RUNTIME, &state, error);
         if (r < 0)
                 return r;
 
         if (state == PORTABLE_DETACHED) {
-                r = portable_get_state_internal(bus, name_or_path, flags | PORTABLE_RUNTIME, &state, error);
+                r = portable_get_state_internal(bus, name_or_path, extension_image_paths, flags | PORTABLE_RUNTIME, &state, error);
                 if (r < 0)
                         return r;
         }
diff --git a/src/portable/portable.h b/src/portable/portable.h
index a1abf60..1a33f30 100644
--- a/src/portable/portable.h
+++ b/src/portable/portable.h
@@ -12,6 +12,7 @@
         int fd;
         char *source;
         char *image_path;
+        char *selinux_label;
         char name[];
 } PortableMetadata;
 
@@ -21,10 +22,12 @@
 
 typedef enum PortableFlags {
         PORTABLE_RUNTIME        = 1 << 0, /* Public API via DBUS, do not change */
-        PORTABLE_PREFER_COPY    = 1 << 1,
-        PORTABLE_PREFER_SYMLINK = 1 << 2,
-        PORTABLE_REATTACH       = 1 << 3,
-        _PORTABLE_MASK_PUBLIC   = PORTABLE_RUNTIME,
+        PORTABLE_FORCE_ATTACH   = 1 << 1, /* Public API via DBUS, do not change */
+        PORTABLE_FORCE_SYSEXT   = 1 << 2, /* Public API via DBUS, do not change */
+        PORTABLE_PREFER_COPY    = 1 << 3,
+        PORTABLE_PREFER_SYMLINK = 1 << 4,
+        PORTABLE_REATTACH       = 1 << 5,
+        _PORTABLE_MASK_PUBLIC   = PORTABLE_RUNTIME | PORTABLE_FORCE_ATTACH | PORTABLE_FORCE_SYSEXT,
         _PORTABLE_TYPE_MAX,
         _PORTABLE_TYPE_INVALID  = -EINVAL,
 } PortableFlags;
@@ -64,12 +67,12 @@
 
 int portable_metadata_hashmap_to_sorted_array(Hashmap *unit_files, PortableMetadata ***ret);
 
-int portable_extract(const char *image, char **matches, char **extension_image_paths, PortableMetadata **ret_os_release, OrderedHashmap **ret_extension_releases, Hashmap **ret_unit_files, sd_bus_error *error);
+int portable_extract(const char *image, char **matches, char **extension_image_paths, PortableFlags flags, PortableMetadata **ret_os_release, OrderedHashmap **ret_extension_releases, Hashmap **ret_unit_files, char ***ret_valid_prefixes, sd_bus_error *error);
 
 int portable_attach(sd_bus *bus, const char *name_or_path, char **matches, const char *profile, char **extension_images, PortableFlags flags, PortableChange **changes, size_t *n_changes, sd_bus_error *error);
 int portable_detach(sd_bus *bus, const char *name_or_path, char **extension_image_paths, PortableFlags flags, PortableChange **changes, size_t *n_changes, sd_bus_error *error);
 
-int portable_get_state(sd_bus *bus, const char *name_or_path, PortableFlags flags, PortableState *ret, sd_bus_error *error);
+int portable_get_state(sd_bus *bus, const char *name_or_path, char **extension_image_paths, PortableFlags flags, PortableState *ret, sd_bus_error *error);
 
 int portable_get_profiles(char ***ret);
 
diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c
index 21048ba..cd9f462 100644
--- a/src/portable/portablectl.c
+++ b/src/portable/portablectl.c
@@ -6,11 +6,13 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-unit-util.h"
 #include "bus-wait-for-jobs.h"
-#include "def.h"
+#include "chase-symlinks.h"
+#include "constants.h"
 #include "dirent-util.h"
 #include "env-file.h"
 #include "fd-util.h"
@@ -24,8 +26,8 @@
 #include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
-#include "pretty-print.h"
 #include "portable.h"
+#include "pretty-print.h"
 #include "spawn-polkit-agent.h"
 #include "string-util.h"
 #include "strv.h"
@@ -47,6 +49,7 @@
 static bool arg_now = false;
 static bool arg_no_block = false;
 static char **arg_extension_images = NULL;
+static bool arg_force = false;
 
 STATIC_DESTRUCTOR_REGISTER(arg_extension_images, strv_freep);
 
@@ -89,7 +92,6 @@
 }
 
 static int attach_extensions_to_message(sd_bus_message *m, char **extensions) {
-        char **p;
         int r;
 
         assert(m);
@@ -121,11 +123,14 @@
 }
 
 static int extract_prefix(const char *path, char **ret) {
-        _cleanup_free_ char *name = NULL;
-        const char *bn, *underscore;
+        _cleanup_free_ char *name = NULL, *bn = NULL;
+        const char *underscore;
         size_t m;
+        int r;
 
-        bn = basename(path);
+        r = path_extract_filename(path, &bn);
+        if (r < 0)
+                return r;
 
         underscore = strchr(bn, '_');
         if (underscore)
@@ -153,7 +158,6 @@
                 return -EINVAL;
 
         *ret = TAKE_PTR(name);
-
         return 0;
 }
 
@@ -219,7 +223,7 @@
 
         r = bus_connect_transport(arg_transport, arg_host, false, bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         (void) sd_bus_set_allow_interactive_authorization(*bus, arg_ask_password);
 
@@ -249,7 +253,7 @@
                 return bus_log_create_error(r);
 
         /* Reloading the daemon may take long, hence set a longer timeout here */
-        r = sd_bus_call(*bus, m, DEFAULT_TIMEOUT_USEC * 2, &error, NULL);
+        r = sd_bus_call(*bus, m, DAEMON_RELOAD_TIMEOUT_SEC, &error, NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to reload daemon: %s", bus_error_message(&error, r));
 
@@ -259,7 +263,7 @@
 static int get_image_metadata(sd_bus *bus, const char *image, char **matches, sd_bus_message **reply) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        uint64_t flags = 0;
+        uint64_t flags = arg_force ? PORTABLE_FORCE_SYSEXT : 0;
         const char *method;
         int r;
 
@@ -332,7 +336,7 @@
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (arg_cat) {
                 printf("%s-- OS Release: --%s\n", ansi_highlight(), ansi_normal());
@@ -343,7 +347,7 @@
                 _cleanup_free_ char *pretty_portable = NULL, *pretty_os = NULL;
                 _cleanup_fclose_ FILE *f = NULL;
 
-                f = fmemopen_unlocked((void*) data, sz, "re");
+                f = fmemopen_unlocked((void*) data, sz, "r");
                 if (!f)
                         return log_error_errno(errno, "Failed to open /etc/os-release buffer: %m");
 
@@ -399,7 +403,7 @@
                                         *id = NULL, *version_id = NULL, *sysext_scope = NULL, *portable_prefixes = NULL;
                                 _cleanup_fclose_ FILE *f = NULL;
 
-                                f = fmemopen_unlocked((void*) data, sz, "re");
+                                f = fmemopen_unlocked((void*) data, sz, "r");
                                 if (!f)
                                         return log_error_errno(errno, "Failed to open extension-release buffer: %m");
 
@@ -512,12 +516,12 @@
                         break;
 
                 if (streq(type, "symlink"))
-                        log_info("Created symlink %s %s %s.", path, special_glyph(SPECIAL_GLYPH_ARROW), source);
+                        log_info("Created symlink %s %s %s.", path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), source);
                 else if (streq(type, "copy")) {
                         if (isempty(source))
                                 log_info("Copied %s.", path);
                         else
-                                log_info("Copied %s %s %s.", source, special_glyph(SPECIAL_GLYPH_ARROW), path);
+                                log_info("Copied %s %s %s.", source, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), path);
                 } else if (streq(type, "unlink"))
                         log_info("Removed %s.", path);
                 else if (streq(type, "write"))
@@ -539,7 +543,7 @@
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_strv_free_ char **names = NULL;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         const uint64_t flags = UNIT_FILE_PORTABLE | (arg_runtime ? UNIT_FILE_RUNTIME : 0);
         size_t n_changes = 0;
         int r;
@@ -579,7 +583,9 @@
                 if (r < 0)
                         return bus_log_parse_error(r);
         }
+
         (void) bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet, &changes, &n_changes);
+        install_changes_free(changes, n_changes);
 
         return 0;
 }
@@ -587,7 +593,8 @@
 static int maybe_start_stop_restart(sd_bus *bus, const char *path, const char *method, BusWaitForJobs *wait) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        char *name = (char *)basename(path), *job = NULL;
+        _cleanup_free_ char *name = NULL;
+        const char *job = NULL;
         int r;
 
         assert(STR_IN_SET(method, "StartUnit", "StopUnit", "RestartUnit"));
@@ -595,11 +602,13 @@
         if (!arg_now)
                 return 0;
 
-        r = sd_bus_call_method(
+        r = path_extract_filename(path, &name);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract file name from '%s': %m", path);
+
+        r = bus_call_method(
                         bus,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        "org.freedesktop.systemd1.Manager",
+                        bus_systemd_mgr,
                         method,
                         &error,
                         &reply,
@@ -868,7 +877,7 @@
                 return bus_log_create_error(r);
 
         if (STR_IN_SET(method, "AttachImageWithExtensions", "ReattachImageWithExtensions")) {
-                uint64_t flags = arg_runtime ? PORTABLE_RUNTIME : 0;
+                uint64_t flags = (arg_runtime ? PORTABLE_RUNTIME : 0) | (arg_force ? PORTABLE_FORCE_ATTACH | PORTABLE_FORCE_SYSEXT : 0);
 
                 r = sd_bus_message_append(m, "st", arg_copy_mode, flags);
         } else
@@ -940,7 +949,7 @@
         if (strv_isempty(arg_extension_images))
                 r = sd_bus_message_append(m, "b", arg_runtime);
         else {
-                uint64_t flags = arg_runtime ? PORTABLE_RUNTIME : 0;
+                uint64_t flags = (arg_runtime ? PORTABLE_RUNTIME : 0) | (arg_force ? PORTABLE_FORCE_ATTACH | PORTABLE_FORCE_SYSEXT : 0);
 
                 r = sd_bus_message_append(m, "t", flags);
         }
@@ -1120,11 +1129,11 @@
 }
 
 static int is_image_attached(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_free_ char *image = NULL;
-        const char *state;
+        const char *state, *method;
         int r;
 
         r = determine_image(argv[1], true, &image);
@@ -1135,9 +1144,29 @@
         if (r < 0)
                 return r;
 
-        r = bus_call_method(bus, bus_portable_mgr, "GetImageState", &error, &reply, "s", image);
+        method = strv_isempty(arg_extension_images) ? "GetImageState" : "GetImageStateWithExtensions";
+
+        r = bus_message_new_method_call(bus, &m, bus_portable_mgr, method);
         if (r < 0)
-                return log_error_errno(r, "Failed to get image state: %s", bus_error_message(&error, r));
+                return bus_log_create_error(r);
+
+        r = sd_bus_message_append(m, "s", image);
+        if (r < 0)
+                return bus_log_create_error(r);
+
+        r = attach_extensions_to_message(m, arg_extension_images);
+        if (r < 0)
+                return r;
+
+        if (!strv_isempty(arg_extension_images)) {
+                r = sd_bus_message_append(m, "t", 0);
+                if (r < 0)
+                        return bus_log_create_error(r);
+        }
+
+        r = sd_bus_call(bus, m, 0, &error, &reply);
+        if (r < 0)
+                return log_error_errno(r, "%s failed: %s", method, bus_error_message(&error, r));
 
         r = sd_bus_message_read(reply, "s", &state);
         if (r < 0)
@@ -1153,7 +1182,6 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_strv_free_ char **l = NULL;
-        char **i;
         int r;
 
         r = acquire_bus(&bus);
@@ -1179,7 +1207,7 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("portablectl", "1", &link);
         if (r < 0)
@@ -1222,6 +1250,8 @@
                "                              attach/before detach\n"
                "     --no-block               Don't block waiting for attach --now to complete\n"
                "     --extension=PATH         Extend the image with an overlay\n"
+               "     --force                  Skip 'already active' check when attaching or\n"
+               "                              detaching an image (with extensions)\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -1247,6 +1277,7 @@
                 ARG_NOW,
                 ARG_NO_BLOCK,
                 ARG_EXTENSION,
+                ARG_FORCE,
         };
 
         static const struct option options[] = {
@@ -1267,6 +1298,7 @@
                 { "now",             no_argument,       NULL, ARG_NOW             },
                 { "no-block",        no_argument,       NULL, ARG_NO_BLOCK        },
                 { "extension",       required_argument, NULL, ARG_EXTENSION       },
+                { "force",           no_argument,       NULL, ARG_FORCE           },
                 {}
         };
 
@@ -1371,11 +1403,15 @@
                                 return log_oom();
                         break;
 
+                case ARG_FORCE:
+                        arg_force = true;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
         }
 
diff --git a/src/portable/portabled-bus.c b/src/portable/portabled-bus.c
index db71057..7689642 100644
--- a/src/portable/portabled-bus.c
+++ b/src/portable/portabled-bus.c
@@ -41,7 +41,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         uint64_t usage = UINT64_MAX;
 
         assert(bus);
@@ -67,7 +67,7 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         uint64_t size = UINT64_MAX;
 
         assert(bus);
@@ -108,13 +108,12 @@
 
 static int method_get_image(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *name;
         Image *image;
         int r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "s", &name);
         if (r < 0)
@@ -134,12 +133,11 @@
 static int method_list_images(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_hashmap_free_ Hashmap *images = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Image *image;
         int r;
 
         assert(message);
-        assert(m);
 
         images = hashmap_new(&image_hash_ops);
         if (!images)
@@ -169,6 +167,7 @@
                 r = portable_get_state(
                                 sd_bus_message_get_bus(message),
                                 image->path,
+                                NULL,
                                 0,
                                 &state,
                                 &error_state);
@@ -225,6 +224,7 @@
 }
 
 static int method_get_image_state(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        _cleanup_strv_free_ char **extension_images = NULL;
         const char *name_or_path;
         PortableState state;
         int r;
@@ -235,9 +235,28 @@
         if (r < 0)
                 return r;
 
+        if (sd_bus_message_is_method_call(message, NULL, "GetImageStateWithExtensions")) {
+                uint64_t input_flags = 0;
+
+                r = sd_bus_message_read_strv(message, &extension_images);
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_read(message, "t", &input_flags);
+                if (r < 0)
+                        return r;
+
+                /* No flags are supported by this method for now. */
+                if (input_flags != 0)
+                        return sd_bus_reply_method_errorf(message, SD_BUS_ERROR_INVALID_ARGS,
+                                                          "Invalid 'flags' parameter '%" PRIu64 "'",
+                                                          input_flags);
+        }
+
         r = portable_get_state(
                         sd_bus_message_get_bus(message),
                         name_or_path,
+                        extension_images,
                         0,
                         &state,
                         error);
@@ -255,13 +274,12 @@
         _cleanup_strv_free_ char **extension_images = NULL;
         PortableChange *changes = NULL;
         PortableFlags flags = 0;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         size_t n_changes = 0;
         const char *name_or_path;
         int r;
 
         assert(message);
-        assert(m);
 
         /* Note that we do not redirect detaching to the image object here, because we want to allow that users can
          * detach already deleted images too, in case the user already deleted an image before properly detaching
@@ -429,6 +447,13 @@
                                 SD_BUS_RESULT("s", state),
                                 method_get_image_state,
                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetImageStateWithExtensions",
+                                SD_BUS_ARGS("s", image,
+                                            "as", extensions,
+                                            "t", flags),
+                                SD_BUS_RESULT("s", state),
+                                method_get_image_state,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD_WITH_ARGS("AttachImage",
                                 SD_BUS_ARGS("s", image,
                                             "as", matches,
diff --git a/src/portable/portabled-image-bus.c b/src/portable/portabled-image-bus.c
index d538a47..07d10b0 100644
--- a/src/portable/portabled-image-bus.c
+++ b/src/portable/portabled-image-bus.c
@@ -108,6 +108,7 @@
         _cleanup_hashmap_free_ Hashmap *unit_files = NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_free_ PortableMetadata **sorted = NULL;
+        PortableFlags flags = 0;
         int r;
 
         assert(name_or_path || image);
@@ -142,6 +143,7 @@
                         return sd_bus_reply_method_errorf(message, SD_BUS_ERROR_INVALID_ARGS,
                                                           "Invalid 'flags' parameter '%" PRIu64 "'",
                                                           input_flags);
+                flags |= input_flags;
         }
 
         r = bus_image_acquire(m,
@@ -161,9 +163,11 @@
                         image->path,
                         matches,
                         extension_images,
+                        flags,
                         &os_release,
                         &extension_releases,
                         &unit_files,
+                        NULL,
                         error);
         if (r < 0)
                 return r;
@@ -257,16 +261,35 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Image *image = userdata;
+        _cleanup_strv_free_ char **extension_images = NULL;
+        Image *image = ASSERT_PTR(userdata);
         PortableState state;
         int r;
 
         assert(message);
-        assert(image);
+
+        if (sd_bus_message_is_method_call(message, NULL, "GetStateWithExtensions")) {
+                uint64_t input_flags = 0;
+
+                r = sd_bus_message_read_strv(message, &extension_images);
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_read(message, "t", &input_flags);
+                if (r < 0)
+                        return r;
+
+                /* No flags are supported by this method for now. */
+                if (input_flags != 0)
+                        return sd_bus_reply_method_errorf(message, SD_BUS_ERROR_INVALID_ARGS,
+                                                          "Invalid 'flags' parameter '%" PRIu64 "'",
+                                                          input_flags);
+        }
 
         r = portable_get_state(
                         sd_bus_message_get_bus(message),
                         image->path,
+                        extension_images,
                         0,
                         &state,
                         error);
@@ -387,15 +410,13 @@
 
         _cleanup_strv_free_ char **extension_images = NULL;
         PortableChange *changes = NULL;
-        Image *image = userdata;
-        Manager *m = image->userdata;
+        Image *image = ASSERT_PTR(userdata);
+        Manager *m = ASSERT_PTR(image->userdata);
         PortableFlags flags = 0;
         size_t n_changes = 0;
         int r;
 
         assert(message);
-        assert(image);
-        assert(m);
 
         if (sd_bus_message_is_method_call(message, NULL, "DetachWithExtensions")) {
                 r = sd_bus_message_read_strv(message, &extension_images);
@@ -465,7 +486,7 @@
                 Image *image,
                 sd_bus_error *error) {
 
-        _cleanup_close_pair_ int errno_pipe_fd[2] = { -1, -1 };
+        _cleanup_close_pair_ int errno_pipe_fd[2] = PIPE_EBADF;
         _cleanup_(sigkill_waitp) pid_t child = 0;
         PortableState state;
         int r;
@@ -497,6 +518,7 @@
         r = portable_get_state(
                         sd_bus_message_get_bus(message),
                         image->path,
+                        NULL,
                         0,
                         &state,
                         error);
@@ -531,7 +553,7 @@
                 return r;
 
         child = 0;
-        errno_pipe_fd[0] = -1;
+        errno_pipe_fd[0] = -EBADF;
 
         return 1;
 }
@@ -882,6 +904,12 @@
                                 SD_BUS_RESULT("s", state),
                                 bus_image_method_get_state,
                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetStateWithExtensions",
+                                SD_BUS_ARGS("as", extensions,
+                                            "t", flags),
+                                SD_BUS_RESULT("s", state),
+                                bus_image_method_get_state,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD_WITH_ARGS("Attach",
                                 SD_BUS_ARGS("as", matches,
                                             "s", profile,
@@ -1017,19 +1045,23 @@
                 /* If it's a short name, let's search for it */
                 r = image_find(IMAGE_PORTABLE, name_or_path, NULL, &loaded);
                 if (r == -ENOENT)
-                        return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_PORTABLE_IMAGE, "No image '%s' found.", name_or_path);
+                        return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_PORTABLE_IMAGE,
+                                                 "No image '%s' found.", name_or_path);
 
                 /* other errors are handled below… */
         } else {
                 /* Don't accept path if this is always forbidden */
                 if (mode == BUS_IMAGE_REFUSE_BY_PATH)
-                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Expected image name, not path in place of '%s'.", name_or_path);
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                 "Expected image name, not path in place of '%s'.", name_or_path);
 
                 if (!path_is_absolute(name_or_path))
-                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Image name '%s' is not valid or not a valid path.", name_or_path);
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                 "Image name '%s' is not valid or not a valid path.", name_or_path);
 
                 if (!path_is_normalized(name_or_path))
-                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Image path '%s' is not normalized.", name_or_path);
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                 "Image path '%s' is not normalized.", name_or_path);
 
                 if (mode == BUS_IMAGE_AUTHENTICATE_BY_PATH) {
                         r = bus_verify_polkit_async(
@@ -1052,7 +1084,9 @@
                 r = image_from_path(name_or_path, &loaded);
         }
         if (r == -EMEDIUMTYPE) {
-                sd_bus_error_setf(error, BUS_ERROR_BAD_PORTABLE_IMAGE_TYPE, "Typ of image '%s' not recognized; supported image types are directories/btrfs subvolumes, block devices, and raw disk image files with suffix '.raw'.", name_or_path);
+                sd_bus_error_setf(error, BUS_ERROR_BAD_PORTABLE_IMAGE_TYPE,
+                                  "Type of image '%s' not recognized; supported image types are directories/btrfs subvolumes, block devices, and raw disk image files with suffix '.raw'.",
+                                  name_or_path);
                 return r;
         }
         if (r < 0)
@@ -1092,6 +1126,9 @@
                 return 0;
         if (r == 0)
                 goto not_found;
+        if (isempty(e))
+                /* The path is "/org/freedesktop/portable1/image" itself */
+                goto not_found;
 
         r = bus_image_acquire(m, sd_bus_get_current_message(bus), e, NULL, BUS_IMAGE_REFUSE_BY_PATH, NULL, &image, error);
         if (r == -ENOENT)
diff --git a/src/portable/portabled-image.c b/src/portable/portabled-image.c
index 40548fb..6d28391 100644
--- a/src/portable/portabled-image.c
+++ b/src/portable/portabled-image.c
@@ -11,10 +11,9 @@
 }
 
 static int image_cache_flush(sd_event_source *s, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(m);
 
         hashmap_clear(m->image_cache);
         return 0;
diff --git a/src/portable/portabled-operation.c b/src/portable/portabled-operation.c
index 6f06367..6897ed0 100644
--- a/src/portable/portabled-operation.c
+++ b/src/portable/portabled-operation.c
@@ -1,5 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <unistd.h>
+
 #include "alloc-util.h"
 #include "fd-util.h"
 #include "portabled-operation.h"
@@ -7,10 +9,9 @@
 
 static int operation_done(sd_event_source *s, const siginfo_t *si, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        Operation *o = userdata;
+        Operation *o = ASSERT_PTR(userdata);
         int r;
 
-        assert(o);
         assert(si);
 
         log_debug("Operating " PID_FMT " is now complete with code=%s status=%i",
@@ -79,7 +80,7 @@
         if (!o)
                 return -ENOMEM;
 
-        o->extra_fd = -1;
+        o->extra_fd = -EBADF;
 
         r = sd_event_add_child(manager->event, &o->event_source, child, WEXITED, operation_done, o);
         if (r < 0) {
diff --git a/src/portable/portabled.c b/src/portable/portabled.c
index 3c8e20e..a4fae65 100644
--- a/src/portable/portabled.c
+++ b/src/portable/portabled.c
@@ -4,12 +4,12 @@
 #include <sys/types.h>
 
 #include "sd-bus.h"
-#include "sd-daemon.h"
 
 #include "alloc-util.h"
 #include "bus-log-control-api.h"
 #include "bus-polkit.h"
-#include "def.h"
+#include "constants.h"
+#include "daemon-util.h"
 #include "main-func.h"
 #include "portabled-bus.h"
 #include "portabled-image-bus.h"
@@ -154,15 +154,13 @@
                 return log_error_errno(r, "Failed to fully start up daemon: %m");
 
         log_debug("systemd-portabled running as pid " PID_FMT, getpid_cached());
-        sd_notify(false,
-                  "READY=1\n"
-                  "STATUS=Processing requests...");
+        r = sd_notify(false, NOTIFY_READY);
+        if (r < 0)
+                log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
 
         r = manager_run(m);
 
-        (void) sd_notify(false,
-                         "STOPPING=1\n"
-                         "STATUS=Shutting down...");
+        (void) sd_notify(false, NOTIFY_STOPPING);
         log_debug("systemd-portabled stopped as pid " PID_FMT, getpid_cached());
         return r;
 }
diff --git a/src/portable/profile/trusted/service.conf b/src/portable/profile/trusted/service.conf
index 9a6af70..04deeb2 100644
--- a/src/portable/profile/trusted/service.conf
+++ b/src/portable/profile/trusted/service.conf
@@ -1,7 +1,8 @@
-# The "trusted" profile for services, i.e. no restrictions are applied
+# The "trusted" profile for services, i.e. no restrictions are applied apart from a private /tmp
 
 [Service]
 MountAPIVFS=yes
+PrivateTmp=yes
 BindPaths=/run
 BindReadOnlyPaths=/etc/machine-id
 BindReadOnlyPaths=/etc/resolv.conf
diff --git a/src/pstore/meson.build b/src/pstore/meson.build
index 8e01af7..76b656a 100644
--- a/src/pstore/meson.build
+++ b/src/pstore/meson.build
@@ -1,8 +1,6 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_pstore_sources = files('''
-        pstore.c
-'''.split())
+systemd_pstore_sources = files('pstore.c')
 
 if conf.get('ENABLE_PSTORE') == 1 and install_sysconfdir_samples
         install_data('pstore.conf',
diff --git a/src/pstore/pstore.c b/src/pstore/pstore.c
index 81538d9..e8c2145 100644
--- a/src/pstore/pstore.c
+++ b/src/pstore/pstore.c
@@ -45,7 +45,6 @@
 #include "strv.h"
 #include "tmpfile-util.h"
 #include "user-util.h"
-#include "util.h"
 
 /* Command line argument handling */
 typedef enum PStoreStorage {
@@ -115,7 +114,7 @@
         return strcmp(a->dirent.d_name, b->dirent.d_name);
 }
 
-static int move_file(PStoreEntry *pe, const char *subdir) {
+static int move_file(PStoreEntry *pe, const char *subdir1, const char *subdir2) {
         _cleanup_free_ char *ifd_path = NULL, *ofd_path = NULL;
         _cleanup_free_ void *field = NULL;
         const char *suffix, *message;
@@ -129,7 +128,7 @@
         if (!ifd_path)
                 return log_oom();
 
-        ofd_path = path_join(arg_archivedir, subdir, pe->dirent.d_name);
+        ofd_path = path_join(arg_archivedir, subdir1, subdir2, pe->dirent.d_name);
         if (!ofd_path)
                 return log_oom();
 
@@ -172,158 +171,119 @@
         return 0;
 }
 
-static int write_dmesg(const char *dmesg, size_t size, const char *id) {
-        _cleanup_(unlink_and_freep) char *tmp_path = NULL;
+static int append_dmesg(PStoreEntry *pe, const char *subdir1, const char *subdir2) {
+        /* Append dmesg chunk to end, create if needed */
         _cleanup_free_ char *ofd_path = NULL;
-        _cleanup_close_ int ofd = -1;
+        _cleanup_close_ int ofd = -EBADF;
         ssize_t wr;
-        int r;
 
-        if (size == 0)
+        assert(pe);
+
+        if (pe->content_size == 0)
                 return 0;
 
-        assert(dmesg);
-
-        ofd_path = path_join(arg_archivedir, id, "dmesg.txt");
+        ofd_path = path_join(arg_archivedir, subdir1, subdir2, "dmesg.txt");
         if (!ofd_path)
                 return log_oom();
 
-        ofd = open_tmpfile_linkable(ofd_path, O_CLOEXEC|O_CREAT|O_TRUNC|O_WRONLY, &tmp_path);
+        ofd = open(ofd_path, O_CREAT|O_NOFOLLOW|O_NOCTTY|O_CLOEXEC|O_APPEND|O_WRONLY, 0640);
         if (ofd < 0)
-                return log_error_errno(ofd, "Failed to open temporary file %s: %m", ofd_path);
-        wr = write(ofd, dmesg, size);
+                return log_error_errno(ofd, "Failed to open file %s: %m", ofd_path);
+        wr = write(ofd, pe->content, pe->content_size);
         if (wr < 0)
                 return log_error_errno(errno, "Failed to store dmesg to %s: %m", ofd_path);
-        if (wr != (ssize_t)size)
-                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to store dmesg to %s. %zu bytes are lost.", ofd_path, size - wr);
-        r = link_tmpfile(ofd, tmp_path, ofd_path);
-        if (r < 0)
-                return log_error_errno(r, "Failed to write temporary file %s: %m", ofd_path);
-        tmp_path = mfree(tmp_path);
+        if ((size_t)wr != pe->content_size)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to store dmesg to %s. %zu bytes are lost.", ofd_path, pe->content_size - wr);
 
         return 0;
 }
 
-static void process_dmesg_files(PStoreList *list) {
+static int process_dmesg_files(PStoreList *list) {
         /* Move files, reconstruct dmesg.txt */
-        _cleanup_free_ char *dmesg = NULL, *dmesg_id = NULL;
-        size_t dmesg_size = 0;
-        bool dmesg_bad = false;
-        PStoreEntry *pe;
+        _cleanup_free_ char *erst_subdir = NULL;
+        uint64_t last_record_id = 0;
 
-        /* Handle each dmesg file: files processed in reverse
-         * order so as to properly reconstruct original dmesg */
+        /* When dmesg is written into pstore, it is done so in small chunks, whatever the exchange buffer
+         * size is with the underlying pstore backend (ie. EFI may be ~2KiB), which means an example
+         * pstore with approximately 64KB of storage may have up to roughly 32 dmesg files, some likely
+         * related.
+         *
+         * Here we look at the dmesg filename and try to discern if files are part of a related group,
+         * meaning the same original dmesg.
+         *
+         * The dmesg- filename contains the backend-type and the Common Platform Error Record, CPER,
+         * record id, a 64-bit number.
+         *
+         * Files are processed in reverse lexigraphical order so as to properly reconstruct original dmesg. */
+
         for (size_t n = list->n_entries; n > 0; n--) {
-                bool move_file_and_continue = false;
-                _cleanup_free_ char *pe_id = NULL;
+                PStoreEntry *pe;
                 char *p;
-                size_t plen;
 
                 pe = &list->entries[n-1];
 
                 if (pe->handled)
                         continue;
+                if (endswith(pe->dirent.d_name, ".enc.z")) /* indicates a problem */
+                        continue;
                 if (!startswith(pe->dirent.d_name, "dmesg-"))
                         continue;
 
-                if (endswith(pe->dirent.d_name, ".enc.z")) /* indicates a problem */
-                        move_file_and_continue = true;
-                p = strrchr(pe->dirent.d_name, '-');
-                if (!p)
-                        move_file_and_continue = true;
+                if ((p = startswith(pe->dirent.d_name, "dmesg-efi-"))) {
+                        /* For the EFI backend, the 3 least significant digits of record id encodes a
+                         * "count" number, the next 2 least significant digits for the dmesg part
+                         * (chunk) number, and the remaining digits as the timestamp.  See
+                         * linux/drivers/firmware/efi/efi-pstore.c in efi_pstore_write(). */
+                        _cleanup_free_ char *subdir1 = NULL, *subdir2 = NULL;
+                        size_t plen = strlen(p);
 
-                if (move_file_and_continue) {
-                        /* A dmesg file on which we do NO additional processing */
-                        (void) move_file(pe, NULL);
-                        continue;
-                }
+                        if (plen < 6)
+                                continue;
 
-                /* See if this file is one of a related group of files
-                 * in order to reconstruct dmesg */
+                        /* Extract base record id */
+                        subdir1 = strndup(p, plen - 5);
+                        if (!subdir1)
+                                return log_oom();
+                        /* Extract "count" field */
+                        subdir2 = strndup(p + plen - 3, 3);
+                        if (!subdir2)
+                                return log_oom();
 
-                /* When dmesg is written into pstore, it is done so in
-                 * small chunks, whatever the exchange buffer size is
-                 * with the underlying pstore backend (ie. EFI may be
-                 * ~2KiB), which means an example pstore with approximately
-                 * 64KB of storage may have up to roughly 32 dmesg files
-                 * that could be related, depending upon the size of the
-                 * original dmesg.
-                 *
-                 * Here we look at the dmesg filename and try to discern
-                 * if files are part of a related group, meaning the same
-                 * original dmesg.
-                 *
-                 * The two known pstore backends are EFI and ERST. These
-                 * backends store data in the Common Platform Error
-                 * Record, CPER, format. The dmesg- filename contains the
-                 * CPER record id, a 64bit number (in decimal notation).
-                 * In Linux, the record id is encoded with two digits for
-                 * the dmesg part (chunk) number and 3 digits for the
-                 * count number. So allowing an additional digit to
-                 * compensate for advancing time, this code ignores the
-                 * last six digits of the filename in determining the
-                 * record id.
-                 *
-                 * For the EFI backend, the record id encodes an id in the
-                 * upper 32 bits, and a timestamp in the lower 32-bits.
-                 * So ignoring the least significant 6 digits has proven
-                 * to generally identify related dmesg entries.  */
-#define PSTORE_FILENAME_IGNORE 6
+                        /* Now move file from pstore to archive storage */
+                        (void) move_file(pe, subdir1, subdir2);
 
-                /* determine common portion of record id */
-                ++p; /* move beyond dmesg- */
-                plen = strlen(p);
-                if (plen > PSTORE_FILENAME_IGNORE) {
-                        pe_id = memdup_suffix0(p, plen - PSTORE_FILENAME_IGNORE);
-                        if (!pe_id) {
-                                log_oom();
-                                return;
-                        }
+                        /* Append to the dmesg */
+                        (void) append_dmesg(pe, subdir1, subdir2);
+                } else if ((p = startswith(pe->dirent.d_name, "dmesg-erst-"))) {
+                        /* For the ERST backend, the record is a monotonically increasing number, seeded as
+                         * a timestamp. See linux/drivers/acpi/apei/erst.c in erst_writer(). */
+                        uint64_t record_id;
+
+                        if (safe_atou64(p, &record_id) < 0)
+                                continue;
+                        if (last_record_id - 1 != record_id)
+                                /* A discontinuity in the number has been detected, this current record id
+                                 * will become the directory name for all pieces of the dmesg in this
+                                 * series. */
+                                if (free_and_strdup(&erst_subdir, p) < 0)
+                                        return log_oom();
+
+                        /* Now move file from pstore to archive storage */
+                        (void) move_file(pe, erst_subdir, NULL);
+
+                        /* Append to the dmesg */
+                        (void) append_dmesg(pe, erst_subdir, NULL);
+
+                        /* Update, but keep erst_subdir for next file */
+                        last_record_id = record_id;
                 } else
-                        pe_id = mfree(pe_id);
-
-                /* Now move file from pstore to archive storage */
-                move_file(pe, pe_id);
-
-                if (dmesg_bad)
-                        continue;
-
-                /* If the current record id is NOT the same as the
-                 * previous record id, then start a new dmesg.txt file */
-                if (!streq_ptr(pe_id, dmesg_id)) {
-                        /* Encountered a new dmesg group, close out old one, open new one */
-                        (void) write_dmesg(dmesg, dmesg_size, dmesg_id);
-                        dmesg_size = 0;
-
-                        /* now point dmesg_id to storage of pe_id */
-                        free_and_replace(dmesg_id, pe_id);
-                }
-
-                /* Reconstruction of dmesg is done as a useful courtesy: do not fail, but don't write garbled
-                 * output either. */
-                size_t needed = strlen(pe->dirent.d_name) + strlen(":\n") + pe->content_size + 1;
-                if (!GREEDY_REALLOC(dmesg, dmesg_size + needed)) {
-                        log_oom();
-                        dmesg_bad = true;
-                        continue;
-                }
-
-                dmesg_size += sprintf(dmesg + dmesg_size, "%s:\n", pe->dirent.d_name);
-                if (pe->content) {
-                        memcpy(dmesg + dmesg_size, pe->content, pe->content_size);
-                        dmesg_size += pe->content_size;
-                }
-
-                pe_id = mfree(pe_id);
+                        log_debug("Unknown backend, ignoring \"%s\".", pe->dirent.d_name);
         }
-
-        if (!dmesg_bad)
-                (void) write_dmesg(dmesg, dmesg_size, dmesg_id);
+        return 0;
 }
 
 static int list_files(PStoreList *list, const char *sourcepath) {
         _cleanup_(closedirp) DIR *dirp = NULL;
-        struct dirent *de;
         int r;
 
         dirp = opendir(sourcepath);
@@ -391,15 +351,15 @@
                 return r;
 
         /* Handle each pstore file */
-        /* Sort files lexigraphically ascending, generally needed by all */
+        /* Sort files lexicographically ascending, generally needed by all */
         typesafe_qsort(list.entries, list.n_entries, compare_pstore_entries);
 
         /* Process known file types */
-        process_dmesg_files(&list);
+        (void) process_dmesg_files(&list);
 
         /* Move left over files out of pstore */
         for (size_t n = 0; n < list.n_entries; n++)
-                move_file(&list.entries[n], NULL);
+                (void) move_file(&list.entries[n], NULL, NULL);
 
         return 0;
 }
diff --git a/src/quotacheck/quotacheck.c b/src/quotacheck/quotacheck.c
index 575965c..ef5fec3 100644
--- a/src/quotacheck/quotacheck.c
+++ b/src/quotacheck/quotacheck.c
@@ -13,7 +13,6 @@
 #include "process-util.h"
 #include "signal-util.h"
 #include "string-util.h"
-#include "util.h"
 
 static bool arg_skip = false;
 static bool arg_force = false;
diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c
index e003ca6..c3353e5 100644
--- a/src/random-seed/random-seed.c
+++ b/src/random-seed/random-seed.c
@@ -2,6 +2,7 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <getopt.h>
 #include <linux/random.h>
 #include <sys/ioctl.h>
 #if USE_SYS_RANDOM_H
@@ -14,6 +15,7 @@
 #include "sd-id128.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "fd-util.h"
 #include "fs-util.h"
 #include "io-util.h"
@@ -23,17 +25,29 @@
 #include "missing_syscall.h"
 #include "mkdir.h"
 #include "parse-util.h"
+#include "pretty-print.h"
 #include "random-util.h"
+#include "string-table.h"
 #include "string-util.h"
-#include "util.h"
+#include "sync-util.h"
+#include "sha256.h"
 #include "xattr-util.h"
 
+typedef enum SeedAction {
+        ACTION_LOAD,
+        ACTION_SAVE,
+        _ACTION_MAX,
+        _ACTION_INVALID = -EINVAL,
+} SeedAction;
+
 typedef enum CreditEntropy {
         CREDIT_ENTROPY_NO_WAY,
         CREDIT_ENTROPY_YES_PLEASE,
         CREDIT_ENTROPY_YES_FORCED,
 } CreditEntropy;
 
+static SeedAction arg_action = _ACTION_INVALID;
+
 static CreditEntropy may_credit(int seed_fd) {
         _cleanup_free_ char *creditable = NULL;
         const char *e;
@@ -64,7 +78,7 @@
         /* Determine if the file is marked as creditable */
         r = fgetxattr_malloc(seed_fd, "user.random-seed-creditable", &creditable);
         if (r < 0) {
-                if (IN_SET(r, -ENODATA, -ENOSYS, -EOPNOTSUPP))
+                if (ERRNO_IS_XATTR_ABSENT(r))
                         log_debug_errno(r, "Seed file is not marked as creditable, not crediting.");
                 else
                         log_warning_errno(r, "Failed to read extended attribute, ignoring: %m");
@@ -85,49 +99,316 @@
         /* Don't credit the random seed if we are in first-boot mode, because we are supposed to start from
          * scratch. This is a safety precaution for cases where we people ship "golden" images with empty
          * /etc but populated /var that contains a random seed. */
-        if (access("/run/systemd/first-boot", F_OK) < 0) {
-
-                if (errno != ENOENT) {
-                        log_warning_errno(errno, "Failed to check whether we are in first-boot mode, not crediting entropy: %m");
-                        return CREDIT_ENTROPY_NO_WAY;
-                }
-
-                /* If ENOENT all is good, we are not in first-boot mode. */
-        } else {
-                log_debug("Not crediting entropy, since booted in first-boot mode.");
+        r = RET_NERRNO(access("/run/systemd/first-boot", F_OK));
+        if (r == -ENOENT)
+                /* All is good, we are not in first-boot mode. */
+                return CREDIT_ENTROPY_YES_PLEASE;
+        if (r < 0) {
+                log_warning_errno(r, "Failed to check whether we are in first-boot mode, not crediting entropy: %m");
                 return CREDIT_ENTROPY_NO_WAY;
         }
 
-        return CREDIT_ENTROPY_YES_PLEASE;
+        log_debug("Not crediting entropy, since booted in first-boot mode.");
+        return CREDIT_ENTROPY_NO_WAY;
+}
+
+static int random_seed_size(int seed_fd, size_t *ret_size) {
+        struct stat st;
+
+        assert(ret_size);
+        assert(seed_fd >= 0);
+
+        if (fstat(seed_fd, &st) < 0)
+                return log_error_errno(errno, "Failed to stat() seed file " RANDOM_SEED ": %m");
+
+        /* If the seed file is larger than what the kernel expects, then honour the existing size and
+         * save/restore as much as it says */
+
+        *ret_size = CLAMP((uint64_t)st.st_size, random_pool_size(), RANDOM_POOL_SIZE_MAX);
+        return 0;
+}
+
+static void load_machine_id(int urandom_fd) {
+        sd_id128_t mid;
+        int r;
+
+        assert(urandom_fd >= 0);
+
+        /* As an extra protection against "golden images" that are put together sloppily, i.e. images which
+         * are duplicated on multiple systems but where the random seed file is not properly
+         * reset. Frequently the machine ID is properly reset on those systems however (simply because it's
+         * easier to notice, if it isn't due to address clashes and so on, while random seed equivalence is
+         * generally not noticed easily), hence let's simply write the machined ID into the random pool
+         * too. */
+        r = sd_id128_get_machine(&mid);
+        if (r < 0)
+                return (void) log_debug_errno(r, "Failed to get machine ID, ignoring: %m");
+
+        r = random_write_entropy(urandom_fd, &mid, sizeof(mid), /* credit= */ false);
+        if (r < 0)
+                log_debug_errno(r, "Failed to write machine ID to /dev/urandom, ignoring: %m");
+}
+
+static int load_seed_file(
+                int seed_fd,
+                int urandom_fd,
+                size_t seed_size,
+                struct sha256_ctx **ret_hash_state) {
+
+        _cleanup_free_ void *buf = NULL;
+        CreditEntropy lets_credit;
+        ssize_t k;
+        int r;
+
+        assert(seed_fd >= 0);
+        assert(urandom_fd >= 0);
+
+        buf = malloc(seed_size);
+        if (!buf)
+                return log_oom();
+
+        k = loop_read(seed_fd, buf, seed_size, false);
+        if (k < 0) {
+                log_warning_errno(k, "Failed to read seed from " RANDOM_SEED ": %m");
+                return 0;
+        }
+        if (k == 0) {
+                log_debug("Seed file " RANDOM_SEED " not yet initialized, proceeding.");
+                return 0;
+        }
+
+        /* If we're going to later write out a seed file, initialize a hash state with the contents of the
+         * seed file we just read, so that the new one can't regress in entropy. */
+        if (ret_hash_state) {
+                struct sha256_ctx *hash_state;
+
+                hash_state = new(struct sha256_ctx, 1);
+                if (!hash_state)
+                        return log_oom();
+
+                sha256_init_ctx(hash_state);
+                sha256_process_bytes_and_size(buf, k, hash_state); /* Hash with length to distinguish from new seed. */
+
+                *ret_hash_state = hash_state;
+        }
+
+        (void) lseek(seed_fd, 0, SEEK_SET);
+
+        lets_credit = may_credit(seed_fd);
+
+        /* Before we credit or use the entropy, let's make sure to securely drop the creditable xattr from
+         * the file, so that we never credit the same random seed again. Note that further down we'll write a
+         * new seed again, and likely mark it as credible again, hence this is just paranoia to close the
+         * short time window between the time we upload the random seed into the kernel and download the new
+         * one from it. */
+
+        if (fremovexattr(seed_fd, "user.random-seed-creditable") < 0) {
+                if (!ERRNO_IS_XATTR_ABSENT(errno))
+                        log_warning_errno(errno, "Failed to remove extended attribute, ignoring: %m");
+
+                /* Otherwise, there was no creditable flag set, which is OK. */
+        } else {
+                r = fsync_full(seed_fd);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to synchronize seed to disk, not crediting entropy: %m");
+
+                        if (lets_credit == CREDIT_ENTROPY_YES_PLEASE)
+                                lets_credit = CREDIT_ENTROPY_NO_WAY;
+                }
+        }
+
+        r = random_write_entropy(urandom_fd, buf, k,
+                                 IN_SET(lets_credit, CREDIT_ENTROPY_YES_PLEASE, CREDIT_ENTROPY_YES_FORCED));
+        if (r < 0)
+                log_warning_errno(r, "Failed to write seed to /dev/urandom: %m");
+
+        return 0;
+}
+
+static int save_seed_file(
+                int seed_fd,
+                int urandom_fd,
+                size_t seed_size,
+                bool synchronous,
+                struct sha256_ctx *hash_state) {
+
+        _cleanup_free_ void *buf = NULL;
+        bool getrandom_worked = false;
+        ssize_t k, l;
+        int r;
+
+        assert(seed_fd >= 0);
+        assert(urandom_fd >= 0);
+
+        /* This is just a safety measure. Given that we are root and most likely created the file ourselves
+         * the mode and owner should be correct anyway. */
+        r = fchmod_and_chown(seed_fd, 0600, 0, 0);
+        if (r < 0)
+                return log_error_errno(r, "Failed to adjust seed file ownership and access mode: %m");
+
+        buf = malloc(seed_size);
+        if (!buf)
+                return log_oom();
+
+        k = getrandom(buf, seed_size, GRND_NONBLOCK);
+        if (k < 0 && errno == EAGAIN && synchronous) {
+                /* If we're asked to make ourselves a barrier for proper initialization of the random pool
+                 * make this whole job synchronous by asking getrandom() to wait until the requested number
+                 * of random bytes is available. */
+                log_notice("Kernel entropy pool is not initialized yet, waiting until it is.");
+                k = getrandom(buf, seed_size, 0);
+        }
+        if (k < 0)
+                log_debug_errno(errno, "Failed to read random data with getrandom(), falling back to /dev/urandom: %m");
+        else if ((size_t) k < seed_size)
+                log_debug("Short read from getrandom(), falling back to /dev/urandom.");
+        else
+                getrandom_worked = true;
+
+        if (!getrandom_worked) {
+                /* Retry with classic /dev/urandom */
+                k = loop_read(urandom_fd, buf, seed_size, false);
+                if (k < 0)
+                        return log_error_errno(k, "Failed to read new seed from /dev/urandom: %m");
+                if (k == 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Got EOF while reading from /dev/urandom.");
+        }
+
+        /* If we previously read in a seed file, then hash the new seed into the old one, and replace the
+         * last 32 bytes of the seed with the hash output, so that the new seed file can't regress in
+         * entropy. */
+        if (hash_state) {
+                uint8_t hash[SHA256_DIGEST_SIZE];
+
+                sha256_process_bytes_and_size(buf, k, hash_state); /* Hash with length to distinguish from old seed. */
+                sha256_finish_ctx(hash_state, hash);
+                l = MIN((size_t)k, sizeof(hash));
+                memcpy((uint8_t *)buf + k - l, hash, l);
+        }
+
+        r = loop_write(seed_fd, buf, (size_t) k, false);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write new random seed file: %m");
+
+        if (ftruncate(seed_fd, k) < 0)
+                return log_error_errno(r, "Failed to truncate random seed file: %m");
+
+        r = fsync_full(seed_fd);
+        if (r < 0)
+                return log_error_errno(r, "Failed to synchronize seed file: %m");
+
+        /* If we got this random seed data from getrandom() the data is suitable for crediting entropy later
+         * on. Let's keep that in mind by setting an extended attribute. on the file */
+        if (getrandom_worked)
+                if (fsetxattr(seed_fd, "user.random-seed-creditable", "1", 1, 0) < 0)
+                        log_full_errno(ERRNO_IS_NOT_SUPPORTED(errno) ? LOG_DEBUG : LOG_WARNING, errno,
+                                       "Failed to mark seed file as creditable, ignoring: %m");
+        return 0;
+}
+
+static int help(int argc, char *argv[], void *userdata) {
+        _cleanup_free_ char *link = NULL;
+        int r;
+
+        r = terminal_urlify_man("systemd-random-seed", "8", &link);
+        if (r < 0)
+                return log_oom();
+
+        printf("%1$s [OPTIONS...] COMMAND\n"
+               "\n%5$sLoad and save the system random seed at boot and shutdown.%6$s\n"
+               "\n%3$sCommands:%4$s\n"
+               "  load                Load a random seed saved on disk into the kernel entropy pool\n"
+               "  save                Save a new random seed on disk\n"
+               "\n%3$sOptions:%4$s\n"
+               "  -h --help           Show this help\n"
+               "     --version        Show package version\n"
+               "\nSee the %2$s for details.\n",
+               program_invocation_short_name,
+               link,
+               ansi_underline(),
+               ansi_normal(),
+               ansi_highlight(),
+               ansi_normal());
+
+        return 0;
+}
+
+static const char* const seed_action_table[_ACTION_MAX] = {
+        [ACTION_LOAD] = "load",
+        [ACTION_SAVE] = "save",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(seed_action, SeedAction);
+
+static int parse_argv(int argc, char *argv[]) {
+        enum {
+                ARG_VERSION = 0x100,
+        };
+
+        static const struct option options[] = {
+                { "help",    no_argument, NULL, 'h'         },
+                { "version", no_argument, NULL, ARG_VERSION },
+        };
+
+        int c;
+
+        assert(argc >= 0);
+        assert(argv);
+
+        while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
+                switch (c) {
+                case 'h':
+                        return help(0, NULL, NULL);
+                case ARG_VERSION:
+                        return version();
+                case '?':
+                        return -EINVAL;
+
+                default:
+                        assert_not_reached();
+                }
+
+        if (optind + 1 != argc)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "This program requires one argument.");
+
+        arg_action = seed_action_from_string(argv[optind]);
+        if (arg_action < 0)
+                return log_error_errno(arg_action, "Unknown action '%s'", argv[optind]);
+
+        return 1;
 }
 
 static int run(int argc, char *argv[]) {
-        _cleanup_close_ int seed_fd = -1, random_fd = -1;
+        _cleanup_free_ struct sha256_ctx *hash_state = NULL;
+        _cleanup_close_ int seed_fd = -EBADF, random_fd = -EBADF;
         bool read_seed_file, write_seed_file, synchronous;
-        _cleanup_free_ void* buf = NULL;
-        size_t buf_size;
-        struct stat st;
-        ssize_t k;
+        size_t seed_size;
         int r;
 
         log_setup();
 
-        if (argc != 2)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "This program requires one argument.");
+        r = parse_argv(argc, argv);
+        if (r <= 0)
+                return r;
 
         umask(0022);
 
-        buf_size = random_pool_size();
-
         r = mkdir_parents(RANDOM_SEED, 0755);
         if (r < 0)
                 return log_error_errno(r, "Failed to create directory " RANDOM_SEED_DIR ": %m");
 
-        /* When we load the seed we read it and write it to the device and then immediately update the saved seed with
-         * new data, to make sure the next boot gets seeded differently. */
+        random_fd = open("/dev/urandom", O_RDWR|O_CLOEXEC|O_NOCTTY);
+        if (random_fd < 0)
+                return log_error_errno(errno, "Failed to open /dev/urandom: %m");
 
-        if (streq(argv[1], "load")) {
+        /* When we load the seed we read it and write it to the device and then immediately update the saved
+         * seed with new data, to make sure the next boot gets seeded differently. */
+
+        switch (arg_action) {
+        case ACTION_LOAD:
+                /* First, let's write the machine ID into /dev/urandom, not crediting entropy. See
+                 * load_machine_id() for an explanation why. */
+                load_machine_id(random_fd);
 
                 seed_fd = open(RANDOM_SEED, O_RDWR|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
                 if (seed_fd < 0) {
@@ -138,29 +419,20 @@
                         seed_fd = open(RANDOM_SEED, O_RDONLY|O_CLOEXEC|O_NOCTTY);
                         if (seed_fd < 0) {
                                 bool missing = errno == ENOENT;
+                                int level = missing ? LOG_DEBUG : LOG_ERR;
 
-                                log_full_errno(missing ? LOG_DEBUG : LOG_ERR,
-                                               open_rw_error, "Failed to open " RANDOM_SEED " for writing: %m");
-                                r = log_full_errno(missing ? LOG_DEBUG : LOG_ERR,
-                                                   errno, "Failed to open " RANDOM_SEED " for reading: %m");
-                                return missing ? 0 : r;
+                                log_full_errno(level, open_rw_error, "Failed to open " RANDOM_SEED " for writing: %m");
+                                log_full_errno(level, errno, "Failed to open " RANDOM_SEED " for reading: %m");
+                                return missing ? 0 : -errno;
                         }
                 } else
                         write_seed_file = true;
 
-                random_fd = open("/dev/urandom", O_RDWR|O_CLOEXEC|O_NOCTTY, 0600);
-                if (random_fd < 0)
-                        return log_error_errno(errno, "Failed to open /dev/urandom: %m");
-
                 read_seed_file = true;
                 synchronous = true; /* make this invocation a synchronous barrier for random pool initialization */
+                break;
 
-        } else if (streq(argv[1], "save")) {
-
-                random_fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                if (random_fd < 0)
-                        return log_error_errno(errno, "Failed to open /dev/urandom: %m");
-
+        case ACTION_SAVE:
                 seed_fd = open(RANDOM_SEED, O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
                 if (seed_fd < 0)
                         return log_error_errno(errno, "Failed to open " RANDOM_SEED ": %m");
@@ -168,134 +440,24 @@
                 read_seed_file = false;
                 write_seed_file = true;
                 synchronous = false;
-        } else
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Unknown verb '%s'.", argv[1]);
+                break;
 
-        if (fstat(seed_fd, &st) < 0)
-                return log_error_errno(errno, "Failed to stat() seed file " RANDOM_SEED ": %m");
-
-        /* If the seed file is larger than what we expect, then honour the existing size and save/restore as much as it says */
-        if ((uint64_t) st.st_size > buf_size)
-                buf_size = MIN(st.st_size, RANDOM_POOL_SIZE_MAX);
-
-        buf = malloc(buf_size);
-        if (!buf)
-                return log_oom();
-
-        if (read_seed_file) {
-                sd_id128_t mid;
-
-                /* First, let's write the machine ID into /dev/urandom, not crediting entropy. Why? As an
-                 * extra protection against "golden images" that are put together sloppily, i.e. images which
-                 * are duplicated on multiple systems but where the random seed file is not properly
-                 * reset. Frequently the machine ID is properly reset on those systems however (simply
-                 * because it's easier to notice, if it isn't due to address clashes and so on, while random
-                 * seed equivalence is generally not noticed easily), hence let's simply write the machined
-                 * ID into the random pool too. */
-                r = sd_id128_get_machine(&mid);
-                if (r < 0)
-                        log_debug_errno(r, "Failed to get machine ID, ignoring: %m");
-                else {
-                        r = loop_write(random_fd, &mid, sizeof(mid), false);
-                        if (r < 0)
-                                log_debug_errno(r, "Failed to write machine ID to /dev/urandom, ignoring: %m");
-                }
-
-                k = loop_read(seed_fd, buf, buf_size, false);
-                if (k < 0)
-                        log_error_errno(k, "Failed to read seed from " RANDOM_SEED ": %m");
-                else if (k == 0)
-                        log_debug("Seed file " RANDOM_SEED " not yet initialized, proceeding.");
-                else {
-                        CreditEntropy lets_credit;
-
-                        (void) lseek(seed_fd, 0, SEEK_SET);
-
-                        lets_credit = may_credit(seed_fd);
-
-                        /* Before we credit or use the entropy, let's make sure to securely drop the
-                         * creditable xattr from the file, so that we never credit the same random seed
-                         * again. Note that further down we'll write a new seed again, and likely mark it as
-                         * credible again, hence this is just paranoia to close the short time window between
-                         * the time we upload the random seed into the kernel and download the new one from
-                         * it. */
-
-                        if (fremovexattr(seed_fd, "user.random-seed-creditable") < 0) {
-                                if (!IN_SET(errno, ENODATA, ENOSYS, EOPNOTSUPP))
-                                        log_warning_errno(errno, "Failed to remove extended attribute, ignoring: %m");
-
-                                /* Otherwise, there was no creditable flag set, which is OK. */
-                        } else {
-                                r = fsync_full(seed_fd);
-                                if (r < 0) {
-                                        log_warning_errno(r, "Failed to synchronize seed to disk, not crediting entropy: %m");
-
-                                        if (lets_credit == CREDIT_ENTROPY_YES_PLEASE)
-                                                lets_credit = CREDIT_ENTROPY_NO_WAY;
-                                }
-                        }
-
-                        r = random_write_entropy(random_fd, buf, k,
-                                                 IN_SET(lets_credit, CREDIT_ENTROPY_YES_PLEASE, CREDIT_ENTROPY_YES_FORCED));
-                        if (r < 0)
-                                log_error_errno(r, "Failed to write seed to /dev/urandom: %m");
-                }
+        default:
+                assert_not_reached();
         }
 
-        if (write_seed_file) {
-                bool getrandom_worked = false;
+        r = random_seed_size(seed_fd, &seed_size);
+        if (r < 0)
+                return r;
 
-                /* This is just a safety measure. Given that we are root and most likely created the file
-                 * ourselves the mode and owner should be correct anyway. */
-                r = fchmod_and_chown(seed_fd, 0600, 0, 0);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to adjust seed file ownership and access mode.");
+        if (read_seed_file)
+                r = load_seed_file(seed_fd, random_fd, seed_size,
+                                   write_seed_file ? &hash_state : NULL);
 
-                /* Let's make this whole job asynchronous, i.e. let's make ourselves a barrier for
-                 * proper initialization of the random pool. */
-                k = getrandom(buf, buf_size, GRND_NONBLOCK);
-                if (k < 0 && errno == EAGAIN && synchronous) {
-                        log_notice("Kernel entropy pool is not initialized yet, waiting until it is.");
-                        k = getrandom(buf, buf_size, 0); /* retry synchronously */
-                }
-                if (k < 0)
-                        log_debug_errno(errno, "Failed to read random data with getrandom(), falling back to /dev/urandom: %m");
-                else if ((size_t) k < buf_size)
-                        log_debug("Short read from getrandom(), falling back to /dev/urandom.");
-                else
-                        getrandom_worked = true;
+        if (r >= 0 && write_seed_file)
+                r = save_seed_file(seed_fd, random_fd, seed_size, synchronous, hash_state);
 
-                if (!getrandom_worked) {
-                        /* Retry with classic /dev/urandom */
-                        k = loop_read(random_fd, buf, buf_size, false);
-                        if (k < 0)
-                                return log_error_errno(k, "Failed to read new seed from /dev/urandom: %m");
-                        if (k == 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                                       "Got EOF while reading from /dev/urandom.");
-                }
-
-                r = loop_write(seed_fd, buf, (size_t) k, false);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to write new random seed file: %m");
-
-                if (ftruncate(seed_fd, k) < 0)
-                        return log_error_errno(r, "Failed to truncate random seed file: %m");
-
-                r = fsync_full(seed_fd);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to synchronize seed file: %m");
-
-                /* If we got this random seed data from getrandom() the data is suitable for crediting
-                 * entropy later on. Let's keep that in mind by setting an extended attribute. on the file */
-                if (getrandom_worked)
-                        if (fsetxattr(seed_fd, "user.random-seed-creditable", "1", 1, 0) < 0)
-                                log_full_errno(ERRNO_IS_NOT_SUPPORTED(errno) ? LOG_DEBUG : LOG_WARNING, errno,
-                                               "Failed to mark seed file as creditable, ignoring: %m");
-        }
-
-        return 0;
+        return r;
 }
 
 DEFINE_MAIN_FUNCTION(run);
diff --git a/src/rc-local-generator/rc-local-generator.c b/src/rc-local-generator/rc-local-generator.c
index 99cffee..d8c06b1 100644
--- a/src/rc-local-generator/rc-local-generator.c
+++ b/src/rc-local-generator/rc-local-generator.c
@@ -6,9 +6,8 @@
 
 #include "generator.h"
 #include "log.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "string-util.h"
-#include "util.h"
 
 static const char *arg_dest = NULL;
 
diff --git a/src/remount-fs/remount-fs.c b/src/remount-fs/remount-fs.c
index d747d60..4515592 100644
--- a/src/remount-fs/remount-fs.c
+++ b/src/remount-fs/remount-fs.c
@@ -18,7 +18,6 @@
 #include "process-util.h"
 #include "signal-util.h"
 #include "strv.h"
-#include "util.h"
 
 /* Goes through /etc/fstab and remounts all API file systems, applying options that are in /etc/fstab that systemd
  * might not have respected */
diff --git a/src/reply-password/reply-password.c b/src/reply-password/reply-password.c
index a9aa4b8..ce4582a 100644
--- a/src/reply-password/reply-password.c
+++ b/src/reply-password/reply-password.c
@@ -13,7 +13,6 @@
 #include "memory-util.h"
 #include "socket-util.h"
 #include "string-util.h"
-#include "util.h"
 
 static int send_on_socket(int fd, const char *socket_name, const void *packet, size_t size) {
         union sockaddr_union sa = {};
@@ -35,7 +34,7 @@
 
 static int run(int argc, char *argv[]) {
         _cleanup_(erase_and_freep) char *packet = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         size_t length = 0;
         int r;
 
diff --git a/src/resolve/dns_type-to-name.awk b/src/resolve/dns_type-to-name.awk
index 2d9794b..92187d5 100644
--- a/src/resolve/dns_type-to-name.awk
+++ b/src/resolve/dns_type-to-name.awk
@@ -1,7 +1,8 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 BEGIN{
-        print "const char *dns_type_to_string(int type) {\n\tswitch(type) {"
+        print "const char *dns_type_to_string(int type) {"
+        print "        switch (type) {"
 }
 {
         printf "        case DNS_TYPE_%s: return ", $1;
@@ -9,5 +10,7 @@
         printf "\"%s\";\n", $1
 }
 END{
-        print "        default: return NULL;\n\t}\n}\n"
+        print "        default: return NULL;"
+        print "        }"
+        print "}"
 }
diff --git a/src/resolve/fuzz-dns-packet.c b/src/resolve/fuzz-dns-packet.c
index b9a0aa1..de5ee20 100644
--- a/src/resolve/fuzz-dns-packet.c
+++ b/src/resolve/fuzz-dns-packet.c
@@ -7,7 +7,7 @@
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
 
-        if (size > DNS_PACKET_SIZE_MAX)
+        if (outside_size_range(size, 0, DNS_PACKET_SIZE_MAX))
                 return 0;
 
         assert_se(dns_packet_new(&p, DNS_PROTOCOL_DNS, 0, DNS_PACKET_SIZE_MAX) >= 0);
diff --git a/src/resolve/fuzz-dns-packet.options b/src/resolve/fuzz-dns-packet.options
index 0824b19..678d526 100644
--- a/src/resolve/fuzz-dns-packet.options
+++ b/src/resolve/fuzz-dns-packet.options
@@ -1,2 +1,2 @@
 [libfuzzer]
-max_len = 65535
+max_len = 65536
diff --git a/src/resolve/fuzz-etc-hosts.c b/src/resolve/fuzz-etc-hosts.c
new file mode 100644
index 0000000..bd6d0a8
--- /dev/null
+++ b/src/resolve/fuzz-etc-hosts.c
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "fd-util.h"
+#include "fuzz.h"
+#include "resolved-etc-hosts.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_(etc_hosts_clear) EtcHosts h = {};
+
+        if (!getenv("SYSTEMD_LOG_LEVEL"))
+                log_set_max_level(LOG_CRIT);
+
+        f = data_to_file(data, size);
+        assert_se(f);
+
+        (void) etc_hosts_parse(&h, f);
+
+        return 0;
+}
diff --git a/src/resolve/fuzz-resource-record.c b/src/resolve/fuzz-resource-record.c
new file mode 100644
index 0000000..15c4659
--- /dev/null
+++ b/src/resolve/fuzz-resource-record.c
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "fd-util.h"
+#include "fuzz.h"
+#include "memory-util.h"
+#include "resolved-dns-packet.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        _cleanup_free_ char *out = NULL; /* out should be freed after f */
+        size_t out_size;
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL, *copy = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        if (outside_size_range(size, 0, DNS_PACKET_SIZE_MAX))
+                return 0;
+
+        if (dns_resource_record_new_from_raw(&rr, data, size) < 0)
+                return 0;
+
+        assert_se(copy = dns_resource_record_copy(rr));
+        assert_se(dns_resource_record_equal(copy, rr) > 0);
+
+        assert_se(f = open_memstream_unlocked(&out, &out_size));
+        (void) fprintf(f, "%s", strna(dns_resource_record_to_string(rr)));
+
+        if (dns_resource_record_to_json(rr, &v) < 0)
+                return 0;
+
+        (void) json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, f, NULL);
+        (void) dns_resource_record_to_wire_format(rr, false);
+        (void) dns_resource_record_to_wire_format(rr, true);
+
+        return 0;
+}
diff --git a/src/resolve/meson.build b/src/resolve/meson.build
index 1f9b8af..331c925 100644
--- a/src/resolve/meson.build
+++ b/src/resolve/meson.build
@@ -2,83 +2,47 @@
 
 resolve_includes = [includes, include_directories('.')]
 
-basic_dns_sources = files('''
-        resolved-dns-dnssec.c
-        resolved-dns-dnssec.h
-        resolved-dns-packet.c
-        resolved-dns-packet.h
-        resolved-dns-rr.c
-        resolved-dns-rr.h
-        resolved-dns-answer.c
-        resolved-dns-answer.h
-        resolved-dns-question.c
-        resolved-dns-question.h
-        resolved-util.c
-        resolved-util.h
-        dns-type.c
-        dns-type.h
-'''.split())
+basic_dns_sources = files(
+        'resolved-dns-dnssec.c',
+        'resolved-dns-packet.c',
+        'resolved-dns-rr.c',
+        'resolved-dns-answer.c',
+        'resolved-dns-question.c',
+        'resolved-util.c',
+        'dns-type.c',
+)
 
-systemd_resolved_sources = files('''
-        resolved-bus.c
-        resolved-bus.h
-        resolved-conf.c
-        resolved-conf.h
-        resolved-def.h
-        resolved-dns-cache.c
-        resolved-dns-cache.h
-        resolved-dns-query.c
-        resolved-dns-query.h
-        resolved-dns-scope.c
-        resolved-dns-scope.h
-        resolved-dns-search-domain.c
-        resolved-dns-search-domain.h
-        resolved-dns-server.c
-        resolved-dns-server.h
-        resolved-dns-stream.c
-        resolved-dns-stream.h
-        resolved-dns-stub.c
-        resolved-dns-stub.h
-        resolved-dns-synthesize.c
-        resolved-dns-synthesize.h
-        resolved-dns-transaction.c
-        resolved-dns-transaction.h
-        resolved-dns-trust-anchor.c
-        resolved-dns-trust-anchor.h
-        resolved-dns-zone.c
-        resolved-dns-zone.h
-        resolved-dnssd-bus.c
-        resolved-dnssd-bus.h
-        resolved-dnssd.c
-        resolved-dnssd.h
-        resolved-dnstls.h
-        resolved-etc-hosts.c
-        resolved-etc-hosts.h
-        resolved-link-bus.c
-        resolved-link-bus.h
-        resolved-link.c
-        resolved-link.h
-        resolved-llmnr.c
-        resolved-llmnr.h
-        resolved-manager.c
-        resolved-manager.h
-        resolved-mdns.c
-        resolved-mdns.h
-        resolved-resolv-conf.c
-        resolved-resolv-conf.h
-        resolved-socket-graveyard.c
-        resolved-socket-graveyard.h
-        resolved-varlink.c
-        resolved-varlink.h
-        resolved.c
-'''.split())
+systemd_resolved_sources = files(
+        'resolved-bus.c',
+        'resolved-conf.c',
+        'resolved-dns-cache.c',
+        'resolved-dns-query.c',
+        'resolved-dns-scope.c',
+        'resolved-dns-search-domain.c',
+        'resolved-dns-server.c',
+        'resolved-dns-stream.c',
+        'resolved-dns-stub.c',
+        'resolved-dns-synthesize.c',
+        'resolved-dns-transaction.c',
+        'resolved-dns-trust-anchor.c',
+        'resolved-dns-zone.c',
+        'resolved-dnssd-bus.c',
+        'resolved-dnssd.c',
+        'resolved-etc-hosts.c',
+        'resolved-link-bus.c',
+        'resolved-link.c',
+        'resolved-llmnr.c',
+        'resolved-manager.c',
+        'resolved-mdns.c',
+        'resolved-resolv-conf.c',
+        'resolved-socket-graveyard.c',
+        'resolved-varlink.c',
+)
 
-resolvectl_sources = files('''
-         resolvconf-compat.c
-         resolvconf-compat.h
-         resolvectl.c
-         resolvectl.h
-'''.split())
+resolvectl_sources = files(
+        'resolvconf-compat.c',
+        'resolvectl.c',
+)
 
 ############################################################
 
@@ -120,7 +84,8 @@
 libsystemd_resolve_core = static_library(
         'systemd-resolve-core',
         basic_dns_sources,
-        include_directories : includes)
+        include_directories : includes,
+        build_by_default : false)
 
 systemd_resolved_sources += custom_target(
         'resolved_gperf.c',
@@ -134,17 +99,17 @@
         output : 'resolved-dnssd-gperf.c',
         command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
-systemd_resolved_dependencies = [threads, libgpg_error, libm]
+systemd_resolved_dependencies = [threads, libm] + [lib_openssl_or_gcrypt]
 if conf.get('ENABLE_DNS_OVER_TLS') == 1
         if conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1
                 systemd_resolved_sources += files(
                         'resolved-dnstls-gnutls.c',
-                        'resolved-dnstls-gnutls.h')
+                )
                 systemd_resolved_dependencies += libgnutls
         elif conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1
                 systemd_resolved_sources += files(
                         'resolved-dnstls-openssl.c',
-                        'resolved-dnstls-openssl.h')
+                )
                 systemd_resolved_dependencies += libopenssl
         else
                 error('unknown dependency for supporting DNS-over-TLS')
@@ -166,65 +131,78 @@
         'resolved.conf',
         input : 'resolved.conf.in',
         output : 'resolved.conf',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : conf.get('ENABLE_RESOLVE') == 1 and install_sysconfdir_samples,
         install_dir : pkgsysconfdir)
 
 ############################################################
 
 tests += [
-        [['src/resolve/test-resolve-tables.c'],
+        [files('test-resolve-tables.c'),
          [libsystemd_resolve_core,
           libshared],
-         [libgcrypt,
-          libgpg_error,
+         [lib_openssl_or_gcrypt,
           libm]],
 
-        [['src/resolve/test-dns-packet.c'],
+        [files('test-dns-packet.c'),
          [libsystemd_resolve_core,
           libshared],
-         [libgcrypt,
-          libgpg_error,
+         [lib_openssl_or_gcrypt,
           libm]],
 
-        [['src/resolve/test-resolved-etc-hosts.c',
-          'src/resolve/resolved-etc-hosts.c',
-          'src/resolve/resolved-etc-hosts.h'],
+        [files('test-resolved-etc-hosts.c',
+               'resolved-etc-hosts.c'),
          [libsystemd_resolve_core,
           libshared],
-         [libgcrypt,
-          libgpg_error,
+         [lib_openssl_or_gcrypt,
           libm]],
 
-        [['src/resolve/test-resolved-packet.c'],
+        [files('test-resolved-packet.c'),
          [libsystemd_resolve_core,
           libshared],
-         [libgcrypt,
-          libgpg_error,
+         [lib_openssl_or_gcrypt,
           libm]],
 
-        [['src/resolve/test-dnssec.c'],
-         [libsystemd_resolve_core,
-          libshared],
-         [libgcrypt,
-          libgpg_error,
-          libm]],
+        [files('test-resolved-stream.c')
+         + basic_dns_sources + systemd_resolved_sources,
+         [libshared],
+         [lib_openssl_or_gcrypt,
+          libm]
+         + systemd_resolved_dependencies,
+         resolve_includes],
 
-        [['src/resolve/test-dnssec-complex.c'],
+        [files('test-dnssec.c'),
          [libsystemd_resolve_core,
           libshared],
-         [libgcrypt,
-          libgpg_error,
+         [lib_openssl_or_gcrypt,
+          libm],
+         [], 'HAVE_OPENSSL_OR_GCRYPT'],
+
+        [files('test-dnssec-complex.c'),
+         [libsystemd_resolve_core,
+          libshared],
+         [lib_openssl_or_gcrypt,
           libm],
          [], '', 'manual'],
 ]
 
 fuzzers += [
-        [['src/resolve/fuzz-dns-packet.c'],
+        [files('fuzz-dns-packet.c'),
          [libsystemd_resolve_core,
           libshared],
-         [libgcrypt,
-          libgpg_error,
+         [lib_openssl_or_gcrypt,
+          libm]],
+        [files('fuzz-etc-hosts.c',
+          'resolved-etc-hosts.c'),
+         [libsystemd_resolve_core,
+          libshared],
+         [lib_openssl_or_gcrypt,
+          libm]],
+        [files('fuzz-resource-record.c'),
+         [libsystemd_resolve_core,
+          libshared],
+         [lib_openssl_or_gcrypt,
           libm]],
 ]
+
+systemd_resolved_sources += files('resolved.c')
diff --git a/src/resolve/org.freedesktop.resolve1.conf b/src/resolve/org.freedesktop.resolve1.conf
index 25b0977..52ea558 100644
--- a/src/resolve/org.freedesktop.resolve1.conf
+++ b/src/resolve/org.freedesktop.resolve1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   This file is part of systemd.
diff --git a/src/resolve/org.freedesktop.resolve1.policy b/src/resolve/org.freedesktop.resolve1.policy
index 2408bb9..502b975 100644
--- a/src/resolve/org.freedesktop.resolve1.policy
+++ b/src/resolve/org.freedesktop.resolve1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/resolve/resolvconf-compat.c b/src/resolve/resolvconf-compat.c
index 991c62e..3804d3d 100644
--- a/src/resolve/resolvconf-compat.c
+++ b/src/resolve/resolvconf-compat.c
@@ -4,7 +4,8 @@
 #include <net/if.h>
 
 #include "alloc-util.h"
-#include "def.h"
+#include "build.h"
+#include "constants.h"
 #include "dns-domain.h"
 #include "extract-word.h"
 #include "fileio.h"
@@ -136,7 +137,7 @@
         arg_mode = _MODE_INVALID;
 
         while ((c = getopt_long(argc, argv, "hadxpfm:uIi:l:Rr:vV", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
 
                 case 'h':
                         return resolvconf_help();
@@ -203,7 +204,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_mode == _MODE_INVALID)
diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c
index 7d13ed3..2638e98 100644
--- a/src/resolve/resolvectl.c
+++ b/src/resolve/resolvectl.c
@@ -9,26 +9,31 @@
 
 #include "af-list.h"
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-common-errors.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-map-properties.h"
 #include "bus-message-util.h"
 #include "dns-domain.h"
+#include "errno-list.h"
 #include "escape.h"
 #include "format-table.h"
 #include "format-util.h"
 #include "gcrypt-util.h"
 #include "hostname-util.h"
+#include "json.h"
 #include "main-func.h"
 #include "missing_network.h"
 #include "netlink-util.h"
+#include "openssl-util.h"
 #include "pager.h"
 #include "parse-argument.h"
 #include "parse-util.h"
 #include "pretty-print.h"
 #include "process-util.h"
 #include "resolvconf-compat.h"
+#include "resolve-util.h"
 #include "resolvectl.h"
 #include "resolved-def.h"
 #include "resolved-dns-packet.h"
@@ -40,6 +45,8 @@
 #include "strv.h"
 #include "terminal-util.h"
 #include "utf8.h"
+#include "varlink.h"
+#include "verb-log-control.h"
 #include "verbs.h"
 
 static int arg_family = AF_UNSPEC;
@@ -49,6 +56,7 @@
 static uint16_t arg_class = 0;
 static bool arg_legend = true;
 static uint64_t arg_flags = 0;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 static PagerFlags arg_pager_flags = 0;
 bool arg_ifindex_permissive = false; /* If true, don't generate an error if the specified interface index doesn't exist */
 static const char *arg_service_family = NULL;
@@ -102,56 +110,77 @@
         return strcmp_ptr(a->name, b->name);
 }
 
-int ifname_mangle(const char *s) {
-        _cleanup_free_ char *iface = NULL;
-        int ifi;
+int ifname_mangle_full(const char *s, bool drop_protocol_specifier) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+        _cleanup_strv_free_ char **found = NULL;
+        int r;
 
         assert(s);
 
-        iface = strdup(s);
-        if (!iface)
-                return log_oom();
+        if (drop_protocol_specifier) {
+                _cleanup_free_ char *buf = NULL;
+                int ifindex_longest_name = -ENODEV;
 
-        ifi = rtnl_resolve_interface(NULL, iface);
-        if (ifi < 0) {
-                if (ifi == -ENODEV && arg_ifindex_permissive) {
-                        log_debug("Interface '%s' not found, but -f specified, ignoring.", iface);
-                        return 0; /* done */
+                /* When invoked as resolvconf, drop the protocol specifier(s) at the end. */
+
+                buf = strdup(s);
+                if (!buf)
+                        return log_oom();
+
+                for (;;) {
+                        r = rtnl_resolve_interface(&rtnl, buf);
+                        if (r > 0) {
+                                if (ifindex_longest_name <= 0)
+                                        ifindex_longest_name = r;
+
+                                r = strv_extend(&found, buf);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                        char *dot = strrchr(buf, '.');
+                        if (!dot)
+                                break;
+
+                        *dot = '\0';
                 }
 
-                return log_error_errno(ifi, "Failed to resolve interface \"%s\": %m", iface);
+                unsigned n = strv_length(found);
+                if (n > 1) {
+                        _cleanup_free_ char *joined = NULL;
+
+                        joined = strv_join(found, ", ");
+                        log_warning("Found multiple interfaces (%s) matching with '%s'. Using '%s' (ifindex=%i).",
+                                    strna(joined), s, found[0], ifindex_longest_name);
+
+                } else if (n == 1) {
+                        const char *proto;
+
+                        proto = ASSERT_PTR(startswith(s, found[0]));
+                        if (!isempty(proto))
+                                log_info("Dropped protocol specifier '%s' from '%s'. Using '%s' (ifindex=%i).",
+                                         proto, s, found[0], ifindex_longest_name);
+                }
+
+                r = ifindex_longest_name;
+        } else
+                r = rtnl_resolve_interface(&rtnl, s);
+        if (r < 0) {
+                if (ERRNO_IS_DEVICE_ABSENT(r) && arg_ifindex_permissive) {
+                        log_debug_errno(r, "Interface '%s' not found, but -f specified, ignoring: %m", s);
+                        return 0; /* done */
+                }
+                return log_error_errno(r, "Failed to resolve interface \"%s\": %m", s);
         }
 
-        if (arg_ifindex > 0 && arg_ifindex != ifi)
+        if (arg_ifindex > 0 && arg_ifindex != r)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Specified multiple different interfaces. Refusing.");
 
-        arg_ifindex = ifi;
-        free_and_replace(arg_ifname, iface);
-
-        return 1;
-}
-
-int ifname_resolvconf_mangle(const char *s) {
-        const char *dot;
-
-        assert(s);
-
-        dot = strchr(s, '.');
-        if (dot) {
-                _cleanup_free_ char *iface = NULL;
-
-                log_debug("Ignoring protocol specifier '%s'.", dot + 1);
-                iface = strndup(s, dot - s);
-                if (!iface)
-                        return log_oom();
-                return ifname_mangle(iface);
-        } else
-                return ifname_mangle(s);
+        arg_ifindex = r;
+        return free_and_strdup_warn(&arg_ifname, found ? found[0] : s); /* found */
 }
 
 static void print_source(uint64_t flags, usec_t rtt) {
-        char rtt_str[FORMAT_TIMESTAMP_MAX];
-
         if (!arg_legend)
                 return;
 
@@ -167,11 +196,10 @@
                flags & SD_RESOLVED_MDNS_IPV4 ? " mDNS/IPv4" : "",
                flags & SD_RESOLVED_MDNS_IPV6 ? " mDNS/IPv6" : "");
 
-        assert_se(format_timespan(rtt_str, sizeof(rtt_str), rtt, 100));
-
         printf(" in %s.%s\n"
                "%s-- Data is authenticated: %s; Data was acquired via local or encrypted transport: %s%s\n",
-               rtt_str, ansi_normal(),
+               FORMAT_TIMESPAN(rtt, 100),
+               ansi_normal(),
                ansi_grey(),
                yes_no(flags & SD_RESOLVED_AUTHENTICATED),
                yes_no(flags & SD_RESOLVED_CONFIDENTIAL),
@@ -189,17 +217,26 @@
 }
 
 static void print_ifindex_comment(int printed_so_far, int ifindex) {
-        char ifname[IF_NAMESIZE + 1];
+        char ifname[IF_NAMESIZE];
+        int r;
 
         if (ifindex <= 0)
                 return;
 
-        if (!format_ifname(ifindex, ifname))
-                log_warning_errno(errno, "Failed to resolve interface name for index %i, ignoring: %m", ifindex);
-        else
-                printf("%*s%s-- link: %s%s",
-                       60 > printed_so_far ? 60 - printed_so_far : 0, " ", /* Align comment to the 60th column */
-                       ansi_grey(), ifname, ansi_normal());
+        r = format_ifname(ifindex, ifname);
+        if (r < 0)
+                return (void) log_warning_errno(r, "Failed to resolve interface name for index %i, ignoring: %m", ifindex);
+
+        printf("%*s%s-- link: %s%s",
+               60 > printed_so_far ? 60 - printed_so_far : 0, " ", /* Align comment to the 60th column */
+               ansi_grey(), ifname, ansi_normal());
+}
+
+static int resolve_host_error(const char *name, int r, const sd_bus_error *error) {
+        if (sd_bus_error_has_name(error, BUS_ERROR_DNS_NXDOMAIN))
+                return log_error_errno(r, "%s: %s", name, bus_error_message(error, r));
+
+        return log_error_errno(r, "%s: resolve call failed: %s", name, bus_error_message(error, r));
 }
 
 static int resolve_host(sd_bus *bus, const char *name) {
@@ -227,7 +264,7 @@
 
         r = sd_bus_call(bus, req, SD_RESOLVED_QUERY_TIMEOUT_USEC, &error, &reply);
         if (r < 0)
-                return log_error_errno(r, "%s: resolve call failed: %s", name, bus_error_message(&error, r));
+                return resolve_host_error(name, r, &error);
 
         ts = now(CLOCK_MONOTONIC) - ts;
 
@@ -394,20 +431,9 @@
 
 static int output_rr_packet(const void *d, size_t l, int ifindex) {
         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
-        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
         int r;
 
-        r = dns_packet_new(&p, DNS_PROTOCOL_DNS, 0, DNS_PACKET_SIZE_MAX);
-        if (r < 0)
-                return log_oom();
-
-        p->refuse_compression = true;
-
-        r = dns_packet_append_blob(p, d, l, NULL);
-        if (r < 0)
-                return log_oom();
-
-        r = dns_packet_read_rr(p, &rr, NULL, NULL);
+        r = dns_resource_record_new_from_raw(&rr, d, l);
         if (r < 0)
                 return log_error_errno(r, "Failed to parse RR: %m");
 
@@ -461,7 +487,11 @@
         if (!dns_name_is_single_label(name))
                 return false;
 
-        if (is_localhost(name) || is_gateway_hostname(name))
+        if (is_localhost(name) ||
+            is_gateway_hostname(name) ||
+            is_outbound_hostname(name) ||
+            is_dns_stub_hostname(name) ||
+            is_dns_proxy_stub_hostname(name))
                 return false;
 
         r = resolve_system_hostname(NULL, &first_label);
@@ -623,7 +653,7 @@
 
         q = strchr(p, '?');
         if (q) {
-                n = strndupa(p, q - p);
+                n = strndupa_safe(p, q - p);
                 q++;
 
                 for (;;) {
@@ -704,7 +734,6 @@
 
 static int verb_query(int argc, char **argv, void *userdata) {
         sd_bus *bus = userdata;
-        char **p;
         int q, r = 0;
 
         if (arg_type != 0)
@@ -811,7 +840,7 @@
                 while ((r = sd_bus_message_enter_container(reply, 'r', "iiay")) > 0) {
                         _cleanup_free_ char *pretty = NULL;
                         int ifindex, family, k;
-                        union in_addr_union a;;
+                        union in_addr_union a;
 
                         assert_cc(sizeof(int) == sizeof(int32_t));
 
@@ -974,7 +1003,6 @@
 
 static int verb_openpgp(int argc, char **argv, void *userdata) {
         sd_bus *bus = userdata;
-        char **p;
         int q, r = 0;
 
         STRV_FOREACH(p, argv + 1) {
@@ -1001,7 +1029,7 @@
                 if (r < 0)
                         return log_error_errno(r, "Invalid port \"%s\".", port + 1);
 
-                address = strndupa(address, port - address);
+                address = strndupa_safe(address, port - address);
         }
 
         r = asprintf(&full, "_%u._%s.%s",
@@ -1024,7 +1052,7 @@
 
 static int verb_tlsa(int argc, char **argv, void *userdata) {
         sd_bus *bus = userdata;
-        char **p, **args = argv + 1;
+        char **args = argv + 1;
         const char *family = "tcp";
         int q, r = 0;
 
@@ -1046,14 +1074,12 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         uint64_t n_current_transactions, n_total_transactions,
                 cache_size, n_cache_hit, n_cache_miss,
                 n_dnssec_secure, n_dnssec_insecure, n_dnssec_bogus, n_dnssec_indeterminate;
         int r, dnssec_supported;
 
-        assert(bus);
-
         r = bus_get_property_trivial(bus, bus_resolve_mgr, "DNSSECSupported", &error, 'b', &dnssec_supported);
         if (r < 0)
                 return log_error_errno(r, "Failed to get DNSSEC supported state: %s", bus_error_message(&error, r));
@@ -1100,49 +1126,49 @@
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        table = table_new("key", "value");
+        table = table_new_vertical();
         if (!table)
                 return log_oom();
 
-        table_set_header(table, false);
-
         r = table_add_many(table,
                            TABLE_STRING, "Transactions",
                            TABLE_SET_COLOR, ansi_highlight(),
+                           TABLE_SET_ALIGN_PERCENT, 0,
                            TABLE_EMPTY,
-                           TABLE_STRING, "Current Transactions:",
+                           TABLE_FIELD, "Current Transactions",
                            TABLE_SET_ALIGN_PERCENT, 100,
                            TABLE_UINT64, n_current_transactions,
-                           TABLE_STRING, "Total Transactions:",
+                           TABLE_SET_ALIGN_PERCENT, 100,
+                           TABLE_FIELD, "Total Transactions",
                            TABLE_UINT64, n_total_transactions,
                            TABLE_EMPTY, TABLE_EMPTY,
                            TABLE_STRING, "Cache",
                            TABLE_SET_COLOR, ansi_highlight(),
                            TABLE_SET_ALIGN_PERCENT, 0,
                            TABLE_EMPTY,
-                           TABLE_STRING, "Current Cache Size:",
+                           TABLE_FIELD, "Current Cache Size",
                            TABLE_SET_ALIGN_PERCENT, 100,
                            TABLE_UINT64, cache_size,
-                           TABLE_STRING, "Cache Hits:",
+                           TABLE_FIELD, "Cache Hits",
                            TABLE_UINT64, n_cache_hit,
-                           TABLE_STRING, "Cache Misses:",
+                           TABLE_FIELD, "Cache Misses",
                            TABLE_UINT64, n_cache_miss,
                            TABLE_EMPTY, TABLE_EMPTY,
                            TABLE_STRING, "DNSSEC Verdicts",
                            TABLE_SET_COLOR, ansi_highlight(),
                            TABLE_SET_ALIGN_PERCENT, 0,
                            TABLE_EMPTY,
-                           TABLE_STRING, "Secure:",
+                           TABLE_FIELD, "Secure",
                            TABLE_SET_ALIGN_PERCENT, 100,
                            TABLE_UINT64, n_dnssec_secure,
-                           TABLE_STRING, "Insecure:",
+                           TABLE_FIELD, "Insecure",
                            TABLE_UINT64, n_dnssec_insecure,
-                           TABLE_STRING, "Bogus:",
+                           TABLE_FIELD, "Bogus",
                            TABLE_UINT64, n_dnssec_bogus,
-                           TABLE_STRING, "Indeterminate:",
+                           TABLE_FIELD, "Indeterminate:",
                            TABLE_UINT64, n_dnssec_indeterminate);
         if (r < 0)
-                table_log_add_error(r);
+                return table_log_add_error(r);
 
         r = table_print(table, NULL);
         if (r < 0)
@@ -1187,18 +1213,29 @@
         return 0;
 }
 
-static int read_dns_server_one(sd_bus_message *m, bool with_ifindex, bool extended, char **ret) {
+static int read_dns_server_one(
+                sd_bus_message *m,
+                bool with_ifindex,  /* read "ifindex" reply that also carries an interface index */
+                bool extended,      /* read "extended" reply, i.e. with port number and server name */
+                bool only_global,   /* suppress entries with an (non-loopback) ifindex set (i.e. which are specific to some interface) */
+                char **ret) {
+
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_free_ char *pretty = NULL;
-        int ifindex, family, r, k;
         union in_addr_union a;
         const char *name = NULL;
+        int32_t ifindex = 0;
+        int family, r, k;
         uint16_t port = 0;
 
         assert(m);
         assert(ret);
 
-        r = sd_bus_message_enter_container(m, 'r', with_ifindex ? (extended ? "iiayqs" : "iiay") : (extended ? "iayqs" : "iay"));
+        r = sd_bus_message_enter_container(
+                        m,
+                        'r',
+                        with_ifindex ? (extended ? "iiayqs" : "iiay") :
+                                       (extended ? "iayqs" : "iay"));
         if (r <= 0)
                 return r;
 
@@ -1232,8 +1269,8 @@
                 return 1;
         }
 
-        if (with_ifindex && ifindex != 0) {
-                /* only show the global ones here */
+        if (only_global && ifindex > 0 && ifindex != LOOPBACK_IFINDEX) {
+                /* This one has an (non-loopback) ifindex set, and we were told to suppress those. Hence do so. */
                 *ret = NULL;
                 return 1;
         }
@@ -1243,18 +1280,16 @@
                 return r;
 
         *ret = TAKE_PTR(pretty);
-
         return 1;
 }
 
 static int map_link_dns_servers_internal(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata, bool extended) {
-        char ***l = userdata;
+        char ***l = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(member);
         assert(m);
-        assert(l);
 
         r = sd_bus_message_enter_container(m, 'a', extended ? "(iayqs)" : "(iay)");
         if (r < 0)
@@ -1263,7 +1298,7 @@
         for (;;) {
                 _cleanup_free_ char *pretty = NULL;
 
-                r = read_dns_server_one(m, false, extended, &pretty);
+                r = read_dns_server_one(m, /* with_ifindex= */ false, extended, /* only_global= */ false, &pretty);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -1296,14 +1331,14 @@
         assert(m);
         assert(userdata);
 
-        return read_dns_server_one(m, false, false, userdata);
+        return read_dns_server_one(m, /* with_ifindex= */ false, /* extended= */ false, /* only_global= */ false, userdata);
 }
 
 static int map_link_current_dns_server_ex(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
         assert(m);
         assert(userdata);
 
-        return read_dns_server_one(m, false, true, userdata);
+        return read_dns_server_one(m, /* with_ifindex= */ false, /* extended= */ true, /* only_global= */ false, userdata);
 }
 
 static int read_domain_one(sd_bus_message *m, bool with_ifindex, char **ret) {
@@ -1340,13 +1375,12 @@
 }
 
 static int map_link_domains(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
-        char ***l = userdata;
+        char ***l = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(member);
         assert(m);
-        assert(l);
 
         r = sd_bus_message_enter_container(m, 'a', "(sb)");
         if (r < 0)
@@ -1388,7 +1422,6 @@
                 printf("%s%nGlobal%n%s:", ansi_highlight(), &pos1, &pos2, ansi_normal());
 
         size_t cols = columns(), position = pos2 - pos1 + 2;
-        char **i;
 
         STRV_FOREACH(i, p) {
                 size_t our_len = utf8_console_width(*i); /* This returns -1 on invalid utf-8 (which shouldn't happen).
@@ -1398,7 +1431,7 @@
                         printf(" %s", *i);
                         position = size_add(size_add(position, 1), our_len);
                 } else {
-                        printf("\n%*s%s", indent, "", *i);
+                        printf("\n%*s%s", (int) indent, "", *i);
                         position = size_add(our_len, indent);
                 }
         }
@@ -1465,14 +1498,14 @@
         strv_free(p->ntas);
 }
 
-static int dump_list(Table *table, const char *prefix, char * const *l) {
+static int dump_list(Table *table, const char *field, char * const *l) {
         int r;
 
         if (strv_isempty(l))
                 return 0;
 
         r = table_add_many(table,
-                           TABLE_STRING, prefix,
+                           TABLE_FIELD, field,
                            TABLE_STRV_WRAPPED, l);
         if (r < 0)
                 return table_log_add_error(r);
@@ -1557,15 +1590,16 @@
         _cleanup_(link_info_clear) LinkInfo link_info = {};
         _cleanup_(table_unrefp) Table *table = NULL;
         _cleanup_free_ char *p = NULL;
-        char ifi[DECIMAL_STR_MAX(int)], ifname[IF_NAMESIZE + 1] = "";
+        char ifi[DECIMAL_STR_MAX(int)], ifname[IF_NAMESIZE];
         int r;
 
         assert(bus);
         assert(ifindex > 0);
 
         if (!name) {
-                if (!format_ifname(ifindex, ifname))
-                        return log_error_errno(errno, "Failed to resolve interface name for %i: %m", ifindex);
+                r = format_ifname(ifindex, ifname);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to resolve interface name for %i: %m", ifindex);
 
                 name = ifname;
         }
@@ -1586,7 +1620,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to get link data for %i: %s", ifindex, bus_error_message(&error, r));
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (mode == STATUS_DNS)
                 return status_print_strv_ifindex(ifindex, name, link_info.dns_ex ?: link_info.dns);
@@ -1643,15 +1677,13 @@
         printf("%sLink %i (%s)%s\n",
                ansi_highlight(), ifindex, name, ansi_normal());
 
-        table = table_new("key", "value");
+        table = table_new_vertical();
         if (!table)
                 return log_oom();
 
-        table_set_header(table, false);
-
         r = table_add_many(table,
-                           TABLE_STRING, "Current Scopes:",
-                           TABLE_SET_ALIGN_PERCENT, 100);
+                           TABLE_FIELD, "Current Scopes",
+                           TABLE_SET_MINIMUM_WIDTH, 19);
         if (r < 0)
                 return table_log_add_error(r);
 
@@ -1683,24 +1715,24 @@
                 return log_oom();
 
         r = table_add_many(table,
-                           TABLE_STRING,       "Protocols:",
+                           TABLE_FIELD,       "Protocols",
                            TABLE_STRV_WRAPPED, pstatus);
         if (r < 0)
                 return table_log_add_error(r);
 
         if (link_info.current_dns) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Current DNS Server:",
+                                   TABLE_FIELD, "Current DNS Server",
                                    TABLE_STRING, link_info.current_dns_ex ?: link_info.current_dns);
                 if (r < 0)
                         return table_log_add_error(r);
         }
 
-        r = dump_list(table, "DNS Servers:", link_info.dns_ex ?: link_info.dns);
+        r = dump_list(table, "DNS Servers", link_info.dns_ex ?: link_info.dns);
         if (r < 0)
                 return r;
 
-        r = dump_list(table, "DNS Domain:", link_info.domains);
+        r = dump_list(table, "DNS Domain", link_info.domains);
         if (r < 0)
                 return r;
 
@@ -1714,14 +1746,20 @@
         return 0;
 }
 
-static int map_global_dns_servers_internal(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata, bool extended) {
-        char ***l = userdata;
+static int map_global_dns_servers_internal(
+                sd_bus *bus,
+                const char *member,
+                sd_bus_message *m,
+                sd_bus_error *error,
+                void *userdata,
+                bool extended) {
+
+        char ***l = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(member);
         assert(m);
-        assert(l);
 
         r = sd_bus_message_enter_container(m, 'a', extended ? "(iiayqs)" : "(iiay)");
         if (r < 0)
@@ -1730,7 +1768,7 @@
         for (;;) {
                 _cleanup_free_ char *pretty = NULL;
 
-                r = read_dns_server_one(m, true, extended, &pretty);
+                r = read_dns_server_one(m, /* with_ifindex= */ true, extended, /* only_global= */ true, &pretty);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -1752,35 +1790,28 @@
 }
 
 static int map_global_dns_servers(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
-        return map_global_dns_servers_internal(bus, member, m, error, userdata, false);
+        return map_global_dns_servers_internal(bus, member, m, error, userdata, /* extended= */ false);
 }
 
 static int map_global_dns_servers_ex(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
-        return map_global_dns_servers_internal(bus, member, m, error, userdata, true);
+        return map_global_dns_servers_internal(bus, member, m, error, userdata, /* extended= */ true);
 }
 
 static int map_global_current_dns_server(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
-        assert(m);
-        assert(userdata);
-
-        return read_dns_server_one(m, true, false, userdata);
+        return read_dns_server_one(m, /* with_ifindex= */ true, /* extended= */ false, /* only_global= */ true, userdata);
 }
 
 static int map_global_current_dns_server_ex(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
-        assert(m);
-        assert(userdata);
-
-        return read_dns_server_one(m, true, true, userdata);
+        return read_dns_server_one(m, /* with_ifindex= */ true, /* extended= */ true, /* only_global= */ true, userdata);
 }
 
 static int map_global_domains(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
-        char ***l = userdata;
+        char ***l = ASSERT_PTR(userdata);
         int r;
 
         assert(bus);
         assert(member);
         assert(m);
-        assert(l);
 
         r = sd_bus_message_enter_container(m, 'a', "(isb)");
         if (r < 0)
@@ -1850,7 +1881,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to get global data: %s", bus_error_message(&error, r));
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (mode == STATUS_DNS)
                 return status_print_strv_global(global_info.dns_ex ?: global_info.dns);
@@ -1891,26 +1922,24 @@
 
         printf("%sGlobal%s\n", ansi_highlight(), ansi_normal());
 
-        table = table_new("key", "value");
+        table = table_new_vertical();
         if (!table)
                 return log_oom();
 
-        table_set_header(table, false);
-
         _cleanup_strv_free_ char **pstatus = global_protocol_status(&global_info);
         if (!pstatus)
                 return log_oom();
 
         r = table_add_many(table,
-                           TABLE_STRING,            "Protocols:",
-                           TABLE_SET_ALIGN_PERCENT, 100,
+                           TABLE_FIELD,            "Protocols",
+                           TABLE_SET_MINIMUM_WIDTH, 19,
                            TABLE_STRV_WRAPPED,      pstatus);
         if (r < 0)
                 return table_log_add_error(r);
 
         if (global_info.resolv_conf_mode) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "resolv.conf mode:",
+                                   TABLE_FIELD, "resolv.conf mode",
                                    TABLE_STRING, global_info.resolv_conf_mode);
                 if (r < 0)
                         return table_log_add_error(r);
@@ -1918,21 +1947,21 @@
 
         if (global_info.current_dns) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Current DNS Server:",
+                                   TABLE_FIELD, "Current DNS Server",
                                    TABLE_STRING, global_info.current_dns_ex ?: global_info.current_dns);
                 if (r < 0)
                         return table_log_add_error(r);
         }
 
-        r = dump_list(table, "DNS Servers:", global_info.dns_ex ?: global_info.dns);
+        r = dump_list(table, "DNS Servers", global_info.dns_ex ?: global_info.dns);
         if (r < 0)
                 return r;
 
-        r = dump_list(table, "Fallback DNS Servers:", global_info.fallback_dns_ex ?: global_info.fallback_dns);
+        r = dump_list(table, "Fallback DNS Servers", global_info.fallback_dns_ex ?: global_info.fallback_dns);
         if (r < 0)
                 return r;
 
-        r = dump_list(table, "DNS Domain:", global_info.domains);
+        r = dump_list(table, "DNS Domain", global_info.domains);
         if (r < 0)
                 return r;
 
@@ -1965,7 +1994,7 @@
         if (r < 0)
                 return rtnl_log_create_error(r);
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return rtnl_log_create_error(r);
 
@@ -2023,7 +2052,6 @@
         int r = 0;
 
         if (argc > 1) {
-                char **ifname;
                 bool empty_line = false;
 
                 STRV_FOREACH(ifname, argv + 1) {
@@ -2047,7 +2075,6 @@
 
 static int call_dns(sd_bus *bus, char **dns, const BusLocator *locator, sd_bus_error *error, bool extended) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
-        char **p;
         int r;
 
         r = bus_message_new_method_call(bus, &req, locator, extended ? "SetLinkDNSEx" : "SetLinkDNS");
@@ -2119,11 +2146,9 @@
 
 static int verb_dns(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2155,7 +2180,6 @@
 
 static int call_domain(sd_bus *bus, char **domain, const BusLocator *locator, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
-        char **p;
         int r;
 
         r = bus_message_new_method_call(bus, &req, locator, "SetLinkDomains");
@@ -2200,11 +2224,9 @@
 
 static int verb_domain(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2236,11 +2258,9 @@
 
 static int verb_default_route(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r, b;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2276,11 +2296,11 @@
 
 static int verb_llmnr(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        _cleanup_free_ char *global_llmnr_support_str = NULL;
+        ResolveSupport global_llmnr_support, llmnr_support;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2293,6 +2313,22 @@
         if (argc < 3)
                 return status_ifindex(bus, arg_ifindex, NULL, STATUS_LLMNR, NULL);
 
+        llmnr_support = resolve_support_from_string(argv[2]);
+        if (llmnr_support < 0)
+                return log_error_errno(llmnr_support, "Invalid LLMNR setting: %s", argv[2]);
+
+        r = bus_get_property_string(bus, bus_resolve_mgr, "LLMNR", &error, &global_llmnr_support_str);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get the global LLMNR support state: %s", bus_error_message(&error, r));
+
+        global_llmnr_support = resolve_support_from_string(global_llmnr_support_str);
+        if (global_llmnr_support < 0)
+                return log_error_errno(global_llmnr_support, "Received invalid global LLMNR setting: %s", global_llmnr_support_str);
+
+        if (global_llmnr_support < llmnr_support)
+                log_warning("Setting LLMNR support level \"%s\" for \"%s\", but the global support level is \"%s\".",
+                            argv[2], arg_ifname, global_llmnr_support_str);
+
         r = bus_call_method(bus, bus_resolve_mgr, "SetLinkLLMNR", &error, NULL, "is", arg_ifindex, argv[2]);
         if (r < 0 && sd_bus_error_has_name(&error, BUS_ERROR_LINK_BUSY)) {
                 sd_bus_error_free(&error);
@@ -2312,11 +2348,11 @@
 
 static int verb_mdns(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        _cleanup_free_ char *global_mdns_support_str = NULL;
+        ResolveSupport global_mdns_support, mdns_support;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2329,6 +2365,22 @@
         if (argc < 3)
                 return status_ifindex(bus, arg_ifindex, NULL, STATUS_MDNS, NULL);
 
+        mdns_support = resolve_support_from_string(argv[2]);
+        if (mdns_support < 0)
+                return log_error_errno(mdns_support, "Invalid mDNS setting: %s", argv[2]);
+
+        r = bus_get_property_string(bus, bus_resolve_mgr, "MulticastDNS", &error, &global_mdns_support_str);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get the global mDNS support state: %s", bus_error_message(&error, r));
+
+        global_mdns_support = resolve_support_from_string(global_mdns_support_str);
+        if (global_mdns_support < 0)
+                return log_error_errno(global_mdns_support, "Received invalid global mDNS setting: %s", global_mdns_support_str);
+
+        if (global_mdns_support < mdns_support)
+                log_warning("Setting mDNS support level \"%s\" for \"%s\", but the global support level is \"%s\".",
+                            argv[2], arg_ifname, global_mdns_support_str);
+
         r = bus_call_method(bus, bus_resolve_mgr, "SetLinkMulticastDNS", &error, NULL, "is", arg_ifindex, argv[2]);
         if (r < 0 && sd_bus_error_has_name(&error, BUS_ERROR_LINK_BUSY)) {
                 sd_bus_error_free(&error);
@@ -2354,11 +2406,9 @@
 
 static int verb_dns_over_tls(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2396,11 +2446,9 @@
 
 static int verb_dnssec(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2451,13 +2499,10 @@
 
 static int verb_nta(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
-        char **p;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
         bool clear;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2504,11 +2549,9 @@
 
 static int verb_revert_link(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         if (argc >= 2) {
                 r = ifname_mangle(argv[1]);
                 if (r < 0)
@@ -2536,51 +2579,244 @@
 }
 
 static int verb_log_level(int argc, char *argv[], void *userdata) {
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
+
+        assert(IN_SET(argc, 1, 2));
+
+        return verb_log_control_common(bus, "org.freedesktop.resolve1", argv[0], argc == 2 ? argv[1] : NULL);
+}
+
+static int monitor_rkey_from_json(JsonVariant *v, DnsResourceKey **ret_key) {
+        _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
+        uint16_t type = 0, class = 0;
+        const char *name = NULL;
         int r;
 
-        assert(bus);
+        JsonDispatch dispatch_table[] = {
+                { "class", JSON_VARIANT_INTEGER, json_dispatch_uint16,       PTR_TO_SIZE(&class), JSON_MANDATORY },
+                { "type",  JSON_VARIANT_INTEGER, json_dispatch_uint16,       PTR_TO_SIZE(&type),  JSON_MANDATORY },
+                { "name",  JSON_VARIANT_STRING,  json_dispatch_const_string, PTR_TO_SIZE(&name),  JSON_MANDATORY },
+                {}
+        };
 
-        if (argc == 1) {
-                _cleanup_free_ char *level = NULL;
+        assert(v);
+        assert(ret_key);
 
-                r = sd_bus_get_property_string(
-                                bus,
-                                "org.freedesktop.resolve1",
-                                "/org/freedesktop/LogControl1",
-                                "org.freedesktop.LogControl1",
-                                "LogLevel",
-                                &error,
-                                &level);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get log level: %s", bus_error_message(&error, r));
+        r = json_dispatch(v, dispatch_table, NULL, 0, NULL);
+        if (r < 0)
+                return r;
 
-                puts(level);
+        key = dns_resource_key_new(class, type, name);
+        if (!key)
+                return -ENOMEM;
 
-        } else {
-                assert(argc == 2);
+        *ret_key = TAKE_PTR(key);
+        return 0;
+}
 
-                r = sd_bus_set_property(
-                                bus,
-                                "org.freedesktop.resolve1",
-                                "/org/freedesktop/LogControl1",
-                                "org.freedesktop.LogControl1",
-                                "LogLevel",
-                                &error,
-                                "s",
-                                argv[1]);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to set log level: %s", bus_error_message(&error, r));
+static int print_question(char prefix, const char *color, JsonVariant *question) {
+        JsonVariant *q = NULL;
+        int r;
+
+        assert(color);
+
+        JSON_VARIANT_ARRAY_FOREACH(q, question) {
+                _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
+                char buf[DNS_RESOURCE_KEY_STRING_MAX];
+
+                r = monitor_rkey_from_json(q, &key);
+                if (r < 0) {
+                        log_warning_errno(r, "Received monitor message with invalid question key, ignoring: %m");
+                        continue;
+                }
+
+                printf("%s%s %c%s: %s\n",
+                       color,
+                       special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                       prefix,
+                       ansi_normal(),
+                       dns_resource_key_to_string(key, buf, sizeof(buf)));
         }
 
         return 0;
 }
 
+static int print_answer(JsonVariant *answer) {
+        JsonVariant *a;
+        int r;
+
+        JSON_VARIANT_ARRAY_FOREACH(a, answer) {
+                _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
+                _cleanup_free_ void *d = NULL;
+                JsonVariant *jraw;
+                const char *s;
+                size_t l;
+
+                jraw = json_variant_by_key(a, "raw");
+                if (!jraw) {
+                        log_warning("Received monitor answer lacking valid raw data, ignoring.");
+                        continue;
+                }
+
+                r = json_variant_unbase64(jraw, &d, &l);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to undo base64 encoding of monitor answer raw data, ignoring.");
+                        continue;
+                }
+
+                r = dns_resource_record_new_from_raw(&rr, d, l);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to parse monitor answer RR, ignoring: %m");
+                        continue;
+                }
+
+                s = dns_resource_record_to_string(rr);
+                if (!s)
+                        return log_oom();
+
+                printf("%s%s A%s: %s\n",
+                       ansi_highlight_yellow(),
+                       special_glyph(SPECIAL_GLYPH_ARROW_LEFT),
+                       ansi_normal(),
+                       s);
+        }
+
+        return 0;
+}
+
+static void monitor_query_dump(JsonVariant *v) {
+        _cleanup_(json_variant_unrefp) JsonVariant *question = NULL, *answer = NULL, *collected_questions = NULL;
+        int rcode = -1, error = 0, r;
+        const char *state = NULL;
+
+        assert(v);
+
+        JsonDispatch dispatch_table[] = {
+                { "question",           JSON_VARIANT_ARRAY,   json_dispatch_variant,      PTR_TO_SIZE(&question),            JSON_MANDATORY },
+                { "answer",             JSON_VARIANT_ARRAY,   json_dispatch_variant,      PTR_TO_SIZE(&answer),              0              },
+                { "collectedQuestions", JSON_VARIANT_ARRAY,   json_dispatch_variant,      PTR_TO_SIZE(&collected_questions), 0              },
+                { "state",              JSON_VARIANT_STRING,  json_dispatch_const_string, PTR_TO_SIZE(&state),               JSON_MANDATORY },
+                { "rcode",              JSON_VARIANT_INTEGER, json_dispatch_int,          PTR_TO_SIZE(&rcode),               0              },
+                { "errno",              JSON_VARIANT_INTEGER, json_dispatch_int,          PTR_TO_SIZE(&error),               0              },
+                {}
+        };
+
+        r = json_dispatch(v, dispatch_table, NULL, 0, NULL);
+        if (r < 0)
+                return (void) log_warning("Received malformed monitor message, ignoring.");
+
+        /* First show the current question */
+        print_question('Q', ansi_highlight_cyan(), question);
+
+        /* And then show the questions that led to this one in case this was a CNAME chain */
+        print_question('C', ansi_highlight_grey(), collected_questions);
+
+        printf("%s%s S%s: %s\n",
+               streq_ptr(state, "success") ? ansi_highlight_green() : ansi_highlight_red(),
+               special_glyph(SPECIAL_GLYPH_ARROW_LEFT),
+               ansi_normal(),
+               strna(streq_ptr(state, "errno") ? errno_to_name(error) :
+                     streq_ptr(state, "rcode-failure") ? dns_rcode_to_string(rcode) :
+                     state));
+
+        print_answer(answer);
+}
+
+static int monitor_reply(
+                Varlink *link,
+                JsonVariant *parameters,
+                const char *error_id,
+                VarlinkReplyFlags flags,
+                void *userdata) {
+
+        assert(link);
+
+        if (error_id) {
+                bool disconnect;
+
+                disconnect = streq(error_id, VARLINK_ERROR_DISCONNECTED);
+                if (disconnect)
+                        log_info("Disconnected.");
+                else
+                        log_error("Varlink error: %s", error_id);
+
+                (void) sd_event_exit(ASSERT_PTR(varlink_get_event(link)), disconnect ? EXIT_SUCCESS : EXIT_FAILURE);
+                return 0;
+        }
+
+        if (json_variant_by_key(parameters, "ready")) {
+                /* The first message coming in will just indicate that we are now subscribed. We let our
+                 * caller know if they asked for it. Once the caller sees this they should know that we are
+                 * not going to miss any queries anymore. */
+                (void) sd_notify(/* unset_environment=false */ false, "READY=1");
+                return 0;
+        }
+
+        if (arg_json_format_flags & JSON_FORMAT_OFF) {
+                monitor_query_dump(parameters);
+                printf("\n");
+        } else
+                json_variant_dump(parameters, arg_json_format_flags, NULL, NULL);
+
+        fflush(stdout);
+
+        return 0;
+}
+
+static int verb_monitor(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        _cleanup_(varlink_unrefp) Varlink *vl = NULL;
+        int r, c;
+
+        r = sd_event_default(&event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get event loop: %m");
+
+        r = sd_event_set_signal_exit(event, true);
+        if (r < 0)
+                return log_error_errno(r, "Failed to enable exit on SIGINT/SIGTERM: %m");
+
+        r = varlink_connect_address(&vl, "/run/systemd/resolve/io.systemd.Resolve.Monitor");
+        if (r < 0)
+                return log_error_errno(r, "Failed to connect to query monitoring service /run/systemd/resolve/io.systemd.Resolve.Monitor: %m");
+
+        r = varlink_set_relative_timeout(vl, USEC_INFINITY); /* We want the monitor to run basically forever */
+        if (r < 0)
+                return log_error_errno(r, "Failed to set varlink time-out: %m");
+
+        r = varlink_attach_event(vl, event, SD_EVENT_PRIORITY_NORMAL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
+
+        r = varlink_bind_reply(vl, monitor_reply);
+        if (r < 0)
+                return log_error_errno(r, "Failed to bind reply callback to varlink connection: %m");
+
+        r = varlink_observe(vl, "io.systemd.Resolve.Monitor.SubscribeQueryResults", NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to issue SubscribeQueryResults() varlink call: %m");
+
+        r = sd_event_loop(event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to run event loop: %m");
+
+        r = sd_event_get_exit_code(event, &c);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get exit code: %m");
+
+        return c;
+}
+
 static void help_protocol_types(void) {
         if (arg_legend)
                 puts("Known protocol types:");
-        puts("dns\nllmnr\nllmnr-ipv4\nllmnr-ipv6\nmdns\nmdns-ipv4\nmdns-ipv6");
+        puts("dns\n"
+             "llmnr\n"
+             "llmnr-ipv4\n"
+             "llmnr-ipv6\n"
+             "mdns\n"
+             "mdns-ipv4\n"
+             "mdns-ipv6");
 }
 
 static void help_dns_types(void) {
@@ -2676,6 +2912,7 @@
                "  reset-statistics             Reset resolver statistics\n"
                "  flush-caches                 Flush all local DNS caches\n"
                "  reset-server-features        Forget learnt DNS server feature levels\n"
+               "  monitor                      Monitor DNS queries\n"
                "  dns [LINK [SERVER...]]       Get/set per-interface DNS server address\n"
                "  domain [LINK [DOMAIN...]]    Get/set per-interface search domain\n"
                "  default-route [LINK [BOOL]]  Get/set per-interface default route flag\n"
@@ -2704,11 +2941,16 @@
                "     --cache=BOOL              Allow response from cache (default: yes)\n"
                "     --zone=BOOL               Allow response from locally registered mDNS/LLMNR\n"
                "                               records (default: yes)\n"
-               "     --trust-anchor=BOOL       Allow response from local trust anchor (default: yes)\n"
+               "     --trust-anchor=BOOL       Allow response from local trust anchor (default:\n"
+               "                               yes)\n"
                "     --network=BOOL            Allow response from network (default: yes)\n"
-               "     --search=BOOL             Use search domains for single-label names (default: yes)\n"
+               "     --search=BOOL             Use search domains for single-label names (default:\n"
+               "                               yes)\n"
                "     --raw[=payload|packet]    Dump the answer as binary data\n"
                "     --legend=BOOL             Print headers and additional info (default: yes)\n"
+               "     --json=MODE               Output as JSON\n"
+               "  -j                           Same as --json=pretty on tty, --json=short\n"
+               "                               otherwise\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -2791,7 +3033,7 @@
         assert(argv);
 
         while ((c = getopt_long(argc, argv, "h46i:t:c:p:", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
 
                 case 'h':
                         return compat_help();
@@ -3012,7 +3254,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_type == 0 && arg_class != 0)
@@ -3055,6 +3297,7 @@
                 ARG_RAW,
                 ARG_SEARCH,
                 ARG_NO_PAGER,
+                ARG_JSON,
         };
 
         static const struct option options[] = {
@@ -3077,6 +3320,7 @@
                 { "raw",                   optional_argument, NULL, ARG_RAW                   },
                 { "search",                required_argument, NULL, ARG_SEARCH                },
                 { "no-pager",              no_argument,       NULL, ARG_NO_PAGER              },
+                { "json",                  required_argument, NULL, ARG_JSON                  },
                 {}
         };
 
@@ -3085,8 +3329,8 @@
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "h46i:t:c:p:", options, NULL)) >= 0)
-                switch(c) {
+        while ((c = getopt_long(argc, argv, "h46i:t:c:p:j", options, NULL)) >= 0)
+                switch (c) {
 
                 case 'h':
                         return native_help();
@@ -3260,11 +3504,22 @@
                         arg_pager_flags |= PAGER_DISABLE;
                         break;
 
+                case ARG_JSON:
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
+
+                        break;
+
+                case 'j':
+                        arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_type == 0 && arg_class != 0)
@@ -3303,6 +3558,7 @@
                 { "nta",                   VERB_ANY, VERB_ANY, 0,            verb_nta              },
                 { "revert",                VERB_ANY, 2,        0,            verb_revert_link      },
                 { "log-level",             VERB_ANY, 2,        0,            verb_log_level        },
+                { "monitor",               VERB_ANY, 1,        0,            verb_monitor          },
                 {}
         };
 
@@ -3414,7 +3670,7 @@
                 return translate("revert", arg_ifname, 0, NULL, bus);
 
         case _MODE_INVALID:
-                assert_not_reached("invalid mode");
+                assert_not_reached();
         }
 
         return 0;
@@ -3422,16 +3678,19 @@
 
 static int run(int argc, char **argv) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        bool compat = false;
         int r;
 
         setlocale(LC_ALL, "");
         log_setup();
 
-        if (invoked_as(argv, "resolvconf"))
+        if (invoked_as(argv, "resolvconf")) {
+                compat = true;
                 r = resolvconf_parse_argv(argc, argv);
-        else if (invoked_as(argv, "systemd-resolve"))
+        } else if (invoked_as(argv, "systemd-resolve")) {
+                compat = true;
                 r = compat_parse_argv(argc, argv);
-        else
+        } else
                 r = native_parse_argv(argc, argv);
         if (r <= 0)
                 return r;
@@ -3440,7 +3699,7 @@
         if (r < 0)
                 return log_error_errno(r, "sd_bus_open_system: %m");
 
-        if (STR_IN_SET(program_invocation_short_name, "systemd-resolve", "resolvconf"))
+        if (compat)
                 return compat_main(argc, argv, bus);
 
         return native_main(argc, argv, bus);
diff --git a/src/resolve/resolvectl.h b/src/resolve/resolvectl.h
index 1d0f147..3e404da 100644
--- a/src/resolve/resolvectl.h
+++ b/src/resolve/resolvectl.h
@@ -26,5 +26,10 @@
 extern char **arg_set_domain;
 extern bool arg_ifindex_permissive;
 
-int ifname_mangle(const char *s);
-int ifname_resolvconf_mangle(const char *s);
+int ifname_mangle_full(const char *s, bool drop_protocol_specifier);
+static inline int ifname_mangle(const char *s) {
+        return ifname_mangle_full(s, false);
+}
+static inline int ifname_resolvconf_mangle(const char *s) {
+        return ifname_mangle_full(s, true);
+}
diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c
index 61d4b50..1c1e5bc 100644
--- a/src/resolve/resolved-bus.c
+++ b/src/resolve/resolved-bus.c
@@ -27,10 +27,9 @@
 BUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_resolve_support, resolve_support, ResolveSupport);
 
 static int query_on_bus_track(sd_bus_track *t, void *userdata) {
-        DnsQuery *q = userdata;
+        DnsQuery *q = ASSERT_PTR(userdata);
 
         assert(t);
-        assert(q);
 
         if (!DNS_TRANSACTION_IS_LIVE(q->state))
                 return 0;
@@ -59,75 +58,134 @@
         return 0;
 }
 
-static int reply_query_state(DnsQuery *q) {
-
+static sd_bus_message *dns_query_steal_request(DnsQuery *q) {
         assert(q);
-        assert(q->bus_request);
+
+        /* Find the main query, it's the one that owns the message */
+        while (q->auxiliary_for)
+                q = q->auxiliary_for;
+
+        /* Let's take the request message out of the DnsQuery object, so that we never send requests twice */
+        return TAKE_PTR(q->bus_request);
+}
+
+_sd_printf_(3, 4) static int reply_method_errorf(
+                DnsQuery *query,
+                const char *error_name,
+                const char *format,
+                ...) {
+
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
+        va_list ap;
+        int r;
+
+        assert(query);
+        assert(format);
+
+        req = dns_query_steal_request(query);
+        if (!req) /* No bus message set anymore? then we already replied already, let's not answer a second time */
+                return 0;
+
+        va_start(ap, format);
+        r = sd_bus_reply_method_errorfv(req, error_name, format, ap);
+        va_end(ap);
+
+        return r;
+}
+
+_sd_printf_(3, 4) static int reply_method_errnof(
+                DnsQuery *query,
+                int err,
+                const char *format,
+                ...) {
+
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
+        int r;
+
+        assert(query);
+
+        req = dns_query_steal_request(query);
+        if (!req) /* No bus message set anymore? then we already replied already, let's not answer a second time */
+                return 0;
+
+        if (format) {
+                va_list ap;
+
+                va_start(ap, format);
+                r = sd_bus_reply_method_errnofv(req, err, format, ap);
+                va_end(ap);
+        } else
+                r = sd_bus_reply_method_errno(req, err, NULL);
+
+        return r;
+}
+
+static int reply_query_state(DnsQuery *q) {
+        assert(q);
 
         switch (q->state) {
 
         case DNS_TRANSACTION_NO_SERVERS:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_NAME_SERVERS, "No appropriate name servers or networks for name found");
+                return reply_method_errorf(q, BUS_ERROR_NO_NAME_SERVERS, "No appropriate name servers or networks for name found");
 
         case DNS_TRANSACTION_TIMEOUT:
-                return sd_bus_reply_method_errorf(q->bus_request, SD_BUS_ERROR_TIMEOUT, "Query timed out");
+                return reply_method_errorf(q, SD_BUS_ERROR_TIMEOUT, "Query timed out");
 
         case DNS_TRANSACTION_ATTEMPTS_MAX_REACHED:
-                return sd_bus_reply_method_errorf(q->bus_request, SD_BUS_ERROR_TIMEOUT, "All attempts to contact name servers or networks failed");
+                return reply_method_errorf(q, SD_BUS_ERROR_TIMEOUT, "All attempts to contact name servers or networks failed");
 
         case DNS_TRANSACTION_INVALID_REPLY:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_INVALID_REPLY, "Received invalid reply");
+                return reply_method_errorf(q, BUS_ERROR_INVALID_REPLY, "Received invalid reply");
 
         case DNS_TRANSACTION_ERRNO:
-                return sd_bus_reply_method_errnof(q->bus_request, q->answer_errno, "Lookup failed due to system error: %m");
+                return reply_method_errnof(q, q->answer_errno, "Lookup failed due to system error: %m");
 
         case DNS_TRANSACTION_ABORTED:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_ABORTED, "Query aborted");
+                return reply_method_errorf(q, BUS_ERROR_ABORTED, "Query aborted");
 
         case DNS_TRANSACTION_DNSSEC_FAILED:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_DNSSEC_FAILED, "DNSSEC validation failed: %s",
-                                                  dnssec_result_to_string(q->answer_dnssec_result));
+                return reply_method_errorf(q, BUS_ERROR_DNSSEC_FAILED, "DNSSEC validation failed: %s",
+                                           dnssec_result_to_string(q->answer_dnssec_result));
 
         case DNS_TRANSACTION_NO_TRUST_ANCHOR:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_TRUST_ANCHOR, "No suitable trust anchor known");
+                return reply_method_errorf(q, BUS_ERROR_NO_TRUST_ANCHOR, "No suitable trust anchor known");
 
         case DNS_TRANSACTION_RR_TYPE_UNSUPPORTED:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_RR_TYPE_UNSUPPORTED, "Server does not support requested resource record type");
+                return reply_method_errorf(q, BUS_ERROR_RR_TYPE_UNSUPPORTED, "Server does not support requested resource record type");
 
         case DNS_TRANSACTION_NETWORK_DOWN:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NETWORK_DOWN, "Network is down");
+                return reply_method_errorf(q, BUS_ERROR_NETWORK_DOWN, "Network is down");
 
         case DNS_TRANSACTION_NOT_FOUND:
                 /* We return this as NXDOMAIN. This is only generated when a host doesn't implement LLMNR/TCP, and we
                  * thus quickly know that we cannot resolve an in-addr.arpa or ip6.arpa address. */
-                return sd_bus_reply_method_errorf(q->bus_request, _BUS_ERROR_DNS "NXDOMAIN", "'%s' not found", dns_query_string(q));
+                return reply_method_errorf(q, BUS_ERROR_DNS_NXDOMAIN, "'%s' not found", dns_query_string(q));
 
         case DNS_TRANSACTION_NO_SOURCE:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_SOURCE, "All suitable resolution sources turned off");
+                return reply_method_errorf(q, BUS_ERROR_NO_SOURCE, "All suitable resolution sources turned off");
 
         case DNS_TRANSACTION_STUB_LOOP:
-                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_STUB_LOOP, "Configured DNS server loops back to us");
+                return reply_method_errorf(q, BUS_ERROR_STUB_LOOP, "Configured DNS server loops back to us");
 
         case DNS_TRANSACTION_RCODE_FAILURE: {
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+                _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
+
+                req = dns_query_steal_request(q);
+                if (!req) /* No bus message set anymore? then we already replied already, let's not answer a second time */
+                        return 0;
 
                 if (q->answer_rcode == DNS_RCODE_NXDOMAIN)
-                        sd_bus_error_setf(&error, _BUS_ERROR_DNS "NXDOMAIN", "'%s' not found", dns_query_string(q));
+                        sd_bus_error_setf(&error, BUS_ERROR_DNS_NXDOMAIN, "Name '%s' not found", dns_query_string(q));
                 else {
                         const char *rc, *n;
-                        char p[DECIMAL_STR_MAX(q->answer_rcode)];
 
-                        rc = dns_rcode_to_string(q->answer_rcode);
-                        if (!rc) {
-                                xsprintf(p, "%i", q->answer_rcode);
-                                rc = p;
-                        }
-
+                        rc = FORMAT_DNS_RCODE(q->answer_rcode);
                         n = strjoina(_BUS_ERROR_DNS, rc);
                         sd_bus_error_setf(&error, n, "Could not resolve '%s', server or network returned error %s", dns_query_string(q), rc);
                 }
 
-                return sd_bus_reply_method_error(q->bus_request, &error);
+                return sd_bus_reply_method_error(req, &error);
         }
 
         case DNS_TRANSACTION_NULL:
@@ -135,7 +193,7 @@
         case DNS_TRANSACTION_VALIDATING:
         case DNS_TRANSACTION_SUCCESS:
         default:
-                assert_not_reached("Impossible state");
+                assert_not_reached();
         }
 }
 
@@ -198,7 +256,7 @@
 
         r = dns_query_process_cname_many(q);
         if (r == -ELOOP) {
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(q));
+                r = reply_method_errorf(q, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(q));
                 goto finish;
         }
         if (r < 0)
@@ -238,7 +296,7 @@
         }
 
         if (added <= 0) {
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_SUCH_RR, "'%s' does not have any RR of the requested type", dns_query_string(q));
+                r = reply_method_errorf(q, BUS_ERROR_NO_SUCH_RR, "'%s' does not have any RR of the requested type", dns_query_string(q));
                 goto finish;
         }
 
@@ -261,12 +319,13 @@
         if (r < 0)
                 goto finish;
 
+        q->bus_request = sd_bus_message_unref(q->bus_request);
         r = sd_bus_send(q->manager->bus, reply, NULL);
 
 finish:
         if (r < 0) {
                 log_error_errno(r, "Failed to send hostname reply: %m");
-                sd_bus_reply_method_errno(q->bus_request, r, NULL);
+                (void) reply_method_errnof(q, r, NULL);
         }
 }
 
@@ -406,14 +465,13 @@
 static int bus_method_resolve_hostname(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(dns_question_unrefp) DnsQuestion *question_idna = NULL, *question_utf8 = NULL;
         _cleanup_(dns_query_freep) DnsQuery *q = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *hostname;
         int family, ifindex;
         uint64_t flags;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(int) == sizeof(int32_t));
 
@@ -488,7 +546,7 @@
 
         r = dns_query_process_cname_many(q);
         if (r == -ELOOP) {
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(q));
+                r = reply_method_errorf(q, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(q));
                 goto finish;
         }
         if (r < 0)
@@ -530,11 +588,9 @@
         }
 
         if (added <= 0) {
-                _cleanup_free_ char *ip = NULL;
-
-                (void) in_addr_to_string(q->request_family, &q->request_address, &ip);
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_SUCH_RR,
-                                               "Address '%s' does not have any RR of requested type", strnull(ip));
+                r = reply_method_errorf(q, BUS_ERROR_NO_SUCH_RR,
+                                        "Address %s does not have any RR of requested type",
+                                        IN_ADDR_TO_STRING(q->request_family, &q->request_address));
                 goto finish;
         }
 
@@ -546,26 +602,26 @@
         if (r < 0)
                 goto finish;
 
+        q->bus_request = sd_bus_message_unref(q->bus_request);
         r = sd_bus_send(q->manager->bus, reply, NULL);
 
 finish:
         if (r < 0) {
                 log_error_errno(r, "Failed to send address reply: %m");
-                sd_bus_reply_method_errno(q->bus_request, r, NULL);
+                (void) reply_method_errnof(q, r, NULL);
         }
 }
 
 static int bus_method_resolve_address(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_(dns_question_unrefp) DnsQuestion *question = NULL;
         _cleanup_(dns_query_freep) DnsQuery *q = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         union in_addr_union a;
         int family, ifindex;
         uint64_t flags;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(int) == sizeof(int32_t));
 
@@ -661,7 +717,7 @@
 
         r = dns_query_process_cname_many(q);
         if (r == -ELOOP) {
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(q));
+                r = reply_method_errorf(q, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(q));
                 goto finish;
         }
         if (r < 0)
@@ -697,7 +753,7 @@
         }
 
         if (added <= 0) {
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_SUCH_RR, "Name '%s' does not have any RR of the requested type", dns_query_string(q));
+                r = reply_method_errorf(q, BUS_ERROR_NO_SUCH_RR, "Name '%s' does not have any RR of the requested type", dns_query_string(q));
                 goto finish;
         }
 
@@ -709,12 +765,13 @@
         if (r < 0)
                 goto finish;
 
+        q->bus_request = sd_bus_message_unref(q->bus_request);
         r = sd_bus_send(q->manager->bus, reply, NULL);
 
 finish:
         if (r < 0) {
                 log_error_errno(r, "Failed to send record reply: %m");
-                sd_bus_reply_method_errno(q->bus_request, r, NULL);
+                (void) reply_method_errnof(q, r, NULL);
         }
 }
 
@@ -722,14 +779,13 @@
         _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
         _cleanup_(dns_question_unrefp) DnsQuestion *question = NULL;
         _cleanup_(dns_query_freep) DnsQuery *q = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint16_t class, type;
         const char *name;
         int r, ifindex;
         uint64_t flags;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(int) == sizeof(int32_t));
 
@@ -795,7 +851,6 @@
 static int append_srv(DnsQuery *q, sd_bus_message *reply, DnsResourceRecord *rr) {
         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *canonical = NULL;
         _cleanup_free_ char *normalized = NULL;
-        DnsQuery *aux;
         int r;
 
         assert(q);
@@ -926,7 +981,6 @@
 }
 
 static int append_txt(sd_bus_message *reply, DnsResourceRecord *rr) {
-        DnsTxtItem *i;
         int r;
 
         assert(reply);
@@ -957,7 +1011,6 @@
         DnsQuestion *question;
         DnsResourceRecord *rr;
         unsigned added = 0;
-        DnsQuery *aux;
         int r;
 
         assert(q);
@@ -1002,7 +1055,7 @@
                                 assert(bad->auxiliary_result != 0);
 
                                 if (bad->auxiliary_result == -ELOOP) {
-                                        r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(bad));
+                                        r = reply_method_errorf(q, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(bad));
                                         goto finish;
                                 }
 
@@ -1046,7 +1099,7 @@
         }
 
         if (added <= 0) {
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_SUCH_RR, "'%s' does not have any RR of the requested type", dns_query_string(q));
+                r = reply_method_errorf(q, BUS_ERROR_NO_SUCH_RR, "'%s' does not have any RR of the requested type", dns_query_string(q));
                 goto finish;
         }
 
@@ -1087,12 +1140,13 @@
         if (r < 0)
                 goto finish;
 
+        q->bus_request = sd_bus_message_unref(q->bus_request);
         r = sd_bus_send(q->manager->bus, reply, NULL);
 
 finish:
         if (r < 0) {
                 log_error_errno(r, "Failed to send service reply: %m");
-                sd_bus_reply_method_errno(q->bus_request, r, NULL);
+                (void) reply_method_errnof(q, r, NULL);
         }
 }
 
@@ -1137,7 +1191,6 @@
         if (r < 0)
                 return r;
 
-        aux->bus_request = sd_bus_message_ref(q->bus_request);
         aux->request_family = q->request_family;
         aux->complete = resolve_service_hostname_complete;
 
@@ -1178,7 +1231,7 @@
 
         r = dns_query_process_cname_many(q);
         if (r == -ELOOP) {
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(q));
+                r = reply_method_errorf(q, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_query_string(q));
                 goto finish;
         }
         if (r < 0)
@@ -1219,18 +1272,15 @@
         }
 
         if (has_root_domain && found <= 0) {
-                /* If there's exactly one SRV RR and it uses
-                 * the root domain as hostname, then the
-                 * service is explicitly not offered on the
-                 * domain. Report this as a recognizable
-                 * error. See RFC 2782, Section "Usage
-                 * Rules". */
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_SUCH_SERVICE, "'%s' does not provide the requested service", dns_query_string(q));
+                /* If there's exactly one SRV RR and it uses the root domain as hostname, then the service is
+                 * explicitly not offered on the domain. Report this as a recognizable error. See RFC 2782,
+                 * Section "Usage Rules". */
+                r = reply_method_errorf(q, BUS_ERROR_NO_SUCH_SERVICE, "'%s' does not provide the requested service", dns_query_string(q));
                 goto finish;
         }
 
         if (found <= 0) {
-                r = sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_SUCH_RR, "'%s' does not have any RR of the requested type", dns_query_string(q));
+                r = reply_method_errorf(q, BUS_ERROR_NO_SUCH_RR, "'%s' does not have any RR of the requested type", dns_query_string(q));
                 goto finish;
         }
 
@@ -1241,7 +1291,7 @@
 finish:
         if (r < 0) {
                 log_error_errno(r, "Failed to send service reply: %m");
-                sd_bus_reply_method_errno(q->bus_request, r, NULL);
+                (void) reply_method_errnof(q, r, NULL);
         }
 }
 
@@ -1249,13 +1299,12 @@
         _cleanup_(dns_question_unrefp) DnsQuestion *question_idna = NULL, *question_utf8 = NULL;
         _cleanup_(dns_query_freep) DnsQuery *q = NULL;
         const char *name, *type, *domain;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int family, ifindex;
         uint64_t flags;
         int r;
 
         assert(message);
-        assert(m);
 
         assert_cc(sizeof(int) == sizeof(int32_t));
 
@@ -1322,7 +1371,11 @@
         return 1;
 }
 
-int bus_dns_server_append(sd_bus_message *reply, DnsServer *s, bool with_ifindex, bool extended) {
+int bus_dns_server_append(
+                sd_bus_message *reply,
+                DnsServer *s,
+                bool with_ifindex, /* include "ifindex" field */
+                bool extended) {   /* also include port number and server name */
         int r;
 
         assert(reply);
@@ -1341,7 +1394,11 @@
                 }
         }
 
-        r = sd_bus_message_open_container(reply, 'r', with_ifindex ? (extended ? "iiayqs" : "iiay") : (extended ? "iayqs" : "iay"));
+        r = sd_bus_message_open_container(
+                        reply,
+                        'r',
+                        with_ifindex ? (extended ? "iiayqs" : "iiay") :
+                                       (extended ? "iayqs" : "iay"));
         if (r < 0)
                 return r;
 
@@ -1382,13 +1439,11 @@
                 sd_bus_error *error,
                 bool extended) {
 
-        Manager *m = userdata;
-        DnsServer *s;
+        Manager *m = ASSERT_PTR(userdata);
         Link *l;
         int r;
 
         assert(reply);
-        assert(m);
 
         r = sd_bus_message_open_container(reply, 'a', extended ? "(iiayqs)" : "(iiay)");
         if (r < 0)
@@ -1442,11 +1497,10 @@
                 sd_bus_error *error,
                 bool extended) {
 
-        DnsServer *s, **f = userdata;
+        DnsServer **f = ASSERT_PTR(userdata);
         int r;
 
         assert(reply);
-        assert(f);
 
         r = sd_bus_message_open_container(reply, 'a', extended ? "(iiayqs)" : "(iiay)");
         if (r < 0)
@@ -1534,13 +1588,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
-        DnsSearchDomain *d;
+        Manager *m = ASSERT_PTR(userdata);
         Link *l;
         int r;
 
         assert(reply);
-        assert(m);
 
         r = sd_bus_message_open_container(reply, 'a', "(isb)");
         if (r < 0)
@@ -1572,10 +1624,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(reply);
-        assert(m);
 
         return sd_bus_message_append(reply, "(tt)",
                                      (uint64_t) hashmap_size(m->dns_transactions),
@@ -1592,11 +1643,9 @@
                 sd_bus_error *error) {
 
         uint64_t size = 0, hit = 0, miss = 0;
-        Manager *m = userdata;
-        DnsScope *s;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(reply);
-        assert(m);
 
         LIST_FOREACH(scopes, s, m->dns_scopes) {
                 size += dns_cache_size(&s->cache);
@@ -1616,10 +1665,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(reply);
-        assert(m);
 
         return sd_bus_message_append(reply, "(tttt)",
                                      (uint64_t) m->n_dnssec_verdict[DNSSEC_SECURE],
@@ -1637,12 +1685,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         const char *domain;
         int r;
 
         assert(reply);
-        assert(m);
 
         r = sd_bus_message_open_container(reply, 'a', "s");
         if (r < 0)
@@ -1685,11 +1732,9 @@
 }
 
 static int bus_method_reset_statistics(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
-        DnsScope *s;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(message);
-        assert(m);
 
         bus_client_log(message, "statistics reset");
 
@@ -1777,12 +1822,11 @@
 
 static int bus_method_get_link(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *p = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r, ifindex;
         Link *l;
 
         assert(message);
-        assert(m);
 
         r = bus_message_read_ifindex(message, error, &ifindex);
         if (r < 0)
@@ -1800,10 +1844,9 @@
 }
 
 static int bus_method_flush_caches(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(message);
-        assert(m);
 
         bus_client_log(message, "cache flush");
 
@@ -1813,10 +1856,9 @@
 }
 
 static int bus_method_reset_server_features(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(message);
-        assert(m);
 
         bus_client_log(message, "server feature reset");
 
@@ -1826,10 +1868,9 @@
 }
 
 static int dnssd_service_on_bus_track(sd_bus_track *t, void *userdata) {
-        DnssdService *s = userdata;
+        DnssdService *s = ASSERT_PTR(userdata);
 
         assert(t);
-        assert(s);
 
         log_debug("Client of active request vanished, destroying DNS-SD service.");
         dnssd_service_free(s);
@@ -1841,18 +1882,14 @@
         _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
         _cleanup_(dnssd_service_freep) DnssdService *service = NULL;
         _cleanup_(sd_bus_track_unrefp) sd_bus_track *bus_track = NULL;
+        const char *name, *name_template, *type;
         _cleanup_free_ char *path = NULL;
-        _cleanup_free_ char *instance_name = NULL;
-        Manager *m = userdata;
         DnssdService *s = NULL;
-        const char *name;
-        const char *name_template;
-        const char *type;
+        Manager *m = ASSERT_PTR(userdata);
         uid_t euid;
         int r;
 
         assert(message);
-        assert(m);
 
         if (m->mdns_support != RESOLVE_SUPPORT_YES)
                 return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Support for MulticastDNS is disabled");
@@ -1895,7 +1932,7 @@
         if (!service->type)
                 return log_oom();
 
-        r = dnssd_render_instance_name(service, &instance_name);
+        r = dnssd_render_instance_name(m, service, NULL);
         if (r < 0)
                 return r;
 
@@ -1935,7 +1972,7 @@
                         if (r < 0)
                                 return r;
 
-                        LIST_INSERT_AFTER(items, txt_data->txt, last, i);
+                        LIST_INSERT_AFTER(items, txt_data->txts, last, i);
                         last = i;
 
                         r = sd_bus_message_exit_container(message);
@@ -1950,7 +1987,7 @@
                 if (r < 0)
                         return r;
 
-                if (txt_data->txt) {
+                if (txt_data->txts) {
                         LIST_PREPEND(items, service->txt_data_items, txt_data);
                         txt_data = NULL;
                 }
@@ -1969,7 +2006,7 @@
                 if (!txt_data)
                         return log_oom();
 
-                r = dns_txt_item_new_empty(&txt_data->txt);
+                r = dns_txt_item_new_empty(&txt_data->txts);
                 if (r < 0)
                         return r;
 
@@ -2039,10 +2076,9 @@
 }
 
 static int bus_method_unregister_service(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(message);
-        assert(m);
 
         return call_dnssd_method(m, message, bus_dnssd_method_unregister, error);
 }
@@ -2198,11 +2234,10 @@
 };
 
 static int match_prepare_for_sleep(sd_bus_message *message, void *userdata, sd_bus_error *ret_error) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int b, r;
 
         assert(message);
-        assert(m);
 
         r = sd_bus_message_read(message, "b", &b);
         if (r < 0) {
diff --git a/src/resolve/resolved-conf.c b/src/resolve/resolved-conf.c
index 283c063..d692998 100644
--- a/src/resolve/resolved-conf.c
+++ b/src/resolve/resolved-conf.c
@@ -2,16 +2,18 @@
 
 #include "alloc-util.h"
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
+#include "creds-util.h"
+#include "dns-domain.h"
 #include "extract-word.h"
 #include "hexdecoct.h"
 #include "parse-util.h"
+#include "proc-cmdline.h"
 #include "resolved-conf.h"
-#include "resolved-dnssd.h"
-#include "resolved-manager.h"
 #include "resolved-dns-search-domain.h"
 #include "resolved-dns-stub.h"
-#include "dns-domain.h"
+#include "resolved-dnssd.h"
+#include "resolved-manager.h"
 #include "socket-netlink.h"
 #include "specifier.h"
 #include "string-table.h"
@@ -35,7 +37,7 @@
         if (r < 0)
                 return r;
 
-        /* Silently filter out 0.0.0.0 and 127.0.0.53 (our own stub DNS listener) */
+        /* Silently filter out 0.0.0.0, 127.0.0.53, 127.0.0.54 (our own stub DNS listener) */
         if (!dns_server_address_valid(family, &address))
                 return 0;
 
@@ -66,17 +68,13 @@
                 _cleanup_free_ char *word = NULL;
 
                 r = extract_first_word(&string, &word, NULL, 0);
-                if (r < 0)
+                if (r <= 0)
                         return r;
-                if (r == 0)
-                        break;
 
                 r = manager_add_dns_server_by_string(m, type, word);
                 if (r < 0)
                         log_warning_errno(r, "Failed to add DNS server address '%s', ignoring: %m", word);
         }
-
-        return 0;
 }
 
 static int manager_add_search_domain_by_string(Manager *m, const char *domain) {
@@ -121,17 +119,13 @@
                 _cleanup_free_ char *word = NULL;
 
                 r = extract_first_word(&string, &word, NULL, EXTRACT_UNQUOTE);
-                if (r < 0)
+                if (r <= 0)
                         return r;
-                if (r == 0)
-                        break;
 
                 r = manager_add_search_domain_by_string(m, word);
                 if (r < 0)
                         log_warning_errno(r, "Failed to add search domain '%s', ignoring: %m", word);
         }
-
-        return 0;
 }
 
 int config_parse_dns_servers(
@@ -146,13 +140,12 @@
                 void *data,
                 void *userdata) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(m);
 
         if (isempty(rvalue))
                 /* Empty assignment means clear the list */
@@ -189,13 +182,12 @@
                 void *data,
                 void *userdata) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(m);
 
         if (isempty(rvalue))
                 /* Empty assignment means clear the list */
@@ -233,7 +225,7 @@
                 { 'a', specifier_architecture,    NULL },
                 { 'b', specifier_boot_id,         NULL },
                 { 'B', specifier_os_build_id,     NULL },
-                { 'H', specifier_host_name,       NULL }, /* We will use specifier_dnssd_host_name(). */
+                { 'H', specifier_hostname,        NULL }, /* We will use specifier_dnssd_hostname(). */
                 { 'm', specifier_machine_id,      NULL },
                 { 'o', specifier_os_id,           NULL },
                 { 'v', specifier_kernel_release,  NULL },
@@ -241,14 +233,13 @@
                 { 'W', specifier_os_variant_id,   NULL },
                 {}
         };
-        DnssdService *s = userdata;
+        DnssdService *s = ASSERT_PTR(userdata);
         _cleanup_free_ char *name = NULL;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(s);
 
         if (isempty(rvalue)) {
                 s->name_template = mfree(s->name_template);
@@ -284,13 +275,12 @@
                 void *data,
                 void *userdata) {
 
-        DnssdService *s = userdata;
+        DnssdService *s = ASSERT_PTR(userdata);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(s);
 
         if (isempty(rvalue)) {
                 s->type = mfree(s->type);
@@ -322,13 +312,12 @@
                 void *userdata) {
 
         _cleanup_(dnssd_txtdata_freep) DnssdTxtData *txt_data = NULL;
-        DnssdService *s = userdata;
+        DnssdService *s = ASSERT_PTR(userdata);
         DnsTxtItem *last = NULL;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(s);
 
         if (isempty(rvalue)) {
                 /* Flush out collected items */
@@ -395,14 +384,14 @@
                         break;
 
                 default:
-                        assert_not_reached("Unknown type of Txt config");
+                        assert_not_reached();
                 }
 
-                LIST_INSERT_AFTER(items, txt_data->txt, last, i);
+                LIST_INSERT_AFTER(items, txt_data->txts, last, i);
                 last = i;
         }
 
-        if (!LIST_IS_EMPTY(txt_data->txt)) {
+        if (txt_data->txts) {
                 LIST_PREPEND(items, s->txt_data_items, txt_data);
                 TAKE_PTR(txt_data);
         }
@@ -476,6 +465,99 @@
         return 0;
 }
 
+static void read_credentials(Manager *m) {
+        _cleanup_free_ char *dns = NULL, *domains = NULL;
+        int r;
+
+        assert(m);
+
+        /* Hmm, if we aren't supposed to read /etc/resolv.conf because the DNS settings were already
+         * configured explicitly in our config file, we don't want to honour credentials either */
+        if (!m->read_resolv_conf)
+                return;
+
+        r = read_credential_strings_many(
+                        "network.dns", &dns,
+                        "network.search_domains", &domains);
+        if (r < 0 && !IN_SET(r, -ENXIO, -ENOENT))
+                log_warning_errno(r, "Failed to read credentials, ignoring: %m");
+
+        if (dns) {
+                r = manager_parse_dns_server_string_and_warn(m, DNS_SERVER_SYSTEM, dns);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse credential provided DNS server string '%s', ignoring.", dns);
+
+                m->read_resolv_conf = false;
+        }
+
+        if (domains) {
+                r = manager_parse_search_domains_and_warn(m, domains);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse credential provided search domain string '%s', ignoring.", domains);
+
+                m->read_resolv_conf = false;
+        }
+}
+
+struct ProcCmdlineInfo {
+        Manager *manager;
+
+        /* If there's a setting configured via /proc/cmdline we want to reset the configured lists, but only
+         * once, so that multiple nameserver= or domain= settings can be specified on the kernel command line
+         * and will be combined. These booleans will be set once we erase the list once. */
+        bool dns_server_unlinked;
+        bool search_domain_unlinked;
+};
+
+static int proc_cmdline_callback(const char *key, const char *value, void *data) {
+        struct ProcCmdlineInfo *info = ASSERT_PTR(data);
+        int r;
+
+        assert(info->manager);
+
+        /* The kernel command line option names are chosen to be compatible with what various tools already
+         * interpret, for example dracut and SUSE Linux. */
+
+        if (proc_cmdline_key_streq(key, "nameserver")) {
+                if (!info->dns_server_unlinked) {
+                        /* The kernel command line overrides any prior configuration */
+                        dns_server_unlink_all(manager_get_first_dns_server(info->manager, DNS_SERVER_SYSTEM));
+                        info->dns_server_unlinked = true;
+                }
+
+                r = manager_parse_dns_server_string_and_warn(info->manager, DNS_SERVER_SYSTEM, value);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse DNS server string '%s', ignoring.", value);
+
+                info->manager->read_resolv_conf = false;
+
+        } else if (proc_cmdline_key_streq(key, "domain")) {
+
+                if (!info->search_domain_unlinked) {
+                        dns_search_domain_unlink_all(info->manager->search_domains);
+                        info->search_domain_unlinked = true;
+                }
+
+                r = manager_parse_search_domains_and_warn(info->manager, value);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse credential provided search domain string '%s', ignoring.", value);
+
+                info->manager->read_resolv_conf = false;
+        }
+
+        return 0;
+}
+
+static void read_proc_cmdline(Manager *m) {
+        int r;
+
+        assert(m);
+
+        r = proc_cmdline_parse(proc_cmdline_callback, &(struct ProcCmdlineInfo) { .manager = m }, 0);
+        if (r < 0)
+                log_warning_errno(r, "Failed to read kernel command line, ignoring: %m");
+}
+
 int manager_parse_config_file(Manager *m) {
         int r;
 
@@ -492,20 +574,23 @@
         if (r < 0)
                 return r;
 
+        read_credentials(m);   /* credentials are only used when nothing is explicitly configured … */
+        read_proc_cmdline(m);  /* … but kernel command line overrides local configuration. */
+
         if (m->need_builtin_fallbacks) {
                 r = manager_parse_dns_server_string_and_warn(m, DNS_SERVER_FALLBACK, DNS_SERVERS);
                 if (r < 0)
                         return r;
         }
 
-#if ! HAVE_GCRYPT
+#if !HAVE_OPENSSL_OR_GCRYPT
         if (m->dnssec_mode != DNSSEC_NO) {
-                log_warning("DNSSEC option cannot be enabled or set to allow-downgrade when systemd-resolved is built without gcrypt support. Turning off DNSSEC support.");
+                log_warning("DNSSEC option cannot be enabled or set to allow-downgrade when systemd-resolved is built without a cryptographic library. Turning off DNSSEC support.");
                 m->dnssec_mode = DNSSEC_NO;
         }
 #endif
 
-#if ! ENABLE_DNS_OVER_TLS
+#if !ENABLE_DNS_OVER_TLS
         if (m->dns_over_tls_mode != DNS_OVER_TLS_NO) {
                 log_warning("DNS-over-TLS option cannot be enabled or set to opportunistic when systemd-resolved is built without DNS-over-TLS support. Turning off DNS-over-TLS support.");
                 m->dns_over_tls_mode = DNS_OVER_TLS_NO;
diff --git a/src/resolve/resolved-dns-answer.c b/src/resolve/resolved-dns-answer.c
index 978d148..3d42b0d 100644
--- a/src/resolve/resolved-dns-answer.c
+++ b/src/resolve/resolved-dns-answer.c
@@ -9,6 +9,19 @@
 #include "resolved-dns-dnssec.h"
 #include "string-util.h"
 
+static DnsAnswerItem *dns_answer_item_free(DnsAnswerItem *item) {
+        if (!item)
+                return NULL;
+
+        dns_resource_record_unref(item->rr);
+        dns_resource_record_unref(item->rrsig);
+
+        return mfree(item);
+}
+
+DEFINE_PRIVATE_TRIVIAL_REF_UNREF_FUNC(DnsAnswerItem, dns_answer_item, dns_answer_item_free);
+DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswerItem*, dns_answer_item_unref);
+
 static void dns_answer_item_hash_func(const DnsAnswerItem *a, struct siphash *state) {
         assert(a);
         assert(state);
@@ -31,54 +44,59 @@
         return dns_resource_record_compare_func(a->rr, b->rr);
 }
 
-DEFINE_PRIVATE_HASH_OPS(dns_answer_item_hash_ops, DnsAnswerItem, dns_answer_item_hash_func, dns_answer_item_compare_func);
+DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+        dns_answer_item_hash_ops,
+        DnsAnswerItem,
+        dns_answer_item_hash_func,
+        dns_answer_item_compare_func,
+        dns_answer_item_unref);
 
-DnsAnswer *dns_answer_new(size_t n) {
-        _cleanup_set_free_ Set *s = NULL;
-        DnsAnswer *a;
+static int dns_answer_reserve_internal(DnsAnswer *a, size_t n) {
+        size_t m;
 
-        if (n > UINT16_MAX) /* We can only place 64K RRs in an answer at max */
-                n = UINT16_MAX;
+        assert(a);
+        assert(a->items);
 
-        s = set_new(&dns_answer_item_hash_ops);
-        if (!s)
-                return NULL;
+        m = ordered_set_size(a->items);
+        assert(m <= UINT16_MAX); /* We can only place 64K RRs in an answer at max */
+
+        n = saturate_add(m, n, UINT16_MAX);
 
         /* Higher multipliers give slightly higher efficiency through hash collisions, but the gains
          * quickly drop off after 2. */
-        if (set_reserve(s, n * 2) < 0)
-                return NULL;
-
-        a = malloc0(offsetof(DnsAnswer, items) + sizeof(DnsAnswerItem) * n);
-        if (!a)
-                return NULL;
-
-        a->n_ref = 1;
-        a->n_allocated = n;
-        a->set_items = TAKE_PTR(s);
-        return a;
+        return ordered_set_reserve(a->items, n * 2);
 }
 
-static void dns_answer_flush(DnsAnswer *a) {
-        DnsAnswerItem *item;
+DnsAnswer *dns_answer_new(size_t n) {
+        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
+        _cleanup_(dns_answer_unrefp) DnsAnswer *a = NULL;
 
+        if (n > UINT16_MAX)
+                n = UINT16_MAX;
+
+        s = ordered_set_new(&dns_answer_item_hash_ops);
+        if (!s)
+                return NULL;
+
+        a = new(DnsAnswer, 1);
         if (!a)
-                return;
+                return NULL;
 
-        a->set_items = set_free(a->set_items);
+        *a = (DnsAnswer) {
+                .n_ref = 1,
+                .items = TAKE_PTR(s),
+        };
 
-        DNS_ANSWER_FOREACH_ITEM(item, a) {
-                dns_resource_record_unref(item->rr);
-                dns_resource_record_unref(item->rrsig);
-        }
+        if (dns_answer_reserve_internal(a, n) < 0)
+                return NULL;
 
-        a->n_rrs = 0;
+        return TAKE_PTR(a);
 }
 
 static DnsAnswer *dns_answer_free(DnsAnswer *a) {
         assert(a);
 
-        dns_answer_flush(a);
+        ordered_set_free(a->items);
         return mfree(a);
 }
 
@@ -91,6 +109,7 @@
                 DnsAnswerFlags flags,
                 DnsResourceRecord *rrsig) {
 
+        _cleanup_(dns_answer_item_unrefp) DnsAnswerItem *item = NULL;
         int r;
 
         assert(rr);
@@ -98,25 +117,26 @@
         if (!a)
                 return -ENOSPC;
 
-        if (a->n_rrs >= a->n_allocated)
+        if (dns_answer_size(a) >= UINT16_MAX)
                 return -ENOSPC;
 
-        a->items[a->n_rrs] = (DnsAnswerItem) {
-                .rr = rr,
+        item = new(DnsAnswerItem, 1);
+        if (!item)
+                return -ENOMEM;
+
+        *item = (DnsAnswerItem) {
+                .n_ref = 1,
+                .rr = dns_resource_record_ref(rr),
                 .ifindex = ifindex,
                 .flags = flags,
                 .rrsig = dns_resource_record_ref(rrsig),
         };
 
-        r = set_put(a->set_items, &a->items[a->n_rrs]);
+        r = ordered_set_put(a->items, item);
         if (r < 0)
                 return r;
-        if (r == 0)
-                return -EEXIST;
 
-        dns_resource_record_ref(rr);
-        a->n_rrs++;
-
+        TAKE_PTR(item);
         return 1;
 }
 
@@ -159,7 +179,7 @@
                 .ifindex = ifindex,
         };
 
-        exist = set_get(a->set_items, &tmp);
+        exist = ordered_set_get(a->items, &tmp);
         if (exist) {
                 /* There's already an RR of the same RRset in place! Let's see if the TTLs more or less
                  * match. We don't really care if they match precisely, but we do care whether one is 0 and
@@ -169,18 +189,20 @@
 
                 /* Entry already exists, keep the entry with the higher TTL. */
                 if (rr->ttl > exist->rr->ttl) {
-                        dns_resource_record_unref(exist->rr);
-                        exist->rr = dns_resource_record_ref(rr);
+                        DNS_RR_REPLACE(exist->rr, dns_resource_record_ref(rr));
 
                         /* Update RRSIG and RR at the same time */
-                        if (rrsig) {
-                                dns_resource_record_ref(rrsig);
-                                dns_resource_record_unref(exist->rrsig);
-                                exist->rrsig = rrsig;
-                        }
+                        if (rrsig)
+                                DNS_RR_REPLACE(exist->rrsig, dns_resource_record_ref(rrsig));
                 }
 
                 exist->flags |= flags;
+
+                if (rr->key->type == DNS_TYPE_RRSIG) {
+                        /* If the rr is RRSIG, then move the rr to the end. */
+                        assert_se(ordered_set_remove(a->items, exist) == exist);
+                        assert_se(ordered_set_put(a->items, exist) == 1);
+                }
                 return 0;
         }
 
@@ -436,7 +458,7 @@
                 return 0;
         }
 
-        k = dns_answer_new(a->n_rrs + b->n_rrs);
+        k = dns_answer_new(dns_answer_size(a) + dns_answer_size(b));
         if (!k)
                 return -ENOMEM;
 
@@ -463,16 +485,13 @@
         if (r < 0)
                 return r;
 
-        dns_answer_unref(*a);
-        *a = merged;
-
+        DNS_ANSWER_REPLACE(*a, merged);
         return 0;
 }
 
 int dns_answer_remove_by_key(DnsAnswer **a, const DnsResourceKey *key) {
-        bool found = false, other = false;
-        DnsResourceRecord *rr;
-        size_t i;
+        DnsAnswerItem *item;
+        bool found = false;
         int r;
 
         assert(a);
@@ -480,162 +499,51 @@
 
         /* Remove all entries matching the specified key from *a */
 
-        DNS_ANSWER_FOREACH(rr, *a) {
-                r = dns_resource_key_equal(rr->key, key);
+        DNS_ANSWER_FOREACH_ITEM(item, *a) {
+                r = dns_resource_key_equal(item->rr->key, key);
                 if (r < 0)
                         return r;
-                if (r > 0)
+                if (r > 0) {
+                        dns_answer_item_unref(ordered_set_remove((*a)->items, item));
                         found = true;
-                else
-                        other = true;
-
-                if (found && other)
-                        break;
+                }
         }
 
         if (!found)
                 return 0;
 
-        if (!other) {
+        if (dns_answer_isempty(*a))
                 *a = dns_answer_unref(*a); /* Return NULL for the empty answer */
-                return 1;
-        }
-
-        if ((*a)->n_ref > 1) {
-                _cleanup_(dns_answer_unrefp) DnsAnswer *copy = NULL;
-                DnsAnswerItem *item;
-
-                copy = dns_answer_new((*a)->n_rrs);
-                if (!copy)
-                        return -ENOMEM;
-
-                DNS_ANSWER_FOREACH_ITEM(item, *a) {
-                        r = dns_resource_key_equal(item->rr->key, key);
-                        if (r < 0)
-                                return r;
-                        if (r > 0)
-                                continue;
-
-                        r = dns_answer_add_raw(copy, item->rr, item->ifindex, item->flags, item->rrsig);
-                        if (r < 0)
-                                return r;
-                }
-
-                dns_answer_unref(*a);
-                *a = TAKE_PTR(copy);
-
-                return 1;
-        }
-
-        /* Only a single reference, edit in-place */
-
-        i = 0;
-        for (;;) {
-                if (i >= (*a)->n_rrs)
-                        break;
-
-                r = dns_resource_key_equal((*a)->items[i].rr->key, key);
-                if (r < 0)
-                        return r;
-                if (r > 0) {
-                        /* Kill this entry */
-
-                        dns_resource_record_unref((*a)->items[i].rr);
-                        dns_resource_record_unref((*a)->items[i].rrsig);
-
-                        memmove((*a)->items + i, (*a)->items + i + 1, sizeof(DnsAnswerItem) * ((*a)->n_rrs - i - 1));
-                        (*a)->n_rrs--;
-                        continue;
-
-                } else
-                        /* Keep this entry */
-                        i++;
-        }
 
         return 1;
 }
 
-int dns_answer_remove_by_rr(DnsAnswer **a, DnsResourceRecord *rm) {
-        bool found = false, other = false;
-        DnsResourceRecord *rr;
-        size_t i;
+int dns_answer_remove_by_rr(DnsAnswer **a, DnsResourceRecord *rr) {
+        _unused_ _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr_ref = dns_resource_record_ref(rr);
+        DnsAnswerItem *item;
+        bool found = false;
         int r;
 
         assert(a);
-        assert(rm);
+        assert(rr);
 
         /* Remove all entries matching the specified RR from *a */
 
-        DNS_ANSWER_FOREACH(rr, *a) {
-                r = dns_resource_record_equal(rr, rm);
+        DNS_ANSWER_FOREACH_ITEM(item, *a) {
+                r = dns_resource_record_equal(item->rr, rr);
                 if (r < 0)
                         return r;
-                if (r > 0)
+                if (r > 0) {
+                        dns_answer_item_unref(ordered_set_remove((*a)->items, item));
                         found = true;
-                else
-                        other = true;
-
-                if (found && other)
-                        break;
+                }
         }
 
         if (!found)
                 return 0;
 
-        if (!other) {
+        if (dns_answer_isempty(*a))
                 *a = dns_answer_unref(*a); /* Return NULL for the empty answer */
-                return 1;
-        }
-
-        if ((*a)->n_ref > 1) {
-                _cleanup_(dns_answer_unrefp) DnsAnswer *copy = NULL;
-                DnsAnswerItem *item;
-
-                copy = dns_answer_new((*a)->n_rrs);
-                if (!copy)
-                        return -ENOMEM;
-
-                DNS_ANSWER_FOREACH_ITEM(item, *a) {
-                        r = dns_resource_record_equal(item->rr, rm);
-                        if (r < 0)
-                                return r;
-                        if (r > 0)
-                                continue;
-
-                        r = dns_answer_add_raw(copy, item->rr, item->ifindex, item->flags, item->rrsig);
-                        if (r < 0)
-                                return r;
-                }
-
-                dns_answer_unref(*a);
-                *a = TAKE_PTR(copy);
-
-                return 1;
-        }
-
-        /* Only a single reference, edit in-place */
-
-        i = 0;
-        for (;;) {
-                if (i >= (*a)->n_rrs)
-                        break;
-
-                r = dns_resource_record_equal((*a)->items[i].rr, rm);
-                if (r < 0)
-                        return r;
-                if (r > 0) {
-                        /* Kill this entry */
-
-                        dns_resource_record_unref((*a)->items[i].rr);
-                        dns_resource_record_unref((*a)->items[i].rrsig);
-                        memmove((*a)->items + i, (*a)->items + i + 1, sizeof(DnsAnswerItem) * ((*a)->n_rrs - i - 1));
-                        (*a)->n_rrs--;
-                        continue;
-
-                } else
-                        /* Keep this entry */
-                        i++;
-        }
 
         return 1;
 }
@@ -655,11 +563,12 @@
                 r = dns_answer_remove_by_key(a, item->rr->key);
                 if (r < 0)
                         return r;
+                if (!*a)
+                        return 0; /* a is already empty. */
 
                 /* Let's remember this entry's RR key, to optimize the loop a bit: if we have an RRset with
                  * more than one item then we don't need to remove the key multiple times */
-                dns_resource_key_unref(prev);
-                prev = dns_resource_key_ref(item->rr->key);
+                DNS_RESOURCE_KEY_REPLACE(prev, dns_resource_key_ref(item->rr->key));
         }
 
         return 0;
@@ -688,12 +597,7 @@
                 if (r == 0)
                         continue;
 
-                /* Make space for at least one entry */
-                r = dns_answer_reserve_or_clone(a, 1);
-                if (r < 0)
-                        return r;
-
-                r = dns_answer_add(*a, item->rr, item->ifindex, item->flags|or_flags, rrsig ?: item->rrsig);
+                r = dns_answer_add_extend(a, item->rr, item->ifindex, item->flags|or_flags, rrsig ?: item->rrsig);
                 if (r < 0)
                         return r;
         }
@@ -707,6 +611,7 @@
                 const DnsResourceKey *key,
                 DnsAnswerFlags or_flags,
                 DnsResourceRecord *rrsig) {
+
         int r;
 
         assert(to);
@@ -721,140 +626,87 @@
 }
 
 void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local) {
-        DnsAnswerItem *items;
-        size_t i, start, end;
+        _cleanup_free_ DnsAnswerItem **items = NULL;
+        DnsAnswerItem **p, *item;
+        size_t n;
 
-        if (!a)
+        n = dns_answer_size(a);
+        if (n <= 1)
                 return;
 
-        if (a->n_rrs <= 1)
-                return;
-
-        start = 0;
-        end = a->n_rrs-1;
-
         /* RFC 4795, Section 2.6 suggests we should order entries
          * depending on whether the sender is a link-local address. */
 
-        items = newa(DnsAnswerItem, a->n_rrs);
-        for (i = 0; i < a->n_rrs; i++) {
-                if (dns_resource_record_is_link_local_address(a->items[i].rr) != prefer_link_local)
-                        /* Order address records that are not preferred to the end of the array */
-                        items[end--] = a->items[i];
-                else
-                        /* Order all other records to the beginning of the array */
-                        items[start++] = a->items[i];
-        }
+        p = items = new(DnsAnswerItem*, n);
+        if (!items)
+                return (void) log_oom();
 
-        assert(start == end+1);
-        memcpy(a->items, items, sizeof(DnsAnswerItem) * a->n_rrs);
+        /* Order preferred address records and other records to the beginning of the array */
+        DNS_ANSWER_FOREACH_ITEM(item, a)
+                if (dns_resource_record_is_link_local_address(item->rr) == prefer_link_local)
+                        *p++ = dns_answer_item_ref(item);
+
+        /* Order address records that are not preferred to the end of the array */
+        DNS_ANSWER_FOREACH_ITEM(item, a)
+                if (dns_resource_record_is_link_local_address(item->rr) != prefer_link_local)
+                        *p++ = dns_answer_item_ref(item);
+
+
+        assert((size_t) (p - items) == n);
+
+        ordered_set_clear(a->items);
+        for (size_t i = 0; i < n; i++)
+                assert_se(ordered_set_put(a->items, items[i]) >= 0);
 }
 
 int dns_answer_reserve(DnsAnswer **a, size_t n_free) {
-        DnsAnswer *n;
-
         assert(a);
 
         if (n_free <= 0)
                 return 0;
 
-        if (*a) {
-                size_t ns;
-                int r;
+        if (!*a) {
+                DnsAnswer *n;
 
-                if ((*a)->n_ref > 1)
-                        return -EBUSY;
-
-                ns = (*a)->n_rrs;
-                assert(ns <= UINT16_MAX); /* Maximum number of RRs we can stick into a DNS packet section */
-
-                if (n_free > UINT16_MAX - ns) /* overflow check */
-                        ns = UINT16_MAX;
-                else
-                        ns += n_free;
-
-                if ((*a)->n_allocated >= ns)
-                        return 0;
-
-                /* Allocate more than we need, but not more than UINT16_MAX */
-                if (ns <= UINT16_MAX/2)
-                        ns *= 2;
-                else
-                        ns = UINT16_MAX;
-
-                /* This must be done before realloc() below. Otherwise, the original DnsAnswer object
-                 * may be broken. */
-                r = set_reserve((*a)->set_items, ns);
-                if (r < 0)
-                        return r;
-
-                n = realloc(*a, offsetof(DnsAnswer, items) + sizeof(DnsAnswerItem) * ns);
-                if (!n)
-                        return -ENOMEM;
-
-                n->n_allocated = ns;
-
-                /* Previously all items are stored in the set, and the enough memory area is allocated
-                 * in the above. So set_put() in the below cannot fail. */
-                set_clear(n->set_items);
-                for (size_t i = 0; i < n->n_rrs; i++)
-                        assert_se(set_put(n->set_items, &n->items[i]) > 0);
-        } else {
                 n = dns_answer_new(n_free);
                 if (!n)
                         return -ENOMEM;
+
+                *a = n;
+                return 0;
         }
 
-        *a = n;
-        return 0;
+        if ((*a)->n_ref > 1)
+                return -EBUSY;
+
+        return dns_answer_reserve_internal(*a, n_free);
 }
 
 int dns_answer_reserve_or_clone(DnsAnswer **a, size_t n_free) {
+        _cleanup_(dns_answer_unrefp) DnsAnswer *n = NULL;
+        size_t ns;
         int r;
 
         assert(a);
 
-        /* Tries to extend the DnsAnswer object. And if that's not possible, since we are not the sole owner,
-         * then allocate a new, appropriately sized one. Either way, after this call the object will only
-         * have a single reference, and has room for at least the specified number of RRs. */
+        r = dns_answer_reserve(a, n_free);
+        if (r != -EBUSY)
+                return r;
 
-        if (*a && (*a)->n_ref > 1) {
-                _cleanup_(dns_answer_unrefp) DnsAnswer *n = NULL;
-                size_t ns;
+        ns = dns_answer_size(*a);
+        assert(ns <= UINT16_MAX); /* Maximum number of RRs we can stick into a DNS packet section */
 
-                ns = (*a)->n_rrs;
-                assert(ns <= UINT16_MAX); /* Maximum number of RRs we can stick into a DNS packet section */
+        ns = saturate_add(ns, n_free, UINT16_MAX);
 
-                if (n_free > UINT16_MAX - ns) /* overflow check */
-                        ns = UINT16_MAX;
-                else if (n_free > 0) { /* Increase size and double the result, just in case — except if the
-                                        * increase is specified as 0, in which case we just allocate the
-                                        * exact amount as before, under the assumption this is just a request
-                                        * to copy the answer. */
-                        ns += n_free;
+        n = dns_answer_new(ns);
+        if (!n)
+                return -ENOMEM;
 
-                        if (ns <= UINT16_MAX/2) /* overflow check */
-                                ns *= 2;
-                        else
-                                ns = UINT16_MAX;
-                }
+        r = dns_answer_add_raw_all(n, *a);
+        if (r < 0)
+                return r;
 
-                n = dns_answer_new(ns);
-                if (!n)
-                        return -ENOMEM;
-
-                r = dns_answer_add_raw_all(n, *a);
-                if (r < 0)
-                        return r;
-
-                dns_answer_unref(*a);
-                assert_se(*a = TAKE_PTR(n));
-        } else if (n_free > 0) {
-                r = dns_answer_reserve(a, n_free);
-                if (r < 0)
-                        return r;
-        }
-
+        DNS_ANSWER_REPLACE(*a, TAKE_PTR(n));
         return 0;
 }
 
@@ -944,6 +796,8 @@
 }
 
 void dns_answer_randomize(DnsAnswer *a) {
+        _cleanup_free_ DnsAnswerItem **items = NULL;
+        DnsAnswerItem **p, *item;
         size_t n;
 
         /* Permutes the answer list randomly (Knuth shuffle) */
@@ -952,6 +806,15 @@
         if (n <= 1)
                 return;
 
+        p = items = new(DnsAnswerItem*, n);
+        if (!items)
+                return (void) log_oom();
+
+        DNS_ANSWER_FOREACH_ITEM(item, a)
+                *p++ = dns_answer_item_ref(item);
+
+        assert((size_t) (p - items) == n);
+
         for (size_t i = 0; i < n; i++) {
                 size_t k;
 
@@ -959,8 +822,12 @@
                 if (k == i)
                         continue;
 
-                SWAP_TWO(a->items[i], a->items[k]);
+                SWAP_TWO(items[i], items[k]);
         }
+
+        ordered_set_clear(a->items);
+        for (size_t i = 0; i < n; i++)
+                assert_se(ordered_set_put(a->items, items[i]) >= 0);
 }
 
 uint32_t dns_answer_min_ttl(DnsAnswer *a) {
diff --git a/src/resolve/resolved-dns-answer.h b/src/resolve/resolved-dns-answer.h
index 3eb573b..93afea3 100644
--- a/src/resolve/resolved-dns-answer.h
+++ b/src/resolve/resolved-dns-answer.h
@@ -5,8 +5,8 @@
 typedef struct DnsAnswerItem DnsAnswerItem;
 
 #include "macro.h"
+#include "ordered-set.h"
 #include "resolved-dns-rr.h"
-#include "set.h"
 
 /* A simple array of resource records. We keep track of the originating ifindex for each RR where that makes
  * sense, so that we can qualify A and AAAA RRs referring to a local link with the right ifindex.
@@ -29,6 +29,7 @@
 } DnsAnswerFlags;
 
 struct DnsAnswerItem {
+        unsigned n_ref;
         DnsResourceRecord *rr;
         DnsResourceRecord *rrsig; /* Optionally, also store RRSIG RR that successfully validates this item */
         int ifindex;
@@ -37,15 +38,21 @@
 
 struct DnsAnswer {
         unsigned n_ref;
-        Set *set_items; /* Used by dns_answer_add() for optimization. */
-        size_t n_rrs, n_allocated;
-        DnsAnswerItem items[0];
+        OrderedSet *items;
 };
 
 DnsAnswer *dns_answer_new(size_t n);
 DnsAnswer *dns_answer_ref(DnsAnswer *a);
 DnsAnswer *dns_answer_unref(DnsAnswer *a);
 
+#define DNS_ANSWER_REPLACE(a, b)                \
+        do {                                    \
+                typeof(a)* _a = &(a);           \
+                typeof(b) _b = (b);             \
+                dns_answer_unref(*_a);          \
+                *_a = _b;                       \
+        } while(0)
+
 int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig);
 int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig);
 int dns_answer_add_soa(DnsAnswer *a, const char *name, uint32_t ttl, int ifindex);
@@ -76,7 +83,7 @@
 int dns_answer_has_dname_for_cname(DnsAnswer *a, DnsResourceRecord *cname);
 
 static inline size_t dns_answer_size(DnsAnswer *a) {
-        return a ? a->n_rrs : 0;
+        return a ? ordered_set_size(a->items) : 0;
 }
 
 static inline bool dns_answer_isempty(DnsAnswer *a) {
@@ -91,50 +98,40 @@
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref);
 
-#define _DNS_ANSWER_FOREACH(q, kk, a)                                   \
-        for (size_t UNIQ_T(i, q) = ({                                   \
-                        (kk) = dns_answer_isempty(a) ? NULL : (a)->items[0].rr; \
-                        0;                                              \
-                });                                                     \
-             UNIQ_T(i, q) < dns_answer_size(a);                         \
-             UNIQ_T(i, q)++,                                            \
-                     (kk) = UNIQ_T(i, q) < dns_answer_size(a) ? (a)->items[UNIQ_T(i, q)].rr : NULL)
+typedef struct DnsAnswerIterator {
+        Iterator iterator;
+        DnsAnswer *answer;
+        DnsAnswerItem *item;
+} DnsAnswerIterator;
 
-#define DNS_ANSWER_FOREACH(kk, a) _DNS_ANSWER_FOREACH(UNIQ, kk, a)
+#define _DNS_ANSWER_FOREACH(kk, a, i)                                   \
+        for (DnsAnswerIterator i = { .iterator = ITERATOR_FIRST, .answer = (a) };  \
+             i.answer &&                                                \
+             ordered_set_iterate(i.answer->items, &i.iterator, (void**) &(i.item)) && \
+             (kk = i.item->rr, true); )
 
-#define _DNS_ANSWER_FOREACH_IFINDEX(q, kk, ifi, a)                      \
-        for (size_t UNIQ_T(i, q) = ({                                   \
-                                (kk) = dns_answer_isempty(a) ? NULL : (a)->items[0].rr; \
-                                (ifi) = dns_answer_isempty(a) ? 0 : (a)->items[0].ifindex; \
-                                0;                                      \
-                        });                                             \
-             UNIQ_T(i, q) < dns_answer_size(a);                         \
-             UNIQ_T(i, q)++,                                            \
-                     (kk) = UNIQ_T(i, q) < dns_answer_size(a) ? (a)->items[UNIQ_T(i, q)].rr : NULL, \
-                     (ifi) = UNIQ_T(i, q) < dns_answer_size(a) ? (a)->items[UNIQ_T(i, q)].ifindex : 0)
+#define DNS_ANSWER_FOREACH(rr, a) _DNS_ANSWER_FOREACH(rr, a, UNIQ_T(i, UNIQ))
 
-#define DNS_ANSWER_FOREACH_IFINDEX(kk, ifindex, a) _DNS_ANSWER_FOREACH_IFINDEX(UNIQ, kk, ifindex, a)
+#define _DNS_ANSWER_FOREACH_IFINDEX(kk, ifi, a, i)                      \
+        for (DnsAnswerIterator i = { .iterator = ITERATOR_FIRST, .answer = (a) };  \
+             i.answer &&                                                \
+             ordered_set_iterate(i.answer->items, &i.iterator, (void**) &(i.item)) && \
+             (kk = i.item->rr, ifi = i.item->ifindex, true); )
 
-#define _DNS_ANSWER_FOREACH_FLAGS(q, kk, fl, a)                         \
-        for (size_t UNIQ_T(i, q) = ({                                   \
-                                (kk) = dns_answer_isempty(a) ? NULL : (a)->items[0].rr; \
-                                (fl) = dns_answer_isempty(a) ? 0 : (a)->items[0].flags; \
-                                0;                                      \
-                        });                                             \
-             UNIQ_T(i, q) < dns_answer_size(a);                         \
-             UNIQ_T(i, q)++,                                            \
-                     (kk) = UNIQ_T(i, q) < dns_answer_size(a) ? (a)->items[UNIQ_T(i, q)].rr : NULL, \
-                     (fl) = UNIQ_T(i, q) < dns_answer_size(a) ? (a)->items[UNIQ_T(i, q)].flags : 0)
+#define DNS_ANSWER_FOREACH_IFINDEX(rr, ifindex, a) _DNS_ANSWER_FOREACH_IFINDEX(rr, ifindex, a, UNIQ_T(i, UNIQ))
 
-#define DNS_ANSWER_FOREACH_FLAGS(kk, flags, a) _DNS_ANSWER_FOREACH_FLAGS(UNIQ, kk, flags, a)
+#define _DNS_ANSWER_FOREACH_FLAGS(kk, fl, a, i)                         \
+        for (DnsAnswerIterator i = { .iterator = ITERATOR_FIRST, .answer = (a) };  \
+             i.answer &&                                                \
+             ordered_set_iterate(i.answer->items, &i.iterator, (void**) &(i.item)) && \
+             (kk = i.item->rr, fl = i.item->flags, true); )
 
-#define _DNS_ANSWER_FOREACH_ITEM(q, item, a)                            \
-        for (size_t UNIQ_T(i, q) = ({                                   \
-                                (item) = dns_answer_isempty(a) ? NULL : (a)->items; \
-                                0;                                      \
-                        });                                             \
-             UNIQ_T(i, q) < dns_answer_size(a);                         \
-             UNIQ_T(i, q)++,                                            \
-                     (item) = (UNIQ_T(i, q) < dns_answer_size(a)) ? (a)->items + UNIQ_T(i, q) : NULL)
+#define DNS_ANSWER_FOREACH_FLAGS(rr, flags, a) _DNS_ANSWER_FOREACH_FLAGS(rr, flags, a, UNIQ_T(i, UNIQ))
 
-#define DNS_ANSWER_FOREACH_ITEM(item, a) _DNS_ANSWER_FOREACH_ITEM(UNIQ, item, a)
+#define _DNS_ANSWER_FOREACH_ITEM(it, a, i)                            \
+        for (DnsAnswerIterator i = { .iterator = ITERATOR_FIRST, .answer = (a) };  \
+             i.answer &&                                                \
+             ordered_set_iterate(i.answer->items, &i.iterator, (void**) &(i.item)) && \
+             (it = i.item, true); )
+
+#define DNS_ANSWER_FOREACH_ITEM(item, a) _DNS_ANSWER_FOREACH_ITEM(item, a, UNIQ_T(i, UNIQ))
diff --git a/src/resolve/resolved-dns-cache.c b/src/resolve/resolved-dns-cache.c
index 2a9a600..987e2b1 100644
--- a/src/resolve/resolved-dns-cache.c
+++ b/src/resolve/resolved-dns-cache.c
@@ -58,7 +58,7 @@
 
 /* Returns true if this is a cache item created as result of an explicit lookup, or created as "side-effect"
  * of another request. "Primary" entries will carry the full answer data (with NSEC, …) that can aso prove
- * wildcard expansion, non-existance and such, while entries that were created as "side-effect" just contain
+ * wildcard expansion, non-existence and such, while entries that were created as "side-effect" just contain
  * immediate RR data for the specified RR key, but nothing else. */
 #define DNS_CACHE_ITEM_IS_PRIMARY(item) (!!(item)->answer)
 
@@ -117,7 +117,7 @@
 }
 
 static bool dns_cache_remove_by_rr(DnsCache *c, DnsResourceRecord *rr) {
-        DnsCacheItem *first, *i;
+        DnsCacheItem *first;
         int r;
 
         first = hashmap_get(c->by_key, rr->key);
@@ -135,7 +135,7 @@
 }
 
 static bool dns_cache_remove_by_key(DnsCache *c, DnsResourceKey *key) {
-        DnsCacheItem *first, *i, *n;
+        DnsCacheItem *first;
 
         assert(c);
         assert(key);
@@ -144,7 +144,7 @@
         if (!first)
                 return false;
 
-        LIST_FOREACH_SAFE(by_key, i, n, first) {
+        LIST_FOREACH(by_key, i, first) {
                 prioq_remove(c->by_expiry, i, &i->prioq_idx);
                 dns_cache_item_free(i);
         }
@@ -214,7 +214,7 @@
                         break;
 
                 if (t <= 0)
-                        t = now(clock_boottime_or_monotonic());
+                        t = now(CLOCK_BOOTTIME);
 
                 if (i->until > t)
                         break;
@@ -301,12 +301,10 @@
 }
 
 static DnsCacheItem* dns_cache_get(DnsCache *c, DnsResourceRecord *rr) {
-        DnsCacheItem *i;
-
         assert(c);
         assert(rr);
 
-        LIST_FOREACH(by_key, i, hashmap_get(c->by_key, rr->key))
+        LIST_FOREACH(by_key, i, (DnsCacheItem*) hashmap_get(c->by_key, rr->key))
                 if (i->rr && dns_resource_record_equal(i->rr, rr) > 0)
                         return i;
 
@@ -380,20 +378,13 @@
 
                 assert_se(hashmap_replace(c->by_key, rr->key, i) >= 0);
 
-        dns_resource_record_ref(rr);
-        dns_resource_record_unref(i->rr);
-        i->rr = rr;
+        DNS_RR_REPLACE(i->rr, dns_resource_record_ref(rr));
 
-        dns_resource_key_unref(i->key);
-        i->key = dns_resource_key_ref(rr->key);
+        DNS_RESOURCE_KEY_REPLACE(i->key, dns_resource_key_ref(rr->key));
 
-        dns_answer_ref(answer);
-        dns_answer_unref(i->answer);
-        i->answer = answer;
+        DNS_ANSWER_REPLACE(i->answer, dns_answer_ref(answer));
 
-        dns_packet_ref(full_packet);
-        dns_packet_unref(i->full_packet);
-        i->full_packet = full_packet;
+        DNS_PACKET_REPLACE(i->full_packet, dns_packet_ref(full_packet));
 
         i->until = calculate_until(rr, min_ttl, UINT32_MAX, timestamp, false);
         i->query_flags = query_flags & CACHEABLE_QUERY_FLAGS;
@@ -410,6 +401,7 @@
 
 static int dns_cache_put_positive(
                 DnsCache *c,
+                DnsProtocol protocol,
                 DnsResourceRecord *rr,
                 DnsAnswer *answer,
                 DnsPacket *full_packet,
@@ -421,7 +413,6 @@
                 int owner_family,
                 const union in_addr_union *owner_address) {
 
-        _cleanup_(dns_cache_item_freep) DnsCacheItem *i = NULL;
         char key_str[DNS_RESOURCE_KEY_STRING_MAX];
         DnsCacheItem *existing;
         uint32_t min_ttl;
@@ -471,6 +462,10 @@
                 return 0;
         }
 
+        /* Do not cache mDNS goodbye packet. */
+        if (protocol == DNS_PROTOCOL_MDNS && rr->ttl <= 1)
+                return 0;
+
         /* Otherwise, add the new RR */
         r = dns_cache_init(c);
         if (r < 0)
@@ -478,7 +473,7 @@
 
         dns_cache_make_space(c, 1);
 
-        i = new(DnsCacheItem, 1);
+        _cleanup_(dns_cache_item_freep) DnsCacheItem *i = new(DnsCacheItem, 1);
         if (!i)
                 return -ENOMEM;
 
@@ -502,24 +497,17 @@
         if (r < 0)
                 return r;
 
-        if (DEBUG_LOGGING) {
-                _cleanup_free_ char *t = NULL;
-                char ifname[IF_NAMESIZE + 1];
+        log_debug("Added positive %s %s%s cache entry for %s "USEC_FMT"s on %s/%s/%s",
+                  FLAGS_SET(i->query_flags, SD_RESOLVED_AUTHENTICATED) ? "authenticated" : "unauthenticated",
+                  FLAGS_SET(i->query_flags, SD_RESOLVED_CONFIDENTIAL) ? "confidential" : "non-confidential",
+                  i->shared_owner ? " shared" : "",
+                  dns_resource_key_to_string(i->key, key_str, sizeof key_str),
+                  (i->until - timestamp) / USEC_PER_SEC,
+                  i->ifindex == 0 ? "*" : FORMAT_IFNAME(i->ifindex),
+                  af_to_name_short(i->owner_family),
+                  IN_ADDR_TO_STRING(i->owner_family, &i->owner_address));
 
-                (void) in_addr_to_string(i->owner_family, &i->owner_address, &t);
-
-                log_debug("Added positive %s %s%s cache entry for %s "USEC_FMT"s on %s/%s/%s",
-                          FLAGS_SET(i->query_flags, SD_RESOLVED_AUTHENTICATED) ? "authenticated" : "unauthenticated",
-                          FLAGS_SET(i->query_flags, SD_RESOLVED_CONFIDENTIAL) ? "confidential" : "non-confidential",
-                          i->shared_owner ? " shared" : "",
-                          dns_resource_key_to_string(i->key, key_str, sizeof key_str),
-                          (i->until - timestamp) / USEC_PER_SEC,
-                          i->ifindex == 0 ? "*" : strna(format_ifname(i->ifindex, ifname)),
-                          af_to_name_short(i->owner_family),
-                          strna(t));
-        }
-
-        i = NULL;
+        TAKE_PTR(i);
         return 0;
 }
 
@@ -682,6 +670,7 @@
 int dns_cache_put(
                 DnsCache *c,
                 DnsCacheMode cache_mode,
+                DnsProtocol protocol,
                 DnsResourceKey *key,
                 int rcode,
                 DnsAnswer *answer,
@@ -738,7 +727,7 @@
         /* Make some space for our new entries */
         dns_cache_make_space(c, cache_keys);
 
-        timestamp = now(clock_boottime_or_monotonic());
+        timestamp = now(CLOCK_BOOTTIME);
 
         /* Second, add in positive entries for all contained RRs */
         DNS_ANSWER_FOREACH_ITEM(item, answer) {
@@ -775,6 +764,7 @@
 
                 r = dns_cache_put_positive(
                                 c,
+                                protocol,
                                 item->rr,
                                 primary ? answer : NULL,
                                 primary ? full_packet : NULL,
@@ -988,7 +978,7 @@
         unsigned n = 0;
         int r;
         bool nxdomain = false;
-        DnsCacheItem *j, *first, *nsec = NULL;
+        DnsCacheItem *first, *nsec = NULL;
         bool have_authenticated = false, have_non_authenticated = false, have_confidential = false, have_non_confidential = false;
         usec_t current = 0;
         int found_rcode = -1;
@@ -1019,7 +1009,7 @@
         if (FLAGS_SET(query_flags, SD_RESOLVED_CLAMP_TTL)) {
                 /* 'current' is always passed to answer_add_clamp_ttl(), but is only used conditionally.
                  * We'll do the same assert there to make sure that it was initialized properly. */
-                current = now(clock_boottime_or_monotonic());
+                current = now(CLOCK_BOOTTIME);
                 assert(current > 0);
         }
 
@@ -1116,7 +1106,7 @@
 
         if (found_rcode >= 0) {
                 log_debug("RCODE %s cache hit for %s",
-                          dns_rcode_to_string(found_rcode),
+                          FORMAT_DNS_RCODE(found_rcode),
                           dns_resource_key_to_string(key, key_str, sizeof(key_str)));
 
                 if (ret_rcode)
@@ -1224,7 +1214,7 @@
 }
 
 int dns_cache_check_conflicts(DnsCache *cache, DnsResourceRecord *rr, int owner_family, const union in_addr_union *owner_address) {
-        DnsCacheItem *i, *first;
+        DnsCacheItem *first;
         bool same_owner = true;
 
         assert(cache);
@@ -1259,17 +1249,16 @@
         return 1;
 }
 
-int dns_cache_export_shared_to_packet(DnsCache *cache, DnsPacket *p) {
+int dns_cache_export_shared_to_packet(DnsCache *cache, DnsPacket *p, usec_t ts, unsigned max_rr) {
         unsigned ancount = 0;
         DnsCacheItem *i;
         int r;
 
         assert(cache);
         assert(p);
+        assert(p->protocol == DNS_PROTOCOL_MDNS);
 
-        HASHMAP_FOREACH(i, cache->by_key) {
-                DnsCacheItem *j;
-
+        HASHMAP_FOREACH(i, cache->by_key)
                 LIST_FOREACH(by_key, j, i) {
                         if (!j->rr)
                                 continue;
@@ -1277,11 +1266,19 @@
                         if (!j->shared_owner)
                                 continue;
 
+                        /* RFC6762 7.1: Don't append records with less than half the TTL remaining
+                         * as known answers. */
+                        if (usec_sub_unsigned(j->until, ts) < j->rr->ttl * USEC_PER_SEC / 2)
+                                continue;
+
                         r = dns_packet_append_rr(p, j->rr, 0, NULL, NULL);
-                        if (r == -EMSGSIZE && p->protocol == DNS_PROTOCOL_MDNS) {
-                                /* For mDNS, if we're unable to stuff all known answers into the given packet,
-                                 * allocate a new one, push the RR into that one and link it to the current one.
-                                 */
+                        if (r == -EMSGSIZE) {
+                                if (max_rr == 0)
+                                        /* If max_rr == 0, do not allocate more packets. */
+                                        goto finalize;
+
+                                /* If we're unable to stuff all known answers into the given packet, allocate
+                                 * a new one, push the RR into that one and link it to the current one. */
 
                                 DNS_PACKET_HEADER(p)->ancount = htobe16(ancount);
                                 ancount = 0;
@@ -1299,9 +1296,21 @@
                                 return r;
 
                         ancount++;
-                }
-        }
+                        if (max_rr > 0 && ancount >= max_rr) {
+                                DNS_PACKET_HEADER(p)->ancount = htobe16(ancount);
+                                ancount = 0;
 
+                                r = dns_packet_new_query(&p->more, p->protocol, 0, true);
+                                if (r < 0)
+                                        return r;
+
+                                p = p->more;
+
+                                max_rr = UINT_MAX;
+                        }
+                }
+
+finalize:
         DNS_PACKET_HEADER(p)->ancount = htobe16(ancount);
 
         return 0;
@@ -1316,9 +1325,7 @@
         if (!f)
                 f = stdout;
 
-        HASHMAP_FOREACH(i, cache->by_key) {
-                DnsCacheItem *j;
-
+        HASHMAP_FOREACH(i, cache->by_key)
                 LIST_FOREACH(by_key, j, i) {
 
                         fputc('\t', f);
@@ -1342,7 +1349,6 @@
                                 fputc('\n', f);
                         }
                 }
-        }
 }
 
 bool dns_cache_is_empty(DnsCache *cache) {
diff --git a/src/resolve/resolved-dns-cache.h b/src/resolve/resolved-dns-cache.h
index 621b52f..42e744a 100644
--- a/src/resolve/resolved-dns-cache.h
+++ b/src/resolve/resolved-dns-cache.h
@@ -26,6 +26,7 @@
 int dns_cache_put(
                 DnsCache *c,
                 DnsCacheMode cache_mode,
+                DnsProtocol protocol,
                 DnsResourceKey *key,
                 int rcode,
                 DnsAnswer *answer,
@@ -53,4 +54,4 @@
 
 unsigned dns_cache_size(DnsCache *cache);
 
-int dns_cache_export_shared_to_packet(DnsCache *cache, DnsPacket *p);
+int dns_cache_export_shared_to_packet(DnsCache *cache, DnsPacket *p, usec_t ts, unsigned max_rr);
diff --git a/src/resolve/resolved-dns-dnssec.c b/src/resolve/resolved-dns-dnssec.c
index c187ac6..8edb6e7 100644
--- a/src/resolve/resolved-dns-dnssec.c
+++ b/src/resolve/resolved-dns-dnssec.c
@@ -7,11 +7,20 @@
 #include "gcrypt-util.h"
 #include "hexdecoct.h"
 #include "memory-util.h"
+#include "openssl-util.h"
 #include "resolved-dns-dnssec.h"
 #include "resolved-dns-packet.h"
 #include "sort-util.h"
 #include "string-table.h"
 
+#if PREFER_OPENSSL
+#  pragma GCC diagnostic push
+#    pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(RSA*, RSA_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EC_KEY*, EC_KEY_free, NULL);
+#  pragma GCC diagnostic pop
+#endif
+
 #define VERIFY_RRS_MAX 256
 #define MAX_KEY_SIZE (32*1024)
 
@@ -58,7 +67,7 @@
         return sum & UINT32_C(0xFFFF);
 }
 
-#if HAVE_GCRYPT
+#if HAVE_OPENSSL_OR_GCRYPT
 
 static int rr_compare(DnsResourceRecord * const *a, DnsResourceRecord * const *b) {
         const DnsResourceRecord *x = *a, *y = *b;
@@ -82,16 +91,71 @@
 }
 
 static int dnssec_rsa_verify_raw(
-                const char *hash_algorithm,
+                hash_algorithm_t hash_algorithm,
                 const void *signature, size_t signature_size,
                 const void *data, size_t data_size,
                 const void *exponent, size_t exponent_size,
                 const void *modulus, size_t modulus_size) {
+        int r;
 
+#if PREFER_OPENSSL
+#  pragma GCC diagnostic push
+#    pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+        _cleanup_(RSA_freep) RSA *rpubkey = NULL;
+        _cleanup_(EVP_PKEY_freep) EVP_PKEY *epubkey = NULL;
+        _cleanup_(EVP_PKEY_CTX_freep) EVP_PKEY_CTX *ctx = NULL;
+        _cleanup_(BN_freep) BIGNUM *e = NULL, *m = NULL;
+
+        assert(hash_algorithm);
+
+        e = BN_bin2bn(exponent, exponent_size, NULL);
+        if (!e)
+                return -EIO;
+
+        m = BN_bin2bn(modulus, modulus_size, NULL);
+        if (!m)
+                return -EIO;
+
+        rpubkey = RSA_new();
+        if (!rpubkey)
+                return -ENOMEM;
+
+        if (RSA_set0_key(rpubkey, m, e, NULL) <= 0)
+                return -EIO;
+        e = m = NULL;
+
+        assert((size_t) RSA_size(rpubkey) == signature_size);
+
+        epubkey = EVP_PKEY_new();
+        if (!epubkey)
+                return -ENOMEM;
+
+        if (EVP_PKEY_assign_RSA(epubkey, RSAPublicKey_dup(rpubkey)) <= 0)
+                return -EIO;
+
+        ctx = EVP_PKEY_CTX_new(epubkey, NULL);
+        if (!ctx)
+                return -ENOMEM;
+
+        if (EVP_PKEY_verify_init(ctx) <= 0)
+                return -EIO;
+
+        if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
+                return -EIO;
+
+        if (EVP_PKEY_CTX_set_signature_md(ctx, hash_algorithm) <= 0)
+                return -EIO;
+
+        r = EVP_PKEY_verify(ctx, signature, signature_size, data, data_size);
+        if (r < 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Signature verification failed: 0x%lx", ERR_get_error());
+
+#  pragma GCC diagnostic pop
+#else
         gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL;
         gcry_mpi_t n = NULL, e = NULL, s = NULL;
         gcry_error_t ge;
-        int r;
 
         assert(hash_algorithm);
 
@@ -147,10 +211,10 @@
         ge = gcry_pk_verify(signature_sexp, data_sexp, public_key_sexp);
         if (gpg_err_code(ge) == GPG_ERR_BAD_SIGNATURE)
                 r = 0;
-        else if (ge != 0) {
-                log_debug("RSA signature check failed: %s", gpg_strerror(ge));
-                r = -EIO;
-        } else
+        else if (ge != 0)
+                r = log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                    "RSA signature check failed: %s", gpg_strerror(ge));
+        else
                 r = 1;
 
 finish:
@@ -167,12 +231,12 @@
                 gcry_sexp_release(signature_sexp);
         if (data_sexp)
                 gcry_sexp_release(data_sexp);
-
+#endif
         return r;
 }
 
 static int dnssec_rsa_verify(
-                const char *hash_algorithm,
+                hash_algorithm_t hash_algorithm,
                 const void *hash, size_t hash_size,
                 DnsResourceRecord *rrsig,
                 DnsResourceRecord *dnskey) {
@@ -228,17 +292,82 @@
 }
 
 static int dnssec_ecdsa_verify_raw(
-                const char *hash_algorithm,
-                const char *curve,
+                hash_algorithm_t hash_algorithm,
+                elliptic_curve_t curve,
                 const void *signature_r, size_t signature_r_size,
                 const void *signature_s, size_t signature_s_size,
                 const void *data, size_t data_size,
                 const void *key, size_t key_size) {
+        int k;
 
+#if PREFER_OPENSSL
+#  pragma GCC diagnostic push
+#    pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+        _cleanup_(EC_GROUP_freep) EC_GROUP *ec_group = NULL;
+        _cleanup_(EC_POINT_freep) EC_POINT *p = NULL;
+        _cleanup_(EC_KEY_freep) EC_KEY *eckey = NULL;
+        _cleanup_(BN_CTX_freep) BN_CTX *bctx = NULL;
+        _cleanup_(BN_freep) BIGNUM *r = NULL, *s = NULL;
+        _cleanup_(ECDSA_SIG_freep) ECDSA_SIG *sig = NULL;
+
+        assert(hash_algorithm);
+
+        ec_group = EC_GROUP_new_by_curve_name(curve);
+        if (!ec_group)
+                return -ENOMEM;
+
+        p = EC_POINT_new(ec_group);
+        if (!p)
+                return -ENOMEM;
+
+        bctx = BN_CTX_new();
+        if (!bctx)
+                return -ENOMEM;
+
+        if (EC_POINT_oct2point(ec_group, p, key, key_size, bctx) <= 0)
+                return -EIO;
+
+        eckey = EC_KEY_new();
+        if (!eckey)
+                return -ENOMEM;
+
+        if (EC_KEY_set_group(eckey, ec_group) <= 0)
+                return -EIO;
+
+        if (EC_KEY_set_public_key(eckey, p) <= 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                       "EC_POINT_bn2point failed: 0x%lx", ERR_get_error());
+
+        assert(EC_KEY_check_key(eckey) == 1);
+
+        r = BN_bin2bn(signature_r, signature_r_size, NULL);
+        if (!r)
+                return -EIO;
+
+        s = BN_bin2bn(signature_s, signature_s_size, NULL);
+        if (!s)
+                return -EIO;
+
+        /* TODO: We should eventually use the EVP API once it supports ECDSA signature verification */
+
+        sig = ECDSA_SIG_new();
+        if (!sig)
+                return -ENOMEM;
+
+        if (ECDSA_SIG_set0(sig, r, s) <= 0)
+                return -EIO;
+        r = s = NULL;
+
+        k = ECDSA_do_verify(data, data_size, sig, eckey);
+        if (k < 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Signature verification failed: 0x%lx", ERR_get_error());
+
+#  pragma GCC diagnostic pop
+#else
         gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL;
         gcry_mpi_t q = NULL, r = NULL, s = NULL;
         gcry_error_t ge;
-        int k;
 
         assert(hash_algorithm);
 
@@ -313,18 +442,18 @@
                 gcry_sexp_release(signature_sexp);
         if (data_sexp)
                 gcry_sexp_release(data_sexp);
-
+#endif
         return k;
 }
 
 static int dnssec_ecdsa_verify(
-                const char *hash_algorithm,
+                hash_algorithm_t hash_algorithm,
                 int algorithm,
                 const void *hash, size_t hash_size,
                 DnsResourceRecord *rrsig,
                 DnsResourceRecord *dnskey) {
 
-        const char *curve;
+        elliptic_curve_t curve;
         size_t key_size;
         uint8_t *q;
 
@@ -334,11 +463,11 @@
         assert(dnskey);
 
         if (algorithm == DNSSEC_ALGORITHM_ECDSAP256SHA256) {
+                curve = OPENSSL_OR_GCRYPT(NID_X9_62_prime256v1, "NIST P-256");  /* NIST P-256 */
                 key_size = 32;
-                curve = "NIST P-256";
         } else if (algorithm == DNSSEC_ALGORITHM_ECDSAP384SHA384) {
+                curve = OPENSSL_OR_GCRYPT(NID_secp384r1, "NIST P-384");         /* NIST P-384 */
                 key_size = 48;
-                curve = "NIST P-384";
         } else
                 return -EOPNOTSUPP;
 
@@ -361,25 +490,66 @@
                         q, key_size*2+1);
 }
 
-#if GCRYPT_VERSION_NUMBER >= 0x010600
 static int dnssec_eddsa_verify_raw(
-                const char *curve,
-                const void *signature_r, size_t signature_r_size,
-                const void *signature_s, size_t signature_s_size,
-                const void *data, size_t data_size,
-                const void *key, size_t key_size) {
+                elliptic_curve_t curve,
+                const uint8_t *signature, size_t signature_size,
+                const uint8_t *data, size_t data_size,
+                const uint8_t *key, size_t key_size) {
 
+#if PREFER_OPENSSL
+        _cleanup_(EVP_PKEY_freep) EVP_PKEY *evkey = NULL;
+        _cleanup_(EVP_PKEY_CTX_freep) EVP_PKEY_CTX *pctx = NULL;
+        _cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX *ctx = NULL;
+        int r;
+
+        assert(curve == NID_ED25519);
+        assert(signature_size == key_size * 2);
+
+        uint8_t *q = newa(uint8_t, signature_size + 1);
+        q[0] = 0x04; /* Prepend 0x04 to indicate an uncompressed key */
+        memcpy(q+1, signature, signature_size);
+
+        evkey = EVP_PKEY_new_raw_public_key(EVP_PKEY_ED25519, NULL, key, key_size);
+        if (!evkey)
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                       "EVP_PKEY_new_raw_public_key failed: 0x%lx", ERR_get_error());
+
+        pctx = EVP_PKEY_CTX_new(evkey, NULL);
+        if (!pctx)
+                return -ENOMEM;
+
+        ctx = EVP_MD_CTX_new();
+        if (!ctx)
+                return -ENOMEM;
+
+        /* This prevents EVP_DigestVerifyInit from managing pctx and complicating our free logic. */
+        EVP_MD_CTX_set_pkey_ctx(ctx, pctx);
+
+        /* One might be tempted to use EVP_PKEY_verify_init, but see Ed25519(7ssl). */
+        if (EVP_DigestVerifyInit(ctx, &pctx, NULL, NULL, evkey) <= 0)
+                return -EIO;
+
+        r = EVP_DigestVerify(ctx, signature, signature_size, data, data_size);
+        if (r < 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Signature verification failed: 0x%lx", ERR_get_error());
+
+        return r;
+
+#elif GCRYPT_VERSION_NUMBER >= 0x010600
         gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL;
         gcry_error_t ge;
         int k;
 
+        assert(signature_size == key_size * 2);
+
         ge = gcry_sexp_build(&signature_sexp,
                              NULL,
                              "(sig-val (eddsa (r %b) (s %b)))",
-                             (int) signature_r_size,
-                             signature_r,
-                             (int) signature_s_size,
-                             signature_s);
+                             (int) key_size,
+                             signature,
+                             (int) key_size,
+                             signature + key_size);
         if (ge != 0) {
                 k = -EIO;
                 goto finish;
@@ -409,10 +579,10 @@
         ge = gcry_pk_verify(signature_sexp, data_sexp, public_key_sexp);
         if (gpg_err_code(ge) == GPG_ERR_BAD_SIGNATURE)
                 k = 0;
-        else if (ge != 0) {
-                log_debug("EdDSA signature check failed: %s", gpg_strerror(ge));
-                k = -EIO;
-        } else
+        else if (ge != 0)
+                k = log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                    "EdDSA signature check failed: %s", gpg_strerror(ge));
+        else
                 k = 1;
 finish:
         if (public_key_sexp)
@@ -423,6 +593,9 @@
                 gcry_sexp_release(data_sexp);
 
         return k;
+#else
+        return -EOPNOTSUPP;
+#endif
 }
 
 static int dnssec_eddsa_verify(
@@ -430,11 +603,11 @@
                 const void *data, size_t data_size,
                 DnsResourceRecord *rrsig,
                 DnsResourceRecord *dnskey) {
-        const char *curve;
+        elliptic_curve_t curve;
         size_t key_size;
 
         if (algorithm == DNSSEC_ALGORITHM_ED25519) {
-                curve = "Ed25519";
+                curve = OPENSSL_OR_GCRYPT(NID_ED25519, "Ed25519");
                 key_size = 32;
         } else
                 return -EOPNOTSUPP;
@@ -447,20 +620,28 @@
 
         return dnssec_eddsa_verify_raw(
                         curve,
-                        rrsig->rrsig.signature, key_size,
-                        (uint8_t*) rrsig->rrsig.signature + key_size, key_size,
+                        rrsig->rrsig.signature, rrsig->rrsig.signature_size,
                         data, data_size,
                         dnskey->dnskey.key, key_size);
 }
-#endif
 
-static void md_add_uint8(gcry_md_hd_t md, uint8_t v) {
-        gcry_md_write(md, &v, sizeof(v));
+static int md_add_uint8(hash_context_t ctx, uint8_t v) {
+#if PREFER_OPENSSL
+        return EVP_DigestUpdate(ctx, &v, sizeof(v));
+#else
+        gcry_md_write(ctx, &v, sizeof(v));
+        return 0;
+#endif
 }
 
-static void md_add_uint16(gcry_md_hd_t md, uint16_t v) {
+static int md_add_uint16(hash_context_t ctx, uint16_t v) {
         v = htobe16(v);
-        gcry_md_write(md, &v, sizeof(v));
+#if PREFER_OPENSSL
+        return EVP_DigestUpdate(ctx, &v, sizeof(v));
+#else
+        gcry_md_write(ctx, &v, sizeof(v));
+        return 0;
+#endif
 }
 
 static void fwrite_uint8(FILE *fp, uint8_t v) {
@@ -565,44 +746,39 @@
         return realtime < inception || realtime > expiration;
 }
 
-static int algorithm_to_gcrypt_md(uint8_t algorithm) {
+static hash_md_t algorithm_to_implementation_id(uint8_t algorithm) {
 
-        /* Translates a DNSSEC signature algorithm into a gcrypt
-         * digest identifier.
+        /* Translates a DNSSEC signature algorithm into an openssl/gcrypt digest identifier.
          *
-         * Note that we implement all algorithms listed as "Must
-         * implement" and "Recommended to Implement" in RFC6944. We
-         * don't implement any algorithms that are listed as
-         * "Optional" or "Must Not Implement". Specifically, we do not
-         * implement RSAMD5, DSASHA1, DH, DSA-NSEC3-SHA1, and
-         * GOST-ECC. */
+         * Note that we implement all algorithms listed as "Must implement" and "Recommended to Implement" in
+         * RFC6944. We don't implement any algorithms that are listed as "Optional" or "Must Not Implement".
+         * Specifically, we do not implement RSAMD5, DSASHA1, DH, DSA-NSEC3-SHA1, and GOST-ECC. */
 
         switch (algorithm) {
 
         case DNSSEC_ALGORITHM_RSASHA1:
         case DNSSEC_ALGORITHM_RSASHA1_NSEC3_SHA1:
-                return GCRY_MD_SHA1;
+                return OPENSSL_OR_GCRYPT(EVP_sha1(), GCRY_MD_SHA1);
 
         case DNSSEC_ALGORITHM_RSASHA256:
         case DNSSEC_ALGORITHM_ECDSAP256SHA256:
-                return GCRY_MD_SHA256;
+                return OPENSSL_OR_GCRYPT(EVP_sha256(), GCRY_MD_SHA256);
 
         case DNSSEC_ALGORITHM_ECDSAP384SHA384:
-                return GCRY_MD_SHA384;
+                return OPENSSL_OR_GCRYPT(EVP_sha384(), GCRY_MD_SHA384);
 
         case DNSSEC_ALGORITHM_RSASHA512:
-                return GCRY_MD_SHA512;
+                return OPENSSL_OR_GCRYPT(EVP_sha512(), GCRY_MD_SHA512);
 
         default:
-                return -EOPNOTSUPP;
+                return OPENSSL_OR_GCRYPT(NULL, -EOPNOTSUPP);
         }
 }
 
 static void dnssec_fix_rrset_ttl(
                 DnsResourceRecord *list[],
                 unsigned n,
-                DnsResourceRecord *rrsig,
-                usec_t realtime) {
+                DnsResourceRecord *rrsig) {
 
         assert(list);
         assert(n > 0);
@@ -625,6 +801,183 @@
         rrsig->expiry = rrsig->rrsig.expiration * USEC_PER_SEC;
 }
 
+static int dnssec_rrset_serialize_sig(
+                DnsResourceRecord *rrsig,
+                const char *source,
+                DnsResourceRecord **list,
+                size_t list_len,
+                bool wildcard,
+                char **ret_sig_data,
+                size_t *ret_sig_size) {
+
+        _cleanup_free_ char *sig_data = NULL;
+        size_t sig_size = 0;
+        _cleanup_fclose_ FILE *f = NULL;
+        uint8_t wire_format_name[DNS_WIRE_FORMAT_HOSTNAME_MAX];
+        DnsResourceRecord *rr;
+        int r;
+
+        assert(rrsig);
+        assert(source);
+        assert(list || list_len == 0);
+        assert(ret_sig_data);
+        assert(ret_sig_size);
+
+        f = open_memstream_unlocked(&sig_data, &sig_size);
+        if (!f)
+                return -ENOMEM;
+
+        fwrite_uint16(f, rrsig->rrsig.type_covered);
+        fwrite_uint8(f, rrsig->rrsig.algorithm);
+        fwrite_uint8(f, rrsig->rrsig.labels);
+        fwrite_uint32(f, rrsig->rrsig.original_ttl);
+        fwrite_uint32(f, rrsig->rrsig.expiration);
+        fwrite_uint32(f, rrsig->rrsig.inception);
+        fwrite_uint16(f, rrsig->rrsig.key_tag);
+
+        r = dns_name_to_wire_format(rrsig->rrsig.signer, wire_format_name, sizeof(wire_format_name), true);
+        if (r < 0)
+                return r;
+        fwrite(wire_format_name, 1, r, f);
+
+        /* Convert the source of synthesis into wire format */
+        r = dns_name_to_wire_format(source, wire_format_name, sizeof(wire_format_name), true);
+        if (r < 0)
+                return r;
+
+        for (size_t k = 0; k < list_len; k++) {
+                size_t l;
+
+                rr = list[k];
+
+                /* Hash the source of synthesis. If this is a wildcard, then prefix it with the *. label */
+                if (wildcard)
+                        fwrite((uint8_t[]) { 1, '*'}, sizeof(uint8_t), 2, f);
+                fwrite(wire_format_name, 1, r, f);
+
+                fwrite_uint16(f, rr->key->type);
+                fwrite_uint16(f, rr->key->class);
+                fwrite_uint32(f, rrsig->rrsig.original_ttl);
+
+                l = DNS_RESOURCE_RECORD_RDATA_SIZE(rr);
+                assert(l <= 0xFFFF);
+
+                fwrite_uint16(f, (uint16_t) l);
+                fwrite(DNS_RESOURCE_RECORD_RDATA(rr), 1, l, f);
+        }
+
+        r = fflush_and_check(f);
+        f = safe_fclose(f);  /* sig_data may be reallocated when f is closed. */
+        if (r < 0)
+                return r;
+
+        *ret_sig_data = TAKE_PTR(sig_data);
+        *ret_sig_size = sig_size;
+        return 0;
+}
+
+static int dnssec_rrset_verify_sig(
+                DnsResourceRecord *rrsig,
+                DnsResourceRecord *dnskey,
+                const char *sig_data,
+                size_t sig_size) {
+
+        assert(rrsig);
+        assert(dnskey);
+        assert(sig_data);
+        assert(sig_size > 0);
+
+        hash_md_t md_algorithm;
+
+#if PREFER_OPENSSL
+        uint8_t hash[EVP_MAX_MD_SIZE];
+        unsigned hash_size;
+#else
+        _cleanup_(gcry_md_closep) gcry_md_hd_t md = NULL;
+        void *hash;
+        size_t hash_size;
+
+        initialize_libgcrypt(false);
+#endif
+
+        switch (rrsig->rrsig.algorithm) {
+        case DNSSEC_ALGORITHM_ED25519:
+#if PREFER_OPENSSL || GCRYPT_VERSION_NUMBER >= 0x010600
+                return dnssec_eddsa_verify(
+                                rrsig->rrsig.algorithm,
+                                sig_data, sig_size,
+                                rrsig,
+                                dnskey);
+#endif
+        case DNSSEC_ALGORITHM_ED448:
+                return -EOPNOTSUPP;
+        default:
+                /* OK, the RRs are now in canonical order. Let's calculate the digest */
+                md_algorithm = algorithm_to_implementation_id(rrsig->rrsig.algorithm);
+#if PREFER_OPENSSL
+                if (!md_algorithm)
+                        return -EOPNOTSUPP;
+
+                _cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX *ctx = EVP_MD_CTX_new();
+                if (!ctx)
+                        return -ENOMEM;
+
+                if (EVP_DigestInit_ex(ctx, md_algorithm, NULL) <= 0)
+                        return -EIO;
+
+                if (EVP_DigestUpdate(ctx, sig_data, sig_size) <= 0)
+                        return -EIO;
+
+                if (EVP_DigestFinal_ex(ctx, hash, &hash_size) <= 0)
+                        return -EIO;
+
+                assert(hash_size > 0);
+
+#else
+                if (md_algorithm < 0)
+                        return md_algorithm;
+
+                gcry_error_t err = gcry_md_open(&md, md_algorithm, 0);
+                if (gcry_err_code(err) != GPG_ERR_NO_ERROR || !md)
+                        return -EIO;
+
+                hash_size = gcry_md_get_algo_dlen(md_algorithm);
+                assert(hash_size > 0);
+
+                gcry_md_write(md, sig_data, sig_size);
+
+                hash = gcry_md_read(md, 0);
+                if (!hash)
+                        return -EIO;
+#endif
+        }
+
+        switch (rrsig->rrsig.algorithm) {
+
+        case DNSSEC_ALGORITHM_RSASHA1:
+        case DNSSEC_ALGORITHM_RSASHA1_NSEC3_SHA1:
+        case DNSSEC_ALGORITHM_RSASHA256:
+        case DNSSEC_ALGORITHM_RSASHA512:
+                return dnssec_rsa_verify(
+                                OPENSSL_OR_GCRYPT(md_algorithm, gcry_md_algo_name(md_algorithm)),
+                                hash, hash_size,
+                                rrsig,
+                                dnskey);
+
+        case DNSSEC_ALGORITHM_ECDSAP256SHA256:
+        case DNSSEC_ALGORITHM_ECDSAP384SHA384:
+                return dnssec_ecdsa_verify(
+                                OPENSSL_OR_GCRYPT(md_algorithm, gcry_md_algo_name(md_algorithm)),
+                                rrsig->rrsig.algorithm,
+                                hash, hash_size,
+                                rrsig,
+                                dnskey);
+
+        default:
+                assert_not_reached();
+        }
+}
+
 int dnssec_verify_rrset(
                 DnsAnswer *a,
                 const DnsResourceKey *key,
@@ -633,18 +986,13 @@
                 usec_t realtime,
                 DnssecResult *result) {
 
-        uint8_t wire_format_name[DNS_WIRE_FORMAT_HOSTNAME_MAX];
         DnsResourceRecord **list, *rr;
         const char *source, *name;
-        _cleanup_(gcry_md_closep) gcry_md_hd_t md = NULL;
-        int r, md_algorithm;
-        size_t n = 0;
-        size_t sig_size = 0;
         _cleanup_free_ char *sig_data = NULL;
-        _cleanup_fclose_ FILE *f = NULL;
-        size_t hash_size;
-        void *hash;
+        size_t sig_size = 0; /* avoid false maybe-uninitialized warning */
+        size_t n = 0;
         bool wildcard;
+        int r;
 
         assert(key);
         assert(rrsig);
@@ -746,130 +1094,22 @@
         /* Bring the RRs into canonical order */
         typesafe_qsort(list, n, rr_compare);
 
-        f = open_memstream_unlocked(&sig_data, &sig_size);
-        if (!f)
-                return -ENOMEM;
-
-        fwrite_uint16(f, rrsig->rrsig.type_covered);
-        fwrite_uint8(f, rrsig->rrsig.algorithm);
-        fwrite_uint8(f, rrsig->rrsig.labels);
-        fwrite_uint32(f, rrsig->rrsig.original_ttl);
-        fwrite_uint32(f, rrsig->rrsig.expiration);
-        fwrite_uint32(f, rrsig->rrsig.inception);
-        fwrite_uint16(f, rrsig->rrsig.key_tag);
-
-        r = dns_name_to_wire_format(rrsig->rrsig.signer, wire_format_name, sizeof(wire_format_name), true);
-        if (r < 0)
-                return r;
-        fwrite(wire_format_name, 1, r, f);
-
-        /* Convert the source of synthesis into wire format */
-        r = dns_name_to_wire_format(source, wire_format_name, sizeof(wire_format_name), true);
+        r = dnssec_rrset_serialize_sig(rrsig, source, list, n, wildcard,
+                                       &sig_data, &sig_size);
         if (r < 0)
                 return r;
 
-        for (size_t k = 0; k < n; k++) {
-                size_t l;
-
-                rr = list[k];
-
-                /* Hash the source of synthesis. If this is a wildcard, then prefix it with the *. label */
-                if (wildcard)
-                        fwrite((uint8_t[]) { 1, '*'}, sizeof(uint8_t), 2, f);
-                fwrite(wire_format_name, 1, r, f);
-
-                fwrite_uint16(f, rr->key->type);
-                fwrite_uint16(f, rr->key->class);
-                fwrite_uint32(f, rrsig->rrsig.original_ttl);
-
-                l = DNS_RESOURCE_RECORD_RDATA_SIZE(rr);
-                assert(l <= 0xFFFF);
-
-                fwrite_uint16(f, (uint16_t) l);
-                fwrite(DNS_RESOURCE_RECORD_RDATA(rr), 1, l, f);
-        }
-
-        r = fflush_and_check(f);
-        if (r < 0)
-                return r;
-
-        initialize_libgcrypt(false);
-
-        switch (rrsig->rrsig.algorithm) {
-#if GCRYPT_VERSION_NUMBER >= 0x010600
-        case DNSSEC_ALGORITHM_ED25519:
-                break;
-#else
-        case DNSSEC_ALGORITHM_ED25519:
-#endif
-        case DNSSEC_ALGORITHM_ED448:
+        r = dnssec_rrset_verify_sig(rrsig, dnskey, sig_data, sig_size);
+        if (r == -EOPNOTSUPP) {
                 *result = DNSSEC_UNSUPPORTED_ALGORITHM;
                 return 0;
-        default: {
-                gcry_error_t err;
-
-                /* OK, the RRs are now in canonical order. Let's calculate the digest */
-                md_algorithm = algorithm_to_gcrypt_md(rrsig->rrsig.algorithm);
-                if (md_algorithm == -EOPNOTSUPP) {
-                        *result = DNSSEC_UNSUPPORTED_ALGORITHM;
-                        return 0;
-                }
-                if (md_algorithm < 0)
-                        return md_algorithm;
-
-                err = gcry_md_open(&md, md_algorithm, 0);
-                if (gcry_err_code(err) != GPG_ERR_NO_ERROR || !md)
-                        return -EIO;
-
-                hash_size = gcry_md_get_algo_dlen(md_algorithm);
-                assert(hash_size > 0);
-
-                gcry_md_write(md, sig_data, sig_size);
-
-                hash = gcry_md_read(md, 0);
-                if (!hash)
-                        return -EIO;
-        }
-        }
-
-        switch (rrsig->rrsig.algorithm) {
-
-        case DNSSEC_ALGORITHM_RSASHA1:
-        case DNSSEC_ALGORITHM_RSASHA1_NSEC3_SHA1:
-        case DNSSEC_ALGORITHM_RSASHA256:
-        case DNSSEC_ALGORITHM_RSASHA512:
-                r = dnssec_rsa_verify(
-                                gcry_md_algo_name(md_algorithm),
-                                hash, hash_size,
-                                rrsig,
-                                dnskey);
-                break;
-
-        case DNSSEC_ALGORITHM_ECDSAP256SHA256:
-        case DNSSEC_ALGORITHM_ECDSAP384SHA384:
-                r = dnssec_ecdsa_verify(
-                                gcry_md_algo_name(md_algorithm),
-                                rrsig->rrsig.algorithm,
-                                hash, hash_size,
-                                rrsig,
-                                dnskey);
-                break;
-#if GCRYPT_VERSION_NUMBER >= 0x010600
-        case DNSSEC_ALGORITHM_ED25519:
-                r = dnssec_eddsa_verify(
-                                rrsig->rrsig.algorithm,
-                                sig_data, sig_size,
-                                rrsig,
-                                dnskey);
-                break;
-#endif
         }
         if (r < 0)
                 return r;
 
         /* Now, fix the ttl, expiry, and remember the synthesizing source and the signer */
         if (r > 0)
-                dnssec_fix_rrset_ttl(list, n, rrsig, realtime);
+                dnssec_fix_rrset_ttl(list, n, rrsig);
 
         if (r == 0)
                 *result = DNSSEC_INVALID;
@@ -944,7 +1184,7 @@
 
         /* Verifies all RRs from "a" that match the key "key" against DNSKEYs in "validated_dnskeys" */
 
-        if (!a || a->n_rrs <= 0)
+        if (dns_answer_isempty(a))
                 return -ENODATA;
 
         /* Iterate through each RRSIG RR. */
@@ -1028,7 +1268,7 @@
                                 continue;
 
                         default:
-                                assert_not_reached("Unexpected DNSSEC validation result");
+                                assert_not_reached();
                         }
                 }
         }
@@ -1067,33 +1307,29 @@
         return 0;
 }
 
-static int digest_to_gcrypt_md(uint8_t algorithm) {
+static hash_md_t digest_to_hash_md(uint8_t algorithm) {
 
-        /* Translates a DNSSEC digest algorithm into a gcrypt digest identifier */
+        /* Translates a DNSSEC digest algorithm into an openssl/gcrypt digest identifier */
 
         switch (algorithm) {
 
         case DNSSEC_DIGEST_SHA1:
-                return GCRY_MD_SHA1;
+                return OPENSSL_OR_GCRYPT(EVP_sha1(), GCRY_MD_SHA1);
 
         case DNSSEC_DIGEST_SHA256:
-                return GCRY_MD_SHA256;
+                return OPENSSL_OR_GCRYPT(EVP_sha256(), GCRY_MD_SHA256);
 
         case DNSSEC_DIGEST_SHA384:
-                return GCRY_MD_SHA384;
+                return OPENSSL_OR_GCRYPT(EVP_sha384(), GCRY_MD_SHA384);
 
         default:
-                return -EOPNOTSUPP;
+                return OPENSSL_OR_GCRYPT(NULL, -EOPNOTSUPP);
         }
 }
 
 int dnssec_verify_dnskey_by_ds(DnsResourceRecord *dnskey, DnsResourceRecord *ds, bool mask_revoke) {
         uint8_t wire_format[DNS_WIRE_FORMAT_HOSTNAME_MAX];
-        _cleanup_(gcry_md_closep) gcry_md_hd_t md = NULL;
-        gcry_error_t err;
-        size_t hash_size;
-        int md_algorithm, r;
-        void *result;
+        int r;
 
         assert(dnskey);
         assert(ds);
@@ -1116,23 +1352,67 @@
         if (dnssec_keytag(dnskey, mask_revoke) != ds->ds.key_tag)
                 return 0;
 
-        initialize_libgcrypt(false);
+        r = dns_name_to_wire_format(dns_resource_key_name(dnskey->key), wire_format, sizeof wire_format, true);
+        if (r < 0)
+                return r;
 
-        md_algorithm = digest_to_gcrypt_md(ds->ds.digest_type);
-        if (md_algorithm < 0)
-                return md_algorithm;
+        hash_md_t md_algorithm = digest_to_hash_md(ds->ds.digest_type);
 
-        hash_size = gcry_md_get_algo_dlen(md_algorithm);
+#if PREFER_OPENSSL
+        if (!md_algorithm)
+                return -EOPNOTSUPP;
+
+        _cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX *ctx = NULL;
+        uint8_t result[EVP_MAX_MD_SIZE];
+
+        unsigned hash_size = EVP_MD_size(md_algorithm);
         assert(hash_size > 0);
 
         if (ds->ds.digest_size != hash_size)
                 return 0;
 
-        r = dns_name_to_wire_format(dns_resource_key_name(dnskey->key), wire_format, sizeof(wire_format), true);
-        if (r < 0)
-                return r;
+        ctx = EVP_MD_CTX_new();
+        if (!ctx)
+                return -ENOMEM;
 
-        err = gcry_md_open(&md, md_algorithm, 0);
+        if (EVP_DigestInit_ex(ctx, md_algorithm, NULL) <= 0)
+                return -EIO;
+
+        if (EVP_DigestUpdate(ctx, wire_format, r) <= 0)
+                return -EIO;
+
+        if (mask_revoke)
+                md_add_uint16(ctx, dnskey->dnskey.flags & ~DNSKEY_FLAG_REVOKE);
+        else
+                md_add_uint16(ctx, dnskey->dnskey.flags);
+
+        r = md_add_uint8(ctx, dnskey->dnskey.protocol);
+        if (r <= 0)
+                return r;
+        r = md_add_uint8(ctx, dnskey->dnskey.algorithm);
+        if (r <= 0)
+                return r;
+        if (EVP_DigestUpdate(ctx, dnskey->dnskey.key, dnskey->dnskey.key_size) <= 0)
+                return -EIO;
+
+        if (EVP_DigestFinal_ex(ctx, result, NULL) <= 0)
+                return -EIO;
+
+#else
+        if (md_algorithm < 0)
+                return -EOPNOTSUPP;
+
+        initialize_libgcrypt(false);
+
+        _cleanup_(gcry_md_closep) gcry_md_hd_t md = NULL;
+
+        size_t hash_size = gcry_md_get_algo_dlen(md_algorithm);
+        assert(hash_size > 0);
+
+        if (ds->ds.digest_size != hash_size)
+                return 0;
+
+        gcry_error_t err = gcry_md_open(&md, md_algorithm, 0);
         if (gcry_err_code(err) != GPG_ERR_NO_ERROR || !md)
                 return -EIO;
 
@@ -1145,9 +1425,10 @@
         md_add_uint8(md, dnskey->dnskey.algorithm);
         gcry_md_write(md, dnskey->dnskey.key, dnskey->dnskey.key_size);
 
-        result = gcry_md_read(md, 0);
+        void *result = gcry_md_read(md, 0);
         if (!result)
                 return -EIO;
+#endif
 
         return memcmp(result, ds->ds.digest, ds->ds.digest_size) == 0;
 }
@@ -1190,27 +1471,22 @@
         return 0;
 }
 
-static int nsec3_hash_to_gcrypt_md(uint8_t algorithm) {
+static hash_md_t nsec3_hash_to_hash_md(uint8_t algorithm) {
 
-        /* Translates a DNSSEC NSEC3 hash algorithm into a gcrypt digest identifier */
+        /* Translates a DNSSEC NSEC3 hash algorithm into an openssl/gcrypt digest identifier */
 
         switch (algorithm) {
 
         case NSEC3_ALGORITHM_SHA1:
-                return GCRY_MD_SHA1;
+                return OPENSSL_OR_GCRYPT(EVP_sha1(), GCRY_MD_SHA1);
 
         default:
-                return -EOPNOTSUPP;
+                return OPENSSL_OR_GCRYPT(NULL, -EOPNOTSUPP);
         }
 }
 
 int dnssec_nsec3_hash(DnsResourceRecord *nsec3, const char *name, void *ret) {
         uint8_t wire_format[DNS_WIRE_FORMAT_HOSTNAME_MAX];
-        _cleanup_(gcry_md_closep) gcry_md_hd_t md = NULL;
-        gcry_error_t err;
-        size_t hash_size;
-        int algorithm;
-        void *result;
         int r;
 
         assert(nsec3);
@@ -1225,13 +1501,55 @@
                                        "Ignoring NSEC3 RR %s with excessive number of iterations.",
                                        dns_resource_record_to_string(nsec3));
 
-        algorithm = nsec3_hash_to_gcrypt_md(nsec3->nsec3.algorithm);
+        hash_md_t algorithm = nsec3_hash_to_hash_md(nsec3->nsec3.algorithm);
+#if PREFER_OPENSSL
+        if (!algorithm)
+                return -EOPNOTSUPP;
+
+        size_t hash_size = EVP_MD_size(algorithm);
+        assert(hash_size > 0);
+
+        if (nsec3->nsec3.next_hashed_name_size != hash_size)
+                return -EINVAL;
+
+        _cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX *ctx = EVP_MD_CTX_new();
+        if (!ctx)
+                return -ENOMEM;
+
+        if (EVP_DigestInit_ex(ctx, algorithm, NULL) <= 0)
+                return -EIO;
+
+        r = dns_name_to_wire_format(name, wire_format, sizeof(wire_format), true);
+        if (r < 0)
+                return r;
+
+        if (EVP_DigestUpdate(ctx, wire_format, r) <= 0)
+                return -EIO;
+        if (EVP_DigestUpdate(ctx, nsec3->nsec3.salt, nsec3->nsec3.salt_size) <= 0)
+                return -EIO;
+
+        uint8_t result[EVP_MAX_MD_SIZE];
+        if (EVP_DigestFinal_ex(ctx, result, NULL) <= 0)
+                return -EIO;
+
+        for (unsigned k = 0; k < nsec3->nsec3.iterations; k++) {
+                if (EVP_DigestInit_ex(ctx, algorithm, NULL) <= 0)
+                        return -EIO;
+                if (EVP_DigestUpdate(ctx, result, hash_size) <= 0)
+                        return -EIO;
+                if (EVP_DigestUpdate(ctx, nsec3->nsec3.salt, nsec3->nsec3.salt_size) <= 0)
+                        return -EIO;
+
+                if (EVP_DigestFinal_ex(ctx, result, NULL) <= 0)
+                        return -EIO;
+        }
+#else
         if (algorithm < 0)
                 return algorithm;
 
         initialize_libgcrypt(false);
 
-        hash_size = gcry_md_get_algo_dlen(algorithm);
+        unsigned hash_size = gcry_md_get_algo_dlen(algorithm);
         assert(hash_size > 0);
 
         if (nsec3->nsec3.next_hashed_name_size != hash_size)
@@ -1241,14 +1559,15 @@
         if (r < 0)
                 return r;
 
-        err = gcry_md_open(&md, algorithm, 0);
+        _cleanup_(gcry_md_closep) gcry_md_hd_t md = NULL;
+        gcry_error_t err = gcry_md_open(&md, algorithm, 0);
         if (gcry_err_code(err) != GPG_ERR_NO_ERROR || !md)
                 return -EIO;
 
         gcry_md_write(md, wire_format, r);
         gcry_md_write(md, nsec3->nsec3.salt, nsec3->nsec3.salt_size);
 
-        result = gcry_md_read(md, 0);
+        void *result = gcry_md_read(md, 0);
         if (!result)
                 return -EIO;
 
@@ -1264,6 +1583,7 @@
                 if (!result)
                         return -EIO;
         }
+#endif
 
         memcpy(ret, result, hash_size);
         return (int) hash_size;
@@ -1283,8 +1603,14 @@
                 return 0;
 
         /* Ignore NSEC3 RRs whose algorithm we don't know */
-        if (nsec3_hash_to_gcrypt_md(rr->nsec3.algorithm) < 0)
+#if PREFER_OPENSSL
+        if (!nsec3_hash_to_hash_md(rr->nsec3.algorithm))
                 return 0;
+#else
+        if (nsec3_hash_to_hash_md(rr->nsec3.algorithm) < 0)
+                return 0;
+#endif
+
         /* Ignore NSEC3 RRs with an excessive number of required iterations */
         if (rr->nsec3.iterations > NSEC3_ITERATIONS_MAX)
                 return 0;
diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c
index 512ea2e..0c593c9 100644
--- a/src/resolve/resolved-dns-packet.c
+++ b/src/resolve/resolved-dns-packet.c
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #if HAVE_GCRYPT
-#include <gcrypt.h>
+#  include <gcrypt.h>
 #endif
 
 #include "alloc-util.h"
@@ -9,11 +9,11 @@
 #include "memory-util.h"
 #include "resolved-dns-packet.h"
 #include "set.h"
+#include "stdio-util.h"
 #include "string-table.h"
 #include "strv.h"
 #include "unaligned.h"
 #include "utf8.h"
-#include "util.h"
 
 #define EDNS0_OPT_DO (1<<15)
 
@@ -29,8 +29,11 @@
                 dns_packet_rewind(rewinder->packet, rewinder->saved_rindex);
 }
 
-#define INIT_REWINDER(rewinder, p) do { rewinder.packet = p; rewinder.saved_rindex = p->rindex; } while (0)
-#define CANCEL_REWINDER(rewinder) do { rewinder.packet = NULL; } while (0)
+#define REWINDER_INIT(p) {                              \
+                .packet = (p),                          \
+                .saved_rindex = (p)->rindex,            \
+        }
+#define CANCEL_REWINDER(rewinder) do { (rewinder).packet = NULL; } while (0)
 
 int dns_packet_new(
                 DnsPacket **ret,
@@ -99,7 +102,7 @@
 
         h = DNS_PACKET_HEADER(p);
 
-        switch(p->protocol) {
+        switch (p->protocol) {
         case DNS_PROTOCOL_LLMNR:
                 assert(!truncated);
 
@@ -515,15 +518,12 @@
 
         *(w++) = (uint8_t) l;
 
-        if (p->canonical_form && canonical_candidate) {
-                size_t i;
-
+        if (p->canonical_form && canonical_candidate)
                 /* Generate in canonical form, as defined by DNSSEC
                  * RFC 4034, Section 6.2, i.e. all lower-case. */
-
-                for (i = 0; i < l; i++)
+                for (size_t i = 0; i < l; i++)
                         w[i] = (uint8_t) ascii_tolower(d[i]);
-        } else
+        else
                 /* Otherwise, just copy the string unaltered. This is
                  * essential for DNS-SD, where the casing of labels
                  * matters and needs to be retained. */
@@ -776,7 +776,7 @@
                 static const uint8_t rfc6975[] = {
 
                         0, 5, /* OPTION_CODE: DAU */
-#if HAVE_GCRYPT && GCRYPT_VERSION_NUMBER >= 0x010600
+#if PREFER_OPENSSL || (HAVE_GCRYPT && GCRYPT_VERSION_NUMBER >= 0x010600)
                         0, 7, /* LIST_LENGTH */
 #else
                         0, 6, /* LIST_LENGTH */
@@ -787,7 +787,7 @@
                         DNSSEC_ALGORITHM_RSASHA512,
                         DNSSEC_ALGORITHM_ECDSAP256SHA256,
                         DNSSEC_ALGORITHM_ECDSAP384SHA384,
-#if HAVE_GCRYPT && GCRYPT_VERSION_NUMBER >= 0x010600
+#if PREFER_OPENSSL || (HAVE_GCRYPT && GCRYPT_VERSION_NUMBER >= 0x010600)
                         DNSSEC_ALGORITHM_ED25519,
 #endif
 
@@ -941,15 +941,12 @@
                         r = dns_packet_append_raw_string(p, NULL, 0, NULL);
                         if (r < 0)
                                 goto fail;
-                } else {
-                        DnsTxtItem *i;
-
+                } else
                         LIST_FOREACH(items, i, rr->txt.items) {
                                 r = dns_packet_append_raw_string(p, i->data, i->length, NULL);
                                 if (r < 0)
                                         goto fail;
                         }
-                }
 
                 r = 0;
                 break;
@@ -1254,8 +1251,9 @@
 
 int dns_packet_read(DnsPacket *p, size_t sz, const void **ret, size_t *start) {
         assert(p);
+        assert(p->rindex <= p->size);
 
-        if (p->rindex + sz > p->size)
+        if (sz > p->size - p->rindex)
                 return -EMSGSIZE;
 
         if (ret)
@@ -1373,14 +1371,13 @@
 }
 
 int dns_packet_read_string(DnsPacket *p, char **ret, size_t *start) {
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
+        _cleanup_free_ char *t = NULL;
         const void *d;
-        char *t;
         uint8_t c;
         int r;
 
         assert(p);
-        INIT_REWINDER(rewinder, p);
 
         r = dns_packet_read_uint8(p, &c, NULL);
         if (r < 0)
@@ -1390,19 +1387,14 @@
         if (r < 0)
                 return r;
 
-        if (memchr(d, 0, c))
+        r = make_cstring(d, c, MAKE_CSTRING_REFUSE_TRAILING_NUL, &t);
+        if (r < 0)
+                return r;
+
+        if (!utf8_is_valid(t))
                 return -EBADMSG;
 
-        t = strndup(d, c);
-        if (!t)
-                return -ENOMEM;
-
-        if (!utf8_is_valid(t)) {
-                free(t);
-                return -EBADMSG;
-        }
-
-        *ret = t;
+        *ret = TAKE_PTR(t);
 
         if (start)
                 *start = rewinder.saved_rindex;
@@ -1412,13 +1404,12 @@
 }
 
 int dns_packet_read_raw_string(DnsPacket *p, const void **ret, size_t *size, size_t *start) {
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
+        assert(p);
+
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
         uint8_t c;
         int r;
 
-        assert(p);
-        INIT_REWINDER(rewinder, p);
-
         r = dns_packet_read_uint8(p, &c, NULL);
         if (r < 0)
                 return r;
@@ -1442,18 +1433,15 @@
                 bool allow_compression,
                 size_t *ret_start) {
 
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
-        size_t after_rindex = 0, jump_barrier;
+        assert(p);
+
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
+        size_t after_rindex = 0, jump_barrier = p->rindex;
         _cleanup_free_ char *name = NULL;
         bool first = true;
         size_t n = 0;
         int r;
 
-        assert(p);
-
-        INIT_REWINDER(rewinder, p);
-        jump_barrier = p->rindex;
-
         if (p->refuse_compression)
                 allow_compression = false;
 
@@ -1530,18 +1518,15 @@
 }
 
 static int dns_packet_read_type_window(DnsPacket *p, Bitmap **types, size_t *start) {
-        uint8_t window;
-        uint8_t length;
-        const uint8_t *bitmap;
-        uint8_t bit = 0;
-        unsigned i;
-        bool found = false;
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
-        int r;
-
         assert(p);
         assert(types);
-        INIT_REWINDER(rewinder, p);
+
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
+        uint8_t window, length;
+        const uint8_t *bitmap;
+        uint8_t bit = 0;
+        bool found = false;
+        int r;
 
         r = systemd_bitmap_ensure_allocated(types);
         if (r < 0)
@@ -1562,7 +1547,7 @@
         if (r < 0)
                 return r;
 
-        for (i = 0; i < length; i++) {
+        for (uint8_t i = 0; i < length; i++) {
                 uint8_t bitmask = 1 << 7;
 
                 if (!bitmap[i]) {
@@ -1600,22 +1585,22 @@
 }
 
 static int dns_packet_read_type_windows(DnsPacket *p, Bitmap **types, size_t size, size_t *start) {
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
         int r;
 
-        INIT_REWINDER(rewinder, p);
-
-        while (p->rindex < rewinder.saved_rindex + size) {
+        while (p->rindex - rewinder.saved_rindex < size) {
                 r = dns_packet_read_type_window(p, types, NULL);
                 if (r < 0)
                         return r;
 
+                assert(p->rindex >= rewinder.saved_rindex);
+
                 /* don't read past end of current RR */
-                if (p->rindex > rewinder.saved_rindex + size)
+                if (p->rindex - rewinder.saved_rindex > size)
                         return -EBADMSG;
         }
 
-        if (p->rindex != rewinder.saved_rindex + size)
+        if (p->rindex - rewinder.saved_rindex != size)
                 return -EBADMSG;
 
         if (start)
@@ -1631,15 +1616,14 @@
                 bool *ret_cache_flush_or_qu,
                 size_t *ret_start) {
 
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
+        assert(p);
+
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
         _cleanup_free_ char *name = NULL;
         bool cache_flush_or_qu = false;
         uint16_t class, type;
         int r;
 
-        assert(p);
-        INIT_REWINDER(rewinder, p);
-
         r = dns_packet_read_name(p, &name, true, NULL);
         if (r < 0)
                 return r;
@@ -1693,18 +1677,16 @@
                 bool *ret_cache_flush,
                 size_t *ret_start) {
 
+        assert(p);
+
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
         _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
         size_t offset;
         uint16_t rdlength;
         bool cache_flush;
         int r;
 
-        assert(p);
-
-        INIT_REWINDER(rewinder, p);
-
         r = dns_packet_read_key(p, &key, &cache_flush, NULL);
         if (r < 0)
                 return r;
@@ -1729,7 +1711,7 @@
         if (r < 0)
                 return r;
 
-        if (p->rindex + rdlength > p->size)
+        if (rdlength > p->size - p->rindex)
                 return -EBADMSG;
 
         offset = p->rindex;
@@ -1773,7 +1755,7 @@
                 } else {
                         DnsTxtItem *last = NULL;
 
-                        while (p->rindex < offset + rdlength) {
+                        while (p->rindex - offset < rdlength) {
                                 DnsTxtItem *i;
                                 const void *data;
                                 size_t sz;
@@ -2005,7 +1987,7 @@
                 if (r < 0)
                         return r;
 
-                if (rdlength + offset < p->rindex)
+                if (rdlength < p->rindex - offset)
                         return -EBADMSG;
 
                 r = dns_packet_read_memdup(p, offset + rdlength - p->rindex,
@@ -2032,6 +2014,9 @@
                 if (r < 0)
                         return r;
 
+                if (rdlength < p->rindex - offset)
+                        return -EBADMSG;
+
                 r = dns_packet_read_type_windows(p, &rr->nsec.types, offset + rdlength - p->rindex, NULL);
 
                 /* We accept empty NSEC bitmaps. The bit indicating the presence of the NSEC record itself
@@ -2077,6 +2062,9 @@
                 if (r < 0)
                         return r;
 
+                if (rdlength < p->rindex - offset)
+                        return -EBADMSG;
+
                 r = dns_packet_read_type_windows(p, &rr->nsec3.types, offset + rdlength - p->rindex, NULL);
 
                 /* empty non-terminals can have NSEC3 records, so empty bitmaps are allowed */
@@ -2120,7 +2108,7 @@
                 if (r < 0)
                         return r;
 
-                if (rdlength + offset < p->rindex)
+                if (rdlength < p->rindex - offset)
                         return -EBADMSG;
 
                 r = dns_packet_read_memdup(p,
@@ -2139,7 +2127,7 @@
         }
         if (r < 0)
                 return r;
-        if (p->rindex != offset + rdlength)
+        if (p->rindex - offset != rdlength)
                 return -EBADMSG;
 
         if (ret)
@@ -2199,7 +2187,7 @@
 
 static int dns_packet_extract_question(DnsPacket *p, DnsQuestion **ret_question) {
         _cleanup_(dns_question_unrefp) DnsQuestion *question = NULL;
-        unsigned n, i;
+        unsigned n;
         int r;
 
         n = DNS_PACKET_QDCOUNT(p);
@@ -2219,7 +2207,7 @@
                 if (r < 0)
                         return r;
 
-                for (i = 0; i < n; i++) {
+                for (unsigned i = 0; i < n; i++) {
                         _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
                         bool qu;
 
@@ -2250,7 +2238,7 @@
 
 static int dns_packet_extract_answer(DnsPacket *p, DnsAnswer **ret_answer) {
         _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
-        unsigned n, i;
+        unsigned n;
         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *previous = NULL;
         bool bad_opt = false;
         int r;
@@ -2263,7 +2251,7 @@
         if (!answer)
                 return -ENOMEM;
 
-        for (i = 0; i < n; i++) {
+        for (unsigned i = 0; i < n; i++) {
                 _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
                 bool cache_flush = false;
                 size_t start;
@@ -2359,13 +2347,17 @@
 
                         /* According to RFC 4795, section 2.9. only the RRs from the Answer section shall be
                          * cached. Hence mark only those RRs as cacheable by default, but not the ones from
-                         * the Additional or Authority sections. */
+                         * the Additional or Authority sections.
+                         * This restriction does not apply to mDNS records (RFC 6762). */
                         if (i < DNS_PACKET_ANCOUNT(p))
                                 flags |= DNS_ANSWER_CACHEABLE|DNS_ANSWER_SECTION_ANSWER;
                         else if (i < DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p))
                                 flags |= DNS_ANSWER_SECTION_AUTHORITY;
-                        else
+                        else {
                                 flags |= DNS_ANSWER_SECTION_ADDITIONAL;
+                                if (p->protocol == DNS_PROTOCOL_MDNS)
+                                        flags |= DNS_ANSWER_CACHEABLE;
+                        }
 
                         r = dns_answer_add(answer, rr, p->ifindex, flags, NULL);
                         if (r < 0)
@@ -2375,8 +2367,7 @@
                 /* Remember this RR, so that we can potentially merge its ->key object with the
                  * next RR. Note that we only do this if we actually decided to keep the RR around.
                  */
-                dns_resource_record_unref(previous);
-                previous = dns_resource_record_ref(rr);
+                DNS_RR_REPLACE(previous, dns_resource_record_ref(rr));
         }
 
         if (bad_opt) {
@@ -2390,15 +2381,16 @@
 }
 
 int dns_packet_extract(DnsPacket *p) {
-        _cleanup_(dns_question_unrefp) DnsQuestion *question = NULL;
-        _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = {};
-        int r;
+        assert(p);
 
         if (p->extracted)
                 return 0;
 
-        INIT_REWINDER(rewinder, p);
+        _cleanup_(dns_question_unrefp) DnsQuestion *question = NULL;
+        _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
+        _unused_ _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
+        int r;
+
         dns_packet_rewind(p, DNS_PACKET_HEADER_SIZE);
 
         r = dns_packet_extract_question(p, &question);
@@ -2417,7 +2409,6 @@
 
         p->question = TAKE_PTR(question);
         p->answer = TAKE_PTR(answer);
-
         p->extracted = true;
 
         /* no CANCEL, always rewind */
@@ -2466,14 +2457,12 @@
 }
 
 static int patch_rr(DnsPacket *p, usec_t age) {
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
         size_t ttl_index;
         uint32_t ttl;
         uint16_t type, rdlength;
         int r;
 
-        INIT_REWINDER(rewinder, p);
-
         /* Patches the RR at the current rindex, subtracts the specified time from the TTL */
 
         r = dns_packet_read_name(p, NULL, true, NULL);
@@ -2510,33 +2499,31 @@
 }
 
 int dns_packet_patch_ttls(DnsPacket *p, usec_t timestamp) {
-        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = {};
-        unsigned i, n;
-        usec_t k;
-        int r;
-
         assert(p);
         assert(timestamp_is_set(timestamp));
 
         /* Adjusts all TTLs in the packet by subtracting the time difference between now and the specified timestamp */
 
-        k = now(clock_boottime_or_monotonic());
+        _unused_ _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = REWINDER_INIT(p);
+        unsigned n;
+        usec_t k;
+        int r;
+
+        k = now(CLOCK_BOOTTIME);
         assert(k >= timestamp);
         k -= timestamp;
 
-        INIT_REWINDER(rewinder, p);
-
         dns_packet_rewind(p, DNS_PACKET_HEADER_SIZE);
 
         n = DNS_PACKET_QDCOUNT(p);
-        for (i = 0; i < n; i++) {
+        for (unsigned i = 0; i < n; i++) {
                 r = dns_packet_read_key(p, NULL, NULL, NULL);
                 if (r < 0)
                         return r;
         }
 
         n = DNS_PACKET_RRCOUNT(p);
-        for (i = 0; i < n; i++) {
+        for (unsigned i = 0; i < n; i++) {
 
                 /* DNS servers suck, hence the RR count is in many servers off. If we reached the end
                  * prematurely, accept that, exit early */
@@ -2657,6 +2644,14 @@
 };
 DEFINE_STRING_TABLE_LOOKUP(dns_rcode, int);
 
+const char *format_dns_rcode(int i, char buf[static DECIMAL_STR_MAX(int)]) {
+        const char *p = dns_rcode_to_string(i);
+        if (p)
+                return p;
+
+        return snprintf_ok(buf, DECIMAL_STR_MAX(int), "%i", i);
+}
+
 static const char* const dns_protocol_table[_DNS_PROTOCOL_MAX] = {
         [DNS_PROTOCOL_DNS]   = "dns",
         [DNS_PROTOCOL_MDNS]  = "mdns",
diff --git a/src/resolve/resolved-dns-packet.h b/src/resolve/resolved-dns-packet.h
index 6e7175c..505e3e7 100644
--- a/src/resolve/resolved-dns-packet.h
+++ b/src/resolve/resolved-dns-packet.h
@@ -201,6 +201,14 @@
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnsPacket*, dns_packet_unref);
 
+#define DNS_PACKET_REPLACE(a, b)                \
+        do {                                    \
+                typeof(a)* _a = &(a);           \
+                typeof(b) _b = (b);             \
+                dns_packet_unref(*_a);          \
+                *_a = _b;                       \
+        } while(0)
+
 int dns_packet_validate(DnsPacket *p);
 int dns_packet_validate_reply(DnsPacket *p);
 int dns_packet_validate_query(DnsPacket *p);
@@ -275,6 +283,8 @@
 
 const char* dns_rcode_to_string(int i) _const_;
 int dns_rcode_from_string(const char *s) _pure_;
+const char *format_dns_rcode(int i, char buf[static DECIMAL_STR_MAX(int)]);
+#define FORMAT_DNS_RCODE(i) format_dns_rcode(i, (char [DECIMAL_STR_MAX(int)]) {})
 
 const char* dns_protocol_to_string(DnsProtocol p) _const_;
 DnsProtocol dns_protocol_from_string(const char *s) _pure_;
@@ -332,7 +342,7 @@
         case AF_INET6:
                 return UDP6_PACKET_HEADER_SIZE;
         default:
-                assert_not_reached("Unexpected address family");
+                assert_not_reached();
         }
 }
 
diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c
index 24cd7cd..58a7b2d 100644
--- a/src/resolve/resolved-dns-query.c
+++ b/src/resolve/resolved-dns-query.c
@@ -3,6 +3,8 @@
 #include "alloc-util.h"
 #include "dns-domain.h"
 #include "dns-type.h"
+#include "event-util.h"
+#include "glyph-util.h"
 #include "hostname-util.h"
 #include "local-addresses.h"
 #include "resolved-dns-query.h"
@@ -344,11 +346,9 @@
 }
 
 static void dns_query_stop(DnsQuery *q) {
-        DnsQueryCandidate *c;
-
         assert(q);
 
-        q->timeout_event_source = sd_event_source_disable_unref(q->timeout_event_source);
+        event_source_disable(q->timeout_event_source);
 
         LIST_FOREACH(candidates_by_query, c, q->candidates)
                 dns_query_candidate_stop(c);
@@ -397,6 +397,7 @@
         dns_question_unref(q->question_idna);
         dns_question_unref(q->question_utf8);
         dns_packet_unref(q->question_bypass);
+        dns_question_unref(q->collected_questions);
 
         dns_query_reset_answer(q);
 
@@ -585,16 +586,17 @@
 
         q->state = state;
 
+        (void) manager_monitor_send(q->manager, q->state, q->answer_rcode, q->answer_errno, q->question_idna, q->question_utf8, q->collected_questions, q->answer);
+
         dns_query_stop(q);
         if (q->complete)
                 q->complete(q);
 }
 
 static int on_query_timeout(sd_event_source *s, usec_t usec, void *userdata) {
-        DnsQuery *q = userdata;
+        DnsQuery *q = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(q);
 
         dns_query_complete(q, DNS_TRANSACTION_TIMEOUT);
         return 0;
@@ -717,8 +719,7 @@
 
 int dns_query_go(DnsQuery *q) {
         DnsScopeMatch found = DNS_SCOPE_NO;
-        DnsScope *s, *first = NULL;
-        DnsQueryCandidate *c;
+        DnsScope *first = NULL;
         int r;
 
         assert(q);
@@ -776,17 +777,16 @@
 
         dns_query_reset_answer(q);
 
-        r = sd_event_add_time_relative(
+        r = event_reset_time_relative(
                         q->manager->event,
                         &q->timeout_event_source,
-                        clock_boottime_or_monotonic(),
+                        CLOCK_BOOTTIME,
                         SD_RESOLVED_QUERY_TIMEOUT_USEC,
-                        0, on_query_timeout, q);
+                        0, on_query_timeout, q,
+                        0, "query-timeout", true);
         if (r < 0)
                 goto fail;
 
-        (void) sd_event_source_set_description(q->timeout_event_source, "query-timeout");
-
         q->state = DNS_TRANSACTION_PENDING;
         q->block_ready++;
 
@@ -853,17 +853,14 @@
                                 q->answer_query_flags |= dns_transaction_source_to_query_flags(t->answer_source);
                         } else {
                                 /* Override non-successful previous answers */
-                                dns_answer_unref(q->answer);
-                                q->answer = dns_answer_ref(t->answer);
-
+                                DNS_ANSWER_REPLACE(q->answer, dns_answer_ref(t->answer));
                                 q->answer_query_flags = dns_transaction_source_to_query_flags(t->answer_source);
                         }
 
                         q->answer_rcode = t->answer_rcode;
                         q->answer_errno = 0;
 
-                        dns_packet_unref(q->answer_full_packet);
-                        q->answer_full_packet = dns_packet_ref(t->received);
+                        DNS_PACKET_REPLACE(q->answer_full_packet, dns_packet_ref(t->received));
 
                         if (FLAGS_SET(t->answer_query_flags, SD_RESOLVED_AUTHENTICATED)) {
                                 has_authenticated = true;
@@ -899,14 +896,12 @@
                             !FLAGS_SET(t->answer_query_flags, SD_RESOLVED_AUTHENTICATED))
                                 continue;
 
-                        dns_answer_unref(q->answer);
-                        q->answer = dns_answer_ref(t->answer);
+                        DNS_ANSWER_REPLACE(q->answer, dns_answer_ref(t->answer));
                         q->answer_rcode = t->answer_rcode;
                         q->answer_dnssec_result = t->answer_dnssec_result;
                         q->answer_query_flags = t->answer_query_flags | dns_transaction_source_to_query_flags(t->answer_source);
                         q->answer_errno = t->answer_errno;
-                        dns_packet_unref(q->answer_full_packet);
-                        q->answer_full_packet = dns_packet_ref(t->received);
+                        DNS_PACKET_REPLACE(q->answer_full_packet, dns_packet_ref(t->received));
 
                         state = t->state;
                         break;
@@ -938,8 +933,7 @@
 }
 
 void dns_query_ready(DnsQuery *q) {
-
-        DnsQueryCandidate *bad = NULL, *c;
+        DnsQueryCandidate *bad = NULL;
         bool pending = false;
 
         assert(q);
@@ -986,6 +980,26 @@
         dns_query_accept(q, bad);
 }
 
+static int dns_query_collect_question(DnsQuery *q, DnsQuestion *question) {
+        _cleanup_(dns_question_unrefp) DnsQuestion *merged = NULL;
+        int r;
+
+        assert(q);
+
+        if (dns_question_size(question) == 0)
+                return 0;
+
+        /* When redirecting, save the first element in the chain, for informational purposes when monitoring */
+        r = dns_question_merge(q->collected_questions, question, &merged);
+        if (r < 0)
+                return r;
+
+        dns_question_unref(q->collected_questions);
+        q->collected_questions = TAKE_PTR(merged);
+
+        return 0;
+}
+
 static int dns_query_cname_redirect(DnsQuery *q, const DnsResourceRecord *cname) {
         _cleanup_(dns_question_unrefp) DnsQuestion *nq_idna = NULL, *nq_utf8 = NULL;
         int r, k;
@@ -1000,7 +1014,10 @@
         if (r < 0)
                 return r;
         if (r > 0)
-                log_debug("Following CNAME/DNAME %s → %s.", dns_question_first_name(q->question_idna), dns_question_first_name(nq_idna));
+                log_debug("Following CNAME/DNAME %s %s %s.",
+                          dns_question_first_name(q->question_idna),
+                          special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                          dns_question_first_name(nq_idna));
 
         k = dns_question_is_equal(q->question_idna, q->question_utf8);
         if (k < 0)
@@ -1014,7 +1031,10 @@
                 if (k < 0)
                         return k;
                 if (k > 0)
-                        log_debug("Following UTF8 CNAME/DNAME %s → %s.", dns_question_first_name(q->question_utf8), dns_question_first_name(nq_utf8));
+                        log_debug("Following UTF8 CNAME/DNAME %s %s %s.",
+                                  dns_question_first_name(q->question_utf8),
+                                  special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                  dns_question_first_name(nq_utf8));
         }
 
         if (r == 0 && k == 0) /* No actual cname happened? */
@@ -1029,6 +1049,14 @@
         /* Turn off searching for the new name */
         q->flags |= SD_RESOLVED_NO_SEARCH;
 
+        r = dns_query_collect_question(q, q->question_idna);
+        if (r < 0)
+                return r;
+        r = dns_query_collect_question(q, q->question_utf8);
+        if (r < 0)
+                return r;
+
+        /* Install the redirected question */
         dns_question_unref(q->question_idna);
         q->question_idna = TAKE_PTR(nq_idna);
 
diff --git a/src/resolve/resolved-dns-query.h b/src/resolve/resolved-dns-query.h
index 43a833a..2723299 100644
--- a/src/resolve/resolved-dns-query.h
+++ b/src/resolve/resolved-dns-query.h
@@ -52,6 +52,11 @@
          * here, and use that instead. */
         DnsPacket *question_bypass;
 
+        /* When we follow a CNAME redirect, we save the original question here, for informational/monitoring
+         * purposes. We'll keep adding to this whenever we go one step in the redirect, so that in the end
+         * this will contain the complete set of CNAME questions. */
+        DnsQuestion *collected_questions;
+
         uint64_t flags;
         int ifindex;
 
diff --git a/src/resolve/resolved-dns-question.c b/src/resolve/resolved-dns-question.c
index aefdaa0..8f5ebb4 100644
--- a/src/resolve/resolved-dns-question.c
+++ b/src/resolve/resolved-dns-question.c
@@ -50,6 +50,19 @@
         return 0;
 }
 
+static int dns_question_add_raw_all(DnsQuestion *a, DnsQuestion *b) {
+        DnsQuestionItem *item;
+        int r;
+
+        DNS_QUESTION_FOREACH_ITEM(item, b) {
+                r = dns_question_add_raw(a, item->key, item->flags);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 int dns_question_add(DnsQuestion *q, DnsResourceKey *key, DnsQuestionFlags flags) {
         DnsQuestionItem *item;
         int r;
@@ -71,6 +84,19 @@
         return dns_question_add_raw(q, key, flags);
 }
 
+static int dns_question_add_all(DnsQuestion *a, DnsQuestion *b) {
+        DnsQuestionItem *item;
+        int r;
+
+        DNS_QUESTION_FOREACH_ITEM(item, b) {
+                r = dns_question_add(a, item->key, item->flags);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 int dns_question_matches_rr(DnsQuestion *q, DnsResourceRecord *rr, const char *search_domain) {
         DnsResourceKey *key;
         int r;
@@ -486,3 +512,35 @@
                 fputc('\n', f);
         }
 }
+
+int dns_question_merge(DnsQuestion *a, DnsQuestion *b, DnsQuestion **ret) {
+        _cleanup_(dns_question_unrefp) DnsQuestion *k = NULL;
+        int r;
+
+        assert(ret);
+
+        if (a == b || dns_question_size(b) <= 0) {
+                *ret = dns_question_ref(a);
+                return 0;
+        }
+
+        if (dns_question_size(a) <= 0) {
+                *ret = dns_question_ref(b);
+                return 0;
+        }
+
+        k = dns_question_new(dns_question_size(a) + dns_question_size(b));
+        if (!k)
+                return -ENOMEM;
+
+        r = dns_question_add_raw_all(k, a);
+        if (r < 0)
+                return r;
+
+        r = dns_question_add_all(k, b);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(k);
+        return 0;
+}
diff --git a/src/resolve/resolved-dns-question.h b/src/resolve/resolved-dns-question.h
index 31b8a2e..b7dc60c 100644
--- a/src/resolve/resolved-dns-question.h
+++ b/src/resolve/resolved-dns-question.h
@@ -21,7 +21,7 @@
 struct DnsQuestion {
         unsigned n_ref;
         size_t n_keys, n_allocated;
-        DnsQuestionItem items[0];
+        DnsQuestionItem items[];
 };
 
 DnsQuestion *dns_question_new(size_t n);
@@ -59,6 +59,8 @@
         return dns_question_size(q) <= 0;
 }
 
+int dns_question_merge(DnsQuestion *a, DnsQuestion *b, DnsQuestion **ret);
+
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuestion*, dns_question_unref);
 
 #define _DNS_QUESTION_FOREACH(u, k, q)                                     \
diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c
index 3fa59e2..4f50116 100644
--- a/src/resolve/resolved-dns-rr.c
+++ b/src/resolve/resolved-dns-rr.c
@@ -47,8 +47,8 @@
         if (cname->key->type == DNS_TYPE_CNAME)
                 return dns_resource_key_new(key->class, key->type, cname->cname.name);
         else {
+                _cleanup_free_ char *destination = NULL;
                 DnsResourceKey *k;
-                char *destination = NULL;
 
                 r = dns_name_change_suffix(dns_resource_key_name(key), dns_resource_key_name(cname->key), cname->dname.name, &destination);
                 if (r < 0)
@@ -58,8 +58,9 @@
 
                 k = dns_resource_key_new_consume(key->class, key->type, destination);
                 if (!k)
-                        return mfree(destination);
+                        return NULL;
 
+                TAKE_PTR(destination);
                 return k;
         }
 }
@@ -322,10 +323,10 @@
         c = dns_class_to_string(key->class);
         t = dns_type_to_string(key->type);
 
-        snprintf(buf, buf_size, "%s %s%s%.0u %s%s%.0u",
-                 dns_resource_key_name(key),
-                 strempty(c), c ? "" : "CLASS", c ? 0 : key->class,
-                 strempty(t), t ? "" : "TYPE", t ? 0 : key->type);
+        (void) snprintf(buf, buf_size, "%s %s%s%.0u %s%s%.0u",
+                        dns_resource_key_name(key),
+                        strempty(c), c ? "" : "CLASS", c ? 0u : key->class,
+                        strempty(t), t ? "" : "TYPE", t ? 0u : key->type);
 
         return ans;
 }
@@ -359,13 +360,10 @@
                 return false;
 
         /* Keep the one which already has more references. */
-        if ((*a)->n_ref > (*b)->n_ref) {
-                dns_resource_key_unref(*b);
-                *b = dns_resource_key_ref(*a);
-        } else {
-                dns_resource_key_unref(*a);
-                *a = dns_resource_key_ref(*b);
-        }
+        if ((*a)->n_ref > (*b)->n_ref)
+                DNS_RESOURCE_KEY_REPLACE(*b, dns_resource_key_ref(*a));
+        else
+                DNS_RESOURCE_KEY_REPLACE(*a, dns_resource_key_ref(*b));
 
         return true;
 }
@@ -402,7 +400,7 @@
         assert(rr);
 
         if (rr->key) {
-                switch(rr->key->type) {
+                switch (rr->key->type) {
 
                 case DNS_TYPE_SRV:
                         free(rr->srv.name);
@@ -783,7 +781,6 @@
 }
 
 static char *format_txt(DnsTxtItem *first) {
-        DnsTxtItem *i;
         size_t c = 1;
         char *p, *s;
 
@@ -1085,14 +1082,8 @@
                 break;
         }
 
-        case DNS_TYPE_TLSA: {
-                const char *cert_usage, *selector, *matching_type;
-
-                cert_usage = tlsa_cert_usage_to_string(rr->tlsa.cert_usage);
-                selector = tlsa_selector_to_string(rr->tlsa.selector);
-                matching_type = tlsa_matching_type_to_string(rr->tlsa.matching_type);
-
-                t = hexmem(rr->sshfp.fingerprint, rr->sshfp.fingerprint_size);
+        case DNS_TYPE_TLSA:
+                t = hexmem(rr->tlsa.data, rr->tlsa.data_size);
                 if (!t)
                         return NULL;
 
@@ -1106,14 +1097,13 @@
                              rr->tlsa.selector,
                              rr->tlsa.matching_type,
                              t,
-                             cert_usage,
-                             selector,
-                             matching_type);
+                             tlsa_cert_usage_to_string(rr->tlsa.cert_usage),
+                             tlsa_selector_to_string(rr->tlsa.selector),
+                             tlsa_matching_type_to_string(rr->tlsa.matching_type));
                 if (r < 0)
                         return NULL;
 
                 break;
-        }
 
         case DNS_TYPE_CAA:
                 t = octescape(rr->caa.value, rr->caa.value_size);
@@ -1147,12 +1137,15 @@
                 break;
 
         default:
-                t = hexmem(rr->generic.data, rr->generic.data_size);
-                if (!t)
-                        return NULL;
-
                 /* Format as documented in RFC 3597, Section 5 */
-                r = asprintf(&s, "%s \\# %zu %s", k, rr->generic.data_size, t);
+                if (rr->generic.data_size == 0)
+                        r = asprintf(&s, "%s \\# 0", k);
+                else {
+                        t = hexmem(rr->generic.data, rr->generic.data_size);
+                        if (!t)
+                                return NULL;
+                        r = asprintf(&s, "%s \\# %zu %s", k, rr->generic.data_size, t);
+                }
                 if (r < 0)
                         return NULL;
                 break;
@@ -1166,7 +1159,7 @@
         assert(rr);
         assert(out);
 
-        switch(rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
+        switch (rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
         case DNS_TYPE_SRV:
         case DNS_TYPE_PTR:
         case DNS_TYPE_NS:
@@ -1357,8 +1350,6 @@
 
         case DNS_TYPE_TXT:
         case DNS_TYPE_SPF: {
-                DnsTxtItem *j;
-
                 LIST_FOREACH(items, j, rr->txt.items) {
                         siphash24_compress_safe(j->data, j->length, state);
 
@@ -1710,9 +1701,7 @@
 
         new_rr->ttl = new_ttl;
 
-        dns_resource_record_unref(*rr);
-        *rr = new_rr;
-
+        DNS_RR_REPLACE(*rr, new_rr);
         return 1;
 }
 
@@ -1779,49 +1768,41 @@
         return 0;
 }
 
-DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *i) {
-        DnsTxtItem *n;
+DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *first) {
+        LIST_FOREACH(items, i, first)
+                free(i);
 
-        if (!i)
-                return NULL;
-
-        n = i->items_next;
-
-        free(i);
-        return dns_txt_item_free_all(n);
+        return NULL;
 }
 
 bool dns_txt_item_equal(DnsTxtItem *a, DnsTxtItem *b) {
+        DnsTxtItem *bb = b;
 
         if (a == b)
                 return true;
 
-        if (!a != !b)
-                return false;
+        LIST_FOREACH(items, aa, a) {
+                if (!bb)
+                        return false;
 
-        if (!a)
-                return true;
+                if (memcmp_nn(aa->data, aa->length, bb->data, bb->length) != 0)
+                        return false;
 
-        if (a->length != b->length)
-                return false;
+                bb = bb->items_next;
+        }
 
-        if (memcmp(a->data, b->data, a->length) != 0)
-                return false;
-
-        return dns_txt_item_equal(a->items_next, b->items_next);
+        return !bb;
 }
 
 DnsTxtItem *dns_txt_item_copy(DnsTxtItem *first) {
-        DnsTxtItem *i, *copy = NULL, *end = NULL;
+        DnsTxtItem *copy = NULL, *end = NULL;
 
         LIST_FOREACH(items, i, first) {
                 DnsTxtItem *j;
 
                 j = memdup(i, offsetof(DnsTxtItem, data) + i->length + 1);
-                if (!j) {
-                        dns_txt_item_free_all(copy);
-                        return NULL;
-                }
+                if (!j)
+                        return dns_txt_item_free_all(copy);
 
                 LIST_INSERT_AFTER(items, copy, end, j);
                 end = j;
@@ -1833,6 +1814,8 @@
 int dns_txt_item_new_empty(DnsTxtItem **ret) {
         DnsTxtItem *i;
 
+        assert(ret);
+
         /* RFC 6763, section 6.1 suggests to treat
          * empty TXT RRs as equivalent to a TXT record
          * with a single empty string. */
@@ -1842,10 +1825,283 @@
                 return -ENOMEM;
 
         *ret = i;
-
         return 0;
 }
 
+int dns_resource_record_new_from_raw(DnsResourceRecord **ret, const void *data, size_t size) {
+        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
+        int r;
+
+        r = dns_packet_new(&p, DNS_PROTOCOL_DNS, 0, DNS_PACKET_SIZE_MAX);
+        if (r < 0)
+                return r;
+
+        p->refuse_compression = true;
+
+        r = dns_packet_append_blob(p, data, size, NULL);
+        if (r < 0)
+                return r;
+
+        return dns_packet_read_rr(p, ret, NULL, NULL);
+}
+
+int dns_resource_key_to_json(DnsResourceKey *key, JsonVariant **ret) {
+        assert(key);
+        assert(ret);
+
+        return json_build(ret,
+                          JSON_BUILD_OBJECT(
+                                          JSON_BUILD_PAIR("class", JSON_BUILD_INTEGER(key->class)),
+                                          JSON_BUILD_PAIR("type", JSON_BUILD_INTEGER(key->type)),
+                                          JSON_BUILD_PAIR("name", JSON_BUILD_STRING(dns_resource_key_name(key)))));
+}
+
+static int type_systemd_bitmap_to_json(Bitmap *b, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *l = NULL;
+        unsigned t;
+        int r;
+
+        assert(ret);
+
+        BITMAP_FOREACH(t, b) {
+                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+                r = json_variant_new_unsigned(&v, t);
+                if (r < 0)
+                        return r;
+
+                r = json_variant_append_array(&l, v);
+                if (r < 0)
+                        return r;
+        }
+
+        if (!l)
+                return json_variant_new_array(ret, NULL, 0);
+
+        *ret = TAKE_PTR(l);
+        return 0;
+}
+
+static int txt_to_json(DnsTxtItem *items, JsonVariant **ret) {
+        JsonVariant **elements = NULL;
+        size_t n = 0;
+        int r;
+
+        assert(ret);
+
+        LIST_FOREACH(items, i, items) {
+                if (!GREEDY_REALLOC(elements, n + 1)) {
+                        r = -ENOMEM;
+                        goto finalize;
+                }
+
+                r = json_variant_new_octescape(elements + n, i->data, i->length);
+                if (r < 0)
+                        goto finalize;
+
+                n++;
+        }
+
+        r = json_variant_new_array(ret, elements, n);
+
+finalize:
+        for (size_t i = 0; i < n; i++)
+                json_variant_unref(elements[i]);
+
+        free(elements);
+        return r;
+}
+
+int dns_resource_record_to_json(DnsResourceRecord *rr, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *k = NULL;
+        int r;
+
+        assert(rr);
+        assert(ret);
+
+        r = dns_resource_key_to_json(rr->key, &k);
+        if (r < 0)
+                return r;
+
+        switch (rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
+
+        case DNS_TYPE_SRV:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("priority", JSON_BUILD_UNSIGNED(rr->srv.priority)),
+                                                  JSON_BUILD_PAIR("weight", JSON_BUILD_UNSIGNED(rr->srv.weight)),
+                                                  JSON_BUILD_PAIR("port", JSON_BUILD_UNSIGNED(rr->srv.port)),
+                                                  JSON_BUILD_PAIR("name", JSON_BUILD_STRING(rr->srv.name))));
+
+        case DNS_TYPE_PTR:
+        case DNS_TYPE_NS:
+        case DNS_TYPE_CNAME:
+        case DNS_TYPE_DNAME:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("name", JSON_BUILD_STRING(rr->ptr.name))));
+
+        case DNS_TYPE_HINFO:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("cpu", JSON_BUILD_STRING(rr->hinfo.cpu)),
+                                                  JSON_BUILD_PAIR("os", JSON_BUILD_STRING(rr->hinfo.os))));
+
+        case DNS_TYPE_SPF:
+        case DNS_TYPE_TXT: {
+                _cleanup_(json_variant_unrefp) JsonVariant *l = NULL;
+
+                r = txt_to_json(rr->txt.items, &l);
+                if (r < 0)
+                        return r;
+
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("items", JSON_BUILD_VARIANT(l))));
+        }
+
+        case DNS_TYPE_A:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("address", JSON_BUILD_IN4_ADDR(&rr->a.in_addr))));
+
+        case DNS_TYPE_AAAA:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("address", JSON_BUILD_IN6_ADDR(&rr->aaaa.in6_addr))));
+
+        case DNS_TYPE_SOA:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("mname", JSON_BUILD_STRING(rr->soa.mname)),
+                                                  JSON_BUILD_PAIR("rname", JSON_BUILD_STRING(rr->soa.rname)),
+                                                  JSON_BUILD_PAIR("serial", JSON_BUILD_UNSIGNED(rr->soa.serial)),
+                                                  JSON_BUILD_PAIR("refresh", JSON_BUILD_UNSIGNED(rr->soa.refresh)),
+                                                  JSON_BUILD_PAIR("expire", JSON_BUILD_UNSIGNED(rr->soa.retry)),
+                                                  JSON_BUILD_PAIR("minimum", JSON_BUILD_UNSIGNED(rr->soa.minimum))));
+
+        case DNS_TYPE_MX:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("priority", JSON_BUILD_UNSIGNED(rr->mx.priority)),
+                                                  JSON_BUILD_PAIR("exchange", JSON_BUILD_STRING(rr->mx.exchange))));
+        case DNS_TYPE_LOC:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("version", JSON_BUILD_UNSIGNED(rr->loc.version)),
+                                                  JSON_BUILD_PAIR("size", JSON_BUILD_UNSIGNED(rr->loc.size)),
+                                                  JSON_BUILD_PAIR("horiz_pre", JSON_BUILD_UNSIGNED(rr->loc.horiz_pre)),
+                                                  JSON_BUILD_PAIR("vert_pre", JSON_BUILD_UNSIGNED(rr->loc.vert_pre)),
+                                                  JSON_BUILD_PAIR("latitude", JSON_BUILD_UNSIGNED(rr->loc.latitude)),
+                                                  JSON_BUILD_PAIR("longitude", JSON_BUILD_UNSIGNED(rr->loc.longitude)),
+                                                  JSON_BUILD_PAIR("altitude", JSON_BUILD_UNSIGNED(rr->loc.altitude))));
+
+        case DNS_TYPE_DS:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("keyTag", JSON_BUILD_UNSIGNED(rr->ds.key_tag)),
+                                                  JSON_BUILD_PAIR("algorithm", JSON_BUILD_UNSIGNED(rr->ds.algorithm)),
+                                                  JSON_BUILD_PAIR("digestType", JSON_BUILD_UNSIGNED(rr->ds.digest_type)),
+                                                  JSON_BUILD_PAIR("digest", JSON_BUILD_HEX(rr->ds.digest, rr->ds.digest_size))));
+
+        case DNS_TYPE_SSHFP:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("algorithm", JSON_BUILD_UNSIGNED(rr->sshfp.algorithm)),
+                                                  JSON_BUILD_PAIR("fptype", JSON_BUILD_UNSIGNED(rr->sshfp.fptype)),
+                                                  JSON_BUILD_PAIR("fingerprint", JSON_BUILD_HEX(rr->sshfp.fingerprint, rr->sshfp.fingerprint_size))));
+
+        case DNS_TYPE_DNSKEY:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("flags", JSON_BUILD_UNSIGNED(rr->dnskey.flags)),
+                                                  JSON_BUILD_PAIR("protocol", JSON_BUILD_UNSIGNED(rr->dnskey.protocol)),
+                                                  JSON_BUILD_PAIR("algorithm", JSON_BUILD_UNSIGNED(rr->dnskey.algorithm)),
+                                                  JSON_BUILD_PAIR("dnskey", JSON_BUILD_BASE64(rr->dnskey.key, rr->dnskey.key_size))));
+
+
+        case DNS_TYPE_RRSIG:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("signer", JSON_BUILD_STRING(rr->rrsig.signer)),
+                                                  JSON_BUILD_PAIR("typeCovered", JSON_BUILD_UNSIGNED(rr->rrsig.type_covered)),
+                                                  JSON_BUILD_PAIR("algorithm", JSON_BUILD_UNSIGNED(rr->rrsig.algorithm)),
+                                                  JSON_BUILD_PAIR("labels", JSON_BUILD_UNSIGNED(rr->rrsig.labels)),
+                                                  JSON_BUILD_PAIR("originalTtl", JSON_BUILD_UNSIGNED(rr->rrsig.original_ttl)),
+                                                  JSON_BUILD_PAIR("expiration", JSON_BUILD_UNSIGNED(rr->rrsig.expiration)),
+                                                  JSON_BUILD_PAIR("inception", JSON_BUILD_UNSIGNED(rr->rrsig.inception)),
+                                                  JSON_BUILD_PAIR("keyTag", JSON_BUILD_UNSIGNED(rr->rrsig.key_tag)),
+                                                  JSON_BUILD_PAIR("signature", JSON_BUILD_BASE64(rr->rrsig.signature, rr->rrsig.signature_size))));
+
+        case DNS_TYPE_NSEC: {
+                _cleanup_(json_variant_unrefp) JsonVariant *bm = NULL;
+
+                r = type_systemd_bitmap_to_json(rr->nsec.types, &bm);
+                if (r < 0)
+                        return r;
+
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("nextDomain", JSON_BUILD_STRING(rr->nsec.next_domain_name)),
+                                                  JSON_BUILD_PAIR("types", JSON_BUILD_VARIANT(bm))));
+        }
+
+        case DNS_TYPE_NSEC3: {
+                _cleanup_(json_variant_unrefp) JsonVariant *bm = NULL;
+
+                r = type_systemd_bitmap_to_json(rr->nsec3.types, &bm);
+                if (r < 0)
+                        return r;
+
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("algorithm", JSON_BUILD_UNSIGNED(rr->nsec3.algorithm)),
+                                                  JSON_BUILD_PAIR("flags", JSON_BUILD_UNSIGNED(rr->nsec3.flags)),
+                                                  JSON_BUILD_PAIR("iterations", JSON_BUILD_UNSIGNED(rr->nsec3.iterations)),
+                                                  JSON_BUILD_PAIR("salt", JSON_BUILD_HEX(rr->nsec3.salt, rr->nsec3.salt_size)),
+                                                  JSON_BUILD_PAIR("hash", JSON_BUILD_BASE32HEX(rr->nsec3.next_hashed_name, rr->nsec3.next_hashed_name_size)),
+                                                  JSON_BUILD_PAIR("types", JSON_BUILD_VARIANT(bm))));
+        }
+
+        case DNS_TYPE_TLSA:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("certUsage", JSON_BUILD_UNSIGNED(rr->tlsa.cert_usage)),
+                                                  JSON_BUILD_PAIR("selector", JSON_BUILD_UNSIGNED(rr->tlsa.selector)),
+                                                  JSON_BUILD_PAIR("matchingType", JSON_BUILD_UNSIGNED(rr->tlsa.matching_type)),
+                                                  JSON_BUILD_PAIR("data", JSON_BUILD_HEX(rr->tlsa.data, rr->tlsa.data_size))));
+
+        case DNS_TYPE_CAA:
+                return json_build(ret,
+                                  JSON_BUILD_OBJECT(
+                                                  JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
+                                                  JSON_BUILD_PAIR("flags", JSON_BUILD_UNSIGNED(rr->caa.flags)),
+                                                  JSON_BUILD_PAIR("tag", JSON_BUILD_STRING(rr->caa.tag)),
+                                                  JSON_BUILD_PAIR("value", JSON_BUILD_OCTESCAPE(rr->caa.value, rr->caa.value_size))));
+
+        default:
+                /* Can't provide broken-down format */
+                *ret = NULL;
+                return 0;
+        }
+}
+
 static const char* const dnssec_algorithm_table[_DNSSEC_ALGORITHM_MAX_DEFINED] = {
         /* Mnemonics as listed on https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml */
         [DNSSEC_ALGORITHM_RSAMD5]             = "RSAMD5",
diff --git a/src/resolve/resolved-dns-rr.h b/src/resolve/resolved-dns-rr.h
index 66aa10b..024cfb8 100644
--- a/src/resolve/resolved-dns-rr.h
+++ b/src/resolve/resolved-dns-rr.h
@@ -8,6 +8,7 @@
 #include "dns-type.h"
 #include "hashmap.h"
 #include "in-addr-util.h"
+#include "json.h"
 #include "list.h"
 #include "string-util.h"
 #include "time-util.h"
@@ -292,6 +293,15 @@
 DnsResourceKey* dns_resource_key_new_consume(uint16_t class, uint16_t type, char *name);
 DnsResourceKey* dns_resource_key_ref(DnsResourceKey *key);
 DnsResourceKey* dns_resource_key_unref(DnsResourceKey *key);
+
+#define DNS_RESOURCE_KEY_REPLACE(a, b)          \
+        do {                                    \
+                typeof(a)* _a = &(a);           \
+                typeof(b) _b = (b);             \
+                dns_resource_key_unref(*_a);    \
+                *_a = _b;                       \
+        } while(0)
+
 const char* dns_resource_key_name(const DnsResourceKey *key);
 bool dns_resource_key_is_address(const DnsResourceKey *key);
 bool dns_resource_key_is_dnssd_ptr(const DnsResourceKey *key);
@@ -310,7 +320,7 @@
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnsResourceKey*, dns_resource_key_unref);
 
 static inline bool dns_key_is_shared(const DnsResourceKey *key) {
-        return IN_SET(key->type, DNS_TYPE_PTR);
+        return key->type == DNS_TYPE_PTR;
 }
 
 bool dns_resource_key_reduce(DnsResourceKey **a, DnsResourceKey **b);
@@ -319,6 +329,15 @@
 DnsResourceRecord* dns_resource_record_new_full(uint16_t class, uint16_t type, const char *name);
 DnsResourceRecord* dns_resource_record_ref(DnsResourceRecord *rr);
 DnsResourceRecord* dns_resource_record_unref(DnsResourceRecord *rr);
+
+#define DNS_RR_REPLACE(a, b)                    \
+        do {                                    \
+                typeof(a)* _a = &(a);           \
+                typeof(b) _b = (b);             \
+                dns_resource_record_unref(*_a); \
+                *_a = _b;                       \
+        } while(0)
+
 int dns_resource_record_new_reverse(DnsResourceRecord **ret, int family, const union in_addr_union *address, const char *name);
 int dns_resource_record_new_address(DnsResourceRecord **ret, int family, const union in_addr_union *address, const char *name);
 int dns_resource_record_equal(const DnsResourceRecord *a, const DnsResourceRecord *b);
@@ -346,6 +365,11 @@
 DnsTxtItem *dns_txt_item_copy(DnsTxtItem *i);
 int dns_txt_item_new_empty(DnsTxtItem **ret);
 
+int dns_resource_record_new_from_raw(DnsResourceRecord **ret, const void *data, size_t size);
+
+int dns_resource_key_to_json(DnsResourceKey *key, JsonVariant **ret);
+int dns_resource_record_to_json(DnsResourceRecord *rr, JsonVariant **ret);
+
 void dns_resource_record_hash_func(const DnsResourceRecord *i, struct siphash *state);
 int dns_resource_record_compare_func(const DnsResourceRecord *x, const DnsResourceRecord *y);
 
diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c
index 360ceec..c95875e 100644
--- a/src/resolve/resolved-dns-scope.c
+++ b/src/resolve/resolved-dns-scope.c
@@ -71,7 +71,7 @@
         log_debug("New scope on link %s, protocol %s, family %s", l ? l->ifname : "*", dns_protocol_to_string(protocol), family == AF_UNSPEC ? "*" : af_to_name(family));
 
         /* Enforce ratelimiting for the multicast protocols */
-        s->ratelimit = (RateLimit) { MULTICAST_RATELIMIT_INTERVAL_USEC, MULTICAST_RATELIMIT_BURST };
+        s->ratelimit = (const RateLimit) { MULTICAST_RATELIMIT_INTERVAL_USEC, MULTICAST_RATELIMIT_BURST };
 
         *ret = s;
         return 0;
@@ -351,7 +351,7 @@
                 uint16_t port,
                 union sockaddr_union *ret_socket_address) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         union sockaddr_union sa;
         socklen_t salen;
         int r, ifindex;
@@ -424,7 +424,7 @@
                         return r;
         }
 
-        if (s->link) {
+        if (ifindex != 0) {
                 r = socket_set_unicast_if(fd, sa.sa.sa_family, ifindex);
                 if (r < 0)
                         return r;
@@ -474,7 +474,8 @@
                  * host result in EHOSTUNREACH, since Linux won't send the packets out of the specified
                  * interface, but delivers them directly to the local socket. */
                 if (s->link &&
-                    !manager_find_link_address(s->manager, sa.sa.sa_family, sockaddr_in_addr(&sa.sa))) {
+                    !manager_find_link_address(s->manager, sa.sa.sa_family, sockaddr_in_addr(&sa.sa)) &&
+                    in_addr_is_localhost(sa.sa.sa_family, sockaddr_in_addr(&sa.sa)) == 0) {
                         r = socket_bind_to_ifindex(fd, ifindex);
                         if (r < 0)
                                 return r;
@@ -529,7 +530,6 @@
                 bool exclude_own) {
 
         union in_addr_union ia;
-        LinkAddress *a;
         int f, r;
 
         assert(s);
@@ -587,7 +587,6 @@
                 DnsQuery *q) {
 
         DnsQuestion *question;
-        DnsSearchDomain *d;
         const char *domain;
         uint64_t flags;
         int ifindex;
@@ -633,18 +632,15 @@
             dns_name_equal(domain, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa") > 0)
                 return DNS_SCOPE_NO;
 
-        /* Never respond to some of the domains listed in RFC6303 */
-        if (dns_name_endswith(domain, "0.in-addr.arpa") > 0 ||
-            dns_name_equal(domain, "255.255.255.255.in-addr.arpa") > 0 ||
-            dns_name_equal(domain, "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa") > 0)
+        /* Never respond to some of the domains listed in RFC6303 + RFC6761 */
+        if (dns_name_dont_resolve(domain))
                 return DNS_SCOPE_NO;
 
-        /* Never respond to some of the domains listed in RFC6761 */
-        if (dns_name_endswith(domain, "invalid") > 0)
-                return DNS_SCOPE_NO;
-
-        /* Never go to network for the _gateway or _outbound domain — they're something special, synthesized locally. */
-        if (is_gateway_hostname(domain) || is_outbound_hostname(domain))
+        /* Never go to network for the _gateway, _outbound, _localdnsstub, _localdnsproxy domain — they're something special, synthesized locally. */
+        if (is_gateway_hostname(domain) ||
+            is_outbound_hostname(domain) ||
+            is_dns_stub_hostname(domain) ||
+            is_dns_proxy_stub_hostname(domain))
                 return DNS_SCOPE_NO;
 
         switch (s->protocol) {
@@ -654,11 +650,11 @@
                 DnsScopeMatch m;
                 int n_best = -1;
 
-                if (dns_name_is_empty(domain)) {
+                if (dns_name_is_root(domain)) {
                         DnsResourceKey *t;
                         bool found = false;
 
-                        /* Refuse empty name if only A and/or AAAA records are requested. */
+                        /* Refuse root name if only A and/or AAAA records are requested. */
 
                         DNS_QUESTION_FOREACH(t, question)
                                 if (!IN_SET(t->type, DNS_TYPE_A, DNS_TYPE_AAAA)) {
@@ -695,11 +691,16 @@
                 }
 
                 /* If there's a true search domain defined for this scope, and the query is single-label,
-                 * then let's resolve things here, prefereably. Note that LLMNR considers itself
+                 * then let's resolve things here, preferably. Note that LLMNR considers itself
                  * authoritative for single-label names too, at the same preference, see below. */
                 if (has_search_domains && dns_name_is_single_label(domain))
                         return DNS_SCOPE_YES_BASE + 1;
 
+                /* If ResolveUnicastSingleLabel=yes and the query is single-label, then bump match result
+                   to prevent LLMNR monopoly among candidates. */
+                if (s->manager->resolve_unicast_single_label && dns_name_is_single_label(domain))
+                        return DNS_SCOPE_YES_BASE + 1;
+
                 /* Let's return the number of labels in the best matching result */
                 if (n_best >= 0) {
                         assert(n_best <= DNS_SCOPE_YES_END - DNS_SCOPE_YES_BASE);
@@ -767,8 +768,6 @@
                         return DNS_SCOPE_MAYBE;
 
                 if ((dns_name_is_single_label(domain) && /* only resolve single label names via LLMNR */
-                     !is_gateway_hostname(domain) && /* don't resolve "_gateway" with LLMNR, let local synthesizing logic handle that */
-                     !is_outbound_hostname(domain) && /* similar for "_outbound" */
                      dns_name_equal(domain, "local") == 0 && /* don't resolve "local" with LLMNR, it's the top-level domain of mDNS after all, see above */
                      manager_is_own_hostname(s->manager, domain) <= 0))  /* never resolve the local hostname via LLMNR */
                         return DNS_SCOPE_YES_BASE + 1; /* Return +1, as we consider ourselves authoritative
@@ -786,7 +785,7 @@
         }
 
         default:
-                assert_not_reached("Unknown scope protocol");
+                assert_not_reached();
         }
 }
 
@@ -1019,7 +1018,9 @@
                 return;
         }
 
-        assert(dns_question_size(p->question) == 1);
+        if (dns_question_size(p->question) != 1)
+                return (void) log_debug("Received LLMNR query without question or multiple questions, ignoring.");
+
         key = dns_question_first_key(p->question);
 
         r = dns_zone_lookup(&s->zone, key, 0, &answer, &soa, &tentative);
@@ -1088,7 +1089,7 @@
                 DnsResourceKey *key,
                 uint64_t query_flags) {
 
-        DnsTransaction *first, *t;
+        DnsTransaction *first;
 
         assert(scope);
         assert(key);
@@ -1117,7 +1118,7 @@
                     !(t->query_flags & SD_RESOLVED_NO_CACHE))
                         continue;
 
-                /* If we are asked to clamp ttls an the existing transaction doesn't do it, we can't
+                /* If we are asked to clamp ttls and the existing transaction doesn't do it, we can't
                  * reuse */
                 if ((query_flags & SD_RESOLVED_CLAMP_TTL) &&
                     !(t->query_flags & SD_RESOLVED_CLAMP_TTL))
@@ -1177,11 +1178,10 @@
 }
 
 static int on_conflict_dispatch(sd_event_source *es, usec_t usec, void *userdata) {
-        DnsScope *scope = userdata;
+        DnsScope *scope = ASSERT_PTR(userdata);
         int r;
 
         assert(es);
-        assert(scope);
 
         scope->conflict_event_source = sd_event_source_disable_unref(scope->conflict_event_source);
 
@@ -1212,7 +1212,6 @@
 }
 
 int dns_scope_notify_conflict(DnsScope *scope, DnsResourceRecord *rr) {
-        usec_t jitter;
         int r;
 
         assert(scope);
@@ -1241,15 +1240,12 @@
         if (scope->conflict_event_source)
                 return 0;
 
-        random_bytes(&jitter, sizeof(jitter));
-        jitter %= LLMNR_JITTER_INTERVAL_USEC;
-
         r = sd_event_add_time_relative(
                         scope->manager->event,
                         &scope->conflict_event_source,
-                        clock_boottime_or_monotonic(),
-                        jitter,
-                        LLMNR_JITTER_INTERVAL_USEC,
+                        CLOCK_BOOTTIME,
+                        random_u64_range(LLMNR_JITTER_INTERVAL_USEC),
+                        0,
                         on_conflict_dispatch, scope);
         if (r < 0)
                 return log_debug_errno(r, "Failed to add conflict dispatch event: %m");
@@ -1404,8 +1400,7 @@
         _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
         _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
         _cleanup_set_free_ Set *types = NULL;
-        DnsTransaction *t;
-        DnsZoneItem *z, *i;
+        DnsZoneItem *z;
         unsigned size = 0;
         char *service_type;
         int r;
@@ -1481,12 +1476,18 @@
 
                 rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_PTR,
                                                   "_services._dns-sd._udp.local");
+                if (!rr)
+                        return log_oom();
+
                 rr->ptr.name = strdup(service_type);
+                if (!rr->ptr.name)
+                        return log_oom();
+
                 rr->ttl = MDNS_DEFAULT_TTL;
 
                 r = dns_zone_put(&scope->zone, scope, rr, false);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to add DNS-SD PTR record to MDNS zone: %m");
+                        log_warning_errno(r, "Failed to add DNS-SD PTR record to MDNS zone, ignoring: %m");
 
                 r = dns_answer_add(answer, rr, 0, 0, NULL);
                 if (r < 0)
@@ -1512,9 +1513,9 @@
                 r = sd_event_add_time_relative(
                                 scope->manager->event,
                                 &scope->announce_event_source,
-                                clock_boottime_or_monotonic(),
+                                CLOCK_BOOTTIME,
                                 MDNS_ANNOUNCE_DELAY,
-                                MDNS_JITTER_RANGE_USEC,
+                                0,
                                 on_announcement_timeout, scope);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to schedule second announcement: %m");
@@ -1527,7 +1528,6 @@
 
 int dns_scope_add_dnssd_services(DnsScope *scope) {
         DnssdService *service;
-        DnssdTxtData *txt_data;
         int r;
 
         assert(scope);
@@ -1561,7 +1561,6 @@
 int dns_scope_remove_dnssd_services(DnsScope *scope) {
         _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
         DnssdService *service;
-        DnssdTxtData *txt_data;
         int r;
 
         assert(scope);
@@ -1586,7 +1585,7 @@
 }
 
 static bool dns_scope_has_route_only_domains(DnsScope *scope) {
-        DnsSearchDomain *domain, *first;
+        DnsSearchDomain *first;
         bool route_only = false;
 
         assert(scope);
diff --git a/src/resolve/resolved-dns-search-domain.c b/src/resolve/resolved-dns-search-domain.c
index 94a4657..a11b213 100644
--- a/src/resolve/resolved-dns-search-domain.c
+++ b/src/resolve/resolved-dns-search-domain.c
@@ -52,13 +52,13 @@
                 l->n_search_domains++;
                 break;
 
-        case DNS_SERVER_SYSTEM:
+        case DNS_SEARCH_DOMAIN_SYSTEM:
                 LIST_APPEND(domains, m->search_domains, d);
                 m->n_search_domains++;
                 break;
 
         default:
-                assert_not_reached("Unknown search domain type");
+                assert_not_reached();
         }
 
         d->linked = true;
@@ -123,19 +123,19 @@
 
         case DNS_SEARCH_DOMAIN_LINK:
                 assert(d->link);
-                LIST_FIND_TAIL(domains, d, tail);
+                tail = LIST_FIND_TAIL(domains, d);
                 LIST_REMOVE(domains, d->link->search_domains, d);
                 LIST_INSERT_AFTER(domains, d->link->search_domains, tail, d);
                 break;
 
         case DNS_SEARCH_DOMAIN_SYSTEM:
-                LIST_FIND_TAIL(domains, d, tail);
+                tail = LIST_FIND_TAIL(domains, d);
                 LIST_REMOVE(domains, d->manager->search_domains, d);
                 LIST_INSERT_AFTER(domains, d->manager->search_domains, tail, d);
                 break;
 
         default:
-                assert_not_reached("Unknown search domain type");
+                assert_not_reached();
         }
 }
 
@@ -166,7 +166,7 @@
         } else
                 changed = false;
 
-        return changed || dns_search_domain_unlink_marked(next);
+        return dns_search_domain_unlink_marked(next) || changed;
 }
 
 void dns_search_domain_mark_all(DnsSearchDomain *first) {
@@ -178,7 +178,6 @@
 }
 
 int dns_search_domain_find(DnsSearchDomain *first, const char *name, DnsSearchDomain **ret) {
-        DnsSearchDomain *d;
         int r;
 
         assert(name);
diff --git a/src/resolve/resolved-dns-server.c b/src/resolve/resolved-dns-server.c
index a21148d..342a90a 100644
--- a/src/resolve/resolved-dns-server.c
+++ b/src/resolve/resolved-dns-server.c
@@ -90,7 +90,7 @@
                 break;
 
         default:
-                assert_not_reached("Unknown server type");
+                assert_not_reached();
         }
 
         s->linked = true;
@@ -158,7 +158,7 @@
                 s->manager->n_dns_servers--;
                 break;
         default:
-                assert_not_reached("Unknown server type");
+                assert_not_reached();
         }
 
         s->linked = false;
@@ -195,25 +195,25 @@
 
         case DNS_SERVER_LINK:
                 assert(s->link);
-                LIST_FIND_TAIL(servers, s, tail);
+                tail = LIST_FIND_TAIL(servers, s);
                 LIST_REMOVE(servers, s->link->dns_servers, s);
                 LIST_INSERT_AFTER(servers, s->link->dns_servers, tail, s);
                 break;
 
         case DNS_SERVER_SYSTEM:
-                LIST_FIND_TAIL(servers, s, tail);
+                tail = LIST_FIND_TAIL(servers, s);
                 LIST_REMOVE(servers, s->manager->dns_servers, s);
                 LIST_INSERT_AFTER(servers, s->manager->dns_servers, tail, s);
                 break;
 
         case DNS_SERVER_FALLBACK:
-                LIST_FIND_TAIL(servers, s, tail);
+                tail = LIST_FIND_TAIL(servers, s);
                 LIST_REMOVE(servers, s->manager->fallback_dns_servers, s);
                 LIST_INSERT_AFTER(servers, s->manager->fallback_dns_servers, tail, s);
                 break;
 
         default:
-                assert_not_reached("Unknown server type");
+                assert_not_reached();
         }
 }
 
@@ -230,7 +230,7 @@
                 s->verified_feature_level = level;
         }
 
-        assert_se(sd_event_now(s->manager->event, clock_boottime_or_monotonic(), &s->verified_usec) >= 0);
+        assert_se(sd_event_now(s->manager->event, CLOCK_BOOTTIME, &s->verified_usec) >= 0);
 }
 
 static void dns_server_reset_counters(DnsServer *s) {
@@ -405,7 +405,7 @@
         if (s->verified_usec == 0)
                 return false;
 
-        assert_se(sd_event_now(s->manager->event, clock_boottime_or_monotonic(), &ts) >= 0);
+        assert_se(sd_event_now(s->manager->event, CLOCK_BOOTTIME, &ts) >= 0);
 
         if (s->verified_usec + s->features_grace_period_usec > ts)
                 return false;
@@ -648,6 +648,11 @@
 int dns_server_ifindex(const DnsServer *s) {
         assert(s);
 
+        /* For loopback addresses, go via the loopback interface, regardless which interface this is linked
+         * to. */
+        if (in_addr_is_localhost(s->family, &s->address))
+                return LOOPBACK_IFINDEX;
+
         /* The link ifindex always takes precedence */
         if (s->link)
                 return s->link->ifindex;
@@ -726,7 +731,8 @@
 
         log_struct(LOG_NOTICE,
                    "MESSAGE_ID=" SD_MESSAGE_DNSSEC_DOWNGRADE_STR,
-                   LOG_MESSAGE("Server %s does not support DNSSEC, downgrading to non-DNSSEC mode.", strna(dns_server_string_full(server))),
+                   LOG_MESSAGE("Server %s does not support DNSSEC, downgrading to non-DNSSEC mode.",
+                               strna(dns_server_string_full(server))),
                    "DNS_SERVER=%s", strna(dns_server_string_full(server)),
                    "DNS_SERVER_FEATURE_LEVEL=%s", dns_server_feature_level_to_string(server->possible_feature_level));
 
@@ -815,8 +821,6 @@
 }
 
 DnsServer *dns_server_find(DnsServer *first, int family, const union in_addr_union *in_addr, uint16_t port, int ifindex, const char *name) {
-        DnsServer *s;
-
         LIST_FOREACH(servers, s, first)
                 if (s->family == family &&
                     in_addr_equal(family, &s->address, in_addr) > 0 &&
@@ -875,9 +879,18 @@
         manager_read_resolv_conf(m);
 
         /* If no DNS server was chosen so far, pick the first one */
-        if (!m->current_dns_server)
+        if (!m->current_dns_server ||
+            /* In case m->current_dns_server != m->dns_servers */
+            manager_server_is_stub(m, m->current_dns_server))
                 manager_set_dns_server(m, m->dns_servers);
 
+        while (m->current_dns_server &&
+               manager_server_is_stub(m, m->current_dns_server)) {
+                manager_next_dns_server(m, NULL);
+                if (m->current_dns_server == m->dns_servers)
+                        manager_set_dns_server(m, NULL);
+        }
+
         if (!m->current_dns_server) {
                 bool found = false;
 
@@ -983,8 +996,6 @@
 }
 
 void dns_server_reset_features_all(DnsServer *s) {
-        DnsServer *i;
-
         LIST_FOREACH(servers, i, s)
                 dns_server_reset_features(i);
 }
@@ -1081,6 +1092,6 @@
         [DNS_SERVER_FEATURE_LEVEL_EDNS0]     = "UDP+EDNS0",
         [DNS_SERVER_FEATURE_LEVEL_TLS_PLAIN] = "TLS+EDNS0",
         [DNS_SERVER_FEATURE_LEVEL_DO]        = "UDP+EDNS0+DO",
-        [DNS_SERVER_FEATURE_LEVEL_TLS_DO]    = "TLS+EDNS0+D0",
+        [DNS_SERVER_FEATURE_LEVEL_TLS_DO]    = "TLS+EDNS0+DO",
 };
 DEFINE_STRING_TABLE_LOOKUP(dns_server_feature_level, DnsServerFeatureLevel);
diff --git a/src/resolve/resolved-dns-server.h b/src/resolve/resolved-dns-server.h
index be9efb0..f939b53 100644
--- a/src/resolve/resolved-dns-server.h
+++ b/src/resolve/resolved-dns-server.h
@@ -44,8 +44,8 @@
 #define DNS_SERVER_FEATURE_LEVEL_IS_DNSSEC(x) ((x) >= DNS_SERVER_FEATURE_LEVEL_DO)
 #define DNS_SERVER_FEATURE_LEVEL_IS_UDP(x) IN_SET(x, DNS_SERVER_FEATURE_LEVEL_UDP, DNS_SERVER_FEATURE_LEVEL_EDNS0, DNS_SERVER_FEATURE_LEVEL_DO)
 
-const char* dns_server_feature_level_to_string(int i) _const_;
-int dns_server_feature_level_from_string(const char *s) _pure_;
+const char* dns_server_feature_level_to_string(DnsServerFeatureLevel i) _const_;
+DnsServerFeatureLevel dns_server_feature_level_from_string(const char *s) _pure_;
 
 struct DnsServer {
         Manager *manager;
diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c
index 3e6505c..0a10a0d 100644
--- a/src/resolve/resolved-dns-stream.c
+++ b/src/resolve/resolved-dns-stream.c
@@ -6,11 +6,11 @@
 #include "alloc-util.h"
 #include "fd-util.h"
 #include "io-util.h"
+#include "macro.h"
 #include "missing_network.h"
 #include "resolved-dns-stream.h"
 #include "resolved-manager.h"
 
-#define DNS_STREAM_TIMEOUT_USEC (10 * USEC_PER_SEC)
 #define DNS_STREAMS_MAX 128
 
 #define DNS_QUERIES_PER_STREAM 32
@@ -27,7 +27,7 @@
 }
 
 static int dns_stream_update_io(DnsStream *s) {
-        int f = 0;
+        uint32_t f = 0;
 
         assert(s);
 
@@ -47,6 +47,8 @@
                 set_size(s->queries) < DNS_QUERIES_PER_STREAM)
                 f |= EPOLLIN;
 
+        s->requested_events = f;
+
 #if ENABLE_DNS_OVER_TLS
         /* For handshake and clean closing purposes, TLS can override requested events */
         if (s->dnstls_events != 0)
@@ -208,22 +210,10 @@
         assert(iov);
 
 #if ENABLE_DNS_OVER_TLS
-        if (s->encrypted && !(flags & DNS_STREAM_WRITE_TLS_DATA)) {
-                ssize_t ss;
-                size_t i;
-
-                m = 0;
-                for (i = 0; i < iovcnt; i++) {
-                        ss = dnstls_stream_write(s, iov[i].iov_base, iov[i].iov_len);
-                        if (ss < 0)
-                                return ss;
-
-                        m += ss;
-                        if (ss != (ssize_t) iov[i].iov_len)
-                                continue;
-                }
-        } else
+        if (s->encrypted && !(flags & DNS_STREAM_WRITE_TLS_DATA))
+                return dnstls_stream_writev(s, iov, iovcnt);
 #endif
+
         if (s->tfo_salen > 0) {
                 struct msghdr hdr = {
                         .msg_iov = (struct iovec*) iov,
@@ -274,13 +264,34 @@
 }
 
 static int on_stream_timeout(sd_event_source *es, usec_t usec, void *userdata) {
-        DnsStream *s = userdata;
-
-        assert(s);
+        DnsStream *s = ASSERT_PTR(userdata);
 
         return dns_stream_complete(s, ETIMEDOUT);
 }
 
+static DnsPacket *dns_stream_take_read_packet(DnsStream *s) {
+        assert(s);
+
+        /* Note, dns_stream_update() should be called after this is called. When this is called, the
+         * stream may be already full and the EPOLLIN flag is dropped from the stream IO event source.
+         * Even this makes a room to read in the stream, this does not call dns_stream_update(), hence
+         * EPOLLIN flag is not set automatically. So, to read further packets from the stream,
+         * dns_stream_update() must be called explicitly. Currently, this is only called from
+         * on_stream_io(), and there dns_stream_update() is called. */
+
+        if (!s->read_packet)
+                return NULL;
+
+        if (s->n_read < sizeof(s->read_size))
+                return NULL;
+
+        if (s->n_read < sizeof(s->read_size) + be16toh(s->read_size))
+                return NULL;
+
+        s->n_read = 0;
+        return TAKE_PTR(s->read_packet);
+}
+
 static int on_stream_io(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
         _cleanup_(dns_stream_unrefp) DnsStream *s = dns_stream_ref(userdata); /* Protect stream while we process it */
         bool progressed = false;
@@ -324,7 +335,7 @@
 
                 ssize_t ss = dns_stream_writev(s, iov, ELEMENTSOF(iov), 0);
                 if (ss < 0) {
-                        if (!IN_SET(-ss, EINTR, EAGAIN))
+                        if (!ERRNO_IS_TRANSIENT(ss))
                                 return dns_stream_complete(s, -ss);
                 } else {
                         progressed = true;
@@ -339,17 +350,18 @@
                 }
         }
 
-        if ((revents & (EPOLLIN|EPOLLHUP|EPOLLRDHUP)) &&
-            (!s->read_packet ||
-             s->n_read < sizeof(s->read_size) + s->read_packet->size)) {
+        while ((revents & (EPOLLIN|EPOLLHUP|EPOLLRDHUP)) &&
+               (!s->read_packet ||
+                s->n_read < sizeof(s->read_size) + s->read_packet->size)) {
 
                 if (s->n_read < sizeof(s->read_size)) {
                         ssize_t ss;
 
                         ss = dns_stream_read(s, (uint8_t*) &s->read_size + s->n_read, sizeof(s->read_size) - s->n_read);
                         if (ss < 0) {
-                                if (!IN_SET(-ss, EINTR, EAGAIN))
+                                if (!ERRNO_IS_TRANSIENT(ss))
                                         return dns_stream_complete(s, -ss);
+                                break;
                         } else if (ss == 0)
                                 return dns_stream_complete(s, ECONNRESET);
                         else {
@@ -376,7 +388,7 @@
                                         s->read_packet->family = s->peer.sa.sa_family;
                                         s->read_packet->ttl = s->ttl;
                                         s->read_packet->ifindex = s->ifindex;
-                                        s->read_packet->timestamp = now(clock_boottime_or_monotonic());
+                                        s->read_packet->timestamp = now(CLOCK_BOOTTIME);
 
                                         if (s->read_packet->family == AF_INET) {
                                                 s->read_packet->sender.in = s->peer.in.sin_addr;
@@ -401,43 +413,46 @@
                                           (uint8_t*) DNS_PACKET_DATA(s->read_packet) + s->n_read - sizeof(s->read_size),
                                           sizeof(s->read_size) + be16toh(s->read_size) - s->n_read);
                                 if (ss < 0) {
-                                        if (!IN_SET(-ss, EINTR, EAGAIN))
+                                        if (!ERRNO_IS_TRANSIENT(ss))
                                                 return dns_stream_complete(s, -ss);
+                                        break;
                                 } else if (ss == 0)
                                         return dns_stream_complete(s, ECONNRESET);
                                 else
                                         s->n_read += ss;
                         }
 
-                        /* Are we done? If so, disable the event source for EPOLLIN */
-                        if (s->n_read >= sizeof(s->read_size) + be16toh(s->read_size)) {
-                                /* If there's a packet handler
-                                 * installed, call that. Note that
-                                 * this is optional... */
-                                if (s->on_packet) {
-                                        r = s->on_packet(s);
-                                        if (r < 0)
-                                                return r;
-                                }
+                        /* Are we done? If so, call the packet handler and re-enable EPOLLIN for the
+                         * event source if necessary. */
+                        _cleanup_(dns_packet_unrefp) DnsPacket *p = dns_stream_take_read_packet(s);
+                        if (p) {
+                                assert(s->on_packet);
+                                r = s->on_packet(s, p);
+                                if (r < 0)
+                                        return r;
 
                                 r = dns_stream_update_io(s);
                                 if (r < 0)
                                         return dns_stream_complete(s, -r);
+
+                                s->packet_received = true;
+
+                                /* If we just disabled the read event, stop reading */
+                                if (!FLAGS_SET(s->requested_events, EPOLLIN))
+                                        break;
                         }
                 }
         }
 
-        /* Call "complete" callback if finished reading and writing one packet, and there's nothing else left
-         * to write. */
-        if (s->type == DNS_STREAM_LLMNR_SEND &&
-            (s->write_packet && s->n_written >= sizeof(s->write_size) + s->write_packet->size) &&
-            ordered_set_isempty(s->write_queue) &&
-            (s->read_packet && s->n_read >= sizeof(s->read_size) + s->read_packet->size))
+        /* Complete the stream if finished reading and writing one packet, and there's nothing
+         * else left to write. */
+        if (s->type == DNS_STREAM_LLMNR_SEND && s->packet_received &&
+            !FLAGS_SET(s->requested_events, EPOLLOUT))
                 return dns_stream_complete(s, 0);
 
         /* If we did something, let's restart the timeout event source */
         if (progressed && s->timeout_event_source) {
-                r = sd_event_source_set_time_relative(s->timeout_event_source, DNS_STREAM_TIMEOUT_USEC);
+                r = sd_event_source_set_time_relative(s->timeout_event_source, DNS_STREAM_ESTABLISHED_TIMEOUT_USEC);
                 if (r < 0)
                         log_warning_errno(errno, "Couldn't restart TCP connection timeout, ignoring: %m");
         }
@@ -482,7 +497,10 @@
                 DnsStreamType type,
                 DnsProtocol protocol,
                 int fd,
-                const union sockaddr_union *tfo_address) {
+                const union sockaddr_union *tfo_address,
+                int (on_packet)(DnsStream*, DnsPacket*),
+                int (complete)(DnsStream*, int), /* optional */
+                usec_t connect_timeout_usec) {
 
         _cleanup_(dns_stream_unrefp) DnsStream *s = NULL;
         int r;
@@ -494,6 +512,7 @@
         assert(protocol >= 0);
         assert(protocol < _DNS_PROTOCOL_MAX);
         assert(fd >= 0);
+        assert(on_packet);
 
         if (m->n_dns_streams[type] > DNS_STREAMS_MAX)
                 return -EBUSY;
@@ -504,7 +523,7 @@
 
         *s = (DnsStream) {
                 .n_ref = 1,
-                .fd = -1,
+                .fd = -EBADF,
                 .protocol = protocol,
                 .type = type,
         };
@@ -522,8 +541,8 @@
         r = sd_event_add_time_relative(
                         m->event,
                         &s->timeout_event_source,
-                        clock_boottime_or_monotonic(),
-                        DNS_STREAM_TIMEOUT_USEC, 0,
+                        CLOCK_BOOTTIME,
+                        connect_timeout_usec, 0,
                         on_stream_timeout, s);
         if (r < 0)
                 return r;
@@ -535,6 +554,8 @@
         s->manager = m;
 
         s->fd = fd;
+        s->on_packet = on_packet;
+        s->complete = complete;
 
         if (tfo_address) {
                 s->tfo_address = *tfo_address;
@@ -561,22 +582,6 @@
         return dns_stream_update_io(s);
 }
 
-DnsPacket *dns_stream_take_read_packet(DnsStream *s) {
-        assert(s);
-
-        if (!s->read_packet)
-                return NULL;
-
-        if (s->n_read < sizeof(s->read_size))
-                return NULL;
-
-        if (s->n_read < sizeof(s->read_size) + be16toh(s->read_size))
-                return NULL;
-
-        s->n_read = 0;
-        return TAKE_PTR(s->read_packet);
-}
-
 void dns_stream_detach(DnsStream *s) {
         assert(s);
 
diff --git a/src/resolve/resolved-dns-stream.h b/src/resolve/resolved-dns-stream.h
index 470d446..ba4a59e 100644
--- a/src/resolve/resolved-dns-stream.h
+++ b/src/resolve/resolved-dns-stream.h
@@ -15,6 +15,18 @@
 #include "resolved-dns-packet.h"
 #include "resolved-dnstls.h"
 
+/* Various timeouts for establishing TCP connections. First the default time-out for that. */
+#define DNS_STREAM_DEFAULT_TIMEOUT_USEC (10 * USEC_PER_SEC)
+
+/* In the DNS stub, be more friendly for incoming connections, than we are to ourselves for outgoing ones */
+#define DNS_STREAM_STUB_TIMEOUT_USEC (30 * USEC_PER_SEC)
+
+/* In opportunistic TLS mode, lower timeouts */
+#define DNS_STREAM_OPPORTUNISTIC_TLS_TIMEOUT_USEC (3 * USEC_PER_SEC)
+
+/* Once connections are established apply this timeout once nothing happens anymore */
+#define DNS_STREAM_ESTABLISHED_TIMEOUT_USEC (10 * USEC_PER_SEC)
+
 typedef enum DnsStreamType {
         DNS_STREAM_LOOKUP,        /* Outgoing connection to a classic DNS server */
         DNS_STREAM_LLMNR_SEND,    /* Outgoing LLMNR TCP lookup */
@@ -48,6 +60,8 @@
         int ifindex;
         uint32_t ttl;
         bool identified;
+        bool packet_received; /* At least one packet is received. Used by LLMNR. */
+        uint32_t requested_events;
 
         /* only when using TCP fast open */
         union sockaddr_union tfo_address;
@@ -55,7 +69,7 @@
 
 #if ENABLE_DNS_OVER_TLS
         DnsTlsStreamData dnstls_data;
-        int dnstls_events;
+        uint32_t dnstls_events;
 #endif
 
         sd_event_source *io_event_source;
@@ -66,7 +80,7 @@
         size_t n_written, n_read;
         OrderedSet *write_queue;
 
-        int (*on_packet)(DnsStream *s);
+        int (*on_packet)(DnsStream *s, DnsPacket *p);
         int (*complete)(DnsStream *s, int error);
 
         LIST_HEAD(DnsTransaction, transactions); /* when used by the transaction logic */
@@ -81,7 +95,16 @@
         LIST_FIELDS(DnsStream, streams);
 };
 
-int dns_stream_new(Manager *m, DnsStream **s, DnsStreamType type, DnsProtocol protocol, int fd, const union sockaddr_union *tfo_address);
+int dns_stream_new(
+                Manager *m,
+                DnsStream **ret,
+                DnsStreamType type,
+                DnsProtocol protocol,
+                int fd,
+                const union sockaddr_union *tfo_address,
+                int (on_packet)(DnsStream*, DnsPacket*),
+                int (complete)(DnsStream*, int), /* optional */
+                usec_t connect_timeout_usec);
 #if ENABLE_DNS_OVER_TLS
 int dns_stream_connect_tls(DnsStream *s, void *tls_session);
 #endif
@@ -102,6 +125,4 @@
         return !!s->write_packet;
 }
 
-DnsPacket *dns_stream_take_read_packet(DnsStream *s);
-
 void dns_stream_detach(DnsStream *s);
diff --git a/src/resolve/resolved-dns-stub.c b/src/resolve/resolved-dns-stub.c
index 400e741..3a7d697 100644
--- a/src/resolve/resolved-dns-stub.c
+++ b/src/resolve/resolved-dns-stub.c
@@ -3,6 +3,7 @@
 #include <net/if_arp.h>
 #include <netinet/tcp.h>
 
+#include "capability-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "missing_network.h"
@@ -21,6 +22,7 @@
 #define ADVERTISE_EXTRA_DATAGRAM_SIZE_MAX DNS_PACKET_UNICAST_SIZE_LARGE_MAX
 
 static int manager_dns_stub_fd_extra(Manager *m, DnsStubListenerExtra *l, int type);
+static int manager_dns_stub_fd(Manager *m, int family, const union in_addr_union *listen_address, int type);
 
 static void dns_stub_listener_extra_hash_func(const DnsStubListenerExtra *a, struct siphash *state) {
         assert(a);
@@ -483,6 +485,34 @@
         return 0;
 }
 
+static bool address_is_proxy(int family, const union in_addr_union *a) {
+        assert(a);
+
+        /* Returns true if the specified address is the DNS "proxy" stub, i.e. where we unconditionally enable bypass mode */
+
+        if (family != AF_INET)
+                return false;
+
+        return be32toh(a->in.s_addr) == INADDR_DNS_PROXY_STUB;
+}
+
+static int find_socket_fd(
+                Manager *m,
+                DnsStubListenerExtra *l,
+                int family,
+                const union in_addr_union *listen_address,
+                int type) {
+
+        assert(m);
+
+        /* Finds the right socket to use for sending. If we know the extra listener, otherwise go via the
+         * address to send from */
+        if (l)
+                return manager_dns_stub_fd_extra(m, l, type);
+
+        return manager_dns_stub_fd(m, family, listen_address, type);
+}
+
 static int dns_stub_send(
                 Manager *m,
                 DnsStubListenerExtra *l,
@@ -498,15 +528,30 @@
 
         if (s)
                 r = dns_stream_write_packet(s, reply);
-        else
-                /* Note that it is essential here that we explicitly choose the source IP address for this packet. This
-                 * is because otherwise the kernel will choose it automatically based on the routing table and will
-                 * thus pick 127.0.0.1 rather than 127.0.0.53. */
+        else {
+                int fd, ifindex;
+
+                fd = find_socket_fd(m, l, p->family, &p->destination, SOCK_DGRAM);
+                if (fd < 0)
+                        return fd;
+
+                if (address_is_proxy(p->family, &p->destination))
+                        /* Force loopback iface if this is the loopback proxy stub
+                         * and ifindex was normalized to 0 by manager_recv(). */
+                        ifindex = p->ifindex ?: LOOPBACK_IFINDEX;
+                else
+                        /* Force loopback iface if this is the main listener stub. */
+                        ifindex = l ? p->ifindex : LOOPBACK_IFINDEX;
+
+                /* Note that it is essential here that we explicitly choose the source IP address for this
+                 * packet. This is because otherwise the kernel will choose it automatically based on the
+                 * routing table and will thus pick 127.0.0.1 rather than 127.0.0.53/54. */
                 r = manager_send(m,
-                                 manager_dns_stub_fd_extra(m, l, SOCK_DGRAM),
-                                 l ? p->ifindex : LOOPBACK_IFINDEX, /* force loopback iface if this is the main listener stub */
+                                 fd,
+                                 ifindex,
                                  p->family, &p->sender, p->sender_port, &p->destination,
                                  reply);
+        }
         if (r < 0)
                 return log_debug_errno(r, "Failed to send reply packet: %m");
 
@@ -808,7 +853,7 @@
         case DNS_TRANSACTION_PENDING:
         case DNS_TRANSACTION_VALIDATING:
         default:
-                assert_not_reached("Impossible state");
+                assert_not_reached();
         }
 }
 
@@ -834,9 +879,11 @@
 }
 
 static void dns_stub_process_query(Manager *m, DnsStubListenerExtra *l, DnsStream *s, DnsPacket *p) {
+        uint64_t protocol_flags = SD_RESOLVED_PROTOCOLS_ALL;
         _cleanup_(dns_query_freep) DnsQuery *q = NULL;
         Hashmap **queries_by_packet;
         DnsQuery *existing;
+        bool bypass = false;
         int r;
 
         assert(m);
@@ -844,6 +891,7 @@
         assert(p->protocol == DNS_PROTOCOL_DNS);
 
         if (!l && /* l == NULL if this is the main stub */
+            !address_is_proxy(p->family, &p->destination) && /* don't restrict needlessly for 127.0.0.54 */
             (in_addr_is_localhost(p->family, &p->sender) <= 0 ||
              in_addr_is_localhost(p->family, &p->destination) <= 0)) {
                 log_warning("Got packet on unexpected (i.e. non-localhost) IP range, ignoring.");
@@ -900,19 +948,32 @@
                 return;
         }
 
-        if (DNS_PACKET_DO(p) && DNS_PACKET_CD(p)) {
-                log_debug("Got request with DNSSEC checking disabled, enabling bypass logic.");
+        if (address_is_proxy(p->family, &p->destination)) {
+                _cleanup_free_ char *dipa = NULL;
 
+                r = in_addr_to_string(p->family, &p->destination, &dipa);
+                if (r < 0)
+                        return (void) log_error_errno(r, "Failed to format destination address: %m");
+
+                log_debug("Got request to DNS proxy address 127.0.0.54, enabling bypass logic.");
+                bypass = true;
+                protocol_flags = SD_RESOLVED_DNS|SD_RESOLVED_NO_ZONE; /* Turn off mDNS/LLMNR for proxy stub. */
+        } else if ((DNS_PACKET_DO(p) && DNS_PACKET_CD(p))) {
+                log_debug("Got request with DNSSEC checking disabled, enabling bypass logic.");
+                bypass = true;
+        }
+
+        if (bypass)
                 r = dns_query_new(m, &q, NULL, NULL, p, 0,
-                                  SD_RESOLVED_PROTOCOLS_ALL|
+                                  protocol_flags|
                                   SD_RESOLVED_NO_CNAME|
                                   SD_RESOLVED_NO_SEARCH|
                                   SD_RESOLVED_NO_VALIDATE|
                                   SD_RESOLVED_REQUIRE_PRIMARY|
                                   SD_RESOLVED_CLAMP_TTL);
-        } else
+        else
                 r = dns_query_new(m, &q, p->question, p->question, NULL, 0,
-                                  SD_RESOLVED_PROTOCOLS_ALL|
+                                  protocol_flags|
                                   SD_RESOLVED_NO_SEARCH|
                                   (DNS_PACKET_DO(p) ? SD_RESOLVED_REQUIRE_PRIMARY : 0)|
                                   SD_RESOLVED_CLAMP_TTL);
@@ -978,19 +1039,14 @@
 }
 
 static int on_dns_stub_packet_extra(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        DnsStubListenerExtra *l = userdata;
-
-        assert(l);
+        DnsStubListenerExtra *l = ASSERT_PTR(userdata);
 
         return on_dns_stub_packet_internal(s, fd, revents, l->manager, l);
 }
 
-static int on_dns_stub_stream_packet(DnsStream *s) {
-        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
-
+static int on_dns_stub_stream_packet(DnsStream *s, DnsPacket *p) {
         assert(s);
-
-        p = dns_stream_take_read_packet(s);
+        assert(s->manager);
         assert(p);
 
         if (dns_packet_validate_query(p) > 0) {
@@ -1015,15 +1071,14 @@
                 return -errno;
         }
 
-        r = dns_stream_new(m, &stream, DNS_STREAM_STUB, DNS_PROTOCOL_DNS, cfd, NULL);
+        r = dns_stream_new(m, &stream, DNS_STREAM_STUB, DNS_PROTOCOL_DNS, cfd, NULL,
+                           on_dns_stub_stream_packet, dns_stub_stream_complete, DNS_STREAM_STUB_TIMEOUT_USEC);
         if (r < 0) {
                 safe_close(cfd);
                 return r;
         }
 
         stream->stub_listener_extra = l;
-        stream->on_packet = on_dns_stub_stream_packet;
-        stream->complete = dns_stub_stream_complete;
 
         /* We let the reference to the stream dangle here, it will be dropped later by the complete callback. */
 
@@ -1035,9 +1090,8 @@
 }
 
 static int on_dns_stub_stream_extra(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        DnsStubListenerExtra *l = userdata;
+        DnsStubListenerExtra *l = ASSERT_PTR(userdata);
 
-        assert(l);
         return on_dns_stub_stream_internal(s, fd, revents, l->manager, l);
 }
 
@@ -1078,26 +1132,35 @@
         return 0;
 }
 
-static int manager_dns_stub_fd(Manager *m, int type) {
-        union sockaddr_union sa = {
-                .in.sin_family = AF_INET,
-                .in.sin_addr.s_addr = htobe32(INADDR_DNS_STUB),
-                .in.sin_port = htobe16(53),
-        };
-        _cleanup_close_ int fd = -1;
+static int manager_dns_stub_fd(
+                Manager *m,
+                int family,
+                const union in_addr_union *listen_addr,
+                int type) {
+
+        sd_event_source **event_source;
+        _cleanup_close_ int fd = -EBADF;
+        union sockaddr_union sa;
         int r;
 
-        assert(IN_SET(type, SOCK_DGRAM, SOCK_STREAM));
+        assert(m);
+        assert(listen_addr);
 
-        sd_event_source **event_source = type == SOCK_DGRAM ? &m->dns_stub_udp_event_source : &m->dns_stub_tcp_event_source;
+        if (type == SOCK_DGRAM)
+                event_source = address_is_proxy(family, listen_addr) ? &m->dns_proxy_stub_udp_event_source : &m->dns_stub_udp_event_source;
+        else if (type == SOCK_STREAM)
+                event_source = address_is_proxy(family, listen_addr) ? &m->dns_proxy_stub_tcp_event_source : &m->dns_stub_tcp_event_source;
+        else
+                return -EPROTONOSUPPORT;
+
         if (*event_source)
                 return sd_event_source_get_io_fd(*event_source);
 
-        fd = socket(AF_INET, type | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
+        fd = socket(family, type | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
         if (fd < 0)
                 return -errno;
 
-        r = set_dns_stub_common_socket_options(fd, AF_INET);
+        r = set_dns_stub_common_socket_options(fd, family);
         if (r < 0)
                 return r;
 
@@ -1107,12 +1170,34 @@
                         return r;
         }
 
-        /* Make sure no traffic from outside the local host can leak to onto this socket */
-        r = socket_bind_to_ifindex(fd, LOOPBACK_IFINDEX);
-        if (r < 0)
-                return r;
+        /* Set slightly different socket options for the non-proxy and the proxy binding. The former we want
+         * to be accessible only from the local host, for the latter it's OK if people use NAT redirects or
+         * so to redirect external traffic to it. */
 
-        r = setsockopt_int(fd, IPPROTO_IP, IP_TTL, 1);
+        if (!address_is_proxy(family, listen_addr)) {
+                /* Make sure no traffic from outside the local host can leak to onto this socket */
+                r = socket_bind_to_ifindex(fd, LOOPBACK_IFINDEX);
+                if (r < 0)
+                        return r;
+
+                r = socket_set_ttl(fd, family, 1);
+                if (r < 0)
+                        return r;
+        } else if (type == SOCK_DGRAM) {
+                /* Turn off Path MTU Discovery for UDP, for security reasons. See socket_disable_pmtud() for
+                 * a longer discussion. (We only do this for sockets that are potentially externally
+                 * accessible, i.e. the proxy stub one. For the non-proxy one we instead set the TTL to 1,
+                 * see above, so that packets don't get routed at all.) */
+                r = socket_disable_pmtud(fd, family);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to disable UDP PMTUD, ignoring: %m");
+
+                r = socket_set_recvfragsize(fd, family, true);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to enable fragment size reception, ignoring: %m");
+        }
+
+        r = sockaddr_set_in_addr(&sa, family, listen_addr, 53);
         if (r < 0)
                 return r;
 
@@ -1141,20 +1226,24 @@
 
 static int manager_dns_stub_fd_extra(Manager *m, DnsStubListenerExtra *l, int type) {
         _cleanup_free_ char *pretty = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         union sockaddr_union sa;
         int r;
 
         assert(m);
+        assert(l);
         assert(IN_SET(type, SOCK_DGRAM, SOCK_STREAM));
 
-        if (!l)
-                return manager_dns_stub_fd(m, type);
-
         sd_event_source **event_source = type == SOCK_DGRAM ? &l->udp_event_source : &l->tcp_event_source;
         if (*event_source)
                 return sd_event_source_get_io_fd(*event_source);
 
+        if (!have_effective_cap(CAP_NET_BIND_SERVICE) && dns_stub_listener_extra_port(l) < 1024) {
+                log_warning("Missing CAP_NET_BIND_SERVICE capability, not creating extra stub listener on port %hu.",
+                            dns_stub_listener_extra_port(l));
+                return 0;
+        }
+
         if (l->family == AF_INET)
                 sa = (union sockaddr_union) {
                         .in.sin_family = l->family,
@@ -1201,10 +1290,9 @@
                         log_debug_errno(r, "Failed to enable fragment size reception, ignoring: %m");
         }
 
-        if (bind(fd, &sa.sa, SOCKADDR_LEN(sa)) < 0) {
-                r = -errno;
+        r = RET_NERRNO(bind(fd, &sa.sa, SOCKADDR_LEN(sa)));
+        if (r < 0)
                 goto fail;
-        }
 
         if (type == SOCK_STREAM &&
             listen(fd, SOMAXCONN) < 0) {
@@ -1245,39 +1333,66 @@
 }
 
 int manager_dns_stub_start(Manager *m) {
-        const char *t = "UDP";
-        int r = 0;
+        int r;
 
         assert(m);
 
         if (m->dns_stub_listener_mode == DNS_STUB_LISTENER_NO)
                 log_debug("Not creating stub listener.");
-        else
+        else if (!have_effective_cap(CAP_NET_BIND_SERVICE))
+                log_warning("Missing CAP_NET_BIND_SERVICE capability, not creating stub listener on port 53.");
+        else {
+                static const struct {
+                        uint32_t addr;
+                        int socket_type;
+                } stub_sockets[] = {
+                        { INADDR_DNS_STUB,       SOCK_DGRAM  },
+                        { INADDR_DNS_STUB,       SOCK_STREAM },
+                        { INADDR_DNS_PROXY_STUB, SOCK_DGRAM  },
+                        { INADDR_DNS_PROXY_STUB, SOCK_STREAM },
+                };
+
                 log_debug("Creating stub listener using %s.",
                           m->dns_stub_listener_mode == DNS_STUB_LISTENER_UDP ? "UDP" :
                           m->dns_stub_listener_mode == DNS_STUB_LISTENER_TCP ? "TCP" :
                           "UDP/TCP");
 
-        if (FLAGS_SET(m->dns_stub_listener_mode, DNS_STUB_LISTENER_UDP))
-                r = manager_dns_stub_fd(m, SOCK_DGRAM);
+                for (size_t i = 0; i < ELEMENTSOF(stub_sockets); i++) {
+                        union in_addr_union a = {
+                                .in.s_addr = htobe32(stub_sockets[i].addr),
+                        };
 
-        if (r >= 0 &&
-            FLAGS_SET(m->dns_stub_listener_mode, DNS_STUB_LISTENER_TCP)) {
-                t = "TCP";
-                r = manager_dns_stub_fd(m, SOCK_STREAM);
+                        if (m->dns_stub_listener_mode == DNS_STUB_LISTENER_UDP && stub_sockets[i].socket_type == SOCK_STREAM)
+                                continue;
+                        if (m->dns_stub_listener_mode == DNS_STUB_LISTENER_TCP && stub_sockets[i].socket_type == SOCK_DGRAM)
+                                continue;
+
+                        r = manager_dns_stub_fd(m, AF_INET, &a, stub_sockets[i].socket_type);
+                        if (r < 0) {
+                                _cleanup_free_ char *busy_socket = NULL;
+
+                                if (asprintf(&busy_socket,
+                                             "%s socket " IPV4_ADDRESS_FMT_STR ":53",
+                                             stub_sockets[i].socket_type == SOCK_DGRAM ? "UDP" : "TCP",
+                                             IPV4_ADDRESS_FMT_VAL(a.in)) < 0)
+                                        return log_oom();
+
+                                if (IN_SET(r, -EADDRINUSE, -EPERM)) {
+                                        log_warning_errno(r,
+                                                          r == -EADDRINUSE ? "Another process is already listening on %s.\n"
+                                                          "Turning off local DNS stub support." :
+                                                          "Failed to listen on %s: %m.\n"
+                                          "Turning off local DNS stub support.",
+                                                          busy_socket);
+                                        manager_dns_stub_stop(m);
+                                        break;
+                                }
+
+                                return log_error_errno(r, "Failed to listen on %s: %m", busy_socket);
+                        }
+                }
         }
 
-        if (IN_SET(r, -EADDRINUSE, -EPERM)) {
-                log_warning_errno(r,
-                                  r == -EADDRINUSE ? "Another process is already listening on %s socket 127.0.0.53:53.\n"
-                                                     "Turning off local DNS stub support." :
-                                                     "Failed to listen on %s socket 127.0.0.53:53: %m.\n"
-                                                     "Turning off local DNS stub support.",
-                                  t);
-                manager_dns_stub_stop(m);
-        } else if (r < 0)
-                return log_error_errno(r, "Failed to listen on %s socket 127.0.0.53:53: %m", t);
-
         if (!ordered_set_isempty(m->dns_extra_stub_listeners)) {
                 DnsStubListenerExtra *l;
 
@@ -1299,6 +1414,8 @@
 
         m->dns_stub_udp_event_source = sd_event_source_disable_unref(m->dns_stub_udp_event_source);
         m->dns_stub_tcp_event_source = sd_event_source_disable_unref(m->dns_stub_tcp_event_source);
+        m->dns_proxy_stub_udp_event_source = sd_event_source_disable_unref(m->dns_proxy_stub_udp_event_source);
+        m->dns_proxy_stub_tcp_event_source = sd_event_source_disable_unref(m->dns_proxy_stub_tcp_event_source);
 }
 
 static const char* const dns_stub_listener_mode_table[_DNS_STUB_LISTENER_MODE_MAX] = {
diff --git a/src/resolve/resolved-dns-synthesize.c b/src/resolve/resolved-dns-synthesize.c
index 0914515..5bde29c 100644
--- a/src/resolve/resolved-dns-synthesize.c
+++ b/src/resolve/resolved-dns-synthesize.c
@@ -1,25 +1,12 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
+#include "env-util.h"
 #include "hostname-util.h"
 #include "local-addresses.h"
 #include "missing_network.h"
 #include "resolved-dns-synthesize.h"
 
-int dns_synthesize_ifindex(int ifindex) {
-
-        /* When the caller asked for resolving on a specific
-         * interface, we synthesize the answer for that
-         * interface. However, if nothing specific was claimed and we
-         * only return localhost RRs, we synthesize the answer for
-         * localhost. */
-
-        if (ifindex > 0)
-                return ifindex;
-
-        return LOOPBACK_IFINDEX;
-}
-
 int dns_synthesize_family(uint64_t flags) {
 
         /* Picks an address family depending on set flags. This is
@@ -56,7 +43,7 @@
         return DNS_PROTOCOL_DNS;
 }
 
-static int synthesize_localhost_rr(Manager *m, const DnsResourceKey *key, int ifindex, DnsAnswer **answer) {
+static int synthesize_localhost_rr(Manager *m, const DnsResourceKey *key, DnsAnswer **answer) {
         int r;
 
         assert(m);
@@ -76,7 +63,7 @@
 
                 rr->a.in_addr.s_addr = htobe32(INADDR_LOOPBACK);
 
-                r = dns_answer_add(*answer, rr, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED, NULL);
+                r = dns_answer_add(*answer, rr, LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED, NULL);
                 if (r < 0)
                         return r;
         }
@@ -90,7 +77,7 @@
 
                 rr->aaaa.in6_addr = in6addr_loopback;
 
-                r = dns_answer_add(*answer, rr, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED, NULL);
+                r = dns_answer_add(*answer, rr, LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED, NULL);
                 if (r < 0)
                         return r;
         }
@@ -112,7 +99,7 @@
         return dns_answer_add(*answer, rr, ifindex, flags, NULL);
 }
 
-static int synthesize_localhost_ptr(Manager *m, const DnsResourceKey *key, int ifindex, DnsAnswer **answer) {
+static int synthesize_localhost_ptr(Manager *m, const DnsResourceKey *key, DnsAnswer **answer) {
         int r;
 
         assert(m);
@@ -124,7 +111,7 @@
                 if (r < 0)
                         return r;
 
-                r = answer_add_ptr(answer, dns_resource_key_name(key), "localhost", dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED);
+                r = answer_add_ptr(answer, dns_resource_key_name(key), "localhost", LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED);
                 if (r < 0)
                         return r;
         }
@@ -224,20 +211,19 @@
                 if (n == 0) {
                         struct local_address buffer[2];
 
-                        /* If we have no local addresses then use ::1
-                         * and 127.0.0.2 as local ones. */
+                        /* If we have no local addresses then use ::1 and 127.0.0.2 as local ones. */
 
                         if (IN_SET(af, AF_INET, AF_UNSPEC))
                                 buffer[n++] = (struct local_address) {
                                         .family = AF_INET,
-                                        .ifindex = dns_synthesize_ifindex(ifindex),
-                                        .address.in.s_addr = htobe32(0x7F000002),
+                                        .ifindex = LOOPBACK_IFINDEX,
+                                        .address.in.s_addr = htobe32(INADDR_LOCALADDRESS),
                                 };
 
                         if (IN_SET(af, AF_INET6, AF_UNSPEC) && socket_ipv6_is_enabled())
                                 buffer[n++] = (struct local_address) {
                                         .family = AF_INET6,
-                                        .ifindex = dns_synthesize_ifindex(ifindex),
+                                        .ifindex = LOOPBACK_IFINDEX,
                                         .address.in6 = in6addr_loopback,
                                 };
 
@@ -259,7 +245,7 @@
         assert(address);
         assert(answer);
 
-        if (af == AF_INET && address->in.s_addr == htobe32(0x7F000002)) {
+        if (af == AF_INET && address->in.s_addr == htobe32(INADDR_LOCALADDRESS)) {
 
                 /* Always map the IPv4 address 127.0.0.2 to the local hostname, in addition to "localhost": */
 
@@ -267,19 +253,19 @@
                 if (r < 0)
                         return r;
 
-                r = answer_add_ptr(answer, "2.0.0.127.in-addr.arpa", m->full_hostname, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED);
+                r = answer_add_ptr(answer, "2.0.0.127.in-addr.arpa", m->full_hostname, LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED);
                 if (r < 0)
                         return r;
 
-                r = answer_add_ptr(answer, "2.0.0.127.in-addr.arpa", m->llmnr_hostname, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED);
+                r = answer_add_ptr(answer, "2.0.0.127.in-addr.arpa", m->llmnr_hostname, LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED);
                 if (r < 0)
                         return r;
 
-                r = answer_add_ptr(answer, "2.0.0.127.in-addr.arpa", m->mdns_hostname, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED);
+                r = answer_add_ptr(answer, "2.0.0.127.in-addr.arpa", m->mdns_hostname, LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED);
                 if (r < 0)
                         return r;
 
-                r = answer_add_ptr(answer, "2.0.0.127.in-addr.arpa", "localhost", dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED);
+                r = answer_add_ptr(answer, "2.0.0.127.in-addr.arpa", "localhost", LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED);
                 if (r < 0)
                         return r;
 
@@ -355,7 +341,90 @@
         return 1; /* > 0 means: we have some gateway */
 }
 
-static int synthesize_gateway_ptr(Manager *m, int af, const union in_addr_union *address, int ifindex, DnsAnswer **answer) {
+static int synthesize_dns_stub_rr(
+                Manager *m,
+                const DnsResourceKey *key,
+                in_addr_t addr,
+                DnsAnswer **answer) {
+
+        _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
+        int r;
+
+        assert(m);
+        assert(key);
+        assert(answer);
+
+        if (!IN_SET(key->type, DNS_TYPE_A, DNS_TYPE_ANY))
+                return 1; /* we still consider ourselves the owner of this name */
+
+        r = dns_answer_reserve(answer, 1);
+        if (r < 0)
+                return r;
+
+        rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, dns_resource_key_name(key));
+        if (!rr)
+                return -ENOMEM;
+
+        rr->a.in_addr.s_addr = htobe32(addr);
+
+        r = dns_answer_add(*answer, rr, LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED, NULL);
+        if (r < 0)
+                return r;
+
+        return 1;
+}
+
+static int synthesize_dns_stub_ptr(
+                Manager *m,
+                int af,
+                const union in_addr_union *address,
+                DnsAnswer **answer) {
+
+        int r;
+
+        assert(m);
+        assert(address);
+        assert(answer);
+
+        if (af != AF_INET)
+                return 0;
+
+        if (address->in.s_addr == htobe32(INADDR_DNS_STUB)) {
+
+                r = dns_answer_reserve(answer, 1);
+                if (r < 0)
+                        return r;
+
+                r = answer_add_ptr(answer, "53.0.0.127.in-addr.arpa", "_localdnsstub", LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED);
+                if (r < 0)
+                        return r;
+
+                return 1;
+        }
+
+        if (address->in.s_addr == htobe32(INADDR_DNS_PROXY_STUB)) {
+
+                r = dns_answer_reserve(answer, 1);
+                if (r < 0)
+                        return r;
+
+                r = answer_add_ptr(answer, "54.0.0.127.in-addr.arpa", "_localdnsproxy", LOOPBACK_IFINDEX, DNS_ANSWER_AUTHENTICATED);
+                if (r < 0)
+                        return r;
+
+                return 1;
+        }
+
+        return 0;
+}
+
+static int synthesize_gateway_ptr(
+                Manager *m,
+                int af,
+                const union in_addr_union *address,
+                int ifindex,
+                DnsAnswer **answer) {
+
         _cleanup_free_ struct local_address *addresses = NULL;
         int n;
 
@@ -394,25 +463,24 @@
 
                 name = dns_resource_key_name(key);
 
-                if (dns_name_is_empty(name)) {
+                if (dns_name_is_root(name)) {
                         /* Do nothing. */
 
-                } else if (dns_name_endswith(name, "0.in-addr.arpa") > 0 ||
-                           dns_name_equal(name, "255.255.255.255.in-addr.arpa") > 0 ||
-                           dns_name_equal(name, "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa") > 0 ||
-                           dns_name_endswith(name, "invalid") > 0) {
-
+                } else if (dns_name_dont_resolve(name)) {
+                        /* Synthesize NXDOMAIN for some of the domains in RFC6303 + RFC6761 */
                         nxdomain = true;
                         continue;
 
                 } else if (is_localhost(name)) {
 
-                        r = synthesize_localhost_rr(m, key, ifindex, &answer);
+                        r = synthesize_localhost_rr(m, key, &answer);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to synthesize localhost RRs: %m");
 
                 } else if (manager_is_own_hostname(m, name)) {
 
+                        if (getenv_bool("SYSTEMD_RESOLVED_SYNTHESIZE_HOSTNAME") == 0)
+                                continue;
                         r = synthesize_system_hostname_rr(m, key, ifindex, &answer);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to synthesize system hostname RRs: %m");
@@ -437,15 +505,33 @@
                                 continue;
                         }
 
-                } else if ((dns_name_endswith(name, "127.in-addr.arpa") > 0 && dns_name_equal(name, "2.0.0.127.in-addr.arpa") == 0) ||
+                } else if (is_dns_stub_hostname(name)) {
+
+                        r = synthesize_dns_stub_rr(m, key, INADDR_DNS_STUB, &answer);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to synthesize local DNS stub RRs: %m");
+
+                } else if (is_dns_proxy_stub_hostname(name)) {
+
+                        r = synthesize_dns_stub_rr(m, key, INADDR_DNS_PROXY_STUB, &answer);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to synthesize local DNS stub RRs: %m");
+
+                } else if ((dns_name_endswith(name, "127.in-addr.arpa") > 0 &&
+                            dns_name_equal(name, "2.0.0.127.in-addr.arpa") == 0 &&
+                            dns_name_equal(name, "53.0.0.127.in-addr.arpa") == 0 &&
+                            dns_name_equal(name, "54.0.0.127.in-addr.arpa") == 0) ||
                            dns_name_equal(name, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa") > 0) {
 
-                        r = synthesize_localhost_ptr(m, key, ifindex, &answer);
+                        r = synthesize_localhost_ptr(m, key, &answer);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to synthesize localhost PTR RRs: %m");
 
                 } else if (dns_name_address(name, &af, &address) > 0) {
-                        int v, w;
+                        int v, w, u;
+
+                        if (getenv_bool("SYSTEMD_RESOLVED_SYNTHESIZE_HOSTNAME") == 0)
+                                continue;
 
                         v = synthesize_system_hostname_ptr(m, af, &address, ifindex, &answer);
                         if (v < 0)
@@ -455,7 +541,11 @@
                         if (w < 0)
                                 return log_error_errno(w, "Failed to synthesize gateway hostname PTR RR: %m");
 
-                        if (v == 0 && w == 0) /* This IP address is neither a local one nor a gateway */
+                        u = synthesize_dns_stub_ptr(m, af, &address, &answer);
+                        if (u < 0)
+                                return log_error_errno(u, "Failed to synthesize local stub hostname PTR PR: %m");
+
+                        if (v == 0 && w == 0 && u == 0) /* This IP address is neither a local one, nor a gateway, nor a stub address */
                                 continue;
 
                         /* Note that we never synthesize reverse PTR for _outbound, since those are local
diff --git a/src/resolve/resolved-dns-synthesize.h b/src/resolve/resolved-dns-synthesize.h
index fb62458..bf271e8 100644
--- a/src/resolve/resolved-dns-synthesize.h
+++ b/src/resolve/resolved-dns-synthesize.h
@@ -5,7 +5,6 @@
 #include "resolved-dns-question.h"
 #include "resolved-manager.h"
 
-int dns_synthesize_ifindex(int ifindex);
 int dns_synthesize_family(uint64_t flags);
 DnsProtocol dns_synthesize_protocol(uint64_t flags);
 
diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c
index cf10c5c..3f99469 100644
--- a/src/resolve/resolved-dns-transaction.c
+++ b/src/resolve/resolved-dns-transaction.c
@@ -8,6 +8,7 @@
 #include "errno-list.h"
 #include "errno-util.h"
 #include "fd-util.h"
+#include "glyph-util.h"
 #include "random-util.h"
 #include "resolved-dns-cache.h"
 #include "resolved-dns-transaction.h"
@@ -272,7 +273,7 @@
                 return -ENOMEM;
 
         *t = (DnsTransaction) {
-                .dns_udp_fd = -1,
+                .dns_udp_fd = -EBADF,
                 .answer_source = _DNS_TRANSACTION_SOURCE_INVALID,
                 .answer_dnssec_result = _DNSSEC_RESULT_INVALID,
                 .answer_nsec_ttl = UINT32_MAX,
@@ -333,7 +334,6 @@
 }
 
 static void dns_transaction_tentative(DnsTransaction *t, DnsPacket *p) {
-        _cleanup_free_ char *pretty = NULL;
         char key_str[DNS_RESOURCE_KEY_STRING_MAX];
         DnsZoneItem *z;
 
@@ -344,15 +344,13 @@
         if (manager_packet_from_local_address(t->scope->manager, p) != 0)
                 return;
 
-        (void) in_addr_to_string(p->family, &p->sender, &pretty);
-
         log_debug("Transaction %" PRIu16 " for <%s> on scope %s on %s/%s got tentative packet from %s.",
                   t->id,
                   dns_resource_key_to_string(dns_transaction_key(t), key_str, sizeof key_str),
                   dns_protocol_to_string(t->scope->protocol),
                   t->scope->link ? t->scope->link->ifname : "*",
                   af_to_name_short(t->scope->family),
-                  strnull(pretty));
+                  IN_ADDR_TO_STRING(p->family, &p->sender));
 
         /* RFC 4795, Section 4.1 says that the peer with the
          * lexicographically smaller IP address loses */
@@ -394,7 +392,8 @@
 
                 log_struct(LOG_NOTICE,
                            "MESSAGE_ID=" SD_MESSAGE_DNSSEC_FAILURE_STR,
-                           LOG_MESSAGE("DNSSEC validation failed for question %s: %s", key_str, dnssec_result_to_string(t->answer_dnssec_result)),
+                           LOG_MESSAGE("DNSSEC validation failed for question %s: %s",
+                                       key_str, dnssec_result_to_string(t->answer_dnssec_result)),
                            "DNS_TRANSACTION=%" PRIu16, t->id,
                            "DNS_QUESTION=%s", key_str,
                            "DNSSEC_RESULT=%s", dnssec_result_to_string(t->answer_dnssec_result),
@@ -634,24 +633,19 @@
                 }
         }
 
-        if (error != 0) {
-                DnsTransaction *t, *n;
-
-                LIST_FOREACH_SAFE(transactions_by_stream, t, n, s->transactions)
+        if (error != 0)
+                LIST_FOREACH(transactions_by_stream, t, s->transactions)
                         on_transaction_stream_error(t, error);
-        }
 
         return 0;
 }
 
-static int on_stream_packet(DnsStream *s) {
-        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
+static int on_stream_packet(DnsStream *s, DnsPacket *p) {
         DnsTransaction *t;
 
         assert(s);
-
-        /* Take ownership of packet to be able to receive new packets */
-        assert_se(p = dns_stream_take_read_packet(s));
+        assert(s->manager);
+        assert(p);
 
         t = hashmap_get(s->manager->dns_transactions, UINT_TO_PTR(DNS_PACKET_ID(p)));
         if (t && t->stream == s) /* Validate that the stream we got this on actually is the stream the
@@ -673,8 +667,9 @@
 }
 
 static int dns_transaction_emit_tcp(DnsTransaction *t) {
+        usec_t stream_timeout_usec = DNS_STREAM_DEFAULT_TIMEOUT_USEC;
         _cleanup_(dns_stream_unrefp) DnsStream *s = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         union sockaddr_union sa;
         DnsStreamType type;
         int r;
@@ -708,6 +703,14 @@
                 else
                         fd = dns_scope_socket_tcp(t->scope, AF_UNSPEC, NULL, t->server, dns_transaction_port(t), &sa);
 
+                /* Lower timeout in DNS-over-TLS opportunistic mode. In environments where DoT is blocked
+                 * without ICMP response overly long delays when contacting DoT servers are nasty, in
+                 * particular if multiple DNS servers are defined which we try in turn and all are
+                 * blocked. Hence, substantially lower the timeout in that case. */
+                if (DNS_SERVER_FEATURE_LEVEL_IS_TLS(t->current_feature_level) &&
+                    dns_server_get_dns_over_tls_mode(t->server) == DNS_OVER_TLS_OPPORTUNISTIC)
+                        stream_timeout_usec = DNS_STREAM_OPPORTUNISTIC_TLS_TIMEOUT_USEC;
+
                 type = DNS_STREAM_LOOKUP;
                 break;
 
@@ -745,11 +748,12 @@
                 if (fd < 0)
                         return fd;
 
-                r = dns_stream_new(t->scope->manager, &s, type, t->scope->protocol, fd, &sa);
+                r = dns_stream_new(t->scope->manager, &s, type, t->scope->protocol, fd, &sa,
+                                   on_stream_packet, on_stream_complete, stream_timeout_usec);
                 if (r < 0)
                         return r;
 
-                fd = -1;
+                fd = -EBADF;
 
 #if ENABLE_DNS_OVER_TLS
                 if (t->scope->protocol == DNS_PROTOCOL_DNS &&
@@ -768,9 +772,6 @@
                         t->server->stream = dns_stream_ref(s);
                 }
 
-                s->complete = on_stream_complete;
-                s->on_packet = on_stream_packet;
-
                 /* The interface index is difficult to determine if we are
                  * connecting to the local host, hence fill this in right away
                  * instead of determining it from the socket */
@@ -816,6 +817,7 @@
 
         dns_cache_put(&t->scope->cache,
                       t->scope->manager->enable_cache,
+                      t->scope->protocol,
                       dns_transaction_key(t),
                       t->answer_rcode,
                       t->answer,
@@ -863,7 +865,7 @@
 
                 case DNS_TRANSACTION_RCODE_FAILURE:
                         if (!IN_SET(dt->answer_rcode, DNS_RCODE_NXDOMAIN, DNS_RCODE_SERVFAIL)) {
-                                log_debug("Auxiliary DNSSEC RR query failed with rcode=%s.", dns_rcode_to_string(dt->answer_rcode));
+                                log_debug("Auxiliary DNSSEC RR query failed with rcode=%s.", FORMAT_DNS_RCODE(dt->answer_rcode));
                                 goto fail;
                         }
 
@@ -1048,7 +1050,7 @@
 
         log_debug("Processing incoming packet of size %zu on transaction %" PRIu16" (rcode=%s).",
                   p->size,
-                  t->id, dns_rcode_to_string(DNS_PACKET_RCODE(p)));
+                  t->id, FORMAT_DNS_RCODE(DNS_PACKET_RCODE(p)));
 
         switch (t->scope->protocol) {
 
@@ -1091,13 +1093,11 @@
                 break;
 
         default:
-                assert_not_reached("Invalid DNS protocol.");
+                assert_not_reached();
         }
 
-        if (t->received != p) {
-                dns_packet_unref(t->received);
-                t->received = dns_packet_ref(p);
-        }
+        if (t->received != p)
+                DNS_PACKET_REPLACE(t->received, dns_packet_ref(p));
 
         t->answer_source = DNS_TRANSACTION_NETWORK;
 
@@ -1138,7 +1138,7 @@
                                         return;
 
                                 /* Give up, accept the rcode */
-                                log_debug("Server returned error: %s", dns_rcode_to_string(DNS_PACKET_RCODE(p)));
+                                log_debug("Server returned error: %s", FORMAT_DNS_RCODE(DNS_PACKET_RCODE(p)));
                                 break;
                         }
 
@@ -1152,7 +1152,7 @@
                             t->clamp_feature_level_servfail < 0) {
                                 t->clamp_feature_level_servfail = t->current_feature_level;
                                 log_debug("Server returned error %s, retrying transaction.",
-                                          dns_rcode_to_string(DNS_PACKET_RCODE(p)));
+                                          FORMAT_DNS_RCODE(DNS_PACKET_RCODE(p)));
                         } else {
                                 /* Reduce this feature level by one and try again. */
                                 switch (t->current_feature_level) {
@@ -1168,7 +1168,7 @@
                                 }
 
                                 log_debug("Server returned error %s, retrying transaction with reduced feature level %s.",
-                                          dns_rcode_to_string(DNS_PACKET_RCODE(p)),
+                                          FORMAT_DNS_RCODE(DNS_PACKET_RCODE(p)),
                                           dns_server_feature_level_to_string(t->clamp_feature_level_servfail));
                         }
 
@@ -1197,7 +1197,7 @@
                 break;
 
         default:
-                assert_not_reached("Invalid DNS protocol.");
+                assert_not_reached();
         }
 
         if (DNS_PACKET_TC(p)) {
@@ -1309,7 +1309,7 @@
                 t->clamp_feature_level_nxdomain = DNS_SERVER_FEATURE_LEVEL_UDP;
 
                 log_debug("Server returned error %s in EDNS0 mode, retrying transaction with reduced feature level %s (DVE-2018-0001 mitigation)",
-                          dns_rcode_to_string(DNS_PACKET_RCODE(p)),
+                          FORMAT_DNS_RCODE(DNS_PACKET_RCODE(p)),
                           dns_server_feature_level_to_string(t->clamp_feature_level_nxdomain));
 
                 dns_transaction_retry(t, false /* use the same server */);
@@ -1362,8 +1362,7 @@
          * field is later replaced by the DNSSEC validated subset. The 'answer_auxiliary' field carries the
          * original complete record set, including RRSIG and friends. We use this when passing data to
          * clients that ask for DNSSEC metadata. */
-        dns_answer_unref(t->answer);
-        t->answer = dns_answer_ref(p->answer);
+        DNS_ANSWER_REPLACE(t->answer, dns_answer_ref(p->answer));
         t->answer_rcode = DNS_PACKET_RCODE(p);
         t->answer_dnssec_result = _DNSSEC_RESULT_INVALID;
         SET_FLAG(t->answer_query_flags, SD_RESOLVED_AUTHENTICATED, false);
@@ -1406,10 +1405,9 @@
 
 static int on_dns_packet(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
         _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
-        DnsTransaction *t = userdata;
+        DnsTransaction *t = ASSERT_PTR(userdata);
         int r;
 
-        assert(t);
         assert(t->scope);
 
         r = manager_recv(t->scope->manager, fd, DNS_PROTOCOL_DNS, &p);
@@ -1420,7 +1418,7 @@
                  * next recvmsg(). Treat this like a lost packet. */
 
                 log_debug_errno(r, "Connection failure for DNS UDP packet: %m");
-                assert_se(sd_event_now(t->scope->manager->event, clock_boottime_or_monotonic(), &usec) >= 0);
+                assert_se(sd_event_now(t->scope->manager->event, CLOCK_BOOTTIME, &usec) >= 0);
                 dns_server_packet_lost(t->server, IPPROTO_UDP, t->current_feature_level);
 
                 dns_transaction_close_connection(t, /* use_graveyard = */ false);
@@ -1518,10 +1516,9 @@
 }
 
 static int on_transaction_timeout(sd_event_source *s, usec_t usec, void *userdata) {
-        DnsTransaction *t = userdata;
+        DnsTransaction *t = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(t);
 
         if (t->initial_jitter_scheduled && !t->initial_jitter_elapsed) {
                 log_debug("Initial jitter phase for transaction %" PRIu16 " elapsed.", t->id);
@@ -1541,7 +1538,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Invalid DNS protocol.");
+                        assert_not_reached();
                 }
 
                 log_debug("Timeout reached on transaction %" PRIu16 ".", t->id);
@@ -1553,6 +1550,33 @@
         return 0;
 }
 
+static int dns_transaction_setup_timeout(
+                DnsTransaction *t,
+                usec_t timeout_usec /* relative */,
+                usec_t next_usec /* CLOCK_BOOTTIME */) {
+
+        int r;
+
+        assert(t);
+
+        dns_transaction_stop_timeout(t);
+
+        r = sd_event_add_time_relative(
+                t->scope->manager->event,
+                &t->timeout_event_source,
+                CLOCK_BOOTTIME,
+                timeout_usec, 0,
+                on_transaction_timeout, t);
+        if (r < 0)
+                return r;
+
+        (void) sd_event_source_set_description(t->timeout_event_source, "dns-transaction-timeout");
+
+        t->next_attempt_after = next_usec;
+        t->state = DNS_TRANSACTION_PENDING;
+        return 0;
+}
+
 static usec_t transaction_get_resend_timeout(DnsTransaction *t) {
         assert(t);
         assert(t->scope);
@@ -1570,17 +1594,18 @@
                 return DNS_TIMEOUT_USEC;
 
         case DNS_PROTOCOL_MDNS:
-                assert(t->n_attempts > 0);
                 if (t->probing)
                         return MDNS_PROBING_INTERVAL_USEC;
-                else
-                        return (1 << (t->n_attempts - 1)) * USEC_PER_SEC;
+
+                /* See RFC 6762 Section 5.1 suggests that timeout should be a few seconds. */
+                assert(t->n_attempts > 0);
+                return (1 << (t->n_attempts - 1)) * USEC_PER_SEC;
 
         case DNS_PROTOCOL_LLMNR:
                 return t->scope->resend_timeout;
 
         default:
-                assert_not_reached("Invalid DNS protocol.");
+                assert_not_reached();
         }
 }
 
@@ -1754,14 +1779,30 @@
         return 1;
 }
 
+static int dns_packet_append_zone(DnsPacket *p, DnsTransaction *t, DnsResourceKey *k, unsigned *nscount) {
+        _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
+        bool tentative;
+        int r;
+
+        assert(p);
+        assert(t);
+        assert(k);
+
+        if (k->type != DNS_TYPE_ANY)
+                return 0;
+
+        r = dns_zone_lookup(&t->scope->zone, k, t->scope->link->ifindex, &answer, NULL, &tentative);
+        if (r < 0)
+                return r;
+
+        return dns_packet_append_answer(p, answer, nscount);
+}
+
 static int dns_transaction_make_packet_mdns(DnsTransaction *t) {
         _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
-        bool add_known_answers = false;
-        DnsTransaction *other;
-        DnsResourceKey *tkey;
         _cleanup_set_free_ Set *keys = NULL;
-        unsigned qdcount;
-        unsigned nscount = 0;
+        unsigned qdcount, ancount = 0 /* avoid false maybe-uninitialized warning */, nscount;
+        bool add_known_answers = false;
         usec_t ts;
         int r;
 
@@ -1771,6 +1812,7 @@
         /* Discard any previously prepared packet, so we can start over and coalesce again */
         t->sent = dns_packet_unref(t->sent);
 
+        /* First, create a dummy packet to calculate packet size. */
         r = dns_packet_new_query(&p, t->scope->protocol, 0, false);
         if (r < 0)
                 return r;
@@ -1784,11 +1826,14 @@
         if (dns_key_is_shared(dns_transaction_key(t)))
                 add_known_answers = true;
 
-        if (dns_transaction_key(t)->type == DNS_TYPE_ANY) {
-                r = set_ensure_put(&keys, &dns_resource_key_hash_ops, dns_transaction_key(t));
-                if (r < 0)
-                        return r;
-        }
+        r = dns_packet_append_zone(p, t, dns_transaction_key(t), NULL);
+        if (r < 0)
+                return r;
+
+        /* Save appended keys */
+        r = set_ensure_put(&keys, &dns_resource_key_hash_ops, dns_transaction_key(t));
+        if (r < 0)
+                return r;
 
         /*
          * For mDNS, we want to coalesce as many open queries in pending transactions into one single
@@ -1796,92 +1841,116 @@
          * in our current scope, and see whether their timing constraints allow them to be sent.
          */
 
-        assert_se(sd_event_now(t->scope->manager->event, clock_boottime_or_monotonic(), &ts) >= 0);
+        assert_se(sd_event_now(t->scope->manager->event, CLOCK_BOOTTIME, &ts) >= 0);
 
-        LIST_FOREACH(transactions_by_scope, other, t->scope->transactions) {
+        for (bool restart = true; restart;) {
+                restart = false;
+                LIST_FOREACH(transactions_by_scope, other, t->scope->transactions) {
+                        size_t saved_packet_size;
+                        bool append = false;
 
-                /* Skip ourselves */
-                if (other == t)
-                        continue;
+                        /* Skip ourselves */
+                        if (other == t)
+                                continue;
 
-                if (other->state != DNS_TRANSACTION_PENDING)
-                        continue;
+                        if (other->state != DNS_TRANSACTION_PENDING)
+                                continue;
 
-                if (other->next_attempt_after > ts)
-                        continue;
+                        if (other->next_attempt_after > ts)
+                                continue;
 
-                if (qdcount >= UINT16_MAX)
-                        break;
+                        if (!set_contains(keys, dns_transaction_key(other))) {
+                                r = dns_packet_append_key(p, dns_transaction_key(other), 0, &saved_packet_size);
+                                /* If we can't stuff more questions into the packet, just give up.
+                                 * One of the 'other' transactions will fire later and take care of the rest. */
+                                if (r == -EMSGSIZE)
+                                        break;
+                                if (r < 0)
+                                        return r;
 
-                r = dns_packet_append_key(p, dns_transaction_key(other), 0, NULL);
+                                r = dns_packet_append_zone(p, t, dns_transaction_key(other), NULL);
+                                if (r == -EMSGSIZE)
+                                        break;
+                                if (r < 0)
+                                        return r;
 
-                /*
-                 * If we can't stuff more questions into the packet, just give up.
-                 * One of the 'other' transactions will fire later and take care of the rest.
-                 */
-                if (r == -EMSGSIZE)
-                        break;
+                                append = true;
+                        }
 
-                if (r < 0)
-                        return r;
-
-                r = dns_transaction_prepare(other, ts);
-                if (r <= 0)
-                        continue;
-
-                ts += transaction_get_resend_timeout(other);
-
-                r = sd_event_add_time(
-                                other->scope->manager->event,
-                                &other->timeout_event_source,
-                                clock_boottime_or_monotonic(),
-                                ts, 0,
-                                on_transaction_timeout, other);
-                if (r < 0)
-                        return r;
-
-                (void) sd_event_source_set_description(other->timeout_event_source, "dns-transaction-timeout");
-
-                other->state = DNS_TRANSACTION_PENDING;
-                other->next_attempt_after = ts;
-
-                qdcount++;
-
-                if (dns_key_is_shared(dns_transaction_key(other)))
-                        add_known_answers = true;
-
-                if (dns_transaction_key(other)->type == DNS_TYPE_ANY) {
-                        r = set_ensure_put(&keys, &dns_resource_key_hash_ops, dns_transaction_key(other));
+                        r = dns_transaction_prepare(other, ts);
                         if (r < 0)
                                 return r;
+                        if (r == 0) {
+                                if (append)
+                                        dns_packet_truncate(p, saved_packet_size);
+
+                                /* In this case, not only this transaction, but multiple transactions may be
+                                 * freed. Hence, we need to restart the loop. */
+                                restart = true;
+                                break;
+                        }
+
+                        usec_t timeout = transaction_get_resend_timeout(other);
+                        r = dns_transaction_setup_timeout(other, timeout, usec_add(ts, timeout));
+                        if (r < 0)
+                                return r;
+
+                        if (dns_key_is_shared(dns_transaction_key(other)))
+                                add_known_answers = true;
+
+                        if (append) {
+                                r = set_ensure_put(&keys, &dns_resource_key_hash_ops, dns_transaction_key(other));
+                                if (r < 0)
+                                        return r;
+                        }
+
+                        qdcount++;
+                        if (qdcount >= UINT16_MAX)
+                                break;
                 }
         }
 
-        DNS_PACKET_HEADER(p)->qdcount = htobe16(qdcount);
-
         /* Append known answer section if we're asking for any shared record */
         if (add_known_answers) {
-                r = dns_cache_export_shared_to_packet(&t->scope->cache, p);
+                r = dns_cache_export_shared_to_packet(&t->scope->cache, p, ts, 0);
+                if (r < 0)
+                        return r;
+
+                ancount = be16toh(DNS_PACKET_HEADER(p)->ancount);
+        }
+
+        /* Then, create actual packet. */
+        p = dns_packet_unref(p);
+        r = dns_packet_new_query(&p, t->scope->protocol, 0, false);
+        if (r < 0)
+                return r;
+
+        /* Questions */
+        DnsResourceKey *k;
+        SET_FOREACH(k, keys) {
+                r = dns_packet_append_key(p, k, 0, NULL);
+                if (r < 0)
+                        return r;
+        }
+        DNS_PACKET_HEADER(p)->qdcount = htobe16(qdcount);
+
+        /* Known answers */
+        if (add_known_answers) {
+                r = dns_cache_export_shared_to_packet(&t->scope->cache, p, ts, ancount);
                 if (r < 0)
                         return r;
         }
 
-        SET_FOREACH(tkey, keys) {
-                _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
-                bool tentative;
-
-                r = dns_zone_lookup(&t->scope->zone, tkey, t->scope->link->ifindex, &answer, NULL, &tentative);
-                if (r < 0)
-                        return r;
-
-                r = dns_packet_append_answer(p, answer, &nscount);
+        /* Authorities */
+        nscount = 0;
+        SET_FOREACH(k, keys) {
+                r = dns_packet_append_zone(p, t, k, &nscount);
                 if (r < 0)
                         return r;
         }
         DNS_PACKET_HEADER(p)->nscount = htobe16(nscount);
 
         t->sent = TAKE_PTR(p);
-
         return 0;
 }
 
@@ -1936,7 +2005,7 @@
          * finished now. In the latter case, the transaction and query candidate objects must not be accessed.
          */
 
-        assert_se(sd_event_now(t->scope->manager->event, clock_boottime_or_monotonic(), &ts) >= 0);
+        assert_se(sd_event_now(t->scope->manager->event, CLOCK_BOOTTIME, &ts) >= 0);
 
         r = dns_transaction_prepare(t, ts);
         if (r <= 0)
@@ -1953,45 +2022,36 @@
 
         if (!t->initial_jitter_scheduled &&
             IN_SET(t->scope->protocol, DNS_PROTOCOL_LLMNR, DNS_PROTOCOL_MDNS)) {
-                usec_t jitter, accuracy;
+                usec_t jitter;
 
-                /* RFC 4795 Section 2.7 suggests all queries should be delayed by a random time from 0 to
-                 * JITTER_INTERVAL. */
+                /* RFC 4795 Section 2.7 suggests all LLMNR queries should be delayed by a random time from 0 to
+                 * JITTER_INTERVAL.
+                 * RFC 6762 Section 8.1 suggests initial probe queries should be delayed by a random time from
+                 * 0 to 250ms. */
 
                 t->initial_jitter_scheduled = true;
+                t->n_attempts = 0;
 
                 switch (t->scope->protocol) {
 
                 case DNS_PROTOCOL_LLMNR:
                         jitter = random_u64_range(LLMNR_JITTER_INTERVAL_USEC);
-                        accuracy = LLMNR_JITTER_INTERVAL_USEC;
                         break;
 
                 case DNS_PROTOCOL_MDNS:
-                        jitter = usec_add(random_u64_range(MDNS_JITTER_RANGE_USEC), MDNS_JITTER_MIN_USEC);
-                        accuracy = MDNS_JITTER_RANGE_USEC;
+                        if (t->probing)
+                                jitter = random_u64_range(MDNS_PROBING_INTERVAL_USEC);
+                        else
+                                jitter = 0;
                         break;
                 default:
-                        assert_not_reached("bad protocol");
+                        assert_not_reached();
                 }
 
-                assert(!t->timeout_event_source);
-
-                r = sd_event_add_time_relative(
-                                t->scope->manager->event,
-                                &t->timeout_event_source,
-                                clock_boottime_or_monotonic(),
-                                jitter, accuracy,
-                                on_transaction_timeout, t);
+                r = dns_transaction_setup_timeout(t, jitter, ts);
                 if (r < 0)
                         return r;
 
-                (void) sd_event_source_set_description(t->timeout_event_source, "dns-transaction-timeout");
-
-                t->n_attempts = 0;
-                t->next_attempt_after = ts;
-                t->state = DNS_TRANSACTION_PENDING;
-
                 log_debug("Delaying %s transaction %" PRIu16 " for " USEC_FMT "us.",
                           dns_protocol_to_string(t->scope->protocol),
                           t->id,
@@ -2019,7 +2079,9 @@
                         log_debug("Sending query via TCP since it is too large.");
                 else if (r == -EAGAIN)
                         log_debug("Sending query via TCP since UDP isn't supported or DNS-over-TLS is selected.");
-                if (IN_SET(r, -EMSGSIZE, -EAGAIN))
+                else if (r == -EPERM)
+                        log_debug("Sending query via TCP since UDP is blocked.");
+                if (IN_SET(r, -EMSGSIZE, -EAGAIN, -EPERM))
                         r = dns_transaction_emit_tcp(t);
         }
         if (r == -ELOOP) {
@@ -2065,22 +2127,11 @@
                 return dns_transaction_go(t);
         }
 
-        ts += transaction_get_resend_timeout(t);
-
-        r = sd_event_add_time(
-                        t->scope->manager->event,
-                        &t->timeout_event_source,
-                        clock_boottime_or_monotonic(),
-                        ts, 0,
-                        on_transaction_timeout, t);
+        usec_t timeout = transaction_get_resend_timeout(t);
+        r = dns_transaction_setup_timeout(t, timeout, usec_add(ts, timeout));
         if (r < 0)
                 return r;
 
-        (void) sd_event_source_set_description(t->timeout_event_source, "dns-transaction-timeout");
-
-        t->state = DNS_TRANSACTION_PENDING;
-        t->next_attempt_after = ts;
-
         return 1;
 }
 
@@ -2212,7 +2263,7 @@
         return link_negative_trust_anchor_lookup(t->scope->link, name);
 }
 
-static int dns_transaction_has_unsigned_negative_answer(DnsTransaction *t) {
+static int dns_transaction_has_negative_answer(DnsTransaction *t) {
         int r;
 
         assert(t);
@@ -2231,14 +2282,7 @@
         r = dns_transaction_negative_trust_anchor_lookup(t, dns_resource_key_name(dns_transaction_key(t)));
         if (r < 0)
                 return r;
-        if (r > 0)
-                return false;
-
-        /* The answer does not contain any RRs that match to the
-         * question. If so, let's see if there are any NSEC/NSEC3 RRs
-         * included. If not, the answer is unsigned. */
-
-        return !dns_answer_contains_nsec_or_nsec3(t->answer);
+        return !r;
 }
 
 static int dns_transaction_is_primary_response(DnsTransaction *t, DnsResourceRecord *rr) {
@@ -2562,14 +2606,15 @@
          * we got. Now, let's request what we need to validate what we
          * didn't get... */
 
-        r = dns_transaction_has_unsigned_negative_answer(t);
+        r = dns_transaction_has_negative_answer(t);
         if (r < 0)
                 return r;
         if (r > 0) {
-                const char *name;
+                const char *name, *signed_status;
                 uint16_t type = 0;
 
                 name = dns_resource_key_name(dns_transaction_key(t));
+                signed_status = dns_answer_contains_nsec_or_nsec3(t->answer) ? "signed" : "unsigned";
 
                 /* If this was a SOA or NS request, then check if there's a DS RR for the same domain. Note that this
                  * could also be used as indication that we are not at a zone apex, but in real world setups there are
@@ -2582,21 +2627,22 @@
                         r = dns_name_parent(&name);
                         if (r > 0) {
                                 type = DNS_TYPE_SOA;
-                                log_debug("Requesting parent SOA (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty DS response).",
-                                          name, t->id, dns_resource_key_name(dns_transaction_key(t)));
+                                log_debug("Requesting parent SOA (%s %s) to validate transaction %" PRIu16 " (%s, %s empty DS response).",
+                                          special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id,
+                                          dns_resource_key_name(dns_transaction_key(t)), signed_status);
                         } else
                                 name = NULL;
 
                 } else if (IN_SET(dns_transaction_key(t)->type, DNS_TYPE_SOA, DNS_TYPE_NS)) {
 
                         type = DNS_TYPE_DS;
-                        log_debug("Requesting DS (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty SOA/NS response).",
-                                  name, t->id, name);
+                        log_debug("Requesting DS (%s %s) to validate transaction %" PRIu16 " (%s, %s empty SOA/NS response).",
+                                  special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id, name, signed_status);
 
                 } else {
                         type = DNS_TYPE_SOA;
-                        log_debug("Requesting SOA (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty non-SOA/NS/DS response).",
-                                  name, t->id, name);
+                        log_debug("Requesting SOA (%s %s) to validate transaction %" PRIu16 " (%s, %s empty non-SOA/NS/DS response).",
+                                  special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id, name, signed_status);
                 }
 
                 if (name) {
@@ -3104,6 +3150,7 @@
         /* Returns negative on error, 0 if validation failed, 1 to restart validation, 2 when finished. */
 
         DNS_ANSWER_FOREACH(rr, t->answer) {
+                _unused_ _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr_ref = dns_resource_record_ref(rr);
                 DnsResourceRecord *rrsig = NULL;
                 DnssecResult result;
 
@@ -3287,10 +3334,19 @@
                         }
                 }
 
+                /* https://datatracker.ietf.org/doc/html/rfc6840#section-5.2 */
+                if (result == DNSSEC_UNSUPPORTED_ALGORITHM) {
+                        r = dns_answer_move_by_key(validated, &t->answer, rr->key, 0, NULL);
+                        if (r < 0)
+                                return r;
+
+                        manager_dnssec_verdict(t->scope->manager, DNSSEC_INSECURE, rr->key);
+                        return 1;
+                }
+
                 if (IN_SET(result,
                            DNSSEC_MISSING_KEY,
-                           DNSSEC_SIGNATURE_EXPIRED,
-                           DNSSEC_UNSUPPORTED_ALGORITHM)) {
+                           DNSSEC_SIGNATURE_EXPIRED)) {
 
                         r = dns_transaction_dnskey_authenticated(t, rr);
                         if (r < 0 && r != -ENXIO)
@@ -3450,8 +3506,7 @@
                 break;
         }
 
-        dns_answer_unref(t->answer);
-        t->answer = TAKE_PTR(validated);
+        DNS_ANSWER_REPLACE(t->answer, TAKE_PTR(validated));
 
         /* At this point the answer only contains validated
          * RRsets. Now, let's see if it actually answers the question
@@ -3543,7 +3598,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unexpected NSEC result.");
+                        assert_not_reached();
                 }
         }
 
diff --git a/src/resolve/resolved-dns-transaction.h b/src/resolve/resolved-dns-transaction.h
index 498cabb..5a0e357 100644
--- a/src/resolve/resolved-dns-transaction.h
+++ b/src/resolve/resolved-dns-transaction.h
@@ -201,10 +201,6 @@
 /* LLMNR Jitter interval, see RFC 4795 Section 7 */
 #define LLMNR_JITTER_INTERVAL_USEC (100 * USEC_PER_MSEC)
 
-/* mDNS Jitter interval, see RFC 6762 Section 5.2 */
-#define MDNS_JITTER_MIN_USEC   (20 * USEC_PER_MSEC)
-#define MDNS_JITTER_RANGE_USEC (100 * USEC_PER_MSEC)
-
 /* mDNS probing interval, see RFC 6762 Section 8.1 */
 #define MDNS_PROBING_INTERVAL_USEC (250 * USEC_PER_MSEC)
 
@@ -217,8 +213,8 @@
 /* Maximum attempts to send MDNS requests, see RFC 6762 Section 8.1 */
 #define MDNS_TRANSACTION_ATTEMPTS_MAX 3
 
-#define TRANSACTION_ATTEMPTS_MAX(p) (((p) == DNS_PROTOCOL_LLMNR) ? \
-                                         LLMNR_TRANSACTION_ATTEMPTS_MAX : \
-                                         (((p) == DNS_PROTOCOL_MDNS) ? \
-                                             MDNS_TRANSACTION_ATTEMPTS_MAX : \
-                                             DNS_TRANSACTION_ATTEMPTS_MAX))
+#define TRANSACTION_ATTEMPTS_MAX(p) ((p) == DNS_PROTOCOL_LLMNR ?        \
+                                     LLMNR_TRANSACTION_ATTEMPTS_MAX :   \
+                                     (p) == DNS_PROTOCOL_MDNS ?         \
+                                     MDNS_TRANSACTION_ATTEMPTS_MAX :    \
+                                     DNS_TRANSACTION_ATTEMPTS_MAX)
diff --git a/src/resolve/resolved-dns-trust-anchor.c b/src/resolve/resolved-dns-trust-anchor.c
index b036aa4..ca670b3 100644
--- a/src/resolve/resolved-dns-trust-anchor.c
+++ b/src/resolve/resolved-dns-trust-anchor.c
@@ -4,7 +4,7 @@
 
 #include "alloc-util.h"
 #include "conf-files.h"
-#include "def.h"
+#include "constants.h"
 #include "dns-domain.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -165,7 +165,6 @@
                 /* Defined by RFC 8375. The most official choice. */
                 "home.arpa\0";
 
-        const char *name;
         int r;
 
         assert(d);
@@ -409,7 +408,6 @@
                 int (*loader)(DnsTrustAnchor *d, const char *path, unsigned n, const char *line)) {
 
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(d);
@@ -424,7 +422,7 @@
                 _cleanup_fclose_ FILE *g = NULL;
                 unsigned n = 0;
 
-                g = fopen(*f, "r");
+                g = fopen(*f, "re");
                 if (!g) {
                         if (errno == ENOENT)
                                 continue;
@@ -600,6 +598,7 @@
 static int dns_trust_anchor_remove_revoked(DnsTrustAnchor *d, DnsResourceRecord *rr) {
         _cleanup_(dns_answer_unrefp) DnsAnswer *new_answer = NULL;
         DnsAnswer *old_answer;
+        DnsAnswerItem *item;
         int r;
 
         /* Remember that this is a revoked trust anchor RR */
@@ -632,11 +631,12 @@
                 return 1;
         }
 
-        r = hashmap_replace(d->positive_by_key, new_answer->items[0].rr->key, new_answer);
+        item = ordered_set_first(new_answer->items);
+        r = hashmap_replace(d->positive_by_key, item->rr->key, new_answer);
         if (r < 0)
                 return r;
 
-        new_answer = NULL;
+        TAKE_PTR(new_answer);
         dns_answer_unref(old_answer);
         return 1;
 }
diff --git a/src/resolve/resolved-dns-zone.c b/src/resolve/resolved-dns-zone.c
index 6b3f5f7..f533f97 100644
--- a/src/resolve/resolved-dns-zone.c
+++ b/src/resolve/resolved-dns-zone.c
@@ -78,12 +78,10 @@
 }
 
 DnsZoneItem* dns_zone_get(DnsZone *z, DnsResourceRecord *rr) {
-        DnsZoneItem *i;
-
         assert(z);
         assert(rr);
 
-        LIST_FOREACH(by_key, i, hashmap_get(z->by_key, rr->key))
+        LIST_FOREACH(by_key, i, (DnsZoneItem*) hashmap_get(z->by_key, rr->key))
                 if (dns_resource_record_equal(i->rr, rr) > 0)
                         return i;
 
@@ -250,21 +248,15 @@
                 return r;
 
         if (probe) {
-                DnsZoneItem *first, *j;
                 bool established = false;
 
                 /* Check if there's already an RR with the same name
                  * established. If so, it has been probed already, and
                  * we don't need to probe again. */
 
-                LIST_FIND_HEAD(by_name, i, first);
-                LIST_FOREACH(by_name, j, first) {
-                        if (i == j)
-                                continue;
-
+                LIST_FOREACH_OTHERS(by_name, j, i)
                         if (j->state == DNS_ZONE_ITEM_ESTABLISHED)
                                 established = true;
-                }
 
                 if (established)
                         i->state = DNS_ZONE_ITEM_ESTABLISHED;
@@ -306,7 +298,7 @@
 int dns_zone_lookup(DnsZone *z, DnsResourceKey *key, int ifindex, DnsAnswer **ret_answer, DnsAnswer **ret_soa, bool *ret_tentative) {
         _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL, *soa = NULL;
         unsigned n_answer = 0;
-        DnsZoneItem *j, *first;
+        DnsZoneItem *first;
         bool tentative = true, need_soa = false;
         int r;
 
@@ -576,7 +568,7 @@
 }
 
 int dns_zone_check_conflicts(DnsZone *zone, DnsResourceRecord *rr) {
-        DnsZoneItem *i, *first;
+        DnsZoneItem *first;
         int c = 0;
 
         assert(zone);
@@ -614,7 +606,7 @@
 }
 
 int dns_zone_verify_conflicts(DnsZone *zone, DnsResourceKey *key) {
-        DnsZoneItem *i, *first;
+        DnsZoneItem *first;
         int c = 0;
 
         assert(zone);
@@ -639,12 +631,9 @@
 
         assert(zone);
 
-        HASHMAP_FOREACH(i, zone->by_key) {
-                DnsZoneItem *j;
-
+        HASHMAP_FOREACH(i, zone->by_key)
                 LIST_FOREACH(by_key, j, i)
                         dns_zone_item_verify(j);
-        }
 }
 
 void dns_zone_dump(DnsZone *zone, FILE *f) {
@@ -656,9 +645,7 @@
         if (!f)
                 f = stdout;
 
-        HASHMAP_FOREACH(i, zone->by_key) {
-                DnsZoneItem *j;
-
+        HASHMAP_FOREACH(i, zone->by_key)
                 LIST_FOREACH(by_key, j, i) {
                         const char *t;
 
@@ -672,7 +659,6 @@
                         fputs(t, f);
                         fputc('\n', f);
                 }
-        }
 }
 
 bool dns_zone_is_empty(DnsZone *zone) {
@@ -683,7 +669,7 @@
 }
 
 bool dns_zone_contains_name(DnsZone *z, const char *name) {
-        DnsZoneItem *i, *first;
+        DnsZoneItem *first;
 
         first = hashmap_get(z->by_name, name);
         if (!first)
diff --git a/src/resolve/resolved-dnssd-bus.c b/src/resolve/resolved-dnssd-bus.c
index d908cc6..0f0d478 100644
--- a/src/resolve/resolved-dnssd-bus.c
+++ b/src/resolve/resolved-dnssd-bus.c
@@ -11,14 +11,12 @@
 #include "user-util.h"
 
 int bus_dnssd_method_unregister(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        DnssdService *s = userdata;
-        DnssdTxtData *txt_data;
+        DnssdService *s = ASSERT_PTR(userdata);
         Manager *m;
         Link *l;
         int r;
 
         assert(message);
-        assert(s);
 
         m = s->manager;
 
@@ -64,7 +62,7 @@
 
 static int dnssd_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
         _cleanup_free_ char *name = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         DnssdService *service;
         int r;
 
@@ -72,7 +70,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         r = sd_bus_path_decode(path, "/org/freedesktop/resolve1/dnssd", &name);
         if (r <= 0)
@@ -88,14 +85,13 @@
 
 static int dnssd_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
         _cleanup_strv_free_ char **l = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         DnssdService *service;
         unsigned c = 0;
         int r;
 
         assert(bus);
         assert(path);
-        assert(m);
         assert(nodes);
 
         l = new0(char*, hashmap_size(m->dnssd_services) + 1);
diff --git a/src/resolve/resolved-dnssd.c b/src/resolve/resolved-dnssd.c
index ab2773e..f5a8a80 100644
--- a/src/resolve/resolved-dnssd.c
+++ b/src/resolve/resolved-dnssd.c
@@ -2,7 +2,7 @@
 
 #include "conf-files.h"
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
 #include "resolved-dnssd.h"
 #include "resolved-dns-rr.h"
 #include "resolved-manager.h"
@@ -17,7 +17,7 @@
                 return NULL;
 
         dns_resource_record_unref(txt_data->rr);
-        dns_txt_item_free_all(txt_data->txt);
+        dns_txt_item_free_all(txt_data->txts);
 
         return mfree(txt_data);
 }
@@ -93,6 +93,7 @@
                         config_item_perf_lookup, resolved_dnssd_gperf_lookup,
                         CONFIG_PARSE_WARN,
                         service,
+                        NULL,
                         NULL);
         if (r < 0)
                 return r;
@@ -107,12 +108,12 @@
                                        "%s doesn't define service type",
                                        service->name);
 
-        if (LIST_IS_EMPTY(service->txt_data_items)) {
+        if (!service->txt_data_items) {
                 txt_data = new0(DnssdTxtData, 1);
                 if (!txt_data)
                         return log_oom();
 
-                r = dns_txt_item_new_empty(&txt_data->txt);
+                r = dns_txt_item_new_empty(&txt_data->txts);
                 if (r < 0)
                         return r;
 
@@ -135,15 +136,13 @@
         return 0;
 }
 
-static int specifier_dnssd_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        DnssdService *s  = (DnssdService *) userdata;
+static int specifier_dnssd_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        const Manager *m = ASSERT_PTR(userdata);
         char *n;
 
-        assert(s);
-        assert(s->manager);
-        assert(s->manager->llmnr_hostname);
+        assert(m->llmnr_hostname);
 
-        n = strdup(s->manager->llmnr_hostname);
+        n = strdup(m->llmnr_hostname);
         if (!n)
                 return -ENOMEM;
 
@@ -151,26 +150,27 @@
         return 0;
 }
 
-int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
+int dnssd_render_instance_name(Manager *m, DnssdService *s, char **ret) {
         static const Specifier specifier_table[] = {
-                { 'a', specifier_architecture,    NULL },
-                { 'b', specifier_boot_id,         NULL },
-                { 'B', specifier_os_build_id,     NULL },
-                { 'H', specifier_dnssd_host_name, NULL },
-                { 'm', specifier_machine_id,      NULL },
-                { 'o', specifier_os_id,           NULL },
-                { 'v', specifier_kernel_release,  NULL },
-                { 'w', specifier_os_version_id,   NULL },
-                { 'W', specifier_os_variant_id,   NULL },
+                { 'a', specifier_architecture,   NULL },
+                { 'b', specifier_boot_id,        NULL },
+                { 'B', specifier_os_build_id,    NULL },
+                { 'H', specifier_dnssd_hostname, NULL },
+                { 'm', specifier_machine_id,     NULL },
+                { 'o', specifier_os_id,          NULL },
+                { 'v', specifier_kernel_release, NULL },
+                { 'w', specifier_os_version_id,  NULL },
+                { 'W', specifier_os_variant_id,  NULL },
                 {}
         };
         _cleanup_free_ char *name = NULL;
         int r;
 
+        assert(m);
         assert(s);
         assert(s->name_template);
 
-        r = specifier_printf(s->name_template, DNS_LABEL_MAX, specifier_table, NULL, s, &name);
+        r = specifier_printf(s->name_template, DNS_LABEL_MAX, specifier_table, NULL, m, &name);
         if (r < 0)
                 return log_debug_errno(r, "Failed to replace specifiers: %m");
 
@@ -179,14 +179,14 @@
                                        "Service instance name '%s' is invalid.",
                                        name);
 
-        *ret_name = TAKE_PTR(name);
+        if (ret)
+                *ret = TAKE_PTR(name);
 
         return 0;
 }
 
 int dnssd_load(Manager *manager) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(manager);
@@ -201,17 +201,14 @@
         STRV_FOREACH_BACKWARDS(f, files) {
                 r = dnssd_service_load(manager, *f);
                 if (r < 0)
-                        log_warning_errno(r, "Failed to load '%s': %m", *f);;
+                        log_warning_errno(r, "Failed to load '%s': %m", *f);
         }
 
         return 0;
 }
 
 int dnssd_update_rrs(DnssdService *s) {
-        _cleanup_free_ char *n = NULL;
-        _cleanup_free_ char *service_name = NULL;
-        _cleanup_free_ char *full_name = NULL;
-        DnssdTxtData *txt_data;
+        _cleanup_free_ char *n = NULL, *service_name = NULL, *full_name = NULL;
         int r;
 
         assert(s);
@@ -223,7 +220,7 @@
         LIST_FOREACH(items, txt_data, s->txt_data_items)
                 txt_data->rr = dns_resource_record_unref(txt_data->rr);
 
-        r = dnssd_render_instance_name(s, &n);
+        r = dnssd_render_instance_name(s->manager, s, &n);
         if (r < 0)
                 return r;
 
@@ -241,7 +238,7 @@
                         goto oom;
 
                 txt_data->rr->ttl = MDNS_DEFAULT_TTL;
-                txt_data->rr->txt.items = dns_txt_item_copy(txt_data->txt);
+                txt_data->rr->txt.items = dns_txt_item_copy(txt_data->txts);
                 if (!txt_data->rr->txt.items)
                         goto oom;
         }
diff --git a/src/resolve/resolved-dnssd.h b/src/resolve/resolved-dnssd.h
index d020bb5..e978a0d 100644
--- a/src/resolve/resolved-dnssd.h
+++ b/src/resolve/resolved-dnssd.h
@@ -13,13 +13,13 @@
 
 enum {
         DNS_TXT_ITEM_TEXT,
-        DNS_TXT_ITEM_DATA
+        DNS_TXT_ITEM_DATA,
 };
 
 struct DnssdTxtData {
         DnsResourceRecord *rr;
 
-        LIST_HEAD(DnsTxtItem, txt);
+        LIST_HEAD(DnsTxtItem, txts);
 
         LIST_FIELDS(DnssdTxtData, items);
 };
@@ -53,7 +53,7 @@
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free);
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free);
 
-int dnssd_render_instance_name(DnssdService *s, char **ret_name);
+int dnssd_render_instance_name(Manager *m, DnssdService *s, char **ret);
 int dnssd_load(Manager *manager);
 int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item);
 int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item);
diff --git a/src/resolve/resolved-dnstls-gnutls.c b/src/resolve/resolved-dnstls-gnutls.c
index e7ccba9..acdad6f 100644
--- a/src/resolve/resolved-dnstls-gnutls.c
+++ b/src/resolve/resolved-dnstls-gnutls.c
@@ -6,6 +6,7 @@
 
 #include <gnutls/socket.h>
 
+#include "io-util.h"
 #include "resolved-dns-stream.h"
 #include "resolved-dnstls.h"
 #include "resolved-manager.h"
@@ -13,7 +14,7 @@
 #define TLS_PROTOCOL_PRIORITY "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2"
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(gnutls_session_t, gnutls_deinit, NULL);
 
-static ssize_t dnstls_stream_writev(gnutls_transport_ptr_t p, const giovec_t *iov, int iovcnt) {
+static ssize_t dnstls_stream_vec_push(gnutls_transport_ptr_t p, const giovec_t *iov, int iovcnt) {
         int r;
 
         assert(p);
@@ -81,7 +82,7 @@
         gnutls_handshake_set_timeout(gs, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT);
 
         gnutls_transport_set_ptr2(gs, (gnutls_transport_ptr_t) (long) stream->fd, stream);
-        gnutls_transport_set_vec_push_function(gs, &dnstls_stream_writev);
+        gnutls_transport_set_vec_push_function(gs, &dnstls_stream_vec_push);
 
         stream->encrypted = true;
         stream->dnstls_data.handshake = gnutls_handshake(gs);
@@ -163,17 +164,28 @@
         return 0;
 }
 
-ssize_t dnstls_stream_write(DnsStream *stream, const char *buf, size_t count) {
+ssize_t dnstls_stream_writev(DnsStream *stream, const struct iovec *iov, size_t iovcnt) {
         ssize_t ss;
 
         assert(stream);
         assert(stream->encrypted);
         assert(stream->dnstls_data.session);
-        assert(buf);
+        assert(iov);
+        assert(IOVEC_TOTAL_SIZE(iov, iovcnt) > 0);
 
-        ss = gnutls_record_send(stream->dnstls_data.session, buf, count);
+        gnutls_record_cork(stream->dnstls_data.session);
+
+        for (size_t i = 0; i < iovcnt; i++) {
+                ss = gnutls_record_send(
+                        stream->dnstls_data.session,
+                        iov[i].iov_base, iov[i].iov_len);
+                if (ss < 0)
+                        break;
+        }
+
+        ss = gnutls_record_uncork(stream->dnstls_data.session, 0);
         if (ss < 0)
-                switch(ss) {
+                switch (ss) {
                 case GNUTLS_E_INTERRUPTED:
                         return -EINTR;
                 case GNUTLS_E_AGAIN:
@@ -197,7 +209,7 @@
 
         ss = gnutls_record_recv(stream->dnstls_data.session, buf, count);
         if (ss < 0)
-                switch(ss) {
+                switch (ss) {
                 case GNUTLS_E_INTERRUPTED:
                         return -EINTR;
                 case GNUTLS_E_AGAIN:
diff --git a/src/resolve/resolved-dnstls-openssl.c b/src/resolve/resolved-dnstls-openssl.c
index 17af90d..4a0132a 100644
--- a/src/resolve/resolved-dnstls-openssl.c
+++ b/src/resolve/resolved-dnstls-openssl.c
@@ -9,12 +9,23 @@
 #include <openssl/x509v3.h>
 
 #include "io-util.h"
+#include "openssl-util.h"
 #include "resolved-dns-stream.h"
 #include "resolved-dnstls.h"
 #include "resolved-manager.h"
 
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(SSL*, SSL_free, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(BIO*, BIO_free, NULL);
+static char *dnstls_error_string(int ssl_error, char *buf, size_t count) {
+        assert(buf || count == 0);
+        if (ssl_error == SSL_ERROR_SSL)
+                ERR_error_string_n(ERR_get_error(), buf, count);
+        else
+                snprintf(buf, count, "SSL_get_error()=%d", ssl_error);
+        return buf;
+}
+
+#define DNSTLS_ERROR_BUFSIZE 256
+#define DNSTLS_ERROR_STRING(error) \
+        dnstls_error_string((error), (char[DNSTLS_ERROR_BUFSIZE]){}, DNSTLS_ERROR_BUFSIZE)
 
 static int dnstls_flush_write_buffer(DnsStream *stream) {
         ssize_t ss;
@@ -99,26 +110,18 @@
 
         if (server->server_name) {
                 r = SSL_set_tlsext_host_name(s, server->server_name);
-                if (r <= 0) {
-                        char errbuf[256];
-
-                        error = ERR_get_error();
-                        ERR_error_string_n(error, errbuf, sizeof(errbuf));
-                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to set server name: %s", errbuf);
-                }
+                if (r <= 0)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Failed to set server name: %s", DNSTLS_ERROR_STRING(SSL_ERROR_SSL));
         }
 
         ERR_clear_error();
         stream->dnstls_data.handshake = SSL_do_handshake(s);
         if (stream->dnstls_data.handshake <= 0) {
                 error = SSL_get_error(s, stream->dnstls_data.handshake);
-                if (!IN_SET(error, SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE)) {
-                        char errbuf[256];
-
-                        ERR_error_string_n(error, errbuf, sizeof(errbuf));
+                if (!IN_SET(error, SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE))
                         return log_debug_errno(SYNTHETIC_ERRNO(ECONNREFUSED),
-                                               "Failed to invoke SSL_do_handshake: %s", errbuf);
-                }
+                                               "Failed to invoke SSL_do_handshake: %s", DNSTLS_ERROR_STRING(error));
         }
 
         stream->encrypted = true;
@@ -179,12 +182,8 @@
                         } else if (error == SSL_ERROR_SYSCALL) {
                                 if (errno > 0)
                                         log_debug_errno(errno, "Failed to invoke SSL_shutdown, ignoring: %m");
-                        } else {
-                                char errbuf[256];
-
-                                ERR_error_string_n(error, errbuf, sizeof(errbuf));
-                                log_debug("Failed to invoke SSL_shutdown, ignoring: %s", errbuf);
-                        }
+                        } else
+                                log_debug("Failed to invoke SSL_shutdown, ignoring: %s", DNSTLS_ERROR_STRING(error));
                 }
 
                 stream->dnstls_events = 0;
@@ -208,14 +207,10 @@
                                         return r;
 
                                 return -EAGAIN;
-                        } else {
-                                char errbuf[256];
-
-                                ERR_error_string_n(error, errbuf, sizeof(errbuf));
+                        } else
                                 return log_debug_errno(SYNTHETIC_ERRNO(ECONNREFUSED),
                                                        "Failed to invoke SSL_do_handshake: %s",
-                                                       errbuf);
-                        }
+                                                       DNSTLS_ERROR_STRING(error));
                 }
 
                 stream->dnstls_events = 0;
@@ -277,12 +272,8 @@
                         } else if (ssl_error == SSL_ERROR_SYSCALL) {
                                 if (errno > 0)
                                         log_debug_errno(errno, "Failed to invoke SSL_shutdown, ignoring: %m");
-                        } else {
-                                char errbuf[256];
-
-                                ERR_error_string_n(ssl_error, errbuf, sizeof(errbuf));
-                                log_debug("Failed to invoke SSL_shutdown, ignoring: %s", errbuf);
-                        }
+                        } else
+                                log_debug("Failed to invoke SSL_shutdown, ignoring: %s", DNSTLS_ERROR_STRING(ssl_error));
                 }
 
                 stream->dnstls_events = 0;
@@ -294,15 +285,10 @@
         return 0;
 }
 
-ssize_t dnstls_stream_write(DnsStream *stream, const char *buf, size_t count) {
+static ssize_t dnstls_stream_write(DnsStream *stream, const char *buf, size_t count) {
         int error, r;
         ssize_t ss;
 
-        assert(stream);
-        assert(stream->encrypted);
-        assert(stream->dnstls_data.ssl);
-        assert(buf);
-
         ERR_clear_error();
         ss = r = SSL_write(stream->dnstls_data.ssl, buf, count);
         if (r <= 0) {
@@ -314,10 +300,7 @@
                         stream->dnstls_events = 0;
                         ss = 0;
                 } else {
-                        char errbuf[256];
-
-                        ERR_error_string_n(error, errbuf, sizeof(errbuf));
-                        log_debug("Failed to invoke SSL_write: %s", errbuf);
+                        log_debug("Failed to invoke SSL_write: %s", DNSTLS_ERROR_STRING(error));
                         stream->dnstls_events = 0;
                         ss = -EPIPE;
                 }
@@ -331,6 +314,29 @@
         return ss;
 }
 
+ssize_t dnstls_stream_writev(DnsStream *stream, const struct iovec *iov, size_t iovcnt) {
+        _cleanup_free_ char *buf = NULL;
+        size_t count;
+
+        assert(stream);
+        assert(stream->encrypted);
+        assert(stream->dnstls_data.ssl);
+        assert(iov);
+        assert(IOVEC_TOTAL_SIZE(iov, iovcnt) > 0);
+
+        if (iovcnt == 1)
+                return dnstls_stream_write(stream, iov[0].iov_base, iov[0].iov_len);
+
+        /* As of now, OpenSSL can not accumulate multiple writes, so join into a
+           single buffer. Suboptimal, but better than multiple SSL_write calls. */
+        count = IOVEC_TOTAL_SIZE(iov, iovcnt);
+        buf = new(char, count);
+        for (size_t i = 0, pos = 0; i < iovcnt; pos += iov[i].iov_len, i++)
+                memcpy(buf + pos, iov[i].iov_base, iov[i].iov_len);
+
+        return dnstls_stream_write(stream, buf, count);
+}
+
 ssize_t dnstls_stream_read(DnsStream *stream, void *buf, size_t count) {
         int error, r;
         ssize_t ss;
@@ -345,16 +351,21 @@
         if (r <= 0) {
                 error = SSL_get_error(stream->dnstls_data.ssl, r);
                 if (IN_SET(error, SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE)) {
-                        stream->dnstls_events = error == SSL_ERROR_WANT_READ ? EPOLLIN : EPOLLOUT;
+                        /* If we receive SSL_ERROR_WANT_READ here, there are two possible scenarios:
+                           * OpenSSL needs to renegotiate (so we want to get an EPOLLIN event), or
+                           * There is no more application data is available, so we can just return
+                           And apparently there's no nice way to distinguish between the two.
+                           To handle this, never set EPOLLIN and just continue as usual.
+                           If OpenSSL really wants to read due to renegotiation, it will tell us
+                           again on SSL_write (at which point we will request EPOLLIN force a read);
+                           or we will just eventually read data anyway while we wait for a packet */
+                        stream->dnstls_events = error == SSL_ERROR_WANT_READ ? 0 : EPOLLOUT;
                         ss = -EAGAIN;
                 } else if (error == SSL_ERROR_ZERO_RETURN) {
                         stream->dnstls_events = 0;
                         ss = 0;
                 } else {
-                        char errbuf[256];
-
-                        ERR_error_string_n(error, errbuf, sizeof(errbuf));
-                        log_debug("Failed to invoke SSL_read: %s", errbuf);
+                        log_debug("Failed to invoke SSL_read: %s", DNSTLS_ERROR_STRING(error));
                         stream->dnstls_events = 0;
                         ss = -EPIPE;
                 }
diff --git a/src/resolve/resolved-dnstls.h b/src/resolve/resolved-dnstls.h
index b638d61..cda97e0 100644
--- a/src/resolve/resolved-dnstls.h
+++ b/src/resolve/resolved-dnstls.h
@@ -4,6 +4,7 @@
 #if ENABLE_DNS_OVER_TLS
 
 #include <stdint.h>
+#include <sys/uio.h>
 
 typedef struct DnsServer DnsServer;
 typedef struct DnsStream DnsStream;
@@ -26,7 +27,7 @@
 void dnstls_stream_free(DnsStream *stream);
 int dnstls_stream_on_io(DnsStream *stream, uint32_t revents);
 int dnstls_stream_shutdown(DnsStream *stream, int error);
-ssize_t dnstls_stream_write(DnsStream *stream, const char *buf, size_t count);
+ssize_t dnstls_stream_writev(DnsStream *stream, const struct iovec *iov, size_t iovcnt);
 ssize_t dnstls_stream_read(DnsStream *stream, void *buf, size_t count);
 
 void dnstls_server_free(DnsServer *server);
diff --git a/src/resolve/resolved-etc-hosts.c b/src/resolve/resolved-etc-hosts.c
index a8da6c3..cf0e2be 100644
--- a/src/resolve/resolved-etc-hosts.c
+++ b/src/resolve/resolved-etc-hosts.c
@@ -18,25 +18,53 @@
 /* Recheck /etc/hosts at most once every 2s */
 #define ETC_HOSTS_RECHECK_USEC (2*USEC_PER_SEC)
 
-static void etc_hosts_item_free(EtcHostsItem *item) {
-        strv_free(item->names);
-        free(item);
+static EtcHostsItemByAddress *etc_hosts_item_by_address_free(EtcHostsItemByAddress *item) {
+        if (!item)
+                return NULL;
+
+        set_free(item->names);
+        return mfree(item);
 }
 
-static void etc_hosts_item_by_name_free(EtcHostsItemByName *item) {
+DEFINE_TRIVIAL_CLEANUP_FUNC(EtcHostsItemByAddress*, etc_hosts_item_by_address_free);
+
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+        by_address_hash_ops,
+        struct in_addr_data,
+        in_addr_data_hash_func,
+        in_addr_data_compare_func,
+        EtcHostsItemByAddress,
+        etc_hosts_item_by_address_free);
+
+static EtcHostsItemByName *etc_hosts_item_by_name_free(EtcHostsItemByName *item) {
+        if (!item)
+                return NULL;
+
         free(item->name);
-        free(item->addresses);
-        free(item);
+        set_free(item->addresses);
+        return mfree(item);
 }
 
-void etc_hosts_free(EtcHosts *hosts) {
-        hosts->by_address = hashmap_free_with_destructor(hosts->by_address, etc_hosts_item_free);
-        hosts->by_name = hashmap_free_with_destructor(hosts->by_name, etc_hosts_item_by_name_free);
-        hosts->no_address = set_free_free(hosts->no_address);
+DEFINE_TRIVIAL_CLEANUP_FUNC(EtcHostsItemByName*, etc_hosts_item_by_name_free);
+
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+        by_name_hash_ops,
+        char,
+        dns_name_hash_func,
+        dns_name_compare_func,
+        EtcHostsItemByName,
+        etc_hosts_item_by_name_free);
+
+void etc_hosts_clear(EtcHosts *hosts) {
+        assert(hosts);
+
+        hosts->by_address = hashmap_free(hosts->by_address);
+        hosts->by_name = hashmap_free(hosts->by_name);
+        hosts->no_address = set_free(hosts->no_address);
 }
 
 void manager_etc_hosts_flush(Manager *m) {
-        etc_hosts_free(&m->etc_hosts);
+        etc_hosts_clear(&m->etc_hosts);
         m->etc_hosts_stat = (struct stat) {};
 }
 
@@ -44,7 +72,7 @@
         _cleanup_free_ char *address_str = NULL;
         struct in_addr_data address = {};
         bool found = false;
-        EtcHostsItem *item;
+        EtcHostsItemByAddress *item;
         int r;
 
         assert(hosts);
@@ -75,23 +103,21 @@
 
                 item = hashmap_get(hosts->by_address, &address);
                 if (!item) {
-                        r = hashmap_ensure_allocated(&hosts->by_address, &in_addr_data_hash_ops);
-                        if (r < 0)
+                        _cleanup_(etc_hosts_item_by_address_freep) EtcHostsItemByAddress *new_item = NULL;
+
+                        new_item = new(EtcHostsItemByAddress, 1);
+                        if (!new_item)
                                 return log_oom();
 
-                        item = new(EtcHostsItem, 1);
-                        if (!item)
-                                return log_oom();
-
-                        *item = (EtcHostsItem) {
+                        *new_item = (EtcHostsItemByAddress) {
                                 .address = address,
                         };
 
-                        r = hashmap_put(hosts->by_address, &item->address, item);
-                        if (r < 0) {
-                                free(item);
+                        r = hashmap_ensure_put(&hosts->by_address, &by_address_hash_ops, &new_item->address, new_item);
+                        if (r < 0)
                                 return log_oom();
-                        }
+
+                        item = TAKE_PTR(new_item);
                 }
         }
 
@@ -105,8 +131,6 @@
                 if (r == 0)
                         break;
 
-                found = true;
-
                 r = dns_name_is_valid_ldh(name);
                 if (r <= 0) {
                         if (r < 0)
@@ -116,48 +140,62 @@
                         continue;
                 }
 
+                found = true;
+
                 if (!item) {
                         /* Optimize the case where we don't need to store any addresses, by storing
                          * only the name in a dedicated Set instead of the hashmap */
 
-                        r = set_ensure_consume(&hosts->no_address, &dns_name_hash_ops, TAKE_PTR(name));
+                        r = set_ensure_consume(&hosts->no_address, &dns_name_hash_ops_free, TAKE_PTR(name));
                         if (r < 0)
-                                return r;
+                                return log_oom();
 
                         continue;
                 }
 
-                r = strv_extend(&item->names, name);
-                if (r < 0)
-                        return log_oom();
-
                 bn = hashmap_get(hosts->by_name, name);
                 if (!bn) {
-                        r = hashmap_ensure_allocated(&hosts->by_name, &dns_name_hash_ops);
+                        _cleanup_(etc_hosts_item_by_name_freep) EtcHostsItemByName *new_item = NULL;
+                        _cleanup_free_ char *name_copy = NULL;
+
+                        name_copy = strdup(name);
+                        if (!name_copy)
+                                return log_oom();
+
+                        new_item = new(EtcHostsItemByName, 1);
+                        if (!new_item)
+                                return log_oom();
+
+                        *new_item = (EtcHostsItemByName) {
+                                .name = TAKE_PTR(name_copy),
+                        };
+
+                        r = hashmap_ensure_put(&hosts->by_name, &by_name_hash_ops, new_item->name, new_item);
                         if (r < 0)
                                 return log_oom();
 
-                        bn = new0(EtcHostsItemByName, 1);
-                        if (!bn)
-                                return log_oom();
-
-                        r = hashmap_put(hosts->by_name, name, bn);
-                        if (r < 0) {
-                                free(bn);
-                                return log_oom();
-                        }
-
-                        bn->name = TAKE_PTR(name);
+                        bn = TAKE_PTR(new_item);
                 }
 
-                if (!GREEDY_REALLOC(bn->addresses, bn->n_addresses + 1))
-                        return log_oom();
+                if (!set_contains(bn->addresses, &address)) {
+                        _cleanup_free_ struct in_addr_data *address_copy = NULL;
 
-                bn->addresses[bn->n_addresses++] = &item->address;
+                        address_copy = newdup(struct in_addr_data, &address, 1);
+                        if (!address_copy)
+                                return log_oom();
+
+                        r = set_ensure_consume(&bn->addresses, &in_addr_data_hash_ops_free, TAKE_PTR(address_copy));
+                        if (r < 0)
+                                return log_oom();
+                }
+
+                r = set_ensure_consume(&item->names, &dns_name_hash_ops_free, TAKE_PTR(name));
+                if (r < 0)
+                        return log_oom();
         }
 
         if (!found)
-                log_warning("/etc/hosts:%u: line is missing any hostnames", nr);
+                log_warning("/etc/hosts:%u: line is missing any valid hostnames", nr);
 
         return 0;
 }
@@ -179,8 +217,6 @@
                 },
         };
 
-        EtcHostsItem *item;
-
         assert(hosts);
 
         /* Removes the 'localhost' entry from what we loaded. But only if the mapping is exclusively between
@@ -191,8 +227,9 @@
          * mappings.  */
 
         for (size_t j = 0; j < ELEMENTSOF(local_in_addrs); j++) {
-                bool all_localhost, in_order;
-                char **i;
+                bool all_localhost, all_local_address;
+                EtcHostsItemByAddress *item;
+                const char *name;
 
                 item = hashmap_get(hosts->by_address, local_in_addrs + j);
                 if (!item)
@@ -200,8 +237,8 @@
 
                 /* Check whether all hostnames the loopback address points to are localhost ones */
                 all_localhost = true;
-                STRV_FOREACH(i, item->names)
-                        if (!is_localhost(*i)) {
+                SET_FOREACH(name, item->names)
+                        if (!is_localhost(name)) {
                                 all_localhost = false;
                                 break;
                         }
@@ -211,48 +248,40 @@
 
                 /* Now check if the names listed for this address actually all point back just to this
                  * address (or the other loopback address). If not, let's stay away from this too. */
-                in_order = true;
-                STRV_FOREACH(i, item->names) {
+                all_local_address = true;
+                SET_FOREACH(name, item->names) {
                         EtcHostsItemByName *n;
-                        bool all_local_address;
+                        struct in_addr_data *a;
 
-                        n = hashmap_get(hosts->by_name, *i);
+                        n = hashmap_get(hosts->by_name, name);
                         if (!n) /* No reverse entry? Then almost certainly the entry already got deleted from
                                  * the previous iteration of this loop, i.e. via the other protocol */
                                 break;
 
                         /* Now check if the addresses of this item are all localhost addresses */
-                        all_local_address = true;
-                        for (size_t m = 0; m < n->n_addresses; m++)
-                                if (!in_addr_is_localhost(n->addresses[m]->family, &n->addresses[m]->address)) {
+                        SET_FOREACH(a, n->addresses)
+                                if (!in_addr_is_localhost(a->family, &a->address)) {
                                         all_local_address = false;
                                         break;
                                 }
 
-                        if (!all_local_address) {
-                                in_order = false;
+                        if (!all_local_address)
                                 break;
-                        }
                 }
 
-                if (!in_order)
+                if (!all_local_address)
                         continue;
 
-                STRV_FOREACH(i, item->names) {
-                        EtcHostsItemByName *n;
-
-                        n = hashmap_remove(hosts->by_name, *i);
-                        if (n)
-                                etc_hosts_item_by_name_free(n);
-                }
+                SET_FOREACH(name, item->names)
+                        etc_hosts_item_by_name_free(hashmap_remove(hosts->by_name, name));
 
                 assert_se(hashmap_remove(hosts->by_address, local_in_addrs + j) == item);
-                etc_hosts_item_free(item);
+                etc_hosts_item_by_address_free(item);
         }
 }
 
 int etc_hosts_parse(EtcHosts *hosts, FILE *f) {
-        _cleanup_(etc_hosts_free) EtcHosts t = {};
+        _cleanup_(etc_hosts_clear) EtcHosts t = {};
         unsigned nr = 0;
         int r;
 
@@ -283,7 +312,7 @@
 
         strip_localhost(&t);
 
-        etc_hosts_free(hosts);
+        etc_hosts_clear(hosts);
         *hosts = t;
         t = (EtcHosts) {}; /* prevent cleanup */
         return 0;
@@ -295,7 +324,7 @@
         usec_t ts;
         int r;
 
-        assert_se(sd_event_now(m->event, clock_boottime_or_monotonic(), &ts) >= 0);
+        assert_se(sd_event_now(m->event, CLOCK_BOOTTIME, &ts) >= 0);
 
         /* See if we checked /etc/hosts recently already */
         if (m->etc_hosts_last != USEC_INFINITY && m->etc_hosts_last + ETC_HOSTS_RECHECK_USEC > ts)
@@ -342,90 +371,97 @@
         return 1;
 }
 
-int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) {
-        bool found_a = false, found_aaaa = false;
-        struct in_addr_data k = {};
-        EtcHostsItemByName *bn;
-        DnsResourceKey *t;
-        const char *name;
-        unsigned i;
+static int etc_hosts_lookup_by_address(
+                EtcHosts *hosts,
+                DnsQuestion *q,
+                const char *name,
+                const struct in_addr_data *address,
+                DnsAnswer **answer) {
+
+        DnsResourceKey *t, *found_ptr = NULL;
+        EtcHostsItemByAddress *item;
         int r;
 
-        assert(m);
+        assert(hosts);
         assert(q);
+        assert(name);
+        assert(address);
         assert(answer);
 
-        if (!m->read_etc_hosts)
+        item = hashmap_get(hosts->by_address, address);
+        if (!item)
                 return 0;
 
-        (void) manager_etc_hosts_read(m);
+        /* We have an address in /etc/hosts that matches the queried name. Let's return successful. Actual data
+         * we'll only return if the request was for PTR. */
 
-        name = dns_question_first_name(q);
-        if (!name)
-                return 0;
+        DNS_QUESTION_FOREACH(t, q) {
+                if (!IN_SET(t->type, DNS_TYPE_PTR, DNS_TYPE_ANY))
+                        continue;
+                if (!IN_SET(t->class, DNS_CLASS_IN, DNS_CLASS_ANY))
+                        continue;
 
-        r = dns_name_address(name, &k.family, &k.address);
-        if (r > 0) {
-                EtcHostsItem *item;
-                DnsResourceKey *found_ptr = NULL;
-
-                item = hashmap_get(m->etc_hosts.by_address, &k);
-                if (!item)
-                        return 0;
-
-                /* We have an address in /etc/hosts that matches the queried name. Let's return successful. Actual data
-                 * we'll only return if the request was for PTR. */
-
-                DNS_QUESTION_FOREACH(t, q) {
-                        if (!IN_SET(t->type, DNS_TYPE_PTR, DNS_TYPE_ANY))
-                                continue;
-                        if (!IN_SET(t->class, DNS_CLASS_IN, DNS_CLASS_ANY))
-                                continue;
-
-                        r = dns_name_equal(dns_resource_key_name(t), name);
-                        if (r < 0)
-                                return r;
-                        if (r > 0) {
-                                found_ptr = t;
-                                break;
-                        }
+                r = dns_name_equal(dns_resource_key_name(t), name);
+                if (r < 0)
+                        return r;
+                if (r > 0) {
+                        found_ptr = t;
+                        break;
                 }
-
-                if (found_ptr) {
-                        char **n;
-
-                        r = dns_answer_reserve(answer, strv_length(item->names));
-                        if (r < 0)
-                                return r;
-
-                        STRV_FOREACH(n, item->names) {
-                                _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
-
-                                rr = dns_resource_record_new(found_ptr);
-                                if (!rr)
-                                        return -ENOMEM;
-
-                                rr->ptr.name = strdup(*n);
-                                if (!rr->ptr.name)
-                                        return -ENOMEM;
-
-                                r = dns_answer_add(*answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL);
-                                if (r < 0)
-                                        return r;
-                        }
-                }
-
-                return 1;
         }
 
-        bn = hashmap_get(m->etc_hosts.by_name, name);
-        if (bn) {
-                r = dns_answer_reserve(answer, bn->n_addresses);
+        if (found_ptr) {
+                const char *n;
+
+                r = dns_answer_reserve(answer, set_size(item->names));
+                if (r < 0)
+                        return r;
+
+                SET_FOREACH(n, item->names) {
+                        _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
+
+                        rr = dns_resource_record_new(found_ptr);
+                        if (!rr)
+                                return -ENOMEM;
+
+                        rr->ptr.name = strdup(n);
+                        if (!rr->ptr.name)
+                                return -ENOMEM;
+
+                        r = dns_answer_add(*answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        return 1;
+}
+
+static int etc_hosts_lookup_by_name(
+                EtcHosts *hosts,
+                DnsQuestion *q,
+                const char *name,
+                DnsAnswer **answer) {
+
+        bool found_a = false, found_aaaa = false;
+        const struct in_addr_data *a;
+        EtcHostsItemByName *item;
+        DnsResourceKey *t;
+        int r;
+
+        assert(hosts);
+        assert(q);
+        assert(name);
+        assert(answer);
+
+        item = hashmap_get(hosts->by_name, name);
+        if (item) {
+                r = dns_answer_reserve(answer, set_size(item->addresses));
                 if (r < 0)
                         return r;
         } else {
                 /* Check if name was listed with no address. If yes, continue to return an answer. */
-                if (!set_contains(m->etc_hosts.no_address, name))
+                if (!set_contains(hosts->no_address, name))
                         return 0;
         }
 
@@ -450,14 +486,14 @@
                         break;
         }
 
-        for (i = 0; bn && i < bn->n_addresses; i++) {
+        SET_FOREACH(a, item ? item->addresses : NULL) {
                 _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
 
-                if ((!found_a && bn->addresses[i]->family == AF_INET) ||
-                    (!found_aaaa && bn->addresses[i]->family == AF_INET6))
+                if ((!found_a && a->family == AF_INET) ||
+                    (!found_aaaa && a->family == AF_INET6))
                         continue;
 
-                r = dns_resource_record_new_address(&rr, bn->addresses[i]->family, &bn->addresses[i]->address, bn->name);
+                r = dns_resource_record_new_address(&rr, a->family, &a->address, item->name);
                 if (r < 0)
                         return r;
 
@@ -468,3 +504,26 @@
 
         return found_a || found_aaaa;
 }
+
+int manager_etc_hosts_lookup(Manager *m, DnsQuestion *q, DnsAnswer **answer) {
+        struct in_addr_data k;
+        const char *name;
+
+        assert(m);
+        assert(q);
+        assert(answer);
+
+        if (!m->read_etc_hosts)
+                return 0;
+
+        (void) manager_etc_hosts_read(m);
+
+        name = dns_question_first_name(q);
+        if (!name)
+                return 0;
+
+        if (dns_name_address(name, &k.family, &k.address) > 0)
+                return etc_hosts_lookup_by_address(&m->etc_hosts, q, name, &k, answer);
+
+        return etc_hosts_lookup_by_name(&m->etc_hosts, q, name, answer);
+}
diff --git a/src/resolve/resolved-etc-hosts.h b/src/resolve/resolved-etc-hosts.h
index c85926a..e1a7249 100644
--- a/src/resolve/resolved-etc-hosts.h
+++ b/src/resolve/resolved-etc-hosts.h
@@ -5,21 +5,18 @@
 #include "resolved-dns-question.h"
 #include "resolved-dns-answer.h"
 
-typedef struct EtcHostsItem {
+typedef struct EtcHostsItemByAddress {
         struct in_addr_data address;
-
-        char **names;
-} EtcHostsItem;
+        Set *names;
+} EtcHostsItemByAddress;
 
 typedef struct EtcHostsItemByName {
         char *name;
-
-        struct in_addr_data **addresses;
-        size_t n_addresses;
+        Set *addresses;
 } EtcHostsItemByName;
 
 int etc_hosts_parse(EtcHosts *hosts, FILE *f);
-void etc_hosts_free(EtcHosts *hosts);
+void etc_hosts_clear(EtcHosts *hosts);
 
 void manager_etc_hosts_flush(Manager *m);
 int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer);
diff --git a/src/resolve/resolved-link-bus.c b/src/resolve/resolved-link-bus.c
index 8d533d7..9b6d14f 100644
--- a/src/resolve/resolved-link-bus.c
+++ b/src/resolve/resolved-link-bus.c
@@ -22,6 +22,8 @@
 
 static BUS_DEFINE_PROPERTY_GET(property_get_dnssec_supported, "b", Link, link_dnssec_supported);
 static BUS_DEFINE_PROPERTY_GET2(property_get_dnssec_mode, "s", Link, link_get_dnssec_mode, dnssec_mode_to_string);
+static BUS_DEFINE_PROPERTY_GET2(property_get_llmnr_support, "s", Link, link_get_llmnr_support, resolve_support_to_string);
+static BUS_DEFINE_PROPERTY_GET2(property_get_mdns_support, "s", Link, link_get_mdns_support, resolve_support_to_string);
 
 static int property_get_dns_over_tls_mode(
                 sd_bus *bus,
@@ -32,10 +34,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
 
         assert(reply);
-        assert(l);
 
         return sd_bus_message_append(reply, "s", dns_over_tls_mode_to_string(link_get_dns_over_tls_mode(l)));
 }
@@ -50,12 +51,10 @@
                 sd_bus_error *error,
                 bool extended) {
 
-        Link *l = userdata;
-        DnsServer *s;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
         assert(reply);
-        assert(l);
 
         r = sd_bus_message_open_container(reply, 'a', extended ? "(iayqs)" : "(iay)");
         if (r < 0)
@@ -143,12 +142,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Link *l = userdata;
-        DnsSearchDomain *d;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
         assert(reply);
-        assert(l);
 
         r = sd_bus_message_open_container(reply, 'a', "(sb)");
         if (r < 0)
@@ -172,10 +169,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
 
         assert(reply);
-        assert(l);
 
         /* Return what is configured, if there's something configured */
         if (l->default_route >= 0)
@@ -197,11 +193,10 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         uint64_t mask;
 
         assert(reply);
-        assert(l);
 
         mask =  (l->unicast_scope ? SD_RESOLVED_DNS : 0) |
                 (l->llmnr_ipv4_scope ? SD_RESOLVED_LLMNR_IPV4 : 0) |
@@ -221,12 +216,11 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         const char *name;
         int r;
 
         assert(reply);
-        assert(l);
 
         r = sd_bus_message_open_container(reply, 'a', "s");
         if (r < 0)
@@ -256,12 +250,11 @@
         _cleanup_free_ char *j = NULL;
         struct in_addr_full **dns;
         bool changed = false;
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         size_t n;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -354,12 +347,11 @@
 
 int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         _cleanup_free_ char *j = NULL;
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         bool changed = false;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -469,11 +461,10 @@
 }
 
 int bus_link_method_set_default_route(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r, b;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -507,13 +498,12 @@
 }
 
 int bus_link_method_set_llmnr(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         ResolveSupport mode;
         const char *llmnr;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -556,13 +546,12 @@
 }
 
 int bus_link_method_set_mdns(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         ResolveSupport mode;
         const char *mdns;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -573,7 +562,7 @@
                 return r;
 
         if (isempty(mdns))
-                mode = RESOLVE_SUPPORT_NO;
+                mode = RESOLVE_SUPPORT_YES;
         else {
                 mode = resolve_support_from_string(mdns);
                 if (mode < 0)
@@ -605,13 +594,12 @@
 }
 
 int bus_link_method_set_dns_over_tls(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         const char *dns_over_tls;
         DnsOverTlsMode mode;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -642,6 +630,7 @@
 
         if (l->dns_over_tls_mode != mode) {
                 link_set_dns_over_tls_mode(l, mode);
+                link_allocate_scopes(l);
 
                 (void) link_save_user(l);
 
@@ -653,13 +642,12 @@
 }
 
 int bus_link_method_set_dnssec(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         const char *dnssec;
         DnssecMode mode;
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -690,6 +678,7 @@
 
         if (l->dnssec_mode != mode) {
                 link_set_dnssec_mode(l, mode);
+                link_allocate_scopes(l);
 
                 (void) link_save_user(l);
 
@@ -704,12 +693,10 @@
         _cleanup_set_free_free_ Set *ns = NULL;
         _cleanup_strv_free_ char **ntas = NULL;
         _cleanup_free_ char *j = NULL;
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
-        char **i;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -766,11 +753,10 @@
 }
 
 int bus_link_method_revert(sd_bus_message *message, void *userdata, sd_bus_error *error) {
-        Link *l = userdata;
+        Link *l = ASSERT_PTR(userdata);
         int r;
 
         assert(message);
-        assert(l);
 
         r = verify_unmanaged_link(l, error);
         if (r < 0)
@@ -800,7 +786,7 @@
 
 static int link_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
         _cleanup_free_ char *e = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Link *link;
         int ifindex, r;
 
@@ -808,7 +794,6 @@
         assert(path);
         assert(interface);
         assert(found);
-        assert(m);
 
         r = sd_bus_path_decode(path, "/org/freedesktop/resolve1/link", &e);
         if (r <= 0)
@@ -843,13 +828,12 @@
 
 static int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
         _cleanup_strv_free_ char **l = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Link *link;
         unsigned c = 0;
 
         assert(bus);
         assert(path);
-        assert(m);
         assert(nodes);
 
         l = new0(char*, hashmap_size(m->links) + 1);
@@ -882,8 +866,8 @@
         SD_BUS_PROPERTY("CurrentDNSServerEx", "(iayqs)", property_get_current_dns_server_ex, offsetof(Link, current_dns_server), 0),
         SD_BUS_PROPERTY("Domains", "a(sb)", property_get_domains, 0, 0),
         SD_BUS_PROPERTY("DefaultRoute", "b", property_get_default_route, 0, 0),
-        SD_BUS_PROPERTY("LLMNR", "s", bus_property_get_resolve_support, offsetof(Link, llmnr_support), 0),
-        SD_BUS_PROPERTY("MulticastDNS", "s", bus_property_get_resolve_support, offsetof(Link, mdns_support), 0),
+        SD_BUS_PROPERTY("LLMNR", "s", property_get_llmnr_support, 0, 0),
+        SD_BUS_PROPERTY("MulticastDNS", "s", property_get_mdns_support, 0, 0),
         SD_BUS_PROPERTY("DNSOverTLS", "s", property_get_dns_over_tls_mode, 0, 0),
         SD_BUS_PROPERTY("DNSSEC", "s", property_get_dnssec_mode, 0, 0),
         SD_BUS_PROPERTY("DNSSECNegativeTrustAnchors", "as", property_get_ntas, 0, 0),
diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c
index 18dc3d2..d41f6f3 100644
--- a/src/resolve/resolved-link.c
+++ b/src/resolve/resolved-link.c
@@ -11,11 +11,13 @@
 #include "fileio.h"
 #include "log-link.h"
 #include "mkdir.h"
+#include "netif-util.h"
 #include "parse-util.h"
 #include "resolved-link.h"
 #include "resolved-llmnr.h"
 #include "resolved-mdns.h"
 #include "socket-netlink.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "tmpfile-util.h"
@@ -35,7 +37,7 @@
                 .ifindex = ifindex,
                 .default_route = -1,
                 .llmnr_support = RESOLVE_SUPPORT_YES,
-                .mdns_support = RESOLVE_SUPPORT_NO,
+                .mdns_support = RESOLVE_SUPPORT_YES,
                 .dnssec_mode = _DNSSEC_MODE_INVALID,
                 .dns_over_tls_mode = _DNS_OVER_TLS_MODE_INVALID,
                 .operstate = IF_OPER_UNKNOWN,
@@ -62,7 +64,7 @@
 
         l->default_route = -1;
         l->llmnr_support = RESOLVE_SUPPORT_YES;
-        l->mdns_support = RESOLVE_SUPPORT_NO;
+        l->mdns_support = RESOLVE_SUPPORT_YES;
         l->dnssec_mode = _DNSSEC_MODE_INVALID;
         l->dns_over_tls_mode = _DNS_OVER_TLS_MODE_INVALID;
 
@@ -132,78 +134,71 @@
 
                         r = dns_scope_new(l->manager, &l->unicast_scope, l, DNS_PROTOCOL_DNS, AF_UNSPEC);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to allocate DNS scope: %m");
+                                log_link_warning_errno(l, r, "Failed to allocate DNS scope, ignoring: %m");
                 }
         } else
                 l->unicast_scope = dns_scope_free(l->unicast_scope);
 
         if (link_relevant(l, AF_INET, true) &&
-            l->llmnr_support != RESOLVE_SUPPORT_NO &&
-            l->manager->llmnr_support != RESOLVE_SUPPORT_NO) {
+            link_get_llmnr_support(l) != RESOLVE_SUPPORT_NO) {
                 if (!l->llmnr_ipv4_scope) {
                         r = dns_scope_new(l->manager, &l->llmnr_ipv4_scope, l, DNS_PROTOCOL_LLMNR, AF_INET);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to allocate LLMNR IPv4 scope: %m");
+                                log_link_warning_errno(l, r, "Failed to allocate LLMNR IPv4 scope, ignoring: %m");
                 }
         } else
                 l->llmnr_ipv4_scope = dns_scope_free(l->llmnr_ipv4_scope);
 
         if (link_relevant(l, AF_INET6, true) &&
-            l->llmnr_support != RESOLVE_SUPPORT_NO &&
-            l->manager->llmnr_support != RESOLVE_SUPPORT_NO &&
-            socket_ipv6_is_supported()) {
+            link_get_llmnr_support(l) != RESOLVE_SUPPORT_NO) {
                 if (!l->llmnr_ipv6_scope) {
                         r = dns_scope_new(l->manager, &l->llmnr_ipv6_scope, l, DNS_PROTOCOL_LLMNR, AF_INET6);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to allocate LLMNR IPv6 scope: %m");
+                                log_link_warning_errno(l, r, "Failed to allocate LLMNR IPv6 scope, ignoring: %m");
                 }
         } else
                 l->llmnr_ipv6_scope = dns_scope_free(l->llmnr_ipv6_scope);
 
         if (link_relevant(l, AF_INET, true) &&
-            l->mdns_support != RESOLVE_SUPPORT_NO &&
-            l->manager->mdns_support != RESOLVE_SUPPORT_NO) {
+            link_get_mdns_support(l) != RESOLVE_SUPPORT_NO) {
                 if (!l->mdns_ipv4_scope) {
                         r = dns_scope_new(l->manager, &l->mdns_ipv4_scope, l, DNS_PROTOCOL_MDNS, AF_INET);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to allocate mDNS IPv4 scope: %m");
+                                log_link_warning_errno(l, r, "Failed to allocate mDNS IPv4 scope, ignoring: %m");
                 }
         } else
                 l->mdns_ipv4_scope = dns_scope_free(l->mdns_ipv4_scope);
 
         if (link_relevant(l, AF_INET6, true) &&
-            l->mdns_support != RESOLVE_SUPPORT_NO &&
-            l->manager->mdns_support != RESOLVE_SUPPORT_NO) {
+            link_get_mdns_support(l) != RESOLVE_SUPPORT_NO) {
                 if (!l->mdns_ipv6_scope) {
                         r = dns_scope_new(l->manager, &l->mdns_ipv6_scope, l, DNS_PROTOCOL_MDNS, AF_INET6);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to allocate mDNS IPv6 scope: %m");
+                                log_link_warning_errno(l, r, "Failed to allocate mDNS IPv6 scope, ignoring: %m");
                 }
         } else
                 l->mdns_ipv6_scope = dns_scope_free(l->mdns_ipv6_scope);
 }
 
 void link_add_rrs(Link *l, bool force_remove) {
-        LinkAddress *a;
         int r;
 
         LIST_FOREACH(addresses, a, l->addresses)
                 link_address_add_rrs(a, force_remove);
 
         if (!force_remove &&
-            l->mdns_support == RESOLVE_SUPPORT_YES &&
-            l->manager->mdns_support == RESOLVE_SUPPORT_YES) {
+            link_get_mdns_support(l) == RESOLVE_SUPPORT_YES) {
 
                 if (l->mdns_ipv4_scope) {
                         r = dns_scope_add_dnssd_services(l->mdns_ipv4_scope);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add IPv4 DNS-SD services: %m");
+                                log_link_warning_errno(l, r, "Failed to add IPv4 DNS-SD services, ignoring: %m");
                 }
 
                 if (l->mdns_ipv6_scope) {
                         r = dns_scope_add_dnssd_services(l->mdns_ipv6_scope);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add IPv6 DNS-SD services: %m");
+                                log_link_warning_errno(l, r, "Failed to add IPv6 DNS-SD services, ignoring: %m");
                 }
 
         } else {
@@ -211,13 +206,13 @@
                 if (l->mdns_ipv4_scope) {
                         r = dns_scope_remove_dnssd_services(l->mdns_ipv4_scope);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to remove IPv4 DNS-SD services: %m");
+                                log_link_warning_errno(l, r, "Failed to remove IPv4 DNS-SD services, ignoring: %m");
                 }
 
                 if (l->mdns_ipv6_scope) {
                         r = dns_scope_remove_dnssd_services(l->mdns_ipv6_scope);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to remove IPv6 DNS-SD services: %m");
+                                log_link_warning_errno(l, r, "Failed to remove IPv6 DNS-SD services, ignoring: %m");
                 }
         }
 }
@@ -236,15 +231,16 @@
         (void) sd_netlink_message_read_u32(m, IFLA_MTU, &l->mtu);
         (void) sd_netlink_message_read_u8(m, IFLA_OPERSTATE, &l->operstate);
 
-        if (sd_netlink_message_read_string(m, IFLA_IFNAME, &n) >= 0) {
+        if (sd_netlink_message_read_string(m, IFLA_IFNAME, &n) >= 0 &&
+            !streq_ptr(l->ifname, n)) {
+                if (l->ifname)
+                        log_link_debug(l, "Interface name change detected: %s -> %s", l->ifname, n);
+
                 r = free_and_strdup(&l->ifname, n);
                 if (r < 0)
                         return r;
         }
 
-        link_allocate_scopes(l);
-        link_add_rrs(l, false);
-
         return 0;
 }
 
@@ -281,7 +277,6 @@
 
 static int link_update_dns_servers(Link *l) {
         _cleanup_strv_free_ char **nameservers = NULL;
-        char **nameserver;
         int r;
 
         assert(l);
@@ -359,7 +354,7 @@
 
         assert(l);
 
-        l->mdns_support = RESOLVE_SUPPORT_NO;
+        l->mdns_support = RESOLVE_SUPPORT_YES;
 
         r = sd_network_link_get_mdns(l->ifindex, &b);
         if (r == -ENODATA)
@@ -381,11 +376,15 @@
 
 #if ! ENABLE_DNS_OVER_TLS
         if (mode != DNS_OVER_TLS_NO)
-                log_warning("DNS-over-TLS option for the link cannot be enabled or set to opportunistic when systemd-resolved is built without DNS-over-TLS support. Turning off DNS-over-TLS support.");
+                log_link_warning(l,
+                                 "DNS-over-TLS option for the link cannot be enabled or set to opportunistic "
+                                 "when systemd-resolved is built without DNS-over-TLS support. "
+                                 "Turning off DNS-over-TLS support.");
         return;
 #endif
 
         l->dns_over_tls_mode = mode;
+        l->unicast_scope = dns_scope_free(l->unicast_scope);
 }
 
 static int link_update_dns_over_tls_mode(Link *l) {
@@ -414,26 +413,20 @@
 
         assert(l);
 
-#if ! HAVE_GCRYPT
+#if !HAVE_OPENSSL_OR_GCRYPT
         if (IN_SET(mode, DNSSEC_YES, DNSSEC_ALLOW_DOWNGRADE))
-                log_warning("DNSSEC option for the link cannot be enabled or set to allow-downgrade when systemd-resolved is built without gcrypt support. Turning off DNSSEC support.");
+                log_link_warning(l,
+                                 "DNSSEC option for the link cannot be enabled or set to allow-downgrade "
+                                 "when systemd-resolved is built without a cryptographic library. "
+                                 "Turning off DNSSEC support.");
         return;
 #endif
 
         if (l->dnssec_mode == mode)
                 return;
 
-        if ((l->dnssec_mode == _DNSSEC_MODE_INVALID) ||
-            (l->dnssec_mode == DNSSEC_NO && mode != DNSSEC_NO) ||
-            (l->dnssec_mode == DNSSEC_ALLOW_DOWNGRADE && mode == DNSSEC_YES)) {
-
-                /* When switching from non-DNSSEC mode to DNSSEC mode, flush the cache. Also when switching from the
-                 * allow-downgrade mode to full DNSSEC mode, flush it too. */
-                if (l->unicast_scope)
-                        dns_cache_flush(&l->unicast_scope->cache);
-        }
-
         l->dnssec_mode = mode;
+        l->unicast_scope = dns_scope_free(l->unicast_scope);
 }
 
 static int link_update_dnssec_mode(Link *l) {
@@ -470,7 +463,7 @@
 
         r = sd_network_link_get_dnssec_negative_trust_anchors(l->ifindex, &ntas);
         if (r == -ENODATA)
-                return r;
+                return 0;
         if (r < 0)
                 return r;
 
@@ -510,7 +503,6 @@
 
 static int link_update_search_domains(Link *l) {
         _cleanup_strv_free_ char **sdomains = NULL, **rdomains = NULL;
-        char **i;
         int r, q;
 
         assert(l);
@@ -565,33 +557,52 @@
         if (r < 0)
                 return r;
 
-        return !STR_IN_SET(state, "pending", "unmanaged");
+        return !STR_IN_SET(state, "pending", "initialized", "unmanaged");
+}
+
+static void link_enter_unmanaged(Link *l) {
+        assert(l);
+
+        /* If this link used to be managed, but is now unmanaged, flush all our settings — but only once. */
+        if (l->is_managed)
+                link_flush_settings(l);
+
+        l->is_managed = false;
 }
 
 static void link_read_settings(Link *l) {
+        struct stat st;
         int r;
 
         assert(l);
 
         /* Read settings from networkd, except when networkd is not managing this interface. */
 
+        r = sd_network_link_get_stat(l->ifindex, &st);
+        if (r == -ENOENT)
+                return link_enter_unmanaged(l);
+        if (r < 0)
+                return (void) log_link_warning_errno(l, r, "Failed to stat() networkd's link state file, ignoring: %m");
+
+        if (stat_inode_unmodified(&l->networkd_state_file_stat, &st))
+                /* The state file is unmodified. Not necessary to re-read settings. */
+                return;
+
+        /* Save the new stat for the next event. */
+        l->networkd_state_file_stat = st;
+
         r = link_is_managed(l);
-        if (r < 0) {
-                log_link_warning_errno(l, r, "Failed to determine whether the interface is managed: %m");
-                return;
-        }
-        if (r == 0) {
-
-                /* If this link used to be managed, but is now unmanaged, flush all our settings — but only once. */
-                if (l->is_managed)
-                        link_flush_settings(l);
-
-                l->is_managed = false;
-                return;
-        }
+        if (r < 0)
+                return (void) log_link_warning_errno(l, r, "Failed to determine whether the interface is managed, ignoring: %m");
+        if (r == 0)
+                return link_enter_unmanaged(l);
 
         l->is_managed = true;
 
+        r = network_link_get_operational_state(l->ifindex, &l->networkd_operstate);
+        if (r < 0)
+                log_link_warning_errno(l, r, "Failed to read networkd's link operational state, ignoring: %m");
+
         r = link_update_dns_servers(l);
         if (r < 0)
                 log_link_warning_errno(l, r, "Failed to read DNS servers for the interface, ignoring: %m");
@@ -635,13 +646,13 @@
         if (r < 0)
                 return r;
 
-        if (l->llmnr_support != RESOLVE_SUPPORT_NO) {
+        if (link_get_llmnr_support(l) != RESOLVE_SUPPORT_NO) {
                 r = manager_llmnr_start(l->manager);
                 if (r < 0)
                         return r;
         }
 
-        if (l->mdns_support != RESOLVE_SUPPORT_NO) {
+        if (link_get_mdns_support(l) != RESOLVE_SUPPORT_NO) {
                 r = manager_mdns_start(l->manager);
                 if (r < 0)
                         return r;
@@ -654,9 +665,6 @@
 }
 
 bool link_relevant(Link *l, int family, bool local_multicast) {
-        _cleanup_free_ char *state = NULL;
-        LinkAddress *a;
-
         assert(l);
 
         /* A link is relevant for local multicast traffic if it isn't a loopback device, has a link
@@ -665,24 +673,21 @@
          * A link is relevant for non-multicast traffic if it isn't a loopback device, has a link beat, and has at
          * least one routable address. */
 
-        if (l->flags & (IFF_LOOPBACK|IFF_DORMANT))
+        if ((l->flags & (IFF_LOOPBACK | IFF_DORMANT)) != 0)
                 return false;
 
-        if ((l->flags & (IFF_UP|IFF_LOWER_UP)) != (IFF_UP|IFF_LOWER_UP))
+        if (!FLAGS_SET(l->flags, IFF_UP | IFF_LOWER_UP))
                 return false;
 
-        if (local_multicast) {
-                if ((l->flags & IFF_MULTICAST) != IFF_MULTICAST)
-                        return false;
-        }
-
-        /* Check kernel operstate
-         * https://www.kernel.org/doc/Documentation/networking/operstates.txt */
-        if (!IN_SET(l->operstate, IF_OPER_UNKNOWN, IF_OPER_UP))
+        if (local_multicast &&
+            !FLAGS_SET(l->flags, IFF_MULTICAST))
                 return false;
 
-        (void) sd_network_link_get_operational_state(l->ifindex, &state);
-        if (state && !STR_IN_SET(state, "unknown", "degraded", "degraded-carrier", "routable"))
+        if (!netif_has_carrier(l->operstate, l->flags))
+                return false;
+
+        if (l->is_managed &&
+            !IN_SET(l->networkd_operstate, LINK_OPERSTATE_DEGRADED_CARRIER, LINK_OPERSTATE_DEGRADED, LINK_OPERSTATE_ROUTABLE))
                 return false;
 
         LIST_FOREACH(addresses, a, l->addresses)
@@ -693,8 +698,6 @@
 }
 
 LinkAddress *link_find_address(Link *l, int family, const union in_addr_union *in_addr) {
-        LinkAddress *a;
-
         assert(l);
 
         if (!IN_SET(family, AF_INET, AF_INET6))
@@ -717,7 +720,7 @@
                 return s;
 
         if (s)
-                log_debug("Switching to DNS server %s for interface %s.", strna(dns_server_string_full(s)), l->ifname);
+                log_link_debug(l, "Switching to DNS server %s.", strna(dns_server_string_full(s)));
 
         dns_server_unref(l->current_dns_server);
         l->current_dns_server = dns_server_ref(s);
@@ -794,6 +797,24 @@
         return true;
 }
 
+ResolveSupport link_get_llmnr_support(Link *link) {
+        assert(link);
+        assert(link->manager);
+
+        /* This provides the effective LLMNR support level for the link, instead of the 'internal' per-link setting. */
+
+        return MIN(link->llmnr_support, link->manager->llmnr_support);
+}
+
+ResolveSupport link_get_mdns_support(Link *link) {
+        assert(link);
+        assert(link->manager);
+
+        /* This provides the effective mDNS support level for the link, instead of the 'internal' per-link setting. */
+
+        return MIN(link->mdns_support, link->manager->mdns_support);
+}
+
 int link_address_new(Link *l, LinkAddress **ret, int family, const union in_addr_union *in_addr) {
         LinkAddress *a;
 
@@ -877,8 +898,7 @@
                 if (!force_remove &&
                     link_address_relevant(a, true) &&
                     a->link->llmnr_ipv4_scope &&
-                    a->link->llmnr_support == RESOLVE_SUPPORT_YES &&
-                    a->link->manager->llmnr_support == RESOLVE_SUPPORT_YES) {
+                    link_get_llmnr_support(a->link) == RESOLVE_SUPPORT_YES) {
 
                         if (!a->link->manager->llmnr_host_ipv4_key) {
                                 a->link->manager->llmnr_host_ipv4_key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, a->link->manager->llmnr_hostname);
@@ -909,11 +929,11 @@
 
                         r = dns_zone_put(&a->link->llmnr_ipv4_scope->zone, a->link->llmnr_ipv4_scope, a->llmnr_address_rr, true);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add A record to LLMNR zone: %m");
+                                log_link_warning_errno(a->link, r, "Failed to add A record to LLMNR zone, ignoring: %m");
 
                         r = dns_zone_put(&a->link->llmnr_ipv4_scope->zone, a->link->llmnr_ipv4_scope, a->llmnr_ptr_rr, false);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add IPv4 PTR record to LLMNR zone: %m");
+                                log_link_warning_errno(a->link, r, "Failed to add IPv4 PTR record to LLMNR zone, ignoring: %m");
                 } else {
                         if (a->llmnr_address_rr) {
                                 if (a->link->llmnr_ipv4_scope)
@@ -931,8 +951,7 @@
                 if (!force_remove &&
                     link_address_relevant(a, true) &&
                     a->link->mdns_ipv4_scope &&
-                    a->link->mdns_support == RESOLVE_SUPPORT_YES &&
-                    a->link->manager->mdns_support == RESOLVE_SUPPORT_YES) {
+                    link_get_mdns_support(a->link) == RESOLVE_SUPPORT_YES) {
                         if (!a->link->manager->mdns_host_ipv4_key) {
                                 a->link->manager->mdns_host_ipv4_key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, a->link->manager->mdns_hostname);
                                 if (!a->link->manager->mdns_host_ipv4_key) {
@@ -962,11 +981,11 @@
 
                         r = dns_zone_put(&a->link->mdns_ipv4_scope->zone, a->link->mdns_ipv4_scope, a->mdns_address_rr, true);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add A record to MDNS zone: %m");
+                                log_link_warning_errno(a->link, r, "Failed to add A record to MDNS zone, ignoring: %m");
 
                         r = dns_zone_put(&a->link->mdns_ipv4_scope->zone, a->link->mdns_ipv4_scope, a->mdns_ptr_rr, false);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add IPv4 PTR record to MDNS zone: %m");
+                                log_link_warning_errno(a->link, r, "Failed to add IPv4 PTR record to MDNS zone, ignoring: %m");
                 } else {
                         if (a->mdns_address_rr) {
                                 if (a->link->mdns_ipv4_scope)
@@ -987,8 +1006,7 @@
                 if (!force_remove &&
                     link_address_relevant(a, true) &&
                     a->link->llmnr_ipv6_scope &&
-                    a->link->llmnr_support == RESOLVE_SUPPORT_YES &&
-                    a->link->manager->llmnr_support == RESOLVE_SUPPORT_YES) {
+                    link_get_llmnr_support(a->link) == RESOLVE_SUPPORT_YES) {
 
                         if (!a->link->manager->llmnr_host_ipv6_key) {
                                 a->link->manager->llmnr_host_ipv6_key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_AAAA, a->link->manager->llmnr_hostname);
@@ -1019,11 +1037,11 @@
 
                         r = dns_zone_put(&a->link->llmnr_ipv6_scope->zone, a->link->llmnr_ipv6_scope, a->llmnr_address_rr, true);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add AAAA record to LLMNR zone: %m");
+                                log_link_warning_errno(a->link, r, "Failed to add AAAA record to LLMNR zone, ignoring: %m");
 
                         r = dns_zone_put(&a->link->llmnr_ipv6_scope->zone, a->link->llmnr_ipv6_scope, a->llmnr_ptr_rr, false);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add IPv6 PTR record to LLMNR zone: %m");
+                                log_link_warning_errno(a->link, r, "Failed to add IPv6 PTR record to LLMNR zone, ignoring: %m");
                 } else {
                         if (a->llmnr_address_rr) {
                                 if (a->link->llmnr_ipv6_scope)
@@ -1041,8 +1059,7 @@
                 if (!force_remove &&
                     link_address_relevant(a, true) &&
                     a->link->mdns_ipv6_scope &&
-                    a->link->mdns_support == RESOLVE_SUPPORT_YES &&
-                    a->link->manager->mdns_support == RESOLVE_SUPPORT_YES) {
+                    link_get_mdns_support(a->link) == RESOLVE_SUPPORT_YES) {
 
                         if (!a->link->manager->mdns_host_ipv6_key) {
                                 a->link->manager->mdns_host_ipv6_key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_AAAA, a->link->manager->mdns_hostname);
@@ -1073,11 +1090,11 @@
 
                         r = dns_zone_put(&a->link->mdns_ipv6_scope->zone, a->link->mdns_ipv6_scope, a->mdns_address_rr, true);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add AAAA record to MDNS zone: %m");
+                                log_link_warning_errno(a->link, r, "Failed to add AAAA record to MDNS zone, ignoring: %m");
 
                         r = dns_zone_put(&a->link->mdns_ipv6_scope->zone, a->link->mdns_ipv6_scope, a->mdns_ptr_rr, false);
                         if (r < 0)
-                                log_warning_errno(r, "Failed to add IPv6 PTR record to MDNS zone: %m");
+                                log_link_warning_errno(a->link, r, "Failed to add IPv6 PTR record to MDNS zone, ignoring: %m");
                 } else {
                         if (a->mdns_address_rr) {
                                 if (a->link->mdns_ipv6_scope)
@@ -1096,7 +1113,7 @@
         return;
 
 fail:
-        log_debug_errno(r, "Failed to update address RRs: %m");
+        log_link_debug_errno(a->link, r, "Failed to update address RRs, ignoring: %m");
 }
 
 int link_address_update_rtnl(LinkAddress *a, sd_netlink_message *m) {
@@ -1139,7 +1156,7 @@
                 return false;
 
         if (l->llmnr_support != RESOLVE_SUPPORT_YES ||
-            l->mdns_support != RESOLVE_SUPPORT_NO ||
+            l->mdns_support != RESOLVE_SUPPORT_YES ||
             l->dnssec_mode != _DNSSEC_MODE_INVALID ||
             l->dns_over_tls_mode != _DNS_OVER_TLS_MODE_INVALID)
                 return true;
@@ -1195,12 +1212,14 @@
         if (v)
                 fprintf(f, "DNSSEC=%s\n", v);
 
+        v = dns_over_tls_mode_to_string(l->dns_over_tls_mode);
+        if (v)
+                fprintf(f, "DNSOVERTLS=%s\n", v);
+
         if (l->default_route >= 0)
                 fprintf(f, "DEFAULT_ROUTE=%s\n", yes_no(l->default_route));
 
         if (l->dns_servers) {
-                DnsServer *server;
-
                 fputs("SERVERS=", f);
                 LIST_FOREACH(servers, server, l->dns_servers) {
 
@@ -1219,8 +1238,6 @@
         }
 
         if (l->search_domains) {
-                DnsSearchDomain *domain;
-
                 fputs("DOMAINS=", f);
                 LIST_FOREACH(domains, domain, l->search_domains) {
 
@@ -1268,7 +1285,7 @@
         if (temp_path)
                 (void) unlink(temp_path);
 
-        return log_error_errno(r, "Failed to save link data %s: %m", l->state_file);
+        return log_link_error_errno(l, r, "Failed to save link data %s: %m", l->state_file);
 }
 
 int link_load_user(Link *l) {
@@ -1276,6 +1293,7 @@
                 *llmnr = NULL,
                 *mdns = NULL,
                 *dnssec = NULL,
+                *dns_over_tls = NULL,
                 *servers = NULL,
                 *domains = NULL,
                 *ntas = NULL,
@@ -1300,6 +1318,7 @@
                            "LLMNR", &llmnr,
                            "MDNS", &mdns,
                            "DNSSEC", &dnssec,
+                           "DNSOVERTLS", &dns_over_tls,
                            "SERVERS", &servers,
                            "DOMAINS", &domains,
                            "NTAS", &ntas,
@@ -1327,6 +1346,9 @@
         /* If we can't recognize the DNSSEC setting, then set it to invalid, so that the daemon default is used. */
         l->dnssec_mode = dnssec_mode_from_string(dnssec);
 
+        /* Same for DNSOverTLS */
+        l->dns_over_tls_mode = dns_over_tls_mode_from_string(dns_over_tls);
+
         for (p = servers;;) {
                 _cleanup_free_ char *word = NULL;
 
@@ -1338,7 +1360,7 @@
 
                 r = link_update_dns_server_one(l, word);
                 if (r < 0) {
-                        log_debug_errno(r, "Failed to load DNS server '%s', ignoring: %m", word);
+                        log_link_debug_errno(l, r, "Failed to load DNS server '%s', ignoring: %m", word);
                         continue;
                 }
         }
@@ -1359,7 +1381,7 @@
 
                 r = link_update_search_domain_one(l, n, is_route);
                 if (r < 0) {
-                        log_debug_errno(r, "Failed to load search domain '%s', ignoring: %m", word);
+                        log_link_debug_errno(l, r, "Failed to load search domain '%s', ignoring: %m", word);
                         continue;
                 }
         }
@@ -1383,7 +1405,7 @@
         return 0;
 
 fail:
-        return log_error_errno(r, "Failed to load link data %s: %m", l->state_file);
+        return log_link_error_errno(l, r, "Failed to load link data %s: %m", l->state_file);
 }
 
 void link_remove_user(Link *l) {
diff --git a/src/resolve/resolved-link.h b/src/resolve/resolved-link.h
index 3c36486..d2043a1 100644
--- a/src/resolve/resolved-link.h
+++ b/src/resolve/resolved-link.h
@@ -1,9 +1,12 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <sys/stat.h>
+
 #include "sd-netlink.h"
 
 #include "in-addr-util.h"
+#include "network-util.h"
 #include "ratelimit.h"
 #include "resolve-util.h"
 
@@ -65,6 +68,8 @@
         DnsScope *mdns_ipv4_scope;
         DnsScope *mdns_ipv6_scope;
 
+        struct stat networkd_state_file_stat;
+        LinkOperationalState networkd_operstate;
         bool is_managed;
 
         char *ifname;
@@ -99,6 +104,9 @@
 
 DnsOverTlsMode link_get_dns_over_tls_mode(Link *l);
 
+ResolveSupport link_get_llmnr_support(Link *link);
+ResolveSupport link_get_mdns_support(Link *link);
+
 int link_save_user(Link *l);
 int link_load_user(Link *l);
 void link_remove_user(Link *l);
diff --git a/src/resolve/resolved-llmnr.c b/src/resolve/resolved-llmnr.c
index ce2db7d..4ab455e 100644
--- a/src/resolve/resolved-llmnr.c
+++ b/src/resolve/resolved-llmnr.c
@@ -72,13 +72,12 @@
 static int on_llmnr_packet(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
         _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
         DnsTransaction *t = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         DnsScope *scope;
         int r;
 
         assert(s);
         assert(fd >= 0);
-        assert(m);
 
         r = manager_recv(m, fd, DNS_PROTOCOL_LLMNR, &p);
         if (r <= 0)
@@ -142,7 +141,7 @@
                 .in.sin_family = AF_INET,
                 .in.sin_port = htobe16(LLMNR_PORT),
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         assert(m);
@@ -212,7 +211,7 @@
                 .in6.sin6_family = AF_INET6,
                 .in6.sin6_port = htobe16(LLMNR_PORT),
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         assert(m);
@@ -277,13 +276,11 @@
         return m->llmnr_ipv6_udp_fd = TAKE_FD(s);
 }
 
-static int on_llmnr_stream_packet(DnsStream *s) {
-        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
+static int on_llmnr_stream_packet(DnsStream *s, DnsPacket *p) {
         DnsScope *scope;
 
         assert(s);
-
-        p = dns_stream_take_read_packet(s);
+        assert(s->manager);
         assert(p);
 
         scope = manager_find_scope(s->manager, p);
@@ -296,7 +293,6 @@
         } else
                 log_debug("Invalid LLMNR TCP packet, ignoring.");
 
-        dns_stream_unref(s);
         return 0;
 }
 
@@ -313,15 +309,14 @@
                 return -errno;
         }
 
-        r = dns_stream_new(m, &stream, DNS_STREAM_LLMNR_RECV, DNS_PROTOCOL_LLMNR, cfd, NULL);
+        /* We don't configure a "complete" handler here, we rely on the default handler, thus freeing it */
+        r = dns_stream_new(m, &stream, DNS_STREAM_LLMNR_RECV, DNS_PROTOCOL_LLMNR, cfd, NULL,
+                           on_llmnr_stream_packet, NULL, DNS_STREAM_DEFAULT_TIMEOUT_USEC);
         if (r < 0) {
                 safe_close(cfd);
                 return r;
         }
 
-        stream->on_packet = on_llmnr_stream_packet;
-        /* We don't configure a "complete" handler here, we rely on the default handler than simply drops the
-         * reference to the stream, thus freeing it */
         return 0;
 }
 
@@ -349,7 +344,7 @@
                 .in.sin_family = AF_INET,
                 .in.sin_port = htobe16(LLMNR_PORT),
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         assert(m);
@@ -415,7 +410,7 @@
                 .in6.sin6_family = AF_INET6,
                 .in6.sin6_port = htobe16(LLMNR_PORT),
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         assert(m);
diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c
index 246e2d9..54fc2b3 100644
--- a/src/resolve/resolved-manager.c
+++ b/src/resolve/resolved-manager.c
@@ -13,6 +13,7 @@
 #include "bus-polkit.h"
 #include "dirent-util.h"
 #include "dns-domain.h"
+#include "event-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "hostname-util.h"
@@ -43,13 +44,12 @@
 #define SEND_TIMEOUT_USEC (200 * USEC_PER_MSEC)
 
 static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         uint16_t type;
         Link *l;
         int ifindex, r;
 
         assert(rtnl);
-        assert(m);
         assert(mm);
 
         r = sd_netlink_message_get_type(mm, &type);
@@ -105,7 +105,7 @@
 }
 
 static int manager_process_address(sd_netlink *rtnl, sd_netlink_message *mm, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         union in_addr_union address;
         uint16_t type;
         int r, ifindex, family;
@@ -114,7 +114,6 @@
 
         assert(rtnl);
         assert(mm);
-        assert(m);
 
         r = sd_netlink_message_get_type(mm, &type);
         if (r < 0)
@@ -190,7 +189,6 @@
 
 static int manager_rtnl_listen(Manager *m) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
-        sd_netlink_message *i;
         int r;
 
         assert(m);
@@ -225,7 +223,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
@@ -233,7 +231,7 @@
         if (r < 0)
                 return r;
 
-        for (i = reply; i; i = sd_netlink_message_next(i)) {
+        for (sd_netlink_message *i = reply; i; i = sd_netlink_message_next(i)) {
                 r = manager_process_link(m->rtnl, i, m);
                 if (r < 0)
                         return r;
@@ -247,7 +245,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
@@ -255,7 +253,7 @@
         if (r < 0)
                 return r;
 
-        for (i = reply; i; i = sd_netlink_message_next(i)) {
+        for (sd_netlink_message *i = reply; i; i = sd_netlink_message_next(i)) {
                 r = manager_process_address(m->rtnl, i, m);
                 if (r < 0)
                         return r;
@@ -265,12 +263,10 @@
 }
 
 static int on_network_event(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         Link *l;
         int r;
 
-        assert(m);
-
         sd_network_monitor_flush(m->network_monitor);
 
         HASHMAP_FOREACH(l, m->links) {
@@ -318,9 +314,7 @@
 static int manager_clock_change_listen(Manager *m);
 
 static int on_clock_change(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
-
-        assert(m);
+        Manager *m = ASSERT_PTR(userdata);
 
         /* The clock has changed, let's flush all caches. Why that? That's because DNSSEC validation takes
          * the system clock into consideration, and if the clock changes the old validations might have been
@@ -338,28 +332,16 @@
 }
 
 static int manager_clock_change_listen(Manager *m) {
-        _cleanup_close_ int fd = -1;
         int r;
 
         assert(m);
 
         m->clock_change_event_source = sd_event_source_disable_unref(m->clock_change_event_source);
 
-        fd = time_change_fd();
-        if (fd < 0)
-                return log_error_errno(fd, "Failed to allocate clock change timer fd: %m");
-
-        r = sd_event_add_io(m->event, &m->clock_change_event_source, fd, EPOLLIN, on_clock_change, m);
+        r = event_add_time_change(m->event, &m->clock_change_event_source, on_clock_change, m);
         if (r < 0)
                 return log_error_errno(r, "Failed to create clock change event source: %m");
 
-        r = sd_event_source_set_io_fd_own(m->clock_change_event_source, true);
-        if (r < 0)
-                return log_error_errno(r, "Failed to pass ownership of clock fd to event source: %m");
-        TAKE_FD(fd);
-
-        (void) sd_event_source_set_description(m->clock_change_event_source, "clock-change");
-
         return 0;
 }
 
@@ -438,12 +420,10 @@
 
 static int on_hostname_change(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
         _cleanup_free_ char *full_hostname = NULL, *llmnr_hostname = NULL, *mdns_hostname = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         bool llmnr_hostname_changed;
         int r;
 
-        assert(m);
-
         r = determine_hostnames(&full_hostname, &llmnr_hostname, &mdns_hostname);
         if (r < 0) {
                 log_warning_errno(r, "Failed to determine the local hostname and LLMNR/mDNS names, ignoring: %m");
@@ -513,15 +493,12 @@
 static int manager_sigusr1(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
         _cleanup_free_ char *buffer = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        Manager *m = userdata;
-        DnsServer *server;
+        Manager *m = ASSERT_PTR(userdata);
         size_t size = 0;
-        DnsScope *scope;
         Link *l;
 
         assert(s);
         assert(si);
-        assert(m);
 
         f = open_memstream_unlocked(&buffer, &size);
         if (!f)
@@ -546,11 +523,10 @@
 }
 
 static int manager_sigusr2(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(s);
         assert(si);
-        assert(m);
 
         manager_flush_caches(m, LOG_INFO);
 
@@ -558,11 +534,10 @@
 }
 
 static int manager_sigrtmin1(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(s);
         assert(si);
-        assert(m);
 
         manager_reset_server_features(m);
         return 0;
@@ -579,13 +554,13 @@
                 return -ENOMEM;
 
         *m = (Manager) {
-                .llmnr_ipv4_udp_fd = -1,
-                .llmnr_ipv6_udp_fd = -1,
-                .llmnr_ipv4_tcp_fd = -1,
-                .llmnr_ipv6_tcp_fd = -1,
-                .mdns_ipv4_fd = -1,
-                .mdns_ipv6_fd = -1,
-                .hostname_fd = -1,
+                .llmnr_ipv4_udp_fd = -EBADF,
+                .llmnr_ipv6_udp_fd = -EBADF,
+                .llmnr_ipv4_tcp_fd = -EBADF,
+                .llmnr_ipv6_tcp_fd = -EBADF,
+                .mdns_ipv4_fd = -EBADF,
+                .mdns_ipv6_fd = -EBADF,
+                .hostname_fd = -EBADF,
 
                 .llmnr_support = DEFAULT_LLMNR_MODE,
                 .mdns_support = DEFAULT_MDNS_MODE,
@@ -792,10 +767,13 @@
         iov = IOVEC_MAKE(DNS_PACKET_DATA(p), p->allocated);
 
         l = recvmsg_safe(fd, &mh, 0);
-        if (IN_SET(l, -EAGAIN, -EINTR))
-                return 0;
-        if (l <= 0)
+        if (l < 0) {
+                if (ERRNO_IS_TRANSIENT(l))
+                        return 0;
                 return l;
+        }
+        if (l == 0)
+                return 0;
 
         assert(!(mh.msg_flags & MSG_TRUNC));
 
@@ -813,7 +791,7 @@
         } else
                 return -EAFNOSUPPORT;
 
-        p->timestamp = now(clock_boottime_or_monotonic());
+        p->timestamp = now(CLOCK_BOOTTIME);
 
         CMSG_FOREACH(cmsg, &mh) {
 
@@ -880,56 +858,66 @@
                         p->ifindex = manager_find_ifindex(m, p->family, &p->destination);
         }
 
-        log_debug("Received %s UDP packet of size %zu, ifindex=%i, ttl=%i, fragsize=%zu",
-                  dns_protocol_to_string(protocol), p->size, p->ifindex, p->ttl, p->fragsize);
+        log_debug("Received %s UDP packet of size %zu, ifindex=%i, ttl=%u, fragsize=%zu, sender=%s, destination=%s",
+                  dns_protocol_to_string(protocol), p->size, p->ifindex, p->ttl, p->fragsize,
+                  IN_ADDR_TO_STRING(p->family, &p->sender),
+                  IN_ADDR_TO_STRING(p->family, &p->destination));
 
         *ret = TAKE_PTR(p);
         return 1;
 }
 
 static int sendmsg_loop(int fd, struct msghdr *mh, int flags) {
+        usec_t end;
         int r;
 
         assert(fd >= 0);
         assert(mh);
 
+        end = usec_add(now(CLOCK_MONOTONIC), SEND_TIMEOUT_USEC);
+
         for (;;) {
                 if (sendmsg(fd, mh, flags) >= 0)
                         return 0;
-
                 if (errno == EINTR)
                         continue;
-
                 if (errno != EAGAIN)
                         return -errno;
 
-                r = fd_wait_for_event(fd, POLLOUT, SEND_TIMEOUT_USEC);
-                if (r < 0)
+                r = fd_wait_for_event(fd, POLLOUT, LESS_BY(end, now(CLOCK_MONOTONIC)));
+                if (r < 0) {
+                        if (ERRNO_IS_TRANSIENT(r))
+                                continue;
                         return r;
+                }
                 if (r == 0)
                         return -ETIMEDOUT;
         }
 }
 
 static int write_loop(int fd, void *message, size_t length) {
+        usec_t end;
         int r;
 
         assert(fd >= 0);
         assert(message);
 
+        end = usec_add(now(CLOCK_MONOTONIC), SEND_TIMEOUT_USEC);
+
         for (;;) {
                 if (write(fd, message, length) >= 0)
                         return 0;
-
                 if (errno == EINTR)
                         continue;
-
                 if (errno != EAGAIN)
                         return -errno;
 
-                r = fd_wait_for_event(fd, POLLOUT, SEND_TIMEOUT_USEC);
-                if (r < 0)
+                r = fd_wait_for_event(fd, POLLOUT, LESS_BY(end, now(CLOCK_MONOTONIC)));
+                if (r < 0) {
+                        if (ERRNO_IS_TRANSIENT(r))
+                                continue;
                         return r;
+                }
                 if (r == 0)
                         return -ETIMEDOUT;
         }
@@ -1062,6 +1050,103 @@
         return sendmsg_loop(fd, &mh, 0);
 }
 
+static int dns_question_to_json(DnsQuestion *q, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *l = NULL;
+        DnsResourceKey *key;
+        int r;
+
+        assert(ret);
+
+        DNS_QUESTION_FOREACH(key, q) {
+                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+                r = dns_resource_key_to_json(key, &v);
+                if (r < 0)
+                        return r;
+
+                r = json_variant_append_array(&l, v);
+                if (r < 0)
+                        return r;
+        }
+
+        *ret = TAKE_PTR(l);
+        return 0;
+}
+
+int manager_monitor_send(
+                Manager *m,
+                int state,
+                int rcode,
+                int error,
+                DnsQuestion *question_idna,
+                DnsQuestion *question_utf8,
+                DnsQuestion *collected_questions,
+                DnsAnswer *answer) {
+
+        _cleanup_(json_variant_unrefp) JsonVariant *jquestion = NULL, *jcollected_questions = NULL, *janswer = NULL;
+        _cleanup_(dns_question_unrefp) DnsQuestion *merged = NULL;
+        Varlink *connection;
+        DnsAnswerItem *rri;
+        int r;
+
+        assert(m);
+
+        if (set_isempty(m->varlink_subscription))
+                return 0;
+
+        /* Merge both questions format into one */
+        r = dns_question_merge(question_idna, question_utf8, &merged);
+        if (r < 0)
+                return log_error_errno(r, "Failed to merge UTF8/IDNA questions: %m");
+
+        /* Convert the current primary question to JSON */
+        r = dns_question_to_json(merged, &jquestion);
+        if (r < 0)
+                return log_error_errno(r, "Failed to convert question to JSON: %m");
+
+        /* Generate a JSON array of the questions preceding the current one in the CNAME chain */
+        r = dns_question_to_json(collected_questions, &jcollected_questions);
+        if (r < 0)
+                return log_error_errno(r, "Failed to convert question to JSON: %m");
+
+        DNS_ANSWER_FOREACH_ITEM(rri, answer) {
+                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
+
+                r = dns_resource_record_to_json(rri->rr, &v);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to convert answer resource record to JSON: %m");
+
+                r = dns_resource_record_to_wire_format(rri->rr, /* canonical= */ false); /* don't use DNSSEC canonical format, since it removes casing, but we want that for DNS_SD compat */
+                if (r < 0)
+                        return log_error_errno(r, "Failed to generate RR wire format: %m");
+
+                r = json_build(&w, JSON_BUILD_OBJECT(
+                                               JSON_BUILD_PAIR_CONDITION(v, "rr", JSON_BUILD_VARIANT(v)),
+                                               JSON_BUILD_PAIR("raw", JSON_BUILD_BASE64(rri->rr->wire_format, rri->rr->wire_format_size)),
+                                               JSON_BUILD_PAIR_CONDITION(rri->ifindex > 0, "ifindex", JSON_BUILD_INTEGER(rri->ifindex))));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to make answer RR object: %m");
+
+                r = json_variant_append_array(&janswer, w);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to append notification entry to array: %m");
+        }
+
+        SET_FOREACH(connection, m->varlink_subscription) {
+                r = varlink_notifyb(connection,
+                                    JSON_BUILD_OBJECT(JSON_BUILD_PAIR("state", JSON_BUILD_STRING(dns_transaction_state_to_string(state))),
+                                                      JSON_BUILD_PAIR_CONDITION(state == DNS_TRANSACTION_RCODE_FAILURE, "rcode", JSON_BUILD_INTEGER(rcode)),
+                                                      JSON_BUILD_PAIR_CONDITION(state == DNS_TRANSACTION_ERRNO, "errno", JSON_BUILD_INTEGER(error)),
+                                                      JSON_BUILD_PAIR("question", JSON_BUILD_VARIANT(jquestion)),
+                                                      JSON_BUILD_PAIR_CONDITION(jcollected_questions, "collectedQuestions", JSON_BUILD_VARIANT(jcollected_questions)),
+                                                      JSON_BUILD_PAIR_CONDITION(janswer, "answer", JSON_BUILD_VARIANT(janswer))));
+                if (r < 0)
+                        log_debug_errno(r, "Failed to send monitor event, ignoring: %m");
+        }
+
+        return 0;
+}
+
 int manager_send(
                 Manager *m,
                 int fd,
@@ -1171,7 +1256,7 @@
         assert(p);
 
         while (p > old) {
-                if (!strchr(DIGITS, p[-1]))
+                if (!ascii_isdigit(p[-1]))
                         break;
 
                 p--;
@@ -1305,8 +1390,6 @@
 }
 
 void manager_verify_all(Manager *m) {
-        DnsScope *s;
-
         assert(m);
 
         LIST_FOREACH(scopes, s, m->dns_scopes)
@@ -1338,7 +1421,6 @@
 }
 
 int manager_compile_dns_servers(Manager *m, OrderedSet **dns) {
-        DnsServer *s;
         Link *l;
         int r;
 
@@ -1389,7 +1471,6 @@
  *   > 0 or true: return only domains which are for routing only
  */
 int manager_compile_search_domains(Manager *m, OrderedSet **domains, int filter_route) {
-        DnsSearchDomain *d;
         Link *l;
         int r;
 
@@ -1501,8 +1582,6 @@
 }
 
 void manager_flush_caches(Manager *m, int log_level) {
-        DnsScope *scope;
-
         assert(m);
 
         LIST_FOREACH(scopes, scope, m->dns_scopes)
@@ -1525,7 +1604,6 @@
 
 void manager_cleanup_saved_user(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
 
         assert(m);
 
@@ -1639,9 +1717,9 @@
         assert(fd >= 0);
 
         if (af == AF_UNSPEC) {
-                r = socket_get_family(fd, &af);
-                if (r < 0)
-                        return r;
+                af = socket_get_family(fd);
+                if (af < 0)
+                        return af;
         }
 
         switch (af) {
diff --git a/src/resolve/resolved-manager.h b/src/resolve/resolved-manager.h
index 1371c41..98d90e0 100644
--- a/src/resolve/resolved-manager.h
+++ b/src/resolve/resolved-manager.h
@@ -140,9 +140,16 @@
         sd_event_source *dns_stub_udp_event_source;
         sd_event_source *dns_stub_tcp_event_source;
 
+        /* Local DNS proxy stub on 127.0.0.54:53 */
+        sd_event_source *dns_proxy_stub_udp_event_source;
+        sd_event_source *dns_proxy_stub_tcp_event_source;
+
         Hashmap *polkit_registry;
 
         VarlinkServer *varlink_server;
+        VarlinkServer *varlink_monitor_server;
+
+        Set *varlink_subscription;
 
         sd_event_source *clock_change_event_source;
 
@@ -160,6 +167,8 @@
 
 uint32_t manager_find_mtu(Manager *m);
 
+int manager_monitor_send(Manager *m, int state, int rcode, int error, DnsQuestion *question_idna, DnsQuestion *question_utf8, DnsQuestion *collected_questions, DnsAnswer *answer);
+
 int manager_write(Manager *m, int fd, DnsPacket *p);
 int manager_send(Manager *m, int fd, int ifindex, int family, const union in_addr_union *destination, uint16_t port, const union in_addr_union *source, DnsPacket *p);
 int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret);
diff --git a/src/resolve/resolved-mdns.c b/src/resolve/resolved-mdns.c
index 0d19d08..cf6c22d 100644
--- a/src/resolve/resolved-mdns.c
+++ b/src/resolve/resolved-mdns.c
@@ -107,7 +107,8 @@
 
 static int mdns_packet_extract_matching_rrs(DnsPacket *p, DnsResourceKey *key, DnsResourceRecord ***ret_rrs) {
         _cleanup_free_ DnsResourceRecord **list = NULL;
-        unsigned n = 0, size = 0;
+        size_t i, n = 0, size = 0;
+        DnsResourceRecord *rr;
         int r;
 
         assert(p);
@@ -115,28 +116,39 @@
         assert(ret_rrs);
         assert_return(DNS_PACKET_NSCOUNT(p) > 0, -EINVAL);
 
-        for (size_t i = DNS_PACKET_ANCOUNT(p); i < (DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)); i++) {
-                r = dns_resource_key_match_rr(key, p->answer->items[i].rr, NULL);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        size++;
+        i = 0;
+        DNS_ANSWER_FOREACH(rr, p->answer) {
+                if (i >= DNS_PACKET_ANCOUNT(p) && i < DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)) {
+                        r = dns_resource_key_match_rr(key, rr, NULL);
+                        if (r < 0)
+                                return r;
+                        if (r > 0)
+                                size++;
+                }
+                i++;
         }
 
-        if (size == 0)
+        if (size == 0) {
+                *ret_rrs = NULL;
                 return 0;
+        }
 
         list = new(DnsResourceRecord *, size);
         if (!list)
                 return -ENOMEM;
 
-        for (size_t i = DNS_PACKET_ANCOUNT(p); i < (DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)); i++) {
-                r = dns_resource_key_match_rr(key, p->answer->items[i].rr, NULL);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        list[n++] = p->answer->items[i].rr;
+        i = 0;
+        DNS_ANSWER_FOREACH(rr, p->answer) {
+                if (i >= DNS_PACKET_ANCOUNT(p) && i < DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)) {
+                        r = dns_resource_key_match_rr(key, rr, NULL);
+                        if (r < 0)
+                                return r;
+                        if (r > 0)
+                                list[n++] = rr;
+                }
+                i++;
         }
+
         assert(n == size);
         typesafe_qsort(list, size, mdns_rr_compare);
 
@@ -165,8 +177,6 @@
         if (r < 0)
                 return r;
 
-        assert(r > 0);
-
         if (proposed_rrs_cmp(remote, r, our, size) > 0)
                 return 1;
 
@@ -195,15 +205,14 @@
         }
 
         /* All the questions in the query had a QU bit set, RFC 6762, section 5.4 */
-        DNS_QUESTION_FOREACH_ITEM(item, p->question) {
+        DNS_QUESTION_FOREACH_ITEM(item, p->question)
                 if (!FLAGS_SET(item->flags, DNS_QUESTION_WANTS_UNICAST_REPLY))
                         return false;
-        }
+
         return true;
 }
 
 static bool sender_on_local_subnet(DnsScope *s, DnsPacket *p) {
-        LinkAddress *a;
         int r;
 
         /* Check whether the sender is on a local subnet. */
@@ -245,7 +254,8 @@
         if (r < 0)
                 return log_debug_errno(r, "Failed to extract resource records from incoming packet: %m");
 
-        assert_return((dns_question_size(p->question) > 0), -EINVAL);
+        if (dns_question_size(p->question) <= 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "Received mDNS query without question, ignoring.");
 
         unicast_reply = mdns_should_reply_using_unicast(p);
         if (unicast_reply && !sender_on_local_subnet(s, p)) {
@@ -359,7 +369,6 @@
 
         if (dns_packet_validate_reply(p) > 0) {
                 DnsResourceRecord *rr;
-                DnsTransaction *t;
 
                 log_debug("Got mDNS reply packet");
 
@@ -400,15 +409,43 @@
                         }
                 }
 
-                LIST_FOREACH(transactions_by_scope, t, scope->transactions) {
-                        r = dns_answer_match_key(p->answer, t->key, NULL);
-                        if (r < 0)
-                                log_debug_errno(r, "Failed to match resource key, ignoring: %m");
-                        else if (r > 0) /* This packet matches the transaction, let's pass it on as reply */
+                for (bool match = true; match;) {
+                        match = false;
+                        LIST_FOREACH(transactions_by_scope, t, scope->transactions) {
+                                if (t->state != DNS_TRANSACTION_PENDING)
+                                        continue;
+
+                                r = dns_answer_match_key(p->answer, dns_transaction_key(t), NULL);
+                                if (r <= 0) {
+                                        if (r < 0)
+                                                log_debug_errno(r, "Failed to match resource key, ignoring: %m");
+                                        continue;
+                                }
+
+                                /* This packet matches the transaction, let's pass it on as reply */
                                 dns_transaction_process_reply(t, p, false);
+
+                                /* The dns_transaction_process_reply() -> dns_transaction_complete() ->
+                                 * dns_query_candidate_stop() may free multiple transactions. Hence, restart
+                                 * the loop. */
+                                match = true;
+                                break;
+                        }
                 }
 
-                dns_cache_put(&scope->cache, scope->manager->enable_cache, NULL, DNS_PACKET_RCODE(p), p->answer, NULL, false, _DNSSEC_RESULT_INVALID, UINT32_MAX, p->family, &p->sender);
+                dns_cache_put(
+                        &scope->cache,
+                        scope->manager->enable_cache,
+                        DNS_PROTOCOL_MDNS,
+                        NULL,
+                        DNS_PACKET_RCODE(p),
+                        p->answer,
+                        NULL,
+                        false,
+                        _DNSSEC_RESULT_INVALID,
+                        UINT32_MAX,
+                        p->family,
+                        &p->sender);
 
         } else if (dns_packet_validate_query(p) > 0)  {
                 log_debug("Got mDNS query packet for id %u", DNS_PACKET_ID(p));
@@ -429,7 +466,7 @@
                 .in.sin_family = AF_INET,
                 .in.sin_port = htobe16(MDNS_PORT),
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         assert(m);
@@ -494,6 +531,8 @@
         if (r < 0)
                 return log_error_errno(r, "mDNS-IPv4: Failed to create event source: %m");
 
+        (void) sd_event_source_set_description(m->mdns_ipv4_event_source, "mdns-ipv4");
+
         return m->mdns_ipv4_fd = TAKE_FD(s);
 }
 
@@ -502,7 +541,7 @@
                 .in6.sin6_family = AF_INET6,
                 .in6.sin6_port = htobe16(MDNS_PORT),
         };
-        _cleanup_close_ int s = -1;
+        _cleanup_close_ int s = -EBADF;
         int r;
 
         assert(m);
@@ -518,7 +557,7 @@
         if (r < 0)
                 return log_error_errno(r, "mDNS-IPv6: Failed to set IPV6_UNICAST_HOPS: %m");
 
-        /* RFC 4795, section 2.5 recommends setting the TTL of UDP packets to 255. */
+        /* RFC 6762, section 11 recommends setting the TTL of UDP packets to 255. */
         r = setsockopt_int(s, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, 255);
         if (r < 0)
                 return log_error_errno(r, "mDNS-IPv6: Failed to set IPV6_MULTICAST_HOPS: %m");
@@ -567,5 +606,7 @@
         if (r < 0)
                 return log_error_errno(r, "mDNS-IPv6: Failed to create event source: %m");
 
+        (void) sd_event_source_set_description(m->mdns_ipv6_event_source, "mdns-ipv6");
+
         return m->mdns_ipv6_fd = TAKE_FD(s);
 }
diff --git a/src/resolve/resolved-resolv-conf.c b/src/resolve/resolved-resolv-conf.c
index 100894d..5749aa1 100644
--- a/src/resolve/resolved-resolv-conf.c
+++ b/src/resolve/resolved-resolv-conf.c
@@ -41,8 +41,7 @@
 
         /* Is it symlinked to our own uplink file? */
         if (stat(PRIVATE_STATIC_RESOLV_CONF, &own) >= 0 &&
-            st.st_dev == own.st_dev &&
-            st.st_ino == own.st_ino)
+            stat_inode_same(&st, &own))
                 return log_warning_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                          "DNSStubListener= is disabled, but /etc/resolv.conf is a symlink to "
                                          PRIVATE_STATIC_RESOLV_CONF " which expects DNSStubListener= to be enabled.");
@@ -51,8 +50,6 @@
 }
 
 static bool file_is_our_own(const struct stat *st) {
-        const char *path;
-
         assert(st);
 
         FOREACH_STRING(path,
@@ -64,8 +61,7 @@
 
                 /* Is it symlinked to our own uplink file? */
                 if (stat(path, &own) >= 0 &&
-                    st->st_dev == own.st_dev &&
-                    st->st_ino == own.st_ino)
+                    stat_inode_same(st, &own))
                         return true;
         }
 
@@ -417,8 +413,7 @@
                         continue;
                 }
 
-                if (system_st.st_dev == our_st.st_dev &&
-                    system_st.st_ino == our_st.st_ino)
+                if (stat_inode_same(&system_st, &our_st))
                         return m;
         }
 
diff --git a/src/resolve/resolved-socket-graveyard.c b/src/resolve/resolved-socket-graveyard.c
index 471fe1d..9605d72 100644
--- a/src/resolve/resolved-socket-graveyard.c
+++ b/src/resolve/resolved-socket-graveyard.c
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "resolved-socket-graveyard.h"
 
@@ -53,7 +53,7 @@
                 SocketGraveyard *g = m->socket_graveyard_oldest;
 
                 if (n == USEC_INFINITY)
-                        assert_se(sd_event_now(m->event, clock_boottime_or_monotonic(), &n) >= 0);
+                        assert_se(sd_event_now(m->event, CLOCK_BOOTTIME, &n) >= 0);
 
                 if (g->deadline > n)
                         break;
@@ -70,9 +70,7 @@
 }
 
 static int on_io_event(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        SocketGraveyard *g = userdata;
-
-        assert(g);
+        SocketGraveyard *g = ASSERT_PTR(userdata);
 
         /* An IO event happened on the graveyard fd. We don't actually care which event that is, and we don't
          * read any incoming packet off the socket. We just close the fd, that's enough to not trigger the
@@ -113,7 +111,7 @@
 
         m->n_socket_graveyard++;
 
-        assert_se(sd_event_now(m->event, clock_boottime_or_monotonic(), &g->deadline) >= 0);
+        assert_se(sd_event_now(m->event, CLOCK_BOOTTIME, &g->deadline) >= 0);
         g->deadline += SOCKET_GRAVEYARD_USEC;
 
         r = sd_event_add_io(m->event, &g->io_event_source, fd, EPOLLIN, on_io_event, g);
diff --git a/src/resolve/resolved-socket-graveyard.h b/src/resolve/resolved-socket-graveyard.h
index 9b13bb0..50c6aad 100644
--- a/src/resolve/resolved-socket-graveyard.h
+++ b/src/resolve/resolved-socket-graveyard.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
 typedef struct SocketGraveyard SocketGraveyard;
diff --git a/src/resolve/resolved-varlink.c b/src/resolve/resolved-varlink.c
index 9a61b19..f878d9e 100644
--- a/src/resolve/resolved-varlink.c
+++ b/src/resolve/resolved-varlink.c
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "glyph-util.h"
 #include "in-addr-util.h"
 #include "resolved-dns-synthesize.h"
 #include "resolved-varlink.h"
@@ -78,7 +79,7 @@
         case DNS_TRANSACTION_VALIDATING:
         case DNS_TRANSACTION_SUCCESS:
         default:
-                assert_not_reached("Impossible state");
+                assert_not_reached();
         }
 }
 
@@ -99,6 +100,19 @@
         dns_query_complete(q, DNS_TRANSACTION_ABORTED);
 }
 
+static void vl_on_notification_disconnect(VarlinkServer *s, Varlink *link, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+
+        assert(s);
+        assert(link);
+
+        Varlink *removed_link = set_remove(m->varlink_subscription, link);
+        if (removed_link) {
+                varlink_unref(removed_link);
+                log_debug("%u monitor clients remain active", set_size(m->varlink_subscription));
+        }
+}
+
 static bool validate_and_mangle_flags(
                 const char *name,
                 uint64_t *flags,
@@ -229,7 +243,7 @@
                                            JSON_BUILD_PAIR("flags", JSON_BUILD_INTEGER(dns_query_reply_flags_make(q)))));
 finish:
         if (r < 0) {
-                log_error_errno(r, "Failed to send hostname reply: %m");
+                log_full_errno(ERRNO_IS_DISCONNECT(r) ? LOG_DEBUG : LOG_ERR, r, "Failed to send hostname reply: %m");
                 r = varlink_error_errno(q->varlink_request, r);
         }
 }
@@ -347,13 +361,12 @@
 }
 
 static int json_dispatch_address(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        LookupParameters *p = userdata;
+        LookupParameters *p = ASSERT_PTR(userdata);
         union in_addr_union buf = {};
         JsonVariant *i;
         size_t n, k = 0;
 
         assert(variant);
-        assert(p);
 
         if (!json_variant_is_array(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array.", strna(name));
@@ -363,14 +376,16 @@
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is array of unexpected size.", strna(name));
 
         JSON_VARIANT_ARRAY_FOREACH(i, variant) {
-                intmax_t b;
+                int64_t b;
 
                 if (!json_variant_is_integer(i))
                         return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Element %zu of JSON field '%s' is not an integer.", k, strna(name));
 
                 b = json_variant_integer(i);
                 if (b < 0 || b > 0xff)
-                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Element %zu of JSON field '%s' is out of range 0…255.", k, strna(name));
+                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL),
+                                        "Element %zu of JSON field '%s' is out of range 0%s255.",
+                                        k, strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
                 buf.bytes[k++] = (uint8_t) b;
         }
@@ -447,7 +462,7 @@
                                            JSON_BUILD_PAIR("flags", JSON_BUILD_INTEGER(dns_query_reply_flags_make(q)))));
 finish:
         if (r < 0) {
-                log_error_errno(r, "Failed to send address reply: %m");
+                log_full_errno(ERRNO_IS_DISCONNECT(r) ? LOG_DEBUG : LOG_ERR, r, "Failed to send address reply: %m");
                 r = varlink_error_errno(q->varlink_request, r);
         }
 }
@@ -488,7 +503,7 @@
                 return varlink_error_invalid_parameter(link, JSON_VARIANT_STRING_CONST("family"));
 
         if (FAMILY_ADDRESS_SIZE(p.family) != p.address_size)
-                return varlink_error(link, "io.systemd.UserDatabase.BadAddressSize", NULL);
+                return varlink_error(link, "io.systemd.Resolve.BadAddressSize", NULL);
 
         if (!validate_and_mangle_flags(NULL, &p.flags, 0))
                 return varlink_error_invalid_parameter(link, JSON_VARIANT_STRING_CONST("flags"));
@@ -516,7 +531,78 @@
         return 1;
 }
 
-int manager_varlink_init(Manager *m) {
+static int vl_method_subscribe_dns_resolves(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
+        Manager *m;
+        int r;
+
+        assert(link);
+
+        m = ASSERT_PTR(varlink_server_get_userdata(varlink_get_server(link)));
+
+        /* if the client didn't set the more flag, it is using us incorrectly */
+        if (!FLAGS_SET(flags, VARLINK_METHOD_MORE))
+                return varlink_error_invalid_parameter(link, NULL);
+
+        if (json_variant_elements(parameters) > 0)
+                return varlink_error_invalid_parameter(link, parameters);
+
+        /* Send a ready message to the connecting client, to indicate that we are now listinening, and all
+         * queries issued after the point the client sees this will also be reported to the client. */
+        r = varlink_notifyb(link,
+                            JSON_BUILD_OBJECT(JSON_BUILD_PAIR("ready", JSON_BUILD_BOOLEAN(true))));
+        if (r < 0)
+                return log_error_errno(r, "Failed to report monitor to be established: %m");
+
+        r = set_ensure_put(&m->varlink_subscription, NULL, link);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add subscription to set: %m");
+        varlink_ref(link);
+
+        log_debug("%u clients now attached for varlink notifications", set_size(m->varlink_subscription));
+
+        return 1;
+}
+
+static int varlink_monitor_server_init(Manager *m) {
+        _cleanup_(varlink_server_unrefp) VarlinkServer *server = NULL;
+        int r;
+
+        assert(m);
+
+        if (m->varlink_monitor_server)
+                return 0;
+
+        r = varlink_server_new(&server, VARLINK_SERVER_ROOT_ONLY);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate varlink server object: %m");
+
+        varlink_server_set_userdata(server, m);
+
+        r = varlink_server_bind_method(
+                        server,
+                        "io.systemd.Resolve.Monitor.SubscribeQueryResults",
+                        vl_method_subscribe_dns_resolves);
+        if (r < 0)
+                return log_error_errno(r, "Failed to register varlink methods: %m");
+
+        r = varlink_server_bind_disconnect(server, vl_on_notification_disconnect);
+        if (r < 0)
+                return log_error_errno(r, "Failed to register varlink disconnect handler: %m");
+
+        r = varlink_server_listen_address(server, "/run/systemd/resolve/io.systemd.Resolve.Monitor", 0600);
+        if (r < 0)
+                return log_error_errno(r, "Failed to bind to varlink socket: %m");
+
+        r = varlink_server_attach_event(server, m->event, SD_EVENT_PRIORITY_NORMAL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
+
+        m->varlink_monitor_server = TAKE_PTR(server);
+
+        return 0;
+}
+
+static int varlink_main_server_init(Manager *m) {
         _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
         int r;
 
@@ -554,8 +640,23 @@
         return 0;
 }
 
+int manager_varlink_init(Manager *m) {
+        int r;
+
+        r = varlink_main_server_init(m);
+        if (r < 0)
+                return r;
+
+        r = varlink_monitor_server_init(m);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
 void manager_varlink_done(Manager *m) {
         assert(m);
 
         m->varlink_server = varlink_server_unref(m->varlink_server);
+        m->varlink_monitor_server = varlink_server_unref(m->varlink_monitor_server);
 }
diff --git a/src/resolve/resolved.c b/src/resolve/resolved.c
index 85ab917..d3bc902 100644
--- a/src/resolve/resolved.c
+++ b/src/resolve/resolved.c
@@ -11,7 +11,7 @@
 #include "capability-util.h"
 #include "daemon-util.h"
 #include "main-func.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "resolved-bus.h"
 #include "resolved-conf.h"
 #include "resolved-manager.h"
diff --git a/src/resolve/test-dnssec-complex.c b/src/resolve/test-dnssec-complex.c
index e21eb86..d8aeb70 100644
--- a/src/resolve/test-dnssec-complex.c
+++ b/src/resolve/test-dnssec-complex.c
@@ -146,9 +146,9 @@
         test_hostname_lookup(bus, "www.dnssec-bogus.sg", AF_INET, BUS_ERROR_DNSSEC_FAILED);
 
         /* NXDOMAIN in NSEC domain */
-        test_rr_lookup(bus, "hhh.nasa.gov", DNS_TYPE_A, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, "hhh.nasa.gov", AF_UNSPEC, _BUS_ERROR_DNS "NXDOMAIN");
-        test_rr_lookup(bus, "_pgpkey-https._tcp.hkps.pool.sks-keyservers.net", DNS_TYPE_SRV, _BUS_ERROR_DNS "NXDOMAIN");
+        test_rr_lookup(bus, "hhh.nasa.gov", DNS_TYPE_A, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, "hhh.nasa.gov", AF_UNSPEC, BUS_ERROR_DNS_NXDOMAIN);
+        test_rr_lookup(bus, "_pgpkey-https._tcp.hkps.pool.sks-keyservers.net", DNS_TYPE_SRV, BUS_ERROR_DNS_NXDOMAIN);
 
         /* wildcard, NSEC zone */
         test_rr_lookup(bus, ".wilda.nsec.0skar.cz", DNS_TYPE_A, NULL);
@@ -187,16 +187,16 @@
         test_hostname_lookup(bus, "herndon.nasa.gov", AF_INET6, BUS_ERROR_NO_SUCH_RR);
 
         /* NXDOMAIN in NSEC root zone: */
-        test_rr_lookup(bus, "jasdhjas.kjkfgjhfjg", DNS_TYPE_A, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, "jasdhjas.kjkfgjhfjg", AF_UNSPEC, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, "jasdhjas.kjkfgjhfjg", AF_INET, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, "jasdhjas.kjkfgjhfjg", AF_INET6, _BUS_ERROR_DNS "NXDOMAIN");
+        test_rr_lookup(bus, "jasdhjas.kjkfgjhfjg", DNS_TYPE_A, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, "jasdhjas.kjkfgjhfjg", AF_UNSPEC, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, "jasdhjas.kjkfgjhfjg", AF_INET, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, "jasdhjas.kjkfgjhfjg", AF_INET6, BUS_ERROR_DNS_NXDOMAIN);
 
         /* NXDOMAIN in NSEC3 .com zone: */
-        test_rr_lookup(bus, "kjkfgjhfjgsdfdsfd.com", DNS_TYPE_A, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, "kjkfgjhfjgsdfdsfd.com", AF_INET, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, "kjkfgjhfjgsdfdsfd.com", AF_INET6, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, "kjkfgjhfjgsdfdsfd.com", AF_UNSPEC, _BUS_ERROR_DNS "NXDOMAIN");
+        test_rr_lookup(bus, "kjkfgjhfjgsdfdsfd.com", DNS_TYPE_A, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, "kjkfgjhfjgsdfdsfd.com", AF_INET, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, "kjkfgjhfjgsdfdsfd.com", AF_INET6, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, "kjkfgjhfjgsdfdsfd.com", AF_UNSPEC, BUS_ERROR_DNS_NXDOMAIN);
 
         /* Unsigned A */
         test_rr_lookup(bus, "poettering.de", DNS_TYPE_A, NULL);
@@ -213,11 +213,11 @@
 #endif
 
         /* DNAME, pointing to NXDOMAIN */
-        test_rr_lookup(bus, ".ireallyhpoethisdoesnexist.xn--kprw13d.", DNS_TYPE_A, _BUS_ERROR_DNS "NXDOMAIN");
-        test_rr_lookup(bus, ".ireallyhpoethisdoesnexist.xn--kprw13d.", DNS_TYPE_RP, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, ".ireallyhpoethisdoesntexist.xn--kprw13d.", AF_UNSPEC, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, ".ireallyhpoethisdoesntexist.xn--kprw13d.", AF_INET, _BUS_ERROR_DNS "NXDOMAIN");
-        test_hostname_lookup(bus, ".ireallyhpoethisdoesntexist.xn--kprw13d.", AF_INET6, _BUS_ERROR_DNS "NXDOMAIN");
+        test_rr_lookup(bus, ".ireallyhpoethisdoesnexist.xn--kprw13d.", DNS_TYPE_A, BUS_ERROR_DNS_NXDOMAIN);
+        test_rr_lookup(bus, ".ireallyhpoethisdoesnexist.xn--kprw13d.", DNS_TYPE_RP, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, ".ireallyhpoethisdoesntexist.xn--kprw13d.", AF_UNSPEC, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, ".ireallyhpoethisdoesntexist.xn--kprw13d.", AF_INET, BUS_ERROR_DNS_NXDOMAIN);
+        test_hostname_lookup(bus, ".ireallyhpoethisdoesntexist.xn--kprw13d.", AF_INET6, BUS_ERROR_DNS_NXDOMAIN);
 
         return 0;
 }
diff --git a/src/resolve/test-dnssec.c b/src/resolve/test-dnssec.c
index 63dcf57..64ebbe5 100644
--- a/src/resolve/test-dnssec.c
+++ b/src/resolve/test-dnssec.c
@@ -1,22 +1,21 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <arpa/inet.h>
-#if HAVE_GCRYPT
-#include <gcrypt.h>
-#endif
 #include <netinet/in.h>
 #include <sys/socket.h>
 
+#if HAVE_GCRYPT
+#  include <gcrypt.h>
+#endif
+
 #include "alloc-util.h"
+#include "hexdecoct.h"
 #include "resolved-dns-dnssec.h"
 #include "resolved-dns-rr.h"
 #include "string-util.h"
-#include "hexdecoct.h"
+#include "tests.h"
 
-#if HAVE_GCRYPT
-
-static void test_dnssec_verify_dns_key(void) {
-
+TEST(dnssec_verify_dns_key) {
         static const uint8_t ds1_fprint[] = {
                 0x46, 0x8B, 0xC8, 0xDD, 0xC7, 0xE8, 0x27, 0x03, 0x40, 0xBB, 0x8A, 0x1F, 0x3B, 0x2E, 0x45, 0x9D,
                 0x80, 0x67, 0x14, 0x01,
@@ -89,7 +88,7 @@
         assert_se(dnssec_verify_dnskey_by_ds(dnskey, ds2, false) > 0);
 }
 
-static void test_dnssec_verify_rfc8080_ed25519_example1(void) {
+TEST(dnssec_verify_rfc8080_ed25519_example1) {
         static const uint8_t dnskey_blob[] = {
                 0x97, 0x4d, 0x96, 0xa2, 0x2d, 0x22, 0x4b, 0xc0, 0x1a, 0xdb, 0x91, 0x50, 0x91, 0x47, 0x7d,
                 0x44, 0xcc, 0xd9, 0x1c, 0x9a, 0x41, 0xa1, 0x14, 0x30, 0x01, 0x01, 0x17, 0xd5, 0x2c, 0x59,
@@ -173,15 +172,15 @@
         assert_se(dns_answer_add(answer, mx, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
 
         assert_se(dnssec_verify_rrset(answer, mx->key, rrsig, dnskey,
-                                rrsig->rrsig.inception * USEC_PER_SEC, &result) >= 0);
-#if GCRYPT_VERSION_NUMBER >= 0x010600
+                                      rrsig->rrsig.inception * USEC_PER_SEC, &result) >= 0);
+#if PREFER_OPENSSL || GCRYPT_VERSION_NUMBER >= 0x010600
         assert_se(result == DNSSEC_VALIDATED);
 #else
         assert_se(result == DNSSEC_UNSUPPORTED_ALGORITHM);
 #endif
 }
 
-static void test_dnssec_verify_rfc8080_ed25519_example2(void) {
+TEST(dnssec_verify_rfc8080_ed25519_example2) {
         static const uint8_t dnskey_blob[] = {
                 0xcc, 0xf9, 0xd9, 0xfd, 0x0c, 0x04, 0x7b, 0xb4, 0xbc, 0x0b, 0x94, 0x8f, 0xcf, 0x63, 0x9f,
                 0x4b, 0x94, 0x51, 0xe3, 0x40, 0x13, 0x93, 0x6f, 0xeb, 0x62, 0x71, 0x3d, 0xc4, 0x72, 0x4,
@@ -265,15 +264,197 @@
         assert_se(dns_answer_add(answer, mx, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
 
         assert_se(dnssec_verify_rrset(answer, mx->key, rrsig, dnskey,
-                                rrsig->rrsig.inception * USEC_PER_SEC, &result) >= 0);
-#if GCRYPT_VERSION_NUMBER >= 0x010600
+                                      rrsig->rrsig.inception * USEC_PER_SEC, &result) >= 0);
+#if PREFER_OPENSSL || GCRYPT_VERSION_NUMBER >= 0x010600
         assert_se(result == DNSSEC_VALIDATED);
 #else
         assert_se(result == DNSSEC_UNSUPPORTED_ALGORITHM);
 #endif
 }
-static void test_dnssec_verify_rrset(void) {
 
+TEST(dnssec_verify_rfc6605_example1) {
+        static const uint8_t signature_blob[] = {
+                0xab, 0x1e, 0xb0, 0x2d, 0x8a, 0xa6, 0x87, 0xe9, 0x7d, 0xa0, 0x22, 0x93, 0x37, 0xaa, 0x88, 0x73,
+                0xe6, 0xf0, 0xeb, 0x26, 0xbe, 0x28, 0x9f, 0x28, 0x33, 0x3d, 0x18, 0x3f, 0x5d, 0x3b, 0x7a, 0x95,
+                0xc0, 0xc8, 0x69, 0xad, 0xfb, 0x74, 0x8d, 0xae, 0xe3, 0xc5, 0x28, 0x6e, 0xed, 0x66, 0x82, 0xc1,
+                0x2e, 0x55, 0x33, 0x18, 0x6b, 0xac, 0xed, 0x9c, 0x26, 0xc1, 0x67, 0xa9, 0xeb, 0xae, 0x95, 0x0b,
+        };
+
+        static const uint8_t ds_fprint[] = {
+                0x6f, 0x87, 0x3c, 0x73, 0x57, 0xde, 0xd9, 0xee, 0xf8, 0xef, 0xbd, 0x76, 0xed, 0xbd, 0xbb, 0xd7,
+                0x5e, 0x7a, 0xe7, 0xa6, 0x9d, 0xeb, 0x6e, 0x7a, 0x7f, 0x8d, 0xb8, 0xeb, 0x6e, 0x5b, 0x7f, 0x97,
+                0x35, 0x7b, 0x6e, 0xfb, 0xd1, 0xc7, 0xba, 0x77, 0xa7, 0xb7, 0xed, 0xd7, 0xfa, 0xd5, 0xdd, 0x7b,
+        };
+
+        static const uint8_t dnskey_blob[] = {
+                0x1a, 0x88, 0xc8, 0x86, 0x15, 0xd4, 0x37, 0xfb, 0xb8, 0xbf, 0x9e, 0x19, 0x42, 0xa1, 0x92, 0x9f,
+                0x28, 0x56, 0x27, 0x06, 0xae, 0x6c, 0x2b, 0xd3, 0x99, 0xe7, 0xb1, 0xbf, 0xb6, 0xd1, 0xe9, 0xe7,
+                0x5b, 0x92, 0xb4, 0xaa, 0x42, 0x91, 0x7a, 0xe1, 0xc6, 0x1b, 0x70, 0x1e, 0xf0, 0x35, 0xc3, 0xfe,
+                0x7b, 0xe3, 0x00, 0x9c, 0xba, 0xfe, 0x5a, 0x2f, 0x71, 0x31, 0x6c, 0x90, 0x2d, 0xcf, 0x0d, 0x00,
+        };
+
+        _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *dnskey = NULL, *ds = NULL, *a = NULL,
+                *rrsig = NULL;
+        _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
+        DnssecResult result;
+
+        dnskey = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_DNSKEY, "example.net.");
+        assert_se(dnskey);
+
+        dnskey->dnskey.flags = 257;
+        dnskey->dnskey.protocol = 3;
+        dnskey->dnskey.algorithm = DNSSEC_ALGORITHM_ECDSAP256SHA256;
+        dnskey->dnskey.key_size = sizeof(dnskey_blob);
+        dnskey->dnskey.key = memdup(dnskey_blob, sizeof(dnskey_blob));
+        assert_se(dnskey->dnskey.key);
+
+        log_info("DNSKEY: %s", strna(dns_resource_record_to_string(dnskey)));
+
+        ds = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_DS, "example.net.");
+        assert_se(ds);
+
+        ds->ds.key_tag = 55648;
+        ds->ds.algorithm = DNSSEC_ALGORITHM_ECDSAP256SHA256;
+        ds->ds.digest_type = DNSSEC_DIGEST_SHA256;
+        ds->ds.digest_size = sizeof(ds_fprint);
+        ds->ds.digest = memdup(ds_fprint, ds->ds.digest_size);
+        assert_se(ds->ds.digest);
+
+        log_info("DS: %s", strna(dns_resource_record_to_string(ds)));
+
+        a = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "www.example.net");
+        assert_se(a);
+
+        a->a.in_addr.s_addr = inet_addr("192.0.2.1");
+
+        log_info("A: %s", strna(dns_resource_record_to_string(a)));
+
+        rrsig = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_RRSIG, "www.example.net.");
+        assert_se(rrsig);
+
+        rrsig->rrsig.type_covered = DNS_TYPE_A;
+        rrsig->rrsig.algorithm = DNSSEC_ALGORITHM_ECDSAP256SHA256;
+        rrsig->rrsig.labels = 3;
+        rrsig->rrsig.expiration = 1284026679;
+        rrsig->rrsig.inception = 1281607479;
+        rrsig->rrsig.key_tag = 55648;
+        rrsig->rrsig.original_ttl = 3600;
+        rrsig->rrsig.signer = strdup("example.net.");
+        assert_se(rrsig->rrsig.signer);
+        rrsig->rrsig.signature_size = sizeof(signature_blob);
+        rrsig->rrsig.signature = memdup(signature_blob, rrsig->rrsig.signature_size);
+        assert_se(rrsig->rrsig.signature);
+
+        log_info("RRSIG: %s", strna(dns_resource_record_to_string(rrsig)));
+
+        assert_se(dnssec_key_match_rrsig(a->key, rrsig) > 0);
+        assert_se(dnssec_rrsig_match_dnskey(rrsig, dnskey, false) > 0);
+
+        answer = dns_answer_new(1);
+        assert_se(answer);
+        assert_se(dns_answer_add(answer, a, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
+
+        assert_se(dnssec_verify_rrset(answer, a->key, rrsig, dnskey,
+                                      rrsig->rrsig.inception * USEC_PER_SEC, &result) >= 0);
+        assert_se(result == DNSSEC_VALIDATED);
+}
+
+TEST(dnssec_verify_rfc6605_example2) {
+        static const uint8_t signature_blob[] = {
+                0xfc, 0xbe, 0x61, 0x0c, 0xa2, 0x2f, 0x18, 0x3c, 0x88, 0xd5, 0xf7, 0x00, 0x45, 0x7d, 0xf3, 0xeb,
+                0x9a, 0xab, 0x98, 0xfb, 0x15, 0xcf, 0xbd, 0xd0, 0x0f, 0x53, 0x2b, 0xe4, 0x21, 0x2a, 0x3a, 0x22,
+                0xcf, 0xf7, 0x98, 0x71, 0x42, 0x8b, 0xae, 0xae, 0x81, 0x82, 0x79, 0x93, 0xaf, 0xcc, 0x56, 0xb1,
+                0xb1, 0x3f, 0x06, 0x96, 0xbe, 0xf8, 0x85, 0xb6, 0xaf, 0x44, 0xa6, 0xb2, 0x24, 0xdb, 0xb2, 0x74,
+                0x2b, 0xb3, 0x59, 0x34, 0x92, 0x3d, 0xdc, 0xfb, 0xc2, 0x7a, 0x97, 0x2f, 0x96, 0xdd, 0x70, 0x9c,
+                0xee, 0xb1, 0xd9, 0xc8, 0xd1, 0x14, 0x8c, 0x44, 0xec, 0x71, 0xc0, 0x68, 0xa9, 0x59, 0xc2, 0x66,
+
+        };
+
+        static const uint8_t ds_fprint[] = {
+                0xef, 0x67, 0x7b, 0x6f, 0xad, 0xbd, 0xef, 0xa7, 0x1e, 0xd3, 0xae, 0x37, 0xf1, 0xef, 0x5c, 0xd1,
+                0xb7, 0xf7, 0xd7, 0xdd, 0x35, 0xdd, 0xc7, 0xfc, 0xd3, 0x57, 0xf4, 0xf5, 0xe7, 0x1c, 0xf3, 0x86,
+                0xfc, 0x77, 0xb7, 0xbd, 0xe3, 0xde, 0x5f, 0xdb, 0xb7, 0xb7, 0xd3, 0x97, 0x3a, 0x6b, 0xd6, 0xf4,
+                0xe7, 0xad, 0xda, 0xf5, 0xbe, 0x5f, 0xe1, 0xdd, 0xbc, 0xf3, 0x8d, 0x39, 0x73, 0x7d, 0x34, 0xf1,
+                0xaf, 0x78, 0xe9, 0xd7, 0xfd, 0xf3, 0x77, 0x7a,
+        };
+
+        static const uint8_t dnskey_blob[] = {
+                0xc4, 0xa6, 0x1a, 0x36, 0x15, 0x9d, 0x18, 0xe7, 0xc9, 0xfa, 0x73, 0xeb, 0x2f, 0xcf, 0xda, 0xae,
+                0x4c, 0x1f, 0xd8, 0x46, 0x37, 0x30, 0x32, 0x7e, 0x48, 0x4a, 0xca, 0x8a, 0xf0, 0x55, 0x4a, 0xe9,
+                0xb5, 0xc3, 0xf7, 0xa0, 0xb1, 0x7b, 0xd2, 0x00, 0x3b, 0x4d, 0x26, 0x1c, 0x9e, 0x9b, 0x94, 0x42,
+                0x3a, 0x98, 0x10, 0xe8, 0xaf, 0x17, 0xd4, 0x34, 0x52, 0x12, 0x4a, 0xdb, 0x61, 0x0f, 0x8e, 0x07,
+                0xeb, 0xfc, 0xfe, 0xe5, 0xf8, 0xe4, 0xd0, 0x70, 0x63, 0xca, 0xe9, 0xeb, 0x91, 0x7a, 0x1a, 0x5b,
+                0xab, 0xf0, 0x8f, 0xe6, 0x95, 0x53, 0x60, 0x17, 0xa5, 0xbf, 0xa9, 0x32, 0x37, 0xee, 0x6e, 0x34,
+        };
+
+
+        _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *dnskey = NULL, *ds = NULL, *a = NULL,
+                *rrsig = NULL;
+        _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
+        DnssecResult result;
+
+        dnskey = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_DNSKEY, "example.net.");
+        assert_se(dnskey);
+
+        dnskey->dnskey.flags = 257;
+        dnskey->dnskey.protocol = 3;
+        dnskey->dnskey.algorithm = DNSSEC_ALGORITHM_ECDSAP384SHA384;
+        dnskey->dnskey.key_size = sizeof(dnskey_blob);
+        dnskey->dnskey.key = memdup(dnskey_blob, sizeof(dnskey_blob));
+        assert_se(dnskey->dnskey.key);
+
+        log_info("DNSKEY: %s", strna(dns_resource_record_to_string(dnskey)));
+
+        ds = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_DS, "example.net.");
+        assert_se(ds);
+
+        ds->ds.key_tag = 10771;
+        ds->ds.algorithm = DNSSEC_ALGORITHM_ECDSAP384SHA384;
+        ds->ds.digest_type = DNSSEC_DIGEST_SHA384;
+        ds->ds.digest_size = sizeof(ds_fprint);
+        ds->ds.digest = memdup(ds_fprint, ds->ds.digest_size);
+        assert_se(ds->ds.digest);
+
+        log_info("DS: %s", strna(dns_resource_record_to_string(ds)));
+
+        a = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "www.example.net");
+        assert_se(a);
+
+        a->a.in_addr.s_addr = inet_addr("192.0.2.1");
+
+        log_info("A: %s", strna(dns_resource_record_to_string(a)));
+
+        rrsig = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_RRSIG, "www.example.net.");
+        assert_se(rrsig);
+
+        rrsig->rrsig.type_covered = DNS_TYPE_A;
+        rrsig->rrsig.algorithm = DNSSEC_ALGORITHM_ECDSAP384SHA384;
+        rrsig->rrsig.labels = 3;
+        rrsig->rrsig.expiration = 1284027625;
+        rrsig->rrsig.inception = 1281608425;
+        rrsig->rrsig.key_tag = 10771;
+        rrsig->rrsig.original_ttl = 3600;
+        rrsig->rrsig.signer = strdup("example.net.");
+        assert_se(rrsig->rrsig.signer);
+        rrsig->rrsig.signature_size = sizeof(signature_blob);
+        rrsig->rrsig.signature = memdup(signature_blob, rrsig->rrsig.signature_size);
+        assert_se(rrsig->rrsig.signature);
+
+        log_info("RRSIG: %s", strna(dns_resource_record_to_string(rrsig)));
+
+        assert_se(dnssec_key_match_rrsig(a->key, rrsig) > 0);
+        assert_se(dnssec_rrsig_match_dnskey(rrsig, dnskey, false) > 0);
+
+        answer = dns_answer_new(1);
+        assert_se(answer);
+        assert_se(dns_answer_add(answer, a, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
+
+        assert_se(dnssec_verify_rrset(answer, a->key, rrsig, dnskey,
+                                      rrsig->rrsig.inception * USEC_PER_SEC, &result) >= 0);
+        assert_se(result == DNSSEC_VALIDATED);
+}
+
+TEST(dnssec_verify_rrset) {
         static const uint8_t signature_blob[] = {
                 0x7f, 0x79, 0xdd, 0x5e, 0x89, 0x79, 0x18, 0xd0, 0x34, 0x86, 0x8c, 0x72, 0x77, 0x75, 0x48, 0x4d,
                 0xc3, 0x7d, 0x38, 0x04, 0xab, 0xcd, 0x9e, 0x4c, 0x82, 0xb0, 0x92, 0xca, 0xe9, 0x66, 0xe9, 0x6e,
@@ -351,8 +532,7 @@
         assert_se(result == DNSSEC_VALIDATED);
 }
 
-static void test_dnssec_verify_rrset2(void) {
-
+TEST(dnssec_verify_rrset2) {
         static const uint8_t signature_blob[] = {
                 0x48, 0x45, 0xc8, 0x8b, 0xc0, 0x14, 0x92, 0xf5, 0x15, 0xc6, 0x84, 0x9d, 0x2f, 0xe3, 0x32, 0x11,
                 0x7d, 0xf1, 0xe6, 0x87, 0xb9, 0x42, 0xd3, 0x8b, 0x9e, 0xaf, 0x92, 0x31, 0x0a, 0x53, 0xad, 0x8b,
@@ -443,8 +623,7 @@
         assert_se(result == DNSSEC_VALIDATED);
 }
 
-static void test_dnssec_verify_rrset3(void) {
-
+TEST(dnssec_verify_rrset3) {
         static const uint8_t signature_blob[] = {
                 0x41, 0x09, 0x08, 0x67, 0x51, 0x6d, 0x02, 0xf2, 0x17, 0x1e, 0x61, 0x03, 0xc6, 0x80, 0x7a, 0x82,
                 0x8f, 0x6c, 0x8c, 0x4c, 0x68, 0x6f, 0x1c, 0xaa, 0x4a, 0xe0, 0x9b, 0x72, 0xdf, 0x7f, 0x15, 0xfa,
@@ -573,7 +752,7 @@
         assert_se(result == DNSSEC_VALIDATED);
 }
 
-static void test_dnssec_nsec3_hash(void) {
+TEST(dnssec_nsec3_hash) {
         static const uint8_t salt[] = { 0xB0, 0x1D, 0xFA, 0xCE };
         static const uint8_t next_hashed_name[] = { 0x84, 0x10, 0x26, 0x53, 0xc9, 0xfa, 0x4d, 0x85, 0x6c, 0x97, 0x82, 0xe2, 0x8f, 0xdf, 0x2d, 0x5e, 0x87, 0x69, 0xc4, 0x52 };
         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
@@ -605,19 +784,4 @@
         assert_se(strcasecmp(b, "PJ8S08RR45VIQDAQGE7EN3VHKNROTBMM") == 0);
 }
 
-#endif
-
-int main(int argc, char *argv[]) {
-
-#if HAVE_GCRYPT
-        test_dnssec_verify_dns_key();
-        test_dnssec_verify_rfc8080_ed25519_example1();
-        test_dnssec_verify_rfc8080_ed25519_example2();
-        test_dnssec_verify_rrset();
-        test_dnssec_verify_rrset2();
-        test_dnssec_verify_rrset3();
-        test_dnssec_nsec3_hash();
-#endif
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/resolve/test-resolved-etc-hosts.c b/src/resolve/test-resolved-etc-hosts.c
index 6706885..19b2991 100644
--- a/src/resolve/test-resolved-etc-hosts.c
+++ b/src/resolve/test-resolved-etc-hosts.c
@@ -14,38 +14,31 @@
 #include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_parse_etc_hosts_system(void) {
+TEST(parse_etc_hosts_system) {
         _cleanup_fclose_ FILE *f = NULL;
 
-        log_info("/* %s */", __func__);
-
         f = fopen("/etc/hosts", "re");
         if (!f) {
                 assert_se(errno == ENOENT);
                 return;
         }
 
-        _cleanup_(etc_hosts_free) EtcHosts hosts = {};
+        _cleanup_(etc_hosts_clear) EtcHosts hosts = {};
         assert_se(etc_hosts_parse(&hosts, f) == 0);
 }
 
-#define address_equal_4(_addr, _address)                                \
-        ((_addr)->family == AF_INET &&                                  \
-         !memcmp(&(_addr)->address.in, &(struct in_addr) { .s_addr = (_address) }, 4))
+#define has_4(_set, _address_str)                                       \
+        set_contains(_set, &(struct in_addr_data) { .family = AF_INET, .address.in = { .s_addr = inet_addr(_address_str) } })
 
-#define address_equal_6(_addr, ...)                                     \
-        ((_addr)->family == AF_INET6 &&                                 \
-         !memcmp(&(_addr)->address.in6, &(struct in6_addr) { .s6_addr = __VA_ARGS__}, 16) )
+#define has_6(_set, ...)                                           \
+        set_contains(_set, &(struct in_addr_data) { .family = AF_INET6, .address.in6 = { .s6_addr = __VA_ARGS__ } })
 
-static void test_parse_etc_hosts(void) {
+TEST(parse_etc_hosts) {
         _cleanup_(unlink_tempfilep) char
                 t[] = "/tmp/test-resolved-etc-hosts.XXXXXX";
 
-        log_info("/* %s */", __func__);
-
         int fd;
         _cleanup_fclose_ FILE *f;
-        const char *s;
 
         fd = mkostemp_safe(t);
         assert_se(fd >= 0);
@@ -72,55 +65,50 @@
         assert_se(fflush_and_check(f) >= 0);
         rewind(f);
 
-        _cleanup_(etc_hosts_free) EtcHosts hosts = {};
+        _cleanup_(etc_hosts_clear) EtcHosts hosts = {};
         assert_se(etc_hosts_parse(&hosts, f) == 0);
 
         EtcHostsItemByName *bn;
         assert_se(bn = hashmap_get(hosts.by_name, "some.where"));
-        assert_se(bn->n_addresses == 3);
-        assert_se(MALLOC_ELEMENTSOF(bn->addresses) >= 3);
-        assert_se(address_equal_4(bn->addresses[0], inet_addr("1.2.3.4")));
-        assert_se(address_equal_4(bn->addresses[1], inet_addr("1.2.3.5")));
-        assert_se(address_equal_6(bn->addresses[2], {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5}));
+        assert_se(set_size(bn->addresses) == 3);
+        assert_se(has_4(bn->addresses, "1.2.3.4"));
+        assert_se(has_4(bn->addresses, "1.2.3.5"));
+        assert_se(has_6(bn->addresses, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5}));
 
         assert_se(bn = hashmap_get(hosts.by_name, "dash"));
-        assert_se(bn->n_addresses == 1);
-        assert_se(MALLOC_ELEMENTSOF(bn->addresses) >= 1);
-        assert_se(address_equal_4(bn->addresses[0], inet_addr("1.2.3.6")));
+        assert_se(set_size(bn->addresses) == 1);
+        assert_se(has_4(bn->addresses, "1.2.3.6"));
 
         assert_se(bn = hashmap_get(hosts.by_name, "dash-dash.where-dash"));
-        assert_se(bn->n_addresses == 1);
-        assert_se(MALLOC_ELEMENTSOF(bn->addresses) >= 1);
-        assert_se(address_equal_4(bn->addresses[0], inet_addr("1.2.3.6")));
+        assert_se(set_size(bn->addresses) == 1);
+        assert_se(has_4(bn->addresses, "1.2.3.6"));
 
         /* See https://tools.ietf.org/html/rfc1035#section-2.3.1 */
         FOREACH_STRING(s, "bad-dash-", "-bad-dash", "-bad-dash.bad-")
                 assert_se(!hashmap_get(hosts.by_name, s));
 
         assert_se(bn = hashmap_get(hosts.by_name, "before.comment"));
-        assert_se(bn->n_addresses == 4);
-        assert_se(MALLOC_ELEMENTSOF(bn->addresses) >= 4);
-        assert_se(address_equal_4(bn->addresses[0], inet_addr("1.2.3.9")));
-        assert_se(address_equal_4(bn->addresses[1], inet_addr("1.2.3.10")));
-        assert_se(address_equal_4(bn->addresses[2], inet_addr("1.2.3.11")));
-        assert_se(address_equal_4(bn->addresses[3], inet_addr("1.2.3.12")));
+        assert_se(set_size(bn->addresses) == 4);
+        assert_se(has_4(bn->addresses, "1.2.3.9"));
+        assert_se(has_4(bn->addresses, "1.2.3.10"));
+        assert_se(has_4(bn->addresses, "1.2.3.11"));
+        assert_se(has_4(bn->addresses, "1.2.3.12"));
 
-        assert(!hashmap_get(hosts.by_name, "within.comment"));
-        assert(!hashmap_get(hosts.by_name, "within.comment2"));
-        assert(!hashmap_get(hosts.by_name, "within.comment3"));
-        assert(!hashmap_get(hosts.by_name, "#"));
+        assert_se(!hashmap_get(hosts.by_name, "within.comment"));
+        assert_se(!hashmap_get(hosts.by_name, "within.comment2"));
+        assert_se(!hashmap_get(hosts.by_name, "within.comment3"));
+        assert_se(!hashmap_get(hosts.by_name, "#"));
 
-        assert(!hashmap_get(hosts.by_name, "short.address"));
-        assert(!hashmap_get(hosts.by_name, "long.address"));
-        assert(!hashmap_get(hosts.by_name, "multi.colon"));
+        assert_se(!hashmap_get(hosts.by_name, "short.address"));
+        assert_se(!hashmap_get(hosts.by_name, "long.address"));
+        assert_se(!hashmap_get(hosts.by_name, "multi.colon"));
         assert_se(!set_contains(hosts.no_address, "short.address"));
         assert_se(!set_contains(hosts.no_address, "long.address"));
         assert_se(!set_contains(hosts.no_address, "multi.colon"));
 
         assert_se(bn = hashmap_get(hosts.by_name, "some.other"));
-        assert_se(bn->n_addresses == 1);
-        assert_se(MALLOC_ELEMENTSOF(bn->addresses) >= 1);
-        assert_se(address_equal_6(bn->addresses[0], {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5}));
+        assert_se(set_size(bn->addresses) == 1);
+        assert_se(has_6(bn->addresses, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5}));
 
         assert_se( set_contains(hosts.no_address, "some.where"));
         assert_se( set_contains(hosts.no_address, "some.other"));
@@ -128,8 +116,8 @@
         assert_se(!set_contains(hosts.no_address, "foobar.foo.foo"));
 }
 
-static void test_parse_file(const char *fname) {
-        _cleanup_(etc_hosts_free) EtcHosts hosts = {};
+static void test_parse_file_one(const char *fname) {
+        _cleanup_(etc_hosts_clear) EtcHosts hosts = {};
         _cleanup_fclose_ FILE *f;
 
         log_info("/* %s(\"%s\") */", __func__, fname);
@@ -138,14 +126,9 @@
         assert_se(etc_hosts_parse(&hosts, f) == 0);
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        if (argc == 1) {
-                test_parse_etc_hosts_system();
-                test_parse_etc_hosts();
-        } else
-                test_parse_file(argv[1]);
-
-        return 0;
+TEST(parse_file) {
+        for (int i = 1; i < saved_argc; i++)
+                test_parse_file_one(saved_argv[i]);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/resolve/test-resolved-packet.c b/src/resolve/test-resolved-packet.c
index cd93b1c..dd8c969 100644
--- a/src/resolve/test-resolved-packet.c
+++ b/src/resolve/test-resolved-packet.c
@@ -4,7 +4,7 @@
 #include "resolved-dns-packet.h"
 #include "tests.h"
 
-static void test_dns_packet_new(void) {
+TEST(dns_packet_new) {
         size_t i;
          _cleanup_(dns_packet_unrefp) DnsPacket *p2 = NULL;
 
@@ -23,10 +23,4 @@
         assert_se(dns_packet_new(&p2, DNS_PROTOCOL_DNS, DNS_PACKET_SIZE_MAX + 1, DNS_PACKET_SIZE_MAX) == -EFBIG);
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_dns_packet_new();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/resolve/test-resolved-stream.c b/src/resolve/test-resolved-stream.c
new file mode 100644
index 0000000..c708eb4
--- /dev/null
+++ b/src/resolve/test-resolved-stream.c
@@ -0,0 +1,395 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <net/if.h>
+#include <net/if_arp.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/prctl.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include "fd-util.h"
+#include "log.h"
+#include "macro.h"
+#include "path-util.h"
+#include "process-util.h"
+#include "resolved-dns-packet.h"
+#include "resolved-dns-question.h"
+#include "resolved-dns-rr.h"
+#if ENABLE_DNS_OVER_TLS
+#include "resolved-dnstls.h"
+#endif
+#include "resolved-dns-server.h"
+#include "resolved-dns-stream.h"
+#include "resolved-manager.h"
+#include "sd-event.h"
+#include "sparse-endian.h"
+#include "tests.h"
+
+static union sockaddr_union server_address;
+
+/* Bytes of the questions & answers used in the test, including TCP DNS 2-byte length prefix */
+static const uint8_t QUESTION_A[] =  {
+        0x00, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 'e',
+        'x' , 'a' , 'm' , 'p' , 'l' , 'e' , 0x03, 'c' , 'o' , 'm' , 0x00, 0x00, 0x01, 0x00, 0x01
+};
+static const uint8_t QUESTION_AAAA[] =  {
+        0x00, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 'e',
+        'x' , 'a' , 'm' , 'p' , 'l' , 'e' , 0x03, 'c' , 'o' , 'm' , 0x00, 0x00, 0x1C, 0x00, 0x01
+};
+static const uint8_t ANSWER_A[] =  {
+        0x00, 0x2D, 0x00, 0x00, 0x81, 0x80, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 'e',
+        'x' , 'a' , 'm' , 'p' , 'l' , 'e' , 0x03, 'c' , 'o' , 'm' , 0x00, 0x00, 0x01, 0x00, 0x01, 0xC0,
+        0x0C, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x52, 0x8D, 0x00, 0x04, 0x5D, 0xB8, 0xD8, 0x22,
+};
+static const uint8_t ANSWER_AAAA[] =  {
+        0x00, 0x39, 0x00, 0x00, 0x81, 0x80, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 'e',
+        'x' , 'a' , 'm' , 'p' , 'l' , 'e' , 0x03, 'c' , 'o' , 'm' , 0x00, 0x00, 0x1C, 0x00, 0x01, 0xC0,
+        0x0C, 0x00, 0x1C, 0x00, 0x01, 0x00, 0x00, 0x54, 0x4B, 0x00, 0x10, 0x26, 0x06, 0x28, 0x00, 0x02,
+        0x20, 0x00, 0x01, 0x02, 0x48, 0x18, 0x93, 0x25, 0xC8, 0x19, 0x46,
+};
+
+/**
+ * A mock TCP DNS server that asserts certain questions are received
+ * and replies with the same answer every time.
+ */
+static void receive_and_check_question(int fd, const uint8_t *expected_question,
+                                       size_t question_size) {
+        uint8_t *actual_question;
+        size_t n_read = 0;
+
+        actual_question = newa(uint8_t, question_size);
+        while (n_read < question_size) {
+                ssize_t r = read(fd, actual_question + n_read, question_size - n_read);
+                assert_se(r >= 0);
+                n_read += (size_t)r;
+        }
+        assert_se(n_read == question_size);
+
+        assert_se(memcmp(expected_question, actual_question, question_size) == 0);
+}
+
+static void send_answer(int fd, const uint8_t *answer, size_t answer_size) {
+        assert_se(write(fd, answer, answer_size) == (ssize_t)answer_size);
+}
+
+/* Sends two answers together in a single write operation,
+ * so they hopefully end up in a single TCP packet / TLS record */
+static void send_answers_together(int fd,
+                                  const uint8_t *answer1, size_t answer1_size,
+                                  const uint8_t *answer2, size_t answer2_size) {
+        uint8_t *answer;
+        size_t answer_size = answer1_size + answer2_size;
+
+        answer = newa(uint8_t, answer_size);
+        memcpy(answer, answer1, answer1_size);
+        memcpy(answer + answer1_size, answer2, answer2_size);
+        assert_se(write(fd, answer, answer_size) == (ssize_t)answer_size);
+}
+
+static void server_handle(int fd) {
+        receive_and_check_question(fd, QUESTION_A, sizeof(QUESTION_A));
+        send_answer(fd, ANSWER_A, sizeof(ANSWER_A));
+
+        receive_and_check_question(fd, QUESTION_AAAA, sizeof(QUESTION_AAAA));
+        send_answer(fd, ANSWER_AAAA, sizeof(ANSWER_AAAA));
+
+        receive_and_check_question(fd, QUESTION_A, sizeof(QUESTION_A));
+        receive_and_check_question(fd, QUESTION_AAAA, sizeof(QUESTION_AAAA));
+        send_answers_together(fd, ANSWER_A, sizeof(ANSWER_A),
+                                  ANSWER_AAAA, sizeof(ANSWER_AAAA));
+}
+
+static void *tcp_dns_server(void *p) {
+        _cleanup_close_ int bindfd = -EBADF, acceptfd = -EBADF;
+
+        assert_se((bindfd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0)) >= 0);
+        assert_se(setsockopt(bindfd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) >= 0);
+        assert_se(bind(bindfd, &server_address.sa, SOCKADDR_LEN(server_address)) >= 0);
+        assert_se(listen(bindfd, 1) >= 0);
+        assert_se((acceptfd = accept(bindfd, NULL, NULL)) >= 0);
+        server_handle(acceptfd);
+        return NULL;
+}
+
+#if ENABLE_DNS_OVER_TLS
+/*
+ * Spawns a DNS TLS server using the command line "openssl s_server" tool.
+ */
+static void *tls_dns_server(void *p) {
+        pid_t openssl_pid;
+        int r;
+        _cleanup_close_ int fd_server = -EBADF, fd_tls = -EBADF;
+        _cleanup_free_ char *cert_path = NULL, *key_path = NULL;
+        _cleanup_free_ char *bind_str = NULL;
+
+        assert_se(get_testdata_dir("test-resolve/selfsigned.cert", &cert_path) >= 0);
+        assert_se(get_testdata_dir("test-resolve/selfsigned.key", &key_path) >= 0);
+
+        assert_se(asprintf(&bind_str, "%s:%d",
+                           IN_ADDR_TO_STRING(server_address.in.sin_family,
+                                             sockaddr_in_addr(&server_address.sa)),
+                           be16toh(server_address.in.sin_port)) >= 0);
+
+        /* We will hook one of the socketpair ends to OpenSSL's TLS server
+         * stdin/stdout, so we will be able to read and write plaintext
+         * from the other end's file descriptor like an usual TCP server */
+        {
+                int fd[2];
+                assert_se(socketpair(AF_UNIX, SOCK_STREAM, 0, fd) >= 0);
+                fd_server = fd[0];
+                fd_tls = fd[1];
+        }
+
+        r = safe_fork_full("(test-resolved-stream-tls-openssl)", (int[]) { fd_server, fd_tls }, 2,
+                FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_LOG|FORK_REOPEN_LOG, &openssl_pid);
+        assert_se(r >= 0);
+        if (r == 0) {
+                /* Child */
+                assert_se(dup2(fd_tls, STDIN_FILENO) >= 0);
+                assert_se(dup2(fd_tls, STDOUT_FILENO) >= 0);
+                close(TAKE_FD(fd_server));
+                close(TAKE_FD(fd_tls));
+
+                execlp("openssl", "openssl", "s_server", "-accept", bind_str,
+                       "-key", key_path, "-cert", cert_path,
+                       "-quiet", "-naccept", "1", NULL);
+                log_error("exec failed, is something wrong with the 'openssl' command?");
+                _exit(EXIT_FAILURE);
+        } else {
+                pthread_mutex_t *server_lock = (pthread_mutex_t *)p;
+
+                server_handle(fd_server);
+
+                /* Once the test is done kill the TLS server to release the port */
+                assert_se(pthread_mutex_lock(server_lock) == 0);
+                assert_se(kill(openssl_pid, SIGTERM) >= 0);
+                assert_se(waitpid(openssl_pid, NULL, 0) >= 0);
+                assert_se(pthread_mutex_unlock(server_lock) == 0);
+        }
+
+        return NULL;
+}
+#endif
+
+static const char *TEST_DOMAIN = "example.com";
+static const uint64_t EVENT_TIMEOUT_USEC = 5 * 1000 * 1000;
+
+static void send_simple_question(DnsStream *stream, uint16_t type) {
+        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
+        _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
+        _cleanup_(dns_question_unrefp) DnsQuestion *question = NULL;
+
+        assert_se(dns_packet_new(&p, DNS_PROTOCOL_DNS, 0, DNS_PACKET_SIZE_MAX) >= 0);
+        assert_se(question = dns_question_new(1));
+        assert_se(key = dns_resource_key_new(DNS_CLASS_IN, type, TEST_DOMAIN));
+        assert_se(dns_question_add(question, key, 0) >= 0);
+        assert_se(dns_packet_append_question(p, question) >= 0);
+        DNS_PACKET_HEADER(p)->qdcount = htobe16(dns_question_size(question));
+        assert_se(dns_stream_write_packet(stream, p) >= 0);
+}
+
+static const size_t MAX_RECEIVED_PACKETS = 2;
+static DnsPacket *received_packets[2] = {};
+static size_t n_received_packets = 0;
+
+static int on_stream_packet(DnsStream *stream, DnsPacket *p) {
+        assert_se(n_received_packets < MAX_RECEIVED_PACKETS);
+        assert_se(received_packets[n_received_packets++] = dns_packet_ref(p));
+        return 0;
+}
+
+static int on_stream_complete_do_nothing(DnsStream *s, int error) {
+        return 0;
+}
+
+static void test_dns_stream(bool tls) {
+        Manager manager = {};
+         _cleanup_(dns_stream_unrefp) DnsStream *stream = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        _cleanup_close_ int clientfd = -EBADF;
+        int r;
+
+        void *(*server_entrypoint)(void *);
+        pthread_t server_thread;
+        pthread_mutex_t server_lock;
+
+        log_info("test-resolved-stream: Started %s test", tls ? "TLS" : "TCP");
+
+#if ENABLE_DNS_OVER_TLS
+        if (tls)
+                /* For TLS mode, use DNS_OVER_TLS_OPPORTUNISTIC instead of DNS_OVER_TLS_YES, just to make
+                 * certificate validation more lenient, allowing us to use self-signed certificates.  We
+                 * never downgrade, everything we test always goes over TLS */
+                manager.dns_over_tls_mode = DNS_OVER_TLS_OPPORTUNISTIC;
+#endif
+
+        assert_se(sd_event_new(&event) >= 0);
+        manager.event = event;
+
+        /* Set up a mock DNS (over TCP or TLS) server */
+        server_entrypoint = tcp_dns_server;
+#if ENABLE_DNS_OVER_TLS
+        if (tls)
+                server_entrypoint = tls_dns_server;
+#endif
+        assert_se(pthread_mutex_init(&server_lock, NULL) == 0);
+        assert_se(pthread_mutex_lock(&server_lock) == 0);
+        assert_se(pthread_create(&server_thread, NULL, server_entrypoint, &server_lock) == 0);
+
+        /* Create a socket client and connect to the TCP or TLS server
+         * The server may not be up immediately, so try to connect a few times before failing */
+        assert_se((clientfd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0)) >= 0);
+
+        for (int i = 0; i < 100; i++) {
+                r = connect(clientfd, &server_address.sa, SOCKADDR_LEN(server_address));
+                if (r >= 0)
+                        break;
+                usleep(EVENT_TIMEOUT_USEC / 100);
+        }
+        assert_se(r >= 0);
+
+        /* systemd-resolved uses (and requires) the socket to be in nonblocking mode */
+        assert_se(fcntl(clientfd, F_SETFL, O_NONBLOCK) >= 0);
+
+        /* Initialize DNS stream (disabling the default self-destruction
+           behaviour when no complete callback is set) */
+        assert_se(dns_stream_new(&manager, &stream, DNS_STREAM_LOOKUP, DNS_PROTOCOL_DNS,
+                                 TAKE_FD(clientfd), NULL, on_stream_packet, on_stream_complete_do_nothing,
+                                 DNS_STREAM_DEFAULT_TIMEOUT_USEC) >= 0);
+#if ENABLE_DNS_OVER_TLS
+        if (tls) {
+                DnsServer server = {
+                        .manager = &manager,
+                        .family = server_address.sa.sa_family,
+                        .address = *sockaddr_in_addr(&server_address.sa),
+                };
+
+                assert_se(dnstls_manager_init(&manager) >= 0);
+                assert_se(dnstls_stream_connect_tls(stream, &server) >= 0);
+        }
+#endif
+
+        /* Test: Question of type A and associated answer */
+        log_info("test-resolved-stream: A record");
+        send_simple_question(stream, DNS_TYPE_A);
+        while (n_received_packets != 1)
+                assert_se(sd_event_run(event, EVENT_TIMEOUT_USEC) >= 1);
+        assert_se(DNS_PACKET_DATA(received_packets[0]));
+        assert_se(memcmp(DNS_PACKET_DATA(received_packets[0]),
+                         ANSWER_A + 2, sizeof(ANSWER_A) - 2) == 0);
+        dns_packet_unref(TAKE_PTR(received_packets[0]));
+        n_received_packets = 0;
+
+        /* Test: Question of type AAAA and associated answer */
+        log_info("test-resolved-stream: AAAA record");
+        send_simple_question(stream, DNS_TYPE_AAAA);
+        while (n_received_packets != 1)
+                assert_se(sd_event_run(event, EVENT_TIMEOUT_USEC) >= 1);
+        assert_se(DNS_PACKET_DATA(received_packets[0]));
+        assert_se(memcmp(DNS_PACKET_DATA(received_packets[0]),
+                         ANSWER_AAAA + 2, sizeof(ANSWER_AAAA) - 2) == 0);
+        dns_packet_unref(TAKE_PTR(received_packets[0]));
+        n_received_packets = 0;
+
+        /* Test: Question of type A and AAAA and associated answers
+         * Both answers are sent back in a single packet or TLS record
+         * (tests the fix of PR #22132: "Fix DoT timeout on multiple answer records") */
+        log_info("test-resolved-stream: A + AAAA record");
+        send_simple_question(stream, DNS_TYPE_A);
+        send_simple_question(stream, DNS_TYPE_AAAA);
+
+        while (n_received_packets != 2)
+                assert_se(sd_event_run(event, EVENT_TIMEOUT_USEC) >= 1);
+        assert_se(DNS_PACKET_DATA(received_packets[0]));
+        assert_se(DNS_PACKET_DATA(received_packets[1]));
+        assert_se(memcmp(DNS_PACKET_DATA(received_packets[0]),
+                         ANSWER_A + 2, sizeof(ANSWER_A) - 2) == 0);
+        assert_se(memcmp(DNS_PACKET_DATA(received_packets[1]),
+                         ANSWER_AAAA + 2, sizeof(ANSWER_AAAA) - 2) == 0);
+        dns_packet_unref(TAKE_PTR(received_packets[0]));
+        dns_packet_unref(TAKE_PTR(received_packets[1]));
+        n_received_packets = 0;
+
+#if ENABLE_DNS_OVER_TLS
+        if (tls)
+                dnstls_manager_free(&manager);
+#endif
+
+        /* Stop the DNS server */
+        assert_se(pthread_mutex_unlock(&server_lock) == 0);
+        assert_se(pthread_join(server_thread, NULL) == 0);
+        assert_se(pthread_mutex_destroy(&server_lock) == 0);
+
+        log_info("test-resolved-stream: Finished %s test", tls ? "TLS" : "TCP");
+}
+
+static void try_isolate_network(void) {
+        _cleanup_close_ int socket_fd = -EBADF;
+        int r;
+
+        /* First test if CLONE_NEWUSER/CLONE_NEWNET can actually work for us, i.e. we can open the namespaces
+         * and then still access the build dir we are run from. We do that in a child process since it's
+         * nasty if we have to go back from the namespace once we entered it and realized it cannot work. */
+        r = safe_fork("(usernstest)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
+        if (r == 0) { /* child */
+                _cleanup_free_ char *rt = NULL, *d = NULL;
+
+                if (unshare(CLONE_NEWUSER | CLONE_NEWNET) < 0) {
+                        log_warning_errno(errno, "test-resolved-stream: Can't create user and network ns, running on host: %m");
+                        _exit(EXIT_FAILURE);
+                }
+
+                assert_se(get_process_exe(0, &rt) >= 0);
+                assert_se(path_extract_directory(rt, &d) >= 0);
+
+                if (access(d, F_OK) < 0) {
+                        log_warning_errno(errno, "test-resolved-stream: Can't access /proc/self/exe from user/network ns, running on host: %m");
+                        _exit(EXIT_FAILURE);
+                }
+
+                _exit(EXIT_SUCCESS);
+        }
+        if (r == -EPROTO) /* EPROTO means nonzero exit code of child, i.e. the tests in the child failed */
+                return;
+        assert_se(r > 0);
+
+        /* Now that we know that the unshare() is safe, let's actually do it */
+        assert_se(unshare(CLONE_NEWUSER | CLONE_NEWNET) >= 0);
+
+        /* Bring up the loopback interfaceon the newly created network namespace */
+        struct ifreq req = { .ifr_ifindex = 1 };
+        assert_se((socket_fd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0)) >= 0);
+        assert_se(ioctl(socket_fd, SIOCGIFNAME, &req) >= 0);
+        assert_se(ioctl(socket_fd, SIOCGIFFLAGS, &req) >= 0);
+        assert_se(FLAGS_SET(req.ifr_flags, IFF_LOOPBACK));
+        req.ifr_flags |= IFF_UP;
+        assert_se(ioctl(socket_fd, SIOCSIFFLAGS, &req) >= 0);
+}
+
+int main(int argc, char **argv) {
+        server_address = (union sockaddr_union) {
+                .in.sin_family = AF_INET,
+                .in.sin_port = htobe16(12345),
+                .in.sin_addr.s_addr = htobe32(INADDR_LOOPBACK)
+        };
+
+        test_setup_logging(LOG_DEBUG);
+
+        try_isolate_network();
+
+        test_dns_stream(false);
+#if ENABLE_DNS_OVER_TLS
+        if (system("openssl version >/dev/null 2>&1") != 0)
+                return log_tests_skipped("Skipping TLS test since the 'openssl' command does not seem to be available");
+        test_dns_stream(true);
+#endif
+
+        return 0;
+}
diff --git a/src/rfkill/rfkill.c b/src/rfkill/rfkill.c
index bff1a28..9631513 100644
--- a/src/rfkill/rfkill.c
+++ b/src/rfkill/rfkill.c
@@ -24,7 +24,6 @@
 #include "string-table.h"
 #include "string-util.h"
 #include "udev-util.h"
-#include "util.h"
 
 /* Note that any write is delayed until exit and the rfkill state will not be
  * stored for rfkill indices that disappear after a change. */
@@ -75,12 +74,12 @@
         assert(event);
         assert(ret);
 
-        if (asprintf(&sysname, "rfkill%i", event->idx) < 0)
+        if (asprintf(&sysname, "rfkill%u", event->idx) < 0)
                 return log_oom();
 
         r = sd_device_new_from_subsystem_sysname(&device, "rfkill", sysname);
         if (r < 0)
-                return log_full_errno(IN_SET(r, -ENOENT, -ENXIO, -ENODEV) ? LOG_DEBUG : LOG_ERR, r,
+                return log_full_errno(ERRNO_IS_DEVICE_ABSENT(r) ? LOG_DEBUG : LOG_ERR, r,
                                       "Failed to open device '%s': %m", sysname);
 
         r = sd_device_get_sysattr_value(device, "name", &name);
@@ -176,7 +175,7 @@
 
         ssize_t l = write(c->rfkill_fd, &we, sizeof we);
         if (l < 0)
-                return log_error_errno(errno, "Failed to restore rfkill state for %i: %m", event->idx);
+                return log_error_errno(errno, "Failed to restore rfkill state for %u: %m", event->idx);
         if ((size_t)l < RFKILL_EVENT_SIZE_V1) /* l cannot be < 0 here. Cast to fix -Werror=sign-compare */
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                        "Couldn't write rfkill event structure, too short (wrote %zd of %zu bytes).",
@@ -188,17 +187,14 @@
 }
 
 static void save_state_queue_remove(Context *c, int idx, const char *state_file) {
-        struct write_queue_item *item, *tmp;
-
         assert(c);
 
-        LIST_FOREACH_SAFE(queue, item, tmp, c->write_queue) {
+        LIST_FOREACH(queue, item, c->write_queue)
                 if ((state_file && streq(item->file, state_file)) || idx == item->rfkill_idx) {
                         log_debug("Canceled previous save state of '%s' to %s.", one_zero(item->state), item->file);
                         LIST_REMOVE(queue, c->write_queue, item);
                         write_queue_item_free(item);
                 }
-        }
 }
 
 static int save_state_queue(Context *c, const struct rfkill_event *event) {
@@ -271,7 +267,7 @@
 }
 
 static int run(int argc, char *argv[]) {
-        _cleanup_(context_save_and_clear) Context c = { .rfkill_fd = -1 };
+        _cleanup_(context_save_and_clear) Context c = { .rfkill_fd = -EBADF };
         bool ready = false;
         int r, n;
 
@@ -317,7 +313,10 @@
                         if (!ready) {
                                 /* Notify manager that we are now finished with processing whatever was
                                  * queued */
-                                (void) sd_notify(false, "READY=1");
+                                r = sd_notify(false, "READY=1");
+                                if (r < 0)
+                                        log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
+
                                 ready = true;
                         }
 
@@ -347,29 +346,29 @@
 
                 const char *type = rfkill_type_to_string(event.type);
                 if (!type) {
-                        log_debug("An rfkill device of unknown type %i discovered, ignoring.", event.type);
+                        log_debug("An rfkill device of unknown type %u discovered, ignoring.", event.type);
                         continue;
                 }
 
                 switch (event.op) {
 
                 case RFKILL_OP_ADD:
-                        log_debug("A new rfkill device has been added with index %i and type %s.", event.idx, type);
+                        log_debug("A new rfkill device has been added with index %u and type %s.", event.idx, type);
                         (void) load_state(&c, &event);
                         break;
 
                 case RFKILL_OP_DEL:
-                        log_debug("An rfkill device has been removed with index %i and type %s", event.idx, type);
+                        log_debug("An rfkill device has been removed with index %u and type %s", event.idx, type);
                         (void) save_state_cancel(&c, &event);
                         break;
 
                 case RFKILL_OP_CHANGE:
-                        log_debug("An rfkill device has changed state with index %i and type %s", event.idx, type);
+                        log_debug("An rfkill device has changed state with index %u and type %s", event.idx, type);
                         (void) save_state_queue(&c, &event);
                         break;
 
                 default:
-                        log_debug("Unknown event %i from /dev/rfkill for index %i and type %s, ignoring.", event.op, event.idx, type);
+                        log_debug("Unknown event %u from /dev/rfkill for index %u and type %s, ignoring.", event.op, event.idx, type);
                         break;
                 }
         }
diff --git a/src/rpm/macros.systemd.in b/src/rpm/macros.systemd.in
index 3a0169a..8880078 100644
--- a/src/rpm/macros.systemd.in
+++ b/src/rpm/macros.systemd.in
@@ -17,6 +17,7 @@
 %_sysctldir {{SYSCTL_DIR}}
 %_sysusersdir {{SYSUSERS_DIR}}
 %_tmpfilesdir {{TMPFILES_DIR}}
+%_user_tmpfilesdir {{USER_TMPFILES_DIR}}
 %_environmentdir {{ENVIRONMENT_DIR}}
 %_modulesloaddir {{MODULESLOAD_DIR}}
 %_modprobedir {{MODPROBE_DIR}}
@@ -46,31 +47,33 @@
 
 %systemd_post() \
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_post}} \
-if [ $1 -eq 1 ] && [ -x %{_bindir}/systemctl ]; then \
+if [ $1 -eq 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
     # Initial installation \
-    %{_bindir}/systemctl --no-reload preset %{?*} || : \
+    {{SYSTEMD_UPDATE_HELPER_PATH}} install-system-units %{?*} || : \
 fi \
 %{nil}
 
-%systemd_user_post() %{expand:%systemd_post \\--global %%{?*}}
+%systemd_user_post() \
+%{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_user_post}} \
+if [ $1 -eq 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
+    # Initial installation \
+    {{SYSTEMD_UPDATE_HELPER_PATH}} install-user-units %{?*} || : \
+fi \
+%{nil}
 
 %systemd_preun() \
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_preun}} \
-if [ $1 -eq 0 ] && [ -x %{_bindir}/systemctl ]; then \
+if [ $1 -eq 0 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
     # Package removal, not upgrade \
-    if [ -d /run/systemd/system ]; then \
-          %{_bindir}/systemctl --no-reload disable --now %{?*} || : \
-    else \
-          %{_bindir}/systemctl --no-reload disable %{?*} || : \
-    fi \
+    {{SYSTEMD_UPDATE_HELPER_PATH}} remove-system-units %{?*} || : \
 fi \
 %{nil}
 
 %systemd_user_preun() \
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_user_preun}} \
-if [ $1 -eq 0 ] && [ -x %{_bindir}/systemctl ]; then \
+if [ $1 -eq 0 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
     # Package removal, not upgrade \
-    %{_bindir}/systemctl --global disable %{?*} || : \
+    {{SYSTEMD_UPDATE_HELPER_PATH}} remove-user-units %{?*} || : \
 fi \
 %{nil}
 
@@ -84,16 +87,18 @@
 
 %systemd_postun_with_restart() \
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_postun_with_restart}} \
-if [ $1 -ge 1 ] && [ -x %{_bindir}/systemctl ]; then \
+if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
     # Package upgrade, not uninstall \
-    for unit in %{?*}; do \
-         %{_bindir}/systemctl set-property $unit Markers=+needs-restart || : \
-    done \
+    {{SYSTEMD_UPDATE_HELPER_PATH}} mark-restart-system-units %{?*} || : \
 fi \
 %{nil}
 
 %systemd_user_postun_with_restart() \
-%{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_postun_with_restart}} \
+%{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_user_postun_with_restart}} \
+if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
+    # Package upgrade, not uninstall \
+    {{SYSTEMD_UPDATE_HELPER_PATH}} mark-restart-user-units %{?*} || : \
+fi \
 %{nil}
 
 %udev_hwdb_update() %{nil}
@@ -105,17 +110,17 @@
 # Deprecated. Use %tmpfiles_create_package instead
 %tmpfiles_create() \
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# tmpfiles_create}} \
-[ -x %{_bindir}/systemd-tmpfiles ] && %{_bindir}/systemd-tmpfiles --create %{?*} || : \
+command -v systemd-tmpfiles >/dev/null && systemd-tmpfiles --create %{?*} || : \
 %{nil}
 
 # Deprecated. Use %sysusers_create_package instead
 %sysusers_create() \
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# sysusers_create}} \
-[ -x %{_bindir}/systemd-sysusers ] && %{_bindir}/systemd-sysusers %{?*} || : \
+command -v systemd-sysusers >/dev/null && systemd-sysusers %{?*} || : \
 %{nil}
 
 %sysusers_create_inline() \
-[ -x %{_bindir}/systemd-sysusers ] && %{_bindir}/systemd-sysusers - <<SYSTEMD_INLINE_EOF || : \
+command -v systemd-sysusers >/dev/null && systemd-sysusers - <<SYSTEMD_INLINE_EOF || : \
 %{?*} \
 SYSTEMD_INLINE_EOF\
 %{nil}
diff --git a/src/rpm/meson.build b/src/rpm/meson.build
index fc72fee..8176659 100644
--- a/src/rpm/meson.build
+++ b/src/rpm/meson.build
@@ -1,9 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 in_files = [
-        ['macros.systemd',      rpmmacrosdir != 'no'],
-        ['triggers.systemd',    false],
-        ['triggers.systemd.sh', false]]
+        ['macros.systemd',        rpmmacrosdir != 'no', rpmmacrosdir],
+
+        # we conditionalize on rpmmacrosdir, but install into rootlibexecdir
+        ['systemd-update-helper', rpmmacrosdir != 'no', rootlibexecdir],
+
+        ['triggers.systemd',      false],
+        ['triggers.systemd.sh',   false]]
 
 # The last two don't get installed anywhere, one of them needs to included in
 # the rpm spec file definition instead.
@@ -14,9 +18,8 @@
                 file,
                 input : file + '.in',
                 output : file,
-                command : [meson_render_jinja2, config_h, '@INPUT@'],
-                capture : true,
+                command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
                 install : tuple[1],
-                install_dir : rpmmacrosdir,
+                install_dir : tuple.length() > 2 ? tuple[2] : '',
                 build_by_default : true)
 endforeach
diff --git a/src/rpm/systemd-update-helper.in b/src/rpm/systemd-update-helper.in
new file mode 100755
index 0000000..c623a5e
--- /dev/null
+++ b/src/rpm/systemd-update-helper.in
@@ -0,0 +1,119 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eu
+set -o pipefail
+
+command="${1:?}"
+shift
+
+command -v systemctl >/dev/null || exit 0
+
+case "$command" in
+    install-system-units)
+        systemctl --no-reload preset "$@"
+        ;;
+
+    install-user-units)
+        systemctl --no-reload preset --global "$@"
+        ;;
+
+    remove-system-units)
+        if [ -d /run/systemd/system ]; then
+            systemctl --no-reload disable --now --no-warn "$@"
+        else
+            systemctl --no-reload disable --no-warn "$@"
+        fi
+        ;;
+
+    remove-user-units)
+        systemctl --global disable --no-warn "$@"
+
+        [ -d /run/systemd/system ] || exit 0
+
+        users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
+        for user in $users; do
+            SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
+                    systemctl --user -M "$user@" disable --now --no-warn "$@" &
+        done
+        wait
+        ;;
+
+    mark-restart-system-units)
+        [ -d /run/systemd/system ] || exit 0
+
+        for unit in "$@"; do
+            systemctl set-property "$unit" Markers=+needs-restart &
+        done
+        wait
+        ;;
+
+    mark-restart-user-units)
+        [ -d /run/systemd/system ] || exit 0
+
+        users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
+        for user in $users; do
+            for unit in "$@"; do
+                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
+                        systemctl --user -M "$user@" set-property "$unit" Markers=+needs-restart &
+            done
+        done
+        wait
+        ;;
+
+    system-reload-restart|system-reload|system-restart)
+        if [ -n "$*" ]; then
+            echo "Unexpected arguments for '$command': $*"
+            exit 2
+        fi
+
+        [ -d /run/systemd/system ] || exit 0
+
+        if [[ "$command" =~ reload ]]; then
+            systemctl daemon-reload
+        fi
+
+        if [[ "$command" =~ restart ]]; then
+            systemctl reload-or-restart --marked
+        fi
+        ;;
+
+    user-reload-restart|user-reload|user-restart|user-reexec)
+        if [ -n "$*" ]; then
+            echo "Unexpected arguments for '$command': $*"
+            exit 2
+        fi
+
+        [ -d /run/systemd/system ] || exit 0
+
+        users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
+
+        if [[ "$command" =~ reexec ]]; then
+            for user in $users; do
+                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
+                        systemctl --user -M "$user@" daemon-reexec &
+            done
+            wait
+        fi
+
+        if [[ "$command" =~ reload ]]; then
+            for user in $users; do
+                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
+                        systemctl --user -M "$user@" daemon-reload &
+            done
+            wait
+        fi
+
+        if [[ "$command" =~ restart ]]; then
+            for user in $users; do
+                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
+                        systemctl --user -M "$user@" reload-or-restart --marked &
+            done
+            wait
+        fi
+        ;;
+
+    *)
+        echo "Unknown verb '$command'"
+        exit 3
+        ;;
+esac
diff --git a/src/rpm/triggers.systemd.in b/src/rpm/triggers.systemd.in
index c10112f..b563c7a 100644
--- a/src/rpm/triggers.systemd.in
+++ b/src/rpm/triggers.systemd.in
@@ -13,20 +13,19 @@
 -- upgraded. We care about the case where a package is initially
 -- installed, because other cases are covered by the *un scriptlets,
 -- so sometimes we will reload needlessly.
-if posix.access("/run/systemd/system") then
-    pid = posix.fork()
-    if pid == 0 then
-        assert(posix.exec("%{_bindir}/systemctl", "daemon-reload"))
-    elseif pid > 0 then
-        posix.wait(pid)
-    end
+pid = posix.fork()
+if pid == 0 then
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "system-reload-restart"))
+elseif pid > 0 then
+    posix.wait(pid)
+end
 
-    pid = posix.fork()
-    if pid == 0 then
-        assert(posix.exec("%{_bindir}/systemctl", "reload-or-restart", "--marked"))
-    elseif pid > 0 then
-        posix.wait(pid)
-    end
+%transfiletriggerin -P 900899 -p <lua> -- {{USER_DATA_UNIT_DIR}} /etc/systemd/user
+pid = posix.fork()
+if pid == 0 then
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "user-reload-restart"))
+elseif pid > 0 then
+    posix.wait(pid)
 end
 
 %transfiletriggerpostun -P 1000100 -p <lua> -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
@@ -35,56 +34,55 @@
 -- On upgrade, we need to run daemon-reload after any new unit files
 -- have been installed, but before %postun scripts in packages get
 -- executed.
-if posix.access("/run/systemd/system") then
-    pid = posix.fork()
-    if pid == 0 then
-        assert(posix.exec("%{_bindir}/systemctl", "daemon-reload"))
-    elseif pid > 0 then
-        posix.wait(pid)
-    end
+pid = posix.fork()
+if pid == 0 then
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "system-reload"))
+elseif pid > 0 then
+    posix.wait(pid)
+end
+
+%transfiletriggerpostun -P 1000100 -p <lua> -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
+-- Execute daemon-reload in user managers.
+pid = posix.fork()
+if pid == 0 then
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "user-reload"))
+elseif pid > 0 then
+    posix.wait(pid)
 end
 
 %transfiletriggerpostun -P 10000 -p <lua> -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
--- We restart remaining services that should be restarted here.
-if posix.access("/run/systemd/system") then
-    pid = posix.fork()
-    if pid == 0 then
-        assert(posix.exec("%{_bindir}/systemctl", "reload-or-restart", "--marked"))
-    elseif pid > 0 then
-        posix.wait(pid)
-    end
+-- We restart remaining system services that should be restarted here.
+pid = posix.fork()
+if pid == 0 then
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "system-restart"))
+elseif pid > 0 then
+    posix.wait(pid)
+end
+
+%transfiletriggerpostun -P 9999 -p <lua> -- {{USER_DATA_UNIT_DIR}} /etc/systemd/user
+-- We restart remaining user services that should be restarted here.
+pid = posix.fork()
+if pid == 0 then
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "user-restart"))
+elseif pid > 0 then
+    posix.wait(pid)
 end
 
 %transfiletriggerin -P 100700 -p <lua> -- {{SYSUSERS_DIR}}
 -- This script will process files installed in {{SYSUSERS_DIR}} to create
 -- specified users automatically. The priority is set such that it
 -- will run before the tmpfiles file trigger.
-pid = posix.fork()
-if pid == 0 then
-    assert(posix.exec("%{_bindir}/systemd-sysusers"))
-elseif pid > 0 then
-    posix.wait(pid)
-end
+assert(rpm.execute("systemd-sysusers"))
 
 %transfiletriggerin -P 1000700 udev -p <lua> -- {{UDEV_HWDB_DIR}}
 -- This script will automatically invoke hwdb update if files have been
 -- installed or updated in {{UDEV_HWDB_DIR}}.
-pid = posix.fork()
-if pid == 0 then
-    assert(posix.exec("%{_bindir}/systemd-hwdb", "update"))
-elseif pid > 0 then
-    posix.wait(pid)
-end
+assert(rpm.execute("systemd-hwdb", "update"))
 
 %transfiletriggerin -P 1000700 -p <lua> -- {{SYSTEMD_CATALOG_DIR}}
 -- This script will automatically invoke journal catalog update if files
 -- have been installed or updated in {{SYSTEMD_CATALOG_DIR}}.
-pid = posix.fork()
-if pid == 0 then
-    assert(posix.exec("%{_bindir}/journalctl", "--update-catalog"))
-elseif pid > 0 then
-    posix.wait(pid)
-end
+assert(rpm.execute("journalctl", "--update-catalog"))
 
 %transfiletriggerin -P 1000700 -p <lua> -- {{BINFMT_DIR}}
 -- This script will automatically apply binfmt rules if files have been
@@ -102,25 +100,13 @@
 -- This script will process files installed in {{TMPFILES_DIR}} to create
 -- tmpfiles automatically. The priority is set such that it will run
 -- after the sysusers file trigger, but before any other triggers.
-if posix.access("/run/systemd/system") then
-    pid = posix.fork()
-    if pid == 0 then
-        assert(posix.exec("%{_bindir}/systemd-tmpfiles", "--create"))
-    elseif pid > 0 then
-        posix.wait(pid)
-    end
-end
+assert(rpm.execute("systemd-tmpfiles", "--create"))
 
 %transfiletriggerin -P 1000600 udev -p <lua> -- {{UDEV_RULES_DIR}}
 -- This script will automatically update udev with new rules if files
 -- have been installed or updated in {{UDEV_RULES_DIR}}.
-if posix.access("/run/systemd/system") then
-    pid = posix.fork()
-    if pid == 0 then
-        assert(posix.exec("%{_bindir}/udevadm", "control", "--reload"))
-    elseif pid > 0 then
-        posix.wait(pid)
-    end
+if posix.access("/run/udev/control") then
+    assert(rpm.execute("udevadm", "control", "--reload"))
 end
 
 %transfiletriggerin -P 1000500 -p <lua> -- {{SYSCTL_DIR}}
diff --git a/src/rpm/triggers.systemd.sh.in b/src/rpm/triggers.systemd.sh.in
index e746c31..8c301f5 100644
--- a/src/rpm/triggers.systemd.sh.in
+++ b/src/rpm/triggers.systemd.sh.in
@@ -14,10 +14,10 @@
 # upgraded. We care about the case where a package is initially
 # installed, because other cases are covered by the *un scriptlets,
 # so sometimes we will reload needlessly.
-if test -d "/run/systemd/system"; then
-  %{_bindir}/systemctl daemon-reload || :
-  %{_bindir}/systemctl reload-or-restart --marked || :
-fi
+{{SYSTEMD_UPDATE_HELPER_PATH}} system-reload-restart || :
+
+%transfiletriggerin -P 900899 -- {{USER_DATA_UNIT_DIR}} /etc/systemd/user
+{{SYSTEMD_UPDATE_HELPER_PATH}} user-reload-restart || :
 
 %transfiletriggerpostun -P 1000100 -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
 # On removal, we need to run daemon-reload after any units have been
@@ -25,31 +25,35 @@
 # On upgrade, we need to run daemon-reload after any new unit files
 # have been installed, but before %postun scripts in packages get
 # executed.
-if test -d "/run/systemd/system"; then
-  %{_bindir}/systemctl daemon-reload || :
-fi
+{{SYSTEMD_UPDATE_HELPER_PATH}} system-reload || :
+
+%transfiletriggerpostun -P 1000099 -- {{USER_DATA_UNIT_DIR}} /etc/systemd/user
+# Execute daemon-reload in user managers.
+{{SYSTEMD_UPDATE_HELPER_PATH}} user-reload || :
 
 %transfiletriggerpostun -P 10000 -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
-# We restart remaining services that should be restarted here.
-if test -d "/run/systemd/system"; then
-  %{_bindir}/systemctl reload-or-restart --marked || :
-fi
+# We restart remaining system services that should be restarted here.
+{{SYSTEMD_UPDATE_HELPER_PATH}} system-restart || :
+
+%transfiletriggerpostun -P  9999 -- {{USER_DATA_UNIT_DIR}} /etc/systemd/user
+# We restart remaining user services that should be restarted here.
+{{SYSTEMD_UPDATE_HELPER_PATH}} user-restart || :
 
 %transfiletriggerin -P 1000700 -- {{SYSUSERS_DIR}}
 # This script will process files installed in {{SYSUSERS_DIR}} to create
 # specified users automatically. The priority is set such that it
 # will run before the tmpfiles file trigger.
-%{_bindir}/systemd-sysusers || :
+systemd-sysusers || :
 
 %transfiletriggerin -P 1000700 udev -- {{UDEV_HWDB_DIR}}
 # This script will automatically invoke hwdb update if files have been
 # installed or updated in {{UDEV_HWDB_DIR}}.
-%{_bindir}/systemd-hwdb update || :
+systemd-hwdb update || :
 
 %transfiletriggerin -P 1000700 -- {{SYSTEMD_CATALOG_DIR}}
 # This script will automatically invoke journal catalog update if files
 # have been installed or updated in {{SYSTEMD_CATALOG_DIR}}.
-%{_bindir}/journalctl --update-catalog || :
+journalctl --update-catalog || :
 
 %transfiletriggerin -P 1000700 -- {{BINFMT_DIR}}
 # This script will automatically apply binfmt rules if files have been
@@ -65,14 +69,14 @@
 # tmpfiles automatically. The priority is set such that it will run
 # after the sysusers file trigger, but before any other triggers.
 if test -d "/run/systemd/system"; then
-  %{_bindir}/systemd-tmpfiles --create || :
+  systemd-tmpfiles --create || :
 fi
 
 %transfiletriggerin -P 1000600 udev -- {{UDEV_RULES_DIR}}
 # This script will automatically update udev with new rules if files
 # have been installed or updated in {{UDEV_RULES_DIR}}.
 if test -e /run/udev/control; then
-  %{_bindir}/udevadm control --reload || :
+  udevadm control --reload || :
 fi
 
 %transfiletriggerin -P 1000500 -- {{SYSCTL_DIR}}
diff --git a/src/run-generator/run-generator.c b/src/run-generator/run-generator.c
index 1cf14e7..e3fb7f2 100644
--- a/src/run-generator/run-generator.c
+++ b/src/run-generator/run-generator.c
@@ -7,6 +7,7 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "generator.h"
+#include "glyph-util.h"
 #include "mkdir.h"
 #include "proc-cmdline.h"
 #include "special.h"
@@ -55,7 +56,6 @@
 static int generate(void) {
         _cleanup_fclose_ FILE *f = NULL;
         const char *p;
-        char **c;
         int r;
 
         if (strv_isempty(arg_commands) && !arg_success_action)
@@ -117,7 +117,8 @@
         /* And now redirect default.target to our new target */
         p = strjoina(arg_dest, "/" SPECIAL_DEFAULT_TARGET);
         if (symlink("kernel-command-line.target", p) < 0)
-                return log_error_errno(errno, "Failed to link unit file kernel-command-line.target → %s: %m", p);
+                return log_error_errno(errno, "Failed to link unit file kernel-command-line.target %s %s: %m",
+                                       special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
 
         return 0;
 }
diff --git a/src/run/run.c b/src/run/run.c
index c858bf7..471d159 100644
--- a/src/run/run.c
+++ b/src/run/run.c
@@ -10,6 +10,7 @@
 #include "sd-event.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-map-properties.h"
@@ -111,7 +112,7 @@
                "     --nice=NICE                  Nice level\n"
                "     --working-directory=PATH     Set working directory\n"
                "  -d --same-dir                   Inherit working directory from caller\n"
-               "  -E --setenv=NAME=VALUE          Set environment\n"
+               "  -E --setenv=NAME[=VALUE]        Set environment variable\n"
                "  -t --pty                        Run service on pseudo TTY as STDIN/STDOUT/\n"
                "                                  STDERR\n"
                "  -P --pipe                       Pass STDIN/STDOUT/STDERR directly to service\n"
@@ -322,8 +323,9 @@
                         break;
 
                 case 'E':
-                        if (strv_extend(&arg_environment, optarg) < 0)
-                                return log_oom();
+                        r = strv_env_replace_strdup_passthrough(&arg_environment, optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Cannot assign environment variable %s: %m", optarg);
 
                         break;
 
@@ -503,7 +505,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         /* If we are talking to the per-user instance PolicyKit isn't going to help */
@@ -642,11 +644,7 @@
                         return bus_log_create_error(r);
         }
 
-        r = bus_append_unit_property_assignment_many(m, t, properties);
-        if (r < 0)
-                return r;
-
-        return 0;
+        return bus_append_unit_property_assignment_many(m, t, properties);
 }
 
 static int transient_cgroup_set_properties(sd_bus_message *m) {
@@ -793,9 +791,12 @@
 
                 e = getenv("TERM");
                 if (e) {
-                        char *n;
+                        _cleanup_free_ char *n = NULL;
 
-                        n = strjoina("TERM=", e);
+                        n = strjoin("TERM=", e);
+                        if (!n)
+                                return log_oom();
+
                         r = sd_bus_message_append(m,
                                                   "(sv)",
                                                   "Environment", "as", 1, n);
@@ -1077,10 +1078,9 @@
 }
 
 static int on_properties_changed(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        RunContext *c = userdata;
+        RunContext *c = ASSERT_PTR(userdata);
 
         assert(m);
-        assert(c);
 
         return run_context_update(c, sd_bus_message_get_path(m));
 }
@@ -1107,7 +1107,7 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(bus_wait_for_jobs_freep) BusWaitForJobs *w = NULL;
         _cleanup_free_ char *service = NULL, *pty_path = NULL;
-        _cleanup_close_ int master = -1;
+        _cleanup_close_ int master = -EBADF;
         int r;
 
         assert(bus);
@@ -1159,7 +1159,7 @@
                         if (!pty_path)
                                 return log_oom();
                 } else
-                        assert_not_reached("Can't allocate tty via ssh");
+                        assert_not_reached();
         }
 
         /* Optionally, wait for the start job to complete. If we are supposed to read the service's stdin
@@ -1318,7 +1318,7 @@
                                 log_info("Finished with result: %s", strna(c.result));
 
                         if (c.exit_code == CLD_EXITED)
-                                log_info("Main processes terminated with: code=%s/status=%i",
+                                log_info("Main processes terminated with: code=%s/status=%u",
                                          sigchld_code_to_string(c.exit_code), c.exit_status);
                         else if (c.exit_code > 0)
                                 log_info("Main processes terminated with: code=%s/status=%s",
@@ -1326,34 +1326,25 @@
 
                         if (timestamp_is_set(c.inactive_enter_usec) &&
                             timestamp_is_set(c.inactive_exit_usec) &&
-                            c.inactive_enter_usec > c.inactive_exit_usec) {
-                                char ts[FORMAT_TIMESPAN_MAX];
+                            c.inactive_enter_usec > c.inactive_exit_usec)
                                 log_info("Service runtime: %s",
-                                         format_timespan(ts, sizeof ts, c.inactive_enter_usec - c.inactive_exit_usec, USEC_PER_MSEC));
-                        }
+                                         FORMAT_TIMESPAN(c.inactive_enter_usec - c.inactive_exit_usec, USEC_PER_MSEC));
 
-                        if (c.cpu_usage_nsec != NSEC_INFINITY) {
-                                char ts[FORMAT_TIMESPAN_MAX];
+                        if (c.cpu_usage_nsec != NSEC_INFINITY)
                                 log_info("CPU time consumed: %s",
-                                         format_timespan(ts, sizeof ts, DIV_ROUND_UP(c.cpu_usage_nsec, NSEC_PER_USEC), USEC_PER_MSEC));
-                        }
+                                         FORMAT_TIMESPAN(DIV_ROUND_UP(c.cpu_usage_nsec, NSEC_PER_USEC), USEC_PER_MSEC));
 
-                        if (c.ip_ingress_bytes != UINT64_MAX) {
-                                char bytes[FORMAT_BYTES_MAX];
-                                log_info("IP traffic received: %s", format_bytes(bytes, sizeof bytes, c.ip_ingress_bytes));
-                        }
-                        if (c.ip_egress_bytes != UINT64_MAX) {
-                                char bytes[FORMAT_BYTES_MAX];
-                                log_info("IP traffic sent: %s", format_bytes(bytes, sizeof bytes, c.ip_egress_bytes));
-                        }
-                        if (c.io_read_bytes != UINT64_MAX) {
-                                char bytes[FORMAT_BYTES_MAX];
-                                log_info("IO bytes read: %s", format_bytes(bytes, sizeof bytes, c.io_read_bytes));
-                        }
-                        if (c.io_write_bytes != UINT64_MAX) {
-                                char bytes[FORMAT_BYTES_MAX];
-                                log_info("IO bytes written: %s", format_bytes(bytes, sizeof bytes, c.io_write_bytes));
-                        }
+                        if (c.ip_ingress_bytes != UINT64_MAX)
+                                log_info("IP traffic received: %s", FORMAT_BYTES(c.ip_ingress_bytes));
+
+                        if (c.ip_egress_bytes != UINT64_MAX)
+                                log_info("IP traffic sent: %s", FORMAT_BYTES(c.ip_egress_bytes));
+
+                        if (c.io_read_bytes != UINT64_MAX)
+                                log_info("IO bytes read: %s", FORMAT_BYTES(c.io_read_bytes));
+
+                        if (c.io_write_bytes != UINT64_MAX)
+                                log_info("IO bytes written: %s", FORMAT_BYTES(c.io_write_bytes));
                 }
 
                 /* Try to propagate the service's return value. But if the service defines
@@ -1539,7 +1530,10 @@
                         return log_error_errno(errno, "Failed to change UID to " UID_FMT ": %m", uid);
         }
 
-        env = strv_env_merge(3, environ, user_env, arg_environment);
+        if (arg_working_directory && chdir(arg_working_directory) < 0)
+                return log_error_errno(errno, "Failed to change directory to '%s': %m", arg_working_directory);
+
+        env = strv_env_merge(environ, user_env, arg_environment);
         if (!env)
                 return log_oom();
 
@@ -1641,7 +1635,7 @@
         else if (streq(suffix, ".timer"))
                 r = transient_timer_set_properties(m);
         else
-                assert_not_reached("Invalid suffix");
+                assert_not_reached();
         if (r < 0)
                 return r;
 
@@ -1706,6 +1700,19 @@
         return 0;
 }
 
+static bool shall_make_executable_absolute(void) {
+        if (strv_isempty(arg_cmdline))
+                return false;
+        if (arg_transport != BUS_TRANSPORT_LOCAL)
+                return false;
+
+        FOREACH_STRING(f, "RootDirectory=", "RootImage=", "ExecSearchPath=", "MountImages=", "ExtensionImages=")
+                if (strv_find_startswith(arg_property, f))
+                        return false;
+
+        return true;
+}
+
 static int run(int argc, char* argv[]) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_free_ char *description = NULL;
@@ -1719,10 +1726,7 @@
         if (r <= 0)
                 return r;
 
-        if (!strv_isempty(arg_cmdline) &&
-            arg_transport == BUS_TRANSPORT_LOCAL &&
-            !strv_find_startswith(arg_property, "RootDirectory=") &&
-            !strv_find_startswith(arg_property, "RootImage=")) {
+        if (shall_make_executable_absolute()) {
                 /* Patch in an absolute path to fail early for user convenience, but only when we can do it
                  * (i.e. we will be running from the same file system). This also uses the user's $PATH,
                  * while we use a fixed search path in the manager. */
@@ -1756,7 +1760,7 @@
         else
                 r = bus_connect_transport_systemd(arg_transport, arg_host, arg_user, &bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         if (arg_scope)
                 r = start_transient_scope(bus);
diff --git a/src/shared/acl-util.c b/src/shared/acl-util.c
index 10e1857..b734ee1 100644
--- a/src/shared/acl-util.c
+++ b/src/shared/acl-util.c
@@ -10,7 +10,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "user-util.h"
-#include "util.h"
 
 int acl_find_uid(acl_t acl, uid_t uid, acl_entry_t *ret_entry) {
         acl_entry_t i;
@@ -91,6 +90,7 @@
         _cleanup_(acl_freep) acl_t basic = NULL;
 
         assert(acl_p);
+        assert(path);
 
         for (r = acl_get_entry(*acl_p, ACL_FIRST_ENTRY, &i);
              r > 0;
@@ -209,13 +209,16 @@
         return ret;
 }
 
-int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask) {
+int parse_acl(const char *text, acl_t *ret_acl_access, acl_t *ret_acl_default, bool want_mask) {
         _cleanup_free_ char **a = NULL, **d = NULL; /* strings are not freed */
         _cleanup_strv_free_ char **split = NULL;
-        char **entry;
         int r = -EINVAL;
         _cleanup_(acl_freep) acl_t a_acl = NULL, d_acl = NULL;
 
+        assert(text);
+        assert(ret_acl_access);
+        assert(ret_acl_default);
+
         split = strv_split(text, ",");
         if (!split)
                 return -ENOMEM;
@@ -268,8 +271,8 @@
                 }
         }
 
-        *acl_access = TAKE_PTR(a_acl);
-        *acl_default = TAKE_PTR(d_acl);
+        *ret_acl_access = TAKE_PTR(a_acl);
+        *ret_acl_default = TAKE_PTR(d_acl);
 
         return 0;
 }
@@ -320,11 +323,11 @@
                 return *gid_a == *gid_b;
         }
         default:
-                assert_not_reached("Unknown acl tag type");
+                assert_not_reached();
         }
 }
 
-static int find_acl_entry(acl_t acl, acl_entry_t entry, acl_entry_t *out) {
+static int find_acl_entry(acl_t acl, acl_entry_t entry, acl_entry_t *ret) {
         acl_entry_t i;
         int r;
 
@@ -336,36 +339,40 @@
                 if (r < 0)
                         return r;
                 if (r > 0) {
-                        *out = i;
-                        return 1;
+                        if (ret)
+                                *ret = i;
+                        return 0;
                 }
         }
         if (r < 0)
                 return -errno;
-        return 0;
+
+        return -ENOENT;
 }
 
-int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl) {
-        _cleanup_(acl_freep) acl_t old;
+int acls_for_file(const char *path, acl_type_t type, acl_t acl, acl_t *ret) {
+        _cleanup_(acl_freep) acl_t applied = NULL;
         acl_entry_t i;
         int r;
 
-        old = acl_get_file(path, type);
-        if (!old)
+        assert(path);
+
+        applied = acl_get_file(path, type);
+        if (!applied)
                 return -errno;
 
-        for (r = acl_get_entry(new, ACL_FIRST_ENTRY, &i);
+        for (r = acl_get_entry(acl, ACL_FIRST_ENTRY, &i);
              r > 0;
-             r = acl_get_entry(new, ACL_NEXT_ENTRY, &i)) {
+             r = acl_get_entry(acl, ACL_NEXT_ENTRY, &i)) {
 
                 acl_entry_t j;
 
-                r = find_acl_entry(old, i, &j);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        if (acl_create_entry(&old, &j) < 0)
+                r = find_acl_entry(applied, i, &j);
+                if (r == -ENOENT) {
+                        if (acl_create_entry(&applied, &j) < 0)
                                 return -errno;
+                } else if (r < 0)
+                        return r;
 
                 if (acl_copy_entry(j, i) < 0)
                         return -errno;
@@ -373,7 +380,8 @@
         if (r < 0)
                 return -errno;
 
-        *acl = TAKE_PTR(old);
+        if (ret)
+                *ret = TAKE_PTR(applied);
 
         return 0;
 }
diff --git a/src/shared/acl-util.h b/src/shared/acl-util.h
index 03595c6..d3a341f 100644
--- a/src/shared/acl-util.h
+++ b/src/shared/acl-util.h
@@ -15,8 +15,8 @@
 int calc_acl_mask_if_needed(acl_t *acl_p);
 int add_base_acls_if_needed(acl_t *acl_p, const char *path);
 int acl_search_groups(const char* path, char ***ret_groups);
-int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask);
-int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl);
+int parse_acl(const char *text, acl_t *ret_acl_access, acl_t *ret_acl_default, bool want_mask);
+int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *ret);
 int fd_add_uid_acl_permission(int fd, uid_t uid, unsigned mask);
 
 /* acl_free takes multiple argument types.
diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c
index cccea2f..22a36bd 100644
--- a/src/shared/acpi-fpdt.c
+++ b/src/shared/acpi-fpdt.c
@@ -61,17 +61,53 @@
         uint64_t exit_services_exit;
 } _packed;
 
-int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) {
+/* /dev/mem is deprecated on many systems, try using /sys/firmware/acpi/fpdt parsing instead.
+ * This code requires kernel version 5.12 on x86 based machines or 6.2 for arm64 */
+static int acpi_get_boot_usec_kernel_parsed(usec_t *ret_loader_start, usec_t *ret_loader_exit) {
+        usec_t start, end;
+        int r;
+
+        r = read_timestamp_file("/sys/firmware/acpi/fpdt/boot/exitbootservice_end_ns", &end);
+        if (r < 0)
+                return r;
+
+        if (end == 0)
+                /* Non-UEFI compatible boot. */
+                return -ENODATA;
+
+        r = read_timestamp_file("/sys/firmware/acpi/fpdt/boot/bootloader_launch_ns", &start);
+        if (r < 0)
+                return r;
+
+        if (start == 0 || end < start)
+                return -EINVAL;
+        if (end > NSEC_PER_HOUR)
+                return -EINVAL;
+
+        if (ret_loader_start)
+                *ret_loader_start = start / 1000;
+        if (ret_loader_exit)
+                *ret_loader_exit = end / 1000;
+
+        return 0;
+}
+
+int acpi_get_boot_usec(usec_t *ret_loader_start, usec_t *ret_loader_exit) {
         _cleanup_free_ char *buf = NULL;
         struct acpi_table_header *tbl;
-        size_t l = 0;
+        size_t l;
+        ssize_t ll;
         struct acpi_fpdt_header *rec;
         int r;
         uint64_t ptr = 0;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct acpi_fpdt_boot_header hbrec;
         struct acpi_fpdt_boot brec;
 
+        r = acpi_get_boot_usec_kernel_parsed(ret_loader_start, ret_loader_exit);
+        if (r != -ENOENT) /* fallback to /dev/mem hack only if kernel doesn't support the new sysfs files */
+                return r;
+
         r = read_full_virtual_file("/sys/firmware/acpi/tables/FPDT", &buf, &l);
         if (r < 0)
                 return r;
@@ -88,7 +124,7 @@
 
         /* find Firmware Basic Boot Performance Pointer Record */
         for (rec = (struct acpi_fpdt_header *)(buf + sizeof(struct acpi_table_header));
-             (char *)rec < buf + l;
+             (char *)rec + offsetof(struct acpi_fpdt_header, revision) <= buf + l;
              rec = (struct acpi_fpdt_header *)((char *)rec + rec->length)) {
                 if (rec->length <= 0)
                         break;
@@ -109,8 +145,10 @@
         if (fd < 0)
                 return -errno;
 
-        l = pread(fd, &hbrec, sizeof(struct acpi_fpdt_boot_header), ptr);
-        if (l != sizeof(struct acpi_fpdt_boot_header))
+        ll = pread(fd, &hbrec, sizeof(struct acpi_fpdt_boot_header), ptr);
+        if (ll < 0)
+                return -errno;
+        if ((size_t) ll != sizeof(struct acpi_fpdt_boot_header))
                 return -EINVAL;
 
         if (memcmp(hbrec.signature, "FBPT", 4) != 0)
@@ -119,8 +157,10 @@
         if (hbrec.length < sizeof(struct acpi_fpdt_boot_header) + sizeof(struct acpi_fpdt_boot))
                 return -EINVAL;
 
-        l = pread(fd, &brec, sizeof(struct acpi_fpdt_boot), ptr + sizeof(struct acpi_fpdt_boot_header));
-        if (l != sizeof(struct acpi_fpdt_boot))
+        ll = pread(fd, &brec, sizeof(struct acpi_fpdt_boot), ptr + sizeof(struct acpi_fpdt_boot_header));
+        if (ll < 0)
+                return -errno;
+        if ((size_t) ll != sizeof(struct acpi_fpdt_boot))
                 return -EINVAL;
 
         if (brec.length != sizeof(struct acpi_fpdt_boot))
@@ -138,10 +178,10 @@
         if (brec.exit_services_exit > NSEC_PER_HOUR)
                 return -EINVAL;
 
-        if (loader_start)
-                *loader_start = brec.startup_start / 1000;
-        if (loader_exit)
-                *loader_exit = brec.exit_services_exit / 1000;
+        if (ret_loader_start)
+                *ret_loader_start = brec.startup_start / 1000;
+        if (ret_loader_exit)
+                *ret_loader_exit = brec.exit_services_exit / 1000;
 
         return 0;
 }
diff --git a/src/shared/acpi-fpdt.h b/src/shared/acpi-fpdt.h
index 9eef92b..56f8c9e 100644
--- a/src/shared/acpi-fpdt.h
+++ b/src/shared/acpi-fpdt.h
@@ -3,4 +3,4 @@
 
 #include <time-util.h>
 
-int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit);
+int acpi_get_boot_usec(usec_t *ret_loader_start, usec_t *ret_loader_exit);
diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c
index 8b840ac..fe06f41 100644
--- a/src/shared/ask-password-api.c
+++ b/src/shared/ask-password-api.c
@@ -20,19 +20,21 @@
 
 #include "alloc-util.h"
 #include "ask-password-api.h"
+#include "constants.h"
 #include "creds-util.h"
-#include "def.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "io-util.h"
-#include "locale-util.h"
+#include "keyring-util.h"
 #include "log.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "missing_syscall.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
+#include "nulstr-util.h"
 #include "process-util.h"
 #include "random-util.h"
 #include "signal-util.h"
@@ -62,35 +64,18 @@
 }
 
 static int retrieve_key(key_serial_t serial, char ***ret) {
-        size_t nfinal, m = 100;
+        _cleanup_(erase_and_freep) void *p = NULL;
         char **l;
-        _cleanup_(erase_and_freep) char *pfinal = NULL;
+        size_t n;
+        int r;
 
         assert(ret);
 
-        for (;;) {
-                _cleanup_(erase_and_freep) char *p = NULL;
-                long n;
+        r = keyring_read(serial, &p, &n);
+        if (r < 0)
+                return r;
 
-                p = new(char, m);
-                if (!p)
-                        return -ENOMEM;
-
-                n = keyctl(KEYCTL_READ, (unsigned long) serial, (unsigned long) p, (unsigned long) m, 0);
-                if (n < 0)
-                        return -errno;
-                if ((size_t) n <= m) {
-                        nfinal = (size_t) n;
-                        pfinal = TAKE_PTR(p);
-                        break;
-                }
-
-                if (m > LONG_MAX / 2) /* overflow check */
-                        return -ENOMEM;
-                m *= 2;
-        }
-
-        l = strv_parse_nulstr(pfinal, nfinal);
+        l = strv_parse_nulstr(p, n);
         if (!l)
                 return -ENOMEM;
 
@@ -128,6 +113,10 @@
         if (r < 0)
                 return r;
 
+        /* chop off the final NUL byte. We do this because we want to use the separator NUL bytes only if we
+         * have multiple passwords. */
+        n = LESS_BY(n, (size_t) 1);
+
         serial = add_key("user", keyname, p, n, KEY_SPEC_USER_KEYRING);
         if (serial == -1)
                 return -errno;
@@ -169,15 +158,16 @@
                 return -EUNATCH;
 
         r = lookup_key(keyname, &serial);
-        if (ERRNO_IS_NOT_SUPPORTED(r) || r == -EPERM) /* when retrieving the distinction between "kernel or
-                                                       * container manager don't support or allow this" and
-                                                       * "no matching key known" doesn't matter. Note that we
-                                                       * propagate EACCESS here (even if EPERM not) since
-                                                       * that is used if the keyring is available but we lack
-                                                       * access to the key. */
-                return -ENOKEY;
-        if (r < 0)
+        if (r < 0) {
+                /* when retrieving the distinction between "kernel or container manager don't support
+                 * or allow this" and "no matching key known" doesn't matter. Note that we propagate
+                 * EACCESS here (even if EPERM not) since that is used if the keyring is available but
+                 * we lack access to the key. */
+                if (ERRNO_IS_NOT_SUPPORTED(r) || r == -EPERM)
+                        return -ENOKEY;
+
                 return r;
+        }
 
         return retrieve_key(serial, ret);
 }
@@ -223,7 +213,7 @@
                 char ***ret) {
 
         static const union sockaddr_union sa = PLYMOUTH_SOCKET;
-        _cleanup_close_ int fd = -1, notify = -1;
+        _cleanup_close_ int fd = -EBADF, notify = -EBADF;
         _cleanup_free_ char *packet = NULL;
         ssize_t k;
         int r, n;
@@ -245,8 +235,7 @@
                 if (notify < 0)
                         return -errno;
 
-                r = inotify_add_watch(notify, flag_file, IN_ATTRIB); /* for the link count */
-                if (r < 0)
+                if (inotify_add_watch(notify, flag_file, IN_ATTRIB) < 0) /* for the link count */
                         return -errno;
         }
 
@@ -254,8 +243,7 @@
         if (fd < 0)
                 return -errno;
 
-        r = connect(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un));
-        if (r < 0)
+        if (connect(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0)
                 return -errno;
 
         if (FLAGS_SET(flags, ASK_PASSWORD_ACCEPT_CACHED)) {
@@ -270,6 +258,8 @@
         if (r < 0)
                 return r;
 
+        CLEANUP_ERASE(buffer);
+
         pollfd[POLL_SOCKET].fd = fd;
         pollfd[POLL_SOCKET].events = POLLIN;
         pollfd[POLL_INOTIFY].fd = notify;
@@ -283,20 +273,16 @@
                 else
                         timeout = USEC_INFINITY;
 
-                if (flag_file && access(flag_file, F_OK) < 0) {
-                        r = -errno;
-                        goto finish;
-                }
+                if (flag_file && access(flag_file, F_OK) < 0)
+                        return -errno;
 
                 r = ppoll_usec(pollfd, notify >= 0 ? 2 : 1, timeout);
                 if (r == -EINTR)
                         continue;
                 if (r < 0)
-                        goto finish;
-                if (r == 0) {
-                        r = -ETIME;
-                        goto finish;
-                }
+                        return r;
+                if (r == 0)
+                        return -ETIME;
 
                 if (notify >= 0 && pollfd[POLL_INOTIFY].revents != 0)
                         (void) flush_fd(notify);
@@ -306,15 +292,13 @@
 
                 k = read(fd, buffer + p, sizeof(buffer) - p);
                 if (k < 0) {
-                        if (IN_SET(errno, EINTR, EAGAIN))
+                        if (ERRNO_IS_TRANSIENT(errno))
                                 continue;
 
-                        r = -errno;
-                        goto finish;
-                } else if (k == 0) {
-                        r = -EIO;
-                        goto finish;
+                        return -errno;
                 }
+                if (k == 0)
+                        return -EIO;
 
                 p += k;
 
@@ -326,14 +310,12 @@
                                  * with a normal password request */
                                 packet = mfree(packet);
 
-                                if (asprintf(&packet, "*\002%c%s%n", (int) (strlen(message) + 1), message, &n) < 0) {
-                                        r = -ENOMEM;
-                                        goto finish;
-                                }
+                                if (asprintf(&packet, "*\002%c%s%n", (int) (strlen(message) + 1), message, &n) < 0)
+                                        return -ENOMEM;
 
                                 r = loop_write(fd, packet, n+1, true);
                                 if (r < 0)
-                                        goto finish;
+                                        return r;
 
                                 flags &= ~ASK_PASSWORD_ACCEPT_CACHED;
                                 p = 0;
@@ -341,8 +323,7 @@
                         }
 
                         /* No password, because UI not shown */
-                        r = -ENOENT;
-                        goto finish;
+                        return -ENOENT;
 
                 } else if (IN_SET(buffer[0], 2, 9)) {
                         uint32_t size;
@@ -354,35 +335,25 @@
 
                         memcpy(&size, buffer+1, sizeof(size));
                         size = le32toh(size);
-                        if (size + 5 > sizeof(buffer)) {
-                                r = -EIO;
-                                goto finish;
-                        }
+                        if (size + 5 > sizeof(buffer))
+                                return -EIO;
 
                         if (p-5 < size)
                                 continue;
 
                         l = strv_parse_nulstr(buffer + 5, size);
-                        if (!l) {
-                                r = -ENOMEM;
-                                goto finish;
-                        }
+                        if (!l)
+                                return -ENOMEM;
 
                         *ret = l;
                         break;
 
-                } else {
+                } else
                         /* Unknown packet */
-                        r = -EIO;
-                        goto finish;
-                }
+                        return -EIO;
         }
 
-        r = 0;
-
-finish:
-        explicit_bzero_safe(buffer, sizeof(buffer));
-        return r;
+        return 0;
 }
 
 #define NO_ECHO "(no echo) "
@@ -405,7 +376,7 @@
         };
 
         bool reset_tty = false, dirty = false, use_color = false, press_tab_visible = false;
-        _cleanup_close_ int cttyfd = -1, notify = -1;
+        _cleanup_close_ int cttyfd = -EBADF, notify = -EBADF;
         struct termios old_termios, new_termios;
         char passphrase[LINE_MAX + 1] = {}, *x;
         _cleanup_strv_free_erase_ char **l = NULL;
@@ -444,6 +415,8 @@
                         return -errno;
         }
 
+        CLEANUP_ERASE(passphrase);
+
         /* If the caller didn't specify a TTY, then use the controlling tty, if we can. */
         if (ttyfd < 0)
                 ttyfd = cttyfd = open("/dev/tty", O_RDWR|O_NOCTTY|O_CLOEXEC);
@@ -478,10 +451,9 @@
                 new_termios.c_cc[VMIN] = 1;
                 new_termios.c_cc[VTIME] = 0;
 
-                if (tcsetattr(ttyfd, TCSADRAIN, &new_termios) < 0) {
-                        r = -errno;
+                r = RET_NERRNO(tcsetattr(ttyfd, TCSADRAIN, &new_termios));
+                if (r < 0)
                         goto finish;
-                }
 
                 reset_tty = true;
         }
@@ -505,11 +477,11 @@
                 else
                         timeout = USEC_INFINITY;
 
-                if (flag_file)
-                        if (access(flag_file, F_OK) < 0) {
-                                r = -errno;
+                if (flag_file) {
+                        r = RET_NERRNO(access(flag_file, F_OK));
+                        if (r < 0)
                                 goto finish;
-                        }
+                }
 
                 r = ppoll_usec(pollfd, notify >= 0 ? 2 : 1, timeout);
                 if (r == -EINTR)
@@ -537,7 +509,7 @@
 
                 n = read(ttyfd >= 0 ? ttyfd : STDIN_FILENO, &c, 1);
                 if (n < 0) {
-                        if (IN_SET(errno, EINTR, EAGAIN))
+                        if (ERRNO_IS_TRANSIENT(errno))
                                 continue;
 
                         r = -errno;
@@ -648,7 +620,6 @@
         }
 
         x = strndup(passphrase, p);
-        explicit_bzero_safe(passphrase, sizeof(passphrase));
         if (!x) {
                 r = -ENOMEM;
                 goto finish;
@@ -682,7 +653,7 @@
         _cleanup_free_ char *path = NULL;
         union sockaddr_union sa;
         socklen_t sa_len;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(ret);
@@ -699,7 +670,7 @@
                 return r;
         sa_len = r;
 
-        RUN_WITH_UMASK(0177)
+        WITH_UMASK(0177)
                 if (bind(fd, &sa.sa, sa_len) < 0)
                         return -errno;
 
@@ -727,7 +698,7 @@
                 _FD_MAX
         };
 
-        _cleanup_close_ int socket_fd = -1, signal_fd = -1, notify = -1, fd = -1;
+        _cleanup_close_ int socket_fd = -EBADF, signal_fd = -EBADF, notify = -EBADF, fd = -EBADF;
         char temp[] = "/run/systemd/ask-password/tmp.XXXXXX";
         char final[sizeof(temp)] = "";
         _cleanup_free_ char *socket_name = NULL;
@@ -761,10 +732,10 @@
                         r = -errno;
                         goto finish;
                 }
-                if (inotify_add_watch(notify, "/run/systemd/ask-password", IN_ATTRIB /* for mtime */) < 0) {
-                        r = -errno;
+
+                r = RET_NERRNO(inotify_add_watch(notify, "/run/systemd/ask-password", IN_ATTRIB /* for mtime */));
+                if (r < 0)
                         goto finish;
-                }
         }
 
         fd = mkostemp_safe(temp);
@@ -827,10 +798,9 @@
         final[sizeof(final)-10] = 's';
         final[sizeof(final)-9] = 'k';
 
-        if (rename(temp, final) < 0) {
-                r = -errno;
+        r = RET_NERRNO(rename(temp, final));
+        if (r < 0)
                 goto finish;
-        }
 
         zero(pollfd);
         pollfd[FD_SOCKET].fd = socket_fd;
@@ -897,20 +867,23 @@
                 };
 
                 n = recvmsg_safe(socket_fd, &msghdr, 0);
-                if (IN_SET(n, -EAGAIN, -EINTR))
-                        continue;
-                if (n == -EXFULL) {
-                        log_debug("Got message with truncated control data, ignoring.");
-                        continue;
-                }
                 if (n < 0) {
+                        if (ERRNO_IS_TRANSIENT(n))
+                                continue;
+                        if (n == -EXFULL) {
+                                log_debug("Got message with truncated control data, ignoring.");
+                                continue;
+                        }
+
                         r = (int) n;
                         goto finish;
                 }
 
+                CLEANUP_ERASE(passphrase);
+
                 cmsg_close_all(&msghdr);
 
-                if (n <= 0) {
+                if (n == 0) {
                         log_debug("Message too short");
                         continue;
                 }
@@ -932,7 +905,6 @@
                                 l = strv_new("");
                         else
                                 l = strv_parse_nulstr(passphrase+1, n-1);
-                        explicit_bzero_safe(passphrase, n);
                         if (!l) {
                                 r = -ENOMEM;
                                 goto finish;
diff --git a/src/shared/barrier.c b/src/shared/barrier.c
index 87061f5..d76a61a 100644
--- a/src/shared/barrier.c
+++ b/src/shared/barrier.c
@@ -10,6 +10,7 @@
 #include <unistd.h>
 
 #include "barrier.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "io-util.h"
 #include "macro.h"
@@ -91,7 +92,6 @@
  */
 int barrier_create(Barrier *b) {
         _unused_ _cleanup_(barrier_destroyp) Barrier *staging = b;
-        int r;
 
         assert(b);
 
@@ -103,8 +103,7 @@
         if (b->them < 0)
                 return -errno;
 
-        r = pipe2(b->pipe, O_CLOEXEC | O_NONBLOCK);
-        if (r < 0)
+        if (pipe2(b->pipe, O_CLOEXEC | O_NONBLOCK) < 0)
                 return -errno;
 
         staging = NULL;
@@ -178,7 +177,7 @@
         assert(b->me >= 0);
         do {
                 len = write(b->me, &buf, sizeof(buf));
-        } while (len < 0 && IN_SET(errno, EAGAIN, EINTR));
+        } while (len < 0 && ERRNO_IS_TRANSIENT(errno));
 
         if (len != sizeof(buf))
                 goto error;
@@ -230,7 +229,7 @@
 
                         /* events on @them signal new data for us */
                         len = read(b->them, &buf, sizeof(buf));
-                        if (len < 0 && IN_SET(errno, EAGAIN, EINTR))
+                        if (len < 0 && ERRNO_IS_TRANSIENT(errno))
                                 continue;
 
                         if (len != sizeof(buf))
diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c
index 016eb7b..be6dd16 100644
--- a/src/shared/base-filesystem.c
+++ b/src/shared/base-filesystem.c
@@ -9,6 +9,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "architecture.h"
 #include "base-filesystem.h"
 #include "fd-util.h"
 #include "log.h"
@@ -20,17 +21,17 @@
 #include "user-util.h"
 
 typedef struct BaseFilesystem {
-        const char *dir;
+        const char *dir;      /* directory or symlink to create */
         mode_t mode;
-        const char *target;
-        const char *exists;
+        const char *target;   /* if non-NULL create as symlink to this target */
+        const char *exists;   /* conditionalize this entry on existence of this file */
         bool ignore_failure;
 } BaseFilesystem;
 
 static const BaseFilesystem table[] = {
         { "bin",      0, "usr/bin\0",                  NULL },
         { "lib",      0, "usr/lib\0",                  NULL },
-        { "root",  0755, NULL,                         NULL, true },
+        { "root",  0750, NULL,                         NULL, true },
         { "sbin",     0, "usr/sbin\0",                 NULL },
         { "usr",   0755, NULL,                         NULL },
         { "var",   0755, NULL,                         NULL },
@@ -38,14 +39,91 @@
         { "proc",  0755, NULL,                         NULL, true },
         { "sys",   0755, NULL,                         NULL, true },
         { "dev",   0755, NULL,                         NULL, true },
-#if defined(__i386__) || defined(__x86_64__)
-        { "lib64",    0, "usr/lib/x86_64-linux-gnu\0"
+
+        /* Various architecture ABIs define the path to the dynamic loader via the /lib64/ subdirectory of
+         * the root directory. When booting from an otherwise empty root file system (where only /usr/ has
+         * been mounted into) it is thus necessary to create a symlink pointing to the right subdirectory of
+         * /usr/ first — otherwise we couldn't invoke any dynamic binary. Let's detect this case here, and
+         * create the symlink as needed should it be missing. We prefer doing this consistently with Debian's
+         * multiarch logic, but support Fedora-style multilib too. */
+#if defined(__aarch64__)
+        /* aarch64 ELF ABI actually says dynamic loader is in /lib/, but Fedora puts it in /lib64/ anyway and
+         * just symlinks /lib/ld-linux-aarch64.so.1 to ../lib64/ld-linux-aarch64.so.1. For this to work
+         * correctly, /lib64/ must be symlinked to /usr/lib64/. */
+        { "lib64",    0, "usr/lib/"LIB_ARCH_TUPLE"\0"
+                         "usr/lib64\0",                "ld-linux-aarch64.so.1" },
+#  define KNOW_LIB64_DIRS 1
+#elif defined(__alpha__)
+#elif defined(__arc__) || defined(__tilegx__)
+#elif defined(__arm__)
+        /* No /lib64 on arm. The linker is /lib/ld-linux-armhf.so.3. */
+#  define KNOW_LIB64_DIRS 1
+#elif defined(__i386__) || defined(__x86_64__)
+        { "lib64",    0, "usr/lib/"LIB_ARCH_TUPLE"\0"
                          "usr/lib64\0",                "ld-linux-x86-64.so.2" },
+#  define KNOW_LIB64_DIRS 1
+#elif defined(__ia64__)
+#elif defined(__loongarch64)
+#  define KNOW_LIB64_DIRS 1
+#  if defined(__loongarch_double_float)
+        { "lib64",    0, "usr/lib/"LIB_ARCH_TUPLE"\0"
+                         "usr/lib64\0",                "ld-linux-loongarch-lp64d.so.1" },
+#  elif defined(__loongarch_single_float)
+        { "lib64",    0, "usr/lib/"LIB_ARCH_TUPLE"\0"
+                         "usr/lib64\0",                "ld-linux-loongarch-lp64f.so.1" },
+#  elif defined(__loongarch_soft_float)
+        { "lib64",    0, "usr/lib/"LIB_ARCH_TUPLE"\0"
+                         "usr/lib64\0",                "ld-linux-loongarch-lp64s.so.1" },
+#  else
+#    error "Unknown LoongArch ABI"
+#  endif
+#elif defined(__m68k__)
+        /* No link needed. */
+#  define KNOW_LIB64_DIRS 1
+#elif defined(_MIPS_SIM)
+#  if _MIPS_SIM == _MIPS_SIM_ABI32
+#  elif _MIPS_SIM == _MIPS_SIM_NABI32
+#  elif _MIPS_SIM == _MIPS_SIM_ABI64
+#  else
+#    error "Unknown MIPS ABI"
+#  endif
+#elif defined(__powerpc__)
+#  if defined(__PPC64__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+        { "lib64",    0, "usr/lib/"LIB_ARCH_TUPLE"\0"
+                         "usr/lib64\0",                "ld64.so.2" },
+#    define KNOW_LIB64_DIRS 1
+#  elif defined(__powerpc64__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+        /* powerpc64-linux-gnu */
+#  else
+        /* powerpc-linux-gnu */
+#  endif
+#elif defined(__riscv)
+#  if __riscv_xlen == 32
+#  elif __riscv_xlen == 64
+        /* Same situation as for aarch64 */
+        { "lib64",    0, "usr/lib/"LIB_ARCH_TUPLE"\0"
+                         "usr/lib64\0",                "ld-linux-riscv64-lp64d.so.1" },
+#    define KNOW_LIB64_DIRS 1
+#  else
+#    error "Unknown RISC-V ABI"
+#  endif
+#elif defined(__s390__)
+        /* s390-linux-gnu */
+#elif defined(__s390x__)
+        { "lib64",    0, "usr/lib/"LIB_ARCH_TUPLE"\0"
+                         "usr/lib64\0",                "ld-lsb-s390x.so.3" },
+#    define KNOW_LIB64_DIRS 1
+#elif defined(__sparc__)
 #endif
+        /* gcc doesn't allow pragma to be used within constructs, hence log about this separately below */
 };
 
+#ifndef KNOW_LIB64_DIRS
+#  pragma message "Please add an entry above specifying whether your architecture uses /lib64/, /lib32/, or no such links."
+#endif
+
 int base_filesystem_create(const char *root, uid_t uid, gid_t gid) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         fd = open(root, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW);
@@ -57,7 +135,7 @@
                         continue;
 
                 if (table[i].target) {
-                        const char *target = NULL, *s;
+                        const char *target = NULL;
 
                         /* check if one of the targets exists */
                         NULSTR_FOREACH(s, table[i].target) {
@@ -100,7 +178,7 @@
                         continue;
                 }
 
-                RUN_WITH_UMASK(0000)
+                WITH_UMASK(0000)
                         r = mkdirat(fd, table[i].dir, table[i].mode);
                 if (r < 0) {
                         log_full_errno(IN_SET(errno, EEXIST, EROFS) || table[i].ignore_failure ? LOG_DEBUG : LOG_ERR, errno,
@@ -112,7 +190,7 @@
                         return -errno;
                 }
 
-                if (uid != UID_INVALID || gid != UID_INVALID)
+                if (uid_is_valid(uid) || gid_is_valid(gid))
                         if (fchownat(fd, table[i].dir, uid, gid, AT_SYMLINK_NOFOLLOW) < 0)
                                 return log_error_errno(errno, "Failed to chown directory at %s/%s: %m", root, table[i].dir);
         }
diff --git a/src/shared/binfmt-util.c b/src/shared/binfmt-util.c
index 724d7f2..a261754 100644
--- a/src/shared/binfmt-util.c
+++ b/src/shared/binfmt-util.c
@@ -5,10 +5,30 @@
 #include <sys/vfs.h>
 
 #include "binfmt-util.h"
+#include "errno-util.h"
+#include "fd-util.h"
 #include "fileio.h"
+#include "fs-util.h"
 #include "missing_magic.h"
 #include "stat-util.h"
 
+int binfmt_mounted(void) {
+        _cleanup_close_ int fd = -EBADF;
+        int r;
+
+        fd = RET_NERRNO(open("/proc/sys/fs/binfmt_misc", O_CLOEXEC | O_DIRECTORY | O_PATH));
+        if (fd == -ENOENT)
+                return false;
+        if (fd < 0)
+                return fd;
+
+        r = fd_is_fs_type(fd, BINFMTFS_MAGIC);
+        if (r <= 0)
+                return r;
+
+        return access_fd(fd, W_OK) >= 0;
+}
+
 int disable_binfmt(void) {
         int r;
 
@@ -18,13 +38,13 @@
          * We are a bit careful here, since binfmt_misc might still be an autofs which we don't want to
          * trigger. */
 
-        r = path_is_fs_type("/proc/sys/fs/binfmt_misc", BINFMTFS_MAGIC);
-        if (r == 0 || r == -ENOENT) {
-                log_debug("binfmt_misc is not mounted, not detaching entries.");
-                return 0;
-        }
+        r = binfmt_mounted();
         if (r < 0)
                 return log_warning_errno(r, "Failed to determine whether binfmt_misc is mounted: %m");
+        if (r == 0) {
+                log_debug("binfmt_misc is not mounted in read-write mode, not detaching entries.");
+                return 0;
+        }
 
         r = write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
         if (r < 0)
diff --git a/src/shared/binfmt-util.h b/src/shared/binfmt-util.h
index 2f008d1..13f4548 100644
--- a/src/shared/binfmt-util.h
+++ b/src/shared/binfmt-util.h
@@ -1,4 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+int binfmt_mounted(void);
 int disable_binfmt(void);
diff --git a/src/shared/blkid-util.h b/src/shared/blkid-util.h
index aa44499..abc4b61 100644
--- a/src/shared/blkid-util.h
+++ b/src/shared/blkid-util.h
@@ -4,7 +4,44 @@
 #if HAVE_BLKID
 #  include <blkid.h>
 
+#  include "sd-id128.h"
+
 #  include "macro.h"
+#  include "string-util.h"
 
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(blkid_probe, blkid_free_probe, NULL);
+
+static inline int blkid_partition_get_uuid_id128(blkid_partition p, sd_id128_t *ret) {
+        const char *s;
+
+        assert(p);
+
+        s = blkid_partition_get_uuid(p);
+        if (isempty(s))
+                return -ENXIO;
+
+        return sd_id128_from_string(s, ret);
+}
+
+static inline int blkid_partition_get_type_id128(blkid_partition p, sd_id128_t *ret) {
+        const char *s;
+
+        assert(p);
+
+        s = blkid_partition_get_type_string(p);
+        if (isempty(s))
+                return -ENXIO;
+
+        return sd_id128_from_string(s, ret);
+}
+
+/* Define symbolic names for blkid_do_safeprobe() return values, since blkid only uses literal numbers. We
+ * prefix these symbolic definitions with underscores, to not invade libblkid's namespace needlessly. */
+enum {
+        _BLKID_SAFEPROBE_FOUND     =  0,
+        _BLKID_SAFEPROBE_NOT_FOUND =  1,
+        _BLKID_SAFEPROBE_AMBIGUOUS = -2,
+        _BLKID_SAFEPROBE_ERROR     = -1,
+};
+
 #endif
diff --git a/src/shared/blockdev-util.c b/src/shared/blockdev-util.c
index 4d545df..ee13414 100644
--- a/src/shared/blockdev-util.c
+++ b/src/shared/blockdev-util.c
@@ -1,17 +1,214 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <linux/blkpg.h>
 #include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/mount.h>
 #include <unistd.h>
 
+#include "sd-device.h"
+
 #include "alloc-util.h"
 #include "blockdev-util.h"
 #include "btrfs-util.h"
+#include "device-util.h"
+#include "devnum-util.h"
 #include "dirent-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "missing_magic.h"
 #include "parse-util.h"
-#include "stat-util.h"
+
+static int fd_get_devnum(int fd, BlockDeviceLookupFlag flags, dev_t *ret) {
+        struct stat st;
+        dev_t devnum;
+        int r;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        if (S_ISBLK(st.st_mode))
+                devnum = st.st_rdev;
+        else if (!FLAGS_SET(flags, BLOCK_DEVICE_LOOKUP_BACKING))
+                return -ENOTBLK;
+        else if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode))
+                return -ENOTBLK;
+        else if (major(st.st_dev) != 0)
+                devnum = st.st_dev;
+        else {
+                /* If major(st.st_dev) is zero, this might mean we are backed by btrfs, which needs special
+                 * handing, to get the backing device node. */
+
+                r = btrfs_get_block_device_fd(fd, &devnum);
+                if (r == -ENOTTY) /* not btrfs */
+                        return -ENOTBLK;
+                if (r < 0)
+                        return r;
+        }
+
+        *ret = devnum;
+        return 0;
+}
+
+int block_device_is_whole_disk(sd_device *dev) {
+        const char *s;
+        int r;
+
+        assert(dev);
+
+        r = sd_device_get_subsystem(dev, &s);
+        if (r < 0)
+                return r;
+
+        if (!streq(s, "block"))
+                return -ENOTBLK;
+
+        r = sd_device_get_devtype(dev, &s);
+        if (r < 0)
+                return r;
+
+        return streq(s, "disk");
+}
+
+int block_device_get_whole_disk(sd_device *dev, sd_device **ret) {
+        int r;
+
+        assert(dev);
+        assert(ret);
+
+        /* Do not unref returned sd_device object. */
+
+        r = block_device_is_whole_disk(dev);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                r = sd_device_get_parent(dev, &dev);
+                if (r == -ENOENT) /* Already removed? Let's return a recognizable error. */
+                        return -ENODEV;
+                if (r < 0)
+                        return r;
+
+                r = block_device_is_whole_disk(dev);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return -ENXIO;
+        }
+
+        *ret = dev;
+        return 0;
+}
+
+static int block_device_get_originating(sd_device *dev, sd_device **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *first_found = NULL;
+        const char *suffix;
+        sd_device *child;
+        dev_t devnum = 0;  /* avoid false maybe-uninitialized warning */
+
+        /* For the specified block device tries to chase it through the layers, in case LUKS-style DM
+         * stacking is used, trying to find the next underlying layer. */
+
+        assert(dev);
+        assert(ret);
+
+        FOREACH_DEVICE_CHILD_WITH_SUFFIX(dev, child, suffix) {
+                sd_device *child_whole_disk;
+                dev_t n;
+
+                if (!path_startswith(suffix, "slaves"))
+                        continue;
+
+                if (block_device_get_whole_disk(child, &child_whole_disk) < 0)
+                        continue;
+
+                if (sd_device_get_devnum(child_whole_disk, &n) < 0)
+                        continue;
+
+                if (!first_found) {
+                        first_found = sd_device_ref(child);
+                        devnum = n;
+                        continue;
+                }
+
+                /* We found a device backed by multiple other devices. We don't really support automatic
+                 * discovery on such setups, with the exception of dm-verity partitions. In this case there
+                 * are two backing devices: the data partition and the hash partition. We are fine with such
+                 * setups, however, only if both partitions are on the same physical device. Hence, let's
+                 * verify this by iterating over every node in the 'slaves/' directory and comparing them with
+                 * the first that gets returned by readdir(), to ensure they all point to the same device. */
+                if (n != devnum)
+                        return -ENOTUNIQ;
+        }
+
+        if (!first_found)
+                return -ENOENT;
+
+        *ret = TAKE_PTR(first_found);
+        return 1; /* found */
+}
+
+int block_device_new_from_fd(int fd, BlockDeviceLookupFlag flags, sd_device **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        dev_t devnum;
+        int r;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        r = fd_get_devnum(fd, flags, &devnum);
+        if (r < 0)
+                return r;
+
+        r = sd_device_new_from_devnum(&dev, 'b', devnum);
+        if (r < 0)
+                return r;
+
+        if (FLAGS_SET(flags, BLOCK_DEVICE_LOOKUP_ORIGINATING)) {
+                _cleanup_(sd_device_unrefp) sd_device *dev_origin = NULL;
+                sd_device *dev_whole_disk;
+
+                r = block_device_get_whole_disk(dev, &dev_whole_disk);
+                if (r < 0)
+                        return r;
+
+                r = block_device_get_originating(dev_whole_disk, &dev_origin);
+                if (r < 0 && r != -ENOENT)
+                        return r;
+                if (r > 0)
+                        device_unref_and_replace(dev, dev_origin);
+        }
+
+        if (FLAGS_SET(flags, BLOCK_DEVICE_LOOKUP_WHOLE_DISK)) {
+                sd_device *dev_whole_disk;
+
+                r = block_device_get_whole_disk(dev, &dev_whole_disk);
+                if (r < 0)
+                        return r;
+
+                *ret = sd_device_ref(dev_whole_disk);
+                return 0;
+        }
+
+        *ret = sd_device_ref(dev);
+        return 0;
+}
+
+int block_device_new_from_path(const char *path, BlockDeviceLookupFlag flags, sd_device **ret) {
+        _cleanup_close_ int fd = -EBADF;
+
+        assert(path);
+        assert(ret);
+
+        fd = open(path, O_CLOEXEC|O_PATH);
+        if (fd < 0)
+                return -errno;
+
+        return block_device_new_from_fd(fd, flags, ret);
+}
 
 int block_get_whole_disk(dev_t d, dev_t *ret) {
         char p[SYS_BLOCK_PATH_MAX("/partition")];
@@ -44,7 +241,7 @@
         if (r < 0)
                 return r;
 
-        r = parse_dev(s, &devt);
+        r = parse_devnum(s, &devt);
         if (r < 0)
                 return r;
 
@@ -57,21 +254,16 @@
         return 1;
 }
 
-int get_block_device(const char *path, dev_t *ret) {
-        _cleanup_close_ int fd = -1;
+int get_block_device_fd(int fd, dev_t *ret) {
         struct stat st;
         int r;
 
-        assert(path);
+        assert(fd >= 0);
         assert(ret);
 
         /* Gets the block device directly backing a file system. If the block device is encrypted, returns
          * the device mapper block device. */
 
-        fd = open(path, O_RDONLY|O_NOFOLLOW|O_CLOEXEC);
-        if (fd < 0)
-                return -errno;
-
         if (fstat(fd, &st))
                 return -errno;
 
@@ -90,113 +282,71 @@
         return 0;
 }
 
-int block_get_originating(dev_t dt, dev_t *ret) {
-        _cleanup_closedir_ DIR *d = NULL;
-        _cleanup_free_ char *t = NULL;
-        char p[SYS_BLOCK_PATH_MAX("/slaves")];
-        _cleanup_free_ char *first_found = NULL;
-        struct dirent *de;
-        const char *q;
-        dev_t devt;
-        int r;
+int get_block_device(const char *path, dev_t *ret) {
+        _cleanup_close_ int fd = -EBADF;
 
-        /* For the specified block device tries to chase it through the layers, in case LUKS-style DM stacking is used,
-         * trying to find the next underlying layer.  */
+        assert(path);
+        assert(ret);
 
-        xsprintf_sys_block_path(p, "/slaves", dt);
-        d = opendir(p);
-        if (!d)
+        fd = open(path, O_RDONLY|O_NOFOLLOW|O_CLOEXEC);
+        if (fd < 0)
                 return -errno;
 
-        FOREACH_DIRENT_ALL(de, d, return -errno) {
+        return get_block_device_fd(fd, ret);
+}
 
-                if (dot_or_dot_dot(de->d_name))
-                        continue;
+int block_get_originating(dev_t dt, dev_t *ret) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL, *origin = NULL;
+        int r;
 
-                if (!IN_SET(de->d_type, DT_LNK, DT_UNKNOWN))
-                        continue;
+        assert(ret);
 
-                if (first_found) {
-                        _cleanup_free_ char *u = NULL, *v = NULL, *a = NULL, *b = NULL;
-
-                        /* We found a device backed by multiple other devices. We don't really support
-                         * automatic discovery on such setups, with the exception of dm-verity partitions. In
-                         * this case there are two backing devices: the data partition and the hash
-                         * partition. We are fine with such setups, however, only if both partitions are on
-                         * the same physical device.  Hence, let's verify this by iterating over every node
-                         * in the 'slaves/' directory and comparing them with the first that gets returned by
-                         * readdir(), to ensure they all point to the same device. */
-
-                        u = path_join(p, de->d_name, "../dev");
-                        if (!u)
-                                return -ENOMEM;
-
-                        v = path_join(p, first_found, "../dev");
-                        if (!v)
-                                return -ENOMEM;
-
-                        r = read_one_line_file(u, &a);
-                        if (r < 0)
-                                return log_debug_errno(r, "Failed to read %s: %m", u);
-
-                        r = read_one_line_file(v, &b);
-                        if (r < 0)
-                                return log_debug_errno(r, "Failed to read %s: %m", v);
-
-                        /* Check if the parent device is the same. If not, then the two backing devices are on
-                         * different physical devices, and we don't support that. */
-                        if (!streq(a, b))
-                                return -ENOTUNIQ;
-                } else {
-                        first_found = strdup(de->d_name);
-                        if (!first_found)
-                                return -ENOMEM;
-                }
-        }
-
-        if (!first_found)
-                return -ENOENT;
-
-        q = strjoina(p, "/", first_found, "/dev");
-
-        r = read_one_line_file(q, &t);
+        r = sd_device_new_from_devnum(&dev, 'b', dt);
         if (r < 0)
                 return r;
 
-        r = parse_dev(t, &devt);
+        r = block_device_get_originating(dev, &origin);
         if (r < 0)
-                return -EINVAL;
+                return r;
 
-        if (major(devt) == 0)
-                return -ENOENT;
-
-        *ret = devt;
-        return 1;
+        return sd_device_get_devnum(origin, ret);
 }
 
-int get_block_device_harder(const char *path, dev_t *ret) {
+int get_block_device_harder_fd(int fd, dev_t *ret) {
         int r;
 
-        assert(path);
+        assert(fd >= 0);
         assert(ret);
 
         /* Gets the backing block device for a file system, and handles LUKS encrypted file systems, looking for its
          * immediate parent, if there is one. */
 
-        r = get_block_device(path, ret);
+        r = get_block_device_fd(fd, ret);
         if (r <= 0)
                 return r;
 
         r = block_get_originating(*ret, ret);
         if (r < 0)
-                log_debug_errno(r, "Failed to chase block device '%s', ignoring: %m", path);
+                log_debug_errno(r, "Failed to chase block device, ignoring: %m");
 
         return 1;
 }
 
+int get_block_device_harder(const char *path, dev_t *ret) {
+        _cleanup_close_ int fd = -EBADF;
+
+        assert(path);
+        assert(ret);
+
+        fd = open(path, O_RDONLY|O_NOFOLLOW|O_CLOEXEC);
+        if (fd < 0)
+                return -errno;
+
+        return get_block_device_harder_fd(fd, ret);
+}
+
 int lock_whole_block_device(dev_t devt, int operation) {
-        _cleanup_free_ char *whole_node = NULL;
-        _cleanup_close_ int lock_fd = -1;
+        _cleanup_close_ int lock_fd = -EBADF;
         dev_t whole_devt;
         int r;
 
@@ -206,14 +356,10 @@
         if (r < 0)
                 return r;
 
-        r = device_path_make_major_minor(S_IFBLK, whole_devt, &whole_node);
+        lock_fd = r = device_open_from_devnum(S_IFBLK, whole_devt, O_RDONLY|O_CLOEXEC|O_NONBLOCK, NULL);
         if (r < 0)
                 return r;
 
-        lock_fd = open(whole_node, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
-        if (lock_fd < 0)
-                return -errno;
-
         if (flock(lock_fd, operation) < 0)
                 return -errno;
 
@@ -326,6 +472,22 @@
         return found_encrypted;
 }
 
+int fd_is_encrypted(int fd) {
+        char p[SYS_BLOCK_PATH_MAX(NULL)];
+        dev_t devt;
+        int r;
+
+        r = get_block_device_fd(fd, &devt);
+        if (r < 0)
+                return r;
+        if (r == 0) /* doesn't have a block device */
+                return false;
+
+        xsprintf_sys_block_path(p, NULL, devt);
+
+        return blockdev_is_encrypted(p, 10 /* safety net: maximum recursion depth */);
+}
+
 int path_is_encrypted(const char *path) {
         char p[SYS_BLOCK_PATH_MAX(NULL)];
         dev_t devt;
@@ -341,3 +503,277 @@
 
         return blockdev_is_encrypted(p, 10 /* safety net: maximum recursion depth */);
 }
+
+int fd_get_whole_disk(int fd, bool backing, dev_t *ret) {
+        dev_t devt;
+        int r;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        r = fd_get_devnum(fd, backing ? BLOCK_DEVICE_LOOKUP_BACKING : 0, &devt);
+        if (r < 0)
+                return r;
+
+        return block_get_whole_disk(devt, ret);
+}
+
+int path_get_whole_disk(const char *path, bool backing, dev_t *ret) {
+        _cleanup_close_ int fd = -EBADF;
+
+        fd = open(path, O_CLOEXEC|O_PATH);
+        if (fd < 0)
+                return -errno;
+
+        return fd_get_whole_disk(fd, backing, ret);
+}
+
+int block_device_add_partition(
+                int fd,
+                const char *name,
+                int nr,
+                uint64_t start,
+                uint64_t size) {
+
+        assert(fd >= 0);
+        assert(name);
+        assert(nr > 0);
+
+        struct blkpg_partition bp = {
+                .pno = nr,
+                .start = start,
+                .length = size,
+        };
+
+        struct blkpg_ioctl_arg ba = {
+                .op = BLKPG_ADD_PARTITION,
+                .data = &bp,
+                .datalen = sizeof(bp),
+        };
+
+        if (strlen(name) >= sizeof(bp.devname))
+                return -EINVAL;
+
+        strcpy(bp.devname, name);
+
+        return RET_NERRNO(ioctl(fd, BLKPG, &ba));
+}
+
+int block_device_remove_partition(
+                int fd,
+                const char *name,
+                int nr) {
+
+        assert(fd >= 0);
+        assert(name);
+        assert(nr > 0);
+
+        struct blkpg_partition bp = {
+                .pno = nr,
+        };
+
+        struct blkpg_ioctl_arg ba = {
+                .op = BLKPG_DEL_PARTITION,
+                .data = &bp,
+                .datalen = sizeof(bp),
+        };
+
+        if (strlen(name) >= sizeof(bp.devname))
+                return -EINVAL;
+
+        strcpy(bp.devname, name);
+
+        return RET_NERRNO(ioctl(fd, BLKPG, &ba));
+}
+
+int block_device_resize_partition(
+                int fd,
+                int nr,
+                uint64_t start,
+                uint64_t size) {
+
+        assert(fd >= 0);
+        assert(nr > 0);
+
+        struct blkpg_partition bp = {
+                .pno = nr,
+                .start = start,
+                .length = size,
+        };
+
+        struct blkpg_ioctl_arg ba = {
+                .op = BLKPG_RESIZE_PARTITION,
+                .data = &bp,
+                .datalen = sizeof(bp),
+        };
+
+        return RET_NERRNO(ioctl(fd, BLKPG, &ba));
+}
+
+int partition_enumerator_new(sd_device *dev, sd_device_enumerator **ret) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        const char *s;
+        int r;
+
+        assert(dev);
+        assert(ret);
+
+        /* Refuse invocation on partition block device, insist on "whole" device */
+        r = block_device_is_whole_disk(dev);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return -ENXIO; /* return a recognizable error */
+
+        r = sd_device_enumerator_new(&e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_allow_uninitialized(e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_parent(e, dev);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_sysname(dev, &s);
+        if (r < 0)
+                return r;
+
+        /* Also add sysname check for safety. Hopefully, this also improves performance. */
+        s = strjoina(s, "*");
+        r = sd_device_enumerator_add_match_sysname(e, s);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_subsystem(e, "block", /* match = */ true);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_property(e, "DEVTYPE", "partition");
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(e);
+        return 0;
+}
+
+int block_device_remove_all_partitions(sd_device *dev, int fd) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        _cleanup_(sd_device_unrefp) sd_device *dev_unref = NULL;
+        _cleanup_close_ int fd_close = -EBADF;
+        bool has_partitions = false;
+        sd_device *part;
+        int r, k = 0;
+
+        assert(dev || fd >= 0);
+
+        if (!dev) {
+                r = block_device_new_from_fd(fd, 0, &dev_unref);
+                if (r < 0)
+                        return r;
+
+                dev = dev_unref;
+        }
+
+        r = partition_enumerator_new(dev, &e);
+        if (r < 0)
+                return r;
+
+        if (fd < 0) {
+                fd_close = sd_device_open(dev, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|O_RDONLY);
+                if (fd_close < 0)
+                        return fd_close;
+
+                fd = fd_close;
+        }
+
+        FOREACH_DEVICE(e, part) {
+                const char *v, *devname;
+                int nr;
+
+                has_partitions = true;
+
+                r = sd_device_get_devname(part, &devname);
+                if (r < 0)
+                        return r;
+
+                r = sd_device_get_property_value(part, "PARTN", &v);
+                if (r < 0)
+                        return r;
+
+                r = safe_atoi(v, &nr);
+                if (r < 0)
+                        return r;
+
+                r = btrfs_forget_device(devname);
+                if (r < 0 && r != -ENOENT)
+                        log_debug_errno(r, "Failed to forget btrfs device %s, ignoring: %m", devname);
+
+                r = block_device_remove_partition(fd, devname, nr);
+                if (r == -ENODEV) {
+                        log_debug("Kernel removed partition %s before us, ignoring", devname);
+                        continue;
+                }
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to remove partition %s: %m", devname);
+                        k = k < 0 ? k : r;
+                        continue;
+                }
+
+                log_debug("Removed partition %s", devname);
+        }
+
+        return k < 0 ? k : has_partitions;
+}
+
+int block_device_has_partitions(sd_device *dev) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        int r;
+
+        assert(dev);
+
+        /* Checks if the specified device currently has partitions. */
+
+        r = partition_enumerator_new(dev, &e);
+        if (r < 0)
+                return r;
+
+        return !!sd_device_enumerator_get_device_first(e);
+}
+
+int blockdev_reread_partition_table(sd_device *dev) {
+        _cleanup_close_ int fd = -EBADF;
+
+        assert(dev);
+
+        /* Try to re-read the partition table. This only succeeds if none of the devices is busy. */
+
+        fd = sd_device_open(dev, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+        if (fd < 0)
+                return fd;
+
+        if (flock(fd, LOCK_EX|LOCK_NB) < 0)
+                return -errno;
+
+        if (ioctl(fd, BLKRRPART, 0) < 0)
+                return -errno;
+
+        return 0;
+}
+
+int blockdev_get_sector_size(int fd, uint32_t *ret) {
+        int ssz = 0;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        if (ioctl(fd, BLKSSZGET, &ssz) < 0)
+                return -errno;
+        if (ssz <= 0) /* make sure the field is initialized */
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Block device reported invalid sector size %i.", ssz);
+
+        *ret = ssz;
+        return 0;
+}
diff --git a/src/shared/blockdev-util.h b/src/shared/blockdev-util.h
index 56c50ce..5b27d23 100644
--- a/src/shared/blockdev-util.h
+++ b/src/shared/blockdev-util.h
@@ -3,6 +3,8 @@
 
 #include <sys/types.h>
 
+#include "sd-device.h"
+
 #include "macro.h"
 #include "stdio-util.h"
 #include "string-util.h"
@@ -12,15 +14,45 @@
 #define xsprintf_sys_block_path(buf, suffix, devno)                     \
         xsprintf(buf, "/sys/dev/block/%u:%u%s", major(devno), minor(devno), strempty(suffix))
 
+typedef enum BlockDeviceLookupFlag {
+        BLOCK_DEVICE_LOOKUP_WHOLE_DISK  = 1 << 0, /* whole block device, e.g. sda, nvme0n1, or loop0. */
+        BLOCK_DEVICE_LOOKUP_BACKING     = 1 << 1, /* fd may be regular file or directory on file system, in
+                                                   * which case backing block device is determined. */
+        BLOCK_DEVICE_LOOKUP_ORIGINATING = 1 << 2, /* Try to find the underlying layer device for stacked
+                                                   * block device, e.g. LUKS-style DM. */
+} BlockDeviceLookupFlag;
+
+int block_device_new_from_fd(int fd, BlockDeviceLookupFlag flag, sd_device **ret);
+int block_device_new_from_path(const char *path, BlockDeviceLookupFlag flag, sd_device **ret);
+
+int block_device_is_whole_disk(sd_device *dev);
+int block_device_get_whole_disk(sd_device *dev, sd_device **ret);
+
 int block_get_whole_disk(dev_t d, dev_t *ret);
 int block_get_originating(dev_t d, dev_t *ret);
 
+int get_block_device_fd(int fd, dev_t *ret);
 int get_block_device(const char *path, dev_t *dev);
 
+int get_block_device_harder_fd(int fd, dev_t *dev);
 int get_block_device_harder(const char *path, dev_t *dev);
 
 int lock_whole_block_device(dev_t devt, int operation);
 
 int blockdev_partscan_enabled(int fd);
 
+int fd_is_encrypted(int fd);
 int path_is_encrypted(const char *path);
+
+int fd_get_whole_disk(int fd, bool backing, dev_t *ret);
+int path_get_whole_disk(const char *path, bool backing, dev_t *ret);
+
+int block_device_add_partition(int fd, const char *name, int nr, uint64_t start, uint64_t size);
+int block_device_remove_partition(int fd, const char *name, int nr);
+int block_device_resize_partition(int fd, int nr, uint64_t start, uint64_t size);
+int partition_enumerator_new(sd_device *dev, sd_device_enumerator **ret);
+int block_device_remove_all_partitions(sd_device *dev, int fd);
+int block_device_has_partitions(sd_device *dev);
+int blockdev_reread_partition_table(sd_device *dev);
+
+int blockdev_get_sector_size(int fd, uint32_t *ret);
diff --git a/src/shared/boot-timestamps.c b/src/shared/boot-timestamps.c
index e00b37a..8786e89 100644
--- a/src/shared/boot-timestamps.c
+++ b/src/shared/boot-timestamps.c
@@ -5,13 +5,11 @@
 #include "efi-loader.h"
 #include "macro.h"
 #include "time-util.h"
-#include "virt.h"
 
 int boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_timestamp *loader) {
         usec_t x = 0, y = 0, a;
         int r;
         dual_timestamp _n;
-        bool use_firmware = true;
 
         assert(firmware);
         assert(loader);
@@ -26,10 +24,6 @@
                 r = efi_loader_get_boot_usec(&x, &y);
                 if (r < 0)
                         return r;
-
-                /* If we are running in a VM, the init timestamp would
-                 * be equivalent to the host uptime. */
-                use_firmware = detect_vm() <= 0;
         }
 
         /* Let's convert this to timestamps where the firmware
@@ -39,14 +33,12 @@
          * the monotonic timestamps here as negative of the actual
          * value. */
 
-        if (use_firmware) {
-                firmware->monotonic = y;
-                a = n->monotonic + firmware->monotonic;
-                firmware->realtime = n->realtime > a ? n->realtime - a : 0;
-        } else
-                firmware->monotonic = firmware->realtime = 0;
-
+        firmware->monotonic = y;
         loader->monotonic = y - x;
+
+        a = n->monotonic + firmware->monotonic;
+        firmware->realtime = n->realtime > a ? n->realtime - a : 0;
+
         a = n->monotonic + loader->monotonic;
         loader->realtime = n->realtime > a ? n->realtime - a : 0;
 
diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c
index e538e2b..49fb34b 100644
--- a/src/shared/bootspec.c
+++ b/src/shared/bootspec.c
@@ -1,36 +1,38 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <stdio.h>
-#include <linux/magic.h>
 #include <unistd.h>
 
-#include "sd-device.h"
-#include "sd-id128.h"
-
-#include "alloc-util.h"
-#include "blkid-util.h"
+#include "bootspec-fundamental.h"
 #include "bootspec.h"
+#include "chase-symlinks.h"
 #include "conf-files.h"
-#include "def.h"
-#include "device-nodes.h"
+#include "devnum-util.h"
 #include "dirent-util.h"
-#include "efivars.h"
 #include "efi-loader.h"
 #include "env-file.h"
-#include "env-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
-#include "parse-util.h"
+#include "find-esp.h"
 #include "path-util.h"
 #include "pe-header.h"
+#include "pretty-print.h"
+#include "recurse-dir.h"
 #include "sort-util.h"
 #include "stat-util.h"
 #include "string-table.h"
-#include "string-util.h"
 #include "strv.h"
+#include "terminal-util.h"
 #include "unaligned.h"
-#include "util.h"
-#include "virt.h"
+
+static const char* const boot_entry_type_table[_BOOT_ENTRY_TYPE_MAX] = {
+        [BOOT_ENTRY_CONF]        = "Boot Loader Specification Type #1 (.conf)",
+        [BOOT_ENTRY_UNIFIED]     = "Boot Loader Specification Type #2 (.efi)",
+        [BOOT_ENTRY_LOADER]      = "Reported by Boot Loader",
+        [BOOT_ENTRY_LOADER_AUTO] = "Automatic",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(boot_entry_type, BootEntryType);
 
 static void boot_entry_free(BootEntry *entry) {
         assert(entry);
@@ -41,6 +43,7 @@
         free(entry->root);
         free(entry->title);
         free(entry->show_title);
+        free(entry->sort_key);
         free(entry->version);
         free(entry->machine_id);
         free(entry->architecture);
@@ -49,40 +52,261 @@
         free(entry->efi);
         strv_free(entry->initrd);
         free(entry->device_tree);
+        strv_free(entry->device_tree_overlay);
 }
 
-static int boot_entry_load(
-                const char *root,
-                const char *path,
-                BootEntry *entry) {
+static int mangle_path(
+                const char *fname,
+                unsigned line,
+                const char *field,
+                const char *p,
+                char **ret) {
 
-        _cleanup_(boot_entry_free) BootEntry tmp = {
-                .type = BOOT_ENTRY_CONF,
-        };
+        _cleanup_free_ char *c = NULL;
 
-        _cleanup_fclose_ FILE *f = NULL;
-        unsigned line = 1;
-        char *b, *c;
+        assert(field);
+        assert(p);
+        assert(ret);
+
+        /* Spec leaves open if prefixed with "/" or not, let's normalize that */
+        if (path_is_absolute(p))
+                c = strdup(p);
+        else
+                c = strjoin("/", p);
+        if (!c)
+                return -ENOMEM;
+
+        /* We only reference files, never directories */
+        if (endswith(c, "/")) {
+                log_syntax(NULL, LOG_WARNING, fname, line, 0, "Path in field '%s' has trailing slash, ignoring: %s", field, c);
+                *ret = NULL;
+                return 0;
+        }
+
+        /* Remove duplicate "/" */
+        path_simplify(c);
+
+        /* No ".." or "." or so */
+        if (!path_is_normalized(c)) {
+                log_syntax(NULL, LOG_WARNING, fname, line, 0, "Path in field '%s' is not normalized, ignoring: %s", field, c);
+                *ret = NULL;
+                return 0;
+        }
+
+        *ret = TAKE_PTR(c);
+        return 1;
+}
+
+static int parse_path_one(
+                const char *fname,
+                unsigned line,
+                const char *field,
+                char **s,
+                const char *p) {
+
+        _cleanup_free_ char *c = NULL;
         int r;
 
-        assert(root);
-        assert(path);
-        assert(entry);
+        assert(field);
+        assert(s);
+        assert(p);
 
-        c = endswith_no_case(path, ".conf");
-        if (!c)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid loader entry file suffix: %s", path);
+        r = mangle_path(fname, line, field, p, &c);
+        if (r <= 0)
+                return r;
 
-        b = basename(path);
-        tmp.id = strdup(b);
-        tmp.id_old = strndup(b, c - b);
-        if (!tmp.id || !tmp.id_old)
+        return free_and_replace(*s, c);
+}
+
+static int parse_path_strv(
+                const char *fname,
+                unsigned line,
+                const char *field,
+                char ***s,
+                const char *p) {
+
+        char *c;
+        int r;
+
+        assert(field);
+        assert(s);
+        assert(p);
+
+        r = mangle_path(fname, line, field, p, &c);
+        if (r <= 0)
+                return r;
+
+        return strv_consume(s, c);
+}
+
+static int parse_path_many(
+                const char *fname,
+                unsigned line,
+                const char *field,
+                char ***s,
+                const char *p) {
+
+        _cleanup_strv_free_ char **l = NULL, **f = NULL;
+        int r;
+
+        l = strv_split(p, NULL);
+        if (!l)
+                return -ENOMEM;
+
+        STRV_FOREACH(i, l) {
+                char *c;
+
+                r = mangle_path(fname, line, field, *i, &c);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        continue;
+
+                r = strv_consume(&f, c);
+                if (r < 0)
+                        return r;
+        }
+
+        return strv_extend_strv(s, f, /* filter_duplicates= */ false);
+}
+
+static int parse_tries(const char *fname, const char **p, unsigned *ret) {
+        _cleanup_free_ char *d = NULL;
+        unsigned tries;
+        size_t n;
+        int r;
+
+        assert(fname);
+        assert(p);
+        assert(*p);
+        assert(ret);
+
+        n = strspn(*p, DIGITS);
+        if (n == 0) {
+                *ret = UINT_MAX;
+                return 0;
+        }
+
+        d = strndup(*p, n);
+        if (!d)
                 return log_oom();
 
-        if (!efi_loader_entry_name_valid(tmp.id))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid loader entry name: %s", tmp.id);
+        r = safe_atou_full(d, 10, &tries);
+        if (r >= 0 && tries > INT_MAX) /* sd-boot allows INT_MAX, let's use the same limit */
+                r = -ERANGE;
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse tries counter of filename '%s': %m", fname);
 
-        tmp.path = strdup(path);
+        *p = *p + n;
+        *ret = tries;
+        return 1;
+}
+
+int boot_filename_extract_tries(
+                const char *fname,
+                char **ret_stripped,
+                unsigned *ret_tries_left,
+                unsigned *ret_tries_done) {
+
+        unsigned tries_left = UINT_MAX, tries_done = UINT_MAX;
+        _cleanup_free_ char *stripped = NULL;
+        const char *p, *suffix, *m;
+        int r;
+
+        assert(fname);
+        assert(ret_stripped);
+        assert(ret_tries_left);
+        assert(ret_tries_done);
+
+        /* Be liberal with suffix, only insist on a dot. After all we want to cover any capitalization here
+         * (vfat is case insensitive after all), and at least .efi and .conf as suffix. */
+        suffix = strrchr(fname, '.');
+        if (!suffix)
+                goto nothing;
+
+        p = m = memrchr(fname, '+', suffix - fname);
+        if (!p)
+                goto nothing;
+        p++;
+
+        r = parse_tries(fname, &p, &tries_left);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                goto nothing;
+
+        if (*p == '-') {
+                p++;
+
+                r = parse_tries(fname, &p, &tries_done);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        goto nothing;
+        }
+
+        if (p != suffix)
+                goto nothing;
+
+        stripped = strndup(fname, m - fname);
+        if (!stripped)
+                return log_oom();
+
+        if (!strextend(&stripped, suffix))
+                return log_oom();
+
+        *ret_stripped = TAKE_PTR(stripped);
+        *ret_tries_left = tries_left;
+        *ret_tries_done = tries_done;
+
+        return 0;
+
+nothing:
+        stripped = strdup(fname);
+        if (!stripped)
+                return log_oom();
+
+        *ret_stripped = TAKE_PTR(stripped);
+        *ret_tries_left = *ret_tries_done = UINT_MAX;
+        return 0;
+}
+
+static int boot_entry_load_type1(
+                FILE *f,
+                const char *root,
+                const char *dir,
+                const char *fname,
+                BootEntry *entry) {
+
+        _cleanup_(boot_entry_free) BootEntry tmp = BOOT_ENTRY_INIT(BOOT_ENTRY_CONF);
+        unsigned line = 1;
+        char *c;
+        int r;
+
+        assert(f);
+        assert(root);
+        assert(dir);
+        assert(fname);
+        assert(entry);
+
+        /* Loads a Type #1 boot menu entry from the specified FILE* object */
+
+        r = boot_filename_extract_tries(fname, &tmp.id, &tmp.tries_left, &tmp.tries_done);
+        if (r < 0)
+                return r;
+
+        if (!efi_loader_entry_name_valid(tmp.id))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid loader entry name: %s", fname);
+
+        c = endswith_no_case(tmp.id, ".conf");
+        if (!c)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid loader entry file suffix: %s", fname);
+
+        tmp.id_old = strndup(tmp.id, c - tmp.id); /* Without .conf suffix */
+        if (!tmp.id_old)
+                return log_oom();
+
+        tmp.path = path_join(dir, fname);
         if (!tmp.path)
                 return log_oom();
 
@@ -90,10 +314,6 @@
         if (!tmp.root)
                 return log_oom();
 
-        f = fopen(path, "re");
-        if (!f)
-                return log_error_errno(errno, "Failed to open \"%s\": %m", path);
-
         for (;;) {
                 _cleanup_free_ char *buf = NULL, *field = NULL;
                 const char *p;
@@ -102,28 +322,38 @@
                 if (r == 0)
                         break;
                 if (r == -ENOBUFS)
-                        return log_error_errno(r, "%s:%u: Line too long", path, line);
+                        return log_syntax(NULL, LOG_ERR, tmp.path, line, r, "Line too long.");
                 if (r < 0)
-                        return log_error_errno(r, "%s:%u: Error while reading: %m", path, line);
+                        return log_syntax(NULL, LOG_ERR, tmp.path, line, r, "Error while reading: %m");
 
                 line++;
 
-                if (IN_SET(*strstrip(buf), '#', '\0'))
+                p = strstrip(buf);
+                if (IN_SET(p[0], '#', '\0'))
                         continue;
 
-                p = buf;
-                r = extract_first_word(&p, &field, " \t", 0);
+                r = extract_first_word(&p, &field, NULL, 0);
                 if (r < 0) {
-                        log_error_errno(r, "Failed to parse config file %s line %u: %m", path, line);
+                        log_syntax(NULL, LOG_WARNING, tmp.path, line, r, "Failed to parse, ignoring line: %m");
                         continue;
                 }
                 if (r == 0) {
-                        log_warning("%s:%u: Bad syntax", path, line);
+                        log_syntax(NULL, LOG_WARNING, tmp.path, line, 0, "Bad syntax, ignoring line.");
+                        continue;
+                }
+
+                if (isempty(p)) {
+                        /* Some fields can reasonably have an empty value. In other cases warn. */
+                        if (!STR_IN_SET(field, "options", "devicetree-overlay"))
+                                log_syntax(NULL, LOG_WARNING, tmp.path, line, 0, "Field '%s' without value, ignoring line.", field);
+
                         continue;
                 }
 
                 if (streq(field, "title"))
                         r = free_and_strdup(&tmp.title, p);
+                else if (streq(field, "sort-key"))
+                        r = free_and_strdup(&tmp.sort_key, p);
                 else if (streq(field, "version"))
                         r = free_and_strdup(&tmp.version, p);
                 else if (streq(field, "machine-id"))
@@ -133,19 +363,21 @@
                 else if (streq(field, "options"))
                         r = strv_extend(&tmp.options, p);
                 else if (streq(field, "linux"))
-                        r = free_and_strdup(&tmp.kernel, p);
+                        r = parse_path_one(tmp.path, line, field, &tmp.kernel, p);
                 else if (streq(field, "efi"))
-                        r = free_and_strdup(&tmp.efi, p);
+                        r = parse_path_one(tmp.path, line, field, &tmp.efi, p);
                 else if (streq(field, "initrd"))
-                        r = strv_extend(&tmp.initrd, p);
+                        r = parse_path_strv(tmp.path, line, field, &tmp.initrd, p);
                 else if (streq(field, "devicetree"))
-                        r = free_and_strdup(&tmp.device_tree, p);
+                        r = parse_path_one(tmp.path, line, field, &tmp.device_tree, p);
+                else if (streq(field, "devicetree-overlay"))
+                        r = parse_path_many(tmp.path, line, field, &tmp.device_tree_overlay, p);
                 else {
-                        log_notice("%s:%u: Unknown line \"%s\", ignoring.", path, line, field);
+                        log_syntax(NULL, LOG_WARNING, tmp.path, line, 0, "Unknown line '%s', ignoring.", field);
                         continue;
                 }
                 if (r < 0)
-                        return log_error_errno(r, "%s:%u: Error while reading: %m", path, line);
+                        return log_syntax(NULL, LOG_ERR, tmp.path, line, r, "Error while parsing: %m");
         }
 
         *entry = tmp;
@@ -153,10 +385,33 @@
         return 0;
 }
 
-void boot_config_free(BootConfig *config) {
-        size_t i;
+int boot_config_load_type1(
+                BootConfig *config,
+                FILE *f,
+                const char *root,
+                const char *dir,
+                const char *fname) {
+        int r;
 
         assert(config);
+        assert(f);
+        assert(root);
+        assert(dir);
+        assert(fname);
+
+        if (!GREEDY_REALLOC0(config->entries, config->n_entries + 1))
+                return log_oom();
+
+        r = boot_entry_load_type1(f, root, dir, fname, config->entries + config->n_entries);
+        if (r < 0)
+                return r;
+
+        config->n_entries++;
+        return 0;
+}
+
+void boot_config_free(BootConfig *config) {
+        assert(config);
 
         free(config->default_pattern);
         free(config->timeout);
@@ -164,57 +419,56 @@
         free(config->auto_entries);
         free(config->auto_firmware);
         free(config->console_mode);
-        free(config->random_seed_mode);
+        free(config->beep);
 
         free(config->entry_oneshot);
         free(config->entry_default);
+        free(config->entry_selected);
 
-        for (i = 0; i < config->n_entries; i++)
+        for (size_t i = 0; i < config->n_entries; i++)
                 boot_entry_free(config->entries + i);
         free(config->entries);
+
+        set_free(config->inodes_seen);
 }
 
-static int boot_loader_read_conf(const char *path, BootConfig *config) {
-        _cleanup_fclose_ FILE *f = NULL;
+int boot_loader_read_conf(BootConfig *config, FILE *file, const char *path) {
         unsigned line = 1;
         int r;
 
-        assert(path);
         assert(config);
-
-        f = fopen(path, "re");
-        if (!f) {
-                if (errno == ENOENT)
-                        return 0;
-
-                return log_error_errno(errno, "Failed to open \"%s\": %m", path);
-        }
+        assert(file);
+        assert(path);
 
         for (;;) {
                 _cleanup_free_ char *buf = NULL, *field = NULL;
                 const char *p;
 
-                r = read_line(f, LONG_LINE_MAX, &buf);
+                r = read_line(file, LONG_LINE_MAX, &buf);
                 if (r == 0)
                         break;
                 if (r == -ENOBUFS)
-                        return log_error_errno(r, "%s:%u: Line too long", path, line);
+                        return log_syntax(NULL, LOG_ERR, path, line, r, "Line too long.");
                 if (r < 0)
-                        return log_error_errno(r, "%s:%u: Error while reading: %m", path, line);
+                        return log_syntax(NULL, LOG_ERR, path, line, r, "Error while reading: %m");
 
                 line++;
 
-                if (IN_SET(*strstrip(buf), '#', '\0'))
+                p = strstrip(buf);
+                if (IN_SET(p[0], '#', '\0'))
                         continue;
 
-                p = buf;
-                r = extract_first_word(&p, &field, " \t", 0);
+                r = extract_first_word(&p, &field, NULL, 0);
                 if (r < 0) {
-                        log_error_errno(r, "Failed to parse config file %s line %u: %m", path, line);
+                        log_syntax(NULL, LOG_WARNING, path, line, r, "Failed to parse, ignoring line: %m");
                         continue;
                 }
                 if (r == 0) {
-                        log_warning("%s:%u: Bad syntax", path, line);
+                        log_syntax(NULL, LOG_WARNING, path, line, 0, "Bad syntax, ignoring line.");
+                        continue;
+                }
+                if (isempty(p)) {
+                        log_syntax(NULL, LOG_WARNING, path, line, 0, "Field '%s' without value, ignoring line.", field);
                         continue;
                 }
 
@@ -231,50 +485,148 @@
                 else if (streq(field, "console-mode"))
                         r = free_and_strdup(&config->console_mode, p);
                 else if (streq(field, "random-seed-mode"))
-                        r = free_and_strdup(&config->random_seed_mode, p);
+                        log_syntax(NULL, LOG_WARNING, path, line, 0, "'random-seed-mode' has been deprecated, ignoring.");
+                else if (streq(field, "beep"))
+                        r = free_and_strdup(&config->beep, p);
                 else {
-                        log_notice("%s:%u: Unknown line \"%s\", ignoring.", path, line, field);
+                        log_syntax(NULL, LOG_WARNING, path, line, 0, "Unknown line '%s', ignoring.", field);
                         continue;
                 }
                 if (r < 0)
-                        return log_error_errno(r, "%s:%u: Error while reading: %m", path, line);
+                        return log_syntax(NULL, LOG_ERR, path, line, r, "Error while parsing: %m");
         }
 
         return 1;
 }
 
-static int boot_entry_compare(const BootEntry *a, const BootEntry *b) {
-        return strverscmp_improved(a->id, b->id);
-}
-
-static int boot_entries_find(
-                const char *root,
-                const char *dir,
-                BootEntry **entries,
-                size_t *n_entries) {
-
-        _cleanup_strv_free_ char **files = NULL;
-        char **f;
+static int boot_loader_read_conf_path(BootConfig *config, const char *root, const char *path) {
+        _cleanup_free_ char *full = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
         int r;
 
+        assert(config);
+        assert(path);
+
+        r = chase_symlinks_and_fopen_unlocked(path, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, "re", &full, &f);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to open '%s/%s': %m", root, path);
+
+        return boot_loader_read_conf(config, f, full);
+}
+
+static int boot_entry_compare(const BootEntry *a, const BootEntry *b) {
+        int r;
+
+        assert(a);
+        assert(b);
+
+        r = CMP(!a->sort_key, !b->sort_key);
+        if (r != 0)
+                return r;
+
+        if (a->sort_key && b->sort_key) {
+                r = strcmp(a->sort_key, b->sort_key);
+                if (r != 0)
+                        return r;
+
+                r = strcmp_ptr(a->machine_id, b->machine_id);
+                if (r != 0)
+                        return r;
+
+                r = -strverscmp_improved(a->version, b->version);
+                if (r != 0)
+                        return r;
+        }
+
+        return -strverscmp_improved(a->id, b->id);
+}
+
+static int config_check_inode_relevant_and_unseen(BootConfig *config, int fd, const char *fname) {
+        _cleanup_free_ char *d = NULL;
+        struct stat st;
+
+        assert(config);
+        assert(fd >= 0);
+        assert(fname);
+
+        /* So, here's the thing: because of the mess around /efi/ vs. /boot/ vs. /boot/efi/ it might be that
+         * people have these dirs, or subdirs of them symlinked or bind mounted, and we might end up
+         * iterating though some dirs multiple times. Let's thus rather be safe than sorry, and track the
+         * inodes we already processed: let's ignore inodes we have seen already. This should be robust
+         * against any form of symlinking or bind mounting, and effectively suppress any such duplicates. */
+
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to stat('%s'): %m", fname);
+        if (!S_ISREG(st.st_mode)) {
+                log_debug("File '%s' is not a reguar file, ignoring.", fname);
+                return false;
+        }
+
+        if (set_contains(config->inodes_seen, &st)) {
+                log_debug("Inode '%s' already seen before, ignoring.", fname);
+                return false;
+        }
+        d = memdup(&st, sizeof(st));
+        if (!d)
+                return log_oom();
+        if (set_ensure_put(&config->inodes_seen, &inode_hash_ops, d) < 0)
+                return log_oom();
+
+        TAKE_PTR(d);
+        return true;
+}
+
+static int boot_entries_find_type1(
+                BootConfig *config,
+                const char *root,
+                const char *dir) {
+
+        _cleanup_free_ DirectoryEntries *dentries = NULL;
+        _cleanup_free_ char *full = NULL;
+        _cleanup_close_ int dir_fd = -EBADF;
+        int r;
+
+        assert(config);
         assert(root);
         assert(dir);
-        assert(entries);
-        assert(n_entries);
 
-        r = conf_files_list(&files, ".conf", NULL, 0, dir);
+        dir_fd = chase_symlinks_and_open(dir, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, O_DIRECTORY|O_CLOEXEC, &full);
+        if (dir_fd == -ENOENT)
+                return 0;
+        if (dir_fd < 0)
+                return log_error_errno(dir_fd, "Failed to open '%s/%s': %m", root, dir);
+
+        r = readdir_all(dir_fd, RECURSE_DIR_IGNORE_DOT, &dentries);
         if (r < 0)
-                return log_error_errno(r, "Failed to list files in \"%s\": %m", dir);
+                return log_error_errno(r, "Failed to read directory '%s': %m", full);
 
-        STRV_FOREACH(f, files) {
-                if (!GREEDY_REALLOC0(*entries, *n_entries + 1))
-                        return log_oom();
+        for (size_t i = 0; i < dentries->n_entries; i++) {
+                const struct dirent *de = dentries->entries[i];
+                _cleanup_fclose_ FILE *f = NULL;
 
-                r = boot_entry_load(root, *f, *entries + *n_entries);
-                if (r < 0)
+                if (!dirent_is_file(de))
                         continue;
 
-                (*n_entries) ++;
+                if (!endswith_no_case(de->d_name, ".conf"))
+                        continue;
+
+                r = xfopenat(dir_fd, de->d_name, "re", O_NOFOLLOW|O_NOCTTY, &f);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to open %s/%s, ignoring: %m", full, de->d_name);
+                        continue;
+                }
+
+                r = config_check_inode_relevant_and_unseen(config, fileno(f), de->d_name);
+                if (r < 0)
+                        return r;
+                if (r == 0) /* inode already seen or otherwise not relevant */
+                        continue;
+
+                r = boot_config_load_type1(config, f, root, full, de->d_name);
+                if (r == -ENOMEM) /* ignore all other errors */
+                        return r;
         }
 
         return 0;
@@ -287,13 +639,11 @@
                 const char *cmdline,
                 BootEntry *ret) {
 
-        _cleanup_free_ char *os_pretty_name = NULL, *os_id = NULL, *version_id = NULL, *build_id = NULL;
-        _cleanup_(boot_entry_free) BootEntry tmp = {
-                .type = BOOT_ENTRY_UNIFIED,
-        };
+        _cleanup_free_ char *fname = NULL, *os_pretty_name = NULL, *os_image_id = NULL, *os_name = NULL, *os_id = NULL,
+                *os_image_version = NULL, *os_version = NULL, *os_version_id = NULL, *os_build_id = NULL;
+        _cleanup_(boot_entry_free) BootEntry tmp = BOOT_ENTRY_INIT(BOOT_ENTRY_UNIFIED);
+        const char *k, *good_name, *good_version, *good_sort_key;
         _cleanup_fclose_ FILE *f = NULL;
-        const char *k;
-        char *b;
         int r;
 
         assert(root);
@@ -310,24 +660,47 @@
 
         r = parse_env_file(f, "os-release",
                            "PRETTY_NAME", &os_pretty_name,
+                           "IMAGE_ID", &os_image_id,
+                           "NAME", &os_name,
                            "ID", &os_id,
-                           "VERSION_ID", &version_id,
-                           "BUILD_ID", &build_id);
+                           "IMAGE_VERSION", &os_image_version,
+                           "VERSION", &os_version,
+                           "VERSION_ID", &os_version_id,
+                           "BUILD_ID", &os_build_id);
         if (r < 0)
                 return log_error_errno(r, "Failed to parse os-release data from unified kernel image %s: %m", path);
 
-        if (!os_pretty_name || !os_id || !(version_id || build_id))
+        if (!bootspec_pick_name_version_sort_key(
+                            os_pretty_name,
+                            os_image_id,
+                            os_name,
+                            os_id,
+                            os_image_version,
+                            os_version,
+                            os_version_id,
+                            os_build_id,
+                            &good_name,
+                            &good_version,
+                            &good_sort_key))
                 return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Missing fields in os-release data from unified kernel image %s, refusing.", path);
 
-        b = basename(path);
-        tmp.id = strdup(b);
-        tmp.id_old = strjoin(os_id, "-", version_id ?: build_id);
-        if (!tmp.id || !tmp.id_old)
-                return log_oom();
+        r = path_extract_filename(path, &fname);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract file name from '%s': %m", path);
+
+        r = boot_filename_extract_tries(fname, &tmp.id, &tmp.tries_left, &tmp.tries_done);
+        if (r < 0)
+                return r;
 
         if (!efi_loader_entry_name_valid(tmp.id))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid loader entry name: %s", tmp.id);
 
+        if (os_id && os_version_id) {
+                tmp.id_old = strjoin(os_id, "-", os_version_id);
+                if (!tmp.id_old)
+                        return log_oom();
+        }
+
         tmp.path = strdup(path);
         if (!tmp.path)
                 return log_oom();
@@ -336,7 +709,7 @@
         if (!tmp.root)
                 return log_oom();
 
-        tmp.kernel = strdup(skip_leading_chars(k, "/"));
+        tmp.kernel = path_make_absolute(k, "/");
         if (!tmp.kernel)
                 return log_oom();
 
@@ -346,7 +719,21 @@
 
         delete_trailing_chars(tmp.options[0], WHITESPACE);
 
-        tmp.title = TAKE_PTR(os_pretty_name);
+        tmp.title = strdup(good_name);
+        if (!tmp.title)
+                return log_oom();
+
+        if (good_sort_key) {
+                tmp.sort_key = strdup(good_sort_key);
+                if (!tmp.sort_key)
+                        return log_oom();
+        }
+
+        if (good_version) {
+                tmp.version = strdup(good_version);
+                if (!tmp.version)
+                        return log_oom();
+        }
 
         *ret = tmp;
         tmp = (BootEntry) {};
@@ -359,39 +746,39 @@
 
 static int find_sections(
                 int fd,
+                const char *path,
                 char **ret_osrelease,
                 char **ret_cmdline) {
 
         _cleanup_free_ struct PeSectionHeader *sections = NULL;
         _cleanup_free_ char *osrelease = NULL, *cmdline = NULL;
-        size_t i, n_sections;
-        struct DosFileHeader dos;
-        struct PeHeader pe;
-        uint64_t start;
         ssize_t n;
 
+        struct DosFileHeader dos;
         n = pread(fd, &dos, sizeof(dos), 0);
         if (n < 0)
-                return log_error_errno(errno, "Failed read DOS header: %m");
+                return log_warning_errno(errno, "%s: Failed to read DOS header, ignoring: %m", path);
         if (n != sizeof(dos))
-                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short read while reading DOS header, refusing.");
+                return log_warning_errno(SYNTHETIC_ERRNO(EIO), "%s: Short read while reading DOS header, ignoring.", path);
 
         if (dos.Magic[0] != 'M' || dos.Magic[1] != 'Z')
-                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "DOS executable magic missing, refusing.");
+                return log_warning_errno(SYNTHETIC_ERRNO(EBADMSG), "%s: DOS executable magic missing, ignoring.", path);
 
-        start = unaligned_read_le32(&dos.ExeHeader);
+        uint64_t start = unaligned_read_le32(&dos.ExeHeader);
+
+        struct PeHeader pe;
         n = pread(fd, &pe, sizeof(pe), start);
         if (n < 0)
-                return log_error_errno(errno, "Failed to read PE header: %m");
+                return log_warning_errno(errno, "%s: Failed to read PE header, ignoring: %m", path);
         if (n != sizeof(pe))
-                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short read while reading PE header, refusing.");
+                return log_warning_errno(SYNTHETIC_ERRNO(EIO), "%s: Short read while reading PE header, ignoring.", path);
 
         if (pe.Magic[0] != 'P' || pe.Magic[1] != 'E' || pe.Magic[2] != 0 || pe.Magic[3] != 0)
-                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "PE executable magic missing, refusing.");
+                return log_warning_errno(SYNTHETIC_ERRNO(EBADMSG), "%s: PE executable magic missing, ignoring.", path);
 
-        n_sections = unaligned_read_le16(&pe.FileHeader.NumberOfSections);
+        size_t n_sections = unaligned_read_le16(&pe.FileHeader.NumberOfSections);
         if (n_sections > 96)
-                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "PE header has too many sections, refusing.");
+                return log_warning_errno(SYNTHETIC_ERRNO(EBADMSG), "%s: PE header has too many sections, ignoring.", path);
 
         sections = new(struct PeSectionHeader, n_sections);
         if (!sections)
@@ -401,11 +788,11 @@
                   n_sections * sizeof(struct PeSectionHeader),
                   start + sizeof(pe) + unaligned_read_le16(&pe.FileHeader.SizeOfOptionalHeader));
         if (n < 0)
-                return log_error_errno(errno, "Failed to read section data: %m");
+                return log_warning_errno(errno, "%s: Failed to read section data, ignoring: %m", path);
         if ((size_t) n != n_sections * sizeof(struct PeSectionHeader))
-                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short read while reading sections, refusing.");
+                return log_warning_errno(SYNTHETIC_ERRNO(EIO), "%s: Short read while reading sections, ignoring.", path);
 
-        for (i = 0; i < n_sections; i++) {
+        for (size_t i = 0; i < n_sections; i++) {
                 _cleanup_free_ char *k = NULL;
                 uint32_t offset, size;
                 char **b;
@@ -418,13 +805,13 @@
                         continue;
 
                 if (*b)
-                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Duplicate section %s, refusing.", sections[i].Name);
+                        return log_warning_errno(SYNTHETIC_ERRNO(EBADMSG), "%s: Duplicate section %s, ignoring.", path, sections[i].Name);
 
                 offset = unaligned_read_le32(&sections[i].PointerToRawData);
                 size = unaligned_read_le32(&sections[i].VirtualSize);
 
                 if (size > PE_SECTION_SIZE_MAX)
-                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Section %s too large, refusing.", sections[i].Name);
+                        return log_warning_errno(SYNTHETIC_ERRNO(EBADMSG), "%s: Section %s too large, ignoring.", path, sections[i].Name);
 
                 k = new(char, size+1);
                 if (!k)
@@ -432,20 +819,20 @@
 
                 n = pread(fd, k, size, offset);
                 if (n < 0)
-                        return log_error_errno(errno, "Failed to read section payload: %m");
+                        return log_warning_errno(errno, "%s: Failed to read section payload, ignoring: %m", path);
                 if ((size_t) n != size)
-                        return log_error_errno(SYNTHETIC_ERRNO(EIO), "Short read while reading section payload, refusing:");
+                        return log_warning_errno(SYNTHETIC_ERRNO(EIO), "%s: Short read while reading section payload, ignoring:", path);
 
                 /* Allow one trailing NUL byte, but nothing more. */
                 if (size > 0 && memchr(k, 0, size - 1))
-                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Section contains embedded NUL byte: %m");
+                        return log_warning_errno(SYNTHETIC_ERRNO(EBADMSG), "%s: Section contains embedded NUL byte, ignoring.", path);
 
                 k[size] = 0;
                 *b = TAKE_PTR(k);
         }
 
         if (!osrelease)
-                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Image lacks .osrel section, refusing.");
+                return log_warning_errno(SYNTHETIC_ERRNO(EBADMSG), "%s: Image lacks .osrel section, ignoring.", path);
 
         if (ret_osrelease)
                 *ret_osrelease = TAKE_PTR(osrelease);
@@ -456,31 +843,26 @@
 }
 
 static int boot_entries_find_unified(
+                BootConfig *config,
                 const char *root,
-                const char *dir,
-                BootEntry **entries,
-                size_t *n_entries) {
+                const char *dir) {
 
         _cleanup_(closedirp) DIR *d = NULL;
-        struct dirent *de;
+        _cleanup_free_ char *full = NULL;
         int r;
 
-        assert(root);
+        assert(config);
         assert(dir);
-        assert(entries);
-        assert(n_entries);
 
-        d = opendir(dir);
-        if (!d) {
-                if (errno == ENOENT)
-                        return 0;
+        r = chase_symlinks_and_opendir(dir, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, &full, &d);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to open '%s/%s': %m", root, dir);
 
-                return log_error_errno(errno, "Failed to open %s: %m", dir);
-        }
-
-        FOREACH_DIRENT(de, d, return log_error_errno(errno, "Failed to read %s: %m", dir)) {
+        FOREACH_DIRENT(de, d, return log_error_errno(errno, "Failed to read %s: %m", full)) {
                 _cleanup_free_ char *j = NULL, *osrelease = NULL, *cmdline = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 if (!dirent_is_file(de))
                         continue;
@@ -488,51 +870,49 @@
                 if (!endswith_no_case(de->d_name, ".efi"))
                         continue;
 
-                if (!GREEDY_REALLOC0(*entries, *n_entries + 1))
+                if (!GREEDY_REALLOC0(config->entries, config->n_entries + 1))
                         return log_oom();
 
-                fd = openat(dirfd(d), de->d_name, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
+                fd = openat(dirfd(d), de->d_name, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOFOLLOW|O_NOCTTY);
                 if (fd < 0) {
-                        log_warning_errno(errno, "Failed to open %s/%s, ignoring: %m", dir, de->d_name);
+                        log_warning_errno(errno, "Failed to open %s/%s, ignoring: %m", full, de->d_name);
                         continue;
                 }
 
-                r = fd_verify_regular(fd);
-                if (r < 0) {
-                        log_warning_errno(r, "File %s/%s is not regular, ignoring: %m", dir, de->d_name);
-                        continue;
-                }
-
-                r = find_sections(fd, &osrelease, &cmdline);
+                r = config_check_inode_relevant_and_unseen(config, fd, de->d_name);
                 if (r < 0)
+                        return r;
+                if (r == 0) /* inode already seen or otherwise not relevant */
                         continue;
 
-                j = path_join(dir, de->d_name);
+                j = path_join(full, de->d_name);
                 if (!j)
                         return log_oom();
 
-                r = boot_entry_load_unified(root, j, osrelease, cmdline, *entries + *n_entries);
+                if (find_sections(fd, j, &osrelease, &cmdline) < 0)
+                        continue;
+
+                r = boot_entry_load_unified(root, j, osrelease, cmdline, config->entries + config->n_entries);
                 if (r < 0)
                         continue;
 
-                (*n_entries) ++;
+                config->n_entries++;
         }
 
         return 0;
 }
 
-static bool find_nonunique(BootEntry *entries, size_t n_entries, bool *arr) {
-        size_t i, j;
+static bool find_nonunique(const BootEntry *entries, size_t n_entries, bool arr[]) {
         bool non_unique = false;
 
         assert(entries || n_entries == 0);
         assert(arr || n_entries == 0);
 
-        for (i = 0; i < n_entries; i++)
+        for (size_t i = 0; i < n_entries; i++)
                 arr[i] = false;
 
-        for (i = 0; i < n_entries; i++)
-                for (j = 0; j < n_entries; j++)
+        for (size_t i = 0; i < n_entries; i++)
+                for (size_t j = 0; j < n_entries; j++)
                         if (i != j && streq(boot_entry_title(entries + i),
                                             boot_entry_title(entries + j)))
                                 non_unique = arr[i] = arr[j] = true;
@@ -541,22 +921,26 @@
 }
 
 static int boot_entries_uniquify(BootEntry *entries, size_t n_entries) {
+        _cleanup_free_ bool *arr = NULL;
         char *s;
-        size_t i;
-        int r;
-        bool arr[n_entries];
 
         assert(entries || n_entries == 0);
 
+        if (n_entries == 0)
+                return 0;
+
+        arr = new(bool, n_entries);
+        if (!arr)
+                return -ENOMEM;
+
         /* Find _all_ non-unique titles */
         if (!find_nonunique(entries, n_entries, arr))
                 return 0;
 
         /* Add version to non-unique titles */
-        for (i = 0; i < n_entries; i++)
+        for (size_t i = 0; i < n_entries; i++)
                 if (arr[i] && entries[i].version) {
-                        r = asprintf(&s, "%s (%s)", boot_entry_title(entries + i), entries[i].version);
-                        if (r < 0)
+                        if (asprintf(&s, "%s (%s)", boot_entry_title(entries + i), entries[i].version) < 0)
                                 return -ENOMEM;
 
                         free_and_replace(entries[i].show_title, s);
@@ -566,10 +950,9 @@
                 return 0;
 
         /* Add machine-id to non-unique titles */
-        for (i = 0; i < n_entries; i++)
+        for (size_t i = 0; i < n_entries; i++)
                 if (arr[i] && entries[i].machine_id) {
-                        r = asprintf(&s, "%s (%s)", boot_entry_title(entries + i), entries[i].machine_id);
-                        if (r < 0)
+                        if (asprintf(&s, "%s (%s)", boot_entry_title(entries + i), entries[i].machine_id) < 0)
                                 return -ENOMEM;
 
                         free_and_replace(entries[i].show_title, s);
@@ -579,10 +962,9 @@
                 return 0;
 
         /* Add file name to non-unique titles */
-        for (i = 0; i < n_entries; i++)
+        for (size_t i = 0; i < n_entries; i++)
                 if (arr[i]) {
-                        r = asprintf(&s, "%s (%s)", boot_entry_title(entries + i), entries[i].id);
-                        if (r < 0)
+                        if (asprintf(&s, "%s (%s)", boot_entry_title(entries + i), entries[i].id) < 0)
                                 return -ENOMEM;
 
                         free_and_replace(entries[i].show_title, s);
@@ -591,6 +973,27 @@
         return 0;
 }
 
+static int boot_config_find(const BootConfig *config, const char *id) {
+        assert(config);
+
+        if (!id)
+                return -1;
+
+        if (id[0] == '@') {
+                if (!strcaseeq(id, "@saved"))
+                        return -1;
+                if (!config->entry_selected)
+                        return -1;
+                id = config->entry_selected;
+        }
+
+        for (size_t i = 0; i < config->n_entries; i++)
+                if (fnmatch(id, config->entries[i].id, FNM_CASEFOLD) == 0)
+                        return i;
+
+        return -1;
+}
+
 static int boot_entries_select_default(const BootConfig *config) {
         int i;
 
@@ -602,72 +1005,95 @@
                 return -1; /* -1 means "no default" */
         }
 
-        if (config->entry_oneshot)
-                for (i = config->n_entries - 1; i >= 0; i--)
-                        if (streq(config->entry_oneshot, config->entries[i].id)) {
-                                log_debug("Found default: id \"%s\" is matched by LoaderEntryOneShot",
-                                          config->entries[i].id);
-                                return i;
-                        }
+        if (config->entry_oneshot) {
+                i = boot_config_find(config, config->entry_oneshot);
+                if (i >= 0) {
+                        log_debug("Found default: id \"%s\" is matched by LoaderEntryOneShot",
+                                  config->entries[i].id);
+                        return i;
+                }
+        }
 
-        if (config->entry_default)
-                for (i = config->n_entries - 1; i >= 0; i--)
-                        if (streq(config->entry_default, config->entries[i].id)) {
-                                log_debug("Found default: id \"%s\" is matched by LoaderEntryDefault",
-                                          config->entries[i].id);
-                                return i;
-                        }
+        if (config->entry_default) {
+                i = boot_config_find(config, config->entry_default);
+                if (i >= 0) {
+                        log_debug("Found default: id \"%s\" is matched by LoaderEntryDefault",
+                                  config->entries[i].id);
+                        return i;
+                }
+        }
 
-        if (config->default_pattern)
-                for (i = config->n_entries - 1; i >= 0; i--)
-                        if (fnmatch(config->default_pattern, config->entries[i].id, FNM_CASEFOLD) == 0) {
-                                log_debug("Found default: id \"%s\" is matched by pattern \"%s\"",
-                                          config->entries[i].id, config->default_pattern);
-                                return i;
-                        }
+        if (config->default_pattern) {
+                i = boot_config_find(config, config->default_pattern);
+                if (i >= 0) {
+                        log_debug("Found default: id \"%s\" is matched by pattern \"%s\"",
+                                  config->entries[i].id, config->default_pattern);
+                        return i;
+                }
+        }
 
-        log_debug("Found default: last entry \"%s\"", config->entries[config->n_entries - 1].id);
-        return config->n_entries - 1;
+        log_debug("Found default: first entry \"%s\"", config->entries[0].id);
+        return 0;
 }
 
-int boot_entries_load_config(
-                const char *esp_path,
-                const char *xbootldr_path,
-                BootConfig *config) {
+static int boot_entries_select_selected(const BootConfig *config) {
+        assert(config);
+        assert(config->entries || config->n_entries == 0);
 
-        const char *p;
+        if (!config->entry_selected || config->n_entries == 0)
+                return -1;
+
+        return boot_config_find(config, config->entry_selected);
+}
+
+static int boot_load_efi_entry_pointers(BootConfig *config, bool skip_efivars) {
         int r;
 
         assert(config);
 
-        if (esp_path) {
-                p = strjoina(esp_path, "/loader/loader.conf");
-                r = boot_loader_read_conf(p, config);
-                if (r < 0)
-                        return r;
+        if (skip_efivars || !is_efi_boot())
+                return 0;
 
-                p = strjoina(esp_path, "/loader/entries");
-                r = boot_entries_find(esp_path, p, &config->entries, &config->n_entries);
-                if (r < 0)
-                        return r;
+        /* Loads the three "pointers" to boot loader entries from their EFI variables */
 
-                p = strjoina(esp_path, "/EFI/Linux/");
-                r = boot_entries_find_unified(esp_path, p, &config->entries, &config->n_entries);
-                if (r < 0)
-                        return r;
-        }
+        r = efi_get_variable_string(EFI_LOADER_VARIABLE(LoaderEntryOneShot), &config->entry_oneshot);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0 && !IN_SET(r, -ENOENT, -ENODATA))
+                log_warning_errno(r, "Failed to read EFI variable \"LoaderEntryOneShot\", ignoring: %m");
 
-        if (xbootldr_path) {
-                p = strjoina(xbootldr_path, "/loader/entries");
-                r = boot_entries_find(xbootldr_path, p, &config->entries, &config->n_entries);
-                if (r < 0)
-                        return r;
+        r = efi_get_variable_string(EFI_LOADER_VARIABLE(LoaderEntryDefault), &config->entry_default);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0 && !IN_SET(r, -ENOENT, -ENODATA))
+                log_warning_errno(r, "Failed to read EFI variable \"LoaderEntryDefault\", ignoring: %m");
 
-                p = strjoina(xbootldr_path, "/EFI/Linux/");
-                r = boot_entries_find_unified(xbootldr_path, p, &config->entries, &config->n_entries);
-                if (r < 0)
-                        return r;
-        }
+        r = efi_get_variable_string(EFI_LOADER_VARIABLE(LoaderEntrySelected), &config->entry_selected);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0 && !IN_SET(r, -ENOENT, -ENODATA))
+                log_warning_errno(r, "Failed to read EFI variable \"LoaderEntrySelected\", ignoring: %m");
+
+        return 1;
+}
+
+int boot_config_select_special_entries(BootConfig *config, bool skip_efivars) {
+        int r;
+
+        assert(config);
+
+        r = boot_load_efi_entry_pointers(config, skip_efivars);
+        if (r < 0)
+                return r;
+
+        config->default_entry = boot_entries_select_default(config);
+        config->selected_entry = boot_entries_select_selected(config);
+
+        return 0;
+}
+
+int boot_config_finalize(BootConfig *config) {
+        int r;
 
         typesafe_qsort(config->entries, config->n_entries, boot_entry_compare);
 
@@ -675,32 +1101,52 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to uniquify boot entries: %m");
 
-        if (is_efi_boot()) {
-                r = efi_get_variable_string(EFI_LOADER_VARIABLE(LoaderEntryOneShot), &config->entry_oneshot);
-                if (r < 0 && !IN_SET(r, -ENOENT, -ENODATA)) {
-                        log_warning_errno(r, "Failed to read EFI variable \"LoaderEntryOneShot\": %m");
-                        if (r == -ENOMEM)
-                                return r;
-                }
-
-                r = efi_get_variable_string(EFI_LOADER_VARIABLE(LoaderEntryDefault), &config->entry_default);
-                if (r < 0 && !IN_SET(r, -ENOENT, -ENODATA)) {
-                        log_warning_errno(r, "Failed to read EFI variable \"LoaderEntryDefault\": %m");
-                        if (r == -ENOMEM)
-                                return r;
-                }
-        }
-
-        config->default_entry = boot_entries_select_default(config);
         return 0;
 }
 
-int boot_entries_load_config_auto(
+int boot_config_load(
+                BootConfig *config,
+                const char *esp_path,
+                const char *xbootldr_path) {
+
+        int r;
+
+        assert(config);
+
+        if (esp_path) {
+                r = boot_loader_read_conf_path(config, esp_path, "/loader/loader.conf");
+                if (r < 0)
+                        return r;
+
+                r = boot_entries_find_type1(config, esp_path, "/loader/entries");
+                if (r < 0)
+                        return r;
+
+                r = boot_entries_find_unified(config, esp_path, "/EFI/Linux/");
+                if (r < 0)
+                        return r;
+        }
+
+        if (xbootldr_path) {
+                r = boot_entries_find_type1(config, xbootldr_path, "/loader/entries");
+                if (r < 0)
+                        return r;
+
+                r = boot_entries_find_unified(config, xbootldr_path, "/EFI/Linux/");
+                if (r < 0)
+                        return r;
+        }
+
+        return boot_config_finalize(config);
+}
+
+int boot_config_load_auto(
+                BootConfig *config,
                 const char *override_esp_path,
-                const char *override_xbootldr_path,
-                BootConfig *config) {
+                const char *override_xbootldr_path) {
 
         _cleanup_free_ char *esp_where = NULL, *xbootldr_where = NULL;
+        dev_t esp_devid = 0, xbootldr_devid = 0;
         int r;
 
         assert(config);
@@ -714,25 +1160,29 @@
 
         if (!override_esp_path && !override_xbootldr_path) {
                 if (access("/run/boot-loader-entries/", F_OK) >= 0)
-                        return boot_entries_load_config("/run/boot-loader-entries/", NULL, config);
+                        return boot_config_load(config, "/run/boot-loader-entries/", NULL);
 
                 if (errno != ENOENT)
                         return log_error_errno(errno,
                                                "Failed to determine whether /run/boot-loader-entries/ exists: %m");
         }
 
-        r = find_esp_and_warn(override_esp_path, false, &esp_where, NULL, NULL, NULL, NULL);
+        r = find_esp_and_warn(NULL, override_esp_path, /* unprivileged_mode= */ false, &esp_where, NULL, NULL, NULL, NULL, &esp_devid);
         if (r < 0) /* we don't log about ENOKEY here, but propagate it, leaving it to the caller to log */
                 return r;
 
-        r = find_xbootldr_and_warn(override_xbootldr_path, false, &xbootldr_where, NULL);
+        r = find_xbootldr_and_warn(NULL, override_xbootldr_path, /* unprivileged_mode= */ false, &xbootldr_where, NULL, &xbootldr_devid);
         if (r < 0 && r != -ENOKEY)
                 return r; /* It's fine if the XBOOTLDR partition doesn't exist, hence we ignore ENOKEY here */
 
-        return boot_entries_load_config(esp_where, xbootldr_where, config);
+        /* If both paths actually refer to the same inode, suppress the xbootldr path */
+        if (esp_where && xbootldr_where && devnum_set_and_equal(esp_devid, xbootldr_devid))
+                xbootldr_where = mfree(xbootldr_where);
+
+        return boot_config_load(config, esp_where, xbootldr_where);
 }
 
-int boot_entries_augment_from_loader(
+int boot_config_augment_from_loader(
                 BootConfig *config,
                 char **found_by_loader,
                 bool only_auto) {
@@ -744,21 +1194,23 @@
                 "auto-efi-shell",                "EFI Shell",
                 "auto-efi-default",              "EFI Default Loader",
                 "auto-reboot-to-firmware-setup", "Reboot Into Firmware Interface",
+                NULL,
         };
 
-        char **i;
-
         assert(config);
 
         /* Let's add the entries discovered by the boot loader to the end of our list, unless they are
          * already included there. */
 
         STRV_FOREACH(i, found_by_loader) {
+                BootEntry *existing;
                 _cleanup_free_ char *c = NULL, *t = NULL, *p = NULL;
-                char **a, **b;
 
-                if (boot_config_has_entry(config, *i))
+                existing = boot_config_find_entry(config, *i);
+                if (existing) {
+                        existing->reported_by_loader = true;
                         continue;
+                }
 
                 if (only_auto && !startswith(*i, "auto-"))
                         continue;
@@ -767,7 +1219,7 @@
                 if (!c)
                         return log_oom();
 
-                STRV_FOREACH_PAIR(a, b, (char**) title_table)
+                STRV_FOREACH_PAIR(a, b, title_table)
                         if (streq(*a, *i)) {
                                 t = strdup(*b);
                                 if (!t)
@@ -783,650 +1235,243 @@
                         return log_oom();
 
                 config->entries[config->n_entries++] = (BootEntry) {
-                        .type = BOOT_ENTRY_LOADER,
+                        .type = startswith(*i, "auto-") ? BOOT_ENTRY_LOADER_AUTO : BOOT_ENTRY_LOADER,
                         .id = TAKE_PTR(c),
                         .title = TAKE_PTR(t),
                         .path = TAKE_PTR(p),
+                        .reported_by_loader = true,
+                        .tries_left = UINT_MAX,
+                        .tries_done = UINT_MAX,
                 };
         }
 
         return 0;
 }
 
-/********************************************************************************/
+BootEntry* boot_config_find_entry(BootConfig *config, const char *id) {
+        assert(config);
+        assert(id);
 
-static int verify_esp_blkid(
-                dev_t devid,
-                bool searching,
-                uint32_t *ret_part,
-                uint64_t *ret_pstart,
-                uint64_t *ret_psize,
-                sd_id128_t *ret_uuid) {
+        for (size_t j = 0; j < config->n_entries; j++)
+                if (streq_ptr(config->entries[j].id, id) ||
+                    streq_ptr(config->entries[j].id_old, id))
+                        return config->entries + j;
 
-        sd_id128_t uuid = SD_ID128_NULL;
-        uint64_t pstart = 0, psize = 0;
-        uint32_t part = 0;
-
-#if HAVE_BLKID
-        _cleanup_(blkid_free_probep) blkid_probe b = NULL;
-        _cleanup_free_ char *node = NULL;
-        const char *v;
-        int r;
-
-        r = device_path_make_major_minor(S_IFBLK, devid, &node);
-        if (r < 0)
-                return log_error_errno(r, "Failed to format major/minor device path: %m");
-
-        errno = 0;
-        b = blkid_new_probe_from_filename(node);
-        if (!b)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(ENOMEM), "Failed to open file system \"%s\": %m", node);
-
-        blkid_probe_enable_superblocks(b, 1);
-        blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE);
-        blkid_probe_enable_partitions(b, 1);
-        blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
-
-        errno = 0;
-        r = blkid_do_safeprobe(b);
-        if (r == -2)
-                return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system \"%s\" is ambiguous.", node);
-        else if (r == 1)
-                return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system \"%s\" does not contain a label.", node);
-        else if (r != 0)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe file system \"%s\": %m", node);
-
-        r = blkid_probe_lookup_value(b, "TYPE", &v, NULL);
-        if (r != 0)
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                      "No filesystem found on \"%s\": %m", node);
-        if (!streq(v, "vfat"))
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                      "File system \"%s\" is not FAT.", node);
-
-        r = blkid_probe_lookup_value(b, "PART_ENTRY_SCHEME", &v, NULL);
-        if (r != 0)
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                      "File system \"%s\" is not located on a partitioned block device.", node);
-        if (!streq(v, "gpt"))
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                      "File system \"%s\" is not on a GPT partition table.", node);
-
-        errno = 0;
-        r = blkid_probe_lookup_value(b, "PART_ENTRY_TYPE", &v, NULL);
-        if (r != 0)
-                return log_error_errno(errno ?: EIO, "Failed to probe partition type UUID of \"%s\": %m", node);
-        if (!streq(v, "c12a7328-f81f-11d2-ba4b-00a0c93ec93b"))
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                       SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                       "File system \"%s\" has wrong type for an EFI System Partition (ESP).", node);
-
-        errno = 0;
-        r = blkid_probe_lookup_value(b, "PART_ENTRY_UUID", &v, NULL);
-        if (r != 0)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition entry UUID of \"%s\": %m", node);
-        r = sd_id128_from_string(v, &uuid);
-        if (r < 0)
-                return log_error_errno(r, "Partition \"%s\" has invalid UUID \"%s\".", node, v);
-
-        errno = 0;
-        r = blkid_probe_lookup_value(b, "PART_ENTRY_NUMBER", &v, NULL);
-        if (r != 0)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition number of \"%s\": %m", node);
-        r = safe_atou32(v, &part);
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse PART_ENTRY_NUMBER field.");
-
-        errno = 0;
-        r = blkid_probe_lookup_value(b, "PART_ENTRY_OFFSET", &v, NULL);
-        if (r != 0)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition offset of \"%s\": %m", node);
-        r = safe_atou64(v, &pstart);
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse PART_ENTRY_OFFSET field.");
-
-        errno = 0;
-        r = blkid_probe_lookup_value(b, "PART_ENTRY_SIZE", &v, NULL);
-        if (r != 0)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition size of \"%s\": %m", node);
-        r = safe_atou64(v, &psize);
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse PART_ENTRY_SIZE field.");
-#endif
-
-        if (ret_part)
-                *ret_part = part;
-        if (ret_pstart)
-                *ret_pstart = pstart;
-        if (ret_psize)
-                *ret_psize = psize;
-        if (ret_uuid)
-                *ret_uuid = uuid;
-
-        return 0;
+        return NULL;
 }
 
-static int verify_esp_udev(
-                dev_t devid,
-                bool searching,
-                uint32_t *ret_part,
-                uint64_t *ret_pstart,
-                uint64_t *ret_psize,
-                sd_id128_t *ret_uuid) {
+static void boot_entry_file_list(
+                const char *field,
+                const char *root,
+                const char *p,
+                int *ret_status) {
 
-        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
-        _cleanup_free_ char *node = NULL;
-        sd_id128_t uuid = SD_ID128_NULL;
-        uint64_t pstart = 0, psize = 0;
-        uint32_t part = 0;
-        const char *v;
-        int r;
+        assert(p);
+        assert(ret_status);
 
-        r = device_path_make_major_minor(S_IFBLK, devid, &node);
-        if (r < 0)
-                return log_error_errno(r, "Failed to format major/minor device path: %m");
+        int status = chase_symlinks_and_access(p, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, F_OK, NULL, NULL);
 
-        r = sd_device_new_from_devnum(&d, 'b', devid);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device from device number: %m");
+        /* Note that this shows two '/' between the root and the file. This is intentional to highlight (in
+         * the absence of color support) to the user that the boot loader is only interested in the second
+         * part of the file. */
+        printf("%13s%s %s%s/%s", strempty(field), field ? ":" : " ", ansi_grey(), root, ansi_normal());
 
-        r = sd_device_get_property_value(d, "ID_FS_TYPE", &v);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device property: %m");
-        if (!streq(v, "vfat"))
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                      "File system \"%s\" is not FAT.", node );
+        if (status < 0) {
+                errno = -status;
+                printf("%s%s%s (%m)\n", ansi_highlight_red(), p, ansi_normal());
+        } else
+                printf("%s\n", p);
 
-        r = sd_device_get_property_value(d, "ID_PART_ENTRY_SCHEME", &v);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device property: %m");
-        if (!streq(v, "gpt"))
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                      "File system \"%s\" is not on a GPT partition table.", node);
-
-        r = sd_device_get_property_value(d, "ID_PART_ENTRY_TYPE", &v);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device property: %m");
-        if (!streq(v, "c12a7328-f81f-11d2-ba4b-00a0c93ec93b"))
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                       SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                       "File system \"%s\" has wrong type for an EFI System Partition (ESP).", node);
-
-        r = sd_device_get_property_value(d, "ID_PART_ENTRY_UUID", &v);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device property: %m");
-        r = sd_id128_from_string(v, &uuid);
-        if (r < 0)
-                return log_error_errno(r, "Partition \"%s\" has invalid UUID \"%s\".", node, v);
-
-        r = sd_device_get_property_value(d, "ID_PART_ENTRY_NUMBER", &v);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device property: %m");
-        r = safe_atou32(v, &part);
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse PART_ENTRY_NUMBER field.");
-
-        r = sd_device_get_property_value(d, "ID_PART_ENTRY_OFFSET", &v);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device property: %m");
-        r = safe_atou64(v, &pstart);
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse PART_ENTRY_OFFSET field.");
-
-        r = sd_device_get_property_value(d, "ID_PART_ENTRY_SIZE", &v);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device property: %m");
-        r = safe_atou64(v, &psize);
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse PART_ENTRY_SIZE field.");
-
-        if (ret_part)
-                *ret_part = part;
-        if (ret_pstart)
-                *ret_pstart = pstart;
-        if (ret_psize)
-                *ret_psize = psize;
-        if (ret_uuid)
-                *ret_uuid = uuid;
-
-        return 0;
+        if (*ret_status == 0 && status < 0)
+                *ret_status = status;
 }
 
-static int verify_fsroot_dir(
-                const char *path,
-                bool searching,
-                bool unprivileged_mode,
-                dev_t *ret_dev) {
+int show_boot_entry(
+                const BootEntry *e,
+                bool show_as_default,
+                bool show_as_selected,
+                bool show_reported) {
 
-        struct stat st, st2;
-        const char *t2, *trigger;
-        int r;
+        int status = 0;
 
-        assert(path);
-        assert(ret_dev);
+        /* Returns 0 on success, negative on processing error, and positive if something is wrong with the
+           boot entry itself. */
 
-        /* So, the ESP and XBOOTLDR partition are commonly located on an autofs mount. stat() on the
-         * directory won't trigger it, if it is not mounted yet. Let's hence explicitly trigger it here,
-         * before stat()ing */
-        trigger = strjoina(path, "/trigger"); /* Filename doesn't matter... */
-        (void) access(trigger, F_OK);
+        assert(e);
 
-        if (stat(path, &st) < 0)
-                return log_full_errno((searching && errno == ENOENT) ||
-                                      (unprivileged_mode && errno == EACCES) ? LOG_DEBUG : LOG_ERR, errno,
-                                      "Failed to determine block device node of \"%s\": %m", path);
+        printf("         type: %s\n",
+               boot_entry_type_to_string(e->type));
 
-        if (major(st.st_dev) == 0)
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                      "Block device node of \"%s\" is invalid.", path);
+        printf("        title: %s%s%s",
+               ansi_highlight(), boot_entry_title(e), ansi_normal());
 
-        if (path_equal(path, "/")) {
-                /* Let's assume that the root directory of the OS is always the root of its file system
-                 * (which technically doesn't have to be the case, but it's close enough, and it's not easy
-                 * to be fully correct for it, since we can't look further up than the root dir easily.) */
-                if (ret_dev)
-                        *ret_dev = st.st_dev;
+        if (show_as_default)
+                printf(" %s(default)%s",
+                       ansi_highlight_green(), ansi_normal());
 
-                return 0;
+        if (show_as_selected)
+                printf(" %s(selected)%s",
+                       ansi_highlight_magenta(), ansi_normal());
+
+        if (show_reported) {
+                if (e->type == BOOT_ENTRY_LOADER)
+                        printf(" %s(reported/absent)%s",
+                               ansi_highlight_red(), ansi_normal());
+                else if (!e->reported_by_loader && e->type != BOOT_ENTRY_LOADER_AUTO)
+                        printf(" %s(not reported/new)%s",
+                               ansi_highlight_green(), ansi_normal());
         }
 
-        t2 = strjoina(path, "/..");
-        if (stat(t2, &st2) < 0) {
-                if (errno != EACCES)
-                        r = -errno;
-                else {
-                        _cleanup_free_ char *parent = NULL;
+        putchar('\n');
 
-                        /* If going via ".." didn't work due to EACCESS, then let's determine the parent path
-                         * directly instead. It's not as good, due to symlinks and such, but we can't do
-                         * anything better here. */
+        if (e->id)
+                printf("           id: %s\n", e->id);
+        if (e->path) {
+                _cleanup_free_ char *text = NULL, *link = NULL;
 
-                        parent = dirname_malloc(path);
-                        if (!parent)
+                const char *p = e->root ? path_startswith(e->path, e->root) : NULL;
+                if (p) {
+                        text = strjoin(ansi_grey(), e->root, "/", ansi_normal(), "/", p);
+                        if (!text)
                                 return log_oom();
-
-                        r = stat(parent, &st2) < 0 ? -errno : 0;
                 }
 
-                if (r < 0)
-                        return log_full_errno(unprivileged_mode && r == -EACCES ? LOG_DEBUG : LOG_ERR, r,
-                                              "Failed to determine block device node of parent of \"%s\": %m", path);
+                /* Let's urlify the link to make it easy to view in an editor, but only if it is a text
+                 * file. Unified images are binary ELFs, and EFI variables are not pure text either. */
+                if (e->type == BOOT_ENTRY_CONF)
+                        (void) terminal_urlify_path(e->path, text, &link);
+
+                printf("       source: %s\n", link ?: text ?: e->path);
+        }
+        if (e->tries_left != UINT_MAX) {
+                printf("        tries: %u left", e->tries_left);
+
+                if (e->tries_done != UINT_MAX)
+                        printf("; %u done\n", e->tries_done);
+                else
+                        printf("\n");
         }
 
-        if (st.st_dev == st2.st_dev)
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                      "Directory \"%s\" is not the root of the file system.", path);
+        if (e->sort_key)
+                printf("     sort-key: %s\n", e->sort_key);
+        if (e->version)
+                printf("      version: %s\n", e->version);
+        if (e->machine_id)
+                printf("   machine-id: %s\n", e->machine_id);
+        if (e->architecture)
+                printf(" architecture: %s\n", e->architecture);
+        if (e->kernel)
+                boot_entry_file_list("linux", e->root, e->kernel, &status);
+        if (e->efi)
+                boot_entry_file_list("efi", e->root, e->efi, &status);
 
-        if (ret_dev)
-                *ret_dev = st.st_dev;
+        STRV_FOREACH(s, e->initrd)
+                boot_entry_file_list(s == e->initrd ? "initrd" : NULL,
+                                     e->root,
+                                     *s,
+                                     &status);
 
-        return 0;
-}
+        if (!strv_isempty(e->options)) {
+                _cleanup_free_ char *t = NULL, *t2 = NULL;
+                _cleanup_strv_free_ char **ts = NULL;
 
-static int verify_esp(
-                const char *p,
-                bool searching,
-                bool unprivileged_mode,
-                uint32_t *ret_part,
-                uint64_t *ret_pstart,
-                uint64_t *ret_psize,
-                sd_id128_t *ret_uuid) {
-
-        bool relax_checks;
-        dev_t devid;
-        int r;
-
-        assert(p);
-
-        /* This logs about all errors, except:
-         *
-         *  -ENOENT        → if 'searching' is set, and the dir doesn't exist
-         *  -EADDRNOTAVAIL → if 'searching' is set, and the dir doesn't look like an ESP
-         *  -EACESS        → if 'unprivileged_mode' is set, and we have trouble accessing the thing
-         */
-
-        relax_checks = getenv_bool("SYSTEMD_RELAX_ESP_CHECKS") > 0;
-
-        /* Non-root user can only check the status, so if an error occurred in the following, it does not cause any
-         * issues. Let's also, silence the error messages. */
-
-        if (!relax_checks) {
-                struct statfs sfs;
-
-                if (statfs(p, &sfs) < 0)
-                        /* If we are searching for the mount point, don't generate a log message if we can't find the path */
-                        return log_full_errno((searching && errno == ENOENT) ||
-                                              (unprivileged_mode && errno == EACCES) ? LOG_DEBUG : LOG_ERR, errno,
-                                              "Failed to check file system type of \"%s\": %m", p);
-
-                if (!F_TYPE_EQUAL(sfs.f_type, MSDOS_SUPER_MAGIC))
-                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                              SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
-                                              "File system \"%s\" is not a FAT EFI System Partition (ESP) file system.", p);
-        }
-
-        r = verify_fsroot_dir(p, searching, unprivileged_mode, &devid);
-        if (r < 0)
-                return r;
-
-        /* In a container we don't have access to block devices, skip this part of the verification, we trust
-         * the container manager set everything up correctly on its own. */
-        if (detect_container() > 0 || relax_checks)
-                goto finish;
-
-        /* If we are unprivileged we ask udev for the metadata about the partition. If we are privileged we
-         * use blkid instead. Why? Because this code is called from 'bootctl' which is pretty much an
-         * emergency recovery tool that should also work when udev isn't up (i.e. from the emergency shell),
-         * however blkid can't work if we have no privileges to access block devices directly, which is why
-         * we use udev in that case. */
-        if (unprivileged_mode)
-                return verify_esp_udev(devid, searching, ret_part, ret_pstart, ret_psize, ret_uuid);
-        else
-                return verify_esp_blkid(devid, searching, ret_part, ret_pstart, ret_psize, ret_uuid);
-
-finish:
-        if (ret_part)
-                *ret_part = 0;
-        if (ret_pstart)
-                *ret_pstart = 0;
-        if (ret_psize)
-                *ret_psize = 0;
-        if (ret_uuid)
-                *ret_uuid = SD_ID128_NULL;
-
-        return 0;
-}
-
-int find_esp_and_warn(
-                const char *path,
-                bool unprivileged_mode,
-                char **ret_path,
-                uint32_t *ret_part,
-                uint64_t *ret_pstart,
-                uint64_t *ret_psize,
-                sd_id128_t *ret_uuid) {
-
-        int r;
-
-        /* This logs about all errors except:
-         *
-         *    -ENOKEY → when we can't find the partition
-         *   -EACCESS → when unprivileged_mode is true, and we can't access something
-         */
-
-        if (path) {
-                r = verify_esp(path, false, unprivileged_mode, ret_part, ret_pstart, ret_psize, ret_uuid);
-                if (r < 0)
-                        return r;
-
-                goto found;
-        }
-
-        path = getenv("SYSTEMD_ESP_PATH");
-        if (path) {
-                if (!path_is_valid(path) || !path_is_absolute(path))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "$SYSTEMD_ESP_PATH does not refer to absolute path, refusing to use it: %s",
-                                               path);
-
-                /* Note: when the user explicitly configured things with an env var we won't validate the mount
-                 * point. After all we want this to be useful for testing. */
-                goto found;
-        }
-
-        FOREACH_STRING(path, "/efi", "/boot", "/boot/efi") {
-
-                r = verify_esp(path, true, unprivileged_mode, ret_part, ret_pstart, ret_psize, ret_uuid);
-                if (r >= 0)
-                        goto found;
-                if (!IN_SET(r, -ENOENT, -EADDRNOTAVAIL)) /* This one is not it */
-                        return r;
-        }
-
-        /* No logging here */
-        return -ENOKEY;
-
-found:
-        if (ret_path) {
-                char *c;
-
-                c = strdup(path);
-                if (!c)
+                t = strv_join(e->options, " ");
+                if (!t)
                         return log_oom();
 
-                *ret_path = c;
-        }
-
-        return 0;
-}
-
-static int verify_xbootldr_blkid(
-                dev_t devid,
-                bool searching,
-                sd_id128_t *ret_uuid) {
-
-        sd_id128_t uuid = SD_ID128_NULL;
-
-#if HAVE_BLKID
-        _cleanup_(blkid_free_probep) blkid_probe b = NULL;
-        _cleanup_free_ char *node = NULL;
-        const char *v;
-        int r;
-
-        r = device_path_make_major_minor(S_IFBLK, devid, &node);
-        if (r < 0)
-                return log_error_errno(r, "Failed to format major/minor device path: %m");
-        errno = 0;
-        b = blkid_new_probe_from_filename(node);
-        if (!b)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(ENOMEM), "Failed to open file system \"%s\": %m", node);
-
-        blkid_probe_enable_partitions(b, 1);
-        blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
-
-        errno = 0;
-        r = blkid_do_safeprobe(b);
-        if (r == -2)
-                return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system \"%s\" is ambiguous.", node);
-        else if (r == 1)
-                return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system \"%s\" does not contain a label.", node);
-        else if (r != 0)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe file system \"%s\": %m", node);
-
-        errno = 0;
-        r = blkid_probe_lookup_value(b, "PART_ENTRY_SCHEME", &v, NULL);
-        if (r != 0)
-                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition scheme of \"%s\": %m", node);
-        if (streq(v, "gpt")) {
-
-                errno = 0;
-                r = blkid_probe_lookup_value(b, "PART_ENTRY_TYPE", &v, NULL);
-                if (r != 0)
-                        return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition type UUID of \"%s\": %m", node);
-                if (!streq(v, "bc13c2ff-59e6-4262-a352-b275fd6f7172"))
-                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                              searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
-                                              "File system \"%s\" has wrong type for extended boot loader partition.", node);
-
-                errno = 0;
-                r = blkid_probe_lookup_value(b, "PART_ENTRY_UUID", &v, NULL);
-                if (r != 0)
-                        return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition entry UUID of \"%s\": %m", node);
-                r = sd_id128_from_string(v, &uuid);
-                if (r < 0)
-                        return log_error_errno(r, "Partition \"%s\" has invalid UUID \"%s\".", node, v);
-
-        } else if (streq(v, "dos")) {
-
-                errno = 0;
-                r = blkid_probe_lookup_value(b, "PART_ENTRY_TYPE", &v, NULL);
-                if (r != 0)
-                        return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition type UUID of \"%s\": %m", node);
-                if (!streq(v, "0xea"))
-                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                              searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
-                                              "File system \"%s\" has wrong type for extended boot loader partition.", node);
-
-        } else
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
-                                      "File system \"%s\" is not on a GPT or DOS partition table.", node);
-#endif
-
-        if (ret_uuid)
-                *ret_uuid = uuid;
-
-        return 0;
-}
-
-static int verify_xbootldr_udev(
-                dev_t devid,
-                bool searching,
-                sd_id128_t *ret_uuid) {
-
-        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
-        _cleanup_free_ char *node = NULL;
-        sd_id128_t uuid = SD_ID128_NULL;
-        const char *v;
-        int r;
-
-        r = device_path_make_major_minor(S_IFBLK, devid, &node);
-        if (r < 0)
-                return log_error_errno(r, "Failed to format major/minor device path: %m");
-
-        r = sd_device_new_from_devnum(&d, 'b', devid);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device from device number: %m");
-
-        r = sd_device_get_property_value(d, "ID_PART_ENTRY_SCHEME", &v);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get device property: %m");
-
-        if (streq(v, "gpt")) {
-
-                r = sd_device_get_property_value(d, "ID_PART_ENTRY_TYPE", &v);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get device property: %m");
-                if (!streq(v, "bc13c2ff-59e6-4262-a352-b275fd6f7172"))
-                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                              searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
-                                              "File system \"%s\" has wrong type for extended boot loader partition.", node);
-
-                r = sd_device_get_property_value(d, "ID_PART_ENTRY_UUID", &v);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get device property: %m");
-                r = sd_id128_from_string(v, &uuid);
-                if (r < 0)
-                        return log_error_errno(r, "Partition \"%s\" has invalid UUID \"%s\".", node, v);
-
-        } else if (streq(v, "dos")) {
-
-                r = sd_device_get_property_value(d, "ID_PART_ENTRY_TYPE", &v);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get device property: %m");
-                if (!streq(v, "0xea"))
-                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                              searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
-                                              "File system \"%s\" has wrong type for extended boot loader partition.", node);
-        } else
-                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
-                                      searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
-                                      "File system \"%s\" is not on a GPT or DOS partition table.", node);
-
-        if (ret_uuid)
-                *ret_uuid = uuid;
-
-        return 0;
-}
-
-static int verify_xbootldr(
-                const char *p,
-                bool searching,
-                bool unprivileged_mode,
-                sd_id128_t *ret_uuid) {
-
-        bool relax_checks;
-        dev_t devid;
-        int r;
-
-        assert(p);
-
-        relax_checks = getenv_bool("SYSTEMD_RELAX_XBOOTLDR_CHECKS") > 0;
-
-        r = verify_fsroot_dir(p, searching, unprivileged_mode, &devid);
-        if (r < 0)
-                return r;
-
-        if (detect_container() > 0 || relax_checks)
-                goto finish;
-
-        if (unprivileged_mode)
-                return verify_xbootldr_udev(devid, searching, ret_uuid);
-        else
-                return verify_xbootldr_blkid(devid, searching, ret_uuid);
-
-finish:
-        if (ret_uuid)
-                *ret_uuid = SD_ID128_NULL;
-
-        return 0;
-}
-
-int find_xbootldr_and_warn(
-                const char *path,
-                bool unprivileged_mode,
-                char **ret_path,
-                sd_id128_t *ret_uuid) {
-
-        int r;
-
-        /* Similar to find_esp_and_warn(), but finds the XBOOTLDR partition. Returns the same errors. */
-
-        if (path) {
-                r = verify_xbootldr(path, false, unprivileged_mode, ret_uuid);
-                if (r < 0)
-                        return r;
-
-                goto found;
-        }
-
-        path = getenv("SYSTEMD_XBOOTLDR_PATH");
-        if (path) {
-                if (!path_is_valid(path) || !path_is_absolute(path))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "$SYSTEMD_XBOOTLDR_PATH does not refer to absolute path, refusing to use it: %s",
-                                               path);
-
-                goto found;
-        }
-
-        r = verify_xbootldr("/boot", true, unprivileged_mode, ret_uuid);
-        if (r >= 0) {
-                path = "/boot";
-                goto found;
-        }
-        if (!IN_SET(r, -ENOENT, -EADDRNOTAVAIL)) /* This one is not it */
-                return r;
-
-        return -ENOKEY;
-
-found:
-        if (ret_path) {
-                char *c;
-
-                c = strdup(path);
-                if (!c)
+                ts = strv_split_newlines(t);
+                if (!ts)
                         return log_oom();
 
-                *ret_path = c;
+                t2 = strv_join(ts, "\n              ");
+                if (!t2)
+                        return log_oom();
+
+                printf("      options: %s\n", t2);
+        }
+
+        if (e->device_tree)
+                boot_entry_file_list("devicetree", e->root, e->device_tree, &status);
+
+        STRV_FOREACH(s, e->device_tree_overlay)
+                boot_entry_file_list(s == e->device_tree_overlay ? "devicetree-overlay" : NULL,
+                                     e->root,
+                                     *s,
+                                     &status);
+
+        return -status;
+}
+
+int show_boot_entries(const BootConfig *config, JsonFormatFlags json_format) {
+        int r;
+
+        assert(config);
+
+        if (!FLAGS_SET(json_format, JSON_FORMAT_OFF)) {
+                _cleanup_(json_variant_unrefp) JsonVariant *array = NULL;
+
+                for (size_t i = 0; i < config->n_entries; i++) {
+                        _cleanup_free_ char *opts = NULL;
+                        const BootEntry *e = config->entries + i;
+                        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+                        if (!strv_isempty(e->options)) {
+                                opts = strv_join(e->options, " ");
+                                if (!opts)
+                                        return log_oom();
+                        }
+
+                        r = json_append(&v, JSON_BUILD_OBJECT(
+                                                       JSON_BUILD_PAIR_CONDITION(e->id, "id", JSON_BUILD_STRING(e->id)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->path, "path", JSON_BUILD_STRING(e->path)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->root, "root", JSON_BUILD_STRING(e->root)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->title, "title", JSON_BUILD_STRING(e->title)),
+                                                       JSON_BUILD_PAIR_CONDITION(boot_entry_title(e), "showTitle", JSON_BUILD_STRING(boot_entry_title(e))),
+                                                       JSON_BUILD_PAIR_CONDITION(e->sort_key, "sortKey", JSON_BUILD_STRING(e->sort_key)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->version, "version", JSON_BUILD_STRING(e->version)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->machine_id, "machineId", JSON_BUILD_STRING(e->machine_id)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->architecture, "architecture", JSON_BUILD_STRING(e->architecture)),
+                                                       JSON_BUILD_PAIR_CONDITION(opts, "options", JSON_BUILD_STRING(opts)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->kernel, "linux", JSON_BUILD_STRING(e->kernel)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->efi, "efi", JSON_BUILD_STRING(e->efi)),
+                                                       JSON_BUILD_PAIR_CONDITION(!strv_isempty(e->initrd), "initrd", JSON_BUILD_STRV(e->initrd)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->device_tree, "devicetree", JSON_BUILD_STRING(e->device_tree)),
+                                                       JSON_BUILD_PAIR_CONDITION(!strv_isempty(e->device_tree_overlay), "devicetreeOverlay", JSON_BUILD_STRV(e->device_tree_overlay))));
+                        if (r < 0)
+                                return log_oom();
+
+                        /* Sanitizers (only memory sanitizer?) do not like function call with too many
+                         * arguments and trigger false positive warnings. Let's not add too many json objects
+                         * at once. */
+                        r = json_append(&v, JSON_BUILD_OBJECT(
+                                                       JSON_BUILD_PAIR_CONDITION(e->tries_left != UINT_MAX, "triesLeft", JSON_BUILD_UNSIGNED(e->tries_left)),
+                                                       JSON_BUILD_PAIR_CONDITION(e->tries_done != UINT_MAX, "triesDone", JSON_BUILD_UNSIGNED(e->tries_done)),
+                                                       JSON_BUILD_PAIR_CONDITION(config->default_entry >= 0, "isDefault", JSON_BUILD_BOOLEAN(i == (size_t) config->default_entry)),
+                                                       JSON_BUILD_PAIR_CONDITION(config->selected_entry >= 0, "isSelected", JSON_BUILD_BOOLEAN(i == (size_t) config->selected_entry))));
+
+                        if (r < 0)
+                                return log_oom();
+
+                        r = json_variant_append_array(&array, v);
+                        if (r < 0)
+                                return log_oom();
+                }
+
+                json_variant_dump(array, json_format | JSON_FORMAT_EMPTY_ARRAY, NULL, NULL);
+
+        } else {
+                for (size_t n = 0; n < config->n_entries; n++) {
+                        r = show_boot_entry(
+                                        config->entries + n,
+                                        /* show_as_default= */  n == (size_t) config->default_entry,
+                                        /* show_as_selected= */ n == (size_t) config->selected_entry,
+                                        /* show_discovered= */  true);
+                        if (r < 0)
+                                return r;
+
+                        if (n+1 < config->n_entries)
+                                putchar('\n');
+                }
         }
 
         return 0;
diff --git a/src/shared/bootspec.h b/src/shared/bootspec.h
index c7b4a2e..ac4d189 100644
--- a/src/shared/bootspec.h
+++ b/src/shared/bootspec.h
@@ -2,30 +2,34 @@
 
 #pragma once
 
+#include <errno.h>
 #include <inttypes.h>
 #include <stdbool.h>
 #include <sys/types.h>
 
-#include "sd-id128.h"
-
+#include "json.h"
+#include "set.h"
 #include "string-util.h"
 
 typedef enum BootEntryType {
-        BOOT_ENTRY_CONF,     /* Type #1 entries: *.conf files */
-        BOOT_ENTRY_UNIFIED,  /* Type #2 entries: *.efi files */
-        BOOT_ENTRY_LOADER,   /* Additional entries augmented from LoaderEntries EFI var */
-        _BOOT_ENTRY_MAX,
-        _BOOT_ENTRY_INVALID = -EINVAL,
+        BOOT_ENTRY_CONF,        /* Boot Loader Specification Type #1 entries: *.conf files */
+        BOOT_ENTRY_UNIFIED,     /* Boot Loader Specification Type #2 entries: *.efi files */
+        BOOT_ENTRY_LOADER,      /* Additional entries augmented from LoaderEntries EFI variable (regular entries) */
+        BOOT_ENTRY_LOADER_AUTO, /* Additional entries augmented from LoaderEntries EFI variable (special "automatic" entries) */
+        _BOOT_ENTRY_TYPE_MAX,
+        _BOOT_ENTRY_TYPE_INVALID = -EINVAL,
 } BootEntryType;
 
 typedef struct BootEntry {
         BootEntryType type;
-        char *id;       /* This is the file basename without extension */
+        bool reported_by_loader;
+        char *id;       /* This is the file basename (including extension!) */
         char *id_old;   /* Old-style ID, for deduplication purposes. */
         char *path;     /* This is the full path to the drop-in file */
         char *root;     /* The root path in which the drop-in was found, i.e. to which 'kernel', 'efi' and 'initrd' are relative */
         char *title;
         char *show_title;
+        char *sort_key;
         char *version;
         char *machine_id;
         char *architecture;
@@ -34,8 +38,18 @@
         char *efi;
         char **initrd;
         char *device_tree;
+        char **device_tree_overlay;
+        unsigned tries_left;
+        unsigned tries_done;
 } BootEntry;
 
+#define BOOT_ENTRY_INIT(t)                      \
+        {                                       \
+                .type = (t),                    \
+                .tries_left = UINT_MAX,         \
+                .tries_done = UINT_MAX,         \
+        }
+
 typedef struct BootConfig {
         char *default_pattern;
         char *timeout;
@@ -43,44 +57,72 @@
         char *auto_entries;
         char *auto_firmware;
         char *console_mode;
-        char *random_seed_mode;
+        char *beep;
 
         char *entry_oneshot;
         char *entry_default;
+        char *entry_selected;
 
         BootEntry *entries;
         size_t n_entries;
+
         ssize_t default_entry;
+        ssize_t selected_entry;
+
+        Set *inodes_seen;
 } BootConfig;
 
-static inline bool boot_config_has_entry(BootConfig *config, const char *id) {
-        size_t j;
-
-        for (j = 0; j < config->n_entries; j++) {
-                const char* entry_id_old = config->entries[j].id_old;
-                if (streq(config->entries[j].id, id) ||
-                    (entry_id_old && streq(entry_id_old, id)))
-                        return true;
+#define BOOT_CONFIG_NULL              \
+        {                             \
+                .default_entry = -1,  \
+                .selected_entry = -1, \
         }
 
-        return false;
-}
+const char* boot_entry_type_to_string(BootEntryType);
 
-static inline BootEntry* boot_config_default_entry(BootConfig *config) {
+BootEntry* boot_config_find_entry(BootConfig *config, const char *id);
+
+static inline const BootEntry* boot_config_default_entry(const BootConfig *config) {
+        assert(config);
+
         if (config->default_entry < 0)
                 return NULL;
 
+        assert((size_t) config->default_entry < config->n_entries);
         return config->entries + config->default_entry;
 }
 
 void boot_config_free(BootConfig *config);
-int boot_entries_load_config(const char *esp_path, const char *xbootldr_path, BootConfig *config);
-int boot_entries_load_config_auto(const char *override_esp_path, const char *override_xbootldr_path, BootConfig *config);
-int boot_entries_augment_from_loader(BootConfig *config, char **list, bool only_auto);
+
+int boot_loader_read_conf(BootConfig *config, FILE *file, const char *path);
+
+int boot_config_load_type1(
+                BootConfig *config,
+                FILE *f,
+                const char *root,
+                const char *dir,
+                const char *id);
+
+int boot_config_finalize(BootConfig *config);
+int boot_config_load(BootConfig *config, const char *esp_path, const char *xbootldr_path);
+int boot_config_load_auto(BootConfig *config, const char *override_esp_path, const char *override_xbootldr_path);
+int boot_config_augment_from_loader(BootConfig *config, char **list, bool only_auto);
+
+int boot_config_select_special_entries(BootConfig *config, bool skip_efivars);
 
 static inline const char* boot_entry_title(const BootEntry *entry) {
-        return entry->show_title ?: entry->title ?: entry->id;
+        assert(entry);
+
+        return ASSERT_PTR(entry->show_title ?: entry->title ?: entry->id);
 }
 
-int find_esp_and_warn(const char *path, bool unprivileged_mode, char **ret_path, uint32_t *ret_part, uint64_t *ret_pstart, uint64_t *ret_psize, sd_id128_t *ret_uuid);
-int find_xbootldr_and_warn(const char *path, bool unprivileged_mode, char **ret_path,sd_id128_t *ret_uuid);
+int show_boot_entry(
+                const BootEntry *e,
+                bool show_as_default,
+                bool show_as_selected,
+                bool show_reported);
+int show_boot_entries(
+                const BootConfig *config,
+                JsonFormatFlags json_format);
+
+int boot_filename_extract_tries(const char *fname, char **ret_stripped, unsigned *ret_tries_left, unsigned *ret_tries_done);
diff --git a/src/shared/bpf-compat.h b/src/shared/bpf-compat.h
new file mode 100644
index 0000000..9ccb7d8
--- /dev/null
+++ b/src/shared/bpf-compat.h
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+/* libbpf has been moving quickly.
+ * They added new symbols in the 0.x versions and shortly after removed
+ * deprecated symbols in 1.0.
+ * We only need bpf_map_create and libbpf_probe_bpf_prog_type so we work
+ * around the incompatibility here by:
+ *  - declaring both symbols, and looking for either depending on the libbpf
+ *    so version we found
+ *  - having helpers that automatically use the appropriate version behind the
+ *    new API for easy cleanup later
+ *
+ * The advantage of doing this instead of only looking for the symbols declared at
+ * compile time is that we can then load either the old or the new symbols at runtime
+ * regardless of the version we were compiled with */
+
+
+/* declare the struct for libbpf <= 0.6.0 -- it causes no harm on newer versions */
+struct bpf_map_create_opts;
+
+/* new symbols available from 0.7.0.
+ * We need the symbols here:
+ *  - after bpf_map_create_opts struct has been defined for older libbpf
+ *  - before the compat static inline helpers that use them.
+ * When removing this file move these back to bpf-dlopen.h */
+extern int (*sym_bpf_map_create)(enum bpf_map_type,  const char *, __u32, __u32, __u32, const struct bpf_map_create_opts *);
+extern int (*sym_libbpf_probe_bpf_prog_type)(enum bpf_prog_type, const void *);
+
+/* compat symbols removed in libbpf 1.0 */
+extern int (*sym_bpf_create_map)(enum bpf_map_type, int key_size, int value_size, int max_entries, __u32 map_flags);
+extern bool (*sym_bpf_probe_prog_type)(enum bpf_prog_type, __u32);
+
+/* helpers to use the available variant behind new API */
+static inline int compat_bpf_map_create(enum bpf_map_type map_type,
+                const char *map_name,
+                __u32 key_size,
+                __u32 value_size,
+                __u32 max_entries,
+                const struct bpf_map_create_opts *opts) {
+        if (sym_bpf_map_create)
+                return sym_bpf_map_create(map_type, map_name, key_size,
+                                          value_size, max_entries, opts);
+
+        return sym_bpf_create_map(map_type, key_size, value_size, max_entries,
+                                  0 /* opts->map_flags, but opts is always NULL for us so skip build dependency on the type */);
+}
+
+static inline int compat_libbpf_probe_bpf_prog_type(enum bpf_prog_type prog_type, const void *opts) {
+        if (sym_libbpf_probe_bpf_prog_type)
+                return sym_libbpf_probe_bpf_prog_type(prog_type, opts);
+
+        return sym_bpf_probe_prog_type(prog_type, 0);
+}
diff --git a/src/shared/bpf-dlopen.c b/src/shared/bpf-dlopen.c
index 45ab986..15301ae 100644
--- a/src/shared/bpf-dlopen.c
+++ b/src/shared/bpf-dlopen.c
@@ -3,44 +3,138 @@
 #include "dlfcn-util.h"
 #include "bpf-dlopen.h"
 #include "log.h"
+#include "strv.h"
 
 #if HAVE_LIBBPF
-static void *bpf_dl = NULL;
 
-struct bpf_link* (*sym_bpf_program__attach_cgroup)(struct bpf_program *, int);
-long (*sym_libbpf_get_error)(const void *);
+/* libbpf changed types of function prototypes around, so we need to disable some type checking for older
+ * libbpf. We consider everything older than 0.7 too old for accurate type checks. */
+#if defined(__LIBBPF_CURRENT_VERSION_GEQ)
+#if __LIBBPF_CURRENT_VERSION_GEQ(0, 7)
+#define MODERN_LIBBPF 1
+#endif
+#endif
+#if !defined(MODERN_LIBBPF)
+#define MODERN_LIBBPF 0
+#endif
+
+struct bpf_link* (*sym_bpf_program__attach_cgroup)(const struct bpf_program *, int);
+struct bpf_link* (*sym_bpf_program__attach_lsm)(const struct bpf_program *);
 int (*sym_bpf_link__fd)(const struct bpf_link *);
 int (*sym_bpf_link__destroy)(struct bpf_link *);
 int (*sym_bpf_map__fd)(const struct bpf_map *);
 const char* (*sym_bpf_map__name)(const struct bpf_map *);
-int (*sym_bpf_map__resize)(struct bpf_map *, __u32);
+int (*sym_bpf_map_create)(enum bpf_map_type,  const char *, __u32, __u32, __u32, const struct bpf_map_create_opts *);
+int (*sym_bpf_map__set_max_entries)(struct bpf_map *, __u32);
 int (*sym_bpf_map_update_elem)(int, const void *, const void *, __u64);
+int (*sym_bpf_map_delete_elem)(int, const void *);
+int (*sym_bpf_map__set_inner_map_fd)(struct bpf_map *, int);
 int (*sym_bpf_object__open_skeleton)(struct bpf_object_skeleton *, const struct bpf_object_open_opts *);
 int (*sym_bpf_object__load_skeleton)(struct bpf_object_skeleton *);
 int (*sym_bpf_object__attach_skeleton)(struct bpf_object_skeleton *);
 void (*sym_bpf_object__detach_skeleton)(struct bpf_object_skeleton *);
 void (*sym_bpf_object__destroy_skeleton)(struct bpf_object_skeleton *);
-bool (*sym_bpf_probe_prog_type)(enum bpf_prog_type, __u32);
+int (*sym_libbpf_probe_bpf_prog_type)(enum bpf_prog_type, const void *);
 const char* (*sym_bpf_program__name)(const struct bpf_program *);
+libbpf_print_fn_t (*sym_libbpf_set_print)(libbpf_print_fn_t);
+long (*sym_libbpf_get_error)(const void *);
+
+/* compat symbols removed in libbpf 1.0 */
+int (*sym_bpf_create_map)(enum bpf_map_type,  int key_size, int value_size, int max_entries, __u32 map_flags);
+bool (*sym_bpf_probe_prog_type)(enum bpf_prog_type, __u32);
+
+_printf_(2,0)
+static int bpf_print_func(enum libbpf_print_level level, const char *fmt, va_list ap) {
+#if !LOG_TRACE
+        /* libbpf logs a lot of details at its debug level, which we don't need to see. */
+        if (level == LIBBPF_DEBUG)
+                return 0;
+#endif
+        /* All other levels are downgraded to LOG_DEBUG */
+
+        /* errno is used here, on the assumption that if the log message uses %m, errno will be set to
+         * something useful. Otherwise, it shouldn't matter, we may pass 0 or some bogus value. */
+        return log_internalv(LOG_DEBUG, errno, NULL, 0, NULL, fmt, ap);
+}
 
 int dlopen_bpf(void) {
-        return dlopen_many_sym_or_warn(
-                        &bpf_dl, "libbpf.so.0", LOG_DEBUG,
+        void *dl;
+        int r;
+
+        DISABLE_WARNING_DEPRECATED_DECLARATIONS;
+
+        dl = dlopen("libbpf.so.1", RTLD_LAZY);
+        if (!dl) {
+                /* libbpf < 1.0.0 (we rely on 0.1.0+) provide most symbols we care about, but
+                 * unfortunately not all until 0.7.0. See bpf-compat.h for more details.
+                 * Once we consider we can assume 0.7+ is present we can just use the same symbol
+                 * list for both files, and when we assume 1.0+ is present we can remove this dlopen */
+                dl = dlopen("libbpf.so.0", RTLD_LAZY);
+                if (!dl)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                               "neither libbpf.so.1 nor libbpf.so.0 are installed: %s", dlerror());
+
+                /* symbols deprecated in 1.0 we use as compat */
+                r = dlsym_many_or_warn(
+                                dl, LOG_DEBUG,
+#if MODERN_LIBBPF
+                                /* Don't exist anymore in new libbpf, hence cannot type check them */
+                                DLSYM_ARG_FORCE(bpf_create_map),
+                                DLSYM_ARG_FORCE(bpf_probe_prog_type));
+#else
+                                DLSYM_ARG(bpf_create_map),
+                                DLSYM_ARG(bpf_probe_prog_type));
+#endif
+        } else {
+                /* symbols available from 0.7.0 */
+                r = dlsym_many_or_warn(
+                                dl, LOG_DEBUG,
+#if MODERN_LIBBPF
+                                DLSYM_ARG(bpf_map_create),
+                                DLSYM_ARG(libbpf_probe_bpf_prog_type)
+#else
+                                /* These symbols did not exist in old libbpf, hence we cannot type check them */
+                                DLSYM_ARG_FORCE(bpf_map_create),
+                                DLSYM_ARG_FORCE(libbpf_probe_bpf_prog_type)
+#endif
+                );
+        }
+
+        r = dlsym_many_or_warn(
+                        dl, LOG_DEBUG,
                         DLSYM_ARG(bpf_link__destroy),
                         DLSYM_ARG(bpf_link__fd),
                         DLSYM_ARG(bpf_map__fd),
                         DLSYM_ARG(bpf_map__name),
-                        DLSYM_ARG(bpf_map__resize),
+                        DLSYM_ARG(bpf_map__set_max_entries),
                         DLSYM_ARG(bpf_map_update_elem),
+                        DLSYM_ARG(bpf_map_delete_elem),
+                        DLSYM_ARG(bpf_map__set_inner_map_fd),
                         DLSYM_ARG(bpf_object__open_skeleton),
                         DLSYM_ARG(bpf_object__load_skeleton),
                         DLSYM_ARG(bpf_object__attach_skeleton),
                         DLSYM_ARG(bpf_object__detach_skeleton),
                         DLSYM_ARG(bpf_object__destroy_skeleton),
-                        DLSYM_ARG(bpf_probe_prog_type),
+#if MODERN_LIBBPF
                         DLSYM_ARG(bpf_program__attach_cgroup),
+                        DLSYM_ARG(bpf_program__attach_lsm),
+#else
+                        /* libbpf added a "const" to function parameters where it should not have, ignore this type incompatibility */
+                        DLSYM_ARG_FORCE(bpf_program__attach_cgroup),
+                        DLSYM_ARG_FORCE(bpf_program__attach_lsm),
+#endif
                         DLSYM_ARG(bpf_program__name),
+                        DLSYM_ARG(libbpf_set_print),
                         DLSYM_ARG(libbpf_get_error));
+        if (r < 0)
+                return r;
+
+        /* We set the print helper unconditionally. Otherwise libbpf will emit not useful log messages. */
+        (void) sym_libbpf_set_print(bpf_print_func);
+
+        REENABLE_WARNING;
+
+        return r;
 }
 
 #else
diff --git a/src/shared/bpf-dlopen.h b/src/shared/bpf-dlopen.h
index fbb5531..0750abc 100644
--- a/src/shared/bpf-dlopen.h
+++ b/src/shared/bpf-dlopen.h
@@ -6,14 +6,18 @@
 #include <bpf/bpf.h>
 #include <bpf/libbpf.h>
 
-extern struct bpf_link* (*sym_bpf_program__attach_cgroup)(struct bpf_program *, int);
-extern long (*sym_libbpf_get_error)(const void *);
+#include "bpf-compat.h"
+
+extern struct bpf_link* (*sym_bpf_program__attach_cgroup)(const struct bpf_program *, int);
+extern struct bpf_link* (*sym_bpf_program__attach_lsm)(const struct bpf_program *);
 extern int (*sym_bpf_link__fd)(const struct bpf_link *);
 extern int (*sym_bpf_link__destroy)(struct bpf_link *);
 extern int (*sym_bpf_map__fd)(const struct bpf_map *);
 extern const char* (*sym_bpf_map__name)(const struct bpf_map *);
-extern int (*sym_bpf_map__resize)(struct bpf_map *, __u32);
+extern int (*sym_bpf_map__set_max_entries)(struct bpf_map *, __u32);
 extern int (*sym_bpf_map_update_elem)(int, const void *, const void *, __u64);
+extern int (*sym_bpf_map_delete_elem)(int, const void *);
+extern int (*sym_bpf_map__set_inner_map_fd)(struct bpf_map *, int);
 /* The *_skeleton APIs are autogenerated by bpftool, the targets can be found
  * in ./build/src/core/bpf/socket_bind/socket-bind.skel.h */
 extern int (*sym_bpf_object__open_skeleton)(struct bpf_object_skeleton *, const struct bpf_object_open_opts *);
@@ -21,8 +25,9 @@
 extern int (*sym_bpf_object__attach_skeleton)(struct bpf_object_skeleton *);
 extern void (*sym_bpf_object__detach_skeleton)(struct bpf_object_skeleton *);
 extern void (*sym_bpf_object__destroy_skeleton)(struct bpf_object_skeleton *);
-extern bool (*sym_bpf_probe_prog_type)(enum bpf_prog_type, __u32);
 extern const char* (*sym_bpf_program__name)(const struct bpf_program *);
+extern libbpf_print_fn_t (*sym_libbpf_set_print)(libbpf_print_fn_t);
+extern long (*sym_libbpf_get_error)(const void *);
 
 #endif
 
diff --git a/src/shared/bpf-link.c b/src/shared/bpf-link.c
index 720ed40..fea49b2 100644
--- a/src/shared/bpf-link.c
+++ b/src/shared/bpf-link.c
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "bpf-dlopen.h"
 #include "bpf-link.h"
@@ -32,12 +32,12 @@
 }
 
 struct bpf_link *bpf_link_free(struct bpf_link *link) {
-
-        /* Avoid a useless dlopen() if link == NULL */
-        if (!link)
-                return NULL;
-
-        (void) sym_bpf_link__destroy(link);
+        /* If libbpf wasn't dlopen()ed, sym_bpf_link__destroy might be unresolved (NULL), so let's not try to
+         * call it if link is NULL. link might also be a non-null "error pointer", but such a value can only
+         * originate from a call to libbpf, but that means that libbpf is available, and we can let
+         * bpf_link__destroy() handle it. */
+        if (link)
+                (void) sym_bpf_link__destroy(link);
 
         return NULL;
 }
diff --git a/src/shared/bpf-link.h b/src/shared/bpf-link.h
index bb6ac60..38aa080 100644
--- a/src/shared/bpf-link.h
+++ b/src/shared/bpf-link.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #pragma once
 
diff --git a/src/shared/bpf-program.c b/src/shared/bpf-program.c
index 0f865a7..531ae9b 100644
--- a/src/shared/bpf-program.c
+++ b/src/shared/bpf-program.c
@@ -7,6 +7,7 @@
 
 #include "alloc-util.h"
 #include "bpf-program.h"
+#include "errno-util.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "memory-util.h"
@@ -38,7 +39,28 @@
 
 DEFINE_STRING_TABLE_LOOKUP(bpf_cgroup_attach_type, int);
 
-DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(bpf_program_hash_ops, void, trivial_hash_func, trivial_compare_func, bpf_program_unref);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(bpf_program_hash_ops, void, trivial_hash_func, trivial_compare_func, bpf_program_free);
+
+BPFProgram *bpf_program_free(BPFProgram *p) {
+        if (!p)
+                return NULL;
+        /* Unfortunately, the kernel currently doesn't implicitly detach BPF programs from their cgroups when the last
+         * fd to the BPF program is closed. This has nasty side-effects since this means that abnormally terminated
+         * programs that attached one of their BPF programs to a cgroup will leave this program pinned for good with
+         * zero chance of recovery, until the cgroup is removed. This is particularly problematic if the cgroup in
+         * question is the root cgroup (or any other cgroup belonging to a service that cannot be restarted during
+         * operation, such as dbus), as the memory for the BPF program can only be reclaimed through a reboot. To
+         * counter this, we track closely to which cgroup a program was attached to and will detach it on our own
+         * whenever we close the BPF fd. */
+        (void) bpf_program_cgroup_detach(p);
+
+        safe_close(p->kernel_fd);
+        free(p->prog_name);
+        free(p->instructions);
+        free(p->attached_path);
+
+        return mfree(p);
+}
 
  /* struct bpf_prog_info info must be initialized since its value is both input and output
   * for BPF_OBJ_GET_INFO_BY_FD syscall. */
@@ -54,23 +76,30 @@
         attr.info.info_len = info_len;
         attr.info.info = PTR_TO_UINT64(info);
 
-        if (bpf(BPF_OBJ_GET_INFO_BY_FD, &attr, sizeof(attr)) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(bpf(BPF_OBJ_GET_INFO_BY_FD, &attr, sizeof(attr)));
 }
 
-int bpf_program_new(uint32_t prog_type, BPFProgram **ret) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *p = NULL;
+int bpf_program_new(uint32_t prog_type, const char *prog_name, BPFProgram **ret) {
+        _cleanup_(bpf_program_freep) BPFProgram *p = NULL;
+        _cleanup_free_ char *name = NULL;
+
+        if (prog_name) {
+                if (strlen(prog_name) >= BPF_OBJ_NAME_LEN)
+                        return -ENAMETOOLONG;
+
+                name = strdup(prog_name);
+                if (!name)
+                        return -ENOMEM;
+        }
 
         p = new(BPFProgram, 1);
         if (!p)
                 return -ENOMEM;
 
         *p = (BPFProgram) {
-                .n_ref = 1,
                 .prog_type = prog_type,
-                .kernel_fd = -1,
+                .kernel_fd = -EBADF,
+                .prog_name = TAKE_PTR(name),
         };
 
         *ret = TAKE_PTR(p);
@@ -79,7 +108,7 @@
 }
 
 int bpf_program_new_from_bpffs_path(const char *path, BPFProgram **ret) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *p = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *p = NULL;
         struct bpf_prog_info info = {};
         int r;
 
@@ -92,8 +121,7 @@
 
         *p = (BPFProgram) {
                 .prog_type = BPF_PROG_TYPE_UNSPEC,
-                .n_ref = 1,
-                .kernel_fd = -1,
+                .kernel_fd = -EBADF,
         };
 
         r = bpf_program_load_from_bpf_fs(p, path);
@@ -110,27 +138,6 @@
         return 0;
 }
 
-static BPFProgram *bpf_program_free(BPFProgram *p) {
-        assert(p);
-
-        /* Unfortunately, the kernel currently doesn't implicitly detach BPF programs from their cgroups when the last
-         * fd to the BPF program is closed. This has nasty side-effects since this means that abnormally terminated
-         * programs that attached one of their BPF programs to a cgroup will leave this programs pinned for good with
-         * zero chance of recovery, until the cgroup is removed. This is particularly problematic if the cgroup in
-         * question is the root cgroup (or any other cgroup belonging to a service that cannot be restarted during
-         * operation, such as dbus), as the memory for the BPF program can only be reclaimed through a reboot. To
-         * counter this, we track closely to which cgroup a program was attached to and will detach it on our own
-         * whenever we close the BPF fd. */
-        (void) bpf_program_cgroup_detach(p);
-
-        safe_close(p->kernel_fd);
-        free(p->instructions);
-        free(p->attached_path);
-
-        return mfree(p);
-}
-
-DEFINE_TRIVIAL_REF_UNREF_FUNC(BPFProgram, bpf_program, bpf_program_free);
 
 int bpf_program_add_instructions(BPFProgram *p, const struct bpf_insn *instructions, size_t count) {
 
@@ -170,6 +177,8 @@
         attr.log_buf = PTR_TO_UINT64(log_buf);
         attr.log_level = !!log_buf;
         attr.log_size = log_size;
+        if (p->prog_name)
+                strncpy(attr.prog_name, p->prog_name, BPF_OBJ_NAME_LEN - 1);
 
         p->kernel_fd = bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
         if (p->kernel_fd < 0)
@@ -198,7 +207,7 @@
 
 int bpf_program_cgroup_attach(BPFProgram *p, int type, const char *path, uint32_t flags) {
         _cleanup_free_ char *copy = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         union bpf_attr attr;
         int r;
 
@@ -259,7 +268,7 @@
 }
 
 int bpf_program_cgroup_detach(BPFProgram *p) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(p);
 
@@ -293,7 +302,6 @@
 
 int bpf_map_new(enum bpf_map_type type, size_t key_size, size_t value_size, size_t max_entries, uint32_t flags) {
         union bpf_attr attr;
-        int fd;
 
         zero(attr);
         attr.map_type = type;
@@ -302,11 +310,7 @@
         attr.max_entries = max_entries;
         attr.map_flags = flags;
 
-        fd = bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
-        if (fd < 0)
-                return -errno;
-
-        return fd;
+        return RET_NERRNO(bpf(BPF_MAP_CREATE, &attr, sizeof(attr)));
 }
 
 int bpf_map_update_element(int fd, const void *key, void *value) {
@@ -317,10 +321,7 @@
         attr.key = PTR_TO_UINT64(key);
         attr.value = PTR_TO_UINT64(value);
 
-        if (bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr)) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr)));
 }
 
 int bpf_map_lookup_element(int fd, const void *key, void *value) {
@@ -331,10 +332,7 @@
         attr.key = PTR_TO_UINT64(key);
         attr.value = PTR_TO_UINT64(value);
 
-        if (bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr)) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr)));
 }
 
 int bpf_program_pin(int prog_fd, const char *bpffs_path) {
@@ -344,10 +342,7 @@
         attr.pathname = PTR_TO_UINT64((void *) bpffs_path);
         attr.bpf_fd = prog_fd;
 
-        if (bpf(BPF_OBJ_PIN, &attr, sizeof(attr)) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(bpf(BPF_OBJ_PIN, &attr, sizeof(attr)));
 }
 
 int bpf_program_get_id_by_fd(int prog_fd, uint32_t *ret_id) {
@@ -424,8 +419,9 @@
 
 int bpf_program_deserialize_attachment(const char *v, FDSet *fds, BPFProgram **bpfp) {
         _cleanup_free_ char *sfd = NULL, *sat = NULL, *unescaped = NULL;
-        _cleanup_(bpf_program_unrefp) BPFProgram *p = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_(bpf_program_freep) BPFProgram *p = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        ssize_t l;
         int ifd, at, r;
 
         assert(v);
@@ -456,9 +452,9 @@
                 return at;
 
         /* The rest is the path */
-        r = cunescape(v, 0, &unescaped);
-        if (r < 0)
-                return r;
+        l = cunescape(v, 0, &unescaped);
+        if (l < 0)
+                return l;
 
         fd = fdset_remove(fds, ifd);
         if (fd < 0)
@@ -469,7 +465,6 @@
                 return -ENOMEM;
 
         *p = (BPFProgram) {
-                .n_ref = 1,
                 .kernel_fd = TAKE_FD(fd),
                 .prog_type = BPF_PROG_TYPE_UNSPEC,
                 .attached_path = TAKE_PTR(unescaped),
@@ -477,7 +472,7 @@
         };
 
         if (*bpfp)
-                bpf_program_unref(*bpfp);
+                bpf_program_free(*bpfp);
 
         *bpfp = TAKE_PTR(p);
         return 0;
diff --git a/src/shared/bpf-program.h b/src/shared/bpf-program.h
index 908af1a..b640fb9 100644
--- a/src/shared/bpf-program.h
+++ b/src/shared/bpf-program.h
@@ -17,11 +17,10 @@
  * we attach it, but it might happen that we operate with programs that aren't loaded or aren't attached, or
  * where we don't have the code. */
 struct BPFProgram {
-        unsigned n_ref;
-
         /* The loaded BPF program, if loaded */
         int kernel_fd;
         uint32_t prog_type;
+        char *prog_name;
 
         /* The code of it BPF program, if known */
         size_t n_instructions;
@@ -34,10 +33,9 @@
         uint32_t attached_flags;
 };
 
-int bpf_program_new(uint32_t prog_type, BPFProgram **ret);
+int bpf_program_new(uint32_t prog_type, const char *prog_name, BPFProgram **ret);
 int bpf_program_new_from_bpffs_path(const char *path, BPFProgram **ret);
-BPFProgram *bpf_program_ref(BPFProgram *p);
-BPFProgram *bpf_program_unref(BPFProgram *p);
+BPFProgram *bpf_program_free(BPFProgram *p);
 
 int bpf_program_add_instructions(BPFProgram *p, const struct bpf_insn *insn, size_t count);
 int bpf_program_load_kernel(BPFProgram *p, char *log_buf, size_t log_size);
@@ -63,4 +61,4 @@
 int bpf_cgroup_attach_type_from_string(const char *str) _pure_;
 const char *bpf_cgroup_attach_type_to_string(int attach_type) _const_;
 
-DEFINE_TRIVIAL_CLEANUP_FUNC(BPFProgram*, bpf_program_unref);
+DEFINE_TRIVIAL_CLEANUP_FUNC(BPFProgram*, bpf_program_free);
diff --git a/src/shared/btrfs-util.c b/src/shared/btrfs-util.c
index f4e2913..c684057 100644
--- a/src/shared/btrfs-util.c
+++ b/src/shared/btrfs-util.c
@@ -31,7 +31,6 @@
 #include "stat-util.h"
 #include "string-util.h"
 #include "time-util.h"
-#include "util.h"
 
 /* WARNING: Be careful with file system ioctls! When we get an fd, we
  * need to make sure it either refers to only a regular file or
@@ -52,20 +51,22 @@
         return 0;
 }
 
-static int extract_subvolume_name(const char *path, const char **subvolume) {
-        const char *fn;
+static int extract_subvolume_name(const char *path, char **ret) {
+        _cleanup_free_ char *fn = NULL;
         int r;
 
         assert(path);
-        assert(subvolume);
+        assert(ret);
 
-        fn = basename(path);
+        r = path_extract_filename(path, &fn);
+        if (r < 0)
+                return r;
 
         r = validate_subvolume_name(fn);
         if (r < 0)
                 return r;
 
-        *subvolume = fn;
+        *ret = TAKE_PTR(fn);
         return 0;
 }
 
@@ -86,7 +87,7 @@
 }
 
 int btrfs_is_subvol(const char *path) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(path);
 
@@ -99,7 +100,7 @@
 
 int btrfs_subvol_make_fd(int fd, const char *subvolume) {
         struct btrfs_ioctl_vol_args args = {};
-        _cleanup_close_ int real_fd = -1;
+        _cleanup_close_ int real_fd = -EBADF;
         int r;
 
         assert(subvolume);
@@ -108,31 +109,20 @@
         if (r < 0)
                 return r;
 
-        r = fcntl(fd, F_GETFL);
-        if (r < 0)
-                return -errno;
-        if (FLAGS_SET(r, O_PATH)) {
-                /* An O_PATH fd was specified, let's convert here to a proper one, as btrfs ioctl's can't deal with
-                 * O_PATH. */
-
-                real_fd = fd_reopen(fd, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
-                if (real_fd < 0)
-                        return real_fd;
-
-                fd = real_fd;
-        }
+        /* If an O_PATH fd was specified, let's convert here to a proper one, as btrfs ioctl's can't deal
+         * with O_PATH. */
+        fd = fd_reopen_condition(fd, O_RDONLY|O_CLOEXEC|O_DIRECTORY, O_PATH|O_DIRECTORY, &real_fd);
+        if (fd < 0)
+                return fd;
 
         strncpy(args.name, subvolume, sizeof(args.name)-1);
 
-        if (ioctl(fd, BTRFS_IOC_SUBVOL_CREATE, &args) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, BTRFS_IOC_SUBVOL_CREATE, &args));
 }
 
 int btrfs_subvol_make(const char *path) {
-        _cleanup_close_ int fd = -1;
-        const char *subvolume;
+        _cleanup_free_ char *subvolume = NULL;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(path);
@@ -192,14 +182,11 @@
         if (flags == nflags)
                 return 0;
 
-        if (ioctl(fd, BTRFS_IOC_SUBVOL_SETFLAGS, &nflags) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, BTRFS_IOC_SUBVOL_SETFLAGS, &nflags));
 }
 
 int btrfs_subvol_set_read_only(const char *path, bool b) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_NOCTTY|O_CLOEXEC|O_DIRECTORY);
         if (fd < 0)
@@ -238,10 +225,7 @@
         if (r < 0)
                 return r;
 
-        if (ioctl(outfd, BTRFS_IOC_CLONE, infd) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(outfd, BTRFS_IOC_CLONE, infd));
 }
 
 int btrfs_clone_range(int infd, uint64_t in_offset, int outfd, uint64_t out_offset, uint64_t sz) {
@@ -255,26 +239,27 @@
 
         assert(infd >= 0);
         assert(outfd >= 0);
-        assert(sz > 0);
 
         r = fd_verify_regular(outfd);
         if (r < 0)
                 return r;
 
-        if (ioctl(outfd, BTRFS_IOC_CLONE_RANGE, &args) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(outfd, BTRFS_IOC_CLONE_RANGE, &args));
 }
 
 int btrfs_get_block_device_fd(int fd, dev_t *dev) {
         struct btrfs_ioctl_fs_info_args fsi = {};
+        _cleanup_close_ int regfd = -EBADF;
         uint64_t id;
         int r;
 
         assert(fd >= 0);
         assert(dev);
 
+        fd = fd_reopen_condition(fd, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY, O_PATH, &regfd);
+        if (fd < 0)
+                return fd;
+
         r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC);
         if (r < 0)
                 return r;
@@ -329,7 +314,7 @@
 }
 
 int btrfs_get_block_device(const char *path, dev_t *dev) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(path);
         assert(dev);
@@ -364,7 +349,7 @@
 }
 
 int btrfs_subvol_get_id(int fd, const char *subvol, uint64_t *ret) {
-        _cleanup_close_ int subvol_fd = -1;
+        _cleanup_close_ int subvol_fd = -EBADF;
 
         assert(fd >= 0);
         assert(ret);
@@ -528,10 +513,7 @@
         }
 
 finish:
-        if (!found)
-                return -ENODATA;
-
-        return 0;
+        return found ? 0 : -ENODATA;
 }
 
 int btrfs_qgroup_get_quota_fd(int fd, uint64_t qgroupid, BtrfsQuotaInfo *ret) {
@@ -649,7 +631,7 @@
 }
 
 int btrfs_qgroup_get_quota(const char *path, uint64_t qgroupid, BtrfsQuotaInfo *ret) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
         if (fd < 0)
@@ -671,7 +653,7 @@
          * prepared with btrfs_subvol_auto_qgroup_fd() with
          * insert_intermediary_qgroup=true (or equivalent). For others
          * it will return the leaf qgroup instead. The two cases may
-         * be distuingished via the return value, which is 1 in case
+         * be distinguished via the return value, which is 1 in case
          * an appropriate "subtree" qgroup was found, and 0
          * otherwise. */
 
@@ -742,7 +724,7 @@
 }
 
 int btrfs_subvol_get_subtree_quota(const char *path, uint64_t subvol_id, BtrfsQuotaInfo *ret) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
         if (fd < 0)
@@ -751,8 +733,20 @@
         return btrfs_subvol_get_subtree_quota_fd(fd, subvol_id, ret);
 }
 
+int btrfs_defrag_fd(int fd) {
+        int r;
+
+        assert(fd >= 0);
+
+        r = fd_verify_regular(fd);
+        if (r < 0)
+                return r;
+
+        return RET_NERRNO(ioctl(fd, BTRFS_IOC_DEFRAG, NULL));
+}
+
 int btrfs_defrag(const char *p) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(p, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
         if (fd < 0)
@@ -775,14 +769,11 @@
         if (!r)
                 return -ENOTTY;
 
-        if (ioctl(fd, BTRFS_IOC_QUOTA_CTL, &args) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, BTRFS_IOC_QUOTA_CTL, &args));
 }
 
 int btrfs_quota_enable(const char *path, bool b) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
         if (fd < 0)
@@ -833,7 +824,7 @@
 }
 
 int btrfs_qgroup_set_limit(const char *path, uint64_t qgroupid, uint64_t referenced_max) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
         if (fd < 0)
@@ -856,7 +847,7 @@
 }
 
 int btrfs_subvol_set_subtree_quota_limit(const char *path, uint64_t subvol_id, uint64_t referenced_max) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
         if (fd < 0)
@@ -982,19 +973,13 @@
 
         assert(fd >= 0);
 
-        if (ioctl(fd, BTRFS_IOC_QUOTA_RESCAN, &args) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, BTRFS_IOC_QUOTA_RESCAN, &args));
 }
 
 int btrfs_quota_scan_wait(int fd) {
         assert(fd >= 0);
 
-        if (ioctl(fd, BTRFS_IOC_QUOTA_RESCAN_WAIT) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, BTRFS_IOC_QUOTA_RESCAN_WAIT));
 }
 
 int btrfs_quota_scan_ongoing(int fd) {
@@ -1066,7 +1051,7 @@
         };
 
         struct btrfs_ioctl_vol_args vol_args = {};
-        _cleanup_close_ int subvol_fd = -1;
+        _cleanup_close_ int subvol_fd = -EBADF;
         struct stat st;
         bool made_writable = false;
         int r;
@@ -1166,7 +1151,7 @@
                                  * directory of the subvolume. */
                                 r = subvol_remove_children(subvol_fd, p, sh->objectid, flags);
                         else {
-                                _cleanup_close_ int child_fd = -1;
+                                _cleanup_close_ int child_fd = -EBADF;
 
                                 /* Subvolume is somewhere further down,
                                  * hence we need to open the
@@ -1197,8 +1182,8 @@
 }
 
 int btrfs_subvol_remove(const char *path, BtrfsRemoveFlags flags) {
-        _cleanup_close_ int fd = -1;
-        const char *subvolume;
+        _cleanup_free_ char *subvolume = NULL;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(path);
@@ -1431,7 +1416,7 @@
                 .flags = flags & BTRFS_SNAPSHOT_READ_ONLY ? BTRFS_SUBVOL_RDONLY : 0,
                 .fd = old_fd,
         };
-        _cleanup_close_ int subvolume_fd = -1;
+        _cleanup_close_ int subvolume_fd = -EBADF;
         uint64_t new_subvol_id;
         int r;
 
@@ -1485,7 +1470,7 @@
                 FOREACH_BTRFS_IOCTL_SEARCH_HEADER(i, sh, args) {
                         _cleanup_free_ char *p = NULL, *c = NULL, *np = NULL;
                         const struct btrfs_root_ref *ref;
-                        _cleanup_close_ int old_child_fd = -1, new_child_fd = -1;
+                        _cleanup_close_ int old_child_fd = -EBADF, new_child_fd = -EBADF;
 
                         btrfs_ioctl_search_args_set(&args, sh);
 
@@ -1595,8 +1580,8 @@
                 copy_progress_bytes_t progress_bytes,
                 void *userdata) {
 
-        _cleanup_close_ int new_fd = -1;
-        const char *subvolume;
+        _cleanup_free_ char *subvolume = NULL;
+        _cleanup_close_ int new_fd = -EBADF;
         int r;
 
         assert(old_fd >= 0);
@@ -1613,7 +1598,7 @@
                         return -EISDIR;
 
                 r = btrfs_subvol_make(new_path);
-                if (r == -ENOTTY && (flags & BTRFS_SNAPSHOT_FALLBACK_DIRECTORY)) {
+                if (ERRNO_IS_NOT_SUPPORTED(r) && (flags & BTRFS_SNAPSHOT_FALLBACK_DIRECTORY)) {
                         /* If the destination doesn't support subvolumes, then use a plain directory, if that's requested. */
                         if (mkdir(new_path, 0755) < 0)
                                 return -errno;
@@ -1624,8 +1609,16 @@
 
                 r = copy_directory_fd_full(
                                 old_fd, new_path,
-                                COPY_MERGE|COPY_REFLINK|COPY_SAME_MOUNT|COPY_HARDLINKS|(FLAGS_SET(flags, BTRFS_SNAPSHOT_SIGINT) ? COPY_SIGINT : 0),
-                                progress_path, progress_bytes, userdata);
+                                COPY_MERGE_EMPTY|
+                                COPY_REFLINK|
+                                COPY_SAME_MOUNT|
+                                COPY_HARDLINKS|
+                                COPY_ALL_XATTRS|
+                                (FLAGS_SET(flags, BTRFS_SNAPSHOT_SIGINT) ? COPY_SIGINT : 0)|
+                                (FLAGS_SET(flags, BTRFS_SNAPSHOT_SIGTERM) ? COPY_SIGTERM : 0),
+                                progress_path,
+                                progress_bytes,
+                                userdata);
                 if (r < 0)
                         goto fallback_fail;
 
@@ -1670,7 +1663,7 @@
                 copy_progress_bytes_t progress_bytes,
                 void *userdata) {
 
-        _cleanup_close_ int old_fd = -1;
+        _cleanup_close_ int old_fd = -EBADF;
 
         assert(old_path);
         assert(new_path);
@@ -1771,6 +1764,7 @@
 
 int btrfs_subvol_auto_qgroup_fd(int fd, uint64_t subvol_id, bool insert_intermediary_qgroup) {
         _cleanup_free_ uint64_t *qgroups = NULL;
+        _cleanup_close_ int real_fd = -EBADF;
         uint64_t parent_subvol;
         bool changed = false;
         int n = 0, r;
@@ -1814,6 +1808,11 @@
          * qgroup that then includes all its own child subvolumes.
          */
 
+        /* Turn this into a proper fd, if it is currently O_PATH */
+        fd = fd_reopen_condition(fd, O_RDONLY|O_CLOEXEC, O_PATH, &real_fd);
+        if (fd < 0)
+                return fd;
+
         if (subvol_id == 0) {
                 r = btrfs_is_subvol_fd(fd);
                 if (r < 0)
@@ -1917,7 +1916,7 @@
 }
 
 int btrfs_subvol_auto_qgroup(const char *path, uint64_t subvol_id, bool create_intermediary_qgroup) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(path, O_RDONLY|O_NOCTTY|O_CLOEXEC|O_DIRECTORY);
         if (fd < 0)
@@ -1987,3 +1986,21 @@
 
         return -ENXIO;
 }
+
+int btrfs_forget_device(const char *path) {
+        _cleanup_close_ int control_fd = -EBADF;
+        struct btrfs_ioctl_vol_args args = {};
+
+        assert(path);
+
+        if (strlen(path) > BTRFS_PATH_NAME_MAX)
+                return -E2BIG;
+
+        strcpy(args.name, path);
+
+        control_fd = open("/dev/btrfs-control", O_RDWR|O_CLOEXEC);
+        if (control_fd < 0)
+                return -errno;
+
+        return RET_NERRNO(ioctl(control_fd, BTRFS_IOC_FORGET_DEV, &args));
+}
diff --git a/src/shared/btrfs-util.h b/src/shared/btrfs-util.h
index 7b18f57..080d5a6 100644
--- a/src/shared/btrfs-util.h
+++ b/src/shared/btrfs-util.h
@@ -35,6 +35,7 @@
         BTRFS_SNAPSHOT_FALLBACK_DIRECTORY = 1 << 4, /* If the destination doesn't support subvolumes, reflink/copy instead */
         BTRFS_SNAPSHOT_FALLBACK_IMMUTABLE = 1 << 5, /* When we can't create a subvolume, use the FS_IMMUTABLE attribute for indicating read-only */
         BTRFS_SNAPSHOT_SIGINT             = 1 << 6, /* Check for SIGINT regularly, and return EINTR if seen */
+        BTRFS_SNAPSHOT_SIGTERM            = 1 << 7, /* Ditto, but for SIGTERM */
 } BtrfsSnapshotFlags;
 
 typedef enum BtrfsRemoveFlags {
@@ -51,6 +52,7 @@
 int btrfs_get_block_device_fd(int fd, dev_t *dev);
 int btrfs_get_block_device(const char *path, dev_t *dev);
 
+int btrfs_defrag_fd(int fd);
 int btrfs_defrag(const char *p);
 
 int btrfs_quota_enable_fd(int fd, bool b);
@@ -134,3 +136,5 @@
 
         return S_ISDIR(st->st_mode) && st->st_ino == 256;
 }
+
+int btrfs_forget_device(const char *path);
diff --git a/src/shared/bus-get-properties.c b/src/shared/bus-get-properties.c
index feb6d38..8b4f66b 100644
--- a/src/shared/bus-get-properties.c
+++ b/src/shared/bus-get-properties.c
@@ -130,7 +130,7 @@
                 int z;
 
                 /* Chop off "Soft" suffix */
-                s = is_soft ? strndupa(property, is_soft - property) : property;
+                s = is_soft ? strndupa_safe(property, is_soft - property) : property;
 
                 /* Skip over any prefix, such as "Default" */
                 assert_se(p = strstr(s, "Limit"));
diff --git a/src/shared/bus-get-properties.h b/src/shared/bus-get-properties.h
index 26f3e85..d048913 100644
--- a/src/shared/bus-get-properties.h
+++ b/src/shared/bus-get-properties.h
@@ -75,11 +75,10 @@
                      void *userdata,                                    \
                      sd_bus_error *error) {                             \
                                                                         \
-                data_type *data = userdata;                             \
+                data_type *data = ASSERT_PTR(userdata);                 \
                                                                         \
                 assert(bus);                                            \
                 assert(reply);                                          \
-                assert(data);                                           \
                                                                         \
                 return sd_bus_message_append(reply, bus_type,           \
                                              get2(get1(data)));         \
diff --git a/src/shared/bus-locator.c b/src/shared/bus-locator.c
index 3754d1d..5b9a6db 100644
--- a/src/shared/bus-locator.c
+++ b/src/shared/bus-locator.c
@@ -63,6 +63,12 @@
         .interface = "org.freedesktop.timedate1"
 };
 
+const BusLocator* const bus_hostname = &(BusLocator){
+        .destination = "org.freedesktop.hostname1",
+        .path = "/org/freedesktop/hostname1",
+        .interface = "org.freedesktop.hostname1"
+};
+
 /* Shorthand flavors of the sd-bus convenience helpers with destination,path,interface strings encapsulated
  * within a single struct. */
 int bus_call_method_async(
diff --git a/src/shared/bus-locator.h b/src/shared/bus-locator.h
index fe3b876..9662c90 100644
--- a/src/shared/bus-locator.h
+++ b/src/shared/bus-locator.h
@@ -19,6 +19,7 @@
 extern const BusLocator* const bus_resolve_mgr;
 extern const BusLocator* const bus_systemd_mgr;
 extern const BusLocator* const bus_timedate;
+extern const BusLocator* const bus_hostname;
 
 /* Shorthand flavors of the sd-bus convenience helpers with destination,path,interface strings encapsulated
  * within a single struct. */
diff --git a/src/shared/bus-map-properties.c b/src/shared/bus-map-properties.c
index 8460856..e5e8933 100644
--- a/src/shared/bus-map-properties.c
+++ b/src/shared/bus-map-properties.c
@@ -30,7 +30,7 @@
         char ***p = userdata;
         int r;
 
-        r = bus_message_read_strv_extend(m, &l);
+        r = sd_bus_message_read_strv_extend(m, &l);
         if (r < 0)
                 return r;
 
@@ -75,7 +75,7 @@
                 _cleanup_strv_free_ char **l = NULL;
                 char ***p = userdata;
 
-                r = bus_message_read_strv_extend(m, &l);
+                r = sd_bus_message_read_strv_extend(m, &l);
                 if (r < 0)
                         return r;
 
diff --git a/src/shared/bus-object.c b/src/shared/bus-object.c
index f2e5391..4ed5215 100644
--- a/src/shared/bus-object.c
+++ b/src/shared/bus-object.c
@@ -156,10 +156,10 @@
         if (impl != main_impl)
                 bus_introspect_implementation(&intro, impl);
 
-        _cleanup_set_free_ Set *nodes = NULL;
+        _cleanup_ordered_set_free_ OrderedSet *nodes = NULL;
 
         for (size_t i = 0; impl->children && impl->children[i]; i++) {
-                r = set_put_strdup(&nodes, impl->children[i]->path);
+                r = ordered_set_put_strdup(&nodes, impl->children[i]->path);
                 if (r < 0)
                         return log_oom();
         }
diff --git a/src/shared/bus-polkit.c b/src/shared/bus-polkit.c
index 14122e0..85b907f 100644
--- a/src/shared/bus-polkit.c
+++ b/src/shared/bus-polkit.c
@@ -36,7 +36,6 @@
                 sd_bus_message *m,
                 const char **l) {
 
-        const char **k, **v;
         int r;
 
         assert(m);
@@ -198,11 +197,10 @@
 }
 
 static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
-        AsyncPolkitQuery *q = userdata;
+        AsyncPolkitQuery *q = ASSERT_PTR(userdata);
         int r;
 
         assert(reply);
-        assert(q);
 
         assert(q->slot);
         q->slot = sd_bus_slot_unref(q->slot);
@@ -259,11 +257,6 @@
                 Hashmap **registry,
                 sd_bus_error *ret_error) {
 
-#if ENABLE_POLKIT
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *pk = NULL;
-        AsyncPolkitQuery *q;
-        int c;
-#endif
         const char *sender;
         int r;
 
@@ -276,7 +269,7 @@
                 return r;
 
 #if ENABLE_POLKIT
-        q = hashmap_get(*registry, call);
+        AsyncPolkitQuery *q = hashmap_get(*registry, call);
         if (q) {
                 int authorized, challenge;
 
@@ -332,7 +325,9 @@
                 return -EBADMSG;
 
 #if ENABLE_POLKIT
-        c = sd_bus_message_get_allow_interactive_authorization(call);
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *pk = NULL;
+
+        int c = sd_bus_message_get_allow_interactive_authorization(call);
         if (c < 0)
                 return c;
         if (c > 0)
@@ -408,8 +403,11 @@
         return -EACCES;
 }
 
-void bus_verify_polkit_async_registry_free(Hashmap *registry) {
+Hashmap *bus_verify_polkit_async_registry_free(Hashmap *registry) {
 #if ENABLE_POLKIT
-        hashmap_free_with_destructor(registry, async_polkit_query_free);
+        return hashmap_free_with_destructor(registry, async_polkit_query_free);
+#else
+        assert(hashmap_isempty(registry));
+        return hashmap_free(registry);
 #endif
 }
diff --git a/src/shared/bus-polkit.h b/src/shared/bus-polkit.h
index 91a88a2..e2a3b7e 100644
--- a/src/shared/bus-polkit.h
+++ b/src/shared/bus-polkit.h
@@ -8,4 +8,4 @@
 int bus_test_polkit(sd_bus_message *call, int capability, const char *action, const char **details, uid_t good_user, bool *_challenge, sd_bus_error *e);
 
 int bus_verify_polkit_async(sd_bus_message *call, int capability, const char *action, const char **details, bool interactive, uid_t good_user, Hashmap **registry, sd_bus_error *error);
-void bus_verify_polkit_async_registry_free(Hashmap *registry);
+Hashmap *bus_verify_polkit_async_registry_free(Hashmap *registry);
diff --git a/src/shared/bus-print-properties.c b/src/shared/bus-print-properties.c
index b459219..9369866 100644
--- a/src/shared/bus-print-properties.c
+++ b/src/shared/bus-print-properties.c
@@ -105,20 +105,14 @@
                  * should it turn out to not be sufficient */
 
                 if (endswith(name, "Timestamp") ||
-                    STR_IN_SET(name, "NextElapseUSecRealtime", "LastTriggerUSec", "TimeUSec", "RTCTimeUSec")) {
-                        char timestamp[FORMAT_TIMESTAMP_MAX];
-                        const char *t;
+                    STR_IN_SET(name, "NextElapseUSecRealtime", "LastTriggerUSec", "TimeUSec", "RTCTimeUSec"))
 
-                        t = format_timestamp(timestamp, sizeof(timestamp), u);
-                        bus_print_property_value(name, expected_value, flags, t);
+                        bus_print_property_value(name, expected_value, flags, FORMAT_TIMESTAMP(u));
 
-                } else if (strstr(name, "USec")) {
-                        char timespan[FORMAT_TIMESPAN_MAX];
+                else if (strstr(name, "USec"))
+                        bus_print_property_value(name, expected_value, flags, FORMAT_TIMESPAN(u, 0));
 
-                        (void) format_timespan(timespan, sizeof(timespan), u, 0);
-                        bus_print_property_value(name, expected_value, flags, timespan);
-
-                } else if (streq(name, "CoredumpFilter"))
+                else if (streq(name, "CoredumpFilter"))
                         bus_print_property_valuef(name, expected_value, flags, "0x%"PRIx64, u);
 
                 else if (streq(name, "RestrictNamespaces")) {
@@ -142,7 +136,7 @@
                 } else if (streq(name, "MountFlags")) {
                         const char *result;
 
-                        result = mount_propagation_flags_to_string(u);
+                        result = mount_propagation_flag_to_string(u);
                         if (!result)
                                 return -EINVAL;
 
@@ -157,7 +151,10 @@
 
                         bus_print_property_value(name, expected_value, flags, s);
 
-                } else if ((STR_IN_SET(name, "CPUWeight", "StartupCPUWeight", "IOWeight", "StartupIOWeight") && u == CGROUP_WEIGHT_INVALID) ||
+                } else if (STR_IN_SET(name, "CPUWeight", "StartupCPUWeight") && u == CGROUP_WEIGHT_IDLE)
+                        bus_print_property_value(name, expected_value, flags, "idle");
+
+                else if ((STR_IN_SET(name, "CPUWeight", "StartupCPUWeight", "IOWeight", "StartupIOWeight") && u == CGROUP_WEIGHT_INVALID) ||
                            (STR_IN_SET(name, "CPUShares", "StartupCPUShares") && u == CGROUP_CPU_SHARES_INVALID) ||
                            (STR_IN_SET(name, "BlockIOWeight", "StartupBlockIOWeight") && u == CGROUP_BLKIO_WEIGHT_INVALID) ||
                            (STR_IN_SET(name, "MemoryCurrent", "TasksCurrent") && u == UINT64_MAX) ||
@@ -165,7 +162,7 @@
 
                         bus_print_property_value(name, expected_value, flags, "[not set]");
 
-                else if ((STR_IN_SET(name, "DefaultMemoryLow", "DefaultMemoryMin", "MemoryLow", "MemoryHigh", "MemoryMax", "MemorySwapMax", "MemoryLimit", "MemoryAvailable") && u == CGROUP_LIMIT_MAX) ||
+                else if ((STR_IN_SET(name, "DefaultMemoryLow", "DefaultMemoryMin", "MemoryLow", "MemoryHigh", "MemoryMax", "MemorySwapMax", "MemoryZSwapMax", "MemoryLimit", "MemoryAvailable") && u == CGROUP_LIMIT_MAX) ||
                          (STR_IN_SET(name, "TasksMax", "DefaultTasksMax") && u == UINT64_MAX) ||
                          (startswith(name, "Limit") && u == UINT64_MAX) ||
                          (startswith(name, "DefaultLimit") && u == UINT64_MAX))
@@ -361,7 +358,7 @@
                 if (!name_with_equal)
                         return log_oom();
 
-                if (!filter || strv_find(filter, name) ||
+                if (!filter || strv_contains(filter, name) ||
                     (expected_value = strv_find_startswith(filter, name_with_equal))) {
                         r = sd_bus_message_peek_type(m, NULL, &contents);
                         if (r < 0)
diff --git a/src/shared/bus-unit-procs.c b/src/shared/bus-unit-procs.c
index 6f4a711..8b462b5 100644
--- a/src/shared/bus-unit-procs.c
+++ b/src/shared/bus-unit-procs.c
@@ -1,9 +1,10 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "bus-locator.h"
 #include "bus-unit-procs.h"
+#include "glyph-util.h"
 #include "hashmap.h"
 #include "list.h"
-#include "locale-util.h"
 #include "macro.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -46,7 +47,7 @@
                 if (!e)
                         return -EINVAL;
 
-                pp = strndupa(path, e - path);
+                pp = strndupa_safe(path, e - path);
 
                 r = add_cgroup(cgroups, pp, false, &parent);
                 if (r < 0)
@@ -188,16 +189,18 @@
                         more = i+1 < n || cg->children;
                         special = special_glyph(more ? SPECIAL_GLYPH_TREE_BRANCH : SPECIAL_GLYPH_TREE_RIGHT);
 
-                        fprintf(stdout, "%s%s%*"PID_PRI" %s\n",
+                        fprintf(stdout, "%s%s%s%*"PID_PRI" %s%s\n",
                                 prefix,
                                 special,
+                                ansi_grey(),
                                 width, pids[i],
-                                name);
+                                name,
+                                ansi_normal());
                 }
         }
 
         if (cg->children) {
-                struct CGroupInfo **children, *child;
+                struct CGroupInfo **children;
                 size_t n = 0, i;
 
                 /* Order subcgroups by their name */
@@ -215,9 +218,7 @@
                         const char *name, *special;
                         bool more;
 
-                        child = children[i];
-
-                        name = strrchr(child->cgroup_path, '/');
+                        name = strrchr(children[i]->cgroup_path, '/');
                         if (!name)
                                 return -EINVAL;
                         name++;
@@ -236,7 +237,7 @@
                         if (!pp)
                                 return -ENOMEM;
 
-                        r = dump_processes(cgroups, child->cgroup_path, pp, n_columns, flags);
+                        r = dump_processes(cgroups, children[i]->cgroup_path, pp, n_columns, flags);
                         if (r < 0)
                                 return r;
                 }
@@ -344,11 +345,9 @@
 
         prefix = strempty(prefix);
 
-        r = sd_bus_call_method(
+        r = bus_call_method(
                         bus,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        "org.freedesktop.systemd1.Manager",
+                        bus_systemd_mgr,
                         "GetUnitProcesses",
                         error,
                         &reply,
@@ -379,7 +378,7 @@
                 if (r == -ENOMEM)
                         goto finish;
                 if (r < 0)
-                        log_warning_errno(r, "Invalid process description in GetUnitProcesses reply: cgroup=\"%s\" pid="PID_FMT" command=\"%s\", ignoring: %m",
+                        log_warning_errno(r, "Invalid process description in GetUnitProcesses reply: cgroup=\"%s\" pid=%u command=\"%s\", ignoring: %m",
                                           path, pid, name);
         }
 
diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
index d3a5b25..6d4f3fb 100644
--- a/src/shared/bus-unit-util.c
+++ b/src/shared/bus-unit-util.c
@@ -19,15 +19,18 @@
 #include "hexdecoct.h"
 #include "hostname-util.h"
 #include "in-addr-util.h"
+#include "ioprio-util.h"
 #include "ip-protocol-list.h"
 #include "libmount-util.h"
 #include "locale-util.h"
 #include "log.h"
+#include "macro.h"
 #include "missing_fs.h"
 #include "mountpoint-util.h"
 #include "nsflags.h"
 #include "numa-util.h"
-#include "parse-socket-bind-item.h"
+#include "open-file.h"
+#include "parse-helpers.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "percent-util.h"
@@ -128,7 +131,8 @@
 DEFINE_BUS_APPEND_PARSE_PTR("t", uint64_t, uint64_t, cg_blkio_weight_parse);
 DEFINE_BUS_APPEND_PARSE_PTR("t", uint64_t, uint64_t, cg_cpu_shares_parse);
 DEFINE_BUS_APPEND_PARSE_PTR("t", uint64_t, uint64_t, cg_weight_parse);
-DEFINE_BUS_APPEND_PARSE_PTR("t", uint64_t, unsigned long, mount_propagation_flags_from_string);
+DEFINE_BUS_APPEND_PARSE_PTR("t", uint64_t, uint64_t, cg_cpu_weight_parse);
+DEFINE_BUS_APPEND_PARSE_PTR("t", uint64_t, unsigned long, mount_propagation_flag_from_string);
 DEFINE_BUS_APPEND_PARSE_PTR("t", uint64_t, uint64_t, safe_atou64);
 DEFINE_BUS_APPEND_PARSE_PTR("u", uint32_t, mode_t, parse_mode);
 DEFINE_BUS_APPEND_PARSE_PTR("u", uint32_t, unsigned, safe_atou);
@@ -407,6 +411,23 @@
         return 1;
 }
 
+static int bus_append_open_file(sd_bus_message *m, const char *field, const char *eq) {
+        _cleanup_(open_file_freep) OpenFile *of = NULL;
+        int r;
+
+        assert(m);
+
+        r = open_file_parse(eq, &of);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse OpenFile= setting: %m");
+
+        r = sd_bus_message_append(m, "(sv)", field, "a(sst)", (size_t) 1, of->path, of->fdname, of->flags);
+        if (r < 0)
+                return bus_log_create_error(r);
+
+        return 1;
+}
+
 static int bus_append_ip_address_access(sd_bus_message *m, int family, const union in_addr_union *prefix, unsigned char prefixlen) {
         int r;
 
@@ -464,8 +485,10 @@
                 return bus_append_parse_boolean(m, field, eq);
 
         if (STR_IN_SET(field, "CPUWeight",
-                              "StartupCPUWeight",
-                              "IOWeight",
+                              "StartupCPUWeight"))
+                return bus_append_cg_cpu_weight_parse(m, field, eq);
+
+        if (STR_IN_SET(field, "IOWeight",
                               "StartupIOWeight"))
                 return bus_append_cg_weight_parse(m, field, eq);
 
@@ -474,7 +497,9 @@
                 return bus_append_cg_cpu_shares_parse(m, field, eq);
 
         if (STR_IN_SET(field, "AllowedCPUs",
-                              "AllowedMemoryNodes")) {
+                              "StartupAllowedCPUs",
+                              "AllowedMemoryNodes",
+                              "StartupAllowedMemoryNodes")) {
                 _cleanup_(cpu_set_reset) CPUSet cpuset = {};
                 _cleanup_free_ uint8_t *array = NULL;
                 size_t allocated;
@@ -516,6 +541,7 @@
                               "MemoryHigh",
                               "MemoryMax",
                               "MemorySwapMax",
+                              "MemoryZSwapMax",
                               "MemoryLimit",
                               "TasksMax")) {
 
@@ -603,7 +629,7 @@
 
                         e = strchr(eq, ' ');
                         if (e) {
-                                path = strndupa(eq, e - eq);
+                                path = strndupa_safe(eq, e - eq);
                                 rwm = e+1;
                         }
 
@@ -629,7 +655,7 @@
                                                        "Failed to parse %s value %s.",
                                                        field, eq);
 
-                        path = strndupa(eq, e - eq);
+                        path = strndupa_safe(eq, e - eq);
                         bandwidth = e+1;
 
                         if (streq(bandwidth, "infinity"))
@@ -663,7 +689,7 @@
                                                        "Failed to parse %s value %s.",
                                                        field, eq);
 
-                        path = strndupa(eq, e - eq);
+                        path = strndupa_safe(eq, e - eq);
                         weight = e+1;
 
                         r = safe_atou64(weight, &u);
@@ -694,7 +720,7 @@
                                                        "Failed to parse %s value %s.",
                                                        field, eq);
 
-                        path = strndupa(eq, e - eq);
+                        path = strndupa_safe(eq, e - eq);
                         target = e+1;
 
                         r = parse_sec(target, &usec);
@@ -891,7 +917,8 @@
 }
 
 static int bus_append_automount_property(sd_bus_message *m, const char *field, const char *eq) {
-        if (streq(field, "Where"))
+        if (STR_IN_SET(field, "Where",
+                              "ExtraOptions"))
                 return bus_append_string(m, field, eq);
 
         if (streq(field, "DirectoryMode"))
@@ -967,10 +994,8 @@
                               "InaccessiblePaths",
                               "ExecPaths",
                               "NoExecPaths",
-                              "RuntimeDirectory",
-                              "StateDirectory",
-                              "CacheDirectory",
-                              "LogsDirectory",
+                              "ExecSearchPath",
+                              "ExtensionDirectories",
                               "ConfigurationDirectory",
                               "SupplementaryGroups",
                               "SystemCallArchitectures"))
@@ -1022,11 +1047,13 @@
         if (streq(field, "LogRateLimitIntervalSec"))
                 return bus_append_parse_sec_rename(m, field, eq);
 
-        if (streq(field, "LogRateLimitBurst"))
+        if (STR_IN_SET(field, "LogRateLimitBurst",
+                              "TTYRows",
+                              "TTYColumns"))
                 return bus_append_safe_atou(m, field, eq);
 
         if (streq(field, "MountFlags"))
-                return bus_append_mount_propagation_flags_from_string(m, field, eq);
+                return bus_append_mount_propagation_flag_from_string(m, field, eq);
 
         if (STR_IN_SET(field, "Environment",
                               "UnsetEnvironment",
@@ -1046,12 +1073,12 @@
                 return 1;
         }
 
-        if (streq(field, "SetCredential")) {
+        if (STR_IN_SET(field, "SetCredential", "SetCredentialEncrypted")) {
                 r = sd_bus_message_open_container(m, 'r', "sv");
                 if (r < 0)
                         return bus_log_create_error(r);
 
-                r = sd_bus_message_append_basic(m, 's', "SetCredential");
+                r = sd_bus_message_append_basic(m, 's', field);
                 if (r < 0)
                         return bus_log_create_error(r);
 
@@ -1062,21 +1089,16 @@
                 if (isempty(eq))
                         r = sd_bus_message_append(m, "a(say)", 0);
                 else {
-                        _cleanup_free_ char *word = NULL, *unescaped = NULL;
+                        _cleanup_free_ char *word = NULL;
                         const char *p = eq;
-                        int l;
 
                         r = extract_first_word(&p, &word, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
                         if (r == -ENOMEM)
                                 return log_oom();
                         if (r < 0)
-                                return log_error_errno(r, "Failed to parse SetCredential= parameter: %s", eq);
+                                return log_error_errno(r, "Failed to parse %s= parameter: %s", field, eq);
                         if (r == 0 || !p)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing argument to SetCredential=.");
-
-                        l = cunescape(p, UNESCAPE_ACCEPT_NUL, &unescaped);
-                        if (l < 0)
-                                return log_error_errno(l, "Failed to unescape SetCredential= value: %s", p);
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing argument to %s=.", field);
 
                         r = sd_bus_message_open_container(m, 'a', "(say)");
                         if (r < 0)
@@ -1090,7 +1112,25 @@
                         if (r < 0)
                                 return bus_log_create_error(r);
 
-                        r = sd_bus_message_append_array(m, 'y', unescaped, l);
+                        if (streq(field, "SetCredentialEncrypted")) {
+                                _cleanup_free_ void *decoded = NULL;
+                                size_t decoded_size;
+
+                                r = unbase64mem(p, SIZE_MAX, &decoded, &decoded_size);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to base64 decode encrypted credential: %m");
+
+                                r = sd_bus_message_append_array(m, 'y', decoded, decoded_size);
+                        } else {
+                                _cleanup_free_ char *unescaped = NULL;
+                                ssize_t l;
+
+                                l = cunescape(p, UNESCAPE_ACCEPT_NUL, &unescaped);
+                                if (l < 0)
+                                        return log_error_errno(l, "Failed to unescape %s= value: %s", field, p);
+
+                                r = sd_bus_message_append_array(m, 'y', unescaped, l);
+                        }
                         if (r < 0)
                                 return bus_log_create_error(r);
 
@@ -1114,12 +1154,12 @@
                 return 1;
         }
 
-        if (streq(field, "LoadCredential")) {
+        if (STR_IN_SET(field, "LoadCredential", "LoadCredentialEncrypted")) {
                 r = sd_bus_message_open_container(m, 'r', "sv");
                 if (r < 0)
                         return bus_log_create_error(r);
 
-                r = sd_bus_message_append_basic(m, 's', "LoadCredential");
+                r = sd_bus_message_append_basic(m, 's', field);
                 if (r < 0)
                         return bus_log_create_error(r);
 
@@ -1137,9 +1177,12 @@
                         if (r == -ENOMEM)
                                 return log_oom();
                         if (r < 0)
-                                return log_error_errno(r, "Failed to parse LoadCredential= parameter: %s", eq);
-                        if (r == 0 || !p)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing argument to LoadCredential=.");
+                                return log_error_errno(r, "Failed to parse %s= parameter: %s", field, eq);
+                        if (r == 0)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing argument to %s=.", field);
+
+                        if (isempty(p)) /* If only one field is specified, then this means "inherit from above" */
+                                p = eq;
 
                         r = sd_bus_message_append(m, "a(ss)", 1, word, p);
                 }
@@ -1193,6 +1236,16 @@
                 return 1;
         }
 
+        if (streq(field, "LogFilterPatterns")) {
+                r = sd_bus_message_append(m, "(sv)", "LogFilterPatterns", "a(bs)", 1,
+                                          eq[0] != '~',
+                                          eq[0] != '~' ? eq : eq + 1);
+                if (r < 0)
+                        return bus_log_create_error(r);
+
+                return 1;
+        }
+
         if (STR_IN_SET(field, "StandardInput",
                               "StandardOutput",
                               "StandardError")) {
@@ -1220,18 +1273,19 @@
 
         if (streq(field, "StandardInputText")) {
                 _cleanup_free_ char *unescaped = NULL;
+                ssize_t l;
 
-                r = cunescape(eq, 0, &unescaped);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to unescape text '%s': %m", eq);
+                l = cunescape(eq, 0, &unescaped);
+                if (l < 0)
+                        return log_error_errno(l, "Failed to unescape text '%s': %m", eq);
 
                 if (!strextend(&unescaped, "\n"))
                         return log_oom();
 
-                /* Note that we don't expand specifiers here, but that should be OK, as this is a programmatic
-                 * interface anyway */
+                /* Note that we don't expand specifiers here, but that should be OK, as this is a
+                 * programmatic interface anyway */
 
-                return bus_append_byte_array(m, field, unescaped, strlen(unescaped));
+                return bus_append_byte_array(m, field, unescaped, l + 1);
         }
 
         if (streq(field, "StandardInputData")) {
@@ -1369,8 +1423,10 @@
         }
 
         if (STR_IN_SET(field, "RestrictAddressFamilies",
+                              "RestrictFileSystems",
                               "SystemCallFilter",
-                              "SystemCallLog")) {
+                              "SystemCallLog",
+                              "RestrictNetworkInterfaces")) {
                 int allow_list = 1;
                 const char *p = eq;
 
@@ -1654,7 +1710,6 @@
 
         if (streq(field, "RootImageOptions")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **first = NULL, **second = NULL;
                 const char *p = eq;
 
                 r = sd_bus_message_open_container(m, SD_BUS_TYPE_STRUCT, "sv");
@@ -1907,6 +1962,124 @@
                 return 1;
         }
 
+        if (STR_IN_SET(field, "StateDirectory", "RuntimeDirectory", "CacheDirectory", "LogsDirectory")) {
+                _cleanup_strv_free_ char **symlinks = NULL, **sources = NULL;
+                const char *p = eq;
+
+                /* Adding new directories is supported from both *DirectorySymlink methods and the
+                 * older ones, so first parse the input, and if we are given a new-style src:dst
+                 * tuple use the new method, else use the old one. */
+
+                for (;;) {
+                        _cleanup_free_ char *tuple = NULL, *source = NULL, *destination = NULL;
+
+                        r = extract_first_word(&p, &tuple, NULL, EXTRACT_UNQUOTE);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse argument: %m");
+                        if (r == 0)
+                                break;
+
+                        const char *t = tuple;
+                        r = extract_many_words(&t, ":", EXTRACT_UNQUOTE|EXTRACT_DONT_COALESCE_SEPARATORS, &source, &destination, NULL);
+                        if (r <= 0)
+                                return log_error_errno(r ?: SYNTHETIC_ERRNO(EINVAL), "Failed to parse argument: %m");
+
+                        path_simplify(source);
+
+                        if (isempty(destination)) {
+                                r = strv_consume(&sources, TAKE_PTR(source));
+                                if (r < 0)
+                                        return bus_log_create_error(r);
+                        } else {
+                                path_simplify(destination);
+
+                                r = strv_consume_pair(&symlinks, TAKE_PTR(source), TAKE_PTR(destination));
+                                if (r < 0)
+                                        return log_oom();
+                        }
+                }
+
+                if (!strv_isempty(sources)) {
+                        r = sd_bus_message_open_container(m, SD_BUS_TYPE_STRUCT, "sv");
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_append_basic(m, SD_BUS_TYPE_STRING, field);
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_open_container(m, 'v', "as");
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_append_strv(m, sources);
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_close_container(m);
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_close_container(m);
+                        if (r < 0)
+                                return bus_log_create_error(r);
+                }
+
+                /* For State and Runtime directories we support an optional destination parameter, which
+                 * will be used to create a symlink to the source. But it is new so we cannot change the
+                 * old DBUS signatures, so append a new message type. */
+                if (!strv_isempty(symlinks)) {
+                        const char *symlink_field;
+
+                        r = sd_bus_message_open_container(m, SD_BUS_TYPE_STRUCT, "sv");
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        if (streq(field, "StateDirectory"))
+                                symlink_field = "StateDirectorySymlink";
+                        else if (streq(field, "RuntimeDirectory"))
+                                symlink_field = "RuntimeDirectorySymlink";
+                        else if (streq(field, "CacheDirectory"))
+                                symlink_field = "CacheDirectorySymlink";
+                        else if (streq(field, "LogsDirectory"))
+                                symlink_field = "LogsDirectorySymlink";
+                        else
+                                assert_not_reached();
+
+                        r = sd_bus_message_append_basic(m, SD_BUS_TYPE_STRING, symlink_field);
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_open_container(m, 'v', "a(sst)");
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_open_container(m, 'a', "(sst)");
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        STRV_FOREACH_PAIR(source, destination, symlinks) {
+                                r = sd_bus_message_append(m, "(sst)", *source, *destination, 0);
+                                if (r < 0)
+                                        return bus_log_create_error(r);
+                        }
+
+                        r = sd_bus_message_close_container(m);
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_close_container(m);
+                        if (r < 0)
+                                return bus_log_create_error(r);
+
+                        r = sd_bus_message_close_container(m);
+                        if (r < 0)
+                                return bus_log_create_error(r);
+                }
+
+                return 1;
+        }
+
         return 0;
 }
 
@@ -1921,7 +2094,8 @@
         if (STR_IN_SET(field, "KillSignal",
                               "RestartKillSignal",
                               "FinalKillSignal",
-                              "WatchdogSignal"))
+                              "WatchdogSignal",
+                              "ReloadSignal"))
                 return bus_append_signal_from_string(m, field, eq);
 
         return 0;
@@ -1974,6 +2148,12 @@
                 return 1;
         }
 
+        if (streq(field, "TriggerLimitBurst"))
+                return bus_append_safe_atou(m, field, eq);
+
+        if (streq(field, "TriggerLimitIntervalSec"))
+                return bus_append_parse_sec_rename(m, field, eq);
+
         return 0;
 }
 
@@ -1981,9 +2161,20 @@
         if (streq(field, "RuntimeMaxSec"))
                 return bus_append_parse_sec_rename(m, field, eq);
 
+        if (streq(field, "RuntimeRandomizedExtraSec"))
+                return bus_append_parse_sec_rename(m, field, eq);
+
         if (streq(field, "TimeoutStopSec"))
                 return bus_append_parse_sec_rename(m, field, eq);
 
+        /* Scope units don't have execution context but we still want to allow setting these two,
+         * so let's handle them separately. */
+        if (STR_IN_SET(field, "User", "Group"))
+                return bus_append_string(m, field, eq);
+
+        if (streq(field, "OOMPolicy"))
+                return bus_append_string(m, field, eq);
+
         return 0;
 }
 
@@ -1992,6 +2183,7 @@
 
         if (STR_IN_SET(field, "PIDFile",
                               "Type",
+                              "ExitType",
                               "Restart",
                               "BusName",
                               "NotifyAccess",
@@ -2013,6 +2205,7 @@
                               "TimeoutStopSec",
                               "TimeoutAbortSec",
                               "RuntimeMaxSec",
+                              "RuntimeRandomizedExtraSec",
                               "WatchdogSec"))
                 return bus_append_parse_sec_rename(m, field, eq);
 
@@ -2126,6 +2319,9 @@
                 return 1;
         }
 
+        if (streq(field, "OpenFile"))
+                return bus_append_open_file(m, field, eq);
+
         return 0;
 }
 
@@ -2379,7 +2575,7 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Not an assignment: %s", assignment);
 
-        field = strndupa(assignment, eq - assignment);
+        field = strndupa_safe(assignment, eq - assignment);
         eq++;
 
         switch (t) {
@@ -2480,12 +2676,10 @@
         case UNIT_TARGET:
         case UNIT_DEVICE:
         case UNIT_SWAP:
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Not supported unit type");
+                break;
 
         default:
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Invalid unit type");
+                assert_not_reached();
         }
 
         r = bus_append_unit_property(m, field, eq);
@@ -2497,7 +2691,6 @@
 }
 
 int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char **l) {
-        char **i;
         int r;
 
         assert(m);
@@ -2511,11 +2704,11 @@
         return 0;
 }
 
-int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, size_t *n_changes) {
+int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, InstallChange **changes, size_t *n_changes) {
         const char *type, *path, *source;
         int r;
 
-        /* changes is dereferenced when calling unit_file_dump_changes() later,
+        /* changes is dereferenced when calling install_changes_dump() later,
          * so we have to make sure this is not NULL. */
         assert(changes);
         assert(n_changes);
@@ -2525,16 +2718,18 @@
                 return bus_log_parse_error(r);
 
         while ((r = sd_bus_message_read(m, "(sss)", &type, &path, &source)) > 0) {
-                /* We expect only "success" changes to be sent over the bus.
-                   Hence, reject anything negative. */
-                int ch = unit_file_change_type_from_string(type);
-                if (ch < 0) {
-                        log_notice_errno(ch, "Manager reported unknown change type \"%s\" for path \"%s\", ignoring.",
+                InstallChangeType t;
+
+                /* We expect only "success" changes to be sent over the bus. Hence, reject anything
+                 * negative. */
+                t = install_change_type_from_string(type);
+                if (t < 0) {
+                        log_notice_errno(t, "Manager reported unknown change type \"%s\" for path \"%s\", ignoring.",
                                          type, path);
                         continue;
                 }
 
-                r = unit_file_changes_add(changes, n_changes, ch, path, source);
+                r = install_changes_add(changes, n_changes, t, path, source);
                 if (r < 0)
                         return r;
         }
@@ -2545,7 +2740,7 @@
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        unit_file_dump_changes(0, NULL, *changes, *n_changes, quiet);
+        install_changes_dump(0, NULL, *changes, *n_changes, quiet);
         return 0;
 }
 
@@ -2558,7 +2753,7 @@
         if (!path)
                 return log_oom();
 
-        /* This function warns on it's own, because otherwise it'd be awkward to pass
+        /* This function warns on its own, because otherwise it'd be awkward to pass
          * the dbus error message around. */
 
         r = sd_bus_get_property_string(
diff --git a/src/shared/bus-unit-util.h b/src/shared/bus-unit-util.h
index 999caf6..789a142 100644
--- a/src/shared/bus-unit-util.h
+++ b/src/shared/bus-unit-util.h
@@ -25,7 +25,7 @@
 int bus_append_unit_property_assignment(sd_bus_message *m, UnitType t, const char *assignment);
 int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char **l);
 
-int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, size_t *n_changes);
+int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, InstallChange **changes, size_t *n_changes);
 
 int unit_load_state(sd_bus *bus, const char *name, char **load_state);
 
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 64ca679..d09ec51 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -23,10 +23,9 @@
 #include "stdio-util.h"
 
 static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
-        sd_event *e = userdata;
+        sd_event *e = ASSERT_PTR(userdata);
 
         assert(m);
-        assert(e);
 
         sd_bus_close(sd_bus_message_get_bus(m));
         sd_event_exit(e, 0);
@@ -34,6 +33,24 @@
         return 1;
 }
 
+int bus_log_address_error(int r, BusTransport transport) {
+        bool hint = transport == BUS_TRANSPORT_LOCAL && r == -ENOMEDIUM;
+
+        return log_error_errno(r,
+                               hint ? "Failed to set bus address: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)" :
+                                      "Failed to set bus address: %m");
+}
+
+int bus_log_connect_error(int r, BusTransport transport) {
+        bool hint_vars = transport == BUS_TRANSPORT_LOCAL && r == -ENOMEDIUM,
+             hint_addr = transport == BUS_TRANSPORT_LOCAL && ERRNO_IS_PRIVILEGE(r);
+
+        return log_error_errno(r,
+                               r == hint_vars ? "Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)" :
+                               r == hint_addr ? "Failed to connect to bus: Operation not permitted (consider using --machine=<user>@.host --user to connect to bus of other user)" :
+                                                "Failed to connect to bus: %m");
+}
+
 int bus_async_unregister_and_exit(sd_event *e, sd_bus *bus, const char *name) {
         const char *match;
         const char *unique;
@@ -179,14 +196,14 @@
         return 1;
 }
 
-int bus_connect_system_systemd(sd_bus **_bus) {
+int bus_connect_system_systemd(sd_bus **ret_bus) {
         _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
         int r;
 
-        assert(_bus);
+        assert(ret_bus);
 
         if (geteuid() != 0)
-                return sd_bus_default_system(_bus);
+                return sd_bus_default_system(ret_bus);
 
         /* If we are root then let's talk directly to the system
          * instance, instead of going via the bus */
@@ -201,28 +218,27 @@
 
         r = sd_bus_start(bus);
         if (r < 0)
-                return sd_bus_default_system(_bus);
+                return sd_bus_default_system(ret_bus);
 
         r = bus_check_peercred(bus);
         if (r < 0)
                 return r;
 
-        *_bus = TAKE_PTR(bus);
-
+        *ret_bus = TAKE_PTR(bus);
         return 0;
 }
 
-int bus_connect_user_systemd(sd_bus **_bus) {
+int bus_connect_user_systemd(sd_bus **ret_bus) {
         _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
         _cleanup_free_ char *ee = NULL;
         const char *e;
         int r;
 
-        assert(_bus);
+        assert(ret_bus);
 
         e = secure_getenv("XDG_RUNTIME_DIR");
         if (!e)
-                return sd_bus_default_user(_bus);
+                return sd_bus_default_user(ret_bus);
 
         ee = bus_address_escape(e);
         if (!ee)
@@ -238,14 +254,13 @@
 
         r = sd_bus_start(bus);
         if (r < 0)
-                return sd_bus_default_user(_bus);
+                return sd_bus_default_user(ret_bus);
 
         r = bus_check_peercred(bus);
         if (r < 0)
                 return r;
 
-        *_bus = TAKE_PTR(bus);
-
+        *ret_bus = TAKE_PTR(bus);
         return 0;
 }
 
@@ -291,7 +306,7 @@
                 break;
 
         default:
-                assert_not_reached("Hmm, unknown transport type.");
+                assert_not_reached();
         }
         if (r < 0)
                 return r;
@@ -305,8 +320,6 @@
 }
 
 int bus_connect_transport_systemd(BusTransport transport, const char *host, bool user, sd_bus **bus) {
-        int r;
-
         assert(transport >= 0);
         assert(transport < _BUS_TRANSPORT_MAX);
         assert(bus);
@@ -318,29 +331,23 @@
 
         case BUS_TRANSPORT_LOCAL:
                 if (user)
-                        r = bus_connect_user_systemd(bus);
-                else {
-                        if (sd_booted() <= 0)
-                                /* Print a friendly message when the local system is actually not running systemd as PID 1. */
-                                return log_error_errno(SYNTHETIC_ERRNO(EHOSTDOWN),
-                                                       "System has not been booted with systemd as init system (PID 1). Can't operate.");
-                        r = bus_connect_system_systemd(bus);
-                }
-                break;
+                        return bus_connect_user_systemd(bus);
+
+                if (sd_booted() <= 0)
+                        /* Print a friendly message when the local system is actually not running systemd as PID 1. */
+                        return log_error_errno(SYNTHETIC_ERRNO(EHOSTDOWN),
+                                               "System has not been booted with systemd as init system (PID 1). Can't operate.");
+                return bus_connect_system_systemd(bus);
 
         case BUS_TRANSPORT_REMOTE:
-                r = sd_bus_open_system_remote(bus, host);
-                break;
+                return sd_bus_open_system_remote(bus, host);
 
         case BUS_TRANSPORT_MACHINE:
-                r = sd_bus_open_system_machine(bus, host);
-                break;
+                return sd_bus_open_system_machine(bus, host);
 
         default:
-                assert_not_reached("Hmm, unknown transport type.");
+                assert_not_reached();
         }
-
-        return r;
 }
 
 /**
@@ -472,7 +479,6 @@
 
 int bus_track_add_name_many(sd_bus_track *t, char **l) {
         int r = 0;
-        char **i;
 
         assert(t);
 
@@ -544,7 +550,6 @@
 
 int bus_reply_pair_array(sd_bus_message *m, char **l) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        char **k, **v;
         int r;
 
         assert(m);
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index e0d4d5d..955cdcb 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -33,28 +33,14 @@
 
 int bus_check_peercred(sd_bus *c);
 
-int bus_connect_system_systemd(sd_bus **_bus);
-int bus_connect_user_systemd(sd_bus **_bus);
+int bus_connect_system_systemd(sd_bus **ret_bus);
+int bus_connect_user_systemd(sd_bus **ret_bus);
 
 int bus_connect_transport(BusTransport transport, const char *host, bool user, sd_bus **bus);
 int bus_connect_transport_systemd(BusTransport transport, const char *host, bool user, sd_bus **bus);
 
-#define bus_log_address_error(r)                                        \
-        ({                                                              \
-                int _k = (r);                                           \
-                log_error_errno(_k,                                     \
-                                _k == -ENOMEDIUM ? "Failed to set bus address: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)" : \
-                                                   "Failed to set bus address: %m"); \
-        })
-
-#define bus_log_connect_error(r)                                        \
-        ({                                                              \
-                int _k = (r);                                           \
-                log_error_errno(_k,                                     \
-                                _k == -ENOMEDIUM       ? "Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)" : \
-                                ERRNO_IS_PRIVILEGE(_k) ? "Failed to connect to bus: Operation not permitted (consider using --machine=<user>@.host --user to connect to bus of other user)" : \
-                                                         "Failed to connect to bus: %m"); \
-        })
+int bus_log_address_error(int r, BusTransport transport);
+int bus_log_connect_error(int r, BusTransport transport);
 
 #define bus_log_parse_error(r)                                  \
         log_error_errno(r, "Failed to parse bus message: %m")
diff --git a/src/shared/bus-wait-for-jobs.c b/src/shared/bus-wait-for-jobs.c
index 0cd47d5..10e3a8e 100644
--- a/src/shared/bus-wait-for-jobs.c
+++ b/src/shared/bus-wait-for-jobs.c
@@ -34,13 +34,12 @@
 
 static int match_job_removed(sd_bus_message *m, void *userdata, sd_bus_error *error) {
         const char *path, *unit, *result;
-        BusWaitForJobs *d = userdata;
+        BusWaitForJobs *d = ASSERT_PTR(userdata);
         uint32_t id;
         char *found;
         int r;
 
         assert(m);
-        assert(d);
 
         r = sd_bus_message_read(m, "uoss", &id, &path, &unit, &result);
         if (r < 0) {
diff --git a/src/shared/bus-wait-for-units.c b/src/shared/bus-wait-for-units.c
index c867f1c..0dd2a29 100644
--- a/src/shared/bus-wait-for-units.c
+++ b/src/shared/bus-wait-for-units.c
@@ -105,10 +105,9 @@
 }
 
 static int match_disconnected(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        BusWaitForUnits *d = userdata;
+        BusWaitForUnits *d = ASSERT_PTR(userdata);
 
         assert(m);
-        assert(d);
 
         log_error("Warning! D-Bus connection terminated.");
 
@@ -229,13 +228,11 @@
                 sd_bus_error *error,
                 void *userdata) {
 
-        WaitForItem *item = userdata;
+        WaitForItem *item = ASSERT_PTR(userdata);
         const char *path;
         uint32_t id;
         int r;
 
-        assert(item);
-
         r = sd_bus_message_read(m, "(uo)", &id, &path);
         if (r < 0)
                 return r;
@@ -267,12 +264,10 @@
 }
 
 static int on_properties_changed(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        WaitForItem *item = userdata;
+        WaitForItem *item = ASSERT_PTR(userdata);
         const char *interface;
         int r;
 
-        assert(item);
-
         r = sd_bus_message_read(m, "s", &interface);
         if (r < 0) {
                 log_debug_errno(r, "Failed to parse PropertiesChanged signal: %m");
@@ -290,12 +285,10 @@
 }
 
 static int on_get_all_properties(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
-        WaitForItem *item = userdata;
+        WaitForItem *item = ASSERT_PTR(userdata);
         const sd_bus_error *e;
         int r;
 
-        assert(item);
-
         e = sd_bus_message_get_error(m);
         if (e) {
                 BusWaitForUnits *d = item->parent;
diff --git a/src/shared/calendarspec.c b/src/shared/calendarspec.c
index 238766c..86a6d3f 100644
--- a/src/shared/calendarspec.c
+++ b/src/shared/calendarspec.c
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/mman.h>
+#include <unistd.h>
 
 #include "alloc-util.h"
 #include "calendarspec.h"
@@ -75,26 +76,21 @@
 }
 
 static void normalize_chain(CalendarComponent **c) {
-        CalendarComponent **b, *i, **j, *next;
-        size_t n = 0, k;
-
         assert(c);
 
-        for (i = *c; i; i = i->next) {
+        size_t n = 0;
+        for (CalendarComponent *i = *c; i; i = i->next) {
                 n++;
 
-                /*
-                 * While we're counting the chain, also normalize `stop`
-                 * so the length of the range is a multiple of `repeat`
-                 */
+                /* While we're counting the chain, also normalize 'stop'
+                 * so the length of the range is a multiple of 'repeat'. */
                 if (i->stop > i->start && i->repeat > 0)
                         i->stop -= (i->stop - i->start) % i->repeat;
 
-                /* If a repeat value is specified, but it cannot even be triggered once, let's suppress
-                 * it.
+                /* If a repeat value is specified, but it cannot even be triggered once, let's suppress it.
                  *
-                 * Similar, if the stop value is the same as the start value, then let's just make this a
-                 * non-repeating chain element */
+                 * Similarly, if the stop value is the same as the start value, then let's just make this a
+                 * non-repeating chain element. */
                 if ((i->stop > i->start && i->repeat > 0 && i->start + i->repeat > i->stop) ||
                     i->start == i->stop) {
                         i->repeat = 0;
@@ -105,17 +101,18 @@
         if (n <= 1)
                 return;
 
-        j = b = newa(CalendarComponent*, n);
-        for (i = *c; i; i = i->next)
+        CalendarComponent **b, **j;
+        b = j = newa(CalendarComponent*, n);
+        for (CalendarComponent *i = *c; i; i = i->next)
                 *(j++) = i;
 
         typesafe_qsort(b, n, component_compare);
 
         b[n-1]->next = NULL;
-        next = b[n-1];
+        CalendarComponent *next = b[n-1];
 
         /* Drop non-unique entries */
-        for (k = n-1; k > 0; k--) {
+        for (size_t k = n-1; k > 0; k--) {
                 if (component_compare(&b[k-1], &next) == 0) {
                         free(b[k-1]);
                         continue;
@@ -148,7 +145,7 @@
         }
 }
 
-int calendar_spec_normalize(CalendarSpec *c) {
+static void calendar_spec_normalize(CalendarSpec *c) {
         assert(c);
 
         if (streq_ptr(c->timezone, "UTC")) {
@@ -170,8 +167,6 @@
         normalize_chain(&c->hour);
         normalize_chain(&c->minute);
         normalize_chain(&c->microsecond);
-
-        return 0;
 }
 
 static bool chain_valid(CalendarComponent *c, int from, int to, bool end_of_month) {
@@ -252,7 +247,7 @@
                 "Thu",
                 "Fri",
                 "Sat",
-                "Sun"
+                "Sun",
         };
 
         int l, x;
@@ -293,17 +288,24 @@
         }
 }
 
-static void format_chain(FILE *f, int space, const CalendarComponent *c, bool usec) {
+static bool chain_is_star(const CalendarComponent *c, bool usec) {
+        /* Return true if the whole chain can be replaced by '*'.
+         * This happens when the chain is empty or one of the components covers all. */
+        if (!c)
+                return true;
+        if (usec)
+                for (; c; c = c->next)
+                        if (c->start == 0 && c->stop < 0 && c->repeat == USEC_PER_SEC)
+                                return true;
+        return false;
+}
+
+static void _format_chain(FILE *f, int space, const CalendarComponent *c, bool start, bool usec) {
         int d = usec ? (int) USEC_PER_SEC : 1;
 
         assert(f);
 
-        if (!c) {
-                fputc('*', f);
-                return;
-        }
-
-        if (usec && c->start == 0 && c->repeat == USEC_PER_SEC && !c->next) {
+        if (start && chain_is_star(c, usec)) {
                 fputc('*', f);
                 return;
         }
@@ -326,10 +328,14 @@
 
         if (c->next) {
                 fputc(',', f);
-                format_chain(f, space, c->next, usec);
+                _format_chain(f, space, c->next, false, usec);
         }
 }
 
+static void format_chain(FILE *f, int space, const CalendarComponent *c, bool usec) {
+        _format_chain(f, space, c, /* start = */ true, usec);
+}
+
 int calendar_spec_to_string(const CalendarSpec *c, char **p) {
         char *buf = NULL;
         size_t sz = 0;
@@ -407,7 +413,7 @@
                 { "Saturday",  5 },
                 { "Sat",       5 },
                 { "Sunday",    6 },
-                { "Sun",       6 }
+                { "Sun",       6 },
         };
 
         int l = -1;
@@ -434,12 +440,10 @@
                         c->weekdays_bits |= 1 << day_nr[i].nr;
 
                         if (l >= 0) {
-                                int j;
-
                                 if (l > day_nr[i].nr)
                                         return -EINVAL;
 
-                                for (j = l + 1; j < day_nr[i].nr; j++)
+                                for (int j = l + 1; j < day_nr[i].nr; j++)
                                         c->weekdays_bits |= 1 << j;
                         }
 
@@ -517,7 +521,7 @@
         const char *e = NULL;
         int r;
 
-        if (!isdigit(**p))
+        if (!ascii_isdigit(**p))
                 return -EINVAL;
 
         r = parse_one_number(*p, &e, &value);
@@ -1089,9 +1093,7 @@
                         return -EINVAL;
         }
 
-        r = calendar_spec_normalize(c);
-        if (r < 0)
-                return r;
+        calendar_spec_normalize(c);
 
         if (!calendar_spec_valid(c))
                 return -EINVAL;
diff --git a/src/shared/calendarspec.h b/src/shared/calendarspec.h
index 3bfe82d..5a04ac0 100644
--- a/src/shared/calendarspec.h
+++ b/src/shared/calendarspec.h
@@ -7,7 +7,6 @@
 #include <stdbool.h>
 
 #include "time-util.h"
-#include "util.h"
 
 typedef struct CalendarComponent {
         int start;
@@ -35,7 +34,6 @@
 
 CalendarSpec* calendar_spec_free(CalendarSpec *c);
 
-int calendar_spec_normalize(CalendarSpec *spec);
 bool calendar_spec_valid(CalendarSpec *spec);
 
 int calendar_spec_to_string(const CalendarSpec *spec, char **p);
diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c
index f197f71..65be851 100644
--- a/src/shared/cgroup-setup.c
+++ b/src/shared/cgroup-setup.c
@@ -1,22 +1,83 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <ftw.h>
 #include <unistd.h>
 
 #include "cgroup-setup.h"
 #include "cgroup-util.h"
 #include "errno-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "fs-util.h"
+#include "missing_threads.h"
+#include "mkdir.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "proc-cmdline.h"
+#include "process-util.h"
+#include "recurse-dir.h"
 #include "stdio-util.h"
 #include "string-util.h"
-#include "fs-util.h"
-#include "mkdir.h"
-#include "process-util.h"
-#include "fileio.h"
 #include "user-util.h"
-#include "fd-util.h"
+#include "virt.h"
+
+static int cg_any_controller_used_for_v1(void) {
+        _cleanup_free_ char *buf = NULL;
+        _cleanup_strv_free_ char **lines = NULL;
+        int r;
+
+        r = read_full_virtual_file("/proc/cgroups", &buf, NULL);
+        if (r < 0)
+                return log_debug_errno(r, "Could not read /proc/cgroups, ignoring: %m");
+
+        r = strv_split_newlines_full(&lines, buf, 0);
+        if (r < 0)
+                return r;
+
+        /* The intention of this is to check if the fully unified cgroup tree setup is possible, meaning all
+         * enabled kernel cgroup controllers are currently not in use by cgroup1.  For reference:
+         * https://systemd.io/CGROUP_DELEGATION/#three-different-tree-setups-
+         *
+         * Note that this is typically only useful to check inside a container where we don't know what
+         * cgroup tree setup is in use by the host; if the host is using legacy or hybrid, we can't use
+         * unified since some or all controllers would be missing. This is not the best way to detect this,
+         * as whatever container manager created our container should have mounted /sys/fs/cgroup
+         * appropriately, but in case that wasn't done, we try to detect if it's possible for us to use
+         * unified cgroups. */
+        STRV_FOREACH(line, lines) {
+                _cleanup_free_ char *name = NULL, *hierarchy_id = NULL, *num = NULL, *enabled = NULL;
+
+                /* Skip header line */
+                if (startswith(*line, "#"))
+                        continue;
+
+                const char *p = *line;
+                r = extract_many_words(&p, NULL, 0, &name, &hierarchy_id, &num, &enabled, NULL);
+                if (r < 0)
+                        return log_debug_errno(r, "Error parsing /proc/cgroups line, ignoring: %m");
+                else if (r < 4) {
+                        log_debug("Invalid /proc/cgroups line, ignoring.");
+                        continue;
+                }
+
+                /* Ignore disabled controllers. */
+                if (streq(enabled, "0"))
+                        continue;
+
+                /* Ignore controllers we don't care about. */
+                if (cgroup_controller_from_string(name) < 0)
+                        continue;
+
+                /* Since the unified cgroup doesn't use multiple hierarchies, if any controller has a
+                 * non-zero hierarchy_id that means it's in use already in a legacy (or hybrid) cgroup v1
+                 * hierarchy, and can't be used in a unified cgroup. */
+                if (!streq(hierarchy_id, "0")) {
+                        log_debug("Cgroup controller %s in use by legacy v1 hierarchy.", name);
+                        return 1;
+                }
+        }
+
+        return 0;
+}
 
 bool cg_is_unified_wanted(void) {
         static thread_local int wanted = -1;
@@ -45,6 +106,10 @@
         if (r > 0 && streq_ptr(c, "all"))
                 return (wanted = true);
 
+        /* If any controller is in use as v1, don't use unified. */
+        if (cg_any_controller_used_for_v1() > 0)
+                return (wanted = false);
+
         return (wanted = is_default);
 }
 
@@ -109,6 +174,12 @@
         return 0;
 }
 
+int cg_cpu_weight_parse(const char *s, uint64_t *ret) {
+        if (streq_ptr(s, "idle"))
+                return *ret = CGROUP_WEIGHT_IDLE;
+        return cg_weight_parse(s, ret);
+}
+
 int cg_cpu_shares_parse(const char *s, uint64_t *ret) {
         uint64_t u;
         int r;
@@ -149,19 +220,23 @@
         return 0;
 }
 
-static int trim_cb(const char *path, const struct stat *sb, int typeflag, struct FTW *ftwbuf) {
-        assert(path);
-        assert(sb);
-        assert(ftwbuf);
+static int trim_cb(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
 
-        if (typeflag != FTW_DP)
-                return 0;
+        /* Failures to delete inner cgroup we ignore (but debug log in case error code is unexpected) */
+        if (event == RECURSE_DIR_LEAVE &&
+            de->d_type == DT_DIR &&
+            unlinkat(dir_fd, de->d_name, AT_REMOVEDIR) < 0 &&
+            !IN_SET(errno, ENOENT, ENOTEMPTY, EBUSY))
+                log_debug_errno(errno, "Failed to trim inner cgroup %s, ignoring: %m", path);
 
-        if (ftwbuf->level < 1)
-                return 0;
-
-        (void) rmdir(path);
-        return 0;
+        return RECURSE_DIR_CONTINUE;
 }
 
 int cg_trim(const char *controller, const char *path, bool delete_root) {
@@ -169,32 +244,41 @@
         int r, q;
 
         assert(path);
+        assert(controller);
 
         r = cg_get_path(controller, path, NULL, &fs);
         if (r < 0)
                 return r;
 
-        errno = 0;
-        if (nftw(fs, trim_cb, 64, FTW_DEPTH|FTW_MOUNT|FTW_PHYS) != 0) {
-                if (errno == ENOENT)
-                        r = 0;
-                else
-                        r = errno_or_else(EIO);
-        }
+        r = recurse_dir_at(
+                        AT_FDCWD,
+                        fs,
+                        /* statx_mask= */ 0,
+                        /* n_depth_max= */ UINT_MAX,
+                        RECURSE_DIR_ENSURE_TYPE,
+                        trim_cb,
+                        NULL);
+        if (r == -ENOENT) /* non-existing is the ultimate trimming, hence no error */
+                r = 0;
+        else if (r < 0)
+                log_debug_errno(r, "Failed to iterate through cgroup %s: %m", path);
 
-        if (delete_root) {
-                if (rmdir(fs) < 0 && errno != ENOENT)
-                        return -errno;
+        /* If we shall delete the top-level cgroup, then propagate the faiure to do so (except if it is
+         * already gone anyway). Also, let's debug log about this failure, except if the error code is an
+         * expected one. */
+        if (delete_root && !empty_or_root(path) &&
+            rmdir(fs) < 0 && errno != ENOENT) {
+                if (!IN_SET(errno, ENOTEMPTY, EBUSY))
+                        log_debug_errno(errno, "Failed to trim cgroup %s: %m", path);
+                if (r >= 0)
+                        r = -errno;
         }
 
         q = cg_hybrid_unified();
         if (q < 0)
                 return q;
-        if (q > 0 && streq(controller, SYSTEMD_CGROUP_CONTROLLER)) {
-                q = cg_trim(SYSTEMD_CGROUP_CONTROLLER_LEGACY, path, delete_root);
-                if (q < 0)
-                        log_warning_errno(q, "Failed to trim compat systemd cgroup %s: %m", path);
-        }
+        if (q > 0 && streq(controller, SYSTEMD_CGROUP_CONTROLLER))
+                (void) cg_trim(SYSTEMD_CGROUP_CONTROLLER_LEGACY, path, delete_root);
 
         return r;
 }
@@ -214,7 +298,7 @@
         if (r < 0)
                 return r;
 
-        r = mkdir_errno_wrapper(fs, 0755);
+        r = RET_NERRNO(mkdir(fs, 0755));
         if (r == -EEXIST)
                 return 0;
         if (r < 0)
@@ -268,6 +352,9 @@
         xsprintf(c, PID_FMT "\n", pid);
 
         r = write_string_file(fs, c, WRITE_STRING_FILE_DISABLE_BUFFER);
+        if (r == -EOPNOTSUPP && cg_is_threaded(controller, path) > 0)
+                /* When the threaded mode is used, we cannot read/write the file. Let's return recognizable error. */
+                return -EUCLEAN;
         if (r < 0)
                 return r;
 
@@ -682,6 +769,8 @@
                 /* Remember first error and try continuing */
                 q = cg_migrate_recursive_fallback(SYSTEMD_CGROUP_CONTROLLER, from, cgroup_controller_to_string(c), to, 0);
                 r = (r < 0) ? r : q;
+
+                done |= CGROUP_MASK_EXTEND_JOINED(bit);
         }
 
         return r;
diff --git a/src/shared/cgroup-setup.h b/src/shared/cgroup-setup.h
index 7eabce2..95a5153 100644
--- a/src/shared/cgroup-setup.h
+++ b/src/shared/cgroup-setup.h
@@ -12,6 +12,7 @@
 bool cg_is_hybrid_wanted(void);
 
 int cg_weight_parse(const char *s, uint64_t *ret);
+int cg_cpu_weight_parse(const char *s, uint64_t *ret);
 int cg_cpu_shares_parse(const char *s, uint64_t *ret);
 int cg_blkio_weight_parse(const char *s, uint64_t *ret);
 
diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
index c324652..2d2858c 100644
--- a/src/shared/cgroup-show.c
+++ b/src/shared/cgroup-show.c
@@ -12,10 +12,13 @@
 #include "cgroup-show.h"
 #include "cgroup-util.h"
 #include "env-file.h"
+#include "escape.h"
 #include "fd-util.h"
 #include "format-util.h"
+#include "hostname-util.h"
 #include "locale-util.h"
 #include "macro.h"
+#include "nulstr-util.h"
 #include "output-mode.h"
 #include "parse-util.h"
 #include "path-util.h"
@@ -71,7 +74,7 @@
                 else
                         printf("%s%s", prefix, special_glyph(((more || i < n_pids-1) ? SPECIAL_GLYPH_TREE_BRANCH : SPECIAL_GLYPH_TREE_RIGHT)));
 
-                printf("%s%*"PID_PRI" %s%s\n", ansi_grey(), pid_width, pids[i], strna(t), ansi_normal());
+                printf("%s%*"PID_PRI" %s%s\n", ansi_grey(), (int) pid_width, pids[i], strna(t), ansi_normal());
         }
 }
 
@@ -102,7 +105,7 @@
                 pid_t pid;
 
                 /* libvirt / qemu uses threaded mode and cgroup.procs cannot be read at the lower levels.
-                 * From https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#threads,
+                 * From https://docs.kernel.org/admin-guide/cgroup-v2.html#threads,
                  * “cgroup.procs” in a threaded domain cgroup contains the PIDs of all processes in
                  * the subtree and is not readable in the subtree proper. */
                 r = cg_read_pid(f, &pid);
@@ -125,41 +128,124 @@
         return 0;
 }
 
+static int is_delegated(int cgfd, const char *path) {
+        _cleanup_free_ char *b = NULL;
+        int r;
+
+        assert(cgfd >= 0 || path);
+
+        r = getxattr_malloc(cgfd < 0 ? path : FORMAT_PROC_FD_PATH(cgfd), "trusted.delegate", &b);
+        if (r < 0 && ERRNO_IS_XATTR_ABSENT(r)) {
+                /* If the trusted xattr isn't set (preferred), then check the untrusted one. Under the
+                 * assumption that whoever is trusted enough to own the cgroup, is also trusted enough to
+                 * decide if it is delegated or not this should be safe. */
+                r = getxattr_malloc(cgfd < 0 ? path : FORMAT_PROC_FD_PATH(cgfd), "user.delegate", &b);
+                if (r < 0 && ERRNO_IS_XATTR_ABSENT(r))
+                        return false;
+        }
+        if (r < 0)
+                return log_debug_errno(r, "Failed to read delegate xattr, ignoring: %m");
+
+        r = parse_boolean(b);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to parse delegate xattr boolean value, ignoring: %m");
+
+        return r;
+}
+
 static int show_cgroup_name(
                 const char *path,
                 const char *prefix,
-                const char *glyph) {
+                SpecialGlyph glyph,
+                OutputFlags flags) {
 
+        uint64_t cgroupid = UINT64_MAX;
         _cleanup_free_ char *b = NULL;
-        bool delegate = false;
+        _cleanup_close_ int fd = -EBADF;
+        bool delegate;
         int r;
 
-        r = getxattr_malloc(path, "trusted.delegate", &b, false);
-        if (r < 0) {
-                if (r != -ENODATA)
-                        log_debug_errno(r, "Failed to read trusted.delegate extended attribute: %m");
-        } else {
-                r = parse_boolean(b);
-                if (r < 0)
-                        log_debug_errno(r, "Failed to parse trusted.delegate extended attribute boolean value: %m");
-                else
-                        delegate = r > 0;
-
-                b = mfree(b);
+        if (FLAGS_SET(flags, OUTPUT_CGROUP_XATTRS) || FLAGS_SET(flags, OUTPUT_CGROUP_ID)) {
+                fd = open(path, O_PATH|O_CLOEXEC|O_NOFOLLOW|O_DIRECTORY, 0);
+                if (fd < 0)
+                        log_debug_errno(errno, "Failed to open cgroup '%s', ignoring: %m", path);
         }
 
-        b = strdup(basename(path));
-        if (!b)
-                return -ENOMEM;
+        delegate = is_delegated(fd, path) > 0;
 
-        printf("%s%s%s%s%s %s%s%s\n",
-               prefix, glyph,
+        if (FLAGS_SET(flags, OUTPUT_CGROUP_ID)) {
+                cg_file_handle fh = CG_FILE_HANDLE_INIT;
+                int mnt_id = -1;
+
+                if (name_to_handle_at(
+                                    fd < 0 ? AT_FDCWD : fd,
+                                    fd < 0 ? path : "",
+                                    &fh.file_handle,
+                                    &mnt_id,
+                                    fd < 0 ? 0 : AT_EMPTY_PATH) < 0)
+                        log_debug_errno(errno, "Failed to determine cgroup ID of %s, ignoring: %m", path);
+                else
+                        cgroupid = CG_FILE_HANDLE_CGROUPID(fh);
+        }
+
+        r = path_extract_filename(path, &b);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from cgroup path: %m");
+
+        printf("%s%s%s%s%s",
+               prefix, special_glyph(glyph),
                delegate ? ansi_underline() : "",
                cg_unescape(b),
-               delegate ? ansi_normal() : "",
-               delegate ? ansi_highlight() : "",
-               delegate ? special_glyph(SPECIAL_GLYPH_ELLIPSIS) : "",
                delegate ? ansi_normal() : "");
+
+        if (delegate)
+                printf(" %s%s%s",
+                       ansi_highlight(),
+                       special_glyph(SPECIAL_GLYPH_ELLIPSIS),
+                       ansi_normal());
+
+        if (cgroupid != UINT64_MAX)
+                printf(" %s(#%" PRIu64 ")%s", ansi_grey(), cgroupid, ansi_normal());
+
+        printf("\n");
+
+        if (FLAGS_SET(flags, OUTPUT_CGROUP_XATTRS) && fd >= 0) {
+                _cleanup_free_ char *nl = NULL;
+
+                r = flistxattr_malloc(fd, &nl);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to enumerate xattrs on '%s', ignoring: %m", path);
+
+                NULSTR_FOREACH(xa, nl) {
+                        _cleanup_free_ char *x = NULL, *y = NULL, *buf = NULL;
+                        int n;
+
+                        if (!STARTSWITH_SET(xa, "user.", "trusted."))
+                                continue;
+
+                        n = fgetxattr_malloc(fd, xa, &buf);
+                        if (n < 0) {
+                                log_debug_errno(r, "Failed to read xattr '%s' off '%s', ignoring: %m", xa, path);
+                                continue;
+                        }
+
+                        x = cescape(xa);
+                        if (!x)
+                                return -ENOMEM;
+
+                        y = cescape_length(buf, n);
+                        if (!y)
+                                return -ENOMEM;
+
+                        printf("%s%s%s %s%s%s: %s\n",
+                               prefix,
+                               glyph == SPECIAL_GLYPH_TREE_BRANCH ? special_glyph(SPECIAL_GLYPH_TREE_VERTICAL) : "  ",
+                               special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                               ansi_blue(), x, ansi_normal(),
+                               y);
+                }
+        }
+
         return 0;
 }
 
@@ -207,7 +293,7 @@
                 }
 
                 if (last) {
-                        r = show_cgroup_name(last, prefix, special_glyph(SPECIAL_GLYPH_TREE_BRANCH));
+                        r = show_cgroup_name(last, prefix, SPECIAL_GLYPH_TREE_BRANCH, flags);
                         if (r < 0)
                                 return r;
 
@@ -231,7 +317,7 @@
                 show_cgroup_one_by_path(path, prefix, n_columns, !!last, flags);
 
         if (last) {
-                r = show_cgroup_name(last, prefix, special_glyph(SPECIAL_GLYPH_TREE_RIGHT));
+                r = show_cgroup_name(last, prefix, SPECIAL_GLYPH_TREE_RIGHT, flags);
                 if (r < 0)
                         return r;
 
@@ -362,14 +448,17 @@
                 const char *prefix,
                 char **ret) {
 
-        int r;
         _cleanup_free_ char *root = NULL;
+        int r;
 
         if (machine) {
                 _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
                 _cleanup_free_ char *unit = NULL;
                 const char *m;
 
+                if (!hostname_is_valid(machine, 0))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Machine name is not valid: %s", machine);
+
                 m = strjoina("/run/systemd/machines/", machine);
                 r = parse_env_file(NULL, m, "SCOPE", &unit);
                 if (r < 0)
@@ -377,7 +466,7 @@
 
                 r = bus_connect_transport_systemd(BUS_TRANSPORT_LOCAL, NULL, false, &bus);
                 if (r < 0)
-                        return bus_log_connect_error(r);
+                        return bus_log_connect_error(r, BUS_TRANSPORT_LOCAL);
 
                 r = show_cgroup_get_unit_path_and_warn(bus, unit, &root);
                 if (r < 0)
@@ -387,14 +476,14 @@
                 if (r == -ENOMEDIUM)
                         return log_error_errno(r, "Failed to get root control group path.\n"
                                                   "No cgroup filesystem mounted on /sys/fs/cgroup");
-                else if (r < 0)
+                if (r < 0)
                         return log_error_errno(r, "Failed to get root control group path: %m");
         }
 
         if (prefix) {
                 char *t;
 
-                t = strjoin(root, prefix);
+                t = path_join(root, prefix);
                 if (!t)
                         return log_oom();
 
diff --git a/src/shared/chown-recursive.c b/src/shared/chown-recursive.c
index 4563729..883c1cc 100644
--- a/src/shared/chown-recursive.c
+++ b/src/shared/chown-recursive.c
@@ -21,8 +21,6 @@
                 gid_t gid,
                 mode_t mask) {
 
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
-        const char *n;
         int r;
 
         assert(fd >= 0);
@@ -30,12 +28,11 @@
 
         /* We change ACLs through the /proc/self/fd/%i path, so that we have a stable reference that works
          * with O_PATH. */
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
 
         /* Drop any ACL if there is one */
         FOREACH_STRING(n, "system.posix_acl_access", "system.posix_acl_default")
-                if (removexattr(procfs_path, n) < 0)
-                        if (!IN_SET(errno, ENODATA, EOPNOTSUPP, ENOSYS, ENOTTY))
+                if (removexattr(FORMAT_PROC_FD_PATH(fd), n) < 0)
+                        if (!ERRNO_IS_XATTR_ABSENT(errno))
                                 return -errno;
 
         r = fchmod_and_chown(fd, st->st_mode & mask, uid, gid);
@@ -54,7 +51,6 @@
 
         _cleanup_closedir_ DIR *d = NULL;
         bool changed = false;
-        struct dirent *de;
         int r;
 
         assert(fd >= 0);
@@ -67,7 +63,7 @@
         }
 
         FOREACH_DIRENT_ALL(de, d, return -errno) {
-                _cleanup_close_ int path_fd = -1;
+                _cleanup_close_ int path_fd = -EBADF;
                 struct stat fst;
 
                 if (dot_or_dot_dot(de->d_name))
@@ -117,7 +113,7 @@
                 gid_t gid,
                 mode_t mask) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
 
         fd = open(path, O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
@@ -146,7 +142,7 @@
                 gid_t gid,
                 mode_t mask) {
 
-        int duplicated_fd = -1;
+        int duplicated_fd = -EBADF;
         struct stat st;
 
         /* Note that the slightly different order of fstat() and the checks here and in
diff --git a/src/shared/clean-ipc.c b/src/shared/clean-ipc.c
index 497b088..bbb343f 100644
--- a/src/shared/clean-ipc.c
+++ b/src/shared/clean-ipc.c
@@ -219,7 +219,6 @@
 }
 
 static int clean_posix_shm_internal(const char *dirname, DIR *dir, uid_t uid, gid_t gid, bool rm) {
-        struct dirent *de;
         int ret = 0, r;
 
         assert(dir);
@@ -315,7 +314,6 @@
 
 static int clean_posix_mq(uid_t uid, gid_t gid, bool rm) {
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *de;
         int ret = 0;
 
         dir = opendir("/dev/mqueue");
diff --git a/src/shared/clock-util.c b/src/shared/clock-util.c
index b446daf..b0cbe30 100644
--- a/src/shared/clock-util.c
+++ b/src/shared/clock-util.c
@@ -19,7 +19,7 @@
 #include "string-util.h"
 
 int clock_get_hwclock(struct tm *tm) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(tm);
 
@@ -40,7 +40,7 @@
 }
 
 int clock_set_hwclock(const struct tm *tm) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(tm);
 
@@ -48,10 +48,7 @@
         if (fd < 0)
                 return -errno;
 
-        if (ioctl(fd, RTC_SET_TIME, tm) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, RTC_SET_TIME, tm));
 }
 
 int clock_is_localtime(const char* adjtime_path) {
@@ -131,18 +128,19 @@
 
         /* The very first call to settimeofday() does time warp magic. Do a dummy call here, so the time
          * warping is sealed and all later calls behave as expected. */
-        if (settimeofday(NULL, &tz) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(settimeofday(NULL, &tz));
 }
 
 #define EPOCH_FILE "/usr/lib/clock-epoch"
 
-int clock_apply_epoch(void) {
+int clock_apply_epoch(ClockChangeDirection *ret_attempted_change) {
+        usec_t epoch_usec, now_usec;
         struct stat st;
-        struct timespec ts;
-        usec_t epoch_usec;
+
+        /* NB: we update *ret_attempted_change in *all* cases, both
+         * on success and failure, to indicate what we intended to do! */
+
+        assert(ret_attempted_change);
 
         if (stat(EPOCH_FILE, &st) < 0) {
                 if (errno != ENOENT)
@@ -152,10 +150,17 @@
         } else
                 epoch_usec = timespec_load(&st.st_mtim);
 
-        if (now(CLOCK_REALTIME) >= epoch_usec)
+        now_usec = now(CLOCK_REALTIME);
+        if (now_usec < epoch_usec)
+                *ret_attempted_change = CLOCK_CHANGE_FORWARD;
+        else if (CLOCK_VALID_RANGE_USEC_MAX > 0 && now_usec > usec_add(epoch_usec, CLOCK_VALID_RANGE_USEC_MAX))
+                *ret_attempted_change = CLOCK_CHANGE_BACKWARD;
+        else {
+                *ret_attempted_change = CLOCK_CHANGE_NOOP;
                 return 0;
+        }
 
-        if (clock_settime(CLOCK_REALTIME, timespec_store(&ts, epoch_usec)) < 0)
+        if (clock_settime(CLOCK_REALTIME, TIMESPEC_STORE(epoch_usec)) < 0)
                 return -errno;
 
         return 1;
diff --git a/src/shared/clock-util.h b/src/shared/clock-util.h
index 9e96d50..c8f6d1b 100644
--- a/src/shared/clock-util.h
+++ b/src/shared/clock-util.h
@@ -1,11 +1,20 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <errno.h>
 #include <time.h>
 
+typedef enum ClockChangeDirection {
+        CLOCK_CHANGE_NOOP,
+        CLOCK_CHANGE_FORWARD,
+        CLOCK_CHANGE_BACKWARD,
+        _CLOCK_CHANGE_MAX,
+        _CLOCK_CHANGE_INVALID = -EINVAL,
+} ClockChangeDirection;
+
 int clock_is_localtime(const char* adjtime_path);
 int clock_set_timezone(int *ret_minutesdelta);
 int clock_reset_timewarp(void);
 int clock_get_hwclock(struct tm *tm);
 int clock_set_hwclock(const struct tm *tm);
-int clock_apply_epoch(void);
+int clock_apply_epoch(ClockChangeDirection *ret_attempted_change);
diff --git a/src/shared/compare-operator.c b/src/shared/compare-operator.c
new file mode 100644
index 0000000..ad931b7
--- /dev/null
+++ b/src/shared/compare-operator.c
@@ -0,0 +1,119 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fnmatch.h>
+
+#include "compare-operator.h"
+#include "string-util.h"
+
+CompareOperator parse_compare_operator(const char **s, CompareOperatorParseFlags flags) {
+        static const struct {
+                CompareOperator op;
+                const char *str;
+                CompareOperatorParseFlags valid_mask; /* If this operator appears when flags in mask not set, fail */
+                CompareOperatorParseFlags need_mask;  /* Skip over this operattor when flags in mask not set */
+        } table[] = {
+                { COMPARE_FNMATCH_EQUAL,    "$=",  .valid_mask = COMPARE_ALLOW_FNMATCH   },
+                { COMPARE_FNMATCH_UNEQUAL,  "!$=", .valid_mask = COMPARE_ALLOW_FNMATCH   },
+
+                { COMPARE_UNEQUAL,          "<>"                                         },
+                { COMPARE_LOWER_OR_EQUAL,   "<="                                         },
+                { COMPARE_GREATER_OR_EQUAL, ">="                                         },
+                { COMPARE_LOWER,            "<"                                          },
+                { COMPARE_GREATER,          ">"                                          },
+                { COMPARE_EQUAL,            "=="                                         },
+                { COMPARE_STRING_EQUAL,     "=",   .need_mask = COMPARE_EQUAL_BY_STRING  },
+                { COMPARE_EQUAL,            "="                                          },
+                { COMPARE_STRING_UNEQUAL,   "!=",  .need_mask = COMPARE_EQUAL_BY_STRING  },
+                { COMPARE_UNEQUAL,          "!="                                         },
+
+                { COMPARE_LOWER,            "lt",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
+                { COMPARE_LOWER_OR_EQUAL,   "le",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
+                { COMPARE_EQUAL,            "eq",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
+                { COMPARE_UNEQUAL,          "ne",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
+                { COMPARE_GREATER_OR_EQUAL, "ge",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
+                { COMPARE_GREATER,          "gt",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
+        };
+
+        assert(s);
+
+        if (!*s) /* Hmm, we already reached the end, for example because extract_first_word() and
+                  * parse_compare_operator() are use on the same string? */
+                return _COMPARE_OPERATOR_INVALID;
+
+        for (size_t i = 0; i < ELEMENTSOF(table); i ++) {
+                const char *e;
+
+                if (table[i].need_mask != 0 && !FLAGS_SET(flags, table[i].need_mask))
+                        continue;
+
+                e = startswith(*s, table[i].str);
+                if (e) {
+                        if (table[i].valid_mask != 0 && !FLAGS_SET(flags, table[i].valid_mask))
+                                return _COMPARE_OPERATOR_INVALID;
+
+                        *s = e;
+                        return table[i].op;
+                }
+        }
+
+        return _COMPARE_OPERATOR_INVALID;
+}
+
+int test_order(int k, CompareOperator op) {
+
+        switch (op) {
+
+        case COMPARE_LOWER:
+                return k < 0;
+
+        case COMPARE_LOWER_OR_EQUAL:
+                return k <= 0;
+
+        case COMPARE_EQUAL:
+                return k == 0;
+
+        case COMPARE_UNEQUAL:
+                return k != 0;
+
+        case COMPARE_GREATER_OR_EQUAL:
+                return k >= 0;
+
+        case COMPARE_GREATER:
+                return k > 0;
+
+        default:
+                return -EINVAL;
+        }
+}
+
+int version_or_fnmatch_compare(
+                CompareOperator op,
+                const char *a,
+                const char *b) {
+        int r;
+
+        switch (op) {
+
+        case COMPARE_STRING_EQUAL:
+                return streq_ptr(a, b);
+
+        case COMPARE_STRING_UNEQUAL:
+                return !streq_ptr(a, b);
+
+        case COMPARE_FNMATCH_EQUAL:
+                r = fnmatch(b, a, 0);
+                return r == 0 ? true :
+                        r == FNM_NOMATCH ? false : -EINVAL;
+
+        case COMPARE_FNMATCH_UNEQUAL:
+                r = fnmatch(b, a, 0);
+                return r == FNM_NOMATCH ? true:
+                        r == 0 ? false : -EINVAL;
+
+        case _COMPARE_OPERATOR_ORDER_FIRST..._COMPARE_OPERATOR_ORDER_LAST:
+                return test_order(strverscmp_improved(a, b), op);
+
+        default:
+                return -EINVAL;
+        }
+}
diff --git a/src/shared/compare-operator.h b/src/shared/compare-operator.h
new file mode 100644
index 0000000..900f3e5
--- /dev/null
+++ b/src/shared/compare-operator.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <errno.h>
+#include <stdbool.h>
+
+#define COMPARE_OPERATOR_CHARS "!<=>"
+#define COMPARE_OPERATOR_WITH_FNMATCH_CHARS COMPARE_OPERATOR_CHARS "$"
+
+typedef enum CompareOperator {
+        /* Listed in order of checking. Note that some comparators are prefixes of others, hence the longest
+         * should be listed first. */
+
+        /* Simple string compare operators */
+        _COMPARE_OPERATOR_STRING_FIRST,
+        COMPARE_STRING_EQUAL = _COMPARE_OPERATOR_STRING_FIRST,
+        COMPARE_STRING_UNEQUAL,
+        _COMPARE_OPERATOR_STRING_LAST = COMPARE_STRING_UNEQUAL,
+
+        /* fnmatch() compare operators */
+        _COMPARE_OPERATOR_FNMATCH_FIRST,
+        COMPARE_FNMATCH_EQUAL = _COMPARE_OPERATOR_FNMATCH_FIRST,
+        COMPARE_FNMATCH_UNEQUAL,
+        _COMPARE_OPERATOR_FNMATCH_LAST = COMPARE_FNMATCH_UNEQUAL,
+
+        /* Order compare operators */
+        _COMPARE_OPERATOR_ORDER_FIRST,
+        COMPARE_LOWER_OR_EQUAL = _COMPARE_OPERATOR_ORDER_FIRST,
+        COMPARE_GREATER_OR_EQUAL,
+        COMPARE_LOWER,
+        COMPARE_GREATER,
+        COMPARE_EQUAL,
+        COMPARE_UNEQUAL,
+        _COMPARE_OPERATOR_ORDER_LAST = COMPARE_UNEQUAL,
+
+        _COMPARE_OPERATOR_MAX,
+        _COMPARE_OPERATOR_INVALID = -EINVAL,
+} CompareOperator;
+
+static inline bool COMPARE_OPERATOR_IS_STRING(CompareOperator c) {
+        return c >= _COMPARE_OPERATOR_STRING_FIRST && c <= _COMPARE_OPERATOR_STRING_LAST;
+}
+
+static inline bool COMPARE_OPERATOR_IS_FNMATCH(CompareOperator c) {
+        return c >= _COMPARE_OPERATOR_FNMATCH_FIRST && c <= _COMPARE_OPERATOR_FNMATCH_LAST;
+}
+
+static inline bool COMPARE_OPERATOR_IS_ORDER(CompareOperator c) {
+        return c >= _COMPARE_OPERATOR_ORDER_FIRST && c <= _COMPARE_OPERATOR_ORDER_LAST;
+}
+
+typedef enum CompareOperatorParseFlags {
+        COMPARE_ALLOW_FNMATCH   = 1 << 0,
+        COMPARE_EQUAL_BY_STRING = 1 << 1,
+        COMPARE_ALLOW_TEXTUAL   = 1 << 2,
+} CompareOperatorParseFlags;
+
+CompareOperator parse_compare_operator(const char **s, CompareOperatorParseFlags flags);
+
+int test_order(int k, CompareOperator op);
+
+int version_or_fnmatch_compare(CompareOperator op, const char *a, const char *b);
diff --git a/src/shared/condition.c b/src/shared/condition.c
index 6645f77..d5fdbbf 100644
--- a/src/shared/condition.c
+++ b/src/shared/condition.c
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <fnmatch.h>
@@ -20,9 +21,11 @@
 #include "blockdev-util.h"
 #include "cap-list.h"
 #include "cgroup-util.h"
+#include "compare-operator.h"
 #include "condition.h"
 #include "cpu-set-util.h"
-#include "efi-loader.h"
+#include "creds-util.h"
+#include "efi-api.h"
 #include "env-file.h"
 #include "env-util.h"
 #include "extract-word.h"
@@ -32,24 +35,30 @@
 #include "glob-util.h"
 #include "hostname-util.h"
 #include "ima-util.h"
+#include "initrd-util.h"
 #include "limits-util.h"
 #include "list.h"
 #include "macro.h"
 #include "mountpoint-util.h"
+#include "nulstr-util.h"
 #include "os-util.h"
 #include "parse-util.h"
 #include "path-util.h"
+#include "percent-util.h"
 #include "proc-cmdline.h"
 #include "process-util.h"
+#include "psi-util.h"
 #include "selinux-util.h"
 #include "smack-util.h"
+#include "special.h"
 #include "stat-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "tomoyo-util.h"
-#include "user-record.h"
+#include "tpm2-util.h"
+#include "udev-util.h"
+#include "uid-alloc-range.h"
 #include "user-util.h"
-#include "util.h"
 #include "virt.h"
 
 Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate) {
@@ -86,9 +95,7 @@
 }
 
 Condition* condition_free_list_type(Condition *head, ConditionType type) {
-        Condition *c, *n;
-
-        LIST_FOREACH_SAFE(conditions, c, n, head)
+        LIST_FOREACH(conditions, c, head)
                 if (type < 0 || c->type == type) {
                         LIST_REMOVE(conditions, head, c);
                         condition_free(c);
@@ -100,8 +107,6 @@
 
 static int condition_test_kernel_command_line(Condition *c, char **env) {
         _cleanup_free_ char *line = NULL;
-        const char *p;
-        bool equal;
         int r;
 
         assert(c);
@@ -112,9 +117,9 @@
         if (r < 0)
                 return r;
 
-        equal = strchr(c->parameter, '=');
+        bool equal = strchr(c->parameter, '=');
 
-        for (p = line;;) {
+        for (const char *p = line;;) {
                 _cleanup_free_ char *word = NULL;
                 bool found;
 
@@ -140,77 +145,49 @@
         return false;
 }
 
-typedef enum {
-        /* Listed in order of checking. Note that some comparators are prefixes of others, hence the longest
-         * should be listed first. */
-        ORDER_LOWER_OR_EQUAL,
-        ORDER_GREATER_OR_EQUAL,
-        ORDER_LOWER,
-        ORDER_GREATER,
-        ORDER_EQUAL,
-        ORDER_UNEQUAL,
-        _ORDER_MAX,
-        _ORDER_INVALID = -EINVAL,
-} OrderOperator;
+static int condition_test_credential(Condition *c, char **env) {
+        int (*gd)(const char **ret);
+        int r;
 
-static OrderOperator parse_order(const char **s) {
+        assert(c);
+        assert(c->parameter);
+        assert(c->type == CONDITION_CREDENTIAL);
 
-        static const char *const prefix[_ORDER_MAX] = {
-                [ORDER_LOWER_OR_EQUAL] = "<=",
-                [ORDER_GREATER_OR_EQUAL] = ">=",
-                [ORDER_LOWER] = "<",
-                [ORDER_GREATER] = ">",
-                [ORDER_EQUAL] = "=",
-                [ORDER_UNEQUAL] = "!=",
-        };
+        /* For now we'll do a very simple existence check and are happy with either a regular or an encrypted
+         * credential. Given that we check the syntax of the argument we have the option to later maybe allow
+         * contents checks too without breaking compatibility, but for now let's be minimalistic. */
 
-        OrderOperator i;
+        if (!credential_name_valid(c->parameter)) /* credentials with invalid names do not exist */
+                return false;
 
-        for (i = 0; i < _ORDER_MAX; i++) {
-                const char *e;
+        FOREACH_POINTER(gd, get_credentials_dir, get_encrypted_credentials_dir) {
+                _cleanup_free_ char *j = NULL;
+                const char *cd;
 
-                e = startswith(*s, prefix[i]);
-                if (e) {
-                        *s = e;
-                        return i;
-                }
+                r = gd(&cd);
+                if (r == -ENXIO) /* no env var set */
+                        continue;
+                if (r < 0)
+                        return r;
+
+                j = path_join(cd, c->parameter);
+                if (!j)
+                        return -ENOMEM;
+
+                if (laccess(j, F_OK) >= 0)
+                        return true; /* yay! */
+                if (errno != ENOENT)
+                        return -errno;
+
+                /* not found in this dir */
         }
 
-        return _ORDER_INVALID;
-}
-
-static bool test_order(int k, OrderOperator p) {
-
-        switch (p) {
-
-        case ORDER_LOWER:
-                return k < 0;
-
-        case ORDER_LOWER_OR_EQUAL:
-                return k <= 0;
-
-        case ORDER_EQUAL:
-                return k == 0;
-
-        case ORDER_UNEQUAL:
-                return k != 0;
-
-        case ORDER_GREATER_OR_EQUAL:
-                return k >= 0;
-
-        case ORDER_GREATER:
-                return k > 0;
-
-        default:
-                assert_not_reached("unknown order");
-
-        }
+        return false;
 }
 
 static int condition_test_kernel_version(Condition *c, char **env) {
-        OrderOperator order;
+        CompareOperator operator;
         struct utsname u;
-        const char *p;
         bool first = true;
 
         assert(c);
@@ -219,9 +196,7 @@
 
         assert_se(uname(&u) >= 0);
 
-        p = c->parameter;
-
-        for (;;) {
+        for (const char *p = c->parameter;;) {
                 _cleanup_free_ char *word = NULL;
                 const char *s;
                 int r;
@@ -233,30 +208,30 @@
                         break;
 
                 s = strstrip(word);
-                order = parse_order(&s);
-                if (order >= 0) {
-                        s += strspn(s, WHITESPACE);
-                        if (isempty(s)) {
-                                if (first) {
-                                        /* For backwards compatibility, allow whitespace between the operator and
-                                         * value, without quoting, but only in the first expression. */
-                                        word = mfree(word);
-                                        r = extract_first_word(&p, &word, NULL, 0);
-                                        if (r < 0)
-                                                return log_debug_errno(r, "Failed to parse condition string \"%s\": %m", p);
-                                        if (r == 0)
-                                                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected end of expression: %s", p);
-                                        s = word;
-                                } else
+                operator = parse_compare_operator(&s, COMPARE_ALLOW_FNMATCH|COMPARE_EQUAL_BY_STRING);
+                if (operator < 0) /* No prefix? Then treat as glob string */
+                        operator = COMPARE_FNMATCH_EQUAL;
+
+                s += strspn(s, WHITESPACE);
+                if (isempty(s)) {
+                        if (first) {
+                                /* For backwards compatibility, allow whitespace between the operator and
+                                 * value, without quoting, but only in the first expression. */
+                                word = mfree(word);
+                                r = extract_first_word(&p, &word, NULL, 0);
+                                if (r < 0)
+                                        return log_debug_errno(r, "Failed to parse condition string \"%s\": %m", p);
+                                if (r == 0)
                                         return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected end of expression: %s", p);
-                        }
+                                s = word;
+                        } else
+                                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected end of expression: %s", p);
+                }
 
-                        r = test_order(strverscmp_improved(u.release, s), order);
-                } else
-                        /* No prefix? Then treat as glob string */
-                        r = fnmatch(s, u.release, 0) == 0;
-
-                if (r == 0)
+                r = version_or_fnmatch_compare(operator, u.release, s);
+                if (r < 0)
+                        return r;
+                if (!r)
                         return false;
 
                 first = false;
@@ -266,18 +241,15 @@
 }
 
 static int condition_test_osrelease(Condition *c, char **env) {
-        const char *parameter = c->parameter;
         int r;
 
         assert(c);
-        assert(c->parameter);
         assert(c->type == CONDITION_OS_RELEASE);
 
-        for (;;) {
+        for (const char *parameter = ASSERT_PTR(c->parameter);;) {
                 _cleanup_free_ char *key = NULL, *condition = NULL, *actual_value = NULL;
-                OrderOperator order;
+                CompareOperator operator;
                 const char *word;
-                bool matches;
 
                 r = extract_first_word(&parameter, &condition, NULL, EXTRACT_UNQUOTE);
                 if (r < 0)
@@ -285,9 +257,9 @@
                 if (r == 0)
                         break;
 
-                /* parse_order() needs the string to start with the comparators */
+                /* parse_compare_operator() needs the string to start with the comparators */
                 word = condition;
-                r = extract_first_word(&word, &key, "!<=>", EXTRACT_RETAIN_SEPARATORS);
+                r = extract_first_word(&word, &key, COMPARE_OPERATOR_WITH_FNMATCH_CHARS, EXTRACT_RETAIN_SEPARATORS);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to parse parameter: %m");
                 /* The os-release spec mandates env-var-like key names */
@@ -296,8 +268,8 @@
                                         "Failed to parse parameter, key/value format expected: %m");
 
                 /* Do not allow whitespace after the separator, as that's not a valid os-release format */
-                order = parse_order(&word);
-                if (order < 0 || isempty(word) || strchr(WHITESPACE, *word) != NULL)
+                operator = parse_compare_operator(&word, COMPARE_ALLOW_FNMATCH|COMPARE_EQUAL_BY_STRING);
+                if (operator < 0 || isempty(word) || strchr(WHITESPACE, *word) != NULL)
                         return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
                                         "Failed to parse parameter, key/value format expected: %m");
 
@@ -305,15 +277,10 @@
                 if (r < 0)
                         return log_debug_errno(r, "Failed to parse os-release: %m");
 
-                /* Might not be comparing versions, so do exact string matching */
-                if (order == ORDER_EQUAL)
-                        matches = streq_ptr(actual_value, word);
-                else if (order == ORDER_UNEQUAL)
-                        matches = !streq_ptr(actual_value, word);
-                else
-                        matches = test_order(strverscmp_improved(actual_value, word), order);
-
-                if (!matches)
+                r = version_or_fnmatch_compare(operator, actual_value, word);
+                if (r < 0)
+                        return r;
+                if (!r)
                         return false;
         }
 
@@ -321,7 +288,7 @@
 }
 
 static int condition_test_memory(Condition *c, char **env) {
-        OrderOperator order;
+        CompareOperator operator;
         uint64_t m, k;
         const char *p;
         int r;
@@ -333,19 +300,19 @@
         m = physical_memory();
 
         p = c->parameter;
-        order = parse_order(&p);
-        if (order < 0)
-                order = ORDER_GREATER_OR_EQUAL; /* default to >= check, if nothing is specified. */
+        operator = parse_compare_operator(&p, 0);
+        if (operator < 0)
+                operator = COMPARE_GREATER_OR_EQUAL; /* default to >= check, if nothing is specified. */
 
-        r = safe_atou64(p, &k);
+        r = parse_size(p, 1024, &k);
         if (r < 0)
-                return log_debug_errno(r, "Failed to parse size: %m");
+                return log_debug_errno(r, "Failed to parse size '%s': %m", p);
 
-        return test_order(CMP(m, k), order);
+        return test_order(CMP(m, k), operator);
 }
 
 static int condition_test_cpus(Condition *c, char **env) {
-        OrderOperator order;
+        CompareOperator operator;
         const char *p;
         unsigned k;
         int r, n;
@@ -359,45 +326,50 @@
                 return log_debug_errno(n, "Failed to determine CPUs in affinity mask: %m");
 
         p = c->parameter;
-        order = parse_order(&p);
-        if (order < 0)
-                order = ORDER_GREATER_OR_EQUAL; /* default to >= check, if nothing is specified. */
+        operator = parse_compare_operator(&p, 0);
+        if (operator < 0)
+                operator = COMPARE_GREATER_OR_EQUAL; /* default to >= check, if nothing is specified. */
 
         r = safe_atou(p, &k);
         if (r < 0)
                 return log_debug_errno(r, "Failed to parse number of CPUs: %m");
 
-        return test_order(CMP((unsigned) n, k), order);
+        return test_order(CMP((unsigned) n, k), operator);
 }
 
 static int condition_test_user(Condition *c, char **env) {
         uid_t id;
         int r;
-        _cleanup_free_ char *username = NULL;
-        const char *u;
 
         assert(c);
         assert(c->parameter);
         assert(c->type == CONDITION_USER);
 
+        /* Do the quick&easy comparisons first, and only parse the UID later. */
+        if (streq(c->parameter, "root"))
+                return getuid() == 0 || geteuid() == 0;
+        if (streq(c->parameter, NOBODY_USER_NAME))
+                return getuid() == UID_NOBODY || geteuid() == UID_NOBODY;
+        if (streq(c->parameter, "@system"))
+                return uid_is_system(getuid()) || uid_is_system(geteuid());
+
         r = parse_uid(c->parameter, &id);
         if (r >= 0)
                 return id == getuid() || id == geteuid();
 
-        if (streq("@system", c->parameter))
-                return uid_is_system(getuid()) || uid_is_system(geteuid());
+        if (getpid_cached() == 1)  /* We already checked for "root" above, and we know that
+                                    * PID 1 is running as root, hence we know it cannot match. */
+                return false;
 
-        username = getusername_malloc();
+        /* getusername_malloc() may do an nss lookup, which is not allowed in PID 1. */
+        _cleanup_free_ char *username = getusername_malloc();
         if (!username)
                 return -ENOMEM;
 
         if (streq(username, c->parameter))
                 return 1;
 
-        if (getpid_cached() == 1)
-                return streq(c->parameter, "root");
-
-        u = c->parameter;
+        const char *u = c->parameter;
         r = get_user_creds(&u, &id, NULL, NULL, NULL, USER_CREDS_ALLOW_MISSING);
         if (r < 0)
                 return 0;
@@ -458,7 +430,8 @@
 }
 
 static int condition_test_virtualization(Condition *c, char **env) {
-        int b, v;
+        Virtualization v;
+        int b;
 
         assert(c);
         assert(c->parameter);
@@ -474,7 +447,7 @@
         /* First, compare with yes/no */
         b = parse_boolean(c->parameter);
         if (b >= 0)
-                return b == !!v;
+                return b == (v != VIRTUALIZATION_NONE);
 
         /* Then, compare categorization */
         if (streq(c->parameter, "vm"))
@@ -488,7 +461,7 @@
 }
 
 static int condition_test_architecture(Condition *c, char **env) {
-        int a, b;
+        Architecture a, b;
 
         assert(c);
         assert(c->parameter);
@@ -509,7 +482,7 @@
         return a == b;
 }
 
-#define DTCOMPAT_FILE "/sys/firmware/devicetree/base/compatible"
+#define DTCOMPAT_FILE "/proc/device-tree/compatible"
 static int condition_test_firmware_devicetree_compatible(const char *dtcarg) {
         int r;
         _cleanup_free_ char *dtcompat = NULL;
@@ -530,11 +503,8 @@
                 return false;
         }
 
-        /*
-         * /sys/firmware/devicetree/base/compatible consists of one or more
-         * strings, each ending in '\0'. So the last character in dtcompat must
-         * be a '\0'.
-         */
+         /* /proc/device-tree/compatible consists of one or more strings, each ending in '\0'.
+          * So the last character in dtcompat must be a '\0'. */
         if (dtcompat[size - 1] != '\0') {
                 log_debug("%s is in an unknown format, assuming machine is incompatible", DTCOMPAT_FILE);
                 return false;
@@ -547,38 +517,104 @@
         return strv_contains(dtcompatlist, dtcarg);
 }
 
+static int condition_test_firmware_smbios_field(const char *expression) {
+        _cleanup_free_ char *field = NULL, *expected_value = NULL, *actual_value = NULL;
+        CompareOperator operator;
+        int r;
+
+        assert(expression);
+
+        /* Parse SMBIOS field */
+        r = extract_first_word(&expression, &field, COMPARE_OPERATOR_WITH_FNMATCH_CHARS, EXTRACT_RETAIN_SEPARATORS);
+        if (r < 0)
+                return r;
+        if (r == 0 || isempty(expression))
+                return -EINVAL;
+
+        /* Remove trailing spaces from SMBIOS field */
+        delete_trailing_chars(field, WHITESPACE);
+
+        /* Parse operator */
+        operator = parse_compare_operator(&expression, COMPARE_ALLOW_FNMATCH|COMPARE_EQUAL_BY_STRING);
+        if (operator < 0)
+                return operator;
+
+        /* Parse expected value */
+        r = extract_first_word(&expression, &expected_value, NULL, EXTRACT_UNQUOTE);
+        if (r < 0)
+                return r;
+        if (r == 0 || !isempty(expression))
+                return -EINVAL;
+
+        /* Read actual value from sysfs */
+        if (!filename_is_valid(field))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid SMBIOS field name");
+
+        const char *p = strjoina("/sys/class/dmi/id/", field);
+        r = read_virtual_file(p, SIZE_MAX, &actual_value, NULL);
+        if (r < 0) {
+                log_debug_errno(r, "Failed to read %s: %m", p);
+                if (r == -ENOENT)
+                        return false;
+                return r;
+        }
+
+        /* Remove trailing newline */
+        delete_trailing_chars(actual_value, WHITESPACE);
+
+        /* Finally compare actual and expected value */
+        return version_or_fnmatch_compare(operator, actual_value, expected_value);
+}
+
 static int condition_test_firmware(Condition *c, char **env) {
-        sd_char *dtc;
+        sd_char *arg;
+        int r;
 
         assert(c);
         assert(c->parameter);
         assert(c->type == CONDITION_FIRMWARE);
 
         if (streq(c->parameter, "device-tree")) {
-                if (access("/sys/firmware/device-tree/", F_OK) < 0) {
+                if (access("/sys/firmware/devicetree/", F_OK) < 0) {
                         if (errno != ENOENT)
-                                log_debug_errno(errno, "Unexpected error when checking for /sys/firmware/device-tree/: %m");
+                                log_debug_errno(errno, "Unexpected error when checking for /sys/firmware/devicetree/: %m");
                         return false;
                 } else
                         return true;
-        } else if ((dtc = startswith(c->parameter, "device-tree-compatible("))) {
-                _cleanup_free_ char *dtcarg = NULL;
+        } else if ((arg = startswith(c->parameter, "device-tree-compatible("))) {
+                _cleanup_free_ char *dtc_arg = NULL;
                 char *end;
 
-                end = strchr(dtc, ')');
+                end = strrchr(arg, ')');
                 if (!end || *(end + 1) != '\0') {
-                        log_debug("Malformed Firmware condition \"%s\"", c->parameter);
+                        log_debug("Malformed ConditionFirmware=%s", c->parameter);
                         return false;
                 }
 
-                dtcarg = strndup(dtc, end - dtc);
-                if (!dtcarg)
+                dtc_arg = strndup(arg, end - arg);
+                if (!dtc_arg)
                         return -ENOMEM;
 
-                return condition_test_firmware_devicetree_compatible(dtcarg);
+                return condition_test_firmware_devicetree_compatible(dtc_arg);
         } else if (streq(c->parameter, "uefi"))
                 return is_efi_boot();
-        else {
+        else if ((arg = startswith(c->parameter, "smbios-field("))) {
+                _cleanup_free_ char *smbios_arg = NULL;
+                char *end;
+
+                end = strrchr(arg, ')');
+                if (!end || *(end + 1) != '\0')
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Malformed ConditionFirmware=%s: %m", c->parameter);
+
+                smbios_arg = strndup(arg, end - arg);
+                if (!smbios_arg)
+                        return log_oom_debug();
+
+                r = condition_test_firmware_smbios_field(smbios_arg);
+                if (r < 0)
+                        return log_debug_errno(r, "Malformed ConditionFirmware=%s: %m", c->parameter);
+                return r;
+        } else {
                 log_debug("Unsupported Firmware condition \"%s\"", c->parameter);
                 return false;
         }
@@ -606,7 +642,13 @@
         if (!h)
                 return -ENOMEM;
 
-        return fnmatch(c->parameter, h, FNM_CASEFOLD) == 0;
+        r = fnmatch(c->parameter, h, FNM_CASEFOLD);
+        if (r == FNM_NOMATCH)
+                return false;
+        if (r != 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "fnmatch() failed.");
+
+        return true;
 }
 
 static int condition_test_ac_power(Condition *c, char **env) {
@@ -624,29 +666,13 @@
 }
 
 static int has_tpm2(void) {
-        int r;
+        /* Checks whether the kernel has the TPM subsystem enabled and the firmware reports support. Note
+         * we don't check for actual TPM devices, since we might not have loaded the driver for it yet, i.e.
+         * during early boot where we very likely want to use this condition check).
+         *
+         * Note that we don't check if we ourselves are built with TPM2 support here! */
 
-        /* Checks whether the system has at least one TPM2 resource manager device, i.e. at least one "tpmrm"
-         * class device */
-
-        r = dir_is_empty("/sys/class/tpmrm");
-        if (r == 0)
-                return true; /* nice! we have a device */
-
-        /* Hmm, so Linux doesn't know of the TPM2 device (or we couldn't check for it), most likely because
-         * the driver wasn't loaded yet. Let's see if the firmware knows about a TPM2 device, in this
-         * case. This way we can answer the TPM2 question already during early boot (where we most likely
-         * need it) */
-        if (efi_has_tpm2())
-                return true;
-
-        /* OK, this didn't work either, in this case propagate the original errors */
-        if (r == -ENOENT)
-                return false;
-        if (r < 0)
-                return log_debug_errno(r, "Failed to determine whether system has TPM2 support: %m");
-
-        return !r;
+        return FLAGS_SET(tpm2_support(), TPM2_SUPPORT_SUBSYSTEM|TPM2_SUPPORT_FIRMWARE);
 }
 
 static int condition_test_security(Condition *c, char **env) {
@@ -697,7 +723,6 @@
 
         for (;;) {
                 _cleanup_free_ char *line = NULL;
-                const char *p;
 
                 r = read_line(f, LONG_LINE_MAX, &line);
                 if (r < 0)
@@ -705,9 +730,9 @@
                 if (r == 0)
                         break;
 
-                p = startswith(line, "CapBnd:");
+                const char *p = startswith(line, "CapBnd:");
                 if (p) {
-                        if (sscanf(line+7, "%llx", &capabilities) != 1)
+                        if (sscanf(p, "%llx", &capabilities) != 1)
                                 return -EIO;
 
                         break;
@@ -787,7 +812,8 @@
         if (r < 0) {
                 log_debug_errno(r, "Failed to parse timestamp file '%s', using mtime: %m", p);
                 return true;
-        } else if (r == 0) {
+        }
+        if (isempty(timestamp_str)) {
                 log_debug("No data in timestamp file '%s', using mtime.", p);
                 return true;
         }
@@ -804,32 +830,24 @@
 
 static int condition_test_first_boot(Condition *c, char **env) {
         int r, q;
-        bool b;
 
         assert(c);
         assert(c->parameter);
         assert(c->type == CONDITION_FIRST_BOOT);
 
-        r = proc_cmdline_get_bool("systemd.condition-first-boot", &b);
-        if (r < 0)
-                log_debug_errno(r, "Failed to parse systemd.condition-first-boot= kernel command line argument, ignoring: %m");
-        if (r > 0)
-                return b == !!r;
-
         r = parse_boolean(c->parameter);
         if (r < 0)
                 return r;
 
         q = access("/run/systemd/first-boot", F_OK);
         if (q < 0 && errno != ENOENT)
-                log_debug_errno(errno, "Failed to check if /run/systemd/first-boot exists, ignoring: %m");
+                log_debug_errno(errno, "Failed to check if /run/systemd/first-boot exists, assuming no: %m");
 
-        return (q >= 0) == !!r;
+        return (q >= 0) == r;
 }
 
 static int condition_test_environment(Condition *c, char **env) {
         bool equal;
-        char **i;
 
         assert(c);
         assert(c->parameter);
@@ -937,7 +955,7 @@
         assert(c->parameter);
         assert(c->type == CONDITION_DIRECTORY_NOT_EMPTY);
 
-        r = dir_is_empty(c->parameter);
+        r = dir_is_empty(c->parameter, /* ignore_hidden_or_backup= */ true);
         return r <= 0 && !IN_SET(r, -ENOENT, -ENOTDIR);
 }
 
@@ -965,6 +983,151 @@
                 (st.st_mode & 0111));
 }
 
+static int condition_test_psi(Condition *c, char **env) {
+        _cleanup_free_ char *first = NULL, *second = NULL, *third = NULL, *fourth = NULL, *pressure_path = NULL;
+        const char *p, *value, *pressure_type;
+        loadavg_t *current, limit;
+        ResourcePressure pressure;
+        int r;
+
+        assert(c);
+        assert(c->parameter);
+        assert(IN_SET(c->type, CONDITION_MEMORY_PRESSURE, CONDITION_CPU_PRESSURE, CONDITION_IO_PRESSURE));
+
+        if (!is_pressure_supported()) {
+                log_debug("Pressure Stall Information (PSI) is not supported, skipping.");
+                return 1;
+        }
+
+        pressure_type = c->type == CONDITION_MEMORY_PRESSURE ? "memory" :
+                        c->type == CONDITION_CPU_PRESSURE ? "cpu" :
+                        "io";
+
+        p = c->parameter;
+        r = extract_many_words(&p, ":", 0, &first, &second, NULL);
+        if (r <= 0)
+                return log_debug_errno(r < 0 ? r : SYNTHETIC_ERRNO(EINVAL), "Failed to parse condition parameter %s: %m", c->parameter);
+        /* If only one parameter is passed, then we look at the global system pressure rather than a specific cgroup. */
+        if (r == 1) {
+                pressure_path = path_join("/proc/pressure", pressure_type);
+                if (!pressure_path)
+                        return log_oom_debug();
+
+                value = first;
+        } else {
+                const char *controller = strjoina(pressure_type, ".pressure");
+                _cleanup_free_ char *slice_path = NULL, *root_scope = NULL;
+                CGroupMask mask, required_mask;
+                char *slice, *e;
+
+                required_mask = c->type == CONDITION_MEMORY_PRESSURE ? CGROUP_MASK_MEMORY :
+                                c->type == CONDITION_CPU_PRESSURE ? CGROUP_MASK_CPU :
+                                CGROUP_MASK_IO;
+
+                slice = strstrip(first);
+                if (!slice)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse condition parameter %s: %m", c->parameter);
+
+                r = cg_all_unified();
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to determine whether the unified cgroups hierarchy is used: %m");
+                if (r == 0) {
+                        log_debug("PSI condition check requires the unified cgroups hierarchy, skipping.");
+                        return 1;
+                }
+
+                r = cg_mask_supported(&mask);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to get supported cgroup controllers: %m");
+
+                if (!FLAGS_SET(mask, required_mask)) {
+                        log_debug("Cgroup %s controller not available, skipping PSI condition check.", pressure_type);
+                        return 1;
+                }
+
+                r = cg_slice_to_path(slice, &slice_path);
+                if (r < 0)
+                        return log_debug_errno(r, "Cannot determine slice \"%s\" cgroup path: %m", slice);
+
+                /* We might be running under the user manager, so get the root path and prefix it accordingly. */
+                r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid_cached(), &root_scope);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to get root cgroup path: %m");
+
+                /* Drop init.scope, we want the parent. We could get an empty or / path, but that's fine,
+                 * just skip it in that case. */
+                e = endswith(root_scope, "/" SPECIAL_INIT_SCOPE);
+                if (e)
+                        *e = 0;
+                if (!empty_or_root(root_scope)) {
+                        _cleanup_free_ char *slice_joined = NULL;
+
+                        slice_joined = path_join(root_scope, slice_path);
+                        if (!slice_joined)
+                                return log_oom_debug();
+
+                        free_and_replace(slice_path, slice_joined);
+                }
+
+                r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, slice_path, controller, &pressure_path);
+                if (r < 0)
+                        return log_debug_errno(r, "Error getting cgroup pressure path from %s: %m", slice_path);
+
+                value = second;
+        }
+
+        /* If a value including a specific timespan (in the intervals allowed by the kernel),
+         * parse it, otherwise we assume just a plain percentage that will be checked if it is
+         * smaller or equal to the current pressure average over 5 minutes. */
+        r = extract_many_words(&value, "/", 0, &third, &fourth, NULL);
+        if (r <= 0)
+                return log_debug_errno(r < 0 ? r : SYNTHETIC_ERRNO(EINVAL), "Failed to parse condition parameter %s: %m", c->parameter);
+        if (r == 1)
+                current = &pressure.avg300;
+        else {
+                const char *timespan;
+
+                timespan = skip_leading_chars(fourth, NULL);
+                if (!timespan)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse condition parameter %s: %m", c->parameter);
+
+                if (startswith(timespan, "10sec"))
+                        current = &pressure.avg10;
+                else if (startswith(timespan, "1min"))
+                        current = &pressure.avg60;
+                else if (startswith(timespan, "5min"))
+                        current = &pressure.avg300;
+                else
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse condition parameter %s: %m", c->parameter);
+        }
+
+        value = strstrip(third);
+        if (!value)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse condition parameter %s: %m", c->parameter);
+
+        r = parse_permyriad(value);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to parse permyriad: %s", c->parameter);
+
+        r = store_loadavg_fixed_point(r / 100LU, r % 100LU, &limit);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to parse loadavg: %s", c->parameter);
+
+        r = read_resource_pressure(pressure_path, PRESSURE_TYPE_FULL, &pressure);
+        if (r == -ENODATA) /* cpu.pressure 'full' was added recently, fall back to 'some'. */
+                r = read_resource_pressure(pressure_path, PRESSURE_TYPE_SOME, &pressure);
+        if (r == -ENOENT) {
+                /* We already checked that /proc/pressure exists, so this means we were given a cgroup
+                 * that doesn't exist or doesn't exist any longer. */
+                log_debug("\"%s\" not found, skipping PSI check.", pressure_path);
+                return 1;
+        }
+        if (r < 0)
+                return log_debug_errno(r, "Error parsing pressure from %s: %m", pressure_path);
+
+        return *current <= limit;
+}
+
 int condition_test(Condition *c, char **env) {
 
         static int (*const condition_tests[_CONDITION_TYPE_MAX])(Condition *c, char **env) = {
@@ -980,6 +1143,7 @@
                 [CONDITION_FILE_IS_EXECUTABLE]       = condition_test_file_is_executable,
                 [CONDITION_KERNEL_COMMAND_LINE]      = condition_test_kernel_command_line,
                 [CONDITION_KERNEL_VERSION]           = condition_test_kernel_version,
+                [CONDITION_CREDENTIAL]               = condition_test_credential,
                 [CONDITION_VIRTUALIZATION]           = condition_test_virtualization,
                 [CONDITION_SECURITY]                 = condition_test_security,
                 [CONDITION_CAPABILITY]               = condition_test_capability,
@@ -997,6 +1161,9 @@
                 [CONDITION_ENVIRONMENT]              = condition_test_environment,
                 [CONDITION_CPU_FEATURE]              = condition_test_cpufeature,
                 [CONDITION_OS_RELEASE]               = condition_test_osrelease,
+                [CONDITION_MEMORY_PRESSURE]          = condition_test_psi,
+                [CONDITION_CPU_PRESSURE]             = condition_test_psi,
+                [CONDITION_IO_PRESSURE]              = condition_test_psi,
         };
 
         int r, b;
@@ -1023,7 +1190,6 @@
                 condition_test_logger_t logger,
                 void *userdata) {
 
-        Condition *c;
         int triggered = -1;
 
         assert(!!logger == !!to_string);
@@ -1086,8 +1252,6 @@
 }
 
 void condition_dump_list(Condition *first, FILE *f, const char *prefix, condition_to_string_t to_string) {
-        Condition *c;
-
         LIST_FOREACH(conditions, c, first)
                 condition_dump(c, f, prefix, to_string);
 }
@@ -1099,6 +1263,7 @@
         [CONDITION_HOST] = "ConditionHost",
         [CONDITION_KERNEL_COMMAND_LINE] = "ConditionKernelCommandLine",
         [CONDITION_KERNEL_VERSION] = "ConditionKernelVersion",
+        [CONDITION_CREDENTIAL] = "ConditionCredential",
         [CONDITION_SECURITY] = "ConditionSecurity",
         [CONDITION_CAPABILITY] = "ConditionCapability",
         [CONDITION_AC_POWER] = "ConditionACPower",
@@ -1122,6 +1287,9 @@
         [CONDITION_ENVIRONMENT] = "ConditionEnvironment",
         [CONDITION_CPU_FEATURE] = "ConditionCPUFeature",
         [CONDITION_OS_RELEASE] = "ConditionOSRelease",
+        [CONDITION_MEMORY_PRESSURE] = "ConditionMemoryPressure",
+        [CONDITION_CPU_PRESSURE] = "ConditionCPUPressure",
+        [CONDITION_IO_PRESSURE] = "ConditionIOPressure",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(condition_type, ConditionType);
@@ -1133,6 +1301,7 @@
         [CONDITION_HOST] = "AssertHost",
         [CONDITION_KERNEL_COMMAND_LINE] = "AssertKernelCommandLine",
         [CONDITION_KERNEL_VERSION] = "AssertKernelVersion",
+        [CONDITION_CREDENTIAL] = "AssertCredential",
         [CONDITION_SECURITY] = "AssertSecurity",
         [CONDITION_CAPABILITY] = "AssertCapability",
         [CONDITION_AC_POWER] = "AssertACPower",
@@ -1156,6 +1325,9 @@
         [CONDITION_ENVIRONMENT] = "AssertEnvironment",
         [CONDITION_CPU_FEATURE] = "AssertCPUFeature",
         [CONDITION_OS_RELEASE] = "AssertOSRelease",
+        [CONDITION_MEMORY_PRESSURE] = "AssertMemoryPressure",
+        [CONDITION_CPU_PRESSURE] = "AssertCPUPressure",
+        [CONDITION_IO_PRESSURE] = "AssertIOPressure",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(assert_type, ConditionType);
diff --git a/src/shared/condition.h b/src/shared/condition.h
index 3a5420c..54cc904 100644
--- a/src/shared/condition.h
+++ b/src/shared/condition.h
@@ -14,6 +14,7 @@
         CONDITION_HOST,
         CONDITION_KERNEL_COMMAND_LINE,
         CONDITION_KERNEL_VERSION,
+        CONDITION_CREDENTIAL,
         CONDITION_SECURITY,
         CONDITION_CAPABILITY,
         CONDITION_AC_POWER,
@@ -22,6 +23,9 @@
         CONDITION_ENVIRONMENT,
         CONDITION_CPU_FEATURE,
         CONDITION_OS_RELEASE,
+        CONDITION_MEMORY_PRESSURE,
+        CONDITION_CPU_PRESSURE,
+        CONDITION_IO_PRESSURE,
 
         CONDITION_NEEDS_UPDATE,
         CONDITION_FIRST_BOOT,
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index d0ac1b2..29051ca 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -10,17 +10,21 @@
 #include "alloc-util.h"
 #include "conf-files.h"
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
+#include "dns-domain.h"
+#include "escape.h"
 #include "ether-addr-util.h"
 #include "extract-word.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "hostname-util.h"
 #include "in-addr-util.h"
 #include "log.h"
 #include "macro.h"
 #include "missing_network.h"
 #include "nulstr-util.h"
+#include "parse-helpers.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "percent-util.h"
@@ -30,6 +34,7 @@
 #include "set.h"
 #include "signal-util.h"
 #include "socket-util.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "syslog-util.h"
@@ -40,18 +45,18 @@
                 const void *table,
                 const char *section,
                 const char *lvalue,
-                ConfigParserCallback *func,
-                int *ltype,
-                void **data,
+                ConfigParserCallback *ret_func,
+                int *ret_ltype,
+                void **ret_data,
                 void *userdata) {
 
         const ConfigTableItem *t;
 
         assert(table);
         assert(lvalue);
-        assert(func);
-        assert(ltype);
-        assert(data);
+        assert(ret_func);
+        assert(ret_ltype);
+        assert(ret_data);
 
         for (t = table; t->lvalue; t++) {
 
@@ -61,12 +66,15 @@
                 if (!streq_ptr(section, t->section))
                         continue;
 
-                *func = t->parse;
-                *ltype = t->ltype;
-                *data = t->data;
+                *ret_func = t->parse;
+                *ret_ltype = t->ltype;
+                *ret_data = t->data;
                 return 1;
         }
 
+        *ret_func = NULL;
+        *ret_ltype = 0;
+        *ret_data = NULL;
         return 0;
 }
 
@@ -74,9 +82,9 @@
                 const void *table,
                 const char *section,
                 const char *lvalue,
-                ConfigParserCallback *func,
-                int *ltype,
-                void **data,
+                ConfigParserCallback *ret_func,
+                int *ret_ltype,
+                void **ret_data,
                 void *userdata) {
 
         ConfigPerfItemLookup lookup = (ConfigPerfItemLookup) table;
@@ -84,9 +92,9 @@
 
         assert(table);
         assert(lvalue);
-        assert(func);
-        assert(ltype);
-        assert(data);
+        assert(ret_func);
+        assert(ret_ltype);
+        assert(ret_data);
 
         if (section) {
                 const char *key;
@@ -95,12 +103,16 @@
                 p = lookup(key, strlen(key));
         } else
                 p = lookup(lvalue, strlen(lvalue));
-        if (!p)
+        if (!p) {
+                *ret_func = NULL;
+                *ret_ltype = 0;
+                *ret_data = NULL;
                 return 0;
+        }
 
-        *func = p->parse;
-        *ltype = p->ltype;
-        *data = (uint8_t*) userdata + p->offset;
+        *ret_func = p->parse;
+        *ret_ltype = p->ltype;
+        *ret_data = (uint8_t*) userdata + p->offset;
         return 1;
 }
 
@@ -133,11 +145,11 @@
         if (r < 0)
                 return r;
         if (r > 0) {
-                if (func)
-                        return func(unit, filename, line, section, section_line,
-                                    lvalue, ltype, rvalue, data, userdata);
+                if (!func)
+                        return 0;
 
-                return 0;
+                return func(unit, filename, line, section, section_line,
+                            lvalue, ltype, rvalue, data, userdata);
         }
 
         /* Warn about unknown non-extension fields. */
@@ -160,7 +172,7 @@
                 char **section,
                 unsigned *section_line,
                 bool *section_ignored,
-                char *l,
+                char *l, /* is modified */
                 void *userdata) {
 
         char *e;
@@ -171,18 +183,18 @@
         assert(l);
 
         l = strstrip(l);
-        if (!*l)
+        if (isempty(l))
                 return 0;
 
-        if (*l == '\n')
+        if (l[0] == '\n')
                 return 0;
 
         if (!utf8_is_valid(l))
                 return log_syntax_invalid_utf8(unit, LOG_WARNING, filename, line, l);
 
-        if (*l == '[') {
+        if (l[0] == '[') {
+                _cleanup_free_ char *n = NULL;
                 size_t k;
-                char *n;
 
                 k = strlen(l);
                 assert(k > 0);
@@ -194,15 +206,17 @@
                 if (!n)
                         return log_oom();
 
-                if (sections && !nulstr_contains(sections, n)) {
-                        bool ignore = flags & CONFIG_PARSE_RELAXED;
-                        const char *t;
+                if (!string_is_safe(n))
+                        return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EBADMSG), "Bad characters in section header '%s'", l);
 
-                        ignore = ignore || startswith(n, "X-");
+                if (sections && !nulstr_contains(sections, n)) {
+                        bool ignore;
+
+                        ignore = (flags & CONFIG_PARSE_RELAXED) || startswith(n, "X-");
 
                         if (!ignore)
                                 NULSTR_FOREACH(t, sections)
-                                        if (streq_ptr(n, startswith(t, "-"))) {
+                                        if (streq_ptr(n, startswith(t, "-"))) { /* Ignore sections prefixed with "-" in valid section list */
                                                 ignore = true;
                                                 break;
                                         }
@@ -210,7 +224,6 @@
                         if (!ignore)
                                 log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown section '%s'. Ignoring.", n);
 
-                        free(n);
                         *section = mfree(*section);
                         *section_line = 0;
                         *section_ignored = true;
@@ -264,21 +277,18 @@
                 const void *table,
                 ConfigParseFlags flags,
                 void *userdata,
-                usec_t *latest_mtime) {
+                struct stat *ret_stat) {
 
         _cleanup_free_ char *section = NULL, *continuation = NULL;
         _cleanup_fclose_ FILE *ours = NULL;
         unsigned line = 0, section_line = 0;
         bool section_ignored = false, bom_seen = false;
+        struct stat st;
         int r, fd;
-        usec_t mtime;
 
         assert(filename);
         assert(lookup);
 
-        /* latest_mtime is an input-output parameter: it will be updated if the mtime of the file we're
-         * looking at is later than the current *latest_mtime value. */
-
         if (!f) {
                 f = ours = fopen(filename, "re");
                 if (!f) {
@@ -287,22 +297,28 @@
                         if ((flags & CONFIG_PARSE_WARN) || errno == ENOENT)
                                 log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, errno,
                                                "Failed to open configuration file '%s': %m", filename);
-                        return errno == ENOENT ? 0 : -errno;
+
+                        if (errno == ENOENT) {
+                                if (ret_stat)
+                                        *ret_stat = (struct stat) {};
+
+                                return 0;
+                        }
+
+                        return -errno;
                 }
         }
 
         fd = fileno(f);
         if (fd >= 0) { /* stream might not have an fd, let's be careful hence */
-                struct stat st;
 
                 if (fstat(fd, &st) < 0)
                         return log_full_errno(FLAGS_SET(flags, CONFIG_PARSE_WARN) ? LOG_ERR : LOG_DEBUG, errno,
                                               "Failed to fstat(%s): %m", filename);
 
                 (void) stat_warn_permissions(filename, &st);
-                mtime = timespec_load(&st.st_mtim);
         } else
-                mtime = 0;
+                st = (struct stat) {};
 
         for (;;) {
                 _cleanup_free_ char *buf = NULL;
@@ -422,12 +438,43 @@
                 }
         }
 
-        if (latest_mtime)
-                *latest_mtime = MAX(*latest_mtime, mtime);
+        if (ret_stat)
+                *ret_stat = st;
 
         return 1;
 }
 
+int hashmap_put_stats_by_path(Hashmap **stats_by_path, const char *path, const struct stat *st) {
+        _cleanup_free_ struct stat *st_copy = NULL;
+        _cleanup_free_ char *path_copy = NULL;
+        int r;
+
+        assert(stats_by_path);
+        assert(path);
+        assert(st);
+
+        r = hashmap_ensure_allocated(stats_by_path, &path_hash_ops_free_free);
+        if (r < 0)
+                return r;
+
+        st_copy = newdup(struct stat, st, 1);
+        if (!st_copy)
+                return -ENOMEM;
+
+        path_copy = strdup(path);
+        if (!path)
+                return -ENOMEM;
+
+        r = hashmap_put(*stats_by_path, path_copy, st_copy);
+        if (r < 0)
+                return r;
+
+        assert(r > 0);
+        TAKE_PTR(path_copy);
+        TAKE_PTR(st_copy);
+        return 0;
+}
+
 static int config_parse_many_files(
                 const char* const* conf_files,
                 char **files,
@@ -436,30 +483,52 @@
                 const void *table,
                 ConfigParseFlags flags,
                 void *userdata,
-                usec_t *ret_mtime) {
+                Hashmap **ret_stats_by_path) {
 
-        usec_t mtime = 0;
-        char **fn;
+        _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL;
+        struct stat st;
         int r;
 
+        if (ret_stats_by_path) {
+                stats_by_path = hashmap_new(&path_hash_ops_free_free);
+                if (!stats_by_path)
+                        return -ENOMEM;
+        }
+
         /* First read the first found main config file. */
-        STRV_FOREACH(fn, (char**) conf_files) {
-                r = config_parse(NULL, *fn, NULL, sections, lookup, table, flags, userdata, &mtime);
+        STRV_FOREACH(fn, conf_files) {
+                r = config_parse(NULL, *fn, NULL, sections, lookup, table, flags, userdata, &st);
                 if (r < 0)
                         return r;
-                if (r > 0)
-                        break;
+                if (r == 0)
+                        continue;
+
+                if (ret_stats_by_path) {
+                        r = hashmap_put_stats_by_path(&stats_by_path, *fn, &st);
+                        if (r < 0)
+                                return r;
+                }
+
+                break;
         }
 
         /* Then read all the drop-ins. */
         STRV_FOREACH(fn, files) {
-                r = config_parse(NULL, *fn, NULL, sections, lookup, table, flags, userdata, &mtime);
+                r = config_parse(NULL, *fn, NULL, sections, lookup, table, flags, userdata, &st);
                 if (r < 0)
                         return r;
+                if (r == 0)
+                        continue;
+
+                if (ret_stats_by_path) {
+                        r = hashmap_put_stats_by_path(&stats_by_path, *fn, &st);
+                        if (r < 0)
+                                return r;
+                }
         }
 
-        if (ret_mtime)
-                *ret_mtime = mtime;
+        if (ret_stats_by_path)
+                *ret_stats_by_path = TAKE_PTR(stats_by_path);
 
         return 0;
 }
@@ -473,7 +542,7 @@
                 const void *table,
                 ConfigParseFlags flags,
                 void *userdata,
-                usec_t *ret_mtime) {
+                Hashmap **ret_stats_by_path) {
 
         _cleanup_strv_free_ char **files = NULL;
         int r;
@@ -484,7 +553,28 @@
 
         return config_parse_many_files(STRV_MAKE_CONST(conf_file),
                                        files, sections, lookup, table, flags, userdata,
-                                       ret_mtime);
+                                       ret_stats_by_path);
+}
+
+static int config_get_dropin_files(
+                const char* const* conf_file_dirs,
+                const char *dropin_dirname,
+                char ***ret) {
+
+        _cleanup_strv_free_ char **dropin_dirs = NULL;
+        const char *suffix;
+        int r;
+
+        assert(conf_file_dirs);
+        assert(dropin_dirname);
+        assert(ret);
+
+        suffix = strjoina("/", dropin_dirname);
+        r = strv_extend_strv_concat(&dropin_dirs, (char**) conf_file_dirs, suffix);
+        if (r < 0)
+                return r;
+
+        return conf_files_list_strv(ret, ".conf", NULL, 0, (const char* const*) dropin_dirs);
 }
 
 /* Parse each config file in the directories specified as strv. */
@@ -497,23 +587,186 @@
                 const void *table,
                 ConfigParseFlags flags,
                 void *userdata,
-                usec_t *ret_mtime) {
+                Hashmap **ret_stats_by_path,
+                char ***ret_dropin_files) {
 
-        _cleanup_strv_free_ char **dropin_dirs = NULL;
         _cleanup_strv_free_ char **files = NULL;
-        const char *suffix;
         int r;
 
-        suffix = strjoina("/", dropin_dirname);
-        r = strv_extend_strv_concat(&dropin_dirs, (char**) conf_file_dirs, suffix);
+        assert(conf_file_dirs);
+        assert(dropin_dirname);
+        assert(sections);
+        assert(table);
+
+        r = config_get_dropin_files(conf_file_dirs, dropin_dirname, &files);
         if (r < 0)
                 return r;
 
-        r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char* const*) dropin_dirs);
+        r = config_parse_many_files(conf_files, files, sections, lookup, table, flags, userdata, ret_stats_by_path);
         if (r < 0)
                 return r;
 
-        return config_parse_many_files(conf_files, files, sections, lookup, table, flags, userdata, ret_mtime);
+        if (ret_dropin_files)
+                *ret_dropin_files = TAKE_PTR(files);
+
+        return 0;
+}
+
+static int dropins_get_stats_by_path(
+                const char* conf_file,
+                const char* const* conf_file_dirs,
+                Hashmap **stats_by_path) {
+
+        _cleanup_strv_free_ char **files = NULL;
+        _cleanup_free_ char *dropin_dirname = NULL;
+        int r;
+
+        assert(conf_file);
+        assert(conf_file_dirs);
+        assert(stats_by_path);
+
+        r = path_extract_filename(conf_file, &dropin_dirname);
+        if (r < 0)
+                return r;
+        if (r == O_DIRECTORY)
+                return -EINVAL;
+
+        if (!strextend(&dropin_dirname, ".d"))
+                return -ENOMEM;
+
+        r = config_get_dropin_files(conf_file_dirs, dropin_dirname, &files);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(fn, files) {
+                struct stat st;
+
+                if (stat(*fn, &st) < 0) {
+                        if (errno == ENOENT)
+                                continue;
+
+                        return -errno;
+                }
+
+                r = hashmap_put_stats_by_path(stats_by_path, *fn, &st);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+int config_get_stats_by_path(
+                const char *suffix,
+                const char *root,
+                unsigned flags,
+                const char* const* dirs,
+                bool check_dropins,
+                Hashmap **ret) {
+
+        _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL;
+        _cleanup_strv_free_ char **files = NULL;
+        int r;
+
+        assert(suffix);
+        assert(dirs);
+        assert(ret);
+
+        /* Unlike config_parse(), this does not support stream. */
+
+        r = conf_files_list_strv(&files, suffix, root, flags, dirs);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(f, files) {
+                struct stat st;
+
+                /* First read the main config file. */
+                if (stat(*f, &st) < 0) {
+                        if (errno == ENOENT)
+                                continue;
+
+                        return -errno;
+                }
+
+                r = hashmap_put_stats_by_path(&stats_by_path, *f, &st);
+                if (r < 0)
+                        return r;
+
+                if (!check_dropins)
+                        continue;
+
+                /* Then read all the drop-ins if requested. */
+                r = dropins_get_stats_by_path(*f, dirs, &stats_by_path);
+                if (r < 0)
+                        return r;
+        }
+
+        *ret = TAKE_PTR(stats_by_path);
+        return 0;
+}
+
+bool stats_by_path_equal(Hashmap *a, Hashmap *b) {
+        struct stat *st_a, *st_b;
+        const char *path;
+
+        if (hashmap_size(a) != hashmap_size(b))
+                return false;
+
+        HASHMAP_FOREACH_KEY(st_a, path, a) {
+                st_b = hashmap_get(b, path);
+                if (!st_b)
+                        return false;
+
+                if (!stat_inode_unmodified(st_a, st_b))
+                        return false;
+        }
+
+        return true;
+}
+
+static void config_section_hash_func(const ConfigSection *c, struct siphash *state) {
+        siphash24_compress_string(c->filename, state);
+        siphash24_compress(&c->line, sizeof(c->line), state);
+}
+
+static int config_section_compare_func(const ConfigSection *x, const ConfigSection *y) {
+        int r;
+
+        r = strcmp(x->filename, y->filename);
+        if (r != 0)
+                return r;
+
+        return CMP(x->line, y->line);
+}
+
+DEFINE_HASH_OPS(config_section_hash_ops, ConfigSection, config_section_hash_func, config_section_compare_func);
+
+int config_section_new(const char *filename, unsigned line, ConfigSection **s) {
+        ConfigSection *cs;
+
+        cs = malloc0(offsetof(ConfigSection, filename) + strlen(filename) + 1);
+        if (!cs)
+                return -ENOMEM;
+
+        strcpy(cs->filename, filename);
+        cs->line = line;
+
+        *s = TAKE_PTR(cs);
+
+        return 0;
+}
+
+unsigned hashmap_find_free_section_line(Hashmap *hashmap) {
+        ConfigSection *cs;
+        unsigned n = 0;
+        void *entry;
+
+        HASHMAP_FOREACH_KEY(entry, cs, hashmap)
+                if (n < cs->line)
+                        n = cs->line;
+
+        return n + 1;
 }
 
 #define DEFINE_PARSER(type, vartype, conv_func)                         \
@@ -532,6 +785,7 @@
 DEFINE_PARSER(sec, usec_t, parse_sec);
 DEFINE_PARSER(sec_def_infinity, usec_t, parse_sec_def_infinity);
 DEFINE_PARSER(mode, mode_t, parse_mode);
+DEFINE_PARSER(pid, pid_t, parse_pid);
 
 int config_parse_iec_size(
                 const char* unit,
@@ -545,14 +799,13 @@
                 void *data,
                 void *userdata) {
 
-        size_t *sz = data;
+        size_t *sz = ASSERT_PTR(data);
         uint64_t v;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = parse_size(rvalue, 1024, &v);
         if (r >= 0 && (uint64_t) (size_t) v != v)
@@ -578,13 +831,12 @@
                 void *data,
                 void *userdata) {
 
-        uint64_t *sz = data;
+        uint64_t *sz = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = parse_size(rvalue, 1000, sz);
         if (r < 0)
@@ -605,13 +857,12 @@
                 void *data,
                 void *userdata) {
 
-        uint64_t *bytes = data;
+        uint64_t *bytes = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = parse_size(rvalue, 1024, bytes);
         if (r < 0)
@@ -620,6 +871,30 @@
         return 0;
 }
 
+int config_parse_iec_uint64_infinity(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint64_t *bytes = ASSERT_PTR(data);
+
+        assert(rvalue);
+
+        if (streq(rvalue, "infinity")) {
+                *bytes = UINT64_MAX;
+                return 0;
+        }
+
+        return config_parse_iec_uint64(unit, filename, line, section, section_line, lvalue, ltype, rvalue, data, userdata);
+}
+
 int config_parse_bool(
                 const char* unit,
                 const char *filename,
@@ -633,13 +908,12 @@
                 void *userdata) {
 
         int k;
-        bool *b = data;
+        bool *b = ASSERT_PTR(data);
         bool fatal = ltype;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         k = parse_boolean(rvalue);
         if (k < 0) {
@@ -699,12 +973,11 @@
                 void *data,
                 void *userdata) {
 
-        int k, *t = data;
+        int k, *t = ASSERT_PTR(data);
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         /* A tristate is pretty much a boolean, except that it can also take an empty string,
          * indicating "uninitialized", much like NULL is for a pointer type. */
@@ -737,16 +1010,110 @@
                 void *data,
                 void *userdata) {
 
-        char **s = data;
+        char **s = ASSERT_PTR(data);
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
+
+        if (isempty(rvalue)) {
+                *s = mfree(*s);
+                return 0;
+        }
+
+        if (FLAGS_SET(ltype, CONFIG_PARSE_STRING_SAFE) && !string_is_safe(rvalue)) {
+                _cleanup_free_ char *escaped = NULL;
+
+                escaped = cescape(rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Specified string contains unsafe characters, ignoring: %s", strna(escaped));
+                return 0;
+        }
+
+        if (FLAGS_SET(ltype, CONFIG_PARSE_STRING_ASCII) && !ascii_is_valid(rvalue)) {
+                _cleanup_free_ char *escaped = NULL;
+
+                escaped = cescape(rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Specified string contains invalid ASCII characters, ignoring: %s", strna(escaped));
+                return 0;
+        }
 
         return free_and_strdup_warn(s, empty_to_null(rvalue));
 }
 
+int config_parse_dns_name(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        char **hostname = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *hostname = mfree(*hostname);
+                return 0;
+        }
+
+        r = dns_name_is_valid(rvalue);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to check validity of DNS domain name '%s', ignoring assignment: %m", rvalue);
+                return 0;
+        }
+        if (r == 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Specified invalid DNS domain name, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        return free_and_strdup_warn(hostname, rvalue);
+}
+
+int config_parse_hostname(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        char **hostname = ASSERT_PTR(data);
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *hostname = mfree(*hostname);
+                return 0;
+        }
+
+        if (!hostname_is_valid(rvalue, 0)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Specified invalid hostname, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        return config_parse_dns_name(unit, filename, line, section, section_line,
+                                     lvalue, ltype, rvalue, data, userdata);
+}
+
 int config_parse_path(
                 const char *unit,
                 const char *filename,
@@ -761,13 +1128,12 @@
 
         _cleanup_free_ char *n = NULL;
         bool fatal = ltype;
-        char **s = data;
+        char **s = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue))
                 goto finalize;
@@ -796,13 +1162,12 @@
                 void *data,
                 void *userdata) {
 
-        char ***sv = data;
+        char ***sv = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *sv = strv_free(*sv);
@@ -842,7 +1207,7 @@
 
         Disabled reason = ltype;
 
-        switch(reason) {
+        switch (reason) {
 
         case DISABLED_CONFIGURATION:
                 log_syntax(unit, LOG_DEBUG, filename, line, 0,
@@ -1000,13 +1365,12 @@
                 void *data,
                 void *userdata) {
 
-        char **s = data;
+        char **s = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *s = mfree(*s);
@@ -1038,13 +1402,12 @@
                 void *userdata) {
 
         _cleanup_strv_free_ char **names = NULL;
-        char ***s = data;
+        char ***s = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *s = strv_free(*s);
@@ -1097,14 +1460,13 @@
                 void *data,
                 void *userdata) {
 
-        uint16_t *s = data;
+        uint16_t *s = ASSERT_PTR(data);
         uint16_t port;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *s = 0;
@@ -1134,11 +1496,10 @@
                 void *data,
                 void *userdata) {
 
-        uint32_t *mtu = data;
+        uint32_t *mtu = ASSERT_PTR(data);
         int r;
 
         assert(rvalue);
-        assert(mtu);
 
         r = parse_mtu(ltype, rvalue, mtu);
         if (r == -ERANGE) {
@@ -1208,13 +1569,12 @@
                 void *data,
                 void *userdata) {
 
-        unsigned *permille = data;
+        unsigned *permille = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(permille);
 
         r = parse_permille(rvalue);
         if (r < 0) {
@@ -1263,7 +1623,99 @@
         return 0;
 }
 
-int config_parse_hwaddr(
+int config_parse_hw_addr(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        struct hw_addr_data a, *hwaddr = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *hwaddr = HW_ADDR_NULL;
+                return 0;
+        }
+
+        r = parse_hw_addr_full(rvalue, ltype, &a);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Not a valid hardware address, ignoring assignment: %s", rvalue);
+                return 0;
+        }
+
+        *hwaddr = a;
+        return 0;
+}
+
+int config_parse_hw_addrs(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Set **hwaddrs = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                /* Empty assignment resets the list */
+                *hwaddrs = set_free(*hwaddrs);
+                return 0;
+        }
+
+        for (const char *p = rvalue;;) {
+                _cleanup_free_ char *word = NULL;
+                _cleanup_free_ struct hw_addr_data *n = NULL;
+
+                r = extract_first_word(&p, &word, NULL, 0);
+                if (r == 0)
+                        return 0;
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Invalid syntax, ignoring: %s", rvalue);
+                        return 0;
+                }
+
+                n = new(struct hw_addr_data, 1);
+                if (!n)
+                        return log_oom();
+
+                r = parse_hw_addr_full(word, ltype, n);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Not a valid hardware address, ignoring: %s", word);
+                        continue;
+                }
+
+                r = set_ensure_consume(hwaddrs, &hw_addr_hash_ops_free, TAKE_PTR(n));
+                if (r < 0)
+                        return log_oom();
+        }
+}
+
+int config_parse_ether_addr(
                 const char *unit,
                 const char *filename,
                 unsigned line,
@@ -1276,13 +1728,12 @@
                 void *userdata) {
 
         _cleanup_free_ struct ether_addr *n = NULL;
-        struct ether_addr **hwaddr = data;
+        struct ether_addr **hwaddr = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *hwaddr = mfree(*hwaddr);
@@ -1293,7 +1744,7 @@
         if (!n)
                 return log_oom();
 
-        r = ether_addr_from_string(rvalue, n);
+        r = parse_ether_addr(rvalue, n);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Not a valid MAC address, ignoring assignment: %s", rvalue);
@@ -1305,7 +1756,7 @@
         return 0;
 }
 
-int config_parse_hwaddrs(
+int config_parse_ether_addrs(
                 const char *unit,
                 const char *filename,
                 unsigned line,
@@ -1317,17 +1768,16 @@
                 void *data,
                 void *userdata) {
 
-        Set **hwaddrs = data;
+        Set **hwaddrs = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty assignment resets the list */
-                *hwaddrs = set_free_free(*hwaddrs);
+                *hwaddrs = set_free(*hwaddrs);
                 return 0;
         }
 
@@ -1350,18 +1800,16 @@
                 if (!n)
                         return log_oom();
 
-                r = ether_addr_from_string(word, n);
+                r = parse_ether_addr(word, n);
                 if (r < 0) {
                         log_syntax(unit, LOG_WARNING, filename, line, r,
                                    "Not a valid MAC address, ignoring: %s", word);
                         continue;
                 }
 
-                r = set_ensure_put(hwaddrs, &ether_addr_hash_ops, n);
+                r = set_ensure_consume(hwaddrs, &ether_addr_hash_ops_free, TAKE_PTR(n));
                 if (r < 0)
                         return log_oom();
-                if (r > 0)
-                        TAKE_PTR(n); /* avoid cleanup */
         }
 }
 
@@ -1378,15 +1826,14 @@
                 void *userdata) {
 
         /* data must be a pointer to struct in_addr or in6_addr, and the type is determined by ltype. */
-        struct in_addr *ipv4 = data;
-        struct in6_addr *ipv6 = data;
+        struct in_addr *ipv4 = ASSERT_PTR(data);
+        struct in6_addr *ipv6 = ASSERT_PTR(data);
         union in_addr_union a;
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
         assert(IN_SET(ltype, AF_INET, AF_INET6));
 
         if (isempty(rvalue)) {
@@ -1419,3 +1866,4 @@
 
 DEFINE_CONFIG_PARSE(config_parse_percent, parse_percent, "Failed to parse percent value");
 DEFINE_CONFIG_PARSE(config_parse_permyriad, parse_permyriad, "Failed to parse permyriad value");
+DEFINE_CONFIG_PARSE_PTR(config_parse_sec_fix_0, parse_sec_fix_0, usec_t, "Failed to parse time value");
diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h
index c3a1382..e1765f5 100644
--- a/src/shared/conf-parser.h
+++ b/src/shared/conf-parser.h
@@ -6,8 +6,10 @@
 #include <stddef.h>
 #include <stdio.h>
 #include <syslog.h>
+#include <sys/stat.h>
 
 #include "alloc-util.h"
+#include "hashmap.h"
 #include "log.h"
 #include "macro.h"
 #include "time-util.h"
@@ -67,18 +69,18 @@
                 const void *table,
                 const char *section,
                 const char *lvalue,
-                ConfigParserCallback *func,
-                int *ltype,
-                void **data,
+                ConfigParserCallback *ret_func,
+                int *ret_ltype,
+                void **ret_data,
                 void *userdata);
 
 /* Linear table search implementation of ConfigItemLookup, based on
  * ConfigTableItem arrays */
-int config_item_table_lookup(const void *table, const char *section, const char *lvalue, ConfigParserCallback *func, int *ltype, void **data, void *userdata);
+int config_item_table_lookup(const void *table, const char *section, const char *lvalue, ConfigParserCallback *ret_func, int *ret_ltype, void **ret_data, void *userdata);
 
 /* gperf implementation of ConfigItemLookup, based on gperf
  * ConfigPerfItem tables */
-int config_item_perf_lookup(const void *table, const char *section, const char *lvalue, ConfigParserCallback *func, int *ltype, void **data, void *userdata);
+int config_item_perf_lookup(const void *table, const char *section, const char *lvalue, ConfigParserCallback *ret_func, int *ret_ltype, void **ret_data, void *userdata);
 
 int config_parse(
                 const char *unit,
@@ -89,7 +91,7 @@
                 const void *table,
                 ConfigParseFlags flags,
                 void *userdata,
-                usec_t *latest_mtime);      /* input/output, possibly NULL */
+                struct stat *ret_stat);     /* possibly NULL */
 
 int config_parse_many_nulstr(
                 const char *conf_file,      /* possibly NULL */
@@ -99,7 +101,7 @@
                 const void *table,
                 ConfigParseFlags flags,
                 void *userdata,
-                usec_t *ret_mtime);         /* possibly NULL */
+                Hashmap **ret_stats_by_path);   /* possibly NULL */
 
 int config_parse_many(
                 const char* const* conf_files,  /* possibly empty */
@@ -110,7 +112,56 @@
                 const void *table,
                 ConfigParseFlags flags,
                 void *userdata,
-                usec_t *ret_mtime);         /* possibly NULL */
+                Hashmap **ret_stats_by_path,  /* possibly NULL */
+                char ***ret_drop_in_files);   /* possibly NULL */
+
+int config_get_stats_by_path(
+                const char *suffix,
+                const char *root,
+                unsigned flags,
+                const char* const* dirs,
+                bool check_dropins,
+                Hashmap **ret);
+
+int hashmap_put_stats_by_path(Hashmap **stats_by_path, const char *path, const struct stat *st);
+bool stats_by_path_equal(Hashmap *a, Hashmap *b);
+
+typedef struct ConfigSection {
+        unsigned line;
+        bool invalid;
+        char filename[];
+} ConfigSection;
+
+static inline ConfigSection* config_section_free(ConfigSection *cs) {
+        return mfree(cs);
+}
+DEFINE_TRIVIAL_CLEANUP_FUNC(ConfigSection*, config_section_free);
+
+int config_section_new(const char *filename, unsigned line, ConfigSection **s);
+extern const struct hash_ops config_section_hash_ops;
+unsigned hashmap_find_free_section_line(Hashmap *hashmap);
+
+static inline bool section_is_invalid(ConfigSection *section) {
+        /* If this returns false, then it does _not_ mean the section is valid. */
+
+        if (!section)
+                return false;
+
+        return section->invalid;
+}
+
+#define DEFINE_SECTION_CLEANUP_FUNCTIONS(type, free_func)               \
+        static inline type* free_func##_or_set_invalid(type *p) {       \
+                assert(p);                                              \
+                                                                        \
+                if (p->section)                                         \
+                        p->section->invalid = true;                     \
+                else                                                    \
+                        free_func(p);                                   \
+                return NULL;                                            \
+        }                                                               \
+        DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func);                  \
+        DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func##_or_set_invalid);
 
 CONFIG_PARSER_PROTOTYPE(config_parse_int);
 CONFIG_PARSER_PROTOTYPE(config_parse_unsigned);
@@ -124,10 +175,13 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_iec_size);
 CONFIG_PARSER_PROTOTYPE(config_parse_si_uint64);
 CONFIG_PARSER_PROTOTYPE(config_parse_iec_uint64);
+CONFIG_PARSER_PROTOTYPE(config_parse_iec_uint64_infinity);
 CONFIG_PARSER_PROTOTYPE(config_parse_bool);
 CONFIG_PARSER_PROTOTYPE(config_parse_id128);
 CONFIG_PARSER_PROTOTYPE(config_parse_tristate);
 CONFIG_PARSER_PROTOTYPE(config_parse_string);
+CONFIG_PARSER_PROTOTYPE(config_parse_dns_name);
+CONFIG_PARSER_PROTOTYPE(config_parse_hostname);
 CONFIG_PARSER_PROTOTYPE(config_parse_path);
 CONFIG_PARSER_PROTOTYPE(config_parse_strv);
 CONFIG_PARSER_PROTOTYPE(config_parse_sec);
@@ -147,11 +201,15 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_mtu);
 CONFIG_PARSER_PROTOTYPE(config_parse_rlimit);
 CONFIG_PARSER_PROTOTYPE(config_parse_vlanprotocol);
-CONFIG_PARSER_PROTOTYPE(config_parse_hwaddr);
-CONFIG_PARSER_PROTOTYPE(config_parse_hwaddrs);
+CONFIG_PARSER_PROTOTYPE(config_parse_hw_addr);
+CONFIG_PARSER_PROTOTYPE(config_parse_hw_addrs);
+CONFIG_PARSER_PROTOTYPE(config_parse_ether_addr);
+CONFIG_PARSER_PROTOTYPE(config_parse_ether_addrs);
 CONFIG_PARSER_PROTOTYPE(config_parse_in_addr_non_null);
 CONFIG_PARSER_PROTOTYPE(config_parse_percent);
 CONFIG_PARSER_PROTOTYPE(config_parse_permyriad);
+CONFIG_PARSER_PROTOTYPE(config_parse_pid);
+CONFIG_PARSER_PROTOTYPE(config_parse_sec_fix_0);
 
 typedef enum Disabled {
         DISABLED_CONFIGURATION,
@@ -159,6 +217,13 @@
         DISABLED_EXPERIMENTAL,
 } Disabled;
 
+typedef enum ConfigParseStringFlags {
+        CONFIG_PARSE_STRING_SAFE  = 1 << 0,
+        CONFIG_PARSE_STRING_ASCII = 1 << 1,
+
+        CONFIG_PARSE_STRING_SAFE_AND_ASCII = CONFIG_PARSE_STRING_SAFE | CONFIG_PARSE_STRING_ASCII,
+} ConfigParseStringFlags;
+
 #define DEFINE_CONFIG_PARSE(function, parser, msg)                      \
         CONFIG_PARSER_PROTOTYPE(function) {                             \
                 int *i = data, r;                                       \
@@ -181,13 +246,12 @@
 
 #define DEFINE_CONFIG_PARSE_PTR(function, parser, type, msg)            \
         CONFIG_PARSER_PROTOTYPE(function) {                             \
-                type *i = data;                                         \
+                type *i = ASSERT_PTR(data);                             \
                 int r;                                                  \
                                                                         \
                 assert(filename);                                       \
                 assert(lvalue);                                         \
                 assert(rvalue);                                         \
-                assert(data);                                           \
                                                                         \
                 r = parser(rvalue, i);                                  \
                 if (r < 0)                                              \
@@ -247,7 +311,7 @@
 
 #define DEFINE_CONFIG_PARSE_ENUMV(function, name, type, invalid, msg)          \
         CONFIG_PARSER_PROTOTYPE(function) {                                    \
-                type **enums = data;                                           \
+                type **enums = ASSERT_PTR(data);                               \
                 _cleanup_free_ type *xs = NULL;                                \
                 size_t i = 0;                                                  \
                 int r;                                                         \
@@ -255,7 +319,6 @@
                 assert(filename);                                              \
                 assert(lvalue);                                                \
                 assert(rvalue);                                                \
-                assert(data);                                                  \
                                                                                \
                 xs = new0(type, 1);                                            \
                 if (!xs)                                                       \
diff --git a/src/shared/copy.c b/src/shared/copy.c
index 04f99a2..4eb4f9f 100644
--- a/src/shared/copy.c
+++ b/src/shared/copy.c
@@ -20,14 +20,17 @@
 #include "io-util.h"
 #include "macro.h"
 #include "missing_syscall.h"
+#include "mkdir-label.h"
 #include "mountpoint-util.h"
 #include "nulstr-util.h"
 #include "rm-rf.h"
 #include "selinux-util.h"
+#include "signal-util.h"
 #include "stat-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "time-util.h"
 #include "tmpfile-util.h"
 #include "umask-util.h"
@@ -87,20 +90,62 @@
         return FLAGS_SET(flags, O_NONBLOCK) ? FD_IS_NONBLOCKING_PIPE : FD_IS_BLOCKING_PIPE;
 }
 
-static int sigint_pending(void) {
-        sigset_t ss;
+static int look_for_signals(CopyFlags copy_flags) {
+        int r;
 
-        assert_se(sigemptyset(&ss) >= 0);
-        assert_se(sigaddset(&ss, SIGINT) >= 0);
+        if ((copy_flags & (COPY_SIGINT|COPY_SIGTERM)) == 0)
+                return 0;
 
-        if (sigtimedwait(&ss, NULL, &(struct timespec) { 0, 0 }) < 0) {
-                if (errno == EAGAIN)
-                        return false;
+        r = pop_pending_signal(copy_flags & COPY_SIGINT ? SIGINT : 0,
+                               copy_flags & COPY_SIGTERM ? SIGTERM : 0);
+        if (r < 0)
+                return r;
+        if (r != 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINTR),
+                                       "Got %s, cancelling copy operation.", signal_to_string(r));
 
+        return 0;
+}
+
+static int create_hole(int fd, off_t size) {
+        off_t offset;
+        off_t end;
+
+        offset = lseek(fd, 0, SEEK_CUR);
+        if (offset < 0)
                 return -errno;
+
+        end = lseek(fd, 0, SEEK_END);
+        if (end < 0)
+                return -errno;
+
+        /* If we're not at the end of the target file, try to punch a hole in the existing space using fallocate(). */
+
+        if (offset < end &&
+            fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, offset, MIN(size, end - offset)) < 0 &&
+            !ERRNO_IS_NOT_SUPPORTED(errno))
+                return -errno;
+
+        if (end - offset >= size) {
+                /* If we've created the full hole, set the file pointer to the end of the hole we created and exit. */
+                if (lseek(fd, offset + size, SEEK_SET) < 0)
+                        return -errno;
+
+                return 0;
         }
 
-        return true;
+        /* If we haven't created the full hole, use ftruncate() to grow the file (and the hole) to the
+         * required size and move the file pointer to the end of the file. */
+
+        size -= end - offset;
+
+        if (ftruncate(fd, end + size) < 0)
+                return -errno;
+
+        if (lseek(fd, 0, SEEK_END) < 0)
+                return -errno;
+
+        return 0;
 }
 
 int copy_bytes_full(
@@ -191,17 +236,56 @@
                 if (max_bytes <= 0)
                         return 1; /* return > 0 if we hit the max_bytes limit */
 
-                if (FLAGS_SET(copy_flags, COPY_SIGINT)) {
-                        r = sigint_pending();
-                        if (r < 0)
-                                return r;
-                        if (r > 0)
-                                return -EINTR;
-                }
+                r = look_for_signals(copy_flags);
+                if (r < 0)
+                        return r;
 
                 if (max_bytes != UINT64_MAX && m > max_bytes)
                         m = max_bytes;
 
+                if (copy_flags & COPY_HOLES) {
+                        off_t c, e;
+
+                        c = lseek(fdf, 0, SEEK_CUR);
+                        if (c < 0)
+                                return -errno;
+
+                        /* To see if we're in a hole, we search for the next data offset. */
+                        e = lseek(fdf, c, SEEK_DATA);
+                        if (e < 0 && errno == ENXIO)
+                                /* If errno == ENXIO, that means we've reached the final hole of the file and
+                                * that hole isn't followed by more data. */
+                                e = lseek(fdf, 0, SEEK_END);
+                        if (e < 0)
+                                return -errno;
+
+                        /* If we're in a hole (current offset is not a data offset), create a hole of the
+                         * same size in the target file. */
+                        if (e > c) {
+                                r = create_hole(fdt, e - c);
+                                if (r < 0)
+                                        return r;
+                        }
+
+                        c = e; /* Set c to the start of the data segment. */
+
+                        /* After copying a potential hole, find the end of the data segment by looking for
+                         * the next hole. If we get ENXIO, we're at EOF. */
+                        e = lseek(fdf, c, SEEK_HOLE);
+                        if (e < 0) {
+                                if (errno == ENXIO)
+                                        break;
+                                return -errno;
+                        }
+
+                        /* SEEK_HOLE modifies the file offset so we need to move back to the initial offset. */
+                        if (lseek(fdf, c, SEEK_SET) < 0)
+                                return -errno;
+
+                        /* Make sure we're not copying more than the current data segment. */
+                        m = MIN(m, (size_t) e - c);
+                }
+
                 /* First try copy_file_range(), unless we already tried */
                 if (try_cfr) {
                         n = try_copy_file_range(fdf, NULL, fdt, NULL, m, 0u);
@@ -402,11 +486,17 @@
                 if (r < 0)
                         return r;
         }
-        r = symlinkat(target, dt, to);
+        r = RET_NERRNO(symlinkat(target, dt, to));
         if (copy_flags & COPY_MAC_CREATE)
                 mac_selinux_create_file_clear();
-        if (r < 0)
-                return -errno;
+        if (r < 0) {
+                if (FLAGS_SET(copy_flags, COPY_GRACEFUL_WARN) && (ERRNO_IS_PRIVILEGE(r) || ERRNO_IS_NOT_SUPPORTED(r))) {
+                        log_notice_errno(r, "Failed to copy symlink '%s', ignoring: %m", from);
+                        return 0;
+                }
+
+                return r;
+        }
 
         if (fchownat(dt, to,
                      uid_is_valid(override_uid) ? override_uid : st->st_uid,
@@ -436,7 +526,7 @@
                 const char *to,
                 CopyFlags copy_flags) {
 
-        _cleanup_close_ int dt_copy = -1;
+        _cleanup_close_ int dt_copy = -EBADF;
         int r;
 
         assert(c);
@@ -485,8 +575,6 @@
 }
 
 static int hardlink_context_realize(HardlinkContext *c) {
-        int r;
-
         if (!c)
                 return 0;
 
@@ -498,15 +586,9 @@
 
         assert(c->subdir);
 
-        if (mkdirat(c->parent_fd, c->subdir, 0700) < 0)
-                return -errno;
-
-        c->dir_fd = openat(c->parent_fd, c->subdir, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
-        if (c->dir_fd < 0) {
-                r = -errno;
-                (void) unlinkat(c->parent_fd, c->subdir, AT_REMOVEDIR);
-                return r;
-        }
+        c->dir_fd = open_mkdir_at(c->parent_fd, c->subdir, O_EXCL|O_CLOEXEC, 0700);
+        if (c->dir_fd < 0)
+                return c->dir_fd;
 
         return 1;
 }
@@ -600,6 +682,24 @@
         return 1;
 }
 
+static int fd_copy_tree_generic(
+                int df,
+                const char *from,
+                const struct stat *st,
+                int dt,
+                const char *to,
+                dev_t original_device,
+                unsigned depth_left,
+                uid_t override_uid,
+                gid_t override_gid,
+                CopyFlags copy_flags,
+                const Set *denylist,
+                HardlinkContext *hardlink_context,
+                const char *display_path,
+                copy_progress_path_t progress_path,
+                copy_progress_bytes_t progress_bytes,
+                void *userdata);
+
 static int fd_copy_regular(
                 int df,
                 const char *from,
@@ -613,7 +713,7 @@
                 copy_progress_bytes_t progress,
                 void *userdata) {
 
-        _cleanup_close_ int fdf = -1, fdt = -1;
+        _cleanup_close_ int fdf = -EBADF, fdt = -EBADF;
         int r, q;
 
         assert(from);
@@ -642,10 +742,8 @@
                 return -errno;
 
         r = copy_bytes_full(fdf, fdt, UINT64_MAX, copy_flags, NULL, NULL, progress, userdata);
-        if (r < 0) {
-                (void) unlinkat(dt, to, 0);
-                return r;
-        }
+        if (r < 0)
+                goto fail;
 
         if (fchown(fdt,
                    uid_is_valid(override_uid) ? override_uid : st->st_uid,
@@ -656,18 +754,27 @@
                 r = -errno;
 
         (void) futimens(fdt, (struct timespec[]) { st->st_atim, st->st_mtim });
-        (void) copy_xattr(fdf, fdt);
+        (void) copy_xattr(fdf, fdt, copy_flags);
 
-        q = close(fdt);
-        fdt = -1;
+        if (copy_flags & COPY_FSYNC) {
+                if (fsync(fdt) < 0) {
+                        r = -errno;
+                        goto fail;
+                }
+        }
 
+        q = close_nointr(TAKE_FD(fdt)); /* even if this fails, the fd is now invalidated */
         if (q < 0) {
-                r = -errno;
-                (void) unlinkat(dt, to, 0);
+                r = q;
+                goto fail;
         }
 
         (void) memorize_hardlink(hardlink_context, st, dt, to);
         return r;
+
+fail:
+        (void) unlinkat(dt, to, 0);
+        return r;
 }
 
 static int fd_copy_fifo(
@@ -697,11 +804,17 @@
                 if (r < 0)
                         return r;
         }
-        r = mkfifoat(dt, to, st->st_mode & 07777);
+        r = RET_NERRNO(mkfifoat(dt, to, st->st_mode & 07777));
         if (copy_flags & COPY_MAC_CREATE)
                 mac_selinux_create_file_clear();
-        if (r < 0)
-                return -errno;
+        if (r < 0) {
+                if (FLAGS_SET(copy_flags, COPY_GRACEFUL_WARN) && (ERRNO_IS_PRIVILEGE(r) || ERRNO_IS_NOT_SUPPORTED(r))) {
+                        log_notice_errno(r, "Failed to copy fifo '%s', ignoring: %m", from);
+                        return 0;
+                }
+
+                return r;
+        }
 
         if (fchownat(dt, to,
                      uid_is_valid(override_uid) ? override_uid : st->st_uid,
@@ -745,11 +858,17 @@
                 if (r < 0)
                         return r;
         }
-        r = mknodat(dt, to, st->st_mode, st->st_rdev);
+        r = RET_NERRNO(mknodat(dt, to, st->st_mode, st->st_rdev));
         if (copy_flags & COPY_MAC_CREATE)
                 mac_selinux_create_file_clear();
-        if (r < 0)
-                return -errno;
+        if (r < 0) {
+                if (FLAGS_SET(copy_flags, COPY_GRACEFUL_WARN) && (ERRNO_IS_PRIVILEGE(r) || ERRNO_IS_NOT_SUPPORTED(r))) {
+                        log_notice_errno(r, "Failed to copy node '%s', ignoring: %m", from);
+                        return 0;
+                }
+
+                return r;
+        }
 
         if (fchownat(dt, to,
                      uid_is_valid(override_uid) ? override_uid : st->st_uid,
@@ -777,6 +896,7 @@
                 uid_t override_uid,
                 gid_t override_gid,
                 CopyFlags copy_flags,
+                const Set *denylist,
                 HardlinkContext *hardlink_context,
                 const char *display_path,
                 copy_progress_path_t progress_path,
@@ -784,13 +904,12 @@
                 void *userdata) {
 
         _cleanup_(hardlink_context_destroy) HardlinkContext our_hardlink_context = {
-                .dir_fd = -1,
-                .parent_fd = -1,
+                .dir_fd = -EBADF,
+                .parent_fd = -EBADF,
         };
 
-        _cleanup_close_ int fdf = -1, fdt = -1;
+        _cleanup_close_ int fdf = -EBADF, fdt = -EBADF;
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         bool exists, created;
         int r;
 
@@ -823,7 +942,7 @@
 
         exists = false;
         if (copy_flags & COPY_MERGE_EMPTY) {
-                r = dir_is_empty_at(dt, to);
+                r = dir_is_empty_at(dt, to, /* ignore_hidden_or_backup= */ false);
                 if (r < 0 && r != -ENOENT)
                         return r;
                 else if (r == 1)
@@ -860,13 +979,9 @@
                 if (dot_or_dot_dot(de->d_name))
                         continue;
 
-                if (FLAGS_SET(copy_flags, COPY_SIGINT)) {
-                        r = sigint_pending();
-                        if (r < 0)
-                                return r;
-                        if (r > 0)
-                                return -EINTR;
-                }
+                r = look_for_signals(copy_flags);
+                if (r < 0)
+                        return r;
 
                 if (fstatat(dirfd(d), de->d_name, &buf, AT_SYMLINK_NOFOLLOW) < 0) {
                         r = -errno;
@@ -884,6 +999,11 @@
                                 return r;
                 }
 
+                if (set_contains(denylist, &buf)) {
+                        log_debug("%s/%s is in the denylist, skipping", from, de->d_name);
+                        continue;
+                }
+
                 if (S_ISDIR(buf.st_mode)) {
                         /*
                          * Don't descend into directories on other file systems, if this is requested. We do a simple
@@ -914,20 +1034,14 @@
                                 if (r > 0)
                                         continue;
                         }
+                }
 
-                        q = fd_copy_directory(dirfd(d), de->d_name, &buf, fdt, de->d_name, original_device, depth_left-1, override_uid, override_gid, copy_flags, hardlink_context, child_display_path, progress_path, progress_bytes, userdata);
-                } else if (S_ISREG(buf.st_mode))
-                        q = fd_copy_regular(dirfd(d), de->d_name, &buf, fdt, de->d_name, override_uid, override_gid, copy_flags, hardlink_context, progress_bytes, userdata);
-                else if (S_ISLNK(buf.st_mode))
-                        q = fd_copy_symlink(dirfd(d), de->d_name, &buf, fdt, de->d_name, override_uid, override_gid, copy_flags);
-                else if (S_ISFIFO(buf.st_mode))
-                        q = fd_copy_fifo(dirfd(d), de->d_name, &buf, fdt, de->d_name, override_uid, override_gid, copy_flags, hardlink_context);
-                else if (S_ISBLK(buf.st_mode) || S_ISCHR(buf.st_mode) || S_ISSOCK(buf.st_mode))
-                        q = fd_copy_node(dirfd(d), de->d_name, &buf, fdt, de->d_name, override_uid, override_gid, copy_flags, hardlink_context);
-                else
-                        q = -EOPNOTSUPP;
+                q = fd_copy_tree_generic(dirfd(d), de->d_name, &buf, fdt, de->d_name, original_device,
+                                         depth_left-1, override_uid, override_gid, copy_flags, denylist,
+                                         hardlink_context, child_display_path, progress_path, progress_bytes,
+                                         userdata);
 
-                if (q == -EINTR) /* Propagate SIGINT up instantly */
+                if (q == -EINTR) /* Propagate SIGINT/SIGTERM up instantly */
                         return q;
                 if (q == -EEXIST && (copy_flags & COPY_MERGE))
                         q = 0;
@@ -944,10 +1058,81 @@
                 if (fchmod(fdt, st->st_mode & 07777) < 0)
                         r = -errno;
 
-                (void) copy_xattr(dirfd(d), fdt);
+                (void) copy_xattr(dirfd(d), fdt, copy_flags);
                 (void) futimens(fdt, (struct timespec[]) { st->st_atim, st->st_mtim });
         }
 
+        if (copy_flags & COPY_FSYNC_FULL) {
+                if (fsync(fdt) < 0)
+                        return -errno;
+        }
+
+        return r;
+}
+
+static int fd_copy_leaf(
+                int df,
+                const char *from,
+                const struct stat *st,
+                int dt,
+                const char *to,
+                uid_t override_uid,
+                gid_t override_gid,
+                CopyFlags copy_flags,
+                HardlinkContext *hardlink_context,
+                const char *display_path,
+                copy_progress_bytes_t progress_bytes,
+                void *userdata) {
+        int r;
+
+        if (S_ISREG(st->st_mode))
+                r = fd_copy_regular(df, from, st, dt, to, override_uid, override_gid, copy_flags, hardlink_context, progress_bytes, userdata);
+        else if (S_ISLNK(st->st_mode))
+                r = fd_copy_symlink(df, from, st, dt, to, override_uid, override_gid, copy_flags);
+        else if (S_ISFIFO(st->st_mode))
+                r = fd_copy_fifo(df, from, st, dt, to, override_uid, override_gid, copy_flags, hardlink_context);
+        else if (S_ISBLK(st->st_mode) || S_ISCHR(st->st_mode) || S_ISSOCK(st->st_mode))
+                r = fd_copy_node(df, from, st, dt, to, override_uid, override_gid, copy_flags, hardlink_context);
+        else
+                r = -EOPNOTSUPP;
+
+        return r;
+}
+
+static int fd_copy_tree_generic(
+                int df,
+                const char *from,
+                const struct stat *st,
+                int dt,
+                const char *to,
+                dev_t original_device,
+                unsigned depth_left,
+                uid_t override_uid,
+                gid_t override_gid,
+                CopyFlags copy_flags,
+                const Set *denylist,
+                HardlinkContext *hardlink_context,
+                const char *display_path,
+                copy_progress_path_t progress_path,
+                copy_progress_bytes_t progress_bytes,
+                void *userdata) {
+        int r;
+
+        if (S_ISDIR(st->st_mode))
+                return fd_copy_directory(df, from, st, dt, to, original_device, depth_left-1, override_uid,
+                                         override_gid, copy_flags, denylist, hardlink_context, display_path,
+                                         progress_path, progress_bytes, userdata);
+
+        r = fd_copy_leaf(df, from, st, dt, to, override_uid, override_gid, copy_flags, hardlink_context, display_path, progress_bytes, userdata);
+        /* We just tried to copy a leaf node of the tree. If it failed because the node already exists *and* the COPY_REPLACE flag has been provided, we should unlink the node and re-copy. */
+        if (r == -EEXIST && (copy_flags & COPY_REPLACE)) {
+                /* This codepath is us trying to address an error to copy, if the unlink fails, lets just return the original error. */
+                if (unlinkat(dt, to, 0) < 0)
+                        return r;
+
+                r = fd_copy_leaf(df, from, st, dt, to, override_uid, override_gid, copy_flags, hardlink_context, display_path, progress_bytes, userdata);
+        }
+
         return r;
 }
 
@@ -959,11 +1144,13 @@
                 uid_t override_uid,
                 gid_t override_gid,
                 CopyFlags copy_flags,
+                const Set *denylist,
                 copy_progress_path_t progress_path,
                 copy_progress_bytes_t progress_bytes,
                 void *userdata) {
 
         struct stat st;
+        int r;
 
         assert(from);
         assert(to);
@@ -971,18 +1158,39 @@
         if (fstatat(fdf, from, &st, AT_SYMLINK_NOFOLLOW) < 0)
                 return -errno;
 
-        if (S_ISREG(st.st_mode))
-                return fd_copy_regular(fdf, from, &st, fdt, to, override_uid, override_gid, copy_flags, NULL, progress_bytes, userdata);
-        else if (S_ISDIR(st.st_mode))
-                return fd_copy_directory(fdf, from, &st, fdt, to, st.st_dev, COPY_DEPTH_MAX, override_uid, override_gid, copy_flags, NULL, NULL, progress_path, progress_bytes, userdata);
-        else if (S_ISLNK(st.st_mode))
-                return fd_copy_symlink(fdf, from, &st, fdt, to, override_uid, override_gid, copy_flags);
-        else if (S_ISFIFO(st.st_mode))
-                return fd_copy_fifo(fdf, from, &st, fdt, to, override_uid, override_gid, copy_flags, NULL);
-        else if (S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode) || S_ISSOCK(st.st_mode))
-                return fd_copy_node(fdf, from, &st, fdt, to, override_uid, override_gid, copy_flags, NULL);
-        else
-                return -EOPNOTSUPP;
+        r = fd_copy_tree_generic(fdf, from, &st, fdt, to, st.st_dev, COPY_DEPTH_MAX, override_uid,
+                                 override_gid, copy_flags, denylist, NULL, NULL, progress_path,
+                                 progress_bytes, userdata);
+        if (r < 0)
+                return r;
+
+        if (S_ISDIR(st.st_mode) && (copy_flags & COPY_SYNCFS)) {
+                /* If the top-level inode is a directory run syncfs() now. */
+                r = syncfs_path(fdt, to);
+                if (r < 0)
+                        return r;
+        } else if ((copy_flags & (COPY_FSYNC_FULL|COPY_SYNCFS)) != 0) {
+                /* fsync() the parent dir of what we just copied if COPY_FSYNC_FULL is set. Also do this in
+                 * case COPY_SYNCFS is set but the top-level inode wasn't actually a directory. We do this so that
+                 * COPY_SYNCFS provides reasonable synchronization semantics on any kind of inode: when the
+                 * copy operation is done the whole inode — regardless of its type — and all its children
+                 * will be synchronized to disk. */
+                r = fsync_parent_at(fdt, to);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int sync_dir_by_flags(const char *path, CopyFlags copy_flags) {
+
+        if (copy_flags & COPY_SYNCFS)
+                return syncfs_path(AT_FDCWD, path);
+        if (copy_flags & COPY_FSYNC_FULL)
+                return fsync_parent_at(AT_FDCWD, path);
+
+        return 0;
 }
 
 int copy_directory_fd_full(
@@ -1006,7 +1214,26 @@
         if (r < 0)
                 return r;
 
-        return fd_copy_directory(dirfd, NULL, &st, AT_FDCWD, to, st.st_dev, COPY_DEPTH_MAX, UID_INVALID, GID_INVALID, copy_flags, NULL, NULL, progress_path, progress_bytes, userdata);
+        r = fd_copy_directory(
+                        dirfd, NULL,
+                        &st,
+                        AT_FDCWD, to,
+                        st.st_dev,
+                        COPY_DEPTH_MAX,
+                        UID_INVALID, GID_INVALID,
+                        copy_flags,
+                        NULL, NULL, NULL,
+                        progress_path,
+                        progress_bytes,
+                        userdata);
+        if (r < 0)
+                return r;
+
+        r = sync_dir_by_flags(to, copy_flags);
+        if (r < 0)
+                return r;
+
+        return 0;
 }
 
 int copy_directory_full(
@@ -1030,7 +1257,26 @@
         if (r < 0)
                 return r;
 
-        return fd_copy_directory(AT_FDCWD, from, &st, AT_FDCWD, to, st.st_dev, COPY_DEPTH_MAX, UID_INVALID, GID_INVALID, copy_flags, NULL, NULL, progress_path, progress_bytes, userdata);
+        r = fd_copy_directory(
+                        AT_FDCWD, from,
+                        &st,
+                        AT_FDCWD, to,
+                        st.st_dev,
+                        COPY_DEPTH_MAX,
+                        UID_INVALID, GID_INVALID,
+                        copy_flags,
+                        NULL, NULL, NULL,
+                        progress_path,
+                        progress_bytes,
+                        userdata);
+        if (r < 0)
+                return r;
+
+        r = sync_dir_by_flags(to, copy_flags);
+        if (r < 0)
+                return r;
+
+        return 0;
 }
 
 int copy_file_fd_full(
@@ -1040,7 +1286,8 @@
                 copy_progress_bytes_t progress_bytes,
                 void *userdata) {
 
-        _cleanup_close_ int fdf = -1;
+        _cleanup_close_ int fdf = -EBADF;
+        struct stat st;
         int r;
 
         assert(from);
@@ -1050,12 +1297,35 @@
         if (fdf < 0)
                 return -errno;
 
+        r = fd_verify_regular(fdf);
+        if (r < 0)
+                return r;
+
+        if (fstat(fdt, &st) < 0)
+                return -errno;
+
         r = copy_bytes_full(fdf, fdt, UINT64_MAX, copy_flags, NULL, NULL, progress_bytes, userdata);
+        if (r < 0)
+                return r;
 
-        (void) copy_times(fdf, fdt, copy_flags);
-        (void) copy_xattr(fdf, fdt);
+        /* Make sure to copy file attributes only over if target is a regular
+         * file (so that copying a file to /dev/null won't alter the access
+         * mode/ownership of that device node...) */
+        if (S_ISREG(st.st_mode)) {
+                (void) copy_times(fdf, fdt, copy_flags);
+                (void) copy_xattr(fdf, fdt, copy_flags);
+        }
 
-        return r;
+        if (copy_flags & COPY_FSYNC_FULL) {
+                r = fsync_full(fdt);
+                if (r < 0)
+                        return r;
+        } else if (copy_flags & COPY_FSYNC) {
+                if (fsync(fdt) < 0)
+                        return -errno;
+        }
+
+        return 0;
 }
 
 int copy_file_full(
@@ -1069,9 +1339,9 @@
                 copy_progress_bytes_t progress_bytes,
                 void *userdata) {
 
-        _cleanup_close_ int fdf = -1;
+        _cleanup_close_ int fdf = -EBADF, fdt = -EBADF;
         struct stat st;
-        int r, fdt = -1;  /* avoid false maybe-uninitialized warning */
+        int r;
 
         assert(from);
         assert(to);
@@ -1080,11 +1350,14 @@
         if (fdf < 0)
                 return -errno;
 
-        if (mode == MODE_INVALID)
-                if (fstat(fdf, &st) < 0)
-                        return -errno;
+        if (fstat(fdf, &st) < 0)
+                return -errno;
 
-        RUN_WITH_UMASK(0000) {
+        r = stat_verify_regular(&st);
+        if (r < 0)
+                return r;
+
+        WITH_UMASK(0000) {
                 if (copy_flags & COPY_MAC_CREATE) {
                         r = mac_selinux_create_file_prepare(to, S_IFREG);
                         if (r < 0)
@@ -1098,28 +1371,50 @@
                         return -errno;
         }
 
+        if (!FLAGS_SET(flags, O_EXCL)) { /* if O_EXCL was used we created the thing as regular file, no need to check again */
+                r = fd_verify_regular(fdt);
+                if (r < 0)
+                        goto fail;
+        }
+
         if (chattr_mask != 0)
                 (void) chattr_fd(fdt, chattr_flags, chattr_mask & CHATTR_EARLY_FL, NULL);
 
         r = copy_bytes_full(fdf, fdt, UINT64_MAX, copy_flags, NULL, NULL, progress_bytes, userdata);
-        if (r < 0) {
-                close(fdt);
-                (void) unlink(to);
-                return r;
-        }
+        if (r < 0)
+                goto fail;
 
         (void) copy_times(fdf, fdt, copy_flags);
-        (void) copy_xattr(fdf, fdt);
+        (void) copy_xattr(fdf, fdt, copy_flags);
 
         if (chattr_mask != 0)
                 (void) chattr_fd(fdt, chattr_flags, chattr_mask & ~CHATTR_EARLY_FL, NULL);
 
-        if (close(fdt) < 0) {
-                unlink_noerrno(to);
-                return -errno;
+        if (copy_flags & (COPY_FSYNC|COPY_FSYNC_FULL)) {
+                if (fsync(fdt) < 0) {
+                        r = -errno;
+                        goto fail;
+                }
+        }
+
+        r = close_nointr(TAKE_FD(fdt)); /* even if this fails, the fd is now invalidated */
+        if (r < 0)
+                goto fail;
+
+        if (copy_flags & COPY_FSYNC_FULL) {
+                r = fsync_parent_at(AT_FDCWD, to);
+                if (r < 0)
+                        goto fail;
         }
 
         return 0;
+
+fail:
+        /* Only unlink if we definitely are the ones who created the file */
+        if (FLAGS_SET(flags, O_EXCL))
+                (void) unlink(to);
+
+        return r;
 }
 
 int copy_file_atomic_full(
@@ -1133,7 +1428,7 @@
                 void *userdata) {
 
         _cleanup_(unlink_and_freep) char *t = NULL;
-        _cleanup_close_ int fdt = -1;
+        _cleanup_close_ int fdt = -EBADF;
         int r;
 
         assert(from);
@@ -1187,6 +1482,12 @@
         if (fchmod(fdt, mode) < 0)
                 return -errno;
 
+        if ((copy_flags & (COPY_FSYNC|COPY_FSYNC_FULL))) {
+                /* Sync the file */
+                if (fsync(fdt) < 0)
+                        return -errno;
+        }
+
         if (copy_flags & COPY_REPLACE) {
                 if (renameat(AT_FDCWD, t, AT_FDCWD, to) < 0)
                         return -errno;
@@ -1196,11 +1497,27 @@
                         return r;
         }
 
+        t = mfree(t);
+
         if (chattr_mask != 0)
                 (void) chattr_fd(fdt, chattr_flags, chattr_mask & ~CHATTR_EARLY_FL, NULL);
 
-        t = mfree(t);
+        r = close_nointr(TAKE_FD(fdt)); /* even if this fails, the fd is now invalidated */
+        if (r < 0)
+                goto fail;
+
+        if (copy_flags & COPY_FSYNC_FULL) {
+                /* Sync the parent directory */
+                r = fsync_parent_at(AT_FDCWD, to);
+                if (r < 0)
+                        goto fail;
+        }
+
         return 0;
+
+fail:
+        (void) unlink(to);
+        return r;
 }
 
 int copy_times(int fdf, int fdt, CopyFlags flags) {
@@ -1236,10 +1553,7 @@
         if (fstat(fdf, &st) < 0)
                 return -errno;
 
-        if (fchmod(fdt, st.st_mode & 07777) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(fchmod(fdt, st.st_mode & 07777));
 }
 
 int copy_rights_with_fallback(int fdf, int fdt, const char *patht) {
@@ -1256,10 +1570,9 @@
         return fchmod_and_chown_with_fallback(fdt, patht, st.st_mode & 07777, st.st_uid, st.st_gid);
 }
 
-int copy_xattr(int fdf, int fdt) {
+int copy_xattr(int fdf, int fdt, CopyFlags copy_flags) {
         _cleanup_free_ char *names = NULL;
         int ret = 0, r;
-        const char *p;
 
         r = flistxattr_malloc(fdf, &names);
         if (r < 0)
@@ -1268,7 +1581,7 @@
         NULSTR_FOREACH(p, names) {
                 _cleanup_free_ char *value = NULL;
 
-                if (!startswith(p, "user."))
+                if (!FLAGS_SET(copy_flags, COPY_ALL_XATTRS) && !startswith(p, "user."))
                         continue;
 
                 r = fgetxattr_malloc(fdf, p, &value);
diff --git a/src/shared/copy.h b/src/shared/copy.h
index b36ddfc..1eb6d1c 100644
--- a/src/shared/copy.h
+++ b/src/shared/copy.h
@@ -9,16 +9,25 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
+#include "set.h"
+
 typedef enum CopyFlags {
-        COPY_REFLINK     = 1 << 0, /* Try to reflink */
-        COPY_MERGE       = 1 << 1, /* Merge existing trees with our new one to copy */
-        COPY_REPLACE     = 1 << 2, /* Replace an existing file if there's one */
-        COPY_SAME_MOUNT  = 1 << 3, /* Don't descend recursively into other file systems, across mount point boundaries */
-        COPY_MERGE_EMPTY = 1 << 4, /* Merge an existing, empty directory with our new tree to copy */
-        COPY_CRTIME      = 1 << 5, /* Generate a user.crtime_usec xattr off the source crtime if there is one, on copying */
-        COPY_SIGINT      = 1 << 6, /* Check for SIGINT regularly and return EINTR if seen (caller needs to block SIGINT) */
-        COPY_MAC_CREATE  = 1 << 7, /* Create files with the correct MAC label (currently SELinux only) */
-        COPY_HARDLINKS   = 1 << 8, /* Try to reproduce hard links */
+        COPY_REFLINK       = 1 << 0,  /* Try to reflink */
+        COPY_MERGE         = 1 << 1,  /* Merge existing trees with our new one to copy */
+        COPY_REPLACE       = 1 << 2,  /* Replace an existing file if there's one */
+        COPY_SAME_MOUNT    = 1 << 3,  /* Don't descend recursively into other file systems, across mount point boundaries */
+        COPY_MERGE_EMPTY   = 1 << 4,  /* Merge an existing, empty directory with our new tree to copy */
+        COPY_CRTIME        = 1 << 5,  /* Generate a user.crtime_usec xattr off the source crtime if there is one, on copying */
+        COPY_SIGINT        = 1 << 6,  /* Check for SIGINT regularly and return EINTR if seen (caller needs to block SIGINT) */
+        COPY_SIGTERM       = 1 << 7,  /* ditto, but for SIGTERM */
+        COPY_MAC_CREATE    = 1 << 8,  /* Create files with the correct MAC label (currently SELinux only) */
+        COPY_HARDLINKS     = 1 << 9,  /* Try to reproduce hard links */
+        COPY_FSYNC         = 1 << 10, /* fsync() after we are done */
+        COPY_FSYNC_FULL    = 1 << 11, /* fsync_full() after we are done */
+        COPY_SYNCFS        = 1 << 12, /* syncfs() the *top-level* dir after we are done */
+        COPY_ALL_XATTRS    = 1 << 13, /* Preserve all xattrs when copying, not just those in the user namespace */
+        COPY_HOLES         = 1 << 14, /* Copy holes */
+        COPY_GRACEFUL_WARN = 1 << 15, /* Skip copying file types that aren't supported by the target filesystem */
 } CopyFlags;
 
 typedef int (*copy_progress_bytes_t)(uint64_t n_bytes, void *userdata);
@@ -39,12 +48,12 @@
         return copy_file_atomic_full(from, to, mode, chattr_flags, chattr_mask, copy_flags, NULL, NULL);
 }
 
-int copy_tree_at_full(int fdf, const char *from, int fdt, const char *to, uid_t override_uid, gid_t override_gid, CopyFlags copy_flags, copy_progress_path_t progress_path, copy_progress_bytes_t progress_bytes, void *userdata);
-static inline int copy_tree_at(int fdf, const char *from, int fdt, const char *to, uid_t override_uid, gid_t override_gid, CopyFlags copy_flags) {
-        return copy_tree_at_full(fdf, from, fdt, to, override_uid, override_gid, copy_flags, NULL, NULL, NULL);
+int copy_tree_at_full(int fdf, const char *from, int fdt, const char *to, uid_t override_uid, gid_t override_gid, CopyFlags copy_flags, const Set *denylist, copy_progress_path_t progress_path, copy_progress_bytes_t progress_bytes, void *userdata);
+static inline int copy_tree_at(int fdf, const char *from, int fdt, const char *to, uid_t override_uid, gid_t override_gid, CopyFlags copy_flags, const Set *denylist) {
+        return copy_tree_at_full(fdf, from, fdt, to, override_uid, override_gid, copy_flags, denylist, NULL, NULL, NULL);
 }
-static inline int copy_tree(const char *from, const char *to, uid_t override_uid, gid_t override_gid, CopyFlags copy_flags) {
-        return copy_tree_at_full(AT_FDCWD, from, AT_FDCWD, to, override_uid, override_gid, copy_flags, NULL, NULL, NULL);
+static inline int copy_tree(const char *from, const char *to, uid_t override_uid, gid_t override_gid, CopyFlags copy_flags, const Set *denylist) {
+        return copy_tree_at_full(AT_FDCWD, from, AT_FDCWD, to, override_uid, override_gid, copy_flags, denylist, NULL, NULL, NULL);
 }
 
 int copy_directory_fd_full(int dirfd, const char *to, CopyFlags copy_flags, copy_progress_path_t progress_path, copy_progress_bytes_t progress_bytes, void *userdata);
@@ -68,4 +77,4 @@
 static inline int copy_rights(int fdf, int fdt) {
         return copy_rights_with_fallback(fdf, fdt, NULL); /* no fallback */
 }
-int copy_xattr(int fdf, int fdt);
+int copy_xattr(int fdf, int fdt, CopyFlags copy_flags);
diff --git a/src/shared/coredump-util.c b/src/shared/coredump-util.c
index a0b648b..3d2f179 100644
--- a/src/shared/coredump-util.c
+++ b/src/shared/coredump-util.c
@@ -4,6 +4,7 @@
 #include "extract-word.h"
 #include "fileio.h"
 #include "string-table.h"
+#include "virt.h"
 
 static const char *const coredump_filter_table[_COREDUMP_FILTER_MAX] = {
         [COREDUMP_FILTER_PRIVATE_ANONYMOUS]   = "private-anonymous",
@@ -72,3 +73,15 @@
         return write_string_file("/proc/self/coredump_filter", t,
                                  WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_DISABLE_BUFFER);
 }
+
+/* Turn off core dumps but only if we're running outside of a container. */
+void disable_coredumps(void) {
+        int r;
+
+        if (detect_container() > 0)
+                return;
+
+        r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", WRITE_STRING_FILE_DISABLE_BUFFER);
+        if (r < 0)
+                log_debug_errno(r, "Failed to turn off coredumps, ignoring: %m");
+}
diff --git a/src/shared/coredump-util.h b/src/shared/coredump-util.h
index 09e7ed4..8eda86d 100644
--- a/src/shared/coredump-util.h
+++ b/src/shared/coredump-util.h
@@ -27,3 +27,4 @@
 int coredump_filter_mask_from_string(const char *s, uint64_t *ret);
 
 int set_coredump_filter(uint64_t value);
+void disable_coredumps(void);
diff --git a/src/shared/cpu-set-util.c b/src/shared/cpu-set-util.c
index e3e6963..34c13cf 100644
--- a/src/shared/cpu-set-util.c
+++ b/src/shared/cpu-set-util.c
@@ -18,7 +18,6 @@
 #include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
 
 char* cpu_set_to_string(const CPUSet *a) {
         _cleanup_free_ char *str = NULL;
@@ -62,9 +61,9 @@
                                 return NULL;
 
                         if (range_end > range_start)
-                                r = sprintf(str + len, len > 0 ? " %d-%d" : "%d-%d", range_start, range_end);
+                                r = sprintf(str + len, len > 0 ? " %u-%u" : "%u-%u", range_start, range_end);
                         else
-                                r = sprintf(str + len, len > 0 ? " %d" : "%d", range_start);
+                                r = sprintf(str + len, len > 0 ? " %u" : "%u", range_start);
                         assert_se(r > 0);
                         len += r;
                 }
@@ -74,9 +73,9 @@
                         return NULL;
 
                 if (range_end > range_start)
-                        r = sprintf(str + len, len > 0 ? " %d-%d" : "%d-%d", range_start, range_end);
+                        r = sprintf(str + len, len > 0 ? " %u-%u" : "%u-%u", range_start, range_end);
                 else
-                        r = sprintf(str + len, len > 0 ? " %d" : "%d", range_start);
+                        r = sprintf(str + len, len > 0 ? " %u" : "%u", range_start);
                 assert_se(r > 0);
         }
 
@@ -144,9 +143,7 @@
                 const char *lvalue) {
 
         _cleanup_(cpu_set_reset) CPUSet c = {};
-        const char *p = rvalue;
-
-        assert(p);
+        const char *p = ASSERT_PTR(rvalue);
 
         for (;;) {
                 _cleanup_free_ char *word = NULL;
diff --git a/src/shared/creds-util.c b/src/shared/creds-util.c
index b764198..750ee25 100644
--- a/src/shared/creds-util.c
+++ b/src/shared/creds-util.c
@@ -9,8 +9,11 @@
 #include "sd-id128.h"
 
 #include "blockdev-util.h"
+#include "capability-util.h"
 #include "chattr-util.h"
+#include "constants.h"
 #include "creds-util.h"
+#include "efi-api.h"
 #include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -26,18 +29,20 @@
 #include "tpm2-util.h"
 #include "virt.h"
 
+#define PUBLIC_KEY_MAX (UINT32_C(1024) * UINT32_C(1024))
+
 bool credential_name_valid(const char *s) {
         /* We want that credential names are both valid in filenames (since that's our primary way to pass
          * them around) and as fdnames (which is how we might want to pass them around eventually) */
         return filename_is_valid(s) && fdname_is_valid(s);
 }
 
-int get_credentials_dir(const char **ret) {
+static int get_credentials_dir_internal(const char *envvar, const char **ret) {
         const char *e;
 
         assert(ret);
 
-        e = secure_getenv("CREDENTIALS_DIRECTORY");
+        e = secure_getenv(envvar);
         if (!e)
                 return -ENXIO;
 
@@ -48,6 +53,14 @@
         return 0;
 }
 
+int get_credentials_dir(const char **ret) {
+        return get_credentials_dir_internal("CREDENTIALS_DIRECTORY", ret);
+}
+
+int get_encrypted_credentials_dir(const char **ret) {
+        return get_credentials_dir_internal("ENCRYPTED_CREDENTIALS_DIRECTORY", ret);
+}
+
 int read_credential(const char *name, void **ret, size_t *ret_size) {
         _cleanup_free_ char *fn = NULL;
         const char *d;
@@ -74,6 +87,88 @@
                         (char**) ret, ret_size);
 }
 
+int read_credential_strings_many_internal(
+                const char *first_name, char **first_value,
+                ...) {
+
+        _cleanup_free_ void *b = NULL;
+        int r, ret = 0;
+
+        /* Reads a bunch of credentials into the specified buffers. If the specified buffers are already
+         * non-NULL frees them if a credential is found. Only supports string-based credentials
+         * (i.e. refuses embedded NUL bytes) */
+
+        if (!first_name)
+                return 0;
+
+        r = read_credential(first_name, &b, NULL);
+        if (r == -ENXIO) /* no creds passed at all? propagate this */
+                return r;
+        if (r < 0)
+                ret = r;
+        else
+                free_and_replace(*first_value, b);
+
+        va_list ap;
+        va_start(ap, first_value);
+
+        for (;;) {
+                _cleanup_free_ void *bb = NULL;
+                const char *name;
+                char **value;
+
+                name = va_arg(ap, const char *);
+                if (!name)
+                        break;
+
+                value = va_arg(ap, char **);
+                if (*value)
+                        continue;
+
+                r = read_credential(name, &bb, NULL);
+                if (r < 0) {
+                        if (ret >= 0)
+                                ret = r;
+                } else
+                        free_and_replace(*value, bb);
+        }
+
+        va_end(ap);
+        return ret;
+}
+
+int get_credential_user_password(const char *username, char **ret_password, bool *ret_is_hashed) {
+        _cleanup_(erase_and_freep) char *creds_password = NULL;
+        _cleanup_free_ char *cn = NULL;
+        int r;
+
+        /* Try to pick up the password for this account via the credentials logic */
+        cn = strjoin("passwd.hashed-password.", username);
+        if (!cn)
+                return -ENOMEM;
+
+        r = read_credential(cn, (void**) &creds_password, NULL);
+        if (r == -ENOENT) {
+                free(cn);
+                cn = strjoin("passwd.plaintext-password.", username);
+                if (!cn)
+                        return -ENOMEM;
+
+                r = read_credential(cn, (void**) &creds_password, NULL);
+                if (r < 0)
+                        log_debug_errno(r, "Couldn't read credential '%s', ignoring: %m", cn);
+                else
+                        *ret_is_hashed = false;
+        } else if (r < 0)
+                log_debug_errno(r, "Couldn't read credential '%s', ignoring: %m", cn);
+        else
+                *ret_is_hashed = true;
+
+        *ret_password = TAKE_PTR(creds_password);
+
+        return r;
+}
+
 #if HAVE_OPENSSL
 
 #define CREDENTIAL_HOST_SECRET_SIZE 4096
@@ -93,25 +188,50 @@
         uint8_t data[CREDENTIAL_HOST_SECRET_SIZE];
 } _packed_;
 
+static void warn_not_encrypted(int fd, CredentialSecretFlags flags, const char *dirname, const char *filename) {
+        int r;
+
+        assert(fd >= 0);
+        assert(dirname);
+        assert(filename);
+
+        if (!FLAGS_SET(flags, CREDENTIAL_SECRET_WARN_NOT_ENCRYPTED))
+                return;
+
+        r = fd_is_encrypted(fd);
+        if (r < 0)
+                log_debug_errno(r, "Failed to determine if credential secret file '%s/%s' is encrypted.",
+                                dirname, filename);
+        else if (r == 0)
+                log_warning("Credential secret file '%s/%s' is not located on encrypted media, using anyway.",
+                            dirname, filename);
+}
+
 static int make_credential_host_secret(
                 int dfd,
                 const sd_id128_t machine_id,
+                CredentialSecretFlags flags,
+                const char *dirname,
                 const char *fn,
                 void **ret_data,
                 size_t *ret_size) {
 
-        struct credential_host_secret_format buf;
         _cleanup_free_ char *t = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(dfd >= 0);
         assert(fn);
 
-        fd = openat(dfd, ".", O_CLOEXEC|O_WRONLY|O_TMPFILE, 0400);
+        /* For non-root users creating a temporary file using the openat(2) over "." will fail later, in the
+         * linkat(2) step at the end.  The reason is that linkat(2) requires the CAP_DAC_READ_SEARCH
+         * capability when it uses the AT_EMPTY_PATH flag. */
+        if (have_effective_cap(CAP_DAC_READ_SEARCH) > 0) {
+                fd = openat(dfd, ".", O_CLOEXEC|O_WRONLY|O_TMPFILE, 0400);
+                if (fd < 0)
+                        log_debug_errno(errno, "Failed to create temporary credential file with O_TMPFILE, proceeding without: %m");
+        }
         if (fd < 0) {
-                log_debug_errno(errno, "Failed to create temporary credential file with O_TMPFILE, proceeding without: %m");
-
                 if (asprintf(&t, "credential.secret.%016" PRIx64, random_u64()) < 0)
                         return -ENOMEM;
 
@@ -124,37 +244,41 @@
         if (r < 0)
                 log_debug_errno(r, "Failed to set file attributes for secrets file, ignoring: %m");
 
-        buf = (struct credential_host_secret_format) {
+        struct credential_host_secret_format buf = {
                 .machine_id = machine_id,
         };
 
-        r = genuine_random_bytes(buf.data, sizeof(buf.data), RANDOM_BLOCK);
+        CLEANUP_ERASE(buf);
+
+        r = crypto_random_bytes(buf.data, sizeof(buf.data));
         if (r < 0)
-                goto finish;
+                goto fail;
 
         r = loop_write(fd, &buf, sizeof(buf), false);
         if (r < 0)
-                goto finish;
+                goto fail;
 
         if (fsync(fd) < 0) {
                 r = -errno;
-                goto finish;
+                goto fail;
         }
 
+        warn_not_encrypted(fd, flags, dirname, fn);
+
         if (t) {
                 r = rename_noreplace(dfd, t, dfd, fn);
                 if (r < 0)
-                        goto finish;
+                        goto fail;
 
                 t = mfree(t);
         } else if (linkat(fd, "", dfd, fn, AT_EMPTY_PATH) < 0) {
                 r = -errno;
-                goto finish;
+                goto fail;
         }
 
         if (fsync(dfd) < 0) {
                 r = -errno;
-                goto finish;
+                goto fail;
         }
 
         if (ret_data) {
@@ -163,7 +287,7 @@
                 copy = memdup(buf.data, sizeof(buf.data));
                 if (!copy) {
                         r = -ENOMEM;
-                        goto finish;
+                        goto fail;
                 }
 
                 *ret_data = copy;
@@ -172,126 +296,134 @@
         if (ret_size)
                 *ret_size = sizeof(buf.data);
 
-        r = 0;
+        return 0;
 
-finish:
+fail:
         if (t && unlinkat(dfd, t, 0) < 0)
                 log_debug_errno(errno, "Failed to remove temporary credential key: %m");
 
-        explicit_bzero_safe(&buf, sizeof(buf));
         return r;
 }
 
 int get_credential_host_secret(CredentialSecretFlags flags, void **ret, size_t *ret_size) {
-        _cleanup_free_ char *efn = NULL, *ep = NULL;
-        _cleanup_close_ int dfd = -1;
+        _cleanup_free_ char *_dirname = NULL, *_filename = NULL;
+        _cleanup_close_ int dfd = -EBADF;
         sd_id128_t machine_id;
-        const char *e, *fn, *p;
+        const char *dirname, *filename;
         int r;
 
         r = sd_id128_get_machine_app_specific(credential_app_id, &machine_id);
         if (r < 0)
                 return r;
 
-        e = secure_getenv("SYSTEMD_CREDENTIAL_SECRET");
+        const char *e = secure_getenv("SYSTEMD_CREDENTIAL_SECRET");
         if (e) {
                 if (!path_is_normalized(e))
                         return -EINVAL;
                 if (!path_is_absolute(e))
                         return -EINVAL;
 
-                r = path_extract_directory(e, &ep);
+                r = path_extract_directory(e, &_dirname);
                 if (r < 0)
                         return r;
 
-                r = path_extract_filename(e, &efn);
+                r = path_extract_filename(e, &_filename);
                 if (r < 0)
                         return r;
 
-                p = ep;
-                fn = efn;
+                dirname = _dirname;
+                filename = _filename;
         } else {
-                p = "/var/lib/systemd";
-                fn = "credential.secret";
+                dirname = "/var/lib/systemd";
+                filename = "credential.secret";
         }
 
-        (void) mkdir_p(p, 0755);
-        dfd = open(p, O_CLOEXEC|O_DIRECTORY|O_RDONLY);
+        mkdir_parents(dirname, 0755);
+        dfd = open_mkdir_at(AT_FDCWD, dirname, O_CLOEXEC, 0755);
         if (dfd < 0)
-                return -errno;
+                return log_debug_errno(dfd, "Failed to create or open directory '%s': %m", dirname);
 
         if (FLAGS_SET(flags, CREDENTIAL_SECRET_FAIL_ON_TEMPORARY_FS)) {
                 r = fd_is_temporary_fs(dfd);
                 if (r < 0)
-                        return r;
+                        return log_debug_errno(r, "Failed to check directory '%s': %m", dirname);
                 if (r > 0)
-                        return -ENOMEDIUM;
+                        return log_debug_errno(SYNTHETIC_ERRNO(ENOMEDIUM),
+                                               "Directory '%s' is on a temporary file system, refusing.", dirname);
         }
 
         for (unsigned attempt = 0;; attempt++) {
                 _cleanup_(erase_and_freep) struct credential_host_secret_format *f = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 size_t l = 0;
                 ssize_t n = 0;
                 struct stat st;
 
                 if (attempt >= 3) /* Somebody is playing games with us */
-                        return -EIO;
+                        return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                               "All attempts to create secret store in %s failed.", dirname);
 
-                fd = openat(dfd, fn, O_CLOEXEC|O_RDONLY|O_NOCTTY|O_NOFOLLOW);
+                fd = openat(dfd, filename, O_CLOEXEC|O_RDONLY|O_NOCTTY|O_NOFOLLOW);
                 if (fd < 0) {
                         if (errno != ENOENT || !FLAGS_SET(flags, CREDENTIAL_SECRET_GENERATE))
-                                return -errno;
+                                return log_debug_errno(errno,
+                                                       "Failed to open %s/%s: %m", dirname, filename);
 
-                        r = make_credential_host_secret(dfd, machine_id, fn, ret, ret_size);
+
+                        r = make_credential_host_secret(dfd, machine_id, flags, dirname, filename, ret, ret_size);
                         if (r == -EEXIST) {
-                                log_debug_errno(r, "Credential secret was created while we were creating it. Trying to read new secret.");
+                                log_debug_errno(r, "Credential secret %s/%s appeared while we were creating it, rereading.",
+                                                dirname, filename);
                                 continue;
                         }
                         if (r < 0)
-                                return r;
-
+                                return log_debug_errno(r, "Failed to create credential secret %s/%s: %m",
+                                                       dirname, filename);
                         return 0;
                 }
 
                 if (fstat(fd, &st) < 0)
-                        return -errno;
+                        return log_debug_errno(errno, "Failed to stat %s/%s: %m", dirname, filename);
 
                 r = stat_verify_regular(&st);
                 if (r < 0)
-                        return r;
+                        return log_debug_errno(r, "%s/%s is not a regular file: %m", dirname, filename);
                 if (st.st_nlink == 0) /* Deleted by now, try again */
                         continue;
                 if (st.st_nlink > 1)
-                        return -EPERM; /* Our deletion check won't work if hardlinked somewhere else */
-                if ((st.st_mode & 07777) != 0400) /* Don't use file if not 0400 access mode */
-                        return -EPERM;
-                if (st.st_size > 16*1024*1024)
-                        return -E2BIG;
+                        /* Our deletion check won't work if hardlinked somewhere else */
+                        return log_debug_errno(SYNTHETIC_ERRNO(EPERM),
+                                               "%s/%s has too many links, refusing.",
+                                               dirname, filename);
+                if ((st.st_mode & 07777) != 0400)
+                        /* Don't use file if not 0400 access mode */
+                        return log_debug_errno(SYNTHETIC_ERRNO(EPERM),
+                                               "%s/%s has permissive access mode, refusing.",
+                                               dirname, filename);
                 l = st.st_size;
                 if (l < offsetof(struct credential_host_secret_format, data) + 1)
-                        return -EINVAL;
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "%s/%s is too small, refusing.", dirname, filename);
+                if (l > 16*1024*1024)
+                        return log_debug_errno(SYNTHETIC_ERRNO(E2BIG),
+                                               "%s/%s is too big, refusing.", dirname, filename);
 
                 f = malloc(l+1);
                 if (!f)
-                        return -ENOMEM;
+                        return log_oom_debug();
 
                 n = read(fd, f, l+1);
                 if (n < 0)
-                        return -errno;
+                        return log_debug_errno(errno,
+                                               "Failed to read %s/%s: %m", dirname, filename);
                 if ((size_t) n != l) /* What? The size changed? */
-                        return -EIO;
+                        return log_debug_errno(SYNTHETIC_ERRNO(EIO),
+                                               "Failed to read %s/%s: %m", dirname, filename);
 
                 if (sd_id128_equal(machine_id, f->machine_id)) {
                         size_t sz;
 
-                        if (FLAGS_SET(flags, CREDENTIAL_SECRET_WARN_NOT_ENCRYPTED)) {
-                                r = fd_is_encrypted(fd);
-                                if (r < 0)
-                                        log_debug_errno(r, "Failed to determine if credential secret file '%s/%s' is encrypted.", p, fn);
-                                else if (r == 0)
-                                        log_warning("Credential secret file '%s/%s' is not located on encrypted media, using anyway.", p, fn);
-                        }
+                        warn_not_encrypted(fd, flags, dirname, filename);
 
                         sz = l - offsetof(struct credential_host_secret_format, data);
                         assert(sz > 0);
@@ -303,7 +435,7 @@
 
                                 copy = memdup(f->data, sz);
                                 if (!copy)
-                                        return -ENOMEM;
+                                        return log_oom_debug();
 
                                 *ret = copy;
                         }
@@ -318,18 +450,20 @@
                  * to ensure we are the only ones accessing the file while we delete it. */
 
                 if (flock(fd, LOCK_EX) < 0)
-                        return -errno;
+                        return log_debug_errno(errno,
+                                               "Failed to flock %s/%s: %m", dirname, filename);
 
                 /* Before we delete it check that the file is still linked into the file system */
                 if (fstat(fd, &st) < 0)
-                        return -errno;
+                        return log_debug_errno(errno, "Failed to stat %s/%s: %m", dirname, filename);
                 if (st.st_nlink == 0) /* Already deleted by now? */
                         continue;
                 if (st.st_nlink != 1) /* Safety check, someone is playing games with us */
-                        return -EPERM;
-
-                if (unlinkat(dfd, fn, 0) < 0)
-                        return -errno;
+                        return log_debug_errno(SYNTHETIC_ERRNO(EPERM),
+                                               "%s/%s unexpectedly has too many links.",
+                                               dirname, filename);
+                if (unlinkat(dfd, filename, 0) < 0)
+                        return log_debug_errno(errno, "Failed to unlink %s/%s: %m", dirname, filename);
 
                 /* And now try again */
         }
@@ -346,6 +480,11 @@
  *
  *      3. The concatenation of the above.
  *
+ *      4. Or a fixed "empty" key. This will not provide confidentiality or authenticity, of course, but is
+ *         useful to encode credentials for the initrd on TPM-less systems, where we simply have no better
+ *         concept to bind things to. Note that decryption of a key set up like this will be refused on
+ *         systems that have a TPM and have SecureBoot enabled.
+ *
  * The above is hashed with SHA256 which is then used as encryption key for AES256-GCM. The encrypted
  * credential is a short (unencrypted) header describing which of the three keys to use, the IV to use for
  * AES256-GCM and some more meta information (sizes of certain objects) that is strictly speaking redundant,
@@ -381,6 +520,13 @@
         /* Followed by NUL bytes until next 8 byte boundary */
 };
 
+struct _packed_ tpm2_public_key_credential_header {
+        le64_t pcr_mask;      /* PCRs used for the public key PCR policy (usually just PCR 11, i.e. the unified kernel) */
+        le32_t size;          /* Size of DER public key */
+        uint8_t data[];       /* DER public key */
+        /* Followed by NUL bytes until next 8 byte boundary */
+};
+
 struct _packed_ metadata_credential_header {
         le64_t timestamp;
         le64_t not_after;
@@ -438,7 +584,9 @@
                 usec_t timestamp,
                 usec_t not_after,
                 const char *tpm2_device,
-                uint32_t tpm2_pcr_mask,
+                uint32_t tpm2_hash_pcr_mask,
+                const char *tpm2_pubkey_path,
+                uint32_t tpm2_pubkey_pcr_mask,
                 const void *input,
                 size_t input_size,
                 void **ret,
@@ -452,17 +600,27 @@
         uint16_t tpm2_pcr_bank = 0, tpm2_primary_alg = 0;
         struct encrypted_credential_header *h;
         int ksz, bsz, ivsz, tsz, added, r;
+        _cleanup_free_ void *pubkey = NULL;
+        size_t pubkey_size = 0;
         uint8_t md[SHA256_DIGEST_LENGTH];
         const EVP_CIPHER *cc;
-#if HAVE_TPM2
-        bool try_tpm2 = false;
-#endif
         sd_id128_t id;
 
         assert(input || input_size == 0);
         assert(ret);
         assert(ret_size);
 
+        if (!sd_id128_in_set(with_key,
+                             _CRED_AUTO,
+                             _CRED_AUTO_INITRD,
+                             CRED_AES256_GCM_BY_HOST,
+                             CRED_AES256_GCM_BY_TPM2_HMAC,
+                             CRED_AES256_GCM_BY_TPM2_HMAC_WITH_PK,
+                             CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC,
+                             CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK,
+                             CRED_AES256_GCM_BY_TPM2_ABSENT))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid key type: " SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(with_key));
+
         if (name && !credential_name_valid(name))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid credential name: %s", name);
 
@@ -480,53 +638,79 @@
                         log_debug("Including not-after timestamp '%s' in encrypted credential.", format_timestamp(buf, sizeof(buf), not_after));
         }
 
-        if (sd_id128_is_null(with_key) ||
-            sd_id128_in_set(with_key, CRED_AES256_GCM_BY_HOST, CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC)) {
+        if (sd_id128_in_set(with_key,
+                            _CRED_AUTO,
+                            CRED_AES256_GCM_BY_HOST,
+                            CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC,
+                            CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK)) {
 
                 r = get_credential_host_secret(
                                 CREDENTIAL_SECRET_GENERATE|
                                 CREDENTIAL_SECRET_WARN_NOT_ENCRYPTED|
-                                (sd_id128_is_null(with_key) ? CREDENTIAL_SECRET_FAIL_ON_TEMPORARY_FS : 0),
+                                (sd_id128_equal(with_key, _CRED_AUTO) ? CREDENTIAL_SECRET_FAIL_ON_TEMPORARY_FS : 0),
                                 &host_key,
                                 &host_key_size);
-                if (r == -ENOMEDIUM && sd_id128_is_null(with_key))
+                if (r == -ENOMEDIUM && sd_id128_equal(with_key, _CRED_AUTO))
                         log_debug_errno(r, "Credential host secret location on temporary file system, not using.");
                 else if (r < 0)
                         return log_error_errno(r, "Failed to determine local credential host secret: %m");
         }
 
 #if HAVE_TPM2
-        if (sd_id128_is_null(with_key)) {
-                /* If automatic mode is selected and we are running in a container, let's not try TPM2. OTOH
-                 * if user picks TPM2 explicitly, let's always honour the request and try. */
+        bool try_tpm2;
+        if (sd_id128_in_set(with_key, _CRED_AUTO, _CRED_AUTO_INITRD)) {
+                /* If automatic mode is selected lets see if a TPM2 it is present. If we are running in a
+                 * container tpm2_support will detect this, and will return a different flag combination of
+                 * TPM2_SUPPORT_FULL, effectively skipping the use of TPM2 when inside one. */
 
-                r = detect_container();
-                if (r < 0)
-                        log_debug_errno(r, "Failed to determine whether we are running in a container, ignoring: %m");
-                else if (r > 0)
-                        log_debug("Running in container, not attempting to use TPM2.");
+                try_tpm2 = tpm2_support() == TPM2_SUPPORT_FULL;
+                if (!try_tpm2)
+                        log_debug("System lacks TPM2 support or running in a container, not attempting to use TPM2.");
+        } else
+                try_tpm2 = sd_id128_in_set(with_key,
+                                           CRED_AES256_GCM_BY_TPM2_HMAC,
+                                           CRED_AES256_GCM_BY_TPM2_HMAC_WITH_PK,
+                                           CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC,
+                                           CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK);
 
-                try_tpm2 = r <= 0;
-        }
+        if (try_tpm2) {
+                if (sd_id128_in_set(with_key,
+                                    _CRED_AUTO,
+                                    _CRED_AUTO_INITRD,
+                                    CRED_AES256_GCM_BY_TPM2_HMAC_WITH_PK,
+                                    CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK)) {
 
-        if (try_tpm2 ||
-            sd_id128_in_set(with_key, CRED_AES256_GCM_BY_TPM2_HMAC, CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC)) {
+                        /* Load public key for PCR policies, if one is specified, or explicitly requested */
+
+                        r = tpm2_load_pcr_public_key(tpm2_pubkey_path, &pubkey, &pubkey_size);
+                        if (r < 0) {
+                                if (tpm2_pubkey_path || r != -ENOENT || !sd_id128_in_set(with_key, _CRED_AUTO, _CRED_AUTO_INITRD))
+                                        return log_error_errno(r, "Failed read TPM PCR public key: %m");
+
+                                log_debug_errno(r, "Failed to read TPM2 PCR public key, proceeding without: %m");
+                        }
+                }
+
+                if (!pubkey)
+                        tpm2_pubkey_pcr_mask = 0;
 
                 r = tpm2_seal(tpm2_device,
-                              tpm2_pcr_mask,
-                              &tpm2_key,
-                              &tpm2_key_size,
-                              &tpm2_blob,
-                              &tpm2_blob_size,
-                              &tpm2_policy_hash,
-                              &tpm2_policy_hash_size,
+                              tpm2_hash_pcr_mask,
+                              pubkey, pubkey_size,
+                              tpm2_pubkey_pcr_mask,
+                              /* pin= */ NULL,
+                              &tpm2_key, &tpm2_key_size,
+                              &tpm2_blob, &tpm2_blob_size,
+                              &tpm2_policy_hash, &tpm2_policy_hash_size,
                               &tpm2_pcr_bank,
                               &tpm2_primary_alg);
                 if (r < 0) {
-                        if (!sd_id128_is_null(with_key))
+                        if (sd_id128_equal(with_key, _CRED_AUTO_INITRD))
+                                log_warning("TPM2 present and used, but we didn't manage to talk to it. Credential will be refused if SecureBoot is enabled.");
+                        else if (!sd_id128_equal(with_key, _CRED_AUTO))
                                 return r;
 
-                        log_debug_errno(r, "TPM2 sealing didn't work, not using: %m");
+                        log_notice_errno(r, "TPM2 sealing didn't work, continuing without TPM2: %m");
                 }
 
                 assert(tpm2_blob_size <= CREDENTIAL_FIELD_SIZE_MAX);
@@ -534,21 +718,26 @@
         }
 #endif
 
-        if (sd_id128_is_null(with_key)) {
+        if (sd_id128_in_set(with_key, _CRED_AUTO, _CRED_AUTO_INITRD)) {
                 /* Let's settle the key type in auto mode now. */
 
                 if (host_key && tpm2_key)
-                        id = CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC;
+                        id = pubkey ? CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK : CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC;
                 else if (tpm2_key)
-                        id = CRED_AES256_GCM_BY_TPM2_HMAC;
+                        id = pubkey ? CRED_AES256_GCM_BY_TPM2_HMAC_WITH_PK : CRED_AES256_GCM_BY_TPM2_HMAC;
                 else if (host_key)
                         id = CRED_AES256_GCM_BY_HOST;
+                else if (sd_id128_equal(with_key, _CRED_AUTO_INITRD))
+                        id = CRED_AES256_GCM_BY_TPM2_ABSENT;
                 else
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                                "TPM2 not available and host key located on temporary file system, no encryption key available.");
         } else
                 id = with_key;
 
+        if (sd_id128_equal(id, CRED_AES256_GCM_BY_TPM2_ABSENT))
+                log_warning("Using a null key for encryption and signing. Confidentiality or authenticity will not be provided.");
+
         /* Let's now take the host key and the TPM2 key and hash it together, to use as encryption key for the data */
         r = sha256_hash_host_and_tpm2_key(host_key, host_key_size, tpm2_key, tpm2_key_size, md);
         if (r < 0)
@@ -571,7 +760,7 @@
                 if (!iv)
                         return log_oom();
 
-                r = genuine_random_bytes(iv, ivsz, RANDOM_BLOCK);
+                r = crypto_random_bytes(iv, ivsz);
                 if (r < 0)
                         return log_error_errno(r, "Failed to acquired randomized IV: %m");
         }
@@ -591,6 +780,7 @@
         output_size =
                 ALIGN8(offsetof(struct encrypted_credential_header, iv) + ivsz) +
                 ALIGN8(tpm2_key ? offsetof(struct tpm2_credential_header, policy_hash_and_blob) + tpm2_blob_size + tpm2_policy_hash_size : 0) +
+                ALIGN8(pubkey ? offsetof(struct tpm2_public_key_credential_header, data) + pubkey_size : 0) +
                 ALIGN8(offsetof(struct metadata_credential_header, name) + strlen_ptr(name)) +
                 input_size + 2U * (size_t) bsz +
                 tsz;
@@ -613,7 +803,7 @@
                 struct tpm2_credential_header *t;
 
                 t = (struct tpm2_credential_header*) ((uint8_t*) output + p);
-                t->pcr_mask = htole64(tpm2_pcr_mask);
+                t->pcr_mask = htole64(tpm2_hash_pcr_mask);
                 t->pcr_bank = htole16(tpm2_pcr_bank);
                 t->primary_alg = htole16(tpm2_primary_alg);
                 t->blob_size = htole32(tpm2_blob_size);
@@ -624,6 +814,17 @@
                 p += ALIGN8(offsetof(struct tpm2_credential_header, policy_hash_and_blob) + tpm2_blob_size + tpm2_policy_hash_size);
         }
 
+        if (pubkey) {
+                struct tpm2_public_key_credential_header *z;
+
+                z = (struct tpm2_public_key_credential_header*) ((uint8_t*) output + p);
+                z->pcr_mask = htole64(tpm2_pubkey_pcr_mask);
+                z->size = htole32(pubkey_size);
+                memcpy(z->data, pubkey, pubkey_size);
+
+                p += ALIGN8(offsetof(struct tpm2_public_key_credential_header, data) + pubkey_size);
+        }
+
         /* Pass the encrypted + TPM2 header as AAD */
         if (EVP_EncryptUpdate(context, NULL, &added, output, p) != 1)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to write AAD data: %s",
@@ -695,18 +896,20 @@
                 const char *validate_name,
                 usec_t validate_timestamp,
                 const char *tpm2_device,
+                const char *tpm2_signature_path,
                 const void *input,
                 size_t input_size,
                 void **ret,
                 size_t *ret_size) {
 
         _cleanup_(erase_and_freep) void *host_key = NULL, *tpm2_key = NULL, *plaintext = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *signature_json = NULL;
         _cleanup_(EVP_CIPHER_CTX_freep) EVP_CIPHER_CTX *context = NULL;
         size_t host_key_size = 0, tpm2_key_size = 0, plaintext_size, p, hs;
         struct encrypted_credential_header *h;
         struct metadata_credential_header *m;
         uint8_t md[SHA256_DIGEST_LENGTH];
-        bool with_tpm2, with_host_key;
+        bool with_tpm2, with_host_key, is_tpm2_absent, with_tpm2_pk;
         const EVP_CIPHER *cc;
         int r, added;
 
@@ -720,12 +923,40 @@
         if (input_size < sizeof(h->id))
                 return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Encrypted file too short.");
 
-        with_host_key = sd_id128_in_set(h->id, CRED_AES256_GCM_BY_HOST, CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC);
-        with_tpm2 = sd_id128_in_set(h->id, CRED_AES256_GCM_BY_TPM2_HMAC, CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC);
+        with_host_key = sd_id128_in_set(h->id, CRED_AES256_GCM_BY_HOST, CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC, CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK);
+        with_tpm2_pk = sd_id128_in_set(h->id, CRED_AES256_GCM_BY_TPM2_HMAC_WITH_PK, CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK);
+        with_tpm2 = sd_id128_in_set(h->id, CRED_AES256_GCM_BY_TPM2_HMAC, CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC) || with_tpm2_pk;
+        is_tpm2_absent = sd_id128_equal(h->id, CRED_AES256_GCM_BY_TPM2_ABSENT);
 
-        if (!with_host_key && !with_tpm2)
+        if (!with_host_key && !with_tpm2 && !is_tpm2_absent)
                 return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Unknown encryption format, or corrupted data: %m");
 
+        if (with_tpm2_pk) {
+                r = tpm2_load_pcr_signature(tpm2_signature_path, &signature_json);
+                if (r < 0)
+                        return r;
+        }
+
+        if (is_tpm2_absent) {
+                /* So this is a credential encrypted with a zero length key. We support this to cover for the
+                 * case where neither a host key not a TPM2 are available (specifically: initrd environments
+                 * where the host key is not yet accessible and no TPM2 chip exists at all), to minimize
+                 * different codeflow for TPM2 and non-TPM2 codepaths. Of course, credentials encoded this
+                 * way offer no confidentiality nor authenticity. Because of that it's important we refuse to
+                 * use them on systems that actually *do* have a TPM2 chip – if we are in SecureBoot
+                 * mode. Otherwise an attacker could hand us credentials like this and we'd use them thinking
+                 * they are trusted, even though they are not. */
+
+                if (efi_has_tpm2()) {
+                        if (is_efi_secure_boot())
+                                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
+                                                       "Credential uses fixed key for fallback use when TPM2 is absent — but TPM2 is present, and SecureBoot is enabled, refusing.");
+
+                        log_warning("Credential uses fixed key for use when TPM2 is absent, but TPM2 is present! Accepting anyway, since SecureBoot is disabled.");
+                } else
+                        log_debug("Credential uses fixed key for use when TPM2 is absent, and TPM2 indeed is absent. Accepting.");
+        }
+
         /* Now we know the minimum header size */
         if (input_size < offsetof(struct encrypted_credential_header, iv))
                 return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Encrypted file too short.");
@@ -744,7 +975,8 @@
          * lower limit only) */
         if (input_size <
             ALIGN8(offsetof(struct encrypted_credential_header, iv) + le32toh(h->iv_size)) +
-            ALIGN8((with_tpm2 ? offsetof(struct tpm2_credential_header, policy_hash_and_blob) : 0)) +
+            ALIGN8(with_tpm2 ? offsetof(struct tpm2_credential_header, policy_hash_and_blob) : 0) +
+            ALIGN8(with_tpm2_pk ? offsetof(struct tpm2_public_key_credential_header, data) : 0) +
             ALIGN8(offsetof(struct metadata_credential_header, name)) +
             le32toh(h->tag_size))
                 return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Encrypted file too short.");
@@ -754,12 +986,13 @@
         if (with_tpm2) {
 #if HAVE_TPM2
                 struct tpm2_credential_header* t = (struct tpm2_credential_header*) ((uint8_t*) input + p);
+                struct tpm2_public_key_credential_header *z = NULL;
 
-                if (le64toh(t->pcr_mask) >= (UINT64_C(1) << TPM2_PCRS_MAX))
+                if (!TPM2_PCR_MASK_VALID(t->pcr_mask))
                         return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "TPM2 PCR mask out of range.");
-                if (!tpm2_pcr_bank_to_string(le16toh(t->pcr_bank)))
+                if (!tpm2_hash_alg_to_string(le16toh(t->pcr_bank)))
                         return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "TPM2 PCR bank invalid or not supported");
-                if (!tpm2_primary_alg_to_string(le16toh(t->primary_alg)))
+                if (!tpm2_asym_alg_to_string(le16toh(t->primary_alg)))
                         return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "TPM2 primary key algorithm invalid or not supported.");
                 if (le32toh(t->blob_size) > CREDENTIAL_FIELD_SIZE_MAX)
                         return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Unexpected TPM2 blob size.");
@@ -771,13 +1004,43 @@
                 if (input_size <
                     ALIGN8(offsetof(struct encrypted_credential_header, iv) + le32toh(h->iv_size)) +
                     ALIGN8(offsetof(struct tpm2_credential_header, policy_hash_and_blob) + le32toh(t->blob_size) + le32toh(t->policy_hash_size)) +
+                    ALIGN8(with_tpm2_pk ? offsetof(struct tpm2_public_key_credential_header, data) : 0) +
                     ALIGN8(offsetof(struct metadata_credential_header, name)) +
                     le32toh(h->tag_size))
                         return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Encrypted file too short.");
 
+                p += ALIGN8(offsetof(struct tpm2_credential_header, policy_hash_and_blob) +
+                            le32toh(t->blob_size) +
+                            le32toh(t->policy_hash_size));
+
+                if (with_tpm2_pk) {
+                        z = (struct tpm2_public_key_credential_header*) ((uint8_t*) input + p);
+
+                        if (!TPM2_PCR_MASK_VALID(le64toh(z->pcr_mask)) || le64toh(z->pcr_mask) == 0)
+                                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "TPM2 PCR mask out of range.");
+                        if (le32toh(z->size) > PUBLIC_KEY_MAX)
+                                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Unexpected public key size.");
+
+                        if (input_size <
+                            ALIGN8(offsetof(struct encrypted_credential_header, iv) + le32toh(h->iv_size)) +
+                            ALIGN8(offsetof(struct tpm2_credential_header, policy_hash_and_blob) + le32toh(t->blob_size) + le32toh(t->policy_hash_size)) +
+                            ALIGN8(offsetof(struct tpm2_public_key_credential_header, data) + le32toh(z->size)) +
+                            ALIGN8(offsetof(struct metadata_credential_header, name)) +
+                            le32toh(h->tag_size))
+                                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Encrypted file too short.");
+
+                        p += ALIGN8(offsetof(struct tpm2_public_key_credential_header, data) +
+                                    le32toh(z->size));
+                }
+
                 r = tpm2_unseal(tpm2_device,
                                 le64toh(t->pcr_mask),
                                 le16toh(t->pcr_bank),
+                                z ? z->data : NULL,
+                                z ? le32toh(z->size) : 0,
+                                z ? le64toh(z->pcr_mask) : 0,
+                                signature_json,
+                                /* pin= */ NULL,
                                 le16toh(t->primary_alg),
                                 t->policy_hash_and_blob,
                                 le32toh(t->blob_size),
@@ -788,9 +1051,6 @@
                 if (r < 0)
                         return r;
 
-                p += ALIGN8(offsetof(struct tpm2_credential_header, policy_hash_and_blob) +
-                            le32toh(t->blob_size) +
-                            le32toh(t->policy_hash_size));
 #else
                 return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Credential requires TPM2 support, but TPM2 support not available.");
 #endif
@@ -805,6 +1065,9 @@
                         return log_error_errno(r, "Failed to determine local credential key: %m");
         }
 
+        if (is_tpm2_absent)
+                log_warning("Warning: using a null key for decryption and authentication. Confidentiality or authenticity are not provided.");
+
         sha256_hash_host_and_tpm2_key(host_key, host_key_size, tpm2_key, tpm2_key_size, md);
 
         assert_se(cc = EVP_aes_256_gcm());
@@ -883,12 +1146,9 @@
         if (le32toh(m->name_size) > 0) {
                 _cleanup_free_ char *embedded_name = NULL;
 
-                if (memchr(m->name, 0, le32toh(m->name_size)))
-                        return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Embedded credential name contains NUL byte, refusing.");
-
-                embedded_name = memdup_suffix0(m->name, le32toh(m->name_size));
-                if (!embedded_name)
-                        return log_oom();
+                r = make_cstring(m->name, le32toh(m->name_size), MAKE_CSTRING_REFUSE_TRAILING_NUL, &embedded_name);
+                if (r < 0)
+                        return log_error_errno(r, "Unable to convert embedded credential name to C string: %m");
 
                 if (!credential_name_valid(embedded_name))
                         return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "Embedded credential name is not valid, refusing.");
@@ -943,11 +1203,11 @@
         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Support for encrypted credentials not available.");
 }
 
-int encrypt_credential_and_warn(sd_id128_t with_key, const char *name, usec_t timestamp, usec_t not_after, const char *tpm2_device, uint32_t tpm2_pcr_mask, const void *input, size_t input_size, void **ret, size_t *ret_size) {
+int encrypt_credential_and_warn(sd_id128_t with_key, const char *name, usec_t timestamp, usec_t not_after, const char *tpm2_device, uint32_t tpm2_hash_pcr_mask, const char *tpm2_pubkey_path, uint32_t tpm2_pubkey_pcr_mask, const void *input, size_t input_size, void **ret, size_t *ret_size) {
         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Support for encrypted credentials not available.");
 }
 
-int decrypt_credential_and_warn(const char *validate_name, usec_t validate_timestamp, const char *tpm2_device, const void *input, size_t input_size, void **ret, size_t *ret_size) {
+int decrypt_credential_and_warn(const char *validate_name, usec_t validate_timestamp, const char *tpm2_device, const char *tpm2_signature_path, const void *input, size_t input_size, void **ret, size_t *ret_size) {
         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Support for encrypted credentials not available.");
 }
 
diff --git a/src/shared/creds-util.h b/src/shared/creds-util.h
new file mode 100644
index 0000000..05d8b74
--- /dev/null
+++ b/src/shared/creds-util.h
@@ -0,0 +1,75 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "sd-id128.h"
+
+#include "fd-util.h"
+#include "time-util.h"
+
+#define CREDENTIAL_NAME_MAX FDNAME_MAX
+
+/* Put a size limit on the individual credential */
+#define CREDENTIAL_SIZE_MAX (1024U*1024U)
+
+/* Refuse to store more than 1M per service, after all this is unswappable memory. Note that for now we put
+ * this to the same limit as the per-credential limit, i.e. if the user has n > 1 credentials instead of 1 it
+ * won't get them more space. */
+#define CREDENTIALS_TOTAL_SIZE_MAX CREDENTIAL_SIZE_MAX
+
+/* Put a size limit on encrypted credentials (which is the same as the unencrypted size plus a spacious 128K of extra
+ * space for headers, IVs, exported TPM2 key material and so on. */
+#define CREDENTIAL_ENCRYPTED_SIZE_MAX (CREDENTIAL_SIZE_MAX + 128U*1024U)
+
+bool credential_name_valid(const char *s);
+
+/* Where creds have been passed to the local execution context */
+int get_credentials_dir(const char **ret);
+int get_encrypted_credentials_dir(const char **ret);
+
+/* Where creds have been passed to the system */
+#define SYSTEM_CREDENTIALS_DIRECTORY "/run/credentials/@system"
+#define ENCRYPTED_SYSTEM_CREDENTIALS_DIRECTORY "/run/credentials/@encrypted"
+
+int read_credential(const char *name, void **ret, size_t *ret_size);
+
+int read_credential_strings_many_internal(const char *first_name, char **first_value, ...);
+
+#define read_credential_strings_many(first_name, first_value, ...) \
+        read_credential_strings_many_internal(first_name, first_value, __VA_ARGS__, NULL)
+
+typedef enum CredentialSecretFlags {
+        CREDENTIAL_SECRET_GENERATE             = 1 << 0,
+        CREDENTIAL_SECRET_WARN_NOT_ENCRYPTED   = 1 << 1,
+        CREDENTIAL_SECRET_FAIL_ON_TEMPORARY_FS = 1 << 2,
+} CredentialSecretFlags;
+
+int get_credential_host_secret(CredentialSecretFlags flags, void **ret, size_t *ret_size);
+
+int get_credential_user_password(const char *username, char **ret_password, bool *ret_is_hashed);
+
+/* The four modes we support: keyed only by on-disk key, only by TPM2 HMAC key, and by the combination of
+ * both, as well as one with a fixed zero length key if TPM2 is missing (the latter of course provides no
+ * authenticity or confidentiality, but is still useful for integrity protection, and makes things simpler
+ * for us to handle). */
+#define CRED_AES256_GCM_BY_HOST               SD_ID128_MAKE(5a,1c,6a,86,df,9d,40,96,b1,d5,a6,5e,08,62,f1,9a)
+#define CRED_AES256_GCM_BY_TPM2_HMAC          SD_ID128_MAKE(0c,7c,c0,7b,11,76,45,91,9c,4b,0b,ea,08,bc,20,fe)
+#define CRED_AES256_GCM_BY_TPM2_HMAC_WITH_PK  SD_ID128_MAKE(fa,f7,eb,93,41,e3,41,2c,a1,a4,36,f9,5a,29,36,2f)
+#define CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC SD_ID128_MAKE(93,a8,94,09,48,74,44,90,90,ca,f2,fc,93,ca,b5,53)
+#define CRED_AES256_GCM_BY_HOST_AND_TPM2_HMAC_WITH_PK           \
+                                              SD_ID128_MAKE(af,49,50,a8,49,13,4e,b1,a7,38,46,30,4f,f3,0c,05)
+#define CRED_AES256_GCM_BY_TPM2_ABSENT        SD_ID128_MAKE(05,84,69,da,f6,f5,43,24,80,05,49,da,0f,8e,a2,fb)
+
+/* Two special IDs to pick a general automatic mode (i.e. tpm2+host if TPM2 exists, only host otherwise) or
+ * an initrd-specific automatic mode (i.e. tpm2 if firmware can do it, otherwise fixed zero-length key, and
+ * never involve host keys). These IDs will never be stored on disk, but are useful only internally while
+ * figuring out what precisely to write to disk. To mark that these aren't a "real" type, we'll prefix them
+ * with an underscore. */
+#define _CRED_AUTO                            SD_ID128_MAKE(a2,19,cb,07,85,b2,4c,04,b1,6d,18,ca,b9,d2,ee,01)
+#define _CRED_AUTO_INITRD                     SD_ID128_MAKE(02,dc,8e,de,3a,02,43,ab,a9,ec,54,9c,05,e6,a0,71)
+
+int encrypt_credential_and_warn(sd_id128_t with_key, const char *name, usec_t timestamp, usec_t not_after, const char *tpm2_device, uint32_t tpm2_hash_pcr_mask, const char *tpm2_pubkey_path, uint32_t tpm2_pubkey_pcr_mask, const void *input, size_t input_size, void **ret, size_t *ret_size);
+int decrypt_credential_and_warn(const char *validate_name, usec_t validate_timestamp, const char *tpm2_device, const char *tpm2_signature_path, const void *input, size_t input_size, void **ret, size_t *ret_size);
diff --git a/src/shared/cryptsetup-fido2.c b/src/shared/cryptsetup-fido2.c
new file mode 100644
index 0000000..285b82a
--- /dev/null
+++ b/src/shared/cryptsetup-fido2.c
@@ -0,0 +1,276 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "ask-password-api.h"
+#include "cryptsetup-fido2.h"
+#include "env-util.h"
+#include "fileio.h"
+#include "hexdecoct.h"
+#include "json.h"
+#include "libfido2-util.h"
+#include "parse-util.h"
+#include "random-util.h"
+#include "strv.h"
+
+int acquire_fido2_key(
+                const char *volume_name,
+                const char *friendly_name,
+                const char *device,
+                const char *rp_id,
+                const void *cid,
+                size_t cid_size,
+                const char *key_file,
+                size_t key_file_size,
+                uint64_t key_file_offset,
+                const void *key_data,
+                size_t key_data_size,
+                usec_t until,
+                bool headless,
+                Fido2EnrollFlags required,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size,
+                AskPasswordFlags ask_password_flags) {
+
+        _cleanup_(erase_and_freep) char *envpw = NULL;
+        _cleanup_strv_free_erase_ char **pins = NULL;
+        _cleanup_free_ void *loaded_salt = NULL;
+        bool device_exists = false;
+        const char *salt;
+        size_t salt_size;
+        int r;
+
+        if ((required & (FIDO2ENROLL_PIN | FIDO2ENROLL_UP | FIDO2ENROLL_UV)) && headless)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOPKG),
+                                        "Local verification is required to unlock this volume, but the 'headless' parameter was set.");
+
+        ask_password_flags |= ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_ACCEPT_CACHED;
+
+        assert(cid);
+        assert(key_file || key_data);
+
+        if (key_data) {
+                salt = key_data;
+                salt_size = key_data_size;
+        } else {
+                _cleanup_free_ char *bindname = NULL;
+
+                /* If we read the salt via AF_UNIX, make this client recognizable */
+                if (asprintf(&bindname, "@%" PRIx64"/cryptsetup-fido2/%s", random_u64(), volume_name) < 0)
+                        return log_oom();
+
+                r = read_full_file_full(
+                                AT_FDCWD, key_file,
+                                key_file_offset == 0 ? UINT64_MAX : key_file_offset,
+                                key_file_size == 0 ? SIZE_MAX : key_file_size,
+                                READ_FULL_FILE_CONNECT_SOCKET,
+                                bindname,
+                                (char**) &loaded_salt, &salt_size);
+                if (r < 0)
+                        return r;
+
+                salt = loaded_salt;
+        }
+
+        r = getenv_steal_erase("PIN", &envpw);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire password from environment: %m");
+        if (r > 0) {
+                pins = strv_new(envpw);
+                if (!pins)
+                        return log_oom();
+        }
+
+        for (;;) {
+                if (!device_exists) {
+                        /* Before we inquire for the PIN we'll need, if we never talked to the device, check
+                         * if the device actually is plugged in. Otherwise we'll ask for the PIN already when
+                         * the device is not plugged in, which is confusing. */
+
+                        r = fido2_have_device(device);
+                        if (r < 0)
+                                return r;
+                        if (r == 0) /* no device found, return EAGAIN so that caller will wait/watch udev */
+                                return -EAGAIN;
+
+                        device_exists = true;  /* now we know for sure, a device exists, no need to ask again */
+                }
+
+                /* Always make an attempt before asking for PIN.
+                 * fido2_use_hmac_hash() will perform a pre-flight check for whether the credential for
+                 * can be found on one of the connected devices. This way, we can avoid prompting the user
+                 * for a PIN when we are sure that no device can be used. */
+                r = fido2_use_hmac_hash(
+                                device,
+                                rp_id ?: "io.systemd.cryptsetup",
+                                salt, salt_size,
+                                cid, cid_size,
+                                pins,
+                                required,
+                                ret_decrypted_key,
+                                ret_decrypted_key_size);
+                if (!IN_SET(r,
+                            -ENOANO,   /* needs pin */
+                            -ENOLCK))  /* pin incorrect */
+                        return r;
+
+                device_exists = true; /* that a PIN is needed/wasn't correct means that we managed to
+                                       * talk to a device */
+
+                if (headless)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOPKG), "PIN querying disabled via 'headless' option. Use the '$PIN' environment variable.");
+
+                pins = strv_free_erase(pins);
+                r = ask_password_auto("Please enter security token PIN:", "drive-harddisk", NULL, "fido2-pin", "cryptsetup.fido2-pin", until, ask_password_flags, &pins);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to ask for user password: %m");
+
+                ask_password_flags &= ~ASK_PASSWORD_ACCEPT_CACHED;
+        }
+}
+
+int acquire_fido2_key_auto(
+                struct crypt_device *cd,
+                const char *name,
+                const char *friendly_name,
+                const char *fido2_device,
+                usec_t until,
+                bool headless,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size,
+                AskPasswordFlags ask_password_flags) {
+
+        _cleanup_free_ void *cid = NULL;
+        size_t cid_size = 0;
+        int r, ret = -ENOENT;
+        Fido2EnrollFlags required = 0;
+
+        assert(cd);
+        assert(name);
+        assert(ret_decrypted_key);
+        assert(ret_decrypted_key_size);
+
+        /* Loads FIDO2 metadata from LUKS2 JSON token headers. */
+
+        for (int token = 0; token < sym_crypt_token_max(CRYPT_LUKS2); token ++) {
+                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+                JsonVariant *w;
+                _cleanup_free_ void *salt = NULL;
+                _cleanup_free_ char *rp = NULL;
+                size_t salt_size = 0;
+                int ks;
+
+                r = cryptsetup_get_token_as_json(cd, token, "systemd-fido2", &v);
+                if (IN_SET(r, -ENOENT, -EINVAL, -EMEDIUMTYPE))
+                        continue;
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read JSON token data off disk: %m");
+
+                ks = cryptsetup_get_keyslot_from_token(v);
+                if (ks < 0) {
+                        /* Handle parsing errors of the keyslots field gracefully, since it's not 'owned' by
+                         * us, but by the LUKS2 spec */
+                        log_warning_errno(ks, "Failed to extract keyslot index from FIDO2 JSON data token %i, skipping: %m", token);
+                        continue;
+                }
+
+                w = json_variant_by_key(v, "fido2-credential");
+                if (!w || !json_variant_is_string(w))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "FIDO2 token data lacks 'fido2-credential' field.");
+
+                r = unbase64mem(json_variant_string(w), SIZE_MAX, &cid, &cid_size);
+                if (r < 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Invalid base64 data in 'fido2-credential' field.");
+
+                w = json_variant_by_key(v, "fido2-salt");
+                if (!w || !json_variant_is_string(w))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "FIDO2 token data lacks 'fido2-salt' field.");
+
+                assert(!salt);
+                assert(salt_size == 0);
+                r = unbase64mem(json_variant_string(w), SIZE_MAX, &salt, &salt_size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to decode base64 encoded salt.");
+
+                w = json_variant_by_key(v, "fido2-rp");
+                if (w) {
+                        /* The "rp" field is optional. */
+
+                        if (!json_variant_is_string(w))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "FIDO2 token data's 'fido2-rp' field is not a string.");
+
+                        assert(!rp);
+                        rp = strdup(json_variant_string(w));
+                        if (!rp)
+                                return log_oom();
+                }
+
+                w = json_variant_by_key(v, "fido2-clientPin-required");
+                if (w) {
+                        /* The "fido2-clientPin-required" field is optional. */
+
+                        if (!json_variant_is_boolean(w))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "FIDO2 token data's 'fido2-clientPin-required' field is not a boolean.");
+
+                        SET_FLAG(required, FIDO2ENROLL_PIN, json_variant_boolean(w));
+                } else
+                        required |= FIDO2ENROLL_PIN_IF_NEEDED; /* compat with 248, where the field was unset */
+
+                w = json_variant_by_key(v, "fido2-up-required");
+                if (w) {
+                        /* The "fido2-up-required" field is optional. */
+
+                        if (!json_variant_is_boolean(w))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "FIDO2 token data's 'fido2-up-required' field is not a boolean.");
+
+                        SET_FLAG(required, FIDO2ENROLL_UP, json_variant_boolean(w));
+                } else
+                        required |= FIDO2ENROLL_UP_IF_NEEDED; /* compat with 248 */
+
+                w = json_variant_by_key(v, "fido2-uv-required");
+                if (w) {
+                        /* The "fido2-uv-required" field is optional. */
+
+                        if (!json_variant_is_boolean(w))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "FIDO2 token data's 'fido2-uv-required' field is not a boolean.");
+
+                        SET_FLAG(required, FIDO2ENROLL_UV, json_variant_boolean(w));
+                } else
+                        required |= FIDO2ENROLL_UV_OMIT; /* compat with 248 */
+
+                ret = acquire_fido2_key(
+                                name,
+                                friendly_name,
+                                fido2_device,
+                                rp,
+                                cid, cid_size,
+                                /* key_file= */ NULL, /* salt is read from LUKS header instead of key_file */
+                                /* key_file_size= */ 0,
+                                /* key_file_offset= */ 0,
+                                salt, salt_size,
+                                until,
+                                headless,
+                                required,
+                                ret_decrypted_key, ret_decrypted_key_size,
+                                ask_password_flags);
+                if (ret == 0)
+                        break;
+        }
+
+        if (!cid)
+                return log_error_errno(SYNTHETIC_ERRNO(ENXIO),
+                                       "No valid FIDO2 token data found.");
+
+        if (ret == -EAGAIN) /* fido2 device does not exist, or UV is blocked; caller will prompt for retry */
+                return log_debug_errno(ret, "FIDO2 token does not exist, or UV is blocked.");
+        if (ret < 0)
+                return log_error_errno(ret, "Failed to unlock LUKS volume with FIDO2 token: %m");
+
+        log_info("Unlocked volume via automatically discovered security FIDO2 token.");
+        return ret;
+}
diff --git a/src/shared/cryptsetup-fido2.h b/src/shared/cryptsetup-fido2.h
new file mode 100644
index 0000000..d96bb40
--- /dev/null
+++ b/src/shared/cryptsetup-fido2.h
@@ -0,0 +1,82 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <sys/types.h>
+
+#include "cryptsetup-util.h"
+#include "libfido2-util.h"
+#include "log.h"
+#include "time-util.h"
+
+#if HAVE_LIBFIDO2
+
+int acquire_fido2_key(
+                const char *volume_name,
+                const char *friendly_name,
+                const char *device,
+                const char *rp_id,
+                const void *cid,
+                size_t cid_size,
+                const char *key_file,
+                size_t key_file_size,
+                uint64_t key_file_offset,
+                const void *key_data,
+                size_t key_data_size,
+                usec_t until,
+                bool headless,
+                Fido2EnrollFlags required,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size,
+                AskPasswordFlags ask_password_flags);
+
+int acquire_fido2_key_auto(
+                struct crypt_device *cd,
+                const char *name,
+                const char *friendly_name,
+                const char *fido2_device,
+                usec_t until,
+                bool headless,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size,
+                AskPasswordFlags ask_password_flags);
+
+#else
+
+static inline int acquire_fido2_key(
+                const char *volume_name,
+                const char *friendly_name,
+                const char *device,
+                const char *rp_id,
+                const void *cid,
+                size_t cid_size,
+                const char *key_file,
+                size_t key_file_size,
+                uint64_t key_file_offset,
+                const void *key_data,
+                size_t key_data_size,
+                usec_t until,
+                bool headless,
+                Fido2EnrollFlags required,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size,
+                AskPasswordFlags ask_password_flags) {
+
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                               "FIDO2 token support not available.");
+}
+
+static inline int acquire_fido2_key_auto(
+                struct crypt_device *cd,
+                const char *name,
+                const char *friendly_name,
+                const char *fido2_device,
+                usec_t until,
+                bool headless,
+                void **ret_decrypted_key,
+                size_t *ret_decrypted_key_size,
+                AskPasswordFlags ask_password_flags) {
+
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                               "FIDO2 token support not available.");
+}
+#endif
diff --git a/src/shared/cryptsetup-util.c b/src/shared/cryptsetup-util.c
index b93f702..c6614d3 100644
--- a/src/shared/cryptsetup-util.c
+++ b/src/shared/cryptsetup-util.c
@@ -1,12 +1,12 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#if HAVE_LIBCRYPTSETUP
 #include "alloc-util.h"
 #include "cryptsetup-util.h"
 #include "dlfcn-util.h"
 #include "log.h"
 #include "parse-util.h"
 
+#if HAVE_LIBCRYPTSETUP
 static void *cryptsetup_dl = NULL;
 
 int (*sym_crypt_activate_by_passphrase)(struct crypt_device *cd, const char *name, int keyslot, const char *passphrase, size_t passphrase_size, uint32_t flags);
@@ -49,63 +49,18 @@
 #endif
 crypt_token_info (*sym_crypt_token_status)(struct crypt_device *cd, int token, const char **type);
 int (*sym_crypt_volume_key_get)(struct crypt_device *cd, int keyslot, char *volume_key, size_t *volume_key_size, const char *passphrase, size_t passphrase_size);
-
-int dlopen_cryptsetup(void) {
-        int r;
-
-        r = dlopen_many_sym_or_warn(
-                        &cryptsetup_dl, "libcryptsetup.so.12", LOG_DEBUG,
-                        DLSYM_ARG(crypt_activate_by_passphrase),
-#if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY
-                        DLSYM_ARG(crypt_activate_by_signed_key),
+#if HAVE_CRYPT_REENCRYPT_INIT_BY_PASSPHRASE
+int (*sym_crypt_reencrypt_init_by_passphrase)(struct crypt_device *cd, const char *name, const char *passphrase, size_t passphrase_size, int keyslot_old, int keyslot_new, const char *cipher, const char *cipher_mode, const struct crypt_params_reencrypt *params);
 #endif
-                        DLSYM_ARG(crypt_activate_by_volume_key),
-                        DLSYM_ARG(crypt_deactivate_by_name),
-                        DLSYM_ARG(crypt_format),
-                        DLSYM_ARG(crypt_free),
-                        DLSYM_ARG(crypt_get_cipher),
-                        DLSYM_ARG(crypt_get_cipher_mode),
-                        DLSYM_ARG(crypt_get_data_offset),
-                        DLSYM_ARG(crypt_get_device_name),
-                        DLSYM_ARG(crypt_get_dir),
-                        DLSYM_ARG(crypt_get_type),
-                        DLSYM_ARG(crypt_get_uuid),
-                        DLSYM_ARG(crypt_get_verity_info),
-                        DLSYM_ARG(crypt_get_volume_key_size),
-                        DLSYM_ARG(crypt_init),
-                        DLSYM_ARG(crypt_init_by_name),
-                        DLSYM_ARG(crypt_keyslot_add_by_volume_key),
-                        DLSYM_ARG(crypt_keyslot_destroy),
-                        DLSYM_ARG(crypt_keyslot_max),
-                        DLSYM_ARG(crypt_load),
-                        DLSYM_ARG(crypt_resize),
-                        DLSYM_ARG(crypt_resume_by_passphrase),
-                        DLSYM_ARG(crypt_set_data_device),
-                        DLSYM_ARG(crypt_set_debug_level),
-                        DLSYM_ARG(crypt_set_log_callback),
-#if HAVE_CRYPT_SET_METADATA_SIZE
-                        DLSYM_ARG(crypt_set_metadata_size),
+#if HAVE_CRYPT_REENCRYPT
+int (*sym_crypt_reencrypt)(struct crypt_device *cd, int (*progress)(uint64_t size, uint64_t offset, void *usrptr));
 #endif
-                        DLSYM_ARG(crypt_set_pbkdf_type),
-                        DLSYM_ARG(crypt_suspend),
-                        DLSYM_ARG(crypt_token_json_get),
-                        DLSYM_ARG(crypt_token_json_set),
-#if HAVE_CRYPT_TOKEN_MAX
-                        DLSYM_ARG(crypt_token_max),
+int (*sym_crypt_metadata_locking)(struct crypt_device *cd, int enable);
+#if HAVE_CRYPT_SET_DATA_OFFSET
+int (*sym_crypt_set_data_offset)(struct crypt_device *cd, uint64_t data_offset);
 #endif
-                        DLSYM_ARG(crypt_token_status),
-                        DLSYM_ARG(crypt_volume_key_get));
-        if (r <= 0)
-                return r;
-
-        /* Redirect the default logging calls of libcryptsetup to our own logging infra. (Note that
-         * libcryptsetup also maintains per-"struct crypt_device" log functions, which we'll also set
-         * whenever allocating a "struct crypt_device" context. Why set both? To be defensive: maybe some
-         * other code loaded into this process also changes the global log functions of libcryptsetup, who
-         * knows? And if so, we still want our own objects to log via our own infra, at the very least.) */
-        cryptsetup_enable_logging(NULL);
-        return 1;
-}
+int (*sym_crypt_header_restore)(struct crypt_device *cd, const char *requested_type, const char *backup_file);
+int (*sym_crypt_volume_key_keyring)(struct crypt_device *cd, int enable);
 
 static void cryptsetup_log_glue(int level, const char *msg, void *usrptr) {
 
@@ -224,6 +179,111 @@
         return 0;
 }
 
+int cryptsetup_add_token_json(struct crypt_device *cd, JsonVariant *v) {
+        _cleanup_free_ char *text = NULL;
+        int r;
+
+        r = dlopen_cryptsetup();
+        if (r < 0)
+                return r;
+
+        r = json_variant_format(v, 0, &text);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to format token data for LUKS: %m");
+
+        log_debug("Adding token text <%s>", text);
+
+        r = sym_crypt_token_json_set(cd, CRYPT_ANY_TOKEN, text);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to write token data to LUKS: %m");
+
+        return 0;
+}
+#endif
+
+int dlopen_cryptsetup(void) {
+#if HAVE_LIBCRYPTSETUP
+        int r;
+
+        /* libcryptsetup added crypt_reencrypt() in 2.2.0, and marked it obsolete in 2.4.0, replacing it with
+         * crypt_reencrypt_run(), which takes one extra argument but is otherwise identical. The old call is
+         * still available though, and given we want to support 2.2.0 for a while longer, we'll stick to the
+         * old symbol. However, the old symbols now has a GCC deprecation decorator, hence let's turn off
+         * warnings about this for now. */
+
+        DISABLE_WARNING_DEPRECATED_DECLARATIONS;
+
+        r = dlopen_many_sym_or_warn(
+                        &cryptsetup_dl, "libcryptsetup.so.12", LOG_DEBUG,
+                        DLSYM_ARG(crypt_activate_by_passphrase),
+#if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY
+                        DLSYM_ARG(crypt_activate_by_signed_key),
+#endif
+                        DLSYM_ARG(crypt_activate_by_volume_key),
+                        DLSYM_ARG(crypt_deactivate_by_name),
+                        DLSYM_ARG(crypt_format),
+                        DLSYM_ARG(crypt_free),
+                        DLSYM_ARG(crypt_get_cipher),
+                        DLSYM_ARG(crypt_get_cipher_mode),
+                        DLSYM_ARG(crypt_get_data_offset),
+                        DLSYM_ARG(crypt_get_device_name),
+                        DLSYM_ARG(crypt_get_dir),
+                        DLSYM_ARG(crypt_get_type),
+                        DLSYM_ARG(crypt_get_uuid),
+                        DLSYM_ARG(crypt_get_verity_info),
+                        DLSYM_ARG(crypt_get_volume_key_size),
+                        DLSYM_ARG(crypt_init),
+                        DLSYM_ARG(crypt_init_by_name),
+                        DLSYM_ARG(crypt_keyslot_add_by_volume_key),
+                        DLSYM_ARG(crypt_keyslot_destroy),
+                        DLSYM_ARG(crypt_keyslot_max),
+                        DLSYM_ARG(crypt_load),
+                        DLSYM_ARG(crypt_resize),
+                        DLSYM_ARG(crypt_resume_by_passphrase),
+                        DLSYM_ARG(crypt_set_data_device),
+                        DLSYM_ARG(crypt_set_debug_level),
+                        DLSYM_ARG(crypt_set_log_callback),
+#if HAVE_CRYPT_SET_METADATA_SIZE
+                        DLSYM_ARG(crypt_set_metadata_size),
+#endif
+                        DLSYM_ARG(crypt_set_pbkdf_type),
+                        DLSYM_ARG(crypt_suspend),
+                        DLSYM_ARG(crypt_token_json_get),
+                        DLSYM_ARG(crypt_token_json_set),
+#if HAVE_CRYPT_TOKEN_MAX
+                        DLSYM_ARG(crypt_token_max),
+#endif
+                        DLSYM_ARG(crypt_token_status),
+                        DLSYM_ARG(crypt_volume_key_get),
+#if HAVE_CRYPT_REENCRYPT_INIT_BY_PASSPHRASE
+                        DLSYM_ARG(crypt_reencrypt_init_by_passphrase),
+#endif
+#if HAVE_CRYPT_REENCRYPT
+                        DLSYM_ARG(crypt_reencrypt),
+#endif
+                        DLSYM_ARG(crypt_metadata_locking),
+#if HAVE_CRYPT_SET_DATA_OFFSET
+                        DLSYM_ARG(crypt_set_data_offset),
+#endif
+                        DLSYM_ARG(crypt_header_restore),
+                        DLSYM_ARG(crypt_volume_key_keyring));
+        if (r <= 0)
+                return r;
+
+        REENABLE_WARNING;
+
+        /* Redirect the default logging calls of libcryptsetup to our own logging infra. (Note that
+         * libcryptsetup also maintains per-"struct crypt_device" log functions, which we'll also set
+         * whenever allocating a "struct crypt_device" context. Why set both? To be defensive: maybe some
+         * other code loaded into this process also changes the global log functions of libcryptsetup, who
+         * knows? And if so, we still want our own objects to log via our own infra, at the very least.) */
+        cryptsetup_enable_logging(NULL);
+        return 1;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "cryptsetup support is not compiled in.");
+#endif
+}
+
 int cryptsetup_get_keyslot_from_token(JsonVariant *v) {
         int keyslot, r;
         JsonVariant *w;
@@ -252,25 +312,3 @@
 
         return keyslot;
 }
-
-int cryptsetup_add_token_json(struct crypt_device *cd, JsonVariant *v) {
-        _cleanup_free_ char *text = NULL;
-        int r;
-
-        r = dlopen_cryptsetup();
-        if (r < 0)
-                return r;
-
-        r = json_variant_format(v, 0, &text);
-        if (r < 0)
-                return log_debug_errno(r, "Failed to format token data for LUKS: %m");
-
-        log_debug("Adding token text <%s>", text);
-
-        r = sym_crypt_token_json_set(cd, CRYPT_ANY_TOKEN, text);
-        if (r < 0)
-                return log_debug_errno(r, "Failed to write token data to LUKS: %m");
-
-        return 0;
-}
-#endif
diff --git a/src/shared/cryptsetup-util.h b/src/shared/cryptsetup-util.h
index 1bf9830..5ff439d 100644
--- a/src/shared/cryptsetup-util.h
+++ b/src/shared/cryptsetup-util.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include "alloc-util.h"
 #include "json.h"
 #include "macro.h"
 
@@ -54,26 +55,40 @@
 extern int (*sym_crypt_token_max)(const char *type);
 #else
 /* As a fallback, use the same hard-coded value libcryptsetup uses internally. */
-static inline int sym_crypt_token_max(_unused_ const char *type) {
+static inline int crypt_token_max(_unused_ const char *type) {
     assert(streq(type, CRYPT_LUKS2));
 
     return 32;
 }
+#define sym_crypt_token_max(type) crypt_token_max(type)
 #endif
 extern crypt_token_info (*sym_crypt_token_status)(struct crypt_device *cd, int token, const char **type);
 extern int (*sym_crypt_volume_key_get)(struct crypt_device *cd, int keyslot, char *volume_key, size_t *volume_key_size, const char *passphrase, size_t passphrase_size);
-
-int dlopen_cryptsetup(void);
+#if HAVE_CRYPT_REENCRYPT_INIT_BY_PASSPHRASE
+extern int (*sym_crypt_reencrypt_init_by_passphrase)(struct crypt_device *cd, const char *name, const char *passphrase, size_t passphrase_size, int keyslot_old, int keyslot_new, const char *cipher, const char *cipher_mode, const struct crypt_params_reencrypt *params);
+#endif
+#if HAVE_CRYPT_REENCRYPT
+extern int (*sym_crypt_reencrypt)(struct crypt_device *cd, int (*progress)(uint64_t size, uint64_t offset, void *usrptr));
+#endif
+extern int (*sym_crypt_metadata_locking)(struct crypt_device *cd, int enable);
+#if HAVE_CRYPT_SET_DATA_OFFSET
+extern int (*sym_crypt_set_data_offset)(struct crypt_device *cd, uint64_t data_offset);
+#endif
+extern int (*sym_crypt_header_restore)(struct crypt_device *cd, const char *requested_type, const char *backup_file);
+extern int (*sym_crypt_volume_key_keyring)(struct crypt_device *cd, int enable);
 
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct crypt_device *, crypt_free, NULL);
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct crypt_device *, sym_crypt_free, NULL);
 
+/* Be careful, this works with dlopen_cryptsetup(), that is, it calls sym_crypt_free() instead of crypt_free(). */
+#define crypt_free_and_replace(a, b)                    \
+        free_and_replace_full(a, b, sym_crypt_free)
+
 void cryptsetup_enable_logging(struct crypt_device *cd);
 
 int cryptsetup_set_minimal_pbkdf(struct crypt_device *cd);
 
 int cryptsetup_get_token_as_json(struct crypt_device *cd, int idx, const char *verify_type, JsonVariant **ret);
-int cryptsetup_get_keyslot_from_token(JsonVariant *v);
 int cryptsetup_add_token_json(struct crypt_device *cd, JsonVariant *v);
 
 #else
@@ -85,3 +100,12 @@
 static inline void sym_crypt_freep(struct crypt_device** cd) {}
 
 #endif
+
+int dlopen_cryptsetup(void);
+
+int cryptsetup_get_keyslot_from_token(JsonVariant *v);
+
+static inline const char *mangle_none(const char *s) {
+        /* A helper that turns cryptsetup/integritysetup/veritysetup "options" strings into NULL if they are effectively empty */
+        return isempty(s) || STR_IN_SET(s, "-", "none") ? NULL : s;
+}
diff --git a/src/shared/daemon-util.c b/src/shared/daemon-util.c
new file mode 100644
index 0000000..32180a1
--- /dev/null
+++ b/src/shared/daemon-util.c
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "daemon-util.h"
+#include "fd-util.h"
+#include "log.h"
+#include "string-util.h"
+
+static int notify_remove_fd_warn(const char *name) {
+        int r;
+
+        assert(name);
+
+        r = sd_notifyf(/* unset_environment = */ false,
+                       "FDSTOREREMOVE=1\n"
+                       "FDNAME=%s", name);
+        if (r < 0)
+                return log_warning_errno(r,
+                                         "Failed to remove file descriptor \"%s\" from the store, ignoring: %m",
+                                         name);
+
+        return 0;
+}
+
+int notify_remove_fd_warnf(const char *format, ...) {
+        _cleanup_free_ char *p = NULL;
+        va_list ap;
+        int r;
+
+        assert(format);
+
+        va_start(ap, format);
+        r = vasprintf(&p, format, ap);
+        va_end(ap);
+        if (r < 0)
+                return log_oom();
+
+        return notify_remove_fd_warn(p);
+}
+
+int close_and_notify_warn(int fd, const char *name) {
+        if (name)
+                (void) notify_remove_fd_warn(name);
+
+        return safe_close(fd);
+}
+
+static int notify_push_fd(int fd, const char *name) {
+        _cleanup_free_ char *state = NULL;
+
+        assert(fd >= 0);
+        assert(name);
+
+        state = strjoin("FDSTORE=1\n"
+                        "FDNAME=", name);
+        if (!state)
+                return -ENOMEM;
+
+        return sd_pid_notify_with_fds(0, /* unset_environment = */ false, state, &fd, 1);
+}
+
+int notify_push_fdf(int fd, const char *format, ...) {
+        _cleanup_free_ char *name = NULL;
+        va_list ap;
+        int r;
+
+        assert(fd >= 0);
+        assert(format);
+
+        va_start(ap, format);
+        r = vasprintf(&name, format, ap);
+        va_end(ap);
+        if (r < 0)
+                return -ENOMEM;
+
+        return notify_push_fd(fd, name);
+}
diff --git a/src/shared/daemon-util.h b/src/shared/daemon-util.h
index 585e489..711885b 100644
--- a/src/shared/daemon-util.h
+++ b/src/shared/daemon-util.h
@@ -5,6 +5,8 @@
 
 #include "sd-daemon.h"
 
+#include "macro.h"
+
 #define NOTIFY_READY "READY=1\n" "STATUS=Processing requests..."
 #define NOTIFY_STOPPING "STOPPING=1\n" "STATUS=Shutting down..."
 
@@ -20,3 +22,7 @@
         if (*p)
                 (void) sd_notify(false, *p);
 }
+
+int notify_remove_fd_warnf(const char *format, ...) _printf_(1, 2);
+int close_and_notify_warn(int fd, const char *name);
+int notify_push_fdf(int fd, const char *format, ...) _printf_(2, 3);
diff --git a/src/shared/data-fd-util.c b/src/shared/data-fd-util.c
index a827ef5..895d8e8 100644
--- a/src/shared/data-fd-util.c
+++ b/src/shared/data-fd-util.c
@@ -4,6 +4,9 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
+#if HAVE_LINUX_MEMFD_H
+#include <linux/memfd.h>
+#endif
 
 #include "alloc-util.h"
 #include "copy.h"
@@ -12,6 +15,8 @@
 #include "fs-util.h"
 #include "io-util.h"
 #include "memfd-util.h"
+#include "missing_mman.h"
+#include "missing_syscall.h"
 #include "tmpfile-util.h"
 
 /* When the data is smaller or equal to 64K, try to place the copy in a memfd/pipe */
@@ -21,9 +26,9 @@
 #define DATA_FD_TMP_LIMIT (1024U*1024U)
 
 int acquire_data_fd(const void *data, size_t size, unsigned flags) {
-        _cleanup_close_pair_ int pipefds[2] = { -1, -1 };
+        _cleanup_close_pair_ int pipefds[2] = PIPE_EBADF;
         char pattern[] = "/dev/shm/data-fd-XXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int isz = 0, r;
         ssize_t n;
         off_t f;
@@ -49,14 +54,9 @@
          * It sucks a bit that depending on the situation we return very different objects here, but that's Linux I
          * figure. */
 
-        if (size == 0 && ((flags & ACQUIRE_NO_DEV_NULL) == 0)) {
+        if (size == 0 && ((flags & ACQUIRE_NO_DEV_NULL) == 0))
                 /* As a special case, return /dev/null if we have been called for an empty data block */
-                r = open("/dev/null", O_RDONLY|O_CLOEXEC|O_NOCTTY);
-                if (r < 0)
-                        return -errno;
-
-                return r;
-        }
+                return RET_NERRNO(open("/dev/null", O_RDONLY|O_CLOEXEC|O_NOCTTY));
 
         if ((flags & ACQUIRE_NO_MEMFD) == 0) {
                 fd = memfd_new("data-fd");
@@ -163,7 +163,7 @@
 }
 
 int copy_data_fd(int fd) {
-        _cleanup_close_ int copy_fd = -1, tmp_fd = -1;
+        _cleanup_close_ int copy_fd = -EBADF, tmp_fd = -EBADF;
         _cleanup_free_ void *remains = NULL;
         size_t remains_size = 0;
         const char *td;
@@ -218,7 +218,7 @@
                         /* Hmm, pity, this didn't fit. Let's fall back to /tmp then, see below */
 
                 } else {
-                        _cleanup_(close_pairp) int pipefds[2] = { -1, -1 };
+                        _cleanup_(close_pairp) int pipefds[2] = PIPE_EBADF;
                         int isz;
 
                         /* If memfds aren't available, use a pipe. Set O_NONBLOCK so that we will get EAGAIN rather
@@ -303,7 +303,7 @@
                 if (f != 0)
                         return -errno;
 
-                CLOSE_AND_REPLACE(copy_fd, tmp_fd);
+                close_and_replace(copy_fd, tmp_fd);
 
                 remains = mfree(remains);
                 remains_size = 0;
@@ -348,3 +348,50 @@
 
         return fd_reopen(tmp_fd, O_RDONLY|O_CLOEXEC);
 }
+
+int memfd_clone_fd(int fd, const char *name, int mode) {
+        _cleanup_close_ int mfd = -EBADF;
+        bool ro;
+        int r;
+
+        /* Creates a clone of a regular file in a memfd. Unlike copy_data_fd() this returns strictly a memfd
+         * (and if it can't it will fail). Thus the resulting fd is seekable, and definitely reports as
+         * S_ISREG. */
+
+        assert(fd >= 0);
+        assert(name);
+        assert(IN_SET(mode & O_ACCMODE, O_RDONLY, O_RDWR));
+        assert((mode & ~(O_RDONLY|O_RDWR|O_CLOEXEC)) == 0);
+
+        ro = (mode & O_ACCMODE) == O_RDONLY;
+
+        mfd = memfd_create(name,
+                           ((FLAGS_SET(mode, O_CLOEXEC) || ro) ? MFD_CLOEXEC : 0) |
+                           (ro ? MFD_ALLOW_SEALING : 0));
+        if (mfd < 0)
+                return -errno;
+
+        r = copy_bytes(fd, mfd, UINT64_MAX, COPY_REFLINK);
+        if (r < 0)
+                return r;
+
+        if (ro) {
+                _cleanup_close_ int rfd = -EBADF;
+
+                r = memfd_set_sealed(mfd);
+                if (r < 0)
+                        return r;
+
+                rfd = fd_reopen(mfd, mode);
+                if (rfd < 0)
+                        return rfd;
+
+                return TAKE_FD(rfd);
+        }
+
+        off_t f = lseek(mfd, 0, SEEK_SET);
+        if (f < 0)
+                return -errno;
+
+        return TAKE_FD(mfd);
+}
diff --git a/src/shared/data-fd-util.h b/src/shared/data-fd-util.h
index 827e149..f0e7923 100644
--- a/src/shared/data-fd-util.h
+++ b/src/shared/data-fd-util.h
@@ -5,3 +5,4 @@
 
 int acquire_data_fd(const void *data, size_t size, unsigned flags);
 int copy_data_fd(int fd);
+int memfd_clone_fd(int fd, const char *name, int mode);
diff --git a/src/shared/dev-setup.c b/src/shared/dev-setup.c
index 0390abb..e0db777 100644
--- a/src/shared/dev-setup.c
+++ b/src/shared/dev-setup.c
@@ -8,6 +8,7 @@
 #include "dev-setup.h"
 #include "label.h"
 #include "log.h"
+#include "mkdir-label.h"
 #include "nulstr-util.h"
 #include "path-util.h"
 #include "umask-util.h"
@@ -21,7 +22,6 @@
                 "/proc/self/fd/1\0"  "/dev/stdout\0"
                 "/proc/self/fd/2\0"  "/dev/stderr\0";
 
-        const char *j, *k;
         int r;
 
         NULSTR_FOREACH_PAIR(j, k, symlinks) {
diff --git a/src/shared/device-nodes.c b/src/shared/device-nodes.c
index ec5613a..40e4693 100644
--- a/src/shared/device-nodes.c
+++ b/src/shared/device-nodes.c
@@ -5,13 +5,13 @@
 #include <string.h>
 
 #include "device-nodes.h"
+#include "string-util.h"
 #include "utf8.h"
 
 int allow_listed_char_for_devnode(char c, const char *white) {
         return
-                (c >= '0' && c <= '9') ||
-                (c >= 'A' && c <= 'Z') ||
-                (c >= 'a' && c <= 'z') ||
+                ascii_isdigit(c) ||
+                ascii_isalpha(c) ||
                 strchr("#+-.:=@_", c) ||
                 (white && strchr(white, c));
 }
diff --git a/src/shared/devnode-acl.c b/src/shared/devnode-acl.c
index 394422b..5911c2f 100644
--- a/src/shared/devnode-acl.c
+++ b/src/shared/devnode-acl.c
@@ -9,12 +9,12 @@
 #include "device-util.h"
 #include "devnode-acl.h"
 #include "dirent-util.h"
-#include "escape.h"
 #include "fd-util.h"
 #include "format-util.h"
+#include "fs-util.h"
+#include "glyph-util.h"
 #include "set.h"
 #include "string-util.h"
-#include "util.h"
 
 static int flush_acl(acl_t acl) {
         acl_entry_t i;
@@ -141,17 +141,12 @@
                     bool add, uid_t new_uid) {
 
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
-        _cleanup_set_free_free_ Set *nodes = NULL;
+        _cleanup_set_free_ Set *nodes = NULL;
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *dent;
         sd_device *d;
         char *n;
         int r;
 
-        nodes = set_new(&path_hash_ops);
-        if (!nodes)
-                return -ENOMEM;
-
         r = sd_device_enumerator_new(&e);
         if (r < 0)
                 return r;
@@ -186,7 +181,7 @@
                         continue;
 
                 log_device_debug(d, "Found udev node %s for seat %s", node, seat);
-                r = set_put_strdup(&nodes, node);
+                r = set_put_strdup_full(&nodes, &path_hash_ops_free, node);
                 if (r < 0)
                         return r;
         }
@@ -195,20 +190,19 @@
          * these devices are not known to the kernel at this moment */
         dir = opendir("/run/udev/static_node-tags/uaccess");
         if (dir) {
-                FOREACH_DIRENT(dent, dir, return -errno) {
-                        _cleanup_free_ char *unescaped_devname = NULL;
-
-                        if (cunescape(dent->d_name, UNESCAPE_RELAX, &unescaped_devname) < 0)
-                                return -ENOMEM;
-
-                        n = path_join("/dev", unescaped_devname);
-                        if (!n)
-                                return -ENOMEM;
+                FOREACH_DIRENT(de, dir, return -errno) {
+                        r = readlinkat_malloc(dirfd(dir), de->d_name, &n);
+                        if (r == -ENOENT)
+                                continue;
+                        if (r < 0) {
+                                log_debug_errno(r,
+                                                "Unable to read symlink '/run/udev/static_node-tags/uaccess/%s', ignoring: %m",
+                                                de->d_name);
+                                continue;
+                        }
 
                         log_debug("Found static node %s for seat %s", n, seat);
-                        r = set_consume(nodes, n);
-                        if (r == -EEXIST)
-                                continue;
+                        r = set_ensure_consume(&nodes, &path_hash_ops_free, n);
                         if (r < 0)
                                 return r;
                 }
@@ -218,8 +212,8 @@
         SET_FOREACH(n, nodes) {
                 int k;
 
-                log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"→"UID_FMT"%s%s)",
-                          n, seat, old_uid, new_uid,
+                log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"%s"UID_FMT"%s%s)",
+                          n, seat, old_uid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), new_uid,
                           del ? " del" : "", add ? " add" : "");
 
                 k = devnode_acl(n, flush, del, old_uid, add, new_uid);
diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c
index 5f8bf43..6d294ef 100644
--- a/src/shared/discover-image.c
+++ b/src/shared/discover-image.c
@@ -14,6 +14,7 @@
 
 #include "alloc-util.h"
 #include "btrfs-util.h"
+#include "chase-symlinks.h"
 #include "chattr-util.h"
 #include "copy.h"
 #include "dirent-util.h"
@@ -84,8 +85,9 @@
 
 static char **image_settings_path(Image *image) {
         _cleanup_strv_free_ char **l = NULL;
-        const char *fn, *s;
-        unsigned i = 0;
+        _cleanup_free_ char *fn = NULL;
+        size_t i = 0;
+        int r;
 
         assert(image);
 
@@ -93,7 +95,9 @@
         if (!l)
                 return NULL;
 
-        fn = strjoina(image->name, ".nspawn");
+        fn = strjoin(image->name, ".nspawn");
+        if (!fn)
+                return NULL;
 
         FOREACH_STRING(s, "/etc/systemd/nspawn", "/run/systemd/nspawn") {
                 l[i] = path_join(s, fn);
@@ -103,25 +107,32 @@
                 i++;
         }
 
-        l[i] = file_in_same_dir(image->path, fn);
-        if (!l[i])
+        r = file_in_same_dir(image->path, fn, l + i);
+        if (r == -ENOMEM)
                 return NULL;
+        if (r < 0)
+                log_debug_errno(r, "Failed to generate .nspawn settings path from image path, ignoring: %m");
+
+        strv_uniq(l);
 
         return TAKE_PTR(l);
 }
 
-static char *image_roothash_path(Image *image) {
-        const char *fn;
+static int image_roothash_path(Image *image, char **ret) {
+        _cleanup_free_ char *fn = NULL;
 
         assert(image);
 
-        fn = strjoina(image->name, ".roothash");
+        fn = strjoin(image->name, ".roothash");
+        if (!fn)
+                return -ENOMEM;
 
-        return file_in_same_dir(image->path, fn);
+        return file_in_same_dir(image->path, fn, ret);
 }
 
 static int image_new(
                 ImageType t,
+                ImageClass c,
                 const char *pretty,
                 const char *path,
                 const char *filename,
@@ -145,6 +156,7 @@
         *i = (Image) {
                 .n_ref = 1,
                 .type = t,
+                .class = c,
                 .read_only = read_only,
                 .crtime = crtime,
                 .mtime = mtime,
@@ -172,15 +184,13 @@
 static int extract_pretty(const char *path, const char *suffix, char **ret) {
         _cleanup_free_ char *name = NULL;
         const char *p;
-        size_t n;
 
         assert(path);
         assert(ret);
 
         p = last_path_component(path);
-        n = strcspn(p, "/");
 
-        name = strndup(p, n);
+        name = strdupcspn(p, "/");
         if (!name)
                 return -ENOMEM;
 
@@ -202,6 +212,7 @@
 }
 
 static int image_make(
+                ImageClass c,
                 const char *pretty,
                 int dfd,
                 const char *path,
@@ -243,7 +254,7 @@
                 (faccessat(dfd, filename, W_OK, AT_EACCESS) < 0 && errno == EROFS);
 
         if (S_ISDIR(st->st_mode)) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 unsigned file_attr = 0;
                 usec_t crtime = 0;
 
@@ -277,6 +288,7 @@
                                         return r;
 
                                 r = image_new(IMAGE_SUBVOLUME,
+                                              c,
                                               pretty,
                                               path,
                                               filename,
@@ -313,6 +325,7 @@
 
                 /* It's just a normal directory. */
                 r = image_new(IMAGE_DIRECTORY,
+                              c,
                               pretty,
                               path,
                               filename,
@@ -333,7 +346,7 @@
                 if (!ret)
                         return 0;
 
-                (void) fd_getcrtime_at(dfd, filename, &crtime, 0);
+                (void) fd_getcrtime_at(dfd, filename, AT_SYMLINK_FOLLOW, &crtime);
 
                 if (!pretty) {
                         r = extract_pretty(filename, ".raw", &pretty_buffer);
@@ -344,6 +357,7 @@
                 }
 
                 r = image_new(IMAGE_RAW,
+                              c,
                               pretty,
                               path,
                               filename,
@@ -360,7 +374,7 @@
                 return 0;
 
         } else if (S_ISBLK(st->st_mode)) {
-                _cleanup_close_ int block_fd = -1;
+                _cleanup_close_ int block_fd = -EBADF;
                 uint64_t size = UINT64_MAX;
 
                 /* A block device */
@@ -404,6 +418,7 @@
                 }
 
                 r = image_new(IMAGE_BLOCK,
+                              c,
                               pretty,
                               path,
                               filename,
@@ -428,7 +443,6 @@
                const char *root,
                Image **ret) {
 
-        const char *path;
         int r;
 
         assert(class >= 0);
@@ -475,13 +489,13 @@
                         if (!S_ISREG(st.st_mode))
                                 continue;
 
-                        r = image_make(name, dirfd(d), resolved, raw, &st, ret);
+                        r = image_make(class, name, dirfd(d), resolved, raw, &st, ret);
 
                 } else {
                         if (!S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode))
                                 continue;
 
-                        r = image_make(name, dirfd(d), resolved, name, &st, ret);
+                        r = image_make(class, name, dirfd(d), resolved, name, &st, ret);
                 }
                 if (IN_SET(r, -ENOENT, -EMEDIUMTYPE))
                         continue;
@@ -495,7 +509,7 @@
         }
 
         if (class == IMAGE_MACHINE && streq(name, ".host")) {
-                r = image_make(".host", AT_FDCWD, NULL, empty_to_root(root), NULL, ret);
+                r = image_make(class, ".host", AT_FDCWD, NULL, empty_to_root(root), NULL, ret);
                 if (r < 0)
                         return r;
 
@@ -515,9 +529,9 @@
          * overridden by another, different image earlier in the search path */
 
         if (path_equal(path, "/"))
-                return image_make(".host", AT_FDCWD, NULL, "/", NULL, ret);
+                return image_make(IMAGE_MACHINE, ".host", AT_FDCWD, NULL, "/", NULL, ret);
 
-        return image_make(NULL, AT_FDCWD, NULL, path, NULL, ret);
+        return image_make(_IMAGE_CLASS_INVALID, NULL, AT_FDCWD, NULL, path, NULL, ret);
 }
 
 int image_find_harder(ImageClass class, const char *name_or_path, const char *root, Image **ret) {
@@ -532,7 +546,6 @@
                 const char *root,
                 Hashmap *h) {
 
-        const char *path;
         int r;
 
         assert(class >= 0);
@@ -542,7 +555,6 @@
         NULSTR_FOREACH(path, image_search_path[class]) {
                 _cleanup_free_ char *resolved = NULL;
                 _cleanup_closedir_ DIR *d = NULL;
-                struct dirent *de;
 
                 r = chase_symlinks_and_opendir(path, root, CHASE_PREFIX_ROOT, &resolved, &d);
                 if (r == -ENOENT)
@@ -593,7 +605,7 @@
                         if (hashmap_contains(h, pretty))
                                 continue;
 
-                        r = image_make(pretty, dirfd(d), resolved, de->d_name, &st, &image);
+                        r = image_make(class, pretty, dirfd(d), resolved, de->d_name, &st, &image);
                         if (IN_SET(r, -ENOENT, -EMEDIUMTYPE))
                                 continue;
                         if (r < 0)
@@ -612,7 +624,7 @@
         if (class == IMAGE_MACHINE && !hashmap_contains(h, ".host")) {
                 _cleanup_(image_unrefp) Image *image = NULL;
 
-                r = image_make(".host", AT_FDCWD, NULL, empty_to_root("/"), NULL, &image);
+                r = image_make(IMAGE_MACHINE, ".host", AT_FDCWD, NULL, empty_to_root("/"), NULL, &image);
                 if (r < 0)
                         return r;
 
@@ -632,7 +644,6 @@
         _cleanup_(release_lock_file) LockFile global_lock = LOCK_FILE_INIT, local_lock = LOCK_FILE_INIT;
         _cleanup_strv_free_ char **settings = NULL;
         _cleanup_free_ char *roothash = NULL;
-        char **j;
         int r;
 
         assert(i);
@@ -644,9 +655,9 @@
         if (!settings)
                 return -ENOMEM;
 
-        roothash = image_roothash_path(i);
-        if (!roothash)
-                return -ENOMEM;
+        r = image_roothash_path(i, &roothash);
+        if (r < 0)
+                return r;
 
         /* Make sure we don't interfere with a running nspawn */
         r = image_path_lock(i->path, LOCK_EX|LOCK_NB, &global_lock, &local_lock);
@@ -695,10 +706,9 @@
                 return -EOPNOTSUPP;
         }
 
-        STRV_FOREACH(j, settings) {
+        STRV_FOREACH(j, settings)
                 if (unlink(*j) < 0 && errno != ENOENT)
                         log_debug_errno(errno, "Failed to unlink %s, ignoring: %m", *j);
-        }
 
         if (unlink(roothash) < 0 && errno != ENOENT)
                 log_debug_errno(errno, "Failed to unlink %s, ignoring: %m", roothash);
@@ -707,15 +717,17 @@
 }
 
 static int rename_auxiliary_file(const char *path, const char *new_name, const char *suffix) {
-        _cleanup_free_ char *rs = NULL;
-        const char *fn;
+        _cleanup_free_ char *fn = NULL, *rs = NULL;
+        int r;
 
-        fn = strjoina(new_name, suffix);
-
-        rs = file_in_same_dir(path, fn);
-        if (!rs)
+        fn = strjoin(new_name, suffix);
+        if (!fn)
                 return -ENOMEM;
 
+        r = file_in_same_dir(path, fn, &rs);
+        if (r < 0)
+                return r;
+
         return rename_noreplace(AT_FDCWD, path, AT_FDCWD, rs);
 }
 
@@ -724,7 +736,6 @@
         _cleanup_free_ char *new_path = NULL, *nn = NULL, *roothash = NULL;
         _cleanup_strv_free_ char **settings = NULL;
         unsigned file_attr = 0;
-        char **j;
         int r;
 
         assert(i);
@@ -739,9 +750,9 @@
         if (!settings)
                 return -ENOMEM;
 
-        roothash = image_roothash_path(i);
-        if (!roothash)
-                return -ENOMEM;
+        r = image_roothash_path(i, &roothash);
+        if (r < 0)
+                return r;
 
         /* Make sure we don't interfere with a running nspawn */
         r = image_path_lock(i->path, LOCK_EX|LOCK_NB, &global_lock, &local_lock);
@@ -772,7 +783,7 @@
 
                 _fallthrough_;
         case IMAGE_SUBVOLUME:
-                new_path = file_in_same_dir(i->path, new_name);
+                r = file_in_same_dir(i->path, new_name, &new_path);
                 break;
 
         case IMAGE_BLOCK:
@@ -781,23 +792,23 @@
                 if (path_startswith(i->path, "/dev"))
                         return -EROFS;
 
-                new_path = file_in_same_dir(i->path, new_name);
+                r = file_in_same_dir(i->path, new_name, &new_path);
                 break;
 
         case IMAGE_RAW: {
                 const char *fn;
 
                 fn = strjoina(new_name, ".raw");
-                new_path = file_in_same_dir(i->path, fn);
+
+                r = file_in_same_dir(i->path, fn, &new_path);
                 break;
         }
 
         default:
                 return -EOPNOTSUPP;
         }
-
-        if (!new_path)
-                return -ENOMEM;
+        if (r < 0)
+                return r;
 
         nn = strdup(new_name);
         if (!nn)
@@ -828,15 +839,17 @@
 }
 
 static int clone_auxiliary_file(const char *path, const char *new_name, const char *suffix) {
-        _cleanup_free_ char *rs = NULL;
-        const char *fn;
+        _cleanup_free_ char *fn = NULL, *rs = NULL;
+        int r;
 
-        fn = strjoina(new_name, suffix);
-
-        rs = file_in_same_dir(path, fn);
-        if (!rs)
+        fn = strjoin(new_name, suffix);
+        if (!fn)
                 return -ENOMEM;
 
+        r = file_in_same_dir(path, fn, &rs);
+        if (r < 0)
+                return r;
+
         return copy_file_atomic(path, rs, 0664, 0, 0, COPY_REFLINK);
 }
 
@@ -845,7 +858,6 @@
         _cleanup_strv_free_ char **settings = NULL;
         _cleanup_free_ char *roothash = NULL;
         const char *new_path;
-        char **j;
         int r;
 
         assert(i);
@@ -857,9 +869,9 @@
         if (!settings)
                 return -ENOMEM;
 
-        roothash = image_roothash_path(i);
-        if (!roothash)
-                return -ENOMEM;
+        r = image_roothash_path(i, &roothash);
+        if (r < 0)
+                return r;
 
         /* Make sure nobody takes the new name, between the time we
          * checked it is currently unused in all search paths, and the
@@ -983,7 +995,7 @@
         }
 
         case IMAGE_BLOCK: {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 struct stat st;
                 int state = b;
 
@@ -1151,13 +1163,13 @@
                 if (r < 0 && r != -ENOENT)
                         log_debug_errno(r, "Failed to chase /etc/machine-id in image %s: %m", i->name);
                 else if (r >= 0) {
-                        _cleanup_close_ int fd = -1;
+                        _cleanup_close_ int fd = -EBADF;
 
                         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY);
                         if (fd < 0)
                                 log_debug_errno(errno, "Failed to open %s: %m", path);
                         else {
-                                r = id128_read_fd(fd, ID128_PLAIN, &machine_id);
+                                r = id128_read_fd(fd, ID128_FORMAT_PLAIN, &machine_id);
                                 if (r < 0)
                                         log_debug_errno(r, "Image %s contains invalid machine ID.", i->name);
                         }
@@ -1178,7 +1190,7 @@
                 if (r < 0)
                         log_debug_errno(r, "Failed to read os-release in image, ignoring: %m");
 
-                r = load_extension_release_pairs(i->path, i->name, &extension_release);
+                r = load_extension_release_pairs(i->path, i->name, /* relax_extension_release_check= */ false, &extension_release);
                 if (r < 0)
                         log_debug_errno(r, "Failed to read extension-release in image, ignoring: %m");
 
@@ -1196,25 +1208,27 @@
                 _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
                 _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
 
-                r = loop_device_make_by_path(i->path, O_RDONLY, LO_FLAGS_PARTSCAN, &d);
+                r = loop_device_make_by_path(i->path, O_RDONLY, /* sector_size= */ UINT32_MAX, LO_FLAGS_PARTSCAN, LOCK_SH, &d);
                 if (r < 0)
                         return r;
 
-                r = dissect_image(
-                                d->fd,
+                r = dissect_loop_device(
+                                d,
                                 NULL, NULL,
-                                d->uevent_seqnum_not_before,
-                                d->timestamp_not_before,
                                 DISSECT_IMAGE_GENERIC_ROOT |
                                 DISSECT_IMAGE_REQUIRE_ROOT |
                                 DISSECT_IMAGE_RELAX_VAR_CHECK |
                                 DISSECT_IMAGE_READ_ONLY |
-                                DISSECT_IMAGE_USR_NO_ROOT,
+                                DISSECT_IMAGE_USR_NO_ROOT |
+                                DISSECT_IMAGE_ADD_PARTITION_DEVICES |
+                                DISSECT_IMAGE_PIN_PARTITION_DEVICES,
                                 &m);
                 if (r < 0)
                         return r;
 
-                r = dissected_image_acquire_metadata(m);
+                r = dissected_image_acquire_metadata(m,
+                                                     DISSECT_IMAGE_VALIDATE_OS |
+                                                     DISSECT_IMAGE_VALIDATE_OS_EXT);
                 if (r < 0)
                         return r;
 
@@ -1266,8 +1280,6 @@
                 const char *root,
                 const char *image) {
 
-        const char *path;
-
         assert(image);
 
         NULSTR_FOREACH(path, image_search_path[class]) {
@@ -1309,3 +1321,11 @@
 };
 
 DEFINE_STRING_TABLE_LOOKUP(image_type, ImageType);
+
+static const char* const image_class_table[_IMAGE_CLASS_MAX] = {
+        [IMAGE_MACHINE] = "machine",
+        [IMAGE_PORTABLE] = "portable",
+        [IMAGE_EXTENSION] = "extension",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(image_class, ImageClass);
diff --git a/src/shared/discover-image.h b/src/shared/discover-image.h
index 3726e98..a887422 100644
--- a/src/shared/discover-image.h
+++ b/src/shared/discover-image.h
@@ -34,6 +34,7 @@
         unsigned n_ref;
 
         ImageType type;
+        ImageClass class;
         char *name;
         char *path;
         bool read_only;
@@ -76,6 +77,9 @@
 const char* image_type_to_string(ImageType t) _const_;
 ImageType image_type_from_string(const char *s) _pure_;
 
+const char* image_class_to_string(ImageClass cl) _const_;
+ImageClass image_class_from_string(const char *s) _pure_;
+
 int image_path_lock(const char *path, int operation, LockFile *global, LockFile *local);
 int image_name_lock(const char *name, int operation, LockFile *ret);
 
diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c
index 00412cd..4749bdd 100644
--- a/src/shared/dissect-image.c
+++ b/src/shared/dissect-image.c
@@ -6,11 +6,18 @@
 
 #include <linux/dm-ioctl.h>
 #include <linux/loop.h>
+#include <sys/file.h>
 #include <sys/mount.h>
 #include <sys/prctl.h>
 #include <sys/wait.h>
 #include <sysexits.h>
 
+#if HAVE_OPENSSL
+#include <openssl/err.h>
+#include <openssl/pem.h>
+#include <openssl/x509.h>
+#endif
+
 #include "sd-device.h"
 #include "sd-id128.h"
 
@@ -18,15 +25,20 @@
 #include "ask-password-api.h"
 #include "blkid-util.h"
 #include "blockdev-util.h"
+#include "btrfs-util.h"
+#include "chase-symlinks.h"
+#include "conf-files.h"
+#include "constants.h"
 #include "copy.h"
 #include "cryptsetup-util.h"
-#include "def.h"
 #include "device-nodes.h"
 #include "device-util.h"
+#include "devnum-util.h"
 #include "discover-image.h"
 #include "dissect-image.h"
 #include "dm-util.h"
 #include "env-file.h"
+#include "env-util.h"
 #include "extension-release.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -37,17 +49,20 @@
 #include "hostname-setup.h"
 #include "id128-util.h"
 #include "import-util.h"
-#include "mkdir.h"
+#include "io-util.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
 #include "namespace-util.h"
 #include "nulstr-util.h"
+#include "openssl-util.h"
 #include "os-util.h"
 #include "path-util.h"
 #include "process-util.h"
 #include "raw-clone.h"
 #include "resize-fs.h"
 #include "signal-util.h"
+#include "sparse-endian.h"
 #include "stat-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
@@ -61,19 +76,188 @@
 /* how many times to wait for the device nodes to appear */
 #define N_DEVICE_NODE_LIST_ATTEMPTS 10
 
-int probe_filesystem(const char *node, char **ret_fstype) {
+int dissect_fstype_ok(const char *fstype) {
+        const char *e;
+        bool b;
+
+        /* When we automatically mount file systems, be a bit conservative by default what we are willing to
+         * mount, just as an extra safety net to not mount with badly maintained legacy file system
+         * drivers. */
+
+        e = secure_getenv("SYSTEMD_DISSECT_FILE_SYSTEMS");
+        if (e) {
+                _cleanup_strv_free_ char **l = NULL;
+
+                l = strv_split(e, ":");
+                if (!l)
+                        return -ENOMEM;
+
+                b = strv_contains(l, fstype);
+        } else
+                b = STR_IN_SET(fstype,
+                               "btrfs",
+                               "erofs",
+                               "ext4",
+                               "squashfs",
+                               "vfat",
+                               "xfs");
+        if (b)
+                return true;
+
+        log_debug("File system type '%s' is not allowed to be mounted as result of automatic dissection.", fstype);
+        return false;
+}
+
+int probe_sector_size(int fd, uint32_t *ret) {
+
+        struct gpt_header {
+                char signature[8];
+                le32_t revision;
+                le32_t header_size;
+                le32_t crc32;
+                le32_t reserved;
+                le64_t my_lba;
+                le64_t alternate_lba;
+                le64_t first_usable_lba;
+                le64_t last_usable_lba;
+                sd_id128_t disk_guid;
+                le64_t partition_entry_lba;
+                le32_t number_of_partition_entries;
+                le32_t size_of_partition_entry;
+                le32_t partition_entry_array_crc32;
+        } _packed_;
+
+        /* Disk images might be for 512B or for 4096 sector sizes, let's try to auto-detect that by searching
+         * for the GPT headers at the relevant byte offsets */
+
+        assert_cc(sizeof(struct gpt_header) == 92);
+
+        /* We expect a sector size in the range 512…4096. The GPT header is located in the second
+         * sector. Hence it could be at byte 512 at the earliest, and at byte 4096 at the latest. And we must
+         * read with granularity of the largest sector size we care about. Which means 8K. */
+        uint8_t sectors[2 * 4096];
+        uint32_t found = 0;
+        ssize_t n;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        n = pread(fd, sectors, sizeof(sectors), 0);
+        if (n < 0)
+                return -errno;
+        if (n != sizeof(sectors)) /* too short? */
+                goto not_found;
+
+        /* Let's see if we find the GPT partition header with various expected sector sizes */
+        for (uint32_t sz = 512; sz <= 4096; sz <<= 1) {
+                struct gpt_header *p;
+
+                assert(sizeof(sectors) >= sz * 2);
+                p = (struct gpt_header*) (sectors + sz);
+
+                if (memcmp(p->signature, (const char[8]) { 'E', 'F', 'I', ' ', 'P', 'A', 'R', 'T' }, 8) != 0)
+                        continue;
+
+                if (le32toh(p->revision) != UINT32_C(0x00010000)) /* the only known revision of the spec: 1.0 */
+                        continue;
+
+                if (le32toh(p->header_size) < sizeof(struct gpt_header))
+                        continue;
+
+                if (le32toh(p->header_size) > 4096) /* larger than a sector? something is off… */
+                        continue;
+
+                if (le64toh(p->my_lba) != 1) /* this sector must claim to be at sector offset 1 */
+                        continue;
+
+                if (found != 0)
+                        return log_debug_errno(SYNTHETIC_ERRNO(ENOTUNIQ),
+                                               "Detected valid partition table at offsets matching multiple sector sizes, refusing.");
+
+                found = sz;
+        }
+
+        if (found != 0) {
+                log_debug("Determined sector size %" PRIu32 " based on discovered partition table.", found);
+                *ret = found;
+                return 1; /* indicate we *did* find it */
+        }
+
+not_found:
+        log_debug("Couldn't find any partition table to derive sector size of.");
+        *ret = 512; /* pick the traditional default */
+        return 0;   /* indicate we didn't find it */
+}
+
+int probe_sector_size_prefer_ioctl(int fd, uint32_t *ret) {
+        struct stat st;
+
+        assert(fd >= 0);
+        assert(ret);
+
+        /* Just like probe_sector_size(), but if we are looking at a block device, will use the already
+         * configured sector size rather than probing by contents */
+
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        if (S_ISBLK(st.st_mode))
+                return blockdev_get_sector_size(fd, ret);
+
+        return probe_sector_size(fd, ret);
+}
+
+int probe_filesystem_full(
+                int fd,
+                const char *path,
+                uint64_t offset,
+                uint64_t size,
+                char **ret_fstype) {
+
         /* Try to find device content type and return it in *ret_fstype. If nothing is found,
-         * 0/NULL will be returned. -EUCLEAN will be returned for ambiguous results, and an
+         * 0/NULL will be returned. -EUCLEAN will be returned for ambiguous results, and a
          * different error otherwise. */
 
 #if HAVE_BLKID
         _cleanup_(blkid_free_probep) blkid_probe b = NULL;
+        _cleanup_free_ char *path_by_fd = NULL;
+        _cleanup_close_ int fd_close = -EBADF;
         const char *fstype;
         int r;
 
-        errno = 0;
-        b = blkid_new_probe_from_filename(node);
+        assert(fd >= 0 || path);
+        assert(ret_fstype);
+
+        if (fd < 0) {
+                fd_close = open(path, O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
+                if (fd_close < 0)
+                        return -errno;
+
+                fd = fd_close;
+        }
+
+        if (!path) {
+                r = fd_get_path(fd, &path_by_fd);
+                if (r < 0)
+                        return r;
+
+                path = path_by_fd;
+        }
+
+        if (size == 0) /* empty size? nothing found! */
+                goto not_found;
+
+        b = blkid_new_probe();
         if (!b)
+                return -ENOMEM;
+
+        errno = 0;
+        r = blkid_probe_set_device(
+                        b,
+                        fd,
+                        offset,
+                        size == UINT64_MAX ? 0 : size); /* when blkid sees size=0 it understands "everything". We prefer using UINT64_MAX for that */
+        if (r != 0)
                 return errno_or_else(ENOMEM);
 
         blkid_probe_enable_superblocks(b, 1);
@@ -81,21 +265,23 @@
 
         errno = 0;
         r = blkid_do_safeprobe(b);
-        if (r == 1) {
-                log_debug("No type detected on partition %s", node);
+        if (r == _BLKID_SAFEPROBE_NOT_FOUND)
                 goto not_found;
-        }
-        if (r == -2)
+        if (r == _BLKID_SAFEPROBE_AMBIGUOUS)
                 return log_debug_errno(SYNTHETIC_ERRNO(EUCLEAN),
-                                       "Results ambiguous for partition %s", node);
-        if (r != 0)
-                return errno_or_else(EIO);
+                                       "Results ambiguous for partition %s", path);
+        if (r == _BLKID_SAFEPROBE_ERROR)
+                return log_debug_errno(errno_or_else(EIO), "Failed to probe partition %s: %m", path);
+
+        assert(r == _BLKID_SAFEPROBE_FOUND);
 
         (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL);
 
         if (fstype) {
                 char *t;
 
+                log_debug("Probed fstype '%s' on partition %s.", fstype, path);
+
                 t = strdup(fstype);
                 if (!t)
                         return -ENOMEM;
@@ -105,6 +291,7 @@
         }
 
 not_found:
+        log_debug("No type detected on partition %s", path);
         *ret_fstype = NULL;
         return 0;
 #else
@@ -113,360 +300,40 @@
 }
 
 #if HAVE_BLKID
-static int enumerator_for_parent(sd_device *d, sd_device_enumerator **ret) {
-        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+static int dissected_image_probe_filesystems(DissectedImage *m, int fd) {
         int r;
 
-        assert(d);
-        assert(ret);
+        assert(m);
 
-        r = sd_device_enumerator_new(&e);
-        if (r < 0)
-                return r;
+        /* Fill in file system types if we don't know them yet. */
 
-        r = sd_device_enumerator_add_match_subsystem(e, "block", true);
-        if (r < 0)
-                return r;
+        for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) {
+                DissectedPartition *p = m->partitions + i;
 
-        r = sd_device_enumerator_add_match_parent(e, d);
-        if (r < 0)
-                return r;
+                if (!p->found)
+                        continue;
 
-        r = sd_device_enumerator_add_match_sysattr(e, "partition", NULL, true);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(e);
-        return 0;
-}
-
-static int device_is_partition(
-                sd_device *d,
-                sd_device *expected_parent,
-                blkid_partition pp) {
-
-        const char *v, *parent_syspath, *expected_parent_syspath;
-        blkid_loff_t bsize, bstart;
-        uint64_t size, start;
-        int partno, bpartno, r;
-        sd_device *parent;
-
-        assert(d);
-        assert(expected_parent);
-        assert(pp);
-
-        r = sd_device_get_subsystem(d, &v);
-        if (r < 0)
-                return r;
-        if (!streq(v, "block"))
-                return false;
-
-        if (sd_device_get_devtype(d, &v) < 0 || !streq(v, "partition"))
-                return false;
-
-        r = sd_device_get_parent(d, &parent);
-        if (r < 0)
-                return false; /* Doesn't have a parent? No relevant to us */
-
-        r = sd_device_get_syspath(parent, &parent_syspath); /* Check parent of device of this action */
-        if (r < 0)
-                return r;
-
-        r = sd_device_get_syspath(expected_parent, &expected_parent_syspath); /* Check parent of device we are looking for */
-        if (r < 0)
-                return r;
-
-        if (!path_equal(parent_syspath, expected_parent_syspath))
-                return false; /* Has a different parent than what we need, not interesting to us */
-
-        /* On kernel uevents we may find the partition number in the PARTN= field. Let's use that preferably,
-         * since it's cheaper and more importantly: the sysfs attribute "partition" appears to become
-         * available late, hence let's use the property instead, which is available at the moment we see the
-         * uevent. */
-        r = sd_device_get_property_value(d, "PARTN", &v);
-        if (r == -ENOENT)
-                r = sd_device_get_sysattr_value(d, "partition", &v);
-        if (r < 0)
-                return r;
-
-        r = safe_atoi(v, &partno);
-        if (r < 0)
-                return r;
-
-        errno = 0;
-        bpartno = blkid_partition_get_partno(pp);
-        if (bpartno < 0)
-                return errno_or_else(EIO);
-
-        if (partno != bpartno)
-                return false;
-
-        r = sd_device_get_sysattr_value(d, "start", &v);
-        if (r < 0)
-                return r;
-        r = safe_atou64(v, &start);
-        if (r < 0)
-                return r;
-
-        errno = 0;
-        bstart = blkid_partition_get_start(pp);
-        if (bstart < 0)
-                return errno_or_else(EIO);
-
-        if (start != (uint64_t) bstart)
-                return false;
-
-        r = sd_device_get_sysattr_value(d, "size", &v);
-        if (r < 0)
-                return r;
-        r = safe_atou64(v, &size);
-        if (r < 0)
-                return r;
-
-        errno = 0;
-        bsize = blkid_partition_get_size(pp);
-        if (bsize < 0)
-                return errno_or_else(EIO);
-
-        if (size != (uint64_t) bsize)
-                return false;
-
-        return true;
-}
-
-static int find_partition(
-                sd_device *parent,
-                blkid_partition pp,
-                usec_t timestamp_not_before,
-                DissectImageFlags flags,
-                sd_device **ret) {
-
-        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
-        sd_device *q;
-        int r;
-
-        assert(parent);
-        assert(pp);
-        assert(ret);
-
-        r = enumerator_for_parent(parent, &e);
-        if (r < 0)
-                return r;
-
-        FOREACH_DEVICE(e, q) {
-                uint64_t usec;
-
-                if (!FLAGS_SET(flags, DISSECT_IMAGE_NO_UDEV)) {
-                        r = sd_device_get_usec_initialized(q, &usec);
-                        if (r == -EBUSY) /* Not initialized yet */
-                                continue;
+                if (!p->fstype) {
+                        /* If we have an fd referring to the partition block device, use that. Otherwise go
+                         * via the whole block device or backing regular file, and read via offset. */
+                        if (p->mount_node_fd >= 0)
+                                r = probe_filesystem_full(p->mount_node_fd, p->node, 0, UINT64_MAX, &p->fstype);
+                        else
+                                r = probe_filesystem_full(fd, p->node, p->offset, p->size, &p->fstype);
                         if (r < 0)
                                 return r;
-
-                        if (timestamp_not_before != USEC_INFINITY &&
-                            usec < timestamp_not_before) /* udev database entry older than our attachment? Then it's not ours */
-                                continue;
                 }
 
-                r = device_is_partition(q, parent, pp);
-                if (r < 0)
-                        return r;
-                if (r > 0) {
-                        *ret = sd_device_ref(q);
-                        return 0;
-                }
+                if (streq_ptr(p->fstype, "crypto_LUKS"))
+                        m->encrypted = true;
+
+                if (p->fstype && fstype_is_ro(p->fstype))
+                        p->rw = false;
+
+                if (!p->rw)
+                        p->growfs = false;
         }
 
-        return -ENXIO;
-}
-
-struct wait_data {
-        sd_device *parent_device;
-        blkid_partition blkidp;
-        sd_device *found;
-        uint64_t uevent_seqnum_not_before;
-        usec_t timestamp_not_before;
-        DissectImageFlags flags;
-};
-
-static inline void wait_data_done(struct wait_data *d) {
-        sd_device_unref(d->found);
-}
-
-static int device_monitor_handler(sd_device_monitor *monitor, sd_device *device, void *userdata) {
-        struct wait_data *w = userdata;
-        int r;
-
-        assert(w);
-
-        if (device_for_action(device, SD_DEVICE_REMOVE))
-                return 0;
-
-        if (w->uevent_seqnum_not_before != UINT64_MAX) {
-                uint64_t seqnum;
-
-                r = sd_device_get_seqnum(device, &seqnum);
-                if (r < 0)
-                        goto finish;
-
-                if (seqnum <= w->uevent_seqnum_not_before) { /* From an older use of this loop device */
-                        log_debug("Dropping event because seqnum too old (%" PRIu64 " <= %" PRIu64 ")",
-                                  seqnum, w->uevent_seqnum_not_before);
-                        return 0;
-                }
-        }
-
-        r = device_is_partition(device, w->parent_device, w->blkidp);
-        if (r < 0)
-                goto finish;
-        if (r == 0) /* Not the one we need */
-                return 0;
-
-        /* It's the one we need! Yay! */
-        assert(!w->found);
-        w->found = sd_device_ref(device);
-        r = 0;
-
-finish:
-        return sd_event_exit(sd_device_monitor_get_event(monitor), r);
-}
-
-static int timeout_handler(sd_event_source *s, uint64_t usec, void *userdata) {
-        struct wait_data *w = userdata;
-        int r;
-
-        assert(w);
-
-        /* Why partition not appeared within the timeout? We may lost some uevent, as some properties
-         * were not ready when we received uevent... Not sure, but anyway, let's try to find the
-         * partition again before give up. */
-
-        r = find_partition(w->parent_device, w->blkidp, w->timestamp_not_before, w->flags, &w->found);
-        if (r == -ENXIO)
-                return log_debug_errno(SYNTHETIC_ERRNO(ETIMEDOUT),
-                                       "Partition still not appeared after timeout reached.");
-        if (r < 0)
-                return log_debug_errno(r, "Failed to find partition: %m");
-
-        log_debug("Partition appeared after timeout reached.");
-        return sd_event_exit(sd_event_source_get_event(s), 0);
-}
-
-static int retry_handler(sd_event_source *s, uint64_t usec, void *userdata) {
-        struct wait_data *w = userdata;
-        int r;
-
-        assert(w);
-
-        r = find_partition(w->parent_device, w->blkidp, w->timestamp_not_before, w->flags, &w->found);
-        if (r != -ENXIO) {
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to find partition: %m");
-
-                log_debug("Partition found by a periodic search.");
-                return sd_event_exit(sd_event_source_get_event(s), 0);
-        }
-
-        r = sd_event_source_set_time_relative(s, 500 * USEC_PER_MSEC);
-        if (r < 0)
-                return r;
-
-        return sd_event_source_set_enabled(s, SD_EVENT_ONESHOT);
-}
-
-static int wait_for_partition_device(
-                sd_device *parent,
-                blkid_partition pp,
-                usec_t deadline,
-                uint64_t uevent_seqnum_not_before,
-                usec_t timestamp_not_before,
-                DissectImageFlags flags,
-                sd_device **ret) {
-
-        _cleanup_(sd_event_source_unrefp) sd_event_source *timeout_source = NULL, *retry_source = NULL;
-        _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
-        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
-        int r;
-
-        assert(parent);
-        assert(pp);
-        assert(ret);
-
-        r = find_partition(parent, pp, timestamp_not_before, flags, ret);
-        if (r != -ENXIO)
-                return r;
-
-        r = sd_event_new(&event);
-        if (r < 0)
-                return r;
-
-        r = sd_device_monitor_new(&monitor);
-        if (r < 0)
-                return r;
-
-        r = sd_device_monitor_filter_add_match_subsystem_devtype(monitor, "block", "partition");
-        if (r < 0)
-                return r;
-
-        r = sd_device_monitor_filter_add_match_parent(monitor, parent, true);
-        if (r < 0)
-                return r;
-
-        r = sd_device_monitor_filter_add_match_sysattr(monitor, "partition", NULL, true);
-        if (r < 0)
-                return r;
-
-        r = sd_device_monitor_attach_event(monitor, event);
-        if (r < 0)
-                return r;
-
-        _cleanup_(wait_data_done) struct wait_data w = {
-                .parent_device = parent,
-                .blkidp = pp,
-                .uevent_seqnum_not_before = uevent_seqnum_not_before,
-                .timestamp_not_before = timestamp_not_before,
-                .flags = flags,
-        };
-
-        r = sd_device_monitor_start(monitor, device_monitor_handler, &w);
-        if (r < 0)
-                return r;
-
-        /* Check again, the partition might have appeared in the meantime */
-        r = find_partition(parent, pp, timestamp_not_before, flags, ret);
-        if (r != -ENXIO)
-                return r;
-
-        if (deadline != USEC_INFINITY) {
-                r = sd_event_add_time(
-                                event, &timeout_source,
-                                CLOCK_MONOTONIC, deadline, 0,
-                                timeout_handler, &w);
-                if (r < 0)
-                        return r;
-
-                r = sd_event_source_set_exit_on_failure(timeout_source, true);
-                if (r < 0)
-                        return r;
-        }
-
-        r = sd_event_add_time_relative(
-                        event, &retry_source,
-                        CLOCK_MONOTONIC, 500 * USEC_PER_MSEC, 0,
-                        retry_handler, &w);
-        if (r < 0)
-                return r;
-
-        r = sd_event_source_set_exit_on_failure(retry_source, true);
-        if (r < 0)
-                return r;
-
-        r = sd_event_loop(event);
-        if (r < 0)
-                return r;
-
-        assert(w.found);
-        *ret = TAKE_PTR(w.found);
         return 0;
 }
 
@@ -478,7 +345,10 @@
         assert(node);
 
         /* Mask away all flags supported by this partition's type and the three flags the UEFI spec defines generically */
-        pflags &= ~(supported | GPT_FLAG_REQUIRED_PARTITION | GPT_FLAG_NO_BLOCK_IO_PROTOCOL | GPT_FLAG_LEGACY_BIOS_BOOTABLE);
+        pflags &= ~(supported |
+                    SD_GPT_FLAG_REQUIRED_PARTITION |
+                    SD_GPT_FLAG_NO_BLOCK_IO_PROTOCOL |
+                    SD_GPT_FLAG_LEGACY_BIOS_BOOTABLE);
 
         if (pflags == 0)
                 return;
@@ -492,81 +362,49 @@
                 log_debug("Unexpected partition flag %llu set on %s!", bit, node);
         }
 }
-
-static int device_wait_for_initialization_harder(
-                sd_device *device,
-                const char *subsystem,
-                usec_t deadline,
-                sd_device **ret) {
-
-        usec_t start, left, retrigger_timeout;
-        int r;
-
-        start = now(CLOCK_MONOTONIC);
-        left = usec_sub_unsigned(deadline, start);
-
-        if (DEBUG_LOGGING) {
-                char buf[FORMAT_TIMESPAN_MAX];
-                const char *sn = NULL;
-
-                (void) sd_device_get_sysname(device, &sn);
-                log_device_debug(device,
-                                 "Waiting for device '%s' to initialize for %s.", strna(sn), format_timespan(buf, sizeof(buf), left, 0));
-        }
-
-        if (left != USEC_INFINITY)
-                retrigger_timeout = CLAMP(left / 4, 1 * USEC_PER_SEC, 5 * USEC_PER_SEC); /* A fourth of the total timeout, but let's clamp to 1s…5s range */
-        else
-                retrigger_timeout = 2 * USEC_PER_SEC;
-
-        for (;;) {
-                usec_t local_deadline, n;
-                bool last_try;
-
-                n = now(CLOCK_MONOTONIC);
-                assert(n >= start);
-
-                /* Find next deadline, when we'll retrigger */
-                local_deadline = start +
-                        DIV_ROUND_UP(n - start, retrigger_timeout) * retrigger_timeout;
-
-                if (deadline != USEC_INFINITY && deadline <= local_deadline) {
-                        local_deadline = deadline;
-                        last_try = true;
-                } else
-                        last_try = false;
-
-                r = device_wait_for_initialization(device, subsystem, local_deadline, ret);
-                if (r >= 0 && DEBUG_LOGGING) {
-                        char buf[FORMAT_TIMESPAN_MAX];
-                        const char *sn = NULL;
-
-                        (void) sd_device_get_sysname(device, &sn);
-                        log_device_debug(device,
-                                         "Successfully waited for device '%s' to initialize for %s.",
-                                         strna(sn),
-                                         format_timespan(buf, sizeof(buf), usec_sub_unsigned(now(CLOCK_MONOTONIC), start), 0));
-
-                }
-                if (r != -ETIMEDOUT || last_try)
-                        return r;
-
-                if (DEBUG_LOGGING) {
-                        char buf[FORMAT_TIMESPAN_MAX];
-
-                        log_device_debug(device,
-                                         "Device didn't initialize within %s, assuming lost event. Retriggering device.",
-                                         format_timespan(buf, sizeof(buf), usec_sub_unsigned(now(CLOCK_MONOTONIC), start), 0));
-                }
-
-                r = sd_device_trigger(device, SD_DEVICE_CHANGE);
-                if (r < 0)
-                        return r;
-        }
-}
 #endif
 
-#define DEVICE_TIMEOUT_USEC (45 * USEC_PER_SEC)
+#if HAVE_BLKID
+static int dissected_image_new(const char *path, DissectedImage **ret) {
+        _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
+        _cleanup_free_ char *name = NULL;
+        int r;
+
+        assert(ret);
+
+        if (path) {
+                _cleanup_free_ char *filename = NULL;
+
+                r = path_extract_filename(path, &filename);
+                if (r < 0)
+                        return r;
+
+                r = raw_strip_suffixes(filename, &name);
+                if (r < 0)
+                        return r;
+
+                if (!image_name_is_valid(name)) {
+                        log_debug("Image name %s is not valid, ignoring.", strna(name));
+                        name = mfree(name);
+                }
+        }
+
+        m = new(DissectedImage, 1);
+        if (!m)
+                return -ENOMEM;
+
+        *m = (DissectedImage) {
+                .has_init_system = -1,
+                .image_name = TAKE_PTR(name),
+        };
+
+        for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++)
+                m->partitions[i] = DISSECTED_PARTITION_NULL;
+
+        *ret = TAKE_PTR(m);
+        return 0;
+}
+#endif
 
 static void dissected_partition_done(DissectedPartition *p) {
         assert(p);
@@ -577,47 +415,156 @@
         free(p->decrypted_fstype);
         free(p->decrypted_node);
         free(p->mount_options);
+        safe_close(p->mount_node_fd);
 
-        *p = (DissectedPartition) {
-                .partno = -1,
-                .architecture = -1
-        };
+        *p = DISSECTED_PARTITION_NULL;
 }
 
-int dissect_image(
+#if HAVE_BLKID
+static int make_partition_devname(
+                const char *whole_devname,
+                uint64_t diskseq,
+                int nr,
+                DissectImageFlags flags,
+                char **ret) {
+
+        _cleanup_free_ char *s = NULL;
+        int r;
+
+        assert(whole_devname);
+        assert(nr != 0); /* zero is not a valid partition nr */
+        assert(ret);
+
+        if (!FLAGS_SET(flags, DISSECT_IMAGE_DISKSEQ_DEVNODE) || diskseq == 0) {
+
+                /* Given a whole block device node name (e.g. /dev/sda or /dev/loop7) generate a partition
+                 * device name (e.g. /dev/sda7 or /dev/loop7p5). The rule the kernel uses is simple: if whole
+                 * block device node name ends in a digit, then suffix a 'p', followed by the partition
+                 * number. Otherwise, just suffix the partition number without any 'p'. */
+
+                if (nr < 0) { /* whole disk? */
+                        s = strdup(whole_devname);
+                        if (!s)
+                                return -ENOMEM;
+                } else {
+                        size_t l = strlen(whole_devname);
+                        if (l < 1) /* underflow check for the subtraction below */
+                                return -EINVAL;
+
+                        bool need_p = ascii_isdigit(whole_devname[l-1]); /* Last char a digit? */
+
+                        if (asprintf(&s, "%s%s%i", whole_devname, need_p ? "p" : "", nr) < 0)
+                                return -ENOMEM;
+                }
+        } else {
+                if (nr < 0) /* whole disk? */
+                        r = asprintf(&s, "/dev/disk/by-diskseq/%" PRIu64, diskseq);
+                else
+                        r = asprintf(&s, "/dev/disk/by-diskseq/%" PRIu64 "-part%i", diskseq, nr);
+                if (r < 0)
+                        return -ENOMEM;
+        }
+
+        *ret = TAKE_PTR(s);
+        return 0;
+}
+
+static int open_partition(
+                const char *node,
+                bool is_partition,
+                const LoopDevice *loop) {
+
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        dev_t devnum;
+        int r;
+
+        assert(node);
+        assert(loop);
+
+        fd = open(node, O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
+        if (fd < 0)
+                return -errno;
+
+        /* Check if the block device is a child of (or equivalent to) the originally provided one. */
+        r = block_device_new_from_fd(fd, is_partition ? BLOCK_DEVICE_LOOKUP_WHOLE_DISK : 0, &dev);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_devnum(dev, &devnum);
+        if (r < 0)
+                return r;
+
+        if (loop->devno != devnum)
+                return -ENXIO;
+
+        /* Also check diskseq. */
+        if (loop->diskseq != 0) {
+                uint64_t diskseq;
+
+                r = fd_get_diskseq(fd, &diskseq);
+                if (r < 0)
+                        return r;
+
+                if (loop->diskseq != diskseq)
+                        return -ENXIO;
+        }
+
+        log_debug("Opened %s (fd=%i, whole_block_devnum=" DEVNUM_FORMAT_STR ", diskseq=%" PRIu64 ").",
+                  node, fd, DEVNUM_FORMAT_VAL(loop->devno), loop->diskseq);
+        return TAKE_FD(fd);
+}
+
+static int compare_arch(Architecture a, Architecture b) {
+        if (a == b)
+                return 0;
+
+        if (a == native_architecture())
+                return 1;
+
+        if (b == native_architecture())
+                return -1;
+
+#ifdef ARCHITECTURE_SECONDARY
+        if (a == ARCHITECTURE_SECONDARY)
+                return 1;
+
+        if (b == ARCHITECTURE_SECONDARY)
+                return -1;
+#endif
+
+        return 0;
+}
+
+static int dissect_image(
+                DissectedImage *m,
                 int fd,
+                const char *devname,
                 const VeritySettings *verity,
                 const MountOptions *mount_options,
-                uint64_t uevent_seqnum_not_before,
-                usec_t timestamp_not_before,
-                DissectImageFlags flags,
-                DissectedImage **ret) {
+                DissectImageFlags flags) {
 
-#if HAVE_BLKID
-#ifdef GPT_ROOT_NATIVE
         sd_id128_t root_uuid = SD_ID128_NULL, root_verity_uuid = SD_ID128_NULL;
-#endif
-#ifdef GPT_USR_NATIVE
         sd_id128_t usr_uuid = SD_ID128_NULL, usr_verity_uuid = SD_ID128_NULL;
-#endif
         bool is_gpt, is_mbr, multiple_generic = false,
                 generic_rw = false,  /* initialize to appease gcc */
                 generic_growfs = false;
-        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
-        _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
         _cleanup_(blkid_free_probep) blkid_probe b = NULL;
         _cleanup_free_ char *generic_node = NULL;
         sd_id128_t generic_uuid = SD_ID128_NULL;
-        const char *pttype = NULL, *sysname = NULL;
+        const char *pttype = NULL, *sptuuid = NULL;
         blkid_partlist pl;
         int r, generic_nr = -1, n_partitions;
-        struct stat st;
-        usec_t deadline;
 
+        assert(m);
         assert(fd >= 0);
-        assert(ret);
+        assert(devname);
+        assert(!verity || verity->designator < 0 || IN_SET(verity->designator, PARTITION_ROOT, PARTITION_USR));
         assert(!verity || verity->root_hash || verity->root_hash_size == 0);
+        assert(!verity || verity->root_hash_sig || verity->root_hash_sig_size == 0);
+        assert(!verity || (verity->root_hash || !verity->root_hash_sig));
         assert(!((flags & DISSECT_IMAGE_GPT_ONLY) && (flags & DISSECT_IMAGE_NO_PARTITION_TABLE)));
+        assert(m->sector_size > 0);
 
         /* Probes a disk image, and returns information about what it found in *ret.
          *
@@ -626,6 +573,8 @@
          * Returns -ENXIO if we couldn't find any partition suitable as root or /usr partition
          * Returns -ENOTUNIQ if we only found multiple generic partitions and thus don't know what to do with that */
 
+        uint64_t diskseq = m->loop ? m->loop->diskseq : 0;
+
         if (verity && verity->root_hash) {
                 sd_id128_t fsuuid, vuuid;
 
@@ -646,46 +595,13 @@
 
                 /* If the verity data declares it's for the /usr partition, then search for that, in all
                  * other cases assume it's for the root partition. */
-#ifdef GPT_USR_NATIVE
                 if (verity->designator == PARTITION_USR) {
                         usr_uuid = fsuuid;
                         usr_verity_uuid = vuuid;
                 } else {
-#endif
-#ifdef GPT_ROOT_NATIVE
                         root_uuid = fsuuid;
                         root_verity_uuid = vuuid;
-#endif
-#ifdef GPT_USR_NATIVE
                 }
-#endif
-        }
-
-        if (fstat(fd, &st) < 0)
-                return -errno;
-
-        if (!S_ISBLK(st.st_mode))
-                return -ENOTBLK;
-
-        r = sd_device_new_from_stat_rdev(&d, &st);
-        if (r < 0)
-                return r;
-
-        if (!FLAGS_SET(flags, DISSECT_IMAGE_NO_UDEV)) {
-                _cleanup_(sd_device_unrefp) sd_device *initialized = NULL;
-
-                /* If udev support is enabled, then let's wait for the device to be initialized before we doing anything. */
-
-                r = device_wait_for_initialization_harder(
-                                d,
-                                "block",
-                                usec_add(now(CLOCK_MONOTONIC), DEVICE_TIMEOUT_USEC),
-                                &initialized);
-                if (r < 0)
-                        return r;
-
-                sd_device_unref(d);
-                d = TAKE_PTR(initialized);
         }
 
         b = blkid_new_probe();
@@ -697,10 +613,15 @@
         if (r != 0)
                 return errno_or_else(ENOMEM);
 
+        errno = 0;
+        r = blkid_probe_set_sectorsize(b, m->sector_size);
+        if (r != 0)
+                return errno_or_else(EIO);
+
         if ((flags & DISSECT_IMAGE_GPT_ONLY) == 0) {
                 /* Look for file system superblocks, unless we only shall look for GPT partition tables */
                 blkid_probe_enable_superblocks(b, 1);
-                blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE|BLKID_SUBLKS_USAGE);
+                blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE|BLKID_SUBLKS_USAGE|BLKID_SUBLKS_UUID);
         }
 
         blkid_probe_enable_partitions(b, 1);
@@ -708,42 +629,12 @@
 
         errno = 0;
         r = blkid_do_safeprobe(b);
-        if (IN_SET(r, -2, 1))
-                return log_debug_errno(SYNTHETIC_ERRNO(ENOPKG), "Failed to identify any partition table.");
-        if (r != 0)
+        if (r == _BLKID_SAFEPROBE_ERROR)
                 return errno_or_else(EIO);
+        if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND))
+                return log_debug_errno(SYNTHETIC_ERRNO(ENOPKG), "Failed to identify any partition table.");
 
-        m = new0(DissectedImage, 1);
-        if (!m)
-                return -ENOMEM;
-
-        r = sd_device_get_sysname(d, &sysname);
-        if (r < 0)
-                return log_debug_errno(r, "Failed to get device sysname: %m");
-        if (startswith(sysname, "loop")) {
-                _cleanup_free_ char *name_stripped = NULL;
-                const char *full_path;
-
-                r = sd_device_get_sysattr_value(d, "loop/backing_file", &full_path);
-                if (r < 0)
-                        log_debug_errno(r, "Failed to lookup image name via loop device backing file sysattr, ignoring: %m");
-                else {
-                        r = raw_strip_suffixes(basename(full_path), &name_stripped);
-                        if (r < 0)
-                                return r;
-                }
-
-                free_and_replace(m->image_name, name_stripped);
-        } else {
-                r = free_and_strdup(&m->image_name, sysname);
-                if (r < 0)
-                        return r;
-        }
-
-        if (!image_name_is_valid(m->image_name)) {
-                log_debug("Image name %s is not valid, ignoring", strempty(m->image_name));
-                m->image_name = mfree(m->image_name);
-        }
+        assert(r == _BLKID_SAFEPROBE_FOUND);
 
         if ((!(flags & DISSECT_IMAGE_GPT_ONLY) &&
             (flags & DISSECT_IMAGE_GENERIC_ROOT)) ||
@@ -754,11 +645,20 @@
 
                 (void) blkid_probe_lookup_value(b, "USAGE", &usage, NULL);
                 if (STRPTR_IN_SET(usage, "filesystem", "crypto")) {
-                        const char *fstype = NULL, *options = NULL, *devname = NULL;
                         _cleanup_free_ char *t = NULL, *n = NULL, *o = NULL;
+                        const char *fstype = NULL, *options = NULL, *suuid = NULL;
+                        _cleanup_close_ int mount_node_fd = -EBADF;
+                        sd_id128_t uuid = SD_ID128_NULL;
+
+                        if (FLAGS_SET(flags, DISSECT_IMAGE_PIN_PARTITION_DEVICES)) {
+                                mount_node_fd = open_partition(devname, /* is_partition = */ false, m->loop);
+                                if (mount_node_fd < 0)
+                                        return mount_node_fd;
+                        }
 
                         /* OK, we have found a file system, that's our root partition then. */
                         (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL);
+                        (void) blkid_probe_lookup_value(b, "UUID", &suuid, NULL);
 
                         if (fstype) {
                                 t = strdup(fstype);
@@ -766,17 +666,29 @@
                                         return -ENOMEM;
                         }
 
-                        r = sd_device_get_devname(d, &devname);
+                        if (suuid) {
+                                /* blkid will return FAT's serial number as UUID, hence it is quite possible
+                                 * that parsing this will fail. We'll ignore the ID, since it's just too
+                                 * short to be useful as tru identifier. */
+                                r = sd_id128_from_string(suuid, &uuid);
+                                if (r < 0)
+                                        log_debug_errno(r, "Failed to parse file system UUID '%s', ignoring: %m", suuid);
+                        }
+
+                        r = make_partition_devname(devname, diskseq, -1, flags, &n);
                         if (r < 0)
                                 return r;
 
-                        n = strdup(devname);
-                        if (!n)
-                                return -ENOMEM;
-
                         m->single_file_system = true;
-                        m->verity = verity && verity->root_hash && verity->data_path && (verity->designator < 0 || verity->designator == PARTITION_ROOT);
-                        m->can_verity = verity && verity->data_path;
+                        m->encrypted = streq_ptr(fstype, "crypto_LUKS");
+
+                        m->has_verity = verity && verity->data_path;
+                        m->verity_ready = verity_settings_data_covers(verity, PARTITION_ROOT);
+
+                        m->has_verity_sig = false; /* signature not embedded, must be specified */
+                        m->verity_sig_ready = m->verity_ready && verity->root_hash_sig;
+
+                        m->image_uuid = uuid;
 
                         options = mount_options_from_designator(mount_options, PARTITION_ROOT);
                         if (options) {
@@ -787,17 +699,17 @@
 
                         m->partitions[PARTITION_ROOT] = (DissectedPartition) {
                                 .found = true,
-                                .rw = !m->verity,
+                                .rw = !m->verity_ready && !fstype_is_ro(fstype),
                                 .partno = -1,
                                 .architecture = _ARCHITECTURE_INVALID,
                                 .fstype = TAKE_PTR(t),
                                 .node = TAKE_PTR(n),
                                 .mount_options = TAKE_PTR(o),
+                                .mount_node_fd = TAKE_FD(mount_node_fd),
+                                .offset = 0,
+                                .size = UINT64_MAX,
                         };
 
-                        m->encrypted = streq_ptr(fstype, "crypto_LUKS");
-
-                        *ret = TAKE_PTR(m);
                         return 0;
                 }
         }
@@ -812,13 +724,26 @@
         if (!is_gpt && ((flags & DISSECT_IMAGE_GPT_ONLY) || !is_mbr))
                 return -ENOPKG;
 
-        /* Safety check: refuse block devices that carry a partition table but for which the kernel doesn't
-         * do partition scanning. */
-        r = blockdev_partscan_enabled(fd);
-        if (r < 0)
-                return r;
-        if (r == 0)
-                return -EPROTONOSUPPORT;
+        /* We support external verity data partitions only if the image has no partition table */
+        if (verity && verity->data_path)
+                return -EBADR;
+
+        if (FLAGS_SET(flags, DISSECT_IMAGE_ADD_PARTITION_DEVICES)) {
+                /* Safety check: refuse block devices that carry a partition table but for which the kernel doesn't
+                 * do partition scanning. */
+                r = blockdev_partscan_enabled(fd);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return -EPROTONOSUPPORT;
+        }
+
+        (void) blkid_probe_lookup_value(b, "PTUUID", &sptuuid, NULL);
+        if (sptuuid) {
+                r = sd_id128_from_string(sptuuid, &m->image_uuid);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to parse partition table UUID '%s', ignoring: %m", sptuuid);
+        }
 
         errno = 0;
         pl = blkid_probe_get_partitions(b);
@@ -830,12 +755,11 @@
         if (n_partitions < 0)
                 return errno_or_else(EIO);
 
-        deadline = usec_add(now(CLOCK_MONOTONIC), DEVICE_TIMEOUT_USEC);
         for (int i = 0; i < n_partitions; i++) {
-                _cleanup_(sd_device_unrefp) sd_device *q = NULL;
+                _cleanup_free_ char *node = NULL;
                 unsigned long long pflags;
+                blkid_loff_t start, size;
                 blkid_partition pp;
-                const char *node;
                 int nr;
 
                 errno = 0;
@@ -843,14 +767,6 @@
                 if (!pp)
                         return errno_or_else(EIO);
 
-                r = wait_for_partition_device(d, pp, deadline, uevent_seqnum_not_before, timestamp_not_before, flags, &q);
-                if (r < 0)
-                        return r;
-
-                r = sd_device_get_devname(q, &node);
-                if (r < 0)
-                        return r;
-
                 pflags = blkid_partition_get_flags(pp);
 
                 errno = 0;
@@ -858,262 +774,246 @@
                 if (nr < 0)
                         return errno_or_else(EIO);
 
+                errno = 0;
+                start = blkid_partition_get_start(pp);
+                if (start < 0)
+                        return errno_or_else(EIO);
+
+                assert((uint64_t) start < UINT64_MAX/512);
+
+                errno = 0;
+                size = blkid_partition_get_size(pp);
+                if (size < 0)
+                        return errno_or_else(EIO);
+
+                assert((uint64_t) size < UINT64_MAX/512);
+
+                /* While probing we need the non-diskseq device node name to access the thing, hence mask off
+                 * DISSECT_IMAGE_DISKSEQ_DEVNODE. */
+                r = make_partition_devname(devname, diskseq, nr, flags & ~DISSECT_IMAGE_DISKSEQ_DEVNODE, &node);
+                if (r < 0)
+                        return r;
+
+                /* So here's the thing: after the main ("whole") block device popped up it might take a while
+                 * before the kernel fully probed the partition table. Waiting for that to finish is icky in
+                 * userspace. So here's what we do instead. We issue the BLKPG_ADD_PARTITION ioctl to add the
+                 * partition ourselves, racing against the kernel. Good thing is: if this call fails with
+                 * EBUSY then the kernel was quicker than us, and that's totally OK, the outcome is good for
+                 * us: the device node will exist. If OTOH our call was successful we won the race. Which is
+                 * also good as the outcome is the same: the partition block device exists, and we can use
+                 * it.
+                 *
+                 * Kernel returns EBUSY if there's already a partition by that number or an overlapping
+                 * partition already existent. */
+
+                if (FLAGS_SET(flags, DISSECT_IMAGE_ADD_PARTITION_DEVICES)) {
+                        r = block_device_add_partition(fd, node, nr, (uint64_t) start * 512, (uint64_t) size * 512);
+                        if (r < 0) {
+                                if (r != -EBUSY)
+                                        return log_debug_errno(r, "BLKPG_ADD_PARTITION failed: %m");
+
+                                log_debug_errno(r, "Kernel was quicker than us in adding partition %i.", nr);
+                        } else
+                                log_debug("We were quicker than kernel in adding partition %i.", nr);
+                }
+
                 if (is_gpt) {
-                        PartitionDesignator designator = _PARTITION_DESIGNATOR_INVALID;
-                        int architecture = _ARCHITECTURE_INVALID;
-                        const char *stype, *sid, *fstype = NULL, *label;
+                        const char *fstype = NULL, *label;
                         sd_id128_t type_id, id;
+                        GptPartitionType type;
                         bool rw = true, growfs = false;
 
-                        sid = blkid_partition_get_uuid(pp);
-                        if (!sid)
+                        r = blkid_partition_get_uuid_id128(pp, &id);
+                        if (r < 0) {
+                                log_debug_errno(r, "Failed to read partition UUID, ignoring: %m");
                                 continue;
-                        if (sd_id128_from_string(sid, &id) < 0)
-                                continue;
+                        }
 
-                        stype = blkid_partition_get_type_string(pp);
-                        if (!stype)
+                        r = blkid_partition_get_type_id128(pp, &type_id);
+                        if (r < 0) {
+                                log_debug_errno(r, "Failed to read partition type UUID, ignoring: %m");
                                 continue;
-                        if (sd_id128_from_string(stype, &type_id) < 0)
-                                continue;
+                        }
+
+                        type = gpt_partition_type_from_uuid(type_id);
 
                         label = blkid_partition_get_name(pp); /* libblkid returns NULL here if empty */
 
-                        if (sd_id128_equal(type_id, GPT_HOME)) {
+                        if (IN_SET(type.designator,
+                                   PARTITION_HOME,
+                                   PARTITION_SRV,
+                                   PARTITION_XBOOTLDR,
+                                   PARTITION_TMP)) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY | SD_GPT_FLAG_GROWFS);
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
-                                designator = PARTITION_HOME;
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
+                                rw = !(pflags & SD_GPT_FLAG_READ_ONLY);
+                                growfs = FLAGS_SET(pflags, SD_GPT_FLAG_GROWFS);
 
-                        } else if (sd_id128_equal(type_id, GPT_SRV)) {
+                        } else if (type.designator == PARTITION_ESP) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
-
-                                if (pflags & GPT_FLAG_NO_AUTO)
-                                        continue;
-
-                                designator = PARTITION_SRV;
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
-
-                        } else if (sd_id128_equal(type_id, GPT_ESP)) {
-
-                                /* Note that we don't check the GPT_FLAG_NO_AUTO flag for the ESP, as it is
-                                 * not defined there. We instead check the GPT_FLAG_NO_BLOCK_IO_PROTOCOL, as
+                                /* Note that we don't check the SD_GPT_FLAG_NO_AUTO flag for the ESP, as it is
+                                 * not defined there. We instead check the SD_GPT_FLAG_NO_BLOCK_IO_PROTOCOL, as
                                  * recommended by the UEFI spec (See "12.3.3 Number and Location of System
                                  * Partitions"). */
 
-                                if (pflags & GPT_FLAG_NO_BLOCK_IO_PROTOCOL)
+                                if (pflags & SD_GPT_FLAG_NO_BLOCK_IO_PROTOCOL)
                                         continue;
 
-                                designator = PARTITION_ESP;
                                 fstype = "vfat";
 
-                        } else if (sd_id128_equal(type_id, GPT_XBOOTLDR)) {
+                        } else if (type.designator == PARTITION_ROOT) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY | SD_GPT_FLAG_GROWFS);
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
-                                        continue;
-
-                                designator = PARTITION_XBOOTLDR;
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
-                        }
-#ifdef GPT_ROOT_NATIVE
-                        else if (sd_id128_equal(type_id, GPT_ROOT_NATIVE)) {
-
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
-
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
                                 /* If a root ID is specified, ignore everything but the root id */
                                 if (!sd_id128_is_null(root_uuid) && !sd_id128_equal(root_uuid, id))
                                         continue;
 
-                                designator = PARTITION_ROOT;
-                                architecture = native_architecture();
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
+                                rw = !(pflags & SD_GPT_FLAG_READ_ONLY);
+                                growfs = FLAGS_SET(pflags, SD_GPT_FLAG_GROWFS);
 
-                        } else if (sd_id128_equal(type_id, GPT_ROOT_NATIVE_VERITY)) {
+                        } else if (type.designator == PARTITION_ROOT_VERITY) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY);
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY);
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
-                                m->can_verity = true;
+                                m->has_verity = true;
 
-                                /* Ignore verity unless a root hash is specified */
-                                if (sd_id128_is_null(root_verity_uuid) || !sd_id128_equal(root_verity_uuid, id))
+                                /* If no verity configuration is specified, then don't do verity */
+                                if (!verity)
+                                        continue;
+                                if (verity->designator >= 0 && verity->designator != PARTITION_ROOT)
                                         continue;
 
-                                designator = PARTITION_ROOT_VERITY;
+                                /* If root hash is specified, then ignore everything but the root id */
+                                if (!sd_id128_is_null(root_verity_uuid) && !sd_id128_equal(root_verity_uuid, id))
+                                        continue;
+
                                 fstype = "DM_verity_hash";
-                                architecture = native_architecture();
                                 rw = false;
-                        }
-#endif
-#ifdef GPT_ROOT_SECONDARY
-                        else if (sd_id128_equal(type_id, GPT_ROOT_SECONDARY)) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
+                        } else if (type.designator == PARTITION_ROOT_VERITY_SIG) {
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY);
+
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
-                                /* If a root ID is specified, ignore everything but the root id */
-                                if (!sd_id128_is_null(root_uuid) && !sd_id128_equal(root_uuid, id))
+                                m->has_verity_sig = true;
+
+                                if (!verity)
+                                        continue;
+                                if (verity->designator >= 0 && verity->designator != PARTITION_ROOT)
                                         continue;
 
-                                designator = PARTITION_ROOT_SECONDARY;
-                                architecture = SECONDARY_ARCHITECTURE;
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
-
-                        } else if (sd_id128_equal(type_id, GPT_ROOT_SECONDARY_VERITY)) {
-
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY);
-
-                                if (pflags & GPT_FLAG_NO_AUTO)
-                                        continue;
-
-                                m->can_verity = true;
-
-                                /* Ignore verity unless root has is specified */
-                                if (sd_id128_is_null(root_verity_uuid) || !sd_id128_equal(root_verity_uuid, id))
-                                        continue;
-
-                                designator = PARTITION_ROOT_SECONDARY_VERITY;
-                                fstype = "DM_verity_hash";
-                                architecture = SECONDARY_ARCHITECTURE;
+                                fstype = "verity_hash_signature";
                                 rw = false;
-                        }
-#endif
-#ifdef GPT_USR_NATIVE
-                        else if (sd_id128_equal(type_id, GPT_USR_NATIVE)) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
+                        } else if (type.designator == PARTITION_USR) {
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY | SD_GPT_FLAG_GROWFS);
+
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
                                 /* If a usr ID is specified, ignore everything but the usr id */
                                 if (!sd_id128_is_null(usr_uuid) && !sd_id128_equal(usr_uuid, id))
                                         continue;
 
-                                designator = PARTITION_USR;
-                                architecture = native_architecture();
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
+                                rw = !(pflags & SD_GPT_FLAG_READ_ONLY);
+                                growfs = FLAGS_SET(pflags, SD_GPT_FLAG_GROWFS);
 
-                        } else if (sd_id128_equal(type_id, GPT_USR_NATIVE_VERITY)) {
+                        } else if (type.designator == PARTITION_USR_VERITY) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY);
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY);
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
-                                m->can_verity = true;
+                                m->has_verity = true;
 
-                                /* Ignore verity unless a usr hash is specified */
-                                if (sd_id128_is_null(usr_verity_uuid) || !sd_id128_equal(usr_verity_uuid, id))
+                                if (!verity)
+                                        continue;
+                                if (verity->designator >= 0 && verity->designator != PARTITION_USR)
                                         continue;
 
-                                designator = PARTITION_USR_VERITY;
+                                /* If usr hash is specified, then ignore everything but the usr id */
+                                if (!sd_id128_is_null(usr_verity_uuid) && !sd_id128_equal(usr_verity_uuid, id))
+                                        continue;
+
                                 fstype = "DM_verity_hash";
-                                architecture = native_architecture();
                                 rw = false;
-                        }
-#endif
-#ifdef GPT_USR_SECONDARY
-                        else if (sd_id128_equal(type_id, GPT_USR_SECONDARY)) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
+                        } else if (type.designator == PARTITION_USR_VERITY_SIG) {
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY);
+
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
-                                /* If a usr ID is specified, ignore everything but the usr id */
-                                if (!sd_id128_is_null(usr_uuid) && !sd_id128_equal(usr_uuid, id))
+                                m->has_verity_sig = true;
+
+                                if (!verity)
+                                        continue;
+                                if (verity->designator >= 0 && verity->designator != PARTITION_USR)
                                         continue;
 
-                                designator = PARTITION_USR_SECONDARY;
-                                architecture = SECONDARY_ARCHITECTURE;
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
-
-                        } else if (sd_id128_equal(type_id, GPT_USR_SECONDARY_VERITY)) {
-
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY);
-
-                                if (pflags & GPT_FLAG_NO_AUTO)
-                                        continue;
-
-                                m->can_verity = true;
-
-                                /* Ignore verity unless usr has is specified */
-                                if (sd_id128_is_null(usr_verity_uuid) || !sd_id128_equal(usr_verity_uuid, id))
-                                        continue;
-
-                                designator = PARTITION_USR_SECONDARY_VERITY;
-                                fstype = "DM_verity_hash";
-                                architecture = SECONDARY_ARCHITECTURE;
+                                fstype = "verity_hash_signature";
                                 rw = false;
-                        }
-#endif
-                        else if (sd_id128_equal(type_id, GPT_SWAP)) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO);
+                        } else if (type.designator == PARTITION_SWAP) {
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                check_partition_flags(node, pflags, SD_GPT_FLAG_NO_AUTO);
+
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
-                                designator = PARTITION_SWAP;
-                                fstype = "swap";
+                                /* Note: we don't set fstype = "swap" here, because we still need to probe if
+                                 * it might be encrypted (i.e. fstype "crypt_LUKS") or unencrypted
+                                 * (i.e. fstype "swap"), and the only way to figure that out is via fstype
+                                 * probing. */
 
-                        } else if (sd_id128_equal(type_id, GPT_LINUX_GENERIC)) {
+                        /* We don't have a designator for SD_GPT_LINUX_GENERIC so check the UUID instead. */
+                        } else if (sd_id128_equal(type.uuid, SD_GPT_LINUX_GENERIC)) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY | SD_GPT_FLAG_GROWFS);
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
                                 if (generic_node)
                                         multiple_generic = true;
                                 else {
                                         generic_nr = nr;
-                                        generic_rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                        generic_growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
+                                        generic_rw = !(pflags & SD_GPT_FLAG_READ_ONLY);
+                                        generic_growfs = FLAGS_SET(pflags, SD_GPT_FLAG_GROWFS);
                                         generic_uuid = id;
-                                        generic_node = strdup(node);
-                                        if (!generic_node)
-                                                return -ENOMEM;
+                                        generic_node = TAKE_PTR(node);
                                 }
 
-                        } else if (sd_id128_equal(type_id, GPT_TMP)) {
+                        } else if (type.designator == PARTITION_VAR) {
 
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
+                                check_partition_flags(node, pflags,
+                                                      SD_GPT_FLAG_NO_AUTO | SD_GPT_FLAG_READ_ONLY | SD_GPT_FLAG_GROWFS);
 
-                                if (pflags & GPT_FLAG_NO_AUTO)
-                                        continue;
-
-                                designator = PARTITION_TMP;
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
-
-                        } else if (sd_id128_equal(type_id, GPT_VAR)) {
-
-                                check_partition_flags(node, pflags, GPT_FLAG_NO_AUTO|GPT_FLAG_READ_ONLY|GPT_FLAG_GROWFS);
-
-                                if (pflags & GPT_FLAG_NO_AUTO)
+                                if (pflags & SD_GPT_FLAG_NO_AUTO)
                                         continue;
 
                                 if (!FLAGS_SET(flags, DISSECT_IMAGE_RELAX_VAR_CHECK)) {
@@ -1127,72 +1027,88 @@
                                          * /etc/machine-id we can securely bind the partition to the
                                          * installation. */
 
-                                        r = sd_id128_get_machine_app_specific(GPT_VAR, &var_uuid);
+                                        r = sd_id128_get_machine_app_specific(SD_GPT_VAR, &var_uuid);
                                         if (r < 0)
                                                 return r;
 
                                         if (!sd_id128_equal(var_uuid, id)) {
-                                                log_debug("Found a /var/ partition, but its UUID didn't match our expectations, ignoring.");
+                                                log_debug("Found a /var/ partition, but its UUID didn't match our expectations "
+                                                          "(found: " SD_ID128_UUID_FORMAT_STR ", expected: " SD_ID128_UUID_FORMAT_STR "), ignoring.",
+                                                          SD_ID128_FORMAT_VAL(id), SD_ID128_FORMAT_VAL(var_uuid));
                                                 continue;
                                         }
                                 }
 
-                                designator = PARTITION_VAR;
-                                rw = !(pflags & GPT_FLAG_READ_ONLY);
-                                growfs = FLAGS_SET(pflags, GPT_FLAG_GROWFS);
+                                rw = !(pflags & SD_GPT_FLAG_READ_ONLY);
+                                growfs = FLAGS_SET(pflags, SD_GPT_FLAG_GROWFS);
                         }
 
-                        if (designator != _PARTITION_DESIGNATOR_INVALID) {
-                                _cleanup_free_ char *t = NULL, *n = NULL, *o = NULL, *l = NULL;
+                        if (type.designator != _PARTITION_DESIGNATOR_INVALID) {
+                                _cleanup_free_ char *t = NULL, *o = NULL, *l = NULL, *n = NULL;
+                                _cleanup_close_ int mount_node_fd = -EBADF;
                                 const char *options = NULL;
 
-                                if (m->partitions[designator].found) {
+                                if (m->partitions[type.designator].found) {
                                         /* For most partition types the first one we see wins. Except for the
                                          * rootfs and /usr, where we do a version compare of the label, and
                                          * let the newest version win. This permits a simple A/B versioning
                                          * scheme in OS images. */
 
-                                        if (!PARTITION_DESIGNATOR_VERSIONED(designator) ||
-                                            strverscmp_improved(m->partitions[designator].label, label) >= 0)
+                                        if (compare_arch(type.arch, m->partitions[type.designator].architecture) <= 0)
                                                 continue;
 
-                                        dissected_partition_done(m->partitions + designator);
+                                        if (!partition_designator_is_versioned(type.designator) ||
+                                            strverscmp_improved(m->partitions[type.designator].label, label) >= 0)
+                                                continue;
+
+                                        dissected_partition_done(m->partitions + type.designator);
                                 }
 
+                                if (FLAGS_SET(flags, DISSECT_IMAGE_PIN_PARTITION_DEVICES) &&
+                                    type.designator != PARTITION_SWAP) {
+                                        mount_node_fd = open_partition(node, /* is_partition = */ true, m->loop);
+                                        if (mount_node_fd < 0)
+                                                return mount_node_fd;
+                                }
+
+                                r = make_partition_devname(devname, diskseq, nr, flags, &n);
+                                if (r < 0)
+                                        return r;
+
                                 if (fstype) {
                                         t = strdup(fstype);
                                         if (!t)
                                                 return -ENOMEM;
                                 }
 
-                                n = strdup(node);
-                                if (!n)
-                                        return -ENOMEM;
-
                                 if (label) {
                                         l = strdup(label);
                                         if (!l)
                                                 return -ENOMEM;
                                 }
 
-                                options = mount_options_from_designator(mount_options, designator);
+                                options = mount_options_from_designator(mount_options, type.designator);
                                 if (options) {
                                         o = strdup(options);
                                         if (!o)
                                                 return -ENOMEM;
                                 }
 
-                                m->partitions[designator] = (DissectedPartition) {
+                                m->partitions[type.designator] = (DissectedPartition) {
                                         .found = true,
                                         .partno = nr,
                                         .rw = rw,
                                         .growfs = growfs,
-                                        .architecture = architecture,
+                                        .architecture = type.arch,
                                         .node = TAKE_PTR(n),
                                         .fstype = TAKE_PTR(t),
                                         .label = TAKE_PTR(l),
                                         .uuid = id,
                                         .mount_options = TAKE_PTR(o),
+                                        .mount_node_fd = TAKE_FD(mount_node_fd),
+                                        .offset = (uint64_t) start * 512,
+                                        .size = (uint64_t) size * 512,
+                                        .gpt_flags = pflags,
                                 };
                         }
 
@@ -1211,29 +1127,32 @@
                                         generic_nr = nr;
                                         generic_rw = true;
                                         generic_growfs = false;
-                                        generic_node = strdup(node);
-                                        if (!generic_node)
-                                                return -ENOMEM;
+                                        generic_node = TAKE_PTR(node);
                                 }
 
                                 break;
 
                         case 0xEA: { /* Boot Loader Spec extended $BOOT partition */
-                                _cleanup_free_ char *n = NULL, *o = NULL;
+                                _cleanup_close_ int mount_node_fd = -EBADF;
+                                _cleanup_free_ char *o = NULL, *n = NULL;
                                 sd_id128_t id = SD_ID128_NULL;
-                                const char *sid, *options = NULL;
+                                const char *options = NULL;
 
                                 /* First one wins */
                                 if (m->partitions[PARTITION_XBOOTLDR].found)
                                         continue;
 
-                                sid = blkid_partition_get_uuid(pp);
-                                if (sid)
-                                        (void) sd_id128_from_string(sid, &id);
+                                if (FLAGS_SET(flags, DISSECT_IMAGE_PIN_PARTITION_DEVICES)) {
+                                        mount_node_fd = open_partition(node, /* is_partition = */ true, m->loop);
+                                        if (mount_node_fd < 0)
+                                                return mount_node_fd;
+                                }
 
-                                n = strdup(node);
-                                if (!n)
-                                        return -ENOMEM;
+                                (void) blkid_partition_get_uuid_id128(pp, &id);
+
+                                r = make_partition_devname(devname, diskseq, nr, flags, &n);
+                                if (r < 0)
+                                        return r;
 
                                 options = mount_options_from_designator(mount_options, PARTITION_XBOOTLDR);
                                 if (options) {
@@ -1251,6 +1170,9 @@
                                         .node = TAKE_PTR(n),
                                         .uuid = id,
                                         .mount_options = TAKE_PTR(o),
+                                        .mount_node_fd = TAKE_FD(mount_node_fd),
+                                        .offset = (uint64_t) start * 512,
+                                        .size = (uint64_t) size * 512,
                                 };
 
                                 break;
@@ -1258,59 +1180,38 @@
                 }
         }
 
-        if (m->partitions[PARTITION_ROOT].found) {
-                /* If we found the primary arch, then invalidate the secondary arch to avoid any ambiguities,
-                 * since we never want to mount the secondary arch in this case. */
-                m->partitions[PARTITION_ROOT_SECONDARY].found = false;
-                m->partitions[PARTITION_ROOT_SECONDARY_VERITY].found = false;
-                m->partitions[PARTITION_USR_SECONDARY].found = false;
-                m->partitions[PARTITION_USR_SECONDARY_VERITY].found = false;
+        if (!m->partitions[PARTITION_ROOT].found &&
+                (m->partitions[PARTITION_ROOT_VERITY].found ||
+                 m->partitions[PARTITION_ROOT_VERITY_SIG].found))
+                        return -EADDRNOTAVAIL; /* Verity found but no matching rootfs? Something is off, refuse. */
 
-        } else if (m->partitions[PARTITION_ROOT_VERITY].found)
-                return -EADDRNOTAVAIL; /* Verity found but no matching rootfs? Something is off, refuse. */
+        /* Hmm, we found a signature partition but no Verity data? Something is off. */
+        if (m->partitions[PARTITION_ROOT_VERITY_SIG].found && !m->partitions[PARTITION_ROOT_VERITY].found)
+                return -EADDRNOTAVAIL;
 
-        else if (m->partitions[PARTITION_ROOT_SECONDARY].found) {
+        if (!m->partitions[PARTITION_USR].found &&
+                (m->partitions[PARTITION_USR_VERITY].found ||
+                 m->partitions[PARTITION_USR_VERITY_SIG].found))
+                        return -EADDRNOTAVAIL; /* as above */
 
-                /* No root partition found but there's one for the secondary architecture? Then upgrade
-                 * secondary arch to first */
+        /* as above */
+        if (m->partitions[PARTITION_USR_VERITY_SIG].found && !m->partitions[PARTITION_USR_VERITY].found)
+                return -EADDRNOTAVAIL;
 
-                m->partitions[PARTITION_ROOT] = m->partitions[PARTITION_ROOT_SECONDARY];
-                zero(m->partitions[PARTITION_ROOT_SECONDARY]);
-                m->partitions[PARTITION_ROOT_VERITY] = m->partitions[PARTITION_ROOT_SECONDARY_VERITY];
-                zero(m->partitions[PARTITION_ROOT_SECONDARY_VERITY]);
+        /* If root and /usr are combined then insist that the architecture matches */
+        if (m->partitions[PARTITION_ROOT].found &&
+            m->partitions[PARTITION_USR].found &&
+            (m->partitions[PARTITION_ROOT].architecture >= 0 &&
+             m->partitions[PARTITION_USR].architecture >= 0 &&
+             m->partitions[PARTITION_ROOT].architecture != m->partitions[PARTITION_USR].architecture))
+                return -EADDRNOTAVAIL;
 
-                m->partitions[PARTITION_USR] = m->partitions[PARTITION_USR_SECONDARY];
-                zero(m->partitions[PARTITION_USR_SECONDARY]);
-                m->partitions[PARTITION_USR_VERITY] = m->partitions[PARTITION_USR_SECONDARY_VERITY];
-                zero(m->partitions[PARTITION_USR_SECONDARY_VERITY]);
+        if (!m->partitions[PARTITION_ROOT].found &&
+            !m->partitions[PARTITION_USR].found &&
+            (flags & DISSECT_IMAGE_GENERIC_ROOT) &&
+            (!verity || !verity->root_hash || verity->designator != PARTITION_USR)) {
 
-        } else if (m->partitions[PARTITION_ROOT_SECONDARY_VERITY].found)
-                return -EADDRNOTAVAIL; /* as above */
-
-        else if (m->partitions[PARTITION_USR].found) {
-
-                /* Invalidate secondary arch /usr/ if we found the primary arch */
-                m->partitions[PARTITION_USR_SECONDARY].found = false;
-                m->partitions[PARTITION_USR_SECONDARY_VERITY].found = false;
-
-        } else if (m->partitions[PARTITION_USR_VERITY].found)
-                return -EADDRNOTAVAIL; /* as above */
-
-        else if (m->partitions[PARTITION_USR_SECONDARY].found) {
-
-                /* Upgrade secondary arch to primary */
-                m->partitions[PARTITION_USR] = m->partitions[PARTITION_USR_SECONDARY];
-                zero(m->partitions[PARTITION_USR_SECONDARY]);
-                m->partitions[PARTITION_USR_VERITY] = m->partitions[PARTITION_USR_SECONDARY_VERITY];
-                zero(m->partitions[PARTITION_USR_SECONDARY_VERITY]);
-
-        } else if (m->partitions[PARTITION_USR_SECONDARY_VERITY].found)
-                return -EADDRNOTAVAIL; /* as above */
-
-        else if ((flags & DISSECT_IMAGE_GENERIC_ROOT) &&
-                 (!verity || !verity->root_hash)) {
-
-                /* OK, we found nothing usable, then check if there's a single generic one distro, and use
+                /* OK, we found nothing usable, then check if there's a single generic partition, and use
                  * that. If the root hash was set however, then we won't fall back to a generic node, because
                  * the root hash decides. */
 
@@ -1321,9 +1222,20 @@
 
                 /* If we didn't find a generic node, then we can't fix this up either */
                 if (generic_node) {
-                        _cleanup_free_ char *o = NULL;
+                        _cleanup_close_ int mount_node_fd = -EBADF;
+                        _cleanup_free_ char *o = NULL, *n = NULL;
                         const char *options;
 
+                        if (FLAGS_SET(flags, DISSECT_IMAGE_PIN_PARTITION_DEVICES)) {
+                                mount_node_fd = open_partition(generic_node, /* is_partition = */ true, m->loop);
+                                if (mount_node_fd < 0)
+                                        return mount_node_fd;
+                        }
+
+                        r = make_partition_devname(devname, diskseq, generic_nr, flags, &n);
+                        if (r < 0)
+                                return r;
+
                         options = mount_options_from_designator(mount_options, PARTITION_ROOT);
                         if (options) {
                                 o = strdup(options);
@@ -1338,9 +1250,12 @@
                                 .growfs = generic_growfs,
                                 .partno = generic_nr,
                                 .architecture = _ARCHITECTURE_INVALID,
-                                .node = TAKE_PTR(generic_node),
+                                .node = TAKE_PTR(n),
                                 .uuid = generic_uuid,
                                 .mount_options = TAKE_PTR(o),
+                                .mount_node_fd = TAKE_FD(mount_node_fd),
+                                .offset = UINT64_MAX,
+                                .size = UINT64_MAX,
                         };
                 }
         }
@@ -1350,58 +1265,101 @@
             !(m->partitions[PARTITION_ROOT].found || (m->partitions[PARTITION_USR].found && FLAGS_SET(flags, DISSECT_IMAGE_USR_NO_ROOT))))
                 return -ENXIO;
 
-        /* Refuse if we found a verity partition for /usr but no matching file system partition */
-        if (!m->partitions[PARTITION_USR].found && m->partitions[PARTITION_USR_VERITY].found)
-                return -EADDRNOTAVAIL;
+        if (m->partitions[PARTITION_ROOT_VERITY].found) {
+                /* We only support one verity partition per image, i.e. can't do for both /usr and root fs */
+                if (m->partitions[PARTITION_USR_VERITY].found)
+                        return -ENOTUNIQ;
 
-        /* Combinations of verity /usr with verity-less root is OK, but the reverse is not */
-        if (m->partitions[PARTITION_ROOT_VERITY].found && m->partitions[PARTITION_USR].found && !m->partitions[PARTITION_USR_VERITY].found)
-                return -EADDRNOTAVAIL;
+                /* We don't support verity enabled root with a split out /usr. Neither with nor without
+                 * verity there. (Note that we do support verity-less root with verity-full /usr, though.) */
+                if (m->partitions[PARTITION_USR].found)
+                        return -EADDRNOTAVAIL;
+        }
 
-        if (verity && verity->root_hash) {
-                if (verity->designator < 0 || verity->designator == PARTITION_ROOT) {
-                        if (!m->partitions[PARTITION_ROOT_VERITY].found || !m->partitions[PARTITION_ROOT].found)
-                                return -EADDRNOTAVAIL;
+        if (verity) {
+                /* If a verity designator is specified, then insist that the matching partition exists */
+                if (verity->designator >= 0 && !m->partitions[verity->designator].found)
+                        return -EADDRNOTAVAIL;
 
-                        /* If we found a verity setup, then the root partition is necessarily read-only. */
-                        m->partitions[PARTITION_ROOT].rw = false;
-                        m->verity = true;
-                }
+                bool have_verity_sig_partition =
+                        m->partitions[verity->designator == PARTITION_USR ? PARTITION_USR_VERITY_SIG : PARTITION_ROOT_VERITY_SIG].found;
 
-                if (verity->designator == PARTITION_USR) {
-                        if (!m->partitions[PARTITION_USR_VERITY].found || !m->partitions[PARTITION_USR].found)
-                                return -EADDRNOTAVAIL;
+                if (verity->root_hash) {
+                        /* If we have an explicit root hash and found the partitions for it, then we are ready to use
+                         * Verity, set things up for it */
 
-                        m->partitions[PARTITION_USR].rw = false;
-                        m->verity = true;
+                        if (verity->designator < 0 || verity->designator == PARTITION_ROOT) {
+                                if (!m->partitions[PARTITION_ROOT_VERITY].found || !m->partitions[PARTITION_ROOT].found)
+                                        return -EADDRNOTAVAIL;
+
+                                /* If we found a verity setup, then the root partition is necessarily read-only. */
+                                m->partitions[PARTITION_ROOT].rw = false;
+                                m->verity_ready = true;
+
+                        } else {
+                                assert(verity->designator == PARTITION_USR);
+
+                                if (!m->partitions[PARTITION_USR_VERITY].found || !m->partitions[PARTITION_USR].found)
+                                        return -EADDRNOTAVAIL;
+
+                                m->partitions[PARTITION_USR].rw = false;
+                                m->verity_ready = true;
+                        }
+
+                        if (m->verity_ready)
+                                m->verity_sig_ready = verity->root_hash_sig || have_verity_sig_partition;
+
+                } else if (have_verity_sig_partition) {
+
+                        /* If we found an embedded signature partition, we are ready, too. */
+
+                        m->verity_ready = m->verity_sig_ready = true;
+                        m->partitions[verity->designator == PARTITION_USR ? PARTITION_USR : PARTITION_ROOT].rw = false;
                 }
         }
 
-        blkid_free_probe(b);
-        b = NULL;
+        r = dissected_image_probe_filesystems(m, fd);
+        if (r < 0)
+                return r;
 
-        /* Fill in file system types if we don't know them yet. */
-        for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) {
-                DissectedPartition *p = m->partitions + i;
+        return 0;
+}
+#endif
 
-                if (!p->found)
-                        continue;
+int dissect_image_file(
+                const char *path,
+                const VeritySettings *verity,
+                const MountOptions *mount_options,
+                DissectImageFlags flags,
+                DissectedImage **ret) {
 
-                if (!p->fstype && p->node) {
-                        r = probe_filesystem(p->node, &p->fstype);
-                        if (r < 0 && r != -EUCLEAN)
-                                return r;
-                }
+#if HAVE_BLKID
+        _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        int r;
 
-                if (streq_ptr(p->fstype, "crypto_LUKS"))
-                        m->encrypted = true;
+        assert(path);
+        assert(ret);
 
-                if (p->fstype && fstype_is_ro(p->fstype))
-                        p->rw = false;
+        fd = open(path, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+        if (fd < 0)
+                return -errno;
 
-                if (!p->rw)
-                        p->growfs = false;
-        }
+        r = fd_verify_regular(fd);
+        if (r < 0)
+                return r;
+
+        r = dissected_image_new(path, &m);
+        if (r < 0)
+                return r;
+
+        r = probe_sector_size(fd, &m->sector_size);
+        if (r < 0)
+                return r;
+
+        r = dissect_image(m, fd, path, verity, mount_options, flags);
+        if (r < 0)
+                return r;
 
         *ret = TAKE_PTR(m);
         return 0;
@@ -1414,13 +1372,23 @@
         if (!m)
                 return NULL;
 
+        /* First, clear dissected partitions. */
         for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++)
                 dissected_partition_done(m->partitions + i);
 
+        /* Second, free decrypted images. This must be after dissected_partition_done(), as freeing
+         * DecryptedImage may try to deactivate partitions. */
+        decrypted_image_unref(m->decrypted_image);
+
+        /* Third, unref LoopDevice. This must be called after the above two, as freeing LoopDevice may try to
+         * remove existing partitions on the loopback block device. */
+        loop_device_unref(m->loop);
+
         free(m->image_name);
         free(m->hostname);
         strv_free(m->machine_info);
         strv_free(m->os_release);
+        strv_free(m->initrd_release);
         strv_free(m->extension_release);
 
         return mfree(m);
@@ -1452,29 +1420,33 @@
         return true;
 }
 
-static int run_fsck(const char *node, const char *fstype) {
+static int run_fsck(int node_fd, const char *fstype) {
         int r, exit_status;
         pid_t pid;
 
-        assert(node);
+        assert(node_fd >= 0);
         assert(fstype);
 
-        r = fsck_exists(fstype);
+        r = fsck_exists_for_fstype(fstype);
         if (r < 0) {
                 log_debug_errno(r, "Couldn't determine whether fsck for %s exists, proceeding anyway.", fstype);
                 return 0;
         }
         if (r == 0) {
-                log_debug("Not checking partition %s, as fsck for %s does not exist.", node, fstype);
+                log_debug("Not checking partition %s, as fsck for %s does not exist.", FORMAT_PROC_FD_PATH(node_fd), fstype);
                 return 0;
         }
 
-        r = safe_fork("(fsck)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_NULL_STDIO, &pid);
+        r = safe_fork_full(
+                        "(fsck)",
+                        &node_fd, 1, /* Leave the node fd open */
+                        FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_NULL_STDIO|FORK_CLOEXEC_OFF,
+                        &pid);
         if (r < 0)
                 return log_debug_errno(r, "Failed to fork off fsck: %m");
         if (r == 0) {
                 /* Child */
-                execl("/sbin/fsck", "/sbin/fsck", "-aT", node, NULL);
+                execl("/sbin/fsck", "/sbin/fsck", "-aT", FORMAT_PROC_FD_PATH(node_fd), NULL);
                 log_open();
                 log_debug_errno(errno, "Failed to execl() fsck: %m");
                 _exit(FSCK_OPERATIONAL_ERROR);
@@ -1497,8 +1469,7 @@
 }
 
 static int fs_grow(const char *node_path, const char *mount_path) {
-        _cleanup_close_ int mount_fd = -1, node_fd = -1;
-        char fb[FORMAT_BYTES_MAX];
+        _cleanup_close_ int mount_fd = -EBADF, node_fd = -EBADF;
         uint64_t size, newsize;
         int r;
 
@@ -1520,14 +1491,11 @@
 
         if (newsize == size)
                 log_debug("Successfully resized \"%s\" to %s bytes.",
-                          mount_path,
-                          format_bytes(fb, sizeof fb, newsize));
+                          mount_path, FORMAT_BYTES(newsize));
         else {
                 assert(newsize < size);
                 log_debug("Successfully resized \"%s\" to %s bytes (%"PRIu64" bytes lost due to blocksize).",
-                          mount_path,
-                          format_bytes(fb, sizeof fb, newsize),
-                          size - newsize);
+                          mount_path, FORMAT_BYTES(newsize), size - newsize);
         }
 
         return 0;
@@ -1549,23 +1517,31 @@
         assert(m);
         assert(where);
 
+        if (m->mount_node_fd < 0)
+                return 0;
+
         /* Use decrypted node and matching fstype if available, otherwise use the original device */
-        node = m->decrypted_node ?: m->node;
+        node = FORMAT_PROC_FD_PATH(m->mount_node_fd);
         fstype = m->decrypted_node ? m->decrypted_fstype: m->fstype;
 
-        if (!m->found || !node)
-                return 0;
         if (!fstype)
                 return -EAFNOSUPPORT;
+        r = dissect_fstype_ok(fstype);
+        if (r < 0)
+                return r;
+        if (!r)
+                return -EIDRM; /* Recognizable error */
 
-        /* We are looking at an encrypted partition? This either means stacked encryption, or the caller didn't call dissected_image_decrypt() beforehand. Let's return a recognizable error for this case. */
+        /* We are looking at an encrypted partition? This either means stacked encryption, or the caller
+         * didn't call dissected_image_decrypt() beforehand. Let's return a recognizable error for this
+         * case. */
         if (streq(fstype, "crypto_LUKS"))
                 return -EUNATCH;
 
         rw = m->rw && !(flags & DISSECT_IMAGE_MOUNT_READ_ONLY);
 
         if (FLAGS_SET(flags, DISSECT_IMAGE_FSCK) && rw) {
-                r = run_fsck(node, fstype);
+                r = run_fsck(m->mount_node_fd, fstype);
                 if (r < 0)
                         return r;
         }
@@ -1650,7 +1626,7 @@
                 (void) fs_grow(node, p);
 
         if (remap_uid_gid) {
-                r = remount_idmap(p, uid_shift, uid_range);
+                r = remount_idmap(p, uid_shift, uid_range, UID_INVALID, REMOUNT_IDMAPPING_HOST_ROOT);
                 if (r < 0)
                         return r;
         }
@@ -1704,6 +1680,7 @@
          *  -EUCLEAN      → fsck for file system failed
          *  -EBUSY        → File system already mounted/used elsewhere (kernel)
          *  -EAFNOSUPPORT → File system type not supported or not known
+         *  -EIDRM        → File system is not among allowlisted "common" file systems
          */
 
         if (!(m->partitions[PARTITION_ROOT].found ||
@@ -1738,7 +1715,7 @@
                                         ok = true;
                         }
                         if (!ok && FLAGS_SET(flags, DISSECT_IMAGE_VALIDATE_OS_EXT)) {
-                                r = path_is_extension_tree(where, m->image_name);
+                                r = path_is_extension_tree(where, m->image_name, FLAGS_SET(flags, DISSECT_IMAGE_RELAX_SYSEXT_CHECK));
                                 if (r < 0)
                                         return r;
                                 if (r > 0)
@@ -1793,7 +1770,7 @@
                                 if (r < 0) {
                                         if (r != -ENOENT)
                                                 return r;
-                                } else if (dir_is_empty(p) > 0) {
+                                } else if (dir_is_empty(p, /* ignore_hidden_or_backup= */ false) > 0) {
                                         /* It exists and is an empty directory. Let's mount the ESP there. */
                                         r = mount_partition(m->partitions + PARTITION_ESP, where, "/boot", uid_shift, uid_range, flags);
                                         if (r < 0)
@@ -1841,6 +1818,8 @@
                 return log_error_errno(r, "File system already mounted elsewhere.");
         if (r == -EAFNOSUPPORT)
                 return log_error_errno(r, "File system type not supported or not known.");
+        if (r == -EIDRM)
+                return log_error_errno(r, "File system is too uncommon, refused.");
         if (r < 0)
                 return log_error_errno(r, "Failed to mount image: %m");
 
@@ -1848,19 +1827,22 @@
 }
 
 #if HAVE_LIBCRYPTSETUP
-typedef struct DecryptedPartition {
+struct DecryptedPartition {
         struct crypt_device *device;
         char *name;
         bool relinquished;
-} DecryptedPartition;
-
-struct DecryptedImage {
-        DecryptedPartition *decrypted;
-        size_t n_decrypted;
 };
 #endif
 
-DecryptedImage* decrypted_image_unref(DecryptedImage* d) {
+typedef struct DecryptedPartition DecryptedPartition;
+
+struct DecryptedImage {
+        unsigned n_ref;
+        DecryptedPartition *decrypted;
+        size_t n_decrypted;
+};
+
+static DecryptedImage* decrypted_image_free(DecryptedImage *d) {
 #if HAVE_LIBCRYPTSETUP
         int r;
 
@@ -1871,7 +1853,18 @@
                 DecryptedPartition *p = d->decrypted + i;
 
                 if (p->device && p->name && !p->relinquished) {
-                        r = sym_crypt_deactivate_by_name(p->device, p->name, 0);
+                        _cleanup_free_ char *node = NULL;
+
+                        node = path_join("/dev/mapper", p->name);
+                        if (node) {
+                                r = btrfs_forget_device(node);
+                                if (r < 0 && r != -ENOENT)
+                                        log_debug_errno(r, "Failed to forget btrfs device %s, ignoring: %m", node);
+                        } else
+                                log_oom_debug();
+
+                        /* Let's deactivate lazily, as the dm volume may be already/still used by other processes. */
+                        r = sym_crypt_deactivate_by_name(p->device, p->name, CRYPT_DEACTIVATE_DEFERRED);
                         if (r < 0)
                                 log_debug_errno(r, "Failed to deactivate encrypted partition %s", p->name);
                 }
@@ -1887,7 +1880,25 @@
         return NULL;
 }
 
+DEFINE_TRIVIAL_REF_UNREF_FUNC(DecryptedImage, decrypted_image, decrypted_image_free);
+
 #if HAVE_LIBCRYPTSETUP
+static int decrypted_image_new(DecryptedImage **ret) {
+        _cleanup_(decrypted_image_unrefp) DecryptedImage *d = NULL;
+
+        assert(ret);
+
+        d = new(DecryptedImage, 1);
+        if (!d)
+                return -ENOMEM;
+
+        *d = (DecryptedImage) {
+                .n_ref = 1,
+        };
+
+        *ret = TAKE_PTR(d);
+        return 0;
+}
 
 static int make_dm_name_and_node(const void *original_node, const char *suffix, char **ret_name, char **ret_node) {
         _cleanup_free_ char *name = NULL, *node = NULL;
@@ -1930,6 +1941,7 @@
 
         _cleanup_free_ char *node = NULL, *name = NULL;
         _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(m);
@@ -1973,12 +1985,17 @@
                 return r == -EPERM ? -EKEYREJECTED : r;
         }
 
+        fd = open(node, O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
+        if (fd < 0)
+                return log_debug_errno(errno, "Failed to open %s: %m", node);
+
         d->decrypted[d->n_decrypted++] = (DecryptedPartition) {
                 .name = TAKE_PTR(name),
                 .device = TAKE_PTR(cd),
         };
 
         m->decrypted_node = TAKE_PTR(node);
+        close_and_replace(m->mount_node_fd, fd);
 
         return 0;
 }
@@ -2042,6 +2059,167 @@
 }
 DEFINE_TRIVIAL_CLEANUP_FUNC(char *, dm_deferred_remove_clean);
 
+static int validate_signature_userspace(const VeritySettings *verity) {
+#if HAVE_OPENSSL
+        _cleanup_(sk_X509_free_allp) STACK_OF(X509) *sk = NULL;
+        _cleanup_strv_free_ char **certs = NULL;
+        _cleanup_(PKCS7_freep) PKCS7 *p7 = NULL;
+        _cleanup_free_ char *s = NULL;
+        _cleanup_(BIO_freep) BIO *bio = NULL; /* 'bio' must be freed first, 's' second, hence keep this order
+                                               * of declaration in place, please */
+        const unsigned char *d;
+        int r;
+
+        assert(verity);
+        assert(verity->root_hash);
+        assert(verity->root_hash_sig);
+
+        /* Because installing a signature certificate into the kernel chain is so messy, let's optionally do
+         * userspace validation. */
+
+        r = conf_files_list_nulstr(&certs, ".crt", NULL, CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, CONF_PATHS_NULSTR("verity.d"));
+        if (r < 0)
+                return log_debug_errno(r, "Failed to enumerate certificates: %m");
+        if (strv_isempty(certs)) {
+                log_debug("No userspace dm-verity certificates found.");
+                return 0;
+        }
+
+        d = verity->root_hash_sig;
+        p7 = d2i_PKCS7(NULL, &d, (long) verity->root_hash_sig_size);
+        if (!p7)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse PKCS7 DER signature data.");
+
+        s = hexmem(verity->root_hash, verity->root_hash_size);
+        if (!s)
+                return log_oom_debug();
+
+        bio = BIO_new_mem_buf(s, strlen(s));
+        if (!bio)
+                return log_oom_debug();
+
+        sk = sk_X509_new_null();
+        if (!sk)
+                return log_oom_debug();
+
+        STRV_FOREACH(i, certs) {
+                _cleanup_(X509_freep) X509 *c = NULL;
+                _cleanup_fclose_ FILE *f = NULL;
+
+                f = fopen(*i, "re");
+                if (!f) {
+                        log_debug_errno(errno, "Failed to open '%s', ignoring: %m", *i);
+                        continue;
+                }
+
+                c = PEM_read_X509(f, NULL, NULL, NULL);
+                if (!c) {
+                        log_debug("Failed to load X509 certificate '%s', ignoring.", *i);
+                        continue;
+                }
+
+                if (sk_X509_push(sk, c) == 0)
+                        return log_oom_debug();
+
+                TAKE_PTR(c);
+        }
+
+        r = PKCS7_verify(p7, sk, NULL, bio, NULL, PKCS7_NOINTERN|PKCS7_NOVERIFY);
+        if (r)
+                log_debug("Userspace PKCS#7 validation succeeded.");
+        else
+                log_debug("Userspace PKCS#7 validation failed: %s", ERR_error_string(ERR_get_error(), NULL));
+
+        return r;
+#else
+        log_debug("Not doing client-side validation of dm-verity root hash signatures, OpenSSL support disabled.");
+        return 0;
+#endif
+}
+
+static int do_crypt_activate_verity(
+                struct crypt_device *cd,
+                const char *name,
+                const VeritySettings *verity) {
+
+        bool check_signature;
+        int r;
+
+        assert(cd);
+        assert(name);
+        assert(verity);
+
+        if (verity->root_hash_sig) {
+                r = getenv_bool_secure("SYSTEMD_DISSECT_VERITY_SIGNATURE");
+                if (r < 0 && r != -ENXIO)
+                        log_debug_errno(r, "Failed to parse $SYSTEMD_DISSECT_VERITY_SIGNATURE");
+
+                check_signature = r != 0;
+        } else
+                check_signature = false;
+
+        if (check_signature) {
+
+#if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY
+                /* First, if we have support for signed keys in the kernel, then try that first. */
+                r = sym_crypt_activate_by_signed_key(
+                                cd,
+                                name,
+                                verity->root_hash,
+                                verity->root_hash_size,
+                                verity->root_hash_sig,
+                                verity->root_hash_sig_size,
+                                CRYPT_ACTIVATE_READONLY);
+                if (r >= 0)
+                        return r;
+
+                log_debug("Validation of dm-verity signature failed via the kernel, trying userspace validation instead.");
+#else
+                log_debug("Activation of verity device with signature requested, but not supported via the kernel by %s due to missing crypt_activate_by_signed_key(), trying userspace validation instead.",
+                          program_invocation_short_name);
+#endif
+
+                /* So this didn't work via the kernel, then let's try userspace validation instead. If that
+                 * works we'll try to activate without telling the kernel the signature. */
+
+                r = validate_signature_userspace(verity);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        return log_debug_errno(SYNTHETIC_ERRNO(ENOKEY),
+                                               "Activation of signed Verity volume worked neither via the kernel nor in userspace, can't activate.");
+        }
+
+        return sym_crypt_activate_by_volume_key(
+                        cd,
+                        name,
+                        verity->root_hash,
+                        verity->root_hash_size,
+                        CRYPT_ACTIVATE_READONLY);
+}
+
+static usec_t verity_timeout(void) {
+        usec_t t = 100 * USEC_PER_MSEC;
+        const char *e;
+        int r;
+
+        /* On slower machines, like non-KVM vm, setting up device may take a long time.
+         * Let's make the timeout configurable. */
+
+        e = getenv("SYSTEMD_DISSECT_VERITY_TIMEOUT_SEC");
+        if (!e)
+                return t;
+
+        r = parse_sec(e, &t);
+        if (r < 0)
+                log_debug_errno(r,
+                                "Failed to parse timeout specified in $SYSTEMD_DISSECT_VERITY_TIMEOUT_SEC, "
+                                "using the default timeout (%s).",
+                                FORMAT_TIMESPAN(t, USEC_PER_MSEC));
+
+        return t;
+}
+
 static int verity_partition(
                 PartitionDesignator designator,
                 DissectedPartition *m,
@@ -2053,6 +2231,7 @@
         _cleanup_(sym_crypt_freep) struct crypt_device *cd = NULL;
         _cleanup_(dm_deferred_remove_cleanp) char *restore_deferred_remove = NULL;
         _cleanup_free_ char *node = NULL, *name = NULL;
+        _cleanup_close_ int mount_node_fd = -EBADF;
         int r;
 
         assert(m);
@@ -2113,89 +2292,114 @@
          * In case of ENODEV/ENOENT, which can happen if another process is activating at the exact same time,
          * retry a few times before giving up. */
         for (unsigned i = 0; i < N_DEVICE_NODE_LIST_ATTEMPTS; i++) {
-                if (verity->root_hash_sig) {
-#if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY
-                        r = sym_crypt_activate_by_signed_key(
-                                        cd,
-                                        name,
-                                        verity->root_hash,
-                                        verity->root_hash_size,
-                                        verity->root_hash_sig,
-                                        verity->root_hash_sig_size,
-                                        CRYPT_ACTIVATE_READONLY);
-#else
-                        r = log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                                            "Activation of verity device with signature requested, but not supported by %s due to missing crypt_activate_by_signed_key().", program_invocation_short_name);
-#endif
-                } else
-                        r = sym_crypt_activate_by_volume_key(
-                                        cd,
-                                        name,
-                                        verity->root_hash,
-                                        verity->root_hash_size,
-                                        CRYPT_ACTIVATE_READONLY);
+                _cleanup_(sym_crypt_freep) struct crypt_device *existing_cd = NULL;
+                _cleanup_close_ int fd = -EBADF;
+
+                /* First, check if the device already exists. */
+                fd = open(node, O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
+                if (fd < 0 && !ERRNO_IS_DEVICE_ABSENT(errno))
+                        return log_debug_errno(errno, "Failed to open verity device %s: %m", node);
+                if (fd >= 0)
+                        goto check; /* The device already exists. Let's check it. */
+
+                /* The symlink to the device node does not exist yet. Assume not activated, and let's activate it. */
+                r = do_crypt_activate_verity(cd, name, verity);
+                if (r >= 0)
+                        goto try_open; /* The device is activated. Let's open it. */
                 /* libdevmapper can return EINVAL when the device is already in the activation stage.
                  * There's no way to distinguish this situation from a genuine error due to invalid
                  * parameters, so immediately fall back to activating the device with a unique name.
                  * Improvements in libcrypsetup can ensure this never happens:
                  * https://gitlab.com/cryptsetup/cryptsetup/-/merge_requests/96 */
                 if (r == -EINVAL && FLAGS_SET(flags, DISSECT_IMAGE_VERITY_SHARE))
-                        return verity_partition(designator, m, v, verity, flags & ~DISSECT_IMAGE_VERITY_SHARE, d);
+                        break;
+                if (r == -ENODEV) /* Volume is being opened but not ready, crypt_init_by_name would fail, try to open again */
+                        goto try_again;
                 if (!IN_SET(r,
-                            0,       /* Success */
-                            -EEXIST, /* Volume is already open and ready to be used */
-                            -EBUSY,  /* Volume is being opened but not ready, crypt_init_by_name can fetch details */
-                            -ENODEV  /* Volume is being opened but not ready, crypt_init_by_name would fail, try to open again */))
-                        return r;
-                if (IN_SET(r, -EEXIST, -EBUSY)) {
-                        struct crypt_device *existing_cd = NULL;
+                            -EEXIST, /* Volume has already been opened and ready to be used. */
+                            -EBUSY   /* Volume is being opened but not ready, crypt_init_by_name() can fetch details. */))
+                        return log_debug_errno(r, "Failed to activate verity device %s: %m", node);
 
-                        if (!restore_deferred_remove){
-                                /* To avoid races, disable automatic removal on umount while setting up the new device. Restore it on failure. */
-                                r = dm_deferred_remove_cancel(name);
-                                /* If activation returns EBUSY there might be no deferred removal to cancel, that's fine */
-                                if (r < 0 && r != -ENXIO)
-                                        return log_debug_errno(r, "Disabling automated deferred removal for verity device %s failed: %m", node);
-                                if (r == 0) {
-                                        restore_deferred_remove = strdup(name);
-                                        if (!restore_deferred_remove)
-                                                return -ENOMEM;
-                                }
-                        }
+        check:
+                if (!restore_deferred_remove){
+                        /* To avoid races, disable automatic removal on umount while setting up the new device. Restore it on failure. */
+                        r = dm_deferred_remove_cancel(name);
+                        /* -EBUSY and -ENXIO: the device has already been removed or being removed. We cannot
+                         * use the device, try to open again. See target_message() in drivers/md/dm-ioctl.c
+                         * and dm_cancel_deferred_remove() in drivers/md/dm.c */
+                        if (IN_SET(r, -EBUSY, -ENXIO))
+                                goto try_again;
+                        if (r < 0)
+                                return log_debug_errno(r, "Failed to disable automated deferred removal for verity device %s: %m", node);
 
-                        r = verity_can_reuse(verity, name, &existing_cd);
-                        /* Same as above, -EINVAL can randomly happen when it actually means -EEXIST */
-                        if (r == -EINVAL && FLAGS_SET(flags, DISSECT_IMAGE_VERITY_SHARE))
-                                return verity_partition(designator, m, v, verity, flags & ~DISSECT_IMAGE_VERITY_SHARE, d);
-                        if (!IN_SET(r, 0, -ENODEV, -ENOENT, -EBUSY))
-                                return log_debug_errno(r, "Checking whether existing verity device %s can be reused failed: %m", node);
-                        if (r == 0) {
-                                /* devmapper might say that the device exists, but the devlink might not yet have been
-                                 * created. Check and wait for the udev event in that case. */
-                                r = device_wait_for_devlink(node, "block", usec_add(now(CLOCK_MONOTONIC), 100 * USEC_PER_MSEC), NULL);
-                                /* Fallback to activation with a unique device if it's taking too long */
-                                if (r == -ETIMEDOUT)
-                                        break;
-                                if (r < 0)
-                                        return r;
+                        restore_deferred_remove = strdup(name);
+                        if (!restore_deferred_remove)
+                                return log_oom_debug();
+                }
 
-                                if (cd)
-                                        sym_crypt_free(cd);
-                                cd = existing_cd;
+                r = verity_can_reuse(verity, name, &existing_cd);
+                /* Same as above, -EINVAL can randomly happen when it actually means -EEXIST */
+                if (r == -EINVAL && FLAGS_SET(flags, DISSECT_IMAGE_VERITY_SHARE))
+                        break;
+                if (IN_SET(r,
+                           -ENOENT, /* Removed?? */
+                           -EBUSY,  /* Volume is being opened but not ready, crypt_init_by_name() can fetch details. */
+                           -ENODEV  /* Volume is being opened but not ready, crypt_init_by_name() would fail, try to open again. */ ))
+                        goto try_again;
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to check if existing verity device %s can be reused: %m", node);
+
+                if (fd < 0) {
+                        /* devmapper might say that the device exists, but the devlink might not yet have been
+                         * created. Check and wait for the udev event in that case. */
+                        r = device_wait_for_devlink(node, "block", verity_timeout(), NULL);
+                        /* Fallback to activation with a unique device if it's taking too long */
+                        if (r == -ETIMEDOUT && FLAGS_SET(flags, DISSECT_IMAGE_VERITY_SHARE))
+                                break;
+                        if (r < 0)
+                                return log_debug_errno(r, "Failed to wait device node symlink %s: %m", node);
+                }
+
+        try_open:
+                if (fd < 0) {
+                        /* Now, the device is activated and devlink is created. Let's open it. */
+                        fd = open(node, O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
+                        if (fd < 0) {
+                                if (!ERRNO_IS_DEVICE_ABSENT(errno))
+                                        return log_debug_errno(errno, "Failed to open verity device %s: %m", node);
+
+                                /* The device has already been removed?? */
+                                goto try_again;
                         }
                 }
-                if (r == 0)
-                        break;
 
-                /* Device is being opened by another process, but it has not finished yet, yield for 2ms */
+                mount_node_fd = TAKE_FD(fd);
+                if (existing_cd)
+                        crypt_free_and_replace(cd, existing_cd);
+
+                goto success;
+
+        try_again:
+                /* Device is being removed by another process. Let's wait for a while. */
                 (void) usleep(2 * USEC_PER_MSEC);
         }
 
-        /* An existing verity device was reported by libcryptsetup/libdevmapper, but we can't use it at this time.
-         * Fall back to activating it with a unique device name. */
-        if (r != 0 && FLAGS_SET(flags, DISSECT_IMAGE_VERITY_SHARE))
+        /* All trials failed or a conflicting verity device exists. Let's try to activate with a unique name. */
+        if (FLAGS_SET(flags, DISSECT_IMAGE_VERITY_SHARE)) {
+                /* Before trying to activate with unique name, we need to free crypt_device object.
+                 * Otherwise, we get error from libcryptsetup like the following:
+                 * ------
+                 * systemd[1234]: Cannot use device /dev/loop5 which is in use (already mapped or mounted).
+                 * ------
+                 */
+                sym_crypt_free(cd);
+                cd = NULL;
                 return verity_partition(designator, m, v, verity, flags & ~DISSECT_IMAGE_VERITY_SHARE, d);
+        }
 
+        return log_debug_errno(SYNTHETIC_ERRNO(EBUSY), "All attempts to activate verity device %s failed.", name);
+
+success:
         /* Everything looks good and we'll be able to mount the device, so deferred remove will be re-enabled at that point. */
         restore_deferred_remove = mfree(restore_deferred_remove);
 
@@ -2205,6 +2409,7 @@
         };
 
         m->decrypted_node = TAKE_PTR(node);
+        close_and_replace(m->mount_node_fd, mount_node_fd);
 
         return 0;
 }
@@ -2214,8 +2419,7 @@
                 DissectedImage *m,
                 const char *passphrase,
                 const VeritySettings *verity,
-                DissectImageFlags flags,
-                DecryptedImage **ret) {
+                DissectImageFlags flags) {
 
 #if HAVE_LIBCRYPTSETUP
         _cleanup_(decrypted_image_unrefp) DecryptedImage *d = NULL;
@@ -2236,15 +2440,13 @@
         if (verity && verity->root_hash && verity->root_hash_size < sizeof(sd_id128_t))
                 return -EINVAL;
 
-        if (!m->encrypted && !m->verity) {
-                *ret = NULL;
+        if (!m->encrypted && !m->verity_ready)
                 return 0;
-        }
 
 #if HAVE_LIBCRYPTSETUP
-        d = new0(DecryptedImage, 1);
-        if (!d)
-                return -ENOMEM;
+        r = decrypted_image_new(&d);
+        if (r < 0)
+                return r;
 
         for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) {
                 DissectedPartition *p = m->partitions + i;
@@ -2257,21 +2459,21 @@
                 if (r < 0)
                         return r;
 
-                k = PARTITION_VERITY_OF(i);
+                k = partition_verity_of(i);
                 if (k >= 0) {
                         r = verity_partition(i, p, m->partitions + k, verity, flags | DISSECT_IMAGE_VERITY_SHARE, d);
                         if (r < 0)
                                 return r;
                 }
 
-                if (!p->decrypted_fstype && p->decrypted_node) {
-                        r = probe_filesystem(p->decrypted_node, &p->decrypted_fstype);
+                if (!p->decrypted_fstype && p->mount_node_fd >= 0 && p->decrypted_node) {
+                        r = probe_filesystem_full(p->mount_node_fd, p->decrypted_node, 0, UINT64_MAX, &p->decrypted_fstype);
                         if (r < 0 && r != -EUCLEAN)
                                 return r;
                 }
         }
 
-        *ret = TAKE_PTR(d);
+        m->decrypted_image = TAKE_PTR(d);
 
         return 1;
 #else
@@ -2283,8 +2485,7 @@
                 DissectedImage *m,
                 const char *passphrase,
                 const VeritySettings *verity,
-                DissectImageFlags flags,
-                DecryptedImage **ret) {
+                DissectImageFlags flags) {
 
         _cleanup_strv_free_erase_ char **z = NULL;
         int n = 3, r;
@@ -2293,7 +2494,7 @@
                 n--;
 
         for (;;) {
-                r = dissected_image_decrypt(m, passphrase, verity, flags, ret);
+                r = dissected_image_decrypt(m, passphrase, verity, flags);
                 if (r >= 0)
                         return r;
                 if (r == -EKEYREJECTED)
@@ -2315,7 +2516,7 @@
         }
 }
 
-int decrypted_image_relinquish(DecryptedImage *d) {
+static int decrypted_image_relinquish(DecryptedImage *d) {
         assert(d);
 
         /* Turns on automatic removal after the last use ended for all DM devices of this image, and sets a
@@ -2341,6 +2542,23 @@
         return 0;
 }
 
+int dissected_image_relinquish(DissectedImage *m) {
+        int r;
+
+        assert(m);
+
+        if (m->decrypted_image) {
+                r = decrypted_image_relinquish(m->decrypted_image);
+                if (r < 0)
+                        return r;
+        }
+
+        if (m->loop)
+                loop_device_relinquish(m->loop);
+
+        return 0;
+}
+
 static char *build_auxiliary_path(const char *image, const char *suffix) {
         const char *e;
         char *n;
@@ -2392,6 +2610,12 @@
         if (is_device_path(image))
                 return 0;
 
+        r = getenv_bool_secure("SYSTEMD_DISSECT_VERITY_SIDECAR");
+        if (r < 0 && r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_DISSECT_VERITY_SIDECAR, ignoring: %m");
+        if (r == 0)
+                return 0;
+
         designator = verity->designator;
 
         /* We only fill in what isn't already filled in */
@@ -2412,11 +2636,11 @@
                          * that doesn't exist for /usr */
 
                         if (designator < 0 || designator == PARTITION_ROOT) {
-                                r = getxattr_malloc(image, "user.verity.roothash", &text, true);
+                                r = getxattr_malloc(image, "user.verity.roothash", &text);
                                 if (r < 0) {
                                         _cleanup_free_ char *p = NULL;
 
-                                        if (!IN_SET(r, -ENODATA, -ENOENT) && !ERRNO_IS_NOT_SUPPORTED(r))
+                                        if (r != -ENOENT && !ERRNO_IS_XATTR_ABSENT(r))
                                                 return r;
 
                                         p = build_auxiliary_path(image, ".roothash");
@@ -2441,11 +2665,11 @@
                                  * `usrhash`, because `usrroothash` or `rootusrhash` would just be too
                                  * confusing. We thus drop the reference to the root of the Merkle tree, and
                                  * just indicate which file system it's about. */
-                                r = getxattr_malloc(image, "user.verity.usrhash", &text, true);
+                                r = getxattr_malloc(image, "user.verity.usrhash", &text);
                                 if (r < 0) {
                                         _cleanup_free_ char *p = NULL;
 
-                                        if (!IN_SET(r, -ENODATA, -ENOENT) && !ERRNO_IS_NOT_SUPPORTED(r))
+                                        if (r != -ENOENT && !ERRNO_IS_XATTR_ABSENT(r))
                                                 return r;
 
                                         p = build_auxiliary_path(image, ".usrhash");
@@ -2548,54 +2772,152 @@
         return 1;
 }
 
-int dissected_image_acquire_metadata(DissectedImage *m) {
+int dissected_image_load_verity_sig_partition(
+                DissectedImage *m,
+                int fd,
+                VeritySettings *verity) {
+
+        _cleanup_free_ void *root_hash = NULL, *root_hash_sig = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        size_t root_hash_size, root_hash_sig_size;
+        _cleanup_free_ char *buf = NULL;
+        PartitionDesignator d;
+        DissectedPartition *p;
+        JsonVariant *rh, *sig;
+        ssize_t n;
+        char *e;
+        int r;
+
+        assert(m);
+        assert(fd >= 0);
+        assert(verity);
+
+        if (verity->root_hash && verity->root_hash_sig) /* Already loaded? */
+                return 0;
+
+        r = getenv_bool_secure("SYSTEMD_DISSECT_VERITY_EMBEDDED");
+        if (r < 0 && r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_DISSECT_VERITY_EMBEDDED, ignoring: %m");
+        if (r == 0)
+                return 0;
+
+        d = partition_verity_sig_of(verity->designator < 0 ? PARTITION_ROOT : verity->designator);
+        assert(d >= 0);
+
+        p = m->partitions + d;
+        if (!p->found)
+                return 0;
+        if (p->offset == UINT64_MAX || p->size == UINT64_MAX)
+                return -EINVAL;
+
+        if (p->size > 4*1024*1024) /* Signature data cannot possible be larger than 4M, refuse that */
+                return -EFBIG;
+
+        buf = new(char, p->size+1);
+        if (!buf)
+                return -ENOMEM;
+
+        n = pread(fd, buf, p->size, p->offset);
+        if (n < 0)
+                return -ENOMEM;
+        if ((uint64_t) n != p->size)
+                return -EIO;
+
+        e = memchr(buf, 0, p->size);
+        if (e) {
+                /* If we found a NUL byte then the rest of the data must be NUL too */
+                if (!memeqzero(e, p->size - (e - buf)))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Signature data contains embedded NUL byte.");
+        } else
+                buf[p->size] = 0;
+
+        r = json_parse(buf, 0, &v, NULL, NULL);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to parse signature JSON data: %m");
+
+        rh = json_variant_by_key(v, "rootHash");
+        if (!rh)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Signature JSON object lacks 'rootHash' field.");
+        if (!json_variant_is_string(rh))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "'rootHash' field of signature JSON object is not a string.");
+
+        r = unhexmem(json_variant_string(rh), SIZE_MAX, &root_hash, &root_hash_size);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to parse root hash field: %m");
+
+        /* Check if specified root hash matches if it is specified */
+        if (verity->root_hash &&
+            memcmp_nn(verity->root_hash, verity->root_hash_size, root_hash, root_hash_size) != 0) {
+                _cleanup_free_ char *a = NULL, *b = NULL;
+
+                a = hexmem(root_hash, root_hash_size);
+                b = hexmem(verity->root_hash, verity->root_hash_size);
+
+                return log_debug_errno(r, "Root hash in signature JSON data (%s) doesn't match configured hash (%s).", strna(a), strna(b));
+        }
+
+        sig = json_variant_by_key(v, "signature");
+        if (!sig)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Signature JSON object lacks 'signature' field.");
+        if (!json_variant_is_string(sig))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "'signature' field of signature JSON object is not a string.");
+
+        r = unbase64mem(json_variant_string(sig), SIZE_MAX, &root_hash_sig, &root_hash_sig_size);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to parse signature field: %m");
+
+        free_and_replace(verity->root_hash, root_hash);
+        verity->root_hash_size = root_hash_size;
+
+        free_and_replace(verity->root_hash_sig, root_hash_sig);
+        verity->root_hash_sig_size = root_hash_sig_size;
+
+        return 1;
+}
+
+int dissected_image_acquire_metadata(DissectedImage *m, DissectImageFlags extra_flags) {
 
         enum {
                 META_HOSTNAME,
                 META_MACHINE_ID,
                 META_MACHINE_INFO,
                 META_OS_RELEASE,
+                META_INITRD_RELEASE,
                 META_EXTENSION_RELEASE,
+                META_HAS_INIT_SYSTEM,
                 _META_MAX,
         };
 
-        static const char *paths[_META_MAX] = {
+        static const char *const paths[_META_MAX] = {
                 [META_HOSTNAME]          = "/etc/hostname\0",
                 [META_MACHINE_ID]        = "/etc/machine-id\0",
                 [META_MACHINE_INFO]      = "/etc/machine-info\0",
-                [META_OS_RELEASE]        = "/etc/os-release\0"
-                                           "/usr/lib/os-release\0",
-                [META_EXTENSION_RELEASE] = NULL,
+                [META_OS_RELEASE]        = ("/etc/os-release\0"
+                                            "/usr/lib/os-release\0"),
+                [META_INITRD_RELEASE]    = ("/etc/initrd-release\0"
+                                            "/usr/lib/initrd-release\0"),
+                [META_EXTENSION_RELEASE] = "extension-release\0",    /* Used only for logging. */
+                [META_HAS_INIT_SYSTEM]   = "has-init-system\0",      /* ditto */
         };
 
-        _cleanup_strv_free_ char **machine_info = NULL, **os_release = NULL, **extension_release = NULL;
-        _cleanup_close_pair_ int error_pipe[2] = { -1, -1 };
+        _cleanup_strv_free_ char **machine_info = NULL, **os_release = NULL, **initrd_release = NULL, **extension_release = NULL;
+        _cleanup_close_pair_ int error_pipe[2] = PIPE_EBADF;
         _cleanup_(rmdir_and_freep) char *t = NULL;
         _cleanup_(sigkill_waitp) pid_t child = 0;
         sd_id128_t machine_id = SD_ID128_NULL;
         _cleanup_free_ char *hostname = NULL;
         unsigned n_meta_initialized = 0;
         int fds[2 * _META_MAX], r, v;
+        int has_init_system = -1;
         ssize_t n;
 
         BLOCK_SIGNALS(SIGCHLD);
 
         assert(m);
 
-        /* As per the os-release spec, if the image is an extension it will have a file
-         * named after the image name in extension-release.d/ */
-        if (m->image_name) {
-                char *ext;
-
-                ext = strjoina("/usr/lib/extension-release.d/extension-release.", m->image_name, "0");
-                ext[strlen(ext) - 1] = '\0'; /* Extra \0 for NULSTR_FOREACH using placeholder from above */
-                paths[META_EXTENSION_RELEASE] = ext;
-        } else
-                log_debug("No image name available, will skip extension-release metadata");
-
         for (; n_meta_initialized < _META_MAX; n_meta_initialized ++) {
                 if (!paths[n_meta_initialized]) {
-                        fds[2*n_meta_initialized] = fds[2*n_meta_initialized+1] = -1;
+                        fds[2*n_meta_initialized] = fds[2*n_meta_initialized+1] = -EBADF;
                         continue;
                 }
 
@@ -2618,6 +2940,7 @@
         if (r < 0)
                 goto finish;
         if (r == 0) {
+                /* Child in a new mount namespace */
                 error_pipe[0] = safe_close(error_pipe[0]);
 
                 r = dissected_image_mount(
@@ -2625,33 +2948,73 @@
                                 t,
                                 UID_INVALID,
                                 UID_INVALID,
-                                DISSECT_IMAGE_READ_ONLY|
-                                DISSECT_IMAGE_MOUNT_ROOT_ONLY|
-                                DISSECT_IMAGE_VALIDATE_OS|
-                                DISSECT_IMAGE_VALIDATE_OS_EXT|
+                                extra_flags |
+                                DISSECT_IMAGE_READ_ONLY |
+                                DISSECT_IMAGE_MOUNT_ROOT_ONLY |
                                 DISSECT_IMAGE_USR_NO_ROOT);
                 if (r < 0) {
-                        /* Let parent know the error */
-                        (void) write(error_pipe[1], &r, sizeof(r));
-
                         log_debug_errno(r, "Failed to mount dissected image: %m");
-                        _exit(EXIT_FAILURE);
+                        goto inner_fail;
                 }
 
                 for (unsigned k = 0; k < _META_MAX; k++) {
                         _cleanup_close_ int fd = -ENOENT;
-                        const char *p;
 
                         if (!paths[k])
                                 continue;
 
                         fds[2*k] = safe_close(fds[2*k]);
 
-                        NULSTR_FOREACH(p, paths[k]) {
-                                fd = chase_symlinks_and_open(p, t, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_NOCTTY, NULL);
-                                if (fd >= 0)
-                                        break;
+                        switch (k) {
+
+                        case META_EXTENSION_RELEASE:
+                                /* As per the os-release spec, if the image is an extension it will have a file
+                                 * named after the image name in extension-release.d/ - we use the image name
+                                 * and try to resolve it with the extension-release helpers, as sometimes
+                                 * the image names are mangled on deployment and do not match anymore.
+                                 * Unlike other paths this is not fixed, and the image name
+                                 * can be mangled on deployment, so by calling into the helper
+                                 * we allow a fallback that matches on the first extension-release
+                                 * file found in the directory, if one named after the image cannot
+                                 * be found first. */
+                                r = open_extension_release(t, m->image_name, /* relax_extension_release_check= */ false, NULL, &fd);
+                                if (r < 0)
+                                        fd = r; /* Propagate the error. */
+                                break;
+
+                        case META_HAS_INIT_SYSTEM: {
+                                bool found = false;
+
+                                FOREACH_STRING(init,
+                                               "/usr/lib/systemd/systemd",  /* systemd on /usr merged system */
+                                               "/lib/systemd/systemd",      /* systemd on /usr non-merged systems */
+                                               "/sbin/init") {              /* traditional path the Linux kernel invokes */
+
+                                        r = chase_symlinks(init, t, CHASE_PREFIX_ROOT, NULL, NULL);
+                                        if (r < 0) {
+                                                if (r != -ENOENT)
+                                                        log_debug_errno(r, "Failed to resolve %s, ignoring: %m", init);
+                                        } else {
+                                                found = true;
+                                                break;
+                                        }
+                                }
+
+                                r = loop_write(fds[2*k+1], &found, sizeof(found), false);
+                                if (r < 0)
+                                        goto inner_fail;
+
+                                continue;
                         }
+
+                        default:
+                                NULSTR_FOREACH(p, paths[k]) {
+                                        fd = chase_symlinks_and_open(p, t, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_NOCTTY, NULL);
+                                        if (fd >= 0)
+                                                break;
+                                }
+                        }
+
                         if (fd < 0) {
                                 log_debug_errno(fd, "Failed to read %s file of image, ignoring: %m", paths[k]);
                                 fds[2*k+1] = safe_close(fds[2*k+1]);
@@ -2659,15 +3022,18 @@
                         }
 
                         r = copy_bytes(fd, fds[2*k+1], UINT64_MAX, 0);
-                        if (r < 0) {
-                                (void) write(error_pipe[1], &r, sizeof(r));
-                                _exit(EXIT_FAILURE);
-                        }
+                        if (r < 0)
+                                goto inner_fail;
 
                         fds[2*k+1] = safe_close(fds[2*k+1]);
                 }
 
                 _exit(EXIT_SUCCESS);
+
+        inner_fail:
+                /* Let parent know the error */
+                (void) write(error_pipe[1], &r, sizeof(r));
+                _exit(EXIT_FAILURE);
         }
 
         error_pipe[1] = safe_close(error_pipe[1]);
@@ -2691,7 +3057,7 @@
                 case META_HOSTNAME:
                         r = read_etc_hostname_stream(f, &hostname);
                         if (r < 0)
-                                log_debug_errno(r, "Failed to read /etc/hostname: %m");
+                                log_debug_errno(r, "Failed to read /etc/hostname of image: %m");
 
                         break;
 
@@ -2700,17 +3066,17 @@
 
                         r = read_line(f, LONG_LINE_MAX, &line);
                         if (r < 0)
-                                log_debug_errno(r, "Failed to read /etc/machine-id: %m");
+                                log_debug_errno(r, "Failed to read /etc/machine-id of image: %m");
                         else if (r == 33) {
                                 r = sd_id128_from_string(line, &machine_id);
                                 if (r < 0)
                                         log_debug_errno(r, "Image contains invalid /etc/machine-id: %s", line);
                         } else if (r == 0)
-                                log_debug("/etc/machine-id file is empty.");
+                                log_debug("/etc/machine-id file of image is empty.");
                         else if (streq(line, "uninitialized"))
-                                log_debug("/etc/machine-id file is uninitialized (likely aborted first boot).");
+                                log_debug("/etc/machine-id file of image is uninitialized (likely aborted first boot).");
                         else
-                                log_debug("/etc/machine-id has unexpected length %i.", r);
+                                log_debug("/etc/machine-id file of image has unexpected length %i.", r);
 
                         break;
                 }
@@ -2718,24 +3084,44 @@
                 case META_MACHINE_INFO:
                         r = load_env_file_pairs(f, "machine-info", &machine_info);
                         if (r < 0)
-                                log_debug_errno(r, "Failed to read /etc/machine-info: %m");
+                                log_debug_errno(r, "Failed to read /etc/machine-info of image: %m");
 
                         break;
 
                 case META_OS_RELEASE:
                         r = load_env_file_pairs(f, "os-release", &os_release);
                         if (r < 0)
-                                log_debug_errno(r, "Failed to read OS release file: %m");
+                                log_debug_errno(r, "Failed to read OS release file of image: %m");
+
+                        break;
+
+                case META_INITRD_RELEASE:
+                        r = load_env_file_pairs(f, "initrd-release", &initrd_release);
+                        if (r < 0)
+                                log_debug_errno(r, "Failed to read initrd release file of image: %m");
 
                         break;
 
                 case META_EXTENSION_RELEASE:
                         r = load_env_file_pairs(f, "extension-release", &extension_release);
                         if (r < 0)
-                                log_debug_errno(r, "Failed to read extension release file: %m");
+                                log_debug_errno(r, "Failed to read extension release file of image: %m");
 
                         break;
-                }
+
+                case META_HAS_INIT_SYSTEM: {
+                        bool b = false;
+                        size_t nr;
+
+                        errno = 0;
+                        nr = fread(&b, 1, sizeof(b), f);
+                        if (nr != sizeof(b))
+                                log_debug_errno(errno_or_else(EIO), "Failed to read has-init-system boolean: %m");
+                        else
+                                has_init_system = b;
+
+                        break;
+                }}
         }
 
         r = wait_for_terminate_and_check("(sd-dissect)", child, 0);
@@ -2758,7 +3144,9 @@
         m->machine_id = machine_id;
         strv_free_and_replace(m->machine_info, machine_info);
         strv_free_and_replace(m->os_release, os_release);
+        strv_free_and_replace(m->initrd_release, initrd_release);
         strv_free_and_replace(m->extension_release, extension_release);
+        m->has_init_system = has_init_system;
 
 finish:
         for (unsigned k = 0; k < n_meta_initialized; k++)
@@ -2767,48 +3155,86 @@
         return r;
 }
 
-int dissect_image_and_warn(
-                int fd,
-                const char *name,
+int dissect_loop_device(
+                LoopDevice *loop,
                 const VeritySettings *verity,
                 const MountOptions *mount_options,
-                uint64_t uevent_seqnum_not_before,
-                usec_t timestamp_not_before,
                 DissectImageFlags flags,
                 DissectedImage **ret) {
 
-        _cleanup_free_ char *buffer = NULL;
+#if HAVE_BLKID
+        _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
         int r;
 
-        if (!name) {
-                r = fd_get_path(fd, &buffer);
-                if (r < 0)
-                        return r;
+        assert(loop);
+        assert(ret);
 
-                name = buffer;
-        }
+        r = dissected_image_new(loop->backing_file ?: loop->node, &m);
+        if (r < 0)
+                return r;
 
-        r = dissect_image(fd, verity, mount_options, uevent_seqnum_not_before, timestamp_not_before, flags, ret);
+        m->loop = loop_device_ref(loop);
+        m->sector_size = m->loop->sector_size;
+
+        r = dissect_image(m, loop->fd, loop->node, verity, mount_options, flags);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(m);
+        return 0;
+#else
+        return -EOPNOTSUPP;
+#endif
+}
+
+int dissect_loop_device_and_warn(
+                LoopDevice *loop,
+                const VeritySettings *verity,
+                const MountOptions *mount_options,
+                DissectImageFlags flags,
+                DissectedImage **ret) {
+
+        const char *name;
+        int r;
+
+        assert(loop);
+        assert(loop->fd >= 0);
+
+        name = ASSERT_PTR(loop->backing_file ?: loop->node);
+
+        r = dissect_loop_device(loop, verity, mount_options, flags, ret);
         switch (r) {
 
         case -EOPNOTSUPP:
                 return log_error_errno(r, "Dissecting images is not supported, compiled without blkid support.");
 
         case -ENOPKG:
-                return log_error_errno(r, "Couldn't identify a suitable partition table or file system in '%s'.", name);
+                return log_error_errno(r, "%s: Couldn't identify a suitable partition table or file system.", name);
+
+        case -ENOMEDIUM:
+                return log_error_errno(r, "%s: The image does not pass validation.", name);
 
         case -EADDRNOTAVAIL:
-                return log_error_errno(r, "No root partition for specified root hash found in '%s'.", name);
+                return log_error_errno(r, "%s: No root partition for specified root hash found.", name);
 
         case -ENOTUNIQ:
-                return log_error_errno(r, "Multiple suitable root partitions found in image '%s'.", name);
+                return log_error_errno(r, "%s: Multiple suitable root partitions found in image.", name);
 
         case -ENXIO:
-                return log_error_errno(r, "No suitable root partition found in image '%s'.", name);
+                return log_error_errno(r, "%s: No suitable root partition found in image.", name);
 
         case -EPROTONOSUPPORT:
                 return log_error_errno(r, "Device '%s' is loopback block device with partition scanning turned off, please turn it on.", name);
 
+        case -ENOTBLK:
+                return log_error_errno(r, "%s: Image is not a block device.", name);
+
+        case -EBADR:
+                return log_error_errno(r,
+                                       "Combining partitioned images (such as '%s') with external Verity data (such as '%s') not supported. "
+                                       "(Consider setting $SYSTEMD_DISSECT_VERITY_SIDECAR=0 to disable automatic discovery of external Verity data.)",
+                                       name, strna(verity ? verity->data_path : NULL));
+
         default:
                 if (r < 0)
                         return log_error_errno(r, "Failed to dissect image '%s': %m", name);
@@ -2817,20 +3243,54 @@
         }
 }
 
-bool dissected_image_can_do_verity(const DissectedImage *image, PartitionDesignator partition_designator) {
-        if (image->single_file_system)
-                return partition_designator == PARTITION_ROOT && image->can_verity;
+bool dissected_image_verity_candidate(const DissectedImage *image, PartitionDesignator partition_designator) {
+        assert(image);
 
-        return PARTITION_VERITY_OF(partition_designator) >= 0;
+        /* Checks if this partition could theoretically do Verity. For non-partitioned images this only works
+         * if there's an external verity file supplied, for which we can consult .has_verity. For partitioned
+         * images we only check the partition type.
+         *
+         * This call is used to decide whether to suppress or show a verity column in tabular output of the
+         * image. */
+
+        if (image->single_file_system)
+                return partition_designator == PARTITION_ROOT && image->has_verity;
+
+        return partition_verity_of(partition_designator) >= 0;
 }
 
-bool dissected_image_has_verity(const DissectedImage *image, PartitionDesignator partition_designator) {
-        int k;
+bool dissected_image_verity_ready(const DissectedImage *image, PartitionDesignator partition_designator) {
+        PartitionDesignator k;
+
+        assert(image);
+
+        /* Checks if this partition has verity data available that we can activate. For non-partitioned this
+         * works for the root partition, for others only if the associated verity partition was found. */
+
+        if (!image->verity_ready)
+                return false;
 
         if (image->single_file_system)
-                return partition_designator == PARTITION_ROOT && image->verity;
+                return partition_designator == PARTITION_ROOT;
 
-        k = PARTITION_VERITY_OF(partition_designator);
+        k = partition_verity_of(partition_designator);
+        return k >= 0 && image->partitions[k].found;
+}
+
+bool dissected_image_verity_sig_ready(const DissectedImage *image, PartitionDesignator partition_designator) {
+        PartitionDesignator k;
+
+        assert(image);
+
+        /* Checks if this partition has verity signature data available that we can use. */
+
+        if (!image->verity_sig_ready)
+                return false;
+
+        if (image->single_file_system)
+                return partition_designator == PARTITION_ROOT;
+
+        k = partition_verity_sig_of(partition_designator);
         return k >= 0 && image->partitions[k].found;
 }
 
@@ -2847,8 +3307,6 @@
 }
 
 const char* mount_options_from_designator(const MountOptions *options, PartitionDesignator designator) {
-        const MountOptions *m;
-
         LIST_FOREACH(mount_options, m, options)
                 if (designator == m->partition_designator && !isempty(m->options))
                         return m->options;
@@ -2860,12 +3318,10 @@
                 const char *image,
                 DissectImageFlags flags,
                 char **ret_directory,
-                LoopDevice **ret_loop_device,
-                DecryptedImage **ret_decrypted_image) {
+                LoopDevice **ret_loop_device) {
 
         _cleanup_(verity_settings_done) VeritySettings verity = VERITY_SETTINGS_DEFAULT;
         _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(dissected_image_unrefp) DissectedImage *dissected_image = NULL;
         _cleanup_(rmdir_and_freep) char *created_dir = NULL;
         _cleanup_free_ char *temp = NULL;
@@ -2878,7 +3334,10 @@
         assert(image);
         assert(ret_directory);
         assert(ret_loop_device);
-        assert(ret_decrypted_image);
+
+        /* We intend to mount this right-away, hence add the partitions if needed and pin them. */
+        flags |= DISSECT_IMAGE_ADD_PARTITION_DEVICES |
+                DISSECT_IMAGE_PIN_PARTITION_DEVICES;
 
         r = verity_settings_load(&verity, image, NULL, NULL);
         if (r < 0)
@@ -2891,16 +3350,22 @@
         r = loop_device_make_by_path(
                         image,
                         FLAGS_SET(flags, DISSECT_IMAGE_DEVICE_READ_ONLY) ? O_RDONLY : O_RDWR,
+                        /* sector_size= */ UINT32_MAX,
                         FLAGS_SET(flags, DISSECT_IMAGE_NO_PARTITION_TABLE) ? 0 : LO_FLAGS_PARTSCAN,
+                        LOCK_SH,
                         &d);
         if (r < 0)
                 return log_error_errno(r, "Failed to set up loopback device for %s: %m", image);
 
-        r = dissect_image_and_warn(d->fd, image, &verity, NULL, d->uevent_seqnum_not_before, d->timestamp_not_before, flags, &dissected_image);
+        r = dissect_loop_device_and_warn(d, &verity, NULL, flags, &dissected_image);
         if (r < 0)
                 return r;
 
-        r = dissected_image_decrypt_interactively(dissected_image, NULL, &verity, flags, &decrypted_image);
+        r = dissected_image_load_verity_sig_partition(dissected_image, d->fd, &verity);
+        if (r < 0)
+                return r;
+
+        r = dissected_image_decrypt_interactively(dissected_image, NULL, &verity, flags);
         if (r < 0)
                 return r;
 
@@ -2918,38 +3383,28 @@
         if (r < 0)
                 return r;
 
-        if (decrypted_image) {
-                r = decrypted_image_relinquish(decrypted_image);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to relinquish DM devices: %m");
-        }
+        r = loop_device_flock(d, LOCK_UN);
+        if (r < 0)
+                return r;
 
-        loop_device_relinquish(d);
+        r = dissected_image_relinquish(dissected_image);
+        if (r < 0)
+                return log_error_errno(r, "Failed to relinquish DM and loopback block devices: %m");
 
         *ret_directory = TAKE_PTR(created_dir);
         *ret_loop_device = TAKE_PTR(d);
-        *ret_decrypted_image = TAKE_PTR(decrypted_image);
 
         return 0;
 }
 
-static const char *const partition_designator_table[] = {
-        [PARTITION_ROOT] = "root",
-        [PARTITION_ROOT_SECONDARY] = "root-secondary",
-        [PARTITION_USR] = "usr",
-        [PARTITION_USR_SECONDARY] = "usr-secondary",
-        [PARTITION_HOME] = "home",
-        [PARTITION_SRV] = "srv",
-        [PARTITION_ESP] = "esp",
-        [PARTITION_XBOOTLDR] = "xbootldr",
-        [PARTITION_SWAP] = "swap",
-        [PARTITION_ROOT_VERITY] = "root-verity",
-        [PARTITION_ROOT_SECONDARY_VERITY] = "root-secondary-verity",
-        [PARTITION_USR_VERITY] = "usr-verity",
-        [PARTITION_USR_SECONDARY_VERITY] = "usr-secondary-verity",
-        [PARTITION_TMP] = "tmp",
-        [PARTITION_VAR] = "var",
-};
+static bool mount_options_relax_extension_release_checks(const MountOptions *options) {
+        if (!options)
+                return false;
+
+        return string_contains_word(mount_options_from_designator(options, PARTITION_ROOT), ",", "x-systemd.relax-extension-release-check") ||
+                        string_contains_word(mount_options_from_designator(options, PARTITION_USR), ",", "x-systemd.relax-extension-release-check") ||
+                        string_contains_word(options->options, ",", "x-systemd.relax-extension-release-check");
+}
 
 int verity_dissect_and_mount(
                 int src_fd,
@@ -2958,66 +3413,69 @@
                 const MountOptions *options,
                 const char *required_host_os_release_id,
                 const char *required_host_os_release_version_id,
-                const char *required_host_os_release_sysext_level) {
+                const char *required_host_os_release_sysext_level,
+                const char *required_sysext_scope) {
 
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(dissected_image_unrefp) DissectedImage *dissected_image = NULL;
         _cleanup_(verity_settings_done) VeritySettings verity = VERITY_SETTINGS_DEFAULT;
-        char chased_src[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
         DissectImageFlags dissect_image_flags;
+        bool relax_extension_release_check;
         int r;
 
         assert(src);
         assert(dest);
 
-        if (src_fd >= 0)
-                xsprintf(chased_src, "/proc/self/fd/%i", src_fd);
+        relax_extension_release_check = mount_options_relax_extension_release_checks(options);
 
         /* We might get an FD for the image, but we use the original path to look for the dm-verity files */
         r = verity_settings_load(&verity, src, NULL, NULL);
         if (r < 0)
                 return log_debug_errno(r, "Failed to load root hash: %m");
 
-        dissect_image_flags = verity.data_path ? DISSECT_IMAGE_NO_PARTITION_TABLE : 0;
+        dissect_image_flags = (verity.data_path ? DISSECT_IMAGE_NO_PARTITION_TABLE : 0) |
+                (relax_extension_release_check ? DISSECT_IMAGE_RELAX_SYSEXT_CHECK : 0) |
+                DISSECT_IMAGE_ADD_PARTITION_DEVICES |
+                DISSECT_IMAGE_PIN_PARTITION_DEVICES;
 
         /* Note that we don't use loop_device_make here, as the FD is most likely O_PATH which would not be
          * accepted by LOOP_CONFIGURE, so just let loop_device_make_by_path reopen it as a regular FD. */
         r = loop_device_make_by_path(
-                        src_fd >= 0 ? chased_src : src,
-                        -1,
+                        src_fd >= 0 ? FORMAT_PROC_FD_PATH(src_fd) : src,
+                        /* open_flags= */ -1,
+                        /* sector_size= */ UINT32_MAX,
                         verity.data_path ? 0 : LO_FLAGS_PARTSCAN,
+                        LOCK_SH,
                         &loop_device);
         if (r < 0)
                 return log_debug_errno(r, "Failed to create loop device for image: %m");
 
-        r = dissect_image(
-                        loop_device->fd,
+        r = dissect_loop_device(
+                        loop_device,
                         &verity,
                         options,
-                        loop_device->uevent_seqnum_not_before,
-                        loop_device->timestamp_not_before,
                         dissect_image_flags,
                         &dissected_image);
         /* No partition table? Might be a single-filesystem image, try again */
         if (!verity.data_path && r == -ENOPKG)
-                 r = dissect_image(
-                                loop_device->fd,
+                 r = dissect_loop_device(
+                                loop_device,
                                 &verity,
                                 options,
-                                loop_device->uevent_seqnum_not_before,
-                                loop_device->timestamp_not_before,
                                 dissect_image_flags | DISSECT_IMAGE_NO_PARTITION_TABLE,
                                 &dissected_image);
         if (r < 0)
                 return log_debug_errno(r, "Failed to dissect image: %m");
 
+        r = dissected_image_load_verity_sig_partition(dissected_image, loop_device->fd, &verity);
+        if (r < 0)
+                return r;
+
         r = dissected_image_decrypt(
                         dissected_image,
                         NULL,
                         &verity,
-                        dissect_image_flags,
-                        &decrypted_image);
+                        dissect_image_flags);
         if (r < 0)
                 return log_debug_errno(r, "Failed to decrypt dissected image: %m");
 
@@ -3032,6 +3490,10 @@
         if (r < 0)
                 return log_debug_errno(r, "Failed to mount image: %m");
 
+        r = loop_device_flock(loop_device, LOCK_UN);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to unlock loopback device: %m");
+
         /* If we got os-release values from the caller, then we need to match them with the image's
          * extension-release.d/ content. Return -EINVAL if there's any mismatch.
          * First, check the distro ID. If that matches, then check the new SYSEXT_LEVEL value if
@@ -3040,31 +3502,28 @@
         if (required_host_os_release_id) {
                 _cleanup_strv_free_ char **extension_release = NULL;
 
-                r = load_extension_release_pairs(dest, dissected_image->image_name, &extension_release);
+                assert(!isempty(required_host_os_release_id));
+
+                r = load_extension_release_pairs(dest, dissected_image->image_name, relax_extension_release_check, &extension_release);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to parse image %s extension-release metadata: %m", dissected_image->image_name);
 
                 r = extension_release_validate(
-                        dissected_image->image_name,
-                        required_host_os_release_id,
-                        required_host_os_release_version_id,
-                        required_host_os_release_sysext_level,
-                        extension_release);
+                                dissected_image->image_name,
+                                required_host_os_release_id,
+                                required_host_os_release_version_id,
+                                required_host_os_release_sysext_level,
+                                required_sysext_scope,
+                                extension_release);
                 if (r == 0)
                         return log_debug_errno(SYNTHETIC_ERRNO(ESTALE), "Image %s extension-release metadata does not match the root's", dissected_image->image_name);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to compare image %s extension-release metadata with the root's os-release: %m", dissected_image->image_name);
         }
 
-        if (decrypted_image) {
-                r = decrypted_image_relinquish(decrypted_image);
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to relinquish decrypted image: %m");
-        }
-
-        loop_device_relinquish(loop_device);
+        r = dissected_image_relinquish(dissected_image);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to relinquish dissected image: %m");
 
         return 0;
 }
-
-DEFINE_STRING_TABLE_LOOKUP(partition_designator, PartitionDesignator);
diff --git a/src/shared/dissect-image.h b/src/shared/dissect-image.h
index 2e58a5d..143d6ff 100644
--- a/src/shared/dissect-image.h
+++ b/src/shared/dissect-image.h
@@ -5,6 +5,8 @@
 
 #include "sd-id128.h"
 
+#include "architecture.h"
+#include "gpt.h"
 #include "list.h"
 #include "loop-util.h"
 #include "macro.h"
@@ -19,117 +21,90 @@
         bool found:1;
         bool rw:1;
         bool growfs:1;
-        int partno;        /* -1 if there was no partition and the images contains a file system directly */
-        int architecture;  /* Intended architecture: either native, secondary or unset (-1). */
-        sd_id128_t uuid;   /* Partition entry UUID as reported by the GPT */
+        int partno;                 /* -1 if there was no partition and the images contains a file system directly */
+        Architecture architecture;  /* Intended architecture: either native, secondary or unset ARCHITECTURE_INVALID. */
+        sd_id128_t uuid;            /* Partition entry UUID as reported by the GPT */
         char *fstype;
         char *node;
         char *label;
         char *decrypted_node;
         char *decrypted_fstype;
         char *mount_options;
+        int mount_node_fd;
+        uint64_t size;
+        uint64_t offset;
+        uint64_t gpt_flags;
 };
 
-typedef enum PartitionDesignator {
-        PARTITION_ROOT,
-        PARTITION_ROOT_SECONDARY,  /* Secondary architecture */
-        PARTITION_USR,
-        PARTITION_USR_SECONDARY,
-        PARTITION_HOME,
-        PARTITION_SRV,
-        PARTITION_ESP,
-        PARTITION_XBOOTLDR,
-        PARTITION_SWAP,
-        PARTITION_ROOT_VERITY, /* verity data for the PARTITION_ROOT partition */
-        PARTITION_ROOT_SECONDARY_VERITY, /* verity data for the PARTITION_ROOT_SECONDARY partition */
-        PARTITION_USR_VERITY,
-        PARTITION_USR_SECONDARY_VERITY,
-        PARTITION_TMP,
-        PARTITION_VAR,
-        _PARTITION_DESIGNATOR_MAX,
-        _PARTITION_DESIGNATOR_INVALID = -EINVAL,
-} PartitionDesignator;
-
-static inline bool PARTITION_DESIGNATOR_VERSIONED(PartitionDesignator d) {
-        /* Returns true for all designators where we want to support a concept of "versioning", i.e. which
-         * likely contain software binaries (or hashes thereof) that make sense to be versioned as a
-         * whole. We use this check to automatically pick the newest version of these partitions, by version
-         * comparing the partition labels. */
-
-        return IN_SET(d,
-                      PARTITION_ROOT,
-                      PARTITION_ROOT_SECONDARY,
-                      PARTITION_USR,
-                      PARTITION_USR_SECONDARY,
-                      PARTITION_ROOT_VERITY,
-                      PARTITION_ROOT_SECONDARY_VERITY,
-                      PARTITION_USR_VERITY,
-                      PARTITION_USR_SECONDARY_VERITY);
-}
-
-static inline PartitionDesignator PARTITION_VERITY_OF(PartitionDesignator p) {
-        switch (p) {
-
-        case PARTITION_ROOT:
-                return PARTITION_ROOT_VERITY;
-
-        case PARTITION_ROOT_SECONDARY:
-                return PARTITION_ROOT_SECONDARY_VERITY;
-
-        case PARTITION_USR:
-                return PARTITION_USR_VERITY;
-
-        case PARTITION_USR_SECONDARY:
-                return PARTITION_USR_SECONDARY_VERITY;
-
-        default:
-                return _PARTITION_DESIGNATOR_INVALID;
-        }
-}
+#define DISSECTED_PARTITION_NULL                                        \
+        ((DissectedPartition) {                                         \
+                .partno = -1,                                           \
+                .architecture = _ARCHITECTURE_INVALID,                  \
+                .mount_node_fd = -EBADF,                                \
+        })
+#define TAKE_PARTITION(p)                                       \
+        ({                                                      \
+                DissectedPartition *_pp = &(p), _p = *_pp;      \
+                *_pp = DISSECTED_PARTITION_NULL;                \
+                _p;                                             \
+        })
 
 typedef enum DissectImageFlags {
-        DISSECT_IMAGE_DEVICE_READ_ONLY    = 1 << 0,  /* Make device read-only */
-        DISSECT_IMAGE_DISCARD_ON_LOOP     = 1 << 1,  /* Turn on "discard" if on a loop device and file system supports it */
-        DISSECT_IMAGE_DISCARD             = 1 << 2,  /* Turn on "discard" if file system supports it, on all block devices */
-        DISSECT_IMAGE_DISCARD_ON_CRYPTO   = 1 << 3,  /* Turn on "discard" also on crypto devices */
-        DISSECT_IMAGE_DISCARD_ANY         = DISSECT_IMAGE_DISCARD_ON_LOOP |
-                                            DISSECT_IMAGE_DISCARD |
-                                            DISSECT_IMAGE_DISCARD_ON_CRYPTO,
-        DISSECT_IMAGE_GPT_ONLY            = 1 << 4,  /* Only recognize images with GPT partition tables */
-        DISSECT_IMAGE_GENERIC_ROOT        = 1 << 5,  /* If no partition table or only single generic partition, assume it's the root fs */
-        DISSECT_IMAGE_MOUNT_ROOT_ONLY     = 1 << 6,  /* Mount only the root and /usr partitions */
-        DISSECT_IMAGE_MOUNT_NON_ROOT_ONLY = 1 << 7,  /* Mount only the non-root and non-/usr partitions */
-        DISSECT_IMAGE_VALIDATE_OS         = 1 << 8,  /* Refuse mounting images that aren't identifiable as OS images */
-        DISSECT_IMAGE_VALIDATE_OS_EXT     = 1 << 9,  /* Refuse mounting images that aren't identifiable as OS extension images */
-        DISSECT_IMAGE_NO_UDEV             = 1 << 10, /* Don't wait for udev initializing things */
-        DISSECT_IMAGE_RELAX_VAR_CHECK     = 1 << 11, /* Don't insist that the UUID of /var is hashed from /etc/machine-id */
-        DISSECT_IMAGE_FSCK                = 1 << 12, /* File system check the partition before mounting (no effect when combined with DISSECT_IMAGE_READ_ONLY) */
-        DISSECT_IMAGE_NO_PARTITION_TABLE  = 1 << 13, /* Only recognize single file system images */
-        DISSECT_IMAGE_VERITY_SHARE        = 1 << 14, /* When activating a verity device, reuse existing one if already open */
-        DISSECT_IMAGE_MKDIR               = 1 << 15, /* Make top-level directory to mount right before mounting, if missing */
-        DISSECT_IMAGE_USR_NO_ROOT         = 1 << 16, /* If no root fs is in the image, but /usr is, then allow this (so that we can mount the rootfs as tmpfs or so */
-        DISSECT_IMAGE_REQUIRE_ROOT        = 1 << 17, /* Don't accept disks without root partition (or at least /usr partition if DISSECT_IMAGE_USR_NO_ROOT is set) */
-        DISSECT_IMAGE_MOUNT_READ_ONLY     = 1 << 18, /* Make mounts read-only */
-        DISSECT_IMAGE_READ_ONLY           = DISSECT_IMAGE_DEVICE_READ_ONLY |
-                                            DISSECT_IMAGE_MOUNT_READ_ONLY,
-        DISSECT_IMAGE_GROWFS              = 1 << 19, /* Grow file systems in partitions marked for that to the size of the partitions after mount */
-        DISSECT_IMAGE_MOUNT_IDMAPPED      = 1 << 20, /* Mount mounts with kernel 5.12-style userns ID mapping, if file system type doesn't support uid=/gid= */
+        DISSECT_IMAGE_DEVICE_READ_ONLY         = 1 << 0,  /* Make device read-only */
+        DISSECT_IMAGE_DISCARD_ON_LOOP          = 1 << 1,  /* Turn on "discard" if on a loop device and file system supports it */
+        DISSECT_IMAGE_DISCARD                  = 1 << 2,  /* Turn on "discard" if file system supports it, on all block devices */
+        DISSECT_IMAGE_DISCARD_ON_CRYPTO        = 1 << 3,  /* Turn on "discard" also on crypto devices */
+        DISSECT_IMAGE_DISCARD_ANY              = DISSECT_IMAGE_DISCARD_ON_LOOP |
+                                                 DISSECT_IMAGE_DISCARD |
+                                                 DISSECT_IMAGE_DISCARD_ON_CRYPTO,
+        DISSECT_IMAGE_GPT_ONLY                 = 1 << 4,  /* Only recognize images with GPT partition tables */
+        DISSECT_IMAGE_GENERIC_ROOT             = 1 << 5,  /* If no partition table or only single generic partition, assume it's the root fs */
+        DISSECT_IMAGE_MOUNT_ROOT_ONLY          = 1 << 6,  /* Mount only the root and /usr partitions */
+        DISSECT_IMAGE_MOUNT_NON_ROOT_ONLY      = 1 << 7,  /* Mount only the non-root and non-/usr partitions */
+        DISSECT_IMAGE_VALIDATE_OS              = 1 << 8,  /* Refuse mounting images that aren't identifiable as OS images */
+        DISSECT_IMAGE_VALIDATE_OS_EXT          = 1 << 9,  /* Refuse mounting images that aren't identifiable as OS extension images */
+        DISSECT_IMAGE_RELAX_VAR_CHECK          = 1 << 10, /* Don't insist that the UUID of /var is hashed from /etc/machine-id */
+        DISSECT_IMAGE_FSCK                     = 1 << 11, /* File system check the partition before mounting (no effect when combined with DISSECT_IMAGE_READ_ONLY) */
+        DISSECT_IMAGE_NO_PARTITION_TABLE       = 1 << 12, /* Only recognize single file system images */
+        DISSECT_IMAGE_VERITY_SHARE             = 1 << 13, /* When activating a verity device, reuse existing one if already open */
+        DISSECT_IMAGE_MKDIR                    = 1 << 14, /* Make top-level directory to mount right before mounting, if missing */
+        DISSECT_IMAGE_USR_NO_ROOT              = 1 << 15, /* If no root fs is in the image, but /usr is, then allow this (so that we can mount the rootfs as tmpfs or so */
+        DISSECT_IMAGE_REQUIRE_ROOT             = 1 << 16, /* Don't accept disks without root partition (or at least /usr partition if DISSECT_IMAGE_USR_NO_ROOT is set) */
+        DISSECT_IMAGE_MOUNT_READ_ONLY          = 1 << 17, /* Make mounts read-only */
+        DISSECT_IMAGE_READ_ONLY                = DISSECT_IMAGE_DEVICE_READ_ONLY |
+                                                 DISSECT_IMAGE_MOUNT_READ_ONLY,
+        DISSECT_IMAGE_GROWFS                   = 1 << 18, /* Grow file systems in partitions marked for that to the size of the partitions after mount */
+        DISSECT_IMAGE_MOUNT_IDMAPPED           = 1 << 19, /* Mount mounts with kernel 5.12-style userns ID mapping, if file system type doesn't support uid=/gid= */
+        DISSECT_IMAGE_ADD_PARTITION_DEVICES    = 1 << 20, /* Create partition devices via BLKPG_ADD_PARTITION */
+        DISSECT_IMAGE_PIN_PARTITION_DEVICES    = 1 << 21, /* Open dissected partitions and decrypted partitions and pin them by fd */
+        DISSECT_IMAGE_RELAX_SYSEXT_CHECK       = 1 << 22, /* Don't insist that the extension-release file name matches the image name */
+        DISSECT_IMAGE_DISKSEQ_DEVNODE          = 1 << 23, /* Prefer /dev/disk/by-diskseq/… device nodes */
 } DissectImageFlags;
 
 struct DissectedImage {
         bool encrypted:1;
-        bool verity:1;     /* verity available and usable */
-        bool can_verity:1; /* verity available, but not necessarily used */
+        bool has_verity:1;         /* verity available in image, but not necessarily used */
+        bool has_verity_sig:1;     /* pkcs#7 signature embedded in image */
+        bool verity_ready:1;       /* verity available, fully specified and usable */
+        bool verity_sig_ready:1;   /* verity signature logic, fully specified and usable */
         bool single_file_system:1; /* MBR/GPT or single file system */
 
+        LoopDevice *loop;
         DissectedPartition partitions[_PARTITION_DESIGNATOR_MAX];
+        DecryptedImage *decrypted_image;
 
+        uint32_t sector_size;
+
+        /* Meta information extracted from /etc/os-release and similar */
         char *image_name;
+        sd_id128_t image_uuid;
         char *hostname;
         sd_id128_t machine_id;
         char **machine_info;
         char **os_release;
+        char **initrd_release;
         char **extension_release;
+        int has_init_system;
 };
 
 struct MountOptions {
@@ -162,33 +137,57 @@
 DEFINE_TRIVIAL_CLEANUP_FUNC(MountOptions*, mount_options_free_all);
 const char* mount_options_from_designator(const MountOptions *options, PartitionDesignator designator);
 
-int probe_filesystem(const char *node, char **ret_fstype);
-int dissect_image(int fd, const VeritySettings *verity, const MountOptions *mount_options, uint64_t uevent_seqnum_not_before, usec_t timestamp_not_before, DissectImageFlags flags, DissectedImage **ret);
-int dissect_image_and_warn(int fd, const char *name, const VeritySettings *verity, const MountOptions *mount_options, uint64_t uevent_seqnum_not_before, usec_t timestamp_not_before, DissectImageFlags flags, DissectedImage **ret);
+int probe_filesystem_full(int fd, const char *path, uint64_t offset, uint64_t size, char **ret_fstype);
+static inline int probe_filesystem(const char *path, char **ret_fstype) {
+        return probe_filesystem_full(-1, path, 0, UINT64_MAX, ret_fstype);
+}
+int dissect_image_file(
+                const char *path,
+                const VeritySettings *verity,
+                const MountOptions *mount_options,
+                DissectImageFlags flags,
+                DissectedImage **ret);
+int dissect_loop_device(LoopDevice *loop, const VeritySettings *verity, const MountOptions *mount_options, DissectImageFlags flags, DissectedImage **ret);
+int dissect_loop_device_and_warn(LoopDevice *loop, const VeritySettings *verity, const MountOptions *mount_options, DissectImageFlags flags, DissectedImage **ret);
 
 DissectedImage* dissected_image_unref(DissectedImage *m);
 DEFINE_TRIVIAL_CLEANUP_FUNC(DissectedImage*, dissected_image_unref);
 
-int dissected_image_decrypt(DissectedImage *m, const char *passphrase, const VeritySettings *verity, DissectImageFlags flags, DecryptedImage **ret);
-int dissected_image_decrypt_interactively(DissectedImage *m, const char *passphrase, const VeritySettings *verity, DissectImageFlags flags, DecryptedImage **ret);
+int dissected_image_decrypt(DissectedImage *m, const char *passphrase, const VeritySettings *verity, DissectImageFlags flags);
+int dissected_image_decrypt_interactively(DissectedImage *m, const char *passphrase, const VeritySettings *verity, DissectImageFlags flags);
 int dissected_image_mount(DissectedImage *m, const char *dest, uid_t uid_shift, uid_t uid_range, DissectImageFlags flags);
 int dissected_image_mount_and_warn(DissectedImage *m, const char *where, uid_t uid_shift, uid_t uid_range, DissectImageFlags flags);
 
-int dissected_image_acquire_metadata(DissectedImage *m);
+int dissected_image_acquire_metadata(DissectedImage *m, DissectImageFlags extra_flags);
 
+DecryptedImage* decrypted_image_ref(DecryptedImage *p);
 DecryptedImage* decrypted_image_unref(DecryptedImage *p);
 DEFINE_TRIVIAL_CLEANUP_FUNC(DecryptedImage*, decrypted_image_unref);
-int decrypted_image_relinquish(DecryptedImage *d);
 
-const char* partition_designator_to_string(PartitionDesignator d) _const_;
-PartitionDesignator partition_designator_from_string(const char *name) _pure_;
+int dissected_image_relinquish(DissectedImage *m);
 
 int verity_settings_load(VeritySettings *verity, const char *image, const char *root_hash_path, const char *root_hash_sig_path);
 void verity_settings_done(VeritySettings *verity);
 
-bool dissected_image_can_do_verity(const DissectedImage *image, PartitionDesignator d);
-bool dissected_image_has_verity(const DissectedImage *image, PartitionDesignator d);
+static inline bool verity_settings_data_covers(const VeritySettings *verity, PartitionDesignator d) {
+        /* Returns true if the verity settings contain sufficient information to cover the specified partition */
+        return verity &&
+                ((d >= 0 && verity->designator == d) || (d == PARTITION_ROOT && verity->designator < 0)) &&
+                verity->root_hash &&
+                verity->data_path;
+}
 
-int mount_image_privately_interactively(const char *path, DissectImageFlags flags, char **ret_directory, LoopDevice **ret_loop_device, DecryptedImage **ret_decrypted_image);
+int dissected_image_load_verity_sig_partition(DissectedImage *m, int fd, VeritySettings *verity);
 
-int verity_dissect_and_mount(int src_fd, const char *src, const char *dest, const MountOptions *options, const char *required_host_os_release_id, const char *required_host_os_release_version_id, const char *required_host_os_release_sysext_level);
+bool dissected_image_verity_candidate(const DissectedImage *image, PartitionDesignator d);
+bool dissected_image_verity_ready(const DissectedImage *image, PartitionDesignator d);
+bool dissected_image_verity_sig_ready(const DissectedImage *image, PartitionDesignator d);
+
+int mount_image_privately_interactively(const char *path, DissectImageFlags flags, char **ret_directory, LoopDevice **ret_loop_device);
+
+int verity_dissect_and_mount(int src_fd, const char *src, const char *dest, const MountOptions *options, const char *required_host_os_release_id, const char *required_host_os_release_version_id, const char *required_host_os_release_sysext_level, const char *required_sysext_scope);
+
+int dissect_fstype_ok(const char *fstype);
+
+int probe_sector_size(int fd, uint32_t *ret);
+int probe_sector_size_prefer_ioctl(int fd, uint32_t *ret);
diff --git a/src/shared/dlfcn-util.h b/src/shared/dlfcn-util.h
index d786d03..ca632f4 100644
--- a/src/shared/dlfcn-util.h
+++ b/src/shared/dlfcn-util.h
@@ -19,4 +19,16 @@
  * that each library symbol to resolve will be placed in a variable with the "sym_" prefix, i.e. a symbol
  * "foobar" is loaded into a variable "sym_foobar". */
 #define DLSYM_ARG(arg) \
+        ({ assert_cc(__builtin_types_compatible_p(typeof(sym_##arg), typeof(&arg))); &sym_##arg; }), STRINGIFY(arg)
+
+/* libbpf is a bit confused about type-safety and API compatibility. Provide a macro that can tape over that mess. Sad. */
+#define DLSYM_ARG_FORCE(arg) \
         &sym_##arg, STRINGIFY(arg)
+
+static inline void *safe_dlclose(void *p) {
+        if (!p)
+                return NULL;
+
+        assert_se(dlclose(p) == 0);
+        return NULL;
+}
diff --git a/src/shared/dm-util.c b/src/shared/dm-util.c
index b48b9b5..66c1e13 100644
--- a/src/shared/dm-util.c
+++ b/src/shared/dm-util.c
@@ -9,7 +9,7 @@
 #include "string-util.h"
 
 int dm_deferred_remove_cancel(const char *name) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct message {
                 struct dm_ioctl dm_ioctl;
                 struct dm_target_msg dm_target_msg;
diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c
index 787bb8f..620b156 100644
--- a/src/shared/dns-domain.c
+++ b/src/shared/dns-domain.c
@@ -7,6 +7,7 @@
 
 #include "alloc-util.h"
 #include "dns-domain.h"
+#include "glyph-util.h"
 #include "hashmap.h"
 #include "hexdecoct.h"
 #include "hostname-util.h"
@@ -168,24 +169,18 @@
 
         /* Skip current terminal character (and accept domain names ending it ".") */
         if (*terminal == 0)
-                terminal--;
+                terminal = PTR_SUB1(terminal, name);
         if (terminal >= name && *terminal == '.')
-                terminal--;
+                terminal = PTR_SUB1(terminal, name);
 
         /* Point name to the last label, and terminal to the preceding terminal symbol (or make it a NULL pointer) */
-        for (;;) {
-                if (terminal < name) {
-                        /* Reached the first label, so indicate that there are no more */
-                        terminal = NULL;
-                        break;
-                }
-
+        while (terminal) {
                 /* Find the start of the last label */
                 if (*terminal == '.') {
                         const char *y;
                         unsigned slashes = 0;
 
-                        for (y = terminal - 1; y >= name && *y == '\\'; y--)
+                        for (y = PTR_SUB1(terminal, name); y && *y == '\\'; y = PTR_SUB1(y, name))
                                 slashes++;
 
                         if (slashes % 2 == 0) {
@@ -198,7 +193,7 @@
                         }
                 }
 
-                terminal--;
+                terminal = PTR_SUB1(terminal, name);
         }
 
         r = dns_label_unescape(&name, dest, sz, 0);
@@ -241,9 +236,8 @@
                         sz -= 2;
 
                 } else if (IN_SET(*p, '_', '-') ||
-                           (*p >= '0' && *p <= '9') ||
-                           (*p >= 'a' && *p <= 'z') ||
-                           (*p >= 'A' && *p <= 'Z')) {
+                           ascii_isdigit(*p) ||
+                           ascii_isalpha(*p)) {
 
                         /* Proper character */
 
@@ -303,7 +297,6 @@
 int dns_label_apply_idna(const char *encoded, size_t encoded_size, char *decoded, size_t decoded_max) {
         _cleanup_free_ uint32_t *input = NULL;
         size_t input_size, l;
-        const char *p;
         bool contains_8bit = false;
         char buffer[DNS_LABEL_MAX+1];
         int r;
@@ -320,7 +313,7 @@
         if (encoded_size <= 0)
                 return -EINVAL;
 
-        for (p = encoded; p < encoded + encoded_size; p++)
+        for (const char *p = encoded; p < encoded + encoded_size; p++)
                 if ((uint8_t) *p > 127)
                         contains_8bit = true;
 
@@ -456,12 +449,8 @@
                                 return r;
                 }
 
-                if (!first)
-                        n++;
-                else
-                        first = false;
-
-                n += r;
+                n += r + !first;
+                first = false;
         }
 
 finish:
@@ -537,7 +526,18 @@
         }
 }
 
-DEFINE_HASH_OPS(dns_name_hash_ops, char, dns_name_hash_func, dns_name_compare_func);
+DEFINE_HASH_OPS(
+        dns_name_hash_ops,
+        char,
+        dns_name_hash_func,
+        dns_name_compare_func);
+
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+        dns_name_hash_ops_free,
+        char,
+        dns_name_hash_func,
+        dns_name_compare_func,
+        free);
 
 int dns_name_equal(const char *x, const char *y) {
         int r, q;
@@ -680,7 +680,7 @@
         }
 
         /* Found it! Now generate the new name */
-        prefix = strndupa(name, saved_before - name);
+        prefix = strndupa_safe(name, saved_before - name);
 
         r = dns_name_concat(prefix, new_suffix, 0, ret);
         if (r < 0)
@@ -755,9 +755,8 @@
                 return r;
         if (r > 0) {
                 uint8_t a[4];
-                unsigned i;
 
-                for (i = 0; i < ELEMENTSOF(a); i++) {
+                for (size_t i = 0; i < ELEMENTSOF(a); i++) {
                         char label[DNS_LABEL_MAX+1];
 
                         r = dns_label_unescape(&p, label, sizeof label, 0);
@@ -791,9 +790,8 @@
                 return r;
         if (r > 0) {
                 struct in6_addr a;
-                unsigned i;
 
-                for (i = 0; i < ELEMENTSOF(a.s6_addr); i++) {
+                for (size_t i = 0; i < ELEMENTSOF(a.s6_addr); i++) {
                         char label[DNS_LABEL_MAX+1];
                         int x, y;
 
@@ -834,7 +832,6 @@
 }
 
 bool dns_name_is_root(const char *name) {
-
         assert(name);
 
         /* There are exactly two ways to encode the root domain name:
@@ -905,8 +902,6 @@
 }
 
 static bool srv_type_label_is_valid(const char *label, size_t n) {
-        size_t k;
-
         assert(label);
 
         if (n < 2) /* Label needs to be at least 2 chars long */
@@ -916,18 +911,15 @@
                 return false;
 
         /* Second char must be a letter */
-        if (!(label[1] >= 'A' && label[1] <= 'Z') &&
-            !(label[1] >= 'a' && label[1] <= 'z'))
+        if (!ascii_isalpha(label[1]))
                 return false;
 
         /* Third and further chars must be alphanumeric or a hyphen */
-        for (k = 2; k < n; k++) {
-                if (!(label[k] >= 'A' && label[k] <= 'Z') &&
-                    !(label[k] >= 'a' && label[k] <= 'z') &&
-                    !(label[k] >= '0' && label[k] <= '9') &&
+        for (size_t k = 2; k < n; k++)
+                if (!ascii_isalpha(label[k]) &&
+                    !ascii_isdigit(label[k]) &&
                     label[k] != '-')
                         return false;
-        }
 
         return true;
 }
@@ -1028,14 +1020,14 @@
         if (memchr(label, 0, n))
                 return false;
 
-        s = strndupa(label, n);
+        s = strndupa_safe(label, n);
         return dns_service_name_is_valid(s);
 }
 
-int dns_service_split(const char *joined, char **_name, char **_type, char **_domain) {
+int dns_service_split(const char *joined, char **ret_name, char **ret_type, char **ret_domain) {
         _cleanup_free_ char *name = NULL, *type = NULL, *domain = NULL;
-        const char *p = joined, *q = NULL, *d = NULL;
-        char a[DNS_LABEL_MAX], b[DNS_LABEL_MAX], c[DNS_LABEL_MAX];
+        const char *p = joined, *q = NULL, *d = joined;
+        char a[DNS_LABEL_MAX+1], b[DNS_LABEL_MAX+1], c[DNS_LABEL_MAX+1];
         int an, bn, cn, r;
         unsigned x = 0;
 
@@ -1055,6 +1047,9 @@
                         return bn;
 
                 if (bn > 0) {
+                        if (!srv_type_label_is_valid(b, bn))
+                                goto finish;
+
                         x++;
 
                         /* If there was a second label, try to get the third one */
@@ -1063,77 +1058,69 @@
                         if (cn < 0)
                                 return cn;
 
-                        if (cn > 0)
+                        if (cn > 0 && srv_type_label_is_valid(c, cn))
                                 x++;
-                } else
-                        cn = 0;
-        } else
-                an = 0;
-
-        if (x >= 2 && srv_type_label_is_valid(b, bn)) {
-
-                if (x >= 3 && srv_type_label_is_valid(c, cn)) {
-
-                        if (dns_service_name_label_is_valid(a, an)) {
-                                /* OK, got <name> . <type> . <type2> . <domain> */
-
-                                name = strndup(a, an);
-                                if (!name)
-                                        return -ENOMEM;
-
-                                type = strjoin(b, ".", c);
-                                if (!type)
-                                        return -ENOMEM;
-
-                                d = p;
-                                goto finish;
-                        }
-
-                } else if (srv_type_label_is_valid(a, an)) {
-
-                        /* OK, got <type> . <type2> . <domain> */
-
-                        name = NULL;
-
-                        type = strjoin(a, ".", b);
-                        if (!type)
-                                return -ENOMEM;
-
-                        d = q;
-                        goto finish;
                 }
         }
 
-        name = NULL;
-        type = NULL;
-        d = joined;
+        switch (x) {
+        case 2:
+                if (!srv_type_label_is_valid(a, an))
+                        break;
+
+                /* OK, got <type> . <type2> . <domain> */
+
+                name = NULL;
+
+                type = strjoin(a, ".", b);
+                if (!type)
+                        return -ENOMEM;
+
+                d = q;
+                break;
+
+        case 3:
+                if (!dns_service_name_label_is_valid(a, an))
+                        break;
+
+                /* OK, got <name> . <type> . <type2> . <domain> */
+
+                name = strndup(a, an);
+                if (!name)
+                        return -ENOMEM;
+
+                type = strjoin(b, ".", c);
+                if (!type)
+                        return -ENOMEM;
+
+                d = p;
+                break;
+        }
 
 finish:
         r = dns_name_normalize(d, 0, &domain);
         if (r < 0)
                 return r;
 
-        if (_domain)
-                *_domain = TAKE_PTR(domain);
+        if (ret_domain)
+                *ret_domain = TAKE_PTR(domain);
 
-        if (_type)
-                *_type = TAKE_PTR(type);
+        if (ret_type)
+                *ret_type = TAKE_PTR(type);
 
-        if (_name)
-                *_name = TAKE_PTR(name);
+        if (ret_name)
+                *ret_name = TAKE_PTR(name);
 
         return 0;
 }
 
 static int dns_name_build_suffix_table(const char *name, const char *table[]) {
-        const char *p;
+        const char *p = ASSERT_PTR(name);
         unsigned n = 0;
         int r;
 
-        assert(name);
         assert(table);
 
-        p = name;
         for (;;) {
                 if (n > DNS_N_LABELS_MAX)
                         return -EINVAL;
@@ -1300,7 +1287,7 @@
                 r = sym_idn2_lookup_u8((uint8_t*) name, (uint8_t**) &t,
                                        IDN2_NFC_INPUT | IDN2_TRANSITIONAL);
 
-        log_debug("idn2_lookup_u8: %s → %s", name, t);
+        log_debug("idn2_lookup_u8: %s %s %s", name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), t);
         if (r == IDN2_OK) {
                 if (!startswith(name, "xn--")) {
                         _cleanup_free_ char *s = NULL;
@@ -1314,8 +1301,9 @@
                         }
 
                         if (!streq_ptr(name, s)) {
-                                log_debug("idn2 roundtrip failed: \"%s\" → \"%s\" → \"%s\", ignoring.",
-                                          name, t, s);
+                                log_debug("idn2 roundtrip failed: \"%s\" %s \"%s\" %s \"%s\", ignoring.",
+                                          name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), t,
+                                          special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), s);
                                 *ret = NULL;
                                 return 0;
                         }
@@ -1415,3 +1403,18 @@
                         return false;
         }
 }
+
+bool dns_name_dont_resolve(const char *name) {
+
+        /* Never respond to some of the domains listed in RFC6303 */
+        if (dns_name_endswith(name, "0.in-addr.arpa") > 0 ||
+            dns_name_equal(name, "255.255.255.255.in-addr.arpa") > 0 ||
+            dns_name_equal(name, "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa") > 0)
+                return true;
+
+        /* Never respond to some of the domains listed in RFC6761 */
+        if (dns_name_endswith(name, "invalid") > 0)
+                return true;
+
+        return false;
+}
diff --git a/src/shared/dns-domain.h b/src/shared/dns-domain.h
index 24bf00b..331fb89 100644
--- a/src/shared/dns-domain.h
+++ b/src/shared/dns-domain.h
@@ -40,8 +40,8 @@
 static inline int dns_name_is_valid(const char *s) {
         int r;
 
-        /* dns_name_normalize() verifies as a side effect */
-        r = dns_name_normalize(s, 0, NULL);
+        /* dns_name_concat() verifies as a side effect */
+        r = dns_name_concat(s, NULL, 0, NULL);
         if (r == -EINVAL)
                 return 0;
         if (r < 0)
@@ -60,13 +60,10 @@
         return 1;
 }
 
-static inline bool dns_name_is_empty(const char *s) {
-        return isempty(s) || streq(s, ".");
-}
-
 void dns_name_hash_func(const char *s, struct siphash *state);
 int dns_name_compare_func(const char *a, const char *b);
 extern const struct hash_ops dns_name_hash_ops;
+extern const struct hash_ops dns_name_hash_ops_free;
 
 int dns_name_between(const char *a, const char *b, const char *c);
 int dns_name_equal(const char *x, const char *y);
@@ -88,7 +85,7 @@
 bool dns_service_name_is_valid(const char *name);
 
 int dns_service_join(const char *name, const char *type, const char *domain, char **ret);
-int dns_service_split(const char *joined, char **name, char **type, char **domain);
+int dns_service_split(const char *joined, char **ret_name, char **ret_type, char **ret_domain);
 
 int dns_name_suffix(const char *name, unsigned n_labels, const char **ret);
 int dns_name_count_labels(const char *name);
@@ -103,3 +100,5 @@
 int dns_name_is_valid_or_address(const char *name);
 
 int dns_name_dot_suffixed(const char *name);
+
+bool dns_name_dont_resolve(const char *name);
diff --git a/src/shared/dropin.c b/src/shared/dropin.c
index 89f4b8a..375a3ca 100644
--- a/src/shared/dropin.c
+++ b/src/shared/dropin.c
@@ -6,13 +6,13 @@
 #include <stdlib.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "conf-files.h"
 #include "dirent-util.h"
 #include "dropin.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "fileio-label.h"
-#include "fs-util.h"
 #include "hashmap.h"
 #include "log.h"
 #include "macro.h"
@@ -232,7 +232,6 @@
 
         _cleanup_strv_free_ char **dirs = NULL;
         const char *n;
-        char **p;
         int r;
 
         assert(ret);
diff --git a/src/shared/efi-api.c b/src/shared/efi-api.c
new file mode 100644
index 0000000..153e85c
--- /dev/null
+++ b/src/shared/efi-api.c
@@ -0,0 +1,557 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <unistd.h>
+
+#include "alloc-util.h"
+#include "dirent-util.h"
+#include "efi-api.h"
+#include "efivars.h"
+#include "fd-util.h"
+#include "sort-util.h"
+#include "stat-util.h"
+#include "stdio-util.h"
+#include "utf8.h"
+
+#if ENABLE_EFI
+
+#define LOAD_OPTION_ACTIVE            0x00000001
+#define MEDIA_DEVICE_PATH                   0x04
+#define MEDIA_HARDDRIVE_DP                  0x01
+#define MEDIA_FILEPATH_DP                   0x04
+#define SIGNATURE_TYPE_GUID                 0x02
+#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
+#define END_DEVICE_PATH_TYPE                0x7f
+#define END_ENTIRE_DEVICE_PATH_SUBTYPE      0xff
+
+#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI UINT64_C(0x0000000000000001)
+
+#define boot_option__contents                   \
+        {                                       \
+                uint32_t attr;                  \
+                uint16_t path_len;              \
+                uint16_t title[];               \
+        }
+
+struct boot_option boot_option__contents;
+struct boot_option__packed boot_option__contents _packed_;
+assert_cc(offsetof(struct boot_option, title) == offsetof(struct boot_option__packed, title));
+/* sizeof(struct boot_option) != sizeof(struct boot_option__packed), so
+ * the *size* of the structure should not be used anywhere below. */
+
+struct drive_path {
+        uint32_t part_nr;
+        uint64_t part_start;
+        uint64_t part_size;
+        char signature[16];
+        uint8_t mbr_type;
+        uint8_t signature_type;
+} _packed_;
+
+#define device_path__contents                           \
+        {                                               \
+                uint8_t type;                           \
+                uint8_t sub_type;                       \
+                uint16_t length;                        \
+                union {                                 \
+                        uint16_t path[0];               \
+                        struct drive_path drive;        \
+                };                                      \
+        }
+
+struct device_path device_path__contents;
+struct device_path__packed device_path__contents _packed_;
+assert_cc(sizeof(struct device_path) == sizeof(struct device_path__packed));
+
+int efi_reboot_to_firmware_supported(void) {
+        _cleanup_free_ void *v = NULL;
+        static int cache = -1;
+        uint64_t b;
+        size_t s;
+        int r;
+
+        if (cache > 0)
+                return 0;
+        if (cache == 0)
+                return -EOPNOTSUPP;
+
+        if (!is_efi_boot())
+                goto not_supported;
+
+        r = efi_get_variable(EFI_GLOBAL_VARIABLE(OsIndicationsSupported), NULL, &v, &s);
+        if (r == -ENOENT)
+                goto not_supported; /* variable doesn't exist? it's not supported then */
+        if (r < 0)
+                return r;
+        if (s != sizeof(uint64_t))
+                return -EINVAL;
+
+        b = *(uint64_t*) v;
+        if (!(b & EFI_OS_INDICATIONS_BOOT_TO_FW_UI))
+                goto not_supported; /* bit unset? it's not supported then */
+
+        cache = 1;
+        return 0;
+
+not_supported:
+        cache = 0;
+        return -EOPNOTSUPP;
+}
+
+static int get_os_indications(uint64_t *ret) {
+        static struct stat cache_stat = {};
+        _cleanup_free_ void *v = NULL;
+        static uint64_t cache;
+        struct stat new_stat;
+        size_t s;
+        int r;
+
+        assert(ret);
+
+        /* Let's verify general support first */
+        r = efi_reboot_to_firmware_supported();
+        if (r < 0)
+                return r;
+
+        /* stat() the EFI variable, to see if the mtime changed. If it did we need to cache again. */
+        if (stat(EFIVAR_PATH(EFI_GLOBAL_VARIABLE(OsIndications)), &new_stat) < 0) {
+                if (errno != ENOENT)
+                        return -errno;
+
+                /* Doesn't exist? Then we can exit early (also see below) */
+                *ret = 0;
+                return 0;
+
+        } else if (stat_inode_unmodified(&new_stat, &cache_stat)) {
+                /* inode didn't change, we can return the cached value */
+                *ret = cache;
+                return 0;
+        }
+
+        r = efi_get_variable(EFI_GLOBAL_VARIABLE(OsIndications), NULL, &v, &s);
+        if (r == -ENOENT) {
+                /* Some firmware implementations that do support OsIndications and report that with
+                 * OsIndicationsSupported will remove the OsIndications variable when it is unset. Let's
+                 * pretend it's 0 then, to hide this implementation detail. Note that this call will return
+                 * -ENOENT then only if the support for OsIndications is missing entirely, as determined by
+                 * efi_reboot_to_firmware_supported() above. */
+                *ret = 0;
+                return 0;
+        }
+        if (r < 0)
+                return r;
+        if (s != sizeof(uint64_t))
+                return -EINVAL;
+
+        cache_stat = new_stat;
+        *ret = cache = *(uint64_t *)v;
+        return 0;
+}
+
+int efi_get_reboot_to_firmware(void) {
+        int r;
+        uint64_t b;
+
+        r = get_os_indications(&b);
+        if (r < 0)
+                return r;
+
+        return !!(b & EFI_OS_INDICATIONS_BOOT_TO_FW_UI);
+}
+
+int efi_set_reboot_to_firmware(bool value) {
+        int r;
+        uint64_t b, b_new;
+
+        r = get_os_indications(&b);
+        if (r < 0)
+                return r;
+
+        b_new = UPDATE_FLAG(b, EFI_OS_INDICATIONS_BOOT_TO_FW_UI, value);
+
+        /* Avoid writing to efi vars store if we can due to firmware bugs. */
+        if (b != b_new)
+                return efi_set_variable(EFI_GLOBAL_VARIABLE(OsIndications), &b_new, sizeof(uint64_t));
+
+        return 0;
+}
+
+static ssize_t utf16_size(const uint16_t *s, size_t buf_len_bytes) {
+        size_t l = 0;
+
+        /* Returns the size of the string in bytes without the terminating two zero bytes */
+
+        while (l < buf_len_bytes / sizeof(uint16_t)) {
+                if (s[l] == 0)
+                        return (l + 1) * sizeof(uint16_t);
+                l++;
+        }
+
+        return -EINVAL; /* The terminator was not found */
+}
+
+struct guid {
+        uint32_t u1;
+        uint16_t u2;
+        uint16_t u3;
+        uint8_t u4[8];
+} _packed_;
+
+static void efi_guid_to_id128(const void *guid, sd_id128_t *id128) {
+        uint32_t u1;
+        uint16_t u2, u3;
+        const struct guid *uuid = guid;
+
+        memcpy(&u1, &uuid->u1, sizeof(uint32_t));
+        id128->bytes[0] = (u1 >> 24) & 0xff;
+        id128->bytes[1] = (u1 >> 16) & 0xff;
+        id128->bytes[2] = (u1 >> 8) & 0xff;
+        id128->bytes[3] = u1 & 0xff;
+        memcpy(&u2, &uuid->u2, sizeof(uint16_t));
+        id128->bytes[4] = (u2 >> 8) & 0xff;
+        id128->bytes[5] = u2 & 0xff;
+        memcpy(&u3, &uuid->u3, sizeof(uint16_t));
+        id128->bytes[6] = (u3 >> 8) & 0xff;
+        id128->bytes[7] = u3 & 0xff;
+        memcpy(&id128->bytes[8], uuid->u4, sizeof(uuid->u4));
+}
+
+int efi_get_boot_option(
+                uint16_t id,
+                char **ret_title,
+                sd_id128_t *ret_part_uuid,
+                char **ret_path,
+                bool *ret_active) {
+
+        char variable[STRLEN(EFI_GLOBAL_VARIABLE_STR("Boot")) + 4 + 1];
+        _cleanup_free_ uint8_t *buf = NULL;
+        size_t l;
+        struct boot_option *header;
+        ssize_t title_size;
+        _cleanup_free_ char *s = NULL, *p = NULL;
+        sd_id128_t p_uuid = SD_ID128_NULL;
+        int r;
+
+        if (!is_efi_boot())
+                return -EOPNOTSUPP;
+
+        xsprintf(variable, EFI_GLOBAL_VARIABLE_STR("Boot%04X"), id);
+        r = efi_get_variable(variable, NULL, (void **)&buf, &l);
+        if (r < 0)
+                return r;
+        if (l < offsetof(struct boot_option, title))
+                return -ENOENT;
+
+        header = (struct boot_option *)buf;
+        title_size = utf16_size(header->title, l - offsetof(struct boot_option, title));
+        if (title_size < 0)
+                return title_size;
+
+        if (ret_title) {
+                s = utf16_to_utf8(header->title, title_size);
+                if (!s)
+                        return -ENOMEM;
+        }
+
+        if (header->path_len > 0) {
+                uint8_t *dbuf;
+                size_t dnext, doff;
+
+                doff = offsetof(struct boot_option, title) + title_size;
+                dbuf = buf + doff;
+                if (header->path_len > l - doff)
+                        return -EINVAL;
+
+                dnext = 0;
+                while (dnext < header->path_len) {
+                        struct device_path *dpath;
+
+                        dpath = (struct device_path *)(dbuf + dnext);
+                        if (dpath->length < 4)
+                                break;
+
+                        /* Type 0x7F – End of Hardware Device Path, Sub-Type 0xFF – End Entire Device Path */
+                        if (dpath->type == END_DEVICE_PATH_TYPE && dpath->sub_type == END_ENTIRE_DEVICE_PATH_SUBTYPE)
+                                break;
+
+                        dnext += dpath->length;
+
+                        /* Type 0x04 – Media Device Path */
+                        if (dpath->type != MEDIA_DEVICE_PATH)
+                                continue;
+
+                        /* Sub-Type 1 – Hard Drive */
+                        if (dpath->sub_type == MEDIA_HARDDRIVE_DP) {
+                                /* 0x02 – GUID Partition Table */
+                                if (dpath->drive.mbr_type != MBR_TYPE_EFI_PARTITION_TABLE_HEADER)
+                                        continue;
+
+                                /* 0x02 – GUID signature */
+                                if (dpath->drive.signature_type != SIGNATURE_TYPE_GUID)
+                                        continue;
+
+                                if (ret_part_uuid)
+                                        efi_guid_to_id128(dpath->drive.signature, &p_uuid);
+                                continue;
+                        }
+
+                        /* Sub-Type 4 – File Path */
+                        if (dpath->sub_type == MEDIA_FILEPATH_DP && !p && ret_path) {
+                                p = utf16_to_utf8(dpath->path, dpath->length-4);
+                                if (!p)
+                                        return  -ENOMEM;
+
+                                efi_tilt_backslashes(p);
+                                continue;
+                        }
+                }
+        }
+
+        if (ret_title)
+                *ret_title = TAKE_PTR(s);
+        if (ret_part_uuid)
+                *ret_part_uuid = p_uuid;
+        if (ret_path)
+                *ret_path = TAKE_PTR(p);
+        if (ret_active)
+                *ret_active = header->attr & LOAD_OPTION_ACTIVE;
+
+        return 0;
+}
+
+static void to_utf16(uint16_t *dest, const char *src) {
+        int i;
+
+        for (i = 0; src[i] != '\0'; i++)
+                dest[i] = src[i];
+        dest[i] = '\0';
+}
+
+static void id128_to_efi_guid(sd_id128_t id, void *guid) {
+        struct guid uuid = {
+                .u1 = id.bytes[0] << 24 | id.bytes[1] << 16 | id.bytes[2] << 8 | id.bytes[3],
+                .u2 = id.bytes[4] << 8 | id.bytes[5],
+                .u3 = id.bytes[6] << 8 | id.bytes[7],
+        };
+        memcpy(uuid.u4, id.bytes+8, sizeof(uuid.u4));
+        memcpy(guid, &uuid, sizeof(uuid));
+}
+
+static uint16_t *tilt_slashes(uint16_t *s) {
+        for (uint16_t *p = s; *p; p++)
+                if (*p == '/')
+                        *p = '\\';
+
+        return s;
+}
+
+int efi_add_boot_option(
+                uint16_t id,
+                const char *title,
+                uint32_t part,
+                uint64_t pstart,
+                uint64_t psize,
+                sd_id128_t part_uuid,
+                const char *path) {
+
+        size_t size, title_len, path_len;
+        _cleanup_free_ char *buf = NULL;
+        struct boot_option *option;
+        struct device_path *devicep;
+        char variable[STRLEN(EFI_GLOBAL_VARIABLE_STR("Boot")) + 4 + 1];
+
+        if (!is_efi_boot())
+                return -EOPNOTSUPP;
+
+        title_len = (strlen(title)+1) * 2;
+        path_len = (strlen(path)+1) * 2;
+
+        buf = malloc0(offsetof(struct boot_option, title) + title_len +
+                      sizeof(struct drive_path) +
+                      sizeof(struct device_path) + path_len);
+        if (!buf)
+                return -ENOMEM;
+
+        /* header */
+        option = (struct boot_option *)buf;
+        option->attr = LOAD_OPTION_ACTIVE;
+        option->path_len = offsetof(struct device_path, drive) + sizeof(struct drive_path) +
+                           offsetof(struct device_path, path) + path_len +
+                           offsetof(struct device_path, path);
+        to_utf16(option->title, title);
+        size = offsetof(struct boot_option, title) + title_len;
+
+        /* partition info */
+        devicep = (struct device_path *)(buf + size);
+        devicep->type = MEDIA_DEVICE_PATH;
+        devicep->sub_type = MEDIA_HARDDRIVE_DP;
+        devicep->length = offsetof(struct device_path, drive) + sizeof(struct drive_path);
+        memcpy(&devicep->drive.part_nr, &part, sizeof(uint32_t));
+        memcpy(&devicep->drive.part_start, &pstart, sizeof(uint64_t));
+        memcpy(&devicep->drive.part_size, &psize, sizeof(uint64_t));
+        id128_to_efi_guid(part_uuid, devicep->drive.signature);
+        devicep->drive.mbr_type = MBR_TYPE_EFI_PARTITION_TABLE_HEADER;
+        devicep->drive.signature_type = SIGNATURE_TYPE_GUID;
+        size += devicep->length;
+
+        /* path to loader */
+        devicep = (struct device_path *)(buf + size);
+        devicep->type = MEDIA_DEVICE_PATH;
+        devicep->sub_type = MEDIA_FILEPATH_DP;
+        devicep->length = offsetof(struct device_path, path) + path_len;
+        to_utf16(devicep->path, path);
+        tilt_slashes(devicep->path);
+        size += devicep->length;
+
+        /* end of path */
+        devicep = (struct device_path *)(buf + size);
+        devicep->type = END_DEVICE_PATH_TYPE;
+        devicep->sub_type = END_ENTIRE_DEVICE_PATH_SUBTYPE;
+        devicep->length = offsetof(struct device_path, path);
+        size += devicep->length;
+
+        xsprintf(variable, EFI_GLOBAL_VARIABLE_STR("Boot%04X"), id);
+        return efi_set_variable(variable, buf, size);
+}
+
+int efi_remove_boot_option(uint16_t id) {
+        char variable[STRLEN(EFI_GLOBAL_VARIABLE_STR("Boot")) + 4 + 1];
+
+        if (!is_efi_boot())
+                return -EOPNOTSUPP;
+
+        xsprintf(variable, EFI_GLOBAL_VARIABLE_STR("Boot%04X"), id);
+        return efi_set_variable(variable, NULL, 0);
+}
+
+int efi_get_boot_order(uint16_t **ret_order) {
+        _cleanup_free_ void *buf = NULL;
+        size_t l;
+        int r;
+
+        assert(ret_order);
+
+        if (!is_efi_boot())
+                return -EOPNOTSUPP;
+
+        r = efi_get_variable(EFI_GLOBAL_VARIABLE(BootOrder), NULL, &buf, &l);
+        if (r < 0)
+                return r;
+
+        if (l <= 0)
+                return -ENOENT;
+
+        if (l % sizeof(uint16_t) > 0 ||
+            l / sizeof(uint16_t) > INT_MAX)
+                return -EINVAL;
+
+        *ret_order = TAKE_PTR(buf);
+        return (int) (l / sizeof(uint16_t));
+}
+
+int efi_set_boot_order(const uint16_t *order, size_t n) {
+
+        if (!is_efi_boot())
+                return -EOPNOTSUPP;
+
+        return efi_set_variable(EFI_GLOBAL_VARIABLE(BootOrder), order, n * sizeof(uint16_t));
+}
+
+static int boot_id_hex(const char s[static 4]) {
+        int id = 0;
+
+        assert(s);
+
+        for (int i = 0; i < 4; i++)
+                if (s[i] >= '0' && s[i] <= '9')
+                        id |= (s[i] - '0') << (3 - i) * 4;
+                else if (s[i] >= 'A' && s[i] <= 'F')
+                        id |= (s[i] - 'A' + 10) << (3 - i) * 4;
+                else
+                        return -EINVAL;
+
+        return id;
+}
+
+static int cmp_uint16(const uint16_t *a, const uint16_t *b) {
+        return CMP(*a, *b);
+}
+
+int efi_get_boot_options(uint16_t **ret_options) {
+        _cleanup_closedir_ DIR *dir = NULL;
+        _cleanup_free_ uint16_t *list = NULL;
+        int count = 0;
+
+        assert(ret_options);
+
+        if (!is_efi_boot())
+                return -EOPNOTSUPP;
+
+        dir = opendir(EFIVAR_PATH("."));
+        if (!dir)
+                return -errno;
+
+        FOREACH_DIRENT(de, dir, return -errno) {
+                int id;
+
+                if (strncmp(de->d_name, "Boot", 4) != 0)
+                        continue;
+
+                if (strlen(de->d_name) != 45)
+                        continue;
+
+                if (strcmp(de->d_name + 8, EFI_GLOBAL_VARIABLE_STR("")) != 0)  /* generate variable suffix using macro */
+                        continue;
+
+                id = boot_id_hex(de->d_name + 4);
+                if (id < 0)
+                        continue;
+
+                if (!GREEDY_REALLOC(list, count + 1))
+                        return -ENOMEM;
+
+                list[count++] = id;
+        }
+
+        typesafe_qsort(list, count, cmp_uint16);
+
+        *ret_options = TAKE_PTR(list);
+
+        return count;
+}
+
+bool efi_has_tpm2(void) {
+        static int cache = -1;
+
+        /* Returns whether the system has a TPM2 chip which is known to the EFI firmware. */
+
+        if (cache >= 0)
+                return cache;
+
+        /* First, check if we are on an EFI boot at all. */
+        if (!is_efi_boot()) {
+                cache = 0;
+                return cache;
+        }
+
+        /* Then, check if the ACPI table "TPM2" exists, which is the TPM2 event log table, see:
+         * https://trustedcomputinggroup.org/wp-content/uploads/TCG_ACPIGeneralSpecification_v1.20_r8.pdf
+         * This table exists whenever the firmware is hooked up to TPM2. */
+        cache = access("/sys/firmware/acpi/tables/TPM2", F_OK) >= 0;
+        if (cache)
+                return cache;
+
+        if (errno != ENOENT)
+                log_debug_errno(errno, "Unable to test whether /sys/firmware/acpi/tables/TPM2 exists, assuming it doesn't: %m");
+
+        /* As the last try, check if the EFI firmware provides the EFI_TCG2_FINAL_EVENTS_TABLE
+         * stored in EFI configuration table, see:
+         * https://trustedcomputinggroup.org/wp-content/uploads/EFI-Protocol-Specification-rev13-160330final.pdf
+         */
+        cache = access("/sys/kernel/security/tpm0/binary_bios_measurements", F_OK) >= 0;
+        if (!cache && errno != ENOENT)
+                log_debug_errno(errno, "Unable to test whether /sys/kernel/security/tpm0/binary_bios_measurements exists, assuming it doesn't: %m");
+
+        return cache;
+}
+
+#endif
diff --git a/src/shared/efi-api.h b/src/shared/efi-api.h
new file mode 100644
index 0000000..c36524f
--- /dev/null
+++ b/src/shared/efi-api.h
@@ -0,0 +1,71 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "efivars-fundamental.h"
+#include "efivars.h"
+#include "string-util.h"
+
+/* Various calls for interfacing with EFI variables from the official UEFI specs. */
+
+#if ENABLE_EFI
+
+int efi_reboot_to_firmware_supported(void);
+int efi_get_reboot_to_firmware(void);
+int efi_set_reboot_to_firmware(bool value);
+
+int efi_get_boot_option(uint16_t nr, char **ret_title, sd_id128_t *ret_part_uuid, char **ret_path, bool *ret_active);
+int efi_add_boot_option(uint16_t id, const char *title, uint32_t part, uint64_t pstart, uint64_t psize, sd_id128_t part_uuid, const char *path);
+int efi_remove_boot_option(uint16_t id);
+int efi_get_boot_order(uint16_t **ret_order);
+int efi_set_boot_order(const uint16_t *order, size_t n);
+int efi_get_boot_options(uint16_t **ret_options);
+
+bool efi_has_tpm2(void);
+
+#else
+
+static inline int efi_reboot_to_firmware_supported(void) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_get_reboot_to_firmware(void) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_set_reboot_to_firmware(bool value) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_get_boot_option(uint16_t nr, char **ret_title, sd_id128_t *ret_part_uuid, char **ret_path, bool *ret_active) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_add_boot_option(uint16_t id, const char *title, uint32_t part, uint64_t pstart, uint64_t psize, sd_id128_t part_uuid, const char *path) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_remove_boot_option(uint16_t id) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_get_boot_order(uint16_t **ret_order) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_set_boot_order(const uint16_t *order, size_t n) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_get_boot_options(uint16_t **ret_options) {
+        return -EOPNOTSUPP;
+}
+
+static inline bool efi_has_tpm2(void) {
+        return false;
+}
+
+#endif
+
+static inline char *efi_tilt_backslashes(char *s) {
+        return string_replace_char(s, '\\', '/');
+}
diff --git a/src/shared/efi-loader.c b/src/shared/efi-loader.c
index f5076fc..f77f835 100644
--- a/src/shared/efi-loader.c
+++ b/src/shared/efi-loader.c
@@ -1,538 +1,24 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
 #include "alloc-util.h"
-#include "dirent-util.h"
 #include "efi-loader.h"
-#include "efivars.h"
-#include "fd-util.h"
-#include "io-util.h"
+#include "env-util.h"
 #include "parse-util.h"
-#include "sort-util.h"
+#include "path-util.h"
 #include "stat-util.h"
-#include "stdio-util.h"
-#include "string-util.h"
+#include "strv.h"
+#include "tpm-pcr.h"
 #include "utf8.h"
-#include "virt.h"
 
 #if ENABLE_EFI
 
-#define LOAD_OPTION_ACTIVE            0x00000001
-#define MEDIA_DEVICE_PATH                   0x04
-#define MEDIA_HARDDRIVE_DP                  0x01
-#define MEDIA_FILEPATH_DP                   0x04
-#define SIGNATURE_TYPE_GUID                 0x02
-#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
-#define END_DEVICE_PATH_TYPE                0x7f
-#define END_ENTIRE_DEVICE_PATH_SUBTYPE      0xff
-#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI    0x0000000000000001
-
-#define boot_option__contents                   \
-        {                                       \
-                uint32_t attr;                  \
-                uint16_t path_len;              \
-                uint16_t title[];               \
-        }
-
-struct boot_option boot_option__contents;
-struct boot_option__packed boot_option__contents _packed_;
-assert_cc(offsetof(struct boot_option, title) == offsetof(struct boot_option__packed, title));
-/* sizeof(struct boot_option) != sizeof(struct boot_option__packed), so
- * the *size* of the structure should not be used anywhere below. */
-
-struct drive_path {
-        uint32_t part_nr;
-        uint64_t part_start;
-        uint64_t part_size;
-        char signature[16];
-        uint8_t mbr_type;
-        uint8_t signature_type;
-} _packed_;
-
-#define device_path__contents                           \
-        {                                               \
-                uint8_t type;                           \
-                uint8_t sub_type;                       \
-                uint16_t length;                        \
-                union {                                 \
-                        uint16_t path[0];               \
-                        struct drive_path drive;        \
-                };                                      \
-        }
-
-struct device_path device_path__contents;
-struct device_path__packed device_path__contents _packed_;
-assert_cc(sizeof(struct device_path) == sizeof(struct device_path__packed));
-
-int efi_reboot_to_firmware_supported(void) {
-        _cleanup_free_ void *v = NULL;
-        static int cache = -1;
-        uint64_t b;
-        size_t s;
-        int r;
-
-        if (cache > 0)
-                return 0;
-        if (cache == 0)
-                return -EOPNOTSUPP;
-
-        if (!is_efi_boot())
-                goto not_supported;
-
-        r = efi_get_variable(EFI_GLOBAL_VARIABLE(OsIndicationsSupported), NULL, &v, &s);
-        if (r == -ENOENT)
-                goto not_supported; /* variable doesn't exist? it's not supported then */
-        if (r < 0)
-                return r;
-        if (s != sizeof(uint64_t))
-                return -EINVAL;
-
-        b = *(uint64_t*) v;
-        if (!(b & EFI_OS_INDICATIONS_BOOT_TO_FW_UI))
-                goto not_supported; /* bit unset? it's not supported then */
-
-        cache = 1;
-        return 0;
-
-not_supported:
-        cache = 0;
-        return -EOPNOTSUPP;
-}
-
-static int get_os_indications(uint64_t *ret) {
-        static struct stat cache_stat = {};
-        _cleanup_free_ void *v = NULL;
-        static uint64_t cache;
-        struct stat new_stat;
-        size_t s;
-        int r;
-
-        assert(ret);
-
-        /* Let's verify general support first */
-        r = efi_reboot_to_firmware_supported();
-        if (r < 0)
-                return r;
-
-        /* stat() the EFI variable, to see if the mtime changed. If it did we need to cache again. */
-        if (stat(EFIVAR_PATH(EFI_GLOBAL_VARIABLE(OsIndications)), &new_stat) < 0) {
-                if (errno != ENOENT)
-                        return -errno;
-
-                /* Doesn't exist? Then we can exit early (also see below) */
-                *ret = 0;
-                return 0;
-
-        } else if (stat_inode_unmodified(&new_stat, &cache_stat)) {
-                /* inode didn't change, we can return the cached value */
-                *ret = cache;
-                return 0;
-        }
-
-        r = efi_get_variable(EFI_GLOBAL_VARIABLE(OsIndications), NULL, &v, &s);
-        if (r == -ENOENT) {
-                /* Some firmware implementations that do support OsIndications and report that with
-                 * OsIndicationsSupported will remove the OsIndications variable when it is unset. Let's
-                 * pretend it's 0 then, to hide this implementation detail. Note that this call will return
-                 * -ENOENT then only if the support for OsIndications is missing entirely, as determined by
-                 * efi_reboot_to_firmware_supported() above. */
-                *ret = 0;
-                return 0;
-        }
-        if (r < 0)
-                return r;
-        if (s != sizeof(uint64_t))
-                return -EINVAL;
-
-        cache_stat = new_stat;
-        *ret = cache = *(uint64_t *)v;
-        return 0;
-}
-
-int efi_get_reboot_to_firmware(void) {
-        int r;
-        uint64_t b;
-
-        r = get_os_indications(&b);
-        if (r < 0)
-                return r;
-
-        return !!(b & EFI_OS_INDICATIONS_BOOT_TO_FW_UI);
-}
-
-int efi_set_reboot_to_firmware(bool value) {
-        int r;
-        uint64_t b, b_new;
-
-        r = get_os_indications(&b);
-        if (r < 0)
-                return r;
-
-        b_new = UPDATE_FLAG(b, EFI_OS_INDICATIONS_BOOT_TO_FW_UI, value);
-
-        /* Avoid writing to efi vars store if we can due to firmware bugs. */
-        if (b != b_new)
-                return efi_set_variable(EFI_GLOBAL_VARIABLE(OsIndications), &b_new, sizeof(uint64_t));
-
-        return 0;
-}
-
-static ssize_t utf16_size(const uint16_t *s, size_t buf_len_bytes) {
-        size_t l = 0;
-
-        /* Returns the size of the string in bytes without the terminating two zero bytes */
-
-        if (buf_len_bytes % sizeof(uint16_t) != 0)
-                return -EINVAL;
-
-        while (l < buf_len_bytes / sizeof(uint16_t)) {
-                if (s[l] == 0)
-                        return (l + 1) * sizeof(uint16_t);
-                l++;
-        }
-
-        return -EINVAL; /* The terminator was not found */
-}
-
-struct guid {
-        uint32_t u1;
-        uint16_t u2;
-        uint16_t u3;
-        uint8_t u4[8];
-} _packed_;
-
-static void efi_guid_to_id128(const void *guid, sd_id128_t *id128) {
-        uint32_t u1;
-        uint16_t u2, u3;
-        const struct guid *uuid = guid;
-
-        memcpy(&u1, &uuid->u1, sizeof(uint32_t));
-        id128->bytes[0] = (u1 >> 24) & 0xff;
-        id128->bytes[1] = (u1 >> 16) & 0xff;
-        id128->bytes[2] = (u1 >> 8) & 0xff;
-        id128->bytes[3] = u1 & 0xff;
-        memcpy(&u2, &uuid->u2, sizeof(uint16_t));
-        id128->bytes[4] = (u2 >> 8) & 0xff;
-        id128->bytes[5] = u2 & 0xff;
-        memcpy(&u3, &uuid->u3, sizeof(uint16_t));
-        id128->bytes[6] = (u3 >> 8) & 0xff;
-        id128->bytes[7] = u3 & 0xff;
-        memcpy(&id128->bytes[8], uuid->u4, sizeof(uuid->u4));
-}
-
-int efi_get_boot_option(
-                uint16_t id,
-                char **title,
-                sd_id128_t *part_uuid,
-                char **path,
-                bool *active) {
-
-        char variable[STRLEN(EFI_GLOBAL_VARIABLE_STR("Boot")) + 4 + 1];
-        _cleanup_free_ uint8_t *buf = NULL;
-        size_t l;
-        struct boot_option *header;
-        ssize_t title_size;
-        _cleanup_free_ char *s = NULL, *p = NULL;
-        sd_id128_t p_uuid = SD_ID128_NULL;
-        int r;
-
-        if (!is_efi_boot())
-                return -EOPNOTSUPP;
-
-        xsprintf(variable, EFI_GLOBAL_VARIABLE_STR("Boot%04X"), id);
-        r = efi_get_variable(variable, NULL, (void **)&buf, &l);
-        if (r < 0)
-                return r;
-        if (l < offsetof(struct boot_option, title))
-                return -ENOENT;
-
-        header = (struct boot_option *)buf;
-        title_size = utf16_size(header->title, l - offsetof(struct boot_option, title));
-        if (title_size < 0)
-                return title_size;
-
-        if (title) {
-                s = utf16_to_utf8(header->title, title_size);
-                if (!s)
-                        return -ENOMEM;
-        }
-
-        if (header->path_len > 0) {
-                uint8_t *dbuf;
-                size_t dnext, doff;
-
-                doff = offsetof(struct boot_option, title) + title_size;
-                dbuf = buf + doff;
-                if (header->path_len > l - doff)
-                        return -EINVAL;
-
-                dnext = 0;
-                while (dnext < header->path_len) {
-                        struct device_path *dpath;
-
-                        dpath = (struct device_path *)(dbuf + dnext);
-                        if (dpath->length < 4)
-                                break;
-
-                        /* Type 0x7F – End of Hardware Device Path, Sub-Type 0xFF – End Entire Device Path */
-                        if (dpath->type == END_DEVICE_PATH_TYPE && dpath->sub_type == END_ENTIRE_DEVICE_PATH_SUBTYPE)
-                                break;
-
-                        dnext += dpath->length;
-
-                        /* Type 0x04 – Media Device Path */
-                        if (dpath->type != MEDIA_DEVICE_PATH)
-                                continue;
-
-                        /* Sub-Type 1 – Hard Drive */
-                        if (dpath->sub_type == MEDIA_HARDDRIVE_DP) {
-                                /* 0x02 – GUID Partition Table */
-                                if (dpath->drive.mbr_type != MBR_TYPE_EFI_PARTITION_TABLE_HEADER)
-                                        continue;
-
-                                /* 0x02 – GUID signature */
-                                if (dpath->drive.signature_type != SIGNATURE_TYPE_GUID)
-                                        continue;
-
-                                if (part_uuid)
-                                        efi_guid_to_id128(dpath->drive.signature, &p_uuid);
-                                continue;
-                        }
-
-                        /* Sub-Type 4 – File Path */
-                        if (dpath->sub_type == MEDIA_FILEPATH_DP && !p && path) {
-                                p = utf16_to_utf8(dpath->path, dpath->length-4);
-                                if (!p)
-                                        return  -ENOMEM;
-
-                                efi_tilt_backslashes(p);
-                                continue;
-                        }
-                }
-        }
-
-        if (title)
-                *title = TAKE_PTR(s);
-        if (part_uuid)
-                *part_uuid = p_uuid;
-        if (path)
-                *path = TAKE_PTR(p);
-        if (active)
-                *active = header->attr & LOAD_OPTION_ACTIVE;
-
-        return 0;
-}
-
-static void to_utf16(uint16_t *dest, const char *src) {
-        int i;
-
-        for (i = 0; src[i] != '\0'; i++)
-                dest[i] = src[i];
-        dest[i] = '\0';
-}
-
-static void id128_to_efi_guid(sd_id128_t id, void *guid) {
-        struct guid uuid = {
-                .u1 = id.bytes[0] << 24 | id.bytes[1] << 16 | id.bytes[2] << 8 | id.bytes[3],
-                .u2 = id.bytes[4] << 8 | id.bytes[5],
-                .u3 = id.bytes[6] << 8 | id.bytes[7],
-        };
-        memcpy(uuid.u4, id.bytes+8, sizeof(uuid.u4));
-        memcpy(guid, &uuid, sizeof(uuid));
-}
-
-static uint16_t *tilt_slashes(uint16_t *s) {
-        for (uint16_t *p = s; *p; p++)
-                if (*p == '/')
-                        *p = '\\';
-
-        return s;
-}
-
-int efi_add_boot_option(
-                uint16_t id,
-                const char *title,
-                uint32_t part,
-                uint64_t pstart,
-                uint64_t psize,
-                sd_id128_t part_uuid,
-                const char *path) {
-
-        size_t size, title_len, path_len;
-        _cleanup_free_ char *buf = NULL;
-        struct boot_option *option;
-        struct device_path *devicep;
-        char variable[STRLEN(EFI_GLOBAL_VARIABLE_STR("Boot")) + 4 + 1];
-
-        if (!is_efi_boot())
-                return -EOPNOTSUPP;
-
-        title_len = (strlen(title)+1) * 2;
-        path_len = (strlen(path)+1) * 2;
-
-        buf = malloc0(offsetof(struct boot_option, title) + title_len +
-                      sizeof(struct drive_path) +
-                      sizeof(struct device_path) + path_len);
-        if (!buf)
-                return -ENOMEM;
-
-        /* header */
-        option = (struct boot_option *)buf;
-        option->attr = LOAD_OPTION_ACTIVE;
-        option->path_len = offsetof(struct device_path, drive) + sizeof(struct drive_path) +
-                           offsetof(struct device_path, path) + path_len +
-                           offsetof(struct device_path, path);
-        to_utf16(option->title, title);
-        size = offsetof(struct boot_option, title) + title_len;
-
-        /* partition info */
-        devicep = (struct device_path *)(buf + size);
-        devicep->type = MEDIA_DEVICE_PATH;
-        devicep->sub_type = MEDIA_HARDDRIVE_DP;
-        devicep->length = offsetof(struct device_path, drive) + sizeof(struct drive_path);
-        memcpy(&devicep->drive.part_nr, &part, sizeof(uint32_t));
-        memcpy(&devicep->drive.part_start, &pstart, sizeof(uint64_t));
-        memcpy(&devicep->drive.part_size, &psize, sizeof(uint64_t));
-        id128_to_efi_guid(part_uuid, devicep->drive.signature);
-        devicep->drive.mbr_type = MBR_TYPE_EFI_PARTITION_TABLE_HEADER;
-        devicep->drive.signature_type = SIGNATURE_TYPE_GUID;
-        size += devicep->length;
-
-        /* path to loader */
-        devicep = (struct device_path *)(buf + size);
-        devicep->type = MEDIA_DEVICE_PATH;
-        devicep->sub_type = MEDIA_FILEPATH_DP;
-        devicep->length = offsetof(struct device_path, path) + path_len;
-        to_utf16(devicep->path, path);
-        tilt_slashes(devicep->path);
-        size += devicep->length;
-
-        /* end of path */
-        devicep = (struct device_path *)(buf + size);
-        devicep->type = END_DEVICE_PATH_TYPE;
-        devicep->sub_type = END_ENTIRE_DEVICE_PATH_SUBTYPE;
-        devicep->length = offsetof(struct device_path, path);
-        size += devicep->length;
-
-        xsprintf(variable, EFI_GLOBAL_VARIABLE_STR("Boot%04X"), id);
-        return efi_set_variable(variable, buf, size);
-}
-
-int efi_remove_boot_option(uint16_t id) {
-        char variable[STRLEN(EFI_GLOBAL_VARIABLE_STR("Boot")) + 4 + 1];
-
-        if (!is_efi_boot())
-                return -EOPNOTSUPP;
-
-        xsprintf(variable, EFI_GLOBAL_VARIABLE_STR("Boot%04X"), id);
-        return efi_set_variable(variable, NULL, 0);
-}
-
-int efi_get_boot_order(uint16_t **order) {
-        _cleanup_free_ void *buf = NULL;
-        size_t l;
-        int r;
-
-        if (!is_efi_boot())
-                return -EOPNOTSUPP;
-
-        r = efi_get_variable(EFI_GLOBAL_VARIABLE(BootOrder), NULL, &buf, &l);
-        if (r < 0)
-                return r;
-
-        if (l <= 0)
-                return -ENOENT;
-
-        if (l % sizeof(uint16_t) > 0 ||
-            l / sizeof(uint16_t) > INT_MAX)
-                return -EINVAL;
-
-        *order = TAKE_PTR(buf);
-        return (int) (l / sizeof(uint16_t));
-}
-
-int efi_set_boot_order(uint16_t *order, size_t n) {
-
-        if (!is_efi_boot())
-                return -EOPNOTSUPP;
-
-        return efi_set_variable(EFI_GLOBAL_VARIABLE(BootOrder), order, n * sizeof(uint16_t));
-}
-
-static int boot_id_hex(const char s[static 4]) {
-        int id = 0;
-
-        assert(s);
-
-        for (int i = 0; i < 4; i++)
-                if (s[i] >= '0' && s[i] <= '9')
-                        id |= (s[i] - '0') << (3 - i) * 4;
-                else if (s[i] >= 'A' && s[i] <= 'F')
-                        id |= (s[i] - 'A' + 10) << (3 - i) * 4;
-                else
-                        return -EINVAL;
-
-        return id;
-}
-
-static int cmp_uint16(const uint16_t *a, const uint16_t *b) {
-        return CMP(*a, *b);
-}
-
-int efi_get_boot_options(uint16_t **options) {
-        _cleanup_closedir_ DIR *dir = NULL;
-        _cleanup_free_ uint16_t *list = NULL;
-        struct dirent *de;
-        int count = 0;
-
-        assert(options);
-
-        if (!is_efi_boot())
-                return -EOPNOTSUPP;
-
-        dir = opendir(EFIVAR_PATH("."));
-        if (!dir)
-                return -errno;
-
-        FOREACH_DIRENT(de, dir, return -errno) {
-                int id;
-
-                if (strncmp(de->d_name, "Boot", 4) != 0)
-                        continue;
-
-                if (strlen(de->d_name) != 45)
-                        continue;
-
-                if (strcmp(de->d_name + 8, EFI_GLOBAL_VARIABLE_STR("")) != 0)  /* generate variable suffix using macro */
-                        continue;
-
-                id = boot_id_hex(de->d_name + 4);
-                if (id < 0)
-                        continue;
-
-                if (!GREEDY_REALLOC(list, count + 1))
-                        return -ENOMEM;
-
-                list[count++] = id;
-        }
-
-        typesafe_qsort(list, count, cmp_uint16);
-
-        *options = TAKE_PTR(list);
-
-        return count;
-}
-
-static int read_usec(const char *variable, usec_t *u) {
+static int read_usec(const char *variable, usec_t *ret) {
         _cleanup_free_ char *j = NULL;
-        int r;
         uint64_t x = 0;
+        int r;
 
         assert(variable);
-        assert(u);
+        assert(ret);
 
         r = efi_get_variable_string(variable, &j);
         if (r < 0)
@@ -542,16 +28,16 @@
         if (r < 0)
                 return r;
 
-        *u = x;
+        *ret = x;
         return 0;
 }
 
-int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) {
+int efi_loader_get_boot_usec(usec_t *ret_firmware, usec_t *ret_loader) {
         uint64_t x, y;
         int r;
 
-        assert(firmware);
-        assert(loader);
+        assert(ret_firmware);
+        assert(ret_loader);
 
         if (!is_efi_boot())
                 return -EOPNOTSUPP;
@@ -569,15 +55,15 @@
                                        "Bad LoaderTimeInitUSec=%"PRIu64", LoaderTimeExecUSec=%" PRIu64"; refusing.",
                                        x, y);
 
-        *firmware = x;
-        *loader = y;
-
+        *ret_firmware = x;
+        *ret_loader = y;
         return 0;
 }
 
-int efi_loader_get_device_part_uuid(sd_id128_t *u) {
+int efi_loader_get_device_part_uuid(sd_id128_t *ret) {
         _cleanup_free_ char *p = NULL;
-        int r, parsed[16];
+        int r;
+        unsigned parsed[16];
 
         if (!is_efi_boot())
                 return -EOPNOTSUPP;
@@ -593,9 +79,9 @@
                    &parsed[12], &parsed[13], &parsed[14], &parsed[15]) != 16)
                 return -EIO;
 
-        if (u)
+        if (ret)
                 for (unsigned i = 0; i < ELEMENTSOF(parsed); i++)
-                        u->bytes[i] = parsed[i];
+                        ret->bytes[i] = parsed[i];
 
         return 0;
 }
@@ -658,6 +144,8 @@
         size_t s;
         int r;
 
+        assert(ret);
+
         if (!is_efi_boot()) {
                 *ret = 0;
                 return 0;
@@ -702,6 +190,95 @@
         return 0;
 }
 
+int efi_stub_get_features(uint64_t *ret) {
+        _cleanup_free_ void *v = NULL;
+        size_t s;
+        int r;
+
+        assert(ret);
+
+        if (!is_efi_boot()) {
+                *ret = 0;
+                return 0;
+        }
+
+        r = efi_get_variable(EFI_LOADER_VARIABLE(StubFeatures), NULL, &v, &s);
+        if (r == -ENOENT) {
+                _cleanup_free_ char *info = NULL;
+
+                /* The new (v252+) StubFeatures variable is not supported, let's see if it's systemd-stub at all */
+                r = efi_get_variable_string(EFI_LOADER_VARIABLE(StubInfo), &info);
+                if (r < 0) {
+                        if (r != -ENOENT)
+                                return r;
+
+                        /* Variable not set, definitely means not systemd-stub */
+
+                } else if (first_word(info, "systemd-stub")) {
+
+                        /* An older systemd-stub version. Let's hardcode the feature set, since it was pretty
+                         * static in all its versions. */
+
+                        *ret = EFI_STUB_FEATURE_REPORT_BOOT_PARTITION;
+                        return 0;
+                }
+
+                /* No features supported */
+                *ret = 0;
+                return 0;
+        }
+        if (r < 0)
+                return r;
+
+        if (s != sizeof(uint64_t))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "StubFeatures EFI variable doesn't have the right size.");
+
+        memcpy(ret, v, sizeof(uint64_t));
+        return 0;
+}
+
+int efi_stub_measured(int log_level) {
+        _cleanup_free_ char *pcr_string = NULL;
+        unsigned pcr_nr;
+        int r;
+
+        /* Checks if we are booted on a kernel with sd-stub which measured the kernel into PCR 11. Or in
+         * other words, if we are running on a TPM enabled UKI.
+         *
+         * Returns == 0 and > 0 depending on the result of the test. Returns -EREMOTE if we detected a stub
+         * being used, but it measured things into a different PCR than we are configured for in
+         * userspace. (i.e. we expect PCR 11 being used for this by both sd-stub and us) */
+
+        r = getenv_bool_secure("SYSTEMD_FORCE_MEASURE"); /* Give user a chance to override the variable test,
+                                                          * for debugging purposes */
+        if (r >= 0)
+                return r;
+        if (r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_FORCE_MEASURE, ignoring: %m");
+
+        if (!is_efi_boot())
+                return 0;
+
+        r = efi_get_variable_string(EFI_LOADER_VARIABLE(StubPcrKernelImage), &pcr_string);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_full_errno(log_level, r,
+                                      "Failed to get StubPcrKernelImage EFI variable: %m");
+
+        r = safe_atou(pcr_string, &pcr_nr);
+        if (r < 0)
+                return log_full_errno(log_level, r,
+                                      "Failed to parse StubPcrKernelImage EFI variable: %s", pcr_string);
+        if (pcr_nr != TPM_PCR_INDEX_KERNEL_IMAGE)
+                return log_full_errno(log_level, SYNTHETIC_ERRNO(EREMOTE),
+                                      "Kernel stub measured kernel image into PCR %u, which is different than expected %u.",
+                                      pcr_nr, TPM_PCR_INDEX_KERNEL_IMAGE);
+
+        return 1;
+}
+
 int efi_loader_get_config_timeout_one_shot(usec_t *ret) {
         _cleanup_free_ char *v = NULL;
         static struct stat cache_stat = {};
@@ -764,29 +341,6 @@
         return 0;
 }
 
-bool efi_has_tpm2(void) {
-        static int cache = -1;
-
-        /* Returns whether the system has a TPM2 chip which is known to the EFI firmware. */
-
-        if (cache < 0) {
-
-                /* First, check if we are on an EFI boot at all. */
-                if (!is_efi_boot())
-                        cache = false;
-                else {
-                        /* Then, check if the ACPI table "TPM2" exists, which is the TPM2 event log table, see:
-                         * https://trustedcomputinggroup.org/wp-content/uploads/TCG_ACPIGeneralSpecification_v1.20_r8.pdf
-                         * This table exists whenever the firmware is hooked up to TPM2. */
-                        cache = access("/sys/firmware/acpi/tables/TPM2", F_OK) >= 0;
-                        if (!cache && errno != ENOENT)
-                                log_debug_errno(errno, "Unable to test whether /sys/firmware/acpi/tables/TPM2 exists, assuming it doesn't: %m");
-                }
-        }
-
-        return cache;
-}
-
 #endif
 
 bool efi_loader_entry_name_valid(const char *s) {
@@ -795,11 +349,3 @@
 
         return in_charset(s, ALPHANUMERICAL "+-_.");
 }
-
-char *efi_tilt_backslashes(char *s) {
-        for (char *p = s; *p; p++)
-                if (*p == '\\')
-                        *p = '/';
-
-        return s;
-}
diff --git a/src/shared/efi-loader.h b/src/shared/efi-loader.h
index bc5769b..8343622 100644
--- a/src/shared/efi-loader.h
+++ b/src/shared/efi-loader.h
@@ -3,72 +3,28 @@
 
 #include <sys/stat.h>
 
-#include "efi-loader-features.h"
+#include "efivars-fundamental.h"
 #include "efivars.h"
 
+/* Various calls that interface with EFI variables implementing https://systemd.io/BOOT_LOADER_INTERFACE */
+
 #if ENABLE_EFI
 
-int efi_reboot_to_firmware_supported(void);
-int efi_get_reboot_to_firmware(void);
-int efi_set_reboot_to_firmware(bool value);
-
-int efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *part_uuid, char **path, bool *active);
-int efi_add_boot_option(uint16_t id, const char *title, uint32_t part, uint64_t pstart, uint64_t psize, sd_id128_t part_uuid, const char *path);
-int efi_remove_boot_option(uint16_t id);
-int efi_get_boot_order(uint16_t **order);
-int efi_set_boot_order(uint16_t *order, size_t n);
-int efi_get_boot_options(uint16_t **options);
-
-int efi_loader_get_device_part_uuid(sd_id128_t *u);
-int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader);
+int efi_loader_get_device_part_uuid(sd_id128_t *ret);
+int efi_loader_get_boot_usec(usec_t *ret_firmware, usec_t *ret_loader);
 
 int efi_loader_get_entries(char ***ret);
 
 int efi_loader_get_features(uint64_t *ret);
+int efi_stub_get_features(uint64_t *ret);
+
+int efi_stub_measured(int log_level);
 
 int efi_loader_get_config_timeout_one_shot(usec_t *ret);
 int efi_loader_update_entry_one_shot_cache(char **cache, struct stat *cache_stat);
 
-bool efi_has_tpm2(void);
-
 #else
 
-static inline int efi_reboot_to_firmware_supported(void) {
-        return -EOPNOTSUPP;
-}
-
-static inline int efi_get_reboot_to_firmware(void) {
-        return -EOPNOTSUPP;
-}
-
-static inline int efi_set_reboot_to_firmware(bool value) {
-        return -EOPNOTSUPP;
-}
-
-static inline int efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *part_uuid, char **path, bool *active) {
-        return -EOPNOTSUPP;
-}
-
-static inline int efi_add_boot_option(uint16_t id, const char *title, uint32_t part, uint64_t pstart, uint64_t psize, sd_id128_t part_uuid, const char *path) {
-        return -EOPNOTSUPP;
-}
-
-static inline int efi_remove_boot_option(uint16_t id) {
-        return -EOPNOTSUPP;
-}
-
-static inline int efi_get_boot_order(uint16_t **order) {
-        return -EOPNOTSUPP;
-}
-
-static inline int efi_set_boot_order(uint16_t *order, size_t n) {
-        return -EOPNOTSUPP;
-}
-
-static inline int efi_get_boot_options(uint16_t **options) {
-        return -EOPNOTSUPP;
-}
-
 static inline int efi_loader_get_device_part_uuid(sd_id128_t *u) {
         return -EOPNOTSUPP;
 }
@@ -85,6 +41,15 @@
         return -EOPNOTSUPP;
 }
 
+static inline int efi_stub_get_features(uint64_t *ret) {
+        return -EOPNOTSUPP;
+}
+
+static inline int efi_stub_measured(int log_level) {
+        return log_full_errno(log_level, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                              "Compiled without support for EFI");
+}
+
 static inline int efi_loader_get_config_timeout_one_shot(usec_t *ret) {
         return -EOPNOTSUPP;
 }
@@ -93,12 +58,6 @@
         return -EOPNOTSUPP;
 }
 
-static inline bool efi_has_tpm2(void) {
-        return false;
-}
-
 #endif
 
 bool efi_loader_entry_name_valid(const char *s);
-
-char *efi_tilt_backslashes(char *s);
diff --git a/src/shared/elf-util.c b/src/shared/elf-util.c
new file mode 100644
index 0000000..8da16f5
--- /dev/null
+++ b/src/shared/elf-util.c
@@ -0,0 +1,903 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#if HAVE_ELFUTILS
+
+#include <dwarf.h>
+#include <elfutils/libdwelf.h>
+#include <elfutils/libdwfl.h>
+#include <libelf.h>
+#include <sys/prctl.h>
+#include <sys/resource.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "alloc-util.h"
+#include "dlfcn-util.h"
+#include "elf-util.h"
+#include "errno-util.h"
+#include "escape.h"
+#include "fileio.h"
+#include "fd-util.h"
+#include "format-util.h"
+#include "hexdecoct.h"
+#include "io-util.h"
+#include "macro.h"
+#include "process-util.h"
+#include "rlimit-util.h"
+#include "string-util.h"
+
+#define FRAMES_MAX 64
+#define THREADS_MAX 64
+#define ELF_PACKAGE_METADATA_ID 0xcafe1a7e
+
+/* The amount of data we're willing to write to each of the output pipes. */
+#define COREDUMP_PIPE_MAX (1024*1024U)
+
+static void *dw_dl = NULL;
+static void *elf_dl = NULL;
+
+/* libdw symbols */
+Dwarf_Attribute *(*sym_dwarf_attr_integrate)(Dwarf_Die *, unsigned int, Dwarf_Attribute *);
+const char *(*sym_dwarf_diename)(Dwarf_Die *);
+const char *(*sym_dwarf_formstring)(Dwarf_Attribute *);
+int (*sym_dwarf_getscopes)(Dwarf_Die *, Dwarf_Addr, Dwarf_Die **);
+int (*sym_dwarf_getscopes_die)(Dwarf_Die *, Dwarf_Die **);
+Elf *(*sym_dwelf_elf_begin)(int);
+#if HAVE_DWELF_ELF_E_MACHINE_STRING
+const char *(*sym_dwelf_elf_e_machine_string)(int);
+#endif
+ssize_t (*sym_dwelf_elf_gnu_build_id)(Elf *, const void **);
+int (*sym_dwarf_tag)(Dwarf_Die *);
+Dwfl_Module *(*sym_dwfl_addrmodule)(Dwfl *, Dwarf_Addr);
+Dwfl *(*sym_dwfl_begin)(const Dwfl_Callbacks *);
+int (*sym_dwfl_build_id_find_elf)(Dwfl_Module *, void **, const char *, Dwarf_Addr, char **, Elf **);
+int (*sym_dwfl_core_file_attach)(Dwfl *, Elf *);
+int (*sym_dwfl_core_file_report)(Dwfl *, Elf *, const char *);
+void (*sym_dwfl_end)(Dwfl *);
+const char *(*sym_dwfl_errmsg)(int);
+int (*sym_dwfl_errno)(void);
+bool (*sym_dwfl_frame_pc)(Dwfl_Frame *, Dwarf_Addr *, bool *);
+ptrdiff_t (*sym_dwfl_getmodules)(Dwfl *, int (*)(Dwfl_Module *, void **, const char *, Dwarf_Addr, void *), void *, ptrdiff_t);
+int (*sym_dwfl_getthreads)(Dwfl *, int (*)(Dwfl_Thread *, void *), void *);
+Dwarf_Die *(*sym_dwfl_module_addrdie)(Dwfl_Module *, Dwarf_Addr, Dwarf_Addr *);
+const char *(*sym_dwfl_module_addrname)(Dwfl_Module *, GElf_Addr);
+int (*sym_dwfl_module_build_id)(Dwfl_Module *, const unsigned char **, GElf_Addr *);
+Elf *(*sym_dwfl_module_getelf)(Dwfl_Module *, GElf_Addr *);
+const char *(*sym_dwfl_module_info)(Dwfl_Module *, void ***, Dwarf_Addr *, Dwarf_Addr *, Dwarf_Addr *, Dwarf_Addr *, const char **, const char **);
+int (*sym_dwfl_offline_section_address)(Dwfl_Module *, void **, const char *, Dwarf_Addr, const char *, GElf_Word, const GElf_Shdr *, Dwarf_Addr *);
+int (*sym_dwfl_report_end)(Dwfl *, int (*)(Dwfl_Module *, void *, const char *, Dwarf_Addr, void *), void *);
+int (*sym_dwfl_standard_find_debuginfo)(Dwfl_Module *, void **, const char *, Dwarf_Addr, const char *, const char *, GElf_Word, char **);
+int (*sym_dwfl_thread_getframes)(Dwfl_Thread *, int (*)(Dwfl_Frame *, void *), void *);
+pid_t (*sym_dwfl_thread_tid)(Dwfl_Thread *);
+
+/* libelf symbols */
+Elf *(*sym_elf_begin)(int, Elf_Cmd, Elf *);
+int (*sym_elf_end)(Elf *);
+Elf_Data *(*sym_elf_getdata_rawchunk)(Elf *, int64_t, size_t, Elf_Type);
+GElf_Ehdr *(*sym_gelf_getehdr)(Elf *, GElf_Ehdr *);
+int (*sym_elf_getphdrnum)(Elf *, size_t *);
+const char *(*sym_elf_errmsg)(int);
+int (*sym_elf_errno)(void);
+Elf *(*sym_elf_memory)(char *, size_t);
+unsigned int (*sym_elf_version)(unsigned int);
+GElf_Phdr *(*sym_gelf_getphdr)(Elf *, int, GElf_Phdr *);
+size_t (*sym_gelf_getnote)(Elf_Data *, size_t, GElf_Nhdr *, size_t *, size_t *);
+
+int dlopen_dw(void) {
+        int r;
+
+        r = dlopen_many_sym_or_warn(
+                        &dw_dl, "libdw.so.1", LOG_DEBUG,
+                        DLSYM_ARG(dwarf_getscopes),
+                        DLSYM_ARG(dwarf_getscopes_die),
+                        DLSYM_ARG(dwarf_tag),
+                        DLSYM_ARG(dwarf_attr_integrate),
+                        DLSYM_ARG(dwarf_formstring),
+                        DLSYM_ARG(dwarf_diename),
+                        DLSYM_ARG(dwelf_elf_gnu_build_id),
+                        DLSYM_ARG(dwelf_elf_begin),
+#if HAVE_DWELF_ELF_E_MACHINE_STRING
+                        DLSYM_ARG(dwelf_elf_e_machine_string),
+#endif
+                        DLSYM_ARG(dwfl_addrmodule),
+                        DLSYM_ARG(dwfl_frame_pc),
+                        DLSYM_ARG(dwfl_module_addrdie),
+                        DLSYM_ARG(dwfl_module_addrname),
+                        DLSYM_ARG(dwfl_module_info),
+                        DLSYM_ARG(dwfl_module_build_id),
+                        DLSYM_ARG(dwfl_module_getelf),
+                        DLSYM_ARG(dwfl_begin),
+                        DLSYM_ARG(dwfl_core_file_report),
+                        DLSYM_ARG(dwfl_report_end),
+                        DLSYM_ARG(dwfl_getmodules),
+                        DLSYM_ARG(dwfl_core_file_attach),
+                        DLSYM_ARG(dwfl_end),
+                        DLSYM_ARG(dwfl_errmsg),
+                        DLSYM_ARG(dwfl_errno),
+                        DLSYM_ARG(dwfl_build_id_find_elf),
+                        DLSYM_ARG(dwfl_standard_find_debuginfo),
+                        DLSYM_ARG(dwfl_thread_tid),
+                        DLSYM_ARG(dwfl_thread_getframes),
+                        DLSYM_ARG(dwfl_getthreads),
+                        DLSYM_ARG(dwfl_offline_section_address));
+        if (r <= 0)
+                return r;
+
+        return 1;
+}
+
+int dlopen_elf(void) {
+        int r;
+
+        r = dlopen_many_sym_or_warn(
+                        &elf_dl, "libelf.so.1", LOG_DEBUG,
+                        DLSYM_ARG(elf_begin),
+                        DLSYM_ARG(elf_end),
+                        DLSYM_ARG(elf_getphdrnum),
+                        DLSYM_ARG(elf_getdata_rawchunk),
+                        DLSYM_ARG(elf_errmsg),
+                        DLSYM_ARG(elf_errno),
+                        DLSYM_ARG(elf_memory),
+                        DLSYM_ARG(elf_version),
+                        DLSYM_ARG(gelf_getehdr),
+                        DLSYM_ARG(gelf_getphdr),
+                        DLSYM_ARG(gelf_getnote));
+        if (r <= 0)
+                return r;
+
+        return 1;
+}
+
+typedef struct StackContext {
+        FILE *f;
+        Dwfl *dwfl;
+        Elf *elf;
+        unsigned n_thread;
+        unsigned n_frame;
+        JsonVariant **package_metadata;
+        Set **modules;
+} StackContext;
+
+static StackContext* stack_context_destroy(StackContext *c) {
+        if (!c)
+                return NULL;
+
+        c->f = safe_fclose(c->f);
+
+        if (c->dwfl) {
+                sym_dwfl_end(c->dwfl);
+                c->dwfl = NULL;
+        }
+
+        if (c->elf) {
+                sym_elf_end(c->elf);
+                c->elf = NULL;
+        }
+
+        return NULL;
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(Elf *, sym_elf_end, NULL);
+
+static int frame_callback(Dwfl_Frame *frame, void *userdata) {
+        StackContext *c = ASSERT_PTR(userdata);
+        Dwarf_Addr pc, pc_adjusted;
+        const char *fname = NULL, *symbol = NULL;
+        Dwfl_Module *module;
+        bool is_activation;
+        uint64_t module_offset = 0;
+
+        assert(frame);
+
+        if (c->n_frame >= FRAMES_MAX)
+                return DWARF_CB_ABORT;
+
+        if (!sym_dwfl_frame_pc(frame, &pc, &is_activation))
+                return DWARF_CB_ABORT;
+
+        pc_adjusted = pc - (is_activation ? 0 : 1);
+
+        module = sym_dwfl_addrmodule(c->dwfl, pc_adjusted);
+        if (module) {
+                Dwarf_Addr start, bias = 0;
+                Dwarf_Die *cudie;
+
+                cudie = sym_dwfl_module_addrdie(module, pc_adjusted, &bias);
+                if (cudie) {
+                        _cleanup_free_ Dwarf_Die *scopes = NULL;
+                        int n;
+
+                        n = sym_dwarf_getscopes(cudie, pc_adjusted - bias, &scopes);
+                        if (n > 0)
+                                for (Dwarf_Die *s = scopes; s && s < scopes + n; s++) {
+                                        Dwarf_Attribute *a, space;
+
+                                        if (!IN_SET(sym_dwarf_tag(s), DW_TAG_subprogram, DW_TAG_inlined_subroutine, DW_TAG_entry_point))
+                                                continue;
+
+                                        a = sym_dwarf_attr_integrate(s, DW_AT_MIPS_linkage_name, &space);
+                                        if (!a)
+                                                a = sym_dwarf_attr_integrate(s, DW_AT_linkage_name, &space);
+                                        if (a)
+                                                symbol = sym_dwarf_formstring(a);
+                                        if (!symbol)
+                                                symbol = sym_dwarf_diename(s);
+
+                                        if (symbol)
+                                                break;
+                                }
+                }
+
+                if (!symbol)
+                        symbol = sym_dwfl_module_addrname(module, pc_adjusted);
+
+                fname = sym_dwfl_module_info(module, NULL, &start, NULL, NULL, NULL, NULL, NULL);
+                module_offset = pc - start;
+        }
+
+        if (c->f)
+                fprintf(c->f, "#%-2u 0x%016" PRIx64 " %s (%s + 0x%" PRIx64 ")\n", c->n_frame, (uint64_t) pc, strna(symbol), strna(fname), module_offset);
+        c->n_frame++;
+
+        return DWARF_CB_OK;
+}
+
+static int thread_callback(Dwfl_Thread *thread, void *userdata) {
+        StackContext *c = ASSERT_PTR(userdata);
+        pid_t tid;
+
+        assert(thread);
+
+        if (c->n_thread >= THREADS_MAX)
+                return DWARF_CB_ABORT;
+
+        if (c->n_thread != 0 && c->f)
+                fputc('\n', c->f);
+
+        c->n_frame = 0;
+
+        if (c->f) {
+                tid = sym_dwfl_thread_tid(thread);
+                fprintf(c->f, "Stack trace of thread " PID_FMT ":\n", tid);
+        }
+
+        if (sym_dwfl_thread_getframes(thread, frame_callback, c) < 0)
+                return DWARF_CB_ABORT;
+
+        c->n_thread++;
+
+        return DWARF_CB_OK;
+}
+
+static char* build_package_reference(
+                const char *type,
+                const char *name,
+                const char *version,
+                const char *arch) {
+
+        /* Construct an identifier for a specific version of the package. The syntax is most suitable for
+         * rpm: the resulting string can be used directly in queries and rpm/dnf/yum commands. For dpkg and
+         * other systems, it might not be usable directly, but users should still be able to figure out the
+         * meaning.
+         */
+
+        return strjoin(type ?: "package",
+                       " ",
+                       name,
+
+                       version ? "-" : "",
+                       strempty(version),
+
+                       /* arch is meaningful even without version, so always print it */
+                       arch ? "." : "",
+                       strempty(arch));
+}
+
+static void report_module_metadata(StackContext *c, const char *name, JsonVariant *metadata) {
+        assert(c);
+        assert(name);
+
+        if (!c->f)
+                return;
+
+        fprintf(c->f, "Module %s", name);
+
+        if (metadata) {
+                const char
+                        *build_id = json_variant_string(json_variant_by_key(metadata, "buildId")),
+                        *type = json_variant_string(json_variant_by_key(metadata, "type")),
+                        *package = json_variant_string(json_variant_by_key(metadata, "name")),
+                        *version = json_variant_string(json_variant_by_key(metadata, "version")),
+                        *arch = json_variant_string(json_variant_by_key(metadata, "architecture"));
+
+                if (package) {
+                        /* Version/architecture is only meaningful with a package name.
+                         * Skip the detailed fields if package is unknown. */
+                        _cleanup_free_ char *id = build_package_reference(type, package, version, arch);
+                        fprintf(c->f, " from %s", strnull(id));
+                }
+
+                if (build_id && !(package && version))
+                        fprintf(c->f, ", build-id=%s", build_id);
+        }
+
+        fputs("\n", c->f);
+}
+
+static int parse_package_metadata(const char *name, JsonVariant *id_json, Elf *elf, bool *ret_interpreter_found, StackContext *c) {
+        bool interpreter_found = false;
+        size_t n_program_headers;
+        int r;
+
+        assert(name);
+        assert(elf);
+        assert(c);
+
+        /* When iterating over PT_LOAD we will visit modules more than once */
+        if (set_contains(*c->modules, name))
+                return 0;
+
+        r = sym_elf_getphdrnum(elf, &n_program_headers);
+        if (r < 0) /* Not the handle we are looking for - that's ok, skip it */
+                return 0;
+
+        /* Iterate over all program headers in that ELF object. These will have been copied by
+         * the kernel verbatim when the core file is generated. */
+        for (size_t i = 0; i < n_program_headers; ++i) {
+                GElf_Phdr mem, *program_header;
+                GElf_Nhdr note_header;
+                Elf_Data *data;
+
+                /* Package metadata is in PT_NOTE headers. */
+                program_header = sym_gelf_getphdr(elf, i, &mem);
+                if (!program_header || (program_header->p_type != PT_NOTE && program_header->p_type != PT_INTERP))
+                        continue;
+
+                if (program_header->p_type == PT_INTERP) {
+                        interpreter_found = true;
+                        continue;
+                }
+
+                /* Fortunately there is an iterator we can use to walk over the
+                 * elements of a PT_NOTE program header. We are interested in the
+                 * note with type. */
+                data = sym_elf_getdata_rawchunk(elf,
+                                                program_header->p_offset,
+                                                program_header->p_filesz,
+                                                ELF_T_NHDR);
+                if (!data)
+                        continue;
+
+                for (size_t note_offset = 0, name_offset, desc_offset;
+                     note_offset < data->d_size &&
+                     (note_offset = sym_gelf_getnote(data, note_offset, &note_header, &name_offset, &desc_offset)) > 0;) {
+
+                        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
+                        const char *payload = (const char *)data->d_buf + desc_offset;
+
+                        if (note_header.n_namesz == 0 || note_header.n_descsz == 0)
+                                continue;
+
+                        /* Package metadata might have different owners, but the
+                         * magic ID is always the same. */
+                        if (note_header.n_type != ELF_PACKAGE_METADATA_ID)
+                                continue;
+
+                        _cleanup_free_ char *payload_0suffixed = NULL;
+                        assert(note_offset > desc_offset);
+                        size_t payload_len = note_offset - desc_offset;
+
+                        /* If we are lucky and the payload is NUL-padded, we don't need to copy the string.
+                         * But if happens to go all the way until the end of the buffer, make a copy. */
+                        if (payload[payload_len-1] != '\0') {
+                                payload_0suffixed = memdup_suffix0(payload, payload_len);
+                                if (!payload_0suffixed)
+                                        return log_oom();
+                                payload = payload_0suffixed;
+                        }
+
+                        r = json_parse(payload, 0, &v, NULL, NULL);
+                        if (r < 0) {
+                                _cleanup_free_ char *esc = cescape(payload);
+                                return log_error_errno(r, "json_parse on \"%s\" failed: %m", strnull(esc));
+                        }
+
+                        /* If we have a build-id, merge it in the same JSON object so that it appears all
+                         * nicely together in the logs/metadata. */
+                        if (id_json) {
+                                r = json_variant_merge(&v, id_json);
+                                if (r < 0)
+                                        return log_error_errno(r, "json_variant_merge of package meta with buildId failed: %m");
+                        }
+
+                        /* Pretty-print to the buffer, so that the metadata goes as plaintext in the
+                         * journal. */
+                        report_module_metadata(c, name, v);
+
+                        /* Then we build a new object using the module name as the key, and merge it
+                         * with the previous parses, so that in the end it all fits together in a single
+                         * JSON blob. */
+                        r = json_build(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR(name, JSON_BUILD_VARIANT(v))));
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to build JSON object: %m");
+
+                        r = json_variant_merge(c->package_metadata, w);
+                        if (r < 0)
+                                return log_error_errno(r, "json_variant_merge of package meta with buildId failed: %m");
+
+                        /* Finally stash the name, so we avoid double visits. */
+                        r = set_put_strdup(c->modules, name);
+                        if (r < 0)
+                                return log_error_errno(r, "set_put_strdup failed: %m");
+
+                        if (ret_interpreter_found)
+                                *ret_interpreter_found = interpreter_found;
+
+                        return 1;
+                }
+        }
+
+        if (ret_interpreter_found)
+                *ret_interpreter_found = interpreter_found;
+
+        /* Didn't find package metadata for this module - that's ok, just go to the next. */
+        return 0;
+}
+
+/* Get the build-id out of an ELF object or a dwarf core module. */
+static int parse_buildid(Dwfl_Module *mod, Elf *elf, const char *name, StackContext *c, JsonVariant **ret_id_json) {
+        _cleanup_(json_variant_unrefp) JsonVariant *id_json = NULL;
+        const unsigned char *id;
+        GElf_Addr id_vaddr;
+        ssize_t id_len;
+        int r;
+
+        assert(mod || elf);
+        assert(name);
+        assert(c);
+
+        if (mod)
+                id_len = sym_dwfl_module_build_id(mod, &id, &id_vaddr);
+        else
+                id_len = sym_dwelf_elf_gnu_build_id(elf, (const void **)&id);
+        if (id_len <= 0) {
+                /* If we don't find a build-id, note it in the journal message, and try
+                 * anyway to find the package metadata. It's unlikely to have the latter
+                 * without the former, but there's no hard rule. */
+                if (c->f)
+                        fprintf(c->f, "Module %s without build-id.\n", name);
+        } else {
+                /* We will later parse package metadata json and pass it to our caller. Prepare the
+                * build-id in json format too, so that it can be appended and parsed cleanly. It
+                * will then be added as metadata to the journal message with the stack trace. */
+                r = json_build(&id_json, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("buildId", JSON_BUILD_HEX(id, id_len))));
+                if (r < 0)
+                        return log_error_errno(r, "json_build on buildId failed: %m");
+        }
+
+        if (ret_id_json)
+                *ret_id_json = TAKE_PTR(id_json);
+
+        return 0;
+}
+
+static int module_callback(Dwfl_Module *mod, void **userdata, const char *name, Dwarf_Addr start, void *arg) {
+        _cleanup_(json_variant_unrefp) JsonVariant *id_json = NULL;
+        StackContext *c = ASSERT_PTR(arg);
+        size_t n_program_headers;
+        GElf_Addr bias;
+        int r;
+        Elf *elf;
+
+        assert(mod);
+
+        if (!name)
+                name = "(unnamed)"; /* For logging purposes */
+
+        /* We are iterating on each "module", which is what dwfl calls ELF objects contained in the
+         * core file, and extracting the build-id first and then the package metadata.
+         * We proceed in a best-effort fashion - not all ELF objects might contain both or either.
+         * The build-id is easy, as libdwfl parses it during the sym_dwfl_core_file_report() call and
+         * stores it separately in an internal library struct. */
+        r = parse_buildid(mod, NULL, name, c, &id_json);
+        if (r < 0)
+                return DWARF_CB_ABORT;
+
+        /* The .note.package metadata is more difficult. From the module, we need to get a reference
+         * to the ELF object first. We might be lucky and just get it from elfutils. */
+        elf = sym_dwfl_module_getelf(mod, &bias);
+        if (elf) {
+                r = parse_package_metadata(name, id_json, elf, NULL, c);
+                if (r < 0)
+                        return DWARF_CB_ABORT;
+                if (r > 0)
+                        return DWARF_CB_OK;
+        } else
+                elf = c->elf;
+
+        /* We did not get the ELF object, or it's just a reference to the core. That is likely
+         * because we didn't get direct access to the executable, and the version of elfutils does
+         * not yet support parsing it out of the core file directly.
+         * So fallback to manual extraction - get the PT_LOAD section from the core,
+         * and if it's the right one we can interpret it as an Elf object, and parse
+         * its notes manually. */
+
+        r = sym_elf_getphdrnum(elf, &n_program_headers);
+        if (r < 0) {
+                log_warning("Could not parse number of program headers from core file: %s",
+                            sym_elf_errmsg(-1)); /* -1 retrieves the most recent error */
+                report_module_metadata(c, name, id_json);
+
+                return DWARF_CB_OK;
+        }
+
+        for (size_t i = 0; i < n_program_headers; ++i) {
+                GElf_Phdr mem, *program_header;
+                Elf_Data *data;
+
+                /* The core file stores the ELF files in the PT_LOAD segment. */
+                program_header = sym_gelf_getphdr(elf, i, &mem);
+                if (!program_header || program_header->p_type != PT_LOAD)
+                        continue;
+
+                /* Now get a usable Elf reference, and parse the notes from it. */
+                data = sym_elf_getdata_rawchunk(elf,
+                                                program_header->p_offset,
+                                                program_header->p_filesz,
+                                                ELF_T_NHDR);
+                if (!data)
+                        continue;
+
+                _cleanup_(sym_elf_endp) Elf *memelf = sym_elf_memory(data->d_buf, data->d_size);
+                if (!memelf)
+                        continue;
+                r = parse_package_metadata(name, id_json, memelf, NULL, c);
+                if (r < 0)
+                        return DWARF_CB_ABORT;
+                if (r > 0)
+                        break;
+        }
+
+        return DWARF_CB_OK;
+}
+
+static int parse_core(int fd, const char *executable, char **ret, JsonVariant **ret_package_metadata) {
+
+        const Dwfl_Callbacks callbacks = {
+                .find_elf = sym_dwfl_build_id_find_elf,
+                .section_address = sym_dwfl_offline_section_address,
+                .find_debuginfo = sym_dwfl_standard_find_debuginfo,
+        };
+
+        _cleanup_(json_variant_unrefp) JsonVariant *package_metadata = NULL;
+        _cleanup_(set_freep) Set *modules = NULL;
+        _cleanup_free_ char *buf = NULL; /* buf should be freed last, c.f closed first (via stack_context_destroy) */
+        _cleanup_(stack_context_destroy) StackContext c = {
+                .package_metadata = &package_metadata,
+                .modules = &modules,
+        };
+        size_t sz = 0;
+        int r;
+
+        assert(fd >= 0);
+
+        if (lseek(fd, 0, SEEK_SET) == (off_t) -1)
+                return log_warning_errno(errno, "Failed to seek to beginning of the core file: %m");
+
+        if (ret) {
+                c.f = open_memstream_unlocked(&buf, &sz);
+                if (!c.f)
+                        return log_oom();
+        }
+
+        sym_elf_version(EV_CURRENT);
+
+        c.elf = sym_elf_begin(fd, ELF_C_READ_MMAP, NULL);
+        if (!c.elf)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse core file, elf_begin() failed: %s", sym_elf_errmsg(sym_elf_errno()));
+
+        c.dwfl = sym_dwfl_begin(&callbacks);
+        if (!c.dwfl)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse core file, dwfl_begin() failed: %s", sym_dwfl_errmsg(sym_dwfl_errno()));
+
+        if (sym_dwfl_core_file_report(c.dwfl, c.elf, executable) < 0)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse core file, dwfl_core_file_report() failed: %s", sym_dwfl_errmsg(sym_dwfl_errno()));
+
+        if (sym_dwfl_report_end(c.dwfl, NULL, NULL) != 0)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse core file, dwfl_report_end() failed: %s", sym_dwfl_errmsg(sym_dwfl_errno()));
+
+        if (sym_dwfl_getmodules(c.dwfl, &module_callback, &c, 0) < 0)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse core file, dwfl_getmodules() failed: %s", sym_dwfl_errmsg(sym_dwfl_errno()));
+
+        if (sym_dwfl_core_file_attach(c.dwfl, c.elf) < 0)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse core file, dwfl_core_file_attach() failed: %s", sym_dwfl_errmsg(sym_dwfl_errno()));
+
+        if (sym_dwfl_getthreads(c.dwfl, thread_callback, &c) < 0)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse core file, dwfl_getthreads() failed: %s", sym_dwfl_errmsg(sym_dwfl_errno()));
+
+        if (ret) {
+                r = fflush_and_check(c.f);
+                if (r < 0)
+                        return log_warning_errno(r, "Could not parse core file, flushing file buffer failed: %m");
+
+                c.f = safe_fclose(c.f);
+                *ret = TAKE_PTR(buf);
+        }
+        if (ret_package_metadata)
+                *ret_package_metadata = TAKE_PTR(package_metadata);
+
+        return 0;
+}
+
+static int parse_elf(int fd, const char *executable, char **ret, JsonVariant **ret_package_metadata) {
+        _cleanup_(json_variant_unrefp) JsonVariant *package_metadata = NULL, *elf_metadata = NULL;
+        _cleanup_(set_freep) Set *modules = NULL;
+        _cleanup_free_ char *buf = NULL; /* buf should be freed last, c.f closed first (via stack_context_destroy) */
+        _cleanup_(stack_context_destroy) StackContext c = {
+                .package_metadata = &package_metadata,
+                .modules = &modules,
+        };
+        const char *elf_type;
+        GElf_Ehdr elf_header;
+        size_t sz = 0;
+        int r;
+
+        assert(fd >= 0);
+
+        if (lseek(fd, 0, SEEK_SET) == (off_t) -1)
+                return log_warning_errno(errno, "Failed to seek to beginning of the ELF file: %m");
+
+        if (ret) {
+                c.f = open_memstream_unlocked(&buf, &sz);
+                if (!c.f)
+                        return log_oom();
+        }
+
+        sym_elf_version(EV_CURRENT);
+
+        c.elf = sym_elf_begin(fd, ELF_C_READ_MMAP, NULL);
+        if (!c.elf)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse ELF file, elf_begin() failed: %s", sym_elf_errmsg(sym_elf_errno()));
+
+        if (!sym_gelf_getehdr(c.elf, &elf_header))
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Could not parse ELF file, gelf_getehdr() failed: %s", sym_elf_errmsg(sym_elf_errno()));
+
+        if (elf_header.e_type == ET_CORE) {
+                _cleanup_free_ char *out = NULL;
+
+                r = parse_core(fd, executable, ret ? &out : NULL, &package_metadata);
+                if (r < 0)
+                        return log_warning_errno(r, "Failed to inspect core file: %m");
+
+                if (out)
+                        fprintf(c.f, "%s", out);
+
+                elf_type = "coredump";
+        } else {
+                _cleanup_(json_variant_unrefp) JsonVariant *id_json = NULL;
+                const char *e = executable ?: "(unnamed)";
+                bool interpreter_found = false;
+
+                r = parse_buildid(NULL, c.elf, e, &c, &id_json);
+                if (r < 0)
+                        return log_warning_errno(r, "Failed to parse build-id of ELF file: %m");
+
+                r = parse_package_metadata(e, id_json, c.elf, &interpreter_found, &c);
+                if (r < 0)
+                        return log_warning_errno(r, "Failed to parse package metadata of ELF file: %m");
+
+                /* If we found a build-id and nothing else, return at least that. */
+                if (!package_metadata && id_json) {
+                        r = json_build(&package_metadata, JSON_BUILD_OBJECT(JSON_BUILD_PAIR(e, JSON_BUILD_VARIANT(id_json))));
+                        if (r < 0)
+                                return log_warning_errno(r, "Failed to build JSON object: %m");
+                }
+
+                if (interpreter_found)
+                        elf_type = "executable";
+                else
+                        elf_type = "library";
+        }
+
+        /* Note that e_type is always DYN for both executables and libraries, so we can't tell them apart from the header,
+         * but we will search for the PT_INTERP section when parsing the metadata. */
+        r = json_build(&elf_metadata, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("elfType", JSON_BUILD_STRING(elf_type))));
+        if (r < 0)
+                return log_warning_errno(r, "Failed to build JSON object: %m");
+
+#if HAVE_DWELF_ELF_E_MACHINE_STRING
+        const char *elf_architecture = sym_dwelf_elf_e_machine_string(elf_header.e_machine);
+        if (elf_architecture) {
+                _cleanup_(json_variant_unrefp) JsonVariant *json_architecture = NULL;
+
+                r = json_build(&json_architecture,
+                                JSON_BUILD_OBJECT(JSON_BUILD_PAIR("elfArchitecture", JSON_BUILD_STRING(elf_architecture))));
+                if (r < 0)
+                        return log_warning_errno(r, "Failed to build JSON object: %m");
+
+                r = json_variant_merge(&elf_metadata, json_architecture);
+                if (r < 0)
+                        return log_warning_errno(r, "Failed to merge JSON objects: %m");
+
+                if (ret)
+                        fprintf(c.f, "ELF object binary architecture: %s\n", elf_architecture);
+        }
+#endif
+
+        /* We always at least have the ELF type, so merge that (and possibly the arch). */
+        r = json_variant_merge(&elf_metadata, package_metadata);
+        if (r < 0)
+                return log_warning_errno(r, "Failed to merge JSON objects: %m");
+
+        if (ret) {
+                r = fflush_and_check(c.f);
+                if (r < 0)
+                        return log_warning_errno(r, "Could not parse ELF file, flushing file buffer failed: %m");
+
+                c.f = safe_fclose(c.f);
+                *ret = TAKE_PTR(buf);
+        }
+        if (ret_package_metadata)
+                *ret_package_metadata = TAKE_PTR(elf_metadata);
+
+        return 0;
+}
+
+int parse_elf_object(int fd, const char *executable, bool fork_disable_dump, char **ret, JsonVariant **ret_package_metadata) {
+        _cleanup_close_pair_ int error_pipe[2] = PIPE_EBADF,
+                                 return_pipe[2] = PIPE_EBADF,
+                                 json_pipe[2] = PIPE_EBADF;
+        _cleanup_(json_variant_unrefp) JsonVariant *package_metadata = NULL;
+        _cleanup_free_ char *buf = NULL;
+        int r;
+
+        assert(fd >= 0);
+
+        r = dlopen_dw();
+        if (r < 0)
+                return r;
+
+        r = dlopen_elf();
+        if (r < 0)
+                return r;
+
+        r = RET_NERRNO(pipe2(error_pipe, O_CLOEXEC|O_NONBLOCK));
+        if (r < 0)
+                return r;
+
+        if (ret) {
+                r = RET_NERRNO(pipe2(return_pipe, O_CLOEXEC|O_NONBLOCK));
+                if (r < 0)
+                        return r;
+        }
+
+        if (ret_package_metadata) {
+                r = RET_NERRNO(pipe2(json_pipe, O_CLOEXEC|O_NONBLOCK));
+                if (r < 0)
+                        return r;
+        }
+
+        /* Parsing possibly malformed data is crash-happy, so fork. In case we crash,
+         * the core file will not be lost, and the messages will still be attached to
+         * the journal. Reading the elf object might be slow, but it still has an upper
+         * bound since the core files have an upper size limit. It's also not doing any
+         * system call or interacting with the system in any way, besides reading from
+         * the file descriptor and writing into these four pipes. */
+        r = safe_fork_full("(sd-parse-elf)",
+                           (int[]){ fd, error_pipe[1], return_pipe[1], json_pipe[1] },
+                           4,
+                           FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_NEW_MOUNTNS|FORK_MOUNTNS_SLAVE|FORK_NEW_USERNS|FORK_WAIT|FORK_REOPEN_LOG,
+                           NULL);
+        if (r < 0) {
+                if (r == -EPROTO) { /* We should have the errno from the child, but don't clobber original error */
+                        int e, k;
+
+                        k = read(error_pipe[0], &e, sizeof(e));
+                        if (k < 0 && errno != EAGAIN) /* Pipe is non-blocking, EAGAIN means there's nothing */
+                                return -errno;
+                        if (k == sizeof(e))
+                                return e; /* propagate error sent to us from child */
+                        if (k != 0)
+                                return -EIO;
+                }
+
+                return r;
+        }
+        if (r == 0) {
+                /* We want to avoid loops, given this can be called from systemd-coredump */
+                if (fork_disable_dump) {
+                        r = RET_NERRNO(prctl(PR_SET_DUMPABLE, 0));
+                        if (r < 0)
+                                goto child_fail;
+                }
+
+                r = parse_elf(fd, executable, ret ? &buf : NULL, ret_package_metadata ? &package_metadata : NULL);
+                if (r < 0)
+                        goto child_fail;
+
+                if (buf) {
+                        size_t len = strlen(buf);
+
+                        if (len > COREDUMP_PIPE_MAX) {
+                                /* This is iffy. A backtrace can be a few hundred kilobytes, but too much is
+                                 * too much. Let's log a warning and ignore the rest. */
+                                log_warning("Generated backtrace is %zu bytes (more than the limit of %u bytes), backtrace will be truncated.",
+                                            len, COREDUMP_PIPE_MAX);
+                                len = COREDUMP_PIPE_MAX;
+                        }
+
+                        /* Bump the space for the returned string.
+                         * Failure is ignored, because partial output is still useful. */
+                        (void) fcntl(return_pipe[1], F_SETPIPE_SZ, len);
+
+                        r = loop_write(return_pipe[1], buf, len, false);
+                        if (r == -EAGAIN)
+                                log_warning("Write failed, backtrace will be truncated.");
+                        else if (r < 0)
+                                goto child_fail;
+
+                        return_pipe[1] = safe_close(return_pipe[1]);
+                }
+
+                if (package_metadata) {
+                        _cleanup_fclose_ FILE *json_out = NULL;
+
+                        /* Bump the space for the returned string. We don't know how much space we'll need in
+                         * advance, so we'll just try to write as much as possible and maybe fail later. */
+                        (void) fcntl(json_pipe[1], F_SETPIPE_SZ, COREDUMP_PIPE_MAX);
+
+                        json_out = take_fdopen(&json_pipe[1], "w");
+                        if (!json_out) {
+                                r = -errno;
+                                goto child_fail;
+                        }
+
+                        r = json_variant_dump(package_metadata, JSON_FORMAT_FLUSH, json_out, NULL);
+                        if (r < 0)
+                                log_warning_errno(r, "Failed to write JSON package metadata, ignoring: %m");
+                }
+
+                _exit(EXIT_SUCCESS);
+
+        child_fail:
+                (void) write(error_pipe[1], &r, sizeof(r));
+                _exit(EXIT_FAILURE);
+        }
+
+        error_pipe[1] = safe_close(error_pipe[1]);
+        return_pipe[1] = safe_close(return_pipe[1]);
+        json_pipe[1] = safe_close(json_pipe[1]);
+
+        if (ret) {
+                _cleanup_fclose_ FILE *in = NULL;
+
+                in = take_fdopen(&return_pipe[0], "r");
+                if (!in)
+                        return -errno;
+
+                r = read_full_stream(in, &buf, NULL);
+                if (r < 0)
+                        return r;
+        }
+
+        if (ret_package_metadata) {
+                _cleanup_fclose_ FILE *json_in = NULL;
+
+                json_in = take_fdopen(&json_pipe[0], "r");
+                if (!json_in)
+                        return -errno;
+
+                r = json_parse_file(json_in, NULL, 0, &package_metadata, NULL, NULL);
+                if (r < 0 && r != -ENODATA) /* ENODATA: json was empty, so we got nothing, but that's ok */
+                        log_warning_errno(r, "Failed to read or parse json metadata, ignoring: %m");
+        }
+
+        if (ret)
+                *ret = TAKE_PTR(buf);
+        if (ret_package_metadata)
+                *ret_package_metadata = TAKE_PTR(package_metadata);
+
+        return 0;
+}
+
+#endif
diff --git a/src/shared/elf-util.h b/src/shared/elf-util.h
new file mode 100644
index 0000000..b28e64c
--- /dev/null
+++ b/src/shared/elf-util.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "json.h"
+
+#if HAVE_ELFUTILS
+int dlopen_dw(void);
+int dlopen_elf(void);
+
+/* Parse an ELF object in a forked process, so that errors while iterating over
+ * untrusted and potentially malicious data do not propagate to the main caller's process.
+ * If fork_disable_dump, the child process will not dump core if it crashes. */
+int parse_elf_object(int fd, const char *executable, bool fork_disable_dump, char **ret, JsonVariant **ret_package_metadata);
+#else
+static inline int parse_elf_object(int fd, const char *executable, bool fork_disable_dump, char **ret, JsonVariant **ret_package_metadata) {
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "elfutils disabled, parsing ELF objects not supported");
+}
+#endif
diff --git a/src/shared/enable-mempool.c b/src/shared/enable-mempool.c
index 1abfccb..fd582c0 100644
--- a/src/shared/enable-mempool.c
+++ b/src/shared/enable-mempool.c
@@ -1,5 +1,19 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "mempool.h"
+#include <stdbool.h>
 
-const bool mempool_use_allowed = true;
+#include "env-util.h"
+#include "mempool.h"
+#include "process-util.h"
+
+bool mempool_enabled(void) {
+        static int cache = -1;
+
+        if (!is_main_thread())
+                return false;
+
+        if (cache < 0)
+                cache = getenv_bool("SYSTEMD_MEMPOOL") != 0;
+
+        return cache;
+}
diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c
index f77f694..e978b8b 100644
--- a/src/shared/ethtool-util.c
+++ b/src/shared/ethtool-util.c
@@ -14,6 +14,7 @@
 #include "memory-util.h"
 #include "socket-util.h"
 #include "string-table.h"
+#include "strv.h"
 #include "strxcpyx.h"
 
 static const char* const duplex_table[_DUP_MAX] = {
@@ -42,6 +43,11 @@
 
         assert(ret);
 
+        if (opts == UINT32_MAX) {
+                *ret = NULL;
+                return 0;
+        }
+
         for (size_t i = 0; i < ELEMENTSOF(wol_option_map); i++)
                 if (opts & wol_option_map[i].opt &&
                     !strextend_with_separator(&str, ",", wol_option_map[i].name))
@@ -54,7 +60,7 @@
         }
 
         *ret = TAKE_PTR(str);
-        return 0;
+        return 1;
 }
 
 static const char* const port_table[] = {
@@ -68,14 +74,80 @@
 DEFINE_STRING_TABLE_LOOKUP(port, NetDevPort);
 DEFINE_CONFIG_PARSE_ENUM(config_parse_port, port, NetDevPort, "Failed to parse Port setting");
 
+static const char* const mdi_table[] = {
+        [ETH_TP_MDI_INVALID]  = "unknown",
+        [ETH_TP_MDI]          = "mdi",
+        [ETH_TP_MDI_X]        = "mdi-x",
+        [ETH_TP_MDI_AUTO]     = "auto",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(mdi, int);
+
 static const char* const netdev_feature_table[_NET_DEV_FEAT_MAX] = {
-        [NET_DEV_FEAT_RX]   = "rx-checksum",
-        [NET_DEV_FEAT_TX]   = "tx-checksum-", /* The suffix "-" means any feature beginning with "tx-checksum-" */
-        [NET_DEV_FEAT_GSO]  = "tx-generic-segmentation",
-        [NET_DEV_FEAT_GRO]  = "rx-gro",
-        [NET_DEV_FEAT_LRO]  = "rx-lro",
-        [NET_DEV_FEAT_TSO]  = "tx-tcp-segmentation",
-        [NET_DEV_FEAT_TSO6] = "tx-tcp6-segmentation",
+        [NET_DEV_FEAT_SG]                  = "tx-scatter-gather",
+        [NET_DEV_FEAT_IP_CSUM]             = "tx-checksum-ipv4",
+        [NET_DEV_FEAT_HW_CSUM]             = "tx-checksum-ip-generic",
+        [NET_DEV_FEAT_IPV6_CSUM]           = "tx-checksum-ipv6",
+        [NET_DEV_FEAT_HIGHDMA]             = "highdma",
+        [NET_DEV_FEAT_FRAGLIST]            = "tx-scatter-gather-fraglist",
+        [NET_DEV_FEAT_HW_VLAN_CTAG_TX]     = "tx-vlan-hw-insert",
+        [NET_DEV_FEAT_HW_VLAN_CTAG_RX]     = "rx-vlan-hw-parse",
+        [NET_DEV_FEAT_HW_VLAN_CTAG_FILTER] = "rx-vlan-filter",
+        [NET_DEV_FEAT_HW_VLAN_STAG_TX]     = "tx-vlan-stag-hw-insert",
+        [NET_DEV_FEAT_HW_VLAN_STAG_RX]     = "rx-vlan-stag-hw-parse",
+        [NET_DEV_FEAT_HW_VLAN_STAG_FILTER] = "rx-vlan-stag-filter",
+        [NET_DEV_FEAT_VLAN_CHALLENGED]     = "vlan-challenged",
+        [NET_DEV_FEAT_GSO]                 = "tx-generic-segmentation",
+        [NET_DEV_FEAT_LLTX]                = "tx-lockless",
+        [NET_DEV_FEAT_NETNS_LOCAL]         = "netns-local",
+        [NET_DEV_FEAT_GRO]                 = "rx-gro",
+        [NET_DEV_FEAT_GRO_HW]              = "rx-gro-hw",
+        [NET_DEV_FEAT_LRO]                 = "rx-lro",
+        [NET_DEV_FEAT_TSO]                 = "tx-tcp-segmentation",
+        [NET_DEV_FEAT_GSO_ROBUST]          = "tx-gso-robust",
+        [NET_DEV_FEAT_TSO_ECN]             = "tx-tcp-ecn-segmentation",
+        [NET_DEV_FEAT_TSO_MANGLEID]        = "tx-tcp-mangleid-segmentation",
+        [NET_DEV_FEAT_TSO6]                = "tx-tcp6-segmentation",
+        [NET_DEV_FEAT_FSO]                 = "tx-fcoe-segmentation",
+        [NET_DEV_FEAT_GSO_GRE]             = "tx-gre-segmentation",
+        [NET_DEV_FEAT_GSO_GRE_CSUM]        = "tx-gre-csum-segmentation",
+        [NET_DEV_FEAT_GSO_IPXIP4]          = "tx-ipxip4-segmentation",
+        [NET_DEV_FEAT_GSO_IPXIP6]          = "tx-ipxip6-segmentation",
+        [NET_DEV_FEAT_GSO_UDP_TUNNEL]      = "tx-udp_tnl-segmentation",
+        [NET_DEV_FEAT_GSO_UDP_TUNNEL_CSUM] = "tx-udp_tnl-csum-segmentation",
+        [NET_DEV_FEAT_GSO_PARTIAL]         = "tx-gso-partial",
+        [NET_DEV_FEAT_GSO_TUNNEL_REMCSUM]  = "tx-tunnel-remcsum-segmentation",
+        [NET_DEV_FEAT_GSO_SCTP]            = "tx-sctp-segmentation",
+        [NET_DEV_FEAT_GSO_ESP]             = "tx-esp-segmentation",
+        [NET_DEV_FEAT_GSO_UDP_L4]          = "tx-udp-segmentation",
+        [NET_DEV_FEAT_GSO_FRAGLIST]        = "tx-gso-list",
+        [NET_DEV_FEAT_FCOE_CRC]            = "tx-checksum-fcoe-crc",
+        [NET_DEV_FEAT_SCTP_CRC]            = "tx-checksum-sctp",
+        [NET_DEV_FEAT_FCOE_MTU]            = "fcoe-mtu",
+        [NET_DEV_FEAT_NTUPLE]              = "rx-ntuple-filter",
+        [NET_DEV_FEAT_RXHASH]              = "rx-hashing",
+        [NET_DEV_FEAT_RXCSUM]              = "rx-checksum",
+        [NET_DEV_FEAT_NOCACHE_COPY]        = "tx-nocache-copy",
+        [NET_DEV_FEAT_LOOPBACK]            = "loopback",
+        [NET_DEV_FEAT_RXFCS]               = "rx-fcs",
+        [NET_DEV_FEAT_RXALL]               = "rx-all",
+        [NET_DEV_FEAT_HW_L2FW_DOFFLOAD]    = "l2-fwd-offload",
+        [NET_DEV_FEAT_HW_TC]               = "hw-tc-offload",
+        [NET_DEV_FEAT_HW_ESP]              = "esp-hw-offload",
+        [NET_DEV_FEAT_HW_ESP_TX_CSUM]      = "esp-tx-csum-hw-offload",
+        [NET_DEV_FEAT_RX_UDP_TUNNEL_PORT]  = "rx-udp_tunnel-port-offload",
+        [NET_DEV_FEAT_HW_TLS_RECORD]       = "tls-hw-record",
+        [NET_DEV_FEAT_HW_TLS_TX]           = "tls-hw-tx-offload",
+        [NET_DEV_FEAT_HW_TLS_RX]           = "tls-hw-rx-offload",
+        [NET_DEV_FEAT_GRO_FRAGLIST]        = "rx-gro-list",
+        [NET_DEV_FEAT_HW_MACSEC]           = "macsec-hw-offload",
+        [NET_DEV_FEAT_GRO_UDP_FWD]         = "rx-udp-gro-forwarding",
+        [NET_DEV_FEAT_HW_HSR_TAG_INS]      = "hsr-tag-ins-offload",
+        [NET_DEV_FEAT_HW_HSR_TAG_RM]       = "hsr-tag-rm-offload",
+        [NET_DEV_FEAT_HW_HSR_FWD]          = "hsr-fwd-offload",
+        [NET_DEV_FEAT_HW_HSR_DUP]          = "hsr-dup-offload",
+
+        [NET_DEV_FEAT_TXCSUM]              = "tx-checksum-", /* The suffix "-" means any feature beginning with "tx-checksum-" */
 };
 
 static const char* const ethtool_link_mode_bit_table[] = {
@@ -212,10 +284,9 @@
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
-        r = ioctl(*ethtool_fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
+        if (ioctl(*ethtool_fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
         if (isempty(ecmd.driver))
@@ -252,10 +323,9 @@
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
-        r = ioctl(*ethtool_fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
+        if (ioctl(*ethtool_fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
         if (ret_autonegotiation)
@@ -278,14 +348,14 @@
         return 0;
 }
 
-int ethtool_get_permanent_macaddr(int *ethtool_fd, const char *ifname, struct ether_addr *ret) {
-        _cleanup_close_ int fd = -1;
+int ethtool_get_permanent_hw_addr(int *ethtool_fd, const char *ifname, struct hw_addr_data *ret) {
+        _cleanup_close_ int fd = -EBADF;
         struct {
                 struct ethtool_perm_addr addr;
-                uint8_t space[MAX_ADDR_LEN];
+                uint8_t space[HW_ADDR_MAX_SIZE];
         } epaddr = {
                 .addr.cmd = ETHTOOL_GPERMADDR,
-                .addr.size = MAX_ADDR_LEN,
+                .addr.size = HW_ADDR_MAX_SIZE,
         };
         struct ifreq ifr = {
                 .ifr_data = (caddr_t) &epaddr,
@@ -301,23 +371,19 @@
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
-        r = ioctl(*ethtool_fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
+        if (ioctl(*ethtool_fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
-        if (epaddr.addr.size != 6)
-                return -EOPNOTSUPP;
+        if (epaddr.addr.size == 0)
+                return -ENODATA;
 
-#pragma GCC diagnostic push
-#if HAVE_ZERO_LENGTH_BOUNDS
-#  pragma GCC diagnostic ignored "-Wzero-length-bounds"
-#endif
-        for (size_t i = 0; i < epaddr.addr.size; i++)
-                ret->ether_addr_octet[i] = epaddr.addr.data[i];
-#pragma GCC diagnostic pop
+        if (epaddr.addr.size > HW_ADDR_MAX_SIZE)
+                return -EINVAL;
 
+        ret->length = epaddr.addr.size;
+        memcpy(ret->bytes, epaddr.addr.data, epaddr.addr.size);
         return 0;
 }
 
@@ -327,9 +393,25 @@
                 if (dest != _v)                        \
                         updated = true;                \
                 dest = _v;                             \
-        } while(false)
+        } while (false)
 
-int ethtool_set_wol(int *ethtool_fd, const char *ifname, uint32_t wolopts) {
+#define UPDATE_WITH_MAX(dest, max, val, updated)       \
+        do {                                           \
+                typeof(dest) _v = (val);               \
+                typeof(dest) _max = (max);             \
+                if (_v == 0 || _v > _max)              \
+                        _v = _max;                     \
+                if (dest != _v)                        \
+                        updated = true;                \
+                dest = _v;                             \
+        } while (false)
+
+int ethtool_set_wol(
+                int *ethtool_fd,
+                const char *ifname,
+                uint32_t wolopts,
+                const uint8_t password[SOPASS_MAX]) {
+
         struct ethtool_wolinfo ecmd = {
                 .cmd = ETHTOOL_GWOL,
         };
@@ -342,30 +424,55 @@
         assert(ethtool_fd);
         assert(ifname);
 
-        if (wolopts == UINT32_MAX)
+        if (wolopts == UINT32_MAX && !password)
+                /* Nothing requested. Return earlier. */
                 return 0;
 
         r = ethtool_connect(ethtool_fd);
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
-        r = ioctl(*ethtool_fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
+        CLEANUP_ERASE(ecmd);
+
+        if (ioctl(*ethtool_fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
+        if (wolopts == UINT32_MAX) {
+                /* When password is specified without valid WoL options specified, then enable
+                 * WAKE_MAGICSECURE flag if supported. */
+                wolopts = ecmd.wolopts;
+                if (password && FLAGS_SET(ecmd.supported, WAKE_MAGICSECURE))
+                        wolopts |= WAKE_MAGICSECURE;
+        }
+
+        if ((wolopts & ~ecmd.supported) != 0) {
+                _cleanup_free_ char *str = NULL;
+
+                (void) wol_options_to_string_alloc(wolopts & ~ecmd.supported, &str);
+                log_debug("Network interface %s does not support requested Wake on LAN options \"%s\", ignoring.",
+                          ifname, strna(str));
+
+                wolopts &= ecmd.supported;
+        }
+
+        if (!FLAGS_SET(wolopts, WAKE_MAGICSECURE))
+                /* When WAKE_MAGICSECURE flag is not set, then ignore password. */
+                password = NULL;
+
         UPDATE(ecmd.wolopts, wolopts, need_update);
+        if (password &&
+            memcmp(ecmd.sopass, password, sizeof(ecmd.sopass)) != 0) {
+                memcpy(ecmd.sopass, password, sizeof(ecmd.sopass));
+                need_update = true;
+        }
 
         if (!need_update)
                 return 0;
 
         ecmd.cmd = ETHTOOL_SWOL;
-        r = ioctl(*ethtool_fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(*ethtool_fd, SIOCETHTOOL, &ifr));
 }
 
 int ethtool_set_nic_buffer_size(int *ethtool_fd, const char *ifname, const netdev_ring_param *ring) {
@@ -382,71 +489,65 @@
         assert(ifname);
         assert(ring);
 
-        if (!ring->rx_pending_set &&
-            !ring->rx_mini_pending_set &&
-            !ring->rx_jumbo_pending_set &&
-            !ring->tx_pending_set)
+        if (!ring->rx.set &&
+            !ring->rx_mini.set &&
+            !ring->rx_jumbo.set &&
+            !ring->tx.set)
                 return 0;
 
         r = ethtool_connect(ethtool_fd);
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
-        r = ioctl(*ethtool_fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
+        if (ioctl(*ethtool_fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
-        if (ring->rx_pending_set)
-                UPDATE(ecmd.rx_pending, ring->rx_pending, need_update);
+        if (ring->rx.set)
+                UPDATE_WITH_MAX(ecmd.rx_pending, ecmd.rx_max_pending, ring->rx.value, need_update);
 
-        if (ring->rx_mini_pending_set)
-                UPDATE(ecmd.rx_mini_pending, ring->rx_mini_pending, need_update);
+        if (ring->rx_mini.set)
+                UPDATE_WITH_MAX(ecmd.rx_mini_pending, ecmd.rx_mini_max_pending, ring->rx_mini.value, need_update);
 
-        if (ring->rx_jumbo_pending_set)
-                UPDATE(ecmd.rx_jumbo_pending, ring->rx_jumbo_pending, need_update);
+        if (ring->rx_jumbo.set)
+                UPDATE_WITH_MAX(ecmd.rx_jumbo_pending, ecmd.rx_jumbo_max_pending, ring->rx_jumbo.value, need_update);
 
-        if (ring->tx_pending_set)
-                UPDATE(ecmd.tx_pending, ring->tx_pending, need_update);
+        if (ring->tx.set)
+                UPDATE_WITH_MAX(ecmd.tx_pending, ecmd.tx_max_pending, ring->tx.value, need_update);
 
         if (!need_update)
                 return 0;
 
         ecmd.cmd = ETHTOOL_SRINGPARAM;
-        r = ioctl(*ethtool_fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(*ethtool_fd, SIOCETHTOOL, &ifr));
 }
 
-static int get_stringset(int ethtool_fd, struct ifreq *ifr, int stringset_id, struct ethtool_gstrings **ret) {
+static int get_stringset(int ethtool_fd, const char *ifname, enum ethtool_stringset stringset_id, struct ethtool_gstrings **ret) {
         _cleanup_free_ struct ethtool_gstrings *strings = NULL;
         struct {
                 struct ethtool_sset_info info;
                 uint32_t space;
         } buffer = {
-                .info = {
-                        .cmd = ETHTOOL_GSSET_INFO,
-                        .sset_mask = UINT64_C(1) << stringset_id,
-                },
+                .info.cmd = ETHTOOL_GSSET_INFO,
+                .info.sset_mask = UINT64_C(1) << stringset_id,
         };
-        unsigned len;
-        int r;
+        struct ifreq ifr = {
+                .ifr_data = (void*) &buffer,
+        };
+        uint32_t len;
 
         assert(ethtool_fd >= 0);
-        assert(ifr);
+        assert(ifname);
         assert(ret);
 
-        ifr->ifr_data = (void *) &buffer.info;
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
-        r = ioctl(ethtool_fd, SIOCETHTOOL, ifr);
-        if (r < 0)
+        if (ioctl(ethtool_fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
-        if (!buffer.info.sset_mask)
-                return -EINVAL;
+        if (buffer.info.sset_mask == 0)
+                return -EOPNOTSUPP;
 
 #pragma GCC diagnostic push
 #if HAVE_ZERO_LENGTH_BOUNDS
@@ -454,8 +555,10 @@
 #endif
         len = buffer.info.data[0];
 #pragma GCC diagnostic pop
+        if (len == 0)
+                return -EOPNOTSUPP;
 
-        strings = malloc0(sizeof(struct ethtool_gstrings) + len * ETH_GSTRING_LEN);
+        strings = malloc0(offsetof(struct ethtool_gstrings, data) + len * ETH_GSTRING_LEN);
         if (!strings)
                 return -ENOMEM;
 
@@ -463,82 +566,187 @@
         strings->string_set = stringset_id;
         strings->len = len;
 
-        ifr->ifr_data = (void *) strings;
+        ifr.ifr_data = (void*) strings;
 
-        r = ioctl(ethtool_fd, SIOCETHTOOL, ifr);
-        if (r < 0)
+        if (ioctl(ethtool_fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
         *ret = TAKE_PTR(strings);
+        return 0;
+}
 
+static int get_features(int ethtool_fd, const char *ifname, uint32_t n_features, struct ethtool_gfeatures **ret) {
+        _cleanup_free_ struct ethtool_gfeatures *gfeatures = NULL;
+        struct ifreq ifr;
+
+        assert(ethtool_fd >= 0);
+        assert(ifname);
+        assert(ret);
+        assert(n_features > 0);
+
+        gfeatures = malloc0(offsetof(struct ethtool_gfeatures, features) +
+                            DIV_ROUND_UP(n_features, 32U) * sizeof(gfeatures->features[0]));
+        if (!gfeatures)
+                return -ENOMEM;
+
+        gfeatures->cmd = ETHTOOL_GFEATURES;
+        gfeatures->size = DIV_ROUND_UP(n_features, 32U);
+
+        ifr = (struct ifreq) {
+                .ifr_data = (void*) gfeatures,
+        };
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
+
+        if (ioctl(ethtool_fd, SIOCETHTOOL, &ifr) < 0)
+                return -errno;
+
+        *ret = TAKE_PTR(gfeatures);
         return 0;
 }
 
 static int set_features_bit(
                 const struct ethtool_gstrings *strings,
+                const struct ethtool_gfeatures *gfeatures,
+                struct ethtool_sfeatures *sfeatures,
                 const char *feature,
-                bool flag,
-                struct ethtool_sfeatures *sfeatures) {
-        bool found = false;
+                int flag) {
 
         assert(strings);
-        assert(feature);
+        assert(gfeatures);
         assert(sfeatures);
+        assert(feature);
 
-        for (size_t i = 0; i < strings->len; i++)
-                if (streq((char *) &strings->data[i * ETH_GSTRING_LEN], feature) ||
-                    (endswith(feature, "-") && startswith((char *) &strings->data[i * ETH_GSTRING_LEN], feature))) {
-                        size_t block, bit;
+        if (flag < 0)
+                return 0;
 
-                        block = i / 32;
-                        bit = i % 32;
+        for (uint32_t i = 0; i < strings->len; i++) {
+                uint32_t block, mask;
 
-                        sfeatures->features[block].valid |= 1 << bit;
-                        SET_FLAG(sfeatures->features[block].requested, 1 << bit, flag);
-                        found = true;
-                }
+                if (!strneq((const char*) &strings->data[i * ETH_GSTRING_LEN], feature, ETH_GSTRING_LEN))
+                        continue;
 
-        return found ? 0 : -ENODATA;
+                block = i / 32;
+                mask = UINT32_C(1) << (i % 32);
+
+                if (!FLAGS_SET(gfeatures->features[block].available, mask) ||
+                    FLAGS_SET(gfeatures->features[block].never_changed, mask))
+                        return -EOPNOTSUPP;
+
+                sfeatures->features[block].valid |= mask;
+                SET_FLAG(sfeatures->features[block].requested, mask, flag);
+
+                return 0;
+        }
+
+        return -ENODATA;
 }
 
-int ethtool_set_features(int *ethtool_fd, const char *ifname, const int *features) {
+static int set_features_multiple_bit(
+                const struct ethtool_gstrings *strings,
+                const struct ethtool_gfeatures *gfeatures,
+                struct ethtool_sfeatures *sfeatures,
+                const char *feature,
+                int flag) {
+
+        bool found = false;
+        int r = -ENODATA;
+
+        assert(strings);
+        assert(gfeatures);
+        assert(sfeatures);
+        assert(feature);
+
+        if (flag < 0)
+                return 0;
+
+        for (uint32_t i = 0; i < strings->len; i++) {
+                uint32_t block, mask;
+
+                if (!startswith((const char*) &strings->data[i * ETH_GSTRING_LEN], feature))
+                        continue;
+
+                block = i / 32;
+                mask = UINT32_C(1) << (i % 32);
+
+                if (!FLAGS_SET(gfeatures->features[block].available, mask) ||
+                    FLAGS_SET(gfeatures->features[block].never_changed, mask)) {
+                        r = -EOPNOTSUPP;
+                        continue;
+                }
+
+                /* The flags is explicitly set by set_features_bit() */
+                if (FLAGS_SET(sfeatures->features[block].valid, mask))
+                        continue;
+
+                sfeatures->features[block].valid |= mask;
+                SET_FLAG(sfeatures->features[block].requested, mask, flag);
+
+                found = true;
+        }
+
+        return found ? 0 : r;
+}
+
+int ethtool_set_features(int *ethtool_fd, const char *ifname, const int features[static _NET_DEV_FEAT_MAX]) {
         _cleanup_free_ struct ethtool_gstrings *strings = NULL;
-        struct ethtool_sfeatures *sfeatures;
-        struct ifreq ifr = {};
-        int i, r;
+        _cleanup_free_ struct ethtool_gfeatures *gfeatures = NULL;
+        _cleanup_free_ struct ethtool_sfeatures *sfeatures = NULL;
+        struct ifreq ifr;
+        bool have = false;
+        int r;
 
         assert(ethtool_fd);
         assert(ifname);
         assert(features);
 
+        for (size_t i = 0; i < _NET_DEV_FEAT_MAX; i++)
+                if (features[i] >= 0) {
+                        have = true;
+                        break;
+                }
+
+        if (!have)
+                return 0;
+
         r = ethtool_connect(ethtool_fd);
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
-
-        r = get_stringset(*ethtool_fd, &ifr, ETH_SS_FEATURES, &strings);
+        r = get_stringset(*ethtool_fd, ifname, ETH_SS_FEATURES, &strings);
         if (r < 0)
-                return log_debug_errno(r, "ethtool: could not get ethtool features for %s", ifname);
+                return log_debug_errno(r, "ethtool: could not get ethtool feature strings: %m");
 
-        sfeatures = alloca0(sizeof(struct ethtool_sfeatures) + DIV_ROUND_UP(strings->len, 32U) * sizeof(sfeatures->features[0]));
+        r = get_features(*ethtool_fd, ifname, strings->len, &gfeatures);
+        if (r < 0)
+                return log_debug_errno(r, "ethtool: could not get ethtool features for %s: %m", ifname);
+
+        sfeatures = malloc0(offsetof(struct ethtool_sfeatures, features) +
+                            DIV_ROUND_UP(strings->len, 32U) * sizeof(sfeatures->features[0]));
+        if (!sfeatures)
+                return log_oom_debug();
+
         sfeatures->cmd = ETHTOOL_SFEATURES;
         sfeatures->size = DIV_ROUND_UP(strings->len, 32U);
 
-        for (i = 0; i < _NET_DEV_FEAT_MAX; i++)
-                if (features[i] != -1) {
-                        r = set_features_bit(strings, netdev_feature_table[i], features[i], sfeatures);
-                        if (r < 0) {
-                                log_debug_errno(r, "ethtool: could not find feature, ignoring: %s", netdev_feature_table[i]);
-                                continue;
-                        }
-                }
+        for (size_t i = 0; i < _NET_DEV_FEAT_SIMPLE_MAX; i++) {
+                r = set_features_bit(strings, gfeatures, sfeatures, netdev_feature_table[i], features[i]);
+                if (r < 0)
+                        log_debug_errno(r, "ethtool: could not set feature %s for %s, ignoring: %m", netdev_feature_table[i], ifname);
+        }
 
-        ifr.ifr_data = (void *) sfeatures;
+        for (size_t i = _NET_DEV_FEAT_SIMPLE_MAX; i < _NET_DEV_FEAT_MAX; i++) {
+                r = set_features_multiple_bit(strings, gfeatures, sfeatures, netdev_feature_table[i], features[i]);
+                if (r < 0)
+                        log_debug_errno(r, "ethtool: could not set feature %s for %s, ignoring: %m", netdev_feature_table[i], ifname);
+        }
 
-        r = ioctl(*ethtool_fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
-                return log_debug_errno(r, "ethtool: could not set ethtool features for %s", ifname);
+        ifr = (struct ifreq) {
+                .ifr_data = (void*) sfeatures,
+        };
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
+
+        if (ioctl(*ethtool_fd, SIOCETHTOOL, &ifr) < 0)
+                return log_debug_errno(errno, "ethtool: could not set ethtool features for %s", ifname);
 
         return 0;
 }
@@ -546,13 +754,12 @@
 static int get_glinksettings(int fd, struct ifreq *ifr, struct ethtool_link_usettings **ret) {
         struct ecmd {
                 struct ethtool_link_settings req;
-                __u32 link_mode_data[3 * ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32];
+                uint32_t link_mode_data[3 * ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32];
         } ecmd = {
                 .req.cmd = ETHTOOL_GLINKSETTINGS,
         };
         struct ethtool_link_usettings *u;
         unsigned offset;
-        int r;
 
         assert(fd >= 0);
         assert(ifr);
@@ -568,8 +775,7 @@
 
         ifr->ifr_data = (void *) &ecmd;
 
-        r = ioctl(fd, SIOCETHTOOL, ifr);
-        if (r < 0)
+        if (ioctl(fd, SIOCETHTOOL, ifr) < 0)
                 return -errno;
 
         if (ecmd.req.link_mode_masks_nwords >= 0 || ecmd.req.cmd != ETHTOOL_GLINKSETTINGS)
@@ -579,8 +785,7 @@
 
         ifr->ifr_data = (void *) &ecmd;
 
-        r = ioctl(fd, SIOCETHTOOL, ifr);
-        if (r < 0)
+        if (ioctl(fd, SIOCETHTOOL, ifr) < 0)
                 return -errno;
 
         if (ecmd.req.link_mode_masks_nwords <= 0 || ecmd.req.cmd != ETHTOOL_GLINKSETTINGS)
@@ -613,7 +818,6 @@
         struct ethtool_cmd ecmd = {
                 .cmd = ETHTOOL_GSET,
         };
-        int r;
 
         assert(fd >= 0);
         assert(ifr);
@@ -621,8 +825,7 @@
 
         ifr->ifr_data = (void *) &ecmd;
 
-        r = ioctl(fd, SIOCETHTOOL, ifr);
-        if (r < 0)
+        if (ioctl(fd, SIOCETHTOOL, ifr) < 0)
                 return -errno;
 
         e = new(struct ethtool_link_usettings, 1);
@@ -638,6 +841,8 @@
                 .base.phy_address = ecmd.phy_address,
                 .base.autoneg = ecmd.autoneg,
                 .base.mdio_support = ecmd.mdio_support,
+                .base.eth_tp_mdix = ecmd.eth_tp_mdix,
+                .base.eth_tp_mdix_ctrl = ecmd.eth_tp_mdix_ctrl,
 
                 .link_modes.supported[0] = ecmd.supported,
                 .link_modes.advertising[0] = ecmd.advertising,
@@ -652,10 +857,9 @@
 static int set_slinksettings(int fd, struct ifreq *ifr, const struct ethtool_link_usettings *u) {
         struct {
                 struct ethtool_link_settings req;
-                __u32 link_mode_data[3 * ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32];
+                uint32_t link_mode_data[3 * ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32];
         } ecmd = {};
         unsigned offset;
-        int r;
 
         assert(fd >= 0);
         assert(ifr);
@@ -677,18 +881,13 @@
 
         ifr->ifr_data = (void *) &ecmd;
 
-        r = ioctl(fd, SIOCETHTOOL, ifr);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, SIOCETHTOOL, ifr));
 }
 
 static int set_sset(int fd, struct ifreq *ifr, const struct ethtool_link_usettings *u) {
         struct ethtool_cmd ecmd = {
                 .cmd = ETHTOOL_SSET,
         };
-        int r;
 
         assert(fd >= 0);
         assert(ifr);
@@ -713,11 +912,7 @@
 
         ifr->ifr_data = (void *) &ecmd;
 
-        r = ioctl(fd, SIOCETHTOOL, ifr);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, SIOCETHTOOL, ifr));
 }
 
 int ethtool_set_glinksettings(
@@ -727,7 +922,8 @@
                 const uint32_t advertise[static N_ADVERTISE],
                 uint64_t speed,
                 Duplex duplex,
-                NetDevPort port) {
+                NetDevPort port,
+                uint8_t mdi) {
 
         _cleanup_free_ struct ethtool_link_usettings *u = NULL;
         struct ifreq ifr = {};
@@ -739,7 +935,7 @@
         assert(advertise);
 
         if (autonegotiation < 0 && memeqzero(advertise, sizeof(uint32_t) * N_ADVERTISE) &&
-            speed == 0 && duplex < 0 && port < 0)
+            speed == 0 && duplex < 0 && port < 0 && mdi == ETH_TP_MDI_INVALID)
                 return 0;
 
         /* If autonegotiation is disabled, the speed and duplex represent the fixed link mode and are
@@ -764,13 +960,13 @@
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
         r = get_glinksettings(*fd, &ifr, &u);
         if (r < 0) {
                 r = get_gset(*fd, &ifr, &u);
                 if (r < 0)
-                        return log_debug_errno(r, "ethtool: Cannot get device settings for %s : %m", ifname);
+                        return log_debug_errno(r, "ethtool: Cannot get device settings for %s: %m", ifname);
         }
 
         if (speed > 0)
@@ -797,6 +993,13 @@
                         ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NBYTES - sizeof(uint32_t) * N_ADVERTISE);
         }
 
+        if (mdi != ETH_TP_MDI_INVALID) {
+                if (u->base.eth_tp_mdix_ctrl == ETH_TP_MDI_INVALID)
+                        log_debug("ethtool: setting MDI not supported for %s, ignoring.", ifname);
+                else
+                        UPDATE(u->base.eth_tp_mdix_ctrl, mdi, changed);
+        }
+
         if (!changed)
                 return 0;
 
@@ -824,43 +1027,38 @@
         assert(ifname);
         assert(channels);
 
-        if (!channels->rx_count_set &&
-            !channels->tx_count_set &&
-            !channels->other_count_set &&
-            !channels->combined_count_set)
+        if (!channels->rx.set &&
+            !channels->tx.set &&
+            !channels->other.set &&
+            !channels->combined.set)
                 return 0;
 
         r = ethtool_connect(fd);
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
-        r = ioctl(*fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
+        if (ioctl(*fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
-        if (channels->rx_count_set)
-                UPDATE(ecmd.rx_count, channels->rx_count, need_update);
+        if (channels->rx.set)
+                UPDATE_WITH_MAX(ecmd.rx_count, ecmd.max_rx, channels->rx.value, need_update);
 
-        if (channels->tx_count_set)
-                UPDATE(ecmd.tx_count, channels->tx_count, need_update);
+        if (channels->tx.set)
+                UPDATE_WITH_MAX(ecmd.tx_count, ecmd.max_tx, channels->tx.value, need_update);
 
-        if (channels->other_count_set)
-                UPDATE(ecmd.other_count, channels->other_count, need_update);
+        if (channels->other.set)
+                UPDATE_WITH_MAX(ecmd.other_count, ecmd.max_other, channels->other.value, need_update);
 
-        if (channels->combined_count_set)
-                UPDATE(ecmd.combined_count, channels->combined_count, need_update);
+        if (channels->combined.set)
+                UPDATE_WITH_MAX(ecmd.combined_count, ecmd.max_combined, channels->combined.value, need_update);
 
         if (!need_update)
                 return 0;
 
         ecmd.cmd = ETHTOOL_SCHANNELS;
-        r = ioctl(*fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(*fd, SIOCETHTOOL, &ifr));
 }
 
 int ethtool_set_flow_control(int *fd, const char *ifname, int rx, int tx, int autoneg) {
@@ -883,10 +1081,9 @@
         if (r < 0)
                 return r;
 
-        strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
 
-        r = ioctl(*fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
+        if (ioctl(*fd, SIOCETHTOOL, &ifr) < 0)
                 return -errno;
 
         if (rx >= 0)
@@ -902,62 +1099,127 @@
                 return 0;
 
         ecmd.cmd = ETHTOOL_SPAUSEPARAM;
-        r = ioctl(*fd, SIOCETHTOOL, &ifr);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(*fd, SIOCETHTOOL, &ifr));
 }
 
-int config_parse_channel(
-                const char *unit,
-                const char *filename,
-                unsigned line,
-                const char *section,
-                unsigned section_line,
-                const char *lvalue,
-                int ltype,
-                const char *rvalue,
-                void *data,
-                void *userdata) {
-
-        netdev_channels *channels = data;
-        uint32_t k;
+int ethtool_set_nic_coalesce_settings(int *ethtool_fd, const char *ifname, const netdev_coalesce_param *coalesce) {
+        struct ethtool_coalesce ecmd = {
+                .cmd = ETHTOOL_GCOALESCE,
+        };
+        struct ifreq ifr = {
+                .ifr_data = (void*) &ecmd,
+        };
+        bool need_update = false;
         int r;
 
-        assert(filename);
-        assert(section);
-        assert(lvalue);
-        assert(rvalue);
-        assert(data);
+        assert(ethtool_fd);
+        assert(ifname);
+        assert(coalesce);
 
-        r = safe_atou32(rvalue, &k);
-        if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to parse channel value for %s=, ignoring: %s", lvalue, rvalue);
+        if (coalesce->use_adaptive_rx_coalesce < 0 &&
+            coalesce->use_adaptive_tx_coalesce < 0 &&
+            !coalesce->rx_coalesce_usecs.set &&
+            !coalesce->rx_max_coalesced_frames.set &&
+            !coalesce->rx_coalesce_usecs_irq.set &&
+            !coalesce->rx_max_coalesced_frames_irq.set &&
+            !coalesce->tx_coalesce_usecs.set &&
+            !coalesce->tx_max_coalesced_frames.set &&
+            !coalesce->tx_coalesce_usecs_irq.set &&
+            !coalesce->tx_max_coalesced_frames_irq.set &&
+            !coalesce->stats_block_coalesce_usecs.set &&
+            !coalesce->pkt_rate_low.set &&
+            !coalesce->rx_coalesce_usecs_low.set &&
+            !coalesce->rx_max_coalesced_frames_low.set &&
+            !coalesce->tx_coalesce_usecs_low.set &&
+            !coalesce->tx_max_coalesced_frames_low.set &&
+            !coalesce->pkt_rate_high.set &&
+            !coalesce->rx_coalesce_usecs_high.set &&
+            !coalesce->rx_max_coalesced_frames_high.set &&
+            !coalesce->tx_coalesce_usecs_high.set &&
+            !coalesce->tx_max_coalesced_frames_high.set &&
+            !coalesce->rate_sample_interval.set)
                 return 0;
-        }
-        if (k < 1) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Invalid %s= value, ignoring: %s", lvalue, rvalue);
+
+        r = ethtool_connect(ethtool_fd);
+        if (r < 0)
+                return r;
+
+        strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
+
+        if (ioctl(*ethtool_fd, SIOCETHTOOL, &ifr) < 0)
+                return -errno;
+
+        if (coalesce->use_adaptive_rx_coalesce >= 0)
+                UPDATE(ecmd.use_adaptive_rx_coalesce, (uint32_t) coalesce->use_adaptive_rx_coalesce, need_update);
+
+        if (coalesce->use_adaptive_tx_coalesce >= 0)
+                UPDATE(ecmd.use_adaptive_tx_coalesce, (uint32_t) coalesce->use_adaptive_tx_coalesce, need_update);
+
+        if (coalesce->rx_coalesce_usecs.set)
+                UPDATE(ecmd.rx_coalesce_usecs, coalesce->rx_coalesce_usecs.value, need_update);
+
+        if (coalesce->rx_max_coalesced_frames.set)
+                UPDATE(ecmd.rx_max_coalesced_frames, coalesce->rx_max_coalesced_frames.value, need_update);
+
+        if (coalesce->rx_coalesce_usecs_irq.set)
+                UPDATE(ecmd.rx_coalesce_usecs_irq, coalesce->rx_coalesce_usecs_irq.value, need_update);
+
+        if (coalesce->rx_max_coalesced_frames_irq.set)
+                UPDATE(ecmd.rx_max_coalesced_frames_irq, coalesce->rx_max_coalesced_frames_irq.value, need_update);
+
+        if (coalesce->tx_coalesce_usecs.set)
+                UPDATE(ecmd.tx_coalesce_usecs, coalesce->tx_coalesce_usecs.value, need_update);
+
+        if (coalesce->tx_max_coalesced_frames.set)
+                UPDATE(ecmd.tx_max_coalesced_frames, coalesce->tx_max_coalesced_frames.value, need_update);
+
+        if (coalesce->tx_coalesce_usecs_irq.set)
+                UPDATE(ecmd.tx_coalesce_usecs_irq, coalesce->tx_coalesce_usecs_irq.value, need_update);
+
+        if (coalesce->tx_max_coalesced_frames_irq.set)
+                UPDATE(ecmd.tx_max_coalesced_frames_irq, coalesce->tx_max_coalesced_frames_irq.value, need_update);
+
+        if (coalesce->stats_block_coalesce_usecs.set)
+                UPDATE(ecmd.stats_block_coalesce_usecs, coalesce->stats_block_coalesce_usecs.value, need_update);
+
+        if (coalesce->pkt_rate_low.set)
+                UPDATE(ecmd.pkt_rate_low, coalesce->pkt_rate_low.value, need_update);
+
+        if (coalesce->rx_coalesce_usecs_low.set)
+                UPDATE(ecmd.rx_coalesce_usecs_low, coalesce->rx_coalesce_usecs_low.value, need_update);
+
+        if (coalesce->rx_max_coalesced_frames_low.set)
+                UPDATE(ecmd.rx_max_coalesced_frames_low, coalesce->rx_max_coalesced_frames_low.value, need_update);
+
+        if (coalesce->tx_coalesce_usecs_low.set)
+                UPDATE(ecmd.tx_coalesce_usecs_low, coalesce->tx_coalesce_usecs_low.value, need_update);
+
+        if (coalesce->tx_max_coalesced_frames_low.set)
+                UPDATE(ecmd.tx_max_coalesced_frames_low, coalesce->tx_max_coalesced_frames_low.value, need_update);
+
+        if (coalesce->pkt_rate_high.set)
+                UPDATE(ecmd.pkt_rate_high, coalesce->pkt_rate_high.value, need_update);
+
+        if (coalesce->rx_coalesce_usecs_high.set)
+                UPDATE(ecmd.rx_coalesce_usecs_high, coalesce->rx_coalesce_usecs_high.value, need_update);
+
+        if (coalesce->rx_max_coalesced_frames_high.set)
+                UPDATE(ecmd.rx_max_coalesced_frames_high, coalesce->rx_max_coalesced_frames_high.value, need_update);
+
+        if (coalesce->tx_coalesce_usecs_high.set)
+                UPDATE(ecmd.tx_coalesce_usecs_high, coalesce->tx_coalesce_usecs_high.value, need_update);
+
+        if (coalesce->tx_max_coalesced_frames_high.set)
+                UPDATE(ecmd.tx_max_coalesced_frames_high, coalesce->tx_max_coalesced_frames_high.value, need_update);
+
+        if (coalesce->rate_sample_interval.set)
+                UPDATE(ecmd.rate_sample_interval, DIV_ROUND_UP(coalesce->rate_sample_interval.value, USEC_PER_SEC), need_update);
+
+        if (!need_update)
                 return 0;
-        }
 
-        if (streq(lvalue, "RxChannels")) {
-                channels->rx_count = k;
-                channels->rx_count_set = true;
-        } else if (streq(lvalue, "TxChannels")) {
-                channels->tx_count = k;
-                channels->tx_count_set = true;
-        } else if (streq(lvalue, "OtherChannels")) {
-                channels->other_count = k;
-                channels->other_count_set = true;
-        } else if (streq(lvalue, "CombinedChannels")) {
-                channels->combined_count = k;
-                channels->combined_count_set = true;
-        }
-
-        return 0;
+        ecmd.cmd = ETHTOOL_SCOALESCE;
+        return RET_NERRNO(ioctl(*ethtool_fd, SIOCETHTOOL, &ifr));
 }
 
 int config_parse_advertise(
@@ -972,14 +1234,13 @@
                 void *data,
                 void *userdata) {
 
-        uint32_t *advertise = data;
+        uint32_t *advertise = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(section);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 /* Empty string resets the value. */
@@ -1015,7 +1276,7 @@
         }
 }
 
-int config_parse_nic_buffer_size(
+int config_parse_mdi(
                 const char *unit,
                 const char *filename,
                 unsigned line,
@@ -1027,7 +1288,49 @@
                 void *data,
                 void *userdata) {
 
-        netdev_ring_param *ring = data;
+        uint8_t *mdi = ASSERT_PTR(data);
+
+        assert(filename);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *mdi = ETH_TP_MDI_INVALID;
+                return 0;
+        }
+
+        if (STR_IN_SET(rvalue, "mdi", "straight")) {
+                *mdi = ETH_TP_MDI;
+                return 0;
+        }
+
+        if (STR_IN_SET(rvalue, "mdi-x", "mdix", "crossover")) {
+                *mdi = ETH_TP_MDI_X;
+                return 0;
+        }
+
+        if (streq(rvalue, "auto")) {
+                *mdi = ETH_TP_MDI_AUTO;
+                return 0;
+        }
+
+        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                   "Failed to parse %s= setting, ignoring assignment: %s", lvalue, rvalue);
+        return 0;
+}
+
+int config_parse_ring_buffer_or_channel(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        u32_opt *dst = ASSERT_PTR(data);
         uint32_t k;
         int r;
 
@@ -1035,12 +1338,23 @@
         assert(section);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
+
+        if (isempty(rvalue)) {
+                dst->value = 0;
+                dst->set = false;
+                return 0;
+        }
+
+        if (streq(rvalue, "max")) {
+                dst->value = 0;
+                dst->set = true;
+                return 0;
+        }
 
         r = safe_atou32(rvalue, &k);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
-                           "Failed to parse interface buffer value, ignoring: %s", rvalue);
+                           "Failed to parse %s=, ignoring: %s", lvalue, rvalue);
                 return 0;
         }
         if (k < 1) {
@@ -1049,20 +1363,8 @@
                 return 0;
         }
 
-        if (streq(lvalue, "RxBufferSize")) {
-                ring->rx_pending = k;
-                ring->rx_pending_set = true;
-        } else if (streq(lvalue, "RxMiniBufferSize")) {
-                ring->rx_mini_pending = k;
-                ring->rx_mini_pending_set = true;
-        } else if (streq(lvalue, "RxJumboBufferSize")) {
-                ring->rx_jumbo_pending = k;
-                ring->rx_jumbo_pending_set = true;
-        } else if (streq(lvalue, "TxBufferSize")) {
-                ring->tx_pending = k;
-                ring->tx_pending_set = true;
-        }
-
+        dst->value = k;
+        dst->set = true;
         return 0;
 }
 
@@ -1131,3 +1433,82 @@
 
         return 0;
 }
+
+int config_parse_coalesce_u32(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+        u32_opt *dst = data;
+        uint32_t k;
+        int r;
+
+        if (isempty(rvalue)) {
+                dst->value = 0;
+                dst->set = false;
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, &k);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        dst->value = k;
+        dst->set = true;
+        return 0;
+}
+
+int config_parse_coalesce_sec(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+        u32_opt *dst = data;
+        usec_t usec;
+        int r;
+
+        if (isempty(rvalue)) {
+                dst->value = 0;
+                dst->set = false;
+                return 0;
+        }
+
+        r = parse_sec(rvalue, &usec);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse coalesce setting value, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        if (usec > UINT32_MAX) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Too large %s= value, ignoring: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        if (STR_IN_SET(lvalue, "StatisticsBlockCoalesceSec", "CoalescePacketRateSampleIntervalSec") && usec < 1) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid %s= value, ignoring: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        dst->value = (uint32_t) usec;
+        dst->set = true;
+
+        return 0;
+}
diff --git a/src/shared/ethtool-util.h b/src/shared/ethtool-util.h
index 7d28766..84dd444 100644
--- a/src/shared/ethtool-util.h
+++ b/src/shared/ethtool-util.h
@@ -6,6 +6,7 @@
 #include <linux/ethtool.h>
 
 #include "conf-parser.h"
+#include "ether-addr-util.h"
 
 #define N_ADVERTISE 3
 
@@ -19,13 +20,71 @@
 } Duplex;
 
 typedef enum NetDevFeature {
-        NET_DEV_FEAT_RX,
-        NET_DEV_FEAT_TX,
+        NET_DEV_FEAT_SG,
+        NET_DEV_FEAT_IP_CSUM,
+        NET_DEV_FEAT_HW_CSUM,
+        NET_DEV_FEAT_IPV6_CSUM,
+        NET_DEV_FEAT_HIGHDMA,
+        NET_DEV_FEAT_FRAGLIST,
+        NET_DEV_FEAT_HW_VLAN_CTAG_TX,
+        NET_DEV_FEAT_HW_VLAN_CTAG_RX,
+        NET_DEV_FEAT_HW_VLAN_CTAG_FILTER,
+        NET_DEV_FEAT_HW_VLAN_STAG_TX,
+        NET_DEV_FEAT_HW_VLAN_STAG_RX,
+        NET_DEV_FEAT_HW_VLAN_STAG_FILTER,
+        NET_DEV_FEAT_VLAN_CHALLENGED,
         NET_DEV_FEAT_GSO,
+        NET_DEV_FEAT_LLTX,
+        NET_DEV_FEAT_NETNS_LOCAL,
         NET_DEV_FEAT_GRO,
+        NET_DEV_FEAT_GRO_HW,
         NET_DEV_FEAT_LRO,
         NET_DEV_FEAT_TSO,
+        NET_DEV_FEAT_GSO_ROBUST,
+        NET_DEV_FEAT_TSO_ECN,
+        NET_DEV_FEAT_TSO_MANGLEID,
         NET_DEV_FEAT_TSO6,
+        NET_DEV_FEAT_FSO,
+        NET_DEV_FEAT_GSO_GRE,
+        NET_DEV_FEAT_GSO_GRE_CSUM,
+        NET_DEV_FEAT_GSO_IPXIP4,
+        NET_DEV_FEAT_GSO_IPXIP6,
+        NET_DEV_FEAT_GSO_UDP_TUNNEL,
+        NET_DEV_FEAT_GSO_UDP_TUNNEL_CSUM,
+        NET_DEV_FEAT_GSO_PARTIAL,
+        NET_DEV_FEAT_GSO_TUNNEL_REMCSUM,
+        NET_DEV_FEAT_GSO_SCTP,
+        NET_DEV_FEAT_GSO_ESP,
+        NET_DEV_FEAT_GSO_UDP_L4,
+        NET_DEV_FEAT_GSO_FRAGLIST,
+        NET_DEV_FEAT_FCOE_CRC,
+        NET_DEV_FEAT_SCTP_CRC,
+        NET_DEV_FEAT_FCOE_MTU,
+        NET_DEV_FEAT_NTUPLE,
+        NET_DEV_FEAT_RXHASH,
+        NET_DEV_FEAT_RXCSUM,
+        NET_DEV_FEAT_NOCACHE_COPY,
+        NET_DEV_FEAT_LOOPBACK,
+        NET_DEV_FEAT_RXFCS,
+        NET_DEV_FEAT_RXALL,
+        NET_DEV_FEAT_HW_L2FW_DOFFLOAD,
+        NET_DEV_FEAT_HW_TC,
+        NET_DEV_FEAT_HW_ESP,
+        NET_DEV_FEAT_HW_ESP_TX_CSUM,
+        NET_DEV_FEAT_RX_UDP_TUNNEL_PORT,
+        NET_DEV_FEAT_HW_TLS_RECORD,
+        NET_DEV_FEAT_HW_TLS_TX,
+        NET_DEV_FEAT_HW_TLS_RX,
+        NET_DEV_FEAT_GRO_FRAGLIST,
+        NET_DEV_FEAT_HW_MACSEC,
+        NET_DEV_FEAT_GRO_UDP_FWD,
+        NET_DEV_FEAT_HW_HSR_TAG_INS,
+        NET_DEV_FEAT_HW_HSR_TAG_RM,
+        NET_DEV_FEAT_HW_HSR_FWD,
+        NET_DEV_FEAT_HW_HSR_DUP,
+        _NET_DEV_FEAT_SIMPLE_MAX,
+
+        NET_DEV_FEAT_TXCSUM = _NET_DEV_FEAT_SIMPLE_MAX,
         _NET_DEV_FEAT_MAX,
         _NET_DEV_FEAT_INVALID = -EINVAL,
 } NetDevFeature;
@@ -57,43 +116,70 @@
         } link_modes;
 };
 
-typedef struct netdev_channels {
-        uint32_t rx_count;
-        uint32_t tx_count;
-        uint32_t other_count;
-        uint32_t combined_count;
+typedef struct u32_opt {
+        uint32_t value; /* a value of 0 indicates the hardware advertised maximum should be used. */
+        bool set;
+} u32_opt;
 
-        bool rx_count_set;
-        bool tx_count_set;
-        bool other_count_set;
-        bool combined_count_set;
+typedef struct netdev_channels {
+        u32_opt rx;
+        u32_opt tx;
+        u32_opt other;
+        u32_opt combined;
 } netdev_channels;
 
 typedef struct netdev_ring_param {
-        uint32_t rx_pending;
-        uint32_t rx_mini_pending;
-        uint32_t rx_jumbo_pending;
-        uint32_t tx_pending;
-
-        bool rx_pending_set;
-        bool rx_mini_pending_set;
-        bool rx_jumbo_pending_set;
-        bool tx_pending_set;
+        u32_opt rx;
+        u32_opt rx_mini;
+        u32_opt rx_jumbo;
+        u32_opt tx;
 } netdev_ring_param;
 
+typedef struct netdev_coalesce_param {
+        u32_opt rx_coalesce_usecs;
+        u32_opt rx_max_coalesced_frames;
+        u32_opt rx_coalesce_usecs_irq;
+        u32_opt rx_max_coalesced_frames_irq;
+        u32_opt tx_coalesce_usecs;
+        u32_opt tx_max_coalesced_frames;
+        u32_opt tx_coalesce_usecs_irq;
+        u32_opt tx_max_coalesced_frames_irq;
+        u32_opt stats_block_coalesce_usecs;
+        int use_adaptive_rx_coalesce;
+        int use_adaptive_tx_coalesce;
+        u32_opt pkt_rate_low;
+        u32_opt rx_coalesce_usecs_low;
+        u32_opt rx_max_coalesced_frames_low;
+        u32_opt tx_coalesce_usecs_low;
+        u32_opt tx_max_coalesced_frames_low;
+        u32_opt pkt_rate_high;
+        u32_opt rx_coalesce_usecs_high;
+        u32_opt rx_max_coalesced_frames_high;
+        u32_opt tx_coalesce_usecs_high;
+        u32_opt tx_max_coalesced_frames_high;
+        u32_opt rate_sample_interval;
+} netdev_coalesce_param;
+
 int ethtool_get_driver(int *ethtool_fd, const char *ifname, char **ret);
 int ethtool_get_link_info(int *ethtool_fd, const char *ifname,
                           int *ret_autonegotiation, uint64_t *ret_speed,
                           Duplex *ret_duplex, NetDevPort *ret_port);
-int ethtool_get_permanent_macaddr(int *ethtool_fd, const char *ifname, struct ether_addr *ret);
-int ethtool_set_wol(int *ethtool_fd, const char *ifname, uint32_t wolopts);
+int ethtool_get_permanent_hw_addr(int *ethtool_fd, const char *ifname, struct hw_addr_data *ret);
+int ethtool_set_wol(int *ethtool_fd, const char *ifname, uint32_t wolopts, const uint8_t password[SOPASS_MAX]);
 int ethtool_set_nic_buffer_size(int *ethtool_fd, const char *ifname, const netdev_ring_param *ring);
-int ethtool_set_features(int *ethtool_fd, const char *ifname, const int *features);
-int ethtool_set_glinksettings(int *ethtool_fd, const char *ifname,
-                              int autonegotiation, const uint32_t advertise[static N_ADVERTISE],
-                              uint64_t speed, Duplex duplex, NetDevPort port);
+int ethtool_set_features(int *ethtool_fd, const char *ifname, const int features[static _NET_DEV_FEAT_MAX]);
+int ethtool_set_glinksettings(
+                int *fd,
+                const char *ifname,
+                int autonegotiation,
+                const uint32_t advertise[static N_ADVERTISE],
+                uint64_t speed,
+                Duplex duplex,
+                NetDevPort port,
+                uint8_t mdi);
 int ethtool_set_channels(int *ethtool_fd, const char *ifname, const netdev_channels *channels);
 int ethtool_set_flow_control(int *fd, const char *ifname, int rx, int tx, int autoneg);
+int ethtool_set_nic_coalesce_settings(int *ethtool_fd, const char *ifname, const netdev_coalesce_param *coalesce);
 
 const char *duplex_to_string(Duplex d) _const_;
 Duplex duplex_from_string(const char *d) _pure_;
@@ -103,12 +189,17 @@
 const char *port_to_string(NetDevPort port) _const_;
 NetDevPort port_from_string(const char *port) _pure_;
 
+const char *mdi_to_string(int mdi) _const_;
+
 const char *ethtool_link_mode_bit_to_string(enum ethtool_link_mode_bit_indices val) _const_;
 enum ethtool_link_mode_bit_indices ethtool_link_mode_bit_from_string(const char *str) _pure_;
 
 CONFIG_PARSER_PROTOTYPE(config_parse_duplex);
 CONFIG_PARSER_PROTOTYPE(config_parse_wol);
 CONFIG_PARSER_PROTOTYPE(config_parse_port);
-CONFIG_PARSER_PROTOTYPE(config_parse_channel);
+CONFIG_PARSER_PROTOTYPE(config_parse_mdi);
 CONFIG_PARSER_PROTOTYPE(config_parse_advertise);
-CONFIG_PARSER_PROTOTYPE(config_parse_nic_buffer_size);
+CONFIG_PARSER_PROTOTYPE(config_parse_ring_buffer_or_channel);
+CONFIG_PARSER_PROTOTYPE(config_parse_coalesce_u32);
+CONFIG_PARSER_PROTOTYPE(config_parse_coalesce_sec);
+CONFIG_PARSER_PROTOTYPE(config_parse_nic_coalesce_setting);
diff --git a/src/shared/exec-util.c b/src/shared/exec-util.c
index 031ca4c..8dafca5 100644
--- a/src/shared/exec-util.c
+++ b/src/shared/exec-util.c
@@ -18,8 +18,8 @@
 #include "hashmap.h"
 #include "macro.h"
 #include "missing_syscall.h"
+#include "path-util.h"
 #include "process-util.h"
-#include "rlimit-util.h"
 #include "serialize.h"
 #include "set.h"
 #include "signal-util.h"
@@ -29,7 +29,6 @@
 #include "strv.h"
 #include "terminal-util.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 /* Put this test here for a lack of better place */
 assert_cc(EAGAIN == EWOULDBLOCK);
@@ -38,25 +37,23 @@
         pid_t _pid;
         int r;
 
-        if (null_or_empty_path(path)) {
+        if (null_or_empty_path(path) > 0) {
                 log_debug("%s is empty (a mask).", path);
                 return 0;
         }
 
-        r = safe_fork("(direxec)", FORK_DEATHSIG|FORK_LOG, &_pid);
+        r = safe_fork("(direxec)", FORK_DEATHSIG|FORK_LOG|FORK_RLIMIT_NOFILE_SAFE, &_pid);
         if (r < 0)
                 return r;
         if (r == 0) {
                 char *_argv[2];
 
                 if (stdout_fd >= 0) {
-                        r = rearrange_stdio(STDIN_FILENO, stdout_fd, STDERR_FILENO);
+                        r = rearrange_stdio(STDIN_FILENO, TAKE_FD(stdout_fd), STDERR_FILENO);
                         if (r < 0)
                                 _exit(EXIT_FAILURE);
                 }
 
-                (void) rlimit_nofile_safe();
-
                 if (set_systemd_exec_pid) {
                         r = setenv_systemd_exec_pid(false);
                         if (r < 0)
@@ -91,7 +88,6 @@
 
         _cleanup_hashmap_free_free_ Hashmap *pids = NULL;
         _cleanup_strv_free_ char **paths = NULL;
-        char **path, **e;
         int r;
         bool parallel_execution;
 
@@ -125,7 +121,7 @@
 
         STRV_FOREACH(path, paths) {
                 _cleanup_free_ char *t = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 pid_t pid;
 
                 t = strdup(*path);
@@ -133,7 +129,13 @@
                         return log_oom();
 
                 if (callbacks) {
-                        fd = open_serialization_fd(basename(*path));
+                        _cleanup_free_ char *bn = NULL;
+
+                        r = path_extract_filename(*path, &bn);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to extract filename from path '%s': %m", *path);
+
+                        fd = open_serialization_fd(bn);
                         if (fd < 0)
                                 return log_error_errno(fd, "Failed to open serialization file: %m");
                 }
@@ -160,7 +162,7 @@
                                         return log_error_errno(errno, "Failed to seek on serialization fd: %m");
 
                                 r = callbacks[STDOUT_GENERATE](fd, callback_args[STDOUT_GENERATE]);
-                                fd = -1;
+                                fd = -EBADF;
                                 if (r < 0)
                                         return log_error_errno(r, "Failed to process output from %s: %m", *path);
                         }
@@ -201,15 +203,16 @@
                 ExecDirFlags flags) {
 
         char **dirs = (char**) directories;
-        _cleanup_close_ int fd = -1;
-        char *name;
+        _cleanup_free_ char *name = NULL;
+        _cleanup_close_ int fd = -EBADF;
         int r;
         pid_t executor_pid;
 
         assert(!strv_isempty(dirs));
 
-        name = basename(dirs[0]);
-        assert(!isempty(name));
+        r = path_extract_filename(dirs[0], &name);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract file name from '%s': %m", dirs[0]);
 
         if (callbacks) {
                 assert(callback_args);
@@ -247,14 +250,14 @@
                 return log_error_errno(errno, "Failed to rewind serialization fd: %m");
 
         r = callbacks[STDOUT_CONSUME](fd, callback_args[STDOUT_CONSUME]);
-        fd = -1;
+        fd = -EBADF;
         if (r < 0)
                 return log_error_errno(r, "Failed to parse returned data: %m");
         return 0;
 }
 
 static int gather_environment_generate(int fd, void *arg) {
-        char ***env = arg, **x, **y;
+        char ***env = ASSERT_PTR(arg);
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **new = NULL;
         int r;
@@ -265,8 +268,6 @@
          * fd is always consumed, even on error.
          */
 
-        assert(env);
-
         f = fdopen(fd, "r");
         if (!f) {
                 safe_close(fd);
@@ -296,13 +297,11 @@
 
 static int gather_environment_collect(int fd, void *arg) {
         _cleanup_fclose_ FILE *f = NULL;
-        char ***env = arg;
+        char ***env = ASSERT_PTR(arg);
         int r;
 
         /* Write out a series of env=cescape(VAR=value) assignments to fd. */
 
-        assert(env);
-
         f = fdopen(fd, "w");
         if (!f) {
                 safe_close(fd);
@@ -322,13 +321,11 @@
 
 static int gather_environment_consume(int fd, void *arg) {
         _cleanup_fclose_ FILE *f = NULL;
-        char ***env = arg;
+        char ***env = ASSERT_PTR(arg);
         int r = 0;
 
         /* Read a series of env=cescape(VAR=value) assignments from fd into env. */
 
-        assert(env);
-
         f = fdopen(fd, "r");
         if (!f) {
                 safe_close(fd);
@@ -369,7 +366,6 @@
 
 int exec_command_flags_from_strv(char **ex_opts, ExecCommandFlags *flags) {
         ExecCommandFlags ex_flag, ret_flags = 0;
-        char **opt;
 
         assert(flags);
 
@@ -449,7 +445,16 @@
 }
 
 int fexecve_or_execve(int executable_fd, const char *executable, char *const argv[], char *const envp[]) {
+        /* Refuse invalid fds, regardless if fexecve() use is enabled or not */
+        if (executable_fd < 0)
+                return -EBADF;
+
+        /* Block any attempts on exploiting Linux' liberal argv[] handling, i.e. CVE-2021-4034 and suchlike */
+        if (isempty(executable) || strv_isempty(argv))
+                return -EINVAL;
+
 #if ENABLE_FEXECVE
+
         execveat(executable_fd, "", argv, envp, AT_EMPTY_PATH);
 
         if (IN_SET(errno, ENOSYS, ENOENT) || ERRNO_IS_PRIVILEGE(errno))
@@ -470,3 +475,80 @@
                 execve(executable, argv, envp);
         return -errno;
 }
+
+int fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret_pid, const char *path, ...) {
+        bool stdout_is_tty, stderr_is_tty;
+        size_t n, i;
+        va_list ap;
+        char **l;
+        int r;
+
+        assert(path);
+
+        /* Spawns a temporary TTY agent, making sure it goes away when we go away */
+
+        r = safe_fork_full(name,
+                           except,
+                           n_except,
+                           FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_CLOSE_ALL_FDS|FORK_REOPEN_LOG|FORK_RLIMIT_NOFILE_SAFE,
+                           ret_pid);
+        if (r < 0)
+                return r;
+        if (r > 0)
+                return 0;
+
+        /* In the child: */
+
+        stdout_is_tty = isatty(STDOUT_FILENO);
+        stderr_is_tty = isatty(STDERR_FILENO);
+
+        if (!stdout_is_tty || !stderr_is_tty) {
+                int fd;
+
+                /* Detach from stdout/stderr and reopen /dev/tty for them. This is important to ensure that
+                 * when systemctl is started via popen() or a similar call that expects to read EOF we
+                 * actually do generate EOF and not delay this indefinitely by keeping an unused copy of
+                 * stdin around. */
+                fd = open("/dev/tty", O_WRONLY);
+                if (fd < 0) {
+                        if (errno != ENXIO) {
+                                log_error_errno(errno, "Failed to open /dev/tty: %m");
+                                _exit(EXIT_FAILURE);
+                        }
+
+                        /* If we get ENXIO here we have no controlling TTY even though stdout/stderr are
+                         * connected to a TTY. That's a weird setup, but let's handle it gracefully: let's
+                         * skip the forking of the agents, given the TTY setup is not in order. */
+                } else {
+                        if (!stdout_is_tty && dup2(fd, STDOUT_FILENO) < 0) {
+                                log_error_errno(errno, "Failed to dup2 /dev/tty: %m");
+                                _exit(EXIT_FAILURE);
+                        }
+
+                        if (!stderr_is_tty && dup2(fd, STDERR_FILENO) < 0) {
+                                log_error_errno(errno, "Failed to dup2 /dev/tty: %m");
+                                _exit(EXIT_FAILURE);
+                        }
+
+                        fd = safe_close_above_stdio(fd);
+                }
+        }
+
+        /* Count arguments */
+        va_start(ap, path);
+        for (n = 0; va_arg(ap, char*); n++)
+                ;
+        va_end(ap);
+
+        /* Allocate strv */
+        l = newa(char*, n + 1);
+
+        /* Fill in arguments */
+        va_start(ap, path);
+        for (i = 0; i <= n; i++)
+                l[i] = va_arg(ap, char*);
+        va_end(ap);
+
+        execv(path, l);
+        _exit(EXIT_FAILURE);
+}
diff --git a/src/shared/exec-util.h b/src/shared/exec-util.h
index 9ce5324..ba4506e 100644
--- a/src/shared/exec-util.h
+++ b/src/shared/exec-util.h
@@ -48,3 +48,5 @@
 ExecCommandFlags exec_command_flags_from_string(const char *s);
 
 int fexecve_or_execve(int executable_fd, const char *executable, char *const argv[], char *const envp[]);
+
+int fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret_pid, const char *path, ...) _sentinel_;
diff --git a/src/shared/exit-status.c b/src/shared/exit-status.c
index 5a5cac1..1c6168e 100644
--- a/src/shared/exit-status.c
+++ b/src/shared/exit-status.c
@@ -18,8 +18,8 @@
          *   8…63  │ (Currently unmapped)
          *  64…78  │ BSD defined exit codes
          *  79…199 │ (Currently unmapped)
-         * 200…243 │ systemd's private error codes (might be extended to 254 in future development)
-         * 244…254 │ (Currently unmapped, but see above)
+         * 200…244 │ systemd's private error codes (might be extended to 254 in future development)
+         * 245…254 │ (Currently unmapped, but see above)
          *
          *   255   │ EXIT_EXCEPTION (We use this to propagate exit-by-signal events. It's frequently used by others apps (like bash)
          *         │ to indicate exit reason that cannot really be expressed in a single exit status value — such as a propagated
@@ -71,6 +71,7 @@
         [EXIT_CONFIGURATION_DIRECTORY] = { "CONFIGURATION_DIRECTORY", EXIT_STATUS_SYSTEMD },
         [EXIT_NUMA_POLICY] =             { "NUMA_POLICY",             EXIT_STATUS_SYSTEMD },
         [EXIT_CREDENTIALS] =             { "CREDENTIALS",             EXIT_STATUS_SYSTEMD },
+        [EXIT_BPF] =                     { "BPF",                     EXIT_STATUS_SYSTEMD },
 
         [EXIT_EXCEPTION] =               { "EXCEPTION",               EXIT_STATUS_SYSTEMD },
 
diff --git a/src/shared/exit-status.h b/src/shared/exit-status.h
index 05707bf..3f9a2ad 100644
--- a/src/shared/exit-status.h
+++ b/src/shared/exit-status.h
@@ -71,6 +71,7 @@
         EXIT_CONFIGURATION_DIRECTORY,
         EXIT_NUMA_POLICY,
         EXIT_CREDENTIALS,
+        EXIT_BPF,
 
         EXIT_EXCEPTION = 255,  /* Whenever we want to propagate an abnormal/signal exit, in line with bash */
 };
diff --git a/src/shared/extension-release.c b/src/shared/extension-release.c
index 29cbecb..2da8e7e 100644
--- a/src/shared/extension-release.c
+++ b/src/shared/extension-release.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
+#include "architecture.h"
 #include "env-util.h"
 #include "extension-release.h"
 #include "log.h"
@@ -12,9 +13,10 @@
                 const char *host_os_release_id,
                 const char *host_os_release_version_id,
                 const char *host_os_release_sysext_level,
+                const char *host_sysext_scope,
                 char **extension_release) {
 
-        const char *extension_release_id = NULL, *extension_release_sysext_level = NULL;
+        const char *extension_release_id = NULL, *extension_release_sysext_level = NULL, *extension_architecture = NULL;
 
         assert(name);
         assert(!isempty(host_os_release_id));
@@ -25,16 +27,55 @@
                 return 0;
         }
 
-        extension_release_id = strv_env_pairs_get(extension_release, "ID");
-        if (isempty(extension_release_id)) {
-                log_debug("Extension '%s' does not contain ID in extension-release but requested to match '%s'",
-                          name, strna(host_os_release_id));
+        if (host_sysext_scope) {
+                _cleanup_strv_free_ char **extension_sysext_scope_list = NULL;
+                const char *extension_sysext_scope;
+                bool valid;
+
+                extension_sysext_scope = strv_env_pairs_get(extension_release, "SYSEXT_SCOPE");
+                if (extension_sysext_scope) {
+                        extension_sysext_scope_list = strv_split(extension_sysext_scope, WHITESPACE);
+                        if (!extension_sysext_scope_list)
+                                return -ENOMEM;
+                }
+
+                /* by default extension are good for attachment in portable service and on the system */
+                valid = strv_contains(
+                                extension_sysext_scope_list ?: STRV_MAKE("system", "portable"),
+                                host_sysext_scope);
+                if (!valid) {
+                        log_debug("Extension '%s' is not suitable for scope %s, ignoring extension.", name, host_sysext_scope);
+                        return 0;
+                }
+        }
+
+        /* When the architecture field is present and not '_any' it must match the host - for now just look at uname but in
+         * the future we could check if the kernel also supports 32 bit or binfmt has a translator set up for the architecture */
+        extension_architecture = strv_env_pairs_get(extension_release, "ARCHITECTURE");
+        if (!isempty(extension_architecture) && !streq(extension_architecture, "_any") &&
+            !streq(architecture_to_string(uname_architecture()), extension_architecture)) {
+                log_debug("Extension '%s' is for architecture '%s', but deployed on top of '%s'.",
+                          name, extension_architecture, architecture_to_string(uname_architecture()));
                 return 0;
         }
 
-        if (!streq_ptr(host_os_release_id, extension_release_id)) {
+        extension_release_id = strv_env_pairs_get(extension_release, "ID");
+        if (isempty(extension_release_id)) {
+                log_debug("Extension '%s' does not contain ID in extension-release but requested to match '%s' or be '_any'",
+                          name, host_os_release_id);
+                return 0;
+        }
+
+        /* A sysext with no host OS dependency (static binaries or scripts) can match
+         * '_any' host OS, and VERSION_ID or SYSEXT_LEVEL are not required anywhere */
+        if (streq(extension_release_id, "_any")) {
+                log_debug("Extension '%s' matches '_any' OS.", name);
+                return 1;
+        }
+
+        if (!streq(host_os_release_id, extension_release_id)) {
                 log_debug("Extension '%s' is for OS '%s', but deployed on top of '%s'.",
-                          name, strna(extension_release_id), strna(host_os_release_id));
+                          name, extension_release_id, host_os_release_id);
                 return 0;
         }
 
diff --git a/src/shared/extension-release.h b/src/shared/extension-release.h
index d026a9b..5c3fee2 100644
--- a/src/shared/extension-release.h
+++ b/src/shared/extension-release.h
@@ -9,6 +9,7 @@
                 const char *host_os_release_id,
                 const char *host_os_release_version_id,
                 const char *host_os_release_sysext_level,
+                const char *host_sysext_scope,
                 char **extension_release);
 
 /* Parse SYSTEMD_SYSEXT_HIERARCHIES and if not set, return "/usr /opt" */
diff --git a/src/shared/fdisk-util.c b/src/shared/fdisk-util.c
new file mode 100644
index 0000000..e88adb2
--- /dev/null
+++ b/src/shared/fdisk-util.c
@@ -0,0 +1,78 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "dissect-image.h"
+#include "fd-util.h"
+#include "fdisk-util.h"
+
+#if HAVE_LIBFDISK
+
+int fdisk_new_context_fd(
+                int fd,
+                bool read_only,
+                uint32_t sector_size,
+                struct fdisk_context **ret) {
+
+        _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
+        int r;
+
+        assert(ret);
+
+        if (fd < 0)
+                return -EBADF;
+
+        c = fdisk_new_context();
+        if (!c)
+                return -ENOMEM;
+
+        if (sector_size == UINT32_MAX) {
+                r = probe_sector_size_prefer_ioctl(fd, &sector_size);
+                if (r < 0)
+                        return r;
+        }
+
+        if (sector_size != 0) {
+                r = fdisk_save_user_sector_size(c, /* phy= */ 0, sector_size);
+                if (r < 0)
+                        return r;
+        }
+
+        r = fdisk_assign_device(c, FORMAT_PROC_FD_PATH(fd), read_only);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(c);
+        return 0;
+}
+
+int fdisk_partition_get_uuid_as_id128(struct fdisk_partition *p, sd_id128_t *ret) {
+        const char *ids;
+
+        assert(p);
+        assert(ret);
+
+        ids = fdisk_partition_get_uuid(p);
+        if (!ids)
+                return -ENXIO;
+
+        return sd_id128_from_string(ids, ret);
+}
+
+int fdisk_partition_get_type_as_id128(struct fdisk_partition *p, sd_id128_t *ret) {
+        struct fdisk_parttype *pt;
+        const char *pts;
+
+        assert(p);
+        assert(ret);
+
+        pt = fdisk_partition_get_type(p);
+        if (!pt)
+                return -ENXIO;
+
+        pts = fdisk_parttype_get_string(pt);
+        if (!pts)
+                return -ENXIO;
+
+        return sd_id128_from_string(pts, ret);
+}
+
+#endif
diff --git a/src/shared/fdisk-util.h b/src/shared/fdisk-util.h
new file mode 100644
index 0000000..4845132
--- /dev/null
+++ b/src/shared/fdisk-util.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#if HAVE_LIBFDISK
+
+#include <libfdisk.h>
+
+#include "sd-id128.h"
+
+#include "macro.h"
+
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_context*, fdisk_unref_context, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_partition*, fdisk_unref_partition, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_parttype*, fdisk_unref_parttype, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_table*, fdisk_unref_table, NULL);
+
+int fdisk_new_context_fd(int fd, bool read_only, uint32_t sector_size, struct fdisk_context **ret);
+
+int fdisk_partition_get_uuid_as_id128(struct fdisk_partition *p, sd_id128_t *ret);
+int fdisk_partition_get_type_as_id128(struct fdisk_partition *p, sd_id128_t *ret);
+
+#endif
diff --git a/src/shared/fdset.c b/src/shared/fdset.c
index 679e4aa..cfa12a5 100644
--- a/src/shared/fdset.c
+++ b/src/shared/fdset.c
@@ -112,7 +112,6 @@
 
 int fdset_new_fill(FDSet **_s) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0;
         FDSet *s;
 
@@ -132,7 +131,7 @@
         }
 
         FOREACH_DIRENT(de, d, return -errno) {
-                int fd = -1;
+                int fd = -EBADF;
 
                 r = safe_atoi(de->d_name, &fd);
                 if (r < 0)
diff --git a/src/shared/find-esp.c b/src/shared/find-esp.c
new file mode 100644
index 0000000..d474bb4
--- /dev/null
+++ b/src/shared/find-esp.c
@@ -0,0 +1,829 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/magic.h>
+#include <sys/vfs.h>
+
+#include "sd-device.h"
+#include "sd-id128.h"
+
+#include "alloc-util.h"
+#include "blkid-util.h"
+#include "btrfs-util.h"
+#include "chase-symlinks.h"
+#include "device-util.h"
+#include "devnum-util.h"
+#include "env-util.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "find-esp.h"
+#include "gpt.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "stat-util.h"
+#include "string-util.h"
+#include "virt.h"
+
+typedef enum VerifyESPFlags {
+        VERIFY_ESP_SEARCHING         = 1 << 0, /* Downgrade various "not found" logs to debug level */
+        VERIFY_ESP_UNPRIVILEGED_MODE = 1 << 1, /* Call into udev rather than blkid */
+        VERIFY_ESP_RELAX_CHECKS      = 1 << 2, /* Do not validate ESP partition */
+} VerifyESPFlags;
+
+static int verify_esp_blkid(
+                dev_t devid,
+                bool searching,
+                uint32_t *ret_part,
+                uint64_t *ret_pstart,
+                uint64_t *ret_psize,
+                sd_id128_t *ret_uuid) {
+
+        sd_id128_t uuid = SD_ID128_NULL;
+        uint64_t pstart = 0, psize = 0;
+        uint32_t part = 0;
+
+#if HAVE_BLKID
+        _cleanup_(blkid_free_probep) blkid_probe b = NULL;
+        _cleanup_free_ char *node = NULL;
+        const char *v;
+        int r;
+
+        r = devname_from_devnum(S_IFBLK, devid, &node);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get device path for " DEVNUM_FORMAT_STR ": %m", DEVNUM_FORMAT_VAL(devid));
+
+        errno = 0;
+        b = blkid_new_probe_from_filename(node);
+        if (!b)
+                return log_error_errno(errno ?: SYNTHETIC_ERRNO(ENOMEM), "Failed to open file system \"%s\": %m", node);
+
+        blkid_probe_enable_superblocks(b, 1);
+        blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE);
+        blkid_probe_enable_partitions(b, 1);
+        blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
+
+        errno = 0;
+        r = blkid_do_safeprobe(b);
+        if (r == -2)
+                return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system \"%s\" is ambiguous.", node);
+        else if (r == 1)
+                return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "File system \"%s\" does not contain a label.", node);
+        else if (r != 0)
+                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe file system \"%s\": %m", node);
+
+        r = blkid_probe_lookup_value(b, "TYPE", &v, NULL);
+        if (r != 0)
+                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                      "No filesystem found on \"%s\": %m", node);
+        if (!streq(v, "vfat"))
+                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                      "File system \"%s\" is not FAT.", node);
+
+        r = blkid_probe_lookup_value(b, "PART_ENTRY_SCHEME", &v, NULL);
+        if (r != 0)
+                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                      "File system \"%s\" is not located on a partitioned block device.", node);
+        if (!streq(v, "gpt"))
+                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                      "File system \"%s\" is not on a GPT partition table.", node);
+
+        errno = 0;
+        r = blkid_probe_lookup_value(b, "PART_ENTRY_TYPE", &v, NULL);
+        if (r != 0)
+                return log_error_errno(errno ?: EIO, "Failed to probe partition type UUID of \"%s\": %m", node);
+        if (sd_id128_string_equal(v, SD_GPT_ESP) <= 0)
+                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                       SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                       "File system \"%s\" has wrong type for an EFI System Partition (ESP).", node);
+
+        errno = 0;
+        r = blkid_probe_lookup_value(b, "PART_ENTRY_UUID", &v, NULL);
+        if (r != 0)
+                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition entry UUID of \"%s\": %m", node);
+        r = sd_id128_from_string(v, &uuid);
+        if (r < 0)
+                return log_error_errno(r, "Partition \"%s\" has invalid UUID \"%s\".", node, v);
+
+        errno = 0;
+        r = blkid_probe_lookup_value(b, "PART_ENTRY_NUMBER", &v, NULL);
+        if (r != 0)
+                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition number of \"%s\": %m", node);
+        r = safe_atou32(v, &part);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse PART_ENTRY_NUMBER field.");
+
+        errno = 0;
+        r = blkid_probe_lookup_value(b, "PART_ENTRY_OFFSET", &v, NULL);
+        if (r != 0)
+                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition offset of \"%s\": %m", node);
+        r = safe_atou64(v, &pstart);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse PART_ENTRY_OFFSET field.");
+
+        errno = 0;
+        r = blkid_probe_lookup_value(b, "PART_ENTRY_SIZE", &v, NULL);
+        if (r != 0)
+                return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "Failed to probe partition size of \"%s\": %m", node);
+        r = safe_atou64(v, &psize);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse PART_ENTRY_SIZE field.");
+#endif
+
+        if (ret_part)
+                *ret_part = part;
+        if (ret_pstart)
+                *ret_pstart = pstart;
+        if (ret_psize)
+                *ret_psize = psize;
+        if (ret_uuid)
+                *ret_uuid = uuid;
+
+        return 0;
+}
+
+static int verify_esp_udev(
+                dev_t devid,
+                bool searching,
+                uint32_t *ret_part,
+                uint64_t *ret_pstart,
+                uint64_t *ret_psize,
+                sd_id128_t *ret_uuid) {
+
+        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
+        sd_id128_t uuid = SD_ID128_NULL;
+        uint64_t pstart = 0, psize = 0;
+        uint32_t part = 0;
+        const char *node, *v;
+        int r;
+
+        r = sd_device_new_from_devnum(&d, 'b', devid);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get device from device number: %m");
+
+        r = sd_device_get_devname(d, &node);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to get device node: %m");
+
+        r = sd_device_get_property_value(d, "ID_FS_TYPE", &v);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to get device property: %m");
+        if (!streq(v, "vfat"))
+                return log_device_full_errno(d,
+                                             searching ? LOG_DEBUG : LOG_ERR,
+                                             SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                             "File system \"%s\" is not FAT.", node );
+
+        r = sd_device_get_property_value(d, "ID_PART_ENTRY_SCHEME", &v);
+        if (r < 0)
+                return log_device_full_errno(d,
+                                             searching && r == -ENOENT ? LOG_DEBUG : LOG_ERR,
+                                             searching && r == -ENOENT ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : r,
+                                             "Failed to get device property: %m");
+        if (!streq(v, "gpt"))
+                return log_device_full_errno(d,
+                                             searching ? LOG_DEBUG : LOG_ERR,
+                                             SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                             "File system \"%s\" is not on a GPT partition table.", node);
+
+        r = sd_device_get_property_value(d, "ID_PART_ENTRY_TYPE", &v);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to get device property: %m");
+        if (sd_id128_string_equal(v, SD_GPT_ESP) <= 0)
+                return log_device_full_errno(d,
+                                             searching ? LOG_DEBUG : LOG_ERR,
+                                             SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                             "File system \"%s\" has wrong type for an EFI System Partition (ESP).", node);
+
+        r = sd_device_get_property_value(d, "ID_PART_ENTRY_UUID", &v);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to get device property: %m");
+        r = sd_id128_from_string(v, &uuid);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Partition \"%s\" has invalid UUID \"%s\".", node, v);
+
+        r = sd_device_get_property_value(d, "ID_PART_ENTRY_NUMBER", &v);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to get device property: %m");
+        r = safe_atou32(v, &part);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to parse PART_ENTRY_NUMBER field.");
+
+        r = sd_device_get_property_value(d, "ID_PART_ENTRY_OFFSET", &v);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to get device property: %m");
+        r = safe_atou64(v, &pstart);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to parse PART_ENTRY_OFFSET field.");
+
+        r = sd_device_get_property_value(d, "ID_PART_ENTRY_SIZE", &v);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to get device property: %m");
+        r = safe_atou64(v, &psize);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to parse PART_ENTRY_SIZE field.");
+
+        if (ret_part)
+                *ret_part = part;
+        if (ret_pstart)
+                *ret_pstart = pstart;
+        if (ret_psize)
+                *ret_psize = psize;
+        if (ret_uuid)
+                *ret_uuid = uuid;
+
+        return 0;
+}
+
+static int verify_fsroot_dir(
+                const char *path,
+                bool searching,
+                bool unprivileged_mode,
+                dev_t *ret_dev) {
+
+        _cleanup_close_ int fd = -EBADF;
+        STRUCT_NEW_STATX_DEFINE(sxa);
+        STRUCT_NEW_STATX_DEFINE(sxb);
+        int r;
+
+        /* Checks if the specified directory is at the root of its file system, and returns device
+         * major/minor of the device, if it is. */
+
+        assert(path);
+
+        /* We are using O_PATH here, since that way we can operate on directory inodes we cannot look into,
+         * which is quite likely if we run unprivileged */
+        fd = open(path, O_CLOEXEC|O_DIRECTORY|O_PATH);
+        if (fd < 0)
+                return log_full_errno((searching && errno == ENOENT) ||
+                                      (unprivileged_mode && ERRNO_IS_PRIVILEGE(errno)) ? LOG_DEBUG : LOG_ERR, errno,
+                                      "Failed to open directory \"%s\": %m", path);
+
+        /* So, the ESP and XBOOTLDR partition are commonly located on an autofs mount. stat() on the
+         * directory won't trigger it, if it is not mounted yet. Let's hence explicitly trigger it here,
+         * before stat()ing */
+        (void) faccessat(fd, "trigger", F_OK, AT_SYMLINK_NOFOLLOW); /* Filename doesn't matter... */
+
+        r = statx_fallback(fd, "", AT_EMPTY_PATH, STATX_TYPE|STATX_INO|STATX_MNT_ID, &sxa.sx);
+        if (r < 0)
+                return log_full_errno((unprivileged_mode && ERRNO_IS_PRIVILEGE(r)) ? LOG_DEBUG : LOG_ERR, r,
+                                      "Failed to determine block device node of \"%s\": %m", path);
+
+        assert(S_ISDIR(sxa.sx.stx_mode)); /* We used O_DIRECTORY above, when opening, so this must hold */
+
+        if (FLAGS_SET(sxa.sx.stx_attributes_mask, STATX_ATTR_MOUNT_ROOT)) {
+
+                /* If we have STATX_ATTR_MOUNT_ROOT, we are happy, that's all we need. We operate under the
+                 * assumption that a top of a mount point is also the top of the file system. (Which of
+                 * course is strictly speaking not always true...) */
+
+                if (!FLAGS_SET(sxa.sx.stx_attributes, STATX_ATTR_MOUNT_ROOT))
+                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                              SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                              "Directory \"%s\" is not the root of the file system.", path);
+
+                goto success;
+        }
+
+        /* Now let's look at the parent */
+        r = statx_fallback(fd, "..", 0, STATX_TYPE|STATX_INO|STATX_MNT_ID, &sxb.sx);
+        if (r < 0 && ERRNO_IS_PRIVILEGE(r)) {
+                _cleanup_free_ char *parent = NULL;
+
+                /* If going via ".." didn't work due to EACCESS, then let's determine the parent path
+                 * directly instead. It's not as good, due to symlinks and such, but we can't do anything
+                 * better here.
+                 *
+                 * (In case you wonder where this fallback is useful: consider a classic Fedora setup with
+                 * /boot/ being an ext4 partition and /boot/efi/ being the VFAT ESP. The latter is mounted
+                 * inaccessible for regular users via the dmask= mount option. In that case as unprivileged
+                 * user we can stat() /boot/efi/, and we can stat()/enumerate /boot/. But we cannot look into
+                 * /boot/efi/, and in particular not use /boot/efi/../ – hence this work-around.) */
+
+                if (path_equal(path, "/"))
+                        goto success;
+
+                r = path_extract_directory(path, &parent);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract parent path from '%s': %m", path);
+
+                r = statx_fallback(AT_FDCWD, parent, AT_SYMLINK_NOFOLLOW, STATX_TYPE|STATX_INO|STATX_MNT_ID, &sxb.sx);
+        }
+        if (r < 0)
+                return log_full_errno(unprivileged_mode && ERRNO_IS_PRIVILEGE(r) ? LOG_DEBUG : LOG_ERR, r,
+                                      "Failed to determine block device node of parent of \"%s\": %m", path);
+
+        if (statx_inode_same(&sxa.sx, &sxb.sx)) /* for the root dir inode nr for both inodes will be the same */
+                goto success;
+
+        if (statx_mount_same(&sxa.nsx, &sxb.nsx))
+                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                      SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                      "Directory \"%s\" is not the root of the file system.", path);
+
+success:
+        if (!ret_dev)
+                return 0;
+
+        if (sxa.sx.stx_dev_major == 0) { /* Hmm, maybe a btrfs device, and the caller asked for the backing device? Then let's try to get it. */
+                _cleanup_close_ int real_fd = -EBADF;
+
+                /* The statx() above we can execute on an O_PATH fd. But the btrfs ioctl we cannot. Hence
+                 * acquire a "real" fd first, without the O_PATH flag. */
+
+                real_fd = fd_reopen(fd, O_DIRECTORY|O_CLOEXEC);
+                if (real_fd < 0)
+                        return real_fd;
+
+                return btrfs_get_block_device_fd(real_fd, ret_dev);
+        }
+
+        *ret_dev = makedev(sxa.sx.stx_dev_major, sxa.sx.stx_dev_minor);
+        return 0;
+}
+
+static int verify_esp(
+                const char *p,
+                uint32_t *ret_part,
+                uint64_t *ret_pstart,
+                uint64_t *ret_psize,
+                sd_id128_t *ret_uuid,
+                dev_t *ret_devid,
+                VerifyESPFlags flags) {
+
+        bool relax_checks, searching = FLAGS_SET(flags, VERIFY_ESP_SEARCHING),
+             unprivileged_mode = FLAGS_SET(flags, VERIFY_ESP_UNPRIVILEGED_MODE);
+        dev_t devid = 0;
+        int r;
+
+        assert(p);
+
+        /* This logs about all errors, except:
+         *
+         *  -ENOENT        → if 'searching' is set, and the dir doesn't exist
+         *  -EADDRNOTAVAIL → if 'searching' is set, and the dir doesn't look like an ESP
+         *  -EACESS        → if 'unprivileged_mode' is set, and we have trouble accessing the thing
+         */
+
+        relax_checks =
+                getenv_bool("SYSTEMD_RELAX_ESP_CHECKS") > 0 ||
+                FLAGS_SET(flags, VERIFY_ESP_RELAX_CHECKS);
+
+        /* Non-root user can only check the status, so if an error occurred in the following, it does not cause any
+         * issues. Let's also, silence the error messages. */
+
+        if (!relax_checks) {
+                struct statfs sfs;
+
+                if (statfs(p, &sfs) < 0)
+                        /* If we are searching for the mount point, don't generate a log message if we can't find the path */
+                        return log_full_errno((searching && errno == ENOENT) ||
+                                              (unprivileged_mode && errno == EACCES) ? LOG_DEBUG : LOG_ERR, errno,
+                                              "Failed to check file system type of \"%s\": %m", p);
+
+                if (!F_TYPE_EQUAL(sfs.f_type, MSDOS_SUPER_MAGIC))
+                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                              SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
+                                              "File system \"%s\" is not a FAT EFI System Partition (ESP) file system.", p);
+        }
+
+        relax_checks =
+                relax_checks ||
+                detect_container() > 0;
+
+        r = verify_fsroot_dir(p, searching, unprivileged_mode, relax_checks ? NULL : &devid);
+        if (r < 0)
+                return r;
+
+        /* In a container we don't have access to block devices, skip this part of the verification, we trust
+         * the container manager set everything up correctly on its own. */
+        if (relax_checks)
+                goto finish;
+
+        /* If we are unprivileged we ask udev for the metadata about the partition. If we are privileged we
+         * use blkid instead. Why? Because this code is called from 'bootctl' which is pretty much an
+         * emergency recovery tool that should also work when udev isn't up (i.e. from the emergency shell),
+         * however blkid can't work if we have no privileges to access block devices directly, which is why
+         * we use udev in that case. */
+        if (unprivileged_mode)
+                r = verify_esp_udev(devid, searching, ret_part, ret_pstart, ret_psize, ret_uuid);
+        else
+                r = verify_esp_blkid(devid, searching, ret_part, ret_pstart, ret_psize, ret_uuid);
+        if (r < 0)
+                return r;
+
+        if (ret_devid)
+                *ret_devid = devid;
+
+        return 0;
+
+finish:
+        if (ret_part)
+                *ret_part = 0;
+        if (ret_pstart)
+                *ret_pstart = 0;
+        if (ret_psize)
+                *ret_psize = 0;
+        if (ret_uuid)
+                *ret_uuid = SD_ID128_NULL;
+        if (ret_devid)
+                *ret_devid = 0;
+
+        return 0;
+}
+
+int find_esp_and_warn(
+                const char *root,
+                const char *path,
+                bool unprivileged_mode,
+                char **ret_path,
+                uint32_t *ret_part,
+                uint64_t *ret_pstart,
+                uint64_t *ret_psize,
+                sd_id128_t *ret_uuid,
+                dev_t *ret_devid) {
+
+        VerifyESPFlags flags = (unprivileged_mode ? VERIFY_ESP_UNPRIVILEGED_MODE : 0) |
+                               (root ? VERIFY_ESP_RELAX_CHECKS : 0);
+        _cleanup_free_ char *p = NULL;
+        int r;
+
+        /* This logs about all errors except:
+         *
+         *    -ENOKEY → when we can't find the partition
+         *   -EACCESS → when unprivileged_mode is true, and we can't access something
+         */
+
+        if (path) {
+                r = chase_symlinks(path, root, CHASE_PREFIX_ROOT, &p, NULL);
+                if (r < 0)
+                        return log_error_errno(r,
+                                               "Failed to resolve path %s%s%s: %m",
+                                               path,
+                                               root ? " under directory " : "",
+                                               strempty(root));
+
+                r = verify_esp(p, ret_part, ret_pstart, ret_psize, ret_uuid, ret_devid, flags);
+                if (r < 0)
+                        return r;
+
+                goto found;
+        }
+
+        path = getenv("SYSTEMD_ESP_PATH");
+        if (path) {
+                struct stat st;
+
+                r = chase_symlinks(path, root, CHASE_PREFIX_ROOT, &p, NULL);
+                if (r < 0)
+                        return log_error_errno(r,
+                                               "Failed to resolve path %s%s%s: %m",
+                                               path,
+                                               root ? " under directory " : "",
+                                               strempty(root));
+
+                if (!path_is_valid(p) || !path_is_absolute(p))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "$SYSTEMD_ESP_PATH does not refer to absolute path, refusing to use it: %s",
+                                               p);
+
+                /* Note: when the user explicitly configured things with an env var we won't validate the
+                 * path beyond checking it refers to a directory. After all we want this to be useful for
+                 * testing. */
+
+                if (stat(p, &st) < 0)
+                        return log_error_errno(errno, "Failed to stat '%s': %m", p);
+                if (!S_ISDIR(st.st_mode))
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTDIR), "ESP path '%s' is not a directory.", p);
+
+                if (ret_part)
+                        *ret_part = 0;
+                if (ret_pstart)
+                        *ret_pstart = 0;
+                if (ret_psize)
+                        *ret_psize = 0;
+                if (ret_uuid)
+                        *ret_uuid = SD_ID128_NULL;
+                if (ret_devid)
+                        *ret_devid = st.st_dev;
+
+                goto found;
+        }
+
+        FOREACH_STRING(dir, "/efi", "/boot", "/boot/efi") {
+                r = chase_symlinks(dir, root, CHASE_PREFIX_ROOT, &p, NULL);
+                if (r == -ENOENT)
+                        continue;
+                if (r < 0)
+                        return log_error_errno(r,
+                                               "Failed to resolve path %s%s%s: %m",
+                                               dir,
+                                               root ? " under directory " : "",
+                                               strempty(root));
+
+                r = verify_esp(p, ret_part, ret_pstart, ret_psize, ret_uuid, ret_devid,
+                               flags | VERIFY_ESP_SEARCHING);
+                if (r >= 0)
+                        goto found;
+                if (!IN_SET(r, -ENOENT, -EADDRNOTAVAIL, -ENOTDIR, -ENOTTY)) /* This one is not it */
+                        return r;
+
+                p = mfree(p);
+        }
+
+        /* No logging here */
+        return -ENOKEY;
+
+found:
+        if (ret_path)
+                *ret_path = TAKE_PTR(p);
+
+        return 0;
+}
+
+static int verify_xbootldr_blkid(
+                dev_t devid,
+                bool searching,
+                sd_id128_t *ret_uuid) {
+
+        sd_id128_t uuid = SD_ID128_NULL;
+
+#if HAVE_BLKID
+        _cleanup_(blkid_free_probep) blkid_probe b = NULL;
+        _cleanup_free_ char *node = NULL;
+        const char *type, *v;
+        int r;
+
+        r = devname_from_devnum(S_IFBLK, devid, &node);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get block device path for " DEVNUM_FORMAT_STR ": %m",
+                                       DEVNUM_FORMAT_VAL(devid));
+
+        errno = 0;
+        b = blkid_new_probe_from_filename(node);
+        if (!b)
+                return log_error_errno(errno_or_else(ENOMEM), "%s: Failed to create blkid probe: %m", node);
+
+        blkid_probe_enable_partitions(b, 1);
+        blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
+
+        errno = 0;
+        r = blkid_do_safeprobe(b);
+        if (r == _BLKID_SAFEPROBE_AMBIGUOUS)
+                return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "%s: File system is ambiguous.", node);
+        if (r == _BLKID_SAFEPROBE_NOT_FOUND)
+                return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "%s: File system does not contain a label.", node);
+        if (r == _BLKID_SAFEPROBE_ERROR)
+                return log_error_errno(errno_or_else(EIO), "%s: Failed to probe file system: %m", node);
+
+        assert(r == _BLKID_SAFEPROBE_FOUND);
+
+        r = blkid_probe_lookup_value(b, "PART_ENTRY_SCHEME", &type, NULL);
+        if (r != 0)
+                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                      searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(EIO),
+                                      "%s: Failed to probe PART_ENTRY_SCHEME: %m", node);
+        if (streq(type, "gpt")) {
+
+                errno = 0;
+                r = blkid_probe_lookup_value(b, "PART_ENTRY_TYPE", &v, NULL);
+                if (r != 0)
+                        return log_error_errno(errno_or_else(EIO), "%s: Failed to probe PART_ENTRY_TYPE: %m", node);
+                if (sd_id128_string_equal(v, SD_GPT_XBOOTLDR) <= 0)
+                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                              searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
+                                              "%s: Partitition has wrong PART_ENTRY_TYPE=%s for XBOOTLDR partition.", node, v);
+
+                errno = 0;
+                r = blkid_probe_lookup_value(b, "PART_ENTRY_UUID", &v, NULL);
+                if (r != 0)
+                        return log_error_errno(errno_or_else(EIO), "%s: Failed to probe PART_ENTRY_UUID: %m", node);
+                r = sd_id128_from_string(v, &uuid);
+                if (r < 0)
+                        return log_error_errno(r, "%s: Partition has invalid UUID PART_ENTRY_TYPE=%s: %m", node, v);
+
+        } else if (streq(type, "dos")) {
+
+                errno = 0;
+                r = blkid_probe_lookup_value(b, "PART_ENTRY_TYPE", &v, NULL);
+                if (r != 0)
+                        return log_error_errno(errno_or_else(EIO), "%s: Failed to probe PART_ENTRY_TYPE: %m", node);
+                if (!streq(v, "0xea"))
+                        return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                              searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
+                                              "%s: Wrong PART_ENTRY_TYPE=%s for XBOOTLDR partition.", node, v);
+
+        } else
+                return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
+                                      searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
+                                      "%s: Not on a GPT or DOS partition table (PART_ENTRY_SCHEME=%s).", node, type);
+#endif
+
+        if (ret_uuid)
+                *ret_uuid = uuid;
+
+        return 0;
+}
+
+static int verify_xbootldr_udev(
+                dev_t devid,
+                bool searching,
+                sd_id128_t *ret_uuid) {
+
+        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
+        sd_id128_t uuid = SD_ID128_NULL;
+        const char *node, *type, *v;
+        int r;
+
+        r = sd_device_new_from_devnum(&d, 'b', devid);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get block device for " DEVNUM_FORMAT_STR ": %m", DEVNUM_FORMAT_VAL(devid));
+
+        r = sd_device_get_devname(d, &node);
+        if (r < 0)
+                return log_device_error_errno(d, r, "Failed to get device node: %m");
+
+        r = sd_device_get_property_value(d, "ID_PART_ENTRY_SCHEME", &type);
+        if (r < 0)
+                return log_device_full_errno(d,
+                                             searching && r == -ENOENT ? LOG_DEBUG : LOG_ERR,
+                                             searching && r == -ENOENT ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : r,
+                                             "Failed to query ID_PART_ENTRY_SCHEME: %m");
+
+        if (streq(type, "gpt")) {
+
+                r = sd_device_get_property_value(d, "ID_PART_ENTRY_TYPE", &v);
+                if (r < 0)
+                        return log_device_error_errno(d, r, "Failed to query ID_PART_ENTRY_TYPE: %m");
+
+                r = sd_id128_string_equal(v, SD_GPT_XBOOTLDR);
+                if (r < 0)
+                        return log_device_error_errno(d, r, "Failed to parse ID_PART_ENTRY_TYPE=%s: %m", v);
+                if (r == 0)
+                        return log_device_full_errno(
+                                        d,
+                                        searching ? LOG_DEBUG : LOG_ERR,
+                                        searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
+                                        "Partition has wrong ID_PART_ENTRY_TYPE=%s for XBOOTLDR partition.", v);
+
+                r = sd_device_get_property_value(d, "ID_PART_ENTRY_UUID", &v);
+                if (r < 0)
+                        return log_device_error_errno(d, r, "Failed to query ID_PART_ENTRY_UUID: %m");
+                r = sd_id128_from_string(v, &uuid);
+                if (r < 0)
+                        return log_device_error_errno(d, r, "Partition has invalid UUID ID_PART_ENTRY_TYPE=%s: %m", v);
+
+        } else if (streq(type, "dos")) {
+
+                r = sd_device_get_property_value(d, "ID_PART_ENTRY_TYPE", &v);
+                if (r < 0)
+                        return log_device_error_errno(d, r, "Failed to query ID_PART_ENTRY_TYPE: %m");
+                if (!streq(v, "0xea"))
+                        return log_device_full_errno(
+                                        d,
+                                        searching ? LOG_DEBUG : LOG_ERR,
+                                        searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
+                                        "Wrong ID_PART_ENTRY_TYPE=%s for XBOOTLDR partition.", v);
+
+        } else
+                return log_device_full_errno(
+                                d,
+                                searching ? LOG_DEBUG : LOG_ERR,
+                                searching ? SYNTHETIC_ERRNO(EADDRNOTAVAIL) : SYNTHETIC_ERRNO(ENODEV),
+                                "Not on a GPT or DOS partition table (ID_PART_ENTRY_SCHEME=%s).", type);
+
+        if (ret_uuid)
+                *ret_uuid = uuid;
+
+        return 0;
+}
+
+static int verify_xbootldr(
+                const char *p,
+                bool searching,
+                bool unprivileged_mode,
+                sd_id128_t *ret_uuid,
+                dev_t *ret_devid) {
+
+        bool relax_checks;
+        dev_t devid = 0;
+        int r;
+
+        assert(p);
+
+        relax_checks =
+                getenv_bool("SYSTEMD_RELAX_XBOOTLDR_CHECKS") > 0 ||
+                detect_container() > 0;
+
+        r = verify_fsroot_dir(p, searching, unprivileged_mode, relax_checks ? NULL : &devid);
+        if (r < 0)
+                return r;
+
+        if (relax_checks)
+                goto finish;
+
+        if (unprivileged_mode)
+                r = verify_xbootldr_udev(devid, searching, ret_uuid);
+        else
+                r = verify_xbootldr_blkid(devid, searching, ret_uuid);
+        if (r < 0)
+                return r;
+
+        if (ret_devid)
+                *ret_devid = devid;
+
+        return 0;
+
+finish:
+        if (ret_uuid)
+                *ret_uuid = SD_ID128_NULL;
+        if (ret_devid)
+                *ret_devid = 0;
+
+        return 0;
+}
+
+int find_xbootldr_and_warn(
+                const char *root,
+                const char *path,
+                bool unprivileged_mode,
+                char **ret_path,
+                sd_id128_t *ret_uuid,
+                dev_t *ret_devid) {
+
+        _cleanup_free_ char *p = NULL;
+        int r;
+
+        /* Similar to find_esp_and_warn(), but finds the XBOOTLDR partition. Returns the same errors. */
+
+        if (path) {
+                r = chase_symlinks(path, root, CHASE_PREFIX_ROOT, &p, NULL);
+                if (r < 0)
+                        return log_error_errno(r,
+                                               "Failed to resolve path %s%s%s: %m",
+                                               path,
+                                               root ? " under directory " : "",
+                                               strempty(root));
+
+                r = verify_xbootldr(p, /* searching= */ false, unprivileged_mode, ret_uuid, ret_devid);
+                if (r < 0)
+                        return r;
+
+                goto found;
+        }
+
+        path = getenv("SYSTEMD_XBOOTLDR_PATH");
+        if (path) {
+                struct stat st;
+
+                r = chase_symlinks(path, root, CHASE_PREFIX_ROOT, &p, NULL);
+                if (r < 0)
+                        return log_error_errno(r,
+                                               "Failed to resolve path %s%s%s: %m",
+                                               path,
+                                               root ? " under directory " : "",
+                                               strempty(root));
+
+                if (!path_is_valid(p) || !path_is_absolute(p))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "$SYSTEMD_XBOOTLDR_PATH does not refer to absolute path, refusing to use it: %s",
+                                               p);
+
+                if (stat(p, &st) < 0)
+                        return log_error_errno(errno, "Failed to stat '%s': %m", p);
+                if (!S_ISDIR(st.st_mode))
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTDIR), "XBOOTLDR path '%s' is not a directory.", p);
+
+                if (ret_uuid)
+                        *ret_uuid = SD_ID128_NULL;
+                if (ret_devid)
+                        *ret_devid = st.st_dev;
+
+                goto found;
+        }
+
+        r = chase_symlinks("/boot", root, CHASE_PREFIX_ROOT, &p, NULL);
+        if (r == -ENOENT)
+                return -ENOKEY;
+        if (r < 0)
+                return log_error_errno(r,
+                                       "Failed to resolve path /boot%s%s: %m",
+                                       root ? " under directory " : "",
+                                       strempty(root));
+
+        r = verify_xbootldr(p, /* searching= */ true, unprivileged_mode, ret_uuid, ret_devid);
+        if (r >= 0)
+                goto found;
+        if (!IN_SET(r, -ENOENT, -EADDRNOTAVAIL, -ENOTDIR)) /* This one is not it */
+                return r;
+
+        return -ENOKEY;
+
+found:
+        if (ret_path)
+                *ret_path = TAKE_PTR(p);
+
+        return 0;
+}
diff --git a/src/shared/find-esp.h b/src/shared/find-esp.h
new file mode 100644
index 0000000..78d7f45
--- /dev/null
+++ b/src/shared/find-esp.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "sd-id128.h"
+
+int find_esp_and_warn(const char *root, const char *path, bool unprivileged_mode, char **ret_path, uint32_t *ret_part, uint64_t *ret_pstart, uint64_t *ret_psize, sd_id128_t *ret_uuid, dev_t *ret_devid);
+int find_xbootldr_and_warn(const char *root, const char *path, bool unprivileged_mode, char **ret_path, sd_id128_t *ret_uuid, dev_t *ret_devid);
diff --git a/src/shared/firewall-util-iptables.c b/src/shared/firewall-util-iptables.c
index d53a394..55bb427 100644
--- a/src/shared/firewall-util-iptables.c
+++ b/src/shared/firewall-util-iptables.c
@@ -128,7 +128,7 @@
         mr->rangesize = 1;
 
         /* Create a search mask entry */
-        mask = alloca(sz);
+        mask = alloca_safe(sz);
         memset(mask, 0xFF, sz);
 
         if (add) {
diff --git a/src/shared/firewall-util-nft.c b/src/shared/firewall-util-nft.c
index e68978d..b5f0d1b 100644
--- a/src/shared/firewall-util-nft.c
+++ b/src/shared/firewall-util-nft.c
@@ -18,75 +18,50 @@
 #include "firewall-util-private.h"
 #include "in-addr-util.h"
 #include "macro.h"
+#include "netlink-internal.h"
+#include "netlink-util.h"
 #include "socket-util.h"
 #include "time-util.h"
 
 #define NFT_SYSTEMD_DNAT_MAP_NAME "map_port_ipport"
-#define NFT_SYSTEMD_TABLE_NAME   "io.systemd.nat"
+#define NFT_SYSTEMD_TABLE_NAME    "io.systemd.nat"
 #define NFT_SYSTEMD_MASQ_SET_NAME "masq_saddr"
 
 #define NFNL_DEFAULT_TIMEOUT_USECS (1ULL * USEC_PER_SEC)
 
 #define UDP_DPORT_OFFSET 2
 
-static int nfnl_netlink_sendv(sd_netlink *nfnl,
-                              sd_netlink_message *messages[],
-                              size_t msgcount) {
-        _cleanup_free_ uint32_t *serial = NULL;
-        size_t i;
-        int r;
+static sd_netlink_message **netlink_message_unref_many(sd_netlink_message **m) {
+        if (!m)
+                return NULL;
 
-        assert(msgcount > 0);
+        /* This does not free array. The end of the array must be NULL. */
 
-        r = sd_netlink_sendv(nfnl, messages, msgcount, &serial);
-        if (r < 0)
-                return r;
+        for (sd_netlink_message **p = m; *p; p++)
+                *p = sd_netlink_message_unref(*p);
 
-        r = 0;
-        for (i = 1; i < msgcount - 1; i++) {
-                int tmp;
-
-                /* If message is an error, this returns embedded errno */
-                tmp = sd_netlink_read(nfnl, serial[i], NFNL_DEFAULT_TIMEOUT_USECS, NULL);
-                if (tmp < 0 && r == 0)
-                        r = tmp;
-        }
-
-        return r;
+        return m;
 }
 
-static int nfnl_add_open_expr_container(sd_netlink_message *m, const char *name) {
+DEFINE_TRIVIAL_CLEANUP_FUNC(sd_netlink_message**, netlink_message_unref_many);
+
+static int nfnl_open_expr_container(sd_netlink_message *m, const char *name) {
         int r;
 
-        r = sd_netlink_message_open_array(m, NFTA_LIST_ELEM);
-        if (r < 0)
-                return r;
+        assert(m);
+        assert(name);
 
-        r = sd_netlink_message_append_string(m, NFTA_EXPR_NAME, name);
+        r = sd_netlink_message_open_array(m, NFTA_LIST_ELEM);
         if (r < 0)
                 return r;
 
         return sd_netlink_message_open_container_union(m, NFTA_EXPR_DATA, name);
 }
 
-static int nfnl_add_expr_fib(sd_netlink_message *m, uint32_t nft_fib_flags,
-                             enum nft_fib_result result,
-                             enum nft_registers dreg) {
+static int nfnl_close_expr_container(sd_netlink_message *m) {
         int r;
 
-        r = nfnl_add_open_expr_container(m, "fib");
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_u32(m, NFTA_FIB_FLAGS, htobe32(nft_fib_flags));
-        if (r < 0)
-                return r;
-        r = sd_netlink_message_append_u32(m, NFTA_FIB_RESULT, htobe32(result));
-        if (r < 0)
-                return r;
-        r = sd_netlink_message_append_u32(m, NFTA_FIB_DREG, htobe32(dreg));
-        if (r < 0)
-                return r;
+        assert(m);
 
         r = sd_netlink_message_close_container(m); /* NFTA_EXPR_DATA */
         if (r < 0)
@@ -95,11 +70,45 @@
         return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */
 }
 
-static int nfnl_add_expr_meta(sd_netlink_message *m, enum nft_meta_keys key,
-                              enum nft_registers dreg) {
+static int nfnl_add_expr_fib(
+                sd_netlink_message *m,
+                uint32_t nft_fib_flags,
+                enum nft_fib_result result,
+                enum nft_registers dreg) {
+
         int r;
 
-        r = nfnl_add_open_expr_container(m, "meta");
+        assert(m);
+
+        r = nfnl_open_expr_container(m, "fib");
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NFTA_FIB_FLAGS, htobe32(nft_fib_flags));
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NFTA_FIB_RESULT, htobe32(result));
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_append_u32(m, NFTA_FIB_DREG, htobe32(dreg));
+        if (r < 0)
+                return r;
+
+        return nfnl_close_expr_container(m);
+}
+
+static int nfnl_add_expr_meta(
+                sd_netlink_message *m,
+                enum nft_meta_keys key,
+                enum nft_registers dreg) {
+
+        int r;
+
+        assert(m);
+
+        r = nfnl_open_expr_container(m, "meta");
         if (r < 0)
                 return r;
 
@@ -111,45 +120,55 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_close_container(m); /* NFTA_EXPR_DATA */
-        if (r < 0)
-                return r;
-
-        return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */
+        return nfnl_close_expr_container(m);
 }
 
-static int nfnl_add_expr_payload(sd_netlink_message *m, enum nft_payload_bases pb,
-                                 uint32_t offset, uint32_t len, enum nft_registers dreg) {
+static int nfnl_add_expr_payload(
+                sd_netlink_message *m,
+                enum nft_payload_bases pb,
+                uint32_t offset,
+                uint32_t len,
+                enum nft_registers dreg) {
+
         int r;
 
-        r = nfnl_add_open_expr_container(m, "payload");
+        assert(m);
+
+        r = nfnl_open_expr_container(m, "payload");
         if (r < 0)
                 return r;
 
         r = sd_netlink_message_append_u32(m, NFTA_PAYLOAD_DREG, htobe32(dreg));
         if (r < 0)
                 return r;
+
         r = sd_netlink_message_append_u32(m, NFTA_PAYLOAD_BASE, htobe32(pb));
         if (r < 0)
                 return r;
+
         r = sd_netlink_message_append_u32(m, NFTA_PAYLOAD_OFFSET, htobe32(offset));
         if (r < 0)
                 return r;
+
         r = sd_netlink_message_append_u32(m, NFTA_PAYLOAD_LEN, htobe32(len));
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_close_container(m); /* NFTA_EXPR_DATA */
-        if (r < 0)
-                return r;
-        return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */
+        return nfnl_close_expr_container(m);
 }
 
-static int nfnl_add_expr_lookup_set_data(sd_netlink_message *m, const char *set_name,
-                                         enum nft_registers sreg) {
+static int nfnl_add_expr_lookup(
+                sd_netlink_message *m,
+                const char *set_name,
+                enum nft_registers sreg,
+                enum nft_registers dreg) {
+
         int r;
 
-        r = nfnl_add_open_expr_container(m, "lookup");
+        assert(m);
+        assert(set_name);
+
+        r = nfnl_open_expr_container(m, "lookup");
         if (r < 0)
                 return r;
 
@@ -157,126 +176,102 @@
         if (r < 0)
                 return r;
 
-        return sd_netlink_message_append_u32(m, NFTA_LOOKUP_SREG, htobe32(sreg));
+        r = sd_netlink_message_append_u32(m, NFTA_LOOKUP_SREG, htobe32(sreg));
+        if (r < 0)
+                return r;
+
+        if (dreg != 0) {
+                r = sd_netlink_message_append_u32(m, NFTA_LOOKUP_DREG, htobe32(dreg));
+                if (r < 0)
+                        return r;
+        }
+
+        return nfnl_close_expr_container(m);
 }
 
-static int nfnl_add_expr_lookup_set(sd_netlink_message *m, const char *set_name,
-                                    enum nft_registers sreg) {
+static int nfnl_add_expr_cmp(
+                sd_netlink_message *m,
+                enum nft_cmp_ops cmp_op,
+                enum nft_registers sreg,
+                const void *data,
+                size_t dlen) {
+
         int r;
 
-        r = nfnl_add_expr_lookup_set_data(m, set_name, sreg);
-        if (r < 0)
-                return r;
+        assert(m);
+        assert(data);
 
-        r = sd_netlink_message_close_container(m); /* NFTA_EXPR_DATA */
-        if (r < 0)
-                return r;
-        return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */
-}
-
-static int nfnl_add_expr_lookup_map(sd_netlink_message *m, const char *set_name,
-                                    enum nft_registers sreg, enum nft_registers dreg) {
-        int r;
-
-        r = nfnl_add_expr_lookup_set_data(m, set_name, sreg);
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_append_u32(m, NFTA_LOOKUP_DREG, htobe32(dreg));
-        if (r < 0)
-                return r;
-
-        r = sd_netlink_message_close_container(m); /* NFTA_EXPR_DATA */
-        if (r < 0)
-                return r;
-
-        return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */
-}
-
-static int nfnl_add_expr_data(sd_netlink_message *m, int attr, const void *data, uint32_t dlen) {
-        int r;
-
-        r = sd_netlink_message_open_container(m, attr);
-        if (r < 0)
-                return r;
-        r = sd_netlink_message_append_data(m, NFTA_DATA_VALUE, data, dlen);
-        if (r < 0)
-                return r;
-
-        return sd_netlink_message_close_container(m); /* attr */
-}
-
-static int nfnl_add_expr_cmp_data(sd_netlink_message *m, const void *data, uint32_t dlen) {
-        return nfnl_add_expr_data(m, NFTA_CMP_DATA, data, dlen);
-}
-
-static int nfnl_add_expr_cmp(sd_netlink_message *m, enum nft_cmp_ops cmp_op,
-                             enum nft_registers sreg, const void *data, uint32_t dlen) {
-        int r;
-
-        r = nfnl_add_open_expr_container(m, "cmp");
+        r = nfnl_open_expr_container(m, "cmp");
         if (r < 0)
                 return r;
 
         r = sd_netlink_message_append_u32(m, NFTA_CMP_OP, htobe32(cmp_op));
         if (r < 0)
                 return r;
+
         r = sd_netlink_message_append_u32(m, NFTA_CMP_SREG, htobe32(sreg));
         if (r < 0)
                 return r;
 
-        r = nfnl_add_expr_cmp_data(m, data, dlen);
+        r = sd_netlink_message_append_container_data(m, NFTA_CMP_DATA, NFTA_DATA_VALUE, data, dlen);
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_close_container(m); /* NFTA_EXPR_DATA */
-        if (r < 0)
-                return r;
-        return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */
+        return nfnl_close_expr_container(m);
 }
 
-static int nfnl_add_expr_bitwise(sd_netlink_message *m,
-                                 enum nft_registers sreg,
-                                 enum nft_registers dreg,
-                                 const void *and,
-                                 const void *xor, uint32_t len) {
+static int nfnl_add_expr_bitwise(
+                sd_netlink_message *m,
+                enum nft_registers sreg,
+                enum nft_registers dreg,
+                const void *and,
+                const void *xor,
+                uint32_t len) {
+
         int r;
 
-        r = nfnl_add_open_expr_container(m, "bitwise");
+        assert(m);
+        assert(and);
+        assert(xor);
+
+        r = nfnl_open_expr_container(m, "bitwise");
         if (r < 0)
                 return r;
 
         r = sd_netlink_message_append_u32(m, NFTA_BITWISE_SREG, htobe32(sreg));
         if (r < 0)
                 return r;
+
         r = sd_netlink_message_append_u32(m, NFTA_BITWISE_DREG, htobe32(dreg));
         if (r < 0)
                 return r;
+
         r = sd_netlink_message_append_u32(m, NFTA_BITWISE_LEN, htobe32(len));
         if (r < 0)
                 return r;
 
-        r = nfnl_add_expr_data(m, NFTA_BITWISE_MASK, and, len);
+        r = sd_netlink_message_append_container_data(m, NFTA_BITWISE_MASK, NFTA_DATA_VALUE, and, len);
         if (r < 0)
                 return r;
 
-        r = nfnl_add_expr_data(m, NFTA_BITWISE_XOR, xor, len);
+        r = sd_netlink_message_append_container_data(m, NFTA_BITWISE_XOR, NFTA_DATA_VALUE, xor, len);
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_close_container(m); /* NFTA_EXPR_DATA */
-        if (r < 0)
-                return r;
-        return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */
+        return nfnl_close_expr_container(m);
 }
 
-static int nfnl_add_expr_dnat(sd_netlink_message *m,
-                              int family,
-                              enum nft_registers areg,
-                              enum nft_registers preg) {
+static int nfnl_add_expr_dnat(
+                sd_netlink_message *m,
+                int family,
+                enum nft_registers areg,
+                enum nft_registers preg) {
+
         int r;
 
-        r = nfnl_add_open_expr_container(m, "nat");
+        assert(m);
+
+        r = nfnl_open_expr_container(m, "nat");
         if (r < 0)
                 return r;
 
@@ -291,14 +286,12 @@
         r = sd_netlink_message_append_u32(m, NFTA_NAT_REG_ADDR_MIN, htobe32(areg));
         if (r < 0)
                 return r;
+
         r = sd_netlink_message_append_u32(m, NFTA_NAT_REG_PROTO_MIN, htobe32(preg));
         if (r < 0)
                 return r;
-        r = sd_netlink_message_close_container(m);
-        if (r < 0)
-                return r;
 
-        return sd_netlink_message_close_container(m);
+        return nfnl_close_expr_container(m);
 }
 
 static int nfnl_add_expr_masq(sd_netlink_message *m) {
@@ -315,13 +308,22 @@
         return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */
 }
 
-static int sd_nfnl_message_new_masq_rule(sd_netlink *nfnl, sd_netlink_message **ret, int family,
-                                         const char *chain) {
+static int sd_nfnl_message_new_masq_rule(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int family,
+                const char *chain) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         /* -t nat -A POSTROUTING -p protocol -s source/pflen -o out_interface -d destination/pflen -j MASQUERADE */
 
+        assert(nfnl);
+        assert(ret);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(chain);
+
         r = sd_nfnl_nft_message_new_rule(nfnl, &m, family, NFT_SYSTEMD_TABLE_NAME, chain);
         if (r < 0)
                 return r;
@@ -341,7 +343,7 @@
                 return r;
 
         /* 1st statement: use reg1 content to make lookup in @masq_saddr set. */
-        r = nfnl_add_expr_lookup_set(m, NFT_SYSTEMD_MASQ_SET_NAME, NFT_REG32_01);
+        r = nfnl_add_expr_lookup(m, NFT_SYSTEMD_MASQ_SET_NAME, NFT_REG32_01, 0);
         if (r < 0)
                 return r;
 
@@ -353,12 +355,17 @@
         r = sd_netlink_message_close_container(m); /* NFTA_RULE_EXPRESSIONS */
         if (r < 0)
                 return r;
+
         *ret = TAKE_PTR(m);
         return 0;
 }
 
-static int sd_nfnl_message_new_dnat_rule_pre(sd_netlink *nfnl, sd_netlink_message **ret, int family,
-                                             const char *chain) {
+static int sd_nfnl_message_new_dnat_rule_pre(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int family,
+                const char *chain) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         enum nft_registers proto_reg;
         uint32_t local = RTN_LOCAL;
@@ -367,6 +374,11 @@
         /* -t nat -A PREROUTING -p protocol --dport local_port -i in_interface -s source/pflen
          * -d destination/pflen -j DNAT --to-destination remote_addr:remote_port */
 
+        assert(nfnl);
+        assert(ret);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(chain);
+
         r = sd_nfnl_nft_message_new_rule(nfnl, &m, family, NFT_SYSTEMD_TABLE_NAME, chain);
         if (r < 0)
                 return r;
@@ -396,9 +408,8 @@
                 return r;
 
         /* 3rd statement: lookup 'l4proto . dport', e.g. 'tcp . 22' as key and
-         * store address and port for the dnat mapping in REG1/REG2.
-        */
-        r = nfnl_add_expr_lookup_map(m, NFT_SYSTEMD_DNAT_MAP_NAME, NFT_REG32_01, NFT_REG32_01);
+         * store address and port for the dnat mapping in REG1/REG2. */
+        r = nfnl_add_expr_lookup(m, NFT_SYSTEMD_DNAT_MAP_NAME, NFT_REG32_01, NFT_REG32_01);
         if (r < 0)
                 return r;
 
@@ -410,18 +421,27 @@
         r = sd_netlink_message_close_container(m); /* NFTA_RULE_EXPRESSIONS */
         if (r < 0)
                 return r;
+
         *ret = TAKE_PTR(m);
         return 0;
 }
 
-static int sd_nfnl_message_new_dnat_rule_out(sd_netlink *nfnl, sd_netlink_message **ret,
-                                             int family, const char *chain) {
-        static const uint32_t zero = 0, one = 1;
+static int sd_nfnl_message_new_dnat_rule_out(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int family,
+                const char *chain) {
 
+        static const uint32_t zero = 0, one = 1;
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         enum nft_registers proto_reg;
         int r;
 
+        assert(nfnl);
+        assert(ret);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(chain);
+
         r = sd_nfnl_nft_message_new_rule(nfnl, &m, family, NFT_SYSTEMD_TABLE_NAME, chain);
         if (r < 0)
                 return r;
@@ -483,9 +503,8 @@
          * the new destination ip and port number.
          *
          * reg1 and reg2 are clobbered and will then contain the new
-         * address/port number.
-         */
-        r = nfnl_add_expr_lookup_map(m, NFT_SYSTEMD_DNAT_MAP_NAME, NFT_REG32_01, NFT_REG32_01);
+         * address/port number. */
+        r = nfnl_add_expr_lookup(m, NFT_SYSTEMD_DNAT_MAP_NAME, NFT_REG32_01, NFT_REG32_01);
         if (r < 0)
                 return r;
 
@@ -499,18 +518,29 @@
         r = sd_netlink_message_close_container(m); /* NFTA_RULE_EXPRESSIONS */
         if (r < 0)
                 return r;
+
         *ret = TAKE_PTR(m);
         return 0;
 }
 
-static int nft_new_set(struct sd_netlink *nfnl,
-                       sd_netlink_message **ret,
-                       int family, const char *set_name,
-                       uint32_t set_id,
-                       uint32_t flags, uint32_t type, uint32_t klen) {
+static int nft_new_set(
+                struct sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int family,
+                const char *set_name,
+                uint32_t set_id,
+                uint32_t flags,
+                uint32_t type,
+                uint32_t klen) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(nfnl);
+        assert(ret);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(set_name);
+
         r = sd_nfnl_nft_message_new_set(nfnl, &m, family, NFT_SYSTEMD_TABLE_NAME, set_name, set_id, klen);
         if (r < 0)
                 return r;
@@ -529,13 +559,26 @@
         return r;
 }
 
-static int nft_new_map(struct sd_netlink *nfnl,
-                       sd_netlink_message **ret,
-                       int family, const char *set_name, uint32_t set_id,
-                       uint32_t flags, uint32_t type, uint32_t klen, uint32_t dtype, uint32_t dlen) {
+static int nft_new_map(
+                struct sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int family,
+                const char *set_name,
+                uint32_t set_id,
+                uint32_t flags,
+                uint32_t type,
+                uint32_t klen,
+                uint32_t dtype,
+                uint32_t dlen) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(nfnl);
+        assert(ret);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(set_name);
+
         r = nft_new_set(nfnl, &m, family, set_name, set_id, flags | NFT_SET_MAP, type, klen);
         if (r < 0)
                 return r;
@@ -547,17 +590,31 @@
         r = sd_netlink_message_append_u32(m, NFTA_SET_DATA_LEN, htobe32(dlen));
         if (r < 0)
                 return r;
+
         *ret = TAKE_PTR(m);
         return 0;
 }
 
-static int nft_add_element(sd_netlink *nfnl, sd_netlink_message **ret,
-                           int family, const char *set_name,
-                           const void *key, uint32_t klen,
-                           const void *data, uint32_t dlen) {
+static int nft_add_element(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int family,
+                const char *set_name,
+                const void *key,
+                uint32_t klen,
+                const void *data,
+                uint32_t dlen) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(nfnl);
+        assert(ret);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(set_name);
+        assert(key);
+        assert(data);
+
         /*
          * Ideally there would be an API that provides:
          *
@@ -571,40 +628,64 @@
          * This replicated here and each element gets added to the set
          * one-by-one.
          */
-        r = sd_nfnl_nft_message_new_setelems_begin(nfnl, &m, family, NFT_SYSTEMD_TABLE_NAME, set_name);
+        r = sd_nfnl_nft_message_new_setelems(nfnl, &m, /* add = */ true, family, NFT_SYSTEMD_TABLE_NAME, set_name);
         if (r < 0)
                 return r;
 
-        r = sd_nfnl_nft_message_add_setelem(m, 0, key, klen, data, dlen);
+        r = sd_netlink_message_open_container(m, NFTA_SET_ELEM_LIST_ELEMENTS);
+        if (r < 0)
+                return r;
+
+        r = sd_nfnl_nft_message_append_setelem(m, 0, key, klen, data, dlen, 0);
         if (r < 0)
                 return r;
 
         /* could theoretically append more set elements to add here */
-        r = sd_nfnl_nft_message_add_setelem_end(m);
+
+        r = sd_netlink_message_close_container(m); /* NFTA_SET_ELEM_LIST_ELEMENTS */
         if (r < 0)
                 return r;
+
         *ret = TAKE_PTR(m);
         return 0;
 }
 
-static int nft_del_element(sd_netlink *nfnl,
-                           sd_netlink_message **ret, int family, const char *set_name,
-                           const void *key, uint32_t klen,
-                           const void *data, uint32_t dlen) {
+static int nft_del_element(
+                sd_netlink *nfnl,
+                sd_netlink_message **ret,
+                int family,
+                const char *set_name,
+                const void *key,
+                uint32_t klen,
+                const void *data,
+                uint32_t dlen) {
+
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
-        r = sd_nfnl_nft_message_del_setelems_begin(nfnl, &m, family, NFT_SYSTEMD_TABLE_NAME, set_name);
+        assert(nfnl);
+        assert(ret);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+        assert(set_name);
+        assert(key);
+        assert(data);
+
+        r = sd_nfnl_nft_message_new_setelems(nfnl, &m, /* add = */ false, family, NFT_SYSTEMD_TABLE_NAME, set_name);
         if (r < 0)
                return r;
 
-        r = sd_nfnl_nft_message_add_setelem(m, 0, key, klen, data, dlen);
-        if (r < 0)
-               return r;
-
-        r = sd_nfnl_nft_message_add_setelem_end(m);
+        r = sd_netlink_message_open_container(m, NFTA_SET_ELEM_LIST_ELEMENTS);
         if (r < 0)
                 return r;
+
+        r = sd_nfnl_nft_message_append_setelem(m, 0, key, klen, data, dlen, 0);
+        if (r < 0)
+               return r;
+
+        r = sd_netlink_message_close_container(m); /* NFTA_SET_ELEM_LIST_ELEMENTS */
+        if (r < 0)
+                return r;
+
         *ret = TAKE_PTR(m);
         return 0;
 }
@@ -612,15 +693,14 @@
 /* This is needed so 'nft' userspace tool can properly format the contents
  * of the set/map when someone uses 'nft' to inspect their content.
  *
- * The values cannot be changed, they are part of the nft tool type identifier ABI.
- */
+ * The values cannot be changed, they are part of the nft tool type identifier ABI. */
 #define TYPE_BITS 6
 
 enum nft_key_types {
-        TYPE_IPADDR = 7,
-        TYPE_IP6ADDR = 8,
+        TYPE_IPADDR        = 7,
+        TYPE_IP6ADDR       = 8,
         TYPE_INET_PROTOCOL = 12,
-        TYPE_INET_SERVICE = 13,
+        TYPE_INET_SERVICE  = 13,
 };
 
 static uint32_t concat_types2(enum nft_key_types a, enum nft_key_types b) {
@@ -632,51 +712,38 @@
         return type;
 }
 
-/* enough space to hold netlink messages for table skeleton */
-#define NFT_INIT_MSGS 16
 static int fw_nftables_init_family(sd_netlink *nfnl, int family) {
-        sd_netlink_message *batch[NFT_INIT_MSGS] = {};
-        size_t msgcnt = 0, i, ip_type_size;
+        sd_netlink_message *messages[10] = {};
+        _unused_ _cleanup_(netlink_message_unref_manyp) sd_netlink_message **unref = messages;
+        size_t msgcnt = 0, ip_type_size;
         uint32_t set_id = 0;
         int ip_type, r;
 
+        assert(nfnl);
         assert(IN_SET(family, AF_INET, AF_INET6));
 
-        r = sd_nfnl_message_batch_begin(nfnl, &batch[msgcnt]);
-        if (r < 0)
-                goto out_unref;
-
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
         /* Set F_EXCL so table add fails if the table already exists. */
-        r = sd_nfnl_nft_message_new_table(nfnl, &batch[msgcnt], family, NFT_SYSTEMD_TABLE_NAME, NLM_F_EXCL | NLM_F_ACK);
+        r = sd_nfnl_nft_message_new_table(nfnl, &messages[msgcnt++], family, NFT_SYSTEMD_TABLE_NAME);
         if (r < 0)
-                goto out_unref;
+                return r;
 
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
-
-        r = sd_nfnl_nft_message_new_basechain(nfnl, &batch[msgcnt], family, NFT_SYSTEMD_TABLE_NAME,
+        r = sd_nfnl_nft_message_new_basechain(nfnl, &messages[msgcnt++], family, NFT_SYSTEMD_TABLE_NAME,
                                               "prerouting", "nat",
                                               NF_INET_PRE_ROUTING, NF_IP_PRI_NAT_DST + 1);
         if (r < 0)
-                goto out_unref;
+                return r;
 
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
-        r = sd_nfnl_nft_message_new_basechain(nfnl, &batch[msgcnt], family, NFT_SYSTEMD_TABLE_NAME,
+        r = sd_nfnl_nft_message_new_basechain(nfnl, &messages[msgcnt++], family, NFT_SYSTEMD_TABLE_NAME,
                                               "output", "nat",
                                               NF_INET_LOCAL_OUT, NF_IP_PRI_NAT_DST + 1);
         if (r < 0)
-                goto out_unref;
+                return r;
 
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
-        r = sd_nfnl_nft_message_new_basechain(nfnl, &batch[msgcnt], family, NFT_SYSTEMD_TABLE_NAME,
+        r = sd_nfnl_nft_message_new_basechain(nfnl, &messages[msgcnt++], family, NFT_SYSTEMD_TABLE_NAME,
                                               "postrouting", "nat",
                                               NF_INET_POST_ROUTING, NF_IP_PRI_NAT_SRC + 1);
         if (r < 0)
-                goto out_unref;
+                return r;
 
         if (family == AF_INET) {
                 ip_type_size = sizeof(uint32_t);
@@ -686,12 +753,10 @@
                 ip_type_size = sizeof(struct in6_addr);
                 ip_type = TYPE_IP6ADDR;
         }
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
         /* set to store ip address ranges we should masquerade for */
-        r = nft_new_set(nfnl, &batch[msgcnt], family, NFT_SYSTEMD_MASQ_SET_NAME, ++set_id, NFT_SET_INTERVAL, ip_type, ip_type_size);
+        r = nft_new_set(nfnl, &messages[msgcnt++], family, NFT_SYSTEMD_MASQ_SET_NAME, ++set_id, NFT_SET_INTERVAL, ip_type, ip_type_size);
         if (r < 0)
-                goto out_unref;
+                return r;
 
         /*
          * map to store ip address:port pair to dnat to.  elements in concatenation
@@ -700,54 +765,39 @@
          * Example: ip protocol . tcp daddr is sizeof(uint32_t) + sizeof(uint32_t), not
          * sizeof(uint8_t) + sizeof(uint16_t).
          */
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
-        r = nft_new_map(nfnl, &batch[msgcnt], family, NFT_SYSTEMD_DNAT_MAP_NAME, ++set_id, 0,
+        r = nft_new_map(nfnl, &messages[msgcnt++], family, NFT_SYSTEMD_DNAT_MAP_NAME, ++set_id, 0,
                         concat_types2(TYPE_INET_PROTOCOL, TYPE_INET_SERVICE), sizeof(uint32_t) * 2,
                         concat_types2(ip_type, TYPE_INET_SERVICE), ip_type_size + sizeof(uint32_t));
         if (r < 0)
-                goto out_unref;
+                return r;
 
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
-        r = sd_nfnl_message_new_dnat_rule_pre(nfnl, &batch[msgcnt], family, "prerouting");
+        r = sd_nfnl_message_new_dnat_rule_pre(nfnl, &messages[msgcnt++], family, "prerouting");
         if (r < 0)
-                goto out_unref;
+                return r;
 
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
-        r = sd_nfnl_message_new_dnat_rule_out(nfnl, &batch[msgcnt], family, "output");
+        r = sd_nfnl_message_new_dnat_rule_out(nfnl, &messages[msgcnt++], family, "output");
         if (r < 0)
-                goto out_unref;
+                return r;
 
-        msgcnt++;
-        r = sd_nfnl_message_new_masq_rule(nfnl, &batch[msgcnt], family, "postrouting");
+        r = sd_nfnl_message_new_masq_rule(nfnl, &messages[msgcnt++], family, "postrouting");
         if (r < 0)
-                goto out_unref;
+                return r;
 
-        msgcnt++;
-        assert(msgcnt < NFT_INIT_MSGS);
-        r = sd_nfnl_message_batch_end(nfnl, &batch[msgcnt]);
-        if (r < 0)
-                goto out_unref;
+        assert(msgcnt < ELEMENTSOF(messages));
+        r = sd_nfnl_call_batch(nfnl, messages, msgcnt, NFNL_DEFAULT_TIMEOUT_USECS, NULL);
+        if (r < 0 && r != -EEXIST)
+                return r;
 
-        msgcnt++;
-        assert(msgcnt <= NFT_INIT_MSGS);
-        r = nfnl_netlink_sendv(nfnl, batch, msgcnt);
-        if (r == -EEXIST)
-                r = 0;
-
-out_unref:
-        for (i = 0; i < msgcnt; i++)
-                sd_netlink_message_unref(batch[i]);
-
-        return r;
+        return 0;
 }
 
 int fw_nftables_init(FirewallContext *ctx) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *nfnl = NULL;
         int r;
 
+        assert(ctx);
+        assert(!ctx->nfnl);
+
         r = sd_nfnl_socket_open(&nfnl);
         if (r < 0)
                 return r;
@@ -767,28 +817,35 @@
 }
 
 void fw_nftables_exit(FirewallContext *ctx) {
+        assert(ctx);
+
         ctx->nfnl = sd_netlink_unref(ctx->nfnl);
 }
 
-static int nft_message_add_setelem_iprange(sd_netlink_message *m,
-                                           const union in_addr_union *source,
-                                           unsigned int prefixlen) {
+static int nft_message_append_setelem_iprange(
+                sd_netlink_message *m,
+                const union in_addr_union *source,
+                unsigned int prefixlen) {
+
         uint32_t mask, start, end;
         unsigned int nplen;
         int r;
 
+        assert(m);
+        assert(source);
         assert(prefixlen <= 32);
+
         nplen = 32 - prefixlen;
 
         mask = (1U << nplen) - 1U;
         mask = htobe32(~mask);
         start = source->in.s_addr & mask;
 
-        r = sd_nfnl_nft_message_add_setelem(m, 0, &start, sizeof(start), NULL, 0);
+        r = sd_netlink_message_open_container(m, NFTA_SET_ELEM_LIST_ELEMENTS);
         if (r < 0)
                 return r;
 
-        r = sd_nfnl_nft_message_add_setelem_end(m);
+        r = sd_nfnl_nft_message_append_setelem(m, 0, &start, sizeof(start), NULL, 0, 0);
         if (r < 0)
                 return r;
 
@@ -797,22 +854,14 @@
                 end = 0U;
         end = htobe32(end);
 
-        r = sd_nfnl_nft_message_add_setelem(m, 1, &end, sizeof(end), NULL, 0);
+        r = sd_nfnl_nft_message_append_setelem(m, 1, &end, sizeof(end), NULL, 0, NFT_SET_ELEM_INTERVAL_END);
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_append_u32(m, NFTA_SET_ELEM_FLAGS, htobe32(NFT_SET_ELEM_INTERVAL_END));
-        if (r < 0)
-                return r;
-
-        r = sd_nfnl_nft_message_add_setelem_end(m);
-        if (r < 0)
-                return r;
-
-        return 0;
+        return sd_netlink_message_close_container(m); /* NFTA_SET_ELEM_LIST_ELEMENTS */
 }
 
-static int nft_message_add_setelem_ip6range(
+static int nft_message_append_setelem_ip6range(
                 sd_netlink_message *m,
                 const union in_addr_union *source,
                 unsigned int prefixlen) {
@@ -820,79 +869,59 @@
         union in_addr_union start, end;
         int r;
 
+        assert(m);
+        assert(source);
+
         r = in_addr_prefix_range(AF_INET6, source, prefixlen, &start, &end);
         if (r < 0)
                 return r;
 
-        r = sd_nfnl_nft_message_add_setelem(m, 0, &start.in6, sizeof(start.in6), NULL, 0);
+        r = sd_netlink_message_open_container(m, NFTA_SET_ELEM_LIST_ELEMENTS);
         if (r < 0)
                 return r;
 
-        r = sd_nfnl_nft_message_add_setelem_end(m);
+        r = sd_nfnl_nft_message_append_setelem(m, 0, &start.in6, sizeof(start.in6), NULL, 0, 0);
         if (r < 0)
                 return r;
 
-        r = sd_nfnl_nft_message_add_setelem(m, 1, &end.in6, sizeof(end.in6), NULL, 0);
+        r = sd_nfnl_nft_message_append_setelem(m, 1, &end.in6, sizeof(end.in6), NULL, 0, NFT_SET_ELEM_INTERVAL_END);
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_append_u32(m, NFTA_SET_ELEM_FLAGS, htobe32(NFT_SET_ELEM_INTERVAL_END));
-        if (r < 0)
-                return r;
-
-        return sd_nfnl_nft_message_add_setelem_end(m);
+        return sd_netlink_message_close_container(m); /* NFTA_SET_ELEM_LIST_ELEMENTS */
 }
 
-#define NFT_MASQ_MSGS   3
-
 static int fw_nftables_add_masquerade_internal(
-                FirewallContext *ctx,
+                sd_netlink *nfnl,
                 bool add,
                 int af,
                 const union in_addr_union *source,
                 unsigned int source_prefixlen) {
 
-        sd_netlink_message *transaction[NFT_MASQ_MSGS] = {};
-        size_t tsize;
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
+        assert(nfnl);
+        assert(IN_SET(af, AF_INET, AF_INET6));
+
         if (!source || source_prefixlen == 0)
                 return -EINVAL;
 
         if (af == AF_INET6 && source_prefixlen < 8)
                 return -EINVAL;
 
-        r = sd_nfnl_message_batch_begin(ctx->nfnl, &transaction[0]);
+        r = sd_nfnl_nft_message_new_setelems(nfnl, &m, add, af, NFT_SYSTEMD_TABLE_NAME, NFT_SYSTEMD_MASQ_SET_NAME);
         if (r < 0)
                 return r;
-        tsize = 1;
-        if (add)
-                r = sd_nfnl_nft_message_new_setelems_begin(ctx->nfnl, &transaction[tsize], af, NFT_SYSTEMD_TABLE_NAME, NFT_SYSTEMD_MASQ_SET_NAME);
-        else
-                r = sd_nfnl_nft_message_del_setelems_begin(ctx->nfnl, &transaction[tsize], af, NFT_SYSTEMD_TABLE_NAME, NFT_SYSTEMD_MASQ_SET_NAME);
-        if (r < 0)
-                goto out_unref;
 
         if (af == AF_INET)
-                 r = nft_message_add_setelem_iprange(transaction[tsize], source, source_prefixlen);
+                 r = nft_message_append_setelem_iprange(m, source, source_prefixlen);
         else
-                 r = nft_message_add_setelem_ip6range(transaction[tsize], source, source_prefixlen);
-        if (r < 0)
-                goto out_unref;
-
-        ++tsize;
-        assert(tsize < NFT_MASQ_MSGS);
-        r = sd_nfnl_message_batch_end(ctx->nfnl, &transaction[tsize]);
+                 r = nft_message_append_setelem_ip6range(m, source, source_prefixlen);
         if (r < 0)
                 return r;
 
-        ++tsize;
-        r = nfnl_netlink_sendv(ctx->nfnl, transaction, tsize);
-
-out_unref:
-        while (tsize > 0)
-                sd_netlink_message_unref(transaction[--tsize]);
-        return r < 0 ? r : 0;
+        return sd_nfnl_call_batch(nfnl, &m, 1, NFNL_DEFAULT_TIMEOUT_USECS, NULL);
 }
 
 int fw_nftables_add_masquerade(
@@ -904,10 +933,14 @@
 
         int r;
 
+        assert(ctx);
+        assert(ctx->nfnl);
+        assert(IN_SET(af, AF_INET, AF_INET6));
+
         if (!socket_ipv6_is_supported() && af == AF_INET6)
                 return -EOPNOTSUPP;
 
-        r = fw_nftables_add_masquerade_internal(ctx, add, af, source, source_prefixlen);
+        r = fw_nftables_add_masquerade_internal(ctx->nfnl, add, af, source, source_prefixlen);
         if (r != -ENOENT)
                 return r;
 
@@ -932,13 +965,11 @@
         if (r < 0)
                 return r;
 
-        return fw_nftables_add_masquerade_internal(ctx, add, af, source, source_prefixlen);
+        return fw_nftables_add_masquerade_internal(ctx->nfnl, add, af, source, source_prefixlen);
 }
 
-#define NFT_DNAT_MSGS   4
-
 static int fw_nftables_add_local_dnat_internal(
-                FirewallContext *ctx,
+                sd_netlink *nfnl,
                 bool add,
                 int af,
                 int protocol,
@@ -947,13 +978,16 @@
                 uint16_t remote_port,
                 const union in_addr_union *previous_remote) {
 
-        sd_netlink_message *transaction[NFT_DNAT_MSGS] = {};
+        sd_netlink_message *messages[3] = {};
+        _unused_ _cleanup_(netlink_message_unref_manyp) sd_netlink_message **unref = messages;
         static bool ipv6_supported = true;
         uint32_t data[5], key[2], dlen;
-        size_t tsize;
+        size_t msgcnt = 0;
         int r;
 
+        assert(nfnl);
         assert(add || !previous_remote);
+        assert(IN_SET(af, AF_INET, AF_INET6));
 
         if (!ipv6_supported && af == AF_INET6)
                 return -EOPNOTSUPP;
@@ -982,11 +1016,6 @@
                 data[4] = htobe16(remote_port);
         }
 
-        r = sd_nfnl_message_batch_begin(ctx->nfnl, &transaction[0]);
-        if (r < 0)
-                return r;
-
-        tsize = 1;
         /* If a previous remote is set, remove its entry */
         if (add && previous_remote && !in_addr_equal(af, previous_remote, remote)) {
                 if (af == AF_INET)
@@ -994,11 +1023,9 @@
                 else
                         memcpy(data, &previous_remote->in6, sizeof(previous_remote->in6));
 
-                r = nft_del_element(ctx->nfnl, &transaction[tsize], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
+                r = nft_del_element(nfnl, &messages[msgcnt++], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
                 if (r < 0)
-                        goto out_unref;
-
-                tsize++;
+                        return r;
         }
 
         if (af == AF_INET)
@@ -1006,39 +1033,27 @@
         else
                 memcpy(data, &remote->in6, sizeof(remote->in6));
 
-        assert(tsize < NFT_DNAT_MSGS);
         if (add)
-                r = nft_add_element(ctx->nfnl, &transaction[tsize], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
+                r = nft_add_element(nfnl, &messages[msgcnt++], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
         else
-                r = nft_del_element(ctx->nfnl, &transaction[tsize], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
+                r = nft_del_element(nfnl, &messages[msgcnt++], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
         if (r < 0)
-                goto out_unref;
+                return r;
 
-        tsize++;
-        assert(tsize < NFT_DNAT_MSGS);
-
-        r = sd_nfnl_message_batch_end(ctx->nfnl, &transaction[tsize]);
-        if (r < 0)
-                goto out_unref;
-
-        tsize++;
-        assert(tsize <= NFT_DNAT_MSGS);
-
-        r = nfnl_netlink_sendv(ctx->nfnl, transaction, tsize);
+        assert(msgcnt < ELEMENTSOF(messages));
+        r = sd_nfnl_call_batch(nfnl, messages, msgcnt, NFNL_DEFAULT_TIMEOUT_USECS, NULL);
         if (r == -EOVERFLOW && af == AF_INET6) {
                 /* The current implementation of DNAT in systemd requires kernel's
                  * fdb9c405e35bdc6e305b9b4e20ebc141ed14fc81 (v5.8), and the older kernel returns
                  * -EOVERFLOW. Let's treat the error as -EOPNOTSUPP. */
                 log_debug_errno(r, "The current implementation of IPv6 DNAT in systemd requires kernel 5.8 or newer, ignoring: %m");
                 ipv6_supported = false;
-                r = -EOPNOTSUPP;
+                return -EOPNOTSUPP;
         }
+        if (r < 0)
+                return r;
 
-out_unref:
-        while (tsize > 0)
-                sd_netlink_message_unref(transaction[--tsize]);
-
-        return r < 0 ? r : 0;
+        return 0;
 }
 
 int fw_nftables_add_local_dnat(
@@ -1053,10 +1068,14 @@
 
         int r;
 
+        assert(ctx);
+        assert(ctx->nfnl);
+        assert(IN_SET(af, AF_INET, AF_INET6));
+
         if (!socket_ipv6_is_supported() && af == AF_INET6)
                 return -EOPNOTSUPP;
 
-        r = fw_nftables_add_local_dnat_internal(ctx, add, af, protocol, local_port, remote, remote_port, previous_remote);
+        r = fw_nftables_add_local_dnat_internal(ctx->nfnl, add, af, protocol, local_port, remote, remote_port, previous_remote);
         if (r != -ENOENT)
                 return r;
 
@@ -1066,5 +1085,5 @@
                 return r;
 
         /* table created anew; previous address already gone */
-        return fw_nftables_add_local_dnat_internal(ctx, add, af, protocol, local_port, remote, remote_port, NULL);
+        return fw_nftables_add_local_dnat_internal(ctx->nfnl, add, af, protocol, local_port, remote, remote_port, NULL);
 }
diff --git a/src/shared/format-table.c b/src/shared/format-table.c
index 4c4e459..ee45d4f 100644
--- a/src/shared/format-table.c
+++ b/src/shared/format-table.c
@@ -11,10 +11,11 @@
 #include "fileio.h"
 #include "format-table.h"
 #include "format-util.h"
+#include "fs-util.h"
+#include "glyph-util.h"
 #include "gunicode.h"
 #include "id128-util.h"
 #include "in-addr-util.h"
-#include "locale-util.h"
 #include "memory-util.h"
 #include "pager.h"
 #include "parse-util.h"
@@ -29,7 +30,6 @@
 #include "time-util.h"
 #include "user-util.h"
 #include "utf8.h"
-#include "util.h"
 
 #define DEFAULT_WEIGHT 100
 
@@ -106,6 +106,7 @@
                 uid_t uid;
                 gid_t gid;
                 pid_t pid;
+                mode_t mode;
                 /* … add more here as we start supporting more cell data types … */
         };
 } TableData;
@@ -131,6 +132,10 @@
         size_t n_cells;
 
         bool header;   /* Whether to show the header row? */
+        bool vertical; /* Whether to field names are on the left rather than the first line */
+
+        TableErsatz ersatz; /* What to show when we have an empty cell or an invalid value that cannot be rendered. */
+
         size_t width;  /* If == 0 format this as wide as necessary. If SIZE_MAX format this to console
                         * width or less wide, but not wider. Otherwise the width to format this table in. */
         size_t cell_height_max; /* Maximum number of lines per cell. (If there are more, ellipsis is shown. If SIZE_MAX then no limit is set, the default. == 0 is not allowed.) */
@@ -143,9 +148,10 @@
         size_t *sort_map;     /* The columns to order rows by, in order of preference. */
         size_t n_sort_map;
 
-        bool *reverse_map;
+        char **json_fields;
+        size_t n_json_fields;
 
-        char *empty_string;
+        bool *reverse_map;
 };
 
 Table *table_new_raw(size_t n_columns) {
@@ -162,6 +168,7 @@
                 .header = true,
                 .width = SIZE_MAX,
                 .cell_height_max = SIZE_MAX,
+                .ersatz = TABLE_ERSATZ_EMPTY,
         };
 
         return TAKE_PTR(t);
@@ -192,14 +199,7 @@
         for (const char *h = first_header; h; h = va_arg(ap, const char*)) {
                 TableCell *cell;
 
-                r = table_add_cell(t, &cell, TABLE_STRING, h);
-                if (r < 0) {
-                        va_end(ap);
-                        return NULL;
-                }
-
-                /* Make the table header uppercase */
-                r = table_set_uppercase(t, cell, true);
+                r = table_add_cell(t, &cell, TABLE_HEADER, h);
                 if (r < 0) {
                         va_end(ap);
                         return NULL;
@@ -211,6 +211,32 @@
         return TAKE_PTR(t);
 }
 
+Table *table_new_vertical(void) {
+        _cleanup_(table_unrefp) Table *t = NULL;
+        TableCell *cell;
+
+        t = table_new_raw(2);
+        if (!t)
+                return NULL;
+
+        t->vertical = true;
+        t->header = false;
+
+        if (table_add_cell(t, &cell, TABLE_HEADER, "key") < 0)
+                return NULL;
+
+        if (table_set_align_percent(t, cell, 100) < 0)
+                return NULL;
+
+        if (table_add_cell(t, &cell, TABLE_HEADER, "value") < 0)
+                return NULL;
+
+        if (table_set_align_percent(t, cell, 0) < 0)
+                return NULL;
+
+        return TAKE_PTR(t);
+}
+
 static TableData *table_data_free(TableData *d) {
         assert(d);
 
@@ -237,7 +263,11 @@
         free(t->display_map);
         free(t->sort_map);
         free(t->reverse_map);
-        free(t->empty_string);
+
+        for (size_t i = 0; i < t->n_json_fields; i++)
+                free(t->json_fields[i]);
+
+        free(t->json_fields);
 
         return mfree(t);
 }
@@ -251,25 +281,32 @@
 
         case TABLE_STRING:
         case TABLE_PATH:
+        case TABLE_PATH_BASENAME:
+        case TABLE_FIELD:
+        case TABLE_HEADER:
                 return strlen(data) + 1;
 
         case TABLE_STRV:
         case TABLE_STRV_WRAPPED:
                 return sizeof(char **);
 
+        case TABLE_BOOLEAN_CHECKMARK:
         case TABLE_BOOLEAN:
                 return sizeof(bool);
 
         case TABLE_TIMESTAMP:
         case TABLE_TIMESTAMP_UTC:
         case TABLE_TIMESTAMP_RELATIVE:
+        case TABLE_TIMESTAMP_DATE:
         case TABLE_TIMESPAN:
         case TABLE_TIMESPAN_MSEC:
+        case TABLE_TIMESPAN_DAY:
                 return sizeof(usec_t);
 
         case TABLE_SIZE:
         case TABLE_INT64:
         case TABLE_UINT64:
+        case TABLE_UINT64_HEX:
         case TABLE_BPS:
                 return sizeof(uint64_t);
 
@@ -309,8 +346,11 @@
         case TABLE_PID:
                 return sizeof(pid_t);
 
+        case TABLE_MODE:
+                return sizeof(mode_t);
+
         default:
-                assert_not_reached("Uh? Unexpected cell type");
+                assert_not_reached();
         }
 }
 
@@ -322,7 +362,8 @@
                 size_t maximum_width,
                 unsigned weight,
                 unsigned align_percent,
-                unsigned ellipsize_percent) {
+                unsigned ellipsize_percent,
+                bool uppercase) {
 
         size_t k, l;
         assert(d);
@@ -345,13 +386,14 @@
         if (d->ellipsize_percent != ellipsize_percent)
                 return false;
 
-        /* If a color/url/uppercase flag is set, refuse to merge */
+        if (d->uppercase != uppercase)
+                return false;
+
+        /* If a color/url is set, refuse to merge */
         if (d->color || d->rgap_color)
                 return false;
         if (d->url)
                 return false;
-        if (d->uppercase)
-                return false;
 
         k = table_data_size(type, data);
         l = table_data_size(d->type, d->data);
@@ -368,7 +410,8 @@
                 size_t maximum_width,
                 unsigned weight,
                 unsigned align_percent,
-                unsigned ellipsize_percent) {
+                unsigned ellipsize_percent,
+                bool uppercase) {
 
         _cleanup_free_ TableData *d = NULL;
         size_t data_size;
@@ -386,6 +429,7 @@
         d->weight = weight;
         d->align_percent = align_percent;
         d->ellipsize_percent = ellipsize_percent;
+        d->uppercase = uppercase;
 
         if (IN_SET(type, TABLE_STRV, TABLE_STRV_WRAPPED)) {
                 d->strv = strv_copy(data);
@@ -409,6 +453,7 @@
                 unsigned ellipsize_percent) {
 
         _cleanup_(table_data_unrefp) TableData *d = NULL;
+        bool uppercase;
         TableData *p;
 
         assert(t);
@@ -441,13 +486,15 @@
         assert(align_percent <= 100);
         assert(ellipsize_percent <= 100);
 
+        uppercase = type == TABLE_HEADER;
+
         /* Small optimization: Pretty often adjacent cells in two subsequent lines have the same data and
          * formatting. Let's see if we can reuse the cell data and ref it once more. */
 
-        if (p && table_data_matches(p, type, data, minimum_width, maximum_width, weight, align_percent, ellipsize_percent))
+        if (p && table_data_matches(p, type, data, minimum_width, maximum_width, weight, align_percent, ellipsize_percent, uppercase))
                 d = table_data_ref(p);
         else {
-                d = table_data_new(type, data, minimum_width, maximum_width, weight, align_percent, ellipsize_percent);
+                d = table_data_new(type, data, minimum_width, maximum_width, weight, align_percent, ellipsize_percent, uppercase);
                 if (!d)
                         return -ENOMEM;
         }
@@ -463,18 +510,21 @@
         return 0;
 }
 
-int table_add_cell_stringf(Table *t, TableCell **ret_cell, const char *format, ...) {
+int table_add_cell_stringf_full(Table *t, TableCell **ret_cell, TableDataType dt, const char *format, ...) {
         _cleanup_free_ char *buffer = NULL;
         va_list ap;
         int r;
 
+        assert(t);
+        assert(IN_SET(dt, TABLE_STRING, TABLE_PATH, TABLE_PATH_BASENAME, TABLE_FIELD, TABLE_HEADER));
+
         va_start(ap, format);
         r = vasprintf(&buffer, format, ap);
         va_end(ap);
         if (r < 0)
                 return -ENOMEM;
 
-        return table_add_cell(t, ret_cell, TABLE_STRING, buffer);
+        return table_add_cell(t, ret_cell, dt, buffer);
 }
 
 int table_fill_empty(Table *t, size_t until_column) {
@@ -549,14 +599,14 @@
                         od->maximum_width,
                         od->weight,
                         od->align_percent,
-                        od->ellipsize_percent);
+                        od->ellipsize_percent,
+                        od->uppercase);
         if (!nd)
                 return -ENOMEM;
 
         nd->color = od->color;
         nd->rgap_color = od->rgap_color;
         nd->url = TAKE_PTR(curl);
-        nd->uppercase = od->uppercase;
 
         table_data_unref(od);
         t->data[i] = nd;
@@ -766,14 +816,14 @@
                         od->maximum_width,
                         od->weight,
                         od->align_percent,
-                        od->ellipsize_percent);
+                        od->ellipsize_percent,
+                        od->uppercase);
         if (!nd)
                 return -ENOMEM;
 
         nd->color = od->color;
         nd->rgap_color = od->rgap_color;
         nd->url = TAKE_PTR(curl);
-        nd->uppercase = od->uppercase;
 
         table_data_unref(od);
         t->data[i] = nd;
@@ -815,6 +865,7 @@
                         uid_t uid;
                         gid_t gid;
                         pid_t pid;
+                        mode_t mode;
                 } buffer;
 
                 switch (type) {
@@ -825,6 +876,9 @@
 
                 case TABLE_STRING:
                 case TABLE_PATH:
+                case TABLE_PATH_BASENAME:
+                case TABLE_FIELD:
+                case TABLE_HEADER:
                         data = va_arg(ap, const char *);
                         break;
 
@@ -833,6 +887,7 @@
                         data = va_arg(ap, char * const *);
                         break;
 
+                case TABLE_BOOLEAN_CHECKMARK:
                 case TABLE_BOOLEAN:
                         buffer.b = va_arg(ap, int);
                         data = &buffer.b;
@@ -841,8 +896,10 @@
                 case TABLE_TIMESTAMP:
                 case TABLE_TIMESTAMP_UTC:
                 case TABLE_TIMESTAMP_RELATIVE:
+                case TABLE_TIMESTAMP_DATE:
                 case TABLE_TIMESPAN:
                 case TABLE_TIMESPAN_MSEC:
+                case TABLE_TIMESPAN_DAY:
                         buffer.usec = va_arg(ap, usec_t);
                         data = &buffer.usec;
                         break;
@@ -916,6 +973,7 @@
                         break;
 
                 case TABLE_UINT64:
+                case TABLE_UINT64_HEX:
                         buffer.uint64 = va_arg(ap, uint64_t);
                         data = &buffer.uint64;
                         break;
@@ -961,6 +1019,11 @@
                         data = &buffer.pid;
                         break;
 
+                case TABLE_MODE:
+                        buffer.mode = va_arg(ap, mode_t);
+                        data = &buffer.mode;
+                        break;
+
                 case TABLE_SET_MINIMUM_WIDTH: {
                         size_t w = va_arg(ap, size_t);
 
@@ -1035,7 +1098,7 @@
                         return 0;
 
                 default:
-                        assert_not_reached("Uh? Unexpected data type.");
+                        assert_not_reached();
                 }
 
                 r = table_add_cell(t, &last_cell, type, data);
@@ -1066,10 +1129,26 @@
         t->cell_height_max = height;
 }
 
-int table_set_empty_string(Table *t, const char *empty) {
+void table_set_ersatz_string(Table *t, TableErsatz ersatz) {
         assert(t);
+        assert(ersatz >= 0 && ersatz < _TABLE_ERSATZ_MAX);
 
-        return free_and_strdup(&t->empty_string, empty);
+        t->ersatz = ersatz;
+}
+
+static const char* table_ersatz_string(const Table *t) {
+        switch (t->ersatz) {
+        case TABLE_ERSATZ_EMPTY:
+                return "";
+        case TABLE_ERSATZ_DASH:
+                return "-";
+        case TABLE_ERSATZ_UNSET:
+                return "(unset)";
+        case TABLE_ERSATZ_NA:
+                return "n/a";
+        default:
+                assert_not_reached();
+        }
 }
 
 static int table_set_display_all(Table *t) {
@@ -1149,11 +1228,11 @@
         return 0;
 }
 
-int table_hide_column_from_display(Table *t, size_t column) {
+int table_hide_column_from_display_internal(Table *t, ...) {
+        size_t cur = 0;
         int r;
 
         assert(t);
-        assert(column < t->n_columns);
 
         /* If the display map is empty, initialize it with all available columns */
         if (!t->display_map) {
@@ -1162,10 +1241,25 @@
                         return r;
         }
 
-        size_t allocated = t->n_display_map, cur = 0;
+        for (size_t i = 0; i < t->n_display_map; i++) {
+                bool listed = false;
+                va_list ap;
 
-        for (size_t i = 0; i < allocated; i++) {
-                if (t->display_map[i] == column)
+                va_start(ap, t);
+                for (;;) {
+                        size_t column;
+
+                        column = va_arg(ap, size_t);
+                        if (column == SIZE_MAX)
+                                break;
+                        if (column == t->display_map[i]) {
+                                listed = true;
+                                break;
+                        }
+                }
+                va_end(ap);
+
+                if (listed)
                         continue;
 
                 t->display_map[cur++] = t->display_map[i];
@@ -1188,9 +1282,12 @@
                 switch (a->type) {
 
                 case TABLE_STRING:
+                case TABLE_FIELD:
+                case TABLE_HEADER:
                         return strcmp(a->string, b->string);
 
                 case TABLE_PATH:
+                case TABLE_PATH_BASENAME:
                         return path_compare(a->string, b->string);
 
                 case TABLE_STRV:
@@ -1207,10 +1304,12 @@
                 case TABLE_TIMESTAMP:
                 case TABLE_TIMESTAMP_UTC:
                 case TABLE_TIMESTAMP_RELATIVE:
+                case TABLE_TIMESTAMP_DATE:
                         return CMP(a->timestamp, b->timestamp);
 
                 case TABLE_TIMESPAN:
                 case TABLE_TIMESPAN_MSEC:
+                case TABLE_TIMESPAN_DAY:
                         return CMP(a->timespan, b->timespan);
 
                 case TABLE_SIZE:
@@ -1246,6 +1345,7 @@
                         return CMP(a->uint32, b->uint32);
 
                 case TABLE_UINT64:
+                case TABLE_UINT64_HEX:
                         return CMP(a->uint64, b->uint64);
 
                 case TABLE_PERCENT:
@@ -1273,6 +1373,9 @@
                 case TABLE_PID:
                         return CMP(a->pid, b->pid);
 
+                case TABLE_MODE:
+                        return CMP(a->mode, b->mode);
+
                 default:
                         ;
                 }
@@ -1322,7 +1425,6 @@
                 return NULL;
 
         size_t position = 0;
-        char **p;
         STRV_FOREACH(p, strv) {
                 size_t our_len = utf8_console_width(*p); /* This returns -1 on invalid utf-8 (which shouldn't happen).
                                                           * If that happens, we'll just print one item per line. */
@@ -1356,28 +1458,54 @@
 
         switch (d->type) {
         case TABLE_EMPTY:
-                return strempty(t->empty_string);
+                return table_ersatz_string(t);
 
         case TABLE_STRING:
         case TABLE_PATH:
+        case TABLE_PATH_BASENAME:
+        case TABLE_FIELD:
+        case TABLE_HEADER: {
+                _cleanup_free_ char *bn = NULL;
+                const char *s;
+
+                if (d->type == TABLE_PATH_BASENAME)
+                        s = path_extract_filename(d->string, &bn) < 0 ? d->string : bn;
+                else
+                        s = d->string;
+
                 if (d->uppercase && !avoid_uppercasing) {
-                        d->formatted = new(char, strlen(d->string) + 1);
+                        d->formatted = new(char, strlen(s) + (d->type == TABLE_FIELD) + 1);
                         if (!d->formatted)
                                 return NULL;
 
                         char *q = d->formatted;
-                        for (char *p = d->string; *p; p++, q++)
-                                *q = (char) toupper((unsigned char) *p);
+                        for (const char *p = s; *p; p++)
+                                *(q++) = (char) toupper((unsigned char) *p);
+
+                        if (d->type == TABLE_FIELD)
+                                *(q++) = ':';
+
                         *q = 0;
+                        return d->formatted;
+                } else if (d->type == TABLE_FIELD) {
+                        d->formatted = strjoin(s, ":");
+                        if (!d->formatted)
+                                return NULL;
 
                         return d->formatted;
                 }
 
+                if (bn) {
+                        d->formatted = TAKE_PTR(bn);
+                        return d->formatted;
+                }
+
                 return d->string;
+        }
 
         case TABLE_STRV:
                 if (strv_isempty(d->strv))
-                        return strempty(t->empty_string);
+                        return table_ersatz_string(t);
 
                 d->formatted = strv_join(d->strv, "\n");
                 if (!d->formatted)
@@ -1386,7 +1514,7 @@
 
         case TABLE_STRV_WRAPPED: {
                 if (strv_isempty(d->strv))
-                        return strempty(t->empty_string);
+                        return table_ersatz_string(t);
 
                 char *buf = format_strv_width(d->strv, column_width);
                 if (!buf)
@@ -1403,9 +1531,13 @@
         case TABLE_BOOLEAN:
                 return yes_no(d->boolean);
 
+        case TABLE_BOOLEAN_CHECKMARK:
+                return special_glyph(d->boolean ? SPECIAL_GLYPH_CHECK_MARK : SPECIAL_GLYPH_CROSS_MARK);
+
         case TABLE_TIMESTAMP:
         case TABLE_TIMESTAMP_UTC:
-        case TABLE_TIMESTAMP_RELATIVE: {
+        case TABLE_TIMESTAMP_RELATIVE:
+        case TABLE_TIMESTAMP_DATE: {
                 _cleanup_free_ char *p = NULL;
                 char *ret;
 
@@ -1417,17 +1549,20 @@
                         ret = format_timestamp(p, FORMAT_TIMESTAMP_MAX, d->timestamp);
                 else if (d->type == TABLE_TIMESTAMP_UTC)
                         ret = format_timestamp_style(p, FORMAT_TIMESTAMP_MAX, d->timestamp, TIMESTAMP_UTC);
+                else if (d->type == TABLE_TIMESTAMP_DATE)
+                        ret = format_timestamp_style(p, FORMAT_TIMESTAMP_MAX, d->timestamp, TIMESTAMP_DATE);
                 else
                         ret = format_timestamp_relative(p, FORMAT_TIMESTAMP_RELATIVE_MAX, d->timestamp);
                 if (!ret)
-                        return "n/a";
+                        return "-";
 
                 d->formatted = TAKE_PTR(p);
                 break;
         }
 
         case TABLE_TIMESPAN:
-        case TABLE_TIMESPAN_MSEC: {
+        case TABLE_TIMESPAN_MSEC:
+        case TABLE_TIMESPAN_DAY: {
                 _cleanup_free_ char *p = NULL;
 
                 p = new(char, FORMAT_TIMESPAN_MAX);
@@ -1435,8 +1570,9 @@
                         return NULL;
 
                 if (!format_timespan(p, FORMAT_TIMESPAN_MAX, d->timespan,
-                                     d->type == TABLE_TIMESPAN ? 0 : USEC_PER_MSEC))
-                        return "n/a";
+                                     d->type == TABLE_TIMESPAN ? 0 :
+                                     d->type == TABLE_TIMESPAN_MSEC ? USEC_PER_MSEC : USEC_PER_DAY))
+                        return "-";
 
                 d->formatted = TAKE_PTR(p);
                 break;
@@ -1450,7 +1586,7 @@
                         return NULL;
 
                 if (!format_bytes(p, FORMAT_BYTES_MAX, d->size))
-                        return "n/a";
+                        return table_ersatz_string(t);
 
                 d->formatted = TAKE_PTR(p);
                 break;
@@ -1465,7 +1601,7 @@
                         return NULL;
 
                 if (!format_bytes_full(p, FORMAT_BYTES_MAX, d->size, 0))
-                        return "n/a";
+                        return table_ersatz_string(t);
 
                 n = strlen(p);
                 strscpy(p + n, FORMAT_BYTES_MAX + 2 - n, "bps");
@@ -1594,6 +1730,18 @@
                 break;
         }
 
+        case TABLE_UINT64_HEX: {
+                _cleanup_free_ char *p = NULL;
+
+                p = new(char, 16 + 1);
+                if (!p)
+                        return NULL;
+
+                sprintf(p, "%" PRIx64, d->uint64);
+                d->formatted = TAKE_PTR(p);
+                break;
+        }
+
         case TABLE_PERCENT: {
                 _cleanup_free_ char *p = NULL;
 
@@ -1608,16 +1756,9 @@
 
         case TABLE_IFINDEX: {
                 _cleanup_free_ char *p = NULL;
-                char name[IF_NAMESIZE + 1];
 
-                if (format_ifname(d->ifindex, name)) {
-                        p = strdup(name);
-                        if (!p)
-                                return NULL;
-                } else {
-                        if (asprintf(&p, "%i" , d->ifindex) < 0)
-                                return NULL;
-                }
+                if (format_ifname_full_alloc(d->ifindex, FORMAT_IFNAME_IFINDEX, &p) < 0)
+                        return NULL;
 
                 d->formatted = TAKE_PTR(p);
                 break;
@@ -1649,77 +1790,92 @@
         case TABLE_UUID: {
                 char *p;
 
-                p = new(char, ID128_UUID_STRING_MAX);
+                p = new(char, SD_ID128_UUID_STRING_MAX);
                 if (!p)
                         return NULL;
 
-                d->formatted = id128_to_uuid_string(d->id128, p);
+                d->formatted = sd_id128_to_uuid_string(d->id128, p);
                 break;
         }
 
         case TABLE_UID: {
-                _cleanup_free_ char *p = NULL;
+                char *p;
 
                 if (!uid_is_valid(d->uid))
-                        return "n/a";
+                        return table_ersatz_string(t);
 
                 p = new(char, DECIMAL_STR_WIDTH(d->uid) + 1);
                 if (!p)
                         return NULL;
-
                 sprintf(p, UID_FMT, d->uid);
-                d->formatted = TAKE_PTR(p);
+
+                d->formatted = p;
                 break;
         }
 
         case TABLE_GID: {
-                _cleanup_free_ char *p = NULL;
+                char *p;
 
                 if (!gid_is_valid(d->gid))
-                        return "n/a";
+                        return table_ersatz_string(t);
 
                 p = new(char, DECIMAL_STR_WIDTH(d->gid) + 1);
                 if (!p)
                         return NULL;
-
                 sprintf(p, GID_FMT, d->gid);
-                d->formatted = TAKE_PTR(p);
+
+                d->formatted = p;
                 break;
         }
 
         case TABLE_PID: {
-                _cleanup_free_ char *p = NULL;
+                char *p;
 
                 if (!pid_is_valid(d->pid))
-                        return "n/a";
+                        return table_ersatz_string(t);
 
                 p = new(char, DECIMAL_STR_WIDTH(d->pid) + 1);
                 if (!p)
                         return NULL;
-
                 sprintf(p, PID_FMT, d->pid);
-                d->formatted = TAKE_PTR(p);
+
+                d->formatted = p;
                 break;
         }
 
         case TABLE_SIGNAL: {
-                _cleanup_free_ char *p = NULL;
                 const char *suffix;
+                char *p;
 
                 suffix = signal_to_string(d->int_val);
                 if (!suffix)
-                        return "n/a";
+                        return table_ersatz_string(t);
 
                 p = strjoin("SIG", suffix);
                 if (!p)
                         return NULL;
 
-                d->formatted = TAKE_PTR(p);
+                d->formatted = p;
+                break;
+        }
+
+        case TABLE_MODE: {
+                char *p;
+
+                if (d->mode == MODE_INVALID)
+                        return table_ersatz_string(t);
+
+                p = new(char, 4 + 1);
+                if (!p)
+                        return NULL;
+
+                sprintf(p, "%04o", d->mode & 07777);
+                d->formatted = p;
                 break;
         }
 
         default:
-                assert_not_reached("Unexpected type?");
+                assert_not_reached();
         }
 
         return d->formatted;
@@ -1903,6 +2059,11 @@
         if (table_data_isempty(d))
                 return ansi_grey();
 
+        if (d->type == TABLE_FIELD)
+                return ansi_bright_blue();
+        if (d->type == TABLE_HEADER)
+                return ansi_underline();
+
         return NULL;
 }
 
@@ -1912,6 +2073,9 @@
         if (d->rgap_color)
                 return d->rgap_color;
 
+        if (d->type == TABLE_HEADER)
+                return ansi_underline();
+
         return NULL;
 }
 
@@ -2256,7 +2420,7 @@
 
                                                 /* Drop trailing white spaces of last column when no cosmetics is set. */
                                                 if (j == display_columns - 1 &&
-                                                    (!colors_enabled() || (!table_data_color(d) && row != t->data)) &&
+                                                    (!colors_enabled() || !table_data_color(d)) &&
                                                     (!urlify_enabled() || !d->url))
                                                         delete_trailing_chars(aligned, NULL);
 
@@ -2276,12 +2440,8 @@
                                         field = buffer;
                                 }
 
-                                if (colors_enabled()) {
-                                        if (gap_color)
-                                                fputs(gap_color, f);
-                                        else if (row == t->data) /* underline header line fully, including the column separator */
-                                                fputs(ansi_underline(), f);
-                                }
+                                if (colors_enabled() && gap_color)
+                                        fputs(gap_color, f);
 
                                 if (j > 0)
                                         fputc(' ', f); /* column separator left of cell */
@@ -2290,18 +2450,16 @@
                                         color = table_data_color(d);
 
                                         /* Undo gap color */
-                                        if (gap_color || (color && row == t->data))
+                                        if (gap_color)
                                                 fputs(ANSI_NORMAL, f);
 
                                         if (color)
                                                 fputs(color, f);
-                                        else if (gap_color && row == t->data) /* underline header line cell */
-                                                fputs(ansi_underline(), f);
                                 }
 
                                 fputs(field, f);
 
-                                if (colors_enabled() && (color || row == t->data))
+                                if (colors_enabled() && color)
                                         fputs(ANSI_NORMAL, f);
 
                                 gap_color = table_data_rgap_color(d);
@@ -2415,18 +2573,23 @@
 
         case TABLE_STRING:
         case TABLE_PATH:
+        case TABLE_PATH_BASENAME:
+        case TABLE_FIELD:
+        case TABLE_HEADER:
                 return json_variant_new_string(ret, d->string);
 
         case TABLE_STRV:
         case TABLE_STRV_WRAPPED:
                 return json_variant_new_array_strv(ret, d->strv);
 
+        case TABLE_BOOLEAN_CHECKMARK:
         case TABLE_BOOLEAN:
                 return json_variant_new_boolean(ret, d->boolean);
 
         case TABLE_TIMESTAMP:
         case TABLE_TIMESTAMP_UTC:
         case TABLE_TIMESTAMP_RELATIVE:
+        case TABLE_TIMESTAMP_DATE:
                 if (d->timestamp == USEC_INFINITY)
                         return json_variant_new_null(ret);
 
@@ -2434,6 +2597,7 @@
 
         case TABLE_TIMESPAN:
         case TABLE_TIMESPAN_MSEC:
+        case TABLE_TIMESPAN_DAY:
                 if (d->timespan == USEC_INFINITY)
                         return json_variant_new_null(ret);
 
@@ -2474,6 +2638,7 @@
                 return json_variant_new_unsigned(ret, d->uint32);
 
         case TABLE_UINT64:
+        case TABLE_UINT64_HEX:
                 return json_variant_new_unsigned(ret, d->uint64);
 
         case TABLE_PERCENT:
@@ -2491,15 +2656,11 @@
         case TABLE_IN6_ADDR:
                 return json_variant_new_array_bytes(ret, &d->address, FAMILY_ADDRESS_SIZE(AF_INET6));
 
-        case TABLE_ID128: {
-                char buf[SD_ID128_STRING_MAX];
-                return json_variant_new_string(ret, sd_id128_to_string(d->id128, buf));
-        }
+        case TABLE_ID128:
+                return json_variant_new_id128(ret, d->id128);
 
-        case TABLE_UUID: {
-                char buf[ID128_UUID_STRING_MAX];
-                return json_variant_new_string(ret, id128_to_uuid_string(d->id128, buf));
-        }
+        case TABLE_UUID:
+                return json_variant_new_uuid(ret, d->id128);
 
         case TABLE_UID:
                 if (!uid_is_valid(d->uid))
@@ -2525,6 +2686,12 @@
 
                 return json_variant_new_integer(ret, d->int_val);
 
+        case TABLE_MODE:
+                if (d->mode == MODE_INVALID)
+                        return json_variant_new_null(ret);
+
+                return json_variant_new_unsigned(ret, d->mode);
+
         default:
                 return -EINVAL;
         }
@@ -2546,15 +2713,47 @@
         return c;
 }
 
-int table_to_json(Table *t, JsonVariant **ret) {
+static int table_make_json_field_name(Table *t, TableData *d, char **ret) {
+        _cleanup_free_ char *mangled = NULL;
+        const char *n;
+
+        assert(t);
+        assert(d);
+        assert(ret);
+
+        if (IN_SET(d->type, TABLE_HEADER, TABLE_FIELD))
+                n = d->string;
+        else {
+                n = table_data_format(t, d, /* avoid_uppercasing= */ true, SIZE_MAX, NULL);
+                if (!n)
+                        return -ENOMEM;
+        }
+
+        mangled = string_to_json_field_name(n);
+        if (!mangled)
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(mangled);
+        return 0;
+}
+
+static const char *table_get_json_field_name(Table *t, size_t idx) {
+        assert(t);
+
+        return idx < t->n_json_fields ? t->json_fields[idx] : NULL;
+}
+
+static int table_to_json_regular(Table *t, JsonVariant **ret) {
         JsonVariant **rows = NULL, **elements = NULL;
         _cleanup_free_ size_t *sorted = NULL;
         size_t n_rows, display_columns;
         int r;
 
         assert(t);
+        assert(!t->vertical);
 
         /* Ensure we have no incomplete rows */
+        assert(t->n_columns > 0);
         assert(t->n_cells % t->n_columns == 0);
 
         n_rows = t->n_cells / t->n_columns;
@@ -2589,26 +2788,22 @@
 
         for (size_t j = 0; j < display_columns; j++) {
                 _cleanup_free_ char *mangled = NULL;
-                const char *formatted;
-                TableData *d;
+                const char *n;
+                size_t c;
 
-                assert_se(d = t->data[t->display_map ? t->display_map[j] : j]);
+                c = t->display_map ? t->display_map[j] : j;
 
-                /* Field names must be strings, hence format whatever we got here as a string first */
-                formatted = table_data_format(t, d, true, SIZE_MAX, NULL);
-                if (!formatted) {
-                        r = -ENOMEM;
-                        goto finish;
+                /* Use explicitly set JSON field name, if we have one. Otherwise mangle the column field value. */
+                n = table_get_json_field_name(t, c);
+                if (!n) {
+                        r = table_make_json_field_name(t, ASSERT_PTR(t->data[c]), &mangled);
+                        if (r < 0)
+                                goto finish;
+
+                        n = mangled;
                 }
 
-                /* Arbitrary strings suck as field names, try to mangle them into something more suitable hence */
-                mangled = string_to_json_field_name(formatted);
-                if (!mangled) {
-                        r = -ENOMEM;
-                        goto finish;
-                }
-
-                r = json_variant_new_string(elements + j*2, mangled);
+                r = json_variant_new_string(elements + j*2, n);
                 if (r < 0)
                         goto finish;
         }
@@ -2662,6 +2857,70 @@
         return r;
 }
 
+static int table_to_json_vertical(Table *t, JsonVariant **ret) {
+        JsonVariant **elements = NULL;
+        size_t n_elements = 0;
+        int r;
+
+        assert(t);
+        assert(t->vertical);
+
+        if (t->n_columns != 2)
+                return -EINVAL;
+
+        /* Ensure we have no incomplete rows */
+        assert(t->n_cells % t->n_columns == 0);
+
+        elements = new0(JsonVariant *, t->n_cells);
+        if (!elements) {
+                r = -ENOMEM;
+                goto finish;
+        }
+
+        for (size_t i = t->n_columns; i < t->n_cells; i++) {
+
+                if (i % t->n_columns == 0) {
+                        _cleanup_free_ char *mangled = NULL;
+                        const char *n;
+
+                        n = table_get_json_field_name(t, i / t->n_columns - 1);
+                        if (!n) {
+                                r = table_make_json_field_name(t, ASSERT_PTR(t->data[i]), &mangled);
+                                if (r < 0)
+                                        goto finish;
+
+                                n = mangled;
+                        }
+
+                        r = json_variant_new_string(elements + n_elements, n);
+                } else
+                        r = table_data_to_json(t->data[i], elements + n_elements);
+                if (r < 0)
+                        goto finish;
+
+                n_elements++;
+        }
+
+        r = json_variant_new_object(ret, elements, n_elements);
+
+finish:
+        if (elements) {
+                json_variant_unref_many(elements, n_elements);
+                free(elements);
+        }
+
+        return r;
+}
+
+int table_to_json(Table *t, JsonVariant **ret) {
+        assert(t);
+
+        if (t->vertical)
+                return table_to_json_vertical(t, ret);
+
+        return table_to_json_regular(t, ret);
+}
+
 int table_print_json(Table *t, FILE *f, JsonFormatFlags flags) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         int r;
@@ -2698,7 +2957,7 @@
          * the table header and logs about any error. */
 
         if (json_format_flags & (JSON_FORMAT_OFF|JSON_FORMAT_PRETTY|JSON_FORMAT_PRETTY_AUTO))
-                (void) pager_open(pager_flags);
+                pager_open(pager_flags);
 
         saved_header = t->header;
         t->header = show_header;
@@ -2709,3 +2968,30 @@
 
         return 0;
 }
+
+int table_set_json_field_name(Table *t, size_t idx, const char *name) {
+        int r;
+
+        assert(t);
+
+        if (name) {
+                size_t m;
+
+                m = MAX(idx + 1, t->n_json_fields);
+                if (!GREEDY_REALLOC0(t->json_fields, m))
+                        return -ENOMEM;
+
+                r = free_and_strdup(t->json_fields + idx, name);
+                if (r < 0)
+                        return r;
+
+                t->n_json_fields = m;
+                return r;
+        } else {
+                if (idx >= t->n_json_fields)
+                        return 0;
+
+                t->json_fields[idx] = mfree(t->json_fields[idx]);
+                return 1;
+        }
+}
diff --git a/src/shared/format-table.h b/src/shared/format-table.h
index 57f167f..97255f5 100644
--- a/src/shared/format-table.h
+++ b/src/shared/format-table.h
@@ -12,15 +12,21 @@
 typedef enum TableDataType {
         TABLE_EMPTY,
         TABLE_STRING,
+        TABLE_HEADER,              /* in regular mode: the cells in the first row, that carry the column names */
+        TABLE_FIELD,               /* in vertical mode: the cells in the first column, that carry the field names */
         TABLE_STRV,
         TABLE_STRV_WRAPPED,
         TABLE_PATH,
+        TABLE_PATH_BASENAME,       /* like TABLE_PATH, but display only last path element (i.e. the "basename") in regular output */
         TABLE_BOOLEAN,
+        TABLE_BOOLEAN_CHECKMARK,
         TABLE_TIMESTAMP,
         TABLE_TIMESTAMP_UTC,
         TABLE_TIMESTAMP_RELATIVE,
+        TABLE_TIMESTAMP_DATE,
         TABLE_TIMESPAN,
         TABLE_TIMESPAN_MSEC,
+        TABLE_TIMESPAN_DAY,
         TABLE_SIZE,
         TABLE_BPS,
         TABLE_INT,
@@ -33,6 +39,7 @@
         TABLE_UINT16,
         TABLE_UINT32,
         TABLE_UINT64,
+        TABLE_UINT64_HEX,
         TABLE_PERCENT,
         TABLE_IFINDEX,
         TABLE_IN_ADDR,  /* Takes a union in_addr_union (or a struct in_addr) */
@@ -43,6 +50,7 @@
         TABLE_GID,
         TABLE_PID,
         TABLE_SIGNAL,
+        TABLE_MODE,     /* as in UNIX file mode (mode_t), in typical octal output */
         _TABLE_DATA_TYPE_MAX,
 
         /* The following are not really data types, but commands for table_add_cell_many() to make changes to
@@ -61,12 +69,21 @@
         _TABLE_DATA_TYPE_INVALID = -EINVAL,
 } TableDataType;
 
+typedef enum TableErsatz {
+        TABLE_ERSATZ_EMPTY,
+        TABLE_ERSATZ_DASH,
+        TABLE_ERSATZ_UNSET,
+        TABLE_ERSATZ_NA,
+        _TABLE_ERSATZ_MAX,
+} TableErsatz;
+
 typedef struct Table Table;
 typedef struct TableCell TableCell;
 
 Table *table_new_internal(const char *first_header, ...) _sentinel_;
 #define table_new(...) table_new_internal(__VA_ARGS__, NULL)
 Table *table_new_raw(size_t n_columns);
+Table *table_new_vertical(void);
 Table *table_unref(Table *t);
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Table*, table_unref);
@@ -75,7 +92,8 @@
 static inline int table_add_cell(Table *t, TableCell **ret_cell, TableDataType type, const void *data) {
         return table_add_cell_full(t, ret_cell, type, data, SIZE_MAX, SIZE_MAX, UINT_MAX, UINT_MAX, UINT_MAX);
 }
-int table_add_cell_stringf(Table *t, TableCell **ret_cell, const char *format, ...) _printf_(3, 4);
+int table_add_cell_stringf_full(Table *t, TableCell **ret_cell, TableDataType type, const char *format, ...) _printf_(4, 5);
+#define table_add_cell_stringf(t, ret_cell, format, ...) table_add_cell_stringf_full(t, ret_cell, TABLE_STRING, format, __VA_ARGS__)
 
 int table_fill_empty(Table *t, size_t until_column);
 
@@ -99,13 +117,14 @@
 void table_set_header(Table *table, bool b);
 void table_set_width(Table *t, size_t width);
 void table_set_cell_height_max(Table *t, size_t height);
-int table_set_empty_string(Table *t, const char *empty);
+void table_set_ersatz_string(Table *t, TableErsatz ersatz);
 int table_set_display_internal(Table *t, size_t first_column, ...);
 #define table_set_display(...) table_set_display_internal(__VA_ARGS__, SIZE_MAX)
 int table_set_sort_internal(Table *t, size_t first_column, ...);
 #define table_set_sort(...) table_set_sort_internal(__VA_ARGS__, SIZE_MAX)
 int table_set_reverse(Table *t, size_t column, bool b);
-int table_hide_column_from_display(Table *t, size_t column);
+int table_hide_column_from_display_internal(Table *t, ...);
+#define table_hide_column_from_display(t, ...) table_hide_column_from_display_internal(t, __VA_ARGS__, (size_t) -1)
 
 int table_print(Table *t, FILE *f);
 int table_format(Table *t, char **ret);
@@ -127,8 +146,10 @@
 
 int table_print_with_pager(Table *t, JsonFormatFlags json_format_flags, PagerFlags pager_flags, bool show_header);
 
+int table_set_json_field_name(Table *t, size_t idx, const char *name);
+
 #define table_log_add_error(r) \
-        log_error_errno(r, "Failed to add cell(s) to table: %m")
+        log_error_errno(r, "Failed to add cells to table: %m")
 
 #define table_log_print_error(r) \
         log_error_errno(r, "Failed to print table: %m")
diff --git a/src/shared/fstab-util.c b/src/shared/fstab-util.c
index f683f05..164e71a 100644
--- a/src/shared/fstab-util.c
+++ b/src/shared/fstab-util.c
@@ -7,6 +7,7 @@
 #include "alloc-util.h"
 #include "device-nodes.h"
 #include "fstab-util.h"
+#include "initrd-util.h"
 #include "macro.h"
 #include "mount-util.h"
 #include "nulstr-util.h"
@@ -87,7 +88,7 @@
                 char ***ret_values,
                 char **ret_filtered) {
 
-        const char *name, *namefound = NULL, *x;
+        const char *namefound = NULL, *x;
         _cleanup_strv_free_ char **stor = NULL, **values = NULL;
         _cleanup_free_ char *value = NULL, **filtered = NULL;
         int r;
@@ -126,17 +127,17 @@
                                 if (!x)
                                         continue;
                                 /* Match name, but when ret_values, only when followed by assignment. */
-                                if (*x == '=' || (!ret_values && *x == '\0'))
+                                if (*x == '=' || (!ret_values && *x == '\0')) {
+                                        /* Keep the last occurrence found */
+                                        namefound = name;
                                         goto found;
+                                }
                         }
 
                         *t = *s;
                         t++;
                         continue;
                 found:
-                        /* Keep the last occurrence found */
-                        namefound = name;
-
                         if (ret_value || ret_values) {
                                 assert(IN_SET(*x, '=', '\0'));
 
diff --git a/src/shared/generator.c b/src/shared/generator.c
index 3967edf..64f4a27 100644
--- a/src/shared/generator.c
+++ b/src/shared/generator.c
@@ -11,62 +11,159 @@
 #include "fileio.h"
 #include "fstab-util.h"
 #include "generator.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "macro.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path-util.h"
+#include "process-util.h"
 #include "special.h"
 #include "specifier.h"
 #include "string-util.h"
 #include "time-util.h"
 #include "unit-name.h"
-#include "util.h"
 
 int generator_open_unit_file(
-                const char *dest,
+                const char *dir,
                 const char *source,
-                const char *name,
-                FILE **file) {
+                const char *fn,
+                FILE **ret) {
 
-        const char *unit;
+        _cleanup_free_ char *p = NULL;
         FILE *f;
         int r;
 
-        unit = prefix_roota(dest, name);
+        assert(dir);
+        assert(fn);
+        assert(ret);
 
-        r = fopen_unlocked(unit, "wxe", &f);
+        p = path_join(dir, fn);
+        if (!p)
+                return log_oom();
+
+        r = fopen_unlocked(p, "wxe", &f);
         if (r < 0) {
                 if (source && r == -EEXIST)
                         return log_error_errno(r,
-                                               "Failed to create unit file %s, as it already exists. Duplicate entry in %s?",
-                                               unit, source);
-                else
-                        return log_error_errno(r,
-                                               "Failed to create unit file %s: %m",
-                                               unit);
+                                               "Failed to create unit file '%s', as it already exists. Duplicate entry in '%s'?",
+                                               p, source);
+
+                return log_error_errno(r, "Failed to create unit file '%s': %m", p);
         }
 
         fprintf(f,
                 "# Automatically generated by %s\n\n",
                 program_invocation_short_name);
 
-        *file = f;
+        *ret = f;
         return 0;
 }
 
-int generator_add_symlink(const char *dir, const char *dst, const char *dep_type, const char *src) {
-        /* Adds a symlink from <dst>.<dep_type>/ to <src> (if src is absolute)
-         * or ../<src> (otherwise). */
 
-        const char *from, *to;
+int generator_add_symlink_full(
+                const char *dir,
+                const char *dst,
+                const char *dep_type,
+                const char *src,
+                const char *instance) {
 
-        from = path_is_absolute(src) ? src : strjoina("../", src);
-        to = strjoina(dir, "/", dst, ".", dep_type, "/", basename(src));
+        _cleanup_free_ char *dn = NULL, *fn = NULL, *instantiated = NULL, *to = NULL, *from = NULL;
+        int r;
 
-        mkdir_parents_label(to, 0755);
-        if (symlink(from, to) < 0)
-                if (errno != EEXIST)
-                        return log_error_errno(errno, "Failed to create symlink \"%s\": %m", to);
+        assert(dir);
+        assert(dst);
+        assert(dep_type);
+        assert(src);
+
+        /* Adds a symlink from <dst>.<dep_type>/ to <src> (if src is absolute) or ../<src> (otherwise). If
+         * <instance> is specified, then <src> must be a template unit name, and we'll instantiate it. */
+
+        r = path_extract_directory(src, &dn);
+        if (r < 0 && r != -EDESTADDRREQ) /* EDESTADDRREQ → just a file name was passed */
+                return log_error_errno(r, "Failed to extract directory name from '%s': %m", src);
+
+        r = path_extract_filename(src, &fn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract file name from '%s': %m", src);
+        if (r == O_DIRECTORY)
+                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Expected path to regular file name, but got '%s', refusing.", src);
+
+        if (instance) {
+                r = unit_name_replace_instance(fn, instance, &instantiated);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to instantiate '%s' for '%s': %m", fn, instance);
+        }
+
+        from = path_join(dn ?: "..", fn);
+        if (!from)
+                return log_oom();
+
+        to = strjoin(dir, "/", dst, ".", dep_type, "/", instantiated ?: fn);
+        if (!to)
+                return log_oom();
+
+        (void) mkdir_parents_label(to, 0755);
+
+        if (symlink(from, to) < 0 && errno != EEXIST)
+                return log_error_errno(errno, "Failed to create symlink \"%s\": %m", to);
+
+        return 0;
+}
+
+static int generator_add_ordering(
+                const char *dir,
+                const char *src,
+                const char *order,
+                const char *dst,
+                const char *instance) {
+
+        _cleanup_free_ char *instantiated = NULL, *p = NULL, *fn = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        const char *to;
+        int r;
+
+        assert(dir);
+        assert(src);
+        assert(order);
+        assert(dst);
+
+        /* Adds in an explicit ordering dependency of type <order> from <src> to <dst>. If <instance> is
+         * specified, it is inserted into <dst>. */
+
+        if (instance) {
+                r = unit_name_replace_instance(dst, instance, &instantiated);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to instantiate '%s' for '%s': %m", dst, instance);
+
+                to = instantiated;
+        } else
+                to = dst;
+
+        fn = strjoin(src, ".d/50-order-", to, ".conf");
+        if (!fn)
+                return log_oom();
+
+        p = path_join(dir, fn);
+        if (!p)
+                return log_oom();
+
+        (void) mkdir_parents_label(p, 0755);
+
+        r = fopen_unlocked(p, "wxe", &f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to create '%s': %m", p);
+
+        fprintf(f,
+                "# Automatically generated by %s\n\n"
+                "[Unit]\n"
+                "%s=%s\n",
+                program_invocation_short_name,
+                order,
+                to);
+
+        r = fflush_and_check(f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write drop-in '%s': %m", p);
 
         return 0;
 }
@@ -164,7 +261,7 @@
         }
 
         if (!isempty(fstype) && !streq(fstype, "auto")) {
-                r = fsck_exists(fstype);
+                r = fsck_exists_for_fstype(fstype);
                 if (r < 0)
                         log_warning_errno(r, "Checking was requested for %s, but couldn't detect if fsck.%s may be used, proceeding: %m", what, fstype);
                 else if (r == 0) {
@@ -172,6 +269,15 @@
                         log_debug("Checking was requested for %s, but fsck.%s does not exist.", what, fstype);
                         return 0;
                 }
+        } else {
+                r = fsck_exists();
+                if (r < 0)
+                        log_warning_errno(r, "Checking was requested for %s, but couldn't detect if the fsck command may be used, proceeding: %m", what);
+                else if (r == 0) {
+                        /* treat missing fsck as essentially OK */
+                        log_debug("Checking was requested for %s, but the fsck command does not exist.", what);
+                        return 0;
+                }
         }
 
         if (path_equal(where, "/")) {
@@ -351,8 +457,8 @@
                 const char *what) {
 
         _cleanup_free_ char *node = NULL, *unit = NULL, *escaped = NULL, *where_unit = NULL;
+        _cleanup_free_ char *unit_file = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        const char *unit_file;
         int r;
 
         node = fstab_node_to_udev_node(what);
@@ -370,7 +476,10 @@
                 return log_error_errno(r, "Failed to make unit instance name from path \"%s\": %m",
                                        node);
 
-        unit_file = prefix_roota(dir, unit);
+        unit_file = path_join(dir, unit);
+        if (!unit_file)
+                return log_oom();
+
         log_debug("Creating %s", unit_file);
 
         escaped = cescape(node);
@@ -420,9 +529,8 @@
                 const char *where,
                 const char *type) {
 
-        _cleanup_free_ char *node = NULL, *unit = NULL, *escaped = NULL, *where_unit = NULL;
+        _cleanup_free_ char *node = NULL, *unit = NULL, *unit_file = NULL, *escaped = NULL, *where_unit = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        const char *unit_file;
         int r;
 
         node = fstab_node_to_udev_node(what);
@@ -445,9 +553,20 @@
                 return log_error_errno(r, "Failed to make unit instance name from path \"%s\": %m",
                                        node);
 
-        unit_file = prefix_roota(dir, unit);
+        unit_file = path_join(dir, unit);
+        if (!unit_file)
+                return log_oom();
+
         log_debug("Creating %s", unit_file);
 
+        const char *fsck_unit;
+        if (in_initrd() && path_equal(where, "/sysroot"))
+                fsck_unit = SPECIAL_FSCK_ROOT_SERVICE;
+        else if (in_initrd() && path_equal(where, "/sysusr/usr"))
+                fsck_unit = SPECIAL_FSCK_USR_SERVICE;
+        else
+                fsck_unit = "systemd-fsck@%i.service";
+
         escaped = cescape(node);
         if (!escaped)
                 return log_oom();
@@ -473,7 +592,7 @@
                 "After=%%i.device\n"
                 /* fsck might or might not be used, so let's be safe and order
                  * ourselves before both systemd-fsck@.service and the mount unit. */
-                "Before=shutdown.target systemd-fsck@%%i.service %s\n"
+                "Before=shutdown.target %s %s\n"
                 "\n"
                 "[Service]\n"
                 "Type=oneshot\n"
@@ -481,6 +600,7 @@
                 "ExecStart="SYSTEMD_MAKEFS_PATH " %s %s\n"
                 "TimeoutSec=0\n",
                 program_invocation_short_name,
+                fsck_unit,
                 where_unit,
                 type,
                 escaped);
@@ -498,64 +618,73 @@
                 const char *where,
                 const char *target) {
 
-        _cleanup_free_ char *unit = NULL, *escaped = NULL, *where_unit = NULL;
-        _cleanup_fclose_ FILE *f = NULL;
-        const char *unit_file;
+        const char *growfs_unit, *growfs_unit_path;
+        _cleanup_free_ char *where_unit = NULL, *instance = NULL;
         int r;
 
         assert(dir);
         assert(where);
 
-        escaped = cescape(where);
-        if (!escaped)
-                return log_oom();
-
-        r = unit_name_from_path_instance("systemd-growfs", where, ".service", &unit);
+        r = unit_name_from_path(where, ".mount", &where_unit);
         if (r < 0)
-                return log_error_errno(r, "Failed to make unit instance name from path \"%s\": %m",
-                                       where);
+                return log_error_errno(r, "Failed to make unit name from path '%s': %m", where);
+
+        if (empty_or_root(where)) {
+                growfs_unit = SPECIAL_GROWFS_ROOT_SERVICE;
+                growfs_unit_path = SYSTEM_DATA_UNIT_DIR "/" SPECIAL_GROWFS_ROOT_SERVICE;
+        } else {
+                growfs_unit = SPECIAL_GROWFS_SERVICE;
+                growfs_unit_path = SYSTEM_DATA_UNIT_DIR "/" SPECIAL_GROWFS_SERVICE;
+
+                r = unit_name_path_escape(where, &instance);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to escape path '%s': %m", where);
+        }
+
+        if (target) {
+                r = generator_add_ordering(dir, target, "After", growfs_unit, instance);
+                if (r < 0)
+                        return r;
+        }
+
+        return generator_add_symlink_full(dir, where_unit, "wants", growfs_unit_path, instance);
+}
+
+int generator_hook_up_pcrfs(
+                const char *dir,
+                const char *where,
+                const char *target) {
+
+        const char *pcrfs_unit, *pcrfs_unit_path;
+        _cleanup_free_ char *where_unit = NULL, *instance = NULL;
+        int r;
+
+        assert(dir);
+        assert(where);
 
         r = unit_name_from_path(where, ".mount", &where_unit);
         if (r < 0)
-                return log_error_errno(r, "Failed to make unit name from path \"%s\": %m",
-                                       where);
+                return log_error_errno(r, "Failed to make unit name from path '%s': %m", where);
 
-        unit_file = prefix_roota(dir, unit);
-        log_debug("Creating %s", unit_file);
+        if (empty_or_root(where)) {
+                pcrfs_unit = SPECIAL_PCRFS_ROOT_SERVICE;
+                pcrfs_unit_path = SYSTEM_DATA_UNIT_DIR "/" SPECIAL_PCRFS_ROOT_SERVICE;
+        } else {
+                pcrfs_unit = SPECIAL_PCRFS_SERVICE;
+                pcrfs_unit_path = SYSTEM_DATA_UNIT_DIR "/" SPECIAL_PCRFS_SERVICE;
 
-        f = fopen(unit_file, "wxe");
-        if (!f)
-                return log_error_errno(errno, "Failed to create unit file %s: %m",
-                                       unit_file);
+                r = unit_name_path_escape(where, &instance);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to escape path '%s': %m", where);
+        }
 
-        fprintf(f,
-                "# Automatically generated by %s\n\n"
-                "[Unit]\n"
-                "Description=Grow File System on %%f\n"
-                "Documentation=man:systemd-growfs@.service(8)\n"
-                "DefaultDependencies=no\n"
-                "BindsTo=%%i.mount\n"
-                "Conflicts=shutdown.target\n"
-                "After=%%i.mount\n"
-                "Before=shutdown.target%s%s\n",
-                program_invocation_short_name,
-                target ? " " : "",
-                strempty(target));
+        if (target) {
+                r = generator_add_ordering(dir, target, "After", pcrfs_unit, instance);
+                if (r < 0)
+                        return r;
+        }
 
-        if (empty_or_root(where)) /* Make sure the root fs is actually writable before we resize it */
-                fprintf(f,
-                        "After=systemd-remount-fs.service\n");
-
-        fprintf(f,
-                "\n"
-                "[Service]\n"
-                "Type=oneshot\n"
-                "RemainAfterExit=yes\n"
-                "ExecStart="SYSTEMD_GROWFS_PATH " %s\n"
-                "TimeoutSec=0\n",
-                escaped);
-
-        return generator_add_symlink(dir, where_unit, "wants", unit);
+        return generator_add_symlink_full(dir, where_unit, "wants", pcrfs_unit_path, instance);
 }
 
 int generator_enable_remount_fs_service(const char *dir) {
@@ -616,10 +745,10 @@
                 FILE *f,
                 const char *name,
                 const char *what,
-                const char *password,
+                const char *key_file,
                 const char *options) {
 
-        _cleanup_free_ char *name_escaped = NULL, *what_escaped = NULL, *password_escaped = NULL, *options_escaped = NULL;
+        _cleanup_free_ char *name_escaped = NULL, *what_escaped = NULL, *key_file_escaped = NULL, *options_escaped = NULL;
 
         assert(f);
         assert(name);
@@ -633,9 +762,9 @@
         if (!what_escaped)
                 return log_oom();
 
-        if (password) {
-                password_escaped = specifier_escape(password);
-                if (!password_escaped)
+        if (key_file) {
+                key_file_escaped = specifier_escape(key_file);
+                if (!key_file_escaped)
                         return log_oom();
         }
 
@@ -655,7 +784,7 @@
                 "OOMScoreAdjust=500\n"    /* Unlocking can allocate a lot of memory if Argon2 is used */
                 "ExecStart=" SYSTEMD_CRYPTSETUP_PATH " attach '%s' '%s' '%s' '%s'\n"
                 "ExecStop=" SYSTEMD_CRYPTSETUP_PATH " detach '%s'\n",
-                name_escaped, what_escaped, strempty(password_escaped), strempty(options_escaped),
+                name_escaped, what_escaped, strempty(key_file_escaped), strempty(options_escaped),
                 name_escaped);
 
         return 0;
@@ -737,11 +866,15 @@
 }
 
 void log_setup_generator(void) {
-        /* Disable talking to syslog/journal (i.e. the two IPC-based loggers) if we run in system context. */
-        if (cg_pid_get_owner_uid(0, NULL) == -ENXIO /* not running in a per-user slice */)
-                log_set_prohibit_ipc(true);
+        if (invoked_by_systemd()) {
+                /* Disable talking to syslog/journal (i.e. the two IPC-based loggers) if we run in system context. */
+                if (cg_pid_get_owner_uid(0, NULL) == -ENXIO /* not running in a per-user slice */)
+                        log_set_prohibit_ipc(true);
 
-        log_set_target(LOG_TARGET_JOURNAL_OR_KMSG); /* This effectively means: journal for per-user generators, kmsg otherwise */
+                /* This effectively means: journal for per-user generators, kmsg otherwise */
+                log_set_target(LOG_TARGET_JOURNAL_OR_KMSG);
+        }
+
         log_parse_environment();
         (void) log_open();
 }
diff --git a/src/shared/generator.h b/src/shared/generator.h
index bd768da..111900f 100644
--- a/src/shared/generator.h
+++ b/src/shared/generator.h
@@ -3,6 +3,7 @@
 
 #include <stdio.h>
 
+#include "macro.h"
 #include "main-func.h"
 
 int generator_open_unit_file(
@@ -11,7 +12,11 @@
         const char *name,
         FILE **file);
 
-int generator_add_symlink(const char *dir, const char *dst, const char *dep_type, const char *src);
+int generator_add_symlink_full(const char *dir, const char *dst, const char *dep_type, const char *src, const char *instance);
+
+static inline int generator_add_symlink(const char *dir, const char *dst, const char *dep_type, const char *src) {
+        return generator_add_symlink_full(dir, dst, dep_type, src, NULL);
+}
 
 int generator_write_fsck_deps(
         FILE *f,
@@ -76,6 +81,10 @@
         const char *dir,
         const char *where,
         const char *target);
+int generator_hook_up_pcrfs(
+        const char *dir,
+        const char *where,
+        const char *target);
 
 int generator_enable_remount_fs_service(const char *dir);
 
@@ -86,11 +95,11 @@
         _DEFINE_MAIN_FUNCTION(                                          \
                 ({                                                      \
                         log_setup_generator();                          \
-                        if (argc > 1 && argc != 4)                      \
+                        if (!IN_SET(argc, 2, 4))                        \
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), \
-                                                       "This program takes zero or three arguments."); \
+                                                       "This program takes one or three arguments."); \
                 }),                                                     \
-                impl(argc > 1 ? argv[1] : "/tmp",                       \
-                     argc > 1 ? argv[2] : "/tmp",                       \
-                     argc > 1 ? argv[3] : "/tmp"),                      \
+                impl(argv[1],                                           \
+                     argv[argc == 4 ? 2 : 1],                           \
+                     argv[argc == 4 ? 3 : 1]),                          \
                 r < 0 ? EXIT_FAILURE : EXIT_SUCCESS)
diff --git a/src/shared/gpt.c b/src/shared/gpt.c
index 882d11c..3e1a385 100644
--- a/src/shared/gpt.c
+++ b/src/shared/gpt.c
@@ -1,77 +1,201 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "gpt.h"
+#include "string-table.h"
 #include "string-util.h"
 #include "utf8.h"
 
+/* Gently push people towards defining GPT type UUIDs for all architectures we know */
+#if !defined(SD_GPT_ROOT_NATIVE) ||                                        \
+        !defined(SD_GPT_ROOT_NATIVE_VERITY) ||                             \
+        !defined(SD_GPT_ROOT_NATIVE_VERITY_SIG) ||                         \
+        !defined(SD_GPT_USR_NATIVE) ||                                     \
+        !defined(SD_GPT_USR_NATIVE_VERITY) ||                              \
+        !defined(SD_GPT_USR_NATIVE_VERITY_SIG)
+#pragma message "Please define GPT partition types for your architecture."
+#endif
+
+bool partition_designator_is_versioned(PartitionDesignator d) {
+        /* Returns true for all designators where we want to support a concept of "versioning", i.e. which
+         * likely contain software binaries (or hashes thereof) that make sense to be versioned as a
+         * whole. We use this check to automatically pick the newest version of these partitions, by version
+         * comparing the partition labels. */
+
+        return IN_SET(d,
+                      PARTITION_ROOT,
+                      PARTITION_USR,
+                      PARTITION_ROOT_VERITY,
+                      PARTITION_USR_VERITY,
+                      PARTITION_ROOT_VERITY_SIG,
+                      PARTITION_USR_VERITY_SIG);
+}
+
+PartitionDesignator partition_verity_of(PartitionDesignator p) {
+        switch (p) {
+
+        case PARTITION_ROOT:
+                return PARTITION_ROOT_VERITY;
+
+        case PARTITION_USR:
+                return PARTITION_USR_VERITY;
+
+        default:
+                return _PARTITION_DESIGNATOR_INVALID;
+        }
+}
+
+PartitionDesignator partition_verity_sig_of(PartitionDesignator p) {
+        switch (p) {
+
+        case PARTITION_ROOT:
+                return PARTITION_ROOT_VERITY_SIG;
+
+        case PARTITION_USR:
+                return PARTITION_USR_VERITY_SIG;
+
+        default:
+                return _PARTITION_DESIGNATOR_INVALID;
+        }
+}
+
+PartitionDesignator partition_verity_to_data(PartitionDesignator d) {
+        switch (d) {
+
+        case PARTITION_ROOT_VERITY:
+                return PARTITION_ROOT;
+
+        case PARTITION_USR_VERITY:
+                return PARTITION_USR;
+
+        default:
+                return _PARTITION_DESIGNATOR_INVALID;
+        }
+}
+
+PartitionDesignator partition_verity_sig_to_data(PartitionDesignator d) {
+        switch (d) {
+
+        case PARTITION_ROOT_VERITY_SIG:
+                return PARTITION_ROOT;
+
+        case PARTITION_USR_VERITY_SIG:
+                return PARTITION_USR;
+
+        default:
+                return _PARTITION_DESIGNATOR_INVALID;
+        }
+}
+
+static const char *const partition_designator_table[_PARTITION_DESIGNATOR_MAX] = {
+        [PARTITION_ROOT]                      = "root",
+        [PARTITION_USR]                       = "usr",
+        [PARTITION_HOME]                      = "home",
+        [PARTITION_SRV]                       = "srv",
+        [PARTITION_ESP]                       = "esp",
+        [PARTITION_XBOOTLDR]                  = "xbootldr",
+        [PARTITION_SWAP]                      = "swap",
+        [PARTITION_ROOT_VERITY]               = "root-verity",
+        [PARTITION_USR_VERITY]                = "usr-verity",
+        [PARTITION_ROOT_VERITY_SIG]           = "root-verity-sig",
+        [PARTITION_USR_VERITY_SIG]            = "usr-verity-sig",
+        [PARTITION_TMP]                       = "tmp",
+        [PARTITION_VAR]                       = "var",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(partition_designator, PartitionDesignator);
+
+static const char *const partition_mountpoint_table[_PARTITION_DESIGNATOR_MAX] = {
+        [PARTITION_ROOT]                      = "/\0",
+        [PARTITION_USR]                       = "/usr\0",
+        [PARTITION_HOME]                      = "/home\0",
+        [PARTITION_SRV]                       = "/srv\0",
+        [PARTITION_ESP]                       = "/efi\0/boot\0",
+        [PARTITION_XBOOTLDR]                  = "/boot\0",
+        [PARTITION_TMP]                       = "/var/tmp\0",
+        [PARTITION_VAR]                       = "/var\0",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(partition_mountpoint, PartitionDesignator);
+
+#define _GPT_ARCH_SEXTET(arch, name)                                   \
+        { SD_GPT_ROOT_##arch,              "root-" name,               ARCHITECTURE_##arch, .designator = PARTITION_ROOT            },  \
+        { SD_GPT_ROOT_##arch##_VERITY,     "root-" name "-verity",     ARCHITECTURE_##arch, .designator = PARTITION_ROOT_VERITY     },  \
+        { SD_GPT_ROOT_##arch##_VERITY_SIG, "root-" name "-verity-sig", ARCHITECTURE_##arch, .designator = PARTITION_ROOT_VERITY_SIG },  \
+        { SD_GPT_USR_##arch,               "usr-" name,                ARCHITECTURE_##arch, .designator = PARTITION_USR             },  \
+        { SD_GPT_USR_##arch##_VERITY,      "usr-" name "-verity",      ARCHITECTURE_##arch, .designator = PARTITION_USR_VERITY      },  \
+        { SD_GPT_USR_##arch##_VERITY_SIG,  "usr-" name "-verity-sig",  ARCHITECTURE_##arch, .designator = PARTITION_USR_VERITY_SIG  }
+
 const GptPartitionType gpt_partition_type_table[] = {
-        { GPT_ROOT_X86,              "root-x86"              },
-        { GPT_ROOT_X86_VERITY,       "root-x86-verity"       },
-        { GPT_ROOT_X86_64,           "root-x86-64"           },
-        { GPT_ROOT_X86_64_VERITY,    "root-x86-64-verity"    },
-        { GPT_ROOT_ARM,              "root-arm"              },
-        { GPT_ROOT_ARM_VERITY,       "root-arm-verity"       },
-        { GPT_ROOT_ARM_64,           "root-arm64"            },
-        { GPT_ROOT_ARM_64_VERITY,    "root-arm64-verity"     },
-        { GPT_ROOT_IA64,             "root-ia64"             },
-        { GPT_ROOT_IA64_VERITY,      "root-ia64-verity"      },
-        { GPT_ROOT_RISCV32,          "root-riscv32"          },
-        { GPT_ROOT_RISCV32_VERITY,   "root-riscv32-verity"   },
-        { GPT_ROOT_RISCV64,          "root-riscv64"          },
-        { GPT_ROOT_RISCV64_VERITY,   "root-riscv64-verity"   },
-#ifdef GPT_ROOT_NATIVE
-        { GPT_ROOT_NATIVE,           "root"                  },
-        { GPT_ROOT_NATIVE_VERITY,    "root-verity"           },
+        _GPT_ARCH_SEXTET(ALPHA,       "alpha"),
+        _GPT_ARCH_SEXTET(ARC,         "arc"),
+        _GPT_ARCH_SEXTET(ARM,         "arm"),
+        _GPT_ARCH_SEXTET(ARM64,       "arm64"),
+        _GPT_ARCH_SEXTET(IA64,        "ia64"),
+        _GPT_ARCH_SEXTET(LOONGARCH64, "loongarch64"),
+        _GPT_ARCH_SEXTET(MIPS_LE,     "mips-le"),
+        _GPT_ARCH_SEXTET(MIPS64_LE,   "mips64-le"),
+        _GPT_ARCH_SEXTET(PARISC,      "parisc"),
+        _GPT_ARCH_SEXTET(PPC,         "ppc"),
+        _GPT_ARCH_SEXTET(PPC64,       "ppc64"),
+        _GPT_ARCH_SEXTET(PPC64_LE,    "ppc64-le"),
+        _GPT_ARCH_SEXTET(RISCV32,     "riscv32"),
+        _GPT_ARCH_SEXTET(RISCV64,     "riscv64"),
+        _GPT_ARCH_SEXTET(S390,        "s390"),
+        _GPT_ARCH_SEXTET(S390X,       "s390x"),
+        _GPT_ARCH_SEXTET(TILEGX,      "tilegx"),
+        _GPT_ARCH_SEXTET(X86,         "x86"),
+        _GPT_ARCH_SEXTET(X86_64,      "x86-64"),
+#ifdef SD_GPT_ROOT_NATIVE
+        { SD_GPT_ROOT_NATIVE,            "root",            native_architecture(), .designator = PARTITION_ROOT            },
+        { SD_GPT_ROOT_NATIVE_VERITY,     "root-verity",     native_architecture(), .designator = PARTITION_ROOT_VERITY     },
+        { SD_GPT_ROOT_NATIVE_VERITY_SIG, "root-verity-sig", native_architecture(), .designator = PARTITION_ROOT_VERITY_SIG },
+        { SD_GPT_USR_NATIVE,             "usr",             native_architecture(), .designator = PARTITION_USR             },
+        { SD_GPT_USR_NATIVE_VERITY,      "usr-verity",      native_architecture(), .designator = PARTITION_USR_VERITY      },
+        { SD_GPT_USR_NATIVE_VERITY_SIG,  "usr-verity-sig",  native_architecture(), .designator = PARTITION_USR_VERITY_SIG  },
 #endif
-#ifdef GPT_ROOT_SECONDARY
-        { GPT_ROOT_SECONDARY,        "root-secondary"        },
-        { GPT_ROOT_SECONDARY_VERITY, "root-secondary-verity" },
+#ifdef SD_GPT_ROOT_SECONDARY
+        { SD_GPT_ROOT_NATIVE,            "root-secondary",            native_architecture(), .designator = PARTITION_ROOT            },
+        { SD_GPT_ROOT_NATIVE_VERITY,     "root-secondary-verity",     native_architecture(), .designator = PARTITION_ROOT_VERITY     },
+        { SD_GPT_ROOT_NATIVE_VERITY_SIG, "root-secondary-verity-sig", native_architecture(), .designator = PARTITION_ROOT_VERITY_SIG },
+        { SD_GPT_USR_NATIVE,             "usr-secondary",             native_architecture(), .designator = PARTITION_USR             },
+        { SD_GPT_USR_NATIVE_VERITY,      "usr-secondary-verity",      native_architecture(), .designator = PARTITION_USR_VERITY      },
+        { SD_GPT_USR_NATIVE_VERITY_SIG,  "usr-secondary-verity-sig",  native_architecture(), .designator = PARTITION_USR_VERITY_SIG  },
 #endif
-        { GPT_USR_X86,               "usr-x86"               },
-        { GPT_USR_X86_VERITY,        "usr-x86-verity"        },
-        { GPT_USR_X86_64,            "usr-x86-64"            },
-        { GPT_USR_X86_64_VERITY,     "usr-x86-64-verity"     },
-        { GPT_USR_ARM,               "usr-arm"               },
-        { GPT_USR_ARM_VERITY,        "usr-arm-verity"        },
-        { GPT_USR_ARM_64,            "usr-arm64"             },
-        { GPT_USR_ARM_64_VERITY,     "usr-arm64-verity"      },
-        { GPT_USR_IA64,              "usr-ia64"              },
-        { GPT_USR_IA64_VERITY,       "usr-ia64-verity"       },
-        { GPT_USR_RISCV32,           "usr-riscv32"           },
-        { GPT_USR_RISCV32_VERITY,    "usr-riscv32-verity"    },
-        { GPT_USR_RISCV64,           "usr-riscv64"           },
-        { GPT_USR_RISCV64_VERITY,    "usr-riscv64-verity"    },
-#ifdef GPT_USR_NATIVE
-        { GPT_USR_NATIVE,            "usr"                   },
-        { GPT_USR_NATIVE_VERITY,     "usr-verity"            },
-#endif
-#ifdef GPT_USR_SECONDARY
-        { GPT_USR_SECONDARY,         "usr-secondary"         },
-        { GPT_USR_SECONDARY_VERITY,  "usr-secondary-verity"  },
-#endif
-        { GPT_ESP,                   "esp"                   },
-        { GPT_XBOOTLDR,              "xbootldr"              },
-        { GPT_SWAP,                  "swap"                  },
-        { GPT_HOME,                  "home"                  },
-        { GPT_SRV,                   "srv"                   },
-        { GPT_VAR,                   "var"                   },
-        { GPT_TMP,                   "tmp"                   },
-        { GPT_USER_HOME,             "user-home"             },
-        { GPT_LINUX_GENERIC,         "linux-generic"         },
+
+        { SD_GPT_ESP,                    "esp",           _ARCHITECTURE_INVALID, .designator = PARTITION_ESP },
+        { SD_GPT_XBOOTLDR,               "xbootldr",      _ARCHITECTURE_INVALID, .designator = PARTITION_XBOOTLDR },
+        { SD_GPT_SWAP,                   "swap",          _ARCHITECTURE_INVALID, .designator = PARTITION_SWAP },
+        { SD_GPT_HOME,                   "home",          _ARCHITECTURE_INVALID, .designator = PARTITION_HOME },
+        { SD_GPT_SRV,                    "srv",           _ARCHITECTURE_INVALID, .designator = PARTITION_SRV },
+        { SD_GPT_VAR,                    "var",           _ARCHITECTURE_INVALID, .designator = PARTITION_VAR },
+        { SD_GPT_TMP,                    "tmp",           _ARCHITECTURE_INVALID, .designator = PARTITION_TMP },
+        { SD_GPT_USER_HOME,              "user-home",     _ARCHITECTURE_INVALID, .designator = _PARTITION_DESIGNATOR_INVALID },
+        { SD_GPT_LINUX_GENERIC,          "linux-generic", _ARCHITECTURE_INVALID, .designator = _PARTITION_DESIGNATOR_INVALID },
         {}
 };
 
-const char *gpt_partition_type_uuid_to_string(sd_id128_t id) {
+static const GptPartitionType *gpt_partition_type_find_by_uuid(sd_id128_t id) {
+
         for (size_t i = 0; i < ELEMENTSOF(gpt_partition_type_table) - 1; i++)
                 if (sd_id128_equal(id, gpt_partition_type_table[i].uuid))
-                        return gpt_partition_type_table[i].name;
+                        return gpt_partition_type_table + i;
 
         return NULL;
 }
 
+const char *gpt_partition_type_uuid_to_string(sd_id128_t id) {
+        const GptPartitionType *pt;
+
+        pt = gpt_partition_type_find_by_uuid(id);
+        if (!pt)
+                return NULL;
+
+        return pt->name;
+}
+
 const char *gpt_partition_type_uuid_to_string_harder(
                 sd_id128_t id,
-                char buffer[static ID128_UUID_STRING_MAX]) {
+                char buffer[static SD_ID128_UUID_STRING_MAX]) {
 
         const char *s;
 
@@ -81,20 +205,40 @@
         if (s)
                 return s;
 
-        return id128_to_uuid_string(id, buffer);
+        return sd_id128_to_uuid_string(id, buffer);
 }
 
-int gpt_partition_type_uuid_from_string(const char *s, sd_id128_t *ret) {
+int gpt_partition_type_from_string(const char *s, GptPartitionType *ret) {
+        sd_id128_t id;
+        int r;
+
         assert(s);
-        assert(ret);
 
         for (size_t i = 0; i < ELEMENTSOF(gpt_partition_type_table) - 1; i++)
                 if (streq(s, gpt_partition_type_table[i].name)) {
-                        *ret = gpt_partition_type_table[i].uuid;
+                        if (ret)
+                                *ret = gpt_partition_type_table[i];
                         return 0;
                 }
 
-        return sd_id128_from_string(s, ret);
+        r = sd_id128_from_string(s, &id);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = gpt_partition_type_from_uuid(id);
+
+        return 0;
+}
+
+Architecture gpt_partition_type_uuid_to_arch(sd_id128_t id) {
+        const GptPartitionType *pt;
+
+        pt = gpt_partition_type_find_by_uuid(id);
+        if (!pt)
+                return _ARCHITECTURE_INVALID;
+
+        return pt->arch;
 }
 
 int gpt_partition_label_valid(const char *s) {
@@ -107,84 +251,59 @@
         return char16_strlen(recoded) <= GPT_LABEL_MAX;
 }
 
-bool gpt_partition_type_is_root(sd_id128_t id) {
-        return sd_id128_in_set(id,
-                               GPT_ROOT_X86,
-                               GPT_ROOT_X86_64,
-                               GPT_ROOT_ARM,
-                               GPT_ROOT_ARM_64,
-                               GPT_ROOT_IA64,
-                               GPT_ROOT_RISCV32,
-                               GPT_ROOT_RISCV64);
+GptPartitionType gpt_partition_type_from_uuid(sd_id128_t id) {
+        const GptPartitionType *pt;
+
+        pt = gpt_partition_type_find_by_uuid(id);
+        if (pt)
+                return *pt;
+
+        return (GptPartitionType) {
+                .uuid = id,
+                .arch = _ARCHITECTURE_INVALID,
+                .designator = _PARTITION_DESIGNATOR_INVALID,
+        };
 }
 
-bool gpt_partition_type_is_root_verity(sd_id128_t id) {
-        return sd_id128_in_set(id,
-                               GPT_ROOT_X86_VERITY,
-                               GPT_ROOT_X86_64_VERITY,
-                               GPT_ROOT_ARM_VERITY,
-                               GPT_ROOT_ARM_64_VERITY,
-                               GPT_ROOT_IA64_VERITY,
-                               GPT_ROOT_RISCV32_VERITY,
-                               GPT_ROOT_RISCV64_VERITY);
+const char *gpt_partition_type_mountpoint_nulstr(GptPartitionType type) {
+        return partition_mountpoint_to_string(type.designator);
 }
 
-bool gpt_partition_type_is_usr(sd_id128_t id) {
-        return sd_id128_in_set(id,
-                               GPT_USR_X86,
-                               GPT_USR_X86_64,
-                               GPT_USR_ARM,
-                               GPT_USR_ARM_64,
-                               GPT_USR_IA64,
-                               GPT_USR_RISCV32,
-                               GPT_USR_RISCV64);
+bool gpt_partition_type_knows_read_only(GptPartitionType type) {
+        return IN_SET(type.designator,
+                      PARTITION_ROOT,
+                      PARTITION_USR,
+                      /* pretty much implied, but let's set the bit to make things really clear */
+                      PARTITION_ROOT_VERITY,
+                      PARTITION_USR_VERITY,
+                      PARTITION_HOME,
+                      PARTITION_SRV,
+                      PARTITION_VAR,
+                      PARTITION_TMP,
+                      PARTITION_XBOOTLDR);
 }
 
-bool gpt_partition_type_is_usr_verity(sd_id128_t id) {
-        return sd_id128_in_set(id,
-                               GPT_USR_X86_VERITY,
-                               GPT_USR_X86_64_VERITY,
-                               GPT_USR_ARM_VERITY,
-                               GPT_USR_ARM_64_VERITY,
-                               GPT_USR_IA64_VERITY,
-                               GPT_USR_RISCV32_VERITY,
-                               GPT_USR_RISCV64_VERITY);
+bool gpt_partition_type_knows_growfs(GptPartitionType type) {
+        return IN_SET(type.designator,
+                      PARTITION_ROOT,
+                      PARTITION_USR,
+                      PARTITION_HOME,
+                      PARTITION_SRV,
+                      PARTITION_VAR,
+                      PARTITION_TMP,
+                      PARTITION_XBOOTLDR);
 }
 
-bool gpt_partition_type_knows_read_only(sd_id128_t id) {
-        return gpt_partition_type_is_root(id) ||
-                gpt_partition_type_is_usr(id) ||
-                sd_id128_in_set(id,
-                                GPT_HOME,
-                                GPT_SRV,
-                                GPT_VAR,
-                                GPT_TMP,
-                                GPT_XBOOTLDR) ||
-                gpt_partition_type_is_root_verity(id) || /* pretty much implied, but let's set the bit to make things really clear */
-                gpt_partition_type_is_usr_verity(id);    /* ditto */
-}
-
-bool gpt_partition_type_knows_growfs(sd_id128_t id) {
-        return gpt_partition_type_is_root(id) ||
-                gpt_partition_type_is_usr(id) ||
-                sd_id128_in_set(id,
-                                GPT_HOME,
-                                GPT_SRV,
-                                GPT_VAR,
-                                GPT_TMP,
-                                GPT_XBOOTLDR);
-}
-
-bool gpt_partition_type_knows_no_auto(sd_id128_t id) {
-        return gpt_partition_type_is_root(id) ||
-                gpt_partition_type_is_root_verity(id) ||
-                gpt_partition_type_is_usr(id) ||
-                gpt_partition_type_is_usr_verity(id) ||
-                sd_id128_in_set(id,
-                                GPT_HOME,
-                                GPT_SRV,
-                                GPT_VAR,
-                                GPT_TMP,
-                                GPT_XBOOTLDR,
-                                GPT_SWAP);
+bool gpt_partition_type_knows_no_auto(GptPartitionType type) {
+        return IN_SET(type.designator,
+                      PARTITION_ROOT,
+                      PARTITION_ROOT_VERITY,
+                      PARTITION_USR,
+                      PARTITION_USR_VERITY,
+                      PARTITION_HOME,
+                      PARTITION_SRV,
+                      PARTITION_VAR,
+                      PARTITION_TMP,
+                      PARTITION_XBOOTLDR,
+                      PARTITION_SWAP);
 }
diff --git a/src/shared/gpt.h b/src/shared/gpt.h
index dc530ef..bebfbc6 100644
--- a/src/shared/gpt.h
+++ b/src/shared/gpt.h
@@ -1,143 +1,69 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <endian.h>
-
+#include "sd-gpt.h"
 #include "sd-id128.h"
 
+#include "architecture.h"
 #include "id128-util.h"
 
-/* We only support root disk discovery for x86, x86-64, Itanium and ARM for now, since EFI for anything else
- * doesn't really exist, and we only care for root partitions on the same disk as the EFI ESP. */
-
-#define GPT_ROOT_X86      SD_ID128_MAKE(44,47,95,40,f2,97,41,b2,9a,f7,d1,31,d5,f0,45,8a)
-#define GPT_ROOT_X86_64   SD_ID128_MAKE(4f,68,bc,e3,e8,cd,4d,b1,96,e7,fb,ca,f9,84,b7,09)
-#define GPT_ROOT_ARM      SD_ID128_MAKE(69,da,d7,10,2c,e4,4e,3c,b1,6c,21,a1,d4,9a,be,d3)
-#define GPT_ROOT_ARM_64   SD_ID128_MAKE(b9,21,b0,45,1d,f0,41,c3,af,44,4c,6f,28,0d,3f,ae)
-#define GPT_ROOT_IA64     SD_ID128_MAKE(99,3d,8d,3d,f8,0e,42,25,85,5a,9d,af,8e,d7,ea,97)
-#define GPT_ROOT_RISCV32  SD_ID128_MAKE(60,d5,a7,fe,8e,7d,43,5c,b7,14,3d,d8,16,21,44,e1)
-#define GPT_ROOT_RISCV64  SD_ID128_MAKE(72,ec,70,a6,cf,74,40,e6,bd,49,4b,da,08,e8,f2,24)
-#define GPT_USR_X86       SD_ID128_MAKE(75,25,0d,76,8c,c6,45,8e,bd,66,bd,47,cc,81,a8,12)
-#define GPT_USR_X86_64    SD_ID128_MAKE(84,84,68,0c,95,21,48,c6,9c,11,b0,72,06,56,f6,9e)
-#define GPT_USR_ARM       SD_ID128_MAKE(7d,03,59,a3,02,b3,4f,0a,86,5c,65,44,03,e7,06,25)
-#define GPT_USR_ARM_64    SD_ID128_MAKE(b0,e0,10,50,ee,5f,43,90,94,9a,91,01,b1,71,04,e9)
-#define GPT_USR_IA64      SD_ID128_MAKE(43,01,d2,a6,4e,3b,4b,2a,bb,94,9e,0b,2c,42,25,ea)
-#define GPT_USR_RISCV32   SD_ID128_MAKE(b9,33,fb,22,5c,3f,4f,91,af,90,e2,bb,0f,a5,07,02)
-#define GPT_USR_RISCV64   SD_ID128_MAKE(be,ae,c3,4b,84,42,43,9b,a4,0b,98,43,81,ed,09,7d)
-#define GPT_ESP           SD_ID128_MAKE(c1,2a,73,28,f8,1f,11,d2,ba,4b,00,a0,c9,3e,c9,3b)
-#define GPT_XBOOTLDR      SD_ID128_MAKE(bc,13,c2,ff,59,e6,42,62,a3,52,b2,75,fd,6f,71,72)
-#define GPT_SWAP          SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f)
-#define GPT_HOME          SD_ID128_MAKE(93,3a,c7,e1,2e,b4,4f,13,b8,44,0e,14,e2,ae,f9,15)
-#define GPT_SRV           SD_ID128_MAKE(3b,8f,84,25,20,e0,4f,3b,90,7f,1a,25,a7,6f,98,e8)
-#define GPT_VAR           SD_ID128_MAKE(4d,21,b0,16,b5,34,45,c2,a9,fb,5c,16,e0,91,fd,2d)
-#define GPT_TMP           SD_ID128_MAKE(7e,c6,f5,57,3b,c5,4a,ca,b2,93,16,ef,5d,f6,39,d1)
-#define GPT_USER_HOME     SD_ID128_MAKE(77,3f,91,ef,66,d4,49,b5,bd,83,d6,83,bf,40,ad,16)
-#define GPT_LINUX_GENERIC SD_ID128_MAKE(0f,c6,3d,af,84,83,47,72,8e,79,3d,69,d8,47,7d,e4)
-
-/* Verity partitions for the root partitions above (we only define them for the root and /usr partitions,
- * because only they are commonly read-only and hence suitable for verity). */
-#define GPT_ROOT_X86_VERITY    SD_ID128_MAKE(d1,3c,5d,3b,b5,d1,42,2a,b2,9f,94,54,fd,c8,9d,76)
-#define GPT_ROOT_X86_64_VERITY SD_ID128_MAKE(2c,73,57,ed,eb,d2,46,d9,ae,c1,23,d4,37,ec,2b,f5)
-#define GPT_ROOT_ARM_VERITY    SD_ID128_MAKE(73,86,cd,f2,20,3c,47,a9,a4,98,f2,ec,ce,45,a2,d6)
-#define GPT_ROOT_ARM_64_VERITY SD_ID128_MAKE(df,33,00,ce,d6,9f,4c,92,97,8c,9b,fb,0f,38,d8,20)
-#define GPT_ROOT_IA64_VERITY   SD_ID128_MAKE(86,ed,10,d5,b6,07,45,bb,89,57,d3,50,f2,3d,05,71)
-#define GPT_ROOT_RISCV32_VERITY SD_ID128_MAKE(ae,02,53,be,11,67,40,07,ac,68,43,92,6c,14,c5,de)
-#define GPT_ROOT_RISCV64_VERITY SD_ID128_MAKE(b6,ed,55,82,44,0b,42,09,b8,da,5f,f7,c4,19,ea,3d)
-#define GPT_USR_X86_VERITY     SD_ID128_MAKE(8f,46,1b,0d,14,ee,4e,81,9a,a9,04,9b,6f,b9,7a,bd)
-#define GPT_USR_X86_64_VERITY  SD_ID128_MAKE(77,ff,5f,63,e7,b6,46,33,ac,f4,15,65,b8,64,c0,e6)
-#define GPT_USR_ARM_VERITY     SD_ID128_MAKE(c2,15,d7,51,7b,cd,46,49,be,90,66,27,49,0a,4c,05)
-#define GPT_USR_ARM_64_VERITY  SD_ID128_MAKE(6e,11,a4,e7,fb,ca,4d,ed,b9,e9,e1,a5,12,bb,66,4e)
-#define GPT_USR_IA64_VERITY    SD_ID128_MAKE(6a,49,1e,03,3b,e7,45,45,8e,38,83,32,0e,0e,a8,80)
-#define GPT_USR_RISCV32_VERITY SD_ID128_MAKE(cb,1e,e4,e3,8c,d0,41,36,a0,a4,aa,61,a3,2e,87,30)
-#define GPT_USR_RISCV64_VERITY SD_ID128_MAKE(8f,10,56,be,9b,05,47,c4,81,d6,be,53,12,8e,5b,54)
-
-#if defined(__x86_64__)
-#  define GPT_ROOT_NATIVE GPT_ROOT_X86_64
-#  define GPT_ROOT_SECONDARY GPT_ROOT_X86
-#  define GPT_ROOT_NATIVE_VERITY GPT_ROOT_X86_64_VERITY
-#  define GPT_ROOT_SECONDARY_VERITY GPT_ROOT_X86_VERITY
-#  define GPT_USR_NATIVE GPT_USR_X86_64
-#  define GPT_USR_SECONDARY GPT_USR_X86
-#  define GPT_USR_NATIVE_VERITY GPT_USR_X86_64_VERITY
-#  define GPT_USR_SECONDARY_VERITY GPT_USR_X86_VERITY
-#elif defined(__i386__)
-#  define GPT_ROOT_NATIVE GPT_ROOT_X86
-#  define GPT_ROOT_NATIVE_VERITY GPT_ROOT_X86_VERITY
-#  define GPT_USR_NATIVE GPT_USR_X86
-#  define GPT_USR_NATIVE_VERITY GPT_USR_X86_VERITY
-#endif
-
-#if defined(__ia64__)
-#  define GPT_ROOT_NATIVE GPT_ROOT_IA64
-#  define GPT_ROOT_NATIVE_VERITY GPT_ROOT_IA64_VERITY
-#  define GPT_USR_NATIVE GPT_USR_IA64
-#  define GPT_USR_NATIVE_VERITY GPT_USR_IA64_VERITY
-#endif
-
-#if defined(__aarch64__) && (__BYTE_ORDER != __BIG_ENDIAN)
-#  define GPT_ROOT_NATIVE GPT_ROOT_ARM_64
-#  define GPT_ROOT_SECONDARY GPT_ROOT_ARM
-#  define GPT_ROOT_NATIVE_VERITY GPT_ROOT_ARM_64_VERITY
-#  define GPT_ROOT_SECONDARY_VERITY GPT_ROOT_ARM_VERITY
-#  define GPT_USR_NATIVE GPT_USR_ARM_64
-#  define GPT_USR_SECONDARY GPT_USR_ARM
-#  define GPT_USR_NATIVE_VERITY GPT_USR_ARM_64_VERITY
-#  define GPT_USR_SECONDARY_VERITY GPT_USR_ARM_VERITY
-#elif defined(__arm__) && (__BYTE_ORDER != __BIG_ENDIAN)
-#  define GPT_ROOT_NATIVE GPT_ROOT_ARM
-#  define GPT_ROOT_NATIVE_VERITY GPT_ROOT_ARM_VERITY
-#  define GPT_USR_NATIVE GPT_USR_ARM
-#  define GPT_USR_NATIVE_VERITY GPT_USR_ARM_VERITY
-#endif
-
-#if defined(__riscv)
-#if (__riscv_xlen == 32)
-#  define GPT_ROOT_NATIVE GPT_ROOT_RISCV32
-#  define GPT_ROOT_NATIVE_VERITY GPT_ROOT_RISCV32_VERITY
-#  define GPT_USR_NATIVE GPT_USR_RISCV32
-#  define GPT_USR_NATIVE_VERITY GPT_USR_RISCV32_VERITY
-#elif (__riscv_xlen == 64)
-#  define GPT_ROOT_NATIVE GPT_ROOT_RISCV64
-#  define GPT_ROOT_NATIVE_VERITY GPT_ROOT_RISCV64_VERITY
-#  define GPT_USR_NATIVE GPT_USR_RISCV64
-#  define GPT_USR_NATIVE_VERITY GPT_USR_RISCV64_VERITY
-#endif
-#endif
-
-#define GPT_FLAG_REQUIRED_PARTITION (1ULL << 0)
-#define GPT_FLAG_NO_BLOCK_IO_PROTOCOL (1ULL << 1)
-#define GPT_FLAG_LEGACY_BIOS_BOOTABLE (1ULL << 2)
-
-/* Flags we recognize on the root, usr, xbootldr, swap, home, srv, var, tmp partitions when doing
- * auto-discovery. These happen to be identical to what Microsoft defines for its own Basic Data Partitions,
- * but that's just because we saw no point in defining any other values here. */
-#define GPT_FLAG_READ_ONLY (1ULL << 60)
-#define GPT_FLAG_NO_AUTO   (1ULL << 63)
-#define GPT_FLAG_GROWFS    (1ULL << 59)
-
 /* maximum length of gpt label */
 #define GPT_LABEL_MAX 36
 
+typedef enum PartitionDesignator {
+        PARTITION_ROOT, /* Primary architecture */
+        PARTITION_USR,
+        PARTITION_HOME,
+        PARTITION_SRV,
+        PARTITION_ESP,
+        PARTITION_XBOOTLDR,
+        PARTITION_SWAP,
+        PARTITION_ROOT_VERITY, /* verity data for the PARTITION_ROOT partition */
+        PARTITION_USR_VERITY,
+        PARTITION_ROOT_VERITY_SIG, /* PKCS#7 signature for root hash for the PARTITION_ROOT partition */
+        PARTITION_USR_VERITY_SIG,
+        PARTITION_TMP,
+        PARTITION_VAR,
+        _PARTITION_DESIGNATOR_MAX,
+        _PARTITION_DESIGNATOR_INVALID = -EINVAL,
+} PartitionDesignator;
+
+bool partition_designator_is_versioned(PartitionDesignator d);
+
+PartitionDesignator partition_verity_of(PartitionDesignator p);
+PartitionDesignator partition_verity_sig_of(PartitionDesignator p);
+PartitionDesignator partition_verity_to_data(PartitionDesignator d);
+PartitionDesignator partition_verity_sig_to_data(PartitionDesignator d);
+
+const char* partition_designator_to_string(PartitionDesignator d) _const_;
+PartitionDesignator partition_designator_from_string(const char *name) _pure_;
+
 const char *gpt_partition_type_uuid_to_string(sd_id128_t id);
 const char *gpt_partition_type_uuid_to_string_harder(
                 sd_id128_t id,
-                char buffer[static ID128_UUID_STRING_MAX]);
-int gpt_partition_type_uuid_from_string(const char *s, sd_id128_t *ret);
+                char buffer[static SD_ID128_UUID_STRING_MAX]);
+
+#define GPT_PARTITION_TYPE_UUID_TO_STRING_HARDER(id) \
+        gpt_partition_type_uuid_to_string_harder((id), (char[SD_ID128_UUID_STRING_MAX]) {})
+
+Architecture gpt_partition_type_uuid_to_arch(sd_id128_t id);
 
 typedef struct GptPartitionType {
         sd_id128_t uuid;
         const char *name;
+        Architecture arch;
+        PartitionDesignator designator;
 } GptPartitionType;
 
 extern const GptPartitionType gpt_partition_type_table[];
 
 int gpt_partition_label_valid(const char *s);
 
-bool gpt_partition_type_is_root(sd_id128_t id);
-bool gpt_partition_type_is_root_verity(sd_id128_t id);
-bool gpt_partition_type_is_usr(sd_id128_t id);
-bool gpt_partition_type_is_usr_verity(sd_id128_t id);
+GptPartitionType gpt_partition_type_from_uuid(sd_id128_t id);
+int gpt_partition_type_from_string(const char *s, GptPartitionType *ret);
 
-bool gpt_partition_type_knows_read_only(sd_id128_t id);
-bool gpt_partition_type_knows_growfs(sd_id128_t id);
-bool gpt_partition_type_knows_no_auto(sd_id128_t id);
+const char *gpt_partition_type_mountpoint_nulstr(GptPartitionType type);
+
+bool gpt_partition_type_knows_read_only(GptPartitionType type);
+bool gpt_partition_type_knows_growfs(GptPartitionType type);
+bool gpt_partition_type_knows_no_auto(GptPartitionType type);
diff --git a/src/shared/group-record.c b/src/shared/group-record.c
index da3ed0a..2f12ac1 100644
--- a/src/shared/group-record.c
+++ b/src/shared/group-record.c
@@ -2,6 +2,7 @@
 
 #include "group-record.h"
 #include "strv.h"
+#include "uid-alloc-range.h"
 #include "user-util.h"
 
 GroupRecord* group_record_new(void) {
@@ -59,7 +60,6 @@
                 {},
         };
 
-        char smid[SD_ID128_STRING_MAX];
         JsonVariant *m;
         sd_id128_t mid;
         int r;
@@ -74,7 +74,7 @@
         if (r < 0)
                 return json_log(variant, flags, r, "Failed to determine machine ID: %m");
 
-        m = json_variant_by_key(variant, sd_id128_to_string(mid, smid));
+        m = json_variant_by_key(variant, SD_ID128_TO_STRING(mid));
         if (!m)
                 return 0;
 
@@ -146,7 +146,6 @@
                 {},
         };
 
-        char smid[SD_ID128_STRING_MAX];
         JsonVariant *m;
         sd_id128_t mid;
         int r;
@@ -161,7 +160,7 @@
         if (r < 0)
                 return json_log(variant, flags, r, "Failed to determine machine ID: %m");
 
-        m = json_variant_by_key(variant, sd_id128_to_string(mid, smid));
+        m = json_variant_by_key(variant, SD_ID128_TO_STRING(mid));
         if (!m)
                 return 0;
 
diff --git a/src/shared/hostname-setup.c b/src/shared/hostname-setup.c
index 742174d..0a56070 100644
--- a/src/shared/hostname-setup.c
+++ b/src/shared/hostname-setup.c
@@ -17,17 +17,15 @@
 #include "proc-cmdline.h"
 #include "string-table.h"
 #include "string-util.h"
-#include "util.h"
 
 static int sethostname_idempotent_full(const char *s, bool really) {
-        char buf[HOST_NAME_MAX + 1];
+        struct utsname u;
 
         assert(s);
 
-        if (gethostname(buf, sizeof(buf)) < 0)
-                return -errno;
+        assert_se(uname(&u) >= 0);
 
-        if (streq(buf, s))
+        if (streq_ptr(s, u.nodename))
                 return 0;
 
         if (really &&
@@ -41,26 +39,6 @@
         return sethostname_idempotent_full(s, true);
 }
 
-bool get_hostname_filtered(char ret[static HOST_NAME_MAX + 1]) {
-        char buf[HOST_NAME_MAX + 1];
-
-        /* Returns true if we got a good hostname, false otherwise. */
-
-        if (gethostname(buf, sizeof(buf)) < 0)
-                return false;  /* This can realistically only fail with ENAMETOOLONG.
-                                * Let's treat that case the same as an invalid hostname. */
-
-        if (isempty(buf))
-                return false;
-
-        /* This is the built-in kernel default hostname */
-        if (streq(buf, "(none)"))
-                return false;
-
-        memcpy(ret, buf, sizeof buf);
-        return true;
-}
-
 int shorten_overlong(const char *s, char **ret) {
         char *h, *p;
 
@@ -195,10 +173,14 @@
         }
 
         if (!hn) {
+                _cleanup_free_ char *buf = NULL;
+
                 /* Don't override the hostname if it is already set and not explicitly configured */
 
-                char buf[HOST_NAME_MAX + 1] = {};
-                if (get_hostname_filtered(buf)) {
+                r = gethostname_full(GET_HOSTNAME_ALLOW_LOCALHOST, &buf);
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r >= 0) {
                         log_debug("No hostname configured, leaving existing hostname <%s> in place.", buf);
                         return 0;
                 }
diff --git a/src/shared/hostname-setup.h b/src/shared/hostname-setup.h
index 5ac7241..6def36c 100644
--- a/src/shared/hostname-setup.h
+++ b/src/shared/hostname-setup.h
@@ -21,6 +21,5 @@
 int read_etc_hostname_stream(FILE *f, char **ret);
 int read_etc_hostname(const char *path, char **ret);
 
-bool get_hostname_filtered(char ret[static HOST_NAME_MAX + 1]);
 void hostname_update_source_hint(const char *hostname, HostnameSource source);
 int hostname_setup(bool really);
diff --git a/src/shared/hwdb-util.c b/src/shared/hwdb-util.c
index d7626ae..0ff686d 100644
--- a/src/shared/hwdb-util.c
+++ b/src/shared/hwdb-util.c
@@ -12,7 +12,7 @@
 #include "hwdb-internal.h"
 #include "hwdb-util.h"
 #include "label.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "nulstr-util.h"
 #include "path-util.h"
 #include "sort-util.h"
@@ -434,7 +434,7 @@
 
 static int insert_data(struct trie *trie, char **match_list, char *line, const char *filename,
                        uint16_t file_priority, uint32_t line_number, bool compat) {
-        char *value, **entry;
+        char *value;
 
         assert(line[0] == ' ');
 
@@ -583,7 +583,6 @@
         _cleanup_free_ char *hwdb_bin = NULL;
         _cleanup_(trie_freep) struct trie *trie = NULL;
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         uint16_t file_priority = 1;
         int r = 0, err;
 
@@ -639,7 +638,7 @@
         if (!hwdb_bin)
                 return -ENOMEM;
 
-        mkdir_parents_label(hwdb_bin, 0755);
+        (void) mkdir_parents_label(hwdb_bin, 0755);
         err = trie_store(trie, hwdb_bin, compat);
         if (err < 0)
                 return log_error_errno(err, "Failed to write database %s: %m", hwdb_bin);
@@ -651,14 +650,27 @@
         return r;
 }
 
-int hwdb_query(const char *modalias) {
+int hwdb_query(const char *modalias, const char *root) {
         _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
         const char *key, *value;
         int r;
 
         assert(modalias);
 
-        r = sd_hwdb_new(&hwdb);
+        if (!isempty(root))
+                NULSTR_FOREACH(p, hwdb_bin_paths) {
+                        _cleanup_free_ char *hwdb_bin = NULL;
+
+                        hwdb_bin = path_join(root, p);
+                        if (!hwdb_bin)
+                                return -ENOMEM;
+
+                        r = sd_hwdb_new_from_path(hwdb_bin, &hwdb);
+                        if (r >= 0)
+                                break;
+                }
+        else
+                r = sd_hwdb_new(&hwdb);
         if (r < 0)
                 return r;
 
@@ -668,9 +680,8 @@
         return 0;
 }
 
-bool hwdb_validate(sd_hwdb *hwdb) {
+bool hwdb_should_reload(sd_hwdb *hwdb) {
         bool found = false;
-        const char* p;
         struct stat st;
 
         if (!hwdb)
diff --git a/src/shared/hwdb-util.h b/src/shared/hwdb-util.h
index 5afde74..cb93690 100644
--- a/src/shared/hwdb-util.h
+++ b/src/shared/hwdb-util.h
@@ -5,6 +5,6 @@
 
 #include "sd-hwdb.h"
 
-bool hwdb_validate(sd_hwdb *hwdb);
+bool hwdb_should_reload(sd_hwdb *hwdb);
 int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool compat);
-int hwdb_query(const char *modalias);
+int hwdb_query(const char *modalias, const char *root);
diff --git a/src/shared/idn-util.c b/src/shared/idn-util.c
index d4108d0..6f36688 100644
--- a/src/shared/idn-util.c
+++ b/src/shared/idn-util.c
@@ -17,7 +17,7 @@
 
 #if HAVE_LIBIDN2
 int (*sym_idn2_lookup_u8)(const uint8_t* src, uint8_t** lookupname, int flags) = NULL;
-const char *(*sym_idn2_strerror)(int rc) = NULL;
+const char *(*sym_idn2_strerror)(int rc) _const_ = NULL;
 int (*sym_idn2_to_unicode_8z8z)(const char * input, char ** output, int flags) = NULL;
 
 int dlopen_idn(void) {
@@ -31,7 +31,7 @@
 
 #if HAVE_LIBIDN
 int (*sym_idna_to_ascii_4i)(const uint32_t * in, size_t inlen, char *out, int flags);
-int (*sym_idna_to_unicode_44i)(const uint32_t * in, size_t inlen,uint32_t * out, size_t * outlen, int flags);
+int (*sym_idna_to_unicode_44i)(const uint32_t * in, size_t inlen, uint32_t * out, size_t * outlen, int flags);
 char* (*sym_stringprep_ucs4_to_utf8)(const uint32_t * str, ssize_t len, size_t * items_read, size_t * items_written);
 uint32_t* (*sym_stringprep_utf8_to_ucs4)(const char *str, ssize_t len, size_t *items_written);
 
diff --git a/src/shared/idn-util.h b/src/shared/idn-util.h
index 4698eed..e64bd99 100644
--- a/src/shared/idn-util.h
+++ b/src/shared/idn-util.h
@@ -20,7 +20,7 @@
 
 #if HAVE_LIBIDN2
 extern int (*sym_idn2_lookup_u8)(const uint8_t* src, uint8_t** lookupname, int flags);
-extern const char *(*sym_idn2_strerror)(int rc);
+extern const char *(*sym_idn2_strerror)(int rc) _const_;
 extern int (*sym_idn2_to_unicode_8z8z)(const char * input, char ** output, int flags);
 #endif
 
diff --git a/src/shared/import-util.c b/src/shared/import-util.c
index 2a30e40..ec89064 100644
--- a/src/shared/import-util.c
+++ b/src/shared/import-util.c
@@ -14,53 +14,114 @@
 #include "string-table.h"
 #include "string-util.h"
 
-int import_url_last_component(const char *url, char **ret) {
-        const char *e, *p;
-        char *s;
+static const char *skip_protocol_and_hostname(const char *url) {
+        const char *d;
+        size_t n;
 
-        e = strchrnul(url, '?');
+        /* A very very lenient implementation of RFC3986 Section 3.2 */
 
-        while (e > url && e[-1] == '/')
+        /* Find colon separating protocol and hostname */
+        d = strchr(url, ':');
+        if (!d || url == d)
+                return NULL;
+        d++;
+
+        /* Skip slashes after colon */
+        d += strspn(d, "/");
+
+        /* Skip everything till next slash or end */
+        n = strcspn(d, "/?#");
+        if (n == 0)
+                return NULL;
+
+        return d + n;
+}
+
+int import_url_last_component(
+                const char *url,
+                char **ret) {
+
+        const char *e, *p, *h;
+
+        /* This extracts the last path component of the specified URI, i.e. the last non-empty substrings
+         * between two "/" characters. This ignores "Query" and "Fragment" suffixes (as per RFC3986). */
+
+        h = skip_protocol_and_hostname(url);
+        if (!h)
+                return -EINVAL;
+
+        e = h + strcspn(h, "?#"); /* Cut off "Query" and "Fragment" */
+
+        while (e > h && e[-1] == '/') /* Eat trailing slashes */
                 e--;
 
         p = e;
-        while (p > url && p[-1] != '/')
+        while (p > h && p[-1] != '/') /* Find component before that */
                 p--;
 
-        if (e <= p)
-                return -EINVAL;
+        if (e <= p) /* Empty component? */
+                return -EADDRNOTAVAIL;
 
-        s = strndup(p, e - p);
-        if (!s)
-                return -ENOMEM;
+        if (ret) {
+                char *s;
 
-        *ret = s;
+                s = strndup(p, e - p);
+                if (!s)
+                        return -ENOMEM;
+
+                *ret = s;
+        }
+
         return 0;
 }
 
-int import_url_change_last_component(const char *url, const char *suffix, char **ret) {
-        const char *e;
+int import_url_change_suffix(
+                const char *url,
+                size_t n_drop_components,
+                const char *suffix,
+                char **ret) {
+
+        const char *e, *h;
         char *s;
 
         assert(url);
         assert(ret);
 
-        e = strchrnul(url, '?');
+        /* This drops the specified number of path components of the specified URI, i.e. the specified number
+         * of non-empty substring between two "/" characters from the end of the string, and then append the
+         * specified suffix instead. Before doing all this it chops off the "Query" and "Fragment" suffixes
+         * (they are *not* re-added to the final URL). Note that n_drop_components may be 0 (in which case the
+         * component are simply added to the end). The suffix may be specified as NULL or empty string in
+         * which case nothing is appended, only the specified number of components chopped off. Note that the
+         * function may be called with n_drop_components == 0 and suffix == NULL, in which case the "Query"
+         * and "Fragment" is chopped off, and ensured the URL ends in a single "/", and that's it. */
 
-        while (e > url && e[-1] == '/')
-                e--;
-
-        while (e > url && e[-1] != '/')
-                e--;
-
-        if (e <= url)
+        h = skip_protocol_and_hostname(url);
+        if (!h)
                 return -EINVAL;
 
-        s = new(char, (e - url) + strlen(suffix) + 1);
+        e = h + strcspn(h, "?#"); /* Cut off "Query" and "Fragment" */
+
+        while (e > h && e[-1] == '/') /* Eat trailing slashes */
+                e--;
+
+        /* Drop the specified number of components from the end. Note that this is pretty lenient: if there
+         * are less component we silently drop those and then append the suffix to the top. */
+        while (n_drop_components > 0) {
+                while (e > h && e[-1] != '/') /* Eat last word (we don't mind if empty) */
+                        e--;
+
+                while (e > h && e[-1] == '/') /* Eat slashes before the last word */
+                        e--;
+
+                n_drop_components--;
+        }
+
+        s = new(char, (e - url) + 1 + strlen_ptr(suffix) + 1);
         if (!s)
                 return -ENOMEM;
 
-        strcpy(mempcpy(s, url, e - url), suffix);
+        strcpy(stpcpy(mempcpy(s, url, e - url), "/"), strempty(suffix));
         *ret = s;
         return 0;
 }
@@ -118,7 +179,6 @@
                 return -ENOMEM;
 
         for (;;) {
-                const char *sfx;
                 bool changed = false;
 
                 NULSTR_FOREACH(sfx, suffixes) {
diff --git a/src/shared/import-util.h b/src/shared/import-util.h
index c7ec3b4..3b2425b 100644
--- a/src/shared/import-util.h
+++ b/src/shared/import-util.h
@@ -14,7 +14,16 @@
 } ImportVerify;
 
 int import_url_last_component(const char *url, char **ret);
-int import_url_change_last_component(const char *url, const char *suffix, char **ret);
+
+int import_url_change_suffix(const char *url, size_t n_drop_components, const char *suffix, char **ret);
+
+static inline int import_url_change_last_component(const char *url, const char *suffix, char **ret) {
+        return import_url_change_suffix(url, 1, suffix, ret);
+}
+
+static inline int import_url_append_component(const char *url, const char *suffix, char **ret) {
+        return import_url_change_suffix(url, 0, suffix, ret);
+}
 
 const char* import_verify_to_string(ImportVerify v) _const_;
 ImportVerify import_verify_from_string(const char *s) _pure_;
diff --git a/src/shared/in-addr-prefix-util.c b/src/shared/in-addr-prefix-util.c
new file mode 100644
index 0000000..2dca310
--- /dev/null
+++ b/src/shared/in-addr-prefix-util.c
@@ -0,0 +1,324 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "extract-word.h"
+#include "hostname-util.h"
+#include "in-addr-prefix-util.h"
+#include "string-util.h"
+
+/* 0.0.0.0/0 */
+#define IN_ADDR_PREFIX_IPV4_ANY ((struct in_addr_prefix) { .family = AF_INET })
+/* ::/0 */
+#define IN_ADDR_PREFIX_IPV6_ANY ((struct in_addr_prefix) { .family = AF_INET6 })
+/* 127.0.0.0/8 */
+#define IN_ADDR_PREFIX_IPV4_LOCALHOST                                   \
+        ((struct in_addr_prefix) {                                      \
+                .family = AF_INET,                                      \
+                .address.in.s_addr = htobe32(UINT32_C(127) << 24),      \
+                .prefixlen = 8,                                         \
+        })
+/* ::1/128 */
+#define IN_ADDR_PREFIX_IPV6_LOCALHOST                                   \
+        ((struct in_addr_prefix) {                                      \
+                .family = AF_INET6,                                     \
+                .address.in6 = IN6ADDR_LOOPBACK_INIT,                   \
+                .prefixlen = 128,                                       \
+        })
+/* 169.254.0.0/16 */
+#define IN_ADDR_PREFIX_IPV4_LINKLOCAL                                   \
+        ((struct in_addr_prefix) {                                      \
+                .family = AF_INET,                                      \
+                .address.in.s_addr = htobe32((UINT32_C(169) << 24) |    \
+                                             (UINT32_C(254) << 16)),    \
+                .prefixlen = 16,                                        \
+        })
+/* fe80::/64 */
+#define IN_ADDR_PREFIX_IPV6_LINKLOCAL                                   \
+        ((struct in_addr_prefix) {                                      \
+                .family = AF_INET6,                                     \
+                .address.in6.s6_addr[0] = 0xfe,                         \
+                .address.in6.s6_addr[1] = 0x80,                         \
+                .prefixlen = 64,                                        \
+        })
+/* 224.0.0.0/4 */
+#define IN_ADDR_PREFIX_IPV4_MULTICAST                                   \
+        ((struct in_addr_prefix) {                                      \
+                .family = AF_INET,                                      \
+                .address.in.s_addr = htobe32((UINT32_C(224) << 24)),    \
+                .prefixlen = 4,                                         \
+        })
+/* ff00::/8 */
+#define IN_ADDR_PREFIX_IPV6_MULTICAST                                   \
+        ((struct in_addr_prefix) {                                      \
+                .family = AF_INET6,                                     \
+                .address.in6.s6_addr[0] = 0xff,                         \
+                .prefixlen = 8,                                         \
+        })
+
+static void in_addr_prefix_hash_func(const struct in_addr_prefix *a, struct siphash *state) {
+        assert(a);
+        assert(state);
+
+        siphash24_compress(&a->family, sizeof(a->family), state);
+        siphash24_compress(&a->prefixlen, sizeof(a->prefixlen), state);
+        siphash24_compress(&a->address, FAMILY_ADDRESS_SIZE(a->family), state);
+}
+
+static int in_addr_prefix_compare_func(const struct in_addr_prefix *x, const struct in_addr_prefix *y) {
+        int r;
+
+        assert(x);
+        assert(y);
+
+        r = CMP(x->family, y->family);
+        if (r != 0)
+                return r;
+
+        r = CMP(x->prefixlen, y->prefixlen);
+        if (r != 0)
+                return r;
+
+        return memcmp(&x->address, &y->address, FAMILY_ADDRESS_SIZE(x->family));
+}
+
+DEFINE_HASH_OPS(in_addr_prefix_hash_ops, struct in_addr_prefix, in_addr_prefix_hash_func, in_addr_prefix_compare_func);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(in_addr_prefix_hash_ops_free, struct in_addr_prefix, in_addr_prefix_hash_func, in_addr_prefix_compare_func, free);
+
+int in_addr_prefix_add(Set **prefixes, const struct in_addr_prefix *prefix) {
+        struct in_addr_prefix *copy;
+
+        assert(prefixes);
+        assert(prefix);
+        assert(IN_SET(prefix->family, AF_INET, AF_INET6));
+
+        copy = newdup(struct in_addr_prefix, prefix, 1);
+        if (!copy)
+                return -ENOMEM;
+
+        (void) in_addr_mask(copy->family, &copy->address, copy->prefixlen);
+        return set_ensure_consume(prefixes, &in_addr_prefix_hash_ops_free, copy);
+}
+
+int in_addr_prefixes_reduce(Set *prefixes) {
+        uint32_t ipv4_prefixlen_bits = 0;
+        uint64_t ipv6_prefixlen_bits[128 / sizeof(uint64_t)] = {};
+        uint8_t ipv4_prefixlens[32] = {}, ipv6_prefixlens[128] = {};
+        bool ipv4_has_any = false, ipv6_has_any = false;
+        size_t ipv4_n_prefixlens = 0, ipv6_n_prefixlens = 0;
+        struct in_addr_prefix *p;
+
+        SET_FOREACH(p, prefixes)
+                switch (p->family) {
+                case AF_INET:
+                        assert(p->prefixlen <= 32);
+                        if (p->prefixlen == 0)
+                                ipv4_has_any = true;
+                        else
+                                ipv4_prefixlen_bits |= UINT32_C(1) << (p->prefixlen - 1);
+                        break;
+                case AF_INET6:
+                        assert(p->prefixlen <= 128);
+                        if (p->prefixlen == 0)
+                                ipv6_has_any = true;
+                        else
+                                ipv6_prefixlen_bits[(p->prefixlen - 1) / sizeof(uint64_t)] |=
+                                        UINT64_C(1) << ((p->prefixlen - 1) % sizeof(uint64_t));
+                        break;
+                default:
+                        assert_not_reached();
+                }
+
+        if (!ipv4_has_any)
+                for (size_t i = 0; i < 32; i++)
+                        if (ipv4_prefixlen_bits & (UINT32_C(1) << i))
+                                ipv4_prefixlens[ipv4_n_prefixlens++] = i + 1;
+
+        if (!ipv6_has_any)
+                for (size_t i = 0; i < 128; i++)
+                        if (ipv6_prefixlen_bits[i / sizeof(uint64_t)] &
+                            (UINT64_C(1) << (i % sizeof(uint64_t))))
+                                ipv6_prefixlens[ipv6_n_prefixlens++] = i + 1;
+
+        SET_FOREACH(p, prefixes) {
+                uint8_t *prefixlens;
+                bool covered;
+                size_t *n;
+
+                if (p->prefixlen == 0)
+                        continue;
+
+                switch (p->family) {
+                case AF_INET:
+                        prefixlens = ipv4_prefixlens;
+                        n = &ipv4_n_prefixlens;
+                        covered = ipv4_has_any;
+                        break;
+                case AF_INET6:
+                        prefixlens = ipv6_prefixlens;
+                        n = &ipv6_n_prefixlens;
+                        covered = ipv6_has_any;
+                        break;
+                default:
+                        assert_not_reached();
+                }
+
+                for (size_t i = 0; i < *n; i++) {
+                        struct in_addr_prefix tmp;
+
+                        if (covered)
+                                break;
+
+                        if (prefixlens[i] >= p->prefixlen)
+                                break;
+
+                        tmp = *p;
+                        tmp.prefixlen = prefixlens[i];
+                        (void) in_addr_mask(tmp.family, &tmp.address, tmp.prefixlen);
+
+                        covered = set_contains(prefixes, &tmp);
+                }
+
+                if (covered)
+                        free(set_remove(prefixes, p));
+        }
+
+        return 0;
+}
+
+int in_addr_prefixes_merge(Set **dest, Set *src) {
+        struct in_addr_prefix *p;
+        int r;
+
+        assert(dest);
+
+        SET_FOREACH(p, src) {
+                r = in_addr_prefix_add(dest, p);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+bool in_addr_prefixes_is_any(Set *prefixes) {
+        return
+                set_contains(prefixes, &IN_ADDR_PREFIX_IPV4_ANY) &&
+                set_contains(prefixes, &IN_ADDR_PREFIX_IPV6_ANY);
+}
+
+int config_parse_in_addr_prefixes(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Set **prefixes = ASSERT_PTR(data);
+        int r;
+
+        assert(IN_SET(ltype, AF_UNSPEC, AF_INET, AF_INET6));
+
+        if (isempty(rvalue)) {
+                *prefixes = set_free(*prefixes);
+                return 0;
+        }
+
+        for (const char *p = rvalue;;) {
+                _cleanup_free_ char *word = NULL;
+
+                r = extract_first_word(&p, &word, NULL, 0);
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r, "Invalid syntax, ignoring: %s", rvalue);
+                        return 0;
+                }
+                if (r == 0)
+                        return 0;
+
+                if (streq(word, "any")) {
+                        /* "any" is a shortcut for 0.0.0.0/0 and ::/0 */
+
+                        if (ltype != AF_INET6) {
+                                r = in_addr_prefix_add(prefixes, &IN_ADDR_PREFIX_IPV4_ANY);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                        if (ltype != AF_INET) {
+                                r = in_addr_prefix_add(prefixes, &IN_ADDR_PREFIX_IPV6_ANY);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                } else if (is_localhost(word)) {
+                        /* "localhost" is a shortcut for 127.0.0.0/8 and ::1/128 */
+
+                        if (ltype != AF_INET6) {
+                                r = in_addr_prefix_add(prefixes, &IN_ADDR_PREFIX_IPV4_LOCALHOST);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                        if (ltype != AF_INET) {
+                                r = in_addr_prefix_add(prefixes, &IN_ADDR_PREFIX_IPV6_LOCALHOST);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                } else if (streq(word, "link-local")) {
+                        /* "link-local" is a shortcut for 169.254.0.0/16 and fe80::/64 */
+
+                        if (ltype != AF_INET6) {
+                                r = in_addr_prefix_add(prefixes, &IN_ADDR_PREFIX_IPV4_LINKLOCAL);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                        if (ltype != AF_INET) {
+                                r = in_addr_prefix_add(prefixes, &IN_ADDR_PREFIX_IPV6_LINKLOCAL);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                } else if (streq(word, "multicast")) {
+                        /* "multicast" is a shortcut for 224.0.0.0/4 and ff00::/8 */
+
+                        if (ltype != AF_INET6) {
+                                r = in_addr_prefix_add(prefixes, &IN_ADDR_PREFIX_IPV4_MULTICAST);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                        if (ltype != AF_INET) {
+                                r = in_addr_prefix_add(prefixes, &IN_ADDR_PREFIX_IPV6_MULTICAST);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+
+                } else {
+                        struct in_addr_prefix a;
+
+                        if (ltype == AF_UNSPEC)
+                                r = in_addr_prefix_from_string_auto(word, &a.family, &a.address, &a.prefixlen);
+                        else {
+                                a.family = ltype;
+                                r = in_addr_prefix_from_string(word, a.family, &a.address, &a.prefixlen);
+                        }
+                        if (r < 0) {
+                                log_syntax(unit, LOG_WARNING, filename, line, r,
+                                           "Address prefix is invalid, ignoring assignment: %s", word);
+                                continue;
+                        }
+
+                        r = in_addr_prefix_add(prefixes, &a);
+                        if (r < 0)
+                                return log_oom();
+                }
+        }
+}
diff --git a/src/shared/in-addr-prefix-util.h b/src/shared/in-addr-prefix-util.h
new file mode 100644
index 0000000..53aaad3
--- /dev/null
+++ b/src/shared/in-addr-prefix-util.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "conf-parser.h"
+#include "in-addr-util.h"
+#include "set.h"
+
+struct in_addr_prefix {
+        int family;
+        uint8_t prefixlen;
+        union in_addr_union address;
+};
+
+int in_addr_prefix_add(Set **prefixes, const struct in_addr_prefix *prefix);
+int in_addr_prefixes_reduce(Set *prefixes);
+int in_addr_prefixes_merge(Set **dest, Set *src);
+/* Returns true if a set contains the two items necessary for "any" (0.0.0.0/0 and ::/0). */
+bool in_addr_prefixes_is_any(Set *prefixes);
+
+extern const struct hash_ops in_addr_prefix_hash_ops;
+extern const struct hash_ops in_addr_prefix_hash_ops_free;
+
+CONFIG_PARSER_PROTOTYPE(config_parse_in_addr_prefixes);
diff --git a/src/shared/install-file.c b/src/shared/install-file.c
new file mode 100644
index 0000000..ffcf86e
--- /dev/null
+++ b/src/shared/install-file.c
@@ -0,0 +1,270 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/ioctl.h>
+
+#include "btrfs-util.h"
+#include "chattr-util.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "fs-util.h"
+#include "install-file.h"
+#include "missing_syscall.h"
+#include "rm-rf.h"
+#include "sync-util.h"
+
+int fs_make_very_read_only(int fd) {
+        struct stat st;
+        int r;
+
+        assert(fd >= 0);
+
+        /* Tries to make the specified fd "comprehensively" read-only. Primary usecase for this is OS images,
+         * i.e. either loopback files or larger directory hierarchies. Depending on the inode type and
+         * backing file system this means something different:
+         *
+         * 1. If the fd refers to a btrfs subvolume we'll mark it read-only as a whole
+         * 2. If the fd refers to any other directory we'll set the FS_IMMUTABLE_FL flag on it
+         * 3. If the fd refers to a regular file we'll drop the w bits.
+         * 4. If the fd refers to a block device, use BLKROSET to set read-only state
+         *
+         * You might wonder why not drop the x bits for directories. That's because we want to guarantee that
+         * everything "inside" the image remains largely the way it is, in case you mount it. And since the
+         * mode of the root dir of the image is pretty visible we don't want to modify it. btrfs subvol flags
+         * and the FS_IMMUTABLE_FL otoh are much less visible. Changing the mode of regular files should be
+         * OK though, since after all this is supposed to be used for disk images, i.e. the fs in the disk
+         * image doesn't make the mode of the loopback file it is stored in visible. */
+
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        switch (st.st_mode & S_IFMT) {
+
+        case S_IFDIR:
+                if (btrfs_might_be_subvol(&st)) {
+                        r = btrfs_subvol_set_read_only_fd(fd, true);
+                        if (r >= 0)
+                                return 0;
+
+                        if (!ERRNO_IS_NOT_SUPPORTED(r) && r != -EINVAL)
+                                return r;
+                }
+
+                r = chattr_fd(fd, FS_IMMUTABLE_FL, FS_IMMUTABLE_FL, NULL);
+                if (r < 0)
+                        return r;
+
+                break;
+
+        case S_IFREG:
+                if ((st.st_mode & 0222) != 0)
+                        if (fchmod(fd, st.st_mode & 07555) < 0)
+                                return -errno;
+
+                break;
+
+        case S_IFBLK: {
+                int ro = 1;
+
+                if (ioctl(fd, BLKROSET, &ro) < 0)
+                        return -errno;
+
+                break;
+        }
+
+        default:
+                return -EBADFD;
+        }
+
+        return 0;
+}
+
+static int unlinkat_maybe_dir(int dirfd, const char *pathname) {
+
+        /* Invokes unlinkat() for regular files first, and if this fails with EISDIR tries again with
+         * AT_REMOVEDIR */
+
+        if (unlinkat(dirfd, pathname, 0) < 0) {
+                if (errno != EISDIR)
+                        return -errno;
+
+                if (unlinkat(dirfd, pathname, AT_REMOVEDIR) < 0)
+                        return -errno;
+        }
+
+        return 0;
+}
+
+int install_file(int source_atfd, const char *source_name,
+                 int target_atfd, const char *target_name,
+                 InstallFileFlags flags) {
+
+        _cleanup_close_ int rofd = -EBADF;
+        int r;
+
+        /* Moves a file or directory tree into place, with some bells and whistles:
+         *
+         * 1. Optionally syncs before/after to ensure file installation can be used as barrier
+         * 2. Optionally marks the file/directory read-only using fs_make_very_read_only()
+         * 3. Optionally operates in replacing or in non-replacing mode.
+         * 4. If it replaces will remove the old tree if needed.
+         */
+
+        assert(source_atfd >= 0 || source_atfd == AT_FDCWD);
+        assert(source_name);
+        assert(target_atfd >= 0 || target_atfd == AT_FDCWD);
+
+        /* If target_name is specified as NULL no renaming takes place. Instead it is assumed the file is
+         * already in place, and only the syncing/read-only marking shall be applied. Note that with
+         * target_name=NULL and flags=0 this call is a NOP */
+
+        if ((flags & (INSTALL_FSYNC|INSTALL_FSYNC_FULL|INSTALL_SYNCFS|INSTALL_READ_ONLY)) != 0) {
+                _cleanup_close_ int pfd = -EBADF;
+                struct stat st;
+
+                /* Open an O_PATH fd for the source if we need to sync things or mark things read only. */
+
+                pfd = openat(source_atfd, source_name, O_PATH|O_CLOEXEC|O_NOFOLLOW);
+                if (pfd < 0)
+                        return -errno;
+
+                if (fstat(pfd, &st) < 0)
+                        return -errno;
+
+                switch (st.st_mode & S_IFMT) {
+
+                case S_IFREG: {
+                        _cleanup_close_ int regfd = -EBADF;
+
+                        regfd = fd_reopen(pfd, O_RDONLY|O_CLOEXEC);
+                        if (regfd < 0)
+                                return regfd;
+
+                        if ((flags & (INSTALL_FSYNC_FULL|INSTALL_SYNCFS)) != 0) {
+                                /* If this is just a regular file (as oppose to a fully populated directory)
+                                 * let's downgrade INSTALL_SYNCFS to INSTALL_FSYNC_FULL, after all this is
+                                 * going to be a single inode we install */
+                                r = fsync_full(regfd);
+                                if (r < 0)
+                                        return r;
+                        } else if (flags & INSTALL_FSYNC) {
+                                if (fsync(regfd) < 0)
+                                        return -errno;
+                        }
+
+                        if (flags & INSTALL_READ_ONLY)
+                                rofd = TAKE_FD(regfd);
+
+                        break;
+                }
+
+                case S_IFDIR: {
+                        _cleanup_close_ int dfd = -EBADF;
+
+                        dfd = fd_reopen(pfd, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+                        if (dfd < 0)
+                                return dfd;
+
+                        if (flags & INSTALL_SYNCFS) {
+                                if (syncfs(dfd) < 0)
+                                        return -errno;
+                        } else if (flags & INSTALL_FSYNC_FULL) {
+                                r = fsync_full(dfd);
+                                if (r < 0)
+                                        return r;
+                        } else if (flags & INSTALL_FSYNC) {
+                                if (fsync(dfd) < 0)
+                                        return -errno;
+                        }
+
+                        if (flags & INSTALL_READ_ONLY)
+                                rofd = TAKE_FD(dfd);
+
+                        break;
+                }
+
+                default:
+                        /* Other inodes: char/block device inodes, fifos, symlinks, sockets don't need
+                         * syncing themselves, as they only exist in the directory, and have no contents on
+                         * disk */
+
+                        if (target_name && (flags & (INSTALL_FSYNC_FULL|INSTALL_SYNCFS)) != 0) {
+                                r = fsync_directory_of_file(pfd);
+                                if (r < 0)
+                                        return r;
+                        }
+
+                        break;
+                }
+        }
+
+        if (target_name) {
+                /* Rename the file */
+
+                if (flags & INSTALL_REPLACE) {
+                        /* First, try a simple renamat(), maybe that's enough */
+                        if (renameat(source_atfd, source_name, target_atfd, target_name) < 0) {
+                                _cleanup_close_ int dfd = -EBADF;
+
+                                if (!IN_SET(errno, EEXIST, ENOTDIR, ENOTEMPTY, EISDIR, EBUSY))
+                                        return -errno;
+
+                                /* Hmm, the target apparently existed already. Let's try to use
+                                 * RENAME_EXCHANGE. But let's first open the inode if it's a directory, so
+                                 * that we can later remove its contents if it's a directory. Why do this
+                                 * before the rename()? Mostly because if we have trouble opening the thing
+                                 * we want to know before we start actually modifying the file system. */
+
+                                dfd = openat(target_atfd, target_name, O_RDONLY|O_DIRECTORY|O_CLOEXEC, 0);
+                                if (dfd < 0 && errno != ENOTDIR)
+                                        return -errno;
+
+                                if (renameat2(source_atfd, source_name, target_atfd, target_name, RENAME_EXCHANGE) < 0) {
+
+                                        if (!ERRNO_IS_NOT_SUPPORTED(errno) && errno != EINVAL)
+                                                return -errno;
+
+                                        /* The exchange didn't work, let's remove the target first, and try again */
+
+                                        if (dfd >= 0)
+                                                (void) rm_rf_children(TAKE_FD(dfd), REMOVE_PHYSICAL|REMOVE_SUBVOLUME|REMOVE_CHMOD, NULL);
+
+                                        r = unlinkat_maybe_dir(target_atfd, target_name);
+                                        if (r < 0)
+                                                return log_debug_errno(r, "Failed to remove target directory: %m");
+
+                                        if (renameat(source_atfd, source_name, target_atfd, target_name) < 0)
+                                                return -errno;
+                                } else {
+                                        /* The exchange worked, hence let's remove the source (i.e. the old target) */
+                                        if (dfd >= 0)
+                                                (void) rm_rf_children(TAKE_FD(dfd), REMOVE_PHYSICAL|REMOVE_SUBVOLUME|REMOVE_CHMOD, NULL);
+
+                                        r = unlinkat_maybe_dir(source_atfd, source_name);
+                                        if (r < 0)
+                                                return log_debug_errno(r, "Failed to remove replaced target directory: %m");
+                                }
+                        }
+                } else {
+                        r = rename_noreplace(source_atfd, source_name, target_atfd, target_name);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        if (rofd >= 0) {
+                r = fs_make_very_read_only(rofd);
+                if (r < 0)
+                        return r;
+        }
+
+        if ((flags & (INSTALL_FSYNC_FULL|INSTALL_SYNCFS)) != 0) {
+                if (target_name)
+                        r = fsync_parent_at(target_atfd, target_name);
+                else
+                        r = fsync_parent_at(source_atfd, source_name);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
diff --git a/src/shared/install-file.h b/src/shared/install-file.h
new file mode 100644
index 0000000..c37254f
--- /dev/null
+++ b/src/shared/install-file.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+int fs_make_very_read_only(int fd);
+
+typedef enum InstallFileFlags {
+        INSTALL_REPLACE    = 1 << 0, /* Replace an existing inode */
+        INSTALL_READ_ONLY  = 1 << 1, /* Call fs_make_very_read_only() to make the inode comprehensively read-only */
+        INSTALL_FSYNC      = 1 << 2, /* fsync() file contents before moving file in */
+        INSTALL_FSYNC_FULL = 1 << 3, /* like INSTALL_FSYNC, but also fsync() parent dir before+after moving file in */
+        INSTALL_SYNCFS     = 1 << 4, /* syncfs() before moving file in, fsync() parent dir after moving file in */
+} InstallFileFlags;
+
+int install_file(int source_atfd, const char *source_name, int target_atfd, const char *target_name, InstallFileFlags flags);
diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c
index 403d601..e2a4a48 100644
--- a/src/shared/install-printf.c
+++ b/src/shared/install-printf.c
@@ -14,12 +14,10 @@
 #include "user-util.h"
 
 static int specifier_prefix_and_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const UnitFileInstallInfo *i = userdata;
+        const InstallInfo *i = ASSERT_PTR(userdata);
         _cleanup_free_ char *prefix = NULL;
         int r;
 
-        assert(i);
-
         r = unit_name_to_prefix_and_instance(i->name, &prefix);
         if (r < 0)
                 return r;
@@ -38,11 +36,9 @@
 }
 
 static int specifier_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const UnitFileInstallInfo *i = userdata;
+        const InstallInfo *i = ASSERT_PTR(userdata);
         char *ans;
 
-        assert(i);
-
         if (unit_name_is_valid(i->name, UNIT_NAME_TEMPLATE) && i->default_instance)
                 return unit_name_replace_instance(i->name, i->default_instance, ret);
 
@@ -54,20 +50,16 @@
 }
 
 static int specifier_prefix(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const UnitFileInstallInfo *i = userdata;
-
-        assert(i);
+        const InstallInfo *i = ASSERT_PTR(userdata);
 
         return unit_name_to_prefix(i->name, ret);
 }
 
 static int specifier_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        const UnitFileInstallInfo *i = userdata;
+        const InstallInfo *i = ASSERT_PTR(userdata);
         char *instance;
         int r;
 
-        assert(i);
-
         r = unit_name_to_instance(i->name, &instance);
         if (r < 0)
                 return r;
@@ -87,6 +79,8 @@
         char *dash;
         int r;
 
+        assert(ret);
+
         r = specifier_prefix(specifier, data, root, userdata, &prefix);
         if (r < 0)
                 return r;
@@ -103,7 +97,11 @@
         return 0;
 }
 
-int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, const char *root, char **ret) {
+int install_name_printf(
+                LookupScope scope,
+                const InstallInfo *info,
+                const char *format,
+                char **ret) {
         /* This is similar to unit_name_printf() */
 
         const Specifier table[] = {
@@ -115,13 +113,13 @@
 
                 COMMON_SYSTEM_SPECIFIERS,
 
-                COMMON_CREDS_SPECIFIERS,
+                COMMON_CREDS_SPECIFIERS(scope),
                 {}
         };
 
-        assert(i);
+        assert(info);
         assert(format);
         assert(ret);
 
-        return specifier_printf(format, max_length, table, root, i, ret);
+        return specifier_printf(format, UNIT_NAME_MAX, table, info->root, info, ret);
 }
diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h
index af32acc..46a7514 100644
--- a/src/shared/install-printf.h
+++ b/src/shared/install-printf.h
@@ -4,11 +4,8 @@
 #include "install.h"
 #include "unit-name.h"
 
-int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, const char *root, char **ret);
-
-static inline int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) {
-        return install_full_printf_internal(i, format, UNIT_NAME_MAX, root, ret);
-}
-static inline int install_path_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) {
-        return install_full_printf_internal(i, format, PATH_MAX-1, root, ret);
-}
+int install_name_printf(
+                LookupScope scope,
+                const InstallInfo *info,
+                const char *format,
+                char **ret);
diff --git a/src/shared/install.c b/src/shared/install.c
index 4bf868f..bd12259 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -10,9 +10,10 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "conf-files.h"
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
 #include "dirent-util.h"
 #include "errno-list.h"
 #include "extract-word.h"
@@ -25,7 +26,7 @@
 #include "locale-util.h"
 #include "log.h"
 #include "macro.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path-lookup.h"
 #include "path-util.h"
 #include "rm-rf.h"
@@ -46,6 +47,7 @@
 } SearchFlags;
 
 typedef struct {
+        LookupScope scope;
         OrderedHashmap *will_process;
         OrderedHashmap *have_processed;
 } InstallContext;
@@ -62,7 +64,7 @@
         char **instances;
 };
 
-static bool unit_file_install_info_has_rules(const UnitFileInstallInfo *i) {
+static bool install_info_has_rules(const InstallInfo *i) {
         assert(i);
 
         return !strv_isempty(i->aliases) ||
@@ -70,7 +72,7 @@
                !strv_isempty(i->required_by);
 }
 
-static bool unit_file_install_info_has_also(const UnitFileInstallInfo *i) {
+static bool install_info_has_also(const InstallInfo *i) {
         assert(i);
 
         return !strv_isempty(i->also);
@@ -89,36 +91,41 @@
         p->n_rules = 0;
 }
 
-static const char *const unit_file_type_table[_UNIT_FILE_TYPE_MAX] = {
-        [UNIT_FILE_TYPE_REGULAR] = "regular",
-        [UNIT_FILE_TYPE_SYMLINK] = "symlink",
-        [UNIT_FILE_TYPE_MASKED] = "masked",
+static const char *const install_mode_table[_INSTALL_MODE_MAX] = {
+        [INSTALL_MODE_REGULAR] = "regular",
+        [INSTALL_MODE_LINKED]  = "linked",
+        [INSTALL_MODE_ALIAS]   = "alias",
+        [INSTALL_MODE_MASKED]  = "masked",
 };
 
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(unit_file_type, UnitFileType);
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(install_mode, InstallMode);
 
-static int in_search_path(const LookupPaths *p, const char *path) {
+static int in_search_path(const LookupPaths *lp, const char *path) {
         _cleanup_free_ char *parent = NULL;
+        int r;
 
-        assert(path);
+        /* Check if 'path' is in lp->search_path. */
 
-        parent = dirname_malloc(path);
-        if (!parent)
-                return -ENOMEM;
+        r = path_extract_directory(ASSERT_PTR(path), &parent);
+        if (r < 0)
+                return r;
 
-        return path_strv_contains(p->search_path, parent);
+        return path_strv_contains(ASSERT_PTR(lp)->search_path, parent);
 }
 
-static const char* skip_root(const LookupPaths *p, const char *path) {
-        char *e;
+static int underneath_search_path(const LookupPaths *lp, const char *path) {
+        /* Check if 'path' is underneath lp->search_path. */
 
-        assert(p);
+        return !!path_startswith_strv(ASSERT_PTR(path), ASSERT_PTR(lp)->search_path);
+}
+
+static const char* skip_root(const char *root_dir, const char *path) {
         assert(path);
 
-        if (!p->root_dir)
+        if (!root_dir)
                 return path;
 
-        e = path_startswith(path, p->root_dir);
+        const char *e = path_startswith(path, root_dir);
         if (!e)
                 return NULL;
 
@@ -133,106 +140,111 @@
         return e;
 }
 
-static int path_is_generator(const LookupPaths *p, const char *path) {
+static int path_is_generator(const LookupPaths *lp, const char *path) {
         _cleanup_free_ char *parent = NULL;
+        int r;
 
-        assert(p);
+        assert(lp);
         assert(path);
 
-        parent = dirname_malloc(path);
-        if (!parent)
-                return -ENOMEM;
+        r = path_extract_directory(path, &parent);
+        if (r < 0)
+                return r;
 
-        return path_equal_ptr(parent, p->generator) ||
-               path_equal_ptr(parent, p->generator_early) ||
-               path_equal_ptr(parent, p->generator_late);
+        return path_equal_ptr(parent, lp->generator) ||
+               path_equal_ptr(parent, lp->generator_early) ||
+               path_equal_ptr(parent, lp->generator_late);
 }
 
-static int path_is_transient(const LookupPaths *p, const char *path) {
+static int path_is_transient(const LookupPaths *lp, const char *path) {
         _cleanup_free_ char *parent = NULL;
+        int r;
 
-        assert(p);
+        assert(lp);
         assert(path);
 
-        parent = dirname_malloc(path);
-        if (!parent)
-                return -ENOMEM;
+        r = path_extract_directory(path, &parent);
+        if (r < 0)
+                return r;
 
-        return path_equal_ptr(parent, p->transient);
+        return path_equal_ptr(parent, lp->transient);
 }
 
-static int path_is_control(const LookupPaths *p, const char *path) {
+static int path_is_control(const LookupPaths *lp, const char *path) {
         _cleanup_free_ char *parent = NULL;
+        int r;
 
-        assert(p);
+        assert(lp);
         assert(path);
 
-        parent = dirname_malloc(path);
-        if (!parent)
-                return -ENOMEM;
+        r = path_extract_directory(path, &parent);
+        if (r < 0)
+                return r;
 
-        return path_equal_ptr(parent, p->persistent_control) ||
-               path_equal_ptr(parent, p->runtime_control);
+        return path_equal_ptr(parent, lp->persistent_control) ||
+               path_equal_ptr(parent, lp->runtime_control);
 }
 
-static int path_is_config(const LookupPaths *p, const char *path, bool check_parent) {
+static int path_is_config(const LookupPaths *lp, const char *path, bool check_parent) {
         _cleanup_free_ char *parent = NULL;
+        int r;
 
-        assert(p);
+        assert(lp);
         assert(path);
 
         /* Note that we do *not* have generic checks for /etc or /run in place, since with
          * them we couldn't discern configuration from transient or generated units */
 
         if (check_parent) {
-                parent = dirname_malloc(path);
-                if (!parent)
-                        return -ENOMEM;
+                r = path_extract_directory(path, &parent);
+                if (r < 0)
+                        return r;
 
                 path = parent;
         }
 
-        return path_equal_ptr(path, p->persistent_config) ||
-               path_equal_ptr(path, p->runtime_config);
+        return path_equal_ptr(path, lp->persistent_config) ||
+               path_equal_ptr(path, lp->runtime_config);
 }
 
-static int path_is_runtime(const LookupPaths *p, const char *path, bool check_parent) {
+static int path_is_runtime(const LookupPaths *lp, const char *path, bool check_parent) {
         _cleanup_free_ char *parent = NULL;
         const char *rpath;
+        int r;
 
-        assert(p);
+        assert(lp);
         assert(path);
 
         /* Everything in /run is considered runtime. On top of that we also add
          * explicit checks for the various runtime directories, as safety net. */
 
-        rpath = skip_root(p, path);
+        rpath = skip_root(lp->root_dir, path);
         if (rpath && path_startswith(rpath, "/run"))
                 return true;
 
         if (check_parent) {
-                parent = dirname_malloc(path);
-                if (!parent)
-                        return -ENOMEM;
+                r = path_extract_directory(path, &parent);
+                if (r < 0)
+                        return r;
 
                 path = parent;
         }
 
-        return path_equal_ptr(path, p->runtime_config) ||
-               path_equal_ptr(path, p->generator) ||
-               path_equal_ptr(path, p->generator_early) ||
-               path_equal_ptr(path, p->generator_late) ||
-               path_equal_ptr(path, p->transient) ||
-               path_equal_ptr(path, p->runtime_control);
+        return path_equal_ptr(path, lp->runtime_config) ||
+               path_equal_ptr(path, lp->generator) ||
+               path_equal_ptr(path, lp->generator_early) ||
+               path_equal_ptr(path, lp->generator_late) ||
+               path_equal_ptr(path, lp->transient) ||
+               path_equal_ptr(path, lp->runtime_control);
 }
 
-static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) {
+static int path_is_vendor_or_generator(const LookupPaths *lp, const char *path) {
         const char *rpath;
 
-        assert(p);
+        assert(lp);
         assert(path);
 
-        rpath = skip_root(p, path);
+        rpath = skip_root(lp->root_dir, path);
         if (!rpath)
                 return 0;
 
@@ -244,42 +256,44 @@
                 return true;
 #endif
 
-        if (path_is_generator(p, rpath))
+        if (path_is_generator(lp, rpath))
                 return true;
 
         return path_equal(rpath, SYSTEM_DATA_UNIT_DIR);
 }
 
-static const char* config_path_from_flags(const LookupPaths *paths, UnitFileFlags flags) {
-        assert(paths);
+static const char* config_path_from_flags(const LookupPaths *lp, UnitFileFlags flags) {
+        assert(lp);
 
         if (FLAGS_SET(flags, UNIT_FILE_PORTABLE))
-                return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? paths->runtime_attached : paths->persistent_attached;
+                return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? lp->runtime_attached : lp->persistent_attached;
         else
-                return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? paths->runtime_config : paths->persistent_config;
+                return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? lp->runtime_config : lp->persistent_config;
 }
 
-int unit_file_changes_add(
-                UnitFileChange **changes,
+InstallChangeType install_changes_add(
+                InstallChange **changes,
                 size_t *n_changes,
-                int type_or_errno, /* UNIT_FILE_SYMLINK, _UNLINK, _IS_MASKED, _IS_DANGLING if positive or errno if negative */
+                InstallChangeType type, /* INSTALL_CHANGE_SYMLINK, _UNLINK, _IS_MASKED, _IS_DANGLING, … if positive or errno if negative */
                 const char *path,
                 const char *source) {
 
         _cleanup_free_ char *p = NULL, *s = NULL;
-        UnitFileChange *c;
+        InstallChange *c;
 
         assert(!changes == !n_changes);
+        assert(INSTALL_CHANGE_TYPE_VALID(type));
 
-        if (type_or_errno >= 0)
-                assert(type_or_errno < _UNIT_FILE_CHANGE_TYPE_MAX);
-        else
-                assert(type_or_errno >= -ERRNO_MAX);
+        /* Message formatting requires <path> to be set. */
+        assert(path);
+
+        /* Register a change or error. Note that the return value may be the error
+         * that was passed in, or -ENOMEM generated internally. */
 
         if (!changes)
-                return 0;
+                return type;
 
-        c = reallocarray(*changes, *n_changes + 1, sizeof(UnitFileChange));
+        c = reallocarray(*changes, *n_changes + 1, sizeof(InstallChange));
         if (!c)
                 return -ENOMEM;
         *changes = c;
@@ -300,16 +314,16 @@
                 path_simplify(s);
         }
 
-        c[(*n_changes)++] = (UnitFileChange) {
-                .type_or_errno = type_or_errno,
+        c[(*n_changes)++] = (InstallChange) {
+                .type = type,
                 .path = TAKE_PTR(p),
                 .source = TAKE_PTR(s),
         };
 
-        return 0;
+        return type;
 }
 
-void unit_file_changes_free(UnitFileChange *changes, size_t n_changes) {
+void install_changes_free(InstallChange *changes, size_t n_changes) {
         assert(changes || n_changes == 0);
 
         for (size_t i = 0; i < n_changes; i++) {
@@ -320,157 +334,209 @@
         free(changes);
 }
 
-void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet) {
-        bool logged = false;
+void install_changes_dump(int r, const char *verb, const InstallChange *changes, size_t n_changes, bool quiet) {
+        int err = 0;
 
         assert(changes || n_changes == 0);
         /* If verb is not specified, errors are not allowed! */
         assert(verb || r >= 0);
 
         for (size_t i = 0; i < n_changes; i++) {
-                assert(verb || changes[i].type_or_errno >= 0);
+                if (changes[i].type < 0)
+                        assert(verb);
+                assert(changes[i].path);
 
-                switch(changes[i].type_or_errno) {
-                case UNIT_FILE_SYMLINK:
+                /* When making changes here, make sure to also change install_error() in dbus-manager.c. */
+
+                switch (changes[i].type) {
+                case INSTALL_CHANGE_SYMLINK:
                         if (!quiet)
                                 log_info("Created symlink %s %s %s.",
                                          changes[i].path,
-                                         special_glyph(SPECIAL_GLYPH_ARROW),
+                                         special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
                                          changes[i].source);
                         break;
-                case UNIT_FILE_UNLINK:
+                case INSTALL_CHANGE_UNLINK:
                         if (!quiet)
-                                log_info("Removed %s.", changes[i].path);
+                                log_info("Removed \"%s\".", changes[i].path);
                         break;
-                case UNIT_FILE_IS_MASKED:
+                case INSTALL_CHANGE_IS_MASKED:
                         if (!quiet)
                                 log_info("Unit %s is masked, ignoring.", changes[i].path);
                         break;
-                case UNIT_FILE_IS_DANGLING:
+                case INSTALL_CHANGE_IS_MASKED_GENERATOR:
+                        if (!quiet)
+                                log_info("Unit %s is masked via a generator and cannot be unmasked.",
+                                         changes[i].path);
+                        break;
+                case INSTALL_CHANGE_IS_DANGLING:
                         if (!quiet)
                                 log_info("Unit %s is an alias to a unit that is not present, ignoring.",
                                          changes[i].path);
                         break;
-                case UNIT_FILE_DESTINATION_NOT_PRESENT:
+                case INSTALL_CHANGE_DESTINATION_NOT_PRESENT:
                         if (!quiet)
                                 log_warning("Unit %s is added as a dependency to a non-existent unit %s.",
                                             changes[i].source, changes[i].path);
                         break;
-                case UNIT_FILE_AUXILIARY_FAILED:
+                case INSTALL_CHANGE_AUXILIARY_FAILED:
                         if (!quiet)
-                                log_warning("Failed to enable auxiliary unit %s, ignoring.", changes[i].source);
+                                log_warning("Failed to enable auxiliary unit %s, ignoring.", changes[i].path);
                         break;
                 case -EEXIST:
                         if (changes[i].source)
-                                log_error_errno(changes[i].type_or_errno,
-                                                "Failed to %s unit, file %s already exists and is a symlink to %s.",
-                                                verb, changes[i].path, changes[i].source);
+                                err = log_error_errno(changes[i].type,
+                                                      "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".",
+                                                      verb, changes[i].path, changes[i].source);
                         else
-                                log_error_errno(changes[i].type_or_errno,
-                                                "Failed to %s unit, file %s already exists.",
-                                                verb, changes[i].path);
-                        logged = true;
+                                err = log_error_errno(changes[i].type,
+                                                      "Failed to %s unit, file \"%s\" already exists.",
+                                                      verb, changes[i].path);
                         break;
                 case -ERFKILL:
-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is masked.",
-                                        verb, changes[i].path);
-                        logged = true;
+                        err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s is masked.",
+                                              verb, changes[i].path);
                         break;
                 case -EADDRNOTAVAIL:
-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.",
-                                        verb, changes[i].path);
-                        logged = true;
+                        err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s is transient or generated.",
+                                              verb, changes[i].path);
+                        break;
+                case -ETXTBSY:
+                        err = log_error_errno(changes[i].type, "Failed to %s unit, file %s is under the systemd unit hierarchy already.",
+                                              verb, changes[i].path);
+                        break;
+                case -EBADSLT:
+                        err = log_error_errno(changes[i].type, "Failed to %s unit, invalid specifier in \"%s\".",
+                                              verb, changes[i].path);
                         break;
                 case -EIDRM:
-                        log_error_errno(changes[i].type_or_errno, "Failed to %s %s, destination unit %s is a non-template unit.",
-                                        verb, changes[i].source, changes[i].path);
-                        logged = true;
+                        err = log_error_errno(changes[i].type, "Failed to %s %s, destination unit %s is a non-template unit.",
+                                              verb, changes[i].source, changes[i].path);
                         break;
                 case -EUCLEAN:
-                        log_error_errno(changes[i].type_or_errno,
-                                        "Failed to %s unit, \"%s\" is not a valid unit name.",
-                                        verb, changes[i].path);
-                        logged = true;
+                        err = log_error_errno(changes[i].type,
+                                              "Failed to %s unit, \"%s\" is not a valid unit name.",
+                                              verb, changes[i].path);
                         break;
                 case -ELOOP:
-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s",
-                                        verb, changes[i].path);
-                        logged = true;
+                        err = log_error_errno(changes[i].type, "Failed to %s unit, refusing to operate on linked unit file %s.",
+                                              verb, changes[i].path);
                         break;
-
+                case -EXDEV:
+                        if (changes[i].source)
+                                err = log_error_errno(changes[i].type, "Failed to %s unit, cannot alias %s as %s.",
+                                                      verb, changes[i].source, changes[i].path);
+                        else
+                                err = log_error_errno(changes[i].type, "Failed to %s unit, invalid unit reference \"%s\".",
+                                                      verb, changes[i].path);
+                        break;
                 case -ENOENT:
-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.", verb, changes[i].path);
-                        logged = true;
+                        err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s does not exist.",
+                                              verb, changes[i].path);
                         break;
-
+                case -EUNATCH:
+                        err = log_error_errno(changes[i].type, "Failed to %s unit, cannot resolve specifiers in \"%s\".",
+                                              verb, changes[i].path);
+                        break;
                 default:
-                        assert(changes[i].type_or_errno < 0);
-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file %s: %m.",
-                                        verb, changes[i].path);
-                        logged = true;
+                        assert(changes[i].type < 0);
+                        err = log_error_errno(changes[i].type, "Failed to %s unit, file \"%s\": %m",
+                                              verb, changes[i].path);
                 }
         }
 
-        if (r < 0 && !logged)
+        if (r < 0 && err >= 0)
                 log_error_errno(r, "Failed to %s: %m.", verb);
 }
 
 /**
- * Checks if two paths or symlinks from wd are the same, when root is the root of the filesystem.
- * wc should be the full path in the host file system.
+ * Checks if two symlink targets (starting from src) are equivalent as far as the unit enablement logic is
+ * concerned. If the target is in the unit search path, then anything with the same name is equivalent.
+ * If outside the unit search path, paths must be identical.
  */
-static bool chroot_symlinks_same(const char *root, const char *wd, const char *a, const char *b) {
-        assert(path_is_absolute(wd));
+static int chroot_unit_symlinks_equivalent(
+                const LookupPaths *lp,
+                const char *src,
+                const char *target_a,
+                const char *target_b) {
+
+        assert(lp);
+        assert(src);
+        assert(target_a);
+        assert(target_b);
 
         /* This will give incorrect results if the paths are relative and go outside
          * of the chroot. False negatives are possible. */
 
-        if (!root)
-                root = "/";
+        const char *root = lp->root_dir ?: "/";
+        _cleanup_free_ char *dirname = NULL;
+        int r;
 
-        a = strjoina(path_is_absolute(a) ? root : wd, "/", a);
-        b = strjoina(path_is_absolute(b) ? root : wd, "/", b);
-        return path_equal_or_files_same(a, b, 0);
+        if (!path_is_absolute(target_a) || !path_is_absolute(target_b)) {
+                r = path_extract_directory(src, &dirname);
+                if (r < 0)
+                        return r;
+        }
+
+        _cleanup_free_ char *a = path_join(path_is_absolute(target_a) ? root : dirname, target_a);
+        _cleanup_free_ char *b = path_join(path_is_absolute(target_b) ? root : dirname, target_b);
+        if (!a || !b)
+                return log_oom();
+
+        r = path_equal_or_files_same(a, b, 0);
+        if (r != 0)
+                return r;
+
+        _cleanup_free_ char *a_name = NULL, *b_name = NULL;
+        r = path_extract_filename(a, &a_name);
+        if (r < 0)
+                return r;
+        r = path_extract_filename(b, &b_name);
+        if (r < 0)
+                return r;
+
+        return streq(a_name, b_name) &&
+               path_startswith_strv(a, lp->search_path) &&
+               path_startswith_strv(b, lp->search_path);
 }
 
 static int create_symlink(
-                const LookupPaths *paths,
+                const LookupPaths *lp,
                 const char *old_path,
                 const char *new_path,
                 bool force,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_free_ char *dest = NULL, *dirname = NULL;
+        _cleanup_free_ char *dest = NULL;
         const char *rp;
         int r;
 
         assert(old_path);
         assert(new_path);
 
-        rp = skip_root(paths, old_path);
+        rp = skip_root(lp->root_dir, old_path);
         if (rp)
                 old_path = rp;
 
-        /* Actually create a symlink, and remember that we did. Is
-         * smart enough to check if there's already a valid symlink in
-         * place.
+        /* Actually create a symlink, and remember that we did. This function is
+         * smart enough to check if there's already a valid symlink in place.
          *
-         * Returns 1 if a symlink was created or already exists and points to
-         * the right place, or negative on error.
+         * Returns 1 if a symlink was created or already exists and points to the
+         * right place, or negative on error.
          */
 
-        mkdir_parents_label(new_path, 0755);
+        (void) mkdir_parents_label(new_path, 0755);
 
         if (symlink(old_path, new_path) >= 0) {
-                unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path);
+                r = install_changes_add(changes, n_changes, INSTALL_CHANGE_SYMLINK, new_path, old_path);
+                if (r < 0)
+                        return r;
                 return 1;
         }
 
-        if (errno != EEXIST) {
-                unit_file_changes_add(changes, n_changes, -errno, new_path, NULL);
-                return -errno;
-        }
+        if (errno != EEXIST)
+                return install_changes_add(changes, n_changes, -errno, new_path, NULL);
 
         r = readlink_malloc(new_path, &dest);
         if (r < 0) {
@@ -478,32 +544,28 @@
                 if (r == -EINVAL)
                         r = -EEXIST;
 
-                unit_file_changes_add(changes, n_changes, r, new_path, NULL);
-                return r;
+                return install_changes_add(changes, n_changes, r, new_path, NULL);
         }
 
-        dirname = dirname_malloc(new_path);
-        if (!dirname)
-                return -ENOMEM;
-
-        if (chroot_symlinks_same(paths->root_dir, dirname, dest, old_path)) {
-                log_debug("Symlink %s → %s already exists", new_path, dest);
+        if (chroot_unit_symlinks_equivalent(lp, new_path, dest, old_path)) {
+                log_debug("Symlink %s %s %s already exists",
+                          new_path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dest);
                 return 1;
         }
 
-        if (!force) {
-                unit_file_changes_add(changes, n_changes, -EEXIST, new_path, dest);
-                return -EEXIST;
-        }
+        if (!force)
+                return install_changes_add(changes, n_changes, -EEXIST, new_path, dest);
 
         r = symlink_atomic(old_path, new_path);
-        if (r < 0) {
-                unit_file_changes_add(changes, n_changes, r, new_path, NULL);
-                return r;
-        }
+        if (r < 0)
+                return install_changes_add(changes, n_changes, r, new_path, NULL);
 
-        unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, new_path, NULL);
-        unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path);
+        r = install_changes_add(changes, n_changes, INSTALL_CHANGE_UNLINK, new_path, NULL);
+        if (r < 0)
+                return r;
+        r = install_changes_add(changes, n_changes, INSTALL_CHANGE_SYMLINK, new_path, old_path);
+        if (r < 0)
+                return r;
 
         return 1;
 }
@@ -544,11 +606,10 @@
                 const LookupPaths *lp,
                 bool dry_run,
                 bool *restart,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0;
 
         assert(remove_symlinks_to);
@@ -566,7 +627,7 @@
 
         rewinddir(d);
 
-        FOREACH_DIRENT(de, d, return -errno) {
+        FOREACH_DIRENT(de, d, return -errno)
 
                 if (de->d_type == DT_DIR) {
                         _cleanup_free_ char *p = NULL;
@@ -594,8 +655,7 @@
                                 r = q;
 
                 } else if (de->d_type == DT_LNK) {
-                        _cleanup_free_ char *p = NULL, *dest = NULL;
-                        const char *rp;
+                        _cleanup_free_ char *p = NULL;
                         bool found;
                         int q;
 
@@ -607,21 +667,42 @@
                                 return -ENOMEM;
                         path_simplify(p);
 
-                        q = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &dest, NULL);
-                        if (q == -ENOENT)
-                                continue;
-                        if (q < 0) {
-                                if (r == 0)
-                                        r = q;
-                                continue;
+                        /* We remove all links pointing to a file or path that is marked, as well as all
+                         * files sharing the same name as a file that is marked, and files sharing the same
+                         * name after the instance has been removed. Do path chasing only if we don't already
+                         * know that we want to remove the symlink. */
+                        found = set_contains(remove_symlinks_to, de->d_name);
+
+                        if (!found) {
+                                _cleanup_free_ char *template = NULL;
+
+                                q = unit_name_template(de->d_name, &template);
+                                if (q < 0 && q != -EINVAL)
+                                        return q;
+                                if (q >= 0)
+                                        found = set_contains(remove_symlinks_to, template);
                         }
 
-                        /* We remove all links pointing to a file or path that is marked, as well as all files sharing
-                         * the same name as a file that is marked. */
+                        if (!found) {
+                                _cleanup_free_ char *dest = NULL;
 
-                        found = set_contains(remove_symlinks_to, dest) ||
-                                set_contains(remove_symlinks_to, basename(dest)) ||
-                                set_contains(remove_symlinks_to, de->d_name);
+                                q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL);
+                                if (q == -ENOENT)
+                                        continue;
+                                if (q < 0) {
+                                        log_debug_errno(q, "Failed to resolve symlink \"%s\": %m", p);
+                                        install_changes_add(changes, n_changes, q, p, NULL);
+
+                                        if (r == 0)
+                                                r = q;
+                                        continue;
+                                }
+
+                                found = set_contains(remove_symlinks_to, dest) ||
+                                        set_contains(remove_symlinks_to, basename(dest));
+
+                        }
+
 
                         if (!found)
                                 continue;
@@ -630,26 +711,27 @@
                                 if (unlinkat(fd, de->d_name, 0) < 0 && errno != ENOENT) {
                                         if (r == 0)
                                                 r = -errno;
-                                        unit_file_changes_add(changes, n_changes, -errno, p, NULL);
+                                        install_changes_add(changes, n_changes, -errno, p, NULL);
                                         continue;
                                 }
 
                                 (void) rmdir_parents(p, config_path);
                         }
 
-                        unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, p, NULL);
+                        q = install_changes_add(changes, n_changes, INSTALL_CHANGE_UNLINK, p, NULL);
+                        if (q < 0)
+                                return q;
 
                         /* Now, remember the full path (but with the root prefix removed) of
                          * the symlink we just removed, and remove any symlinks to it, too. */
 
-                        rp = skip_root(lp, p);
+                        const char *rp = skip_root(lp->root_dir, p);
                         q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: p);
                         if (q < 0)
                                 return q;
                         if (q > 0 && !dry_run)
                                 *restart = true;
                 }
-        }
 
         return r;
 }
@@ -659,10 +741,10 @@
                 const char *config_path,
                 const LookupPaths *lp,
                 bool dry_run,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         bool restart;
         int r = 0;
 
@@ -693,7 +775,7 @@
         return r;
 }
 
-static int is_symlink_with_known_name(const UnitFileInstallInfo *i, const char *name) {
+static int is_symlink_with_known_name(const InstallInfo *i, const char *name) {
         int r;
 
         if (streq(name, i->name))
@@ -722,63 +804,79 @@
                 DIR *dir,
                 const char *dir_path,
                 const char *root_dir,
-                const UnitFileInstallInfo *i,
-                bool match_aliases,
+                const InstallInfo *info,
+                bool ignore_destination,
+                bool match_name,
                 bool ignore_same_name,
                 const char *config_path,
                 bool *same_name_link) {
 
-        struct dirent *de;
         int r = 0;
 
         FOREACH_DIRENT(de, dir, return -errno) {
-                _cleanup_free_ char *dest = NULL;
-                bool found_path = false, found_dest, b = false;
+                bool found_path = false, found_dest = false, b = false;
                 int q;
 
                 if (de->d_type != DT_LNK)
                         continue;
 
-                /* Acquire symlink destination */
-                q = readlinkat_malloc(dirfd(dir), de->d_name, &dest);
-                if (q == -ENOENT)
-                        continue;
-                if (q < 0) {
-                        if (r == 0)
-                                r = q;
-                        continue;
+                if (!ignore_destination) {
+                        _cleanup_free_ char *dest = NULL;
+
+                        /* Acquire symlink destination */
+                        q = readlinkat_malloc(dirfd(dir), de->d_name, &dest);
+                        if (q == -ENOENT)
+                                continue;
+                        if (q < 0) {
+                                if (r == 0)
+                                        r = q;
+                                continue;
+                        }
+
+                        /* Make absolute */
+                        if (!path_is_absolute(dest)) {
+                                char *x;
+
+                                x = path_join(dir_path, dest);
+                                if (!x)
+                                        return -ENOMEM;
+
+                                free_and_replace(dest, x);
+                        }
+
+                        /* Check if what the symlink points to matches what we are looking for */
+                        found_dest = streq(basename(dest), info->name);
                 }
 
-                /* Make absolute */
-                if (!path_is_absolute(dest)) {
-                        char *x;
+                assert(unit_name_is_valid(info->name, UNIT_NAME_ANY));
 
-                        x = path_join(dir_path, dest);
-                        if (!x)
-                                return -ENOMEM;
+                /* Check if the symlink itself matches what we are looking for.
+                 *
+                 * If ignore_destination is specified, we only look at the source name.
+                 *
+                 * If ignore_same_name is specified, we are in one of the directories which
+                 * have lower priority than the unit file, and even if a file or symlink with
+                 * this name was found, we should ignore it. */
 
-                        free_and_replace(dest, x);
+                if (ignore_destination || !ignore_same_name)
+                        found_path = streq(de->d_name, info->name);
+
+                if (!found_path && ignore_destination) {
+                        _cleanup_free_ char *template = NULL;
+
+                        q = unit_name_template(de->d_name, &template);
+                        if (q < 0 && q != -EINVAL)
+                                return q;
+                        if (q >= 0)
+                                found_dest = streq(template, info->name);
                 }
 
-                assert(unit_name_is_valid(i->name, UNIT_NAME_ANY));
-                if (!ignore_same_name)
-                               /* Check if the symlink itself matches what we are looking for.
-                                *
-                                * If ignore_same_name is specified, we are in one of the directories which
-                                * have lower priority than the unit file, and even if a file or symlink with
-                                * this name was found, we should ignore it. */
-                                found_path = streq(de->d_name, i->name);
-
-                /* Check if what the symlink points to matches what we are looking for */
-                found_dest = streq(basename(dest), i->name);
-
                 if (found_path && found_dest) {
                         _cleanup_free_ char *p = NULL, *t = NULL;
 
-                        /* Filter out same name links in the main
-                         * config path */
+                        /* Filter out same name links in the main config path */
                         p = path_make_absolute(de->d_name, dir_path);
-                        t = path_make_absolute(i->name, config_path);
+                        t = path_make_absolute(info->name, config_path);
 
                         if (!p || !t)
                                 return -ENOMEM;
@@ -789,11 +887,11 @@
                 if (b)
                         *same_name_link = true;
                 else if (found_path || found_dest) {
-                        if (!match_aliases)
+                        if (!match_name)
                                 return 1;
 
                         /* Check if symlink name is in the set of names used by [Install] */
-                        q = is_symlink_with_known_name(i, de->d_name);
+                        q = is_symlink_with_known_name(info, de->d_name);
                         if (q < 0)
                                 return q;
                         if (q > 0)
@@ -806,14 +904,13 @@
 
 static int find_symlinks(
                 const char *root_dir,
-                const UnitFileInstallInfo *i,
+                const InstallInfo *i,
                 bool match_name,
                 bool ignore_same_name,
                 const char *config_path,
                 bool *same_name_link) {
 
         _cleanup_closedir_ DIR *config_dir = NULL;
-        struct dirent *de;
         int r = 0;
 
         assert(i);
@@ -845,64 +942,73 @@
 
                 d = opendir(path);
                 if (!d) {
-                        log_error_errno(errno, "Failed to open directory '%s' while scanning for symlinks, ignoring: %m", path);
+                        log_error_errno(errno, "Failed to open directory \"%s\" while scanning for symlinks, ignoring: %m", path);
                         continue;
                 }
 
-                r = find_symlinks_in_directory(d, path, root_dir, i, match_name, ignore_same_name, config_path, same_name_link);
+                r = find_symlinks_in_directory(d, path, root_dir, i,
+                                               /* ignore_destination= */ true,
+                                               /* match_name= */ match_name,
+                                               /* ignore_same_name= */ ignore_same_name,
+                                               config_path,
+                                               same_name_link);
                 if (r > 0)
                         return 1;
                 else if (r < 0)
-                        log_debug_errno(r, "Failed to lookup for symlinks in '%s': %m", path);
+                        log_debug_errno(r, "Failed to look up symlinks in \"%s\": %m", path);
         }
 
         /* We didn't find any suitable symlinks in .wants or .requires directories, let's look for linked unit files in this directory. */
         rewinddir(config_dir);
-        return find_symlinks_in_directory(config_dir, config_path, root_dir, i, match_name, ignore_same_name, config_path, same_name_link);
+        return find_symlinks_in_directory(config_dir, config_path, root_dir, i,
+                                          /* ignore_destination= */ false,
+                                          /* match_name= */ match_name,
+                                          /* ignore_same_name= */ ignore_same_name,
+                                          config_path,
+                                          same_name_link);
 }
 
 static int find_symlinks_in_scope(
-                UnitFileScope scope,
-                const LookupPaths *paths,
-                const UnitFileInstallInfo *i,
+                LookupScope scope,
+                const LookupPaths *lp,
+                const InstallInfo *info,
                 bool match_name,
                 UnitFileState *state) {
 
         bool same_name_link_runtime = false, same_name_link_config = false;
         bool enabled_in_runtime = false, enabled_at_all = false;
         bool ignore_same_name = false;
-        char **p;
         int r;
 
-        assert(paths);
-        assert(i);
+        assert(lp);
+        assert(info);
 
-        /* As we iterate over the list of search paths in paths->search_path, we may encounter "same name"
+        /* As we iterate over the list of search paths in lp->search_path, we may encounter "same name"
          * symlinks. The ones which are "below" (i.e. have lower priority) than the unit file itself are
          * effectively masked, so we should ignore them. */
 
-        STRV_FOREACH(p, paths->search_path)  {
+        STRV_FOREACH(p, lp->search_path)  {
                 bool same_name_link = false;
 
-                r = find_symlinks(paths->root_dir, i, match_name, ignore_same_name, *p, &same_name_link);
+                r = find_symlinks(lp->root_dir, info, match_name, ignore_same_name, *p, &same_name_link);
                 if (r < 0)
                         return r;
                 if (r > 0) {
                         /* We found symlinks in this dir? Yay! Let's see where precisely it is enabled. */
 
-                        if (path_equal_ptr(*p, paths->persistent_config)) {
+                        if (path_equal_ptr(*p, lp->persistent_config)) {
                                 /* This is the best outcome, let's return it immediately. */
                                 *state = UNIT_FILE_ENABLED;
                                 return 1;
                         }
 
                         /* look for global enablement of user units */
-                        if (scope == UNIT_FILE_USER && path_is_user_config_dir(*p)) {
+                        if (scope == LOOKUP_SCOPE_USER && path_is_user_config_dir(*p)) {
                                 *state = UNIT_FILE_ENABLED;
                                 return 1;
                         }
 
-                        r = path_is_runtime(paths, *p, false);
+                        r = path_is_runtime(lp, *p, false);
                         if (r < 0)
                                 return r;
                         if (r > 0)
@@ -911,10 +1017,10 @@
                                 enabled_at_all = true;
 
                 } else if (same_name_link) {
-                        if (path_equal_ptr(*p, paths->persistent_config))
+                        if (path_equal_ptr(*p, lp->persistent_config))
                                 same_name_link_config = true;
                         else {
-                                r = path_is_runtime(paths, *p, false);
+                                r = path_is_runtime(lp, *p, false);
                                 if (r < 0)
                                         return r;
                                 if (r > 0)
@@ -924,7 +1030,7 @@
 
                 /* Check if next iteration will be "below" the unit file (either a regular file
                  * or a symlink), and hence should be ignored */
-                if (!ignore_same_name && path_startswith(i->path, *p))
+                if (!ignore_same_name && path_startswith(info->path, *p))
                         ignore_same_name = true;
         }
 
@@ -937,7 +1043,7 @@
          * outside of runtime and configuration directory, then we consider it statically enabled. Note we do that only
          * for instance, not for regular names, as those are merely aliases, while instances explicitly instantiate
          * something, and hence are a much stronger concept. */
-        if (enabled_at_all && unit_name_is_valid(i->name, UNIT_NAME_INSTANCE)) {
+        if (enabled_at_all && unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) {
                 *state = UNIT_FILE_STATIC;
                 return 1;
         }
@@ -956,82 +1062,82 @@
         return 0;
 }
 
-static void install_info_free(UnitFileInstallInfo *i) {
-
+static void install_info_clear(InstallInfo *i) {
         if (!i)
                 return;
 
-        free(i->name);
-        free(i->path);
-        free(i->root);
-        strv_free(i->aliases);
-        strv_free(i->wanted_by);
-        strv_free(i->required_by);
-        strv_free(i->also);
-        free(i->default_instance);
-        free(i->symlink_target);
-        free(i);
+        i->name = mfree(i->name);
+        i->path = mfree(i->path);
+        i->root = mfree(i->root);
+        i->aliases = strv_free(i->aliases);
+        i->wanted_by = strv_free(i->wanted_by);
+        i->required_by = strv_free(i->required_by);
+        i->also = strv_free(i->also);
+        i->default_instance = mfree(i->default_instance);
+        i->symlink_target = mfree(i->symlink_target);
 }
 
-static void install_context_done(InstallContext *c) {
-        assert(c);
-
-        c->will_process = ordered_hashmap_free_with_destructor(c->will_process, install_info_free);
-        c->have_processed = ordered_hashmap_free_with_destructor(c->have_processed, install_info_free);
+static InstallInfo* install_info_free(InstallInfo *i) {
+        install_info_clear(i);
+        return mfree(i);
 }
 
-static UnitFileInstallInfo *install_info_find(InstallContext *c, const char *name) {
-        UnitFileInstallInfo *i;
+DEFINE_TRIVIAL_CLEANUP_FUNC(InstallInfo*, install_info_free);
 
-        i = ordered_hashmap_get(c->have_processed, name);
+static void install_context_done(InstallContext *ctx) {
+        assert(ctx);
+
+        ctx->will_process = ordered_hashmap_free_with_destructor(ctx->will_process, install_info_free);
+        ctx->have_processed = ordered_hashmap_free_with_destructor(ctx->have_processed, install_info_free);
+}
+
+static InstallInfo *install_info_find(InstallContext *ctx, const char *name) {
+        InstallInfo *i;
+
+        i = ordered_hashmap_get(ctx->have_processed, name);
         if (i)
                 return i;
 
-        return ordered_hashmap_get(c->will_process, name);
+        return ordered_hashmap_get(ctx->will_process, name);
 }
 
 static int install_info_may_process(
-                const UnitFileInstallInfo *i,
-                const LookupPaths *paths,
-                UnitFileChange **changes,
+                const InstallInfo *i,
+                const LookupPaths *lp,
+                InstallChange **changes,
                 size_t *n_changes) {
         assert(i);
-        assert(paths);
+        assert(lp);
 
         /* Checks whether the loaded unit file is one we should process, or is masked,
          * transient or generated and thus not subject to enable/disable operations. */
 
-        if (i->type == UNIT_FILE_TYPE_MASKED) {
-                unit_file_changes_add(changes, n_changes, -ERFKILL, i->path, NULL);
-                return -ERFKILL;
-        }
-        if (path_is_generator(paths, i->path) ||
-            path_is_transient(paths, i->path)) {
-                unit_file_changes_add(changes, n_changes, -EADDRNOTAVAIL, i->path, NULL);
-                return -EADDRNOTAVAIL;
-        }
+        if (i->install_mode == INSTALL_MODE_MASKED)
+                return install_changes_add(changes, n_changes, -ERFKILL, i->path, NULL);
+        if (path_is_generator(lp, i->path) ||
+            path_is_transient(lp, i->path))
+                return install_changes_add(changes, n_changes, -EADDRNOTAVAIL, i->path, NULL);
 
         return 0;
 }
 
 /**
- * Adds a new UnitFileInstallInfo entry under name in the InstallContext.will_process
+ * Adds a new InstallInfo entry under name in the InstallContext.will_process
  * hashmap, or retrieves the existing one if already present.
  *
  * Returns negative on error, 0 if the unit was already known, 1 otherwise.
  */
 static int install_info_add(
-                InstallContext *c,
+                InstallContext *ctx,
                 const char *name,
                 const char *path,
                 const char *root,
                 bool auxiliary,
-                UnitFileInstallInfo **ret) {
+                InstallInfo **ret) {
 
-        UnitFileInstallInfo *i = NULL;
         int r;
 
-        assert(c);
+        assert(ctx);
 
         if (!name) {
                 /* 'name' and 'path' must not both be null. Check here 'path' using assert_se() to
@@ -1044,7 +1150,7 @@
         if (!unit_name_is_valid(name, UNIT_NAME_ANY))
                 return -EINVAL;
 
-        i = install_info_find(c, name);
+        InstallInfo *i = install_info_find(ctx, name);
         if (i) {
                 i->auxiliary = i->auxiliary && auxiliary;
 
@@ -1053,49 +1159,39 @@
                 return 0;
         }
 
-        i = new(UnitFileInstallInfo, 1);
-        if (!i)
+        _cleanup_(install_info_freep) InstallInfo *alloc = new(InstallInfo, 1);
+        if (!alloc)
                 return -ENOMEM;
 
-        *i = (UnitFileInstallInfo) {
-                .type = _UNIT_FILE_TYPE_INVALID,
+        *alloc = (InstallInfo) {
+                .install_mode = _INSTALL_MODE_INVALID,
                 .auxiliary = auxiliary,
         };
 
-        i->name = strdup(name);
-        if (!i->name) {
-                r = -ENOMEM;
-                goto fail;
-        }
+        alloc->name = strdup(name);
+        if (!alloc->name)
+                return -ENOMEM;
 
         if (root) {
-                i->root = strdup(root);
-                if (!i->root) {
-                        r = -ENOMEM;
-                        goto fail;
-                }
+                alloc->root = strdup(root);
+                if (!alloc->root)
+                        return -ENOMEM;
         }
 
         if (path) {
-                i->path = strdup(path);
-                if (!i->path) {
-                        r = -ENOMEM;
-                        goto fail;
-                }
+                alloc->path = strdup(path);
+                if (!alloc->path)
+                        return -ENOMEM;
         }
 
-        r = ordered_hashmap_ensure_put(&c->will_process, &string_hash_ops, i->name, i);
+        r = ordered_hashmap_ensure_put(&ctx->will_process, &string_hash_ops, alloc->name, alloc);
         if (r < 0)
-                goto fail;
+                return r;
+        i = TAKE_PTR(alloc);
 
         if (ret)
                 *ret = i;
-
         return 1;
-
-fail:
-        install_info_free(i);
-        return r;
 }
 
 static int config_parse_alias(
@@ -1139,8 +1235,8 @@
                 void *data,
                 void *userdata) {
 
-        UnitFileInstallInfo *info = userdata;
-        InstallContext *c = data;
+        InstallInfo *info = ASSERT_PTR(userdata);
+        InstallContext *ctx = ASSERT_PTR(data);
         int r;
 
         assert(unit);
@@ -1157,11 +1253,12 @@
                 if (r == 0)
                         break;
 
-                r = install_name_printf(info, word, info->root, &printed);
+                r = install_name_printf(ctx->scope, info, word, &printed);
                 if (r < 0)
-                        return r;
+                        return log_syntax(unit, LOG_WARNING, filename, line, r,
+                                          "Failed to resolve unit name in Also=\"%s\": %m", word);
 
-                r = install_info_add(c, printed, NULL, info->root, /* auxiliary= */ true, NULL);
+                r = install_info_add(ctx, printed, NULL, info->root, /* auxiliary= */ true, NULL);
                 if (r < 0)
                         return r;
 
@@ -1187,7 +1284,8 @@
                 void *data,
                 void *userdata) {
 
-        UnitFileInstallInfo *i = data;
+        InstallContext *ctx = ASSERT_PTR(data);
+        InstallInfo *info = ASSERT_PTR(userdata);
         _cleanup_free_ char *printed = NULL;
         int r;
 
@@ -1204,25 +1302,24 @@
                 return log_syntax(unit, LOG_WARNING, filename, line, 0,
                                   "DefaultInstance= only makes sense for template units, ignoring.");
 
-        r = install_name_printf(i, rvalue, i->root, &printed);
+        r = install_name_printf(ctx->scope, info, rvalue, &printed);
         if (r < 0)
-                return r;
+                return log_syntax(unit, LOG_WARNING, filename, line, r,
+                                  "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue);
 
-        if (isempty(printed)) {
-                i->default_instance = mfree(i->default_instance);
-                return 0;
-        }
+        if (isempty(printed))
+                printed = mfree(printed);
 
-        if (!unit_instance_is_valid(printed))
+        if (printed && !unit_instance_is_valid(printed))
                 return log_syntax(unit, LOG_WARNING, filename, line, SYNTHETIC_ERRNO(EINVAL),
                                   "Invalid DefaultInstance= value \"%s\".", printed);
 
-        return free_and_replace(i->default_instance, printed);
+        return free_and_replace(info->default_instance, printed);
 }
 
 static int unit_file_load(
-                InstallContext *c,
-                UnitFileInstallInfo *info,
+                InstallContext *ctx,
+                InstallInfo *info,
                 const char *path,
                 const char *root_dir,
                 SearchFlags flags) {
@@ -1232,13 +1329,13 @@
                 { "Install", "WantedBy",        config_parse_strv,             0, &info->wanted_by         },
                 { "Install", "RequiredBy",      config_parse_strv,             0, &info->required_by       },
                 { "Install", "DefaultInstance", config_parse_default_instance, 0, info                     },
-                { "Install", "Also",            config_parse_also,             0, c                        },
+                { "Install", "Also",            config_parse_also,             0, ctx                      },
                 {}
         };
 
         UnitType type;
         _cleanup_fclose_ FILE *f = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
         int r;
 
@@ -1260,9 +1357,9 @@
                                 return -errno;
 
                         if (null_or_empty(&st))
-                                info->type = UNIT_FILE_TYPE_MASKED;
+                                info->install_mode = INSTALL_MODE_MASKED;
                         else if (S_ISREG(st.st_mode))
-                                info->type = UNIT_FILE_TYPE_REGULAR;
+                                info->install_mode = INSTALL_MODE_REGULAR;
                         else if (S_ISLNK(st.st_mode))
                                 return -ELOOP;
                         else if (S_ISDIR(st.st_mode))
@@ -1292,7 +1389,7 @@
 
         if (null_or_empty(&st)) {
                 if ((flags & SEARCH_DROPIN) == 0)
-                        info->type = UNIT_FILE_TYPE_MASKED;
+                        info->install_mode = INSTALL_MODE_MASKED;
 
                 return 0;
         }
@@ -1305,8 +1402,8 @@
         if (!f)
                 return -errno;
 
-        /* c is only needed if we actually load the file (it's referenced from items[] btw, in case you wonder.) */
-        assert(c);
+        /* ctx is only needed if we actually load the file (it's referenced from items[] btw, in case you wonder.) */
+        assert(ctx);
 
         r = config_parse(info->name, path, f,
                          "Install\0"
@@ -1326,10 +1423,10 @@
                          0, info,
                          NULL);
         if (r < 0)
-                return log_debug_errno(r, "Failed to parse %s: %m", info->name);
+                return log_debug_errno(r, "Failed to parse \"%s\": %m", info->name);
 
         if ((flags & SEARCH_DROPIN) == 0)
-                info->type = UNIT_FILE_TYPE_REGULAR;
+                info->install_mode = INSTALL_MODE_REGULAR;
 
         return
                 (int) strv_length(info->aliases) +
@@ -1338,89 +1435,42 @@
 }
 
 static int unit_file_load_or_readlink(
-                InstallContext *c,
-                UnitFileInstallInfo *info,
+                InstallContext *ctx,
+                InstallInfo *info,
                 const char *path,
-                const char *root_dir,
+                const LookupPaths *lp,
                 SearchFlags flags) {
-
-        _cleanup_free_ char *resolved = NULL;
         int r;
 
-        r = unit_file_load(c, info, path, root_dir, flags);
+        r = unit_file_load(ctx, info, path, lp->root_dir, flags);
         if (r != -ELOOP || (flags & SEARCH_DROPIN))
                 return r;
 
-        r = chase_symlinks(path, root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL);
-        if (r >= 0 &&
-            root_dir &&
-            path_equal_ptr(path_startswith(resolved, root_dir), "dev/null"))
-                /* When looking under root_dir, we can't expect /dev/ to be mounted,
-                 * so let's see if the path is a (possibly dangling) symlink to /dev/null. */
-                info->type = UNIT_FILE_TYPE_MASKED;
+        /* This is a symlink, let's read and verify it. */
+        r = unit_file_resolve_symlink(lp->root_dir, lp->search_path,
+                                      NULL, AT_FDCWD, path,
+                                      true, &info->symlink_target);
+        if (r < 0)
+                return r;
+        bool outside_search_path = r > 0;
 
-        else if (r > 0 && null_or_empty_path(resolved) > 0)
-
-                info->type = UNIT_FILE_TYPE_MASKED;
-
-        else {
-                _cleanup_free_ char *target = NULL;
-                const char *bn;
-                UnitType a, b;
-
-                /* This is a symlink, let's read it. We read the link again, because last time
-                 * we followed the link until resolution, and here we need to do one step. */
-
-                r = readlink_malloc(path, &target);
-                if (r < 0)
-                        return r;
-
-                bn = basename(target);
-
-                if (unit_name_is_valid(info->name, UNIT_NAME_PLAIN)) {
-
-                        if (!unit_name_is_valid(bn, UNIT_NAME_PLAIN))
-                                return -EINVAL;
-
-                } else if (unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) {
-
-                        if (!unit_name_is_valid(bn, UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE))
-                                return -EINVAL;
-
-                } else if (unit_name_is_valid(info->name, UNIT_NAME_TEMPLATE)) {
-
-                        if (!unit_name_is_valid(bn, UNIT_NAME_TEMPLATE))
-                                return -EINVAL;
-                } else
-                        return -EINVAL;
-
-                /* Enforce that the symlink destination does not
-                 * change the unit file type. */
-
-                a = unit_name_to_type(info->name);
-                b = unit_name_to_type(bn);
-                if (a < 0 || b < 0 || a != b)
-                        return -EINVAL;
-
-                if (path_is_absolute(target))
-                        /* This is an absolute path, prefix the root so that we always deal with fully qualified paths */
-                        info->symlink_target = path_join(root_dir, target);
-                else
-                        /* This is a relative path, take it relative to the dir the symlink is located in. */
-                        info->symlink_target = file_in_same_dir(path, target);
-                if (!info->symlink_target)
-                        return -ENOMEM;
-
-                info->type = UNIT_FILE_TYPE_SYMLINK;
-        }
+        r = null_or_empty_path_with_root(info->symlink_target, lp->root_dir);
+        if (r < 0 && r != -ENOENT)
+                return log_debug_errno(r, "Failed to stat %s: %m", info->symlink_target);
+        if (r > 0)
+                info->install_mode = INSTALL_MODE_MASKED;
+        else if (outside_search_path)
+                info->install_mode = INSTALL_MODE_LINKED;
+        else
+                info->install_mode = INSTALL_MODE_ALIAS;
 
         return 0;
 }
 
 static int unit_file_search(
-                InstallContext *c,
-                UnitFileInstallInfo *info,
-                const LookupPaths *paths,
+                InstallContext *ctx,
+                InstallInfo *info,
+                const LookupPaths *lp,
                 SearchFlags flags) {
 
         const char *dropin_dir_name = NULL, *dropin_template_dir_name = NULL;
@@ -1428,17 +1478,16 @@
         _cleanup_free_ char *template = NULL;
         bool found_unit = false;
         int r, result;
-        char **p;
 
         assert(info);
-        assert(paths);
+        assert(lp);
 
         /* Was this unit already loaded? */
-        if (info->type != _UNIT_FILE_TYPE_INVALID)
+        if (info->install_mode != _INSTALL_MODE_INVALID)
                 return 0;
 
         if (info->path)
-                return unit_file_load_or_readlink(c, info, info->path, paths->root_dir, flags);
+                return unit_file_load_or_readlink(ctx, info, info->path, lp, flags);
 
         assert(info->name);
 
@@ -1448,14 +1497,14 @@
                         return r;
         }
 
-        STRV_FOREACH(p, paths->search_path) {
+        STRV_FOREACH(p, lp->search_path) {
                 _cleanup_free_ char *path = NULL;
 
                 path = path_join(*p, info->name);
                 if (!path)
                         return -ENOMEM;
 
-                r = unit_file_load_or_readlink(c, info, path, paths->root_dir, flags);
+                r = unit_file_load_or_readlink(ctx, info, path, lp, flags);
                 if (r >= 0) {
                         info->path = TAKE_PTR(path);
                         result = r;
@@ -1471,14 +1520,14 @@
                  * enablement was requested.  We will check if it is
                  * possible to load template unit file. */
 
-                STRV_FOREACH(p, paths->search_path) {
+                STRV_FOREACH(p, lp->search_path) {
                         _cleanup_free_ char *path = NULL;
 
                         path = path_join(*p, template);
                         if (!path)
                                 return -ENOMEM;
 
-                        r = unit_file_load_or_readlink(c, info, path, paths->root_dir, flags);
+                        r = unit_file_load_or_readlink(ctx, info, path, lp, flags);
                         if (r >= 0) {
                                 info->path = TAKE_PTR(path);
                                 result = r;
@@ -1494,13 +1543,13 @@
                                        "Cannot find unit %s%s%s.",
                                        info->name, template ? " or " : "", strempty(template));
 
-        if (info->type == UNIT_FILE_TYPE_MASKED)
+        if (info->install_mode == INSTALL_MODE_MASKED)
                 return result;
 
         /* Search for drop-in directories */
 
         dropin_dir_name = strjoina(info->name, ".d");
-        STRV_FOREACH(p, paths->search_path) {
+        STRV_FOREACH(p, lp->search_path) {
                 char *path;
 
                 path = path_join(*p, dropin_dir_name);
@@ -1514,7 +1563,7 @@
 
         if (template) {
                 dropin_template_dir_name = strjoina(template, ".d");
-                STRV_FOREACH(p, paths->search_path) {
+                STRV_FOREACH(p, lp->search_path) {
                         char *path;
 
                         path = path_join(*p, dropin_template_dir_name);
@@ -1534,39 +1583,38 @@
                 return log_debug_errno(r, "Failed to get list of conf files: %m");
 
         STRV_FOREACH(p, files) {
-                r = unit_file_load_or_readlink(c, info, *p, paths->root_dir, flags | SEARCH_DROPIN);
+                r = unit_file_load_or_readlink(ctx, info, *p, lp, flags | SEARCH_DROPIN);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to load conf file %s: %m", *p);
+                        return log_debug_errno(r, "Failed to load conf file \"%s\": %m", *p);
         }
 
         return result;
 }
 
 static int install_info_follow(
-                InstallContext *c,
-                UnitFileInstallInfo *i,
-                const char *root_dir,
+                InstallContext *ctx,
+                InstallInfo *info,
+                const LookupPaths *lp,
                 SearchFlags flags,
                 bool ignore_different_name) {
 
-        assert(c);
-        assert(i);
+        assert(ctx);
+        assert(info);
 
-        if (i->type != UNIT_FILE_TYPE_SYMLINK)
+        if (!IN_SET(info->install_mode, INSTALL_MODE_ALIAS, INSTALL_MODE_LINKED))
                 return -EINVAL;
-        if (!i->symlink_target)
+        if (!info->symlink_target)
                 return -EINVAL;
 
-        /* If the basename doesn't match, the caller should add a
-         * complete new entry for this. */
+        /* If the basename doesn't match, the caller should add a complete new entry for this. */
 
-        if (!ignore_different_name && !streq(basename(i->symlink_target), i->name))
+        if (!ignore_different_name && !streq(basename(info->symlink_target), info->name))
                 return -EXDEV;
 
-        free_and_replace(i->path, i->symlink_target);
-        i->type = _UNIT_FILE_TYPE_INVALID;
+        free_and_replace(info->path, info->symlink_target);
+        info->install_mode = _INSTALL_MODE_INVALID;
 
-        return unit_file_load_or_readlink(c, i, i->path, root_dir, flags);
+        return unit_file_load_or_readlink(ctx, info, info->path, lp, flags);
 }
 
 /**
@@ -1574,48 +1622,47 @@
  * target, maybe more than once. Propagate the instance name if present.
  */
 static int install_info_traverse(
-                UnitFileScope scope,
-                InstallContext *c,
-                const LookupPaths *paths,
-                UnitFileInstallInfo *start,
+                InstallContext *ctx,
+                const LookupPaths *lp,
+                InstallInfo *start,
                 SearchFlags flags,
-                UnitFileInstallInfo **ret) {
+                InstallInfo **ret) {
 
-        UnitFileInstallInfo *i;
+        InstallInfo *i;
         unsigned k = 0;
         int r;
 
-        assert(paths);
+        assert(lp);
         assert(start);
-        assert(c);
+        assert(ctx);
 
-        r = unit_file_search(c, start, paths, flags);
+        r = unit_file_search(ctx, start, lp, flags);
         if (r < 0)
                 return r;
 
         i = start;
-        while (i->type == UNIT_FILE_TYPE_SYMLINK) {
+        while (IN_SET(i->install_mode, INSTALL_MODE_ALIAS, INSTALL_MODE_LINKED)) {
                 /* Follow the symlink */
 
                 if (++k > UNIT_FILE_FOLLOW_SYMLINK_MAX)
                         return -ELOOP;
 
                 if (!(flags & SEARCH_FOLLOW_CONFIG_SYMLINKS)) {
-                        r = path_is_config(paths, i->path, true);
+                        r = path_is_config(lp, i->path, true);
                         if (r < 0)
                                 return r;
                         if (r > 0)
                                 return -ELOOP;
                 }
 
-                r = install_info_follow(c, i, paths->root_dir, flags, false);
-                if (r == -EXDEV) {
+                r = install_info_follow(ctx, i, lp, flags,
+                                        /* If linked, don't look at the target name */
+                                        /* ignore_different_name= */ i->install_mode == INSTALL_MODE_LINKED);
+                if (r == -EXDEV && i->symlink_target) {
                         _cleanup_free_ char *buffer = NULL;
                         const char *bn;
 
-                        /* Target has a different name, create a new
-                         * install info object for that, and continue
-                         * with that. */
+                        /* Target is an alias, create a new install info object and continue with that. */
 
                         bn = basename(i->symlink_target);
 
@@ -1634,10 +1681,10 @@
 
                                 if (streq(buffer, i->name)) {
 
-                                        /* We filled in the instance, and the target stayed the same? If so, then let's
-                                         * honour the link as it is. */
+                                        /* We filled in the instance, and the target stayed the same? If so,
+                                         * then let's honour the link as it is. */
 
-                                        r = install_info_follow(c, i, paths->root_dir, flags, true);
+                                        r = install_info_follow(ctx, i, lp, flags, true);
                                         if (r < 0)
                                                 return r;
 
@@ -1647,12 +1694,12 @@
                                 bn = buffer;
                         }
 
-                        r = install_info_add(c, bn, NULL, paths->root_dir, /* auxiliary= */ false, &i);
+                        r = install_info_add(ctx, bn, NULL, lp->root_dir, /* auxiliary= */ false, &i);
                         if (r < 0)
                                 return r;
 
                         /* Try again, with the new target we found. */
-                        r = unit_file_search(c, i, paths, flags);
+                        r = unit_file_search(ctx, i, lp, flags);
                         if (r == -ENOENT)
                                 /* Translate error code to highlight this specific case */
                                 return -ENOLINK;
@@ -1673,70 +1720,74 @@
  * or the name (otherwise). root_dir is prepended to the path.
  */
 static int install_info_add_auto(
-                InstallContext *c,
-                const LookupPaths *paths,
+                InstallContext *ctx,
+                const LookupPaths *lp,
                 const char *name_or_path,
-                UnitFileInstallInfo **ret) {
+                InstallInfo **ret) {
 
-        assert(c);
+        assert(ctx);
         assert(name_or_path);
 
         if (path_is_absolute(name_or_path)) {
                 const char *pp;
 
-                pp = prefix_roota(paths->root_dir, name_or_path);
+                pp = prefix_roota(lp->root_dir, name_or_path);
 
-                return install_info_add(c, NULL, pp, paths->root_dir, /* auxiliary= */ false, ret);
+                return install_info_add(ctx, NULL, pp, lp->root_dir, /* auxiliary= */ false, ret);
         } else
-                return install_info_add(c, name_or_path, NULL, paths->root_dir, /* auxiliary= */ false, ret);
+                return install_info_add(ctx, name_or_path, NULL, lp->root_dir, /* auxiliary= */ false, ret);
 }
 
 static int install_info_discover(
-                UnitFileScope scope,
-                InstallContext *c,
-                const LookupPaths *paths,
-                const char *name,
+                InstallContext *ctx,
+                const LookupPaths *lp,
+                const char *name_or_path,
                 SearchFlags flags,
-                UnitFileInstallInfo **ret,
-                UnitFileChange **changes,
+                InstallInfo **ret,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        UnitFileInstallInfo *i;
+        InstallInfo *info;
         int r;
 
-        assert(c);
-        assert(paths);
-        assert(name);
+        assert(ctx);
+        assert(lp);
+        assert(name_or_path);
 
-        r = install_info_add_auto(c, paths, name, &i);
+        r = install_info_add_auto(ctx, lp, name_or_path, &info);
         if (r >= 0)
-                r = install_info_traverse(scope, c, paths, i, flags, ret);
+                r = install_info_traverse(ctx, lp, info, flags, ret);
 
         if (r < 0)
-                unit_file_changes_add(changes, n_changes, r, name, NULL);
+                install_changes_add(changes, n_changes, r, name_or_path, NULL);
         return r;
 }
 
 static int install_info_discover_and_check(
-                        UnitFileScope scope,
-                        InstallContext *c,
-                        const LookupPaths *paths,
-                        const char *name,
-                        SearchFlags flags,
-                        UnitFileInstallInfo **ret,
-                        UnitFileChange **changes,
-                        size_t *n_changes) {
+                InstallContext *ctx,
+                const LookupPaths *lp,
+                const char *name_or_path,
+                SearchFlags flags,
+                InstallInfo **ret,
+                InstallChange **changes,
+                size_t *n_changes) {
 
         int r;
 
-        r = install_info_discover(scope, c, paths, name, flags, ret, changes, n_changes);
+        r = install_info_discover(ctx, lp, name_or_path, flags, ret, changes, n_changes);
         if (r < 0)
                 return r;
 
-        return install_info_may_process(ret ? *ret : NULL, paths, changes, n_changes);
+        return install_info_may_process(ret ? *ret : NULL, lp, changes, n_changes);
 }
 
-int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst) {
+int unit_file_verify_alias(
+                const InstallInfo *info,
+                const char *dst,
+                char **ret_dst,
+                InstallChange **changes,
+                size_t *n_changes) {
+
         _cleanup_free_ char *dst_updated = NULL;
         int r;
 
@@ -1746,6 +1797,11 @@
          * ret_dst is set in cases where "instance propagation" happens, i.e. when the instance part is
          * inserted into dst. It is not normally set, even on success, so that the caller can easily
          * distinguish the case where instance propagation occurred.
+         *
+         * Returns:
+         * -EXDEV when the alias doesn't match the unit,
+         * -EUCLEAN when the name is invalid,
+         * -ELOOP when the alias it to the unit itself.
          */
 
         const char *path_alias = strrchr(dst, '/');
@@ -1756,33 +1812,39 @@
 
                 path_alias ++; /* skip over slash */
 
-                dir = dirname_malloc(dst);
-                if (!dir)
-                        return log_oom();
+                r = path_extract_directory(dst, &dir);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to extract parent directory from '%s': %m", dst);
 
                 p = endswith(dir, ".wants");
                 if (!p)
                         p = endswith(dir, ".requires");
-                if (!p)
-                        return log_warning_errno(SYNTHETIC_ERRNO(EXDEV),
-                                                 "Invalid path \"%s\" in alias.", dir);
+                if (!p) {
+                        install_changes_add(changes, n_changes, -EXDEV, dst, NULL);
+                        return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), "Invalid path \"%s\" in alias.", dir);
+                }
+
                 *p = '\0'; /* dir should now be a unit name */
 
                 UnitNameFlags type = unit_name_classify(dir);
-                if (type < 0)
-                        return log_warning_errno(SYNTHETIC_ERRNO(EXDEV),
-                                                 "Invalid unit name component \"%s\" in alias.", dir);
+                if (type < 0) {
+                        install_changes_add(changes, n_changes, -EXDEV, dst, NULL);
+                        return log_debug_errno(SYNTHETIC_ERRNO(EXDEV),
+                                               "Invalid unit name component \"%s\" in alias.", dir);
+                }
 
                 const bool instance_propagation = type == UNIT_NAME_TEMPLATE;
 
                 /* That's the name we want to use for verification. */
-                r = unit_symlink_name_compatible(path_alias, i->name, instance_propagation);
+                r = unit_symlink_name_compatible(path_alias, info->name, instance_propagation);
                 if (r < 0)
                         return log_error_errno(r, "Failed to verify alias validity: %m");
-                if (r == 0)
-                        return log_warning_errno(SYNTHETIC_ERRNO(EXDEV),
-                                                 "Invalid unit %s symlink %s.",
-                                                 i->name, dst);
+                if (r == 0) {
+                        install_changes_add(changes, n_changes, -EXDEV, dst, info->name);
+                        return log_debug_errno(SYNTHETIC_ERRNO(EXDEV),
+                                               "Invalid unit \"%s\" symlink \"%s\".",
+                                               info->name, dst);
+                }
 
         } else {
                 /* If the symlink target has an instance set and the symlink source doesn't, we "propagate
@@ -1790,9 +1852,11 @@
                 if (unit_name_is_valid(dst, UNIT_NAME_TEMPLATE)) {
                         _cleanup_free_ char *inst = NULL;
 
-                        UnitNameFlags type = unit_name_to_instance(i->name, &inst);
-                        if (type < 0)
-                                return log_error_errno(type, "Failed to extract instance name from %s: %m", i->name);
+                        UnitNameFlags type = unit_name_to_instance(info->name, &inst);
+                        if (type < 0) {
+                                install_changes_add(changes, n_changes, -EUCLEAN, info->name, NULL);
+                                return log_debug_errno(type, "Failed to extract instance name from \"%s\": %m", info->name);
+                        }
 
                         if (type == UNIT_NAME_INSTANCE) {
                                 r = unit_name_replace_instance(dst, inst, &dst_updated);
@@ -1802,10 +1866,14 @@
                         }
                 }
 
-                r = unit_validate_alias_symlink_and_warn(dst_updated ?: dst, i->name);
-                if (r < 0)
+                r = unit_validate_alias_symlink_or_warn(LOG_DEBUG, dst_updated ?: dst, info->name);
+                if (r == -ELOOP)  /* -ELOOP means self-alias, which we (quietly) ignore */
                         return r;
-
+                if (r < 0)
+                        return install_changes_add(changes, n_changes,
+                                                   r == -EINVAL ? -EXDEV : r,
+                                                   dst_updated ?: dst,
+                                                   info->name);
         }
 
         *ret_dst = TAKE_PTR(dst_updated);
@@ -1813,111 +1881,123 @@
 }
 
 static int install_info_symlink_alias(
-                UnitFileInstallInfo *i,
-                const LookupPaths *paths,
+                LookupScope scope,
+                InstallInfo *info,
+                const LookupPaths *lp,
                 const char *config_path,
                 bool force,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        char **s;
         int r = 0, q;
 
-        assert(i);
-        assert(paths);
+        assert(info);
+        assert(lp);
         assert(config_path);
 
-        STRV_FOREACH(s, i->aliases) {
+        STRV_FOREACH(s, info->aliases) {
                 _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL;
+                bool broken;
 
-                q = install_path_printf(i, *s, i->root, &dst);
-                if (q < 0)
-                        return q;
-
-                q = unit_file_verify_alias(i, dst, &dst_updated);
-                if (q < 0)
+                q = install_name_printf(scope, info, *s, &dst);
+                if (q < 0) {
+                        install_changes_add(changes, n_changes, q, *s, NULL);
+                        r = r < 0 ? r : q;
                         continue;
+                }
+
+                q = unit_file_verify_alias(info, dst, &dst_updated, changes, n_changes);
+                if (q == -ELOOP)
+                        continue;
+                if (q < 0) {
+                        r = r < 0 ? r : q;
+                        continue;
+                }
 
                 alias_path = path_make_absolute(dst_updated ?: dst, config_path);
                 if (!alias_path)
                         return -ENOMEM;
 
-                q = create_symlink(paths, i->path, alias_path, force, changes, n_changes);
-                if (r == 0)
-                        r = q;
+                q = chase_symlinks(alias_path, lp->root_dir, CHASE_NONEXISTENT, NULL, NULL);
+                if (q < 0 && q != -ENOENT) {
+                        r = r < 0 ? r : q;
+                        continue;
+                }
+                broken = q == 0; /* symlink target does not exist? */
+
+                q = create_symlink(lp, info->path, alias_path, force || broken, changes, n_changes);
+                r = r < 0 ? r : q;
         }
 
         return r;
 }
 
 static int install_info_symlink_wants(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags file_flags,
-                UnitFileInstallInfo *i,
-                const LookupPaths *paths,
+                InstallInfo *info,
+                const LookupPaths *lp,
                 const char *config_path,
                 char **list,
                 const char *suffix,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_free_ char *buf = NULL;
+        _cleanup_(install_info_clear) InstallInfo instance = {
+                .install_mode = _INSTALL_MODE_INVALID,
+        };
+
         UnitNameFlags valid_dst_type = UNIT_NAME_ANY;
         const char *n;
-        char **s;
         int r = 0, q;
 
-        assert(i);
-        assert(paths);
+        assert(info);
+        assert(lp);
         assert(config_path);
 
         if (strv_isempty(list))
                 return 0;
 
-        if (unit_name_is_valid(i->name, UNIT_NAME_PLAIN | UNIT_NAME_INSTANCE))
+        if (unit_name_is_valid(info->name, UNIT_NAME_PLAIN | UNIT_NAME_INSTANCE))
                 /* Not a template unit. Use the name directly. */
-                n = i->name;
+                n = info->name;
 
-        else if (i->default_instance) {
-                UnitFileInstallInfo instance = {
-                        .type = _UNIT_FILE_TYPE_INVALID,
-                };
-                _cleanup_free_ char *path = NULL;
-
+        else if (info->default_instance) {
                 /* If this is a template, and we have a default instance, use it. */
 
-                r = unit_name_replace_instance(i->name, i->default_instance, &buf);
+                r = unit_name_replace_instance(info->name, info->default_instance, &instance.name);
                 if (r < 0)
                         return r;
 
-                instance.name = buf;
-                r = unit_file_search(NULL, &instance, paths, SEARCH_FOLLOW_CONFIG_SYMLINKS);
+                r = unit_file_search(NULL, &instance, lp, SEARCH_FOLLOW_CONFIG_SYMLINKS);
                 if (r < 0)
                         return r;
 
-                path = TAKE_PTR(instance.path);
+                if (instance.install_mode == INSTALL_MODE_MASKED)
+                        return install_changes_add(changes, n_changes, -ERFKILL, instance.path, NULL);
 
-                if (instance.type == UNIT_FILE_TYPE_MASKED) {
-                        unit_file_changes_add(changes, n_changes, -ERFKILL, path, NULL);
-                        return -ERFKILL;
-                }
-
-                n = buf;
+                n = instance.name;
 
         } else {
                 /* We have a template, but no instance yet. When used with an instantiated unit, we will get
                  * the instance from that unit. Cannot be used with non-instance units. */
 
                 valid_dst_type = UNIT_NAME_INSTANCE | UNIT_NAME_TEMPLATE;
-                n = i->name;
+                n = info->name;
         }
 
+        r = 0;
         STRV_FOREACH(s, list) {
                 _cleanup_free_ char *path = NULL, *dst = NULL;
 
-                q = install_name_printf(i, *s, i->root, &dst);
-                if (q < 0)
-                        return q;
+                q = install_name_printf(scope, info, *s, &dst);
+                if (q < 0) {
+                        install_changes_add(changes, n_changes, q, *s, NULL);
+                        if (r >= 0)
+                                r = q;
+
+                        continue;
+                }
 
                 if (!unit_name_is_valid(dst, valid_dst_type)) {
                         /* Generate a proper error here: EUCLEAN if the name is generally bad, EIDRM if the
@@ -1930,13 +2010,12 @@
                         if (file_flags & UNIT_FILE_IGNORE_AUXILIARY_FAILURE)
                                 continue;
 
-                        if (unit_name_is_valid(dst, UNIT_NAME_ANY)) {
-                                unit_file_changes_add(changes, n_changes, -EIDRM, dst, n);
-                                r = -EIDRM;
-                        } else {
-                                unit_file_changes_add(changes, n_changes, -EUCLEAN, dst, NULL);
-                                r = -EUCLEAN;
-                        }
+                        if (unit_name_is_valid(dst, UNIT_NAME_ANY))
+                                q = install_changes_add(changes, n_changes, -EIDRM, dst, n);
+                        else
+                                q = install_changes_add(changes, n_changes, -EUCLEAN, dst, NULL);
+                        if (r >= 0)
+                                r = q;
 
                         continue;
                 }
@@ -1945,133 +2024,138 @@
                 if (!path)
                         return -ENOMEM;
 
-                q = create_symlink(paths, i->path, path, true, changes, n_changes);
-                if (r == 0)
+                q = create_symlink(lp, info->path, path, true, changes, n_changes);
+                if ((q < 0 && r >= 0) || r == 0)
                         r = q;
 
-                if (unit_file_exists(scope, paths, dst) == 0)
-                        unit_file_changes_add(changes, n_changes, UNIT_FILE_DESTINATION_NOT_PRESENT, dst, i->path);
+                if (unit_file_exists(scope, lp, dst) == 0) {
+                        q = install_changes_add(changes, n_changes, INSTALL_CHANGE_DESTINATION_NOT_PRESENT, dst, info->path);
+                        if (q < 0)
+                                return q;
+                }
         }
 
         return r;
 }
 
 static int install_info_symlink_link(
-                UnitFileInstallInfo *i,
-                const LookupPaths *paths,
+                InstallInfo *info,
+                const LookupPaths *lp,
                 const char *config_path,
                 bool force,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
         _cleanup_free_ char *path = NULL;
         int r;
 
-        assert(i);
-        assert(paths);
+        assert(info);
+        assert(lp);
         assert(config_path);
-        assert(i->path);
+        assert(info->path);
 
-        r = in_search_path(paths, i->path);
+        r = in_search_path(lp, info->path);
         if (r < 0)
                 return r;
         if (r > 0)
                 return 0;
 
-        path = path_join(config_path, i->name);
+        path = path_join(config_path, info->name);
         if (!path)
                 return -ENOMEM;
 
-        return create_symlink(paths, i->path, path, force, changes, n_changes);
+        return create_symlink(lp, info->path, path, force, changes, n_changes);
 }
 
 static int install_info_apply(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags file_flags,
-                UnitFileInstallInfo *i,
-                const LookupPaths *paths,
+                InstallInfo *info,
+                const LookupPaths *lp,
                 const char *config_path,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
         int r, q;
 
-        assert(i);
-        assert(paths);
+        assert(info);
+        assert(lp);
         assert(config_path);
 
-        if (i->type != UNIT_FILE_TYPE_REGULAR)
+        if (info->install_mode != INSTALL_MODE_REGULAR)
                 return 0;
 
         bool force = file_flags & UNIT_FILE_FORCE;
 
-        r = install_info_symlink_alias(i, paths, config_path, force, changes, n_changes);
-
-        q = install_info_symlink_wants(scope, file_flags, i, paths, config_path, i->wanted_by, ".wants/", changes, n_changes);
-        if (r == 0)
-                r = q;
-
-        q = install_info_symlink_wants(scope, file_flags, i, paths, config_path, i->required_by, ".requires/", changes, n_changes);
-        if (r == 0)
-                r = q;
-
-        q = install_info_symlink_link(i, paths, config_path, force, changes, n_changes);
+        r = install_info_symlink_link(info, lp, config_path, force, changes, n_changes);
         /* Do not count links to the unit file towards the "carries_install_info" count */
-        if (r == 0 && q < 0)
+        if (r < 0)
+                /* If linking of the file failed, do not try to create other symlinks,
+                 * because they might would pointing to a non-existent or wrong unit. */
+                return r;
+
+        r = install_info_symlink_alias(scope, info, lp, config_path, force, changes, n_changes);
+
+        q = install_info_symlink_wants(scope, file_flags, info, lp, config_path, info->wanted_by, ".wants/", changes, n_changes);
+        if (r == 0)
+                r = q;
+
+        q = install_info_symlink_wants(scope, file_flags, info, lp, config_path, info->required_by, ".requires/", changes, n_changes);
+        if (r == 0)
                 r = q;
 
         return r;
 }
 
 static int install_context_apply(
-                UnitFileScope scope,
+                InstallContext *ctx,
+                const LookupPaths *lp,
                 UnitFileFlags file_flags,
-                InstallContext *c,
-                const LookupPaths *paths,
                 const char *config_path,
                 SearchFlags flags,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        UnitFileInstallInfo *i;
+        InstallInfo *i;
         int r;
 
-        assert(c);
-        assert(paths);
+        assert(ctx);
+        assert(lp);
         assert(config_path);
 
-        if (ordered_hashmap_isempty(c->will_process))
+        if (ordered_hashmap_isempty(ctx->will_process))
                 return 0;
 
-        r = ordered_hashmap_ensure_allocated(&c->have_processed, &string_hash_ops);
+        r = ordered_hashmap_ensure_allocated(&ctx->have_processed, &string_hash_ops);
         if (r < 0)
                 return r;
 
         r = 0;
-        while ((i = ordered_hashmap_first(c->will_process))) {
+        while ((i = ordered_hashmap_first(ctx->will_process))) {
                 int q;
 
-                q = ordered_hashmap_move_one(c->have_processed, c->will_process, i->name);
+                q = ordered_hashmap_move_one(ctx->have_processed, ctx->will_process, i->name);
                 if (q < 0)
                         return q;
 
-                q = install_info_traverse(scope, c, paths, i, flags, NULL);
+                q = install_info_traverse(ctx, lp, i, flags, NULL);
                 if (q < 0) {
                         if (i->auxiliary) {
-                                q = unit_file_changes_add(changes, n_changes, UNIT_FILE_AUXILIARY_FAILED, NULL, i->name);
+                                q = install_changes_add(changes, n_changes, INSTALL_CHANGE_AUXILIARY_FAILED, i->name, NULL);
                                 if (q < 0)
                                         return q;
                                 continue;
                         }
 
-                        unit_file_changes_add(changes, n_changes, q, i->name, NULL);
-                        return q;
+                        return install_changes_add(changes, n_changes, q, i->name, NULL);
                 }
 
                 /* We can attempt to process a masked unit when a different unit
                  * that we were processing specifies it in Also=. */
-                if (i->type == UNIT_FILE_TYPE_MASKED) {
-                        unit_file_changes_add(changes, n_changes, UNIT_FILE_IS_MASKED, i->path, NULL);
+                if (i->install_mode == INSTALL_MODE_MASKED) {
+                        q = install_changes_add(changes, n_changes, INSTALL_CHANGE_IS_MASKED, i->path, NULL);
+                        if (q < 0)
+                                return q;
                         if (r >= 0)
                                 /* Assume that something *could* have been enabled here,
                                  * avoid "empty [Install] section" warning. */
@@ -2079,10 +2163,10 @@
                         continue;
                 }
 
-                if (i->type != UNIT_FILE_TYPE_REGULAR)
+                if (i->install_mode != INSTALL_MODE_REGULAR)
                         continue;
 
-                q = install_info_apply(scope, file_flags, i, paths, config_path, changes, n_changes);
+                q = install_info_apply(ctx->scope, file_flags, i, lp, config_path, changes, n_changes);
                 if (r >= 0) {
                         if (q < 0)
                                 r = q;
@@ -2095,58 +2179,60 @@
 }
 
 static int install_context_mark_for_removal(
-                UnitFileScope scope,
-                InstallContext *c,
-                const LookupPaths *paths,
+                InstallContext *ctx,
+                const LookupPaths *lp,
                 Set **remove_symlinks_to,
                 const char *config_path,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        UnitFileInstallInfo *i;
+        InstallInfo *i;
         int r;
 
-        assert(c);
-        assert(paths);
+        assert(ctx);
+        assert(lp);
         assert(config_path);
 
         /* Marks all items for removal */
 
-        if (ordered_hashmap_isempty(c->will_process))
+        if (ordered_hashmap_isempty(ctx->will_process))
                 return 0;
 
-        r = ordered_hashmap_ensure_allocated(&c->have_processed, &string_hash_ops);
+        r = ordered_hashmap_ensure_allocated(&ctx->have_processed, &string_hash_ops);
         if (r < 0)
                 return r;
 
-        while ((i = ordered_hashmap_first(c->will_process))) {
+        while ((i = ordered_hashmap_first(ctx->will_process))) {
 
-                r = ordered_hashmap_move_one(c->have_processed, c->will_process, i->name);
+                r = ordered_hashmap_move_one(ctx->have_processed, ctx->will_process, i->name);
                 if (r < 0)
                         return r;
 
-                r = install_info_traverse(scope, c, paths, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
+                r = install_info_traverse(ctx, lp, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
                 if (r == -ENOLINK) {
                         log_debug_errno(r, "Name %s leads to a dangling symlink, removing name.", i->name);
-                        unit_file_changes_add(changes, n_changes, UNIT_FILE_IS_DANGLING, i->path ?: i->name, NULL);
+                        r = install_changes_add(changes, n_changes, INSTALL_CHANGE_IS_DANGLING, i->path ?: i->name, NULL);
+                        if (r < 0)
+                                return r;
                 } else if (r == -ENOENT) {
-
                         if (i->auxiliary)  /* some unit specified in Also= or similar is missing */
                                 log_debug_errno(r, "Auxiliary unit of %s not found, removing name.", i->name);
                         else {
                                 log_debug_errno(r, "Unit %s not found, removing name.", i->name);
-                                unit_file_changes_add(changes, n_changes, r, i->path ?: i->name, NULL);
+                                r = install_changes_add(changes, n_changes, r, i->path ?: i->name, NULL);
+                                if (r < 0)
+                                        return r;
                         }
-
                 } else if (r < 0) {
                         log_debug_errno(r, "Failed to find unit %s, removing name: %m", i->name);
-                        unit_file_changes_add(changes, n_changes, r, i->path ?: i->name, NULL);
-                } else if (i->type == UNIT_FILE_TYPE_MASKED) {
+                        install_changes_add(changes, n_changes, r, i->path ?: i->name, NULL);
+                } else if (i->install_mode == INSTALL_MODE_MASKED) {
                         log_debug("Unit file %s is masked, ignoring.", i->name);
-                        unit_file_changes_add(changes, n_changes, UNIT_FILE_IS_MASKED, i->path ?: i->name, NULL);
+                        install_changes_add(changes, n_changes, INSTALL_CHANGE_IS_MASKED, i->path ?: i->name, NULL);
                         continue;
-                } else if (i->type != UNIT_FILE_TYPE_REGULAR) {
-                        log_debug("Unit %s has type %s, ignoring.", i->name, unit_file_type_to_string(i->type) ?: "invalid");
+                } else if (i->install_mode != INSTALL_MODE_REGULAR) {
+                        log_debug("Unit %s has install mode %s, ignoring.",
+                                  i->name, install_mode_to_string(i->install_mode) ?: "invalid");
                         continue;
                 }
 
@@ -2159,44 +2245,43 @@
 }
 
 int unit_file_mask(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         const char *config_path;
-        char **i;
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
+        config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
         if (!config_path)
                 return -ENXIO;
 
-        STRV_FOREACH(i, files) {
+        STRV_FOREACH(name, names) {
                 _cleanup_free_ char *path = NULL;
                 int q;
 
-                if (!unit_name_is_valid(*i, UNIT_NAME_ANY)) {
+                if (!unit_name_is_valid(*name, UNIT_NAME_ANY)) {
                         if (r == 0)
                                 r = -EINVAL;
                         continue;
                 }
 
-                path = path_make_absolute(*i, config_path);
+                path = path_make_absolute(*name, config_path);
                 if (!path)
                         return -ENOMEM;
 
-                q = create_symlink(&paths, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
+                q = create_symlink(&lp, "/dev/null", path, flags & UNIT_FILE_FORCE, changes, n_changes);
                 if (q < 0 && r >= 0)
                         r = q;
         }
@@ -2205,42 +2290,61 @@
 }
 
 int unit_file_unmask(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
         _cleanup_strv_free_ char **todo = NULL;
         const char *config_path;
         size_t n_todo = 0;
-        bool dry_run;
-        char **i;
         int r, q;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
+        config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
         if (!config_path)
                 return -ENXIO;
 
-        dry_run = !!(flags & UNIT_FILE_DRY_RUN);
+        bool dry_run = flags & UNIT_FILE_DRY_RUN;
 
-        STRV_FOREACH(i, files) {
-                _cleanup_free_ char *path = NULL;
-
-                if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
+        STRV_FOREACH(name, names) {
+                if (!unit_name_is_valid(*name, UNIT_NAME_ANY))
                         return -EINVAL;
 
-                path = path_make_absolute(*i, config_path);
+                /* If root_dir is set, we don't care about kernel commandline or generators.
+                 * But if it is not set, we need to check for interference. */
+                if (!root_dir) {
+                        _cleanup_(install_info_clear) InstallInfo info = {
+                                .name = *name,  /* We borrow *name temporarily… */
+                                .install_mode = _INSTALL_MODE_INVALID,
+                        };
+
+                        r = unit_file_search(NULL, &info, &lp, 0);
+                        if (r < 0) {
+                                if (r != -ENOENT)
+                                        log_debug_errno(r, "Failed to look up unit %s, ignoring: %m", info.name);
+                        } else if (info.install_mode == INSTALL_MODE_MASKED &&
+                                   path_is_generator(&lp, info.path)) {
+                                r = install_changes_add(changes, n_changes,
+                                                        INSTALL_CHANGE_IS_MASKED_GENERATOR, info.name, info.path);
+                                if (r < 0)
+                                        return r;
+                        }
+
+                        TAKE_PTR(info.name);  /* … and give it back here */
+                }
+
+                _cleanup_free_ char *path = path_make_absolute(*name, config_path);
                 if (!path)
                         return -ENOMEM;
 
@@ -2255,7 +2359,7 @@
                 if (!GREEDY_REALLOC0(todo, n_todo + 2))
                         return -ENOMEM;
 
-                todo[n_todo] = strdup(*i);
+                todo[n_todo] = strdup(*name);
                 if (!todo[n_todo])
                         return -ENOMEM;
 
@@ -2277,21 +2381,23 @@
                         if (errno != ENOENT) {
                                 if (r >= 0)
                                         r = -errno;
-                                unit_file_changes_add(changes, n_changes, -errno, path, NULL);
+                                install_changes_add(changes, n_changes, -errno, path, NULL);
                         }
 
                         continue;
                 }
 
-                unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL);
+                q = install_changes_add(changes, n_changes, INSTALL_CHANGE_UNLINK, path, NULL);
+                if (q < 0)
+                        return q;
 
-                rp = skip_root(&paths, path);
+                rp = skip_root(lp.root_dir, path);
                 q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: path);
                 if (q < 0)
                         return q;
         }
 
-        q = remove_marked_symlinks(remove_symlinks_to, config_path, &paths, dry_run, changes, n_changes);
+        q = remove_marked_symlinks(remove_symlinks_to, config_path, &lp, dry_run, changes, n_changes);
         if (r >= 0)
                 r = q;
 
@@ -2299,63 +2405,70 @@
 }
 
 int unit_file_link(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
                 char **files,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_strv_free_ char **todo = NULL;
         const char *config_path;
         size_t n_todo = 0;
-        char **i;
         int r, q;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
+        config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
         if (!config_path)
                 return -ENXIO;
 
-        STRV_FOREACH(i, files) {
+        STRV_FOREACH(file, files) {
                 _cleanup_free_ char *full = NULL;
                 struct stat st;
                 char *fn;
 
-                if (!path_is_absolute(*i))
-                        return -EINVAL;
+                if (!path_is_absolute(*file))
+                        return install_changes_add(changes, n_changes, -EINVAL, *file, NULL);
 
-                fn = basename(*i);
+                fn = basename(*file);
                 if (!unit_name_is_valid(fn, UNIT_NAME_ANY))
-                        return -EINVAL;
+                        return install_changes_add(changes, n_changes, -EUCLEAN, *file, NULL);
 
-                full = path_join(paths.root_dir, *i);
+                full = path_join(lp.root_dir, *file);
                 if (!full)
                         return -ENOMEM;
 
                 if (lstat(full, &st) < 0)
-                        return -errno;
+                        return install_changes_add(changes, n_changes, -errno, *file, NULL);
+
                 r = stat_verify_regular(&st);
                 if (r < 0)
-                        return r;
+                        return install_changes_add(changes, n_changes, r, *file, NULL);
 
-                q = in_search_path(&paths, *i);
-                if (q < 0)
-                        return q;
-                if (q > 0)
+                r = in_search_path(&lp, *file);
+                if (r < 0)
+                        return install_changes_add(changes, n_changes, r, *file, NULL);
+                if (r > 0)
+                        /* A silent noop if the file is already in the search path. */
                         continue;
 
+                r = underneath_search_path(&lp, *file);
+                if (r > 0)
+                        r = -ETXTBSY;
+                if (r < 0)
+                        return install_changes_add(changes, n_changes, r, *file, NULL);
+
                 if (!GREEDY_REALLOC0(todo, n_todo + 2))
                         return -ENOMEM;
 
-                todo[n_todo] = strdup(*i);
+                todo[n_todo] = strdup(*file);
                 if (!todo[n_todo])
                         return -ENOMEM;
 
@@ -2372,7 +2485,7 @@
                 if (!new_path)
                         return -ENOMEM;
 
-                q = create_symlink(&paths, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
+                q = create_symlink(&lp, *i, new_path, flags & UNIT_FILE_FORCE, changes, n_changes);
                 if (q < 0 && r >= 0)
                         r = q;
         }
@@ -2380,78 +2493,77 @@
         return r;
 }
 
-static int path_shall_revert(const LookupPaths *paths, const char *path) {
+static int path_shall_revert(const LookupPaths *lp, const char *path) {
         int r;
 
-        assert(paths);
+        assert(lp);
         assert(path);
 
         /* Checks whether the path is one where the drop-in directories shall be removed. */
 
-        r = path_is_config(paths, path, true);
+        r = path_is_config(lp, path, true);
         if (r != 0)
                 return r;
 
-        r = path_is_control(paths, path);
+        r = path_is_control(lp, path);
         if (r != 0)
                 return r;
 
-        return path_is_transient(paths, path);
+        return path_is_transient(lp, path);
 }
 
 int unit_file_revert(
-                UnitFileScope scope,
+                LookupScope scope,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names,
+                InstallChange **changes,
                 size_t *n_changes) {
 
         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_strv_free_ char **todo = NULL;
         size_t n_todo = 0;
-        char **i;
         int r, q;
 
         /* Puts a unit file back into vendor state. This means:
          *
-         * a) we remove all drop-in snippets added by the user ("config"), add to transient units ("transient"), and
-         *    added via "systemctl set-property" ("control"), but not if the drop-in is generated ("generated").
+         * a) we remove all drop-in snippets added by the user ("config"), add to transient units
+         *    ("transient"), and added via "systemctl set-property" ("control"), but not if the drop-in is
+         *    generated ("generated").
          *
-         * c) if there's a vendor unit file (i.e. one in /usr) we remove any configured overriding unit files (i.e. in
-         *    "config", but not in "transient" or "control" or even "generated").
+         * c) if there's a vendor unit file (i.e. one in /usr) we remove any configured overriding unit files
+         *    (i.e. in "config", but not in "transient" or "control" or even "generated").
          *
          * We remove all that in both the runtime and the persistent directories, if that applies.
          */
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        STRV_FOREACH(i, files) {
+        STRV_FOREACH(name, names) {
                 bool has_vendor = false;
-                char **p;
 
-                if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
+                if (!unit_name_is_valid(*name, UNIT_NAME_ANY))
                         return -EINVAL;
 
-                STRV_FOREACH(p, paths.search_path) {
+                STRV_FOREACH(p, lp.search_path) {
                         _cleanup_free_ char *path = NULL, *dropin = NULL;
                         struct stat st;
 
-                        path = path_make_absolute(*i, *p);
+                        path = path_make_absolute(*name, *p);
                         if (!path)
                                 return -ENOMEM;
 
-                        r = lstat(path, &st);
+                        r = RET_NERRNO(lstat(path, &st));
                         if (r < 0) {
-                                if (errno != ENOENT)
-                                        return -errno;
+                                if (r != -ENOENT)
+                                        return install_changes_add(changes, n_changes, r, path, NULL);
                         } else if (S_ISREG(st.st_mode)) {
                                 /* Check if there's a vendor version */
-                                r = path_is_vendor_or_generator(&paths, path);
+                                r = path_is_vendor_or_generator(&lp, path);
                                 if (r < 0)
-                                        return r;
+                                        return install_changes_add(changes, n_changes, r, path, NULL);
                                 if (r > 0)
                                         has_vendor = true;
                         }
@@ -2460,15 +2572,15 @@
                         if (!dropin)
                                 return -ENOMEM;
 
-                        r = lstat(dropin, &st);
+                        r = RET_NERRNO(lstat(dropin, &st));
                         if (r < 0) {
-                                if (errno != ENOENT)
-                                        return -errno;
+                                if (r != -ENOENT)
+                                        return install_changes_add(changes, n_changes, r, dropin, NULL);
                         } else if (S_ISDIR(st.st_mode)) {
                                 /* Remove the drop-ins */
-                                r = path_shall_revert(&paths, dropin);
+                                r = path_shall_revert(&lp, dropin);
                                 if (r < 0)
-                                        return r;
+                                        return install_changes_add(changes, n_changes, r, dropin, NULL);
                                 if (r > 0) {
                                         if (!GREEDY_REALLOC0(todo, n_todo + 2))
                                                 return -ENOMEM;
@@ -2482,22 +2594,22 @@
                         continue;
 
                 /* OK, there's a vendor version, hence drop all configuration versions */
-                STRV_FOREACH(p, paths.search_path) {
+                STRV_FOREACH(p, lp.search_path) {
                         _cleanup_free_ char *path = NULL;
                         struct stat st;
 
-                        path = path_make_absolute(*i, *p);
+                        path = path_make_absolute(*name, *p);
                         if (!path)
                                 return -ENOMEM;
 
-                        r = lstat(path, &st);
+                        r = RET_NERRNO(lstat(path, &st));
                         if (r < 0) {
-                                if (errno != ENOENT)
-                                        return -errno;
+                                if (r != -ENOENT)
+                                        return install_changes_add(changes, n_changes, r, path, NULL);
                         } else if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) {
-                                r = path_is_config(&paths, path, true);
+                                r = path_is_config(&lp, path, true);
                                 if (r < 0)
-                                        return r;
+                                        return install_changes_add(changes, n_changes, r, path, NULL);
                                 if (r > 0) {
                                         if (!GREEDY_REALLOC0(todo, n_todo + 2))
                                                 return -ENOMEM;
@@ -2514,7 +2626,6 @@
         STRV_FOREACH(i, todo) {
                 _cleanup_strv_free_ char **fs = NULL;
                 const char *rp;
-                char **j;
 
                 (void) get_files_in_directory(*i, &fs);
 
@@ -2531,22 +2642,26 @@
                         if (!t)
                                 return -ENOMEM;
 
-                        unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, t, NULL);
+                        q = install_changes_add(changes, n_changes, INSTALL_CHANGE_UNLINK, t, NULL);
+                        if (q < 0)
+                                return q;
                 }
 
-                unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, *i, NULL);
+                q = install_changes_add(changes, n_changes, INSTALL_CHANGE_UNLINK, *i, NULL);
+                if (q < 0)
+                        return q;
 
-                rp = skip_root(&paths, *i);
+                rp = skip_root(lp.root_dir, *i);
                 q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: *i);
                 if (q < 0)
                         return q;
         }
 
-        q = remove_marked_symlinks(remove_symlinks_to, paths.runtime_config, &paths, false, changes, n_changes);
+        q = remove_marked_symlinks(remove_symlinks_to, lp.runtime_config, &lp, false, changes, n_changes);
         if (r >= 0)
                 r = q;
 
-        q = remove_marked_symlinks(remove_symlinks_to, paths.persistent_config, &paths, false, changes, n_changes);
+        q = remove_marked_symlinks(remove_symlinks_to, lp.persistent_config, &lp, false, changes, n_changes);
         if (r >= 0)
                 r = q;
 
@@ -2554,65 +2669,63 @@
 }
 
 int unit_file_add_dependency(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags file_flags,
                 const char *root_dir,
-                char **files,
+                char **names,
                 const char *target,
                 UnitDependency dep,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
-        _cleanup_(install_context_done) InstallContext c = {};
-        UnitFileInstallInfo *i, *target_info;
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+        InstallInfo *info, *target_info;
         const char *config_path;
-        char **f;
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
         assert(target);
-
-        if (!IN_SET(dep, UNIT_WANTS, UNIT_REQUIRES))
-                return -EINVAL;
+        assert(IN_SET(dep, UNIT_WANTS, UNIT_REQUIRES));
 
         if (!unit_name_is_valid(target, UNIT_NAME_ANY))
-                return -EINVAL;
+                return install_changes_add(changes, n_changes, -EUCLEAN, target, NULL);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
+        config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
         if (!config_path)
                 return -ENXIO;
 
-        r = install_info_discover_and_check(scope, &c, &paths, target, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+        r = install_info_discover_and_check(&ctx, &lp, target, SEARCH_FOLLOW_CONFIG_SYMLINKS,
                                             &target_info, changes, n_changes);
         if (r < 0)
                 return r;
 
-        assert(target_info->type == UNIT_FILE_TYPE_REGULAR);
+        assert(target_info->install_mode == INSTALL_MODE_REGULAR);
 
-        STRV_FOREACH(f, files) {
+        STRV_FOREACH(name, names) {
                 char ***l;
 
-                r = install_info_discover_and_check(scope, &c, &paths, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS,
-                                                    &i, changes, n_changes);
+                r = install_info_discover_and_check(&ctx, &lp, *name,
+                                                    SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                    &info, changes, n_changes);
                 if (r < 0)
                         return r;
 
-                assert(i->type == UNIT_FILE_TYPE_REGULAR);
+                assert(info->install_mode == INSTALL_MODE_REGULAR);
 
                 /* We didn't actually load anything from the unit
                  * file, but instead just add in our new symlink to
                  * create. */
 
                 if (dep == UNIT_WANTS)
-                        l = &i->wanted_by;
+                        l = &info->wanted_by;
                 else
-                        l = &i->required_by;
+                        l = &info->required_by;
 
                 strv_free(*l);
                 *l = strv_new(target_info->name);
@@ -2620,138 +2733,245 @@
                         return -ENOMEM;
         }
 
-        return install_context_apply(scope, file_flags, &c, &paths, config_path,
+        return install_context_apply(&ctx, &lp, file_flags, config_path,
                                      SEARCH_FOLLOW_CONFIG_SYMLINKS, changes, n_changes);
 }
 
-int unit_file_enable(
-                UnitFileScope scope,
-                UnitFileFlags file_flags,
-                const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+static int do_unit_file_enable(
+                const LookupPaths *lp,
+                LookupScope scope,
+                UnitFileFlags flags,
+                const char *config_path,
+                char **names_or_paths,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
-        _cleanup_(install_context_done) InstallContext c = {};
-        const char *config_path;
-        UnitFileInstallInfo *i;
-        char **f;
+        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+        InstallInfo *info;
         int r;
 
-        assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
-
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
-        if (r < 0)
-                return r;
-
-        config_path = config_path_from_flags(&paths, file_flags);
-        if (!config_path)
-                return -ENXIO;
-
-        STRV_FOREACH(f, files) {
-                r = install_info_discover_and_check(scope, &c, &paths, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
-                                                    &i, changes, n_changes);
+        STRV_FOREACH(name, names_or_paths) {
+                r = install_info_discover_and_check(&ctx, lp, *name,
+                                                    SEARCH_LOAD | SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                    &info, changes, n_changes);
                 if (r < 0)
                         return r;
 
-                assert(i->type == UNIT_FILE_TYPE_REGULAR);
+                assert(info->install_mode == INSTALL_MODE_REGULAR);
         }
 
         /* This will return the number of symlink rules that were
            supposed to be created, not the ones actually created. This
-           is useful to determine whether the passed files had any
+           is useful to determine whether the passed units had any
            installation data at all. */
 
-        return install_context_apply(scope, file_flags, &c, &paths, config_path, SEARCH_LOAD, changes, n_changes);
+        return install_context_apply(&ctx, lp, flags, config_path,
+                                     SEARCH_LOAD, changes, n_changes);
 }
 
-int unit_file_disable(
-                UnitFileScope scope,
+int unit_file_enable(
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names_or_paths,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
-        _cleanup_(install_context_done) InstallContext c = {};
-        _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
-        const char *config_path;
-        char **i;
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        config_path = config_path_from_flags(&paths, flags);
+        const char *config_path = config_path_from_flags(&lp, flags);
         if (!config_path)
                 return -ENXIO;
 
-        STRV_FOREACH(i, files) {
-                if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
-                        return -EINVAL;
+        return do_unit_file_enable(&lp, scope, flags, config_path, names_or_paths, changes, n_changes);
+}
 
-                r = install_info_add(&c, *i, NULL, paths.root_dir, /* auxiliary= */ false, NULL);
+static int do_unit_file_disable(
+                const LookupPaths *lp,
+                LookupScope scope,
+                UnitFileFlags flags,
+                const char *config_path,
+                char **names,
+                InstallChange **changes,
+                size_t *n_changes) {
+
+        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+        _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+        InstallInfo *info;
+        bool has_install_info = false;
+        int r;
+
+        STRV_FOREACH(name, names) {
+                if (!unit_name_is_valid(*name, UNIT_NAME_ANY))
+                        return install_changes_add(changes, n_changes, -EUCLEAN, *name, NULL);
+
+                r = install_info_add(&ctx, *name, NULL, lp->root_dir, /* auxiliary= */ false, &info);
+                if (r >= 0)
+                        r = install_info_traverse(&ctx, lp, info, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
+
+                if (r < 0)
+                        return install_changes_add(changes, n_changes, r, *name, NULL);
+
+                /* If we enable multiple units, some with install info and others without,
+                 * the "empty [Install] section" warning is not shown. Let's make the behavior
+                 * of disable align with that. */
+                has_install_info = has_install_info || install_info_has_rules(info) || install_info_has_also(info);
+        }
+
+        r = install_context_mark_for_removal(&ctx, lp, &remove_symlinks_to, config_path, changes, n_changes);
+        if (r >= 0)
+                r = remove_marked_symlinks(remove_symlinks_to, config_path, lp, flags & UNIT_FILE_DRY_RUN, changes, n_changes);
+
+        if (r < 0)
+                return r;
+
+        /* The warning is shown only if it's a no-op */
+        return install_changes_have_modification(*changes, *n_changes) || has_install_info;
+}
+
+int unit_file_disable(
+                LookupScope scope,
+                UnitFileFlags flags,
+                const char *root_dir,
+                char **files,
+                InstallChange **changes,
+                size_t *n_changes) {
+
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+        int r;
+
+        assert(scope >= 0);
+        assert(scope < _LOOKUP_SCOPE_MAX);
+
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
+        if (r < 0)
+                return r;
+
+        const char *config_path = config_path_from_flags(&lp, flags);
+        if (!config_path)
+                return -ENXIO;
+
+        return do_unit_file_disable(&lp, scope, flags, config_path, files, changes, n_changes);
+}
+
+static int normalize_linked_files(
+                LookupScope scope,
+                const LookupPaths *lp,
+                char **names_or_paths,
+                char ***ret_names,
+                char ***ret_files) {
+
+        /* This is similar to normalize_filenames()/normalize_names() in src/systemctl/,
+         * but operates on real unit names. For each argument we look up the actual path
+         * where the unit is found. This way linked units can be re-enabled successfully. */
+
+        _cleanup_strv_free_ char **files = NULL, **names = NULL;
+        int r;
+
+        STRV_FOREACH(a, names_or_paths) {
+                _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+                InstallInfo *i = NULL;
+                _cleanup_free_ char *n = NULL;
+
+                r = path_extract_filename(*a, &n);
+                if (r < 0)
+                        return r;
+                if (r == O_DIRECTORY)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EISDIR),
+                                               "Unexpected path to a directory \"%s\", refusing.", *a);
+
+                if (!is_path(*a)) {
+                        r = install_info_discover(&ctx, lp, n, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, &i, NULL, NULL);
+                        if (r < 0)
+                                log_debug_errno(r, "Failed to discover unit \"%s\", operating on name: %m", n);
+                }
+
+                r = strv_consume(&names, TAKE_PTR(n));
+                if (r < 0)
+                        return r;
+
+                const char *p = NULL;
+                if (i && i->path && i->root)
+                        /* Use startswith here, because we know that paths are normalized, and
+                         * path_startswith() would give us a relative path, but we need an absolute path
+                         * relative to i->root.
+                         *
+                         * In other words: /var/tmp/instroot.1234/etc/systemd/system/frobnicator.service
+                         * is replaced by /etc/systemd/system/frobnicator.service, which is "absolute"
+                         * in a sense, but only makes sense "relative" to /var/tmp/instroot.1234/.
+                         */
+                        p = startswith(i->path, i->root);
+
+                r = strv_extend(&files, p ?: *a);
                 if (r < 0)
                         return r;
         }
 
-        r = install_context_mark_for_removal(scope, &c, &paths, &remove_symlinks_to, config_path, changes, n_changes);
-        if (r < 0)
-                return r;
-
-        return remove_marked_symlinks(remove_symlinks_to, config_path, &paths, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes);
+        *ret_names = TAKE_PTR(names);
+        *ret_files = TAKE_PTR(files);
+        return 0;
 }
 
 int unit_file_reenable(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names_or_paths,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        char **n;
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+        _cleanup_strv_free_ char **names = NULL, **files = NULL;
         int r;
-        size_t l, i;
+
+        assert(scope >= 0);
+        assert(scope < _LOOKUP_SCOPE_MAX);
+
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
+        if (r < 0)
+                return r;
+
+        const char *config_path = config_path_from_flags(&lp, flags);
+        if (!config_path)
+                return -ENXIO;
+
+        r = normalize_linked_files(scope, &lp, names_or_paths, &names, &files);
+        if (r < 0)
+                return r;
 
         /* First, we invoke the disable command with only the basename... */
-        l = strv_length(files);
-        n = newa(char*, l+1);
-        for (i = 0; i < l; i++)
-                n[i] = basename(files[i]);
-        n[i] = NULL;
-
-        r = unit_file_disable(scope, flags, root_dir, n, changes, n_changes);
+        r = do_unit_file_disable(&lp, scope, flags, config_path, names, changes, n_changes);
         if (r < 0)
                 return r;
 
         /* But the enable command with the full name */
-        return unit_file_enable(scope, flags, root_dir, files, changes, n_changes);
+        return do_unit_file_enable(&lp, scope, flags, config_path, files, changes, n_changes);
 }
 
 int unit_file_set_default(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
                 const char *name,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
-        _cleanup_(install_context_done) InstallContext c = {};
-        UnitFileInstallInfo *i;
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+        InstallInfo *info;
         const char *new_path;
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
         assert(name);
 
         if (unit_name_to_type(name) != UNIT_TARGET) /* this also validates the name */
@@ -2759,46 +2979,46 @@
         if (streq(name, SPECIAL_DEFAULT_TARGET))
                 return -EINVAL;
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        r = install_info_discover_and_check(scope, &c, &paths, name, 0, &i, changes, n_changes);
+        r = install_info_discover_and_check(&ctx, &lp, name, 0, &info, changes, n_changes);
         if (r < 0)
                 return r;
 
-        new_path = strjoina(paths.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
-        return create_symlink(&paths, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
+        new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
+        return create_symlink(&lp, info->path, new_path, flags & UNIT_FILE_FORCE, changes, n_changes);
 }
 
 int unit_file_get_default(
-                UnitFileScope scope,
+                LookupScope scope,
                 const char *root_dir,
                 char **name) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
-        _cleanup_(install_context_done) InstallContext c = {};
-        UnitFileInstallInfo *i;
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+        InstallInfo *info;
         char *n;
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
         assert(name);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        r = install_info_discover(scope, &c, &paths, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS,
-                                  &i, NULL, NULL);
+        r = install_info_discover(&ctx, &lp, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                  &info, NULL, NULL);
         if (r < 0)
                 return r;
-        r = install_info_may_process(i, &paths, NULL, 0);
+        r = install_info_may_process(info, &lp, NULL, 0);
         if (r < 0)
                 return r;
 
-        n = strdup(i->name);
+        n = strdup(info->name);
         if (!n)
                 return -ENOMEM;
 
@@ -2807,53 +3027,53 @@
 }
 
 int unit_file_lookup_state(
-                UnitFileScope scope,
-                const LookupPaths *paths,
+                LookupScope scope,
+                const LookupPaths *lp,
                 const char *name,
                 UnitFileState *ret) {
 
-        _cleanup_(install_context_done) InstallContext c = {};
-        UnitFileInstallInfo *i;
+        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+        InstallInfo *info;
         UnitFileState state;
         int r;
 
-        assert(paths);
+        assert(lp);
         assert(name);
 
         if (!unit_name_is_valid(name, UNIT_NAME_ANY))
                 return -EINVAL;
 
-        r = install_info_discover(scope, &c, paths, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
-                                  &i, NULL, NULL);
+        r = install_info_discover(&ctx, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                  &info, NULL, NULL);
         if (r < 0)
                 return log_debug_errno(r, "Failed to discover unit %s: %m", name);
 
-        assert(IN_SET(i->type, UNIT_FILE_TYPE_REGULAR, UNIT_FILE_TYPE_MASKED));
-        log_debug("Found unit %s at %s (%s)", name, strna(i->path),
-                  i->type == UNIT_FILE_TYPE_REGULAR ? "regular file" : "mask");
+        assert(IN_SET(info->install_mode, INSTALL_MODE_REGULAR, INSTALL_MODE_MASKED));
+        log_debug("Found unit %s at %s (%s)", name, strna(info->path),
+                  info->install_mode == INSTALL_MODE_REGULAR ? "regular file" : "mask");
 
         /* Shortcut things, if the caller just wants to know if this unit exists. */
         if (!ret)
                 return 0;
 
-        switch (i->type) {
+        switch (info->install_mode) {
 
-        case UNIT_FILE_TYPE_MASKED:
-                r = path_is_runtime(paths, i->path, true);
+        case INSTALL_MODE_MASKED:
+                r = path_is_runtime(lp, info->path, true);
                 if (r < 0)
                         return r;
 
                 state = r > 0 ? UNIT_FILE_MASKED_RUNTIME : UNIT_FILE_MASKED;
                 break;
 
-        case UNIT_FILE_TYPE_REGULAR:
+        case INSTALL_MODE_REGULAR:
                 /* Check if the name we were querying is actually an alias */
-                if (!streq(name, basename(i->path)) && !unit_name_is_valid(i->name, UNIT_NAME_INSTANCE)) {
+                if (!streq(name, basename(info->path)) && !unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) {
                         state = UNIT_FILE_ALIAS;
                         break;
                 }
 
-                r = path_is_generator(paths, i->path);
+                r = path_is_generator(lp, info->path);
                 if (r < 0)
                         return r;
                 if (r > 0) {
@@ -2861,7 +3081,7 @@
                         break;
                 }
 
-                r = path_is_transient(paths, i->path);
+                r = path_is_transient(lp, info->path);
                 if (r < 0)
                         return r;
                 if (r > 0) {
@@ -2872,7 +3092,7 @@
                 /* Check if any of the Alias= symlinks have been created.
                  * We ignore other aliases, and only check those that would
                  * be created by systemctl enable for this unit. */
-                r = find_symlinks_in_scope(scope, paths, i, true, &state);
+                r = find_symlinks_in_scope(scope, lp, info, true, &state);
                 if (r < 0)
                         return r;
                 if (r > 0)
@@ -2880,15 +3100,15 @@
 
                 /* Check if the file is known under other names. If it is,
                  * it might be in use. Report that as UNIT_FILE_INDIRECT. */
-                r = find_symlinks_in_scope(scope, paths, i, false, &state);
+                r = find_symlinks_in_scope(scope, lp, info, false, &state);
                 if (r < 0)
                         return r;
                 if (r > 0)
                         state = UNIT_FILE_INDIRECT;
                 else {
-                        if (unit_file_install_info_has_rules(i))
+                        if (install_info_has_rules(info))
                                 state = UNIT_FILE_DISABLED;
-                        else if (unit_file_install_info_has_also(i))
+                        else if (install_info_has_also(info))
                                 state = UNIT_FILE_INDIRECT;
                         else
                                 state = UNIT_FILE_STATIC;
@@ -2897,7 +3117,7 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected unit file type.");
+                assert_not_reached();
         }
 
         *ret = state;
@@ -2905,36 +3125,36 @@
 }
 
 int unit_file_get_state(
-                UnitFileScope scope,
+                LookupScope scope,
                 const char *root_dir,
                 const char *name,
                 UnitFileState *ret) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
         assert(name);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        return unit_file_lookup_state(scope, &paths, name, ret);
+        return unit_file_lookup_state(scope, &lp, name, ret);
 }
 
-int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name) {
-        _cleanup_(install_context_done) InstallContext c = {};
+int unit_file_exists(LookupScope scope, const LookupPaths *lp, const char *name) {
+        _cleanup_(install_context_done) InstallContext c = { .scope = scope };
         int r;
 
-        assert(paths);
+        assert(lp);
         assert(name);
 
         if (!unit_name_is_valid(name, UNIT_NAME_ANY))
                 return -EINVAL;
 
-        r = install_info_discover(scope, &c, paths, name, 0, NULL, NULL, NULL);
+        r = install_info_discover(&c, lp, name, 0, NULL, NULL, NULL);
         if (r == -ENOENT)
                 return 0;
         if (r < 0)
@@ -2976,32 +3196,31 @@
         return 0;
 }
 
-static int presets_find_config(UnitFileScope scope, const char *root_dir, char ***files) {
+static int presets_find_config(LookupScope scope, const char *root_dir, char ***files) {
         static const char* const system_dirs[] = {CONF_PATHS("systemd/system-preset"), NULL};
         static const char* const user_dirs[] = {CONF_PATHS_USR("systemd/user-preset"), NULL};
         const char* const* dirs;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
 
-        if (scope == UNIT_FILE_SYSTEM)
+        if (scope == LOOKUP_SCOPE_SYSTEM)
                 dirs = system_dirs;
-        else if (IN_SET(scope, UNIT_FILE_GLOBAL, UNIT_FILE_USER))
+        else if (IN_SET(scope, LOOKUP_SCOPE_GLOBAL, LOOKUP_SCOPE_USER))
                 dirs = user_dirs;
         else
-                assert_not_reached("Invalid unit file scope");
+                assert_not_reached();
 
         return conf_files_list_strv(files, ".preset", root_dir, 0, dirs);
 }
 
-static int read_presets(UnitFileScope scope, const char *root_dir, UnitFilePresets *presets) {
+static int read_presets(LookupScope scope, const char *root_dir, UnitFilePresets *presets) {
         _cleanup_(unit_file_presets_freep) UnitFilePresets ps = {};
         _cleanup_strv_free_ char **files = NULL;
-        char **p;
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
         assert(presets);
 
         r = presets_find_config(scope, root_dir, &files);
@@ -3115,7 +3334,6 @@
         if (unit_name_is_valid(unit_name, UNIT_NAME_TEMPLATE)) {
                 _cleanup_strv_free_ char **out_strv = NULL;
 
-                char **iter;
                 STRV_FOREACH(iter, rule.instances) {
                         _cleanup_free_ char *name = NULL;
 
@@ -3162,22 +3380,21 @@
                 log_debug("Preset files don't specify rule for %s. Enabling.", name);
                 return 1;
         case PRESET_ENABLE:
-                if (instance_name_list && *instance_name_list) {
-                        char **s;
+                if (instance_name_list && *instance_name_list)
                         STRV_FOREACH(s, *instance_name_list)
                                 log_debug("Preset files say enable %s.", *s);
-                } else
+                else
                         log_debug("Preset files say enable %s.", name);
                 return 1;
         case PRESET_DISABLE:
                 log_debug("Preset files say disable %s.", name);
                 return 0;
         default:
-                assert_not_reached("invalid preset action");
+                assert_not_reached();
         }
 }
 
-int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name, UnitFilePresets *cached) {
+int unit_file_query_preset(LookupScope scope, const char *root_dir, const char *name, UnitFilePresets *cached) {
         _cleanup_(unit_file_presets_freep) UnitFilePresets tmp = {};
         int r;
 
@@ -3193,32 +3410,31 @@
 }
 
 static int execute_preset(
-                UnitFileScope scope,
                 UnitFileFlags file_flags,
                 InstallContext *plus,
                 InstallContext *minus,
-                const LookupPaths *paths,
+                const LookupPaths *lp,
                 const char *config_path,
                 char **files,
                 UnitFilePresetMode mode,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
         int r;
 
         assert(plus);
         assert(minus);
-        assert(paths);
+        assert(lp);
         assert(config_path);
 
         if (mode != UNIT_FILE_PRESET_ENABLE_ONLY) {
                 _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
 
-                r = install_context_mark_for_removal(scope, minus, paths, &remove_symlinks_to, config_path, changes, n_changes);
+                r = install_context_mark_for_removal(minus, lp, &remove_symlinks_to, config_path, changes, n_changes);
                 if (r < 0)
                         return r;
 
-                r = remove_marked_symlinks(remove_symlinks_to, config_path, paths, false, changes, n_changes);
+                r = remove_marked_symlinks(remove_symlinks_to, config_path, lp, false, changes, n_changes);
         } else
                 r = 0;
 
@@ -3226,9 +3442,10 @@
                 int q;
 
                 /* Returns number of symlinks that where supposed to be installed. */
-                q = install_context_apply(scope,
+                q = install_context_apply(plus, lp,
                                           file_flags | UNIT_FILE_IGNORE_AUXILIARY_FAILURE,
-                                          plus, paths, config_path, SEARCH_LOAD, changes, n_changes);
+                                          config_path,
+                                          SEARCH_LOAD, changes, n_changes);
                 if (r >= 0) {
                         if (q < 0)
                                 r = q;
@@ -3241,29 +3458,29 @@
 }
 
 static int preset_prepare_one(
-                UnitFileScope scope,
+                LookupScope scope,
                 InstallContext *plus,
                 InstallContext *minus,
-                LookupPaths *paths,
+                LookupPaths *lp,
                 const char *name,
                 const UnitFilePresets *presets,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
-        _cleanup_(install_context_done) InstallContext tmp = {};
+        _cleanup_(install_context_done) InstallContext tmp = { .scope = scope };
         _cleanup_strv_free_ char **instance_name_list = NULL;
-        UnitFileInstallInfo *i;
+        InstallInfo *info;
         int r;
 
         if (install_info_find(plus, name) || install_info_find(minus, name))
                 return 0;
 
-        r = install_info_discover(scope, &tmp, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
-                                  &i, changes, n_changes);
+        r = install_info_discover(&tmp, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                  &info, changes, n_changes);
         if (r < 0)
                 return r;
-        if (!streq(name, i->name)) {
-                log_debug("Skipping %s because it is an alias for %s.", name, i->name);
+        if (!streq(name, info->name)) {
+                log_debug("Skipping %s because it is an alias for %s.", name, info->name);
                 return 0;
         }
 
@@ -3272,53 +3489,51 @@
                 return r;
 
         if (r > 0) {
-                if (instance_name_list) {
-                        char **s;
+                if (instance_name_list)
                         STRV_FOREACH(s, instance_name_list) {
-                                r = install_info_discover_and_check(scope, plus, paths, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
-                                                                    &i, changes, n_changes);
+                                r = install_info_discover_and_check(plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                                    &info, changes, n_changes);
                                 if (r < 0)
                                         return r;
                         }
-                } else {
-                        r = install_info_discover_and_check(scope, plus, paths, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
-                                                            &i, changes, n_changes);
+                else {
+                        r = install_info_discover_and_check(plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                            &info, changes, n_changes);
                         if (r < 0)
                                 return r;
                 }
 
         } else
-                r = install_info_discover(scope, minus, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
-                                          &i, changes, n_changes);
+                r = install_info_discover(minus, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                          &info, changes, n_changes);
 
         return r;
 }
 
 int unit_file_preset(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags file_flags,
                 const char *root_dir,
-                char **files,
+                char **names,
                 UnitFilePresetMode mode,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
         _cleanup_(install_context_done) InstallContext plus = {}, minus = {};
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
         const char *config_path;
-        char **i;
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
-        assert(mode < _UNIT_FILE_PRESET_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
+        assert(mode < _UNIT_FILE_PRESET_MODE_MAX);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
+        config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
         if (!config_path)
                 return -ENXIO;
 
@@ -3326,39 +3541,38 @@
         if (r < 0)
                 return r;
 
-        STRV_FOREACH(i, files) {
-                r = preset_prepare_one(scope, &plus, &minus, &paths, *i, &presets, changes, n_changes);
+        STRV_FOREACH(name, names) {
+                r = preset_prepare_one(scope, &plus, &minus, &lp, *name, &presets, changes, n_changes);
                 if (r < 0)
                         return r;
         }
 
-        return execute_preset(scope, file_flags, &plus, &minus, &paths, config_path, files, mode, changes, n_changes);
+        return execute_preset(file_flags, &plus, &minus, &lp, config_path, names, mode, changes, n_changes);
 }
 
 int unit_file_preset_all(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags file_flags,
                 const char *root_dir,
                 UnitFilePresetMode mode,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes) {
 
         _cleanup_(install_context_done) InstallContext plus = {}, minus = {};
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
         const char *config_path = NULL;
-        char **i;
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
-        assert(mode < _UNIT_FILE_PRESET_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
+        assert(mode < _UNIT_FILE_PRESET_MODE_MAX);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
+        config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
         if (!config_path)
                 return -ENXIO;
 
@@ -3366,9 +3580,8 @@
         if (r < 0)
                 return r;
 
-        STRV_FOREACH(i, paths.search_path) {
+        STRV_FOREACH(i, lp.search_path) {
                 _cleanup_closedir_ DIR *d = NULL;
-                struct dirent *de;
 
                 d = opendir(*i);
                 if (!d) {
@@ -3386,16 +3599,16 @@
                         if (!IN_SET(de->d_type, DT_LNK, DT_REG))
                                 continue;
 
-                        r = preset_prepare_one(scope, &plus, &minus, &paths, de->d_name, &presets, changes, n_changes);
+                        r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes);
                         if (r < 0 &&
-                            !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT))
+                            !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EBADSLT, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH, -EXDEV))
                                 /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors.
-                                 * Coordinate with unit_file_dump_changes() above. */
+                                 * Coordinate with install_changes_dump() above. */
                                 return r;
                 }
         }
 
-        return execute_preset(scope, file_flags, &plus, &minus, &paths, config_path, NULL, mode, changes, n_changes);
+        return execute_preset(file_flags, &plus, &minus, &lp, config_path, NULL, mode, changes, n_changes);
 }
 
 static UnitFileList* unit_file_list_free_one(UnitFileList *f) {
@@ -3413,27 +3626,25 @@
 DEFINE_TRIVIAL_CLEANUP_FUNC(UnitFileList*, unit_file_list_free_one);
 
 int unit_file_get_list(
-                UnitFileScope scope,
+                LookupScope scope,
                 const char *root_dir,
                 Hashmap *h,
                 char **states,
                 char **patterns) {
 
-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
-        char **dirname;
+        _cleanup_(lookup_paths_free) LookupPaths lp = {};
         int r;
 
         assert(scope >= 0);
-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+        assert(scope < _LOOKUP_SCOPE_MAX);
         assert(h);
 
-        r = lookup_paths_init(&paths, scope, 0, root_dir);
+        r = lookup_paths_init(&lp, scope, 0, root_dir);
         if (r < 0)
                 return r;
 
-        STRV_FOREACH(dirname, paths.search_path) {
+        STRV_FOREACH(dirname, lp.search_path) {
                 _cleanup_closedir_ DIR *d = NULL;
-                struct dirent *de;
 
                 d = opendir(*dirname);
                 if (!d) {
@@ -3470,7 +3681,7 @@
                         if (!f->path)
                                 return -ENOMEM;
 
-                        r = unit_file_lookup_state(scope, &paths, de->d_name, &f->state);
+                        r = unit_file_lookup_state(scope, &lp, de->d_name, &f->state);
                         if (r < 0)
                                 f->state = UNIT_FILE_BAD;
 
@@ -3507,18 +3718,19 @@
 
 DEFINE_STRING_TABLE_LOOKUP(unit_file_state, UnitFileState);
 
-static const char* const unit_file_change_type_table[_UNIT_FILE_CHANGE_TYPE_MAX] = {
-        [UNIT_FILE_SYMLINK]                 = "symlink",
-        [UNIT_FILE_UNLINK]                  = "unlink",
-        [UNIT_FILE_IS_MASKED]               = "masked",
-        [UNIT_FILE_IS_DANGLING]             = "dangling",
-        [UNIT_FILE_DESTINATION_NOT_PRESENT] = "destination not present",
-        [UNIT_FILE_AUXILIARY_FAILED]        = "auxiliary unit failed",
+static const char* const install_change_type_table[_INSTALL_CHANGE_TYPE_MAX] = {
+        [INSTALL_CHANGE_SYMLINK]                 = "symlink",
+        [INSTALL_CHANGE_UNLINK]                  = "unlink",
+        [INSTALL_CHANGE_IS_MASKED]               = "masked",
+        [INSTALL_CHANGE_IS_MASKED_GENERATOR]     = "masked by generator",
+        [INSTALL_CHANGE_IS_DANGLING]             = "dangling",
+        [INSTALL_CHANGE_DESTINATION_NOT_PRESENT] = "destination not present",
+        [INSTALL_CHANGE_AUXILIARY_FAILED]        = "auxiliary unit failed",
 };
 
-DEFINE_STRING_TABLE_LOOKUP(unit_file_change_type, int);
+DEFINE_STRING_TABLE_LOOKUP(install_change_type, InstallChangeType);
 
-static const char* const unit_file_preset_mode_table[_UNIT_FILE_PRESET_MAX] = {
+static const char* const unit_file_preset_mode_table[_UNIT_FILE_PRESET_MODE_MAX] = {
         [UNIT_FILE_PRESET_FULL]         = "full",
         [UNIT_FILE_PRESET_ENABLE_ONLY]  = "enable-only",
         [UNIT_FILE_PRESET_DISABLE_ONLY] = "disable-only",
diff --git a/src/shared/install.h b/src/shared/install.h
index cdc5435..0abc738 100644
--- a/src/shared/install.h
+++ b/src/shared/install.h
@@ -4,40 +4,45 @@
 #include <stdbool.h>
 
 typedef enum UnitFilePresetMode UnitFilePresetMode;
-typedef enum UnitFileChangeType UnitFileChangeType;
+typedef enum InstallChangeType InstallChangeType;
 typedef enum UnitFileFlags UnitFileFlags;
-typedef enum UnitFileType UnitFileType;
-typedef struct UnitFileChange UnitFileChange;
+typedef enum InstallMode InstallMode;
+typedef struct InstallChange InstallChange;
 typedef struct UnitFileList UnitFileList;
-typedef struct UnitFileInstallInfo UnitFileInstallInfo;
+typedef struct InstallInfo InstallInfo;
 
 #include "hashmap.h"
 #include "macro.h"
 #include "path-lookup.h"
 #include "strv.h"
+#include "unit-file.h"
 #include "unit-name.h"
 
 enum UnitFilePresetMode {
         UNIT_FILE_PRESET_FULL,
         UNIT_FILE_PRESET_ENABLE_ONLY,
         UNIT_FILE_PRESET_DISABLE_ONLY,
-        _UNIT_FILE_PRESET_MAX,
-        _UNIT_FILE_PRESET_INVALID = -EINVAL,
+        _UNIT_FILE_PRESET_MODE_MAX,
+        _UNIT_FILE_PRESET_MODE_INVALID = -EINVAL,
 };
 
-/* This enum type is anonymous, since we usually store it in an 'int', as we overload it with negative errno
- * values. */
-enum {
-        UNIT_FILE_SYMLINK,
-        UNIT_FILE_UNLINK,
-        UNIT_FILE_IS_MASKED,
-        UNIT_FILE_IS_DANGLING,
-        UNIT_FILE_DESTINATION_NOT_PRESENT,
-        UNIT_FILE_AUXILIARY_FAILED,
-        _UNIT_FILE_CHANGE_TYPE_MAX,
-        _UNIT_FILE_CHANGE_TYPE_INVALID = -EINVAL,
+enum InstallChangeType {
+        INSTALL_CHANGE_SYMLINK,
+        INSTALL_CHANGE_UNLINK,
+        INSTALL_CHANGE_IS_MASKED,
+        INSTALL_CHANGE_IS_MASKED_GENERATOR,
+        INSTALL_CHANGE_IS_DANGLING,
+        INSTALL_CHANGE_DESTINATION_NOT_PRESENT,
+        INSTALL_CHANGE_AUXILIARY_FAILED,
+        _INSTALL_CHANGE_TYPE_MAX,
+        _INSTALL_CHANGE_INVALID = -EINVAL,
+        _INSTALL_CHANGE_ERRNO_MAX = -ERRNO_MAX, /* Ensure this type covers the whole negative errno range */
 };
 
+static inline bool INSTALL_CHANGE_TYPE_VALID(InstallChangeType t) {
+        return t >= _INSTALL_CHANGE_ERRNO_MAX && t < _INSTALL_CHANGE_TYPE_MAX;
+}
+
 enum UnitFileFlags {
         UNIT_FILE_RUNTIME                  = 1 << 0, /* Public API via DBUS, do not change */
         UNIT_FILE_FORCE                    = 1 << 1, /* Public API via DBUS, do not change */
@@ -47,18 +52,20 @@
         _UNIT_FILE_FLAGS_MASK_PUBLIC = UNIT_FILE_RUNTIME|UNIT_FILE_PORTABLE|UNIT_FILE_FORCE,
 };
 
-/* type can either one of the UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK, … listed above, or a negative errno value.
+/* type can be either one of the INSTALL_CHANGE_SYMLINK, INSTALL_CHANGE_UNLINK, … listed above, or a negative
+ * errno value.
+ *
  * If source is specified, it should be the contents of the path symlink. In case of an error, source should
  * be the existing symlink contents or NULL. */
-struct UnitFileChange {
-        int type_or_errno; /* UNIT_FILE_SYMLINK, … if positive, errno if negative */
+struct InstallChange {
+        int type; /* INSTALL_CHANGE_SYMLINK, … if positive, errno if negative */
         char *path;
         char *source;
 };
 
-static inline bool unit_file_changes_have_modification(const UnitFileChange* changes, size_t n_changes) {
+static inline bool install_changes_have_modification(const InstallChange* changes, size_t n_changes) {
         for (size_t i = 0; i < n_changes; i++)
-                if (IN_SET(changes[i].type_or_errno, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK))
+                if (IN_SET(changes[i].type, INSTALL_CHANGE_SYMLINK, INSTALL_CHANGE_UNLINK))
                         return true;
         return false;
 }
@@ -68,15 +75,16 @@
         UnitFileState state;
 };
 
-enum UnitFileType {
-        UNIT_FILE_TYPE_REGULAR,
-        UNIT_FILE_TYPE_SYMLINK,
-        UNIT_FILE_TYPE_MASKED,
-        _UNIT_FILE_TYPE_MAX,
-        _UNIT_FILE_TYPE_INVALID = -EINVAL,
+enum InstallMode {
+        INSTALL_MODE_REGULAR,
+        INSTALL_MODE_LINKED,
+        INSTALL_MODE_ALIAS,
+        INSTALL_MODE_MASKED,
+        _INSTALL_MODE_MAX,
+        _INSTALL_MODE_INVALID = -EINVAL,
 };
 
-struct UnitFileInstallInfo {
+struct InstallInfo {
         char *name;
         char *path;
         char *root;
@@ -89,111 +97,116 @@
         char *default_instance;
         char *symlink_target;
 
-        UnitFileType type;
+        InstallMode install_mode;
         bool auxiliary;
 };
 
 int unit_file_enable(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names_or_paths,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_disable(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_reenable(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names_or_paths,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_preset(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
+                char **names,
                 UnitFilePresetMode mode,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_preset_all(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
                 UnitFilePresetMode mode,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_mask(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_unmask(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_link(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
                 char **files,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_revert(
-                UnitFileScope scope,
+                LookupScope scope,
                 const char *root_dir,
-                char **files,
-                UnitFileChange **changes,
+                char **names,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_set_default(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                const char *file,
-                UnitFileChange **changes,
+                const char *name,
+                InstallChange **changes,
                 size_t *n_changes);
 int unit_file_get_default(
-                UnitFileScope scope,
+                LookupScope scope,
                 const char *root_dir,
                 char **name);
 int unit_file_add_dependency(
-                UnitFileScope scope,
+                LookupScope scope,
                 UnitFileFlags flags,
                 const char *root_dir,
-                char **files,
+                char **names,
                 const char *target,
                 UnitDependency dep,
-                UnitFileChange **changes,
+                InstallChange **changes,
                 size_t *n_changes);
 
 int unit_file_lookup_state(
-                UnitFileScope scope,
+                LookupScope scope,
                 const LookupPaths *paths,
                 const char *name,
                 UnitFileState *ret);
 
-int unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename, UnitFileState *ret);
-int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name);
+int unit_file_get_state(LookupScope scope, const char *root_dir, const char *filename, UnitFileState *ret);
+int unit_file_exists(LookupScope scope, const LookupPaths *paths, const char *name);
 
-int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns);
+int unit_file_get_list(LookupScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns);
 Hashmap* unit_file_list_free(Hashmap *h);
 
-int unit_file_changes_add(UnitFileChange **changes, size_t *n_changes, int type, const char *path, const char *source);
-void unit_file_changes_free(UnitFileChange *changes, size_t n_changes);
-void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet);
+InstallChangeType install_changes_add(InstallChange **changes, size_t *n_changes, InstallChangeType type, const char *path, const char *source);
+void install_changes_free(InstallChange *changes, size_t n_changes);
+void install_changes_dump(int r, const char *verb, const InstallChange *changes, size_t n_changes, bool quiet);
 
-int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst);
+int unit_file_verify_alias(
+                const InstallInfo *info,
+                const char *dst,
+                char **ret_dst,
+                InstallChange **changes,
+                size_t *n_changes);
 
 typedef struct UnitFilePresetRule UnitFilePresetRule;
 
@@ -204,14 +217,14 @@
 } UnitFilePresets;
 
 void unit_file_presets_freep(UnitFilePresets *p);
-int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name, UnitFilePresets *cached);
+int unit_file_query_preset(LookupScope scope, const char *root_dir, const char *name, UnitFilePresets *cached);
 
 const char *unit_file_state_to_string(UnitFileState s) _const_;
 UnitFileState unit_file_state_from_string(const char *s) _pure_;
 /* from_string conversion is unreliable because of the overlap between -EPERM and -1 for error. */
 
-const char *unit_file_change_type_to_string(int s) _const_;
-int unit_file_change_type_from_string(const char *s) _pure_;
+const char *install_change_type_to_string(InstallChangeType t) _const_;
+InstallChangeType install_change_type_from_string(const char *s) _pure_;
 
 const char *unit_file_preset_mode_to_string(UnitFilePresetMode m) _const_;
 UnitFilePresetMode unit_file_preset_mode_from_string(const char *s) _pure_;
diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c
index 9e11dc0..d9eabec 100644
--- a/src/shared/journal-importer.c
+++ b/src/shared/journal-importer.c
@@ -36,7 +36,7 @@
 }
 
 static char* realloc_buffer(JournalImporter *imp, size_t size) {
-        char *b, *old = imp->buf;
+        char *b, *old = ASSERT_PTR(imp)->buf;
 
         b = GREEDY_REALLOC(imp->buf, size);
         if (!b)
@@ -281,7 +281,7 @@
 int journal_importer_process_data(JournalImporter *imp) {
         int r;
 
-        switch(imp->state) {
+        switch (imp->state) {
         case IMPORTER_STATE_LINE: {
                 char *line, *sep;
                 size_t n = 0;
@@ -316,7 +316,7 @@
                         if (!journal_field_valid(line, sep - line, true)) {
                                 char buf[64], *t;
 
-                                t = strndupa(line, sep - line);
+                                t = strndupa_safe(line, sep - line);
                                 log_debug("Ignoring invalid field: \"%s\"",
                                           cellescape(buf, sizeof buf, t));
 
@@ -335,7 +335,7 @@
                         if (!journal_field_valid(line, n - 1, true)) {
                                 char buf[64], *t;
 
-                                t = strndupa(line, n - 1);
+                                t = strndupa_safe(line, n - 1);
                                 log_debug("Ignoring invalid field: \"%s\"",
                                           cellescape(buf, sizeof buf, t));
 
@@ -417,7 +417,7 @@
 
                 return 0; /* continue */
         default:
-                assert_not_reached("wtf?");
+                assert_not_reached();
         }
 }
 
@@ -426,11 +426,10 @@
         assert(imp->state != IMPORTER_STATE_EOF);
 
         if (!realloc_buffer(imp, imp->filled + size))
-                return log_error_errno(SYNTHETIC_ERRNO(ENOMEM),
+                return log_error_errno(ENOMEM,
                                        "Failed to store received data of size %zu "
-                                       "(in addition to existing %zu bytes with %zu filled): %s",
-                                       size, MALLOC_SIZEOF_SAFE(imp->buf), imp->filled,
-                                       strerror_safe(ENOMEM));
+                                       "(in addition to existing %zu bytes with %zu filled): %m",
+                                       size, MALLOC_SIZEOF_SAFE(imp->buf), imp->filled);
 
         memcpy(imp->buf + imp->filled, data, size);
         imp->filled += size;
diff --git a/src/shared/journal-importer.h b/src/shared/journal-importer.h
index 7eb2169..6cbac4c 100644
--- a/src/shared/journal-importer.h
+++ b/src/shared/journal-importer.h
@@ -23,7 +23,7 @@
 #define LINE_CHUNK 8*1024u
 
 /* The maximum number of fields in an entry */
-#define ENTRY_FIELD_COUNT_MAX 1024
+#define ENTRY_FIELD_COUNT_MAX 1024u
 
 typedef struct JournalImporter {
         int fd;
diff --git a/src/shared/journal-util.c b/src/shared/journal-util.c
index 9e1870e..ea396fc 100644
--- a/src/shared/journal-util.c
+++ b/src/shared/journal-util.c
@@ -10,10 +10,6 @@
 #include "user-util.h"
 
 static int access_check_var_log_journal(sd_journal *j, bool want_other_users) {
-#if HAVE_ACL
-        _cleanup_strv_free_ char **g = NULL;
-        const char* dir;
-#endif
         int r;
 
         assert(j);
@@ -31,6 +27,9 @@
                 return 0;
 
 #if HAVE_ACL
+        _cleanup_strv_free_ char **g = NULL;
+        const char* dir;
+
         if (laccess("/run/log/journal", F_OK) >= 0)
                 dir = "/run/log/journal";
         else
@@ -129,6 +128,10 @@
                         log_warning_errno(err, "Journal file %s corrupted, ignoring file.", path);
                         break;
 
+                case ETOOMANYREFS:
+                        log_warning_errno(err, "Too many journal files (limit is at %u) in scope, ignoring file '%s'.", JOURNAL_FILES_MAX, path);
+                        break;
+
                 default:
                         log_warning_errno(err, "An error was encountered while opening journal file or directory %s, ignoring file: %m", path);
                         break;
diff --git a/src/shared/json-internal.h b/src/shared/json-internal.h
index 72a7351..778cc51 100644
--- a/src/shared/json-internal.h
+++ b/src/shared/json-internal.h
@@ -9,16 +9,16 @@
  * interface with this. */
 
 typedef union JsonValue  {
-        /* Encodes a simple value. On x86-64 this structure is 16 bytes wide (as long double is 128bit). */
+        /* Encodes a simple value. This structure is generally 8 bytes wide (as double is 64bit). */
         bool boolean;
-        long double real;
-        intmax_t integer;
-        uintmax_t unsig;
+        double real;
+        int64_t integer;
+        uint64_t unsig;
 } JsonValue;
 
 /* Let's protect us against accidental structure size changes on our most relevant arch */
 #ifdef __x86_64__
-assert_cc(sizeof(JsonValue) == 16U);
+assert_cc(sizeof(JsonValue) == 8U);
 #endif
 
 #define JSON_VALUE_NULL ((JsonValue) {})
diff --git a/src/shared/json.c b/src/shared/json.c
index d72b1e3..8962173 100644
--- a/src/shared/json.c
+++ b/src/shared/json.c
@@ -2,7 +2,6 @@
 
 #include <errno.h>
 #include <locale.h>
-#include <math.h>
 #include <stdarg.h>
 #include <stdlib.h>
 #include <sys/types.h>
@@ -11,6 +10,7 @@
 
 #include "alloc-util.h"
 #include "errno-util.h"
+#include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "float.h"
@@ -18,6 +18,7 @@
 #include "json-internal.h"
 #include "json.h"
 #include "macro.h"
+#include "math-util.h"
 #include "memory-util.h"
 #include "string-table.h"
 #include "string-util.h"
@@ -41,7 +42,7 @@
 
 typedef struct JsonSource {
         /* When we parse from a file or similar, encodes the filename, to indicate the source of a json variant */
-        size_t n_ref;
+        unsigned n_ref;
         unsigned max_line;
         unsigned max_column;
         char name[];
@@ -53,7 +54,7 @@
                 /* We either maintain a reference counter for this variant itself, or we are embedded into an
                  * array/object, in which case only that surrounding object is ref-counted. (If 'embedded' is false,
                  * see below.) */
-                size_t n_ref;
+                unsigned n_ref;
 
                 /* If this JsonVariant is part of an array/object, then this field points to the surrounding
                  * JSON_VARIANT_ARRAY/JSON_VARIANT_OBJECT object. (If 'embedded' is true, see below.) */
@@ -100,30 +101,25 @@
                 /* If is_reference as indicated above is set, this is where the reference object is actually stored. */
                 JsonVariant *reference;
 
-                /* Strings are placed immediately after the structure. Note that when this is a JsonVariant embedded
-                 * into an array we might encode strings up to INLINE_STRING_LENGTH characters directly inside the
-                 * element, while longer strings are stored as references. When this object is not embedded into an
-                 * array, but stand-alone we allocate the right size for the whole structure, i.e. the array might be
-                 * much larger than INLINE_STRING_LENGTH.
-                 *
-                 * Note that because we want to allocate arrays of the JsonVariant structure we specify [0] here,
-                 * rather than the prettier []. If we wouldn't, then this char array would have undefined size, and so
-                 * would the union and then the struct this is included in. And of structures with undefined size we
-                 * can't allocate arrays (at least not easily). */
-                char string[0];
+                /* Strings are placed immediately after the structure. Note that when this is a JsonVariant
+                 * embedded into an array we might encode strings up to INLINE_STRING_LENGTH characters
+                 * directly inside the element, while longer strings are stored as references. When this
+                 * object is not embedded into an array, but stand-alone, we allocate the right size for the
+                 * whole structure, i.e. the array might be much larger than INLINE_STRING_LENGTH. */
+                DECLARE_FLEX_ARRAY(char, string);
         };
 };
 
-/* Inside string arrays we have a series of JasonVariant structures one after the other. In this case, strings longer
+/* Inside string arrays we have a series of JsonVariant structures one after the other. In this case, strings longer
  * than INLINE_STRING_MAX are stored as references, and all shorter ones inline. (This means — on x86-64 — strings up
- * to 15 chars are stored within the array elements, and all others in separate allocations) */
+ * to 7 chars are stored within the array elements, and all others in separate allocations) */
 #define INLINE_STRING_MAX (sizeof(JsonVariant) - offsetof(JsonVariant, string) - 1U)
 
 /* Let's make sure this structure isn't increased in size accidentally. This check is only for our most relevant arch
  * (x86-64). */
-#ifdef __x86_64__
-assert_cc(sizeof(JsonVariant) == 48U);
-assert_cc(INLINE_STRING_MAX == 15U);
+#if defined(__x86_64__) && __SIZEOF_POINTER__ == 8
+assert_cc(sizeof(JsonVariant) == 40U);
+assert_cc(INLINE_STRING_MAX == 7U);
 #endif
 
 static JsonSource* json_source_new(const char *name) {
@@ -253,9 +249,7 @@
                 return json_variant_unsigned(v) == 0 ? JSON_VARIANT_MAGIC_ZERO_UNSIGNED : v;
 
         case JSON_VARIANT_REAL:
-                DISABLE_WARNING_FLOAT_EQUAL;
-                return json_variant_real(v) == 0.0 ? JSON_VARIANT_MAGIC_ZERO_REAL : v;
-                REENABLE_WARNING;
+                return iszero_safe(json_variant_real(v)) ? JSON_VARIANT_MAGIC_ZERO_REAL : v;
 
         case JSON_VARIANT_STRING:
                 return isempty(json_variant_string(v)) ? JSON_VARIANT_MAGIC_EMPTY_STRING : v;
@@ -273,8 +267,8 @@
 
 static JsonVariant *json_variant_conservative_formalize(JsonVariant *v) {
 
-        /* Much like json_variant_formalize(), but won't simplify if the variant has a source/line location attached to
-         * it, in order not to lose context */
+        /* Much like json_variant_formalize(), but won't simplify if the variant has a source/line location
+         * attached to it, in order not to lose context */
 
         if (!v)
                 return NULL;
@@ -305,7 +299,7 @@
         return 0;
 }
 
-int json_variant_new_integer(JsonVariant **ret, intmax_t i) {
+int json_variant_new_integer(JsonVariant **ret, int64_t i) {
         JsonVariant *v;
         int r;
 
@@ -326,7 +320,7 @@
         return 0;
 }
 
-int json_variant_new_unsigned(JsonVariant **ret, uintmax_t u) {
+int json_variant_new_unsigned(JsonVariant **ret, uint64_t u) {
         JsonVariant *v;
         int r;
 
@@ -346,23 +340,23 @@
         return 0;
 }
 
-int json_variant_new_real(JsonVariant **ret, long double d) {
+int json_variant_new_real(JsonVariant **ret, double d) {
         JsonVariant *v;
         int r;
 
         assert_return(ret, -EINVAL);
 
-        DISABLE_WARNING_FLOAT_EQUAL;
-        if (d == 0.0) {
-                *ret = JSON_VARIANT_MAGIC_ZERO_REAL;
-                return 0;
-        }
-        REENABLE_WARNING;
-
-        /* JSON doesn't know NaN, +Infinity or -Infinity. Let's silently convert to 'null'. */
-        if (isnan(d) || isinf(d)) {
+        r = fpclassify(d);
+        switch (r) {
+        case FP_NAN:
+        case FP_INFINITE:
+                /* JSON doesn't know NaN, +Infinity or -Infinity. Let's silently convert to 'null'. */
                 *ret = JSON_VARIANT_MAGIC_NULL;
                 return 0;
+
+        case FP_ZERO:
+                *ret = JSON_VARIANT_MAGIC_ZERO_REAL;
+                return 0;
         }
 
         r = json_variant_new(&v, JSON_VARIANT_REAL, sizeof(d));
@@ -439,6 +433,19 @@
         return json_variant_new_stringn(ret, s, k);
 }
 
+int json_variant_new_base32hex(JsonVariant **ret, const void *p, size_t n) {
+        _cleanup_free_ char *s = NULL;
+
+        assert_return(ret, -EINVAL);
+        assert_return(n == 0 || p, -EINVAL);
+
+        s = base32hexmem(p, n, false);
+        if (!s)
+                return -ENOMEM;
+
+        return json_variant_new_string(ret, s);
+}
+
 int json_variant_new_hex(JsonVariant **ret, const void *p, size_t n) {
         _cleanup_free_ char *s = NULL;
 
@@ -452,10 +459,25 @@
         return json_variant_new_stringn(ret, s, n*2);
 }
 
-int json_variant_new_id128(JsonVariant **ret, sd_id128_t id) {
-        char s[SD_ID128_STRING_MAX];
+int json_variant_new_octescape(JsonVariant **ret, const void *p, size_t n) {
+        _cleanup_free_ char *s = NULL;
 
-        return json_variant_new_string(ret, sd_id128_to_string(id, s));
+        assert_return(ret, -EINVAL);
+        assert_return(n == 0 || p, -EINVAL);
+
+        s = octescape(p, n);
+        if (!s)
+                return -ENOMEM;
+
+        return json_variant_new_string(ret, s);
+}
+
+int json_variant_new_id128(JsonVariant **ret, sd_id128_t id) {
+        return json_variant_new_string(ret, SD_ID128_TO_STRING(id));
+}
+
+int json_variant_new_uuid(JsonVariant **ret, sd_id128_t id) {
+        return json_variant_new_string(ret, SD_ID128_TO_UUID_STRING(id));
 }
 
 static void json_variant_set(JsonVariant *a, JsonVariant *b) {
@@ -511,13 +533,12 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected variant type");
+                assert_not_reached();
         }
 }
 
 static void json_variant_copy_source(JsonVariant *v, JsonVariant *from) {
         assert(v);
-        assert(from);
 
         if (!json_variant_is_regular(from))
                 return;
@@ -527,9 +548,34 @@
         v->source = json_source_ref(from->source);
 }
 
+static int _json_variant_array_put_element(JsonVariant *array, JsonVariant *element) {
+        assert(array);
+        JsonVariant *w = array + 1 + array->n_elements;
+
+        uint16_t d = json_variant_depth(element);
+        if (d >= DEPTH_MAX) /* Refuse too deep nesting */
+                return -ELNRNG;
+        if (d >= array->depth)
+                array->depth = d + 1;
+        array->n_elements ++;
+
+        *w = (JsonVariant) {
+                .is_embedded = true,
+                .parent = array,
+        };
+
+        json_variant_set(w, element);
+        json_variant_copy_source(w, element);
+
+        if (!json_variant_is_normalized(element))
+                array->normalized = false;
+
+        return 0;
+}
+
 int json_variant_new_array(JsonVariant **ret, JsonVariant **array, size_t n) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
-        bool normalized = true;
+        int r;
 
         assert_return(ret, -EINVAL);
         if (n == 0) {
@@ -545,41 +591,20 @@
         *v = (JsonVariant) {
                 .n_ref = 1,
                 .type = JSON_VARIANT_ARRAY,
+                .normalized = true,
         };
 
-        for (v->n_elements = 0; v->n_elements < n; v->n_elements++) {
-                JsonVariant *w = v + 1 + v->n_elements,
-                        *c = array[v->n_elements];
-                uint16_t d;
-
-                d = json_variant_depth(c);
-                if (d >= DEPTH_MAX) /* Refuse too deep nesting */
-                        return -ELNRNG;
-                if (d >= v->depth)
-                        v->depth = d + 1;
-
-                *w = (JsonVariant) {
-                        .is_embedded = true,
-                        .parent = v,
-                };
-
-                json_variant_set(w, c);
-                json_variant_copy_source(w, c);
-
-                if (!json_variant_is_normalized(c))
-                        normalized = false;
+        while (v->n_elements < n) {
+                r = _json_variant_array_put_element(v, array[v->n_elements]);
+                if (r < 0)
+                        return r;
         }
 
-        v->normalized = normalized;
-
         *ret = TAKE_PTR(v);
         return 0;
 }
 
 int json_variant_new_array_bytes(JsonVariant **ret, const void *p, size_t n) {
-        JsonVariant *v;
-        size_t i;
-
         assert_return(ret, -EINVAL);
         if (n == 0) {
                 *ret = JSON_VARIANT_MAGIC_EMPTY_ARRAY;
@@ -587,7 +612,7 @@
         }
         assert_return(p, -EINVAL);
 
-        v = new(JsonVariant, n + 1);
+        JsonVariant *v = new(JsonVariant, n + 1);
         if (!v)
                 return -ENOMEM;
 
@@ -598,7 +623,7 @@
                 .depth = 1,
         };
 
-        for (i = 0; i < n; i++) {
+        for (size_t i = 0; i < n; i++) {
                 JsonVariant *w = v + 1 + i;
 
                 *w = (JsonVariant) {
@@ -696,7 +721,7 @@
 
         for (v->n_elements = 0; v->n_elements < n; v->n_elements++) {
                 JsonVariant *w = v + 1 + v->n_elements,
-                        *c = array[v->n_elements];
+                            *c = array[v->n_elements];
                 uint16_t d;
 
                 if ((v->n_elements & 1) == 0) {
@@ -737,7 +762,6 @@
 }
 
 static size_t json_variant_size(JsonVariant* v) {
-
         if (!json_variant_is_regular(v))
                 return 0;
 
@@ -750,13 +774,13 @@
                 return offsetof(JsonVariant, string) + strlen(v->string) + 1;
 
         case JSON_VARIANT_REAL:
-                return offsetof(JsonVariant, value) + sizeof(long double);
+                return offsetof(JsonVariant, value) + sizeof(double);
 
         case JSON_VARIANT_UNSIGNED:
-                return offsetof(JsonVariant, value) + sizeof(uintmax_t);
+                return offsetof(JsonVariant, value) + sizeof(uint64_t);
 
         case JSON_VARIANT_INTEGER:
-                return offsetof(JsonVariant, value) + sizeof(intmax_t);
+                return offsetof(JsonVariant, value) + sizeof(int64_t);
 
         case JSON_VARIANT_BOOLEAN:
                 return offsetof(JsonVariant, value) + sizeof(bool);
@@ -769,7 +793,7 @@
                 return offsetof(JsonVariant, value);
 
         default:
-                assert_not_reached("unexpected type");
+                assert_not_reached();
         }
 }
 
@@ -793,17 +817,27 @@
                 return;
         }
 
-        if (IN_SET(v->type, JSON_VARIANT_ARRAY, JSON_VARIANT_OBJECT)) {
-                size_t i;
-
-                for (i = 0; i < v->n_elements; i++)
+        if (IN_SET(v->type, JSON_VARIANT_ARRAY, JSON_VARIANT_OBJECT))
+                for (size_t i = 0; i < v->n_elements; i++)
                         json_variant_free_inner(v + 1 + i, sensitive);
-        }
 
         if (sensitive)
                 explicit_bzero_safe(v, json_variant_size(v));
 }
 
+static unsigned json_variant_n_ref(const JsonVariant *v) {
+        /* Return the number of references to v.
+         * 0  => NULL or not a regular object or embedded.
+         * >0 => number of references
+         */
+
+        if (!v || !json_variant_is_regular(v) || v->is_embedded)
+                return 0;
+
+        assert(v->n_ref > 0);
+        return v->n_ref;
+}
+
 JsonVariant *json_variant_ref(JsonVariant *v) {
         if (!v)
                 return NULL;
@@ -842,11 +876,9 @@
 }
 
 void json_variant_unref_many(JsonVariant **array, size_t n) {
-        size_t i;
-
         assert(array || n == 0);
 
-        for (i = 0; i < n; i++)
+        for (size_t i = 0; i < n; i++)
                 json_variant_unref(array[i]);
 }
 
@@ -897,7 +929,7 @@
         return false;
 }
 
-intmax_t json_variant_integer(JsonVariant *v) {
+int64_t json_variant_integer(JsonVariant *v) {
         if (!v)
                 goto mismatch;
         if (v == JSON_VARIANT_MAGIC_ZERO_INTEGER ||
@@ -915,23 +947,21 @@
                 return v->value.integer;
 
         case JSON_VARIANT_UNSIGNED:
-                if (v->value.unsig <= INTMAX_MAX)
-                        return (intmax_t) v->value.unsig;
+                if (v->value.unsig <= INT64_MAX)
+                        return (int64_t) v->value.unsig;
 
-                log_debug("Unsigned integer %ju requested as signed integer and out of range, returning 0.", v->value.unsig);
+                log_debug("Unsigned integer %" PRIu64 " requested as signed integer and out of range, returning 0.", v->value.unsig);
                 return 0;
 
         case JSON_VARIANT_REAL: {
-                intmax_t converted;
+                int64_t converted;
 
-                converted = (intmax_t) v->value.real;
+                converted = (int64_t) v->value.real;
 
-                DISABLE_WARNING_FLOAT_EQUAL;
-                if ((long double) converted == v->value.real)
+                if (fp_equal((double) converted, v->value.real))
                         return converted;
-                REENABLE_WARNING;
 
-                log_debug("Real %Lg requested as integer, and cannot be converted losslessly, returning 0.", v->value.real);
+                log_debug("Real %g requested as integer, and cannot be converted losslessly, returning 0.", v->value.real);
                 return 0;
         }
 
@@ -944,7 +974,7 @@
         return 0;
 }
 
-uintmax_t json_variant_unsigned(JsonVariant *v) {
+uint64_t json_variant_unsigned(JsonVariant *v) {
         if (!v)
                 goto mismatch;
         if (v == JSON_VARIANT_MAGIC_ZERO_INTEGER ||
@@ -960,25 +990,23 @@
 
         case JSON_VARIANT_INTEGER:
                 if (v->value.integer >= 0)
-                        return (uintmax_t) v->value.integer;
+                        return (uint64_t) v->value.integer;
 
-                log_debug("Signed integer %ju requested as unsigned integer and out of range, returning 0.", v->value.integer);
+                log_debug("Signed integer %" PRIi64 " requested as unsigned integer and out of range, returning 0.", v->value.integer);
                 return 0;
 
         case JSON_VARIANT_UNSIGNED:
                 return v->value.unsig;
 
         case JSON_VARIANT_REAL: {
-                uintmax_t converted;
+                uint64_t converted;
 
-                converted = (uintmax_t) v->value.real;
+                converted = (uint64_t) v->value.real;
 
-                DISABLE_WARNING_FLOAT_EQUAL;
-                if ((long double) converted == v->value.real)
+                if (fp_equal((double) converted, v->value.real))
                         return converted;
-                REENABLE_WARNING;
 
-                log_debug("Real %Lg requested as unsigned integer, and cannot be converted losslessly, returning 0.", v->value.real);
+                log_debug("Real %g requested as unsigned integer, and cannot be converted losslessly, returning 0.", v->value.real);
                 return 0;
         }
 
@@ -991,7 +1019,7 @@
         return 0;
 }
 
-long double json_variant_real(JsonVariant *v) {
+double json_variant_real(JsonVariant *v) {
         if (!v)
                 return 0.0;
         if (v == JSON_VARIANT_MAGIC_ZERO_INTEGER ||
@@ -1009,26 +1037,22 @@
                 return v->value.real;
 
         case JSON_VARIANT_INTEGER: {
-                long double converted;
+                double converted = (double) v->value.integer;
 
-                converted = (long double) v->value.integer;
-
-                if ((intmax_t) converted == v->value.integer)
+                if ((int64_t) converted == v->value.integer)
                         return converted;
 
-                log_debug("Signed integer %ji requested as real, and cannot be converted losslessly, returning 0.", v->value.integer);
+                log_debug("Signed integer %" PRIi64 " requested as real, and cannot be converted losslessly, returning 0.", v->value.integer);
                 return 0.0;
         }
 
         case JSON_VARIANT_UNSIGNED: {
-                long double converted;
+                double converted = (double) v->value.unsig;
 
-                converted = (long double) v->value.unsig;
-
-                if ((uintmax_t) converted == v->value.unsig)
+                if ((uint64_t) converted == v->value.unsig)
                         return converted;
 
-                log_debug("Unsigned integer %ju requested as real, and cannot be converted losslessly, returning 0.", v->value.unsig);
+                log_debug("Unsigned integer %" PRIu64 " requested as real, and cannot be converted losslessly, returning 0.", v->value.unsig);
                 return 0.0;
         }
 
@@ -1125,10 +1149,11 @@
         return v->type;
 }
 
-_function_no_sanitize_float_cast_overflow_ bool json_variant_has_type(JsonVariant *v, JsonVariantType type) {
+_function_no_sanitize_float_cast_overflow_
+bool json_variant_has_type(JsonVariant *v, JsonVariantType type) {
         JsonVariantType rt;
 
-        /* Note: we turn off ubsan float cast overflo detection for this function, since it would complain
+        /* Note: we turn off ubsan float cast overflow detection for this function, since it would complain
          * about our float casts but we do them explicitly to detect conversion errors. */
 
         v = json_variant_dereference(v);
@@ -1160,23 +1185,19 @@
         if (rt == JSON_VARIANT_INTEGER && type == JSON_VARIANT_UNSIGNED)
                 return v->value.integer >= 0;
         if (rt == JSON_VARIANT_UNSIGNED && type == JSON_VARIANT_INTEGER)
-                return v->value.unsig <= INTMAX_MAX;
+                return v->value.unsig <= INT64_MAX;
 
         /* Any integer that can be converted lossley to a real and back may also be considered a real */
         if (rt == JSON_VARIANT_INTEGER && type == JSON_VARIANT_REAL)
-                return (intmax_t) (long double) v->value.integer == v->value.integer;
+                return (int64_t) (double) v->value.integer == v->value.integer;
         if (rt == JSON_VARIANT_UNSIGNED && type == JSON_VARIANT_REAL)
-                return (uintmax_t) (long double) v->value.unsig == v->value.unsig;
-
-        DISABLE_WARNING_FLOAT_EQUAL;
+                return (uint64_t) (double) v->value.unsig == v->value.unsig;
 
         /* Any real that can be converted losslessly to an integer and back may also be considered an integer */
         if (rt == JSON_VARIANT_REAL && type == JSON_VARIANT_INTEGER)
-                return (long double) (intmax_t) v->value.real == v->value.real;
+                return fp_equal((double) (int64_t) v->value.real, v->value.real);
         if (rt == JSON_VARIANT_REAL && type == JSON_VARIANT_UNSIGNED)
-                return (long double) (uintmax_t) v->value.real == v->value.real;
-
-        REENABLE_WARNING;
+                return fp_equal((double) (uint64_t) v->value.real, v->value.real);
 
         return false;
 }
@@ -1224,8 +1245,6 @@
 }
 
 JsonVariant *json_variant_by_key_full(JsonVariant *v, const char *key, JsonVariant **ret_key) {
-        size_t i;
-
         if (!v)
                 goto not_found;
         if (!key)
@@ -1247,6 +1266,7 @@
                 while (b > a) {
                         JsonVariant *p;
                         const char *f;
+                        size_t i;
                         int c;
 
                         i = (a + b) / 2;
@@ -1270,7 +1290,7 @@
         }
 
         /* The variant is not sorted, hence search for the field linearly */
-        for (i = 0; i < v->n_elements; i += 2) {
+        for (size_t i = 0; i < v->n_elements; i += 2) {
                 JsonVariant *p;
 
                 p = json_variant_dereference(v + 1 + i);
@@ -1330,9 +1350,7 @@
                 return json_variant_unsigned(a) == json_variant_unsigned(b);
 
         case JSON_VARIANT_REAL:
-                DISABLE_WARNING_FLOAT_EQUAL;
-                return json_variant_real(a) == json_variant_real(b);
-                REENABLE_WARNING;
+                return fp_equal(json_variant_real(a), json_variant_real(b));
 
         case JSON_VARIANT_BOOLEAN:
                 return json_variant_boolean(a) == json_variant_boolean(b);
@@ -1341,34 +1359,28 @@
                 return true;
 
         case JSON_VARIANT_ARRAY: {
-                size_t i, n;
-
-                n = json_variant_elements(a);
+                size_t n = json_variant_elements(a);
                 if (n != json_variant_elements(b))
                         return false;
 
-                for (i = 0; i < n; i++) {
+                for (size_t i = 0; i < n; i++)
                         if (!json_variant_equal(json_variant_by_index(a, i), json_variant_by_index(b, i)))
                                 return false;
-                }
 
                 return true;
         }
 
         case JSON_VARIANT_OBJECT: {
-                size_t i, n;
-
-                n = json_variant_elements(a);
+                size_t n = json_variant_elements(a);
                 if (n != json_variant_elements(b))
                         return false;
 
                 /* Iterate through all keys in 'a' */
-                for (i = 0; i < n; i += 2) {
+                for (size_t i = 0; i < n; i += 2) {
                         bool found = false;
-                        size_t j;
 
                         /* Match them against all keys in 'b' */
-                        for (j = 0; j < n; j += 2) {
+                        for (size_t j = 0; j < n; j += 2) {
                                 JsonVariant *key_b;
 
                                 key_b = json_variant_by_index(b, j);
@@ -1403,7 +1415,7 @@
         }
 
         default:
-                assert_not_reached("Unknown variant type.");
+                assert_not_reached();
         }
 }
 
@@ -1476,16 +1488,14 @@
                 DECIMAL_STR_MAX(unsigned) -1;
 
         if (whitespace) {
-                size_t i, n;
+                size_t n = 1 + (v->source ? strlen(v->source->name) : 0) +
+                               ((v->source && (v->line > 0 || v->column > 0)) ? 1 : 0) +
+                               (v->line > 0 ? w : 0) +
+                               (((v->source || v->line > 0) && v->column > 0) ? 1 : 0) +
+                               (v->column > 0 ? k : 0) +
+                               2;
 
-                n = 1 + (v->source ? strlen(v->source->name) : 0) +
-                        ((v->source && (v->line > 0 || v->column > 0)) ? 1 : 0) +
-                        (v->line > 0 ? w : 0) +
-                        (((v->source || v->line > 0) && v->column > 0) ? 1 : 0) +
-                        (v->column > 0 ? k : 0) +
-                        2;
-
-                for (i = 0; i < n; i++)
+                for (size_t i = 0; i < n; i++)
                         fputc(' ', f);
         } else {
                 fputc('[', f);
@@ -1548,7 +1558,7 @@
 
                 default:
                         if ((signed char) *q >= 0 && *q < ' ')
-                                fprintf(f, "\\u%04x", *q);
+                                fprintf(f, "\\u%04x", (unsigned) *q);
                         else
                                 fputc(*q, f);
                         break;
@@ -1569,7 +1579,7 @@
         switch (json_variant_type(v)) {
 
         case JSON_VARIANT_REAL: {
-                locale_t loc;
+                locale_t loc, old_loc;
 
                 loc = newlocale(LC_NUMERIC_MASK, "C", (locale_t) 0);
                 if (loc == (locale_t) 0)
@@ -1578,7 +1588,9 @@
                 if (flags & JSON_FORMAT_COLOR)
                         fputs(ansi_highlight_blue(), f);
 
-                fprintf(f, "%.*Le", DECIMAL_DIG, json_variant_real(v));
+                old_loc = uselocale(loc);
+                fprintf(f, "%.*e", DECIMAL_DIG, json_variant_real(v));
+                uselocale(old_loc);
 
                 if (flags & JSON_FORMAT_COLOR)
                         fputs(ANSI_NORMAL, f);
@@ -1637,10 +1649,7 @@
                 break;
 
         case JSON_VARIANT_ARRAY: {
-                size_t i, n;
-
-                n = json_variant_elements(v);
-
+                size_t n = json_variant_elements(v);
                 if (n == 0)
                         fputs("[]", f);
                 else {
@@ -1659,7 +1668,7 @@
                                 fputc('[', f);
                         }
 
-                        for (i = 0; i < n; i++) {
+                        for (size_t i = 0; i < n; i++) {
                                 JsonVariant *e;
 
                                 assert_se(e = json_variant_by_index(v, i));
@@ -1693,10 +1702,7 @@
         }
 
         case JSON_VARIANT_OBJECT: {
-                size_t i, n;
-
-                n = json_variant_elements(v);
-
+                size_t n = json_variant_elements(v);
                 if (n == 0)
                         fputs("{}", f);
                 else {
@@ -1715,7 +1721,7 @@
                                 fputc('{', f);
                         }
 
-                        for (i = 0; i < n; i += 2) {
+                        for (size_t i = 0; i < n; i += 2) {
                                 JsonVariant *e;
 
                                 e = json_variant_by_index(v, i);
@@ -1755,7 +1761,7 @@
         }
 
         default:
-                assert_not_reached("Unexpected variant type.");
+                assert_not_reached();
         }
 
         return 0;
@@ -1798,9 +1804,13 @@
         return (int) sz - 1;
 }
 
-void json_variant_dump(JsonVariant *v, JsonFormatFlags flags, FILE *f, const char *prefix) {
-        if (!v)
-                return;
+int json_variant_dump(JsonVariant *v, JsonFormatFlags flags, FILE *f, const char *prefix) {
+        if (!v) {
+                if (flags & JSON_FORMAT_EMPTY_ARRAY)
+                        v = JSON_VARIANT_MAGIC_EMPTY_ARRAY;
+                else
+                        return 0;
+        }
 
         if (!f)
                 f = stdout;
@@ -1826,13 +1836,14 @@
                 fputc('\n', f); /* In case of SSE add a second newline */
 
         if (flags & JSON_FORMAT_FLUSH)
-                fflush(f);
+                return fflush_and_check(f);
+        return 0;
 }
 
 int json_variant_filter(JsonVariant **v, char **to_remove) {
         _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
         _cleanup_free_ JsonVariant **array = NULL;
-        size_t i, n = 0, k = 0;
+        size_t n = 0, k = 0;
         int r;
 
         assert(v);
@@ -1845,7 +1856,7 @@
         if (strv_isempty(to_remove))
                 return 0;
 
-        for (i = 0; i < json_variant_elements(*v); i += 2) {
+        for (size_t i = 0; i < json_variant_elements(*v); i += 2) {
                 JsonVariant *p;
 
                 p = json_variant_by_index(*v, i);
@@ -1877,9 +1888,7 @@
                 return r;
 
         json_variant_propagate_sensitive(*v, w);
-
-        json_variant_unref(*v);
-        *v = TAKE_PTR(w);
+        JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
 
         return (int) n;
 }
@@ -1887,7 +1896,7 @@
 int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *value) {
         _cleanup_(json_variant_unrefp) JsonVariant *field_variant = NULL, *w = NULL;
         _cleanup_free_ JsonVariant **array = NULL;
-        size_t i, k = 0;
+        size_t k = 0;
         int r;
 
         assert(v);
@@ -1902,7 +1911,7 @@
                 if (!json_variant_is_object(*v))
                         return -EINVAL;
 
-                for (i = 0; i < json_variant_elements(*v); i += 2) {
+                for (size_t i = 0; i < json_variant_elements(*v); i += 2) {
                         JsonVariant *p;
 
                         p = json_variant_by_index(*v, i);
@@ -1948,9 +1957,7 @@
                 return r;
 
         json_variant_propagate_sensitive(*v, w);
-
-        json_variant_unref(*v);
-        *v = TAKE_PTR(w);
+        JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
 
         return 1;
 }
@@ -1966,7 +1973,7 @@
         return json_variant_set_field(v, field, m);
 }
 
-int json_variant_set_field_integer(JsonVariant **v, const char *field, intmax_t i) {
+int json_variant_set_field_integer(JsonVariant **v, const char *field, int64_t i) {
         _cleanup_(json_variant_unrefp) JsonVariant *m = NULL;
         int r;
 
@@ -1977,7 +1984,7 @@
         return json_variant_set_field(v, field, m);
 }
 
-int json_variant_set_field_unsigned(JsonVariant **v, const char *field, uintmax_t u) {
+int json_variant_set_field_unsigned(JsonVariant **v, const char *field, uint64_t u) {
         _cleanup_(json_variant_unrefp) JsonVariant *m = NULL;
         int r;
 
@@ -2013,7 +2020,7 @@
 int json_variant_merge(JsonVariant **v, JsonVariant *m) {
         _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
         _cleanup_free_ JsonVariant **array = NULL;
-        size_t v_elements, m_elements, i, k;
+        size_t v_elements, m_elements, k;
         bool v_blank, m_blank;
         int r;
 
@@ -2031,8 +2038,7 @@
                 return 0; /* nothing to do */
 
         if (v_blank) {
-                json_variant_unref(*v);
-                *v = json_variant_ref(m);
+                JSON_VARIANT_REPLACE(*v, json_variant_ref(m));
                 return 1;
         }
 
@@ -2046,7 +2052,7 @@
                 return -ENOMEM;
 
         k = 0;
-        for (i = 0; i < v_elements; i += 2) {
+        for (size_t i = 0; i < v_elements; i += 2) {
                 JsonVariant *u;
 
                 u = json_variant_by_index(*v, i);
@@ -2060,7 +2066,7 @@
                 array[k++] = json_variant_by_index(*v, i + 1);
         }
 
-        for (i = 0; i < m_elements; i++)
+        for (size_t i = 0; i < m_elements; i++)
                 array[k++] = json_variant_by_index(m, i);
 
         r = json_variant_new_object(&w, array, k);
@@ -2069,9 +2075,7 @@
 
         json_variant_propagate_sensitive(*v, w);
         json_variant_propagate_sensitive(m, w);
-
-        json_variant_unref(*v);
-        *v = TAKE_PTR(w);
+        JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
 
         return 1;
 }
@@ -2084,45 +2088,86 @@
         assert(v);
         assert(element);
 
-
         if (!*v || json_variant_is_null(*v))
                 blank = true;
-        else if (!json_variant_is_array(*v))
-                return -EINVAL;
-        else
+        else if (json_variant_is_array(*v))
                 blank = json_variant_elements(*v) == 0;
+        else
+                return -EINVAL;
 
-        if (blank)
+        if (blank) {
                 r = json_variant_new_array(&nv, (JsonVariant*[]) { element }, 1);
-        else {
-                _cleanup_free_ JsonVariant **array = NULL;
-                size_t i;
+                if (r < 0)
+                        return r;
+        } else if (json_variant_n_ref(*v) == 1) {
+                /* Let's bump the reference count on element. We can't do the realloc if we're appending *v
+                 * to itself, or one of the objects embedded in *v to *v. If the reference count grows, we
+                 * need to fall back to the other method below. */
 
-                array = new(JsonVariant*, json_variant_elements(*v) + 1);
+                _unused_ _cleanup_(json_variant_unrefp) JsonVariant *dummy = json_variant_ref(element);
+                if (json_variant_n_ref(*v) == 1) {
+                        /* We hold the only reference. Let's mutate the object. */
+                        size_t size = json_variant_elements(*v);
+                        void *old = *v;
+
+                        if (!GREEDY_REALLOC(*v, size + 1 + 1))
+                                return -ENOMEM;
+
+                        if (old != *v)
+                                /* Readjust the parent pointers to the new address */
+                                for (size_t i = 1; i < size; i++)
+                                        (*v)[1 + i].parent = *v;
+
+                        return _json_variant_array_put_element(*v, element);
+                }
+        }
+
+        if (!blank) {
+                size_t size = json_variant_elements(*v);
+
+                _cleanup_free_ JsonVariant **array = new(JsonVariant*, size + 1);
                 if (!array)
                         return -ENOMEM;
 
-                for (i = 0; i < json_variant_elements(*v); i++)
+                for (size_t i = 0; i < size; i++)
                         array[i] = json_variant_by_index(*v, i);
 
-                array[i] = element;
+                array[size] = element;
 
-                r = json_variant_new_array(&nv, array, i + 1);
+                r = json_variant_new_array(&nv, array, size + 1);
+                if (r < 0)
+                        return r;
         }
-        if (r < 0)
-                return r;
 
         json_variant_propagate_sensitive(*v, nv);
-
-        json_variant_unref(*v);
-        *v = TAKE_PTR(nv);
+        JSON_VARIANT_REPLACE(*v, TAKE_PTR(nv));
 
         return 0;
 }
 
+JsonVariant *json_variant_find(JsonVariant *haystack, JsonVariant *needle) {
+        JsonVariant *i;
+
+        /* Find a json object in an array. Returns NULL if not found, or if the array is not actually an array. */
+
+        JSON_VARIANT_ARRAY_FOREACH(i, haystack)
+                if (json_variant_equal(i, needle))
+                        return i;
+
+        return NULL;
+}
+
+int json_variant_append_array_nodup(JsonVariant **v, JsonVariant *element) {
+        assert(v);
+
+        if (json_variant_find(*v, element))
+                return 0;
+
+        return json_variant_append_array(v, element);
+}
+
 int json_variant_strv(JsonVariant *v, char ***ret) {
         char **l = NULL;
-        size_t n, i;
         bool sensitive;
         int r;
 
@@ -2142,12 +2187,12 @@
 
         sensitive = v->sensitive;
 
-        n = json_variant_elements(v);
+        size_t n = json_variant_elements(v);
         l = new(char*, n+1);
         if (!l)
                 return -ENOMEM;
 
-        for (i = 0; i < n; i++) {
+        for (size_t i = 0; i < n; i++) {
                 JsonVariant *e;
 
                 assert_se(e = json_variant_by_index(v, i));
@@ -2166,7 +2211,7 @@
                 }
         }
 
-        l[i] = NULL;
+        l[n] = NULL;
         *ret = TAKE_PTR(l);
 
         return 0;
@@ -2194,19 +2239,19 @@
         t = json_variant_type(v);
         switch (t) {
         case JSON_VARIANT_INTEGER:
-                k = sizeof(intmax_t);
+                k = sizeof(int64_t);
                 value.integer = json_variant_integer(v);
                 source = &value;
                 break;
 
         case JSON_VARIANT_UNSIGNED:
-                k = sizeof(uintmax_t);
+                k = sizeof(uint64_t);
                 value.unsig = json_variant_unsigned(v);
                 source = &value;
                 break;
 
         case JSON_VARIANT_REAL:
-                k = sizeof(long double);
+                k = sizeof(double);
                 value.real = json_variant_real(v);
                 source = &value;
                 break;
@@ -2285,8 +2330,9 @@
 
         assert(v);
 
-        /* Patch in source and line/column number. Tries to do this in-place if the caller is the sole referencer of
-         * the object. If not, allocates a new object, possibly a surrogate for the original one */
+        /* Patch in source and line/column number. Tries to do this in-place if the caller is the sole
+         * referencer of the object. If not, allocates a new object, possibly a surrogate for the original
+         * one */
 
         if (!*v)
                 return 0;
@@ -2329,8 +2375,7 @@
         w->line = line;
         w->column = column;
 
-        json_variant_unref(*v);
-        *v = w;
+        JSON_VARIANT_REPLACE(*v, w);
 
         return 1;
 }
@@ -2529,9 +2574,9 @@
 
 static int json_parse_number(const char **p, JsonValue *ret) {
         bool negative = false, exponent_negative = false, is_real = false;
-        long double x = 0.0, y = 0.0, exponent = 0.0, shift = 1.0;
-        intmax_t i = 0;
-        uintmax_t u = 0;
+        double x = 0.0, y = 0.0, exponent = 0.0, shift = 1.0;
+        int64_t i = 0;
+        uint64_t u = 0;
         const char *c;
 
         assert(p);
@@ -2555,23 +2600,23 @@
                         if (!is_real) {
                                 if (negative) {
 
-                                        if (i < INTMAX_MIN / 10) /* overflow */
+                                        if (i < INT64_MIN / 10) /* overflow */
                                                 is_real = true;
                                         else {
-                                                intmax_t t = 10 * i;
+                                                int64_t t = 10 * i;
 
-                                                if (t < INTMAX_MIN + (*c - '0')) /* overflow */
+                                                if (t < INT64_MIN + (*c - '0')) /* overflow */
                                                         is_real = true;
                                                 else
                                                         i = t - (*c - '0');
                                         }
                                 } else {
-                                        if (u > UINTMAX_MAX / 10) /* overflow */
+                                        if (u > UINT64_MAX / 10) /* overflow */
                                                 is_real = true;
                                         else {
-                                                uintmax_t t = 10 * u;
+                                                uint64_t t = 10 * u;
 
-                                                if (t > UINTMAX_MAX - (*c - '0')) /* overflow */
+                                                if (t > UINT64_MAX - (*c - '0')) /* overflow */
                                                         is_real = true;
                                                 else
                                                         u = t + (*c - '0');
@@ -2621,7 +2666,7 @@
         *p = c;
 
         if (is_real) {
-                ret->real = ((negative ? -1.0 : 1.0) * (x + (y / shift))) * exp10l((exponent_negative ? -1.0 : 1.0) * exponent);
+                ret->real = ((negative ? -1.0 : 1.0) * (x + (y / shift))) * exp10((exponent_negative ? -1.0 : 1.0) * exponent);
                 return JSON_TOKEN_REAL;
         } else if (negative) {
                 ret->integer = i;
@@ -2793,7 +2838,7 @@
                 return -EINVAL;
 
         default:
-                assert_not_reached("Unexpected tokenizer state");
+                assert_not_reached();
         }
 
 null_return:
@@ -2853,7 +2898,7 @@
                 unsigned *column,
                 bool continue_end) {
 
-        size_t n_stack = 1, i;
+        size_t n_stack = 1;
         unsigned line_buffer = 0, column_buffer = 0;
         void *tokenizer_state = NULL;
         JsonStack *stack = NULL;
@@ -3162,7 +3207,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unexpected token");
+                        assert_not_reached();
                 }
 
                 if (add) {
@@ -3192,7 +3237,7 @@
         r = 0;
 
 finish:
-        for (i = 0; i < n_stack; i++)
+        for (size_t i = 0; i < n_stack; i++)
                 json_stack_release(stack + i);
 
         free(stack);
@@ -3200,18 +3245,54 @@
         return r;
 }
 
-int json_parse(const char *input, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column) {
-        return json_parse_internal(&input, NULL, flags, ret, ret_line, ret_column, false);
+int json_parse_with_source(
+                const char *input,
+                const char *source,
+                JsonParseFlags flags,
+                JsonVariant **ret,
+                unsigned *ret_line,
+                unsigned *ret_column) {
+
+        _cleanup_(json_source_unrefp) JsonSource *s = NULL;
+
+        if (source) {
+                s = json_source_new(source);
+                if (!s)
+                        return -ENOMEM;
+        }
+
+        return json_parse_internal(&input, s, flags, ret, ret_line, ret_column, false);
 }
 
-int json_parse_continue(const char **p, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column) {
-        return json_parse_internal(p, NULL, flags, ret, ret_line, ret_column, true);
+int json_parse_with_source_continue(
+                const char **p,
+                const char *source,
+                JsonParseFlags flags,
+                JsonVariant **ret,
+                unsigned *ret_line,
+                unsigned *ret_column) {
+
+        _cleanup_(json_source_unrefp) JsonSource *s = NULL;
+
+        if (source) {
+                s = json_source_new(source);
+                if (!s)
+                        return -ENOMEM;
+        }
+
+        return json_parse_internal(p, s, flags, ret, ret_line, ret_column, true);
 }
 
-int json_parse_file_at(FILE *f, int dir_fd, const char *path, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column) {
-        _cleanup_(json_source_unrefp) JsonSource *source = NULL;
+int json_parse_file_at(
+                FILE *f,
+                int dir_fd,
+                const char *path,
+                JsonParseFlags flags,
+                JsonVariant **ret,
+                unsigned *ret_line,
+                unsigned *ret_column) {
+
         _cleanup_free_ char *text = NULL;
-        const char *p;
         int r;
 
         if (f)
@@ -3223,19 +3304,15 @@
         if (r < 0)
                 return r;
 
-        if (path) {
-                source = json_source_new(path);
-                if (!source)
-                        return -ENOMEM;
-        }
+        if (isempty(text))
+                return -ENODATA;
 
-        p = text;
-        return json_parse_internal(&p, source, flags, ret, ret_line, ret_column, false);
+        return json_parse_with_source(text, path, flags, ret, ret_line, ret_column);
 }
 
 int json_buildv(JsonVariant **ret, va_list ap) {
         JsonStack *stack = NULL;
-        size_t n_stack = 1, i;
+        size_t n_stack = 1;
         int r;
 
         assert_return(ret, -EINVAL);
@@ -3248,7 +3325,7 @@
         };
 
         for (;;) {
-                _cleanup_(json_variant_unrefp) JsonVariant *add = NULL;
+                _cleanup_(json_variant_unrefp) JsonVariant *add = NULL, *add_more = NULL;
                 size_t n_subtract = 0; /* how much to subtract from current->n_suppress, i.e. how many elements would
                                         * have been added to the current variant */
                 JsonStack *current;
@@ -3293,14 +3370,14 @@
                 }
 
                 case _JSON_BUILD_INTEGER: {
-                        intmax_t j;
+                        int64_t j;
 
                         if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
                                 r = -EINVAL;
                                 goto finish;
                         }
 
-                        j = va_arg(ap, intmax_t);
+                        j = va_arg(ap, int64_t);
 
                         if (current->n_suppress == 0) {
                                 r = json_variant_new_integer(&add, j);
@@ -3321,14 +3398,14 @@
                 }
 
                 case _JSON_BUILD_UNSIGNED: {
-                        uintmax_t j;
+                        uint64_t j;
 
                         if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
                                 r = -EINVAL;
                                 goto finish;
                         }
 
-                        j = va_arg(ap, uintmax_t);
+                        j = va_arg(ap, uint64_t);
 
                         if (current->n_suppress == 0) {
                                 r = json_variant_new_unsigned(&add, j);
@@ -3349,14 +3426,14 @@
                 }
 
                 case _JSON_BUILD_REAL: {
-                        long double d;
+                        double d;
 
                         if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
                                 r = -EINVAL;
                                 goto finish;
                         }
 
-                        d = va_arg(ap, long double);
+                        d = va_arg(ap, double);
 
                         if (current->n_suppress == 0) {
                                 r = json_variant_new_real(&add, d);
@@ -3595,7 +3672,10 @@
                         break;
                 }
 
-                case _JSON_BUILD_BASE64: {
+                case _JSON_BUILD_BASE64:
+                case _JSON_BUILD_BASE32HEX:
+                case _JSON_BUILD_HEX:
+                case _JSON_BUILD_OCTESCAPE: {
                         const void *p;
                         size_t n;
 
@@ -3608,7 +3688,10 @@
                         n = va_arg(ap, size_t);
 
                         if (current->n_suppress == 0) {
-                                r = json_variant_new_base64(&add, p, n);
+                                r = command == _JSON_BUILD_BASE64    ? json_variant_new_base64(&add, p, n) :
+                                    command == _JSON_BUILD_BASE32HEX ? json_variant_new_base32hex(&add, p, n) :
+                                    command == _JSON_BUILD_HEX       ? json_variant_new_hex(&add, p, n) :
+                                                                       json_variant_new_octescape(&add, p, n);
                                 if (r < 0)
                                         goto finish;
                         }
@@ -3625,48 +3708,21 @@
                         break;
                 }
 
-                case _JSON_BUILD_HEX: {
-                        const void *p;
-                        size_t n;
+                case _JSON_BUILD_ID128:
+                case _JSON_BUILD_UUID: {
+                        const sd_id128_t *id;
 
                         if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
                                 r = -EINVAL;
                                 goto finish;
                         }
 
-                        p = va_arg(ap, const void *);
-                        n = va_arg(ap, size_t);
+                        assert_se(id = va_arg(ap, sd_id128_t*));
 
                         if (current->n_suppress == 0) {
-                                r = json_variant_new_hex(&add, p, n);
-                                if (r < 0)
-                                        goto finish;
-                        }
-
-                        n_subtract = 1;
-
-                        if (current->expect == EXPECT_TOPLEVEL)
-                                current->expect = EXPECT_END;
-                        else if (current->expect == EXPECT_OBJECT_VALUE)
-                                current->expect = EXPECT_OBJECT_KEY;
-                        else
-                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
-
-                        break;
-                }
-
-                case _JSON_BUILD_ID128: {
-                        sd_id128_t id;
-
-                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
-                                r = -EINVAL;
-                                goto finish;
-                        }
-
-                        id = va_arg(ap, sd_id128_t);
-
-                        if (current->n_suppress == 0) {
-                                r = json_variant_new_id128(&add, id);
+                                r = command == _JSON_BUILD_ID128 ?
+                                        json_variant_new_id128(&add, *id) :
+                                        json_variant_new_uuid(&add, *id);
                                 if (r < 0)
                                         goto finish;
                         }
@@ -3713,6 +3769,34 @@
                         break;
                 }
 
+                case _JSON_BUILD_HW_ADDR: {
+                        const struct hw_addr_data *hw_addr;
+
+                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        assert_se(hw_addr = va_arg(ap, struct hw_addr_data*));
+
+                        if (current->n_suppress == 0) {
+                                r = json_variant_new_array_bytes(&add, hw_addr->bytes, hw_addr->length);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 1;
+
+                        if (current->expect == EXPECT_TOPLEVEL)
+                                current->expect = EXPECT_END;
+                        else if (current->expect == EXPECT_OBJECT_VALUE)
+                                current->expect = EXPECT_OBJECT_KEY;
+                        else
+                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
+
+                        break;
+                }
+
                 case _JSON_BUILD_OBJECT_BEGIN:
 
                         if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
@@ -3735,10 +3819,10 @@
 
                         stack[n_stack++] = (JsonStack) {
                                 .expect = EXPECT_OBJECT_KEY,
-                                .n_suppress = current->n_suppress != 0 ? SIZE_MAX : 0, /* if we shall suppress the
-                                                                                           * new object, then we should
-                                                                                           * also suppress all object
-                                                                                           * members */
+                                .n_suppress = current->n_suppress != 0 ? SIZE_MAX : 0, /* If we shall suppress the
+                                                                                        * new object, then we should
+                                                                                        * also suppress all object
+                                                                                        * members. */
                         };
 
                         break;
@@ -3812,21 +3896,303 @@
 
                         current->expect = EXPECT_OBJECT_VALUE;
                         break;
-                }}
+                }
 
-                /* If a variant was generated, add it to our current variant, but only if we are not supposed to suppress additions */
+                case _JSON_BUILD_PAIR_UNSIGNED_NON_ZERO: {
+                        const char *n;
+                        uint64_t u;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        u = va_arg(ap, uint64_t);
+
+                        if (u != 0 && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_unsigned(&add_more, u);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_FINITE_USEC: {
+                        const char *n;
+                        usec_t u;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        u = va_arg(ap, usec_t);
+
+                        if (u != USEC_INFINITY && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_unsigned(&add_more, u);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_STRING_NON_EMPTY: {
+                        const char *n, *s;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        s = va_arg(ap, const char *);
+
+                        if (!isempty(s) && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_string(&add_more, s);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_STRV_NON_EMPTY: {
+                        const char *n;
+                        char **l;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        l = va_arg(ap, char **);
+
+                        if (!strv_isempty(l) && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_array_strv(&add_more, l);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_VARIANT_NON_NULL: {
+                        JsonVariant *v;
+                        const char *n;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        v = va_arg(ap, JsonVariant *);
+
+                        if (v && !json_variant_is_null(v) && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                add_more = json_variant_ref(v);
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_IN4_ADDR_NON_NULL: {
+                        const struct in_addr *a;
+                        const char *n;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        a = va_arg(ap, const struct in_addr *);
+
+                        if (a && in4_addr_is_set(a) && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_array_bytes(&add_more, a, sizeof(struct in_addr));
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_IN6_ADDR_NON_NULL: {
+                        const struct in6_addr *a;
+                        const char *n;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        a = va_arg(ap, const struct in6_addr *);
+
+                        if (a && in6_addr_is_set(a) && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_array_bytes(&add_more, a, sizeof(struct in6_addr));
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_IN_ADDR_NON_NULL: {
+                        const union in_addr_union *a;
+                        const char *n;
+                        int f;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        a = va_arg(ap, const union in_addr_union *);
+                        f = va_arg(ap, int);
+
+                        if (a && in_addr_is_set(f, a) && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_array_bytes(&add_more, a->bytes, FAMILY_ADDRESS_SIZE(f));
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL: {
+                        const struct ether_addr *a;
+                        const char *n;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        a = va_arg(ap, const struct ether_addr *);
+
+                        if (a && !ether_addr_is_null(a) && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_array_bytes(&add_more, a->ether_addr_octet, sizeof(struct ether_addr));
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+
+                case _JSON_BUILD_PAIR_HW_ADDR_NON_NULL: {
+                        const struct hw_addr_data *a;
+                        const char *n;
+
+                        if (current->expect != EXPECT_OBJECT_KEY) {
+                                r = -EINVAL;
+                                goto finish;
+                        }
+
+                        n = va_arg(ap, const char *);
+                        a = va_arg(ap, const struct hw_addr_data *);
+
+                        if (a && !hw_addr_is_null(a) && current->n_suppress == 0) {
+                                r = json_variant_new_string(&add, n);
+                                if (r < 0)
+                                        goto finish;
+
+                                r = json_variant_new_array_bytes(&add_more, a->bytes, a->length);
+                                if (r < 0)
+                                        goto finish;
+                        }
+
+                        n_subtract = 2; /* we generated two item */
+
+                        current->expect = EXPECT_OBJECT_KEY;
+                        break;
+                }
+                }
+
+                /* If variants were generated, add them to our current variant, but only if we are not supposed to suppress additions */
                 if (add && current->n_suppress == 0) {
-                        if (!GREEDY_REALLOC(current->elements, current->n_elements + 1)) {
+                        if (!GREEDY_REALLOC(current->elements, current->n_elements + 1 + !!add_more)) {
                                 r = -ENOMEM;
                                 goto finish;
                         }
 
                         current->elements[current->n_elements++] = TAKE_PTR(add);
+                        if (add_more)
+                                current->elements[current->n_elements++] = TAKE_PTR(add_more);
                 }
 
-                /* If we are supposed to suppress items, let's subtract how many items where generated from that
-                 * counter. Except if the counter is SIZE_MAX, i.e. we shall suppress an infinite number of elements
-                 * on this stack level */
+                /* If we are supposed to suppress items, let's subtract how many items where generated from
+                 * that counter. Except if the counter is SIZE_MAX, i.e. we shall suppress an infinite number
+                 * of elements on this stack level */
                 if (current->n_suppress != SIZE_MAX) {
                         if (current->n_suppress <= n_subtract) /* Saturated */
                                 current->n_suppress = 0;
@@ -3843,7 +4209,7 @@
         r = 0;
 
 finish:
-        for (i = 0; i < n_stack; i++)
+        for (size_t i = 0; i < n_stack; i++)
                 json_stack_release(stack + i);
 
         free(stack);
@@ -3862,6 +4228,30 @@
         return r;
 }
 
+int json_appendv(JsonVariant **v, va_list ap) {
+        _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+        int r;
+
+        assert(v);
+
+        r = json_buildv(&w, ap);
+        if (r < 0)
+                return r;
+
+        return json_variant_merge(v, w);
+}
+
+int json_append(JsonVariant **v, ...) {
+        va_list ap;
+        int r;
+
+        va_start(ap, v);
+        r = json_appendv(v, ap);
+        va_end(ap);
+
+        return r;
+}
+
 int json_log_internal(
                 JsonVariant *variant,
                 int level,
@@ -3926,9 +4316,21 @@
                                 NULL);
 }
 
+static void *dispatch_userdata(const JsonDispatch *p, void *userdata) {
+
+        /* When the userdata pointer is passed in as NULL, then we'll just use the offset as a literal
+         * address, and convert it to a pointer.  Note that might as well just add the offset to the NULL
+         * pointer, but UndefinedBehaviourSanitizer doesn't like pointer arithmetics based on NULL pointers,
+         * hence we code this explicitly here. */
+
+        if (userdata)
+                return (uint8_t*) userdata + p->offset;
+
+        return SIZE_TO_PTR(p->offset);
+}
+
 int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallback bad, JsonDispatchFlags flags, void *userdata) {
-        const JsonDispatch *p;
-        size_t i, n, m;
+        size_t m;
         int r, done = 0;
         bool *found;
 
@@ -3941,14 +4343,16 @@
                 return -EINVAL;
         }
 
-        for (p = table, m = 0; p->name; p++)
+        m = 0;
+        for (const JsonDispatch *p = table; p->name; p++)
                 m++;
 
         found = newa0(bool, m);
 
-        n = json_variant_elements(v);
-        for (i = 0; i < n; i += 2) {
+        size_t n = json_variant_elements(v);
+        for (size_t i = 0; i < n; i += 2) {
                 JsonVariant *key, *value;
+                const JsonDispatch *p;
 
                 assert_se(key = json_variant_by_index(v, i));
                 assert_se(value = json_variant_by_index(v, i+1));
@@ -3988,7 +4392,7 @@
                         found[p-table] = true;
 
                         if (p->callback) {
-                                r = p->callback(json_variant_string(key), value, merged_flags, (uint8_t*) userdata + p->offset);
+                                r = p->callback(json_variant_string(key), value, merged_flags, dispatch_userdata(p, userdata));
                                 if (r < 0) {
                                         if (merged_flags & JSON_PERMISSIVE)
                                                 continue;
@@ -4022,7 +4426,7 @@
                 }
         }
 
-        for (p = table; p->name; p++) {
+        for (const JsonDispatch *p = table; p->name; p++) {
                 JsonDispatchFlags merged_flags = p->flags | flags;
 
                 if ((merged_flags & JSON_MANDATORY) && !found[p-table]) {
@@ -4039,10 +4443,9 @@
 }
 
 int json_dispatch_boolean(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        bool *b = userdata;
+        bool *b = ASSERT_PTR(userdata);
 
         assert(variant);
-        assert(b);
 
         if (!json_variant_is_boolean(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a boolean.", strna(name));
@@ -4052,10 +4455,9 @@
 }
 
 int json_dispatch_tristate(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        int *b = userdata;
+        int *b = ASSERT_PTR(userdata);
 
         assert(variant);
-        assert(b);
 
         if (json_variant_is_null(variant)) {
                 *b = -1;
@@ -4069,11 +4471,10 @@
         return 0;
 }
 
-int json_dispatch_intmax(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        intmax_t *i = userdata;
+int json_dispatch_int64(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        int64_t *i = ASSERT_PTR(userdata);
 
         assert(variant);
-        assert(i);
 
         if (!json_variant_is_integer(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name));
@@ -4082,11 +4483,10 @@
         return 0;
 }
 
-int json_dispatch_uintmax(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        uintmax_t *u = userdata;
+int json_dispatch_uint64(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        uint64_t *u = ASSERT_PTR(userdata);
 
         assert(variant);
-        assert(u);
 
         if (!json_variant_is_unsigned(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an unsigned integer.", strna(name));
@@ -4096,10 +4496,9 @@
 }
 
 int json_dispatch_uint32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        uint32_t *u = userdata;
+        uint32_t *u = ASSERT_PTR(userdata);
 
         assert(variant);
-        assert(u);
 
         if (!json_variant_is_unsigned(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an unsigned integer.", strna(name));
@@ -4112,10 +4511,9 @@
 }
 
 int json_dispatch_int32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        int32_t *i = userdata;
+        int32_t *i = ASSERT_PTR(userdata);
 
         assert(variant);
-        assert(i);
 
         if (!json_variant_is_integer(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name));
@@ -4127,12 +4525,41 @@
         return 0;
 }
 
+int json_dispatch_int16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        int16_t *i = ASSERT_PTR(userdata);
+
+        assert(variant);
+
+        if (!json_variant_is_integer(variant))
+                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name));
+
+        if (json_variant_integer(variant) < INT16_MIN || json_variant_integer(variant) > INT16_MAX)
+                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' out of bounds.", strna(name));
+
+        *i = (int16_t) json_variant_integer(variant);
+        return 0;
+}
+
+int json_dispatch_uint16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        uint16_t *i = ASSERT_PTR(userdata);
+
+        assert(variant);
+
+        if (!json_variant_is_unsigned(variant))
+                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an unsigned integer.", strna(name));
+
+        if (json_variant_unsigned(variant) > UINT16_MAX)
+                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' out of bounds.", strna(name));
+
+        *i = (uint16_t) json_variant_unsigned(variant);
+        return 0;
+}
+
 int json_dispatch_string(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        char **s = userdata;
+        char **s = ASSERT_PTR(userdata);
         int r;
 
         assert(variant);
-        assert(s);
 
         if (json_variant_is_null(variant)) {
                 *s = mfree(*s);
@@ -4153,10 +4580,9 @@
 }
 
 int json_dispatch_const_string(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        const char **s = userdata;
+        const char **s = ASSERT_PTR(userdata);
 
         assert(variant);
-        assert(s);
 
         if (json_variant_is_null(variant)) {
                 *s = NULL;
@@ -4175,12 +4601,11 @@
 
 int json_dispatch_strv(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
         _cleanup_strv_free_ char **l = NULL;
-        char ***s = userdata;
+        char ***s = ASSERT_PTR(userdata);
         JsonVariant *e;
         int r;
 
         assert(variant);
-        assert(s);
 
         if (json_variant_is_null(variant)) {
                 *s = strv_free(*s);
@@ -4220,20 +4645,16 @@
 }
 
 int json_dispatch_variant(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        JsonVariant **p = userdata;
-
+        JsonVariant **p = ASSERT_PTR(userdata);
         assert(variant);
-        assert(p);
 
-        json_variant_unref(*p);
-        *p = json_variant_ref(variant);
-
+        JSON_VARIANT_REPLACE(*p, json_variant_ref(variant));
         return 0;
 }
 
 int json_dispatch_uid_gid(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
         uid_t *uid = userdata;
-        uintmax_t k;
+        uint64_t k;
 
         assert_cc(sizeof(uid_t) == sizeof(uint32_t));
         assert_cc(sizeof(gid_t) == sizeof(uint32_t));
@@ -4316,8 +4737,8 @@
 
 int json_variant_sort(JsonVariant **v) {
         _cleanup_free_ JsonVariant **a = NULL;
-        JsonVariant *n = NULL;
-        size_t i, m;
+        _cleanup_(json_variant_unrefp) JsonVariant *n = NULL;
+        size_t m;
         int r;
 
         assert(v);
@@ -4335,7 +4756,7 @@
         if (!a)
                 return -ENOMEM;
 
-        for (i = 0; i < m; i++)
+        for (size_t i = 0; i < m; i++)
                 a[i] = json_variant_by_index(*v, i);
 
         qsort(a, m/2, sizeof(JsonVariant*)*2, json_cmp_strings);
@@ -4349,16 +4770,15 @@
         if (!n->sorted) /* Check if this worked. This will fail if there are multiple identical keys used. */
                 return -ENOTUNIQ;
 
-        json_variant_unref(*v);
-        *v = n;
+        JSON_VARIANT_REPLACE(*v, TAKE_PTR(n));
 
         return 1;
 }
 
 int json_variant_normalize(JsonVariant **v) {
         _cleanup_free_ JsonVariant **a = NULL;
-        JsonVariant *n = NULL;
-        size_t i, j, m;
+        _cleanup_(json_variant_unrefp) JsonVariant *n = NULL;
+        size_t i, m;
         int r;
 
         assert(v);
@@ -4376,10 +4796,11 @@
         if (!a)
                 return -ENOMEM;
 
-        for (i = 0; i < m; i++) {
+        for (i = 0; i < m; ) {
                 a[i] = json_variant_ref(json_variant_by_index(*v, i));
+                i++;
 
-                r = json_variant_normalize(a + i);
+                r = json_variant_normalize(&a[i-1]);
                 if (r < 0)
                         goto finish;
         }
@@ -4404,23 +4825,21 @@
                 goto finish;
         }
 
-        json_variant_unref(*v);
-        *v = n;
+        JSON_VARIANT_REPLACE(*v, TAKE_PTR(n));
 
         r = 1;
 
 finish:
-        for (j = 0; j < i; j++)
+        for (size_t j = 0; j < i; j++)
                 json_variant_unref(a[j]);
 
         return r;
 }
 
 bool json_variant_is_normalized(JsonVariant *v) {
-
-        /* For now, let's consider anything containing numbers not expressible as integers as
-         * non-normalized. That's because we cannot sensibly compare them due to accuracy issues, nor even
-         * store them if they are too large. */
+        /* For now, let's consider anything containing numbers not expressible as integers as non-normalized.
+         * That's because we cannot sensibly compare them due to accuracy issues, nor even store them if they
+         * are too large. */
         if (json_variant_is_real(v) && !json_variant_is_integer(v) && !json_variant_is_unsigned(v))
                 return false;
 
@@ -4450,7 +4869,6 @@
 }
 
 int json_variant_unbase64(JsonVariant *v, void **ret, size_t *ret_size) {
-
         if (!json_variant_is_string(v))
                 return -EINVAL;
 
@@ -4458,7 +4876,6 @@
 }
 
 int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size) {
-
         if (!json_variant_is_string(v))
                 return -EINVAL;
 
@@ -4466,15 +4883,15 @@
 }
 
 static const char* const json_variant_type_table[_JSON_VARIANT_TYPE_MAX] = {
-        [JSON_VARIANT_STRING] = "string",
-        [JSON_VARIANT_INTEGER] = "integer",
+        [JSON_VARIANT_STRING]   = "string",
+        [JSON_VARIANT_INTEGER]  = "integer",
         [JSON_VARIANT_UNSIGNED] = "unsigned",
-        [JSON_VARIANT_REAL] = "real",
-        [JSON_VARIANT_NUMBER] = "number",
-        [JSON_VARIANT_BOOLEAN] = "boolean",
-        [JSON_VARIANT_ARRAY] = "array",
-        [JSON_VARIANT_OBJECT] = "object",
-        [JSON_VARIANT_NULL] = "null",
+        [JSON_VARIANT_REAL]     = "real",
+        [JSON_VARIANT_NUMBER]   = "number",
+        [JSON_VARIANT_BOOLEAN]  = "boolean",
+        [JSON_VARIANT_ARRAY]    = "array",
+        [JSON_VARIANT_OBJECT]   = "object",
+        [JSON_VARIANT_NULL]     = "null",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(json_variant_type, JsonVariantType);
diff --git a/src/shared/json.h b/src/shared/json.h
index c679f8f..5d79472 100644
--- a/src/shared/json.h
+++ b/src/shared/json.h
@@ -9,9 +9,13 @@
 
 #include "sd-id128.h"
 
+#include "ether-addr-util.h"
+#include "in-addr-util.h"
+#include "log.h"
 #include "macro.h"
 #include "string-util.h"
-#include "log.h"
+#include "strv.h"
+#include "time-util.h"
 
 /*
   In case you wonder why we have our own JSON implementation, here are a couple of reasons why this implementation has
@@ -29,10 +33,10 @@
 
   Limitations:
   - Doesn't allow embedded NUL in strings
-  - Can't store integers outside of the -9223372036854775808…18446744073709551615 range (it will use 'long double' for
+  - Can't store integers outside of the -9223372036854775808…18446744073709551615 range (it will use 'double' for
     values outside this range, which is lossy)
   - Can't store negative zero (will be treated identical to positive zero, and not retained across serialization)
-  - Can't store non-integer numbers that can't be stored in "long double" losslessly
+  - Can't store non-integer numbers that can't be stored in "double" losslessly
   - Allows creation and parsing of objects with duplicate keys. The "dispatcher" will refuse them however. This means
     we can parse and pass around such objects, but will carefully refuse them when we convert them into our own data.
 
@@ -58,10 +62,12 @@
 
 int json_variant_new_stringn(JsonVariant **ret, const char *s, size_t n);
 int json_variant_new_base64(JsonVariant **ret, const void *p, size_t n);
+int json_variant_new_base32hex(JsonVariant **ret, const void *p, size_t n);
 int json_variant_new_hex(JsonVariant **ret, const void *p, size_t n);
-int json_variant_new_integer(JsonVariant **ret, intmax_t i);
-int json_variant_new_unsigned(JsonVariant **ret, uintmax_t u);
-int json_variant_new_real(JsonVariant **ret, long double d);
+int json_variant_new_octescape(JsonVariant **ret, const void *p, size_t n);
+int json_variant_new_integer(JsonVariant **ret, int64_t i);
+int json_variant_new_unsigned(JsonVariant **ret, uint64_t u);
+int json_variant_new_real(JsonVariant **ret, double d);
 int json_variant_new_boolean(JsonVariant **ret, bool b);
 int json_variant_new_array(JsonVariant **ret, JsonVariant **array, size_t n);
 int json_variant_new_array_bytes(JsonVariant **ret, const void *p, size_t n);
@@ -69,6 +75,7 @@
 int json_variant_new_object(JsonVariant **ret, JsonVariant **array, size_t n);
 int json_variant_new_null(JsonVariant **ret);
 int json_variant_new_id128(JsonVariant **ret, sd_id128_t id);
+int json_variant_new_uuid(JsonVariant **ret, sd_id128_t id);
 
 static inline int json_variant_new_string(JsonVariant **ret, const char *s) {
         return json_variant_new_stringn(ret, s, SIZE_MAX);
@@ -78,12 +85,20 @@
 JsonVariant *json_variant_unref(JsonVariant *v);
 void json_variant_unref_many(JsonVariant **array, size_t n);
 
+#define JSON_VARIANT_REPLACE(v, q)        \
+        do {                              \
+                typeof(v)* _v = &(v);     \
+                typeof(q) _q = (q);       \
+                json_variant_unref(*_v);  \
+                *_v = _q;                 \
+        } while(0)
+
 DEFINE_TRIVIAL_CLEANUP_FUNC(JsonVariant *, json_variant_unref);
 
 const char *json_variant_string(JsonVariant *v);
-intmax_t json_variant_integer(JsonVariant *v);
-uintmax_t json_variant_unsigned(JsonVariant *v);
-long double json_variant_real(JsonVariant *v);
+int64_t json_variant_integer(JsonVariant *v);
+uint64_t json_variant_unsigned(JsonVariant *v);
+double json_variant_real(JsonVariant *v);
 bool json_variant_boolean(JsonVariant *v);
 
 JsonVariantType json_variant_type(JsonVariant *v);
@@ -179,22 +194,26 @@
         JSON_FORMAT_SSE         = 1 << 6, /* prefix/suffix with W3C server-sent events */
         JSON_FORMAT_SEQ         = 1 << 7, /* prefix/suffix with RFC 7464 application/json-seq */
         JSON_FORMAT_FLUSH       = 1 << 8, /* call fflush() after dumping JSON */
-        JSON_FORMAT_OFF         = 1 << 9, /* make json_variant_format() fail with -ENOEXEC */
+        JSON_FORMAT_EMPTY_ARRAY = 1 << 9, /* output "[]" for empty input */
+        JSON_FORMAT_OFF         = 1 << 10, /* make json_variant_format() fail with -ENOEXEC */
 } JsonFormatFlags;
 
 int json_variant_format(JsonVariant *v, JsonFormatFlags flags, char **ret);
-void json_variant_dump(JsonVariant *v, JsonFormatFlags flags, FILE *f, const char *prefix);
+int json_variant_dump(JsonVariant *v, JsonFormatFlags flags, FILE *f, const char *prefix);
 
 int json_variant_filter(JsonVariant **v, char **to_remove);
 
 int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *value);
 int json_variant_set_field_string(JsonVariant **v, const char *field, const char *value);
-int json_variant_set_field_integer(JsonVariant **v, const char *field, intmax_t value);
-int json_variant_set_field_unsigned(JsonVariant **v, const char *field, uintmax_t value);
+int json_variant_set_field_integer(JsonVariant **v, const char *field, int64_t value);
+int json_variant_set_field_unsigned(JsonVariant **v, const char *field, uint64_t value);
 int json_variant_set_field_boolean(JsonVariant **v, const char *field, bool b);
 int json_variant_set_field_strv(JsonVariant **v, const char *field, char **l);
 
+JsonVariant *json_variant_find(JsonVariant *haystack, JsonVariant *needle);
+
 int json_variant_append_array(JsonVariant **v, JsonVariant *element);
+int json_variant_append_array_nodup(JsonVariant **v, JsonVariant *element);
 
 int json_variant_merge(JsonVariant **v, JsonVariant *m);
 
@@ -207,8 +226,16 @@
         JSON_PARSE_SENSITIVE = 1 << 0, /* mark variant as "sensitive", i.e. something containing secret key material or such */
 } JsonParseFlags;
 
-int json_parse(const char *string, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column);
-int json_parse_continue(const char **p, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column);
+int json_parse_with_source(const char *string, const char *source, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column);
+int json_parse_with_source_continue(const char **p, const char *source, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column);
+
+static inline int json_parse(const char *string, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column) {
+        return json_parse_with_source(string, NULL, flags, ret, ret_line, ret_column);
+}
+static inline int json_parse_continue(const char **p, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column) {
+        return json_parse_with_source_continue(p, NULL, flags, ret, ret_line, ret_column);
+}
+
 int json_parse_file_at(FILE *f, int dir_fd, const char *path, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column);
 
 static inline int json_parse_file(FILE *f, const char *path, JsonParseFlags flags, JsonVariant **ret, unsigned *ret_line, unsigned *ret_column) {
@@ -233,35 +260,98 @@
         _JSON_BUILD_LITERAL,
         _JSON_BUILD_STRV,
         _JSON_BUILD_BASE64,
+        _JSON_BUILD_BASE32HEX,
         _JSON_BUILD_HEX,
+        _JSON_BUILD_OCTESCAPE,
         _JSON_BUILD_ID128,
+        _JSON_BUILD_UUID,
         _JSON_BUILD_BYTE_ARRAY,
+        _JSON_BUILD_HW_ADDR,
+        _JSON_BUILD_PAIR_UNSIGNED_NON_ZERO,
+        _JSON_BUILD_PAIR_FINITE_USEC,
+        _JSON_BUILD_PAIR_STRING_NON_EMPTY,
+        _JSON_BUILD_PAIR_STRV_NON_EMPTY,
+        _JSON_BUILD_PAIR_VARIANT_NON_NULL,
+        _JSON_BUILD_PAIR_VARIANT_ARRAY_NON_EMPTY,
+        _JSON_BUILD_PAIR_IN4_ADDR_NON_NULL,
+        _JSON_BUILD_PAIR_IN6_ADDR_NON_NULL,
+        _JSON_BUILD_PAIR_IN_ADDR_NON_NULL,
+        _JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL,
+        _JSON_BUILD_PAIR_HW_ADDR_NON_NULL,
         _JSON_BUILD_MAX,
 };
 
-#define JSON_BUILD_STRING(s) _JSON_BUILD_STRING, ({ const char *_x = s; _x; })
-#define JSON_BUILD_INTEGER(i) _JSON_BUILD_INTEGER, ({ intmax_t _x = i; _x; })
-#define JSON_BUILD_UNSIGNED(u) _JSON_BUILD_UNSIGNED, ({ uintmax_t _x = u; _x; })
-#define JSON_BUILD_REAL(d) _JSON_BUILD_REAL, ({ long double _x = d; _x; })
-#define JSON_BUILD_BOOLEAN(b) _JSON_BUILD_BOOLEAN, ({ bool _x = b; _x; })
+#define JSON_BUILD_STRING(s) _JSON_BUILD_STRING, (const char*) { s }
+#define JSON_BUILD_INTEGER(i) _JSON_BUILD_INTEGER, (int64_t) { i }
+#define JSON_BUILD_UNSIGNED(u) _JSON_BUILD_UNSIGNED, (uint64_t) { u }
+#define JSON_BUILD_REAL(d) _JSON_BUILD_REAL, (double) { d }
+#define JSON_BUILD_BOOLEAN(b) _JSON_BUILD_BOOLEAN, (bool) { b }
 #define JSON_BUILD_ARRAY(...) _JSON_BUILD_ARRAY_BEGIN, __VA_ARGS__, _JSON_BUILD_ARRAY_END
 #define JSON_BUILD_EMPTY_ARRAY _JSON_BUILD_ARRAY_BEGIN, _JSON_BUILD_ARRAY_END
 #define JSON_BUILD_OBJECT(...) _JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _JSON_BUILD_OBJECT_END
 #define JSON_BUILD_EMPTY_OBJECT _JSON_BUILD_OBJECT_BEGIN, _JSON_BUILD_OBJECT_END
-#define JSON_BUILD_PAIR(n, ...) _JSON_BUILD_PAIR, ({ const char *_x = n; _x; }), __VA_ARGS__
-#define JSON_BUILD_PAIR_CONDITION(c, n, ...) _JSON_BUILD_PAIR_CONDITION, ({ bool _x = c; _x; }), ({ const char *_x = n; _x; }), __VA_ARGS__
+#define JSON_BUILD_PAIR(n, ...) _JSON_BUILD_PAIR, (const char*) { n }, __VA_ARGS__
+#define JSON_BUILD_PAIR_CONDITION(c, n, ...) _JSON_BUILD_PAIR_CONDITION, (bool) { c }, (const char*) { n }, __VA_ARGS__
 #define JSON_BUILD_NULL _JSON_BUILD_NULL
-#define JSON_BUILD_VARIANT(v) _JSON_BUILD_VARIANT, ({ JsonVariant *_x = v; _x; })
-#define JSON_BUILD_VARIANT_ARRAY(v, n) _JSON_BUILD_VARIANT_ARRAY, ({ JsonVariant **_x = v; _x; }), ({ size_t _y = n; _y; })
-#define JSON_BUILD_LITERAL(l) _JSON_BUILD_LITERAL, ({ const char *_x = l; _x; })
-#define JSON_BUILD_STRV(l) _JSON_BUILD_STRV, ({ char **_x = l; _x; })
-#define JSON_BUILD_BASE64(p, n) _JSON_BUILD_BASE64, ({ const void *_x = p; _x; }), ({ size_t _y = n; _y; })
-#define JSON_BUILD_HEX(p, n) _JSON_BUILD_HEX, ({ const void *_x = p; _x; }), ({ size_t _y = n; _y; })
-#define JSON_BUILD_ID128(id) _JSON_BUILD_ID128, ({ sd_id128_t _x = id; _x; })
-#define JSON_BUILD_BYTE_ARRAY(v, n) _JSON_BUILD_BYTE_ARRAY, ({ const void *_x = v; _x; }), ({ size_t _y = n; _y; })
+#define JSON_BUILD_VARIANT(v) _JSON_BUILD_VARIANT, (JsonVariant*) { v }
+#define JSON_BUILD_VARIANT_ARRAY(v, n) _JSON_BUILD_VARIANT_ARRAY, (JsonVariant **) { v }, (size_t) { n }
+#define JSON_BUILD_LITERAL(l) _JSON_BUILD_LITERAL, (const char*) { l }
+#define JSON_BUILD_STRV(l) _JSON_BUILD_STRV, (char**) { l }
+#define JSON_BUILD_BASE64(p, n) _JSON_BUILD_BASE64, (const void*) { p }, (size_t) { n }
+#define JSON_BUILD_BASE32HEX(p, n) _JSON_BUILD_BASE32HEX, (const void*) { p }, (size_t) { n }
+#define JSON_BUILD_HEX(p, n) _JSON_BUILD_HEX, (const void*) { p }, (size_t) { n }
+#define JSON_BUILD_OCTESCAPE(p, n) _JSON_BUILD_OCTESCAPE, (const void*) { p }, (size_t) { n }
+#define JSON_BUILD_ID128(id) _JSON_BUILD_ID128, (const sd_id128_t*) { &(id) }
+#define JSON_BUILD_UUID(id) _JSON_BUILD_UUID, (const sd_id128_t*) { &(id) }
+#define JSON_BUILD_BYTE_ARRAY(v, n) _JSON_BUILD_BYTE_ARRAY, (const void*) { v }, (size_t) { n }
+#define JSON_BUILD_CONST_STRING(s) _JSON_BUILD_VARIANT, JSON_VARIANT_STRING_CONST(s)
+#define JSON_BUILD_IN4_ADDR(v) JSON_BUILD_BYTE_ARRAY((const struct in_addr*) { v }, sizeof(struct in_addr))
+#define JSON_BUILD_IN6_ADDR(v) JSON_BUILD_BYTE_ARRAY((const struct in6_addr*) { v }, sizeof(struct in6_addr))
+#define JSON_BUILD_IN_ADDR(v, f) JSON_BUILD_BYTE_ARRAY(((const union in_addr_union*) { v })->bytes, FAMILY_ADDRESS_SIZE_SAFE(f))
+#define JSON_BUILD_ETHER_ADDR(v) JSON_BUILD_BYTE_ARRAY(((const struct ether_addr*) { v })->ether_addr_octet, sizeof(struct ether_addr))
+#define JSON_BUILD_HW_ADDR(v) _JSON_BUILD_HW_ADDR, (const struct hw_addr_data*) { v }
+
+#define JSON_BUILD_PAIR_STRING(name, s) JSON_BUILD_PAIR(name, JSON_BUILD_STRING(s))
+#define JSON_BUILD_PAIR_INTEGER(name, i) JSON_BUILD_PAIR(name, JSON_BUILD_INTEGER(i))
+#define JSON_BUILD_PAIR_UNSIGNED(name, u) JSON_BUILD_PAIR(name, JSON_BUILD_UNSIGNED(u))
+#define JSON_BUILD_PAIR_REAL(name, d) JSON_BUILD_PAIR(name, JSON_BUILD_REAL(d))
+#define JSON_BUILD_PAIR_BOOLEAN(name, b) JSON_BUILD_PAIR(name, JSON_BUILD_BOOLEAN(b))
+#define JSON_BUILD_PAIR_ARRAY(name, ...) JSON_BUILD_PAIR(name, JSON_BUILD_ARRAY(__VA_ARGS__))
+#define JSON_BUILD_PAIR_EMPTY_ARRAY(name) JSON_BUILD_PAIR(name, JSON_BUILD_EMPTY_ARRAY)
+#define JSON_BUILD_PAIR_OBJECT(name, ...) JSON_BUILD_PAIR(name, JSON_BUILD_OBJECT(__VA_ARGS__))
+#define JSON_BUILD_PAIR_EMPTY_OBJECT(name) JSON_BUILD_PAIR(name, JSON_BUILD_EMPTY_OBJECT)
+#define JSON_BUILD_PAIR_NULL(name) JSON_BUILD_PAIR(name, JSON_BUILD_NULL)
+#define JSON_BUILD_PAIR_VARIANT(name, v) JSON_BUILD_PAIR(name, JSON_BUILD_VARIANT(v))
+#define JSON_BUILD_PAIR_VARIANT_ARRAY(name, v, n) JSON_BUILD_PAIR(name, JSON_BUILD_VARIANT_ARRAY(v, n))
+#define JSON_BUILD_PAIR_LITERAL(name, l) JSON_BUILD_PAIR(name, JSON_BUILD_LITERAL(l))
+#define JSON_BUILD_PAIR_STRV(name, l) JSON_BUILD_PAIR(name, JSON_BUILD_STRV(l))
+#define JSON_BUILD_PAIR_BASE64(name, p, n) JSON_BUILD_PAIR(name, JSON_BUILD_BASE64(p, n))
+#define JSON_BUILD_PAIR_HEX(name, p, n) JSON_BUILD_PAIR(name, JSON_BUILD_HEX(p, n))
+#define JSON_BUILD_PAIR_ID128(name, id) JSON_BUILD_PAIR(name, JSON_BUILD_ID128(id))
+#define JSON_BUILD_PAIR_UUID(name, id) JSON_BUILD_PAIR(name, JSON_BUILD_UUID(id))
+#define JSON_BUILD_PAIR_BYTE_ARRAY(name, v, n) JSON_BUILD_PAIR(name, JSON_BUILD_BYTE_ARRAY(v, n))
+#define JSON_BUILD_PAIR_IN4_ADDR(name, v) JSON_BUILD_PAIR(name, JSON_BUILD_IN4_ADDR(v))
+#define JSON_BUILD_PAIR_IN6_ADDR(name, v) JSON_BUILD_PAIR(name, JSON_BUILD_IN6_ADDR(v))
+#define JSON_BUILD_PAIR_IN_ADDR(name, v, f) JSON_BUILD_PAIR(name, JSON_BUILD_IN_ADDR(v, f))
+#define JSON_BUILD_PAIR_ETHER_ADDR(name, v) JSON_BUILD_PAIR(name, JSON_BUILD_ETHER_ADDR(v))
+#define JSON_BUILD_PAIR_HW_ADDR(name, v) JSON_BUILD_PAIR(name, JSON_BUILD_HW_ADDR(v))
+
+#define JSON_BUILD_PAIR_UNSIGNED_NON_ZERO(name, u) _JSON_BUILD_PAIR_UNSIGNED_NON_ZERO, (const char*) { name }, (uint64_t) { u }
+#define JSON_BUILD_PAIR_FINITE_USEC(name, u) _JSON_BUILD_PAIR_FINITE_USEC, (const char*) { name }, (usec_t) { u }
+#define JSON_BUILD_PAIR_STRING_NON_EMPTY(name, s) _JSON_BUILD_PAIR_STRING_NON_EMPTY, (const char*) { name }, (const char*) { s }
+#define JSON_BUILD_PAIR_STRV_NON_EMPTY(name, l) _JSON_BUILD_PAIR_STRV_NON_EMPTY, (const char*) { name }, (char**) { l }
+#define JSON_BUILD_PAIR_VARIANT_NON_NULL(name, v) _JSON_BUILD_PAIR_VARIANT_NON_NULL, (const char*) { name }, (JsonVariant*) { v }
+#define JSON_BUILD_PAIR_IN4_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_IN4_ADDR_NON_NULL, (const char*) { name }, (const struct in_addr*) { v }
+#define JSON_BUILD_PAIR_IN6_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_IN6_ADDR_NON_NULL, (const char*) { name }, (const struct in6_addr*) { v }
+#define JSON_BUILD_PAIR_IN_ADDR_NON_NULL(name, v, f) _JSON_BUILD_PAIR_IN_ADDR_NON_NULL, (const char*) { name }, (const union in_addr_union*) { v }, (int) { f }
+#define JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL, (const char*) { name }, (const struct ether_addr*) { v }
+#define JSON_BUILD_PAIR_HW_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_HW_ADDR_NON_NULL, (const char*) { name }, (const struct hw_addr_data*) { v }
 
 int json_build(JsonVariant **ret, ...);
 int json_buildv(JsonVariant **ret, va_list ap);
+ /* These two functions below are equivalent to json_build() (or json_buildv()) and json_variant_merge(). */
+int json_append(JsonVariant **v, ...);
+int json_appendv(JsonVariant **v, va_list ap);
 
 /* A bitmask of flags used by the dispatch logic. Note that this is a combined bit mask, that is generated from the bit
  * mask originally passed into json_dispatch(), the individual bitmask associated with the static JsonDispatch callout
@@ -274,9 +364,9 @@
         JSON_SAFE       = 1 << 3, /* Don't accept "unsafe" strings in json_dispatch_string() + json_dispatch_string() */
         JSON_RELAX      = 1 << 4, /* Use relaxed user name checking in json_dispatch_user_group_name */
 
-        /* The following two may be passed into log_json() in addition to the three above */
-        JSON_DEBUG      = 1 << 4, /* Indicates that this log message is a debug message */
-        JSON_WARNING    = 1 << 5, /* Indicates that this log message is a warning message */
+        /* The following two may be passed into log_json() in addition to those above */
+        JSON_DEBUG      = 1 << 5, /* Indicates that this log message is a debug message */
+        JSON_WARNING    = 1 << 6, /* Indicates that this log message is a warning message */
 } JsonDispatchFlags;
 
 typedef int (*JsonDispatchCallback)(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
@@ -297,21 +387,17 @@
 int json_dispatch_boolean(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 int json_dispatch_tristate(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 int json_dispatch_variant(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
-int json_dispatch_intmax(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
-int json_dispatch_uintmax(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
+int json_dispatch_int64(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
+int json_dispatch_uint64(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 int json_dispatch_uint32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 int json_dispatch_int32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
+int json_dispatch_uint16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
+int json_dispatch_int16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 int json_dispatch_uid_gid(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 int json_dispatch_user_group_name(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 int json_dispatch_id128(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 int json_dispatch_unsupported(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
 
-assert_cc(sizeof(uintmax_t) == sizeof(uint64_t));
-#define json_dispatch_uint64 json_dispatch_uintmax
-
-assert_cc(sizeof(intmax_t) == sizeof(int64_t));
-#define json_dispatch_int64 json_dispatch_intmax
-
 assert_cc(sizeof(uint32_t) == sizeof(unsigned));
 #define json_dispatch_uint json_dispatch_uint32
 
diff --git a/src/shared/kbd-util.c b/src/shared/kbd-util.c
index 92abaea..6222ef4 100644
--- a/src/shared/kbd-util.c
+++ b/src/shared/kbd-util.c
@@ -1,86 +1,104 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <ftw.h>
-
 #include "errno-util.h"
 #include "kbd-util.h"
 #include "log.h"
 #include "nulstr-util.h"
 #include "path-util.h"
+#include "recurse-dir.h"
 #include "set.h"
 #include "string-util.h"
 #include "strv.h"
 #include "utf8.h"
 
-static thread_local const char *keymap_name = NULL;
-static thread_local Set *keymaps = NULL;
+struct recurse_dir_userdata {
+        const char *keymap_name;
+        Set *keymaps;
+};
 
-static int nftw_cb(
-                const char *fpath,
-                const struct stat *sb,
-                int tflag,
-                struct FTW *ftwbuf) {
+static int keymap_recurse_dir_callback(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
 
+        struct recurse_dir_userdata *data = userdata;
         _cleanup_free_ char *p = NULL;
         int r;
 
-        /* If keymap_name is non-null, return true if keymap keymap_name is found.
-         * Otherwise, add all keymaps to keymaps. */
+        assert(de);
 
-        if (tflag != FTW_F)
-                return 0;
+        /* If 'keymap_name' is non-NULL, return true if keymap 'keymap_name' is found.  Otherwise, add all
+         * keymaps to 'keymaps'. */
 
-        fpath = basename(fpath);
+        if (event != RECURSE_DIR_ENTRY)
+                return RECURSE_DIR_CONTINUE;
 
-        const char *e = endswith(fpath, ".map") ?: endswith(fpath, ".map.gz");
+        if (!IN_SET(de->d_type, DT_REG, DT_LNK))
+                return RECURSE_DIR_CONTINUE;
+
+        const char *e = endswith(de->d_name, ".map") ?: endswith(de->d_name, ".map.gz");
         if (!e)
-                return 0;
+                return RECURSE_DIR_CONTINUE;
 
-        p = strndup(fpath, e - fpath);
-        if (!p) {
-                errno = ENOMEM;
-                return -1;
-        }
+        p = strndup(de->d_name, e - de->d_name);
+        if (!p)
+                return -ENOMEM;
 
-        if (keymap_name)
-                return streq(p, keymap_name);
+        if (data->keymap_name)
+                return streq(p, data->keymap_name) ? 1 : RECURSE_DIR_CONTINUE;
+
+        assert(data->keymaps);
 
         if (!keymap_is_valid(p))
                 return 0;
 
-        r = set_consume(keymaps, TAKE_PTR(p));
-        if (r < 0 && r != -EEXIST) {
-                errno = -r;
-                return -1;
-        }
+        r = set_consume(data->keymaps, TAKE_PTR(p));
+        if (r < 0)
+                return r;
 
-        return 0;
+        return RECURSE_DIR_CONTINUE;
 }
 
 int get_keymaps(char ***ret) {
+        _cleanup_(set_free_freep) Set *keymaps = NULL;
+        int r;
+
         keymaps = set_new(&string_hash_ops);
         if (!keymaps)
                 return -ENOMEM;
 
-        const char *dir;
-        NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS)
-                if (nftw(dir, nftw_cb, 20, FTW_PHYS) < 0) {
-                        if (errno == ENOENT)
+        NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS) {
+                r = recurse_dir_at(
+                                AT_FDCWD,
+                                dir,
+                                /* statx_mask= */ 0,
+                                /* n_depth_max= */ UINT_MAX,
+                                RECURSE_DIR_IGNORE_DOT|RECURSE_DIR_ENSURE_TYPE,
+                                keymap_recurse_dir_callback,
+                                &(struct recurse_dir_userdata) {
+                                        .keymaps = keymaps,
+                                });
+                if (r < 0) {
+                        if (r == -ENOENT)
                                 continue;
-                        if (ERRNO_IS_RESOURCE(errno)) {
-                                keymaps = set_free_free(keymaps);
-                                return log_warning_errno(errno, "Failed to read keymap list from %s: %m", dir);
-                        }
-                        log_debug_errno(errno, "Failed to read keymap list from %s, ignoring: %m", dir);
-                }
+                        if (ERRNO_IS_RESOURCE(r))
+                                return log_warning_errno(r, "Failed to read keymap list from %s: %m", dir);
 
-        _cleanup_strv_free_ char **l = set_get_strv(keymaps);
-        if (!l) {
-                keymaps = set_free_free(keymaps);
-                return -ENOMEM;
+                        log_debug_errno(r, "Failed to read keymap list from %s, ignoring: %m", dir);
+                }
         }
 
-        keymaps = set_free(keymaps);
+        _cleanup_strv_free_ char **l = set_get_strv(keymaps);
+        if (!l)
+                return -ENOMEM;
+
+        keymaps = set_free(keymaps); /* If we got the strv above, then do a set_free() rather than
+                                      * set_free_free() since the entries of the set are now owned by the
+                                      * strv */
 
         if (strv_isempty(l))
                 return -ENOENT;
@@ -88,7 +106,6 @@
         strv_sort(l);
 
         *ret = TAKE_PTR(l);
-
         return 0;
 }
 
@@ -117,18 +134,28 @@
         if (!keymap_is_valid(name))
                 return -EINVAL;
 
-        keymap_name = name;
-
-        const char *dir;
         NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS) {
-                r = nftw(dir, nftw_cb, 20, FTW_PHYS);
+                r = recurse_dir_at(
+                                AT_FDCWD,
+                                dir,
+                                /* statx_mask= */ 0,
+                                /* n_depth_max= */ UINT_MAX,
+                                RECURSE_DIR_IGNORE_DOT|RECURSE_DIR_ENSURE_TYPE,
+                                keymap_recurse_dir_callback,
+                                &(struct recurse_dir_userdata) {
+                                        .keymap_name = name,
+                                });
+                if (r == -ENOENT)
+                        continue;
+                if (ERRNO_IS_RESOURCE(r))
+                        return r;
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to read keymap list from %s, ignoring: %m", dir);
+                        continue;
+                }
                 if (r > 0)
                         break;
-                if (r < 0 && errno != ENOENT)
-                        log_debug_errno(errno, "Failed to read keymap list from %s, ignoring: %m", dir);
         }
 
-        keymap_name = NULL;
-
         return r > 0;
 }
diff --git a/src/shared/keyring-util.c b/src/shared/keyring-util.c
new file mode 100644
index 0000000..655cf52
--- /dev/null
+++ b/src/shared/keyring-util.c
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "keyring-util.h"
+#include "memory-util.h"
+#include "missing_syscall.h"
+
+int keyring_read(key_serial_t serial, void **ret, size_t *ret_size) {
+        size_t m = 100;
+
+        for (;;) {
+                _cleanup_(erase_and_freep) uint8_t *p = NULL;
+                long n;
+
+                p = new(uint8_t, m+1);
+                if (!p)
+                        return -ENOMEM;
+
+                n = keyctl(KEYCTL_READ, (unsigned long) serial, (unsigned long) p, (unsigned long) m, 0);
+                if (n < 0)
+                        return -errno;
+
+                if ((size_t) n <= m) {
+                        p[n] = 0; /* NUL terminate, just in case */
+
+                        if (ret)
+                                *ret = TAKE_PTR(p);
+                        if (ret_size)
+                                *ret_size = n;
+
+                        return 0;
+                }
+
+                if (m > (SIZE_MAX-1) / 2) /* overflow check */
+                        return -ENOMEM;
+
+                m *= 2;
+        }
+}
diff --git a/src/shared/keyring-util.h b/src/shared/keyring-util.h
new file mode 100644
index 0000000..c8c53f1
--- /dev/null
+++ b/src/shared/keyring-util.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <sys/types.h>
+
+#include "missing_keyctl.h"
+
+/* Like TAKE_PTR() but for key_serial_t, resetting them to -1 */
+#define TAKE_KEY_SERIAL(key_serial) TAKE_GENERIC(key_serial, key_serial_t, -1)
+
+int keyring_read(key_serial_t serial, void **ret, size_t *ret_size);
diff --git a/src/shared/killall.c b/src/shared/killall.c
index d9fcfc2..0b5a664 100644
--- a/src/shared/killall.c
+++ b/src/shared/killall.c
@@ -9,17 +9,18 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
-#include "def.h"
+#include "constants.h"
 #include "dirent-util.h"
 #include "fd-util.h"
 #include "format-util.h"
+#include "initrd-util.h"
 #include "killall.h"
 #include "parse-util.h"
 #include "process-util.h"
 #include "set.h"
+#include "stdio-util.h"
 #include "string-util.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static bool ignore_proc(pid_t pid, bool warn_rootfs) {
         _cleanup_fclose_ FILE *f = NULL;
@@ -80,17 +81,17 @@
 static void log_children_no_yet_killed(Set *pids) {
         _cleanup_free_ char *lst_child = NULL;
         void *p;
+        int r;
 
         SET_FOREACH(p, pids) {
                 _cleanup_free_ char *s = NULL;
 
-                if (get_process_comm(PTR_TO_PID(p), &s) < 0)
-                        (void) asprintf(&s, PID_FMT, PTR_TO_PID(p));
-
-                if (!strextend(&lst_child, ", ", s)) {
-                        log_oom();
-                        return;
-                }
+                if (get_process_comm(PTR_TO_PID(p), &s) >= 0)
+                        r = strextendf(&lst_child, ", " PID_FMT " (%s)", PTR_TO_PID(p), s);
+                else
+                        r = strextendf(&lst_child, ", " PID_FMT, PTR_TO_PID(p));
+                if (r < 0)
+                        return (void) log_oom();
         }
 
         if (isempty(lst_child))
@@ -188,7 +189,6 @@
 
 static int killall(int sig, Set *pids, bool send_sighup) {
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *d;
         int n_killed = 0;
 
         /* Send the specified signal to all remaining processes, if not excluded by ignore_proc().
@@ -198,14 +198,14 @@
         if (!dir)
                 return log_warning_errno(errno, "opendir(/proc) failed: %m");
 
-        FOREACH_DIRENT_ALL(d, dir, break) {
+        FOREACH_DIRENT_ALL(de, dir, break) {
                 pid_t pid;
                 int r;
 
-                if (!IN_SET(d->d_type, DT_DIR, DT_UNKNOWN))
+                if (!IN_SET(de->d_type, DT_DIR, DT_UNKNOWN))
                         continue;
 
-                if (parse_pid(d->d_name, &pid) < 0)
+                if (parse_pid(de->d_name, &pid) < 0)
                         continue;
 
                 if (ignore_proc(pid, sig == SIGKILL && !in_initrd()))
diff --git a/src/shared/label.c b/src/shared/label.c
index 1fc492f..66fcc0a 100644
--- a/src/shared/label.c
+++ b/src/shared/label.c
@@ -11,12 +11,29 @@
 #include "selinux-util.h"
 #include "smack-util.h"
 
-int label_fix_container(const char *path, const char *inside_path, LabelFixFlags flags) {
+int label_fix_full(
+                int atfd,
+                const char *inode_path, /* path of inode to apply label to */
+                const char *label_path, /* path to use as database lookup key in label database (typically same as inode_path, but not always) */
+                LabelFixFlags flags) {
+
         int r, q;
 
-        r = mac_selinux_fix_container(path, inside_path, flags);
-        q = mac_smack_fix_container(path, inside_path, flags);
+        if (atfd < 0 && atfd != AT_FDCWD)
+                return -EBADF;
 
+        if (!inode_path && atfd < 0) /* We need at least one of atfd and an inode path */
+                return -EINVAL;
+
+        /* If both atfd and inode_path are specified, we take the specified path relative to atfd which must be an fd to a dir.
+         *
+         * If only atfd is specified (and inode_path is NULL), we'll operated on the inode the atfd refers to.
+         *
+         * If atfd is AT_FDCWD then we'll operate on the inode the path refers to.
+         */
+
+        r = mac_selinux_fix_full(atfd, inode_path, label_path, flags);
+        q = mac_smack_fix_full(atfd, inode_path, label_path, flags);
         if (r < 0)
                 return r;
         if (q < 0)
@@ -35,9 +52,7 @@
         if (r < 0)
                 return r;
 
-        if (symlink(old_path, new_path) < 0)
-                r = -errno;
-
+        r = RET_NERRNO(symlink(old_path, new_path));
         mac_selinux_create_file_clear();
 
         if (r < 0)
@@ -46,7 +61,7 @@
         return mac_smack_fix(new_path, 0);
 }
 
-int symlink_atomic_label(const char *from, const char *to) {
+int symlink_atomic_full_label(const char *from, const char *to, bool make_relative) {
         int r;
 
         assert(from);
@@ -56,9 +71,7 @@
         if (r < 0)
                 return r;
 
-        if (symlink_atomic(from, to) < 0)
-                r = -errno;
-
+        r = symlinkat_atomic_full(from, AT_FDCWD, to, make_relative);
         mac_selinux_create_file_clear();
 
         if (r < 0)
@@ -76,9 +89,7 @@
         if (r < 0)
                 return r;
 
-        if (mknod(pathname, mode, dev) < 0)
-                r = -errno;
-
+        r = RET_NERRNO(mknod(pathname, mode, dev));
         mac_selinux_create_file_clear();
 
         if (r < 0)
diff --git a/src/shared/label.h b/src/shared/label.h
index b5118d9..2f899e2 100644
--- a/src/shared/label.h
+++ b/src/shared/label.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <fcntl.h>
 #include <stdbool.h>
 #include <sys/types.h>
 
@@ -9,15 +10,17 @@
         LABEL_IGNORE_EROFS  = 1 << 1,
 } LabelFixFlags;
 
-int label_fix_container(const char *path, const char *inside_path, LabelFixFlags flags);
+int label_fix_full(int atfd, const char *inode_path, const char *label_path, LabelFixFlags flags);
+
 static inline int label_fix(const char *path, LabelFixFlags flags) {
-        return label_fix_container(path, path, flags);
+        return label_fix_full(AT_FDCWD, path, path, flags);
 }
 
-int mkdir_label(const char *path, mode_t mode);
-int mkdirat_label(int dirfd, const char *path, mode_t mode);
 int symlink_label(const char *old_path, const char *new_path);
-int symlink_atomic_label(const char *from, const char *to);
+int symlink_atomic_full_label(const char *from, const char *to, bool make_relative);
+static inline int symlink_atomic_label(const char *from, const char *to) {
+        return symlink_atomic_full_label(from, to, false);
+}
 int mknod_label(const char *pathname, mode_t mode, dev_t dev);
 
 int btrfs_subvol_make_label(const char *path);
diff --git a/src/shared/libcrypt-util.c b/src/shared/libcrypt-util.c
index 5b31541..81e6f17 100644
--- a/src/shared/libcrypt-util.c
+++ b/src/shared/libcrypt-util.c
@@ -76,7 +76,7 @@
         log_debug("Generating fallback salt for hash prefix: $6$");
 
         /* Insist on the best randomness by setting RANDOM_BLOCK, this is about keeping passwords secret after all. */
-        r = genuine_random_bytes(raw, sizeof(raw), RANDOM_BLOCK);
+        r = crypto_random_bytes(raw, sizeof(raw));
         if (r < 0)
                 return r;
 
@@ -197,7 +197,6 @@
 }
 
 int test_password_many(char **hashed_password, const char *password) {
-        char **hpw;
         int r;
 
         STRV_FOREACH(hpw, hashed_password) {
diff --git a/src/shared/libfido2-util.c b/src/shared/libfido2-util.c
index 6d18178..6802ad0 100644
--- a/src/shared/libfido2-util.c
+++ b/src/shared/libfido2-util.c
@@ -7,11 +7,12 @@
 #include "ask-password-api.h"
 #include "dlfcn-util.h"
 #include "format-table.h"
-#include "locale-util.h"
+#include "glyph-util.h"
 #include "log.h"
 #include "memory-util.h"
 #include "random-util.h"
 #include "strv.h"
+#include "unistd.h"
 
 static void *libfido2_dl = NULL;
 
@@ -132,9 +133,8 @@
         assert(path);
 
         if (!sym_fido_dev_is_fido2(d))
-                return log_full_errno(log_level,
-                                      SYNTHETIC_ERRNO(ENODEV),
-                                       "Specified device %s is not a FIDO2 device.", path);
+                return log_full_errno(log_level, SYNTHETIC_ERRNO(ENODEV),
+                                      "Specified device %s is not a FIDO2 device.", path);
 
         di = sym_fido_cbor_info_new();
         if (!di)
@@ -194,6 +194,150 @@
         return 0;
 }
 
+static int fido2_assert_set_basic_properties(
+                fido_assert_t *a,
+                const char *rp_id,
+                const void *cid,
+                size_t cid_size) {
+        int r;
+
+        assert(a);
+        assert(rp_id);
+        assert(cid);
+        assert(cid_size > 0);
+
+        r = sym_fido_assert_set_rp(a, rp_id);
+        if (r != FIDO_OK)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Failed to set FIDO2 assertion ID: %s", sym_fido_strerr(r));
+
+        r = sym_fido_assert_set_clientdata_hash(a, (const unsigned char[32]) {}, 32);
+        if (r != FIDO_OK)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Failed to set FIDO2 assertion client data hash: %s", sym_fido_strerr(r));
+
+        r = sym_fido_assert_allow_cred(a, cid, cid_size);
+        if (r != FIDO_OK)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Failed to add FIDO2 assertion credential ID: %s", sym_fido_strerr(r));
+
+        return 0;
+}
+
+static int fido2_common_assert_error_handle(int r) {
+        switch (r) {
+        case FIDO_OK:
+                return 0;
+        case FIDO_ERR_NO_CREDENTIALS:
+                return log_error_errno(SYNTHETIC_ERRNO(EBADSLT),
+                                       "Wrong security token; needed credentials not present on token.");
+        case FIDO_ERR_PIN_REQUIRED:
+                return log_error_errno(SYNTHETIC_ERRNO(ENOANO),
+                                       "Security token requires PIN.");
+        case FIDO_ERR_PIN_AUTH_BLOCKED:
+                return log_error_errno(SYNTHETIC_ERRNO(EOWNERDEAD),
+                                       "PIN of security token is blocked, please remove/reinsert token.");
+#ifdef FIDO_ERR_UV_BLOCKED
+        case FIDO_ERR_UV_BLOCKED:
+                return log_error_errno(SYNTHETIC_ERRNO(EOWNERDEAD),
+                                       "Verification of security token is blocked, please remove/reinsert token.");
+#endif
+        case FIDO_ERR_PIN_INVALID:
+                return log_error_errno(SYNTHETIC_ERRNO(ENOLCK),
+                                       "PIN of security token incorrect.");
+        case FIDO_ERR_UP_REQUIRED:
+                return log_error_errno(SYNTHETIC_ERRNO(EMEDIUMTYPE),
+                                       "User presence required.");
+        case FIDO_ERR_ACTION_TIMEOUT:
+                return log_error_errno(SYNTHETIC_ERRNO(ENOSTR),
+                                       "Token action timeout. (User didn't interact with token quickly enough.)");
+        default:
+                return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Failed to ask token for assertion: %s", sym_fido_strerr(r));
+        }
+}
+
+static int fido2_is_cred_in_specific_token(
+                const char *path,
+                const char *rp_id,
+                const void *cid,
+                size_t cid_size,
+                Fido2EnrollFlags flags) {
+
+        assert(path);
+        assert(rp_id);
+        assert(cid);
+        assert(cid_size);
+
+        _cleanup_(fido_dev_free_wrapper) fido_dev_t *d = NULL;
+        _cleanup_(fido_assert_free_wrapper) fido_assert_t *a = NULL;
+        bool has_up = false, has_uv = false;
+        int r;
+
+        d = sym_fido_dev_new();
+        if (!d)
+                return log_oom();
+
+        r = sym_fido_dev_open(d, path);
+        if (r != FIDO_OK)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Failed to open FIDO2 device %s: %s", path, sym_fido_strerr(r));
+
+        r = verify_features(d, path, LOG_ERR, NULL, NULL, &has_up, &has_uv);
+        if (r == -ENODEV) { /* Not a FIDO2 device or lacking HMAC-SECRET extension */
+                log_debug_errno(r, "%s is not a FIDO2 device, or it lacks the hmac-secret extension", path);
+                return false;
+        }
+        if (r < 0)
+                return r;
+
+        a = sym_fido_assert_new();
+        if (!a)
+                return log_oom();
+
+        r = fido2_assert_set_basic_properties(a, rp_id, cid, cid_size);
+        if (r < 0)
+                return r;
+
+        /* FIDO2 devices may not support pre-flight requests with UV, at least not
+         * without user interaction [1]. As a result, let's just return true
+         * here and go ahead with trying the unlock directly.
+         * Reference:
+         * 1: https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-getAssert-authnr-alg
+         *    See section 7.4 */
+        if (has_uv && FLAGS_SET(flags, FIDO2ENROLL_UV)) {
+                log_debug("Pre-flight requests with UV are unsupported, device: %s", path);
+                return true;
+        }
+
+        /* According to CTAP 2.1 specification, to do pre-flight we need to set up option to false
+         * with optionally pinUvAuthParam in assertion[1]. But for authenticator that doesn't support
+         * user presence, once up option is present, the authenticator may return CTAP2_ERR_UNSUPPORTED_OPTION[2].
+         * So we simplely omit the option in that case.
+         * Reference:
+         * 1: https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#pre-flight
+         * 2: https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html#authenticatorGetAssertion (in step 5)
+         */
+        if (has_up)
+                r = sym_fido_assert_set_up(a, FIDO_OPT_FALSE);
+        else
+                r = sym_fido_assert_set_up(a, FIDO_OPT_OMIT);
+        if (r != FIDO_OK)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Failed to set assertion user presence: %s", sym_fido_strerr(r));
+
+        r = sym_fido_dev_get_assert(d, a, NULL);
+
+        switch (r) {
+                case FIDO_OK:
+                        return true;
+                case FIDO_ERR_NO_CREDENTIALS:
+                        return false;
+                default:
+                        return fido2_common_assert_error_handle(r);
+        }
+}
+
 static int fido2_use_hmac_hash_specific_token(
                 const char *path,
                 const char *rp_id,
@@ -263,20 +407,9 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                        "Failed to set salt on FIDO2 assertion: %s", sym_fido_strerr(r));
 
-        r = sym_fido_assert_set_rp(a, rp_id);
-        if (r != FIDO_OK)
-                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to set FIDO2 assertion ID: %s", sym_fido_strerr(r));
-
-        r = sym_fido_assert_set_clientdata_hash(a, (const unsigned char[32]) {}, 32);
-        if (r != FIDO_OK)
-                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to set FIDO2 assertion client data hash: %s", sym_fido_strerr(r));
-
-        r = sym_fido_assert_allow_cred(a, cid, cid_size);
-        if (r != FIDO_OK)
-                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to add FIDO2 assertion credential ID: %s", sym_fido_strerr(r));
+        r = fido2_assert_set_basic_properties(a, rp_id, cid, cid_size);
+        if (r < 0)
+                return r;
 
         log_info("Asking FIDO2 token for authentication.");
 
@@ -312,8 +445,6 @@
                 bool retry_with_up = false, retry_with_pin = false;
 
                 if (FLAGS_SET(required, FIDO2ENROLL_PIN)) {
-                        char **i;
-
                         /* OK, we need a pin, try with all pins in turn */
                         if (strv_isempty(pins))
                                 r = FIDO_ERR_PIN_REQUIRED;
@@ -357,7 +488,7 @@
                          * it gracefully (also see below.) */
 
                         if (has_up && (required & (FIDO2ENROLL_UP|FIDO2ENROLL_UP_IF_NEEDED)) == FIDO2ENROLL_UP_IF_NEEDED) {
-                                log_notice("%s%sGot unsupported option error when when user presence test is turned off. Trying with user presence test turned on.",
+                                log_notice("%s%sGot unsupported option error when user presence test is turned off. Trying with user presence test turned on.",
                                            emoji_enabled() ? special_glyph(SPECIAL_GLYPH_TOUCH) : "",
                                            emoji_enabled() ? " " : "");
                                 retry_with_up = true;
@@ -405,36 +536,9 @@
                         required |= FIDO2ENROLL_PIN;
         }
 
-        switch (r) {
-        case FIDO_OK:
-                break;
-        case FIDO_ERR_NO_CREDENTIALS:
-                return log_error_errno(SYNTHETIC_ERRNO(EBADSLT),
-                                       "Wrong security token; needed credentials not present on token.");
-        case FIDO_ERR_PIN_REQUIRED:
-                return log_error_errno(SYNTHETIC_ERRNO(ENOANO),
-                                       "Security token requires PIN.");
-        case FIDO_ERR_PIN_AUTH_BLOCKED:
-                return log_error_errno(SYNTHETIC_ERRNO(EOWNERDEAD),
-                                       "PIN of security token is blocked, please remove/reinsert token.");
-#ifdef FIDO_ERR_UV_BLOCKED
-        case FIDO_ERR_UV_BLOCKED:
-                return log_error_errno(SYNTHETIC_ERRNO(EOWNERDEAD),
-                                       "Verification of security token is blocked, please remove/reinsert token.");
-#endif
-        case FIDO_ERR_PIN_INVALID:
-                return log_error_errno(SYNTHETIC_ERRNO(ENOLCK),
-                                       "PIN of security token incorrect.");
-        case FIDO_ERR_UP_REQUIRED:
-                return log_error_errno(SYNTHETIC_ERRNO(EMEDIUMTYPE),
-                                       "User presence required.");
-        case FIDO_ERR_ACTION_TIMEOUT:
-                return log_error_errno(SYNTHETIC_ERRNO(ENOSTR),
-                                       "Token action timeout. (User didn't interact with token quickly enough.)");
-        default:
-                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to ask token for assertion: %s", sym_fido_strerr(r));
-        }
+        r = fido2_common_assert_error_handle(r);
+        if (r < 0)
+                return r;
 
         hmac = sym_fido_assert_hmac_secret_ptr(a, 0);
         if (!hmac)
@@ -451,6 +555,20 @@
         return 0;
 }
 
+/* COSE_ECDH_ES256 is not usable with fido_cred_set_type() thus it's not listed here. */
+static const char *fido2_algorithm_to_string(int alg) {
+        switch(alg) {
+                case COSE_ES256:
+                        return "es256";
+                case COSE_RS256:
+                        return "rs256";
+                case COSE_EDDSA:
+                        return "eddsa";
+                default:
+                        return NULL;
+        }
+}
+
 int fido2_use_hmac_hash(
                 const char *device,
                 const char *rp_id,
@@ -471,8 +589,18 @@
         if (r < 0)
                 return log_error_errno(r, "FIDO2 support is not installed.");
 
-        if (device)
+        if (device) {
+                r = fido2_is_cred_in_specific_token(device, rp_id, cid, cid_size, required);
+                if (r == 0)
+                        /* The caller is expected to attempt other key slots in this case,
+                         * therefore, do not spam the console with error logs here. */
+                        return log_debug_errno(SYNTHETIC_ERRNO(EBADSLT),
+                                               "The credential is not in the token %s.", device);
+                if (r < 0)
+                        return log_error_errno(r, "Token returned error during pre-flight: %m");
+
                 return fido2_use_hmac_hash_specific_token(device, rp_id, salt, salt_size, cid, cid_size, pins, required, ret_hmac, ret_hmac_size);
+        }
 
         di = sym_fido_dev_info_new(allocated);
         if (!di)
@@ -507,6 +635,16 @@
                         goto finish;
                 }
 
+                r = fido2_is_cred_in_specific_token(path, rp_id, cid, cid_size, required);
+                if (r < 0) {
+                        log_error_errno(r, "Token returned error during pre-flight: %m");
+                        goto finish;
+                }
+                if (r == 0) {
+                        log_debug("The credential is not in the token %s, skipping.", path);
+                        continue;
+                }
+
                 r = fido2_use_hmac_hash_specific_token(path, rp_id, salt, salt_size, cid, cid_size, pins, required, ret_hmac, ret_hmac_size);
                 if (!IN_SET(r,
                             -EBADSLT, /* device doesn't understand our credential hash */
@@ -533,6 +671,7 @@
                 const char *user_icon,
                 const char *askpw_icon_name,
                 Fido2EnrollFlags lock_with,
+                int cred_alg,
                 void **ret_cid, size_t *ret_cid_size,
                 void **ret_salt, size_t *ret_salt_size,
                 void **ret_secret, size_t *ret_secret_size,
@@ -582,7 +721,7 @@
         if (!salt)
                 return log_oom();
 
-        r = genuine_random_bytes(salt, FIDO2_SALT_SIZE, RANDOM_BLOCK);
+        r = crypto_random_bytes(salt, FIDO2_SALT_SIZE);
         if (r < 0)
                 return log_error_errno(r, "Failed to generate salt: %m");
 
@@ -629,10 +768,10 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                        "Failed to set FIDO2 credential relying party ID/name: %s", sym_fido_strerr(r));
 
-        r = sym_fido_cred_set_type(c, COSE_ES256);
+        r = sym_fido_cred_set_type(c, cred_alg);
         if (r != FIDO_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to set FIDO2 credential type to ES256: %s", sym_fido_strerr(r));
+                                       "Failed to set FIDO2 credential type to %s: %s", fido2_algorithm_to_string(cred_alg), sym_fido_strerr(r));
 
         r = sym_fido_cred_set_user(
                         c,
@@ -682,7 +821,6 @@
 
                 for (;;) {
                         _cleanup_(strv_free_erasep) char **pin = NULL;
-                        char **i;
 
                         r = ask_password_auto("Please enter security token PIN:", askpw_icon_name, NULL, "fido2-pin", "fido2-pin", USEC_INFINITY, 0, &pin);
                         if (r < 0)
@@ -723,6 +861,9 @@
         if (r == FIDO_ERR_ACTION_TIMEOUT)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOSTR),
                                        "Token action timeout. (User didn't interact with token quickly enough.)");
+        if (r == FIDO_ERR_UNSUPPORTED_ALGORITHM)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                        "Token doesn't support credential algorithm %s.", fido2_algorithm_to_string(cred_alg));
         if (r != FIDO_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                        "Failed to generate FIDO2 credential: %s", sym_fido_strerr(r));
@@ -747,20 +888,9 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                        "Failed to set salt on FIDO2 assertion: %s", sym_fido_strerr(r));
 
-        r = sym_fido_assert_set_rp(a, rp_id);
-        if (r != FIDO_OK)
-                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to set FIDO2 assertion ID: %s", sym_fido_strerr(r));
-
-        r = sym_fido_assert_set_clientdata_hash(a, (const unsigned char[32]) {}, 32);
-        if (r != FIDO_OK)
-                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to set FIDO2 assertion client data hash: %s", sym_fido_strerr(r));
-
-        r = sym_fido_assert_allow_cred(a, cid, cid_size);
-        if (r != FIDO_OK)
-                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to add FIDO2 assertion credential ID: %s", sym_fido_strerr(r));
+        r = fido2_assert_set_basic_properties(a, rp_id, cid, cid_size);
+        if (r < 0)
+                return r;
 
         log_info("Generating secret key on FIDO2 security token.");
 
@@ -827,7 +957,7 @@
                          * slightly more defensively. */
 
                         if (has_up && !FLAGS_SET(lock_with, FIDO2ENROLL_UP)) {
-                                log_notice("%s%sGot unsupported option error when when user presence test is turned off. Trying with user presence test turned on.",
+                                log_notice("%s%sGot unsupported option error when user presence test is turned off. Trying with user presence test turned on.",
                                            emoji_enabled() ? special_glyph(SPECIAL_GLYPH_TOUCH) : "",
                                            emoji_enabled() ? " " : "");
                                 retry_with_up = true;
@@ -1077,3 +1207,73 @@
                                "FIDO2 tokens not supported on this build.");
 #endif
 }
+
+int fido2_have_device(const char *device) {
+#if HAVE_LIBFIDO2
+        size_t allocated = 64, found = 0;
+        fido_dev_info_t *di = NULL;
+        int r;
+
+        /* Return == 0 if not devices are found, > 0 if at least one is found */
+
+        r = dlopen_libfido2();
+        if (r < 0)
+                return log_error_errno(r, "FIDO2 support is not installed.");
+
+        if (device) {
+                if (access(device, F_OK) < 0) {
+                        if (errno == ENOENT)
+                                return 0;
+
+                        return log_error_errno(errno, "Failed to determine whether device '%s' exists: %m", device);
+                }
+
+                return 1;
+        }
+
+        di = sym_fido_dev_info_new(allocated);
+        if (!di)
+                return log_oom();
+
+        r = sym_fido_dev_info_manifest(di, allocated, &found);
+        if (r == FIDO_ERR_INTERNAL) {
+                /* The library returns FIDO_ERR_INTERNAL when no devices are found. I wish it wouldn't. */
+                r = 0;
+                goto finish;
+        }
+        if (r != FIDO_OK) {
+                r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to enumerate FIDO2 devices: %s", sym_fido_strerr(r));
+                goto finish;
+        }
+
+        r = found;
+
+finish:
+        sym_fido_dev_info_free(&di, allocated);
+        return r;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                               "FIDO2 tokens not supported on this build.");
+#endif
+}
+
+#if HAVE_LIBFIDO2
+int parse_fido2_algorithm(const char *s, int *ret) {
+        int a;
+
+        assert(s);
+
+        if (streq(s, "es256"))
+                a = COSE_ES256;
+        else if (streq(s, "rs256"))
+                a = COSE_RS256;
+        else if (streq(s, "eddsa"))
+                a = COSE_EDDSA;
+        else
+                return -EINVAL;
+
+        if (ret)
+                *ret = a;
+        return 0;
+}
+#endif
diff --git a/src/shared/libfido2-util.h b/src/shared/libfido2-util.h
index 4ebf8ab..a04a376 100644
--- a/src/shared/libfido2-util.h
+++ b/src/shared/libfido2-util.h
@@ -109,13 +109,21 @@
                 const char *user_icon,
                 const char *askpw_icon_name,
                 Fido2EnrollFlags lock_with,
+                int cred_alg,
                 void **ret_cid, size_t *ret_cid_size,
                 void **ret_salt, size_t *ret_salt_size,
                 void **ret_secret, size_t *ret_secret_size,
                 char **ret_usedpin,
                 Fido2EnrollFlags *ret_locked_with);
 
+int parse_fido2_algorithm(const char *s, int *ret);
+#else
+static inline int parse_fido2_algorithm(const char *s, int *ret) {
+        return -EOPNOTSUPP;
+}
 #endif
 
 int fido2_list_devices(void);
 int fido2_find_device_auto(char **ret);
+
+int fido2_have_device(const char *device);
diff --git a/src/shared/libmount-util.c b/src/shared/libmount-util.c
new file mode 100644
index 0000000..3818904
--- /dev/null
+++ b/src/shared/libmount-util.c
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stdio.h>
+
+#include "libmount-util.h"
+
+int libmount_parse(
+                const char *path,
+                FILE *source,
+                struct libmnt_table **ret_table,
+                struct libmnt_iter **ret_iter) {
+
+        _cleanup_(mnt_free_tablep) struct libmnt_table *table = NULL;
+        _cleanup_(mnt_free_iterp) struct libmnt_iter *iter = NULL;
+        int r;
+
+        /* Older libmount seems to require this. */
+        assert(!source || path);
+
+        table = mnt_new_table();
+        iter = mnt_new_iter(MNT_ITER_FORWARD);
+        if (!table || !iter)
+                return -ENOMEM;
+
+        /* If source or path are specified, we use on the functions which ignore utab.
+         * Only if both are empty, we use mnt_table_parse_mtab(). */
+
+        if (source)
+                r = mnt_table_parse_stream(table, source, path);
+        else if (path)
+                r = mnt_table_parse_file(table, path);
+        else
+                r = mnt_table_parse_mtab(table, NULL);
+        if (r < 0)
+                return r;
+
+        *ret_table = TAKE_PTR(table);
+        *ret_iter = TAKE_PTR(iter);
+        return 0;
+}
+
+int libmount_is_leaf(
+                struct libmnt_table *table,
+                struct libmnt_fs *fs) {
+        int r;
+
+        _cleanup_(mnt_free_iterp) struct libmnt_iter *iter_children = NULL;
+        iter_children = mnt_new_iter(MNT_ITER_FORWARD);
+        if (!iter_children)
+                return log_oom();
+
+        /* We care only whether it exists, it is unused */
+        _unused_ struct libmnt_fs *child;
+        r = mnt_table_next_child_fs(table, iter_children, fs, &child);
+        if (r < 0)
+                return r;
+
+        return r == 1;
+}
diff --git a/src/shared/libmount-util.h b/src/shared/libmount-util.h
index cf19c56..2f789e7 100644
--- a/src/shared/libmount-util.h
+++ b/src/shared/libmount-util.h
@@ -1,8 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <stdio.h>
-
 /* This needs to be after sys/mount.h */
 #include <libmount.h>
 
@@ -11,37 +9,12 @@
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct libmnt_table*, mnt_free_table, NULL);
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct libmnt_iter*, mnt_free_iter, NULL);
 
-static inline int libmount_parse(
+int libmount_parse(
                 const char *path,
                 FILE *source,
                 struct libmnt_table **ret_table,
-                struct libmnt_iter **ret_iter) {
+                struct libmnt_iter **ret_iter);
 
-        _cleanup_(mnt_free_tablep) struct libmnt_table *table = NULL;
-        _cleanup_(mnt_free_iterp) struct libmnt_iter *iter = NULL;
-        int r;
-
-        /* Older libmount seems to require this. */
-        assert(!source || path);
-
-        table = mnt_new_table();
-        iter = mnt_new_iter(MNT_ITER_FORWARD);
-        if (!table || !iter)
-                return -ENOMEM;
-
-        /* If source or path are specified, we use on the functions which ignore utab.
-         * Only if both are empty, we use mnt_table_parse_mtab(). */
-
-        if (source)
-                r = mnt_table_parse_stream(table, source, path);
-        else if (path)
-                r = mnt_table_parse_file(table, path);
-        else
-                r = mnt_table_parse_mtab(table, NULL);
-        if (r < 0)
-                return r;
-
-        *ret_table = TAKE_PTR(table);
-        *ret_iter = TAKE_PTR(iter);
-        return 0;
-}
+int libmount_is_leaf(
+                struct libmnt_table *table,
+                struct libmnt_fs *fs);
diff --git a/src/shared/linux/README b/src/shared/linux/README
index 46d5547..34fc09b 100644
--- a/src/shared/linux/README
+++ b/src/shared/linux/README
@@ -1,6 +1,7 @@
-The files in this directory are copied from kernel-5.2, and the following modifications are applied:
+The files in this directory are copied from kernel-6.2, and the following modifications are applied:
 - auto_dev-ioctl.h: set AUTOFS_DEV_IOCTL_VERSION_MINOR to 0
 - auto_dev-ioctl.h: define AUTOFS_IOCTL if not defined
+- auto_dev-ioctl.h: use of fake flexible array is fixed
 - bpf_insn.h: This is imported from samples/bpf/bpf_insn.h
 - bpf_insn.h: BPF_JMP_A() macro is also imported from include/linux/filter.h
 - dm-ioctl.h: set DM_VERSION_MINOR to 27
diff --git a/src/shared/linux/auto_dev-ioctl.h b/src/shared/linux/auto_dev-ioctl.h
index 63f32e3..c6b7e11 100644
--- a/src/shared/linux/auto_dev-ioctl.h
+++ b/src/shared/linux/auto_dev-ioctl.h
@@ -8,8 +8,8 @@
  * option, any later version, incorporated herein by reference.
  */
 
-#ifndef _UAPI_LINUX_AUTO_DEV_IOCTL_H
-#define _UAPI_LINUX_AUTO_DEV_IOCTL_H
+#ifndef _LINUX_AUTO_DEV_IOCTL_H
+#define _LINUX_AUTO_DEV_IOCTL_H
 
 #include <linux/auto_fs.h>
 #include <linux/string.h>
@@ -109,10 +109,10 @@
 		struct args_ismountpoint	ismountpoint;
 	};
 
-	char path[0];
+	char path[];
 };
 
-static inline void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
+static __inline__ void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
 {
 	memset(in, 0, AUTOFS_DEV_IOCTL_SIZE);
 	in->ver_major = AUTOFS_DEV_IOCTL_VERSION_MAJOR;
@@ -217,4 +217,4 @@
 	_IOWR(AUTOFS_IOCTL, \
 	      AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD, struct autofs_dev_ioctl)
 
-#endif	/* _UAPI_LINUX_AUTO_DEV_IOCTL_H */
+#endif	/* _LINUX_AUTO_DEV_IOCTL_H */
diff --git a/src/shared/linux/bpf.h b/src/shared/linux/bpf.h
index e6ceac3..a667908 100644
--- a/src/shared/linux/bpf.h
+++ b/src/shared/linux/bpf.h
@@ -5,8 +5,8 @@
  * modify it under the terms of version 2 of the GNU General Public
  * License as published by the Free Software Foundation.
  */
-#ifndef _UAPI__LINUX_BPF_H__
-#define _UAPI__LINUX_BPF_H__
+#ifndef __LINUX_BPF_H__
+#define __LINUX_BPF_H__
 
 #include <linux/types.h>
 #include <linux/bpf_common.h>
@@ -19,7 +19,8 @@
 
 /* ld/ldx fields */
 #define BPF_DW		0x18	/* double word (64-bit) */
-#define BPF_XADD	0xc0	/* exclusive add */
+#define BPF_ATOMIC	0xc0	/* atomic memory ops - op type in immediate */
+#define BPF_XADD	0xc0	/* exclusive add - legacy name */
 
 /* alu/jmp fields */
 #define BPF_MOV		0xb0	/* mov reg to reg */
@@ -43,6 +44,11 @@
 #define BPF_CALL	0x80	/* function call */
 #define BPF_EXIT	0x90	/* function return */
 
+/* atomic op type fields (stored in immediate) */
+#define BPF_FETCH	0x01	/* not an opcode on its own, used to build others */
+#define BPF_XCHG	(0xe0 | BPF_FETCH)	/* atomic exchange */
+#define BPF_CMPXCHG	(0xf0 | BPF_FETCH)	/* atomic compare-and-write */
+
 /* Register numbers */
 enum {
 	BPF_REG_0 = 0,
@@ -78,16 +84,784 @@
 
 struct bpf_cgroup_storage_key {
 	__u64	cgroup_inode_id;	/* cgroup inode id */
-	__u32	attach_type;		/* program attach type */
+	__u32	attach_type;		/* program attach type (enum bpf_attach_type) */
+};
+
+enum bpf_cgroup_iter_order {
+	BPF_CGROUP_ITER_ORDER_UNSPEC = 0,
+	BPF_CGROUP_ITER_SELF_ONLY,		/* process only a single object. */
+	BPF_CGROUP_ITER_DESCENDANTS_PRE,	/* walk descendants in pre-order. */
+	BPF_CGROUP_ITER_DESCENDANTS_POST,	/* walk descendants in post-order. */
+	BPF_CGROUP_ITER_ANCESTORS_UP,		/* walk ancestors upward. */
 };
 
 union bpf_iter_link_info {
 	struct {
 		__u32	map_fd;
 	} map;
+	struct {
+		enum bpf_cgroup_iter_order order;
+
+		/* At most one of cgroup_fd and cgroup_id can be non-zero. If
+		 * both are zero, the walk starts from the default cgroup v2
+		 * root. For walking v1 hierarchy, one should always explicitly
+		 * specify cgroup_fd.
+		 */
+		__u32	cgroup_fd;
+		__u64	cgroup_id;
+	} cgroup;
+	/* Parameters of task iterators. */
+	struct {
+		__u32	tid;
+		__u32	pid;
+		__u32	pid_fd;
+	} task;
 };
 
-/* BPF syscall commands, see bpf(2) man-page for details. */
+/* BPF syscall commands, see bpf(2) man-page for more details. */
+/**
+ * DOC: eBPF Syscall Preamble
+ *
+ * The operation to be performed by the **bpf**\ () system call is determined
+ * by the *cmd* argument. Each operation takes an accompanying argument,
+ * provided via *attr*, which is a pointer to a union of type *bpf_attr* (see
+ * below). The size argument is the size of the union pointed to by *attr*.
+ */
+/**
+ * DOC: eBPF Syscall Commands
+ *
+ * BPF_MAP_CREATE
+ *	Description
+ *		Create a map and return a file descriptor that refers to the
+ *		map. The close-on-exec file descriptor flag (see **fcntl**\ (2))
+ *		is automatically enabled for the new file descriptor.
+ *
+ *		Applying **close**\ (2) to the file descriptor returned by
+ *		**BPF_MAP_CREATE** will delete the map (but see NOTES).
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_MAP_LOOKUP_ELEM
+ *	Description
+ *		Look up an element with a given *key* in the map referred to
+ *		by the file descriptor *map_fd*.
+ *
+ *		The *flags* argument may be specified as one of the
+ *		following:
+ *
+ *		**BPF_F_LOCK**
+ *			Look up the value of a spin-locked map without
+ *			returning the lock. This must be specified if the
+ *			elements contain a spinlock.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_MAP_UPDATE_ELEM
+ *	Description
+ *		Create or update an element (key/value pair) in a specified map.
+ *
+ *		The *flags* argument should be specified as one of the
+ *		following:
+ *
+ *		**BPF_ANY**
+ *			Create a new element or update an existing element.
+ *		**BPF_NOEXIST**
+ *			Create a new element only if it did not exist.
+ *		**BPF_EXIST**
+ *			Update an existing element.
+ *		**BPF_F_LOCK**
+ *			Update a spin_lock-ed map element.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ *		May set *errno* to **EINVAL**, **EPERM**, **ENOMEM**,
+ *		**E2BIG**, **EEXIST**, or **ENOENT**.
+ *
+ *		**E2BIG**
+ *			The number of elements in the map reached the
+ *			*max_entries* limit specified at map creation time.
+ *		**EEXIST**
+ *			If *flags* specifies **BPF_NOEXIST** and the element
+ *			with *key* already exists in the map.
+ *		**ENOENT**
+ *			If *flags* specifies **BPF_EXIST** and the element with
+ *			*key* does not exist in the map.
+ *
+ * BPF_MAP_DELETE_ELEM
+ *	Description
+ *		Look up and delete an element by key in a specified map.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_MAP_GET_NEXT_KEY
+ *	Description
+ *		Look up an element by key in a specified map and return the key
+ *		of the next element. Can be used to iterate over all elements
+ *		in the map.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ *		The following cases can be used to iterate over all elements of
+ *		the map:
+ *
+ *		* If *key* is not found, the operation returns zero and sets
+ *		  the *next_key* pointer to the key of the first element.
+ *		* If *key* is found, the operation returns zero and sets the
+ *		  *next_key* pointer to the key of the next element.
+ *		* If *key* is the last element, returns -1 and *errno* is set
+ *		  to **ENOENT**.
+ *
+ *		May set *errno* to **ENOMEM**, **EFAULT**, **EPERM**, or
+ *		**EINVAL** on error.
+ *
+ * BPF_PROG_LOAD
+ *	Description
+ *		Verify and load an eBPF program, returning a new file
+ *		descriptor associated with the program.
+ *
+ *		Applying **close**\ (2) to the file descriptor returned by
+ *		**BPF_PROG_LOAD** will unload the eBPF program (but see NOTES).
+ *
+ *		The close-on-exec file descriptor flag (see **fcntl**\ (2)) is
+ *		automatically enabled for the new file descriptor.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_OBJ_PIN
+ *	Description
+ *		Pin an eBPF program or map referred by the specified *bpf_fd*
+ *		to the provided *pathname* on the filesystem.
+ *
+ *		The *pathname* argument must not contain a dot (".").
+ *
+ *		On success, *pathname* retains a reference to the eBPF object,
+ *		preventing deallocation of the object when the original
+ *		*bpf_fd* is closed. This allow the eBPF object to live beyond
+ *		**close**\ (\ *bpf_fd*\ ), and hence the lifetime of the parent
+ *		process.
+ *
+ *		Applying **unlink**\ (2) or similar calls to the *pathname*
+ *		unpins the object from the filesystem, removing the reference.
+ *		If no other file descriptors or filesystem nodes refer to the
+ *		same object, it will be deallocated (see NOTES).
+ *
+ *		The filesystem type for the parent directory of *pathname* must
+ *		be **BPF_FS_MAGIC**.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_OBJ_GET
+ *	Description
+ *		Open a file descriptor for the eBPF object pinned to the
+ *		specified *pathname*.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_PROG_ATTACH
+ *	Description
+ *		Attach an eBPF program to a *target_fd* at the specified
+ *		*attach_type* hook.
+ *
+ *		The *attach_type* specifies the eBPF attachment point to
+ *		attach the program to, and must be one of *bpf_attach_type*
+ *		(see below).
+ *
+ *		The *attach_bpf_fd* must be a valid file descriptor for a
+ *		loaded eBPF program of a cgroup, flow dissector, LIRC, sockmap
+ *		or sock_ops type corresponding to the specified *attach_type*.
+ *
+ *		The *target_fd* must be a valid file descriptor for a kernel
+ *		object which depends on the attach type of *attach_bpf_fd*:
+ *
+ *		**BPF_PROG_TYPE_CGROUP_DEVICE**,
+ *		**BPF_PROG_TYPE_CGROUP_SKB**,
+ *		**BPF_PROG_TYPE_CGROUP_SOCK**,
+ *		**BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,
+ *		**BPF_PROG_TYPE_CGROUP_SOCKOPT**,
+ *		**BPF_PROG_TYPE_CGROUP_SYSCTL**,
+ *		**BPF_PROG_TYPE_SOCK_OPS**
+ *
+ *			Control Group v2 hierarchy with the eBPF controller
+ *			enabled. Requires the kernel to be compiled with
+ *			**CONFIG_CGROUP_BPF**.
+ *
+ *		**BPF_PROG_TYPE_FLOW_DISSECTOR**
+ *
+ *			Network namespace (eg /proc/self/ns/net).
+ *
+ *		**BPF_PROG_TYPE_LIRC_MODE2**
+ *
+ *			LIRC device path (eg /dev/lircN). Requires the kernel
+ *			to be compiled with **CONFIG_BPF_LIRC_MODE2**.
+ *
+ *		**BPF_PROG_TYPE_SK_SKB**,
+ *		**BPF_PROG_TYPE_SK_MSG**
+ *
+ *			eBPF map of socket type (eg **BPF_MAP_TYPE_SOCKHASH**).
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_PROG_DETACH
+ *	Description
+ *		Detach the eBPF program associated with the *target_fd* at the
+ *		hook specified by *attach_type*. The program must have been
+ *		previously attached using **BPF_PROG_ATTACH**.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_PROG_TEST_RUN
+ *	Description
+ *		Run the eBPF program associated with the *prog_fd* a *repeat*
+ *		number of times against a provided program context *ctx_in* and
+ *		data *data_in*, and return the modified program context
+ *		*ctx_out*, *data_out* (for example, packet data), result of the
+ *		execution *retval*, and *duration* of the test run.
+ *
+ *		The sizes of the buffers provided as input and output
+ *		parameters *ctx_in*, *ctx_out*, *data_in*, and *data_out* must
+ *		be provided in the corresponding variables *ctx_size_in*,
+ *		*ctx_size_out*, *data_size_in*, and/or *data_size_out*. If any
+ *		of these parameters are not provided (ie set to NULL), the
+ *		corresponding size field must be zero.
+ *
+ *		Some program types have particular requirements:
+ *
+ *		**BPF_PROG_TYPE_SK_LOOKUP**
+ *			*data_in* and *data_out* must be NULL.
+ *
+ *		**BPF_PROG_TYPE_RAW_TRACEPOINT**,
+ *		**BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE**
+ *
+ *			*ctx_out*, *data_in* and *data_out* must be NULL.
+ *			*repeat* must be zero.
+ *
+ *		BPF_PROG_RUN is an alias for BPF_PROG_TEST_RUN.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ *		**ENOSPC**
+ *			Either *data_size_out* or *ctx_size_out* is too small.
+ *		**ENOTSUPP**
+ *			This command is not supported by the program type of
+ *			the program referred to by *prog_fd*.
+ *
+ * BPF_PROG_GET_NEXT_ID
+ *	Description
+ *		Fetch the next eBPF program currently loaded into the kernel.
+ *
+ *		Looks for the eBPF program with an id greater than *start_id*
+ *		and updates *next_id* on success. If no other eBPF programs
+ *		remain with ids higher than *start_id*, returns -1 and sets
+ *		*errno* to **ENOENT**.
+ *
+ *	Return
+ *		Returns zero on success. On error, or when no id remains, -1
+ *		is returned and *errno* is set appropriately.
+ *
+ * BPF_MAP_GET_NEXT_ID
+ *	Description
+ *		Fetch the next eBPF map currently loaded into the kernel.
+ *
+ *		Looks for the eBPF map with an id greater than *start_id*
+ *		and updates *next_id* on success. If no other eBPF maps
+ *		remain with ids higher than *start_id*, returns -1 and sets
+ *		*errno* to **ENOENT**.
+ *
+ *	Return
+ *		Returns zero on success. On error, or when no id remains, -1
+ *		is returned and *errno* is set appropriately.
+ *
+ * BPF_PROG_GET_FD_BY_ID
+ *	Description
+ *		Open a file descriptor for the eBPF program corresponding to
+ *		*prog_id*.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_MAP_GET_FD_BY_ID
+ *	Description
+ *		Open a file descriptor for the eBPF map corresponding to
+ *		*map_id*.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_OBJ_GET_INFO_BY_FD
+ *	Description
+ *		Obtain information about the eBPF object corresponding to
+ *		*bpf_fd*.
+ *
+ *		Populates up to *info_len* bytes of *info*, which will be in
+ *		one of the following formats depending on the eBPF object type
+ *		of *bpf_fd*:
+ *
+ *		* **struct bpf_prog_info**
+ *		* **struct bpf_map_info**
+ *		* **struct bpf_btf_info**
+ *		* **struct bpf_link_info**
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_PROG_QUERY
+ *	Description
+ *		Obtain information about eBPF programs associated with the
+ *		specified *attach_type* hook.
+ *
+ *		The *target_fd* must be a valid file descriptor for a kernel
+ *		object which depends on the attach type of *attach_bpf_fd*:
+ *
+ *		**BPF_PROG_TYPE_CGROUP_DEVICE**,
+ *		**BPF_PROG_TYPE_CGROUP_SKB**,
+ *		**BPF_PROG_TYPE_CGROUP_SOCK**,
+ *		**BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,
+ *		**BPF_PROG_TYPE_CGROUP_SOCKOPT**,
+ *		**BPF_PROG_TYPE_CGROUP_SYSCTL**,
+ *		**BPF_PROG_TYPE_SOCK_OPS**
+ *
+ *			Control Group v2 hierarchy with the eBPF controller
+ *			enabled. Requires the kernel to be compiled with
+ *			**CONFIG_CGROUP_BPF**.
+ *
+ *		**BPF_PROG_TYPE_FLOW_DISSECTOR**
+ *
+ *			Network namespace (eg /proc/self/ns/net).
+ *
+ *		**BPF_PROG_TYPE_LIRC_MODE2**
+ *
+ *			LIRC device path (eg /dev/lircN). Requires the kernel
+ *			to be compiled with **CONFIG_BPF_LIRC_MODE2**.
+ *
+ *		**BPF_PROG_QUERY** always fetches the number of programs
+ *		attached and the *attach_flags* which were used to attach those
+ *		programs. Additionally, if *prog_ids* is nonzero and the number
+ *		of attached programs is less than *prog_cnt*, populates
+ *		*prog_ids* with the eBPF program ids of the programs attached
+ *		at *target_fd*.
+ *
+ *		The following flags may alter the result:
+ *
+ *		**BPF_F_QUERY_EFFECTIVE**
+ *			Only return information regarding programs which are
+ *			currently effective at the specified *target_fd*.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_RAW_TRACEPOINT_OPEN
+ *	Description
+ *		Attach an eBPF program to a tracepoint *name* to access kernel
+ *		internal arguments of the tracepoint in their raw form.
+ *
+ *		The *prog_fd* must be a valid file descriptor associated with
+ *		a loaded eBPF program of type **BPF_PROG_TYPE_RAW_TRACEPOINT**.
+ *
+ *		No ABI guarantees are made about the content of tracepoint
+ *		arguments exposed to the corresponding eBPF program.
+ *
+ *		Applying **close**\ (2) to the file descriptor returned by
+ *		**BPF_RAW_TRACEPOINT_OPEN** will delete the map (but see NOTES).
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_BTF_LOAD
+ *	Description
+ *		Verify and load BPF Type Format (BTF) metadata into the kernel,
+ *		returning a new file descriptor associated with the metadata.
+ *		BTF is described in more detail at
+ *		https://www.kernel.org/doc/html/latest/bpf/btf.html.
+ *
+ *		The *btf* parameter must point to valid memory providing
+ *		*btf_size* bytes of BTF binary metadata.
+ *
+ *		The returned file descriptor can be passed to other **bpf**\ ()
+ *		subcommands such as **BPF_PROG_LOAD** or **BPF_MAP_CREATE** to
+ *		associate the BTF with those objects.
+ *
+ *		Similar to **BPF_PROG_LOAD**, **BPF_BTF_LOAD** has optional
+ *		parameters to specify a *btf_log_buf*, *btf_log_size* and
+ *		*btf_log_level* which allow the kernel to return freeform log
+ *		output regarding the BTF verification process.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_BTF_GET_FD_BY_ID
+ *	Description
+ *		Open a file descriptor for the BPF Type Format (BTF)
+ *		corresponding to *btf_id*.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_TASK_FD_QUERY
+ *	Description
+ *		Obtain information about eBPF programs associated with the
+ *		target process identified by *pid* and *fd*.
+ *
+ *		If the *pid* and *fd* are associated with a tracepoint, kprobe
+ *		or uprobe perf event, then the *prog_id* and *fd_type* will
+ *		be populated with the eBPF program id and file descriptor type
+ *		of type **bpf_task_fd_type**. If associated with a kprobe or
+ *		uprobe, the  *probe_offset* and *probe_addr* will also be
+ *		populated. Optionally, if *buf* is provided, then up to
+ *		*buf_len* bytes of *buf* will be populated with the name of
+ *		the tracepoint, kprobe or uprobe.
+ *
+ *		The resulting *prog_id* may be introspected in deeper detail
+ *		using **BPF_PROG_GET_FD_BY_ID** and **BPF_OBJ_GET_INFO_BY_FD**.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_MAP_LOOKUP_AND_DELETE_ELEM
+ *	Description
+ *		Look up an element with the given *key* in the map referred to
+ *		by the file descriptor *fd*, and if found, delete the element.
+ *
+ *		For **BPF_MAP_TYPE_QUEUE** and **BPF_MAP_TYPE_STACK** map
+ *		types, the *flags* argument needs to be set to 0, but for other
+ *		map types, it may be specified as:
+ *
+ *		**BPF_F_LOCK**
+ *			Look up and delete the value of a spin-locked map
+ *			without returning the lock. This must be specified if
+ *			the elements contain a spinlock.
+ *
+ *		The **BPF_MAP_TYPE_QUEUE** and **BPF_MAP_TYPE_STACK** map types
+ *		implement this command as a "pop" operation, deleting the top
+ *		element rather than one corresponding to *key*.
+ *		The *key* and *key_len* parameters should be zeroed when
+ *		issuing this operation for these map types.
+ *
+ *		This command is only valid for the following map types:
+ *		* **BPF_MAP_TYPE_QUEUE**
+ *		* **BPF_MAP_TYPE_STACK**
+ *		* **BPF_MAP_TYPE_HASH**
+ *		* **BPF_MAP_TYPE_PERCPU_HASH**
+ *		* **BPF_MAP_TYPE_LRU_HASH**
+ *		* **BPF_MAP_TYPE_LRU_PERCPU_HASH**
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_MAP_FREEZE
+ *	Description
+ *		Freeze the permissions of the specified map.
+ *
+ *		Write permissions may be frozen by passing zero *flags*.
+ *		Upon success, no future syscall invocations may alter the
+ *		map state of *map_fd*. Write operations from eBPF programs
+ *		are still possible for a frozen map.
+ *
+ *		Not supported for maps of type **BPF_MAP_TYPE_STRUCT_OPS**.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_BTF_GET_NEXT_ID
+ *	Description
+ *		Fetch the next BPF Type Format (BTF) object currently loaded
+ *		into the kernel.
+ *
+ *		Looks for the BTF object with an id greater than *start_id*
+ *		and updates *next_id* on success. If no other BTF objects
+ *		remain with ids higher than *start_id*, returns -1 and sets
+ *		*errno* to **ENOENT**.
+ *
+ *	Return
+ *		Returns zero on success. On error, or when no id remains, -1
+ *		is returned and *errno* is set appropriately.
+ *
+ * BPF_MAP_LOOKUP_BATCH
+ *	Description
+ *		Iterate and fetch multiple elements in a map.
+ *
+ *		Two opaque values are used to manage batch operations,
+ *		*in_batch* and *out_batch*. Initially, *in_batch* must be set
+ *		to NULL to begin the batched operation. After each subsequent
+ *		**BPF_MAP_LOOKUP_BATCH**, the caller should pass the resultant
+ *		*out_batch* as the *in_batch* for the next operation to
+ *		continue iteration from the current point.
+ *
+ *		The *keys* and *values* are output parameters which must point
+ *		to memory large enough to hold *count* items based on the key
+ *		and value size of the map *map_fd*. The *keys* buffer must be
+ *		of *key_size* * *count*. The *values* buffer must be of
+ *		*value_size* * *count*.
+ *
+ *		The *elem_flags* argument may be specified as one of the
+ *		following:
+ *
+ *		**BPF_F_LOCK**
+ *			Look up the value of a spin-locked map without
+ *			returning the lock. This must be specified if the
+ *			elements contain a spinlock.
+ *
+ *		On success, *count* elements from the map are copied into the
+ *		user buffer, with the keys copied into *keys* and the values
+ *		copied into the corresponding indices in *values*.
+ *
+ *		If an error is returned and *errno* is not **EFAULT**, *count*
+ *		is set to the number of successfully processed elements.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ *		May set *errno* to **ENOSPC** to indicate that *keys* or
+ *		*values* is too small to dump an entire bucket during
+ *		iteration of a hash-based map type.
+ *
+ * BPF_MAP_LOOKUP_AND_DELETE_BATCH
+ *	Description
+ *		Iterate and delete all elements in a map.
+ *
+ *		This operation has the same behavior as
+ *		**BPF_MAP_LOOKUP_BATCH** with two exceptions:
+ *
+ *		* Every element that is successfully returned is also deleted
+ *		  from the map. This is at least *count* elements. Note that
+ *		  *count* is both an input and an output parameter.
+ *		* Upon returning with *errno* set to **EFAULT**, up to
+ *		  *count* elements may be deleted without returning the keys
+ *		  and values of the deleted elements.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_MAP_UPDATE_BATCH
+ *	Description
+ *		Update multiple elements in a map by *key*.
+ *
+ *		The *keys* and *values* are input parameters which must point
+ *		to memory large enough to hold *count* items based on the key
+ *		and value size of the map *map_fd*. The *keys* buffer must be
+ *		of *key_size* * *count*. The *values* buffer must be of
+ *		*value_size* * *count*.
+ *
+ *		Each element specified in *keys* is sequentially updated to the
+ *		value in the corresponding index in *values*. The *in_batch*
+ *		and *out_batch* parameters are ignored and should be zeroed.
+ *
+ *		The *elem_flags* argument should be specified as one of the
+ *		following:
+ *
+ *		**BPF_ANY**
+ *			Create new elements or update a existing elements.
+ *		**BPF_NOEXIST**
+ *			Create new elements only if they do not exist.
+ *		**BPF_EXIST**
+ *			Update existing elements.
+ *		**BPF_F_LOCK**
+ *			Update spin_lock-ed map elements. This must be
+ *			specified if the map value contains a spinlock.
+ *
+ *		On success, *count* elements from the map are updated.
+ *
+ *		If an error is returned and *errno* is not **EFAULT**, *count*
+ *		is set to the number of successfully processed elements.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ *		May set *errno* to **EINVAL**, **EPERM**, **ENOMEM**, or
+ *		**E2BIG**. **E2BIG** indicates that the number of elements in
+ *		the map reached the *max_entries* limit specified at map
+ *		creation time.
+ *
+ *		May set *errno* to one of the following error codes under
+ *		specific circumstances:
+ *
+ *		**EEXIST**
+ *			If *flags* specifies **BPF_NOEXIST** and the element
+ *			with *key* already exists in the map.
+ *		**ENOENT**
+ *			If *flags* specifies **BPF_EXIST** and the element with
+ *			*key* does not exist in the map.
+ *
+ * BPF_MAP_DELETE_BATCH
+ *	Description
+ *		Delete multiple elements in a map by *key*.
+ *
+ *		The *keys* parameter is an input parameter which must point
+ *		to memory large enough to hold *count* items based on the key
+ *		size of the map *map_fd*, that is, *key_size* * *count*.
+ *
+ *		Each element specified in *keys* is sequentially deleted. The
+ *		*in_batch*, *out_batch*, and *values* parameters are ignored
+ *		and should be zeroed.
+ *
+ *		The *elem_flags* argument may be specified as one of the
+ *		following:
+ *
+ *		**BPF_F_LOCK**
+ *			Look up the value of a spin-locked map without
+ *			returning the lock. This must be specified if the
+ *			elements contain a spinlock.
+ *
+ *		On success, *count* elements from the map are updated.
+ *
+ *		If an error is returned and *errno* is not **EFAULT**, *count*
+ *		is set to the number of successfully processed elements. If
+ *		*errno* is **EFAULT**, up to *count* elements may be been
+ *		deleted.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_LINK_CREATE
+ *	Description
+ *		Attach an eBPF program to a *target_fd* at the specified
+ *		*attach_type* hook and return a file descriptor handle for
+ *		managing the link.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_LINK_UPDATE
+ *	Description
+ *		Update the eBPF program in the specified *link_fd* to
+ *		*new_prog_fd*.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_LINK_GET_FD_BY_ID
+ *	Description
+ *		Open a file descriptor for the eBPF Link corresponding to
+ *		*link_id*.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_LINK_GET_NEXT_ID
+ *	Description
+ *		Fetch the next eBPF link currently loaded into the kernel.
+ *
+ *		Looks for the eBPF link with an id greater than *start_id*
+ *		and updates *next_id* on success. If no other eBPF links
+ *		remain with ids higher than *start_id*, returns -1 and sets
+ *		*errno* to **ENOENT**.
+ *
+ *	Return
+ *		Returns zero on success. On error, or when no id remains, -1
+ *		is returned and *errno* is set appropriately.
+ *
+ * BPF_ENABLE_STATS
+ *	Description
+ *		Enable eBPF runtime statistics gathering.
+ *
+ *		Runtime statistics gathering for the eBPF runtime is disabled
+ *		by default to minimize the corresponding performance overhead.
+ *		This command enables statistics globally.
+ *
+ *		Multiple programs may independently enable statistics.
+ *		After gathering the desired statistics, eBPF runtime statistics
+ *		may be disabled again by calling **close**\ (2) for the file
+ *		descriptor returned by this function. Statistics will only be
+ *		disabled system-wide when all outstanding file descriptors
+ *		returned by prior calls for this subcommand are closed.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_ITER_CREATE
+ *	Description
+ *		Create an iterator on top of the specified *link_fd* (as
+ *		previously created using **BPF_LINK_CREATE**) and return a
+ *		file descriptor that can be used to trigger the iteration.
+ *
+ *		If the resulting file descriptor is pinned to the filesystem
+ *		using  **BPF_OBJ_PIN**, then subsequent **read**\ (2) syscalls
+ *		for that path will trigger the iterator to read kernel state
+ *		using the eBPF program attached to *link_fd*.
+ *
+ *	Return
+ *		A new file descriptor (a nonnegative integer), or -1 if an
+ *		error occurred (in which case, *errno* is set appropriately).
+ *
+ * BPF_LINK_DETACH
+ *	Description
+ *		Forcefully detach the specified *link_fd* from its
+ *		corresponding attachment point.
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * BPF_PROG_BIND_MAP
+ *	Description
+ *		Bind a map to the lifetime of an eBPF program.
+ *
+ *		The map identified by *map_fd* is bound to the program
+ *		identified by *prog_fd* and only released when *prog_fd* is
+ *		released. This may be used in cases where metadata should be
+ *		associated with a program which otherwise does not contain any
+ *		references to the map (for example, embedded in the eBPF
+ *		program instructions).
+ *
+ *	Return
+ *		Returns zero on success. On error, -1 is returned and *errno*
+ *		is set appropriately.
+ *
+ * NOTES
+ *	eBPF objects (maps and programs) can be shared between processes.
+ *
+ *	* After **fork**\ (2), the child inherits file descriptors
+ *	  referring to the same eBPF objects.
+ *	* File descriptors referring to eBPF objects can be transferred over
+ *	  **unix**\ (7) domain sockets.
+ *	* File descriptors referring to eBPF objects can be duplicated in the
+ *	  usual way, using **dup**\ (2) and similar calls.
+ *	* File descriptors referring to eBPF objects can be pinned to the
+ *	  filesystem using the **BPF_OBJ_PIN** command of **bpf**\ (2).
+ *
+ *	An eBPF object is deallocated only after all file descriptors referring
+ *	to the object have been closed and no references remain pinned to the
+ *	filesystem or attached (for example, bound to a program or device).
+ */
 enum bpf_cmd {
 	BPF_MAP_CREATE,
 	BPF_MAP_LOOKUP_ELEM,
@@ -100,6 +874,7 @@
 	BPF_PROG_ATTACH,
 	BPF_PROG_DETACH,
 	BPF_PROG_TEST_RUN,
+	BPF_PROG_RUN = BPF_PROG_TEST_RUN,
 	BPF_PROG_GET_NEXT_ID,
 	BPF_MAP_GET_NEXT_ID,
 	BPF_PROG_GET_FD_BY_ID,
@@ -147,7 +922,14 @@
 	BPF_MAP_TYPE_CPUMAP,
 	BPF_MAP_TYPE_XSKMAP,
 	BPF_MAP_TYPE_SOCKHASH,
-	BPF_MAP_TYPE_CGROUP_STORAGE,
+	BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED,
+	/* BPF_MAP_TYPE_CGROUP_STORAGE is available to bpf programs attaching
+	 * to a cgroup. The newer BPF_MAP_TYPE_CGRP_STORAGE is available to
+	 * both cgroup-attached and other progs and supports all functionality
+	 * provided by BPF_MAP_TYPE_CGROUP_STORAGE. So mark
+	 * BPF_MAP_TYPE_CGROUP_STORAGE deprecated.
+	 */
+	BPF_MAP_TYPE_CGROUP_STORAGE = BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED,
 	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
 	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE,
 	BPF_MAP_TYPE_QUEUE,
@@ -157,6 +939,10 @@
 	BPF_MAP_TYPE_STRUCT_OPS,
 	BPF_MAP_TYPE_RINGBUF,
 	BPF_MAP_TYPE_INODE_STORAGE,
+	BPF_MAP_TYPE_TASK_STORAGE,
+	BPF_MAP_TYPE_BLOOM_FILTER,
+	BPF_MAP_TYPE_USER_RINGBUF,
+	BPF_MAP_TYPE_CGRP_STORAGE,
 };
 
 /* Note that tracing related programs such as
@@ -199,6 +985,7 @@
 	BPF_PROG_TYPE_EXT,
 	BPF_PROG_TYPE_LSM,
 	BPF_PROG_TYPE_SK_LOOKUP,
+	BPF_PROG_TYPE_SYSCALL, /* a program that can execute syscalls */
 };
 
 enum bpf_attach_type {
@@ -240,6 +1027,12 @@
 	BPF_XDP_CPUMAP,
 	BPF_SK_LOOKUP,
 	BPF_XDP,
+	BPF_SK_SKB_VERDICT,
+	BPF_SK_REUSEPORT_SELECT,
+	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE,
+	BPF_PERF_EVENT,
+	BPF_TRACE_KPROBE_MULTI,
+	BPF_LSM_CGROUP,
 	__MAX_BPF_ATTACH_TYPE
 };
 
@@ -253,6 +1046,9 @@
 	BPF_LINK_TYPE_ITER = 4,
 	BPF_LINK_TYPE_NETNS = 5,
 	BPF_LINK_TYPE_XDP = 6,
+	BPF_LINK_TYPE_PERF_EVENT = 7,
+	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
 
 	MAX_BPF_LINK_TYPE,
 };
@@ -355,11 +1151,21 @@
  */
 #define BPF_F_SLEEPABLE		(1U << 4)
 
+/* If BPF_F_XDP_HAS_FRAGS is used in BPF_PROG_LOAD command, the loaded program
+ * fully support xdp frags.
+ */
+#define BPF_F_XDP_HAS_FRAGS	(1U << 5)
+
+/* link_create.kprobe_multi.flags used in LINK_CREATE command for
+ * BPF_TRACE_KPROBE_MULTI attach type to create return probe.
+ */
+#define BPF_F_KPROBE_MULTI_RETURN	(1U << 0)
+
 /* When BPF ldimm64's insn[0].src_reg != 0 then this can have
  * the following extensions:
  *
- * insn[0].src_reg:  BPF_PSEUDO_MAP_FD
- * insn[0].imm:      map fd
+ * insn[0].src_reg:  BPF_PSEUDO_MAP_[FD|IDX]
+ * insn[0].imm:      map fd or fd_idx
  * insn[1].imm:      0
  * insn[0].off:      0
  * insn[1].off:      0
@@ -367,15 +1173,19 @@
  * verifier type:    CONST_PTR_TO_MAP
  */
 #define BPF_PSEUDO_MAP_FD	1
-/* insn[0].src_reg:  BPF_PSEUDO_MAP_VALUE
- * insn[0].imm:      map fd
+#define BPF_PSEUDO_MAP_IDX	5
+
+/* insn[0].src_reg:  BPF_PSEUDO_MAP_[IDX_]VALUE
+ * insn[0].imm:      map fd or fd_idx
  * insn[1].imm:      offset into value
  * insn[0].off:      0
  * insn[1].off:      0
  * ldimm64 rewrite:  address of map[0]+offset
  * verifier type:    PTR_TO_MAP_VALUE
  */
-#define BPF_PSEUDO_MAP_VALUE	2
+#define BPF_PSEUDO_MAP_VALUE		2
+#define BPF_PSEUDO_MAP_IDX_VALUE	6
+
 /* insn[0].src_reg:  BPF_PSEUDO_BTF_ID
  * insn[0].imm:      kernel btd id of VAR
  * insn[1].imm:      0
@@ -386,11 +1196,24 @@
  *                   is struct/union.
  */
 #define BPF_PSEUDO_BTF_ID	3
+/* insn[0].src_reg:  BPF_PSEUDO_FUNC
+ * insn[0].imm:      insn offset to the func
+ * insn[1].imm:      0
+ * insn[0].off:      0
+ * insn[1].off:      0
+ * ldimm64 rewrite:  address of the function
+ * verifier type:    PTR_TO_FUNC.
+ */
+#define BPF_PSEUDO_FUNC		4
 
 /* when bpf_call->src_reg == BPF_PSEUDO_CALL, bpf_call->imm == pc-relative
  * offset to another bpf function
  */
 #define BPF_PSEUDO_CALL		1
+/* when bpf_call->src_reg == BPF_PSEUDO_KFUNC_CALL,
+ * bpf_call->imm == btf_id of a BTF_KIND_FUNC in the running kernel
+ */
+#define BPF_PSEUDO_KFUNC_CALL	2
 
 /* flags for BPF_MAP_UPDATE_ELEM command */
 enum {
@@ -444,7 +1267,7 @@
 
 /* Query effective (directly attached + inherited from ancestor cgroups)
  * programs that will be executed for events within a cgroup.
- * attach_flags with this flag are returned only for directly attached programs.
+ * attach_flags with this flag are always returned 0.
  */
 #define BPF_F_QUERY_EFFECTIVE	(1U << 0)
 
@@ -452,6 +1275,8 @@
 
 /* If set, run the test on the cpu specified by bpf_attr.test.cpu */
 #define BPF_F_TEST_RUN_ON_CPU	(1U << 0)
+/* If set, XDP frames will be transmitted after processing */
+#define BPF_F_TEST_XDP_LIVE_FRAMES	(1U << 1)
 
 /* type for BPF_ENABLE_STATS */
 enum bpf_stats_type {
@@ -502,6 +1327,13 @@
 						   * struct stored as the
 						   * map value
 						   */
+		/* Any per-map-type extra fields
+		 *
+		 * BPF_MAP_TYPE_BLOOM_FILTER - the lowest 4 bits indicate the
+		 * number of hash functions (if 0, the bloom filter will default
+		 * to using 5 hash functions).
+		 */
+		__u64	map_extra;
 	};
 
 	struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
@@ -556,7 +1388,16 @@
 		__aligned_u64	line_info;	/* line info */
 		__u32		line_info_cnt;	/* number of bpf_line_info records */
 		__u32		attach_btf_id;	/* in-kernel BTF type id to attach to */
-		__u32		attach_prog_fd; /* 0 to attach to vmlinux */
+		union {
+			/* valid prog_fd to attach to bpf prog */
+			__u32		attach_prog_fd;
+			/* or valid module BTF object fd or 0 to attach to vmlinux */
+			__u32		attach_btf_obj_fd;
+		};
+		__u32		core_relo_cnt;	/* number of bpf_core_relo */
+		__aligned_u64	fd_array;	/* array of FDs */
+		__aligned_u64	core_relos;
+		__u32		core_relo_rec_size; /* sizeof(struct bpf_core_relo) */
 	};
 
 	struct { /* anonymous struct used by BPF_OBJ_* commands */
@@ -597,6 +1438,7 @@
 		__aligned_u64	ctx_out;
 		__u32		flags;
 		__u32		cpu;
+		__u32		batch_size;
 	} test;
 
 	struct { /* anonymous struct used by BPF_*_GET_*_ID */
@@ -624,6 +1466,10 @@
 		__u32		attach_flags;
 		__aligned_u64	prog_ids;
 		__u32		prog_cnt;
+		/* output: per-program attach_flags.
+		 * not allowed to be set during effective query.
+		 */
+		__aligned_u64	prog_attach_flags;
 	} query;
 
 	struct { /* anonymous struct used by BPF_RAW_TRACEPOINT_OPEN command */
@@ -669,6 +1515,29 @@
 				__aligned_u64	iter_info;	/* extra bpf_iter_link_info */
 				__u32		iter_info_len;	/* iter_info length */
 			};
+			struct {
+				/* black box user-provided value passed through
+				 * to BPF program at the execution time and
+				 * accessible through bpf_get_attach_cookie() BPF helper
+				 */
+				__u64		bpf_cookie;
+			} perf_event;
+			struct {
+				__u32		flags;
+				__u32		cnt;
+				__aligned_u64	syms;
+				__aligned_u64	addrs;
+				__aligned_u64	cookies;
+			} kprobe_multi;
+			struct {
+				/* this is overlaid with the target_btf_id above. */
+				__u32		target_btf_id;
+				/* black box user-provided value passed through
+				 * to BPF program at the execution time and
+				 * accessible through bpf_get_attach_cookie() BPF helper
+				 */
+				__u64		cookie;
+			} tracing;
 		};
 	} link_create;
 
@@ -708,7 +1577,7 @@
  * parsed and used to produce a manual page. The workflow is the following,
  * and requires the rst2man utility:
  *
- *     $ ./scripts/bpf_helpers_doc.py \
+ *     $ ./scripts/bpf_doc.py \
  *             --filename include/uapi/linux/bpf.h > /tmp/bpf-helpers.rst
  *     $ rst2man /tmp/bpf-helpers.rst > /tmp/bpf-helpers.7
  *     $ man /tmp/bpf-helpers.7
@@ -843,7 +1712,7 @@
  * u32 bpf_get_smp_processor_id(void)
  * 	Description
  * 		Get the SMP (symmetric multiprocessing) processor id. Note that
- * 		all programs run with preemption disabled, which means that the
+ * 		all programs run with migration disabled, which means that the
  * 		SMP processor id is stable during all the execution of the
  * 		program.
  * 	Return
@@ -950,7 +1819,7 @@
  * 		if the maximum number of tail calls has been reached for this
  * 		chain of programs. This limit is defined in the kernel by the
  * 		macro **MAX_TAIL_CALL_CNT** (not accessible to user space),
- * 		which is currently set to 32.
+ *		which is currently set to 33.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
  *
@@ -979,6 +1848,8 @@
  * 		0 on success, or a negative error in case of failure.
  *
  * u64 bpf_get_current_pid_tgid(void)
+ * 	Description
+ * 		Get the current pid and tgid.
  * 	Return
  * 		A 64-bit integer containing the current tgid and pid, and
  * 		created as such:
@@ -986,6 +1857,8 @@
  * 		*current_task*\ **->pid**.
  *
  * u64 bpf_get_current_uid_gid(void)
+ * 	Description
+ * 		Get the current uid and gid.
  * 	Return
  * 		A 64-bit integer containing the current GID and UID, and
  * 		created as such: *current_gid* **<< 32 \|** *current_uid*.
@@ -1460,6 +2333,8 @@
  * 		The 32-bit hash.
  *
  * u64 bpf_get_current_task(void)
+ * 	Description
+ * 		Get the current task.
  * 	Return
  * 		A pointer to the current task struct.
  *
@@ -1490,8 +2365,8 @@
  * 	Return
  * 		The return value depends on the result of the test, and can be:
  *
- *		* 0, if current task belongs to the cgroup2.
- *		* 1, if current task does not belong to the cgroup2.
+ *		* 1, if current task belongs to the cgroup2.
+ *		* 0, if current task does not belong to the cgroup2.
  * 		* A negative error code, if an error occurred.
  *
  * long bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
@@ -1523,7 +2398,8 @@
  * 		Pull in non-linear data in case the *skb* is non-linear and not
  * 		all of *len* are part of the linear section. Make *len* bytes
  * 		from *skb* readable and writable. If a zero value is passed for
- * 		*len*, then the whole length of the *skb* is pulled.
+ *		*len*, then all bytes in the linear part of *skb* will be made
+ *		readable and writable.
  *
  * 		This helper is only needed for reading and writing with direct
  * 		packet access.
@@ -1573,6 +2449,8 @@
  * 		indicate that the hash is outdated and to trigger a
  * 		recalculation the next time the kernel tries to access this
  * 		hash or when the **bpf_get_hash_recalc**\ () helper is called.
+ * 	Return
+ * 		void.
  *
  * long bpf_get_numa_node_id(void)
  * 	Description
@@ -1644,24 +2522,34 @@
  * 		networking traffic statistics as it provides a global socket
  * 		identifier that can be assumed unique.
  * 	Return
- * 		A 8-byte long non-decreasing number on success, or 0 if the
- * 		socket field is missing inside *skb*.
+ * 		A 8-byte long unique number on success, or 0 if the socket
+ * 		field is missing inside *skb*.
  *
  * u64 bpf_get_socket_cookie(struct bpf_sock_addr *ctx)
  * 	Description
  * 		Equivalent to bpf_get_socket_cookie() helper that accepts
  * 		*skb*, but gets socket from **struct bpf_sock_addr** context.
  * 	Return
- * 		A 8-byte long non-decreasing number.
+ * 		A 8-byte long unique number.
  *
  * u64 bpf_get_socket_cookie(struct bpf_sock_ops *ctx)
  * 	Description
  * 		Equivalent to **bpf_get_socket_cookie**\ () helper that accepts
  * 		*skb*, but gets socket from **struct bpf_sock_ops** context.
  * 	Return
- * 		A 8-byte long non-decreasing number.
+ * 		A 8-byte long unique number.
+ *
+ * u64 bpf_get_socket_cookie(struct sock *sk)
+ * 	Description
+ * 		Equivalent to **bpf_get_socket_cookie**\ () helper that accepts
+ * 		*sk*, but gets socket from a BTF **struct sock**. This helper
+ * 		also works for sleepable programs.
+ * 	Return
+ * 		A 8-byte long unique number or 0 if *sk* is NULL.
  *
  * u32 bpf_get_socket_uid(struct sk_buff *skb)
+ * 	Description
+ * 		Get the owner UID of the socked associated to *skb*.
  * 	Return
  * 		The owner UID of the socket associated to *skb*. If the socket
  * 		is **NULL**, or if it is not a full socket (i.e. if it is a
@@ -1696,14 +2584,19 @@
  * 		* **SOL_SOCKET**, which supports the following *optname*\ s:
  * 		  **SO_RCVBUF**, **SO_SNDBUF**, **SO_MAX_PACING_RATE**,
  * 		  **SO_PRIORITY**, **SO_RCVLOWAT**, **SO_MARK**,
- * 		  **SO_BINDTODEVICE**, **SO_KEEPALIVE**.
+ * 		  **SO_BINDTODEVICE**, **SO_KEEPALIVE**, **SO_REUSEADDR**,
+ * 		  **SO_REUSEPORT**, **SO_BINDTOIFINDEX**, **SO_TXREHASH**.
  * 		* **IPPROTO_TCP**, which supports the following *optname*\ s:
  * 		  **TCP_CONGESTION**, **TCP_BPF_IW**,
  * 		  **TCP_BPF_SNDCWND_CLAMP**, **TCP_SAVE_SYN**,
  * 		  **TCP_KEEPIDLE**, **TCP_KEEPINTVL**, **TCP_KEEPCNT**,
- *		  **TCP_SYNCNT**, **TCP_USER_TIMEOUT**, **TCP_NOTSENT_LOWAT**.
+ * 		  **TCP_SYNCNT**, **TCP_USER_TIMEOUT**, **TCP_NOTSENT_LOWAT**,
+ * 		  **TCP_NODELAY**, **TCP_MAXSEG**, **TCP_WINDOW_CLAMP**,
+ * 		  **TCP_THIN_LINEAR_TIMEOUTS**, **TCP_BPF_DELACK_MAX**,
+ * 		  **TCP_BPF_RTO_MIN**.
  * 		* **IPPROTO_IP**, which supports *optname* **IP_TOS**.
- * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
+ * 		* **IPPROTO_IPV6**, which supports the following *optname*\ s:
+ * 		  **IPV6_TCLASS**, **IPV6_AUTOFLOWLABEL**.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
  *
@@ -1722,10 +2615,12 @@
  *		There are two supported modes at this time:
  *
  *		* **BPF_ADJ_ROOM_MAC**: Adjust room at the mac layer
- *		  (room space is added or removed below the layer 2 header).
+ * 		  (room space is added or removed between the layer 2 and
+ * 		  layer 3 headers).
  *
  * 		* **BPF_ADJ_ROOM_NET**: Adjust room at the network layer
- * 		  (room space is added or removed below the layer 3 header).
+ * 		  (room space is added or removed between the layer 3 and
+ * 		  layer 4 headers).
  *
  *		The following flags are supported at this time:
  *
@@ -1745,6 +2640,10 @@
  *		  Use with ENCAP_L3/L4 flags to further specify the tunnel
  *		  type; *len* is the length of the inner MAC header.
  *
+ *		* **BPF_F_ADJ_ROOM_ENCAP_L2_ETH**:
+ *		  Use with BPF_F_ADJ_ROOM_ENCAP_L2 flag to further specify the
+ *		  L2 type as Ethernet.
+ *
  * 		A call to this helper is susceptible to change the underlying
  * 		packet buffer. Therefore, at load time, all checks on pointers
  * 		previously done by the verifier are invalidated and must be
@@ -1753,7 +2652,7 @@
  * 	Return
  * 		0 on success, or a negative error in case of failure.
  *
- * long bpf_redirect_map(struct bpf_map *map, u32 key, u64 flags)
+ * long bpf_redirect_map(struct bpf_map *map, u64 key, u64 flags)
  * 	Description
  * 		Redirect the packet to the endpoint referenced by *map* at
  * 		index *key*. Depending on its type, this *map* can contain
@@ -1765,8 +2664,12 @@
  * 		The lower two bits of *flags* are used as the return code if
  * 		the map lookup fails. This is so that the return value can be
  * 		one of the XDP program return codes up to **XDP_TX**, as chosen
- * 		by the caller. Any higher bits in the *flags* argument must be
- * 		unset.
+ * 		by the caller. The higher bits of *flags* can be set to
+ * 		BPF_F_BROADCAST or BPF_F_EXCLUDE_INGRESS as defined below.
+ *
+ * 		With BPF_F_BROADCAST the packet will be broadcasted to all the
+ * 		interfaces in the map, with BPF_F_EXCLUDE_INGRESS the ingress
+ * 		interface will be excluded when do broadcasting.
  *
  * 		See also **bpf_redirect**\ (), which only supports redirecting
  * 		to an ifindex, but doesn't require a map to do so.
@@ -1910,12 +2813,10 @@
  * 		  and **BPF_CGROUP_INET6_CONNECT**.
  *
  * 		This helper actually implements a subset of **getsockopt()**.
- * 		It supports the following *level*\ s:
- *
- * 		* **IPPROTO_TCP**, which supports *optname*
- * 		  **TCP_CONGESTION**.
- * 		* **IPPROTO_IP**, which supports *optname* **IP_TOS**.
- * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
+ * 		It supports the same set of *optname*\ s that is supported by
+ * 		the **bpf_setsockopt**\ () helper.  The exceptions are
+ * 		**TCP_BPF_*** is **bpf_setsockopt**\ () only and
+ * 		**TCP_SAVED_SYN** is **bpf_getsockopt**\ () only.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
  *
@@ -2149,8 +3050,18 @@
  * 		**BPF_F_USER_STACK**
  * 			Collect a user space stack instead of a kernel stack.
  * 		**BPF_F_USER_BUILD_ID**
- * 			Collect buildid+offset instead of ips for user stack,
- * 			only valid if **BPF_F_USER_STACK** is also specified.
+ * 			Collect (build_id, file_offset) instead of ips for user
+ * 			stack, only valid if **BPF_F_USER_STACK** is also
+ * 			specified.
+ *
+ * 			*file_offset* is an offset relative to the beginning
+ * 			of the executable or shared object file backing the vma
+ * 			which the *ip* falls in. It is *not* an offset relative
+ * 			to that object's base address. Accordingly, it must be
+ * 			adjusted by adding (sh_addr - sh_offset), where
+ * 			sh_{addr,offset} correspond to the executable section
+ * 			containing *file_offset* in the object, for comparisons
+ * 			to symbols' st_value to be valid.
  *
  * 		**bpf_get_stack**\ () can collect up to
  * 		**PERF_MAX_STACK_DEPTH** both kernel and user frames, subject
@@ -2163,8 +3074,8 @@
  *
  * 			# sysctl kernel.perf_event_max_stack=<new value>
  * 	Return
- * 		A non-negative value equal to or less than *size* on success,
- * 		or a negative error in case of failure.
+ * 		The non-negative copied *buf* length equal to or less than
+ * 		*size* on success, or a negative error in case of failure.
  *
  * long bpf_skb_load_bytes_relative(const void *skb, u32 offset, void *to, u32 len, u32 start_header)
  * 	Description
@@ -2219,6 +3130,9 @@
  *		* > 0 one of **BPF_FIB_LKUP_RET_** codes explaining why the
  *		  packet is not forwarded or needs assist from full stack
  *
+ *		If lookup fails with BPF_FIB_LKUP_RET_FRAG_NEEDED, then the MTU
+ *		was exceeded and output params->mtu_result contains the MTU.
+ *
  * long bpf_sock_hash_update(struct bpf_sock_ops *skops, struct bpf_map *map, void *key, u64 flags)
  *	Description
  *		Add an entry to, or update a sockhash *map* referencing sockets.
@@ -2425,6 +3339,9 @@
  * 		The id is returned or 0 in case the id could not be retrieved.
  *
  * u64 bpf_get_current_cgroup_id(void)
+ * 	Description
+ * 		Get the current cgroup id based on the cgroup within which
+ * 		the current task is running.
  * 	Return
  * 		A 64-bit integer containing the current cgroup id based
  * 		on the cgroup within which the current task is running.
@@ -2442,7 +3359,7 @@
  *		running simultaneously.
  *
  *		A user should care about the synchronization by himself.
- *		For example, by using the **BPF_STX_XADD** instruction to alter
+ *		For example, by using the **BPF_ATOMIC** instructions to alter
  *		the shared data.
  *	Return
  *		A pointer to the local storage area.
@@ -2450,7 +3367,7 @@
  * long bpf_sk_select_reuseport(struct sk_reuseport_md *reuse, struct bpf_map *map, void *key, u64 flags)
  *	Description
  *		Select a **SO_REUSEPORT** socket from a
- *		**BPF_MAP_TYPE_REUSEPORT_ARRAY** *map*.
+ *		**BPF_MAP_TYPE_REUSEPORT_SOCKARRAY** *map*.
  *		It checks the selected socket is matching the incoming
  *		request in the socket buffer.
  *	Return
@@ -2735,10 +3652,11 @@
  *
  * 		*iph* points to the start of the IPv4 or IPv6 header, while
  * 		*iph_len* contains **sizeof**\ (**struct iphdr**) or
- * 		**sizeof**\ (**struct ip6hdr**).
+ * 		**sizeof**\ (**struct ipv6hdr**).
  *
  * 		*th* points to the start of the TCP header, while *th_len*
- * 		contains **sizeof**\ (**struct tcphdr**).
+ *		contains the length of the TCP header (at least
+ *		**sizeof**\ (**struct tcphdr**)).
  * 	Return
  * 		0 if *iph* and *th* are a valid SYN cookie ACK, or a negative
  * 		error otherwise.
@@ -2921,10 +3839,11 @@
  *
  *		*iph* points to the start of the IPv4 or IPv6 header, while
  *		*iph_len* contains **sizeof**\ (**struct iphdr**) or
- *		**sizeof**\ (**struct ip6hdr**).
+ *		**sizeof**\ (**struct ipv6hdr**).
  *
  *		*th* points to the start of the TCP header, while *th_len*
- *		contains the length of the TCP header.
+ *		contains the length of the TCP header with options (at least
+ *		**sizeof**\ (**struct tcphdr**)).
  *	Return
  *		On success, lower 32 bits hold the generated SYN cookie in
  *		followed by 16 bits which hold the MSS value for that cookie,
@@ -2987,10 +3906,10 @@
  * 		string length is larger than *size*, just *size*-1 bytes are
  * 		copied and the last byte is set to NUL.
  *
- * 		On success, the length of the copied string is returned. This
- * 		makes this helper useful in tracing programs for reading
- * 		strings, and more importantly to get its length at runtime. See
- * 		the following snippet:
+ * 		On success, returns the number of bytes that were written,
+ * 		including the terminal NUL. This makes this helper useful in
+ * 		tracing programs for reading strings, and more importantly to
+ * 		get its length at runtime. See the following snippet:
  *
  * 		::
  *
@@ -3018,7 +3937,7 @@
  * 		**->mm->env_start**: using this helper and the return value,
  * 		one can quickly iterate at the right offset of the memory area.
  * 	Return
- * 		On success, the strictly positive length of the string,
+ * 		On success, the strictly positive length of the output string,
  * 		including the trailing NUL character. On error, a negative
  * 		value.
  *
@@ -3241,7 +4160,7 @@
  * 		arguments. The *data* are a **u64** array and corresponding format string
  * 		values are stored in the array. For strings and pointers where pointees
  * 		are accessed, only the pointer values are stored in the *data* array.
- * 		The *data_len* is the size of *data* in bytes.
+ * 		The *data_len* is the size of *data* in bytes - must be a multiple of 8.
  *
  *		Formats **%s**, **%p{i,I}{4,6}** requires to read kernel memory.
  *		Reading kernel memory may fail due to either invalid address or
@@ -3310,12 +4229,20 @@
  * 		of new data availability is sent.
  * 		If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
  * 		of new data availability is sent unconditionally.
+ * 		If **0** is specified in *flags*, an adaptive notification
+ * 		of new data availability is sent.
+ *
+ * 		An adaptive notification is a notification sent whenever the user-space
+ * 		process has caught up and consumed all available payloads. In case the user-space
+ * 		process is still processing a previous payload, then no notification is needed
+ * 		as it will process the newly added payload automatically.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
  *
  * void *bpf_ringbuf_reserve(void *ringbuf, u64 size, u64 flags)
  * 	Description
  * 		Reserve *size* bytes of payload in a ring buffer *ringbuf*.
+ * 		*flags* must be 0.
  * 	Return
  * 		Valid pointer with *size* bytes of memory available; NULL,
  * 		otherwise.
@@ -3327,6 +4254,10 @@
  * 		of new data availability is sent.
  * 		If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
  * 		of new data availability is sent unconditionally.
+ * 		If **0** is specified in *flags*, an adaptive notification
+ * 		of new data availability is sent.
+ *
+ * 		See 'bpf_ringbuf_output()' for the definition of adaptive notification.
  * 	Return
  * 		Nothing. Always succeeds.
  *
@@ -3337,6 +4268,10 @@
  * 		of new data availability is sent.
  * 		If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
  * 		of new data availability is sent unconditionally.
+ * 		If **0** is specified in *flags*, an adaptive notification
+ * 		of new data availability is sent.
+ *
+ * 		See 'bpf_ringbuf_output()' for the definition of adaptive notification.
  * 	Return
  * 		Nothing. Always succeeds.
  *
@@ -3448,8 +4383,8 @@
  *
  *			# sysctl kernel.perf_event_max_stack=<new value>
  *	Return
- *		A non-negative value equal to or less than *size* on success,
- *		or a negative error in case of failure.
+ * 		The non-negative copied *buf* length equal to or less than
+ * 		*size* on success, or a negative error in case of failure.
  *
  * long bpf_load_hdr_opt(struct bpf_sock_ops *skops, void *searchby_res, u32 len, u64 flags)
  *	Description
@@ -3542,7 +4477,7 @@
  *
  *		**-EEXIST** if the option already exists.
  *
- *		**-EFAULT** on failrue to parse the existing header options.
+ *		**-EFAULT** on failure to parse the existing header options.
  *
  *		**-EPERM** if the helper cannot be used under the current
  *		*skops*\ **->op**.
@@ -3742,172 +4677,1041 @@
  * 	Return
  * 		The helper returns **TC_ACT_REDIRECT** on success or
  * 		**TC_ACT_SHOT** on error.
+ *
+ * void *bpf_task_storage_get(struct bpf_map *map, struct task_struct *task, void *value, u64 flags)
+ *	Description
+ *		Get a bpf_local_storage from the *task*.
+ *
+ *		Logically, it could be thought of as getting the value from
+ *		a *map* with *task* as the **key**.  From this
+ *		perspective,  the usage is not much different from
+ *		**bpf_map_lookup_elem**\ (*map*, **&**\ *task*) except this
+ *		helper enforces the key must be a task_struct and the map must also
+ *		be a **BPF_MAP_TYPE_TASK_STORAGE**.
+ *
+ *		Underneath, the value is stored locally at *task* instead of
+ *		the *map*.  The *map* is used as the bpf-local-storage
+ *		"type". The bpf-local-storage "type" (i.e. the *map*) is
+ *		searched against all bpf_local_storage residing at *task*.
+ *
+ *		An optional *flags* (**BPF_LOCAL_STORAGE_GET_F_CREATE**) can be
+ *		used such that a new bpf_local_storage will be
+ *		created if one does not exist.  *value* can be used
+ *		together with **BPF_LOCAL_STORAGE_GET_F_CREATE** to specify
+ *		the initial value of a bpf_local_storage.  If *value* is
+ *		**NULL**, the new bpf_local_storage will be zero initialized.
+ *	Return
+ *		A bpf_local_storage pointer is returned on success.
+ *
+ *		**NULL** if not found or there was an error in adding
+ *		a new bpf_local_storage.
+ *
+ * long bpf_task_storage_delete(struct bpf_map *map, struct task_struct *task)
+ *	Description
+ *		Delete a bpf_local_storage from a *task*.
+ *	Return
+ *		0 on success.
+ *
+ *		**-ENOENT** if the bpf_local_storage cannot be found.
+ *
+ * struct task_struct *bpf_get_current_task_btf(void)
+ *	Description
+ *		Return a BTF pointer to the "current" task.
+ *		This pointer can also be used in helpers that accept an
+ *		*ARG_PTR_TO_BTF_ID* of type *task_struct*.
+ *	Return
+ *		Pointer to the current task.
+ *
+ * long bpf_bprm_opts_set(struct linux_binprm *bprm, u64 flags)
+ *	Description
+ *		Set or clear certain options on *bprm*:
+ *
+ *		**BPF_F_BPRM_SECUREEXEC** Set the secureexec bit
+ *		which sets the **AT_SECURE** auxv for glibc. The bit
+ *		is cleared if the flag is not specified.
+ *	Return
+ *		**-EINVAL** if invalid *flags* are passed, zero otherwise.
+ *
+ * u64 bpf_ktime_get_coarse_ns(void)
+ * 	Description
+ * 		Return a coarse-grained version of the time elapsed since
+ * 		system boot, in nanoseconds. Does not include time the system
+ * 		was suspended.
+ *
+ * 		See: **clock_gettime**\ (**CLOCK_MONOTONIC_COARSE**)
+ * 	Return
+ * 		Current *ktime*.
+ *
+ * long bpf_ima_inode_hash(struct inode *inode, void *dst, u32 size)
+ *	Description
+ *		Returns the stored IMA hash of the *inode* (if it's available).
+ *		If the hash is larger than *size*, then only *size*
+ *		bytes will be copied to *dst*
+ *	Return
+ *		The **hash_algo** is returned on success,
+ *		**-EOPNOTSUP** if IMA is disabled or **-EINVAL** if
+ *		invalid arguments are passed.
+ *
+ * struct socket *bpf_sock_from_file(struct file *file)
+ *	Description
+ *		If the given file represents a socket, returns the associated
+ *		socket.
+ *	Return
+ *		A pointer to a struct socket on success or NULL if the file is
+ *		not a socket.
+ *
+ * long bpf_check_mtu(void *ctx, u32 ifindex, u32 *mtu_len, s32 len_diff, u64 flags)
+ *	Description
+ *		Check packet size against exceeding MTU of net device (based
+ *		on *ifindex*).  This helper will likely be used in combination
+ *		with helpers that adjust/change the packet size.
+ *
+ *		The argument *len_diff* can be used for querying with a planned
+ *		size change. This allows to check MTU prior to changing packet
+ *		ctx. Providing a *len_diff* adjustment that is larger than the
+ *		actual packet size (resulting in negative packet size) will in
+ *		principle not exceed the MTU, which is why it is not considered
+ *		a failure.  Other BPF helpers are needed for performing the
+ *		planned size change; therefore the responsibility for catching
+ *		a negative packet size belongs in those helpers.
+ *
+ *		Specifying *ifindex* zero means the MTU check is performed
+ *		against the current net device.  This is practical if this isn't
+ *		used prior to redirect.
+ *
+ *		On input *mtu_len* must be a valid pointer, else verifier will
+ *		reject BPF program.  If the value *mtu_len* is initialized to
+ *		zero then the ctx packet size is use.  When value *mtu_len* is
+ *		provided as input this specify the L3 length that the MTU check
+ *		is done against. Remember XDP and TC length operate at L2, but
+ *		this value is L3 as this correlate to MTU and IP-header tot_len
+ *		values which are L3 (similar behavior as bpf_fib_lookup).
+ *
+ *		The Linux kernel route table can configure MTUs on a more
+ *		specific per route level, which is not provided by this helper.
+ *		For route level MTU checks use the **bpf_fib_lookup**\ ()
+ *		helper.
+ *
+ *		*ctx* is either **struct xdp_md** for XDP programs or
+ *		**struct sk_buff** for tc cls_act programs.
+ *
+ *		The *flags* argument can be a combination of one or more of the
+ *		following values:
+ *
+ *		**BPF_MTU_CHK_SEGS**
+ *			This flag will only works for *ctx* **struct sk_buff**.
+ *			If packet context contains extra packet segment buffers
+ *			(often knows as GSO skb), then MTU check is harder to
+ *			check at this point, because in transmit path it is
+ *			possible for the skb packet to get re-segmented
+ *			(depending on net device features).  This could still be
+ *			a MTU violation, so this flag enables performing MTU
+ *			check against segments, with a different violation
+ *			return code to tell it apart. Check cannot use len_diff.
+ *
+ *		On return *mtu_len* pointer contains the MTU value of the net
+ *		device.  Remember the net device configured MTU is the L3 size,
+ *		which is returned here and XDP and TC length operate at L2.
+ *		Helper take this into account for you, but remember when using
+ *		MTU value in your BPF-code.
+ *
+ *	Return
+ *		* 0 on success, and populate MTU value in *mtu_len* pointer.
+ *
+ *		* < 0 if any input argument is invalid (*mtu_len* not updated)
+ *
+ *		MTU violations return positive values, but also populate MTU
+ *		value in *mtu_len* pointer, as this can be needed for
+ *		implementing PMTU handing:
+ *
+ *		* **BPF_MTU_CHK_RET_FRAG_NEEDED**
+ *		* **BPF_MTU_CHK_RET_SEGS_TOOBIG**
+ *
+ * long bpf_for_each_map_elem(struct bpf_map *map, void *callback_fn, void *callback_ctx, u64 flags)
+ *	Description
+ *		For each element in **map**, call **callback_fn** function with
+ *		**map**, **callback_ctx** and other map-specific parameters.
+ *		The **callback_fn** should be a static function and
+ *		the **callback_ctx** should be a pointer to the stack.
+ *		The **flags** is used to control certain aspects of the helper.
+ *		Currently, the **flags** must be 0.
+ *
+ *		The following are a list of supported map types and their
+ *		respective expected callback signatures:
+ *
+ *		BPF_MAP_TYPE_HASH, BPF_MAP_TYPE_PERCPU_HASH,
+ *		BPF_MAP_TYPE_LRU_HASH, BPF_MAP_TYPE_LRU_PERCPU_HASH,
+ *		BPF_MAP_TYPE_ARRAY, BPF_MAP_TYPE_PERCPU_ARRAY
+ *
+ *		long (\*callback_fn)(struct bpf_map \*map, const void \*key, void \*value, void \*ctx);
+ *
+ *		For per_cpu maps, the map_value is the value on the cpu where the
+ *		bpf_prog is running.
+ *
+ *		If **callback_fn** return 0, the helper will continue to the next
+ *		element. If return value is 1, the helper will skip the rest of
+ *		elements and return. Other return values are not used now.
+ *
+ *	Return
+ *		The number of traversed map elements for success, **-EINVAL** for
+ *		invalid **flags**.
+ *
+ * long bpf_snprintf(char *str, u32 str_size, const char *fmt, u64 *data, u32 data_len)
+ *	Description
+ *		Outputs a string into the **str** buffer of size **str_size**
+ *		based on a format string stored in a read-only map pointed by
+ *		**fmt**.
+ *
+ *		Each format specifier in **fmt** corresponds to one u64 element
+ *		in the **data** array. For strings and pointers where pointees
+ *		are accessed, only the pointer values are stored in the *data*
+ *		array. The *data_len* is the size of *data* in bytes - must be
+ *		a multiple of 8.
+ *
+ *		Formats **%s** and **%p{i,I}{4,6}** require to read kernel
+ *		memory. Reading kernel memory may fail due to either invalid
+ *		address or valid address but requiring a major memory fault. If
+ *		reading kernel memory fails, the string for **%s** will be an
+ *		empty string, and the ip address for **%p{i,I}{4,6}** will be 0.
+ *		Not returning error to bpf program is consistent with what
+ *		**bpf_trace_printk**\ () does for now.
+ *
+ *	Return
+ *		The strictly positive length of the formatted string, including
+ *		the trailing zero character. If the return value is greater than
+ *		**str_size**, **str** contains a truncated string, guaranteed to
+ *		be zero-terminated except when **str_size** is 0.
+ *
+ *		Or **-EBUSY** if the per-CPU memory copy buffer is busy.
+ *
+ * long bpf_sys_bpf(u32 cmd, void *attr, u32 attr_size)
+ * 	Description
+ * 		Execute bpf syscall with given arguments.
+ * 	Return
+ * 		A syscall result.
+ *
+ * long bpf_btf_find_by_name_kind(char *name, int name_sz, u32 kind, int flags)
+ * 	Description
+ * 		Find BTF type with given name and kind in vmlinux BTF or in module's BTFs.
+ * 	Return
+ * 		Returns btf_id and btf_obj_fd in lower and upper 32 bits.
+ *
+ * long bpf_sys_close(u32 fd)
+ * 	Description
+ * 		Execute close syscall for given FD.
+ * 	Return
+ * 		A syscall result.
+ *
+ * long bpf_timer_init(struct bpf_timer *timer, struct bpf_map *map, u64 flags)
+ *	Description
+ *		Initialize the timer.
+ *		First 4 bits of *flags* specify clockid.
+ *		Only CLOCK_MONOTONIC, CLOCK_REALTIME, CLOCK_BOOTTIME are allowed.
+ *		All other bits of *flags* are reserved.
+ *		The verifier will reject the program if *timer* is not from
+ *		the same *map*.
+ *	Return
+ *		0 on success.
+ *		**-EBUSY** if *timer* is already initialized.
+ *		**-EINVAL** if invalid *flags* are passed.
+ *		**-EPERM** if *timer* is in a map that doesn't have any user references.
+ *		The user space should either hold a file descriptor to a map with timers
+ *		or pin such map in bpffs. When map is unpinned or file descriptor is
+ *		closed all timers in the map will be cancelled and freed.
+ *
+ * long bpf_timer_set_callback(struct bpf_timer *timer, void *callback_fn)
+ *	Description
+ *		Configure the timer to call *callback_fn* static function.
+ *	Return
+ *		0 on success.
+ *		**-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier.
+ *		**-EPERM** if *timer* is in a map that doesn't have any user references.
+ *		The user space should either hold a file descriptor to a map with timers
+ *		or pin such map in bpffs. When map is unpinned or file descriptor is
+ *		closed all timers in the map will be cancelled and freed.
+ *
+ * long bpf_timer_start(struct bpf_timer *timer, u64 nsecs, u64 flags)
+ *	Description
+ *		Set timer expiration N nanoseconds from the current time. The
+ *		configured callback will be invoked in soft irq context on some cpu
+ *		and will not repeat unless another bpf_timer_start() is made.
+ *		In such case the next invocation can migrate to a different cpu.
+ *		Since struct bpf_timer is a field inside map element the map
+ *		owns the timer. The bpf_timer_set_callback() will increment refcnt
+ *		of BPF program to make sure that callback_fn code stays valid.
+ *		When user space reference to a map reaches zero all timers
+ *		in a map are cancelled and corresponding program's refcnts are
+ *		decremented. This is done to make sure that Ctrl-C of a user
+ *		process doesn't leave any timers running. If map is pinned in
+ *		bpffs the callback_fn can re-arm itself indefinitely.
+ *		bpf_map_update/delete_elem() helpers and user space sys_bpf commands
+ *		cancel and free the timer in the given map element.
+ *		The map can contain timers that invoke callback_fn-s from different
+ *		programs. The same callback_fn can serve different timers from
+ *		different maps if key/value layout matches across maps.
+ *		Every bpf_timer_set_callback() can have different callback_fn.
+ *
+ *	Return
+ *		0 on success.
+ *		**-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier
+ *		or invalid *flags* are passed.
+ *
+ * long bpf_timer_cancel(struct bpf_timer *timer)
+ *	Description
+ *		Cancel the timer and wait for callback_fn to finish if it was running.
+ *	Return
+ *		0 if the timer was not active.
+ *		1 if the timer was active.
+ *		**-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier.
+ *		**-EDEADLK** if callback_fn tried to call bpf_timer_cancel() on its
+ *		own timer which would have led to a deadlock otherwise.
+ *
+ * u64 bpf_get_func_ip(void *ctx)
+ * 	Description
+ * 		Get address of the traced function (for tracing and kprobe programs).
+ * 	Return
+ * 		Address of the traced function.
+ * 		0 for kprobes placed within the function (not at the entry).
+ *
+ * u64 bpf_get_attach_cookie(void *ctx)
+ * 	Description
+ * 		Get bpf_cookie value provided (optionally) during the program
+ * 		attachment. It might be different for each individual
+ * 		attachment, even if BPF program itself is the same.
+ * 		Expects BPF program context *ctx* as a first argument.
+ *
+ * 		Supported for the following program types:
+ *			- kprobe/uprobe;
+ *			- tracepoint;
+ *			- perf_event.
+ * 	Return
+ *		Value specified by user at BPF link creation/attachment time
+ *		or 0, if it was not specified.
+ *
+ * long bpf_task_pt_regs(struct task_struct *task)
+ *	Description
+ *		Get the struct pt_regs associated with **task**.
+ *	Return
+ *		A pointer to struct pt_regs.
+ *
+ * long bpf_get_branch_snapshot(void *entries, u32 size, u64 flags)
+ *	Description
+ *		Get branch trace from hardware engines like Intel LBR. The
+ *		hardware engine is stopped shortly after the helper is
+ *		called. Therefore, the user need to filter branch entries
+ *		based on the actual use case. To capture branch trace
+ *		before the trigger point of the BPF program, the helper
+ *		should be called at the beginning of the BPF program.
+ *
+ *		The data is stored as struct perf_branch_entry into output
+ *		buffer *entries*. *size* is the size of *entries* in bytes.
+ *		*flags* is reserved for now and must be zero.
+ *
+ *	Return
+ *		On success, number of bytes written to *buf*. On error, a
+ *		negative value.
+ *
+ *		**-EINVAL** if *flags* is not zero.
+ *
+ *		**-ENOENT** if architecture does not support branch records.
+ *
+ * long bpf_trace_vprintk(const char *fmt, u32 fmt_size, const void *data, u32 data_len)
+ *	Description
+ *		Behaves like **bpf_trace_printk**\ () helper, but takes an array of u64
+ *		to format and can handle more format args as a result.
+ *
+ *		Arguments are to be used as in **bpf_seq_printf**\ () helper.
+ *	Return
+ *		The number of bytes written to the buffer, or a negative error
+ *		in case of failure.
+ *
+ * struct unix_sock *bpf_skc_to_unix_sock(void *sk)
+ * 	Description
+ *		Dynamically cast a *sk* pointer to a *unix_sock* pointer.
+ *	Return
+ *		*sk* if casting is valid, or **NULL** otherwise.
+ *
+ * long bpf_kallsyms_lookup_name(const char *name, int name_sz, int flags, u64 *res)
+ *	Description
+ *		Get the address of a kernel symbol, returned in *res*. *res* is
+ *		set to 0 if the symbol is not found.
+ *	Return
+ *		On success, zero. On error, a negative value.
+ *
+ *		**-EINVAL** if *flags* is not zero.
+ *
+ *		**-EINVAL** if string *name* is not the same size as *name_sz*.
+ *
+ *		**-ENOENT** if symbol is not found.
+ *
+ *		**-EPERM** if caller does not have permission to obtain kernel address.
+ *
+ * long bpf_find_vma(struct task_struct *task, u64 addr, void *callback_fn, void *callback_ctx, u64 flags)
+ *	Description
+ *		Find vma of *task* that contains *addr*, call *callback_fn*
+ *		function with *task*, *vma*, and *callback_ctx*.
+ *		The *callback_fn* should be a static function and
+ *		the *callback_ctx* should be a pointer to the stack.
+ *		The *flags* is used to control certain aspects of the helper.
+ *		Currently, the *flags* must be 0.
+ *
+ *		The expected callback signature is
+ *
+ *		long (\*callback_fn)(struct task_struct \*task, struct vm_area_struct \*vma, void \*callback_ctx);
+ *
+ *	Return
+ *		0 on success.
+ *		**-ENOENT** if *task->mm* is NULL, or no vma contains *addr*.
+ *		**-EBUSY** if failed to try lock mmap_lock.
+ *		**-EINVAL** for invalid **flags**.
+ *
+ * long bpf_loop(u32 nr_loops, void *callback_fn, void *callback_ctx, u64 flags)
+ *	Description
+ *		For **nr_loops**, call **callback_fn** function
+ *		with **callback_ctx** as the context parameter.
+ *		The **callback_fn** should be a static function and
+ *		the **callback_ctx** should be a pointer to the stack.
+ *		The **flags** is used to control certain aspects of the helper.
+ *		Currently, the **flags** must be 0. Currently, nr_loops is
+ *		limited to 1 << 23 (~8 million) loops.
+ *
+ *		long (\*callback_fn)(u32 index, void \*ctx);
+ *
+ *		where **index** is the current index in the loop. The index
+ *		is zero-indexed.
+ *
+ *		If **callback_fn** returns 0, the helper will continue to the next
+ *		loop. If return value is 1, the helper will skip the rest of
+ *		the loops and return. Other return values are not used now,
+ *		and will be rejected by the verifier.
+ *
+ *	Return
+ *		The number of loops performed, **-EINVAL** for invalid **flags**,
+ *		**-E2BIG** if **nr_loops** exceeds the maximum number of loops.
+ *
+ * long bpf_strncmp(const char *s1, u32 s1_sz, const char *s2)
+ *	Description
+ *		Do strncmp() between **s1** and **s2**. **s1** doesn't need
+ *		to be null-terminated and **s1_sz** is the maximum storage
+ *		size of **s1**. **s2** must be a read-only string.
+ *	Return
+ *		An integer less than, equal to, or greater than zero
+ *		if the first **s1_sz** bytes of **s1** is found to be
+ *		less than, to match, or be greater than **s2**.
+ *
+ * long bpf_get_func_arg(void *ctx, u32 n, u64 *value)
+ *	Description
+ *		Get **n**-th argument register (zero based) of the traced function (for tracing programs)
+ *		returned in **value**.
+ *
+ *	Return
+ *		0 on success.
+ *		**-EINVAL** if n >= argument register count of traced function.
+ *
+ * long bpf_get_func_ret(void *ctx, u64 *value)
+ *	Description
+ *		Get return value of the traced function (for tracing programs)
+ *		in **value**.
+ *
+ *	Return
+ *		0 on success.
+ *		**-EOPNOTSUPP** for tracing programs other than BPF_TRACE_FEXIT or BPF_MODIFY_RETURN.
+ *
+ * long bpf_get_func_arg_cnt(void *ctx)
+ *	Description
+ *		Get number of registers of the traced function (for tracing programs) where
+ *		function arguments are stored in these registers.
+ *
+ *	Return
+ *		The number of argument registers of the traced function.
+ *
+ * int bpf_get_retval(void)
+ *	Description
+ *		Get the BPF program's return value that will be returned to the upper layers.
+ *
+ *		This helper is currently supported by cgroup programs and only by the hooks
+ *		where BPF program's return value is returned to the userspace via errno.
+ *	Return
+ *		The BPF program's return value.
+ *
+ * int bpf_set_retval(int retval)
+ *	Description
+ *		Set the BPF program's return value that will be returned to the upper layers.
+ *
+ *		This helper is currently supported by cgroup programs and only by the hooks
+ *		where BPF program's return value is returned to the userspace via errno.
+ *
+ *		Note that there is the following corner case where the program exports an error
+ *		via bpf_set_retval but signals success via 'return 1':
+ *
+ *			bpf_set_retval(-EPERM);
+ *			return 1;
+ *
+ *		In this case, the BPF program's return value will use helper's -EPERM. This
+ *		still holds true for cgroup/bind{4,6} which supports extra 'return 3' success case.
+ *
+ *	Return
+ *		0 on success, or a negative error in case of failure.
+ *
+ * u64 bpf_xdp_get_buff_len(struct xdp_buff *xdp_md)
+ *	Description
+ *		Get the total size of a given xdp buff (linear and paged area)
+ *	Return
+ *		The total size of a given xdp buffer.
+ *
+ * long bpf_xdp_load_bytes(struct xdp_buff *xdp_md, u32 offset, void *buf, u32 len)
+ *	Description
+ *		This helper is provided as an easy way to load data from a
+ *		xdp buffer. It can be used to load *len* bytes from *offset* from
+ *		the frame associated to *xdp_md*, into the buffer pointed by
+ *		*buf*.
+ *	Return
+ *		0 on success, or a negative error in case of failure.
+ *
+ * long bpf_xdp_store_bytes(struct xdp_buff *xdp_md, u32 offset, void *buf, u32 len)
+ *	Description
+ *		Store *len* bytes from buffer *buf* into the frame
+ *		associated to *xdp_md*, at *offset*.
+ *	Return
+ *		0 on success, or a negative error in case of failure.
+ *
+ * long bpf_copy_from_user_task(void *dst, u32 size, const void *user_ptr, struct task_struct *tsk, u64 flags)
+ *	Description
+ *		Read *size* bytes from user space address *user_ptr* in *tsk*'s
+ *		address space, and stores the data in *dst*. *flags* is not
+ *		used yet and is provided for future extensibility. This helper
+ *		can only be used by sleepable programs.
+ *	Return
+ *		0 on success, or a negative error in case of failure. On error
+ *		*dst* buffer is zeroed out.
+ *
+ * long bpf_skb_set_tstamp(struct sk_buff *skb, u64 tstamp, u32 tstamp_type)
+ *	Description
+ *		Change the __sk_buff->tstamp_type to *tstamp_type*
+ *		and set *tstamp* to the __sk_buff->tstamp together.
+ *
+ *		If there is no need to change the __sk_buff->tstamp_type,
+ *		the tstamp value can be directly written to __sk_buff->tstamp
+ *		instead.
+ *
+ *		BPF_SKB_TSTAMP_DELIVERY_MONO is the only tstamp that
+ *		will be kept during bpf_redirect_*().  A non zero
+ *		*tstamp* must be used with the BPF_SKB_TSTAMP_DELIVERY_MONO
+ *		*tstamp_type*.
+ *
+ *		A BPF_SKB_TSTAMP_UNSPEC *tstamp_type* can only be used
+ *		with a zero *tstamp*.
+ *
+ *		Only IPv4 and IPv6 skb->protocol are supported.
+ *
+ *		This function is most useful when it needs to set a
+ *		mono delivery time to __sk_buff->tstamp and then
+ *		bpf_redirect_*() to the egress of an iface.  For example,
+ *		changing the (rcv) timestamp in __sk_buff->tstamp at
+ *		ingress to a mono delivery time and then bpf_redirect_*()
+ *		to sch_fq@phy-dev.
+ *	Return
+ *		0 on success.
+ *		**-EINVAL** for invalid input
+ *		**-EOPNOTSUPP** for unsupported protocol
+ *
+ * long bpf_ima_file_hash(struct file *file, void *dst, u32 size)
+ *	Description
+ *		Returns a calculated IMA hash of the *file*.
+ *		If the hash is larger than *size*, then only *size*
+ *		bytes will be copied to *dst*
+ *	Return
+ *		The **hash_algo** is returned on success,
+ *		**-EOPNOTSUP** if the hash calculation failed or **-EINVAL** if
+ *		invalid arguments are passed.
+ *
+ * void *bpf_kptr_xchg(void *map_value, void *ptr)
+ *	Description
+ *		Exchange kptr at pointer *map_value* with *ptr*, and return the
+ *		old value. *ptr* can be NULL, otherwise it must be a referenced
+ *		pointer which will be released when this helper is called.
+ *	Return
+ *		The old value of kptr (which can be NULL). The returned pointer
+ *		if not NULL, is a reference which must be released using its
+ *		corresponding release function, or moved into a BPF map before
+ *		program exit.
+ *
+ * void *bpf_map_lookup_percpu_elem(struct bpf_map *map, const void *key, u32 cpu)
+ * 	Description
+ * 		Perform a lookup in *percpu map* for an entry associated to
+ * 		*key* on *cpu*.
+ * 	Return
+ * 		Map value associated to *key* on *cpu*, or **NULL** if no entry
+ * 		was found or *cpu* is invalid.
+ *
+ * struct mptcp_sock *bpf_skc_to_mptcp_sock(void *sk)
+ *	Description
+ *		Dynamically cast a *sk* pointer to a *mptcp_sock* pointer.
+ *	Return
+ *		*sk* if casting is valid, or **NULL** otherwise.
+ *
+ * long bpf_dynptr_from_mem(void *data, u32 size, u64 flags, struct bpf_dynptr *ptr)
+ *	Description
+ *		Get a dynptr to local memory *data*.
+ *
+ *		*data* must be a ptr to a map value.
+ *		The maximum *size* supported is DYNPTR_MAX_SIZE.
+ *		*flags* is currently unused.
+ *	Return
+ *		0 on success, -E2BIG if the size exceeds DYNPTR_MAX_SIZE,
+ *		-EINVAL if flags is not 0.
+ *
+ * long bpf_ringbuf_reserve_dynptr(void *ringbuf, u32 size, u64 flags, struct bpf_dynptr *ptr)
+ *	Description
+ *		Reserve *size* bytes of payload in a ring buffer *ringbuf*
+ *		through the dynptr interface. *flags* must be 0.
+ *
+ *		Please note that a corresponding bpf_ringbuf_submit_dynptr or
+ *		bpf_ringbuf_discard_dynptr must be called on *ptr*, even if the
+ *		reservation fails. This is enforced by the verifier.
+ *	Return
+ *		0 on success, or a negative error in case of failure.
+ *
+ * void bpf_ringbuf_submit_dynptr(struct bpf_dynptr *ptr, u64 flags)
+ *	Description
+ *		Submit reserved ring buffer sample, pointed to by *data*,
+ *		through the dynptr interface. This is a no-op if the dynptr is
+ *		invalid/null.
+ *
+ *		For more information on *flags*, please see
+ *		'bpf_ringbuf_submit'.
+ *	Return
+ *		Nothing. Always succeeds.
+ *
+ * void bpf_ringbuf_discard_dynptr(struct bpf_dynptr *ptr, u64 flags)
+ *	Description
+ *		Discard reserved ring buffer sample through the dynptr
+ *		interface. This is a no-op if the dynptr is invalid/null.
+ *
+ *		For more information on *flags*, please see
+ *		'bpf_ringbuf_discard'.
+ *	Return
+ *		Nothing. Always succeeds.
+ *
+ * long bpf_dynptr_read(void *dst, u32 len, const struct bpf_dynptr *src, u32 offset, u64 flags)
+ *	Description
+ *		Read *len* bytes from *src* into *dst*, starting from *offset*
+ *		into *src*.
+ *		*flags* is currently unused.
+ *	Return
+ *		0 on success, -E2BIG if *offset* + *len* exceeds the length
+ *		of *src*'s data, -EINVAL if *src* is an invalid dynptr or if
+ *		*flags* is not 0.
+ *
+ * long bpf_dynptr_write(const struct bpf_dynptr *dst, u32 offset, void *src, u32 len, u64 flags)
+ *	Description
+ *		Write *len* bytes from *src* into *dst*, starting from *offset*
+ *		into *dst*.
+ *		*flags* is currently unused.
+ *	Return
+ *		0 on success, -E2BIG if *offset* + *len* exceeds the length
+ *		of *dst*'s data, -EINVAL if *dst* is an invalid dynptr or if *dst*
+ *		is a read-only dynptr or if *flags* is not 0.
+ *
+ * void *bpf_dynptr_data(const struct bpf_dynptr *ptr, u32 offset, u32 len)
+ *	Description
+ *		Get a pointer to the underlying dynptr data.
+ *
+ *		*len* must be a statically known value. The returned data slice
+ *		is invalidated whenever the dynptr is invalidated.
+ *	Return
+ *		Pointer to the underlying dynptr data, NULL if the dynptr is
+ *		read-only, if the dynptr is invalid, or if the offset and length
+ *		is out of bounds.
+ *
+ * s64 bpf_tcp_raw_gen_syncookie_ipv4(struct iphdr *iph, struct tcphdr *th, u32 th_len)
+ *	Description
+ *		Try to issue a SYN cookie for the packet with corresponding
+ *		IPv4/TCP headers, *iph* and *th*, without depending on a
+ *		listening socket.
+ *
+ *		*iph* points to the IPv4 header.
+ *
+ *		*th* points to the start of the TCP header, while *th_len*
+ *		contains the length of the TCP header (at least
+ *		**sizeof**\ (**struct tcphdr**)).
+ *	Return
+ *		On success, lower 32 bits hold the generated SYN cookie in
+ *		followed by 16 bits which hold the MSS value for that cookie,
+ *		and the top 16 bits are unused.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EINVAL** if *th_len* is invalid.
+ *
+ * s64 bpf_tcp_raw_gen_syncookie_ipv6(struct ipv6hdr *iph, struct tcphdr *th, u32 th_len)
+ *	Description
+ *		Try to issue a SYN cookie for the packet with corresponding
+ *		IPv6/TCP headers, *iph* and *th*, without depending on a
+ *		listening socket.
+ *
+ *		*iph* points to the IPv6 header.
+ *
+ *		*th* points to the start of the TCP header, while *th_len*
+ *		contains the length of the TCP header (at least
+ *		**sizeof**\ (**struct tcphdr**)).
+ *	Return
+ *		On success, lower 32 bits hold the generated SYN cookie in
+ *		followed by 16 bits which hold the MSS value for that cookie,
+ *		and the top 16 bits are unused.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EINVAL** if *th_len* is invalid.
+ *
+ *		**-EPROTONOSUPPORT** if CONFIG_IPV6 is not builtin.
+ *
+ * long bpf_tcp_raw_check_syncookie_ipv4(struct iphdr *iph, struct tcphdr *th)
+ *	Description
+ *		Check whether *iph* and *th* contain a valid SYN cookie ACK
+ *		without depending on a listening socket.
+ *
+ *		*iph* points to the IPv4 header.
+ *
+ *		*th* points to the TCP header.
+ *	Return
+ *		0 if *iph* and *th* are a valid SYN cookie ACK.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EACCES** if the SYN cookie is not valid.
+ *
+ * long bpf_tcp_raw_check_syncookie_ipv6(struct ipv6hdr *iph, struct tcphdr *th)
+ *	Description
+ *		Check whether *iph* and *th* contain a valid SYN cookie ACK
+ *		without depending on a listening socket.
+ *
+ *		*iph* points to the IPv6 header.
+ *
+ *		*th* points to the TCP header.
+ *	Return
+ *		0 if *iph* and *th* are a valid SYN cookie ACK.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EACCES** if the SYN cookie is not valid.
+ *
+ *		**-EPROTONOSUPPORT** if CONFIG_IPV6 is not builtin.
+ *
+ * u64 bpf_ktime_get_tai_ns(void)
+ *	Description
+ *		A nonsettable system-wide clock derived from wall-clock time but
+ *		ignoring leap seconds.  This clock does not experience
+ *		discontinuities and backwards jumps caused by NTP inserting leap
+ *		seconds as CLOCK_REALTIME does.
+ *
+ *		See: **clock_gettime**\ (**CLOCK_TAI**)
+ *	Return
+ *		Current *ktime*.
+ *
+ * long bpf_user_ringbuf_drain(struct bpf_map *map, void *callback_fn, void *ctx, u64 flags)
+ *	Description
+ *		Drain samples from the specified user ring buffer, and invoke
+ *		the provided callback for each such sample:
+ *
+ *		long (\*callback_fn)(const struct bpf_dynptr \*dynptr, void \*ctx);
+ *
+ *		If **callback_fn** returns 0, the helper will continue to try
+ *		and drain the next sample, up to a maximum of
+ *		BPF_MAX_USER_RINGBUF_SAMPLES samples. If the return value is 1,
+ *		the helper will skip the rest of the samples and return. Other
+ *		return values are not used now, and will be rejected by the
+ *		verifier.
+ *	Return
+ *		The number of drained samples if no error was encountered while
+ *		draining samples, or 0 if no samples were present in the ring
+ *		buffer. If a user-space producer was epoll-waiting on this map,
+ *		and at least one sample was drained, they will receive an event
+ *		notification notifying them of available space in the ring
+ *		buffer. If the BPF_RB_NO_WAKEUP flag is passed to this
+ *		function, no wakeup notification will be sent. If the
+ *		BPF_RB_FORCE_WAKEUP flag is passed, a wakeup notification will
+ *		be sent even if no sample was drained.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EBUSY** if the ring buffer is contended, and another calling
+ *		context was concurrently draining the ring buffer.
+ *
+ *		**-EINVAL** if user-space is not properly tracking the ring
+ *		buffer due to the producer position not being aligned to 8
+ *		bytes, a sample not being aligned to 8 bytes, or the producer
+ *		position not matching the advertised length of a sample.
+ *
+ *		**-E2BIG** if user-space has tried to publish a sample which is
+ *		larger than the size of the ring buffer, or which cannot fit
+ *		within a struct bpf_dynptr.
+ *
+ * void *bpf_cgrp_storage_get(struct bpf_map *map, struct cgroup *cgroup, void *value, u64 flags)
+ *	Description
+ *		Get a bpf_local_storage from the *cgroup*.
+ *
+ *		Logically, it could be thought of as getting the value from
+ *		a *map* with *cgroup* as the **key**.  From this
+ *		perspective,  the usage is not much different from
+ *		**bpf_map_lookup_elem**\ (*map*, **&**\ *cgroup*) except this
+ *		helper enforces the key must be a cgroup struct and the map must also
+ *		be a **BPF_MAP_TYPE_CGRP_STORAGE**.
+ *
+ *		In reality, the local-storage value is embedded directly inside of the
+ *		*cgroup* object itself, rather than being located in the
+ *		**BPF_MAP_TYPE_CGRP_STORAGE** map. When the local-storage value is
+ *		queried for some *map* on a *cgroup* object, the kernel will perform an
+ *		O(n) iteration over all of the live local-storage values for that
+ *		*cgroup* object until the local-storage value for the *map* is found.
+ *
+ *		An optional *flags* (**BPF_LOCAL_STORAGE_GET_F_CREATE**) can be
+ *		used such that a new bpf_local_storage will be
+ *		created if one does not exist.  *value* can be used
+ *		together with **BPF_LOCAL_STORAGE_GET_F_CREATE** to specify
+ *		the initial value of a bpf_local_storage.  If *value* is
+ *		**NULL**, the new bpf_local_storage will be zero initialized.
+ *	Return
+ *		A bpf_local_storage pointer is returned on success.
+ *
+ *		**NULL** if not found or there was an error in adding
+ *		a new bpf_local_storage.
+ *
+ * long bpf_cgrp_storage_delete(struct bpf_map *map, struct cgroup *cgroup)
+ *	Description
+ *		Delete a bpf_local_storage from a *cgroup*.
+ *	Return
+ *		0 on success.
+ *
+ *		**-ENOENT** if the bpf_local_storage cannot be found.
  */
-#define __BPF_FUNC_MAPPER(FN)		\
-	FN(unspec),			\
-	FN(map_lookup_elem),		\
-	FN(map_update_elem),		\
-	FN(map_delete_elem),		\
-	FN(probe_read),			\
-	FN(ktime_get_ns),		\
-	FN(trace_printk),		\
-	FN(get_prandom_u32),		\
-	FN(get_smp_processor_id),	\
-	FN(skb_store_bytes),		\
-	FN(l3_csum_replace),		\
-	FN(l4_csum_replace),		\
-	FN(tail_call),			\
-	FN(clone_redirect),		\
-	FN(get_current_pid_tgid),	\
-	FN(get_current_uid_gid),	\
-	FN(get_current_comm),		\
-	FN(get_cgroup_classid),		\
-	FN(skb_vlan_push),		\
-	FN(skb_vlan_pop),		\
-	FN(skb_get_tunnel_key),		\
-	FN(skb_set_tunnel_key),		\
-	FN(perf_event_read),		\
-	FN(redirect),			\
-	FN(get_route_realm),		\
-	FN(perf_event_output),		\
-	FN(skb_load_bytes),		\
-	FN(get_stackid),		\
-	FN(csum_diff),			\
-	FN(skb_get_tunnel_opt),		\
-	FN(skb_set_tunnel_opt),		\
-	FN(skb_change_proto),		\
-	FN(skb_change_type),		\
-	FN(skb_under_cgroup),		\
-	FN(get_hash_recalc),		\
-	FN(get_current_task),		\
-	FN(probe_write_user),		\
-	FN(current_task_under_cgroup),	\
-	FN(skb_change_tail),		\
-	FN(skb_pull_data),		\
-	FN(csum_update),		\
-	FN(set_hash_invalid),		\
-	FN(get_numa_node_id),		\
-	FN(skb_change_head),		\
-	FN(xdp_adjust_head),		\
-	FN(probe_read_str),		\
-	FN(get_socket_cookie),		\
-	FN(get_socket_uid),		\
-	FN(set_hash),			\
-	FN(setsockopt),			\
-	FN(skb_adjust_room),		\
-	FN(redirect_map),		\
-	FN(sk_redirect_map),		\
-	FN(sock_map_update),		\
-	FN(xdp_adjust_meta),		\
-	FN(perf_event_read_value),	\
-	FN(perf_prog_read_value),	\
-	FN(getsockopt),			\
-	FN(override_return),		\
-	FN(sock_ops_cb_flags_set),	\
-	FN(msg_redirect_map),		\
-	FN(msg_apply_bytes),		\
-	FN(msg_cork_bytes),		\
-	FN(msg_pull_data),		\
-	FN(bind),			\
-	FN(xdp_adjust_tail),		\
-	FN(skb_get_xfrm_state),		\
-	FN(get_stack),			\
-	FN(skb_load_bytes_relative),	\
-	FN(fib_lookup),			\
-	FN(sock_hash_update),		\
-	FN(msg_redirect_hash),		\
-	FN(sk_redirect_hash),		\
-	FN(lwt_push_encap),		\
-	FN(lwt_seg6_store_bytes),	\
-	FN(lwt_seg6_adjust_srh),	\
-	FN(lwt_seg6_action),		\
-	FN(rc_repeat),			\
-	FN(rc_keydown),			\
-	FN(skb_cgroup_id),		\
-	FN(get_current_cgroup_id),	\
-	FN(get_local_storage),		\
-	FN(sk_select_reuseport),	\
-	FN(skb_ancestor_cgroup_id),	\
-	FN(sk_lookup_tcp),		\
-	FN(sk_lookup_udp),		\
-	FN(sk_release),			\
-	FN(map_push_elem),		\
-	FN(map_pop_elem),		\
-	FN(map_peek_elem),		\
-	FN(msg_push_data),		\
-	FN(msg_pop_data),		\
-	FN(rc_pointer_rel),		\
-	FN(spin_lock),			\
-	FN(spin_unlock),		\
-	FN(sk_fullsock),		\
-	FN(tcp_sock),			\
-	FN(skb_ecn_set_ce),		\
-	FN(get_listener_sock),		\
-	FN(skc_lookup_tcp),		\
-	FN(tcp_check_syncookie),	\
-	FN(sysctl_get_name),		\
-	FN(sysctl_get_current_value),	\
-	FN(sysctl_get_new_value),	\
-	FN(sysctl_set_new_value),	\
-	FN(strtol),			\
-	FN(strtoul),			\
-	FN(sk_storage_get),		\
-	FN(sk_storage_delete),		\
-	FN(send_signal),		\
-	FN(tcp_gen_syncookie),		\
-	FN(skb_output),			\
-	FN(probe_read_user),		\
-	FN(probe_read_kernel),		\
-	FN(probe_read_user_str),	\
-	FN(probe_read_kernel_str),	\
-	FN(tcp_send_ack),		\
-	FN(send_signal_thread),		\
-	FN(jiffies64),			\
-	FN(read_branch_records),	\
-	FN(get_ns_current_pid_tgid),	\
-	FN(xdp_output),			\
-	FN(get_netns_cookie),		\
-	FN(get_current_ancestor_cgroup_id),	\
-	FN(sk_assign),			\
-	FN(ktime_get_boot_ns),		\
-	FN(seq_printf),			\
-	FN(seq_write),			\
-	FN(sk_cgroup_id),		\
-	FN(sk_ancestor_cgroup_id),	\
-	FN(ringbuf_output),		\
-	FN(ringbuf_reserve),		\
-	FN(ringbuf_submit),		\
-	FN(ringbuf_discard),		\
-	FN(ringbuf_query),		\
-	FN(csum_level),			\
-	FN(skc_to_tcp6_sock),		\
-	FN(skc_to_tcp_sock),		\
-	FN(skc_to_tcp_timewait_sock),	\
-	FN(skc_to_tcp_request_sock),	\
-	FN(skc_to_udp6_sock),		\
-	FN(get_task_stack),		\
-	FN(load_hdr_opt),		\
-	FN(store_hdr_opt),		\
-	FN(reserve_hdr_opt),		\
-	FN(inode_storage_get),		\
-	FN(inode_storage_delete),	\
-	FN(d_path),			\
-	FN(copy_from_user),		\
-	FN(snprintf_btf),		\
-	FN(seq_printf_btf),		\
-	FN(skb_cgroup_classid),		\
-	FN(redirect_neigh),		\
-	FN(bpf_per_cpu_ptr),            \
-	FN(bpf_this_cpu_ptr),		\
-	FN(redirect_peer),		\
+#define ___BPF_FUNC_MAPPER(FN, ctx...)			\
+	FN(unspec, 0, ##ctx)				\
+	FN(map_lookup_elem, 1, ##ctx)			\
+	FN(map_update_elem, 2, ##ctx)			\
+	FN(map_delete_elem, 3, ##ctx)			\
+	FN(probe_read, 4, ##ctx)			\
+	FN(ktime_get_ns, 5, ##ctx)			\
+	FN(trace_printk, 6, ##ctx)			\
+	FN(get_prandom_u32, 7, ##ctx)			\
+	FN(get_smp_processor_id, 8, ##ctx)		\
+	FN(skb_store_bytes, 9, ##ctx)			\
+	FN(l3_csum_replace, 10, ##ctx)			\
+	FN(l4_csum_replace, 11, ##ctx)			\
+	FN(tail_call, 12, ##ctx)			\
+	FN(clone_redirect, 13, ##ctx)			\
+	FN(get_current_pid_tgid, 14, ##ctx)		\
+	FN(get_current_uid_gid, 15, ##ctx)		\
+	FN(get_current_comm, 16, ##ctx)			\
+	FN(get_cgroup_classid, 17, ##ctx)		\
+	FN(skb_vlan_push, 18, ##ctx)			\
+	FN(skb_vlan_pop, 19, ##ctx)			\
+	FN(skb_get_tunnel_key, 20, ##ctx)		\
+	FN(skb_set_tunnel_key, 21, ##ctx)		\
+	FN(perf_event_read, 22, ##ctx)			\
+	FN(redirect, 23, ##ctx)				\
+	FN(get_route_realm, 24, ##ctx)			\
+	FN(perf_event_output, 25, ##ctx)		\
+	FN(skb_load_bytes, 26, ##ctx)			\
+	FN(get_stackid, 27, ##ctx)			\
+	FN(csum_diff, 28, ##ctx)			\
+	FN(skb_get_tunnel_opt, 29, ##ctx)		\
+	FN(skb_set_tunnel_opt, 30, ##ctx)		\
+	FN(skb_change_proto, 31, ##ctx)			\
+	FN(skb_change_type, 32, ##ctx)			\
+	FN(skb_under_cgroup, 33, ##ctx)			\
+	FN(get_hash_recalc, 34, ##ctx)			\
+	FN(get_current_task, 35, ##ctx)			\
+	FN(probe_write_user, 36, ##ctx)			\
+	FN(current_task_under_cgroup, 37, ##ctx)	\
+	FN(skb_change_tail, 38, ##ctx)			\
+	FN(skb_pull_data, 39, ##ctx)			\
+	FN(csum_update, 40, ##ctx)			\
+	FN(set_hash_invalid, 41, ##ctx)			\
+	FN(get_numa_node_id, 42, ##ctx)			\
+	FN(skb_change_head, 43, ##ctx)			\
+	FN(xdp_adjust_head, 44, ##ctx)			\
+	FN(probe_read_str, 45, ##ctx)			\
+	FN(get_socket_cookie, 46, ##ctx)		\
+	FN(get_socket_uid, 47, ##ctx)			\
+	FN(set_hash, 48, ##ctx)				\
+	FN(setsockopt, 49, ##ctx)			\
+	FN(skb_adjust_room, 50, ##ctx)			\
+	FN(redirect_map, 51, ##ctx)			\
+	FN(sk_redirect_map, 52, ##ctx)			\
+	FN(sock_map_update, 53, ##ctx)			\
+	FN(xdp_adjust_meta, 54, ##ctx)			\
+	FN(perf_event_read_value, 55, ##ctx)		\
+	FN(perf_prog_read_value, 56, ##ctx)		\
+	FN(getsockopt, 57, ##ctx)			\
+	FN(override_return, 58, ##ctx)			\
+	FN(sock_ops_cb_flags_set, 59, ##ctx)		\
+	FN(msg_redirect_map, 60, ##ctx)			\
+	FN(msg_apply_bytes, 61, ##ctx)			\
+	FN(msg_cork_bytes, 62, ##ctx)			\
+	FN(msg_pull_data, 63, ##ctx)			\
+	FN(bind, 64, ##ctx)				\
+	FN(xdp_adjust_tail, 65, ##ctx)			\
+	FN(skb_get_xfrm_state, 66, ##ctx)		\
+	FN(get_stack, 67, ##ctx)			\
+	FN(skb_load_bytes_relative, 68, ##ctx)		\
+	FN(fib_lookup, 69, ##ctx)			\
+	FN(sock_hash_update, 70, ##ctx)			\
+	FN(msg_redirect_hash, 71, ##ctx)		\
+	FN(sk_redirect_hash, 72, ##ctx)			\
+	FN(lwt_push_encap, 73, ##ctx)			\
+	FN(lwt_seg6_store_bytes, 74, ##ctx)		\
+	FN(lwt_seg6_adjust_srh, 75, ##ctx)		\
+	FN(lwt_seg6_action, 76, ##ctx)			\
+	FN(rc_repeat, 77, ##ctx)			\
+	FN(rc_keydown, 78, ##ctx)			\
+	FN(skb_cgroup_id, 79, ##ctx)			\
+	FN(get_current_cgroup_id, 80, ##ctx)		\
+	FN(get_local_storage, 81, ##ctx)		\
+	FN(sk_select_reuseport, 82, ##ctx)		\
+	FN(skb_ancestor_cgroup_id, 83, ##ctx)		\
+	FN(sk_lookup_tcp, 84, ##ctx)			\
+	FN(sk_lookup_udp, 85, ##ctx)			\
+	FN(sk_release, 86, ##ctx)			\
+	FN(map_push_elem, 87, ##ctx)			\
+	FN(map_pop_elem, 88, ##ctx)			\
+	FN(map_peek_elem, 89, ##ctx)			\
+	FN(msg_push_data, 90, ##ctx)			\
+	FN(msg_pop_data, 91, ##ctx)			\
+	FN(rc_pointer_rel, 92, ##ctx)			\
+	FN(spin_lock, 93, ##ctx)			\
+	FN(spin_unlock, 94, ##ctx)			\
+	FN(sk_fullsock, 95, ##ctx)			\
+	FN(tcp_sock, 96, ##ctx)				\
+	FN(skb_ecn_set_ce, 97, ##ctx)			\
+	FN(get_listener_sock, 98, ##ctx)		\
+	FN(skc_lookup_tcp, 99, ##ctx)			\
+	FN(tcp_check_syncookie, 100, ##ctx)		\
+	FN(sysctl_get_name, 101, ##ctx)			\
+	FN(sysctl_get_current_value, 102, ##ctx)	\
+	FN(sysctl_get_new_value, 103, ##ctx)		\
+	FN(sysctl_set_new_value, 104, ##ctx)		\
+	FN(strtol, 105, ##ctx)				\
+	FN(strtoul, 106, ##ctx)				\
+	FN(sk_storage_get, 107, ##ctx)			\
+	FN(sk_storage_delete, 108, ##ctx)		\
+	FN(send_signal, 109, ##ctx)			\
+	FN(tcp_gen_syncookie, 110, ##ctx)		\
+	FN(skb_output, 111, ##ctx)			\
+	FN(probe_read_user, 112, ##ctx)			\
+	FN(probe_read_kernel, 113, ##ctx)		\
+	FN(probe_read_user_str, 114, ##ctx)		\
+	FN(probe_read_kernel_str, 115, ##ctx)		\
+	FN(tcp_send_ack, 116, ##ctx)			\
+	FN(send_signal_thread, 117, ##ctx)		\
+	FN(jiffies64, 118, ##ctx)			\
+	FN(read_branch_records, 119, ##ctx)		\
+	FN(get_ns_current_pid_tgid, 120, ##ctx)		\
+	FN(xdp_output, 121, ##ctx)			\
+	FN(get_netns_cookie, 122, ##ctx)		\
+	FN(get_current_ancestor_cgroup_id, 123, ##ctx)	\
+	FN(sk_assign, 124, ##ctx)			\
+	FN(ktime_get_boot_ns, 125, ##ctx)		\
+	FN(seq_printf, 126, ##ctx)			\
+	FN(seq_write, 127, ##ctx)			\
+	FN(sk_cgroup_id, 128, ##ctx)			\
+	FN(sk_ancestor_cgroup_id, 129, ##ctx)		\
+	FN(ringbuf_output, 130, ##ctx)			\
+	FN(ringbuf_reserve, 131, ##ctx)			\
+	FN(ringbuf_submit, 132, ##ctx)			\
+	FN(ringbuf_discard, 133, ##ctx)			\
+	FN(ringbuf_query, 134, ##ctx)			\
+	FN(csum_level, 135, ##ctx)			\
+	FN(skc_to_tcp6_sock, 136, ##ctx)		\
+	FN(skc_to_tcp_sock, 137, ##ctx)			\
+	FN(skc_to_tcp_timewait_sock, 138, ##ctx)	\
+	FN(skc_to_tcp_request_sock, 139, ##ctx)		\
+	FN(skc_to_udp6_sock, 140, ##ctx)		\
+	FN(get_task_stack, 141, ##ctx)			\
+	FN(load_hdr_opt, 142, ##ctx)			\
+	FN(store_hdr_opt, 143, ##ctx)			\
+	FN(reserve_hdr_opt, 144, ##ctx)			\
+	FN(inode_storage_get, 145, ##ctx)		\
+	FN(inode_storage_delete, 146, ##ctx)		\
+	FN(d_path, 147, ##ctx)				\
+	FN(copy_from_user, 148, ##ctx)			\
+	FN(snprintf_btf, 149, ##ctx)			\
+	FN(seq_printf_btf, 150, ##ctx)			\
+	FN(skb_cgroup_classid, 151, ##ctx)		\
+	FN(redirect_neigh, 152, ##ctx)			\
+	FN(per_cpu_ptr, 153, ##ctx)			\
+	FN(this_cpu_ptr, 154, ##ctx)			\
+	FN(redirect_peer, 155, ##ctx)			\
+	FN(task_storage_get, 156, ##ctx)		\
+	FN(task_storage_delete, 157, ##ctx)		\
+	FN(get_current_task_btf, 158, ##ctx)		\
+	FN(bprm_opts_set, 159, ##ctx)			\
+	FN(ktime_get_coarse_ns, 160, ##ctx)		\
+	FN(ima_inode_hash, 161, ##ctx)			\
+	FN(sock_from_file, 162, ##ctx)			\
+	FN(check_mtu, 163, ##ctx)			\
+	FN(for_each_map_elem, 164, ##ctx)		\
+	FN(snprintf, 165, ##ctx)			\
+	FN(sys_bpf, 166, ##ctx)				\
+	FN(btf_find_by_name_kind, 167, ##ctx)		\
+	FN(sys_close, 168, ##ctx)			\
+	FN(timer_init, 169, ##ctx)			\
+	FN(timer_set_callback, 170, ##ctx)		\
+	FN(timer_start, 171, ##ctx)			\
+	FN(timer_cancel, 172, ##ctx)			\
+	FN(get_func_ip, 173, ##ctx)			\
+	FN(get_attach_cookie, 174, ##ctx)		\
+	FN(task_pt_regs, 175, ##ctx)			\
+	FN(get_branch_snapshot, 176, ##ctx)		\
+	FN(trace_vprintk, 177, ##ctx)			\
+	FN(skc_to_unix_sock, 178, ##ctx)		\
+	FN(kallsyms_lookup_name, 179, ##ctx)		\
+	FN(find_vma, 180, ##ctx)			\
+	FN(loop, 181, ##ctx)				\
+	FN(strncmp, 182, ##ctx)				\
+	FN(get_func_arg, 183, ##ctx)			\
+	FN(get_func_ret, 184, ##ctx)			\
+	FN(get_func_arg_cnt, 185, ##ctx)		\
+	FN(get_retval, 186, ##ctx)			\
+	FN(set_retval, 187, ##ctx)			\
+	FN(xdp_get_buff_len, 188, ##ctx)		\
+	FN(xdp_load_bytes, 189, ##ctx)			\
+	FN(xdp_store_bytes, 190, ##ctx)			\
+	FN(copy_from_user_task, 191, ##ctx)		\
+	FN(skb_set_tstamp, 192, ##ctx)			\
+	FN(ima_file_hash, 193, ##ctx)			\
+	FN(kptr_xchg, 194, ##ctx)			\
+	FN(map_lookup_percpu_elem, 195, ##ctx)		\
+	FN(skc_to_mptcp_sock, 196, ##ctx)		\
+	FN(dynptr_from_mem, 197, ##ctx)			\
+	FN(ringbuf_reserve_dynptr, 198, ##ctx)		\
+	FN(ringbuf_submit_dynptr, 199, ##ctx)		\
+	FN(ringbuf_discard_dynptr, 200, ##ctx)		\
+	FN(dynptr_read, 201, ##ctx)			\
+	FN(dynptr_write, 202, ##ctx)			\
+	FN(dynptr_data, 203, ##ctx)			\
+	FN(tcp_raw_gen_syncookie_ipv4, 204, ##ctx)	\
+	FN(tcp_raw_gen_syncookie_ipv6, 205, ##ctx)	\
+	FN(tcp_raw_check_syncookie_ipv4, 206, ##ctx)	\
+	FN(tcp_raw_check_syncookie_ipv6, 207, ##ctx)	\
+	FN(ktime_get_tai_ns, 208, ##ctx)		\
+	FN(user_ringbuf_drain, 209, ##ctx)		\
+	FN(cgrp_storage_get, 210, ##ctx)		\
+	FN(cgrp_storage_delete, 211, ##ctx)		\
 	/* */
 
+/* backwards-compatibility macros for users of __BPF_FUNC_MAPPER that don't
+ * know or care about integer value that is now passed as second argument
+ */
+#define __BPF_FUNC_MAPPER_APPLY(name, value, FN) FN(name),
+#define __BPF_FUNC_MAPPER(FN) ___BPF_FUNC_MAPPER(__BPF_FUNC_MAPPER_APPLY, FN)
+
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call
  */
-#define __BPF_ENUM_FN(x) BPF_FUNC_ ## x
+#define __BPF_ENUM_FN(x, y) BPF_FUNC_ ## x = y,
 enum bpf_func_id {
-	__BPF_FUNC_MAPPER(__BPF_ENUM_FN)
+	___BPF_FUNC_MAPPER(__BPF_ENUM_FN)
 	__BPF_FUNC_MAX_ID,
 };
 #undef __BPF_ENUM_FN
@@ -3962,6 +5766,11 @@
 	BPF_F_SEQ_NUMBER		= (1ULL << 3),
 };
 
+/* BPF_FUNC_skb_get_tunnel_key flags. */
+enum {
+	BPF_F_TUNINFO_FLAGS		= (1ULL << 4),
+};
+
 /* BPF_FUNC_perf_event_output, BPF_FUNC_perf_event_read and
  * BPF_FUNC_perf_event_read_value flags.
  */
@@ -3993,6 +5802,7 @@
 	BPF_F_ADJ_ROOM_ENCAP_L4_GRE	= (1ULL << 3),
 	BPF_F_ADJ_ROOM_ENCAP_L4_UDP	= (1ULL << 4),
 	BPF_F_ADJ_ROOM_NO_CSUM_RESET	= (1ULL << 5),
+	BPF_F_ADJ_ROOM_ENCAP_L2_ETH	= (1ULL << 6),
 };
 
 enum {
@@ -4071,12 +5881,32 @@
 	BPF_LWT_ENCAP_IP,
 };
 
+/* Flags for bpf_bprm_opts_set helper */
+enum {
+	BPF_F_BPRM_SECUREEXEC	= (1ULL << 0),
+};
+
+/* Flags for bpf_redirect_map helper */
+enum {
+	BPF_F_BROADCAST		= (1ULL << 3),
+	BPF_F_EXCLUDE_INGRESS	= (1ULL << 4),
+};
+
 #define __bpf_md_ptr(type, name)	\
 union {					\
 	type name;			\
 	__u64 :64;			\
 } __attribute__((aligned(8)))
 
+enum {
+	BPF_SKB_TSTAMP_UNSPEC,
+	BPF_SKB_TSTAMP_DELIVERY_MONO,	/* tstamp has mono delivery time */
+	/* For any BPF_SKB_TSTAMP_* that the bpf prog cannot handle,
+	 * the bpf prog should handle it like BPF_SKB_TSTAMP_UNSPEC
+	 * and try to deduce it by ingress, egress or skb->sk->sk_clockid.
+	 */
+};
+
 /* user accessible mirror of in-kernel sk_buff.
  * new fields can only be added to the end of this structure
  */
@@ -4117,6 +5947,9 @@
 	__u32 gso_segs;
 	__bpf_md_ptr(struct bpf_sock *, sk);
 	__u32 gso_size;
+	__u8  tstamp_type;
+	__u32 :24;		/* Padding, future use. */
+	__u64 hwtstamp;
 };
 
 struct bpf_tunnel_key {
@@ -4127,8 +5960,15 @@
 	};
 	__u8 tunnel_tos;
 	__u8 tunnel_ttl;
-	__u16 tunnel_ext;	/* Padding, future use. */
+	union {
+		__u16 tunnel_ext;	/* compat */
+		__be16 tunnel_flags;
+	};
 	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
 };
 
 /* user accessible mirror of in-kernel xfrm_state.
@@ -4167,6 +6007,11 @@
 	 *    represented by BPF_REDIRECT above).
 	 */
 	BPF_LWT_REROUTE = 128,
+	/* BPF_FLOW_DISSECTOR_CONTINUE: used by BPF_PROG_TYPE_FLOW_DISSECTOR
+	 *   to indicate that no custom dissection was performed, and
+	 *   fallback to standard dissector is requested.
+	 */
+	BPF_FLOW_DISSECTOR_CONTINUE = 129,
 };
 
 struct bpf_sock {
@@ -4180,7 +6025,8 @@
 	__u32 src_ip4;
 	__u32 src_ip6[4];
 	__u32 src_port;		/* host byte order */
-	__u32 dst_port;		/* network byte order */
+	__be16 dst_port;	/* network byte order */
+	__u16 :16;		/* zero padding */
 	__u32 dst_ip4;
 	__u32 dst_ip6[4];
 	__u32 state;
@@ -4355,6 +6201,20 @@
 	__u32 ip_protocol;	/* IP protocol. e.g. IPPROTO_TCP, IPPROTO_UDP */
 	__u32 bind_inany;	/* Is sock bound to an INANY address? */
 	__u32 hash;		/* A hash of the packet 4 tuples */
+	/* When reuse->migrating_sk is NULL, it is selecting a sk for the
+	 * new incoming connection request (e.g. selecting a listen sk for
+	 * the received SYN in the TCP case).  reuse->sk is one of the sk
+	 * in the reuseport group. The bpf prog can use reuse->sk to learn
+	 * the local listening ip/port without looking into the skb.
+	 *
+	 * When reuse->migrating_sk is not NULL, reuse->sk is closed and
+	 * reuse->migrating_sk is the socket that needs to be migrated
+	 * to another listening socket.  migrating_sk could be a fullsock
+	 * sk that is fully established or a reqsk that is in-the-middle
+	 * of 3-way handshake.
+	 */
+	__bpf_md_ptr(struct bpf_sock *, sk);
+	__bpf_md_ptr(struct bpf_sock *, migrating_sk);
 };
 
 #define BPF_TAG_SIZE	8
@@ -4395,6 +6255,10 @@
 	__aligned_u64 prog_tags;
 	__u64 run_time_ns;
 	__u64 run_cnt;
+	__u64 recursion_misses;
+	__u32 verified_insns;
+	__u32 attach_btf_obj_id;
+	__u32 attach_btf_id;
 } __attribute__((aligned(8)));
 
 struct bpf_map_info {
@@ -4412,12 +6276,17 @@
 	__u32 btf_id;
 	__u32 btf_key_type_id;
 	__u32 btf_value_type_id;
+	__u32 :32;	/* alignment pad */
+	__u64 map_extra;
 } __attribute__((aligned(8)));
 
 struct bpf_btf_info {
 	__aligned_u64 btf;
 	__u32 btf_size;
 	__u32 id;
+	__aligned_u64 name;
+	__u32 name_len;
+	__u32 kernel_btf;
 } __attribute__((aligned(8)));
 
 struct bpf_link_info {
@@ -4431,6 +6300,8 @@
 		} raw_tracepoint;
 		struct {
 			__u32 attach_type;
+			__u32 target_obj_id; /* prog_id for PROG_EXT, otherwise btf object id */
+			__u32 target_btf_id; /* BTF type id inside the object */
 		} tracing;
 		struct {
 			__u64 cgroup_id;
@@ -4439,11 +6310,26 @@
 		struct {
 			__aligned_u64 target_name; /* in/out: target_name buffer ptr */
 			__u32 target_name_len;	   /* in/out: target_name buffer len */
+
+			/* If the iter specific field is 32 bits, it can be put
+			 * in the first or second union. Otherwise it should be
+			 * put in the second union.
+			 */
 			union {
 				struct {
 					__u32 map_id;
 				} map;
 			};
+			union {
+				struct {
+					__u64 cgroup_id;
+					__u32 order;
+				} cgroup;
+				struct {
+					__u32 tid;
+					__u32 pid;
+				} task;
+			};
 		} iter;
 		struct  {
 			__u32 netns_ino;
@@ -4562,6 +6448,7 @@
 				 * the outgoing header has not
 				 * been written yet.
 				 */
+	__u64 skb_hwtstamp;
 };
 
 /* Definitions for bpf_sock_ops_cb_flags */
@@ -4872,9 +6759,13 @@
 	__be16	sport;
 	__be16	dport;
 
-	/* total length of packet from network header - used for MTU check */
-	__u16	tot_len;
+	union {	/* used for MTU check */
+		/* input to lookup */
+		__u16	tot_len; /* L3 length from network hdr (iph->tot_len) */
 
+		/* output: MTU value */
+		__u16	mtu_result;
+	};
 	/* input: L3 device index for lookup
 	 * output: device index from FIB lookup
 	 */
@@ -4920,6 +6811,17 @@
 	};
 };
 
+/* bpf_check_mtu flags*/
+enum  bpf_check_mtu_flags {
+	BPF_MTU_CHK_SEGS  = (1U << 0),
+};
+
+enum bpf_check_mtu_ret {
+	BPF_MTU_CHK_RET_SUCCESS,      /* check and lookup successful */
+	BPF_MTU_CHK_RET_FRAG_NEEDED,  /* fragmentation required to fwd */
+	BPF_MTU_CHK_RET_SEGS_TOOBIG,  /* GSO re-segmentation needed to fwd */
+};
+
 enum bpf_task_fd_type {
 	BPF_FD_TYPE_RAW_TRACEPOINT,	/* tp name */
 	BPF_FD_TYPE_TRACEPOINT,		/* tp name */
@@ -4979,6 +6881,26 @@
 	__u32	val;
 };
 
+struct bpf_timer {
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_dynptr {
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_list_head {
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_list_node {
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
 struct bpf_sysctl {
 	__u32	write;		/* Sysctl is being read (= 0) or written (= 1).
 				 * Allows 1,2,4-byte read, but no write.
@@ -5006,16 +6928,21 @@
 
 /* User accessible data for SK_LOOKUP programs. Add new fields at the end. */
 struct bpf_sk_lookup {
-	__bpf_md_ptr(struct bpf_sock *, sk); /* Selected socket */
+	union {
+		__bpf_md_ptr(struct bpf_sock *, sk); /* Selected socket */
+		__u64 cookie; /* Non-zero if socket was selected in PROG_TEST_RUN */
+	};
 
 	__u32 family;		/* Protocol family (AF_INET, AF_INET6) */
 	__u32 protocol;		/* IP protocol (IPPROTO_TCP, IPPROTO_UDP) */
 	__u32 remote_ip4;	/* Network byte order */
 	__u32 remote_ip6[4];	/* Network byte order */
-	__u32 remote_port;	/* Network byte order */
+	__be16 remote_port;	/* Network byte order */
+	__u16 :16;		/* Zero padding */
 	__u32 local_ip4;	/* Network byte order */
 	__u32 local_ip6[4];	/* Network byte order */
 	__u32 local_port;	/* Host byte order */
+	__u32 ingress_ifindex;		/* The arriving interface. Determined by inet_iif. */
 };
 
 /*
@@ -5048,4 +6975,79 @@
 	BTF_F_ZERO	=	(1ULL << 3),
 };
 
-#endif /* _UAPI__LINUX_BPF_H__ */
+/* bpf_core_relo_kind encodes which aspect of captured field/type/enum value
+ * has to be adjusted by relocations. It is emitted by llvm and passed to
+ * libbpf and later to the kernel.
+ */
+enum bpf_core_relo_kind {
+	BPF_CORE_FIELD_BYTE_OFFSET = 0,      /* field byte offset */
+	BPF_CORE_FIELD_BYTE_SIZE = 1,        /* field size in bytes */
+	BPF_CORE_FIELD_EXISTS = 2,           /* field existence in target kernel */
+	BPF_CORE_FIELD_SIGNED = 3,           /* field signedness (0 - unsigned, 1 - signed) */
+	BPF_CORE_FIELD_LSHIFT_U64 = 4,       /* bitfield-specific left bitshift */
+	BPF_CORE_FIELD_RSHIFT_U64 = 5,       /* bitfield-specific right bitshift */
+	BPF_CORE_TYPE_ID_LOCAL = 6,          /* type ID in local BPF object */
+	BPF_CORE_TYPE_ID_TARGET = 7,         /* type ID in target kernel */
+	BPF_CORE_TYPE_EXISTS = 8,            /* type existence in target kernel */
+	BPF_CORE_TYPE_SIZE = 9,              /* type size in bytes */
+	BPF_CORE_ENUMVAL_EXISTS = 10,        /* enum value existence in target kernel */
+	BPF_CORE_ENUMVAL_VALUE = 11,         /* enum value integer value */
+	BPF_CORE_TYPE_MATCHES = 12,          /* type match in target kernel */
+};
+
+/*
+ * "struct bpf_core_relo" is used to pass relocation data form LLVM to libbpf
+ * and from libbpf to the kernel.
+ *
+ * CO-RE relocation captures the following data:
+ * - insn_off - instruction offset (in bytes) within a BPF program that needs
+ *   its insn->imm field to be relocated with actual field info;
+ * - type_id - BTF type ID of the "root" (containing) entity of a relocatable
+ *   type or field;
+ * - access_str_off - offset into corresponding .BTF string section. String
+ *   interpretation depends on specific relocation kind:
+ *     - for field-based relocations, string encodes an accessed field using
+ *       a sequence of field and array indices, separated by colon (:). It's
+ *       conceptually very close to LLVM's getelementptr ([0]) instruction's
+ *       arguments for identifying offset to a field.
+ *     - for type-based relocations, strings is expected to be just "0";
+ *     - for enum value-based relocations, string contains an index of enum
+ *       value within its enum type;
+ * - kind - one of enum bpf_core_relo_kind;
+ *
+ * Example:
+ *   struct sample {
+ *       int a;
+ *       struct {
+ *           int b[10];
+ *       };
+ *   };
+ *
+ *   struct sample *s = ...;
+ *   int *x = &s->a;     // encoded as "0:0" (a is field #0)
+ *   int *y = &s->b[5];  // encoded as "0:1:0:5" (anon struct is field #1,
+ *                       // b is field #0 inside anon struct, accessing elem #5)
+ *   int *z = &s[10]->b; // encoded as "10:1" (ptr is used as an array)
+ *
+ * type_id for all relocs in this example will capture BTF type id of
+ * `struct sample`.
+ *
+ * Such relocation is emitted when using __builtin_preserve_access_index()
+ * Clang built-in, passing expression that captures field address, e.g.:
+ *
+ * bpf_probe_read(&dst, sizeof(dst),
+ *		  __builtin_preserve_access_index(&src->a.b.c));
+ *
+ * In this case Clang will emit field relocation recording necessary data to
+ * be able to find offset of embedded `a.b.c` field within `src` struct.
+ *
+ * [0] https://llvm.org/docs/LangRef.html#getelementptr-instruction
+ */
+struct bpf_core_relo {
+	__u32 insn_off;
+	__u32 type_id;
+	__u32 access_str_off;
+	enum bpf_core_relo_kind kind;
+};
+
+#endif /* __LINUX_BPF_H__ */
diff --git a/src/shared/linux/bpf_common.h b/src/shared/linux/bpf_common.h
index ee97668..f0fe139 100644
--- a/src/shared/linux/bpf_common.h
+++ b/src/shared/linux/bpf_common.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI__LINUX_BPF_COMMON_H__
-#define _UAPI__LINUX_BPF_COMMON_H__
+#ifndef __LINUX_BPF_COMMON_H__
+#define __LINUX_BPF_COMMON_H__
 
 /* Instruction classes */
 #define BPF_CLASS(code) ((code) & 0x07)
@@ -54,4 +54,4 @@
 #define BPF_MAXINSNS 4096
 #endif
 
-#endif /* _UAPI__LINUX_BPF_COMMON_H__ */
+#endif /* __LINUX_BPF_COMMON_H__ */
diff --git a/src/shared/linux/bpf_insn.h b/src/shared/linux/bpf_insn.h
index d8d9fb2..92ec06b 100644
--- a/src/shared/linux/bpf_insn.h
+++ b/src/shared/linux/bpf_insn.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
 /* eBPF instruction mini library */
 #ifndef __BPF_INSN_H
 #define __BPF_INSN_H
@@ -134,15 +134,31 @@
 		.off   = OFF,					\
 		.imm   = 0 })
 
-/* Atomic memory add, *(uint *)(dst_reg + off16) += src_reg */
+/*
+ * Atomic operations:
+ *
+ *   BPF_ADD                  *(uint *) (dst_reg + off16) += src_reg
+ *   BPF_AND                  *(uint *) (dst_reg + off16) &= src_reg
+ *   BPF_OR                   *(uint *) (dst_reg + off16) |= src_reg
+ *   BPF_XOR                  *(uint *) (dst_reg + off16) ^= src_reg
+ *   BPF_ADD | BPF_FETCH      src_reg = atomic_fetch_add(dst_reg + off16, src_reg);
+ *   BPF_AND | BPF_FETCH      src_reg = atomic_fetch_and(dst_reg + off16, src_reg);
+ *   BPF_OR | BPF_FETCH       src_reg = atomic_fetch_or(dst_reg + off16, src_reg);
+ *   BPF_XOR | BPF_FETCH      src_reg = atomic_fetch_xor(dst_reg + off16, src_reg);
+ *   BPF_XCHG                 src_reg = atomic_xchg(dst_reg + off16, src_reg)
+ *   BPF_CMPXCHG              r0 = atomic_cmpxchg(dst_reg + off16, r0, src_reg)
+ */
 
-#define BPF_STX_XADD(SIZE, DST, SRC, OFF)			\
+#define BPF_ATOMIC_OP(SIZE, OP, DST, SRC, OFF)			\
 	((struct bpf_insn) {					\
-		.code  = BPF_STX | BPF_SIZE(SIZE) | BPF_XADD,	\
+		.code  = BPF_STX | BPF_SIZE(SIZE) | BPF_ATOMIC,	\
 		.dst_reg = DST,					\
 		.src_reg = SRC,					\
 		.off   = OFF,					\
-		.imm   = 0 })
+		.imm   = OP })
+
+/* Legacy alias */
+#define BPF_STX_XADD(SIZE, DST, SRC, OFF) BPF_ATOMIC_OP(SIZE, BPF_ADD, DST, SRC, OFF)
 
 /* Memory store, *(uint *) (dst_reg + off16) = imm32 */
 
diff --git a/src/shared/linux/dm-ioctl.h b/src/shared/linux/dm-ioctl.h
index ab312e1..19a64fc 100644
--- a/src/shared/linux/dm-ioctl.h
+++ b/src/shared/linux/dm-ioctl.h
@@ -182,7 +182,7 @@
 struct dm_target_deps {
 	__u32 count;	/* Array size */
 	__u32 padding;	/* unused */
-	__u64 dev[0];	/* out */
+	__u64 dev[];	/* out */
 };
 
 /*
@@ -192,9 +192,23 @@
 	__u64 dev;
 	__u32 next;		/* offset to the next record from
 				   the _start_ of this */
-	char name[0];
+	char name[];
+
+	/*
+	 * The following members can be accessed by taking a pointer that
+	 * points immediately after the terminating zero character in "name"
+	 * and aligning this pointer to next 8-byte boundary.
+	 * Uuid is present if the flag DM_NAME_LIST_FLAG_HAS_UUID is set.
+	 *
+	 * __u32 event_nr;
+	 * __u32 flags;
+	 * char uuid[0];
+	 */
 };
 
+#define DM_NAME_LIST_FLAG_HAS_UUID		1
+#define DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID	2
+
 /*
  * Used to retrieve the target versions
  */
@@ -202,7 +216,7 @@
         __u32 next;
         __u32 version[3];
 
-        char name[0];
+        char name[];
 };
 
 /*
@@ -211,7 +225,7 @@
 struct dm_target_msg {
 	__u64 sector;	/* Device sector */
 
-	char message[0];
+	char message[];
 };
 
 /*
@@ -274,7 +288,7 @@
 #define DM_VERSION_MAJOR	4
 #define DM_VERSION_MINOR	27
 #define DM_VERSION_PATCHLEVEL	0
-#define DM_VERSION_EXTRA	"-ioctl (2020-10-01)"
+#define DM_VERSION_EXTRA	"-ioctl (2022-02-22)"
 
 /* Status bits */
 #define DM_READONLY_FLAG	(1 << 0) /* In/Out */
@@ -362,4 +376,10 @@
  */
 #define DM_INTERNAL_SUSPEND_FLAG	(1 << 18) /* Out */
 
+/*
+ * If set, returns in the in buffer passed by UM, the raw table information
+ * that would be measured by IMA subsystem on device state change.
+ */
+#define DM_IMA_MEASUREMENT_FLAG	(1 << 19) /* In */
+
 #endif				/* _LINUX_DM_IOCTL_H */
diff --git a/src/shared/linux/ethtool.h b/src/shared/linux/ethtool.h
index 974d429..1458de3 100644
--- a/src/shared/linux/ethtool.h
+++ b/src/shared/linux/ethtool.h
@@ -11,16 +11,14 @@
  * Portions Copyright (C) Sun Microsystems 2008
  */
 
-#ifndef _UAPI_LINUX_ETHTOOL_H
-#define _UAPI_LINUX_ETHTOOL_H
+#ifndef _LINUX_ETHTOOL_H
+#define _LINUX_ETHTOOL_H
 
-#include <linux/kernel.h>
+#include <linux/const.h>
 #include <linux/types.h>
 #include <linux/if_ether.h>
 
-#ifndef __KERNEL__
 #include <limits.h> /* for INT_MAX */
-#endif
 
 #ifndef __KERNEL_DIV_ROUND_UP
 #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
@@ -30,6 +28,14 @@
  * have the same layout for 32-bit and 64-bit userland.
  */
 
+/* Note on reserved space.
+ * Reserved fields must not be accessed directly by user space because
+ * they may be replaced by a different field in the future. They must
+ * be initialized to zero before making the request, e.g. via memset
+ * of the entire structure or implicitly by not being set in a structure
+ * initializer.
+ */
+
 /**
  * struct ethtool_cmd - DEPRECATED, link control and status
  * This structure is DEPRECATED, please use struct ethtool_link_settings.
@@ -71,6 +77,7 @@
  *	and other link features that the link partner advertised
  *	through autonegotiation; 0 if unknown or not applicable.
  *	Read-only.
+ * @reserved: Reserved for future use; see the note on reserved space.
  *
  * The link speed in Mbps is split between @speed and @speed_hi.  Use
  * the ethtool_cmd_speed() and ethtool_cmd_speed_set() functions to
@@ -117,14 +124,14 @@
 	__u32	reserved[2];
 };
 
-static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
+static __inline__ void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
 					 __u32 speed)
 {
 	ep->speed = (__u16)(speed & 0xFFFF);
 	ep->speed_hi = (__u16)(speed >> 16);
 }
 
-static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
+static __inline__ __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
 {
 	return ((__u32) ep->speed_hi << 16) | (__u32) ep->speed;
 }
@@ -154,11 +161,14 @@
  *	in its bus driver structure (e.g. pci_driver::name).  Must
  *	not be an empty string.
  * @version: Driver version string; may be an empty string
- * @fw_version: Firmware version string; may be an empty string
- * @erom_version: Expansion ROM version string; may be an empty string
+ * @fw_version: Firmware version string; driver defined; may be an
+ *	empty string
+ * @erom_version: Expansion ROM version string; driver defined; may be
+ *	an empty string
  * @bus_info: Device bus address.  This should match the dev_name()
  *	string for the underlying bus device, if there is one.  May be
  *	an empty string.
+ * @reserved2: Reserved for future use; see the note on reserved space.
  * @n_priv_flags: Number of flags valid for %ETHTOOL_GPFLAGS and
  *	%ETHTOOL_SPFLAGS commands; also the number of strings in the
  *	%ETH_SS_PRIV_FLAGS set
@@ -173,10 +183,6 @@
  *
  * Users can use the %ETHTOOL_GSSET_INFO command to get the number of
  * strings in any string set (from Linux 2.6.34).
- *
- * Drivers should set at most @driver, @version, @fw_version and
- * @bus_info in their get_drvinfo() implementation.  The ethtool
- * core fills in the other fields using other driver operations.
  */
 struct ethtool_drvinfo {
 	__u32	cmd;
@@ -225,9 +231,10 @@
 	ETHTOOL_RX_COPYBREAK,
 	ETHTOOL_TX_COPYBREAK,
 	ETHTOOL_PFC_PREVENTION_TOUT, /* timeout in msecs */
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE,
 	/*
 	 * Add your fresh new tunable attribute above and remember to update
-	 * tunable_strings[] in net/core/ethtool.c
+	 * tunable_strings[] in net/ethtool/common.c
 	 */
 	__ETHTOOL_TUNABLE_COUNT,
 };
@@ -250,7 +257,7 @@
 	__u32	id;
 	__u32	type_id;
 	__u32	len;
-	void	*data[0];
+	void	*data[];
 };
 
 #define DOWNSHIFT_DEV_DEFAULT_COUNT	0xff
@@ -291,7 +298,7 @@
 	ETHTOOL_PHY_EDPD,
 	/*
 	 * Add your fresh new phy tunable attribute above and remember to update
-	 * phy_tunable_strings[] in net/core/ethtool.c
+	 * phy_tunable_strings[] in net/ethtool/common.c
 	 */
 	__ETHTOOL_PHY_TUNABLE_COUNT,
 };
@@ -315,7 +322,7 @@
 	__u32	cmd;
 	__u32	version;
 	__u32	len;
-	__u8	data[0];
+	__u8	data[];
 };
 
 /**
@@ -341,7 +348,7 @@
 	__u32	magic;
 	__u32	offset;
 	__u32	len;
-	__u8	data[0];
+	__u8	data[];
 };
 
 /**
@@ -360,6 +367,7 @@
  * @tx_lpi_timer: Time in microseconds the interface delays prior to asserting
  *	its tx lpi (after reaching 'idle' state). Effective only when eee
  *	was negotiated and tx_lpi_enabled was set.
+ * @reserved: Reserved for future use; see the note on reserved space.
  */
 struct ethtool_eee {
 	__u32	cmd;
@@ -378,6 +386,7 @@
  * @cmd: %ETHTOOL_GMODULEINFO
  * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx
  * @eeprom_len: Length of the eeprom
+ * @reserved: Reserved for future use; see the note on reserved space.
  *
  * This structure is used to return the information to
  * properly size memory for a subsequent call to %ETHTOOL_GMODULEEEPROM.
@@ -583,9 +592,7 @@
 	__u32	tx_pause;
 };
 
-/**
- * enum ethtool_link_ext_state - link extended state
- */
+/* Link extended state */
 enum ethtool_link_ext_state {
 	ETHTOOL_LINK_EXT_STATE_AUTONEG,
 	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE,
@@ -597,12 +604,10 @@
 	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE,
 	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED,
 	ETHTOOL_LINK_EXT_STATE_OVERHEAT,
+	ETHTOOL_LINK_EXT_STATE_MODULE,
 };
 
-/**
- * enum ethtool_link_ext_substate_autoneg - more information in addition to
- * ETHTOOL_LINK_EXT_STATE_AUTONEG.
- */
+/* More information in addition to ETHTOOL_LINK_EXT_STATE_AUTONEG. */
 enum ethtool_link_ext_substate_autoneg {
 	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
 	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED,
@@ -612,9 +617,7 @@
 	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD,
 };
 
-/**
- * enum ethtool_link_ext_substate_link_training - more information in addition to
- * ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE.
+/* More information in addition to ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE.
  */
 enum ethtool_link_ext_substate_link_training {
 	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
@@ -623,9 +626,7 @@
 	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT,
 };
 
-/**
- * enum ethtool_link_ext_substate_logical_mismatch - more information in addition
- * to ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH.
+/* More information in addition to ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH.
  */
 enum ethtool_link_ext_substate_link_logical_mismatch {
 	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
@@ -635,24 +636,26 @@
 	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED,
 };
 
-/**
- * enum ethtool_link_ext_substate_bad_signal_integrity - more information in
- * addition to ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY.
+/* More information in addition to ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY.
  */
 enum ethtool_link_ext_substate_bad_signal_integrity {
 	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
 	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS,
 };
 
-/**
- * enum ethtool_link_ext_substate_cable_issue - more information in
- * addition to ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE.
- */
+/* More information in addition to ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE. */
 enum ethtool_link_ext_substate_cable_issue {
 	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
 	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE,
 };
 
+/* More information in addition to ETHTOOL_LINK_EXT_STATE_MODULE. */
+enum ethtool_link_ext_substate_module {
+	ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
 #define ETH_GSTRING_LEN		32
 
 /**
@@ -665,6 +668,7 @@
  *	now deprecated
  * @ETH_SS_FEATURES: Device feature names
  * @ETH_SS_RSS_HASH_FUNCS: RSS hush function names
+ * @ETH_SS_TUNABLES: tunable names
  * @ETH_SS_PHY_STATS: Statistic names, for use with %ETHTOOL_GPHYSTATS
  * @ETH_SS_PHY_TUNABLES: PHY tunable names
  * @ETH_SS_LINK_MODES: link mode names
@@ -674,6 +678,13 @@
  * @ETH_SS_TS_TX_TYPES: timestamping Tx types
  * @ETH_SS_TS_RX_FILTERS: timestamping Rx filters
  * @ETH_SS_UDP_TUNNEL_TYPES: UDP tunnel types
+ * @ETH_SS_STATS_STD: standardized stats
+ * @ETH_SS_STATS_ETH_PHY: names of IEEE 802.3 PHY statistics
+ * @ETH_SS_STATS_ETH_MAC: names of IEEE 802.3 MAC statistics
+ * @ETH_SS_STATS_ETH_CTRL: names of IEEE 802.3 MAC Control statistics
+ * @ETH_SS_STATS_RMON: names of RMON statistics
+ *
+ * @ETH_SS_COUNT: number of defined string sets
  */
 enum ethtool_stringset {
 	ETH_SS_TEST		= 0,
@@ -692,12 +703,85 @@
 	ETH_SS_TS_TX_TYPES,
 	ETH_SS_TS_RX_FILTERS,
 	ETH_SS_UDP_TUNNEL_TYPES,
+	ETH_SS_STATS_STD,
+	ETH_SS_STATS_ETH_PHY,
+	ETH_SS_STATS_ETH_MAC,
+	ETH_SS_STATS_ETH_CTRL,
+	ETH_SS_STATS_RMON,
 
 	/* add new constants above here */
 	ETH_SS_COUNT
 };
 
 /**
+ * enum ethtool_module_power_mode_policy - plug-in module power mode policy
+ * @ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH: Module is always in high power mode.
+ * @ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO: Module is transitioned by the host
+ *	to high power mode when the first port using it is put administratively
+ *	up and to low power mode when the last port using it is put
+ *	administratively down.
+ */
+enum ethtool_module_power_mode_policy {
+	ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+	ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO,
+};
+
+/**
+ * enum ethtool_module_power_mode - plug-in module power mode
+ * @ETHTOOL_MODULE_POWER_MODE_LOW: Module is in low power mode.
+ * @ETHTOOL_MODULE_POWER_MODE_HIGH: Module is in high power mode.
+ */
+enum ethtool_module_power_mode {
+	ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+	ETHTOOL_MODULE_POWER_MODE_HIGH,
+};
+
+/**
+ * enum ethtool_podl_pse_admin_state - operational state of the PoDL PSE
+ *	functions. IEEE 802.3-2018 30.15.1.1.2 aPoDLPSEAdminState
+ * @ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN: state of PoDL PSE functions are
+ * 	unknown
+ * @ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED: PoDL PSE functions are disabled
+ * @ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED: PoDL PSE functions are enabled
+ */
+enum ethtool_podl_pse_admin_state {
+	ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED,
+};
+
+/**
+ * enum ethtool_podl_pse_pw_d_status - power detection status of the PoDL PSE.
+ *	IEEE 802.3-2018 30.15.1.1.3 aPoDLPSEPowerDetectionStatus:
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN: PoDL PSE
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED: "The enumeration “disabled” is
+ *	asserted true when the PoDL PSE state diagram variable mr_pse_enable is
+ *	false"
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING: "The enumeration “searching” is
+ *	asserted true when either of the PSE state diagram variables
+ *	pi_detecting or pi_classifying is true."
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING: "The enumeration “deliveringPower”
+ *	is asserted true when the PoDL PSE state diagram variable pi_powered is
+ *	true."
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP: "The enumeration “sleep” is asserted
+ *	true when the PoDL PSE state diagram variable pi_sleeping is true."
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE: "The enumeration “idle” is asserted true
+ *	when the logical combination of the PoDL PSE state diagram variables
+ *	pi_prebiased*!pi_sleeping is true."
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR: "The enumeration “error” is asserted
+ *	true when the PoDL PSE state diagram variable overload_held is true."
+ */
+enum ethtool_podl_pse_pw_d_status {
+	ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR,
+};
+
+/**
  * struct ethtool_gstrings - string set for data tagging
  * @cmd: Command number = %ETHTOOL_GSTRINGS
  * @string_set: String set ID; one of &enum ethtool_stringset
@@ -713,12 +797,13 @@
 	__u32	cmd;
 	__u32	string_set;
 	__u32	len;
-	__u8	data[0];
+	__u8	data[];
 };
 
 /**
  * struct ethtool_sset_info - string set information
  * @cmd: Command number = %ETHTOOL_GSSET_INFO
+ * @reserved: Reserved for future use; see the note on reserved space.
  * @sset_mask: On entry, a bitmask of string sets to query, with bits
  *	numbered according to &enum ethtool_stringset.  On return, a
  *	bitmask of those string sets queried that are supported.
@@ -737,7 +822,7 @@
 	__u32	cmd;
 	__u32	reserved;
 	__u64	sset_mask;
-	__u32	data[0];
+	__u32	data[];
 };
 
 /**
@@ -763,6 +848,7 @@
  * @flags: A bitmask of flags from &enum ethtool_test_flags.  Some
  *	flags may be set by the user on entry; others may be set by
  *	the driver on return.
+ * @reserved: Reserved for future use; see the note on reserved space.
  * @len: On return, the number of test results
  * @data: Array of test results
  *
@@ -776,7 +862,7 @@
 	__u32	flags;
 	__u32	reserved;
 	__u32	len;
-	__u64	data[0];
+	__u64	data[];
 };
 
 /**
@@ -793,7 +879,7 @@
 struct ethtool_stats {
 	__u32	cmd;
 	__u32	n_stats;
-	__u64	data[0];
+	__u64	data[];
 };
 
 /**
@@ -810,7 +896,7 @@
 struct ethtool_perm_addr {
 	__u32	cmd;
 	__u32	size;
-	__u8	data[0];
+	__u8	data[];
 };
 
 /* boolean flags controlling per-interface behavior characteristics.
@@ -963,6 +1049,7 @@
  * @vlan_etype: VLAN EtherType
  * @vlan_tci: VLAN tag control information
  * @data: user defined data
+ * @padding: Reserved for future use; see the note on reserved space.
  *
  * Note, @vlan_etype, @vlan_tci, and @data are only valid if %FLOW_EXT
  * is set in &struct ethtool_rx_flow_spec @flow_type.
@@ -1017,12 +1104,12 @@
 #define ETHTOOL_RX_FLOW_SPEC_RING	0x00000000FFFFFFFFLL
 #define ETHTOOL_RX_FLOW_SPEC_RING_VF	0x000000FF00000000LL
 #define ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF 32
-static inline __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie)
+static __inline__ __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie)
 {
 	return ETHTOOL_RX_FLOW_SPEC_RING & ring_cookie;
 }
 
-static inline __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie)
+static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie)
 {
 	return (ETHTOOL_RX_FLOW_SPEC_RING_VF & ring_cookie) >>
 				ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
@@ -1118,7 +1205,7 @@
 struct ethtool_rxfh_indir {
 	__u32	cmd;
 	__u32	size;
-	__u32	ring_index[0];
+	__u32	ring_index[];
 };
 
 /**
@@ -1138,7 +1225,8 @@
  *	hardware hash key.
  * @hfunc: Defines the current RSS hash function used by HW (or to be set to).
  *	Valid values are one of the %ETH_RSS_HASH_*.
- * @rsvd:	Reserved for future extensions.
+ * @rsvd8: Reserved for future use; see the note on reserved space.
+ * @rsvd32: Reserved for future use; see the note on reserved space.
  * @rss_config: RX ring/queue index for each hash value i.e., indirection table
  *	of @indir_size __u32 elements, followed by hash key of @key_size
  *	bytes.
@@ -1158,7 +1246,7 @@
 	__u8	hfunc;
 	__u8	rsvd8[3];
 	__u32	rsvd32;
-	__u32   rss_config[0];
+	__u32   rss_config[];
 };
 #define ETH_RXFH_CONTEXT_ALLOC		0xffffffff
 #define ETH_RXFH_INDIR_NO_CHANGE	0xffffffff
@@ -1243,7 +1331,7 @@
 	__u32	version;
 	__u32	flag;
 	__u32	len;
-	__u8	data[0];
+	__u8	data[];
 };
 
 #define ETH_FW_DUMP_DISABLE 0
@@ -1275,7 +1363,7 @@
 struct ethtool_gfeatures {
 	__u32	cmd;
 	__u32	size;
-	struct ethtool_get_features_block features[0];
+	struct ethtool_get_features_block features[];
 };
 
 /**
@@ -1297,7 +1385,7 @@
 struct ethtool_sfeatures {
 	__u32	cmd;
 	__u32	size;
-	struct ethtool_set_features_block features[0];
+	struct ethtool_set_features_block features[];
 };
 
 /**
@@ -1306,7 +1394,9 @@
  * @so_timestamping: bit mask of the sum of the supported SO_TIMESTAMPING flags
  * @phc_index: device index of the associated PHC, or -1 if there is none
  * @tx_types: bit mask of the supported hwtstamp_tx_types enumeration values
+ * @tx_reserved: Reserved for future use; see the note on reserved space.
  * @rx_filters: bit mask of the supported hwtstamp_rx_filters enumeration values
+ * @rx_reserved: Reserved for future use; see the note on reserved space.
  *
  * The bits in the 'tx_types' and 'rx_filters' fields correspond to
  * the 'hwtstamp_tx_types' and 'hwtstamp_rx_filters' enumeration values,
@@ -1380,15 +1470,33 @@
 };
 
 /**
- * struct ethtool_fecparam - Ethernet forward error correction(fec) parameters
+ * struct ethtool_fecparam - Ethernet Forward Error Correction parameters
  * @cmd: Command number = %ETHTOOL_GFECPARAM or %ETHTOOL_SFECPARAM
- * @active_fec: FEC mode which is active on porte
- * @fec: Bitmask of supported/configured FEC modes
- * @rsvd: Reserved for future extensions. i.e FEC bypass feature.
+ * @active_fec: FEC mode which is active on the port, single bit set, GET only.
+ * @fec: Bitmask of configured FEC modes.
+ * @reserved: Reserved for future extensions, ignore on GET, write 0 for SET.
  *
- * Drivers should reject a non-zero setting of @autoneg when
- * autoneogotiation is disabled (or not supported) for the link.
+ * Note that @reserved was never validated on input and ethtool user space
+ * left it uninitialized when calling SET. Hence going forward it can only be
+ * used to return a value to userspace with GET.
  *
+ * FEC modes supported by the device can be read via %ETHTOOL_GLINKSETTINGS.
+ * FEC settings are configured by link autonegotiation whenever it's enabled.
+ * With autoneg on %ETHTOOL_GFECPARAM can be used to read the current mode.
+ *
+ * When autoneg is disabled %ETHTOOL_SFECPARAM controls the FEC settings.
+ * It is recommended that drivers only accept a single bit set in @fec.
+ * When multiple bits are set in @fec drivers may pick mode in an implementation
+ * dependent way. Drivers should reject mixing %ETHTOOL_FEC_AUTO_BIT with other
+ * FEC modes, because it's unclear whether in this case other modes constrain
+ * AUTO or are independent choices.
+ * Drivers must reject SET requests if they support none of the requested modes.
+ *
+ * If device does not support FEC drivers may use %ETHTOOL_FEC_NONE instead
+ * of returning %EOPNOTSUPP from %ETHTOOL_GFECPARAM.
+ *
+ * See enum ethtool_fec_config_bits for definition of valid bits for both
+ * @fec and @active_fec.
  */
 struct ethtool_fecparam {
 	__u32   cmd;
@@ -1400,11 +1508,16 @@
 
 /**
  * enum ethtool_fec_config_bits - flags definition of ethtool_fec_configuration
- * @ETHTOOL_FEC_NONE: FEC mode configuration is not supported
- * @ETHTOOL_FEC_AUTO: Default/Best FEC mode provided by driver
- * @ETHTOOL_FEC_OFF: No FEC Mode
- * @ETHTOOL_FEC_RS: Reed-Solomon Forward Error Detection mode
- * @ETHTOOL_FEC_BASER: Base-R/Reed-Solomon Forward Error Detection mode
+ * @ETHTOOL_FEC_NONE_BIT: FEC mode configuration is not supported. Should not
+ *			be used together with other bits. GET only.
+ * @ETHTOOL_FEC_AUTO_BIT: Select default/best FEC mode automatically, usually
+ *			based link mode and SFP parameters read from module's
+ *			EEPROM. This bit does _not_ mean autonegotiation.
+ * @ETHTOOL_FEC_OFF_BIT: No FEC Mode
+ * @ETHTOOL_FEC_RS_BIT: Reed-Solomon FEC Mode
+ * @ETHTOOL_FEC_BASER_BIT: Base-R/Reed-Solomon FEC Mode
+ * @ETHTOOL_FEC_LLRS_BIT: Low Latency Reed Solomon FEC Mode (25G/50G Ethernet
+ *			Consortium)
  */
 enum ethtool_fec_config_bits {
 	ETHTOOL_FEC_NONE_BIT,
@@ -1623,6 +1736,14 @@
 	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT	 = 89,
 	ETHTOOL_LINK_MODE_100baseFX_Half_BIT		 = 90,
 	ETHTOOL_LINK_MODE_100baseFX_Full_BIT		 = 91,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT		 = 92,
+	ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT	 = 93,
+	ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT	 = 94,
+	ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT	 = 95,
+	ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT	 = 96,
+	ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT	 = 97,
+	ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT	 = 98,
+
 	/* must be last entry */
 	__ETHTOOL_LINK_MODE_MASK_NBITS
 };
@@ -1734,10 +1855,11 @@
 #define SPEED_100000		100000
 #define SPEED_200000		200000
 #define SPEED_400000		400000
+#define SPEED_800000		800000
 
 #define SPEED_UNKNOWN		-1
 
-static inline int ethtool_validate_speed(__u32 speed)
+static __inline__ int ethtool_validate_speed(__u32 speed)
 {
 	return speed <= INT_MAX || speed == (__u32)SPEED_UNKNOWN;
 }
@@ -1747,7 +1869,7 @@
 #define DUPLEX_FULL		0x01
 #define DUPLEX_UNKNOWN		0xff
 
-static inline int ethtool_validate_duplex(__u8 duplex)
+static __inline__ int ethtool_validate_duplex(__u8 duplex)
 {
 	switch (duplex) {
 	case DUPLEX_HALF:
@@ -1771,6 +1893,20 @@
 #define MASTER_SLAVE_STATE_SLAVE		3
 #define MASTER_SLAVE_STATE_ERR			4
 
+/* These are used to throttle the rate of data on the phy interface when the
+ * native speed of the interface is higher than the link speed. These should
+ * not be used for phy interfaces which natively support multiple speeds (e.g.
+ * MII or SGMII).
+ */
+/* No rate matching performed. */
+#define RATE_MATCH_NONE		0
+/* The phy sends pause frames to throttle the MAC. */
+#define RATE_MATCH_PAUSE	1
+/* The phy asserts CRS to prevent the MAC from transmitting. */
+#define RATE_MATCH_CRS		2
+/* The MAC is programmed with a sufficiently-large IPG. */
+#define RATE_MATCH_OPEN_LOOP	3
+
 /* Which connector port. */
 #define PORT_TP			0x00
 #define PORT_AUI		0x01
@@ -1962,6 +2098,11 @@
  *	autonegotiation; 0 if unknown or not applicable.  Read-only.
  * @transceiver: Used to distinguish different possible PHY types,
  *	reported consistently by PHYLIB.  Read-only.
+ * @master_slave_cfg: Master/slave port mode.
+ * @master_slave_state: Master/slave port state.
+ * @rate_matching: Rate adaptation performed by the PHY
+ * @reserved: Reserved for future use; see the note on reserved space.
+ * @link_mode_masks: Variable length bitmaps.
  *
  * If autonegotiation is disabled, the speed and @duplex represent the
  * fixed link mode and are writable if the driver supports multiple
@@ -2011,13 +2152,13 @@
 	__u8	transceiver;
 	__u8	master_slave_cfg;
 	__u8	master_slave_state;
-	__u8	reserved1[1];
+	__u8	rate_matching;
 	__u32	reserved[7];
-	__u32	link_mode_masks[0];
+	__u32	link_mode_masks[];
 	/* layout of link_mode_masks fields:
 	 * __u32 map_supported[link_mode_masks_nwords];
 	 * __u32 map_advertising[link_mode_masks_nwords];
 	 * __u32 map_lp_advertising[link_mode_masks_nwords];
 	 */
 };
-#endif /* _UAPI_LINUX_ETHTOOL_H */
+#endif /* _LINUX_ETHTOOL_H */
diff --git a/src/shared/local-addresses.c b/src/shared/local-addresses.c
index bd69e94..a1577de 100644
--- a/src/shared/local-addresses.c
+++ b/src/shared/local-addresses.c
@@ -68,7 +68,6 @@
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_free_ struct local_address *list = NULL;
         size_t n_list = 0;
-        sd_netlink_message *m;
         int r;
 
         if (context)
@@ -83,7 +82,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
@@ -91,7 +90,7 @@
         if (r < 0)
                 return r;
 
-        for (m = reply; m; m = sd_netlink_message_next(m)) {
+        for (sd_netlink_message *m = reply; m; m = sd_netlink_message_next(m)) {
                 struct local_address *a;
                 unsigned char flags;
                 uint16_t type;
@@ -236,7 +235,7 @@
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_request_dump(req, true);
+        r = sd_netlink_message_set_request_dump(req, true);
         if (r < 0)
                 return r;
 
@@ -391,7 +390,7 @@
         }
 
         for (int i = 0; i < n_gateways; i++) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 union sockaddr_union sa;
                 socklen_t salen;
 
@@ -422,7 +421,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unexpected protocol");
+                        assert_not_reached();
                 }
 
                 /* So ideally we'd just use IP_UNICAST_IF here to pass the ifindex info to the kernel before
@@ -493,7 +492,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unexpected protocol");
+                        assert_not_reached();
                 }
         }
 
diff --git a/src/shared/locale-setup.c b/src/shared/locale-setup.c
new file mode 100644
index 0000000..8943a42
--- /dev/null
+++ b/src/shared/locale-setup.c
@@ -0,0 +1,294 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+#include <sys/stat.h>
+
+#include "env-file-label.h"
+#include "env-file.h"
+#include "env-util.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "locale-setup.h"
+#include "proc-cmdline.h"
+#include "stat-util.h"
+#include "strv.h"
+
+void locale_context_clear(LocaleContext *c) {
+        assert(c);
+
+        c->st = (struct stat) {};
+
+        for (LocaleVariable i = 0; i < _VARIABLE_LC_MAX; i++)
+                c->locale[i] = mfree(c->locale[i]);
+}
+
+static int locale_context_load_proc(LocaleContext *c, LocaleLoadFlag flag) {
+        int r;
+
+        assert(c);
+
+        if (!FLAGS_SET(flag, LOCALE_LOAD_PROC_CMDLINE))
+                return 0;
+
+        locale_context_clear(c);
+
+        r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX,
+                                      "locale.LANG",              &c->locale[VARIABLE_LANG],
+                                      "locale.LANGUAGE",          &c->locale[VARIABLE_LANGUAGE],
+                                      "locale.LC_CTYPE",          &c->locale[VARIABLE_LC_CTYPE],
+                                      "locale.LC_NUMERIC",        &c->locale[VARIABLE_LC_NUMERIC],
+                                      "locale.LC_TIME",           &c->locale[VARIABLE_LC_TIME],
+                                      "locale.LC_COLLATE",        &c->locale[VARIABLE_LC_COLLATE],
+                                      "locale.LC_MONETARY",       &c->locale[VARIABLE_LC_MONETARY],
+                                      "locale.LC_MESSAGES",       &c->locale[VARIABLE_LC_MESSAGES],
+                                      "locale.LC_PAPER",          &c->locale[VARIABLE_LC_PAPER],
+                                      "locale.LC_NAME",           &c->locale[VARIABLE_LC_NAME],
+                                      "locale.LC_ADDRESS",        &c->locale[VARIABLE_LC_ADDRESS],
+                                      "locale.LC_TELEPHONE",      &c->locale[VARIABLE_LC_TELEPHONE],
+                                      "locale.LC_MEASUREMENT",    &c->locale[VARIABLE_LC_MEASUREMENT],
+                                      "locale.LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_debug_errno(r, "Failed to read /proc/cmdline: %m");
+        return r;
+}
+
+static int locale_context_load_conf(LocaleContext *c, LocaleLoadFlag flag) {
+        _cleanup_close_ int fd = -EBADF;
+        struct stat st;
+        int r;
+
+        assert(c);
+
+        if (!FLAGS_SET(flag, LOCALE_LOAD_LOCALE_CONF))
+                return 0;
+
+        fd = RET_NERRNO(open("/etc/locale.conf", O_CLOEXEC | O_PATH));
+        if (fd == -ENOENT)
+                return 0;
+        if (fd < 0)
+                return log_debug_errno(errno, "Failed to open /etc/locale.conf: %m");
+
+        if (fstat(fd, &st) < 0)
+                return log_debug_errno(errno, "Failed to stat /etc/locale.conf: %m");
+
+        /* If the file is not changed, then we do not need to re-read the file. */
+        if (stat_inode_unmodified(&c->st, &st))
+                return 0;
+
+        c->st = st;
+        locale_context_clear(c);
+
+        r = parse_env_file_fd(fd, "/etc/locale.conf",
+                              "LANG",              &c->locale[VARIABLE_LANG],
+                              "LANGUAGE",          &c->locale[VARIABLE_LANGUAGE],
+                              "LC_CTYPE",          &c->locale[VARIABLE_LC_CTYPE],
+                              "LC_NUMERIC",        &c->locale[VARIABLE_LC_NUMERIC],
+                              "LC_TIME",           &c->locale[VARIABLE_LC_TIME],
+                              "LC_COLLATE",        &c->locale[VARIABLE_LC_COLLATE],
+                              "LC_MONETARY",       &c->locale[VARIABLE_LC_MONETARY],
+                              "LC_MESSAGES",       &c->locale[VARIABLE_LC_MESSAGES],
+                              "LC_PAPER",          &c->locale[VARIABLE_LC_PAPER],
+                              "LC_NAME",           &c->locale[VARIABLE_LC_NAME],
+                              "LC_ADDRESS",        &c->locale[VARIABLE_LC_ADDRESS],
+                              "LC_TELEPHONE",      &c->locale[VARIABLE_LC_TELEPHONE],
+                              "LC_MEASUREMENT",    &c->locale[VARIABLE_LC_MEASUREMENT],
+                              "LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to read /etc/locale.conf: %m");
+
+        return 1; /* loaded */
+}
+
+static int locale_context_load_env(LocaleContext *c, LocaleLoadFlag flag) {
+        int r;
+
+        assert(c);
+
+        if (!FLAGS_SET(flag, LOCALE_LOAD_ENVIRONMENT))
+                return 0;
+
+        locale_context_clear(c);
+
+        /* Fill in what we got passed from systemd. */
+        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
+                const char *name = ASSERT_PTR(locale_variable_to_string(p));
+
+                r = free_and_strdup(&c->locale[p], empty_to_null(getenv(name)));
+                if (r < 0)
+                        return log_oom_debug();
+        }
+
+        return 1; /* loaded */
+}
+
+int locale_context_load(LocaleContext *c, LocaleLoadFlag flag) {
+        int r;
+
+        assert(c);
+
+        r = locale_context_load_proc(c, flag);
+        if (r > 0)
+                goto finalize;
+
+        r = locale_context_load_conf(c, flag);
+        if (r != 0)
+                goto finalize;
+
+        r = locale_context_load_env(c, flag);
+
+finalize:
+        if (r <= 0) {
+                /* Nothing loaded, or error. */
+                locale_context_clear(c);
+                return r;
+        }
+
+        if (FLAGS_SET(flag, LOCALE_LOAD_SIMPLIFY))
+                locale_variables_simplify(c->locale);
+
+        return 0;
+}
+
+int locale_context_build_env(const LocaleContext *c, char ***ret_set, char ***ret_unset) {
+        _cleanup_strv_free_ char **set = NULL, **unset = NULL;
+        int r;
+
+        assert(c);
+
+        if (!ret_set && !ret_unset)
+                return 0;
+
+        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
+                const char *name = ASSERT_PTR(locale_variable_to_string(p));
+
+                if (isempty(c->locale[p])) {
+                        if (!ret_unset)
+                                continue;
+                        r = strv_extend(&unset, name);
+                } else {
+                        if (!ret_set)
+                                continue;
+                        r = strv_env_assign(&set, name, c->locale[p]);
+                }
+                if (r < 0)
+                        return r;
+        }
+
+        if (ret_set)
+                *ret_set = TAKE_PTR(set);
+        if (ret_unset)
+                *ret_unset = TAKE_PTR(unset);
+        return 0;
+}
+
+int locale_context_save(LocaleContext *c, char ***ret_set, char ***ret_unset) {
+        _cleanup_strv_free_ char **set = NULL, **unset = NULL;
+        int r;
+
+        assert(c);
+
+        /* Set values will be returned as strv in *ret on success. */
+
+        r = locale_context_build_env(c, &set, ret_unset ? &unset : NULL);
+        if (r < 0)
+                return r;
+
+        if (strv_isempty(set)) {
+                if (unlink("/etc/locale.conf") < 0)
+                        return errno == ENOENT ? 0 : -errno;
+
+                c->st = (struct stat) {};
+
+                if (ret_set)
+                        *ret_set = NULL;
+                if (ret_unset)
+                        *ret_unset = NULL;
+                return 0;
+        }
+
+        r = write_env_file_label("/etc/locale.conf", set);
+        if (r < 0)
+                return r;
+
+        if (stat("/etc/locale.conf", &c->st) < 0)
+                return -errno;
+
+        if (ret_set)
+                *ret_set = TAKE_PTR(set);
+        if (ret_unset)
+                *ret_unset = TAKE_PTR(unset);
+        return 0;
+}
+
+int locale_context_merge(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]) {
+        assert(c);
+        assert(l);
+
+        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+                if (!isempty(c->locale[p]) && isempty(l[p])) {
+                        l[p] = strdup(c->locale[p]);
+                        if (!l[p])
+                                return -ENOMEM;
+                }
+
+        return 0;
+}
+
+void locale_context_take(LocaleContext *c, char *l[_VARIABLE_LC_MAX]) {
+        assert(c);
+        assert(l);
+
+        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+                free_and_replace(c->locale[p], l[p]);
+}
+
+bool locale_context_equal(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]) {
+        assert(c);
+        assert(l);
+
+        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+                if (!streq_ptr(c->locale[p], l[p]))
+                        return false;
+
+        return true;
+}
+
+int locale_setup(char ***environment) {
+        _cleanup_(locale_context_clear) LocaleContext c = {};
+        _cleanup_strv_free_ char **add = NULL;
+        int r;
+
+        assert(environment);
+
+        r = locale_context_load(&c, LOCALE_LOAD_PROC_CMDLINE | LOCALE_LOAD_LOCALE_CONF);
+        if (r < 0)
+                return r;
+
+        r = locale_context_build_env(&c, &add, NULL);
+        if (r < 0)
+                return r;
+
+        if (strv_isempty(add)) {
+                /* If no locale is configured then default to compile-time default. */
+
+                add = strv_new("LANG=" SYSTEMD_DEFAULT_LOCALE);
+                if (!add)
+                        return -ENOMEM;
+        }
+
+        if (strv_isempty(*environment))
+                strv_free_and_replace(*environment, add);
+        else {
+                char **merged;
+
+                merged = strv_env_merge(*environment, add);
+                if (!merged)
+                        return -ENOMEM;
+
+                strv_free_and_replace(*environment, merged);
+        }
+
+        return 0;
+}
diff --git a/src/shared/locale-setup.h b/src/shared/locale-setup.h
new file mode 100644
index 0000000..537acc7
--- /dev/null
+++ b/src/shared/locale-setup.h
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <sys/stat.h>
+
+#include "locale-util.h"
+
+typedef struct LocaleContext {
+        struct stat st;
+        char *locale[_VARIABLE_LC_MAX];
+} LocaleContext;
+
+typedef enum LocaleLoadFlag {
+        LOCALE_LOAD_PROC_CMDLINE = 1 << 0,
+        LOCALE_LOAD_LOCALE_CONF  = 1 << 1,
+        LOCALE_LOAD_ENVIRONMENT  = 1 << 2,
+        LOCALE_LOAD_SIMPLIFY     = 1 << 3,
+} LocaleLoadFlag;
+
+void locale_context_clear(LocaleContext *c);
+int locale_context_load(LocaleContext *c, LocaleLoadFlag flag);
+int locale_context_build_env(const LocaleContext *c, char ***ret_set, char ***ret_unset);
+int locale_context_save(LocaleContext *c, char ***ret_set, char ***ret_unset);
+
+int locale_context_merge(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]);
+void locale_context_take(LocaleContext *c, char *l[_VARIABLE_LC_MAX]);
+bool locale_context_equal(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]);
+
+int locale_setup(char ***environment);
diff --git a/src/shared/lockfile-util.c b/src/shared/lockfile-util.c
index 6f059ab..df099d7 100644
--- a/src/shared/lockfile-util.c
+++ b/src/shared/lockfile-util.c
@@ -16,19 +16,19 @@
 #include "path-util.h"
 
 int make_lock_file(const char *p, int operation, LockFile *ret) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_free_ char *t = NULL;
         int r;
 
+        assert(p);
+        assert(ret);
+
         /*
-         * We use UNPOSIX locks if they are available. They have nice
-         * semantics, and are mostly compatible with NFS. However,
-         * they are only available on new kernels. When we detect we
-         * are running on an older kernel, then we fall back to good
-         * old BSD locks. They also have nice semantics, but are
-         * slightly problematic on NFS, where they are upgraded to
-         * POSIX locks, even though locally they are orthogonal to
-         * POSIX locks.
+         * We use UNPOSIX locks if they are available. They have nice semantics, and are mostly compatible
+         * with NFS. However, they are only available on new kernels. When we detect we are running on an
+         * older kernel, then we fall back to good old BSD locks. They also have nice semantics, but are
+         * slightly problematic on NFS, where they are upgraded to POSIX locks, even though locally they are
+         * orthogonal to POSIX locks.
          */
 
         t = strdup(p);
@@ -48,23 +48,18 @@
 
                 r = fcntl(fd, (operation & LOCK_NB) ? F_OFD_SETLK : F_OFD_SETLKW, &fl);
                 if (r < 0) {
-
                         /* If the kernel is too old, use good old BSD locks */
-                        if (errno == EINVAL)
+                        if (errno == EINVAL || ERRNO_IS_NOT_SUPPORTED(errno))
                                 r = flock(fd, operation);
-
                         if (r < 0)
                                 return errno == EAGAIN ? -EBUSY : -errno;
                 }
 
-                /* If we acquired the lock, let's check if the file
-                 * still exists in the file system. If not, then the
-                 * previous exclusive owner removed it and then closed
-                 * it. In such a case our acquired lock is worthless,
-                 * hence try again. */
+                /* If we acquired the lock, let's check if the file still exists in the file system. If not,
+                 * then the previous exclusive owner removed it and then closed it. In such a case our
+                 * acquired lock is worthless, hence try again. */
 
-                r = fstat(fd, &st);
-                if (r < 0)
+                if (fstat(fd, &st) < 0)
                         return -errno;
                 if (st.st_nlink > 0)
                         break;
@@ -72,29 +67,33 @@
                 fd = safe_close(fd);
         }
 
-        ret->path = t;
-        ret->fd = fd;
-        ret->operation = operation;
-
-        fd = -1;
-        t = NULL;
+        *ret = (LockFile) {
+                .path = TAKE_PTR(t),
+                .fd = TAKE_FD(fd),
+                .operation = operation,
+        };
 
         return r;
 }
 
 int make_lock_file_for(const char *p, int operation, LockFile *ret) {
-        const char *fn;
-        char *t;
+        _cleanup_free_ char *fn = NULL, *dn = NULL, *t = NULL;
+        int r;
 
         assert(p);
         assert(ret);
 
-        fn = basename(p);
-        if (!filename_is_valid(fn))
-                return -EINVAL;
+        r = path_extract_filename(p, &fn);
+        if (r < 0)
+                return r;
 
-        t = newa(char, strlen(p) + 2 + 4 + 1);
-        stpcpy(stpcpy(stpcpy(mempcpy(t, p, fn - p), ".#"), fn), ".lck");
+        r = path_extract_directory(p, &dn);
+        if (r < 0)
+                return r;
+
+        t = strjoin(dn, "/.#", fn, ".lck");
+        if (!t)
+                return -ENOMEM;
 
         return make_lock_file(t, operation, ret);
 }
@@ -119,7 +118,7 @@
                         };
 
                         r = fcntl(f->fd, F_OFD_SETLK, &fl);
-                        if (r < 0 && errno == EINVAL)
+                        if (r < 0 && (errno == EINVAL || ERRNO_IS_NOT_SUPPORTED(errno)))
                                 r = flock(f->fd, LOCK_EX|LOCK_NB);
 
                         if (r >= 0)
diff --git a/src/shared/lockfile-util.h b/src/shared/lockfile-util.h
index 3606327..20e19c0 100644
--- a/src/shared/lockfile-util.h
+++ b/src/shared/lockfile-util.h
@@ -11,4 +11,4 @@
 int make_lock_file_for(const char *p, int operation, LockFile *ret);
 void release_lock_file(LockFile *f);
 
-#define LOCK_FILE_INIT { .fd = -1, .path = NULL }
+#define LOCK_FILE_INIT { .fd = -EBADF, .path = NULL }
diff --git a/src/shared/log-link.h b/src/shared/log-link.h
index 51eaa0c..5f2b176 100644
--- a/src/shared/log-link.h
+++ b/src/shared/log-link.h
@@ -17,24 +17,6 @@
                 log_interface_full_errno_zerook(ifname, level, _error, __VA_ARGS__); \
         })
 
-#define log_interface_prefix_full_errno_zerook(prefix, ifname_expr, error, fmt, ...) \
-        ({                                                              \
-                int _e = (error);                                       \
-                if (DEBUG_LOGGING)                                      \
-                        log_interface_full_errno_zerook(                \
-                                ifname_expr,                            \
-                                LOG_DEBUG, _e, prefix fmt,              \
-                                ##__VA_ARGS__);                         \
-                -ERRNO_VALUE(_e);                                       \
-        })
-
-#define log_interface_prefix_full_errno(prefix, ifname_expr, error, fmt, ...) \
-        ({                                                              \
-                int _error = (error);                                   \
-                ASSERT_NON_ZERO(_error);                                \
-                log_interface_prefix_full_errno_zerook(prefix, ifname_expr, _error, fmt, ##__VA_ARGS__); \
-        })
-
 /*
  * The following macros append INTERFACE= to the message.
  * The macros require a struct named 'Link' which contains 'char *ifname':
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
index e63c59b..b72e516 100644
--- a/src/shared/logs-show.c
+++ b/src/shared/logs-show.c
@@ -15,6 +15,7 @@
 #include "alloc-util.h"
 #include "fd-util.h"
 #include "format-util.h"
+#include "glyph-util.h"
 #include "hashmap.h"
 #include "hostname-util.h"
 #include "id128-util.h"
@@ -39,7 +40,6 @@
 #include "terminal-util.h"
 #include "time-util.h"
 #include "utf8.h"
-#include "util.h"
 #include "web-util.h"
 
 /* up to three lines (each up to 100 characters) or 300 characters, whichever is less */
@@ -73,9 +73,7 @@
                 return log_oom();
 
         fprintf(f, "%s%s %s%s", ansi_grey(), prefix, ansi_normal(), ansi_green());
-
         fputs(z, f);
-
         fprintf(f, "%s\n", ansi_normal());
 
         return 1;
@@ -108,7 +106,7 @@
         weblink += strspn(weblink, " \t");
 
         /* Cut out till next whitespace/newline */
-        url = strndup(weblink, strcspn(weblink, WHITESPACE));
+        url = strdupcspn(weblink, WHITESPACE);
         if (!url)
                 return log_oom();
 
@@ -123,7 +121,14 @@
         return 0;
 }
 
-static int parse_field(const void *data, size_t length, const char *field, size_t field_len, char **target, size_t *target_len) {
+static int parse_field(
+                const void *data,
+                size_t length,
+                const char *field,
+                size_t field_len,
+                char **target,
+                size_t *target_len) {
+
         size_t nl;
         char *buf;
 
@@ -143,8 +148,7 @@
         if (!buf)
                 return log_oom();
 
-        free(*target);
-        *target = buf;
+        free_and_replace(*target, buf);
 
         if (target_len)
                 *target_len = nl;
@@ -166,17 +170,21 @@
                 .target_len = _target_len                               \
         }
 
-static int parse_fieldv(const void *data, size_t length, const ParseFieldVec *fields, unsigned n_fields) {
-        unsigned i;
+static int parse_fieldv(
+                const void *data,
+                size_t length,
+                const ParseFieldVec *fields,
+                size_t n_fields) {
 
-        for (i = 0; i < n_fields; i++) {
+        int r;
+
+        for (size_t i = 0; i < n_fields; i++) {
                 const ParseFieldVec *f = &fields[i];
-                int r;
 
                 r = parse_field(data, length, f->field, f->field_len, f->target, f->target_len);
                 if (r < 0)
                         return r;
-                else if (r > 0)
+                if (r > 0)
                         break;
         }
 
@@ -189,7 +197,7 @@
         if (!fields)
                 return 1;
 
-        s = strndupa(name, n);
+        s = strndupa_safe(name, n);
         return set_contains(fields, s);
 }
 
@@ -241,9 +249,8 @@
         for (pos = message;
              pos < message + message_len;
              pos = end + 1, line++) {
-                bool continuation = line > 0;
                 bool tail_line;
-                int len;
+                int len, indent = (line > 0) * prefix;
                 for (end = pos; end < message + message_len && *end != '\n'; end++)
                         ;
                 len = end - pos;
@@ -265,7 +272,7 @@
                             highlight[0] < (size_t) len) {
 
                                 fprintf(f, "%*s%s%.*s",
-                                        continuation * prefix, "",
+                                        indent, "",
                                         color_on, (int) highlight[0], pos);
                                 fprintf(f, "%s%.*s",
                                         highlight_on,
@@ -280,7 +287,7 @@
 
                         } else
                                 fprintf(f, "%*s%s%.*s%s\n",
-                                        continuation * prefix, "",
+                                        indent, "",
                                         color_on, len, pos, color_off);
                         continue;
                 }
@@ -291,7 +298,7 @@
                 if (prefix < n_columns && n_columns - prefix >= 3) {
                         if (n_columns - prefix > (unsigned) len + 3)
                                 fprintf(f, "%*s%s%.*s...%s\n",
-                                        continuation * prefix, "",
+                                        indent, "",
                                         color_on, len, pos, color_off);
                         else {
                                 _cleanup_free_ char *e = NULL;
@@ -300,11 +307,11 @@
                                                   tail_line ? 100 : 90);
                                 if (!e)
                                         fprintf(f, "%*s%s%.*s%s\n",
-                                                continuation * prefix, "",
+                                                indent, "",
                                                 color_on, len, pos, color_off);
                                 else
                                         fprintf(f, "%*s%s%s%s\n",
-                                                continuation * prefix, "",
+                                                indent, "",
                                                 color_on, e, color_off);
                         }
                 } else
@@ -317,62 +324,87 @@
         return ellipsized;
 }
 
-static int output_timestamp_monotonic(FILE *f, sd_journal *j, const char *monotonic) {
-        sd_id128_t boot_id;
-        uint64_t t;
-        int r;
+static int output_timestamp_monotonic(
+                FILE *f,
+                OutputMode mode,
+                const dual_timestamp *display_ts,
+                const sd_id128_t *boot_id,
+                const dual_timestamp *previous_display_ts,
+                const sd_id128_t *previous_boot_id) {
+
+        int written_chars = 0;
 
         assert(f);
-        assert(j);
+        assert(display_ts);
+        assert(boot_id);
+        assert(previous_display_ts);
+        assert(previous_boot_id);
 
-        r = -ENXIO;
-        if (monotonic)
-                r = safe_atou64(monotonic, &t);
-        if (r < 0)
-                r = sd_journal_get_monotonic_usec(j, &t, &boot_id);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get monotonic timestamp: %m");
+        if (!VALID_MONOTONIC(display_ts->monotonic))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No valid monotonic timestamp available");
 
-        fprintf(f, "[%5"PRI_USEC".%06"PRI_USEC"]", t / USEC_PER_SEC, t % USEC_PER_SEC);
-        return 1 + 5 + 1 + 6 + 1;
+        written_chars += fprintf(f, "[%5"PRI_USEC".%06"PRI_USEC, display_ts->monotonic / USEC_PER_SEC, display_ts->monotonic % USEC_PER_SEC);
+
+        if (mode == OUTPUT_SHORT_DELTA) {
+                uint64_t delta;
+                bool reliable_ts = true;
+
+                if (VALID_MONOTONIC(previous_display_ts->monotonic) && sd_id128_equal(*boot_id, *previous_boot_id))
+                        delta = usec_sub_unsigned(display_ts->monotonic, previous_display_ts->monotonic);
+                else if (VALID_REALTIME(display_ts->realtime) && VALID_REALTIME(previous_display_ts->realtime)) {
+                        delta = usec_sub_unsigned(display_ts->realtime, previous_display_ts->realtime);
+                        reliable_ts = false;
+                } else {
+                        written_chars += fprintf(f, "%16s", "");
+                        goto finish;
+                }
+
+                written_chars += fprintf(f, " <%5"PRI_USEC".%06"PRI_USEC"%s>", delta / USEC_PER_SEC, delta % USEC_PER_SEC, reliable_ts ? " " : "*");
+        }
+
+finish:
+        written_chars += fprintf(f, "%s", "]");
+        return written_chars;
 }
 
-static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, OutputFlags flags, const char *realtime) {
-        char buf[MAX(FORMAT_TIMESTAMP_MAX, 64U)];
-        uint64_t x;
+static int output_timestamp_realtime(
+                FILE *f,
+                sd_journal *j,
+                OutputMode mode,
+                OutputFlags flags,
+                const dual_timestamp *display_ts) {
+
+        char buf[CONST_MAX(FORMAT_TIMESTAMP_MAX, 64U)];
         int r;
 
         assert(f);
         assert(j);
+        assert(display_ts);
 
-        if (realtime)
-                r = safe_atou64(realtime, &x);
-        if (!realtime || r < 0 || !VALID_REALTIME(x))
-                r = sd_journal_get_realtime_usec(j, &x);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get realtime timestamp: %m");
+        if (!VALID_REALTIME(display_ts->realtime))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No valid realtime timestamp available");
 
         if (IN_SET(mode, OUTPUT_SHORT_FULL, OUTPUT_WITH_UNIT)) {
                 const char *k;
 
                 if (flags & OUTPUT_UTC)
-                        k = format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UTC);
+                        k = format_timestamp_style(buf, sizeof(buf), display_ts->realtime, TIMESTAMP_UTC);
                 else
-                        k = format_timestamp(buf, sizeof(buf), x);
+                        k = format_timestamp(buf, sizeof(buf), display_ts->realtime);
                 if (!k)
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Failed to format timestamp: %" PRIu64, x);
+                                               "Failed to format timestamp: %" PRIu64, display_ts->realtime);
 
         } else {
                 struct tm tm;
                 time_t t;
 
-                t = (time_t) (x / USEC_PER_SEC);
+                t = (time_t) (display_ts->realtime / USEC_PER_SEC);
 
                 switch (mode) {
 
                 case OUTPUT_SHORT_UNIX:
-                        xsprintf(buf, "%10"PRI_TIME".%06"PRIu64, t, x % USEC_PER_SEC);
+                        xsprintf(buf, "%10"PRI_TIME".%06"PRIu64, t, display_ts->realtime % USEC_PER_SEC);
                         break;
 
                 case OUTPUT_SHORT_ISO:
@@ -390,7 +422,7 @@
                                      localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0)
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                        "Failed to format ISO-precise time");
-                        xsprintf(usec, "%06"PRI_USEC, x % USEC_PER_SEC);
+                        xsprintf(usec, "%06"PRI_USEC, display_ts->realtime % USEC_PER_SEC);
                         memcpy(buf + 20, usec, 6);
                         break;
                 }
@@ -408,7 +440,7 @@
                                 assert(sizeof(buf) > strlen(buf));
                                 k = sizeof(buf) - strlen(buf);
 
-                                r = snprintf(buf + strlen(buf), k, ".%06"PRIu64, x % USEC_PER_SEC);
+                                r = snprintf(buf + strlen(buf), k, ".%06"PRIu64, display_ts->realtime % USEC_PER_SEC);
                                 if (r <= 0 || (size_t) r >= k) /* too long? */
                                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                                "Failed to format precise time");
@@ -416,7 +448,7 @@
                         break;
 
                 default:
-                        assert_not_reached("Unknown time format");
+                        assert_not_reached();
                 }
         }
 
@@ -431,16 +463,20 @@
                 unsigned n_columns,
                 OutputFlags flags,
                 const Set *output_fields,
-                const size_t highlight[2]) {
+                const size_t highlight[2],
+                const dual_timestamp *display_ts,
+                const sd_id128_t *boot_id,
+                const dual_timestamp *previous_display_ts,
+                const sd_id128_t *previous_boot_id) {
 
         int r;
         const void *data;
         size_t length, n = 0;
         _cleanup_free_ char *hostname = NULL, *identifier = NULL, *comm = NULL, *pid = NULL, *fake_pid = NULL,
-                *message = NULL, *realtime = NULL, *monotonic = NULL, *priority = NULL, *transport = NULL,
+                *message = NULL, *priority = NULL, *transport = NULL,
                 *config_file = NULL, *unit = NULL, *user_unit = NULL, *documentation_url = NULL;
         size_t hostname_len = 0, identifier_len = 0, comm_len = 0, pid_len = 0, fake_pid_len = 0, message_len = 0,
-                realtime_len = 0, monotonic_len = 0, priority_len = 0, transport_len = 0, config_file_len = 0,
+                priority_len = 0, transport_len = 0, config_file_len = 0,
                 unit_len = 0, user_unit_len = 0, documentation_url_len = 0;
         int p = LOG_INFO;
         bool ellipsized = false, audit;
@@ -453,8 +489,6 @@
                 PARSE_FIELD_VEC_ENTRY("_HOSTNAME=", &hostname, &hostname_len),
                 PARSE_FIELD_VEC_ENTRY("SYSLOG_PID=", &fake_pid, &fake_pid_len),
                 PARSE_FIELD_VEC_ENTRY("SYSLOG_IDENTIFIER=", &identifier, &identifier_len),
-                PARSE_FIELD_VEC_ENTRY("_SOURCE_REALTIME_TIMESTAMP=", &realtime, &realtime_len),
-                PARSE_FIELD_VEC_ENTRY("_SOURCE_MONOTONIC_TIMESTAMP=", &monotonic, &monotonic_len),
                 PARSE_FIELD_VEC_ENTRY("CONFIG_FILE=", &config_file, &config_file_len),
                 PARSE_FIELD_VEC_ENTRY("_SYSTEMD_UNIT=", &unit, &unit_len),
                 PARSE_FIELD_VEC_ENTRY("_SYSTEMD_USER_UNIT=", &user_unit, &user_unit_len),
@@ -464,14 +498,16 @@
 
         assert(f);
         assert(j);
+        assert(display_ts);
+        assert(boot_id);
+        assert(previous_display_ts);
+        assert(previous_boot_id);
 
-        /* Set the threshold to one bigger than the actual print
-         * threshold, so that if the line is actually longer than what
-         * we're willing to print, ellipsization will occur. This way
-         * we won't output a misleading line without any indication of
-         * truncation.
+        /* Set the threshold to one bigger than the actual print threshold, so that if the line is actually
+         * longer than what we're willing to print, ellipsization will occur. This way we won't output a
+         * misleading line without any indication of truncation.
          */
-        sd_journal_set_data_threshold(j, flags & (OUTPUT_SHOW_ALL|OUTPUT_FULL_WIDTH) ? 0 : PRINT_CHAR_THRESHOLD + 1);
+        (void) sd_journal_set_data_threshold(j, flags & (OUTPUT_SHOW_ALL|OUTPUT_FULL_WIDTH) ? 0 : PRINT_CHAR_THRESHOLD + 1);
 
         JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
                 r = parse_fieldv(data, length, fields, ELEMENTSOF(fields));
@@ -498,10 +534,10 @@
 
         audit = streq_ptr(transport, "audit");
 
-        if (mode == OUTPUT_SHORT_MONOTONIC)
-                r = output_timestamp_monotonic(f, j, monotonic);
+        if (IN_SET(mode, OUTPUT_SHORT_MONOTONIC, OUTPUT_SHORT_DELTA))
+                r = output_timestamp_monotonic(f, mode, display_ts, boot_id, previous_display_ts, previous_boot_id);
         else
-                r = output_timestamp_realtime(f, j, mode, flags, realtime);
+                r = output_timestamp_realtime(f, j, mode, flags, display_ts);
         if (r < 0)
                 return r;
         n += r;
@@ -579,10 +615,9 @@
                 }
         }
 
-        if (!(flags & OUTPUT_SHOW_ALL) && !utf8_is_printable(message, message_len)) {
-                char bytes[FORMAT_BYTES_MAX];
-                fprintf(f, "[%s blob data]\n", format_bytes(bytes, sizeof(bytes), message_len));
-        } else {
+        if (!(flags & OUTPUT_SHOW_ALL) && !utf8_is_printable(message, message_len))
+                fprintf(f, "[%s blob data]\n", FORMAT_BYTES(message_len));
+        else {
 
                 /* URLify config_file string in message, if the message starts with it.
                  * Skip URLification if the highlighted pattern overlaps. */
@@ -633,63 +668,50 @@
                 unsigned n_columns,
                 OutputFlags flags,
                 const Set *output_fields,
-                const size_t highlight[2]) {
+                const size_t highlight[2],
+                const dual_timestamp *display_ts,
+                const sd_id128_t *boot_id,
+                const dual_timestamp *previous_display_ts,
+                const sd_id128_t *previous_boot_id) {
 
         const void *data;
         size_t length;
         _cleanup_free_ char *cursor = NULL;
-        uint64_t realtime = 0;
-        char ts[FORMAT_TIMESTAMP_MAX + 7];
+        char buf[FORMAT_TIMESTAMP_MAX + 7];
         const char *timestamp;
         int r;
 
         assert(f);
         assert(j);
+        assert(display_ts);
+        assert(boot_id);
+        assert(previous_display_ts);
+        assert(previous_boot_id);
 
-        sd_journal_set_data_threshold(j, 0);
+        (void) sd_journal_set_data_threshold(j, 0);
 
-        r = sd_journal_get_data(j, "_SOURCE_REALTIME_TIMESTAMP", &data, &length);
-        if (r == -ENOENT)
-                log_debug("Source realtime timestamp not found");
-        else if (r < 0)
-                return log_full_errno(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_ERR, r, "Failed to get source realtime timestamp: %m");
-        else {
-                _cleanup_free_ char *value = NULL;
-
-                r = parse_field(data, length, "_SOURCE_REALTIME_TIMESTAMP=",
-                                STRLEN("_SOURCE_REALTIME_TIMESTAMP="), &value,
-                                NULL);
-                if (r < 0)
-                        return r;
-                assert(r > 0);
-
-                r = safe_atou64(value, &realtime);
-                if (r < 0)
-                        log_debug_errno(r, "Failed to parse realtime timestamp: %m");
-        }
-
-        if (r < 0) {
-                r = sd_journal_get_realtime_usec(j, &realtime);
-                if (r < 0)
-                        return log_full_errno(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_ERR, r, "Failed to get realtime timestamp: %m");
-        }
+        if (!VALID_REALTIME(display_ts->realtime))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No valid realtime timestamp available");
 
         r = sd_journal_get_cursor(j, &cursor);
         if (r < 0)
                 return log_error_errno(r, "Failed to get cursor: %m");
 
-        timestamp = format_timestamp_style(ts, sizeof ts, realtime,
+        timestamp = format_timestamp_style(buf, sizeof buf, display_ts->realtime,
                                            flags & OUTPUT_UTC ? TIMESTAMP_US_UTC : TIMESTAMP_US);
-        fprintf(f, "%s [%s]\n",
+        fprintf(f, "%s%s%s %s[%s]%s\n",
+                timestamp && (flags & OUTPUT_COLOR) ? ANSI_UNDERLINE : "",
                 timestamp ?: "(no timestamp)",
-                cursor);
+                timestamp && (flags & OUTPUT_COLOR) ? ANSI_NORMAL : "",
+                (flags & OUTPUT_COLOR) ? ANSI_GREY : "",
+                cursor,
+                (flags & OUTPUT_COLOR) ? ANSI_NORMAL : "");
 
         JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
-                const char *c, *p;
-                int fieldlen;
-                const char *on = "", *off = "";
                 _cleanup_free_ char *urlified = NULL;
-                size_t valuelen;
+                const char *on = "", *off = "";
+                const char *c, *p = NULL;
+                size_t fieldlen, valuelen;
 
                 c = memchr(data, '=', length);
                 if (!c)
@@ -706,38 +728,47 @@
                         continue;
 
                 valuelen = length - 1 - fieldlen;
+                p = c + 1;
 
-                if ((flags & OUTPUT_COLOR) && (p = startswith(data, "MESSAGE="))) {
-                        on = ANSI_HIGHLIGHT;
-                        off = ANSI_NORMAL;
-                } else if ((p = startswith(data, "CONFIG_FILE="))) {
-                        if (terminal_urlify_path(p, NULL, &urlified) >= 0) {
-                                p = urlified;
-                                valuelen = strlen(urlified);
+                if (flags & OUTPUT_COLOR) {
+                        if (startswith(data, "MESSAGE=")) {
+                                on = ANSI_HIGHLIGHT;
+                                off = ANSI_NORMAL;
+                        } else if (startswith(data, "CONFIG_FILE=")) {
+                                _cleanup_free_ char *u = NULL;
+
+                                u = memdup_suffix0(p, valuelen);
+                                if (!u)
+                                        return log_oom();
+
+                                if (terminal_urlify_path(u, NULL, &urlified) >= 0) {
+                                        p = urlified;
+                                        valuelen = strlen(urlified);
+                                }
+
+                        } else if (startswith(data, "_")) {
+                                /* Highlight trusted data as such */
+                                on = ANSI_GREEN;
+                                off = ANSI_NORMAL;
                         }
-                } else
-                        p = c + 1;
+                }
 
                 if ((flags & OUTPUT_SHOW_ALL) ||
                     (((length < PRINT_CHAR_THRESHOLD) || flags & OUTPUT_FULL_WIDTH)
                      && utf8_is_printable(data, length))) {
-                        fprintf(f, "    %s%.*s=", on, fieldlen, (const char*)data);
+                        fprintf(f, "    %s%.*s=", on, (int) fieldlen, (const char*)data);
                         print_multiline(f, 4 + fieldlen + 1, 0, OUTPUT_FULL_WIDTH, 0, false,
                                         p, valuelen,
                                         NULL);
                         fputs(off, f);
-                } else {
-                        char bytes[FORMAT_BYTES_MAX];
-
+                } else
                         fprintf(f, "    %s%.*s=[%s blob data]%s\n",
                                 on,
                                 (int) (c - (const char*) data),
                                 (const char*) data,
-                                format_bytes(bytes, sizeof(bytes), length - (c - (const char *) data) - 1),
+                                FORMAT_BYTES(length - (c - (const char *) data) - 1),
                                 off);
-                }
         }
-
         if (r < 0)
                 return r;
 
@@ -754,32 +785,39 @@
                 unsigned n_columns,
                 OutputFlags flags,
                 const Set *output_fields,
-                const size_t highlight[2]) {
+                const size_t highlight[2],
+                const dual_timestamp *display_ts,
+                const sd_id128_t *boot_id,
+                const dual_timestamp *previous_display_ts,
+                const sd_id128_t *previous_boot_id) {
 
-        sd_id128_t boot_id;
-        char sid[SD_ID128_STRING_MAX];
-        int r;
-        usec_t realtime, monotonic;
         _cleanup_free_ char *cursor = NULL;
         const void *data;
         size_t length;
+        usec_t monotonic, realtime;
+        sd_id128_t journal_boot_id;
+        int r;
 
         assert(j);
+        assert(display_ts);
+        assert(boot_id);
+        assert(previous_display_ts);
+        assert(previous_boot_id);
 
-        sd_journal_set_data_threshold(j, 0);
+        (void) sd_journal_set_data_threshold(j, 0);
+
+        r = sd_journal_get_cursor(j, &cursor);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get cursor: %m");
 
         r = sd_journal_get_realtime_usec(j, &realtime);
         if (r < 0)
                 return log_error_errno(r, "Failed to get realtime timestamp: %m");
 
-        r = sd_journal_get_monotonic_usec(j, &monotonic, &boot_id);
+        r = sd_journal_get_monotonic_usec(j, &monotonic, &journal_boot_id);
         if (r < 0)
                 return log_error_errno(r, "Failed to get monotonic timestamp: %m");
 
-        r = sd_journal_get_cursor(j, &cursor);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get cursor: %m");
-
         fprintf(f,
                 "__CURSOR=%s\n"
                 "__REALTIME_TIMESTAMP="USEC_FMT"\n"
@@ -788,7 +826,7 @@
                 cursor,
                 realtime,
                 monotonic,
-                sd_id128_to_string(boot_id, sid));
+                SD_ID128_TO_STRING(journal_boot_id));
 
         JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
                 size_t fieldlen;
@@ -908,6 +946,12 @@
         struct json_data *d;
         int r;
 
+        assert(name);
+        assert(value);
+
+        if (size == SIZE_MAX)
+                size = strlen(value);
+
         if (!(flags & OUTPUT_SHOW_ALL) && strlen(name) + 1 + size >= JSON_THRESHOLD)
                 r = json_variant_new_null(&v);
         else if (utf8_is_printable(value, size))
@@ -976,7 +1020,7 @@
         if (!journal_field_valid(data, fieldlen, true))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid field.");
 
-        name = strndupa(data, fieldlen);
+        name = strndupa_safe(data, fieldlen);
         if (output_fields && !set_contains(output_fields, name))
                 return 0;
 
@@ -990,55 +1034,62 @@
                 unsigned n_columns,
                 OutputFlags flags,
                 const Set *output_fields,
-                const size_t highlight[2]) {
+                const size_t highlight[2],
+                const dual_timestamp *display_ts,
+                const sd_id128_t *boot_id,
+                const dual_timestamp *previous_display_ts,
+                const sd_id128_t *previous_boot_id) {
 
-        char sid[SD_ID128_STRING_MAX], usecbuf[DECIMAL_STR_MAX(usec_t)];
+        char usecbuf[DECIMAL_STR_MAX(usec_t)];
         _cleanup_(json_variant_unrefp) JsonVariant *object = NULL;
         _cleanup_free_ char *cursor = NULL;
-        uint64_t realtime, monotonic;
         JsonVariant **array = NULL;
         struct json_data *d;
-        sd_id128_t boot_id;
         Hashmap *h = NULL;
         size_t n = 0;
+        usec_t realtime, monotonic;
+        sd_id128_t journal_boot_id;
         int r;
 
         assert(j);
+        assert(display_ts);
+        assert(boot_id);
+        assert(previous_display_ts);
+        assert(previous_boot_id);
 
         (void) sd_journal_set_data_threshold(j, flags & OUTPUT_SHOW_ALL ? 0 : JSON_THRESHOLD);
 
-        r = sd_journal_get_realtime_usec(j, &realtime);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get realtime timestamp: %m");
-
-        r = sd_journal_get_monotonic_usec(j, &monotonic, &boot_id);
-        if (r < 0)
-                return log_error_errno(r, "Failed to get monotonic timestamp: %m");
-
         r = sd_journal_get_cursor(j, &cursor);
         if (r < 0)
                 return log_error_errno(r, "Failed to get cursor: %m");
 
+        r = sd_journal_get_realtime_usec(j, &realtime);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get realtime timestamp: %m");
+
+        r = sd_journal_get_monotonic_usec(j, &monotonic, &journal_boot_id);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get monotonic timestamp: %m");
+
         h = hashmap_new(&string_hash_ops);
         if (!h)
                 return log_oom();
 
-        r = update_json_data(h, flags, "__CURSOR", cursor, strlen(cursor));
+        r = update_json_data(h, flags, "__CURSOR", cursor, SIZE_MAX);
         if (r < 0)
                 goto finish;
 
         xsprintf(usecbuf, USEC_FMT, realtime);
-        r = update_json_data(h, flags, "__REALTIME_TIMESTAMP", usecbuf, strlen(usecbuf));
+        r = update_json_data(h, flags, "__REALTIME_TIMESTAMP", usecbuf, SIZE_MAX);
         if (r < 0)
                 goto finish;
 
         xsprintf(usecbuf, USEC_FMT, monotonic);
-        r = update_json_data(h, flags, "__MONOTONIC_TIMESTAMP", usecbuf, strlen(usecbuf));
+        r = update_json_data(h, flags, "__MONOTONIC_TIMESTAMP", usecbuf, SIZE_MAX);
         if (r < 0)
                 goto finish;
 
-        sd_id128_to_string(boot_id, sid);
-        r = update_json_data(h, flags, "_BOOT_ID", sid, strlen(sid));
+        r = update_json_data(h, flags, "_BOOT_ID", SD_ID128_TO_STRING(journal_boot_id), SIZE_MAX);
         if (r < 0)
                 goto finish;
 
@@ -1105,12 +1156,8 @@
 
 finish:
         while ((d = hashmap_steal_first(h))) {
-                size_t k;
-
                 json_variant_unref(d->name);
-                for (k = 0; k < d->n_values; k++)
-                        json_variant_unref(d->values[k]);
-
+                json_variant_unref_many(d->values, d->n_values);
                 free(d);
         }
 
@@ -1186,13 +1233,21 @@
                 unsigned n_columns,
                 OutputFlags flags,
                 const Set *output_fields,
-                const size_t highlight[2]) {
+                const size_t highlight[2],
+                const dual_timestamp *display_ts,
+                const sd_id128_t *boot_id,
+                const dual_timestamp *previous_display_ts,
+                const sd_id128_t *previous_boot_id) {
 
         int r, prio = LOG_INFO;
         const char *field;
 
         assert(j);
         assert(f);
+        assert(display_ts);
+        assert(boot_id);
+        assert(previous_display_ts);
+        assert(previous_boot_id);
 
         (void) sd_journal_set_data_threshold(j, 0);
 
@@ -1232,20 +1287,84 @@
         return 0;
 }
 
-static int (*output_funcs[_OUTPUT_MODE_MAX])(
+static int get_display_timestamp(
+                sd_journal *j,
+                dual_timestamp *ret_display_ts,
+                sd_id128_t *ret_boot_id) {
+
+        const void *data;
+        _cleanup_free_ char *realtime = NULL, *monotonic = NULL;
+        size_t length = 0, realtime_len = 0, monotonic_len = 0;
+        const ParseFieldVec message_fields[] = {
+                PARSE_FIELD_VEC_ENTRY("_SOURCE_REALTIME_TIMESTAMP=", &realtime, &realtime_len),
+                PARSE_FIELD_VEC_ENTRY("_SOURCE_MONOTONIC_TIMESTAMP=", &monotonic, &monotonic_len),
+        };
+        int r;
+        bool realtime_good = false, monotonic_good = false, boot_id_good = false;
+
+        assert(j);
+        assert(ret_display_ts);
+        assert(ret_boot_id);
+
+        JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
+                r = parse_fieldv(data, length, message_fields, ELEMENTSOF(message_fields));
+                if (r < 0)
+                        return r;
+
+                if (realtime && monotonic)
+                        break;
+        }
+        if (r < 0)
+                return r;
+
+        if (realtime)
+                realtime_good = safe_atou64(realtime, &ret_display_ts->realtime) >= 0;
+        if (!realtime_good || !VALID_REALTIME(ret_display_ts->realtime))
+                realtime_good = sd_journal_get_realtime_usec(j, &ret_display_ts->realtime) >= 0;
+        if (!realtime_good)
+                ret_display_ts->realtime = USEC_INFINITY;
+
+        if (monotonic)
+                monotonic_good = safe_atou64(monotonic, &ret_display_ts->monotonic) >= 0;
+        if (!monotonic_good || !VALID_MONOTONIC(ret_display_ts->monotonic))
+                monotonic_good = boot_id_good = sd_journal_get_monotonic_usec(j, &ret_display_ts->monotonic, ret_boot_id) >= 0;
+        if (!monotonic_good)
+                ret_display_ts->monotonic = USEC_INFINITY;
+
+        if (!boot_id_good)
+                boot_id_good = sd_journal_get_monotonic_usec(j, NULL, ret_boot_id) >= 0;
+        if (!boot_id_good)
+                *ret_boot_id = SD_ID128_NULL;
+
+        /* Restart all data before */
+        sd_journal_restart_data(j);
+        sd_journal_restart_unique(j);
+        sd_journal_restart_fields(j);
+
+        return 0;
+}
+
+typedef int (*output_func_t)(
                 FILE *f,
                 sd_journal *j,
                 OutputMode mode,
                 unsigned n_columns,
                 OutputFlags flags,
                 const Set *output_fields,
-                const size_t highlight[2]) = {
+                const size_t highlight[2],
+                const dual_timestamp *display_ts,
+                const sd_id128_t *boot_id,
+                const dual_timestamp *previous_display_ts,
+                const sd_id128_t *previous_boot_id);
 
+
+static output_func_t output_funcs[_OUTPUT_MODE_MAX] = {
         [OUTPUT_SHORT]             = output_short,
         [OUTPUT_SHORT_ISO]         = output_short,
         [OUTPUT_SHORT_ISO_PRECISE] = output_short,
         [OUTPUT_SHORT_PRECISE]     = output_short,
         [OUTPUT_SHORT_MONOTONIC]   = output_short,
+        [OUTPUT_SHORT_DELTA]       = output_short,
         [OUTPUT_SHORT_UNIX]        = output_short,
         [OUTPUT_SHORT_FULL]        = output_short,
         [OUTPUT_VERBOSE]           = output_verbose,
@@ -1264,24 +1383,48 @@
                 OutputMode mode,
                 unsigned n_columns,
                 OutputFlags flags,
-                char **output_fields,
+                Set *output_fields,
                 const size_t highlight[2],
-                bool *ellipsized) {
+                bool *ellipsized,
+                dual_timestamp *previous_display_ts,
+                sd_id128_t *previous_boot_id) {
 
-        _cleanup_set_free_ Set *fields = NULL;
+        dual_timestamp display_ts = DUAL_TIMESTAMP_NULL;
+        sd_id128_t boot_id = SD_ID128_NULL;
         int r;
 
         assert(mode >= 0);
         assert(mode < _OUTPUT_MODE_MAX);
+        assert(previous_display_ts);
+        assert(previous_boot_id);
 
         if (n_columns <= 0)
                 n_columns = columns();
 
-        r = set_put_strdupv(&fields, output_fields);
+        r = get_display_timestamp(j, &display_ts, &boot_id);
+        if (r == -EBADMSG) {
+                log_debug_errno(r, "Skipping message we can't read: %m");
+                return 0;
+        }
         if (r < 0)
-                return r;
+                return log_error_errno(r, "Failed to get journal fields: %m");
 
-        r = output_funcs[mode](f, j, mode, n_columns, flags, fields, highlight);
+        r = output_funcs[mode](
+                        f,
+                        j,
+                        mode,
+                        n_columns,
+                        flags,
+                        output_fields,
+                        highlight,
+                        &display_ts,
+                        &boot_id,
+                        previous_display_ts,
+                        previous_boot_id);
+
+        /* Store timestamp and boot ID for next iteration */
+        *previous_display_ts = display_ts;
+        *previous_boot_id = boot_id;
 
         if (ellipsized && r > 0)
                 *ellipsized = true;
@@ -1318,6 +1461,8 @@
         unsigned line = 0;
         bool need_seek = false;
         int warn_cutoff = flags & OUTPUT_WARN_CUTOFF;
+        dual_timestamp previous_display_ts = DUAL_TIMESTAMP_NULL;
+        sd_id128_t previous_boot_id = SD_ID128_NULL;
 
         assert(j);
         assert(mode >= 0);
@@ -1356,7 +1501,7 @@
                         /* -ESTALE is returned if the timestamp is not from this boot */
                         if (r == -ESTALE)
                                 continue;
-                        else if (r < 0)
+                        if (r < 0)
                                 return log_error_errno(r, "Failed to get journal time: %m");
 
                         if (usec < not_before)
@@ -1366,7 +1511,17 @@
                 line++;
                 maybe_print_begin_newline(f, &flags);
 
-                r = show_journal_entry(f, j, mode, n_columns, flags, NULL, NULL, ellipsized);
+                r = show_journal_entry(
+                                f,
+                                j,
+                                mode,
+                                n_columns,
+                                flags,
+                                /* output_fields= */ NULL,
+                                /* highlight= */ NULL,
+                                ellipsized,
+                                &previous_display_ts,
+                                &previous_boot_id);
                 if (r < 0)
                         return r;
         }
@@ -1498,7 +1653,7 @@
         if (r == 0 && endswith(unit, ".slice")) {
                 const char *m5;
 
-                m5 = strjoina("_SYSTEMD_SLICE=", unit);
+                m5 = strjoina("_SYSTEMD_USER_SLICE=", unit);
 
                 /* Show all messages belonging to a slice */
                 (void)(
@@ -1512,9 +1667,9 @@
 }
 
 static int get_boot_id_for_machine(const char *machine, sd_id128_t *boot_id) {
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
-        _cleanup_close_ int pidnsfd = -1, mntnsfd = -1, rootfd = -1;
-        char buf[ID128_UUID_STRING_MAX];
+        _cleanup_close_pair_ int pair[2] = PIPE_EBADF;
+        _cleanup_close_ int pidnsfd = -EBADF, mntnsfd = -EBADF, rootfd = -EBADF;
+        char buf[SD_ID128_UUID_STRING_MAX];
         pid_t pid, child;
         ssize_t k;
         int r;
diff --git a/src/shared/logs-show.h b/src/shared/logs-show.h
index 71ebe13..df06b1c 100644
--- a/src/shared/logs-show.h
+++ b/src/shared/logs-show.h
@@ -11,7 +11,6 @@
 #include "macro.h"
 #include "output-mode.h"
 #include "time-util.h"
-#include "util.h"
 
 int show_journal_entry(
                 FILE *f,
@@ -19,9 +18,11 @@
                 OutputMode mode,
                 unsigned n_columns,
                 OutputFlags flags,
-                char **output_fields,
+                Set *output_fields,
                 const size_t highlight[2],
-                bool *ellipsized);
+                bool *ellipsized,
+                dual_timestamp *previous_display_ts,
+                sd_id128_t *previous_boot_id);
 int show_journal(
                 FILE *f,
                 sd_journal *j,
diff --git a/src/shared/loop-util.c b/src/shared/loop-util.c
index c038e7a..049ec21 100644
--- a/src/shared/loop-util.c
+++ b/src/shared/loop-util.c
@@ -17,13 +17,18 @@
 
 #include "alloc-util.h"
 #include "blockdev-util.h"
+#include "data-fd-util.h"
 #include "device-util.h"
+#include "devnum-util.h"
+#include "dissect-image.h"
+#include "env-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "loop-util.h"
 #include "missing_loop.h"
 #include "parse-util.h"
+#include "path-util.h"
 #include "random-util.h"
 #include "stat-util.h"
 #include "stdio-util.h"
@@ -61,99 +66,224 @@
         if (r < 0)
                 return log_debug_errno(r, "Failed to read current uevent sequence number: %m");
 
-        truncate_nl(p);
-
-        r = safe_atou64(p, ret);
+        r = safe_atou64(strstrip(p), ret);
         if (r < 0)
                 return log_debug_errno(r, "Failed to parse current uevent sequence number: %s", p);
 
         return 0;
 }
 
-static int device_has_block_children(sd_device *d) {
-        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
-        const char *main_sn, *main_ss;
-        sd_device *q;
-        int r;
+static int open_lock_fd(int primary_fd, int operation) {
+        _cleanup_close_ int lock_fd = -EBADF;
 
-        assert(d);
+        assert(primary_fd >= 0);
+        assert(IN_SET(operation & ~LOCK_NB, LOCK_SH, LOCK_EX));
 
-        /* Checks if the specified device currently has block device children (i.e. partition block
-         * devices). */
+        lock_fd = fd_reopen(primary_fd, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+        if (lock_fd < 0)
+                return lock_fd;
 
-        r = sd_device_get_sysname(d, &main_sn);
-        if (r < 0)
-                return r;
+        if (flock(lock_fd, operation) < 0)
+                return -errno;
 
-        r = sd_device_get_subsystem(d, &main_ss);
-        if (r < 0)
-                return r;
+        return TAKE_FD(lock_fd);
+}
 
-        if (!streq(main_ss, "block"))
-                return -EINVAL;
+static int loop_configure_verify_direct_io(int fd, const struct loop_config *c) {
+        assert(fd);
+        assert(c);
 
-        r = sd_device_enumerator_new(&e);
-        if (r < 0)
-                return r;
+        if (FLAGS_SET(c->info.lo_flags, LO_FLAGS_DIRECT_IO)) {
+                struct loop_info64 info;
 
-        r = sd_device_enumerator_allow_uninitialized(e);
-        if (r < 0)
-                return r;
+                if (ioctl(fd, LOOP_GET_STATUS64, &info) < 0)
+                        return log_debug_errno(errno, "Failed to issue LOOP_GET_STATUS64: %m");
 
-        r = sd_device_enumerator_add_match_parent(e, d);
-        if (r < 0)
-                return r;
+#if HAVE_VALGRIND_MEMCHECK_H
+                VALGRIND_MAKE_MEM_DEFINED(&info, sizeof(info));
+#endif
 
-        FOREACH_DEVICE(e, q) {
-                const char *ss, *sn;
-
-                r = sd_device_get_subsystem(q, &ss);
-                if (r < 0)
-                        continue;
-
-                if (!streq(ss, "block"))
-                        continue;
-
-                r = sd_device_get_sysname(q, &sn);
-                if (r < 0)
-                        continue;
-
-                if (streq(sn, main_sn))
-                        continue;
-
-                return 1; /* we have block device children */
+                /* On older kernels (<= 5.3) it was necessary to set the block size of the loopback block
+                 * device to the logical block size of the underlying file system. Since there was no nice
+                 * way to query the value, we are not bothering to do this however. On newer kernels the
+                 * block size is propagated automatically and does not require intervention from us. We'll
+                 * check here if enabling direct IO worked, to make this easily debuggable however.
+                 *
+                 * (Should anyone really care and actually wants direct IO on old kernels: it might be worth
+                 * enabling direct IO with iteratively larger block sizes until it eventually works.) */
+                if (!FLAGS_SET(info.lo_flags, LO_FLAGS_DIRECT_IO))
+                        log_debug("Could not enable direct IO mode, proceeding in buffered IO mode.");
         }
 
         return 0;
 }
 
-static int loop_configure(
-                int fd,
-                int nr,
-                const struct loop_config *c,
-                bool *try_loop_configure,
-                uint64_t *ret_seqnum_not_before,
-                usec_t *ret_timestamp_not_before) {
-
-        _cleanup_(sd_device_unrefp) sd_device *d = NULL;
-        _cleanup_free_ char *sysname = NULL;
-        _cleanup_close_ int lock_fd = -1;
-        uint64_t seqnum;
-        usec_t timestamp;
+static int loop_configure_verify(int fd, const struct loop_config *c) {
+        bool broken = false;
         int r;
 
         assert(fd >= 0);
-        assert(nr >= 0);
         assert(c);
-        assert(try_loop_configure);
 
-        if (asprintf(&sysname, "loop%i", nr) < 0)
-                return -ENOMEM;
+        if (c->block_size != 0) {
+                uint32_t ssz;
 
-        r = sd_device_new_from_subsystem_sysname(&d, "block", sysname);
+                r = blockdev_get_sector_size(fd, &ssz);
+                if (r < 0)
+                        return r;
+
+                if (ssz != c->block_size) {
+                        log_debug("LOOP_CONFIGURE didn't honour requested block size %" PRIu32 ", got %" PRIu32 " instead. Ignoring.", c->block_size, ssz);
+                        broken = true;
+                }
+        }
+
+        if (c->info.lo_sizelimit != 0) {
+                /* Kernel 5.8 vanilla doesn't properly propagate the size limit into the
+                 * block device. If it's used, let's immediately check if it had the desired
+                 * effect hence. And if not use classic LOOP_SET_STATUS64. */
+                uint64_t z;
+
+                if (ioctl(fd, BLKGETSIZE64, &z) < 0)
+                        return -errno;
+
+                if (z != c->info.lo_sizelimit) {
+                        log_debug("LOOP_CONFIGURE is broken, doesn't honour .info.lo_sizelimit. Falling back to LOOP_SET_STATUS64.");
+                        broken = true;
+                }
+        }
+
+        if (FLAGS_SET(c->info.lo_flags, LO_FLAGS_PARTSCAN)) {
+                /* Kernel 5.8 vanilla doesn't properly propagate the partition scanning flag
+                 * into the block device. Let's hence verify if things work correctly here
+                 * before returning. */
+
+                r = blockdev_partscan_enabled(fd);
+                if (r < 0)
+                        return r;
+                if (r == 0) {
+                        log_debug("LOOP_CONFIGURE is broken, doesn't honour LO_FLAGS_PARTSCAN. Falling back to LOOP_SET_STATUS64.");
+                        broken = true;
+                }
+        }
+
+        r = loop_configure_verify_direct_io(fd, c);
         if (r < 0)
                 return r;
 
+        return !broken;
+}
+
+static int loop_configure_fallback(int fd, const struct loop_config *c) {
+        struct loop_info64 info_copy;
+        int r;
+
+        assert(fd >= 0);
+        assert(c);
+
+        /* Only some of the flags LOOP_CONFIGURE can set are also settable via LOOP_SET_STATUS64, hence mask
+         * them out. */
+        info_copy = c->info;
+        info_copy.lo_flags &= LOOP_SET_STATUS_SETTABLE_FLAGS;
+
+        /* Since kernel commit 5db470e229e22b7eda6e23b5566e532c96fb5bc3 (kernel v5.0) the LOOP_SET_STATUS64
+         * ioctl can return EAGAIN in case we change the info.lo_offset field, if someone else is accessing the
+         * block device while we try to reconfigure it. This is a pretty common case, since udev might
+         * instantly start probing the device as soon as we attach an fd to it. Hence handle it in two ways:
+         * first, let's take the BSD lock to ensure that udev will not step in between the point in
+         * time where we attach the fd and where we reconfigure the device. Secondly, let's wait 50ms on
+         * EAGAIN and retry. The former should be an efficient mechanism to avoid we have to wait 50ms
+         * needlessly if we are just racing against udev. The latter is protection against all other cases,
+         * i.e. peers that do not take the BSD lock. */
+
+        for (unsigned n_attempts = 0;;) {
+                if (ioctl(fd, LOOP_SET_STATUS64, &info_copy) >= 0)
+                        break;
+
+                if (errno != EAGAIN || ++n_attempts >= 64)
+                        return log_debug_errno(errno, "Failed to configure loopback block device: %m");
+
+                /* Sleep some random time, but at least 10ms, at most 250ms. Increase the delay the more
+                 * failed attempts we see */
+                (void) usleep(UINT64_C(10) * USEC_PER_MSEC +
+                              random_u64_range(UINT64_C(240) * USEC_PER_MSEC * n_attempts/64));
+        }
+
+        /* Work around a kernel bug, where changing offset/size of the loopback device doesn't correctly
+         * invalidate the buffer cache. For details see:
+         *
+         *     https://android.googlesource.com/platform/system/apex/+/bef74542fbbb4cd629793f4efee8e0053b360570
+         *
+         * This was fixed in kernel 5.0, see:
+         *
+         *     https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5db470e229e22b7eda6e23b5566e532c96fb5bc3
+         *
+         * We'll run the work-around here in the legacy LOOP_SET_STATUS64 codepath. In the LOOP_CONFIGURE
+         * codepath above it should not be necessary. */
+        if (c->info.lo_offset != 0 || c->info.lo_sizelimit != 0)
+                if (ioctl(fd, BLKFLSBUF, 0) < 0)
+                        log_debug_errno(errno, "Failed to issue BLKFLSBUF ioctl, ignoring: %m");
+
+        /* If a block size is requested then try to configure it. If that doesn't work, ignore errors, but
+         * afterwards, let's validate what is in effect, and if it doesn't match what we want, fail */
+        if (c->block_size != 0) {
+                uint32_t ssz;
+
+                if (ioctl(fd, LOOP_SET_BLOCK_SIZE, (unsigned long) c->block_size) < 0)
+                        log_debug_errno(errno, "Failed to set sector size, ignoring: %m");
+
+                r = blockdev_get_sector_size(fd, &ssz);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to read sector size: %m");
+                if (ssz != c->block_size)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Sector size of loopback device doesn't match what we requested, refusing.");
+        }
+
+        /* LO_FLAGS_DIRECT_IO is a flags we need to configure via explicit ioctls. */
+        if (FLAGS_SET(c->info.lo_flags, LO_FLAGS_DIRECT_IO))
+                if (ioctl(fd, LOOP_SET_DIRECT_IO, 1UL) < 0)
+                        log_debug_errno(errno, "Failed to enable direct IO mode, ignoring: %m");
+
+        return loop_configure_verify_direct_io(fd, c);
+}
+
+static int loop_configure(
+                int nr,
+                int open_flags,
+                int lock_op,
+                const struct loop_config *c,
+                LoopDevice **ret) {
+
+        static bool loop_configure_broken = false;
+
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        _cleanup_(cleanup_clear_loop_close) int loop_with_fd = -EBADF; /* This must be declared before lock_fd. */
+        _cleanup_close_ int fd = -EBADF, lock_fd = -EBADF;
+        _cleanup_free_ char *node = NULL;
+        uint64_t diskseq = 0, seqnum = UINT64_MAX;
+        usec_t timestamp = USEC_INFINITY;
+        dev_t devno;
+        int r;
+
+        assert(nr >= 0);
+        assert(c);
+        assert(ret);
+
+        if (asprintf(&node, "/dev/loop%i", nr) < 0)
+                return -ENOMEM;
+
+        r = sd_device_new_from_devname(&dev, node);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_devnum(dev, &devno);
+        if (r < 0)
+                return r;
+
+        fd = sd_device_open(dev, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|open_flags);
+        if (fd < 0)
+                return fd;
+
         /* Let's lock the device before we do anything. We take the BSD lock on a second, separately opened
          * fd for the device. udev after all watches for close() events (specifically IN_CLOSE_WRITE) on
          * block devices to reprobe them, hence by having a separate fd we will later close() we can ensure
@@ -161,33 +291,32 @@
          * long time udev would possibly never run on it again, even though the fd is unlocked, simply
          * because we never close() it. It also has the nice benefit we can use the _cleanup_close_ logic to
          * automatically release the lock, after we are done. */
-        lock_fd = fd_reopen(fd, O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+        lock_fd = open_lock_fd(fd, LOCK_EX);
         if (lock_fd < 0)
                 return lock_fd;
-        if (flock(lock_fd, LOCK_EX) < 0)
-                return -errno;
+
+        /* Let's see if backing file is really unattached. Someone may already attach a backing file without
+         * taking BSD lock. */
+        r = loop_is_bound(fd);
+        if (r < 0)
+                return r;
+        if (r > 0)
+                return -EBUSY;
 
         /* Let's see if the device is really detached, i.e. currently has no associated partition block
          * devices. On various kernels (such as 5.8) it is possible to have a loopback block device that
-         * superficially is detached but still has partition block devices associated for it. They only go
-         * away when the device is reattached. (Yes, LOOP_CLR_FD doesn't work then, because officially
-         * nothing is attached and LOOP_CTL_REMOVE doesn't either, since it doesn't care about partition
-         * block devices. */
-        r = device_has_block_children(d);
+         * superficially is detached but still has partition block devices associated for it. Let's then
+         * manually remove the partitions via BLKPG, and tell the caller we did that via EUCLEAN, so they try
+         * again. */
+        r = block_device_remove_all_partitions(dev, fd);
         if (r < 0)
                 return r;
-        if (r > 0) {
-                r = loop_is_bound(fd);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        return -EBUSY;
+        if (r > 0)
+                /* Removed all partitions. Let's report this to the caller, to try again, and count this as
+                 * an attempt. */
+                return -EUCLEAN;
 
-                return -EUCLEAN; /* Bound but children? Tell caller to reattach something so that the
-                                  * partition block devices are gone too. */
-        }
-
-        if (*try_loop_configure) {
+        if (!loop_configure_broken) {
                 /* Acquire uevent seqnum immediately before attaching the loopback device. This allows
                  * callers to ignore all uevents with a seqnum before this one, if they need to associate
                  * uevent with this attachment. Doing so isn't race-free though, as uevents that happen in
@@ -197,6 +326,7 @@
                 r = get_current_uevent_seqnum(&seqnum);
                 if (r < 0)
                         return r;
+
                 timestamp = now(CLOCK_MONOTONIC);
 
                 if (ioctl(fd, LOOP_CONFIGURE, c) < 0) {
@@ -207,44 +337,16 @@
                         if (!ERRNO_IS_NOT_SUPPORTED(errno) && errno != EINVAL)
                                 return -errno;
 
-                        *try_loop_configure = false;
+                        loop_configure_broken = true;
                 } else {
-                        bool good = true;
+                        loop_with_fd = TAKE_FD(fd);
 
-                        if (c->info.lo_sizelimit != 0) {
-                                /* Kernel 5.8 vanilla doesn't properly propagate the size limit into the
-                                 * block device. If it's used, let's immediately check if it had the desired
-                                 * effect hence. And if not use classic LOOP_SET_STATUS64. */
-                                uint64_t z;
-
-                                if (ioctl(fd, BLKGETSIZE64, &z) < 0) {
-                                        r = -errno;
-                                        goto fail;
-                                }
-
-                                if (z != c->info.lo_sizelimit) {
-                                        log_debug("LOOP_CONFIGURE is broken, doesn't honour .lo_sizelimit. Falling back to LOOP_SET_STATUS64.");
-                                        good = false;
-                                }
-                        }
-
-                        if (FLAGS_SET(c->info.lo_flags, LO_FLAGS_PARTSCAN)) {
-                                /* Kernel 5.8 vanilla doesn't properly propagate the partition scanning flag
-                                 * into the block device. Let's hence verify if things work correctly here
-                                 * before returning. */
-
-                                r = blockdev_partscan_enabled(fd);
-                                if (r < 0)
-                                        goto fail;
-                                if (r == 0) {
-                                        log_debug("LOOP_CONFIGURE is broken, doesn't honour LO_FLAGS_PARTSCAN. Falling back to LOOP_SET_STATUS64.");
-                                        good = false;
-                                }
-                        }
-
-                        if (!good) {
+                        r = loop_configure_verify(loop_with_fd, c);
+                        if (r < 0)
+                                return r;
+                        if (r == 0) {
                                 /* LOOP_CONFIGURE doesn't work. Remember that. */
-                                *try_loop_configure = false;
+                                loop_configure_broken = true;
 
                                 /* We return EBUSY here instead of retrying immediately with LOOP_SET_FD,
                                  * because LOOP_CLR_FD is async: if the operation cannot be executed right
@@ -252,118 +354,86 @@
                                  * good chance we cannot actually reuse the loopback device right-away. Hence
                                  * let's assume it's busy, avoid the trouble and let the calling loop call us
                                  * again with a new, likely unused device. */
-                                r = -EBUSY;
-                                goto fail;
+                                return -EBUSY;
                         }
-
-                        if (ret_seqnum_not_before)
-                                *ret_seqnum_not_before = seqnum;
-                        if (ret_timestamp_not_before)
-                                *ret_timestamp_not_before = timestamp;
-
-                        return 0;
                 }
         }
 
-        /* Let's read the seqnum again, to shorten the window. */
-        r = get_current_uevent_seqnum(&seqnum);
-        if (r < 0)
+        if (loop_configure_broken) {
+                /* Let's read the seqnum again, to shorten the window. */
+                r = get_current_uevent_seqnum(&seqnum);
+                if (r < 0)
+                        return r;
+
+                timestamp = now(CLOCK_MONOTONIC);
+
+                if (ioctl(fd, LOOP_SET_FD, c->fd) < 0)
+                        return -errno;
+
+                loop_with_fd = TAKE_FD(fd);
+
+                r = loop_configure_fallback(loop_with_fd, c);
+                if (r < 0)
+                        return r;
+        }
+
+        r = fd_get_diskseq(loop_with_fd, &diskseq);
+        if (r < 0 && r != -EOPNOTSUPP)
                 return r;
-        timestamp = now(CLOCK_MONOTONIC);
 
-        /* Since kernel commit 5db470e229e22b7eda6e23b5566e532c96fb5bc3 (kernel v5.0) the LOOP_SET_STATUS64
-         * ioctl can return EAGAIN in case we change the lo_offset field, if someone else is accessing the
-         * block device while we try to reconfigure it. This is a pretty common case, since udev might
-         * instantly start probing the device as soon as we attach an fd to it. Hence handle it in two ways:
-         * first, let's take the BSD lock to ensure that udev will not step in between the point in
-         * time where we attach the fd and where we reconfigure the device. Secondly, let's wait 50ms on
-         * EAGAIN and retry. The former should be an efficient mechanism to avoid we have to wait 50ms
-         * needlessly if we are just racing against udev. The latter is protection against all other cases,
-         * i.e. peers that do not take the BSD lock. */
-
-        if (ioctl(fd, LOOP_SET_FD, c->fd) < 0)
-                return -errno;
-
-        for (unsigned n_attempts = 0;;) {
-                if (ioctl(fd, LOOP_SET_STATUS64, &c->info) >= 0)
-                        break;
-                if (errno != EAGAIN || ++n_attempts >= 64) {
-                        r = log_debug_errno(errno, "Failed to configure loopback device: %m");
-                        goto fail;
-                }
-
-                /* Sleep some random time, but at least 10ms, at most 250ms. Increase the delay the more
-                 * failed attempts we see */
-                (void) usleep(UINT64_C(10) * USEC_PER_MSEC +
-                              random_u64_range(UINT64_C(240) * USEC_PER_MSEC * n_attempts/64));
+        switch (lock_op & ~LOCK_NB) {
+        case LOCK_EX: /* Already in effect */
+                break;
+        case LOCK_SH: /* Downgrade */
+                if (flock(lock_fd, lock_op) < 0)
+                        return -errno;
+                break;
+        case LOCK_UN: /* Release */
+                lock_fd = safe_close(lock_fd);
+                break;
+        default:
+                assert_not_reached();
         }
 
-        if (ret_seqnum_not_before)
-                *ret_seqnum_not_before = seqnum;
-        if (ret_timestamp_not_before)
-                *ret_timestamp_not_before = timestamp;
+        LoopDevice *d = new(LoopDevice, 1);
+        if (!d)
+                return -ENOMEM;
 
-        return 0;
+        *d = (LoopDevice) {
+                .n_ref = 1,
+                .fd = TAKE_FD(loop_with_fd),
+                .lock_fd = TAKE_FD(lock_fd),
+                .node = TAKE_PTR(node),
+                .nr = nr,
+                .devno = devno,
+                .dev = TAKE_PTR(dev),
+                .diskseq = diskseq,
+                .uevent_seqnum_not_before = seqnum,
+                .timestamp_not_before = timestamp,
+                .sector_size = c->block_size,
+        };
 
-fail:
-        (void) ioctl(fd, LOOP_CLR_FD);
-        return r;
-}
-
-static int attach_empty_file(int loop, int nr) {
-        _cleanup_close_ int fd = -1;
-
-        /* So here's the thing: on various kernels (5.8 at least) loop block devices might enter a state
-         * where they are detached but nonetheless have partitions, when used heavily. Accessing these
-         * partitions results in immediatey IO errors. There's no pretty way to get rid of them
-         * again. Neither LOOP_CLR_FD nor LOOP_CTL_REMOVE suffice (see above). What does work is to
-         * reassociate them with a new fd however. This is what we do here hence: we associate the devices
-         * with an empty file (i.e. an image that definitely has no partitions). We then immediately clear it
-         * again. This suffices to make the partitions go away. Ugly but appears to work. */
-
-        log_debug("Found unattached loopback block device /dev/loop%i with partitions. Attaching empty file to remove them.", nr);
-
-        fd = open_tmpfile_unlinkable(NULL, O_RDONLY);
-        if (fd < 0)
-                return fd;
-
-        if (flock(loop, LOCK_EX) < 0)
-                return -errno;
-
-        if (ioctl(loop, LOOP_SET_FD, fd) < 0)
-                return -errno;
-
-        if (ioctl(loop, LOOP_SET_STATUS64, &(struct loop_info64) {
-                                .lo_flags = LO_FLAGS_READ_ONLY|
-                                            LO_FLAGS_AUTOCLEAR|
-                                            LO_FLAGS_PARTSCAN, /* enable partscan, so that the partitions really go away */
-                        }) < 0)
-                return -errno;
-
-        if (ioctl(loop, LOOP_CLR_FD) < 0)
-                return -errno;
-
-        /* The caller is expected to immediately close the loopback device after this, so that the BSD lock
-         * is released, and udev sees the changes. */
+        *ret = TAKE_PTR(d);
         return 0;
 }
 
-int loop_device_make(
+static int loop_device_make_internal(
+                const char *path,
                 int fd,
                 int open_flags,
                 uint64_t offset,
                 uint64_t size,
+                uint32_t sector_size,
                 uint32_t loop_flags,
+                int lock_op,
                 LoopDevice **ret) {
 
-        _cleanup_free_ char *loopdev = NULL;
-        bool try_loop_configure = true;
+        _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
+        _cleanup_close_ int direct_io_fd = -EBADF, control = -EBADF;
+        _cleanup_free_ char *backing_file = NULL;
         struct loop_config config;
-        LoopDevice *d = NULL;
-        uint64_t seqnum = UINT64_MAX;
-        usec_t timestamp = USEC_INFINITY;
+        int r, f_flags;
         struct stat st;
-        int nr = -1, r;
 
         assert(fd >= 0);
         assert(ret);
@@ -373,59 +443,101 @@
                 return -errno;
 
         if (S_ISBLK(st.st_mode)) {
-                if (ioctl(fd, LOOP_GET_STATUS64, &config.info) >= 0) {
-                        /* Oh! This is a loopback device? That's interesting! */
-
-#if HAVE_VALGRIND_MEMCHECK_H
-                        /* Valgrind currently doesn't know LOOP_GET_STATUS64. Remove this once it does */
-                        VALGRIND_MAKE_MEM_DEFINED(&config.info, sizeof(config.info));
-#endif
-                        nr = config.info.lo_number;
-
-                        if (asprintf(&loopdev, "/dev/loop%i", nr) < 0)
-                                return -ENOMEM;
-                }
-
-                if (offset == 0 && IN_SET(size, 0, UINT64_MAX)) {
-                        _cleanup_close_ int copy = -1;
-
-                        /* If this is already a block device, store a copy of the fd as it is */
-
-                        copy = fcntl(fd, F_DUPFD_CLOEXEC, 3);
-                        if (copy < 0)
-                                return -errno;
-
-                        d = new(LoopDevice, 1);
-                        if (!d)
-                                return -ENOMEM;
-                        *d = (LoopDevice) {
-                                .fd = TAKE_FD(copy),
-                                .nr = nr,
-                                .node = TAKE_PTR(loopdev),
-                                .relinquished = true, /* It's not allocated by us, don't destroy it when this object is freed */
-                                .devno = st.st_rdev,
-                                .uevent_seqnum_not_before = UINT64_MAX,
-                                .timestamp_not_before = USEC_INFINITY,
-                        };
-
-                        *ret = d;
-                        return d->fd;
-                }
+                if (offset == 0 && IN_SET(size, 0, UINT64_MAX))
+                        /* If this is already a block device and we are supposed to cover the whole of it
+                         * then store an fd to the original open device node — and do not actually create an
+                         * unnecessary loopback device for it. */
+                        return loop_device_open_from_fd(fd, open_flags, lock_op, ret);
         } else {
                 r = stat_verify_regular(&st);
                 if (r < 0)
                         return r;
         }
 
-        _cleanup_close_ int control = -1;
-        _cleanup_(cleanup_clear_loop_close) int loop_with_fd = -1;
+        if (path) {
+                r = path_make_absolute_cwd(path, &backing_file);
+                if (r < 0)
+                        return r;
+
+                path_simplify(backing_file);
+        } else {
+                r = fd_get_path(fd, &backing_file);
+                if (r < 0)
+                        return r;
+        }
+
+        f_flags = fcntl(fd, F_GETFL);
+        if (f_flags < 0)
+                return -errno;
+
+        if (FLAGS_SET(loop_flags, LO_FLAGS_DIRECT_IO) != FLAGS_SET(f_flags, O_DIRECT)) {
+                /* If LO_FLAGS_DIRECT_IO is requested, then make sure we have the fd open with O_DIRECT, as
+                 * that's required. Conversely, if it's off require that O_DIRECT is off too (that's because
+                 * new kernels will implicitly enable LO_FLAGS_DIRECT_IO if O_DIRECT is set).
+                 *
+                 * Our intention here is that LO_FLAGS_DIRECT_IO is the primary knob, and O_DIRECT derived
+                 * from that automatically. */
+
+                direct_io_fd = fd_reopen(fd, (FLAGS_SET(loop_flags, LO_FLAGS_DIRECT_IO) ? O_DIRECT : 0)|O_CLOEXEC|O_NONBLOCK|open_flags);
+                if (direct_io_fd < 0) {
+                        if (!FLAGS_SET(loop_flags, LO_FLAGS_DIRECT_IO))
+                                return log_debug_errno(errno, "Failed to reopen file descriptor without O_DIRECT: %m");
+
+                        /* Some file systems might not support O_DIRECT, let's gracefully continue without it then. */
+                        log_debug_errno(errno, "Failed to enable O_DIRECT for backing file descriptor for loopback device. Continuing without.");
+                        loop_flags &= ~LO_FLAGS_DIRECT_IO;
+                } else
+                        fd = direct_io_fd; /* From now on, operate on our new O_DIRECT fd */
+        }
 
         control = open("/dev/loop-control", O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
         if (control < 0)
                 return -errno;
 
+        if (sector_size == 0)
+                /* If no sector size is specified, default to the classic default */
+                sector_size = 512;
+        else if (sector_size == UINT32_MAX) {
+
+                if (S_ISBLK(st.st_mode))
+                        /* If the sector size is specified as UINT32_MAX we'll propagate the sector size of
+                         * the underlying block device. */
+                        r = blockdev_get_sector_size(fd, &sector_size);
+                else {
+                        _cleanup_close_ int non_direct_io_fd = -1;
+                        int probe_fd;
+
+                        assert(S_ISREG(st.st_mode));
+
+                        /* If sector size is specified as UINT32_MAX, we'll try to probe the right sector
+                         * size of the image in question by looking for the GPT partition header at various
+                         * offsets. This of course only works if the image already has a disk label.
+                         *
+                         * So here we actually want to read the file contents ourselves. This is quite likely
+                         * not going to work if we managed to enable O_DIRECT, because in such a case there
+                         * are some pretty strict alignment requirements to offset, size and target, but
+                         * there's no way to query what alignment specifically is actually required. Hence,
+                         * let's avoid the mess, and temporarily open an fd without O_DIRECT for the probing
+                         * logic. */
+
+                        if (FLAGS_SET(loop_flags, LO_FLAGS_DIRECT_IO)) {
+                                non_direct_io_fd = fd_reopen(fd, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
+                                if (non_direct_io_fd < 0)
+                                        return non_direct_io_fd;
+
+                                probe_fd = non_direct_io_fd;
+                        } else
+                                probe_fd = fd;
+
+                        r = probe_sector_size(probe_fd, &sector_size);
+                }
+                if (r < 0)
+                        return r;
+        }
+
         config = (struct loop_config) {
                 .fd = fd,
+                .block_size = sector_size,
                 .info = {
                         /* Use the specified flags, but configure the read-only flag from the open flags, and force autoclear */
                         .lo_flags = (loop_flags & ~LO_FLAGS_READ_ONLY) | ((open_flags & O_ACCMODE) == O_RDONLY ? LO_FLAGS_READ_ONLY : 0) | LO_FLAGS_AUTOCLEAR,
@@ -437,75 +549,109 @@
         /* Loop around LOOP_CTL_GET_FREE, since at the moment we attempt to open the returned device it might
          * be gone already, taken by somebody else racing against us. */
         for (unsigned n_attempts = 0;;) {
-                _cleanup_close_ int loop = -1;
+                int nr;
+
+                /* Let's take a lock on the control device first. On a busy system, where many programs
+                 * attempt to allocate a loopback device at the same time, we might otherwise keep looping
+                 * around relatively heavy operations: asking for a free loopback device, then opening it,
+                 * validating it, attaching something to it. Let's serialize this whole operation, to make
+                 * unnecessary busywork less likely. Note that this is just something we do to optimize our
+                 * own code (and whoever else decides to use LOCK_EX locks for this), taking this lock is not
+                 * necessary, it just means it's less likely we have to iterate through this loop again and
+                 * again if our own code races against our own code.
+                 *
+                 * Note: our lock protocol is to take the /dev/loop-control lock first, and the block device
+                 * lock second, if both are taken, and always in this order, to avoid ABBA locking issues. */
+                if (flock(control, LOCK_EX) < 0)
+                        return -errno;
 
                 nr = ioctl(control, LOOP_CTL_GET_FREE);
                 if (nr < 0)
                         return -errno;
 
-                if (asprintf(&loopdev, "/dev/loop%i", nr) < 0)
-                        return -ENOMEM;
+                r = loop_configure(nr, open_flags, lock_op, &config, &d);
+                if (r >= 0)
+                        break;
 
-                loop = open(loopdev, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|open_flags);
-                if (loop < 0) {
-                        /* Somebody might've gotten the same number from the kernel, used the device,
-                         * and called LOOP_CTL_REMOVE on it. Let's retry with a new number. */
-                        if (!IN_SET(errno, ENOENT, ENXIO))
-                                return -errno;
-                } else {
-                        r = loop_configure(loop, nr, &config, &try_loop_configure, &seqnum, &timestamp);
-                        if (r >= 0) {
-                                loop_with_fd = TAKE_FD(loop);
-                                break;
-                        }
-                        if (r == -EUCLEAN) {
-                                /* Make left-over partition disappear hack (see above) */
-                                r = attach_empty_file(loop, nr);
-                                if (r < 0 && r != -EBUSY)
-                                        return r;
-                        } else if (r != -EBUSY)
-                                return r;
-                }
+                /* -ENODEV or friends: Somebody might've gotten the same number from the kernel, used the
+                 * device, and called LOOP_CTL_REMOVE on it. Let's retry with a new number.
+                 * -EBUSY: a file descriptor is already bound to the loopback block device.
+                 * -EUCLEAN: some left-over partition devices that were cleaned up. */
+                if (!ERRNO_IS_DEVICE_ABSENT(r) && !IN_SET(r, -EBUSY, -EUCLEAN))
+                        return r;
+
+                /* OK, this didn't work, let's try again a bit later, but first release the lock on the
+                 * control device */
+                if (flock(control, LOCK_UN) < 0)
+                        return -errno;
 
                 if (++n_attempts >= 64) /* Give up eventually */
                         return -EBUSY;
 
-                loopdev = mfree(loopdev);
-
                 /* Wait some random time, to make collision less likely. Let's pick a random time in the
                  * range 0ms…250ms, linearly scaled by the number of failed attempts. */
                 (void) usleep(random_u64_range(UINT64_C(10) * USEC_PER_MSEC +
                                                UINT64_C(240) * USEC_PER_MSEC * n_attempts/64));
         }
 
-        if (fstat(loop_with_fd, &st) < 0)
-                return -errno;
-        assert(S_ISBLK(st.st_mode));
+        d->backing_file = TAKE_PTR(backing_file);
 
-        d = new(LoopDevice, 1);
-        if (!d)
-                return -ENOMEM;
-        *d = (LoopDevice) {
-                .fd = TAKE_FD(loop_with_fd),
-                .node = TAKE_PTR(loopdev),
-                .nr = nr,
-                .devno = st.st_rdev,
-                .uevent_seqnum_not_before = seqnum,
-                .timestamp_not_before = timestamp,
-        };
+        log_debug("Successfully acquired %s, devno=%u:%u, nr=%i, diskseq=%" PRIu64,
+                  d->node,
+                  major(d->devno), minor(d->devno),
+                  d->nr,
+                  d->diskseq);
 
-        *ret = d;
-        return d->fd;
+        *ret = TAKE_PTR(d);
+        return 0;
+}
+
+static uint32_t loop_flags_mangle(uint32_t loop_flags) {
+        int r;
+
+        r = getenv_bool("SYSTEMD_LOOP_DIRECT_IO");
+        if (r < 0 && r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_LOOP_DIRECT_IO, ignoring: %m");
+
+        return UPDATE_FLAG(loop_flags, LO_FLAGS_DIRECT_IO, r != 0); /* Turn on LO_FLAGS_DIRECT_IO by default, unless explicitly configured to off. */
+}
+
+int loop_device_make(
+                int fd,
+                int open_flags,
+                uint64_t offset,
+                uint64_t size,
+                uint32_t sector_size,
+                uint32_t loop_flags,
+                int lock_op,
+                LoopDevice **ret) {
+
+        assert(fd >= 0);
+        assert(ret);
+
+        return loop_device_make_internal(
+                        NULL,
+                        fd,
+                        open_flags,
+                        offset,
+                        size,
+                        sector_size,
+                        loop_flags_mangle(loop_flags),
+                        lock_op,
+                        ret);
 }
 
 int loop_device_make_by_path(
                 const char *path,
                 int open_flags,
+                uint32_t sector_size,
                 uint32_t loop_flags,
+                int lock_op,
                 LoopDevice **ret) {
 
-        _cleanup_close_ int fd = -1;
-        int r;
+        int r, basic_flags, direct_flags, rdwr_flags;
+        _cleanup_close_ int fd = -EBADF;
+        bool direct = false;
 
         assert(path);
         assert(ret);
@@ -514,7 +660,20 @@
         /* Passing < 0 as open_flags here means we'll try to open the device writable if we can, retrying
          * read-only if we cannot. */
 
-        fd = open(path, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|(open_flags >= 0 ? open_flags : O_RDWR));
+        loop_flags = loop_flags_mangle(loop_flags);
+
+        /* Let's open with O_DIRECT if we can. But not all file systems support that, hence fall back to
+         * non-O_DIRECT mode automatically, if it fails. */
+
+        basic_flags = O_CLOEXEC|O_NONBLOCK|O_NOCTTY;
+        direct_flags = FLAGS_SET(loop_flags, LO_FLAGS_DIRECT_IO) ? O_DIRECT : 0;
+        rdwr_flags = open_flags >= 0 ? open_flags : O_RDWR;
+
+        fd = open(path, basic_flags|direct_flags|rdwr_flags);
+        if (fd < 0 && direct_flags != 0) /* If we had O_DIRECT on, and things failed with that, let's immediately try again without */
+                fd = open(path, basic_flags|rdwr_flags);
+        else
+                direct = direct_flags != 0;
         if (fd < 0) {
                 r = -errno;
 
@@ -522,7 +681,11 @@
                 if (open_flags >= 0 || !(ERRNO_IS_PRIVILEGE(r) || r == -EROFS))
                         return r;
 
-                fd = open(path, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|O_RDONLY);
+                fd = open(path, basic_flags|direct_flags|O_RDONLY);
+                if (fd < 0 && direct_flags != 0) /* as above */
+                        fd = open(path, basic_flags|O_RDONLY);
+                else
+                        direct = direct_flags != 0;
                 if (fd < 0)
                         return r; /* Propagate original error */
 
@@ -530,51 +693,132 @@
         } else if (open_flags < 0)
                 open_flags = O_RDWR;
 
-        return loop_device_make(fd, open_flags, 0, 0, loop_flags, ret);
+        log_debug("Opened '%s' in %s access mode%s, with O_DIRECT %s%s.",
+                  path,
+                  open_flags == O_RDWR ? "O_RDWR" : "O_RDONLY",
+                  open_flags != rdwr_flags ? " (O_RDWR was requested but not allowed)" : "",
+                  direct ? "enabled" : "disabled",
+                  direct != (direct_flags != 0) ? " (O_DIRECT was requested but not supported)" : "");
+
+        return loop_device_make_internal(path, fd, open_flags, 0, 0, sector_size, loop_flags, lock_op, ret);
 }
 
-LoopDevice* loop_device_unref(LoopDevice *d) {
+int loop_device_make_by_path_memory(
+                const char *path,
+                int open_flags,
+                uint32_t sector_size,
+                uint32_t loop_flags,
+                int lock_op,
+                LoopDevice **ret) {
+
+        _cleanup_close_ int fd = -EBADF, mfd = -EBADF;
+        _cleanup_free_ char *fn = NULL;
+        struct stat st;
+        int r;
+
+        assert(path);
+        assert(IN_SET(open_flags, O_RDWR, O_RDONLY));
+        assert(ret);
+
+        loop_flags &= ~LO_FLAGS_DIRECT_IO; /* memfds don't support O_DIRECT, hence LO_FLAGS_DIRECT_IO can't be used either */
+
+        fd = open(path, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|O_RDONLY);
+        if (fd < 0)
+                return -errno;
+
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        if (!S_ISREG(st.st_mode) && !S_ISBLK(st.st_mode))
+                return -EBADF;
+
+        r = path_extract_filename(path, &fn);
+        if (r < 0)
+                return r;
+
+        mfd = memfd_clone_fd(fd, fn, open_flags|O_CLOEXEC);
+        if (mfd < 0)
+                return mfd;
+
+        fd = safe_close(fd); /* Let's close the original early */
+
+        return loop_device_make_internal(NULL, mfd, open_flags, 0, 0, sector_size, loop_flags, lock_op, ret);
+}
+
+static LoopDevice* loop_device_free(LoopDevice *d) {
+        _cleanup_close_ int control = -EBADF;
+        int r;
+
         if (!d)
                 return NULL;
 
+        /* Release any lock we might have on the device first. We want to open+lock the /dev/loop-control
+         * device below, but our lock protocol says that if both control and block device locks are taken,
+         * the control lock needs to be taken first, the block device lock second — in order to avoid ABBA
+         * locking issues. Moreover, we want to issue LOOP_CLR_FD on the block device further down, and that
+         * would fail if we had another fd open to the device. */
+        d->lock_fd = safe_close(d->lock_fd);
+
+        /* Let's open the control device early, and lock it, so that we can release our block device and
+         * delete it in a synchronized fashion, and allocators won't needlessly see the block device as free
+         * while we are about to delete it. */
+        if (!LOOP_DEVICE_IS_FOREIGN(d) && !d->relinquished) {
+                control = open("/dev/loop-control", O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
+                if (control < 0)
+                        log_debug_errno(errno, "Failed to open loop control device, cannot remove loop device '%s', ignoring: %m", strna(d->node));
+                else if (flock(control, LOCK_EX) < 0)
+                        log_debug_errno(errno, "Failed to lock loop control device, ignoring: %m");
+        }
+
+        /* Then let's release the loopback block device */
         if (d->fd >= 0) {
                 /* Implicitly sync the device, since otherwise in-flight blocks might not get written */
                 if (fsync(d->fd) < 0)
                         log_debug_errno(errno, "Failed to sync loop block device, ignoring: %m");
 
-                if (d->nr >= 0 && !d->relinquished) {
-                        if (ioctl(d->fd, LOOP_CLR_FD) < 0)
-                                log_debug_errno(errno, "Failed to clear loop device: %m");
+                if (!LOOP_DEVICE_IS_FOREIGN(d) && !d->relinquished) {
+                        /* We are supposed to clear the loopback device. Let's do this synchronously: lock
+                         * the device, manually remove all partitions and then clear it. This should ensure
+                         * udev doesn't concurrently access the devices, and we can be reasonably sure that
+                         * once we are done here the device is cleared and all its partition children
+                         * removed. Note that we lock our primary device fd here (and not a separate locking
+                         * fd, as we do during allocation, since we want to keep the lock all the way through
+                         * the LOOP_CLR_FD, but that call would fail if we had more than one fd open.) */
 
+                        if (flock(d->fd, LOCK_EX) < 0)
+                                log_debug_errno(errno, "Failed to lock loop block device, ignoring: %m");
+
+                        r = block_device_remove_all_partitions(d->dev, d->fd);
+                        if (r < 0)
+                                log_debug_errno(r, "Failed to remove partitions of loopback block device, ignoring: %m");
+
+                        if (ioctl(d->fd, LOOP_CLR_FD) < 0)
+                                log_debug_errno(errno, "Failed to clear loop device, ignoring: %m");
                 }
 
                 safe_close(d->fd);
         }
 
-        if (d->nr >= 0 && !d->relinquished) {
-                _cleanup_close_ int control = -1;
-
-                control = open("/dev/loop-control", O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
-                if (control < 0)
-                        log_warning_errno(errno,
-                                          "Failed to open loop control device, cannot remove loop device %s: %m",
-                                          strna(d->node));
-                else
-                        for (unsigned n_attempts = 0;;) {
-                                if (ioctl(control, LOOP_CTL_REMOVE, d->nr) >= 0)
-                                        break;
-                                if (errno != EBUSY || ++n_attempts >= 64) {
-                                        log_warning_errno(errno, "Failed to remove device %s: %m", strna(d->node));
-                                        break;
-                                }
-                                (void) usleep(50 * USEC_PER_MSEC);
+        /* Now that the block device is released, let's also try to remove it */
+        if (control >= 0)
+                for (unsigned n_attempts = 0;;) {
+                        if (ioctl(control, LOOP_CTL_REMOVE, d->nr) >= 0)
+                                break;
+                        if (errno != EBUSY || ++n_attempts >= 64) {
+                                log_debug_errno(errno, "Failed to remove device %s: %m", strna(d->node));
+                                break;
                         }
-        }
+                        (void) usleep(50 * USEC_PER_MSEC);
+                }
 
         free(d->node);
+        sd_device_unref(d->dev);
+        free(d->backing_file);
         return mfree(d);
 }
 
+DEFINE_TRIVIAL_REF_UNREF_FUNC(LoopDevice, loop_device, loop_device_free);
+
 void loop_device_relinquish(LoopDevice *d) {
         assert(d);
 
@@ -584,37 +828,77 @@
         d->relinquished = true;
 }
 
-int loop_device_open(const char *loop_path, int open_flags, LoopDevice **ret) {
-        _cleanup_close_ int loop_fd = -1;
-        _cleanup_free_ char *p = NULL;
-        struct loop_info64 info;
-        struct stat st;
-        LoopDevice *d;
-        int nr;
+void loop_device_unrelinquish(LoopDevice *d) {
+        assert(d);
+        d->relinquished = false;
+}
 
-        assert(loop_path);
+int loop_device_open(
+                sd_device *dev,
+                int open_flags,
+                int lock_op,
+                LoopDevice **ret) {
+
+        _cleanup_close_ int fd = -EBADF, lock_fd = -EBADF;
+        _cleanup_free_ char *node = NULL, *backing_file = NULL;
+        struct loop_info64 info;
+        uint64_t diskseq = 0;
+        LoopDevice *d;
+        const char *s;
+        dev_t devnum;
+        int r, nr = -1;
+
+        assert(dev);
+        assert(IN_SET(open_flags, O_RDWR, O_RDONLY));
         assert(ret);
 
-        loop_fd = open(loop_path, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|open_flags);
-        if (loop_fd < 0)
-                return -errno;
+        /* Even if fd is provided through the argument in loop_device_open_from_fd(), we reopen the inode
+         * here, instead of keeping just a dup() clone of it around, since we want to ensure that the
+         * O_DIRECT flag of the handle we keep is off, we have our own file index, and have the right
+         * read/write mode in effect. */
+        fd = sd_device_open(dev, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|open_flags);
+        if (fd < 0)
+                return fd;
 
-        if (fstat(loop_fd, &st) < 0)
-                return -errno;
-        if (!S_ISBLK(st.st_mode))
-                return -ENOTBLK;
+        if ((lock_op & ~LOCK_NB) != LOCK_UN) {
+                lock_fd = open_lock_fd(fd, lock_op);
+                if (lock_fd < 0)
+                        return lock_fd;
+        }
 
-        if (ioctl(loop_fd, LOOP_GET_STATUS64, &info) >= 0) {
+        if (ioctl(fd, LOOP_GET_STATUS64, &info) >= 0) {
 #if HAVE_VALGRIND_MEMCHECK_H
                 /* Valgrind currently doesn't know LOOP_GET_STATUS64. Remove this once it does */
                 VALGRIND_MAKE_MEM_DEFINED(&info, sizeof(info));
 #endif
                 nr = info.lo_number;
-        } else
-                nr = -1;
 
-        p = strdup(loop_path);
-        if (!p)
+                if (sd_device_get_sysattr_value(dev, "loop/backing_file", &s) >= 0) {
+                        backing_file = strdup(s);
+                        if (!backing_file)
+                                return -ENOMEM;
+                }
+        }
+
+        r = fd_get_diskseq(fd, &diskseq);
+        if (r < 0 && r != -EOPNOTSUPP)
+                return r;
+
+        uint32_t sector_size;
+        r = blockdev_get_sector_size(fd, &sector_size);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_devnum(dev, &devnum);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_devname(dev, &s);
+        if (r < 0)
+                return r;
+
+        node = strdup(s);
+        if (!node)
                 return -ENOMEM;
 
         d = new(LoopDevice, 1);
@@ -622,24 +906,66 @@
                 return -ENOMEM;
 
         *d = (LoopDevice) {
-                .fd = TAKE_FD(loop_fd),
+                .n_ref = 1,
+                .fd = TAKE_FD(fd),
+                .lock_fd = TAKE_FD(lock_fd),
                 .nr = nr,
-                .node = TAKE_PTR(p),
+                .node = TAKE_PTR(node),
+                .dev = sd_device_ref(dev),
+                .backing_file = TAKE_PTR(backing_file),
                 .relinquished = true, /* It's not ours, don't try to destroy it when this object is freed */
-                .devno = st.st_dev,
+                .devno = devnum,
+                .diskseq = diskseq,
                 .uevent_seqnum_not_before = UINT64_MAX,
                 .timestamp_not_before = USEC_INFINITY,
+                .sector_size = sector_size,
         };
 
         *ret = d;
-        return d->fd;
+        return 0;
+}
+
+int loop_device_open_from_fd(
+                int fd,
+                int open_flags,
+                int lock_op,
+                LoopDevice **ret) {
+
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        int r;
+
+        assert(fd >= 0);
+
+        r = block_device_new_from_fd(fd, 0, &dev);
+        if (r < 0)
+                return r;
+
+        return loop_device_open(dev, open_flags, lock_op, ret);
+}
+
+int loop_device_open_from_path(
+                const char *path,
+                int open_flags,
+                int lock_op,
+                LoopDevice **ret) {
+
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        int r;
+
+        assert(path);
+
+        r = block_device_new_from_path(path, 0, &dev);
+        if (r < 0)
+                return r;
+
+        return loop_device_open(dev, open_flags, lock_op, ret);
 }
 
 static int resize_partition(int partition_fd, uint64_t offset, uint64_t size) {
         char sysfs[STRLEN("/sys/dev/block/:/partition") + 2*DECIMAL_STR_MAX(dev_t) + 1];
-        _cleanup_free_ char *whole = NULL, *buffer = NULL;
+        _cleanup_free_ char *buffer = NULL;
         uint64_t current_offset, current_size, partno;
-        _cleanup_close_ int whole_fd = -1;
+        _cleanup_close_ int whole_fd = -EBADF;
         struct stat st;
         dev_t devno;
         int r;
@@ -655,7 +981,7 @@
 
         assert(S_ISBLK(st.st_mode));
 
-        xsprintf(sysfs, "/sys/dev/block/%u:%u/partition", major(st.st_rdev), minor(st.st_rdev));
+        xsprintf(sysfs, "/sys/dev/block/" DEVNUM_FORMAT_STR "/partition", DEVNUM_FORMAT_VAL(st.st_rdev));
         r = read_one_line_file(sysfs, &buffer);
         if (r == -ENOENT) /* not a partition, cannot resize */
                 return -ENOTTY;
@@ -665,7 +991,7 @@
         if (r < 0)
                 return r;
 
-        xsprintf(sysfs, "/sys/dev/block/%u:%u/start", major(st.st_rdev), minor(st.st_rdev));
+        xsprintf(sysfs, "/sys/dev/block/" DEVNUM_FORMAT_STR "/start", DEVNUM_FORMAT_VAL(st.st_rdev));
 
         buffer = mfree(buffer);
         r = read_one_line_file(sysfs, &buffer);
@@ -686,45 +1012,32 @@
         if (current_size == size && current_offset == offset)
                 return 0;
 
-        xsprintf(sysfs, "/sys/dev/block/%u:%u/../dev", major(st.st_rdev), minor(st.st_rdev));
+        xsprintf(sysfs, "/sys/dev/block/" DEVNUM_FORMAT_STR "/../dev", DEVNUM_FORMAT_VAL(st.st_rdev));
 
         buffer = mfree(buffer);
         r = read_one_line_file(sysfs, &buffer);
         if (r < 0)
                 return r;
-        r = parse_dev(buffer, &devno);
+        r = parse_devnum(buffer, &devno);
         if (r < 0)
                 return r;
 
-        r = device_path_make_major_minor(S_IFBLK, devno, &whole);
+        whole_fd = r = device_open_from_devnum(S_IFBLK, devno, O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY, NULL);
         if (r < 0)
                 return r;
 
-        whole_fd = open(whole, O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
-        if (whole_fd < 0)
-                return -errno;
-
-        struct blkpg_partition bp = {
-                .pno = partno,
-                .start = offset == UINT64_MAX ? current_offset : offset,
-                .length = size == UINT64_MAX ? current_size : size,
-        };
-
-        struct blkpg_ioctl_arg ba = {
-                .op = BLKPG_RESIZE_PARTITION,
-                .data = &bp,
-                .datalen = sizeof(bp),
-        };
-
-        if (ioctl(whole_fd, BLKPG, &ba) < 0)
-                return -errno;
-
-        return 0;
+        return block_device_resize_partition(
+                        whole_fd,
+                        partno,
+                        offset == UINT64_MAX ? current_offset : offset,
+                        size == UINT64_MAX ? current_size : size);
 }
 
 int loop_device_refresh_size(LoopDevice *d, uint64_t offset, uint64_t size) {
         struct loop_info64 info;
+
         assert(d);
+        assert(d->fd >= 0);
 
         /* Changes the offset/start of the loop device relative to the beginning of the underlying file or
          * block device. If this loop device actually refers to a partition and not a loopback device, we'll
@@ -732,9 +1045,6 @@
          *
          * If either offset or size is UINT64_MAX we won't change that parameter. */
 
-        if (d->fd < 0)
-                return -EBADF;
-
         if (d->nr < 0) /* not a loopback device */
                 return resize_partition(d->fd, offset, size);
 
@@ -756,35 +1066,40 @@
         if (offset != UINT64_MAX)
                 info.lo_offset = offset;
 
-        if (ioctl(d->fd, LOOP_SET_STATUS64, &info) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(d->fd, LOOP_SET_STATUS64, &info));
 }
 
 int loop_device_flock(LoopDevice *d, int operation) {
+        assert(IN_SET(operation & ~LOCK_NB, LOCK_UN, LOCK_SH, LOCK_EX));
         assert(d);
 
-        if (d->fd < 0)
-                return -EBADF;
+        /* When unlocking just close the lock fd */
+        if ((operation & ~LOCK_NB) == LOCK_UN) {
+                d->lock_fd = safe_close(d->lock_fd);
+                return 0;
+        }
 
-        if (flock(d->fd, operation) < 0)
-                return -errno;
+        /* If we had no lock fd so far, create one and lock it right-away */
+        if (d->lock_fd < 0) {
+                assert(d->fd >= 0);
 
-        return 0;
+                d->lock_fd = open_lock_fd(d->fd, operation);
+                if (d->lock_fd < 0)
+                        return d->lock_fd;
+
+                return 0;
+        }
+
+        /* Otherwise change the current lock mode on the existing fd */
+        return RET_NERRNO(flock(d->lock_fd, operation));
 }
 
 int loop_device_sync(LoopDevice *d) {
         assert(d);
+        assert(d->fd >= 0);
 
         /* We also do this implicitly in loop_device_unref(). Doing this explicitly here has the benefit that
          * we can check the return value though. */
 
-        if (d->fd < 0)
-                return -EBADF;
-
-        if (fsync(d->fd) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(fsync(d->fd));
 }
diff --git a/src/shared/loop-util.h b/src/shared/loop-util.h
index e06dfeb..5c79ed7 100644
--- a/src/shared/loop-util.h
+++ b/src/shared/loop-util.h
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include "sd-device.h"
+
 #include "macro.h"
 #include "time-util.h"
 
@@ -9,23 +11,37 @@
 /* Some helpers for setting up loopback block devices */
 
 struct LoopDevice {
+        unsigned n_ref;
         int fd;
-        int nr;
+        int lock_fd;
+        int nr;   /* The loopback device index (i.e. 4 for /dev/loop4); if this object encapsulates a non-loopback block device, set to -1 */
         dev_t devno;
         char *node;
+        sd_device *dev;
+        char *backing_file;
         bool relinquished;
+        uint64_t diskseq; /* Block device sequence number, monothonically incremented by the kernel on create/attach, or 0 if we don't know */
         uint64_t uevent_seqnum_not_before; /* uevent sequm right before we attached the loopback device, or UINT64_MAX if we don't know */
         usec_t timestamp_not_before; /* CLOCK_MONOTONIC timestamp taken immediately before attaching the loopback device, or USEC_INFINITY if we don't know */
+        uint32_t sector_size;
 };
 
-int loop_device_make(int fd, int open_flags, uint64_t offset, uint64_t size, uint32_t loop_flags, LoopDevice **ret);
-int loop_device_make_by_path(const char *path, int open_flags, uint32_t loop_flags, LoopDevice **ret);
-int loop_device_open(const char *loop_path, int open_flags, LoopDevice **ret);
+/* Returns true if LoopDevice object is not actually a loopback device but some other block device we just wrap */
+#define LOOP_DEVICE_IS_FOREIGN(d) ((d)->nr < 0)
 
+int loop_device_make(int fd, int open_flags, uint64_t offset, uint64_t size, uint32_t sector_size, uint32_t loop_flags, int lock_op, LoopDevice **ret);
+int loop_device_make_by_path(const char *path, int open_flags, uint32_t sector_size, uint32_t loop_flags, int lock_op, LoopDevice **ret);
+int loop_device_make_by_path_memory(const char *path, int open_flags, uint32_t sector_size, uint32_t loop_flags, int lock_op, LoopDevice **ret);
+int loop_device_open(sd_device *dev, int open_flags, int lock_op, LoopDevice **ret);
+int loop_device_open_from_fd(int fd, int open_flags, int lock_op, LoopDevice **ret);
+int loop_device_open_from_path(const char *path, int open_flags, int lock_op, LoopDevice **ret);
+
+LoopDevice* loop_device_ref(LoopDevice *d);
 LoopDevice* loop_device_unref(LoopDevice *d);
 DEFINE_TRIVIAL_CLEANUP_FUNC(LoopDevice*, loop_device_unref);
 
 void loop_device_relinquish(LoopDevice *d);
+void loop_device_unrelinquish(LoopDevice *d);
 
 int loop_device_refresh_size(LoopDevice *d, uint64_t offset, uint64_t size);
 
diff --git a/src/shared/loopback-setup.c b/src/shared/loopback-setup.c
index 76022ce..5dbc4b1 100644
--- a/src/shared/loopback-setup.c
+++ b/src/shared/loopback-setup.c
@@ -17,20 +17,22 @@
         int rcode;
         const char *error_message;
         const char *success_message;
+        const char *eexist_message;
 };
 
 static int generic_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
-        struct state *s = userdata;
+        struct state *s = ASSERT_PTR(userdata);
         int r;
 
-        assert(s);
         assert(s->n_messages > 0);
         s->n_messages--;
 
         errno = 0;
 
         r = sd_netlink_message_get_errno(m);
-        if (r < 0)
+        if (r == -EEXIST && s->eexist_message)
+                log_debug_errno(r, "%s", s->eexist_message);
+        else if (r < 0)
                 log_debug_errno(r, "%s: %m", s->error_message);
         else
                 log_debug("%s", s->success_message);
@@ -157,9 +159,11 @@
         struct state state_4 = {
                 .error_message = "Failed to add address 127.0.0.1 to loopback interface",
                 .success_message = "Successfully added address 127.0.0.1 to loopback interface",
+                .eexist_message = "127.0.0.1 has already been added to loopback interface",
         }, state_6 = {
                 .error_message = "Failed to add address ::1 to loopback interface",
                 .success_message = "Successfully added address ::1 to loopback interface",
+                .eexist_message = "::1 has already been added to loopback interface",
         }, state_up = {
                 .error_message = "Failed to bring loopback interface up",
                 .success_message = "Successfully brought loopback interface up",
@@ -203,10 +207,10 @@
                 /* If we lack the permissions to configure the loopback device,
                  * but we find it to be already configured, let's exit cleanly,
                  * in order to supported unprivileged containers. */
-                if (state_up.rcode == -EPERM && check_loopback(rtnl))
+                if (ERRNO_IS_PRIVILEGE(state_up.rcode) && check_loopback(rtnl))
                         return 0;
 
-                return log_warning_errno(state_up.rcode, "Failed to configure loopback device: %m");
+                return log_warning_errno(state_up.rcode, "Failed to configure loopback network device: %m");
         }
 
         return 0;
diff --git a/src/shared/machine-id-setup.c b/src/shared/machine-id-setup.c
index d2f9892..4b43090 100644
--- a/src/shared/machine-id-setup.c
+++ b/src/shared/machine-id-setup.c
@@ -9,7 +9,6 @@
 
 #include "alloc-util.h"
 #include "fd-util.h"
-#include "fs-util.h"
 #include "id128-util.h"
 #include "io-util.h"
 #include "log.h"
@@ -23,13 +22,13 @@
 #include "process-util.h"
 #include "stat-util.h"
 #include "string-util.h"
+#include "sync-util.h"
 #include "umask-util.h"
-#include "util.h"
 #include "virt.h"
 
 static int generate_machine_id(const char *root, sd_id128_t *ret) {
         const char *dbus_machine_id;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(ret);
@@ -38,7 +37,7 @@
         dbus_machine_id = prefix_roota(root, "/var/lib/dbus/machine-id");
         fd = open(dbus_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
         if (fd >= 0) {
-                if (id128_read_fd(fd, ID128_PLAIN, ret) >= 0) {
+                if (id128_read_fd(fd, ID128_FORMAT_PLAIN, ret) >= 0) {
                         log_info("Initializing machine ID from D-Bus machine ID.");
                         return 0;
                 }
@@ -84,13 +83,13 @@
 
 int machine_id_setup(const char *root, bool force_transient, sd_id128_t machine_id, sd_id128_t *ret) {
         const char *etc_machine_id, *run_machine_id;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         bool writable;
         int r;
 
         etc_machine_id = prefix_roota(root, "/etc/machine-id");
 
-        RUN_WITH_UMASK(0000) {
+        WITH_UMASK(0000) {
                 /* We create this 0444, to indicate that this isn't really
                  * something you should ever modify. Of course, since the file
                  * will be owned by root it doesn't matter much, but maybe
@@ -123,7 +122,7 @@
         if (sd_id128_is_null(machine_id)) {
 
                 /* Try to read any existing machine ID */
-                if (id128_read_fd(fd, ID128_PLAIN, ret) >= 0)
+                if (id128_read_fd(fd, ID128_FORMAT_PLAIN, ret) >= 0)
                         return 0;
 
                 /* Hmm, so, the id currently stored is not useful, then let's generate one */
@@ -152,7 +151,7 @@
                         if (r < 0)
                                 return log_error_errno(r, "Failed to sync %s: %m", etc_machine_id);
                 } else {
-                        r = id128_write_fd(fd, ID128_PLAIN, machine_id, true);
+                        r = id128_write_fd(fd, ID128_FORMAT_PLAIN | ID128_SYNC_ON_WRITE, machine_id);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to write %s: %m", etc_machine_id);
                         else
@@ -167,8 +166,8 @@
 
         run_machine_id = prefix_roota(root, "/run/machine-id");
 
-        RUN_WITH_UMASK(0022)
-                r = id128_write(run_machine_id, ID128_PLAIN, machine_id, false);
+        WITH_UMASK(0022)
+                r = id128_write(run_machine_id, ID128_FORMAT_PLAIN, machine_id);
         if (r < 0) {
                 (void) unlink(run_machine_id);
                 return log_error_errno(r, "Cannot write %s: %m", run_machine_id);
@@ -196,8 +195,8 @@
 }
 
 int machine_id_commit(const char *root) {
-        _cleanup_close_ int fd = -1, initial_mntns_fd = -1;
-        const char *etc_machine_id, *sync_path;
+        _cleanup_close_ int fd = -EBADF, initial_mntns_fd = -EBADF;
+        const char *etc_machine_id;
         sd_id128_t id;
         int r;
 
@@ -240,7 +239,7 @@
                                        "%s is not on a temporary file system.",
                                        etc_machine_id);
 
-        r = id128_read_fd(fd, ID128_PLAIN, &id);
+        r = id128_read_fd(fd, ID128_FORMAT_PLAIN, &id);
         if (r < 0)
                 return log_error_errno(r, "We didn't find a valid machine ID in %s: %m", etc_machine_id);
 
@@ -261,7 +260,7 @@
                 return r;
 
         /* Update a persistent version of etc_machine_id */
-        r = id128_write(etc_machine_id, ID128_PLAIN, id, true);
+        r = id128_write(etc_machine_id, ID128_FORMAT_PLAIN | ID128_SYNC_ON_WRITE, id);
         if (r < 0)
                 return log_error_errno(r, "Cannot write %s. This is mandatory to get a persistent machine ID: %m", etc_machine_id);
 
diff --git a/src/shared/machine-pool.c b/src/shared/machine-pool.c
index 1f0b0b4..fb0b2f5 100644
--- a/src/shared/machine-pool.c
+++ b/src/shared/machine-pool.c
@@ -22,7 +22,7 @@
         return F_TYPE_EQUAL(sfs.f_type, BTRFS_SUPER_MAGIC);
 }
 
-int setup_machine_directory(sd_bus_error *error) {
+int setup_machine_directory(sd_bus_error *error, bool use_btrfs_subvol, bool use_btrfs_quota) {
         int r;
 
         r = check_btrfs();
@@ -31,8 +31,14 @@
         if (r == 0)
                 return 0;
 
+        if (!use_btrfs_subvol)
+                return 0;
+
         (void) btrfs_subvol_make_label("/var/lib/machines");
 
+        if (!use_btrfs_quota)
+                return 0;
+
         r = btrfs_quota_enable("/var/lib/machines", true);
         if (r < 0)
                 log_warning_errno(r, "Failed to enable quota for /var/lib/machines, ignoring: %m");
@@ -41,5 +47,5 @@
         if (r < 0)
                 log_warning_errno(r, "Failed to set up default quota hierarchy for /var/lib/machines, ignoring: %m");
 
-        return 1;
+        return 0;
 }
diff --git a/src/shared/machine-pool.h b/src/shared/machine-pool.h
index 3f528ab..c57e478 100644
--- a/src/shared/machine-pool.h
+++ b/src/shared/machine-pool.h
@@ -5,4 +5,4 @@
 
 #include "sd-bus.h"
 
-int setup_machine_directory(sd_bus_error *error);
+int setup_machine_directory(sd_bus_error *error, bool use_btrfs_subvol, bool use_btrfs_quota);
diff --git a/src/shared/main-func.h b/src/shared/main-func.h
index 05cdffe..3dc4992 100644
--- a/src/shared/main-func.h
+++ b/src/shared/main-func.h
@@ -5,16 +5,17 @@
 
 #include "sd-daemon.h"
 
+#include "argv-util.h"
 #include "pager.h"
 #include "selinux-util.h"
 #include "spawn-ask-password-agent.h"
 #include "spawn-polkit-agent.h"
 #include "static-destruct.h"
-#include "util.h"
 
 #define _DEFINE_MAIN_FUNCTION(intro, impl, ret)                         \
         int main(int argc, char *argv[]) {                              \
                 int r;                                                  \
+                assert_se(argc > 0 && !isempty(argv[0]));               \
                 save_argc_argv(argc, argv);                             \
                 intro;                                                  \
                 r = impl;                                               \
diff --git a/src/shared/meson.build b/src/shared/meson.build
index 7eb7050..f668978 100644
--- a/src/shared/meson.build
+++ b/src/shared/meson.build
@@ -1,324 +1,175 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-shared_sources = files('''
-        acl-util.h
-        acpi-fpdt.c
-        acpi-fpdt.h
-        apparmor-util.c
-        apparmor-util.h
-        ask-password-api.c
-        ask-password-api.h
-        barrier.c
-        barrier.h
-        base-filesystem.c
-        base-filesystem.h
-        binfmt-util.c
-        binfmt-util.h
-        bitmap.c
-        bitmap.h
-        blkid-util.h
-        blockdev-util.c
-        blockdev-util.h
-        bond-util.c
-        bond-util.h
-        boot-timestamps.c
-        boot-timestamps.h
-        bootspec.c
-        bootspec.h
-        bpf-dlopen.c
-        bpf-dlopen.h
-        bpf-program.c
-        bpf-program.h
-        bridge-util.c
-        bridge-util.h
-        btrfs-util.c
-        btrfs-util.h
-        bus-get-properties.c
-        bus-get-properties.h
-        bus-locator.c
-        bus-locator.h
-        bus-log-control-api.c
-        bus-log-control-api.h
-        bus-map-properties.c
-        bus-map-properties.h
-        bus-message-util.c
-        bus-message-util.h
-        bus-object.c
-        bus-object.h
-        bus-polkit.c
-        bus-polkit.h
-        bus-print-properties.c
-        bus-print-properties.h
-        bus-unit-procs.c
-        bus-unit-procs.h
-        bus-unit-util.c
-        bus-unit-util.h
-        bus-util.c
-        bus-util.h
-        bus-wait-for-jobs.c
-        bus-wait-for-jobs.h
-        bus-wait-for-units.c
-        bus-wait-for-units.h
-        calendarspec.c
-        calendarspec.h
-        cgroup-setup.c
-        cgroup-setup.h
-        cgroup-show.c
-        cgroup-show.h
-        chown-recursive.c
-        chown-recursive.h
-        clean-ipc.c
-        clean-ipc.h
-        clock-util.c
-        clock-util.h
-        condition.c
-        condition.h
-        conf-parser.c
-        conf-parser.h
-        copy.c
-        copy.h
-        coredump-util.c
-        coredump-util.h
-        cpu-set-util.c
-        cpu-set-util.h
-        cryptsetup-util.c
-        cryptsetup-util.h
-        daemon-util.h
-        data-fd-util.c
-        data-fd-util.h
-        dev-setup.c
-        dev-setup.h
-        device-nodes.c
-        device-nodes.h
-        devnode-acl.h
-        discover-image.c
-        discover-image.h
-        dissect-image.c
-        dissect-image.h
-        dlfcn-util.c
-        dlfcn-util.h
-        dm-util.c
-        dm-util.h
-        dns-domain.c
-        dns-domain.h
-        dropin.c
-        dropin.h
-        efi-loader.c
-        efi-loader.h
-        enable-mempool.c
-        env-file-label.c
-        env-file-label.h
-        ethtool-util.c
-        ethtool-util.h
-        exec-util.c
-        exec-util.h
-        exit-status.c
-        exit-status.h
-        extension-release.c
-        extension-release.h
-        fdset.c
-        fdset.h
-        fileio-label.c
-        fileio-label.h
-        firewall-util-nft.c
-        firewall-util-private.h
-        firewall-util.c
-        firewall-util.h
-        format-table.c
-        format-table.h
-        fsck-util.h
-        fstab-util.c
-        fstab-util.h
-        generator.c
-        generator.h
-        geneve-util.c
-        geneve-util.h
-        gpt.c
-        gpt.h
-        group-record.c
-        group-record.h
-        hostname-setup.c
-        hostname-setup.h
-        hwdb-util.c
-        hwdb-util.h
-        id128-print.c
-        id128-print.h
-        idn-util.c
-        idn-util.h
-        ima-util.c
-        ima-util.h
-        import-util.c
-        import-util.h
-        initreq.h
-        install-printf.c
-        install-printf.h
-        install.c
-        install.h
-        ip-protocol-list.c
-        ip-protocol-list.h
-        ipvlan-util.c
-        ipvlan-util.h
-        journal-importer.c
-        journal-importer.h
-        journal-util.c
-        journal-util.h
-        json-internal.h
-        json.c
-        json.h
-        kbd-util.c
-        kbd-util.h
-        killall.c
-        killall.h
-        label.c
-        label.h
-        libcrypt-util.c
-        libcrypt-util.h
-        libfido2-util.c
-        libfido2-util.h
-        libmount-util.h
-        linux/auto_dev-ioctl.h
-        linux/bpf.h
-        linux/bpf_common.h
-        linux/bpf_insn.h
-        linux/dm-ioctl.h
-        linux/ethtool.h
-        local-addresses.c
-        local-addresses.h
-        lockfile-util.c
-        lockfile-util.h
-        log-link.h
-        logs-show.c
-        logs-show.h
-        loop-util.c
-        loop-util.h
-        loopback-setup.c
-        loopback-setup.h
-        machine-id-setup.c
-        machine-id-setup.h
-        machine-pool.c
-        machine-pool.h
-        macvlan-util.c
-        macvlan-util.h
-        main-func.h
-        mkdir-label.c
-        mkfs-util.c
-        mkfs-util.h
-        module-util.h
-        mount-setup.c
-        mount-setup.h
-        mount-util.c
-        mount-util.h
-        net-condition.c
-        net-condition.h
-        netif-naming-scheme.c
-        netif-naming-scheme.h
-        nscd-flush.h
-        nsflags.c
-        nsflags.h
-        numa-util.c
-        numa-util.h
-        openssl-util.c
-        openssl-util.h
-        output-mode.c
-        output-mode.h
-        pager.c
-        pager.h
-        parse-argument.c
-        parse-argument.h
-        parse-socket-bind-item.c
-        parse-socket-bind-item.h
-        pe-header.h
-        pkcs11-util.c
-        pkcs11-util.h
-        pretty-print.c
-        pretty-print.h
-        psi-util.c
-        psi-util.h
-        ptyfwd.c
-        ptyfwd.h
-        pwquality-util.c
-        pwquality-util.h
-        qrcode-util.c
-        qrcode-util.h
-        quota-util.c
-        quota-util.h
-        reboot-util.c
-        reboot-util.h
-        resize-fs.c
-        resize-fs.h
-        resolve-util.c
-        resolve-util.h
-        rm-rf.c
-        rm-rf.h
-        seccomp-util.h
-        securebits-util.c
-        securebits-util.h
-        selinux-util.c
-        selinux-util.h
-        serialize.c
-        serialize.h
-        service-util.c
-        service-util.h
-        sleep-config.c
-        sleep-config.h
-        smack-util.c
-        smack-util.h
-        socket-label.c
-        socket-netlink.c
-        socket-netlink.h
-        spawn-ask-password-agent.c
-        spawn-ask-password-agent.h
-        spawn-polkit-agent.c
-        spawn-polkit-agent.h
-        specifier.c
-        specifier.h
-        switch-root.c
-        switch-root.h
-        tmpfile-util-label.c
-        tmpfile-util-label.h
-        tomoyo-util.c
-        tomoyo-util.h
-        tpm2-util.c
-        tpm2-util.h
-        udev-util.c
-        udev-util.h
-        uid-range.c
-        uid-range.h
-        user-record-nss.c
-        user-record-nss.h
-        user-record-show.c
-        user-record-show.h
-        user-record.c
-        user-record.h
-        userdb-dropin.c
-        userdb-dropin.h
-        userdb.c
-        userdb.h
-        utmp-wtmp.h
-        varlink.c
-        varlink.h
-        verbs.c
-        verbs.h
-        vlan-util.c
-        vlan-util.h
-        volatile-util.c
-        volatile-util.h
-        watchdog.c
-        watchdog.h
-        web-util.c
-        web-util.h
-        wifi-util.c
-        wifi-util.h
-        xml.c
-        xml.h
-'''.split())
+shared_sources = files(
+        'acpi-fpdt.c',
+        'apparmor-util.c',
+        'ask-password-api.c',
+        'barrier.c',
+        'base-filesystem.c',
+        'binfmt-util.c',
+        'bitmap.c',
+        'blockdev-util.c',
+        'bond-util.c',
+        'boot-timestamps.c',
+        'bootspec.c',
+        'bpf-dlopen.c',
+        'bpf-program.c',
+        'bridge-util.c',
+        'btrfs-util.c',
+        'bus-get-properties.c',
+        'bus-locator.c',
+        'bus-log-control-api.c',
+        'bus-map-properties.c',
+        'bus-message-util.c',
+        'bus-object.c',
+        'bus-polkit.c',
+        'bus-print-properties.c',
+        'bus-unit-procs.c',
+        'bus-unit-util.c',
+        'bus-util.c',
+        'bus-wait-for-jobs.c',
+        'bus-wait-for-units.c',
+        'calendarspec.c',
+        'cgroup-setup.c',
+        'cgroup-show.c',
+        'chown-recursive.c',
+        'clean-ipc.c',
+        'clock-util.c',
+        'compare-operator.c',
+        'condition.c',
+        'conf-parser.c',
+        'copy.c',
+        'coredump-util.c',
+        'cpu-set-util.c',
+        'creds-util.c',
+        'cryptsetup-util.c',
+        'daemon-util.c',
+        'data-fd-util.c',
+        'dev-setup.c',
+        'device-nodes.c',
+        'discover-image.c',
+        'dissect-image.c',
+        'dlfcn-util.c',
+        'dm-util.c',
+        'dns-domain.c',
+        'dropin.c',
+        'efi-api.c',
+        'efi-loader.c',
+        'elf-util.c',
+        'enable-mempool.c',
+        'env-file-label.c',
+        'ethtool-util.c',
+        'exec-util.c',
+        'exit-status.c',
+        'extension-release.c',
+        'fdset.c',
+        'fileio-label.c',
+        'find-esp.c',
+        'firewall-util-nft.c',
+        'firewall-util.c',
+        'format-table.c',
+        'fstab-util.c',
+        'generator.c',
+        'geneve-util.c',
+        'gpt.c',
+        'group-record.c',
+        'hostname-setup.c',
+        'hwdb-util.c',
+        'id128-print.c',
+        'idn-util.c',
+        'ima-util.c',
+        'import-util.c',
+        'in-addr-prefix-util.c',
+        'install-file.c',
+        'install-printf.c',
+        'install.c',
+        'ip-protocol-list.c',
+        'ipvlan-util.c',
+        'journal-importer.c',
+        'journal-util.c',
+        'json.c',
+        'kbd-util.c',
+        'keyring-util.c',
+        'killall.c',
+        'label.c',
+        'libcrypt-util.c',
+        'libfido2-util.c',
+        'libmount-util.c',
+        'local-addresses.c',
+        'locale-setup.c',
+        'lockfile-util.c',
+        'logs-show.c',
+        'loop-util.c',
+        'loopback-setup.c',
+        'machine-id-setup.c',
+        'machine-pool.c',
+        'macvlan-util.c',
+        'mkdir-label.c',
+        'mkfs-util.c',
+        'mount-setup.c',
+        'mount-util.c',
+        'net-condition.c',
+        'netif-naming-scheme.c',
+        'netif-sriov.c',
+        'netif-util.c',
+        'nsflags.c',
+        'numa-util.c',
+        'open-file.c',
+        'openssl-util.c',
+        'output-mode.c',
+        'pager.c',
+        'parse-argument.c',
+        'parse-helpers.c',
+        'pcre2-util.c',
+        'pkcs11-util.c',
+        'pretty-print.c',
+        'psi-util.c',
+        'ptyfwd.c',
+        'pwquality-util.c',
+        'qrcode-util.c',
+        'quota-util.c',
+        'reboot-util.c',
+        'recovery-key.c',
+        'resize-fs.c',
+        'resolve-util.c',
+        'rm-rf.c',
+        'securebits-util.c',
+        'selinux-util.c',
+        'serialize.c',
+        'service-util.c',
+        'sleep-config.c',
+        'smack-util.c',
+        'socket-label.c',
+        'socket-netlink.c',
+        'spawn-ask-password-agent.c',
+        'spawn-polkit-agent.c',
+        'specifier.c',
+        'switch-root.c',
+        'tmpfile-util-label.c',
+        'tomoyo-util.c',
+        'tpm2-util.c',
+        'udev-util.c',
+        'uid-alloc-range.c',
+        'user-record-nss.c',
+        'user-record-show.c',
+        'user-record.c',
+        'userdb-dropin.c',
+        'userdb.c',
+        'varlink.c',
+        'verb-log-control.c',
+        'verbs.c',
+        'vlan-util.c',
+        'volatile-util.c',
+        'watchdog.c',
+        'web-util.c',
+        'wifi-util.c',
+        'xml.c',
+)
 
 if get_option('tests') != 'false'
-        shared_sources += files('''
-                test-tables.h
-                tests.c
-                tests.h
-        '''.split())
+        shared_sources += files(
+                'tests.c',
+        )
 endif
 
 generate_syscall_list = find_program('generate-syscall-list.py')
@@ -332,10 +183,10 @@
         capture : true)
 
 if conf.get('HAVE_ACL') == 1
-        shared_sources += files('''
-                acl-util.c
-                devnode-acl.c
-        '''.split())
+        shared_sources += files(
+                'acl-util.c',
+                'devnode-acl.c',
+        )
 endif
 
 if conf.get('ENABLE_UTMP') == 1
@@ -352,10 +203,9 @@
 endif
 
 if conf.get('HAVE_LIBBPF') == 1
-        shared_sources += files('''
-                bpf-link.c
-                bpf-link.h
-        '''.split())
+        shared_sources += files(
+                'bpf-link.c',
+        )
 endif
 
 if conf.get('HAVE_KMOD') == 1
@@ -365,13 +215,17 @@
 if conf.get('HAVE_PAM') == 1
         shared_sources += files(
                 'pam-util.c',
-                'pam-util.h')
+        )
 endif
 
 if conf.get('ENABLE_NSCD') == 1
         shared_sources += files('nscd-flush.c')
 endif
 
+if conf.get('HAVE_LIBFIDO2') == 1
+        shared_sources += files('cryptsetup-fido2.c')
+endif
+
 generate_ip_protocol_list = find_program('generate-ip-protocol-list.sh')
 ip_protocol_list_txt = custom_target(
         'ip-protocol-list.txt',
@@ -412,7 +266,7 @@
 shared_generated_gperf_headers = [target1, target2]
 shared_sources += shared_generated_gperf_headers
 
-libshared_name = 'systemd-shared-@0@'.format(meson.project_version())
+libshared_name = 'systemd-shared-@0@'.format(shared_lib_tag)
 
 libshared_deps = [threads,
                   libacl,
@@ -426,13 +280,15 @@
                   liblz4,
                   libmount,
                   libopenssl,
-                  libp11kit,
+                  libp11kit_cflags,
                   libpam,
                   librt,
                   libseccomp,
                   libselinux,
+                  libxenctrl,
+                  libxz,
                   libzstd,
-                  libxz]
+                  versiondep]
 
 libshared_sym_path = '@0@/libshared.sym'.format(meson.current_source_dir())
 
@@ -441,18 +297,33 @@
         shared_sources,
         include_directories : includes,
         dependencies : libshared_deps,
-        c_args : ['-fvisibility=default'])
+        c_args : ['-fvisibility=default'],
+        build_by_default : false)
 
 libshared = shared_library(
         libshared_name,
         include_directories : includes,
+        c_args : ['-fvisibility=default'],
         link_args : ['-shared',
                      '-Wl,--version-script=' + libshared_sym_path],
         link_whole : [libshared_static,
                       libbasic,
                       libbasic_gcrypt,
                       libsystemd_static],
-        c_args : ['-fvisibility=default'],
         dependencies : libshared_deps,
         install : true,
-        install_dir : rootlibexecdir)
+        install_dir : rootpkglibdir)
+
+shared_fdisk_sources = files(
+        'fdisk-util.c',
+)
+
+if get_option('fdisk') != 'false'
+        libshared_fdisk = static_library(
+                'shared-fdisk',
+                shared_fdisk_sources,
+                include_directories : includes,
+                dependencies : [libfdisk],
+                c_args : ['-fvisibility=default'],
+                build_by_default : false)
+endif
diff --git a/src/shared/mkdir-label.c b/src/shared/mkdir-label.c
index 9565117..e3afc2b 100644
--- a/src/shared/mkdir-label.c
+++ b/src/shared/mkdir-label.c
@@ -1,34 +1,13 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <stdio.h>
 #include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
 
-#include "label.h"
-#include "macro.h"
-#include "mkdir.h"
+#include "errno-util.h"
+#include "mkdir-label.h"
 #include "selinux-util.h"
 #include "smack-util.h"
 #include "user-util.h"
 
-int mkdir_label(const char *path, mode_t mode) {
-        int r;
-
-        assert(path);
-
-        r = mac_selinux_create_file_prepare(path, S_IFDIR);
-        if (r < 0)
-                return r;
-
-        r = mkdir_errno_wrapper(path, mode);
-        mac_selinux_create_file_clear();
-        if (r < 0)
-                return r;
-
-        return mac_smack_fix(path, 0);
-}
-
 int mkdirat_label(int dirfd, const char *path, mode_t mode) {
         int r;
 
@@ -38,22 +17,26 @@
         if (r < 0)
                 return r;
 
-        r = mkdirat_errno_wrapper(dirfd, path, mode);
+        r = RET_NERRNO(mkdirat(dirfd, path, mode));
         mac_selinux_create_file_clear();
         if (r < 0)
                 return r;
 
-        return mac_smack_fix_at(dirfd, path, 0);
+        return mac_smack_fix_full(dirfd, path, NULL, 0);
 }
 
-int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
-        return mkdir_safe_internal(path, mode, uid, gid, flags, mkdir_label);
+int mkdirat_safe_label(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
+        return mkdirat_safe_internal(dir_fd, path, mode, uid, gid, flags, mkdirat_label);
 }
 
-int mkdir_parents_label(const char *path, mode_t mode) {
-        return mkdir_parents_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdir_label);
+int mkdirat_parents_label(int dir_fd, const char *path, mode_t mode) {
+        return mkdirat_parents_internal(dir_fd, path, mode, UID_INVALID, UID_INVALID, 0, mkdirat_label);
+}
+
+int mkdir_parents_safe_label(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
+        return mkdir_parents_internal(prefix, path, mode, uid, gid, flags, mkdirat_label);
 }
 
 int mkdir_p_label(const char *path, mode_t mode) {
-        return mkdir_p_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdir_label);
+        return mkdir_p_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdirat_label);
 }
diff --git a/src/shared/mkdir-label.h b/src/shared/mkdir-label.h
new file mode 100644
index 0000000..a9a8ce3
--- /dev/null
+++ b/src/shared/mkdir-label.h
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <fcntl.h>
+#include <sys/types.h>
+
+#include "mkdir.h"
+
+int mkdirat_label(int dirfd, const char *path, mode_t mode);
+
+static inline int mkdir_label(const char *path, mode_t mode) {
+        return mkdirat_label(AT_FDCWD, path, mode);
+}
+
+int mkdirat_safe_label(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
+static inline int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
+        return mkdirat_safe_label(AT_FDCWD, path, mode, uid, gid, flags);
+}
+int mkdirat_parents_label(int dir_fd, const char *path, mode_t mod);
+static inline int mkdir_parents_label(const char *path, mode_t mod) {
+        return mkdirat_parents_label(AT_FDCWD, path, mod);
+}
+
+int mkdir_parents_safe_label(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
+
+int mkdir_p_label(const char *path, mode_t mode);
diff --git a/src/shared/mkfs-util.c b/src/shared/mkfs-util.c
index ce10e60..6cc2523 100644
--- a/src/shared/mkfs-util.c
+++ b/src/shared/mkfs-util.c
@@ -1,11 +1,22 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <unistd.h>
+
+#include "dirent-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "fs-util.h"
 #include "id128-util.h"
 #include "mkfs-util.h"
+#include "mountpoint-util.h"
 #include "path-util.h"
 #include "process-util.h"
+#include "recurse-dir.h"
+#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
+#include "tmpfile-util.h"
+#include "utf8.h"
 
 int mkfs_exists(const char *fstype) {
         const char *mkfs;
@@ -29,27 +40,279 @@
         return true;
 }
 
+int mkfs_supports_root_option(const char *fstype) {
+        return fstype_is_ro(fstype) || STR_IN_SET(fstype, "ext2", "ext3", "ext4", "btrfs", "vfat", "xfs");
+}
+
+static int mangle_linux_fs_label(const char *s, size_t max_len, char **ret) {
+        /* Not more than max_len bytes (12 or 16) */
+
+        assert(s);
+        assert(max_len > 0);
+        assert(ret);
+
+        const char *q;
+        char *ans;
+
+        for (q = s; *q;) {
+                int l;
+
+                l = utf8_encoded_valid_unichar(q, SIZE_MAX);
+                if (l < 0)
+                        return l;
+
+                if ((size_t) (q - s + l) > max_len)
+                        break;
+                q += l;
+        }
+
+        ans = memdup_suffix0(s, q - s);
+        if (!ans)
+                return -ENOMEM;
+
+        *ret = ans;
+        return 0;
+}
+
+static int mangle_fat_label(const char *s, char **ret) {
+        assert(s);
+
+        _cleanup_free_ char *q = NULL;
+        int r;
+
+        r = utf8_to_ascii(s, '_', &q);
+        if (r < 0)
+                return r;
+
+        /* Classic FAT only allows 11 character uppercase labels */
+        strshorten(q, 11);
+        ascii_strupper(q);
+
+        /* mkfs.vfat: Labels with characters *?.,;:/\|+=<>[]" are not allowed.
+         * Let's also replace any control chars. */
+        for (char *p = q; *p; p++)
+                if (strchr("*?.,;:/\\|+=<>[]\"", *p) || char_is_cc(*p))
+                        *p = '_';
+
+        *ret = TAKE_PTR(q);
+        return 0;
+}
+
+static int do_mcopy(const char *node, const char *root) {
+        _cleanup_free_ char *mcopy = NULL;
+        _cleanup_strv_free_ char **argv = NULL;
+        _cleanup_close_ int rfd = -EBADF;
+        _cleanup_free_ DirectoryEntries *de = NULL;
+        int r;
+
+        assert(node);
+        assert(root);
+
+        /* Return early if there's nothing to copy. */
+        if (dir_is_empty(root, /*ignore_hidden_or_backup=*/ false))
+                return 0;
+
+        r = find_executable("mcopy", &mcopy);
+        if (r == -ENOENT)
+                return log_error_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT), "Could not find mcopy binary.");
+        if (r < 0)
+                return log_error_errno(r, "Failed to determine whether mcopy binary exists: %m");
+
+        argv = strv_new(mcopy, "-s", "-p", "-Q", "-m", "-i", node);
+        if (!argv)
+                return log_oom();
+
+        /* mcopy copies the top level directory instead of everything in it so we have to pass all
+         * the subdirectories to mcopy instead to end up with the correct directory structure. */
+
+        rfd = open(root, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+        if (rfd < 0)
+                return log_error_errno(errno, "Failed to open directory '%s': %m", root);
+
+        r = readdir_all(rfd, RECURSE_DIR_SORT|RECURSE_DIR_ENSURE_TYPE, &de);
+        if (r < 0)
+                return log_error_errno(r, "Failed to read '%s' contents: %m", root);
+
+        for (size_t i = 0; i < de->n_entries; i++) {
+                _cleanup_free_ char *p = NULL;
+
+                p = path_join(root, de->entries[i]->d_name);
+                if (!p)
+                        return log_oom();
+
+                if (!IN_SET(de->entries[i]->d_type, DT_REG, DT_DIR)) {
+                        log_debug("%s is not a file/directory which are the only file types supported by vfat, ignoring", p);
+                        continue;
+                }
+
+                if (strv_consume(&argv, TAKE_PTR(p)) < 0)
+                        return log_oom();
+        }
+
+        if (strv_extend(&argv, "::") < 0)
+                return log_oom();
+
+        r = safe_fork("(mcopy)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_STDOUT_TO_STDERR|FORK_CLOSE_ALL_FDS, NULL);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                /* Avoid failures caused by mismatch in expectations between mkfs.vfat and mcopy by disabling
+                 * the stricter mcopy checks using MTOOLS_SKIP_CHECK. */
+                execve(mcopy, argv, STRV_MAKE("MTOOLS_SKIP_CHECK=1"));
+
+                log_error_errno(errno, "Failed to execute mcopy: %m");
+
+                _exit(EXIT_FAILURE);
+        }
+
+        return 0;
+}
+
+static int protofile_print_item(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
+
+        FILE *f = ASSERT_PTR(userdata);
+        int r;
+
+        if (event == RECURSE_DIR_LEAVE) {
+                fputs("$\n", f);
+                return 0;
+        }
+
+        if (!IN_SET(event, RECURSE_DIR_ENTER, RECURSE_DIR_ENTRY))
+                return RECURSE_DIR_CONTINUE;
+
+        char type = S_ISDIR(sx->stx_mode)  ? 'd' :
+                    S_ISREG(sx->stx_mode)  ? '-' :
+                    S_ISLNK(sx->stx_mode)  ? 'l' :
+                    S_ISFIFO(sx->stx_mode) ? 'p' :
+                    S_ISBLK(sx->stx_mode)  ? 'b' :
+                    S_ISCHR(sx->stx_mode)  ? 'c' : 0;
+        if (type == 0)
+                return RECURSE_DIR_CONTINUE;
+
+        fprintf(f, "%s %c%c%c%03o 0 0 ",
+                de->d_name,
+                type,
+                sx->stx_mode & S_ISUID ? 'u' : '-',
+                sx->stx_mode & S_ISGID ? 'g' : '-',
+                (unsigned) (sx->stx_mode & 0777));
+
+        if (S_ISREG(sx->stx_mode))
+                fputs(path, f);
+        else if (S_ISLNK(sx->stx_mode)) {
+                _cleanup_free_ char *p = NULL;
+
+                r = readlinkat_malloc(dir_fd, de->d_name, &p);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read symlink %s: %m", path);
+
+                fputs(p, f);
+        } else if (S_ISBLK(sx->stx_mode) || S_ISCHR(sx->stx_mode))
+                fprintf(f, "%" PRIu32 " %" PRIu32, sx->stx_rdev_major, sx->stx_rdev_minor);
+
+        fputc('\n', f);
+
+        return RECURSE_DIR_CONTINUE;
+}
+
+static int make_protofile(const char *root, char **ret) {
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_(unlink_and_freep) char *p = NULL;
+        const char *vt;
+        int r;
+
+        assert(ret);
+
+        r = var_tmp_dir(&vt);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get persistent temporary directory: %m");
+
+        r = fopen_temporary_child(vt, &f, &p);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open temporary file: %m");
+
+        fputs("/\n"
+              "0 0\n"
+              "d--755 0 0\n", f);
+
+        r = recurse_dir_at(AT_FDCWD, root, STATX_TYPE|STATX_MODE, UINT_MAX, RECURSE_DIR_SORT, protofile_print_item, f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to recurse through %s: %m", root);
+
+        fputs("$\n", f);
+
+        r = fflush_and_check(f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to flush %s: %m", p);
+
+        *ret = TAKE_PTR(p);
+
+        return 0;
+}
+
 int make_filesystem(
                 const char *node,
                 const char *fstype,
                 const char *label,
+                const char *root,
                 sd_id128_t uuid,
-                bool discard) {
+                bool discard,
+                uint64_t sector_size,
+                char * const *extra_mkfs_args) {
 
-        _cleanup_free_ char *mkfs = NULL;
+        _cleanup_free_ char *mkfs = NULL, *mangled_label = NULL;
+        _cleanup_strv_free_ char **argv = NULL;
+        _cleanup_(unlink_and_freep) char *protofile = NULL;
+        char vol_id[CONST_MAX(SD_ID128_UUID_STRING_MAX, 8U + 1U)] = {};
         int r;
 
         assert(node);
         assert(fstype);
         assert(label);
 
+        if (fstype_is_ro(fstype) && !root)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Cannot generate read-only filesystem %s without a source tree.",
+                                       fstype);
+
         if (streq(fstype, "swap")) {
+                if (root)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "A swap filesystem can't be populated, refusing");
                 r = find_executable("mkswap", &mkfs);
                 if (r == -ENOENT)
                         return log_error_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT), "mkswap binary not available.");
                 if (r < 0)
                         return log_error_errno(r, "Failed to determine whether mkswap binary exists: %m");
+        } else if (streq(fstype, "squashfs")) {
+                r = find_executable("mksquashfs", &mkfs);
+                if (r == -ENOENT)
+                        return log_error_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT), "mksquashfs binary not available.");
+                if (r < 0)
+                        return log_error_errno(r, "Failed to determine whether mksquashfs binary exists: %m");
+
+        } else if (streq(fstype, "erofs")) {
+                r = find_executable("mkfs.erofs", &mkfs);
+                if (r == -ENOENT)
+                        return log_error_errno(SYNTHETIC_ERRNO(EPROTONOSUPPORT), "mkfs.erofs binary not available.");
+                if (r < 0)
+                        return log_error_errno(r, "Failed to determine whether mkfs.erofs binary exists: %m");
+
+        } else if (fstype_is_ro(fstype)) {
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                                       "Don't know how to create read-only file system '%s', refusing.",
+                                                       fstype);
         } else {
+                if (root && !mkfs_supports_root_option(fstype))
+                        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                               "Populating with source tree is not supported for %s", fstype);
                 r = mkfs_exists(fstype);
                 if (r < 0)
                         return log_error_errno(r, "Failed to determine whether mkfs binary for %s exists: %m", fstype);
@@ -61,75 +324,201 @@
                         return log_oom();
         }
 
-        r = safe_fork("(mkfs)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_STDOUT_TO_STDERR, NULL);
+        if (STR_IN_SET(fstype, "ext2", "ext3", "ext4", "xfs", "swap")) {
+                size_t max_len =
+                        streq(fstype, "xfs") ? 12 :
+                        streq(fstype, "swap") ? 15 :
+                        16;
+
+                r = mangle_linux_fs_label(label, max_len, &mangled_label);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to determine volume label from string \"%s\": %m", label);
+                label = mangled_label;
+
+        } else if (streq(fstype, "vfat")) {
+                r = mangle_fat_label(label, &mangled_label);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to determine FAT label from string \"%s\": %m", label);
+                label = mangled_label;
+
+                xsprintf(vol_id, "%08" PRIx32,
+                         ((uint32_t) uuid.bytes[0] << 24) |
+                         ((uint32_t) uuid.bytes[1] << 16) |
+                         ((uint32_t) uuid.bytes[2] << 8) |
+                         ((uint32_t) uuid.bytes[3])); /* Take first 32 bytes of UUID */
+        }
+
+        if (isempty(vol_id))
+                assert_se(sd_id128_to_uuid_string(uuid, vol_id));
+
+        /* When changing this conditional, also adjust the log statement below. */
+        if (streq(fstype, "ext2")) {
+                argv = strv_new(mkfs,
+                                "-q",
+                                "-L", label,
+                                "-U", vol_id,
+                                "-I", "256",
+                                "-m", "0",
+                                "-E", discard ? "discard,lazy_itable_init=1" : "nodiscard,lazy_itable_init=1",
+                                "-b", "4096",
+                                "-T", "default",
+                                node);
+                if (!argv)
+                        return log_oom();
+
+                if (root && strv_extend_strv(&argv, STRV_MAKE("-d", root), false) < 0)
+                        return log_oom();
+
+        } else if (STR_IN_SET(fstype, "ext3", "ext4")) {
+                argv = strv_new(mkfs,
+                                "-q",
+                                "-L", label,
+                                "-U", vol_id,
+                                "-I", "256",
+                                "-O", "has_journal",
+                                "-m", "0",
+                                "-E", discard ? "discard,lazy_itable_init=1" : "nodiscard,lazy_itable_init=1",
+                                "-b", "4096",
+                                "-T", "default",
+                                node);
+
+                if (root && strv_extend_strv(&argv, STRV_MAKE("-d", root), false) < 0)
+                        return log_oom();
+
+        } else if (streq(fstype, "btrfs")) {
+                argv = strv_new(mkfs,
+                                "-q",
+                                "-L", label,
+                                "-U", vol_id,
+                                node);
+                if (!argv)
+                        return log_oom();
+
+                if (!discard && strv_extend(&argv, "--nodiscard") < 0)
+                        return log_oom();
+
+                if (root && strv_extend_strv(&argv, STRV_MAKE("-r", root), false) < 0)
+                        return log_oom();
+
+        } else if (streq(fstype, "f2fs")) {
+                argv = strv_new(mkfs,
+                                "-q",
+                                "-g",  /* "default options" */
+                                "-f",  /* force override, without this it doesn't seem to want to write to an empty partition */
+                                "-l", label,
+                                "-U", vol_id,
+                                "-t", one_zero(discard),
+                                node);
+
+        } else if (streq(fstype, "xfs")) {
+                const char *j;
+
+                j = strjoina("uuid=", vol_id);
+
+                argv = strv_new(mkfs,
+                                "-q",
+                                "-L", label,
+                                "-m", j,
+                                "-m", "reflink=1",
+                                node);
+                if (!argv)
+                        return log_oom();
+
+                if (!discard && strv_extend(&argv, "-K") < 0)
+                        return log_oom();
+
+                if (root) {
+                        r = make_protofile(root, &protofile);
+                        if (r < 0)
+                                return r;
+
+                        if (strv_extend_strv(&argv, STRV_MAKE("-p", protofile), false) < 0)
+                                return log_oom();
+                }
+
+                if (sector_size > 0) {
+                        if (strv_extend(&argv, "-s") < 0)
+                                return log_oom();
+
+                        if (strv_extendf(&argv, "size=%"PRIu64, sector_size) < 0)
+                                return log_oom();
+                }
+
+        } else if (streq(fstype, "vfat")) {
+
+                argv = strv_new(mkfs,
+                                "-i", vol_id,
+                                "-n", label,
+                                "-F", "32",  /* yes, we force FAT32 here */
+                                node);
+
+                if (sector_size > 0) {
+                        if (strv_extend(&argv, "-S") < 0)
+                                return log_oom();
+
+                        if (strv_extendf(&argv, "%"PRIu64, sector_size) < 0)
+                                return log_oom();
+                }
+
+        } else if (streq(fstype, "swap"))
+                /* TODO: add --quiet here if
+                 * https://github.com/util-linux/util-linux/issues/1499 resolved. */
+
+                argv = strv_new(mkfs,
+                                "-L", label,
+                                "-U", vol_id,
+                                node);
+
+        else if (streq(fstype, "squashfs"))
+
+                argv = strv_new(mkfs,
+                                root, node,
+                                "-quiet",
+                                "-noappend");
+
+        else if (streq(fstype, "erofs"))
+
+                argv = strv_new(mkfs,
+                                "-U", vol_id,
+                                node, root);
+        else
+                /* Generic fallback for all other file systems */
+                argv = strv_new(mkfs, node);
+
+        if (!argv)
+                return log_oom();
+
+        if (extra_mkfs_args && strv_extend_strv(&argv, extra_mkfs_args, false) < 0)
+                return log_oom();
+
+        r = safe_fork("(mkfs)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_STDOUT_TO_STDERR|FORK_CLOSE_ALL_FDS, NULL);
         if (r < 0)
                 return r;
         if (r == 0) {
-                char suuid[ID128_UUID_STRING_MAX];
-
                 /* Child */
-                id128_to_uuid_string(uuid, suuid);
 
-                if (streq(fstype, "ext4"))
-                        (void) execlp(mkfs, mkfs,
-                               "-L", label,
-                               "-U", suuid,
-                               "-I", "256",
-                               "-O", "has_journal",
-                               "-m", "0",
-                               "-E", discard ? "lazy_itable_init=1,discard" : "lazy_itable_init=1,nodiscard",
-                               node, NULL);
-
-                else if (streq(fstype, "btrfs")) {
-                        if (discard)
-                                (void) execlp(mkfs, mkfs, "-L", label, "-U", suuid, node, NULL);
-                        else
-                                (void) execlp(mkfs, mkfs, "-L", label, "-U", suuid, "--nodiscard", node, NULL);
-
-                } else if (streq(fstype, "xfs")) {
-                        const char *j;
-
-                        j = strjoina("uuid=", suuid);
-                        if (discard)
-                                (void) execlp(mkfs, mkfs, "-L", label, "-m", j, "-m", "reflink=1", node, NULL);
-                        else
-                                (void) execlp(mkfs, mkfs, "-L", label, "-m", j, "-m", "reflink=1", "-K", node, NULL);
-
-                } else if (streq(fstype, "vfat")) {
-                        char mangled_label[8 + 3 + 1], vol_id[8 + 1];
-
-                        /* Classic FAT only allows 11 character uppercase labels */
-                        strncpy(mangled_label, label, sizeof(mangled_label)-1);
-                        mangled_label[sizeof(mangled_label)-1] = 0;
-                        ascii_strupper(mangled_label);
-
-                        xsprintf(vol_id, "%08" PRIx32,
-                                 ((uint32_t) uuid.bytes[0] << 24) |
-                                 ((uint32_t) uuid.bytes[1] << 16) |
-                                 ((uint32_t) uuid.bytes[2] << 8) |
-                                 ((uint32_t) uuid.bytes[3])); /* Take first 32 byte of UUID */
-
-                        (void) execlp(mkfs, mkfs,
-                                      "-i", vol_id,
-                                      "-n", mangled_label,
-                                      "-F", "32",  /* yes, we force FAT32 here */
-                                      node, NULL);
-
-                } else if (streq(fstype, "swap")) {
-
-                        (void) execlp(mkfs, mkfs,
-                               "-L", label,
-                               "-U", suuid,
-                               node, NULL);
-
-                } else
-                        /* Generic fallback for all other file systems */
-                        (void) execlp(mkfs, mkfs, node, NULL);
+                execvp(mkfs, argv);
 
                 log_error_errno(errno, "Failed to execute %s: %m", mkfs);
 
                 _exit(EXIT_FAILURE);
         }
 
+        if (root && streq(fstype, "vfat")) {
+                r = do_mcopy(node, root);
+                if (r < 0)
+                        return r;
+        }
+
+        if (STR_IN_SET(fstype, "ext2", "ext3", "ext4", "btrfs", "f2fs", "xfs", "vfat", "swap"))
+                log_info("%s successfully formatted as %s (label \"%s\", uuid %s)",
+                         node, fstype, label, vol_id);
+        else if (streq(fstype, "erofs"))
+                log_info("%s successfully formatted as %s (uuid %s, no label)",
+                         node, fstype, vol_id);
+        else
+                log_info("%s successfully formatted as %s (no label or uuid specified)",
+                         node, fstype);
+
         return 0;
 }
diff --git a/src/shared/mkfs-util.h b/src/shared/mkfs-util.h
index 7647afb..b99ec3c 100644
--- a/src/shared/mkfs-util.h
+++ b/src/shared/mkfs-util.h
@@ -5,6 +5,18 @@
 
 #include "sd-id128.h"
 
+#include "strv.h"
+
 int mkfs_exists(const char *fstype);
 
-int make_filesystem(const char *node, const char *fstype, const char *label, sd_id128_t uuid, bool discard);
+int mkfs_supports_root_option(const char *fstype);
+
+int make_filesystem(
+                const char *node,
+                const char *fstype,
+                const char *label,
+                const char *root,
+                sd_id128_t uuid,
+                bool discard,
+                uint64_t sector_size,
+                char * const *extra_mkfs_args);
diff --git a/src/shared/module-util.c b/src/shared/module-util.c
index 1526f59..951701d 100644
--- a/src/shared/module-util.c
+++ b/src/shared/module-util.c
@@ -3,11 +3,47 @@
 #include <errno.h>
 
 #include "module-util.h"
+#include "proc-cmdline.h"
+#include "strv.h"
+
+static int denylist_modules(const char *p, char ***denylist) {
+        _cleanup_strv_free_ char **k = NULL;
+
+        assert(p);
+        assert(denylist);
+
+        k = strv_split(p, ",");
+        if (!k)
+                return -ENOMEM;
+
+        if (strv_extend_strv(denylist, k, true) < 0)
+                return -ENOMEM;
+
+        return 0;
+}
+
+static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
+        int r;
+
+        if (proc_cmdline_key_streq(key, "module_blacklist")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                r = denylist_modules(value, data);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
 
 int module_load_and_warn(struct kmod_ctx *ctx, const char *module, bool verbose) {
         const int probe_flags = KMOD_PROBE_APPLY_BLACKLIST;
         struct kmod_list *itr;
         _cleanup_(kmod_module_unref_listp) struct kmod_list *modlist = NULL;
+        _cleanup_strv_free_ char **denylist = NULL;
+        bool denylist_parsed = false;
         int r;
 
         /* verbose==true means we should log at non-debug level if we
@@ -50,10 +86,27 @@
                                          "Inserted module '%s'", kmod_module_get_name(mod));
                         else if (err == KMOD_PROBE_APPLY_BLACKLIST)
                                 log_full(verbose ? LOG_INFO : LOG_DEBUG,
-                                         "Module '%s' is deny-listed", kmod_module_get_name(mod));
+                                         "Module '%s' is deny-listed (by kmod)", kmod_module_get_name(mod));
                         else {
                                 assert(err < 0);
 
+                                if (err == -EPERM) {
+                                        if (!denylist_parsed) {
+                                                r = proc_cmdline_parse(parse_proc_cmdline_item, &denylist, 0);
+                                                if (r < 0)
+                                                        log_full_errno(!verbose ? LOG_DEBUG : LOG_WARNING,
+                                                                       r,
+                                                                       "Failed to parse kernel command line, ignoring: %m");
+
+                                                denylist_parsed = true;
+                                        }
+                                        if (strv_contains(denylist, kmod_module_get_name(mod))) {
+                                                log_full(verbose ? LOG_INFO : LOG_DEBUG,
+                                                         "Module '%s' is deny-listed (by kernel)", kmod_module_get_name(mod));
+                                                continue;
+                                        }
+                                }
+
                                 log_full_errno(!verbose ? LOG_DEBUG :
                                                err == -ENODEV ? LOG_NOTICE :
                                                err == -ENOENT ? LOG_WARNING :
diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c
index ef3527e..f1ee528 100644
--- a/src/shared/mount-setup.c
+++ b/src/shared/mount-setup.c
@@ -1,7 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
-#include <ftw.h>
 #include <stdlib.h>
 #include <sys/mount.h>
 #include <sys/statvfs.h>
@@ -9,9 +8,9 @@
 
 #include "alloc-util.h"
 #include "bus-util.h"
+#include "cgroup-setup.h"
 #include "cgroup-util.h"
 #include "conf-files.h"
-#include "cgroup-setup.h"
 #include "dev-setup.h"
 #include "dirent-util.h"
 #include "efi-loader.h"
@@ -21,12 +20,13 @@
 #include "label.h"
 #include "log.h"
 #include "macro.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-setup.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
 #include "nulstr-util.h"
 #include "path-util.h"
+#include "recurse-dir.h"
 #include "set.h"
 #include "smack-util.h"
 #include "strv.h"
@@ -62,53 +62,55 @@
 #endif
 
 static const MountPoint mount_table[] = {
-        { "proc",        "/proc",                     "proc",       NULL,                                      MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "proc",        "/proc",                     "proc",       NULL,                                       MS_NOSUID|MS_NOEXEC|MS_NODEV,
           NULL,          MNT_FATAL|MNT_IN_CONTAINER|MNT_FOLLOW_SYMLINK },
-        { "sysfs",       "/sys",                      "sysfs",      NULL,                                      MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "sysfs",       "/sys",                      "sysfs",      NULL,                                       MS_NOSUID|MS_NOEXEC|MS_NODEV,
           NULL,          MNT_FATAL|MNT_IN_CONTAINER },
-        { "devtmpfs",    "/dev",                      "devtmpfs",   "mode=755" TMPFS_LIMITS_DEV,               MS_NOSUID|MS_STRICTATIME,
+        { "devtmpfs",    "/dev",                      "devtmpfs",   "mode=0755" TMPFS_LIMITS_DEV,               MS_NOSUID|MS_STRICTATIME,
           NULL,          MNT_FATAL|MNT_IN_CONTAINER },
-        { "securityfs",  "/sys/kernel/security",      "securityfs", NULL,                                      MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "securityfs",  "/sys/kernel/security",      "securityfs", NULL,                                       MS_NOSUID|MS_NOEXEC|MS_NODEV,
           NULL,          MNT_NONE                   },
 #if ENABLE_SMACK
-        { "smackfs",     "/sys/fs/smackfs",           "smackfs",    "smackfsdef=*",                            MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "smackfs",     "/sys/fs/smackfs",           "smackfs",    "smackfsdef=*",                             MS_NOSUID|MS_NOEXEC|MS_NODEV,
           mac_smack_use, MNT_FATAL                  },
-        { "tmpfs",       "/dev/shm",                  "tmpfs",      "mode=1777,smackfsroot=*",                 MS_NOSUID|MS_NODEV|MS_STRICTATIME,
+        { "tmpfs",       "/dev/shm",                  "tmpfs",      "mode=01777,smackfsroot=*",                 MS_NOSUID|MS_NODEV|MS_STRICTATIME,
           mac_smack_use, MNT_FATAL                  },
 #endif
-        { "tmpfs",       "/dev/shm",                  "tmpfs",      "mode=1777",                               MS_NOSUID|MS_NODEV|MS_STRICTATIME,
+        { "tmpfs",       "/dev/shm",                  "tmpfs",      "mode=01777",                               MS_NOSUID|MS_NODEV|MS_STRICTATIME,
           NULL,          MNT_FATAL|MNT_IN_CONTAINER },
-        { "devpts",      "/dev/pts",                  "devpts",     "mode=620,gid=" STRINGIFY(TTY_GID),        MS_NOSUID|MS_NOEXEC,
+        { "devpts",      "/dev/pts",                  "devpts",     "mode=0620,gid=" STRINGIFY(TTY_GID),        MS_NOSUID|MS_NOEXEC,
           NULL,          MNT_IN_CONTAINER           },
 #if ENABLE_SMACK
-        { "tmpfs",       "/run",                      "tmpfs",      "mode=755,smackfsroot=*" TMPFS_LIMITS_RUN, MS_NOSUID|MS_NODEV|MS_STRICTATIME,
+        { "tmpfs",       "/run",                      "tmpfs",      "mode=0755,smackfsroot=*" TMPFS_LIMITS_RUN, MS_NOSUID|MS_NODEV|MS_STRICTATIME,
           mac_smack_use, MNT_FATAL                  },
 #endif
-        { "tmpfs",       "/run",                      "tmpfs",      "mode=755" TMPFS_LIMITS_RUN,               MS_NOSUID|MS_NODEV|MS_STRICTATIME,
+        { "tmpfs",       "/run",                      "tmpfs",      "mode=0755" TMPFS_LIMITS_RUN,               MS_NOSUID|MS_NODEV|MS_STRICTATIME,
           NULL,          MNT_FATAL|MNT_IN_CONTAINER },
-        { "cgroup2",     "/sys/fs/cgroup",            "cgroup2",    "nsdelegate,memory_recursiveprot",         MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "cgroup2",     "/sys/fs/cgroup",            "cgroup2",    "nsdelegate,memory_recursiveprot",          MS_NOSUID|MS_NOEXEC|MS_NODEV,
           cg_is_unified_wanted, MNT_IN_CONTAINER|MNT_CHECK_WRITABLE },
-        { "cgroup2",     "/sys/fs/cgroup",            "cgroup2",    "nsdelegate",                              MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "cgroup2",     "/sys/fs/cgroup",            "cgroup2",    "nsdelegate",                               MS_NOSUID|MS_NOEXEC|MS_NODEV,
           cg_is_unified_wanted, MNT_IN_CONTAINER|MNT_CHECK_WRITABLE },
-        { "cgroup2",     "/sys/fs/cgroup",            "cgroup2",    NULL,                                      MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "cgroup2",     "/sys/fs/cgroup",            "cgroup2",    NULL,                                       MS_NOSUID|MS_NOEXEC|MS_NODEV,
           cg_is_unified_wanted, MNT_IN_CONTAINER|MNT_CHECK_WRITABLE },
-        { "tmpfs",       "/sys/fs/cgroup",            "tmpfs",      "mode=755" TMPFS_LIMITS_SYS_FS_CGROUP,     MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME,
+        { "tmpfs",       "/sys/fs/cgroup",            "tmpfs",      "mode=0755" TMPFS_LIMITS_SYS_FS_CGROUP,     MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME,
           cg_is_legacy_wanted, MNT_FATAL|MNT_IN_CONTAINER },
-        { "cgroup2",     "/sys/fs/cgroup/unified",    "cgroup2",    "nsdelegate",                              MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "cgroup2",     "/sys/fs/cgroup/unified",    "cgroup2",    "nsdelegate",                               MS_NOSUID|MS_NOEXEC|MS_NODEV,
           cg_is_hybrid_wanted, MNT_IN_CONTAINER|MNT_CHECK_WRITABLE },
-        { "cgroup2",     "/sys/fs/cgroup/unified",    "cgroup2",    NULL,                                      MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "cgroup2",     "/sys/fs/cgroup/unified",    "cgroup2",    NULL,                                       MS_NOSUID|MS_NOEXEC|MS_NODEV,
           cg_is_hybrid_wanted, MNT_IN_CONTAINER|MNT_CHECK_WRITABLE },
-        { "cgroup",      "/sys/fs/cgroup/systemd",    "cgroup",     "none,name=systemd,xattr",                 MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "cgroup",      "/sys/fs/cgroup/systemd",    "cgroup",     "none,name=systemd,xattr",                  MS_NOSUID|MS_NOEXEC|MS_NODEV,
           cg_is_legacy_wanted, MNT_IN_CONTAINER     },
-        { "cgroup",      "/sys/fs/cgroup/systemd",    "cgroup",     "none,name=systemd",                       MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "cgroup",      "/sys/fs/cgroup/systemd",    "cgroup",     "none,name=systemd",                        MS_NOSUID|MS_NOEXEC|MS_NODEV,
           cg_is_legacy_wanted, MNT_FATAL|MNT_IN_CONTAINER },
-        { "pstore",      "/sys/fs/pstore",            "pstore",     NULL,                                      MS_NOSUID|MS_NOEXEC|MS_NODEV,
+#if ENABLE_PSTORE
+        { "pstore",      "/sys/fs/pstore",            "pstore",     NULL,                                       MS_NOSUID|MS_NOEXEC|MS_NODEV,
           NULL,          MNT_NONE                   },
+#endif
 #if ENABLE_EFI
-        { "efivarfs",    "/sys/firmware/efi/efivars", "efivarfs",   NULL,                                      MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "efivarfs",    "/sys/firmware/efi/efivars", "efivarfs",   NULL,                                       MS_NOSUID|MS_NOEXEC|MS_NODEV,
           is_efi_boot,   MNT_NONE                   },
 #endif
-        { "bpf",         "/sys/fs/bpf",               "bpf",        "mode=700",                                MS_NOSUID|MS_NOEXEC|MS_NODEV,
+        { "bpf",         "/sys/fs/bpf",               "bpf",        "mode=0700",                                MS_NOSUID|MS_NOEXEC|MS_NODEV,
           NULL,          MNT_NONE,                  },
 };
 
@@ -126,9 +128,6 @@
 }
 
 bool mount_point_ignore(const char *path) {
-
-        const char *i;
-
         /* These are API file systems that might be mounted by other software, we just list them here so that
          * we know that we should ignore them. */
         FOREACH_STRING(i,
@@ -189,7 +188,7 @@
                   strna(p->options));
 
         if (FLAGS_SET(p->mode, MNT_FOLLOW_SYMLINK))
-                r = mount(p->what, p->where, p->type, p->flags, p->options) < 0 ? -errno : 0;
+                r = RET_NERRNO(mount(p->what, p->where, p->type, p->flags, p->options));
         else
                 r = mount_nofollow(p->what, p->where, p->type, p->flags, p->options);
         if (r < 0) {
@@ -247,8 +246,6 @@
                 NULL
         };
 
-        const char *const *x, *const *y;
-
         assert(controller);
 
         /* This will lookup which controller to mount another controller with. Input is a controller name, and output
@@ -278,7 +275,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to create symlink %s: %m", a);
 
-#ifdef SMACK_RUN_LABEL
+#if HAVE_SMACK_RUN_LABEL
         const char *p;
 
         p = strjoina("/sys/fs/cgroup/", target);
@@ -292,7 +289,7 @@
 }
 
 int mount_cgroup_controllers(void) {
-        _cleanup_set_free_free_ Set *controllers = NULL;
+        _cleanup_set_free_ Set *controllers = NULL;
         int r;
 
         if (!cg_is_legacy_wanted())
@@ -359,33 +356,54 @@
         }
 
         /* Now that we mounted everything, let's make the tmpfs the cgroup file systems are mounted into read-only. */
-        (void) mount_nofollow("tmpfs", "/sys/fs/cgroup", "tmpfs", MS_REMOUNT|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME|MS_RDONLY, "mode=755" TMPFS_LIMITS_SYS_FS_CGROUP);
+        (void) mount_nofollow("tmpfs", "/sys/fs/cgroup", "tmpfs",
+                              MS_REMOUNT|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME|MS_RDONLY,
+                              "mode=0755" TMPFS_LIMITS_SYS_FS_CGROUP);
 
         return 0;
 }
 
 #if HAVE_SELINUX || ENABLE_SMACK
-static int nftw_cb(
-                const char *fpath,
-                const struct stat *sb,
-                int tflag,
-                struct FTW *ftwbuf) {
+static int relabel_cb(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
 
-        /* No need to label /dev twice in a row... */
-        if (_unlikely_(ftwbuf->level == 0))
-                return FTW_CONTINUE;
+        switch (event) {
 
-        (void) label_fix(fpath, 0);
+        case RECURSE_DIR_LEAVE:
+        case RECURSE_DIR_SKIP_MOUNT:
+                /* If we already saw this dirent when entering it or this is a dirent that on a different
+                 * mount, don't relabel it. */
+                return RECURSE_DIR_CONTINUE;
 
-        /* /run/initramfs is static data and big, no need to
-         * dynamically relabel its contents at boot... */
-        if (_unlikely_(ftwbuf->level == 1 &&
-                      tflag == FTW_D &&
-                      streq(fpath, "/run/initramfs")))
-                return FTW_SKIP_SUBTREE;
+        case RECURSE_DIR_ENTER:
+                /* /run/initramfs is static data and big, no need to dynamically relabel its contents at boot... */
+                if (path_equal(path, "/run/initramfs"))
+                        return RECURSE_DIR_SKIP_ENTRY;
 
-        return FTW_CONTINUE;
-};
+                _fallthrough_;
+
+        default:
+                /* Otherwise, label it, even if we had trouble stat()ing it and similar. SELinux can figure this out */
+                (void) label_fix(path, 0);
+                return RECURSE_DIR_CONTINUE;
+        }
+}
+
+static int relabel_tree(const char *path) {
+        int r;
+
+        r = recurse_dir_at(AT_FDCWD, path, 0, UINT_MAX, RECURSE_DIR_ENSURE_TYPE|RECURSE_DIR_SAME_MOUNT, relabel_cb, NULL);
+        if (r < 0)
+                log_debug_errno(r, "Failed to recursively relabel '%s': %m", path);
+
+        return r;
+}
 
 static int relabel_cgroup_filesystems(void) {
         int r;
@@ -404,7 +422,7 @@
                         (void) mount_nofollow(NULL, "/sys/fs/cgroup", NULL, MS_REMOUNT, NULL);
 
                 (void) label_fix("/sys/fs/cgroup", 0);
-                (void) nftw("/sys/fs/cgroup", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
+                (void) relabel_tree("/sys/fs/cgroup");
 
                 if (st.f_flags & ST_RDONLY)
                         (void) mount_nofollow(NULL, "/sys/fs/cgroup", NULL, MS_REMOUNT|MS_RDONLY, NULL);
@@ -417,7 +435,6 @@
 
 static int relabel_extra(void) {
         _cleanup_strv_free_ char **files = NULL;
-        char **file;
         int r, c = 0;
 
         /* Support for relabelling additional files or directories after loading the policy. For this, code in the
@@ -468,7 +485,7 @@
 
                         log_debug("Relabelling additional file/directory '%s'.", line);
                         (void) label_fix(line, 0);
-                        (void) nftw(line, nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
+                        (void) relabel_tree(line);
                         c++;
                 }
 
@@ -499,14 +516,12 @@
          * use the same label for all their files. */
         if (loaded_policy) {
                 usec_t before_relabel, after_relabel;
-                char timespan[FORMAT_TIMESPAN_MAX];
-                const char *i;
                 int n_extra;
 
                 before_relabel = now(CLOCK_MONOTONIC);
 
                 FOREACH_STRING(i, "/dev", "/dev/shm", "/run")
-                        (void) nftw(i, nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
+                        (void) relabel_tree(i);
 
                 (void) relabel_cgroup_filesystems();
 
@@ -516,7 +531,7 @@
 
                 log_info("Relabelled /dev, /dev/shm, /run, /sys/fs/cgroup%s in %s.",
                          n_extra > 0 ? ", additional files" : "",
-                         format_timespan(timespan, sizeof(timespan), after_relabel - before_relabel, 0));
+                         FORMAT_TIMESPAN(after_relabel - before_relabel, 0));
         }
 #endif
 
diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c
index c1f5a05..8aad531 100644
--- a/src/shared/mount-util.c
+++ b/src/shared/mount-util.c
@@ -7,20 +7,26 @@
 #include <sys/statvfs.h>
 #include <unistd.h>
 #include <linux/loop.h>
+#if WANT_LINUX_FS_H
 #include <linux/fs.h>
+#endif
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "dissect-image.h"
+#include "exec-util.h"
 #include "extract-word.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "hashmap.h"
+#include "initrd-util.h"
 #include "label.h"
 #include "libmount-util.h"
 #include "missing_mount.h"
 #include "missing_syscall.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
 #include "namespace-util.h"
@@ -30,60 +36,12 @@
 #include "set.h"
 #include "stat-util.h"
 #include "stdio-util.h"
+#include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
 #include "tmpfile-util.h"
 #include "user-util.h"
 
-int mount_fd(const char *source,
-             int target_fd,
-             const char *filesystemtype,
-             unsigned long mountflags,
-             const void *data) {
-
-        char path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-
-        xsprintf(path, "/proc/self/fd/%i", target_fd);
-        if (mount(source, path, filesystemtype, mountflags, data) < 0) {
-                if (errno != ENOENT)
-                        return -errno;
-
-                /* ENOENT can mean two things: either that the source is missing, or that /proc/ isn't
-                 * mounted. Check for the latter to generate better error messages. */
-                if (proc_mounted() == 0)
-                        return -ENOSYS;
-
-                return -ENOENT;
-        }
-
-        return 0;
-}
-
-int mount_nofollow(
-                const char *source,
-                const char *target,
-                const char *filesystemtype,
-                unsigned long mountflags,
-                const void *data) {
-
-        _cleanup_close_ int fd = -1;
-
-        /* In almost all cases we want to manipulate the mount table without following symlinks, hence
-         * mount_nofollow() is usually the way to go. The only exceptions are environments where /proc/ is
-         * not available yet, since we need /proc/self/fd/ for this logic to work. i.e. during the early
-         * initialization of namespacing/container stuff where /proc is not yet mounted (and maybe even the
-         * fs to mount) we can only use traditional mount() directly.
-         *
-         * Note that this disables following only for the final component of the target, i.e symlinks within
-         * the path of the target are honoured, as are symlinks in the source path everywhere. */
-
-        fd = open(target, O_PATH|O_CLOEXEC|O_NOFOLLOW);
-        if (fd < 0)
-                return -errno;
-
-        return mount_fd(source, fd, filesystemtype, mountflags, data);
-}
-
 int umount_recursive(const char *prefix, int flags) {
         int n = 0, r;
         bool again;
@@ -135,6 +93,31 @@
         return n;
 }
 
+#define MS_CONVERTIBLE_FLAGS (MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_NOSYMFOLLOW)
+
+static uint64_t ms_flags_to_mount_attr(unsigned long a) {
+        uint64_t f = 0;
+
+        if (FLAGS_SET(a, MS_RDONLY))
+                f |= MOUNT_ATTR_RDONLY;
+
+        if (FLAGS_SET(a, MS_NOSUID))
+                f |= MOUNT_ATTR_NOSUID;
+
+        if (FLAGS_SET(a, MS_NODEV))
+                f |= MOUNT_ATTR_NODEV;
+
+        if (FLAGS_SET(a, MS_NOEXEC))
+                f |= MOUNT_ATTR_NOEXEC;
+
+        if (FLAGS_SET(a, MS_NOSYMFOLLOW))
+                f |= MOUNT_ATTR_NOSYMFOLLOW;
+
+        return f;
+}
+
+static bool skip_mount_set_attr = false;
+
 /* Use this function only if you do not have direct access to /proc/self/mountinfo but the caller can open it
  * for you. This is the case when /proc is masked or not mounted. Otherwise, use bind_remount_recursive. */
 int bind_remount_recursive_with_mountinfo(
@@ -144,12 +127,44 @@
                 char **deny_list,
                 FILE *proc_self_mountinfo) {
 
+        _cleanup_fclose_ FILE *proc_self_mountinfo_opened = NULL;
         _cleanup_set_free_ Set *done = NULL;
         unsigned n_tries = 0;
         int r;
 
         assert(prefix);
-        assert(proc_self_mountinfo);
+
+        if ((flags_mask & ~MS_CONVERTIBLE_FLAGS) == 0 && strv_isempty(deny_list) && !skip_mount_set_attr) {
+                /* Let's take a shortcut for all the flags we know how to convert into mount_setattr() flags */
+
+                if (mount_setattr(AT_FDCWD, prefix, AT_SYMLINK_NOFOLLOW|AT_RECURSIVE,
+                                  &(struct mount_attr) {
+                                          .attr_set = ms_flags_to_mount_attr(new_flags & flags_mask),
+                                          .attr_clr = ms_flags_to_mount_attr(~new_flags & flags_mask),
+                                  }, MOUNT_ATTR_SIZE_VER0) < 0) {
+
+                        log_debug_errno(errno, "mount_setattr() failed, falling back to classic remounting: %m");
+
+                        /* We fall through to classic behaviour if not supported (i.e. kernel < 5.12). We
+                         * also do this for all other kinds of errors since they are so many different, and
+                         * mount_setattr() has no graceful mode where it continues despite seeing errors one
+                         * some mounts, but we want that. Moreover mount_setattr() only works on the mount
+                         * point inode itself, not a non-mount point inode, and we want to support arbitrary
+                         * prefixes here. */
+
+                        if (ERRNO_IS_NOT_SUPPORTED(errno)) /* if not supported, then don't bother at all anymore */
+                                skip_mount_set_attr = true;
+                } else
+                        return 0; /* Nice, this worked! */
+        }
+
+        if (!proc_self_mountinfo) {
+                r = fopen_unlocked("/proc/self/mountinfo", "re", &proc_self_mountinfo_opened);
+                if (r < 0)
+                        return r;
+
+                proc_self_mountinfo = proc_self_mountinfo_opened;
+        }
 
         /* Recursively remount a directory (and all its submounts) with desired flags (MS_READONLY,
          * MS_NOSUID, MS_NOEXEC). If the directory is already mounted, we reuse the mount and simply mark it
@@ -218,7 +233,6 @@
                          * we shall operate on. */
                         if (!path_equal(path, prefix)) {
                                 bool deny_listed = false;
-                                char **i;
 
                                 STRV_FOREACH(i, deny_list) {
                                         if (path_equal(*i, prefix))
@@ -344,22 +358,6 @@
         }
 }
 
-int bind_remount_recursive(
-                const char *prefix,
-                unsigned long new_flags,
-                unsigned long flags_mask,
-                char **deny_list) {
-
-        _cleanup_fclose_ FILE *proc_self_mountinfo = NULL;
-        int r;
-
-        r = fopen_unlocked("/proc/self/mountinfo", "re", &proc_self_mountinfo);
-        if (r < 0)
-                return r;
-
-        return bind_remount_recursive_with_mountinfo(prefix, new_flags, flags_mask, deny_list, proc_self_mountinfo);
-}
-
 int bind_remount_one_with_mountinfo(
                 const char *path,
                 unsigned long new_flags,
@@ -375,6 +373,23 @@
         assert(path);
         assert(proc_self_mountinfo);
 
+        if ((flags_mask & ~MS_CONVERTIBLE_FLAGS) == 0 && !skip_mount_set_attr) {
+                /* Let's take a shortcut for all the flags we know how to convert into mount_setattr() flags */
+
+                if (mount_setattr(AT_FDCWD, path, AT_SYMLINK_NOFOLLOW,
+                                  &(struct mount_attr) {
+                                          .attr_set = ms_flags_to_mount_attr(new_flags & flags_mask),
+                                          .attr_clr = ms_flags_to_mount_attr(~new_flags & flags_mask),
+                                  }, MOUNT_ATTR_SIZE_VER0) < 0) {
+
+                        log_debug_errno(errno, "mount_setattr() didn't work, falling back to classic remounting: %m");
+
+                        if (ERRNO_IS_NOT_SUPPORTED(errno)) /* if not supported, then don't bother at all anymore */
+                                skip_mount_set_attr = true;
+                } else
+                        return 0; /* Nice, this worked! */
+        }
+
         rewind(proc_self_mountinfo);
 
         table = mnt_new_table();
@@ -415,20 +430,81 @@
         return 0;
 }
 
-int mount_move_root(const char *path) {
-        assert(path);
+static int mount_switch_root_pivot(const char *path, int fd_newroot) {
+        _cleanup_close_ int fd_oldroot = -EBADF;
 
-        if (chdir(path) < 0)
-                return -errno;
+        fd_oldroot = open("/", O_PATH|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW);
+        if (fd_oldroot < 0)
+                return log_debug_errno(errno, "Failed to open old rootfs");
 
+        /* Let the kernel tuck the new root under the old one. */
+        if (pivot_root(".", ".") < 0)
+                return log_debug_errno(errno, "Failed to pivot root to new rootfs '%s': %m", path);
+
+        /* At this point the new root is tucked under the old root. If we want
+         * to unmount it we cannot be fchdir()ed into it. So escape back to the
+         * old root. */
+        if (fchdir(fd_oldroot) < 0)
+                return log_debug_errno(errno, "Failed to change back to old rootfs: %m");
+
+        /* Note, usually we should set mount propagation up here but we'll
+         * assume that the caller has already done that. */
+
+        /* Get rid of the old root and reveal our brand new root. */
+        if (umount2(".", MNT_DETACH) < 0)
+                return log_debug_errno(errno, "Failed to unmount old rootfs: %m");
+
+        if (fchdir(fd_newroot) < 0)
+                return log_debug_errno(errno, "Failed to switch to new rootfs '%s': %m", path);
+
+        return 0;
+}
+
+static int mount_switch_root_move(const char *path) {
         if (mount(path, "/", NULL, MS_MOVE, NULL) < 0)
-                return -errno;
+                return log_debug_errno(errno, "Failed to move new rootfs '%s': %m", path);
 
         if (chroot(".") < 0)
-                return -errno;
+                return log_debug_errno(errno, "Failed to chroot to new rootfs '%s': %m", path);
 
-        if (chdir("/") < 0)
-                return -errno;
+        if (chdir("/"))
+                return log_debug_errno(errno, "Failed to chdir to new rootfs '%s': %m", path);
+
+        return 0;
+}
+
+int mount_switch_root(const char *path, unsigned long mount_propagation_flag) {
+        _cleanup_close_ int fd_newroot = -EBADF;
+        int r;
+
+        assert(path);
+        assert(mount_propagation_flag_is_valid(mount_propagation_flag));
+
+        fd_newroot = open(path, O_PATH|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW);
+        if (fd_newroot < 0)
+                return log_debug_errno(errno, "Failed to open new rootfs '%s': %m", path);
+
+        /* Change into the new rootfs. */
+        if (fchdir(fd_newroot) < 0)
+                return log_debug_errno(errno, "Failed to change into new rootfs '%s': %m", path);
+
+        r = mount_switch_root_pivot(path, fd_newroot);
+        if (r < 0) {
+                /* Failed to pivot_root() fallback to MS_MOVE. For example, this may happen if the
+                 * rootfs is an initramfs in which case pivot_root() isn't supported. */
+                log_debug_errno(r, "Failed to pivot into new rootfs '%s': %m", path);
+                r = mount_switch_root_move(path);
+        }
+        if (r < 0)
+                return log_debug_errno(r, "Failed to switch to new rootfs '%s': %m", path);
+
+        /* Finally, let's establish the requested propagation flags. */
+        if (mount_propagation_flag == 0)
+                return 0;
+
+        if (mount(NULL, ".", NULL, mount_propagation_flag | MS_REC, 0) < 0)
+                return log_debug_errno(errno, "Failed to turn new rootfs '%s' into %s mount: %m",
+                                       mount_propagation_flag_to_string(mount_propagation_flag), path);
 
         return 0;
 }
@@ -478,7 +554,7 @@
         if (!runtime_dir)
                 runtime_dir = "/run";
 
-        switch(mode & S_IFMT) {
+        switch (mode & S_IFMT) {
                 case S_IFREG:
                         node = "/systemd/inaccessible/reg";
                         break;
@@ -538,9 +614,9 @@
         return 0;
 }
 
-int mount_flags_to_string(long unsigned flags, char **ret) {
+int mount_flags_to_string(unsigned long flags, char **ret) {
         static const struct {
-                long unsigned flag;
+                unsigned long flag;
                 const char *name;
         } map[] = {
                 { .flag = MS_RDONLY,      .name = "MS_RDONLY",      },
@@ -619,14 +695,14 @@
                 log_debug("Bind-mounting %s on %s (%s \"%s\")...",
                           what, where, strnull(fl), strempty(o));
         else if (f & MS_MOVE)
-                log_debug("Moving mount %s → %s (%s \"%s\")...",
-                          what, where, strnull(fl), strempty(o));
+                log_debug("Moving mount %s %s %s (%s \"%s\")...",
+                          what, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), where, strnull(fl), strempty(o));
         else
                 log_debug("Mounting %s (%s) on %s (%s \"%s\")...",
                           strna(what), strna(type), where, strnull(fl), strempty(o));
 
         if (follow_symlink)
-                r = mount(what, where, type, f, o) < 0 ? -errno : 0;
+                r = RET_NERRNO(mount(what, where, type, f, o));
         else
                 r = mount_nofollow(what, where, type, f, o);
         if (r < 0)
@@ -662,20 +738,18 @@
         _cleanup_free_ char *ret = NULL;
         int r;
 
-        /* This extracts mount flags from the mount options, and store
+        /* This extracts mount flags from the mount options, and stores
          * non-mount-flag options to '*ret_remaining_options'.
          * E.g.,
-         * "rw,nosuid,nodev,relatime,size=1630748k,mode=700,uid=1000,gid=1000"
+         * "rw,nosuid,nodev,relatime,size=1630748k,mode=0700,uid=1000,gid=1000"
          * is split to MS_NOSUID|MS_NODEV|MS_RELATIME and
-         * "size=1630748k,mode=700,uid=1000,gid=1000".
-         * See more examples in test-mount-utils.c.
+         * "size=1630748k,mode=0700,uid=1000,gid=1000".
+         * See more examples in test-mount-util.c.
          *
-         * Note that if 'options' does not contain any non-mount-flag options,
+         * If 'options' does not contain any non-mount-flag options,
          * then '*ret_remaining_options' is set to NULL instead of empty string.
-         * Note that this does not check validity of options stored in
-         * '*ret_remaining_options'.
-         * Note that if 'options' is NULL, then this just copies 'mount_flags'
-         * to '*ret_mount_flags'. */
+         * The validity of options stored in '*ret_remaining_options' is not checked.
+         * If 'options' is NULL, this just copies 'mount_flags' to *ret_mount_flags. */
 
         assert(ret_mount_flags);
         assert(ret_remaining_options);
@@ -709,7 +783,9 @@
                 }
 
                 /* If 'word' is not a mount flag, then store it in '*ret_remaining_options'. */
-                if (!ent->name && !strextend_with_separator(&ret, ",", word))
+                if (!ent->name &&
+                    !startswith_no_case(word, "x-") &&
+                    !strextend_with_separator(&ret, ",", word))
                         return -ENOMEM;
         }
 
@@ -730,15 +806,14 @@
                 const MountOptions *options,
                 bool is_image) {
 
-        _cleanup_close_pair_ int errno_pipe_fd[2] = { -1, -1 };
-        _cleanup_close_ int self_mntns_fd = -1, mntns_fd = -1, root_fd = -1, pidns_fd = -1, chased_src_fd = -1;
-        char mount_slave[] = "/tmp/propagate.XXXXXX", *mount_tmp, *mount_outside, *p,
-                chased_src[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
+        _cleanup_close_pair_ int errno_pipe_fd[2] = PIPE_EBADF;
+        _cleanup_close_ int mntns_fd = -EBADF, root_fd = -EBADF, pidns_fd = -EBADF, chased_src_fd = -EBADF;
+        char mount_slave[] = "/tmp/propagate.XXXXXX", *mount_tmp, *mount_outside, *p;
         bool mount_slave_created = false, mount_slave_mounted = false,
                 mount_tmp_created = false, mount_tmp_mounted = false,
                 mount_outside_created = false, mount_outside_mounted = false;
         _cleanup_free_ char *chased_src_path = NULL;
-        struct stat st, self_mntns_st;
+        struct stat st;
         pid_t child;
         int r;
 
@@ -753,23 +828,15 @@
         if (r < 0)
                 return log_debug_errno(r, "Failed to retrieve FDs of the target process' namespace: %m");
 
-        if (fstat(mntns_fd, &st) < 0)
-                return log_debug_errno(errno, "Failed to fstat mount namespace FD of target process: %m");
-
-        r = namespace_open(0, NULL, &self_mntns_fd, NULL, NULL, NULL);
+        r = in_same_namespace(target, 0, NAMESPACE_MOUNT);
         if (r < 0)
-                return log_debug_errno(r, "Failed to retrieve FDs of systemd's namespace: %m");
-
-        if (fstat(self_mntns_fd, &self_mntns_st) < 0)
-                return log_debug_errno(errno, "Failed to fstat mount namespace FD of systemd: %m");
-
+                return log_debug_errno(r, "Failed to determine if mount namespaces are equal: %m");
         /* We can't add new mounts at runtime if the process wasn't started in a namespace */
-        if (st.st_ino == self_mntns_st.st_ino && st.st_dev == self_mntns_st.st_dev)
+        if (r > 0)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to activate bind mount in target, not running in a mount namespace");
 
-        /* One day, when bind mounting /proc/self/fd/n works across
-         * namespace boundaries we should rework this logic to make
-         * use of it... */
+        /* One day, when bind mounting /proc/self/fd/n works across namespace boundaries we should rework
+         * this logic to make use of it... */
 
         p = strjoina(propagate_path, "/");
         r = laccess(p, F_OK);
@@ -779,7 +846,6 @@
         r = chase_symlinks(src, NULL, 0, &chased_src_path, &chased_src_fd);
         if (r < 0)
                 return log_debug_errno(r, "Failed to resolve source path of %s: %m", src);
-        xsprintf(chased_src, "/proc/self/fd/%i", chased_src_fd);
         log_debug("Chased source path of %s to %s", src, chased_src_path);
 
         if (fstat(chased_src_fd, &st) < 0)
@@ -825,9 +891,9 @@
         mount_tmp_created = true;
 
         if (is_image)
-                r = verity_dissect_and_mount(chased_src_fd, chased_src_path, mount_tmp, options, NULL, NULL, NULL);
+                r = verity_dissect_and_mount(chased_src_fd, chased_src_path, mount_tmp, options, NULL, NULL, NULL, NULL);
         else
-                r = mount_follow_verbose(LOG_DEBUG, chased_src, mount_tmp, NULL, MS_BIND, NULL);
+                r = mount_follow_verbose(LOG_DEBUG, FORMAT_PROC_FD_PATH(chased_src_fd), mount_tmp, NULL, MS_BIND, NULL);
         if (r < 0)
                 goto finish;
 
@@ -886,7 +952,7 @@
         if (r < 0)
                 goto finish;
         if (r == 0) {
-                const char *mount_inside;
+                _cleanup_free_ char *mount_outside_fn = NULL, *mount_inside = NULL;
 
                 errno_pipe_fd[0] = safe_close(errno_pipe_fd[0]);
 
@@ -899,8 +965,19 @@
                 }
 
                 /* Fifth, move the mount to the right place inside */
-                mount_inside = strjoina(incoming_path, basename(mount_outside));
-                r = mount_nofollow_verbose(LOG_ERR, mount_inside, dest, NULL, MS_MOVE, NULL);
+                r = path_extract_filename(mount_outside, &mount_outside_fn);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to extract filename from propagation file or directory '%s': %m", mount_outside);
+                        goto child_fail;
+                }
+
+                mount_inside = path_join(incoming_path, mount_outside_fn);
+                if (!mount_inside) {
+                        r = log_oom_debug();
+                        goto child_fail;
+                }
+
+                r = mount_nofollow_verbose(LOG_DEBUG, mount_inside, dest, NULL, MS_MOVE, NULL);
                 if (r < 0)
                         goto child_fail;
 
@@ -1000,40 +1077,47 @@
         return 1;
 }
 
-static int make_userns(uid_t uid_shift, uid_t uid_range) {
-        char uid_map[STRLEN("/proc//uid_map") + DECIMAL_STR_MAX(uid_t) + 1], line[DECIMAL_STR_MAX(uid_t)*3+3+1];
-        _cleanup_(sigkill_waitp) pid_t pid = 0;
-        _cleanup_close_ int userns_fd = -1;
-        int r;
+static int make_userns(uid_t uid_shift, uid_t uid_range, uid_t owner, RemountIdmapping idmapping) {
+        _cleanup_close_ int userns_fd = -EBADF;
+        _cleanup_free_ char *line = NULL;
 
         /* Allocates a userns file descriptor with the mapping we need. For this we'll fork off a child
          * process whose only purpose is to give us a new user namespace. It's killed when we got it. */
 
-        r = safe_fork("(sd-mkuserns)", FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_NEW_USERNS, &pid);
-        if (r < 0)
-                return r;
-        if (r == 0) {
-                /* Child. We do nothing here, just freeze until somebody kills us. */
-                freeze();
-                _exit(EXIT_FAILURE);
+        if (IN_SET(idmapping, REMOUNT_IDMAPPING_NONE, REMOUNT_IDMAPPING_HOST_ROOT)) {
+                if (asprintf(&line, UID_FMT " " UID_FMT " " UID_FMT "\n", 0u, uid_shift, uid_range) < 0)
+                        return log_oom_debug();
+
+                /* If requested we'll include an entry in the mapping so that the host root user can make
+                 * changes to the uidmapped mount like it normally would. Specifically, we'll map the user
+                 * with UID_MAPPED_ROOT on the backing fs to UID 0. This is useful, since nspawn code wants
+                 * to create various missing inodes in the OS tree before booting into it, and this becomes
+                 * very easy and straightforward to do if it can just do it under its own regular UID. Note
+                 * that in that case the container's runtime uidmap (i.e. the one the container payload
+                 * processes run in) will leave this UID unmapped, i.e. if we accidentally leave files owned
+                 * by host root in the already uidmapped tree around they'll show up as owned by 'nobody',
+                 * which is safe. (Of course, we shouldn't leave such inodes around, but always chown() them
+                 * to the container's own UID range, but it's good to have a safety net, in case we
+                 * forget it.) */
+                if (idmapping == REMOUNT_IDMAPPING_HOST_ROOT)
+                        if (strextendf(&line,
+                                       UID_FMT " " UID_FMT " " UID_FMT "\n",
+                                       UID_MAPPED_ROOT, 0u, 1u) < 0)
+                                return log_oom_debug();
         }
 
-        xsprintf(line, UID_FMT " " UID_FMT " " UID_FMT "\n", 0, uid_shift, uid_range);
-
-        xsprintf(uid_map, "/proc/" PID_FMT "/uid_map", pid);
-        r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER);
-        if (r < 0)
-                return log_error_errno(r, "Failed to write UID map: %m");
+        if (idmapping == REMOUNT_IDMAPPING_HOST_OWNER) {
+                /* Remap the owner of the bind mounted directory to the root user within the container. This
+                 * way every file written by root within the container to the bind-mounted directory will
+                 * be owned by the original user. All other user will remain unmapped. */
+                if (asprintf(&line, UID_FMT " " UID_FMT " " UID_FMT "\n", owner, uid_shift, 1u) < 0)
+                        return log_oom_debug();
+        }
 
         /* We always assign the same UID and GID ranges */
-        xsprintf(uid_map, "/proc/" PID_FMT "/gid_map", pid);
-        r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER);
-        if (r < 0)
-                return log_error_errno(r, "Failed to write GID map: %m");
-
-        r = namespace_open(pid, NULL, NULL, NULL, &userns_fd, NULL);
-        if (r < 0)
-                return r;
+        userns_fd = userns_acquire(line, line);
+        if (userns_fd < 0)
+                return log_debug_errno(userns_fd, "Failed to acquire new userns: %m");
 
         return TAKE_FD(userns_fd);
 }
@@ -1041,9 +1125,11 @@
 int remount_idmap(
                 const char *p,
                 uid_t uid_shift,
-                uid_t uid_range) {
+                uid_t uid_range,
+                uid_t owner,
+                RemountIdmapping idmapping) {
 
-        _cleanup_close_ int mount_fd = -1, userns_fd = -1;
+        _cleanup_close_ int mount_fd = -EBADF, userns_fd = -EBADF;
         int r;
 
         assert(p);
@@ -1057,7 +1143,7 @@
                 return log_debug_errno(errno, "Failed to open tree of mounted filesystem '%s': %m", p);
 
         /* Create a user namespace mapping */
-        userns_fd = make_userns(uid_shift, uid_range);
+        userns_fd = make_userns(uid_shift, uid_range, owner, idmapping);
         if (userns_fd < 0)
                 return userns_fd;
 
@@ -1088,7 +1174,7 @@
         if (S_ISDIR(st->st_mode))
                 return mkdir_label(dest, mode);
         else
-                return mknod(dest, S_IFREG|(mode & ~0111), 0);
+                return RET_NERRNO(mknod(dest, S_IFREG|(mode & ~0111), 0));
 }
 
 int make_mount_point_inode_from_path(const char *source, const char *dest, mode_t mode) {
diff --git a/src/shared/mount-util.h b/src/shared/mount-util.h
index c5bd881..7554bf8 100644
--- a/src/shared/mount-util.h
+++ b/src/shared/mount-util.h
@@ -11,40 +11,17 @@
 #include "errno-util.h"
 #include "macro.h"
 
-/* 4MB for contents of regular files, 128k inodes for directories, symbolic links and device specials, using
- * large storage array systems as a baseline */
-#define TMPFS_LIMITS_DEV             ",size=4m,nr_inodes=128k"
-
-/* Very little, if any use expected */
-#define TMPFS_LIMITS_EMPTY_OR_ALMOST ",size=4m,nr_inodes=1k"
-#define TMPFS_LIMITS_SYS             TMPFS_LIMITS_EMPTY_OR_ALMOST
-#define TMPFS_LIMITS_SYS_FS_CGROUP   TMPFS_LIMITS_EMPTY_OR_ALMOST
-
-/* On an extremely small device with only 256MB of RAM, 20% of RAM should be enough for the re-execution of
- * PID1 because 16MB of free space is required. */
-#define TMPFS_LIMITS_RUN             ",size=20%,nr_inodes=800k"
-
-/* The limit used for various nested tmpfs mounts, in particular for guests started by systemd-nspawn.
- * 10% of RAM (using 16GB of RAM as a baseline) translates to 400k inodes (assuming 4k each) and 25%
- * translates to 1M inodes.
- * (On the host, /tmp is configured through a .mount unit file.) */
-#define NESTED_TMPFS_LIMITS          ",size=10%,nr_inodes=400k"
-
-/* More space for volatile root and /var */
-#define TMPFS_LIMITS_VAR             ",size=25%,nr_inodes=1m"
-#define TMPFS_LIMITS_ROOTFS          TMPFS_LIMITS_VAR
-#define TMPFS_LIMITS_VOLATILE_STATE  TMPFS_LIMITS_VAR
-
-int mount_fd(const char *source, int target_fd, const char *filesystemtype, unsigned long mountflags, const void *data);
-int mount_nofollow(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);
-
 int repeat_unmount(const char *path, int flags);
 int umount_recursive(const char *target, int flags);
-int bind_remount_recursive(const char *prefix, unsigned long new_flags, unsigned long flags_mask, char **deny_list);
+
 int bind_remount_recursive_with_mountinfo(const char *prefix, unsigned long new_flags, unsigned long flags_mask, char **deny_list, FILE *proc_self_mountinfo);
+static inline int bind_remount_recursive(const char *prefix, unsigned long new_flags, unsigned long flags_mask, char **deny_list) {
+        return bind_remount_recursive_with_mountinfo(prefix, new_flags, flags_mask, deny_list, NULL);
+}
+
 int bind_remount_one_with_mountinfo(const char *path, unsigned long new_flags, unsigned long flags_mask, FILE *proc_self_mountinfo);
 
-int mount_move_root(const char *path);
+int mount_switch_root(const char *path, unsigned long mount_propagation_flag);
 
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(FILE*, endmntent, NULL);
 #define _cleanup_endmntent_ _cleanup_(endmntentp)
@@ -90,7 +67,7 @@
                 char **ret_remaining_options);
 
 int mode_to_inaccessible_node(const char *runtime_dir, mode_t mode, char **dest);
-int mount_flags_to_string(long unsigned flags, char **ret);
+int mount_flags_to_string(unsigned long flags, char **ret);
 
 /* Useful for usage with _cleanup_(), unmounts, removes a directory and frees the pointer */
 static inline char* umount_and_rmdir_and_free(char *p) {
@@ -108,7 +85,25 @@
 
 int make_mount_point(const char *path);
 
-int remount_idmap(const char *p, uid_t uid_shift, uid_t uid_range);
+typedef enum RemountIdmapping {
+        REMOUNT_IDMAPPING_NONE,
+        /* Include a mapping from UID_MAPPED_ROOT (i.e. UID 2^31-2) on the backing fs to UID 0 on the
+         * uidmapped fs. This is useful to ensure that the host root user can safely add inodes to the
+         * uidmapped fs (which otherwise wouldn't work as the host root user is not defined on the uidmapped
+         * mount and any attempts to create inodes will then be refused with EOVERFLOW). The idea is that
+         * these inodes are quickly re-chown()ed to more suitable UIDs/GIDs. Any code that intends to be able
+         * to add inodes to file systems mapped this way should set this flag, but given it comes with
+         * certain security implications defaults to off, and requires explicit opt-in. */
+        REMOUNT_IDMAPPING_HOST_ROOT,
+        /* Define a mapping from root user within the container to the owner of the bind mounted directory.
+         * This ensure no root-owned files will be written in a bind-mounted directory owned by a different
+         * user. No other users are mapped. */
+        REMOUNT_IDMAPPING_HOST_OWNER,
+        _REMOUNT_IDMAPPING_MAX,
+        _REMOUNT_IDMAPPING_INVALID = -EINVAL,
+} RemountIdmapping;
+
+int remount_idmap(const char *p, uid_t uid_shift, uid_t uid_range, uid_t owner, RemountIdmapping idmapping);
 
 /* Creates a mount point (not parents) based on the source path or stat - ie, a file or a directory */
 int make_mount_point_inode_from_stat(const struct stat *st, const char *dest, mode_t mode);
diff --git a/src/shared/net-condition.c b/src/shared/net-condition.c
index 4742f37..d8b0fef 100644
--- a/src/shared/net-condition.c
+++ b/src/shared/net-condition.c
@@ -6,45 +6,48 @@
 #include "env-util.h"
 #include "log.h"
 #include "net-condition.h"
+#include "netif-util.h"
 #include "network-util.h"
 #include "socket-util.h"
 #include "string-table.h"
 #include "strv.h"
+#include "wifi-util.h"
 
 void net_match_clear(NetMatch *match) {
         if (!match)
                 return;
 
-        match->mac = set_free_free(match->mac);
-        match->permanent_mac = set_free_free(match->permanent_mac);
+        match->hw_addr = set_free(match->hw_addr);
+        match->permanent_hw_addr = set_free(match->permanent_hw_addr);
         match->path = strv_free(match->path);
         match->driver = strv_free(match->driver);
         match->iftype = strv_free(match->iftype);
+        match->kind = strv_free(match->kind);
         match->ifname = strv_free(match->ifname);
         match->property = strv_free(match->property);
-        match->wifi_iftype = strv_free(match->wifi_iftype);
+        match->wlan_iftype = strv_free(match->wlan_iftype);
         match->ssid = strv_free(match->ssid);
-        match->bssid = set_free_free(match->bssid);
+        match->bssid = set_free(match->bssid);
 }
 
 bool net_match_is_empty(const NetMatch *match) {
         assert(match);
 
         return
-                set_isempty(match->mac) &&
-                set_isempty(match->permanent_mac) &&
+                set_isempty(match->hw_addr) &&
+                set_isempty(match->permanent_hw_addr) &&
                 strv_isempty(match->path) &&
                 strv_isempty(match->driver) &&
                 strv_isempty(match->iftype) &&
+                strv_isempty(match->kind) &&
                 strv_isempty(match->ifname) &&
                 strv_isempty(match->property) &&
-                strv_isempty(match->wifi_iftype) &&
+                strv_isempty(match->wlan_iftype) &&
                 strv_isempty(match->ssid) &&
                 set_isempty(match->bssid);
 }
 
 static bool net_condition_test_strv(char * const *patterns, const char *string) {
-        char * const *p;
         bool match = false, has_positive_rule = false;
 
         if (strv_isempty(patterns))
@@ -75,7 +78,6 @@
         if (net_condition_test_strv(patterns, ifname))
                 return true;
 
-        char * const *p;
         STRV_FOREACH(p, alternative_names)
                 if (net_condition_test_strv(patterns, *p))
                         return true;
@@ -84,8 +86,6 @@
 }
 
 static int net_condition_test_property(char * const *match_property, sd_device *device) {
-        char * const *p;
-
         if (strv_isempty(match_property))
                 return true;
 
@@ -117,66 +117,37 @@
         return true;
 }
 
-static const char *const wifi_iftype_table[NL80211_IFTYPE_MAX+1] = {
-        [NL80211_IFTYPE_ADHOC] = "ad-hoc",
-        [NL80211_IFTYPE_STATION] = "station",
-        [NL80211_IFTYPE_AP] = "ap",
-        [NL80211_IFTYPE_AP_VLAN] = "ap-vlan",
-        [NL80211_IFTYPE_WDS] = "wds",
-        [NL80211_IFTYPE_MONITOR] = "monitor",
-        [NL80211_IFTYPE_MESH_POINT] = "mesh-point",
-        [NL80211_IFTYPE_P2P_CLIENT] = "p2p-client",
-        [NL80211_IFTYPE_P2P_GO] = "p2p-go",
-        [NL80211_IFTYPE_P2P_DEVICE] = "p2p-device",
-        [NL80211_IFTYPE_OCB] = "ocb",
-        [NL80211_IFTYPE_NAN] = "nan",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(wifi_iftype, enum nl80211_iftype);
-
 int net_match_config(
                 const NetMatch *match,
                 sd_device *device,
-                const struct ether_addr *mac,
-                const struct ether_addr *permanent_mac,
+                const struct hw_addr_data *hw_addr,
+                const struct hw_addr_data *permanent_hw_addr,
                 const char *driver,
                 unsigned short iftype,
+                const char *kind,
                 const char *ifname,
                 char * const *alternative_names,
-                enum nl80211_iftype wifi_iftype,
+                enum nl80211_iftype wlan_iftype,
                 const char *ssid,
                 const struct ether_addr *bssid) {
 
         _cleanup_free_ char *iftype_str = NULL;
         const char *path = NULL;
-        int r;
 
         assert(match);
 
-        r = link_get_type_string(device, iftype, &iftype_str);
-        if (r == -ENOMEM)
-                return r;
+        if (net_get_type_string(device, iftype, &iftype_str) == -ENOMEM)
+                return -ENOMEM;
 
-        if (device) {
-                const char *mac_str;
-
+        if (device)
                 (void) sd_device_get_property_value(device, "ID_PATH", &path);
-                if (!driver)
-                        (void) sd_device_get_property_value(device, "ID_NET_DRIVER", &driver);
-                if (!ifname)
-                        (void) sd_device_get_sysname(device, &ifname);
-                if (!mac &&
-                    sd_device_get_sysattr_value(device, "address", &mac_str) >= 0)
-                        mac = ether_aton(mac_str);
-        }
 
-        if (match->mac && (!mac || !set_contains(match->mac, mac)))
+        if (match->hw_addr && (!hw_addr || !set_contains(match->hw_addr, hw_addr)))
                 return false;
 
-        if (match->permanent_mac &&
-            (!permanent_mac ||
-             ether_addr_is_null(permanent_mac) ||
-             !set_contains(match->permanent_mac, permanent_mac)))
+        if (match->permanent_hw_addr &&
+            (!permanent_hw_addr ||
+             !set_contains(match->permanent_hw_addr, permanent_hw_addr)))
                 return false;
 
         if (!net_condition_test_strv(match->path, path))
@@ -188,13 +159,16 @@
         if (!net_condition_test_strv(match->iftype, iftype_str))
                 return false;
 
+        if (!net_condition_test_strv(match->kind, kind))
+                return false;
+
         if (!net_condition_test_ifname(match->ifname, ifname, alternative_names))
                 return false;
 
         if (!net_condition_test_property(match->property, device))
                 return false;
 
-        if (!net_condition_test_strv(match->wifi_iftype, wifi_iftype_to_string(wifi_iftype)))
+        if (!net_condition_test_strv(match->wlan_iftype, nl80211_iftype_to_string(wlan_iftype)))
                 return false;
 
         if (!net_condition_test_strv(match->ssid, ssid))
@@ -259,15 +233,13 @@
                 void *data,
                 void *userdata) {
 
-        const char *p = rvalue;
-        char ***sv = data;
+        const char *p = ASSERT_PTR(rvalue);
+        char ***sv = ASSERT_PTR(data);
         bool invert;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *sv = strv_free(*sv);
@@ -316,15 +288,13 @@
                 void *data,
                 void *userdata) {
 
-        const char *p = rvalue;
-        char ***sv = data;
+        const char *p = ASSERT_PTR(rvalue);
+        char ***sv = ASSERT_PTR(data);
         bool invert;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *sv = strv_free(*sv);
@@ -379,15 +349,13 @@
                 void *data,
                 void *userdata) {
 
-        const char *p = rvalue;
-        char ***sv = data;
+        const char *p = ASSERT_PTR(rvalue);
+        char ***sv = ASSERT_PTR(data);
         bool invert;
         int r;
 
         assert(filename);
         assert(lvalue);
-        assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *sv = strv_free(*sv);
diff --git a/src/shared/net-condition.h b/src/shared/net-condition.h
index d61537e..0884d43 100644
--- a/src/shared/net-condition.h
+++ b/src/shared/net-condition.h
@@ -11,14 +11,15 @@
 #include "set.h"
 
 typedef struct NetMatch {
-        Set *mac;
-        Set *permanent_mac;
+        Set *hw_addr;
+        Set *permanent_hw_addr;
         char **path;
         char **driver;
-        char **iftype;
+        char **iftype; /* udev's DEVTYPE field or ARPHRD_XXX, e.g. ether, wlan. */
+        char **kind;   /* IFLA_INFO_KIND attribute, e.g. gre, gretap, erspan. */
         char **ifname;
         char **property;
-        char **wifi_iftype;
+        char **wlan_iftype;
         char **ssid;
         Set *bssid;
 } NetMatch;
@@ -29,13 +30,14 @@
 int net_match_config(
                 const NetMatch *match,
                 sd_device *device,
-                const struct ether_addr *mac,
-                const struct ether_addr *permanent_mac,
+                const struct hw_addr_data *hw_addr,
+                const struct hw_addr_data *permanent_hw_addr,
                 const char *driver,
                 unsigned short iftype,
+                const char *kind,
                 const char *ifname,
                 char * const *alternative_names,
-                enum nl80211_iftype wifi_iftype,
+                enum nl80211_iftype wlan_iftype,
                 const char *ssid,
                 const struct ether_addr *bssid);
 
diff --git a/src/shared/netif-naming-scheme.c b/src/shared/netif-naming-scheme.c
index 82c6625..b6a9752 100644
--- a/src/shared/netif-naming-scheme.c
+++ b/src/shared/netif-naming-scheme.c
@@ -4,6 +4,14 @@
 #include "netif-naming-scheme.h"
 #include "proc-cmdline.h"
 #include "string-util.h"
+#include "string-table.h"
+
+#ifdef _DEFAULT_NET_NAMING_SCHEME_TEST
+/* The primary purpose of this check is to verify that _DEFAULT_NET_NAMING_SCHEME_TEST
+ * is a valid identifier. If an invalid name is given during configuration, this will
+ * fail with a name error. */
+assert_cc(_DEFAULT_NET_NAMING_SCHEME_TEST >= 0);
+#endif
 
 static const NamingScheme naming_schemes[] = {
         { "v238", NAMING_V238 },
@@ -14,19 +22,27 @@
         { "v245", NAMING_V245 },
         { "v247", NAMING_V247 },
         { "v249", NAMING_V249 },
+        { "v250", NAMING_V250 },
+        { "v251", NAMING_V251 },
+        { "v252", NAMING_V252 },
+        { "v253", NAMING_V253 },
         /* … add more schemes here, as the logic to name devices is updated … */
+
+        EXTRA_NET_NAMING_MAP
 };
 
-static const NamingScheme* naming_scheme_from_name(const char *name) {
-        size_t i;
+const NamingScheme* naming_scheme_from_name(const char *name) {
+        /* "latest" may either be defined explicitly by the extra map, in which case we will find it in
+         * the table like any other name. After iterating through the table, we check for "latest" again,
+         * which means that if not mapped explicitly, it maps to the last defined entry, whatever that is. */
+
+        for (size_t i = 0; i < ELEMENTSOF(naming_schemes); i++)
+                if (streq(naming_schemes[i].name, name))
+                        return naming_schemes + i;
 
         if (streq(name, "latest"))
                 return naming_schemes + ELEMENTSOF(naming_schemes) - 1;
 
-        for (i = 0; i < ELEMENTSOF(naming_schemes); i++)
-                if (streq(naming_schemes[i].name, name))
-                        return naming_schemes + i;
-
         return NULL;
 }
 
@@ -68,3 +84,25 @@
 
         return cache;
 }
+
+static const char* const name_policy_table[_NAMEPOLICY_MAX] = {
+        [NAMEPOLICY_KERNEL] = "kernel",
+        [NAMEPOLICY_KEEP] = "keep",
+        [NAMEPOLICY_DATABASE] = "database",
+        [NAMEPOLICY_ONBOARD] = "onboard",
+        [NAMEPOLICY_SLOT] = "slot",
+        [NAMEPOLICY_PATH] = "path",
+        [NAMEPOLICY_MAC] = "mac",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(name_policy, NamePolicy);
+
+static const char* const alternative_names_policy_table[_NAMEPOLICY_MAX] = {
+        [NAMEPOLICY_DATABASE] = "database",
+        [NAMEPOLICY_ONBOARD] = "onboard",
+        [NAMEPOLICY_SLOT] = "slot",
+        [NAMEPOLICY_PATH] = "path",
+        [NAMEPOLICY_MAC] = "mac",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(alternative_names_policy, NamePolicy);
diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h
index 119b801..bb89387 100644
--- a/src/shared/netif-naming-scheme.h
+++ b/src/shared/netif-naming-scheme.h
@@ -22,19 +22,23 @@
  * OS versions, but not fully stabilize them. */
 typedef enum NamingSchemeFlags {
         /* First, the individual features */
-        NAMING_SR_IOV_V            = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */
-        NAMING_NPAR_ARI            = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */
-        NAMING_INFINIBAND          = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */
-        NAMING_ZERO_ACPI_INDEX     = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */
-        NAMING_ALLOW_RERENAMES     = 1 << 4, /* Allow re-renaming of devices, see #9006 */
-        NAMING_STABLE_VIRTUAL_MACS = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */
-        NAMING_NETDEVSIM           = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */
-        NAMING_LABEL_NOPREFIX      = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */
-        NAMING_NSPAWN_LONG_HASH    = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation  */
-        NAMING_BRIDGE_NO_SLOT      = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */
-        NAMING_SLOT_FUNCTION_ID    = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */
-        NAMING_16BIT_INDEX         = 1 << 11, /* Allow full 16-bit for the onboard index */
-        NAMING_REPLACE_STRICTLY    = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */
+        NAMING_SR_IOV_V                  = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */
+        NAMING_NPAR_ARI                  = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */
+        NAMING_INFINIBAND                = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */
+        NAMING_ZERO_ACPI_INDEX           = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */
+        NAMING_ALLOW_RERENAMES           = 1 << 4, /* Allow re-renaming of devices, see #9006 */
+        NAMING_STABLE_VIRTUAL_MACS       = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */
+        NAMING_NETDEVSIM                 = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */
+        NAMING_LABEL_NOPREFIX            = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */
+        NAMING_NSPAWN_LONG_HASH          = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation  */
+        NAMING_BRIDGE_NO_SLOT            = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */
+        NAMING_SLOT_FUNCTION_ID          = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */
+        NAMING_16BIT_INDEX               = 1 << 11, /* Allow full 16-bit for the onboard index */
+        NAMING_REPLACE_STRICTLY          = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */
+        NAMING_XEN_VIF                   = 1 << 13, /* Generate names for Xen netfront devices */
+        NAMING_BRIDGE_MULTIFUNCTION_SLOT = 1 << 14, /* Use PCI hotplug slot information associated with bridge, but only if PCI device is multifunction */
+        NAMING_DEVICETREE_ALIASES        = 1 << 15, /* Generate names from devicetree aliases */
+        NAMING_USB_HOST                  = 1 << 16, /* Generate names for usb host */
 
         /* And now the masks that combine the features above */
         NAMING_V238 = 0,
@@ -45,6 +49,12 @@
         NAMING_V245 = NAMING_V243 | NAMING_NSPAWN_LONG_HASH,
         NAMING_V247 = NAMING_V245 | NAMING_BRIDGE_NO_SLOT,
         NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY,
+        NAMING_V250 = NAMING_V249 | NAMING_XEN_VIF,
+        NAMING_V251 = NAMING_V250 | NAMING_BRIDGE_MULTIFUNCTION_SLOT,
+        NAMING_V252 = NAMING_V251 | NAMING_DEVICETREE_ALIASES,
+        NAMING_V253 = NAMING_V252 | NAMING_USB_HOST,
+
+        EXTRA_NET_NAMING_SCHEMES
 
         _NAMING_SCHEME_FLAGS_INVALID = -EINVAL,
 } NamingSchemeFlags;
@@ -54,8 +64,27 @@
         NamingSchemeFlags flags;
 } NamingScheme;
 
+const NamingScheme* naming_scheme_from_name(const char *name);
 const NamingScheme* naming_scheme(void);
 
 static inline bool naming_scheme_has(NamingSchemeFlags flags) {
         return FLAGS_SET(naming_scheme()->flags, flags);
 }
+
+typedef enum NamePolicy {
+        NAMEPOLICY_KERNEL,
+        NAMEPOLICY_KEEP,
+        NAMEPOLICY_DATABASE,
+        NAMEPOLICY_ONBOARD,
+        NAMEPOLICY_SLOT,
+        NAMEPOLICY_PATH,
+        NAMEPOLICY_MAC,
+        _NAMEPOLICY_MAX,
+        _NAMEPOLICY_INVALID = -EINVAL,
+} NamePolicy;
+
+const char *name_policy_to_string(NamePolicy p) _const_;
+NamePolicy name_policy_from_string(const char *p) _pure_;
+
+const char *alternative_names_policy_to_string(NamePolicy p) _const_;
+NamePolicy alternative_names_policy_from_string(const char *p) _pure_;
diff --git a/src/shared/netif-sriov.c b/src/shared/netif-sriov.c
new file mode 100644
index 0000000..7559b0d
--- /dev/null
+++ b/src/shared/netif-sriov.c
@@ -0,0 +1,643 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "device-util.h"
+#include "netlink-util.h"
+#include "netif-sriov.h"
+#include "parse-util.h"
+#include "set.h"
+#include "stdio-util.h"
+#include "string-util.h"
+
+static int sr_iov_new(SRIOV **ret) {
+        SRIOV *sr_iov;
+
+        assert(ret);
+
+        sr_iov = new(SRIOV, 1);
+        if (!sr_iov)
+                return -ENOMEM;
+
+        *sr_iov = (SRIOV) {
+                  .vf = UINT32_MAX,
+                  .vlan_proto = ETH_P_8021Q,
+                  .vf_spoof_check_setting = -1,
+                  .trust = -1,
+                  .query_rss = -1,
+                  .link_state = _SR_IOV_LINK_STATE_INVALID,
+        };
+
+        *ret = TAKE_PTR(sr_iov);
+
+        return 0;
+}
+
+static int sr_iov_new_static(OrderedHashmap **sr_iov_by_section, const char *filename, unsigned section_line, SRIOV **ret) {
+        _cleanup_(config_section_freep) ConfigSection *n = NULL;
+        _cleanup_(sr_iov_freep) SRIOV *sr_iov = NULL;
+        SRIOV *existing = NULL;
+        int r;
+
+        assert(sr_iov_by_section);
+        assert(filename);
+        assert(section_line > 0);
+        assert(ret);
+
+        r = config_section_new(filename, section_line, &n);
+        if (r < 0)
+                return r;
+
+        existing = ordered_hashmap_get(*sr_iov_by_section, n);
+        if (existing) {
+                *ret = existing;
+                return 0;
+        }
+
+        r = sr_iov_new(&sr_iov);
+        if (r < 0)
+                return r;
+
+        r = ordered_hashmap_ensure_put(sr_iov_by_section, &config_section_hash_ops, n, sr_iov);
+        if (r < 0)
+                return r;
+
+        sr_iov->section = TAKE_PTR(n);
+        sr_iov->sr_iov_by_section = *sr_iov_by_section;
+
+        *ret = TAKE_PTR(sr_iov);
+        return 0;
+}
+
+SRIOV *sr_iov_free(SRIOV *sr_iov) {
+        if (!sr_iov)
+                return NULL;
+
+        if (sr_iov->sr_iov_by_section && sr_iov->section)
+                ordered_hashmap_remove(sr_iov->sr_iov_by_section, sr_iov->section);
+
+        config_section_free(sr_iov->section);
+
+        return mfree(sr_iov);
+}
+
+void sr_iov_hash_func(const SRIOV *sr_iov, struct siphash *state) {
+        assert(sr_iov);
+        assert(state);
+
+        siphash24_compress(&sr_iov->vf, sizeof(sr_iov->vf), state);
+}
+
+int sr_iov_compare_func(const SRIOV *s1, const SRIOV *s2) {
+        assert(s1);
+        assert(s2);
+
+        return CMP(s1->vf, s2->vf);
+}
+
+DEFINE_PRIVATE_HASH_OPS(
+        sr_iov_hash_ops,
+        SRIOV,
+        sr_iov_hash_func,
+        sr_iov_compare_func);
+
+int sr_iov_set_netlink_message(SRIOV *sr_iov, sd_netlink_message *req) {
+        int r;
+
+        assert(sr_iov);
+        assert(req);
+
+        r = sd_netlink_message_open_container(req, IFLA_VFINFO_LIST);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_open_container(req, IFLA_VF_INFO);
+        if (r < 0)
+                return r;
+
+        if (!ether_addr_is_null(&sr_iov->mac)) {
+                struct ifla_vf_mac ivm = {
+                        .vf = sr_iov->vf,
+                };
+
+                memcpy(ivm.mac, &sr_iov->mac, ETH_ALEN);
+                r = sd_netlink_message_append_data(req, IFLA_VF_MAC, &ivm, sizeof(struct ifla_vf_mac));
+                if (r < 0)
+                        return r;
+        }
+
+        if (sr_iov->vf_spoof_check_setting >= 0) {
+                struct ifla_vf_spoofchk ivs = {
+                        .vf = sr_iov->vf,
+                        .setting = sr_iov->vf_spoof_check_setting,
+                };
+
+                r = sd_netlink_message_append_data(req, IFLA_VF_SPOOFCHK, &ivs, sizeof(struct ifla_vf_spoofchk));
+                if (r < 0)
+                        return r;
+        }
+
+        if (sr_iov->query_rss >= 0) {
+                struct ifla_vf_rss_query_en ivs = {
+                        .vf = sr_iov->vf,
+                        .setting = sr_iov->query_rss,
+                };
+
+                r = sd_netlink_message_append_data(req, IFLA_VF_RSS_QUERY_EN, &ivs, sizeof(struct ifla_vf_rss_query_en));
+                if (r < 0)
+                        return r;
+        }
+
+        if (sr_iov->trust >= 0) {
+                struct ifla_vf_trust ivt = {
+                        .vf = sr_iov->vf,
+                        .setting = sr_iov->trust,
+                };
+
+                r = sd_netlink_message_append_data(req, IFLA_VF_TRUST, &ivt, sizeof(struct ifla_vf_trust));
+                if (r < 0)
+                        return r;
+        }
+
+        if (sr_iov->link_state >= 0) {
+                struct ifla_vf_link_state ivl = {
+                        .vf = sr_iov->vf,
+                        .link_state = sr_iov->link_state,
+                };
+
+                r = sd_netlink_message_append_data(req, IFLA_VF_LINK_STATE, &ivl, sizeof(struct ifla_vf_link_state));
+                if (r < 0)
+                        return r;
+        }
+
+        if (sr_iov->vlan > 0) {
+                /* Because of padding, first the buffer must be initialized with 0. */
+                struct ifla_vf_vlan_info ivvi = {};
+                ivvi.vf = sr_iov->vf;
+                ivvi.vlan = sr_iov->vlan;
+                ivvi.qos = sr_iov->qos;
+                ivvi.vlan_proto = htobe16(sr_iov->vlan_proto);
+
+                r = sd_netlink_message_open_container(req, IFLA_VF_VLAN_LIST);
+                if (r < 0)
+                        return r;
+
+                r = sd_netlink_message_append_data(req, IFLA_VF_VLAN_INFO, &ivvi, sizeof(struct ifla_vf_vlan_info));
+                if (r < 0)
+                        return r;
+
+                r = sd_netlink_message_close_container(req);
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_netlink_message_close_container(req);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_message_close_container(req);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+int sr_iov_get_num_vfs(sd_device *device, uint32_t *ret) {
+        const char *str;
+        uint32_t n;
+        int r;
+
+        assert(device);
+        assert(ret);
+
+        r = sd_device_get_sysattr_value(device, "device/sriov_numvfs", &str);
+        if (r < 0)
+                return r;
+
+        r = safe_atou32(str, &n);
+        if (r < 0)
+                return r;
+
+        *ret = n;
+        return 0;
+}
+
+int sr_iov_set_num_vfs(sd_device *device, uint32_t num_vfs, OrderedHashmap *sr_iov_by_section) {
+        char val[DECIMAL_STR_MAX(uint32_t)];
+        const char *str;
+        int r;
+
+        assert(device);
+
+        if (num_vfs == UINT32_MAX) {
+                uint32_t current_num_vfs;
+                SRIOV *sr_iov;
+
+                /* If the number of virtual functions is not specified, then use the maximum number of VF + 1. */
+
+                num_vfs = 0;
+                ORDERED_HASHMAP_FOREACH(sr_iov, sr_iov_by_section)
+                        num_vfs = MAX(num_vfs, sr_iov->vf + 1);
+
+                if (num_vfs == 0) /* No VF is configured. */
+                        return 0;
+
+                r = sr_iov_get_num_vfs(device, &current_num_vfs);
+                if (r < 0)
+                        return log_device_debug_errno(device, r, "Failed to get the current number of SR-IOV virtual functions: %m");
+
+                /* Enough VFs already exist. */
+                if (num_vfs <= current_num_vfs)
+                        return 0;
+
+        } else if (num_vfs == 0) {
+                r = sd_device_set_sysattr_value(device, "device/sriov_numvfs", "0");
+                if (r < 0)
+                        log_device_debug_errno(device, r, "Failed to write device/sriov_numvfs sysfs attribute, ignoring: %m");
+
+                /* Gracefully handle the error in disabling VFs when the interface does not support SR-IOV. */
+                return r == -ENOENT ? 0 : r;
+        }
+
+        /* So, the interface does not have enough VFs. Before increasing the number of VFs, check the
+         * maximum allowed number of VFs from the sriov_totalvfs sysattr. Note that the sysattr
+         * currently exists only for PCI drivers. Hence, ignore -ENOENT.
+         * TODO: netdevsim provides the information in debugfs. */
+        r = sd_device_get_sysattr_value(device, "device/sriov_totalvfs", &str);
+        if (r >= 0) {
+                uint32_t max_num_vfs;
+
+                r = safe_atou32(str, &max_num_vfs);
+                if (r < 0)
+                        return log_device_debug_errno(device, r, "Failed to parse device/sriov_totalvfs sysfs attribute '%s': %m", str);
+
+                if (num_vfs > max_num_vfs)
+                        return log_device_debug_errno(device, SYNTHETIC_ERRNO(ERANGE),
+                                                      "Specified number of virtual functions is out of range. "
+                                                      "The maximum allowed value is %"PRIu32".",
+                                                      max_num_vfs);
+
+        } else if (r != -ENOENT) /* Currently, only PCI driver has the attribute. */
+                return log_device_debug_errno(device, r, "Failed to read device/sriov_totalvfs sysfs attribute: %m");
+
+        xsprintf(val, "%"PRIu32, num_vfs);
+        r = sd_device_set_sysattr_value(device, "device/sriov_numvfs", val);
+        if (r == -EBUSY) {
+                /* Some devices e.g. netdevsim refuse to set sriov_numvfs if it has non-zero value. */
+                r = sd_device_set_sysattr_value(device, "device/sriov_numvfs", "0");
+                if (r >= 0)
+                        r = sd_device_set_sysattr_value(device, "device/sriov_numvfs", val);
+        }
+        if (r < 0)
+                return log_device_debug_errno(device, r, "Failed to write device/sriov_numvfs sysfs attribute: %m");
+
+        log_device_debug(device, "device/sriov_numvfs sysfs attribute set to '%s'.", val);
+        return 0;
+}
+
+static int sr_iov_section_verify(uint32_t num_vfs, SRIOV *sr_iov) {
+        assert(sr_iov);
+
+        if (section_is_invalid(sr_iov->section))
+                return -EINVAL;
+
+        if (sr_iov->vf == UINT32_MAX)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: [SR-IOV] section without VirtualFunction= field configured. "
+                                         "Ignoring [SR-IOV] section from line %u.",
+                                         sr_iov->section->filename, sr_iov->section->line);
+
+        if (sr_iov->vf >= num_vfs)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: VirtualFunction= must be smaller than the value specified in SR-IOVVirtualFunctions=. "
+                                         "Ignoring [SR-IOV] section from line %u.",
+                                         sr_iov->section->filename, sr_iov->section->line);
+
+        return 0;
+}
+
+int sr_iov_drop_invalid_sections(uint32_t num_vfs, OrderedHashmap *sr_iov_by_section) {
+        _cleanup_set_free_ Set *set = NULL;
+        SRIOV *sr_iov;
+        int r;
+
+        ORDERED_HASHMAP_FOREACH(sr_iov, sr_iov_by_section) {
+                SRIOV *dup;
+
+                if (sr_iov_section_verify(num_vfs, sr_iov) < 0) {
+                        sr_iov_free(sr_iov);
+                        continue;
+                }
+
+                dup = set_remove(set, sr_iov);
+                if (dup) {
+                        log_warning("%s: Conflicting [SR-IOV] section is specified at line %u and %u, "
+                                    "dropping the [SR-IOV] section specified at line %u.",
+                                    dup->section->filename, sr_iov->section->line,
+                                    dup->section->line, dup->section->line);
+                        sr_iov_free(dup);
+                }
+
+                r = set_ensure_put(&set, &sr_iov_hash_ops, sr_iov);
+                if (r < 0)
+                        return log_oom();
+                assert(r > 0);
+        }
+
+        return 0;
+}
+
+int config_parse_sr_iov_uint32(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+        OrderedHashmap **sr_iov_by_section = ASSERT_PTR(data);
+        uint32_t k;
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = sr_iov_new_static(sr_iov_by_section, filename, section_line, &sr_iov);
+        if (r < 0)
+                return r;
+
+        if (isempty(rvalue)) {
+                if (streq(lvalue, "VirtualFunction"))
+                        sr_iov->vf = UINT32_MAX;
+                else if (streq(lvalue, "VLANId"))
+                        sr_iov->vlan = 0;
+                else if (streq(lvalue, "QualityOfService"))
+                        sr_iov->qos = 0;
+                else
+                        assert_not_reached();
+
+                TAKE_PTR(sr_iov);
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, &k);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        if (streq(lvalue, "VLANId")) {
+                if (k == 0 || k > 4095) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid SR-IOV VLANId: %u", k);
+                        return 0;
+                }
+                sr_iov->vlan = k;
+        } else if (streq(lvalue, "VirtualFunction")) {
+                if (k >= INT_MAX) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid SR-IOV virtual function: %u", k);
+                        return 0;
+                }
+                sr_iov->vf = k;
+        } else if (streq(lvalue, "QualityOfService"))
+                sr_iov->qos = k;
+        else
+                assert_not_reached();
+
+        TAKE_PTR(sr_iov);
+        return 0;
+}
+
+int config_parse_sr_iov_vlan_proto(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+        OrderedHashmap **sr_iov_by_section = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = sr_iov_new_static(sr_iov_by_section, filename, section_line, &sr_iov);
+        if (r < 0)
+                return r;
+
+        if (isempty(rvalue) || streq(rvalue, "802.1Q"))
+                sr_iov->vlan_proto = ETH_P_8021Q;
+        else if (streq(rvalue, "802.1ad"))
+                sr_iov->vlan_proto = ETH_P_8021AD;
+        else {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        TAKE_PTR(sr_iov);
+        return 0;
+}
+
+int config_parse_sr_iov_link_state(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+        OrderedHashmap **sr_iov_by_section = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = sr_iov_new_static(sr_iov_by_section, filename, section_line, &sr_iov);
+        if (r < 0)
+                return r;
+
+        /* Unfortunately, SR_IOV_LINK_STATE_DISABLE is 2, not 0. So, we cannot use
+         * DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN() macro. */
+
+        if (isempty(rvalue)) {
+                sr_iov->link_state = _SR_IOV_LINK_STATE_INVALID;
+                TAKE_PTR(sr_iov);
+                return 0;
+        }
+
+        if (streq(rvalue, "auto")) {
+                sr_iov->link_state = SR_IOV_LINK_STATE_AUTO;
+                TAKE_PTR(sr_iov);
+                return 0;
+        }
+
+        r = parse_boolean(rvalue);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        sr_iov->link_state = r ? SR_IOV_LINK_STATE_ENABLE : SR_IOV_LINK_STATE_DISABLE;
+        TAKE_PTR(sr_iov);
+        return 0;
+}
+
+int config_parse_sr_iov_boolean(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+        OrderedHashmap **sr_iov_by_section = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = sr_iov_new_static(sr_iov_by_section, filename, section_line, &sr_iov);
+        if (r < 0)
+                return r;
+
+        if (isempty(rvalue)) {
+                if (streq(lvalue, "MACSpoofCheck"))
+                        sr_iov->vf_spoof_check_setting = -1;
+                else if (streq(lvalue, "QueryReceiveSideScaling"))
+                        sr_iov->query_rss = -1;
+                else if (streq(lvalue, "Trust"))
+                        sr_iov->trust = -1;
+                else
+                        assert_not_reached();
+
+                TAKE_PTR(sr_iov);
+                return 0;
+        }
+
+        r = parse_boolean(rvalue);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse '%s=', ignoring: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        if (streq(lvalue, "MACSpoofCheck"))
+                sr_iov->vf_spoof_check_setting = r;
+        else if (streq(lvalue, "QueryReceiveSideScaling"))
+                sr_iov->query_rss = r;
+        else if (streq(lvalue, "Trust"))
+                sr_iov->trust = r;
+        else
+                assert_not_reached();
+
+        TAKE_PTR(sr_iov);
+        return 0;
+}
+
+int config_parse_sr_iov_mac(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+        OrderedHashmap **sr_iov_by_section = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        r = sr_iov_new_static(sr_iov_by_section, filename, section_line, &sr_iov);
+        if (r < 0)
+                return r;
+
+        if (isempty(rvalue)) {
+                sr_iov->mac = ETHER_ADDR_NULL;
+                TAKE_PTR(sr_iov);
+                return 0;
+        }
+
+        r = parse_ether_addr(rvalue, &sr_iov->mac);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        TAKE_PTR(sr_iov);
+        return 0;
+}
+
+int config_parse_sr_iov_num_vfs(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint32_t n, *num_vfs = ASSERT_PTR(data);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *num_vfs = UINT32_MAX;
+                return 0;
+        }
+
+        r = safe_atou32(rvalue, &n);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
+                return 0;
+        }
+
+        if (n > INT_MAX) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "The number of SR-IOV virtual functions is too large. It must be equal to "
+                           "or smaller than 2147483647. Ignoring assignment: %"PRIu32, n);
+                return 0;
+        }
+
+        *num_vfs = n;
+        return 0;
+}
diff --git a/src/shared/netif-sriov.h b/src/shared/netif-sriov.h
new file mode 100644
index 0000000..ee76957
--- /dev/null
+++ b/src/shared/netif-sriov.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <linux/if_link.h>
+
+#include "sd-device.h"
+
+#include "conf-parser.h"
+#include "ether-addr-util.h"
+#include "hashmap.h"
+
+typedef enum SRIOVLinkState {
+        SR_IOV_LINK_STATE_AUTO = IFLA_VF_LINK_STATE_AUTO,
+        SR_IOV_LINK_STATE_ENABLE = IFLA_VF_LINK_STATE_ENABLE,
+        SR_IOV_LINK_STATE_DISABLE = IFLA_VF_LINK_STATE_DISABLE,
+        _SR_IOV_LINK_STATE_MAX,
+        _SR_IOV_LINK_STATE_INVALID = -EINVAL,
+} SRIOVLinkState;
+
+typedef struct SRIOV {
+        ConfigSection *section;
+        OrderedHashmap *sr_iov_by_section;
+
+        uint32_t vf;   /* 0 - 2147483646 */
+        uint32_t vlan; /* 0 - 4095, 0 disables VLAN filter */
+        uint32_t qos;
+        uint16_t vlan_proto; /* ETH_P_8021Q or ETH_P_8021AD */
+        int vf_spoof_check_setting;
+        int query_rss;
+        int trust;
+        SRIOVLinkState link_state;
+        struct ether_addr mac;
+} SRIOV;
+
+SRIOV *sr_iov_free(SRIOV *sr_iov);
+void sr_iov_hash_func(const SRIOV *sr_iov, struct siphash *state);
+int sr_iov_compare_func(const SRIOV *s1, const SRIOV *s2);
+int sr_iov_set_netlink_message(SRIOV *sr_iov, sd_netlink_message *req);
+int sr_iov_get_num_vfs(sd_device *device, uint32_t *ret);
+int sr_iov_set_num_vfs(sd_device *device, uint32_t num_vfs, OrderedHashmap *sr_iov_by_section);
+int sr_iov_drop_invalid_sections(uint32_t num_vfs, OrderedHashmap *sr_iov_by_section);
+
+DEFINE_SECTION_CLEANUP_FUNCTIONS(SRIOV, sr_iov_free);
+
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_uint32);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_boolean);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_link_state);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_vlan_proto);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_mac);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_num_vfs);
diff --git a/src/shared/netif-util.c b/src/shared/netif-util.c
new file mode 100644
index 0000000..f56c564
--- /dev/null
+++ b/src/shared/netif-util.c
@@ -0,0 +1,206 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/if.h>
+#include <linux/if_arp.h>
+
+#include "arphrd-util.h"
+#include "device-util.h"
+#include "log-link.h"
+#include "memory-util.h"
+#include "netif-util.h"
+#include "siphash24.h"
+#include "sparse-endian.h"
+#include "strv.h"
+
+bool netif_has_carrier(uint8_t operstate, unsigned flags) {
+        /* see Documentation/networking/operstates.txt in the kernel sources */
+
+        if (operstate == IF_OPER_UP)
+                return true;
+
+        if (operstate != IF_OPER_UNKNOWN)
+                return false;
+
+        /* operstate may not be implemented, so fall back to flags */
+        return FLAGS_SET(flags, IFF_LOWER_UP | IFF_RUNNING) &&
+                !FLAGS_SET(flags, IFF_DORMANT);
+}
+
+int net_get_type_string(sd_device *device, uint16_t iftype, char **ret) {
+        const char *t;
+        char *p;
+
+        if (device &&
+            sd_device_get_devtype(device, &t) >= 0 &&
+            !isempty(t)) {
+                p = strdup(t);
+                if (!p)
+                        return -ENOMEM;
+
+                *ret = p;
+                return 0;
+        }
+
+        t = arphrd_to_name(iftype);
+        if (!t)
+                return -ENOENT;
+
+        p = strdup(t);
+        if (!p)
+                return -ENOMEM;
+
+        *ret = ascii_strlower(p);
+        return 0;
+}
+
+const char *net_get_persistent_name(sd_device *device) {
+        assert(device);
+
+        /* fetch some persistent data unique (on this machine) to this device */
+        FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC") {
+                const char *name;
+
+                if (sd_device_get_property_value(device, field, &name) >= 0)
+                        return name;
+        }
+
+        return NULL;
+}
+
+/* Used when generating hardware address by udev, and IPv4LL seed by networkd. */
+#define HASH_KEY SD_ID128_MAKE(d3,1e,48,fa,90,fe,4b,4c,9d,af,d5,d7,a1,b1,2e,8a)
+
+int net_get_unique_predictable_data(sd_device *device, bool use_sysname, uint64_t *ret) {
+        const char *name;
+
+        assert(device);
+        assert(ret);
+
+        /* net_get_persistent_name() will return one of the device names based on stable information about
+         * the device. If this is not available, we fall back to using the actual device name. */
+        name = net_get_persistent_name(device);
+        if (!name && use_sysname)
+                (void) sd_device_get_sysname(device, &name);
+        if (!name)
+                return log_device_debug_errno(device, SYNTHETIC_ERRNO(ENODATA),
+                                              "No stable identifying information found");
+
+        log_device_debug(device, "Using \"%s\" as stable identifying information", name);
+
+        return net_get_unique_predictable_data_from_name(name, &HASH_KEY, ret);
+}
+
+int net_get_unique_predictable_data_from_name(
+                const char *name,
+                const sd_id128_t *key,
+                uint64_t *ret) {
+
+        size_t l, sz;
+        uint8_t *v;
+        int r;
+
+        assert(name);
+        assert(key);
+        assert(ret);
+
+        l = strlen(name);
+        sz = sizeof(sd_id128_t) + l;
+        v = newa(uint8_t, sz);
+
+        /* Fetch some persistent data unique to this machine */
+        r = sd_id128_get_machine((sd_id128_t*) v);
+        if (r < 0)
+                 return r;
+
+        memcpy(v + sizeof(sd_id128_t), name, l);
+
+        /* Let's hash the machine ID plus the device name. We use
+         * a fixed, but originally randomly created hash key here. */
+        *ret = htole64(siphash24(v, sz, key->bytes));
+        return 0;
+}
+
+typedef struct Link {
+        const char *ifname;
+} Link;
+
+int net_verify_hardware_address(
+                const char *ifname,
+                bool is_static,
+                uint16_t iftype,
+                const struct hw_addr_data *ib_hw_addr, /* current or parent HW address */
+                struct hw_addr_data *new_hw_addr) {
+
+        Link link = { .ifname = ifname };
+
+        assert(new_hw_addr);
+
+        if (new_hw_addr->length == 0)
+                return 0;
+
+        if (new_hw_addr->length != arphrd_to_hw_addr_len(iftype)) {
+                if (is_static)
+                        log_link_warning(&link,
+                                         "Specified MAC address with invalid length (%zu, expected %zu), refusing.",
+                                         new_hw_addr->length, arphrd_to_hw_addr_len(iftype));
+                return -EINVAL;
+        }
+
+        switch (iftype) {
+        case ARPHRD_ETHER:
+                /* see eth_random_addr() in the kernel */
+
+                if (ether_addr_is_null(&new_hw_addr->ether)) {
+                        if (is_static)
+                                log_link_warning(&link, "Specified MAC address is null, refusing.");
+                        return -EINVAL;
+                }
+
+                if (ether_addr_is_broadcast(&new_hw_addr->ether)) {
+                        if (is_static)
+                                log_link_warning(&link, "Specified MAC address is broadcast, refusing.");
+                        return -EINVAL;
+                }
+
+                if (ether_addr_is_multicast(&new_hw_addr->ether)) {
+                        if (is_static)
+                                log_link_warning(&link, "Specified MAC address has the multicast bit set, clearing the bit.");
+
+                        new_hw_addr->bytes[0] &= 0xfe;
+                }
+
+                if (!is_static && !ether_addr_is_local(&new_hw_addr->ether))
+                        /* Adjust local assignment bit when the MAC address is generated randomly. */
+                        new_hw_addr->bytes[0] |= 0x02;
+
+                break;
+
+        case ARPHRD_INFINIBAND:
+                /* see ipoib_check_lladdr() in the kernel */
+
+                assert(ib_hw_addr);
+                assert(ib_hw_addr->length == INFINIBAND_ALEN);
+
+                if (is_static &&
+                    (!memeqzero(new_hw_addr->bytes, INFINIBAND_ALEN - 8) ||
+                     memcmp(new_hw_addr->bytes, ib_hw_addr->bytes, INFINIBAND_ALEN - 8) != 0))
+                        log_link_warning(&link, "Only the last 8 bytes of the InifniBand MAC address can be changed, ignoring the first 12 bytes.");
+
+                if (memeqzero(new_hw_addr->bytes + INFINIBAND_ALEN - 8, 8)) {
+                        if (is_static)
+                                log_link_warning(&link, "The last 8 bytes of the InfiniBand MAC address cannot be null, refusing.");
+                        return -EINVAL;
+                }
+
+                memcpy(new_hw_addr->bytes, ib_hw_addr->bytes, INFINIBAND_ALEN - 8);
+                break;
+
+        default:
+                if (is_static)
+                        log_link_warning(&link, "Unsupported interface type %s%u to set MAC address, refusing.",
+                                         strna(arphrd_to_name(iftype)), iftype);
+                return -EINVAL;
+        }
+
+        return 0;
+}
diff --git a/src/shared/netif-util.h b/src/shared/netif-util.h
new file mode 100644
index 0000000..fb6a27c
--- /dev/null
+++ b/src/shared/netif-util.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+
+#include "sd-device.h"
+#include "sd-id128.h"
+
+#include "ether-addr-util.h"
+
+bool netif_has_carrier(uint8_t operstate, unsigned flags);
+int net_get_type_string(sd_device *device, uint16_t iftype, char **ret);
+const char *net_get_persistent_name(sd_device *device);
+int net_get_unique_predictable_data(sd_device *device, bool use_sysname, uint64_t *ret);
+int net_get_unique_predictable_data_from_name(const char *name, const sd_id128_t *key, uint64_t *ret);
+int net_verify_hardware_address(
+                const char *ifname,
+                bool is_static,
+                uint16_t iftype,
+                const struct hw_addr_data *ib_hw_addr,
+                struct hw_addr_data *new_hw_addr);
diff --git a/src/shared/nscd-flush.c b/src/shared/nscd-flush.c
index 19e16d9..dfc7db6 100644
--- a/src/shared/nscd-flush.c
+++ b/src/shared/nscd-flush.c
@@ -1,4 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
 #include <poll.h>
 
 #include "fd-util.h"
@@ -18,24 +20,19 @@
         char dbname[];
 };
 
-static const union sockaddr_union nscd_sa = {
-        .un.sun_family = AF_UNIX,
-        .un.sun_path = "/run/nscd/socket",
-};
-
 static int nscd_flush_cache_one(const char *database, usec_t end) {
         size_t req_size, has_written = 0, has_read = 0, l;
         struct nscdInvalidateRequest *req;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int32_t resp;
-        int events;
+        int events, r;
 
         assert(database);
 
         l = strlen(database);
         req_size = offsetof(struct nscdInvalidateRequest, dbname) + l + 1;
 
-        req = alloca(req_size);
+        req = alloca_safe(req_size);
         *req = (struct nscdInvalidateRequest) {
                 .version = 2,
                 .type = 10,
@@ -60,11 +57,12 @@
          * nice way to connect() to a server synchronously with a time limit that would also cover dealing with the
          * backlog limit. After all SO_RCVTIMEO and SR_SNDTIMEO don't apply to connect(), and alarm() is frickin' ugly
          * and not really reasonably usable from threads-aware code.) */
-        if (connect(fd, &nscd_sa.sa, SOCKADDR_UN_LEN(nscd_sa.un)) < 0) {
-                if (errno == EAGAIN)
-                        return log_debug_errno(errno, "nscd is overloaded (backlog limit reached) and refuses to take further connections: %m");
-                if (errno != EINPROGRESS)
-                        return log_debug_errno(errno, "Failed to connect to nscd socket: %m");
+        r = connect_unix_path(fd, AT_FDCWD, "/run/nscd/socket");
+        if (r < 0) {
+                if (r == -EAGAIN)
+                        return log_debug_errno(r, "nscd is overloaded (backlog limit reached) and refuses to take further connections: %m");
+                if (r != -EINPROGRESS)
+                        return log_debug_errno(r, "Failed to connect to nscd socket: %m");
 
                 /* Continue in case of EINPROGRESS, but don't bother with send() or recv() until being notified that
                  * establishing the connection is complete. */
@@ -132,7 +130,6 @@
 int nscd_flush_cache(char **databases) {
         usec_t end;
         int r = 0;
-        char **i;
 
         /* Tries to invalidate the specified database in nscd. We do this carefully, with a 5s timeout, so that we
          * don't block indefinitely on another service. */
diff --git a/src/shared/nsflags.c b/src/shared/nsflags.c
index b5bba80..d4cee06 100644
--- a/src/shared/nsflags.c
+++ b/src/shared/nsflags.c
@@ -4,22 +4,10 @@
 
 #include "alloc-util.h"
 #include "extract-word.h"
+#include "namespace-util.h"
 #include "nsflags.h"
 #include "string-util.h"
 
-const struct namespace_flag_map namespace_flag_map[] = {
-        { CLONE_NEWCGROUP, "cgroup" },
-        { CLONE_NEWIPC,    "ipc"    },
-        { CLONE_NEWNET,    "net"    },
-        /* So, the mount namespace flag is called CLONE_NEWNS for historical reasons. Let's expose it here under a more
-         * explanatory name: "mnt". This is in-line with how the kernel exposes namespaces in /proc/$PID/ns. */
-        { CLONE_NEWNS,     "mnt"    },
-        { CLONE_NEWPID,    "pid"    },
-        { CLONE_NEWUSER,   "user"   },
-        { CLONE_NEWUTS,    "uts"    },
-        {}
-};
-
 int namespace_flags_from_string(const char *name, unsigned long *ret) {
         unsigned long flags = 0;
         int r;
@@ -37,9 +25,9 @@
                 if (r == 0)
                         break;
 
-                for (i = 0; namespace_flag_map[i].name; i++)
-                        if (streq(word, namespace_flag_map[i].name)) {
-                                 f = namespace_flag_map[i].flag;
+                for (i = 0; namespace_info[i].proc_name; i++)
+                        if (streq(word, namespace_info[i].proc_name)) {
+                                 f = namespace_info[i].clone_flag;
                                  break;
                         }
 
@@ -57,11 +45,11 @@
         _cleanup_free_ char *s = NULL;
         unsigned i;
 
-        for (i = 0; namespace_flag_map[i].name; i++) {
-                if ((flags & namespace_flag_map[i].flag) != namespace_flag_map[i].flag)
+        for (i = 0; namespace_info[i].proc_name; i++) {
+                if ((flags & namespace_info[i].clone_flag) != namespace_info[i].clone_flag)
                         continue;
 
-                if (!strextend_with_separator(&s, " ", namespace_flag_map[i].name))
+                if (!strextend_with_separator(&s, " ", namespace_info[i].proc_name))
                         return -ENOMEM;
         }
 
@@ -71,9 +59,9 @@
 }
 
 const char *namespace_single_flag_to_string(unsigned long flag) {
-        for (unsigned i = 0; namespace_flag_map[i].name; i++)
-                if (namespace_flag_map[i].flag == flag)
-                        return namespace_flag_map[i].name;
+        for (unsigned i = 0; namespace_info[i].proc_name; i++)
+                if (namespace_info[i].clone_flag == flag)
+                        return namespace_info[i].proc_name;
 
         return NULL;
 }
diff --git a/src/shared/nsflags.h b/src/shared/nsflags.h
index a35332d..b59740c 100644
--- a/src/shared/nsflags.h
+++ b/src/shared/nsflags.h
@@ -21,10 +21,3 @@
 int namespace_flags_from_string(const char *name, unsigned long *ret);
 int namespace_flags_to_string(unsigned long flags, char **ret);
 const char *namespace_single_flag_to_string(unsigned long flag);
-
-struct namespace_flag_map {
-        unsigned long flag;
-        const char *name;
-};
-
-extern const struct namespace_flag_map namespace_flag_map[];
diff --git a/src/shared/numa-util.c b/src/shared/numa-util.c
index 644b0bd..4f757f0 100644
--- a/src/shared/numa-util.c
+++ b/src/shared/numa-util.c
@@ -128,7 +128,6 @@
 
 static int numa_max_node(void) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r, max_node = 0;
 
         d = opendir("/sys/devices/system/node");
diff --git a/src/shared/open-file.c b/src/shared/open-file.c
new file mode 100644
index 0000000..3402518
--- /dev/null
+++ b/src/shared/open-file.c
@@ -0,0 +1,150 @@
+
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+
+#include "escape.h"
+#include "extract-word.h"
+#include "fd-util.h"
+#include "open-file.h"
+#include "path-util.h"
+#include "string-table.h"
+#include "string-util.h"
+
+int open_file_parse(const char *v, OpenFile **ret) {
+        _cleanup_free_ char *options = NULL;
+        _cleanup_(open_file_freep) OpenFile *of = NULL;
+        int r;
+
+        assert(v);
+        assert(ret);
+
+        of = new0(OpenFile, 1);
+        if (!of)
+                return -ENOMEM;
+
+        r = extract_many_words(&v, ":", EXTRACT_DONT_COALESCE_SEPARATORS|EXTRACT_CUNESCAPE, &of->path, &of->fdname, &options, NULL);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return -EINVAL;
+
+        /* Enforce that at most 3 colon-separated words are present */
+        if (!isempty(v))
+                return -EINVAL;
+
+        for (const char *p = options;;) {
+                OpenFileFlag flag;
+                _cleanup_free_ char *word = NULL;
+
+                r = extract_first_word(&p, &word, ",", 0);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        break;
+
+                flag = open_file_flags_from_string(word);
+                if (flag < 0)
+                        return flag;
+
+                if ((flag & of->flags) != 0)
+                        return -EINVAL;
+
+                of->flags |= flag;
+        }
+
+        if (isempty(of->fdname)) {
+                of->fdname = mfree(of->fdname);
+                r = path_extract_filename(of->path, &of->fdname);
+                if (r < 0)
+                        return r;
+        }
+
+        r = open_file_validate(of);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(of);
+
+        return 0;
+}
+
+int open_file_validate(const OpenFile *of) {
+        assert(of);
+
+        if (!path_is_valid(of->path) || !path_is_absolute(of->path))
+                return -EINVAL;
+
+        if (!fdname_is_valid(of->fdname))
+                return -EINVAL;
+
+        if ((FLAGS_SET(of->flags, OPENFILE_READ_ONLY) + FLAGS_SET(of->flags, OPENFILE_APPEND) +
+             FLAGS_SET(of->flags, OPENFILE_TRUNCATE)) > 1)
+                return -EINVAL;
+
+        if ((of->flags & ~_OPENFILE_MASK_PUBLIC) != 0)
+                return -EINVAL;
+
+        return 0;
+}
+
+int open_file_to_string(const OpenFile *of, char **ret) {
+        _cleanup_free_ char *options = NULL, *fname = NULL, *s = NULL;
+        bool has_fdname = false;
+        int r;
+
+        assert(of);
+        assert(ret);
+
+        s = shell_escape(of->path, ":");
+        if (!s)
+                return -ENOMEM;
+
+        r = path_extract_filename(of->path, &fname);
+        if (r < 0)
+                return r;
+
+        has_fdname = !streq(fname, of->fdname);
+        if (has_fdname)
+                if (!strextend(&s, ":", of->fdname))
+                        return -ENOMEM;
+
+        for (OpenFileFlag flag = OPENFILE_READ_ONLY; flag < _OPENFILE_MAX; flag <<= 1)
+                if (FLAGS_SET(of->flags, flag) && !strextend_with_separator(&options, ",", open_file_flags_to_string(flag)))
+                        return -ENOMEM;
+
+        if (options)
+                if (!(has_fdname ? strextend(&s, ":", options) : strextend(&s, "::", options)))
+                        return -ENOMEM;
+
+        *ret = TAKE_PTR(s);
+
+        return 0;
+}
+
+OpenFile *open_file_free(OpenFile *of) {
+        if (!of)
+                return NULL;
+
+        free(of->path);
+        free(of->fdname);
+        return mfree(of);
+}
+
+void open_file_free_many(OpenFile **head) {
+        OpenFile *of;
+
+        while ((of = *head)) {
+                LIST_REMOVE(open_files, *head, of);
+                of = open_file_free(of);
+        }
+}
+
+static const char * const open_file_flags_table[_OPENFILE_MAX] = {
+        [OPENFILE_READ_ONLY] = "read-only",
+        [OPENFILE_APPEND]    = "append",
+        [OPENFILE_TRUNCATE]  = "truncate",
+        [OPENFILE_GRACEFUL]  = "graceful",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(open_file_flags, OpenFileFlag);
diff --git a/src/shared/open-file.h b/src/shared/open-file.h
new file mode 100644
index 0000000..bb63ec8
--- /dev/null
+++ b/src/shared/open-file.h
@@ -0,0 +1,36 @@
+
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "list.h"
+
+typedef enum OpenFileFlag {
+        OPENFILE_READ_ONLY = 1 << 0,
+        OPENFILE_APPEND    = 1 << 1,
+        OPENFILE_TRUNCATE  = 1 << 2,
+        OPENFILE_GRACEFUL  = 1 << 3,
+        _OPENFILE_MAX,
+        _OPENFILE_INVALID  = -EINVAL,
+        _OPENFILE_MASK_PUBLIC = OPENFILE_READ_ONLY | OPENFILE_APPEND | OPENFILE_TRUNCATE | OPENFILE_GRACEFUL,
+} OpenFileFlag;
+
+typedef struct OpenFile {
+        char *path;
+        char *fdname;
+        OpenFileFlag flags;
+        LIST_FIELDS(struct OpenFile, open_files);
+} OpenFile;
+
+int open_file_parse(const char *v, OpenFile **ret);
+
+int open_file_validate(const OpenFile *of);
+
+int open_file_to_string(const OpenFile *of, char **ret);
+
+OpenFile *open_file_free(OpenFile *of);
+DEFINE_TRIVIAL_CLEANUP_FUNC(OpenFile*, open_file_free);
+
+void open_file_free_many(OpenFile **head);
+
+const char *open_file_flags_to_string(OpenFileFlag t) _const_;
+OpenFileFlag open_file_flags_from_string(const char *t) _pure_;
diff --git a/src/shared/openssl-util.c b/src/shared/openssl-util.c
index bd728e6..c7fcbd9 100644
--- a/src/shared/openssl-util.c
+++ b/src/shared/openssl-util.c
@@ -2,8 +2,46 @@
 
 #include "openssl-util.h"
 #include "alloc-util.h"
+#include "hexdecoct.h"
 
 #if HAVE_OPENSSL
+int openssl_hash(const EVP_MD *alg,
+                 const void *msg,
+                 size_t msg_len,
+                 uint8_t *ret_hash,
+                 size_t *ret_hash_len) {
+
+        _cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX *ctx = NULL;
+        unsigned len;
+        int r;
+
+        ctx = EVP_MD_CTX_new();
+        if (!ctx)
+                /* This function just calls OPENSSL_zalloc, so failure
+                 * here is almost certainly a failed allocation. */
+                return -ENOMEM;
+
+        /* The documentation claims EVP_DigestInit behaves just like
+         * EVP_DigestInit_ex if passed NULL, except it also calls
+         * EVP_MD_CTX_reset, which deinitializes the context. */
+        r = EVP_DigestInit_ex(ctx, alg, NULL);
+        if (r == 0)
+                return -EIO;
+
+        r = EVP_DigestUpdate(ctx, msg, msg_len);
+        if (r == 0)
+                return -EIO;
+
+        r = EVP_DigestFinal_ex(ctx, ret_hash, &len);
+        if (r == 0)
+                return -EIO;
+
+        if (ret_hash_len)
+                *ret_hash_len = len;
+
+        return 0;
+}
+
 int rsa_encrypt_bytes(
                 EVP_PKEY *pkey,
                 const void *decrypted_key,
@@ -48,8 +86,8 @@
         size_t suitable_key_size;
         int bits;
 
-        assert_se(pkey);
-        assert_se(ret_suitable_key_size);
+        assert(pkey);
+        assert(ret_suitable_key_size);
 
         /* Analyzes the specified public key and that it is RSA. If so, will return a suitable size for a
          * disk encryption key to encrypt with RSA for use in PKCS#11 security token schemes. */
@@ -70,4 +108,109 @@
         *ret_suitable_key_size = suitable_key_size;
         return 0;
 }
+
+int pubkey_fingerprint(EVP_PKEY *pk, const EVP_MD *md, void **ret, size_t *ret_size) {
+        _cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX* m = NULL;
+        _cleanup_free_ void *d = NULL, *h = NULL;
+        int sz, lsz, msz;
+        unsigned umsz;
+        unsigned char *dd;
+
+        /* Calculates a message digest of the DER encoded public key */
+
+        assert(pk);
+        assert(md);
+        assert(ret);
+        assert(ret_size);
+
+        sz = i2d_PublicKey(pk, NULL);
+        if (sz < 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unable to convert public key to DER format: %s",
+                                       ERR_error_string(ERR_get_error(), NULL));
+
+        dd = d = malloc(sz);
+        if (!d)
+                return log_oom_debug();
+
+        lsz = i2d_PublicKey(pk, &dd);
+        if (lsz < 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unable to convert public key to DER format: %s",
+                                       ERR_error_string(ERR_get_error(), NULL));
+
+        m = EVP_MD_CTX_new();
+        if (!m)
+                return log_oom_debug();
+
+        if (EVP_DigestInit_ex(m, md, NULL) != 1)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to initialize %s context.", EVP_MD_name(md));
+
+        if (EVP_DigestUpdate(m, d, lsz) != 1)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to run %s context.", EVP_MD_name(md));
+
+        msz = EVP_MD_size(md);
+        assert(msz > 0);
+
+        h = malloc(msz);
+        if (!h)
+                return log_oom_debug();
+
+        umsz = msz;
+        if (EVP_DigestFinal_ex(m, h, &umsz) != 1)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to finalize hash context.");
+
+        assert(umsz == (unsigned) msz);
+
+        *ret = TAKE_PTR(h);
+        *ret_size = msz;
+
+        return 0;
+}
+
+#  if PREFER_OPENSSL
+int string_hashsum(
+                const char *s,
+                size_t len,
+                const EVP_MD *md_algorithm,
+                char **ret) {
+
+        uint8_t hash[EVP_MAX_MD_SIZE];
+        size_t hash_size;
+        char *enc;
+        int r;
+
+        hash_size = EVP_MD_size(md_algorithm);
+        assert(hash_size > 0);
+
+        r = openssl_hash(md_algorithm, s, len, hash, NULL);
+        if (r < 0)
+                return r;
+
+        enc = hexmem(hash, hash_size);
+        if (!enc)
+                return -ENOMEM;
+
+        *ret = enc;
+        return 0;
+
+}
+#  endif
 #endif
+
+int x509_fingerprint(X509 *cert, uint8_t buffer[static SHA256_DIGEST_SIZE]) {
+#if HAVE_OPENSSL
+        _cleanup_free_ uint8_t *der = NULL;
+        int dersz;
+
+        assert(cert);
+
+        dersz = i2d_X509(cert, &der);
+        if (dersz < 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unable to convert PEM certificate to DER format: %s",
+                                       ERR_error_string(ERR_get_error(), NULL));
+
+        sha256_direct(der, dersz, buffer);
+        return 0;
+#else
+        return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "openssl is not supported, cannot calculate X509 fingerprint: %m");
+#endif
+}
diff --git a/src/shared/openssl-util.h b/src/shared/openssl-util.h
index ce82074..4fa0a95 100644
--- a/src/shared/openssl-util.h
+++ b/src/shared/openssl-util.h
@@ -2,19 +2,105 @@
 #pragma once
 
 #include "macro.h"
+#include "sha256.h"
+
+#define X509_FINGERPRINT_SIZE SHA256_DIGEST_SIZE
 
 #if HAVE_OPENSSL
+#  include <openssl/bio.h>
+#  include <openssl/bn.h>
+#  include <openssl/err.h>
 #  include <openssl/evp.h>
-#  include <openssl/x509.h>
+#  include <openssl/opensslv.h>
+#  include <openssl/pkcs7.h>
+#  include <openssl/ssl.h>
+#  include <openssl/x509v3.h>
+#  ifndef OPENSSL_VERSION_MAJOR
+/* OPENSSL_VERSION_MAJOR macro was added in OpenSSL 3. Thus, if it doesn't exist,  we must be before OpenSSL 3. */
+#    define OPENSSL_VERSION_MAJOR 1
+#  endif
+#  if OPENSSL_VERSION_MAJOR >= 3
+#    include <openssl/core_names.h>
+#  endif
 
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(X509*, X509_free, NULL);
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(X509_NAME*, X509_NAME_free, NULL);
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EVP_PKEY_CTX*, EVP_PKEY_CTX_free, NULL);
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EVP_CIPHER_CTX*, EVP_CIPHER_CTX_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EC_POINT*, EC_POINT_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EC_GROUP*, EC_GROUP_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(BIGNUM*, BN_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(BN_CTX*, BN_CTX_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(ECDSA_SIG*, ECDSA_SIG_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(PKCS7*, PKCS7_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(SSL*, SSL_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(BIO*, BIO_free, NULL);
 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EVP_MD_CTX*, EVP_MD_CTX_free, NULL);
 
+static inline void sk_X509_free_allp(STACK_OF(X509) **sk) {
+        if (!sk || !*sk)
+                return;
+
+        sk_X509_pop_free(*sk, X509_free);
+}
+
+int openssl_hash(const EVP_MD *alg, const void *msg, size_t msg_len, uint8_t *ret_hash, size_t *ret_hash_len);
+
 int rsa_encrypt_bytes(EVP_PKEY *pkey, const void *decrypted_key, size_t decrypted_key_size, void **ret_encrypt_key, size_t *ret_encrypt_key_size);
 
 int rsa_pkey_to_suitable_key_size(EVP_PKEY *pkey, size_t *ret_suitable_key_size);
 
+int pubkey_fingerprint(EVP_PKEY *pk, const EVP_MD *md, void **ret, size_t *ret_size);
+
+#else
+
+typedef struct X509 X509;
+typedef struct EVP_PKEY EVP_PKEY;
+
+static inline void *X509_free(X509 *p) {
+        assert(p == NULL);
+        return NULL;
+}
+
+static inline void *EVP_PKEY_free(EVP_PKEY *p) {
+        assert(p == NULL);
+        return NULL;
+}
+
+#endif
+
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(X509*, X509_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EVP_PKEY*, EVP_PKEY_free, NULL);
+
+int x509_fingerprint(X509 *cert, uint8_t buffer[static X509_FINGERPRINT_SIZE]);
+
+#if PREFER_OPENSSL
+/* The openssl definition */
+typedef const EVP_MD* hash_md_t;
+typedef const EVP_MD* hash_algorithm_t;
+typedef int elliptic_curve_t;
+typedef EVP_MD_CTX* hash_context_t;
+#  define OPENSSL_OR_GCRYPT(a, b) (a)
+
+#elif HAVE_GCRYPT
+
+#  include <gcrypt.h>
+
+/* The gcrypt definition */
+typedef int hash_md_t;
+typedef const char* hash_algorithm_t;
+typedef const char* elliptic_curve_t;
+typedef gcry_md_hd_t hash_context_t;
+#  define OPENSSL_OR_GCRYPT(a, b) (b)
+#endif
+
+#if PREFER_OPENSSL
+int string_hashsum(const char *s, size_t len, hash_algorithm_t md_algorithm, char **ret);
+
+static inline int string_hashsum_sha224(const char *s, size_t len, char **ret) {
+        return string_hashsum(s, len, EVP_sha224(), ret);
+}
+
+static inline int string_hashsum_sha256(const char *s, size_t len, char **ret) {
+        return string_hashsum(s, len, EVP_sha256(), ret);
+}
 #endif
diff --git a/src/shared/output-mode.c b/src/shared/output-mode.c
index 1645b75..026bf19 100644
--- a/src/shared/output-mode.c
+++ b/src/shared/output-mode.c
@@ -28,6 +28,7 @@
         [OUTPUT_SHORT_ISO_PRECISE] = "short-iso-precise",
         [OUTPUT_SHORT_PRECISE] = "short-precise",
         [OUTPUT_SHORT_MONOTONIC] = "short-monotonic",
+        [OUTPUT_SHORT_DELTA] = "short-delta",
         [OUTPUT_SHORT_UNIX] = "short-unix",
         [OUTPUT_VERBOSE] = "verbose",
         [OUTPUT_EXPORT] = "export",
diff --git a/src/shared/output-mode.h b/src/shared/output-mode.h
index ba067c9..26351c9 100644
--- a/src/shared/output-mode.h
+++ b/src/shared/output-mode.h
@@ -11,6 +11,7 @@
         OUTPUT_SHORT_ISO_PRECISE,
         OUTPUT_SHORT_PRECISE,
         OUTPUT_SHORT_MONOTONIC,
+        OUTPUT_SHORT_DELTA,
         OUTPUT_SHORT_UNIX,
         OUTPUT_VERBOSE,
         OUTPUT_EXPORT,
@@ -33,14 +34,20 @@
 
 typedef enum OutputFlags {
         OUTPUT_SHOW_ALL       = 1 << 0,
-        OUTPUT_WARN_CUTOFF    = 1 << 1,
-        OUTPUT_FULL_WIDTH     = 1 << 2,
-        OUTPUT_COLOR          = 1 << 3,
+        OUTPUT_FULL_WIDTH     = 1 << 1,
+        OUTPUT_COLOR          = 1 << 2,
+
+        /* Specific to log output */
+        OUTPUT_WARN_CUTOFF    = 1 << 3,
         OUTPUT_CATALOG        = 1 << 4,
         OUTPUT_BEGIN_NEWLINE  = 1 << 5,
         OUTPUT_UTC            = 1 << 6,
-        OUTPUT_KERNEL_THREADS = 1 << 7,
-        OUTPUT_NO_HOSTNAME    = 1 << 8,
+        OUTPUT_NO_HOSTNAME    = 1 << 7,
+
+        /* Specific to process tree output */
+        OUTPUT_KERNEL_THREADS = 1 << 8,
+        OUTPUT_CGROUP_XATTRS  = 1 << 9,
+        OUTPUT_CGROUP_ID      = 1 << 10,
 } OutputFlags;
 
 JsonFormatFlags output_mode_to_json_format_flags(OutputMode m);
diff --git a/src/shared/pager.c b/src/shared/pager.c
index 4bbad7e..6ed35a3 100644
--- a/src/shared/pager.c
+++ b/src/shared/pager.c
@@ -25,7 +25,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static pid_t pager_pid = 0;
 
@@ -83,23 +82,24 @@
         return r;
 }
 
-int pager_open(PagerFlags flags) {
-        _cleanup_close_pair_ int fd[2] = { -1, -1 }, exe_name_pipe[2] = { -1, -1 };
+void pager_open(PagerFlags flags) {
+        _cleanup_close_pair_ int fd[2] = PIPE_EBADF, exe_name_pipe[2] = PIPE_EBADF;
         _cleanup_strv_free_ char **pager_args = NULL;
+        _cleanup_free_ char *l = NULL;
         const char *pager, *less_opts;
         int r;
 
         if (flags & PAGER_DISABLE)
-                return 0;
+                return;
 
         if (pager_pid > 0)
-                return 1;
+                return;
 
         if (terminal_is_dumb())
-                return 0;
+                return;
 
         if (!is_main_thread())
-                return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Pager invoked from wrong thread.");
+                return (void) log_error_errno(SYNTHETIC_ERRNO(EPERM), "Pager invoked from wrong thread.");
 
         pager = getenv("SYSTEMD_PAGER");
         if (!pager)
@@ -108,11 +108,11 @@
         if (pager) {
                 pager_args = strv_split(pager, WHITESPACE);
                 if (!pager_args)
-                        return log_oom();
+                        return (void) log_oom();
 
                 /* If the pager is explicitly turned off, honour it */
                 if (strv_isempty(pager_args) || strv_equal(pager_args, STRV_MAKE("cat")))
-                        return 0;
+                        return;
         }
 
         /* Determine and cache number of columns/lines before we spawn the pager so that we get the value from the
@@ -121,25 +121,29 @@
         (void) lines();
 
         if (pipe2(fd, O_CLOEXEC) < 0)
-                return log_error_errno(errno, "Failed to create pager pipe: %m");
+                return (void) log_error_errno(errno, "Failed to create pager pipe: %m");
 
         /* This is a pipe to feed the name of the executed pager binary into the parent */
         if (pipe2(exe_name_pipe, O_CLOEXEC) < 0)
-                return log_error_errno(errno, "Failed to create exe_name pipe: %m");
+                return (void) log_error_errno(errno, "Failed to create exe_name pipe: %m");
 
         /* Initialize a good set of less options */
         less_opts = getenv("SYSTEMD_LESS");
         if (!less_opts)
                 less_opts = "FRSXMK";
-        if (flags & PAGER_JUMP_TO_END)
-                less_opts = strjoina(less_opts, " +G");
+        if (flags & PAGER_JUMP_TO_END) {
+                l = strjoin(less_opts, " +G");
+                if (!l)
+                        return (void) log_oom();
+                less_opts = l;
+        }
 
         /* We set SIGINT as PR_DEATHSIG signal here, to match the "K" parameter we set in $LESS, which enables SIGINT behaviour. */
         r = safe_fork("(pager)", FORK_RESET_SIGNALS|FORK_DEATHSIG_SIGINT|FORK_RLIMIT_NOFILE_SAFE|FORK_LOG, &pager_pid);
         if (r < 0)
-                return r;
+                return;
         if (r == 0) {
-                const char *less_charset, *exe;
+                const char *less_charset;
 
                 /* In the child start the pager */
 
@@ -214,57 +218,52 @@
                 /* Debian's alternatives command for pagers is called 'pager'. Note that we do not call
                  * sensible-pagers here, since that is just a shell script that implements a logic that is
                  * similar to this one anyway, but is Debian-specific. */
-                FOREACH_STRING(exe, "pager", "less", "more") {
-                        /* Only less implements secure mode right now. */
-                        if (use_secure_mode && !streq(exe, "less"))
+                static const char* pagers[] = { "pager", "less", "more", "(built-in)" };
+
+                for (unsigned i = 0; i < ELEMENTSOF(pagers); i++) {
+                        /* Only less (and our trivial fallback) implement secure mode right now. */
+                        if (use_secure_mode && !STR_IN_SET(pagers[i], "less", "(built-in)"))
                                 continue;
 
-                        r = loop_write(exe_name_pipe[1], exe, strlen(exe) + 1, false);
-                        if (r  < 0) {
+                        r = loop_write(exe_name_pipe[1], pagers[i], strlen(pagers[i]) + 1, false);
+                        if (r < 0) {
                                 log_error_errno(r, "Failed to write pager name to socket: %m");
                                 _exit(EXIT_FAILURE);
                         }
-                        execlp(exe, exe, NULL);
-                        log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
-                                       "Failed to execute '%s', using next fallback pager: %m", exe);
-                }
 
-                /* Our builtin is also very secure. */
-                r = loop_write(exe_name_pipe[1], "(built-in)", strlen("(built-in)") + 1, false);
-                if (r < 0) {
-                        log_error_errno(r, "Failed to write pager name to socket: %m");
-                        _exit(EXIT_FAILURE);
+                        if (i < ELEMENTSOF(pagers) - 1) {
+                                execlp(pagers[i], pagers[i], NULL);
+                                log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
+                                               "Failed to execute '%s', will try '%s' next: %m", pagers[i], pagers[i+1]);
+                        } else {
+                                /* Close pipe to signal the parent to start sending data */
+                                safe_close_pair(exe_name_pipe);
+                                pager_fallback();
+                                assert_not_reached();
+                        }
                 }
-                /* Close pipe to signal the parent to start sending data */
-                safe_close_pair(exe_name_pipe);
-                pager_fallback();
-                /* not reached */
         }
 
         /* Return in the parent */
         stored_stdout = fcntl(STDOUT_FILENO, F_DUPFD_CLOEXEC, 3);
         if (dup2(fd[1], STDOUT_FILENO) < 0) {
                 stored_stdout = safe_close(stored_stdout);
-                return log_error_errno(errno, "Failed to duplicate pager pipe: %m");
+                return (void) log_error_errno(errno, "Failed to duplicate pager pipe: %m");
         }
         stdout_redirected = true;
 
         stored_stderr = fcntl(STDERR_FILENO, F_DUPFD_CLOEXEC, 3);
         if (dup2(fd[1], STDERR_FILENO) < 0) {
                 stored_stderr = safe_close(stored_stderr);
-                return log_error_errno(errno, "Failed to duplicate pager pipe: %m");
+                return (void) log_error_errno(errno, "Failed to duplicate pager pipe: %m");
         }
         stderr_redirected = true;
 
         exe_name_pipe[1] = safe_close(exe_name_pipe[1]);
 
         r = no_quit_on_interrupt(TAKE_FD(exe_name_pipe[0]), less_opts);
-        if (r < 0)
-                return r;
         if (r > 0)
                 (void) ignore_signals(SIGINT);
-
-        return 1;
 }
 
 void pager_close(void) {
@@ -286,7 +285,7 @@
         stdout_redirected = stderr_redirected = false;
 
         (void) kill(pager_pid, SIGCONT);
-        (void) wait_for_terminate(pager_pid, NULL);
+        (void) wait_for_terminate(TAKE_PID(pager_pid), NULL);
         pager_pid = 0;
 }
 
@@ -309,8 +308,8 @@
         if (e) {
                 char *page = NULL, *section = NULL;
 
-                page = strndupa(desc, e - desc);
-                section = strndupa(e + 1, desc + k - e - 2);
+                page = strndupa_safe(desc, e - desc);
+                section = strndupa_safe(e + 1, desc + k - e - 2);
 
                 args[1] = section;
                 args[2] = page;
diff --git a/src/shared/pager.h b/src/shared/pager.h
index b3b1b4f..9a9d4c5 100644
--- a/src/shared/pager.h
+++ b/src/shared/pager.h
@@ -10,7 +10,7 @@
         PAGER_JUMP_TO_END = 1 << 1,
 } PagerFlags;
 
-int pager_open(PagerFlags flags);
+void pager_open(PagerFlags flags);
 void pager_close(void);
 bool pager_have(void) _pure_;
 
diff --git a/src/shared/pam-util.c b/src/shared/pam-util.c
index 621e7fe..9d74e08 100644
--- a/src/shared/pam-util.c
+++ b/src/shared/pam-util.c
@@ -8,23 +8,45 @@
 #include "errno-util.h"
 #include "macro.h"
 #include "pam-util.h"
+#include "stdio-util.h"
+#include "string-util.h"
 
-int pam_log_oom(pam_handle_t *handle) {
-        /* This is like log_oom(), but uses PAM logging */
-        pam_syslog(handle, LOG_ERR, "Out of memory.");
-        return PAM_BUF_ERR;
+int pam_syslog_errno(pam_handle_t *handle, int level, int error, const char *format, ...) {
+        va_list ap;
+
+        LOCAL_ERRNO(error);
+
+        va_start(ap, format);
+        pam_vsyslog(handle, LOG_ERR, format, ap);
+        va_end(ap);
+
+        return error == -ENOMEM ? PAM_BUF_ERR : PAM_SERVICE_ERR;
 }
 
-int pam_bus_log_create_error(pam_handle_t *handle, int r) {
-        /* This is like bus_log_create_error(), but uses PAM logging */
-        pam_syslog(handle, LOG_ERR, "Failed to create bus message: %s", strerror_safe(r));
-        return PAM_BUF_ERR;
-}
+int pam_syslog_pam_error(pam_handle_t *handle, int level, int error, const char *format, ...) {
+        /* This wraps pam_syslog() but will replace @PAMERR@ with a string from pam_strerror().
+         * @PAMERR@ must be at the very end. */
 
-int pam_bus_log_parse_error(pam_handle_t *handle, int r) {
-        /* This is like bus_log_parse_error(), but uses PAM logging */
-        pam_syslog(handle, LOG_ERR, "Failed to parse bus message: %s", strerror_safe(r));
-        return PAM_BUF_ERR;
+        va_list ap;
+        va_start(ap, format);
+
+        const char *p = endswith(format, "@PAMERR@");
+        if (p) {
+                const char *pamerr = pam_strerror(handle, error);
+                if (strchr(pamerr, '%'))
+                        pamerr = "n/a";  /* We cannot have any formatting chars */
+
+                char buf[p - format + strlen(pamerr) + 1];
+                xsprintf(buf, "%*s%s", (int)(p - format), format, pamerr);
+                DISABLE_WARNING_FORMAT_NONLITERAL;
+                pam_vsyslog(handle, level, buf, ap);
+                REENABLE_WARNING;
+        } else
+                pam_vsyslog(handle, level, format, ap);
+
+        va_end(ap);
+
+        return error;
 }
 
 static void cleanup_system_bus(pam_handle_t *handle, void *data, int error_status) {
@@ -44,22 +66,16 @@
                 *ret = sd_bus_ref(TAKE_PTR(bus)); /* Increase the reference counter, so that the PAM data stays valid */
                 return PAM_SUCCESS;
         }
-        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA)) {
-                pam_syslog(handle, LOG_ERR, "Failed to get bus connection: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (!IN_SET(r, PAM_SUCCESS, PAM_NO_MODULE_DATA))
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to get bus connection: @PAMERR@");
 
         r = sd_bus_open_system(&bus);
-        if (r < 0) {
-                pam_syslog(handle, LOG_ERR, "Failed to connect to system bus: %s", strerror_safe(r));
-                return PAM_SERVICE_ERR;
-        }
+        if (r < 0)
+                return pam_syslog_errno(handle, LOG_ERR, r, "Failed to connect to system bus: %m");
 
         r = pam_set_data(handle, "systemd-system-bus", bus, cleanup_system_bus);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to set PAM bus data: %s", pam_strerror(handle, r));
-                return r;
-        }
+        if (r != PAM_SUCCESS)
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to set PAM bus data: @PAMERR@");
 
         sd_bus_ref(bus);
         *ret = TAKE_PTR(bus);
@@ -72,9 +88,9 @@
 
         r = pam_set_data(handle, "systemd-system-bus", NULL, NULL);
         if (r != PAM_SUCCESS)
-                pam_syslog(handle, LOG_ERR, "Failed to release PAM user record data: %s", pam_strerror(handle, r));
+                return pam_syslog_pam_error(handle, LOG_ERR, r, "Failed to release PAM user record data: @PAMERR@");
 
-        return r;
+        return PAM_SUCCESS;
 }
 
 void pam_cleanup_free(pam_handle_t *handle, void *data, int error_status) {
diff --git a/src/shared/pam-util.h b/src/shared/pam-util.h
index 41f1835..1a17ea1 100644
--- a/src/shared/pam-util.h
+++ b/src/shared/pam-util.h
@@ -5,9 +5,24 @@
 
 #include "sd-bus.h"
 
-int pam_log_oom(pam_handle_t *handle);
-int pam_bus_log_create_error(pam_handle_t *handle, int r);
-int pam_bus_log_parse_error(pam_handle_t *handle, int r);
+int pam_syslog_errno(pam_handle_t *handle, int level, int error, const char *format, ...) _printf_(4,5);
+
+int pam_syslog_pam_error(pam_handle_t *handle, int level, int error, const char *format, ...) _printf_(4,5);
+
+static inline int pam_log_oom(pam_handle_t *handle) {
+        /* This is like log_oom(), but uses PAM logging */
+        return pam_syslog_errno(handle, LOG_ERR, ENOMEM, "Out of memory.");
+}
+
+static inline int pam_bus_log_create_error(pam_handle_t *handle, int r) {
+        /* This is like bus_log_create_error(), but uses PAM logging */
+        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to create bus message: %m");
+}
+
+static inline int pam_bus_log_parse_error(pam_handle_t *handle, int r) {
+        /* This is like bus_log_parse_error(), but uses PAM logging */
+        return pam_syslog_errno(handle, LOG_ERR, r, "Failed to parse bus message: %m");
+}
 
 int pam_acquire_bus_connection(pam_handle_t *handle, sd_bus **ret);
 int pam_release_bus_connection(pam_handle_t *handle);
diff --git a/src/shared/parse-helpers.c b/src/shared/parse-helpers.c
new file mode 100644
index 0000000..e09797b
--- /dev/null
+++ b/src/shared/parse-helpers.c
@@ -0,0 +1,198 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "af-list.h"
+#include "extract-word.h"
+#include "ip-protocol-list.h"
+#include "log.h"
+#include "parse-helpers.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "utf8.h"
+
+int path_simplify_and_warn(
+                char *path,
+                unsigned flag,
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *lvalue) {
+
+        bool fatal = flag & PATH_CHECK_FATAL;
+
+        assert(!FLAGS_SET(flag, PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE));
+
+        if (!utf8_is_valid(path))
+                return log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, path);
+
+        if (flag & (PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE)) {
+                bool absolute;
+
+                absolute = path_is_absolute(path);
+
+                if (!absolute && (flag & PATH_CHECK_ABSOLUTE))
+                        return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "%s= path is not absolute%s: %s",
+                                          lvalue, fatal ? "" : ", ignoring", path);
+
+                if (absolute && (flag & PATH_CHECK_RELATIVE))
+                        return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "%s= path is absolute%s: %s",
+                                          lvalue, fatal ? "" : ", ignoring", path);
+        }
+
+        path_simplify(path);
+
+        if (!path_is_valid(path))
+                return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
+                                  "%s= path has invalid length (%zu bytes)%s.",
+                                  lvalue, strlen(path), fatal ? "" : ", ignoring");
+
+        if (!path_is_normalized(path))
+                return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
+                                  "%s= path is not normalized%s: %s",
+                                  lvalue, fatal ? "" : ", ignoring", path);
+
+        return 0;
+}
+
+static int parse_af_token(
+                const char *token,
+                int *family,
+                int *ip_protocol,
+                uint16_t *nr_ports,
+                uint16_t *port_min) {
+
+        int af;
+
+        assert(token);
+        assert(family);
+
+        af = af_from_ipv4_ipv6(token);
+        if (af == AF_UNSPEC)
+                return -EINVAL;
+
+        *family = af;
+        return 0;
+}
+
+static int parse_ip_protocol_token(
+                const char *token,
+                int *family,
+                int *ip_protocol,
+                uint16_t *nr_ports,
+                uint16_t *port_min) {
+
+        int proto;
+
+        assert(token);
+        assert(ip_protocol);
+
+        proto = ip_protocol_from_tcp_udp(token);
+        if (proto < 0)
+                return -EINVAL;
+
+        *ip_protocol = proto;
+        return 0;
+}
+
+static int parse_ip_ports_token(
+                const char *token,
+                int *family,
+                int *ip_protocol,
+                uint16_t *nr_ports,
+                uint16_t *port_min) {
+
+        assert(token);
+        assert(nr_ports);
+        assert(port_min);
+
+        if (streq(token, "any"))
+                *nr_ports = *port_min = 0;
+        else {
+                uint16_t mn = 0, mx = 0;
+                int r = parse_ip_port_range(token, &mn, &mx);
+                if (r < 0)
+                        return r;
+
+                *nr_ports = mx - mn + 1;
+                *port_min = mn;
+        }
+
+        return 0;
+}
+
+typedef int (*parse_token_f)(
+                const char *,
+                int *,
+                int *,
+                uint16_t *,
+                uint16_t *);
+
+int parse_socket_bind_item(
+                const char *str,
+                int *address_family,
+                int *ip_protocol,
+                uint16_t *nr_ports,
+                uint16_t *port_min) {
+
+        /* Order of token parsers is important. */
+        const parse_token_f parsers[] = {
+                &parse_af_token,
+                &parse_ip_protocol_token,
+                &parse_ip_ports_token,
+        };
+        parse_token_f const *parser_ptr = parsers;
+        int af = AF_UNSPEC, proto = 0, r;
+        uint16_t nr = 0, mn = 0;
+        const char *p = ASSERT_PTR(str);
+
+        assert(address_family);
+        assert(ip_protocol);
+        assert(nr_ports);
+        assert(port_min);
+
+        if (isempty(p))
+                return -EINVAL;
+
+        for (;;) {
+                _cleanup_free_ char *token = NULL;
+
+                r = extract_first_word(&p, &token, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
+                if (r == 0)
+                        break;
+                if (r < 0)
+                        return r;
+
+                if (isempty(token))
+                        return -EINVAL;
+
+                while (parser_ptr != parsers + ELEMENTSOF(parsers)) {
+                        r = (*parser_ptr)(token, &af, &proto, &nr, &mn);
+                        if (r == -ENOMEM)
+                                return r;
+
+                        ++parser_ptr;
+                        /* Continue to next token if parsing succeeded,
+                         * otherwise apply next parser to the same token.
+                         */
+                        if (r >= 0)
+                                break;
+                }
+                if (parser_ptr == parsers + ELEMENTSOF(parsers))
+                                break;
+        }
+
+        /* Failed to parse a token. */
+        if (r < 0)
+                return r;
+
+        /* Parsers applied successfully, but end of the string not reached. */
+        if (p)
+                return -EINVAL;
+
+        *address_family = af;
+        *ip_protocol = proto;
+        *nr_ports = nr;
+        *port_min = mn;
+        return 0;
+}
diff --git a/src/shared/parse-helpers.h b/src/shared/parse-helpers.h
new file mode 100644
index 0000000..49da281
--- /dev/null
+++ b/src/shared/parse-helpers.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdint.h>
+
+enum {
+        PATH_CHECK_FATAL    = 1 << 0,  /* If not set, then error message is appended with 'ignoring'. */
+        PATH_CHECK_ABSOLUTE = 1 << 1,
+        PATH_CHECK_RELATIVE = 1 << 2,
+};
+
+int path_simplify_and_warn(
+                char *path,
+                unsigned flag,
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *lvalue);
+
+int parse_socket_bind_item(
+        const char *str,
+        int *address_family,
+        int *ip_protocol,
+        uint16_t *nr_ports,
+        uint16_t *port_min);
diff --git a/src/shared/parse-socket-bind-item.c b/src/shared/parse-socket-bind-item.c
deleted file mode 100644
index 3c92467..0000000
--- a/src/shared/parse-socket-bind-item.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "af-list.h"
-#include "extract-word.h"
-#include "ip-protocol-list.h"
-#include "parse-socket-bind-item.h"
-#include "parse-util.h"
-
-static int parse_af_token(
-                const char *token,
-                int *family,
-                int *ip_protocol,
-                uint16_t *nr_ports,
-                uint16_t *port_min) {
-
-        int af;
-
-        assert(token);
-        assert(family);
-
-        af = af_from_ipv4_ipv6(token);
-        if (af == AF_UNSPEC)
-                return -EINVAL;
-
-        *family = af;
-        return 0;
-}
-
-static int parse_ip_protocol_token(
-                const char *token,
-                int *family,
-                int *ip_protocol,
-                uint16_t *nr_ports,
-                uint16_t *port_min) {
-
-        int proto;
-
-        assert(token);
-        assert(ip_protocol);
-
-        proto = ip_protocol_from_tcp_udp(token);
-        if (proto < 0)
-                return -EINVAL;
-
-        *ip_protocol = proto;
-        return 0;
-}
-
-static int parse_ip_ports_token(
-                const char *token,
-                int *family,
-                int *ip_protocol,
-                uint16_t *nr_ports,
-                uint16_t *port_min) {
-
-        assert(token);
-        assert(nr_ports);
-        assert(port_min);
-
-        if (streq(token, "any"))
-                *nr_ports = *port_min = 0;
-        else {
-                uint16_t mn = 0, mx = 0;
-                int r = parse_ip_port_range(token, &mn, &mx);
-                if (r < 0)
-                        return r;
-
-                *nr_ports = mx - mn + 1;
-                *port_min = mn;
-        }
-
-        return 0;
-}
-
-typedef int (*parse_token_f)(
-                const char *,
-                int *,
-                int *,
-                uint16_t *,
-                uint16_t *);
-
-int parse_socket_bind_item(
-                const char *str,
-                int *address_family,
-                int *ip_protocol,
-                uint16_t *nr_ports,
-                uint16_t *port_min) {
-
-        /* Order of token parsers is important. */
-        const parse_token_f parsers[] = {
-                &parse_af_token,
-                &parse_ip_protocol_token,
-                &parse_ip_ports_token,
-        };
-        parse_token_f const *parser_ptr = parsers;
-        int af = AF_UNSPEC, proto = 0, r;
-        uint16_t nr = 0, mn = 0;
-        const char *p = str;
-
-        assert(str);
-        assert(address_family);
-        assert(ip_protocol);
-        assert(nr_ports);
-        assert(port_min);
-
-        if (isempty(p))
-                return -EINVAL;
-
-        for (;;) {
-                _cleanup_free_ char *token = NULL;
-
-                r = extract_first_word(&p, &token, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
-                if (r == 0)
-                        break;
-                if (r < 0)
-                        return r;
-
-                if (isempty(token))
-                        return -EINVAL;
-
-                while (parser_ptr != parsers + ELEMENTSOF(parsers)) {
-                        r = (*parser_ptr)(token, &af, &proto, &nr, &mn);
-                        if (r == -ENOMEM)
-                                return r;
-
-                        ++parser_ptr;
-                        /* Continue to next token if parsing succeeded,
-                         * otherwise apply next parser to the same token.
-                         */
-                        if (r >= 0)
-                                break;
-                }
-                if (parser_ptr == parsers + ELEMENTSOF(parsers))
-                                break;
-        }
-
-        /* Failed to parse a token. */
-        if (r < 0)
-                return r;
-
-        /* Parsers applied successfully, but end of the string not reached. */
-        if (p)
-                return -EINVAL;
-
-        *address_family = af;
-        *ip_protocol = proto;
-        *nr_ports = nr;
-        *port_min = mn;
-        return 0;
-}
diff --git a/src/shared/parse-socket-bind-item.h b/src/shared/parse-socket-bind-item.h
deleted file mode 100644
index c8cff8d..0000000
--- a/src/shared/parse-socket-bind-item.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#pragma once
-
-#include <stdint.h>
-
-int parse_socket_bind_item(
-        const char *str,
-        int *address_family,
-        int *ip_protocol,
-        uint16_t *nr_ports,
-        uint16_t *port_min);
diff --git a/src/shared/pcre2-util.c b/src/shared/pcre2-util.c
new file mode 100644
index 0000000..578b02d
--- /dev/null
+++ b/src/shared/pcre2-util.c
@@ -0,0 +1,166 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "dlfcn-util.h"
+#include "log.h"
+#include "pcre2-util.h"
+
+#if HAVE_PCRE2
+static void *pcre2_dl = NULL;
+
+pcre2_match_data* (*sym_pcre2_match_data_create)(uint32_t, pcre2_general_context *);
+void (*sym_pcre2_match_data_free)(pcre2_match_data *);
+void (*sym_pcre2_code_free)(pcre2_code *);
+pcre2_code* (*sym_pcre2_compile)(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, pcre2_compile_context *);
+int (*sym_pcre2_get_error_message)(int, PCRE2_UCHAR *, PCRE2_SIZE);
+int (*sym_pcre2_match)(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, uint32_t, pcre2_match_data *, pcre2_match_context *);
+PCRE2_SIZE* (*sym_pcre2_get_ovector_pointer)(pcre2_match_data *);
+
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+        pcre2_code_hash_ops_free,
+        pcre2_code,
+        (void (*)(const pcre2_code *, struct siphash*))trivial_hash_func,
+        (int (*)(const pcre2_code *, const pcre2_code*))trivial_compare_func,
+        sym_pcre2_code_free);
+#else
+const struct hash_ops pcre2_code_hash_ops_free = {};
+#endif
+
+int dlopen_pcre2(void) {
+#if HAVE_PCRE2
+        /* So here's something weird: PCRE2 actually renames the symbols exported by the library via C
+         * macros, so that the exported symbols carry a suffix "_8" but when used from C the suffix is
+         * gone. In the argument list below we ignore this mangling. Surprisingly (at least to me), we
+         * actually get away with that. That's because DLSYM_ARG() useses STRINGIFY() to generate a string
+         * version of the symbol name, and that resolves the macro mapping implicitly already, so that the
+         * string actually contains the "_8" suffix already due to that and we don't have to append it
+         * manually anymore. C is weird. 🤯 */
+
+        return dlopen_many_sym_or_warn(
+                        &pcre2_dl, "libpcre2-8.so.0", LOG_ERR,
+                        DLSYM_ARG(pcre2_match_data_create),
+                        DLSYM_ARG(pcre2_match_data_free),
+                        DLSYM_ARG(pcre2_code_free),
+                        DLSYM_ARG(pcre2_compile),
+                        DLSYM_ARG(pcre2_get_error_message),
+                        DLSYM_ARG(pcre2_match),
+                        DLSYM_ARG(pcre2_get_ovector_pointer));
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "PCRE2 support is not compiled in.");
+#endif
+}
+
+int pattern_compile_and_log(const char *pattern, PatternCompileCase case_, pcre2_code **ret) {
+#if HAVE_PCRE2
+        PCRE2_SIZE erroroffset;
+        _cleanup_(sym_pcre2_code_freep) pcre2_code *p = NULL;
+        unsigned flags = 0;
+        int errorcode, r;
+
+        assert(pattern);
+
+        r = dlopen_pcre2();
+        if (r < 0)
+                return r;
+
+        if (case_ == PATTERN_COMPILE_CASE_INSENSITIVE)
+                flags = PCRE2_CASELESS;
+        else if (case_ == PATTERN_COMPILE_CASE_AUTO) {
+                _cleanup_(sym_pcre2_match_data_freep) pcre2_match_data *md = NULL;
+                bool has_case;
+                _cleanup_(sym_pcre2_code_freep) pcre2_code *cs = NULL;
+
+                md = sym_pcre2_match_data_create(1, NULL);
+                if (!md)
+                        return log_oom();
+
+                r = pattern_compile_and_log("[[:upper:]]", PATTERN_COMPILE_CASE_SENSITIVE, &cs);
+                if (r < 0)
+                        return r;
+
+                r = sym_pcre2_match(cs, (PCRE2_SPTR8) pattern, PCRE2_ZERO_TERMINATED, 0, 0, md, NULL);
+                has_case = r >= 0;
+
+                flags = !has_case * PCRE2_CASELESS;
+        }
+
+        log_debug("Doing case %s matching based on %s",
+                  flags & PCRE2_CASELESS ? "insensitive" : "sensitive",
+                  case_ != PATTERN_COMPILE_CASE_AUTO ? "request" : "pattern casing");
+
+        p = sym_pcre2_compile((PCRE2_SPTR8) pattern,
+                              PCRE2_ZERO_TERMINATED, flags, &errorcode, &erroroffset, NULL);
+        if (!p) {
+                unsigned char buf[LINE_MAX];
+
+                r = sym_pcre2_get_error_message(errorcode, buf, sizeof buf);
+
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Bad pattern \"%s\": %s", pattern,
+                                       r < 0 ? "unknown error" : (char *)buf);
+        }
+
+        if (ret)
+                *ret = TAKE_PTR(p);
+
+        return 0;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "PCRE2 support is not compiled in.");
+#endif
+}
+
+int pattern_matches_and_log(pcre2_code *compiled_pattern, const char *message, size_t size, size_t *ret_ovec) {
+#if HAVE_PCRE2
+        _cleanup_(sym_pcre2_match_data_freep) pcre2_match_data *md = NULL;
+        int r;
+
+        assert(compiled_pattern);
+        assert(message);
+        /* pattern_compile_and_log() must be called before this function is called and that function already
+         * dlopens pcre2 so we can assert on it being available here. */
+        assert(pcre2_dl);
+
+        md = sym_pcre2_match_data_create(1, NULL);
+        if (!md)
+                return log_oom();
+
+        r = sym_pcre2_match(compiled_pattern,
+                            (const unsigned char *)message,
+                            size,
+                            0,      /* start at offset 0 in the subject */
+                            0,      /* default options */
+                            md,
+                            NULL);
+        if (r == PCRE2_ERROR_NOMATCH)
+                return false;
+        if (r < 0) {
+                unsigned char buf[LINE_MAX];
+
+                r = sym_pcre2_get_error_message(r, buf, sizeof(buf));
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Pattern matching failed: %s",
+                                       r < 0 ? "unknown error" : (char*) buf);
+        }
+
+        if (ret_ovec) {
+                ret_ovec[0] = sym_pcre2_get_ovector_pointer(md)[0];
+                ret_ovec[1] = sym_pcre2_get_ovector_pointer(md)[1];
+        }
+
+        return true;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "PCRE2 support is not compiled in.");
+#endif
+}
+
+void *pattern_free(pcre2_code *p) {
+#if HAVE_PCRE2
+        if (!p)
+                return NULL;
+
+        assert(pcre2_dl);
+        sym_pcre2_code_free(p);
+        return NULL;
+#else
+        assert(p == NULL);
+        return NULL;
+#endif
+}
diff --git a/src/shared/pcre2-util.h b/src/shared/pcre2-util.h
new file mode 100644
index 0000000..f1e744d
--- /dev/null
+++ b/src/shared/pcre2-util.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "hash-funcs.h"
+#include "macro.h"
+
+#if HAVE_PCRE2
+
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
+
+extern pcre2_match_data* (*sym_pcre2_match_data_create)(uint32_t, pcre2_general_context *);
+extern void (*sym_pcre2_match_data_free)(pcre2_match_data *);
+extern void (*sym_pcre2_code_free)(pcre2_code *);
+extern pcre2_code* (*sym_pcre2_compile)(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, pcre2_compile_context *);
+extern int (*sym_pcre2_get_error_message)(int, PCRE2_UCHAR *, PCRE2_SIZE);
+extern int (*sym_pcre2_match)(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, uint32_t, pcre2_match_data *, pcre2_match_context *);
+extern PCRE2_SIZE* (*sym_pcre2_get_ovector_pointer)(pcre2_match_data *);
+
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(pcre2_match_data*, sym_pcre2_match_data_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(pcre2_code*, sym_pcre2_code_free, NULL);
+#else
+
+typedef struct {} pcre2_code;
+
+#endif
+
+extern const struct hash_ops pcre2_code_hash_ops_free;
+
+typedef enum {
+        PATTERN_COMPILE_CASE_AUTO,
+        PATTERN_COMPILE_CASE_SENSITIVE,
+        PATTERN_COMPILE_CASE_INSENSITIVE,
+        _PATTERN_COMPILE_CASE_MAX,
+        _PATTERN_COMPILE_CASE_INVALID = -EINVAL,
+} PatternCompileCase;
+
+int pattern_compile_and_log(const char *pattern, PatternCompileCase case_, pcre2_code **ret);
+int pattern_matches_and_log(pcre2_code *compiled_pattern, const char *message, size_t size, size_t *ret_ovec);
+void *pattern_free(pcre2_code *p);
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(pcre2_code*, pattern_free);
+
+int dlopen_pcre2(void);
diff --git a/src/shared/pkcs11-util.c b/src/shared/pkcs11-util.c
index 9fc577c..4d7edf8 100644
--- a/src/shared/pkcs11-util.c
+++ b/src/shared/pkcs11-util.c
@@ -3,6 +3,8 @@
 #include <fcntl.h>
 
 #include "ask-password-api.h"
+#include "dlfcn-util.h"
+#include "env-util.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "format-table.h"
@@ -39,17 +41,59 @@
 
 #if HAVE_P11KIT
 
+static void *p11kit_dl = NULL;
+
+char *(*sym_p11_kit_module_get_name)(CK_FUNCTION_LIST *module);
+void (*sym_p11_kit_modules_finalize_and_release)(CK_FUNCTION_LIST **modules);
+CK_FUNCTION_LIST **(*sym_p11_kit_modules_load_and_initialize)(int flags);
+const char *(*sym_p11_kit_strerror)(CK_RV rv);
+int (*sym_p11_kit_uri_format)(P11KitUri *uri, P11KitUriType uri_type, char **string);
+void (*sym_p11_kit_uri_free)(P11KitUri *uri);
+CK_ATTRIBUTE_PTR (*sym_p11_kit_uri_get_attributes)(P11KitUri *uri, CK_ULONG *n_attrs);
+CK_INFO_PTR (*sym_p11_kit_uri_get_module_info)(P11KitUri *uri);
+CK_SLOT_INFO_PTR (*sym_p11_kit_uri_get_slot_info)(P11KitUri *uri);
+CK_TOKEN_INFO_PTR (*sym_p11_kit_uri_get_token_info)(P11KitUri *uri);
+int (*sym_p11_kit_uri_match_token_info)(const P11KitUri *uri, const CK_TOKEN_INFO *token_info);
+const char *(*sym_p11_kit_uri_message)(int code);
+P11KitUri *(*sym_p11_kit_uri_new)(void);
+int (*sym_p11_kit_uri_parse)(const char *string, P11KitUriType uri_type, P11KitUri *uri);
+
+int dlopen_p11kit(void) {
+        return dlopen_many_sym_or_warn(
+                        &p11kit_dl,
+                        "libp11-kit.so.0", LOG_DEBUG,
+                        DLSYM_ARG(p11_kit_module_get_name),
+                        DLSYM_ARG(p11_kit_modules_finalize_and_release),
+                        DLSYM_ARG(p11_kit_modules_load_and_initialize),
+                        DLSYM_ARG(p11_kit_strerror),
+                        DLSYM_ARG(p11_kit_uri_format),
+                        DLSYM_ARG(p11_kit_uri_free),
+                        DLSYM_ARG(p11_kit_uri_get_attributes),
+                        DLSYM_ARG(p11_kit_uri_get_module_info),
+                        DLSYM_ARG(p11_kit_uri_get_slot_info),
+                        DLSYM_ARG(p11_kit_uri_get_token_info),
+                        DLSYM_ARG(p11_kit_uri_match_token_info),
+                        DLSYM_ARG(p11_kit_uri_message),
+                        DLSYM_ARG(p11_kit_uri_new),
+                        DLSYM_ARG(p11_kit_uri_parse));
+}
+
 int uri_from_string(const char *p, P11KitUri **ret) {
-        _cleanup_(p11_kit_uri_freep) P11KitUri *uri = NULL;
+        _cleanup_(sym_p11_kit_uri_freep) P11KitUri *uri = NULL;
+        int r;
 
         assert(p);
         assert(ret);
 
-        uri = p11_kit_uri_new();
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
+        uri = sym_p11_kit_uri_new();
         if (!uri)
                 return -ENOMEM;
 
-        if (p11_kit_uri_parse(p, P11_KIT_URI_FOR_ANY, uri) != P11_KIT_URI_OK)
+        if (sym_p11_kit_uri_parse(p, P11_KIT_URI_FOR_ANY, uri) != P11_KIT_URI_OK)
                 return -EINVAL;
 
         *ret = TAKE_PTR(uri);
@@ -61,11 +105,14 @@
 
         assert(info);
 
-        uri = p11_kit_uri_new();
+        if (dlopen_p11kit() < 0)
+                return NULL;
+
+        uri = sym_p11_kit_uri_new();
         if (!uri)
                 return NULL;
 
-        *p11_kit_uri_get_module_info(uri) = *info;
+        *sym_p11_kit_uri_get_module_info(uri) = *info;
         return uri;
 }
 
@@ -74,11 +121,14 @@
 
         assert(slot_info);
 
-        uri = p11_kit_uri_new();
+        if (dlopen_p11kit() < 0)
+                return NULL;
+
+        uri = sym_p11_kit_uri_new();
         if (!uri)
                 return NULL;
 
-        *p11_kit_uri_get_slot_info(uri) = *slot_info;
+        *sym_p11_kit_uri_get_slot_info(uri) = *slot_info;
         return uri;
 }
 
@@ -87,11 +137,14 @@
 
         assert(token_info);
 
-        uri = p11_kit_uri_new();
+        if (dlopen_p11kit() < 0)
+                return NULL;
+
+        uri = sym_p11_kit_uri_new();
         if (!uri)
                 return NULL;
 
-        *p11_kit_uri_get_token_info(uri) = *token_info;
+        *sym_p11_kit_uri_get_token_info(uri) = *token_info;
         return uri;
 }
 
@@ -174,6 +227,60 @@
         return t;
 }
 
+int pkcs11_token_login_by_pin(
+                CK_FUNCTION_LIST *m,
+                CK_SESSION_HANDLE session,
+                const CK_TOKEN_INFO *token_info,
+                const char *token_label,
+                const void *pin,
+                size_t pin_size) {
+
+        CK_RV rv;
+        int r;
+
+        assert(m);
+        assert(token_info);
+
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
+        if (FLAGS_SET(token_info->flags, CKF_PROTECTED_AUTHENTICATION_PATH)) {
+                rv = m->C_Login(session, CKU_USER, NULL, 0);
+                if (rv != CKR_OK)
+                        return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                               "Failed to log into security token '%s': %s", token_label, sym_p11_kit_strerror(rv));
+
+                log_info("Successfully logged into security token '%s' via protected authentication path.", token_label);
+                return 0;
+        }
+
+        if (!FLAGS_SET(token_info->flags, CKF_LOGIN_REQUIRED)) {
+                log_info("No login into security token '%s' required.", token_label);
+                return 0;
+        }
+
+        if (!pin)
+                return -ENOANO;
+
+        rv = m->C_Login(session, CKU_USER, (CK_UTF8CHAR*) pin, pin_size);
+        if (rv == CKR_OK)  {
+                log_info("Successfully logged into security token '%s'.", token_label);
+                return 0;
+        }
+
+        if (rv == CKR_PIN_LOCKED)
+                return log_error_errno(SYNTHETIC_ERRNO(EPERM),
+                                       "PIN has been locked, please reset PIN of security token '%s'.", token_label);
+        if (!IN_SET(rv, CKR_PIN_INCORRECT, CKR_PIN_LEN_RANGE))
+                return log_error_errno(SYNTHETIC_ERRNO(EIO),
+                                       "Failed to log into security token '%s': %s", token_label, sym_p11_kit_strerror(rv));
+
+        return log_notice_errno(SYNTHETIC_ERRNO(ENOLCK),
+                                "PIN for token '%s' is incorrect, please try again.",
+                                token_label);
+}
+
 int pkcs11_token_login(
                 CK_FUNCTION_LIST *m,
                 CK_SESSION_HANDLE session,
@@ -188,7 +295,7 @@
                 char **ret_used_pin) {
 
         _cleanup_free_ char *token_uri_string = NULL, *token_uri_escaped = NULL, *id = NULL, *token_label = NULL;
-        _cleanup_(p11_kit_uri_freep) P11KitUri *token_uri = NULL;
+        _cleanup_(sym_p11_kit_uri_freep) P11KitUri *token_uri = NULL;
         CK_TOKEN_INFO updated_token_info;
         int uri_result, r;
         CK_RV rv;
@@ -196,6 +303,10 @@
         assert(m);
         assert(token_info);
 
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
         token_label = pkcs11_token_label(token_info);
         if (!token_label)
                 return log_oom();
@@ -204,28 +315,16 @@
         if (!token_uri)
                 return log_oom();
 
-        uri_result = p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, &token_uri_string);
+        uri_result = sym_p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, &token_uri_string);
         if (uri_result != P11_KIT_URI_OK)
-                return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN), "Failed to format slot URI: %s", p11_kit_uri_message(uri_result));
+                return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN), "Failed to format slot URI: %s", sym_p11_kit_uri_message(uri_result));
 
-        if (FLAGS_SET(token_info->flags, CKF_PROTECTED_AUTHENTICATION_PATH)) {
-                rv = m->C_Login(session, CKU_USER, NULL, 0);
-                if (rv != CKR_OK)
-                        return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                               "Failed to log into security token '%s': %s", token_label, p11_kit_strerror(rv));
+        r = pkcs11_token_login_by_pin(m, session, token_info, token_label, /* pin= */ NULL, 0);
+        if (r == 0 && ret_used_pin)
+                *ret_used_pin = NULL;
 
-                log_info("Successfully logged into security token '%s' via protected authentication path.", token_label);
-                if (ret_used_pin)
-                        *ret_used_pin = NULL;
-                return 0;
-        }
-
-        if (!FLAGS_SET(token_info->flags, CKF_LOGIN_REQUIRED)) {
-                log_info("No login into security token '%s' required.", token_label);
-                if (ret_used_pin)
-                        *ret_used_pin = NULL;
-                return 0;
-        }
+        if (r != -ENOANO) /* pin required */
+                return r;
 
         token_uri_escaped = cescape(token_uri_string);
         if (!token_uri_escaped)
@@ -237,17 +336,16 @@
 
         for (unsigned tries = 0; tries < 3; tries++) {
                 _cleanup_strv_free_erase_ char **passwords = NULL;
-                char **i, *e;
+                _cleanup_(erase_and_freep) char *envpin = NULL;
 
-                e = getenv("PIN");
-                if (e) {
-                        passwords = strv_new(e);
+                r = getenv_steal_erase("PIN", &envpin);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to acquire PIN from environment: %m");
+                if (r > 0) {
+                        passwords = strv_new(envpin);
                         if (!passwords)
                                 return log_oom();
 
-                        string_erase(e);
-                        if (unsetenv("PIN") < 0)
-                                return log_error_errno(errno, "Failed to unset $PIN: %m");
                 } else if (headless)
                         return log_error_errno(SYNTHETIC_ERRNO(ENOPKG), "PIN querying disabled via 'headless' option. Use the 'PIN' environment variable.");
                 else {
@@ -279,38 +377,28 @@
                 }
 
                 STRV_FOREACH(i, passwords) {
-                        rv = m->C_Login(session, CKU_USER, (CK_UTF8CHAR*) *i, strlen(*i));
-                        if (rv == CKR_OK)  {
+                        r = pkcs11_token_login_by_pin(m, session, token_info, token_label, *i, strlen(*i));
+                        if (r == 0 && ret_used_pin) {
+                                char *c;
 
-                                if (ret_used_pin) {
-                                        char *c;
+                                c = strdup(*i);
+                                if (!c)
+                                        return log_oom();
 
-                                        c = strdup(*i);
-                                        if (!c)
-                                                return log_oom();
-
-                                        *ret_used_pin = c;
-                                }
-
-                                log_info("Successfully logged into security token '%s'.", token_label);
-                                return 0;
+                                *ret_used_pin = c;
                         }
-                        if (rv == CKR_PIN_LOCKED)
-                                return log_error_errno(SYNTHETIC_ERRNO(EPERM),
-                                                       "PIN has been locked, please reset PIN of security token '%s'.", token_label);
-                        if (!IN_SET(rv, CKR_PIN_INCORRECT, CKR_PIN_LEN_RANGE))
-                                return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                                       "Failed to log into security token '%s': %s", token_label, p11_kit_strerror(rv));
+
+                        if (r != -ENOLCK)
+                                return r;
 
                         /* Referesh the token info, so that we can prompt knowing the new flags if they changed. */
                         rv = m->C_GetTokenInfo(slotid, &updated_token_info);
                         if (rv != CKR_OK)
                                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                                        "Failed to acquire updated security token information for slot %lu: %s",
-                                                       slotid, p11_kit_strerror(rv));
+                                                       slotid, sym_p11_kit_strerror(rv));
 
                         token_info = &updated_token_info;
-                        log_notice("PIN for token '%s' is incorrect, please try again.", token_label);
                 }
         }
 
@@ -329,12 +417,17 @@
         CK_ATTRIBUTE *attributes = NULL;
         CK_OBJECT_HANDLE objects[2];
         CK_RV rv, rv2;
+        int r;
 
         assert(m);
         assert(search_uri);
         assert(ret_object);
 
-        attributes = p11_kit_uri_get_attributes(search_uri, &n_attributes);
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
+        attributes = sym_p11_kit_uri_get_attributes(search_uri, &n_attributes);
         for (a = 0; a < n_attributes; a++) {
 
                 /* We use the URI's included match attributes, but make them more strict. This allows users
@@ -407,16 +500,16 @@
         rv = m->C_FindObjectsInit(session, attributes, n_attributes);
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to initialize object find call: %s", p11_kit_strerror(rv));
+                                       "Failed to initialize object find call: %s", sym_p11_kit_strerror(rv));
 
         rv = m->C_FindObjects(session, objects, ELEMENTSOF(objects), &n_objects);
         rv2 = m->C_FindObjectsFinal(session);
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to find objects: %s", p11_kit_strerror(rv));
+                                       "Failed to find objects: %s", sym_p11_kit_strerror(rv));
         if (rv2 != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to finalize object find call: %s", p11_kit_strerror(rv));
+                                       "Failed to finalize object find call: %s", sym_p11_kit_strerror(rv));
         if (n_objects == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
                                        "Failed to find selected X509 certificate on token.");
@@ -444,11 +537,16 @@
         _cleanup_(X509_freep) X509 *x509 = NULL;
         X509_NAME *name = NULL;
         const unsigned char *p;
+        int r;
+
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
 
         rv = m->C_GetAttributeValue(session, object, &attribute, 1);
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to read X.509 certificate size off token: %s", p11_kit_strerror(rv));
+                                       "Failed to read X.509 certificate size off token: %s", sym_p11_kit_strerror(rv));
 
         buffer = malloc(attribute.ulValueLen);
         if (!buffer)
@@ -459,7 +557,7 @@
         rv = m->C_GetAttributeValue(session, object, &attribute, 1);
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to read X.509 certificate data off token: %s", p11_kit_strerror(rv));
+                                       "Failed to read X.509 certificate data off token: %s", sym_p11_kit_strerror(rv));
 
         p = attribute.pValue;
         x509 = d2i_X509(NULL, &p, attribute.ulValueLen);
@@ -493,12 +591,17 @@
         CK_ATTRIBUTE *attributes = NULL;
         CK_OBJECT_HANDLE objects[2];
         CK_RV rv, rv2;
+        int r;
 
         assert(m);
         assert(search_uri);
         assert(ret_object);
 
-        attributes = p11_kit_uri_get_attributes(search_uri, &n_attributes);
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
+        attributes = sym_p11_kit_uri_get_attributes(search_uri, &n_attributes);
         for (a = 0; a < n_attributes; a++) {
 
                 /* We use the URI's included match attributes, but make them more strict. This allows users
@@ -597,16 +700,16 @@
         rv = m->C_FindObjectsInit(session, attributes, n_attributes);
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to initialize object find call: %s", p11_kit_strerror(rv));
+                                       "Failed to initialize object find call: %s", sym_p11_kit_strerror(rv));
 
         rv = m->C_FindObjects(session, objects, ELEMENTSOF(objects), &n_objects);
         rv2 = m->C_FindObjectsFinal(session);
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to find objects: %s", p11_kit_strerror(rv));
+                                       "Failed to find objects: %s", sym_p11_kit_strerror(rv));
         if (rv2 != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to finalize object find call: %s", p11_kit_strerror(rv));
+                                       "Failed to finalize object find call: %s", sym_p11_kit_strerror(rv));
         if (n_objects == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
                                        "Failed to find selected private key suitable for decryption on token.");
@@ -633,6 +736,7 @@
         _cleanup_(erase_and_freep) CK_BYTE *dbuffer = NULL;
         CK_ULONG dbuffer_size = 0;
         CK_RV rv;
+        int r;
 
         assert(m);
         assert(encrypted_data);
@@ -640,10 +744,14 @@
         assert(ret_decrypted_data);
         assert(ret_decrypted_data_size);
 
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
         rv = m->C_DecryptInit(session, (CK_MECHANISM*) &mechanism, object);
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to initialize decryption on security token: %s", p11_kit_strerror(rv));
+                                       "Failed to initialize decryption on security token: %s", sym_p11_kit_strerror(rv));
 
         dbuffer_size = encrypted_data_size; /* Start with something reasonable */
         dbuffer = malloc(dbuffer_size);
@@ -662,7 +770,7 @@
         }
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to decrypt key on security token: %s", p11_kit_strerror(rv));
+                                       "Failed to decrypt key on security token: %s", sym_p11_kit_strerror(rv));
 
         log_info("Successfully decrypted key with security token.");
 
@@ -682,6 +790,10 @@
 
         assert(m);
 
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
         /* While we are at it, let's read some RNG data from the PKCS#11 token and pass it to the kernel
          * random pool. This should be cheap if we are talking to the device already. Note that we don't
          * credit any entropy, since we don't know about the quality of the pkcs#11 token's RNG. Why bother
@@ -698,7 +810,7 @@
         rv = m->C_GenerateRandom(session, buffer, rps);
         if (rv != CKR_OK)
                 return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-                                       "Failed to generate RNG data on security token: %s", p11_kit_strerror(rv));
+                                       "Failed to generate RNG data on security token: %s", sym_p11_kit_strerror(rv));
 
         r = random_write_entropy(-1, buffer, rps, false);
         if (r < 0)
@@ -734,7 +846,7 @@
         rv = m->C_OpenSession(slotid, CKF_SERIAL_SESSION, NULL, NULL, &session);
         if (rv != CKR_OK)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                                       "Failed to create session for security token '%s': %s", token_label, p11_kit_strerror(rv));
+                                       "Failed to create session for security token '%s': %s", token_label, sym_p11_kit_strerror(rv));
 
         if (callback)
                 r = callback(m, session, slotid, slot_info, token_info, search_uri, userdata);
@@ -743,7 +855,7 @@
 
         rv = m->C_CloseSession(session);
         if (rv != CKR_OK)
-                log_warning("Failed to close session on PKCS#11 token, ignoring: %s", p11_kit_strerror(rv));
+                log_warning("Failed to close session on PKCS#11 token, ignoring: %s", sym_p11_kit_strerror(rv));
 
         return r;
 }
@@ -755,21 +867,25 @@
                 pkcs11_find_token_callback_t callback,
                 void *userdata) {
 
-        _cleanup_(p11_kit_uri_freep) P11KitUri* slot_uri = NULL, *token_uri = NULL;
+        _cleanup_(sym_p11_kit_uri_freep) P11KitUri* slot_uri = NULL, *token_uri = NULL;
         _cleanup_free_ char *token_uri_string = NULL;
         CK_TOKEN_INFO token_info;
         CK_SLOT_INFO slot_info;
-        int uri_result;
+        int uri_result, r;
         CK_RV rv;
 
         assert(m);
 
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
         /* We return -EAGAIN for all failures we can attribute to a specific slot in some way, so that the
          * caller might try other slots before giving up. */
 
         rv = m->C_GetSlotInfo(slotid, &slot_info);
         if (rv != CKR_OK) {
-                log_warning("Failed to acquire slot info for slot %lu, ignoring slot: %s", slotid, p11_kit_strerror(rv));
+                log_warning("Failed to acquire slot info for slot %lu, ignoring slot: %s", slotid, sym_p11_kit_strerror(rv));
                 return -EAGAIN;
         }
 
@@ -780,9 +896,9 @@
         if (DEBUG_LOGGING) {
                 _cleanup_free_ char *slot_uri_string = NULL;
 
-                uri_result = p11_kit_uri_format(slot_uri, P11_KIT_URI_FOR_ANY, &slot_uri_string);
+                uri_result = sym_p11_kit_uri_format(slot_uri, P11_KIT_URI_FOR_ANY, &slot_uri_string);
                 if (uri_result != P11_KIT_URI_OK) {
-                        log_warning("Failed to format slot URI, ignoring slot: %s", p11_kit_uri_message(uri_result));
+                        log_warning("Failed to format slot URI, ignoring slot: %s", sym_p11_kit_uri_message(uri_result));
                         return -EAGAIN;
                 }
 
@@ -794,7 +910,7 @@
                 return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
                                        "Token not present in slot, ignoring.");
         } else if (rv != CKR_OK) {
-                log_warning("Failed to acquire token info for slot %lu, ignoring slot: %s", slotid, p11_kit_strerror(rv));
+                log_warning("Failed to acquire token info for slot %lu, ignoring slot: %s", slotid, sym_p11_kit_strerror(rv));
                 return -EAGAIN;
         }
 
@@ -802,13 +918,13 @@
         if (!token_uri)
                 return log_oom();
 
-        uri_result = p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, &token_uri_string);
+        uri_result = sym_p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, &token_uri_string);
         if (uri_result != P11_KIT_URI_OK) {
-                log_warning("Failed to format slot URI: %s", p11_kit_uri_message(uri_result));
+                log_warning("Failed to format slot URI: %s", sym_p11_kit_uri_message(uri_result));
                 return -EAGAIN;
         }
 
-        if (search_uri && !p11_kit_uri_match_token_info(search_uri, &token_info))
+        if (search_uri && !sym_p11_kit_uri_match_token_info(search_uri, &token_info))
                 return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
                                        "Found non-matching token with URI %s.",
                                        token_uri_string);
@@ -831,8 +947,8 @@
                 pkcs11_find_token_callback_t callback,
                 void *userdata) {
 
+        _cleanup_(sym_p11_kit_uri_freep) P11KitUri* module_uri = NULL;
         _cleanup_free_ char *name = NULL, *module_uri_string = NULL;
-        _cleanup_(p11_kit_uri_freep) P11KitUri* module_uri = NULL;
         _cleanup_free_ CK_SLOT_ID *slotids = NULL;
         CK_ULONG n_slotids = 0;
         int uri_result;
@@ -843,11 +959,15 @@
 
         assert(m);
 
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
         /* We ignore most errors from modules here, in order to skip over faulty modules: one faulty module
          * should not have the effect that we don't try the others anymore. We indicate such per-module
          * failures with -EAGAIN, which let's the caller try the next module. */
 
-        name = p11_kit_module_get_name(m);
+        name = sym_p11_kit_module_get_name(m);
         if (!name)
                 return log_oom();
 
@@ -855,7 +975,7 @@
 
         rv = m->C_GetInfo(&info);
         if (rv != CKR_OK) {
-                log_warning("Failed to get info on PKCS#11 module, ignoring module: %s", p11_kit_strerror(rv));
+                log_warning("Failed to get info on PKCS#11 module, ignoring module: %s", sym_p11_kit_strerror(rv));
                 return -EAGAIN;
         }
 
@@ -863,9 +983,9 @@
         if (!module_uri)
                 return log_oom();
 
-        uri_result = p11_kit_uri_format(module_uri, P11_KIT_URI_FOR_ANY, &module_uri_string);
+        uri_result = sym_p11_kit_uri_format(module_uri, P11_KIT_URI_FOR_ANY, &module_uri_string);
         if (uri_result != P11_KIT_URI_OK) {
-                log_warning("Failed to format module URI, ignoring module: %s", p11_kit_uri_message(uri_result));
+                log_warning("Failed to format module URI, ignoring module: %s", sym_p11_kit_uri_message(uri_result));
                 return -EAGAIN;
         }
 
@@ -873,7 +993,7 @@
 
         rv = pkcs11_get_slot_list_malloc(m, &slotids, &n_slotids);
         if (rv != CKR_OK) {
-                log_warning("Failed to get slot list, ignoring module: %s", p11_kit_strerror(rv));
+                log_warning("Failed to get slot list, ignoring module: %s", sym_p11_kit_strerror(rv));
                 return -EAGAIN;
         }
         if (n_slotids == 0)
@@ -899,10 +1019,14 @@
                 pkcs11_find_token_callback_t callback,
                 void *userdata) {
 
-        _cleanup_(p11_kit_modules_finalize_and_releasep) CK_FUNCTION_LIST **modules = NULL;
-        _cleanup_(p11_kit_uri_freep) P11KitUri *search_uri = NULL;
+        _cleanup_(sym_p11_kit_modules_finalize_and_releasep) CK_FUNCTION_LIST **modules = NULL;
+        _cleanup_(sym_p11_kit_uri_freep) P11KitUri *search_uri = NULL;
         int r;
 
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
         /* Execute the specified callback for each matching token found. If nothing is found returns
          * -EAGAIN. Logs about all errors, except for EAGAIN, which the caller has to log about. */
 
@@ -912,7 +1036,7 @@
                         return log_error_errno(r, "Failed to parse PKCS#11 URI '%s': %m", pkcs11_uri);
         }
 
-        modules = p11_kit_modules_load_and_initialize(0);
+        modules = sym_p11_kit_modules_load_and_initialize(0);
         if (!modules)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to initialize pkcs11 modules");
 
@@ -951,7 +1075,7 @@
                 void *userdata) {
 
         _cleanup_(erase_and_freep) char *pin_used = NULL;
-        struct pkcs11_acquire_certificate_callback_data *data = userdata;
+        struct pkcs11_acquire_certificate_callback_data *data = ASSERT_PTR(userdata);
         CK_OBJECT_HANDLE object;
         int r;
 
@@ -959,7 +1083,6 @@
         assert(slot_info);
         assert(token_info);
         assert(uri);
-        assert(data);
 
         /* Called for every token matching our URI */
 
@@ -1027,13 +1150,17 @@
                 void *userdata) {
 
         _cleanup_free_ char *token_uri_string = NULL, *token_label = NULL, *token_manufacturer_id = NULL, *token_model = NULL;
-        _cleanup_(p11_kit_uri_freep) P11KitUri *token_uri = NULL;
+        _cleanup_(sym_p11_kit_uri_freep) P11KitUri *token_uri = NULL;
         Table *t = userdata;
         int uri_result, r;
 
         assert(slot_info);
         assert(token_info);
 
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
         /* We only care about hardware devices here with a token inserted. Let's filter everything else
          * out. (Note that the user can explicitly specify non-hardware tokens if they like, but during
          * enumeration we'll filter those, since software tokens are typically the system certificate store
@@ -1057,9 +1184,9 @@
         if (!token_uri)
                 return log_oom();
 
-        uri_result = p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, &token_uri_string);
+        uri_result = sym_p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, &token_uri_string);
         if (uri_result != P11_KIT_URI_OK)
-                return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN), "Failed to format slot URI: %s", p11_kit_uri_message(uri_result));
+                return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN), "Failed to format slot URI: %s", sym_p11_kit_uri_message(uri_result));
 
         r = table_add_many(
                         t,
@@ -1113,13 +1240,17 @@
                 P11KitUri *uri,
                 void *userdata) {
 
-        _cleanup_(p11_kit_uri_freep) P11KitUri *token_uri = NULL;
+        _cleanup_(sym_p11_kit_uri_freep) P11KitUri *token_uri = NULL;
         char **t = userdata;
-        int uri_result;
+        int uri_result, r;
 
         assert(slot_info);
         assert(token_info);
 
+        r = dlopen_p11kit();
+        if (r < 0)
+                return r;
+
         if (!FLAGS_SET(token_info->flags, CKF_HW_SLOT|CKF_TOKEN_PRESENT))
                 return -EAGAIN;
 
@@ -1131,9 +1262,9 @@
         if (!token_uri)
                 return log_oom();
 
-        uri_result = p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, t);
+        uri_result = sym_p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, t);
         if (uri_result != P11_KIT_URI_OK)
-                return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN), "Failed to format slot URI: %s", p11_kit_uri_message(uri_result));
+                return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN), "Failed to format slot URI: %s", sym_p11_kit_uri_message(uri_result));
 
         return 0;
 }
@@ -1155,3 +1286,70 @@
                                "PKCS#11 tokens not supported on this build.");
 #endif
 }
+
+#if HAVE_P11KIT
+void pkcs11_crypt_device_callback_data_release(pkcs11_crypt_device_callback_data *data) {
+        erase_and_free(data->decrypted_key);
+
+        if (data->free_encrypted_key)
+                free(data->encrypted_key);
+}
+
+int pkcs11_crypt_device_callback(
+                CK_FUNCTION_LIST *m,
+                CK_SESSION_HANDLE session,
+                CK_SLOT_ID slot_id,
+                const CK_SLOT_INFO *slot_info,
+                const CK_TOKEN_INFO *token_info,
+                P11KitUri *uri,
+                void *userdata) {
+
+        pkcs11_crypt_device_callback_data *data = ASSERT_PTR(userdata);
+        CK_OBJECT_HANDLE object;
+        int r;
+
+        assert(m);
+        assert(slot_info);
+        assert(token_info);
+        assert(uri);
+
+        /* Called for every token matching our URI */
+
+        r = pkcs11_token_login(
+                        m,
+                        session,
+                        slot_id,
+                        token_info,
+                        data->friendly_name,
+                        "drive-harddisk",
+                        "pkcs11-pin",
+                        "cryptsetup.pkcs11-pin",
+                        data->until,
+                        data->headless,
+                        NULL);
+        if (r < 0)
+                return r;
+
+        /* We are likely called during early boot, where entropy is scarce. Mix some data from the PKCS#11
+         * token, if it supports that. It should be cheap, given that we already are talking to it anyway and
+         * shouldn't hurt. */
+        (void) pkcs11_token_acquire_rng(m, session);
+
+        r = pkcs11_token_find_private_key(m, session, uri, &object);
+        if (r < 0)
+                return r;
+
+        r = pkcs11_token_decrypt_data(
+                        m,
+                        session,
+                        object,
+                        data->encrypted_key,
+                        data->encrypted_key_size,
+                        &data->decrypted_key,
+                        &data->decrypted_key_size);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+#endif
diff --git a/src/shared/pkcs11-util.h b/src/shared/pkcs11-util.h
index f7f32d3..ac2ee08 100644
--- a/src/shared/pkcs11-util.h
+++ b/src/shared/pkcs11-util.h
@@ -15,14 +15,30 @@
 bool pkcs11_uri_valid(const char *uri);
 
 #if HAVE_P11KIT
+
+extern char *(*sym_p11_kit_module_get_name)(CK_FUNCTION_LIST *module);
+extern void (*sym_p11_kit_modules_finalize_and_release)(CK_FUNCTION_LIST **modules);
+extern CK_FUNCTION_LIST **(*sym_p11_kit_modules_load_and_initialize)(int flags);
+extern const char *(*sym_p11_kit_strerror)(CK_RV rv);
+extern int (*sym_p11_kit_uri_format)(P11KitUri *uri, P11KitUriType uri_type, char **string);
+extern void (*sym_p11_kit_uri_free)(P11KitUri *uri);
+extern CK_ATTRIBUTE_PTR (*sym_p11_kit_uri_get_attributes)(P11KitUri *uri, CK_ULONG *n_attrs);
+extern CK_INFO_PTR (*sym_p11_kit_uri_get_module_info)(P11KitUri *uri);
+extern CK_SLOT_INFO_PTR (*sym_p11_kit_uri_get_slot_info)(P11KitUri *uri);
+extern CK_TOKEN_INFO_PTR (*sym_p11_kit_uri_get_token_info)(P11KitUri *uri);
+extern int (*sym_p11_kit_uri_match_token_info)(const P11KitUri *uri, const CK_TOKEN_INFO *token_info);
+extern const char *(*sym_p11_kit_uri_message)(int code);
+extern P11KitUri *(*sym_p11_kit_uri_new)(void);
+extern int (*sym_p11_kit_uri_parse)(const char *string, P11KitUriType uri_type, P11KitUri *uri);
+
 int uri_from_string(const char *p, P11KitUri **ret);
 
 P11KitUri *uri_from_module_info(const CK_INFO *info);
 P11KitUri *uri_from_slot_info(const CK_SLOT_INFO *slot_info);
 P11KitUri *uri_from_token_info(const CK_TOKEN_INFO *token_info);
 
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(P11KitUri*, p11_kit_uri_free, NULL);
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(CK_FUNCTION_LIST**, p11_kit_modules_finalize_and_release, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(P11KitUri*, sym_p11_kit_uri_free, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(CK_FUNCTION_LIST**, sym_p11_kit_modules_finalize_and_release, NULL);
 
 CK_RV pkcs11_get_slot_list_malloc(CK_FUNCTION_LIST *m, CK_SLOT_ID **ret_slotids, CK_ULONG *ret_n_slotids);
 
@@ -30,6 +46,7 @@
 char *pkcs11_token_manufacturer_id(const CK_TOKEN_INFO *token_info);
 char *pkcs11_token_model(const CK_TOKEN_INFO *token_info);
 
+int pkcs11_token_login_by_pin(CK_FUNCTION_LIST *m, CK_SESSION_HANDLE session, const CK_TOKEN_INFO *token_info, const char *token_label, const void *pin, size_t pin_size);
 int pkcs11_token_login(CK_FUNCTION_LIST *m, CK_SESSION_HANDLE session, CK_SLOT_ID slotid, const CK_TOKEN_INFO *token_info, const char *friendly_name, const char *icon_name, const char *key_name, const char *credential_name, usec_t until, bool headless, char **ret_used_pin);
 
 int pkcs11_token_find_x509_certificate(CK_FUNCTION_LIST *m, CK_SESSION_HANDLE session, P11KitUri *search_uri, CK_OBJECT_HANDLE *ret_object);
@@ -49,7 +66,43 @@
 int pkcs11_acquire_certificate(const char *uri, const char *askpw_friendly_name, const char *askpw_icon_name, X509 **ret_cert, char **ret_pin_used);
 #endif
 
+typedef struct {
+        const char *friendly_name;
+        usec_t until;
+        void *encrypted_key;
+        size_t encrypted_key_size;
+        void *decrypted_key;
+        size_t decrypted_key_size;
+        bool free_encrypted_key;
+        bool headless;
+} pkcs11_crypt_device_callback_data;
+
+void pkcs11_crypt_device_callback_data_release(pkcs11_crypt_device_callback_data *data);
+
+int pkcs11_crypt_device_callback(
+                CK_FUNCTION_LIST *m,
+                CK_SESSION_HANDLE session,
+                CK_SLOT_ID slot_id,
+                const CK_SLOT_INFO *slot_info,
+                const CK_TOKEN_INFO *token_info,
+                P11KitUri *uri,
+                void *userdata);
+
+int dlopen_p11kit(void);
+
+#else
+
+static inline int dlopen_p11kit(void) {
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "p11kit support is not compiled in.");
+}
+
 #endif
 
+typedef struct {
+        const char *friendly_name;
+        usec_t until;
+        bool headless;
+} systemd_pkcs11_plugin_params;
+
 int pkcs11_list_tokens(void);
 int pkcs11_find_token_auto(char **ret);
diff --git a/src/shared/pretty-print.c b/src/shared/pretty-print.c
index 97baeda..90f258f 100644
--- a/src/shared/pretty-print.c
+++ b/src/shared/pretty-print.c
@@ -6,7 +6,7 @@
 
 #include "alloc-util.h"
 #include "conf-files.h"
-#include "def.h"
+#include "constants.h"
 #include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -16,9 +16,9 @@
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
-#include "util.h"
 
 bool urlify_enabled(void) {
+#if ENABLE_URLIFY
         static int cached_urlify_enabled = -1;
 
         if (cached_urlify_enabled < 0) {
@@ -32,6 +32,9 @@
         }
 
         return cached_urlify_enabled;
+#else
+        return 0;
+#endif
 }
 
 int terminal_urlify(const char *url, const char *text, char **ret) {
@@ -164,7 +167,6 @@
 }
 
 int cat_files(const char *file, char **dropins, CatFlags flags) {
-        char **path;
         int r;
 
         if (file) {
@@ -280,10 +282,9 @@
 int conf_files_cat(const char *root, const char *name) {
         _cleanup_strv_free_ char **dirs = NULL, **files = NULL;
         _cleanup_free_ char *path = NULL;
-        char **prefix, **prefixes = NULL; /* explicit initialization to appease gcc */
+        char **prefixes = NULL; /* explicit initialization to appease gcc */
         bool is_collection;
         const char *extension;
-        char **t;
         int r;
 
         r = guess_type(&name, &prefixes, &is_collection, &extension);
diff --git a/src/shared/pretty-print.h b/src/shared/pretty-print.h
index 4619f4e..45644da 100644
--- a/src/shared/pretty-print.h
+++ b/src/shared/pretty-print.h
@@ -1,6 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include "glyph-util.h"
+#include "terminal-util.h"
+
 void print_separator(void);
 
 int file_url_from_path(const char *path, char **ret);
@@ -17,3 +20,23 @@
 
 int cat_files(const char *file, char **dropins, CatFlags flags);
 int conf_files_cat(const char *root, const char *name);
+
+#define RED_CROSS_MARK_MAX (STRLEN(ANSI_HIGHLIGHT_RED) + STRLEN("✗") + STRLEN(ANSI_NORMAL) + 1)
+#define GREEN_CHECK_MARK_MAX (STRLEN(ANSI_HIGHLIGHT_GREEN) + STRLEN("✓") + STRLEN(ANSI_NORMAL) + 1)
+
+static inline const char *red_cross_mark_internal(char buffer[static RED_CROSS_MARK_MAX]) {
+        assert(buffer);
+        assert_se(stpcpy(stpcpy(stpcpy(buffer, ansi_highlight_red()), special_glyph(SPECIAL_GLYPH_CROSS_MARK)), ansi_normal()) < buffer + RED_CROSS_MARK_MAX);
+        return buffer;
+}
+
+static inline const char *green_check_mark_internal(char buffer[static GREEN_CHECK_MARK_MAX]) {
+        assert(buffer);
+        assert_se(stpcpy(stpcpy(stpcpy(buffer, ansi_highlight_green()), special_glyph(SPECIAL_GLYPH_CHECK_MARK)), ansi_normal()) < buffer + GREEN_CHECK_MARK_MAX);
+        return buffer;
+}
+
+#define RED_CROSS_MARK() red_cross_mark_internal((char[RED_CROSS_MARK_MAX]) {})
+#define GREEN_CHECK_MARK() green_check_mark_internal((char[GREEN_CHECK_MARK_MAX]) {})
+
+#define COLOR_MARK_BOOL(b) ((b) ? GREEN_CHECK_MARK() : RED_CROSS_MARK())
diff --git a/src/shared/psi-util.c b/src/shared/psi-util.c
index 009095e..af8e278 100644
--- a/src/shared/psi-util.c
+++ b/src/shared/psi-util.c
@@ -8,6 +8,7 @@
 #include "extract-word.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "missing_threads.h"
 #include "parse-util.h"
 #include "psi-util.h"
 #include "string-util.h"
@@ -106,20 +107,24 @@
 }
 
 int is_pressure_supported(void) {
-        const char *p;
+        static thread_local int cached = -1;
+        int r;
 
-        /* The pressure files, both under /proc and in cgroups, will exist
-         * even if the kernel has PSI support disabled; we have to read
-         * the file to make sure it doesn't return -EOPNOTSUPP */
+        /* The pressure files, both under /proc/ and in cgroups, will exist even if the kernel has PSI
+         * support disabled; we have to read the file to make sure it doesn't return -EOPNOTSUPP */
+
+        if (cached >= 0)
+                return cached;
+
         FOREACH_STRING(p, "/proc/pressure/cpu", "/proc/pressure/io", "/proc/pressure/memory") {
-                int r;
-
                 r = read_virtual_file(p, 0, NULL, NULL);
-                if (r == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
-                        return 0;
-                if (r < 0)
+                if (r < 0) {
+                        if (r == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
+                                return (cached = false);
+
                         return r;
+                }
         }
 
-        return 1;
+        return (cached = true);
 }
diff --git a/src/shared/ptyfwd.c b/src/shared/ptyfwd.c
index 4c309f9..195e603 100644
--- a/src/shared/ptyfwd.c
+++ b/src/shared/ptyfwd.c
@@ -338,9 +338,8 @@
 }
 
 static int on_master_event(sd_event_source *e, int fd, uint32_t revents, void *userdata) {
-        PTYForward *f = userdata;
+        PTYForward *f = ASSERT_PTR(userdata);
 
-        assert(f);
         assert(e);
         assert(e == f->master_event_source);
         assert(fd >= 0);
@@ -356,9 +355,8 @@
 }
 
 static int on_stdin_event(sd_event_source *e, int fd, uint32_t revents, void *userdata) {
-        PTYForward *f = userdata;
+        PTYForward *f = ASSERT_PTR(userdata);
 
-        assert(f);
         assert(e);
         assert(e == f->stdin_event_source);
         assert(fd >= 0);
@@ -371,9 +369,8 @@
 }
 
 static int on_stdout_event(sd_event_source *e, int fd, uint32_t revents, void *userdata) {
-        PTYForward *f = userdata;
+        PTYForward *f = ASSERT_PTR(userdata);
 
-        assert(f);
         assert(e);
         assert(e == f->stdout_event_source);
         assert(fd >= 0);
@@ -386,10 +383,9 @@
 }
 
 static int on_sigwinch_event(sd_event_source *e, const struct signalfd_siginfo *si, void *userdata) {
-        PTYForward *f = userdata;
+        PTYForward *f = ASSERT_PTR(userdata);
         struct winsize ws;
 
-        assert(f);
         assert(e);
         assert(e == f->sigwinch_event_source);
 
@@ -416,9 +412,9 @@
 
         *f = (struct PTYForward) {
                 .flags = flags,
-                .master = -1,
-                .input_fd = -1,
-                .output_fd = -1,
+                .master = -EBADF,
+                .input_fd = -EBADF,
+                .output_fd = -EBADF,
         };
 
         if (event)
diff --git a/src/shared/qrcode-util.c b/src/shared/qrcode-util.c
index db48c73..4a33c28 100644
--- a/src/shared/qrcode-util.c
+++ b/src/shared/qrcode-util.c
@@ -8,9 +8,13 @@
 #include "dlfcn-util.h"
 #include "locale-util.h"
 #include "log.h"
+#include "strv.h"
 #include "terminal-util.h"
 
 #define ANSI_WHITE_ON_BLACK "\033[40;37;1m"
+#define UNICODE_FULL_BLOCK       u8"█"
+#define UNICODE_LOWER_HALF_BLOCK u8"▄"
+#define UNICODE_UPPER_HALF_BLOCK u8"▀"
 
 static void *qrcode_dl = NULL;
 
@@ -18,10 +22,18 @@
 static void (*sym_QRcode_free)(QRcode *qrcode) = NULL;
 
 int dlopen_qrencode(void) {
-        return dlopen_many_sym_or_warn(
-                        &qrcode_dl, "libqrencode.so.4", LOG_DEBUG,
+        int r;
+
+        FOREACH_STRING(s, "libqrencode.so.4", "libqrencode.so.3") {
+                r = dlopen_many_sym_or_warn(
+                        &qrcode_dl, s, LOG_DEBUG,
                         DLSYM_ARG(QRcode_encodeString),
                         DLSYM_ARG(QRcode_free));
+                if (r >= 0)
+                        break;
+        }
+
+        return r;
 }
 
 static void print_border(FILE *output, unsigned width) {
@@ -30,7 +42,7 @@
                 fputs(ANSI_WHITE_ON_BLACK, output);
 
                 for (unsigned x = 0; x < 4 + width + 4; x++)
-                        fputs("\342\226\210", output);
+                        fputs(UNICODE_FULL_BLOCK, output);
 
                 fputs(ANSI_NORMAL "\n", output);
         }
@@ -50,7 +62,7 @@
 
                 fputs(ANSI_WHITE_ON_BLACK, output);
                 for (unsigned x = 0; x < 4; x++)
-                        fputs("\342\226\210", output);
+                        fputs(UNICODE_FULL_BLOCK, output);
 
                 for (unsigned x = 0; x < (unsigned) qr->width; x++) {
                         bool a, b;
@@ -61,15 +73,15 @@
                         if (a && b)
                                 fputc(' ', output);
                         else if (a)
-                                fputs("\342\226\204", output);
+                                fputs(UNICODE_LOWER_HALF_BLOCK, output);
                         else if (b)
-                                fputs("\342\226\200", output);
+                                fputs(UNICODE_UPPER_HALF_BLOCK, output);
                         else
-                                fputs("\342\226\210", output);
+                                fputs(UNICODE_FULL_BLOCK, output);
                 }
 
                 for (unsigned x = 0; x < 4; x++)
-                        fputs("\342\226\210", output);
+                        fputs(UNICODE_FULL_BLOCK, output);
                 fputs(ANSI_NORMAL "\n", output);
         }
 
diff --git a/src/shared/quota-util.c b/src/shared/quota-util.c
index fbf8ee5..4d014f8 100644
--- a/src/shared/quota-util.c
+++ b/src/shared/quota-util.c
@@ -1,20 +1,21 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <sys/quota.h>
+#include <sys/stat.h>
 
 #include "alloc-util.h"
 #include "blockdev-util.h"
+#include "device-util.h"
 #include "quota-util.h"
-#include "stat-util.h"
 
-int quotactl_devno(int cmd, dev_t devno, int id, void *addr) {
+int quotactl_devnum(int cmd, dev_t devnum, int id, void *addr) {
         _cleanup_free_ char *devnode = NULL;
         int r;
 
         /* Like quotactl() but takes a dev_t instead of a path to a device node, and fixes caddr_t → void*,
          * like we should, today */
 
-        r = device_path_make_major_minor(S_IFBLK, devno, &devnode);
+        r = devname_from_devnum(S_IFBLK, devnum, &devnode);
         if (r < 0)
                 return r;
 
@@ -37,5 +38,5 @@
         if (devno == 0) /* Doesn't have a block device */
                 return -ENODEV;
 
-        return quotactl_devno(cmd, devno, id, addr);
+        return quotactl_devnum(cmd, devno, id, addr);
 }
diff --git a/src/shared/quota-util.h b/src/shared/quota-util.h
index a61bdcb..fc39522 100644
--- a/src/shared/quota-util.h
+++ b/src/shared/quota-util.h
@@ -15,5 +15,5 @@
         return (int) QCMD(cmd, type);
 }
 
-int quotactl_devno(int cmd, dev_t devno, int id, void *addr);
+int quotactl_devnum(int cmd, dev_t devnum, int id, void *addr);
 int quotactl_path(int cmd, const char *path, int id, void *addr);
diff --git a/src/shared/reboot-util.c b/src/shared/reboot-util.c
index 756f9d3..a010bf6 100644
--- a/src/shared/reboot-util.c
+++ b/src/shared/reboot-util.c
@@ -1,9 +1,21 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
+#include <stdint.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
 #include <unistd.h>
 
+#if HAVE_XENCTRL
+#define __XEN_INTERFACE_VERSION__ 0x00040900
+#include <xen/xen.h>
+#include <xen/kexec.h>
+#include <xen/sys/privcmd.h>
+#endif
+
 #include "alloc-util.h"
+#include "errno-util.h"
+#include "fd-util.h"
 #include "fileio.h"
 #include "log.h"
 #include "proc-cmdline.h"
@@ -30,7 +42,7 @@
                 return 0;
         }
 
-        RUN_WITH_UMASK(0022) {
+        WITH_UMASK(0022) {
                 r = write_string_file("/run/systemd/reboot-param", parameter,
                                       WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC);
                 if (r < 0)
@@ -107,3 +119,74 @@
 
         return r > 0 ? ret : true;
 }
+
+static int xen_kexec_loaded(void) {
+#if HAVE_XENCTRL
+        _cleanup_close_ int privcmd_fd = -EBADF, buf_fd = -EBADF;
+        xen_kexec_status_t *buffer;
+        size_t size;
+        int r;
+
+        if (access("/proc/xen", F_OK) < 0) {
+                if (errno == ENOENT)
+                        return -EOPNOTSUPP;
+                return log_debug_errno(errno, "Unable to test whether /proc/xen exists: %m");
+        }
+
+        size = page_size();
+        if (sizeof(xen_kexec_status_t) > size)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "page_size is too small for hypercall");
+
+        privcmd_fd = open("/dev/xen/privcmd", O_RDWR|O_CLOEXEC);
+        if (privcmd_fd < 0)
+                return log_debug_errno(errno, "Cannot access /dev/xen/privcmd: %m");
+
+        buf_fd = open("/dev/xen/hypercall", O_RDWR|O_CLOEXEC);
+        if (buf_fd < 0)
+                return log_debug_errno(errno, "Cannot access /dev/xen/hypercall: %m");
+
+        buffer = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, buf_fd, 0);
+        if (buffer == MAP_FAILED)
+                return log_debug_errno(errno, "Cannot allocate buffer for hypercall: %m");
+
+        *buffer = (xen_kexec_status_t) {
+                .type = KEXEC_TYPE_DEFAULT,
+        };
+
+        privcmd_hypercall_t call = {
+                .op = __HYPERVISOR_kexec_op,
+                .arg = {
+                        KEXEC_CMD_kexec_status,
+                        PTR_TO_UINT64(buffer),
+                },
+        };
+
+        r = RET_NERRNO(ioctl(privcmd_fd, IOCTL_PRIVCMD_HYPERCALL, &call));
+        if (r < 0)
+                log_debug_errno(r, "kexec_status failed: %m");
+
+        munmap(buffer, size);
+
+        return r;
+#else
+        return -EOPNOTSUPP;
+#endif
+}
+
+bool kexec_loaded(void) {
+       _cleanup_free_ char *s = NULL;
+       int r;
+
+       r = xen_kexec_loaded();
+       if (r >= 0)
+               return r;
+
+       r = read_one_line_file("/sys/kernel/kexec_loaded", &s);
+       if (r < 0) {
+               if (r != -ENOENT)
+                       log_debug_errno(r, "Unable to read /sys/kernel/kexec_loaded, ignoring: %m");
+               return false;
+       }
+
+       return s[0] == '1';
+}
diff --git a/src/shared/reboot-util.h b/src/shared/reboot-util.h
index bbca8b8..9e63662 100644
--- a/src/shared/reboot-util.h
+++ b/src/shared/reboot-util.h
@@ -13,3 +13,5 @@
 int reboot_with_parameter(RebootFlags flags);
 
 int shall_restore_state(void);
+
+bool kexec_loaded(void);
diff --git a/src/shared/recovery-key.c b/src/shared/recovery-key.c
new file mode 100644
index 0000000..6a2f4d0
--- /dev/null
+++ b/src/shared/recovery-key.c
@@ -0,0 +1,109 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "memory-util.h"
+#include "random-util.h"
+#include "recovery-key.h"
+
+const char modhex_alphabet[16] = {
+        'c', 'b', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'n', 'r', 't', 'u', 'v'
+};
+
+int decode_modhex_char(char x) {
+
+        for (size_t i = 0; i < ELEMENTSOF(modhex_alphabet); i++)
+                /* Check both upper and lowercase */
+                if (modhex_alphabet[i] == x || (modhex_alphabet[i] - 32) == x)
+                        return i;
+
+        return -EINVAL;
+}
+
+int normalize_recovery_key(const char *password, char **ret) {
+        _cleanup_(erase_and_freep) char *mangled = NULL;
+        size_t l;
+
+        assert(password);
+        assert(ret);
+
+        l = strlen(password);
+        if (!IN_SET(l,
+                    RECOVERY_KEY_MODHEX_RAW_LENGTH*2,          /* syntax without dashes */
+                    RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1))   /* syntax with dashes */
+                return -EINVAL;
+
+        mangled = new(char, RECOVERY_KEY_MODHEX_FORMATTED_LENGTH);
+        if (!mangled)
+                return -ENOMEM;
+
+        for (size_t i = 0, j = 0; i < RECOVERY_KEY_MODHEX_RAW_LENGTH; i++) {
+                size_t k;
+                int a, b;
+
+                if (l == RECOVERY_KEY_MODHEX_RAW_LENGTH*2)
+                        /* Syntax without dashes */
+                        k = i * 2;
+                else {
+                        /* Syntax with dashes */
+                        assert(l == RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1);
+                        k = i * 2 + i / 4;
+
+                        if (i > 0 && i % 4 == 0 && password[k-1] != '-')
+                                return -EINVAL;
+                }
+
+                a = decode_modhex_char(password[k]);
+                if (a < 0)
+                        return -EINVAL;
+                b = decode_modhex_char(password[k+1]);
+                if (b < 0)
+                        return -EINVAL;
+
+                mangled[j++] = modhex_alphabet[a];
+                mangled[j++] = modhex_alphabet[b];
+
+                if (i % 4 == 3)
+                        mangled[j++] = '-';
+        }
+
+        mangled[RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1] = 0;
+
+        *ret = TAKE_PTR(mangled);
+        return 0;
+}
+
+int make_recovery_key(char **ret) {
+        _cleanup_(erase_and_freep) char *formatted = NULL;
+        _cleanup_(erase_and_freep) uint8_t *key = NULL;
+        size_t j = 0;
+        int r;
+
+        assert(ret);
+
+        key = new(uint8_t, RECOVERY_KEY_MODHEX_RAW_LENGTH);
+        if (!key)
+                return -ENOMEM;
+
+        r = crypto_random_bytes(key, RECOVERY_KEY_MODHEX_RAW_LENGTH);
+        if (r < 0)
+                return r;
+
+        /* Let's now format it as 64 modhex chars, and after each 8 chars insert a dash */
+        formatted = new(char, RECOVERY_KEY_MODHEX_FORMATTED_LENGTH);
+        if (!formatted)
+                return -ENOMEM;
+
+        for (size_t i = 0; i < RECOVERY_KEY_MODHEX_RAW_LENGTH; i++) {
+                formatted[j++] = modhex_alphabet[key[i] >> 4];
+                formatted[j++] = modhex_alphabet[key[i] & 0xF];
+
+                if (i % 4 == 3)
+                        formatted[j++] = '-';
+        }
+
+        assert(j == RECOVERY_KEY_MODHEX_FORMATTED_LENGTH);
+        assert(formatted[RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1] == '-');
+        formatted[RECOVERY_KEY_MODHEX_FORMATTED_LENGTH-1] = 0; /* replace final dash with a NUL */
+
+        *ret = TAKE_PTR(formatted);
+        return 0;
+}
diff --git a/src/basic/recovery-key.h b/src/shared/recovery-key.h
similarity index 100%
rename from src/basic/recovery-key.h
rename to src/shared/recovery-key.h
diff --git a/src/shared/resize-fs.c b/src/shared/resize-fs.c
index 33cb78b..178aefa 100644
--- a/src/shared/resize-fs.c
+++ b/src/shared/resize-fs.c
@@ -119,3 +119,8 @@
 
         return UINT64_MAX;
 }
+
+/* Returns true for the only fs that can online shrink *and* grow */
+bool fs_can_online_shrink_and_grow(statfs_f_type_t magic) {
+        return magic == (statfs_f_type_t) BTRFS_SUPER_MAGIC;
+}
diff --git a/src/shared/resize-fs.h b/src/shared/resize-fs.h
index 8831fd8..ac185d1 100644
--- a/src/shared/resize-fs.h
+++ b/src/shared/resize-fs.h
@@ -8,8 +8,10 @@
 int resize_fs(int fd, uint64_t sz, uint64_t *ret_size);
 
 #define BTRFS_MINIMAL_SIZE (256U*1024U*1024U)
-#define XFS_MINIMAL_SIZE (14U*1024U*1024U)
+#define XFS_MINIMAL_SIZE (16U*1024U*1024U)
 #define EXT4_MINIMAL_SIZE (1024U*1024U)
 
 uint64_t minimal_size_by_fs_magic(statfs_f_type_t magic);
 uint64_t minimal_size_by_fs_name(const char *str);
+
+bool fs_can_online_shrink_and_grow(statfs_f_type_t magic);
diff --git a/src/shared/resolve-util.c b/src/shared/resolve-util.c
index 6541d23..820f9bb 100644
--- a/src/shared/resolve-util.c
+++ b/src/shared/resolve-util.c
@@ -31,12 +31,12 @@
 
 bool dns_server_address_valid(int family, const union in_addr_union *sa) {
 
-        /* Refuses the 0 IP addresses as well as 127.0.0.53 (which is our own DNS stub) */
+        /* Refuses the 0 IP addresses as well as 127.0.0.53/127.0.0.54 (which is our own DNS stub) */
 
         if (!in_addr_is_set(family, sa))
                 return false;
 
-        if (family == AF_INET && sa->in.s_addr == htobe32(INADDR_DNS_STUB))
+        if (family == AF_INET && IN_SET(be32toh(sa->in.s_addr), INADDR_DNS_STUB, INADDR_DNS_PROXY_STUB))
                 return false;
 
         return true;
diff --git a/src/shared/resolve-util.h b/src/shared/resolve-util.h
index c4d9275..7c9008c 100644
--- a/src/shared/resolve-util.h
+++ b/src/shared/resolve-util.h
@@ -5,9 +5,15 @@
 #include "in-addr-util.h"
 #include "macro.h"
 
-/* 127.0.0.53 in native endian */
+/* 127.0.0.53 in native endian (The IP address we listen on with the full DNS stub, i.e. that does LLMNR/mDNS, and stuff) */
 #define INADDR_DNS_STUB ((in_addr_t) 0x7f000035U)
 
+/* 127.0.0.54 in native endian (The IP address we listen on we only implement "proxy" mode) */
+#define INADDR_DNS_PROXY_STUB ((in_addr_t) 0x7f000036U)
+
+/* 127.0.0.2 is an address we always map to the local hostname. This is different from 127.0.0.1 which maps to "localhost" */
+#define INADDR_LOCALADDRESS ((in_addr_t) 0x7f000002U)
+
 typedef enum DnsCacheMode DnsCacheMode;
 
 enum DnsCacheMode {
@@ -22,10 +28,11 @@
 typedef enum DnssecMode DnssecMode;
 typedef enum DnsOverTlsMode DnsOverTlsMode;
 
+/* Do not change the order, see link_get_llmnr_support() or link_get_mdns_support(). */
 enum ResolveSupport {
         RESOLVE_SUPPORT_NO,
-        RESOLVE_SUPPORT_YES,
         RESOLVE_SUPPORT_RESOLVE,
+        RESOLVE_SUPPORT_YES,
         _RESOLVE_SUPPORT_MAX,
         _RESOLVE_SUPPORT_INVALID = -EINVAL,
 };
diff --git a/src/shared/rm-rf.c b/src/shared/rm-rf.c
index 954686f..6cc4265 100644
--- a/src/shared/rm-rf.c
+++ b/src/shared/rm-rf.c
@@ -19,9 +19,9 @@
 #include "stat-util.h"
 #include "string-util.h"
 
-/* We treat tmpfs/ramfs + cgroupfs as non-physical file sytems. cgroupfs is similar to tmpfs in a way after
- * all: we can create arbitrary directory hierarchies in it, and hence can also use rm_rf() on it to remove
- * those again. */
+/* We treat tmpfs/ramfs + cgroupfs as non-physical file systems. cgroupfs is similar to tmpfs in a way
+ * after all: we can create arbitrary directory hierarchies in it, and hence can also use rm_rf() on it
+ * to remove those again. */
 static bool is_physical_fs(const struct statfs *sfs) {
         return !is_temporary_fs(sfs) && !is_cgroup_fs(sfs);
 }
@@ -268,7 +268,6 @@
                         }
                 }
 
-                struct dirent *de;
                 FOREACH_DIRENT_ALL(de, d, return -errno) {
                         int is_dir;
 
@@ -351,8 +350,8 @@
                 /* We have a dir */
                 r = rm_rf_children(fd, flags, NULL);
 
-                if (FLAGS_SET(flags, REMOVE_ROOT) && rmdir(path) < 0)
-                        q = -errno;
+                if (FLAGS_SET(flags, REMOVE_ROOT))
+                        q = RET_NERRNO(rmdir(path));
         } else {
                 if (FLAGS_SET(flags, REMOVE_MISSING_OK) && errno == ENOENT)
                         return 0;
@@ -375,8 +374,7 @@
                 }
 
                 r = 0;
-                if (unlink(path) < 0)
-                        q = -errno;
+                q = RET_NERRNO(unlink(path));
         }
 
         if (r < 0)
diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c
index 7e1b4e9..ee545bd 100644
--- a/src/shared/seccomp-util.c
+++ b/src/shared/seccomp-util.c
@@ -3,18 +3,22 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <linux/seccomp.h>
-#include <seccomp.h>
 #include <stddef.h>
 #include <sys/mman.h>
 #include <sys/prctl.h>
 #include <sys/shm.h>
 #include <sys/stat.h>
 
+/* include missing_syscall_def.h earlier to make __SNR_foo mapped to __NR_foo. */
+#include "missing_syscall_def.h"
+#include <seccomp.h>
+
 #include "af-list.h"
 #include "alloc-util.h"
 #include "env-util.h"
 #include "errno-list.h"
 #include "macro.h"
+#include "namespace-util.h"
 #include "nsflags.h"
 #include "nulstr-util.h"
 #include "process-util.h"
@@ -77,6 +81,11 @@
                 SCMP_ARCH_MIPSEL64,
                 SCMP_ARCH_MIPS64N32,
                 SCMP_ARCH_MIPSEL64N32, /* native */
+#elif defined(__hppa64__) && defined(SCMP_ARCH_PARISC) && defined(SCMP_ARCH_PARISC64)
+                SCMP_ARCH_PARISC,
+                SCMP_ARCH_PARISC64,    /* native */
+#elif defined(__hppa__) && defined(SCMP_ARCH_PARISC)
+                SCMP_ARCH_PARISC,
 #elif defined(__powerpc64__) && __BYTE_ORDER == __BIG_ENDIAN
                 SCMP_ARCH_PPC,
                 SCMP_ARCH_PPC64LE,
@@ -104,7 +113,7 @@
          * Names used here should be the same as those used for ConditionArchitecture=,
          * except for "subarchitectures" like x32. */
 
-        switch(c) {
+        switch (c) {
         case SCMP_ARCH_NATIVE:
                 return "native";
         case SCMP_ARCH_X86:
@@ -129,6 +138,14 @@
                 return "mips64-le";
         case SCMP_ARCH_MIPSEL64N32:
                 return "mips64-le-n32";
+#ifdef SCMP_ARCH_PARISC
+        case SCMP_ARCH_PARISC:
+                return "parisc";
+#endif
+#ifdef SCMP_ARCH_PARISC64
+        case SCMP_ARCH_PARISC64:
+                return "parisc64";
+#endif
         case SCMP_ARCH_PPC:
                 return "ppc";
         case SCMP_ARCH_PPC64:
@@ -178,6 +195,14 @@
                 *ret = SCMP_ARCH_MIPSEL64;
         else if (streq(n, "mips64-le-n32"))
                 *ret = SCMP_ARCH_MIPSEL64N32;
+#ifdef SCMP_ARCH_PARISC
+        else if (streq(n, "parisc"))
+                *ret = SCMP_ARCH_PARISC;
+#endif
+#ifdef SCMP_ARCH_PARISC64
+        else if (streq(n, "parisc64"))
+                *ret = SCMP_ARCH_PARISC64;
+#endif
         else if (streq(n, "ppc"))
                 *ret = SCMP_ARCH_PPC;
         else if (streq(n, "ppc64"))
@@ -297,6 +322,7 @@
                 "exit_group\0"
                 "futex\0"
                 "futex_time64\0"
+                "futex_waitv\0"
                 "get_robust_list\0"
                 "get_thread_area\0"
                 "getegid\0"
@@ -331,6 +357,7 @@
                 "pause\0"
                 "prlimit64\0"
                 "restart_syscall\0"
+                "riscv_flush_icache\0"
                 "rseq\0"
                 "rt_sigreturn\0"
                 "sched_getaffinity\0"
@@ -422,9 +449,7 @@
                 "pidfd_getfd\0"
                 "ptrace\0"
                 "rtas\0"
-#if defined __s390__ || defined __s390x__
                 "s390_runtime_instr\0"
-#endif
                 "sys_debug_setcontext\0"
         },
         [SYSCALL_FILTER_SET_FILE_SYSTEM] = {
@@ -695,6 +720,7 @@
                 "open_by_handle_at\0"
                 "pivot_root\0"
                 "quotactl\0"
+                "quotactl_fd\0"
                 "setdomainname\0"
                 "setfsuid\0"
                 "setfsuid32\0"
@@ -715,6 +741,9 @@
                 .value =
                 "capget\0"      /* Able to query arbitrary processes */
                 "clone\0"
+                /* ia64 as the only architecture has clone2, a replacement for clone, but ia64 doesn't
+                 * implement seccomp, so we don't need to list it at all. C.f.
+                 * acce2f71779c54086962fefce3833d886c655f62 in the kernel. */
                 "clone3\0"
                 "execveat\0"
                 "fork\0"
@@ -745,10 +774,8 @@
                 "pciconfig_iobase\0"
                 "pciconfig_read\0"
                 "pciconfig_write\0"
-#if defined __s390__ || defined __s390x__
                 "s390_pci_mmio_read\0"
                 "s390_pci_mmio_write\0"
-#endif
         },
         [SYSCALL_FILTER_SET_REBOOT] = {
                 .name = "@reboot",
@@ -772,6 +799,7 @@
                 "sched_setparam\0"
                 "sched_setscheduler\0"
                 "set_mempolicy\0"
+                "set_mempolicy_home_node\0"
                 "setpriority\0"
                 "setrlimit\0"
         },
@@ -922,6 +950,7 @@
                 .name = "@known",
                 .help = "All known syscalls declared in the kernel",
                 .value =
+                "@obsolete\0"
 #include "syscall-list.h"
         },
 };
@@ -1013,7 +1042,6 @@
                 bool log_missing,
                 char ***added) {
 
-        const char *sys;
         int r;
 
         /* Any syscalls that are handled are added to the *added strv. It needs to be initialized. */
@@ -1117,7 +1145,7 @@
                 if (ERRNO_IS_SECCOMP_FATAL(r))
                         return r;
                 if (r < 0)
-                        log_debug_errno(r, "Failed to install systemc call filter for architecture %s, skipping: %m",
+                        log_debug_errno(r, "Failed to install system call filter for architecture %s, skipping: %m",
                                         seccomp_arch_to_string(arch));
         }
 
@@ -1143,7 +1171,6 @@
 
         if (name[0] == '@') {
                 const SyscallFilterSet *set;
-                const char *i;
 
                 set = syscall_filter_set_find(name);
                 if (!set) {
@@ -1261,16 +1288,16 @@
                         continue;
                 }
 
-                for (unsigned i = 0; namespace_flag_map[i].name; i++) {
+                for (unsigned i = 0; namespace_info[i].proc_name; i++) {
                         unsigned long f;
 
-                        f = namespace_flag_map[i].flag;
+                        f = namespace_info[i].clone_flag;
                         if (FLAGS_SET(retain, f)) {
-                                log_debug("Permitting %s.", namespace_flag_map[i].name);
+                                log_debug("Permitting %s.", namespace_info[i].proc_name);
                                 continue;
                         }
 
-                        log_debug("Blocking %s.", namespace_flag_map[i].name);
+                        log_debug("Blocking %s.", namespace_info[i].proc_name);
 
                         r = seccomp_rule_add_exact(
                                         seccomp,
@@ -1436,6 +1463,12 @@
                 case SCMP_ARCH_X86:
                 case SCMP_ARCH_MIPSEL:
                 case SCMP_ARCH_MIPS:
+#ifdef SCMP_ARCH_PARISC
+                case SCMP_ARCH_PARISC:
+#endif
+#ifdef SCMP_ARCH_PARISC64
+                case SCMP_ARCH_PARISC64:
+#endif
                 case SCMP_ARCH_PPC:
                 case SCMP_ARCH_PPC64:
                 case SCMP_ARCH_PPC64LE:
@@ -1568,7 +1601,7 @@
         return 0;
 }
 
-int seccomp_restrict_realtime(void) {
+int seccomp_restrict_realtime_full(int error_code) {
         static const int permitted_policies[] = {
                 SCHED_OTHER,
                 SCHED_BATCH,
@@ -1579,6 +1612,8 @@
         uint32_t arch;
         unsigned i;
 
+        assert(error_code > 0);
+
         /* Determine the highest policy constant we want to allow */
         for (i = 0; i < ELEMENTSOF(permitted_policies); i++)
                 if (permitted_policies[i] > max_policy)
@@ -1612,7 +1647,7 @@
                         /* Deny this policy */
                         r = seccomp_rule_add_exact(
                                         seccomp,
-                                        SCMP_ACT_ERRNO(EPERM),
+                                        SCMP_ACT_ERRNO(error_code),
                                         SCMP_SYS(sched_setscheduler),
                                         1,
                                         SCMP_A1(SCMP_CMP_EQ, p));
@@ -1626,7 +1661,7 @@
                  * are unsigned here, hence no need no check for < 0 values. */
                 r = seccomp_rule_add_exact(
                                 seccomp,
-                                SCMP_ACT_ERRNO(EPERM),
+                                SCMP_ACT_ERRNO(error_code),
                                 SCMP_SYS(sched_setscheduler),
                                 1,
                                 SCMP_A1(SCMP_CMP_GT, max_policy));
@@ -1686,7 +1721,11 @@
 
                 /* Note that on some architectures shmat() isn't available, and the call is multiplexed through ipc().
                  * We ignore that here, which means there's still a way to get writable/executable
-                 * memory, if an IPC key is mapped like this. That's a pity, but no total loss. */
+                 * memory, if an IPC key is mapped like this. That's a pity, but no total loss.
+                 *
+                 * Also, PARISC isn't here right now because it still needs executable memory, but work is in progress
+                 * on that front (kernel work done in 5.18).
+                 */
 
                 case SCMP_ARCH_X86:
                 case SCMP_ARCH_S390:
@@ -1720,7 +1759,7 @@
 
                 /* Please add more definitions here, if you port systemd to other architectures! */
 
-#if !defined(__i386__) && !defined(__x86_64__) && !defined(__powerpc__) && !defined(__powerpc64__) && !defined(__arm__) && !defined(__aarch64__) && !defined(__s390__) && !defined(__s390x__) && !(defined(__riscv) && __riscv_xlen == 64)
+#if !defined(__i386__) && !defined(__x86_64__) && !defined(__hppa__) && !defined(__hppa64__) && !defined(__powerpc__) && !defined(__powerpc64__) && !defined(__arm__) && !defined(__aarch64__) && !defined(__s390__) && !defined(__s390x__) && !(defined(__riscv) && __riscv_xlen == 64)
 #warning "Consider adding the right mmap() syscall definitions here!"
 #endif
                 }
@@ -1751,13 +1790,11 @@
                 if (r < 0)
                         continue;
 
-#ifdef __NR_pkey_mprotect
                 r = add_seccomp_syscall_filter(seccomp, arch, SCMP_SYS(pkey_mprotect),
                                                1,
                                                SCMP_A2(SCMP_CMP_MASKED_EQ, PROT_EXEC, PROT_EXEC));
                 if (r < 0)
                         continue;
-#endif
 
                 if (shmat_syscall > 0) {
                         r = add_seccomp_syscall_filter(seccomp, arch, shmat_syscall,
@@ -1851,7 +1888,6 @@
 
 int parse_syscall_archs(char **l, Set **ret_archs) {
         _cleanup_set_free_ Set *archs = NULL;
-        char **s;
         int r;
 
         assert(l);
@@ -1874,7 +1910,6 @@
 }
 
 int seccomp_filter_set_add(Hashmap *filter, bool add, const SyscallFilterSet *set) {
-        const char *i;
         int r;
 
         assert(set);
@@ -2078,7 +2113,6 @@
         else
                 any = true;
 
-#if SCMP_SYS(open) > 0
         r = seccomp_rule_add_exact(
                         seccomp,
                         SCMP_ACT_ERRNO(EPERM),
@@ -2090,7 +2124,6 @@
                 log_debug_errno(r, "Failed to add filter for open: %m");
         else
                 any = true;
-#endif
 
         r = seccomp_rule_add_exact(
                         seccomp,
@@ -2220,3 +2253,95 @@
 
         return 0;
 }
+
+static int block_open_flag(scmp_filter_ctx seccomp, int flag) {
+        bool any = false;
+        int r;
+
+        /* Blocks open() with the specified flag, where flag is O_SYNC or so. This makes these calls return
+         * EINVAL, in the hope the client code will retry without O_SYNC then.  */
+
+        r = seccomp_rule_add_exact(
+                        seccomp,
+                        SCMP_ACT_ERRNO(EINVAL),
+                        SCMP_SYS(open),
+                        1,
+                        SCMP_A1(SCMP_CMP_MASKED_EQ, flag, flag));
+        if (r < 0)
+                log_debug_errno(r, "Failed to add filter for open: %m");
+        else
+                any = true;
+
+        r = seccomp_rule_add_exact(
+                        seccomp,
+                        SCMP_ACT_ERRNO(EINVAL),
+                        SCMP_SYS(openat),
+                        1,
+                        SCMP_A2(SCMP_CMP_MASKED_EQ, flag, flag));
+        if (r < 0)
+                log_debug_errno(r, "Failed to add filter for openat: %m");
+        else
+                any = true;
+
+#if defined(__SNR_openat2)
+        /* The new openat2() system call can't be filtered sensibly, see above. */
+        r = seccomp_rule_add_exact(
+                        seccomp,
+                        SCMP_ACT_ERRNO(ENOSYS),
+                        SCMP_SYS(openat2),
+                        0);
+        if (r < 0)
+                log_debug_errno(r, "Failed to add filter for openat2: %m");
+        else
+                any = true;
+#endif
+
+        return any ? 0 : r;
+}
+
+int seccomp_suppress_sync(void) {
+        uint32_t arch;
+        int r;
+
+        /* This is mostly identical to SystemCallFilter=~@sync:0, but simpler to use, and separately
+         * manageable, and also masks O_SYNC/O_DSYNC */
+
+        SECCOMP_FOREACH_LOCAL_ARCH(arch) {
+                _cleanup_(seccomp_releasep) scmp_filter_ctx seccomp = NULL;
+
+                r = seccomp_init_for_arch(&seccomp, arch, SCMP_ACT_ALLOW);
+                if (r < 0)
+                        return r;
+
+                NULSTR_FOREACH(c, syscall_filter_sets[SYSCALL_FILTER_SET_SYNC].value) {
+                        int id;
+
+                        id = seccomp_syscall_resolve_name(c);
+                        if (id == __NR_SCMP_ERROR) {
+                                log_debug("System call %s is not known, ignoring.", c);
+                                continue;
+                        }
+
+                        r = seccomp_rule_add_exact(
+                                        seccomp,
+                                        SCMP_ACT_ERRNO(0), /* success → we want this to be a NOP after all */
+                                        id,
+                                        0);
+                        if (r < 0)
+                                log_debug_errno(r, "Failed to add filter for system call %s, ignoring: %m", c);
+                }
+
+                (void) block_open_flag(seccomp, O_SYNC);
+#if O_DSYNC != O_SYNC
+                (void) block_open_flag(seccomp, O_DSYNC);
+#endif
+
+                r = seccomp_load(seccomp);
+                if (ERRNO_IS_SECCOMP_FATAL(r))
+                        return r;
+                if (r < 0)
+                        log_debug_errno(r, "Failed to apply sync() suppression for architecture %s, skipping: %m", seccomp_arch_to_string(arch));
+        }
+
+        return 0;
+}
diff --git a/src/shared/seccomp-util.h b/src/shared/seccomp-util.h
index b3d25c9..3f1a993 100644
--- a/src/shared/seccomp-util.h
+++ b/src/shared/seccomp-util.h
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#if HAVE_SECCOMP
+
 #include <seccomp.h>
 #include <stdbool.h>
 #include <stdint.h>
@@ -94,7 +96,10 @@
 int seccomp_protect_sysctl(void);
 int seccomp_protect_syslog(void);
 int seccomp_restrict_address_families(Set *address_families, bool allow_list);
-int seccomp_restrict_realtime(void);
+int seccomp_restrict_realtime_full(int error_code); /* This is mostly for testing code. */
+static inline int seccomp_restrict_realtime(void) {
+        return seccomp_restrict_realtime_full(EPERM);
+}
 int seccomp_memory_deny_write_execute(void);
 int seccomp_lock_personality(unsigned long personality);
 int seccomp_protect_hostname(void);
@@ -150,3 +155,13 @@
 }
 
 int parse_syscall_and_errno(const char *in, char **name, int *error);
+
+int seccomp_suppress_sync(void);
+
+#else
+
+static inline bool is_seccomp_available(void) {
+        return false;
+}
+
+#endif
diff --git a/src/shared/selinux-util.c b/src/shared/selinux-util.c
index 832c294..a74883a 100644
--- a/src/shared/selinux-util.c
+++ b/src/shared/selinux-util.c
@@ -115,7 +115,6 @@
 static int open_label_db(void) {
         struct selabel_handle *hnd;
         usec_t before_timestamp, after_timestamp;
-        char timespan[FORMAT_TIMESPAN_MAX];
 
 #  if HAVE_GENERIC_MALLINFO
         generic_mallinfo before_mallinfo = generic_mallinfo_get();
@@ -131,11 +130,11 @@
         generic_mallinfo after_mallinfo = generic_mallinfo_get();
         size_t l = LESS_BY((size_t) after_mallinfo.uordblks, (size_t) before_mallinfo.uordblks);
         log_debug("Successfully loaded SELinux database in %s, size on heap is %zuK.",
-                  format_timespan(timespan, sizeof(timespan), after_timestamp - before_timestamp, 0),
+                  FORMAT_TIMESPAN(after_timestamp - before_timestamp, 0),
                   DIV_ROUND_UP(l, 1024));
 #  else
         log_debug("Successfully loaded SELinux database in %s.",
-                  format_timespan(timespan, sizeof(timespan), after_timestamp - before_timestamp, 0));
+                  FORMAT_TIMESPAN(after_timestamp - before_timestamp, 0));
 #  endif
 
         /* release memory after measurement */
@@ -234,47 +233,19 @@
 }
 #endif
 
-int mac_selinux_fix_container(const char *path, const char *inside_path, LabelFixFlags flags) {
-
-        assert(path);
-        assert(inside_path);
-
 #if HAVE_SELINUX
-        _cleanup_close_ int fd = -1;
+static int selinux_fix_fd(
+                int fd,
+                const char *label_path,
+                LabelFixFlags flags) {
 
-        /* if mac_selinux_init() wasn't called before we are a NOOP */
-        if (!label_hnd)
-                return 0;
-
-        /* Open the file as O_PATH, to pin it while we determine and adjust the label */
-        fd = open(path, O_NOFOLLOW|O_CLOEXEC|O_PATH);
-        if (fd < 0) {
-                if ((flags & LABEL_IGNORE_ENOENT) && errno == ENOENT)
-                        return 0;
-
-                return -errno;
-        }
-
-        return mac_selinux_fix_container_fd(fd, path, inside_path, flags);
-#endif
-
-        return 0;
-}
-
-int mac_selinux_fix_container_fd(int fd, const char *path, const char *inside_path, LabelFixFlags flags) {
-
-        assert(fd >= 0);
-        assert(inside_path);
-
-#if HAVE_SELINUX
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
         _cleanup_freecon_ char* fcon = NULL;
         struct stat st;
         int r;
 
-        /* if mac_selinux_init() wasn't called before we are a NOOP */
-        if (!label_hnd)
-                return 0;
+        assert(fd >= 0);
+        assert(label_path);
+        assert(path_is_absolute(label_path));
 
         if (fstat(fd, &st) < 0)
                 return -errno;
@@ -284,43 +255,85 @@
         if (!label_hnd)
                 return 0;
 
-        if (selabel_lookup_raw(label_hnd, &fcon, inside_path, st.st_mode) < 0) {
+        if (selabel_lookup_raw(label_hnd, &fcon, label_path, st.st_mode) < 0) {
                 /* If there's no label to set, then exit without warning */
                 if (errno == ENOENT)
                         return 0;
 
-                r = -errno;
-                goto fail;
+                return log_enforcing_errno(errno, "Unable to lookup intended SELinux security context of %s: %m", label_path);
         }
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-        if (setfilecon_raw(procfs_path, fcon) < 0) {
+        if (setfilecon_raw(FORMAT_PROC_FD_PATH(fd), fcon) < 0) {
                 _cleanup_freecon_ char *oldcon = NULL;
 
+                r = -errno;
+
                 /* If the FS doesn't support labels, then exit without warning */
-                if (ERRNO_IS_NOT_SUPPORTED(errno))
+                if (ERRNO_IS_NOT_SUPPORTED(r))
                         return 0;
 
                 /* It the FS is read-only and we were told to ignore failures caused by that, suppress error */
-                if (errno == EROFS && (flags & LABEL_IGNORE_EROFS))
+                if (r == -EROFS && (flags & LABEL_IGNORE_EROFS))
                         return 0;
 
-                r = -errno;
-
                 /* If the old label is identical to the new one, suppress any kind of error */
-                if (getfilecon_raw(procfs_path, &oldcon) >= 0 && streq(fcon, oldcon))
+                if (getfilecon_raw(FORMAT_PROC_FD_PATH(fd), &oldcon) >= 0 && streq_ptr(fcon, oldcon))
                         return 0;
 
-                goto fail;
+                return log_enforcing_errno(r, "Unable to fix SELinux security context of %s: %m", label_path);
         }
 
         return 0;
-
-fail:
-        return log_enforcing_errno(r, "Unable to fix SELinux security context of %s (%s): %m", strna(path), strna(inside_path));
+}
 #endif
 
+int mac_selinux_fix_full(
+                int atfd,
+                const char *inode_path,
+                const char *label_path,
+                LabelFixFlags flags) {
+
+        assert(atfd >= 0 || atfd == AT_FDCWD);
+        assert(atfd >= 0 || inode_path);
+
+#if HAVE_SELINUX
+        _cleanup_close_ int opened_fd = -EBADF;
+        _cleanup_free_ char *p = NULL;
+        int inode_fd, r;
+
+        /* if mac_selinux_init() wasn't called before we are a NOOP */
+        if (!label_hnd)
+                return 0;
+
+        if (inode_path) {
+                opened_fd = openat(atfd, inode_path, O_NOFOLLOW|O_CLOEXEC|O_PATH);
+                if (opened_fd < 0) {
+                        if ((flags & LABEL_IGNORE_ENOENT) && errno == ENOENT)
+                                return 0;
+
+                        return -errno;
+                }
+
+                inode_fd = opened_fd;
+        } else
+                inode_fd = atfd;
+
+        if (!label_path) {
+                if (path_is_absolute(inode_path))
+                        label_path = inode_path;
+                else {
+                        r = fd_get_path(inode_fd, &p);
+                        if (r < 0)
+                                return r;
+
+                        label_path = p;
+                }
+        }
+
+        return selinux_fix_fd(inode_fd, label_path, flags);
+#else
         return 0;
+#endif
 }
 
 int mac_selinux_apply(const char *path, const char *label) {
@@ -344,16 +357,12 @@
         assert(fd >= 0);
 
 #if HAVE_SELINUX
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
-
         if (!mac_selinux_use())
                 return 0;
 
         assert(label);
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-
-        if (setfilecon(procfs_path, label) < 0)
+        if (setfilecon(FORMAT_PROC_FD_PATH(fd), label) < 0)
                 return log_enforcing_errno(errno, "Failed to set SELinux security context %s on path %s: %m", label, strna(path));
 #endif
         return 0;
@@ -363,7 +372,6 @@
 #if HAVE_SELINUX
         _cleanup_freecon_ char *mycon = NULL, *fcon = NULL;
         security_class_t sclass;
-        int r;
 
         assert(exe);
         assert(label);
@@ -371,76 +379,75 @@
         if (!mac_selinux_use())
                 return -EOPNOTSUPP;
 
-        r = getcon_raw(&mycon);
-        if (r < 0)
+        if (getcon_raw(&mycon) < 0)
                 return -errno;
+        if (!mycon)
+                return -EOPNOTSUPP;
 
-        r = getfilecon_raw(exe, &fcon);
-        if (r < 0)
+        if (getfilecon_raw(exe, &fcon) < 0)
                 return -errno;
+        if (!fcon)
+                return -EOPNOTSUPP;
 
         sclass = string_to_security_class("process");
         if (sclass == 0)
                 return -ENOSYS;
 
-        r = security_compute_create_raw(mycon, fcon, sclass, label);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(security_compute_create_raw(mycon, fcon, sclass, label));
 #else
         return -EOPNOTSUPP;
 #endif
 }
 
-int mac_selinux_get_our_label(char **label) {
+int mac_selinux_get_our_label(char **ret) {
+        assert(ret);
+
 #if HAVE_SELINUX
-        int r;
-
-        assert(label);
-
         if (!mac_selinux_use())
                 return -EOPNOTSUPP;
 
-        r = getcon_raw(label);
-        if (r < 0)
+        _cleanup_freecon_ char *con = NULL;
+        if (getcon_raw(&con) < 0)
                 return -errno;
+        if (!con)
+                return -EOPNOTSUPP;
 
+        *ret = TAKE_PTR(con);
         return 0;
 #else
         return -EOPNOTSUPP;
 #endif
 }
 
-int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *exec_label, char **label) {
+int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *exec_label, char **ret_label) {
 #if HAVE_SELINUX
         _cleanup_freecon_ char *mycon = NULL, *peercon = NULL, *fcon = NULL;
         _cleanup_context_free_ context_t pcon = NULL, bcon = NULL;
+        const char *range = NULL, *bcon_str = NULL;
         security_class_t sclass;
-        const char *range = NULL;
-        int r;
 
         assert(socket_fd >= 0);
         assert(exe);
-        assert(label);
+        assert(ret_label);
 
         if (!mac_selinux_use())
                 return -EOPNOTSUPP;
 
-        r = getcon_raw(&mycon);
-        if (r < 0)
+        if (getcon_raw(&mycon) < 0)
                 return -errno;
+        if (!mycon)
+                return -EOPNOTSUPP;
 
-        r = getpeercon_raw(socket_fd, &peercon);
-        if (r < 0)
+        if (getpeercon_raw(socket_fd, &peercon) < 0)
                 return -errno;
+        if (!peercon)
+                return -EOPNOTSUPP;
 
-        if (!exec_label) {
-                /* If there is no context set for next exec let's use context
-                   of target executable */
-                r = getfilecon_raw(exe, &fcon);
-                if (r < 0)
+        if (!exec_label) { /* If there is no context set for next exec let's use context of target executable */
+                if (getfilecon_raw(exe, &fcon) < 0)
                         return -errno;
+                if (!fcon)
+                        return -EOPNOTSUPP;
         }
 
         bcon = context_new(mycon);
@@ -455,24 +462,18 @@
         if (!range)
                 return -errno;
 
-        r = context_range_set(bcon, range);
-        if (r)
+        if (context_range_set(bcon, range) != 0)
                 return -errno;
 
-        freecon(mycon);
-        mycon = strdup(context_str(bcon));
-        if (!mycon)
+        bcon_str = context_str(bcon);
+        if (!bcon_str)
                 return -ENOMEM;
 
         sclass = string_to_security_class("process");
         if (sclass == 0)
                 return -ENOSYS;
 
-        r = security_compute_create_raw(mycon, fcon, sclass, label);
-        if (r < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(security_compute_create_raw(bcon_str, fcon, sclass, ret_label));
 #else
         return -EOPNOTSUPP;
 #endif
@@ -518,25 +519,30 @@
 }
 #endif
 
-int mac_selinux_create_file_prepare_at(int dirfd, const char *path, mode_t mode) {
+int mac_selinux_create_file_prepare_at(
+                int dir_fd,
+                const char *path,
+                mode_t mode) {
+
 #if HAVE_SELINUX
         _cleanup_free_ char *abspath = NULL;
         int r;
 
-        assert(path);
+        if (dir_fd < 0 && dir_fd != AT_FDCWD)
+                return -EBADF;
 
         if (!label_hnd)
                 return 0;
 
-        if (!path_is_absolute(path)) {
-                if (dirfd == AT_FDCWD)
+        if (isempty(path) || !path_is_absolute(path)) {
+                if (dir_fd == AT_FDCWD)
                         r = safe_getcwd(&abspath);
                 else
-                        r = fd_get_path(dirfd, &abspath);
+                        r = fd_get_path(dir_fd, &abspath);
                 if (r < 0)
                         return r;
 
-                if (!path_extend(&abspath, path))
+                if (!isempty(path) && !path_extend(&abspath, path))
                         return -ENOMEM;
 
                 path = abspath;
@@ -548,25 +554,19 @@
 #endif
 }
 
-int mac_selinux_create_file_prepare(const char *path, mode_t mode) {
+int mac_selinux_create_file_prepare_label(const char *path, const char *label) {
 #if HAVE_SELINUX
-        int r;
 
-        _cleanup_free_ char *abspath = NULL;
-
-        assert(path);
-
-        if (!label_hnd)
+        if (!label)
                 return 0;
 
-        r = path_make_absolute_cwd(path, &abspath);
-        if (r < 0)
-                return r;
+        if (!mac_selinux_use())
+                return 0;
 
-        return selinux_create_file_prepare_abspath(abspath, mode);
-#else
-        return 0;
+        if (setfscreatecon_raw(label) < 0)
+                return log_enforcing_errno(errno, "Failed to set specified SELinux security context '%s' for '%s': %m", label, strna(path));
 #endif
+        return 0;
 }
 
 void mac_selinux_create_file_clear(void) {
@@ -616,6 +616,7 @@
         _cleanup_freecon_ char *fcon = NULL;
         const struct sockaddr_un *un;
         bool context_changed = false;
+        size_t sz;
         char *path;
         int r;
 
@@ -639,7 +640,10 @@
         if (un->sun_path[0] == 0)
                 goto skipped;
 
-        path = strndupa(un->sun_path, addrlen - offsetof(struct sockaddr_un, sun_path));
+        sz = addrlen - offsetof(struct sockaddr_un, sun_path);
+        if (sz > PATH_MAX)
+                goto skipped;
+        path = strndupa_safe(un->sun_path, sz);
 
         /* Check for policy reload so 'label_hnd' is kept up-to-date by callbacks */
         mac_selinux_maybe_reload();
@@ -675,7 +679,7 @@
                         context_changed = true;
         }
 
-        r = bind(fd, addr, addrlen) < 0 ? -errno : 0;
+        r = RET_NERRNO(bind(fd, addr, addrlen));
 
         if (context_changed)
                 (void) setfscreatecon_raw(NULL);
@@ -684,8 +688,5 @@
 
 skipped:
 #endif
-        if (bind(fd, addr, addrlen) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(bind(fd, addr, addrlen));
 }
diff --git a/src/shared/selinux-util.h b/src/shared/selinux-util.h
index 1095bde..e9771a2 100644
--- a/src/shared/selinux-util.h
+++ b/src/shared/selinux-util.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <fcntl.h>
 #include <stdbool.h>
 #include <sys/socket.h>
 #include <sys/types.h>
@@ -23,15 +24,7 @@
 void mac_selinux_maybe_reload(void);
 void mac_selinux_finish(void);
 
-int mac_selinux_fix_container(const char *path, const char *inside_path, LabelFixFlags flags);
-static inline int mac_selinux_fix(const char *path, LabelFixFlags flags) {
-        return mac_selinux_fix_container(path, path, flags);
-}
-
-int mac_selinux_fix_container_fd(int fd, const char *path, const char *inside_path, LabelFixFlags flags);
-static inline int mac_selinux_fix_fd(int fd, const char *path, LabelFixFlags flags) {
-        return mac_selinux_fix_container_fd(fd, path, path, flags);
-}
+int mac_selinux_fix_full(int atfd, const char *inode_path, const char *label_path, LabelFixFlags flags);
 
 int mac_selinux_apply(const char *path, const char *label);
 int mac_selinux_apply_fd(int fd, const char *path, const char *label);
@@ -41,8 +34,11 @@
 int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *exec_label, char **label);
 char* mac_selinux_free(char *label);
 
-int mac_selinux_create_file_prepare(const char *path, mode_t mode);
 int mac_selinux_create_file_prepare_at(int dirfd, const char *path, mode_t mode);
+static inline int mac_selinux_create_file_prepare(const char *path, mode_t mode) {
+        return mac_selinux_create_file_prepare_at(AT_FDCWD, path, mode);
+}
+int mac_selinux_create_file_prepare_label(const char *path, const char *label);
 void mac_selinux_create_file_clear(void);
 
 int mac_selinux_create_socket_prepare(const char *label);
diff --git a/src/shared/serialize.c b/src/shared/serialize.c
index 23aac3e..cd48286 100644
--- a/src/shared/serialize.c
+++ b/src/shared/serialize.c
@@ -117,7 +117,6 @@
 
 int serialize_strv(FILE *f, const char *key, char **l) {
         int ret = 0, r;
-        char **i;
 
         /* Returns the first error, or positive if anything was serialized, 0 otherwise. */
 
@@ -176,6 +175,7 @@
 
 int deserialize_environment(const char *value, char ***list) {
         _cleanup_free_ char *unescaped = NULL;
+        ssize_t l;
         int r;
 
         assert(value);
@@ -183,9 +183,9 @@
 
         /* Changes the *environment strv inline. */
 
-        r = cunescape(value, 0, &unescaped);
-        if (r < 0)
-                return log_error_errno(r, "Failed to unescape: %m");
+        l = cunescape(value, 0, &unescaped);
+        if (l < 0)
+                return log_error_errno(l, "Failed to unescape: %m");
 
         r = strv_env_replace_consume(list, TAKE_PTR(unescaped));
         if (r < 0)
diff --git a/src/shared/service-util.c b/src/shared/service-util.c
index 092be6e..b0585ba 100644
--- a/src/shared/service-util.c
+++ b/src/shared/service-util.c
@@ -4,10 +4,10 @@
 #include <stdio.h>
 
 #include "alloc-util.h"
+#include "build.h"
 #include "pretty-print.h"
 #include "service-util.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static int help(const char *program_path, const char *service, const char *description, bool bus_introspect) {
         _cleanup_free_ char *link = NULL;
@@ -58,7 +58,7 @@
         assert(argv);
 
         while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
 
                 case 'h':
                         return help(argv[0], service, description, bus_objects);
@@ -76,7 +76,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unknown option code.");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
index 8ec3d09..1eb0071 100644
--- a/src/shared/sleep-config.c
+++ b/src/shared/sleep-config.c
@@ -15,36 +15,66 @@
 #include <syslog.h>
 #include <unistd.h>
 
+#include "sd-device.h"
+
 #include "alloc-util.h"
 #include "blockdev-util.h"
 #include "btrfs-util.h"
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
+#include "device-private.h"
+#include "device-util.h"
+#include "devnum-util.h"
 #include "env-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "hexdecoct.h"
+#include "id128-util.h"
 #include "log.h"
 #include "macro.h"
-#include "parse-util.h"
 #include "path-util.h"
 #include "sleep-config.h"
+#include "siphash24.h"
 #include "stat-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
 #include "time-util.h"
+#include "udev-util.h"
+
+#define BATTERY_LOW_CAPACITY_LEVEL 5
+#define DISCHARGE_RATE_FILEPATH "/var/lib/systemd/sleep/battery_discharge_percentage_rate_per_hour"
+#define BATTERY_DISCHARGE_RATE_HASH_KEY SD_ID128_MAKE(5f,9a,20,18,38,76,46,07,8d,36,58,0b,bb,c4,e0,63)
+#define SYS_ENTRY_RAW_FILE_TYPE1 "/sys/firmware/dmi/entries/1-0/raw"
+
+static void *CAPACITY_TO_PTR(int capacity) {
+        assert(capacity >= 0);
+        assert(capacity <= 100);
+        return INT_TO_PTR(capacity + 1);
+}
+
+static int PTR_TO_CAPACITY(void *p) {
+        int capacity = PTR_TO_INT(p) - 1;
+        assert(capacity >= 0);
+        assert(capacity <= 100);
+        return capacity;
+}
 
 int parse_sleep_config(SleepConfig **ret_sleep_config) {
         _cleanup_(free_sleep_configp) SleepConfig *sc = NULL;
         int allow_suspend = -1, allow_hibernate = -1,
             allow_s2h = -1, allow_hybrid_sleep = -1;
 
-        sc = new0(SleepConfig, 1);
+        sc = new(SleepConfig, 1);
         if (!sc)
                 return log_oom();
 
+        *sc = (SleepConfig) {
+                .hibernate_delay_usec = USEC_INFINITY,
+        };
+
         const ConfigTableItem items[] = {
                 { "Sleep", "AllowSuspend",              config_parse_tristate, 0, &allow_suspend                  },
                 { "Sleep", "AllowHibernation",          config_parse_tristate, 0, &allow_hibernate                },
@@ -58,7 +88,8 @@
                 { "Sleep", "HybridSleepMode",           config_parse_strv,     0, sc->modes + SLEEP_HYBRID_SLEEP  },
                 { "Sleep", "HybridSleepState",          config_parse_strv,     0, sc->states + SLEEP_HYBRID_SLEEP },
 
-                { "Sleep", "HibernateDelaySec",         config_parse_sec,      0, &sc->hibernate_delay_sec        },
+                { "Sleep", "HibernateDelaySec",         config_parse_sec,      0, &sc->hibernate_delay_usec       },
+                { "Sleep", "SuspendEstimationSec",      config_parse_sec,      0, &sc->suspend_estimation_usec    },
                 {}
         };
 
@@ -89,10 +120,10 @@
                 sc->modes[SLEEP_HYBRID_SLEEP] = strv_new("suspend", "platform", "shutdown");
         if (!sc->states[SLEEP_HYBRID_SLEEP])
                 sc->states[SLEEP_HYBRID_SLEEP] = strv_new("disk");
-        if (sc->hibernate_delay_sec == 0)
-                sc->hibernate_delay_sec = 2 * USEC_PER_HOUR;
+        if (sc->suspend_estimation_usec == 0)
+                sc->suspend_estimation_usec = DEFAULT_SUSPEND_ESTIMATION_USEC;
 
-        /* ensure values set for all required fields */
+        /* Ensure values set for all required fields */
         if (!sc->states[SLEEP_SUSPEND] || !sc->modes[SLEEP_HIBERNATE]
             || !sc->states[SLEEP_HIBERNATE] || !sc->modes[SLEEP_HYBRID_SLEEP] || !sc->states[SLEEP_HYBRID_SLEEP])
                 return log_oom();
@@ -102,6 +133,467 @@
         return 0;
 }
 
+/* Get the list of batteries */
+static int battery_enumerator_new(sd_device_enumerator **ret) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        int r;
+
+        assert(ret);
+
+        r = sd_device_enumerator_new(&e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_subsystem(e, "power_supply", /* match = */ true);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_allow_uninitialized(e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_sysattr(e, "type", "Battery", /* match = */ true);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_sysattr(e, "present", "1", /* match = */ true);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_sysattr(e, "scope", "Device", /* match = */ false);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(e);
+        return 0;
+}
+
+int get_capacity_by_name(Hashmap *capacities_by_name, const char *name) {
+        void *p;
+
+        assert(capacities_by_name);
+        assert(name);
+
+        p = hashmap_get(capacities_by_name, name);
+        if (!p)
+                return -ENOENT;
+
+        return PTR_TO_CAPACITY(p);
+}
+
+/* Battery percentage capacity fetched from capacity file and if in range 0-100 then returned */
+static int read_battery_capacity_percentage(sd_device *dev) {
+        int battery_capacity, r;
+
+        assert(dev);
+
+        r = device_get_sysattr_int(dev, "capacity", &battery_capacity);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to read/parse POWER_SUPPLY_CAPACITY: %m");
+
+        if (battery_capacity < 0 || battery_capacity > 100)
+                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ERANGE), "Invalid battery capacity");
+
+        return battery_capacity;
+}
+
+/* If a battery whose percentage capacity is <= 5% exists, and we're not on AC power, return success */
+int battery_is_discharging_and_low(void) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        int r;
+
+         /* We have not used battery capacity_level since value is set to full
+         * or Normal in case ACPI is not working properly. In case of no battery
+         * 0 will be returned and system will be suspended for 1st cycle then hibernated */
+
+        r = on_ac_power();
+        if (r < 0)
+                log_debug_errno(r, "Failed to check if the system is running on AC, assuming it is not: %m");
+        if (r > 0)
+                return false;
+
+        r = battery_enumerator_new(&e);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to initialize battery enumerator: %m");
+
+        FOREACH_DEVICE(e, dev)
+                if (read_battery_capacity_percentage(dev) > BATTERY_LOW_CAPACITY_LEVEL)
+                        return false;
+
+        return true;
+}
+
+/* Store current capacity of each battery before suspension and timestamp */
+int fetch_batteries_capacity_by_name(Hashmap **ret) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        _cleanup_(hashmap_freep) Hashmap *batteries_capacity_by_name = NULL;
+        sd_device *dev;
+        int r;
+
+        assert(ret);
+
+        batteries_capacity_by_name = hashmap_new(&string_hash_ops_free);
+        if (!batteries_capacity_by_name)
+                return log_oom_debug();
+
+        r = battery_enumerator_new(&e);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to initialize battery enumerator: %m");
+
+        FOREACH_DEVICE(e, dev) {
+                _cleanup_free_ char *battery_name_copy = NULL;
+                const char *battery_name;
+                int battery_capacity;
+
+                battery_capacity = r = read_battery_capacity_percentage(dev);
+                if (r < 0)
+                        continue;
+
+                r = sd_device_get_property_value(dev, "POWER_SUPPLY_NAME", &battery_name);
+                if (r < 0) {
+                        log_device_debug_errno(dev, r, "Failed to get POWER_SUPPLY_NAME property, ignoring: %m");
+                        continue;
+                }
+
+                battery_name_copy = strdup(battery_name);
+                if (!battery_name_copy)
+                        return log_oom_debug();
+
+                r = hashmap_put(batteries_capacity_by_name, battery_name_copy, CAPACITY_TO_PTR(battery_capacity));
+                if (r < 0)
+                        return log_device_debug_errno(dev, r, "Failed to store battery capacity: %m");
+
+                TAKE_PTR(battery_name_copy);
+        }
+
+        *ret = TAKE_PTR(batteries_capacity_by_name);
+
+        return 0;
+}
+
+static int siphash24_compress_device_sysattr(sd_device *dev, const char *attr, struct siphash *state) {
+        const char *x;
+        int r;
+
+        assert(dev);
+        assert(attr);
+        assert(state);
+
+        r = sd_device_get_sysattr_value(dev, attr, &x);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to read '%s' attribute: %m", attr);
+
+        if (!isempty(x))
+                siphash24_compress_string(x, state);
+
+        return 0;
+}
+
+static int siphash24_compress_id128(int (*getter)(sd_id128_t*), const char *name, struct siphash *state) {
+        sd_id128_t id;
+        int r;
+
+        assert(getter);
+        assert(state);
+
+        r = getter(&id);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to get %s ID: %m", name);
+
+        siphash24_compress(&id, sizeof(sd_id128_t), state);
+        return 0;
+}
+
+/* Read system and battery identifier from specific location and generate hash of it */
+static int get_system_battery_identifier_hash(sd_device *dev, uint64_t *ret) {
+        struct siphash state;
+
+        assert(ret);
+        assert(dev);
+
+        siphash24_init(&state, BATTERY_DISCHARGE_RATE_HASH_KEY.bytes);
+
+        (void) siphash24_compress_device_sysattr(dev, "manufacturer", &state);
+        (void) siphash24_compress_device_sysattr(dev, "model_name", &state);
+        (void) siphash24_compress_device_sysattr(dev, "serial_number", &state);
+        (void) siphash24_compress_id128(sd_id128_get_machine, "machine", &state);
+        (void) siphash24_compress_id128(id128_get_product, "product", &state);
+
+        *ret = siphash24_finalize(&state);
+        return 0;
+}
+
+/* Return success if battery percentage discharge rate per hour is in the range 1–199 */
+static bool battery_discharge_rate_is_valid(int battery_discharge_rate) {
+        return battery_discharge_rate > 0 && battery_discharge_rate < 200;
+}
+
+/* Battery percentage discharge rate per hour is read from specific file. It is stored along with system
+ * and battery identifier hash to maintain the integrity of discharge rate value */
+static int get_battery_discharge_rate(sd_device *dev, int *ret) {
+        _cleanup_fclose_ FILE *f = NULL;
+        uint64_t current_hash_id;
+        const char *p;
+        int r;
+
+        assert(dev);
+        assert(ret);
+
+        f = fopen(DISCHARGE_RATE_FILEPATH, "re");
+        if (!f)
+                return log_debug_errno(errno, "Failed to read discharge rate from " DISCHARGE_RATE_FILEPATH ": %m");
+
+        r = get_system_battery_identifier_hash(dev, &current_hash_id);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to generate system battery identifier hash: %m");
+
+        for (;;) {
+                _cleanup_free_ char *stored_hash_id = NULL, *stored_discharge_rate = NULL, *line = NULL;
+                uint64_t hash_id;
+                int discharge_rate;
+
+                r = read_line(f, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to read discharge rate from " DISCHARGE_RATE_FILEPATH ": %m");
+                if (r == 0)
+                        break;
+
+                p = line;
+                r = extract_many_words(&p, NULL, 0, &stored_hash_id, &stored_discharge_rate, NULL);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to parse hash_id and discharge_rate read from " DISCHARGE_RATE_FILEPATH ": %m");
+                if (r != 2)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid number of items fetched from " DISCHARGE_RATE_FILEPATH);
+
+                r = safe_atou64(stored_hash_id, &hash_id);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to parse hash ID read from " DISCHARGE_RATE_FILEPATH " location: %m");
+
+                if (current_hash_id != hash_id)
+                        /* matching device not found, move to next line */
+                        continue;
+
+                r = safe_atoi(stored_discharge_rate, &discharge_rate);
+                if (r < 0)
+                        return log_device_debug_errno(dev, r, "Failed to parse discharge rate read from " DISCHARGE_RATE_FILEPATH ": %m");
+
+                if (!battery_discharge_rate_is_valid(discharge_rate))
+                        return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ERANGE), "Invalid battery discharge percentage rate per hour: %m");
+
+                *ret = discharge_rate;
+                return 0; /* matching device found, exit iteration */
+        }
+
+        return -ENOENT;
+}
+
+/* Write battery percentage discharge rate per hour along with system and battery identifier hash to file */
+static int put_battery_discharge_rate(int estimated_battery_discharge_rate, uint64_t system_hash_id, bool trunc) {
+        int r;
+
+        if (!battery_discharge_rate_is_valid(estimated_battery_discharge_rate))
+                return log_debug_errno(SYNTHETIC_ERRNO(ERANGE),
+                                        "Invalid battery discharge rate %d%% per hour: %m",
+                                        estimated_battery_discharge_rate);
+
+        r = write_string_filef(
+                        DISCHARGE_RATE_FILEPATH,
+                        WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_MKDIR_0755 | (trunc ? WRITE_STRING_FILE_TRUNCATE : 0),
+                        "%"PRIu64" %d",
+                        system_hash_id,
+                        estimated_battery_discharge_rate);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to update %s: %m", DISCHARGE_RATE_FILEPATH);
+
+        log_debug("Estimated discharge rate %d%% per hour successfully saved to %s", estimated_battery_discharge_rate, DISCHARGE_RATE_FILEPATH);
+
+        return 0;
+}
+
+/* Estimate battery discharge rate using stored previous and current capacity over timestamp difference */
+int estimate_battery_discharge_rate_per_hour(
+                Hashmap *last_capacity,
+                Hashmap *current_capacity,
+                usec_t before_timestamp,
+                usec_t after_timestamp) {
+
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        bool trunc = true;
+        int r;
+
+        assert(last_capacity);
+        assert(current_capacity);
+        assert(before_timestamp < after_timestamp);
+
+        r = battery_enumerator_new(&e);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to initialize battery enumerator: %m");
+
+        FOREACH_DEVICE(e, dev) {
+                int battery_last_capacity, battery_current_capacity, battery_discharge_rate;
+                const char *battery_name;
+                uint64_t system_hash_id;
+
+                r = sd_device_get_property_value(dev, "POWER_SUPPLY_NAME", &battery_name);
+                if (r < 0) {
+                        log_device_debug_errno(dev, r, "Failed to read battery name, ignoring: %m");
+                        continue;
+                }
+
+                battery_last_capacity = get_capacity_by_name(last_capacity, battery_name);
+                if (battery_last_capacity < 0)
+                        continue;
+
+                battery_current_capacity = get_capacity_by_name(current_capacity, battery_name);
+                if (battery_current_capacity < 0)
+                        continue;
+
+                if (battery_current_capacity >= battery_last_capacity) {
+                        log_device_debug(dev, "Battery was not discharged during suspension");
+                        continue;
+                }
+
+                r = get_system_battery_identifier_hash(dev, &system_hash_id);
+                if (r < 0)
+                        return log_device_debug_errno(dev, r, "Failed to generate system battery identifier hash: %m");
+
+                log_device_debug(dev,
+                                 "%d%% was discharged in %s. Estimating discharge rate...",
+                                 battery_last_capacity - battery_current_capacity,
+                                 FORMAT_TIMESPAN(after_timestamp - before_timestamp, USEC_PER_SEC));
+
+                battery_discharge_rate = (battery_last_capacity - battery_current_capacity) * USEC_PER_HOUR / (after_timestamp - before_timestamp);
+                r = put_battery_discharge_rate(battery_discharge_rate, system_hash_id, trunc);
+                if (r < 0)
+                        log_device_warning_errno(dev, r, "Failed to update battery discharge rate, ignoring: %m");
+                else
+                        trunc = false;
+        }
+
+        return 0;
+}
+
+/* Calculate the suspend interval for each battery and then return their sum */
+int get_total_suspend_interval(Hashmap *last_capacity, usec_t *ret) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        usec_t total_suspend_interval = 0;
+        sd_device *dev;
+        int r;
+
+        assert(last_capacity);
+        assert(ret);
+
+        r = battery_enumerator_new(&e);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to initialize battery enumerator: %m");
+
+        FOREACH_DEVICE(e, dev) {
+                int battery_last_capacity, previous_discharge_rate = 0;
+                const char *battery_name;
+                usec_t suspend_interval;
+
+                r = sd_device_get_property_value(dev, "POWER_SUPPLY_NAME", &battery_name);
+                if (r < 0) {
+                        log_device_debug_errno(dev, r, "Failed to read battery name, ignoring: %m");
+                        continue;
+                }
+
+                battery_last_capacity = get_capacity_by_name(last_capacity, battery_name);
+                if (battery_last_capacity <= 0)
+                        continue;
+
+                r = get_battery_discharge_rate(dev, &previous_discharge_rate);
+                if (r < 0) {
+                        log_device_debug_errno(dev, r, "Failed to get discharge rate, ignoring: %m");
+                        continue;
+                }
+
+                if (previous_discharge_rate == 0)
+                        continue;
+
+                if (battery_last_capacity * 2 <= previous_discharge_rate) {
+                        log_device_debug(dev, "Current battery capacity percentage too low compared to discharge rate");
+                        continue;
+                }
+                suspend_interval = battery_last_capacity * USEC_PER_HOUR / previous_discharge_rate;
+
+                total_suspend_interval = usec_add(total_suspend_interval, suspend_interval);
+        }
+        /* Previous discharge rate is stored in per hour basis converted to usec.
+         * Subtract 30 minutes from the result to keep a buffer of 30 minutes before battery gets critical */
+        total_suspend_interval = usec_sub_unsigned(total_suspend_interval, 30 * USEC_PER_MINUTE);
+        if (total_suspend_interval == 0)
+                return -ENOENT;
+
+        *ret = total_suspend_interval;
+
+        return 0;
+}
+
+/* Return true if all batteries have acpi_btp support */
+int battery_trip_point_alarm_exists(void) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        sd_device *dev;
+        int r;
+
+        r = battery_enumerator_new(&e);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to initialize battery enumerator: %m");
+
+        FOREACH_DEVICE(e, dev) {
+                int battery_alarm;
+                const char *s;
+
+                r = sd_device_get_sysattr_value(dev, "alarm", &s);
+                if (r < 0)
+                        return log_device_debug_errno(dev, r, "Failed to read battery alarm: %m");
+
+                r = safe_atoi(s, &battery_alarm);
+                if (r < 0)
+                        return log_device_debug_errno(dev, r, "Failed to parse battery alarm: %m");
+                if (battery_alarm <= 0)
+                        return false;
+        }
+
+        return true;
+}
+
+/* Return true if wakeup type is APM timer */
+int check_wakeup_type(void) {
+        _cleanup_free_ char *s = NULL;
+        uint8_t wakeup_type_byte, tablesize;
+        size_t readsize;
+        int r;
+
+        /* implementation via dmi/entries */
+        r = read_full_virtual_file(SYS_ENTRY_RAW_FILE_TYPE1, &s, &readsize);
+        if (r < 0)
+                return log_debug_errno(r, "Unable to read %s: %m", SYS_ENTRY_RAW_FILE_TYPE1);
+
+        if (readsize < 25)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Only read %zu bytes from %s (expected 25)", readsize, SYS_ENTRY_RAW_FILE_TYPE1);
+
+        /* index 1 stores the size of table */
+        tablesize = (uint8_t) s[1];
+        if (tablesize < 25)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Table size lesser than the index[0x18] where waketype byte is available.");
+
+        wakeup_type_byte = (uint8_t) s[24];
+        /* 0 is Reserved and 8 is AC Power Restored. As per table 12 in
+         * https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.4.0.pdf */
+        if (wakeup_type_byte >= 128)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Expected value in range 0-127");
+
+        if (wakeup_type_byte == 3) {
+                log_debug("DMI BIOS System Information indicates wakeup type is APM Timer");
+                return true;
+        }
+
+        return false;
+}
+
 int can_sleep_state(char **types) {
         _cleanup_free_ char *text = NULL;
         int r;
@@ -231,7 +723,7 @@
  * filesystems, a debug message is logged and ret_offset is set to UINT64_MAX.
  */
 static int calculate_swap_file_offset(const SwapEntry *swap, uint64_t *ret_offset) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_free_ struct fiemap *fiemap = NULL;
         struct stat sb;
         int r;
@@ -274,7 +766,7 @@
         if (r < 0)
                 return log_debug_errno(r, "Error reading /sys/power/resume: %m");
 
-        r = parse_dev(resume_str, &resume);
+        r = parse_devnum(resume_str, &resume);
         if (r < 0)
                 return log_debug_errno(r, "Error parsing /sys/power/resume device: %s: %m", resume_str);
 
diff --git a/src/shared/sleep-config.h b/src/shared/sleep-config.h
index c049a55..5c528b8 100644
--- a/src/shared/sleep-config.h
+++ b/src/shared/sleep-config.h
@@ -2,8 +2,12 @@
 #pragma once
 
 #include <linux/fiemap.h>
+
+#include "hashmap.h"
 #include "time-util.h"
 
+#define DEFAULT_SUSPEND_ESTIMATION_USEC (1 * USEC_PER_HOUR)
+
 typedef enum SleepOperation {
         SLEEP_SUSPEND,
         SLEEP_HIBERNATE,
@@ -17,7 +21,8 @@
         bool allow[_SLEEP_OPERATION_MAX];
         char **modes[_SLEEP_OPERATION_MAX];
         char **states[_SLEEP_OPERATION_MAX];
-        usec_t hibernate_delay_sec;
+        usec_t hibernate_delay_usec;
+        usec_t suspend_estimation_usec;
 } SleepConfig;
 
 SleepConfig* free_sleep_config(SleepConfig *sc);
@@ -55,6 +60,17 @@
 int can_sleep(SleepOperation operation);
 int can_sleep_disk(char **types);
 int can_sleep_state(char **types);
+int battery_is_discharging_and_low(void);
+int get_total_suspend_interval(Hashmap *last_capacity, usec_t *ret);
+int fetch_batteries_capacity_by_name(Hashmap **ret_current_capacity);
+int get_capacity_by_name(Hashmap *capacities_by_name, const char *name);
+int estimate_battery_discharge_rate_per_hour(
+                Hashmap *last_capacity,
+                Hashmap *current_capacity,
+                usec_t before_timestamp,
+                usec_t after_timestamp);
+int check_wakeup_type(void);
+int battery_trip_point_alarm_exists(void);
 
 const char* sleep_operation_to_string(SleepOperation s) _const_;
 SleepOperation sleep_operation_from_string(const char *s) _pure_;
diff --git a/src/shared/smack-util.c b/src/shared/smack-util.c
index 8d88a7b..b3b5c90 100644
--- a/src/shared/smack-util.c
+++ b/src/shared/smack-util.c
@@ -12,6 +12,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "log.h"
@@ -52,7 +53,7 @@
         if (!mac_smack_use())
                 return 0;
 
-        return getxattr_malloc(path, smack_attr_to_string(attr), label, true);
+        return getxattr_malloc(path, smack_attr_to_string(attr), label);
 }
 
 int mac_smack_read_fd(int fd, SmackAttr attr, char **label) {
@@ -86,7 +87,6 @@
 }
 
 int mac_smack_apply_fd(int fd, SmackAttr attr, const char *label) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
         int r;
 
         assert(fd >= 0);
@@ -95,12 +95,10 @@
         if (!mac_smack_use())
                 return 0;
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-
         if (label)
-                r = setxattr(procfs_path, smack_attr_to_string(attr), label, strlen(label), 0);
+                r = setxattr(FORMAT_PROC_FD_PATH(fd), smack_attr_to_string(attr), label, strlen(label), 0);
         else
-                r = removexattr(procfs_path, smack_attr_to_string(attr));
+                r = removexattr(FORMAT_PROC_FD_PATH(fd), smack_attr_to_string(attr));
         if (r < 0)
                 return -errno;
 
@@ -124,18 +122,22 @@
         return r;
 }
 
-static int smack_fix_fd(int fd , const char *abspath, LabelFixFlags flags) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
+static int smack_fix_fd(
+                int fd,
+                const char *label_path,
+                LabelFixFlags flags) {
+
         const char *label;
         struct stat st;
         int r;
 
         /* The caller should have done the sanity checks. */
-        assert(abspath);
-        assert(path_is_absolute(abspath));
+        assert(fd >= 0);
+        assert(label_path);
+        assert(path_is_absolute(label_path));
 
         /* Path must be in /dev. */
-        if (!path_startswith(abspath, "/dev"))
+        if (!path_startswith(label_path, "/dev"))
                 return 0;
 
         if (fstat(fd, &st) < 0)
@@ -156,14 +158,13 @@
         else
                 return 0;
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-        if (setxattr(procfs_path, "security.SMACK64", label, strlen(label), 0) < 0) {
+        if (setxattr(FORMAT_PROC_FD_PATH(fd), "security.SMACK64", label, strlen(label), 0) < 0) {
                 _cleanup_free_ char *old_label = NULL;
 
                 r = -errno;
 
                 /* If the FS doesn't support labels, then exit without warning */
-                if (r == -EOPNOTSUPP)
+                if (ERRNO_IS_NOT_SUPPORTED(r))
                         return 0;
 
                 /* It the FS is read-only and we were told to ignore failures caused by that, suppress error */
@@ -171,67 +172,57 @@
                         return 0;
 
                 /* If the old label is identical to the new one, suppress any kind of error */
-                if (getxattr_malloc(procfs_path, "security.SMACK64", &old_label, false) >= 0 &&
+                if (lgetxattr_malloc(FORMAT_PROC_FD_PATH(fd), "security.SMACK64", &old_label) >= 0 &&
                     streq(old_label, label))
                         return 0;
 
-                return log_debug_errno(r, "Unable to fix SMACK label of %s: %m", abspath);
+                return log_debug_errno(r, "Unable to fix SMACK label of %s: %m", label_path);
         }
 
         return 0;
 }
 
-int mac_smack_fix_at(int dirfd, const char *path, LabelFixFlags flags) {
+int mac_smack_fix_full(
+                int atfd,
+                const char *inode_path,
+                const char *label_path,
+                LabelFixFlags flags) {
+
+        _cleanup_close_ int opened_fd = -EBADF;
         _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
-        int r;
+        int r, inode_fd;
 
-        assert(path);
+        assert(atfd >= 0 || atfd == AT_FDCWD);
+        assert(atfd >= 0 || inode_path);
 
         if (!mac_smack_use())
                 return 0;
 
-        fd = openat(dirfd, path, O_NOFOLLOW|O_CLOEXEC|O_PATH);
-        if (fd < 0) {
-                if ((flags & LABEL_IGNORE_ENOENT) && errno == ENOENT)
-                        return 0;
+        if (inode_path) {
+                opened_fd = openat(atfd, inode_path, O_NOFOLLOW|O_CLOEXEC|O_PATH);
+                if (opened_fd < 0) {
+                        if ((flags & LABEL_IGNORE_ENOENT) && errno == ENOENT)
+                                return 0;
 
-                return -errno;
+                        return -errno;
+                }
+                inode_fd = opened_fd;
+        } else
+                inode_fd = atfd;
+
+        if (!label_path) {
+                if (path_is_absolute(inode_path))
+                        label_path = inode_path;
+                else {
+                        r = fd_get_path(inode_fd, &p);
+                        if (r < 0)
+                                return r;
+
+                        label_path = p;
+                }
         }
 
-        if (!path_is_absolute(path)) {
-                r = fd_get_path(fd, &p);
-                if (r < 0)
-                        return r;
-                path = p;
-        }
-
-        return smack_fix_fd(fd, path, flags);
-}
-
-int mac_smack_fix_container(const char *path, const char *inside_path, LabelFixFlags flags) {
-        _cleanup_free_ char *abspath = NULL;
-        _cleanup_close_ int fd = -1;
-        int r;
-
-        assert(path);
-
-        if (!mac_smack_use())
-                return 0;
-
-        r = path_make_absolute_cwd(path, &abspath);
-        if (r < 0)
-                return r;
-
-        fd = open(abspath, O_NOFOLLOW|O_CLOEXEC|O_PATH);
-        if (fd < 0) {
-                if ((flags & LABEL_IGNORE_ENOENT) && errno == ENOENT)
-                        return 0;
-
-                return -errno;
-        }
-
-        return smack_fix_fd(fd, inside_path, flags);
+        return smack_fix_fd(inode_fd, label_path, flags);
 }
 
 int mac_smack_copy(const char *dest, const char *src) {
@@ -277,11 +268,7 @@
         return 0;
 }
 
-int mac_smack_fix_container(const char *path, const char *inside_path, LabelFixFlags flags) {
-        return 0;
-}
-
-int mac_smack_fix_at(int dirfd, const char *path, LabelFixFlags flags) {
+int mac_smack_fix_full(int atfd, const char *inode_path, const char *label_path, LabelFixFlags flags) {
         return 0;
 }
 
@@ -289,3 +276,15 @@
         return 0;
 }
 #endif
+
+int rename_and_apply_smack_floor_label(const char *from, const char *to) {
+
+        if (rename(from, to) < 0)
+                return -errno;
+
+#if HAVE_SMACK_RUN_LABEL
+        return mac_smack_apply(to, SMACK_ATTR_ACCESS, SMACK_FLOOR_LABEL);
+#else
+        return 0;
+#endif
+}
diff --git a/src/shared/smack-util.h b/src/shared/smack-util.h
index 36fdc72..da8be5e 100644
--- a/src/shared/smack-util.h
+++ b/src/shared/smack-util.h
@@ -29,13 +29,11 @@
 
 bool mac_smack_use(void);
 
-int mac_smack_fix_container(const char *path, const char *inside_path, LabelFixFlags flags);
+int mac_smack_fix_full(int atfd, const char *inode_path, const char *label_path, LabelFixFlags flags);
 static inline int mac_smack_fix(const char *path, LabelFixFlags flags) {
-        return mac_smack_fix_container(path, path, flags);
+        return mac_smack_fix_full(AT_FDCWD, path, path, flags);
 }
 
-int mac_smack_fix_at(int dirfd, const char *path, LabelFixFlags flags);
-
 const char* smack_attr_to_string(SmackAttr i) _const_;
 SmackAttr smack_attr_from_string(const char *s) _pure_;
 int mac_smack_read(const char *path, SmackAttr attr, char **label);
@@ -44,3 +42,5 @@
 int mac_smack_apply_fd(int fd, SmackAttr attr, const char *label);
 int mac_smack_apply_pid(pid_t pid, const char *label);
 int mac_smack_copy(const char *dest, const char *src);
+
+int rename_and_apply_smack_floor_label(const char *temp_path, const char *dest_path);
diff --git a/src/shared/socket-label.c b/src/shared/socket-label.c
index ea78762..b86a6ad 100644
--- a/src/shared/socket-label.c
+++ b/src/shared/socket-label.c
@@ -14,7 +14,7 @@
 #include "log.h"
 #include "macro.h"
 #include "missing_socket.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "selinux-util.h"
 #include "socket-util.h"
 #include "umask-util.h"
@@ -32,7 +32,7 @@
                 mode_t socket_mode,
                 const char *label) {
 
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *p;
         int r;
 
@@ -51,14 +51,13 @@
                         return r;
         }
 
-        fd = socket(socket_address_family(a), a->type | flags, a->protocol);
-        r = fd < 0 ? -errno : 0;
+        fd = RET_NERRNO(socket(socket_address_family(a), a->type | flags, a->protocol));
 
         if (label)
                 mac_selinux_create_socket_clear();
 
-        if (r < 0)
-                return r;
+        if (fd < 0)
+                return fd;
 
         if (socket_address_family(a) == AF_INET6 && only != SOCKET_ADDRESS_DEFAULT) {
                 r = setsockopt_int(fd, IPPROTO_IPV6, IPV6_V6ONLY, only == SOCKET_ADDRESS_IPV6_ONLY);
@@ -102,7 +101,7 @@
                 (void) mkdir_parents_label(p, directory_mode);
 
                 /* Enforce the right access mode for the socket */
-                RUN_WITH_UMASK(~socket_mode) {
+                WITH_UMASK(~socket_mode) {
                         r = mac_selinux_bind(fd, &a->sockaddr.sa, a->size);
                         if (r == -EADDRINUSE) {
                                 /* Unlink and try again */
diff --git a/src/shared/socket-netlink.c b/src/shared/socket-netlink.c
index 0c04437..e115dff 100644
--- a/src/shared/socket-netlink.c
+++ b/src/shared/socket-netlink.c
@@ -17,120 +17,74 @@
 #include "string-util.h"
 
 int socket_address_parse(SocketAddress *a, const char *s) {
-        _cleanup_free_ char *n = NULL;
-        char *e;
+        uint16_t port;
         int r;
 
         assert(a);
         assert(s);
 
-        if (IN_SET(*s, '/', '@')) {
-                /* AF_UNIX socket */
-                struct sockaddr_un un;
+        r = socket_address_parse_unix(a, s);
+        if (r == -EPROTO)
+                r = socket_address_parse_vsock(a, s);
+        if (r != -EPROTO)
+                return r;
 
-                r = sockaddr_un_set_path(&un, s);
-                if (r < 0)
-                        return r;
-
-                *a = (SocketAddress) {
-                        .sockaddr.un = un,
-                        .size = r,
-                };
-
-        } else if (startswith(s, "vsock:")) {
-                /* AF_VSOCK socket in vsock:cid:port notation */
-                const char *cid_start = s + STRLEN("vsock:");
-                unsigned port, cid;
-
-                e = strchr(cid_start, ':');
-                if (!e)
-                        return -EINVAL;
-
-                r = safe_atou(e+1, &port);
-                if (r < 0)
-                        return r;
-
-                n = strndup(cid_start, e - cid_start);
-                if (!n)
-                        return -ENOMEM;
-
-                if (isempty(n))
-                        cid = VMADDR_CID_ANY;
-                else {
-                        r = safe_atou(n, &cid);
-                        if (r < 0)
-                                return r;
-                }
-
-                *a = (SocketAddress) {
-                        .sockaddr.vm = {
-                                .svm_cid = cid,
-                                .svm_family = AF_VSOCK,
-                                .svm_port = port,
-                        },
-                        .size = sizeof(struct sockaddr_vm),
-                };
+        r = parse_ip_port(s, &port);
+        if (r == -ERANGE)
+                return r; /* Valid port syntax, but the numerical value is wrong for a port. */
+        if (r >= 0) {
+                /* Just a port */
+                if (socket_ipv6_is_supported())
+                        *a = (SocketAddress) {
+                                .sockaddr.in6 = {
+                                        .sin6_family = AF_INET6,
+                                        .sin6_port = htobe16(port),
+                                        .sin6_addr = in6addr_any,
+                                },
+                                .size = sizeof(struct sockaddr_in6),
+                        };
+                else
+                        *a = (SocketAddress) {
+                                .sockaddr.in = {
+                                        .sin_family = AF_INET,
+                                        .sin_port = htobe16(port),
+                                        .sin_addr.s_addr = INADDR_ANY,
+                                },
+                                .size = sizeof(struct sockaddr_in),
+                        };
 
         } else {
-                uint16_t port;
+                union in_addr_union address;
+                int family, ifindex;
 
-                r = parse_ip_port(s, &port);
-                if (r == -ERANGE)
-                        return r; /* Valid port syntax, but the numerical value is wrong for a port. */
-                if (r >= 0) {
-                        /* Just a port */
-                        if (socket_ipv6_is_supported())
-                                *a = (SocketAddress) {
-                                        .sockaddr.in6 = {
-                                                .sin6_family = AF_INET6,
-                                                .sin6_port = htobe16(port),
-                                                .sin6_addr = in6addr_any,
-                                        },
-                                        .size = sizeof(struct sockaddr_in6),
-                                };
-                        else
-                                *a = (SocketAddress) {
-                                        .sockaddr.in = {
-                                                .sin_family = AF_INET,
-                                                .sin_port = htobe16(port),
-                                                .sin_addr.s_addr = INADDR_ANY,
-                                        },
-                                        .size = sizeof(struct sockaddr_in),
-                                };
+                r = in_addr_port_ifindex_name_from_string_auto(s, &family, &address, &port, &ifindex, NULL);
+                if (r < 0)
+                        return r;
 
-                } else {
-                        union in_addr_union address;
-                        int family, ifindex;
+                if (port == 0) /* No port, no go. */
+                        return -EINVAL;
 
-                        r = in_addr_port_ifindex_name_from_string_auto(s, &family, &address, &port, &ifindex, NULL);
-                        if (r < 0)
-                                return r;
-
-                        if (port == 0) /* No port, no go. */
-                                return -EINVAL;
-
-                        if (family == AF_INET)
-                                *a = (SocketAddress) {
-                                        .sockaddr.in = {
-                                                .sin_family = AF_INET,
-                                                .sin_addr = address.in,
-                                                .sin_port = htobe16(port),
-                                        },
-                                        .size = sizeof(struct sockaddr_in),
-                                };
-                        else if (family == AF_INET6)
-                                *a = (SocketAddress) {
-                                        .sockaddr.in6 = {
-                                                .sin6_family = AF_INET6,
-                                                .sin6_addr = address.in6,
-                                                .sin6_port = htobe16(port),
-                                                .sin6_scope_id = ifindex,
-                                        },
-                                        .size = sizeof(struct sockaddr_in6),
-                                };
-                        else
-                                assert_not_reached("Family quarrel");
-                }
+                if (family == AF_INET)
+                        *a = (SocketAddress) {
+                                .sockaddr.in = {
+                                        .sin_family = AF_INET,
+                                        .sin_addr = address.in,
+                                        .sin_port = htobe16(port),
+                                },
+                                .size = sizeof(struct sockaddr_in),
+                        };
+                else if (family == AF_INET6)
+                        *a = (SocketAddress) {
+                                .sockaddr.in6 = {
+                                        .sin6_family = AF_INET6,
+                                        .sin6_addr = address.in6,
+                                        .sin6_port = htobe16(port),
+                                        .sin6_scope_id = ifindex,
+                                },
+                                .size = sizeof(struct sockaddr_in6),
+                        };
+                else
+                        assert_not_reached();
         }
 
         return 0;
diff --git a/src/shared/spawn-ask-password-agent.c b/src/shared/spawn-ask-password-agent.c
index 1f07b19..d34cfff 100644
--- a/src/shared/spawn-ask-password-agent.c
+++ b/src/shared/spawn-ask-password-agent.c
@@ -4,10 +4,10 @@
 #include <stdlib.h>
 #include <unistd.h>
 
+#include "exec-util.h"
 #include "log.h"
 #include "process-util.h"
 #include "spawn-ask-password-agent.h"
-#include "util.h"
 
 static pid_t agent_pid = 0;
 
@@ -42,9 +42,7 @@
                 return;
 
         /* Inform agent that we are done */
-        (void) kill_and_sigcont(agent_pid, SIGTERM);
-        (void) wait_for_terminate(agent_pid, NULL);
-        agent_pid = 0;
+        sigterm_wait(TAKE_PID(agent_pid));
 }
 
 int ask_password_agent_open_if_enabled(BusTransport transport, bool ask_password) {
diff --git a/src/shared/spawn-polkit-agent.c b/src/shared/spawn-polkit-agent.c
index a0024eb..ce3c5fb 100644
--- a/src/shared/spawn-polkit-agent.c
+++ b/src/shared/spawn-polkit-agent.c
@@ -6,6 +6,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 
+#include "exec-util.h"
 #include "fd-util.h"
 #include "io-util.h"
 #include "log.h"
@@ -14,7 +15,6 @@
 #include "spawn-polkit-agent.h"
 #include "stdio-util.h"
 #include "time-util.h"
-#include "util.h"
 
 #if ENABLE_POLKIT
 static pid_t agent_pid = 0;
@@ -55,7 +55,7 @@
                 log_error_errno(r, "Failed to fork TTY ask password agent: %m");
         else
                 /* Wait until the agent closes the fd */
-                fd_wait_for_event(pipe_fd[0], POLLHUP, USEC_INFINITY);
+                (void) fd_wait_for_event(pipe_fd[0], POLLHUP, USEC_INFINITY);
 
         safe_close(pipe_fd[0]);
 
@@ -68,9 +68,7 @@
                 return;
 
         /* Inform agent that we are done */
-        (void) kill_and_sigcont(agent_pid, SIGTERM);
-        (void) wait_for_terminate(agent_pid, NULL);
-        agent_pid = 0;
+        sigterm_wait(TAKE_PID(agent_pid));
 }
 
 #else
diff --git a/src/shared/specifier.c b/src/shared/specifier.c
index cb4d6da..05f5b28 100644
--- a/src/shared/specifier.c
+++ b/src/shared/specifier.c
@@ -10,6 +10,7 @@
 
 #include "alloc-util.h"
 #include "architecture.h"
+#include "chase-symlinks.h"
 #include "fd-util.h"
 #include "format-util.h"
 #include "fs-util.h"
@@ -17,6 +18,8 @@
 #include "id128-util.h"
 #include "macro.h"
 #include "os-util.h"
+#include "path-lookup.h"
+#include "path-util.h"
 #include "specifier.h"
 #include "string-util.h"
 #include "strv.h"
@@ -34,11 +37,11 @@
 int specifier_printf(const char *text, size_t max_length, const Specifier table[], const char *root, const void *userdata, char **ret) {
         _cleanup_free_ char *result = NULL;
         bool percent = false;
-        const char *f;
         size_t l;
         char *t;
         int r;
 
+        assert(ret);
         assert(text);
         assert(table);
 
@@ -47,8 +50,10 @@
                 return -ENOMEM;
         t = result;
 
-        for (f = text; *f != '\0'; f++, l--) {
+        for (const char *f = text; *f != '\0'; f++, l--) {
                 if (percent) {
+                        percent = false;
+
                         if (*f == '%')
                                 *(t++) = '%';
                         else {
@@ -65,6 +70,8 @@
                                         r = i->lookup(i->specifier, i->data, root, userdata, &w);
                                         if (r < 0)
                                                 return r;
+                                        if (isempty(w))
+                                                continue;
 
                                         j = t - result;
                                         k = strlen(w);
@@ -81,8 +88,6 @@
                                         *(t++) = *f;
                                 }
                         }
-
-                        percent = false;
                 } else if (*f == '%')
                         percent = true;
                 else
@@ -107,62 +112,116 @@
 /* Generic handler for simple string replacements */
 
 int specifier_string(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        char *n;
+        char *n = NULL;
 
-        n = strdup(strempty(data));
-        if (!n)
-                return -ENOMEM;
+        assert(ret);
+
+        if (!isempty(data)) {
+                n = strdup(data);
+                if (!n)
+                        return -ENOMEM;
+        }
 
         *ret = n;
         return 0;
 }
 
-int specifier_machine_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        sd_id128_t id;
-        char *n;
+int specifier_real_path(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        const char *path = data;
+
+        assert(ret);
+
+        if (!path)
+                return -ENOENT;
+
+        return chase_symlinks(path, root, 0, ret, NULL);
+}
+
+int specifier_real_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        _cleanup_free_ char *path = NULL;
         int r;
 
+        assert(ret);
+
+        r = specifier_real_path(specifier, data, root, userdata, &path);
+        if (r < 0)
+                return r;
+
+        assert(path);
+        return path_extract_directory(path, ret);
+}
+
+int specifier_id128(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        const sd_id128_t *id = ASSERT_PTR(data);
+        char *n;
+
+        n = new(char, SD_ID128_STRING_MAX);
+        if (!n)
+                return -ENOMEM;
+
+        *ret = sd_id128_to_string(*id, n);
+        return 0;
+}
+
+int specifier_uuid(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        const sd_id128_t *id = ASSERT_PTR(data);
+        char *n;
+
+        n = new(char, SD_ID128_UUID_STRING_MAX);
+        if (!n)
+                return -ENOMEM;
+
+        *ret = sd_id128_to_uuid_string(*id, n);
+        return 0;
+}
+
+int specifier_uint64(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        const uint64_t *n = ASSERT_PTR(data);
+
+        return asprintf(ret, "%" PRIu64, *n) < 0 ? -ENOMEM : 0;
+}
+
+int specifier_machine_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        sd_id128_t id;
+        int r;
+
+        assert(ret);
+
         if (root) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 fd = chase_symlinks_and_open("/etc/machine-id", root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_NOCTTY, NULL);
                 if (fd < 0)
-                        return fd;
+                        /* Translate error for missing os-release file to EUNATCH. */
+                        return fd == -ENOENT ? -EUNATCH : fd;
 
-                r = id128_read_fd(fd, ID128_PLAIN, &id);
+                r = id128_read_fd(fd, ID128_FORMAT_PLAIN, &id);
         } else
                 r = sd_id128_get_machine(&id);
         if (r < 0)
                 return r;
 
-        n = new(char, SD_ID128_STRING_MAX);
-        if (!n)
-                return -ENOMEM;
-
-        *ret = sd_id128_to_string(id, n);
-        return 0;
+        return specifier_id128(specifier, &id, root, userdata, ret);
 }
 
 int specifier_boot_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
         sd_id128_t id;
-        char *n;
         int r;
 
+        assert(ret);
+
         r = sd_id128_get_boot(&id);
         if (r < 0)
                 return r;
 
-        n = new(char, SD_ID128_STRING_MAX);
-        if (!n)
-                return -ENOMEM;
-
-        *ret = sd_id128_to_string(id, n);
-        return 0;
+        return specifier_id128(specifier, &id, root, userdata, ret);
 }
 
-int specifier_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+int specifier_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
         char *n;
 
+        assert(ret);
+
         n = gethostname_malloc();
         if (!n)
                 return -ENOMEM;
@@ -171,9 +230,11 @@
         return 0;
 }
 
-int specifier_short_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+int specifier_short_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
         char *n;
 
+        assert(ret);
+
         n = gethostname_short_malloc();
         if (!n)
                 return -ENOMEM;
@@ -182,13 +243,28 @@
         return 0;
 }
 
+int specifier_pretty_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        char *n = NULL;
+
+        assert(ret);
+
+        if (get_pretty_hostname(&n) < 0) {
+                n = gethostname_short_malloc();
+                if (!n)
+                        return -ENOMEM;
+        }
+
+        *ret = n;
+        return 0;
+}
+
 int specifier_kernel_release(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
         struct utsname uts;
         char *n;
-        int r;
 
-        r = uname(&uts);
-        if (r < 0)
+        assert(ret);
+
+        if (uname(&uts) < 0)
                 return -errno;
 
         n = strdup(uts.release);
@@ -202,6 +278,8 @@
 int specifier_architecture(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
         char *t;
 
+        assert(ret);
+
         t = strdup(architecture_to_string(uname_architecture()));
         if (!t)
                 return -ENOMEM;
@@ -210,53 +288,61 @@
         return 0;
 }
 
-static int specifier_os_release_common(const char *field, const char *root, char **ret) {
-        char *t = NULL;
+/* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid
+ * otherwise. We'll return an empty value or NULL in that case from the functions below. But if the
+ * os-release file is missing, we'll return -EUNATCH. This means that something is seriously wrong with the
+ * installation. */
+
+static int parse_os_release_specifier(const char *root, const char *id, char **ret) {
+        char *v = NULL;
         int r;
 
-        r = parse_os_release(root, field, &t);
-        if (r < 0)
-                return r;
-        if (!t) {
-                /* fields in /etc/os-release might quite possibly be missing, even if everything is entirely
-                 * valid otherwise. Let's hence return "" in that case. */
-                t = strdup("");
-                if (!t)
-                        return -ENOMEM;
-        }
+        assert(ret);
 
-        *ret = t;
-        return 0;
+        r = parse_os_release(root, id, &v);
+        if (r >= 0)
+                /* parse_os_release() calls parse_env_file() which only sets the return value for
+                 * entries found. Let's make sure we set the return value in all cases. */
+                *ret = v;
+
+        /* Translate error for missing os-release file to EUNATCH. */
+        return r == -ENOENT ? -EUNATCH : r;
 }
 
 int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        return specifier_os_release_common("ID", root, ret);
+        return parse_os_release_specifier(root, "ID", ret);
 }
 
 int specifier_os_version_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        return specifier_os_release_common("VERSION_ID", root, ret);
+        return parse_os_release_specifier(root, "VERSION_ID", ret);
 }
 
 int specifier_os_build_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        return specifier_os_release_common("BUILD_ID", root, ret);
+        return parse_os_release_specifier(root, "BUILD_ID", ret);
 }
 
 int specifier_os_variant_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        return specifier_os_release_common("VARIANT_ID", root, ret);
+        return parse_os_release_specifier(root, "VARIANT_ID", ret);
 }
 
 int specifier_os_image_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        return specifier_os_release_common("IMAGE_ID", root, ret);
+        return parse_os_release_specifier(root, "IMAGE_ID", ret);
 }
 
 int specifier_os_image_version(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        return specifier_os_release_common("IMAGE_VERSION", root, ret);
+        return parse_os_release_specifier(root, "IMAGE_VERSION", ret);
 }
 
 int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        LookupScope scope = PTR_TO_INT(data);
         char *t;
 
-        t = gid_to_name(getgid());
+        assert(ret);
+
+        if (scope == LOOKUP_SCOPE_GLOBAL)
+                return -EINVAL;
+
+        t = gid_to_name(scope == LOOKUP_SCOPE_USER ? getgid() : 0);
         if (!t)
                 return -ENOMEM;
 
@@ -265,23 +351,42 @@
 }
 
 int specifier_group_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        if (asprintf(ret, UID_FMT, getgid()) < 0)
+        LookupScope scope = PTR_TO_INT(data);
+        gid_t gid;
+
+        assert(ret);
+
+        if (scope == LOOKUP_SCOPE_GLOBAL)
+                return -EINVAL;
+
+        gid = scope == LOOKUP_SCOPE_USER ? getgid() : 0;
+
+        if (asprintf(ret, UID_FMT, gid) < 0)
                 return -ENOMEM;
 
         return 0;
 }
 
 int specifier_user_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        LookupScope scope = PTR_TO_INT(data);
+        uid_t uid;
         char *t;
 
-        /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want to be able
-         * to run this in PID 1, where our user ID is 0, but where NSS lookups are not allowed.
+        assert(ret);
 
-         * We don't use getusername_malloc() here, because we don't want to look at $USER, to remain consistent with
-         * specifer_user_id() below.
+        if (scope == LOOKUP_SCOPE_GLOBAL)
+                return -EINVAL;
+
+        uid = scope == LOOKUP_SCOPE_USER ? getuid() : 0;
+
+        /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want
+         * to be able to run this in PID 1, where our user ID is 0, but where NSS lookups are not allowed.
+
+         * We don't use getusername_malloc() here, because we don't want to look at $USER, to remain
+         * consistent with specifer_user_id() below.
          */
 
-        t = uid_to_name(getuid());
+        t = uid_to_name(uid);
         if (!t)
                 return -ENOMEM;
 
@@ -290,14 +395,24 @@
 }
 
 int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        LookupScope scope = PTR_TO_INT(data);
+        uid_t uid;
 
-        if (asprintf(ret, UID_FMT, getuid()) < 0)
+        assert(ret);
+
+        if (scope == LOOKUP_SCOPE_GLOBAL)
+                return -EINVAL;
+
+        uid = scope == LOOKUP_SCOPE_USER ? getuid() : 0;
+
+        if (asprintf(ret, UID_FMT, uid) < 0)
                 return -ENOMEM;
 
         return 0;
 }
 
 int specifier_user_home(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        assert(ret);
 
         /* On PID 1 (which runs as root) this will not result in NSS,
          * which is good. See above */
@@ -306,6 +421,7 @@
 }
 
 int specifier_user_shell(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+        assert(ret);
 
         /* On PID 1 (which runs as root) this will not result in NSS,
          * which is good. See above */
@@ -318,6 +434,8 @@
         char *copy;
         int r;
 
+        assert(ret);
+
         if (root) /* If root dir is set, don't honour $TMP or similar */
                 p = "/tmp";
         else {
@@ -338,6 +456,8 @@
         char *copy;
         int r;
 
+        assert(ret);
+
         if (root)
                 p = "/var/tmp";
         else {
diff --git a/src/shared/specifier.h b/src/shared/specifier.h
index c433ee2..df72bdc 100644
--- a/src/shared/specifier.h
+++ b/src/shared/specifier.h
@@ -14,11 +14,17 @@
 int specifier_printf(const char *text, size_t max_length, const Specifier table[], const char *root, const void *userdata, char **ret);
 
 int specifier_string(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+int specifier_real_path(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+int specifier_real_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+int specifier_id128(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+int specifier_uuid(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+int specifier_uint64(char specifier, const void *data, const char *root, const void *userdata, char **ret);
 
 int specifier_machine_id(char specifier, const void *data, const char *root, const void *userdata, char **ret);
 int specifier_boot_id(char specifier, const void *data, const char *root, const void *userdata, char **ret);
-int specifier_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret);
-int specifier_short_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+int specifier_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+int specifier_short_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+int specifier_pretty_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret);
 int specifier_kernel_release(char specifier, const void *data, const char *root, const void *userdata, char **ret);
 int specifier_architecture(char specifier, const void *data, const char *root, const void *userdata, char **ret);
 int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret);
@@ -48,6 +54,7 @@
  * %B: the OS build ID, according to /etc/os-release
  * %H: the hostname of the running system
  * %l: the short hostname of the running system
+ * %q: the 'pretty' hostname as per /etc/machine-info
  * %m: the machine ID of the running system
  * %M: the OS image ID, according to /etc/os-release
  * %o: the OS ID according to /etc/os-release
@@ -66,29 +73,30 @@
  * %V: the temporary directory for large, persistent stuff (e.g. /var/tmp, or $TMPDIR, $TEMP, $TMP)
  */
 
-#define COMMON_SYSTEM_SPECIFIERS                  \
-        { 'a', specifier_architecture,    NULL }, \
-        { 'A', specifier_os_image_version,NULL }, \
-        { 'b', specifier_boot_id,         NULL }, \
-        { 'B', specifier_os_build_id,     NULL }, \
-        { 'H', specifier_host_name,       NULL }, \
-        { 'l', specifier_short_host_name, NULL }, \
-        { 'm', specifier_machine_id,      NULL }, \
-        { 'M', specifier_os_image_id,     NULL }, \
-        { 'o', specifier_os_id,           NULL }, \
-        { 'v', specifier_kernel_release,  NULL }, \
-        { 'w', specifier_os_version_id,   NULL }, \
-        { 'W', specifier_os_variant_id,   NULL }
+#define COMMON_SYSTEM_SPECIFIERS                   \
+        { 'a', specifier_architecture,     NULL }, \
+        { 'A', specifier_os_image_version, NULL }, \
+        { 'b', specifier_boot_id,          NULL }, \
+        { 'B', specifier_os_build_id,      NULL }, \
+        { 'H', specifier_hostname,         NULL }, \
+        { 'l', specifier_short_hostname,   NULL }, \
+        { 'q', specifier_pretty_hostname,  NULL }, \
+        { 'm', specifier_machine_id,       NULL }, \
+        { 'M', specifier_os_image_id,      NULL }, \
+        { 'o', specifier_os_id,            NULL }, \
+        { 'v', specifier_kernel_release,   NULL }, \
+        { 'w', specifier_os_version_id,    NULL }, \
+        { 'W', specifier_os_variant_id,    NULL }
 
-#define COMMON_CREDS_SPECIFIERS                   \
-        { 'g', specifier_group_name,      NULL }, \
-        { 'G', specifier_group_id,        NULL }, \
-        { 'u', specifier_user_name,       NULL }, \
-        { 'U', specifier_user_id,         NULL }
+#define COMMON_CREDS_SPECIFIERS(scope)                           \
+        { 'g', specifier_group_name,       INT_TO_PTR(scope) },  \
+        { 'G', specifier_group_id,         INT_TO_PTR(scope) },  \
+        { 'u', specifier_user_name,        INT_TO_PTR(scope) },  \
+        { 'U', specifier_user_id,          INT_TO_PTR(scope) }
 
-#define COMMON_TMP_SPECIFIERS                     \
-        { 'T', specifier_tmp_dir,         NULL }, \
-        { 'V', specifier_var_tmp_dir,     NULL }
+#define COMMON_TMP_SPECIFIERS                      \
+        { 'T', specifier_tmp_dir,          NULL }, \
+        { 'V', specifier_var_tmp_dir,      NULL }
 
 static inline char* specifier_escape(const char *string) {
         return strreplace(string, "%", "%%");
diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c
index e0dd17a..2aa30bd 100644
--- a/src/shared/switch-root.c
+++ b/src/shared/switch-root.c
@@ -9,11 +9,12 @@
 #include <unistd.h>
 
 #include "base-filesystem.h"
+#include "chase-symlinks.h"
 #include "fd-util.h"
-#include "fs-util.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "missing_syscall.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
 #include "path-util.h"
@@ -23,7 +24,6 @@
 #include "strv.h"
 #include "switch-root.h"
 #include "user-util.h"
-#include "util.h"
 
 int switch_root(const char *new_root,
                 const char *old_root_after, /* path below the new root, where to place the old root after the transition */
@@ -31,9 +31,7 @@
                 unsigned long mount_flags) {  /* MS_MOVE or MS_BIND */
 
         _cleanup_free_ char *resolved_old_root_after = NULL;
-        _cleanup_close_ int old_root_fd = -1;
-        bool old_root_remove;
-        const char *i;
+        _cleanup_close_ int old_root_fd = -EBADF;
         int r;
 
         assert(new_root);
@@ -43,12 +41,16 @@
                 return 0;
 
         /* Check if we shall remove the contents of the old root */
-        old_root_remove = in_initrd();
-        if (old_root_remove) {
-                old_root_fd = open("/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY|O_DIRECTORY);
-                if (old_root_fd < 0)
-                        return log_error_errno(errno, "Failed to open root directory: %m");
-        }
+        old_root_fd = open("/", O_RDONLY | O_CLOEXEC | O_DIRECTORY);
+        if (old_root_fd < 0)
+                return log_error_errno(errno, "Failed to open root directory: %m");
+        r = fd_is_temporary_fs(old_root_fd);
+        if (r < 0)
+                return log_error_errno(r, "Failed to stat root directory: %m");
+        if (r > 0)
+                log_debug("Root directory is on tmpfs, will do cleanup later.");
+        else
+                old_root_fd = safe_close(old_root_fd);
 
         /* Determine where we shall place the old root after the transition */
         r = chase_symlinks(old_root_after, new_root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &resolved_old_root_after, NULL);
@@ -64,12 +66,12 @@
         if (mount(NULL, "/", NULL, MS_REC|MS_PRIVATE, NULL) < 0)
                 return log_error_errno(errno, "Failed to set \"/\" mount propagation to private: %m");
 
-        FOREACH_STRING(i, "/sys", "/dev", "/run", "/proc") {
+        FOREACH_STRING(path, "/sys", "/dev", "/run", "/proc") {
                 _cleanup_free_ char *chased = NULL;
 
-                r = chase_symlinks(i, new_root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &chased, NULL);
+                r = chase_symlinks(path, new_root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &chased, NULL);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to resolve %s/%s: %m", new_root, i);
+                        return log_error_errno(r, "Failed to resolve %s/%s: %m", new_root, path);
                 if (r > 0) {
                         /* Already exists. Let's see if it is a mount point already. */
                         r = path_is_mount_point(chased, NULL, 0);
@@ -81,8 +83,8 @@
                          /* Doesn't exist yet? */
                         (void) mkdir_p_label(chased, 0755);
 
-                if (mount(i, chased, NULL, mount_flags, NULL) < 0)
-                        return log_error_errno(errno, "Failed to mount %s to %s: %m", i, chased);
+                if (mount(path, chased, NULL, mount_flags, NULL) < 0)
+                        return log_error_errno(errno, "Failed to mount %s to %s: %m", path, chased);
         }
 
         /* Do not fail if base_filesystem_create() fails. Not all switch roots are like base_filesystem_create() wants
@@ -118,9 +120,8 @@
                 struct stat rb;
 
                 if (fstat(old_root_fd, &rb) < 0)
-                        log_warning_errno(errno, "Failed to stat old root directory, leaving: %m");
-                else
-                        (void) rm_rf_children(TAKE_FD(old_root_fd), 0, &rb); /* takes possession of the dir fd, even on failure */
+                        return log_error_errno(errno, "Failed to stat old root directory: %m");
+                (void) rm_rf_children(TAKE_FD(old_root_fd), 0, &rb); /* takes possession of the dir fd, even on failure */
         }
 
         return 0;
diff --git a/src/shared/tests.c b/src/shared/tests.c
index 6d35bc6..8884c8e 100644
--- a/src/shared/tests.c
+++ b/src/shared/tests.c
@@ -6,13 +6,6 @@
 #include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/wait.h>
-#include <util.h>
-
-/* When we include libgen.h because we need dirname() we immediately
- * undefine basename() since libgen.h defines it as a macro to the POSIX
- * version which is really broken. We prefer GNU basename(). */
-#include <libgen.h>
-#undef basename
 
 #include "sd-bus.h"
 
@@ -25,6 +18,7 @@
 #include "cgroup-util.h"
 #include "env-file.h"
 #include "env-util.h"
+#include "fd-util.h"
 #include "fs-util.h"
 #include "log.h"
 #include "namespace-util.h"
@@ -33,6 +27,7 @@
 #include "random-util.h"
 #include "strv.h"
 #include "tests.h"
+#include "tmpfile-util.h"
 
 char* setup_fake_runtime_dir(void) {
         char t[] = "/tmp/fake-xdg-runtime-XXXXXX", *p;
@@ -46,24 +41,26 @@
 
 static void load_testdata_env(void) {
         static bool called = false;
-        _cleanup_free_ char *s = NULL;
-        _cleanup_free_ char *envpath = NULL;
+        _cleanup_free_ char *s = NULL, *d = NULL, *envpath = NULL;
         _cleanup_strv_free_ char **pairs = NULL;
-        char **k, **v;
+        int r;
 
         if (called)
                 return;
         called = true;
 
         assert_se(readlink_and_make_absolute("/proc/self/exe", &s) >= 0);
-        dirname(s);
+        assert_se(path_extract_directory(s, &d) >= 0);
+        assert_se(envpath = path_join(d, "systemd-runtest.env"));
 
-        envpath = path_join(s, "systemd-runtest.env");
-        if (load_env_file_pairs(NULL, envpath, &pairs) < 0)
+        r = load_env_file_pairs(NULL, envpath, &pairs);
+        if (r < 0) {
+                log_debug_errno(r, "Reading %s failed: %m", envpath);
                 return;
+        }
 
         STRV_FOREACH_PAIR(k, v, pairs)
-                setenv(*k, *v, 0);
+                assert_se(setenv(*k, *v, 0) >= 0);
 }
 
 int get_testdata_dir(const char *suffix, char **ret) {
@@ -133,6 +130,23 @@
         return EXIT_TEST_SKIP;
 }
 
+int write_tmpfile(char *pattern, const char *contents) {
+        _cleanup_close_ int fd = -EBADF;
+
+        assert(pattern);
+        assert(contents);
+
+        fd = mkostemp_safe(pattern);
+        if (fd < 0)
+                return fd;
+
+        ssize_t l = strlen(contents);
+        errno = 0;
+        if (write(fd, contents, l) != l)
+                return errno_or_else(EIO);
+        return 0;
+}
+
 bool have_namespaces(void) {
         siginfo_t si = {};
         pid_t pid;
@@ -160,7 +174,7 @@
         if (si.si_status == EXIT_FAILURE)
                 return false;
 
-        assert_not_reached("unexpected exit code");
+        assert_not_reached();
 }
 
 bool can_memlock(void) {
@@ -307,16 +321,15 @@
          * just the general CI environment type, but also whether we're sanitizing or not, etc. The caller is
          * expected to use strstr on the returned value. */
         static const char *ans = POINTER_MAX;
-        const char *p;
         int r;
 
         if (ans != POINTER_MAX)
                 return ans;
 
         /* We allow specifying the environment with $CITYPE. Nobody uses this so far, but we are ready. */
-        p = getenv("CITYPE");
-        if (!isempty(p))
-                return (ans = p);
+        const char *citype = getenv("CITYPE");
+        if (!isempty(citype))
+                return (ans = citype);
 
         if (getenv_bool("TRAVIS") > 0)
                 return (ans = "travis");
@@ -327,12 +340,12 @@
         if (getenv("AUTOPKGTEST_ARTIFACTS") || getenv("AUTOPKGTEST_TMP"))
                 return (ans = "autopkgtest");
 
-        FOREACH_STRING(p, "CI", "CONTINOUS_INTEGRATION") {
+        FOREACH_STRING(var, "CI", "CONTINOUS_INTEGRATION") {
                 /* Those vars are booleans according to Semaphore and Travis docs:
                  * https://docs.travis-ci.com/user/environment-variables/#default-environment-variables
                  * https://docs.semaphoreci.com/ci-cd-environment/environment-variables/#ci
                  */
-                r = getenv_bool(p);
+                r = getenv_bool(var);
                 if (r > 0)
                         return (ans = "unknown"); /* Some other unknown thing */
                 if (r == 0)
diff --git a/src/shared/tests.h b/src/shared/tests.h
index c135076..cabd659 100644
--- a/src/shared/tests.h
+++ b/src/shared/tests.h
@@ -5,7 +5,9 @@
 
 #include "sd-daemon.h"
 
+#include "argv-util.h"
 #include "macro.h"
+#include "static-destruct.h"
 
 static inline bool manager_errno_skip_test(int r) {
         return IN_SET(abs(r),
@@ -28,6 +30,8 @@
 int log_tests_skipped(const char *message);
 int log_tests_skipped_errno(int r, const char *message);
 
+int write_tmpfile(char *pattern, const char *contents);
+
 bool have_namespaces(void);
 
 /* We use the small but non-trivial limit here */
@@ -38,8 +42,98 @@
         if (sd_booted() > 0) {                                      \
                 x;                                                  \
         } else {                                                    \
-                printf("systemd not booted skipping '%s'\n", #x);   \
+                printf("systemd not booted, skipping '%s'\n", #x);   \
         }
 
 /* Provide a convenient way to check if we're running in CI. */
 const char *ci_environment(void);
+
+typedef struct TestFunc {
+        union f {
+                void (*void_func)(void);
+                int (*int_func)(void);
+        } f;
+        const char * const name;
+        bool has_ret:1;
+        bool sd_booted:1;
+} TestFunc;
+
+/* See static-destruct.h for an explanation of how this works. */
+#define REGISTER_TEST(func, ...)                                                                        \
+        _Pragma("GCC diagnostic ignored \"-Wattributes\"")                                              \
+        _section_("SYSTEMD_TEST_TABLE") _alignptr_ _used_ _retain_ _variable_no_sanitize_address_       \
+        static const TestFunc UNIQ_T(static_test_table_entry, UNIQ) = {                                 \
+                .f = (union f) &(func),                                                                 \
+                .name = STRINGIFY(func),                                                                \
+                .has_ret = __builtin_types_compatible_p(typeof((union f){}.int_func), typeof(&(func))), \
+                ##__VA_ARGS__                                                                           \
+        }
+
+extern const TestFunc _weak_ __start_SYSTEMD_TEST_TABLE[];
+extern const TestFunc _weak_ __stop_SYSTEMD_TEST_TABLE[];
+
+#define TEST(name, ...)                            \
+        static void test_##name(void);             \
+        REGISTER_TEST(test_##name, ##__VA_ARGS__); \
+        static void test_##name(void)
+
+#define TEST_RET(name, ...)                        \
+        static int test_##name(void);              \
+        REGISTER_TEST(test_##name, ##__VA_ARGS__); \
+        static int test_##name(void)
+
+static inline int run_test_table(void) {
+        int r = EXIT_SUCCESS;
+
+        if (!__start_SYSTEMD_TEST_TABLE)
+                return r;
+
+        const TestFunc *t = ALIGN_PTR(__start_SYSTEMD_TEST_TABLE);
+        while (t < __stop_SYSTEMD_TEST_TABLE) {
+
+                if (t->sd_booted && sd_booted() <= 0) {
+                        log_info("/* systemd not booted, skipping %s */", t->name);
+                        if (t->has_ret && r == EXIT_SUCCESS)
+                                r = EXIT_TEST_SKIP;
+                } else {
+                        log_info("/* %s */", t->name);
+
+                        if (t->has_ret) {
+                                int r2 = t->f.int_func();
+                                if (r == EXIT_SUCCESS)
+                                        r = r2;
+                        } else
+                                t->f.void_func();
+                }
+
+                t = ALIGN_PTR(t + 1);
+        }
+
+        return r;
+}
+
+#define DEFINE_TEST_MAIN_FULL(log_level, intro, outro)    \
+        int main(int argc, char *argv[]) {                \
+                int (*_intro)(void) = intro;              \
+                int (*_outro)(void) = outro;              \
+                int _r, _q;                               \
+                test_setup_logging(log_level);            \
+                save_argc_argv(argc, argv);               \
+                _r = _intro ? _intro() : EXIT_SUCCESS;    \
+                if (_r == EXIT_SUCCESS)                   \
+                        _r = run_test_table();            \
+                _q = _outro ? _outro() : EXIT_SUCCESS;    \
+                static_destruct();                        \
+                if (_r < 0)                               \
+                        return EXIT_FAILURE;              \
+                if (_r != EXIT_SUCCESS)                   \
+                        return _r;                        \
+                if (_q < 0)                               \
+                        return EXIT_FAILURE;              \
+                return _q;                                \
+        }
+
+#define DEFINE_TEST_MAIN_WITH_INTRO(log_level, intro)   \
+        DEFINE_TEST_MAIN_FULL(log_level, intro, NULL)
+#define DEFINE_TEST_MAIN(log_level)                     \
+        DEFINE_TEST_MAIN_FULL(log_level, NULL, NULL)
diff --git a/src/shared/tmpfile-util-label.c b/src/shared/tmpfile-util-label.c
index d37c0b0..17c5038 100644
--- a/src/shared/tmpfile-util-label.c
+++ b/src/shared/tmpfile-util-label.c
@@ -14,6 +14,8 @@
 
         int r;
 
+        assert(path);
+
         r = mac_selinux_create_file_prepare(target, S_IFREG);
         if (r < 0)
                 return r;
diff --git a/src/shared/tmpfile-util-label.h b/src/shared/tmpfile-util-label.h
index 01afc06..4987057 100644
--- a/src/shared/tmpfile-util-label.h
+++ b/src/shared/tmpfile-util-label.h
@@ -3,8 +3,8 @@
 
 #include <stdio.h>
 
-/* These functions are split out of tmpfile-util.h (and not for example just flags to the functions they wrap) in order
- * to optimize linking: This way, -lselinux is needed only for the callers of these functions that need selinux, but
- * not for all */
+/* These functions are split out of tmpfile-util.h (and not for example just flags to the functions they
+ * wrap) in order to optimize linking: this way, -lselinux is needed only for the callers of these functions
+ * that need selinux, but not for all. */
 
 int fopen_temporary_label(const char *target, const char *path, FILE **f, char **temp_path);
diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c
index 56a7fe6..4345b95 100644
--- a/src/shared/tpm2-util.c
+++ b/src/shared/tpm2-util.c
@@ -1,21 +1,29 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "extract-word.h"
-#include "parse-util.h"
-#include "tpm2-util.h"
-
-#if HAVE_TPM2
 #include "alloc-util.h"
+#include "constants.h"
+#include "cryptsetup-util.h"
 #include "dirent-util.h"
 #include "dlfcn-util.h"
+#include "efi-api.h"
+#include "extract-word.h"
 #include "fd-util.h"
+#include "fileio.h"
 #include "format-table.h"
 #include "fs-util.h"
 #include "hexdecoct.h"
+#include "hmac.h"
 #include "memory-util.h"
+#include "openssl-util.h"
+#include "parse-util.h"
 #include "random-util.h"
+#include "sha256.h"
+#include "stat-util.h"
 #include "time-util.h"
+#include "tpm2-util.h"
+#include "virt.h"
 
+#if HAVE_TPM2
 static void *libtss2_esys_dl = NULL;
 static void *libtss2_rc_dl = NULL;
 static void *libtss2_mu_dl = NULL;
@@ -25,14 +33,24 @@
 void (*sym_Esys_Finalize)(ESYS_CONTEXT **context) = NULL;
 TSS2_RC (*sym_Esys_FlushContext)(ESYS_CONTEXT *esysContext, ESYS_TR flushHandle) = NULL;
 void (*sym_Esys_Free)(void *ptr) = NULL;
+TSS2_RC (*sym_Esys_GetCapability)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2_CAP capability, UINT32 property, UINT32 propertyCount, TPMI_YES_NO *moreData, TPMS_CAPABILITY_DATA **capabilityData);
 TSS2_RC (*sym_Esys_GetRandom)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, UINT16 bytesRequested, TPM2B_DIGEST **randomBytes) = NULL;
 TSS2_RC (*sym_Esys_Initialize)(ESYS_CONTEXT **esys_context,  TSS2_TCTI_CONTEXT *tcti, TSS2_ABI_VERSION *abiVersion) = NULL;
 TSS2_RC (*sym_Esys_Load)(ESYS_CONTEXT *esysContext, ESYS_TR parentHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_PRIVATE *inPrivate, const TPM2B_PUBLIC *inPublic, ESYS_TR *objectHandle) = NULL;
+TSS2_RC (*sym_Esys_LoadExternal)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_SENSITIVE *inPrivate, const TPM2B_PUBLIC *inPublic, ESYS_TR hierarchy, ESYS_TR *objectHandle);
+TSS2_RC (*sym_Esys_PCR_Extend)(ESYS_CONTEXT *esysContext, ESYS_TR pcrHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPML_DIGEST_VALUES *digests);
+TSS2_RC (*sym_Esys_PCR_Read)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1,ESYS_TR shandle2, ESYS_TR shandle3, const TPML_PCR_SELECTION *pcrSelectionIn, UINT32 *pcrUpdateCounter, TPML_PCR_SELECTION **pcrSelectionOut, TPML_DIGEST **pcrValues);
+TSS2_RC (*sym_Esys_PolicyAuthorize)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *approvedPolicy, const TPM2B_NONCE *policyRef, const TPM2B_NAME *keySign, const TPMT_TK_VERIFIED *checkTicket);
+TSS2_RC (*sym_Esys_PolicyAuthValue)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3) = NULL;
 TSS2_RC (*sym_Esys_PolicyGetDigest)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_DIGEST **policyDigest) = NULL;
 TSS2_RC (*sym_Esys_PolicyPCR)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *pcrDigest, const TPML_PCR_SELECTION *pcrs) = NULL;
 TSS2_RC (*sym_Esys_StartAuthSession)(ESYS_CONTEXT *esysContext, ESYS_TR tpmKey, ESYS_TR bind, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_NONCE *nonceCaller, TPM2_SE sessionType, const TPMT_SYM_DEF *symmetric, TPMI_ALG_HASH authHash, ESYS_TR *sessionHandle) = NULL;
 TSS2_RC (*sym_Esys_Startup)(ESYS_CONTEXT *esysContext, TPM2_SU startupType) = NULL;
+TSS2_RC (*sym_Esys_TRSess_SetAttributes)(ESYS_CONTEXT *esysContext, ESYS_TR session, TPMA_SESSION flags, TPMA_SESSION mask);
+TSS2_RC (*sym_Esys_TR_GetName)(ESYS_CONTEXT *esysContext, ESYS_TR handle, TPM2B_NAME **name);
+TSS2_RC (*sym_Esys_TR_SetAuth)(ESYS_CONTEXT *esysContext, ESYS_TR handle, TPM2B_AUTH const *authValue) = NULL;
 TSS2_RC (*sym_Esys_Unseal)(ESYS_CONTEXT *esysContext, ESYS_TR itemHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_SENSITIVE_DATA **outData) = NULL;
+TSS2_RC (*sym_Esys_VerifySignature)(ESYS_CONTEXT *esysContext, ESYS_TR keyHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *digest, const TPMT_SIGNATURE *signature, TPMT_TK_VERIFIED **validation);
 
 const char* (*sym_Tss2_RC_Decode)(TSS2_RC rc) = NULL;
 
@@ -51,14 +69,24 @@
                         DLSYM_ARG(Esys_Finalize),
                         DLSYM_ARG(Esys_FlushContext),
                         DLSYM_ARG(Esys_Free),
+                        DLSYM_ARG(Esys_GetCapability),
                         DLSYM_ARG(Esys_GetRandom),
                         DLSYM_ARG(Esys_Initialize),
                         DLSYM_ARG(Esys_Load),
+                        DLSYM_ARG(Esys_LoadExternal),
+                        DLSYM_ARG(Esys_PCR_Extend),
+                        DLSYM_ARG(Esys_PCR_Read),
+                        DLSYM_ARG(Esys_PolicyAuthorize),
+                        DLSYM_ARG(Esys_PolicyAuthValue),
                         DLSYM_ARG(Esys_PolicyGetDigest),
                         DLSYM_ARG(Esys_PolicyPCR),
                         DLSYM_ARG(Esys_StartAuthSession),
                         DLSYM_ARG(Esys_Startup),
-                        DLSYM_ARG(Esys_Unseal));
+                        DLSYM_ARG(Esys_TRSess_SetAttributes),
+                        DLSYM_ARG(Esys_TR_GetName),
+                        DLSYM_ARG(Esys_TR_SetAuth),
+                        DLSYM_ARG(Esys_Unseal),
+                        DLSYM_ARG(Esys_VerifySignature));
         if (r < 0)
                 return r;
 
@@ -76,68 +104,51 @@
                         DLSYM_ARG(Tss2_MU_TPM2B_PUBLIC_Unmarshal));
 }
 
-struct tpm2_context {
-        ESYS_CONTEXT *esys_context;
-        void *tcti_dl;
-        TSS2_TCTI_CONTEXT *tcti_context;
-};
-
-static void tpm2_context_destroy(struct tpm2_context *c) {
-        assert(c);
+static Tpm2Context *tpm2_context_free(Tpm2Context *c) {
+        if (!c)
+                return NULL;
 
         if (c->esys_context)
                 sym_Esys_Finalize(&c->esys_context);
 
         c->tcti_context = mfree(c->tcti_context);
+        c->tcti_dl = safe_dlclose(c->tcti_dl);
 
-        if (c->tcti_dl) {
-                dlclose(c->tcti_dl);
-                c->tcti_dl = NULL;
-        }
+        return mfree(c);
 }
 
-static inline void Esys_Finalize_wrapper(ESYS_CONTEXT **c) {
-        /* A wrapper around Esys_Finalize() for use with _cleanup_(). Only reasons we need this wrapper is
-         * because the function itself warn logs if we'd pass a pointer to NULL, and we don't want that. */
-        if (*c)
-                sym_Esys_Finalize(c);
-}
+DEFINE_TRIVIAL_REF_UNREF_FUNC(Tpm2Context, tpm2_context, tpm2_context_free);
 
-static inline void Esys_Freep(void *p) {
-        if (*(void**) p)
-                sym_Esys_Free(*(void**) p);
-}
-
-static ESYS_TR flush_context_verbose(ESYS_CONTEXT *c, ESYS_TR handle) {
-        TSS2_RC rc;
-
-        if (!c || handle == ESYS_TR_NONE)
-                return ESYS_TR_NONE;
-
-        rc = sym_Esys_FlushContext(c, handle);
-        if (rc != TSS2_RC_SUCCESS) /* We ignore failures here (besides debug logging), since this is called
-                                    * in error paths, where we cannot do anything about failures anymore. And
-                                    * when it is called in successful codepaths by this time we already did
-                                    * what we wanted to do, and got the results we wanted so there's no
-                                    * reason to make this fail more loudly than necessary. */
-                log_debug("Failed to get flush context of TPM, ignoring: %s", sym_Tss2_RC_Decode(rc));
-
-        return ESYS_TR_NONE;
-}
-
-static int tpm2_init(const char *device, struct tpm2_context *ret) {
-        _cleanup_(Esys_Finalize_wrapper) ESYS_CONTEXT *c = NULL;
-        _cleanup_free_ TSS2_TCTI_CONTEXT *tcti = NULL;
-        _cleanup_(dlclosep) void *dl = NULL;
+int tpm2_context_new(const char *device, Tpm2Context **ret_context) {
+        _cleanup_tpm2_context_ Tpm2Context *context = NULL;
         TSS2_RC rc;
         int r;
 
+        assert(ret_context);
+
+        context = new0(Tpm2Context, 1);
+        if (!context)
+                return log_oom();
+
+        context->n_ref = 1;
+
         r = dlopen_tpm2();
         if (r < 0)
                 return log_error_errno(r, "TPM2 support not installed: %m");
 
-        if (!device)
+        if (!device) {
                 device = secure_getenv("SYSTEMD_TPM2_DEVICE");
+                if (device)
+                        /* Setting the env var to an empty string forces tpm2-tss' own device picking
+                         * logic to be used. */
+                        device = empty_to_null(device);
+                else
+                        /* If nothing was specified explicitly, we'll use a hardcoded default: the "device" tcti
+                         * driver and the "/dev/tpmrm0" device. We do this since on some distributions the tpm2-abrmd
+                         * might be used and we really don't want that, since it is a system service and that creates
+                         * various ordering issues/deadlocks during early boot. */
+                        device = "device:/dev/tpmrm0";
+        }
 
         if (device) {
                 const char *param, *driver, *fn;
@@ -147,20 +158,32 @@
 
                 param = strchr(device, ':');
                 if (param) {
-                        driver = strndupa(device, param - device);
+                        /* Syntax #1: Pair of driver string and arbitrary parameter */
+                        driver = strndupa_safe(device, param - device);
+                        if (isempty(driver))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 driver name is empty, refusing.");
+
                         param++;
-                } else {
+                } else if (path_is_absolute(device) && path_is_valid(device)) {
+                        /* Syntax #2: TPM device node */
                         driver = "device";
                         param = device;
-                }
+                } else
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid TPM2 driver string, refusing.");
+
+                log_debug("Using TPM2 TCTI driver '%s' with device '%s'.", driver, param);
 
                 fn = strjoina("libtss2-tcti-", driver, ".so.0");
 
-                dl = dlopen(fn, RTLD_NOW);
-                if (!dl)
+                /* Better safe than sorry, let's refuse strings that cannot possibly be valid driver early, before going to disk. */
+                if (!filename_is_valid(fn))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 driver name '%s' not valid, refusing.", driver);
+
+                context->tcti_dl = dlopen(fn, RTLD_NOW);
+                if (!context->tcti_dl)
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "Failed to load %s: %s", fn, dlerror());
 
-                func = dlsym(dl, TSS2_TCTI_INFO_SYMBOL);
+                func = dlsym(context->tcti_dl, TSS2_TCTI_INFO_SYMBOL);
                 if (!func)
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                                "Failed to find TCTI info symbol " TSS2_TCTI_INFO_SYMBOL ": %s",
@@ -170,7 +193,6 @@
                 if (!info)
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "Unable to get TCTI info data.");
 
-
                 log_debug("Loaded TCTI module '%s' (%s) [Version %" PRIu32 "]", info->name, info->description, info->version);
 
                 rc = info->init(NULL, &sz, NULL);
@@ -178,22 +200,22 @@
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                                "Failed to initialize TCTI context: %s", sym_Tss2_RC_Decode(rc));
 
-                tcti = malloc0(sz);
-                if (!tcti)
+                context->tcti_context = malloc0(sz);
+                if (!context->tcti_context)
                         return log_oom();
 
-                rc = info->init(tcti, &sz, param);
+                rc = info->init(context->tcti_context, &sz, param);
                 if (rc != TPM2_RC_SUCCESS)
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                                "Failed to initialize TCTI context: %s", sym_Tss2_RC_Decode(rc));
         }
 
-        rc = sym_Esys_Initialize(&c, tcti, NULL);
+        rc = sym_Esys_Initialize(&context->esys_context, context->tcti_context, NULL);
         if (rc != TSS2_RC_SUCCESS)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                        "Failed to initialize TPM context: %s", sym_Tss2_RC_Decode(rc));
 
-        rc = sym_Esys_Startup(c, TPM2_SU_CLEAR);
+        rc = sym_Esys_Startup(context->esys_context, TPM2_SU_CLEAR);
         if (rc == TPM2_RC_INITIALIZE)
                 log_debug("TPM already started up.");
         else if (rc == TSS2_RC_SUCCESS)
@@ -202,18 +224,58 @@
                 return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                        "Failed to start up TPM: %s", sym_Tss2_RC_Decode(rc));
 
-        *ret = (struct tpm2_context) {
-                .esys_context = TAKE_PTR(c),
-                .tcti_context = TAKE_PTR(tcti),
-                .tcti_dl = TAKE_PTR(dl),
-        };
+        *ret_context = TAKE_PTR(context);
 
         return 0;
 }
 
-static int tpm2_credit_random(ESYS_CONTEXT *c) {
+static void tpm2_handle_flush(ESYS_CONTEXT *esys_context, ESYS_TR esys_handle) {
+        if (!esys_context || esys_handle == ESYS_TR_NONE)
+                return;
+
+        TSS2_RC rc = sym_Esys_FlushContext(esys_context, esys_handle);
+        if (rc != TSS2_RC_SUCCESS) /* We ignore failures here (besides debug logging), since this is called
+                                    * in error paths, where we cannot do anything about failures anymore. And
+                                    * when it is called in successful codepaths by this time we already did
+                                    * what we wanted to do, and got the results we wanted so there's no
+                                    * reason to make this fail more loudly than necessary. */
+                log_debug("Failed to flush TPM handle, ignoring: %s", sym_Tss2_RC_Decode(rc));
+}
+
+Tpm2Handle *tpm2_handle_free(Tpm2Handle *handle) {
+        if (!handle)
+                return NULL;
+
+        _cleanup_tpm2_context_ Tpm2Context *context = (Tpm2Context*)handle->tpm2_context;
+        if (context)
+                tpm2_handle_flush(context->esys_context, handle->esys_handle);
+
+        return mfree(handle);
+}
+
+int tpm2_handle_new(Tpm2Context *context, Tpm2Handle **ret_handle) {
+        _cleanup_tpm2_handle_ Tpm2Handle *handle = NULL;
+
+        assert(ret_handle);
+
+        handle = new0(Tpm2Handle, 1);
+        if (!handle)
+                return log_oom();
+
+        handle->tpm2_context = tpm2_context_ref(context);
+        handle->esys_handle = ESYS_TR_NONE;
+
+        *ret_handle = TAKE_PTR(handle);
+
+        return 0;
+}
+
+#define TPM2_CREDIT_RANDOM_FLAG_PATH "/run/systemd/tpm-rng-credited"
+
+static int tpm2_credit_random(Tpm2Context *c) {
         size_t rps, done = 0;
         TSS2_RC rc;
+        usec_t t;
         int r;
 
         assert(c);
@@ -223,11 +285,21 @@
          * but likely better. Note that we don't trust the TPM RNG very much, hence do not actually credit
          * any entropy. */
 
+        if (access(TPM2_CREDIT_RANDOM_FLAG_PATH, F_OK) < 0) {
+                if (errno != ENOENT)
+                        log_debug_errno(errno, "Failed to detect if '" TPM2_CREDIT_RANDOM_FLAG_PATH "' exists, ignoring: %m");
+        } else {
+                log_debug("Not adding TPM2 entropy to the kernel random pool again.");
+                return 0; /* Already done */
+        }
+
+        t = now(CLOCK_MONOTONIC);
+
         for (rps = random_pool_size(); rps > 0;) {
                 _cleanup_(Esys_Freep) TPM2B_DIGEST *buffer = NULL;
 
                 rc = sym_Esys_GetRandom(
-                                c,
+                                c->esys_context,
                                 ESYS_TR_NONE,
                                 ESYS_TR_NONE,
                                 ESYS_TR_NONE,
@@ -241,7 +313,7 @@
                         return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                                "Zero-sized entropy returned from TPM.");
 
-                r = random_write_entropy(-1, buffer->buffer, buffer->size, false);
+                r = random_write_entropy(-1, buffer->buffer, buffer->size, /* credit= */ false);
                 if (r < 0)
                         return log_error_errno(r, "Failed wo write entropy to kernel: %m");
 
@@ -249,187 +321,1103 @@
                 rps = LESS_BY(rps, buffer->size);
         }
 
-        log_debug("Added %zu bytes of entropy to the kernel random pool.", done);
+        log_debug("Added %zu bytes of TPM2 entropy to the kernel random pool in %s.", done, FORMAT_TIMESPAN(now(CLOCK_MONOTONIC) - t, 0));
+
+        r = touch(TPM2_CREDIT_RANDOM_FLAG_PATH);
+        if (r < 0)
+                log_debug_errno(r, "Failed to touch '" TPM2_CREDIT_RANDOM_FLAG_PATH "', ignoring: %m");
+
         return 0;
 }
 
 static int tpm2_make_primary(
-                ESYS_CONTEXT *c,
-                ESYS_TR *ret_primary) {
+                Tpm2Context *c,
+                Tpm2Handle **ret_primary,
+                TPMI_ALG_PUBLIC alg,
+                TPMI_ALG_PUBLIC *ret_alg) {
 
         static const TPM2B_SENSITIVE_CREATE primary_sensitive = {};
-        static const TPM2B_PUBLIC primary_template = {
+        static const TPM2B_PUBLIC primary_template_ecc = {
                 .size = sizeof(TPMT_PUBLIC),
                 .publicArea = {
                         .type = TPM2_ALG_ECC,
                         .nameAlg = TPM2_ALG_SHA256,
                         .objectAttributes = TPMA_OBJECT_RESTRICTED|TPMA_OBJECT_DECRYPT|TPMA_OBJECT_FIXEDTPM|TPMA_OBJECT_FIXEDPARENT|TPMA_OBJECT_SENSITIVEDATAORIGIN|TPMA_OBJECT_USERWITHAUTH,
-                        .parameters = {
-                                .eccDetail = {
-                                        .symmetric = {
-                                                .algorithm = TPM2_ALG_AES,
-                                                .keyBits.aes = 128,
-                                                .mode.aes = TPM2_ALG_CFB,
-                                        },
-                                        .scheme.scheme = TPM2_ALG_NULL,
-                                        .curveID = TPM2_ECC_NIST_P256,
-                                        .kdf.scheme = TPM2_ALG_NULL,
+                        .parameters.eccDetail = {
+                                .symmetric = {
+                                        .algorithm = TPM2_ALG_AES,
+                                        .keyBits.aes = 128,
+                                        .mode.aes = TPM2_ALG_CFB,
                                 },
+                                .scheme.scheme = TPM2_ALG_NULL,
+                                .curveID = TPM2_ECC_NIST_P256,
+                                .kdf.scheme = TPM2_ALG_NULL,
                         },
                 },
         };
+        static const TPM2B_PUBLIC primary_template_rsa = {
+                .size = sizeof(TPMT_PUBLIC),
+                .publicArea = {
+                        .type = TPM2_ALG_RSA,
+                        .nameAlg = TPM2_ALG_SHA256,
+                        .objectAttributes = TPMA_OBJECT_RESTRICTED|TPMA_OBJECT_DECRYPT|TPMA_OBJECT_FIXEDTPM|TPMA_OBJECT_FIXEDPARENT|TPMA_OBJECT_SENSITIVEDATAORIGIN|TPMA_OBJECT_USERWITHAUTH,
+                        .parameters.rsaDetail = {
+                                .symmetric = {
+                                        .algorithm = TPM2_ALG_AES,
+                                        .keyBits.aes = 128,
+                                        .mode.aes = TPM2_ALG_CFB,
+                                },
+                                .scheme.scheme = TPM2_ALG_NULL,
+                                .keyBits = 2048,
+                        },
+                },
+        };
+
         static const TPML_PCR_SELECTION creation_pcr = {};
-        ESYS_TR primary = ESYS_TR_NONE;
         TSS2_RC rc;
+        usec_t ts;
+        int r;
 
         log_debug("Creating primary key on TPM.");
 
-        rc = sym_Esys_CreatePrimary(
-                        c,
-                        ESYS_TR_RH_OWNER,
-                        ESYS_TR_PASSWORD,
-                        ESYS_TR_NONE,
-                        ESYS_TR_NONE,
-                        &primary_sensitive,
-                        &primary_template,
-                        NULL,
-                        &creation_pcr,
-                        &primary,
-                        NULL,
-                        NULL,
-                        NULL,
-                        NULL);
+        /* So apparently not all TPM2 devices support ECC. ECC is generally preferably, because it's so much
+         * faster, noticeably so (~10s vs. ~240ms on my system). Hence, unless explicitly configured let's
+         * try to use ECC first, and if that does not work, let's fall back to RSA. */
 
-        if (rc != TSS2_RC_SUCCESS)
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                       "Failed to generate primary key in TPM: %s", sym_Tss2_RC_Decode(rc));
+        ts = now(CLOCK_MONOTONIC);
 
-        log_debug("Successfully created primary key on TPM.");
+        _cleanup_tpm2_handle_ Tpm2Handle *primary = NULL;
+        r = tpm2_handle_new(c, &primary);
+        if (r < 0)
+                return r;
 
-        *ret_primary = primary;
+        if (IN_SET(alg, 0, TPM2_ALG_ECC)) {
+                rc = sym_Esys_CreatePrimary(
+                                c->esys_context,
+                                ESYS_TR_RH_OWNER,
+                                ESYS_TR_PASSWORD,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                &primary_sensitive,
+                                &primary_template_ecc,
+                                NULL,
+                                &creation_pcr,
+                                &primary->esys_handle,
+                                NULL,
+                                NULL,
+                                NULL,
+                                NULL);
+
+                if (rc != TSS2_RC_SUCCESS) {
+                        if (alg != 0)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                       "Failed to generate ECC primary key in TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                        log_debug("Failed to generate ECC primary key in TPM, trying RSA: %s", sym_Tss2_RC_Decode(rc));
+                } else {
+                        log_debug("Successfully created ECC primary key on TPM.");
+                        alg = TPM2_ALG_ECC;
+                }
+        }
+
+        if (IN_SET(alg, 0, TPM2_ALG_RSA)) {
+                rc = sym_Esys_CreatePrimary(
+                                c->esys_context,
+                                ESYS_TR_RH_OWNER,
+                                ESYS_TR_PASSWORD,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                &primary_sensitive,
+                                &primary_template_rsa,
+                                NULL,
+                                &creation_pcr,
+                                &primary->esys_handle,
+                                NULL,
+                                NULL,
+                                NULL,
+                                NULL);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to generate RSA primary key in TPM: %s", sym_Tss2_RC_Decode(rc));
+                else if (alg == 0) {
+                        log_notice("TPM2 chip apparently does not support ECC primary keys, falling back to RSA. "
+                                   "This likely means TPM2 operations will be relatively slow, please be patient.");
+                        alg = TPM2_ALG_RSA;
+                }
+
+                log_debug("Successfully created RSA primary key on TPM.");
+        }
+
+        log_debug("Generating primary key on TPM2 took %s.", FORMAT_TIMESPAN(now(CLOCK_MONOTONIC) - ts, USEC_PER_MSEC));
+
+        if (ret_primary)
+                *ret_primary = TAKE_PTR(primary);
+        if (ret_alg)
+                *ret_alg = alg;
+
         return 0;
 }
 
-static int tpm2_make_pcr_session(
-                ESYS_CONTEXT *c,
-                uint32_t pcr_mask,
-                ESYS_TR *ret_session,
-                TPM2B_DIGEST **ret_policy_digest) {
+void tpm2_pcr_mask_to_selection(uint32_t mask, uint16_t bank, TPML_PCR_SELECTION *ret) {
+        assert(ret);
 
-        static const TPMT_SYM_DEF symmetric = {
-                .algorithm = TPM2_ALG_AES,
-                .keyBits = {
-                        .aes = 128
-                },
-                .mode = {
-                        .aes = TPM2_ALG_CFB,
+        /* We only do 24bit here, as that's what PC TPMs are supposed to support */
+        assert(mask <= 0xFFFFFFU);
+
+        *ret = (TPML_PCR_SELECTION) {
+                .count = 1,
+                .pcrSelections[0] = {
+                        .hash = bank,
+                        .sizeofSelect = 3,
+                        .pcrSelect[0] = mask & 0xFF,
+                        .pcrSelect[1] = (mask >> 8) & 0xFF,
+                        .pcrSelect[2] = (mask >> 16) & 0xFF,
                 }
         };
-        TPML_PCR_SELECTION pcr_selection = {
-                .count = 1,
-                .pcrSelections[0].hash = TPM2_ALG_SHA256,
-                .pcrSelections[0].sizeofSelect = 3,
-                .pcrSelections[0].pcrSelect[0] = pcr_mask & 0xFF,
-                .pcrSelections[0].pcrSelect[1] = (pcr_mask >> 8) & 0xFF,
-                .pcrSelections[0].pcrSelect[2] = (pcr_mask >> 16) & 0xFF,
-        };
-        _cleanup_(Esys_Freep) TPM2B_DIGEST *policy_digest = NULL;
-        ESYS_TR session = ESYS_TR_NONE;
+}
+
+static unsigned find_nth_bit(uint32_t mask, unsigned n) {
+        uint32_t bit = 1;
+
+        assert(n < 32);
+
+        /* Returns the bit index of the nth set bit, e.g. mask=0b101001, n=3 → 5 */
+
+        for (unsigned i = 0; i < sizeof(mask)*8; i++) {
+
+                if (bit & mask) {
+                        if (n == 0)
+                                return i;
+
+                        n--;
+                }
+
+                bit <<= 1;
+        }
+
+        return UINT_MAX;
+}
+
+static int tpm2_pcr_mask_good(
+                Tpm2Context *c,
+                TPMI_ALG_HASH bank,
+                uint32_t mask) {
+
+        _cleanup_(Esys_Freep) TPML_DIGEST *pcr_values = NULL;
+        TPML_PCR_SELECTION selection;
+        bool good = false;
+        TSS2_RC rc;
+
+        assert(c);
+
+        /* So we have the problem that some systems might have working TPM2 chips, but the firmware doesn't
+         * actually measure into them, or only into a suboptimal bank. If so, the PCRs should be all zero or
+         * all 0xFF. Detect that, so that we can warn and maybe pick a better bank. */
+
+        tpm2_pcr_mask_to_selection(mask, bank, &selection);
+
+        rc = sym_Esys_PCR_Read(
+                        c->esys_context,
+                        ESYS_TR_NONE,
+                        ESYS_TR_NONE,
+                        ESYS_TR_NONE,
+                        &selection,
+                        NULL,
+                        NULL,
+                        &pcr_values);
+        if (rc != TSS2_RC_SUCCESS)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                       "Failed to read TPM2 PCRs: %s", sym_Tss2_RC_Decode(rc));
+
+        /* If at least one of the selected PCR values is something other than all 0x00 or all 0xFF we are happy. */
+        for (unsigned i = 0; i < pcr_values->count; i++) {
+                if (DEBUG_LOGGING) {
+                        _cleanup_free_ char *h = NULL;
+                        unsigned j;
+
+                        h = hexmem(pcr_values->digests[i].buffer, pcr_values->digests[i].size);
+                        j = find_nth_bit(mask, i);
+                        assert(j != UINT_MAX);
+
+                        log_debug("PCR %u value: %s", j, strna(h));
+                }
+
+                if (!memeqbyte(0x00, pcr_values->digests[i].buffer, pcr_values->digests[i].size) &&
+                    !memeqbyte(0xFF, pcr_values->digests[i].buffer, pcr_values->digests[i].size))
+                        good = true;
+        }
+
+        return good;
+}
+
+static int tpm2_bank_has24(const TPMS_PCR_SELECTION *selection) {
+
+        assert(selection);
+
+        /* As per https://trustedcomputinggroup.org/wp-content/uploads/TCG_PCClient_PFP_r1p05_v23_pub.pdf a
+         * TPM2 on a Client PC must have at least 24 PCRs. If this TPM has less, just skip over it. */
+        if (selection->sizeofSelect < TPM2_PCRS_MAX/8) {
+                log_debug("Skipping TPM2 PCR bank %s with fewer than 24 PCRs.",
+                          strna(tpm2_hash_alg_to_string(selection->hash)));
+                return false;
+        }
+
+        assert_cc(TPM2_PCRS_MAX % 8 == 0);
+
+        /* It's not enough to check how many PCRs there are, we also need to check that the 24 are
+         * enabled for this bank. Otherwise this TPM doesn't qualify. */
+        bool valid = true;
+        for (size_t j = 0; j < TPM2_PCRS_MAX/8; j++)
+                if (selection->pcrSelect[j] != 0xFF) {
+                        valid = false;
+                        break;
+                }
+
+        if (!valid)
+                log_debug("TPM2 PCR bank %s has fewer than 24 PCR bits enabled, ignoring.",
+                          strna(tpm2_hash_alg_to_string(selection->hash)));
+
+        return valid;
+}
+
+static int tpm2_get_best_pcr_bank(
+                Tpm2Context *c,
+                uint32_t pcr_mask,
+                TPMI_ALG_HASH *ret) {
+
+        _cleanup_(Esys_Freep) TPMS_CAPABILITY_DATA *pcap = NULL;
+        TPMI_ALG_HASH supported_hash = 0, hash_with_valid_pcr = 0;
+        TPMI_YES_NO more;
         TSS2_RC rc;
         int r;
 
         assert(c);
 
-        log_debug("Starting authentication session.");
+        rc = sym_Esys_GetCapability(
+                        c->esys_context,
+                        ESYS_TR_NONE,
+                        ESYS_TR_NONE,
+                        ESYS_TR_NONE,
+                        TPM2_CAP_PCRS,
+                        0,
+                        1,
+                        &more,
+                        &pcap);
+        if (rc != TSS2_RC_SUCCESS)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                       "Failed to determine TPM2 PCR bank capabilities: %s", sym_Tss2_RC_Decode(rc));
+
+        assert(pcap->capability == TPM2_CAP_PCRS);
+
+        for (size_t i = 0; i < pcap->data.assignedPCR.count; i++) {
+                int good;
+
+                /* For now we are only interested in the SHA1 and SHA256 banks */
+                if (!IN_SET(pcap->data.assignedPCR.pcrSelections[i].hash, TPM2_ALG_SHA256, TPM2_ALG_SHA1))
+                        continue;
+
+                r = tpm2_bank_has24(pcap->data.assignedPCR.pcrSelections + i);
+                if (r < 0)
+                        return r;
+                if (!r)
+                        continue;
+
+                good = tpm2_pcr_mask_good(c, pcap->data.assignedPCR.pcrSelections[i].hash, pcr_mask);
+                if (good < 0)
+                        return good;
+
+                if (pcap->data.assignedPCR.pcrSelections[i].hash == TPM2_ALG_SHA256) {
+                        supported_hash = TPM2_ALG_SHA256;
+                        if (good) {
+                                /* Great, SHA256 is supported and has initialized PCR values, we are done. */
+                                hash_with_valid_pcr = TPM2_ALG_SHA256;
+                                break;
+                        }
+                } else {
+                        assert(pcap->data.assignedPCR.pcrSelections[i].hash == TPM2_ALG_SHA1);
+
+                        if (supported_hash == 0)
+                                supported_hash = TPM2_ALG_SHA1;
+
+                        if (good && hash_with_valid_pcr == 0)
+                                hash_with_valid_pcr = TPM2_ALG_SHA1;
+                }
+        }
+
+        /* We preferably pick SHA256, but only if its PCRs are initialized or neither the SHA1 nor the SHA256
+         * PCRs are initialized. If SHA256 is not supported but SHA1 is and its PCRs are too, we prefer
+         * SHA1.
+         *
+         * We log at LOG_NOTICE level whenever we end up using the SHA1 bank or when the PCRs we bind to are
+         * not initialized. */
+
+        if (hash_with_valid_pcr == TPM2_ALG_SHA256) {
+                assert(supported_hash == TPM2_ALG_SHA256);
+                log_debug("TPM2 device supports SHA256 PCR bank and SHA256 PCRs are valid, yay!");
+                *ret = TPM2_ALG_SHA256;
+        } else if (hash_with_valid_pcr == TPM2_ALG_SHA1) {
+                if (supported_hash == TPM2_ALG_SHA256)
+                        log_notice("TPM2 device supports both SHA1 and SHA256 PCR banks, but only SHA1 PCRs are valid, falling back to SHA1 bank. This reduces the security level substantially.");
+                else {
+                        assert(supported_hash == TPM2_ALG_SHA1);
+                        log_notice("TPM2 device lacks support for SHA256 PCR bank, but SHA1 bank is supported and SHA1 PCRs are valid, falling back to SHA1 bank. This reduces the security level substantially.");
+                }
+
+                *ret = TPM2_ALG_SHA1;
+        } else if (supported_hash == TPM2_ALG_SHA256) {
+                log_notice("TPM2 device supports SHA256 PCR bank but none of the selected PCRs are valid! Firmware apparently did not initialize any of the selected PCRs. Proceeding anyway with SHA256 bank. PCR policy effectively unenforced!");
+                *ret = TPM2_ALG_SHA256;
+        } else if (supported_hash == TPM2_ALG_SHA1) {
+                log_notice("TPM2 device lacks support for SHA256 bank, but SHA1 bank is supported, but none of the selected PCRs are valid! Firmware apparently did not initialize any of the selected PCRs. Proceeding anyway with SHA1 bank. PCR policy effectively unenforced!");
+                *ret = TPM2_ALG_SHA1;
+        } else
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                       "TPM2 module supports neither SHA1 nor SHA256 PCR banks, cannot operate.");
+
+        return 0;
+}
+
+int tpm2_get_good_pcr_banks(
+                Tpm2Context *c,
+                uint32_t pcr_mask,
+                TPMI_ALG_HASH **ret) {
+
+        _cleanup_free_ TPMI_ALG_HASH *good_banks = NULL, *fallback_banks = NULL;
+        _cleanup_(Esys_Freep) TPMS_CAPABILITY_DATA *pcap = NULL;
+        size_t n_good_banks = 0, n_fallback_banks = 0;
+        TPMI_YES_NO more;
+        TSS2_RC rc;
+        int r;
+
+        assert(c);
+        assert(ret);
+
+        rc = sym_Esys_GetCapability(
+                        c->esys_context,
+                        ESYS_TR_NONE,
+                        ESYS_TR_NONE,
+                        ESYS_TR_NONE,
+                        TPM2_CAP_PCRS,
+                        0,
+                        1,
+                        &more,
+                        &pcap);
+        if (rc != TSS2_RC_SUCCESS)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                       "Failed to determine TPM2 PCR bank capabilities: %s", sym_Tss2_RC_Decode(rc));
+
+        assert(pcap->capability == TPM2_CAP_PCRS);
+
+        for (size_t i = 0; i < pcap->data.assignedPCR.count; i++) {
+
+                /* Let's see if this bank is superficially OK, i.e. has at least 24 enabled registers */
+                r = tpm2_bank_has24(pcap->data.assignedPCR.pcrSelections + i);
+                if (r < 0)
+                        return r;
+                if (!r)
+                        continue;
+
+                /* Let's now see if this bank has any of the selected PCRs actually initialized */
+                r = tpm2_pcr_mask_good(c, pcap->data.assignedPCR.pcrSelections[i].hash, pcr_mask);
+                if (r < 0)
+                        return r;
+
+                if (n_good_banks + n_fallback_banks >= INT_MAX)
+                        return log_error_errno(SYNTHETIC_ERRNO(E2BIG), "Too many good TPM2 banks?");
+
+                if (r) {
+                        if (!GREEDY_REALLOC(good_banks, n_good_banks+1))
+                                return log_oom();
+
+                        good_banks[n_good_banks++] = pcap->data.assignedPCR.pcrSelections[i].hash;
+                } else {
+                        if (!GREEDY_REALLOC(fallback_banks, n_fallback_banks+1))
+                                return log_oom();
+
+                        fallback_banks[n_fallback_banks++] = pcap->data.assignedPCR.pcrSelections[i].hash;
+                }
+        }
+
+        /* Preferably, use the good banks (i.e. the ones the PCR values are actually initialized so
+         * far). Otherwise use the fallback banks (i.e. which exist and are enabled, but so far not used. */
+        if (n_good_banks > 0) {
+                log_debug("Found %zu fully initialized TPM2 banks.", n_good_banks);
+                *ret = TAKE_PTR(good_banks);
+                return (int) n_good_banks;
+        }
+        if (n_fallback_banks > 0) {
+                log_debug("Found %zu enabled but un-initialized TPM2 banks.", n_fallback_banks);
+                *ret = TAKE_PTR(fallback_banks);
+                return (int) n_fallback_banks;
+        }
+
+        /* No suitable banks found. */
+        *ret = NULL;
+        return 0;
+}
+
+int tpm2_get_good_pcr_banks_strv(
+                Tpm2Context *c,
+                uint32_t pcr_mask,
+                char ***ret) {
+
+#if HAVE_OPENSSL
+        _cleanup_free_ TPMI_ALG_HASH *algs = NULL;
+        _cleanup_strv_free_ char **l = NULL;
+        int n_algs;
+
+        assert(c);
+        assert(ret);
+
+        n_algs = tpm2_get_good_pcr_banks(c, pcr_mask, &algs);
+        if (n_algs < 0)
+                return n_algs;
+
+        for (int i = 0; i < n_algs; i++) {
+                _cleanup_free_ char *n = NULL;
+                const EVP_MD *implementation;
+                const char *salg;
+
+                salg = tpm2_hash_alg_to_string(algs[i]);
+                if (!salg)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "TPM2 operates with unknown PCR algorithm, can't measure.");
+
+                implementation = EVP_get_digestbyname(salg);
+                if (!implementation)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "TPM2 operates with unsupported PCR algorithm, can't measure.");
+
+                n = strdup(ASSERT_PTR(EVP_MD_name(implementation)));
+                if (!n)
+                        return log_oom();
+
+                ascii_strlower(n); /* OpenSSL uses uppercase digest names, we prefer them lower case. */
+
+                if (strv_consume(&l, TAKE_PTR(n)) < 0)
+                        return log_oom();
+        }
+
+        *ret = TAKE_PTR(l);
+        return 0;
+#else /* HAVE_OPENSSL */
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "OpenSSL support is disabled.");
+#endif
+}
+
+static void hash_pin(const char *pin, size_t len, TPM2B_AUTH *auth) {
+        struct sha256_ctx hash;
+
+        assert(auth);
+        assert(pin);
+
+        auth->size = SHA256_DIGEST_SIZE;
+
+        CLEANUP_ERASE(hash);
+
+        sha256_init_ctx(&hash);
+        sha256_process_bytes(pin, len, &hash);
+        sha256_finish_ctx(&hash, auth->buffer);
+}
+
+static int tpm2_make_encryption_session(
+                Tpm2Context *c,
+                const Tpm2Handle *primary,
+                const Tpm2Handle *bind_key,
+                const char *pin,
+                Tpm2Handle **ret_session) {
+
+        static const TPMT_SYM_DEF symmetric = {
+                .algorithm = TPM2_ALG_AES,
+                .keyBits.aes = 128,
+                .mode.aes = TPM2_ALG_CFB,
+        };
+        const TPMA_SESSION sessionAttributes = TPMA_SESSION_DECRYPT | TPMA_SESSION_ENCRYPT |
+                        TPMA_SESSION_CONTINUESESSION;
+        TSS2_RC rc;
+        int r;
+
+        assert(c);
+        assert(ret_session);
+
+        /*
+         * if a pin is set for the seal object, use it to bind the session
+         * key to that object. This prevents active bus interposers from
+         * faking a TPM and seeing the unsealed value. An active interposer
+         * could fake a TPM, satisfying the encrypted session, and just
+         * forward everything to the *real* TPM.
+         */
+        if (pin) {
+                TPM2B_AUTH auth = {};
+
+                CLEANUP_ERASE(auth);
+
+                hash_pin(pin, strlen(pin), &auth);
+
+                rc = sym_Esys_TR_SetAuth(c->esys_context, bind_key->esys_handle, &auth);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(
+                                               SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to load PIN in TPM: %s",
+                                               sym_Tss2_RC_Decode(rc));
+        }
+
+        log_debug("Starting HMAC encryption session.");
+
+        /* Start a salted, unbound HMAC session with a well-known key (e.g. primary key) as tpmKey, which
+         * means that the random salt will be encrypted with the well-known key. That way, only the TPM can
+         * recover the salt, which is then used for key derivation. */
+        _cleanup_tpm2_handle_ Tpm2Handle *session = NULL;
+        r = tpm2_handle_new(c, &session);
+        if (r < 0)
+                return r;
 
         rc = sym_Esys_StartAuthSession(
-                        c,
-                        ESYS_TR_NONE,
-                        ESYS_TR_NONE,
+                        c->esys_context,
+                        primary->esys_handle,
+                        bind_key->esys_handle,
                         ESYS_TR_NONE,
                         ESYS_TR_NONE,
                         ESYS_TR_NONE,
                         NULL,
-                        TPM2_SE_POLICY,
+                        TPM2_SE_HMAC,
                         &symmetric,
                         TPM2_ALG_SHA256,
-                        &session);
+                        &session->esys_handle);
         if (rc != TSS2_RC_SUCCESS)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                        "Failed to open session in TPM: %s", sym_Tss2_RC_Decode(rc));
 
-        log_debug("Configuring PCR policy.");
+        /* Enable parameter encryption/decryption with AES in CFB mode. Together with HMAC digests (which are
+         * always used for sessions), this provides confidentiality, integrity and replay protection for
+         * operations that use this session. */
+        rc = sym_Esys_TRSess_SetAttributes(c->esys_context, session->esys_handle, sessionAttributes, 0xff);
+        if (rc != TSS2_RC_SUCCESS)
+                return log_error_errno(
+                                SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                "Failed to configure TPM session: %s",
+                                sym_Tss2_RC_Decode(rc));
 
-        rc = sym_Esys_PolicyPCR(
-                        c,
-                        session,
+        *ret_session = TAKE_PTR(session);
+
+        return 0;
+}
+
+#if HAVE_OPENSSL
+static int openssl_pubkey_to_tpm2_pubkey(EVP_PKEY *input, TPM2B_PUBLIC *output) {
+#if OPENSSL_VERSION_MAJOR >= 3
+        _cleanup_(BN_freep) BIGNUM *n = NULL, *e = NULL;
+#else
+        const BIGNUM *n = NULL, *e = NULL;
+        const RSA *rsa = NULL;
+#endif
+        int n_bytes, e_bytes;
+
+        assert(input);
+        assert(output);
+
+        /* Converts an OpenSSL public key to a structure that the TPM chip can process. */
+
+        if (EVP_PKEY_base_id(input) != EVP_PKEY_RSA)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Provided public key is not an RSA key.");
+
+#if OPENSSL_VERSION_MAJOR >= 3
+        if (!EVP_PKEY_get_bn_param(input, OSSL_PKEY_PARAM_RSA_N, &n))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to get RSA modulus from public key.");
+#else
+        rsa = EVP_PKEY_get0_RSA(input);
+        if (!rsa)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to extract RSA key from public key.");
+
+        n = RSA_get0_n(rsa);
+        if (!n)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to get RSA modulus from public key.");
+#endif
+
+        n_bytes = BN_num_bytes(n);
+        assert_se(n_bytes > 0);
+        if ((size_t) n_bytes > sizeof_field(TPM2B_PUBLIC, publicArea.unique.rsa.buffer))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "RSA modulus too large for TPM2 public key object.");
+
+#if OPENSSL_VERSION_MAJOR >= 3
+        if (!EVP_PKEY_get_bn_param(input, OSSL_PKEY_PARAM_RSA_E, &e))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to get RSA exponent from public key.");
+#else
+        e = RSA_get0_e(rsa);
+        if (!e)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to get RSA exponent from public key.");
+#endif
+
+        e_bytes = BN_num_bytes(e);
+        assert_se(e_bytes > 0);
+        if ((size_t) e_bytes > sizeof_field(TPM2B_PUBLIC, publicArea.parameters.rsaDetail.exponent))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "RSA exponent too large for TPM2 public key object.");
+
+        *output = (TPM2B_PUBLIC) {
+                .size = sizeof(TPMT_PUBLIC),
+                .publicArea = {
+                        .type = TPM2_ALG_RSA,
+                        .nameAlg = TPM2_ALG_SHA256,
+                        .objectAttributes = TPMA_OBJECT_DECRYPT | TPMA_OBJECT_SIGN_ENCRYPT | TPMA_OBJECT_USERWITHAUTH,
+                        .parameters.rsaDetail = {
+                                .scheme = {
+                                        .scheme = TPM2_ALG_NULL,
+                                        .details.anySig.hashAlg = TPM2_ALG_NULL,
+                                },
+                                .symmetric = {
+                                        .algorithm = TPM2_ALG_NULL,
+                                        .mode.sym = TPM2_ALG_NULL,
+                                },
+                                .keyBits = n_bytes * 8,
+                                /* .exponent will be filled in below. */
+                        },
+                        .unique = {
+                                .rsa.size = n_bytes,
+                                /* .rsa.buffer will be filled in below. */
+                        },
+                },
+        };
+
+        if (BN_bn2bin(n, output->publicArea.unique.rsa.buffer) <= 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to convert RSA modulus.");
+
+        if (BN_bn2bin(e, (unsigned char*) &output->publicArea.parameters.rsaDetail.exponent) <= 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to convert RSA exponent.");
+
+        return 0;
+}
+
+static int find_signature(
+                JsonVariant *v,
+                uint16_t pcr_bank,
+                uint32_t pcr_mask,
+                EVP_PKEY *pk,
+                const void *policy,
+                size_t policy_size,
+                void *ret_signature,
+                size_t *ret_signature_size) {
+
+        _cleanup_free_ void *fp = NULL;
+        JsonVariant *b, *i;
+        size_t fp_size;
+        const char *k;
+        int r;
+
+        /* Searches for a signature blob in the specified JSON object. Search keys are PCR bank, PCR mask,
+         * public key, and policy digest. */
+
+        if (!json_variant_is_object(v))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Signature is not a JSON object.");
+
+        k = tpm2_hash_alg_to_string(pcr_bank);
+        if (!k)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Don't know PCR bank %" PRIu16, pcr_bank);
+
+        /* First, find field by bank */
+        b = json_variant_by_key(v, k);
+        if (!b)
+                return log_error_errno(SYNTHETIC_ERRNO(ENXIO), "Signature lacks data for PCR bank '%s'.", k);
+
+        if (!json_variant_is_array(b))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Bank data is not a JSON array.");
+
+        /* Now iterate through all signatures known for this bank */
+        JSON_VARIANT_ARRAY_FOREACH(i, b) {
+                _cleanup_free_ void *fpj_data = NULL, *polj_data = NULL;
+                JsonVariant *maskj, *fpj, *sigj, *polj;
+                size_t fpj_size, polj_size;
+                uint32_t parsed_mask;
+
+                if (!json_variant_is_object(i))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Bank data element is not a JSON object");
+
+                /* Check if the PCR mask matches our expectations */
+                maskj = json_variant_by_key(i, "pcrs");
+                if (!maskj)
+                        continue;
+
+                r = tpm2_parse_pcr_json_array(maskj, &parsed_mask);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse JSON PCR mask");
+
+                if (parsed_mask != pcr_mask)
+                        continue; /* Not for this PCR mask */
+
+                /* Then check if this is for the public key we operate with */
+                fpj = json_variant_by_key(i, "pkfp");
+                if (!fpj)
+                        continue;
+
+                r = json_variant_unhex(fpj, &fpj_data, &fpj_size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to decode fingerprint in JSON data: %m");
+
+                if (!fp) {
+                        r = pubkey_fingerprint(pk, EVP_sha256(), &fp, &fp_size);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to calculate public key fingerprint: %m");
+                }
+
+                if (memcmp_nn(fp, fp_size, fpj_data, fpj_size) != 0)
+                        continue; /* Not for this public key */
+
+                /* Finally, check if this is for the PCR policy we expect this to be */
+                polj = json_variant_by_key(i, "pol");
+                if (!polj)
+                        continue;
+
+                r = json_variant_unhex(polj, &polj_data, &polj_size);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to decode policy hash JSON data: %m");
+
+                if (memcmp_nn(policy, policy_size, polj_data, polj_size) != 0)
+                        continue;
+
+                /* This entry matches all our expectations, now return the signature included in it */
+                sigj = json_variant_by_key(i, "sig");
+                if (!sigj)
+                        continue;
+
+                return json_variant_unbase64(sigj, ret_signature, ret_signature_size);
+        }
+
+        return log_error_errno(SYNTHETIC_ERRNO(ENXIO), "Couldn't find signature for this PCR bank, PCR index and public key.");
+}
+#endif
+
+static int tpm2_make_policy_session(
+                Tpm2Context *c,
+                const Tpm2Handle *primary,
+                const Tpm2Handle *parent_session,
+                TPM2_SE session_type,
+                uint32_t hash_pcr_mask,
+                uint16_t pcr_bank, /* If UINT16_MAX, pick best bank automatically, otherwise specify bank explicitly. */
+                const void *pubkey,
+                size_t pubkey_size,
+                uint32_t pubkey_pcr_mask,
+                JsonVariant *signature_json,
+                bool use_pin,
+                Tpm2Handle **ret_session,
+                TPM2B_DIGEST **ret_policy_digest,
+                TPMI_ALG_HASH *ret_pcr_bank) {
+
+        static const TPMT_SYM_DEF symmetric = {
+                .algorithm = TPM2_ALG_AES,
+                .keyBits.aes = 128,
+                .mode.aes = TPM2_ALG_CFB,
+        };
+        _cleanup_(Esys_Freep) TPM2B_DIGEST *policy_digest = NULL;
+        TSS2_RC rc;
+        int r;
+
+        assert(c);
+        assert(pubkey || pubkey_size == 0);
+        assert(pubkey_pcr_mask == 0 || pubkey_size > 0);
+
+        log_debug("Starting authentication session.");
+
+        /* So apparently some TPM implementations don't implement trial mode correctly. To avoid issues let's
+         * avoid it when it is easy to. At the moment we only really need trial mode for the signed PCR
+         * policies (since only then we need to shove PCR values into the policy that don't match current
+         * state anyway), hence if we have none of those we don't need to bother. Hence, let's patch in
+         * TPM2_SE_POLICY even if trial mode is requested unless a pubkey PCR mask is specified that is
+         * non-zero, i.e. signed PCR policy is requested.
+         *
+         * One day we should switch to calculating policy hashes client side when trial mode is requested, to
+         * avoid this mess. */
+        if (session_type == TPM2_SE_TRIAL && pubkey_pcr_mask == 0)
+                session_type = TPM2_SE_POLICY;
+
+        if ((hash_pcr_mask | pubkey_pcr_mask) != 0) {
+                /* We are told to configure a PCR policy of some form, let's determine/validate the PCR bank to use. */
+
+                if (pcr_bank != UINT16_MAX) {
+                        r = tpm2_pcr_mask_good(c, pcr_bank, hash_pcr_mask|pubkey_pcr_mask);
+                        if (r < 0)
+                                return r;
+                        if (r == 0)
+                                log_warning("Selected TPM2 PCRs are not initialized on this system, most likely due to a firmware issue. PCR policy is effectively not enforced. Proceeding anyway.");
+                } else {
+                        /* No bank configured, pick automatically. Some TPM2 devices only can do SHA1. If we
+                         * detect that use that, but preferably use SHA256 */
+                        r = tpm2_get_best_pcr_bank(c, hash_pcr_mask|pubkey_pcr_mask, &pcr_bank);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+#if HAVE_OPENSSL
+        _cleanup_(EVP_PKEY_freep) EVP_PKEY *pk = NULL;
+        if (pubkey_size > 0) {
+                /* If a pubkey is specified, load it to validate it, even if the PCR mask for this is
+                 * actually zero, and we are thus not going to use it. */
+                _cleanup_fclose_ FILE *f = fmemopen((void*) pubkey, pubkey_size, "r");
+                if (!f)
+                        return log_oom();
+
+                pk = PEM_read_PUBKEY(f, NULL, NULL, NULL);
+                if (!pk)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse PEM public key.");
+        }
+#endif
+
+        _cleanup_tpm2_handle_ Tpm2Handle *session = NULL;
+        r = tpm2_handle_new(c, &session);
+        if (r < 0)
+                return r;
+
+        rc = sym_Esys_StartAuthSession(
+                        c->esys_context,
+                        primary->esys_handle,
                         ESYS_TR_NONE,
+                        parent_session->esys_handle,
                         ESYS_TR_NONE,
                         ESYS_TR_NONE,
                         NULL,
-                        &pcr_selection);
-        if (rc != TSS2_RC_SUCCESS) {
-                r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                    "Failed to add PCR policy to TPM: %s", sym_Tss2_RC_Decode(rc));
-                goto finish;
+                        session_type,
+                        &symmetric,
+                        TPM2_ALG_SHA256,
+                        &session->esys_handle);
+        if (rc != TSS2_RC_SUCCESS)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                       "Failed to open session in TPM: %s", sym_Tss2_RC_Decode(rc));
+
+        if (pubkey_pcr_mask != 0) {
+#if HAVE_OPENSSL
+                log_debug("Configuring public key based PCR policy.");
+
+                /* First: load public key into the TPM */
+                TPM2B_PUBLIC pubkey_tpm2;
+                r = openssl_pubkey_to_tpm2_pubkey(pk, &pubkey_tpm2);
+                if (r < 0)
+                        return r;
+
+                _cleanup_tpm2_handle_ Tpm2Handle *pubkey_handle = NULL;
+                r = tpm2_handle_new(c, &pubkey_handle);
+                if (r < 0)
+                        return r;
+
+                rc = sym_Esys_LoadExternal(
+                                c->esys_context,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                NULL,
+                                &pubkey_tpm2,
+#if HAVE_TSS2_ESYS3
+                                /* tpm2-tss >= 3.0.0 requires a ESYS_TR_RH_* constant specifying the requested
+                                 * hierarchy, older versions need TPM2_RH_* instead. */
+                                ESYS_TR_RH_OWNER,
+#else
+                                TPM2_RH_OWNER,
+#endif
+                                &pubkey_handle->esys_handle);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                "Failed to load public key into TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                /* Acquire the "name" of what we just loaded */
+                _cleanup_(Esys_Freep) TPM2B_NAME *pubkey_name = NULL;
+                rc = sym_Esys_TR_GetName(
+                                c->esys_context,
+                                pubkey_handle->esys_handle,
+                                &pubkey_name);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to get name of public key from TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                /* Put together the PCR policy we want to use */
+                TPML_PCR_SELECTION pcr_selection;
+                tpm2_pcr_mask_to_selection(pubkey_pcr_mask, pcr_bank, &pcr_selection);
+                rc = sym_Esys_PolicyPCR(
+                                c->esys_context,
+                                session->esys_handle,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                NULL,
+                                &pcr_selection);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to add PCR policy to TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                /* Get the policy hash of the PCR policy */
+                _cleanup_(Esys_Freep) TPM2B_DIGEST *approved_policy = NULL;
+                rc = sym_Esys_PolicyGetDigest(
+                                c->esys_context,
+                                session->esys_handle,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                &approved_policy);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to get policy digest from TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                /* When we are unlocking and have a signature, let's pass it to the TPM */
+                _cleanup_(Esys_Freep) TPMT_TK_VERIFIED *check_ticket_buffer = NULL;
+                const TPMT_TK_VERIFIED *check_ticket;
+                if (signature_json) {
+                        _cleanup_free_ void *signature_raw = NULL;
+                        size_t signature_size;
+
+                        r = find_signature(
+                                        signature_json,
+                                        pcr_bank,
+                                        pubkey_pcr_mask,
+                                        pk,
+                                        approved_policy->buffer,
+                                        approved_policy->size,
+                                        &signature_raw,
+                                        &signature_size);
+                        if (r < 0)
+                                return r;
+
+                        /* TPM2_VerifySignature() will only verify the RSA part of the RSA+SHA256 signature,
+                         * hence we need to do the SHA256 part ourselves, first */
+                        TPM2B_DIGEST signature_hash = {
+                                .size = SHA256_DIGEST_SIZE,
+                        };
+                        assert(sizeof(signature_hash.buffer) >= SHA256_DIGEST_SIZE);
+                        sha256_direct(approved_policy->buffer, approved_policy->size, signature_hash.buffer);
+
+                        TPMT_SIGNATURE policy_signature = {
+                                .sigAlg = TPM2_ALG_RSASSA,
+                                .signature.rsassa = {
+                                        .hash = TPM2_ALG_SHA256,
+                                        .sig.size = signature_size,
+                                },
+                        };
+                        if (signature_size > sizeof(policy_signature.signature.rsassa.sig.buffer))
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "Signature larger than buffer.");
+                        memcpy(policy_signature.signature.rsassa.sig.buffer, signature_raw, signature_size);
+
+                        rc = sym_Esys_VerifySignature(
+                                        c->esys_context,
+                                        pubkey_handle->esys_handle,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        ESYS_TR_NONE,
+                                        &signature_hash,
+                                        &policy_signature,
+                                        &check_ticket_buffer);
+                        if (rc != TSS2_RC_SUCCESS)
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                                        "Failed to validate signature in TPM: %s", sym_Tss2_RC_Decode(rc));
+
+                        check_ticket = check_ticket_buffer;
+                } else {
+                        /* When enrolling, we pass a NULL ticket */
+                        static const TPMT_TK_VERIFIED check_ticket_null = {
+                                .tag = TPM2_ST_VERIFIED,
+                                .hierarchy = TPM2_RH_OWNER,
+                        };
+
+                        check_ticket = &check_ticket_null;
+                }
+
+                rc = sym_Esys_PolicyAuthorize(
+                                c->esys_context,
+                                session->esys_handle,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                approved_policy,
+                                /* policyRef= */ &(const TPM2B_NONCE) {},
+                                pubkey_name,
+                                check_ticket);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to push Authorize policy into TPM: %s", sym_Tss2_RC_Decode(rc));
+#else
+                return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "OpenSSL support is disabled.");
+#endif
+        }
+
+        if (hash_pcr_mask != 0) {
+                log_debug("Configuring hash-based PCR policy.");
+
+                TPML_PCR_SELECTION pcr_selection;
+                tpm2_pcr_mask_to_selection(hash_pcr_mask, pcr_bank, &pcr_selection);
+                rc = sym_Esys_PolicyPCR(
+                                c->esys_context,
+                                session->esys_handle,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                NULL,
+                                &pcr_selection);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to add PCR policy to TPM: %s", sym_Tss2_RC_Decode(rc));
+        }
+
+        if (use_pin) {
+                log_debug("Configuring PIN policy.");
+
+                rc = sym_Esys_PolicyAuthValue(
+                                c->esys_context,
+                                session->esys_handle,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE,
+                                ESYS_TR_NONE);
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to add authValue policy to TPM: %s",
+                                               sym_Tss2_RC_Decode(rc));
         }
 
         if (DEBUG_LOGGING || ret_policy_digest) {
                 log_debug("Acquiring policy digest.");
 
                 rc = sym_Esys_PolicyGetDigest(
-                                c,
-                                session,
+                                c->esys_context,
+                                session->esys_handle,
                                 ESYS_TR_NONE,
                                 ESYS_TR_NONE,
                                 ESYS_TR_NONE,
                                 &policy_digest);
 
-                if (rc != TSS2_RC_SUCCESS) {
-                        r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                            "Failed to get policy digest from TPM: %s", sym_Tss2_RC_Decode(rc));
-                        goto finish;
-                }
+                if (rc != TSS2_RC_SUCCESS)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to get policy digest from TPM: %s", sym_Tss2_RC_Decode(rc));
 
                 if (DEBUG_LOGGING) {
                         _cleanup_free_ char *h = NULL;
 
                         h = hexmem(policy_digest->buffer, policy_digest->size);
-                        if (!h) {
-                                r = log_oom();
-                                goto finish;
-                        }
+                        if (!h)
+                                return log_oom();
 
                         log_debug("Session policy digest: %s", h);
                 }
         }
 
-        if (ret_session) {
-                *ret_session = session;
-                session = ESYS_TR_NONE;
-        }
+        if (ret_session)
+                *ret_session = TAKE_PTR(session);
 
         if (ret_policy_digest)
                 *ret_policy_digest = TAKE_PTR(policy_digest);
 
-        r = 0;
+        if (ret_pcr_bank)
+                *ret_pcr_bank = pcr_bank;
 
-finish:
-        session = flush_context_verbose(c, session);
-        return r;
+        return 0;
 }
 
-int tpm2_seal(
-                const char *device,
-                uint32_t pcr_mask,
-                void **ret_secret,
-                size_t *ret_secret_size,
-                void **ret_blob,
-                size_t *ret_blob_size,
-                void **ret_pcr_hash,
-                size_t *ret_pcr_hash_size) {
+int tpm2_seal(const char *device,
+              uint32_t hash_pcr_mask,
+              const void *pubkey,
+              const size_t pubkey_size,
+              uint32_t pubkey_pcr_mask,
+              const char *pin,
+              void **ret_secret,
+              size_t *ret_secret_size,
+              void **ret_blob,
+              size_t *ret_blob_size,
+              void **ret_pcr_hash,
+              size_t *ret_pcr_hash_size,
+              uint16_t *ret_pcr_bank,
+              uint16_t *ret_primary_alg) {
 
-        _cleanup_(tpm2_context_destroy) struct tpm2_context c = {};
         _cleanup_(Esys_Freep) TPM2B_DIGEST *policy_digest = NULL;
         _cleanup_(Esys_Freep) TPM2B_PRIVATE *private = NULL;
         _cleanup_(Esys_Freep) TPM2B_PUBLIC *public = NULL;
@@ -437,31 +1425,37 @@
         _cleanup_(erase_and_freep) void *secret = NULL;
         _cleanup_free_ void *blob = NULL, *hash = NULL;
         TPM2B_SENSITIVE_CREATE hmac_sensitive;
-        ESYS_TR primary = ESYS_TR_NONE;
+        TPMI_ALG_PUBLIC primary_alg;
         TPM2B_PUBLIC hmac_template;
+        TPMI_ALG_HASH pcr_bank;
         size_t k, blob_size;
         usec_t start;
         TSS2_RC rc;
         int r;
 
+        assert(pubkey || pubkey_size == 0);
+
         assert(ret_secret);
         assert(ret_secret_size);
         assert(ret_blob);
         assert(ret_blob_size);
         assert(ret_pcr_hash);
         assert(ret_pcr_hash_size);
+        assert(ret_pcr_bank);
 
-        assert(pcr_mask < (UINT32_C(1) << TPM2_PCRS_MAX)); /* Support 24 PCR banks */
+        assert(TPM2_PCR_MASK_VALID(hash_pcr_mask));
+        assert(TPM2_PCR_MASK_VALID(pubkey_pcr_mask));
 
         /* So here's what we do here: we connect to the TPM2 chip. It persistently contains a "seed" key that
          * is randomized when the TPM2 is first initialized or reset and remains stable across boots. We
-         * generate a "primary" key pair derived from that (RSA). Given the seed remains fixed this will
-         * result in the same key pair whenever we specify the exact same parameters for it. We then create a
-         * PCR-bound policy session, which calculates a hash on the current PCR values of the indexes we
-         * specify. We then generate a randomized key on the host (which is the key we actually enroll in the
-         * LUKS2 keyslots), which we upload into the TPM2, where it is encrypted with the "primary" key,
-         * taking the PCR policy session into account. We then download the encrypted key from the TPM2
-         * ("sealing") and marshall it into binary form, which is ultimately placed in the LUKS2 JSON header.
+         * generate a "primary" key pair derived from that (ECC if possible, RSA as fallback). Given the seed
+         * remains fixed this will result in the same key pair whenever we specify the exact same parameters
+         * for it. We then create a PCR-bound policy session, which calculates a hash on the current PCR
+         * values of the indexes we specify. We then generate a randomized key on the host (which is the key
+         * we actually enroll in the LUKS2 keyslots), which we upload into the TPM2, where it is encrypted
+         * with the "primary" key, taking the PCR policy session into account. We then download the encrypted
+         * key from the TPM2 ("sealing") and marshall it into binary form, which is ultimately placed in the
+         * LUKS2 JSON header.
          *
          * The TPM2 "seed" key and "primary" keys never leave the TPM2 chip (and cannot be extracted at
          * all). The random key we enroll in LUKS2 we generate on the host using the Linux random device. It
@@ -470,17 +1464,40 @@
 
         start = now(CLOCK_MONOTONIC);
 
-        r = tpm2_init(device, &c);
+        CLEANUP_ERASE(hmac_sensitive);
+
+        _cleanup_tpm2_context_ Tpm2Context *c = NULL;
+        r = tpm2_context_new(device, &c);
         if (r < 0)
                 return r;
 
-        r = tpm2_make_primary(c.esys_context, &primary);
+        _cleanup_tpm2_handle_ Tpm2Handle *primary = NULL;
+        r = tpm2_make_primary(c, &primary, 0, &primary_alg);
         if (r < 0)
                 return r;
 
-        r = tpm2_make_pcr_session(c.esys_context, pcr_mask, NULL, &policy_digest);
+        /* we cannot use the bind key before its created */
+        _cleanup_tpm2_handle_ Tpm2Handle *session = NULL;
+        r = tpm2_make_encryption_session(c, primary, &TPM2_HANDLE_NONE, NULL, &session);
         if (r < 0)
-                goto finish;
+                return r;
+
+        r = tpm2_make_policy_session(
+                        c,
+                        primary,
+                        session,
+                        TPM2_SE_TRIAL,
+                        hash_pcr_mask,
+                        /* pcr_bank= */ UINT16_MAX,
+                        pubkey, pubkey_size,
+                        pubkey_pcr_mask,
+                        /* signature_json= */ NULL,
+                        !!pin,
+                        /* ret_session= */ NULL,
+                        &policy_digest,
+                        &pcr_bank);
+        if (r < 0)
+                return r;
 
         /* We use a keyed hash object (i.e. HMAC) to store the secret key we want to use for unlocking the
          * LUKS2 volume with. We don't ever use for HMAC/keyed hash operations however, we just use it
@@ -491,16 +1508,8 @@
                         .type = TPM2_ALG_KEYEDHASH,
                         .nameAlg = TPM2_ALG_SHA256,
                         .objectAttributes = TPMA_OBJECT_FIXEDTPM | TPMA_OBJECT_FIXEDPARENT,
-                        .parameters = {
-                                .keyedHashDetail = {
-                                        .scheme.scheme = TPM2_ALG_NULL,
-                                },
-                        },
-                        .unique = {
-                                .keyedHash = {
-                                        .size = 32,
-                                },
-                        },
+                        .parameters.keyedHashDetail.scheme.scheme = TPM2_ALG_NULL,
+                        .unique.keyedHash.size = SHA256_DIGEST_SIZE,
                         .authPolicy = *policy_digest,
                 },
         };
@@ -509,24 +1518,25 @@
                 .size = sizeof(hmac_sensitive.sensitive),
                 .sensitive.data.size = 32,
         };
+        if (pin)
+                hash_pin(pin, strlen(pin), &hmac_sensitive.sensitive.userAuth);
+
         assert(sizeof(hmac_sensitive.sensitive.data.buffer) >= hmac_sensitive.sensitive.data.size);
 
-        (void) tpm2_credit_random(c.esys_context);
+        (void) tpm2_credit_random(c);
 
         log_debug("Generating secret key data.");
 
-        r = genuine_random_bytes(hmac_sensitive.sensitive.data.buffer, hmac_sensitive.sensitive.data.size, RANDOM_BLOCK);
-        if (r < 0) {
-                log_error_errno(r, "Failed to generate secret key: %m");
-                goto finish;
-        }
+        r = crypto_random_bytes(hmac_sensitive.sensitive.data.buffer, hmac_sensitive.sensitive.data.size);
+        if (r < 0)
+                return log_error_errno(r, "Failed to generate secret key: %m");
 
         log_debug("Creating HMAC key.");
 
         rc = sym_Esys_Create(
-                        c.esys_context,
-                        primary,
-                        ESYS_TR_PASSWORD,
+                        c->esys_context,
+                        primary->esys_handle,
+                        session->esys_handle, /* use HMAC session to enable parameter encryption */
                         ESYS_TR_NONE,
                         ESYS_TR_NONE,
                         &hmac_sensitive,
@@ -538,18 +1548,13 @@
                         NULL,
                         NULL,
                         NULL);
-        if (rc != TSS2_RC_SUCCESS) {
-                r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                    "Failed to generate HMAC key in TPM: %s", sym_Tss2_RC_Decode(rc));
-                goto finish;
-        }
+        if (rc != TSS2_RC_SUCCESS)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                       "Failed to generate HMAC key in TPM: %s", sym_Tss2_RC_Decode(rc));
 
         secret = memdup(hmac_sensitive.sensitive.data.buffer, hmac_sensitive.sensitive.data.size);
-        explicit_bzero_safe(hmac_sensitive.sensitive.data.buffer, hmac_sensitive.sensitive.data.size);
-        if (!secret) {
-                r = log_oom();
-                goto finish;
-        }
+        if (!secret)
+                return log_oom();
 
         log_debug("Marshalling private and public part of HMAC key.");
 
@@ -559,10 +1564,8 @@
                 size_t offset = 0;
 
                 buf = malloc(k);
-                if (!buf) {
-                        r = log_oom();
-                        goto finish;
-                }
+                if (!buf)
+                        return log_oom();
 
                 rc = sym_Tss2_MU_TPM2B_PRIVATE_Marshal(private, buf, k, &offset);
                 if (rc == TSS2_RC_SUCCESS) {
@@ -573,16 +1576,12 @@
                                 break;
                         }
                 }
-                if (rc != TSS2_MU_RC_INSUFFICIENT_BUFFER) {
-                        r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                            "Failed to marshal private/public key: %s", sym_Tss2_RC_Decode(rc));
-                        goto finish;
-                }
+                if (rc != TSS2_MU_RC_INSUFFICIENT_BUFFER)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to marshal private/public key: %s", sym_Tss2_RC_Decode(rc));
 
-                if (k > SIZE_MAX / 2) {
-                        r = log_oom();
-                        goto finish;
-                }
+                if (k > SIZE_MAX / 2)
+                        return log_oom();
 
                 k *= 2;
         }
@@ -591,10 +1590,8 @@
         if (!hash)
                 return log_oom();
 
-        if (DEBUG_LOGGING) {
-                char buf[FORMAT_TIMESPAN_MAX];
-                log_debug("Completed TPM2 key sealing in %s.", format_timespan(buf, sizeof(buf), now(CLOCK_MONOTONIC) - start, 1));
-        }
+        if (DEBUG_LOGGING)
+                log_debug("Completed TPM2 key sealing in %s.", FORMAT_TIMESPAN(now(CLOCK_MONOTONIC) - start, 1));
 
         *ret_secret = TAKE_PTR(secret);
         *ret_secret_size = hmac_sensitive.sensitive.data.size;
@@ -602,17 +1599,23 @@
         *ret_blob_size = blob_size;
         *ret_pcr_hash = TAKE_PTR(hash);
         *ret_pcr_hash_size = policy_digest->size;
+        *ret_pcr_bank = pcr_bank;
+        *ret_primary_alg = primary_alg;
 
-        r = 0;
-
-finish:
-        primary = flush_context_verbose(c.esys_context, primary);
-        return r;
+        return 0;
 }
 
-int tpm2_unseal(
-                const char *device,
-                uint32_t pcr_mask,
+#define RETRY_UNSEAL_MAX 30u
+
+int tpm2_unseal(const char *device,
+                uint32_t hash_pcr_mask,
+                uint16_t pcr_bank,
+                const void *pubkey,
+                size_t pubkey_size,
+                uint32_t pubkey_pcr_mask,
+                JsonVariant *signature,
+                const char *pin,
+                uint16_t primary_alg,
                 const void *blob,
                 size_t blob_size,
                 const void *known_policy_hash,
@@ -620,8 +1623,6 @@
                 void **ret_secret,
                 size_t *ret_secret_size) {
 
-        _cleanup_(tpm2_context_destroy) struct tpm2_context c = {};
-        ESYS_TR primary = ESYS_TR_NONE, session = ESYS_TR_NONE, hmac_key = ESYS_TR_NONE;
         _cleanup_(Esys_Freep) TPM2B_SENSITIVE_DATA* unsealed = NULL;
         _cleanup_(Esys_Freep) TPM2B_DIGEST *policy_digest = NULL;
         _cleanup_(erase_and_freep) char *secret = NULL;
@@ -635,21 +1636,23 @@
         assert(blob);
         assert(blob_size > 0);
         assert(known_policy_hash_size == 0 || known_policy_hash);
+        assert(pubkey_size == 0 || pubkey);
         assert(ret_secret);
         assert(ret_secret_size);
 
-        assert(pcr_mask < (UINT32_C(1) << TPM2_PCRS_MAX)); /* Support 24 PCR banks */
+        assert(TPM2_PCR_MASK_VALID(hash_pcr_mask));
+        assert(TPM2_PCR_MASK_VALID(pubkey_pcr_mask));
 
         r = dlopen_tpm2();
         if (r < 0)
                 return log_error_errno(r, "TPM2 support is not installed.");
 
         /* So here's what we do here: We connect to the TPM2 chip. As we do when sealing we generate a
-         * "primary" key on the TPM2 chip, with the same parameters as well as a PCR-bound policy
-         * session. Given we pass the same parameters, this will result in the same "primary" key, and same
-         * policy hash (the latter of course, only if the PCR values didn't change in between). We unmarshal
-         * the encrypted key we stored in the LUKS2 JSON token header and upload it into the TPM2, where it
-         * is decrypted if the seed and the PCR policy were right ("unsealing"). We then download the result,
+         * "primary" key on the TPM2 chip, with the same parameters as well as a PCR-bound policy session.
+         * Given we pass the same parameters, this will result in the same "primary" key, and same policy
+         * hash (the latter of course, only if the PCR values didn't change in between). We unmarshal the
+         * encrypted key we stored in the LUKS2 JSON token header and upload it into the TPM2, where it is
+         * decrypted if the seed and the PCR policy were right ("unsealing"). We then download the result,
          * and use it to unlock the LUKS2 volume. */
 
         start = now(CLOCK_MONOTONIC);
@@ -668,79 +1671,113 @@
                 return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
                                        "Failed to unmarshal public key: %s", sym_Tss2_RC_Decode(rc));
 
-        r = tpm2_init(device, &c);
+        _cleanup_tpm2_context_ Tpm2Context *c = NULL;
+        r = tpm2_context_new(device, &c);
         if (r < 0)
                 return r;
 
-        r = tpm2_make_pcr_session(c.esys_context, pcr_mask, &session, &policy_digest);
-        if (r < 0)
-                goto finish;
-
-        /* If we know the policy hash to expect, and it doesn't match, we can shortcut things here, and not
-         * wait until the TPM2 tells us to go away. */
-        if (known_policy_hash_size > 0 &&
-            memcmp_nn(policy_digest->buffer, policy_digest->size, known_policy_hash, known_policy_hash_size) != 0)
-                return log_error_errno(SYNTHETIC_ERRNO(EPERM),
-                                       "Current policy digest does not match stored policy digest, cancelling TPM2 authentication attempt.");
-
-        r = tpm2_make_primary(c.esys_context, &primary);
+        _cleanup_tpm2_handle_ Tpm2Handle *primary = NULL;
+        r = tpm2_make_primary(c, &primary, primary_alg, NULL);
         if (r < 0)
                 return r;
 
         log_debug("Loading HMAC key into TPM.");
 
+        /*
+         * Nothing sensitive on the bus, no need for encryption. Even if an attacker
+         * gives you back a different key, the session initiation will fail if a pin
+         * is provided. If an attacker gives back a bad key, we already lost since
+         * primary key is not verified and they could attack there as well.
+         */
+        _cleanup_tpm2_handle_ Tpm2Handle *hmac_key = NULL;
+        r = tpm2_handle_new(c, &hmac_key);
+        if (r < 0)
+                return r;
+
         rc = sym_Esys_Load(
-                        c.esys_context,
-                        primary,
+                        c->esys_context,
+                        primary->esys_handle,
                         ESYS_TR_PASSWORD,
                         ESYS_TR_NONE,
                         ESYS_TR_NONE,
                         &private,
                         &public,
-                        &hmac_key);
+                        &hmac_key->esys_handle);
         if (rc != TSS2_RC_SUCCESS) {
-                r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                    "Failed to load HMAC key in TPM: %s", sym_Tss2_RC_Decode(rc));
-                goto finish;
+                /* If we're in dictionary attack lockout mode, we should see a lockout error here, which we
+                 * need to translate for the caller. */
+                if (rc == TPM2_RC_LOCKOUT)
+                        return log_error_errno(
+                                        SYNTHETIC_ERRNO(ENOLCK),
+                                        "TPM2 device is in dictionary attack lockout mode.");
+                else
+                        return log_error_errno(
+                                        SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                        "Failed to load HMAC key in TPM: %s",
+                                        sym_Tss2_RC_Decode(rc));
         }
 
-        log_debug("Unsealing HMAC key.");
+        _cleanup_tpm2_handle_ Tpm2Handle *hmac_session = NULL;
+        r = tpm2_make_encryption_session(c, primary, hmac_key, pin, &hmac_session);
+        if (r < 0)
+                return r;
 
-        rc = sym_Esys_Unseal(
-                        c.esys_context,
-                        hmac_key,
-                        session,
-                        ESYS_TR_NONE,
-                        ESYS_TR_NONE,
-                        &unsealed);
-        if (rc != TSS2_RC_SUCCESS) {
-                r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                    "Failed to unseal HMAC key in TPM: %s", sym_Tss2_RC_Decode(rc));
-                goto finish;
+        for (unsigned i = RETRY_UNSEAL_MAX;; i--) {
+                _cleanup_tpm2_handle_ Tpm2Handle *policy_session = NULL;
+                r = tpm2_make_policy_session(
+                                c,
+                                primary,
+                                hmac_session,
+                                TPM2_SE_POLICY,
+                                hash_pcr_mask,
+                                pcr_bank,
+                                pubkey, pubkey_size,
+                                pubkey_pcr_mask,
+                                signature,
+                                !!pin,
+                                &policy_session,
+                                &policy_digest,
+                                /* ret_pcr_bank= */ NULL);
+                if (r < 0)
+                        return r;
+
+                /* If we know the policy hash to expect, and it doesn't match, we can shortcut things here, and not
+                 * wait until the TPM2 tells us to go away. */
+                if (known_policy_hash_size > 0 &&
+                        memcmp_nn(policy_digest->buffer, policy_digest->size, known_policy_hash, known_policy_hash_size) != 0)
+                                return log_error_errno(SYNTHETIC_ERRNO(EPERM),
+                                                       "Current policy digest does not match stored policy digest, cancelling "
+                                                       "TPM2 authentication attempt.");
+
+                log_debug("Unsealing HMAC key.");
+
+                rc = sym_Esys_Unseal(
+                                c->esys_context,
+                                hmac_key->esys_handle,
+                                policy_session->esys_handle,
+                                hmac_session->esys_handle, /* use HMAC session to enable parameter encryption */
+                                ESYS_TR_NONE,
+                                &unsealed);
+                if (rc == TSS2_RC_SUCCESS)
+                        break;
+                if (rc != TPM2_RC_PCR_CHANGED || i == 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                               "Failed to unseal HMAC key in TPM: %s", sym_Tss2_RC_Decode(rc));
+                log_debug("A PCR value changed during the TPM2 policy session, restarting HMAC key unsealing (%u tries left).", i);
         }
 
         secret = memdup(unsealed->buffer, unsealed->size);
         explicit_bzero_safe(unsealed->buffer, unsealed->size);
-        if (!secret) {
-                r = log_oom();
-                goto finish;
-        }
+        if (!secret)
+                return log_oom();
 
-        if (DEBUG_LOGGING) {
-                char buf[FORMAT_TIMESPAN_MAX];
-                log_debug("Completed TPM2 key unsealing in %s.", format_timespan(buf, sizeof(buf), now(CLOCK_MONOTONIC) - start, 1));
-        }
+        if (DEBUG_LOGGING)
+                log_debug("Completed TPM2 key unsealing in %s.", FORMAT_TIMESPAN(now(CLOCK_MONOTONIC) - start, 1));
 
         *ret_secret = TAKE_PTR(secret);
         *ret_secret_size = unsealed->size;
 
-        r = 0;
-
-finish:
-        primary = flush_context_verbose(c.esys_context, primary);
-        session = flush_context_verbose(c.esys_context, session);
-        hmac_key = flush_context_verbose(c.esys_context, hmac_key);
-        return r;
+        return 0;
 }
 
 #endif
@@ -869,13 +1906,94 @@
 #endif
 }
 
+#if HAVE_TPM2
+int tpm2_extend_bytes(
+                Tpm2Context *c,
+                char **banks,
+                unsigned pcr_index,
+                const void *data,
+                size_t data_size,
+                const void *secret,
+                size_t secret_size) {
+
+#if HAVE_OPENSSL
+        TPML_DIGEST_VALUES values = {};
+        TSS2_RC rc;
+
+        assert(c);
+        assert(data || data_size == 0);
+        assert(secret || secret_size == 0);
+
+        if (data_size == SIZE_MAX)
+                data_size = strlen(data);
+        if (secret_size == SIZE_MAX)
+                secret_size = strlen(secret);
+
+        if (pcr_index >= TPM2_PCRS_MAX)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Can't measure into unsupported PCR %u, refusing.", pcr_index);
+
+        if (strv_isempty(banks))
+                return 0;
+
+        STRV_FOREACH(bank, banks) {
+                const EVP_MD *implementation;
+                int id;
+
+                assert_se(implementation = EVP_get_digestbyname(*bank));
+
+                if (values.count >= ELEMENTSOF(values.digests))
+                        return log_error_errno(SYNTHETIC_ERRNO(E2BIG), "Too many banks selected.");
+
+                if ((size_t) EVP_MD_size(implementation) > sizeof(values.digests[values.count].digest))
+                        return log_error_errno(SYNTHETIC_ERRNO(E2BIG), "Hash result too large for TPM2.");
+
+                id = tpm2_hash_alg_from_string(EVP_MD_name(implementation));
+                if (id < 0)
+                        return log_error_errno(id, "Can't map hash name to TPM2.");
+
+                values.digests[values.count].hashAlg = id;
+
+                /* So here's a twist: sometimes we want to measure secrets (e.g. root file system volume
+                 * key), but we'd rather not leak a literal hash of the secret to the TPM (given that the
+                 * wire is unprotected, and some other subsystem might use the simple, literal hash of the
+                 * secret for other purposes, maybe because it needs a shorter secret derived from it for
+                 * some unrelated purpose, who knows). Hence we instead measure an HMAC signature of a
+                 * private non-secret string instead. */
+                if (secret_size > 0) {
+                        if (!HMAC(implementation, secret, secret_size, data, data_size, (unsigned char*) &values.digests[values.count].digest, NULL))
+                                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "Failed to calculate HMAC of data to measure.");
+                } else if (EVP_Digest(data, data_size, (unsigned char*) &values.digests[values.count].digest, NULL, implementation, NULL) != 1)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "Failed to hash data to measure.");
+
+                values.count++;
+        }
+
+        rc = sym_Esys_PCR_Extend(
+                        c->esys_context,
+                        ESYS_TR_PCR0 + pcr_index,
+                        ESYS_TR_PASSWORD,
+                        ESYS_TR_NONE,
+                        ESYS_TR_NONE,
+                        &values);
+        if (rc != TSS2_RC_SUCCESS)
+                return log_error_errno(
+                                SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+                                "Failed to measure into PCR %u: %s",
+                                pcr_index,
+                                sym_Tss2_RC_Decode(rc));
+
+        return 0;
+#else /* HAVE_OPENSSL */
+        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "OpenSSL support is disabled.");
+#endif
+}
+#endif
+
 int tpm2_parse_pcrs(const char *s, uint32_t *ret) {
-        const char *p = s;
+        const char *p = ASSERT_PTR(s);
         uint32_t mask = 0;
         int r;
 
-        assert(s);
-
         if (isempty(s)) {
                 *ret = 0;
                 return 0;
@@ -910,52 +2028,117 @@
         return 0;
 }
 
-int tpm2_make_luks2_json(
-                int keyslot,
-                uint32_t pcr_mask,
-                const void *blob,
-                size_t blob_size,
-                const void *policy_hash,
-                size_t policy_hash_size,
-                JsonVariant **ret) {
-
-        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *a = NULL;
-        _cleanup_free_ char *keyslot_as_string = NULL;
+int tpm2_make_pcr_json_array(uint32_t pcr_mask, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *a = NULL;
         JsonVariant* pcr_array[TPM2_PCRS_MAX];
         unsigned n_pcrs = 0;
         int r;
 
-        assert(blob || blob_size == 0);
-        assert(policy_hash || policy_hash_size == 0);
-
-        if (asprintf(&keyslot_as_string, "%i", keyslot) < 0)
-                return -ENOMEM;
-
-        for (unsigned i = 0; i < ELEMENTSOF(pcr_array); i++) {
+        for (size_t i = 0; i < ELEMENTSOF(pcr_array); i++) {
                 if ((pcr_mask & (UINT32_C(1) << i)) == 0)
                         continue;
 
                 r = json_variant_new_integer(pcr_array + n_pcrs, i);
-                if (r < 0) {
-                        json_variant_unref_many(pcr_array, n_pcrs);
-                        return -ENOMEM;
-                }
+                if (r < 0)
+                        goto finish;
 
                 n_pcrs++;
         }
 
         r = json_variant_new_array(&a, pcr_array, n_pcrs);
-        json_variant_unref_many(pcr_array, n_pcrs);
         if (r < 0)
+                goto finish;
+
+        if (ret)
+                *ret = TAKE_PTR(a);
+        r = 0;
+
+finish:
+        json_variant_unref_many(pcr_array, n_pcrs);
+        return r;
+}
+
+int tpm2_parse_pcr_json_array(JsonVariant *v, uint32_t *ret) {
+        JsonVariant *e;
+        uint32_t mask = 0;
+
+        if (!json_variant_is_array(v))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 PCR array is not a JSON array.");
+
+        JSON_VARIANT_ARRAY_FOREACH(e, v) {
+                uint64_t u;
+
+                if (!json_variant_is_unsigned(e))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 PCR is not an unsigned integer.");
+
+                u = json_variant_unsigned(e);
+                if (u >= TPM2_PCRS_MAX)
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 PCR number out of range: %" PRIu64, u);
+
+                mask |= UINT32_C(1) << u;
+        }
+
+        if (ret)
+                *ret = mask;
+
+        return 0;
+}
+
+int tpm2_make_luks2_json(
+                int keyslot,
+                uint32_t hash_pcr_mask,
+                uint16_t pcr_bank,
+                const void *pubkey,
+                size_t pubkey_size,
+                uint32_t pubkey_pcr_mask,
+                uint16_t primary_alg,
+                const void *blob,
+                size_t blob_size,
+                const void *policy_hash,
+                size_t policy_hash_size,
+                const void *salt,
+                size_t salt_size,
+                TPM2Flags flags,
+                JsonVariant **ret) {
+
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *hmj = NULL, *pkmj = NULL;
+        _cleanup_free_ char *keyslot_as_string = NULL;
+        int r;
+
+        assert(blob || blob_size == 0);
+        assert(policy_hash || policy_hash_size == 0);
+        assert(pubkey || pubkey_size == 0);
+
+        if (asprintf(&keyslot_as_string, "%i", keyslot) < 0)
                 return -ENOMEM;
 
+        r = tpm2_make_pcr_json_array(hash_pcr_mask, &hmj);
+        if (r < 0)
+                return r;
+
+        if (pubkey_pcr_mask != 0) {
+                r = tpm2_make_pcr_json_array(pubkey_pcr_mask, &pkmj);
+                if (r < 0)
+                        return r;
+        }
+
+        /* Note: We made the mistake of using "-" in the field names, which isn't particular compatible with
+         * other programming languages. Let's not make things worse though, i.e. future additions to the JSON
+         * object should use "_" rather than "-" in field names. */
+
         r = json_build(&v,
                        JSON_BUILD_OBJECT(
-                                       JSON_BUILD_PAIR("type", JSON_BUILD_STRING("systemd-tpm2")),
+                                       JSON_BUILD_PAIR("type", JSON_BUILD_CONST_STRING("systemd-tpm2")),
                                        JSON_BUILD_PAIR("keyslots", JSON_BUILD_ARRAY(JSON_BUILD_STRING(keyslot_as_string))),
                                        JSON_BUILD_PAIR("tpm2-blob", JSON_BUILD_BASE64(blob, blob_size)),
-                                       JSON_BUILD_PAIR("tpm2-pcrs", JSON_BUILD_VARIANT(a)),
-                                       JSON_BUILD_PAIR("tpm2-policy-hash", JSON_BUILD_HEX(policy_hash, policy_hash_size))));
+                                       JSON_BUILD_PAIR("tpm2-pcrs", JSON_BUILD_VARIANT(hmj)),
+                                       JSON_BUILD_PAIR_CONDITION(!!tpm2_hash_alg_to_string(pcr_bank), "tpm2-pcr-bank", JSON_BUILD_STRING(tpm2_hash_alg_to_string(pcr_bank))),
+                                       JSON_BUILD_PAIR_CONDITION(!!tpm2_asym_alg_to_string(primary_alg), "tpm2-primary-alg", JSON_BUILD_STRING(tpm2_asym_alg_to_string(primary_alg))),
+                                       JSON_BUILD_PAIR("tpm2-policy-hash", JSON_BUILD_HEX(policy_hash, policy_hash_size)),
+                                       JSON_BUILD_PAIR("tpm2-pin", JSON_BUILD_BOOLEAN(flags & TPM2_FLAGS_USE_PIN)),
+                                       JSON_BUILD_PAIR_CONDITION(pubkey_pcr_mask != 0, "tpm2_pubkey_pcrs", JSON_BUILD_VARIANT(pkmj)),
+                                       JSON_BUILD_PAIR_CONDITION(pubkey_pcr_mask != 0, "tpm2_pubkey", JSON_BUILD_BASE64(pubkey, pubkey_size)),
+                                       JSON_BUILD_PAIR_CONDITION(salt, "tpm2_salt", JSON_BUILD_BASE64(salt, salt_size))));
         if (r < 0)
                 return r;
 
@@ -964,3 +2147,377 @@
 
         return keyslot;
 }
+
+int tpm2_parse_luks2_json(
+                JsonVariant *v,
+                int *ret_keyslot,
+                uint32_t *ret_hash_pcr_mask,
+                uint16_t *ret_pcr_bank,
+                void **ret_pubkey,
+                size_t *ret_pubkey_size,
+                uint32_t *ret_pubkey_pcr_mask,
+                uint16_t *ret_primary_alg,
+                void **ret_blob,
+                size_t *ret_blob_size,
+                void **ret_policy_hash,
+                size_t *ret_policy_hash_size,
+                void **ret_salt,
+                size_t *ret_salt_size,
+                TPM2Flags *ret_flags) {
+
+        _cleanup_free_ void *blob = NULL, *policy_hash = NULL, *pubkey = NULL, *salt = NULL;
+        size_t blob_size = 0, policy_hash_size = 0, pubkey_size = 0, salt_size = 0;
+        uint32_t hash_pcr_mask = 0, pubkey_pcr_mask = 0;
+        uint16_t primary_alg = TPM2_ALG_ECC; /* ECC was the only supported algorithm in systemd < 250, use that as implied default, for compatibility */
+        uint16_t pcr_bank = UINT16_MAX; /* default: pick automatically */
+        int r, keyslot = -1;
+        TPM2Flags flags = 0;
+        JsonVariant *w;
+
+        assert(v);
+
+        if (ret_keyslot) {
+                keyslot = cryptsetup_get_keyslot_from_token(v);
+                if (keyslot < 0) {
+                        /* Return a recognizable error when parsing this field, so that callers can handle parsing
+                         * errors of the keyslots field gracefully, since it's not 'owned' by us, but by the LUKS2
+                         * spec */
+                        log_debug_errno(keyslot, "Failed to extract keyslot index from TPM2 JSON data token, skipping: %m");
+                        return -EUCLEAN;
+                }
+        }
+
+        w = json_variant_by_key(v, "tpm2-pcrs");
+        if (!w)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 token data lacks 'tpm2-pcrs' field.");
+
+        r = tpm2_parse_pcr_json_array(w, &hash_pcr_mask);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to parse TPM2 PCR mask: %m");
+
+        /* The bank field is optional, since it was added in systemd 250 only. Before the bank was hardcoded
+         * to SHA256. */
+        w = json_variant_by_key(v, "tpm2-pcr-bank");
+        if (w) {
+                /* The PCR bank field is optional */
+
+                if (!json_variant_is_string(w))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 PCR bank is not a string.");
+
+                r = tpm2_hash_alg_from_string(json_variant_string(w));
+                if (r < 0)
+                        return log_debug_errno(r, "TPM2 PCR bank invalid or not supported: %s", json_variant_string(w));
+
+                pcr_bank = r;
+        }
+
+        /* The primary key algorithm field is optional, since it was also added in systemd 250 only. Before
+         * the algorithm was hardcoded to ECC. */
+        w = json_variant_by_key(v, "tpm2-primary-alg");
+        if (w) {
+                /* The primary key algorithm is optional */
+
+                if (!json_variant_is_string(w))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 primary key algorithm is not a string.");
+
+                r = tpm2_asym_alg_from_string(json_variant_string(w));
+                if (r < 0)
+                        return log_debug_errno(r, "TPM2 asymmetric algorithm invalid or not supported: %s", json_variant_string(w));
+
+                primary_alg = r;
+        }
+
+        w = json_variant_by_key(v, "tpm2-blob");
+        if (!w)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 token data lacks 'tpm2-blob' field.");
+
+        r = json_variant_unbase64(w, &blob, &blob_size);
+        if (r < 0)
+                return log_debug_errno(r, "Invalid base64 data in 'tpm2-blob' field.");
+
+        w = json_variant_by_key(v, "tpm2-policy-hash");
+        if (!w)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 token data lacks 'tpm2-policy-hash' field.");
+
+        r = json_variant_unhex(w, &policy_hash, &policy_hash_size);
+        if (r < 0)
+                return log_debug_errno(r, "Invalid base64 data in 'tpm2-policy-hash' field.");
+
+        w = json_variant_by_key(v, "tpm2-pin");
+        if (w) {
+                if (!json_variant_is_boolean(w))
+                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "TPM2 PIN policy is not a boolean.");
+
+                SET_FLAG(flags, TPM2_FLAGS_USE_PIN, json_variant_boolean(w));
+        }
+
+        w = json_variant_by_key(v, "tpm2_salt");
+        if (w) {
+                r = json_variant_unbase64(w, &salt, &salt_size);
+                if (r < 0)
+                        return log_debug_errno(r, "Invalid base64 data in 'tpm2_salt' field.");
+        }
+
+        w = json_variant_by_key(v, "tpm2_pubkey_pcrs");
+        if (w) {
+                r = tpm2_parse_pcr_json_array(w, &pubkey_pcr_mask);
+                if (r < 0)
+                        return r;
+        }
+
+        w = json_variant_by_key(v, "tpm2_pubkey");
+        if (w) {
+                r = json_variant_unbase64(w, &pubkey, &pubkey_size);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to decode PCR public key.");
+        } else if (pubkey_pcr_mask != 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Public key PCR mask set, but not public key included in JSON data, refusing.");
+
+        if (ret_keyslot)
+                *ret_keyslot = keyslot;
+        if (ret_hash_pcr_mask)
+                *ret_hash_pcr_mask = hash_pcr_mask;
+        if (ret_pcr_bank)
+                *ret_pcr_bank = pcr_bank;
+        if (ret_pubkey)
+                *ret_pubkey = TAKE_PTR(pubkey);
+        if (ret_pubkey_size)
+                *ret_pubkey_size = pubkey_size;
+        if (ret_pubkey_pcr_mask)
+                *ret_pubkey_pcr_mask = pubkey_pcr_mask;
+        if (ret_primary_alg)
+                *ret_primary_alg = primary_alg;
+        if (ret_blob)
+                *ret_blob = TAKE_PTR(blob);
+        if (ret_blob_size)
+                *ret_blob_size = blob_size;
+        if (ret_policy_hash)
+                *ret_policy_hash = TAKE_PTR(policy_hash);
+        if (ret_policy_hash_size)
+                *ret_policy_hash_size = policy_hash_size;
+        if (ret_salt)
+                *ret_salt = TAKE_PTR(salt);
+        if (ret_salt_size)
+                *ret_salt_size = salt_size;
+        if (ret_flags)
+                *ret_flags = flags;
+
+        return 0;
+}
+
+const char *tpm2_hash_alg_to_string(uint16_t alg) {
+        if (alg == TPM2_ALG_SHA1)
+                return "sha1";
+        if (alg == TPM2_ALG_SHA256)
+                return "sha256";
+        if (alg == TPM2_ALG_SHA384)
+                return "sha384";
+        if (alg == TPM2_ALG_SHA512)
+                return "sha512";
+        return NULL;
+}
+
+int tpm2_hash_alg_from_string(const char *alg) {
+        if (strcaseeq_ptr(alg, "sha1"))
+                return TPM2_ALG_SHA1;
+        if (strcaseeq_ptr(alg, "sha256"))
+                return TPM2_ALG_SHA256;
+        if (strcaseeq_ptr(alg, "sha384"))
+                return TPM2_ALG_SHA384;
+        if (strcaseeq_ptr(alg, "sha512"))
+                return TPM2_ALG_SHA512;
+        return -EINVAL;
+}
+
+const char *tpm2_asym_alg_to_string(uint16_t alg) {
+        if (alg == TPM2_ALG_ECC)
+                return "ecc";
+        if (alg == TPM2_ALG_RSA)
+                return "rsa";
+        return NULL;
+}
+
+int tpm2_asym_alg_from_string(const char *alg) {
+        if (strcaseeq_ptr(alg, "ecc"))
+                return TPM2_ALG_ECC;
+        if (strcaseeq_ptr(alg, "rsa"))
+                return TPM2_ALG_RSA;
+        return -EINVAL;
+}
+
+Tpm2Support tpm2_support(void) {
+        Tpm2Support support = TPM2_SUPPORT_NONE;
+        int r;
+
+        if (detect_container() <= 0) {
+                /* Check if there's a /dev/tpmrm* device via sysfs. If we run in a container we likely just
+                 * got the host sysfs mounted. Since devices are generally not virtualized for containers,
+                 * let's assume containers never have a TPM, at least for now. */
+
+                r = dir_is_empty("/sys/class/tpmrm", /* ignore_hidden_or_backup= */ false);
+                if (r < 0) {
+                        if (r != -ENOENT)
+                                log_debug_errno(r, "Unable to test whether /sys/class/tpmrm/ exists and is populated, assuming it is not: %m");
+                } else if (r == 0) /* populated! */
+                        support |= TPM2_SUPPORT_SUBSYSTEM|TPM2_SUPPORT_DRIVER;
+                else
+                        /* If the directory exists but is empty, we know the subsystem is enabled but no
+                         * driver has been loaded yet. */
+                        support |= TPM2_SUPPORT_SUBSYSTEM;
+        }
+
+        if (efi_has_tpm2())
+                support |= TPM2_SUPPORT_FIRMWARE;
+
+#if HAVE_TPM2
+        support |= TPM2_SUPPORT_SYSTEM;
+#endif
+
+        return support;
+}
+
+int tpm2_parse_pcr_argument(const char *arg, uint32_t *mask) {
+        uint32_t m;
+        int r;
+
+        assert(mask);
+
+        /* For use in getopt_long() command line parsers: merges masks specified on the command line */
+
+        if (isempty(arg)) {
+                *mask = 0;
+                return 0;
+        }
+
+        r = tpm2_parse_pcrs(arg, &m);
+        if (r < 0)
+                return r;
+
+        if (*mask == UINT32_MAX)
+                *mask = m;
+        else
+                *mask |= m;
+
+        return 0;
+}
+
+int tpm2_load_pcr_signature(const char *path, JsonVariant **ret) {
+        _cleanup_free_ char *discovered_path = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        int r;
+
+        /* Tries to load a JSON PCR signature file. Takes an absolute path, a simple file name or NULL. In
+         * the latter two cases searches in /etc/, /usr/lib/, /run/, as usual. */
+
+        if (!path)
+                path = "tpm2-pcr-signature.json";
+
+        r = search_and_fopen(path, "re", NULL, (const char**) CONF_PATHS_STRV("systemd"), &f, &discovered_path);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to find TPM PCR signature file '%s': %m", path);
+
+        r = json_parse_file(f, discovered_path, 0, ret, NULL, NULL);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to parse TPM PCR signature JSON object '%s': %m", discovered_path);
+
+        return 0;
+}
+
+int tpm2_load_pcr_public_key(const char *path, void **ret_pubkey, size_t *ret_pubkey_size) {
+        _cleanup_free_ char *discovered_path = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        int r;
+
+        /* Tries to load a PCR public key file. Takes an absolute path, a simple file name or NULL. In the
+         * latter two cases searches in /etc/, /usr/lib/, /run/, as usual. */
+
+        if (!path)
+                path = "tpm2-pcr-public-key.pem";
+
+        r = search_and_fopen(path, "re", NULL, (const char**) CONF_PATHS_STRV("systemd"), &f, &discovered_path);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to find TPM PCR public key file '%s': %m", path);
+
+        r = read_full_stream(f, (char**) ret_pubkey, ret_pubkey_size);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to load TPM PCR public key PEM file '%s': %m", discovered_path);
+
+        return 0;
+}
+
+int pcr_mask_to_string(uint32_t mask, char **ret) {
+        _cleanup_free_ char *buf = NULL;
+        int r;
+
+        assert(ret);
+
+        for (unsigned i = 0; i < TPM2_PCRS_MAX; i++) {
+                if (!(mask & (UINT32_C(1) << i)))
+                        continue;
+
+                r = strextendf_with_separator(&buf, "+", "%u", i);
+                if (r < 0)
+                        return r;
+        }
+
+        *ret = TAKE_PTR(buf);
+        return 0;
+}
+
+#define PBKDF2_HMAC_SHA256_ITERATIONS 10000
+
+/*
+ * Implements PBKDF2 HMAC SHA256 for a derived keylen of 32
+ * bytes and for PBKDF2_HMAC_SHA256_ITERATIONS count.
+ * I found the wikipedia entry relevant and it contains links to
+ * relevant RFCs:
+ *   - https://en.wikipedia.org/wiki/PBKDF2
+ *   - https://www.rfc-editor.org/rfc/rfc2898#section-5.2
+ */
+int tpm2_util_pbkdf2_hmac_sha256(const void *pass,
+                    size_t passlen,
+                    const void *salt,
+                    size_t saltlen,
+                    uint8_t ret_key[static SHA256_DIGEST_SIZE]) {
+
+        uint8_t _cleanup_(erase_and_freep) *buffer = NULL;
+        uint8_t u[SHA256_DIGEST_SIZE];
+
+        /* To keep this simple, since derived KeyLen (dkLen in docs)
+         * Is the same as the hash output, we don't need multiple
+         * blocks. Part of the algorithm is to add the block count
+         * in, but this can be hardcoded to 1.
+         */
+        static const uint8_t block_cnt[] = { 0, 0, 0, 1 };
+
+        assert (salt);
+        assert (saltlen > 0);
+        assert (saltlen <= (SIZE_MAX - sizeof(block_cnt)));
+        assert (passlen > 0);
+
+        /*
+         * Build a buffer of salt + block_cnt and hmac_sha256 it we
+         * do this as we don't have a context builder for HMAC_SHA256.
+         */
+        buffer = malloc(saltlen + sizeof(block_cnt));
+        if (!buffer)
+                return -ENOMEM;
+
+        memcpy(buffer, salt, saltlen);
+        memcpy(&buffer[saltlen], block_cnt, sizeof(block_cnt));
+
+        hmac_sha256(pass, passlen, buffer, saltlen + sizeof(block_cnt), u);
+
+        /* dk needs to be an unmodified u as u gets modified in the loop */
+        memcpy(ret_key, u, SHA256_DIGEST_SIZE);
+        uint8_t *dk = ret_key;
+
+        for (size_t i = 1; i < PBKDF2_HMAC_SHA256_ITERATIONS; i++) {
+                hmac_sha256(pass, passlen, u, sizeof(u), u);
+
+                for (size_t j=0; j < sizeof(u); j++)
+                        dk[j] ^= u[j];
+        }
+
+        return 0;
+}
diff --git a/src/shared/tpm2-util.h b/src/shared/tpm2-util.h
index 82cd186..d26a945 100644
--- a/src/shared/tpm2-util.h
+++ b/src/shared/tpm2-util.h
@@ -1,8 +1,15 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <stdbool.h>
+
 #include "json.h"
 #include "macro.h"
+#include "sha256.h"
+
+typedef enum TPM2Flags {
+        TPM2_FLAGS_USE_PIN = 1 << 0,
+} TPM2Flags;
 
 #if HAVE_TPM2
 
@@ -15,14 +22,24 @@
 extern void (*sym_Esys_Finalize)(ESYS_CONTEXT **context);
 extern TSS2_RC (*sym_Esys_FlushContext)(ESYS_CONTEXT *esysContext, ESYS_TR flushHandle);
 extern void (*sym_Esys_Free)(void *ptr);
+extern TSS2_RC (*sym_Esys_GetCapability)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2_CAP capability, UINT32 property, UINT32 propertyCount, TPMI_YES_NO *moreData, TPMS_CAPABILITY_DATA **capabilityData);
 extern TSS2_RC (*sym_Esys_GetRandom)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, UINT16 bytesRequested, TPM2B_DIGEST **randomBytes);
 extern TSS2_RC (*sym_Esys_Initialize)(ESYS_CONTEXT **esys_context,  TSS2_TCTI_CONTEXT *tcti, TSS2_ABI_VERSION *abiVersion);
 extern TSS2_RC (*sym_Esys_Load)(ESYS_CONTEXT *esysContext, ESYS_TR parentHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_PRIVATE *inPrivate, const TPM2B_PUBLIC *inPublic, ESYS_TR *objectHandle);
+extern TSS2_RC (*sym_Esys_LoadExternal)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_SENSITIVE *inPrivate, const TPM2B_PUBLIC *inPublic, ESYS_TR hierarchy, ESYS_TR *objectHandle);
+extern TSS2_RC (*sym_Esys_PCR_Extend)(ESYS_CONTEXT *esysContext, ESYS_TR pcrHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPML_DIGEST_VALUES *digests);
+extern TSS2_RC (*sym_Esys_PCR_Read)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1,ESYS_TR shandle2, ESYS_TR shandle3, const TPML_PCR_SELECTION *pcrSelectionIn, UINT32 *pcrUpdateCounter, TPML_PCR_SELECTION **pcrSelectionOut, TPML_DIGEST **pcrValues);
+extern TSS2_RC (*sym_Esys_PolicyAuthorize)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *approvedPolicy, const TPM2B_NONCE *policyRef, const TPM2B_NAME *keySign, const TPMT_TK_VERIFIED *checkTicket);
+extern TSS2_RC (*sym_Esys_PolicyAuthValue)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
 extern TSS2_RC (*sym_Esys_PolicyGetDigest)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_DIGEST **policyDigest);
 extern TSS2_RC (*sym_Esys_PolicyPCR)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *pcrDigest, const TPML_PCR_SELECTION *pcrs);
 extern TSS2_RC (*sym_Esys_StartAuthSession)(ESYS_CONTEXT *esysContext, ESYS_TR tpmKey, ESYS_TR bind, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_NONCE *nonceCaller, TPM2_SE sessionType, const TPMT_SYM_DEF *symmetric, TPMI_ALG_HASH authHash, ESYS_TR *sessionHandle);
 extern TSS2_RC (*sym_Esys_Startup)(ESYS_CONTEXT *esysContext, TPM2_SU startupType);
+extern TSS2_RC (*sym_Esys_TRSess_SetAttributes)(ESYS_CONTEXT *esysContext, ESYS_TR session, TPMA_SESSION flags, TPMA_SESSION mask);
+extern TSS2_RC (*sym_Esys_TR_GetName)(ESYS_CONTEXT *esysContext, ESYS_TR handle, TPM2B_NAME **name);
+extern TSS2_RC (*sym_Esys_TR_SetAuth)(ESYS_CONTEXT *esysContext, ESYS_TR handle, TPM2B_AUTH const *authValue);
 extern TSS2_RC (*sym_Esys_Unseal)(ESYS_CONTEXT *esysContext, ESYS_TR itemHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_SENSITIVE_DATA **outData);
+extern TSS2_RC (*sym_Esys_VerifySignature)(ESYS_CONTEXT *esysContext, ESYS_TR keyHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *digest, const TPMT_SIGNATURE *signature, TPMT_TK_VERIFIED **validation);
 
 extern const char* (*sym_Tss2_RC_Decode)(TSS2_RC rc);
 
@@ -33,19 +50,133 @@
 
 int dlopen_tpm2(void);
 
-int tpm2_seal(const char *device, uint32_t pcr_mask, void **ret_secret, size_t *ret_secret_size, void **ret_blob, size_t *ret_blob_size, void **ret_pcr_hash, size_t *ret_pcr_hash_size);
-int tpm2_unseal(const char *device, uint32_t pcr_mask, const void *blob, size_t blob_size, const void *pcr_hash, size_t pcr_hash_size, void **ret_secret, size_t *ret_secret_size);
+int tpm2_seal(const char *device, uint32_t hash_pcr_mask, const void *pubkey, size_t pubkey_size, uint32_t pubkey_pcr_mask, const char *pin, void **ret_secret, size_t *ret_secret_size, void **ret_blob, size_t *ret_blob_size, void **ret_pcr_hash, size_t *ret_pcr_hash_size, uint16_t *ret_pcr_bank, uint16_t *ret_primary_alg);
+int tpm2_unseal(const char *device, uint32_t hash_pcr_mask, uint16_t pcr_bank, const void *pubkey, size_t pubkey_size, uint32_t pubkey_pcr_mask, JsonVariant *signature, const char *pin, uint16_t primary_alg, const void *blob, size_t blob_size, const void *policy_hash, size_t policy_hash_size, void **ret_secret, size_t *ret_secret_size);
 
-#endif
+typedef struct {
+        unsigned n_ref;
+
+        void *tcti_dl;
+        TSS2_TCTI_CONTEXT *tcti_context;
+        ESYS_CONTEXT *esys_context;
+} Tpm2Context;
+
+int tpm2_context_new(const char *device, Tpm2Context **ret_context);
+Tpm2Context *tpm2_context_ref(Tpm2Context *context);
+Tpm2Context *tpm2_context_unref(Tpm2Context *context);
+DEFINE_TRIVIAL_CLEANUP_FUNC(Tpm2Context*, tpm2_context_unref);
+#define _cleanup_tpm2_context_ _cleanup_(tpm2_context_unrefp)
+
+typedef struct {
+        Tpm2Context *tpm2_context;
+        ESYS_TR esys_handle;
+} Tpm2Handle;
+
+#define _tpm2_handle(c, h) { .tpm2_context = (c), .esys_handle = (h), }
+static const Tpm2Handle TPM2_HANDLE_NONE = _tpm2_handle(NULL, ESYS_TR_NONE);
+
+int tpm2_handle_new(Tpm2Context *context, Tpm2Handle **ret_handle);
+Tpm2Handle *tpm2_handle_free(Tpm2Handle *handle);
+DEFINE_TRIVIAL_CLEANUP_FUNC(Tpm2Handle*, tpm2_handle_free);
+#define _cleanup_tpm2_handle_ _cleanup_(tpm2_handle_freep)
+
+void tpm2_pcr_mask_to_selection(uint32_t mask, uint16_t bank, TPML_PCR_SELECTION *ret);
+
+static inline void Esys_Freep(void *p) {
+        if (*(void**) p)
+                sym_Esys_Free(*(void**) p);
+}
+
+int tpm2_get_good_pcr_banks(Tpm2Context *c, uint32_t pcr_mask, TPMI_ALG_HASH **ret_banks);
+int tpm2_get_good_pcr_banks_strv(Tpm2Context *c, uint32_t pcr_mask, char ***ret);
+
+int tpm2_extend_bytes(Tpm2Context *c, char **banks, unsigned pcr_index, const void *data, size_t data_size, const void *secret, size_t secret_size);
+
+#else /* HAVE_TPM2 */
+typedef struct {} Tpm2Context;
+typedef struct {} Tpm2Handle;
+#endif /* HAVE_TPM2 */
 
 int tpm2_list_devices(void);
 int tpm2_find_device_auto(int log_level, char **ret);
 
 int tpm2_parse_pcrs(const char *s, uint32_t *ret);
 
-int tpm2_make_luks2_json(int keyslot, uint32_t pcr_mask, const void *blob, size_t blob_size, const void *policy_hash, size_t policy_hash_size, JsonVariant **ret);
+int tpm2_make_pcr_json_array(uint32_t pcr_mask, JsonVariant **ret);
+int tpm2_parse_pcr_json_array(JsonVariant *v, uint32_t *ret);
 
-#define TPM2_PCRS_MAX 24
+int tpm2_make_luks2_json(int keyslot, uint32_t hash_pcr_mask, uint16_t pcr_bank, const void *pubkey, size_t pubkey_size, uint32_t pubkey_pcr_mask, uint16_t primary_alg, const void *blob, size_t blob_size, const void *policy_hash, size_t policy_hash_size, const void *salt, size_t salt_size, TPM2Flags flags, JsonVariant **ret);
+int tpm2_parse_luks2_json(JsonVariant *v, int *ret_keyslot, uint32_t *ret_hash_pcr_mask, uint16_t *ret_pcr_bank, void **ret_pubkey, size_t *ret_pubkey_size, uint32_t *ret_pubkey_pcr_mask, uint16_t *ret_primary_alg, void **ret_blob, size_t *ret_blob_size, void **ret_policy_hash, size_t *ret_policy_hash_size, void **ret_salt, size_t *ret_salt_size, TPM2Flags *ret_flags);
+
+#define TPM2_PCRS_MAX 24U
+
+static inline bool TPM2_PCR_MASK_VALID(uint64_t pcr_mask) {
+        return pcr_mask < (UINT64_C(1) << TPM2_PCRS_MAX); /* Support 24 PCR banks */
+}
 
 /* Default to PCR 7 only */
 #define TPM2_PCR_MASK_DEFAULT (UINT32_C(1) << 7)
+
+/* We want the helpers below to work also if TPM2 libs are not available, hence define these four defines if
+ * they are missing. */
+#ifndef TPM2_ALG_SHA1
+#define TPM2_ALG_SHA1 0x4
+#endif
+
+#ifndef TPM2_ALG_SHA256
+#define TPM2_ALG_SHA256 0xB
+#endif
+
+#ifndef TPM2_ALG_SHA384
+#define TPM2_ALG_SHA384 0xC
+#endif
+
+#ifndef TPM2_ALG_SHA512
+#define TPM2_ALG_SHA512 0xD
+#endif
+
+#ifndef TPM2_ALG_ECC
+#define TPM2_ALG_ECC 0x23
+#endif
+
+#ifndef TPM2_ALG_RSA
+#define TPM2_ALG_RSA 0x1
+#endif
+
+const char *tpm2_hash_alg_to_string(uint16_t alg);
+int tpm2_hash_alg_from_string(const char *alg);
+
+const char *tpm2_asym_alg_to_string(uint16_t alg);
+int tpm2_asym_alg_from_string(const char *alg);
+
+typedef struct {
+        uint32_t search_pcr_mask;
+        const char *device;
+        const char *signature_path;
+} systemd_tpm2_plugin_params;
+
+typedef enum Tpm2Support {
+        /* NOTE! The systemd-creds tool returns these flags 1:1 as exit status. Hence these flags are pretty
+         * much ABI! Hence, be extra careful when changing/extending these definitions. */
+        TPM2_SUPPORT_NONE      = 0,       /* no support */
+        TPM2_SUPPORT_FIRMWARE  = 1 << 0,  /* firmware reports TPM2 was used */
+        TPM2_SUPPORT_DRIVER    = 1 << 1,  /* the kernel has a driver loaded for it */
+        TPM2_SUPPORT_SYSTEM    = 1 << 2,  /* we support it ourselves */
+        TPM2_SUPPORT_SUBSYSTEM = 1 << 3,  /* the kernel has the tpm subsystem enabled */
+        TPM2_SUPPORT_FULL      = TPM2_SUPPORT_FIRMWARE|TPM2_SUPPORT_DRIVER|TPM2_SUPPORT_SYSTEM|TPM2_SUPPORT_SUBSYSTEM,
+} Tpm2Support;
+
+Tpm2Support tpm2_support(void);
+
+int tpm2_parse_pcr_argument(const char *arg, uint32_t *mask);
+
+int tpm2_load_pcr_signature(const char *path, JsonVariant **ret);
+int tpm2_load_pcr_public_key(const char *path, void **ret_pubkey, size_t *ret_pubkey_size);
+
+int pcr_mask_to_string(uint32_t mask, char **ret);
+
+int tpm2_util_pbkdf2_hmac_sha256(const void *pass,
+                    size_t passlen,
+                    const void *salt,
+                    size_t saltlen,
+                    uint8_t res[static SHA256_DIGEST_SIZE]);
diff --git a/src/shared/udev-util.c b/src/shared/udev-util.c
index f934fc1..646eaf9 100644
--- a/src/shared/udev-util.c
+++ b/src/shared/udev-util.c
@@ -13,12 +13,14 @@
 #include "errno-util.h"
 #include "escape.h"
 #include "fd-util.h"
+#include "id128-util.h"
 #include "log.h"
 #include "macro.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "signal-util.h"
 #include "socket-util.h"
+#include "stat-util.h"
 #include "string-table.h"
 #include "string-util.h"
 #include "strxcpyx.h"
@@ -27,7 +29,7 @@
 
 static const char* const resolve_name_timing_table[_RESOLVE_NAME_TIMING_MAX] = {
         [RESOLVE_NAME_NEVER] = "never",
-        [RESOLVE_NAME_LATE] = "late",
+        [RESOLVE_NAME_LATE]  = "late",
         [RESOLVE_NAME_EARLY] = "early",
 };
 
@@ -121,29 +123,6 @@
         return 0;
 }
 
-/* Note that if -ENOENT is returned, it will be logged at debug level rather than error,
- * because it's an expected, common occurrence that the caller will handle with a fallback */
-static int device_new_from_dev_path(const char *devlink, sd_device **ret_device) {
-        struct stat st;
-        int r;
-
-        assert(devlink);
-
-        if (stat(devlink, &st) < 0)
-                return log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, errno,
-                                      "Failed to stat() %s: %m", devlink);
-
-        if (!S_ISBLK(st.st_mode))
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK),
-                                       "%s does not point to a block device: %m", devlink);
-
-        r = sd_device_new_from_stat_rdev(ret_device, &st);
-        if (r < 0)
-                return log_error_errno(r, "Failed to initialize device from %s: %m", devlink);
-
-        return 0;
-}
-
 struct DeviceMonitorData {
         const char *sysname;
         const char *devlink;
@@ -157,11 +136,10 @@
 }
 
 static int device_monitor_handler(sd_device_monitor *monitor, sd_device *device, void *userdata) {
-        struct DeviceMonitorData *data = userdata;
+        struct DeviceMonitorData *data = ASSERT_PTR(userdata);
         const char *sysname;
 
         assert(device);
-        assert(data);
         assert(data->sysname || data->devlink);
         assert(!data->device);
 
@@ -206,11 +184,10 @@
                 sd_device *_device,
                 const char *devlink,
                 const char *subsystem,
-                usec_t deadline,
+                usec_t timeout_usec,
                 sd_device **ret) {
 
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
-        _cleanup_(sd_event_source_unrefp) sd_event_source *timeout_source = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         /* Ensure that if !_device && devlink, device gets unrefd on errors since it will be new */
         _cleanup_(sd_device_unrefp) sd_device *device = sd_device_ref(_device);
@@ -223,9 +200,9 @@
 
         /* Devlink might already exist, if it does get the device to use the sysname filtering */
         if (!device && devlink) {
-                r = device_new_from_dev_path(devlink, &device);
-                if (r < 0 && r != -ENOENT)
-                        return r;
+                r = sd_device_new_from_devname(&device, devlink);
+                if (r < 0 && !ERRNO_IS_DEVICE_ABSENT(r))
+                        return log_error_errno(r, "Failed to create sd-device object from %s: %m", devlink);
         }
 
         if (device) {
@@ -260,6 +237,15 @@
                         return log_error_errno(r, "Failed to add %s subsystem match to monitor: %m", subsystem);
         }
 
+        _cleanup_free_ char *desc = NULL;
+        const char *sysname = NULL;
+        if (device)
+                (void) sd_device_get_sysname(device, &sysname);
+
+        desc = strjoin(sysname ?: subsystem, devlink ? ":" : ":initialization", devlink);
+        if (desc)
+                (void) sd_device_monitor_set_description(monitor, desc);
+
         r = sd_device_monitor_attach_event(monitor, event);
         if (r < 0)
                 return log_error_errno(r, "Failed to attach event to device monitor: %m");
@@ -268,21 +254,20 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to start device monitor: %m");
 
-        if (deadline != USEC_INFINITY) {
-                r = sd_event_add_time(
-                                event, &timeout_source,
-                                CLOCK_MONOTONIC, deadline, 0,
+        if (timeout_usec != USEC_INFINITY) {
+                r = sd_event_add_time_relative(
+                                event, NULL,
+                                CLOCK_MONOTONIC, timeout_usec, 0,
                                 NULL, INT_TO_PTR(-ETIMEDOUT));
                 if (r < 0)
                         return log_error_errno(r, "Failed to add timeout event source: %m");
         }
 
-        /* Check again, maybe things changed. Udev will re-read the db if the device wasn't initialized
-         * yet. */
+        /* Check again, maybe things changed. Udev will re-read the db if the device wasn't initialized yet. */
         if (!device && devlink) {
-                r = device_new_from_dev_path(devlink, &device);
-                if (r < 0 && r != -ENOENT)
-                        return r;
+                r = sd_device_new_from_devname(&device, devlink);
+                if (r < 0 && !ERRNO_IS_DEVICE_ABSENT(r))
+                        return log_error_errno(r, "Failed to create sd-device object from %s: %m", devlink);
         }
         if (device && sd_device_get_is_initialized(device) > 0) {
                 if (ret)
@@ -299,12 +284,12 @@
         return 0;
 }
 
-int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t deadline, sd_device **ret) {
-        return device_wait_for_initialization_internal(device, NULL, subsystem, deadline, ret);
+int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t timeout_usec, sd_device **ret) {
+        return device_wait_for_initialization_internal(device, NULL, subsystem, timeout_usec, ret);
 }
 
-int device_wait_for_devlink(const char *devlink, const char *subsystem, usec_t deadline, sd_device **ret) {
-        return device_wait_for_initialization_internal(NULL, devlink, subsystem, deadline, ret);
+int device_wait_for_devlink(const char *devlink, const char *subsystem, usec_t timeout_usec, sd_device **ret) {
+        return device_wait_for_initialization_internal(NULL, devlink, subsystem, timeout_usec, ret);
 }
 
 int device_is_renaming(sd_device *dev) {
@@ -337,6 +322,7 @@
 
 void log_device_uevent(sd_device *device, const char *str) {
         sd_device_action_t action = _SD_DEVICE_ACTION_INVALID;
+        sd_id128_t event_id = SD_ID128_NULL;
         uint64_t seqnum = 0;
 
         if (!DEBUG_LOGGING)
@@ -344,14 +330,16 @@
 
         (void) sd_device_get_seqnum(device, &seqnum);
         (void) sd_device_get_action(device, &action);
-        log_device_debug(device, "%s%s(SEQNUM=%"PRIu64", ACTION=%s)",
+        (void) sd_device_get_trigger_uuid(device, &event_id);
+        log_device_debug(device, "%s%s(SEQNUM=%"PRIu64", ACTION=%s%s%s)",
                          strempty(str), isempty(str) ? "" : " ",
-                         seqnum, strna(device_action_to_string(action)));
+                         seqnum, strna(device_action_to_string(action)),
+                         sd_id128_is_null(event_id) ? "" : ", UUID=",
+                         sd_id128_is_null(event_id) ? "" : SD_ID128_TO_UUID_STRING(event_id));
 }
 
 int udev_rule_parse_value(char *str, char **ret_value, char **ret_endpos) {
         char *i, *j;
-        int r;
         bool is_escaped;
 
         /* value must be double quotated */
@@ -359,11 +347,10 @@
         str += is_escaped;
         if (str[0] != '"')
                 return -EINVAL;
-        str++;
 
         if (!is_escaped) {
                 /* unescape double quotation '\"'->'"' */
-                for (i = j = str; *i != '"'; i++, j++) {
+                for (j = str, i = str + 1; *i != '"'; i++, j++) {
                         if (*i == '\0')
                                 return -EINVAL;
                         if (i[0] == '\\' && i[1] == '"')
@@ -371,11 +358,17 @@
                         *j = *i;
                 }
                 j[0] = '\0';
+                /*
+                 * The return value must be terminated by two subsequent NULs
+                 * so it could be safely interpreted as nulstr.
+                 */
+                j[1] = '\0';
         } else {
                 _cleanup_free_ char *unescaped = NULL;
+                ssize_t l;
 
                 /* find the end position of value */
-                for (i = str; *i != '"'; i++) {
+                for (i = str + 1; *i != '"'; i++) {
                         if (i[0] == '\\')
                                 i++;
                         if (*i == '\0')
@@ -383,11 +376,17 @@
                 }
                 i[0] = '\0';
 
-                r = cunescape_length(str, i - str, 0, &unescaped);
-                if (r < 0)
-                        return r;
-                assert(r <= i - str);
-                memcpy(str, unescaped, r + 1);
+                l = cunescape_length(str + 1, i - (str + 1), 0, &unescaped);
+                if (l < 0)
+                        return l;
+
+                assert(l <= i - (str + 1));
+                memcpy(str, unescaped, l + 1);
+                /*
+                 * The return value must be terminated by two subsequent NULs
+                 * so it could be safely interpreted as nulstr.
+                 */
+                str[l + 1] = '\0';
         }
 
         *ret_value = str;
@@ -561,13 +560,26 @@
         return 0;
 }
 
+bool devpath_conflict(const char *a, const char *b) {
+        /* This returns true when two paths are equivalent, or one is a child of another. */
+
+        if (!a || !b)
+                return false;
+
+        for (; *a != '\0' && *b != '\0'; a++, b++)
+                if (*a != *b)
+                        return false;
+
+        return *a == '/' || *b == '/' || *a == *b;
+}
+
 int udev_queue_is_empty(void) {
         return access("/run/udev/queue", F_OK) < 0 ?
                 (errno == ENOENT ? true : -errno) : false;
 }
 
 int udev_queue_init(void) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = inotify_init1(IN_CLOEXEC);
         if (fd < 0)
@@ -578,3 +590,187 @@
 
         return TAKE_FD(fd);
 }
+
+static int device_is_power_sink(sd_device *device) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        bool found_source = false, found_sink = false;
+        sd_device *parent, *d;
+        int r;
+
+        assert(device);
+
+        /* USB-C power supply device has two power roles: source or sink. See,
+         * https://docs.kernel.org/admin-guide/abi-testing.html#abi-file-testing-sysfs-class-typec */
+
+        r = sd_device_enumerator_new(&e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_allow_uninitialized(e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_subsystem(e, "typec", true);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_parent(device, &parent);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_parent(e, parent);
+        if (r < 0)
+                return r;
+
+        FOREACH_DEVICE(e, d) {
+                const char *val;
+
+                r = sd_device_get_sysattr_value(d, "power_role", &val);
+                if (r < 0) {
+                        if (r != -ENOENT)
+                                log_device_debug_errno(d, r, "Failed to read 'power_role' sysfs attribute, ignoring: %m");
+                        continue;
+                }
+
+                if (strstr(val, "[source]")) {
+                        found_source = true;
+                        log_device_debug(d, "The USB type-C port is in power source mode.");
+                } else if (strstr(val, "[sink]")) {
+                        found_sink = true;
+                        log_device_debug(d, "The USB type-C port is in power sink mode.");
+                }
+        }
+
+        if (found_sink)
+                log_device_debug(device, "The USB type-C device has at least one port in power sink mode.");
+        else if (!found_source)
+                log_device_debug(device, "The USB type-C device has no port in power source mode, assuming the device is in power sink mode.");
+        else
+                log_device_debug(device, "All USB type-C ports are in power source mode.");
+
+        return found_sink || !found_source;
+}
+
+static bool battery_is_discharging(sd_device *d) {
+        const char *val;
+        int r;
+
+        assert(d);
+
+        r = sd_device_get_sysattr_value(d, "scope", &val);
+        if (r < 0) {
+                if (r != -ENOENT)
+                        log_device_debug_errno(d, r, "Failed to read 'scope' sysfs attribute, ignoring: %m");
+        } else if (streq(val, "Device")) {
+                log_device_debug(d, "The power supply is a device battery, ignoring device.");
+                return false;
+        }
+
+        r = device_get_sysattr_bool(d, "present");
+        if (r < 0)
+                log_device_debug_errno(d, r, "Failed to read 'present' sysfs attribute, assuming the battery is present: %m");
+        else if (r == 0) {
+                log_device_debug(d, "The battery is not present, ignoring the power supply.");
+                return false;
+        }
+
+        /* Possible values: "Unknown", "Charging", "Discharging", "Not charging", "Full" */
+        r = sd_device_get_sysattr_value(d, "status", &val);
+        if (r < 0) {
+                log_device_debug_errno(d, r, "Failed to read 'status' sysfs attribute, assuming the battery is discharging: %m");
+                return true;
+        }
+        if (!streq(val, "Discharging")) {
+                log_device_debug(d, "The battery status is '%s', assuming the battery is not used as a power source of this machine.", val);
+                return false;
+        }
+
+        return true;
+}
+
+int on_ac_power(void) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        bool found_ac_online = false, found_discharging_battery = false;
+        sd_device *d;
+        int r;
+
+        r = sd_device_enumerator_new(&e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_allow_uninitialized(e);
+        if (r < 0)
+                return r;
+
+        r = sd_device_enumerator_add_match_subsystem(e, "power_supply", true);
+        if (r < 0)
+                return r;
+
+        FOREACH_DEVICE(e, d) {
+                /* See
+                 * https://github.com/torvalds/linux/blob/4eef766b7d4d88f0b984781bc1bcb574a6eafdc7/include/linux/power_supply.h#L176
+                 * for defined power source types. Also see:
+                 * https://docs.kernel.org/admin-guide/abi-testing.html#abi-file-testing-sysfs-class-power */
+
+                const char *val;
+                r = sd_device_get_sysattr_value(d, "type", &val);
+                if (r < 0) {
+                        log_device_debug_errno(d, r, "Failed to read 'type' sysfs attribute, ignoring device: %m");
+                        continue;
+                }
+
+                /* Ignore USB-C power supply in source mode. See issue #21988. */
+                if (streq(val, "USB")) {
+                        r = device_is_power_sink(d);
+                        if (r <= 0) {
+                                if (r < 0)
+                                        log_device_debug_errno(d, r, "Failed to determine the current power role, ignoring device: %m");
+                                else
+                                        log_device_debug(d, "USB power supply is in source mode, ignoring device.");
+                                continue;
+                        }
+                }
+
+                if (streq(val, "Battery")) {
+                        if (battery_is_discharging(d)) {
+                                found_discharging_battery = true;
+                                log_device_debug(d, "The power supply is a battery and currently discharging.");
+                        }
+                        continue;
+                }
+
+                r = device_get_sysattr_unsigned(d, "online", NULL);
+                if (r < 0) {
+                        log_device_debug_errno(d, r, "Failed to query 'online' sysfs attribute, ignoring device: %m");
+                        continue;
+                } else if (r > 0)  /* At least 1 and 2 are defined as different types of 'online' */
+                        found_ac_online = true;
+
+                log_device_debug(d, "The power supply is currently %s.", r > 0 ? "online" : "offline");
+        }
+
+        if (found_ac_online) {
+                log_debug("Found at least one online non-battery power supply, system is running on AC.");
+                return true;
+        } else if (found_discharging_battery) {
+                log_debug("Found at least one discharging battery and no online power sources, assuming system is running from battery.");
+                return false;
+        } else {
+                log_debug("No power supply reported online and no discharging battery found, assuming system is running on AC.");
+                return true;
+        }
+}
+
+bool udev_available(void) {
+        static int cache = -1;
+
+        /* The service systemd-udevd is started only when /sys is read write.
+         * See systemd-udevd.service: ConditionPathIsReadWrite=/sys
+         * Also, our container interface (http://systemd.io/CONTAINER_INTERFACE/) states that /sys must
+         * be mounted in read-only mode in containers. */
+
+        if (cache >= 0)
+                return cache;
+
+        return (cache = (path_is_read_only_fs("/sys/") <= 0));
+}
diff --git a/src/shared/udev-util.h b/src/shared/udev-util.h
index 276686d..c3c3dbe 100644
--- a/src/shared/udev-util.h
+++ b/src/shared/udev-util.h
@@ -36,8 +36,8 @@
         return udev_parse_config_full(NULL, NULL, NULL, NULL, NULL);
 }
 
-int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t deadline, sd_device **ret);
-int device_wait_for_devlink(const char *path, const char *subsystem, usec_t deadline, sd_device **ret);
+int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t timeout_usec, sd_device **ret);
+int device_wait_for_devlink(const char *path, const char *subsystem, usec_t timeout_usec, sd_device **ret);
 int device_is_renaming(sd_device *dev);
 
 bool device_for_action(sd_device *dev, sd_device_action_t action);
@@ -50,9 +50,15 @@
 size_t udev_replace_chars(char *str, const char *allow);
 int udev_resolve_subsys_kernel(const char *string, char *result, size_t maxsize, bool read_value);
 
+bool devpath_conflict(const char *a, const char *b);
+
 int udev_queue_is_empty(void);
 int udev_queue_init(void);
 
+int on_ac_power(void);
+
+bool udev_available(void);
+
 #if HAVE_SYS_SDT_H
 
 /* Each trace point can have different number of additional arguments. Note that when the macro is used only
@@ -75,7 +81,7 @@
                 (void) sd_device_get_syspath(_d, &_p);                                                     \
                 (void) sd_device_get_subsystem(_d, &_s);                                                   \
                 STAP_PROBEV(udev, name, device_action_to_string(_a), _n, _p, _s __VA_OPT__(,) __VA_ARGS__);\
-        } while(false);
+        } while (false);
 #else
 #define DEVICE_TRACE_POINT(name, dev, ...) ((void) 0)
 #endif
diff --git a/src/shared/uid-alloc-range.c b/src/shared/uid-alloc-range.c
new file mode 100644
index 0000000..1953119
--- /dev/null
+++ b/src/shared/uid-alloc-range.c
@@ -0,0 +1,124 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "chase-symlinks.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "missing_threads.h"
+#include "string-util.h"
+#include "uid-alloc-range.h"
+#include "user-util.h"
+
+static const UGIDAllocationRange default_ugid_allocation_range = {
+        .system_alloc_uid_min = SYSTEM_ALLOC_UID_MIN,
+        .system_uid_max = SYSTEM_UID_MAX,
+        .system_alloc_gid_min = SYSTEM_ALLOC_GID_MIN,
+        .system_gid_max = SYSTEM_GID_MAX,
+};
+
+#if ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES
+static int parse_alloc_uid(const char *path, const char *name, const char *t, uid_t *ret_uid) {
+        uid_t uid;
+        int r;
+
+        r = parse_uid(t, &uid);
+        if (r < 0)
+                return log_debug_errno(r, "%s: failed to parse %s %s, ignoring: %m", path, name, t);
+        if (uid == 0)
+                uid = 1;
+
+        *ret_uid = uid;
+        return 0;
+}
+#endif
+
+int read_login_defs(UGIDAllocationRange *ret_defs, const char *path, const char *root) {
+#if ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES
+        _cleanup_fclose_ FILE *f = NULL;
+        UGIDAllocationRange defs;
+        int r;
+
+        if (!path)
+                path = "/etc/login.defs";
+
+        r = chase_symlinks_and_fopen_unlocked(path, root, CHASE_PREFIX_ROOT, "re", NULL, &f);
+        if (r == -ENOENT)
+                goto defaults;
+        if (r < 0)
+                return log_debug_errno(r, "Failed to open %s: %m", path);
+
+        defs = default_ugid_allocation_range;
+
+        for (;;) {
+                _cleanup_free_ char *line = NULL;
+                char *t;
+
+                r = read_line(f, LINE_MAX, &line);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to read %s: %m", path);
+                if (r == 0)
+                        break;
+
+                if ((t = first_word(line, "SYS_UID_MIN")))
+                        (void) parse_alloc_uid(path, "SYS_UID_MIN", t, &defs.system_alloc_uid_min);
+                else if ((t = first_word(line, "SYS_UID_MAX")))
+                        (void) parse_alloc_uid(path, "SYS_UID_MAX", t, &defs.system_uid_max);
+                else if ((t = first_word(line, "SYS_GID_MIN")))
+                        (void) parse_alloc_uid(path, "SYS_GID_MIN", t, &defs.system_alloc_gid_min);
+                else if ((t = first_word(line, "SYS_GID_MAX")))
+                        (void) parse_alloc_uid(path, "SYS_GID_MAX", t, &defs.system_gid_max);
+        }
+
+        if (defs.system_alloc_uid_min > defs.system_uid_max) {
+                log_debug("%s: SYS_UID_MIN > SYS_UID_MAX, resetting.", path);
+                defs.system_alloc_uid_min = MIN(defs.system_uid_max - 1, (uid_t) SYSTEM_ALLOC_UID_MIN);
+                /* Look at sys_uid_max to make sure sys_uid_min..sys_uid_max remains a valid range. */
+        }
+        if (defs.system_alloc_gid_min > defs.system_gid_max) {
+                log_debug("%s: SYS_GID_MIN > SYS_GID_MAX, resetting.", path);
+                defs.system_alloc_gid_min = MIN(defs.system_gid_max - 1, (gid_t) SYSTEM_ALLOC_GID_MIN);
+                /* Look at sys_gid_max to make sure sys_gid_min..sys_gid_max remains a valid range. */
+        }
+
+        *ret_defs = defs;
+        return 1;
+defaults:
+#endif
+        *ret_defs = default_ugid_allocation_range;
+        return 0;
+}
+
+const UGIDAllocationRange *acquire_ugid_allocation_range(void) {
+#if ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES
+        static thread_local UGIDAllocationRange defs;
+        static thread_local int initialized = 0; /* == 0 → not initialized yet
+                                                  * < 0 → failure
+                                                  * > 0 → success */
+
+        /* This function will ignore failure to read the file, so it should only be called from places where
+         * we don't crucially depend on the answer. In other words, it's appropriate for journald, but
+         * probably not for sysusers. */
+
+        if (initialized == 0)
+                initialized = read_login_defs(&defs, NULL, NULL) < 0 ? -1 : 1;
+        if (initialized < 0)
+                return &default_ugid_allocation_range;
+
+        return &defs;
+
+#endif
+        return &default_ugid_allocation_range;
+}
+
+bool uid_is_system(uid_t uid) {
+        const UGIDAllocationRange *defs;
+        assert_se(defs = acquire_ugid_allocation_range());
+
+        return uid <= defs->system_uid_max;
+}
+
+bool gid_is_system(gid_t gid) {
+        const UGIDAllocationRange *defs;
+        assert_se(defs = acquire_ugid_allocation_range());
+
+        return gid <= defs->system_gid_max;
+}
diff --git a/src/shared/uid-alloc-range.h b/src/shared/uid-alloc-range.h
new file mode 100644
index 0000000..d3bf077
--- /dev/null
+++ b/src/shared/uid-alloc-range.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+#include <sys/types.h>
+
+bool uid_is_system(uid_t uid);
+bool gid_is_system(gid_t gid);
+
+static inline bool uid_is_dynamic(uid_t uid) {
+        return DYNAMIC_UID_MIN <= uid && uid <= DYNAMIC_UID_MAX;
+}
+
+static inline bool gid_is_dynamic(gid_t gid) {
+        return uid_is_dynamic((uid_t) gid);
+}
+
+static inline bool uid_is_container(uid_t uid) {
+        return CONTAINER_UID_BASE_MIN <= uid && uid <= CONTAINER_UID_BASE_MAX;
+}
+
+static inline bool gid_is_container(gid_t gid) {
+        return uid_is_container((uid_t) gid);
+}
+
+typedef struct UGIDAllocationRange {
+        uid_t system_alloc_uid_min;
+        uid_t system_uid_max;
+        gid_t system_alloc_gid_min;
+        gid_t system_gid_max;
+} UGIDAllocationRange;
+
+int read_login_defs(UGIDAllocationRange *ret_defs, const char *path, const char *root);
+const UGIDAllocationRange *acquire_ugid_allocation_range(void);
diff --git a/src/shared/uid-range.c b/src/shared/uid-range.c
deleted file mode 100644
index 5d5bf7f..0000000
--- a/src/shared/uid-range.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "alloc-util.h"
-#include "macro.h"
-#include "sort-util.h"
-#include "uid-range.h"
-#include "user-util.h"
-
-static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) {
-        assert(range);
-
-        return range->start <= start + nr &&
-                range->start + range->nr >= start;
-}
-
-static void uid_range_coalesce(UidRange **p, unsigned *n) {
-        assert(p);
-        assert(n);
-
-        for (unsigned i = 0; i < *n; i++) {
-                for (unsigned j = i + 1; j < *n; j++) {
-                        UidRange *x = (*p)+i, *y = (*p)+j;
-
-                        if (uid_range_intersect(x, y->start, y->nr)) {
-                                uid_t begin, end;
-
-                                begin = MIN(x->start, y->start);
-                                end = MAX(x->start + x->nr, y->start + y->nr);
-
-                                x->start = begin;
-                                x->nr = end - begin;
-
-                                if (*n > j+1)
-                                        memmove(y, y+1, sizeof(UidRange) * (*n - j -1));
-
-                                (*n)--;
-                                j--;
-                        }
-                }
-        }
-}
-
-static int uid_range_compare(const UidRange *a, const UidRange *b) {
-        int r;
-
-        r = CMP(a->start, b->start);
-        if (r != 0)
-                return r;
-
-        return CMP(a->nr, b->nr);
-}
-
-int uid_range_add(UidRange **p, unsigned *n, uid_t start, uid_t nr) {
-        bool found = false;
-        UidRange *x;
-
-        assert(p);
-        assert(n);
-
-        if (nr <= 0)
-                return 0;
-
-        for (unsigned i = 0; i < *n; i++) {
-                x = (*p) + i;
-                if (uid_range_intersect(x, start, nr)) {
-                        found = true;
-                        break;
-                }
-        }
-
-        if (found) {
-                uid_t begin, end;
-
-                begin = MIN(x->start, start);
-                end = MAX(x->start + x->nr, start + nr);
-
-                x->start = begin;
-                x->nr = end - begin;
-        } else {
-                UidRange *t;
-
-                t = reallocarray(*p, *n + 1, sizeof(UidRange));
-                if (!t)
-                        return -ENOMEM;
-
-                *p = t;
-                x = t + ((*n) ++);
-
-                x->start = start;
-                x->nr = nr;
-        }
-
-        typesafe_qsort(*p, *n, uid_range_compare);
-        uid_range_coalesce(p, n);
-
-        return *n;
-}
-
-int uid_range_add_str(UidRange **p, unsigned *n, const char *s) {
-        uid_t start, nr;
-        const char *t;
-        int r;
-
-        assert(p);
-        assert(n);
-        assert(s);
-
-        t = strchr(s, '-');
-        if (t) {
-                char *b;
-                uid_t end;
-
-                b = strndupa(s, t - s);
-                r = parse_uid(b, &start);
-                if (r < 0)
-                        return r;
-
-                r = parse_uid(t+1, &end);
-                if (r < 0)
-                        return r;
-
-                if (end < start)
-                        return -EINVAL;
-
-                nr = end - start + 1;
-        } else {
-                r = parse_uid(s, &start);
-                if (r < 0)
-                        return r;
-
-                nr = 1;
-        }
-
-        return uid_range_add(p, n, start, nr);
-}
-
-int uid_range_next_lower(const UidRange *p, unsigned n, uid_t *uid) {
-        uid_t closest = UID_INVALID, candidate;
-
-        assert(p);
-        assert(uid);
-
-        candidate = *uid - 1;
-
-        for (unsigned i = 0; i < n; i++) {
-                uid_t begin, end;
-
-                begin = p[i].start;
-                end = p[i].start + p[i].nr - 1;
-
-                if (candidate >= begin && candidate <= end) {
-                        *uid = candidate;
-                        return 1;
-                }
-
-                if (end < candidate)
-                        closest = end;
-        }
-
-        if (closest == UID_INVALID)
-                return -EBUSY;
-
-        *uid = closest;
-        return 1;
-}
-
-bool uid_range_contains(const UidRange *p, unsigned n, uid_t uid) {
-        assert(p);
-        assert(uid);
-
-        for (unsigned i = 0; i < n; i++)
-                if (uid >= p[i].start && uid < p[i].start + p[i].nr)
-                        return true;
-
-        return false;
-}
diff --git a/src/shared/uid-range.h b/src/shared/uid-range.h
deleted file mode 100644
index ef168cd..0000000
--- a/src/shared/uid-range.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <stdbool.h>
-#include <sys/types.h>
-
-typedef struct UidRange {
-        uid_t start, nr;
-} UidRange;
-
-int uid_range_add(UidRange **p, unsigned *n, uid_t start, uid_t nr);
-int uid_range_add_str(UidRange **p, unsigned *n, const char *s);
-
-int uid_range_next_lower(const UidRange *p, unsigned n, uid_t *uid);
-bool uid_range_contains(const UidRange *p, unsigned n, uid_t uid);
diff --git a/src/shared/user-record-show.c b/src/shared/user-record-show.c
index 54ff949..da181c6 100644
--- a/src/shared/user-record-show.c
+++ b/src/shared/user-record-show.c
@@ -43,8 +43,7 @@
         printf(" Disposition: %s\n", user_disposition_to_string(user_record_disposition(hr)));
 
         if (hr->last_change_usec != USEC_INFINITY) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-                printf(" Last Change: %s\n", format_timestamp(buf, sizeof(buf), hr->last_change_usec));
+                printf(" Last Change: %s\n", FORMAT_TIMESTAMP(hr->last_change_usec));
 
                 if (hr->last_change_usec > now(CLOCK_REALTIME))
                         printf("              %sModification time lies in the future, system clock wrong?%s\n",
@@ -52,10 +51,8 @@
         }
 
         if (hr->last_password_change_usec != USEC_INFINITY &&
-            hr->last_password_change_usec != hr->last_change_usec) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-                printf(" Last Passw.: %s\n", format_timestamp(buf, sizeof(buf), hr->last_password_change_usec));
-        }
+            hr->last_password_change_usec != hr->last_change_usec)
+                printf(" Last Passw.: %s\n", FORMAT_TIMESTAMP(hr->last_password_change_usec));
 
         r = user_record_test_blocked(hr);
         switch (r) {
@@ -135,10 +132,27 @@
                         break;
                 }
 
-                printf(" Password OK: %syes%s\n", ansi_highlight_green(), ansi_normal());
-                break;
+                if (strv_isempty(hr->hashed_password)) {
+                        if (hr->incomplete) /* Record might be incomplete, due to privs */
+                                break;
+                        printf(" Password OK: %sno%s (none set)\n", ansi_highlight(), ansi_normal());
+                        break;
+                }
+                if (strv_contains(hr->hashed_password, "")) {
+                        printf(" Password OK: %sno%s (empty set)\n", ansi_highlight_red(), ansi_normal());
+                        break;
+                }
+                bool has_valid_passwords = false;
+                STRV_FOREACH(p, hr->hashed_password)
+                        if (!hashed_password_is_locked_or_invalid(*p)) {
+                                has_valid_passwords = true;
+                                break;
+                        }
+                if (has_valid_passwords)
+                        printf(" Password OK: %syes%s\n", ansi_highlight_green(), ansi_normal());
+                else
+                        printf(" Password OK: %sno%s (locked)\n", ansi_highlight(), ansi_normal());
         }
-
         if (uid_is_valid(hr->uid))
                 printf("         UID: " UID_FMT "\n", hr->uid);
         if (gid_is_valid(hr->gid)) {
@@ -225,28 +239,21 @@
         if (hr->preferred_language)
                 printf("    Language: %s\n", hr->preferred_language);
 
-        if (!strv_isempty(hr->environment)) {
-                char **i;
-
+        if (!strv_isempty(hr->environment))
                 STRV_FOREACH(i, hr->environment) {
                         printf(i == hr->environment ?
                                " Environment: %s\n" :
                                "              %s\n", *i);
                 }
-        }
 
         if (hr->locked >= 0)
                 printf("      Locked: %s\n", yes_no(hr->locked));
 
-        if (hr->not_before_usec != UINT64_MAX) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-                printf("  Not Before: %s\n", format_timestamp(buf, sizeof(buf), hr->not_before_usec));
-        }
+        if (hr->not_before_usec != UINT64_MAX)
+                printf("  Not Before: %s\n", FORMAT_TIMESTAMP(hr->not_before_usec));
 
-        if (hr->not_after_usec != UINT64_MAX) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-                printf("   Not After: %s\n", format_timestamp(buf, sizeof(buf), hr->not_after_usec));
-        }
+        if (hr->not_after_usec != UINT64_MAX)
+                printf("   Not After: %s\n", FORMAT_TIMESTAMP(hr->not_after_usec));
 
         if (hr->umask != MODE_INVALID)
                 printf("       UMask: 0%03o\n", hr->umask);
@@ -263,17 +270,15 @@
         if (hr->tasks_max != UINT64_MAX)
                 printf("   Tasks Max: %" PRIu64 "\n", hr->tasks_max);
 
-        if (hr->memory_high != UINT64_MAX) {
-                char buf[FORMAT_BYTES_MAX];
-                printf(" Memory High: %s\n", format_bytes(buf, sizeof(buf), hr->memory_high));
-        }
+        if (hr->memory_high != UINT64_MAX)
+                printf(" Memory High: %s\n", FORMAT_BYTES(hr->memory_high));
 
-        if (hr->memory_max != UINT64_MAX) {
-                char buf[FORMAT_BYTES_MAX];
-                printf("  Memory Max: %s\n", format_bytes(buf, sizeof(buf), hr->memory_max));
-        }
+        if (hr->memory_max != UINT64_MAX)
+                printf("  Memory Max: %s\n", FORMAT_BYTES(hr->memory_max));
 
-        if (hr->cpu_weight != UINT64_MAX)
+        if (hr->cpu_weight == CGROUP_WEIGHT_IDLE)
+                printf("  CPU Weight: %s\n", "idle");
+        else if (hr->cpu_weight != UINT64_MAX)
                 printf("  CPU Weight: %" PRIu64 "\n", hr->cpu_weight);
 
         if (hr->io_weight != UINT64_MAX)
@@ -286,15 +291,18 @@
                 printf("LUKS Discard: online=%s offline=%s\n", yes_no(user_record_luks_discard(hr)), yes_no(user_record_luks_offline_discard(hr)));
 
                 if (!sd_id128_is_null(hr->luks_uuid))
-                        printf("   LUKS UUID: " SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(hr->luks_uuid));
+                        printf("   LUKS UUID: " SD_ID128_UUID_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(hr->luks_uuid));
                 if (!sd_id128_is_null(hr->partition_uuid))
-                        printf("   Part UUID: " SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(hr->partition_uuid));
+                        printf("   Part UUID: " SD_ID128_UUID_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(hr->partition_uuid));
                 if (!sd_id128_is_null(hr->file_system_uuid))
-                        printf("     FS UUID: " SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(hr->file_system_uuid));
+                        printf("     FS UUID: " SD_ID128_UUID_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(hr->file_system_uuid));
 
                 if (hr->file_system_type)
                         printf(" File System: %s\n", user_record_file_system_type(hr));
 
+                if (hr->luks_extra_mount_options)
+                        printf("LUKS MntOpts: %s\n", hr->luks_extra_mount_options);
+
                 if (hr->luks_cipher)
                         printf(" LUKS Cipher: %s\n", hr->luks_cipher);
                 if (hr->luks_cipher_mode)
@@ -306,21 +314,25 @@
                         printf("  PBKDF Type: %s\n", hr->luks_pbkdf_type);
                 if (hr->luks_pbkdf_hash_algorithm)
                         printf("  PBKDF Hash: %s\n", hr->luks_pbkdf_hash_algorithm);
-                if (hr->luks_pbkdf_time_cost_usec != UINT64_MAX) {
-                        char buf[FORMAT_TIMESPAN_MAX];
-                        printf("  PBKDF Time: %s\n", format_timespan(buf, sizeof(buf), hr->luks_pbkdf_time_cost_usec, 0));
-                }
-                if (hr->luks_pbkdf_memory_cost != UINT64_MAX) {
-                        char buf[FORMAT_BYTES_MAX];
-                        printf(" PBKDF Bytes: %s\n", format_bytes(buf, sizeof(buf), hr->luks_pbkdf_memory_cost));
-                }
+                if (hr->luks_pbkdf_force_iterations != UINT64_MAX)
+                        printf(" PBKDF Iters: %" PRIu64 "\n", hr->luks_pbkdf_force_iterations);
+                if (hr->luks_pbkdf_time_cost_usec != UINT64_MAX)
+                        printf("  PBKDF Time: %s\n", FORMAT_TIMESPAN(hr->luks_pbkdf_time_cost_usec, 0));
+                if (hr->luks_pbkdf_memory_cost != UINT64_MAX)
+                        printf(" PBKDF Bytes: %s\n", FORMAT_BYTES(hr->luks_pbkdf_memory_cost));
+
                 if (hr->luks_pbkdf_parallel_threads != UINT64_MAX)
                         printf("PBKDF Thread: %" PRIu64 "\n", hr->luks_pbkdf_parallel_threads);
+                if (hr->luks_sector_size != UINT64_MAX)
+                        printf(" Sector Size: %" PRIu64 "\n", hr->luks_sector_size);
 
         } else if (storage == USER_CIFS) {
 
                 if (hr->cifs_service)
                         printf("CIFS Service: %s\n", hr->cifs_service);
+
+                if (hr->cifs_extra_mount_options)
+                        printf("CIFS MntOpts: %s\n", hr->cifs_extra_mount_options);
         }
 
         if (hr->cifs_user_name)
@@ -337,28 +349,22 @@
         if (hr->skeleton_directory)
                 printf("  Skel. Dir.: %s\n", user_record_skeleton_directory(hr));
 
-        if (hr->disk_size != UINT64_MAX) {
-                char buf[FORMAT_BYTES_MAX];
-                printf("   Disk Size: %s\n", format_bytes(buf, sizeof(buf), hr->disk_size));
-        }
+        if (hr->disk_size != UINT64_MAX)
+                printf("   Disk Size: %s\n", FORMAT_BYTES(hr->disk_size));
 
         if (hr->disk_usage != UINT64_MAX) {
-                char buf[FORMAT_BYTES_MAX];
-
                 if (hr->disk_size != UINT64_MAX) {
                         unsigned permille;
 
                         permille = (unsigned) DIV_ROUND_UP(hr->disk_usage * 1000U, hr->disk_size); /* Round up! */
                         printf("  Disk Usage: %s (= %u.%01u%%)\n",
-                               format_bytes(buf, sizeof(buf), hr->disk_usage),
+                               FORMAT_BYTES(hr->disk_usage),
                                permille / 10, permille % 10);
                 } else
-                        printf("  Disk Usage: %s\n", format_bytes(buf, sizeof(buf), hr->disk_usage));
+                        printf("  Disk Usage: %s\n", FORMAT_BYTES(hr->disk_usage));
         }
 
         if (hr->disk_free != UINT64_MAX) {
-                char buf[FORMAT_BYTES_MAX];
-
                 if (hr->disk_size != UINT64_MAX) {
                         const char *color_on, *color_off;
                         unsigned permille;
@@ -381,38 +387,30 @@
 
                         printf("   Disk Free: %s%s (= %u.%01u%%)%s\n",
                                color_on,
-                               format_bytes(buf, sizeof(buf), hr->disk_free),
+                               FORMAT_BYTES(hr->disk_free),
                                permille / 10, permille % 10,
                                color_off);
                 } else
-                        printf("   Disk Free: %s\n", format_bytes(buf, sizeof(buf), hr->disk_free));
+                        printf("   Disk Free: %s\n", FORMAT_BYTES(hr->disk_free));
         }
 
-        if (hr->disk_floor != UINT64_MAX) {
-                char buf[FORMAT_BYTES_MAX];
-                printf("  Disk Floor: %s\n", format_bytes(buf, sizeof(buf), hr->disk_floor));
-        }
+        if (hr->disk_floor != UINT64_MAX)
+                printf("  Disk Floor: %s\n", FORMAT_BYTES(hr->disk_floor));
 
-        if (hr->disk_ceiling != UINT64_MAX) {
-                char buf[FORMAT_BYTES_MAX];
-                printf("Disk Ceiling: %s\n", format_bytes(buf, sizeof(buf), hr->disk_ceiling));
-        }
+        if (hr->disk_ceiling != UINT64_MAX)
+                printf("Disk Ceiling: %s\n", FORMAT_BYTES(hr->disk_ceiling));
 
         if (hr->good_authentication_counter != UINT64_MAX)
                 printf("  Good Auth.: %" PRIu64 "\n", hr->good_authentication_counter);
 
-        if (hr->last_good_authentication_usec != UINT64_MAX) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-                printf("   Last Good: %s\n", format_timestamp(buf, sizeof(buf), hr->last_good_authentication_usec));
-        }
+        if (hr->last_good_authentication_usec != UINT64_MAX)
+                printf("   Last Good: %s\n", FORMAT_TIMESTAMP(hr->last_good_authentication_usec));
 
         if (hr->bad_authentication_counter != UINT64_MAX)
                 printf("   Bad Auth.: %" PRIu64 "\n", hr->bad_authentication_counter);
 
-        if (hr->last_bad_authentication_usec != UINT64_MAX) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-                printf("    Last Bad: %s\n", format_timestamp(buf, sizeof(buf), hr->last_bad_authentication_usec));
-        }
+        if (hr->last_bad_authentication_usec != UINT64_MAX)
+                printf("    Last Bad: %s\n", FORMAT_TIMESTAMP(hr->last_bad_authentication_usec));
 
         t = user_record_ratelimit_next_try(hr);
         if (t != USEC_INFINITY) {
@@ -420,20 +418,16 @@
 
                 if (t <= n)
                         printf("    Next Try: anytime\n");
-                else {
-                        char buf[FORMAT_TIMESPAN_MAX];
+                else
                         printf("    Next Try: %sin %s%s\n",
                                ansi_highlight_red(),
-                               format_timespan(buf, sizeof(buf), t - n, USEC_PER_SEC),
+                               FORMAT_TIMESPAN(t - n, USEC_PER_SEC),
                                ansi_normal());
-                }
         }
 
-        if (storage != USER_CLASSIC) {
-                char buf[FORMAT_TIMESPAN_MAX];
+        if (storage != USER_CLASSIC)
                 printf(" Auth. Limit: %" PRIu64 " attempts per %s\n", user_record_ratelimit_burst(hr),
-                       format_timespan(buf, sizeof(buf), user_record_ratelimit_interval_usec(hr), 0));
-        }
+                       FORMAT_TIMESPAN(user_record_ratelimit_interval_usec(hr), 0));
 
         if (hr->enforce_password_policy >= 0)
                 printf(" Passwd Pol.: %s\n", yes_no(hr->enforce_password_policy));
@@ -443,24 +437,23 @@
             hr->password_change_warn_usec != UINT64_MAX ||
             hr->password_change_inactive_usec != UINT64_MAX) {
 
-                char buf[FORMAT_TIMESPAN_MAX];
                 printf(" Passwd Chg.:");
 
                 if (hr->password_change_min_usec != UINT64_MAX) {
-                        printf(" min %s", format_timespan(buf, sizeof(buf), hr->password_change_min_usec, 0));
+                        printf(" min %s", FORMAT_TIMESPAN(hr->password_change_min_usec, 0));
 
                         if (hr->password_change_max_usec != UINT64_MAX)
                                 printf(" …");
                 }
 
                 if (hr->password_change_max_usec != UINT64_MAX)
-                        printf(" max %s", format_timespan(buf, sizeof(buf), hr->password_change_max_usec, 0));
+                        printf(" max %s", FORMAT_TIMESPAN(hr->password_change_max_usec, 0));
 
                 if (hr->password_change_warn_usec != UINT64_MAX)
-                        printf("/warn %s", format_timespan(buf, sizeof(buf), hr->password_change_warn_usec, 0));
+                        printf("/warn %s", FORMAT_TIMESPAN(hr->password_change_warn_usec, 0));
 
                 if (hr->password_change_inactive_usec != UINT64_MAX)
-                        printf("/inactive %s", format_timespan(buf, sizeof(buf), hr->password_change_inactive_usec, 0));
+                        printf("/inactive %s", FORMAT_TIMESPAN(hr->password_change_inactive_usec, 0));
 
                 printf("\n");
         }
@@ -468,17 +461,30 @@
         if (hr->password_change_now >= 0)
                 printf("Pas. Ch. Now: %s\n", yes_no(hr->password_change_now));
 
+        if (hr->drop_caches >= 0 || user_record_drop_caches(hr))
+                printf(" Drop Caches: %s\n", yes_no(user_record_drop_caches(hr)));
+
+        if (hr->auto_resize_mode >= 0)
+                printf(" Auto Resize: %s\n", auto_resize_mode_to_string(user_record_auto_resize_mode(hr)));
+
+        if (hr->rebalance_weight != REBALANCE_WEIGHT_UNSET) {
+                uint64_t rb;
+
+                rb = user_record_rebalance_weight(hr);
+                if (rb == REBALANCE_WEIGHT_OFF)
+                        printf("   Rebalance: off\n");
+                else
+                        printf("   Rebalance: weight %" PRIu64 "\n", rb);
+        }
+
         if (!strv_isempty(hr->ssh_authorized_keys))
                 printf("SSH Pub. Key: %zu\n", strv_length(hr->ssh_authorized_keys));
 
-        if (!strv_isempty(hr->pkcs11_token_uri)) {
-                char **i;
-
+        if (!strv_isempty(hr->pkcs11_token_uri))
                 STRV_FOREACH(i, hr->pkcs11_token_uri)
                         printf(i == hr->pkcs11_token_uri ?
                                "PKCS11 Token: %s\n" :
                                "              %s\n", *i);
-        }
 
         if (hr->n_fido2_hmac_credential > 0)
                 printf(" FIDO2 Token: %zu\n", hr->n_fido2_hmac_credential);
@@ -496,10 +502,8 @@
         if (hr->signed_locally >= 0)
                 printf("  Local Sig.: %s\n", yes_no(hr->signed_locally));
 
-        if (hr->stop_delay_usec != UINT64_MAX) {
-                char buf[FORMAT_TIMESPAN_MAX];
-                printf("  Stop Delay: %s\n", format_timespan(buf, sizeof(buf), hr->stop_delay_usec, 0));
-        }
+        if (hr->stop_delay_usec != UINT64_MAX)
+                printf("  Stop Delay: %s\n", FORMAT_TIMESPAN(hr->stop_delay_usec, 0));
 
         if (hr->auto_login >= 0)
                 printf("Autom. Login: %s\n", yes_no(hr->auto_login));
@@ -519,10 +523,8 @@
 
         printf(" Disposition: %s\n", user_disposition_to_string(group_record_disposition(gr)));
 
-        if (gr->last_change_usec != USEC_INFINITY) {
-                char buf[FORMAT_TIMESTAMP_MAX];
-                printf(" Last Change: %s\n", format_timestamp(buf, sizeof(buf), gr->last_change_usec));
-        }
+        if (gr->last_change_usec != USEC_INFINITY)
+                printf(" Last Change: %s\n", FORMAT_TIMESTAMP(gr->last_change_usec));
 
         if (gid_is_valid(gr->gid))
                 printf("         GID: " GID_FMT "\n", gr->gid);
@@ -555,7 +557,6 @@
                 }
         } else {
                 const char *prefix = "     Members:";
-                char **i;
 
                 STRV_FOREACH(i, gr->members) {
                         printf("%s %s\n", prefix, *i);
@@ -565,7 +566,6 @@
 
         if (!strv_isempty(gr->administrators)) {
                 const char *prefix = "      Admins:";
-                char **i;
 
                 STRV_FOREACH(i, gr->administrators) {
                         printf("%s %s\n", prefix, *i);
diff --git a/src/shared/user-record.c b/src/shared/user-record.c
index 5fb3d4b..06bc699 100644
--- a/src/shared/user-record.c
+++ b/src/shared/user-record.c
@@ -5,140 +5,23 @@
 #include "cgroup-util.h"
 #include "dns-domain.h"
 #include "env-util.h"
-#include "fd-util.h"
-#include "fileio.h"
 #include "fs-util.h"
+#include "glyph-util.h"
 #include "hexdecoct.h"
 #include "hostname-util.h"
 #include "memory-util.h"
 #include "path-util.h"
 #include "pkcs11-util.h"
 #include "rlimit-util.h"
-#include "stat-util.h"
 #include "string-table.h"
 #include "strv.h"
+#include "uid-alloc-range.h"
 #include "user-record.h"
 #include "user-util.h"
 
 #define DEFAULT_RATELIMIT_BURST 30
 #define DEFAULT_RATELIMIT_INTERVAL_USEC (1*USEC_PER_MINUTE)
 
-#if ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES
-static int parse_alloc_uid(const char *path, const char *name, const char *t, uid_t *ret_uid) {
-        uid_t uid;
-        int r;
-
-        r = parse_uid(t, &uid);
-        if (r < 0)
-                return log_debug_errno(r, "%s: failed to parse %s %s, ignoring: %m", path, name, t);
-        if (uid == 0)
-                uid = 1;
-
-        *ret_uid = uid;
-        return 0;
-}
-#endif
-
-int read_login_defs(UGIDAllocationRange *ret_defs, const char *path, const char *root) {
-        UGIDAllocationRange defs = {
-                .system_alloc_uid_min = SYSTEM_ALLOC_UID_MIN,
-                .system_uid_max = SYSTEM_UID_MAX,
-                .system_alloc_gid_min = SYSTEM_ALLOC_GID_MIN,
-                .system_gid_max = SYSTEM_GID_MAX,
-        };
-
-#if ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES
-        _cleanup_fclose_ FILE *f = NULL;
-        int r;
-
-        if (!path)
-                path = "/etc/login.defs";
-
-        r = chase_symlinks_and_fopen_unlocked(path, root, CHASE_PREFIX_ROOT, "re", &f, NULL);
-        if (r == -ENOENT)
-                goto assign;
-        if (r < 0)
-                return log_debug_errno(r, "Failed to open %s: %m", path);
-
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
-                char *t;
-
-                r = read_line(f, LINE_MAX, &line);
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to read %s: %m", path);
-                if (r == 0)
-                        break;
-
-                if ((t = first_word(line, "SYS_UID_MIN")))
-                        (void) parse_alloc_uid(path, "SYS_UID_MIN", t, &defs.system_alloc_uid_min);
-                else if ((t = first_word(line, "SYS_UID_MAX")))
-                        (void) parse_alloc_uid(path, "SYS_UID_MAX", t, &defs.system_uid_max);
-                else if ((t = first_word(line, "SYS_GID_MIN")))
-                        (void) parse_alloc_uid(path, "SYS_GID_MIN", t, &defs.system_alloc_gid_min);
-                else if ((t = first_word(line, "SYS_GID_MAX")))
-                        (void) parse_alloc_uid(path, "SYS_GID_MAX", t, &defs.system_gid_max);
-        }
-
- assign:
-        if (defs.system_alloc_uid_min > defs.system_uid_max) {
-                log_debug("%s: SYS_UID_MIN > SYS_UID_MAX, resetting.", path);
-                defs.system_alloc_uid_min = MIN(defs.system_uid_max - 1, (uid_t) SYSTEM_ALLOC_UID_MIN);
-                /* Look at sys_uid_max to make sure sys_uid_min..sys_uid_max remains a valid range. */
-        }
-        if (defs.system_alloc_gid_min > defs.system_gid_max) {
-                log_debug("%s: SYS_GID_MIN > SYS_GID_MAX, resetting.", path);
-                defs.system_alloc_gid_min = MIN(defs.system_gid_max - 1, (gid_t) SYSTEM_ALLOC_GID_MIN);
-                /* Look at sys_gid_max to make sure sys_gid_min..sys_gid_max remains a valid range. */
-        }
-#endif
-
-        *ret_defs = defs;
-        return 0;
-}
-
-const UGIDAllocationRange *acquire_ugid_allocation_range(void) {
-#if ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES
-        static thread_local UGIDAllocationRange defs = {
-#else
-        static const UGIDAllocationRange defs = {
-#endif
-                .system_alloc_uid_min = SYSTEM_ALLOC_UID_MIN,
-                .system_uid_max = SYSTEM_UID_MAX,
-                .system_alloc_gid_min = SYSTEM_ALLOC_GID_MIN,
-                .system_gid_max = SYSTEM_GID_MAX,
-        };
-
-#if ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES
-        /* This function will ignore failure to read the file, so it should only be called from places where
-         * we don't crucially depend on the answer. In other words, it's appropriate for journald, but
-         * probably not for sysusers. */
-
-        static thread_local bool initialized = false;
-
-        if (!initialized) {
-                (void) read_login_defs(&defs, NULL, NULL);
-                initialized = true;
-        }
-#endif
-
-        return &defs;
-}
-
-bool uid_is_system(uid_t uid) {
-        const UGIDAllocationRange *defs;
-        assert_se(defs = acquire_ugid_allocation_range());
-
-        return uid <= defs->system_uid_max;
-}
-
-bool gid_is_system(gid_t gid) {
-        const UGIDAllocationRange *defs;
-        assert_se(defs = acquire_ugid_allocation_range());
-
-        return gid <= defs->system_gid_max;
-}
-
 UserRecord* user_record_new(void) {
         UserRecord *h;
 
@@ -172,9 +55,11 @@
                 .luks_discard = -1,
                 .luks_offline_discard = -1,
                 .luks_volume_key_size = UINT64_MAX,
+                .luks_pbkdf_force_iterations = UINT64_MAX,
                 .luks_pbkdf_time_cost_usec = UINT64_MAX,
                 .luks_pbkdf_memory_cost = UINT64_MAX,
                 .luks_pbkdf_parallel_threads = UINT64_MAX,
+                .luks_sector_size = UINT64_MAX,
                 .disk_usage = UINT64_MAX,
                 .disk_free = UINT64_MAX,
                 .disk_ceiling = UINT64_MAX,
@@ -201,6 +86,9 @@
                 .pkcs11_protected_authentication_path_permitted = -1,
                 .fido2_user_presence_permitted = -1,
                 .fido2_user_verification_permitted = -1,
+                .drop_caches = -1,
+                .auto_resize_mode = _AUTO_RESIZE_MODE_INVALID,
+                .rebalance_weight = REBALANCE_WEIGHT_UNSET,
         };
 
         return h;
@@ -269,6 +157,7 @@
         free(h->cifs_service);
         free(h->cifs_user_name);
         free(h->cifs_domain);
+        free(h->cifs_extra_mount_options);
 
         free(h->image_path);
         free(h->image_path_auto);
@@ -282,6 +171,7 @@
         free(h->luks_cipher_mode);
         free(h->luks_pbkdf_hash_algorithm);
         free(h->luks_pbkdf_type);
+        free(h->luks_extra_mount_options);
 
         free(h->state);
         free(h->service);
@@ -367,7 +257,7 @@
 
 static int json_dispatch_nice(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
         int *nl = userdata;
-        intmax_t m;
+        int64_t m;
 
         if (json_variant_is_null(variant)) {
                 *nl = INT_MAX;
@@ -391,10 +281,10 @@
         if (json_variant_is_null(variant))
                 *ret = RLIM_INFINITY;
         else if (json_variant_is_unsigned(variant)) {
-                uintmax_t w;
+                uint64_t w;
 
                 w = json_variant_unsigned(variant);
-                if (w == RLIM_INFINITY || (uintmax_t) w != json_variant_unsigned(variant))
+                if (w == RLIM_INFINITY || (uint64_t) w != json_variant_unsigned(variant))
                         return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "Resource limit value '%s' is out of range.", name);
 
                 *ret = (rlim_t) w;
@@ -467,12 +357,10 @@
 }
 
 static int json_dispatch_filename_or_path(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        char **s = userdata;
+        char **s = ASSERT_PTR(userdata);
         const char *n;
         int r;
 
-        assert(s);
-
         if (json_variant_is_null(variant)) {
                 *s = mfree(*s);
                 return 0;
@@ -568,7 +456,7 @@
 
 static int json_dispatch_umask(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
         mode_t *m = userdata;
-        uintmax_t k;
+        uint64_t k;
 
         if (json_variant_is_null(variant)) {
                 *m = MODE_INVALID;
@@ -580,7 +468,9 @@
 
         k = json_variant_unsigned(variant);
         if (k > 0777)
-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' outside of valid range 0…0777.", strna(name));
+                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL),
+                                "JSON field '%s' outside of valid range 0%s0777.",
+                                strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
         *m = (mode_t) k;
         return 0;
@@ -588,7 +478,7 @@
 
 static int json_dispatch_access_mode(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
         mode_t *m = userdata;
-        uintmax_t k;
+        uint64_t k;
 
         if (json_variant_is_null(variant)) {
                 *m = MODE_INVALID;
@@ -600,7 +490,9 @@
 
         k = json_variant_unsigned(variant);
         if (k > 07777)
-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' outside of valid range 0…07777.", strna(name));
+                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL),
+                                "JSON field '%s' outside of valid range 0%s07777.",
+                                strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
         *m = (mode_t) k;
         return 0;
@@ -678,29 +570,8 @@
         return 0;
 }
 
-static int json_dispatch_disk_size(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        uint64_t *size = userdata;
-        uintmax_t k;
-
-        if (json_variant_is_null(variant)) {
-                *size = UINT64_MAX;
-                return 0;
-        }
-
-        if (!json_variant_is_unsigned(variant))
-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name));
-
-        k = json_variant_unsigned(variant);
-        if (k < USER_DISK_SIZE_MIN || k > USER_DISK_SIZE_MAX)
-                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' is not in valid range %" PRIu64 "…%" PRIu64 ".", strna(name), USER_DISK_SIZE_MIN, USER_DISK_SIZE_MAX);
-
-        *size = k;
-        return 0;
-}
-
 static int json_dispatch_tasks_or_memory_max(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        uint64_t *limit = userdata;
-        uintmax_t k;
+        uint64_t *limit = userdata, k;
 
         if (json_variant_is_null(variant)) {
                 *limit = UINT64_MAX;
@@ -712,15 +583,16 @@
 
         k = json_variant_unsigned(variant);
         if (k <= 0 || k >= UINT64_MAX)
-                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' is not in valid range %" PRIu64 "…%" PRIu64 ".", strna(name), (uint64_t) 1, UINT64_MAX-1);
+                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE),
+                                "JSON field '%s' is not in valid range %" PRIu64 "%s%" PRIu64 ".",
+                                strna(name), (uint64_t) 1, special_glyph(SPECIAL_GLYPH_ELLIPSIS), UINT64_MAX-1);
 
         *limit = k;
         return 0;
 }
 
 static int json_dispatch_weight(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
-        uint64_t *weight = userdata;
-        uintmax_t k;
+        uint64_t *weight = userdata, k;
 
         if (json_variant_is_null(variant)) {
                 *weight = UINT64_MAX;
@@ -732,7 +604,10 @@
 
         k = json_variant_unsigned(variant);
         if (k <= CGROUP_WEIGHT_MIN || k >= CGROUP_WEIGHT_MAX)
-                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' is not in valid range %" PRIu64 "…%" PRIu64 ".", strna(name), (uint64_t) CGROUP_WEIGHT_MIN, (uint64_t) CGROUP_WEIGHT_MAX);
+                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE),
+                                "JSON field '%s' is not in valid range %" PRIu64 "%s%" PRIu64 ".",
+                                strna(name), (uint64_t) CGROUP_WEIGHT_MIN,
+                                special_glyph(SPECIAL_GLYPH_ELLIPSIS), (uint64_t) CGROUP_WEIGHT_MAX);
 
         *weight = k;
         return 0;
@@ -1094,6 +969,64 @@
         return 0;
 }
 
+static int dispatch_auto_resize_mode(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        AutoResizeMode *mode = userdata, m;
+
+        assert_se(mode);
+
+        if (json_variant_is_null(variant)) {
+                *mode = _AUTO_RESIZE_MODE_INVALID;
+                return 0;
+        }
+
+        if (json_variant_is_boolean(variant)) {
+                *mode = json_variant_boolean(variant) ? AUTO_RESIZE_SHRINK_AND_GROW : AUTO_RESIZE_OFF;
+                return 0;
+        }
+
+        if (!json_variant_is_string(variant))
+                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string, boolean or null.", strna(name));
+
+        m = auto_resize_mode_from_string(json_variant_string(variant));
+        if (m < 0)
+                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid automatic resize mode.", strna(name));
+
+        *mode = m;
+        return 0;
+}
+
+static int dispatch_rebalance_weight(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        uint64_t *rebalance_weight = userdata;
+        uintmax_t u;
+
+        assert_se(rebalance_weight);
+
+        if (json_variant_is_null(variant)) {
+                *rebalance_weight = REBALANCE_WEIGHT_UNSET;
+                return 0;
+        }
+
+        if (json_variant_is_boolean(variant)) {
+                *rebalance_weight = json_variant_boolean(variant) ? REBALANCE_WEIGHT_DEFAULT : REBALANCE_WEIGHT_OFF;
+                return 0;
+        }
+
+        if (!json_variant_is_unsigned(variant))
+                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an unsigned integer, boolean or null.", strna(name));
+
+        u = json_variant_unsigned(variant);
+        if (u >= REBALANCE_WEIGHT_MIN && u <= REBALANCE_WEIGHT_MAX)
+                *rebalance_weight = (uint64_t) u;
+        else if (u == 0)
+                *rebalance_weight = REBALANCE_WEIGHT_OFF;
+        else
+                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE),
+                                "Rebalance weight is out of valid range %" PRIu64 "%s%" PRIu64 ".",
+                                REBALANCE_WEIGHT_MIN, special_glyph(SPECIAL_GLYPH_ELLIPSIS), REBALANCE_WEIGHT_MAX);
+
+        return 0;
+}
+
 static int dispatch_privileged(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
 
         static const JsonDispatch privileged_dispatch_table[] = {
@@ -1127,7 +1060,6 @@
                 {},
         };
 
-        char smid[SD_ID128_STRING_MAX];
         JsonVariant *m;
         sd_id128_t mid;
         int r;
@@ -1142,7 +1074,7 @@
         if (r < 0)
                 return json_log(variant, flags, r, "Failed to determine machine ID: %m");
 
-        m = json_variant_by_key(variant, sd_id128_to_string(mid, smid));
+        m = json_variant_by_key(variant, SD_ID128_TO_STRING(mid));
         if (!m)
                 return 0;
 
@@ -1251,7 +1183,7 @@
                 { "notBeforeUSec",              JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, not_before_usec),               0         },
                 { "notAfterUSec",               JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, not_after_usec),                0         },
                 { "storage",                    JSON_VARIANT_STRING,        json_dispatch_storage,                offsetof(UserRecord, storage),                       0         },
-                { "diskSize",                   JSON_VARIANT_UNSIGNED,      json_dispatch_disk_size,              offsetof(UserRecord, disk_size),                     0         },
+                { "diskSize",                   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, disk_size),                     0         },
                 { "diskSizeRelative",           JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, disk_size_relative),            0         },
                 { "skeletonDirectory",          JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, skeleton_directory),            0         },
                 { "accessMode",                 JSON_VARIANT_UNSIGNED,      json_dispatch_access_mode,            offsetof(UserRecord, access_mode),                   0         },
@@ -1266,6 +1198,7 @@
                 { "cifsDomain",                 JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, cifs_domain),                   JSON_SAFE },
                 { "cifsUserName",               JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, cifs_user_name),                JSON_SAFE },
                 { "cifsService",                JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, cifs_service),                  JSON_SAFE },
+                { "cifsExtraMountOptions",      JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, cifs_extra_mount_options),      0         },
                 { "imagePath",                  JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, image_path),                    0         },
                 { "uid",                        JSON_VARIANT_UNSIGNED,      json_dispatch_uid_gid,                offsetof(UserRecord, uid),                           0         },
                 { "gid",                        JSON_VARIANT_UNSIGNED,      json_dispatch_uid_gid,                offsetof(UserRecord, gid),                           0         },
@@ -1281,9 +1214,15 @@
                 { "luksVolumeKeySize",          JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_volume_key_size),          0         },
                 { "luksPbkdfHashAlgorithm",     JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, luks_pbkdf_hash_algorithm),     JSON_SAFE },
                 { "luksPbkdfType",              JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, luks_pbkdf_type),               JSON_SAFE },
+                { "luksPbkdfForceIterations",   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_pbkdf_force_iterations),   0         },
                 { "luksPbkdfTimeCostUSec",      JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_pbkdf_time_cost_usec),     0         },
                 { "luksPbkdfMemoryCost",        JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_pbkdf_memory_cost),        0         },
                 { "luksPbkdfParallelThreads",   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_pbkdf_parallel_threads),   0         },
+                { "luksSectorSize",             JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_sector_size),              0         },
+                { "luksExtraMountOptions",      JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, luks_extra_mount_options),      0         },
+                { "dropCaches",                 JSON_VARIANT_BOOLEAN,       json_dispatch_tristate,               offsetof(UserRecord, drop_caches),                   0         },
+                { "autoResizeMode",             _JSON_VARIANT_TYPE_INVALID, dispatch_auto_resize_mode,            offsetof(UserRecord, auto_resize_mode),              0         },
+                { "rebalanceWeight",            _JSON_VARIANT_TYPE_INVALID, dispatch_rebalance_weight,            offsetof(UserRecord, rebalance_weight),              0         },
                 { "rateLimitIntervalUSec",      JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, ratelimit_interval_usec),       0         },
                 { "rateLimitBurst",             JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, ratelimit_burst),               0         },
                 { "enforcePasswordPolicy",      JSON_VARIANT_BOOLEAN,       json_dispatch_tristate,               offsetof(UserRecord, enforce_password_policy),       0         },
@@ -1350,25 +1289,26 @@
 static int dispatch_status(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
 
         static const JsonDispatch status_dispatch_table[] = {
-                { "diskUsage",                  JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, disk_usage),                    0         },
-                { "diskFree",                   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, disk_free),                     0         },
-                { "diskSize",                   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, disk_size),                     0         },
-                { "diskCeiling",                JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, disk_ceiling),                  0         },
-                { "diskFloor",                  JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, disk_floor),                    0         },
-                { "state",                      JSON_VARIANT_STRING,        json_dispatch_string,   offsetof(UserRecord, state),                         JSON_SAFE },
-                { "service",                    JSON_VARIANT_STRING,        json_dispatch_string,   offsetof(UserRecord, service),                       JSON_SAFE },
-                { "signedLocally",              _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate, offsetof(UserRecord, signed_locally),                0         },
-                { "goodAuthenticationCounter",  JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, good_authentication_counter),   0         },
-                { "badAuthenticationCounter",   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, bad_authentication_counter),    0         },
-                { "lastGoodAuthenticationUSec", JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, last_good_authentication_usec), 0         },
-                { "lastBadAuthenticationUSec",  JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, last_bad_authentication_usec),  0         },
-                { "rateLimitBeginUSec",         JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, ratelimit_begin_usec),          0         },
-                { "rateLimitCount",             JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,   offsetof(UserRecord, ratelimit_count),               0         },
-                { "removable",                  JSON_VARIANT_BOOLEAN,       json_dispatch_boolean,  offsetof(UserRecord, removable),                     0         },
+                { "diskUsage",                  JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, disk_usage),                    0         },
+                { "diskFree",                   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, disk_free),                     0         },
+                { "diskSize",                   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, disk_size),                     0         },
+                { "diskCeiling",                JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, disk_ceiling),                  0         },
+                { "diskFloor",                  JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, disk_floor),                    0         },
+                { "state",                      JSON_VARIANT_STRING,        json_dispatch_string,      offsetof(UserRecord, state),                         JSON_SAFE },
+                { "service",                    JSON_VARIANT_STRING,        json_dispatch_string,      offsetof(UserRecord, service),                       JSON_SAFE },
+                { "signedLocally",              _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate,    offsetof(UserRecord, signed_locally),                0         },
+                { "goodAuthenticationCounter",  JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, good_authentication_counter),   0         },
+                { "badAuthenticationCounter",   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, bad_authentication_counter),    0         },
+                { "lastGoodAuthenticationUSec", JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, last_good_authentication_usec), 0         },
+                { "lastBadAuthenticationUSec",  JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, last_bad_authentication_usec),  0         },
+                { "rateLimitBeginUSec",         JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, ratelimit_begin_usec),          0         },
+                { "rateLimitCount",             JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,      offsetof(UserRecord, ratelimit_count),               0         },
+                { "removable",                  JSON_VARIANT_BOOLEAN,       json_dispatch_boolean,     offsetof(UserRecord, removable),                     0         },
+                { "accessMode",                 JSON_VARIANT_UNSIGNED,      json_dispatch_access_mode, offsetof(UserRecord, access_mode),                   0         },
+                { "fileSystemType",             JSON_VARIANT_STRING,        json_dispatch_string,      offsetof(UserRecord, file_system_type),              JSON_SAFE },
                 {},
         };
 
-        char smid[SD_ID128_STRING_MAX];
         JsonVariant *m;
         sd_id128_t mid;
         int r;
@@ -1383,7 +1323,7 @@
         if (r < 0)
                 return json_log(variant, flags, r, "Failed to determine machine ID: %m");
 
-        m = json_variant_by_key(variant, sd_id128_to_string(mid, smid));
+        m = json_variant_by_key(variant, SD_ID128_TO_STRING(mid));
         if (!m)
                 return 0;
 
@@ -1407,11 +1347,11 @@
                 return 0;
         }
 
-        z = strjoin("/home/", user_name_and_realm, suffix);
+        z = strjoin(get_home_root(), "/", user_name_and_realm, suffix);
         if (!z)
                 return -ENOMEM;
 
-        *ret = z;
+        *ret = path_simplify(z);
         return 1;
 }
 
@@ -1436,7 +1376,7 @@
                 return 0;
 
         if (!h->home_directory && !h->home_directory_auto) {
-                h->home_directory_auto = path_join("/home/", h->user_name);
+                h->home_directory_auto = path_join(get_home_root(), h->user_name);
                 if (!h->home_directory_auto)
                         return json_log_oom(h->json, json_flags);
         }
@@ -1596,7 +1536,7 @@
                 { "notBeforeUSec",              JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, not_before_usec),               0         },
                 { "notAfterUSec",               JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, not_after_usec),                0         },
                 { "storage",                    JSON_VARIANT_STRING,        json_dispatch_storage,                offsetof(UserRecord, storage),                       0         },
-                { "diskSize",                   JSON_VARIANT_UNSIGNED,      json_dispatch_disk_size,              offsetof(UserRecord, disk_size),                     0         },
+                { "diskSize",                   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, disk_size),                     0         },
                 { "diskSizeRelative",           JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, disk_size_relative),            0         },
                 { "skeletonDirectory",          JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, skeleton_directory),            0         },
                 { "accessMode",                 JSON_VARIANT_UNSIGNED,      json_dispatch_access_mode,            offsetof(UserRecord, access_mode),                   0         },
@@ -1611,6 +1551,7 @@
                 { "cifsDomain",                 JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, cifs_domain),                   JSON_SAFE },
                 { "cifsUserName",               JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, cifs_user_name),                JSON_SAFE },
                 { "cifsService",                JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, cifs_service),                  JSON_SAFE },
+                { "cifsExtraMountOptions",      JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, cifs_extra_mount_options),      0         },
                 { "imagePath",                  JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, image_path),                    0         },
                 { "homeDirectory",              JSON_VARIANT_STRING,        json_dispatch_home_directory,         offsetof(UserRecord, home_directory),                0         },
                 { "uid",                        JSON_VARIANT_UNSIGNED,      json_dispatch_uid_gid,                offsetof(UserRecord, uid),                           0         },
@@ -1621,15 +1562,21 @@
                 { "luksUuid",                   JSON_VARIANT_STRING,        json_dispatch_id128,                  offsetof(UserRecord, luks_uuid),                     0         },
                 { "fileSystemUuid",             JSON_VARIANT_STRING,        json_dispatch_id128,                  offsetof(UserRecord, file_system_uuid),              0         },
                 { "luksDiscard",                _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate,               offsetof(UserRecord, luks_discard),                  0         },
-                { "luksOfflineDiscard",         _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate,            offsetof(UserRecord, luks_offline_discard),          0         },
+                { "luksOfflineDiscard",         _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate,               offsetof(UserRecord, luks_offline_discard),          0         },
                 { "luksCipher",                 JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, luks_cipher),                   JSON_SAFE },
                 { "luksCipherMode",             JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, luks_cipher_mode),              JSON_SAFE },
                 { "luksVolumeKeySize",          JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_volume_key_size),          0         },
                 { "luksPbkdfHashAlgorithm",     JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, luks_pbkdf_hash_algorithm),     JSON_SAFE },
                 { "luksPbkdfType",              JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, luks_pbkdf_type),               JSON_SAFE },
+                { "luksPbkdfForceIterations",   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_pbkdf_force_iterations),   0         },
                 { "luksPbkdfTimeCostUSec",      JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_pbkdf_time_cost_usec),     0         },
                 { "luksPbkdfMemoryCost",        JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_pbkdf_memory_cost),        0         },
                 { "luksPbkdfParallelThreads",   JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_pbkdf_parallel_threads),   0         },
+                { "luksSectorSize",             JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, luks_sector_size),              0         },
+                { "luksExtraMountOptions",      JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, luks_extra_mount_options),      0         },
+                { "dropCaches",                 JSON_VARIANT_BOOLEAN,       json_dispatch_tristate,               offsetof(UserRecord, drop_caches),                   0         },
+                { "autoResizeMode",             _JSON_VARIANT_TYPE_INVALID, dispatch_auto_resize_mode,            offsetof(UserRecord, auto_resize_mode),              0         },
+                { "rebalanceWeight",            _JSON_VARIANT_TYPE_INVALID, dispatch_rebalance_weight,            offsetof(UserRecord, rebalance_weight),              0         },
                 { "service",                    JSON_VARIANT_STRING,        json_dispatch_string,                 offsetof(UserRecord, service),                       JSON_SAFE },
                 { "rateLimitIntervalUSec",      JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, ratelimit_interval_usec),       0         },
                 { "rateLimitBurst",             JSON_VARIANT_UNSIGNED,      json_dispatch_uint64,                 offsetof(UserRecord, ratelimit_burst),               0         },
@@ -1816,7 +1763,7 @@
                 return "/bin/sh";
 
         if (user_record_disposition(h) == USER_REGULAR)
-                return "/bin/bash";
+                return DEFAULT_USER_SHELL;
 
         return NOLOGIN;
 }
@@ -1895,7 +1842,18 @@
 const char* user_record_luks_pbkdf_type(UserRecord *h) {
         assert(h);
 
-        return h->luks_pbkdf_type ?: "argon2i";
+        return h->luks_pbkdf_type ?: "argon2id";
+}
+
+uint64_t user_record_luks_pbkdf_force_iterations(UserRecord *h) {
+        assert(h);
+
+        /* propagate default "benchmark" mode as itself */
+        if (h->luks_pbkdf_force_iterations == UINT64_MAX)
+                return UINT64_MAX;
+
+        /* clamp everything else to actually accepted number of iterations of libcryptsetup */
+        return CLAMP(h->luks_pbkdf_force_iterations, 1U, UINT32_MAX);
 }
 
 uint64_t user_record_luks_pbkdf_time_cost_usec(UserRecord *h) {
@@ -1930,6 +1888,16 @@
         return MIN(h->luks_pbkdf_parallel_threads, UINT32_MAX);
 }
 
+uint64_t user_record_luks_sector_size(UserRecord *h) {
+        assert(h);
+
+        if (h->luks_sector_size == UINT64_MAX)
+                return 512;
+
+        /* Allow up to 4K due to dm-crypt support and 4K alignment by the homed LUKS backend */
+        return CLAMP(UINT64_C(1) << (63 - __builtin_clzl(h->luks_sector_size)), 512U, 4096U);
+}
+
 const char *user_record_luks_pbkdf_hash_algorithm(UserRecord *h) {
         assert(h);
 
@@ -2022,6 +1990,34 @@
         return !strv_isempty(h->hashed_password);
 }
 
+bool user_record_drop_caches(UserRecord *h) {
+        assert(h);
+
+        if (h->drop_caches >= 0)
+                return h->drop_caches;
+
+        /* By default drop caches on fscrypt, not otherwise. */
+        return user_record_storage(h) == USER_FSCRYPT;
+}
+
+AutoResizeMode user_record_auto_resize_mode(UserRecord *h) {
+        assert(h);
+
+        if (h->auto_resize_mode >= 0)
+                return h->auto_resize_mode;
+
+        return user_record_storage(h) == USER_LUKS ? AUTO_RESIZE_SHRINK_AND_GROW : AUTO_RESIZE_OFF;
+}
+
+uint64_t user_record_rebalance_weight(UserRecord *h) {
+        assert(h);
+
+        if (h->rebalance_weight == REBALANCE_WEIGHT_UNSET)
+                return REBALANCE_WEIGHT_DEFAULT;
+
+        return h->rebalance_weight;
+}
+
 uint64_t user_record_ratelimit_next_try(UserRecord *h) {
         assert(h);
 
@@ -2269,3 +2265,11 @@
 };
 
 DEFINE_STRING_TABLE_LOOKUP(user_disposition, UserDisposition);
+
+static const char* const auto_resize_mode_table[_AUTO_RESIZE_MODE_MAX] = {
+        [AUTO_RESIZE_OFF]             = "off",
+        [AUTO_RESIZE_GROW]            = "grow",
+        [AUTO_RESIZE_SHRINK_AND_GROW] = "shrink-and-grow",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(auto_resize_mode, AutoResizeMode);
diff --git a/src/shared/user-record.h b/src/shared/user-record.h
index fa58dfd..73fb86c 100644
--- a/src/shared/user-record.h
+++ b/src/shared/user-record.h
@@ -10,42 +10,6 @@
 #include "missing_resource.h"
 #include "time-util.h"
 
-/* But some limits on disk sizes: not less than 5M, not more than 5T */
-#define USER_DISK_SIZE_MIN (UINT64_C(5)*1024*1024)
-#define USER_DISK_SIZE_MAX (UINT64_C(5)*1024*1024*1024*1024)
-
-/* The default disk size to use when nothing else is specified, relative to free disk space */
-#define USER_DISK_SIZE_DEFAULT_PERCENT 85
-
-bool uid_is_system(uid_t uid);
-bool gid_is_system(gid_t gid);
-
-static inline bool uid_is_dynamic(uid_t uid) {
-        return DYNAMIC_UID_MIN <= uid && uid <= DYNAMIC_UID_MAX;
-}
-
-static inline bool gid_is_dynamic(gid_t gid) {
-        return uid_is_dynamic((uid_t) gid);
-}
-
-static inline bool uid_is_container(uid_t uid) {
-        return CONTAINER_UID_BASE_MIN <= uid && uid <= CONTAINER_UID_BASE_MAX;
-}
-
-static inline bool gid_is_container(gid_t gid) {
-        return uid_is_container((uid_t) gid);
-}
-
-typedef struct UGIDAllocationRange {
-        uid_t system_alloc_uid_min;
-        uid_t system_uid_max;
-        gid_t system_alloc_gid_min;
-        gid_t system_gid_max;
-} UGIDAllocationRange;
-
-int read_login_defs(UGIDAllocationRange *ret_defs, const char *path, const char *root);
-const UGIDAllocationRange *acquire_ugid_allocation_range(void);
-
 typedef enum UserDisposition {
         USER_INTRINSIC,   /* root and nobody */
         USER_SYSTEM,      /* statically allocated users for system services */
@@ -249,6 +213,21 @@
         char *hashed_password;
 } RecoveryKey;
 
+typedef enum AutoResizeMode {
+        AUTO_RESIZE_OFF,               /* no automatic grow/shrink */
+        AUTO_RESIZE_GROW,              /* grow at login */
+        AUTO_RESIZE_SHRINK_AND_GROW,   /* shrink at logout + grow at login */
+        _AUTO_RESIZE_MODE_MAX,
+        _AUTO_RESIZE_MODE_INVALID = -EINVAL,
+} AutoResizeMode;
+
+#define REBALANCE_WEIGHT_OFF UINT64_C(0)
+#define REBALANCE_WEIGHT_DEFAULT UINT64_C(100)
+#define REBALANCE_WEIGHT_BACKING UINT64_C(20)
+#define REBALANCE_WEIGHT_MIN UINT64_C(1)
+#define REBALANCE_WEIGHT_MAX UINT64_C(10000)
+#define REBALANCE_WEIGHT_UNSET UINT64_MAX
+
 typedef struct UserRecord {
         /* The following three fields are not part of the JSON record */
         unsigned n_ref;
@@ -285,6 +264,8 @@
         uint64_t disk_size_relative; /* Disk size, relative to the free bytes of the medium, normalized to UINT32_MAX = 100% */
         char *skeleton_directory;
         mode_t access_mode;
+        AutoResizeMode auto_resize_mode;
+        uint64_t rebalance_weight;
 
         uint64_t tasks_max;
         uint64_t memory_high;
@@ -304,6 +285,7 @@
         char *cifs_domain;
         char *cifs_user_name;
         char *cifs_service;
+        char *cifs_extra_mount_options;
 
         char *image_path;
         char *image_path_auto; /* when none is configured explicitly, this is where we place the implicit image */
@@ -327,9 +309,12 @@
         uint64_t luks_volume_key_size;
         char *luks_pbkdf_hash_algorithm;
         char *luks_pbkdf_type;
+        uint64_t luks_pbkdf_force_iterations;
         uint64_t luks_pbkdf_time_cost_usec;
         uint64_t luks_pbkdf_memory_cost;
         uint64_t luks_pbkdf_parallel_threads;
+        uint64_t luks_sector_size;
+        char *luks_extra_mount_options;
 
         uint64_t disk_usage;
         uint64_t disk_free;
@@ -353,6 +338,7 @@
         int removable;
         int enforce_password_policy;
         int auto_login;
+        int drop_caches;
 
         uint64_t stop_delay_usec;   /* How long to leave systemd --user around on log-out */
         int kill_processes;         /* Whether to kill user processes forcibly on log-out */
@@ -409,9 +395,11 @@
 const char *user_record_luks_cipher_mode(UserRecord *h);
 uint64_t user_record_luks_volume_key_size(UserRecord *h);
 const char* user_record_luks_pbkdf_type(UserRecord *h);
+uint64_t user_record_luks_pbkdf_force_iterations(UserRecord *h);
 usec_t user_record_luks_pbkdf_time_cost_usec(UserRecord *h);
 uint64_t user_record_luks_pbkdf_memory_cost(UserRecord *h);
 uint64_t user_record_luks_pbkdf_parallel_threads(UserRecord *h);
+uint64_t user_record_luks_sector_size(UserRecord *h);
 const char *user_record_luks_pbkdf_hash_algorithm(UserRecord *h);
 gid_t user_record_gid(UserRecord *h);
 UserDisposition user_record_disposition(UserRecord *h);
@@ -419,6 +407,9 @@
 usec_t user_record_ratelimit_interval_usec(UserRecord *h);
 uint64_t user_record_ratelimit_burst(UserRecord *h);
 bool user_record_can_authenticate(UserRecord *h);
+bool user_record_drop_caches(UserRecord *h);
+AutoResizeMode user_record_auto_resize_mode(UserRecord *h);
+uint64_t user_record_rebalance_weight(UserRecord *h);
 
 int user_record_build_image_path(UserStorage storage, const char *user_name_and_realm, char **ret);
 
@@ -449,3 +440,6 @@
 
 const char* user_disposition_to_string(UserDisposition t) _const_;
 UserDisposition user_disposition_from_string(const char *s) _pure_;
+
+const char* auto_resize_mode_to_string(AutoResizeMode m) _const_;
+AutoResizeMode auto_resize_mode_from_string(const char *s) _pure_;
diff --git a/src/shared/userdb-dropin.h b/src/shared/userdb-dropin.h
index 94cdd15..fad3981 100644
--- a/src/shared/userdb-dropin.h
+++ b/src/shared/userdb-dropin.h
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "def.h"
+#include "constants.h"
 #include "group-record.h"
 #include "user-record.h"
 #include "userdb.h"
diff --git a/src/shared/userdb.c b/src/shared/userdb.c
index 91ac7c3..a77eff4 100644
--- a/src/shared/userdb.c
+++ b/src/shared/userdb.c
@@ -90,7 +90,7 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected state?");
+                assert_not_reached();
         }
 
         sd_event_unref(iterator->event);
@@ -153,11 +153,9 @@
                 VarlinkReplyFlags flags,
                 void *userdata) {
 
-        UserDBIterator *iterator = userdata;
+        UserDBIterator *iterator = ASSERT_PTR(userdata);
         int r;
 
-        assert(iterator);
-
         if (error_id) {
                 log_debug("Got lookup error: %s", error_id);
 
@@ -296,8 +294,8 @@
                 } membership_data = {};
 
                 static const JsonDispatch dispatch_table[] = {
-                        { "userName",  JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct membership_data, user_name),  JSON_SAFE },
-                        { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct membership_data, group_name), JSON_SAFE },
+                        { "userName",  JSON_VARIANT_STRING, json_dispatch_user_group_name, offsetof(struct membership_data, user_name),  JSON_RELAX },
+                        { "groupName", JSON_VARIANT_STRING, json_dispatch_user_group_name, offsetof(struct membership_data, group_name), JSON_RELAX },
                         {}
                 };
 
@@ -333,7 +331,7 @@
         }
 
         default:
-                assert_not_reached("unexpected lookup");
+                assert_not_reached();
         }
 
 finish:
@@ -405,7 +403,6 @@
 
         _cleanup_(strv_freep) char **except = NULL, **only = NULL;
         _cleanup_(closedirp) DIR *d = NULL;
-        struct dirent *de;
         const char *e;
         int r, ret = 0;
 
@@ -472,7 +469,7 @@
                     streq(de->d_name, "io.systemd.DynamicUser"))
                         continue;
 
-                /* Avoid NSS is this is requested. Note that we also skip NSS when we were asked to skip the
+                /* Avoid NSS if this is requested. Note that we also skip NSS when we were asked to skip the
                  * multiplexer, since in that case it's safer to do NSS in the client side emulation below
                  * (and when we run as part of systemd-userdbd.service we don't want to talk to ourselves
                  * anyway). */
@@ -600,22 +597,22 @@
 static int synthetic_root_user_build(UserRecord **ret) {
         return user_record_build(
                         ret,
-                        JSON_BUILD_OBJECT(JSON_BUILD_PAIR("userName", JSON_BUILD_STRING("root")),
+                        JSON_BUILD_OBJECT(JSON_BUILD_PAIR("userName", JSON_BUILD_CONST_STRING("root")),
                                           JSON_BUILD_PAIR("uid", JSON_BUILD_UNSIGNED(0)),
                                           JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(0)),
-                                          JSON_BUILD_PAIR("homeDirectory", JSON_BUILD_STRING("/root")),
-                                          JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("intrinsic"))));
+                                          JSON_BUILD_PAIR("homeDirectory", JSON_BUILD_CONST_STRING("/root")),
+                                          JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("intrinsic"))));
 }
 
 static int synthetic_nobody_user_build(UserRecord **ret) {
         return user_record_build(
                         ret,
-                        JSON_BUILD_OBJECT(JSON_BUILD_PAIR("userName", JSON_BUILD_STRING(NOBODY_USER_NAME)),
+                        JSON_BUILD_OBJECT(JSON_BUILD_PAIR("userName", JSON_BUILD_CONST_STRING(NOBODY_USER_NAME)),
                                           JSON_BUILD_PAIR("uid", JSON_BUILD_UNSIGNED(UID_NOBODY)),
                                           JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(GID_NOBODY)),
-                                          JSON_BUILD_PAIR("shell", JSON_BUILD_STRING(NOLOGIN)),
+                                          JSON_BUILD_PAIR("shell", JSON_BUILD_CONST_STRING(NOLOGIN)),
                                           JSON_BUILD_PAIR("locked", JSON_BUILD_BOOLEAN(true)),
-                                          JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("intrinsic"))));
+                                          JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("intrinsic"))));
 }
 
 int userdb_by_name(const char *name, UserDBFlags flags, UserRecord **ret) {
@@ -878,17 +875,17 @@
 static int synthetic_root_group_build(GroupRecord **ret) {
         return group_record_build(
                         ret,
-                        JSON_BUILD_OBJECT(JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING("root")),
+                        JSON_BUILD_OBJECT(JSON_BUILD_PAIR("groupName", JSON_BUILD_CONST_STRING("root")),
                                           JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(0)),
-                                          JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("intrinsic"))));
+                                          JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("intrinsic"))));
 }
 
 static int synthetic_nobody_group_build(GroupRecord **ret) {
         return group_record_build(
                         ret,
-                        JSON_BUILD_OBJECT(JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(NOBODY_GROUP_NAME)),
+                        JSON_BUILD_OBJECT(JSON_BUILD_PAIR("groupName", JSON_BUILD_CONST_STRING(NOBODY_GROUP_NAME)),
                                           JSON_BUILD_PAIR("gid", JSON_BUILD_UNSIGNED(GID_NOBODY)),
-                                          JSON_BUILD_PAIR("disposition", JSON_BUILD_STRING("intrinsic"))));
+                                          JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("intrinsic"))));
 }
 
 int groupdb_by_name(const char *name, UserDBFlags flags, GroupRecord **ret) {
diff --git a/src/shared/utmp-wtmp.c b/src/shared/utmp-wtmp.c
index d529498..3a68cf8 100644
--- a/src/shared/utmp-wtmp.c
+++ b/src/shared/utmp-wtmp.c
@@ -12,6 +12,7 @@
 #include <utmpx.h>
 
 #include "alloc-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "hostname-util.h"
 #include "io-util.h"
@@ -283,7 +284,7 @@
 #define TIMEOUT_USEC (50 * USEC_PER_MSEC)
 
 static int write_to_terminal(const char *tty, const char *message) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *p;
         size_t left;
         usec_t end;
@@ -292,13 +293,15 @@
         assert(message);
 
         fd = open(tty, O_WRONLY|O_NONBLOCK|O_NOCTTY|O_CLOEXEC);
-        if (fd < 0 || !isatty(fd))
+        if (fd < 0)
                 return -errno;
+        if (!isatty(fd))
+                return -ENOTTY;
 
         p = message;
         left = strlen(message);
 
-        end = now(CLOCK_MONOTONIC) + TIMEOUT_USEC;
+        end = usec_add(now(CLOCK_MONOTONIC), TIMEOUT_USEC);
 
         while (left > 0) {
                 ssize_t n;
@@ -306,19 +309,21 @@
                 int k;
 
                 t = now(CLOCK_MONOTONIC);
-
                 if (t >= end)
                         return -ETIME;
 
                 k = fd_wait_for_event(fd, POLLOUT, end - t);
-                if (k < 0)
+                if (k < 0) {
+                        if (ERRNO_IS_TRANSIENT(k))
+                                continue;
                         return k;
+                }
                 if (k == 0)
                         return -ETIME;
 
                 n = write(fd, p, left);
                 if (n < 0) {
-                        if (errno == EAGAIN)
+                        if (ERRNO_IS_TRANSIENT(errno))
                                 continue;
 
                         return -errno;
@@ -337,12 +342,11 @@
         const char *message,
         const char *username,
         const char *origin_tty,
-        bool (*match_tty)(const char *tty, void *userdata),
+        bool (*match_tty)(const char *tty, bool is_local, void *userdata),
         void *userdata) {
 
         _unused_ _cleanup_(utxent_cleanup) bool utmpx = false;
         _cleanup_free_ char *text = NULL, *hn = NULL, *un = NULL, *stdin_tty = NULL;
-        char date[FORMAT_TIMESTAMP_MAX];
         struct utmpx *u;
         int r;
 
@@ -361,12 +365,12 @@
         }
 
         if (asprintf(&text,
-                     "\a\r\n"
+                     "\r\n"
                      "Broadcast message from %s@%s%s%s (%s):\r\n\r\n"
                      "%s\r\n\r\n",
                      un ?: username, hn,
                      origin_tty ? " on " : "", strempty(origin_tty),
-                     format_timestamp(date, sizeof(date), now(CLOCK_REALTIME)),
+                     FORMAT_TIMESTAMP(now(CLOCK_REALTIME)),
                      message) < 0)
                 return -ENOMEM;
 
@@ -382,17 +386,20 @@
                 if (u->ut_type != USER_PROCESS || u->ut_user[0] == 0)
                         continue;
 
-                /* this access is fine, because STRLEN("/dev/") << 32 (UT_LINESIZE) */
+                /* This access is fine, because strlen("/dev/") < 32 (UT_LINESIZE) */
                 if (path_startswith(u->ut_line, "/dev/"))
                         path = u->ut_line;
                 else {
                         if (asprintf(&buf, "/dev/%.*s", (int) sizeof(u->ut_line), u->ut_line) < 0)
                                 return -ENOMEM;
-
                         path = buf;
                 }
 
-                if (!match_tty || match_tty(path, userdata)) {
+                /* It seems that the address field is always set for remote logins.
+                 * For local logins and other local entries, we get [0,0,0,0]. */
+                bool is_local = memeqzero(u->ut_addr_v6, sizeof(u->ut_addr_v6));
+
+                if (!match_tty || match_tty(path, is_local, userdata)) {
                         q = write_to_terminal(path, text);
                         if (q < 0)
                                 r = q;
diff --git a/src/shared/utmp-wtmp.h b/src/shared/utmp-wtmp.h
index 3e71f76..97be719 100644
--- a/src/shared/utmp-wtmp.h
+++ b/src/shared/utmp-wtmp.h
@@ -5,7 +5,6 @@
 #include <sys/types.h>
 
 #include "time-util.h"
-#include "util.h"
 
 #if ENABLE_UTMP
 #include <utmpx.h>
@@ -23,7 +22,7 @@
         const char *message,
         const char *username,
         const char *origin_tty,
-        bool (*match_tty)(const char *tty, void *userdata),
+        bool (*match_tty)(const char *tty, bool is_local, void *userdata),
         void *userdata);
 
 static inline bool utxent_start(void) {
@@ -59,7 +58,7 @@
                 const char *message,
                 const char *username,
                 const char *origin_tty,
-                bool (*match_tty)(const char *tty, void *userdata),
+                bool (*match_tty)(const char *tty, bool is_local, void *userdata),
                 void *userdata) {
         return 0;
 }
diff --git a/src/shared/varlink-internal.h b/src/shared/varlink-internal.h
new file mode 100644
index 0000000..715202a
--- /dev/null
+++ b/src/shared/varlink-internal.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdio.h>
+
+#include "fdset.h"
+#include "varlink.h"
+
+int varlink_server_serialize(VarlinkServer *s, FILE *f, FDSet *fds);
+int varlink_server_deserialize_one(VarlinkServer *s, const char *value, FDSet *fds);
diff --git a/src/shared/varlink.c b/src/shared/varlink.c
index ec062f3..8244f59 100644
--- a/src/shared/varlink.c
+++ b/src/shared/varlink.c
@@ -6,11 +6,13 @@
 #include "alloc-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
+#include "glyph-util.h"
 #include "hashmap.h"
 #include "io-util.h"
 #include "list.h"
 #include "process-util.h"
 #include "selinux-util.h"
+#include "serialize.h"
 #include "set.h"
 #include "socket-util.h"
 #include "string-table.h"
@@ -20,6 +22,7 @@
 #include "umask-util.h"
 #include "user-util.h"
 #include "varlink.h"
+#include "varlink-internal.h"
 
 #define VARLINK_DEFAULT_CONNECTIONS_MAX 4096U
 #define VARLINK_DEFAULT_CONNECTIONS_PER_UID_MAX 1024U
@@ -236,8 +239,9 @@
                 varlink_log(v, "Setting state %s",
                             varlink_state_to_string(state));
         else
-                varlink_log(v, "Changing state %s → %s",
+                varlink_log(v, "Changing state %s %s %s",
                             varlink_state_to_string(v->state),
+                            special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
                             varlink_state_to_string(state));
 
         v->state = state;
@@ -254,12 +258,11 @@
 
         *v = (Varlink) {
                 .n_ref = 1,
-                .fd = -1,
+                .fd = -EBADF,
 
                 .state = _VARLINK_STATE_INVALID,
 
-                .ucred.uid = UID_INVALID,
-                .ucred.gid = GID_INVALID,
+                .ucred = UCRED_INVALID,
 
                 .timestamp = USEC_INFINITY,
                 .timeout = VARLINK_DEFAULT_TIMEOUT_USEC
@@ -272,17 +275,11 @@
 int varlink_connect_address(Varlink **ret, const char *address) {
         _cleanup_(varlink_unrefp) Varlink *v = NULL;
         union sockaddr_union sockaddr;
-        socklen_t sockaddr_len;
         int r;
 
         assert_return(ret, -EINVAL);
         assert_return(address, -EINVAL);
 
-        r = sockaddr_un_set_path(&sockaddr.un, address);
-        if (r < 0)
-                return log_debug_errno(r, "Failed to set socket address '%s': %m", address);
-        sockaddr_len = r;
-
         r = varlink_new(&v);
         if (r < 0)
                 return log_debug_errno(r, "Failed to create varlink object: %m");
@@ -293,9 +290,21 @@
 
         v->fd = fd_move_above_stdio(v->fd);
 
-        if (connect(v->fd, &sockaddr.sa, sockaddr_len) < 0) {
-                if (!IN_SET(errno, EAGAIN, EINPROGRESS))
-                        return log_debug_errno(errno, "Failed to connect to %s: %m", address);
+        r = sockaddr_un_set_path(&sockaddr.un, address);
+        if (r < 0) {
+                if (r != -ENAMETOOLONG)
+                        return log_debug_errno(r, "Failed to set socket address '%s': %m", address);
+
+                /* This is a file system path, and too long to fit into sockaddr_un. Let's connect via O_PATH
+                 * to this socket. */
+
+                r = connect_unix_path(v->fd, AT_FDCWD, address);
+        } else
+                r = RET_NERRNO(connect(v->fd, &sockaddr.sa, r));
+
+        if (r < 0) {
+                if (!IN_SET(r, -EAGAIN, -EINPROGRESS))
+                        return log_debug_errno(r, "Failed to connect to %s: %m", address);
 
                 v->connecting = true; /* We are asynchronously connecting, i.e. the connect() is being
                                        * processed in the background. As long as that's the case the socket
@@ -414,7 +423,7 @@
         /* Similar, if are a client that hasn't written anything yet but the write side is dead, also
          * disconnect. We also explicitly check for POLLHUP here since we likely won't notice the write side
          * being down if we never wrote anything. */
-        if (IN_SET(v->state, VARLINK_IDLE_CLIENT) && (v->write_disconnected || v->got_pollhup))
+        if (v->state == VARLINK_IDLE_CLIENT && (v->write_disconnected || v->got_pollhup))
                 goto disconnect;
 
         /* We are on the server side and still want to send out more replies, but we saw POLLHUP already, and
@@ -906,7 +915,7 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected state");
+                assert_not_reached();
 
         }
 
@@ -1016,7 +1025,7 @@
                 if ((revents & (POLLOUT|POLLHUP)) == 0)
                         return;
 
-                varlink_log(v, "Anynchronous connection completed.");
+                varlink_log(v, "Asynchronous connection completed.");
                 v->connecting = false;
         } else {
                 /* Note that we don't care much about POLLIN/POLLOUT here, we'll just try reading and writing
@@ -1066,6 +1075,9 @@
                 return events;
 
         r = fd_wait_for_event(fd, events, t);
+        if (r < 0 && ERRNO_IS_TRANSIENT(r)) /* Treat EINTR as not a timeout, but also nothing happened, and
+                                             * the caller gets a chance to call back into us */
+                return 1;
         if (r <= 0)
                 return r;
 
@@ -1152,8 +1164,12 @@
                 }
 
                 r = fd_wait_for_event(v->fd, POLLOUT, USEC_INFINITY);
-                if (r < 0)
+                if (r < 0) {
+                        if (ERRNO_IS_TRANSIENT(r))
+                                continue;
+
                         return varlink_log_errno(v, r, "Poll failed on fd: %m");
+                }
 
                 assert(r != 0);
 
@@ -1457,7 +1473,7 @@
 
         if (v->state == VARLINK_DISCONNECTED)
                 return varlink_log_errno(v, SYNTHETIC_ERRNO(ENOTCONN), "Not connected.");
-        if (!IN_SET(v->state, VARLINK_IDLE_CLIENT))
+        if (v->state != VARLINK_IDLE_CLIENT)
                 return varlink_log_errno(v, SYNTHETIC_ERRNO(EBUSY), "Connection busy.");
 
         assert(v->n_pending == 0); /* n_pending can't be > 0 if we are in VARLINK_IDLE_CLIENT state */
@@ -1522,7 +1538,7 @@
                 return varlink_log_errno(v, SYNTHETIC_ERRNO(ETIME), "Connection timed out.");
 
         default:
-                assert_not_reached("Unexpected state after method call.");
+                assert_not_reached();
         }
 }
 
@@ -1661,6 +1677,7 @@
 }
 
 int varlink_error_invalid_parameter(Varlink *v, JsonVariant *parameters) {
+        int r;
 
         assert_return(v, -EINVAL);
         assert_return(parameters, -EINVAL);
@@ -1670,13 +1687,33 @@
          * variant in which case we'll pull out the first key. The latter mode is useful in functions that
          * don't expect any arguments. */
 
-        if (json_variant_is_string(parameters))
-                return varlink_error(v, VARLINK_ERROR_INVALID_PARAMETER, parameters);
+        /* varlink_error(...) expects a json object as the third parameter. Passing a string variant causes
+         * parameter sanitization to fail, and it returns -EINVAL. */
+
+        if (json_variant_is_string(parameters)) {
+                _cleanup_(json_variant_unrefp) JsonVariant *parameters_obj = NULL;
+
+                r = json_build(&parameters_obj,
+                                JSON_BUILD_OBJECT(
+                                        JSON_BUILD_PAIR("parameter", JSON_BUILD_VARIANT(parameters))));
+                if (r < 0)
+                        return r;
+
+                return varlink_error(v, VARLINK_ERROR_INVALID_PARAMETER, parameters_obj);
+        }
 
         if (json_variant_is_object(parameters) &&
-            json_variant_elements(parameters) > 0)
-                return varlink_error(v, VARLINK_ERROR_INVALID_PARAMETER,
-                                     json_variant_by_index(parameters, 0));
+            json_variant_elements(parameters) > 0) {
+                _cleanup_(json_variant_unrefp) JsonVariant *parameters_obj = NULL;
+
+                r = json_build(&parameters_obj,
+                                JSON_BUILD_OBJECT(
+                                        JSON_BUILD_PAIR("parameter", JSON_BUILD_VARIANT(json_variant_by_index(parameters, 0)))));
+                if (r < 0)
+                        return r;
+
+                return varlink_error(v, VARLINK_ERROR_INVALID_PARAMETER, parameters_obj);
+        }
 
         return -EINVAL;
 }
@@ -1833,10 +1870,9 @@
 }
 
 static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Varlink *v = userdata;
+        Varlink *v = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(v);
 
         handle_revents(v, revents);
         (void) varlink_process(v);
@@ -1845,33 +1881,30 @@
 }
 
 static int time_callback(sd_event_source *s, uint64_t usec, void *userdata) {
-        Varlink *v = userdata;
+        Varlink *v = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(v);
 
         (void) varlink_process(v);
         return 1;
 }
 
 static int defer_callback(sd_event_source *s, void *userdata) {
-        Varlink *v = userdata;
+        Varlink *v = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(v);
 
         (void) varlink_process(v);
         return 1;
 }
 
 static int prepare_callback(sd_event_source *s, void *userdata) {
-        Varlink *v = userdata;
+        Varlink *v = ASSERT_PTR(userdata);
         int r, e;
         usec_t until;
         bool have_timeout;
 
         assert(s);
-        assert(v);
 
         e = varlink_get_events(v);
         if (e < 0)
@@ -1900,10 +1933,9 @@
 }
 
 static int quit_callback(sd_event_source *event, void *userdata) {
-        Varlink *v = userdata;
+        Varlink *v = ASSERT_PTR(userdata);
 
         assert(event);
-        assert(v);
 
         varlink_flush(v);
         varlink_close(v);
@@ -2078,7 +2110,7 @@
         return 1;
 }
 
-static int count_connection(VarlinkServer *server, struct ucred *ucred) {
+static int count_connection(VarlinkServer *server, const struct ucred *ucred) {
         unsigned c;
         int r;
 
@@ -2107,8 +2139,8 @@
 
 int varlink_server_add_connection(VarlinkServer *server, int fd, Varlink **ret) {
         _cleanup_(varlink_unrefp) Varlink *v = NULL;
+        struct ucred ucred = UCRED_INVALID;
         bool ucred_acquired;
-        struct ucred ucred;
         int r;
 
         assert_return(server, -EINVAL);
@@ -2146,7 +2178,9 @@
                 v->ucred_acquired = true;
         }
 
-        (void) asprintf(&v->description, "%s-%i", server->description ?: "varlink", v->fd);
+        _cleanup_free_ char *desc = NULL;
+        if (asprintf(&desc, "%s-%i", server->description ?: "varlink", v->fd) >= 0)
+                v->description = TAKE_PTR(desc);
 
         /* Link up the server and the connection, and take reference in both directions. Note that the
          * reference on the connection is left dangling. It will be dropped when the connection is closed,
@@ -2160,7 +2194,7 @@
                 r = varlink_attach_event(v, server->event, server->event_priority);
                 if (r < 0) {
                         varlink_log_errno(v, r, "Failed to attach new connection: %m");
-                        v->fd = -1; /* take the fd out of the connection again */
+                        v->fd = -EBADF; /* take the fd out of the connection again */
                         varlink_close(v);
                         return r;
                 }
@@ -2172,14 +2206,23 @@
         return 0;
 }
 
+static VarlinkServerSocket *varlink_server_socket_free(VarlinkServerSocket *ss) {
+        if (!ss)
+                return NULL;
+
+        free(ss->address);
+        return mfree(ss);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(VarlinkServerSocket *, varlink_server_socket_free);
+
 static int connect_callback(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        VarlinkServerSocket *ss = userdata;
-        _cleanup_close_ int cfd = -1;
+        VarlinkServerSocket *ss = ASSERT_PTR(userdata);
+        _cleanup_close_ int cfd = -EBADF;
         Varlink *v = NULL;
         int r;
 
         assert(source);
-        assert(ss);
 
         varlink_server_log(ss->server, "New incoming connection.");
 
@@ -2209,12 +2252,13 @@
         return 0;
 }
 
-int varlink_server_listen_fd(VarlinkServer *s, int fd) {
-        _cleanup_free_ VarlinkServerSocket *ss = NULL;
+static int varlink_server_create_listen_fd_socket(VarlinkServer *s, int fd, VarlinkServerSocket **ret_ss) {
+        _cleanup_(varlink_server_socket_freep) VarlinkServerSocket *ss = NULL;
         int r;
 
-        assert_return(s, -EINVAL);
-        assert_return(fd >= 0, -EBADF);
+        assert(s);
+        assert(fd >= 0);
+        assert(ret_ss);
 
         r = fd_nonblock(fd, true);
         if (r < 0)
@@ -2239,14 +2283,30 @@
                         return r;
         }
 
+        *ret_ss = TAKE_PTR(ss);
+        return 0;
+}
+
+int varlink_server_listen_fd(VarlinkServer *s, int fd) {
+        _cleanup_(varlink_server_socket_freep) VarlinkServerSocket *ss = NULL;
+        int r;
+
+        assert_return(s, -EINVAL);
+        assert_return(fd >= 0, -EBADF);
+
+        r = varlink_server_create_listen_fd_socket(s, fd, &ss);
+        if (r < 0)
+                return r;
+
         LIST_PREPEND(sockets, s->sockets, TAKE_PTR(ss));
         return 0;
 }
 
 int varlink_server_listen_address(VarlinkServer *s, const char *address, mode_t m) {
+        _cleanup_(varlink_server_socket_freep) VarlinkServerSocket *ss = NULL;
         union sockaddr_union sockaddr;
         socklen_t sockaddr_len;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert_return(s, -EINVAL);
@@ -2266,7 +2326,7 @@
 
         (void) sockaddr_un_unlink(&sockaddr.un);
 
-        RUN_WITH_UMASK(~m & 0777) {
+        WITH_UMASK(~m & 0777) {
                 r = mac_selinux_bind(fd, &sockaddr.sa, sockaddr_len);
                 if (r < 0)
                         return r;
@@ -2275,10 +2335,15 @@
         if (listen(fd, SOMAXCONN) < 0)
                 return -errno;
 
-        r = varlink_server_listen_fd(s, fd);
+        r = varlink_server_create_listen_fd_socket(s, fd, &ss);
         if (r < 0)
                 return r;
 
+        r = free_and_strdup(&ss->address, address);
+        if (r < 0)
+                return r;
+
+        LIST_PREPEND(sockets, s->sockets, TAKE_PTR(ss));
         TAKE_FD(fd);
         return 0;
 }
@@ -2324,8 +2389,30 @@
         return 0;
 }
 
+static int varlink_server_add_socket_event_source(VarlinkServer *s, VarlinkServerSocket *ss, int64_t priority) {
+        _cleanup_(sd_event_source_unrefp) sd_event_source *es = NULL;
+
+        int r;
+
+        assert(s);
+        assert(s->event);
+        assert(ss);
+        assert(ss->fd >= 0);
+        assert(!ss->event_source);
+
+        r = sd_event_add_io(s->event, &es, ss->fd, EPOLLIN, connect_callback, ss);
+        if (r < 0)
+                return r;
+
+        r = sd_event_source_set_priority(es, priority);
+        if (r < 0)
+                return r;
+
+        ss->event_source = TAKE_PTR(es);
+        return 0;
+}
+
 int varlink_server_attach_event(VarlinkServer *s, sd_event *e, int64_t priority) {
-        VarlinkServerSocket *ss;
         int r;
 
         assert_return(s, -EINVAL);
@@ -2340,13 +2427,7 @@
         }
 
         LIST_FOREACH(sockets, ss, s->sockets) {
-                assert(!ss->event_source);
-
-                r = sd_event_add_io(s->event, &ss->event_source, ss->fd, EPOLLIN, connect_callback, ss);
-                if (r < 0)
-                        goto fail;
-
-                r = sd_event_source_set_priority(ss->event_source, priority);
+                r = varlink_server_add_socket_event_source(s, ss, priority);
                 if (r < 0)
                         goto fail;
         }
@@ -2360,8 +2441,6 @@
 }
 
 int varlink_server_detach_event(VarlinkServer *s) {
-        VarlinkServerSocket *ss;
-
         assert_return(s, -EINVAL);
 
         LIST_FOREACH(sockets, ss, s->sockets)
@@ -2507,3 +2586,84 @@
 
         return free_and_strdup(&s->description, description);
 }
+
+int varlink_server_serialize(VarlinkServer *s, FILE *f, FDSet *fds) {
+        assert(f);
+        assert(fds);
+
+        if (!s)
+                return 0;
+
+        LIST_FOREACH(sockets, ss, s->sockets) {
+                int copy;
+
+                assert(ss->address);
+                assert(ss->fd >= 0);
+
+                fprintf(f, "varlink-server-socket-address=%s", ss->address);
+
+                /* If we fail to serialize the fd, it will be considered an error during deserialization */
+                copy = fdset_put_dup(fds, ss->fd);
+                if (copy < 0)
+                        return copy;
+
+                fprintf(f, " varlink-server-socket-fd=%i", copy);
+
+                fputc('\n', f);
+        }
+
+        return 0;
+}
+
+int varlink_server_deserialize_one(VarlinkServer *s, const char *value, FDSet *fds) {
+        _cleanup_(varlink_server_socket_freep) VarlinkServerSocket *ss = NULL;
+        _cleanup_free_ char *address = NULL;
+        const char *v = ASSERT_PTR(value);
+        int r, fd = -EBADF;
+        char *buf;
+        size_t n;
+
+        assert(s);
+        assert(fds);
+
+        n = strcspn(v, " ");
+        address = strndup(v, n);
+        if (!address)
+                return log_oom_debug();
+
+        if (v[n] != ' ')
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Failed to deserialize VarlinkServerSocket: %s: %m", value);
+        v = startswith(v + n + 1, "varlink-server-socket-fd=");
+        if (!v)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Failed to deserialize VarlinkServerSocket fd %s: %m", value);
+
+        n = strcspn(v, " ");
+        buf = strndupa_safe(v, n);
+
+        r = safe_atoi(buf, &fd);
+        if (r < 0)
+                return log_debug_errno(r, "Unable to parse VarlinkServerSocket varlink-server-socket-fd=%s: %m", buf);
+
+        if (!fdset_contains(fds, fd))
+                return log_debug_errno(SYNTHETIC_ERRNO(EBADF),
+                                       "VarlinkServerSocket varlink-server-socket-fd= has unknown fd %d: %m", fd);
+
+        ss = new(VarlinkServerSocket, 1);
+        if (!ss)
+                return log_oom_debug();
+
+        *ss = (VarlinkServerSocket) {
+                .server = s,
+                .address = TAKE_PTR(address),
+                .fd = fdset_remove(fds, fd),
+        };
+
+        r = varlink_server_add_socket_event_source(s, ss, SD_EVENT_PRIORITY_NORMAL);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to add VarlinkServerSocket event source to the event loop: %m");
+
+        LIST_PREPEND(sockets, s->sockets, TAKE_PTR(ss));
+        return 0;
+}
diff --git a/src/shared/varlink.h b/src/shared/varlink.h
index 66a1ff6..9518cd9 100644
--- a/src/shared/varlink.h
+++ b/src/shared/varlink.h
@@ -173,3 +173,4 @@
 #define VARLINK_ERROR_METHOD_NOT_IMPLEMENTED "org.varlink.service.MethodNotImplemented"
 #define VARLINK_ERROR_INVALID_PARAMETER "org.varlink.service.InvalidParameter"
 #define VARLINK_ERROR_SUBSCRIPTION_TAKEN "org.varlink.service.SubscriptionTaken"
+#define VARLINK_ERROR_PERMISSION_DENIED "org.varlink.service.PermissionDenied"
diff --git a/src/shared/verb-log-control.c b/src/shared/verb-log-control.c
new file mode 100644
index 0000000..555fb9f
--- /dev/null
+++ b/src/shared/verb-log-control.c
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "bus-error.h"
+#include "log.h"
+#include "strv.h"
+#include "syslog-util.h"
+#include "verb-log-control.h"
+
+int verb_log_control_common(sd_bus *bus, const char *destination, const char *verb, const char *value) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        bool level = endswith(verb, "log-level");
+        const BusLocator bloc = {
+                .destination = destination,
+                .path = "/org/freedesktop/LogControl1",
+                .interface = "org.freedesktop.LogControl1",
+        };
+        int r;
+
+        assert(bus);
+        assert(endswith(verb, "log-level") || endswith(verb, "log-target"));
+
+        if (value) {
+                if (level) {
+                        r = log_level_from_string(value);
+                        if (r < 0)
+                                return log_error_errno(r, "\"%s\" is not a valid log level.", value);
+                }
+
+                r = bus_set_property(bus, &bloc,
+                                     level ? "LogLevel" : "LogTarget",
+                                     &error, "s", value);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set log %s of %s to %s: %s",
+                                               level ? "level" : "target",
+                                               bloc.destination, value, bus_error_message(&error, r));
+        } else {
+                _cleanup_free_ char *t = NULL;
+
+                r = bus_get_property_string(bus, &bloc,
+                                            level ? "LogLevel" : "LogTarget",
+                                            &error, &t);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get log %s of %s: %s",
+                                               level ? "level" : "target",
+                                               bloc.destination, bus_error_message(&error, r));
+                puts(t);
+        }
+
+        return 0;
+}
diff --git a/src/shared/verb-log-control.h b/src/shared/verb-log-control.h
new file mode 100644
index 0000000..b9e7cdd
--- /dev/null
+++ b/src/shared/verb-log-control.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+#include "bus-locator.h"
+
+int verb_log_control_common(sd_bus *bus, const char *destination, const char *verb, const char *value);
diff --git a/src/shared/vlan-util.c b/src/shared/vlan-util.c
index cb43d50..17f2d39 100644
--- a/src/shared/vlan-util.c
+++ b/src/shared/vlan-util.c
@@ -49,11 +49,10 @@
                 const char *rvalue,
                 void *data,
                 void *userdata) {
-        uint16_t *id = data;
+        uint16_t *id = ASSERT_PTR(data);
 
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (streq(rvalue, "none")) {
                 *id = 0;
@@ -76,13 +75,12 @@
                 void *data,
                 void *userdata) {
 
-        uint16_t *id = data;
+        uint16_t *id = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         r = parse_vlanid(rvalue, id);
         if (r == -ERANGE) {
diff --git a/src/shared/watchdog.c b/src/shared/watchdog.c
index 8586a88..4445efb 100644
--- a/src/shared/watchdog.c
+++ b/src/shared/watchdog.c
@@ -7,171 +7,472 @@
 #include <unistd.h>
 #include <linux/watchdog.h>
 
+#include "devnum-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
+#include "fileio.h"
 #include "log.h"
+#include "path-util.h"
 #include "string-util.h"
 #include "time-util.h"
 #include "watchdog.h"
 
-static int watchdog_fd = -1;
+static int watchdog_fd = -EBADF;
 static char *watchdog_device = NULL;
-static usec_t watchdog_timeout = USEC_INFINITY;
+static usec_t watchdog_timeout = 0; /* 0 → close device and USEC_INFINITY → don't change timeout */
+static usec_t watchdog_pretimeout = 0; /* 0 → disable pretimeout and USEC_INFINITY → don't change pretimeout */
 static usec_t watchdog_last_ping = USEC_INFINITY;
+static bool watchdog_supports_pretimeout = false; /* Depends on kernel state that might change at runtime */
+static char *watchdog_pretimeout_governor = NULL;
 
-static int update_timeout(void) {
+/* Starting from kernel version 4.5, the maximum allowable watchdog timeout is
+ * UINT_MAX/1000U seconds (since internal calculations are done in milliseconds
+ * using unsigned integers. However, the kernel's userspace API for the watchdog
+ * uses signed integers for its ioctl parameters (even for timeout values and
+ * bit flags) so this is why we must consider the maximum signed integer value
+ * as well.
+ */
+#define WATCHDOG_TIMEOUT_MAX_SEC (CONST_MIN(UINT_MAX/1000U, (unsigned)INT_MAX))
+
+#define WATCHDOG_GOV_NAME_MAXLEN 20 /* From the kernel watchdog driver */
+
+static int saturated_usec_to_sec(usec_t val) {
+        usec_t t = DIV_ROUND_UP(val, USEC_PER_SEC);
+        return MIN(t, (usec_t) WATCHDOG_TIMEOUT_MAX_SEC); /* Saturate to watchdog max */
+}
+
+static int get_watchdog_sysfs_path(const char *filename, char **ret_path) {
+        struct stat st;
+
         if (watchdog_fd < 0)
-                return 0;
-        if (watchdog_timeout == USEC_INFINITY)
-                return 0;
+                return -EBADF;
 
-        if (watchdog_timeout == 0) {
-                int flags;
+        if (fstat(watchdog_fd, &st))
+                return -errno;
 
-                flags = WDIOS_DISABLECARD;
-                if (ioctl(watchdog_fd, WDIOC_SETOPTIONS, &flags) < 0)
-                        return log_warning_errno(errno, "Failed to disable hardware watchdog: %m");
-        } else {
-                char buf[FORMAT_TIMESPAN_MAX];
-                int sec, flags;
-                usec_t t;
+        if (!S_ISCHR(st.st_mode))
+                return -EBADF;
 
-                t = DIV_ROUND_UP(watchdog_timeout, USEC_PER_SEC);
-                sec = (int) t >= INT_MAX ? INT_MAX : t; /* Saturate */
-                if (ioctl(watchdog_fd, WDIOC_SETTIMEOUT, &sec) < 0)
-                        return log_warning_errno(errno, "Failed to set timeout to %is: %m", sec);
+        if (asprintf(ret_path, "/sys/dev/char/"DEVNUM_FORMAT_STR"/%s", DEVNUM_FORMAT_VAL(st.st_rdev), filename) < 0)
+                return -ENOMEM;
 
-                watchdog_timeout = (usec_t) sec * USEC_PER_SEC;
-                log_info("Set hardware watchdog to %s.", format_timespan(buf, sizeof(buf), watchdog_timeout, 0));
+        return 0;
+}
 
-                flags = WDIOS_ENABLECARD;
-                if (ioctl(watchdog_fd, WDIOC_SETOPTIONS, &flags) < 0) {
-                        /* ENOTTY means the watchdog is always enabled so we're fine */
-                        log_full_errno(ERRNO_IS_NOT_SUPPORTED(errno) ? LOG_DEBUG : LOG_WARNING, errno,
-                                       "Failed to enable hardware watchdog, ignoring: %m");
-                        if (!ERRNO_IS_NOT_SUPPORTED(errno))
-                                return -errno;
-                }
+static int get_pretimeout_governor(char **ret_gov) {
+        _cleanup_free_ char *sys_fn = NULL;
+        int r;
 
-                if (ioctl(watchdog_fd, WDIOC_KEEPALIVE, 0) < 0)
-                        return log_warning_errno(errno, "Failed to ping hardware watchdog: %m");
+        r = get_watchdog_sysfs_path("pretimeout_governor", &sys_fn);
+        if (r < 0)
+                return r;
 
-                watchdog_last_ping = now(clock_boottime_or_monotonic());
+        log_info("Watchdog: reading from %s", sys_fn);
+
+        r = read_virtual_file(sys_fn, WATCHDOG_GOV_NAME_MAXLEN - 1, ret_gov, NULL);
+        if (r < 0)
+                return r;
+
+        delete_trailing_chars(*ret_gov, WHITESPACE);
+
+        return 0;
+}
+
+static int set_pretimeout_governor(const char *governor) {
+        _cleanup_free_ char *sys_fn = NULL;
+        int r;
+
+        if (isempty(governor))
+                return 0; /* Nothing to do */
+
+        r = get_watchdog_sysfs_path("pretimeout_governor", &sys_fn);
+        if (r < 0)
+                return r;
+
+        log_info("Watchdog: setting pretimeout_governor to '%s' via '%s'", governor, sys_fn);
+
+        r = write_string_file(sys_fn,
+                              governor,
+                              WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE);
+        if (r < 0)
+                return log_error_errno(r, "Failed to set pretimeout_governor to '%s': %m", governor);
+
+        return r;
+}
+
+static int watchdog_set_enable(bool enable) {
+        int flags = enable ? WDIOS_ENABLECARD : WDIOS_DISABLECARD;
+
+        assert(watchdog_fd >= 0);
+
+        if (ioctl(watchdog_fd, WDIOC_SETOPTIONS, &flags) < 0) {
+                if (!enable)
+                        return log_warning_errno(errno, "Failed to disable hardware watchdog, ignoring: %m");
+
+                /* ENOTTY means the watchdog is always enabled so we're fine */
+                log_full_errno(ERRNO_IS_NOT_SUPPORTED(errno) ? LOG_DEBUG : LOG_WARNING, errno,
+                               "Failed to enable hardware watchdog, ignoring: %m");
+                if (!ERRNO_IS_NOT_SUPPORTED(errno))
+                        return -errno;
         }
 
         return 0;
 }
 
+static int watchdog_read_timeout(void) {
+        int sec = 0;
+
+        assert(watchdog_fd >= 0);
+
+        if (ioctl(watchdog_fd, WDIOC_GETTIMEOUT, &sec) < 0)
+                return -errno;
+
+        assert(sec > 0);
+        watchdog_timeout = sec * USEC_PER_SEC;
+
+        return 0;
+}
+
+static int watchdog_set_timeout(void) {
+        int sec;
+
+        assert(watchdog_fd >= 0);
+        assert(timestamp_is_set(watchdog_timeout));
+
+        sec = saturated_usec_to_sec(watchdog_timeout);
+
+        if (ioctl(watchdog_fd, WDIOC_SETTIMEOUT, &sec) < 0)
+                return -errno;
+
+        assert(sec > 0); /* buggy driver ? */
+        watchdog_timeout = sec * USEC_PER_SEC;
+
+        return 0;
+}
+
+static int watchdog_read_pretimeout(void) {
+        int sec = 0;
+
+        assert(watchdog_fd >= 0);
+
+        if (ioctl(watchdog_fd, WDIOC_GETPRETIMEOUT, &sec) < 0) {
+                watchdog_pretimeout = 0;
+                return log_full_errno(ERRNO_IS_NOT_SUPPORTED(errno) ? LOG_DEBUG : LOG_WARNING, errno, "Failed to get pretimeout value, ignoring: %m");
+        }
+
+        watchdog_pretimeout = sec * USEC_PER_SEC;
+
+        return 0;
+}
+
+static int watchdog_set_pretimeout(void) {
+        int sec;
+
+        assert(watchdog_fd >= 0);
+        assert(watchdog_pretimeout != USEC_INFINITY);
+
+        sec = saturated_usec_to_sec(watchdog_pretimeout);
+
+        if (ioctl(watchdog_fd, WDIOC_SETPRETIMEOUT, &sec) < 0) {
+                watchdog_pretimeout = 0;
+
+                if (ERRNO_IS_NOT_SUPPORTED(errno)) {
+                        log_info("Watchdog does not support pretimeouts.");
+                        return 0;
+                }
+
+                return log_error_errno(errno, "Failed to set pretimeout to %s: %m", FORMAT_TIMESPAN(sec, USEC_PER_SEC));
+        }
+
+        /* The set ioctl does not return the actual value set so get it now. */
+        (void) watchdog_read_pretimeout();
+
+        return 0;
+}
+
+usec_t watchdog_get_last_ping(clockid_t clock) {
+        return map_clock_usec(watchdog_last_ping, CLOCK_BOOTTIME, clock);
+}
+
+static int watchdog_ping_now(void) {
+        assert(watchdog_fd >= 0);
+
+        if (ioctl(watchdog_fd, WDIOC_KEEPALIVE, 0) < 0)
+                return log_warning_errno(errno, "Failed to ping hardware watchdog, ignoring: %m");
+
+        watchdog_last_ping = now(CLOCK_BOOTTIME);
+
+        return 0;
+}
+
+static int update_pretimeout(void) {
+        _cleanup_free_ char *governor = NULL;
+        int r, t_sec, pt_sec;
+
+        if (watchdog_fd < 0)
+                return 0;
+
+        if (watchdog_timeout == USEC_INFINITY || watchdog_pretimeout == USEC_INFINITY)
+                return 0;
+
+        if (!watchdog_supports_pretimeout && watchdog_pretimeout == 0)
+                return 0; /* Nothing to do */
+
+        /* The configuration changed, do not assume it can still work, as the module(s)
+         * might have been unloaded. */
+        watchdog_supports_pretimeout = false;
+
+        /* Update the pretimeout governor as well */
+        (void) set_pretimeout_governor(watchdog_pretimeout_governor);
+
+        r = get_pretimeout_governor(&governor);
+        if (r < 0)
+                return log_warning_errno(r, "Watchdog: failed to read pretimeout governor: %m");
+        if (isempty(governor))
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "Watchdog: no pretimeout governor detected - is the required kernel module loaded?");
+
+        /* If we have a pretimeout governor, then pretimeout is supported. Without a governor
+         * pretimeout does not work at all.
+         * Note that this might require a kernel module that is not autoloaded, so we don't
+         * cache this, but we check every time the configuration changes. */
+        watchdog_supports_pretimeout = true;
+
+        /* Determine if the pretimeout is valid for the current watchdog timeout. */
+        t_sec = saturated_usec_to_sec(watchdog_timeout);
+        pt_sec = saturated_usec_to_sec(watchdog_pretimeout);
+        if (pt_sec >= t_sec) {
+                r = log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                    "Cannot set watchdog pretimeout to %is (%s watchdog timeout of %is)",
+                                    pt_sec, pt_sec == t_sec ? "same as" : "longer than", t_sec);
+                (void) watchdog_read_pretimeout();
+        } else
+                r = watchdog_set_pretimeout();
+
+        if (watchdog_pretimeout == 0)
+                log_info("Watchdog pretimeout is disabled.");
+        else
+                log_info("Watchdog running with a pretimeout of %s with governor '%s'.",
+                         FORMAT_TIMESPAN(watchdog_pretimeout, 0),
+                         governor);
+
+        return r;
+}
+
+static int update_timeout(void) {
+        int r;
+
+        assert(watchdog_timeout > 0);
+
+        if (watchdog_fd < 0)
+                return 0;
+
+        if (watchdog_timeout != USEC_INFINITY) {
+                r = watchdog_set_timeout();
+                if (r < 0) {
+                        if (!ERRNO_IS_NOT_SUPPORTED(r))
+                                return log_error_errno(r, "Failed to set timeout to %s: %m",
+                                                       FORMAT_TIMESPAN(watchdog_timeout, 0));
+
+                        log_info("Modifying watchdog timeout is not supported, reusing the programmed timeout.");
+                        watchdog_timeout = USEC_INFINITY;
+                }
+        }
+
+        if (watchdog_timeout == USEC_INFINITY) {
+                r = watchdog_read_timeout();
+                if (r < 0)
+                        return log_error_errno(r, "Failed to query watchdog HW timeout: %m");
+        }
+
+        /* If the watchdog timeout was changed, the pretimeout could have been
+         * changed as well by the driver or the kernel so we need to update the
+         * pretimeout now. Or if the watchdog is being configured for the first
+         * time, we want to configure the pretimeout before it is enabled. */
+        (void) update_pretimeout();
+
+        r = watchdog_set_enable(true);
+        if (r < 0)
+                return r;
+
+        log_info("Watchdog running with a timeout of %s.", FORMAT_TIMESPAN(watchdog_timeout, 0));
+
+        return watchdog_ping_now();
+}
+
 static int open_watchdog(void) {
         struct watchdog_info ident;
-        const char *fn;
+        char **try_order;
+        int r;
 
         if (watchdog_fd >= 0)
                 return 0;
 
-        fn = watchdog_device ?: "/dev/watchdog";
-        watchdog_fd = open(fn, O_WRONLY|O_CLOEXEC);
+        /* Let's prefer new-style /dev/watchdog0 (i.e. kernel 3.5+) over classic /dev/watchdog. The former
+         * has the benefit that we can easily find the matching directory in sysfs from it, as the relevant
+         * sysfs attributes can only be found via /sys/dev/char/<major>:<minor> if the new-style device
+         * major/minor is used, not the old-style. */
+        try_order = !watchdog_device || PATH_IN_SET(watchdog_device, "/dev/watchdog", "/dev/watchdog0") ?
+                STRV_MAKE("/dev/watchdog0", "/dev/watchdog") : STRV_MAKE(watchdog_device);
+
+        STRV_FOREACH(wd, try_order) {
+                watchdog_fd = open(*wd, O_WRONLY|O_CLOEXEC);
+                if (watchdog_fd >= 0) {
+                        r = free_and_strdup(&watchdog_device, *wd);
+                        if (r < 0)
+                                return log_oom_debug();
+
+                        break;
+                }
+
+                if (errno != ENOENT)
+                        return log_debug_errno(errno, "Failed to open watchdog device %s: %m", *wd);
+        }
+
         if (watchdog_fd < 0)
-                return log_debug_errno(errno, "Failed to open watchdog device %s: %m", fn);
+                return log_debug_errno(SYNTHETIC_ERRNO(ENOENT), "Failed to open watchdog device %s: %m", watchdog_device ?: "auto");
 
         if (ioctl(watchdog_fd, WDIOC_GETSUPPORT, &ident) < 0)
-                log_debug_errno(errno, "Hardware watchdog %s does not support WDIOC_GETSUPPORT ioctl: %m", fn);
+                log_debug_errno(errno, "Hardware watchdog %s does not support WDIOC_GETSUPPORT ioctl, ignoring: %m", watchdog_device);
         else
                 log_info("Using hardware watchdog '%s', version %x, device %s",
                          ident.identity,
                          ident.firmware_version,
-                         fn);
+                         watchdog_device);
 
-        return update_timeout();
+        r = update_timeout();
+        if (r < 0)
+                watchdog_close(true);
+
+        return r;
 }
 
-int watchdog_set_device(char *path) {
+const char *watchdog_get_device(void) {
+        return watchdog_device;
+}
+
+int watchdog_set_device(const char *path) {
         int r;
 
         r = free_and_strdup(&watchdog_device, path);
-        if (r < 0)
-                return r;
-
         if (r > 0) /* watchdog_device changed */
                 watchdog_fd = safe_close(watchdog_fd);
 
         return r;
 }
 
-int watchdog_set_timeout(usec_t *usec) {
+int watchdog_setup(usec_t timeout) {
+        usec_t previous_timeout;
         int r;
 
-        watchdog_timeout = *usec;
+        /* timeout=0 closes the device whereas passing timeout=USEC_INFINITY opens it (if needed)
+         * without configuring any particular timeout and thus reuses the programmed value (therefore
+         * it's a nop if the device is already opened). */
 
-        /* If we didn't open the watchdog yet and didn't get any explicit timeout value set, don't do
-         * anything */
-        if (watchdog_fd < 0 && watchdog_timeout == USEC_INFINITY)
+        if (timeout == 0) {
+                watchdog_close(true);
+                return 0;
+        }
+
+        /* Let's shortcut duplicated requests */
+        if (watchdog_fd >= 0 && (timeout == watchdog_timeout || timeout == USEC_INFINITY))
                 return 0;
 
-        if (watchdog_fd < 0)
-                r = open_watchdog();
-        else
-                r = update_timeout();
+        /* Initialize the watchdog timeout with the caller value. This value is going to be updated by
+         * update_timeout() with the closest value supported by the driver */
+        previous_timeout = watchdog_timeout;
+        watchdog_timeout = timeout;
 
-        *usec = watchdog_timeout;
+        if (watchdog_fd < 0)
+                return open_watchdog();
+
+        r = update_timeout();
+        if (r < 0)
+                watchdog_timeout = previous_timeout;
+
         return r;
 }
 
-usec_t watchdog_runtime_wait(void) {
-        usec_t rtwait, ntime;
+int watchdog_setup_pretimeout(usec_t timeout) {
+        /* timeout=0 disables the pretimeout whereas timeout=USEC_INFINITY is a nop. */
+        if ((watchdog_fd >= 0 && timeout == watchdog_pretimeout) || timeout == USEC_INFINITY)
+                return 0;
 
-        if (!timestamp_is_set(watchdog_timeout))
+        /* Initialize the watchdog timeout with the caller value. This value is
+         * going to be updated by update_pretimeout() with the running value,
+         * even if it fails to update the timeout. */
+        watchdog_pretimeout = timeout;
+
+        return update_pretimeout();
+}
+
+int watchdog_setup_pretimeout_governor(const char *governor) {
+        if (free_and_strdup(&watchdog_pretimeout_governor, governor) < 0)
+                return -ENOMEM;
+
+        return set_pretimeout_governor(watchdog_pretimeout_governor);
+}
+
+static usec_t calc_timeout(void) {
+        /* Calculate the effective timeout which accounts for the watchdog
+         * pretimeout if configured and supported. */
+        if (watchdog_supports_pretimeout && timestamp_is_set(watchdog_pretimeout) && watchdog_timeout >= watchdog_pretimeout)
+                return watchdog_timeout - watchdog_pretimeout;
+        else
+                return watchdog_timeout;
+}
+
+usec_t watchdog_runtime_wait(void) {
+        usec_t timeout = calc_timeout();
+        if (!timestamp_is_set(timeout))
                 return USEC_INFINITY;
 
         /* Sleep half the watchdog timeout since the last successful ping at most */
         if (timestamp_is_set(watchdog_last_ping)) {
-                ntime = now(clock_boottime_or_monotonic());
-                assert(ntime >= watchdog_last_ping);
-                rtwait = usec_sub_unsigned(watchdog_last_ping + (watchdog_timeout / 2), ntime);
-        } else
-                rtwait = watchdog_timeout / 2;
+                usec_t ntime = now(CLOCK_BOOTTIME);
 
-        return rtwait;
+                assert(ntime >= watchdog_last_ping);
+                return usec_sub_unsigned(watchdog_last_ping + (timeout / 2), ntime);
+        }
+
+        return timeout / 2;
 }
 
 int watchdog_ping(void) {
-        usec_t ntime;
-        int r;
+        usec_t ntime, timeout;
 
-        ntime = now(clock_boottime_or_monotonic());
+        if (watchdog_timeout == 0)
+                return 0;
+
+        if (watchdog_fd < 0)
+                /* open_watchdog() will automatically ping the device for us if necessary */
+                return open_watchdog();
+
+        ntime = now(CLOCK_BOOTTIME);
+        timeout = calc_timeout();
 
         /* Never ping earlier than watchdog_timeout/4 and try to ping
-         * by watchdog_timeout/2 plus scheduling latencies the latest */
+         * by watchdog_timeout/2 plus scheduling latencies at the latest */
         if (timestamp_is_set(watchdog_last_ping)) {
                 assert(ntime >= watchdog_last_ping);
-                if ((ntime - watchdog_last_ping) < (watchdog_timeout / 4))
+                if ((ntime - watchdog_last_ping) < (timeout / 4))
                         return 0;
         }
 
-        if (watchdog_fd < 0) {
-                r = open_watchdog();
-                if (r < 0)
-                        return r;
-        }
-
-        if (ioctl(watchdog_fd, WDIOC_KEEPALIVE, 0) < 0)
-                return log_warning_errno(errno, "Failed to ping hardware watchdog: %m");
-
-        watchdog_last_ping = ntime;
-        return 0;
+        return watchdog_ping_now();
 }
 
 void watchdog_close(bool disarm) {
+
+        /* Once closed, pinging the device becomes a NOP and we request a new
+         * call to watchdog_setup() to open the device again. */
+        watchdog_timeout = 0;
+
         if (watchdog_fd < 0)
                 return;
 
         if (disarm) {
-                int flags;
-
-                /* Explicitly disarm it */
-                flags = WDIOS_DISABLECARD;
-                if (ioctl(watchdog_fd, WDIOC_SETOPTIONS, &flags) < 0)
-                        log_warning_errno(errno, "Failed to disable hardware watchdog: %m");
+                (void) watchdog_set_enable(false);
 
                 /* To be sure, use magic close logic, too */
                 for (;;) {
@@ -181,7 +482,7 @@
                                 break;
 
                         if (errno != EINTR) {
-                                log_error_errno(errno, "Failed to disarm watchdog timer: %m");
+                                log_warning_errno(errno, "Failed to disarm watchdog timer, ignoring: %m");
                                 break;
                         }
                 }
diff --git a/src/shared/watchdog.h b/src/shared/watchdog.h
index b7587db..a490183 100644
--- a/src/shared/watchdog.h
+++ b/src/shared/watchdog.h
@@ -4,10 +4,14 @@
 #include <stdbool.h>
 
 #include "time-util.h"
-#include "util.h"
 
-int watchdog_set_device(char *path);
-int watchdog_set_timeout(usec_t *usec);
+const char *watchdog_get_device(void);
+usec_t watchdog_get_last_ping(clockid_t clock);
+
+int watchdog_set_device(const char *path);
+int watchdog_setup(usec_t timeout);
+int watchdog_setup_pretimeout(usec_t usec);
+int watchdog_setup_pretimeout_governor(const char *governor);
 int watchdog_ping(void);
 void watchdog_close(bool disarm);
 usec_t watchdog_runtime_wait(void);
diff --git a/src/shared/web-util.c b/src/shared/web-util.c
index 82cd5fb..39a300f 100644
--- a/src/shared/web-util.c
+++ b/src/shared/web-util.c
@@ -36,16 +36,29 @@
         return ascii_is_valid(p);
 }
 
+bool file_url_is_valid(const char *url) {
+        const char *p;
+
+        if (isempty(url))
+                return false;
+
+        p = startswith(url, "file:/");
+        if (isempty(p))
+                return false;
+
+        return ascii_is_valid(p);
+}
+
 bool documentation_url_is_valid(const char *url) {
         const char *p;
 
         if (isempty(url))
                 return false;
 
-        if (http_url_is_valid(url))
+        if (http_url_is_valid(url) || file_url_is_valid(url))
                 return true;
 
-        p = STARTSWITH_SET(url, "file:/", "info:", "man:");
+        p = STARTSWITH_SET(url, "info:", "man:");
         if (isempty(p))
                 return false;
 
diff --git a/src/shared/web-util.h b/src/shared/web-util.h
index ec54669..88b4897 100644
--- a/src/shared/web-util.h
+++ b/src/shared/web-util.h
@@ -6,6 +6,7 @@
 #include "macro.h"
 
 bool http_url_is_valid(const char *url) _pure_;
+bool file_url_is_valid(const char *url) _pure_;
 
 bool documentation_url_is_valid(const char *url) _pure_;
 
diff --git a/src/shared/wifi-util.c b/src/shared/wifi-util.c
index b05e1aa..d4e6dca 100644
--- a/src/shared/wifi-util.c
+++ b/src/shared/wifi-util.c
@@ -1,17 +1,22 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "log.h"
+#include "string-table.h"
+#include "string-util.h"
 #include "wifi-util.h"
 
-int wifi_get_interface(sd_netlink *genl, int ifindex, enum nl80211_iftype *iftype, char **ssid) {
+int wifi_get_interface(sd_netlink *genl, int ifindex, enum nl80211_iftype *ret_iftype, char **ret_ssid) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *reply = NULL;
-        sd_genl_family_t family;
+        _cleanup_free_ char *ssid = NULL;
+        const char *family;
+        uint32_t iftype;
+        size_t len;
         int r;
 
         assert(genl);
         assert(ifindex > 0);
 
-        r = sd_genl_message_new(genl, SD_GENL_NL80211, NL80211_CMD_GET_INTERFACE, &m);
+        r = sd_genl_message_new(genl, NL80211_GENL_NAME, NL80211_CMD_GET_INTERFACE, &m);
         if (r < 0)
                 return log_debug_errno(r, "Failed to create generic netlink message: %m");
 
@@ -38,51 +43,57 @@
         if (r < 0)
                 return log_debug_errno(r, "Failed to get information about wifi interface %d: %m", ifindex);
 
-        r = sd_genl_message_get_family(genl, reply, &family);
+        r = sd_genl_message_get_family_name(genl, reply, &family);
         if (r < 0)
                 return log_debug_errno(r, "Failed to determine genl family: %m");
-        if (family != SD_GENL_NL80211) {
-                log_debug("Received message of unexpected genl family %" PRIi64 ", ignoring.", family);
+        if (!streq(family, NL80211_GENL_NAME)) {
+                log_debug("Received message of unexpected genl family '%s', ignoring.", family);
                 goto nodata;
         }
 
-        if (iftype) {
-                uint32_t t;
+        r = sd_netlink_message_read_u32(reply, NL80211_ATTR_IFTYPE, &iftype);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to get NL80211_ATTR_IFTYPE attribute: %m");
 
-                r = sd_netlink_message_read_u32(reply, NL80211_ATTR_IFTYPE, &t);
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to get NL80211_ATTR_IFTYPE attribute: %m");
-                *iftype = t;
+        r = sd_netlink_message_read_data_suffix0(reply, NL80211_ATTR_SSID, &len, (void**) &ssid);
+        if (r < 0 && r != -ENODATA)
+                return log_debug_errno(r, "Failed to get NL80211_ATTR_SSID attribute: %m");
+        if (r >= 0) {
+                if (len == 0) {
+                        log_debug("SSID has zero length, ignoring it.");
+                        ssid = mfree(ssid);
+                } else if (strlen_ptr(ssid) != len) {
+                        log_debug("SSID contains NUL characters, ignoring it.");
+                        ssid = mfree(ssid);
+                }
         }
 
-        if (ssid) {
-                r = sd_netlink_message_read_string_strdup(reply, NL80211_ATTR_SSID, ssid);
-                if (r == -ENODATA)
-                        *ssid = NULL;
-                else if (r < 0)
-                        return log_debug_errno(r, "Failed to get NL80211_ATTR_SSID attribute: %m");
-        }
+        if (ret_iftype)
+                *ret_iftype = iftype;
+
+        if (ret_ssid)
+                *ret_ssid = TAKE_PTR(ssid);
 
         return 1;
 
 nodata:
-        if (iftype)
-                *iftype = 0;
-        if (ssid)
-                *ssid = NULL;
+        if (ret_iftype)
+                *ret_iftype = 0;
+        if (ret_ssid)
+                *ret_ssid = NULL;
         return 0;
 }
 
-int wifi_get_station(sd_netlink *genl, int ifindex, struct ether_addr *bssid) {
+int wifi_get_station(sd_netlink *genl, int ifindex, struct ether_addr *ret_bssid) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *reply = NULL;
-        sd_genl_family_t family;
+        const char *family;
         int r;
 
         assert(genl);
         assert(ifindex > 0);
-        assert(bssid);
+        assert(ret_bssid);
 
-        r = sd_genl_message_new(genl, SD_GENL_NL80211, NL80211_CMD_GET_STATION, &m);
+        r = sd_genl_message_new(genl, NL80211_GENL_NAME, NL80211_CMD_GET_STATION, &m);
         if (r < 0)
                 return log_debug_errno(r, "Failed to create generic netlink message: %m");
 
@@ -106,15 +117,15 @@
         if (r < 0)
                 return log_debug_errno(r, "Failed to get information about wifi station: %m");
 
-        r = sd_genl_message_get_family(genl, reply, &family);
+        r = sd_genl_message_get_family_name(genl, reply, &family);
         if (r < 0)
                 return log_debug_errno(r, "Failed to determine genl family: %m");
-        if (family != SD_GENL_NL80211) {
-                log_debug("Received message of unexpected genl family %" PRIi64 ", ignoring.", family);
+        if (!streq(family, NL80211_GENL_NAME)) {
+                log_debug("Received message of unexpected genl family '%s', ignoring.", family);
                 goto nodata;
         }
 
-        r = sd_netlink_message_read_ether_addr(reply, NL80211_ATTR_MAC, bssid);
+        r = sd_netlink_message_read_ether_addr(reply, NL80211_ATTR_MAC, ret_bssid);
         if (r == -ENODATA)
                 goto nodata;
         if (r < 0)
@@ -123,6 +134,173 @@
         return 1;
 
 nodata:
-        *bssid = (struct ether_addr) {};
+        *ret_bssid = ETHER_ADDR_NULL;
         return 0;
 }
+
+static const char * const nl80211_iftype_table[NUM_NL80211_IFTYPES] = {
+        [NL80211_IFTYPE_ADHOC]      = "ad-hoc",
+        [NL80211_IFTYPE_STATION]    = "station",
+        [NL80211_IFTYPE_AP]         = "ap",
+        [NL80211_IFTYPE_AP_VLAN]    = "ap-vlan",
+        [NL80211_IFTYPE_WDS]        = "wds",
+        [NL80211_IFTYPE_MONITOR]    = "monitor",
+        [NL80211_IFTYPE_MESH_POINT] = "mesh-point",
+        [NL80211_IFTYPE_P2P_CLIENT] = "p2p-client",
+        [NL80211_IFTYPE_P2P_GO]     = "p2p-go",
+        [NL80211_IFTYPE_P2P_DEVICE] = "p2p-device",
+        [NL80211_IFTYPE_OCB]        = "ocb",
+        [NL80211_IFTYPE_NAN]        = "nan",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(nl80211_iftype, enum nl80211_iftype);
+
+static const char * const nl80211_cmd_table[__NL80211_CMD_AFTER_LAST] = {
+        [NL80211_CMD_GET_WIPHY] = "get_wiphy",
+        [NL80211_CMD_SET_WIPHY] = "set_wiphy",
+        [NL80211_CMD_NEW_WIPHY] = "new_wiphy",
+        [NL80211_CMD_DEL_WIPHY] = "del_wiphy",
+        [NL80211_CMD_GET_INTERFACE] = "get_interface",
+        [NL80211_CMD_SET_INTERFACE] = "set_interface",
+        [NL80211_CMD_NEW_INTERFACE] = "new_interface",
+        [NL80211_CMD_DEL_INTERFACE] = "del_interface",
+        [NL80211_CMD_GET_KEY] = "get_key",
+        [NL80211_CMD_SET_KEY] = "set_key",
+        [NL80211_CMD_NEW_KEY] = "new_key",
+        [NL80211_CMD_DEL_KEY] = "del_key",
+        [NL80211_CMD_GET_BEACON] = "get_beacon",
+        [NL80211_CMD_SET_BEACON] = "set_beacon",
+        [NL80211_CMD_START_AP] = "start_ap",
+        [NL80211_CMD_STOP_AP] = "stop_ap",
+        [NL80211_CMD_GET_STATION] = "get_station",
+        [NL80211_CMD_SET_STATION] = "set_station",
+        [NL80211_CMD_NEW_STATION] = "new_station",
+        [NL80211_CMD_DEL_STATION] = "del_station",
+        [NL80211_CMD_GET_MPATH] = "get_mpath",
+        [NL80211_CMD_SET_MPATH] = "set_mpath",
+        [NL80211_CMD_NEW_MPATH] = "new_mpath",
+        [NL80211_CMD_DEL_MPATH] = "del_mpath",
+        [NL80211_CMD_SET_BSS] = "set_bss",
+        [NL80211_CMD_SET_REG] = "set_reg",
+        [NL80211_CMD_REQ_SET_REG] = "req_set_reg",
+        [NL80211_CMD_GET_MESH_CONFIG] = "get_mesh_config",
+        [NL80211_CMD_SET_MESH_CONFIG] = "set_mesh_config",
+        [NL80211_CMD_SET_MGMT_EXTRA_IE] = "set_mgmt_extra_ie",
+        [NL80211_CMD_GET_REG] = "get_reg",
+        [NL80211_CMD_GET_SCAN] = "get_scan",
+        [NL80211_CMD_TRIGGER_SCAN] = "trigger_scan",
+        [NL80211_CMD_NEW_SCAN_RESULTS] = "new_scan_results",
+        [NL80211_CMD_SCAN_ABORTED] = "scan_aborted",
+        [NL80211_CMD_REG_CHANGE] = "reg_change",
+        [NL80211_CMD_AUTHENTICATE] = "authenticate",
+        [NL80211_CMD_ASSOCIATE] = "associate",
+        [NL80211_CMD_DEAUTHENTICATE] = "deauthenticate",
+        [NL80211_CMD_DISASSOCIATE] = "disassociate",
+        [NL80211_CMD_MICHAEL_MIC_FAILURE] = "michael_mic_failure",
+        [NL80211_CMD_REG_BEACON_HINT] = "reg_beacon_hint",
+        [NL80211_CMD_JOIN_IBSS] = "join_ibss",
+        [NL80211_CMD_LEAVE_IBSS] = "leave_ibss",
+        [NL80211_CMD_TESTMODE] = "testmode",
+        [NL80211_CMD_CONNECT] = "connect",
+        [NL80211_CMD_ROAM] = "roam",
+        [NL80211_CMD_DISCONNECT] = "disconnect",
+        [NL80211_CMD_SET_WIPHY_NETNS] = "set_wiphy_netns",
+        [NL80211_CMD_GET_SURVEY] = "get_survey",
+        [NL80211_CMD_NEW_SURVEY_RESULTS] = "new_survey_results",
+        [NL80211_CMD_SET_PMKSA] = "set_pmksa",
+        [NL80211_CMD_DEL_PMKSA] = "del_pmksa",
+        [NL80211_CMD_FLUSH_PMKSA] = "flush_pmksa",
+        [NL80211_CMD_REMAIN_ON_CHANNEL] = "remain_on_channel",
+        [NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL] = "cancel_remain_on_channel",
+        [NL80211_CMD_SET_TX_BITRATE_MASK] = "set_tx_bitrate_mask",
+        [NL80211_CMD_REGISTER_FRAME] = "register_frame",
+        [NL80211_CMD_FRAME] = "frame",
+        [NL80211_CMD_FRAME_TX_STATUS] = "frame_tx_status",
+        [NL80211_CMD_SET_POWER_SAVE] = "set_power_save",
+        [NL80211_CMD_GET_POWER_SAVE] = "get_power_save",
+        [NL80211_CMD_SET_CQM] = "set_cqm",
+        [NL80211_CMD_NOTIFY_CQM] = "notify_cqm",
+        [NL80211_CMD_SET_CHANNEL] = "set_channel",
+        [NL80211_CMD_SET_WDS_PEER] = "set_wds_peer",
+        [NL80211_CMD_FRAME_WAIT_CANCEL] = "frame_wait_cancel",
+        [NL80211_CMD_JOIN_MESH] = "join_mesh",
+        [NL80211_CMD_LEAVE_MESH] = "leave_mesh",
+        [NL80211_CMD_UNPROT_DEAUTHENTICATE] = "unprot_deauthenticate",
+        [NL80211_CMD_UNPROT_DISASSOCIATE] = "unprot_disassociate",
+        [NL80211_CMD_NEW_PEER_CANDIDATE] = "new_peer_candidate",
+        [NL80211_CMD_GET_WOWLAN] = "get_wowlan",
+        [NL80211_CMD_SET_WOWLAN] = "set_wowlan",
+        [NL80211_CMD_START_SCHED_SCAN] = "start_sched_scan",
+        [NL80211_CMD_STOP_SCHED_SCAN] = "stop_sched_scan",
+        [NL80211_CMD_SCHED_SCAN_RESULTS] = "sched_scan_results",
+        [NL80211_CMD_SCHED_SCAN_STOPPED] = "sched_scan_stopped",
+        [NL80211_CMD_SET_REKEY_OFFLOAD] = "set_rekey_offload",
+        [NL80211_CMD_PMKSA_CANDIDATE] = "pmksa_candidate",
+        [NL80211_CMD_TDLS_OPER] = "tdls_oper",
+        [NL80211_CMD_TDLS_MGMT] = "tdls_mgmt",
+        [NL80211_CMD_UNEXPECTED_FRAME] = "unexpected_frame",
+        [NL80211_CMD_PROBE_CLIENT] = "probe_client",
+        [NL80211_CMD_REGISTER_BEACONS] = "register_beacons",
+        [NL80211_CMD_UNEXPECTED_4ADDR_FRAME] = "unexpected_4addr_frame",
+        [NL80211_CMD_SET_NOACK_MAP] = "set_noack_map",
+        [NL80211_CMD_CH_SWITCH_NOTIFY] = "ch_switch_notify",
+        [NL80211_CMD_START_P2P_DEVICE] = "start_p2p_device",
+        [NL80211_CMD_STOP_P2P_DEVICE] = "stop_p2p_device",
+        [NL80211_CMD_CONN_FAILED] = "conn_failed",
+        [NL80211_CMD_SET_MCAST_RATE] = "set_mcast_rate",
+        [NL80211_CMD_SET_MAC_ACL] = "set_mac_acl",
+        [NL80211_CMD_RADAR_DETECT] = "radar_detect",
+        [NL80211_CMD_GET_PROTOCOL_FEATURES] = "get_protocol_features",
+        [NL80211_CMD_UPDATE_FT_IES] = "update_ft_ies",
+        [NL80211_CMD_FT_EVENT] = "ft_event",
+        [NL80211_CMD_CRIT_PROTOCOL_START] = "crit_protocol_start",
+        [NL80211_CMD_CRIT_PROTOCOL_STOP] = "crit_protocol_stop",
+        [NL80211_CMD_GET_COALESCE] = "get_coalesce",
+        [NL80211_CMD_SET_COALESCE] = "set_coalesce",
+        [NL80211_CMD_CHANNEL_SWITCH] = "channel_switch",
+        [NL80211_CMD_VENDOR] = "vendor",
+        [NL80211_CMD_SET_QOS_MAP] = "set_qos_map",
+        [NL80211_CMD_ADD_TX_TS] = "add_tx_ts",
+        [NL80211_CMD_DEL_TX_TS] = "del_tx_ts",
+        [NL80211_CMD_GET_MPP] = "get_mpp",
+        [NL80211_CMD_JOIN_OCB] = "join_ocb",
+        [NL80211_CMD_LEAVE_OCB] = "leave_ocb",
+        [NL80211_CMD_CH_SWITCH_STARTED_NOTIFY] = "ch_switch_started_notify",
+        [NL80211_CMD_TDLS_CHANNEL_SWITCH] = "tdls_channel_switch",
+        [NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH] = "tdls_cancel_channel_switch",
+        [NL80211_CMD_WIPHY_REG_CHANGE] = "wiphy_reg_change",
+        [NL80211_CMD_ABORT_SCAN] = "abort_scan",
+        [NL80211_CMD_START_NAN] = "start_nan",
+        [NL80211_CMD_STOP_NAN] = "stop_nan",
+        [NL80211_CMD_ADD_NAN_FUNCTION] = "add_nan_function",
+        [NL80211_CMD_DEL_NAN_FUNCTION] = "del_nan_function",
+        [NL80211_CMD_CHANGE_NAN_CONFIG] = "change_nan_config",
+        [NL80211_CMD_NAN_MATCH] = "nan_match",
+        [NL80211_CMD_SET_MULTICAST_TO_UNICAST] = "set_multicast_to_unicast",
+        [NL80211_CMD_UPDATE_CONNECT_PARAMS] = "update_connect_params",
+        [NL80211_CMD_SET_PMK] = "set_pmk",
+        [NL80211_CMD_DEL_PMK] = "del_pmk",
+        [NL80211_CMD_PORT_AUTHORIZED] = "port_authorized",
+        [NL80211_CMD_RELOAD_REGDB] = "reload_regdb",
+        [NL80211_CMD_EXTERNAL_AUTH] = "external_auth",
+        [NL80211_CMD_STA_OPMODE_CHANGED] = "sta_opmode_changed",
+        [NL80211_CMD_CONTROL_PORT_FRAME] = "control_port_frame",
+        [NL80211_CMD_GET_FTM_RESPONDER_STATS] = "get_ftm_responder_stats",
+        [NL80211_CMD_PEER_MEASUREMENT_START] = "peer_measurement_start",
+        [NL80211_CMD_PEER_MEASUREMENT_RESULT] = "peer_measurement_result",
+        [NL80211_CMD_PEER_MEASUREMENT_COMPLETE] = "peer_measurement_complete",
+        [NL80211_CMD_NOTIFY_RADAR] = "notify_radar",
+        [NL80211_CMD_UPDATE_OWE_INFO] = "update_owe_info",
+        [NL80211_CMD_PROBE_MESH_LINK] = "probe_mesh_link",
+        [NL80211_CMD_SET_TID_CONFIG] = "set_tid_config",
+        [NL80211_CMD_UNPROT_BEACON] = "unprot_beacon",
+        [NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS] = "control_port_frame_tx_status",
+        [NL80211_CMD_SET_SAR_SPECS] = "set_sar_specs",
+        [NL80211_CMD_OBSS_COLOR_COLLISION] = "obss_color_collision",
+        [NL80211_CMD_COLOR_CHANGE_REQUEST] = "color_change_request",
+        [NL80211_CMD_COLOR_CHANGE_STARTED] = "color_change_started",
+        [NL80211_CMD_COLOR_CHANGE_ABORTED] = "color_change_aborted",
+        [NL80211_CMD_COLOR_CHANGE_COMPLETED] = "color_change_completed",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_TO_STRING(nl80211_cmd, int);
diff --git a/src/shared/wifi-util.h b/src/shared/wifi-util.h
index 0ce4137..a762fbc 100644
--- a/src/shared/wifi-util.h
+++ b/src/shared/wifi-util.h
@@ -3,9 +3,14 @@
 #pragma once
 
 #include <linux/nl80211.h>
-#include <net/ethernet.h>
 
 #include "sd-netlink.h"
 
-int wifi_get_interface(sd_netlink *genl, int ifindex, enum nl80211_iftype *iftype, char **ssid);
-int wifi_get_station(sd_netlink *genl, int ifindex, struct ether_addr *bssid);
+#include "ether-addr-util.h"
+
+int wifi_get_interface(sd_netlink *genl, int ifindex, enum nl80211_iftype *ret_iftype, char **ret_ssid);
+int wifi_get_station(sd_netlink *genl, int ifindex, struct ether_addr *ret_bssid);
+
+const char *nl80211_iftype_to_string(enum nl80211_iftype iftype) _const_;
+enum nl80211_iftype nl80211_iftype_from_string(const char *s) _pure_;
+const char *nl80211_cmd_to_string(int cmd) _const_;
diff --git a/src/shared/xml.c b/src/shared/xml.c
index 8ff3fea..df381d8 100644
--- a/src/shared/xml.c
+++ b/src/shared/xml.c
@@ -233,5 +233,5 @@
 
         }
 
-        assert_not_reached("Bad state");
+        assert_not_reached();
 }
diff --git a/src/shutdown/meson.build b/src/shutdown/meson.build
index e1348d9..d62032a 100644
--- a/src/shutdown/meson.build
+++ b/src/shutdown/meson.build
@@ -1,15 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_shutdown_sources = files('''
-        shutdown.c
-        umount.c
-        umount.h
-'''.split())
+systemd_shutdown_sources = files(
+        'shutdown.c',
+        'umount.c',
+)
 
 tests += [
-        [['src/shutdown/test-umount.c',
-          'src/shutdown/umount.c',
-          'src/shutdown/umount.h'],
+        [files('test-umount.c',
+               'umount.c'),
          [],
          [libmount]],
 ]
diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c
index a98cfc4..42111d2 100644
--- a/src/shutdown/shutdown.c
+++ b/src/shutdown/shutdown.c
@@ -19,10 +19,13 @@
 #include "binfmt-util.h"
 #include "cgroup-setup.h"
 #include "cgroup-util.h"
-#include "def.h"
+#include "coredump-util.h"
+#include "constants.h"
+#include "errno-util.h"
 #include "exec-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "initrd-util.h"
 #include "killall.h"
 #include "log.h"
 #include "parse-util.h"
@@ -35,7 +38,6 @@
 #include "sysctl-util.h"
 #include "terminal-util.h"
 #include "umount.h"
-#include "util.h"
 #include "virt.h"
 #include "watchdog.h"
 
@@ -149,7 +151,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option code.");
+                        assert_not_reached();
                 }
 
         if (!arg_verb)
@@ -307,12 +309,37 @@
                 log_debug_errno(r, "Failed to bump kernel.printk to %i: %m", min_level + 1);
 }
 
+static void init_watchdog(void) {
+        const char *s;
+        int r;
+
+        s = getenv("WATCHDOG_DEVICE");
+        if (s) {
+                r = watchdog_set_device(s);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to set watchdog device to %s, ignoring: %m", s);
+        }
+
+        s = getenv("WATCHDOG_USEC");
+        if (s) {
+                usec_t usec;
+
+                r = safe_atou64(s, &usec);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse watchdog timeout '%s', ignoring: %m", s);
+                else
+                        (void) watchdog_setup(usec);
+        }
+}
+
 int main(int argc, char *argv[]) {
-        bool need_umount, need_swapoff, need_loop_detach, need_dm_detach, need_md_detach, in_container, use_watchdog = false, can_initrd;
+        static const char* const dirs[] = {
+                SYSTEM_SHUTDOWN_PATH,
+                NULL
+        };
         _cleanup_free_ char *cgroup = NULL;
-        char *arguments[3], *watchdog_device;
-        int cmd, r, umount_log_level = LOG_INFO;
-        static const char* const dirs[] = {SYSTEM_SHUTDOWN_PATH, NULL};
+        char *arguments[3];
+        int cmd, r;
 
         /* The log target defaults to console, but the original systemd process will pass its log target in through a
          * command line argument, which will override this default. Also, ensure we'll never log to the journal or
@@ -334,8 +361,7 @@
         umask(0022);
 
         if (getpid_cached() != 1) {
-                log_error("Not executed by init (PID 1).");
-                r = -EPERM;
+                r = log_error_errno(SYNTHETIC_ERRNO(EPERM), "Not executed by init (PID 1).");
                 goto error;
         }
 
@@ -350,13 +376,12 @@
         else if (streq(arg_verb, "exit"))
                 cmd = 0; /* ignored, just checking that arg_verb is valid */
         else {
-                log_error("Unknown action '%s'.", arg_verb);
-                r = -EINVAL;
+                r = log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown action '%s'.", arg_verb);
                 goto error;
         }
 
         (void) cg_get_root_path(&cgroup);
-        in_container = detect_container() > 0;
+        bool in_container = detect_container() > 0;
 
         /* If the logging messages are going to KMSG, and if we are not running from a container, then try to
          * update the sysctl kernel.printk current value in order to see "info" messages; This current log
@@ -370,18 +395,16 @@
                    LOG_TARGET_KMSG))
                 bump_sysctl_printk_log_level(LOG_WARNING);
 
-        use_watchdog = getenv("WATCHDOG_USEC");
-        watchdog_device = getenv("WATCHDOG_DEVICE");
-        if (watchdog_device) {
-                r = watchdog_set_device(watchdog_device);
-                if (r < 0)
-                        log_warning_errno(r, "Failed to set watchdog device to %s, ignoring: %m",
-                                          watchdog_device);
-        }
+        init_watchdog();
 
         /* Lock us into memory */
         (void) mlockall(MCL_CURRENT|MCL_FUTURE);
 
+        /* We need to make mounts private so that we can MS_MOVE in unmount_all(). Kernel does not allow
+         * MS_MOVE when parent mountpoints have shared propagation. */
+        if (mount(NULL, "/", NULL, MS_REC|MS_PRIVATE, NULL) < 0)
+                log_warning_errno(errno, "Failed to make mounts private, ignoring: %m");
+
         /* Synchronize everything that is not written to disk yet at this point already. This is a good idea so that
          * slow IO is processed here already and the final process killing spree is not impacted by processes
          * desperately trying to sync IO to disk within their timeout. Do not remove this sync, data corruption will
@@ -398,30 +421,24 @@
         log_info("Sending SIGKILL to remaining processes...");
         broadcast_signal(SIGKILL, true, false, arg_timeout);
 
-        need_umount = !in_container;
-        need_swapoff = !in_container;
-        need_loop_detach = !in_container;
-        need_dm_detach = !in_container;
-        need_md_detach = !in_container;
+        bool need_umount = !in_container, need_swapoff = !in_container, need_loop_detach = !in_container,
+             need_dm_detach = !in_container, need_md_detach = !in_container, can_initrd, last_try = false;
         can_initrd = !in_container && !in_initrd() && access("/run/initramfs/shutdown", X_OK) == 0;
 
         /* Unmount all mountpoints, swaps, and loopback devices */
         for (;;) {
                 bool changed = false;
 
-                if (use_watchdog)
-                        (void) watchdog_ping();
+                (void) watchdog_ping();
 
-                /* Let's trim the cgroup tree on each iteration so
-                   that we leave an empty cgroup tree around, so that
-                   container managers get a nice notify event when we
-                   are down */
+                /* Let's trim the cgroup tree on each iteration so that we leave an empty cgroup tree around,
+                 * so that container managers get a nice notify event when we are down */
                 if (cgroup)
                         (void) cg_trim(SYSTEMD_CGROUP_CONTROLLER, cgroup, false);
 
                 if (need_umount) {
                         log_info("Unmounting file systems.");
-                        r = umount_all(&changed, umount_log_level);
+                        r = umount_all(&changed, last_try);
                         if (r == 0) {
                                 need_umount = false;
                                 log_info("All filesystems unmounted.");
@@ -445,7 +462,7 @@
 
                 if (need_loop_detach) {
                         log_info("Detaching loop devices.");
-                        r = loopback_detach_all(&changed, umount_log_level);
+                        r = loopback_detach_all(&changed, last_try);
                         if (r == 0) {
                                 need_loop_detach = false;
                                 log_info("All loop devices detached.");
@@ -457,7 +474,7 @@
 
                 if (need_md_detach) {
                         log_info("Stopping MD devices.");
-                        r = md_detach_all(&changed, umount_log_level);
+                        r = md_detach_all(&changed, last_try);
                         if (r == 0) {
                                 need_md_detach = false;
                                 log_info("All MD devices stopped.");
@@ -469,7 +486,7 @@
 
                 if (need_dm_detach) {
                         log_info("Detaching DM devices.");
-                        r = dm_detach_all(&changed, umount_log_level);
+                        r = dm_detach_all(&changed, last_try);
                         if (r == 0) {
                                 need_dm_detach = false;
                                 log_info("All DM devices detached.");
@@ -486,18 +503,16 @@
                         break;
                 }
 
-                if (!changed && umount_log_level == LOG_INFO && !can_initrd) {
-                        /* There are things we cannot get rid of. Loop one more time
-                         * with LOG_ERR to inform the user. Note that we don't need
-                         * to do this if there is an initrd to switch to, because that
-                         * one is likely to get rid of the remaining mounts. If not,
-                         * it will log about them. */
-                        umount_log_level = LOG_ERR;
+                if (!changed && !last_try && !can_initrd) {
+                        /* There are things we cannot get rid of. Loop one more time in which we will log
+                         * with higher priority to inform the user. Note that we don't need to do this if
+                         * there is an initrd to switch to, because that one is likely to get rid of the
+                         * remaining mounts. If not, it will log about them. */
+                        last_try = true;
                         continue;
                 }
 
-                /* If in this iteration we didn't manage to
-                 * unmount/deactivate anything, we simply give up */
+                /* If in this iteration we didn't manage to unmount/deactivate anything, we simply give up */
                 if (!changed) {
                         log_info("Cannot finalize remaining%s%s%s%s%s continuing.",
                                  need_umount ? " file systems," : "",
@@ -516,10 +531,11 @@
                           need_md_detach ? " MD devices," : "");
         }
 
-        /* We're done with the watchdog. */
+        /* We're done with the watchdog. Note that the watchdog is explicitly not stopped here. It remains
+         * active to guard against any issues during the rest of the shutdown sequence. */
         watchdog_free_device();
 
-        arguments[0] = NULL;
+        arguments[0] = NULL; /* Filled in by execute_directories(), when needed */
         arguments[1] = arg_verb;
         arguments[2] = NULL;
         (void) execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, arguments, NULL, EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS);
@@ -551,10 +567,11 @@
                           need_dm_detach ? " DM devices," : "",
                           need_md_detach ? " MD devices," : "");
 
-        /* The kernel will automatically flush ATA disks and suchlike on reboot(), but the file systems need to be
-         * sync'ed explicitly in advance. So let's do this here, but not needlessly slow down containers. Note that we
-         * sync'ed things already once above, but we did some more work since then which might have caused IO, hence
-         * let's do it once more. Do not remove this sync, data corruption will result. */
+        /* The kernel will automatically flush ATA disks and suchlike on reboot(), but the file systems need
+         * to be sync'ed explicitly in advance. So let's do this here, but not needlessly slow down
+         * containers. Note that we sync'ed things already once above, but we did some more work since then
+         * which might have caused IO, hence let's do it once more. Do not remove this sync, data corruption
+         * will result. */
         if (!in_container)
                 sync_with_progress();
 
@@ -584,6 +601,7 @@
                                 /* Child */
 
                                 execv(args[0], (char * const *) args);
+                                log_debug_errno(errno, "Failed to execute '" KEXEC "' binary, proceeding with reboot(RB_KEXEC): %m");
 
                                 /* execv failed (kexec binary missing?), so try simply reboot(RB_KEXEC) */
                                 (void) reboot(cmd);
@@ -610,13 +628,12 @@
                 break;
 
         default:
-                assert_not_reached("Unknown magic");
+                assert_not_reached();
         }
 
         (void) reboot(cmd);
-        if (errno == EPERM && in_container) {
-                /* If we are in a container, and we lacked
-                 * CAP_SYS_BOOT just exit, this will kill our
+        if (ERRNO_IS_PRIVILEGE(errno) && in_container) {
+                /* If we are in a container, and we lacked CAP_SYS_BOOT just exit, this will kill our
                  * container for good. */
                 log_info("Exiting container.");
                 return EXIT_SUCCESS;
diff --git a/src/shutdown/test-umount.c b/src/shutdown/test-umount.c
index 676c6dd..80ec9b6 100644
--- a/src/shutdown/test-umount.c
+++ b/src/shutdown/test-umount.c
@@ -7,12 +7,10 @@
 #include "string-util.h"
 #include "tests.h"
 #include "umount.h"
-#include "util.h"
 
-static void test_mount_points_list(const char *fname) {
+static void test_mount_points_list_one(const char *fname) {
         _cleanup_(mount_points_list_free) LIST_HEAD(MountPoint, mp_list_head);
         _cleanup_free_ char *testdata_fname = NULL;
-        MountPoint *m;
 
         log_info("/* %s(\"%s\") */", __func__, fname ?: "/proc/self/mountinfo");
 
@@ -33,10 +31,16 @@
                           major(m->devnum), minor(m->devnum));
 }
 
-static void test_swap_list(const char *fname) {
+TEST(mount_points_list) {
+        test_mount_points_list_one(NULL);
+        test_mount_points_list_one("/test-umount/empty.mountinfo");
+        test_mount_points_list_one("/test-umount/garbled.mountinfo");
+        test_mount_points_list_one("/test-umount/rhbug-1554943.mountinfo");
+}
+
+static void test_swap_list_one(const char *fname) {
         _cleanup_(mount_points_list_free) LIST_HEAD(MountPoint, mp_list_head);
         _cleanup_free_ char *testdata_fname = NULL;
-        MountPoint *m;
         int r;
 
         log_info("/* %s(\"%s\") */", __func__, fname ?: "/proc/swaps");
@@ -61,14 +65,9 @@
                           major(m->devnum), minor(m->devnum));
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_mount_points_list(NULL);
-        test_mount_points_list("/test-umount/empty.mountinfo");
-        test_mount_points_list("/test-umount/garbled.mountinfo");
-        test_mount_points_list("/test-umount/rhbug-1554943.mountinfo");
-
-        test_swap_list(NULL);
-        test_swap_list("/test-umount/example.swaps");
+TEST(swap_list) {
+        test_swap_list_one(NULL);
+        test_swap_list_one("/test-umount/example.swaps");
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/shutdown/umount.c b/src/shutdown/umount.c
index 1f945b7..61bd9d2 100644
--- a/src/shutdown/umount.c
+++ b/src/shutdown/umount.c
@@ -23,23 +23,30 @@
 
 #include "alloc-util.h"
 #include "blockdev-util.h"
-#include "def.h"
+#include "chase-symlinks.h"
+#include "constants.h"
 #include "device-util.h"
+#include "dirent-util.h"
 #include "escape.h"
 #include "fd-util.h"
+#include "fileio.h"
 #include "fs-util.h"
 #include "fstab-util.h"
 #include "libmount-util.h"
+#include "mkdir.h"
 #include "mount-setup.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
+#include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
+#include "random-util.h"
 #include "signal-util.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "umount.h"
-#include "util.h"
 #include "virt.h"
 
 static void mount_point_free(MountPoint **head, MountPoint *m) {
@@ -72,16 +79,15 @@
                 return log_error_errno(r, "Failed to parse %s: %m", mountinfo ?: "/proc/self/mountinfo");
 
         for (;;) {
+                _cleanup_free_ char *options = NULL, *remount_options = NULL;
                 struct libmnt_fs *fs;
                 const char *path, *fstype;
-                _cleanup_free_ char *options = NULL;
                 unsigned long remount_flags = 0u;
-                _cleanup_free_ char *remount_options = NULL;
-                bool try_remount_ro;
+                bool try_remount_ro, is_api_vfs;
                 _cleanup_free_ MountPoint *m = NULL;
 
                 r = mnt_table_next_fs(table, iter, &fs);
-                if (r == 1)
+                if (r == 1) /* EOF */
                         break;
                 if (r < 0)
                         return log_error_errno(r, "Failed to get next entry from %s: %m", mountinfo ?: "/proc/self/mountinfo");
@@ -92,52 +98,45 @@
 
                 fstype = mnt_fs_get_fstype(fs);
 
-                /* Combine the generic VFS options with the FS-specific
-                 * options. Duplicates are not a problem here, because the only
-                 * options that should come up twice are typically ro/rw, which
-                 * are turned into MS_RDONLY or the inversion of it.
+                /* Combine the generic VFS options with the FS-specific options. Duplicates are not a problem
+                 * here, because the only options that should come up twice are typically ro/rw, which are
+                 * turned into MS_RDONLY or the inversion of it.
                  *
-                 * Even if there are duplicates later in mount_option_mangle()
-                 * they shouldn't hurt anyways as they override each other.
-                 */
+                 * Even if there are duplicates later in mount_option_mangle() they shouldn't hurt anyways as
+                 * they override each other. */
                 if (!strextend_with_separator(&options, ",", mnt_fs_get_vfs_options(fs)))
                         return log_oom();
                 if (!strextend_with_separator(&options, ",", mnt_fs_get_fs_options(fs)))
                         return log_oom();
 
-                /* Ignore mount points we can't unmount because they
-                 * are API or because we are keeping them open (like
-                 * /dev/console). Also, ignore all mounts below API
-                 * file systems, since they are likely virtual too,
-                 * and hence not worth spending time on. Also, in
-                 * unprivileged containers we might lack the rights to
-                 * unmount these things, hence don't bother. */
+                /* Ignore mount points we can't unmount because they are API or because we are keeping them
+                 * open (like /dev/console). Also, ignore all mounts below API file systems, since they are
+                 * likely virtual too, and hence not worth spending time on. Also, in unprivileged containers
+                 * we might lack the rights to unmount these things, hence don't bother. */
                 if (mount_point_is_api(path) ||
                     mount_point_ignore(path) ||
                     PATH_STARTSWITH_SET(path, "/dev", "/sys", "/proc"))
                         continue;
 
-                /* If we are in a container, don't attempt to
-                 * read-only mount anything as that brings no real
-                 * benefits, but might confuse the host, as we remount
-                 * the superblock here, not the bind mount.
+                is_api_vfs = fstype_is_api_vfs(fstype);
+
+                /* If we are in a container, don't attempt to read-only mount anything as that brings no real
+                 * benefits, but might confuse the host, as we remount the superblock here, not the bind
+                 * mount.
                  *
-                 * If the filesystem is a network fs, also skip the
-                 * remount. It brings no value (we cannot leave
-                 * a "dirty fs") and could hang if the network is down.
-                 * Note that umount2() is more careful and will not
-                 * hang because of the network being down. */
+                 * If the filesystem is a network fs, also skip the remount. It brings no value (we cannot
+                 * leave a "dirty fs") and could hang if the network is down.  Note that umount2() is more
+                 * careful and will not hang because of the network being down. */
                 try_remount_ro = detect_container() <= 0 &&
                                  !fstype_is_network(fstype) &&
-                                 !fstype_is_api_vfs(fstype) &&
+                                 !is_api_vfs &&
                                  !fstype_is_ro(fstype) &&
                                  !fstab_test_yes_no_option(options, "ro\0rw\0");
 
                 if (try_remount_ro) {
-                        /* mount(2) states that mount flags and options need to be exactly the same
-                         * as they were when the filesystem was mounted, except for the desired
-                         * changes. So we reconstruct both here and adjust them for the later
-                         * remount call too. */
+                        /* mount(2) states that mount flags and options need to be exactly the same as they
+                         * were when the filesystem was mounted, except for the desired changes. So we
+                         * reconstruct both here and adjust them for the later remount call too. */
 
                         r = mnt_fs_get_propagation(fs, &remount_flags);
                         if (r < 0) {
@@ -156,17 +155,31 @@
                         remount_flags = (remount_flags|MS_REMOUNT|MS_RDONLY) & ~MS_BIND;
                 }
 
-                m = new0(MountPoint, 1);
+                m = new(MountPoint, 1);
                 if (!m)
                         return log_oom();
 
+                r = libmount_is_leaf(table, fs);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get children mounts for %s from %s: %m", path, mountinfo ?: "/proc/self/mountinfo");
+                bool leaf = r;
+
+                *m = (MountPoint) {
+                        .remount_options = remount_options,
+                        .remount_flags = remount_flags,
+                        .try_remount_ro = try_remount_ro,
+
+                        /* Unmount sysfs/procfs/… lazily, since syncing doesn't matter there, and it's OK if
+                         * something keeps an fd open to it. */
+                        .umount_lazily = is_api_vfs,
+                        .leaf = leaf,
+                };
+
                 m->path = strdup(path);
                 if (!m->path)
                         return log_oom();
 
-                m->remount_options = TAKE_PTR(remount_options);
-                m->remount_flags = remount_flags;
-                m->try_remount_ro = try_remount_ro;
+                TAKE_PTR(remount_options);
 
                 LIST_PREPEND(mount_point, *head, TAKE_PTR(m));
         }
@@ -198,7 +211,7 @@
                 const char *source;
 
                 r = mnt_table_next_fs(t, i, &fs);
-                if (r == 1)
+                if (r == 1) /* EOF */
                         break;
                 if (r < 0)
                         return log_error_errno(r, "Failed to get next entry from %s: %m", swaps ?: "/proc/swaps");
@@ -352,9 +365,14 @@
         if (r < 0)
                 return r;
 
+        /* Filter out partitions. */
+        r = sd_device_enumerator_add_match_property(e, "DEVTYPE", "disk");
+        if (r < 0)
+                return r;
+
         FOREACH_DEVICE(e, d) {
                 _cleanup_free_ char *p = NULL;
-                const char *dn;
+                const char *dn, *md_level;
                 MountPoint *m;
                 dev_t devnum;
 
@@ -362,6 +380,17 @@
                     sd_device_get_devname(d, &dn) < 0)
                         continue;
 
+                r = sd_device_get_property_value(d, "MD_LEVEL", &md_level);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to get MD_LEVEL property for %s, ignoring: %m", dn);
+                        continue;
+                }
+
+                /* MD "containers" are a special type of MD devices, used for external metadata.  Since it
+                 * doesn't provide RAID functionality in itself we don't need to stop it. */
+                if (streq(md_level, "container"))
+                        continue;
+
                 p = strdup(dn);
                 if (!p)
                         return -ENOMEM;
@@ -382,7 +411,7 @@
 }
 
 static int delete_loopback(const char *device) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct loop_info64 info;
 
         assert(device);
@@ -457,7 +486,7 @@
 }
 
 static int delete_dm(MountPoint *m) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         assert(m);
@@ -472,7 +501,7 @@
         if (r < 0)
                 log_debug_errno(r, "Failed to sync DM block device %s, ignoring: %m", m->path);
 
-        if (ioctl(fd, DM_DEV_REMOVE, &(struct dm_ioctl) {
+        return RET_NERRNO(ioctl(fd, DM_DEV_REMOVE, &(struct dm_ioctl) {
                 .version = {
                         DM_VERSION_MAJOR,
                         DM_VERSION_MINOR,
@@ -480,14 +509,11 @@
                 },
                 .data_size = sizeof(struct dm_ioctl),
                 .dev = m->devnum,
-        }) < 0)
-                return -errno;
-
-        return 0;
+        }));
 }
 
 static int delete_md(MountPoint *m) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(m);
         assert(major(m->devnum) != 0);
@@ -500,10 +526,7 @@
         if (fsync(fd) < 0)
                 log_debug_errno(errno, "Failed to sync MD block device %s, ignoring: %m", m->path);
 
-        if (ioctl(fd, STOP_ARRAY, NULL) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(ioctl(fd, STOP_ARRAY, NULL));
 }
 
 static bool nonunmountable_path(const char *path) {
@@ -514,79 +537,180 @@
                 || path_startswith(path, "/run/initramfs");
 }
 
-static int remount_with_timeout(MountPoint *m, int umount_log_level) {
-        pid_t pid;
+static void log_umount_blockers(const char *mnt) {
+        _cleanup_free_ char *blockers = NULL;
+        int r;
+
+        _cleanup_closedir_ DIR *dir = opendir("/proc");
+        if (!dir)
+                return (void) log_warning_errno(errno, "Failed to open /proc/: %m");
+
+        FOREACH_DIRENT_ALL(de, dir, break) {
+                if (!IN_SET(de->d_type, DT_DIR, DT_UNKNOWN))
+                        continue;
+
+                pid_t pid;
+                if (parse_pid(de->d_name, &pid) < 0)
+                        continue;
+
+                _cleanup_free_ char *fdp = path_join(de->d_name, "fd");
+                if (!fdp)
+                        return (void) log_oom();
+
+                _cleanup_closedir_ DIR *fd_dir = xopendirat(dirfd(dir), fdp, 0);
+                if (!fd_dir) {
+                        if (errno != ENOENT) /* process gone by now? */
+                                log_debug_errno(errno, "Failed to open /proc/%s/, ignoring: %m",fdp);
+                        continue;
+                }
+
+                bool culprit = false;
+                FOREACH_DIRENT(fd_de, fd_dir, break) {
+                        _cleanup_free_ char *open_file = NULL;
+
+                        r = readlinkat_malloc(dirfd(fd_dir), fd_de->d_name, &open_file);
+                        if (r < 0) {
+                                if (r != -ENOENT) /* fd closed by now */
+                                        log_debug_errno(r, "Failed to read link /proc/%s/%s, ignoring: %m", fdp, fd_de->d_name);
+                                continue;
+                        }
+
+                        if (path_startswith(open_file, mnt)) {
+                                culprit = true;
+                                break;
+                        }
+                }
+
+                if (!culprit)
+                        continue;
+
+                _cleanup_free_ char *comm = NULL;
+                r = get_process_comm(pid, &comm);
+                if (r < 0) {
+                        if (r != -ESRCH) /* process gone by now */
+                                log_debug_errno(r, "Failed to read process name of PID " PID_FMT ": %m", pid);
+                        continue;
+                }
+
+                if (!strextend_with_separator(&blockers, ", ", comm))
+                        return (void) log_oom();
+
+                if (!strextend(&blockers, "(", de->d_name, ")"))
+                        return (void) log_oom();
+        }
+
+        if (blockers)
+                log_warning("Unmounting '%s' blocked by: %s", mnt, blockers);
+}
+
+static int remount_with_timeout(MountPoint *m, bool last_try) {
+        _cleanup_(close_pairp) int pfd[2] = PIPE_EBADF;
+        _cleanup_(sigkill_nowaitp) pid_t pid = 0;
         int r;
 
         BLOCK_SIGNALS(SIGCHLD);
 
         assert(m);
 
+        r = pipe2(pfd, O_CLOEXEC|O_NONBLOCK);
+        if (r < 0)
+                return r;
+
         /* Due to the possibility of a remount operation hanging, we fork a child process and set a
          * timeout. If the timeout lapses, the assumption is that the particular remount failed. */
-        r = safe_fork("(sd-remount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
+        r = safe_fork_full("(sd-remount)", pfd, ELEMENTSOF(pfd), FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
         if (r < 0)
                 return r;
         if (r == 0) {
-                log_info("Remounting '%s' read-only in with options '%s'.", m->path, m->remount_options);
+                pfd[0] = safe_close(pfd[0]);
+
+                log_info("Remounting '%s' read-only with options '%s'.", m->path, strempty(m->remount_options));
 
                 /* Start the mount operation here in the child */
                 r = mount(NULL, m->path, NULL, m->remount_flags, m->remount_options);
                 if (r < 0)
-                        log_full_errno(umount_log_level, errno, "Failed to remount '%s' read-only: %m", m->path);
+                        log_full_errno(last_try ? LOG_ERR : LOG_INFO,
+                                       errno,
+                                       "Failed to remount '%s' read-only: %m",
+                                       m->path);
 
+                (void) write(pfd[1], &r, sizeof(r)); /* try to send errno up */
                 _exit(r < 0 ? EXIT_FAILURE : EXIT_SUCCESS);
         }
 
+        pfd[1] = safe_close(pfd[1]);
+
         r = wait_for_terminate_with_timeout(pid, DEFAULT_TIMEOUT_USEC);
-        if (r == -ETIMEDOUT) {
+        if (r == -ETIMEDOUT)
                 log_error_errno(r, "Remounting '%s' timed out, issuing SIGKILL to PID " PID_FMT ".", m->path, pid);
-                (void) kill(pid, SIGKILL);
-        } else if (r == -EPROTO)
-                log_debug_errno(r, "Remounting '%s' failed abnormally, child process " PID_FMT " aborted or exited non-zero.", m->path, pid);
-        else if (r < 0)
+        else if (r == -EPROTO) {
+                /* Try to read error code from child */
+                if (read(pfd[0], &r, sizeof(r)) == sizeof(r))
+                        log_debug_errno(r, "Remounting '%s' failed abnormally, child process " PID_FMT " failed: %m", m->path, pid);
+                else
+                        r = log_debug_errno(EPROTO, "Remounting '%s' failed abnormally, child process " PID_FMT " aborted or exited non-zero.", m->path, pid);
+                TAKE_PID(pid); /* child exited (just not as we expected) hence don't kill anymore */
+        } else if (r < 0)
                 log_error_errno(r, "Remounting '%s' failed unexpectedly, couldn't wait for child process " PID_FMT ": %m", m->path, pid);
 
         return r;
 }
 
-static int umount_with_timeout(MountPoint *m, int umount_log_level) {
-        pid_t pid;
+static int umount_with_timeout(MountPoint *m, bool last_try) {
+        _cleanup_(close_pairp) int pfd[2] = PIPE_EBADF;
+        _cleanup_(sigkill_nowaitp) pid_t pid = 0;
         int r;
 
         BLOCK_SIGNALS(SIGCHLD);
 
         assert(m);
 
+        r = pipe2(pfd, O_CLOEXEC|O_NONBLOCK);
+        if (r < 0)
+                return r;
+
         /* Due to the possibility of a umount operation hanging, we fork a child process and set a
          * timeout. If the timeout lapses, the assumption is that the particular umount failed. */
-        r = safe_fork("(sd-umount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
+        r = safe_fork_full("(sd-umount)", pfd, ELEMENTSOF(pfd), FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
         if (r < 0)
                 return r;
         if (r == 0) {
+                pfd[0] = safe_close(pfd[0]);
+
                 log_info("Unmounting '%s'.", m->path);
 
-                /* Start the mount operation here in the child Using MNT_FORCE
-                 * causes some filesystems (e.g. FUSE and NFS and other network
-                 * filesystems) to abort any pending requests and return -EIO
-                 * rather than blocking indefinitely. If the filesysten is
-                 * "busy", this may allow processes to die, thus making the
-                 * filesystem less busy so the unmount might succeed (rather
-                 * than return EBUSY). */
-                r = umount2(m->path, MNT_FORCE);
-                if (r < 0)
-                        log_full_errno(umount_log_level, errno, "Failed to unmount %s: %m", m->path);
+                /* Start the mount operation here in the child Using MNT_FORCE causes some filesystems
+                 * (e.g. FUSE and NFS and other network filesystems) to abort any pending requests and return
+                 * -EIO rather than blocking indefinitely. If the filesysten is "busy", this may allow
+                 * processes to die, thus making the filesystem less busy so the unmount might succeed
+                 * (rather than return EBUSY). */
+                r = RET_NERRNO(umount2(m->path,
+                                       UMOUNT_NOFOLLOW | /* Don't follow symlinks: this should never happen unless our mount list was wrong */
+                                       (m->umount_lazily ? MNT_DETACH : MNT_FORCE)));
+                if (r < 0) {
+                        log_full_errno(last_try ? LOG_ERR : LOG_INFO, r, "Failed to unmount %s: %m", m->path);
 
+                        if (r == -EBUSY && last_try)
+                                log_umount_blockers(m->path);
+                }
+
+                (void) write(pfd[1], &r, sizeof(r)); /* try to send errno up */
                 _exit(r < 0 ? EXIT_FAILURE : EXIT_SUCCESS);
         }
 
+        pfd[1] = safe_close(pfd[1]);
+
         r = wait_for_terminate_with_timeout(pid, DEFAULT_TIMEOUT_USEC);
-        if (r == -ETIMEDOUT) {
+        if (r == -ETIMEDOUT)
                 log_error_errno(r, "Unmounting '%s' timed out, issuing SIGKILL to PID " PID_FMT ".", m->path, pid);
-                (void) kill(pid, SIGKILL);
-        } else if (r == -EPROTO)
-                log_debug_errno(r, "Unmounting '%s' failed abnormally, child process " PID_FMT " aborted or exited non-zero.", m->path, pid);
-        else if (r < 0)
+        else if (r == -EPROTO) {
+                /* Try to read error code from child */
+                if (read(pfd[0], &r, sizeof(r)) == sizeof(r))
+                        log_debug_errno(r, "Unmounting '%s' failed abnormally, child process " PID_FMT " failed: %m", m->path, pid);
+                else
+                        r = log_debug_errno(EPROTO, "Unmounting '%s' failed abnormally, child process " PID_FMT " aborted or exited non-zero.", m->path, pid);
+                TAKE_PID(pid); /* It died, but abnormally, no purpose in killing */
+        } else if (r < 0)
                 log_error_errno(r, "Unmounting '%s' failed unexpectedly, couldn't wait for child process " PID_FMT ": %m", m->path, pid);
 
         return r;
@@ -594,9 +718,9 @@
 
 /* This includes remounting readonly, which changes the kernel mount options.  Therefore the list passed to
  * this function is invalidated, and should not be reused. */
-static int mount_points_list_umount(MountPoint **head, bool *changed, int umount_log_level) {
-        MountPoint *m;
-        int n_failed = 0;
+static int mount_points_list_umount(MountPoint **head, bool *changed, bool last_try) {
+        int n_failed = 0, r;
+        _cleanup_free_ char *resolved_mounts_path = NULL;
 
         assert(head);
         assert(changed);
@@ -615,7 +739,7 @@
                          *
                          * Since the remount can hang in the instance of remote filesystems, we remount
                          * asynchronously and skip the subsequent umount if it fails. */
-                        if (remount_with_timeout(m, umount_log_level) < 0) {
+                        if (remount_with_timeout(m, last_try) < 0) {
                                 /* Remount failed, but try unmounting anyway,
                                  * unless this is a mount point we want to skip. */
                                 if (nonunmountable_path(m->path)) {
@@ -631,23 +755,75 @@
                         continue;
 
                 /* Trying to umount */
-                if (umount_with_timeout(m, umount_log_level) < 0)
+                r = umount_with_timeout(m, last_try);
+                if (r < 0)
                         n_failed++;
                 else
                         *changed = true;
+
+                /* If a mount is busy, we move it to not keep parent mount points busy.
+                 * If a mount point is not a leaf, moving it would invalidate our mount table.
+                 * More moving will occur in next iteration with a fresh mount table.
+                 */
+                if (r != -EBUSY || !m->leaf)
+                        continue;
+
+                _cleanup_free_ char *dirname = NULL;
+
+                r = path_extract_directory(m->path, &dirname);
+                if (r < 0) {
+                        n_failed++;
+                        log_full_errno(last_try ? LOG_ERR : LOG_INFO, r, "Cannot find directory for %s: %m", m->path);
+                        continue;
+                }
+
+                /* We need to canonicalize /run/shutdown/mounts. We cannot compare inodes, since /run
+                 * might be bind mounted somewhere we want to unmount. And we need to move all mounts in
+                 * /run/shutdown/mounts from there.
+                 */
+                if (!resolved_mounts_path)
+                        (void) chase_symlinks("/run/shutdown/mounts", NULL, 0, &resolved_mounts_path, NULL);
+                if (!path_equal(dirname, resolved_mounts_path)) {
+                        char newpath[STRLEN("/run/shutdown/mounts/") + 16 + 1];
+
+                        xsprintf(newpath, "/run/shutdown/mounts/%016" PRIx64, random_u64());
+
+                        /* on error of is_dir, assume directory */
+                        if (is_dir(m->path, true) != 0) {
+                                r = mkdir_p(newpath, 0000);
+                                if (r < 0) {
+                                        log_full_errno(last_try ? LOG_ERR : LOG_INFO, r, "Could not create directory %s: %m", newpath);
+                                        continue;
+                                }
+                        } else {
+                                r = touch_file(newpath, /* parents= */ true, USEC_INFINITY, UID_INVALID, GID_INVALID, 0700);
+                                if (r < 0) {
+                                        log_full_errno(last_try ? LOG_ERR : LOG_INFO, r, "Could not create file %s: %m", newpath);
+                                        continue;
+                                }
+                        }
+
+                        log_info("Moving mount %s to %s.", m->path, newpath);
+
+                        r = RET_NERRNO(mount(m->path, newpath, NULL, MS_MOVE, NULL));
+                        if (r < 0) {
+                                n_failed++;
+                                log_full_errno(last_try ? LOG_ERR : LOG_INFO, r, "Could not move %s to %s: %m", m->path, newpath);
+                        } else
+                                *changed = true;
+                }
         }
 
         return n_failed;
 }
 
 static int swap_points_list_off(MountPoint **head, bool *changed) {
-        MountPoint *m, *n;
         int n_failed = 0;
 
         assert(head);
         assert(changed);
 
-        LIST_FOREACH_SAFE(mount_point, m, n, *head) {
+        LIST_FOREACH(mount_point, m, *head) {
                 log_info("Deactivating swap %s.", m->path);
                 if (swapoff(m->path) < 0) {
                         log_warning_errno(errno, "Could not deactivate swap %s: %m", m->path);
@@ -662,8 +838,7 @@
         return n_failed;
 }
 
-static int loopback_points_list_detach(MountPoint **head, bool *changed, int umount_log_level) {
-        MountPoint *m, *n;
+static int loopback_points_list_detach(MountPoint **head, bool *changed, bool last_try) {
         int n_failed = 0, r;
         dev_t rootdev = 0;
 
@@ -672,7 +847,7 @@
 
         (void) get_block_device("/", &rootdev);
 
-        LIST_FOREACH_SAFE(mount_point, m, n, *head) {
+        LIST_FOREACH(mount_point, m, *head) {
                 if (major(rootdev) != 0 && rootdev == m->devnum) {
                         n_failed++;
                         continue;
@@ -681,7 +856,7 @@
                 log_info("Detaching loopback %s.", m->path);
                 r = delete_loopback(m->path);
                 if (r < 0) {
-                        log_full_errno(umount_log_level, r, "Could not detach loopback %s: %m", m->path);
+                        log_full_errno(last_try ? LOG_ERR : LOG_INFO, r, "Could not detach loopback %s: %m", m->path);
                         n_failed++;
                         continue;
                 }
@@ -694,8 +869,7 @@
         return n_failed;
 }
 
-static int dm_points_list_detach(MountPoint **head, bool *changed, int umount_log_level) {
-        MountPoint *m, *n;
+static int dm_points_list_detach(MountPoint **head, bool *changed, bool last_try) {
         int n_failed = 0, r;
         dev_t rootdev = 0;
 
@@ -704,7 +878,7 @@
 
         (void) get_block_device("/", &rootdev);
 
-        LIST_FOREACH_SAFE(mount_point, m, n, *head) {
+        LIST_FOREACH(mount_point, m, *head) {
                 if (major(rootdev) != 0 && rootdev == m->devnum) {
                         n_failed ++;
                         continue;
@@ -713,7 +887,7 @@
                 log_info("Detaching DM %s (%u:%u).", m->path, major(m->devnum), minor(m->devnum));
                 r = delete_dm(m);
                 if (r < 0) {
-                        log_full_errno(umount_log_level, r, "Could not detach DM %s: %m", m->path);
+                        log_full_errno(last_try ? LOG_ERR : LOG_INFO, r, "Could not detach DM %s: %m", m->path);
                         n_failed++;
                         continue;
                 }
@@ -725,8 +899,7 @@
         return n_failed;
 }
 
-static int md_points_list_detach(MountPoint **head, bool *changed, int umount_log_level) {
-        MountPoint *m, *n;
+static int md_points_list_detach(MountPoint **head, bool *changed, bool last_try) {
         int n_failed = 0, r;
         dev_t rootdev = 0;
 
@@ -735,7 +908,7 @@
 
         (void) get_block_device("/", &rootdev);
 
-        LIST_FOREACH_SAFE(mount_point, m, n, *head) {
+        LIST_FOREACH(mount_point, m, *head) {
                 if (major(rootdev) != 0 && rootdev == m->devnum) {
                         n_failed ++;
                         continue;
@@ -744,7 +917,7 @@
                 log_info("Stopping MD %s (%u:%u).", m->path, major(m->devnum), minor(m->devnum));
                 r = delete_md(m);
                 if (r < 0) {
-                        log_full_errno(umount_log_level, r, "Could not stop MD %s: %m", m->path);
+                        log_full_errno(last_try ? LOG_ERR : LOG_INFO, r, "Could not stop MD %s: %m", m->path);
                         n_failed++;
                         continue;
                 }
@@ -756,7 +929,7 @@
         return n_failed;
 }
 
-static int umount_all_once(bool *changed, int umount_log_level) {
+static int umount_all_once(bool *changed, bool last_try) {
         _cleanup_(mount_points_list_free) LIST_HEAD(MountPoint, mp_list_head);
         int r;
 
@@ -767,22 +940,21 @@
         if (r < 0)
                 return r;
 
-        return mount_points_list_umount(&mp_list_head, changed, umount_log_level);
+        return mount_points_list_umount(&mp_list_head, changed, last_try);
 }
 
-int umount_all(bool *changed, int umount_log_level) {
+int umount_all(bool *changed, bool last_try) {
         bool umount_changed;
         int r;
 
         assert(changed);
 
-        /* Retry umount, until nothing can be umounted anymore. Mounts are
-         * processed in order, newest first. The retries are needed when
-         * an old mount has been moved, to a path inside a newer mount. */
+        /* Retry umount, until nothing can be umounted anymore. Mounts are processed in order, newest
+         * first. The retries are needed when an old mount has been moved, to a path inside a newer mount. */
         do {
                 umount_changed = false;
 
-                r = umount_all_once(&umount_changed, umount_log_level);
+                r = umount_all_once(&umount_changed, last_try);
                 if (umount_changed)
                         *changed = true;
         } while (umount_changed);
@@ -805,7 +977,7 @@
         return swap_points_list_off(&swap_list_head, changed);
 }
 
-int loopback_detach_all(bool *changed, int umount_log_level) {
+int loopback_detach_all(bool *changed, bool last_try) {
         _cleanup_(mount_points_list_free) LIST_HEAD(MountPoint, loopback_list_head);
         int r;
 
@@ -817,10 +989,10 @@
         if (r < 0)
                 return r;
 
-        return loopback_points_list_detach(&loopback_list_head, changed, umount_log_level);
+        return loopback_points_list_detach(&loopback_list_head, changed, last_try);
 }
 
-int dm_detach_all(bool *changed, int umount_log_level) {
+int dm_detach_all(bool *changed, bool last_try) {
         _cleanup_(mount_points_list_free) LIST_HEAD(MountPoint, dm_list_head);
         int r;
 
@@ -832,10 +1004,10 @@
         if (r < 0)
                 return r;
 
-        return dm_points_list_detach(&dm_list_head, changed, umount_log_level);
+        return dm_points_list_detach(&dm_list_head, changed, last_try);
 }
 
-int md_detach_all(bool *changed, int umount_log_level) {
+int md_detach_all(bool *changed, bool last_try) {
         _cleanup_(mount_points_list_free) LIST_HEAD(MountPoint, md_list_head);
         int r;
 
@@ -847,5 +1019,5 @@
         if (r < 0)
                 return r;
 
-        return md_points_list_detach(&md_list_head, changed, umount_log_level);
+        return md_points_list_detach(&md_list_head, changed, last_try);
 }
diff --git a/src/shutdown/umount.h b/src/shutdown/umount.h
index fac1a12..a742ac0 100644
--- a/src/shutdown/umount.h
+++ b/src/shutdown/umount.h
@@ -7,15 +7,11 @@
 
 #include "list.h"
 
-int umount_all(bool *changed, int umount_log_level);
-
+int umount_all(bool *changed, bool last_try);
 int swapoff_all(bool *changed);
-
-int loopback_detach_all(bool *changed, int umount_log_level);
-
-int dm_detach_all(bool *changed, int umount_log_level);
-
-int md_detach_all(bool *changed, int umount_log_level);
+int loopback_detach_all(bool *changed, bool last_try);
+int dm_detach_all(bool *changed, bool last_try);
+int md_detach_all(bool *changed, bool last_try);
 
 /* This is exported just for testing */
 typedef struct MountPoint {
@@ -23,6 +19,8 @@
         char *remount_options;
         unsigned long remount_flags;
         bool try_remount_ro;
+        bool umount_lazily;
+        bool leaf;
         dev_t devnum;
         LIST_FIELDS(struct MountPoint, mount_point);
 } MountPoint;
diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
index a3aeb24..288fa4a 100644
--- a/src/sleep/sleep.c
+++ b/src/sleep/sleep.c
@@ -14,11 +14,15 @@
 #include <sys/timerfd.h>
 #include <unistd.h>
 
+#include "sd-bus.h"
 #include "sd-messages.h"
 
 #include "btrfs-util.h"
+#include "build.h"
 #include "bus-error.h"
-#include "def.h"
+#include "bus-locator.h"
+#include "bus-util.h"
+#include "constants.h"
 #include "exec-util.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -29,11 +33,13 @@
 #include "parse-util.h"
 #include "pretty-print.h"
 #include "sleep-config.h"
+#include "special.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "time-util.h"
-#include "util.h"
+
+#define DEFAULT_HIBERNATE_DELAY_USEC_NO_BATTERY (2 * USEC_PER_HOUR)
 
 static SleepOperation arg_operation = _SLEEP_OPERATION_INVALID;
 
@@ -85,7 +91,6 @@
 
 static int write_mode(char **modes) {
         int r = 0;
-        char **mode;
 
         STRV_FOREACH(mode, modes) {
                 int k;
@@ -103,7 +108,6 @@
 }
 
 static int write_state(FILE **f, char **states) {
-        char **state;
         int r = 0;
 
         assert(f);
@@ -226,7 +230,7 @@
 
                 r = write_mode(modes);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to write mode to /sys/power/disk: %m");;
+                        return log_error_errno(r, "Failed to write mode to /sys/power/disk: %m");
         }
 
         /* Pass an action string to the call-outs. This is mostly our operation string, except if the
@@ -264,43 +268,181 @@
         return r;
 }
 
-static int execute_s2h(const SleepConfig *sleep_config) {
-        _cleanup_close_ int tfd = -1;
-        char buf[FORMAT_TIMESPAN_MAX];
-        struct itimerspec ts = {};
+static int custom_timer_suspend(const SleepConfig *sleep_config) {
+        usec_t hibernate_timestamp;
         int r;
 
         assert(sleep_config);
 
-        tfd = timerfd_create(CLOCK_BOOTTIME_ALARM, TFD_NONBLOCK|TFD_CLOEXEC);
-        if (tfd < 0)
-                return log_error_errno(errno, "Error creating timerfd: %m");
+        hibernate_timestamp = usec_add(now(CLOCK_BOOTTIME), sleep_config->hibernate_delay_usec);
 
-        log_debug("Set timerfd wake alarm for %s",
-                  format_timespan(buf, sizeof(buf), sleep_config->hibernate_delay_sec, USEC_PER_SEC));
+        while (battery_is_discharging_and_low() == 0) {
+                _cleanup_hashmap_free_ Hashmap *last_capacity = NULL, *current_capacity = NULL;
+                _cleanup_close_ int tfd = -EBADF;
+                struct itimerspec ts = {};
+                usec_t suspend_interval;
+                bool woken_by_timer;
 
-        timespec_store(&ts.it_value, sleep_config->hibernate_delay_sec);
+                tfd = timerfd_create(CLOCK_BOOTTIME_ALARM, TFD_NONBLOCK|TFD_CLOEXEC);
+                if (tfd < 0)
+                        return log_error_errno(errno, "Error creating timerfd: %m");
 
-        r = timerfd_settime(tfd, 0, &ts, NULL);
-        if (r < 0)
-                return log_error_errno(errno, "Error setting hibernate timer: %m");
+                /* Store current battery capacity before suspension */
+                r = fetch_batteries_capacity_by_name(&last_capacity);
+                if (r < 0)
+                        return log_error_errno(r, "Error fetching battery capacity percentage: %m");
 
-        r = execute(sleep_config, SLEEP_SUSPEND, NULL);
-        if (r < 0)
-                return r;
+                if (hashmap_isempty(last_capacity))
+                        /* In case of no battery, system suspend interval will be set to HibernateDelaySec= or 2 hours. */
+                        suspend_interval = timestamp_is_set(hibernate_timestamp)
+                                           ? sleep_config->hibernate_delay_usec : DEFAULT_HIBERNATE_DELAY_USEC_NO_BATTERY;
+                else {
+                        r = get_total_suspend_interval(last_capacity, &suspend_interval);
+                        if (r < 0) {
+                                log_debug_errno(r, "Failed to estimate suspend interval using previous discharge rate, ignoring: %m");
+                                /* In case of any errors, especially when we do not know the battery
+                                 * discharging rate, system suspend interval will be set to
+                                 * SuspendEstimationSec=. */
+                                suspend_interval = sleep_config->suspend_estimation_usec;
+                        }
+                }
 
-        r = fd_wait_for_event(tfd, POLLIN, 0);
-        if (r < 0)
-                return log_error_errno(r, "Error polling timerfd: %m");
-        if (!FLAGS_SET(r, POLLIN)) /* We woke up before the alarm time, we are done. */
+                /* Do not suspend more than HibernateDelaySec= */
+                usec_t before_timestamp = now(CLOCK_BOOTTIME);
+                suspend_interval = MIN(suspend_interval, usec_sub_unsigned(hibernate_timestamp, before_timestamp));
+                if (suspend_interval <= 0)
+                        break; /* system should hibernate */
+
+                log_debug("Set timerfd wake alarm for %s", FORMAT_TIMESPAN(suspend_interval, USEC_PER_SEC));
+                /* Wake alarm for system with or without battery to hibernate or estimate discharge rate whichever is applicable */
+                timespec_store(&ts.it_value, suspend_interval);
+
+                if (timerfd_settime(tfd, 0, &ts, NULL) < 0)
+                        return log_error_errno(errno, "Error setting battery estimate timer: %m");
+
+                r = execute(sleep_config, SLEEP_SUSPEND, NULL);
+                if (r < 0)
+                        return r;
+
+                r = fd_wait_for_event(tfd, POLLIN, 0);
+                if (r < 0)
+                        return log_error_errno(r, "Error polling timerfd: %m");
+                /* Store fd_wait status */
+                woken_by_timer = FLAGS_SET(r, POLLIN);
+
+                r = fetch_batteries_capacity_by_name(&current_capacity);
+                if (r < 0 || hashmap_isempty(current_capacity)) {
+                        /* In case of no battery or error while getting charge level, no need to measure
+                         * discharge rate. Instead the system should wake up if it is manual wakeup or
+                         * hibernate if this is a timer wakeup. */
+                        if (r < 0)
+                                log_debug_errno(r, "Battery capacity percentage unavailable, cannot estimate discharge rate: %m");
+                        else
+                                log_debug("No battery found.");
+                        if (!woken_by_timer)
+                                return 0;
+                        break;
+                }
+
+                usec_t after_timestamp = now(CLOCK_BOOTTIME);
+                log_debug("Attempting to estimate battery discharge rate after wakeup from %s sleep",
+                          FORMAT_TIMESPAN(after_timestamp - before_timestamp, USEC_PER_HOUR));
+
+                if (after_timestamp != before_timestamp) {
+                        r = estimate_battery_discharge_rate_per_hour(last_capacity, current_capacity, before_timestamp, after_timestamp);
+                        if (r < 0)
+                                log_warning_errno(r, "Failed to estimate and update battery discharge rate, ignoring: %m");
+                } else
+                        log_debug("System woke up too early to estimate discharge rate");
+
+                if (!woken_by_timer)
+                        /* Return as manual wakeup done. This also will return in case battery was charged during suspension */
+                        return 0;
+
+                r = check_wakeup_type();
+                if (r < 0)
+                        log_debug_errno(r, "Failed to check hardware wakeup type, ignoring: %m");
+                if (r > 0) {
+                        log_debug("wakeup type is APM timer");
+                        /* system should hibernate */
+                        break;
+                }
+        }
+
+        return 1;
+}
+
+/* Freeze when invoked and thaw on cleanup */
+static int freeze_thaw_user_slice(const char **method) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        int r;
+
+        if (!method || !*method)
                 return 0;
 
-        tfd = safe_close(tfd);
+        r = bus_connect_system_systemd(&bus);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to open connection to systemd: %m");
 
-        /* If woken up after alarm time, hibernate */
-        log_debug("Attempting to hibernate after waking from %s timer",
-                  format_timespan(buf, sizeof(buf), sleep_config->hibernate_delay_sec, USEC_PER_SEC));
+        /* Wait for 1.5 seconds at maximum for freeze operation */
+        (void) sd_bus_set_method_call_timeout(bus, 1500 * USEC_PER_MSEC);
 
+        r = bus_call_method(bus, bus_systemd_mgr, *method, &error, NULL, "s", SPECIAL_USER_SLICE);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to execute operation: %s", bus_error_message(&error, r));
+
+        return 1;
+}
+
+static int execute_s2h(const SleepConfig *sleep_config) {
+        _unused_ _cleanup_(freeze_thaw_user_slice) const char *auto_method_thaw = "ThawUnit";
+        int r;
+
+        assert(sleep_config);
+
+        r = freeze_thaw_user_slice(&(const char*) { "FreezeUnit" });
+        if (r < 0)
+                log_debug_errno(r, "Failed to freeze unit user.slice, ignoring: %m");
+
+        /* Only check if we have automated battery alarms if HibernateDelaySec= is not set, as in that case
+         * we'll busy poll for the configured interval instead */
+        if (!timestamp_is_set(sleep_config->hibernate_delay_usec)) {
+                r = check_wakeup_type();
+                if (r < 0)
+                        log_debug_errno(r, "Failed to check hardware wakeup type, ignoring: %m");
+                else {
+                        r = battery_trip_point_alarm_exists();
+                        if (r < 0)
+                                log_debug_errno(r, "Failed to check whether acpi_btp support is enabled or not, ignoring: %m");
+                }
+        } else
+                r = 0;  /* Force fallback path */
+
+        if (r > 0) { /* If we have both wakeup alarms and battery trip point support, use them */
+                log_debug("Attempting to suspend...");
+                r = execute(sleep_config, SLEEP_SUSPEND, NULL);
+                if (r < 0)
+                        return r;
+
+                r = check_wakeup_type();
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to check hardware wakeup type: %m");
+
+                if (r == 0)
+                        /* For APM Timer wakeup, system should hibernate else wakeup */
+                        return 0;
+        } else {
+                r = custom_timer_suspend(sleep_config);
+                if (r < 0)
+                        return log_debug_errno(r, "Suspend cycle with manual battery discharge rate estimation failed: %m");
+                if (r == 0)
+                        /* manual wakeup */
+                        return 0;
+        }
+        /* For above custom timer, if 1 is returned, system will directly hibernate */
+
+        log_debug("Attempting to hibernate");
         r = execute(sleep_config, SLEEP_HIBERNATE, NULL);
         if (r < 0) {
                 log_notice("Couldn't hibernate, will try to suspend again.");
@@ -355,7 +497,7 @@
         assert(argv);
 
         while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
                 case 'h':
                         return help();
 
@@ -366,7 +508,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (argc - optind != 1)
diff --git a/src/sleep/sleep.conf b/src/sleep/sleep.conf
index 174f5ea..4c8e8b9 100644
--- a/src/sleep/sleep.conf
+++ b/src/sleep/sleep.conf
@@ -23,4 +23,5 @@
 #HibernateState=disk
 #HybridSleepMode=suspend platform shutdown
 #HybridSleepState=disk
-#HibernateDelaySec=180min
+#HibernateDelaySec=
+#SuspendEstimationSec=60min
diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c
index 6e3ee0d..821049e 100644
--- a/src/socket-proxy/socket-proxyd.c
+++ b/src/socket-proxy/socket-proxyd.c
@@ -14,6 +14,7 @@
 #include "sd-resolve.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "log.h"
@@ -25,7 +26,6 @@
 #include "set.h"
 #include "socket-util.h"
 #include "string-util.h"
-#include "util.h"
 
 #define BUFFER_SIZE (256 * 1024)
 
@@ -95,7 +95,7 @@
 }
 
 static int connection_release(Connection *c) {
-        Context *context = c->context;
+        Context *context = ASSERT_PTR(ASSERT_PTR(c)->context);
         int r;
 
         connection_free(c);
@@ -190,7 +190,7 @@
                         } else if (z == 0 || ERRNO_IS_DISCONNECT(errno)) {
                                 *from_source = sd_event_source_unref(*from_source);
                                 *from = safe_close(*from);
-                        } else if (!IN_SET(errno, EAGAIN, EINTR))
+                        } else if (!ERRNO_IS_TRANSIENT(errno))
                                 return log_error_errno(errno, "Failed to splice: %m");
                 }
 
@@ -202,7 +202,7 @@
                         } else if (z == 0 || ERRNO_IS_DISCONNECT(errno)) {
                                 *to_source = sd_event_source_unref(*to_source);
                                 *to = safe_close(*to);
-                        } else if (!IN_SET(errno, EAGAIN, EINTR))
+                        } else if (!ERRNO_IS_TRANSIENT(errno))
                                 return log_error_errno(errno, "Failed to splice: %m");
                 }
         } while (shoveled);
@@ -213,12 +213,11 @@
 static int connection_enable_event_sources(Connection *c);
 
 static int traffic_cb(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Connection *c = userdata;
+        Connection *c = ASSERT_PTR(userdata);
         int r;
 
         assert(s);
         assert(fd >= 0);
-        assert(c);
 
         r = connection_shovel(c,
                               &c->server_fd, c->server_to_client_buffer, &c->client_fd,
@@ -235,15 +234,15 @@
                 goto quit;
 
         /* EOF on both sides? */
-        if (c->server_fd == -1 && c->client_fd == -1)
+        if (c->server_fd < 0 && c->client_fd < 0)
                 goto quit;
 
         /* Server closed, and all data written to client? */
-        if (c->server_fd == -1 && c->server_to_client_buffer_full <= 0)
+        if (c->server_fd < 0 && c->server_to_client_buffer_full <= 0)
                 goto quit;
 
         /* Client closed, and all data written to server? */
-        if (c->client_fd == -1 && c->client_to_server_buffer_full <= 0)
+        if (c->client_fd < 0 && c->client_to_server_buffer_full <= 0)
                 goto quit;
 
         r = connection_enable_event_sources(c);
@@ -321,13 +320,12 @@
 }
 
 static int connect_cb(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Connection *c = userdata;
+        Connection *c = ASSERT_PTR(userdata);
         socklen_t solen;
         int error, r;
 
         assert(s);
         assert(fd >= 0);
-        assert(c);
 
         solen = sizeof(error);
         r = getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &solen);
@@ -438,7 +436,8 @@
 
         service = strrchr(arg_remote_host, ':');
         if (service) {
-                node = strndupa(arg_remote_host, service - arg_remote_host);
+                node = strndupa_safe(arg_remote_host,
+                                     service - arg_remote_host);
                 service++;
         } else {
                 node = arg_remote_host;
@@ -487,9 +486,9 @@
         *c = (Connection) {
                .context = context,
                .server_fd = fd,
-               .client_fd = -1,
-               .server_to_client_buffer = {-1, -1},
-               .client_to_server_buffer = {-1, -1},
+               .client_fd = -EBADF,
+               .server_to_client_buffer = PIPE_EBADF,
+               .client_to_server_buffer = PIPE_EBADF,
         };
 
         r = set_ensure_put(&context->connections, NULL, c);
@@ -504,13 +503,12 @@
 
 static int accept_cb(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
         _cleanup_free_ char *peer = NULL;
-        Context *context = userdata;
-        int nfd = -1, r;
+        Context *context = ASSERT_PTR(userdata);
+        int nfd = -EBADF, r;
 
         assert(s);
         assert(fd >= 0);
         assert(revents & EPOLLIN);
-        assert(context);
 
         nfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC);
         if (nfd < 0) {
@@ -657,7 +655,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind >= argc)
diff --git a/src/stdio-bridge/stdio-bridge.c b/src/stdio-bridge/stdio-bridge.c
index 3c122b6..6e8f2bb 100644
--- a/src/stdio-bridge/stdio-bridge.c
+++ b/src/stdio-bridge/stdio-bridge.c
@@ -10,13 +10,13 @@
 #include "sd-daemon.h"
 
 #include "alloc-util.h"
+#include "build.h"
 #include "bus-internal.h"
 #include "bus-util.h"
 #include "errno-util.h"
 #include "io-util.h"
 #include "log.h"
 #include "main-func.h"
-#include "util.h"
 #include "version.h"
 
 #define DEFAULT_BUS_PATH "unix:path=/run/dbus/system_bus_socket"
@@ -26,9 +26,8 @@
 static bool arg_user = false;
 
 static int help(void) {
-
         printf("%s [OPTIONS...]\n\n"
-               "STDIO or socket-activatable proxy to a given DBus endpoint.\n\n"
+               "Forward messages between a pipe or socket and a D-Bus bus.\n\n"
                "  -h --help              Show this help\n"
                "     --version           Show package version\n"
                "  -p --bus-path=PATH     Path to the bus address (default: %s)\n"
@@ -41,7 +40,6 @@
 }
 
 static int parse_argv(int argc, char *argv[]) {
-
         enum {
                 ARG_VERSION = 0x100,
                 ARG_MACHINE,
@@ -64,7 +62,7 @@
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "hp:M:", options, NULL)) >= 0) {
+        while ((c = getopt_long(argc, argv, "hp:M:", options, NULL)) >= 0)
 
                 switch (c) {
 
@@ -98,7 +96,6 @@
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                "Unknown option code %c", c);
                 }
-        }
 
         return 1;
 }
@@ -245,8 +242,11 @@
                 };
 
                 r = ppoll_usec(p, ELEMENTSOF(p), t);
-                if (r < 0)
+                if (r < 0) {
+                        if (ERRNO_IS_TRANSIENT(r)) /* don't be bothered by signals, i.e. EINTR */
+                                continue;
                         return log_error_errno(r, "ppoll() failed: %m");
+                }
         }
 
         return 0;
diff --git a/src/sulogin-shell/sulogin-shell.c b/src/sulogin-shell/sulogin-shell.c
index 0207e85..6161e13 100644
--- a/src/sulogin-shell/sulogin-shell.c
+++ b/src/sulogin-shell/sulogin-shell.c
@@ -8,9 +8,10 @@
 
 #include "sd-bus.h"
 
+#include "bus-locator.h"
 #include "bus-util.h"
 #include "bus-error.h"
-#include "def.h"
+#include "constants.h"
 #include "env-util.h"
 #include "log.h"
 #include "process-util.h"
@@ -24,21 +25,16 @@
 
         log_info("Reloading system manager configuration");
 
-        r = sd_bus_message_new_method_call(
+        r = bus_message_new_method_call(
                         bus,
                         &m,
-                        "org.freedesktop.systemd1",
-                        "/org/freedesktop/systemd1",
-                        "org.freedesktop.systemd1.Manager",
+                        bus_systemd_mgr,
                         "Reload");
         if (r < 0)
                 return bus_log_create_error(r);
 
-        /* Note we use an extra-long timeout here. This is because a reload or reexec means generators are rerun which
-         * are timed out after DEFAULT_TIMEOUT_USEC. Let's use twice that time here, so that the generators can have
-         * their timeout, and for everything else there's the same time budget in place. */
-
-        r = sd_bus_call(bus, m, DEFAULT_TIMEOUT_USEC * 2, &error, NULL);
+        /* Reloading the daemon may take long, hence set a longer timeout here */
+        r = sd_bus_call(bus, m, DAEMON_RELOAD_TIMEOUT_SEC, &error, NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to reload daemon: %s", bus_error_message(&error, r));
 
@@ -49,20 +45,19 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         int r;
 
-        log_info("Starting default target");
+        log_info("Starting "SPECIAL_DEFAULT_TARGET);
 
-        /* Start these units only if we can replace base.target with it */
-        r = sd_bus_call_method(bus,
-                               "org.freedesktop.systemd1",
-                               "/org/freedesktop/systemd1",
-                               "org.freedesktop.systemd1.Manager",
-                               "StartUnit",
-                               &error,
-                               NULL,
-                               "ss", SPECIAL_DEFAULT_TARGET, "isolate");
+        /* Start this unit only if we can replace basic.target with it */
+        r = bus_call_method(
+                        bus,
+                        bus_systemd_mgr,
+                        "StartUnit",
+                        &error,
+                        NULL,
+                        "ss", SPECIAL_DEFAULT_TARGET, "isolate");
 
         if (r < 0)
-                return log_error_errno(r, "Failed to start default target: %s", bus_error_message(&error, r));
+                return log_error_errno(r, "Failed to start "SPECIAL_DEFAULT_TARGET": %s", bus_error_message(&error, r));
 
         return 0;
 }
diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
index 458a91b..d752ad2 100644
--- a/src/sysctl/sysctl.c
+++ b/src/sysctl/sysctl.c
@@ -9,8 +9,10 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
+#include "build.h"
 #include "conf-files.h"
-#include "def.h"
+#include "constants.h"
+#include "creds-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -27,6 +29,7 @@
 
 static char **arg_prefixes = NULL;
 static bool arg_cat_config = false;
+static bool arg_strict = false;
 static PagerFlags arg_pager_flags = 0;
 
 STATIC_DESTRUCTOR_REGISTER(arg_prefixes, strv_freep);
@@ -51,23 +54,10 @@
 DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(option_hash_ops, char, string_hash_func, string_compare_func, Option, option_free);
 
 static bool test_prefix(const char *p) {
-        char **i;
-
         if (strv_isempty(arg_prefixes))
                 return true;
 
-        STRV_FOREACH(i, arg_prefixes) {
-                const char *t;
-
-                t = path_startswith(*i, "/proc/sys/");
-                if (!t)
-                        t = *i;
-
-                if (path_startswith(p, t))
-                        return true;
-        }
-
-        return false;
+        return path_startswith_strv(p, arg_prefixes);
 }
 
 static Option *option_new(
@@ -97,19 +87,22 @@
         return TAKE_PTR(o);
 }
 
-static int sysctl_write_or_warn(const char *key, const char *value, bool ignore_failure) {
+static int sysctl_write_or_warn(const char *key, const char *value, bool ignore_failure, bool ignore_enoent) {
         int r;
 
         r = sysctl_write(key, value);
         if (r < 0) {
-                /* If the sysctl is not available in the kernel or we are running with reduced privileges and
-                 * cannot write it, then log about the issue, and proceed without failing. (EROFS is treated
-                 * as a permission problem here, since that's how container managers usually protected their
-                 * sysctls.) In all other cases log an error and make the tool fail. */
-                if (ignore_failure || r == -EROFS || ERRNO_IS_PRIVILEGE(r))
+                /* Proceed without failing if ignore_failure is true.
+                 * If the sysctl is not available in the kernel or we are running with reduced privileges and
+                 * cannot write it, then log about the issue, and proceed without failing. Unless strict mode
+                 * (arg_strict = true) is enabled, in which case we should fail. (EROFS is treated as a
+                 * permission problem here, since that's how container managers usually protected their
+                 * sysctls.)
+                 * In all other cases log an error and make the tool fail. */
+                if (ignore_failure || (!arg_strict && (r == -EROFS || ERRNO_IS_PRIVILEGE(r))))
                         log_debug_errno(r, "Couldn't write '%s' to '%s', ignoring: %m", value, key);
-                else if (r == -ENOENT)
-                        log_info_errno(r, "Couldn't write '%s' to '%s', ignoring: %m", value, key);
+                else if (ignore_enoent && r == -ENOENT)
+                        log_warning_errno(r, "Couldn't write '%s' to '%s', ignoring: %m", value, key);
                 else
                         return log_error_errno(r, "Couldn't write '%s' to '%s': %m", value, key);
         }
@@ -117,6 +110,94 @@
         return 0;
 }
 
+static int apply_glob_option_with_prefix(OrderedHashmap *sysctl_options, Option *option, const char *prefix) {
+        _cleanup_strv_free_ char **paths = NULL;
+        _cleanup_free_ char *pattern = NULL;
+        int r, k;
+
+        assert(sysctl_options);
+        assert(option);
+
+        if (prefix) {
+                _cleanup_free_ char *key = NULL;
+
+                r = path_glob_can_match(option->key, prefix, &key);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to check if the glob '%s' matches prefix '%s': %m",
+                                               option->key, prefix);
+                if (r == 0) {
+                        log_debug("The glob '%s' does not match prefix '%s'.", option->key, prefix);
+                        return 0;
+                }
+
+                log_debug("The glob '%s' is prefixed with '%s': '%s'", option->key, prefix, key);
+
+                if (!string_is_glob(key)) {
+                        /* The prefixed pattern is not glob anymore. Let's skip to call glob(). */
+                        if (ordered_hashmap_contains(sysctl_options, key)) {
+                                log_debug("Not setting %s (explicit setting exists).", key);
+                                return 0;
+                        }
+
+                        return sysctl_write_or_warn(key, option->value,
+                                                    /* ignore_failure = */ option->ignore_failure,
+                                                    /* ignore_enoent = */ true);
+                }
+
+                pattern = path_join("/proc/sys", key);
+        } else
+                pattern = path_join("/proc/sys", option->key);
+        if (!pattern)
+                return log_oom();
+
+        r = glob_extend(&paths, pattern, GLOB_NOCHECK);
+        if (r < 0) {
+                if (r == -ENOENT) {
+                        log_debug("No match for glob: %s", option->key);
+                        return 0;
+                }
+                if (option->ignore_failure || ERRNO_IS_PRIVILEGE(r)) {
+                        log_debug_errno(r, "Failed to resolve glob '%s', ignoring: %m", option->key);
+                        return 0;
+                } else
+                        return log_error_errno(r, "Couldn't resolve glob '%s': %m", option->key);
+        }
+
+        STRV_FOREACH(s, paths) {
+                const char *key;
+
+                assert_se(key = path_startswith(*s, "/proc/sys"));
+
+                if (ordered_hashmap_contains(sysctl_options, key)) {
+                        log_debug("Not setting %s (explicit setting exists).", key);
+                        continue;
+                }
+
+                k = sysctl_write_or_warn(key, option->value,
+                                         /* ignore_failure = */ option->ignore_failure,
+                                         /* ignore_enoent = */ !arg_strict);
+                if (k < 0 && r >= 0)
+                        r = k;
+        }
+
+        return r;
+}
+
+static int apply_glob_option(OrderedHashmap *sysctl_options, Option *option) {
+        int r = 0, k;
+
+        if (strv_isempty(arg_prefixes))
+                return apply_glob_option_with_prefix(sysctl_options, option, NULL);
+
+        STRV_FOREACH(i, arg_prefixes) {
+                k = apply_glob_option_with_prefix(sysctl_options, option, *i);
+                if (k < 0 && r >= 0)
+                        r = k;
+        }
+
+        return r;
+}
+
 static int apply_all(OrderedHashmap *sysctl_options) {
         Option *option;
         int r = 0;
@@ -128,53 +209,14 @@
                 if (!option->value)
                         continue;
 
-                if (string_is_glob(option->key)) {
-                        _cleanup_strv_free_ char **paths = NULL;
-                        _cleanup_free_ char *pattern = NULL;
-                        char **s;
-
-                        pattern = path_join("/proc/sys", option->key);
-                        if (!pattern)
-                                return log_oom();
-
-                        k = glob_extend(&paths, pattern, GLOB_NOCHECK);
-                        if (k < 0) {
-                                if (option->ignore_failure || ERRNO_IS_PRIVILEGE(k))
-                                        log_debug_errno(k, "Failed to resolve glob '%s', ignoring: %m",
-                                                        option->key);
-                                else {
-                                        log_error_errno(k, "Couldn't resolve glob '%s': %m",
-                                                        option->key);
-                                        if (r == 0)
-                                                r = k;
-                                }
-
-                        } else if (strv_isempty(paths))
-                                log_debug("No match for glob: %s", option->key);
-
-                        STRV_FOREACH(s, paths) {
-                                const char *key;
-
-                                assert_se(key = path_startswith(*s, "/proc/sys"));
-
-                                if (!test_prefix(key))
-                                        continue;
-
-                                if (ordered_hashmap_contains(sysctl_options, key)) {
-                                        log_debug("Not setting %s (explicit setting exists).", key);
-                                        continue;
-                                }
-
-                                k = sysctl_write_or_warn(key, option->value, option->ignore_failure);
-                                if (r == 0)
-                                        r = k;
-                        }
-
-                } else {
-                        k = sysctl_write_or_warn(option->key, option->value, option->ignore_failure);
-                        if (r == 0)
-                                r = k;
-                }
+                if (string_is_glob(option->key))
+                        k = apply_glob_option(sysctl_options, option);
+                else
+                        k = sysctl_write_or_warn(option->key, option->value,
+                                                 /* ignore_failure = */ option->ignore_failure,
+                                                 /* ignore_enoent = */ !arg_strict);
+                if (k < 0 && r >= 0)
+                        r = k;
         }
 
         return r;
@@ -252,9 +294,6 @@
                     !test_prefix(p))
                         continue;
 
-                if (ordered_hashmap_ensure_allocated(sysctl_options, &option_hash_ops) < 0)
-                        return log_oom();
-
                 existing = ordered_hashmap_get(*sysctl_options, p);
                 if (existing) {
                         if (streq_ptr(value, existing->value)) {
@@ -270,7 +309,7 @@
                 if (!new_option)
                         return log_oom();
 
-                k = ordered_hashmap_put(*sysctl_options, new_option->key, new_option);
+                k = ordered_hashmap_ensure_put(sysctl_options, &option_hash_ops, new_option->key, new_option);
                 if (k < 0)
                         return log_error_errno(k, "Failed to add sysctl variable %s to hashmap: %m", p);
 
@@ -280,6 +319,25 @@
         return r;
 }
 
+static int read_credential_lines(OrderedHashmap **sysctl_options) {
+        _cleanup_free_ char *j = NULL;
+        const char *d;
+        int r;
+
+        r = get_credentials_dir(&d);
+        if (r == -ENXIO)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to get credentials directory: %m");
+
+        j = path_join(d, "sysctl.extra");
+        if (!j)
+                return log_oom();
+
+        (void) parse_file(sysctl_options, j, /* ignore_enoent= */ true);
+        return 0;
+}
+
 static int help(void) {
         _cleanup_free_ char *link = NULL;
         int r;
@@ -309,6 +367,7 @@
                 ARG_CAT_CONFIG,
                 ARG_PREFIX,
                 ARG_NO_PAGER,
+                ARG_STRICT,
         };
 
         static const struct option options[] = {
@@ -317,6 +376,7 @@
                 { "cat-config", no_argument,       NULL, ARG_CAT_CONFIG },
                 { "prefix",     required_argument, NULL, ARG_PREFIX     },
                 { "no-pager",   no_argument,       NULL, ARG_NO_PAGER   },
+                { "strict",     no_argument,       NULL, ARG_STRICT     },
                 {}
         };
 
@@ -340,6 +400,7 @@
                         break;
 
                 case ARG_PREFIX: {
+                        const char *s;
                         char *p;
 
                         /* We used to require people to specify absolute paths
@@ -348,10 +409,8 @@
                          * sysctl name available. */
                         sysctl_normalize(optarg);
 
-                        if (path_startswith(optarg, "/proc/sys"))
-                                p = strdup(optarg);
-                        else
-                                p = path_join("/proc/sys", optarg);
+                        s = path_startswith(optarg, "/proc/sys");
+                        p = strdup(s ?: optarg);
                         if (!p)
                                 return log_oom();
 
@@ -365,11 +424,15 @@
                         arg_pager_flags |= PAGER_DISABLE;
                         break;
 
+                case ARG_STRICT:
+                        arg_strict = true;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_cat_config && argc > optind)
@@ -403,14 +466,13 @@
                 }
         } else {
                 _cleanup_strv_free_ char **files = NULL;
-                char **f;
 
                 r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("sysctl.d"));
                 if (r < 0)
                         return log_error_errno(r, "Failed to enumerate sysctl.d files: %m");
 
                 if (arg_cat_config) {
-                        (void) pager_open(arg_pager_flags);
+                        pager_open(arg_pager_flags);
 
                         return cat_files(NULL, files, 0);
                 }
@@ -420,6 +482,10 @@
                         if (k < 0 && r == 0)
                                 r = k;
                 }
+
+                k = read_credential_lines(&sysctl_options);
+                if (k < 0 && r == 0)
+                        r = k;
         }
 
         k = apply_all(sysctl_options);
diff --git a/src/sysext/meson.build b/src/sysext/meson.build
index 1517df4..f159adb 100644
--- a/src/sysext/meson.build
+++ b/src/sysext/meson.build
@@ -1,5 +1,3 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_sysext_sources = files('''
-        sysext.c
-'''.split())
+systemd_sysext_sources = files('sysext.c')
diff --git a/src/sysext/sysext.c b/src/sysext/sysext.c
index bcd87ab..4553e90 100644
--- a/src/sysext/sysext.c
+++ b/src/sysext/sysext.c
@@ -3,10 +3,14 @@
 #include <fcntl.h>
 #include <getopt.h>
 #include <linux/loop.h>
+#include <sys/file.h>
 #include <sys/mount.h>
 #include <unistd.h>
 
+#include "build.h"
 #include "capability-util.h"
+#include "chase-symlinks.h"
+#include "devnum-util.h"
 #include "discover-image.h"
 #include "dissect-image.h"
 #include "env-util.h"
@@ -17,6 +21,7 @@
 #include "format-table.h"
 #include "fs-util.h"
 #include "hashmap.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "main-func.h"
 #include "missing_magic.h"
@@ -30,7 +35,6 @@
 #include "pretty-print.h"
 #include "process-util.h"
 #include "sort-util.h"
-#include "stat-util.h"
 #include "terminal-util.h"
 #include "user-util.h"
 #include "verbs.h"
@@ -83,7 +87,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to determine whether hierarchy '%s' contains '.systemd-sysext/dev': %m", p);
 
-        r = parse_dev(buf, &dev);
+        r = parse_devnum(buf, &dev);
         if (r < 0)
                 return log_error_errno(r, "Failed to parse device major/minor stored in '.systemd-sysext/dev' file on '%s': %m", p);
 
@@ -123,7 +127,6 @@
 
 static int unmerge(void) {
         int r, ret = 0;
-        char **p;
 
         STRV_FOREACH(p, arg_hierarchies) {
                 _cleanup_free_ char *resolved = NULL;
@@ -150,8 +153,12 @@
 }
 
 static int verb_unmerge(int argc, char **argv, void *userdata) {
+        int r;
 
-        if (!have_effective_cap(CAP_SYS_ADMIN))
+        r = have_effective_cap(CAP_SYS_ADMIN);
+        if (r < 0)
+                return log_error_errno(r, "Failed to check if we have enough privileges: %m");
+        if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Need to be privileged.");
 
         return unmerge();
@@ -160,13 +167,12 @@
 static int verb_status(int argc, char **argv, void *userdata) {
         _cleanup_(table_unrefp) Table *t = NULL;
         int r, ret = 0;
-        char **p;
 
         t = table_new("hierarchy", "extensions", "since");
         if (!t)
                 return log_oom();
 
-        (void) table_set_empty_string(t, "-");
+        table_set_ersatz_string(t, TABLE_ERSATZ_DASH);
 
         STRV_FOREACH(p, arg_hierarchies) {
                 _cleanup_free_ char *resolved = NULL, *f = NULL, *buf = NULL;
@@ -244,7 +250,6 @@
 
         _cleanup_free_ char *options = NULL;
         bool separator = false;
-        char **l;
         int r;
 
         assert(where);
@@ -284,7 +289,6 @@
         _cleanup_free_ char *resolved_hierarchy = NULL, *f = NULL, *buf = NULL;
         _cleanup_strv_free_ char **layers = NULL;
         struct stat st;
-        char **p;
         int r;
 
         assert(hierarchy);
@@ -299,7 +303,7 @@
         else if (r < 0)
                 return log_error_errno(r, "Failed to resolve host hierarchy '%s': %m", hierarchy);
         else {
-                r = dir_is_empty(resolved_hierarchy);
+                r = dir_is_empty(resolved_hierarchy, /* ignore_hidden_or_backup= */ false);
                 if (r < 0)
                         return log_error_errno(r, "Failed to check if host hierarchy '%s' is empty: %m", resolved_hierarchy);
                 if (r > 0) {
@@ -340,7 +344,7 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to resolve hierarchy '%s' in extension '%s': %m", hierarchy, *p);
 
-                r = dir_is_empty(resolved);
+                r = dir_is_empty(resolved, /* ignore_hidden_or_backup= */ false);
                 if (r < 0)
                         return log_error_errno(r, "Failed to check if hierarchy '%s' in extension '%s' is empty: %m", resolved, *p);
                 if (r > 0) {
@@ -432,12 +436,17 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Extension image contains /usr/lib/os-release file, which is not allowed (it may carry /etc/os-release), refusing.");
 
-        return extension_release_validate(
+        r = extension_release_validate(
                         img->name,
                         host_os_release_id,
                         host_os_release_version_id,
                         host_os_release_sysext_level,
+                        in_initrd() ? "initrd" : "system",
                         img->extension_release);
+        if (r < 0)
+                return log_error_errno(r, "Failed to validate extension release information: %m");
+
+        return r;
 }
 
 static int merge_subprocess(Hashmap *images, const char *workspace) {
@@ -447,7 +456,6 @@
         size_t n_extensions = 0;
         unsigned n_ignored = 0;
         Image *img;
-        char **h;
         int r;
 
         /* Mark the whole of /run as MS_SLAVE, so that we can mount stuff below it that doesn't show up on
@@ -465,7 +473,7 @@
          * but let the kernel do that entirely automatically, once our namespace dies. Note that this file
          * system won't be visible to anyone but us, since we opened our own namespace and then made the
          * /run/ hierarchy (which our workspace is contained in) MS_SLAVE, see above. */
-        r = mount_nofollow_verbose(LOG_ERR, "sysexit", workspace, "tmpfs", 0, "mode=0700");
+        r = mount_nofollow_verbose(LOG_ERR, "sysext", workspace, "tmpfs", 0, "mode=0700");
         if (r < 0)
                 return r;
 
@@ -477,6 +485,10 @@
                         "SYSEXT_LEVEL", &host_os_release_sysext_level);
         if (r < 0)
                 return log_error_errno(r, "Failed to acquire 'os-release' data of OS tree '%s': %m", empty_to_root(arg_root));
+        if (isempty(host_os_release_id))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "'ID' field not found or empty in 'os-release' data of OS tree '%s': %m",
+                                       empty_to_root(arg_root));
 
         /* Let's now mount all images */
         HASHMAP_FOREACH(img, images) {
@@ -508,14 +520,15 @@
                 case IMAGE_BLOCK: {
                         _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
                         _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
-                        _cleanup_(decrypted_image_unrefp) DecryptedImage *di = NULL;
                         _cleanup_(verity_settings_done) VeritySettings verity_settings = VERITY_SETTINGS_DEFAULT;
                         DissectImageFlags flags =
                                 DISSECT_IMAGE_READ_ONLY |
                                 DISSECT_IMAGE_GENERIC_ROOT |
                                 DISSECT_IMAGE_REQUIRE_ROOT |
                                 DISSECT_IMAGE_MOUNT_ROOT_ONLY |
-                                DISSECT_IMAGE_USR_NO_ROOT;
+                                DISSECT_IMAGE_USR_NO_ROOT |
+                                DISSECT_IMAGE_ADD_PARTITION_DEVICES |
+                                DISSECT_IMAGE_PIN_PARTITION_DEVICES;
 
                         r = verity_settings_load(&verity_settings, img->path, NULL, NULL);
                         if (r < 0)
@@ -527,28 +540,33 @@
                         r = loop_device_make_by_path(
                                         img->path,
                                         O_RDONLY,
+                                        /* sector_size= */ UINT32_MAX,
                                         FLAGS_SET(flags, DISSECT_IMAGE_NO_PARTITION_TABLE) ? 0 : LO_FLAGS_PARTSCAN,
+                                        LOCK_SH,
                                         &d);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to set up loopback device for %s: %m", img->path);
 
-                        r = dissect_image_and_warn(
-                                        d->fd,
-                                        img->path,
+                        r = dissect_loop_device_and_warn(
+                                        d,
                                         &verity_settings,
                                         NULL,
-                                        d->uevent_seqnum_not_before,
-                                        d->timestamp_not_before,
                                         flags,
                                         &m);
                         if (r < 0)
                                 return r;
 
+                        r = dissected_image_load_verity_sig_partition(
+                                        m,
+                                        d->fd,
+                                        &verity_settings);
+                        if (r < 0)
+                                return r;
+
                         r = dissected_image_decrypt_interactively(
                                         m, NULL,
                                         &verity_settings,
-                                        flags,
-                                        &di);
+                                        flags);
                         if (r < 0)
                                 return r;
 
@@ -561,17 +579,13 @@
                         if (r < 0)
                                 return r;
 
-                        if (di) {
-                                r = decrypted_image_relinquish(di);
-                                if (r < 0)
-                                        return log_error_errno(r, "Failed to relinquish DM devices: %m");
-                        }
-
-                        loop_device_relinquish(d);
+                        r = dissected_image_relinquish(m);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to relinquish DM and loopback block devices: %m");
                         break;
                 }
                 default:
-                        assert_not_reached("Unsupported image type");
+                        assert_not_reached();
                 }
 
                 r = validate_version(
@@ -587,7 +601,7 @@
                         continue;
                 }
 
-                /* Noice! This one is an extension we want. */
+                /* Nice! This one is an extension we want. */
                 r = strv_extend(&extensions, img->name);
                 if (r < 0)
                         return log_oom();
@@ -750,10 +764,12 @@
 
 static int verb_merge(int argc, char **argv, void *userdata) {
         _cleanup_(hashmap_freep) Hashmap *images = NULL;
-        char **p;
         int r;
 
-        if (!have_effective_cap(CAP_SYS_ADMIN))
+        r = have_effective_cap(CAP_SYS_ADMIN);
+        if (r < 0)
+                return log_error_errno(r, "Failed to check if we have enough privileges: %m");
+        if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Need to be privileged.");
 
         r = image_discover_and_read_metadata(&images);
@@ -788,7 +804,10 @@
         _cleanup_(hashmap_freep) Hashmap *images = NULL;
         int r;
 
-        if (!have_effective_cap(CAP_SYS_ADMIN))
+        r = have_effective_cap(CAP_SYS_ADMIN);
+        if (r < 0)
+                return log_error_errno(r, "Failed to check if we have enough privileges: %m");
+        if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Need to be privileged.");
 
         r = image_discover_and_read_metadata(&images);
@@ -864,11 +883,11 @@
         _cleanup_free_ char *link = NULL;
         int r;
 
-        r = terminal_urlify_man("systemd-sysext", "1", &link);
+        r = terminal_urlify_man("systemd-sysext", "8", &link);
         if (r < 0)
                 return log_oom();
 
-        printf("%1$s [OPTIONS...] [DEVICE]\n"
+        printf("%1$s [OPTIONS...] COMMAND\n"
                "\n%5$sMerge extension images into /usr/ and /opt/ hierarchies.%6$s\n"
                "\n%3$sCommands:%4$s\n"
                "  status                  Show current merge status (default)\n"
@@ -962,7 +981,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/system-update-generator/system-update-generator.c b/src/system-update-generator/system-update-generator.c
index fc5aaa9..54cd943 100644
--- a/src/system-update-generator/system-update-generator.c
+++ b/src/system-update-generator/system-update-generator.c
@@ -10,7 +10,6 @@
 #include "special.h"
 #include "string-util.h"
 #include "unit-file.h"
-#include "util.h"
 
 /*
  * Implements the logic described in systemd.offline-updates(7).
diff --git a/src/systemctl/fuzz-systemctl-parse-argv.c b/src/systemctl/fuzz-systemctl-parse-argv.c
index 66b48ee..a97db68 100644
--- a/src/systemctl/fuzz-systemctl-parse-argv.c
+++ b/src/systemctl/fuzz-systemctl-parse-argv.c
@@ -6,6 +6,7 @@
 #include "env-util.h"
 #include "fd-util.h"
 #include "fuzz.h"
+#include "nulstr-util.h"
 #include "selinux-util.h"
 #include "static-destruct.h"
 #include "stdio-util.h"
@@ -15,9 +16,12 @@
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_strv_free_ char **argv = NULL;
-        _cleanup_close_ int orig_stdout_fd = -1;
+        _cleanup_close_ int orig_stdout_fd = -EBADF;
         int r;
 
+        if (size > 16*1024)
+                return 0; /* See the comment below about the limit for strv_length(). */
+
         /* We don't want to fill the logs with messages about parse errors.
          * Disable most logging if not running standalone */
         if (!getenv("SYSTEMD_LOG_LEVEL"))
@@ -31,6 +35,12 @@
 
         if (!argv[0])
                 return 0; /* argv[0] should always be present, but may be zero-length. */
+        if (strv_length(argv) > 1024)
+                return 0; /* oss-fuzz reports timeouts which are caused by appending to a very long strv.
+                           * The code is indeed not very efficient, but it's designed for normal command-line
+                           * use, where we don't expect more than a dozen of entries. The fact that it is
+                           * slow with ~100k entries is not particularly interesting. Let's just refuse such
+                           * long command lines. */
 
         if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0) {
                 orig_stdout_fd = fcntl(fileno(stdout), F_DUPFD_CLOEXEC, 3);
@@ -50,12 +60,8 @@
         else
                 log_info(r == 0 ? "Done!" : "Action!");
 
-        if (orig_stdout_fd >= 0) {
-                char path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-
-                xsprintf(path, "/proc/self/fd/%d", orig_stdout_fd);
-                assert_se(freopen(path, "w", stdout));
-        }
+        if (orig_stdout_fd >= 0)
+                assert_se(freopen(FORMAT_PROC_FD_PATH(orig_stdout_fd), "w", stdout));
 
         release_busses(); /* We open the bus for communication with logind.
                            * It needs to be closed to avoid apparent leaks. */
diff --git a/src/systemctl/meson.build b/src/systemctl/meson.build
index 38bf33d..30d0f57 100644
--- a/src/systemctl/meson.build
+++ b/src/systemctl/meson.build
@@ -2,77 +2,42 @@
 
 systemctl_sources = files(
         'systemctl-add-dependency.c',
-        'systemctl-add-dependency.h',
         'systemctl-cancel-job.c',
-        'systemctl-cancel-job.h',
         'systemctl-clean-or-freeze.c',
-        'systemctl-clean-or-freeze.h',
         'systemctl-compat-halt.c',
-        'systemctl-compat-halt.h',
         'systemctl-compat-runlevel.c',
-        'systemctl-compat-runlevel.h',
         'systemctl-compat-shutdown.c',
-        'systemctl-compat-shutdown.h',
         'systemctl-compat-telinit.c',
-        'systemctl-compat-telinit.h',
         'systemctl-daemon-reload.c',
-        'systemctl-daemon-reload.h',
         'systemctl-edit.c',
-        'systemctl-edit.h',
         'systemctl-enable.c',
-        'systemctl-enable.h',
         'systemctl-is-active.c',
-        'systemctl-is-active.h',
         'systemctl-is-enabled.c',
-        'systemctl-is-enabled.h',
         'systemctl-is-system-running.c',
-        'systemctl-is-system-running.h',
         'systemctl-kill.c',
-        'systemctl-kill.h',
         'systemctl-list-dependencies.c',
-        'systemctl-list-dependencies.h',
         'systemctl-list-jobs.c',
-        'systemctl-list-jobs.h',
         'systemctl-list-machines.c',
-        'systemctl-list-machines.h',
         'systemctl-list-unit-files.c',
-        'systemctl-list-unit-files.h',
         'systemctl-list-units.c',
-        'systemctl-list-units.h',
         'systemctl-log-setting.c',
-        'systemctl-log-setting.h',
         'systemctl-logind.c',
-        'systemctl-logind.h',
         'systemctl-mount.c',
-        'systemctl-mount.h',
         'systemctl-preset-all.c',
-        'systemctl-preset-all.h',
         'systemctl-reset-failed.c',
-        'systemctl-reset-failed.h',
         'systemctl-service-watchdogs.c',
-        'systemctl-service-watchdogs.h',
         'systemctl-set-default.c',
-        'systemctl-set-default.h',
         'systemctl-set-environment.c',
-        'systemctl-set-environment.h',
         'systemctl-set-property.c',
-        'systemctl-set-property.h',
         'systemctl-show.c',
-        'systemctl-show.h',
         'systemctl-start-special.c',
-        'systemctl-start-special.h',
         'systemctl-start-unit.c',
-        'systemctl-start-unit.h',
         'systemctl-switch-root.c',
-        'systemctl-switch-root.h',
         'systemctl-sysv-compat.c',
-        'systemctl-sysv-compat.h',
         'systemctl-trivial-method.c',
-        'systemctl-trivial-method.h',
         'systemctl-util.c',
-        'systemctl-util.h',
         'systemctl.c',
-        'systemctl.h')
+)
 
 if get_option('link-systemctl-shared')
         systemctl_link_with = [libshared]
@@ -83,7 +48,8 @@
 endif
 
 fuzzers += [
-        [['src/systemctl/fuzz-systemctl-parse-argv.c',
-          systemctl_sources],
+        [files('fuzz-systemctl-parse-argv.c') +
+         systemctl_sources,
          systemctl_link_with,
-         [], [], ['-DFUZZ_SYSTEMCTL_PARSE_ARGV']]]
+         [], [], ['-DFUZZ_SYSTEMCTL_PARSE_ARGV']]
+]
diff --git a/src/systemctl/systemctl-add-dependency.c b/src/systemctl/systemctl-add-dependency.c
index 2a0290d..68968a7 100644
--- a/src/systemctl/systemctl-add-dependency.c
+++ b/src/systemctl/systemctl-add-dependency.c
@@ -7,11 +7,11 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int add_dependency(int argc, char *argv[], void *userdata) {
+int verb_add_dependency(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
         _cleanup_free_ char *target = NULL;
         const char *verb = argv[0];
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         UnitDependency dep;
         int r;
@@ -34,11 +34,11 @@
         else if (streq(verb, "add-requires"))
                 dep = UNIT_REQUIRES;
         else
-                assert_not_reached("Unknown verb");
+                assert_not_reached();
 
         if (install_client_side()) {
                 r = unit_file_add_dependency(arg_scope, unit_file_flags_from_args(), arg_root, names, target, dep, &changes, &n_changes);
-                unit_file_dump_changes(r, "add dependency on", changes, n_changes, arg_quiet);
+                install_changes_dump(r, "add dependency on", changes, n_changes, arg_quiet);
 
                 if (r > 0)
                         r = 0;
@@ -78,11 +78,13 @@
                         goto finish;
                 }
 
-                r = daemon_reload(argc, argv, userdata);
+                r = daemon_reload(ACTION_RELOAD, /* graceful= */ false);
+                if (r > 0)
+                        r = 0;
         }
 
 finish:
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
         return r;
 }
diff --git a/src/systemctl/systemctl-add-dependency.h b/src/systemctl/systemctl-add-dependency.h
index deb0da4..11e5c82 100644
--- a/src/systemctl/systemctl-add-dependency.h
+++ b/src/systemctl/systemctl-add-dependency.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int add_dependency(int argc, char *argv[], void *userdata);
+int verb_add_dependency(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-cancel-job.c b/src/systemctl/systemctl-cancel-job.c
index 4c5203c..3cf1369 100644
--- a/src/systemctl/systemctl-cancel-job.c
+++ b/src/systemctl/systemctl-cancel-job.c
@@ -8,13 +8,12 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int cancel_job(int argc, char *argv[], void *userdata) {
+int verb_cancel(int argc, char *argv[], void *userdata) {
         sd_bus *bus;
-        char **name;
         int r;
 
         if (argc <= 1) /* Shortcut to trivial_method() if no argument is given */
-                return trivial_method(argc, argv, userdata);
+                return verb_trivial_method(argc, argv, userdata);
 
         r = acquire_bus(BUS_MANAGER, &bus);
         if (r < 0)
diff --git a/src/systemctl/systemctl-cancel-job.h b/src/systemctl/systemctl-cancel-job.h
index 75151d6..397e515 100644
--- a/src/systemctl/systemctl-cancel-job.h
+++ b/src/systemctl/systemctl-cancel-job.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int cancel_job(int argc, char *argv[], void *userdata);
+int verb_cancel(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-clean-or-freeze.c b/src/systemctl/systemctl-clean-or-freeze.c
index eca3a6d..5c15a9f 100644
--- a/src/systemctl/systemctl-clean-or-freeze.c
+++ b/src/systemctl/systemctl-clean-or-freeze.c
@@ -7,11 +7,10 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int clean_or_freeze_unit(int argc, char *argv[], void *userdata) {
+int verb_clean_or_freeze(int argc, char *argv[], void *userdata) {
         _cleanup_(bus_wait_for_units_freep) BusWaitForUnits *w = NULL;
         _cleanup_strv_free_ char **names = NULL;
         int r, ret = EXIT_SUCCESS;
-        char **name;
         const char *method;
         sd_bus *bus;
 
@@ -44,7 +43,7 @@
         else if (streq(argv[0], "thaw"))
                 method = "ThawUnit";
         else
-                assert_not_reached("Unhandled method");
+                assert_not_reached();
 
         STRV_FOREACH(name, names) {
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
diff --git a/src/systemctl/systemctl-clean-or-freeze.h b/src/systemctl/systemctl-clean-or-freeze.h
index 8e73f4e..5f2bca4 100644
--- a/src/systemctl/systemctl-clean-or-freeze.h
+++ b/src/systemctl/systemctl-clean-or-freeze.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int clean_or_freeze_unit(int argc, char *argv[], void *userdata);
+int verb_clean_or_freeze(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-compat-halt.c b/src/systemctl/systemctl-compat-halt.c
index 51a89ae..8a0e4e6 100644
--- a/src/systemctl/systemctl-compat-halt.c
+++ b/src/systemctl/systemctl-compat-halt.c
@@ -12,6 +12,7 @@
 #include "systemctl-compat-halt.h"
 #include "systemctl-compat-telinit.h"
 #include "systemctl-logind.h"
+#include "systemctl-start-unit.h"
 #include "systemctl-util.h"
 #include "systemctl.h"
 #include "terminal-util.h"
@@ -75,6 +76,7 @@
         assert(argc >= 0);
         assert(argv);
 
+        /* called in sysvinit system as last command in shutdown/reboot so this is always forceful */
         if (utmp_get_runlevel(&runlevel, NULL) >= 0)
                 if (IN_SET(runlevel, '0', '6'))
                         arg_force = 2;
@@ -127,7 +129,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_action == ACTION_REBOOT && (argc == optind || argc == optind + 1)) {
@@ -144,44 +146,37 @@
 int halt_main(void) {
         int r;
 
-        r = logind_check_inhibitors(arg_action);
-        if (r < 0)
-                return r;
+        if (arg_force == 0) {
+                /* always try logind first */
+                if (arg_when > 0)
+                        r = logind_schedule_shutdown();
+                else {
+                        r = logind_check_inhibitors(arg_action);
+                        if (r < 0)
+                                return r;
 
-        /* Delayed shutdown requested, and was successful */
-        if (arg_when > 0 && logind_schedule_shutdown() == 0)
-                return 0;
-
-        /* No delay, or logind failed or is not at all available */
-        if (geteuid() != 0) {
-                if (arg_dry_run || arg_force > 0) {
-                        (void) must_be_root();
-                        return -EPERM;
-                }
-
-                /* Try logind if we are a normal user and no special mode applies. Maybe polkit allows us to
-                 * shutdown the machine. */
-                if (IN_SET(arg_action, ACTION_POWEROFF, ACTION_REBOOT, ACTION_KEXEC, ACTION_HALT)) {
                         r = logind_reboot(arg_action);
-                        if (r >= 0)
-                                return r;
-                        if (IN_SET(r, -EOPNOTSUPP, -EINPROGRESS))
-                                /* Requested operation is not supported on the local system or already in
-                                 * progress */
-                                return r;
-
-                        /* on all other errors, try low-level operation */
                 }
+                if (r >= 0)
+                        return r;
+                if (IN_SET(r, -EACCES, -EOPNOTSUPP, -EINPROGRESS))
+                        /* Requested operation requires auth, is not supported on the local system or already in
+                         * progress */
+                        return r;
+                /* on all other errors, try low-level operation */
+
+                /* In order to minimize the difference between operation with and without logind, we explicitly
+                 * enable non-blocking mode for this, as logind's shutdown operations are always non-blocking. */
+                arg_no_block = true;
+
+                if (!arg_dry_run)
+                        return start_with_fallback();
         }
 
-        /* In order to minimize the difference between operation with and without logind, we explicitly
-         * enable non-blocking mode for this, as logind's shutdown operations are always non-blocking. */
-        arg_no_block = true;
-
-        if (!arg_dry_run && !arg_force)
-                return start_with_fallback();
-
-        assert(geteuid() == 0);
+        if (geteuid() != 0) {
+                (void) must_be_root();
+                return -EPERM;
+        }
 
         if (!arg_no_wtmp) {
                 if (sd_booted() > 0)
@@ -197,5 +192,5 @@
                 return 0;
 
         r = halt_now(arg_action);
-        return log_error_errno(r, "Failed to reboot: %m");
+        return log_error_errno(r, "Failed to %s: %m", action_table[arg_action].verb);
 }
diff --git a/src/systemctl/systemctl-compat-runlevel.c b/src/systemctl/systemctl-compat-runlevel.c
index ad6325b..04b6b76 100644
--- a/src/systemctl/systemctl-compat-runlevel.c
+++ b/src/systemctl/systemctl-compat-runlevel.c
@@ -55,7 +55,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
diff --git a/src/systemctl/systemctl-compat-shutdown.c b/src/systemctl/systemctl-compat-shutdown.c
index 11154f5..9d39e36 100644
--- a/src/systemctl/systemctl-compat-shutdown.c
+++ b/src/systemctl/systemctl-compat-shutdown.c
@@ -4,6 +4,7 @@
 
 #include "alloc-util.h"
 #include "pretty-print.h"
+#include "reboot-util.h"
 #include "systemctl-compat-shutdown.h"
 #include "systemctl-sysv-compat.h"
 #include "systemctl.h"
@@ -28,6 +29,7 @@
                "  -k             Don't halt/power-off/reboot, just send warnings\n"
                "     --no-wall   Don't send wall message before halt/power-off/reboot\n"
                "  -c             Cancel a pending shutdown\n"
+               "     --show      Show pending shutdown\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -40,7 +42,8 @@
 int shutdown_parse_argv(int argc, char *argv[]) {
         enum {
                 ARG_HELP = 0x100,
-                ARG_NO_WALL
+                ARG_NO_WALL,
+                ARG_SHOW
         };
 
         static const struct option options[] = {
@@ -50,6 +53,7 @@
                 { "reboot",    no_argument,       NULL, 'r'         },
                 { "kexec",     no_argument,       NULL, 'K'         }, /* not documented extension */
                 { "no-wall",   no_argument,       NULL, ARG_NO_WALL },
+                { "show",      no_argument,       NULL, ARG_SHOW    },
                 {}
         };
 
@@ -108,11 +112,15 @@
                         arg_action = ACTION_CANCEL_SHUTDOWN;
                         break;
 
+                case ARG_SHOW:
+                        arg_action = ACTION_SHOW_SHUTDOWN;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (argc > optind && arg_action != ACTION_CANCEL_SHUTDOWN) {
diff --git a/src/systemctl/systemctl-compat-telinit.c b/src/systemctl/systemctl-compat-telinit.c
index f0e9ca8..20325e5 100644
--- a/src/systemctl/systemctl-compat-telinit.c
+++ b/src/systemctl/systemctl-compat-telinit.c
@@ -93,7 +93,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind >= argc)
@@ -125,8 +125,11 @@
 }
 
 int start_with_fallback(void) {
+        int r;
+
         /* First, try systemd via D-Bus. */
-        if (start_unit(0, NULL, NULL) == 0)
+        r = verb_start(0, NULL, NULL);
+        if (r == 0)
                 return 0;
 
 #if HAVE_SYSV_COMPAT
@@ -135,18 +138,18 @@
                 return 0;
 #endif
 
-        return log_error_errno(SYNTHETIC_ERRNO(EIO),
-                               "Failed to talk to init daemon.");
+        return log_error_errno(r, "Failed to talk to init daemon: %m");
 }
 
 int reload_with_fallback(void) {
-        /* First, try systemd via D-Bus. */
-        if (daemon_reload(0, NULL, NULL) >= 0)
-                return 0;
 
-        /* Nothing else worked, so let's try signals */
         assert(IN_SET(arg_action, ACTION_RELOAD, ACTION_REEXEC));
 
+        /* First, try systemd via D-Bus */
+        if (daemon_reload(arg_action, /* graceful= */ true) > 0)
+                return 0;
+
+        /* That didn't work, so let's try signals */
         if (kill(1, arg_action == ACTION_RELOAD ? SIGHUP : SIGTERM) < 0)
                 return log_error_errno(errno, "kill() failed: %m");
 
@@ -155,7 +158,7 @@
 
 int exec_telinit(char *argv[]) {
         (void) rlimit_nofile_safe();
-        execv(TELINIT, argv);
+        (void) execv(TELINIT, argv);
 
         return log_error_errno(SYNTHETIC_ERRNO(EIO),
                                "Couldn't find an alternative telinit implementation to spawn.");
diff --git a/src/systemctl/systemctl-daemon-reload.c b/src/systemctl/systemctl-daemon-reload.c
index 03ba908..4f025ac 100644
--- a/src/systemctl/systemctl-daemon-reload.c
+++ b/src/systemctl/systemctl-daemon-reload.c
@@ -6,7 +6,7 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int daemon_reload(int argc, char *argv[], void *userdata) {
+int daemon_reload(enum action action, bool graceful) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         const char *method;
@@ -19,7 +19,7 @@
 
         polkit_agent_open_maybe();
 
-        switch (arg_action) {
+        switch (action) {
 
         case ACTION_RELOAD:
                 method = "Reload";
@@ -29,35 +29,48 @@
                 method = "Reexecute";
                 break;
 
-        case ACTION_SYSTEMCTL:
-                method = streq(argv[0], "daemon-reexec") ? "Reexecute" :
-                                     /* "daemon-reload" */ "Reload";
-                break;
-
         default:
-                assert_not_reached("Unexpected action");
+                return -EINVAL;
         }
 
         r = bus_message_new_method_call(bus, &m, bus_systemd_mgr, method);
         if (r < 0)
                 return bus_log_create_error(r);
 
-        /* Note we use an extra-long timeout here. This is because a reload or reexec means generators are
-         * rerun which are timed out after DEFAULT_TIMEOUT_USEC. Let's use twice that time here, so that the
-         * generators can have their timeout, and for everything else there's the same time budget in
-         * place. */
-
-        r = sd_bus_call(bus, m, DEFAULT_TIMEOUT_USEC * 2, &error, NULL);
+        /* Reloading the daemon may take long, hence set a longer timeout here */
+        r = sd_bus_call(bus, m, DAEMON_RELOAD_TIMEOUT_SEC, &error, NULL);
 
         /* On reexecution, we expect a disconnect, not a reply */
-        if (IN_SET(r, -ETIMEDOUT, -ECONNRESET) && streq(method, "Reexecute"))
-                r = 0;
+        if (IN_SET(r, -ETIMEDOUT, -ECONNRESET) && action == ACTION_REEXEC)
+                return 1;
+        if (r < 0) {
+                if (graceful) { /* If graceful mode is selected, debug log, but don't fail */
+                        log_debug_errno(r, "Failed to reload daemon via the bus, ignoring: %s", bus_error_message(&error, r));
+                        return 0;
+                }
 
-        if (r < 0 && arg_action == ACTION_SYSTEMCTL)
                 return log_error_errno(r, "Failed to reload daemon: %s", bus_error_message(&error, r));
+        }
 
-        /* Note that for the legacy commands (i.e. those with action != ACTION_SYSTEMCTL) we support
-         * fallbacks to the old ways of doing things, hence don't log any error in that case here. */
+        return 1;
+}
 
-        return r < 0 ? r : 0;
+int verb_daemon_reload(int argc, char *argv[], void *userdata) {
+        enum action a;
+        int r;
+
+        assert(argc >= 1);
+
+        if (streq(argv[0], "daemon-reexec"))
+                a = ACTION_REEXEC;
+        else if (streq(argv[0], "daemon-reload"))
+                a = ACTION_RELOAD;
+        else
+                assert_not_reached();
+
+        r = daemon_reload(a, /* graceful= */ false);
+        if (r < 0)
+                return r;
+
+        return 0;
 }
diff --git a/src/systemctl/systemctl-daemon-reload.h b/src/systemctl/systemctl-daemon-reload.h
index a9fc007..ced34ce 100644
--- a/src/systemctl/systemctl-daemon-reload.h
+++ b/src/systemctl/systemctl-daemon-reload.h
@@ -1,4 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int daemon_reload(int argc, char *argv[], void *userdata);
+#include "systemctl.h"
+
+int daemon_reload(enum action, bool graceful);
+
+int verb_daemon_reload(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c
index 8765085..df01667 100644
--- a/src/systemctl/systemctl-edit.c
+++ b/src/systemctl/systemctl-edit.c
@@ -5,7 +5,7 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "pager.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -19,14 +19,13 @@
 #include "terminal-util.h"
 #include "tmpfile-util.h"
 
-#define EDIT_MARKER_START "### Anything between here and the comment below will become the new contents of the file"
-#define EDIT_MARKER_END "### Lines below this comment will be discarded"
+#define EDIT_MARKER_START "### Anything between here and the comment below will become the contents of the drop-in file"
+#define EDIT_MARKER_END "### Edits below this comment will be discarded"
 
-int cat(int argc, char *argv[], void *userdata) {
+int verb_cat(int argc, char *argv[], void *userdata) {
         _cleanup_(hashmap_freep) Hashmap *cached_name_map = NULL, *cached_id_map = NULL;
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_strv_free_ char **names = NULL;
-        char **name;
         sd_bus *bus;
         bool first = true;
         int r, rc = 0;
@@ -38,9 +37,9 @@
         if (arg_transport != BUS_TRANSPORT_LOCAL)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot remotely cat units.");
 
-        r = lookup_paths_init(&lp, arg_scope, 0, arg_root);
+        r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root);
         if (r < 0)
-                return log_error_errno(r, "Failed to determine unit paths: %m");
+                return r;
 
         r = acquire_bus(BUS_MANAGER, &bus);
         if (r < 0)
@@ -54,7 +53,7 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         STRV_FOREACH(name, names) {
                 _cleanup_free_ char *fragment_path = NULL;
@@ -100,7 +99,7 @@
                                 ansi_highlight_red(),
                                 ansi_highlight_red(),
                                 ansi_highlight_red(),
-                                arg_scope == UNIT_FILE_SYSTEM ? "" : " --user",
+                                arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user",
                                 ansi_normal());
 
                 r = cat_files(fragment_path, dropin_paths, 0);
@@ -111,12 +110,20 @@
         return rc;
 }
 
-static int create_edit_temp_file(const char *new_path, const char *original_path, char ** const original_unit_paths, char **ret_tmp_fn) {
+static int create_edit_temp_file(
+                const char *new_path,
+                const char *original_path,
+                char ** const original_unit_paths,
+                char **ret_tmp_fn,
+                unsigned *ret_edit_line) {
+
         _cleanup_free_ char *t = NULL;
+        unsigned ln = 1;
         int r;
 
         assert(new_path);
         assert(ret_tmp_fn);
+        assert(ret_edit_line);
 
         r = tempfn_random(new_path, NULL, &t);
         if (r < 0)
@@ -145,7 +152,6 @@
         } else if (original_unit_paths) {
                 _cleanup_free_ char *new_contents = NULL;
                 _cleanup_fclose_ FILE *f = NULL;
-                char **path;
 
                 r = mac_selinux_create_file_prepare(new_path, S_IFREG);
                 if (r < 0)
@@ -156,8 +162,7 @@
                 if (!f)
                         return log_error_errno(errno, "Failed to open \"%s\": %m", t);
 
-                r = fchmod(fileno(f), 0644);
-                if (r < 0)
+                if (fchmod(fileno(f), 0644) < 0)
                         return log_error_errno(errno, "Failed to change mode of \"%s\": %m", t);
 
                 r = read_full_file(new_path, &new_contents, NULL);
@@ -166,13 +171,17 @@
 
                 fprintf(f,
                         "### Editing %s\n"
-                        EDIT_MARKER_START
-                        "\n\n%s%s\n"
+                        EDIT_MARKER_START "\n"
+                        "\n"
+                        "%s%s"
+                        "\n"
                         EDIT_MARKER_END,
                         new_path,
                         strempty(new_contents),
                         new_contents && endswith(new_contents, "\n") ? "" : "\n");
 
+                ln = 4; /* start editing at the contents */
+
                 /* Add a comment with the contents of the original unit files */
                 STRV_FOREACH(path, original_unit_paths) {
                         _cleanup_free_ char *contents = NULL;
@@ -202,6 +211,7 @@
         }
 
         *ret_tmp_fn = TAKE_PTR(t);
+        *ret_edit_line = ln;
 
         return 0;
 }
@@ -224,9 +234,7 @@
                 run = path_join(paths->runtime_config, name);
                 if (!run)
                         return log_oom();
-        }
 
-        if (arg_runtime) {
                 if (access(path, F_OK) >= 0)
                         return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
                                                "Refusing to create \"%s\" because it would be overridden by \"%s\" anyway.",
@@ -239,34 +247,53 @@
         return 0;
 }
 
+typedef struct EditFile {
+        char *path;
+        char *tmp;
+        unsigned line;
+} EditFile;
+
+static void edit_file_free_all(EditFile **f) {
+        if (!f || !*f)
+                return;
+
+        for (EditFile *i = *f; i->path; i++) {
+                free(i->path);
+                free(i->tmp);
+        }
+
+        free(*f);
+}
+
 static int unit_file_create_new(
                 const LookupPaths *paths,
                 const char *unit_name,
                 const char *suffix,
                 char ** const original_unit_paths,
-                char **ret_new_path,
-                char **ret_tmp_path) {
+                EditFile *ret_edit_file) {
 
         _cleanup_free_ char *new_path = NULL, *tmp_path = NULL;
+        unsigned edit_line;
         const char *ending;
         int r;
 
         assert(unit_name);
-        assert(ret_new_path);
-        assert(ret_tmp_path);
+        assert(ret_edit_file);
 
         ending = strjoina(unit_name, suffix);
         r = get_file_to_edit(paths, ending, &new_path);
         if (r < 0)
                 return r;
 
-        r = create_edit_temp_file(new_path, NULL, original_unit_paths, &tmp_path);
+        r = create_edit_temp_file(new_path, NULL, original_unit_paths, &tmp_path, &edit_line);
         if (r < 0)
                 return r;
 
-        *ret_new_path = TAKE_PTR(new_path);
-        *ret_tmp_path = TAKE_PTR(tmp_path);
-
+        *ret_edit_file = (EditFile) {
+                .path = TAKE_PTR(new_path),
+                .tmp = TAKE_PTR(tmp_path),
+                .line = edit_line,
+        };
         return 0;
 }
 
@@ -274,16 +301,15 @@
                 const LookupPaths *paths,
                 const char *unit_name,
                 const char *fragment_path,
-                char **ret_new_path,
-                char **ret_tmp_path) {
+                EditFile *ret_edit_file) {
 
         _cleanup_free_ char *new_path = NULL, *tmp_path = NULL;
+        unsigned edit_line;
         int r;
 
         assert(fragment_path);
         assert(unit_name);
-        assert(ret_new_path);
-        assert(ret_tmp_path);
+        assert(ret_edit_file);
 
         r = get_file_to_edit(paths, unit_name, &new_path);
         if (r < 0)
@@ -299,30 +325,30 @@
                         return log_warning_errno(SYNTHETIC_ERRNO(EKEYREJECTED), "%s skipped.", unit_name);
         }
 
-        r = create_edit_temp_file(new_path, fragment_path, NULL, &tmp_path);
+        r = create_edit_temp_file(new_path, fragment_path, NULL, &tmp_path, &edit_line);
         if (r < 0)
                 return r;
 
-        *ret_new_path = TAKE_PTR(new_path);
-        *ret_tmp_path = TAKE_PTR(tmp_path);
-
+        *ret_edit_file = (EditFile) {
+                .path = TAKE_PTR(new_path),
+                .tmp = TAKE_PTR(tmp_path),
+                .line = edit_line,
+        };
         return 0;
 }
 
-static int run_editor(char **paths) {
+static int run_editor(const EditFile *files) {
         int r;
 
-        assert(paths);
+        assert(files);
 
         r = safe_fork("(editor)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_RLIMIT_NOFILE_SAFE|FORK_LOG|FORK_WAIT, NULL);
         if (r < 0)
                 return r;
         if (r == 0) {
-                char **editor_args = NULL, **tmp_path, **original_path;
                 size_t n_editor_args = 0, i = 1, argc;
-                const char **args, *editor, *p;
-
-                argc = strv_length(paths)/2 + 1;
+                char **editor_args = NULL, **args;
+                const char *editor;
 
                 /* SYSTEMD_EDITOR takes precedence over EDITOR which takes precedence over VISUAL.  If
                  * neither SYSTEMD_EDITOR nor EDITOR nor VISUAL are present, we try to execute well known
@@ -333,17 +359,22 @@
                 if (!editor)
                         editor = getenv("VISUAL");
 
-                if (!isempty(editor)) {
+                if (isempty(editor))
+                        argc = 1;
+                else {
                         editor_args = strv_split(editor, WHITESPACE);
                         if (!editor_args) {
                                 (void) log_oom();
                                 _exit(EXIT_FAILURE);
                         }
                         n_editor_args = strv_length(editor_args);
-                        argc += n_editor_args - 1;
+                        argc = n_editor_args;
                 }
 
-                args = newa(const char*, argc + 1);
+                for (const EditFile *f = files; f->path; f++)
+                        argc += 2;
+
+                args = newa(char*, argc + 1);
 
                 if (n_editor_args > 0) {
                         args[0] = editor_args[0];
@@ -351,48 +382,83 @@
                                 args[i] = editor_args[i];
                 }
 
-                STRV_FOREACH_PAIR(original_path, tmp_path, paths)
-                        args[i++] = *tmp_path;
+                if (files[0].path && files[0].line > 1 && !files[1].path) {
+                        /* If editing a single file only, use the +LINE syntax to put cursor on the right line */
+                        if (asprintf(args + i, "+%u", files[0].line) < 0) {
+                                (void) log_oom();
+                                _exit(EXIT_FAILURE);
+                        }
+
+                        i++;
+                        args[i++] = files[0].tmp;
+                } else
+                        for (const EditFile *f = files; f->path; f++)
+                                args[i++] = f->tmp;
+
                 args[i] = NULL;
 
                 if (n_editor_args > 0)
                         execvp(args[0], (char* const*) args);
 
-                FOREACH_STRING(p, "editor", "nano", "vim", "vi") {
-                        args[0] = p;
-                        execvp(p, (char* const*) args);
+                FOREACH_STRING(name, "editor", "nano", "vim", "vi") {
+                        args[0] = (char*) name;
+                        execvp(name, (char* const*) args);
                         /* We do not fail if the editor doesn't exist because we want to try each one of them
                          * before failing. */
                         if (errno != ENOENT) {
-                                log_error_errno(errno, "Failed to execute %s: %m", editor);
+                                log_error_errno(errno, "Failed to execute %s: %m", name);
                                 _exit(EXIT_FAILURE);
                         }
                 }
 
-                log_error("Cannot edit unit(s), no editor available. Please set either $SYSTEMD_EDITOR, $EDITOR or $VISUAL.");
+                log_error("Cannot edit units, no editor available. Please set either $SYSTEMD_EDITOR, $EDITOR or $VISUAL.");
                 _exit(EXIT_FAILURE);
         }
 
         return 0;
 }
 
-static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) {
+static int find_paths_to_edit(
+                sd_bus *bus,
+                char **names,
+                EditFile **ret_edit_files) {
+
         _cleanup_(hashmap_freep) Hashmap *cached_name_map = NULL, *cached_id_map = NULL;
+        _cleanup_(edit_file_free_all) EditFile *edit_files = NULL;
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
-        char **name;
+        _cleanup_free_ char *drop_in_alloc = NULL, *suffix = NULL;
+        const char *drop_in;
+        size_t n_edit_files = 0;
         int r;
 
         assert(names);
-        assert(paths);
+        assert(ret_edit_files);
+
+        if (isempty(arg_drop_in))
+                drop_in = "override.conf";
+        else if (!endswith(arg_drop_in, ".conf")) {
+                drop_in_alloc = strjoin(arg_drop_in, ".conf");
+                if (!drop_in_alloc)
+                        return log_oom();
+
+                drop_in = drop_in_alloc;
+        } else
+                drop_in = arg_drop_in;
+
+        if (!filename_is_valid(drop_in))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid drop-in file name '%s'.", drop_in);
+
+        suffix = strjoin(".d/", drop_in);
+        if (!suffix)
+                return log_oom();
 
         r = lookup_paths_init(&lp, arg_scope, 0, arg_root);
         if (r < 0)
                 return r;
 
         STRV_FOREACH(name, names) {
-                _cleanup_free_ char *path = NULL, *new_path = NULL, *tmp_path = NULL, *tmp_name = NULL;
+                _cleanup_free_ char *path = NULL;
                 _cleanup_strv_free_ char **unit_paths = NULL;
-                const char *unit_name;
 
                 r = unit_find_paths(bus, *name, &lp, false, &cached_name_map, &cached_id_map, &path, &unit_paths);
                 if (r == -EKEYREJECTED) {
@@ -406,26 +472,36 @@
                 if (r < 0)
                         return r;
 
+                if (!GREEDY_REALLOC0(edit_files, n_edit_files + 2))
+                        return log_oom();
+
                 if (!path) {
                         if (!arg_force) {
                                 log_info("Run 'systemctl edit%s --force --full %s' to create a new unit.",
-                                         arg_scope == UNIT_FILE_GLOBAL ? " --global" :
-                                         arg_scope == UNIT_FILE_USER ? " --user" : "",
+                                         arg_scope == LOOKUP_SCOPE_GLOBAL ? " --global" :
+                                         arg_scope == LOOKUP_SCOPE_USER ? " --user" : "",
                                          *name);
                                 return -ENOENT;
                         }
 
                         /* Create a new unit from scratch */
-                        unit_name = *name;
-                        r = unit_file_create_new(&lp, unit_name,
-                                                 arg_full ? NULL : ".d/override.conf",
-                                                 NULL, &new_path, &tmp_path);
+                        r = unit_file_create_new(
+                                        &lp,
+                                        *name,
+                                        arg_full ? NULL : suffix,
+                                        NULL,
+                                        edit_files + n_edit_files);
                 } else {
-                        unit_name = basename(path);
+                        _cleanup_free_ char *unit_name = NULL;
+
+                        r = path_extract_filename(path, &unit_name);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to extract unit name from path '%s': %m", path);
+
                         /* We follow unit aliases, but we need to propagate the instance */
                         if (unit_name_is_valid(*name, UNIT_NAME_INSTANCE) &&
                             unit_name_is_valid(unit_name, UNIT_NAME_TEMPLATE)) {
-                                _cleanup_free_ char *instance = NULL;
+                                _cleanup_free_ char *instance = NULL, *tmp_name = NULL;
 
                                 r = unit_name_to_instance(*name, &instance);
                                 if (r < 0)
@@ -435,73 +511,81 @@
                                 if (r < 0)
                                         return r;
 
-                                unit_name = tmp_name;
+                                free_and_replace(unit_name, tmp_name);
                         }
 
                         if (arg_full)
-                                r = unit_file_create_copy(&lp, unit_name, path, &new_path, &tmp_path);
+                                r = unit_file_create_copy(
+                                                &lp,
+                                                unit_name,
+                                                path,
+                                                edit_files + n_edit_files);
                         else {
                                 r = strv_prepend(&unit_paths, path);
                                 if (r < 0)
                                         return log_oom();
 
-                                r = unit_file_create_new(&lp, unit_name, ".d/override.conf", unit_paths, &new_path, &tmp_path);
+                                r = unit_file_create_new(
+                                                &lp,
+                                                unit_name,
+                                                suffix,
+                                                unit_paths,
+                                                edit_files + n_edit_files);
                         }
                 }
                 if (r < 0)
                         return r;
 
-                r = strv_push_pair(paths, new_path, tmp_path);
-                if (r < 0)
-                        return log_oom();
-
-                new_path = tmp_path = NULL;
+                n_edit_files++;
         }
 
+        *ret_edit_files = n_edit_files > 0 ? TAKE_PTR(edit_files) : NULL;
         return 0;
 }
 
 static int trim_edit_markers(const char *path) {
-        _cleanup_free_ char *contents = NULL;
-        char *contents_start = NULL;
-        const char *contents_end = NULL;
-        size_t size;
+        _cleanup_free_ char *old_contents = NULL, *new_contents = NULL;
+        char *contents_start, *contents_end;
+        const char *c = NULL;
         int r;
 
         /* Trim out the lines between the two markers */
-        r = read_full_file(path, &contents, NULL);
+        r = read_full_file(path, &old_contents, NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to read temporary file \"%s\": %m", path);
 
-        size = strlen(contents);
-
-        contents_start = strstr(contents, EDIT_MARKER_START);
+        contents_start = strstr(old_contents, EDIT_MARKER_START);
         if (contents_start)
                 contents_start += strlen(EDIT_MARKER_START);
         else
-                contents_start = contents;
+                contents_start = old_contents;
 
         contents_end = strstr(contents_start, EDIT_MARKER_END);
         if (contents_end)
-                strshorten(contents_start, contents_end - contents_start);
+                contents_end[0] = 0;
 
-        contents_start = strstrip(contents_start);
+        c = strstrip(contents_start);
+        if (isempty(c))
+                return 0; /* All gone now */
 
-        /* Write new contents if the trimming actually changed anything */
-        if (strlen(contents) != size) {
-                r = write_string_file(path, contents_start, WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_TRUNCATE | WRITE_STRING_FILE_AVOID_NEWLINE);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to modify temporary file \"%s\": %m", path);
-        }
+        new_contents = strjoin(c, "\n"); /* Trim prefix and suffix, but ensure suffixed by single newline */
+        if (!new_contents)
+                return log_oom();
 
-        return 0;
+        if (streq(old_contents, new_contents)) /* Don't touch the file if the above didn't change a thing */
+                return 1; /* Unchanged, but good */
+
+        r = write_string_file(path, new_contents, WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_TRUNCATE | WRITE_STRING_FILE_AVOID_NEWLINE);
+        if (r < 0)
+                return log_error_errno(r, "Failed to modify temporary file \"%s\": %m", path);
+
+        return 1; /* Changed, but good */
 }
 
-int edit(int argc, char *argv[], void *userdata) {
+int verb_edit(int argc, char *argv[], void *userdata) {
+        _cleanup_(edit_file_free_all) EditFile *edit_files = NULL;
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_strv_free_ char **names = NULL;
-        _cleanup_strv_free_ char **paths = NULL;
-        char **original, **tmp;
         sd_bus *bus;
         int r;
 
@@ -511,9 +595,9 @@
         if (arg_transport != BUS_TRANSPORT_LOCAL)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot edit units remotely.");
 
-        r = lookup_paths_init(&lp, arg_scope, 0, arg_root);
+        r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root);
         if (r < 0)
-                return log_error_errno(r, "Failed to determine unit paths: %m");
+                return r;
 
         r = mac_selinux_init();
         if (r < 0)
@@ -537,52 +621,56 @@
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot edit %s: unit is masked.", *tmp);
         }
 
-        r = find_paths_to_edit(bus, names, &paths);
+        r = find_paths_to_edit(bus, names, &edit_files);
         if (r < 0)
                 return r;
-
-        if (strv_isempty(paths))
+        if (!edit_files)
                 return -ENOENT;
 
-        r = run_editor(paths);
+        r = run_editor(edit_files);
         if (r < 0)
                 goto end;
 
-        STRV_FOREACH_PAIR(original, tmp, paths) {
+        for (EditFile *f = edit_files; f->path; f++) {
                 /* If the temporary file is empty we ignore it. This allows the user to cancel the
                  * modification. */
-                r = trim_edit_markers(*tmp);
+                r = trim_edit_markers(f->tmp);
                 if (r < 0)
+                        goto end;
+                if (r == 0) /* has no actual contents? then ignore it */
                         continue;
 
-                if (null_or_empty_path(*tmp)) {
-                        log_warning("Editing \"%s\" canceled: temporary file is empty.", *original);
-                        continue;
-                }
-
-                r = rename(*tmp, *original);
+                r = RET_NERRNO(rename(f->tmp, f->path));
                 if (r < 0) {
-                        r = log_error_errno(errno, "Failed to rename \"%s\" to \"%s\": %m", *tmp, *original);
+                        log_error_errno(r, "Failed to rename \"%s\" to \"%s\": %m", f->tmp, f->path);
                         goto end;
                 }
+
+                f->tmp = mfree(f->tmp);
+                log_info("Successfully installed edited file '%s'.", f->path);
         }
 
         r = 0;
 
-        if (!arg_no_reload && !install_client_side())
-                r = daemon_reload(argc, argv, userdata);
+        if (!arg_no_reload && !install_client_side()) {
+                r = daemon_reload(ACTION_RELOAD, /* graceful= */ false);
+                if (r > 0)
+                        r = 0;
+        }
 
 end:
-        STRV_FOREACH_PAIR(original, tmp, paths) {
-                (void) unlink(*tmp);
+        for (EditFile *f = ASSERT_PTR(edit_files); f->path; f++) {
+
+                if (f->tmp)
+                        (void) unlink(f->tmp);
 
                 /* Removing empty dropin dirs */
                 if (!arg_full) {
                         _cleanup_free_ char *dir = NULL;
 
-                        dir = dirname_malloc(*original);
-                        if (!dir)
-                                return log_oom();
+                        r = path_extract_directory(f->path, &dir);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to extract directory from '%s': %m", f->path);
 
                         /* No need to check if the dir is empty, rmdir does nothing if it is not the case. */
                         (void) rmdir(dir);
diff --git a/src/systemctl/systemctl-edit.h b/src/systemctl/systemctl-edit.h
index fe7e4dc..10dac5c 100644
--- a/src/systemctl/systemctl-edit.h
+++ b/src/systemctl/systemctl-edit.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int cat(int argc, char *argv[], void *userdata);
-int edit(int argc, char *argv[], void *userdata);
+int verb_cat(int argc, char *argv[], void *userdata);
+int verb_edit(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-enable.c b/src/systemctl/systemctl-enable.c
index 8f053ca..f94a286 100644
--- a/src/systemctl/systemctl-enable.c
+++ b/src/systemctl/systemctl-enable.c
@@ -12,7 +12,6 @@
 #include "systemctl.h"
 
 static int normalize_filenames(char **names) {
-        char **u;
         int r;
 
         STRV_FOREACH(u, names)
@@ -24,9 +23,10 @@
                                                        "Non-absolute paths are not allowed when --root is used: %s",
                                                        *u);
 
-                        if (!strchr(*u,'/'))
+                        if (!strchr(*u, '/'))
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Link argument does contain at least one directory separator: %s",
+                                                       "Link argument must contain at least one directory separator.\n"
+                                                       "If you intended to link a file in the current directory, try ./%s instead.",
                                                        *u);
 
                         r = path_make_absolute_cwd(*u, &normalized_path);
@@ -39,8 +39,7 @@
         return 0;
 }
 
-static int normalize_names(char **names, bool warn_if_path) {
-        char **u;
+static int normalize_names(char **names) {
         bool was_path = false;
 
         STRV_FOREACH(u, names) {
@@ -56,19 +55,19 @@
                 was_path = true;
         }
 
-        if (warn_if_path && was_path)
+        if (was_path)
                 log_warning("Warning: Can't execute disable on the unit file path. Proceeding with the unit name.");
 
         return 0;
 }
 
-int enable_unit(int argc, char *argv[], void *userdata) {
+int verb_enable(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
         const char *verb = argv[0];
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         int carries_install_info = -1;
-        bool ignore_carries_install_info = arg_quiet;
+        bool ignore_carries_install_info = arg_quiet || arg_no_warn;
         int r;
 
         if (!argv[1])
@@ -86,11 +85,13 @@
         if (strv_isempty(names)) {
                 if (arg_no_reload || install_client_side())
                         return 0;
-                return daemon_reload(argc, argv, userdata);
+
+                r = daemon_reload(ACTION_RELOAD, /* graceful= */ false);
+                return r > 0 ? 0 : r;
         }
 
         if (streq(verb, "disable")) {
-                r = normalize_names(names, true);
+                r = normalize_names(names);
                 if (r < 0)
                         return r;
         }
@@ -108,25 +109,26 @@
                 if (streq(verb, "enable")) {
                         r = unit_file_enable(arg_scope, flags, arg_root, names, &changes, &n_changes);
                         carries_install_info = r;
-                } else if (streq(verb, "disable"))
+                } else if (streq(verb, "disable")) {
                         r = unit_file_disable(arg_scope, flags, arg_root, names, &changes, &n_changes);
-                else if (streq(verb, "reenable")) {
+                        carries_install_info = r;
+                } else if (streq(verb, "reenable")) {
                         r = unit_file_reenable(arg_scope, flags, arg_root, names, &changes, &n_changes);
                         carries_install_info = r;
                 } else if (streq(verb, "link"))
                         r = unit_file_link(arg_scope, flags, arg_root, names, &changes, &n_changes);
-                else if (streq(verb, "preset")) {
+                else if (streq(verb, "preset"))
                         r = unit_file_preset(arg_scope, flags, arg_root, names, arg_preset_mode, &changes, &n_changes);
-                } else if (streq(verb, "mask"))
+                else if (streq(verb, "mask"))
                         r = unit_file_mask(arg_scope, flags, arg_root, names, &changes, &n_changes);
                 else if (streq(verb, "unmask"))
                         r = unit_file_unmask(arg_scope, flags, arg_root, names, &changes, &n_changes);
                 else if (streq(verb, "revert"))
                         r = unit_file_revert(arg_scope, arg_root, names, &changes, &n_changes);
                 else
-                        assert_not_reached("Unknown verb");
+                        assert_not_reached();
 
-                unit_file_dump_changes(r, verb, changes, n_changes, arg_quiet);
+                install_changes_dump(r, verb, changes, n_changes, arg_quiet);
                 if (r < 0)
                         goto finish;
                 r = 0;
@@ -139,10 +141,9 @@
                 sd_bus *bus;
 
                 if (STR_IN_SET(verb, "mask", "unmask")) {
-                        char **name;
                         _cleanup_(lookup_paths_free) LookupPaths lp = {};
 
-                        r = lookup_paths_init(&lp, arg_scope, 0, arg_root);
+                        r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root);
                         if (r < 0)
                                 return r;
 
@@ -165,7 +166,8 @@
                         method = "EnableUnitFiles";
                         expect_carries_install_info = true;
                 } else if (streq(verb, "disable")) {
-                        method = "DisableUnitFiles";
+                        method = "DisableUnitFilesWithFlagsAndInstallInfo";
+                        expect_carries_install_info = true;
                         send_force = false;
                 } else if (streq(verb, "reenable")) {
                         method = "ReenableUnitFiles";
@@ -191,7 +193,7 @@
                         method = "RevertUnitFiles";
                         send_runtime = send_force = false;
                 } else
-                        assert_not_reached("Unknown verb");
+                        assert_not_reached();
 
                 r = bus_message_new_method_call(bus, &m, bus_systemd_mgr, method);
                 if (r < 0)
@@ -208,7 +210,10 @@
                 }
 
                 if (send_runtime) {
-                        r = sd_bus_message_append(m, "b", arg_runtime);
+                        if (streq(method, "DisableUnitFilesWithFlagsAndInstallInfo"))
+                                r = sd_bus_message_append(m, "t", arg_runtime ? (uint64_t) UNIT_FILE_RUNTIME : UINT64_C(0));
+                        else
+                                r = sd_bus_message_append(m, "b", arg_runtime);
                         if (r < 0)
                                 return bus_log_create_error(r);
                 }
@@ -234,16 +239,18 @@
                         goto finish;
 
                 /* Try to reload if enabled */
-                if (!arg_no_reload)
-                        r = daemon_reload(argc, argv, userdata);
-                else
+                if (!arg_no_reload) {
+                        r = daemon_reload(ACTION_RELOAD, /* graceful= */ false);
+                        if (r > 0)
+                                r = 0;
+                } else
                         r = 0;
         }
 
         if (carries_install_info == 0 && !ignore_carries_install_info)
                 log_notice("The unit files have no installation config (WantedBy=, RequiredBy=, Also=,\n"
                            "Alias= settings in the [Install] section, and DefaultInstance= for template\n"
-                           "units). This means they are not meant to be enabled using systemctl.\n"
+                           "units). This means they are not meant to be enabled or disabled using systemctl.\n"
                            " \n" /* trick: the space is needed so that the line does not get stripped from output */
                            "Possible reasons for having this kind of units are:\n"
                            "%1$s A unit may be statically enabled by being symlinked from another unit's\n"
@@ -273,12 +280,12 @@
                                 new_args[i + 1] = basename(names[i]);
                         new_args[i + 1] = NULL;
 
-                        r = start_unit(len + 1, new_args, userdata);
+                        r = verb_start(len + 1, new_args, userdata);
                 }
         }
 
 finish:
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
         return r;
 }
diff --git a/src/systemctl/systemctl-enable.h b/src/systemctl/systemctl-enable.h
index 43f60e7..f04bbcd 100644
--- a/src/systemctl/systemctl-enable.h
+++ b/src/systemctl/systemctl-enable.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int enable_unit(int argc, char *argv[], void *userdata);
+int verb_enable(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-is-active.c b/src/systemctl/systemctl-is-active.c
index d83736e..15e366c 100644
--- a/src/systemctl/systemctl-is-active.c
+++ b/src/systemctl/systemctl-is-active.c
@@ -13,9 +13,8 @@
         _cleanup_strv_free_ char **names = NULL;
         UnitActiveState active_state;
         sd_bus *bus;
-        char **name;
+        bool not_found = true, ok = false;
         int r;
-        bool found = false;
 
         r = acquire_bus(BUS_MANAGER, &bus);
         if (r < 0)
@@ -26,24 +25,35 @@
                 return log_error_errno(r, "Failed to expand names: %m");
 
         STRV_FOREACH(name, names) {
+                _cleanup_free_ char *load_state = NULL;
+
                 r = get_state_one_unit(bus, *name, &active_state);
                 if (r < 0)
                         return r;
 
+                r = unit_load_state(bus, *name, &load_state);
+                if (r < 0)
+                        return r;
+
                 if (!arg_quiet)
                         puts(unit_active_state_to_string(active_state));
 
                 for (int i = 0; i < nb_states; ++i)
-                        if (good_states[i] == active_state)
-                                found = true;
+                        if (good_states[i] == active_state) {
+                                ok = true;
+                                break;
+                        }
+
+                if (!streq(load_state, "not-found"))
+                        not_found = false;
         }
 
-        /* use the given return code for the case that we won't find
-         * any unit which matches the list */
-        return found ? 0 : code;
+        /* We use LSB code 4 ("program or service status is unknown")
+         * when the corresponding unit file doesn't exist. */
+        return ok ? EXIT_SUCCESS : not_found ? EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN : code;
 }
 
-int check_unit_active(int argc, char *argv[], void *userdata) {
+int verb_is_active(int argc, char *argv[], void *userdata) {
         static const UnitActiveState states[] = {
                 UNIT_ACTIVE,
                 UNIT_RELOADING,
@@ -53,7 +63,7 @@
         return check_unit_generic(EXIT_PROGRAM_NOT_RUNNING, states, ELEMENTSOF(states), strv_skip(argv, 1));
 }
 
-int check_unit_failed(int argc, char *argv[], void *userdata) {
+int verb_is_failed(int argc, char *argv[], void *userdata) {
         static const UnitActiveState states[] = {
                 UNIT_FAILED,
         };
diff --git a/src/systemctl/systemctl-is-active.h b/src/systemctl/systemctl-is-active.h
index 9a5238e..950f29a 100644
--- a/src/systemctl/systemctl-is-active.h
+++ b/src/systemctl/systemctl-is-active.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int check_unit_active(int argc, char *argv[], void *userdata);
-int check_unit_failed(int argc, char *argv[], void *userdata);
+int verb_is_active(int argc, char *argv[], void *userdata);
+int verb_is_failed(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-is-enabled.c b/src/systemctl/systemctl-is-enabled.c
index e33dffa..e3bfd62 100644
--- a/src/systemctl/systemctl-is-enabled.c
+++ b/src/systemctl/systemctl-is-enabled.c
@@ -8,7 +8,7 @@
 #include "systemctl.h"
 
 static int show_installation_targets_client_side(const char *name) {
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         UnitFileFlags flags;
         char **p;
@@ -18,12 +18,12 @@
         flags = UNIT_FILE_DRY_RUN |
                 (arg_runtime ? UNIT_FILE_RUNTIME : 0);
 
-        r = unit_file_disable(UNIT_FILE_SYSTEM, flags, NULL, p, &changes, &n_changes);
+        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, flags, NULL, p, &changes, &n_changes);
         if (r < 0)
                 return log_error_errno(r, "Failed to get file links for %s: %m", name);
 
         for (size_t i = 0; i < n_changes; i++)
-                if (changes[i].type_or_errno == UNIT_FILE_UNLINK)
+                if (changes[i].type == INSTALL_CHANGE_UNLINK)
                         printf("  %s\n", changes[i].path);
 
         return 0;
@@ -56,10 +56,9 @@
         return 0;
 }
 
-int unit_is_enabled(int argc, char *argv[], void *userdata) {
+int verb_is_enabled(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
-        bool enabled;
-        char **name;
+        bool not_found, enabled;
         int r;
 
         r = mangle_names("to check", strv_skip(argv, 1), &names);
@@ -70,15 +69,22 @@
         if (r < 0)
                 return r;
 
-        enabled = r > 0;
+        not_found = r == 0; /* Doesn't have SysV support or SYSV_UNIT_NOT_FOUND */
+        enabled = r == SYSV_UNIT_ENABLED;
 
         if (install_client_side()) {
                 STRV_FOREACH(name, names) {
                         UnitFileState state;
 
                         r = unit_file_get_state(arg_scope, arg_root, *name, &state);
-                        if (r < 0)
+                        if (r == -ENOENT) {
+                                if (!arg_quiet)
+                                        puts("not-found");
+                                continue;
+                        } else if (r < 0)
                                 return log_error_errno(r, "Failed to get unit file state for %s: %m", *name);
+                        else
+                                not_found = false;
 
                         if (IN_SET(state,
                                    UNIT_FILE_ENABLED,
@@ -113,8 +119,19 @@
                         const char *s;
 
                         r = bus_call_method(bus, bus_systemd_mgr, "GetUnitFileState", &error, &reply, "s", *name);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to get unit file state for %s: %s", *name, bus_error_message(&error, r));
+                        if (r == -ENOENT) {
+                                sd_bus_error_free(&error);
+
+                                if (!arg_quiet)
+                                        puts("not-found");
+                                continue;
+                        } else if (r < 0)
+                                return log_error_errno(r,
+                                                       "Failed to get unit file state for %s: %s",
+                                                       *name,
+                                                       bus_error_message(&error, r));
+                        else
+                                not_found = false;
 
                         r = sd_bus_message_read(reply, "s", &s);
                         if (r < 0)
@@ -134,5 +151,5 @@
                 }
         }
 
-        return enabled ? EXIT_SUCCESS : EXIT_FAILURE;
+        return enabled ? EXIT_SUCCESS : not_found ? EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN : EXIT_FAILURE;
 }
diff --git a/src/systemctl/systemctl-is-enabled.h b/src/systemctl/systemctl-is-enabled.h
index 5cb9e5c..96dff95 100644
--- a/src/systemctl/systemctl-is-enabled.h
+++ b/src/systemctl/systemctl-is-enabled.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int unit_is_enabled(int argc, char *argv[], void *userdata);
+int verb_is_enabled(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-is-system-running.c b/src/systemctl/systemctl-is-system-running.c
index ecebf0d..6b521c9 100644
--- a/src/systemctl/systemctl-is-system-running.c
+++ b/src/systemctl/systemctl-is-system-running.c
@@ -12,18 +12,16 @@
 #include "bus-error.h"
 
 static int match_startup_finished(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        char **state = userdata;
+        char **state = ASSERT_PTR(userdata);
         int r;
 
-        assert(state);
-
         r = bus_get_property_string(sd_bus_message_get_bus(m), bus_systemd_mgr, "SystemState", NULL, state);
 
         sd_event_exit(sd_bus_get_event(sd_bus_message_get_bus(m)), r);
         return 0;
 }
 
-int is_system_running(int argc, char *argv[], void *userdata) {
+int verb_is_system_running(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_slot_unrefp) sd_bus_slot *slot_startup_finished = NULL;
         _cleanup_(sd_event_unrefp) sd_event* event = NULL;
diff --git a/src/systemctl/systemctl-is-system-running.h b/src/systemctl/systemctl-is-system-running.h
index 3d7e9fb..de86211 100644
--- a/src/systemctl/systemctl-is-system-running.h
+++ b/src/systemctl/systemctl-is-system-running.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int is_system_running(int argc, char *argv[], void *userdata);
+int verb_is_system_running(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-kill.c b/src/systemctl/systemctl-kill.c
index 489e754..b3ae8bb 100644
--- a/src/systemctl/systemctl-kill.c
+++ b/src/systemctl/systemctl-kill.c
@@ -6,9 +6,9 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int kill_unit(int argc, char *argv[], void *userdata) {
+int verb_kill(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
-        char *kill_who = NULL, **name;
+        char *kill_whom = NULL;
         sd_bus *bus;
         int r, q;
 
@@ -18,12 +18,12 @@
 
         polkit_agent_open_maybe();
 
-        if (!arg_kill_who)
-                arg_kill_who = "all";
+        if (!arg_kill_whom)
+                arg_kill_whom = "all";
 
         /* --fail was specified */
         if (streq(arg_job_mode(), "fail"))
-                kill_who = strjoina(arg_kill_who, "-fail");
+                kill_whom = strjoina(arg_kill_whom, "-fail");
 
         r = expand_unit_names(bus, strv_skip(argv, 1), NULL, &names, NULL);
         if (r < 0)
@@ -38,7 +38,7 @@
                                 "KillUnit",
                                 &error,
                                 NULL,
-                                "ssi", *name, kill_who ? kill_who : arg_kill_who, arg_signal);
+                                "ssi", *name, kill_whom ?: arg_kill_whom, arg_signal);
                 if (q < 0) {
                         log_error_errno(q, "Failed to kill unit %s: %s", *name, bus_error_message(&error, q));
                         if (r == 0)
diff --git a/src/systemctl/systemctl-kill.h b/src/systemctl/systemctl-kill.h
index a42d4f1..88b2eae 100644
--- a/src/systemctl/systemctl-kill.h
+++ b/src/systemctl/systemctl-kill.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int kill_unit(int argc, char *argv[], void *userdata);
+int verb_kill(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c
index 5d19f33..1da5cf5 100644
--- a/src/systemctl/systemctl-list-dependencies.c
+++ b/src/systemctl/systemctl-list-dependencies.c
@@ -63,8 +63,8 @@
                 unsigned branches) {
 
         _cleanup_strv_free_ char **deps = NULL;
-        char **c;
         int r;
+        bool circular = false;
 
         assert(bus);
         assert(name);
@@ -81,24 +81,39 @@
         typesafe_qsort(deps, strv_length(deps), list_dependencies_compare);
 
         STRV_FOREACH(c, deps) {
+                _cleanup_free_ char *load_state = NULL, *sub_state = NULL;
+                UnitActiveState active_state;
+
                 if (strv_contains(*units, *c)) {
-                        if (!arg_plain) {
-                                printf("  ");
-                                r = list_dependencies_print("...", level + 1, (branches << 1) | (c[1] == NULL ? 0 : 1), 1);
-                                if (r < 0)
-                                        return r;
-                        }
+                        circular = true;
                         continue;
                 }
 
+                if (arg_types && !strv_contains(arg_types, unit_type_suffix(*c)))
+                        continue;
+
+                r = get_state_one_unit(bus, *c, &active_state);
+                if (r < 0)
+                        return r;
+
+                if (arg_states) {
+                        r = unit_load_state(bus, *c, &load_state);
+                        if (r < 0)
+                                return r;
+
+                        r = get_sub_state_one_unit(bus, *c, &sub_state);
+                        if (r < 0)
+                                return r;
+
+                        if (!strv_overlap(arg_states, STRV_MAKE(unit_active_state_to_string(active_state), load_state, sub_state)))
+                                continue;
+                }
+
                 if (arg_plain)
                         printf("  ");
                 else {
-                        UnitActiveState active_state = _UNIT_ACTIVE_STATE_INVALID;
                         const char *on;
 
-                        (void) get_state_one_unit(bus, *c, &active_state);
-
                         switch (active_state) {
                         case UNIT_ACTIVE:
                         case UNIT_RELOADING:
@@ -119,7 +134,7 @@
                         printf("%s%s%s ", on, special_glyph(unit_active_state_to_glyph(active_state)), ansi_normal());
                 }
 
-                r = list_dependencies_print(*c, level, branches, c[1] == NULL);
+                r = list_dependencies_print(*c, level, branches, /* last = */ c[1] == NULL && !circular);
                 if (r < 0)
                         return r;
 
@@ -130,18 +145,28 @@
                 }
         }
 
+        if (circular && !arg_plain) {
+                printf("  ");
+                r = list_dependencies_print("...", level, branches, /* last = */ true);
+                if (r < 0)
+                        return r;
+        }
+
         if (!arg_plain)
                 strv_remove(*units, name);
 
         return 0;
 }
 
-int list_dependencies(int argc, char *argv[], void *userdata) {
+int verb_list_dependencies(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **units = NULL, **done = NULL;
-        char **u, **patterns;
+        char **patterns;
         sd_bus *bus;
         int r;
 
+        /* We won't be able to preserve the tree structure if --type= or --state= is used */
+        arg_plain = arg_plain || arg_types || arg_states;
+
         r = acquire_bus(BUS_MANAGER, &bus);
         if (r < 0)
                 return r;
@@ -157,7 +182,7 @@
                         return log_error_errno(r, "Failed to expand names: %m");
         }
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         STRV_FOREACH(u, units) {
                 if (u != units)
diff --git a/src/systemctl/systemctl-list-dependencies.h b/src/systemctl/systemctl-list-dependencies.h
index 7246570..1e68a5f 100644
--- a/src/systemctl/systemctl-list-dependencies.h
+++ b/src/systemctl/systemctl-list-dependencies.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int list_dependencies(int argc, char *argv[], void *userdata);
+int verb_list_dependencies(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-list-jobs.c b/src/systemctl/systemctl-list-jobs.c
index a050e09..a752173 100644
--- a/src/systemctl/systemctl-list-jobs.c
+++ b/src/systemctl/systemctl-list-jobs.c
@@ -73,7 +73,7 @@
                 return 0;
         }
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         table = table_new("job", "unit", "type", "state");
         if (!table)
@@ -83,7 +83,7 @@
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (const struct job_info *j = jobs; j < jobs + n; j++) {
                 if (streq(j->state, "running"))
@@ -125,7 +125,7 @@
         return strv_fnmatch_or_empty(patterns, job->name, FNM_NOESCAPE);
 }
 
-int list_jobs(int argc, char *argv[], void *userdata) {
+int verb_list_jobs(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_free_ struct job_info *jobs = NULL;
@@ -168,7 +168,7 @@
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         return output_jobs_list(bus, jobs, c, skipped);
 }
diff --git a/src/systemctl/systemctl-list-jobs.h b/src/systemctl/systemctl-list-jobs.h
index aa49696..b10ec79 100644
--- a/src/systemctl/systemctl-list-jobs.h
+++ b/src/systemctl/systemctl-list-jobs.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int list_jobs(int argc, char *argv[], void *userdata);
+int verb_list_jobs(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-list-machines.c b/src/systemctl/systemctl-list-machines.c
index 1a2f2d7..4407d25 100644
--- a/src/systemctl/systemctl-list-machines.c
+++ b/src/systemctl/systemctl-list-machines.c
@@ -15,11 +15,15 @@
 #include "terminal-util.h"
 
 const struct bus_properties_map machine_info_property_map[] = {
-        { "SystemState",        "s", NULL, offsetof(struct machine_info, state)          },
-        { "NJobs",              "u", NULL, offsetof(struct machine_info, n_jobs)         },
-        { "NFailedUnits",       "u", NULL, offsetof(struct machine_info, n_failed_units) },
-        { "ControlGroup",       "s", NULL, offsetof(struct machine_info, control_group)  },
+        /* Might good to keep same order here as in bus_manager_vtable[], server side */
+        { "Version",            "s", NULL, offsetof(struct machine_info, version)        },
+        { "Tainted",            "s", NULL, offsetof(struct machine_info, tainted)        },
         { "UserspaceTimestamp", "t", NULL, offsetof(struct machine_info, timestamp)      },
+        { "NNames",             "u", NULL, offsetof(struct machine_info, n_names)        },
+        { "NFailedUnits",       "u", NULL, offsetof(struct machine_info, n_failed_units) },
+        { "NJobs",              "u", NULL, offsetof(struct machine_info, n_jobs)         },
+        { "ControlGroup",       "s", NULL, offsetof(struct machine_info, control_group)  },
+        { "SystemState",        "s", NULL, offsetof(struct machine_info, state)          },
         {}
 };
 
@@ -27,8 +31,10 @@
         assert(info);
 
         free(info->name);
-        free(info->state);
+        free(info->version);
+        free(info->tainted);
         free(info->control_group);
+        free(info->state);
         zero(*info);
 }
 
@@ -93,7 +99,6 @@
         struct machine_info *machine_infos = NULL;
         _cleanup_strv_free_ char **m = NULL;
         _cleanup_free_ char *hn = NULL;
-        char **i;
         int c = 0, r;
 
         hn = gethostname_malloc();
@@ -166,7 +171,7 @@
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (struct machine_info *m = machine_infos; m < machine_infos + n; m++) {
                 _cleanup_free_ char *mname = NULL;
@@ -219,7 +224,7 @@
         return 0;
 }
 
-int list_machines(int argc, char *argv[], void *userdata) {
+int verb_list_machines(int argc, char *argv[], void *userdata) {
         struct machine_info *machine_infos = NULL;
         sd_bus *bus;
         int r, rc;
@@ -232,7 +237,7 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         typesafe_qsort(machine_infos, r, compare_machine_info);
         rc = output_machines_list(machine_infos, r);
diff --git a/src/systemctl/systemctl-list-machines.h b/src/systemctl/systemctl-list-machines.h
index 4a33e2b..95a6859 100644
--- a/src/systemctl/systemctl-list-machines.h
+++ b/src/systemctl/systemctl-list-machines.h
@@ -7,16 +7,19 @@
 #include "bus-map-properties.h"
 #include "time-util.h"
 
-int list_machines(int argc, char *argv[], void *userdata);
+int verb_list_machines(int argc, char *argv[], void *userdata);
 
 struct machine_info {
         bool is_host;
         char *name;
-        char *state;
-        char *control_group;
+        char *version;
+        char *tainted;
+        uint64_t timestamp;
+        uint32_t n_names;
         uint32_t n_failed_units;
         uint32_t n_jobs;
-        usec_t timestamp;
+        char *control_group;
+        char *state;
 };
 
 void machine_info_clear(struct machine_info *info);
diff --git a/src/systemctl/systemctl-list-unit-files.c b/src/systemctl/systemctl-list-unit-files.c
index fd10e79..96b2204 100644
--- a/src/systemctl/systemctl-list-unit-files.c
+++ b/src/systemctl/systemctl-list-unit-files.c
@@ -38,12 +38,12 @@
                 if (!dot)
                         return false;
 
-                if (!strv_find(arg_types, dot+1))
+                if (!strv_contains(arg_types, dot+1))
                         return false;
         }
 
         if (!strv_isempty(states) &&
-            !strv_find(states, unit_file_state_to_string(u->state)))
+            !strv_contains(states, unit_file_state_to_string(u->state)))
                 return false;
 
         return true;
@@ -54,7 +54,7 @@
         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
         int r;
 
-        table = table_new("unit file", "state", "vendor preset");
+        table = table_new("unit file", "state", "preset");
         if (!table)
                 return log_oom();
 
@@ -62,7 +62,7 @@
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (const UnitFileList *u = units; u < units + c; u++) {
                 const char *on_underline = NULL, *on_unit_color = NULL, *id;
@@ -133,7 +133,7 @@
         return 0;
 }
 
-int list_unit_files(int argc, char *argv[], void *userdata) {
+int verb_list_unit_files(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_free_ UnitFileList *units = NULL;
         unsigned c = 0;
@@ -255,7 +255,7 @@
                         return bus_log_parse_error(r);
         }
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         typesafe_qsort(units, c, compare_unit_file_list);
         r = output_unit_file_list(units, c);
diff --git a/src/systemctl/systemctl-list-unit-files.h b/src/systemctl/systemctl-list-unit-files.h
index 387233e..4819fbd 100644
--- a/src/systemctl/systemctl-list-unit-files.h
+++ b/src/systemctl/systemctl-list-unit-files.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int list_unit_files(int argc, char *argv[], void *userdata);
+int verb_list_unit_files(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-list-units.c b/src/systemctl/systemctl-list-units.c
index 1efb569..6bfaf97 100644
--- a/src/systemctl/systemctl-list-units.c
+++ b/src/systemctl/systemctl-list-units.c
@@ -3,6 +3,7 @@
 #include "sd-login.h"
 
 #include "bus-error.h"
+#include "bus-locator.h"
 #include "format-table.h"
 #include "locale-util.h"
 #include "set.h"
@@ -49,7 +50,6 @@
 
         if (arg_recursive) {
                 _cleanup_strv_free_ char **machines = NULL;
-                char **i;
 
                 r = sd_get_machine_names(&machines);
                 if (r < 0)
@@ -88,9 +88,22 @@
         return c;
 }
 
-static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
+static void output_legend(const char *type, size_t n_items) {
+        const char *on, *off;
+
+        assert(type);
+
+        on = n_items > 0 ? ansi_highlight() : ansi_highlight_red();
+        off = ansi_normal();
+
+        printf("\n%s%zu %ss listed.%s\n", on, n_items, type, off);
+        if (!arg_all)
+                printf("Pass --all to see loaded but inactive %ss, too.\n", type);
+}
+
+static int output_units_list(const UnitInfo *unit_infos, size_t c) {
         _cleanup_(table_unrefp) Table *table = NULL;
-        unsigned job_count = 0;
+        size_t job_count = 0;
         int r;
 
         table = table_new("", "unit", "load", "active", "sub", "job", "description");
@@ -107,7 +120,7 @@
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (const UnitInfo *u = unit_infos; unit_infos && (size_t) (u - unit_infos) < c; u++) {
                 _cleanup_free_ char *j = NULL;
@@ -188,13 +201,11 @@
                              "SUB    = The low-level unit activation state, values depend on unit type.");
                         if (job_count > 0)
                                 puts("JOB    = Pending job for the unit.\n");
-                        on = ansi_highlight();
-                        off = ansi_normal();
-                } else {
-                        on = ansi_highlight_red();
-                        off = ansi_normal();
                 }
 
+                on = records > 0 ? ansi_highlight() : ansi_highlight_red();
+                off = ansi_normal();
+
                 if (arg_all || strv_contains(arg_states, "inactive"))
                         printf("%s%zu loaded units listed.%s\n"
                                "To show all installed unit files use 'systemctl list-unit-files'.\n",
@@ -210,7 +221,7 @@
         return 0;
 }
 
-int list_units(int argc, char *argv[], void *userdata) {
+int verb_list_units(int argc, char *argv[], void *userdata) {
         _cleanup_free_ UnitInfo *unit_infos = NULL;
         _cleanup_(message_set_freep) Set *replies = NULL;
         _cleanup_strv_free_ char **machines = NULL;
@@ -221,7 +232,7 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         if (arg_with_dependencies) {
                 _cleanup_strv_free_ char **names = NULL;
@@ -349,11 +360,12 @@
         return strcmp(a->type, b->type);
 }
 
-static int output_sockets_list(struct socket_info *socket_infos, unsigned cs) {
+static int output_sockets_list(struct socket_info *socket_infos, size_t cs) {
         _cleanup_(table_unrefp) Table *table = NULL;
-        const char *on, *off;
         int r;
 
+        assert(socket_infos || cs == 0);
+
         table = table_new("listen", "type", "unit", "activates");
         if (!table)
                 return log_oom();
@@ -369,69 +381,57 @@
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
-        if (cs) {
-                for (struct socket_info *s = socket_infos; s < socket_infos + cs; s++) {
-                        _cleanup_free_ char *j = NULL;
-                        const char *path;
+        for (struct socket_info *s = socket_infos; s < socket_infos + cs; s++) {
+                _cleanup_free_ char *j = NULL;
+                const char *path;
 
-                        if (s->machine) {
-                                j = strjoin(s->machine, ":", s->path);
-                                if (!j)
-                                        return log_oom();
-                                path = j;
-                        } else
-                                path = s->path;
+                if (s->machine) {
+                        j = strjoin(s->machine, ":", s->path);
+                        if (!j)
+                                return log_oom();
+                        path = j;
+                } else
+                        path = s->path;
 
-                        r = table_add_many(table,
-                                           TABLE_STRING, path,
-                                           TABLE_STRING, s->type,
-                                           TABLE_STRING, s->id);
-                        if (r < 0)
-                                return table_log_add_error(r);
+                r = table_add_many(table,
+                                        TABLE_STRING, path,
+                                        TABLE_STRING, s->type,
+                                        TABLE_STRING, s->id);
+                if (r < 0)
+                        return table_log_add_error(r);
 
-                        if (strv_isempty(s->triggered))
-                                r = table_add_cell(table, NULL, TABLE_EMPTY, NULL);
-                        else if (strv_length(s->triggered) == 1)
-                                r = table_add_cell(table, NULL, TABLE_STRING, s->triggered[0]);
-                        else
-                                /* This should never happen, currently our socket units can only trigger a
-                                 * single unit. But let's handle this anyway, who knows what the future
-                                 * brings? */
-                                r = table_add_cell(table, NULL, TABLE_STRV, s->triggered);
-                        if (r < 0)
-                                return table_log_add_error(r);
-
-                }
-
-                on = ansi_highlight();
-                off = ansi_normal();
-        } else {
-                on = ansi_highlight_red();
-                off = ansi_normal();
+                if (strv_isempty(s->triggered))
+                        r = table_add_cell(table, NULL, TABLE_EMPTY, NULL);
+                else if (strv_length(s->triggered) == 1)
+                        r = table_add_cell(table, NULL, TABLE_STRING, s->triggered[0]);
+                else
+                        /* This should never happen, currently our socket units can only trigger a
+                                * single unit. But let's handle this anyway, who knows what the future
+                                * brings? */
+                        r = table_add_cell(table, NULL, TABLE_STRV, s->triggered);
+                if (r < 0)
+                        return table_log_add_error(r);
         }
 
         r = output_table(table);
         if (r < 0)
                 return r;
 
-        if (arg_legend != 0) {
-                printf("\n%s%u sockets listed.%s\n", on, cs, off);
-                if (!arg_all)
-                        printf("Pass --all to see loaded but inactive sockets, too.\n");
-        }
+        if (arg_legend != 0)
+                output_legend("socket", cs);
 
         return 0;
 }
 
-int list_sockets(int argc, char *argv[], void *userdata) {
+int verb_list_sockets(int argc, char *argv[], void *userdata) {
         _cleanup_(message_set_freep) Set *replies = NULL;
         _cleanup_strv_free_ char **machines = NULL;
         _cleanup_strv_free_ char **sockets_with_suffix = NULL;
         _cleanup_free_ UnitInfo *unit_infos = NULL;
         _cleanup_free_ struct socket_info *socket_infos = NULL;
-        unsigned cs = 0;
+        size_t cs = 0;
         int r, n;
         sd_bus *bus;
 
@@ -439,7 +439,7 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = expand_unit_names(bus, strv_skip(argv, 1), ".socket", &sockets_with_suffix, NULL);
         if (r < 0)
@@ -598,9 +598,8 @@
         return strcmp(a->id, b->id);
 }
 
-static int output_timers_list(struct timer_info *timer_infos, unsigned n) {
+static int output_timers_list(struct timer_info *timer_infos, size_t n) {
         _cleanup_(table_unrefp) Table *table = NULL;
-        const char *on, *off;
         int r;
 
         assert(timer_infos || n == 0);
@@ -613,7 +612,7 @@
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (struct timer_info *t = timer_infos; t < timer_infos + n; t++) {
                 _cleanup_free_ char *j = NULL, *activates = NULL;
@@ -642,23 +641,12 @@
                         return table_log_add_error(r);
         }
 
-        if (n > 0) {
-                on = ansi_highlight();
-                off = ansi_normal();
-        } else {
-                on = ansi_highlight_red();
-                off = ansi_normal();
-        }
-
         r = output_table(table);
         if (r < 0)
                 return r;
 
-        if (arg_legend != 0) {
-                printf("\n%s%u timers listed.%s\n", on, n, off);
-                if (!arg_all)
-                        printf("Pass --all to see loaded but inactive timers, too.\n");
-        }
+        if (arg_legend != 0)
+                output_legend("timer", n);
 
         return 0;
 }
@@ -688,22 +676,22 @@
         return next_elapse;
 }
 
-int list_timers(int argc, char *argv[], void *userdata) {
+int verb_list_timers(int argc, char *argv[], void *userdata) {
         _cleanup_(message_set_freep) Set *replies = NULL;
         _cleanup_strv_free_ char **machines = NULL;
         _cleanup_strv_free_ char **timers_with_suffix = NULL;
         _cleanup_free_ struct timer_info *timer_infos = NULL;
         _cleanup_free_ UnitInfo *unit_infos = NULL;
-        int n, c = 0;
         dual_timestamp nw;
+        size_t c = 0;
         sd_bus *bus;
-        int r;
+        int n, r;
 
         r = acquire_bus(BUS_MANAGER, &bus);
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = expand_unit_names(bus, strv_skip(argv, 1), ".timer", &timers_with_suffix, NULL);
         if (r < 0)
@@ -761,3 +749,186 @@
 
         return r;
 }
+
+struct automount_info {
+        const char *machine;
+        const char *id;
+        char *what;
+        char *where;
+        usec_t timeout_idle_usec;
+        bool mounted;
+};
+
+static int automount_info_compare(const struct automount_info *a, const struct automount_info *b) {
+        int r;
+
+        assert(a);
+        assert(b);
+
+        r = strcasecmp_ptr(a->machine, b->machine);
+        if (r != 0)
+                return r;
+
+        return strcmp(a->where, b->where);
+}
+
+static int collect_automount_info(sd_bus* bus, const UnitInfo* info, struct automount_info *ret_info) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_free_ char *mount = NULL, *mount_path = NULL, *where = NULL, *what = NULL, *state = NULL;
+        usec_t timeout_idle_usec;
+        BusLocator locator;
+        int r;
+
+        assert(bus);
+        assert(info);
+        assert(ret_info);
+
+        locator = (BusLocator) {
+                .destination = "org.freedesktop.systemd1",
+                .path = info->unit_path,
+                .interface = "org.freedesktop.systemd1.Automount",
+        };
+
+        r = bus_get_property_string(bus, &locator, "Where", &error, &where);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get automount target: %s", bus_error_message(&error, r));
+
+        r = bus_get_property_trivial(bus, &locator, "TimeoutIdleUSec", &error, 't', &timeout_idle_usec);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get idle timeout: %s", bus_error_message(&error, r));
+
+        r = unit_name_from_path(where, ".mount", &mount);
+        if (r < 0)
+                return log_error_errno(r, "Failed to generate unit name from path: %m");
+
+        mount_path = unit_dbus_path_from_name(mount);
+        if (!mount_path)
+                return log_oom();
+
+        locator.path = mount_path;
+        locator.interface = "org.freedesktop.systemd1.Mount";
+
+        r = bus_get_property_string(bus, &locator, "What", &error, &what);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get mount source: %s", bus_error_message(&error, r));
+
+        locator.interface = "org.freedesktop.systemd1.Unit";
+
+        r = bus_get_property_string(bus, &locator, "ActiveState", &error, &state);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get mount state: %s", bus_error_message(&error, r));
+
+        *ret_info = (struct automount_info) {
+                .machine = info->machine,
+                .id = info->id,
+                .what = TAKE_PTR(what),
+                .where = TAKE_PTR(where),
+                .timeout_idle_usec = timeout_idle_usec,
+                .mounted = streq_ptr(state, "active"),
+        };
+
+        return 0;
+}
+
+static int output_automounts_list(struct automount_info *infos, size_t n_infos) {
+        _cleanup_(table_unrefp) Table *table = NULL;
+        int r;
+
+        assert(infos || n_infos == 0);
+
+        table = table_new("what", "where", "mounted", "idle timeout", "unit");
+        if (!table)
+                return log_oom();
+
+        table_set_header(table, arg_legend != 0);
+        if (arg_full)
+                table_set_width(table, 0);
+
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
+
+        for (struct automount_info *info = infos; info < infos + n_infos; info++) {
+                _cleanup_free_ char *j = NULL;
+                const char *unit;
+
+                if (info->machine) {
+                        j = strjoin(info->machine, ":", info->id);
+                        if (!j)
+                                return log_oom();
+                        unit = j;
+                } else
+                        unit = info->id;
+
+                r = table_add_many(table,
+                                   TABLE_STRING, info->what,
+                                   TABLE_STRING, info->where,
+                                   TABLE_BOOLEAN, info->mounted,
+                                   TABLE_TIMESPAN_MSEC, info->timeout_idle_usec,
+                                   TABLE_STRING, unit);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        r = output_table(table);
+        if (r < 0)
+                return r;
+
+        if (arg_legend != 0)
+                output_legend("automount", n_infos);
+
+        return 0;
+}
+
+int verb_list_automounts(int argc, char *argv[], void *userdata) {
+        _cleanup_(message_set_freep) Set *replies = NULL;
+        _cleanup_strv_free_ char **machines = NULL, **automounts = NULL;
+        _cleanup_free_ UnitInfo *unit_infos = NULL;
+        _cleanup_free_ struct automount_info *automount_infos = NULL;
+        size_t c = 0;
+        int r, n;
+        sd_bus *bus;
+
+        r = acquire_bus(BUS_MANAGER, &bus);
+        if (r < 0)
+                return r;
+
+        pager_open(arg_pager_flags);
+
+        r = expand_unit_names(bus, strv_skip(argv, 1), ".automount", &automounts, NULL);
+        if (r < 0)
+                return r;
+
+        if (argc == 1 || automounts) {
+                n = get_unit_list_recursive(bus, automounts, &unit_infos, &replies, &machines);
+                if (n < 0)
+                        return n;
+
+                for (const UnitInfo *u = unit_infos; u < unit_infos + n; u++) {
+                        if (!endswith(u->id, ".automount"))
+                                continue;
+
+                        if (!GREEDY_REALLOC(automount_infos, c + 1)) {
+                                r = log_oom();
+                                goto cleanup;
+                        }
+
+                        r = collect_automount_info(bus, u, &automount_infos[c]);
+                        if (r < 0)
+                                goto cleanup;
+
+                        c++;
+                }
+
+                typesafe_qsort(automount_infos, c, automount_info_compare);
+        }
+
+        output_automounts_list(automount_infos, c);
+
+ cleanup:
+        assert(c == 0 || automount_infos);
+        for (struct automount_info *info = automount_infos; info < automount_infos + c; info++) {
+                free(info->what);
+                free(info->where);
+        }
+
+        return r;
+}
diff --git a/src/systemctl/systemctl-list-units.h b/src/systemctl/systemctl-list-units.h
index ef27627..117b7e3 100644
--- a/src/systemctl/systemctl-list-units.h
+++ b/src/systemctl/systemctl-list-units.h
@@ -1,8 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int list_units(int argc, char *argv[], void *userdata);
-int list_sockets(int argc, char *argv[], void *userdata);
-int list_timers(int argc, char *argv[], void *userdata);
+int verb_list_units(int argc, char *argv[], void *userdata);
+int verb_list_sockets(int argc, char *argv[], void *userdata);
+int verb_list_timers(int argc, char *argv[], void *userdata);
+int verb_list_automounts(int argc, char *argv[], void *userdata);
 
 usec_t calc_next_elapse(dual_timestamp *nw, dual_timestamp *next);
diff --git a/src/systemctl/systemctl-log-setting.c b/src/systemctl/systemctl-log-setting.c
index 9a95c7d..88b2e49 100644
--- a/src/systemctl/systemctl-log-setting.c
+++ b/src/systemctl/systemctl-log-setting.c
@@ -7,6 +7,7 @@
 #include "systemctl-log-setting.h"
 #include "systemctl-util.h"
 #include "systemctl.h"
+#include "verb-log-control.h"
 
 static void give_log_control1_hint(const char *name) {
         _cleanup_free_ char *link = NULL;
@@ -20,55 +21,7 @@
                    "      See the %s for details.", link ?: "org.freedesktop.LogControl1(5) man page");
 }
 
-static int log_setting_internal(sd_bus *bus, const BusLocator* bloc, const char *verb, const char *value) {
-        assert(bus);
-        assert(STR_IN_SET(verb, "log-level", "log-target", "service-log-level", "service-log-target"));
-
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        bool level = endswith(verb, "log-level");
-        int r;
-
-        if (value) {
-                if (level) {
-                        r = log_level_from_string(value);
-                        if (r < 0)
-                                return log_error_errno(r, "\"%s\" is not a valid log level.", value);
-                }
-
-                r = bus_set_property(bus, bloc,
-                                     level ? "LogLevel" : "LogTarget",
-                                     &error, "s", value);
-                if (r >= 0)
-                        return 0;
-
-                log_error_errno(r, "Failed to set log %s of %s to %s: %s",
-                                level ? "level" : "target",
-                                bloc->destination, value, bus_error_message(&error, r));
-        } else {
-                _cleanup_free_ char *t = NULL;
-
-                r = bus_get_property_string(bus, bloc,
-                                            level ? "LogLevel" : "LogTarget",
-                                            &error, &t);
-                if (r >= 0) {
-                        puts(t);
-                        return 0;
-                }
-
-                log_error_errno(r, "Failed to get log %s of %s: %s",
-                                level ? "level" : "target",
-                                bloc->destination, bus_error_message(&error, r));
-        }
-
-        if (sd_bus_error_has_names(&error, SD_BUS_ERROR_UNKNOWN_METHOD,
-                                           SD_BUS_ERROR_UNKNOWN_OBJECT,
-                                           SD_BUS_ERROR_UNKNOWN_INTERFACE,
-                                           SD_BUS_ERROR_UNKNOWN_PROPERTY))
-                give_log_control1_hint(bloc->destination);
-        return r;
-}
-
-int log_setting(int argc, char *argv[], void *userdata) {
+int verb_log_setting(int argc, char *argv[], void *userdata) {
         sd_bus *bus;
         int r;
 
@@ -78,7 +31,7 @@
         if (r < 0)
                 return r;
 
-        return log_setting_internal(bus, bus_systemd_mgr, argv[0], argv[1]);
+        return verb_log_control_common(bus, "org.freedesktop.systemd1", argv[0], argv[1]);
 }
 
 static int service_name_to_dbus(sd_bus *bus, const char *name, char **ret_dbus_name) {
@@ -113,7 +66,7 @@
         return 0;
 }
 
-int service_log_setting(int argc, char *argv[], void *userdata) {
+int verb_service_log_setting(int argc, char *argv[], void *userdata) {
         sd_bus *bus;
         _cleanup_free_ char *unit = NULL, *dbus_name = NULL;
         int r;
@@ -134,11 +87,10 @@
         if (r < 0)
                 return r;
 
-        const BusLocator bloc = {
-                .destination = dbus_name,
-                .path = "/org/freedesktop/LogControl1",
-                .interface = "org.freedesktop.LogControl1",
-        };
+        r = verb_log_control_common(bus, dbus_name, argv[0], argv[2]);
 
-        return log_setting_internal(bus, &bloc, argv[0], argv[2]);
+        if (r == -EBADR)
+                give_log_control1_hint(dbus_name);
+
+        return r;
 }
diff --git a/src/systemctl/systemctl-log-setting.h b/src/systemctl/systemctl-log-setting.h
index 9a2e793..910d6c8 100644
--- a/src/systemctl/systemctl-log-setting.h
+++ b/src/systemctl/systemctl-log-setting.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int log_setting(int argc, char *argv[], void *userdata);
-int service_log_setting(int argc, char *argv[], void *userdata);
+int verb_log_setting(int argc, char *argv[], void *userdata);
+int verb_service_log_setting(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-logind.c b/src/systemctl/systemctl-logind.c
index 28dd25b..1c3b68f 100644
--- a/src/systemctl/systemctl-logind.c
+++ b/src/systemctl/systemctl-logind.c
@@ -15,17 +15,12 @@
 #include "terminal-util.h"
 #include "user-util.h"
 
-int logind_set_wall_message(void) {
+static int logind_set_wall_message(sd_bus *bus) {
 #if ENABLE_LOGIND
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus;
         _cleanup_free_ char *m = NULL;
         int r;
 
-        r = acquire_bus(BUS_FULL, &bus);
-        if (r < 0)
-                return r;
-
         m = strv_join(arg_wall, " ");
         if (!m)
                 return log_oom();
@@ -44,27 +39,23 @@
 /* Ask systemd-logind, which might grant access to unprivileged users through polkit */
 int logind_reboot(enum action a) {
 #if ENABLE_LOGIND
-        static const struct {
-                const char *method;
-                const char *description;
-        } actions[_ACTION_MAX] = {
-                [ACTION_POWEROFF]               = { "PowerOff",             "power off system"                },
-                [ACTION_REBOOT]                 = { "Reboot",               "reboot system"                   },
-                [ACTION_KEXEC]                  = { "Reboot",               "kexec reboot system"             },
-                [ACTION_HALT]                   = { "Halt",                 "halt system"                     },
-                [ACTION_SUSPEND]                = { "Suspend",              "suspend system"                  },
-                [ACTION_HIBERNATE]              = { "Hibernate",            "hibernate system"                },
-                [ACTION_HYBRID_SLEEP]           = { "HybridSleep",          "put system into hybrid sleep"    },
-                [ACTION_SUSPEND_THEN_HIBERNATE] = { "SuspendThenHibernate", "suspend system, hibernate later" },
+        static const char* actions[_ACTION_MAX] = {
+                [ACTION_POWEROFF]               = "PowerOff",
+                [ACTION_REBOOT]                 = "Reboot",
+                [ACTION_KEXEC]                  = "Reboot",
+                [ACTION_HALT]                   = "Halt",
+                [ACTION_SUSPEND]                = "Suspend",
+                [ACTION_HIBERNATE]              = "Hibernate",
+                [ACTION_HYBRID_SLEEP]           = "HybridSleep",
+                [ACTION_SUSPEND_THEN_HIBERNATE] = "SuspendThenHibernate",
         };
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        const char *method_with_flags;
         uint64_t flags = 0;
         sd_bus *bus;
         int r;
 
-        if (a < 0 || a >= _ACTION_MAX || !actions[a].method)
+        if (a < 0 || a >= _ACTION_MAX || !actions[a])
                 return -EINVAL;
 
         r = acquire_bus(BUS_FULL, &bus);
@@ -72,9 +63,12 @@
                 return r;
 
         polkit_agent_open_maybe();
-        (void) logind_set_wall_message();
+        (void) logind_set_wall_message(bus);
 
-        log_debug("%s org.freedesktop.login1.Manager %s dbus call.", arg_dry_run ? "Would execute" : "Executing", actions[a].method);
+        const char *method_with_flags = strjoina(actions[a], "WithFlags");
+
+        log_debug("%s org.freedesktop.login1.Manager %s dbus call.",
+                  arg_dry_run ? "Would execute" : "Executing", method_with_flags);
 
         if (arg_dry_run)
                 return 0;
@@ -82,21 +76,19 @@
         SET_FLAG(flags, SD_LOGIND_ROOT_CHECK_INHIBITORS, arg_check_inhibitors > 0);
         SET_FLAG(flags, SD_LOGIND_REBOOT_VIA_KEXEC, a == ACTION_KEXEC);
 
-        method_with_flags = strjoina(actions[a].method, "WithFlags");
-
         r = bus_call_method(bus, bus_login_mgr, method_with_flags, &error, NULL, "t", flags);
         if (r >= 0)
                 return 0;
         if (!sd_bus_error_has_name(&error, SD_BUS_ERROR_UNKNOWN_METHOD))
-                return log_error_errno(r, "Failed to %s via logind: %s", actions[a].description, bus_error_message(&error, r));
+                return log_error_errno(r, "Call to %s failed: %s", actions[a], bus_error_message(&error, r));
 
-        /* Fallback to original methods in case there is older version of systemd-logind */
-        log_debug("Method %s not available: %s. Falling back to %s", method_with_flags, bus_error_message(&error, r), actions[a].method);
+        /* Fall back to original methods in case there is an older version of systemd-logind */
+        log_debug("Method %s not available: %s. Falling back to %s", method_with_flags, bus_error_message(&error, r), actions[a]);
         sd_bus_error_free(&error);
 
-        r = bus_call_method(bus, bus_login_mgr, actions[a].method, &error, NULL, "b", arg_ask_password);
+        r = bus_call_method(bus, bus_login_mgr, actions[a], &error, NULL, "b", arg_ask_password);
         if (r < 0)
-                return log_error_errno(r, "Failed to %s via logind: %s", actions[a].description, bus_error_message(&error, r));
+                return log_error_errno(r, "Call to %s failed: %s", actions[a], bus_error_message(&error, r));
 
         return 0;
 #else
@@ -112,7 +104,6 @@
         uint32_t uid, pid;
         sd_bus *bus;
         unsigned c = 0;
-        char **s;
         int r;
 
         if (arg_check_inhibitors == 0 || arg_force > 0)
@@ -296,9 +287,7 @@
 
 #if ENABLE_LOGIND
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        char date[FORMAT_TIMESTAMP_MAX];
         const char *action;
-        const char *log_action;
         sd_bus *bus;
         int r;
 
@@ -306,41 +295,22 @@
         if (r < 0)
                 return r;
 
-        switch (arg_action) {
-        case ACTION_HALT:
-                action = "halt";
-                log_action = "Shutdown";
-                break;
-        case ACTION_POWEROFF:
-                action = "poweroff";
-                log_action = "Shutdown";
-                break;
-        case ACTION_KEXEC:
-                action = "kexec";
-                log_action = "Reboot via kexec";
-                break;
-        case ACTION_EXIT:
-                action = "exit";
-                log_action = "Shutdown";
-                break;
-        case ACTION_REBOOT:
-        default:
-                action = "reboot";
-                log_action = "Reboot";
-                break;
-        }
+        action = action_table[arg_action].verb;
+        if (!action)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Scheduling not supported for this action.");
 
         if (arg_dry_run)
                 action = strjoina("dry-", action);
 
-        (void) logind_set_wall_message();
+        (void) logind_set_wall_message(bus);
 
         r = bus_call_method(bus, bus_login_mgr, "ScheduleShutdown", &error, NULL, "st", action, arg_when);
         if (r < 0)
-                return log_warning_errno(r, "Failed to call ScheduleShutdown in logind, proceeding with immediate shutdown: %s", bus_error_message(&error, r));
+                return log_warning_errno(r, "Failed to schedule shutdown: %s", bus_error_message(&error, r));
 
         if (!arg_quiet)
-                log_info("%s scheduled for %s, use 'shutdown -c' to cancel.", log_action, format_timestamp_style(date, sizeof(date), arg_when, arg_timestamp_style));
+                logind_show_shutdown();
+
         return 0;
 #else
         return log_error_errno(SYNTHETIC_ERRNO(ENOSYS),
@@ -358,7 +328,7 @@
         if (r < 0)
                 return r;
 
-        (void) logind_set_wall_message();
+        (void) logind_set_wall_message(bus);
 
         r = bus_call_method(bus, bus_login_mgr, "CancelScheduledShutdown", &error, NULL, NULL);
         if (r < 0)
@@ -371,12 +341,55 @@
 #endif
 }
 
+int logind_show_shutdown(void) {
+#if ENABLE_LOGIND
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        sd_bus *bus;
+        const char *action = NULL;
+        uint64_t elapse;
+        int r;
+
+        r = acquire_bus(BUS_FULL, &bus);
+        if (r < 0)
+                return r;
+
+        r = bus_get_property(bus, bus_login_mgr, "ScheduledShutdown", &error, &reply, "(st)");
+        if (r < 0)
+                return log_error_errno(r, "Failed to query scheduled shutdown: %s", bus_error_message(&error, r));
+
+        r = sd_bus_message_read(reply, "(st)", &action, &elapse);
+        if (r < 0)
+                return r;
+
+        if (isempty(action))
+                return log_error_errno(SYNTHETIC_ERRNO(ENODATA), "No scheduled shutdown.");
+
+        if (STR_IN_SET(action, "halt", "poweroff", "exit"))
+                action = "Shutdown";
+        else if (streq(action, "kexec"))
+                action = "Reboot via kexec";
+        else if (streq(action, "reboot"))
+                action = "Reboot";
+
+        /* If we don't recognize the action string, we'll show it as-is */
+
+        log_info("%s scheduled for %s, use 'shutdown -c' to cancel.",
+                 action,
+                 FORMAT_TIMESTAMP_STYLE(elapse, arg_timestamp_style));
+
+        return 0;
+#else
+        return log_error_errno(SYNTHETIC_ERRNO(ENOSYS),
+                               "Not compiled with logind support, cannot show scheduled shutdowns.");
+#endif
+}
+
 int help_boot_loader_entry(void) {
 #if ENABLE_LOGIND
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_strv_free_ char **l = NULL;
         sd_bus *bus;
-        char **i;
         int r;
 
         r = acquire_bus(BUS_FULL, &bus);
diff --git a/src/systemctl/systemctl-logind.h b/src/systemctl/systemctl-logind.h
index 144056b..925f455 100644
--- a/src/systemctl/systemctl-logind.h
+++ b/src/systemctl/systemctl-logind.h
@@ -3,8 +3,6 @@
 
 #include "systemctl.h"
 
-int logind_set_wall_message(void);
-
 int logind_reboot(enum action a);
 int logind_check_inhibitors(enum action a);
 
@@ -14,5 +12,6 @@
 
 int logind_schedule_shutdown(void);
 int logind_cancel_shutdown(void);
+int logind_show_shutdown(void);
 
 int help_boot_loader_entry(void);
diff --git a/src/systemctl/systemctl-mount.c b/src/systemctl/systemctl-mount.c
index 04e6265..d9ad332 100644
--- a/src/systemctl/systemctl-mount.c
+++ b/src/systemctl/systemctl-mount.c
@@ -7,7 +7,7 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int mount_bind(int argc, char *argv[], void *userdata) {
+int verb_bind(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_free_ char *n = NULL;
         sd_bus *bus;
@@ -41,7 +41,7 @@
         return 0;
 }
 
-int mount_image(int argc, char *argv[], void *userdata) {
+int verb_mount_image(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         const char *unit = argv[1], *src = argv[2], *dest = argv[3];
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
diff --git a/src/systemctl/systemctl-mount.h b/src/systemctl/systemctl-mount.h
index 60d6875..b2d0750 100644
--- a/src/systemctl/systemctl-mount.h
+++ b/src/systemctl/systemctl-mount.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int mount_bind(int argc, char *argv[], void *userdata);
-int mount_image(int argc, char *argv[], void *userdata);
+int verb_bind(int argc, char *argv[], void *userdata);
+int verb_mount_image(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-preset-all.c b/src/systemctl/systemctl-preset-all.c
index b5eb199..68dbff5 100644
--- a/src/systemctl/systemctl-preset-all.c
+++ b/src/systemctl/systemctl-preset-all.c
@@ -7,14 +7,14 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int preset_all(int argc, char *argv[], void *userdata) {
-        UnitFileChange *changes = NULL;
+int verb_preset_all(int argc, char *argv[], void *userdata) {
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         int r;
 
         if (install_client_side()) {
                 r = unit_file_preset_all(arg_scope, unit_file_flags_from_args(), arg_root, arg_preset_mode, &changes, &n_changes);
-                unit_file_dump_changes(r, "preset", changes, n_changes, arg_quiet);
+                install_changes_dump(r, "preset", changes, n_changes, arg_quiet);
 
                 if (r > 0)
                         r = 0;
@@ -51,11 +51,13 @@
                         goto finish;
                 }
 
-                r = daemon_reload(argc, argv, userdata);
+                r = daemon_reload(ACTION_RELOAD, /* graceful= */ false);
+                if (r > 0)
+                        r = 0;
         }
 
 finish:
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
         return r;
 }
diff --git a/src/systemctl/systemctl-preset-all.h b/src/systemctl/systemctl-preset-all.h
index f4f6790..4631e7e 100644
--- a/src/systemctl/systemctl-preset-all.h
+++ b/src/systemctl/systemctl-preset-all.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int preset_all(int argc, char *argv[], void *userdata);
+int verb_preset_all(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-reset-failed.c b/src/systemctl/systemctl-reset-failed.c
index eee7586..1ca0533 100644
--- a/src/systemctl/systemctl-reset-failed.c
+++ b/src/systemctl/systemctl-reset-failed.c
@@ -7,14 +7,13 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int reset_failed(int argc, char *argv[], void *userdata) {
+int verb_reset_failed(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
         sd_bus *bus;
-        char **name;
         int r, q;
 
         if (argc <= 1) /* Shortcut to trivial_method() if no argument is given */
-                return trivial_method(argc, argv, userdata);
+                return verb_trivial_method(argc, argv, userdata);
 
         r = acquire_bus(BUS_MANAGER, &bus);
         if (r < 0)
diff --git a/src/systemctl/systemctl-reset-failed.h b/src/systemctl/systemctl-reset-failed.h
index 956bb46..5da0659 100644
--- a/src/systemctl/systemctl-reset-failed.h
+++ b/src/systemctl/systemctl-reset-failed.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int reset_failed(int argc, char *argv[], void *userdata);
+int verb_reset_failed(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-service-watchdogs.c b/src/systemctl/systemctl-service-watchdogs.c
index e579851..620f46a 100644
--- a/src/systemctl/systemctl-service-watchdogs.c
+++ b/src/systemctl/systemctl-service-watchdogs.c
@@ -7,7 +7,7 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
-int service_watchdogs(int argc, char *argv[], void *userdata) {
+int verb_service_watchdogs(int argc, char *argv[], void *userdata) {
         sd_bus *bus;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         int b, r;
diff --git a/src/systemctl/systemctl-service-watchdogs.h b/src/systemctl/systemctl-service-watchdogs.h
index 11a53db..2f59f5a 100644
--- a/src/systemctl/systemctl-service-watchdogs.h
+++ b/src/systemctl/systemctl-service-watchdogs.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int service_watchdogs(int argc, char *argv[], void *userdata);
+int verb_service_watchdogs(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-set-default.c b/src/systemctl/systemctl-set-default.c
index 05c1894..7ddba17 100644
--- a/src/systemctl/systemctl-set-default.c
+++ b/src/systemctl/systemctl-set-default.c
@@ -50,6 +50,8 @@
 
         if (install_client_side()) {
                 r = unit_file_get_default(arg_scope, arg_root, ret_name);
+                if (r == -ERFKILL)
+                        return log_error_errno(r, "Failed to get default target: Unit file is masked.");
                 if (r < 0)
                         return log_error_errno(r, "Failed to get default target: %m");
                 return 0;
@@ -76,7 +78,7 @@
         }
 }
 
-int get_default(int argc, char *argv[], void *userdata) {
+int verb_get_default(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *name = NULL;
         int r;
 
@@ -91,9 +93,9 @@
         return 0;
 }
 
-int set_default(int argc, char *argv[], void *userdata) {
+int verb_set_default(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *unit = NULL;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         int r;
 
@@ -108,10 +110,9 @@
 
         if (install_client_side()) {
                 r = unit_file_set_default(arg_scope, UNIT_FILE_FORCE, arg_root, unit, &changes, &n_changes);
-                unit_file_dump_changes(r, "set default", changes, n_changes, arg_quiet);
-
-                if (r > 0)
-                        r = 0;
+                install_changes_dump(r, "set default", changes, n_changes, arg_quiet);
+                if (r < 0)
+                        goto finish;
         } else {
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
                 _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
@@ -132,10 +133,11 @@
                         goto finish;
 
                 /* Try to reload if enabled */
-                if (!arg_no_reload)
-                        r = daemon_reload(argc, argv, userdata);
-                else
-                        r = 0;
+                if (!arg_no_reload) {
+                        r = daemon_reload(ACTION_RELOAD, /* graceful= */ false);
+                        if (r < 0)
+                                goto finish;
+                }
         }
 
         emit_cmdline_warning();
@@ -145,14 +147,14 @@
 
                 r = determine_default(&final);
                 if (r < 0)
-                        return r;
+                        goto finish;
 
                 if (!streq(final, unit))
                         log_notice("Note: \"%s\" is the default unit (possibly a runtime override).", final);
         }
 
 finish:
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        return r;
+        return r < 0 ? r : 0;
 }
diff --git a/src/systemctl/systemctl-set-default.h b/src/systemctl/systemctl-set-default.h
index 839b2c9..7873e12 100644
--- a/src/systemctl/systemctl-set-default.h
+++ b/src/systemctl/systemctl-set-default.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int get_default(int argc, char *argv[], void *userdata);
-int set_default(int argc, char *argv[], void *userdata);
+int verb_get_default(int argc, char *argv[], void *userdata);
+int verb_set_default(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-set-environment.c b/src/systemctl/systemctl-set-environment.c
index a19e031..55d1160 100644
--- a/src/systemctl/systemctl-set-environment.c
+++ b/src/systemctl/systemctl-set-environment.c
@@ -8,6 +8,40 @@
 #include "systemctl-util.h"
 #include "systemctl.h"
 
+static int json_transform_message(sd_bus_message *m, JsonVariant **ret) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+        const char *text;
+        int r;
+
+        assert(m);
+        assert(ret);
+
+        while ((r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &text)) > 0) {
+                _cleanup_free_ char *n = NULL;
+                const char *sep;
+
+                sep = strchr(text, '=');
+                if (!sep)
+                        return log_error_errno(SYNTHETIC_ERRNO(EUCLEAN),
+                                               "Invalid environment block");
+
+                n = strndup(text, sep - text);
+                if (!n)
+                        return log_oom();
+
+                sep++;
+
+                r = json_variant_set_field_string(&v, n, sep);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set JSON field '%s' to '%s': %m", n, sep);
+        }
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        *ret = TAKE_PTR(v);
+        return 0;
+}
+
 static int print_variable(const char *s) {
         const char *sep;
         _cleanup_free_ char *esc = NULL;
@@ -25,7 +59,7 @@
         return 0;
 }
 
-int show_environment(int argc, char *argv[], void *userdata) {
+int verb_show_environment(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         const char *text;
@@ -36,7 +70,7 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = bus_get_property(bus, bus_systemd_mgr, "Environment", &error, &reply, "as");
         if (r < 0)
@@ -46,13 +80,23 @@
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        while ((r = sd_bus_message_read_basic(reply, SD_BUS_TYPE_STRING, &text)) > 0) {
-                r = print_variable(text);
+        if (OUTPUT_MODE_IS_JSON(arg_output)) {
+                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+                r = json_transform_message(reply, &v);
                 if (r < 0)
                         return r;
+
+                json_variant_dump(v, output_mode_to_json_format_flags(arg_output), stdout, NULL);
+        } else {
+                while ((r = sd_bus_message_read_basic(reply, SD_BUS_TYPE_STRING, &text)) > 0) {
+                        r = print_variable(text);
+                        if (r < 0)
+                                return r;
+                }
+                if (r < 0)
+                        return bus_log_parse_error(r);
         }
-        if (r < 0)
-                return bus_log_parse_error(r);
 
         r = sd_bus_message_exit_container(reply);
         if (r < 0)
@@ -67,7 +111,7 @@
         log_debug("Ignoring invalid environment assignment \"%s\".", strnull(t));
 }
 
-int set_environment(int argc, char *argv[], void *userdata) {
+int verb_set_environment(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         const char *method;
@@ -102,7 +146,7 @@
         return 0;
 }
 
-int import_environment(int argc, char *argv[], void *userdata) {
+int verb_import_environment(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         sd_bus *bus;
@@ -127,7 +171,6 @@
 
                 strv_env_clean_with_callback(copy, invalid_callback, NULL);
 
-                char **e;
                 STRV_FOREACH(e, copy)
                         if (string_has_cc(*e, NULL))
                                 log_notice("Environment variable $%.*s contains control characters, importing anyway.",
@@ -136,8 +179,6 @@
                 r = sd_bus_message_append_strv(m, copy);
 
         } else {
-                char **a, **b;
-
                 r = sd_bus_message_open_container(m, 'a', "s");
                 if (r < 0)
                         return bus_log_create_error(r);
diff --git a/src/systemctl/systemctl-set-environment.h b/src/systemctl/systemctl-set-environment.h
index bd05e31..404258a 100644
--- a/src/systemctl/systemctl-set-environment.h
+++ b/src/systemctl/systemctl-set-environment.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int show_environment(int argc, char *argv[], void *userdata);
-int set_environment(int argc, char *argv[], void *userdata);
-int import_environment(int argc, char *argv[], void *userdata);
+int verb_show_environment(int argc, char *argv[], void *userdata);
+int verb_set_environment(int argc, char *argv[], void *userdata);
+int verb_import_environment(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-set-property.c b/src/systemctl/systemctl-set-property.c
index 5739bac..b8d702a 100644
--- a/src/systemctl/systemctl-set-property.c
+++ b/src/systemctl/systemctl-set-property.c
@@ -43,10 +43,9 @@
         return 0;
 }
 
-int set_property(int argc, char *argv[], void *userdata) {
+int verb_set_property(int argc, char *argv[], void *userdata) {
         sd_bus *bus;
         _cleanup_strv_free_ char **names = NULL;
-        char **name;
         int r, k;
 
         r = acquire_bus(BUS_MANAGER, &bus);
diff --git a/src/systemctl/systemctl-set-property.h b/src/systemctl/systemctl-set-property.h
index 74990e7..0892291 100644
--- a/src/systemctl/systemctl-set-property.h
+++ b/src/systemctl/systemctl-set-property.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int set_property(int argc, char *argv[], void *userdata);
+int verb_set_property(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c
index 5b6ee3c..d45fb9c 100644
--- a/src/systemctl/systemctl-show.c
+++ b/src/systemctl/systemctl-show.c
@@ -13,6 +13,7 @@
 #include "errno-util.h"
 #include "exec-util.h"
 #include "exit-status.h"
+#include "fd-util.h"
 #include "format-util.h"
 #include "hexdecoct.h"
 #include "hostname-util.h"
@@ -23,12 +24,14 @@
 #include "locale-util.h"
 #include "memory-util.h"
 #include "numa-util.h"
+#include "open-file.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "process-util.h"
 #include "signal-util.h"
 #include "sort-util.h"
+#include "special.h"
 #include "string-table.h"
 #include "systemctl-list-machines.h"
 #include "systemctl-list-units.h"
@@ -63,7 +66,7 @@
 
         ExecCommandFlags flags;
 
-        LIST_FIELDS(struct ExecStatusInfo, exec);
+        LIST_FIELDS(struct ExecStatusInfo, exec_status_info_list);
 } ExecStatusInfo;
 
 static void exec_status_info_free(ExecStatusInfo *i) {
@@ -89,7 +92,7 @@
         r = sd_bus_message_enter_container(m, SD_BUS_TYPE_STRUCT, is_ex_prop ? "sasasttttuii" : "sasbttttuii");
         if (r < 0)
                 return bus_log_parse_error(r);
-        else if (r == 0)
+        if (r == 0)
                 return 0;
 
         r = sd_bus_message_read(m, "s", &path);
@@ -191,6 +194,8 @@
         usec_t active_exit_timestamp;
         usec_t inactive_enter_timestamp;
 
+        uint64_t runtime_max_sec;
+
         bool need_daemon_reload;
         bool transient;
 
@@ -247,6 +252,7 @@
         uint64_t memory_high;
         uint64_t memory_max;
         uint64_t memory_swap_max;
+        uint64_t memory_zswap_max;
         uint64_t memory_limit;
         uint64_t memory_available;
         uint64_t cpu_usage_nsec;
@@ -260,7 +266,7 @@
         uint64_t default_memory_min;
         uint64_t default_memory_low;
 
-        LIST_HEAD(ExecStatusInfo, exec);
+        LIST_HEAD(ExecStatusInfo, exec_status_info_list);
 } UnitStatusInfo;
 
 static void unit_status_info_free(UnitStatusInfo *info) {
@@ -278,8 +284,8 @@
                 unit_condition_free(c);
         }
 
-        while ((p = info->exec)) {
-                LIST_REMOVE(exec, info->exec, p);
+        while ((p = info->exec_status_info_list)) {
+                LIST_REMOVE(exec_status_info_list, info->exec_status_info_list, p);
                 exec_status_info_free(p);
         }
 }
@@ -295,18 +301,30 @@
                 *active_on = *active_off = "";
 }
 
+static void format_enable_state(const char *enable_state, const char **enable_on, const char **enable_off) {
+        assert(enable_on);
+        assert(enable_off);
+
+        if (streq_ptr(enable_state, "disabled")) {
+                *enable_on = ansi_highlight_yellow();
+                *enable_off = ansi_normal();
+        } else if (streq_ptr(enable_state, "enabled")) {
+                *enable_on = ansi_highlight_green();
+                *enable_off = ansi_normal();
+        } else
+                *enable_on = *enable_off = "";
+}
+
 static void print_status_info(
                 sd_bus *bus,
                 UnitStatusInfo *i,
                 bool *ellipsized) {
 
-        char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], since2[FORMAT_TIMESTAMP_MAX];
-        const char *s1, *s2, *active_on, *active_off, *on, *off, *ss, *fs;
+        const char *active_on, *active_off, *on, *off, *ss, *fs;
+        const char *enable_on, *enable_off, *preset_on, *preset_off;
         _cleanup_free_ char *formatted_path = NULL;
-        ExecStatusInfo *p;
         usec_t timestamp;
         const char *path;
-        char **t, **t2;
         int r;
 
         assert(i);
@@ -315,6 +333,8 @@
          * printer */
 
         format_active_state(i->active_state, &active_on, &active_off);
+        format_enable_state(i->unit_file_state, &enable_on, &enable_off);
+        format_enable_state(i->unit_file_preset, &preset_on, &preset_off);
 
         const SpecialGlyph glyph = unit_active_state_to_glyph(unit_active_state_from_string(i->active_state));
 
@@ -345,12 +365,12 @@
                 bool show_preset = !isempty(i->unit_file_preset) &&
                         show_preset_for_state(unit_file_state_from_string(i->unit_file_state));
 
-                printf("     Loaded: %s%s%s (%s; %s%s%s)\n",
+                printf("     Loaded: %s%s%s (%s; %s%s%s%s%s%s%s)\n",
                        on, strna(i->load_state), off,
                        path,
-                       i->unit_file_state,
-                       show_preset ? "; vendor preset: " : "",
-                       show_preset ? i->unit_file_preset : "");
+                       enable_on, i->unit_file_state, enable_off,
+                       show_preset ? "; preset: " : "",
+                       preset_on, show_preset ? i->unit_file_preset : "", preset_off);
 
         } else if (path)
                 printf("     Loaded: %s%s%s (%s)\n",
@@ -365,7 +385,6 @@
         if (!strv_isempty(i->dropin_paths)) {
                 _cleanup_free_ char *dir = NULL;
                 bool last = false;
-                char ** dropin;
 
                 STRV_FOREACH(dropin, i->dropin_paths) {
                         _cleanup_free_ char *dropin_formatted = NULL;
@@ -377,10 +396,10 @@
 
                                 dir = mfree(dir);
 
-                                dir = dirname_malloc(*dropin);
-                                if (!dir) {
-                                        log_oom();
-                                        return;
+                                r = path_extract_directory(*dropin, &dir);
+                                if (r < 0) {
+                                        log_error_errno(r, "Failed to extract directory of '%s': %m", *dropin);
+                                        break;
                                 }
 
                                 printf("%s\n"
@@ -419,14 +438,31 @@
                     STRPTR_IN_SET(i->active_state, "activating")          ? i->inactive_exit_timestamp :
                                                                             i->active_exit_timestamp;
 
-        s1 = format_timestamp_relative(since1, sizeof(since1), timestamp);
-        s2 = format_timestamp_style(since2, sizeof(since2), timestamp, arg_timestamp_style);
+        if (timestamp_is_set(timestamp)) {
+                printf(" since %s; %s\n",
+                       FORMAT_TIMESTAMP_STYLE(timestamp, arg_timestamp_style),
+                       FORMAT_TIMESTAMP_RELATIVE(timestamp));
+                if (streq_ptr(i->active_state, "active") && i->runtime_max_sec < USEC_INFINITY) {
+                        usec_t until_timestamp;
 
-        if (s1)
-                printf(" since %s; %s\n", s2, s1);
-        else if (s2)
-                printf(" since %s\n", s2);
-        else
+                        until_timestamp = usec_add(timestamp, i->runtime_max_sec);
+                        printf("      Until: %s; %s\n",
+                               FORMAT_TIMESTAMP_STYLE(until_timestamp, arg_timestamp_style),
+                               FORMAT_TIMESTAMP_RELATIVE(until_timestamp));
+                }
+
+                if (!endswith(i->id, ".target") &&
+                        STRPTR_IN_SET(i->active_state, "inactive", "failed") &&
+                        timestamp_is_set(i->active_enter_timestamp) &&
+                        timestamp_is_set(i->active_exit_timestamp) &&
+                        i->active_exit_timestamp >= i->active_enter_timestamp) {
+
+                        usec_t duration;
+
+                        duration = i->active_exit_timestamp - i->active_enter_timestamp;
+                        printf("   Duration: %s\n", FORMAT_TIMESPAN(duration, MSEC_PER_SEC));
+                }
+        } else
                 printf("\n");
 
         STRV_FOREACH(t, i->triggered_by) {
@@ -442,24 +478,18 @@
         }
 
         if (endswith(i->id, ".timer")) {
-                char tstamp1[FORMAT_TIMESTAMP_RELATIVE_MAX],
-                     tstamp2[FORMAT_TIMESTAMP_MAX];
-                const char *next_rel_time, *next_time;
-                dual_timestamp nw, next = {i->next_elapse_real,
-                                           i->next_elapse_monotonic};
+                dual_timestamp nw, next = {i->next_elapse_real, i->next_elapse_monotonic};
                 usec_t next_elapse;
 
-                printf("    Trigger: ");
-
                 dual_timestamp_get(&nw);
                 next_elapse = calc_next_elapse(&nw, &next);
-                next_rel_time = format_timestamp_relative(tstamp1, sizeof tstamp1, next_elapse);
-                next_time = format_timestamp_style(tstamp2, sizeof tstamp2, next_elapse, arg_timestamp_style);
 
-                if (next_time && next_rel_time)
-                        printf("%s; %s\n", next_time, next_rel_time);
+                if (timestamp_is_set(next_elapse))
+                        printf("    Trigger: %s; %s\n",
+                               FORMAT_TIMESTAMP_STYLE(next_elapse, arg_timestamp_style),
+                               FORMAT_TIMESTAMP_RELATIVE(next_elapse));
                 else
-                        printf("n/a\n");
+                        printf("    Trigger: n/a\n");
         }
 
         STRV_FOREACH(t, i->triggers) {
@@ -475,15 +505,12 @@
         }
 
         if (!i->condition_result && i->condition_timestamp > 0) {
-                UnitCondition *c;
                 int n = 0;
 
-                s1 = format_timestamp_relative(since1, sizeof(since1), i->condition_timestamp);
-                s2 = format_timestamp_style(since2, sizeof(since2), i->condition_timestamp, arg_timestamp_style);
-
-                printf("  Condition: start %scondition failed%s at %s%s%s\n",
+                printf("  Condition: start %scondition failed%s at %s; %s\n",
                        ansi_highlight_yellow(), ansi_normal(),
-                       s2, s1 ? "; " : "", strempty(s1));
+                       FORMAT_TIMESTAMP_STYLE(i->condition_timestamp, arg_timestamp_style),
+                       FORMAT_TIMESTAMP_RELATIVE(i->condition_timestamp));
 
                 LIST_FOREACH(conditions, c, i->conditions)
                         if (c->tristate < 0)
@@ -500,12 +527,10 @@
         }
 
         if (!i->assert_result && i->assert_timestamp > 0) {
-                s1 = format_timestamp_relative(since1, sizeof(since1), i->assert_timestamp);
-                s2 = format_timestamp_style(since2, sizeof(since2), i->assert_timestamp, arg_timestamp_style);
-
-                printf("     Assert: start %sassertion failed%s at %s%s%s\n",
+                printf("     Assert: start %sassertion failed%s at %s; %s\n",
                        ansi_highlight_red(), ansi_normal(),
-                       s2, s1 ? "; " : "", strempty(s1));
+                       FORMAT_TIMESTAMP_STYLE(i->assert_timestamp, arg_timestamp_style),
+                       FORMAT_TIMESTAMP_RELATIVE(i->assert_timestamp));
                 if (i->failed_assert_trigger)
                         printf("             none of the trigger assertions were met\n");
                 else if (i->failed_assert)
@@ -544,7 +569,7 @@
                 printf("\n");
         }
 
-        LIST_FOREACH(exec, p, i->exec) {
+        LIST_FOREACH(exec_status_info_list, p, i->exec_status_info_list) {
                 _cleanup_free_ char *argv = NULL;
                 bool good;
 
@@ -562,7 +587,7 @@
 
                 good = is_clean_exit(p->code, p->status, EXIT_CLEAN_DAEMON, NULL);
                 if (!good) {
-                        on = ansi_highlight_red();
+                        on = p->ignore ? ansi_highlight_yellow() : ansi_highlight_red();
                         off = ansi_normal();
                 } else
                         on = off = "";
@@ -648,24 +673,20 @@
 
         if (i->status_text)
                 printf("     Status: \"%s\"\n", i->status_text);
-        if (i->status_errno > 0)
-                printf("      Error: %i (%s)\n", i->status_errno, strerror_safe(i->status_errno));
+        if (i->status_errno > 0) {
+                errno = i->status_errno;
+                printf("      Error: %i (%m)\n", i->status_errno);
+        }
 
-        if (i->ip_ingress_bytes != UINT64_MAX && i->ip_egress_bytes != UINT64_MAX) {
-                char buf_in[FORMAT_BYTES_MAX], buf_out[FORMAT_BYTES_MAX];
-
+        if (i->ip_ingress_bytes != UINT64_MAX && i->ip_egress_bytes != UINT64_MAX)
                 printf("         IP: %s in, %s out\n",
-                        format_bytes(buf_in, sizeof(buf_in), i->ip_ingress_bytes),
-                        format_bytes(buf_out, sizeof(buf_out), i->ip_egress_bytes));
-        }
+                       FORMAT_BYTES(i->ip_ingress_bytes),
+                       FORMAT_BYTES(i->ip_egress_bytes));
 
-        if (i->io_read_bytes != UINT64_MAX && i->io_write_bytes != UINT64_MAX) {
-                char buf_in[FORMAT_BYTES_MAX], buf_out[FORMAT_BYTES_MAX];
-
+        if (i->io_read_bytes != UINT64_MAX && i->io_write_bytes != UINT64_MAX)
                 printf("         IO: %s read, %s written\n",
-                        format_bytes(buf_in, sizeof(buf_in), i->io_read_bytes),
-                        format_bytes(buf_out, sizeof(buf_out), i->io_write_bytes));
-        }
+                        FORMAT_BYTES(i->io_read_bytes),
+                        FORMAT_BYTES(i->io_write_bytes));
 
         if (i->tasks_current != UINT64_MAX) {
                 printf("      Tasks: %" PRIu64, i->tasks_current);
@@ -677,44 +698,47 @@
         }
 
         if (i->memory_current != UINT64_MAX) {
-                char buf[FORMAT_BYTES_MAX];
-
-                printf("     Memory: %s", format_bytes(buf, sizeof(buf), i->memory_current));
+                printf("     Memory: %s", FORMAT_BYTES(i->memory_current));
 
                 if (i->memory_min > 0 || i->memory_low > 0 ||
                     i->memory_high != CGROUP_LIMIT_MAX || i->memory_max != CGROUP_LIMIT_MAX ||
                     i->memory_swap_max != CGROUP_LIMIT_MAX ||
+                    i->memory_zswap_max != CGROUP_LIMIT_MAX ||
                     i->memory_available != CGROUP_LIMIT_MAX ||
                     i->memory_limit != CGROUP_LIMIT_MAX) {
                         const char *prefix = "";
 
                         printf(" (");
                         if (i->memory_min > 0) {
-                                printf("%smin: %s", prefix, format_bytes_cgroup_protection(buf, sizeof(buf), i->memory_min));
+                                printf("%smin: %s", prefix, FORMAT_BYTES_CGROUP_PROTECTION(i->memory_min));
                                 prefix = " ";
                         }
                         if (i->memory_low > 0) {
-                                printf("%slow: %s", prefix, format_bytes_cgroup_protection(buf, sizeof(buf), i->memory_low));
+                                printf("%slow: %s", prefix, FORMAT_BYTES_CGROUP_PROTECTION(i->memory_low));
                                 prefix = " ";
                         }
                         if (i->memory_high != CGROUP_LIMIT_MAX) {
-                                printf("%shigh: %s", prefix, format_bytes(buf, sizeof(buf), i->memory_high));
+                                printf("%shigh: %s", prefix, FORMAT_BYTES(i->memory_high));
                                 prefix = " ";
                         }
                         if (i->memory_max != CGROUP_LIMIT_MAX) {
-                                printf("%smax: %s", prefix, format_bytes(buf, sizeof(buf), i->memory_max));
+                                printf("%smax: %s", prefix, FORMAT_BYTES(i->memory_max));
                                 prefix = " ";
                         }
                         if (i->memory_swap_max != CGROUP_LIMIT_MAX) {
-                                printf("%sswap max: %s", prefix, format_bytes(buf, sizeof(buf), i->memory_swap_max));
+                                printf("%sswap max: %s", prefix, FORMAT_BYTES(i->memory_swap_max));
+                                prefix = " ";
+                        }
+                        if (i->memory_zswap_max != CGROUP_LIMIT_MAX) {
+                                printf("%szswap max: %s", prefix, FORMAT_BYTES(i->memory_zswap_max));
                                 prefix = " ";
                         }
                         if (i->memory_limit != CGROUP_LIMIT_MAX) {
-                                printf("%slimit: %s", prefix, format_bytes(buf, sizeof(buf), i->memory_limit));
+                                printf("%slimit: %s", prefix, FORMAT_BYTES(i->memory_limit));
                                 prefix = " ";
                         }
                         if (i->memory_available != CGROUP_LIMIT_MAX) {
-                                printf("%savailable: %s", prefix, format_bytes(buf, sizeof(buf), i->memory_available));
+                                printf("%savailable: %s", prefix, FORMAT_BYTES(i->memory_available));
                                 prefix = " ";
                         }
                         printf(")");
@@ -722,10 +746,8 @@
                 printf("\n");
         }
 
-        if (i->cpu_usage_nsec != UINT64_MAX) {
-                char buf[FORMAT_TIMESPAN_MAX];
-                printf("        CPU: %s\n", format_timespan(buf, sizeof(buf), i->cpu_usage_nsec / NSEC_PER_USEC, USEC_PER_MSEC));
-        }
+        if (i->cpu_usage_nsec != UINT64_MAX)
+                printf("        CPU: %s\n", FORMAT_TIMESPAN(i->cpu_usage_nsec / NSEC_PER_USEC, USEC_PER_MSEC));
 
         if (i->control_group) {
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
@@ -734,11 +756,7 @@
 
                 printf("     CGroup: %s\n", i->control_group);
 
-                c = columns();
-                if (c > sizeof(prefix) - 1)
-                        c -= sizeof(prefix) - 1;
-                else
-                        c = 0;
+                c = LESS_BY(columns(), strlen(prefix));
 
                 r = unit_show_processes(bus, i->id, i->control_group, prefix, c, get_output_flags(), &error);
                 if (r == -EBADR && arg_transport == BUS_TRANSPORT_LOCAL) {
@@ -771,7 +789,7 @@
                                 getuid(),
                                 get_output_flags() | OUTPUT_BEGIN_NEWLINE,
                                 SD_JOURNAL_LOCAL_ONLY,
-                                arg_scope == UNIT_FILE_SYSTEM,
+                                arg_scope == LOOKUP_SCOPE_SYSTEM,
                                 ellipsized);
 
         if (i->need_daemon_reload)
@@ -779,8 +797,6 @@
 }
 
 static void show_unit_help(UnitStatusInfo *i) {
-        char **p;
-
         assert(i);
 
         if (!i->documentation) {
@@ -938,7 +954,7 @@
         if (!info)
                 return -ENOMEM;
 
-        LIST_FIND_TAIL(exec, i->exec, last);
+        last = LIST_FIND_TAIL(exec_status_info_list, i->exec_status_info_list);
 
         while ((r = exec_status_info_deserialize(m, info, is_ex_prop)) > 0) {
 
@@ -946,7 +962,7 @@
                 if (!info->name)
                         return -ENOMEM;
 
-                LIST_INSERT_AFTER(exec, i->exec, last, info);
+                LIST_INSERT_AFTER(exec_status_info_list, i->exec_status_info_list, last, info);
                 last = info;
 
                 info = new0(ExecStatusInfo, 1);
@@ -1008,15 +1024,13 @@
 
         case SD_BUS_TYPE_UINT64:
                 if (endswith(name, "Timestamp")) {
-                        char timestamp_str[FORMAT_TIMESTAMP_MAX] = "n/a";
                         uint64_t timestamp;
 
                         r = sd_bus_message_read_basic(m, bus_type, &timestamp);
                         if (r < 0)
                                 return r;
 
-                        (void) format_timestamp_style(timestamp_str, sizeof(timestamp_str), timestamp, arg_timestamp_style);
-                        bus_print_property_value(name, expected_value, flags, timestamp_str);
+                        bus_print_property_value(name, expected_value, flags, FORMAT_TIMESTAMP_STYLE(timestamp, arg_timestamp_style));
 
                         return 1;
                 }
@@ -1063,7 +1077,7 @@
 
                         return 1;
 
-                } else if (STR_IN_SET(name, "SystemCallFilter", "SystemCallLog", "RestrictAddressFamilies")) {
+                } else if (STR_IN_SET(name, "SystemCallFilter", "SystemCallLog", "RestrictAddressFamilies", "RestrictNetworkInterfaces", "RestrictFileSystems")) {
                         _cleanup_strv_free_ char **l = NULL;
                         int allow_list;
 
@@ -1085,7 +1099,6 @@
 
                         if (FLAGS_SET(flags, BUS_PRINT_PROPERTY_SHOW_EMPTY) || allow_list || !strv_isempty(l)) {
                                 bool first = true;
-                                char **i;
 
                                 if (!FLAGS_SET(flags, BUS_PRINT_PROPERTY_ONLY_VALUE)) {
                                         fputs(name, stdout);
@@ -1251,15 +1264,12 @@
                         if (r < 0)
                                 return bus_log_parse_error(r);
 
-                        while ((r = sd_bus_message_read(m, "(stt)", &base, &v, &next_elapse)) > 0) {
-                                char timespan1[FORMAT_TIMESPAN_MAX] = "n/a", timespan2[FORMAT_TIMESPAN_MAX] = "n/a";
-
-                                (void) format_timespan(timespan1, sizeof timespan1, v, 0);
-                                (void) format_timespan(timespan2, sizeof timespan2, next_elapse, 0);
-
+                        while ((r = sd_bus_message_read(m, "(stt)", &base, &v, &next_elapse)) > 0)
                                 bus_print_property_valuef(name, expected_value, flags,
-                                                          "{ %s=%s ; next_elapse=%s }", base, timespan1, timespan2);
-                        }
+                                                          "{ %s=%s ; next_elapse=%s }",
+                                                          base,
+                                                          strna(FORMAT_TIMESPAN(v, 0)),
+                                                          strna(FORMAT_TIMESPAN(next_elapse, 0)));
                         if (r < 0)
                                 return bus_log_parse_error(r);
 
@@ -1277,13 +1287,10 @@
                         if (r < 0)
                                 return bus_log_parse_error(r);
 
-                        while ((r = sd_bus_message_read(m, "(sst)", &base, &spec, &next_elapse)) > 0) {
-                                char timestamp[FORMAT_TIMESTAMP_MAX] = "n/a";
-
-                                (void) format_timestamp_style(timestamp, sizeof(timestamp), next_elapse, arg_timestamp_style);
+                        while ((r = sd_bus_message_read(m, "(sst)", &base, &spec, &next_elapse)) > 0)
                                 bus_print_property_valuef(name, expected_value, flags,
-                                                          "{ %s=%s ; next_elapse=%s }", base, spec, timestamp);
-                        }
+                                                          "{ %s=%s ; next_elapse=%s }", base, spec,
+                                                          FORMAT_TIMESTAMP_STYLE(next_elapse, arg_timestamp_style));
                         if (r < 0)
                                 return bus_log_parse_error(r);
 
@@ -1302,7 +1309,6 @@
                                 return bus_log_parse_error(r);
 
                         while ((r = exec_status_info_deserialize(m, &info, is_ex_prop)) > 0) {
-                                char timestamp1[FORMAT_TIMESTAMP_MAX], timestamp2[FORMAT_TIMESTAMP_MAX];
                                 _cleanup_strv_free_ char **optv = NULL;
                                 _cleanup_free_ char *tt = NULL, *o = NULL;
 
@@ -1320,8 +1326,8 @@
                                                                   strna(info.path),
                                                                   strna(tt),
                                                                   strna(o),
-                                                                  strna(format_timestamp_style(timestamp1, sizeof(timestamp1), info.start_timestamp, arg_timestamp_style)),
-                                                                  strna(format_timestamp_style(timestamp2, sizeof(timestamp2), info.exit_timestamp, arg_timestamp_style)),
+                                                                  strna(FORMAT_TIMESTAMP_STYLE(info.start_timestamp, arg_timestamp_style)),
+                                                                  strna(FORMAT_TIMESTAMP_STYLE(info.exit_timestamp, arg_timestamp_style)),
                                                                   info.pid,
                                                                   sigchld_code_to_string(info.code),
                                                                   info.status,
@@ -1333,8 +1339,8 @@
                                                                   strna(info.path),
                                                                   strna(tt),
                                                                   yes_no(info.ignore),
-                                                                  strna(format_timestamp_style(timestamp1, sizeof(timestamp1), info.start_timestamp, arg_timestamp_style)),
-                                                                  strna(format_timestamp_style(timestamp2, sizeof(timestamp2), info.exit_timestamp, arg_timestamp_style)),
+                                                                  strna(FORMAT_TIMESTAMP_STYLE(info.start_timestamp, arg_timestamp_style)),
+                                                                  strna(FORMAT_TIMESTAMP_STYLE(info.exit_timestamp, arg_timestamp_style)),
                                                                   info.pid,
                                                                   sigchld_code_to_string(info.code),
                                                                   info.status,
@@ -1413,7 +1419,6 @@
 
                 }  else if (contents[0] == SD_BUS_TYPE_STRUCT_BEGIN &&
                             streq(name, "IODeviceLatencyTargetUSec")) {
-                        char ts[FORMAT_TIMESPAN_MAX];
                         const char *path;
                         uint64_t target;
 
@@ -1423,7 +1428,7 @@
 
                         while ((r = sd_bus_message_read(m, "(st)", &path, &target)) > 0)
                                 bus_print_property_valuef(name, expected_value, flags, "%s %s", strna(path),
-                                                          format_timespan(ts, sizeof(ts), target, 1));
+                                                          FORMAT_TIMESPAN(target, 1));
                         if (r < 0)
                                 return bus_log_parse_error(r);
 
@@ -1459,7 +1464,6 @@
                                 return bus_log_parse_error(r);
 
                         for (;;) {
-                                _cleanup_free_ char *str = NULL;
                                 uint32_t prefixlen;
                                 int32_t family;
                                 const void *ap;
@@ -1496,10 +1500,8 @@
                                 if (prefixlen > FAMILY_ADDRESS_SIZE(family) * 8)
                                         continue;
 
-                                if (in_addr_prefix_to_string(family, (const union in_addr_union*) ap, prefixlen, &str) < 0)
-                                        continue;
-
-                                if (!strextend_with_separator(&addresses, " ", str))
+                                if (!strextend_with_separator(&addresses, " ",
+                                                              IN_ADDR_PREFIX_TO_STRING(family, ap, prefixlen)))
                                         return log_oom();
                         }
 
@@ -1651,6 +1653,24 @@
                         bus_print_property_value(name, expected_value, flags, affinity);
 
                         return 1;
+                } else if (streq(name, "LogFilterPatterns")) {
+                        int is_allowlist;
+                        const char *pattern;
+
+                        r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "(bs)");
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        while ((r = sd_bus_message_read(m, "(bs)", &is_allowlist, &pattern)) > 0)
+                                bus_print_property_valuef(name, expected_value, flags, "%s%s", is_allowlist ? "" : "~", pattern);
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        r = sd_bus_message_exit_container(m);
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        return 1;
                 } else if (streq(name, "MountImages")) {
                         _cleanup_free_ char *paths = NULL;
 
@@ -1822,6 +1842,56 @@
                                 return bus_log_parse_error(r);
 
                         return 1;
+                } else if (STR_IN_SET(name, "StateDirectorySymlink", "RuntimeDirectorySymlink", "CacheDirectorySymlink", "LogsDirectorySymlink")) {
+                        const char *a, *p;
+                        uint64_t symlink_flags;
+
+                        r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "(sst)");
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        while ((r = sd_bus_message_read(m, "(sst)", &a, &p, &symlink_flags)) > 0)
+                                bus_print_property_valuef(name, expected_value, flags, "%s:%s", a, p);
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        r = sd_bus_message_exit_container(m);
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        return 1;
+                } else if (contents[0] == SD_BUS_TYPE_STRUCT_BEGIN && streq(name, "OpenFile")) {
+                        char *path, *fdname;
+                        uint64_t offlags;
+
+                        r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "(sst)");
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        while ((r = sd_bus_message_read(m, "(sst)", &path, &fdname, &offlags)) > 0) {
+                                _cleanup_free_ char *ofs = NULL;
+
+                                r = open_file_to_string(
+                                        &(OpenFile){
+                                                .path = path,
+                                                .fdname = fdname,
+                                                .flags = offlags,
+                                        },
+                                        &ofs);
+                                if (r < 0)
+                                        return log_error_errno(
+                                                        r, "Failed to convert OpenFile= value to string: %m");
+
+                                bus_print_property_value(name, expected_value, flags, ofs);
+                        }
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        r = sd_bus_message_exit_container(m);
+                        if (r < 0)
+                                return bus_log_parse_error(r);
+
+                        return 1;
                 }
 
                 break;
@@ -1883,6 +1953,7 @@
                 { "InactiveExitTimestampMonotonic", "t",               NULL,           offsetof(UnitStatusInfo, inactive_exit_timestamp_monotonic) },
                 { "ActiveEnterTimestamp",           "t",               NULL,           offsetof(UnitStatusInfo, active_enter_timestamp)            },
                 { "ActiveExitTimestamp",            "t",               NULL,           offsetof(UnitStatusInfo, active_exit_timestamp)             },
+                { "RuntimeMaxUSec",                 "t",               NULL,           offsetof(UnitStatusInfo, runtime_max_sec)                   },
                 { "InactiveEnterTimestamp",         "t",               NULL,           offsetof(UnitStatusInfo, inactive_enter_timestamp)          },
                 { "NeedDaemonReload",               "b",               NULL,           offsetof(UnitStatusInfo, need_daemon_reload)                },
                 { "Transient",                      "b",               NULL,           offsetof(UnitStatusInfo, transient)                         },
@@ -1922,6 +1993,7 @@
                 { "MemoryHigh",                     "t",               NULL,           offsetof(UnitStatusInfo, memory_high)                       },
                 { "MemoryMax",                      "t",               NULL,           offsetof(UnitStatusInfo, memory_max)                        },
                 { "MemorySwapMax",                  "t",               NULL,           offsetof(UnitStatusInfo, memory_swap_max)                   },
+                { "MemoryZSwapMax",                 "t",               NULL,           offsetof(UnitStatusInfo, memory_zswap_max)                  },
                 { "MemoryLimit",                    "t",               NULL,           offsetof(UnitStatusInfo, memory_limit)                      },
                 { "CPUUsageNSec",                   "t",               NULL,           offsetof(UnitStatusInfo, cpu_usage_nsec)                    },
                 { "TasksCurrent",                   "t",               NULL,           offsetof(UnitStatusInfo, tasks_current)                     },
@@ -1952,10 +2024,12 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_set_free_ Set *found_properties = NULL;
         _cleanup_(unit_status_info_free) UnitStatusInfo info = {
+                .runtime_max_sec = USEC_INFINITY,
                 .memory_current = UINT64_MAX,
                 .memory_high = CGROUP_LIMIT_MAX,
                 .memory_max = CGROUP_LIMIT_MAX,
                 .memory_swap_max = CGROUP_LIMIT_MAX,
+                .memory_zswap_max = CGROUP_LIMIT_MAX,
                 .memory_limit = UINT64_MAX,
                 .memory_available = CGROUP_LIMIT_MAX,
                 .cpu_usage_nsec = UINT64_MAX,
@@ -1966,7 +2040,6 @@
                 .io_read_bytes = UINT64_MAX,
                 .io_write_bytes = UINT64_MAX,
         };
-        char **pp;
         int r;
 
         assert(path);
@@ -1992,7 +2065,7 @@
 
                 if (show_mode == SYSTEMCTL_SHOW_STATUS)
                         return EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN;
-                else if (show_mode == SYSTEMCTL_SHOW_HELP)
+                if (show_mode == SYSTEMCTL_SHOW_HELP)
                         return -ENOENT;
         }
 
@@ -2029,34 +2102,99 @@
         return 0;
 }
 
-static int get_unit_dbus_path_by_pid(
+static int get_unit_dbus_path_by_pid_fallback(
                 sd_bus *bus,
                 uint32_t pid,
-                char **unit) {
+                char **ret_path,
+                char **ret_unit) {
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        char *u;
+        _cleanup_free_ char *path = NULL, *unit = NULL;
+        char *p;
         int r;
 
+        assert(bus);
+        assert(ret_path);
+        assert(ret_unit);
+
         r = bus_call_method(bus, bus_systemd_mgr, "GetUnitByPID", &error, &reply, "u", pid);
         if (r < 0)
                 return log_error_errno(r, "Failed to get unit for PID %"PRIu32": %s", pid, bus_error_message(&error, r));
 
-        r = sd_bus_message_read(reply, "o", &u);
+        r = sd_bus_message_read(reply, "o", &p);
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        u = strdup(u);
-        if (!u)
+        path = strdup(p);
+        if (!path)
                 return log_oom();
 
-        *unit = u;
+        r = unit_name_from_dbus_path(path, &unit);
+        if (r < 0)
+                return log_oom();
+
+        *ret_unit = TAKE_PTR(unit);
+        *ret_path = TAKE_PTR(path);
+
+        return 0;
+}
+
+static int get_unit_dbus_path_by_pid(
+                sd_bus *bus,
+                uint32_t pid,
+                char **ret_path,
+                char **ret_unit) {
+
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        _cleanup_free_ char *path = NULL, *unit = NULL;
+        _cleanup_close_ int pidfd = -EBADF;
+        char *p, *u;
+        int r;
+
+        assert(bus);
+        assert(ret_path);
+        assert(ret_unit);
+
+        /* First, try to send a PIDFD across the wire, so that we can pin the process and there's no race
+         * condition possible while we wait for the D-Bus reply. If we either don't have PIDFD support in
+         * the kernel or the new D-Bus method is not available, then fallback to the older method that
+         * sends the numeric PID. */
+
+        pidfd = pidfd_open(pid, 0);
+        if (pidfd < 0 && ERRNO_IS_NOT_SUPPORTED(errno))
+                return get_unit_dbus_path_by_pid_fallback(bus, pid, ret_path, ret_unit);
+        if (pidfd < 0)
+                return log_error_errno(errno, "Failed to open PID %"PRIu32": %m", pid);
+
+        r = bus_call_method(bus, bus_systemd_mgr, "GetUnitByPIDFD", &error, &reply, "h", pidfd);
+        if (r < 0 && sd_bus_error_has_name(&error, SD_BUS_ERROR_UNKNOWN_METHOD))
+                return get_unit_dbus_path_by_pid_fallback(bus, pid, ret_path, ret_unit);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get unit for PID %"PRIu32": %s", pid, bus_error_message(&error, r));
+
+        r = sd_bus_message_read(reply, "os", &p, &u);
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        path = strdup(p);
+        if (!path)
+                return log_oom();
+
+        unit = strdup(u);
+        if (!unit)
+                return log_oom();
+
+        *ret_unit = TAKE_PTR(unit);
+        *ret_path = TAKE_PTR(path);
+
         return 0;
 }
 
 static int show_all(
                 sd_bus *bus,
+                SystemctlShowMode show_mode,
                 bool *new_line,
                 bool *ellipsized) {
 
@@ -2069,7 +2207,7 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         c = (unsigned) r;
 
@@ -2082,10 +2220,10 @@
                 if (!p)
                         return log_oom();
 
-                r = show_one(bus, p, u->id, SYSTEMCTL_SHOW_STATUS, new_line, ellipsized);
+                r = show_one(bus, p, u->id, show_mode, new_line, ellipsized);
                 if (r < 0)
                         return r;
-                else if (r > 0 && ret == 0)
+                if (r > 0 && ret == 0)
                         ret = r;
         }
 
@@ -2093,11 +2231,12 @@
 }
 
 static int show_system_status(sd_bus *bus) {
-        char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], since2[FORMAT_TIMESTAMP_MAX];
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(machine_info_clear) struct machine_info mi = {};
+        static const char prefix[] = "           ";
         _cleanup_free_ char *hn = NULL;
         const char *on, *off;
+        unsigned c;
         int r;
 
         hn = gethostname_malloc();
@@ -2127,38 +2266,39 @@
                 off = ansi_normal();
         }
 
-        printf("%s%s%s %s\n", on, special_glyph(SPECIAL_GLYPH_BLACK_CIRCLE), off, arg_host ? arg_host : hn);
+        printf("%s%s%s %s\n", on, special_glyph(SPECIAL_GLYPH_BLACK_CIRCLE), off, arg_host ?: hn);
 
         printf("    State: %s%s%s\n",
                on, strna(mi.state), off);
 
+        printf("    Units: %" PRIu32 " loaded (incl. loaded aliases)\n", mi.n_names);
         printf("     Jobs: %" PRIu32 " queued\n", mi.n_jobs);
         printf("   Failed: %" PRIu32 " units\n", mi.n_failed_units);
 
         printf("    Since: %s; %s\n",
-               format_timestamp_style(since2, sizeof(since2), mi.timestamp, arg_timestamp_style),
-               format_timestamp_relative(since1, sizeof(since1), mi.timestamp));
+               FORMAT_TIMESTAMP_STYLE(mi.timestamp, arg_timestamp_style),
+               FORMAT_TIMESTAMP_RELATIVE(mi.timestamp));
 
-        printf("   CGroup: %s\n", mi.control_group ?: "/");
-        if (IN_SET(arg_transport,
-                   BUS_TRANSPORT_LOCAL,
-                   BUS_TRANSPORT_MACHINE)) {
-                static const char prefix[] = "           ";
-                unsigned c;
+        printf("  systemd: %s\n", mi.version);
 
-                c = columns();
-                if (c > sizeof(prefix) - 1)
-                        c -= sizeof(prefix) - 1;
-                else
-                        c = 0;
+        if (!isempty(mi.tainted))
+                printf("  Tainted: %s%s%s\n", ansi_highlight_yellow(), mi.tainted, ansi_normal());
 
+        printf("   CGroup: %s\n", empty_to_root(mi.control_group));
+
+        c = LESS_BY(columns(), strlen(prefix));
+
+        r = unit_show_processes(bus, SPECIAL_ROOT_SLICE, mi.control_group, prefix, c, get_output_flags(), &error);
+        if (r == -EBADR && arg_transport == BUS_TRANSPORT_LOCAL) /* Compatibility for really old systemd versions */
                 show_cgroup(SYSTEMD_CGROUP_CONTROLLER, strempty(mi.control_group), prefix, c, get_output_flags());
-        }
+        else if (r < 0)
+                log_warning_errno(r, "Failed to dump process list for '%s', ignoring: %s",
+                                  arg_host ?: hn, bus_error_message(&error, r));
 
         return 0;
 }
 
-int show(int argc, char *argv[], void *userdata) {
+int verb_show(int argc, char *argv[], void *userdata) {
         bool new_line = false, ellipsized = false;
         SystemctlShowMode show_mode;
         int r, ret = 0;
@@ -2168,7 +2308,7 @@
 
         show_mode = systemctl_show_mode_from_string(argv[0]);
         if (show_mode < 0)
-                return log_error_errno(show_mode, "Invalid argument.");
+                return log_error_errno(show_mode, "Invalid argument '%s'.", argv[0]);
 
         if (show_mode == SYSTEMCTL_SHOW_HELP && argc <= 1)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -2179,22 +2319,33 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
-        /* If no argument is specified inspect the manager itself */
-        if (show_mode == SYSTEMCTL_SHOW_PROPERTIES && argc <= 1)
-                return show_one(bus, "/org/freedesktop/systemd1", NULL, show_mode, &new_line, &ellipsized);
+        if (argc <= 1) {
+                /* If no argument or filter is specified inspect the manager itself:
+                 * systemctl status → we show status of the manager
+                 * systemctl status --all → status of the manager + status of all units
+                 * systemctl status --state=… → status of units in listed states
+                 * systemctl status --type=… → status of units of listed types
+                 * systemctl status --failed → status of failed units, mirroring systemctl list-units --failed
+                 */
 
-        if (show_mode == SYSTEMCTL_SHOW_STATUS && argc <= 1) {
+                if (!arg_states && !arg_types) {
+                        if (show_mode == SYSTEMCTL_SHOW_PROPERTIES)
+                                /* systemctl show --all → show properties of the manager */
+                                return show_one(bus, "/org/freedesktop/systemd1", NULL, show_mode, &new_line, &ellipsized);
 
-                show_system_status(bus);
-                new_line = true;
+                        r = show_system_status(bus);
+                        if (r < 0)
+                                return r;
 
-                if (arg_all)
-                        ret = show_all(bus, &new_line, &ellipsized);
+                        new_line = true;
+                }
+
+                if (arg_all || arg_states || arg_types)
+                        ret = show_all(bus, show_mode, &new_line, &ellipsized);
         } else {
                 _cleanup_free_ char **patterns = NULL;
-                char **name;
 
                 STRV_FOREACH(name, strv_skip(argv, 1)) {
                         _cleanup_free_ char *path = NULL, *unit = NULL;
@@ -2212,21 +2363,17 @@
 
                         } else {
                                 /* Interpret as PID */
-                                r = get_unit_dbus_path_by_pid(bus, id, &path);
+                                r = get_unit_dbus_path_by_pid(bus, id, &path, &unit);
                                 if (r < 0) {
                                         ret = r;
                                         continue;
                                 }
-
-                                r = unit_name_from_dbus_path(path, &unit);
-                                if (r < 0)
-                                        return log_oom();
                         }
 
                         r = show_one(bus, path, unit, show_mode, &new_line, &ellipsized);
                         if (r < 0)
                                 return r;
-                        else if (r > 0 && ret == 0)
+                        if (r > 0 && ret == 0)
                                 ret = r;
                 }
 
diff --git a/src/systemctl/systemctl-show.h b/src/systemctl/systemctl-show.h
index d778beb..5aeed51 100644
--- a/src/systemctl/systemctl-show.h
+++ b/src/systemctl/systemctl-show.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int show(int argc, char *argv[], void *userdata);
+int verb_show(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-start-special.c b/src/systemctl/systemctl-start-special.c
index 56068d2..fdf2cdf 100644
--- a/src/systemctl/systemctl-start-special.c
+++ b/src/systemctl/systemctl-start-special.c
@@ -1,5 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <unistd.h>
+
 #include "bootspec.h"
 #include "bus-error.h"
 #include "bus-locator.h"
@@ -16,7 +18,7 @@
 #include "systemctl.h"
 
 static int load_kexec_kernel(void) {
-        _cleanup_(boot_config_free) BootConfig config = {};
+        _cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
         _cleanup_free_ char *kernel = NULL, *initrd = NULL, *options = NULL;
         const BootEntry *e;
         pid_t pid;
@@ -30,7 +32,7 @@
         if (access(KEXEC, X_OK) < 0)
                 return log_error_errno(errno, KEXEC" is not available: %m");
 
-        r = boot_entries_load_config_auto(NULL, NULL, &config);
+        r = boot_config_load_auto(&config, NULL, NULL);
         if (r == -ENOKEY)
                 /* The call doesn't log about ENOKEY, let's do so here. */
                 return log_error_errno(r,
@@ -41,6 +43,10 @@
         if (r < 0)
                 return r;
 
+        r = boot_config_select_special_entries(&config, /* skip_efivars= */ false);
+        if (r < 0)
+                return r;
+
         e = boot_config_default_entry(&config);
         if (!e)
                 return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
@@ -114,7 +120,7 @@
         return 0;
 }
 
-int start_special(int argc, char *argv[], void *userdata) {
+int verb_start_special(int argc, char *argv[], void *userdata) {
         bool termination_action; /* An action that terminates the manager, can be performed also by
                                   * signal. */
         enum action a;
@@ -147,19 +153,8 @@
                 return r;
 
         if (a == ACTION_REBOOT) {
-                const char *arg = NULL;
-
-                if (argc > 1) {
-                        if (arg_reboot_argument)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Both --reboot-argument= and positional argument passed to reboot command, refusing.");
-
-                        log_notice("Positional argument to reboot command is deprecated, please use --reboot-argument= instead. Accepting anyway.");
-                        arg = argv[1];
-                } else
-                        arg = arg_reboot_argument;
-
-                if (arg) {
-                        r = update_reboot_parameter_and_warn(arg, false);
+                if (arg_reboot_argument) {
+                        r = update_reboot_parameter_and_warn(arg_reboot_argument, false);
                         if (r < 0)
                                 return r;
                 }
@@ -195,7 +190,7 @@
 
         if (arg_force >= 1 &&
             (termination_action || IN_SET(a, ACTION_KEXEC, ACTION_EXIT)))
-                r = trivial_method(argc, argv, userdata);
+                r = verb_trivial_method(argc, argv, userdata);
         else {
                 /* First try logind, to allow authentication with polkit */
                 if (IN_SET(a,
@@ -211,8 +206,8 @@
                         r = logind_reboot(a);
                         if (r >= 0)
                                 return r;
-                        if (IN_SET(r, -EOPNOTSUPP, -EINPROGRESS))
-                                /* Requested operation is not supported or already in progress */
+                        if (IN_SET(r, -EACCES, -EOPNOTSUPP, -EINPROGRESS))
+                                /* Requested operation requires auth, is not supported or already in progress */
                                 return r;
 
                         /* On all other errors, try low-level operation. In order to minimize the difference
@@ -221,13 +216,13 @@
 
                         arg_no_block = true;
 
-                } else if (IN_SET(a, ACTION_EXIT))
+                } else if (a == ACTION_EXIT)
                         /* Since exit is so close in behaviour to power-off/reboot, let's also make
                          * it asynchronous, in order to not confuse the user needlessly with unexpected
                          * behaviour. */
                         arg_no_block = true;
 
-                r = start_unit(argc, argv, userdata);
+                r = verb_start(argc, argv, userdata);
         }
 
         if (termination_action && arg_force < 2 &&
@@ -237,13 +232,13 @@
         return r;
 }
 
-int start_system_special(int argc, char *argv[], void *userdata) {
+int verb_start_system_special(int argc, char *argv[], void *userdata) {
         /* Like start_special above, but raises an error when running in user mode */
 
-        if (arg_scope != UNIT_FILE_SYSTEM)
+        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Bad action for %s mode.",
-                                       arg_scope == UNIT_FILE_GLOBAL ? "--global" : "--user");
+                                       arg_scope == LOOKUP_SCOPE_GLOBAL ? "--global" : "--user");
 
-        return start_special(argc, argv, userdata);
+        return verb_start_special(argc, argv, userdata);
 }
diff --git a/src/systemctl/systemctl-start-special.h b/src/systemctl/systemctl-start-special.h
index 06875e9..9396321 100644
--- a/src/systemctl/systemctl-start-special.h
+++ b/src/systemctl/systemctl-start-special.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int start_special(int argc, char *argv[], void *userdata);
-int start_system_special(int argc, char *argv[], void *userdata);
+int verb_start_special(int argc, char *argv[], void *userdata);
+int verb_start_system_special(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-start-unit.c b/src/systemctl/systemctl-start-unit.c
index 274b278..224e831 100644
--- a/src/systemctl/systemctl-start-unit.c
+++ b/src/systemctl/systemctl-start-unit.c
@@ -168,8 +168,8 @@
                                            BUS_ERROR_UNIT_MASKED,
                                            BUS_ERROR_JOB_TYPE_NOT_APPLICABLE))
                 log_error("See %s logs and 'systemctl%s status%s %s' for details.",
-                          arg_scope == UNIT_FILE_SYSTEM ? "system" : "user",
-                          arg_scope == UNIT_FILE_SYSTEM ? "" : " --user",
+                          arg_scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user",
+                          arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user",
                           name[0] == '-' ? " --" : "",
                           name);
 
@@ -199,16 +199,13 @@
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        if (w) {
-                char **path;
-
+        if (w)
                 STRV_FOREACH(path, paths) {
                         log_debug("Adding %s to the set", *path);
                         r = bus_wait_for_jobs_add(w, *path);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to watch job %s: %m", *path);
                 }
-        }
 
         return 0;
 }
@@ -245,7 +242,7 @@
 
         assert(extra_args);
 
-        if (arg_scope != UNIT_FILE_SYSTEM)
+        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
                 extra_args[n++] = "--user";
 
         if (arg_transport == BUS_TRANSPORT_REMOTE) {
@@ -261,7 +258,7 @@
         return extra_args;
 }
 
-int start_unit(int argc, char *argv[], void *userdata) {
+int verb_start(int argc, char *argv[], void *userdata) {
         _cleanup_(bus_wait_for_units_freep) BusWaitForUnits *wu = NULL;
         _cleanup_(bus_wait_for_jobs_freep) BusWaitForJobs *w = NULL;
         const char *method, *job_type, *mode, *one_name, *suffix = NULL;
@@ -269,7 +266,6 @@
         _cleanup_strv_free_ char **names = NULL;
         int r, ret = EXIT_SUCCESS;
         sd_bus *bus;
-        char **name;
 
         if (arg_wait && !STR_IN_SET(argv[0], "start", "restart"))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
@@ -303,7 +299,7 @@
                                 mode = "isolate";
                                 suffix = ".target";
                         } else if (!arg_marked) {
-                                /* A command in style of "systemctl start <unit1> <unit2> …", "sysemctl stop <unit1> <unit2> …" and so on */
+                                /* A command in style of "systemctl start <unit1> <unit2> …", "systemctl stop <unit1> <unit2> …" and so on */
                                 method = verb_to_method(argv[0]);
                                 job_type = verb_to_job_type(argv[0]);
                                 mode = arg_job_mode();
diff --git a/src/systemctl/systemctl-start-unit.h b/src/systemctl/systemctl-start-unit.h
index 915c6fa..2865016 100644
--- a/src/systemctl/systemctl-start-unit.h
+++ b/src/systemctl/systemctl-start-unit.h
@@ -3,7 +3,7 @@
 
 #include "systemctl.h"
 
-int start_unit(int argc, char *argv[], void *userdata);
+int verb_start(int argc, char *argv[], void *userdata);
 
 struct action_metadata {
         const char *target;
diff --git a/src/systemctl/systemctl-switch-root.c b/src/systemctl/systemctl-switch-root.c
index b801267..7fa8b26 100644
--- a/src/systemctl/systemctl-switch-root.c
+++ b/src/systemctl/systemctl-switch-root.c
@@ -1,17 +1,38 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "argv-util.h"
 #include "bus-error.h"
 #include "bus-locator.h"
+#include "chase-symlinks.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "proc-cmdline.h"
 #include "signal-util.h"
 #include "stat-util.h"
+#include "systemctl.h"
 #include "systemctl-switch-root.h"
 #include "systemctl-util.h"
-#include "systemctl.h"
 
-int switch_root(int argc, char *argv[], void *userdata) {
+static int same_file_in_root(
+                const char *root,
+                const char *a,
+                const char *b) {
+
+        struct stat sta, stb;
+        int r;
+
+        r = chase_symlinks_and_stat(a, root, CHASE_PREFIX_ROOT, NULL, &sta, NULL);
+        if (r < 0)
+                return r;
+
+        r = chase_symlinks_and_stat(b, root, CHASE_PREFIX_ROOT, NULL, &stb, NULL);
+        if (r < 0)
+                return r;
+
+        return stat_inode_same(&sta, &stb);
+}
+
+int verb_switch_root(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_free_ char *cmdline_init = NULL;
         const char *root, *init;
@@ -25,6 +46,10 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Wrong number of arguments.");
 
         root = argv[1];
+        if (!path_is_valid(root))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid root path: %s", root);
+        if (!path_is_absolute(root))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Root path is not absolute: %s", root);
 
         if (argc >= 3)
                 init = argv[2];
@@ -38,13 +63,13 @@
 
         init = empty_to_null(init);
         if (init) {
-                const char *root_systemd_path = NULL, *root_init_path = NULL;
-
-                root_systemd_path = prefix_roota(root, "/" SYSTEMD_BINARY_PATH);
-                root_init_path = prefix_roota(root, init);
+                if (!path_is_valid(init))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid path to init binary: %s", init);
+                if (!path_is_absolute(init))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Path to init binary is not absolute: %s", init);
 
                 /* If the passed init is actually the same as the systemd binary, then let's suppress it. */
-                if (files_same(root_init_path, root_systemd_path, 0) > 0)
+                if (same_file_in_root(root, SYSTEMD_BINARY_PATH, init) > 0)
                         init = NULL;
         }
 
diff --git a/src/systemctl/systemctl-switch-root.h b/src/systemctl/systemctl-switch-root.h
index 6e13961..e9ba12b 100644
--- a/src/systemctl/systemctl-switch-root.h
+++ b/src/systemctl/systemctl-switch-root.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int switch_root(int argc, char *argv[], void *userdata);
+int verb_switch_root(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-sysv-compat.c b/src/systemctl/systemctl-sysv-compat.c
index a78fa1e..fc73830 100644
--- a/src/systemctl/systemctl-sysv-compat.c
+++ b/src/systemctl/systemctl-sysv-compat.c
@@ -18,9 +18,8 @@
 
 int talk_initctl(char rl) {
 #if HAVE_SYSV_COMPAT
-        struct init_request request;
-        _cleanup_close_ int fd = -1;
-        const char *p;
+        _cleanup_close_ int fd = -EBADF;
+        const char *path;
         int r;
 
         /* Try to switch to the specified SysV runlevel. Returns == 0 if the operation does not apply on this
@@ -29,19 +28,19 @@
         if (rl == 0)
                 return 0;
 
-        FOREACH_STRING(p, "/run/initctl", "/dev/initctl") {
-                fd = open(p, O_WRONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
-                if (fd >= 0 || errno != ENOENT)
+        FOREACH_STRING(_path, "/run/initctl", "/dev/initctl") {
+                path = _path;
+
+                fd = open(path, O_WRONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
+                if (fd < 0 && errno != ENOENT)
+                        return log_error_errno(errno, "Failed to open %s: %m", path);
+                if (fd >= 0)
                         break;
         }
-        if (fd < 0) {
-                if (errno == ENOENT)
-                        return 0;
+        if (fd < 0)
+                return 0;
 
-                return log_error_errno(errno, "Failed to open initctl fifo: %m");
-        }
-
-        request = (struct init_request) {
+        struct init_request request = {
                 .magic = INIT_MAGIC,
                 .sleeptime = 0,
                 .cmd = INIT_CMD_RUNLVL,
@@ -50,7 +49,7 @@
 
         r = loop_write(fd, &request, sizeof(request), false);
         if (r < 0)
-                return log_error_errno(r, "Failed to write to %s: %m", p);
+                return log_error_errno(r, "Failed to write to %s: %m", path);
 
         return 1;
 #else
@@ -114,10 +113,11 @@
 #if HAVE_SYSV_COMPAT
         _cleanup_(lookup_paths_free) LookupPaths paths = {};
         unsigned f = 0;
+        SysVUnitEnableState enable_state = SYSV_UNIT_NOT_FOUND;
 
         /* Processes all SysV units, and reshuffles the array so that afterwards only the native units remain */
 
-        if (arg_scope != UNIT_FILE_SYSTEM)
+        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
                 return 0;
 
         if (getenv_bool("SYSTEMCTL_SKIP_SYSV") > 0)
@@ -129,7 +129,7 @@
                         "is-enabled"))
                 return 0;
 
-        r = lookup_paths_init(&paths, arg_scope, LOOKUP_PATHS_EXCLUDE_GENERATED, arg_root);
+        r = lookup_paths_init_or_warn(&paths, arg_scope, LOOKUP_PATHS_EXCLUDE_GENERATED, arg_root);
         if (r < 0)
                 return r;
 
@@ -227,10 +227,12 @@
                         if (j == EXIT_SUCCESS) {
                                 if (!arg_quiet)
                                         puts("enabled");
-                                r = 1;
+                                enable_state = SYSV_UNIT_ENABLED;
                         } else {
                                 if (!arg_quiet)
                                         puts("disabled");
+                                if (enable_state != SYSV_UNIT_ENABLED)
+                                        enable_state = SYSV_UNIT_DISABLED;
                         }
 
                 } else if (j != EXIT_SUCCESS)
@@ -246,6 +248,8 @@
                 strv_remove(args + f, name);
         }
 
+        if (streq(verb, "is-enabled"))
+                return enable_state;
 #endif
         return r;
 }
diff --git a/src/systemctl/systemctl-sysv-compat.h b/src/systemctl/systemctl-sysv-compat.h
index 86fd3ec..05db6ec 100644
--- a/src/systemctl/systemctl-sysv-compat.h
+++ b/src/systemctl/systemctl-sysv-compat.h
@@ -30,6 +30,12 @@
         EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN   = 4,
 };
 
+typedef enum SysVUnitEnableState {
+        SYSV_UNIT_NOT_FOUND = 0,
+        SYSV_UNIT_DISABLED,
+        SYSV_UNIT_ENABLED,
+} SysVUnitEnableState;
+
 int enable_sysv_units(const char *verb, char **args);
 
 int action_to_runlevel(void) _pure_;
diff --git a/src/systemctl/systemctl-trivial-method.c b/src/systemctl/systemctl-trivial-method.c
index c0b4d48..5e530f3 100644
--- a/src/systemctl/systemctl-trivial-method.c
+++ b/src/systemctl/systemctl-trivial-method.c
@@ -8,7 +8,7 @@
 
 /* A generic implementation for cases we just need to invoke a simple method call on the Manager object. */
 
-int trivial_method(int argc, char *argv[], void *userdata) {
+int verb_trivial_method(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         const char *method;
         sd_bus *bus;
diff --git a/src/systemctl/systemctl-trivial-method.h b/src/systemctl/systemctl-trivial-method.h
index 6dcd152..d36b480 100644
--- a/src/systemctl/systemctl-trivial-method.h
+++ b/src/systemctl/systemctl-trivial-method.h
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-int trivial_method(int argc, char *argv[], void *userdata);
+int verb_trivial_method(int argc, char *argv[], void *userdata);
diff --git a/src/systemctl/systemctl-util.c b/src/systemctl/systemctl-util.c
index 99f1394..bcad65f 100644
--- a/src/systemctl/systemctl-util.c
+++ b/src/systemctl/systemctl-util.c
@@ -10,6 +10,7 @@
 #include "bus-locator.h"
 #include "bus-map-properties.h"
 #include "bus-unit-util.h"
+#include "chase-symlinks.h"
 #include "dropin.h"
 #include "env-util.h"
 #include "exit-status.h"
@@ -45,14 +46,14 @@
         if (!buses[focus]) {
                 bool user;
 
-                user = arg_scope != UNIT_FILE_SYSTEM;
+                user = arg_scope != LOOKUP_SCOPE_SYSTEM;
 
                 if (focus == BUS_MANAGER)
                         r = bus_connect_transport_systemd(arg_transport, arg_host, user, &buses[focus]);
                 else
                         r = bus_connect_transport(arg_transport, arg_host, user, &buses[focus]);
                 if (r < 0)
-                        return bus_log_connect_error(r);
+                        return bus_log_connect_error(r, arg_transport);
 
                 (void) sd_bus_set_allow_interactive_authorization(buses[focus], arg_ask_password);
         }
@@ -72,7 +73,7 @@
         if (arg_dry_run)
                 return;
 
-        if (arg_scope != UNIT_FILE_SYSTEM)
+        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
                 return;
 
         ask_password_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -81,7 +82,7 @@
 void polkit_agent_open_maybe(void) {
         /* Open the polkit agent as a child process if necessary */
 
-        if (arg_scope != UNIT_FILE_SYSTEM)
+        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
                 return;
 
         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
@@ -121,6 +122,7 @@
         UnitActiveState state;
         int r;
 
+        assert(bus);
         assert(unit);
         assert(ret_active_state);
 
@@ -147,6 +149,34 @@
         return 0;
 }
 
+int get_sub_state_one_unit(sd_bus *bus, const char *unit, char **ret_sub_state) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_free_ char *sub_state = NULL, *dbus_path = NULL;
+        int r;
+
+        assert(bus);
+        assert(unit);
+        assert(ret_sub_state);
+
+        dbus_path = unit_dbus_path_from_name(unit);
+        if (!dbus_path)
+                return log_oom();
+
+        r = sd_bus_get_property_string(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        dbus_path,
+                        "org.freedesktop.systemd1.Unit",
+                        "SubState",
+                        &error,
+                        &sub_state);
+        if (r < 0)
+                return log_error_errno(r, "Failed to retrieve unit sub state: %s", bus_error_message(&error, r));
+
+        *ret_sub_state = TAKE_PTR(sub_state);
+        return 0;
+}
+
 int get_unit_list(
                 sd_bus *bus,
                 const char *machine,
@@ -233,7 +263,6 @@
 
 int expand_unit_names(sd_bus *bus, char **names, const char* suffix, char ***ret, bool *ret_expanded) {
         _cleanup_strv_free_ char **mangled = NULL, **globs = NULL;
-        char **name;
         int r;
 
         assert(bus);
@@ -291,9 +320,6 @@
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_free_ char *n = NULL, *dbus_path = NULL, *load_state = NULL;
         _cleanup_strv_free_ char **triggered_by = NULL;
-        bool print_warning_label = true;
-        UnitActiveState active_state;
-        char **i;
         int r;
 
         r = unit_name_mangle(unit, 0, &n);
@@ -322,7 +348,10 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to get triggered by array of %s: %s", n, bus_error_message(&error, r));
 
+        bool first = true;
         STRV_FOREACH(i, triggered_by) {
+                UnitActiveState active_state;
+
                 r = get_state_one_unit(bus, *i, &active_state);
                 if (r < 0)
                         return r;
@@ -330,9 +359,9 @@
                 if (!IN_SET(active_state, UNIT_ACTIVE, UNIT_RELOADING))
                         continue;
 
-                if (print_warning_label) {
+                if (first) {
                         log_warning("Warning: Stopping %s, but it can still be activated by:", n);
-                        print_warning_label = false;
+                        first = false;
                 }
 
                 log_warning("  %s", *i);
@@ -377,16 +406,12 @@
 void warn_unit_file_changed(const char *unit) {
         assert(unit);
 
-        log_warning("%sWarning:%s The unit file, source configuration file or drop-ins of %s changed on disk. Run 'systemctl%s daemon-reload' to reload units.",
-                    ansi_highlight_red(),
-                    ansi_normal(),
+        log_warning("Warning: The unit file, source configuration file or drop-ins of %s changed on disk. Run 'systemctl%s daemon-reload' to reload units.",
                     unit,
-                    arg_scope == UNIT_FILE_SYSTEM ? "" : " --user");
+                    arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user");
 }
 
 int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **ret_unit_path) {
-        char **p;
-
         assert(lp);
         assert(unit_name);
 
@@ -665,7 +690,6 @@
 
 int append_unit_dependencies(sd_bus *bus, char **names, char ***ret) {
         _cleanup_strv_free_ char **with_deps = NULL;
-        char **name;
 
         assert(bus);
         assert(ret);
@@ -709,13 +733,14 @@
 int unit_get_dependencies(sd_bus *bus, const char *name, char ***ret) {
         _cleanup_strv_free_ char **deps = NULL;
 
-        static const struct bus_properties_map map[_DEPENDENCY_MAX][6] = {
+        static const struct bus_properties_map map[_DEPENDENCY_MAX][7] = {
                 [DEPENDENCY_FORWARD] = {
                         { "Requires",    "as", NULL, 0 },
                         { "Requisite",   "as", NULL, 0 },
                         { "Wants",       "as", NULL, 0 },
                         { "ConsistsOf",  "as", NULL, 0 },
                         { "BindsTo",     "as", NULL, 0 },
+                        { "Upholds",     "as", NULL, 0 },
                         {}
                 },
                 [DEPENDENCY_REVERSE] = {
@@ -724,6 +749,7 @@
                         { "WantedBy",    "as", NULL, 0 },
                         { "PartOf",      "as", NULL, 0 },
                         { "BoundBy",     "as", NULL, 0 },
+                        { "UpheldBy",    "as", NULL, 0 },
                         {}
                 },
                 [DEPENDENCY_AFTER] = {
@@ -782,7 +808,7 @@
         if (!strv_fnmatch_or_empty(patterns, u->id, FNM_NOESCAPE))
                 return false;
 
-        if (arg_types && !strv_find(arg_types, unit_type_suffix(u->id)))
+        if (arg_types && !strv_contains(arg_types, unit_type_suffix(u->id)))
                 return false;
 
         if (arg_all)
@@ -818,7 +844,7 @@
         if (!isempty(arg_root))
                 return true;
 
-        if (arg_scope == UNIT_FILE_GLOBAL)
+        if (arg_scope == LOOKUP_SCOPE_GLOBAL)
                 return true;
 
         /* Unsupported environment variable, mostly for debugging purposes */
@@ -859,7 +885,7 @@
 
 int mangle_names(const char *operation, char **original_names, char ***ret_mangled_names) {
         _cleanup_strv_free_ char **l = NULL;
-        char **i, **name;
+        char **i;
         int r;
 
         assert(ret_mangled_names);
@@ -872,18 +898,15 @@
 
                 /* When enabling units qualified path names are OK, too, hence allow them explicitly. */
 
-                if (is_path(*name)) {
-                        *i = strdup(*name);
-                        if (!*i)
-                                return log_oom();
-                } else {
+                if (is_path(*name))
+                        r = path_make_absolute_cwd(*name, i);
+                else
                         r = unit_name_mangle_with_suffix(*name, operation,
                                                          arg_quiet ? 0 : UNIT_NAME_MANGLE_WARN,
                                                          ".service", i);
-                        if (r < 0) {
-                                *i = NULL;
-                                return log_error_errno(r, "Failed to mangle unit name: %m");
-                        }
+                if (r < 0) {
+                        *i = NULL;
+                        return log_error_errno(r, "Failed to mangle unit name or path '%s': %m", *name);
                 }
 
                 i++;
@@ -930,6 +953,6 @@
                                              (arg_dry_run ? REBOOT_DRY_RUN : 0));
 
         default:
-                assert_not_reached("Unknown action.");
+                assert_not_reached();
         }
 }
diff --git a/src/systemctl/systemctl-util.h b/src/systemctl/systemctl-util.h
index 6445bb4..317bab7 100644
--- a/src/systemctl/systemctl-util.h
+++ b/src/systemctl/systemctl-util.h
@@ -21,7 +21,8 @@
 
 int translate_bus_error_to_exit_status(int r, const sd_bus_error *error);
 
-int get_state_one_unit(sd_bus *bus, const char *name, UnitActiveState *ret_active_state);
+int get_state_one_unit(sd_bus *bus, const char *unit, UnitActiveState *ret_active_state);
+int get_sub_state_one_unit(sd_bus *bus, const char *unit, char **ret_sub_state);
 int get_unit_list(sd_bus *bus, const char *machine, char **patterns, UnitInfo **unit_infos, int c, sd_bus_message **ret_reply);
 int expand_unit_names(sd_bus *bus, char **names, const char* suffix, char ***ret, bool *ret_expanded);
 
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 2f6f581..4e7fd04 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -6,18 +6,23 @@
 
 #include "sd-daemon.h"
 
+#include "build.h"
 #include "bus-util.h"
+#include "dissect-image.h"
 #include "install.h"
 #include "main-func.h"
+#include "mount-util.h"
 #include "output-mode.h"
 #include "pager.h"
 #include "parse-argument.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "process-util.h"
+#include "reboot-util.h"
 #include "rlimit-util.h"
 #include "sigbus.h"
 #include "signal-util.h"
+#include "stat-util.h"
 #include "string-table.h"
 #include "systemctl-add-dependency.h"
 #include "systemctl-cancel-job.h"
@@ -66,7 +71,7 @@
 bool arg_all = false;
 enum dependency arg_dependency = DEPENDENCY_FORWARD;
 const char *_arg_job_mode = NULL;
-UnitFileScope arg_scope = UNIT_FILE_SYSTEM;
+LookupScope arg_scope = LOOKUP_SCOPE_SYSTEM;
 bool arg_wait = false;
 bool arg_no_block = false;
 int arg_legend = -1; /* -1: true, unless --quiet is passed, 1: true */
@@ -80,6 +85,7 @@
 int arg_check_inhibitors = -1;
 bool arg_dry_run = false;
 bool arg_quiet = false;
+bool arg_no_warn = false;
 bool arg_full = false;
 bool arg_recursive = false;
 bool arg_with_dependencies = false;
@@ -89,9 +95,10 @@
 bool arg_runtime = false;
 UnitFilePresetMode arg_preset_mode = UNIT_FILE_PRESET_FULL;
 char **arg_wall = NULL;
-const char *arg_kill_who = NULL;
+const char *arg_kill_whom = NULL;
 int arg_signal = SIGTERM;
 char *arg_root = NULL;
+char *arg_image = NULL;
 usec_t arg_when = 0;
 const char *arg_reboot_argument = NULL;
 enum action arg_action = ACTION_SYSTEMCTL;
@@ -111,24 +118,27 @@
 bool arg_read_only = false;
 bool arg_mkdir = false;
 bool arg_marked = false;
+const char *arg_drop_in = NULL;
 
 STATIC_DESTRUCTOR_REGISTER(arg_types, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_states, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_properties, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(_arg_job_mode, unsetp);
 STATIC_DESTRUCTOR_REGISTER(arg_wall, strv_freep);
-STATIC_DESTRUCTOR_REGISTER(arg_kill_who, unsetp);
+STATIC_DESTRUCTOR_REGISTER(arg_kill_whom, unsetp);
 STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_reboot_argument, unsetp);
 STATIC_DESTRUCTOR_REGISTER(arg_host, unsetp);
 STATIC_DESTRUCTOR_REGISTER(arg_boot_loader_entry, unsetp);
 STATIC_DESTRUCTOR_REGISTER(arg_clean_what, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_drop_in, unsetp);
 
 static int systemctl_help(void) {
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("systemctl", "1", &link);
         if (r < 0)
@@ -138,6 +148,8 @@
                "%5$sQuery or send control commands to the system manager.%6$s\n"
                "\n%3$sUnit Commands:%4$s\n"
                "  list-units [PATTERN...]             List units currently in memory\n"
+               "  list-automounts [PATTERN...]        List automount units currently in memory,\n"
+               "                                      ordered by path\n"
                "  list-sockets [PATTERN...]           List socket units currently in memory,\n"
                "                                      ordered by address\n"
                "  list-timers [PATTERN...]            List timer units currently in memory,\n"
@@ -257,10 +269,10 @@
                "     --show-types        When showing sockets, explicitly show their type\n"
                "     --value             When showing properties, only print the value\n"
                "     --check-inhibitors=MODE\n"
-               "                         Specify if checking inhibitors before shutting down,\n"
-               "                         sleeping or hibernating\n"
+               "                         Whether to check inhibitors before shutting down,\n"
+               "                         sleeping, or hibernating\n"
                "  -i                     Shortcut for --check-inhibitors=no\n"
-               "     --kill-who=WHO      Whom to send signal to\n"
+               "     --kill-whom=WHOM    Whom to send signal to\n"
                "  -s --signal=SIGNAL     Which signal to send\n"
                "     --what=RESOURCES    Which types of resources to remove\n"
                "     --now               Start or stop unit after enabling or disabling it\n"
@@ -269,6 +281,7 @@
                "                             kexec, suspend, hibernate, suspend-then-hibernate,\n"
                "                             hybrid-sleep, default, rescue, emergency, and exit.\n"
                "  -q --quiet             Suppress output\n"
+               "     --no-warn           Suppress several warnings shown by default\n"
                "     --wait              For (re)start, wait until service stopped again\n"
                "                         For is-system-running, wait until startup is completed\n"
                "     --no-block          Do not wait until operation finished\n"
@@ -277,18 +290,21 @@
                "     --legend=BOOL       Enable/disable the legend (column headers and hints)\n"
                "     --no-pager          Do not pipe output into a pager\n"
                "     --no-ask-password   Do not ask for system passwords\n"
-               "     --global            Enable/disable/mask default user unit files globally\n"
-               "     --runtime           Enable/disable/mask unit files temporarily until next\n"
-               "                         reboot\n"
+               "     --global            Edit/enable/disable/mask default user unit files\n"
+               "                         globally\n"
+               "     --runtime           Edit/enable/disable/mask unit files temporarily until\n"
+               "                         next reboot\n"
                "  -f --force             When enabling unit files, override existing symlinks\n"
                "                         When shutting down, execute action immediately\n"
                "     --preset-mode=      Apply only enable, only disable, or all presets\n"
-               "     --root=PATH         Enable/disable/mask unit files in the specified root\n"
-               "                         directory\n"
+               "     --root=PATH         Edit/enable/disable/mask unit files in the specified\n"
+               "                         root directory\n"
+               "     --image=PATH        Edit/enable/disable/mask unit files in the specified\n"
+               "                         image\n"
                "  -n --lines=INTEGER     Number of journal entries to show\n"
                "  -o --output=STRING     Change journal output mode (short, short-precise,\n"
                "                             short-iso, short-iso-precise, short-full,\n"
-               "                             short-monotonic, short-unix,\n"
+               "                             short-monotonic, short-unix, short-delta,\n"
                "                             verbose, export, json, json-pretty, json-sse, cat)\n"
                "     --firmware-setup    Tell the firmware to show the setup menu on next boot\n"
                "     --boot-loader-menu=TIME\n"
@@ -296,14 +312,12 @@
                "     --boot-loader-entry=NAME\n"
                "                         Boot into a specific boot loader entry on next boot\n"
                "     --plain             Print unit dependencies as a list instead of a tree\n"
-               "     --timestamp=FORMAT  Change format of printed timestamps.\n"
-               "                         'pretty' (default): 'Day YYYY-MM-DD HH:MM:SS TZ\n"
-               "                         'us': 'Day YYYY-MM-DD HH:MM:SS.UUUUUU TZ\n"
-               "                         'utc': 'Day YYYY-MM-DD HH:MM:SS UTC\n"
-               "                         'us+utc': 'Day YYYY-MM-DD HH:MM:SS.UUUUUU UTC\n"
+               "     --timestamp=FORMAT  Change format of printed timestamps (pretty, unix,\n"
+               "                             us, utc, us+utc)\n"
                "     --read-only         Create read-only bind mount\n"
                "     --mkdir             Create directory before mounting, if missing\n"
                "     --marked            Restart/reload previously marked units\n"
+               "     --drop-in=NAME      Edit unit files using the specified drop-in file name\n"
                "\nSee the %2$s for details.\n",
                program_invocation_short_name,
                link,
@@ -402,8 +416,9 @@
                 ARG_NO_PAGER,
                 ARG_NO_WALL,
                 ARG_ROOT,
+                ARG_IMAGE,
                 ARG_NO_RELOAD,
-                ARG_KILL_WHO,
+                ARG_KILL_WHOM,
                 ARG_NO_ASK_PASSWORD,
                 ARG_FAILED,
                 ARG_RUNTIME,
@@ -424,6 +439,8 @@
                 ARG_READ_ONLY,
                 ARG_MKDIR,
                 ARG_MARKED,
+                ARG_NO_WARN,
+                ARG_DROP_IN,
         };
 
         static const struct option options[] = {
@@ -456,10 +473,12 @@
                 { "no-wall",             no_argument,       NULL, ARG_NO_WALL             },
                 { "dry-run",             no_argument,       NULL, ARG_DRY_RUN             },
                 { "quiet",               no_argument,       NULL, 'q'                     },
+                { "no-warn",             no_argument,       NULL, ARG_NO_WARN             },
                 { "root",                required_argument, NULL, ARG_ROOT                },
+                { "image",               required_argument, NULL, ARG_IMAGE               },
                 { "force",               no_argument,       NULL, 'f'                     },
                 { "no-reload",           no_argument,       NULL, ARG_NO_RELOAD           },
-                { "kill-who",            required_argument, NULL, ARG_KILL_WHO            },
+                { "kill-whom",           required_argument, NULL, ARG_KILL_WHOM           },
                 { "signal",              required_argument, NULL, 's'                     },
                 { "no-ask-password",     no_argument,       NULL, ARG_NO_ASK_PASSWORD     },
                 { "host",                required_argument, NULL, 'H'                     },
@@ -484,6 +503,7 @@
                 { "read-only",           no_argument,       NULL, ARG_READ_ONLY           },
                 { "mkdir",               no_argument,       NULL, ARG_MKDIR               },
                 { "marked",              no_argument,       NULL, ARG_MARKED              },
+                { "drop-in",             required_argument, NULL, ARG_DROP_IN             },
                 {}
         };
 
@@ -619,15 +639,15 @@
                         break;
 
                 case ARG_USER:
-                        arg_scope = UNIT_FILE_USER;
+                        arg_scope = LOOKUP_SCOPE_USER;
                         break;
 
                 case ARG_SYSTEM:
-                        arg_scope = UNIT_FILE_SYSTEM;
+                        arg_scope = LOOKUP_SCOPE_SYSTEM;
                         break;
 
                 case ARG_GLOBAL:
-                        arg_scope = UNIT_FILE_GLOBAL;
+                        arg_scope = LOOKUP_SCOPE_GLOBAL;
                         break;
 
                 case ARG_WAIT:
@@ -663,6 +683,12 @@
                                 return r;
                         break;
 
+                case ARG_IMAGE:
+                        r = parse_path_argument(optarg, false, &arg_image);
+                        if (r < 0)
+                                return r;
+                        break;
+
                 case 'l':
                         arg_full = true;
                         break;
@@ -693,8 +719,8 @@
                         arg_no_reload = true;
                         break;
 
-                case ARG_KILL_WHO:
-                        arg_kill_who = optarg;
+                case ARG_KILL_WHOM:
+                        arg_kill_whom = optarg;
                         break;
 
                 case 's':
@@ -824,7 +850,7 @@
 
                 case ARG_PRESET_MODE:
                         if (streq(optarg, "help")) {
-                                DUMP_STRING_TABLE(unit_file_preset_mode, UnitFilePresetMode, _UNIT_FILE_PRESET_MAX);
+                                DUMP_STRING_TABLE(unit_file_preset_mode, UnitFilePresetMode, _UNIT_FILE_PRESET_MODE_MAX);
                                 return 0;
                         }
 
@@ -910,6 +936,14 @@
                         arg_marked = true;
                         break;
 
+                case ARG_NO_WARN:
+                        arg_no_warn = true;
+                        break;
+
+                case ARG_DROP_IN:
+                        arg_drop_in = optarg;
+                        break;
+
                 case '.':
                         /* Output an error mimicking getopt, and print a hint afterwards */
                         log_error("%s: invalid option -- '.'", program_invocation_name);
@@ -922,15 +956,15 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         /* If we are in --user mode, there's no point in talking to PolicyKit or the infra to query system
          * passwords */
-        if (arg_scope != UNIT_FILE_SYSTEM)
+        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
                 arg_ask_password = false;
 
-        if (arg_transport == BUS_TRANSPORT_REMOTE && arg_scope != UNIT_FILE_SYSTEM)
+        if (arg_transport == BUS_TRANSPORT_REMOTE && arg_scope != LOOKUP_SCOPE_SYSTEM)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Cannot access user instance remotely.");
 
@@ -959,6 +993,9 @@
                                                "List of units to restart/reload is required.");
         }
 
+        if (arg_image && arg_root)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Please specify either --root= or --image=, the combination of both is not supported.");
+
         return 1;
 }
 
@@ -1022,101 +1059,103 @@
 #ifndef FUZZ_SYSTEMCTL_PARSE_ARGV
 static int systemctl_main(int argc, char *argv[]) {
         static const Verb verbs[] = {
-                { "list-units",            VERB_ANY, VERB_ANY, VERB_DEFAULT|VERB_ONLINE_ONLY, list_units },
-                { "list-unit-files",       VERB_ANY, VERB_ANY, 0,                list_unit_files         },
-                { "list-sockets",          VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, list_sockets            },
-                { "list-timers",           VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, list_timers             },
-                { "list-jobs",             VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, list_jobs               },
-                { "list-machines",         VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, list_machines           },
-                { "clear-jobs",            VERB_ANY, 1,        VERB_ONLINE_ONLY, trivial_method          },
-                { "cancel",                VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, cancel_job              },
-                { "start",                 2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              },
-                { "stop",                  2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              },
-                { "condstop",              2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              }, /* For compatibility with ALTLinux */
-                { "reload",                2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              },
-                { "restart",               2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              },
-                { "try-restart",           2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              },
-                { "reload-or-restart",     VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, start_unit              },
-                { "reload-or-try-restart", 2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              }, /* For compatibility with old systemctl <= 228 */
-                { "try-reload-or-restart", 2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              },
-                { "force-reload",          2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              }, /* For compatibility with SysV */
-                { "condreload",            2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              }, /* For compatibility with ALTLinux */
-                { "condrestart",           2,        VERB_ANY, VERB_ONLINE_ONLY, start_unit              }, /* For compatibility with RH */
-                { "isolate",               2,        2,        VERB_ONLINE_ONLY, start_unit              },
-                { "kill",                  2,        VERB_ANY, VERB_ONLINE_ONLY, kill_unit               },
-                { "clean",                 2,        VERB_ANY, VERB_ONLINE_ONLY, clean_or_freeze_unit    },
-                { "freeze",                2,        VERB_ANY, VERB_ONLINE_ONLY, clean_or_freeze_unit    },
-                { "thaw",                  2,        VERB_ANY, VERB_ONLINE_ONLY, clean_or_freeze_unit    },
-                { "is-active",             2,        VERB_ANY, VERB_ONLINE_ONLY, check_unit_active       },
-                { "check",                 2,        VERB_ANY, VERB_ONLINE_ONLY, check_unit_active       }, /* deprecated alias of is-active */
-                { "is-failed",             2,        VERB_ANY, VERB_ONLINE_ONLY, check_unit_failed       },
-                { "show",                  VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, show                    },
-                { "cat",                   2,        VERB_ANY, VERB_ONLINE_ONLY, cat                     },
-                { "status",                VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, show                    },
-                { "help",                  VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, show                    },
-                { "daemon-reload",         VERB_ANY, 1,        VERB_ONLINE_ONLY, daemon_reload           },
-                { "daemon-reexec",         VERB_ANY, 1,        VERB_ONLINE_ONLY, daemon_reload           },
-                { "log-level",             VERB_ANY, 2,        VERB_ONLINE_ONLY, log_setting             },
-                { "log-target",            VERB_ANY, 2,        VERB_ONLINE_ONLY, log_setting             },
-                { "service-log-level",     2,        3,        VERB_ONLINE_ONLY, service_log_setting     },
-                { "service-log-target",    2,        3,        VERB_ONLINE_ONLY, service_log_setting     },
-                { "service-watchdogs",     VERB_ANY, 2,        VERB_ONLINE_ONLY, service_watchdogs       },
-                { "show-environment",      VERB_ANY, 1,        VERB_ONLINE_ONLY, show_environment        },
-                { "set-environment",       2,        VERB_ANY, VERB_ONLINE_ONLY, set_environment         },
-                { "unset-environment",     2,        VERB_ANY, VERB_ONLINE_ONLY, set_environment         },
-                { "import-environment",    VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, import_environment      },
-                { "halt",                  VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "poweroff",              VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "reboot",                VERB_ANY, 2,        VERB_ONLINE_ONLY, start_system_special    },
-                { "kexec",                 VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "suspend",               VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "hibernate",             VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "hybrid-sleep",          VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "suspend-then-hibernate",VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "default",               VERB_ANY, 1,        VERB_ONLINE_ONLY, start_special           },
-                { "rescue",                VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "emergency",             VERB_ANY, 1,        VERB_ONLINE_ONLY, start_system_special    },
-                { "exit",                  VERB_ANY, 2,        VERB_ONLINE_ONLY, start_special           },
-                { "reset-failed",          VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, reset_failed            },
-                { "enable",                2,        VERB_ANY, 0,                enable_unit             },
-                { "disable",               2,        VERB_ANY, 0,                enable_unit             },
-                { "is-enabled",            2,        VERB_ANY, 0,                unit_is_enabled         },
-                { "reenable",              2,        VERB_ANY, 0,                enable_unit             },
-                { "preset",                2,        VERB_ANY, 0,                enable_unit             },
-                { "preset-all",            VERB_ANY, 1,        0,                preset_all              },
-                { "mask",                  2,        VERB_ANY, 0,                enable_unit             },
-                { "unmask",                2,        VERB_ANY, 0,                enable_unit             },
-                { "link",                  2,        VERB_ANY, 0,                enable_unit             },
-                { "revert",                2,        VERB_ANY, 0,                enable_unit             },
-                { "switch-root",           2,        VERB_ANY, VERB_ONLINE_ONLY, switch_root             },
-                { "list-dependencies",     VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, list_dependencies       },
-                { "set-default",           2,        2,        0,                set_default             },
-                { "get-default",           VERB_ANY, 1,        0,                get_default             },
-                { "set-property",          3,        VERB_ANY, VERB_ONLINE_ONLY, set_property            },
-                { "is-system-running",     VERB_ANY, 1,        0,                is_system_running       },
-                { "add-wants",             3,        VERB_ANY, 0,                add_dependency          },
-                { "add-requires",          3,        VERB_ANY, 0,                add_dependency          },
-                { "edit",                  2,        VERB_ANY, VERB_ONLINE_ONLY, edit                    },
-                { "bind",                  3,        4,        VERB_ONLINE_ONLY, mount_bind              },
-                { "mount-image",           4,        5,        VERB_ONLINE_ONLY, mount_image             },
+                { "list-units",            VERB_ANY, VERB_ANY, VERB_DEFAULT|VERB_ONLINE_ONLY, verb_list_units },
+                { "list-unit-files",       VERB_ANY, VERB_ANY, 0,                verb_list_unit_files         },
+                { "list-automounts",       VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_list_automounts         },
+                { "list-sockets",          VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_list_sockets            },
+                { "list-timers",           VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_list_timers             },
+                { "list-jobs",             VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_list_jobs               },
+                { "list-machines",         VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_list_machines           },
+                { "clear-jobs",            VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_trivial_method          },
+                { "cancel",                VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_cancel                  },
+                { "start",                 2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   },
+                { "stop",                  2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   },
+                { "condstop",              2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   }, /* For compatibility with ALTLinux */
+                { "reload",                2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   },
+                { "restart",               2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   },
+                { "try-restart",           2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   },
+                { "reload-or-restart",     VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_start                   },
+                { "reload-or-try-restart", 2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   }, /* For compatibility with old systemctl <= 228 */
+                { "try-reload-or-restart", 2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   },
+                { "force-reload",          2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   }, /* For compatibility with SysV */
+                { "condreload",            2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   }, /* For compatibility with ALTLinux */
+                { "condrestart",           2,        VERB_ANY, VERB_ONLINE_ONLY, verb_start                   }, /* For compatibility with RH */
+                { "isolate",               2,        2,        VERB_ONLINE_ONLY, verb_start                   },
+                { "kill",                  2,        VERB_ANY, VERB_ONLINE_ONLY, verb_kill                    },
+                { "clean",                 2,        VERB_ANY, VERB_ONLINE_ONLY, verb_clean_or_freeze         },
+                { "freeze",                2,        VERB_ANY, VERB_ONLINE_ONLY, verb_clean_or_freeze         },
+                { "thaw",                  2,        VERB_ANY, VERB_ONLINE_ONLY, verb_clean_or_freeze         },
+                { "is-active",             2,        VERB_ANY, VERB_ONLINE_ONLY, verb_is_active               },
+                { "check",                 2,        VERB_ANY, VERB_ONLINE_ONLY, verb_is_active               }, /* deprecated alias of is-active */
+                { "is-failed",             2,        VERB_ANY, VERB_ONLINE_ONLY, verb_is_failed               },
+                { "show",                  VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_show                    },
+                { "cat",                   2,        VERB_ANY, VERB_ONLINE_ONLY, verb_cat                     },
+                { "status",                VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_show                    },
+                { "help",                  VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_show                    },
+                { "daemon-reload",         1,        1,        VERB_ONLINE_ONLY, verb_daemon_reload           },
+                { "daemon-reexec",         1,        1,        VERB_ONLINE_ONLY, verb_daemon_reload           },
+                { "log-level",             VERB_ANY, 2,        VERB_ONLINE_ONLY, verb_log_setting             },
+                { "log-target",            VERB_ANY, 2,        VERB_ONLINE_ONLY, verb_log_setting             },
+                { "service-log-level",     2,        3,        VERB_ONLINE_ONLY, verb_service_log_setting     },
+                { "service-log-target",    2,        3,        VERB_ONLINE_ONLY, verb_service_log_setting     },
+                { "service-watchdogs",     VERB_ANY, 2,        VERB_ONLINE_ONLY, verb_service_watchdogs       },
+                { "show-environment",      VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_show_environment        },
+                { "set-environment",       2,        VERB_ANY, VERB_ONLINE_ONLY, verb_set_environment         },
+                { "unset-environment",     2,        VERB_ANY, VERB_ONLINE_ONLY, verb_set_environment         },
+                { "import-environment",    VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_import_environment      },
+                { "halt",                  VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "poweroff",              VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "reboot",                VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "kexec",                 VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "suspend",               VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "hibernate",             VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "hybrid-sleep",          VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "suspend-then-hibernate",VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "default",               VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_special           },
+                { "rescue",                VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "emergency",             VERB_ANY, 1,        VERB_ONLINE_ONLY, verb_start_system_special    },
+                { "exit",                  VERB_ANY, 2,        VERB_ONLINE_ONLY, verb_start_special           },
+                { "reset-failed",          VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_reset_failed            },
+                { "enable",                2,        VERB_ANY, 0,                verb_enable                  },
+                { "disable",               2,        VERB_ANY, 0,                verb_enable                  },
+                { "is-enabled",            2,        VERB_ANY, 0,                verb_is_enabled              },
+                { "reenable",              2,        VERB_ANY, 0,                verb_enable                  },
+                { "preset",                2,        VERB_ANY, 0,                verb_enable                  },
+                { "preset-all",            VERB_ANY, 1,        0,                verb_preset_all              },
+                { "mask",                  2,        VERB_ANY, 0,                verb_enable                  },
+                { "unmask",                2,        VERB_ANY, 0,                verb_enable                  },
+                { "link",                  2,        VERB_ANY, 0,                verb_enable                  },
+                { "revert",                2,        VERB_ANY, 0,                verb_enable                  },
+                { "switch-root",           2,        VERB_ANY, VERB_ONLINE_ONLY, verb_switch_root             },
+                { "list-dependencies",     VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, verb_list_dependencies       },
+                { "set-default",           2,        2,        0,                verb_set_default             },
+                { "get-default",           VERB_ANY, 1,        0,                verb_get_default             },
+                { "set-property",          3,        VERB_ANY, VERB_ONLINE_ONLY, verb_set_property            },
+                { "is-system-running",     VERB_ANY, 1,        0,                verb_is_system_running       },
+                { "add-wants",             3,        VERB_ANY, 0,                verb_add_dependency          },
+                { "add-requires",          3,        VERB_ANY, 0,                verb_add_dependency          },
+                { "edit",                  2,        VERB_ANY, VERB_ONLINE_ONLY, verb_edit                    },
+                { "bind",                  3,        4,        VERB_ONLINE_ONLY, verb_bind                    },
+                { "mount-image",           4,        5,        VERB_ONLINE_ONLY, verb_mount_image             },
                 {}
         };
 
         const Verb *verb = verbs_find_verb(argv[optind], verbs);
         if (verb && (verb->flags & VERB_ONLINE_ONLY) && arg_root)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Verb '%s' cannot be used with --root=.",
+                                       "Verb '%s' cannot be used with --root= or --image=.",
                                        argv[optind] ?: verb->verb);
 
         return dispatch_verb(argc, argv, verbs, NULL);
 }
 
 static int run(int argc, char *argv[]) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
         int r;
 
         setlocale(LC_ALL, "");
-        log_parse_environment();
-        log_open();
+        log_setup();
 
         /* The journal merging logic potentially needs a lot of fds. */
         (void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
@@ -1127,6 +1166,14 @@
         if (r <= 0)
                 goto finish;
 
+        if (proc_mounted() == 0)
+                log_full(arg_no_warn ? LOG_DEBUG : LOG_WARNING,
+                         "%s%s/proc/ is not mounted. This is not a supported mode of operation. Please fix\n"
+                         "your invocation environment to mount /proc/ and /sys/ properly. Proceeding anyway.\n"
+                         "Your mileage may vary.",
+                         emoji_enabled() ? special_glyph(SPECIAL_GLYPH_WARNING_SIGN) : "",
+                         emoji_enabled() ? " " : "");
+
         if (arg_action != ACTION_SYSTEMCTL && running_in_chroot() > 0) {
                 if (!arg_quiet)
                         log_info("Running in chroot, ignoring request.");
@@ -1136,6 +1183,25 @@
 
         /* systemctl_main() will print an error message for the bus connection, but only if it needs to */
 
+        if (arg_image) {
+                assert(!arg_root);
+
+                r = mount_image_privately_interactively(
+                                arg_image,
+                                DISSECT_IMAGE_GENERIC_ROOT |
+                                DISSECT_IMAGE_REQUIRE_ROOT |
+                                DISSECT_IMAGE_RELAX_VAR_CHECK |
+                                DISSECT_IMAGE_VALIDATE_OS,
+                                &mounted_dir,
+                                &loop_device);
+                if (r < 0)
+                        return r;
+
+                arg_root = strdup(mounted_dir);
+                if (!arg_root)
+                        return log_oom();
+        }
+
         switch (arg_action) {
 
         case ACTION_SYSTEMCTL:
@@ -1169,6 +1235,10 @@
                 r = logind_cancel_shutdown();
                 break;
 
+        case ACTION_SHOW_SHUTDOWN:
+                r = logind_show_shutdown();
+                break;
+
         case ACTION_RUNLEVEL:
                 r = runlevel_main();
                 break;
@@ -1189,7 +1259,7 @@
 
         case _ACTION_INVALID:
         default:
-                assert_not_reached("Unknown action");
+                assert_not_reached();
         }
 
 finish:
diff --git a/src/systemctl/systemctl.h b/src/systemctl/systemctl.h
index 8199ae9..9f9b8fa 100644
--- a/src/systemctl/systemctl.h
+++ b/src/systemctl/systemctl.h
@@ -32,6 +32,7 @@
         ACTION_RUNLEVEL,
         ACTION_TELINIT,
         ACTION_CANCEL_SHUTDOWN,
+        ACTION_SHOW_SHUTDOWN,
         _ACTION_MAX,
         _ACTION_INVALID = -EINVAL,
 };
@@ -50,7 +51,7 @@
 extern bool arg_all;
 extern enum dependency arg_dependency;
 extern const char *_arg_job_mode;
-extern UnitFileScope arg_scope;
+extern LookupScope arg_scope;
 extern bool arg_wait;
 extern bool arg_no_block;
 extern int arg_legend;
@@ -64,6 +65,7 @@
 extern int arg_check_inhibitors;
 extern bool arg_dry_run;
 extern bool arg_quiet;
+extern bool arg_no_warn;
 extern bool arg_full;
 extern bool arg_recursive;
 extern bool arg_with_dependencies;
@@ -73,7 +75,7 @@
 extern bool arg_runtime;
 extern UnitFilePresetMode arg_preset_mode;
 extern char **arg_wall;
-extern const char *arg_kill_who;
+extern const char *arg_kill_whom;
 extern int arg_signal;
 extern char *arg_root;
 extern usec_t arg_when;
@@ -95,6 +97,7 @@
 extern bool arg_read_only;
 extern bool arg_mkdir;
 extern bool arg_marked;
+extern const char *arg_drop_in;
 
 static inline const char* arg_job_mode(void) {
         return _arg_job_mode ?: "replace";
diff --git a/src/systemctl/systemd-sysv-install.SKELETON b/src/systemctl/systemd-sysv-install.SKELETON
index a2a0059..cb58d82 100755
--- a/src/systemctl/systemd-sysv-install.SKELETON
+++ b/src/systemctl/systemd-sysv-install.SKELETON
@@ -1,5 +1,5 @@
 #!/bin/sh
-# SPDX-License-Identifier: CC0-1.0
+# SPDX-License-Identifier: MIT-0
 #
 # This script is called by "systemctl enable/disable" when the given unit is a
 # SysV init.d script. It needs to call the distribution's mechanism for
diff --git a/src/systemd/_sd-common.h b/src/systemd/_sd-common.h
index e121429..6f657c2 100644
--- a/src/systemd/_sd-common.h
+++ b/src/systemd/_sd-common.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 /* This is a private header; never even think of including this directly! */
@@ -85,7 +85,7 @@
 #endif
 
 #ifndef _SD_ARRAY_STATIC
-#  if __STDC_VERSION__ >= 199901L
+#  if __STDC_VERSION__ >= 199901L && !defined(__cplusplus)
 #    define _SD_ARRAY_STATIC static
 #  else
 #    define _SD_ARRAY_STATIC
diff --git a/src/systemd/meson.build b/src/systemd/meson.build
index e01281f..5a8760d 100644
--- a/src/systemd/meson.build
+++ b/src/systemd/meson.build
@@ -1,41 +1,43 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-_systemd_headers = '''
-        sd-bus.h
-        sd-bus-protocol.h
-        sd-bus-vtable.h
-        sd-daemon.h
-        sd-device.h
-        sd-event.h
-        sd-hwdb.h
-        sd-id128.h
-        sd-journal.h
-        sd-login.h
-        sd-messages.h
-        sd-path.h
-'''.split()
+_systemd_headers = [
+        'sd-bus.h',
+        'sd-bus-protocol.h',
+        'sd-bus-vtable.h',
+        'sd-daemon.h',
+        'sd-device.h',
+        'sd-event.h',
+        'sd-gpt.h',
+        'sd-hwdb.h',
+        'sd-id128.h',
+        'sd-journal.h',
+        'sd-login.h',
+        'sd-messages.h',
+        'sd-path.h',
+]
 
 # https://github.com/mesonbuild/meson/issues/1633
 systemd_headers = files(_systemd_headers)
 
-_not_installed_headers = '''
-        sd-dhcp6-client.h
-        sd-dhcp6-lease.h
-        sd-dhcp-client.h
-        sd-dhcp-lease.h
-        sd-dhcp-option.h
-        sd-dhcp6-option.h
-        sd-dhcp-server.h
-        sd-ipv4acd.h
-        sd-ipv4ll.h
-        sd-lldp.h
-        sd-ndisc.h
-        sd-netlink.h
-        sd-network.h
-        sd-radv.h
-        sd-resolve.h
-        sd-utf8.h
-'''.split()
+_not_installed_headers = [
+        'sd-dhcp6-client.h',
+        'sd-dhcp6-lease.h',
+        'sd-dhcp-client.h',
+        'sd-dhcp-lease.h',
+        'sd-dhcp-option.h',
+        'sd-dhcp6-option.h',
+        'sd-dhcp-server.h',
+        'sd-ipv4acd.h',
+        'sd-ipv4ll.h',
+        'sd-lldp-rx.h',
+        'sd-lldp-tx.h',
+        'sd-lldp.h',
+        'sd-ndisc.h',
+        'sd-netlink.h',
+        'sd-network.h',
+        'sd-radv.h',
+        'sd-resolve.h',
+]
 
 install_headers(
         systemd_headers,
@@ -44,6 +46,10 @@
 
 ############################################################
 
+if want_tests == 'false'
+        subdir_done()
+endif
+
 opts = [['c'],
         ['c', '-ansi'],
         ['c', '-std=iso9899:1990'],
@@ -53,6 +59,10 @@
         opts += [['c', '-std=iso9899:2017']]
 endif
 
+if cc.has_argument('-std=c2x')
+        opts += [['c', '-std=c2x']]
+endif
+
 if cxx_cmd != ''
         opts += [['c++'],
                  ['c++', '-std=c++98'],
@@ -66,18 +76,28 @@
         if cxx.has_argument('-std=c++20')
                 opts += [['c++', '-std=c++20']]
         endif
+        if cxx.has_argument('-std=c++23')
+                opts += [['c++', '-std=c++23']]
+        endif
 endif
 
 foreach header : _systemd_headers + _not_installed_headers + [libudev_h_path]
         foreach opt : opts
                 std_name = opt.length() == 2 ? '_'.join(opt[1].split(':')) : ''
-                name = ''.join(['cc-', header.split('/')[-1], '_', opt[0], std_name])
-                if want_tests != 'false'
-                        test(name,
-                             check_compilation_sh,
-                             args : cc.cmd_array() + ['-c', '-x'] + opt +
-                                    ['-Werror', '-include',
-                                     join_paths(meson.current_source_dir(), header)])
-                endif
+                test('cc-' + header.split('/')[-1] + '_' + opt[0] + std_name,
+                     env,
+                     suite : 'headers',
+                     args : [cc.cmd_array(),
+                             '-c',
+                             '-x', opt,
+                             '-Wall',
+                             '-Wextra',
+                             '-Werror',
+                             '-pedantic',
+                             '-Wno-long-long',
+                             '-Wno-variadic-macros',
+                             '-include', meson.current_source_dir() / header,
+                             '-o/dev/null',
+                             '/dev/null'])
         endforeach
 endforeach
diff --git a/src/systemd/sd-bus-protocol.h b/src/systemd/sd-bus-protocol.h
index ed96cdb..1581642 100644
--- a/src/systemd/sd-bus-protocol.h
+++ b/src/systemd/sd-bus-protocol.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include "_sd-common.h"
diff --git a/src/systemd/sd-bus-vtable.h b/src/systemd/sd-bus-vtable.h
index 35c942b..5e80ea8 100644
--- a/src/systemd/sd-bus-vtable.h
+++ b/src/systemd/sd-bus-vtable.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include "_sd-common.h"
@@ -34,7 +34,7 @@
         _SD_BUS_VTABLE_WRITABLE_PROPERTY = 'W'
 };
 
-enum {
+__extension__ enum {
         SD_BUS_VTABLE_DEPRECATED                   = 1ULL << 0,
         SD_BUS_VTABLE_HIDDEN                       = 1ULL << 1,
         SD_BUS_VTABLE_UNPRIVILEGED                 = 1ULL << 2,
@@ -51,7 +51,7 @@
 #define SD_BUS_VTABLE_CAPABILITY(x) ((uint64_t) (((x)+1) & 0xFFFF) << 40)
 
 enum {
-        _SD_BUS_VTABLE_PARAM_NAMES     = 1 << 0,
+        _SD_BUS_VTABLE_PARAM_NAMES     = 1 << 0
 };
 
 extern const unsigned sd_bus_object_vtable_format;
@@ -67,8 +67,8 @@
         /* Please do not initialize this structure directly, use the
          * macros below instead */
 
-        uint8_t type:8;
-        uint64_t flags:56;
+        __extension__ uint8_t type:8;
+        __extension__ uint64_t flags:56;
         union {
                 struct {
                         size_t element_size;
@@ -76,7 +76,10 @@
                         const unsigned *vtable_format_reference;
                 } start;
                 struct {
-                        size_t reserved;
+                        /* This field exists only to make sure we have something to initialize in
+                         * SD_BUS_VTABLE_END in a way that is both compatible with pedantic versions of C and
+                         * C++. It's unused otherwise. */
+                        size_t _reserved;
                 } end;
                 struct {
                         const char *member;
@@ -106,11 +109,11 @@
                 .type = _SD_BUS_VTABLE_START,                           \
                 .flags = _flags,                                        \
                 .x = {                                                  \
-                    .start = {                                          \
-                        .element_size = sizeof(sd_bus_vtable),          \
-                        .features = _SD_BUS_VTABLE_PARAM_NAMES,         \
-                        .vtable_format_reference = &sd_bus_object_vtable_format, \
-                    },                                                  \
+                        .start = {                                      \
+                                .element_size = sizeof(sd_bus_vtable),  \
+                                .features = _SD_BUS_VTABLE_PARAM_NAMES, \
+                                .vtable_format_reference = &sd_bus_object_vtable_format, \
+                        },                                              \
                 },                                                      \
         }
 
@@ -122,14 +125,14 @@
                 .type = _SD_BUS_VTABLE_METHOD,                          \
                 .flags = _flags,                                        \
                 .x = {                                                  \
-                    .method = {                                         \
-                        .member = _member,                              \
-                        .signature = _signature,                        \
-                        .result = _result,                              \
-                        .handler = _handler,                            \
-                        .offset = _offset,                              \
-                        .names = _in_names _out_names,                  \
-                    },                                                  \
+                        .method = {                                     \
+                                .member = _member,                      \
+                                .signature = _signature,                \
+                                .result = _result,                      \
+                                .handler = _handler,                    \
+                                .offset = _offset,                      \
+                                .names = _in_names _out_names,          \
+                        },                                              \
                 },                                                      \
         }
 #define SD_BUS_METHOD_WITH_OFFSET(_member, _signature, _result, _handler, _offset, _flags)   \
@@ -144,14 +147,14 @@
                 .type = _SD_BUS_VTABLE_SIGNAL,                          \
                 .flags = _flags,                                        \
                 .x = {                                                  \
-                    .signal = {                                         \
-                        .member = _member,                              \
-                        .signature = _signature,                        \
-                        .names = _out_names,                            \
-                    },                                                  \
+                        .signal = {                                     \
+                                .member = _member,                      \
+                                .signature = _signature,                \
+                                .names = _out_names,                    \
+                        },                                              \
                 },                                                      \
-        }
-#define SD_BUS_SIGNAL(_member, _signature, _flags)   \
+                        }
+#define SD_BUS_SIGNAL(_member, _signature, _flags)                      \
         SD_BUS_SIGNAL_WITH_NAMES(_member, _signature, "", _flags)
 
 #define SD_BUS_PROPERTY(_member, _signature, _get, _offset, _flags)     \
@@ -159,13 +162,13 @@
                 .type = _SD_BUS_VTABLE_PROPERTY,                        \
                 .flags = _flags,                                        \
                 .x = {                                                  \
-                    .property = {                                       \
-                        .member = _member,                              \
-                        .signature = _signature,                        \
-                        .get = _get,                                    \
-                        .set = NULL,                                    \
-                        .offset = _offset,                              \
-                    },                                                  \
+                        .property = {                                   \
+                                .member = _member,                      \
+                                .signature = _signature,                \
+                                .get = _get,                            \
+                                .set = NULL,                            \
+                                .offset = _offset,                      \
+                        },                                              \
                 },                                                      \
         }
 
@@ -174,13 +177,13 @@
                 .type = _SD_BUS_VTABLE_WRITABLE_PROPERTY,               \
                 .flags = _flags,                                        \
                 .x = {                                                  \
-                    .property = {                                       \
-                        .member = _member,                              \
-                        .signature = _signature,                        \
-                        .get = _get,                                    \
-                        .set = _set,                                    \
-                        .offset = _offset,                              \
-                    },                                                  \
+                        .property = {                                   \
+                                .member = _member,                      \
+                                .signature = _signature,                \
+                                .get = _get,                            \
+                                .set = _set,                            \
+                                .offset = _offset,                      \
+                        },                                              \
                 },                                                      \
         }
 
@@ -189,9 +192,9 @@
                 .type = _SD_BUS_VTABLE_END,                             \
                 .flags = 0,                                             \
                 .x = {                                                  \
-                    .end = {                                            \
-                        .reserved = 0,                                  \
-                    },                                                  \
+                        .end = {                                        \
+                                ._reserved = 0,                         \
+                        },                                              \
                 },                                                      \
         }
 
diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h
index a07a761..bd3da36 100644
--- a/src/systemd/sd-bus.h
+++ b/src/systemd/sd-bus.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -55,7 +55,7 @@
 
 /* Flags */
 
-enum {
+__extension__ enum {
         SD_BUS_CREDS_PID                = 1ULL << 0,
         SD_BUS_CREDS_TID                = 1ULL << 1,
         SD_BUS_CREDS_PPID               = 1ULL << 2,
@@ -94,15 +94,16 @@
         _SD_BUS_CREDS_ALL               = (1ULL << 34) -1
 };
 
-enum {
+__extension__ enum {
         SD_BUS_NAME_REPLACE_EXISTING  = 1ULL << 0,
         SD_BUS_NAME_ALLOW_REPLACEMENT = 1ULL << 1,
         SD_BUS_NAME_QUEUE             = 1ULL << 2
 };
 
-enum {
+__extension__ enum {
         SD_BUS_MESSAGE_DUMP_WITH_HEADER  = 1ULL << 0,
         SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY = 1ULL << 1,
+        _SD_BUS_MESSAGE_DUMP_KNOWN_FLAGS = SD_BUS_MESSAGE_DUMP_WITH_HEADER | SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY
 };
 
 /* Callbacks */
@@ -259,6 +260,7 @@
 
 int sd_bus_message_new(sd_bus *bus, sd_bus_message **m, uint8_t type);
 int sd_bus_message_new_signal(sd_bus *bus, sd_bus_message **m, const char *path, const char *interface, const char *member);
+int sd_bus_message_new_signal_to(sd_bus *bus, sd_bus_message **m, const char *destination, const char *path, const char *interface, const char *member);
 int sd_bus_message_new_method_call(sd_bus *bus, sd_bus_message **m, const char *destination, const char *path, const char *interface, const char *member);
 int sd_bus_message_new_method_return(sd_bus_message *call, sd_bus_message **m);
 int sd_bus_message_new_method_error(sd_bus_message *call, sd_bus_message **m, const sd_bus_error *e);
@@ -330,6 +332,7 @@
 int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p);
 int sd_bus_message_read_array(sd_bus_message *m, char type, const void **ptr, size_t *size);
 int sd_bus_message_read_strv(sd_bus_message *m, char ***l); /* free the result! */
+int sd_bus_message_read_strv_extend(sd_bus_message *m, char ***l);
 int sd_bus_message_skip(sd_bus_message *m, const char *types);
 int sd_bus_message_enter_container(sd_bus_message *m, char type, const char *contents);
 int sd_bus_message_exit_container(sd_bus_message *m);
@@ -377,6 +380,8 @@
 
 int sd_bus_emit_signalv(sd_bus *bus, const char *path, const char *interface, const char *member, const char *types, va_list ap);
 int sd_bus_emit_signal(sd_bus *bus, const char *path, const char *interface, const char *member, const char *types, ...);
+int sd_bus_emit_signal_tov(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, const char *types, va_list ap);
+int sd_bus_emit_signal_to(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, const char *types, ...);
 
 int sd_bus_emit_properties_changed_strv(sd_bus *bus, const char *path, const char *interface, char **names);
 int sd_bus_emit_properties_changed(sd_bus *bus, const char *path, const char *interface, const char *name, ...) _sd_sentinel_;
@@ -445,6 +450,8 @@
 void sd_bus_error_free(sd_bus_error *e);
 int sd_bus_error_set(sd_bus_error *e, const char *name, const char *message);
 int sd_bus_error_setf(sd_bus_error *e, const char *name, const char *format, ...)  _sd_printf_(3, 4);
+int sd_bus_error_setfv(sd_bus_error *e, const char *name, const char *format, va_list ap) _sd_printf_(3,0);
+
 int sd_bus_error_set_const(sd_bus_error *e, const char *name, const char *message);
 int sd_bus_error_set_errno(sd_bus_error *e, int error);
 int sd_bus_error_set_errnof(sd_bus_error *e, int error, const char *format, ...) _sd_printf_(3, 4);
diff --git a/src/systemd/sd-daemon.h b/src/systemd/sd-daemon.h
index f42a5d8..53a1d7c 100644
--- a/src/systemd/sd-daemon.h
+++ b/src/systemd/sd-daemon.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -260,8 +260,8 @@
 
      sd_notifyf(0, "STATUS=Failed to start up: %s\n"
                    "ERRNO=%i",
-                   strerror(errno),
-                   errno);
+                   strerror_r(errnum, (char[1024]){}, 1024),
+                   errnum);
 
   See sd_notifyf(3) for more information.
 */
diff --git a/src/systemd/sd-device.h b/src/systemd/sd-device.h
index 7ab0a83..e3d647f 100644
--- a/src/systemd/sd-device.h
+++ b/src/systemd/sd-device.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <errno.h>
@@ -34,7 +34,7 @@
 typedef struct sd_device_enumerator sd_device_enumerator;
 typedef struct sd_device_monitor sd_device_monitor;
 
-typedef enum sd_device_action_t {
+__extension__ typedef enum sd_device_action_t {
         SD_DEVICE_ADD,
         SD_DEVICE_REMOVE,
         SD_DEVICE_CHANGE,
@@ -45,7 +45,7 @@
         SD_DEVICE_UNBIND,
         _SD_DEVICE_ACTION_MAX,
         _SD_DEVICE_ACTION_INVALID = -EINVAL,
-        _SD_ENUM_FORCE_S64(DEVICE_ACTION),
+        _SD_ENUM_FORCE_S64(DEVICE_ACTION)
 } sd_device_action_t;
 
 /* callback */
@@ -62,9 +62,13 @@
 int sd_device_new_from_subsystem_sysname(sd_device **ret, const char *subsystem, const char *sysname);
 int sd_device_new_from_device_id(sd_device **ret, const char *id);
 int sd_device_new_from_stat_rdev(sd_device **ret, const struct stat *st);
+int sd_device_new_from_devname(sd_device **ret, const char *devname);
+int sd_device_new_from_path(sd_device **ret, const char *path);
 int sd_device_new_from_ifname(sd_device **ret, const char *ifname);
 int sd_device_new_from_ifindex(sd_device **ret, int ifindex);
 
+int sd_device_new_child(sd_device **ret, sd_device *device, const char *suffix);
+
 int sd_device_get_parent(sd_device *child, sd_device **ret);
 int sd_device_get_parent_with_subsystem_devtype(sd_device *child, const char *subsystem, const char *devtype, sd_device **ret);
 
@@ -80,10 +84,11 @@
 int sd_device_get_sysnum(sd_device *device, const char **ret);
 int sd_device_get_action(sd_device *device, sd_device_action_t *ret);
 int sd_device_get_seqnum(sd_device *device, uint64_t *ret);
+int sd_device_get_diskseq(sd_device *device, uint64_t *ret);
 
 int sd_device_get_is_initialized(sd_device *device);
-int sd_device_get_usec_initialized(sd_device *device, uint64_t *usec);
-int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *usec);
+int sd_device_get_usec_initialized(sd_device *device, uint64_t *ret);
+int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *ret);
 
 const char *sd_device_get_tag_first(sd_device *device);
 const char *sd_device_get_tag_next(sd_device *device);
@@ -95,6 +100,8 @@
 const char *sd_device_get_property_next(sd_device *device, const char **value);
 const char *sd_device_get_sysattr_first(sd_device *device);
 const char *sd_device_get_sysattr_next(sd_device *device);
+sd_device *sd_device_get_child_first(sd_device *device, const char **ret_suffix);
+sd_device *sd_device_get_child_next(sd_device *device, const char **ret_suffix);
 
 int sd_device_has_tag(sd_device *device, const char *tag);
 int sd_device_has_current_tag(sd_device *device, const char *tag);
@@ -106,6 +113,7 @@
 int sd_device_set_sysattr_valuef(sd_device *device, const char *sysattr, const char *format, ...) _sd_printf_(3, 4);
 int sd_device_trigger(sd_device *device, sd_device_action_t action);
 int sd_device_trigger_with_uuid(sd_device *device, sd_device_action_t action, sd_id128_t *ret_uuid);
+int sd_device_open(sd_device *device, int flags);
 
 /* device enumerator */
 
@@ -122,6 +130,7 @@
 int sd_device_enumerator_add_match_sysattr(sd_device_enumerator *enumerator, const char *sysattr, const char *value, int match);
 int sd_device_enumerator_add_match_property(sd_device_enumerator *enumerator, const char *property, const char *value);
 int sd_device_enumerator_add_match_sysname(sd_device_enumerator *enumerator, const char *sysname);
+int sd_device_enumerator_add_nomatch_sysname(sd_device_enumerator *enumerator, const char *sysname);
 int sd_device_enumerator_add_match_tag(sd_device_enumerator *enumerator, const char *tag);
 int sd_device_enumerator_add_match_parent(sd_device_enumerator *enumerator, sd_device *parent);
 int sd_device_enumerator_allow_uninitialized(sd_device_enumerator *enumerator);
@@ -137,6 +146,8 @@
 int sd_device_monitor_detach_event(sd_device_monitor *m);
 sd_event *sd_device_monitor_get_event(sd_device_monitor *m);
 sd_event_source *sd_device_monitor_get_event_source(sd_device_monitor *m);
+int sd_device_monitor_set_description(sd_device_monitor *m, const char *description);
+int sd_device_monitor_get_description(sd_device_monitor *m, const char **ret);
 int sd_device_monitor_start(sd_device_monitor *m, sd_device_monitor_handler_t callback, void *userdata);
 int sd_device_monitor_stop(sd_device_monitor *m);
 
diff --git a/src/systemd/sd-dhcp-client.h b/src/systemd/sd-dhcp-client.h
index 5300234..2b3f995 100644
--- a/src/systemd/sd-dhcp-client.h
+++ b/src/systemd/sd-dhcp-client.h
@@ -16,7 +16,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -25,6 +25,7 @@
 #include <sys/types.h>
 #include <stdbool.h>
 
+#include "sd-device.h"
 #include "sd-dhcp-lease.h"
 #include "sd-dhcp-option.h"
 #include "sd-event.h"
@@ -40,76 +41,185 @@
         SD_DHCP_CLIENT_EVENT_EXPIRED            = 3,
         SD_DHCP_CLIENT_EVENT_RENEW              = 4,
         SD_DHCP_CLIENT_EVENT_SELECTING          = 5,
-        SD_DHCP_CLIENT_EVENT_TRANSIENT_FAILURE  = 6, /* Sent when we have not received a reply after the first few attempts.
-                                                      * The client may want to start acquiring link-local addresses. */
+        SD_DHCP_CLIENT_EVENT_TRANSIENT_FAILURE  = 6 /* Sent when we have not received a reply after the first few attempts.
+                                                     * The client may want to start acquiring link-local addresses. */
 };
 
+/* https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml#options */
 enum {
-        SD_DHCP_OPTION_PAD                         = 0,
-        SD_DHCP_OPTION_SUBNET_MASK                 = 1,
-        SD_DHCP_OPTION_TIME_OFFSET                 = 2,
-        SD_DHCP_OPTION_ROUTER                      = 3,
-        SD_DHCP_OPTION_DOMAIN_NAME_SERVER          = 6,
-        SD_DHCP_OPTION_LPR_SERVER                  = 9,
-        SD_DHCP_OPTION_HOST_NAME                   = 12,
-        SD_DHCP_OPTION_BOOT_FILE_SIZE              = 13,
-        SD_DHCP_OPTION_DOMAIN_NAME                 = 15,
-        SD_DHCP_OPTION_ROOT_PATH                   = 17,
-        SD_DHCP_OPTION_ENABLE_IP_FORWARDING        = 19,
-        SD_DHCP_OPTION_ENABLE_IP_FORWARDING_NL     = 20,
-        SD_DHCP_OPTION_POLICY_FILTER               = 21,
-        SD_DHCP_OPTION_INTERFACE_MDR               = 22,
-        SD_DHCP_OPTION_INTERFACE_TTL               = 23,
-        SD_DHCP_OPTION_INTERFACE_MTU_AGING_TIMEOUT = 24,
-        SD_DHCP_OPTION_INTERFACE_MTU               = 26,
-        SD_DHCP_OPTION_BROADCAST                   = 28,
-       /* Windows 10 option to send when Anonymize=true */
-        SD_DHCP_OPTION_ROUTER_DISCOVER             = 31,
-        SD_DHCP_OPTION_STATIC_ROUTE                = 33,
-        SD_DHCP_OPTION_NTP_SERVER                  = 42,
-        SD_DHCP_OPTION_VENDOR_SPECIFIC             = 43,
-       /* Windows 10 option to send when Anonymize=true */
-        SD_DHCP_OPTION_NETBIOS_NAMESERVER          = 44,
-       /* Windows 10 option to send when Anonymize=true */
-        SD_DHCP_OPTION_NETBIOS_NODETYPE            = 46,
-       /* Windows 10 option to send when Anonymize=true */
-        SD_DHCP_OPTION_NETBIOS_SCOPE               = 47,
-        SD_DHCP_OPTION_REQUESTED_IP_ADDRESS        = 50,
-        SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME       = 51,
-        SD_DHCP_OPTION_OVERLOAD                    = 52,
-        SD_DHCP_OPTION_MESSAGE_TYPE                = 53,
-        SD_DHCP_OPTION_SERVER_IDENTIFIER           = 54,
-        SD_DHCP_OPTION_PARAMETER_REQUEST_LIST      = 55,
-        SD_DHCP_OPTION_ERROR_MESSAGE               = 56,
-        SD_DHCP_OPTION_MAXIMUM_MESSAGE_SIZE        = 57,
-        SD_DHCP_OPTION_RENEWAL_T1_TIME             = 58,
-        SD_DHCP_OPTION_REBINDING_T2_TIME           = 59,
-        SD_DHCP_OPTION_VENDOR_CLASS_IDENTIFIER     = 60,
-        SD_DHCP_OPTION_CLIENT_IDENTIFIER           = 61,
-        SD_DHCP_OPTION_SMTP_SERVER                 = 69,
-        SD_DHCP_OPTION_POP3_SERVER                 = 70,
-        SD_DHCP_OPTION_USER_CLASS                  = 77,
-        SD_DHCP_OPTION_FQDN                        = 81,
-        SD_DHCP_OPTION_RELAY_AGENT_INFORMATION     = 82,
-        SD_DHCP_OPTION_NEW_POSIX_TIMEZONE          = 100,
-        SD_DHCP_OPTION_NEW_TZDB_TIMEZONE           = 101,
-        SD_DHCP_OPTION_DOMAIN_SEARCH_LIST          = 119,
-        SD_DHCP_OPTION_SIP_SERVER                  = 120,
-        SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE      = 121,
-        SD_DHCP_OPTION_MUD_URL                     = 161,
-        SD_DHCP_OPTION_PRIVATE_BASE                = 224,
-       /* Windows 10 option to send when Anonymize=true */
-        SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE = 249,
-       /* Windows 10 option to send when Anonymize=true */
-        SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY = 252,
-        SD_DHCP_OPTION_PRIVATE_LAST                = 254,
-        SD_DHCP_OPTION_END                         = 255,
+        SD_DHCP_OPTION_PAD                            = 0,   /* [RFC2132] */
+        SD_DHCP_OPTION_SUBNET_MASK                    = 1,   /* [RFC2132] */
+        SD_DHCP_OPTION_TIME_OFFSET                    = 2,   /* [RFC2132], deprecated by 100 and 101 */
+        SD_DHCP_OPTION_ROUTER                         = 3,   /* [RFC2132] */
+        SD_DHCP_OPTION_TIME_SERVER                    = 4,   /* [RFC2132] */
+        SD_DHCP_OPTION_NAME_SERVER                    = 5,   /* [RFC2132] */
+        SD_DHCP_OPTION_DOMAIN_NAME_SERVER             = 6,   /* [RFC2132] */
+        SD_DHCP_OPTION_LOG_SERVER                     = 7,   /* [RFC2132] */
+        SD_DHCP_OPTION_QUOTES_SERVER                  = 8,   /* [RFC2132] */
+        SD_DHCP_OPTION_LPR_SERVER                     = 9,   /* [RFC2132] */
+        SD_DHCP_OPTION_IMPRESS_SERVER                 = 10,  /* [RFC2132] */
+        SD_DHCP_OPTION_RLP_SERVER                     = 11,  /* [RFC2132] */
+        SD_DHCP_OPTION_HOST_NAME                      = 12,  /* [RFC2132] */
+        SD_DHCP_OPTION_BOOT_FILE_SIZE                 = 13,  /* [RFC2132] */
+        SD_DHCP_OPTION_MERIT_DUMP_FILE                = 14,  /* [RFC2132] */
+        SD_DHCP_OPTION_DOMAIN_NAME                    = 15,  /* [RFC2132] */
+        SD_DHCP_OPTION_SWAP_SERVER                    = 16,  /* [RFC2132] */
+        SD_DHCP_OPTION_ROOT_PATH                      = 17,  /* [RFC2132] */
+        SD_DHCP_OPTION_EXTENSION_FILE                 = 18,  /* [RFC2132] */
+        SD_DHCP_OPTION_FORWARD                        = 19,  /* [RFC2132] */
+        SD_DHCP_OPTION_SOURCE_ROUTE                   = 20,  /* [RFC2132] */
+        SD_DHCP_OPTION_POLICY_FILTER                  = 21,  /* [RFC2132] */
+        SD_DHCP_OPTION_MAX_DATAGRAM_ASSEMBLY          = 22,  /* [RFC2132] */
+        SD_DHCP_OPTION_DEFAULT_IP_TTL                 = 23,  /* [RFC2132] */
+        SD_DHCP_OPTION_MTU_TIMEOUT                    = 24,  /* [RFC2132] */
+        SD_DHCP_OPTION_MTU_PLATEAU                    = 25,  /* [RFC2132] */
+        SD_DHCP_OPTION_MTU_INTERFACE                  = 26,  /* [RFC2132] */
+        SD_DHCP_OPTION_MTU_SUBNET                     = 27,  /* [RFC2132] */
+        SD_DHCP_OPTION_BROADCAST                      = 28,  /* [RFC2132] */
+        SD_DHCP_OPTION_MASK_DISCOVERY                 = 29,  /* [RFC2132] */
+        SD_DHCP_OPTION_MASK_SUPPLIER                  = 30,  /* [RFC2132] */
+        SD_DHCP_OPTION_ROUTER_DISCOVERY               = 31,  /* [RFC2132] */
+        SD_DHCP_OPTION_ROUTER_REQUEST                 = 32,  /* [RFC2132] */
+        SD_DHCP_OPTION_STATIC_ROUTE                   = 33,  /* [RFC2132] */
+        SD_DHCP_OPTION_TRAILERS                       = 34,  /* [RFC2132] */
+        SD_DHCP_OPTION_ARP_TIMEOUT                    = 35,  /* [RFC2132] */
+        SD_DHCP_OPTION_ETHERNET                       = 36,  /* [RFC2132] */
+        SD_DHCP_OPTION_DEFAULT_TCP_TTL                = 37,  /* [RFC2132] */
+        SD_DHCP_OPTION_KEEPALIVE_TIME                 = 38,  /* [RFC2132] */
+        SD_DHCP_OPTION_KEEPALIVE_DATA                 = 39,  /* [RFC2132] */
+        SD_DHCP_OPTION_NIS_DOMAIN                     = 40,  /* [RFC2132] */
+        SD_DHCP_OPTION_NIS_SERVER                     = 41,  /* [RFC2132] */
+        SD_DHCP_OPTION_NTP_SERVER                     = 42,  /* [RFC2132] */
+        SD_DHCP_OPTION_VENDOR_SPECIFIC                = 43,  /* [RFC2132] */
+        SD_DHCP_OPTION_NETBIOS_NAME_SERVER            = 44,  /* [RFC2132] */
+        SD_DHCP_OPTION_NETBIOS_DIST_SERVER            = 45,  /* [RFC2132] */
+        SD_DHCP_OPTION_NETBIOS_NODE_TYPE              = 46,  /* [RFC2132] */
+        SD_DHCP_OPTION_NETBIOS_SCOPE                  = 47,  /* [RFC2132] */
+        SD_DHCP_OPTION_X_WINDOW_FONT                  = 48,  /* [RFC2132] */
+        SD_DHCP_OPTION_X_WINDOW_MANAGER               = 49,  /* [RFC2132] */
+        SD_DHCP_OPTION_REQUESTED_IP_ADDRESS           = 50,  /* [RFC2132] */
+        SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME          = 51,  /* [RFC2132] */
+        SD_DHCP_OPTION_OVERLOAD                       = 52,  /* [RFC2132] */
+        SD_DHCP_OPTION_MESSAGE_TYPE                   = 53,  /* [RFC2132] */
+        SD_DHCP_OPTION_SERVER_IDENTIFIER              = 54,  /* [RFC2132] */
+        SD_DHCP_OPTION_PARAMETER_REQUEST_LIST         = 55,  /* [RFC2132] */
+        SD_DHCP_OPTION_ERROR_MESSAGE                  = 56,  /* [RFC2132] */
+        SD_DHCP_OPTION_MAXIMUM_MESSAGE_SIZE           = 57,  /* [RFC2132] */
+        SD_DHCP_OPTION_RENEWAL_TIME                   = 58,  /* [RFC2132] */
+        SD_DHCP_OPTION_REBINDING_TIME                 = 59,  /* [RFC2132] */
+        SD_DHCP_OPTION_VENDOR_CLASS_IDENTIFIER        = 60,  /* [RFC2132] */
+        SD_DHCP_OPTION_CLIENT_IDENTIFIER              = 61,  /* [RFC2132] */
+        SD_DHCP_OPTION_NETWARE_IP_DOMAIN              = 62,  /* [RFC2242] */
+        SD_DHCP_OPTION_NETWARE_IP_OPTION              = 63,  /* [RFC2242] */
+        SD_DHCP_OPTION_NIS_DOMAIN_NAME                = 64,  /* [RFC2132] */
+        SD_DHCP_OPTION_NIS_SERVER_ADDR                = 65,  /* [RFC2132] */
+        SD_DHCP_OPTION_BOOT_SERVER_NAME               = 66,  /* [RFC2132] */
+        SD_DHCP_OPTION_BOOT_FILENAME                  = 67,  /* [RFC2132] */
+        SD_DHCP_OPTION_HOME_AGENT_ADDRESSES           = 68,  /* [RFC2132] */
+        SD_DHCP_OPTION_SMTP_SERVER                    = 69,  /* [RFC2132] */
+        SD_DHCP_OPTION_POP3_SERVER                    = 70,  /* [RFC2132] */
+        SD_DHCP_OPTION_NNTP_SERVER                    = 71,  /* [RFC2132] */
+        SD_DHCP_OPTION_WWW_SERVER                     = 72,  /* [RFC2132] */
+        SD_DHCP_OPTION_FINGER_SERVER                  = 73,  /* [RFC2132] */
+        SD_DHCP_OPTION_IRC_SERVER                     = 74,  /* [RFC2132] */
+        SD_DHCP_OPTION_STREETTALK_SERVER              = 75,  /* [RFC2132] */
+        SD_DHCP_OPTION_STDA_SERVER                    = 76,  /* [RFC2132] */
+        SD_DHCP_OPTION_USER_CLASS                     = 77,  /* [RFC3004] */
+        SD_DHCP_OPTION_DIRECTORY_AGENT                = 78,  /* [RFC2610] */
+        SD_DHCP_OPTION_SERVICE_SCOPE                  = 79,  /* [RFC2610] */
+        SD_DHCP_OPTION_RAPID_COMMIT                   = 80,  /* [RFC4039] */
+        SD_DHCP_OPTION_FQDN                           = 81,  /* [RFC4702] */
+        SD_DHCP_OPTION_RELAY_AGENT_INFORMATION        = 82,  /* [RFC3046] */
+        SD_DHCP_OPTION_ISNS                           = 83,  /* [RFC4174] */
+        /* option code 84 is unassigned [RFC3679] */
+        SD_DHCP_OPTION_NDS_SERVER                     = 85,  /* [RFC2241] */
+        SD_DHCP_OPTION_NDS_TREE_NAME                  = 86,  /* [RFC2241] */
+        SD_DHCP_OPTION_NDS_CONTEXT                    = 87,  /* [RFC2241] */
+        SD_DHCP_OPTION_BCMCS_CONTROLLER_DOMAIN_NAME   = 88,  /* [RFC4280] */
+        SD_DHCP_OPTION_BCMCS_CONTROLLER_ADDRESS       = 89,  /* [RFC4280] */
+        SD_DHCP_OPTION_AUTHENTICATION                 = 90,  /* [RFC3118] */
+        SD_DHCP_OPTION_CLIENT_LAST_TRANSACTION_TIME   = 91,  /* [RFC4388] */
+        SD_DHCP_OPTION_ASSOCIATED_IP                  = 92,  /* [RFC4388] */
+        SD_DHCP_OPTION_CLIENT_SYSTEM                  = 93,  /* [RFC4578] */
+        SD_DHCP_OPTION_CLIENT_NDI                     = 94,  /* [RFC4578] */
+        SD_DHCP_OPTION_LDAP                           = 95,  /* [RFC3679] */
+        /* option code 96 is unassigned [RFC3679] */
+        SD_DHCP_OPTION_UUID                           = 97,  /* [RFC4578] */
+        SD_DHCP_OPTION_USER_AUTHENTICATION            = 98,  /* [RFC2485] */
+        SD_DHCP_OPTION_GEOCONF_CIVIC                  = 99,  /* [RFC4776] */
+        SD_DHCP_OPTION_POSIX_TIMEZONE                 = 100, /* [RFC4833] */
+        SD_DHCP_OPTION_TZDB_TIMEZONE                  = 101, /* [RFC4833] */
+        /* option codes 102-107 are unassigned [RFC3679] */
+        SD_DHCP_OPTION_IPV6_ONLY_PREFERRED            = 108, /* [RFC8925] */
+        SD_DHCP_OPTION_DHCP4O6_SOURCE_ADDRESS         = 109, /* [RFC8539] */
+        /* option codes 110-111 are unassigned [RFC3679] */
+        SD_DHCP_OPTION_NETINFO_ADDRESS                = 112, /* [RFC3679] */
+        SD_DHCP_OPTION_NETINFO_TAG                    = 113, /* [RFC3679] */
+        SD_DHCP_OPTION_DHCP_CAPTIVE_PORTAL            = 114, /* [RFC8910] */
+        /* option code 115 is unassigned [RFC3679] */
+        SD_DHCP_OPTION_AUTO_CONFIG                    = 116, /* [RFC2563] */
+        SD_DHCP_OPTION_NAME_SERVICE_SEARCH            = 117, /* [RFC2937] */
+        SD_DHCP_OPTION_SUBNET_SELECTION               = 118, /* [RFC3011] */
+        SD_DHCP_OPTION_DOMAIN_SEARCH                  = 119, /* [RFC3397] */
+        SD_DHCP_OPTION_SIP_SERVER                     = 120, /* [RFC3361] */
+        SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE         = 121, /* [RFC3442] */
+        SD_DHCP_OPTION_CABLELABS_CLIENT_CONFIGURATION = 122, /* [RFC3495] */
+        SD_DHCP_OPTION_GEOCONF                        = 123, /* [RFC6225] */
+        SD_DHCP_OPTION_VENDOR_CLASS                   = 124, /* [RFC3925] */
+        SD_DHCP_OPTION_VENDOR_SPECIFIC_INFORMATION    = 125, /* [RFC3925] */
+        /* option codes 126-127 are unassigned [RFC3679] */
+        /* option codes 128-135 are assigned to use by PXE, but they are vendor specific [RFC4578] */
+        SD_DHCP_OPTION_PANA_AGENT                     = 136, /* [RFC5192] */
+        SD_DHCP_OPTION_LOST_SERVER_FQDN               = 137, /* [RFC5223] */
+        SD_DHCP_OPTION_CAPWAP_AC_ADDRESS              = 138, /* [RFC5417] */
+        SD_DHCP_OPTION_MOS_ADDRESS                    = 139, /* [RFC5678] */
+        SD_DHCP_OPTION_MOS_FQDN                       = 140, /* [RFC5678] */
+        SD_DHCP_OPTION_SIP_SERVICE_DOMAIN             = 141, /* [RFC6011] */
+        SD_DHCP_OPTION_ANDSF_ADDRESS                  = 142, /* [RFC6153] */
+        SD_DHCP_OPTION_SZTP_REDIRECT                  = 143, /* [RFC8572] */
+        SD_DHCP_OPTION_GEOLOC                         = 144, /* [RFC6225] */
+        SD_DHCP_OPTION_FORCERENEW_NONCE_CAPABLE       = 145, /* [RFC6704] */
+        SD_DHCP_OPTION_RDNSS_SELECTION                = 146, /* [RFC6731] */
+        SD_DHCP_OPTION_DOTS_RI                        = 147, /* [RFC8973] */
+        SD_DHCP_OPTION_DOTS_ADDRESS                   = 148, /* [RFC8973] */
+        /* option code 149 is unassigned [RFC3942] */
+        SD_DHCP_OPTION_TFTP_SERVER_ADDRESS            = 150, /* [RFC5859] */
+        SD_DHCP_OPTION_STATUS_CODE                    = 151, /* [RFC6926] */
+        SD_DHCP_OPTION_BASE_TIME                      = 152, /* [RFC6926] */
+        SD_DHCP_OPTION_START_TIME_OF_STATE            = 153, /* [RFC6926] */
+        SD_DHCP_OPTION_QUERY_START_TIME               = 154, /* [RFC6926] */
+        SD_DHCP_OPTION_QUERY_END_TIME                 = 155, /* [RFC6926] */
+        SD_DHCP_OPTION_DHCP_STATE                     = 156, /* [RFC6926] */
+        SD_DHCP_OPTION_DATA_SOURCE                    = 157, /* [RFC6926] */
+        SD_DHCP_OPTION_PCP_SERVER                     = 158, /* [RFC7291] */
+        SD_DHCP_OPTION_PORT_PARAMS                    = 159, /* [RFC7618] */
+        /* option code 160 is unassigned [RFC7710][RFC8910] */
+        SD_DHCP_OPTION_MUD_URL                        = 161, /* [RFC8520] */
+        /* option codes 162-174 are unassigned [RFC3942] */
+        /* option codes 175-177 are temporary assigned. */
+        /* option codes 178-207 are unassigned [RFC3942] */
+        SD_DHCP_OPTION_PXELINUX_MAGIC                 = 208, /* [RFC5071] Deprecated */
+        SD_DHCP_OPTION_CONFIGURATION_FILE             = 209, /* [RFC5071] */
+        SD_DHCP_OPTION_PATH_PREFIX                    = 210, /* [RFC5071] */
+        SD_DHCP_OPTION_REBOOT_TIME                    = 211, /* [RFC5071] */
+        SD_DHCP_OPTION_6RD                            = 212, /* [RFC5969] */
+        SD_DHCP_OPTION_ACCESS_DOMAIN                  = 213, /* [RFC5986] */
+        /* option codes 214-219 are unassigned */
+        SD_DHCP_OPTION_SUBNET_ALLOCATION              = 220, /* [RFC6656] */
+        SD_DHCP_OPTION_VIRTUAL_SUBNET_SELECTION       = 221, /* [RFC6607] */
+        /* option codes 222-223 are unassigned [RFC3942] */
+        /* option codes 224-254 are reserved for private use */
+        SD_DHCP_OPTION_PRIVATE_BASE                   = 224,
+        SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE = 249, /* [RFC7844] */
+        SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY    = 252, /* [RFC7844] */
+        SD_DHCP_OPTION_PRIVATE_LAST                   = 254,
+        SD_DHCP_OPTION_END                            = 255 /* [RFC2132] */
 };
 
 /* Suboptions for SD_DHCP_OPTION_RELAY_AGENT_INFORMATION option */
 enum {
         SD_DHCP_RELAY_AGENT_CIRCUIT_ID             = 1,
-        SD_DHCP_RELAY_AGENT_REMOTE_ID              = 2,
+        SD_DHCP_RELAY_AGENT_REMOTE_ID              = 2
 };
 
 typedef struct sd_dhcp_client sd_dhcp_client;
@@ -135,10 +245,10 @@
 int sd_dhcp_client_set_ifname(
                 sd_dhcp_client *client,
                 const char *interface_name);
-const char *sd_dhcp_client_get_ifname(sd_dhcp_client *client);
+int sd_dhcp_client_get_ifname(sd_dhcp_client *client, const char **ret);
 int sd_dhcp_client_set_mac(
                 sd_dhcp_client *client,
-                const uint8_t *addr,
+                const uint8_t *hw_addr,
                 const uint8_t *bcast_addr,
                 size_t addr_len,
                 uint16_t arp_type);
@@ -147,14 +257,14 @@
                 uint8_t type,
                 const uint8_t *data,
                 size_t data_len);
-int sd_dhcp_client_set_iaid_duid(
+__extension__ int sd_dhcp_client_set_iaid_duid(
                 sd_dhcp_client *client,
                 bool iaid_set,
                 uint32_t iaid,
                 uint16_t duid_type,
                 const void *duid,
                 size_t duid_len);
-int sd_dhcp_client_set_iaid_duid_llt(
+__extension__ int sd_dhcp_client_set_iaid_duid_llt(
                 sd_dhcp_client *client,
                 bool iaid_set,
                 uint32_t iaid,
@@ -199,6 +309,9 @@
 int sd_dhcp_client_set_service_type(
                 sd_dhcp_client *client,
                 int type);
+int sd_dhcp_client_set_socket_priority(
+                sd_dhcp_client *client,
+                int so_priority);
 int sd_dhcp_client_set_fallback_lease_lifetime(
                 sd_dhcp_client *client,
                 uint32_t fallback_lease_lifetime);
@@ -228,6 +341,7 @@
                 int64_t priority);
 int sd_dhcp_client_detach_event(sd_dhcp_client *client);
 sd_event *sd_dhcp_client_get_event(sd_dhcp_client *client);
+int sd_dhcp_client_attach_device(sd_dhcp_client *client, sd_device *dev);
 
 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_client, sd_dhcp_client_unref);
 
diff --git a/src/systemd/sd-dhcp-lease.h b/src/systemd/sd-dhcp-lease.h
index 5abf9a4..3f21826 100644
--- a/src/systemd/sd-dhcp-lease.h
+++ b/src/systemd/sd-dhcp-lease.h
@@ -15,7 +15,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <errno.h>
@@ -34,7 +34,7 @@
 sd_dhcp_lease *sd_dhcp_lease_ref(sd_dhcp_lease *lease);
 sd_dhcp_lease *sd_dhcp_lease_unref(sd_dhcp_lease *lease);
 
-typedef enum sd_dhcp_lease_server_type_t {
+__extension__ typedef enum sd_dhcp_lease_server_type_t {
         SD_DHCP_LEASE_DNS,
         SD_DHCP_LEASE_NTP,
         SD_DHCP_LEASE_SIP,
@@ -43,7 +43,7 @@
         SD_DHCP_LEASE_LPR,
         _SD_DHCP_LEASE_SERVER_TYPE_MAX,
         _SD_DHCP_LEASE_SERVER_TYPE_INVALID = -EINVAL,
-        _SD_ENUM_FORCE_S64(DHCP_LEASE_SERVER_TYPE),
+        _SD_ENUM_FORCE_S64(DHCP_LEASE_SERVER_TYPE)
 } sd_dhcp_lease_server_type_t;
 
 int sd_dhcp_lease_get_address(sd_dhcp_lease *lease, struct in_addr *addr);
@@ -67,15 +67,22 @@
 int sd_dhcp_lease_get_search_domains(sd_dhcp_lease *lease, char ***domains);
 int sd_dhcp_lease_get_hostname(sd_dhcp_lease *lease, const char **hostname);
 int sd_dhcp_lease_get_root_path(sd_dhcp_lease *lease, const char **root_path);
-int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, sd_dhcp_route ***routes);
+int sd_dhcp_lease_get_static_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret);
+int sd_dhcp_lease_get_classless_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret);
 int sd_dhcp_lease_get_vendor_specific(sd_dhcp_lease *lease, const void **data, size_t *data_len);
 int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const void **client_id, size_t *client_id_len);
 int sd_dhcp_lease_get_timezone(sd_dhcp_lease *lease, const char **timezone);
+int sd_dhcp_lease_get_6rd(
+                sd_dhcp_lease *lease,
+                uint8_t *ret_ipv4masklen,
+                uint8_t *ret_prefixlen,
+                struct in6_addr *ret_prefix,
+                const struct in_addr **ret_br_addresses,
+                size_t *ret_n_br_addresses);
 
 int sd_dhcp_route_get_destination(sd_dhcp_route *route, struct in_addr *destination);
 int sd_dhcp_route_get_destination_prefix_length(sd_dhcp_route *route, uint8_t *length);
 int sd_dhcp_route_get_gateway(sd_dhcp_route *route, struct in_addr *gateway);
-int sd_dhcp_route_get_option(sd_dhcp_route *route);
 
 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_lease, sd_dhcp_lease_unref);
 
diff --git a/src/systemd/sd-dhcp-option.h b/src/systemd/sd-dhcp-option.h
index 71aa479..ce8fd6f 100644
--- a/src/systemd/sd-dhcp-option.h
+++ b/src/systemd/sd-dhcp-option.h
@@ -15,7 +15,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
diff --git a/src/systemd/sd-dhcp-server.h b/src/systemd/sd-dhcp-server.h
index 7d42bc1..0fc1748 100644
--- a/src/systemd/sd-dhcp-server.h
+++ b/src/systemd/sd-dhcp-server.h
@@ -15,7 +15,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -32,13 +32,13 @@
 typedef struct sd_dhcp_server sd_dhcp_server;
 
 enum {
-        SD_DHCP_SERVER_EVENT_LEASE_CHANGED                      = 1 << 0,
+        SD_DHCP_SERVER_EVENT_LEASE_CHANGED                      = 1 << 0
 };
 
 int sd_dhcp_server_new(sd_dhcp_server **ret, int ifindex);
 
 int sd_dhcp_server_set_ifname(sd_dhcp_server *server, const char *ifname);
-const char *sd_dhcp_server_get_ifname(sd_dhcp_server *server);
+int sd_dhcp_server_get_ifname(sd_dhcp_server *server, const char **ret);
 
 sd_dhcp_server *sd_dhcp_server_ref(sd_dhcp_server *server);
 sd_dhcp_server *sd_dhcp_server_unref(sd_dhcp_server *server);
@@ -58,9 +58,12 @@
 
 int sd_dhcp_server_configure_pool(sd_dhcp_server *server, const struct in_addr *address, unsigned char prefixlen, uint32_t offset, uint32_t size);
 
+int sd_dhcp_server_set_boot_server_address(sd_dhcp_server *server, const struct in_addr *address);
+int sd_dhcp_server_set_boot_server_name(sd_dhcp_server *server, const char *name);
+int sd_dhcp_server_set_boot_filename(sd_dhcp_server *server, const char *filename);
 int sd_dhcp_server_set_bind_to_interface(sd_dhcp_server *server, int enabled);
 int sd_dhcp_server_set_timezone(sd_dhcp_server *server, const char *timezone);
-int sd_dhcp_server_set_emit_router(sd_dhcp_server *server, int enabled);
+int sd_dhcp_server_set_router(sd_dhcp_server *server, const struct in_addr *address);
 
 int sd_dhcp_server_set_servers(
                 sd_dhcp_server *server,
diff --git a/src/systemd/sd-dhcp6-client.h b/src/systemd/sd-dhcp6-client.h
index e02d676..a9fa785 100644
--- a/src/systemd/sd-dhcp6-client.h
+++ b/src/systemd/sd-dhcp6-client.h
@@ -16,13 +16,14 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
 #include <net/ethernet.h>
 #include <sys/types.h>
 
+#include "sd-device.h"
 #include "sd-dhcp6-lease.h"
 #include "sd-dhcp6-option.h"
 #include "sd-event.h"
@@ -36,47 +37,154 @@
         SD_DHCP6_CLIENT_EVENT_RESEND_EXPIRE             = 10,
         SD_DHCP6_CLIENT_EVENT_RETRANS_MAX               = 11,
         SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE                = 12,
-        SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST       = 13,
+        SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST       = 13
 };
 
+/* https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-2 */
 enum {
-        SD_DHCP6_OPTION_CLIENTID                   = 1,
-        SD_DHCP6_OPTION_SERVERID                   = 2,
-        SD_DHCP6_OPTION_IA_NA                      = 3,
-        SD_DHCP6_OPTION_IA_TA                      = 4,
-        SD_DHCP6_OPTION_IAADDR                     = 5,
-        SD_DHCP6_OPTION_ORO                        = 6,
-        SD_DHCP6_OPTION_PREFERENCE                 = 7,
-        SD_DHCP6_OPTION_ELAPSED_TIME               = 8,
-        SD_DHCP6_OPTION_RELAY_MSG                  = 9,
+        SD_DHCP6_OPTION_CLIENTID                   = 1,  /* RFC 8415 */
+        SD_DHCP6_OPTION_SERVERID                   = 2,  /* RFC 8415 */
+        SD_DHCP6_OPTION_IA_NA                      = 3,  /* RFC 8415 */
+        SD_DHCP6_OPTION_IA_TA                      = 4,  /* RFC 8415 */
+        SD_DHCP6_OPTION_IAADDR                     = 5,  /* RFC 8415 */
+        SD_DHCP6_OPTION_ORO                        = 6,  /* RFC 8415 */
+        SD_DHCP6_OPTION_PREFERENCE                 = 7,  /* RFC 8415 */
+        SD_DHCP6_OPTION_ELAPSED_TIME               = 8,  /* RFC 8415 */
+        SD_DHCP6_OPTION_RELAY_MSG                  = 9,  /* RFC 8415 */
         /* option code 10 is unassigned */
-        SD_DHCP6_OPTION_AUTH                       = 11,
-        SD_DHCP6_OPTION_UNICAST                    = 12,
-        SD_DHCP6_OPTION_STATUS_CODE                = 13,
-        SD_DHCP6_OPTION_RAPID_COMMIT               = 14,
-        SD_DHCP6_OPTION_USER_CLASS                 = 15,
-        SD_DHCP6_OPTION_VENDOR_CLASS               = 16,
-        SD_DHCP6_OPTION_VENDOR_OPTS                = 17,
-        SD_DHCP6_OPTION_INTERFACE_ID               = 18,
-        SD_DHCP6_OPTION_RECONF_MSG                 = 19,
-        SD_DHCP6_OPTION_RECONF_ACCEPT              = 20,
-
-        SD_DHCP6_OPTION_DNS_SERVERS                = 23,  /* RFC 3646 */
-        SD_DHCP6_OPTION_DOMAIN_LIST                = 24,  /* RFC 3646 */
-        SD_DHCP6_OPTION_IA_PD                      = 25,  /* RFC 3633, prefix delegation */
-        SD_DHCP6_OPTION_IA_PD_PREFIX               = 26,  /* RFC 3633, prefix delegation */
-
-        SD_DHCP6_OPTION_SNTP_SERVERS               = 31,  /* RFC 4075, deprecated */
-        SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME   = 32,  /* RFC 8415, sec. 21.23 */
-
+        SD_DHCP6_OPTION_AUTH                       = 11,  /* RFC 8415 */
+        SD_DHCP6_OPTION_UNICAST                    = 12,  /* RFC 8415 */
+        SD_DHCP6_OPTION_STATUS_CODE                = 13,  /* RFC 8415 */
+        SD_DHCP6_OPTION_RAPID_COMMIT               = 14,  /* RFC 8415 */
+        SD_DHCP6_OPTION_USER_CLASS                 = 15,  /* RFC 8415 */
+        SD_DHCP6_OPTION_VENDOR_CLASS               = 16,  /* RFC 8415 */
+        SD_DHCP6_OPTION_VENDOR_OPTS                = 17,  /* RFC 8415 */
+        SD_DHCP6_OPTION_INTERFACE_ID               = 18,  /* RFC 8415 */
+        SD_DHCP6_OPTION_RECONF_MSG                 = 19,  /* RFC 8415 */
+        SD_DHCP6_OPTION_RECONF_ACCEPT              = 20,  /* RFC 8415 */
+        SD_DHCP6_OPTION_SIP_SERVER_DOMAIN_NAME     = 21,  /* RFC 3319 */
+        SD_DHCP6_OPTION_SIP_SERVER_ADDRESS         = 22,  /* RFC 3319 */
+        SD_DHCP6_OPTION_DNS_SERVER                 = 23,  /* RFC 3646 */
+        SD_DHCP6_OPTION_DOMAIN                     = 24,  /* RFC 3646 */
+        SD_DHCP6_OPTION_IA_PD                      = 25,  /* RFC 3633, RFC 8415 */
+        SD_DHCP6_OPTION_IA_PD_PREFIX               = 26,  /* RFC 3633, RFC 8415 */
+        SD_DHCP6_OPTION_NIS_SERVER                 = 27,  /* RFC 3898 */
+        SD_DHCP6_OPTION_NISP_SERVER                = 28,  /* RFC 3898 */
+        SD_DHCP6_OPTION_NIS_DOMAIN_NAME            = 29,  /* RFC 3898 */
+        SD_DHCP6_OPTION_NISP_DOMAIN_NAME           = 30,  /* RFC 3898 */
+        SD_DHCP6_OPTION_SNTP_SERVER                = 31,  /* RFC 4075, deprecated */
+        SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME   = 32,  /* RFC 4242, 8415, sec. 21.23 */
+        SD_DHCP6_OPTION_BCMCS_SERVER_D             = 33,  /* RFC 4280 */
+        SD_DHCP6_OPTION_BCMCS_SERVER_A             = 34,  /* RFC 4280 */
         /* option code 35 is unassigned */
-
-        SD_DHCP6_OPTION_FQDN                       = 39,  /* RFC 4704 */
-
+        SD_DHCP6_OPTION_GEOCONF_CIVIC              = 36,  /* RFC 4776 */
+        SD_DHCP6_OPTION_REMOTE_ID                  = 37,  /* RFC 4649 */
+        SD_DHCP6_OPTION_SUBSCRIBER_ID              = 38,  /* RFC 4580 */
+        SD_DHCP6_OPTION_CLIENT_FQDN                = 39,  /* RFC 4704 */
+        SD_DHCP6_OPTION_PANA_AGENT                 = 40,  /* RFC 5192 */
+        SD_DHCP6_OPTION_POSIX_TIMEZONE             = 41,  /* RFC 4833 */
+        SD_DHCP6_OPTION_TZDB_TIMEZONE              = 42,  /* RFC 4833 */
+        SD_DHCP6_OPTION_ERO                        = 43,  /* RFC 4994 */
+        SD_DHCP6_OPTION_LQ_QUERY                   = 44,  /* RFC 5007 */
+        SD_DHCP6_OPTION_CLIENT_DATA                = 45,  /* RFC 5007 */
+        SD_DHCP6_OPTION_CLT_TIME                   = 46,  /* RFC 5007 */
+        SD_DHCP6_OPTION_LQ_RELAY_DATA              = 47,  /* RFC 5007 */
+        SD_DHCP6_OPTION_LQ_CLIENT_LINK             = 48,  /* RFC 5007 */
+        SD_DHCP6_OPTION_MIP6_HNIDF                 = 49,  /* RFC 6610 */
+        SD_DHCP6_OPTION_MIP6_VDINF                 = 50,  /* RFC 6610 */
+        SD_DHCP6_OPTION_V6_LOST                    = 51,  /* RFC 5223 */
+        SD_DHCP6_OPTION_CAPWAP_AC_V6               = 52,  /* RFC 5417 */
+        SD_DHCP6_OPTION_RELAY_ID                   = 53,  /* RFC 5460 */
+        SD_DHCP6_OPTION_IPV6_ADDRESS_MOS           = 54,  /* RFC 5678 */
+        SD_DHCP6_OPTION_IPV6_FQDN_MOS              = 55,  /* RFC 5678 */
         SD_DHCP6_OPTION_NTP_SERVER                 = 56,  /* RFC 5908 */
-        SD_DHCP6_OPTION_MUD_URL                    = 112, /* RFC 8250 */
-
-        /* option codes 89-142 are unassigned */
+        SD_DHCP6_OPTION_V6_ACCESS_DOMAIN           = 57,  /* RFC 5986 */
+        SD_DHCP6_OPTION_SIP_UA_CS_LIST             = 58,  /* RFC 6011 */
+        SD_DHCP6_OPTION_BOOTFILE_URL               = 59,  /* RFC 5970 */
+        SD_DHCP6_OPTION_BOOTFILE_PARAM             = 60,  /* RFC 5970 */
+        SD_DHCP6_OPTION_CLIENT_ARCH_TYPE           = 61,  /* RFC 5970 */
+        SD_DHCP6_OPTION_NII                        = 62,  /* RFC 5970 */
+        SD_DHCP6_OPTION_GEOLOCATION                = 63,  /* RFC 6225 */
+        SD_DHCP6_OPTION_AFTR_NAME                  = 64,  /* RFC 6334 */
+        SD_DHCP6_OPTION_ERP_LOCAL_DOMAIN_NAME      = 65,  /* RFC 6440 */
+        SD_DHCP6_OPTION_RSOO                       = 66,  /* RFC 6422 */
+        SD_DHCP6_OPTION_PD_EXCLUDE                 = 67,  /* RFC 6603 */
+        SD_DHCP6_OPTION_VSS                        = 68,  /* RFC 6607 */
+        SD_DHCP6_OPTION_MIP6_IDINF                 = 69,  /* RFC 6610 */
+        SD_DHCP6_OPTION_MIP6_UDINF                 = 70,  /* RFC 6610 */
+        SD_DHCP6_OPTION_MIP6_HNP                   = 71,  /* RFC 6610 */
+        SD_DHCP6_OPTION_MIP6_HAA                   = 72,  /* RFC 6610 */
+        SD_DHCP6_OPTION_MIP6_HAF                   = 73,  /* RFC 6610 */
+        SD_DHCP6_OPTION_RDNSS_SELECTION            = 74,  /* RFC 6731 */
+        SD_DHCP6_OPTION_KRB_PRINCIPAL_NAME         = 75,  /* RFC 6784 */
+        SD_DHCP6_OPTION_KRB_REALM_NAME             = 76,  /* RFC 6784 */
+        SD_DHCP6_OPTION_KRB_DEFAULT_REALM_NAME     = 77,  /* RFC 6784 */
+        SD_DHCP6_OPTION_KRB_KDC                    = 78,  /* RFC 6784 */
+        SD_DHCP6_OPTION_CLIENT_LINKLAYER_ADDR      = 79,  /* RFC 6939 */
+        SD_DHCP6_OPTION_LINK_ADDRESS               = 80,  /* RFC 6977 */
+        SD_DHCP6_OPTION_RADIUS                     = 81,  /* RFC 7037 */
+        SD_DHCP6_OPTION_SOL_MAX_RT                 = 82,  /* RFC 7083, RFC 8415 */
+        SD_DHCP6_OPTION_INF_MAX_RT                 = 83,  /* RFC 7083, RFC 8415 */
+        SD_DHCP6_OPTION_ADDRSEL                    = 84,  /* RFC 7078 */
+        SD_DHCP6_OPTION_ADDRSEL_TABLE              = 85,  /* RFC 7078 */
+        SD_DHCP6_OPTION_V6_PCP_SERVER              = 86,  /* RFC 7291 */
+        SD_DHCP6_OPTION_DHCPV4_MSG                 = 87,  /* RFC 7341 */
+        SD_DHCP6_OPTION_DHCP4_O_DHCP6_SERVER       = 88,  /* RFC 7341 */
+        SD_DHCP6_OPTION_S46_RULE                   = 89,  /* RFC 7598 */
+        SD_DHCP6_OPTION_S46_BR                     = 90,  /* RFC 7598, RFC 8539 */
+        SD_DHCP6_OPTION_S46_DMR                    = 91,  /* RFC 7598 */
+        SD_DHCP6_OPTION_S46_V4V6BIND               = 92,  /* RFC 7598 */
+        SD_DHCP6_OPTION_S46_PORTPARAMS             = 93,  /* RFC 7598 */
+        SD_DHCP6_OPTION_S46_CONT_MAPE              = 94,  /* RFC 7598 */
+        SD_DHCP6_OPTION_S46_CONT_MAPT              = 95,  /* RFC 7598 */
+        SD_DHCP6_OPTION_S46_CONT_LW                = 96,  /* RFC 7598 */
+        SD_DHCP6_OPTION_4RD                        = 97,  /* RFC 7600 */
+        SD_DHCP6_OPTION_4RD_MAP_RULE               = 98,  /* RFC 7600 */
+        SD_DHCP6_OPTION_4RD_NON_MAP_RULE           = 99,  /* RFC 7600 */
+        SD_DHCP6_OPTION_LQ_BASE_TIME               = 100, /* RFC 7653 */
+        SD_DHCP6_OPTION_LQ_START_TIME              = 101, /* RFC 7653 */
+        SD_DHCP6_OPTION_LQ_END_TIME                = 102, /* RFC 7653 */
+        SD_DHCP6_OPTION_CAPTIVE_PORTAL             = 103, /* RFC 8910 */
+        SD_DHCP6_OPTION_MPL_PARAMETERS             = 104, /* RFC 7774 */
+        SD_DHCP6_OPTION_ANI_ATT                    = 105, /* RFC 7839 */
+        SD_DHCP6_OPTION_ANI_NETWORK_NAME           = 106, /* RFC 7839 */
+        SD_DHCP6_OPTION_ANI_AP_NAME                = 107, /* RFC 7839 */
+        SD_DHCP6_OPTION_ANI_AP_BSSID               = 108, /* RFC 7839 */
+        SD_DHCP6_OPTION_ANI_OPERATOR_ID            = 109, /* RFC 7839 */
+        SD_DHCP6_OPTION_ANI_OPERATOR_REALM         = 110, /* RFC 7839 */
+        SD_DHCP6_OPTION_S46_PRIORITY               = 111, /* RFC 8026 */
+        SD_DHCP6_OPTION_MUD_URL_V6                 = 112, /* RFC 8520 */
+        SD_DHCP6_OPTION_V6_PREFIX64                = 113, /* RFC 8115 */
+        SD_DHCP6_OPTION_F_BINDING_STATUS           = 114, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_CONNECT_FLAGS            = 115, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_DNS_REMOVAL_INFO         = 116, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_DNS_HOST_NAME            = 117, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_DNS_ZONE_NAME            = 118, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_DNS_FLAGS                = 119, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_EXPIRATION_TIME          = 120, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_MAX_UNACKED_BNDUPD       = 121, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_MCLT                     = 122, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_PARTNER_LIFETIME         = 123, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_PARTNER_LIFETIME_SENT    = 124, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_PARTNER_DOWN_TIME        = 125, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_PARTNER_RAW_CLT_TIME     = 126, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_PROTOCOL_VERSION         = 127, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_KEEPALIVE_TIME           = 128, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_RECONFIGURE_DATA         = 129, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_RELATIONSHIP_NAME        = 130, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_SERVER_FLAGS             = 131, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_SERVER_STATE             = 132, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_START_TIME_OF_STATE      = 133, /* RFC 8156 */
+        SD_DHCP6_OPTION_F_STATE_EXPIRATION_TIME    = 134, /* RFC 8156 */
+        SD_DHCP6_OPTION_RELAY_PORT                 = 135, /* RFC 8357 */
+        SD_DHCP6_OPTION_V6_SZTP_REDIRECT           = 136, /* RFC 8572 */
+        SD_DHCP6_OPTION_S46_BIND_IPV6_PREFIX       = 137, /* RFC 8539 */
+        SD_DHCP6_OPTION_IA_LL                      = 138, /* RFC 8947 */
+        SD_DHCP6_OPTION_LLADDR                     = 139, /* RFC 8947 */
+        SD_DHCP6_OPTION_SLAP_QUAD                  = 140, /* RFC 8948 */
+        SD_DHCP6_OPTION_V6_DOTS_RI                 = 141, /* RFC 8973 */
+        SD_DHCP6_OPTION_V6_DOTS_ADDRESS            = 142, /* RFC 8973 */
+        SD_DHCP6_OPTION_IPV6_ADDRESS_ANDSF         = 143 /* RFC 6153 */
         /* option codes 144-65535 are unassigned */
 };
 
@@ -94,7 +202,7 @@
 int sd_dhcp6_client_set_ifname(
                 sd_dhcp6_client *client,
                 const char *interface_name);
-const char * sd_dhcp6_client_get_ifname(sd_dhcp6_client *client);
+int sd_dhcp6_client_get_ifname(sd_dhcp6_client *client, const char **ret);
 int sd_dhcp6_client_set_local_address(
                 sd_dhcp6_client *client,
                 const struct in6_addr *local_address);
@@ -144,7 +252,7 @@
 int sd_dhcp6_client_set_prefix_delegation_hint(
                 sd_dhcp6_client *client,
                 uint8_t prefixlen,
-                const struct in6_addr *pd_address);
+                const struct in6_addr *pd_prefix);
 int sd_dhcp6_client_get_prefix_delegation(sd_dhcp6_client *client,
                                           int *delegation);
 int sd_dhcp6_client_set_prefix_delegation(sd_dhcp6_client *client,
@@ -153,10 +261,10 @@
                                         int *request);
 int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client,
                                         int request);
-int sd_dhcp6_client_set_transaction_id(sd_dhcp6_client *client,
-                                       uint32_t transaction_id);
 int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client,
                                       sd_dhcp6_option *v);
+int sd_dhcp6_client_set_rapid_commit(sd_dhcp6_client *client, int enable);
+int sd_dhcp6_client_set_send_release(sd_dhcp6_client *client, int enable);
 
 int sd_dhcp6_client_get_lease(
                 sd_dhcp6_client *client,
@@ -173,6 +281,7 @@
                 int64_t priority);
 int sd_dhcp6_client_detach_event(sd_dhcp6_client *client);
 sd_event *sd_dhcp6_client_get_event(sd_dhcp6_client *client);
+int sd_dhcp6_client_attach_device(sd_dhcp6_client *client, sd_device *dev);
 sd_dhcp6_client *sd_dhcp6_client_ref(sd_dhcp6_client *client);
 sd_dhcp6_client *sd_dhcp6_client_unref(sd_dhcp6_client *client);
 int sd_dhcp6_client_new(sd_dhcp6_client **ret);
diff --git a/src/systemd/sd-dhcp6-lease.h b/src/systemd/sd-dhcp6-lease.h
index f77b31a..716f6fc 100644
--- a/src/systemd/sd-dhcp6-lease.h
+++ b/src/systemd/sd-dhcp6-lease.h
@@ -16,11 +16,12 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
 #include <netinet/in.h>
+#include <sys/types.h>
 
 #include "_sd-common.h"
 
@@ -28,6 +29,9 @@
 
 typedef struct sd_dhcp6_lease sd_dhcp6_lease;
 
+int sd_dhcp6_lease_get_timestamp(sd_dhcp6_lease *lease, clockid_t clock, uint64_t *ret);
+int sd_dhcp6_lease_get_server_address(sd_dhcp6_lease *lease, struct in6_addr *ret);
+
 void sd_dhcp6_lease_reset_address_iter(sd_dhcp6_lease *lease);
 int sd_dhcp6_lease_get_address(sd_dhcp6_lease *lease,
                                struct in6_addr *addr,
@@ -39,11 +43,11 @@
                           uint32_t *lifetime_preferred,
                           uint32_t *lifetime_valid);
 
-int sd_dhcp6_lease_get_dns(sd_dhcp6_lease *lease, const struct in6_addr **addrs);
-int sd_dhcp6_lease_get_domains(sd_dhcp6_lease *lease, char ***domains);
-int sd_dhcp6_lease_get_ntp_addrs(sd_dhcp6_lease *lease, const struct in6_addr **addrs);
-int sd_dhcp6_lease_get_ntp_fqdn(sd_dhcp6_lease *lease, char ***ntp_fqdn);
-int sd_dhcp6_lease_get_fqdn(sd_dhcp6_lease *lease, const char **fqdn);
+int sd_dhcp6_lease_get_dns(sd_dhcp6_lease *lease, const struct in6_addr **ret);
+int sd_dhcp6_lease_get_domains(sd_dhcp6_lease *lease, char ***ret);
+int sd_dhcp6_lease_get_ntp_addrs(sd_dhcp6_lease *lease, const struct in6_addr **ret);
+int sd_dhcp6_lease_get_ntp_fqdn(sd_dhcp6_lease *lease, char ***ret);
+int sd_dhcp6_lease_get_fqdn(sd_dhcp6_lease *lease, const char **ret);
 
 sd_dhcp6_lease *sd_dhcp6_lease_ref(sd_dhcp6_lease *lease);
 sd_dhcp6_lease *sd_dhcp6_lease_unref(sd_dhcp6_lease *lease);
diff --git a/src/systemd/sd-dhcp6-option.h b/src/systemd/sd-dhcp6-option.h
index ddb2c7c..b4b4671 100644
--- a/src/systemd/sd-dhcp6-option.h
+++ b/src/systemd/sd-dhcp6-option.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
diff --git a/src/systemd/sd-event.h b/src/systemd/sd-event.h
index 2ae2a0d..cae4c86 100644
--- a/src/systemd/sd-event.h
+++ b/src/systemd/sd-event.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -68,6 +68,8 @@
         SD_EVENT_PRIORITY_IDLE = 100
 };
 
+#define SD_EVENT_SIGNAL_PROCMASK (1 << 30)
+
 typedef int (*sd_event_handler_t)(sd_event_source *s, void *userdata);
 typedef int (*sd_event_io_handler_t)(sd_event_source *s, int fd, uint32_t revents, void *userdata);
 typedef int (*sd_event_time_handler_t)(sd_event_source *s, uint64_t usec, void *userdata);
@@ -93,6 +95,7 @@
 int sd_event_add_child(sd_event *e, sd_event_source **s, pid_t pid, int options, sd_event_child_handler_t callback, void *userdata);
 int sd_event_add_child_pidfd(sd_event *e, sd_event_source **s, int pidfd, int options, sd_event_child_handler_t callback, void *userdata);
 int sd_event_add_inotify(sd_event *e, sd_event_source **s, const char *path, uint32_t mask, sd_event_inotify_handler_t callback, void *userdata);
+int sd_event_add_inotify_fd(sd_event *e, sd_event_source **s, int fd, uint32_t mask, sd_event_inotify_handler_t callback, void *userdata);
 int sd_event_add_defer(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
 int sd_event_add_post(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
 int sd_event_add_exit(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
@@ -113,6 +116,7 @@
 int sd_event_set_watchdog(sd_event *e, int b);
 int sd_event_get_watchdog(sd_event *e);
 int sd_event_get_iteration(sd_event *e, uint64_t *ret);
+int sd_event_set_signal_exit(sd_event *e, int b);
 
 sd_event_source* sd_event_source_ref(sd_event_source *s);
 sd_event_source* sd_event_source_unref(sd_event_source *s);
@@ -165,6 +169,7 @@
 int sd_event_source_set_ratelimit(sd_event_source *s, uint64_t interval_usec, unsigned burst);
 int sd_event_source_get_ratelimit(sd_event_source *s, uint64_t *ret_interval_usec, unsigned *ret_burst);
 int sd_event_source_is_ratelimited(sd_event_source *s);
+int sd_event_source_set_ratelimit_expire_callback(sd_event_source *s, sd_event_handler_t callback);
 
 /* Define helpers so that __attribute__((cleanup(sd_event_unrefp))) and similar may be used. */
 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_event, sd_event_unref);
diff --git a/src/systemd/sd-gpt.h b/src/systemd/sd-gpt.h
new file mode 100644
index 0000000..baa19b1
--- /dev/null
+++ b/src/systemd/sd-gpt.h
@@ -0,0 +1,319 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#ifndef foosdgpthfoo
+#define foosdgpthfoo
+
+/***
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
+***/
+
+#include "sd-id128.h"
+
+#include "_sd-common.h"
+
+_SD_BEGIN_DECLARATIONS;
+
+#define SD_GPT_ROOT_ALPHA       SD_ID128_MAKE(65,23,f8,ae,3e,b1,4e,2a,a0,5a,18,b6,95,ae,65,6f)
+#define SD_GPT_ROOT_ARC         SD_ID128_MAKE(d2,7f,46,ed,29,19,4c,b8,bd,25,95,31,f3,c1,65,34)
+#define SD_GPT_ROOT_ARM         SD_ID128_MAKE(69,da,d7,10,2c,e4,4e,3c,b1,6c,21,a1,d4,9a,be,d3)
+#define SD_GPT_ROOT_ARM64       SD_ID128_MAKE(b9,21,b0,45,1d,f0,41,c3,af,44,4c,6f,28,0d,3f,ae)
+#define SD_GPT_ROOT_IA64        SD_ID128_MAKE(99,3d,8d,3d,f8,0e,42,25,85,5a,9d,af,8e,d7,ea,97)
+#define SD_GPT_ROOT_LOONGARCH64 SD_ID128_MAKE(77,05,58,00,79,2c,4f,94,b3,9a,98,c9,1b,76,2b,b6)
+#define SD_GPT_ROOT_MIPS_LE     SD_ID128_MAKE(37,c5,8c,8a,d9,13,41,56,a2,5f,48,b1,b6,4e,07,f0)
+#define SD_GPT_ROOT_MIPS64_LE   SD_ID128_MAKE(70,0b,da,43,7a,34,45,07,b1,79,ee,b9,3d,7a,7c,a3)
+#define SD_GPT_ROOT_PARISC      SD_ID128_MAKE(1a,ac,db,3b,54,44,41,38,bd,9e,e5,c2,23,9b,23,46)
+#define SD_GPT_ROOT_PPC         SD_ID128_MAKE(1d,e3,f1,ef,fa,98,47,b5,8d,cd,4a,86,0a,65,4d,78)
+#define SD_GPT_ROOT_PPC64       SD_ID128_MAKE(91,2a,de,1d,a8,39,49,13,89,64,a1,0e,ee,08,fb,d2)
+#define SD_GPT_ROOT_PPC64_LE    SD_ID128_MAKE(c3,1c,45,e6,3f,39,41,2e,80,fb,48,09,c4,98,05,99)
+#define SD_GPT_ROOT_RISCV32     SD_ID128_MAKE(60,d5,a7,fe,8e,7d,43,5c,b7,14,3d,d8,16,21,44,e1)
+#define SD_GPT_ROOT_RISCV64     SD_ID128_MAKE(72,ec,70,a6,cf,74,40,e6,bd,49,4b,da,08,e8,f2,24)
+#define SD_GPT_ROOT_S390        SD_ID128_MAKE(08,a7,ac,ea,62,4c,4a,20,91,e8,6e,0f,a6,7d,23,f9)
+#define SD_GPT_ROOT_S390X       SD_ID128_MAKE(5e,ea,d9,a9,fe,09,4a,1e,a1,d7,52,0d,00,53,13,06)
+#define SD_GPT_ROOT_TILEGX      SD_ID128_MAKE(c5,0c,dd,70,38,62,4c,c3,90,e1,80,9a,8c,93,ee,2c)
+#define SD_GPT_ROOT_X86         SD_ID128_MAKE(44,47,95,40,f2,97,41,b2,9a,f7,d1,31,d5,f0,45,8a)
+#define SD_GPT_ROOT_X86_64      SD_ID128_MAKE(4f,68,bc,e3,e8,cd,4d,b1,96,e7,fb,ca,f9,84,b7,09)
+#define SD_GPT_USR_ALPHA        SD_ID128_MAKE(e1,8c,f0,8c,33,ec,4c,0d,82,46,c6,c6,fb,3d,a0,24)
+#define SD_GPT_USR_ARC          SD_ID128_MAKE(79,78,a6,83,63,16,49,22,bb,ee,38,bf,f5,a2,fe,cc)
+#define SD_GPT_USR_ARM          SD_ID128_MAKE(7d,03,59,a3,02,b3,4f,0a,86,5c,65,44,03,e7,06,25)
+#define SD_GPT_USR_ARM64        SD_ID128_MAKE(b0,e0,10,50,ee,5f,43,90,94,9a,91,01,b1,71,04,e9)
+#define SD_GPT_USR_IA64         SD_ID128_MAKE(43,01,d2,a6,4e,3b,4b,2a,bb,94,9e,0b,2c,42,25,ea)
+#define SD_GPT_USR_LOONGARCH64  SD_ID128_MAKE(e6,11,c7,02,57,5c,4c,be,9a,46,43,4f,a0,bf,7e,3f)
+#define SD_GPT_USR_MIPS_LE      SD_ID128_MAKE(0f,48,68,e9,99,52,47,06,97,9f,3e,d3,a4,73,e9,47)
+#define SD_GPT_USR_MIPS64_LE    SD_ID128_MAKE(c9,7c,1f,32,ba,06,40,b4,9f,22,23,60,61,b0,8a,a8)
+#define SD_GPT_USR_PARISC       SD_ID128_MAKE(dc,4a,44,80,69,17,42,62,a4,ec,db,93,84,94,9f,25)
+#define SD_GPT_USR_PPC          SD_ID128_MAKE(7d,14,fe,c5,cc,71,41,5d,9d,6c,06,bf,0b,3c,3e,af)
+#define SD_GPT_USR_PPC64        SD_ID128_MAKE(2c,97,39,e2,f0,68,46,b3,9f,d0,01,c5,a9,af,bc,ca)
+#define SD_GPT_USR_PPC64_LE     SD_ID128_MAKE(15,bb,03,af,77,e7,4d,4a,b1,2b,c0,d0,84,f7,49,1c)
+#define SD_GPT_USR_RISCV32      SD_ID128_MAKE(b9,33,fb,22,5c,3f,4f,91,af,90,e2,bb,0f,a5,07,02)
+#define SD_GPT_USR_RISCV64      SD_ID128_MAKE(be,ae,c3,4b,84,42,43,9b,a4,0b,98,43,81,ed,09,7d)
+#define SD_GPT_USR_S390         SD_ID128_MAKE(cd,0f,86,9b,d0,fb,4c,a0,b1,41,9e,a8,7c,c7,8d,66)
+#define SD_GPT_USR_S390X        SD_ID128_MAKE(8a,4f,57,70,50,aa,4e,d3,87,4a,99,b7,10,db,6f,ea)
+#define SD_GPT_USR_TILEGX       SD_ID128_MAKE(55,49,70,29,c7,c1,44,cc,aa,39,81,5e,d1,55,86,30)
+#define SD_GPT_USR_X86          SD_ID128_MAKE(75,25,0d,76,8c,c6,45,8e,bd,66,bd,47,cc,81,a8,12)
+#define SD_GPT_USR_X86_64       SD_ID128_MAKE(84,84,68,0c,95,21,48,c6,9c,11,b0,72,06,56,f6,9e)
+
+/* Verity partitions for the root partitions above (we only define them for the root and /usr partitions,
+ * because only they are commonly read-only and hence suitable for verity). */
+#define SD_GPT_ROOT_ALPHA_VERITY       SD_ID128_MAKE(fc,56,d9,e9,e6,e5,4c,06,be,32,e7,44,07,ce,09,a5)
+#define SD_GPT_ROOT_ARC_VERITY         SD_ID128_MAKE(24,b2,d9,75,0f,97,45,21,af,a1,cd,53,1e,42,1b,8d)
+#define SD_GPT_ROOT_ARM_VERITY         SD_ID128_MAKE(73,86,cd,f2,20,3c,47,a9,a4,98,f2,ec,ce,45,a2,d6)
+#define SD_GPT_ROOT_ARM64_VERITY       SD_ID128_MAKE(df,33,00,ce,d6,9f,4c,92,97,8c,9b,fb,0f,38,d8,20)
+#define SD_GPT_ROOT_IA64_VERITY        SD_ID128_MAKE(86,ed,10,d5,b6,07,45,bb,89,57,d3,50,f2,3d,05,71)
+#define SD_GPT_ROOT_LOONGARCH64_VERITY SD_ID128_MAKE(f3,39,3b,22,e9,af,46,13,a9,48,9d,3b,fb,d0,c5,35)
+#define SD_GPT_ROOT_MIPS_LE_VERITY     SD_ID128_MAKE(d7,d1,50,d2,2a,04,4a,33,8f,12,16,65,12,05,ff,7b)
+#define SD_GPT_ROOT_MIPS64_LE_VERITY   SD_ID128_MAKE(16,b4,17,f8,3e,06,4f,57,8d,d2,9b,52,32,f4,1a,a6)
+#define SD_GPT_ROOT_PARISC_VERITY      SD_ID128_MAKE(d2,12,a4,30,fb,c5,49,f9,a9,83,a7,fe,ef,2b,8d,0e)
+#define SD_GPT_ROOT_PPC64_LE_VERITY    SD_ID128_MAKE(90,6b,d9,44,45,89,4a,ae,a4,e4,dd,98,39,17,44,6a)
+#define SD_GPT_ROOT_PPC64_VERITY       SD_ID128_MAKE(92,25,a9,a3,3c,19,4d,89,b4,f6,ee,ff,88,f1,76,31)
+#define SD_GPT_ROOT_PPC_VERITY         SD_ID128_MAKE(98,cf,e6,49,15,88,46,dc,b2,f0,ad,d1,47,42,49,25)
+#define SD_GPT_ROOT_RISCV32_VERITY     SD_ID128_MAKE(ae,02,53,be,11,67,40,07,ac,68,43,92,6c,14,c5,de)
+#define SD_GPT_ROOT_RISCV64_VERITY     SD_ID128_MAKE(b6,ed,55,82,44,0b,42,09,b8,da,5f,f7,c4,19,ea,3d)
+#define SD_GPT_ROOT_S390_VERITY        SD_ID128_MAKE(7a,c6,3b,47,b2,5c,46,3b,8d,f8,b4,a9,4e,6c,90,e1)
+#define SD_GPT_ROOT_S390X_VERITY       SD_ID128_MAKE(b3,25,bf,be,c7,be,4a,b8,83,57,13,9e,65,2d,2f,6b)
+#define SD_GPT_ROOT_TILEGX_VERITY      SD_ID128_MAKE(96,60,61,ec,28,e4,4b,2e,b4,a5,1f,0a,82,5a,1d,84)
+#define SD_GPT_ROOT_X86_64_VERITY      SD_ID128_MAKE(2c,73,57,ed,eb,d2,46,d9,ae,c1,23,d4,37,ec,2b,f5)
+#define SD_GPT_ROOT_X86_VERITY         SD_ID128_MAKE(d1,3c,5d,3b,b5,d1,42,2a,b2,9f,94,54,fd,c8,9d,76)
+#define SD_GPT_USR_ALPHA_VERITY        SD_ID128_MAKE(8c,ce,0d,25,c0,d0,4a,44,bd,87,46,33,1b,f1,df,67)
+#define SD_GPT_USR_ARC_VERITY          SD_ID128_MAKE(fc,a0,59,8c,d8,80,45,91,8c,16,4e,da,05,c7,34,7c)
+#define SD_GPT_USR_ARM_VERITY          SD_ID128_MAKE(c2,15,d7,51,7b,cd,46,49,be,90,66,27,49,0a,4c,05)
+#define SD_GPT_USR_ARM64_VERITY        SD_ID128_MAKE(6e,11,a4,e7,fb,ca,4d,ed,b9,e9,e1,a5,12,bb,66,4e)
+#define SD_GPT_USR_IA64_VERITY         SD_ID128_MAKE(6a,49,1e,03,3b,e7,45,45,8e,38,83,32,0e,0e,a8,80)
+#define SD_GPT_USR_LOONGARCH64_VERITY  SD_ID128_MAKE(f4,6b,2c,26,59,ae,48,f0,91,06,c5,0e,d4,7f,67,3d)
+#define SD_GPT_USR_MIPS_LE_VERITY      SD_ID128_MAKE(46,b9,8d,8d,b5,5c,4e,8f,aa,b3,37,fc,a7,f8,07,52)
+#define SD_GPT_USR_MIPS64_LE_VERITY    SD_ID128_MAKE(3c,3d,61,fe,b5,f3,41,4d,bb,71,87,39,a6,94,a4,ef)
+#define SD_GPT_USR_PARISC_VERITY       SD_ID128_MAKE(58,43,d6,18,ec,37,48,d7,9f,12,ce,a8,e0,87,68,b2)
+#define SD_GPT_USR_PPC64_LE_VERITY     SD_ID128_MAKE(ee,2b,99,83,21,e8,41,53,86,d9,b6,90,1a,54,d1,ce)
+#define SD_GPT_USR_PPC64_VERITY        SD_ID128_MAKE(bd,b5,28,a5,a2,59,47,5f,a8,7d,da,53,fa,73,6a,07)
+#define SD_GPT_USR_PPC_VERITY          SD_ID128_MAKE(df,76,5d,00,27,0e,49,e5,bc,75,f4,7b,b2,11,8b,09)
+#define SD_GPT_USR_RISCV32_VERITY      SD_ID128_MAKE(cb,1e,e4,e3,8c,d0,41,36,a0,a4,aa,61,a3,2e,87,30)
+#define SD_GPT_USR_RISCV64_VERITY      SD_ID128_MAKE(8f,10,56,be,9b,05,47,c4,81,d6,be,53,12,8e,5b,54)
+#define SD_GPT_USR_S390_VERITY         SD_ID128_MAKE(b6,63,c6,18,e7,bc,4d,6d,90,aa,11,b7,56,bb,17,97)
+#define SD_GPT_USR_S390X_VERITY        SD_ID128_MAKE(31,74,1c,c4,1a,2a,41,11,a5,81,e0,0b,44,7d,2d,06)
+#define SD_GPT_USR_TILEGX_VERITY       SD_ID128_MAKE(2f,b4,bf,56,07,fa,42,da,81,32,6b,13,9f,20,26,ae)
+#define SD_GPT_USR_X86_64_VERITY       SD_ID128_MAKE(77,ff,5f,63,e7,b6,46,33,ac,f4,15,65,b8,64,c0,e6)
+#define SD_GPT_USR_X86_VERITY          SD_ID128_MAKE(8f,46,1b,0d,14,ee,4e,81,9a,a9,04,9b,6f,b9,7a,bd)
+
+/* PKCS#7 Signatures for the Verity Root Hashes */
+#define SD_GPT_ROOT_ALPHA_VERITY_SIG       SD_ID128_MAKE(d4,64,95,b7,a0,53,41,4f,80,f7,70,0c,99,92,1e,f8)
+#define SD_GPT_ROOT_ARC_VERITY_SIG         SD_ID128_MAKE(14,3a,70,ba,cb,d3,4f,06,91,9f,6c,05,68,3a,78,bc)
+#define SD_GPT_ROOT_ARM_VERITY_SIG         SD_ID128_MAKE(42,b0,45,5f,eb,11,49,1d,98,d3,56,14,5b,a9,d0,37)
+#define SD_GPT_ROOT_ARM64_VERITY_SIG       SD_ID128_MAKE(6d,b6,9d,e6,29,f4,47,58,a7,a5,96,21,90,f0,0c,e3)
+#define SD_GPT_ROOT_IA64_VERITY_SIG        SD_ID128_MAKE(e9,8b,36,ee,32,ba,48,82,9b,12,0c,e1,46,55,f4,6a)
+#define SD_GPT_ROOT_LOONGARCH64_VERITY_SIG SD_ID128_MAKE(5a,fb,67,eb,ec,c8,4f,85,ae,8e,ac,1e,7c,50,e7,d0)
+#define SD_GPT_ROOT_MIPS_LE_VERITY_SIG     SD_ID128_MAKE(c9,19,cc,1f,44,56,4e,ff,91,8c,f7,5e,94,52,5c,a5)
+#define SD_GPT_ROOT_MIPS64_LE_VERITY_SIG   SD_ID128_MAKE(90,4e,58,ef,5c,65,4a,31,9c,57,6a,f5,fc,7c,5d,e7)
+#define SD_GPT_ROOT_PARISC_VERITY_SIG      SD_ID128_MAKE(15,de,61,70,65,d3,43,1c,91,6e,b0,dc,d8,39,3f,25)
+#define SD_GPT_ROOT_PPC64_LE_VERITY_SIG    SD_ID128_MAKE(d4,a2,36,e7,e8,73,4c,07,bf,1d,bf,6c,f7,f1,c3,c6)
+#define SD_GPT_ROOT_PPC64_VERITY_SIG       SD_ID128_MAKE(f5,e2,c2,0c,45,b2,4f,fa,bc,e9,2a,60,73,7e,1a,af)
+#define SD_GPT_ROOT_PPC_VERITY_SIG         SD_ID128_MAKE(1b,31,b5,aa,ad,d9,46,3a,b2,ed,bd,46,7f,c8,57,e7)
+#define SD_GPT_ROOT_RISCV32_VERITY_SIG     SD_ID128_MAKE(3a,11,2a,75,87,29,43,80,b4,cf,76,4d,79,93,44,48)
+#define SD_GPT_ROOT_RISCV64_VERITY_SIG     SD_ID128_MAKE(ef,e0,f0,87,ea,8d,44,69,82,1a,4c,2a,96,a8,38,6a)
+#define SD_GPT_ROOT_S390_VERITY_SIG        SD_ID128_MAKE(34,82,38,8e,42,54,43,5a,a2,41,76,6a,06,5f,99,60)
+#define SD_GPT_ROOT_S390X_VERITY_SIG       SD_ID128_MAKE(c8,01,87,a5,73,a3,49,1a,90,1a,01,7c,3f,a9,53,e9)
+#define SD_GPT_ROOT_TILEGX_VERITY_SIG      SD_ID128_MAKE(b3,67,14,39,97,b0,4a,53,90,f7,2d,5a,8f,3a,d4,7b)
+#define SD_GPT_ROOT_X86_64_VERITY_SIG      SD_ID128_MAKE(41,09,2b,05,9f,c8,45,23,99,4f,2d,ef,04,08,b1,76)
+#define SD_GPT_ROOT_X86_VERITY_SIG         SD_ID128_MAKE(59,96,fc,05,10,9c,48,de,80,8b,23,fa,08,30,b6,76)
+#define SD_GPT_USR_ALPHA_VERITY_SIG        SD_ID128_MAKE(5c,6e,1c,76,07,6a,45,7a,a0,fe,f3,b4,cd,21,ce,6e)
+#define SD_GPT_USR_ARC_VERITY_SIG          SD_ID128_MAKE(94,f9,a9,a1,99,71,42,7a,a4,00,50,cb,29,7f,0f,35)
+#define SD_GPT_USR_ARM_VERITY_SIG          SD_ID128_MAKE(d7,ff,81,2f,37,d1,49,02,a8,10,d7,6b,a5,7b,97,5a)
+#define SD_GPT_USR_ARM64_VERITY_SIG        SD_ID128_MAKE(c2,3c,e4,ff,44,bd,4b,00,b2,d4,b4,1b,34,19,e0,2a)
+#define SD_GPT_USR_IA64_VERITY_SIG         SD_ID128_MAKE(8d,e5,8b,c2,2a,43,46,0d,b1,4e,a7,6e,4a,17,b4,7f)
+#define SD_GPT_USR_LOONGARCH64_VERITY_SIG  SD_ID128_MAKE(b0,24,f3,15,d3,30,44,4c,84,61,44,bb,de,52,4e,99)
+#define SD_GPT_USR_MIPS_LE_VERITY_SIG      SD_ID128_MAKE(3e,23,ca,0b,a4,bc,4b,4e,80,87,5a,b6,a2,6a,a8,a9)
+#define SD_GPT_USR_MIPS64_LE_VERITY_SIG    SD_ID128_MAKE(f2,c2,c7,ee,ad,cc,43,51,b5,c6,ee,98,16,b6,6e,16)
+#define SD_GPT_USR_PARISC_VERITY_SIG       SD_ID128_MAKE(45,0d,d7,d1,32,24,45,ec,9c,f2,a4,3a,34,6d,71,ee)
+#define SD_GPT_USR_PPC64_LE_VERITY_SIG     SD_ID128_MAKE(c8,bf,bd,1e,26,8e,45,21,8b,ba,bf,31,4c,39,95,57)
+#define SD_GPT_USR_PPC64_VERITY_SIG        SD_ID128_MAKE(0b,88,88,63,d7,f8,4d,9e,97,66,23,9f,ce,4d,58,af)
+#define SD_GPT_USR_PPC_VERITY_SIG          SD_ID128_MAKE(70,07,89,1d,d3,71,4a,80,86,a4,5c,b8,75,b9,30,2e)
+#define SD_GPT_USR_RISCV32_VERITY_SIG      SD_ID128_MAKE(c3,83,6a,13,31,37,45,ba,b5,83,b1,6c,50,fe,5e,b4)
+#define SD_GPT_USR_RISCV64_VERITY_SIG      SD_ID128_MAKE(d2,f9,00,0a,7a,18,45,3f,b5,cd,4d,32,f7,7a,7b,32)
+#define SD_GPT_USR_S390_VERITY_SIG         SD_ID128_MAKE(17,44,0e,4f,a8,d0,46,7f,a4,6e,39,12,ae,6e,f2,c5)
+#define SD_GPT_USR_S390X_VERITY_SIG        SD_ID128_MAKE(3f,32,48,16,66,7b,46,ae,86,ee,9b,0c,0c,6c,11,b4)
+#define SD_GPT_USR_TILEGX_VERITY_SIG       SD_ID128_MAKE(4e,de,75,e2,6c,cc,4c,c8,b9,c7,70,33,4b,08,75,10)
+#define SD_GPT_USR_X86_64_VERITY_SIG       SD_ID128_MAKE(e7,bb,33,fb,06,cf,4e,81,82,73,e5,43,b4,13,e2,e2)
+#define SD_GPT_USR_X86_VERITY_SIG          SD_ID128_MAKE(97,4a,71,c0,de,41,43,c3,be,5d,5c,5c,cd,1a,d2,c0)
+
+#define SD_GPT_ESP                         SD_ID128_MAKE(c1,2a,73,28,f8,1f,11,d2,ba,4b,00,a0,c9,3e,c9,3b)
+#define SD_GPT_ESP_STR                     SD_ID128_MAKE_UUID_STR(c1,2a,73,28,f8,1f,11,d2,ba,4b,00,a0,c9,3e,c9,3b)
+#define SD_GPT_XBOOTLDR                    SD_ID128_MAKE(bc,13,c2,ff,59,e6,42,62,a3,52,b2,75,fd,6f,71,72)
+#define SD_GPT_XBOOTLDR_STR                SD_ID128_MAKE_UUID_STR(bc,13,c2,ff,59,e6,42,62,a3,52,b2,75,fd,6f,71,72)
+#define SD_GPT_SWAP                        SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f)
+#define SD_GPT_SWAP_STR                    SD_ID128_MAKE_UUID_STR(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f)
+#define SD_GPT_HOME                        SD_ID128_MAKE(93,3a,c7,e1,2e,b4,4f,13,b8,44,0e,14,e2,ae,f9,15)
+#define SD_GPT_HOME_STR                    SD_ID128_MAKE_UUID_STR(93,3a,c7,e1,2e,b4,4f,13,b8,44,0e,14,e2,ae,f9,15)
+#define SD_GPT_SRV                         SD_ID128_MAKE(3b,8f,84,25,20,e0,4f,3b,90,7f,1a,25,a7,6f,98,e8)
+#define SD_GPT_SRV_STR                     SD_ID128_MAKE_UUID_STR(3b,8f,84,25,20,e0,4f,3b,90,7f,1a,25,a7,6f,98,e8)
+#define SD_GPT_VAR                         SD_ID128_MAKE(4d,21,b0,16,b5,34,45,c2,a9,fb,5c,16,e0,91,fd,2d)
+#define SD_GPT_VAR_STR                     SD_ID128_MAKE_UUID_STR(4d,21,b0,16,b5,34,45,c2,a9,fb,5c,16,e0,91,fd,2d)
+#define SD_GPT_TMP                         SD_ID128_MAKE(7e,c6,f5,57,3b,c5,4a,ca,b2,93,16,ef,5d,f6,39,d1)
+#define SD_GPT_TMP_STR                     SD_ID128_MAKE_UUID_STR(7e,c6,f5,57,3b,c5,4a,ca,b2,93,16,ef,5d,f6,39,d1)
+#define SD_GPT_USER_HOME                   SD_ID128_MAKE(77,3f,91,ef,66,d4,49,b5,bd,83,d6,83,bf,40,ad,16)
+#define SD_GPT_USER_HOME_STR               SD_ID128_MAKE_UUID_STR(77,3f,91,ef,66,d4,49,b5,bd,83,d6,83,bf,40,ad,16)
+#define SD_GPT_LINUX_GENERIC               SD_ID128_MAKE(0f,c6,3d,af,84,83,47,72,8e,79,3d,69,d8,47,7d,e4)
+#define SD_GPT_LINUX_GENERIC_STR           SD_ID128_MAKE_UUID_STR(0f,c6,3d,af,84,83,47,72,8e,79,3d,69,d8,47,7d,e4)
+
+/* Maintain same order as above */
+#if defined(__alpha__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_ALPHA
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_ALPHA_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_ALPHA_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_ALPHA
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_ALPHA_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_ALPHA_VERITY_SIG
+
+#elif defined(__arc__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_ARC
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_ARC_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_ARC_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_ARC
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_ARC_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_ARC_VERITY_SIG
+
+#elif defined(__aarch64__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_ARM64
+#  define SD_GPT_ROOT_SECONDARY SD_GPT_ROOT_ARM
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_ARM64_VERITY
+#  define SD_GPT_ROOT_SECONDARY_VERITY SD_GPT_ROOT_ARM_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_ARM64_VERITY_SIG
+#  define SD_GPT_ROOT_SECONDARY_VERITY_SIG SD_GPT_ROOT_ARM_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_ARM64
+#  define SD_GPT_USR_SECONDARY SD_GPT_USR_ARM
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_ARM64_VERITY
+#  define SD_GPT_USR_SECONDARY_VERITY SD_GPT_USR_ARM_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_ARM64_VERITY_SIG
+#  define SD_GPT_USR_SECONDARY_VERITY_SIG SD_GPT_USR_ARM_VERITY_SIG
+#elif defined(__arm__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_ARM
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_ARM_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_ARM_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_ARM
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_ARM_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_ARM_VERITY_SIG
+
+#elif defined(__ia64__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_IA64
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_IA64_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_IA64_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_IA64
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_IA64_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_IA64_VERITY_SIG
+
+#elif defined(__loongarch64)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_LOONGARCH64
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_LOONGARCH64_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_LOONGARCH64_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_LOONGARCH64
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_LOONGARCH64_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_LOONGARCH64_VERITY_SIG
+
+#elif defined(__powerpc__) && defined(__PPC64__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_PPC64_LE
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_PPC64_LE_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_PPC64_LE_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_PPC64_LE
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_PPC64_LE_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_PPC64_LE_VERITY_SIG
+#elif defined(__powerpc__) && defined(__powerpc64__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_PPC64
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_PPC64_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_PPC64_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_PPC64
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_PPC64_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_PPC64_VERITY_SIG
+#elif defined(__powerpc__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_PPC
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_PPC_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_PPC_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_PPC
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_PPC_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_PPC_VERITY_SIG
+
+#elif defined(__riscv) && __riscv_xlen == 32
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_RISCV32
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_RISCV32_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_RISCV32_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_RISCV32
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_RISCV32_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_RISCV32_VERITY_SIG
+#elif defined(__riscv) && __riscv_xlen == 64
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_RISCV64
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_RISCV64_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_RISCV64_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_RISCV64
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_RISCV64_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_RISCV64_VERITY_SIG
+
+#elif defined(__s390__) && !defined(__s390x__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_S390
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_S390_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_S390_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_S390
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_S390_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_S390_VERITY_SIG
+
+#elif defined(__s390x__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_S390X
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_S390X_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_S390X_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_S390X
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_S390X_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_S390X_VERITY_SIG
+
+#elif defined(__tilegx__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_TILEGX
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_TILEGX_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_TILEGX_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_TILEGX
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_TILEGX_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_TILEGX_VERITY_SIG
+
+#elif defined(__x86_64__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_X86_64
+#  define SD_GPT_ROOT_SECONDARY SD_GPT_ROOT_X86
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_X86_64_VERITY
+#  define SD_GPT_ROOT_SECONDARY_VERITY SD_GPT_ROOT_X86_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_X86_64_VERITY_SIG
+#  define SD_GPT_ROOT_SECONDARY_VERITY_SIG SD_GPT_ROOT_X86_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_X86_64
+#  define SD_GPT_USR_SECONDARY SD_GPT_USR_X86
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_X86_64_VERITY
+#  define SD_GPT_USR_SECONDARY_VERITY SD_GPT_USR_X86_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_X86_64_VERITY_SIG
+#  define SD_GPT_USR_SECONDARY_VERITY_SIG SD_GPT_USR_X86_VERITY_SIG
+#elif defined(__i386__)
+#  define SD_GPT_ROOT_NATIVE SD_GPT_ROOT_X86
+#  define SD_GPT_ROOT_NATIVE_VERITY SD_GPT_ROOT_X86_VERITY
+#  define SD_GPT_ROOT_NATIVE_VERITY_SIG SD_GPT_ROOT_X86_VERITY_SIG
+#  define SD_GPT_USR_NATIVE SD_GPT_USR_X86
+#  define SD_GPT_USR_NATIVE_VERITY SD_GPT_USR_X86_VERITY
+#  define SD_GPT_USR_NATIVE_VERITY_SIG SD_GPT_USR_X86_VERITY_SIG
+#endif
+
+/* Partition attributes defined by the UEFI specification. */
+#define SD_GPT_FLAG_REQUIRED_PARTITION   (UINT64_C(1) << 0)
+#define SD_GPT_FLAG_NO_BLOCK_IO_PROTOCOL (UINT64_C(1) << 1)
+#define SD_GPT_FLAG_LEGACY_BIOS_BOOTABLE (UINT64_C(1) << 2)
+
+/* Flags we recognize on the root, usr, xbootldr, swap, home, srv, var, tmp partitions when doing
+ * auto-discovery.
+ *
+ * The first two happen to be identical to what Microsoft defines for its own Basic Data Partitions
+ * in "winioctl.h": GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY, GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER.
+ */
+#define SD_GPT_FLAG_READ_ONLY (UINT64_C(1) << 60)
+#define SD_GPT_FLAG_NO_AUTO   (UINT64_C(1) << 63)
+#define SD_GPT_FLAG_GROWFS    (UINT64_C(1) << 59)
+
+_SD_END_DECLARATIONS;
+
+#endif
diff --git a/src/systemd/sd-hwdb.h b/src/systemd/sd-hwdb.h
index 9380759..ff880f1 100644
--- a/src/systemd/sd-hwdb.h
+++ b/src/systemd/sd-hwdb.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include "_sd-common.h"
@@ -27,6 +27,7 @@
 sd_hwdb *sd_hwdb_unref(sd_hwdb *hwdb);
 
 int sd_hwdb_new(sd_hwdb **ret);
+int sd_hwdb_new_from_path(const char *path, sd_hwdb **ret);
 
 int sd_hwdb_get(sd_hwdb *hwdb, const char *modalias, const char *key, const char **value);
 
diff --git a/src/systemd/sd-id128.h b/src/systemd/sd-id128.h
index f2dd735..3303c37 100644
--- a/src/systemd/sd-id128.h
+++ b/src/systemd/sd-id128.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -34,11 +34,16 @@
         uint64_t qwords[2];
 };
 
-#define SD_ID128_STRING_MAX 33
+#define SD_ID128_STRING_MAX 33U
+#define SD_ID128_UUID_STRING_MAX 37U
 
 char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]);
+char *sd_id128_to_uuid_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_UUID_STRING_MAX]);
 int sd_id128_from_string(const char *s, sd_id128_t *ret);
 
+#define SD_ID128_TO_STRING(id) sd_id128_to_string((id), (char[SD_ID128_STRING_MAX]) {})
+#define SD_ID128_TO_UUID_STRING(id) sd_id128_to_uuid_string((id), (char[SD_ID128_UUID_STRING_MAX]) {})
+
 int sd_id128_randomize(sd_id128_t *ret);
 
 int sd_id128_get_machine(sd_id128_t *ret);
@@ -111,9 +116,11 @@
         #a #b #c #d "-" #e #f "-" #g #h "-" #i #j "-" #k #l #m #n #o #p
 
 _sd_pure_ static __inline__ int sd_id128_equal(sd_id128_t a, sd_id128_t b) {
-        return memcmp(&a, &b, 16) == 0;
+        return a.qwords[0] == b.qwords[0] && a.qwords[1] == b.qwords[1];
 }
 
+int sd_id128_string_equal(const char *s, sd_id128_t id);
+
 _sd_pure_ static __inline__ int sd_id128_is_null(sd_id128_t a) {
         return a.qwords[0] == 0 && a.qwords[1] == 0;
 }
diff --git a/src/systemd/sd-ipv4acd.h b/src/systemd/sd-ipv4acd.h
index 3213db5..b5e253d 100644
--- a/src/systemd/sd-ipv4acd.h
+++ b/src/systemd/sd-ipv4acd.h
@@ -15,7 +15,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <net/ethernet.h>
@@ -31,7 +31,7 @@
 enum {
         SD_IPV4ACD_EVENT_STOP           = 0,
         SD_IPV4ACD_EVENT_BIND           = 1,
-        SD_IPV4ACD_EVENT_CONFLICT       = 2,
+        SD_IPV4ACD_EVENT_CONFLICT       = 2
 };
 
 typedef struct sd_ipv4acd sd_ipv4acd;
@@ -47,10 +47,10 @@
 int sd_ipv4acd_set_ifindex(sd_ipv4acd *acd, int interface_index);
 int sd_ipv4acd_get_ifindex(sd_ipv4acd *acd);
 int sd_ipv4acd_set_ifname(sd_ipv4acd *acd, const char *interface_name);
-const char *sd_ipv4acd_get_ifname(sd_ipv4acd *acd);
+int sd_ipv4acd_get_ifname(sd_ipv4acd *acd, const char **ret);
 int sd_ipv4acd_set_address(sd_ipv4acd *acd, const struct in_addr *address);
 int sd_ipv4acd_is_running(sd_ipv4acd *acd);
-int sd_ipv4acd_start(sd_ipv4acd *acd, bool reset_conflicts);
+__extension__ int sd_ipv4acd_start(sd_ipv4acd *acd, bool reset_conflicts);
 int sd_ipv4acd_stop(sd_ipv4acd *acd);
 sd_ipv4acd *sd_ipv4acd_ref(sd_ipv4acd *acd);
 sd_ipv4acd *sd_ipv4acd_unref(sd_ipv4acd *acd);
diff --git a/src/systemd/sd-ipv4ll.h b/src/systemd/sd-ipv4ll.h
index 27263bc..35e4679 100644
--- a/src/systemd/sd-ipv4ll.h
+++ b/src/systemd/sd-ipv4ll.h
@@ -16,7 +16,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <net/ethernet.h>
@@ -31,7 +31,7 @@
 enum {
         SD_IPV4LL_EVENT_STOP            = 0,
         SD_IPV4LL_EVENT_BIND            = 1,
-        SD_IPV4LL_EVENT_CONFLICT        = 2,
+        SD_IPV4LL_EVENT_CONFLICT        = 2
 };
 
 typedef struct sd_ipv4ll sd_ipv4ll;
@@ -47,7 +47,7 @@
 int sd_ipv4ll_set_ifindex(sd_ipv4ll *ll, int interface_index);
 int sd_ipv4ll_get_ifindex(sd_ipv4ll *ll);
 int sd_ipv4ll_set_ifname(sd_ipv4ll *ll, const char *interface_name);
-const char *sd_ipv4ll_get_ifname(sd_ipv4ll *ll);
+int sd_ipv4ll_get_ifname(sd_ipv4ll *ll, const char **ret);
 int sd_ipv4ll_set_address(sd_ipv4ll *ll, const struct in_addr *address);
 int sd_ipv4ll_set_address_seed(sd_ipv4ll *ll, uint64_t seed);
 int sd_ipv4ll_is_running(sd_ipv4ll *ll);
diff --git a/src/systemd/sd-journal.h b/src/systemd/sd-journal.h
index 03696eb..24638f1 100644
--- a/src/systemd/sd-journal.h
+++ b/src/systemd/sd-journal.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
diff --git a/src/systemd/sd-lldp-rx.h b/src/systemd/sd-lldp-rx.h
new file mode 100644
index 0000000..504d7f5
--- /dev/null
+++ b/src/systemd/sd-lldp-rx.h
@@ -0,0 +1,109 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#ifndef foosdlldprxhfoo
+#define foosdlldprxhfoo
+
+/***
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+#include <inttypes.h>
+#include <net/ethernet.h>
+#include <sys/types.h>
+
+#include "sd-event.h"
+#include "sd-lldp.h"
+
+#include "_sd-common.h"
+
+_SD_BEGIN_DECLARATIONS;
+
+typedef struct sd_lldp_rx sd_lldp_rx;
+typedef struct sd_lldp_neighbor sd_lldp_neighbor;
+
+__extension__ typedef enum sd_lldp_rx_event_t {
+        SD_LLDP_RX_EVENT_ADDED,
+        SD_LLDP_RX_EVENT_REMOVED,
+        SD_LLDP_RX_EVENT_UPDATED,
+        SD_LLDP_RX_EVENT_REFRESHED,
+        _SD_LLDP_RX_EVENT_MAX,
+        _SD_LLDP_RX_EVENT_INVALID = -EINVAL,
+        _SD_ENUM_FORCE_S64(LLDP_RX_EVENT)
+} sd_lldp_rx_event_t;
+
+typedef void (*sd_lldp_rx_callback_t)(sd_lldp_rx *lldp_rx, sd_lldp_rx_event_t event, sd_lldp_neighbor *n, void *userdata);
+
+int sd_lldp_rx_new(sd_lldp_rx **ret);
+sd_lldp_rx *sd_lldp_rx_ref(sd_lldp_rx *lldp_rx);
+sd_lldp_rx *sd_lldp_rx_unref(sd_lldp_rx *lldp_rx);
+
+int sd_lldp_rx_start(sd_lldp_rx *lldp_rx);
+int sd_lldp_rx_stop(sd_lldp_rx *lldp_rx);
+int sd_lldp_rx_is_running(sd_lldp_rx *lldp_rx);
+
+int sd_lldp_rx_attach_event(sd_lldp_rx *lldp_rx, sd_event *event, int64_t priority);
+int sd_lldp_rx_detach_event(sd_lldp_rx *lldp_rx);
+sd_event *sd_lldp_rx_get_event(sd_lldp_rx *lldp_rx);
+
+int sd_lldp_rx_set_callback(sd_lldp_rx *lldp_rx, sd_lldp_rx_callback_t cb, void *userdata);
+int sd_lldp_rx_set_ifindex(sd_lldp_rx *lldp_rx, int ifindex);
+int sd_lldp_rx_set_ifname(sd_lldp_rx *lldp_rx, const char *ifname);
+int sd_lldp_rx_get_ifname(sd_lldp_rx *lldp_rx, const char **ret);
+
+/* Controls how much and what to store in the neighbors database */
+int sd_lldp_rx_set_neighbors_max(sd_lldp_rx *lldp_rx, uint64_t n);
+int sd_lldp_rx_match_capabilities(sd_lldp_rx *lldp_rx, uint16_t mask);
+int sd_lldp_rx_set_filter_address(sd_lldp_rx *lldp_rx, const struct ether_addr *address);
+
+int sd_lldp_rx_get_neighbors(sd_lldp_rx *lldp_rx, sd_lldp_neighbor ***neighbors);
+
+int sd_lldp_neighbor_from_raw(sd_lldp_neighbor **ret, const void *raw, size_t raw_size);
+sd_lldp_neighbor *sd_lldp_neighbor_ref(sd_lldp_neighbor *n);
+sd_lldp_neighbor *sd_lldp_neighbor_unref(sd_lldp_neighbor *n);
+
+/* Access to LLDP frame metadata */
+int sd_lldp_neighbor_get_source_address(sd_lldp_neighbor *n, struct ether_addr* address);
+int sd_lldp_neighbor_get_destination_address(sd_lldp_neighbor *n, struct ether_addr* address);
+int sd_lldp_neighbor_get_timestamp(sd_lldp_neighbor *n, clockid_t clock, uint64_t *ret);
+int sd_lldp_neighbor_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size);
+
+/* High-level, direct, parsed out field access. These fields exist at most once, hence may be queried directly. */
+int sd_lldp_neighbor_get_chassis_id(sd_lldp_neighbor *n, uint8_t *type, const void **ret, size_t *size);
+int sd_lldp_neighbor_get_chassis_id_as_string(sd_lldp_neighbor *n, const char **ret);
+int sd_lldp_neighbor_get_port_id(sd_lldp_neighbor *n, uint8_t *type, const void **ret, size_t *size);
+int sd_lldp_neighbor_get_port_id_as_string(sd_lldp_neighbor *n, const char **ret);
+int sd_lldp_neighbor_get_ttl(sd_lldp_neighbor *n, uint16_t *ret_sec);
+int sd_lldp_neighbor_get_system_name(sd_lldp_neighbor *n, const char **ret);
+int sd_lldp_neighbor_get_system_description(sd_lldp_neighbor *n, const char **ret);
+int sd_lldp_neighbor_get_port_description(sd_lldp_neighbor *n, const char **ret);
+int sd_lldp_neighbor_get_mud_url(sd_lldp_neighbor *n, const char **ret);
+int sd_lldp_neighbor_get_system_capabilities(sd_lldp_neighbor *n, uint16_t *ret);
+int sd_lldp_neighbor_get_enabled_capabilities(sd_lldp_neighbor *n, uint16_t *ret);
+
+/* Low-level, iterative TLV access. This is for everything else, it iteratively goes through all available TLVs
+ * (including the ones covered with the calls above), and allows multiple TLVs for the same fields. */
+int sd_lldp_neighbor_tlv_rewind(sd_lldp_neighbor *n);
+int sd_lldp_neighbor_tlv_next(sd_lldp_neighbor *n);
+int sd_lldp_neighbor_tlv_get_type(sd_lldp_neighbor *n, uint8_t *type);
+int sd_lldp_neighbor_tlv_is_type(sd_lldp_neighbor *n, uint8_t type);
+int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t *subtype);
+int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t subtype);
+int sd_lldp_neighbor_tlv_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size);
+
+_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_lldp_rx, sd_lldp_rx_unref);
+_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_lldp_neighbor, sd_lldp_neighbor_unref);
+
+_SD_END_DECLARATIONS;
+
+#endif
diff --git a/src/systemd/sd-lldp-tx.h b/src/systemd/sd-lldp-tx.h
new file mode 100644
index 0000000..2eeb6b6
--- /dev/null
+++ b/src/systemd/sd-lldp-tx.h
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#ifndef foosdlldptxhfoo
+#define foosdlldptxhfoo
+
+/***
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+#include <inttypes.h>
+#include <net/ethernet.h>
+#include <sys/types.h>
+
+#include "sd-event.h"
+#include "sd-lldp.h"
+
+#include "_sd-common.h"
+
+_SD_BEGIN_DECLARATIONS;
+
+typedef struct sd_lldp_tx sd_lldp_tx;
+
+__extension__ typedef enum sd_lldp_multicast_mode_t {
+        SD_LLDP_MULTICAST_MODE_NEAREST_BRIDGE,
+        SD_LLDP_MULTICAST_MODE_NON_TPMR_BRIDGE,
+        SD_LLDP_MULTICAST_MODE_CUSTOMER_BRIDGE,
+        _SD_LLDP_MULTICAST_MODE_MAX,
+        _SD_LLDP_MULTICAST_MODE_INVALID = -EINVAL,
+        _SD_ENUM_FORCE_S64(LLDP_TX_MODE)
+} sd_lldp_multicast_mode_t;
+
+int sd_lldp_tx_new(sd_lldp_tx **ret);
+sd_lldp_tx *sd_lldp_tx_ref(sd_lldp_tx *lldp_tx);
+sd_lldp_tx *sd_lldp_tx_unref(sd_lldp_tx *lldp_tx);
+
+int sd_lldp_tx_start(sd_lldp_tx *lldp_tx);
+int sd_lldp_tx_stop(sd_lldp_tx *lldp_tx);
+int sd_lldp_tx_is_running(sd_lldp_tx *lldp_tx);
+
+int sd_lldp_tx_attach_event(sd_lldp_tx *lldp_tx, sd_event *event, int64_t priority);
+int sd_lldp_tx_detach_event(sd_lldp_tx *lldp_tx);
+
+int sd_lldp_tx_set_ifindex(sd_lldp_tx *lldp_tx, int ifindex);
+int sd_lldp_tx_set_ifname(sd_lldp_tx *lldp_tx, const char *ifname);
+int sd_lldp_tx_get_ifname(sd_lldp_tx *lldp_tx, const char **ret);
+
+int sd_lldp_tx_set_multicast_mode(sd_lldp_tx *lldp_tx, sd_lldp_multicast_mode_t mode);
+int sd_lldp_tx_set_hwaddr(sd_lldp_tx *lldp_tx, const struct ether_addr *hwaddr);
+int sd_lldp_tx_set_port_description(sd_lldp_tx *lldp_tx, const char *port_description);
+int sd_lldp_tx_set_hostname(sd_lldp_tx *lldp_tx, const char *hostname);
+int sd_lldp_tx_set_pretty_hostname(sd_lldp_tx *lldp_tx, const char *pretty_hostname);
+int sd_lldp_tx_set_mud_url(sd_lldp_tx *lldp_tx, const char *mud_url);
+int sd_lldp_tx_set_capabilities(sd_lldp_tx *lldp_tx, uint16_t supported, uint16_t enabled);
+
+_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_lldp_tx, sd_lldp_tx_unref);
+
+_SD_END_DECLARATIONS;
+
+#endif
diff --git a/src/systemd/sd-lldp.h b/src/systemd/sd-lldp.h
index 64047ee..4069c5b 100644
--- a/src/systemd/sd-lldp.h
+++ b/src/systemd/sd-lldp.h
@@ -14,15 +14,10 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
-#include <errno.h>
 #include <inttypes.h>
-#include <net/ethernet.h>
-#include <sys/types.h>
-
-#include "sd-event.h"
 
 #include "_sd-common.h"
 
@@ -39,7 +34,7 @@
         SD_LLDP_TYPE_SYSTEM_DESCRIPTION  = 6,
         SD_LLDP_TYPE_SYSTEM_CAPABILITIES = 7,
         SD_LLDP_TYPE_MGMT_ADDRESS        = 8,
-        SD_LLDP_TYPE_PRIVATE             = 127,
+        SD_LLDP_TYPE_PRIVATE             = 127
 };
 
 /* IEEE 802.1AB-2009 Clause 8.5.2: Chassis subtypes */
@@ -51,7 +46,7 @@
         SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS         = 4,
         SD_LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS     = 5,
         SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME      = 6,
-        SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED    = 7,
+        SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED    = 7
 };
 
 /* IEEE 802.1AB-2009 Clause 8.5.3: Port subtype */
@@ -63,7 +58,7 @@
         SD_LLDP_PORT_SUBTYPE_NETWORK_ADDRESS  = 4,
         SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME   = 5,
         SD_LLDP_PORT_SUBTYPE_AGENT_CIRCUIT_ID = 6,
-        SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED = 7,
+        SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED = 7
 };
 
 /* IEEE 802.1AB-2009 Clause 8.5.8: System capabilities */
@@ -78,27 +73,31 @@
         SD_LLDP_SYSTEM_CAPABILITIES_STATION  = 1 << 7,
         SD_LLDP_SYSTEM_CAPABILITIES_CVLAN    = 1 << 8,
         SD_LLDP_SYSTEM_CAPABILITIES_SVLAN    = 1 << 9,
-        SD_LLDP_SYSTEM_CAPABILITIES_TPMR     = 1 << 10,
+        SD_LLDP_SYSTEM_CAPABILITIES_TPMR     = 1 << 10
 };
 
 #define SD_LLDP_SYSTEM_CAPABILITIES_ALL UINT16_MAX
 
 #define SD_LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS                         \
         ((uint16_t)                                                     \
-         (SD_LLDP_SYSTEM_CAPABILITIES_REPEATER|                         \
-          SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE|                           \
-          SD_LLDP_SYSTEM_CAPABILITIES_WLAN_AP|                          \
-          SD_LLDP_SYSTEM_CAPABILITIES_ROUTER|                           \
-          SD_LLDP_SYSTEM_CAPABILITIES_DOCSIS|                           \
-          SD_LLDP_SYSTEM_CAPABILITIES_CVLAN|                            \
-          SD_LLDP_SYSTEM_CAPABILITIES_SVLAN|                            \
+         (SD_LLDP_SYSTEM_CAPABILITIES_REPEATER |                        \
+          SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE |                          \
+          SD_LLDP_SYSTEM_CAPABILITIES_WLAN_AP |                         \
+          SD_LLDP_SYSTEM_CAPABILITIES_ROUTER |                          \
+          SD_LLDP_SYSTEM_CAPABILITIES_DOCSIS |                          \
+          SD_LLDP_SYSTEM_CAPABILITIES_CVLAN |                           \
+          SD_LLDP_SYSTEM_CAPABILITIES_SVLAN |                           \
           SD_LLDP_SYSTEM_CAPABILITIES_TPMR))
 
-#define SD_LLDP_OUI_802_1 (uint8_t[]) { 0x00, 0x80, 0xc2 }
-#define SD_LLDP_OUI_802_3 (uint8_t[]) { 0x00, 0x12, 0x0f }
+#define SD_LLDP_OUI_802_1 (const uint8_t[]) { 0x00, 0x80, 0xc2 }
+#define SD_LLDP_OUI_802_3 (const uint8_t[]) { 0x00, 0x12, 0x0f }
 
-#define SD_LLDP_OUI_MUD   (uint8_t[]) { 0x00, 0x00, 0x5E }
-#define SD_LLDP_OUI_SUBTYPE_MUD_USAGE_DESCRIPTION  0x01
+#define _SD_LLDP_OUI_IANA 0x00, 0x00, 0x5E
+#define SD_LLDP_OUI_IANA  (const uint8_t[]) { _SD_LLDP_OUI_IANA }
+
+#define SD_LLDP_OUI_IANA_SUBTYPE_MUD  0x01
+#define SD_LLDP_OUI_IANA_MUD                                            \
+        (const uint8_t[]) { _SD_LLDP_OUI_IANA, SD_LLDP_OUI_IANA_SUBTYPE_MUD }
 
 /* IEEE 802.1AB-2009 Annex E */
 enum {
@@ -108,7 +107,7 @@
         SD_LLDP_OUI_802_1_SUBTYPE_PROTOCOL_IDENTITY     = 4,
         SD_LLDP_OUI_802_1_SUBTYPE_VID_USAGE_DIGEST      = 5,
         SD_LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID        = 6,
-        SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION      = 7,
+        SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION      = 7
 };
 
 /* IEEE 802.1AB-2009 Annex F */
@@ -116,83 +115,9 @@
         SD_LLDP_OUI_802_3_SUBTYPE_MAC_PHY_CONFIG_STATUS = 1,
         SD_LLDP_OUI_802_3_SUBTYPE_POWER_VIA_MDI         = 2,
         SD_LLDP_OUI_802_3_SUBTYPE_LINK_AGGREGATION      = 3,
-        SD_LLDP_OUI_802_3_SUBTYPE_MAXIMUM_FRAME_SIZE    = 4,
+        SD_LLDP_OUI_802_3_SUBTYPE_MAXIMUM_FRAME_SIZE    = 4
 };
 
-typedef struct sd_lldp sd_lldp;
-typedef struct sd_lldp_neighbor sd_lldp_neighbor;
-
-typedef enum sd_lldp_event_t {
-        SD_LLDP_EVENT_ADDED,
-        SD_LLDP_EVENT_REMOVED,
-        SD_LLDP_EVENT_UPDATED,
-        SD_LLDP_EVENT_REFRESHED,
-        _SD_LLDP_EVENT_MAX,
-        _SD_LLDP_EVENT_INVALID = -EINVAL,
-        _SD_ENUM_FORCE_S64(LLDP_EVENT),
-} sd_lldp_event_t;
-
-typedef void (*sd_lldp_callback_t)(sd_lldp *lldp, sd_lldp_event_t event, sd_lldp_neighbor *n, void *userdata);
-
-int sd_lldp_new(sd_lldp **ret);
-sd_lldp* sd_lldp_ref(sd_lldp *lldp);
-sd_lldp* sd_lldp_unref(sd_lldp *lldp);
-
-int sd_lldp_start(sd_lldp *lldp);
-int sd_lldp_stop(sd_lldp *lldp);
-
-int sd_lldp_attach_event(sd_lldp *lldp, sd_event *event, int64_t priority);
-int sd_lldp_detach_event(sd_lldp *lldp);
-sd_event *sd_lldp_get_event(sd_lldp *lldp);
-
-int sd_lldp_set_callback(sd_lldp *lldp, sd_lldp_callback_t cb, void *userdata);
-int sd_lldp_set_ifindex(sd_lldp *lldp, int ifindex);
-int sd_lldp_set_ifname(sd_lldp *lldp, const char *ifname);
-const char *sd_lldp_get_ifname(sd_lldp *lldp);
-
-/* Controls how much and what to store in the neighbors database */
-int sd_lldp_set_neighbors_max(sd_lldp *lldp, uint64_t n);
-int sd_lldp_match_capabilities(sd_lldp *lldp, uint16_t mask);
-int sd_lldp_set_filter_address(sd_lldp *lldp, const struct ether_addr *address);
-
-int sd_lldp_get_neighbors(sd_lldp *lldp, sd_lldp_neighbor ***neighbors);
-
-int sd_lldp_neighbor_from_raw(sd_lldp_neighbor **ret, const void *raw, size_t raw_size);
-sd_lldp_neighbor *sd_lldp_neighbor_ref(sd_lldp_neighbor *n);
-sd_lldp_neighbor *sd_lldp_neighbor_unref(sd_lldp_neighbor *n);
-
-/* Access to LLDP frame metadata */
-int sd_lldp_neighbor_get_source_address(sd_lldp_neighbor *n, struct ether_addr* address);
-int sd_lldp_neighbor_get_destination_address(sd_lldp_neighbor *n, struct ether_addr* address);
-int sd_lldp_neighbor_get_timestamp(sd_lldp_neighbor *n, clockid_t clock, uint64_t *ret);
-int sd_lldp_neighbor_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size);
-
-/* High-level, direct, parsed out field access. These fields exist at most once, hence may be queried directly. */
-int sd_lldp_neighbor_get_chassis_id(sd_lldp_neighbor *n, uint8_t *type, const void **ret, size_t *size);
-int sd_lldp_neighbor_get_chassis_id_as_string(sd_lldp_neighbor *n, const char **ret);
-int sd_lldp_neighbor_get_port_id(sd_lldp_neighbor *n, uint8_t *type, const void **ret, size_t *size);
-int sd_lldp_neighbor_get_port_id_as_string(sd_lldp_neighbor *n, const char **ret);
-int sd_lldp_neighbor_get_ttl(sd_lldp_neighbor *n, uint16_t *ret_sec);
-int sd_lldp_neighbor_get_system_name(sd_lldp_neighbor *n, const char **ret);
-int sd_lldp_neighbor_get_system_description(sd_lldp_neighbor *n, const char **ret);
-int sd_lldp_neighbor_get_port_description(sd_lldp_neighbor *n, const char **ret);
-int sd_lldp_neighbor_get_mud_url(sd_lldp_neighbor *n, const char **ret);
-int sd_lldp_neighbor_get_system_capabilities(sd_lldp_neighbor *n, uint16_t *ret);
-int sd_lldp_neighbor_get_enabled_capabilities(sd_lldp_neighbor *n, uint16_t *ret);
-
-/* Low-level, iterative TLV access. This is for everything else, it iteratively goes through all available TLVs
- * (including the ones covered with the calls above), and allows multiple TLVs for the same fields. */
-int sd_lldp_neighbor_tlv_rewind(sd_lldp_neighbor *n);
-int sd_lldp_neighbor_tlv_next(sd_lldp_neighbor *n);
-int sd_lldp_neighbor_tlv_get_type(sd_lldp_neighbor *n, uint8_t *type);
-int sd_lldp_neighbor_tlv_is_type(sd_lldp_neighbor *n, uint8_t type);
-int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t *subtype);
-int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t subtype);
-int sd_lldp_neighbor_tlv_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size);
-
-_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_lldp, sd_lldp_unref);
-_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_lldp_neighbor, sd_lldp_neighbor_unref);
-
 _SD_END_DECLARATIONS;
 
 #endif
diff --git a/src/systemd/sd-login.h b/src/systemd/sd-login.h
index d3ad6ab..85dd086 100644
--- a/src/systemd/sd-login.h
+++ b/src/systemd/sd-login.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -80,6 +80,18 @@
  * hierarchy. */
 int sd_pid_get_cgroup(pid_t pid, char **cgroup);
 
+/* Equivalent to the corresponding sd_pid_get* functions, but take a
+ * PIDFD instead of a PID, to ensure there can be no possible PID
+ * recycle issues before/after the calls. */
+int sd_pidfd_get_session(pid_t pid, char **session);
+int sd_pidfd_get_owner_uid(pid_t pid, uid_t *uid);
+int sd_pidfd_get_unit(pid_t pid, char **unit);
+int sd_pidfd_get_user_unit(pid_t pid, char **unit);
+int sd_pidfd_get_slice(pid_t pid, char **slice);
+int sd_pidfd_get_user_slice(pid_t pid, char **slice);
+int sd_pidfd_get_machine_name(pid_t pid, char **machine);
+int sd_pidfd_get_cgroup(pid_t pid, char **cgroup);
+
 /* Similar to sd_pid_get_session(), but retrieves data about the peer
  * of a connected AF_UNIX socket */
 int sd_peer_get_session(int fd, char **session);
diff --git a/src/systemd/sd-messages.h b/src/systemd/sd-messages.h
index aee0ddb..00fdbad 100644
--- a/src/systemd/sd-messages.h
+++ b/src/systemd/sd-messages.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include "sd-id128.h"
@@ -25,164 +25,175 @@
 
 /* Hey! If you add a new message here, you *must* also update the message catalog with an appropriate explanation */
 
-/* And if you add a new ID here, make sure to generate a random one with "systemd-id128 new". Do not use any other IDs,
- * and do not count them up manually. */
+/* And if you add a new ID here, make sure to generate a random one with "systemd-id128 new". Do not use any
+ * other IDs, and do not count them up manually. */
 
-#define SD_MESSAGE_JOURNAL_START          SD_ID128_MAKE(f7,73,79,a8,49,0b,40,8b,be,5f,69,40,50,5a,77,7b)
-#define SD_MESSAGE_JOURNAL_START_STR      SD_ID128_MAKE_STR(f7,73,79,a8,49,0b,40,8b,be,5f,69,40,50,5a,77,7b)
-#define SD_MESSAGE_JOURNAL_STOP           SD_ID128_MAKE(d9,3f,b3,c9,c2,4d,45,1a,97,ce,a6,15,ce,59,c0,0b)
-#define SD_MESSAGE_JOURNAL_STOP_STR       SD_ID128_MAKE_STR(d9,3f,b3,c9,c2,4d,45,1a,97,ce,a6,15,ce,59,c0,0b)
-#define SD_MESSAGE_JOURNAL_DROPPED        SD_ID128_MAKE(a5,96,d6,fe,7b,fa,49,94,82,8e,72,30,9e,95,d6,1e)
-#define SD_MESSAGE_JOURNAL_DROPPED_STR    SD_ID128_MAKE_STR(a5,96,d6,fe,7b,fa,49,94,82,8e,72,30,9e,95,d6,1e)
-#define SD_MESSAGE_JOURNAL_MISSED         SD_ID128_MAKE(e9,bf,28,e6,e8,34,48,1b,b6,f4,8f,54,8a,d1,36,06)
-#define SD_MESSAGE_JOURNAL_MISSED_STR     SD_ID128_MAKE_STR(e9,bf,28,e6,e8,34,48,1b,b6,f4,8f,54,8a,d1,36,06)
-#define SD_MESSAGE_JOURNAL_USAGE          SD_ID128_MAKE(ec,38,7f,57,7b,84,4b,8f,a9,48,f3,3c,ad,9a,75,e6)
-#define SD_MESSAGE_JOURNAL_USAGE_STR      SD_ID128_MAKE_STR(ec,38,7f,57,7b,84,4b,8f,a9,48,f3,3c,ad,9a,75,e6)
+#define SD_MESSAGE_JOURNAL_START                      SD_ID128_MAKE(f7,73,79,a8,49,0b,40,8b,be,5f,69,40,50,5a,77,7b)
+#define SD_MESSAGE_JOURNAL_START_STR                  SD_ID128_MAKE_STR(f7,73,79,a8,49,0b,40,8b,be,5f,69,40,50,5a,77,7b)
+#define SD_MESSAGE_JOURNAL_STOP                       SD_ID128_MAKE(d9,3f,b3,c9,c2,4d,45,1a,97,ce,a6,15,ce,59,c0,0b)
+#define SD_MESSAGE_JOURNAL_STOP_STR                   SD_ID128_MAKE_STR(d9,3f,b3,c9,c2,4d,45,1a,97,ce,a6,15,ce,59,c0,0b)
+#define SD_MESSAGE_JOURNAL_DROPPED                    SD_ID128_MAKE(a5,96,d6,fe,7b,fa,49,94,82,8e,72,30,9e,95,d6,1e)
+#define SD_MESSAGE_JOURNAL_DROPPED_STR                SD_ID128_MAKE_STR(a5,96,d6,fe,7b,fa,49,94,82,8e,72,30,9e,95,d6,1e)
+#define SD_MESSAGE_JOURNAL_MISSED                     SD_ID128_MAKE(e9,bf,28,e6,e8,34,48,1b,b6,f4,8f,54,8a,d1,36,06)
+#define SD_MESSAGE_JOURNAL_MISSED_STR                 SD_ID128_MAKE_STR(e9,bf,28,e6,e8,34,48,1b,b6,f4,8f,54,8a,d1,36,06)
+#define SD_MESSAGE_JOURNAL_USAGE                      SD_ID128_MAKE(ec,38,7f,57,7b,84,4b,8f,a9,48,f3,3c,ad,9a,75,e6)
+#define SD_MESSAGE_JOURNAL_USAGE_STR                  SD_ID128_MAKE_STR(ec,38,7f,57,7b,84,4b,8f,a9,48,f3,3c,ad,9a,75,e6)
 
-#define SD_MESSAGE_COREDUMP               SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)
-#define SD_MESSAGE_COREDUMP_STR           SD_ID128_MAKE_STR(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)
-#define SD_MESSAGE_TRUNCATED_CORE         SD_ID128_MAKE(5a,ad,d8,e9,54,dc,4b,1a,8c,95,4d,63,fd,9e,11,37)
-#define SD_MESSAGE_TRUNCATED_CORE_STR     SD_ID128_MAKE_STR(5a,ad,d8,e9,54,dc,4b,1a,8c,95,4d,63,fd,9e,11,37)
-#define SD_MESSAGE_BACKTRACE              SD_ID128_MAKE(1f,4e,0a,44,a8,86,49,93,9a,ae,a3,4f,c6,da,8c,95)
-#define SD_MESSAGE_BACKTRACE_STR          SD_ID128_MAKE_STR(1f,4e,0a,44,a8,86,49,93,9a,ae,a3,4f,c6,da,8c,95)
+#define SD_MESSAGE_COREDUMP                           SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)
+#define SD_MESSAGE_COREDUMP_STR                       SD_ID128_MAKE_STR(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)
+#define SD_MESSAGE_TRUNCATED_CORE                     SD_ID128_MAKE(5a,ad,d8,e9,54,dc,4b,1a,8c,95,4d,63,fd,9e,11,37)
+#define SD_MESSAGE_TRUNCATED_CORE_STR                 SD_ID128_MAKE_STR(5a,ad,d8,e9,54,dc,4b,1a,8c,95,4d,63,fd,9e,11,37)
+#define SD_MESSAGE_BACKTRACE                          SD_ID128_MAKE(1f,4e,0a,44,a8,86,49,93,9a,ae,a3,4f,c6,da,8c,95)
+#define SD_MESSAGE_BACKTRACE_STR                      SD_ID128_MAKE_STR(1f,4e,0a,44,a8,86,49,93,9a,ae,a3,4f,c6,da,8c,95)
 
-#define SD_MESSAGE_SESSION_START          SD_ID128_MAKE(8d,45,62,0c,1a,43,48,db,b1,74,10,da,57,c6,0c,66)
-#define SD_MESSAGE_SESSION_START_STR      SD_ID128_MAKE_STR(8d,45,62,0c,1a,43,48,db,b1,74,10,da,57,c6,0c,66)
-#define SD_MESSAGE_SESSION_STOP           SD_ID128_MAKE(33,54,93,94,24,b4,45,6d,98,02,ca,83,33,ed,42,4a)
-#define SD_MESSAGE_SESSION_STOP_STR       SD_ID128_MAKE_STR(33,54,93,94,24,b4,45,6d,98,02,ca,83,33,ed,42,4a)
-#define SD_MESSAGE_SEAT_START             SD_ID128_MAKE(fc,be,fc,5d,a2,3d,42,80,93,f9,7c,82,a9,29,0f,7b)
-#define SD_MESSAGE_SEAT_START_STR         SD_ID128_MAKE_STR(fc,be,fc,5d,a2,3d,42,80,93,f9,7c,82,a9,29,0f,7b)
-#define SD_MESSAGE_SEAT_STOP              SD_ID128_MAKE(e7,85,2b,fe,46,78,4e,d0,ac,cd,e0,4b,c8,64,c2,d5)
-#define SD_MESSAGE_SEAT_STOP_STR          SD_ID128_MAKE_STR(e7,85,2b,fe,46,78,4e,d0,ac,cd,e0,4b,c8,64,c2,d5)
-#define SD_MESSAGE_MACHINE_START          SD_ID128_MAKE(24,d8,d4,45,25,73,40,24,96,06,83,81,a6,31,2d,f2)
-#define SD_MESSAGE_MACHINE_START_STR      SD_ID128_MAKE_STR(24,d8,d4,45,25,73,40,24,96,06,83,81,a6,31,2d,f2)
-#define SD_MESSAGE_MACHINE_STOP           SD_ID128_MAKE(58,43,2b,d3,ba,ce,47,7c,b5,14,b5,63,81,b8,a7,58)
-#define SD_MESSAGE_MACHINE_STOP_STR       SD_ID128_MAKE_STR(58,43,2b,d3,ba,ce,47,7c,b5,14,b5,63,81,b8,a7,58)
+#define SD_MESSAGE_SESSION_START                      SD_ID128_MAKE(8d,45,62,0c,1a,43,48,db,b1,74,10,da,57,c6,0c,66)
+#define SD_MESSAGE_SESSION_START_STR                  SD_ID128_MAKE_STR(8d,45,62,0c,1a,43,48,db,b1,74,10,da,57,c6,0c,66)
+#define SD_MESSAGE_SESSION_STOP                       SD_ID128_MAKE(33,54,93,94,24,b4,45,6d,98,02,ca,83,33,ed,42,4a)
+#define SD_MESSAGE_SESSION_STOP_STR                   SD_ID128_MAKE_STR(33,54,93,94,24,b4,45,6d,98,02,ca,83,33,ed,42,4a)
+#define SD_MESSAGE_SEAT_START                         SD_ID128_MAKE(fc,be,fc,5d,a2,3d,42,80,93,f9,7c,82,a9,29,0f,7b)
+#define SD_MESSAGE_SEAT_START_STR                     SD_ID128_MAKE_STR(fc,be,fc,5d,a2,3d,42,80,93,f9,7c,82,a9,29,0f,7b)
+#define SD_MESSAGE_SEAT_STOP                          SD_ID128_MAKE(e7,85,2b,fe,46,78,4e,d0,ac,cd,e0,4b,c8,64,c2,d5)
+#define SD_MESSAGE_SEAT_STOP_STR                      SD_ID128_MAKE_STR(e7,85,2b,fe,46,78,4e,d0,ac,cd,e0,4b,c8,64,c2,d5)
+#define SD_MESSAGE_MACHINE_START                      SD_ID128_MAKE(24,d8,d4,45,25,73,40,24,96,06,83,81,a6,31,2d,f2)
+#define SD_MESSAGE_MACHINE_START_STR                  SD_ID128_MAKE_STR(24,d8,d4,45,25,73,40,24,96,06,83,81,a6,31,2d,f2)
+#define SD_MESSAGE_MACHINE_STOP                       SD_ID128_MAKE(58,43,2b,d3,ba,ce,47,7c,b5,14,b5,63,81,b8,a7,58)
+#define SD_MESSAGE_MACHINE_STOP_STR                   SD_ID128_MAKE_STR(58,43,2b,d3,ba,ce,47,7c,b5,14,b5,63,81,b8,a7,58)
 
-#define SD_MESSAGE_TIME_CHANGE            SD_ID128_MAKE(c7,a7,87,07,9b,35,4e,aa,a9,e7,7b,37,18,93,cd,27)
-#define SD_MESSAGE_TIME_CHANGE_STR        SD_ID128_MAKE_STR(c7,a7,87,07,9b,35,4e,aa,a9,e7,7b,37,18,93,cd,27)
-#define SD_MESSAGE_TIMEZONE_CHANGE        SD_ID128_MAKE(45,f8,2f,4a,ef,7a,4b,bf,94,2c,e8,61,d1,f2,09,90)
-#define SD_MESSAGE_TIMEZONE_CHANGE_STR    SD_ID128_MAKE_STR(45,f8,2f,4a,ef,7a,4b,bf,94,2c,e8,61,d1,f2,09,90)
+#define SD_MESSAGE_TIME_CHANGE                        SD_ID128_MAKE(c7,a7,87,07,9b,35,4e,aa,a9,e7,7b,37,18,93,cd,27)
+#define SD_MESSAGE_TIME_CHANGE_STR                    SD_ID128_MAKE_STR(c7,a7,87,07,9b,35,4e,aa,a9,e7,7b,37,18,93,cd,27)
+#define SD_MESSAGE_TIMEZONE_CHANGE                    SD_ID128_MAKE(45,f8,2f,4a,ef,7a,4b,bf,94,2c,e8,61,d1,f2,09,90)
+#define SD_MESSAGE_TIMEZONE_CHANGE_STR                SD_ID128_MAKE_STR(45,f8,2f,4a,ef,7a,4b,bf,94,2c,e8,61,d1,f2,09,90)
 
-#define SD_MESSAGE_TAINTED                SD_ID128_MAKE(50,87,6a,9d,b0,0f,4c,40,bd,e1,a2,ad,38,1c,3a,1b)
-#define SD_MESSAGE_TAINTED_STR            SD_ID128_MAKE_STR(50,87,6a,9d,b0,0f,4c,40,bd,e1,a2,ad,38,1c,3a,1b)
-#define SD_MESSAGE_STARTUP_FINISHED       SD_ID128_MAKE(b0,7a,24,9c,d0,24,41,4a,82,dd,00,cd,18,13,78,ff)
-#define SD_MESSAGE_STARTUP_FINISHED_STR   SD_ID128_MAKE_STR(b0,7a,24,9c,d0,24,41,4a,82,dd,00,cd,18,13,78,ff)
-#define SD_MESSAGE_USER_STARTUP_FINISHED \
-                                          SD_ID128_MAKE(ee,d0,0a,68,ff,d8,4e,31,88,21,05,fd,97,3a,bd,d1)
-#define SD_MESSAGE_USER_STARTUP_FINISHED_STR \
-                                          SD_ID128_MAKE_STR(ee,d0,0a,68,ff,d8,4e,31,88,21,05,fd,97,3a,bd,d1)
+#define SD_MESSAGE_TAINTED                            SD_ID128_MAKE(50,87,6a,9d,b0,0f,4c,40,bd,e1,a2,ad,38,1c,3a,1b)
+#define SD_MESSAGE_TAINTED_STR                        SD_ID128_MAKE_STR(50,87,6a,9d,b0,0f,4c,40,bd,e1,a2,ad,38,1c,3a,1b)
+#define SD_MESSAGE_STARTUP_FINISHED                   SD_ID128_MAKE(b0,7a,24,9c,d0,24,41,4a,82,dd,00,cd,18,13,78,ff)
+#define SD_MESSAGE_STARTUP_FINISHED_STR               SD_ID128_MAKE_STR(b0,7a,24,9c,d0,24,41,4a,82,dd,00,cd,18,13,78,ff)
+#define SD_MESSAGE_USER_STARTUP_FINISHED              SD_ID128_MAKE(ee,d0,0a,68,ff,d8,4e,31,88,21,05,fd,97,3a,bd,d1)
+#define SD_MESSAGE_USER_STARTUP_FINISHED_STR          SD_ID128_MAKE_STR(ee,d0,0a,68,ff,d8,4e,31,88,21,05,fd,97,3a,bd,d1)
 
-#define SD_MESSAGE_SLEEP_START            SD_ID128_MAKE(6b,bd,95,ee,97,79,41,e4,97,c4,8b,e2,7c,25,41,28)
-#define SD_MESSAGE_SLEEP_START_STR        SD_ID128_MAKE_STR(6b,bd,95,ee,97,79,41,e4,97,c4,8b,e2,7c,25,41,28)
-#define SD_MESSAGE_SLEEP_STOP             SD_ID128_MAKE(88,11,e6,df,2a,8e,40,f5,8a,94,ce,a2,6f,8e,bf,14)
-#define SD_MESSAGE_SLEEP_STOP_STR         SD_ID128_MAKE_STR(88,11,e6,df,2a,8e,40,f5,8a,94,ce,a2,6f,8e,bf,14)
+#define SD_MESSAGE_SLEEP_START                        SD_ID128_MAKE(6b,bd,95,ee,97,79,41,e4,97,c4,8b,e2,7c,25,41,28)
+#define SD_MESSAGE_SLEEP_START_STR                    SD_ID128_MAKE_STR(6b,bd,95,ee,97,79,41,e4,97,c4,8b,e2,7c,25,41,28)
+#define SD_MESSAGE_SLEEP_STOP                         SD_ID128_MAKE(88,11,e6,df,2a,8e,40,f5,8a,94,ce,a2,6f,8e,bf,14)
+#define SD_MESSAGE_SLEEP_STOP_STR                     SD_ID128_MAKE_STR(88,11,e6,df,2a,8e,40,f5,8a,94,ce,a2,6f,8e,bf,14)
 
-#define SD_MESSAGE_SHUTDOWN               SD_ID128_MAKE(98,26,88,66,d1,d5,4a,49,9c,4e,98,92,1d,93,bc,40)
-#define SD_MESSAGE_SHUTDOWN_STR           SD_ID128_MAKE_STR(98,26,88,66,d1,d5,4a,49,9c,4e,98,92,1d,93,bc,40)
+#define SD_MESSAGE_SHUTDOWN                           SD_ID128_MAKE(98,26,88,66,d1,d5,4a,49,9c,4e,98,92,1d,93,bc,40)
+#define SD_MESSAGE_SHUTDOWN_STR                       SD_ID128_MAKE_STR(98,26,88,66,d1,d5,4a,49,9c,4e,98,92,1d,93,bc,40)
 
-/* The messages below are actually about jobs, not really about units, the macros are misleadingly named. Moreover
- * SD_MESSAGE_UNIT_FAILED is not actually about a failing unit but about a failed start job. A job either finishes with
- * SD_MESSAGE_UNIT_STARTED or with SD_MESSAGE_UNIT_FAILED hence. */
-#define SD_MESSAGE_UNIT_STARTING          SD_ID128_MAKE(7d,49,58,e8,42,da,4a,75,8f,6c,1c,dc,7b,36,dc,c5)
-#define SD_MESSAGE_UNIT_STARTING_STR      SD_ID128_MAKE_STR(7d,49,58,e8,42,da,4a,75,8f,6c,1c,dc,7b,36,dc,c5)
-#define SD_MESSAGE_UNIT_STARTED           SD_ID128_MAKE(39,f5,34,79,d3,a0,45,ac,8e,11,78,62,48,23,1f,bf)
-#define SD_MESSAGE_UNIT_STARTED_STR       SD_ID128_MAKE_STR(39,f5,34,79,d3,a0,45,ac,8e,11,78,62,48,23,1f,bf)
-#define SD_MESSAGE_UNIT_FAILED            SD_ID128_MAKE(be,02,cf,68,55,d2,42,8b,a4,0d,f7,e9,d0,22,f0,3d)
-#define SD_MESSAGE_UNIT_FAILED_STR        SD_ID128_MAKE_STR(be,02,cf,68,55,d2,42,8b,a4,0d,f7,e9,d0,22,f0,3d)
-#define SD_MESSAGE_UNIT_STOPPING          SD_ID128_MAKE(de,5b,42,6a,63,be,47,a7,b6,ac,3e,aa,c8,2e,2f,6f)
-#define SD_MESSAGE_UNIT_STOPPING_STR      SD_ID128_MAKE_STR(de,5b,42,6a,63,be,47,a7,b6,ac,3e,aa,c8,2e,2f,6f)
-#define SD_MESSAGE_UNIT_STOPPED           SD_ID128_MAKE(9d,1a,aa,27,d6,01,40,bd,96,36,54,38,aa,d2,02,86)
-#define SD_MESSAGE_UNIT_STOPPED_STR       SD_ID128_MAKE_STR(9d,1a,aa,27,d6,01,40,bd,96,36,54,38,aa,d2,02,86)
-#define SD_MESSAGE_UNIT_RELOADING         SD_ID128_MAKE(d3,4d,03,7f,ff,18,47,e6,ae,66,9a,37,0e,69,47,25)
-#define SD_MESSAGE_UNIT_RELOADING_STR     SD_ID128_MAKE_STR(d3,4d,03,7f,ff,18,47,e6,ae,66,9a,37,0e,69,47,25)
-#define SD_MESSAGE_UNIT_RELOADED          SD_ID128_MAKE(7b,05,eb,c6,68,38,42,22,ba,a8,88,11,79,cf,da,54)
-#define SD_MESSAGE_UNIT_RELOADED_STR      SD_ID128_MAKE_STR(7b,05,eb,c6,68,38,42,22,ba,a8,88,11,79,cf,da,54)
+#define SD_MESSAGE_FACTORY_RESET                      SD_ID128_MAKE(c1,4a,af,76,ec,28,4a,5f,a1,f1,05,f8,8d,fb,06,1c)
+#define SD_MESSAGE_FACTORY_RESET_STR                  SD_ID128_MAKE_STR(c1,4a,af,76,ec,28,4a,5f,a1,f1,05,f8,8d,fb,06,1c)
 
-#define SD_MESSAGE_UNIT_RESTART_SCHEDULED SD_ID128_MAKE(5e,b0,34,94,b6,58,48,70,a5,36,b3,37,29,08,09,b3)
-#define SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR                   \
-                                          SD_ID128_MAKE_STR(5e,b0,34,94,b6,58,48,70,a5,36,b3,37,29,08,09,b3)
+/* The messages below are actually about jobs, not really about units, the macros are misleadingly named.
+ * Moreover SD_MESSAGE_UNIT_FAILED is not actually about a failing unit but about a failed start job. A job
+ * either finishes with SD_MESSAGE_UNIT_STARTED or with SD_MESSAGE_UNIT_FAILED hence. */
+#define SD_MESSAGE_UNIT_STARTING                      SD_ID128_MAKE(7d,49,58,e8,42,da,4a,75,8f,6c,1c,dc,7b,36,dc,c5)
+#define SD_MESSAGE_UNIT_STARTING_STR                  SD_ID128_MAKE_STR(7d,49,58,e8,42,da,4a,75,8f,6c,1c,dc,7b,36,dc,c5)
+#define SD_MESSAGE_UNIT_STARTED                       SD_ID128_MAKE(39,f5,34,79,d3,a0,45,ac,8e,11,78,62,48,23,1f,bf)
+#define SD_MESSAGE_UNIT_STARTED_STR                   SD_ID128_MAKE_STR(39,f5,34,79,d3,a0,45,ac,8e,11,78,62,48,23,1f,bf)
+#define SD_MESSAGE_UNIT_FAILED                        SD_ID128_MAKE(be,02,cf,68,55,d2,42,8b,a4,0d,f7,e9,d0,22,f0,3d)
+#define SD_MESSAGE_UNIT_FAILED_STR                    SD_ID128_MAKE_STR(be,02,cf,68,55,d2,42,8b,a4,0d,f7,e9,d0,22,f0,3d)
+#define SD_MESSAGE_UNIT_STOPPING                      SD_ID128_MAKE(de,5b,42,6a,63,be,47,a7,b6,ac,3e,aa,c8,2e,2f,6f)
+#define SD_MESSAGE_UNIT_STOPPING_STR                  SD_ID128_MAKE_STR(de,5b,42,6a,63,be,47,a7,b6,ac,3e,aa,c8,2e,2f,6f)
+#define SD_MESSAGE_UNIT_STOPPED                       SD_ID128_MAKE(9d,1a,aa,27,d6,01,40,bd,96,36,54,38,aa,d2,02,86)
+#define SD_MESSAGE_UNIT_STOPPED_STR                   SD_ID128_MAKE_STR(9d,1a,aa,27,d6,01,40,bd,96,36,54,38,aa,d2,02,86)
+#define SD_MESSAGE_UNIT_RELOADING                     SD_ID128_MAKE(d3,4d,03,7f,ff,18,47,e6,ae,66,9a,37,0e,69,47,25)
+#define SD_MESSAGE_UNIT_RELOADING_STR                 SD_ID128_MAKE_STR(d3,4d,03,7f,ff,18,47,e6,ae,66,9a,37,0e,69,47,25)
+#define SD_MESSAGE_UNIT_RELOADED                      SD_ID128_MAKE(7b,05,eb,c6,68,38,42,22,ba,a8,88,11,79,cf,da,54)
+#define SD_MESSAGE_UNIT_RELOADED_STR                  SD_ID128_MAKE_STR(7b,05,eb,c6,68,38,42,22,ba,a8,88,11,79,cf,da,54)
 
-#define SD_MESSAGE_UNIT_RESOURCES         SD_ID128_MAKE(ae,8f,7b,86,6b,03,47,b9,af,31,fe,1c,80,b1,27,c0)
-#define SD_MESSAGE_UNIT_RESOURCES_STR     SD_ID128_MAKE_STR(ae,8f,7b,86,6b,03,47,b9,af,31,fe,1c,80,b1,27,c0)
+#define SD_MESSAGE_UNIT_RESTART_SCHEDULED             SD_ID128_MAKE(5e,b0,34,94,b6,58,48,70,a5,36,b3,37,29,08,09,b3)
+#define SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR         SD_ID128_MAKE_STR(5e,b0,34,94,b6,58,48,70,a5,36,b3,37,29,08,09,b3)
 
-#define SD_MESSAGE_UNIT_SUCCESS           SD_ID128_MAKE(7a,d2,d1,89,f7,e9,4e,70,a3,8c,78,13,54,91,24,48)
-#define SD_MESSAGE_UNIT_SUCCESS_STR       SD_ID128_MAKE_STR(7a,d2,d1,89,f7,e9,4e,70,a3,8c,78,13,54,91,24,48)
-#define SD_MESSAGE_UNIT_SKIPPED           SD_ID128_MAKE(0e,42,84,a0,ca,ca,4b,fc,81,c0,bb,67,86,97,26,73)
-#define SD_MESSAGE_UNIT_SKIPPED_STR       SD_ID128_MAKE_STR(0e,42,84,a0,ca,ca,4b,fc,81,c0,bb,67,86,97,26,73)
-#define SD_MESSAGE_UNIT_FAILURE_RESULT    SD_ID128_MAKE(d9,b3,73,ed,55,a6,4f,eb,82,42,e0,2d,be,79,a4,9c)
-#define SD_MESSAGE_UNIT_FAILURE_RESULT_STR \
-                                          SD_ID128_MAKE_STR(d9,b3,73,ed,55,a6,4f,eb,82,42,e0,2d,be,79,a4,9c)
+#define SD_MESSAGE_UNIT_RESOURCES                     SD_ID128_MAKE(ae,8f,7b,86,6b,03,47,b9,af,31,fe,1c,80,b1,27,c0)
+#define SD_MESSAGE_UNIT_RESOURCES_STR                 SD_ID128_MAKE_STR(ae,8f,7b,86,6b,03,47,b9,af,31,fe,1c,80,b1,27,c0)
 
-#define SD_MESSAGE_SPAWN_FAILED           SD_ID128_MAKE(64,12,57,65,1c,1b,4e,c9,a8,62,4d,7a,40,a9,e1,e7)
-#define SD_MESSAGE_SPAWN_FAILED_STR       SD_ID128_MAKE_STR(64,12,57,65,1c,1b,4e,c9,a8,62,4d,7a,40,a9,e1,e7)
+#define SD_MESSAGE_UNIT_SUCCESS                       SD_ID128_MAKE(7a,d2,d1,89,f7,e9,4e,70,a3,8c,78,13,54,91,24,48)
+#define SD_MESSAGE_UNIT_SUCCESS_STR                   SD_ID128_MAKE_STR(7a,d2,d1,89,f7,e9,4e,70,a3,8c,78,13,54,91,24,48)
+#define SD_MESSAGE_UNIT_SKIPPED                       SD_ID128_MAKE(0e,42,84,a0,ca,ca,4b,fc,81,c0,bb,67,86,97,26,73)
+#define SD_MESSAGE_UNIT_SKIPPED_STR                   SD_ID128_MAKE_STR(0e,42,84,a0,ca,ca,4b,fc,81,c0,bb,67,86,97,26,73)
+#define SD_MESSAGE_UNIT_FAILURE_RESULT                SD_ID128_MAKE(d9,b3,73,ed,55,a6,4f,eb,82,42,e0,2d,be,79,a4,9c)
+#define SD_MESSAGE_UNIT_FAILURE_RESULT_STR            SD_ID128_MAKE_STR(d9,b3,73,ed,55,a6,4f,eb,82,42,e0,2d,be,79,a4,9c)
 
-#define SD_MESSAGE_UNIT_PROCESS_EXIT      SD_ID128_MAKE(98,e3,22,20,3f,7a,4e,d2,90,d0,9f,e0,3c,09,fe,15)
-#define SD_MESSAGE_UNIT_PROCESS_EXIT_STR  SD_ID128_MAKE_STR(98,e3,22,20,3f,7a,4e,d2,90,d0,9f,e0,3c,09,fe,15)
+#define SD_MESSAGE_SPAWN_FAILED                       SD_ID128_MAKE(64,12,57,65,1c,1b,4e,c9,a8,62,4d,7a,40,a9,e1,e7)
+#define SD_MESSAGE_SPAWN_FAILED_STR                   SD_ID128_MAKE_STR(64,12,57,65,1c,1b,4e,c9,a8,62,4d,7a,40,a9,e1,e7)
 
-#define SD_MESSAGE_FORWARD_SYSLOG_MISSED  SD_ID128_MAKE(00,27,22,9c,a0,64,41,81,a7,6c,4e,92,45,8a,fa,2e)
-#define SD_MESSAGE_FORWARD_SYSLOG_MISSED_STR \
-                                          SD_ID128_MAKE_STR(00,27,22,9c,a0,64,41,81,a7,6c,4e,92,45,8a,fa,2e)
+#define SD_MESSAGE_UNIT_PROCESS_EXIT                  SD_ID128_MAKE(98,e3,22,20,3f,7a,4e,d2,90,d0,9f,e0,3c,09,fe,15)
+#define SD_MESSAGE_UNIT_PROCESS_EXIT_STR              SD_ID128_MAKE_STR(98,e3,22,20,3f,7a,4e,d2,90,d0,9f,e0,3c,09,fe,15)
 
-#define SD_MESSAGE_OVERMOUNTING           SD_ID128_MAKE(1d,ee,03,69,c7,fc,47,36,b7,09,9b,38,ec,b4,6e,e7)
-#define SD_MESSAGE_OVERMOUNTING_STR       SD_ID128_MAKE_STR(1d,ee,03,69,c7,fc,47,36,b7,09,9b,38,ec,b4,6e,e7)
+#define SD_MESSAGE_FORWARD_SYSLOG_MISSED              SD_ID128_MAKE(00,27,22,9c,a0,64,41,81,a7,6c,4e,92,45,8a,fa,2e)
+#define SD_MESSAGE_FORWARD_SYSLOG_MISSED_STR          SD_ID128_MAKE_STR(00,27,22,9c,a0,64,41,81,a7,6c,4e,92,45,8a,fa,2e)
 
-#define SD_MESSAGE_UNIT_OOMD_KILL         SD_ID128_MAKE(d9,89,61,1b,15,e4,4c,9d,bf,31,e3,c8,12,56,e4,ed)
-#define SD_MESSAGE_UNIT_OOMD_KILL_STR     SD_ID128_MAKE_STR(d9,89,61,1b,15,e4,4c,9d,bf,31,e3,c8,12,56,e4,ed)
+#define SD_MESSAGE_OVERMOUNTING                       SD_ID128_MAKE(1d,ee,03,69,c7,fc,47,36,b7,09,9b,38,ec,b4,6e,e7)
+#define SD_MESSAGE_OVERMOUNTING_STR                   SD_ID128_MAKE_STR(1d,ee,03,69,c7,fc,47,36,b7,09,9b,38,ec,b4,6e,e7)
 
-#define SD_MESSAGE_UNIT_OUT_OF_MEMORY     SD_ID128_MAKE(fe,6f,aa,94,e7,77,46,63,a0,da,52,71,78,91,d8,ef)
-#define SD_MESSAGE_UNIT_OUT_OF_MEMORY_STR SD_ID128_MAKE_STR(fe,6f,aa,94,e7,77,46,63,a0,da,52,71,78,91,d8,ef)
+#define SD_MESSAGE_UNIT_OOMD_KILL                     SD_ID128_MAKE(d9,89,61,1b,15,e4,4c,9d,bf,31,e3,c8,12,56,e4,ed)
+#define SD_MESSAGE_UNIT_OOMD_KILL_STR                 SD_ID128_MAKE_STR(d9,89,61,1b,15,e4,4c,9d,bf,31,e3,c8,12,56,e4,ed)
 
-#define SD_MESSAGE_LID_OPENED             SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,6f)
-#define SD_MESSAGE_LID_OPENED_STR         SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,6f)
-#define SD_MESSAGE_LID_CLOSED             SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,70)
-#define SD_MESSAGE_LID_CLOSED_STR         SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,70)
-#define SD_MESSAGE_SYSTEM_DOCKED          SD_ID128_MAKE(f5,f4,16,b8,62,07,4b,28,92,7a,48,c3,ba,7d,51,ff)
-#define SD_MESSAGE_SYSTEM_DOCKED_STR      SD_ID128_MAKE_STR(f5,f4,16,b8,62,07,4b,28,92,7a,48,c3,ba,7d,51,ff)
-#define SD_MESSAGE_SYSTEM_UNDOCKED        SD_ID128_MAKE(51,e1,71,bd,58,52,48,56,81,10,14,4c,51,7c,ca,53)
-#define SD_MESSAGE_SYSTEM_UNDOCKED_STR    SD_ID128_MAKE_STR(51,e1,71,bd,58,52,48,56,81,10,14,4c,51,7c,ca,53)
-#define SD_MESSAGE_POWER_KEY              SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,71)
-#define SD_MESSAGE_POWER_KEY_STR          SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,71)
-#define SD_MESSAGE_REBOOT_KEY             SD_ID128_MAKE(9f,a9,d2,c0,12,13,4e,c3,85,45,1f,fe,31,6f,97,d0)
-#define SD_MESSAGE_REBOOT_KEY_STR         SD_ID128_MAKE_STR(9f,a9,d2,c0,12,13,4e,c3,85,45,1f,fe,31,6f,97,d0)
-#define SD_MESSAGE_SUSPEND_KEY            SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,72)
-#define SD_MESSAGE_SUSPEND_KEY_STR        SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,72)
-#define SD_MESSAGE_HIBERNATE_KEY          SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,73)
-#define SD_MESSAGE_HIBERNATE_KEY_STR      SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,73)
+#define SD_MESSAGE_UNIT_OUT_OF_MEMORY                 SD_ID128_MAKE(fe,6f,aa,94,e7,77,46,63,a0,da,52,71,78,91,d8,ef)
+#define SD_MESSAGE_UNIT_OUT_OF_MEMORY_STR             SD_ID128_MAKE_STR(fe,6f,aa,94,e7,77,46,63,a0,da,52,71,78,91,d8,ef)
 
-#define SD_MESSAGE_INVALID_CONFIGURATION  SD_ID128_MAKE(c7,72,d2,4e,9a,88,4c,be,b9,ea,12,62,5c,30,6c,01)
-#define SD_MESSAGE_INVALID_CONFIGURATION_STR \
-                                          SD_ID128_MAKE_STR(c7,72,d2,4e,9a,88,4c,be,b9,ea,12,62,5c,30,6c,01)
+#define SD_MESSAGE_LID_OPENED                         SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,6f)
+#define SD_MESSAGE_LID_OPENED_STR                     SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,6f)
+#define SD_MESSAGE_LID_CLOSED                         SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,70)
+#define SD_MESSAGE_LID_CLOSED_STR                     SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,70)
+#define SD_MESSAGE_SYSTEM_DOCKED                      SD_ID128_MAKE(f5,f4,16,b8,62,07,4b,28,92,7a,48,c3,ba,7d,51,ff)
+#define SD_MESSAGE_SYSTEM_DOCKED_STR                  SD_ID128_MAKE_STR(f5,f4,16,b8,62,07,4b,28,92,7a,48,c3,ba,7d,51,ff)
+#define SD_MESSAGE_SYSTEM_UNDOCKED                    SD_ID128_MAKE(51,e1,71,bd,58,52,48,56,81,10,14,4c,51,7c,ca,53)
+#define SD_MESSAGE_SYSTEM_UNDOCKED_STR                SD_ID128_MAKE_STR(51,e1,71,bd,58,52,48,56,81,10,14,4c,51,7c,ca,53)
+#define SD_MESSAGE_POWER_KEY                          SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,71)
+#define SD_MESSAGE_POWER_KEY_STR                      SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,71)
+#define SD_MESSAGE_POWER_KEY_LONG_PRESS               SD_ID128_MAKE(3e,01,17,10,1e,b2,43,c1,b9,a5,0d,b3,49,4a,b1,0b)
+#define SD_MESSAGE_POWER_KEY_LONG_PRESS_STR           SD_ID128_MAKE_STR(3e,01,17,10,1e,b2,43,c1,b9,a5,0d,b3,49,4a,b1,0b)
+#define SD_MESSAGE_REBOOT_KEY                         SD_ID128_MAKE(9f,a9,d2,c0,12,13,4e,c3,85,45,1f,fe,31,6f,97,d0)
+#define SD_MESSAGE_REBOOT_KEY_STR                     SD_ID128_MAKE_STR(9f,a9,d2,c0,12,13,4e,c3,85,45,1f,fe,31,6f,97,d0)
+#define SD_MESSAGE_REBOOT_KEY_LONG_PRESS              SD_ID128_MAKE(f1,c5,9a,58,c9,d9,43,66,89,65,c3,37,ca,ec,59,75)
+#define SD_MESSAGE_REBOOT_KEY_LONG_PRESS_STR          SD_ID128_MAKE_STR(f1,c5,9a,58,c9,d9,43,66,89,65,c3,37,ca,ec,59,75)
+#define SD_MESSAGE_SUSPEND_KEY                        SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,72)
+#define SD_MESSAGE_SUSPEND_KEY_STR                    SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,72)
+#define SD_MESSAGE_SUSPEND_KEY_LONG_PRESS             SD_ID128_MAKE(bf,da,f6,d3,12,ab,40,07,bc,1f,e4,0a,15,df,78,e8)
+#define SD_MESSAGE_SUSPEND_KEY_LONG_PRESS_STR         SD_ID128_MAKE_STR(bf,da,f6,d3,12,ab,40,07,bc,1f,e4,0a,15,df,78,e8)
+#define SD_MESSAGE_HIBERNATE_KEY                      SD_ID128_MAKE(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,73)
+#define SD_MESSAGE_HIBERNATE_KEY_STR                  SD_ID128_MAKE_STR(b7,2e,a4,a2,88,15,45,a0,b5,0e,20,0e,55,b9,b0,73)
+#define SD_MESSAGE_HIBERNATE_KEY_LONG_PRESS           SD_ID128_MAKE(16,78,36,df,6f,7f,42,8e,98,14,72,27,b2,dc,89,45)
+#define SD_MESSAGE_HIBERNATE_KEY_LONG_PRESS_STR       SD_ID128_MAKE_STR(16,78,36,df,6f,7f,42,8e,98,14,72,27,b2,dc,89,45)
 
-#define SD_MESSAGE_DNSSEC_FAILURE         SD_ID128_MAKE(16,75,d7,f1,72,17,40,98,b1,10,8b,f8,c7,dc,8f,5d)
-#define SD_MESSAGE_DNSSEC_FAILURE_STR     SD_ID128_MAKE_STR(16,75,d7,f1,72,17,40,98,b1,10,8b,f8,c7,dc,8f,5d)
-#define SD_MESSAGE_DNSSEC_TRUST_ANCHOR_REVOKED \
-                                          SD_ID128_MAKE(4d,44,08,cf,d0,d1,44,85,91,84,d1,e6,5d,7c,8a,65)
-#define SD_MESSAGE_DNSSEC_TRUST_ANCHOR_REVOKED_STR \
-                                          SD_ID128_MAKE_STR(4d,44,08,cf,d0,d1,44,85,91,84,d1,e6,5d,7c,8a,65)
-#define SD_MESSAGE_DNSSEC_DOWNGRADE       SD_ID128_MAKE(36,db,2d,fa,5a,90,45,e1,bd,4a,f5,f9,3e,1c,f0,57)
-#define SD_MESSAGE_DNSSEC_DOWNGRADE_STR   SD_ID128_MAKE_STR(36,db,2d,fa,5a,90,45,e1,bd,4a,f5,f9,3e,1c,f0,57)
+#define SD_MESSAGE_INVALID_CONFIGURATION              SD_ID128_MAKE(c7,72,d2,4e,9a,88,4c,be,b9,ea,12,62,5c,30,6c,01)
+#define SD_MESSAGE_INVALID_CONFIGURATION_STR          SD_ID128_MAKE_STR(c7,72,d2,4e,9a,88,4c,be,b9,ea,12,62,5c,30,6c,01)
 
-#define SD_MESSAGE_UNSAFE_USER_NAME       SD_ID128_MAKE(b6,1f,da,c6,12,e9,4b,91,82,28,5b,99,88,43,06,1f)
-#define SD_MESSAGE_UNSAFE_USER_NAME_STR   SD_ID128_MAKE_STR(b6,1f,da,c6,12,e9,4b,91,82,28,5b,99,88,43,06,1f)
+#define SD_MESSAGE_DNSSEC_FAILURE                     SD_ID128_MAKE(16,75,d7,f1,72,17,40,98,b1,10,8b,f8,c7,dc,8f,5d)
+#define SD_MESSAGE_DNSSEC_FAILURE_STR                 SD_ID128_MAKE_STR(16,75,d7,f1,72,17,40,98,b1,10,8b,f8,c7,dc,8f,5d)
+#define SD_MESSAGE_DNSSEC_TRUST_ANCHOR_REVOKED        SD_ID128_MAKE(4d,44,08,cf,d0,d1,44,85,91,84,d1,e6,5d,7c,8a,65)
+#define SD_MESSAGE_DNSSEC_TRUST_ANCHOR_REVOKED_STR    SD_ID128_MAKE_STR(4d,44,08,cf,d0,d1,44,85,91,84,d1,e6,5d,7c,8a,65)
+#define SD_MESSAGE_DNSSEC_DOWNGRADE                   SD_ID128_MAKE(36,db,2d,fa,5a,90,45,e1,bd,4a,f5,f9,3e,1c,f0,57)
+#define SD_MESSAGE_DNSSEC_DOWNGRADE_STR               SD_ID128_MAKE_STR(36,db,2d,fa,5a,90,45,e1,bd,4a,f5,f9,3e,1c,f0,57)
 
-#define SD_MESSAGE_MOUNT_POINT_PATH_NOT_SUITABLE \
-                                          SD_ID128_MAKE(1b,3b,b9,40,37,f0,4b,bf,81,02,8e,13,5a,12,d2,93)
-#define SD_MESSAGE_MOUNT_POINT_PATH_NOT_SUITABLE_STR \
-                                          SD_ID128_MAKE_STR(1b,3b,b9,40,37,f0,4b,bf,81,02,8e,13,5a,12,d2,93)
-#define SD_MESSAGE_DEVICE_PATH_NOT_SUITABLE \
-                                          SD_ID128_MAKE(01,01,90,13,8f,49,4e,29,a0,ef,66,69,74,95,31,aa)
-#define SD_MESSAGE_DEVICE_PATH_NOT_SUITABLE_STR \
-                                          SD_ID128_MAKE_STR(01,01,90,13,8f,49,4e,29,a0,ef,66,69,74,95,31,aa)
+#define SD_MESSAGE_UNSAFE_USER_NAME                   SD_ID128_MAKE(b6,1f,da,c6,12,e9,4b,91,82,28,5b,99,88,43,06,1f)
+#define SD_MESSAGE_UNSAFE_USER_NAME_STR               SD_ID128_MAKE_STR(b6,1f,da,c6,12,e9,4b,91,82,28,5b,99,88,43,06,1f)
 
-#define SD_MESSAGE_NOBODY_USER_UNSUITABLE SD_ID128_MAKE(b4,80,32,5f,9c,39,4a,7b,80,2c,23,1e,51,a2,75,2c)
-#define SD_MESSAGE_NOBODY_USER_UNSUITABLE_STR \
-                                          SD_ID128_MAKE_STR(b4,80,32,5f,9c,39,4a,7b,80,2c,23,1e,51,a2,75,2c)
+#define SD_MESSAGE_MOUNT_POINT_PATH_NOT_SUITABLE      SD_ID128_MAKE(1b,3b,b9,40,37,f0,4b,bf,81,02,8e,13,5a,12,d2,93)
+#define SD_MESSAGE_MOUNT_POINT_PATH_NOT_SUITABLE_STR  SD_ID128_MAKE_STR(1b,3b,b9,40,37,f0,4b,bf,81,02,8e,13,5a,12,d2,93)
+#define SD_MESSAGE_DEVICE_PATH_NOT_SUITABLE           SD_ID128_MAKE(01,01,90,13,8f,49,4e,29,a0,ef,66,69,74,95,31,aa)
+#define SD_MESSAGE_DEVICE_PATH_NOT_SUITABLE_STR       SD_ID128_MAKE_STR(01,01,90,13,8f,49,4e,29,a0,ef,66,69,74,95,31,aa)
 
-#define SD_MESSAGE_SYSTEMD_UDEV_SETTLE_DEPRECATED \
-                                          SD_ID128_MAKE(1c,04,54,c1,bd,22,41,e0,ac,6f,ef,b4,bc,63,14,33)
-#define SD_MESSAGE_SYSTEMD_UDEV_SETTLE_DEPRECATED_STR \
-                                          SD_ID128_MAKE_STR(1c,04,54,c1,bd,22,41,e0,ac,6f,ef,b4,bc,63,14,33)
+#define SD_MESSAGE_NOBODY_USER_UNSUITABLE             SD_ID128_MAKE(b4,80,32,5f,9c,39,4a,7b,80,2c,23,1e,51,a2,75,2c)
+#define SD_MESSAGE_NOBODY_USER_UNSUITABLE_STR         SD_ID128_MAKE_STR(b4,80,32,5f,9c,39,4a,7b,80,2c,23,1e,51,a2,75,2c)
+
+#define SD_MESSAGE_SYSTEMD_UDEV_SETTLE_DEPRECATED     SD_ID128_MAKE(1c,04,54,c1,bd,22,41,e0,ac,6f,ef,b4,bc,63,14,33)
+#define SD_MESSAGE_SYSTEMD_UDEV_SETTLE_DEPRECATED_STR SD_ID128_MAKE_STR(1c,04,54,c1,bd,22,41,e0,ac,6f,ef,b4,bc,63,14,33)
+
+#define SD_MESSAGE_TIME_SYNC                          SD_ID128_MAKE(7c,8a,41,f3,7b,76,49,41,a0,e1,78,0b,1b,e2,f0,37)
+#define SD_MESSAGE_TIME_SYNC_STR                      SD_ID128_MAKE_STR(7c,8a,41,f3,7b,76,49,41,a0,e1,78,0b,1b,e2,f0,37)
+
+#define SD_MESSAGE_TIME_BUMP                          SD_ID128_MAKE(7d,b7,3c,8a,f0,d9,4e,eb,82,2a,e0,43,23,fe,6a,b6)
+#define SD_MESSAGE_TIME_BUMP_STR                      SD_ID128_MAKE_STR(7d,b7,3c,8a,f0,d9,4e,eb,82,2a,e0,43,23,fe,6a,b6)
+
+#define SD_MESSAGE_SHUTDOWN_SCHEDULED                 SD_ID128_MAKE(9e,70,66,27,9d,c8,40,3d,a7,9c,e4,b1,a6,90,64,b2)
+#define SD_MESSAGE_SHUTDOWN_SCHEDULED_STR             SD_ID128_MAKE_STR(9e,70,66,27,9d,c8,40,3d,a7,9c,e4,b1,a6,90,64,b2)
+
+#define SD_MESSAGE_SHUTDOWN_CANCELED                  SD_ID128_MAKE(24,9f,6f,b9,e6,e2,42,8c,96,f3,f0,87,56,81,ff,a3)
+#define SD_MESSAGE_SHUTDOWN_CANCELED_STR              SD_ID128_MAKE_STR(24,9f,6f,b9,e6,e2,42,8c,96,f3,f0,87,56,81,ff,a3)
+
+#define SD_MESSAGE_TPM_PCR_EXTEND                     SD_ID128_MAKE(3f,7d,5e,f3,e5,4f,43,02,b4,f0,b1,43,bb,27,0c,ab)
+#define SD_MESSAGE_TPM_PCR_EXTEND_STR                 SD_ID128_MAKE_STR(3f,7d,5e,f3,e5,4f,43,02,b4,f0,b1,43,bb,27,0c,ab)
 
 _SD_END_DECLARATIONS;
 
diff --git a/src/systemd/sd-ndisc.h b/src/systemd/sd-ndisc.h
index 6088def..ee309a4 100644
--- a/src/systemd/sd-ndisc.h
+++ b/src/systemd/sd-ndisc.h
@@ -16,7 +16,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <errno.h>
@@ -42,25 +42,25 @@
         SD_NDISC_OPTION_RDNSS              = 25,
         SD_NDISC_OPTION_FLAGS_EXTENSION    = 26,
         SD_NDISC_OPTION_DNSSL              = 31,
-        SD_NDISC_OPTION_CAPTIVE_PORTAL     = 37,
+        SD_NDISC_OPTION_CAPTIVE_PORTAL     = 37
 };
 
 /* Route preference, RFC 4191, Section 2.1 */
 enum {
         SD_NDISC_PREFERENCE_LOW    = 3U,
         SD_NDISC_PREFERENCE_MEDIUM = 0U,
-        SD_NDISC_PREFERENCE_HIGH   = 1U,
+        SD_NDISC_PREFERENCE_HIGH   = 1U
 };
 
 typedef struct sd_ndisc sd_ndisc;
 typedef struct sd_ndisc_router sd_ndisc_router;
 
-typedef enum sd_ndisc_event_t {
+__extension__ typedef enum sd_ndisc_event_t {
         SD_NDISC_EVENT_TIMEOUT,
         SD_NDISC_EVENT_ROUTER,
         _SD_NDISC_EVENT_MAX,
         _SD_NDISC_EVENT_INVALID = -EINVAL,
-        _SD_ENUM_FORCE_S64(NDISC_EVENT),
+        _SD_ENUM_FORCE_S64(NDISC_EVENT)
 } sd_ndisc_event_t;
 
 typedef void (*sd_ndisc_callback_t)(sd_ndisc *nd, sd_ndisc_event_t event, sd_ndisc_router *rt, void *userdata);
@@ -79,13 +79,9 @@
 int sd_ndisc_set_callback(sd_ndisc *nd, sd_ndisc_callback_t cb, void *userdata);
 int sd_ndisc_set_ifindex(sd_ndisc *nd, int interface_index);
 int sd_ndisc_set_ifname(sd_ndisc *nd, const char *interface_name);
-const char *sd_ndisc_get_ifname(sd_ndisc *nd);
+int sd_ndisc_get_ifname(sd_ndisc *nd, const char **ret);
 int sd_ndisc_set_mac(sd_ndisc *nd, const struct ether_addr *mac_addr);
 
-int sd_ndisc_get_mtu(sd_ndisc *nd, uint32_t *ret);
-int sd_ndisc_get_hop_limit(sd_ndisc *nd, uint8_t *ret);
-
-int sd_ndisc_router_from_raw(sd_ndisc_router **ret, const void *raw, size_t raw_size);
 sd_ndisc_router *sd_ndisc_router_ref(sd_ndisc_router *rt);
 sd_ndisc_router *sd_ndisc_router_unref(sd_ndisc_router *rt);
 
diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h
index b7e1a90..7edfeb7 100644
--- a/src/systemd/sd-netlink.h
+++ b/src/systemd/sd-netlink.h
@@ -14,13 +14,14 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <errno.h>
 #include <inttypes.h>
 #include <net/ethernet.h>
 #include <netinet/in.h>
+#include <linux/filter.h>
 #include <linux/neighbour.h>
 #include <linux/rtnetlink.h>
 
@@ -31,41 +32,22 @@
 _SD_BEGIN_DECLARATIONS;
 
 typedef struct sd_netlink sd_netlink;
-typedef struct sd_genl_socket sd_genl_socket;
 typedef struct sd_netlink_message sd_netlink_message;
 typedef struct sd_netlink_slot sd_netlink_slot;
 
-typedef enum sd_genl_family_t {
-        SD_GENL_ERROR,
-        SD_GENL_DONE,
-        SD_GENL_ID_CTRL,
-        SD_GENL_WIREGUARD,
-        SD_GENL_FOU,
-        SD_GENL_L2TP,
-        SD_GENL_MACSEC,
-        SD_GENL_NL80211,
-        SD_GENL_BATADV,
-        _SD_GENL_FAMILY_MAX,
-        _SD_GENL_FAMILY_INVALID = -EINVAL,
-        _SD_ENUM_FORCE_S64(GENL_FAMILY)
-} sd_genl_family_t;
-
 /* callback */
-
 typedef int (*sd_netlink_message_handler_t)(sd_netlink *nl, sd_netlink_message *m, void *userdata);
 typedef _sd_destroy_t sd_netlink_destroy_t;
 
 /* bus */
-int sd_netlink_new_from_netlink(sd_netlink **nl, int fd);
-int sd_netlink_open(sd_netlink **nl);
-int sd_netlink_open_fd(sd_netlink **nl, int fd);
-int sd_netlink_inc_rcvbuf(sd_netlink *nl, const size_t size);
+int sd_netlink_open(sd_netlink **ret);
+int sd_netlink_open_fd(sd_netlink **ret, int fd);
+int sd_netlink_increase_rxbuf(sd_netlink *nl, const size_t size);
 
 sd_netlink *sd_netlink_ref(sd_netlink *nl);
 sd_netlink *sd_netlink_unref(sd_netlink *nl);
 
 int sd_netlink_send(sd_netlink *nl, sd_netlink_message *message, uint32_t *serial);
-int sd_netlink_sendv(sd_netlink *nl, sd_netlink_message **messages, size_t msgcnt, uint32_t **ret_serial);
 int sd_netlink_call_async(sd_netlink *nl, sd_netlink_slot **ret_slot, sd_netlink_message *message,
                           sd_netlink_message_handler_t callback, sd_netlink_destroy_t destoy_callback,
                           void *userdata, uint64_t usec, const char *description);
@@ -85,63 +67,74 @@
 
 int sd_netlink_attach_event(sd_netlink *nl, sd_event *e, int64_t priority);
 int sd_netlink_detach_event(sd_netlink *nl);
+int sd_netlink_attach_filter(sd_netlink *nl, size_t len, const struct sock_filter *filter);
 
-int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, const char *data);
-int sd_netlink_message_append_strv(sd_netlink_message *m, unsigned short type, char * const *data);
-int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type);
-int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data);
-int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, uint16_t data);
-int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, uint32_t data);
-int sd_netlink_message_append_u64(sd_netlink_message *m, unsigned short type, uint64_t data);
-int sd_netlink_message_append_s8(sd_netlink_message *m, unsigned short type, int8_t data);
-int sd_netlink_message_append_s16(sd_netlink_message *m, unsigned short type, int16_t data);
-int sd_netlink_message_append_s32(sd_netlink_message *m, unsigned short type, int32_t data);
-int sd_netlink_message_append_s64(sd_netlink_message *m, unsigned short type, int64_t data);
-int sd_netlink_message_append_data(sd_netlink_message *m, unsigned short type, const void *data, size_t len);
-int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data);
-int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data);
-int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data);
-int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, unsigned short type, const struct sockaddr_in6 *data);
-int sd_netlink_message_append_ether_addr(sd_netlink_message *m, unsigned short type, const struct ether_addr *data);
-int sd_netlink_message_append_cache_info(sd_netlink_message *m, unsigned short type, const struct ifa_cacheinfo *info);
+/* Message construction */
+int sd_netlink_message_append_string(sd_netlink_message *m, uint16_t attr_type, const char *data);
+int sd_netlink_message_append_strv(sd_netlink_message *m, uint16_t attr_type, const char* const *data);
+int sd_netlink_message_append_flag(sd_netlink_message *m, uint16_t attr_type);
+int sd_netlink_message_append_u8(sd_netlink_message *m, uint16_t attr_type, uint8_t data);
+int sd_netlink_message_append_u16(sd_netlink_message *m, uint16_t attr_type, uint16_t data);
+int sd_netlink_message_append_u32(sd_netlink_message *m, uint16_t attr_type, uint32_t data);
+int sd_netlink_message_append_u64(sd_netlink_message *m, uint16_t attr_type, uint64_t data);
+int sd_netlink_message_append_s8(sd_netlink_message *m, uint16_t attr_type, int8_t data);
+int sd_netlink_message_append_s16(sd_netlink_message *m, uint16_t attr_type, int16_t data);
+int sd_netlink_message_append_s32(sd_netlink_message *m, uint16_t attr_type, int32_t data);
+int sd_netlink_message_append_s64(sd_netlink_message *m, uint16_t attr_type, int64_t data);
+int sd_netlink_message_append_data(sd_netlink_message *m, uint16_t attr_type, const void *data, size_t len);
+int sd_netlink_message_append_container_data(
+                sd_netlink_message *m,
+                uint16_t container_type,
+                uint16_t attr_type,
+                const void *data,
+                size_t len);
+int sd_netlink_message_append_in_addr(sd_netlink_message *m, uint16_t attr_type, const struct in_addr *data);
+int sd_netlink_message_append_in6_addr(sd_netlink_message *m, uint16_t attr_type, const struct in6_addr *data);
+int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, uint16_t attr_type, const struct sockaddr_in *data);
+int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, uint16_t attr_type, const struct sockaddr_in6 *data);
+int sd_netlink_message_append_ether_addr(sd_netlink_message *m, uint16_t attr_type, const struct ether_addr *data);
+int sd_netlink_message_append_cache_info(sd_netlink_message *m, uint16_t attr_type, const struct ifa_cacheinfo *info);
 
-int sd_netlink_message_open_container(sd_netlink_message *m, unsigned short type);
-int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned short type, const char *key);
+int sd_netlink_message_open_container(sd_netlink_message *m, uint16_t attr_type);
+int sd_netlink_message_open_container_union(sd_netlink_message *m, uint16_t attr_type, const char *key);
 int sd_netlink_message_close_container(sd_netlink_message *m);
 
-int sd_netlink_message_read(sd_netlink_message *m, unsigned short type, size_t size, void *data);
-int sd_netlink_message_read_data(sd_netlink_message *m, unsigned short type, size_t *ret_size, void **ret_data);
-int sd_netlink_message_read_string_strdup(sd_netlink_message *m, unsigned short type, char **data);
-int sd_netlink_message_read_string(sd_netlink_message *m, unsigned short type, const char **data);
-int sd_netlink_message_read_strv(sd_netlink_message *m, unsigned short container_type, unsigned short type_id, char ***ret);
-int sd_netlink_message_read_u8(sd_netlink_message *m, unsigned short type, uint8_t *data);
-int sd_netlink_message_read_u16(sd_netlink_message *m, unsigned short type, uint16_t *data);
-int sd_netlink_message_read_u32(sd_netlink_message *m, unsigned short type, uint32_t *data);
-int sd_netlink_message_read_ether_addr(sd_netlink_message *m, unsigned short type, struct ether_addr *data);
-int sd_netlink_message_read_cache_info(sd_netlink_message *m, unsigned short type, struct ifa_cacheinfo *info);
-int sd_netlink_message_read_in_addr(sd_netlink_message *m, unsigned short type, struct in_addr *data);
-int sd_netlink_message_read_in6_addr(sd_netlink_message *m, unsigned short type, struct in6_addr *data);
-int sd_netlink_message_has_flag(sd_netlink_message *m, unsigned short type);
-int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short type);
-int sd_netlink_message_enter_array(sd_netlink_message *m, unsigned short type);
-int sd_netlink_message_exit_container(sd_netlink_message *m);
-
 int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t type);
 int sd_netlink_message_cancel_array(sd_netlink_message *m);
 
-int sd_netlink_message_rewind(sd_netlink_message *m, sd_netlink *genl);
+/* Reading messages */
+int sd_netlink_message_read(sd_netlink_message *m, uint16_t attr_type, size_t size, void *data);
+int sd_netlink_message_read_data(sd_netlink_message *m, uint16_t attr_type, size_t *ret_size, void **ret_data);
+int sd_netlink_message_read_data_suffix0(sd_netlink_message *m, uint16_t attr_type, size_t *ret_size, void **ret_data);
+int sd_netlink_message_read_string_strdup(sd_netlink_message *m, uint16_t attr_type, char **data);
+int sd_netlink_message_read_string(sd_netlink_message *m, uint16_t attr_type, const char **data);
+int sd_netlink_message_read_strv(sd_netlink_message *m, uint16_t container_type, uint16_t attr_type, char ***ret);
+int sd_netlink_message_read_u8(sd_netlink_message *m, uint16_t attr_type, uint8_t *data);
+int sd_netlink_message_read_u16(sd_netlink_message *m, uint16_t attr_type, uint16_t *data);
+int sd_netlink_message_read_u32(sd_netlink_message *m, uint16_t attr_type, uint32_t *data);
+int sd_netlink_message_read_ether_addr(sd_netlink_message *m, uint16_t attr_type, struct ether_addr *data);
+int sd_netlink_message_read_cache_info(sd_netlink_message *m, uint16_t attr_type, struct ifa_cacheinfo *info);
+int sd_netlink_message_read_in_addr(sd_netlink_message *m, uint16_t attr_type, struct in_addr *data);
+int sd_netlink_message_read_in6_addr(sd_netlink_message *m, uint16_t attr_type, struct in6_addr *data);
+int sd_netlink_message_has_flag(sd_netlink_message *m, uint16_t attr_type);
+int sd_netlink_message_enter_container(sd_netlink_message *m, uint16_t attr_type);
+int sd_netlink_message_enter_array(sd_netlink_message *m, uint16_t attr_type);
+int sd_netlink_message_exit_container(sd_netlink_message *m);
+
+int sd_netlink_message_rewind(sd_netlink_message *m, sd_netlink *nl);
 
 sd_netlink_message *sd_netlink_message_next(sd_netlink_message *m);
 
 sd_netlink_message *sd_netlink_message_ref(sd_netlink_message *m);
 sd_netlink_message *sd_netlink_message_unref(sd_netlink_message *m);
 
-int sd_netlink_message_request_dump(sd_netlink_message *m, int dump);
+int sd_netlink_message_set_request_dump(sd_netlink_message *m, int dump);
 int sd_netlink_message_is_error(sd_netlink_message *m);
 int sd_netlink_message_get_errno(sd_netlink_message *m);
 int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *type);
 int sd_netlink_message_set_flags(sd_netlink_message *m, uint16_t flags);
 int sd_netlink_message_is_broadcast(sd_netlink_message *m);
+int sd_netlink_message_get_max_attribute(sd_netlink_message *m, uint16_t *ret);
 
 /* rtnl */
 int sd_rtnl_message_get_family(sd_netlink_message *m, int *family);
@@ -152,10 +145,10 @@
 int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope);
 int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags);
 int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family);
-int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen);
-int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope);
-int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags);
-int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex);
+int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *ret_prefixlen);
+int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *ret_scope);
+int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *ret_flags);
+int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ret_ifindex);
 
 int sd_rtnl_message_new_link(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index);
 int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsigned change);
@@ -182,12 +175,13 @@
 int sd_rtnl_message_route_get_src_prefixlen(sd_netlink_message *m, unsigned char *src_len);
 int sd_rtnl_message_route_get_type(sd_netlink_message *m, unsigned char *type);
 
-int sd_rtnl_message_new_nexthop(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nhmsg_type, int nh_family, unsigned char nh_protocol);
+int sd_rtnl_message_new_nexthop(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int nh_family, unsigned char nh_protocol);
 int sd_rtnl_message_nexthop_set_flags(sd_netlink_message *m, uint8_t flags);
+int sd_rtnl_message_nexthop_get_flags(sd_netlink_message *m, uint8_t *ret);
 int sd_rtnl_message_nexthop_get_family(sd_netlink_message *m, uint8_t *family);
 int sd_rtnl_message_nexthop_get_protocol(sd_netlink_message *m, uint8_t *protocol);
 
-int sd_rtnl_message_new_neigh(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index, int nda_family);
+int sd_rtnl_message_new_neigh(sd_netlink *nl, sd_netlink_message **ret, uint16_t nlmsg_type, int index, int nda_family);
 int sd_rtnl_message_neigh_set_flags(sd_netlink_message *m, uint8_t flags);
 int sd_rtnl_message_neigh_set_state(sd_netlink_message *m, uint16_t state);
 int sd_rtnl_message_neigh_get_family(sd_netlink_message *m, int *family);
@@ -213,50 +207,28 @@
 int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags);
 int sd_rtnl_message_routing_policy_rule_get_flags(sd_netlink_message *m, uint32_t *flags);
 
-int sd_rtnl_message_new_qdisc(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex);
-int sd_rtnl_message_set_qdisc_parent(sd_netlink_message *m, uint32_t parent);
-int sd_rtnl_message_set_qdisc_handle(sd_netlink_message *m, uint32_t handle);
-
-int sd_rtnl_message_new_tclass(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex);
-int sd_rtnl_message_set_tclass_parent(sd_netlink_message *m, uint32_t parent);
-int sd_rtnl_message_set_tclass_handle(sd_netlink_message *m, uint32_t handle);
+int sd_rtnl_message_new_traffic_control(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type,
+                                        int ifindex, uint32_t handle, uint32_t parent);
+int sd_rtnl_message_traffic_control_get_ifindex(sd_netlink_message *m, int *ret);
+int sd_rtnl_message_traffic_control_get_handle(sd_netlink_message *m, uint32_t *ret);
+int sd_rtnl_message_traffic_control_get_parent(sd_netlink_message *m, uint32_t *ret);
 
 int sd_rtnl_message_new_mdb(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int mdb_ifindex);
 
-/* nfnl */
-int sd_nfnl_socket_open(sd_netlink **nl);
-int sd_nfnl_message_batch_begin(sd_netlink *nfnl, sd_netlink_message **ret);
-int sd_nfnl_message_batch_end(sd_netlink *nfnl, sd_netlink_message **ret);
-int sd_nfnl_nft_message_del_table(sd_netlink *nfnl, sd_netlink_message **ret,
-                                  int family, const char *table);
-int sd_nfnl_nft_message_new_table(sd_netlink *nfnl, sd_netlink_message **ret,
-                                  int family, const char *table, uint16_t nl_flags);
-int sd_nfnl_nft_message_new_basechain(sd_netlink *nfnl, sd_netlink_message **ret,
-                                      int family, const char *table, const char *chain,
-                                      const char *type, uint8_t hook, int prio);
-int sd_nfnl_nft_message_new_rule(sd_netlink *nfnl, sd_netlink_message **ret,
-                                 int family, const char *table, const char *chain);
-int sd_nfnl_nft_message_new_set(sd_netlink *nfnl, sd_netlink_message **ret,
-                                int family, const char *table, const char *set_name,
-                                uint32_t setid, uint32_t klen);
-int sd_nfnl_nft_message_new_setelems_begin(sd_netlink *nfnl, sd_netlink_message **ret,
-                                           int family, const char *table, const char *set_name);
-int sd_nfnl_nft_message_del_setelems_begin(sd_netlink *nfnl, sd_netlink_message **ret,
-                                           int family, const char *table, const char *set_name);
-int sd_nfnl_nft_message_add_setelem(sd_netlink_message *m,
-                                    uint32_t num,
-                                    const void *key, uint32_t klen,
-                                    const void *data, uint32_t dlen);
-int sd_nfnl_nft_message_add_setelem_end(sd_netlink_message *m);
-
 /* genl */
-int sd_genl_socket_open(sd_netlink **nl);
-int sd_genl_message_new(sd_netlink *nl, sd_genl_family_t family, uint8_t cmd, sd_netlink_message **ret);
-int sd_genl_message_get_family(sd_netlink *nl, sd_netlink_message *m, sd_genl_family_t *ret);
+int sd_genl_socket_open(sd_netlink **ret);
+int sd_genl_message_new(sd_netlink *genl, const char *family_name, uint8_t cmd, sd_netlink_message **ret);
+int sd_genl_message_get_family_name(sd_netlink *genl, sd_netlink_message *m, const char **ret);
+int sd_genl_message_get_command(sd_netlink *genl, sd_netlink_message *m, uint8_t *ret);
+int sd_genl_add_match(sd_netlink *nl, sd_netlink_slot **ret_slot, const char *family_name,
+                      const char *multicast_group_name, uint8_t command,
+                      sd_netlink_message_handler_t callback,
+                      sd_netlink_destroy_t destroy_callback,
+                      void *userdata, const char *description);
 
 /* slot */
-sd_netlink_slot *sd_netlink_slot_ref(sd_netlink_slot *nl);
-sd_netlink_slot *sd_netlink_slot_unref(sd_netlink_slot *nl);
+sd_netlink_slot *sd_netlink_slot_ref(sd_netlink_slot *slot);
+sd_netlink_slot *sd_netlink_slot_unref(sd_netlink_slot *slot);
 
 sd_netlink *sd_netlink_slot_get_netlink(sd_netlink_slot *slot);
 void *sd_netlink_slot_get_userdata(sd_netlink_slot *slot);
diff --git a/src/systemd/sd-network.h b/src/systemd/sd-network.h
index 776f6b5..9cc2cba 100644
--- a/src/systemd/sd-network.h
+++ b/src/systemd/sd-network.h
@@ -14,10 +14,11 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
+#include <sys/stat.h>
 #include <sys/types.h>
 
 #include "_sd-common.h"
@@ -48,26 +49,26 @@
  * Possible return codes:
  *   -ENODATA: networkd is not aware of any links
  */
-int sd_network_get_operational_state(char **state);
-int sd_network_get_carrier_state(char **state);
-int sd_network_get_address_state(char **state);
-int sd_network_get_ipv4_address_state(char **state);
-int sd_network_get_ipv6_address_state(char **state);
-int sd_network_get_online_state(char **state);
+int sd_network_get_operational_state(char **ret);
+int sd_network_get_carrier_state(char **ret);
+int sd_network_get_address_state(char **ret);
+int sd_network_get_ipv4_address_state(char **ret);
+int sd_network_get_ipv6_address_state(char **ret);
+int sd_network_get_online_state(char **ret);
 
 /* Get DNS entries for all links. These are string representations of
  * IP addresses */
-int sd_network_get_dns(char ***dns);
+int sd_network_get_dns(char ***ret);
 
 /* Get NTP entries for all links. These are domain names or string
  * representations of IP addresses */
-int sd_network_get_ntp(char ***ntp);
+int sd_network_get_ntp(char ***ret);
 
 /* Get the search domains for all links. */
-int sd_network_get_search_domains(char ***domains);
+int sd_network_get_search_domains(char ***ret);
 
 /* Get the search domains for all links. */
-int sd_network_get_route_domains(char ***domains);
+int sd_network_get_route_domains(char ***ret);
 
 /* Get setup state from ifindex.
  * Possible states:
@@ -80,7 +81,7 @@
  * Possible return codes:
  *   -ENODATA: networkd is not aware of the link
  */
-int sd_network_link_get_setup_state(int ifindex, char **state);
+int sd_network_link_get_setup_state(int ifindex, char **ret);
 
 /* Get operational state from ifindex.
  * Possible states:
@@ -93,14 +94,14 @@
  * Possible return codes:
  *   -ENODATA: networkd is not aware of the link
  */
-int sd_network_link_get_operational_state(int ifindex, char **state);
-int sd_network_link_get_required_operstate_for_online(int ifindex, char **state);
-int sd_network_link_get_required_family_for_online(int ifindex, char **state);
-int sd_network_link_get_carrier_state(int ifindex, char **state);
-int sd_network_link_get_address_state(int ifindex, char **state);
-int sd_network_link_get_ipv4_address_state(int ifindex, char **state);
-int sd_network_link_get_ipv6_address_state(int ifindex, char **state);
-int sd_network_link_get_online_state(int ifindex, char **state);
+int sd_network_link_get_operational_state(int ifindex, char **ret);
+int sd_network_link_get_required_operstate_for_online(int ifindex, char **ret);
+int sd_network_link_get_required_family_for_online(int ifindex, char **ret);
+int sd_network_link_get_carrier_state(int ifindex, char **ret);
+int sd_network_link_get_address_state(int ifindex, char **ret);
+int sd_network_link_get_ipv4_address_state(int ifindex, char **ret);
+int sd_network_link_get_ipv6_address_state(int ifindex, char **ret);
+int sd_network_link_get_online_state(int ifindex, char **ret);
 
 /* Indicates whether the network is relevant to being online.
  * Possible return codes:
@@ -113,10 +114,13 @@
 /* Get activation policy for ifindex.
  * Possible values are as specified for ActivationPolicy=
  */
-int sd_network_link_get_activation_policy(int ifindex, char **policy);
+int sd_network_link_get_activation_policy(int ifindex, char **ret);
 
 /* Get path to .network file applied to link */
-int sd_network_link_get_network_file(int ifindex, char **filename);
+int sd_network_link_get_network_file(int ifindex, char **ret);
+
+/* Get paths to .network file dropins applied to link */
+int sd_network_link_get_network_file_dropins(int ifindex, char ***ret);
 
 /* Get DNS entries for a given link. These are string representations of
  * IP addresses */
@@ -135,7 +139,7 @@
  * Possible return codes:
  *   -ENODATA: networkd is not aware of the link
  */
-int sd_network_link_get_llmnr(int ifindex, char **llmnr);
+int sd_network_link_get_llmnr(int ifindex, char **ret);
 
 /* Indicates whether or not MulticastDNS should be enabled for the
  * link.
@@ -143,7 +147,7 @@
  * Possible return codes:
  *   -ENODATA: networkd is not aware of the link
  */
-int sd_network_link_get_mdns(int ifindex, char **mdns);
+int sd_network_link_get_mdns(int ifindex, char **ret);
 
 /* Indicates whether or not DNS-over-TLS should be enabled for the
  * link.
@@ -151,41 +155,43 @@
  * Possible return codes:
  *   -ENODATA: networkd is not aware of the link
  */
-int sd_network_link_get_dns_over_tls(int ifindex, char **dns_over_tls);
+int sd_network_link_get_dns_over_tls(int ifindex, char **ret);
 
 /* Indicates whether or not DNSSEC should be enabled for the link
  * Possible levels of support: yes, no, allow-downgrade
  * Possible return codes:
  *   -ENODATA: networkd is not aware of the link
  */
-int sd_network_link_get_dnssec(int ifindex, char **dnssec);
+int sd_network_link_get_dnssec(int ifindex, char **ret);
 
 /* Returns the list of per-interface DNSSEC negative trust anchors
  * Possible return codes:
  *   -ENODATA: networkd is not aware of the link, or has no such data
  */
-int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***nta);
+int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***ret);
 
 /* Get the search DNS domain names for a given link. */
-int sd_network_link_get_search_domains(int ifindex, char ***domains);
+int sd_network_link_get_search_domains(int ifindex, char ***ret);
 
 /* Get the route DNS domain names for a given link. */
-int sd_network_link_get_route_domains(int ifindex, char ***domains);
+int sd_network_link_get_route_domains(int ifindex, char ***ret);
 
 /* Get whether this link shall be used as 'default route' for DNS queries */
 int sd_network_link_get_dns_default_route(int ifindex);
 
 /* Get the carrier interface indexes to which current link is bound to. */
-int sd_network_link_get_carrier_bound_to(int ifindex, int **ifindexes);
+int sd_network_link_get_carrier_bound_to(int ifindex, int **ret);
 
 /* Get the CARRIERS that are bound to current link. */
-int sd_network_link_get_carrier_bound_by(int ifindex, int **ifindexes);
+int sd_network_link_get_carrier_bound_by(int ifindex, int **ret);
 
 /* Get DHCPv6 client IAID for a given link. */
-int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid);
+int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **ret);
 
 /* Get DHCPv6 client DUID for a given link. */
-int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **duid);
+int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **ret);
+
+int sd_network_link_get_stat(int ifindex, struct stat *ret);
 
 /* Monitor object */
 typedef struct sd_network_monitor sd_network_monitor;
@@ -206,7 +212,7 @@
 int sd_network_monitor_get_events(sd_network_monitor *m);
 
 /* Get timeout for poll(), as usec value relative to CLOCK_MONOTONIC's epoch */
-int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *timeout_usec);
+int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *ret_usec);
 
 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_network_monitor, sd_network_monitor_unref);
 
diff --git a/src/systemd/sd-path.h b/src/systemd/sd-path.h
index 5f2f03c..0b61484 100644
--- a/src/systemd/sd-path.h
+++ b/src/systemd/sd-path.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -110,7 +110,13 @@
         /* systemd-networkd search paths */
         SD_PATH_SYSTEMD_SEARCH_NETWORK,
 
-        _SD_PATH_MAX,
+        /* systemd environment generators */
+        SD_PATH_SYSTEMD_SYSTEM_ENVIRONMENT_GENERATOR,
+        SD_PATH_SYSTEMD_USER_ENVIRONMENT_GENERATOR,
+        SD_PATH_SYSTEMD_SEARCH_SYSTEM_ENVIRONMENT_GENERATOR,
+        SD_PATH_SYSTEMD_SEARCH_USER_ENVIRONMENT_GENERATOR,
+
+        _SD_PATH_MAX
 };
 
 int sd_path_lookup(uint64_t type, const char *suffix, char **path);
diff --git a/src/systemd/sd-radv.h b/src/systemd/sd-radv.h
index be5cf1b..5e8d06f 100644
--- a/src/systemd/sd-radv.h
+++ b/src/systemd/sd-radv.h
@@ -16,7 +16,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include <inttypes.h>
@@ -30,11 +30,6 @@
 
 _SD_BEGIN_DECLARATIONS;
 
-#define SD_RADV_DEFAULT_MIN_TIMEOUT_USEC        (200*USEC_PER_SEC)
-#define SD_RADV_DEFAULT_MAX_TIMEOUT_USEC        (600*USEC_PER_SEC)
-
-#define SD_RADV_DEFAULT_DNS_LIFETIME_USEC       (3*SD_RADV_DEFAULT_MAX_TIMEOUT_USEC)
-
 typedef struct sd_radv sd_radv;
 typedef struct sd_radv_prefix sd_radv_prefix;
 typedef struct sd_radv_route_prefix sd_radv_route_prefix;
@@ -54,18 +49,17 @@
 
 int sd_radv_set_ifindex(sd_radv *ra, int interface_index);
 int sd_radv_set_ifname(sd_radv *ra, const char *interface_name);
-const char *sd_radv_get_ifname(sd_radv *ra);
+int sd_radv_get_ifname(sd_radv *ra, const char **ret);
 int sd_radv_set_mac(sd_radv *ra, const struct ether_addr *mac_addr);
 int sd_radv_set_mtu(sd_radv *ra, uint32_t mtu);
 int sd_radv_set_hop_limit(sd_radv *ra, uint8_t hop_limit);
-int sd_radv_set_router_lifetime(sd_radv *ra, uint16_t router_lifetime);
+int sd_radv_set_router_lifetime(sd_radv *ra, uint64_t lifetime_usec);
 int sd_radv_set_managed_information(sd_radv *ra, int managed);
 int sd_radv_set_other_information(sd_radv *ra, int other);
 int sd_radv_set_preference(sd_radv *ra, unsigned preference);
-int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, int dynamic);
-int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p, int dynamic);
-sd_radv_prefix *sd_radv_remove_prefix(sd_radv *ra, const struct in6_addr *prefix,
-                                      unsigned char prefixlen);
+int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p);
+int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p);
+void sd_radv_remove_prefix(sd_radv *ra, const struct in6_addr *prefix, unsigned char prefixlen);
 int sd_radv_set_rdnss(sd_radv *ra, uint32_t lifetime,
                       const struct in6_addr *dns, size_t n_dns);
 int sd_radv_set_dnssl(sd_radv *ra, uint32_t lifetime, char **search_list);
@@ -82,17 +76,15 @@
 int sd_radv_prefix_set_onlink(sd_radv_prefix *p, int onlink);
 int sd_radv_prefix_set_address_autoconfiguration(sd_radv_prefix *p,
                                                  int address_autoconfiguration);
-int sd_radv_prefix_set_valid_lifetime(sd_radv_prefix *p,
-                                      uint32_t valid_lifetime);
-int sd_radv_prefix_set_preferred_lifetime(sd_radv_prefix *p,
-                                          uint32_t preferred_lifetime);
+int sd_radv_prefix_set_valid_lifetime(sd_radv_prefix *p, uint64_t lifetime_usec, uint64_t valid_until);
+int sd_radv_prefix_set_preferred_lifetime(sd_radv_prefix *p, uint64_t lifetime_usec, uint64_t valid_until);
 
 int sd_radv_route_prefix_new(sd_radv_route_prefix **ret);
 sd_radv_route_prefix *sd_radv_route_prefix_ref(sd_radv_route_prefix *ra);
 sd_radv_route_prefix *sd_radv_route_prefix_unref(sd_radv_route_prefix *ra);
 
-int sd_radv_prefix_set_route_prefix(sd_radv_route_prefix *p, const struct in6_addr *in6_addr, unsigned char prefixlen);
-int sd_radv_route_prefix_set_lifetime(sd_radv_route_prefix *p, uint32_t valid_lifetime);
+int sd_radv_route_prefix_set_prefix(sd_radv_route_prefix *p, const struct in6_addr *in6_addr, unsigned char prefixlen);
+int sd_radv_route_prefix_set_lifetime(sd_radv_route_prefix *p, uint64_t lifetime_usec, uint64_t valid_until);
 
 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_radv, sd_radv_unref);
 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_radv_prefix, sd_radv_prefix_unref);
diff --git a/src/systemd/sd-resolve.h b/src/systemd/sd-resolve.h
index 530bfd5..f5dfae8 100644
--- a/src/systemd/sd-resolve.h
+++ b/src/systemd/sd-resolve.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 /* 'struct addrinfo' needs _GNU_SOURCE */
@@ -47,7 +47,7 @@
 enum {
         SD_RESOLVE_GET_HOST    = 1 << 0,
         SD_RESOLVE_GET_SERVICE = 1 << 1,
-        SD_RESOLVE_GET_BOTH = SD_RESOLVE_GET_HOST | SD_RESOLVE_GET_SERVICE,
+        SD_RESOLVE_GET_BOTH = SD_RESOLVE_GET_HOST | SD_RESOLVE_GET_SERVICE
 };
 
 int sd_resolve_default(sd_resolve **ret);
diff --git a/src/systemd/sd-utf8.h b/src/systemd/sd-utf8.h
index 57013d0..556b215 100644
--- a/src/systemd/sd-utf8.h
+++ b/src/systemd/sd-utf8.h
@@ -14,7 +14,7 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  along with systemd; If not, see <https://www.gnu.org/licenses/>.
 ***/
 
 #include "_sd-common.h"
diff --git a/src/sysupdate/meson.build b/src/sysupdate/meson.build
new file mode 100644
index 0000000..2f8c230
--- /dev/null
+++ b/src/sysupdate/meson.build
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+systemd_sysupdate_sources = files(
+        'sysupdate-cache.c',
+        'sysupdate-cache.h',
+        'sysupdate-instance.c',
+        'sysupdate-instance.h',
+        'sysupdate-partition.c',
+        'sysupdate-partition.h',
+        'sysupdate-pattern.c',
+        'sysupdate-pattern.h',
+        'sysupdate-resource.c',
+        'sysupdate-resource.h',
+        'sysupdate-transfer.c',
+        'sysupdate-transfer.h',
+        'sysupdate-update-set.c',
+        'sysupdate-update-set.h',
+        'sysupdate-util.c',
+        'sysupdate-util.h',
+        'sysupdate.c',
+        'sysupdate.h',
+)
diff --git a/src/sysupdate/sysupdate-cache.c b/src/sysupdate/sysupdate-cache.c
new file mode 100644
index 0000000..8dad3ee
--- /dev/null
+++ b/src/sysupdate/sysupdate-cache.c
@@ -0,0 +1,88 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "memory-util.h"
+#include "sysupdate-cache.h"
+
+#define WEB_CACHE_ENTRIES_MAX 64U
+#define WEB_CACHE_ITEM_SIZE_MAX (64U*1024U*1024U)
+
+static WebCacheItem* web_cache_item_free(WebCacheItem *i) {
+        if (!i)
+                return NULL;
+
+        free(i->url);
+        return mfree(i);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(WebCacheItem*, web_cache_item_free);
+
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(web_cache_hash_ops, char, string_hash_func, string_compare_func, WebCacheItem, web_cache_item_free);
+
+int web_cache_add_item(
+                Hashmap **web_cache,
+                const char *url,
+                bool verified,
+                const void *data,
+                size_t size) {
+
+        _cleanup_(web_cache_item_freep) WebCacheItem *item = NULL;
+        _cleanup_free_ char *u = NULL;
+        int r;
+
+        assert(web_cache);
+        assert(url);
+        assert(data || size == 0);
+
+        if (size > WEB_CACHE_ITEM_SIZE_MAX)
+                return -E2BIG;
+
+        item = web_cache_get_item(*web_cache, url, verified);
+        if (item && memcmp_nn(item->data, item->size, data, size) == 0)
+                return 0;
+
+        if (hashmap_size(*web_cache) >= (size_t) (WEB_CACHE_ENTRIES_MAX + !!hashmap_get(*web_cache, url)))
+                return -ENOSPC;
+
+        r = hashmap_ensure_allocated(web_cache, &web_cache_hash_ops);
+        if (r < 0)
+                return r;
+
+        u = strdup(url);
+        if (!u)
+                return -ENOMEM;
+
+        item = malloc(offsetof(WebCacheItem, data) + size + 1);
+        if (!item)
+                return -ENOMEM;
+
+        *item = (WebCacheItem) {
+                .url = TAKE_PTR(u),
+                .size = size,
+                .verified = verified,
+        };
+
+        /* Just to be extra paranoid, let's NUL terminate the downloaded buffer */
+        *(uint8_t*) mempcpy(item->data, data, size) = 0;
+
+        web_cache_item_free(hashmap_remove(*web_cache, url));
+
+        r = hashmap_put(*web_cache, item->url, item);
+        if (r < 0)
+                return r;
+
+        TAKE_PTR(item);
+        return 1;
+}
+
+WebCacheItem* web_cache_get_item(Hashmap *web_cache, const char *url, bool verified) {
+        WebCacheItem *i;
+
+        i = hashmap_get(web_cache, url);
+        if (!i)
+                return NULL;
+
+        if (i->verified != verified)
+                return NULL;
+
+        return i;
+}
diff --git a/src/sysupdate/sysupdate-cache.h b/src/sysupdate/sysupdate-cache.h
new file mode 100644
index 0000000..d6a7897
--- /dev/null
+++ b/src/sysupdate/sysupdate-cache.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "hashmap.h"
+
+typedef struct WebCacheItem {
+        char *url;
+        bool verified;
+        size_t size;
+        uint8_t data[];
+} WebCacheItem;
+
+/* A simple in-memory cache for downloaded manifests. Very likely multiple transfers will use the same
+ * manifest URLs, hence let's make sure we only download them once within each sysupdate invocation. */
+
+int web_cache_add_item(Hashmap **cache, const char *url, bool verified, const void *data, size_t size);
+
+WebCacheItem* web_cache_get_item(Hashmap *cache, const char *url, bool verified);
diff --git a/src/sysupdate/sysupdate-instance.c b/src/sysupdate/sysupdate-instance.c
new file mode 100644
index 0000000..16bfab9
--- /dev/null
+++ b/src/sysupdate/sysupdate-instance.c
@@ -0,0 +1,63 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include "sysupdate-instance.h"
+
+void instance_metadata_destroy(InstanceMetadata *m) {
+        assert(m);
+        free(m->version);
+}
+
+int instance_new(
+                Resource *rr,
+                const char *path,
+                const InstanceMetadata *f,
+                Instance **ret) {
+
+        _cleanup_(instance_freep) Instance *i = NULL;
+        _cleanup_free_ char *p = NULL, *v = NULL;
+
+        assert(rr);
+        assert(path);
+        assert(f);
+        assert(f->version);
+        assert(ret);
+
+        p = strdup(path);
+        if (!p)
+                return log_oom();
+
+        v = strdup(f->version);
+        if (!v)
+                return log_oom();
+
+        i = new(Instance, 1);
+        if (!i)
+                return log_oom();
+
+        *i = (Instance) {
+                .resource = rr,
+                .metadata = *f,
+                .path = TAKE_PTR(p),
+                .partition_info = PARTITION_INFO_NULL,
+        };
+
+        i->metadata.version = TAKE_PTR(v);
+
+        *ret = TAKE_PTR(i);
+        return 0;
+}
+
+Instance *instance_free(Instance *i) {
+        if (!i)
+                return NULL;
+
+        instance_metadata_destroy(&i->metadata);
+
+        free(i->path);
+        partition_info_destroy(&i->partition_info);
+
+        return mfree(i);
+}
diff --git a/src/sysupdate/sysupdate-instance.h b/src/sysupdate/sysupdate-instance.h
new file mode 100644
index 0000000..2860d29
--- /dev/null
+++ b/src/sysupdate/sysupdate-instance.h
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "sd-id128.h"
+
+#include "fs-util.h"
+#include "time-util.h"
+
+typedef struct InstanceMetadata InstanceMetadata;
+typedef struct Instance Instance;
+
+#include "sysupdate-resource.h"
+#include "sysupdate-partition.h"
+
+struct InstanceMetadata {
+        /* Various bits of metadata for each instance, that is either derived from the filename/GPT label or
+         * from metadata of the file/partition itself */
+        char *version;
+        sd_id128_t partition_uuid;
+        bool partition_uuid_set;
+        uint64_t partition_flags;          /* GPT partition flags */
+        bool partition_flags_set;
+        usec_t mtime;
+        mode_t mode;
+        uint64_t size;                     /* uncompressed size of the file */
+        uint64_t tries_done, tries_left;   /* for boot assessment counters */
+        int no_auto;
+        int read_only;
+        int growfs;
+        uint8_t sha256sum[32];             /* SHA256 sum of the download (i.e. compressed) file */
+        bool sha256sum_set;
+};
+
+#define INSTANCE_METADATA_NULL                  \
+        {                                       \
+                .mtime = USEC_INFINITY,         \
+                .mode = MODE_INVALID,           \
+                .size = UINT64_MAX,             \
+                .tries_done = UINT64_MAX,       \
+                .tries_left = UINT64_MAX,       \
+                .no_auto = -1,                  \
+                .read_only = -1,                \
+                .growfs = -1,                   \
+        }
+
+struct Instance {
+        /* A pointer back to the resource this belongs to */
+        Resource *resource;
+
+        /* Metadata of this version */
+        InstanceMetadata metadata;
+
+        /* Where we found the instance */
+        char *path;
+        PartitionInfo partition_info;
+};
+
+void instance_metadata_destroy(InstanceMetadata *m);
+
+int instance_new(Resource *rr, const char *path, const InstanceMetadata *f, Instance **ret);
+Instance *instance_free(Instance *i);
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(Instance*, instance_free);
diff --git a/src/sysupdate/sysupdate-partition.c b/src/sysupdate/sysupdate-partition.c
new file mode 100644
index 0000000..bd0486d
--- /dev/null
+++ b/src/sysupdate/sysupdate-partition.c
@@ -0,0 +1,371 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/file.h>
+
+#include "alloc-util.h"
+#include "extract-word.h"
+#include "gpt.h"
+#include "id128-util.h"
+#include "parse-util.h"
+#include "stdio-util.h"
+#include "string-util.h"
+#include "sysupdate-partition.h"
+
+void partition_info_destroy(PartitionInfo *p) {
+        assert(p);
+
+        p->label = mfree(p->label);
+        p->device = mfree(p->device);
+}
+
+static int fdisk_partition_get_attrs_as_uint64(
+                struct fdisk_partition *pa,
+                uint64_t *ret) {
+
+        uint64_t flags = 0;
+        const char *a;
+        int r;
+
+        assert(pa);
+        assert(ret);
+
+        /* Retrieve current flags as uint64_t mask */
+
+        a = fdisk_partition_get_attrs(pa);
+        if (!a) {
+                *ret = 0;
+                return 0;
+        }
+
+        for (;;) {
+                _cleanup_free_ char *word = NULL;
+
+                r = extract_first_word(&a, &word, ",", EXTRACT_DONT_COALESCE_SEPARATORS);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        break;
+
+                if (streq(word, "RequiredPartition"))
+                        flags |= SD_GPT_FLAG_REQUIRED_PARTITION;
+                else if (streq(word, "NoBlockIOProtocol"))
+                        flags |= SD_GPT_FLAG_NO_BLOCK_IO_PROTOCOL;
+                else if (streq(word, "LegacyBIOSBootable"))
+                        flags |= SD_GPT_FLAG_LEGACY_BIOS_BOOTABLE;
+                else {
+                        const char *e;
+                        unsigned u;
+
+                        /* Drop "GUID" prefix if specified */
+                        e = startswith(word, "GUID:") ?: word;
+
+                        if (safe_atou(e, &u) < 0) {
+                                log_debug("Unknown partition flag '%s', ignoring.", word);
+                                continue;
+                        }
+
+                        if (u >= sizeof(flags)*8) { /* partition flags on GPT are 64bit. Let's ignore any further
+                                                       bits should libfdisk report them */
+                                log_debug("Partition flag above bit 63 (%s), ignoring.", word);
+                                continue;
+                        }
+
+                        flags |= UINT64_C(1) << u;
+                }
+        }
+
+        *ret = flags;
+        return 0;
+}
+
+static int fdisk_partition_set_attrs_as_uint64(
+                struct fdisk_partition *pa,
+                uint64_t flags) {
+
+        _cleanup_free_ char *attrs = NULL;
+        int r;
+
+        assert(pa);
+
+        for (unsigned i = 0; i < sizeof(flags) * 8; i++) {
+                if (!FLAGS_SET(flags, UINT64_C(1) << i))
+                        continue;
+
+                r = strextendf_with_separator(&attrs, ",", "%u", i);
+                if (r < 0)
+                        return r;
+        }
+
+        return fdisk_partition_set_attrs(pa, strempty(attrs));
+}
+
+int read_partition_info(
+                struct fdisk_context *c,
+                struct fdisk_table *t,
+                size_t i,
+                PartitionInfo *ret) {
+
+        _cleanup_free_ char *label_copy = NULL, *device = NULL;
+        const char *label;
+        struct fdisk_partition *p;
+        uint64_t start, size, flags;
+        sd_id128_t ptid, id;
+        GptPartitionType type;
+        size_t partno;
+        int r;
+
+        assert(c);
+        assert(t);
+        assert(ret);
+
+        p = fdisk_table_get_partition(t, i);
+        if (!p)
+                return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to read partition metadata: %m");
+
+        if (fdisk_partition_is_used(p) <= 0) {
+                *ret = (PartitionInfo) PARTITION_INFO_NULL;
+                return 0; /* not found! */
+        }
+
+        if (fdisk_partition_has_partno(p) <= 0 ||
+            fdisk_partition_has_start(p) <= 0 ||
+            fdisk_partition_has_size(p) <= 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Found a partition without a number, position or size.");
+
+        partno = fdisk_partition_get_partno(p);
+
+        start = fdisk_partition_get_start(p);
+        assert(start <= UINT64_MAX / 512U);
+        start *= 512U;
+
+        size = fdisk_partition_get_size(p);
+        assert(size <= UINT64_MAX / 512U);
+        size *= 512U;
+
+        label = fdisk_partition_get_name(p);
+        if (!label)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Found a partition without a label.");
+
+        r = fdisk_partition_get_type_as_id128(p, &ptid);
+        if (r < 0)
+                return log_error_errno(r, "Failed to read partition type UUID: %m");
+
+        r = fdisk_partition_get_uuid_as_id128(p, &id);
+        if (r < 0)
+                return log_error_errno(r, "Failed to read partition UUID: %m");
+
+        r = fdisk_partition_get_attrs_as_uint64(p, &flags);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get partition flags: %m");
+
+        r = fdisk_partition_to_string(p, c, FDISK_FIELD_DEVICE, &device);
+        if (r != 0)
+                return log_error_errno(r, "Failed to get partition device name: %m");
+
+        label_copy = strdup(label);
+        if (!label_copy)
+                return log_oom();
+
+        type = gpt_partition_type_from_uuid(ptid);
+
+        *ret = (PartitionInfo) {
+                .partno = partno,
+                .start = start,
+                .size = size,
+                .flags = flags,
+                .type = ptid,
+                .uuid = id,
+                .label = TAKE_PTR(label_copy),
+                .device = TAKE_PTR(device),
+                .no_auto = FLAGS_SET(flags, SD_GPT_FLAG_NO_AUTO) && gpt_partition_type_knows_no_auto(type),
+                .read_only = FLAGS_SET(flags, SD_GPT_FLAG_READ_ONLY) && gpt_partition_type_knows_read_only(type),
+                .growfs = FLAGS_SET(flags, SD_GPT_FLAG_GROWFS) && gpt_partition_type_knows_growfs(type),
+        };
+
+        return 1; /* found! */
+}
+
+int find_suitable_partition(
+                const char *device,
+                uint64_t space,
+                sd_id128_t *partition_type,
+                PartitionInfo *ret) {
+
+        _cleanup_(partition_info_destroy) PartitionInfo smallest = PARTITION_INFO_NULL;
+        _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
+        _cleanup_(fdisk_unref_tablep) struct fdisk_table *t = NULL;
+        size_t n_partitions;
+        int r;
+
+        assert(device);
+        assert(ret);
+
+        c = fdisk_new_context();
+        if (!c)
+                return log_oom();
+
+        r = fdisk_assign_device(c, device, /* readonly= */ true);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open device '%s': %m", device);
+
+        if (!fdisk_is_labeltype(c, FDISK_DISKLABEL_GPT))
+                return log_error_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s has no GPT disk label, not suitable.", device);
+
+        r = fdisk_get_partitions(c, &t);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire partition table: %m");
+
+        n_partitions = fdisk_table_get_nents(t);
+        for (size_t i = 0; i < n_partitions; i++)  {
+                _cleanup_(partition_info_destroy) PartitionInfo pinfo = PARTITION_INFO_NULL;
+
+                r = read_partition_info(c, t, i, &pinfo);
+                if (r < 0)
+                        return r;
+                if (r == 0) /* not assigned */
+                        continue;
+
+                /* Filter out non-matching partition types */
+                if (partition_type && !sd_id128_equal(pinfo.type, *partition_type))
+                        continue;
+
+                if (!streq_ptr(pinfo.label, "_empty")) /* used */
+                        continue;
+
+                if (space != UINT64_MAX && pinfo.size < space) /* too small */
+                        continue;
+
+                if (smallest.partno != SIZE_MAX && smallest.size <= pinfo.size) /* already found smaller */
+                        continue;
+
+                smallest = pinfo;
+                pinfo = (PartitionInfo) PARTITION_INFO_NULL;
+        }
+
+        if (smallest.partno == SIZE_MAX)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOSPC), "No available partition of a suitable size found.");
+
+        *ret = smallest;
+        smallest = (PartitionInfo) PARTITION_INFO_NULL;
+
+        return 0;
+}
+
+int patch_partition(
+                const char *device,
+                const PartitionInfo *info,
+                PartitionChange change) {
+
+        _cleanup_(fdisk_unref_partitionp) struct fdisk_partition *pa = NULL;
+        _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
+        bool tweak_no_auto, tweak_read_only, tweak_growfs;
+        GptPartitionType type;
+        int r, fd;
+
+        assert(device);
+        assert(info);
+        assert(change <= _PARTITION_CHANGE_MAX);
+
+        if (change == 0) /* Nothing to do */
+                return 0;
+
+        c = fdisk_new_context();
+        if (!c)
+                return log_oom();
+
+        r = fdisk_assign_device(c, device, /* readonly= */ false);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open device '%s': %m", device);
+
+        assert_se((fd = fdisk_get_devfd(c)) >= 0);
+
+        /* Make sure udev doesn't read the device while we make changes (this lock is released automatically
+         * by the kernel when the fd is closed, i.e. when the fdisk context is freed, hence no explicit
+         * unlock by us here anywhere.) */
+        if (flock(fd, LOCK_EX) < 0)
+                return log_error_errno(errno, "Failed to lock block device '%s': %m", device);
+
+        if (!fdisk_is_labeltype(c, FDISK_DISKLABEL_GPT))
+                return log_error_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s has no GPT disk label, not suitable.", device);
+
+        r = fdisk_get_partition(c, info->partno, &pa);
+        if (r < 0)
+                return log_error_errno(r, "Failed to read partition %zu of GPT label of '%s': %m", info->partno, device);
+
+        if (change & PARTITION_LABEL) {
+                r = fdisk_partition_set_name(pa, info->label);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to update partition label: %m");
+        }
+
+        if (change & PARTITION_UUID) {
+                r = fdisk_partition_set_uuid(pa, SD_ID128_TO_UUID_STRING(info->uuid));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to update partition UUID: %m");
+        }
+
+        type = gpt_partition_type_from_uuid(info->type);
+
+        /* Tweak the read-only flag, but only if supported by the partition type */
+        tweak_no_auto =
+                FLAGS_SET(change, PARTITION_NO_AUTO) &&
+                gpt_partition_type_knows_no_auto(type);
+        tweak_read_only =
+                FLAGS_SET(change, PARTITION_READ_ONLY) &&
+                gpt_partition_type_knows_read_only(type);
+        tweak_growfs =
+                FLAGS_SET(change, PARTITION_GROWFS) &&
+                gpt_partition_type_knows_growfs(type);
+
+        if (change & PARTITION_FLAGS) {
+                uint64_t flags;
+
+                /* Update the full flags parameter, and import the read-only flag into it */
+
+                flags = info->flags;
+                if (tweak_no_auto)
+                        SET_FLAG(flags, SD_GPT_FLAG_NO_AUTO, info->no_auto);
+                if (tweak_read_only)
+                        SET_FLAG(flags, SD_GPT_FLAG_READ_ONLY, info->read_only);
+                if (tweak_growfs)
+                        SET_FLAG(flags, SD_GPT_FLAG_GROWFS, info->growfs);
+
+                r = fdisk_partition_set_attrs_as_uint64(pa, flags);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to update partition flags: %m");
+
+        } else if (tweak_no_auto || tweak_read_only || tweak_growfs) {
+                uint64_t old_flags, new_flags;
+
+                /* So we aren't supposed to update the full flags parameter, but we are supposed to update
+                 * the RO flag of it. */
+
+                r = fdisk_partition_get_attrs_as_uint64(pa, &old_flags);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get old partition flags: %m");
+
+                new_flags = old_flags;
+                if (tweak_no_auto)
+                        SET_FLAG(new_flags, SD_GPT_FLAG_NO_AUTO, info->no_auto);
+                if (tweak_read_only)
+                        SET_FLAG(new_flags, SD_GPT_FLAG_READ_ONLY, info->read_only);
+                if (tweak_growfs)
+                        SET_FLAG(new_flags, SD_GPT_FLAG_GROWFS, info->growfs);
+
+                if (new_flags != old_flags) {
+                        r = fdisk_partition_set_attrs_as_uint64(pa, new_flags);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to update partition flags: %m");
+                }
+        }
+
+        r = fdisk_set_partition(c, info->partno, pa);
+        if (r < 0)
+                return log_error_errno(r, "Failed to update partition: %m");
+
+        r = fdisk_write_disklabel(c);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write updated partition table: %m");
+
+        return 0;
+}
diff --git a/src/sysupdate/sysupdate-partition.h b/src/sysupdate/sysupdate-partition.h
new file mode 100644
index 0000000..672eb93
--- /dev/null
+++ b/src/sysupdate/sysupdate-partition.h
@@ -0,0 +1,49 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <sys/types.h>
+
+#include "sd-id128.h"
+
+#include "fdisk-util.h"
+#include "macro.h"
+
+typedef struct PartitionInfo PartitionInfo;
+
+typedef enum PartitionChange {
+        PARTITION_FLAGS           = 1 << 0,
+        PARTITION_NO_AUTO         = 1 << 1,
+        PARTITION_READ_ONLY       = 1 << 2,
+        PARTITION_GROWFS          = 1 << 3,
+        PARTITION_UUID            = 1 << 4,
+        PARTITION_LABEL           = 1 << 5,
+        _PARTITION_CHANGE_MAX     = (1 << 6) - 1, /* all of the above */
+        _PARTITION_CHANGE_INVALID = -EINVAL,
+} PartitionChange;
+
+struct PartitionInfo {
+        size_t partno;
+        uint64_t start, size;
+        uint64_t flags;
+        sd_id128_t type, uuid;
+        char *label;
+        char *device; /* Note that this might point to some non-existing path in case we operate on a loopback file */
+        bool no_auto:1;
+        bool read_only:1;
+        bool growfs:1;
+};
+
+#define PARTITION_INFO_NULL                     \
+        {                                       \
+                .partno = SIZE_MAX,             \
+                .start = UINT64_MAX,            \
+                .size = UINT64_MAX,             \
+        }
+
+void partition_info_destroy(PartitionInfo *p);
+
+int read_partition_info(struct fdisk_context *c, struct fdisk_table *t, size_t i, PartitionInfo *ret);
+
+int find_suitable_partition(const char *device, uint64_t space, sd_id128_t *partition_type, PartitionInfo *ret);
+int patch_partition(const char *device, const PartitionInfo *info, PartitionChange change);
diff --git a/src/sysupdate/sysupdate-pattern.c b/src/sysupdate/sysupdate-pattern.c
new file mode 100644
index 0000000..6d9c8d8
--- /dev/null
+++ b/src/sysupdate/sysupdate-pattern.c
@@ -0,0 +1,605 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "hexdecoct.h"
+#include "list.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "stdio-util.h"
+#include "string-util.h"
+#include "sysupdate-pattern.h"
+#include "sysupdate-util.h"
+
+typedef enum PatternElementType {
+        PATTERN_LITERAL,
+        PATTERN_VERSION,
+        PATTERN_PARTITION_UUID,
+        PATTERN_PARTITION_FLAGS,
+        PATTERN_MTIME,
+        PATTERN_MODE,
+        PATTERN_SIZE,
+        PATTERN_TRIES_DONE,
+        PATTERN_TRIES_LEFT,
+        PATTERN_NO_AUTO,
+        PATTERN_READ_ONLY,
+        PATTERN_GROWFS,
+        PATTERN_SHA256SUM,
+        _PATTERN_ELEMENT_TYPE_MAX,
+        _PATTERN_ELEMENT_TYPE_INVALID = -EINVAL,
+} PatternElementType;
+
+typedef struct PatternElement PatternElement;
+
+struct PatternElement {
+        PatternElementType type;
+        LIST_FIELDS(PatternElement, elements);
+        char literal[];
+};
+
+static PatternElement *pattern_element_free_all(PatternElement *e) {
+        PatternElement *p;
+
+        while ((p = LIST_POP(elements, e)))
+                free(p);
+
+        return NULL;
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(PatternElement*, pattern_element_free_all);
+
+static PatternElementType pattern_element_type_from_char(char c) {
+        switch (c) {
+        case 'v':
+                return PATTERN_VERSION;
+        case 'u':
+                return PATTERN_PARTITION_UUID;
+        case 'f':
+                return PATTERN_PARTITION_FLAGS;
+        case 't':
+                return PATTERN_MTIME;
+        case 'm':
+                return PATTERN_MODE;
+        case 's':
+                return PATTERN_SIZE;
+        case 'd':
+                return PATTERN_TRIES_DONE;
+        case 'l':
+                return PATTERN_TRIES_LEFT;
+        case 'a':
+                return PATTERN_NO_AUTO;
+        case 'r':
+                return PATTERN_READ_ONLY;
+        case 'g':
+                return PATTERN_GROWFS;
+        case 'h':
+                return PATTERN_SHA256SUM;
+        default:
+                return _PATTERN_ELEMENT_TYPE_INVALID;
+        }
+}
+
+static bool valid_char(char x) {
+
+        /* Let's refuse control characters here, and let's reserve some characters typically used in pattern
+         * languages so that we can use them later, possibly. */
+
+        if ((unsigned) x < ' ' || x >= 127)
+                return false;
+
+        return !IN_SET(x, '$', '*', '?', '[', ']', '!', '\\', '/', '|');
+}
+
+static int pattern_split(
+                const char *pattern,
+                PatternElement **ret) {
+
+        _cleanup_(pattern_element_free_allp) PatternElement *first = NULL;
+        bool at = false, last_literal = true;
+        PatternElement *last = NULL;
+        uint64_t mask_found = 0;
+        size_t l, k = 0;
+
+        assert(pattern);
+
+        l = strlen(pattern);
+
+        for (const char *e = pattern; *e != 0; e++) {
+                if (*e == '@') {
+                        if (!at) {
+                                at = true;
+                                continue;
+                        }
+
+                        /* Two at signs in a sequence, write out one */
+                        at = false;
+
+                } else if (at) {
+                        PatternElementType t;
+                        uint64_t bit;
+
+                        t = pattern_element_type_from_char(*e);
+                        if (t < 0)
+                                return log_debug_errno(t, "Unknown pattern field marker '@%c'.", *e);
+
+                        bit = UINT64_C(1) << t;
+                        if (mask_found & bit)
+                                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Pattern field marker '@%c' appears twice in pattern.", *e);
+
+                        /* We insist that two pattern field markers are separated by some literal string that
+                         * we can use to separate the fields when parsing. */
+                        if (!last_literal)
+                                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Found two pattern field markers without separating literal.");
+
+                        if (ret) {
+                                PatternElement *z;
+
+                                z = malloc(offsetof(PatternElement, literal));
+                                if (!z)
+                                        return -ENOMEM;
+
+                                z->type = t;
+                                LIST_INSERT_AFTER(elements, first, last, z);
+                                last = z;
+                        }
+
+                        mask_found |= bit;
+                        last_literal = at = false;
+                        continue;
+                }
+
+                if (!valid_char(*e))
+                        return log_debug_errno(
+                                        SYNTHETIC_ERRNO(EBADRQC),
+                                        "Invalid character 0x%0x in pattern, refusing.",
+                                        (unsigned) *e);
+
+                last_literal = true;
+
+                if (!ret)
+                        continue;
+
+                if (!last || last->type != PATTERN_LITERAL) {
+                        PatternElement *z;
+
+                        z = malloc0(offsetof(PatternElement, literal) + l + 1); /* l is an upper bound to all literal elements */
+                        if (!z)
+                                return -ENOMEM;
+
+                        z->type = PATTERN_LITERAL;
+                        k = 0;
+
+                        LIST_INSERT_AFTER(elements, first, last, z);
+                        last = z;
+                }
+
+                assert(last);
+                assert(last->type == PATTERN_LITERAL);
+
+                last->literal[k++] = *e;
+        }
+
+        if (at)
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Trailing @ character found, refusing.");
+        if (!(mask_found & (UINT64_C(1) << PATTERN_VERSION)))
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Version field marker '@v' not specified in pattern, refusing.");
+
+        if (ret)
+                *ret = TAKE_PTR(first);
+
+        return 0;
+}
+
+int pattern_match(const char *pattern, const char *s, InstanceMetadata *ret) {
+        _cleanup_(instance_metadata_destroy) InstanceMetadata found = INSTANCE_METADATA_NULL;
+        _cleanup_(pattern_element_free_allp) PatternElement *elements = NULL;
+        const char *p;
+        int r;
+
+        assert(pattern);
+        assert(s);
+
+        r = pattern_split(pattern, &elements);
+        if (r < 0)
+                return r;
+
+        p = s;
+        LIST_FOREACH(elements, e, elements) {
+                _cleanup_free_ char *t = NULL;
+                const char *n;
+
+                if (e->type == PATTERN_LITERAL) {
+                        const char *k;
+
+                        /* Skip literal fields */
+                        k = startswith(p, e->literal);
+                        if (!k)
+                                goto nope;
+
+                        p = k;
+                        continue;
+                }
+
+                if (e->elements_next) {
+                        /* The next element must be literal, as we use it to determine where to split */
+                        assert(e->elements_next->type == PATTERN_LITERAL);
+
+                        n = strstr(p, e->elements_next->literal);
+                        if (!n)
+                                goto nope;
+
+                } else
+                        /* End of the string */
+                        assert_se(n = strchr(p, 0));
+                t = strndup(p, n - p);
+                if (!t)
+                        return -ENOMEM;
+
+                switch (e->type) {
+
+                case PATTERN_VERSION:
+                        if (!version_is_valid(t)) {
+                                log_debug("Version string is not valid, refusing: %s", t);
+                                goto nope;
+                        }
+
+                        assert(!found.version);
+                        found.version = TAKE_PTR(t);
+                        break;
+
+                case PATTERN_PARTITION_UUID: {
+                        sd_id128_t id;
+
+                        if (sd_id128_from_string(t, &id) < 0)
+                                goto nope;
+
+                        assert(!found.partition_uuid_set);
+                        found.partition_uuid = id;
+                        found.partition_uuid_set = true;
+                        break;
+                }
+
+                case PATTERN_PARTITION_FLAGS: {
+                        uint64_t f;
+
+                        if (safe_atoux64(t, &f) < 0)
+                                goto nope;
+
+                        if (found.partition_flags_set && found.partition_flags != f)
+                                goto nope;
+
+                        assert(!found.partition_flags_set);
+                        found.partition_flags = f;
+                        found.partition_flags_set = true;
+                        break;
+                }
+
+                case PATTERN_MTIME: {
+                        uint64_t v;
+
+                        if (safe_atou64(t, &v) < 0)
+                                goto nope;
+                        if (v == USEC_INFINITY) /* Don't permit our internal special infinity value */
+                                goto nope;
+                        if (v / 1000000U > TIME_T_MAX) /* Make sure this fits in a timespec structure */
+                                goto nope;
+
+                        assert(found.mtime == USEC_INFINITY);
+                        found.mtime = v;
+                        break;
+                }
+
+                case PATTERN_MODE: {
+                        mode_t m;
+
+                        r = parse_mode(t, &m);
+                        if (r < 0)
+                                goto nope;
+                        if (m & ~0775) /* Don't allow world-writable files or suid files to be generated this way */
+                                goto nope;
+
+                        assert(found.mode == MODE_INVALID);
+                        found.mode = m;
+                        break;
+                }
+
+                case PATTERN_SIZE: {
+                        uint64_t u;
+
+                        r = safe_atou64(t, &u);
+                        if (r < 0)
+                                goto nope;
+                        if (u == UINT64_MAX)
+                                goto nope;
+
+                        assert(found.size == UINT64_MAX);
+                        found.size = u;
+                        break;
+                }
+
+                case PATTERN_TRIES_DONE: {
+                        uint64_t u;
+
+                        r = safe_atou64(t, &u);
+                        if (r < 0)
+                                goto nope;
+                        if (u == UINT64_MAX)
+                                goto nope;
+
+                        assert(found.tries_done == UINT64_MAX);
+                        found.tries_done = u;
+                        break;
+                }
+
+                case PATTERN_TRIES_LEFT: {
+                        uint64_t u;
+
+                        r = safe_atou64(t, &u);
+                        if (r < 0)
+                                goto nope;
+                        if (u == UINT64_MAX)
+                                goto nope;
+
+                        assert(found.tries_left == UINT64_MAX);
+                        found.tries_left = u;
+                        break;
+                }
+
+                case PATTERN_NO_AUTO:
+                        r = parse_boolean(t);
+                        if (r < 0)
+                                goto nope;
+
+                        assert(found.no_auto < 0);
+                        found.no_auto = r;
+                        break;
+
+                case PATTERN_READ_ONLY:
+                        r = parse_boolean(t);
+                        if (r < 0)
+                                goto nope;
+
+                        assert(found.read_only < 0);
+                        found.read_only = r;
+                        break;
+
+                case PATTERN_GROWFS:
+                        r = parse_boolean(t);
+                        if (r < 0)
+                                goto nope;
+
+                        assert(found.growfs < 0);
+                        found.growfs = r;
+                        break;
+
+                case PATTERN_SHA256SUM: {
+                        _cleanup_free_ void *d = NULL;
+                        size_t l;
+
+                        if (strlen(t) != sizeof(found.sha256sum) * 2)
+                                goto nope;
+
+                        r = unhexmem(t, sizeof(found.sha256sum) * 2, &d, &l);
+                        if (r == -ENOMEM)
+                                return r;
+                        if (r < 0)
+                                goto nope;
+
+                        assert(!found.sha256sum_set);
+                        assert(l == sizeof(found.sha256sum));
+                        memcpy(found.sha256sum, d, l);
+                        found.sha256sum_set = true;
+                        break;
+                }
+
+                default:
+                        assert_se("unexpected pattern element");
+                }
+
+                p = n;
+        }
+
+        if (ret) {
+                *ret = found;
+                found = (InstanceMetadata) INSTANCE_METADATA_NULL;
+        }
+
+        return true;
+
+nope:
+        if (ret)
+                *ret = (InstanceMetadata) INSTANCE_METADATA_NULL;
+
+        return false;
+}
+
+int pattern_match_many(char **patterns, const char *s, InstanceMetadata *ret) {
+        _cleanup_(instance_metadata_destroy) InstanceMetadata found = INSTANCE_METADATA_NULL;
+        int r;
+
+        STRV_FOREACH(p, patterns) {
+                r = pattern_match(*p, s, &found);
+                if (r < 0)
+                        return r;
+                if (r > 0) {
+                        if (ret) {
+                                *ret = found;
+                                found = (InstanceMetadata) INSTANCE_METADATA_NULL;
+                        }
+
+                        return true;
+                }
+        }
+
+        if (ret)
+                *ret = (InstanceMetadata) INSTANCE_METADATA_NULL;
+
+        return false;
+}
+
+int pattern_valid(const char *pattern) {
+        int r;
+
+        r = pattern_split(pattern, NULL);
+        if (r == -EINVAL)
+                return false;
+        if (r < 0)
+                return r;
+
+        return true;
+}
+
+int pattern_format(
+                const char *pattern,
+                const InstanceMetadata *fields,
+                char **ret) {
+
+        _cleanup_(pattern_element_free_allp) PatternElement *elements = NULL;
+        _cleanup_free_ char *j = NULL;
+        int r;
+
+        assert(pattern);
+        assert(fields);
+        assert(ret);
+
+        r = pattern_split(pattern, &elements);
+        if (r < 0)
+                return r;
+
+        LIST_FOREACH(elements, e, elements) {
+
+                switch (e->type) {
+
+                case PATTERN_LITERAL:
+                        if (!strextend(&j, e->literal))
+                                return -ENOMEM;
+
+                        break;
+
+                case PATTERN_VERSION:
+                        if (!fields->version)
+                                return -ENXIO;
+
+                        if (!strextend(&j, fields->version))
+                                return -ENOMEM;
+                        break;
+
+                case PATTERN_PARTITION_UUID: {
+                        char formatted[SD_ID128_STRING_MAX];
+
+                        if (!fields->partition_uuid_set)
+                                return -ENXIO;
+
+                        if (!strextend(&j, sd_id128_to_string(fields->partition_uuid, formatted)))
+                                return -ENOMEM;
+
+                        break;
+                }
+
+                case PATTERN_PARTITION_FLAGS:
+                        if (!fields->partition_flags_set)
+                                return -ENXIO;
+
+                        r = strextendf(&j, "%" PRIx64, fields->partition_flags);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case PATTERN_MTIME:
+                        if (fields->mtime == USEC_INFINITY)
+                                return -ENXIO;
+
+                        r = strextendf(&j, "%" PRIu64, fields->mtime);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case PATTERN_MODE:
+                        if (fields->mode == MODE_INVALID)
+                                return -ENXIO;
+
+                        r = strextendf(&j, "%03o", fields->mode);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case PATTERN_SIZE:
+                        if (fields->size == UINT64_MAX)
+                                return -ENXIO;
+
+                        r = strextendf(&j, "%" PRIu64, fields->size);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case PATTERN_TRIES_DONE:
+                        if (fields->tries_done == UINT64_MAX)
+                                return -ENXIO;
+
+                        r = strextendf(&j, "%" PRIu64, fields->tries_done);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case PATTERN_TRIES_LEFT:
+                        if (fields->tries_left == UINT64_MAX)
+                                return -ENXIO;
+
+                        r = strextendf(&j, "%" PRIu64, fields->tries_left);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case PATTERN_NO_AUTO:
+                        if (fields->no_auto < 0)
+                                return -ENXIO;
+
+                        if (!strextend(&j, one_zero(fields->no_auto)))
+                                return -ENOMEM;
+
+                        break;
+
+                case PATTERN_READ_ONLY:
+                        if (fields->read_only < 0)
+                                return -ENXIO;
+
+                        if (!strextend(&j, one_zero(fields->read_only)))
+                                return -ENOMEM;
+
+                        break;
+
+                case PATTERN_GROWFS:
+                        if (fields->growfs < 0)
+                                return -ENXIO;
+
+                        if (!strextend(&j, one_zero(fields->growfs)))
+                                return -ENOMEM;
+
+                        break;
+
+                case PATTERN_SHA256SUM: {
+                        _cleanup_free_ char *h = NULL;
+
+                        if (!fields->sha256sum_set)
+                                return -ENXIO;
+
+                        h = hexmem(fields->sha256sum, sizeof(fields->sha256sum));
+                        if (!h)
+                                return -ENOMEM;
+
+                        if (!strextend(&j, h))
+                                return -ENOMEM;
+
+                        break;
+                }
+
+                default:
+                        assert_not_reached();
+                }
+        }
+
+        *ret = TAKE_PTR(j);
+        return 0;
+}
diff --git a/src/sysupdate/sysupdate-pattern.h b/src/sysupdate/sysupdate-pattern.h
new file mode 100644
index 0000000..1c60fa0
--- /dev/null
+++ b/src/sysupdate/sysupdate-pattern.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+#include "sysupdate-instance.h"
+#include "time-util.h"
+
+int pattern_match(const char *pattern, const char *s, InstanceMetadata *ret);
+int pattern_match_many(char **patterns, const char *s, InstanceMetadata *ret);
+int pattern_valid(const char *pattern);
+int pattern_format(const char *pattern, const InstanceMetadata *fields, char **ret);
diff --git a/src/sysupdate/sysupdate-resource.c b/src/sysupdate/sysupdate-resource.c
new file mode 100644
index 0000000..e1e260a
--- /dev/null
+++ b/src/sysupdate/sysupdate-resource.c
@@ -0,0 +1,648 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "alloc-util.h"
+#include "blockdev-util.h"
+#include "chase-symlinks.h"
+#include "device-util.h"
+#include "devnum-util.h"
+#include "dirent-util.h"
+#include "env-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "glyph-util.h"
+#include "gpt.h"
+#include "hexdecoct.h"
+#include "import-util.h"
+#include "macro.h"
+#include "process-util.h"
+#include "sort-util.h"
+#include "string-table.h"
+#include "sysupdate-cache.h"
+#include "sysupdate-instance.h"
+#include "sysupdate-pattern.h"
+#include "sysupdate-resource.h"
+#include "sysupdate.h"
+#include "utf8.h"
+
+void resource_destroy(Resource *rr) {
+        assert(rr);
+
+        free(rr->path);
+        strv_free(rr->patterns);
+
+        for (size_t i = 0; i < rr->n_instances; i++)
+                instance_free(rr->instances[i]);
+        free(rr->instances);
+}
+
+static int resource_add_instance(
+                Resource *rr,
+                const char *path,
+                const InstanceMetadata *f,
+                Instance **ret) {
+
+        Instance *i;
+        int r;
+
+        assert(rr);
+        assert(path);
+        assert(f);
+        assert(f->version);
+
+        if (!GREEDY_REALLOC(rr->instances, rr->n_instances + 1))
+                return log_oom();
+
+        r = instance_new(rr, path, f, &i);
+        if (r < 0)
+                return r;
+
+        rr->instances[rr->n_instances++] = i;
+
+        if (ret)
+                *ret = i;
+
+        return 0;
+}
+
+static int resource_load_from_directory(
+                Resource *rr,
+                mode_t m) {
+
+        _cleanup_(closedirp) DIR *d = NULL;
+        int r;
+
+        assert(rr);
+        assert(IN_SET(rr->type, RESOURCE_TAR, RESOURCE_REGULAR_FILE, RESOURCE_DIRECTORY, RESOURCE_SUBVOLUME));
+        assert(IN_SET(m, S_IFREG, S_IFDIR));
+
+        d = opendir(rr->path);
+        if (!d) {
+                if (errno == ENOENT) {
+                        log_debug("Directory %s does not exist, not loading any resources.", rr->path);
+                        return 0;
+                }
+
+                return log_error_errno(errno, "Failed to open directory '%s': %m", rr->path);
+        }
+
+        for (;;) {
+                _cleanup_(instance_metadata_destroy) InstanceMetadata extracted_fields = INSTANCE_METADATA_NULL;
+                _cleanup_free_ char *joined = NULL;
+                Instance *instance;
+                struct dirent *de;
+                struct stat st;
+
+                errno = 0;
+                de = readdir_no_dot(d);
+                if (!de) {
+                        if (errno != 0)
+                                return log_error_errno(errno, "Failed to read directory '%s': %m", rr->path);
+                        break;
+                }
+
+                switch (de->d_type) {
+
+                case DT_UNKNOWN:
+                        break;
+
+                case DT_DIR:
+                        if (m != S_IFDIR)
+                                continue;
+
+                        break;
+
+                case DT_REG:
+                        if (m != S_IFREG)
+                                continue;
+                        break;
+
+                default:
+                        continue;
+                }
+
+                if (fstatat(dirfd(d), de->d_name, &st, AT_NO_AUTOMOUNT) < 0) {
+                        if (errno == ENOENT) /* Gone by now? */
+                                continue;
+
+                        return log_error_errno(errno, "Failed to stat %s/%s: %m", rr->path, de->d_name);
+                }
+
+                if ((st.st_mode & S_IFMT) != m)
+                        continue;
+
+                r = pattern_match_many(rr->patterns, de->d_name, &extracted_fields);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to match pattern: %m");
+                if (r == 0)
+                        continue;
+
+                joined = path_join(rr->path, de->d_name);
+                if (!joined)
+                        return log_oom();
+
+                r = resource_add_instance(rr, joined, &extracted_fields, &instance);
+                if (r < 0)
+                        return r;
+
+                /* Inherit these from the source, if not explicitly overwritten */
+                if (instance->metadata.mtime == USEC_INFINITY)
+                        instance->metadata.mtime = timespec_load(&st.st_mtim) ?: USEC_INFINITY;
+
+                if (instance->metadata.mode == MODE_INVALID)
+                        instance->metadata.mode = st.st_mode & 0775; /* mask out world-writability and suid and stuff, for safety */
+        }
+
+        return 0;
+}
+
+static int resource_load_from_blockdev(Resource *rr) {
+        _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
+        _cleanup_(fdisk_unref_tablep) struct fdisk_table *t = NULL;
+        size_t n_partitions;
+        int r;
+
+        assert(rr);
+
+        c = fdisk_new_context();
+        if (!c)
+                return log_oom();
+
+        r = fdisk_assign_device(c, rr->path, /* readonly= */ true);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open device '%s': %m", rr->path);
+
+        if (!fdisk_is_labeltype(c, FDISK_DISKLABEL_GPT))
+                return log_error_errno(SYNTHETIC_ERRNO(EHWPOISON), "Disk %s has no GPT disk label, not suitable.", rr->path);
+
+        r = fdisk_get_partitions(c, &t);
+        if (r < 0)
+                return log_error_errno(r, "Failed to acquire partition table: %m");
+
+        n_partitions = fdisk_table_get_nents(t);
+        for (size_t i = 0; i < n_partitions; i++)  {
+                _cleanup_(instance_metadata_destroy) InstanceMetadata extracted_fields = INSTANCE_METADATA_NULL;
+                _cleanup_(partition_info_destroy) PartitionInfo pinfo = PARTITION_INFO_NULL;
+                Instance *instance;
+
+                r = read_partition_info(c, t, i, &pinfo);
+                if (r < 0)
+                        return r;
+                if (r == 0) /* not assigned */
+                        continue;
+
+                /* Check if partition type matches */
+                if (rr->partition_type_set && !sd_id128_equal(pinfo.type, rr->partition_type.uuid))
+                        continue;
+
+                /* A label of "_empty" means "not used so far" for us */
+                if (streq_ptr(pinfo.label, "_empty")) {
+                        rr->n_empty++;
+                        continue;
+                }
+
+                r = pattern_match_many(rr->patterns, pinfo.label, &extracted_fields);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to match pattern: %m");
+                if (r == 0)
+                        continue;
+
+                r = resource_add_instance(rr, pinfo.device, &extracted_fields, &instance);
+                if (r < 0)
+                        return r;
+
+                instance->partition_info = pinfo;
+                pinfo = (PartitionInfo) PARTITION_INFO_NULL;
+
+                /* Inherit data from source if not configured explicitly */
+                if (!instance->metadata.partition_uuid_set) {
+                        instance->metadata.partition_uuid = instance->partition_info.uuid;
+                        instance->metadata.partition_uuid_set = true;
+                }
+
+                if (!instance->metadata.partition_flags_set) {
+                        instance->metadata.partition_flags = instance->partition_info.flags;
+                        instance->metadata.partition_flags_set = true;
+                }
+
+                if (instance->metadata.read_only < 0)
+                        instance->metadata.read_only = instance->partition_info.read_only;
+        }
+
+        return 0;
+}
+
+static int download_manifest(
+                const char *url,
+                bool verify_signature,
+                char **ret_buffer,
+                size_t *ret_size) {
+
+        _cleanup_free_ char *buffer = NULL, *suffixed_url = NULL;
+        _cleanup_(close_pairp) int pfd[2] = PIPE_EBADF;
+        _cleanup_fclose_ FILE *manifest = NULL;
+        size_t size = 0;
+        pid_t pid;
+        int r;
+
+        assert(url);
+        assert(ret_buffer);
+        assert(ret_size);
+
+        /* Download a SHA256SUMS file as manifest */
+
+        r = import_url_append_component(url, "SHA256SUMS", &suffixed_url);
+        if (r < 0)
+                return log_error_errno(r, "Failed to append SHA256SUMS to URL: %m");
+
+        if (pipe2(pfd, O_CLOEXEC) < 0)
+                return log_error_errno(errno, "Failed to allocate pipe: %m");
+
+        log_info("%s Acquiring manifest file %s%s", special_glyph(SPECIAL_GLYPH_DOWNLOAD),
+                 suffixed_url, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        r = safe_fork("(sd-pull)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                /* Child */
+
+                const char *cmdline[] = {
+                        "systemd-pull",
+                        "raw",
+                        "--direct",                        /* just download the specified URL, don't download anything else */
+                        "--verify", verify_signature ? "signature" : "no", /* verify the manifest file */
+                        suffixed_url,
+                        "-",                               /* write to stdout */
+                        NULL
+                };
+
+                pfd[0] = safe_close(pfd[0]);
+
+                r = rearrange_stdio(-EBADF, pfd[1], STDERR_FILENO);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to rearrange stdin/stdout: %m");
+                        _exit(EXIT_FAILURE);
+                }
+
+                (void) unsetenv("NOTIFY_SOCKET");
+                execv(pull_binary_path(), (char *const*) cmdline);
+                log_error_errno(errno, "Failed to execute %s tool: %m", pull_binary_path());
+                _exit(EXIT_FAILURE);
+        };
+
+        pfd[1] = safe_close(pfd[1]);
+
+        /* We'll first load the entire manifest into memory before parsing it. That's because the
+         * systemd-pull tool can validate the download only after its completion, but still pass the data to
+         * us as it runs. We thus need to check the return value of the process *before* parsing, to be
+         * reasonably safe. */
+
+        manifest = fdopen(pfd[0], "r");
+        if (!manifest)
+                return log_error_errno(errno, "Failed allocate FILE object for manifest file: %m");
+
+        TAKE_FD(pfd[0]);
+
+        r = read_full_stream(manifest, &buffer, &size);
+        if (r < 0)
+                return log_error_errno(r, "Failed to read manifest file from child: %m");
+
+        manifest = safe_fclose(manifest);
+
+        r = wait_for_terminate_and_check("(sd-pull)", pid, WAIT_LOG);
+        if (r < 0)
+                return r;
+        if (r != 0)
+                return -EPROTO;
+
+        *ret_buffer = TAKE_PTR(buffer);
+        *ret_size = size;
+
+        return 0;
+}
+
+static int resource_load_from_web(
+                Resource *rr,
+                bool verify,
+                Hashmap **web_cache) {
+
+        size_t manifest_size = 0, left = 0;
+        _cleanup_free_ char *buf = NULL;
+        const char *manifest, *p;
+        size_t line_nr = 1;
+        WebCacheItem *ci;
+        int r;
+
+        assert(rr);
+
+        ci = web_cache ? web_cache_get_item(*web_cache, rr->path, verify) : NULL;
+        if (ci) {
+                log_debug("Manifest web cache hit for %s.", rr->path);
+
+                manifest = (char*) ci->data;
+                manifest_size = ci->size;
+        } else {
+                log_debug("Manifest web cache miss for %s.", rr->path);
+
+                r = download_manifest(rr->path, verify, &buf, &manifest_size);
+                if (r < 0)
+                        return r;
+
+                manifest = buf;
+        }
+
+        if (memchr(manifest, 0, manifest_size))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Manifest file has embedded NUL byte, refusing.");
+        if (!utf8_is_valid_n(manifest, manifest_size))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Manifest file is not valid UTF-8, refusing.");
+
+        p = manifest;
+        left = manifest_size;
+
+        while (left > 0) {
+                _cleanup_(instance_metadata_destroy) InstanceMetadata extracted_fields = INSTANCE_METADATA_NULL;
+                _cleanup_free_ char *fn = NULL;
+                _cleanup_free_ void *h = NULL;
+                Instance *instance;
+                const char *e;
+                size_t hlen;
+
+                /* 64 character hash + separator + filename + newline */
+                if (left < 67)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Corrupt manifest at line %zu, refusing.", line_nr);
+
+                if (p[0] == '\\')
+                        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "File names with escapes not supported in manifest at line %zu, refusing.", line_nr);
+
+                r = unhexmem(p, 64, &h, &hlen);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse digest at manifest line %zu, refusing.", line_nr);
+
+                p += 64, left -= 64;
+
+                if (*p != ' ')
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing space separator at manifest line %zu, refusing.", line_nr);
+                p++, left--;
+
+                if (!IN_SET(*p, '*', ' '))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing binary/text input marker at manifest line %zu, refusing.", line_nr);
+                p++, left--;
+
+                e = memchr(p, '\n', left);
+                if (!e)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Truncated manifest file at line %zu, refusing.", line_nr);
+                if (e == p)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Empty filename specified at manifest line %zu, refusing.", line_nr);
+
+                fn = strndup(p, e - p);
+                if (!fn)
+                        return log_oom();
+
+                if (!filename_is_valid(fn))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid filename specified at manifest line %zu, refusing.", line_nr);
+                if (string_has_cc(fn, NULL))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Filename contains control characters at manifest line %zu, refusing.", line_nr);
+
+                r = pattern_match_many(rr->patterns, fn, &extracted_fields);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to match pattern: %m");
+                if (r > 0) {
+                        _cleanup_free_ char *path = NULL;
+
+                        r = import_url_append_component(rr->path, fn, &path);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to build instance URL: %m");
+
+                        r = resource_add_instance(rr, path, &extracted_fields, &instance);
+                        if (r < 0)
+                                return r;
+
+                        assert(hlen == sizeof(instance->metadata.sha256sum));
+
+                        if (instance->metadata.sha256sum_set) {
+                                if (memcmp(instance->metadata.sha256sum, h, hlen) != 0)
+                                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "SHA256 sum parsed from filename and manifest don't match at line %zu, refusing.", line_nr);
+                        } else {
+                                memcpy(instance->metadata.sha256sum, h, hlen);
+                                instance->metadata.sha256sum_set = true;
+                        }
+                }
+
+                left -= (e - p) + 1;
+                p = e + 1;
+
+                line_nr++;
+        }
+
+        if (!ci && web_cache) {
+                r = web_cache_add_item(web_cache, rr->path, verify, manifest, manifest_size);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to add manifest '%s' to cache, ignoring: %m", rr->path);
+                else
+                        log_debug("Added manifest '%s' to cache.", rr->path);
+        }
+
+        return 0;
+}
+
+static int instance_cmp(Instance *const*a, Instance *const*b) {
+        int r;
+
+        assert(a);
+        assert(b);
+        assert(*a);
+        assert(*b);
+        assert((*a)->metadata.version);
+        assert((*b)->metadata.version);
+
+        /* Newest version at the beginning */
+        r = strverscmp_improved((*a)->metadata.version, (*b)->metadata.version);
+        if (r != 0)
+                return -r;
+
+        /* Instances don't have to be uniquely named (uniqueness on partition tables is not enforced at all,
+         * and since we allow multiple matching patterns not even in directories they are unique). Hence
+         * let's order by path as secondary ordering key. */
+        return path_compare((*a)->path, (*b)->path);
+}
+
+int resource_load_instances(Resource *rr, bool verify, Hashmap **web_cache) {
+        int r;
+
+        assert(rr);
+
+        switch (rr->type) {
+
+        case RESOURCE_TAR:
+        case RESOURCE_REGULAR_FILE:
+                r = resource_load_from_directory(rr, S_IFREG);
+                break;
+
+        case RESOURCE_DIRECTORY:
+        case RESOURCE_SUBVOLUME:
+                r = resource_load_from_directory(rr, S_IFDIR);
+                break;
+
+        case RESOURCE_PARTITION:
+                r = resource_load_from_blockdev(rr);
+                break;
+
+        case RESOURCE_URL_FILE:
+        case RESOURCE_URL_TAR:
+                r = resource_load_from_web(rr, verify, web_cache);
+                break;
+
+        default:
+                assert_not_reached();
+        }
+        if (r < 0)
+                return r;
+
+        typesafe_qsort(rr->instances, rr->n_instances, instance_cmp);
+        return 0;
+}
+
+Instance* resource_find_instance(Resource *rr, const char *version) {
+        Instance key = {
+                .metadata.version = (char*) version,
+        }, *k = &key;
+
+        return typesafe_bsearch(&k, rr->instances, rr->n_instances, instance_cmp);
+}
+
+int resource_resolve_path(
+                Resource *rr,
+                const char *root,
+                const char *node) {
+
+        _cleanup_free_ char *p = NULL;
+        dev_t d;
+        int r;
+
+        assert(rr);
+
+        if (rr->path_auto) {
+                struct stat orig_root_stats;
+
+                /* NB: If the root mount has been replaced by some form of volatile file system (overlayfs),
+                 * the original root block device node is symlinked in /run/systemd/volatile-root. Let's
+                 * follow that link here. If that doesn't exist, we check the backing device of "/usr". We
+                 * don't actually check the backing device of the root fs "/", in order to support
+                 * environments where the root fs is a tmpfs, and the OS itself placed exclusively in
+                 * /usr/. */
+
+                if (rr->type != RESOURCE_PARTITION)
+                        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                               "Automatic root path discovery only supported for partition resources.");
+
+                if (node) { /* If --image= is specified, directly use the loopback device */
+                        r = free_and_strdup_warn(&rr->path, node);
+                        if (r < 0)
+                                return r;
+
+                        return 0;
+                }
+
+                if (root)
+                        return log_error_errno(SYNTHETIC_ERRNO(EPERM),
+                                               "Block device is not allowed when using --root= mode.");
+
+                r = stat("/run/systemd/volatile-root", &orig_root_stats);
+                if (r < 0) {
+                        if (errno == ENOENT) /* volatile-root not found */
+                                r = get_block_device_harder("/usr/", &d);
+                        else
+                                return log_error_errno(r, "Failed to stat /run/systemd/volatile-root: %m");
+                } else if (!S_ISBLK(orig_root_stats.st_mode)) /* symlink was present but not block device */
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK), "/run/systemd/volatile-root is not linked to a block device.");
+                else /* symlink was present and a block device */
+                        d = orig_root_stats.st_rdev;
+
+        } else if (rr->type == RESOURCE_PARTITION) {
+                _cleanup_close_ int fd = -EBADF, real_fd = -EBADF;
+                _cleanup_free_ char *resolved = NULL;
+                struct stat st;
+
+                r = chase_symlinks(rr->path, root, CHASE_PREFIX_ROOT, &resolved, &fd);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to resolve '%s': %m", rr->path);
+
+                if (fstat(fd, &st) < 0)
+                        return log_error_errno(errno, "Failed to stat '%s': %m", resolved);
+
+                if (S_ISBLK(st.st_mode) && root)
+                        return log_error_errno(SYNTHETIC_ERRNO(EPERM), "When using --root= or --image= access to device nodes is prohibited.");
+
+                if (S_ISREG(st.st_mode) || S_ISBLK(st.st_mode)) {
+                        /* Not a directory, hence no need to find backing block device for the path */
+                        free_and_replace(rr->path, resolved);
+                        return 0;
+                }
+
+                if (!S_ISDIR(st.st_mode))
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOTDIR), "Target path '%s' does not refer to regular file, directory or block device, refusing.",  rr->path);
+
+                if (node) { /* If --image= is specified all file systems are backed by the same loopback device, hence shortcut things. */
+                        r = free_and_strdup_warn(&rr->path, node);
+                        if (r < 0)
+                                return r;
+
+                        return 0;
+                }
+
+                real_fd = fd_reopen(fd, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+                if (real_fd < 0)
+                        return log_error_errno(real_fd, "Failed to convert O_PATH file descriptor for %s to regular file descriptor: %m", rr->path);
+
+                r = get_block_device_harder_fd(fd, &d);
+
+        } else if (RESOURCE_IS_FILESYSTEM(rr->type) && root) {
+                _cleanup_free_ char *resolved = NULL;
+
+                r = chase_symlinks(rr->path, root, CHASE_PREFIX_ROOT, &resolved, NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to resolve '%s': %m", rr->path);
+
+                free_and_replace(rr->path, resolved);
+                return 0;
+        } else
+                return 0; /* Otherwise assume there's nothing to resolve */
+
+        if (r < 0)
+                return log_error_errno(r, "Failed to determine block device of file system: %m");
+
+        r = block_get_whole_disk(d, &d);
+        if (r < 0)
+                return log_error_errno(r, "Failed to find whole disk device for partition backing file system: %m");
+        if (r == 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "File system is not placed on a partition block device, cannot determine whole block device backing root file system.");
+
+        r = devname_from_devnum(S_IFBLK, d, &p);
+        if (r < 0)
+                return r;
+
+        if (rr->path)
+                log_info("Automatically discovered block device '%s' from '%s'.", p, rr->path);
+        else
+                log_info("Automatically discovered root block device '%s'.", p);
+
+        free_and_replace(rr->path, p);
+        return 1;
+}
+
+static const char *resource_type_table[_RESOURCE_TYPE_MAX] = {
+        [RESOURCE_URL_FILE]     = "url-file",
+        [RESOURCE_URL_TAR]      = "url-tar",
+        [RESOURCE_TAR]          = "tar",
+        [RESOURCE_PARTITION]    = "partition",
+        [RESOURCE_REGULAR_FILE] = "regular-file",
+        [RESOURCE_DIRECTORY]    = "directory",
+        [RESOURCE_SUBVOLUME]    = "subvolume",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(resource_type, ResourceType);
diff --git a/src/sysupdate/sysupdate-resource.h b/src/sysupdate/sysupdate-resource.h
new file mode 100644
index 0000000..3209988
--- /dev/null
+++ b/src/sysupdate/sysupdate-resource.h
@@ -0,0 +1,96 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "gpt.h"
+#include "hashmap.h"
+#include "macro.h"
+
+/* Forward declare this type so that the headers below can use it */
+typedef struct Resource Resource;
+
+#include "sysupdate-instance.h"
+
+typedef enum ResourceType {
+        RESOURCE_URL_FILE,
+        RESOURCE_URL_TAR,
+        RESOURCE_TAR,
+        RESOURCE_PARTITION,
+        RESOURCE_REGULAR_FILE,
+        RESOURCE_DIRECTORY,
+        RESOURCE_SUBVOLUME,
+        _RESOURCE_TYPE_MAX,
+        _RESOURCE_TYPE_INVALID = -EINVAL,
+} ResourceType;
+
+static inline bool RESOURCE_IS_SOURCE(ResourceType t) {
+        return IN_SET(t,
+                      RESOURCE_URL_FILE,
+                      RESOURCE_URL_TAR,
+                      RESOURCE_TAR,
+                      RESOURCE_REGULAR_FILE,
+                      RESOURCE_DIRECTORY,
+                      RESOURCE_SUBVOLUME);
+}
+
+static inline bool RESOURCE_IS_TARGET(ResourceType t) {
+        return IN_SET(t,
+                      RESOURCE_PARTITION,
+                      RESOURCE_REGULAR_FILE,
+                      RESOURCE_DIRECTORY,
+                      RESOURCE_SUBVOLUME);
+}
+
+/* Returns true for all resources that deal with file system objects, i.e. where we operate on top of the
+ * file system layer, instead of below. */
+static inline bool RESOURCE_IS_FILESYSTEM(ResourceType t) {
+        return IN_SET(t,
+                      RESOURCE_TAR,
+                      RESOURCE_REGULAR_FILE,
+                      RESOURCE_DIRECTORY,
+                      RESOURCE_SUBVOLUME);
+}
+
+static inline bool RESOURCE_IS_TAR(ResourceType t) {
+        return IN_SET(t,
+                      RESOURCE_TAR,
+                      RESOURCE_URL_TAR);
+}
+
+static inline bool RESOURCE_IS_URL(ResourceType t) {
+        return IN_SET(t,
+                      RESOURCE_URL_TAR,
+                      RESOURCE_URL_FILE);
+}
+
+struct Resource {
+        ResourceType type;
+
+        /* Where to look for instances, and what to match precisely */
+        char *path;
+        bool path_auto; /* automatically find root path (only available if target resource, not source resource) */
+        char **patterns;
+        GptPartitionType partition_type;
+        bool partition_type_set;
+
+        /* All instances of this resource we found */
+        Instance **instances;
+        size_t n_instances;
+
+        /* If this is a partition resource (RESOURCE_PARTITION), then how many partition slots are currently unassigned, that we can use */
+        size_t n_empty;
+};
+
+void resource_destroy(Resource *rr);
+
+int resource_load_instances(Resource *rr, bool verify, Hashmap **web_cache);
+
+Instance* resource_find_instance(Resource *rr, const char *version);
+
+int resource_resolve_path(Resource *rr, const char *root, const char *node);
+
+ResourceType resource_type_from_string(const char *s) _pure_;
+const char *resource_type_to_string(ResourceType t) _const_;
diff --git a/src/sysupdate/sysupdate-transfer.c b/src/sysupdate/sysupdate-transfer.c
new file mode 100644
index 0000000..0c3d65a
--- /dev/null
+++ b/src/sysupdate/sysupdate-transfer.c
@@ -0,0 +1,1243 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "sd-id128.h"
+
+#include "alloc-util.h"
+#include "blockdev-util.h"
+#include "chase-symlinks.h"
+#include "conf-parser.h"
+#include "dirent-util.h"
+#include "fd-util.h"
+#include "glyph-util.h"
+#include "gpt.h"
+#include "hexdecoct.h"
+#include "install-file.h"
+#include "parse-helpers.h"
+#include "parse-util.h"
+#include "process-util.h"
+#include "rm-rf.h"
+#include "specifier.h"
+#include "stat-util.h"
+#include "stdio-util.h"
+#include "strv.h"
+#include "sync-util.h"
+#include "sysupdate-pattern.h"
+#include "sysupdate-resource.h"
+#include "sysupdate-transfer.h"
+#include "sysupdate-util.h"
+#include "sysupdate.h"
+#include "tmpfile-util.h"
+#include "web-util.h"
+
+/* Default value for InstancesMax= for fs object targets */
+#define DEFAULT_FILE_INSTANCES_MAX 3
+
+Transfer *transfer_free(Transfer *t) {
+        if (!t)
+                return NULL;
+
+        t->temporary_path = rm_rf_subvolume_and_free(t->temporary_path);
+
+        free(t->definition_path);
+        free(t->min_version);
+        strv_free(t->protected_versions);
+        free(t->current_symlink);
+        free(t->final_path);
+
+        partition_info_destroy(&t->partition_info);
+
+        resource_destroy(&t->source);
+        resource_destroy(&t->target);
+
+        return mfree(t);
+}
+
+Transfer *transfer_new(void) {
+        Transfer *t;
+
+        t = new(Transfer, 1);
+        if (!t)
+                return NULL;
+
+        *t = (Transfer) {
+                .source.type = _RESOURCE_TYPE_INVALID,
+                .target.type = _RESOURCE_TYPE_INVALID,
+                .remove_temporary = true,
+                .mode = MODE_INVALID,
+                .tries_left = UINT64_MAX,
+                .tries_done = UINT64_MAX,
+                .verify = true,
+
+                /* the three flags, as configured by the user */
+                .no_auto = -1,
+                .read_only = -1,
+                .growfs = -1,
+
+                /* the read only flag, as ultimately determined */
+                .install_read_only = -1,
+
+                .partition_info = PARTITION_INFO_NULL,
+        };
+
+        return t;
+}
+
+static const Specifier specifier_table[] = {
+        COMMON_SYSTEM_SPECIFIERS,
+        COMMON_TMP_SPECIFIERS,
+        {}
+};
+
+static int config_parse_protect_version(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_free_ char *resolved = NULL;
+        char ***protected_versions = ASSERT_PTR(data);
+        int r;
+
+        assert(rvalue);
+
+        r = specifier_printf(rvalue, NAME_MAX, specifier_table, arg_root, NULL, &resolved);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to expand specifiers in ProtectVersion=, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        if (!version_is_valid(resolved))  {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "ProtectVersion= string is not valid, ignoring: %s", resolved);
+                return 0;
+        }
+
+        r = strv_extend(protected_versions, resolved);
+        if (r < 0)
+                return log_oom();
+
+        return 0;
+}
+
+static int config_parse_min_version(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_free_ char *resolved = NULL;
+        char **version = ASSERT_PTR(data);
+        int r;
+
+        assert(rvalue);
+
+        r = specifier_printf(rvalue, NAME_MAX, specifier_table, arg_root, NULL, &resolved);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to expand specifiers in MinVersion=, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        if (!version_is_valid(rvalue)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "MinVersion= string is not valid, ignoring: %s", resolved);
+                return 0;
+        }
+
+        return free_and_replace(*version, resolved);
+}
+
+static int config_parse_current_symlink(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_free_ char *resolved = NULL;
+        char **current_symlink = ASSERT_PTR(data);
+        int r;
+
+        assert(rvalue);
+
+        r = specifier_printf(rvalue, NAME_MAX, specifier_table, arg_root, NULL, &resolved);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to expand specifiers in CurrentSymlink=, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        r = path_simplify_and_warn(resolved, 0, unit, filename, line, lvalue);
+        if (r < 0)
+                return 0;
+
+        return free_and_replace(*current_symlink, resolved);
+}
+
+static int config_parse_instances_max(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint64_t *instances_max = data, i;
+        int r;
+
+        assert(rvalue);
+        assert(data);
+
+        if (isempty(rvalue)) {
+                *instances_max = 0; /* Revert to default logic, see transfer_read_definition() */
+                return 0;
+        }
+
+        r = safe_atou64(rvalue, &i);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse InstancesMax= value, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        if (i < 2) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "InstancesMax= value must be at least 2, bumping: %s", rvalue);
+                *instances_max = 2;
+        } else
+                *instances_max = i;
+
+        return 0;
+}
+
+static int config_parse_resource_pattern(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        char ***patterns = ASSERT_PTR(data);
+        int r;
+
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                *patterns = strv_free(*patterns);
+                return 0;
+        }
+
+        for (;;) {
+                _cleanup_free_ char *word = NULL, *resolved = NULL;
+
+                r = extract_first_word(&rvalue, &word, NULL, EXTRACT_CUNESCAPE|EXTRACT_UNESCAPE_RELAX);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to extract first pattern from MatchPattern=, ignoring: %s", rvalue);
+                        return 0;
+                }
+                if (r == 0)
+                        break;
+
+                r = specifier_printf(word, NAME_MAX, specifier_table, arg_root, NULL, &resolved);
+                if (r < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to expand specifiers in MatchPattern=, ignoring: %s", rvalue);
+                        return 0;
+                }
+
+                if (!pattern_valid(resolved))
+                        return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "MatchPattern= string is not valid, refusing: %s", resolved);
+
+                r = strv_consume(patterns, TAKE_PTR(resolved));
+                if (r < 0)
+                        return log_oom();
+        }
+
+        strv_uniq(*patterns);
+        return 0;
+}
+
+static int config_parse_resource_path(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_free_ char *resolved = NULL;
+        Resource *rr = ASSERT_PTR(data);
+        int r;
+
+        assert(rvalue);
+
+        if (streq(rvalue, "auto")) {
+                rr->path_auto = true;
+                rr->path = mfree(rr->path);
+                return 0;
+        }
+
+        r = specifier_printf(rvalue, PATH_MAX-1, specifier_table, arg_root, NULL, &resolved);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to expand specifiers in Path=, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        /* Note that we don't validate the path as being absolute or normalized. We'll do that in
+         * transfer_read_definition() as we might not know yet whether Path refers to an URL or a file system
+         * path. */
+
+        rr->path_auto = false;
+        return free_and_replace(rr->path, resolved);
+}
+
+static DEFINE_CONFIG_PARSE_ENUM(config_parse_resource_type, resource_type, ResourceType, "Invalid resource type");
+
+static int config_parse_resource_ptype(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Resource *rr = ASSERT_PTR(data);
+        int r;
+
+        assert(rvalue);
+
+        r = gpt_partition_type_from_string(rvalue, &rr->partition_type);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed parse partition type, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        rr->partition_type_set = true;
+        return 0;
+}
+
+static int config_parse_partition_uuid(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Transfer *t = ASSERT_PTR(data);
+        int r;
+
+        assert(rvalue);
+
+        r = sd_id128_from_string(rvalue, &t->partition_uuid);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed parse partition UUID, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        t->partition_uuid_set = true;
+        return 0;
+}
+
+static int config_parse_partition_flags(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Transfer *t = ASSERT_PTR(data);
+        int r;
+
+        assert(rvalue);
+
+        r = safe_atou64(rvalue, &t->partition_flags);
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed parse partition flags, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        t->partition_flags_set = true;
+        return 0;
+}
+
+int transfer_read_definition(Transfer *t, const char *path) {
+        int r;
+
+        assert(t);
+        assert(path);
+
+        ConfigTableItem table[] = {
+                { "Transfer",    "MinVersion",              config_parse_min_version,          0, &t->min_version        },
+                { "Transfer",    "ProtectVersion",          config_parse_protect_version,      0, &t->protected_versions },
+                { "Transfer",    "Verify",                  config_parse_bool,                 0, &t->verify             },
+                { "Source",      "Type",                    config_parse_resource_type,        0, &t->source.type        },
+                { "Source",      "Path",                    config_parse_resource_path,        0, &t->source             },
+                { "Source",      "MatchPattern",            config_parse_resource_pattern,     0, &t->source.patterns    },
+                { "Target",      "Type",                    config_parse_resource_type,        0, &t->target.type        },
+                { "Target",      "Path",                    config_parse_resource_path,        0, &t->target             },
+                { "Target",      "MatchPattern",            config_parse_resource_pattern,     0, &t->target.patterns    },
+                { "Target",      "MatchPartitionType",      config_parse_resource_ptype,       0, &t->target             },
+                { "Target",      "PartitionUUID",           config_parse_partition_uuid,       0, t                      },
+                { "Target",      "PartitionFlags",          config_parse_partition_flags,      0, t                      },
+                { "Target",      "PartitionNoAuto",         config_parse_tristate,             0, &t->no_auto            },
+                { "Target",      "PartitionGrowFileSystem", config_parse_tristate,             0, &t->growfs             },
+                { "Target",      "ReadOnly",                config_parse_tristate,             0, &t->read_only          },
+                { "Target",      "Mode",                    config_parse_mode,                 0, &t->mode               },
+                { "Target",      "TriesLeft",               config_parse_uint64,               0, &t->tries_left         },
+                { "Target",      "TriesDone",               config_parse_uint64,               0, &t->tries_done         },
+                { "Target",      "InstancesMax",            config_parse_instances_max,        0, &t->instances_max      },
+                { "Target",      "RemoveTemporary",         config_parse_bool,                 0, &t->remove_temporary   },
+                { "Target",      "CurrentSymlink",          config_parse_current_symlink,      0, &t->current_symlink    },
+                {}
+        };
+
+        r = config_parse(NULL, path, NULL,
+                         "Transfer\0"
+                         "Source\0"
+                         "Target\0",
+                         config_item_table_lookup, table,
+                         CONFIG_PARSE_WARN,
+                         t,
+                         NULL);
+        if (r < 0)
+                return r;
+
+        if (!RESOURCE_IS_SOURCE(t->source.type))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Source Type= must be one of url-file, url-tar, tar, regular-file, directory, subvolume.");
+
+        if (t->target.type < 0) {
+                switch (t->source.type) {
+
+                case RESOURCE_URL_FILE:
+                case RESOURCE_REGULAR_FILE:
+                        t->target.type =
+                                t->target.path && path_startswith(t->target.path, "/dev/") ?
+                                RESOURCE_PARTITION : RESOURCE_REGULAR_FILE;
+                        break;
+
+                case RESOURCE_URL_TAR:
+                case RESOURCE_TAR:
+                case RESOURCE_DIRECTORY:
+                        t->target.type = RESOURCE_DIRECTORY;
+                        break;
+
+                case RESOURCE_SUBVOLUME:
+                        t->target.type = RESOURCE_SUBVOLUME;
+                        break;
+
+                default:
+                        assert_not_reached();
+                }
+        }
+
+        if (!RESOURCE_IS_TARGET(t->target.type))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Target Type= must be one of partition, regular-file, directory, subvolume.");
+
+        if ((IN_SET(t->source.type, RESOURCE_URL_FILE, RESOURCE_PARTITION, RESOURCE_REGULAR_FILE) &&
+             !IN_SET(t->target.type, RESOURCE_PARTITION, RESOURCE_REGULAR_FILE)) ||
+            (IN_SET(t->source.type, RESOURCE_URL_TAR, RESOURCE_TAR, RESOURCE_DIRECTORY, RESOURCE_SUBVOLUME) &&
+             !IN_SET(t->target.type, RESOURCE_DIRECTORY, RESOURCE_SUBVOLUME)))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Target type '%s' is incompatible with source type '%s', refusing.",
+                                  resource_type_to_string(t->source.type), resource_type_to_string(t->target.type));
+
+        if (!t->source.path && !t->source.path_auto)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Source specification lacks Path=.");
+
+        if (t->source.path) {
+                if (RESOURCE_IS_FILESYSTEM(t->source.type) || t->source.type == RESOURCE_PARTITION)
+                        if (!path_is_absolute(t->source.path) || !path_is_normalized(t->source.path))
+                                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                                  "Source path is not a normalized, absolute path: %s", t->source.path);
+
+                /* We unofficially support file:// in addition to http:// and https:// for url
+                 * sources. That's mostly for testing, since it relieves us from having to set up a HTTP
+                 * server, and CURL abstracts this away from us thankfully. */
+                if (RESOURCE_IS_URL(t->source.type))
+                        if (!http_url_is_valid(t->source.path) && !file_url_is_valid(t->source.path))
+                                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                                  "Source path is not a valid HTTP or HTTPS URL: %s", t->source.path);
+        }
+
+        if (strv_isempty(t->source.patterns))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Source specification lacks MatchPattern=.");
+
+        if (!t->target.path && !t->target.path_auto)
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Target specification lacks Path= field.");
+
+        if (t->target.path &&
+            (!path_is_absolute(t->target.path) || !path_is_normalized(t->target.path)))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Target path is not a normalized, absolute path: %s", t->target.path);
+
+        if (strv_isempty(t->target.patterns)) {
+                strv_free(t->target.patterns);
+                t->target.patterns = strv_copy(t->source.patterns);
+                if (!t->target.patterns)
+                        return log_oom();
+        }
+
+        if (t->current_symlink && !RESOURCE_IS_FILESYSTEM(t->target.type) && !path_is_absolute(t->current_symlink))
+                return log_syntax(NULL, LOG_ERR, path, 1, SYNTHETIC_ERRNO(EINVAL),
+                                  "Current symlink must be absolute path if target is partition: %s", t->current_symlink);
+
+        /* When no instance limit is set, use all available partition slots in case of partitions, or 3 in case of fs objects */
+        if (t->instances_max == 0)
+                t->instances_max = t->target.type == RESOURCE_PARTITION ? UINT64_MAX : DEFAULT_FILE_INSTANCES_MAX;
+
+        return 0;
+}
+
+int transfer_resolve_paths(
+                Transfer *t,
+                const char *root,
+                const char *node) {
+
+        int r;
+
+        /* If Path=auto is used in [Source] or [Target] sections, let's automatically detect the path of the
+         * block device to use. Moreover, if this path points to a directory but we need a block device,
+         * automatically determine the backing block device, so that users can reference block devices by
+         * mount point. */
+
+        assert(t);
+
+        r = resource_resolve_path(&t->source, root, node);
+        if (r < 0)
+                return r;
+
+        r = resource_resolve_path(&t->target, root, node);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static void transfer_remove_temporary(Transfer *t) {
+        _cleanup_(closedirp) DIR *d = NULL;
+        int r;
+
+        assert(t);
+
+        if (!t->remove_temporary)
+                return;
+
+        if (!IN_SET(t->target.type, RESOURCE_REGULAR_FILE, RESOURCE_DIRECTORY, RESOURCE_SUBVOLUME))
+                return;
+
+        /* Removes all temporary files/dirs from previous runs in the target directory, i.e. all those starting with '.#' */
+
+        d = opendir(t->target.path);
+        if (!d) {
+                if (errno == ENOENT)
+                        return;
+
+                log_debug_errno(errno, "Failed to open target directory '%s', ignoring: %m", t->target.path);
+                return;
+        }
+
+        for (;;) {
+                struct dirent *de;
+
+                errno = 0;
+                de = readdir_no_dot(d);
+                if (!de) {
+                        if (errno != 0)
+                                log_debug_errno(errno, "Failed to read target directory '%s', ignoring: %m", t->target.path);
+                        break;
+                }
+
+                if (!startswith(de->d_name, ".#"))
+                        continue;
+
+                r = rm_rf_child(dirfd(d), de->d_name, REMOVE_PHYSICAL|REMOVE_SUBVOLUME|REMOVE_CHMOD);
+                if (r == -ENOENT)
+                        continue;
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to remove temporary resource instance '%s/%s', ignoring: %m", t->target.path, de->d_name);
+                        continue;
+                }
+
+                log_debug("Removed temporary resource instance '%s/%s'.", t->target.path, de->d_name);
+        }
+}
+
+int transfer_vacuum(
+                Transfer *t,
+                uint64_t space,
+                const char *extra_protected_version) {
+
+        uint64_t instances_max, limit;
+        int r, count = 0;
+
+        assert(t);
+
+        transfer_remove_temporary(t);
+
+        /* First, calculate how many instances to keep, based on the instance limit — but keep at least one */
+
+        instances_max = arg_instances_max != UINT64_MAX ? arg_instances_max : t->instances_max;
+        assert(instances_max >= 1);
+        if (instances_max == UINT64_MAX) /* Keep infinite instances? */
+                limit = UINT64_MAX;
+        else if (space > instances_max)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOSPC),
+                                       "Asked to delete more instances than total maximum allowed number of instances, refusing.");
+        else if (space == instances_max)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOSPC),
+                                       "Asked to delete all possible instances, can't allow that. One instance must always remain.");
+        else
+                limit = instances_max - space;
+
+        if (t->target.type == RESOURCE_PARTITION) {
+                uint64_t rm, remain;
+
+                /* If we are looking at a partition table, we also have to take into account how many
+                 * partition slots of the right type are available */
+
+                if (t->target.n_empty + t->target.n_instances < 2)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOSPC),
+                                               "Partition table has less than two partition slots of the right type " SD_ID128_UUID_FORMAT_STR " (%s), refusing.",
+                                               SD_ID128_FORMAT_VAL(t->target.partition_type.uuid),
+                                               gpt_partition_type_uuid_to_string(t->target.partition_type.uuid));
+                if (space > t->target.n_empty + t->target.n_instances)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOSPC),
+                                               "Partition table does not have enough partition slots of right type " SD_ID128_UUID_FORMAT_STR " (%s) for operation.",
+                                               SD_ID128_FORMAT_VAL(t->target.partition_type.uuid),
+                                               gpt_partition_type_uuid_to_string(t->target.partition_type.uuid));
+                if (space == t->target.n_empty + t->target.n_instances)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOSPC),
+                                               "Asked to empty all partition table slots of the right type " SD_ID128_UUID_FORMAT_STR " (%s), can't allow that. One instance must always remain.",
+                                               SD_ID128_FORMAT_VAL(t->target.partition_type.uuid),
+                                               gpt_partition_type_uuid_to_string(t->target.partition_type.uuid));
+
+                rm = LESS_BY(space, t->target.n_empty);
+                remain = LESS_BY(t->target.n_instances, rm);
+                limit = MIN(limit, remain);
+        }
+
+        while (t->target.n_instances > limit) {
+                Instance *oldest;
+                size_t p = t->target.n_instances - 1;
+
+                for (;;) {
+                        oldest = t->target.instances[p];
+                        assert(oldest);
+
+                        /* If this is listed among the protected versions, then let's not remove it */
+                        if (!strv_contains(t->protected_versions, oldest->metadata.version) &&
+                            (!extra_protected_version || !streq(extra_protected_version, oldest->metadata.version)))
+                                break;
+
+                        log_debug("Version '%s' is protected, not removing.", oldest->metadata.version);
+                        if (p == 0) {
+                                oldest = NULL;
+                                break;
+                        }
+
+                        p--;
+                }
+
+                if (!oldest) /* Nothing more to remove */
+                        break;
+
+                assert(oldest->resource);
+
+                log_info("%s Removing old '%s' (%s).", special_glyph(SPECIAL_GLYPH_RECYCLING), oldest->path, resource_type_to_string(oldest->resource->type));
+
+                switch (t->target.type) {
+
+                case RESOURCE_REGULAR_FILE:
+                case RESOURCE_DIRECTORY:
+                case RESOURCE_SUBVOLUME:
+                        r = rm_rf(oldest->path, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME|REMOVE_MISSING_OK|REMOVE_CHMOD);
+                        if (r < 0 && r != -ENOENT)
+                                return log_error_errno(r, "Failed to make room, deleting '%s' failed: %m", oldest->path);
+
+                        break;
+
+                case RESOURCE_PARTITION: {
+                        PartitionInfo pinfo = oldest->partition_info;
+
+                        /* label "_empty" means "no contents" for our purposes */
+                        pinfo.label = (char*) "_empty";
+
+                        r = patch_partition(t->target.path, &pinfo, PARTITION_LABEL);
+                        if (r < 0)
+                                return r;
+
+                        t->target.n_empty++;
+                        break;
+                }
+
+                default:
+                        assert_not_reached();
+                        break;
+                }
+
+                instance_free(oldest);
+                memmove(t->target.instances + p, t->target.instances + p + 1, (t->target.n_instances - p - 1) * sizeof(Instance*));
+                t->target.n_instances--;
+
+                count++;
+        }
+
+        return count;
+}
+
+static void compile_pattern_fields(
+                const Transfer *t,
+                const Instance *i,
+                InstanceMetadata *ret) {
+
+        assert(t);
+        assert(i);
+        assert(ret);
+
+        *ret = (InstanceMetadata) {
+                .version = i->metadata.version,
+
+                /* We generally prefer explicitly configured values for the transfer over those automatically
+                 * derived from the source instance. Also, if the source is a tar archive, then let's not
+                 * patch mtime/mode and use the one embedded in the tar file */
+                .partition_uuid = t->partition_uuid_set ? t->partition_uuid : i->metadata.partition_uuid,
+                .partition_uuid_set = t->partition_uuid_set || i->metadata.partition_uuid_set,
+                .partition_flags = t->partition_flags_set ? t->partition_flags : i->metadata.partition_flags,
+                .partition_flags_set = t->partition_flags_set || i->metadata.partition_flags_set,
+                .mtime = RESOURCE_IS_TAR(i->resource->type) ? USEC_INFINITY : i->metadata.mtime,
+                .mode = t->mode != MODE_INVALID ? t->mode : (RESOURCE_IS_TAR(i->resource->type) ? MODE_INVALID : i->metadata.mode),
+                .size = i->metadata.size,
+                .tries_done = t->tries_done != UINT64_MAX ? t->tries_done :
+                              i->metadata.tries_done != UINT64_MAX ? i->metadata.tries_done : 0,
+                .tries_left = t->tries_left != UINT64_MAX ? t->tries_left :
+                              i->metadata.tries_left != UINT64_MAX ? i->metadata.tries_left : 3,
+                .no_auto = t->no_auto >= 0 ? t->no_auto : i->metadata.no_auto,
+                .read_only = t->read_only >= 0 ? t->read_only : i->metadata.read_only,
+                .growfs = t->growfs >= 0 ? t->growfs : i->metadata.growfs,
+                .sha256sum_set = i->metadata.sha256sum_set,
+        };
+
+        memcpy(ret->sha256sum, i->metadata.sha256sum, sizeof(ret->sha256sum));
+}
+
+static int run_helper(
+                const char *name,
+                const char *path,
+                const char * const cmdline[]) {
+
+        int r;
+
+        assert(name);
+        assert(path);
+        assert(cmdline);
+
+        r = safe_fork(name, FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                /* Child */
+
+                (void) unsetenv("NOTIFY_SOCKET");
+                execv(path, (char *const*) cmdline);
+                log_error_errno(errno, "Failed to execute %s tool: %m", path);
+                _exit(EXIT_FAILURE);
+        }
+
+        return 0;
+}
+
+int transfer_acquire_instance(Transfer *t, Instance *i) {
+        _cleanup_free_ char *formatted_pattern = NULL, *digest = NULL;
+        char offset[DECIMAL_STR_MAX(uint64_t)+1], max_size[DECIMAL_STR_MAX(uint64_t)+1];
+        const char *where = NULL;
+        InstanceMetadata f;
+        Instance *existing;
+        int r;
+
+        assert(t);
+        assert(i);
+        assert(i->resource);
+        assert(t == container_of(i->resource, Transfer, source));
+
+        /* Does this instance already exist in the target? Then we don't need to acquire anything */
+        existing = resource_find_instance(&t->target, i->metadata.version);
+        if (existing) {
+                log_info("No need to acquire '%s', already installed.", i->path);
+                return 0;
+        }
+
+        assert(!t->final_path);
+        assert(!t->temporary_path);
+        assert(!strv_isempty(t->target.patterns));
+
+        /* Format the target name using the first pattern specified */
+        compile_pattern_fields(t, i, &f);
+        r = pattern_format(t->target.patterns[0], &f, &formatted_pattern);
+        if (r < 0)
+                return log_error_errno(r, "Failed to format target pattern: %m");
+
+        if (RESOURCE_IS_FILESYSTEM(t->target.type)) {
+
+                if (!filename_is_valid(formatted_pattern))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Formatted pattern is not suitable as file name, refusing: %s", formatted_pattern);
+
+                t->final_path = path_join(t->target.path, formatted_pattern);
+                if (!t->final_path)
+                        return log_oom();
+
+                r = tempfn_random(t->final_path, "sysupdate", &t->temporary_path);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to generate temporary target path: %m");
+
+                where = t->final_path;
+        }
+
+        if (t->target.type == RESOURCE_PARTITION) {
+                r = gpt_partition_label_valid(formatted_pattern);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to determine if formatted pattern is suitable as GPT partition label: %s", formatted_pattern);
+                if (!r)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Formatted pattern is not suitable as GPT partition label, refusing: %s", formatted_pattern);
+
+                r = find_suitable_partition(
+                                t->target.path,
+                                i->metadata.size,
+                                t->target.partition_type_set ? &t->target.partition_type.uuid : NULL,
+                                &t->partition_info);
+                if (r < 0)
+                        return r;
+
+                xsprintf(offset, "%" PRIu64, t->partition_info.start);
+                xsprintf(max_size, "%" PRIu64, t->partition_info.size);
+
+                where = t->partition_info.device;
+        }
+
+        assert(where);
+
+        log_info("%s Acquiring %s %s %s...", special_glyph(SPECIAL_GLYPH_DOWNLOAD), i->path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), where);
+
+        if (RESOURCE_IS_URL(i->resource->type)) {
+                /* For URL sources we require the SHA256 sum to be known so that we can validate the
+                 * download. */
+
+                if (!i->metadata.sha256sum_set)
+                        return log_error_errno(r, "SHA256 checksum not known for download '%s', refusing.", i->path);
+
+                digest = hexmem(i->metadata.sha256sum, sizeof(i->metadata.sha256sum));
+                if (!digest)
+                        return log_oom();
+        }
+
+        switch (i->resource->type) { /* Source */
+
+        case RESOURCE_REGULAR_FILE:
+
+                switch (t->target.type) { /* Target */
+
+                case RESOURCE_REGULAR_FILE:
+
+                        /* regular file → regular file (why fork off systemd-import for such a simple file
+                         * copy case? implicit decompression mostly, and thus also sandboxing. Also, the
+                         * importer has some tricks up its sleeve, such as sparse file generation, which we
+                         * want to take benefit of, too.) */
+
+                        r = run_helper("(sd-import-raw)",
+                                       import_binary_path(),
+                                       (const char* const[]) {
+                                               "systemd-import",
+                                               "raw",
+                                               "--direct",          /* just copy/unpack the specified file, don't do anything else */
+                                               arg_sync ? "--sync=yes" : "--sync=no",
+                                               i->path,
+                                               t->temporary_path,
+                                               NULL
+                                       });
+                        break;
+
+                case RESOURCE_PARTITION:
+
+                        /* regular file → partition */
+
+                        r = run_helper("(sd-import-raw)",
+                                       import_binary_path(),
+                                       (const char* const[]) {
+                                               "systemd-import",
+                                               "raw",
+                                               "--direct",          /* just copy/unpack the specified file, don't do anything else */
+                                               "--offset", offset,
+                                               "--size-max", max_size,
+                                               arg_sync ? "--sync=yes" : "--sync=no",
+                                               i->path,
+                                               t->target.path,
+                                               NULL
+                                       });
+                        break;
+
+                default:
+                        assert_not_reached();
+                }
+
+                break;
+
+        case RESOURCE_DIRECTORY:
+        case RESOURCE_SUBVOLUME:
+                assert(IN_SET(t->target.type, RESOURCE_DIRECTORY, RESOURCE_SUBVOLUME));
+
+                /* directory/subvolume → directory/subvolume */
+
+                r = run_helper("(sd-import-fs)",
+                               import_fs_binary_path(),
+                               (const char* const[]) {
+                                       "systemd-import-fs",
+                                       "run",
+                                       "--direct",          /* just untar the specified file, don't do anything else */
+                                       arg_sync ? "--sync=yes" : "--sync=no",
+                                       t->target.type == RESOURCE_SUBVOLUME ? "--btrfs-subvol=yes" : "--btrfs-subvol=no",
+                                       i->path,
+                                       t->temporary_path,
+                                       NULL
+                               });
+                break;
+
+        case RESOURCE_TAR:
+                assert(IN_SET(t->target.type, RESOURCE_DIRECTORY, RESOURCE_SUBVOLUME));
+
+                /* tar → directory/subvolume */
+
+                r = run_helper("(sd-import-tar)",
+                               import_binary_path(),
+                               (const char* const[]) {
+                                       "systemd-import",
+                                       "tar",
+                                       "--direct",          /* just untar the specified file, don't do anything else */
+                                       arg_sync ? "--sync=yes" : "--sync=no",
+                                       t->target.type == RESOURCE_SUBVOLUME ? "--btrfs-subvol=yes" : "--btrfs-subvol=no",
+                                       i->path,
+                                       t->temporary_path,
+                                       NULL
+                               });
+                break;
+
+        case RESOURCE_URL_FILE:
+
+                switch (t->target.type) {
+
+                case RESOURCE_REGULAR_FILE:
+
+                        /* url file → regular file */
+
+                        r = run_helper("(sd-pull-raw)",
+                                       pull_binary_path(),
+                                       (const char* const[]) {
+                                               "systemd-pull",
+                                               "raw",
+                                               "--direct",          /* just download the specified URL, don't download anything else */
+                                               "--verify", digest,  /* validate by explicit SHA256 sum */
+                                               arg_sync ? "--sync=yes" : "--sync=no",
+                                               i->path,
+                                               t->temporary_path,
+                                               NULL
+                                       });
+                        break;
+
+                case RESOURCE_PARTITION:
+
+                        /* url file → partition */
+
+                        r = run_helper("(sd-pull-raw)",
+                                       pull_binary_path(),
+                                       (const char* const[]) {
+                                               "systemd-pull",
+                                               "raw",
+                                               "--direct",              /* just download the specified URL, don't download anything else */
+                                               "--verify", digest,      /* validate by explicit SHA256 sum */
+                                               "--offset", offset,
+                                               "--size-max", max_size,
+                                               arg_sync ? "--sync=yes" : "--sync=no",
+                                               i->path,
+                                               t->target.path,
+                                               NULL
+                                       });
+                        break;
+
+                default:
+                        assert_not_reached();
+                }
+
+                break;
+
+        case RESOURCE_URL_TAR:
+                assert(IN_SET(t->target.type, RESOURCE_DIRECTORY, RESOURCE_SUBVOLUME));
+
+                r = run_helper("(sd-pull-tar)",
+                               pull_binary_path(),
+                               (const char*const[]) {
+                                       "systemd-pull",
+                                       "tar",
+                                       "--direct",          /* just download the specified URL, don't download anything else */
+                                       "--verify", digest,  /* validate by explicit SHA256 sum */
+                                       t->target.type == RESOURCE_SUBVOLUME ? "--btrfs-subvol=yes" : "--btrfs-subvol=no",
+                                       arg_sync ? "--sync=yes" : "--sync=no",
+                                       i->path,
+                                       t->temporary_path,
+                                       NULL
+                               });
+                break;
+
+        default:
+                assert_not_reached();
+        }
+        if (r < 0)
+                return r;
+
+        if (RESOURCE_IS_FILESYSTEM(t->target.type)) {
+                bool need_sync = false;
+                assert(t->temporary_path);
+
+                /* Apply file attributes if set */
+                if (f.mtime != USEC_INFINITY) {
+                        struct timespec ts;
+
+                        timespec_store(&ts, f.mtime);
+
+                        if (utimensat(AT_FDCWD, t->temporary_path, (struct timespec[2]) { ts, ts }, AT_SYMLINK_NOFOLLOW) < 0)
+                                return log_error_errno(errno, "Failed to adjust mtime of '%s': %m", t->temporary_path);
+
+                        need_sync = true;
+                }
+
+                if (f.mode != MODE_INVALID) {
+                        /* Try with AT_SYMLINK_NOFOLLOW first, because it's the safe thing to do. Older
+                         * kernels don't support that however, in that case we fall back to chmod(). Not as
+                         * safe, but shouldn't be a problem, given that we don't create symlinks here. */
+                        if (fchmodat(AT_FDCWD, t->temporary_path, f.mode, AT_SYMLINK_NOFOLLOW) < 0 &&
+                            (!ERRNO_IS_NOT_SUPPORTED(errno) || chmod(t->temporary_path, f.mode) < 0))
+                                return log_error_errno(errno, "Failed to adjust mode of '%s': %m", t->temporary_path);
+
+                        need_sync = true;
+                }
+
+                /* Synchronize */
+                if (arg_sync && need_sync) {
+                        if (t->target.type == RESOURCE_REGULAR_FILE)
+                                r = fsync_path_and_parent_at(AT_FDCWD, t->temporary_path);
+                        else {
+                                assert(IN_SET(t->target.type, RESOURCE_DIRECTORY, RESOURCE_SUBVOLUME));
+                                r = syncfs_path(AT_FDCWD, t->temporary_path);
+                        }
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to synchronize file system backing '%s': %m", t->temporary_path);
+                }
+
+                t->install_read_only = f.read_only;
+        }
+
+        if (t->target.type == RESOURCE_PARTITION) {
+                free_and_replace(t->partition_info.label, formatted_pattern);
+                t->partition_change = PARTITION_LABEL;
+
+                if (f.partition_uuid_set) {
+                        t->partition_info.uuid = f.partition_uuid;
+                        t->partition_change |= PARTITION_UUID;
+                }
+
+                if (f.partition_flags_set) {
+                        t->partition_info.flags = f.partition_flags;
+                        t->partition_change |= PARTITION_FLAGS;
+                }
+
+                if (f.no_auto >= 0) {
+                        t->partition_info.no_auto = f.no_auto;
+                        t->partition_change |= PARTITION_NO_AUTO;
+                }
+
+                if (f.read_only >= 0) {
+                        t->partition_info.read_only = f.read_only;
+                        t->partition_change |= PARTITION_READ_ONLY;
+                }
+
+                if (f.growfs >= 0) {
+                        t->partition_info.growfs = f.growfs;
+                        t->partition_change |= PARTITION_GROWFS;
+                }
+        }
+
+        /* For regular file cases the only step left is to install the file in place, which install_file()
+         * will do via rename(). For partition cases the only step left is to update the partition table,
+         * which is done at the same place. */
+
+        log_info("Successfully acquired '%s'.", i->path);
+        return 0;
+}
+
+int transfer_install_instance(
+                Transfer *t,
+                Instance *i,
+                const char *root) {
+
+        int r;
+
+        assert(t);
+        assert(i);
+        assert(i->resource);
+        assert(t == container_of(i->resource, Transfer, source));
+
+        if (t->temporary_path) {
+                assert(RESOURCE_IS_FILESYSTEM(t->target.type));
+                assert(t->final_path);
+
+                r = install_file(AT_FDCWD, t->temporary_path,
+                                 AT_FDCWD, t->final_path,
+                                 INSTALL_REPLACE|
+                                 (t->install_read_only > 0 ? INSTALL_READ_ONLY : 0)|
+                                 (t->target.type == RESOURCE_REGULAR_FILE ? INSTALL_FSYNC_FULL : INSTALL_SYNCFS));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to move '%s' into place: %m", t->final_path);
+
+                log_info("Successfully installed '%s' (%s) as '%s' (%s).",
+                         i->path,
+                         resource_type_to_string(i->resource->type),
+                         t->final_path,
+                         resource_type_to_string(t->target.type));
+
+                t->temporary_path = mfree(t->temporary_path);
+        }
+
+        if (t->partition_change != 0) {
+                assert(t->target.type == RESOURCE_PARTITION);
+
+                r = patch_partition(
+                                t->target.path,
+                                &t->partition_info,
+                                t->partition_change);
+                if (r < 0)
+                        return r;
+
+                log_info("Successfully installed '%s' (%s) as '%s' (%s).",
+                         i->path,
+                         resource_type_to_string(i->resource->type),
+                         t->partition_info.device,
+                         resource_type_to_string(t->target.type));
+        }
+
+        if (t->current_symlink) {
+                _cleanup_free_ char *buf = NULL, *parent = NULL, *relative = NULL, *resolved = NULL;
+                const char *link_path, *link_target;
+                bool resolve_link_path = false;
+
+                if (RESOURCE_IS_FILESYSTEM(t->target.type)) {
+
+                        assert(t->target.path);
+
+                        if (path_is_absolute(t->current_symlink)) {
+                                link_path = t->current_symlink;
+                                resolve_link_path = true;
+                        } else {
+                                buf = path_make_absolute(t->current_symlink, t->target.path);
+                                if (!buf)
+                                        return log_oom();
+
+                                link_path = buf;
+                        }
+
+                        link_target = t->final_path;
+
+                } else if (t->target.type == RESOURCE_PARTITION) {
+
+                        assert(path_is_absolute(t->current_symlink));
+
+                        link_path = t->current_symlink;
+                        link_target = t->partition_info.device;
+
+                        resolve_link_path = true;
+                } else
+                        assert_not_reached();
+
+                if (resolve_link_path && root) {
+                        r = chase_symlinks(link_path, root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &resolved, NULL);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to resolve current symlink path '%s': %m", link_path);
+
+                        link_path = resolved;
+                }
+
+                if (link_target) {
+                        r = path_extract_directory(link_path, &parent);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to extract directory of target path '%s': %m", link_path);
+
+                        r = path_make_relative(parent, link_target, &relative);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to make symlink path '%s' relative to '%s': %m", link_target, parent);
+
+                        r = symlink_atomic(relative, link_path);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to update current symlink '%s' %s '%s': %m",
+                                                       link_path,
+                                                       special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                                       relative);
+
+                        log_info("Updated symlink '%s' %s '%s'.",
+                                 link_path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), relative);
+                }
+        }
+
+        return 0;
+}
diff --git a/src/sysupdate/sysupdate-transfer.h b/src/sysupdate/sysupdate-transfer.h
new file mode 100644
index 0000000..b0c2a6e
--- /dev/null
+++ b/src/sysupdate/sysupdate-transfer.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "sd-id128.h"
+
+/* Forward declare this type so that the headers below can use it */
+typedef struct Transfer Transfer;
+
+#include "sysupdate-partition.h"
+#include "sysupdate-resource.h"
+
+struct Transfer {
+        char *definition_path;
+        char *min_version;
+        char **protected_versions;
+        char *current_symlink;
+        bool verify;
+
+        Resource source, target;
+
+        uint64_t instances_max;
+        bool remove_temporary;
+
+        /* When creating a new partition/file, optionally override these attributes explicitly */
+        sd_id128_t partition_uuid;
+        bool partition_uuid_set;
+        uint64_t partition_flags;
+        bool partition_flags_set;
+        mode_t mode;
+        uint64_t tries_left, tries_done;
+        int no_auto;
+        int read_only;
+        int growfs;
+
+        /* If we create a new file/dir/subvol in the fs, the temporary and final path we create it under, as well as the read-only flag for it */
+        char *temporary_path;
+        char *final_path;
+        int install_read_only;
+
+        /* If we write to a partition in a partition table, the metrics of it */
+        PartitionInfo partition_info;
+        PartitionChange partition_change;
+};
+
+Transfer *transfer_new(void);
+
+Transfer *transfer_free(Transfer *t);
+DEFINE_TRIVIAL_CLEANUP_FUNC(Transfer*, transfer_free);
+
+int transfer_read_definition(Transfer *t, const char *path);
+
+int transfer_resolve_paths(Transfer *t, const char *root, const char *node);
+
+int transfer_vacuum(Transfer *t, uint64_t space, const char *extra_protected_version);
+
+int transfer_acquire_instance(Transfer *t, Instance *i);
+
+int transfer_install_instance(Transfer *t, Instance *i, const char *root);
diff --git a/src/sysupdate/sysupdate-update-set.c b/src/sysupdate/sysupdate-update-set.c
new file mode 100644
index 0000000..6d6051d
--- /dev/null
+++ b/src/sysupdate/sysupdate-update-set.c
@@ -0,0 +1,63 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "glyph-util.h"
+#include "string-util.h"
+#include "sysupdate-update-set.h"
+#include "terminal-util.h"
+
+UpdateSet *update_set_free(UpdateSet *us) {
+        if (!us)
+                return NULL;
+
+        free(us->version);
+        free(us->instances); /* The objects referenced by this array are freed via resource_free(), not us */
+
+        return mfree(us);
+}
+
+int update_set_cmp(UpdateSet *const*a, UpdateSet *const*b) {
+        assert(a);
+        assert(b);
+        assert(*a);
+        assert(*b);
+        assert((*a)->version);
+        assert((*b)->version);
+
+        /* Newest version at the beginning */
+        return -strverscmp_improved((*a)->version, (*b)->version);
+}
+
+const char *update_set_flags_to_color(UpdateSetFlags flags) {
+
+        if (flags == 0 || (flags & UPDATE_OBSOLETE))
+                return (flags & UPDATE_NEWEST) ? ansi_highlight_grey() : ansi_grey();
+
+        if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_NEWEST))
+                return ansi_highlight();
+
+        if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_PROTECTED))
+                return ansi_highlight_magenta();
+
+        if ((flags & (UPDATE_AVAILABLE|UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_OBSOLETE)) == (UPDATE_AVAILABLE|UPDATE_NEWEST))
+                return ansi_highlight_green();
+
+        return NULL;
+}
+
+const char *update_set_flags_to_glyph(UpdateSetFlags flags) {
+
+        if (flags == 0 || (flags & UPDATE_OBSOLETE))
+                return special_glyph(SPECIAL_GLYPH_MULTIPLICATION_SIGN);
+
+        if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_NEWEST))
+                return special_glyph(SPECIAL_GLYPH_BLACK_CIRCLE);
+
+        if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_PROTECTED))
+                return special_glyph(SPECIAL_GLYPH_WHITE_CIRCLE);
+
+        if ((flags & (UPDATE_AVAILABLE|UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_OBSOLETE)) == (UPDATE_AVAILABLE|UPDATE_NEWEST))
+                return special_glyph(SPECIAL_GLYPH_CIRCLE_ARROW);
+
+        return " ";
+}
diff --git a/src/sysupdate/sysupdate-update-set.h b/src/sysupdate/sysupdate-update-set.h
new file mode 100644
index 0000000..5dd94bc
--- /dev/null
+++ b/src/sysupdate/sysupdate-update-set.h
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <sys/types.h>
+
+typedef struct UpdateSet UpdateSet;
+
+#include "sysupdate-instance.h"
+
+typedef enum UpdateSetFlags {
+        UPDATE_NEWEST    = 1 << 0,
+        UPDATE_AVAILABLE = 1 << 1,
+        UPDATE_INSTALLED = 1 << 2,
+        UPDATE_OBSOLETE  = 1 << 3,
+        UPDATE_PROTECTED = 1 << 4,
+} UpdateSetFlags;
+
+struct UpdateSet {
+        UpdateSetFlags flags;
+        char *version;
+        Instance **instances;
+        size_t n_instances;
+};
+
+UpdateSet *update_set_free(UpdateSet *us);
+
+int update_set_cmp(UpdateSet *const*a, UpdateSet *const*b);
+
+const char *update_set_flags_to_color(UpdateSetFlags flags);
+const char *update_set_flags_to_glyph(UpdateSetFlags flags);
diff --git a/src/sysupdate/sysupdate-util.c b/src/sysupdate/sysupdate-util.c
new file mode 100644
index 0000000..c7a2301
--- /dev/null
+++ b/src/sysupdate/sysupdate-util.c
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "path-util.h"
+#include "sysupdate-util.h"
+
+bool version_is_valid(const char *s) {
+        if (isempty(s))
+                return false;
+
+        if (!filename_is_valid(s))
+                return false;
+
+        if (!in_charset(s, ALPHANUMERICAL ".,_-+"))
+                return false;
+
+        return true;
+}
diff --git a/src/sysupdate/sysupdate-util.h b/src/sysupdate/sysupdate-util.h
new file mode 100644
index 0000000..afa3a9d
--- /dev/null
+++ b/src/sysupdate/sysupdate-util.h
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+bool version_is_valid(const char *s);
diff --git a/src/sysupdate/sysupdate.c b/src/sysupdate/sysupdate.c
new file mode 100644
index 0000000..7997b85
--- /dev/null
+++ b/src/sysupdate/sysupdate.c
@@ -0,0 +1,1402 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <getopt.h>
+#include <unistd.h>
+
+#include "build.h"
+#include "bus-error.h"
+#include "bus-locator.h"
+#include "chase-symlinks.h"
+#include "conf-files.h"
+#include "constants.h"
+#include "dirent-util.h"
+#include "dissect-image.h"
+#include "fd-util.h"
+#include "format-table.h"
+#include "glyph-util.h"
+#include "hexdecoct.h"
+#include "login-util.h"
+#include "main-func.h"
+#include "mount-util.h"
+#include "os-util.h"
+#include "pager.h"
+#include "parse-argument.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "pretty-print.h"
+#include "set.h"
+#include "sort-util.h"
+#include "string-util.h"
+#include "strv.h"
+#include "sysupdate-transfer.h"
+#include "sysupdate-update-set.h"
+#include "sysupdate.h"
+#include "terminal-util.h"
+#include "utf8.h"
+#include "verbs.h"
+
+static char *arg_definitions = NULL;
+bool arg_sync = true;
+uint64_t arg_instances_max = UINT64_MAX;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
+static PagerFlags arg_pager_flags = 0;
+static bool arg_legend = true;
+char *arg_root = NULL;
+static char *arg_image = NULL;
+static bool arg_reboot = false;
+static char *arg_component = NULL;
+static int arg_verify = -1;
+
+STATIC_DESTRUCTOR_REGISTER(arg_definitions, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_component, freep);
+
+typedef struct Context {
+        Transfer **transfers;
+        size_t n_transfers;
+
+        UpdateSet **update_sets;
+        size_t n_update_sets;
+
+        UpdateSet *newest_installed, *candidate;
+
+        Hashmap *web_cache; /* Cache for downloaded resources, keyed by URL */
+} Context;
+
+static Context *context_free(Context *c) {
+        if (!c)
+                return NULL;
+
+        for (size_t i = 0; i < c->n_transfers; i++)
+                transfer_free(c->transfers[i]);
+        free(c->transfers);
+
+        for (size_t i = 0; i < c->n_update_sets; i++)
+                update_set_free(c->update_sets[i]);
+        free(c->update_sets);
+
+        hashmap_free(c->web_cache);
+
+        return mfree(c);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(Context*, context_free);
+
+static Context *context_new(void) {
+        /* For now, no fields to initialize non-zero */
+        return new0(Context, 1);
+}
+
+static int context_read_definitions(
+                Context *c,
+                const char *directory,
+                const char *component,
+                const char *root,
+                const char *node) {
+
+        _cleanup_strv_free_ char **files = NULL;
+        int r;
+
+        assert(c);
+
+        if (directory)
+                r = conf_files_list_strv(&files, ".conf", NULL, CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, (const char**) STRV_MAKE(directory));
+        else if (component) {
+                _cleanup_strv_free_ char **n = NULL;
+                char **l = CONF_PATHS_STRV("");
+                size_t k = 0;
+
+                n = new0(char*, strv_length(l) + 1);
+                if (!n)
+                        return log_oom();
+
+                STRV_FOREACH(i, l) {
+                        char *j;
+
+                        j = strjoin(*i, "sysupdate.", component, ".d");
+                        if (!j)
+                                return log_oom();
+
+                        n[k++] = j;
+                }
+
+                r = conf_files_list_strv(&files, ".conf", root, CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, (const char**) n);
+        } else
+                r = conf_files_list_strv(&files, ".conf", root, CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, (const char**) CONF_PATHS_STRV("sysupdate.d"));
+        if (r < 0)
+                return log_error_errno(r, "Failed to enumerate *.conf files: %m");
+
+        STRV_FOREACH(f, files) {
+                _cleanup_(transfer_freep) Transfer *t = NULL;
+
+                if (!GREEDY_REALLOC(c->transfers, c->n_transfers + 1))
+                        return log_oom();
+
+                t = transfer_new();
+                if (!t)
+                        return log_oom();
+
+                t->definition_path = strdup(*f);
+                if (!t->definition_path)
+                        return log_oom();
+
+                r = transfer_read_definition(t, *f);
+                if (r < 0)
+                        return r;
+
+                c->transfers[c->n_transfers++] = TAKE_PTR(t);
+        }
+
+        if (c->n_transfers == 0) {
+                if (arg_component)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
+                                               "No transfer definitions for component '%s' found.", arg_component);
+
+                return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
+                                       "No transfer definitions found.");
+        }
+
+        for (size_t i = 0; i < c->n_transfers; i++) {
+                r = transfer_resolve_paths(c->transfers[i], root, node);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int context_load_installed_instances(Context *c) {
+        int r;
+
+        assert(c);
+
+        log_info("Discovering installed instances%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        for (size_t i = 0; i < c->n_transfers; i++) {
+                r = resource_load_instances(
+                                &c->transfers[i]->target,
+                                arg_verify >= 0 ? arg_verify : c->transfers[i]->verify,
+                                &c->web_cache);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int context_load_available_instances(Context *c) {
+        int r;
+
+        assert(c);
+
+        log_info("Discovering available instances%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        for (size_t i = 0; i < c->n_transfers; i++) {
+                assert(c->transfers[i]);
+
+                r = resource_load_instances(
+                                &c->transfers[i]->source,
+                                arg_verify >= 0 ? arg_verify : c->transfers[i]->verify,
+                                &c->web_cache);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int context_discover_update_sets_by_flag(Context *c, UpdateSetFlags flags) {
+        _cleanup_free_ Instance **cursor_instances = NULL;
+        _cleanup_free_ char *boundary = NULL;
+        bool newest_found = false;
+        int r;
+
+        assert(c);
+        assert(IN_SET(flags, UPDATE_AVAILABLE, UPDATE_INSTALLED));
+
+        for (;;) {
+                bool incomplete = false, exists = false;
+                UpdateSetFlags extra_flags = 0;
+                _cleanup_free_ char *cursor = NULL;
+                UpdateSet *us = NULL;
+
+                for (size_t k = 0; k < c->n_transfers; k++) {
+                        Transfer *t = c->transfers[k];
+                        bool cursor_found = false;
+                        Resource *rr;
+
+                        assert(t);
+
+                        if (flags == UPDATE_AVAILABLE)
+                                rr = &t->source;
+                        else {
+                                assert(flags == UPDATE_INSTALLED);
+                                rr = &t->target;
+                        }
+
+                        for (size_t j = 0; j < rr->n_instances; j++) {
+                                Instance *i = rr->instances[j];
+
+                                assert(i);
+
+                                /* Is the instance we are looking at equal or newer than the boundary? If so, we
+                                 * already checked this version, and it wasn't complete, let's ignore it. */
+                                if (boundary && strverscmp_improved(i->metadata.version, boundary) >= 0)
+                                        continue;
+
+                                if (cursor) {
+                                        if (strverscmp_improved(i->metadata.version, cursor) != 0)
+                                                continue;
+                                } else {
+                                        cursor = strdup(i->metadata.version);
+                                        if (!cursor)
+                                                return log_oom();
+                                }
+
+                                cursor_found = true;
+
+                                if (!cursor_instances) {
+                                        cursor_instances = new(Instance*, c->n_transfers);
+                                        if (!cursor_instances)
+                                                return -ENOMEM;
+                                }
+                                cursor_instances[k] = i;
+                                break;
+                        }
+
+                        if (!cursor) /* No suitable instance beyond the boundary found? Then we are done! */
+                                break;
+
+                        if (!cursor_found) {
+                                /* Hmm, we didn't find the version indicated by 'cursor' among the instances
+                                 * of this transfer, let's skip it. */
+                                incomplete = true;
+                                break;
+                        }
+
+                        if (t->min_version && strverscmp_improved(t->min_version, cursor) > 0)
+                                extra_flags |= UPDATE_OBSOLETE;
+
+                        if (strv_contains(t->protected_versions, cursor))
+                                extra_flags |= UPDATE_PROTECTED;
+                }
+
+                if (!cursor) /* EOL */
+                        break;
+
+                r = free_and_strdup_warn(&boundary, cursor);
+                if (r < 0)
+                        return r;
+
+                if (incomplete) /* One transfer was missing this version, ignore the whole thing */
+                        continue;
+
+                /* See if we already have this update set in our table */
+                for (size_t i = 0; i < c->n_update_sets; i++) {
+                        if (strverscmp_improved(c->update_sets[i]->version, cursor) != 0)
+                                continue;
+
+                        /* We only store the instances we found first, but we remember we also found it again */
+                        c->update_sets[i]->flags |= flags | extra_flags;
+                        exists = true;
+                        newest_found = true;
+                        break;
+                }
+
+                if (exists)
+                        continue;
+
+                /* Doesn't exist yet, let's add it */
+                if (!GREEDY_REALLOC(c->update_sets, c->n_update_sets + 1))
+                        return log_oom();
+
+                us = new(UpdateSet, 1);
+                if (!us)
+                        return log_oom();
+
+                *us = (UpdateSet) {
+                        .flags = flags | (newest_found ? 0 : UPDATE_NEWEST) | extra_flags,
+                        .version = TAKE_PTR(cursor),
+                        .instances = TAKE_PTR(cursor_instances),
+                        .n_instances = c->n_transfers,
+                };
+
+                c->update_sets[c->n_update_sets++] = us;
+
+                newest_found = true;
+
+                /* Remember which one is the newest installed */
+                if ((us->flags & (UPDATE_NEWEST|UPDATE_INSTALLED)) == (UPDATE_NEWEST|UPDATE_INSTALLED))
+                        c->newest_installed = us;
+
+                /* Remember which is the newest non-obsolete, available (and not installed) version, which we declare the "candidate" */
+                if ((us->flags & (UPDATE_NEWEST|UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE)) == (UPDATE_NEWEST|UPDATE_AVAILABLE))
+                        c->candidate = us;
+        }
+
+        /* Newest installed is newer than or equal to candidate? Then suppress the candidate */
+        if (c->newest_installed && c->candidate && strverscmp_improved(c->newest_installed->version, c->candidate->version) >= 0)
+                c->candidate = NULL;
+
+        return 0;
+}
+
+static int context_discover_update_sets(Context *c) {
+        int r;
+
+        assert(c);
+
+        log_info("Determining installed update sets%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        r = context_discover_update_sets_by_flag(c, UPDATE_INSTALLED);
+        if (r < 0)
+                return r;
+
+        log_info("Determining available update sets%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        r = context_discover_update_sets_by_flag(c, UPDATE_AVAILABLE);
+        if (r < 0)
+                return r;
+
+        typesafe_qsort(c->update_sets, c->n_update_sets, update_set_cmp);
+        return 0;
+}
+
+static const char *update_set_flags_to_string(UpdateSetFlags flags) {
+
+        switch ((unsigned) flags) {
+
+        case 0:
+                return "n/a";
+
+        case UPDATE_INSTALLED|UPDATE_NEWEST:
+        case UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_PROTECTED:
+        case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST:
+        case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST|UPDATE_PROTECTED:
+                return "current";
+
+        case UPDATE_AVAILABLE|UPDATE_NEWEST:
+        case UPDATE_AVAILABLE|UPDATE_NEWEST|UPDATE_PROTECTED:
+                return "candidate";
+
+        case UPDATE_INSTALLED:
+        case UPDATE_INSTALLED|UPDATE_AVAILABLE:
+                return "installed";
+
+        case UPDATE_INSTALLED|UPDATE_PROTECTED:
+        case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_PROTECTED:
+                return "protected";
+
+        case UPDATE_AVAILABLE:
+        case UPDATE_AVAILABLE|UPDATE_PROTECTED:
+                return "available";
+
+        case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_NEWEST:
+        case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED:
+        case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST:
+        case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED:
+                return "current+obsolete";
+
+        case UPDATE_INSTALLED|UPDATE_OBSOLETE:
+        case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE:
+                return "installed+obsolete";
+
+        case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_PROTECTED:
+        case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_PROTECTED:
+                return "protected+obsolete";
+
+        case UPDATE_AVAILABLE|UPDATE_OBSOLETE:
+        case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_PROTECTED:
+        case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST:
+        case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED:
+                return "available+obsolete";
+
+        default:
+                assert_not_reached();
+        }
+}
+
+
+static int context_show_table(Context *c) {
+        _cleanup_(table_unrefp) Table *t = NULL;
+        int r;
+
+        assert(c);
+
+        t = table_new("", "version", "installed", "available", "assessment");
+        if (!t)
+                return log_oom();
+
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 0), 100);
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 2), 50);
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 3), 50);
+
+        for (size_t i = 0; i < c->n_update_sets; i++) {
+                UpdateSet *us = c->update_sets[i];
+                const char *color;
+
+                color = update_set_flags_to_color(us->flags);
+
+                r = table_add_many(t,
+                                   TABLE_STRING,    update_set_flags_to_glyph(us->flags),
+                                   TABLE_SET_COLOR, color,
+                                   TABLE_STRING,    us->version,
+                                   TABLE_SET_COLOR, color,
+                                   TABLE_STRING,    special_glyph_check_mark_space(FLAGS_SET(us->flags, UPDATE_INSTALLED)),
+                                   TABLE_SET_COLOR, color,
+                                   TABLE_STRING,    special_glyph_check_mark_space(FLAGS_SET(us->flags, UPDATE_AVAILABLE)),
+                                   TABLE_SET_COLOR, color,
+                                   TABLE_STRING,    update_set_flags_to_string(us->flags),
+                                   TABLE_SET_COLOR, color);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        return table_print_with_pager(t, arg_json_format_flags, arg_pager_flags, arg_legend);
+}
+
+static UpdateSet *context_update_set_by_version(Context *c, const char *version) {
+        assert(c);
+        assert(version);
+
+        for (size_t i = 0; i < c->n_update_sets; i++)
+                if (streq(c->update_sets[i]->version, version))
+                        return c->update_sets[i];
+
+        return NULL;
+}
+
+static int context_show_version(Context *c, const char *version) {
+        bool show_fs_columns = false, show_partition_columns = false,
+                have_fs_attributes = false, have_partition_attributes = false,
+                have_size = false, have_tries = false, have_no_auto = false,
+                have_read_only = false, have_growfs = false, have_sha256 = false;
+        _cleanup_(table_unrefp) Table *t = NULL;
+        UpdateSet *us;
+        int r;
+
+        assert(c);
+        assert(version);
+
+        us = context_update_set_by_version(c, version);
+        if (!us)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOENT), "Update '%s' not found.", version);
+
+        if (arg_json_format_flags & (JSON_FORMAT_OFF|JSON_FORMAT_PRETTY|JSON_FORMAT_PRETTY_AUTO))
+                (void) pager_open(arg_pager_flags);
+
+        if (FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
+                printf("%s%s%s Version: %s\n"
+                       "    State: %s%s%s\n"
+                       "Installed: %s%s\n"
+                       "Available: %s%s\n"
+                       "Protected: %s%s%s\n"
+                       " Obsolete: %s%s%s\n\n",
+                       strempty(update_set_flags_to_color(us->flags)), update_set_flags_to_glyph(us->flags), ansi_normal(), us->version,
+                       strempty(update_set_flags_to_color(us->flags)), update_set_flags_to_string(us->flags), ansi_normal(),
+                       yes_no(us->flags & UPDATE_INSTALLED), FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_NEWEST) ? " (newest)" : "",
+                       yes_no(us->flags & UPDATE_AVAILABLE), (us->flags & (UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST)) == (UPDATE_AVAILABLE|UPDATE_NEWEST) ? " (newest)" : "",
+                       FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PROTECTED) ? ansi_highlight() : "", yes_no(FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PROTECTED)), ansi_normal(),
+                       us->flags & UPDATE_OBSOLETE ? ansi_highlight_red() : "", yes_no(us->flags & UPDATE_OBSOLETE), ansi_normal());
+
+
+        t = table_new("type", "path", "ptuuid", "ptflags", "mtime", "mode", "size", "tries-done", "tries-left", "noauto", "ro", "growfs", "sha256");
+        if (!t)
+                return log_oom();
+
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 3), 100);
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 4), 100);
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 5), 100);
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 6), 100);
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 7), 100);
+        (void) table_set_align_percent(t, table_get_cell(t, 0, 8), 100);
+        table_set_ersatz_string(t, TABLE_ERSATZ_DASH);
+
+        /* Determine if the target will make use of partition/fs attributes for any of the transfers */
+        for (size_t n = 0; n < c->n_transfers; n++) {
+                Transfer *tr = c->transfers[n];
+
+                if (tr->target.type == RESOURCE_PARTITION)
+                        show_partition_columns = true;
+                if (RESOURCE_IS_FILESYSTEM(tr->target.type))
+                        show_fs_columns = true;
+        }
+
+        for (size_t n = 0; n < us->n_instances; n++) {
+                Instance *i = us->instances[n];
+
+                r = table_add_many(t,
+                                   TABLE_STRING, resource_type_to_string(i->resource->type),
+                                   TABLE_PATH, i->path);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.partition_uuid_set) {
+                        have_partition_attributes = true;
+                        r = table_add_cell(t, NULL, TABLE_UUID, &i->metadata.partition_uuid);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.partition_flags_set) {
+                        have_partition_attributes = true;
+                        r = table_add_cell(t, NULL, TABLE_UINT64_HEX, &i->metadata.partition_flags);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.mtime != USEC_INFINITY) {
+                        have_fs_attributes = true;
+                        r = table_add_cell(t, NULL, TABLE_TIMESTAMP, &i->metadata.mtime);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.mode != MODE_INVALID) {
+                        have_fs_attributes = true;
+                        r = table_add_cell(t, NULL, TABLE_MODE, &i->metadata.mode);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.size != UINT64_MAX) {
+                        have_size = true;
+                        r = table_add_cell(t, NULL, TABLE_SIZE, &i->metadata.size);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.tries_done != UINT64_MAX) {
+                        have_tries = true;
+                        r = table_add_cell(t, NULL, TABLE_UINT64, &i->metadata.tries_done);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.tries_left != UINT64_MAX) {
+                        have_tries = true;
+                        r = table_add_cell(t, NULL, TABLE_UINT64, &i->metadata.tries_left);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.no_auto >= 0) {
+                        bool b;
+
+                        have_no_auto = true;
+                        b = i->metadata.no_auto;
+                        r = table_add_cell(t, NULL, TABLE_BOOLEAN, &b);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+                if (i->metadata.read_only >= 0) {
+                        bool b;
+
+                        have_read_only = true;
+                        b = i->metadata.read_only;
+                        r = table_add_cell(t, NULL, TABLE_BOOLEAN, &b);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.growfs >= 0) {
+                        bool b;
+
+                        have_growfs = true;
+                        b = i->metadata.growfs;
+                        r = table_add_cell(t, NULL, TABLE_BOOLEAN, &b);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                if (i->metadata.sha256sum_set) {
+                        _cleanup_free_ char *formatted = NULL;
+
+                        have_sha256 = true;
+
+                        formatted = hexmem(i->metadata.sha256sum, sizeof(i->metadata.sha256sum));
+                        if (!formatted)
+                                return log_oom();
+
+                        r = table_add_cell(t, NULL, TABLE_STRING, formatted);
+                } else
+                        r = table_add_cell(t, NULL, TABLE_EMPTY, NULL);
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        /* Hide the fs/partition columns if we don't have any data to show there */
+        if (!have_fs_attributes)
+                show_fs_columns = false;
+        if (!have_partition_attributes)
+                show_partition_columns = false;
+
+        if (!show_partition_columns)
+                (void) table_hide_column_from_display(t, 2, 3);
+        if (!show_fs_columns)
+                (void) table_hide_column_from_display(t, 4, 5);
+        if (!have_size)
+                (void) table_hide_column_from_display(t, 6);
+        if (!have_tries)
+                (void) table_hide_column_from_display(t, 7, 8);
+        if (!have_no_auto)
+                (void) table_hide_column_from_display(t, 9);
+        if (!have_read_only)
+                (void) table_hide_column_from_display(t, 10);
+        if (!have_growfs)
+                (void) table_hide_column_from_display(t, 11);
+        if (!have_sha256)
+                (void) table_hide_column_from_display(t, 12);
+
+        return table_print_with_pager(t, arg_json_format_flags, arg_pager_flags, arg_legend);
+}
+
+static int context_vacuum(
+                Context *c,
+                uint64_t space,
+                const char *extra_protected_version) {
+
+        int r, count = 0;
+
+        assert(c);
+
+        if (space == 0)
+                log_info("Making room%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+        else
+                log_info("Making room for %" PRIu64 " updates%s", space,special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        for (size_t i = 0; i < c->n_transfers; i++) {
+                r = transfer_vacuum(c->transfers[i], space, extra_protected_version);
+                if (r < 0)
+                        return r;
+
+                count = MAX(count, r);
+        }
+
+        if (count > 0)
+                log_info("Removed %i instances.", count);
+        else
+                log_info("Removed no instances.");
+
+        return 0;
+}
+
+static int context_make_offline(Context **ret, const char *node) {
+        _cleanup_(context_freep) Context* context = NULL;
+        int r;
+
+        assert(ret);
+
+        /* Allocates a context object and initializes everything we can initialize offline, i.e. without
+         * checking on the update source (i.e. the Internet) what versions are available */
+
+        context = context_new();
+        if (!context)
+                return log_oom();
+
+        r = context_read_definitions(context, arg_definitions, arg_component, arg_root, node);
+        if (r < 0)
+                return r;
+
+        r = context_load_installed_instances(context);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(context);
+        return 0;
+}
+
+static int context_make_online(Context **ret, const char *node) {
+        _cleanup_(context_freep) Context* context = NULL;
+        int r;
+
+        assert(ret);
+
+        /* Like context_make_offline(), but also communicates with the update source looking for new
+         * versions. */
+
+        r = context_make_offline(&context, node);
+        if (r < 0)
+                return r;
+
+        r = context_load_available_instances(context);
+        if (r < 0)
+                return r;
+
+        r = context_discover_update_sets(context);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(context);
+        return 0;
+}
+
+static int context_apply(
+                Context *c,
+                const char *version,
+                UpdateSet **ret_applied) {
+
+        UpdateSet *us = NULL;
+        int r;
+
+        assert(c);
+
+        if (version) {
+                us = context_update_set_by_version(c, version);
+                if (!us)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENOENT), "Update '%s' not found.", version);
+        } else {
+                if (!c->candidate) {
+                        log_info("No update needed.");
+
+                        if (ret_applied)
+                                *ret_applied = NULL;
+
+                        return 0;
+                }
+
+                us = c->candidate;
+        }
+
+        if (FLAGS_SET(us->flags, UPDATE_INSTALLED)) {
+                log_info("Selected update '%s' is already installed. Skipping update.", us->version);
+
+                if (ret_applied)
+                        *ret_applied = NULL;
+
+                return 0;
+        }
+        if (!FLAGS_SET(us->flags, UPDATE_AVAILABLE))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Selected update '%s' is not available, refusing.", us->version);
+        if (FLAGS_SET(us->flags, UPDATE_OBSOLETE))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Selected update '%s' is obsolete, refusing.", us->version);
+
+        assert((us->flags & (UPDATE_AVAILABLE|UPDATE_INSTALLED|UPDATE_OBSOLETE)) == UPDATE_AVAILABLE);
+
+        if (!FLAGS_SET(us->flags, UPDATE_NEWEST))
+                log_notice("Selected update '%s' is not the newest, proceeding anyway.", us->version);
+        if (c->newest_installed && strverscmp_improved(c->newest_installed->version, us->version) > 0)
+                log_notice("Selected update '%s' is older than newest installed version, proceeding anyway.", us->version);
+
+        log_info("Selected update '%s' for install.", us->version);
+
+        (void) sd_notifyf(false,
+                          "STATUS=Making room for '%s'.", us->version);
+
+        /* Let's make some room. We make sure for each transfer we have one free space to fill. While
+         * removing stuff we'll protect the version we are trying to acquire. Why that? Maybe an earlier
+         * download succeeded already, in which case we shouldn't remove it just to acquire it again */
+        r = context_vacuum(
+                        c,
+                        /* space = */ 1,
+                        /* extra_protected_version = */ us->version);
+        if (r < 0)
+                return r;
+
+        if (arg_sync)
+                sync();
+
+        (void) sd_notifyf(false,
+                          "STATUS=Updating to '%s'.\n", us->version);
+
+        /* There should now be one instance picked for each transfer, and the order is the same */
+        assert(us->n_instances == c->n_transfers);
+
+        for (size_t i = 0; i < c->n_transfers; i++) {
+                r = transfer_acquire_instance(c->transfers[i], us->instances[i]);
+                if (r < 0)
+                        return r;
+        }
+
+        if (arg_sync)
+                sync();
+
+        for (size_t i = 0; i < c->n_transfers; i++) {
+                r = transfer_install_instance(c->transfers[i], us->instances[i], arg_root);
+                if (r < 0)
+                        return r;
+        }
+
+        log_info("%s Successfully installed update '%s'.", special_glyph(SPECIAL_GLYPH_SPARKLES), us->version);
+
+        if (ret_applied)
+                *ret_applied = us;
+
+        return 1;
+}
+
+static int reboot_now(void) {
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
+        int r;
+
+        r = sd_bus_open_system(&bus);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open bus connection: %m");
+
+        r = bus_call_method(bus, bus_login_mgr, "RebootWithFlags", &error, NULL, "t",
+                            (uint64_t) SD_LOGIND_ROOT_CHECK_INHIBITORS);
+        if (r < 0)
+                return log_error_errno(r, "Failed to issue reboot request: %s", bus_error_message(&error, r));
+
+        return 0;
+}
+
+static int process_image(
+                bool ro,
+                char **ret_mounted_dir,
+                LoopDevice **ret_loop_device) {
+
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
+        int r;
+
+        assert(ret_mounted_dir);
+        assert(ret_loop_device);
+
+        if (!arg_image)
+                return 0;
+
+        assert(!arg_root);
+
+        r = mount_image_privately_interactively(
+                        arg_image,
+                        (ro ? DISSECT_IMAGE_READ_ONLY : 0) |
+                        DISSECT_IMAGE_FSCK |
+                        DISSECT_IMAGE_MKDIR |
+                        DISSECT_IMAGE_GROWFS |
+                        DISSECT_IMAGE_RELAX_VAR_CHECK |
+                        DISSECT_IMAGE_USR_NO_ROOT |
+                        DISSECT_IMAGE_GENERIC_ROOT |
+                        DISSECT_IMAGE_REQUIRE_ROOT,
+                        &mounted_dir,
+                        &loop_device);
+        if (r < 0)
+                return r;
+
+        arg_root = strdup(mounted_dir);
+        if (!arg_root)
+                return log_oom();
+
+        *ret_mounted_dir = TAKE_PTR(mounted_dir);
+        *ret_loop_device = TAKE_PTR(loop_device);
+
+        return 0;
+}
+
+static int verb_list(int argc, char **argv, void *userdata) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
+        _cleanup_(context_freep) Context* context = NULL;
+        const char *version;
+        int r;
+
+        assert(argc <= 2);
+        version = argc >= 2 ? argv[1] : NULL;
+
+        r = process_image(/* ro= */ true, &mounted_dir, &loop_device);
+        if (r < 0)
+                return r;
+
+        r = context_make_online(&context, loop_device ? loop_device->node : NULL);
+        if (r < 0)
+                return r;
+
+        if (version)
+                return context_show_version(context, version);
+        else
+                return context_show_table(context);
+}
+
+static int verb_check_new(int argc, char **argv, void *userdata) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
+        _cleanup_(context_freep) Context* context = NULL;
+        int r;
+
+        assert(argc <= 1);
+
+        r = process_image(/* ro= */ true, &mounted_dir, &loop_device);
+        if (r < 0)
+                return r;
+
+        r = context_make_online(&context, loop_device ? loop_device->node : NULL);
+        if (r < 0)
+                return r;
+
+        if (!context->candidate) {
+                log_debug("No candidate found.");
+                return EXIT_FAILURE;
+        }
+
+        puts(context->candidate->version);
+        return EXIT_SUCCESS;
+}
+
+static int verb_vacuum(int argc, char **argv, void *userdata) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
+        _cleanup_(context_freep) Context* context = NULL;
+        int r;
+
+        assert(argc <= 1);
+
+        r = process_image(/* ro= */ false, &mounted_dir, &loop_device);
+        if (r < 0)
+                return r;
+
+        r = context_make_offline(&context, loop_device ? loop_device->node : NULL);
+        if (r < 0)
+                return r;
+
+        return context_vacuum(context, 0, NULL);
+}
+
+static int verb_update(int argc, char **argv, void *userdata) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
+        _cleanup_(context_freep) Context* context = NULL;
+        _cleanup_free_ char *booted_version = NULL;
+        UpdateSet *applied = NULL;
+        const char *version;
+        int r;
+
+        assert(argc <= 2);
+        version = argc >= 2 ? argv[1] : NULL;
+
+        if (arg_reboot) {
+                /* If automatic reboot on completion is requested, let's first determine the currently booted image */
+
+                r = parse_os_release(arg_root, "IMAGE_VERSION", &booted_version);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse /etc/os-release: %m");
+                if (!booted_version)
+                        return log_error_errno(SYNTHETIC_ERRNO(ENODATA), "/etc/os-release lacks IMAGE_VERSION field.");
+        }
+
+        r = process_image(/* ro= */ false, &mounted_dir, &loop_device);
+        if (r < 0)
+                return r;
+
+        r = context_make_online(&context, loop_device ? loop_device->node : NULL);
+        if (r < 0)
+                return r;
+
+        r = context_apply(context, version, &applied);
+        if (r < 0)
+                return r;
+
+        if (r > 0 && arg_reboot) {
+                assert(applied);
+                assert(booted_version);
+
+                if (strverscmp_improved(applied->version, booted_version) > 0) {
+                        log_notice("Newly installed version is newer than booted version, rebooting.");
+                        return reboot_now();
+                }
+
+                log_info("Booted version is newer or identical to newly installed version, not rebooting.");
+        }
+
+        return 0;
+}
+
+static int verb_pending_or_reboot(int argc, char **argv, void *userdata) {
+        _cleanup_(context_freep) Context* context = NULL;
+        _cleanup_free_ char *booted_version = NULL;
+        int r;
+
+        assert(argc == 1);
+
+        if (arg_image || arg_root)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "The --root=/--image switches may not be combined with the '%s' operation.", argv[0]);
+
+        r = context_make_offline(&context, NULL);
+        if (r < 0)
+                return r;
+
+        log_info("Determining installed update sets%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        r = context_discover_update_sets_by_flag(context, UPDATE_INSTALLED);
+        if (r < 0)
+                return r;
+        if (!context->newest_installed)
+                return log_error_errno(SYNTHETIC_ERRNO(ENODATA), "Couldn't find any suitable installed versions.");
+
+        r = parse_os_release(arg_root, "IMAGE_VERSION", &booted_version);
+        if (r < 0) /* yes, arg_root is NULL here, but we have to pass something, and it's a lot more readable
+                    * if we see what the first argument is about */
+                return log_error_errno(r, "Failed to parse /etc/os-release: %m");
+        if (!booted_version)
+                return log_error_errno(SYNTHETIC_ERRNO(ENODATA), "/etc/os-release lacks IMAGE_VERSION= field.");
+
+        r = strverscmp_improved(context->newest_installed->version, booted_version);
+        if (r > 0) {
+                log_notice("Newest installed version '%s' is newer than booted version '%s'.%s",
+                           context->newest_installed->version, booted_version,
+                           streq(argv[0], "pending") ? " Reboot recommended." : "");
+
+                if (streq(argv[0], "reboot"))
+                        return reboot_now();
+
+                return EXIT_SUCCESS;
+        } else if (r == 0)
+                log_info("Newest installed version '%s' matches booted version '%s'.",
+                         context->newest_installed->version, booted_version);
+        else
+                log_warning("Newest installed version '%s' is older than booted version '%s'.",
+                            context->newest_installed->version, booted_version);
+
+        if (streq(argv[0], "pending")) /* When called as 'pending' tell the caller via failure exit code that there's nothing newer installed */
+                return EXIT_FAILURE;
+
+        return EXIT_SUCCESS;
+}
+
+static int component_name_valid(const char *c) {
+        _cleanup_free_ char *j = NULL;
+
+        /* See if the specified string enclosed in the directory prefix+suffix would be a valid file name */
+
+        if (isempty(c))
+                return false;
+
+        if (string_has_cc(c, NULL))
+                return false;
+
+        if (!utf8_is_valid(c))
+                return false;
+
+        j = strjoin("sysupdate.", c, ".d");
+        if (!j)
+                return -ENOMEM;
+
+        return filename_is_valid(j);
+}
+
+static int verb_components(int argc, char **argv, void *userdata) {
+        _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL;
+        _cleanup_(set_freep) Set *names = NULL;
+        _cleanup_free_ char **z = NULL; /* We use simple free() rather than strv_free() here, since set_free() will free the strings for us */
+        char **l = CONF_PATHS_STRV("");
+        bool has_default_component = false;
+        int r;
+
+        assert(argc <= 1);
+
+        r = process_image(/* ro= */ false, &mounted_dir, &loop_device);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(i, l) {
+                _cleanup_closedir_ DIR *d = NULL;
+                _cleanup_free_ char *p = NULL;
+
+                r = chase_symlinks_and_opendir(*i, arg_root, CHASE_PREFIX_ROOT, &p, &d);
+                if (r == -ENOENT)
+                        continue;
+                if (r < 0)
+                        return log_error_errno(r, "Failed to open directory '%s': %m", *i);
+
+                for (;;) {
+                        _cleanup_free_ char *n = NULL;
+                        struct dirent *de;
+                        const char *e, *a;
+
+                        de = readdir_ensure_type(d);
+                        if (!de) {
+                                if (errno != 0)
+                                        return log_error_errno(errno, "Failed to enumerate directory '%s': %m", p);
+
+                                break;
+                        }
+
+                        if (de->d_type != DT_DIR)
+                                continue;
+
+                        if (dot_or_dot_dot(de->d_name))
+                                continue;
+
+                        if (streq(de->d_name, "sysupdate.d")) {
+                                has_default_component = true;
+                                continue;
+                        }
+
+                        e = startswith(de->d_name, "sysupdate.");
+                        if (!e)
+                                continue;
+
+                        a = endswith(e, ".d");
+                        if (!a)
+                                continue;
+
+                        n = strndup(e, a - e);
+                        if (!n)
+                                return log_oom();
+
+                        r = component_name_valid(n);
+                        if (r < 0)
+                                return log_error_errno(r, "Unable to validate component name: %m");
+                        if (r == 0)
+                                continue;
+
+                        r = set_ensure_consume(&names, &string_hash_ops_free, TAKE_PTR(n));
+                        if (r < 0 && r != -EEXIST)
+                                return log_error_errno(r, "Failed to add component to set: %m");
+                }
+        }
+
+        if (!has_default_component && set_isempty(names)) {
+                log_info("No components defined.");
+                return 0;
+        }
+
+        z = set_get_strv(names);
+        if (!z)
+                return log_oom();
+
+        strv_sort(z);
+
+        if (has_default_component)
+                printf("%s<default>%s\n",
+                       ansi_highlight(), ansi_normal());
+
+        STRV_FOREACH(i, z)
+                puts(*i);
+
+        return 0;
+}
+
+static int verb_help(int argc, char **argv, void *userdata) {
+        _cleanup_free_ char *link = NULL;
+        int r;
+
+        r = terminal_urlify_man("systemd-sysupdate", "8", &link);
+        if (r < 0)
+                return log_oom();
+
+        printf("%1$s [OPTIONS...] [VERSION]\n"
+               "\n%5$sUpdate OS images.%6$s\n"
+               "\n%3$sCommands:%4$s\n"
+               "  list [VERSION]          Show installed and available versions\n"
+               "  check-new               Check if there's a new version available\n"
+               "  update [VERSION]        Install new version now\n"
+               "  vacuum                  Make room, by deleting old versions\n"
+               "  pending                 Report whether a newer version is installed than\n"
+               "                          currently booted\n"
+               "  reboot                  Reboot if a newer version is installed than booted\n"
+               "  components              Show list of components\n"
+               "  -h --help               Show this help\n"
+               "     --version            Show package version\n"
+               "\n%3$sOptions:%4$s\n"
+               "  -C --component=NAME     Select component to update\n"
+               "     --definitions=DIR    Find transfer definitions in specified directory\n"
+               "     --root=PATH          Operate relative to root path\n"
+               "     --image=PATH         Operate relative to image file\n"
+               "  -m --instances-max=INT  How many instances to maintain\n"
+               "     --sync=BOOL          Controls whether to sync data to disk\n"
+               "     --verify=BOOL        Force signature verification on or off\n"
+               "     --reboot             Reboot after updating to newer version\n"
+               "     --no-pager           Do not pipe output into a pager\n"
+               "     --no-legend          Do not show the headers and footers\n"
+               "     --json=pretty|short|off\n"
+               "                          Generate JSON output\n"
+               "\nSee the %2$s for details.\n"
+               , program_invocation_short_name
+               , link
+               , ansi_underline(), ansi_normal()
+               , ansi_highlight(), ansi_normal()
+        );
+
+        return 0;
+}
+
+static int parse_argv(int argc, char *argv[]) {
+
+        enum {
+                ARG_VERSION = 0x100,
+                ARG_NO_PAGER,
+                ARG_NO_LEGEND,
+                ARG_SYNC,
+                ARG_DEFINITIONS,
+                ARG_JSON,
+                ARG_ROOT,
+                ARG_IMAGE,
+                ARG_REBOOT,
+                ARG_VERIFY,
+        };
+
+        static const struct option options[] = {
+                { "help",              no_argument,       NULL, 'h'                   },
+                { "version",           no_argument,       NULL, ARG_VERSION           },
+                { "no-pager",          no_argument,       NULL, ARG_NO_PAGER          },
+                { "no-legend",         no_argument,       NULL, ARG_NO_LEGEND         },
+                { "definitions",       required_argument, NULL, ARG_DEFINITIONS       },
+                { "instances-max",     required_argument, NULL, 'm'                   },
+                { "sync",              required_argument, NULL, ARG_SYNC              },
+                { "json",              required_argument, NULL, ARG_JSON              },
+                { "root",              required_argument, NULL, ARG_ROOT              },
+                { "image",             required_argument, NULL, ARG_IMAGE             },
+                { "reboot",            no_argument,       NULL, ARG_REBOOT            },
+                { "component",         required_argument, NULL, 'C'                   },
+                { "verify",            required_argument, NULL, ARG_VERIFY            },
+                {}
+        };
+
+        int c, r;
+
+        assert(argc >= 0);
+        assert(argv);
+
+        while ((c = getopt_long(argc, argv, "hm:C:", options, NULL)) >= 0) {
+
+                switch (c) {
+
+                case 'h':
+                        return verb_help(0, NULL, NULL);
+
+                case ARG_VERSION:
+                        return version();
+
+                case ARG_NO_PAGER:
+                        arg_pager_flags |= PAGER_DISABLE;
+                        break;
+
+                case ARG_NO_LEGEND:
+                        arg_legend = false;
+                        break;
+
+                case 'm':
+                        r = safe_atou64(optarg, &arg_instances_max);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --instances-max= parameter: %s", optarg);
+
+                        break;
+
+                case ARG_SYNC:
+                        r = parse_boolean_argument("--sync=", optarg, &arg_sync);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_DEFINITIONS:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_definitions);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_JSON:
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
+
+                        break;
+
+                case ARG_ROOT:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_root);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_IMAGE:
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
+                        if (r < 0)
+                                return r;
+                        break;
+
+                case ARG_REBOOT:
+                        arg_reboot = true;
+                        break;
+
+                case 'C':
+                        if (isempty(optarg)) {
+                                arg_component = mfree(arg_component);
+                                break;
+                        }
+
+                        r = component_name_valid(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to determine if component name is valid: %m");
+                        if (r == 0)
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Component name invalid: %s", optarg);
+
+                        r = free_and_strdup_warn(&arg_component, optarg);
+                        if (r < 0)
+                                return r;
+
+                        break;
+
+                case ARG_VERIFY: {
+                        bool b;
+
+                        r = parse_boolean_argument("--verify=", optarg, &b);
+                        if (r < 0)
+                                return r;
+
+                        arg_verify = b;
+                        break;
+                }
+
+                case '?':
+                        return -EINVAL;
+
+                default:
+                        assert_not_reached();
+                }
+        }
+
+        if (arg_image && arg_root)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Please specify either --root= or --image=, the combination of both is not supported.");
+
+        if ((arg_image || arg_root) && arg_reboot)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "The --reboot switch may not be combined with --root= or --image=.");
+
+        if (arg_definitions && arg_component)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "The --definitions= and --component= switches may not be combined.");
+
+        return 1;
+}
+
+static int sysupdate_main(int argc, char *argv[]) {
+
+        static const Verb verbs[] = {
+                { "list",       VERB_ANY, 2, VERB_DEFAULT, verb_list              },
+                { "components", VERB_ANY, 1, 0,            verb_components        },
+                { "check-new",  VERB_ANY, 1, 0,            verb_check_new         },
+                { "update",     VERB_ANY, 2, 0,            verb_update               },
+                { "vacuum",     VERB_ANY, 1, 0,            verb_vacuum            },
+                { "reboot",     1,        1, 0,            verb_pending_or_reboot },
+                { "pending",    1,        1, 0,            verb_pending_or_reboot },
+                { "help",       VERB_ANY, 1, 0,            verb_help              },
+                {}
+        };
+
+        return dispatch_verb(argc, argv, verbs, NULL);
+}
+
+static int run(int argc, char *argv[]) {
+        int r;
+
+        log_setup();
+
+        r = parse_argv(argc, argv);
+        if (r <= 0)
+                return r;
+
+        return sysupdate_main(argc, argv);
+}
+
+DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
diff --git a/src/sysupdate/sysupdate.h b/src/sysupdate/sysupdate.h
new file mode 100644
index 0000000..6d387b7
--- /dev/null
+++ b/src/sysupdate/sysupdate.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <inttypes.h>
+#include <stdbool.h>
+
+extern bool arg_sync;
+extern uint64_t arg_instances_max;
+extern char *arg_root;
+
+static inline const char* import_binary_path(void) {
+        return secure_getenv("SYSTEMD_IMPORT_PATH") ?: SYSTEMD_IMPORT_PATH;
+}
+
+static inline const char* import_fs_binary_path(void) {
+        return secure_getenv("SYSTEMD_IMPORT_FS_PATH") ?: SYSTEMD_IMPORT_FS_PATH;
+}
+
+static inline const char *pull_binary_path(void) {
+        return secure_getenv("SYSTEMD_PULL_PATH") ?: SYSTEMD_PULL_PATH;
+}
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index 669efe4..3c438a3 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -4,11 +4,14 @@
 #include <utmp.h>
 
 #include "alloc-util.h"
+#include "build.h"
+#include "chase-symlinks.h"
 #include "conf-files.h"
+#include "constants.h"
 #include "copy.h"
 #include "creds-util.h"
-#include "def.h"
 #include "dissect-image.h"
+#include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
@@ -27,22 +30,38 @@
 #include "set.h"
 #include "smack-util.h"
 #include "specifier.h"
+#include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "tmpfile-util-label.h"
+#include "uid-alloc-range.h"
 #include "uid-range.h"
-#include "user-record.h"
 #include "user-util.h"
 #include "utf8.h"
-#include "util.h"
 
 typedef enum ItemType {
-        ADD_USER = 'u',
-        ADD_GROUP = 'g',
+        ADD_USER =   'u',
+        ADD_GROUP =  'g',
         ADD_MEMBER = 'm',
-        ADD_RANGE = 'r',
+        ADD_RANGE =  'r',
 } ItemType;
 
+static inline const char* item_type_to_string(ItemType t) {
+        switch (t) {
+        case ADD_USER:
+                return "user";
+        case ADD_GROUP:
+                return "group";
+        case ADD_MEMBER:
+                return "member";
+        case ADD_RANGE:
+                return "range";
+        default:
+                assert_not_reached();
+        }
+}
+
 typedef struct Item {
         ItemType type;
 
@@ -57,23 +76,27 @@
         gid_t gid;
         uid_t uid;
 
-        bool gid_set:1;
+        char *filename;
+        unsigned line;
 
-        /* When set the group with the specified gid must exist
-         * and the check if a uid clashes with the gid is skipped.
+        bool gid_set;
+
+        /* When set the group with the specified GID must exist
+         * and the check if a UID clashes with the GID is skipped.
          */
-        bool id_set_strict:1;
+        bool id_set_strict;
 
-        bool uid_set:1;
+        bool uid_set;
 
-        bool todo_user:1;
-        bool todo_group:1;
+        bool todo_user;
+        bool todo_group;
 } Item;
 
 static char *arg_root = NULL;
 static char *arg_image = NULL;
 static bool arg_cat_config = false;
 static const char *arg_replace = NULL;
+static bool arg_dry_run = false;
 static bool arg_inline = false;
 static PagerFlags arg_pager_flags = 0;
 
@@ -87,7 +110,6 @@
 
 static uid_t search_uid = UID_INVALID;
 static UidRange *uid_range = NULL;
-static unsigned n_uid_range = 0;
 
 static UGIDAllocationRange login_defs = {};
 static bool login_defs_need_warning = false;
@@ -103,7 +125,7 @@
 STATIC_DESTRUCTOR_REGISTER(database_by_gid, hashmap_freep);
 STATIC_DESTRUCTOR_REGISTER(database_by_groupname, hashmap_freep);
 STATIC_DESTRUCTOR_REGISTER(database_groups, set_free_freep);
-STATIC_DESTRUCTOR_REGISTER(uid_range, freep);
+STATIC_DESTRUCTOR_REGISTER(uid_range, uid_range_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
 
@@ -113,6 +135,14 @@
         return IN_SET(code, 0, ENOENT, ESRCH, EBADF, EPERM);
 }
 
+/* Note: the lifetime of the compound literal is the immediately surrounding block,
+ * see C11 §6.5.2.5, and
+ * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
+#define FORMAT_UID(is_set, uid) \
+        ((is_set) ? snprintf_ok((char[DECIMAL_STR_MAX(uid_t)]){}, DECIMAL_STR_MAX(uid_t), UID_FMT, uid) : "(unset)")
+#define FORMAT_GID(is_set, gid) \
+        ((is_set) ? snprintf_ok((char[DECIMAL_STR_MAX(gid_t)]){}, DECIMAL_STR_MAX(gid_t), GID_FMT, gid) : "(unset)")
+
 static void maybe_emit_login_defs_warning(void) {
         if (!login_defs_need_warning)
                 return;
@@ -122,13 +152,13 @@
                 log_warning("login.defs specifies UID allocation range "UID_FMT"–"UID_FMT
                             " that is different than the built-in defaults ("UID_FMT"–"UID_FMT")",
                             login_defs.system_alloc_uid_min, login_defs.system_uid_max,
-                            SYSTEM_ALLOC_UID_MIN, SYSTEM_UID_MAX);
+                            (uid_t) SYSTEM_ALLOC_UID_MIN, (uid_t) SYSTEM_UID_MAX);
         if (login_defs.system_alloc_gid_min != SYSTEM_ALLOC_GID_MIN ||
             login_defs.system_gid_max != SYSTEM_GID_MAX)
                 log_warning("login.defs specifies GID allocation range "GID_FMT"–"GID_FMT
                             " that is different than the built-in defaults ("GID_FMT"–"GID_FMT")",
                             login_defs.system_alloc_gid_min, login_defs.system_gid_max,
-                            SYSTEM_ALLOC_GID_MIN, SYSTEM_GID_MAX);
+                            (gid_t) SYSTEM_ALLOC_GID_MIN, (gid_t) SYSTEM_GID_MAX);
 
         login_defs_need_warning = false;
 }
@@ -232,7 +262,7 @@
 static int make_backup(const char *target, const char *x) {
         _cleanup_(unlink_and_freep) char *dst_tmp = NULL;
         _cleanup_fclose_ FILE *dst = NULL;
-        _cleanup_close_ int src = -1;
+        _cleanup_close_ int src = -EBADF;
         const char *backup;
         struct stat st;
         int r;
@@ -252,10 +282,10 @@
                 return -errno;
 
         r = fopen_temporary_label(
-                        target,   /* The path for which to the lookup the label */
+                        target,   /* The path for which to the look up the label */
                         x,        /* Where we want the file actually to end up */
-                        &dst,
-                        &dst_tmp  /* The temporary file we write to */);
+                        &dst,     /* The temporary file we write to */
+                        &dst_tmp);
         if (r < 0)
                 return r;
 
@@ -295,14 +325,13 @@
         if (a) {
                 _cleanup_strv_free_ char **l = NULL;
                 bool added = false;
-                char **i;
 
                 l = strv_copy(gr->gr_mem);
                 if (!l)
                         return -ENOMEM;
 
                 STRV_FOREACH(i, a) {
-                        if (strv_find(l, *i))
+                        if (strv_contains(l, *i))
                                 continue;
 
                         if (strv_extend(&l, *i) < 0)
@@ -340,14 +369,13 @@
         if (a) {
                 _cleanup_strv_free_ char **l = NULL;
                 bool added = false;
-                char **i;
 
                 l = strv_copy(sg->sg_mem);
                 if (!l)
                         return -ENOMEM;
 
                 STRV_FOREACH(i, a) {
-                        if (strv_find(l, *i))
+                        if (strv_contains(l, *i))
                                 continue;
 
                         if (strv_extend(&l, *i) < 0)
@@ -375,8 +403,14 @@
 }
 #endif
 
-static const char* default_shell(uid_t uid) {
-        return uid == 0 ? "/bin/sh" : NOLOGIN;
+static const char* pick_shell(const Item *i) {
+        if (i->type != ADD_USER)
+                return NULL;
+        if (i->shell)
+                return i->shell;
+        if (i->uid_set && i->uid == 0)
+                return default_root_shell(arg_root);
+        return NOLOGIN;
 }
 
 static int write_temporary_passwd(const char *passwd_path, FILE **tmpfile, char **tmpfile_path) {
@@ -386,9 +420,14 @@
         Item *i;
         int r;
 
-        if (ordered_hashmap_size(todo_uids) == 0)
+        if (ordered_hashmap_isempty(todo_uids))
                 return 0;
 
+        if (arg_dry_run) {
+                log_info("Would write /etc/passwd%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                return 0;
+        }
+
         r = fopen_temporary_label("/etc/passwd", passwd_path, &passwd, &passwd_tmp);
         if (r < 0)
                 return log_debug_errno(r, "Failed to open temporary copy of %s: %m", passwd_path);
@@ -443,7 +482,7 @@
                         .pw_name = i->name,
                         .pw_uid = i->uid,
                         .pw_gid = i->gid,
-                        .pw_gecos = i->description,
+                        .pw_gecos = (char*) strempty(i->description),
 
                         /* "x" means the password is stored in the shadow file */
                         .pw_passwd = (char*) PASSWORD_SEE_SHADOW,
@@ -453,7 +492,7 @@
 
                         /* Initialize the shell to nologin, with one exception:
                          * for root we patch in something special */
-                        .pw_shell = i->shell ?: (char*) default_shell(i->uid),
+                        .pw_shell = (char*) pick_shell(i),
                 };
 
                 /* Try to pick up the shell for this account via the credentials logic */
@@ -487,7 +526,7 @@
                         break;
         }
 
-        r = fflush_and_check(passwd);
+        r = fflush_sync_and_check(passwd);
         if (r < 0)
                 return log_debug_errno(r, "Failed to flush %s: %m", passwd_tmp);
 
@@ -497,6 +536,18 @@
         return 0;
 }
 
+static usec_t epoch_or_now(void) {
+        uint64_t epoch;
+
+        if (getenv_uint64_secure("SOURCE_DATE_EPOCH", &epoch) >= 0) {
+                if (epoch > UINT64_MAX/USEC_PER_SEC) /* Overflow check */
+                        return USEC_INFINITY;
+                return (usec_t) epoch * USEC_PER_SEC;
+        }
+
+        return now(CLOCK_REALTIME);
+}
+
 static int write_temporary_shadow(const char *shadow_path, FILE **tmpfile, char **tmpfile_path) {
         _cleanup_fclose_ FILE *original = NULL, *shadow = NULL;
         _cleanup_(unlink_and_freep) char *shadow_tmp = NULL;
@@ -505,14 +556,19 @@
         Item *i;
         int r;
 
-        if (ordered_hashmap_size(todo_uids) == 0)
+        if (ordered_hashmap_isempty(todo_uids))
                 return 0;
 
+        if (arg_dry_run) {
+                log_info("Would write /etc/shadow%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                return 0;
+        }
+
         r = fopen_temporary_label("/etc/shadow", shadow_path, &shadow, &shadow_tmp);
         if (r < 0)
                 return log_debug_errno(r, "Failed to open temporary copy of %s: %m", shadow_path);
 
-        lstchg = (long) (now(CLOCK_REALTIME) / USEC_PER_DAY);
+        lstchg = (long) (epoch_or_now() / USEC_PER_DAY);
 
         original = fopen(shadow_path, "re");
         if (original) {
@@ -556,7 +612,7 @@
 
         ORDERED_HASHMAP_FOREACH(i, todo_uids) {
                 _cleanup_(erase_and_freep) char *creds_password = NULL;
-                _cleanup_free_ char *cn = NULL;
+                bool is_hashed;
 
                 struct spwd n = {
                         .sp_namp = i->name,
@@ -570,30 +626,16 @@
                         .sp_flag = ULONG_MAX, /* this appears to be what everybody does ... */
                 };
 
-                /* Try to pick up the password for this account via the credentials logic */
-                cn = strjoin("passwd.hashed-password.", i->name);
-                if (!cn)
-                        return -ENOMEM;
+                r = get_credential_user_password(i->name, &creds_password, &is_hashed);
+                if (r < 0)
+                        log_debug_errno(r, "Couldn't read password credential for user '%s', ignoring: %m", i->name);
 
-                r = read_credential(cn, (void**) &creds_password, NULL);
-                if (r == -ENOENT) {
-                        _cleanup_(erase_and_freep) char *plaintext_password = NULL;
-
-                        free(cn);
-                        cn = strjoin("passwd.plaintext-password.", i->name);
-                        if (!cn)
-                                return -ENOMEM;
-
-                        r = read_credential(cn, (void**) &plaintext_password, NULL);
+                if (creds_password && !is_hashed) {
+                        _cleanup_(erase_and_freep) char* plaintext_password = TAKE_PTR(creds_password);
+                        r = hash_password(plaintext_password, &creds_password);
                         if (r < 0)
-                                log_debug_errno(r, "Couldn't read credential '%s', ignoring: %m", cn);
-                        else {
-                                r = hash_password(plaintext_password, &creds_password);
-                                if (r < 0)
-                                        return log_debug_errno(r, "Failed to hash password: %m");
-                        }
-                } else if (r < 0)
-                        log_debug_errno(r, "Couldn't read credential '%s', ignoring: %m", cn);
+                                return log_debug_errno(r, "Failed to hash password: %m");
+                }
 
                 if (creds_password)
                         n.sp_pwdp = creds_password;
@@ -638,19 +680,24 @@
         Item *i;
         int r;
 
-        if (ordered_hashmap_size(todo_gids) == 0 && ordered_hashmap_size(members) == 0)
+        if (ordered_hashmap_isempty(todo_gids) && ordered_hashmap_isempty(members))
                 return 0;
 
+        if (arg_dry_run) {
+                log_info("Would write /etc/group%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                return 0;
+        }
+
         r = fopen_temporary_label("/etc/group", group_path, &group, &group_tmp);
         if (r < 0)
-                return log_debug_errno(r, "Failed to open temporary copy of %s: %m", group_path);
+                return log_error_errno(r, "Failed to open temporary copy of %s: %m", group_path);
 
         original = fopen(group_path, "re");
         if (original) {
 
                 r = copy_rights_with_fallback(fileno(original), fileno(group), group_tmp);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to copy permissions from %s to %s: %m",
+                        return log_error_errno(r, "Failed to copy permissions from %s to %s: %m",
                                                group_path, group_tmp);
 
                 while ((r = fgetgrent_sane(original, &gr)) > 0) {
@@ -676,19 +723,19 @@
 
                         r = putgrent_with_members(gr, group);
                         if (r < 0)
-                                return log_debug_errno(r, "Failed to add existing group \"%s\" to temporary group file: %m",
+                                return log_error_errno(r, "Failed to add existing group \"%s\" to temporary group file: %m",
                                                        gr->gr_name);
                         if (r > 0)
                                 group_changed = true;
                 }
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to read %s: %m", group_path);
+                        return log_error_errno(r, "Failed to read %s: %m", group_path);
 
         } else {
                 if (errno != ENOENT)
-                        return log_debug_errno(errno, "Failed to open %s: %m", group_path);
+                        return log_error_errno(errno, "Failed to open %s: %m", group_path);
                 if (fchmod(fileno(group), 0644) < 0)
-                        return log_debug_errno(errno, "Failed to fchmod %s: %m", group_tmp);
+                        return log_error_errno(errno, "Failed to fchmod %s: %m", group_tmp);
         }
 
         ORDERED_HASHMAP_FOREACH(i, todo_gids) {
@@ -700,7 +747,7 @@
 
                 r = putgrent_with_members(&n, group);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to add new group \"%s\" to temporary group file: %m",
+                        return log_error_errno(r, "Failed to add new group \"%s\" to temporary group file: %m",
                                                gr->gr_name);
 
                 group_changed = true;
@@ -710,19 +757,19 @@
         while (gr) {
                 r = putgrent_sane(gr, group);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to add existing group \"%s\" to temporary group file: %m",
+                        return log_error_errno(r, "Failed to add existing group \"%s\" to temporary group file: %m",
                                                gr->gr_name);
 
                 r = fgetgrent_sane(original, &gr);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to read %s: %m", group_path);
+                        return log_error_errno(r, "Failed to read %s: %m", group_path);
                 if (r == 0)
                         break;
         }
 
         r = fflush_sync_and_check(group);
         if (r < 0)
-                return log_debug_errno(r, "Failed to flush %s: %m", group_tmp);
+                return log_error_errno(r, "Failed to flush %s: %m", group_tmp);
 
         if (group_changed) {
                 *tmpfile = TAKE_PTR(group);
@@ -739,12 +786,17 @@
         Item *i;
         int r;
 
-        if (ordered_hashmap_size(todo_gids) == 0 && ordered_hashmap_size(members) == 0)
+        if (ordered_hashmap_isempty(todo_gids) && ordered_hashmap_isempty(members))
                 return 0;
 
+        if (arg_dry_run) {
+                log_info("Would write /etc/gshadow%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                return 0;
+        }
+
         r = fopen_temporary_label("/etc/gshadow", gshadow_path, &gshadow, &gshadow_tmp);
         if (r < 0)
-                return log_debug_errno(r, "Failed to open temporary copy of %s: %m", gshadow_path);
+                return log_error_errno(r, "Failed to open temporary copy of %s: %m", gshadow_path);
 
         original = fopen(gshadow_path, "re");
         if (original) {
@@ -752,7 +804,7 @@
 
                 r = copy_rights_with_fallback(fileno(original), fileno(gshadow), gshadow_tmp);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to copy permissions from %s to %s: %m",
+                        return log_error_errno(r, "Failed to copy permissions from %s to %s: %m",
                                                gshadow_path, gshadow_tmp);
 
                 while ((r = fgetsgent_sane(original, &sg)) > 0) {
@@ -765,7 +817,7 @@
 
                         r = putsgent_with_members(sg, gshadow);
                         if (r < 0)
-                                return log_debug_errno(r, "Failed to add existing group \"%s\" to temporary gshadow file: %m",
+                                return log_error_errno(r, "Failed to add existing group \"%s\" to temporary gshadow file: %m",
                                                        sg->sg_namp);
                         if (r > 0)
                                 group_changed = true;
@@ -775,9 +827,9 @@
 
         } else {
                 if (errno != ENOENT)
-                        return log_debug_errno(errno, "Failed to open %s: %m", gshadow_path);
+                        return log_error_errno(errno, "Failed to open %s: %m", gshadow_path);
                 if (fchmod(fileno(gshadow), 0000) < 0)
-                        return log_debug_errno(errno, "Failed to fchmod %s: %m", gshadow_tmp);
+                        return log_error_errno(errno, "Failed to fchmod %s: %m", gshadow_tmp);
         }
 
         ORDERED_HASHMAP_FOREACH(i, todo_gids) {
@@ -788,7 +840,7 @@
 
                 r = putsgent_with_members(&n, gshadow);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to add new group \"%s\" to temporary gshadow file: %m",
+                        return log_error_errno(r, "Failed to add new group \"%s\" to temporary gshadow file: %m",
                                                n.sg_namp);
 
                 group_changed = true;
@@ -796,7 +848,7 @@
 
         r = fflush_sync_and_check(gshadow);
         if (r < 0)
-                return log_debug_errno(r, "Failed to flush %s: %m", gshadow_tmp);
+                return log_error_errno(r, "Failed to flush %s: %m", gshadow_tmp);
 
         if (group_changed) {
                 *tmpfile = TAKE_PTR(gshadow);
@@ -837,30 +889,30 @@
         if (group) {
                 r = make_backup("/etc/group", group_path);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to make backup %s: %m", group_path);
+                        return log_error_errno(r, "Failed to make backup %s: %m", group_path);
         }
         if (gshadow) {
                 r = make_backup("/etc/gshadow", gshadow_path);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to make backup %s: %m", gshadow_path);
+                        return log_error_errno(r, "Failed to make backup %s: %m", gshadow_path);
         }
 
         if (passwd) {
                 r = make_backup("/etc/passwd", passwd_path);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to make backup %s: %m", passwd_path);
+                        return log_error_errno(r, "Failed to make backup %s: %m", passwd_path);
         }
         if (shadow) {
                 r = make_backup("/etc/shadow", shadow_path);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to make backup %s: %m", shadow_path);
+                        return log_error_errno(r, "Failed to make backup %s: %m", shadow_path);
         }
 
         /* And make the new files count */
         if (group) {
                 r = rename_and_apply_smack_floor_label(group_tmp, group_path);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to rename %s to %s: %m",
+                        return log_error_errno(r, "Failed to rename %s to %s: %m",
                                                group_tmp, group_path);
                 group_tmp = mfree(group_tmp);
 
@@ -870,7 +922,7 @@
         if (gshadow) {
                 r = rename_and_apply_smack_floor_label(gshadow_tmp, gshadow_path);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to rename %s to %s: %m",
+                        return log_error_errno(r, "Failed to rename %s to %s: %m",
                                                gshadow_tmp, gshadow_path);
 
                 gshadow_tmp = mfree(gshadow_tmp);
@@ -879,7 +931,7 @@
         if (passwd) {
                 r = rename_and_apply_smack_floor_label(passwd_tmp, passwd_path);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to rename %s to %s: %m",
+                        return log_error_errno(r, "Failed to rename %s to %s: %m",
                                                passwd_tmp, passwd_path);
 
                 passwd_tmp = mfree(passwd_tmp);
@@ -890,7 +942,7 @@
         if (shadow) {
                 r = rename_and_apply_smack_floor_label(shadow_tmp, shadow_path);
                 if (r < 0)
-                        return log_debug_errno(r, "Failed to rename %s to %s: %m",
+                        return log_error_errno(r, "Failed to rename %s to %s: %m",
                                                shadow_tmp, shadow_path);
 
                 shadow_tmp = mfree(shadow_tmp);
@@ -957,13 +1009,10 @@
         const char *fix;
 
         fix = prefix_roota(arg_root, p);
-        if (stat(fix, st) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(stat(fix, st));
 }
 
-static int read_id_from_file(Item *i, uid_t *_uid, gid_t *_gid) {
+static int read_id_from_file(Item *i, uid_t *ret_uid, gid_t *ret_gid) {
         struct stat st;
         bool found_uid = false, found_gid = false;
         uid_t uid = 0;
@@ -971,29 +1020,29 @@
 
         assert(i);
 
-        /* First, try to get the gid directly */
-        if (_gid && i->gid_path && root_stat(i->gid_path, &st) >= 0) {
+        /* First, try to get the GID directly */
+        if (ret_gid && i->gid_path && root_stat(i->gid_path, &st) >= 0) {
                 gid = st.st_gid;
                 found_gid = true;
         }
 
-        /* Then, try to get the uid directly */
-        if ((_uid || (_gid && !found_gid))
+        /* Then, try to get the UID directly */
+        if ((ret_uid || (ret_gid && !found_gid))
             && i->uid_path
             && root_stat(i->uid_path, &st) >= 0) {
 
                 uid = st.st_uid;
                 found_uid = true;
 
-                /* If we need the gid, but had no success yet, also derive it from the uid path */
-                if (_gid && !found_gid) {
+                /* If we need the gid, but had no success yet, also derive it from the UID path */
+                if (ret_gid && !found_gid) {
                         gid = st.st_gid;
                         found_gid = true;
                 }
         }
 
-        /* If that didn't work yet, then let's reuse the gid as uid */
-        if (_uid && !found_uid && i->gid_path) {
+        /* If that didn't work yet, then let's reuse the GID as UID */
+        if (ret_uid && !found_uid && i->gid_path) {
 
                 if (found_gid) {
                         uid = (uid_t) gid;
@@ -1004,18 +1053,18 @@
                 }
         }
 
-        if (_uid) {
+        if (ret_uid) {
                 if (!found_uid)
                         return 0;
 
-                *_uid = uid;
+                *ret_uid = uid;
         }
 
-        if (_gid) {
+        if (ret_gid) {
                 if (!found_gid)
                         return 0;
 
-                *_gid = gid;
+                *ret_gid = gid;
         }
 
         return 1;
@@ -1057,13 +1106,13 @@
                         return log_error_errno(errno, "Failed to check if user %s already exists: %m", i->name);
         }
 
-        /* Try to use the suggested numeric uid */
+        /* Try to use the suggested numeric UID */
         if (i->uid_set) {
                 r = uid_is_ok(i->uid, i->name, !i->id_set_strict);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to verify uid " UID_FMT ": %m", i->uid);
+                        return log_error_errno(r, "Failed to verify UID " UID_FMT ": %m", i->uid);
                 if (r == 0) {
-                        log_debug("Suggested user ID " UID_FMT " for %s already used.", i->uid, i->name);
+                        log_info("Suggested user ID " UID_FMT " for %s already used.", i->uid, i->name);
                         i->uid_set = false;
                 }
         }
@@ -1074,12 +1123,12 @@
 
                 if (read_id_from_file(i, &c, NULL) > 0) {
 
-                        if (c <= 0 || !uid_range_contains(uid_range, n_uid_range, c))
+                        if (c <= 0 || !uid_range_contains(uid_range, c))
                                 log_debug("User ID " UID_FMT " of file not suitable for %s.", c, i->name);
                         else {
                                 r = uid_is_ok(c, i->name, true);
                                 if (r < 0)
-                                        return log_error_errno(r, "Failed to verify uid " UID_FMT ": %m", i->uid);
+                                        return log_error_errno(r, "Failed to verify UID " UID_FMT ": %m", i->uid);
                                 else if (r > 0) {
                                         i->uid = c;
                                         i->uid_set = true;
@@ -1093,7 +1142,7 @@
         if (!i->uid_set && i->gid_set) {
                 r = uid_is_ok((uid_t) i->gid, i->name, true);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to verify uid " UID_FMT ": %m", i->uid);
+                        return log_error_errno(r, "Failed to verify UID " UID_FMT ": %m", i->uid);
                 if (r > 0) {
                         i->uid = (uid_t) i->gid;
                         i->uid_set = true;
@@ -1105,13 +1154,13 @@
                 maybe_emit_login_defs_warning();
 
                 for (;;) {
-                        r = uid_range_next_lower(uid_range, n_uid_range, &search_uid);
+                        r = uid_range_next_lower(uid_range, &search_uid);
                         if (r < 0)
                                 return log_error_errno(r, "No free user ID available for %s.", i->name);
 
                         r = uid_is_ok(search_uid, i->name, true);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to verify uid " UID_FMT ": %m", i->uid);
+                                return log_error_errno(r, "Failed to verify UID " UID_FMT ": %m", i->uid);
                         else if (r > 0)
                                 break;
                 }
@@ -1122,37 +1171,47 @@
 
         r = ordered_hashmap_ensure_put(&todo_uids, NULL, UID_TO_PTR(i->uid), i);
         if (r == -EEXIST)
-                return log_error_errno(r, "Requested user %s with uid " UID_FMT " and gid" GID_FMT " to be created is duplicated "
+                return log_error_errno(r, "Requested user %s with UID " UID_FMT " and gid" GID_FMT " to be created is duplicated "
                                        "or conflicts with another user.", i->name, i->uid, i->gid);
         if (r == -ENOMEM)
                 return log_oom();
         if (r < 0)
-                return log_error_errno(r, "Failed to store user %s with uid " UID_FMT " and gid " GID_FMT " to be created: %m",
+                return log_error_errno(r, "Failed to store user %s with UID " UID_FMT " and GID " GID_FMT " to be created: %m",
                                        i->name, i->uid, i->gid);
 
         i->todo_user = true;
-        log_info("Creating user %s (%s) with uid " UID_FMT " and gid " GID_FMT ".",
+        log_info("Creating user '%s' (%s) with UID " UID_FMT " and GID " GID_FMT ".",
                  i->name, strna(i->description), i->uid, i->gid);
 
         return 0;
 }
 
-static int gid_is_ok(gid_t gid) {
+static int gid_is_ok(gid_t gid, const char *groupname, bool check_with_uid) {
         struct group *g;
         struct passwd *p;
+        Item *user;
+        char *username;
+
+        assert(groupname);
 
         if (ordered_hashmap_get(todo_gids, GID_TO_PTR(gid)))
                 return 0;
 
         /* Avoid reusing gids that are already used by a different user */
-        if (ordered_hashmap_get(todo_uids, UID_TO_PTR(gid)))
-                return 0;
+        if (check_with_uid) {
+                user = ordered_hashmap_get(todo_uids, UID_TO_PTR(gid));
+                if (user && !streq(user->name, groupname))
+                        return 0;
+        }
 
         if (hashmap_contains(database_by_gid, GID_TO_PTR(gid)))
                 return 0;
 
-        if (hashmap_contains(database_by_uid, UID_TO_PTR(gid)))
-                return 0;
+        if (check_with_uid) {
+                username = hashmap_get(database_by_uid, UID_TO_PTR(gid));
+                if (username && !streq(username, groupname))
+                        return 0;
+        }
 
         if (!arg_root) {
                 errno = 0;
@@ -1162,12 +1221,14 @@
                 if (!IN_SET(errno, 0, ENOENT))
                         return -errno;
 
-                errno = 0;
-                p = getpwuid((uid_t) gid);
-                if (p)
-                        return 0;
-                if (!IN_SET(errno, 0, ENOENT))
-                        return -errno;
+                if (check_with_uid) {
+                        errno = 0;
+                        p = getpwuid((uid_t) gid);
+                        if (p)
+                                return 0;
+                        if (!IN_SET(errno, 0, ENOENT))
+                                return -errno;
+                }
         }
 
         return 1;
@@ -1216,34 +1277,34 @@
                 return 0;
         }
 
-        /* Try to use the suggested numeric gid */
+        /* Try to use the suggested numeric GID */
         if (i->gid_set) {
-                r = gid_is_ok(i->gid);
+                r = gid_is_ok(i->gid, i->name, false);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to verify gid " GID_FMT ": %m", i->gid);
+                        return log_error_errno(r, "Failed to verify GID " GID_FMT ": %m", i->gid);
                 if (i->id_set_strict) {
-                        /* If we require the gid to already exist we can return here:
-                         * r > 0: means the gid does not exist -> fail
-                         * r == 0: means the gid exists -> nothing more to do.
+                        /* If we require the GID to already exist we can return here:
+                         * r > 0: means the GID does not exist -> fail
+                         * r == 0: means the GID exists -> nothing more to do.
                          */
                         if (r > 0)
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Failed to create %s: please create GID %d",
+                                                       "Failed to create %s: please create GID " GID_FMT,
                                                        i->name, i->gid);
                         if (r == 0)
                                 return 0;
                 }
                 if (r == 0) {
-                        log_debug("Suggested group ID " GID_FMT " for %s already used.", i->gid, i->name);
+                        log_info("Suggested group ID " GID_FMT " for %s already used.", i->gid, i->name);
                         i->gid_set = false;
                 }
         }
 
         /* Try to reuse the numeric uid, if there's one */
         if (!i->gid_set && i->uid_set) {
-                r = gid_is_ok((gid_t) i->uid);
+                r = gid_is_ok((gid_t) i->uid, i->name, true);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to verify gid " GID_FMT ": %m", i->gid);
+                        return log_error_errno(r, "Failed to verify GID " GID_FMT ": %m", i->gid);
                 if (r > 0) {
                         i->gid = (gid_t) i->uid;
                         i->gid_set = true;
@@ -1256,12 +1317,12 @@
 
                 if (read_id_from_file(i, NULL, &c) > 0) {
 
-                        if (c <= 0 || !uid_range_contains(uid_range, n_uid_range, c))
+                        if (c <= 0 || !uid_range_contains(uid_range, c))
                                 log_debug("Group ID " GID_FMT " of file not suitable for %s.", c, i->name);
                         else {
-                                r = gid_is_ok(c);
+                                r = gid_is_ok(c, i->name, true);
                                 if (r < 0)
-                                        return log_error_errno(r, "Failed to verify gid " GID_FMT ": %m", i->gid);
+                                        return log_error_errno(r, "Failed to verify GID " GID_FMT ": %m", i->gid);
                                 else if (r > 0) {
                                         i->gid = c;
                                         i->gid_set = true;
@@ -1277,13 +1338,13 @@
 
                 for (;;) {
                         /* We look for new GIDs in the UID pool! */
-                        r = uid_range_next_lower(uid_range, n_uid_range, &search_uid);
+                        r = uid_range_next_lower(uid_range, &search_uid);
                         if (r < 0)
                                 return log_error_errno(r, "No free group ID available for %s.", i->name);
 
-                        r = gid_is_ok(search_uid);
+                        r = gid_is_ok(search_uid, i->name, true);
                         if (r < 0)
-                                return log_error_errno(r, "Failed to verify gid " GID_FMT ": %m", i->gid);
+                                return log_error_errno(r, "Failed to verify GID " GID_FMT ": %m", i->gid);
                         else if (r > 0)
                                 break;
                 }
@@ -1294,14 +1355,14 @@
 
         r = ordered_hashmap_ensure_put(&todo_gids, NULL, GID_TO_PTR(i->gid), i);
         if (r == -EEXIST)
-                return log_error_errno(r, "Requested group %s with gid "GID_FMT " to be created is duplicated or conflicts with another user.", i->name, i->gid);
+                return log_error_errno(r, "Requested group %s with GID "GID_FMT " to be created is duplicated or conflicts with another user.", i->name, i->gid);
         if (r == -ENOMEM)
                 return log_oom();
         if (r < 0)
-                return log_error_errno(r, "Failed to store group %s with gid " GID_FMT " to be created: %m", i->name, i->gid);
+                return log_error_errno(r, "Failed to store group %s with GID " GID_FMT " to be created: %m", i->name, i->gid);
 
         i->todo_group = true;
-        log_info("Creating group %s with gid " GID_FMT ".", i->name, i->gid);
+        log_info("Creating group '%s' with GID " GID_FMT ".", i->name, i->gid);
 
         return 0;
 }
@@ -1314,9 +1375,11 @@
         switch (i->type) {
 
         case ADD_USER: {
-                Item *j;
+                Item *j = NULL;
 
-                j = ordered_hashmap_get(groups, i->group_name ?: i->name);
+                if (!i->gid_set)
+                        j = ordered_hashmap_get(groups, i->group_name ?: i->name);
+
                 if (j && j->todo_group) {
                         /* When a group with the target name is already in queue,
                          * use the information about the group and do not create
@@ -1345,7 +1408,7 @@
                 return add_group(i);
 
         default:
-                assert_not_reached("Unknown item type");
+                assert_not_reached();
         }
 }
 
@@ -1360,33 +1423,46 @@
         free(i->description);
         free(i->home);
         free(i->shell);
+        free(i->filename);
         return mfree(i);
 }
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Item*, item_free);
 DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(item_hash_ops, char, string_hash_func, string_compare_func, Item, item_free);
 
+static Item* item_new(ItemType type, const char *name, const char *filename, unsigned line) {
+        assert(name);
+        assert(!!filename == (line > 0));
+
+        _cleanup_(item_freep) Item *new = new(Item, 1);
+        if (!new)
+                return NULL;
+
+        *new = (Item) {
+                .type = type,
+                .line = line,
+        };
+
+        if (free_and_strdup(&new->name, name) < 0 ||
+            free_and_strdup(&new->filename, filename) < 0)
+                return NULL;
+
+        return TAKE_PTR(new);
+}
+
 static int add_implicit(void) {
         char *g, **l;
         int r;
 
         /* Implicitly create additional users and groups, if they were listed in "m" lines */
         ORDERED_HASHMAP_FOREACH_KEY(l, g, members) {
-                char **m;
-
                 STRV_FOREACH(m, l)
                         if (!ordered_hashmap_get(users, *m)) {
-                                _cleanup_(item_freep) Item *j = NULL;
-
-                                j = new0(Item, 1);
+                                _cleanup_(item_freep) Item *j =
+                                        item_new(ADD_USER, *m, /* filename= */ NULL, /* line= */ 0);
                                 if (!j)
                                         return log_oom();
 
-                                j->type = ADD_USER;
-                                j->name = strdup(*m);
-                                if (!j->name)
-                                        return log_oom();
-
                                 r = ordered_hashmap_ensure_put(&users, &item_hash_ops, j->name, j);
                                 if (r == -ENOMEM)
                                         return log_oom();
@@ -1399,17 +1475,11 @@
 
                 if (!(ordered_hashmap_get(users, g) ||
                       ordered_hashmap_get(groups, g))) {
-                        _cleanup_(item_freep) Item *j = NULL;
-
-                        j = new0(Item, 1);
+                        _cleanup_(item_freep) Item *j =
+                                item_new(ADD_GROUP, g, /* filename= */ NULL, /* line= */ 0);
                         if (!j)
                                 return log_oom();
 
-                        j->type = ADD_GROUP;
-                        j->name = strdup(g);
-                        if (!j->name)
-                                return log_oom();
-
                         r = ordered_hashmap_ensure_put(&groups, &item_hash_ops, j->name, j);
                         if (r == -ENOMEM)
                                 return log_oom();
@@ -1424,48 +1494,111 @@
         return 0;
 }
 
-static bool item_equal(Item *a, Item *b) {
+static int item_equivalent(Item *a, Item *b) {
+        int r;
+
         assert(a);
         assert(b);
 
-        if (a->type != b->type)
+        if (a->type != b->type) {
+                log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                           "Item not equivalent because types differ");
                 return false;
+        }
 
-        if (!streq_ptr(a->name, b->name))
+        if (!streq_ptr(a->name, b->name)) {
+                log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                           "Item not equivalent because names differ ('%s' vs. '%s')",
+                           a->name, b->name);
                 return false;
+        }
 
-        if (!streq_ptr(a->uid_path, b->uid_path))
+        /* Paths were simplified previously, so we can use streq. */
+        if (!streq_ptr(a->uid_path, b->uid_path)) {
+                log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                           "Item not equivalent because UID paths differ (%s vs. %s)",
+                           a->uid_path ?: "(unset)", b->uid_path ?: "(unset)");
                 return false;
+        }
 
-        if (!streq_ptr(a->gid_path, b->gid_path))
+        if (!streq_ptr(a->gid_path, b->gid_path)) {
+                log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                           "Item not equivalent because GID paths differ (%s vs. %s)",
+                           a->gid_path ?: "(unset)", b->gid_path ?: "(unset)");
                 return false;
+        }
 
-        if (!streq_ptr(a->description, b->description))
+        if (!streq_ptr(a->description, b->description))  {
+                log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                           "Item not equivalent because descriptions differ ('%s' vs. '%s')",
+                           strempty(a->description), strempty(b->description));
                 return false;
+        }
 
-        if (a->uid_set != b->uid_set)
+        if ((a->uid_set != b->uid_set) ||
+            (a->uid_set && a->uid != b->uid)) {
+                log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                           "Item not equivalent because UIDs differ (%s vs. %s)",
+                           FORMAT_UID(a->uid_set, a->uid), FORMAT_UID(b->uid_set, b->uid));
                 return false;
+        }
 
-        if (a->uid_set && a->uid != b->uid)
+        if ((a->gid_set != b->gid_set) ||
+            (a->gid_set && a->gid != b->gid)) {
+                log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                           "Item not equivalent because GIDs differ (%s vs. %s)",
+                           FORMAT_GID(a->gid_set, a->gid), FORMAT_GID(b->gid_set, b->gid));
                 return false;
+        }
 
-        if (a->gid_set != b->gid_set)
+        if (!streq_ptr(a->home, b->home)) {
+                log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                           "Item not equivalent because home directories differ ('%s' vs. '%s')",
+                           strempty(a->description), strempty(b->description));
                 return false;
+        }
 
-        if (a->gid_set && a->gid != b->gid)
-                return false;
+        /* Check if the two paths refer to the same file.
+         * If the paths are equal (after normalization), it's obviously the same file.
+         * If both paths specify a nologin shell, treat them as the same (e.g. /bin/true and /bin/false).
+         * Otherwise, try to resolve the paths, and see if we get the same result, (e.g. /sbin/nologin and
+         * /usr/sbin/nologin).
+         * If we can't resolve something, treat different paths as different. */
 
-        if (!streq_ptr(a->home, b->home))
-                return false;
+        const char *a_shell = pick_shell(a),
+                   *b_shell = pick_shell(b);
+        if (!path_equal_ptr(a_shell, b_shell) &&
+            !(is_nologin_shell(a_shell) && is_nologin_shell(b_shell))) {
+                _cleanup_free_ char *pa = NULL, *pb = NULL;
 
-        if (!streq_ptr(a->shell, b->shell))
-                return false;
+                r = chase_symlinks(a_shell, arg_root, CHASE_PREFIX_ROOT | CHASE_NONEXISTENT, &pa, NULL);
+                if (r < 0) {
+                        log_full_errno(ERRNO_IS_RESOURCE(r) ? LOG_ERR : LOG_DEBUG,
+                                       r, "Failed to look up path '%s%s%s': %m",
+                                       strempty(arg_root), arg_root ? "/" : "", a_shell);
+                        return ERRNO_IS_RESOURCE(r) ? r : false;
+                }
+
+                r = chase_symlinks(b_shell, arg_root, CHASE_PREFIX_ROOT | CHASE_NONEXISTENT, &pb, NULL);
+                if (r < 0) {
+                        log_full_errno(ERRNO_IS_RESOURCE(r) ? LOG_ERR : LOG_DEBUG,
+                                       r, "Failed to look up path '%s%s%s': %m",
+                                       strempty(arg_root), arg_root ? "/" : "", b_shell);
+                        return ERRNO_IS_RESOURCE(r) ? r : false;
+                }
+
+                if (!path_equal(pa, pb)) {
+                        log_syntax(NULL, LOG_DEBUG, a->filename, a->line, 0,
+                                   "Item not equivalent because shells differ ('%s' vs. '%s')",
+                                   pa, pb);
+                        return false;
+                }
+        }
 
         return true;
 }
 
 static int parse_line(const char *fname, unsigned line, const char *buffer) {
-
         _cleanup_free_ char *action = NULL,
                 *name = NULL, *resolved_name = NULL,
                 *id = NULL, *resolved_id = NULL,
@@ -1487,22 +1620,22 @@
         r = extract_many_words(&p, NULL, EXTRACT_UNQUOTE,
                                &action, &name, &id, &description, &home, &shell, NULL);
         if (r < 0)
-                return log_error_errno(r, "[%s:%u] Syntax error.", fname, line);
+                return log_syntax(NULL, LOG_ERR, fname, line, r, "Syntax error.");
         if (r < 2)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "[%s:%u] Missing action and name columns.", fname, line);
+                return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                  "Missing action and name columns.");
         if (!isempty(p))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "[%s:%u] Trailing garbage.", fname, line);
+                return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                  "Trailing garbage.");
 
         /* Verify action */
         if (strlen(action) != 1)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "[%s:%u] Unknown modifier '%s'", fname, line, action);
+                return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                  "Unknown modifier '%s'.", action);
 
         if (!IN_SET(action[0], ADD_USER, ADD_GROUP, ADD_MEMBER, ADD_RANGE))
-                return log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
-                                       "[%s:%u] Unknown command type '%c'.", fname, line, action[0]);
+                return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG),
+                                  "Unknown command type '%c'.", action[0]);
 
         /* Verify name */
         if (empty_or_dash(name))
@@ -1511,12 +1644,11 @@
         if (name) {
                 r = specifier_printf(name, NAME_MAX, system_and_tmp_specifier_table, arg_root, NULL, &resolved_name);
                 if (r < 0)
-                        return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, name);
+                        return log_syntax(NULL, LOG_ERR, fname, line, r, "Failed to replace specifiers in '%s': %m", name);
 
                 if (!valid_user_group_name(resolved_name, 0))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] '%s' is not a valid user or group name.",
-                                               fname, line, resolved_name);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "'%s' is not a valid user or group name.", resolved_name);
         }
 
         /* Verify id */
@@ -1526,8 +1658,8 @@
         if (id) {
                 r = specifier_printf(id, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &resolved_id);
                 if (r < 0)
-                        return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m",
-                                               fname, line, name);
+                        return log_syntax(NULL, LOG_ERR, fname, line, r,
+                                          "Failed to replace specifiers in '%s': %m", name);
         }
 
         /* Verify description */
@@ -1537,13 +1669,12 @@
         if (description) {
                 r = specifier_printf(description, LONG_LINE_MAX, system_and_tmp_specifier_table, arg_root, NULL, &resolved_description);
                 if (r < 0)
-                        return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m",
-                                               fname, line, description);
+                        return log_syntax(NULL, LOG_ERR, fname, line, r,
+                                          "Failed to replace specifiers in '%s': %m", description);
 
                 if (!valid_gecos(resolved_description))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] '%s' is not a valid GECOS field.",
-                                               fname, line, resolved_description);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "'%s' is not a valid GECOS field.", resolved_description);
         }
 
         /* Verify home */
@@ -1553,13 +1684,14 @@
         if (home) {
                 r = specifier_printf(home, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &resolved_home);
                 if (r < 0)
-                        return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m",
-                                               fname, line, home);
+                        return log_syntax(NULL, LOG_ERR, fname, line, r,
+                                          "Failed to replace specifiers in '%s': %m", home);
+
+                path_simplify(resolved_home);
 
                 if (!valid_home(resolved_home))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] '%s' is not a valid home directory field.",
-                                               fname, line, resolved_home);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "'%s' is not a valid home directory field.", resolved_home);
         }
 
         /* Verify shell */
@@ -1569,63 +1701,59 @@
         if (shell) {
                 r = specifier_printf(shell, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &resolved_shell);
                 if (r < 0)
-                        return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m",
-                                               fname, line, shell);
+                        return log_syntax(NULL, LOG_ERR, fname, line, r,
+                                          "Failed to replace specifiers in '%s': %m", shell);
+
+                path_simplify(resolved_shell);
 
                 if (!valid_shell(resolved_shell))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] '%s' is not a valid login shell field.",
-                                               fname, line, resolved_shell);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "'%s' is not a valid login shell field.", resolved_shell);
         }
 
         switch (action[0]) {
 
         case ADD_RANGE:
                 if (resolved_name)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type 'r' don't take a name field.",
-                                               fname, line);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type 'r' don't take a name field.");
 
                 if (!resolved_id)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type 'r' require an ID range in the third field.",
-                                               fname, line);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type 'r' require an ID range in the third field.");
 
                 if (description || home || shell)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type '%c' don't take a %s field.",
-                                               fname, line, action[0],
-                                               description ? "GECOS" : home ? "home directory" : "login shell");
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type '%c' don't take a %s field.",
+                                          action[0],
+                                          description ? "GECOS" : home ? "home directory" : "login shell");
 
-                r = uid_range_add_str(&uid_range, &n_uid_range, resolved_id);
+                r = uid_range_add_str(&uid_range, resolved_id);
                 if (r < 0)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Invalid UID range %s.", fname, line, resolved_id);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Invalid UID range %s.", resolved_id);
 
                 return 0;
 
         case ADD_MEMBER: {
                 /* Try to extend an existing member or group item */
                 if (!name)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type 'm' require a user name in the second field.",
-                                               fname, line);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type 'm' require a user name in the second field.");
 
                 if (!resolved_id)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type 'm' require a group name in the third field.",
-                                               fname, line);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type 'm' require a group name in the third field.");
 
                 if (!valid_user_group_name(resolved_id, 0))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] '%s' is not a valid user or group name.",
-                                               fname, line, resolved_id);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                               "'%s' is not a valid user or group name.", resolved_id);
 
                 if (description || home || shell)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type '%c' don't take a %s field.",
-                                               fname, line, action[0],
-                                               description ? "GECOS" : home ? "home directory" : "login shell");
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type '%c' don't take a %s field.",
+                                          action[0],
+                                          description ? "GECOS" : home ? "home directory" : "login shell");
 
                 r = string_strv_ordered_hashmap_put(&members, resolved_id, resolved_name);
                 if (r < 0)
@@ -1636,23 +1764,21 @@
 
         case ADD_USER:
                 if (!name)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type 'u' require a user name in the second field.",
-                                               fname, line);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type 'u' require a user name in the second field.");
 
                 r = ordered_hashmap_ensure_allocated(&users, &item_hash_ops);
                 if (r < 0)
                         return log_oom();
 
-                i = new0(Item, 1);
+                i = item_new(ADD_USER, resolved_name, fname, line);
                 if (!i)
                         return log_oom();
 
                 if (resolved_id) {
-                        if (path_is_absolute(resolved_id)) {
-                                i->uid_path = TAKE_PTR(resolved_id);
-                                path_simplify(i->uid_path);
-                        } else {
+                        if (path_is_absolute(resolved_id))
+                                i->uid_path = path_simplify(TAKE_PTR(resolved_id));
+                        else {
                                 _cleanup_free_ char *uid = NULL, *gid = NULL;
                                 if (split_pair(resolved_id, ":", &uid, &gid) == 0) {
                                         r = parse_gid(gid, &i->gid);
@@ -1660,7 +1786,8 @@
                                                 if (valid_user_group_name(gid, 0))
                                                         i->group_name = TAKE_PTR(gid);
                                                 else
-                                                        return log_error_errno(r, "Failed to parse GID: '%s': %m", id);
+                                                        return log_syntax(NULL, LOG_ERR, fname, line, r,
+                                                                          "Failed to parse GID: '%s': %m", id);
                                         } else {
                                                 i->gid_set = true;
                                                 i->id_set_strict = true;
@@ -1670,7 +1797,8 @@
                                 if (!streq(resolved_id, "-")) {
                                         r = parse_uid(resolved_id, &i->uid);
                                         if (r < 0)
-                                                return log_error_errno(r, "Failed to parse UID: '%s': %m", id);
+                                                return log_syntax(NULL, LOG_ERR, fname, line, r,
+                                                                  "Failed to parse UID: '%s': %m", id);
                                         i->uid_set = true;
                                 }
                         }
@@ -1685,32 +1813,31 @@
 
         case ADD_GROUP:
                 if (!name)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type 'g' require a user name in the second field.",
-                                               fname, line);
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type 'g' require a user name in the second field.");
 
                 if (description || home || shell)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "[%s:%u] Lines of type '%c' don't take a %s field.",
-                                               fname, line, action[0],
-                                               description ? "GECOS" : home ? "home directory" : "login shell");
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL),
+                                          "Lines of type '%c' don't take a %s field.",
+                                          action[0],
+                                          description ? "GECOS" : home ? "home directory" : "login shell");
 
                 r = ordered_hashmap_ensure_allocated(&groups, &item_hash_ops);
                 if (r < 0)
                         return log_oom();
 
-                i = new0(Item, 1);
+                i = item_new(ADD_GROUP, resolved_name, fname, line);
                 if (!i)
                         return log_oom();
 
                 if (resolved_id) {
-                        if (path_is_absolute(resolved_id)) {
-                                i->gid_path = TAKE_PTR(resolved_id);
-                                path_simplify(i->gid_path);
-                        } else {
+                        if (path_is_absolute(resolved_id))
+                                i->gid_path = path_simplify(TAKE_PTR(resolved_id));
+                        else {
                                 r = parse_gid(resolved_id, &i->gid);
                                 if (r < 0)
-                                        return log_error_errno(r, "Failed to parse GID: '%s': %m", id);
+                                        return log_syntax(NULL, LOG_ERR, fname, line, r,
+                                                          "Failed to parse GID: '%s': %m", id);
 
                                 i->gid_set = true;
                         }
@@ -1720,17 +1847,28 @@
                 break;
 
         default:
-                return -EBADMSG;
+                assert_not_reached();
         }
 
-        i->type = action[0];
-        i->name = TAKE_PTR(resolved_name);
-
         existing = ordered_hashmap_get(h, i->name);
         if (existing) {
-                /* Two identical items are fine */
-                if (!item_equal(existing, i))
-                        log_warning("Two or more conflicting lines for %s configured, ignoring.", i->name);
+                /* Two functionally-equivalent items are fine */
+                r = item_equivalent(i, existing);
+                if (r < 0)
+                        return r;
+                if (r == 0) {
+                        if (existing->filename)
+                                log_syntax(NULL, LOG_WARNING, fname, line, 0,
+                                           "Conflict with earlier configuration for %s '%s' in %s:%u, ignoring line.",
+                                           item_type_to_string(i->type),
+                                           i->name,
+                                           existing->filename, existing->line);
+                        else
+                                log_syntax(NULL, LOG_WARNING, fname, line, 0,
+                                           "Conflict with earlier configuration for %s '%s', ignoring line.",
+                                           item_type_to_string(i->type),
+                                           i->name);
+                }
 
                 return 0;
         }
@@ -1806,7 +1944,7 @@
         if (r < 0)
                 return r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         return cat_files(NULL, files, 0);
 }
@@ -1827,6 +1965,7 @@
                "     --root=PATH            Operate on an alternate filesystem root\n"
                "     --image=PATH           Operate on disk image as filesystem root\n"
                "     --replace=PATH         Treat arguments as replacement for PATH\n"
+               "     --dry-run              Just print what would be done\n"
                "     --inline               Treat arguments as configuration lines\n"
                "     --no-pager             Do not pipe output into a pager\n"
                "\nSee the %s for details.\n",
@@ -1844,6 +1983,7 @@
                 ARG_ROOT,
                 ARG_IMAGE,
                 ARG_REPLACE,
+                ARG_DRY_RUN,
                 ARG_INLINE,
                 ARG_NO_PAGER,
         };
@@ -1853,8 +1993,9 @@
                 { "version",    no_argument,       NULL, ARG_VERSION    },
                 { "cat-config", no_argument,       NULL, ARG_CAT_CONFIG },
                 { "root",       required_argument, NULL, ARG_ROOT       },
-                { "image",      required_argument, NULL, ARG_IMAGE          },
+                { "image",      required_argument, NULL, ARG_IMAGE      },
                 { "replace",    required_argument, NULL, ARG_REPLACE    },
+                { "dry-run",    no_argument,       NULL, ARG_DRY_RUN    },
                 { "inline",     no_argument,       NULL, ARG_INLINE     },
                 { "no-pager",   no_argument,       NULL, ARG_NO_PAGER   },
                 {}
@@ -1905,6 +2046,10 @@
                         arg_replace = optarg;
                         break;
 
+                case ARG_DRY_RUN:
+                        arg_dry_run = true;
+                        break;
+
                 case ARG_INLINE:
                         arg_inline = true;
                         break;
@@ -1917,7 +2062,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_replace && arg_cat_config)
@@ -1935,7 +2080,6 @@
 }
 
 static int parse_arguments(char **args) {
-        char **arg;
         unsigned pos = 1;
         int r;
 
@@ -1944,7 +2088,7 @@
                         /* Use (argument):n, where n==1 for the first positional arg */
                         r = parse_line("(argument)", pos, *arg);
                 else
-                        r = read_config_file(*arg, false);
+                        r = read_config_file(*arg, /* ignore_enoent= */ false);
                 if (r < 0)
                         return r;
 
@@ -1957,7 +2101,6 @@
 static int read_config_files(char **args) {
         _cleanup_strv_free_ char **files = NULL;
         _cleanup_free_ char *p = NULL;
-        char **f;
         int r;
 
         r = conf_files_list_with_replacement(arg_root, CONF_PATHS_STRV("sysusers.d"), arg_replace, &files, &p);
@@ -1966,28 +2109,46 @@
 
         STRV_FOREACH(f, files)
                 if (p && path_equal(*f, p)) {
-                        log_debug("Parsing arguments at position \"%s\"…", *f);
+                        log_debug("Parsing arguments at position \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
                         r = parse_arguments(args);
                         if (r < 0)
                                 return r;
                 } else {
-                        log_debug("Reading config file \"%s\"…", *f);
+                        log_debug("Reading config file \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
                         /* Just warn, ignore result otherwise */
-                        (void) read_config_file(*f, true);
+                        (void) read_config_file(*f, /* ignore_enoent= */ true);
                 }
 
         return 0;
 }
 
+static int read_credential_lines(void) {
+        _cleanup_free_ char *j = NULL;
+        const char *d;
+        int r;
+
+        r = get_credentials_dir(&d);
+        if (r == -ENXIO)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to get credentials directory: %m");
+
+        j = path_join(d, "sysusers.extra");
+        if (!j)
+                return log_oom();
+
+        (void) read_config_file(j, /* ignore_enoent= */ true);
+        return 0;
+}
+
 static int run(int argc, char *argv[]) {
 #ifndef STANDALONE
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(umount_and_rmdir_and_freep) char *unlink_dir = NULL;
 #endif
-        _cleanup_close_ int lock = -1;
+        _cleanup_close_ int lock = -EBADF;
         Item *i;
         int r;
 
@@ -2019,8 +2180,7 @@
                                 DISSECT_IMAGE_FSCK |
                                 DISSECT_IMAGE_GROWFS,
                                 &unlink_dir,
-                                &loop_device,
-                                &decrypted_image);
+                                &loop_device);
                 if (r < 0)
                         return r;
 
@@ -2032,12 +2192,10 @@
         assert(!arg_image);
 #endif
 
-        /* If command line arguments are specified along with --replace, read all
-         * configuration files and insert the positional arguments at the specified
-         * place. Otherwise, if command line arguments are specified, execute just
-         * them, and finally, without --replace= or any positional arguments, just
-         * read configuration and execute it.
-         */
+        /* If command line arguments are specified along with --replace, read all configuration files and
+         * insert the positional arguments at the specified place. Otherwise, if command line arguments are
+         * specified, execute just them, and finally, without --replace= or any positional arguments, just
+         * read configuration and execute it. */
         if (arg_replace || optind >= argc)
                 r = read_config_files(argv + optind);
         else
@@ -2045,11 +2203,15 @@
         if (r < 0)
                 return r;
 
-        /* Let's tell nss-systemd not to synthesize the "root" and "nobody" entries for it, so that our detection
-         * whether the names or UID/GID area already used otherwise doesn't get confused. After all, even though
-         * nss-systemd synthesizes these users/groups, they should still appear in /etc/passwd and /etc/group, as the
-         * synthesizing logic is merely supposed to be fallback for cases where we run with a completely unpopulated
-         * /etc. */
+        r = read_credential_lines();
+        if (r < 0)
+                return r;
+
+        /* Let's tell nss-systemd not to synthesize the "root" and "nobody" entries for it, so that our
+         * detection whether the names or UID/GID area already used otherwise doesn't get confused. After
+         * all, even though nss-systemd synthesizes these users/groups, they should still appear in
+         * /etc/passwd and /etc/group, as the synthesizing logic is merely supposed to be fallback for cases
+         * where we run with a completely unpopulated /etc. */
         if (setenv("SYSTEMD_NSS_BYPASS_SYNTHETIC", "1", 1) < 0)
                 return log_error_errno(errno, "Failed to set SYSTEMD_NSS_BYPASS_SYNTHETIC environment variable: %m");
 
@@ -2063,13 +2225,13 @@
                 login_defs_need_warning = true;
 
                 /* We pick a range that very conservative: we look at compiled-in maximum and the value in
-                 * /etc/login.defs. That way the uids/gids which we allocate will be interpreted correctly,
+                 * /etc/login.defs. That way the UIDs/GIDs which we allocate will be interpreted correctly,
                  * even if /etc/login.defs is removed later. (The bottom bound doesn't matter much, since
                  * it's only used during allocation, so we use the configured value directly). */
                 uid_t begin = login_defs.system_alloc_uid_min,
                       end = MIN3((uid_t) SYSTEM_UID_MAX, login_defs.system_uid_max, login_defs.system_gid_max);
                 if (begin < end) {
-                        r = uid_range_add(&uid_range, &n_uid_range, begin, end - begin + 1);
+                        r = uid_range_add(&uid_range, begin, end - begin + 1);
                         if (r < 0)
                                 return log_oom();
                 }
@@ -2079,9 +2241,11 @@
         if (r < 0)
                 return r;
 
-        lock = take_etc_passwd_lock(arg_root);
-        if (lock < 0)
-                return log_error_errno(lock, "Failed to take /etc/passwd lock: %m");
+        if (!arg_dry_run) {
+                lock = take_etc_passwd_lock(arg_root);
+                if (lock < 0)
+                        return log_error_errno(lock, "Failed to take /etc/passwd lock: %m");
+        }
 
         r = load_user_database();
         if (r < 0)
@@ -2097,11 +2261,7 @@
         ORDERED_HASHMAP_FOREACH(i, users)
                 (void) process_item(i);
 
-        r = write_files();
-        if (r < 0)
-                return log_error_errno(r, "Failed to write files: %m");
-
-        return 0;
+        return write_files();
 }
 
 DEFINE_MAIN_FUNCTION(run);
diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index bf23c48..7c290a8 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -25,7 +25,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "unit-name.h"
-#include "util.h"
 
 static const struct {
         const char *path;
@@ -80,16 +79,16 @@
 }
 
 static int add_alias(const char *service, const char *alias) {
-        const char *link;
-        int r;
+        _cleanup_free_ char *link = NULL;
 
         assert(service);
         assert(alias);
 
-        link = prefix_roota(arg_dest, alias);
+        link = path_join(arg_dest, alias);
+        if (!link)
+                return -ENOMEM;
 
-        r = symlink(service, link);
-        if (r < 0) {
+        if (symlink(service, link) < 0) {
                 if (errno == EEXIST)
                         return 0;
 
@@ -100,10 +99,8 @@
 }
 
 static int generate_unit_file(SysvStub *s) {
-        _cleanup_free_ char *path_escaped = NULL;
+        _cleanup_free_ char *path_escaped = NULL, *unit = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        const char *unit;
-        char **p;
         int r;
 
         assert(s);
@@ -115,7 +112,9 @@
         if (!path_escaped)
                 return log_oom();
 
-        unit = prefix_roota(arg_dest, s->name);
+        unit = path_join(arg_dest, s->name);
+        if (!unit)
+                return log_oom();
 
         /* We might already have a symlink with the same name from a Provides:,
          * or from backup files like /etc/init.d/foo.bak. Real scripts always win,
@@ -245,21 +244,22 @@
                 "time",                 SPECIAL_TIME_SYNC_TARGET,
         };
 
-        const char *filename;
-        char *filename_no_sh, *e, *m;
+        _cleanup_free_ char *filename = NULL;
         const char *n;
-        unsigned i;
+        char *e, *m;
         int r;
 
         assert(name);
         assert(s);
         assert(ret);
 
-        filename = basename(s->path);
+        r = path_extract_filename(s->path, &filename);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract file name from path '%s': %m", s->path);
 
         n = *name == '$' ? name + 1 : name;
 
-        for (i = 0; i < ELEMENTSOF(table); i += 2) {
+        for (size_t i = 0; i < ELEMENTSOF(table); i += 2) {
                 if (!streq(table[i], n))
                         continue;
 
@@ -289,12 +289,9 @@
         }
 
         /* Strip ".sh" suffix from file name for comparison */
-        filename_no_sh = strdupa(filename);
-        e = endswith(filename_no_sh, ".sh");
-        if (e) {
+        e = endswith(filename, ".sh");
+        if (e)
                 *e = '\0';
-                filename = filename_no_sh;
-        }
 
         /* Names equaling the file name of the services are redundant */
         if (streq_ptr(n, filename)) {
@@ -707,7 +704,6 @@
 
 static int enumerate_sysv(const LookupPaths *lp, Hashmap *all_services) {
         _cleanup_strv_free_ char **sysvinit_path = NULL;
-        char **path;
         int r;
 
         assert(lp);
@@ -718,7 +714,6 @@
 
         STRV_FOREACH(path, sysvinit_path) {
                 _cleanup_closedir_ DIR *d = NULL;
-                struct dirent *de;
 
                 d = opendir(*path);
                 if (!d) {
@@ -750,7 +745,7 @@
                         if (hashmap_contains(all_services, name))
                                 continue;
 
-                        r = unit_file_exists(UNIT_FILE_SYSTEM, lp, name);
+                        r = unit_file_exists(LOOKUP_SCOPE_SYSTEM, lp, name);
                         if (r < 0 && !IN_SET(r, -ELOOP, -ERFKILL, -EADDRNOTAVAIL)) {
                                 log_debug_errno(r, "Failed to detect whether %s exists, skipping: %m", name);
                                 continue;
@@ -792,7 +787,6 @@
         Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
         _cleanup_strv_free_ char **sysvrcnd_path = NULL;
         SysvStub *service;
-        char **p;
         int r;
 
         assert(lp);
@@ -805,7 +799,6 @@
                 for (unsigned i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
                         _cleanup_closedir_ DIR *d = NULL;
                         _cleanup_free_ char *path = NULL;
-                        struct dirent *de;
 
                         path = path_join(*p, rcnd_table[i].path);
                         if (!path) {
@@ -896,9 +889,9 @@
 
         assert_se(arg_dest = dest_late);
 
-        r = lookup_paths_init(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL);
+        r = lookup_paths_init_or_warn(&lp, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL);
         if (r < 0)
-                return log_error_errno(r, "Failed to find lookup paths: %m");
+                return r;
 
         all_services = hashmap_new(&string_hash_ops);
         if (!all_services)
diff --git a/src/test/generate-sym-test.py b/src/test/generate-sym-test.py
index 955d5e9..8ed4d26 100755
--- a/src/test/generate-sym-test.py
+++ b/src/test/generate-sym-test.py
@@ -11,21 +11,26 @@
 /* We want to check deprecated symbols too, without complaining */
 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
 
-const void* symbols[] = {''')
+const struct {
+        const char *name;
+        const void *symbol;
+} symbols[] = {''')
 
+count = 0
 for line in open(sys.argv[1]):
     match = re.search('^ +([a-zA-Z0-9_]+);', line)
     if match:
         s = match.group(1)
         if s == 'sd_bus_object_vtable_format':
-            print('    &{},'.format(s))
+            print(f'    {{"{s}", &{s}}},')
         else:
-            print('    {},'.format(s))
+            print(f'    {{"{s}", {s}}},')
+        count += 1
 
-print('''};
+print(f'''}};
 
-int main(void) {
-    for (size_t i = 0; i < sizeof(symbols)/sizeof(void*); i++)
-         printf("%p\\n", symbols[i]);
+int main(void) {{
+    for (size_t i = 0; i < {count}; i++)
+         printf("%p: %s\\n", symbols[i].symbol, symbols[i].name);
     return 0;
-}''')
+}}''')
diff --git a/src/test/meson.build b/src/test/meson.build
index a327a1f..34dbd6d 100644
--- a/src/test/meson.build
+++ b/src/test/meson.build
@@ -9,12 +9,11 @@
         capture : true,
         build_by_default : want_tests != 'false')
 
-test_include_dir = include_directories('.')
-
-path = run_command(sh, '-c', 'echo "$PATH"').stdout().strip()
+path = run_command(sh, '-c', 'echo "$PATH"', check: true).stdout().strip()
 test_env = environment()
 test_env.set('SYSTEMD_LANGUAGE_FALLBACK_MAP', language_fallback_map)
-test_env.set('PATH', '@0@:@1@'.format(meson.build_root(), path))
+test_env.set('PATH', project_build_root + ':' + path)
+test_env.set('PROJECT_BUILD_ROOT', project_build_root)
 
 ############################################################
 
@@ -41,9 +40,13 @@
 ############################################################
 
 tests += [
-        [['src/test/test-device-nodes.c']],
+        [files('test-argv-util.c')],
 
-        [['src/test/test-engine.c'],
+        [files('test-device-nodes.c')],
+
+        [files('test-ether-addr-util.c')],
+
+        [files('test-engine.c'),
          [libcore,
           libshared],
          [threads,
@@ -54,21 +57,29 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-emergency-action.c'],
+        [files('test-manager.c'),
          [libcore,
           libshared],
          [],
          core_includes],
 
-        [['src/test/test-chown-rec.c'],
+        [files('test-emergency-action.c'),
          [libcore,
           libshared],
          [],
          core_includes],
 
-        [['src/test/test-dlopen-so.c']],
+        [files('test-chown-rec.c'),
+         [libcore,
+          libshared],
+         [],
+         core_includes],
 
-        [['src/test/test-job-type.c'],
+        [files('test-dlopen-so.c'),
+         [],
+         libp11kit_cflags],
+
+        [files('test-job-type.c'),
          [libcore,
           libshared],
          [threads,
@@ -79,7 +90,7 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-ns.c'],
+        [files('test-ns.c'),
          [libcore,
           libshared],
          [threads,
@@ -90,7 +101,7 @@
           libblkid],
          core_includes, '', 'manual'],
 
-        [['src/test/test-loopback.c'],
+        [files('test-loopback.c'),
          [libcore,
           libshared],
          [threads,
@@ -101,14 +112,14 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-dns-domain.c']],
+        [files('test-dns-domain.c')],
 
-        [['src/test/test-boot-timestamps.c'],
+        [files('test-boot-timestamps.c'),
          [], [], [], 'ENABLE_EFI'],
 
-        [['src/test/test-unit-file.c']],
+        [files('test-unit-file.c')],
 
-        [['src/test/test-unit-name.c'],
+        [files('test-unit-name.c'),
          [libcore,
           libshared],
          [threads,
@@ -119,7 +130,7 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-load-fragment.c'],
+        [files('test-load-fragment.c'),
          [libcore,
           libshared],
          [threads,
@@ -130,9 +141,9 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-serialize.c']],
+        [files('test-serialize.c')],
 
-        [['src/test/test-unit-serialize.c'],
+        [files('test-unit-serialize.c'),
          [libcore,
           libshared],
          [threads,
@@ -143,182 +154,228 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-utf8.c']],
+        [files('test-utf8.c')],
 
-        [['src/test/test-blockdev-util.c']],
+        [files('test-kbd-util.c')],
 
-        [['src/test/test-dev-setup.c']],
+        [files('test-blockdev-util.c')],
 
-        [['src/test/test-capability.c'],
+        [files('test-dev-setup.c')],
+
+        [files('test-capability.c'),
          [],
          [libcap]],
 
-        [['src/test/test-async.c'],
+        [files('test-async.c'),
          [], [], [], '', 'timeout=120'],
 
-        [['src/test/test-locale-util.c']],
+        [files('test-locale-util.c')],
 
-        [['src/test/test-copy.c']],
+        [files('test-copy.c')],
 
-        [['src/test/test-data-fd-util.c']],
+        [files('test-recurse-dir.c')],
 
-        [['src/test/test-static-destruct.c']],
+        [files('test-compress.c'),
+         [libshared,
+          libbasic_compress]],
 
-        [['src/test/test-sigbus.c']],
+        [files('test-compress-benchmark.c'),
+         [libshared,
+          libbasic_compress],
+         [],
+         [], '', 'timeout=90'],
 
-        [['src/test/test-condition.c']],
+        [files('test-data-fd-util.c')],
 
-        [['src/test/test-fdset.c']],
+        [files('test-static-destruct.c')],
 
-        [['src/test/test-fstab-util.c']],
+        [files('test-sigbus.c')],
 
-        [['src/test/test-random-util.c'],
+        [files('test-condition.c')],
+
+        [files('test-fdset.c')],
+
+        [files('test-fstab-util.c')],
+
+        [files('test-random-util.c'),
          [],
          [libm],
          [], '', 'timeout=120'],
 
-        [['src/test/test-format-table.c']],
+        [files('test-format-table.c')],
 
-        [['src/test/test-format-util.c']],
+        [files('test-format-util.c')],
 
-        [['src/test/test-ratelimit.c']],
+        [files('test-ratelimit.c')],
 
-        [['src/test/test-util.c']],
+        [files('test-raw-clone.c')],
 
-        [['src/test/test-json.c']],
+        [files('test-limits-util.c')],
 
-        [['src/test/test-modhex.c']],
+        [files('test-logarithm.c')],
 
-        [['src/test/test-libmount.c'],
+        [files('test-macro.c')],
+
+        [files('test-math-util.c'),
+         [],
+         [libm]],
+
+        [files('test-memory-util.c')],
+
+        [files('test-mkdir.c')],
+
+        [files('test-json.c'),
+         [],
+         [libm]],
+
+        [files('test-modhex.c')],
+
+        [files('test-libmount.c'),
          [],
          [threads,
           libmount]],
 
-        [['src/test/test-mount-util.c']],
+        [files('test-mount-util.c')],
 
-        [['src/test/test-mountpoint-util.c']],
+        [files('test-mountpoint-util.c')],
 
-        [['src/test/test-exec-util.c']],
+        [files('test-exec-util.c')],
 
-        [['src/test/test-hexdecoct.c']],
+        [files('test-execve.c')],
 
-        [['src/test/test-alloc-util.c']],
+        [files('test-hexdecoct.c')],
 
-        [['src/test/test-xattr-util.c']],
+        [files('test-alloc-util.c')],
 
-        [['src/test/test-io-util.c']],
+        [files('test-xattr-util.c')],
 
-        [['src/test/test-glob-util.c']],
+        [files('test-io-util.c')],
 
-        [['src/test/test-fs-util.c']],
+        [files('test-glob-util.c')],
 
-        [['src/test/test-umask-util.c']],
+        [files('test-fs-util.c')],
 
-        [['src/test/test-proc-cmdline.c']],
+        [files('test-install-file.c')],
 
-        [['src/test/test-fd-util.c']],
+        [files('test-umask-util.c')],
 
-        [['src/test/test-web-util.c']],
+        [files('test-creds.c')],
 
-        [['src/test/test-cpu-set-util.c']],
+        [files('test-proc-cmdline.c')],
 
-        [['src/test/test-stat-util.c']],
+        [files('test-fd-util.c'),
+         [],
+         [libseccomp]],
 
-        [['src/test/test-os-util.c']],
+        [files('test-web-util.c')],
 
-        [['src/test/test-libcrypt-util.c'],
+        [files('test-cpu-set-util.c')],
+
+        [files('test-stat-util.c')],
+
+        [files('test-devnum-util.c')],
+
+        [files('test-os-util.c')],
+
+        [files('test-libcrypt-util.c'),
          [], [libcrypt], [], '', 'timeout=120'],
 
-        [['src/test/test-escape.c']],
+        [files('test-escape.c')],
 
-        [['src/test/test-exit-status.c']],
+        [files('test-exit-status.c')],
 
-        [['src/test/test-specifier.c']],
+        [files('test-specifier.c')],
 
-        [['src/test/test-string-util.c']],
+        [files('test-string-util.c')],
 
-        [['src/test/test-extract-word.c']],
+        [files('test-extract-word.c')],
 
-        [['src/test/test-parse-argument.c']],
+        [files('test-parse-argument.c')],
 
-        [['src/test/test-parse-socket-bind-item.c']],
+        [files('test-parse-helpers.c')],
 
-        [['src/test/test-parse-util.c']],
+        [files('test-parse-util.c'),
+         [],
+         [libm]],
 
-        [['src/test/test-sysctl-util.c']],
+        [files('test-sysctl-util.c')],
 
-        [['src/test/test-user-record.c']],
+        [files('test-import-util.c')],
 
-        [['src/test/test-user-util.c']],
+        [files('test-uid-alloc-range.c')],
 
-        [['src/test/test-hostname-setup.c']],
+        [files('test-user-util.c')],
 
-        [['src/test/test-hostname-util.c']],
+        [files('test-hostname-setup.c')],
 
-        [['src/test/test-process-util.c']],
+        [files('test-hostname-util.c')],
 
-        [['src/test/test-terminal-util.c']],
+        [files('test-process-util.c')],
 
-        [['src/test/test-path-lookup.c']],
+        [files('test-terminal-util.c')],
 
-        [['src/test/test-pretty-print.c']],
+        [files('test-path-lookup.c')],
 
-        [['src/test/test-uid-range.c']],
+        [files('test-pretty-print.c')],
 
-        [['src/test/test-cap-list.c',
-          generated_gperf_headers],
+        [files('test-uid-range.c')],
+
+        [files('test-cap-list.c') +
+         generated_gperf_headers,
          [],
          [libcap]],
 
-        [['src/test/test-socket-util.c']],
+        [files('test-socket-util.c')],
 
-        [['src/test/test-socket-netlink.c']],
+        [files('test-socket-netlink.c')],
 
-        [['src/test/test-in-addr-util.c']],
+        [files('test-in-addr-util.c')],
 
-        [['src/test/test-barrier.c']],
+        [files('test-in-addr-prefix-util.c')],
 
-        [['src/test/test-tmpfiles.c']],
+        [files('test-barrier.c')],
 
-        [['src/test/test-namespace.c'],
+        [files('test-tmpfiles.c')],
+
+        [files('test-namespace.c'),
          [libcore,
           libshared],
          [threads,
           libblkid],
          core_includes],
 
-        [['src/test/test-verbs.c']],
+        [files('test-verbs.c')],
 
-        [['src/test/test-install-root.c']],
+        [files('test-install-root.c')],
 
-        [['src/test/test-acl-util.c'],
+        [files('test-acl-util.c'),
          [], [], [], 'HAVE_ACL'],
 
-        [['src/test/test-seccomp.c'],
+        [files('test-seccomp.c'),
          [],
          [libseccomp],
          [], 'HAVE_SECCOMP'],
 
-        [['src/test/test-rlimit-util.c']],
+        [files('test-rlimit-util.c')],
 
-        [['src/test/test-ask-password-api.c'],
+        [files('test-ask-password-api.c'),
          [], [], [], '', 'manual'],
 
-        [['src/test/test-signal-util.c']],
+        [files('test-signal-util.c')],
 
-        [['src/test/test-loop-block.c'],
+        [files('test-loop-block.c'),
          [libcore,
           libshared],
          [threads,
           libblkid],
          core_includes, '', '', [], false],
 
-        [['src/test/test-selinux.c']],
+        [files('test-selinux.c')],
 
-        [['src/test/test-sizeof.c'],
+        [files('test-sizeof.c'),
          [libbasic]],
 
-        [['src/test/test-bpf-devices.c'],
+        [files('test-bpf-devices.c'),
          [libcore,
           libshared],
          [libmount,
@@ -329,7 +386,7 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-bpf-firewall.c'],
+        [files('test-bpf-firewall.c'),
          [libcore,
           libshared],
          [libmount,
@@ -340,13 +397,13 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-bpf-foreign-programs.c'],
+        [files('test-bpf-foreign-programs.c'),
          [libcore,
           libshared],
          [],
          core_includes],
 
-        [['src/test/test-watch-pid.c'],
+        [files('test-bpf-lsm.c'),
          [libcore,
           libshared],
          [libmount,
@@ -357,33 +414,43 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-hashmap.c',
-          'src/test/test-hashmap-plain.c',
-          test_hashmap_ordered_c],
-         [], [], [], '', 'timeout=90'],
+        [files('test-watch-pid.c'),
+         [libcore,
+          libshared],
+         [libmount,
+          threads,
+          librt,
+          libseccomp,
+          libselinux,
+          libblkid],
+         core_includes],
 
-        [['src/test/test-set.c'],
-         [libbasic]],
+        [files('test-hashmap.c',
+               'test-hashmap-plain.c') +
+         [test_hashmap_ordered_c],
+         [], [], [], '', 'timeout=180'],
 
-        [['src/test/test-ordered-set.c']],
+        [files('test-set.c')],
 
-        [['src/test/test-set-disable-mempool.c'],
+        [files('test-ordered-set.c')],
+
+        [files('test-set-disable-mempool.c'),
          [],
          [threads]],
 
-        [['src/test/test-hash-funcs.c']],
+        [files('test-hash-funcs.c')],
 
-        [['src/test/test-bitmap.c']],
+        [files('test-bitmap.c')],
 
-        [['src/test/test-xml.c']],
+        [files('test-xml.c')],
 
-        [['src/test/test-list.c']],
+        [files('test-list.c')],
 
-        [['src/test/test-procfs-util.c']],
+        [files('test-procfs-util.c')],
 
-        [['src/test/test-unaligned.c']],
+        [files('test-unaligned.c')],
 
-        [['src/test/test-tables.c'],
+        [files('test-tables.c'),
          [libcore,
           libjournal_core,
           libudevd_core,
@@ -393,69 +460,78 @@
           libmount,
           libxz,
           liblz4,
-          libblkid],
+          libblkid,
+          libselinux],
          [core_includes, journal_includes, udev_includes]],
 
-        [['src/test/test-prioq.c']],
+        [files('test-prioq.c')],
 
-        [['src/test/test-fileio.c']],
+        [files('test-fileio.c')],
 
-        [['src/test/test-time-util.c']],
+        [files('test-time-util.c')],
 
-        [['src/test/test-clock.c']],
+        [files('test-clock.c')],
 
-        [['src/test/test-tmpfile-util.c']],
+        [files('test-tmpfile-util.c')],
 
-        [['src/test/test-architecture.c']],
+        [files('test-architecture.c')],
 
-        [['src/test/test-log.c']],
+        [files('test-gpt.c')],
 
-        [['src/test/test-ipcrm.c'],
+        [files('test-log.c')],
+
+        [files('test-ipcrm.c'),
          [], [], [], '', 'unsafe'],
 
-        [['src/test/test-btrfs.c'],
+        [files('test-btrfs.c'),
          [], [], [], '', 'manual'],
 
-        [['src/test/test-firewall-util.c']],
+        [files('test-firewall-util.c')],
 
-        [['src/test/test-netlink-manual.c'],
+        [files('test-net-naming-scheme.c')],
+
+        [files('test-netlink-manual.c'),
          [],
          [libkmod],
          [], 'HAVE_KMOD', 'manual'],
 
-        [['src/test/test-ellipsize.c']],
+        [files('test-ellipsize.c')],
 
-        [['src/test/test-date.c']],
+        [files('test-date.c')],
 
-        [['src/test/test-sleep.c']],
+        [files('test-sbat.c'),
+         [], [], [], 'HAVE_GNU_EFI', '',
+         ['-I@0@'.format(efi_config_h_dir)]],
 
-        [['src/test/test-tpm2.c']],
+        [files('test-sleep.c')],
 
-        [['src/test/test-replace-var.c']],
+        [files('test-tpm2.c')],
 
-        [['src/test/test-calendarspec.c']],
+        [files('test-replace-var.c')],
 
-        [['src/test/test-strip-tab-ansi.c']],
+        [files('test-calendarspec.c')],
 
-        [['src/test/test-coredump-util.c']],
+        [files('test-strip-tab-ansi.c')],
 
-        [['src/test/test-daemon.c']],
+        [files('test-coredump-util.c')],
 
-        [['src/test/test-cgroup.c']],
+        [files('test-daemon.c')],
 
-        [['src/test/test-cgroup-cpu.c'],
+        [files('test-cgroup.c')],
+
+        [files('test-cgroup-cpu.c'),
          [libcore,
           libshared],
          [],
          core_includes],
 
-        [['src/test/test-cgroup-unit-default.c'],
+        [files('test-cgroup-unit-default.c'),
          [libcore,
           libshared],
          [],
          core_includes],
 
-        [['src/test/test-cgroup-mask.c'],
+        [files('test-cgroup-mask.c'),
          [libcore,
           libshared],
          [threads,
@@ -466,30 +542,34 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-varlink.c'],
+        [files('test-varlink.c'),
          [],
          [threads]],
 
-        [['src/test/test-cgroup-util.c']],
+        [files('test-cgroup-util.c')],
 
-        [['src/test/test-cgroup-setup.c']],
+        [files('test-cgroup-setup.c')],
 
-        [['src/test/test-env-file.c']],
+        [files('test-env-file.c')],
 
-        [['src/test/test-env-util.c']],
+        [files('test-env-util.c')],
 
-        [['src/test/test-strbuf.c']],
+        [files('test-strbuf.c')],
 
-        [['src/test/test-strv.c']],
+        [files('test-bootspec.c')],
 
-        [['src/test/test-path-util.c']],
+        [files('test-strv.c')],
 
-        [['src/test/test-rm-rf.c']],
+        [files('test-nulstr-util.c')],
 
-        [['src/test/test-chase-symlinks.c'],
+        [files('test-path-util.c')],
+
+        [files('test-rm-rf.c')],
+
+        [files('test-chase-symlinks.c'),
          [], [], [], '', 'manual'],
 
-        [['src/test/test-path.c'],
+        [files('test-path.c'),
          [libcore,
           libshared],
          [threads,
@@ -500,7 +580,7 @@
           libblkid],
          core_includes, '', 'timeout=120'],
 
-        [['src/test/test-execute.c'],
+        [files('test-execute.c'),
          [libcore,
           libshared],
          [threads,
@@ -511,20 +591,20 @@
           libblkid],
          core_includes, '', 'timeout=360'],
 
-        [['src/test/test-siphash24.c']],
+        [files('test-siphash24.c')],
 
-        [['src/test/test-strxcpyx.c']],
+        [files('test-strxcpyx.c')],
 
-        [['src/test/test-install.c'],
+        [files('test-install.c'),
          [libcore,
           libshared],
          [],
          core_includes, '', 'manual'],
 
-        [['src/test/test-watchdog.c'],
+        [files('test-watchdog.c'),
          [], [], [], '', 'unsafe'],
 
-        [['src/test/test-sched-prio.c'],
+        [files('test-sched-prio.c'),
          [libcore,
           libshared],
          [threads,
@@ -535,22 +615,30 @@
           libblkid],
          core_includes],
 
-        [['src/test/test-conf-files.c']],
+        [files('test-conf-files.c')],
 
-        [['src/test/test-conf-parser.c']],
+        [files('test-conf-parser.c')],
 
-        [['src/test/test-af-list.c',
-          generated_gperf_headers]],
+        [files('test-af-list.c') +
+         generated_gperf_headers],
 
-        [['src/test/test-arphrd-list.c',
-          generated_gperf_headers]],
+        [files('test-arphrd-util.c') +
+         generated_gperf_headers],
 
-        [['src/test/test-ip-protocol-list.c',
-          shared_generated_gperf_headers]],
+        [files('test-errno-list.c') +
+         generated_gperf_headers],
 
-        [['src/test/test-journal-importer.c']],
+        [files('test-errno-util.c')],
 
-        [['src/test/test-udev.c'],
+        [files('test-ip-protocol-list.c') +
+         shared_generated_gperf_headers],
+
+        [files('test-journal-importer.c')],
+
+        [files('test-utmp.c'),
+         [], [], [], 'ENABLE_UTMP'],
+
+        [files('test-udev.c'),
          [libudevd_core,
           libshared],
          [threads,
@@ -561,47 +649,51 @@
           libselinux],
          udev_includes, '', 'manual'],
 
-        [['src/test/test-udev-util.c']],
+        [files('test-udev-util.c')],
 
-        [['src/test/test-id128.c']],
+        [files('test-id128.c')],
 
-        [['src/test/test-hash.c']],
+        [files('test-cryptolib.c'),
+         [libshared],
+         [lib_openssl_or_gcrypt],
+         [], 'HAVE_OPENSSL_OR_GCRYPT'],
 
-        [['src/test/test-gcrypt-util.c'],
-         [], [], [], 'HAVE_GCRYPT'],
-
-        [['src/test/test-nss-hosts.c',
-          'src/test/nss-test-util.c',
-          'src/test/nss-test-util.h'],
+        [files('test-nss-hosts.c',
+               'nss-test-util.c'),
          [],
          [libdl],
-         [], 'ENABLE_NSS', 'manual'],
+         [], 'ENABLE_NSS', 'timeout=120'],
 
-        [['src/test/test-nss-users.c',
-          'src/test/nss-test-util.c',
-          'src/test/nss-test-util.h'],
+        [files('test-nss-users.c',
+               'nss-test-util.c'),
          [],
          [libdl],
-         [], 'ENABLE_NSS', 'manual'],
+         [], 'ENABLE_NSS'],
 
-        [['src/test/test-bus-util.c']],
+        [files('test-bus-util.c')],
 
-        [['src/test/test-percent-util.c']],
+        [files('test-percent-util.c')],
 
-        [['src/test/test-sd-hwdb.c']],
+        [files('test-sd-hwdb.c')],
 
-        [['src/test/test-sd-path.c']],
+        [files('test-sd-path.c')],
 
-        [['src/test/test-local-addresses.c']],
+        [files('test-local-addresses.c')],
 
-        [['src/test/test-psi-util.c']],
+        [files('test-psi-util.c')],
 
-        [['src/test/test-qrcode-util.c'],
+        [files('test-qrcode-util.c'),
          [],
          [libdl]],
 
-        [['src/test/test-nscd-flush.c'],
+        [files('test-nscd-flush.c'),
          [], [], [], 'ENABLE_NSCD', 'manual'],
+
+        [files('test-hmac.c')],
+
+        [files('test-sha256.c')],
+
+        [files('test-open-file.c')],
 ]
 
 ############################################################
@@ -609,23 +701,23 @@
 # define some tests here, because the link_with deps were not defined earlier
 
 tests += [
-        [['src/libsystemd/sd-bus/test-bus-error.c'],
+        [files('../libsystemd/sd-bus/test-bus-error.c'),
          [libshared_static,
           libsystemd_static]],
 
-        [['src/libsystemd/sd-device/test-sd-device-thread.c'],
+        [files('../libsystemd/sd-device/test-sd-device-thread.c'),
          [libsystemd],
          [threads]],
 
-        [['src/libudev/test-udev-device-thread.c'],
+        [files('../libudev/test-udev-device-thread.c'),
          [libudev],
          [threads]],
 ]
 
 tests += [
-         [['src/test/test-socket-bind.c'],
-          [libcore,
-          libshared],
+        [files('test-socket-bind.c'),
+         [libcore,
+         libshared],
          [libdl],
          core_includes,
          'BPF_FRAMEWORK'],
diff --git a/src/test/nss-test-util.c b/src/test/nss-test-util.c
index fc1d724..20643f8 100644
--- a/src/test/nss-test-util.c
+++ b/src/test/nss-test-util.c
@@ -20,7 +20,7 @@
         case NSS_STATUS_RETURN:
                 return "NSS_STATUS_RETURN";
         default:
-                snprintf(buf, buf_len, "%i", status);
+                (void) snprintf(buf, buf_len, "%i", status);
                 return buf;
         }
 };
diff --git a/src/test/test-acl-util.c b/src/test/test-acl-util.c
index 37c8265..2c40689 100644
--- a/src/test/test-acl-util.c
+++ b/src/test/test-acl-util.c
@@ -14,15 +14,13 @@
 #include "tmpfile-util.h"
 #include "user-util.h"
 
-static int test_add_acls_for_user(void) {
+TEST_RET(add_acls_for_user) {
         char fn[] = "/tmp/test-empty.XXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         char *cmd;
         uid_t uid;
         int r;
 
-        log_info("/* %s */", __func__);
-
         fd = mkostemp_safe(fn);
         assert_se(fd >= 0);
 
@@ -71,6 +69,4 @@
         return 0;
 }
 
-int main(int argc, char **argv) {
-        return test_add_acls_for_user();
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-af-list.c b/src/test/test-af-list.c
index 672dc68..45655d7 100644
--- a/src/test/test-af-list.c
+++ b/src/test/test-af-list.c
@@ -4,7 +4,7 @@
 
 #include "macro.h"
 #include "string-util.h"
-#include "util.h"
+#include "tests.h"
 
 _unused_
 static const struct af_name* lookup_af(register const char *str, register GPERF_LEN_TYPE len);
@@ -13,11 +13,8 @@
 #include "af-list.h"
 #include "af-to-name.h"
 
-int main(int argc, const char *argv[]) {
-
-        unsigned i;
-
-        for (i = 0; i < ELEMENTSOF(af_names); i++) {
+TEST(af_list) {
+        for (unsigned i = 0; i < ELEMENTSOF(af_names); i++) {
                 if (af_names[i]) {
                         assert_se(streq(af_to_name(i), af_names[i]));
                         assert_se(af_from_name(af_names[i]) == (int) i);
@@ -28,6 +25,6 @@
         assert_se(af_to_name(-1) == NULL);
         assert_se(af_from_name("huddlduddl") == -EINVAL);
         assert_se(af_from_name("") == -EINVAL);
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-alloc-util.c b/src/test/test-alloc-util.c
index fb69009..df61390 100644
--- a/src/test/test-alloc-util.c
+++ b/src/test/test-alloc-util.c
@@ -9,7 +9,7 @@
 #include "random-util.h"
 #include "tests.h"
 
-static void test_alloca(void) {
+TEST(alloca) {
         static const uint8_t zero[997] = { };
         char *t;
 
@@ -22,7 +22,7 @@
         assert_se(!memcmp(t, zero, 997));
 }
 
-static void test_GREEDY_REALLOC(void) {
+TEST(GREEDY_REALLOC) {
         _cleanup_free_ int *a = NULL, *b = NULL;
         size_t i, j;
 
@@ -55,7 +55,7 @@
                 assert_se(b[j] == (int) j);
 }
 
-static void test_memdup_multiply_and_greedy_realloc(void) {
+TEST(memdup_multiply_and_greedy_realloc) {
         static const int org[] = { 1, 2, 3 };
         _cleanup_free_ int *dup;
         size_t i;
@@ -90,7 +90,7 @@
                 assert_se(p[i] == 0);
 }
 
-static void test_bool_assign(void) {
+TEST(bool_assign) {
         bool b, c, *cp = &c, d, e, f, g, h;
 
         b = 123;
@@ -125,7 +125,7 @@
         assert_se(++cleanup_counter == *(int*) a);
 }
 
-static void test_cleanup_order(void) {
+TEST(cleanup_order) {
         _cleanup_(cleanup1) int x1 = 4, x2 = 3;
         _cleanup_(cleanup3) int z = 2;
         _cleanup_(cleanup2) int y = 1;
@@ -135,7 +135,7 @@
         log_debug("z: %p", &z);
 }
 
-static void test_auto_erase_memory(void) {
+TEST(auto_erase_memory) {
         _cleanup_(erase_and_freep) uint8_t *p1, *p2;
 
         /* print address of p2, else e.g. clang-11 will optimize it out */
@@ -145,7 +145,7 @@
                                              * end of the allocation, since malloc() enforces alignment */
         assert_se(p2 = new(uint8_t, 4703));
 
-        assert_se(genuine_random_bytes(p1, 4703, RANDOM_BLOCK) == 0);
+        assert_se(crypto_random_bytes(p1, 4703) == 0);
 
         /* before we exit the scope, do something with this data, so that the compiler won't optimize this away */
         memcpy(p2, p1, 4703);
@@ -163,9 +163,9 @@
                 assert_se(MALLOC_SIZEOF_SAFE(f) >= sizeof(*f) * n);     \
                 assert_se(malloc_usable_size(f) >= sizeof(*f) * n);     \
                 assert_se(__builtin_object_size(f, 0) >= sizeof(*f) * n); \
-        } while(false)
+        } while (false)
 
-static void test_malloc_size_safe(void) {
+TEST(malloc_size_safe) {
         _cleanup_free_ uint32_t *f = NULL;
         size_t n = 4711;
 
@@ -191,16 +191,4 @@
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_alloca();
-        test_GREEDY_REALLOC();
-        test_memdup_multiply_and_greedy_realloc();
-        test_bool_assign();
-        test_cleanup_order();
-        test_auto_erase_memory();
-        test_malloc_size_safe();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-architecture.c b/src/test/test-architecture.c
index 798c95c..043978e 100644
--- a/src/test/test-architecture.c
+++ b/src/test/test-architecture.c
@@ -1,13 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "architecture.h"
+#include "errno-util.h"
 #include "log.h"
 #include "tests.h"
-#include "util.h"
 #include "virt.h"
 
 int main(int argc, char *argv[]) {
-        int a, v;
+        Virtualization v;
+        Architecture a;
         const char *p;
 
         test_setup_logging(LOG_INFO);
@@ -20,7 +21,7 @@
         assert_se(architecture_from_string(architecture_to_string(1)) == 1);
 
         v = detect_virtualization();
-        if (IN_SET(v, -EPERM, -EACCES))
+        if (v < 0 && ERRNO_IS_PRIVILEGE(v))
                 return log_tests_skipped("Cannot detect virtualization");
 
         assert_se(v >= 0);
diff --git a/src/test/test-argv-util.c b/src/test/test-argv-util.c
new file mode 100644
index 0000000..26f6038
--- /dev/null
+++ b/src/test/test-argv-util.c
@@ -0,0 +1,123 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sched.h>
+#include <unistd.h>
+
+#if HAVE_VALGRIND_VALGRIND_H
+#  include <valgrind/valgrind.h>
+#endif
+
+#include "argv-util.h"
+#include "missing_sched.h"
+#include "process-util.h"
+#include "tests.h"
+#include "virt.h"
+
+static void test_rename_process_now(const char *p, int ret) {
+        _cleanup_free_ char *comm = NULL, *cmdline = NULL;
+        int r;
+
+        log_info("/* %s(%s) */", __func__, p);
+
+        r = rename_process(p);
+        assert_se(r == ret ||
+                  (ret == 0 && r >= 0) ||
+                  (ret > 0 && r > 0));
+
+        log_debug_errno(r, "rename_process(%s): %m", p);
+
+        if (r < 0)
+                return;
+
+#if HAVE_VALGRIND_VALGRIND_H
+        /* see above, valgrind is weird, we can't verify what we are doing here */
+        if (RUNNING_ON_VALGRIND)
+                return;
+#endif
+
+        assert_se(get_process_comm(0, &comm) >= 0);
+        log_debug("comm = <%s>", comm);
+        assert_se(strneq(comm, p, TASK_COMM_LEN-1));
+        /* We expect comm to be at most 16 bytes (TASK_COMM_LEN). The kernel may raise this limit in the
+         * future. We'd only check the initial part, at least until we recompile, but this will still pass. */
+
+        r = get_process_cmdline(0, SIZE_MAX, 0, &cmdline);
+        assert_se(r >= 0);
+        /* we cannot expect cmdline to be renamed properly without privileges */
+        if (geteuid() == 0) {
+                if (r == 0 && detect_container() > 0)
+                        log_info("cmdline = <%s> (not verified, Running in unprivileged container?)", cmdline);
+                else {
+                        log_info("cmdline = <%s> (expected <%.*s>)", cmdline, (int) strlen("test-process-util"), p);
+
+                        bool skip = cmdline[0] == '"'; /* A shortcut to check if the string is quoted */
+
+                        assert_se(strneq(cmdline + skip, p, strlen("test-process-util")));
+                        assert_se(startswith(cmdline + skip, p));
+                }
+        } else
+                log_info("cmdline = <%s> (not verified)", cmdline);
+}
+
+static void test_rename_process_one(const char *p, int ret) {
+        siginfo_t si;
+        pid_t pid;
+
+        log_info("/* %s(%s) */", __func__, p);
+
+        pid = fork();
+        assert_se(pid >= 0);
+
+        if (pid == 0) {
+                /* child */
+                test_rename_process_now(p, ret);
+                _exit(EXIT_SUCCESS);
+        }
+
+        assert_se(wait_for_terminate(pid, &si) >= 0);
+        assert_se(si.si_code == CLD_EXITED);
+        assert_se(si.si_status == EXIT_SUCCESS);
+}
+
+TEST(rename_process_invalid) {
+        assert_se(rename_process(NULL) == -EINVAL);
+        assert_se(rename_process("") == -EINVAL);
+}
+
+TEST(rename_process_multi) {
+        pid_t pid;
+
+        pid = fork();
+        assert_se(pid >= 0);
+
+        if (pid > 0) {
+                siginfo_t si;
+
+                assert_se(wait_for_terminate(pid, &si) >= 0);
+                assert_se(si.si_code == CLD_EXITED);
+                assert_se(si.si_status == EXIT_SUCCESS);
+
+                return;
+        }
+
+        /* child */
+        test_rename_process_now("one", 1);
+        test_rename_process_now("more", 0); /* longer than "one", hence truncated */
+        (void) setresuid(99, 99, 99); /* change uid when running privileged */
+        test_rename_process_now("time!", 0);
+        test_rename_process_now("0", 1); /* shorter than "one", should fit */
+        _exit(EXIT_SUCCESS);
+}
+
+TEST(rename_process) {
+        test_rename_process_one("foo", 1); /* should always fit */
+        test_rename_process_one("this is a really really long process name, followed by some more words", 0); /* unlikely to fit */
+        test_rename_process_one("1234567", 1); /* should always fit */
+}
+
+static int intro(void) {
+        log_show_color(true);
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-arphrd-list.c b/src/test/test-arphrd-list.c
deleted file mode 100644
index 9e21f32..0000000
--- a/src/test/test-arphrd-list.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <linux/if_arp.h>
-
-#include "string-util.h"
-#include "tests.h"
-
-#include "arphrd-list.h"
-
-int main(int argc, const char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
-        for (int i = 0; i <= ARPHRD_VOID + 1; i++) {
-                const char *name;
-
-                name = arphrd_to_name(i);
-                if (name) {
-                        log_info("%i: %s", i, name);
-
-                        assert_se(arphrd_from_name(name) == i);
-                }
-        }
-
-        assert_se(arphrd_to_name(ARPHRD_VOID + 1) == NULL);
-        assert_se(arphrd_from_name("huddlduddl") == -EINVAL);
-        assert_se(arphrd_from_name("") == -EINVAL);
-
-        return 0;
-}
diff --git a/src/test/test-arphrd-util.c b/src/test/test-arphrd-util.c
new file mode 100644
index 0000000..d8dd464
--- /dev/null
+++ b/src/test/test-arphrd-util.c
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/if_arp.h>
+
+#include "arphrd-util.h"
+#include "string-util.h"
+#include "tests.h"
+
+TEST(arphrd) {
+        for (int i = 0; i <= ARPHRD_VOID + 1; i++) {
+                const char *name;
+
+                name = arphrd_to_name(i);
+                if (name) {
+                        log_info("%i: %s", i, name);
+
+                        assert_se(arphrd_from_name(name) == i);
+                }
+        }
+
+        assert_se(arphrd_to_name(ARPHRD_VOID + 1) == NULL);
+        assert_se(arphrd_from_name("huddlduddl") == -EINVAL);
+        assert_se(arphrd_from_name("") == -EINVAL);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-ask-password-api.c b/src/test/test-ask-password-api.c
index 06158ac..b24159e 100644
--- a/src/test/test-ask-password-api.c
+++ b/src/test/test-ask-password-api.c
@@ -4,7 +4,7 @@
 #include "strv.h"
 #include "tests.h"
 
-static void test_ask_password(void) {
+TEST(ask_password) {
         int r;
         _cleanup_strv_free_ char **ret = NULL;
 
@@ -18,9 +18,4 @@
         }
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_ask_password();
-        return EXIT_SUCCESS;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-async.c b/src/test/test-async.c
index 8eefad5..b97fedc 100644
--- a/src/test/test-async.c
+++ b/src/test/test-async.c
@@ -6,7 +6,6 @@
 #include "async.h"
 #include "macro.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 static bool test_async = false;
 
diff --git a/src/test/test-barrier.c b/src/test/test-barrier.c
index 6ef2998..b255dba 100644
--- a/src/test/test-barrier.c
+++ b/src/test/test-barrier.c
@@ -15,10 +15,10 @@
 #include <unistd.h>
 
 #include "barrier.h"
-#include "util.h"
+#include "errno-util.h"
 #include "tests.h"
-#include "virt.h"
 #include "time-util.h"
+#include "virt.h"
 
 /* 20ms to test deadlocks; All timings use multiples of this constant as
  * alarm/sleep timers. If this timeout is too small for slow machines to perform
@@ -40,7 +40,7 @@
 }
 
 #define TEST_BARRIER(_FUNCTION, _CHILD_CODE, _WAIT_CHILD, _PARENT_CODE, _WAIT_PARENT)  \
-        static void _FUNCTION(void) {                                   \
+        TEST(_FUNCTION) {                                               \
                 Barrier b = BARRIER_NULL;                               \
                 pid_t pid1, pid2;                                       \
                                                                         \
@@ -100,7 +100,7 @@
  * pending HUP on the pipe. However, the barrier_sync() prefers reads on the
  * eventfd, thus we can safely wait on the barrier.
  */
-TEST_BARRIER(test_barrier_sync,
+TEST_BARRIER(barrier_sync,
         ({
                 set_alarm(BASE_TIME * 10);
                 assert_se(barrier_place(&b));
@@ -122,7 +122,7 @@
  * succeed as the child hasn't read the parent's barrier, yet. The following
  * barrier and sync synchronize the exit.
  */
-TEST_BARRIER(test_barrier_wait_next,
+TEST_BARRIER(barrier_wait_next,
         ({
                 sleep_for(BASE_TIME);
                 set_alarm(BASE_TIME * 10);
@@ -148,7 +148,7 @@
  * not look at barrier-links so this stall is expected. Thus this test times
  * out.
  */
-TEST_BARRIER(test_barrier_wait_next_twice,
+TEST_BARRIER(barrier_wait_next_twice,
         ({
                 sleep_for(BASE_TIME);
                 set_alarm(BASE_TIME);
@@ -171,7 +171,7 @@
  * between both waits. This does not have any effect on the wait so it times out
  * like the other test.
  */
-TEST_BARRIER(test_barrier_wait_next_twice_local,
+TEST_BARRIER(barrier_wait_next_twice_local,
         ({
                 sleep_for(BASE_TIME);
                 set_alarm(BASE_TIME);
@@ -196,7 +196,7 @@
  * synced wait as the second wait. This works just fine because the local state
  * has no barriers placed, therefore, the remote is always in sync.
  */
-TEST_BARRIER(test_barrier_wait_next_twice_sync,
+TEST_BARRIER(barrier_wait_next_twice_sync,
         ({
                 sleep_for(BASE_TIME);
                 set_alarm(BASE_TIME);
@@ -217,7 +217,7 @@
  * synced wait as the second wait. This works just fine because the local state
  * is in sync with the remote.
  */
-TEST_BARRIER(test_barrier_wait_next_twice_local_sync,
+TEST_BARRIER(barrier_wait_next_twice_local_sync,
         ({
                 sleep_for(BASE_TIME);
                 set_alarm(BASE_TIME);
@@ -239,7 +239,7 @@
  * This tests sync_*() synchronizations and makes sure they work fine if the
  * local state is behind the remote state.
  */
-TEST_BARRIER(test_barrier_sync_next,
+TEST_BARRIER(barrier_sync_next,
         ({
                 set_alarm(BASE_TIME * 10);
                 assert_se(barrier_sync_next(&b));
@@ -265,7 +265,7 @@
  * This tests timeouts if sync_*() is used if local barriers are placed but the
  * remote didn't place any.
  */
-TEST_BARRIER(test_barrier_sync_next_local,
+TEST_BARRIER(barrier_sync_next_local,
         ({
                 set_alarm(BASE_TIME);
                 assert_se(barrier_place(&b));
@@ -283,7 +283,7 @@
  * This is the same as test_barrier_sync_next_local but aborts the sync in the
  * parent. Therefore, the sync_next() succeeds just fine due to the abortion.
  */
-TEST_BARRIER(test_barrier_sync_next_local_abort,
+TEST_BARRIER(barrier_sync_next_local_abort,
         ({
                 set_alarm(BASE_TIME * 10);
                 assert_se(barrier_place(&b));
@@ -299,7 +299,7 @@
  * Test matched wait_abortion()
  * This runs wait_abortion() with remote abortion.
  */
-TEST_BARRIER(test_barrier_wait_abortion,
+TEST_BARRIER(barrier_wait_abortion,
         ({
                 set_alarm(BASE_TIME * 10);
                 assert_se(barrier_wait_abortion(&b));
@@ -315,7 +315,7 @@
  * This runs wait_abortion() without any remote abortion going on. It thus must
  * timeout.
  */
-TEST_BARRIER(test_barrier_wait_abortion_unmatched,
+TEST_BARRIER(barrier_wait_abortion_unmatched,
         ({
                 set_alarm(BASE_TIME);
                 assert_se(barrier_wait_abortion(&b));
@@ -331,7 +331,7 @@
  * Test matched wait_abortion() with local abortion
  * This runs wait_abortion() with local and remote abortion.
  */
-TEST_BARRIER(test_barrier_wait_abortion_local,
+TEST_BARRIER(barrier_wait_abortion_local,
         ({
                 set_alarm(BASE_TIME * 10);
                 assert_se(barrier_abort(&b));
@@ -347,7 +347,7 @@
  * Test unmatched wait_abortion() with local abortion
  * This runs wait_abortion() with only local abortion. This must time out.
  */
-TEST_BARRIER(test_barrier_wait_abortion_local_unmatched,
+TEST_BARRIER(barrier_wait_abortion_local_unmatched,
         ({
                 set_alarm(BASE_TIME);
                 assert_se(barrier_abort(&b));
@@ -365,7 +365,7 @@
  * Place barrier and sync with the child. The child only exits()s, which should
  * cause an implicit abortion and wake the parent.
  */
-TEST_BARRIER(test_barrier_exit,
+TEST_BARRIER(barrier_exit,
         ({
         }),
         TEST_BARRIER_WAIT_SUCCESS(pid1),
@@ -382,7 +382,7 @@
  * child-exit. We add a usleep() which triggers the alarm in the parent and
  * causes the test to time out.
  */
-TEST_BARRIER(test_barrier_no_exit,
+TEST_BARRIER(barrier_no_exit,
         ({
                 sleep_for(BASE_TIME * 2);
         }),
@@ -404,7 +404,7 @@
  * succeeds. Only if we place one more barrier, we're ahead of the remote, thus
  * we will fail due to HUP on the pipe.
  */
-TEST_BARRIER(test_barrier_pending_exit,
+TEST_BARRIER(barrier_pending_exit,
         ({
                 set_alarm(BASE_TIME * 4);
                 sleep_for(BASE_TIME * 2);
@@ -421,44 +421,27 @@
         }),
         TEST_BARRIER_WAIT_SUCCESS(pid2));
 
-int main(int argc, char *argv[]) {
-        int v;
-        test_setup_logging(LOG_INFO);
 
+static int intro(void) {
         if (!slow_tests_enabled())
                 return log_tests_skipped("slow tests are disabled");
 
         /*
-         * This test uses real-time alarms and sleeps to test for CPU races
-         * explicitly. This is highly fragile if your system is under load. We
-         * already increased the BASE_TIME value to make the tests more robust,
-         * but that just makes the test take significantly longer. Given the recent
-         * issues when running the test in a virtualized environments, limit it
-         * to bare metal machines only, to minimize false-positives in CIs.
+         * This test uses real-time alarms and sleeps to test for CPU races explicitly. This is highly
+         * fragile if your system is under load. We already increased the BASE_TIME value to make the tests
+         * more robust, but that just makes the test take significantly longer. Given the recent issues when
+         * running the test in a virtualized environments, limit it to bare metal machines only, to minimize
+         * false-positives in CIs.
          */
-        v = detect_virtualization();
-        if (IN_SET(v, -EPERM, -EACCES))
+
+        Virtualization v = detect_virtualization();
+        if (v < 0 && ERRNO_IS_PRIVILEGE(v))
                 return log_tests_skipped("Cannot detect virtualization");
 
         if (v != VIRTUALIZATION_NONE)
                 return log_tests_skipped("This test requires a baremetal machine");
 
-        test_barrier_sync();
-        test_barrier_wait_next();
-        test_barrier_wait_next_twice();
-        test_barrier_wait_next_twice_sync();
-        test_barrier_wait_next_twice_local();
-        test_barrier_wait_next_twice_local_sync();
-        test_barrier_sync_next();
-        test_barrier_sync_next_local();
-        test_barrier_sync_next_local_abort();
-        test_barrier_wait_abortion();
-        test_barrier_wait_abortion_unmatched();
-        test_barrier_wait_abortion_local();
-        test_barrier_wait_abortion_local_unmatched();
-        test_barrier_exit();
-        test_barrier_no_exit();
-        test_barrier_pending_exit();
+        return EXIT_SUCCESS;
+ }
 
-        return 0;
-}
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-bitmap.c b/src/test/test-bitmap.c
index 4e7ca00..88582a4 100644
--- a/src/test/test-bitmap.c
+++ b/src/test/test-bitmap.c
@@ -46,7 +46,7 @@
         systemd_bitmap_unset(b, 32);
 
         BITMAP_FOREACH(n, NULL)
-                assert_not_reached("NULL bitmap");
+                assert_not_reached();
 
         assert_se(systemd_bitmap_set(b, 0) == 0);
         assert_se(systemd_bitmap_set(b, 1) == 0);
diff --git a/src/test/test-blockdev-util.c b/src/test/test-blockdev-util.c
index ab5169c..4ccb779 100644
--- a/src/test/test-blockdev-util.c
+++ b/src/test/test-blockdev-util.c
@@ -8,12 +8,12 @@
         int r;
 
         r = path_is_encrypted(p);
-        if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r)) /* This might fail, if btrfs is used and we run in a
-                           * container. In that case we cannot resolve the device node paths that
-                           * BTRFS_IOC_DEV_INFO returns, because the device nodes are unlikely to exist in
-                           * the container. But if we can't stat() them we cannot determine the dev_t of
-                           * them, and thus cannot figure out if they are enrypted. Hence let's just ignore
-                           * ENOENT here. Also skip the test if we lack privileges. */
+        if (r == -ENOENT || (r < 0 && ERRNO_IS_PRIVILEGE(r)))
+                /* This might fail, if btrfs is used and we run in a container. In that case we cannot
+                 * resolve the device node paths that BTRFS_IOC_DEV_INFO returns, because the device nodes
+                 * are unlikely to exist in the container. But if we can't stat() them we cannot determine
+                 * the dev_t of them, and thus cannot figure out if they are enrypted. Hence let's just
+                 * ignore ENOENT here. Also skip the test if we lack privileges. */
                 return;
         assert_se(r >= 0);
 
@@ -22,9 +22,9 @@
         assert_se(expect < 0 || ((r > 0) == (expect > 0)));
 }
 
-static void test_path_is_encrypted(void) {
-        int booted = sd_booted(); /* If this is run in build environments such as koji, /dev might be a
-                                   * reguar fs. Don't assume too much if not running under systemd. */
+TEST(path_is_encrypted) {
+        int booted = sd_booted(); /* If this is run in build environments such as koji, /dev/ might be a
+                                   * regular fs. Don't assume too much if not running under systemd. */
 
         log_info("/* %s (sd_booted=%d) */", __func__, booted);
 
@@ -36,8 +36,4 @@
         test_path_is_encrypted_one("/dev", booted > 0 ? false : -1);
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_INFO);
-
-        test_path_is_encrypted();
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-boot-timestamps.c b/src/test/test-boot-timestamps.c
index ae5b582..c3e4876 100644
--- a/src/test/test-boot-timestamps.c
+++ b/src/test/test-boot-timestamps.c
@@ -6,52 +6,49 @@
 #include "acpi-fpdt.h"
 #include "boot-timestamps.h"
 #include "efi-loader.h"
+#include "errno-util.h"
 #include "log.h"
 #include "tests.h"
-#include "util.h"
 
 static int test_acpi_fpdt(void) {
-        char ts_start[FORMAT_TIMESPAN_MAX], ts_exit[FORMAT_TIMESPAN_MAX], ts_span[FORMAT_TIMESPAN_MAX];
         usec_t loader_start, loader_exit;
         int r;
 
         r = acpi_get_boot_usec(&loader_start, &loader_exit);
         if (r < 0) {
-                bool ok = r == -ENOENT || r == -EACCES || r == -ENODATA;
+                bool ok = IN_SET(r, -ENOENT, -ENODATA, -ERANGE) || ERRNO_IS_PRIVILEGE(r);
 
                 log_full_errno(ok ? LOG_DEBUG : LOG_ERR, r, "Failed to read ACPI FPDT: %m");
                 return ok ? 0 : r;
         }
 
         log_info("ACPI FPDT: loader start=%s exit=%s duration=%s",
-                 format_timespan(ts_start, sizeof(ts_start), loader_start, USEC_PER_MSEC),
-                 format_timespan(ts_exit, sizeof(ts_exit), loader_exit, USEC_PER_MSEC),
-                 format_timespan(ts_span, sizeof(ts_span), loader_exit - loader_start, USEC_PER_MSEC));
+                 FORMAT_TIMESPAN(loader_start, USEC_PER_MSEC),
+                 FORMAT_TIMESPAN(loader_exit, USEC_PER_MSEC),
+                 FORMAT_TIMESPAN(loader_exit - loader_start, USEC_PER_MSEC));
         return 1;
 }
 
 static int test_efi_loader(void) {
-        char ts_start[FORMAT_TIMESPAN_MAX], ts_exit[FORMAT_TIMESPAN_MAX], ts_span[FORMAT_TIMESPAN_MAX];
         usec_t loader_start, loader_exit;
         int r;
 
         r = efi_loader_get_boot_usec(&loader_start, &loader_exit);
         if (r < 0) {
-                bool ok = r == -ENOENT || r == -EACCES || r == -EOPNOTSUPP;
+                bool ok = IN_SET(r, -ENOENT, -EOPNOTSUPP) || ERRNO_IS_PRIVILEGE(r);
 
                 log_full_errno(ok ? LOG_DEBUG : LOG_ERR, r, "Failed to read EFI loader data: %m");
                 return ok ? 0 : r;
         }
 
         log_info("EFI Loader: start=%s exit=%s duration=%s",
-                 format_timespan(ts_start, sizeof(ts_start), loader_start, USEC_PER_MSEC),
-                 format_timespan(ts_exit, sizeof(ts_exit), loader_exit, USEC_PER_MSEC),
-                 format_timespan(ts_span, sizeof(ts_span), loader_exit - loader_start, USEC_PER_MSEC));
+                 FORMAT_TIMESPAN(loader_start, USEC_PER_MSEC),
+                 FORMAT_TIMESPAN(loader_exit, USEC_PER_MSEC),
+                 FORMAT_TIMESPAN(loader_exit - loader_start, USEC_PER_MSEC));
         return 1;
 }
 
 static int test_boot_timestamps(void) {
-        char s[MAX(FORMAT_TIMESPAN_MAX, FORMAT_TIMESTAMP_MAX)];
         dual_timestamp fw, l, k;
         int r;
 
@@ -59,17 +56,17 @@
 
         r = boot_timestamps(NULL, &fw, &l);
         if (r < 0) {
-                bool ok = r == -ENOENT || r == -EACCES || r == -EOPNOTSUPP;
+                bool ok = IN_SET(r, -ENOENT, -EOPNOTSUPP) || ERRNO_IS_PRIVILEGE(r);
 
                 log_full_errno(ok ? LOG_DEBUG : LOG_ERR, r, "Failed to read variables: %m");
                 return ok ? 0 : r;
         }
 
-        log_info("Firmware began %s before kernel.", format_timespan(s, sizeof(s), fw.monotonic, 0));
-        log_info("Loader began %s before kernel.", format_timespan(s, sizeof(s), l.monotonic, 0));
-        log_info("Firmware began %s.", format_timestamp(s, sizeof(s), fw.realtime));
-        log_info("Loader began %s.", format_timestamp(s, sizeof(s), l.realtime));
-        log_info("Kernel began %s.", format_timestamp(s, sizeof(s), k.realtime));
+        log_info("Firmware began %s before kernel.", FORMAT_TIMESPAN(fw.monotonic, 0));
+        log_info("Loader began %s before kernel.", FORMAT_TIMESPAN(l.monotonic, 0));
+        log_info("Firmware began %s.", FORMAT_TIMESTAMP(fw.realtime));
+        log_info("Loader began %s.", FORMAT_TIMESTAMP(l.realtime));
+        log_info("Kernel began %s.", FORMAT_TIMESTAMP(k.realtime));
         return 1;
 }
 
@@ -79,11 +76,11 @@
         test_setup_logging(LOG_DEBUG);
 
         p = test_acpi_fpdt();
-        assert(p >= 0);
+        assert_se(p >= 0);
         q = test_efi_loader();
-        assert(q >= 0);
+        assert_se(q >= 0);
         r = test_boot_timestamps();
-        assert(r >= 0);
+        assert_se(r >= 0);
 
         if (p == 0 && q == 0 && r == 0)
                 return log_tests_skipped("access to firmware variables not possible");
diff --git a/src/test/test-bootspec.c b/src/test/test-bootspec.c
new file mode 100644
index 0000000..67fa8be
--- /dev/null
+++ b/src/test/test-bootspec.c
@@ -0,0 +1,152 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "bootspec.h"
+#include "fileio.h"
+#include "path-util.h"
+#include "rm-rf.h"
+#include "tests.h"
+#include "tmpfile-util.h"
+
+TEST_RET(bootspec_sort) {
+
+        static const struct {
+                const char *fname;
+                const char *contents;
+        } entries[] = {
+                {
+                        .fname = "a-10.conf",
+                        .contents =
+                        "title A\n"
+                        "version 10\n"
+                        "machine-id dd235d00696545768f6f693bfd23b15f\n",
+                },
+                {
+                        .fname = "a-5.conf",
+                        .contents =
+                        "title A\n"
+                        "version 5\n"
+                        "machine-id dd235d00696545768f6f693bfd23b15f\n",
+                },
+                {
+                        .fname = "b.conf",
+                        .contents =
+                        "title B\n"
+                        "version 3\n"
+                        "machine-id b75451ad92f94feeab50b0b442768dbd\n",
+                },
+                {
+                        .fname = "c.conf",
+                        .contents =
+                        "title C\n"
+                        "sort-key xxxx\n"
+                        "version 5\n"
+                        "machine-id 309de666fd5044268a9a26541ac93176\n",
+                },
+                {
+                        .fname = "cx.conf",
+                        .contents =
+                        "title C\n"
+                        "sort-key xxxx\n"
+                        "version 10\n"
+                        "machine-id 309de666fd5044268a9a26541ac93176\n",
+                },
+                {
+                        .fname = "d.conf",
+                        .contents =
+                        "title D\n"
+                        "sort-key kkkk\n"
+                        "version 100\n"
+                        "machine-id 81c6e3147cf544c19006af023e22b292\n",
+                },
+        };
+
+        _cleanup_(rm_rf_physical_and_freep) char *d = NULL;
+        _cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
+
+        assert_se(mkdtemp_malloc("/tmp/bootspec-testXXXXXX", &d) >= 0);
+
+        for (size_t i = 0; i < ELEMENTSOF(entries); i++) {
+                _cleanup_free_ char *j = NULL;
+
+                j = path_join(d, "/loader/entries/", entries[i].fname);
+                assert_se(j);
+
+                assert_se(write_string_file(j, entries[i].contents, WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+        }
+
+        assert_se(boot_config_load(&config, d, NULL) >= 0);
+
+        assert_se(config.n_entries == 6);
+
+        /* First, because has sort key, and its the lowest one */
+        assert_se(streq(config.entries[0].id, "d.conf"));
+
+        /* These two have a sort key, and newest must be first */
+        assert_se(streq(config.entries[1].id, "cx.conf"));
+        assert_se(streq(config.entries[2].id, "c.conf"));
+
+        /* The following ones have no sort key, hence order by version compared ids, lowest first */
+        assert_se(streq(config.entries[3].id, "b.conf"));
+        assert_se(streq(config.entries[4].id, "a-10.conf"));
+        assert_se(streq(config.entries[5].id, "a-5.conf"));
+
+        return 0;
+}
+
+static void test_extract_tries_one(const char *fname, int ret, const char *stripped, unsigned tries_left, unsigned tries_done) {
+        _cleanup_free_ char *p = NULL;
+        unsigned l, d;
+
+        assert_se(boot_filename_extract_tries(fname, &p, &l, &d) == ret);
+        if (ret < 0)
+                return;
+
+        assert_se(streq_ptr(p, stripped));
+        assert_se(l == tries_left);
+        assert_se(d == tries_done);
+}
+
+TEST_RET(bootspec_extract_tries) {
+        test_extract_tries_one("foo.conf", 0, "foo.conf", UINT_MAX, UINT_MAX);
+
+        test_extract_tries_one("foo+0.conf", 0, "foo.conf", 0, UINT_MAX);
+        test_extract_tries_one("foo+1.conf", 0, "foo.conf", 1, UINT_MAX);
+        test_extract_tries_one("foo+2.conf", 0, "foo.conf", 2, UINT_MAX);
+        test_extract_tries_one("foo+33.conf", 0, "foo.conf", 33, UINT_MAX);
+
+        assert_cc(INT_MAX == INT32_MAX);
+        test_extract_tries_one("foo+2147483647.conf", 0, "foo.conf", 2147483647, UINT_MAX);
+        test_extract_tries_one("foo+2147483648.conf", -ERANGE, NULL, UINT_MAX, UINT_MAX);
+
+        test_extract_tries_one("foo+33-0.conf", 0, "foo.conf", 33, 0);
+        test_extract_tries_one("foo+33-1.conf", 0, "foo.conf", 33, 1);
+        test_extract_tries_one("foo+33-107.conf", 0, "foo.conf", 33, 107);
+        test_extract_tries_one("foo+33-107.efi", 0, "foo.efi", 33, 107);
+        test_extract_tries_one("foo+33-2147483647.conf", 0, "foo.conf", 33, 2147483647);
+        test_extract_tries_one("foo+33-2147483648.conf", -ERANGE, NULL, UINT_MAX, UINT_MAX);
+
+        test_extract_tries_one("foo+007-000008.conf", 0, "foo.conf", 7, 8);
+
+        test_extract_tries_one("foo-1.conf", 0, "foo-1.conf", UINT_MAX, UINT_MAX);
+        test_extract_tries_one("foo-999.conf", 0, "foo-999.conf", UINT_MAX, UINT_MAX);
+        test_extract_tries_one("foo-.conf", 0, "foo-.conf", UINT_MAX, UINT_MAX);
+
+        test_extract_tries_one("foo+.conf", 0, "foo+.conf", UINT_MAX, UINT_MAX);
+        test_extract_tries_one("+.conf", 0, "+.conf", UINT_MAX, UINT_MAX);
+        test_extract_tries_one("-.conf", 0, "-.conf", UINT_MAX, UINT_MAX);
+        test_extract_tries_one("", 0, "", UINT_MAX, UINT_MAX);
+
+        test_extract_tries_one("+1.", 0, ".", 1, UINT_MAX);
+        test_extract_tries_one("+1-7.", 0, ".", 1, 7);
+
+        test_extract_tries_one("some+name+24324-22.efi", 0, "some+name.efi", 24324, 22);
+        test_extract_tries_one("sels+2-3+7-6.", 0, "sels+2-3.", 7, 6);
+        test_extract_tries_one("a+1-2..", 0, "a+1-2..", UINT_MAX, UINT_MAX);
+        test_extract_tries_one("ses.sgesge.+4-1.efi", 0, "ses.sgesge..efi", 4, 1);
+        test_extract_tries_one("abc+0x4.conf", 0, "abc+0x4.conf", UINT_MAX, UINT_MAX);
+        test_extract_tries_one("def+1-0x3.conf", 0, "def+1-0x3.conf", UINT_MAX, UINT_MAX);
+
+        return 0;
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-bpf-devices.c b/src/test/test-bpf-devices.c
index 2c5eb73..e175483 100644
--- a/src/test/test-bpf-devices.c
+++ b/src/test/test-bpf-devices.c
@@ -15,7 +15,7 @@
 #include "tests.h"
 
 static void test_policy_closed(const char *cgroup_path, BPFProgram **installed_prog) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
         unsigned wrong = 0;
         int r;
 
@@ -27,10 +27,9 @@
         r = bpf_devices_allow_list_static(prog, cgroup_path);
         assert_se(r >= 0);
 
-        r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_CLOSED, true, cgroup_path, installed_prog);
+        r = bpf_devices_apply_policy(&prog, CGROUP_DEVICE_POLICY_CLOSED, true, cgroup_path, installed_prog);
         assert_se(r >= 0);
 
-        const char *s;
         FOREACH_STRING(s, "/dev/null",
                           "/dev/zero",
                           "/dev/full",
@@ -53,7 +52,7 @@
 }
 
 static void test_policy_strict(const char *cgroup_path, BPFProgram **installed_prog) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
         unsigned wrong = 0;
         int r;
 
@@ -71,7 +70,7 @@
         r = bpf_devices_allow_list_device(prog, cgroup_path, "/dev/zero", "w");
         assert_se(r >= 0);
 
-        r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
+        r = bpf_devices_apply_policy(&prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
         assert_se(r >= 0);
 
         {
@@ -130,7 +129,7 @@
 }
 
 static void test_policy_allow_list_major(const char *pattern, const char *cgroup_path, BPFProgram **installed_prog) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
         unsigned wrong = 0;
         int r;
 
@@ -142,7 +141,7 @@
         r = bpf_devices_allow_list_major(prog, cgroup_path, pattern, 'c', "rw");
         assert_se(r >= 0);
 
-        r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
+        r = bpf_devices_apply_policy(&prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
         assert_se(r >= 0);
 
         /* /dev/null, /dev/full have major==1, /dev/tty has major==5 */
@@ -189,7 +188,7 @@
 }
 
 static void test_policy_allow_list_major_star(char type, const char *cgroup_path, BPFProgram **installed_prog) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
         unsigned wrong = 0;
         int r;
 
@@ -201,7 +200,7 @@
         r = bpf_devices_allow_list_major(prog, cgroup_path, "*", type, "rw");
         assert_se(r >= 0);
 
-        r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
+        r = bpf_devices_apply_policy(&prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
         assert_se(r >= 0);
 
         {
@@ -220,7 +219,7 @@
 }
 
 static void test_policy_empty(bool add_mismatched, const char *cgroup_path, BPFProgram **installed_prog) {
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
         unsigned wrong = 0;
         int r;
 
@@ -234,7 +233,7 @@
                 assert_se(r < 0);
         }
 
-        r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_STRICT, false, cgroup_path, installed_prog);
+        r = bpf_devices_apply_policy(&prog, CGROUP_DEVICE_POLICY_STRICT, false, cgroup_path, installed_prog);
         assert_se(r >= 0);
 
         {
@@ -282,7 +281,7 @@
         r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, cgroup, NULL, &controller_path);
         assert_se(r >= 0);
 
-        _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
 
         test_policy_closed(cgroup, &prog);
         test_policy_strict(cgroup, &prog);
@@ -296,7 +295,7 @@
         test_policy_empty(false, cgroup, &prog);
         test_policy_empty(true, cgroup, &prog);
 
-        assert_se(parent = dirname_malloc(cgroup));
+        assert_se(path_extract_directory(cgroup, &parent) >= 0);
 
         assert_se(cg_mask_supported(&supported) >= 0);
         r = cg_attach_everywhere(supported, parent, 0, NULL, NULL);
diff --git a/src/test/test-bpf-firewall.c b/src/test/test-bpf-firewall.c
index b29c0d7..d655058 100644
--- a/src/test/test-bpf-firewall.c
+++ b/src/test/test-bpf-firewall.c
@@ -6,6 +6,7 @@
 
 #include "bpf-firewall.h"
 #include "bpf-program.h"
+#include "in-addr-prefix-util.h"
 #include "load-fragment.h"
 #include "manager.h"
 #include "memory-util.h"
@@ -23,7 +24,7 @@
 
         _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
         CGroupContext *cc = NULL;
-        _cleanup_(bpf_program_unrefp) BPFProgram *p = NULL;
+        _cleanup_(bpf_program_freep) BPFProgram *p = NULL;
         _cleanup_(manager_freep) Manager *m = NULL;
         Unit *u;
         char log_buf[65535];
@@ -54,14 +55,11 @@
         assert_se(set_unit_path(unit_dir) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
-        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, &p);
-        assert(r == 0);
+        r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, "sd_trivial", &p);
+        assert_se(r == 0);
 
         r = bpf_program_add_instructions(p, exit_insn, ELEMENTSOF(exit_insn));
-        assert(r == 0);
-
-        if (getuid() != 0)
-                return log_tests_skipped("not running as root");
+        assert_se(r == 0);
 
         r = bpf_firewall_supported();
         if (r == BPF_FIREWALL_UNSUPPORTED)
@@ -75,7 +73,7 @@
                 log_notice("BPF firewalling (though without BPF_F_ALLOW_MULTI) supported. Good.");
 
         r = bpf_program_load_kernel(p, log_buf, ELEMENTSOF(log_buf));
-        assert(r >= 0);
+        assert_se(r >= 0);
 
         if (test_custom_filter) {
                 zero(attr);
@@ -92,12 +90,12 @@
                 }
         }
 
-        p = bpf_program_unref(p);
+        p = bpf_program_free(p);
 
         /* The simple tests succeeded. Now let's try full unit-based use-case. */
 
-        assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         assert_se(u = unit_new(m, sizeof(Service)));
         assert_se(unit_add_name(u, "foo.service") == 0);
@@ -106,21 +104,39 @@
 
         cc->ip_accounting = true;
 
-        assert_se(config_parse_ip_address_access(u->id, "filename", 1, "Service", 1, "IPAddressAllow", 0, "10.0.1.0/24", &cc->ip_address_allow, NULL) == 0);
-        assert_se(config_parse_ip_address_access(u->id, "filename", 1, "Service", 1, "IPAddressAllow", 0, "127.0.0.2", &cc->ip_address_allow, NULL) == 0);
-        assert_se(config_parse_ip_address_access(u->id, "filename", 1, "Service", 1, "IPAddressDeny", 0, "127.0.0.3", &cc->ip_address_deny, NULL) == 0);
-        assert_se(config_parse_ip_address_access(u->id, "filename", 1, "Service", 1, "IPAddressDeny", 0, "10.0.3.2/24", &cc->ip_address_deny, NULL) == 0);
-        assert_se(config_parse_ip_address_access(u->id, "filename", 1, "Service", 1, "IPAddressDeny", 0, "127.0.0.1/25", &cc->ip_address_deny, NULL) == 0);
-        assert_se(config_parse_ip_address_access(u->id, "filename", 1, "Service", 1, "IPAddressDeny", 0, "127.0.0.4", &cc->ip_address_deny, NULL) == 0);
+        assert_se(config_parse_in_addr_prefixes(u->id, "filename", 1, "Service", 1, "IPAddressAllow", 0, "10.0.1.0/24", &cc->ip_address_allow, NULL) == 0);
+        assert_se(config_parse_in_addr_prefixes(u->id, "filename", 1, "Service", 1, "IPAddressAllow", 0, "127.0.0.2", &cc->ip_address_allow, NULL) == 0);
+        assert_se(config_parse_in_addr_prefixes(u->id, "filename", 1, "Service", 1, "IPAddressDeny", 0, "127.0.0.3", &cc->ip_address_deny, NULL) == 0);
+        assert_se(config_parse_in_addr_prefixes(u->id, "filename", 1, "Service", 1, "IPAddressDeny", 0, "10.0.3.2/24", &cc->ip_address_deny, NULL) == 0);
+        assert_se(config_parse_in_addr_prefixes(u->id, "filename", 1, "Service", 1, "IPAddressDeny", 0, "127.0.0.1/25", &cc->ip_address_deny, NULL) == 0);
+        assert_se(config_parse_in_addr_prefixes(u->id, "filename", 1, "Service", 1, "IPAddressDeny", 0, "127.0.0.4", &cc->ip_address_deny, NULL) == 0);
 
-        assert(cc->ip_address_allow);
-        assert(cc->ip_address_allow->items_next);
-        assert(!cc->ip_address_allow->items_next->items_next);
+        assert_se(set_size(cc->ip_address_allow) == 2);
+        assert_se(set_size(cc->ip_address_deny) == 4);
 
-        /* The deny list is defined redundantly, let's ensure it got properly reduced */
-        assert(cc->ip_address_deny);
-        assert(cc->ip_address_deny->items_next);
-        assert(!cc->ip_address_deny->items_next->items_next);
+        /* The deny list is defined redundantly, let's ensure it will be properly reduced */
+        assert_se(in_addr_prefixes_reduce(cc->ip_address_allow) >= 0);
+        assert_se(in_addr_prefixes_reduce(cc->ip_address_deny) >= 0);
+
+        assert_se(set_size(cc->ip_address_allow) == 2);
+        assert_se(set_size(cc->ip_address_deny) == 2);
+
+        assert_se(set_contains(cc->ip_address_allow, &(struct in_addr_prefix) {
+                                .family = AF_INET,
+                                .address.in.s_addr = htobe32((UINT32_C(10) << 24) | (UINT32_C(1) << 8)),
+                                .prefixlen = 24 }));
+        assert_se(set_contains(cc->ip_address_allow, &(struct in_addr_prefix) {
+                                .family = AF_INET,
+                                .address.in.s_addr = htobe32(0x7f000002),
+                                .prefixlen = 32 }));
+        assert_se(set_contains(cc->ip_address_deny, &(struct in_addr_prefix) {
+                                .family = AF_INET,
+                                .address.in.s_addr = htobe32(0x7f000000),
+                                .prefixlen = 25 }));
+        assert_se(set_contains(cc->ip_address_deny, &(struct in_addr_prefix) {
+                                .family = AF_INET,
+                                .address.in.s_addr = htobe32((UINT32_C(10) << 24) | (UINT32_C(3) << 8)),
+                                .prefixlen = 24 }));
 
         assert_se(config_parse_exec(u->id, "filename", 1, "Service", 1, "ExecStart", SERVICE_EXEC_START, "/bin/ping -c 1 127.0.0.2 -W 5", SERVICE(u)->exec_command, u) == 0);
         assert_se(config_parse_exec(u->id, "filename", 1, "Service", 1, "ExecStart", SERVICE_EXEC_START, "/bin/ping -c 1 127.0.0.3 -W 5", SERVICE(u)->exec_command, u) == 0);
@@ -139,8 +155,8 @@
                 return log_tests_skipped("Kernel doesn't support the necessary bpf bits (masked out via seccomp?)");
         assert_se(r >= 0);
 
-        assert(u->ip_bpf_ingress);
-        assert(u->ip_bpf_egress);
+        assert_se(u->ip_bpf_ingress);
+        assert_se(u->ip_bpf_egress);
 
         r = bpf_program_load_kernel(u->ip_bpf_ingress, log_buf, ELEMENTSOF(log_buf));
 
@@ -149,7 +165,7 @@
         log_notice("%s", log_buf);
         log_notice("-------");
 
-        assert(r >= 0);
+        assert_se(r >= 0);
 
         r = bpf_program_load_kernel(u->ip_bpf_egress, log_buf, ELEMENTSOF(log_buf));
 
@@ -158,9 +174,9 @@
         log_notice("%s", log_buf);
         log_notice("-------");
 
-        assert(r >= 0);
+        assert_se(r >= 0);
 
-        assert_se(unit_start(u) >= 0);
+        assert_se(unit_start(u, NULL) >= 0);
 
         while (!IN_SET(SERVICE(u)->state, SERVICE_DEAD, SERVICE_FAILED))
                 assert_se(sd_event_run(m->event, UINT64_MAX) >= 0);
@@ -185,7 +201,7 @@
                 SERVICE(u)->type = SERVICE_ONESHOT;
                 u->load_state = UNIT_LOADED;
 
-                assert_se(unit_start(u) >= 0);
+                assert_se(unit_start(u, NULL) >= 0);
 
                 while (!IN_SET(SERVICE(u)->state, SERVICE_DEAD, SERVICE_FAILED))
                         assert_se(sd_event_run(m->event, UINT64_MAX) >= 0);
diff --git a/src/test/test-bpf-foreign-programs.c b/src/test/test-bpf-foreign-programs.c
index a6f8eb6..0445c39 100644
--- a/src/test/test-bpf-foreign-programs.c
+++ b/src/test/test-bpf-foreign-programs.c
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <fcntl.h>
 #include <linux/bpf_insn.h>
@@ -133,8 +133,6 @@
 }
 
 static char **unlink_paths_and_free(char **paths) {
-        char **i;
-
         STRV_FOREACH(i, paths)
                 (void) unlink(*i);
 
@@ -155,14 +153,14 @@
         assert_se(paths_ret);
 
         for (size_t i = 0; i < test_suite_size; i++) {
-                _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
+                _cleanup_(bpf_program_freep) BPFProgram *prog = NULL;
                 _cleanup_free_ char *str = NULL;
 
                 r = bpf_foreign_test_to_string(test_suite[i].attach_type, test_suite[i].bpffs_path, &str);
                 if (r < 0)
                         return log_error_errno(r, "Failed to convert program to string");
 
-                r = bpf_program_new(test_suite[i].prog_type, &prog);
+                r = bpf_program_new(test_suite[i].prog_type, "sd_trivial", &prog);
                 if (r < 0)
                         return log_error_errno(r, "Failed to create program '%s'", str);
 
@@ -248,7 +246,7 @@
         SERVICE(u)->type = SERVICE_ONESHOT;
         u->load_state = UNIT_LOADED;
 
-        r = unit_start(u);
+        r = unit_start(u, NULL);
         if (r < 0)
                 return log_error_errno(r, "Unit start failed %m");
 
@@ -289,11 +287,11 @@
         (void) setrlimit_closest(RLIMIT_MEMLOCK, &rl);
 
         if (!can_memlock())
-                return log_tests_skipped("Can't use mlock(), skipping.");
+                return log_tests_skipped("Can't use mlock()");
 
         r = cg_all_unified();
         if (r <= 0)
-                return log_tests_skipped("Unified hierarchy is required, skipping.");
+                return log_tests_skipped("Unified hierarchy is required");
 
         r = enter_cgroup_subroot(NULL);
         if (r == -ENOMEDIUM)
@@ -303,8 +301,8 @@
         assert_se(set_unit_path(unit_dir) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
-        assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         assert_se(test_bpf_cgroup_programs(m,
                                 "single_prog.service", single_prog, ELEMENTSOF(single_prog)) >= 0);
diff --git a/src/test/test-bpf-lsm.c b/src/test/test-bpf-lsm.c
new file mode 100644
index 0000000..e1df62f
--- /dev/null
+++ b/src/test/test-bpf-lsm.c
@@ -0,0 +1,102 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "bpf-lsm.h"
+#include "load-fragment.h"
+#include "manager.h"
+#include "process-util.h"
+#include "rlimit-util.h"
+#include "rm-rf.h"
+#include "service.h"
+#include "strv.h"
+#include "tests.h"
+#include "unit.h"
+#include "virt.h"
+
+static int test_restrict_filesystems(Manager *m, const char *unit_name, const char *file_path, char **allowed_filesystems) {
+        _cleanup_free_ char *exec_start = NULL;
+        _cleanup_(unit_freep) Unit *u = NULL;
+        ExecContext *ec = NULL;
+        int cld_code, r;
+
+        assert_se(u = unit_new(m, sizeof(Service)));
+        assert_se(unit_add_name(u, unit_name) == 0);
+        assert_se(ec = unit_get_exec_context(u));
+
+        STRV_FOREACH(allow_filesystem, allowed_filesystems) {
+                r = config_parse_restrict_filesystems(
+                                u->id, "filename", 1, "Service", 1, "RestrictFileSystems", 0,
+                                *allow_filesystem, ec, u);
+                if (r < 0)
+                        return log_unit_error_errno(u, r, "Failed to parse RestrictFileSystems: %m");
+        }
+
+        assert_se(exec_start = strjoin("cat ", file_path));
+        r = config_parse_exec(u->id, "filename", 1, "Service", 1, "ExecStart",
+                        SERVICE_EXEC_START, exec_start, SERVICE(u)->exec_command, u);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse ExecStart");
+
+        SERVICE(u)->type = SERVICE_ONESHOT;
+        u->load_state = UNIT_LOADED;
+
+        r = unit_start(u, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Unit start failed %m");
+
+        while (!IN_SET(SERVICE(u)->state, SERVICE_DEAD, SERVICE_FAILED)) {
+                r = sd_event_run(m->event, UINT64_MAX);
+                if (r < 0)
+                        return log_error_errno(errno, "Event run failed %m");
+        }
+
+        cld_code = SERVICE(u)->exec_command[SERVICE_EXEC_START]->exec_status.code;
+        if (cld_code != CLD_EXITED)
+                return log_error_errno(-SYNTHETIC_ERRNO(EBUSY), "ExecStart didn't exited, code='%s'", sigchld_code_to_string(cld_code));
+
+        if (SERVICE(u)->state != SERVICE_DEAD)
+                return log_error_errno(-SYNTHETIC_ERRNO(EBUSY), "Service is not dead");
+
+        return 0;
+}
+
+int main(int argc, char *argv[]) {
+        _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
+        _cleanup_(manager_freep) Manager *m = NULL;
+        _cleanup_free_ char *unit_dir = NULL;
+        struct rlimit rl;
+        int r;
+
+        test_setup_logging(LOG_DEBUG);
+
+        assert_se(getrlimit(RLIMIT_MEMLOCK, &rl) >= 0);
+        rl.rlim_cur = rl.rlim_max = MAX(rl.rlim_max, CAN_MEMLOCK_SIZE);
+        (void) setrlimit_closest(RLIMIT_MEMLOCK, &rl);
+
+        if (!can_memlock())
+                return log_tests_skipped("Can't use mlock()");
+
+        if (!lsm_bpf_supported(/* initialize = */ true))
+                return log_tests_skipped("LSM BPF hooks are not supported");
+
+        r = enter_cgroup_subroot(NULL);
+        if (r == -ENOMEDIUM)
+                return log_tests_skipped("cgroupfs not available");
+
+        assert_se(get_testdata_dir("units", &unit_dir) >= 0);
+        assert_se(set_unit_path(unit_dir) >= 0);
+        assert_se(runtime_dir = setup_fake_runtime_dir());
+
+        assert_se(manager_new(LOOKUP_SCOPE_SYSTEM, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+
+        /* We need to enable access to the filesystem where the binary is so we
+         * add @common-block */
+        assert_se(test_restrict_filesystems(m, "restrict_filesystems_test.service", "/sys/kernel/tracing/printk_formats", STRV_MAKE("@common-block")) < 0);
+        assert_se(test_restrict_filesystems(m, "restrict_filesystems_test.service", "/sys/kernel/tracing/printk_formats", STRV_MAKE("tracefs", "@common-block")) >= 0);
+        assert_se(test_restrict_filesystems(m, "restrict_filesystems_test.service", "/sys/kernel/tracing/printk_formats", STRV_MAKE("tracefs", "@common-block", "~tracefs")) < 0);
+        assert_se(test_restrict_filesystems(m, "restrict_filesystems_test.service", "/sys/kernel/debug/sleep_time", STRV_MAKE("@common-block")) < 0);
+        assert_se(test_restrict_filesystems(m, "restrict_filesystems_test.service", "/sys/kernel/debug/sleep_time", STRV_MAKE("debugfs", "@common-block")) >= 0);
+        assert_se(test_restrict_filesystems(m, "restrict_filesystems_test.service", "/sys/kernel/debug/sleep_time", STRV_MAKE("~debugfs")) < 0);
+
+        return 0;
+}
diff --git a/src/test/test-btrfs.c b/src/test/test-btrfs.c
index e840536..67acba2 100644
--- a/src/test/test-btrfs.c
+++ b/src/test/test-btrfs.c
@@ -8,7 +8,6 @@
 #include "format-util.h"
 #include "log.h"
 #include "string-util.h"
-#include "util.h"
 
 int main(int argc, char *argv[]) {
         BtrfsQuotaInfo quota;
@@ -18,14 +17,13 @@
         if (fd < 0)
                 log_error_errno(errno, "Failed to open root directory: %m");
         else {
-                char ts[FORMAT_TIMESTAMP_MAX], bs[FORMAT_BYTES_MAX];
                 BtrfsSubvolInfo info;
 
                 r = btrfs_subvol_get_info_fd(fd, 0, &info);
                 if (r < 0)
                         log_error_errno(r, "Failed to get subvolume info: %m");
                 else {
-                        log_info("otime: %s", format_timestamp(ts, sizeof(ts), info.otime));
+                        log_info("otime: %s", FORMAT_TIMESTAMP(info.otime));
                         log_info("read-only (search): %s", yes_no(info.read_only));
                 }
 
@@ -33,10 +31,10 @@
                 if (r < 0)
                         log_error_errno(r, "Failed to get quota info: %m");
                 else {
-                        log_info("referenced: %s", strna(format_bytes(bs, sizeof(bs), quota.referenced)));
-                        log_info("exclusive: %s", strna(format_bytes(bs, sizeof(bs), quota.exclusive)));
-                        log_info("referenced_max: %s", strna(format_bytes(bs, sizeof(bs), quota.referenced_max)));
-                        log_info("exclusive_max: %s", strna(format_bytes(bs, sizeof(bs), quota.exclusive_max)));
+                        log_info("referenced: %s", strna(FORMAT_BYTES(quota.referenced)));
+                        log_info("exclusive: %s", strna(FORMAT_BYTES(quota.exclusive)));
+                        log_info("referenced_max: %s", strna(FORMAT_BYTES(quota.referenced_max)));
+                        log_info("exclusive_max: %s", strna(FORMAT_BYTES(quota.exclusive_max)));
                 }
 
                 r = btrfs_subvol_get_read_only_fd(fd);
diff --git a/src/test/test-bus-util.c b/src/test/test-bus-util.c
index 0381ba1..2f52bca 100644
--- a/src/test/test-bus-util.c
+++ b/src/test/test-bus-util.c
@@ -14,15 +14,13 @@
         (*n_called) ++;
 }
 
-static void test_destroy_callback(void) {
+TEST(destroy_callback) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         sd_bus_slot *slot = NULL;
         sd_bus_destroy_t t;
 
         int r, n_called = 0;
 
-        log_info("/* %s */", __func__);
-
         r = bus_open_system_watch_bind_with_description(&bus, "test-bus");
         if (r < 0) {
                 log_error_errno(r, "Failed to connect to bus: %m");
@@ -30,7 +28,7 @@
         }
 
         r = sd_bus_request_name_async(bus, &slot, "org.freedesktop.systemd.test-bus-util", 0, callback, &n_called);
-        assert(r == 1);
+        assert_se(r == 1);
 
         assert_se(sd_bus_slot_get_destroy_callback(slot, NULL) == 0);
         assert_se(sd_bus_slot_get_destroy_callback(slot, &t) == 0);
@@ -41,15 +39,9 @@
         assert_se(t == destroy_callback);
 
         /* Force cleanup so we can look at n_called */
-        assert(n_called == 0);
+        assert_se(n_called == 0);
         sd_bus_slot_unref(slot);
-        assert(n_called == 1);
+        assert_se(n_called == 1);
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_destroy_callback();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-calendarspec.c b/src/test/test-calendarspec.c
index bc5e56a..564983b 100644
--- a/src/test/test-calendarspec.c
+++ b/src/test/test-calendarspec.c
@@ -5,24 +5,29 @@
 #include "env-util.h"
 #include "errno-util.h"
 #include "string-util.h"
+#include "tests.h"
 
 static void _test_one(int line, const char *input, const char *output) {
         CalendarSpec *c;
         _cleanup_free_ char *p = NULL, *q = NULL;
         usec_t u;
-        char buf[FORMAT_TIMESTAMP_MAX];
         int r;
 
-        assert_se(calendar_spec_from_string(input, &c) >= 0);
+        r = calendar_spec_from_string(input, &c);
+        if (r < 0)
+                log_error_errno(r, "Failed to parse \"%s\": %m", input);
+        assert_se(r >= 0);
 
         assert_se(calendar_spec_to_string(c, &p) >= 0);
-        log_info("line %d: \"%s\" → \"%s\"", line, input, p);
+        log_info("line %d: \"%s\" → \"%s\"%s%s", line, input, p,
+                 !streq(p, output) ? " expected:" : "",
+                 !streq(p, output) ? output : "");
 
         assert_se(streq(p, output));
 
         u = now(CLOCK_REALTIME);
         r = calendar_spec_next_usec(c, u, &u);
-        log_info("Next: %s", r < 0 ? strerror_safe(r) : format_timestamp(buf, sizeof buf, u));
+        log_info("Next: %s", r < 0 ? STRERROR(r) : FORMAT_TIMESTAMP(u));
         calendar_spec_free(c);
 
         assert_se(calendar_spec_from_string(p, &c) >= 0);
@@ -37,12 +42,11 @@
         CalendarSpec *c;
         usec_t u;
         char *old_tz;
-        char buf[FORMAT_TIMESTAMP_MAX];
         int r;
 
         old_tz = getenv("TZ");
         if (old_tz)
-                old_tz = strdupa(old_tz);
+                old_tz = strdupa_safe(old_tz);
 
         if (!isempty(new_tz))
                 new_tz = strjoina(":", new_tz);
@@ -56,11 +60,11 @@
 
         u = after;
         r = calendar_spec_next_usec(c, after, &u);
-        log_info("At: %s", r < 0 ? strerror_safe(r) : format_timestamp_style(buf, sizeof buf, u, TIMESTAMP_US));
+        log_info("At: %s", r < 0 ? STRERROR(r) : FORMAT_TIMESTAMP_STYLE(u, TIMESTAMP_US));
         if (expect != USEC_INFINITY)
                 assert_se(r >= 0 && u == expect);
         else
-                assert(r == -ENOENT);
+                assert_se(r == -ENOENT);
 
         calendar_spec_free(c);
 
@@ -69,7 +73,7 @@
 }
 #define test_next(input, new_tz, after, expect) _test_next(__LINE__, input,new_tz,after,expect)
 
-static void test_timestamp(void) {
+TEST(timestamp) {
         char buf[FORMAT_TIMESTAMP_MAX];
         _cleanup_free_ char *t = NULL;
         CalendarSpec *c;
@@ -90,21 +94,20 @@
         assert_se(y == x);
 }
 
-static void test_hourly_bug_4031(void) {
+TEST(hourly_bug_4031) {
         CalendarSpec *c;
         usec_t n, u, w;
-        char buf[FORMAT_TIMESTAMP_MAX], zaf[FORMAT_TIMESTAMP_MAX];
         int r;
 
         assert_se(calendar_spec_from_string("hourly", &c) >= 0);
         n = now(CLOCK_REALTIME);
         assert_se((r = calendar_spec_next_usec(c, n, &u)) >= 0);
 
-        log_info("Now: %s (%"PRIu64")", format_timestamp_style(buf, sizeof buf, n, TIMESTAMP_US), n);
-        log_info("Next hourly: %s (%"PRIu64")", r < 0 ? strerror_safe(r) : format_timestamp_style(buf, sizeof buf, u, TIMESTAMP_US), u);
+        log_info("Now: %s (%"PRIu64")", FORMAT_TIMESTAMP_STYLE(n, TIMESTAMP_US), n);
+        log_info("Next hourly: %s (%"PRIu64")", r < 0 ? STRERROR(r) : FORMAT_TIMESTAMP_STYLE(u, TIMESTAMP_US), u);
 
         assert_se((r = calendar_spec_next_usec(c, u, &w)) >= 0);
-        log_info("Next hourly: %s (%"PRIu64")", r < 0 ? strerror_safe(r) : format_timestamp_style(zaf, sizeof zaf, w, TIMESTAMP_US), w);
+        log_info("Next hourly: %s (%"PRIu64")", r < 0 ? STRERROR(r) : FORMAT_TIMESTAMP_STYLE(w, TIMESTAMP_US), w);
 
         assert_se(n < u);
         assert_se(u <= n + USEC_PER_HOUR);
@@ -114,9 +117,7 @@
         calendar_spec_free(c);
 }
 
-int main(int argc, char* argv[]) {
-        CalendarSpec *c;
-
+TEST(calendar_spec_one) {
         test_one("Sat,Thu,Mon-Wed,Sat-Sun", "Mon..Thu,Sat,Sun *-*-* 00:00:00");
         test_one("Sat,Thu,Mon..Wed,Sat..Sun", "Mon..Thu,Sat,Sun *-*-* 00:00:00");
         test_one("Mon,Sun 12-*-* 2,1:23", "Mon,Sun 2012-*-* 01,02:23:00");
@@ -161,6 +162,9 @@
         test_one("00:00:1.0..3.8", "*-*-* 00:00:01..03");
         test_one("00:00:01..03", "*-*-* 00:00:01..03");
         test_one("00:00:01/2,02..03", "*-*-* 00:00:01/2,02..03");
+        test_one("*:4,30:0..3", "*-*-* *:04,30:00..03");
+        test_one("*:4,30:0/1", "*-*-* *:04,30:*");
+        test_one("*:4,30:0/1,3,5", "*-*-* *:04,30:*");
         test_one("*-*~1 Utc", "*-*~01 00:00:00 UTC");
         test_one("*-*~05,3 ", "*-*~03,05 00:00:00");
         test_one("*-*~* 00:00:00", "*-*-* 00:00:00");
@@ -183,7 +187,9 @@
         test_one("@0 UTC", "1970-01-01 00:00:00 UTC");
         test_one("*:05..05", "*-*-* *:05:00");
         test_one("*:05..10/6", "*-*-* *:05:00");
+}
 
+TEST(calendar_spec_next) {
         test_next("2016-03-27 03:17:00", "", 12345, 1459048620000000);
         test_next("2016-03-27 03:17:00", "CET", 12345, 1459041420000000);
         test_next("2016-03-27 03:17:00", "EET", 12345, -1);
@@ -219,35 +225,39 @@
         /* Check that we don't start looping if mktime() moves us backwards */
         test_next("Sun *-*-* 01:00:00 Europe/Dublin", "", 1616412478000000, 1617494400000000);
         test_next("Sun *-*-* 01:00:00 Europe/Dublin", "IST", 1616412478000000, 1617494400000000);
-
-        assert_se(calendar_spec_from_string("test", &c) < 0);
-        assert_se(calendar_spec_from_string(" utc", &c) < 0);
-        assert_se(calendar_spec_from_string("    ", &c) < 0);
-        assert_se(calendar_spec_from_string("", &c) < 0);
-        assert_se(calendar_spec_from_string("7", &c) < 0);
-        assert_se(calendar_spec_from_string("121212:1:2", &c) < 0);
-        assert_se(calendar_spec_from_string("2000-03-05.23 00:00:00", &c) < 0);
-        assert_se(calendar_spec_from_string("2000-03-05 00:00.1:00", &c) < 0);
-        assert_se(calendar_spec_from_string("00:00:00/0.00000001", &c) < 0);
-        assert_se(calendar_spec_from_string("00:00:00.0..00.9", &c) < 0);
-        assert_se(calendar_spec_from_string("2016~11-22", &c) < 0);
-        assert_se(calendar_spec_from_string("*-*~5/5", &c) < 0);
-        assert_se(calendar_spec_from_string("Monday.. 12:00", &c) < 0);
-        assert_se(calendar_spec_from_string("Monday..", &c) < 0);
-        assert_se(calendar_spec_from_string("-00:+00/-5", &c) < 0);
-        assert_se(calendar_spec_from_string("00:+00/-5", &c) < 0);
-        assert_se(calendar_spec_from_string("2016- 11- 24 12: 30: 00", &c) < 0);
-        assert_se(calendar_spec_from_string("*~29", &c) < 0);
-        assert_se(calendar_spec_from_string("*~16..31", &c) < 0);
-        assert_se(calendar_spec_from_string("12..1/2-*", &c) < 0);
-        assert_se(calendar_spec_from_string("20/4:00", &c) < 0);
-        assert_se(calendar_spec_from_string("00:00/60", &c) < 0);
-        assert_se(calendar_spec_from_string("00:00:2300", &c) < 0);
-        assert_se(calendar_spec_from_string("00:00:18446744073709551615", &c) < 0);
-        assert_se(calendar_spec_from_string("@88588582097858858", &c) == -ERANGE);
-
-        test_timestamp();
-        test_hourly_bug_4031();
-
-        return 0;
 }
+
+TEST(calendar_spec_from_string) {
+        CalendarSpec *c;
+
+        assert_se(calendar_spec_from_string("test", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string(" utc", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("    ", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("7", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("121212:1:2", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("2000-03-05.23 00:00:00", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("2000-03-05 00:00.1:00", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("00:00:00/0.00000001", &c) == -ERANGE);
+        assert_se(calendar_spec_from_string("00:00:00.0..00.9", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("2016~11-22", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("*-*~5/5", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("Monday.. 12:00", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("Monday..", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("-00:+00/-5", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("00:+00/-5", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("2016- 11- 24 12: 30: 00", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("*~29", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("*~16..31", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("12..1/2-*", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("20/4:00", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("00:00/60", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("00:00:2300", &c) == -ERANGE);
+        assert_se(calendar_spec_from_string("00:00:18446744073709551615", &c) == -ERANGE);
+        assert_se(calendar_spec_from_string("@88588582097858858", &c) == -ERANGE);
+        assert_se(calendar_spec_from_string("*:4,30:*,5", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("*:4,30:5,*", &c) == -EINVAL);
+        assert_se(calendar_spec_from_string("*:4,30:*\n", &c) == -EINVAL);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-cap-list.c b/src/test/test-cap-list.c
index c4b40f3..68f0461 100644
--- a/src/test/test-cap-list.c
+++ b/src/test/test-cap-list.c
@@ -8,10 +8,10 @@
 #include "capability-util.h"
 #include "parse-util.h"
 #include "string-util.h"
-#include "util.h"
+#include "tests.h"
 
 /* verify the capability parser */
-static void test_cap_list(void) {
+TEST(cap_list) {
         assert_se(!capability_to_name(-1));
         assert_se(!capability_to_name(capability_list_length()));
 
@@ -70,7 +70,7 @@
         assert_se(c1 == c_masked);
 }
 
-static void test_capability_set_from_string(void) {
+TEST(capability_set_from_string) {
         uint64_t c;
 
         assert_se(capability_set_from_string(NULL, &c) == 0);
@@ -89,7 +89,7 @@
         assert_se(c == (UINT64_C(1) << 4) - 1);
 }
 
-static void test_capability_set_to_string(uint64_t invalid_cap_set) {
+static void test_capability_set_to_string_invalid(uint64_t invalid_cap_set) {
         uint64_t c;
 
         test_capability_set_one(invalid_cap_set, "");
@@ -114,15 +114,13 @@
                                     "cap_audit_control cap_mac_override cap_syslog"));
 }
 
-int main(int argc, char *argv[]) {
-        test_cap_list();
-        test_capability_set_from_string();
-        test_capability_set_to_string(0);
+TEST(capability_set_to_string) {
+        test_capability_set_to_string_invalid(0);
 
         /* once the kernel supports 63 caps, there are no 'invalid' numbers
          * for us to test with */
         if (cap_last_cap() < 63)
-                test_capability_set_to_string(all_capabilities() + 1);
-
-        return 0;
+                test_capability_set_to_string_invalid(all_capabilities() + 1);
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-capability.c b/src/test/test-capability.c
index 94f15bf..dbb258c 100644
--- a/src/test/test-capability.c
+++ b/src/test/test-capability.c
@@ -161,7 +161,7 @@
 static void test_drop_privileges(void) {
         fork_test(test_drop_privileges_fail);
 
-        if (have_effective_cap(CAP_NET_RAW) == 0) /* The remaining two tests only work if we have CAP_NET_RAW
+        if (have_effective_cap(CAP_NET_RAW) <= 0) /* The remaining two tests only work if we have CAP_NET_RAW
                                                    * in the first place. If we are run in some restricted
                                                    * container environment we might not. */
                 return;
@@ -171,15 +171,15 @@
 }
 
 static void test_have_effective_cap(void) {
-        assert_se(have_effective_cap(CAP_KILL));
-        assert_se(have_effective_cap(CAP_CHOWN));
+        assert_se(have_effective_cap(CAP_KILL) > 0);
+        assert_se(have_effective_cap(CAP_CHOWN) > 0);
 
         assert_se(drop_privileges(test_uid, test_gid, test_flags | (1ULL << CAP_KILL)) >= 0);
         assert_se(getuid() == test_uid);
         assert_se(getgid() == test_gid);
 
-        assert_se(have_effective_cap(CAP_KILL));
-        assert_se(!have_effective_cap(CAP_CHOWN));
+        assert_se(have_effective_cap(CAP_KILL) > 0);
+        assert_se(have_effective_cap(CAP_CHOWN) == 0);
 }
 
 static void test_update_inherited_set(void) {
@@ -194,7 +194,7 @@
 
         assert_se(!capability_update_inherited_set(caps, set));
         assert_se(!cap_get_flag(caps, CAP_CHOWN, CAP_INHERITABLE, &fv));
-        assert(fv == CAP_SET);
+        assert_se(fv == CAP_SET);
 
         cap_free(caps);
 }
diff --git a/src/test/test-cgroup-cpu.c b/src/test/test-cgroup-cpu.c
index be73be8..fcf84d3 100644
--- a/src/test/test-cgroup-cpu.c
+++ b/src/test/test-cgroup-cpu.c
@@ -2,10 +2,9 @@
 
 #include "cgroup.h"
 #include "log.h"
+#include "tests.h"
 
-static void test_cgroup_cpu_adjust_period(void) {
-        log_info("/* %s */", __func__);
-
+TEST(group_cpu_adjust_period) {
         /* Period 1ms, quota 40% -> Period 2.5ms */
         assert_se(2500 == cgroup_cpu_adjust_period(USEC_PER_MSEC, 400 * USEC_PER_MSEC, USEC_PER_MSEC, USEC_PER_SEC));
         /* Period 10ms, quota 10% -> keep. */
@@ -32,7 +31,4 @@
         assert_se(2500 == cgroup_cpu_adjust_period(0, 400 * USEC_PER_MSEC, USEC_PER_MSEC, USEC_PER_SEC));
 }
 
-int main(int argc, char *argv[]) {
-        test_cgroup_cpu_adjust_period();
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-cgroup-mask.c b/src/test/test-cgroup-mask.c
index 19e159b..57483f7 100644
--- a/src/test/test-cgroup-mask.c
+++ b/src/test/test-cgroup-mask.c
@@ -26,7 +26,7 @@
         log_info("Got mask: %s\n", g_store);
 }
 
-static int test_cgroup_mask(void) {
+TEST_RET(cgroup_mask, .sd_booted = true) {
         _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
         _cleanup_(manager_freep) Manager *m = NULL;
         Unit *son, *daughter, *parent, *root, *grandchild, *parent_deep, *nomem_parent, *nomem_leaf;
@@ -42,7 +42,7 @@
         assert_se(get_testdata_dir("units", &unit_dir) >= 0);
         assert_se(set_unit_path(unit_dir) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
         if (IN_SET(r, -EPERM, -EACCES)) {
                 log_error_errno(r, "manager_new: %m");
                 return log_tests_skipped("cannot create manager");
@@ -60,7 +60,7 @@
                 m->default_tasks_accounting = false;
         m->default_tasks_max = TASKS_MAX_UNSET;
 
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         /* Load units and verify hierarchy. */
         assert_se(manager_load_startable_unit_or_warn(m, "parent.slice", NULL, &parent) >= 0);
@@ -138,9 +138,9 @@
         assert_se(streq_ptr(b, t));
 }
 
-static void test_cg_mask_to_string(void) {
+TEST(cg_mask_to_string) {
         test_cg_mask_to_string_one(0, NULL);
-        test_cg_mask_to_string_one(_CGROUP_MASK_ALL, "cpu cpuacct cpuset io blkio memory devices pids bpf-firewall bpf-devices bpf-foreign bpf-socket-bind");
+        test_cg_mask_to_string_one(_CGROUP_MASK_ALL, "cpu cpuacct cpuset io blkio memory devices pids bpf-firewall bpf-devices bpf-foreign bpf-socket-bind bpf-restrict-network-interfaces");
         test_cg_mask_to_string_one(CGROUP_MASK_CPU, "cpu");
         test_cg_mask_to_string_one(CGROUP_MASK_CPUACCT, "cpuacct");
         test_cg_mask_to_string_one(CGROUP_MASK_CPUSET, "cpuset");
@@ -156,13 +156,4 @@
         test_cg_mask_to_string_one(CGROUP_MASK_IO|CGROUP_MASK_BLKIO, "io blkio");
 }
 
-int main(int argc, char* argv[]) {
-        int rc = EXIT_SUCCESS;
-
-        test_setup_logging(LOG_DEBUG);
-
-        test_cg_mask_to_string();
-        TEST_REQ_RUNNING_SYSTEMD(rc = test_cgroup_mask());
-
-        return rc;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-cgroup-setup.c b/src/test/test-cgroup-setup.c
index 37ef66b..c377ff0 100644
--- a/src/test/test-cgroup-setup.c
+++ b/src/test/test-cgroup-setup.c
@@ -11,7 +11,7 @@
 #include "tests.h"
 #include "version.h"
 
-static void test_is_wanted_print(bool header) {
+static void test_is_wanted_print_one(bool header) {
         _cleanup_free_ char *cmdline = NULL;
 
         log_info("-- %s --", __func__);
@@ -28,46 +28,47 @@
         log_info(" ");
 }
 
-static void test_is_wanted(void) {
+TEST(is_wanted_print) {
+        test_is_wanted_print_one(true);
+        test_is_wanted_print_one(false); /* run twice to test caching */
+}
+
+TEST(is_wanted) {
         assert_se(setenv("SYSTEMD_PROC_CMDLINE",
                          "systemd.unified_cgroup_hierarchy", 1) >= 0);
-        test_is_wanted_print(false);
+        test_is_wanted_print_one(false);
 
         assert_se(setenv("SYSTEMD_PROC_CMDLINE",
                          "systemd.unified_cgroup_hierarchy=0", 1) >= 0);
-        test_is_wanted_print(false);
+        test_is_wanted_print_one(false);
 
         assert_se(setenv("SYSTEMD_PROC_CMDLINE",
                          "systemd.unified_cgroup_hierarchy=0 "
                          "systemd.legacy_systemd_cgroup_controller", 1) >= 0);
-        test_is_wanted_print(false);
+        test_is_wanted_print_one(false);
 
         assert_se(setenv("SYSTEMD_PROC_CMDLINE",
                          "systemd.unified_cgroup_hierarchy=0 "
                          "systemd.legacy_systemd_cgroup_controller=0", 1) >= 0);
-        test_is_wanted_print(false);
+        test_is_wanted_print_one(false);
 
         /* cgroup_no_v1=all implies unified cgroup hierarchy, unless otherwise
          * explicitly specified. */
         assert_se(setenv("SYSTEMD_PROC_CMDLINE",
                          "cgroup_no_v1=all", 1) >= 0);
-        test_is_wanted_print(false);
+        test_is_wanted_print_one(false);
 
         assert_se(setenv("SYSTEMD_PROC_CMDLINE",
                          "cgroup_no_v1=all "
                          "systemd.unified_cgroup_hierarchy=0", 1) >= 0);
-        test_is_wanted_print(false);
+        test_is_wanted_print_one(false);
 }
 
-int main(void) {
-        test_setup_logging(LOG_DEBUG);
-
+static int intro(void) {
         if (access("/proc/cmdline", R_OK) < 0 && ERRNO_IS_PRIVILEGE(errno))
                 return log_tests_skipped("can't read /proc/cmdline");
 
-        test_is_wanted_print(true);
-        test_is_wanted_print(false); /* run twice to test caching */
-        test_is_wanted();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/test/test-cgroup-unit-default.c b/src/test/test-cgroup-unit-default.c
index 225d138..94201a3 100644
--- a/src/test/test-cgroup-unit-default.c
+++ b/src/test/test-cgroup-unit-default.c
@@ -8,7 +8,7 @@
 #include "tests.h"
 #include "unit.h"
 
-static int test_default_memory_low(void) {
+TEST_RET(default_memory_low, .sd_booted = true) {
         _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
         _cleanup_(manager_freep) Manager *m = NULL;
         Unit *root, *dml,
@@ -26,14 +26,14 @@
         assert_se(get_testdata_dir("units", &unit_dir) >= 0);
         assert_se(set_unit_path(unit_dir) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
         if (IN_SET(r, -EPERM, -EACCES)) {
                 log_error_errno(r, "manager_new: %m");
                 return log_tests_skipped("cannot create manager");
         }
 
         assert_se(r >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         /* dml.slice has DefaultMemoryLow=50. Beyond that, individual subhierarchies look like this:
          *
@@ -135,12 +135,4 @@
         return 0;
 }
 
-int main(int argc, char* argv[]) {
-        int rc = EXIT_SUCCESS;
-
-        test_setup_logging(LOG_DEBUG);
-
-        TEST_REQ_RUNNING_SYSTEMD(rc = test_default_memory_low());
-
-        return rc;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-cgroup-util.c b/src/test/test-cgroup-util.c
index c2adfa0..cdf9119 100644
--- a/src/test/test-cgroup-util.c
+++ b/src/test/test-cgroup-util.c
@@ -15,7 +15,6 @@
 #include "strv.h"
 #include "tests.h"
 #include "user-util.h"
-#include "util.h"
 #include "version.h"
 
 static void check_p_d_u(const char *path, int code, const char *result) {
@@ -28,7 +27,7 @@
         assert_se(streq_ptr(unit, result));
 }
 
-static void test_path_decode_unit(void) {
+TEST(path_decode_unit) {
         check_p_d_u("getty@tty2.service", 0, "getty@tty2.service");
         check_p_d_u("getty@tty2.service/", 0, "getty@tty2.service");
         check_p_d_u("getty@tty2.service/xxx", 0, "getty@tty2.service");
@@ -50,7 +49,7 @@
         assert_se(streq_ptr(unit, result));
 }
 
-static void test_path_get_unit(void) {
+TEST(path_get_unit) {
         check_p_g_u("/system.slice/foobar.service/sdfdsaf", 0, "foobar.service");
         check_p_g_u("/system.slice/getty@tty5.service", 0, "getty@tty5.service");
         check_p_g_u("/system.slice/getty@tty5.service/aaa/bbb", 0, "getty@tty5.service");
@@ -64,6 +63,33 @@
         check_p_g_u("/user.slice/user-1000.slice/user@.service/server.service", -ENXIO, NULL);
 }
 
+static void check_p_g_u_p(const char *path, int code, const char *result) {
+        _cleanup_free_ char *unit_path = NULL;
+        int r;
+
+        r = cg_path_get_unit_path(path, &unit_path);
+        printf("%s: %s → %s %d expected %s %d\n", __func__, path, unit_path, r, strnull(result), code);
+        assert_se(r == code);
+        assert_se(streq_ptr(unit_path, result));
+}
+
+TEST(path_get_unit_path) {
+        check_p_g_u_p("/system.slice/foobar.service/sdfdsaf", 0, "/system.slice/foobar.service");
+        check_p_g_u_p("/system.slice/getty@tty5.service", 0, "/system.slice/getty@tty5.service");
+        check_p_g_u_p("/system.slice/getty@tty5.service/aaa/bbb", 0, "/system.slice/getty@tty5.service");
+        check_p_g_u_p("/system.slice/getty@tty5.service/", 0, "/system.slice/getty@tty5.service");
+        check_p_g_u_p("/system.slice/getty@tty6.service/tty5", 0, "/system.slice/getty@tty6.service");
+        check_p_g_u_p("sadfdsafsda", -ENXIO, NULL);
+        check_p_g_u_p("/system.slice/getty####@tty6.service/xxx", -ENXIO, NULL);
+        check_p_g_u_p("/system.slice/system-waldo.slice/foobar.service/sdfdsaf", 0, "/system.slice/system-waldo.slice/foobar.service");
+        check_p_g_u_p("/system.slice/system-waldo.slice/_cpu.service/sdfdsaf", 0, "/system.slice/system-waldo.slice/_cpu.service");
+        check_p_g_u_p("/system.slice/system-waldo.slice/_cpu.service", 0, "/system.slice/system-waldo.slice/_cpu.service");
+        check_p_g_u_p("/user.slice/user-1000.slice/user@1000.service/server.service", 0, "/user.slice/user-1000.slice/user@1000.service");
+        check_p_g_u_p("/user.slice/user-1000.slice/user@.service/server.service", -ENXIO, NULL);
+        check_p_g_u_p("/user.slice/_user-1000.slice/user@1000.service/foobar.slice/foobar@pie.service", 0, "/user.slice/_user-1000.slice/user@1000.service");
+        check_p_g_u_p("/_session-2.scope/_foobar@pie.service/pa/po", 0, "/_session-2.scope");
+}
+
 static void check_p_g_u_u(const char *path, int code, const char *result) {
         _cleanup_free_ char *unit = NULL;
         int r;
@@ -74,7 +100,7 @@
         assert_se(streq_ptr(unit, result));
 }
 
-static void test_path_get_user_unit(void) {
+TEST(path_get_user_unit) {
         check_p_g_u_u("/user.slice/user-1000.slice/session-2.scope/foobar.service", 0, "foobar.service");
         check_p_g_u_u("/user.slice/user-1000.slice/session-2.scope/waldo.slice/foobar.service", 0, "foobar.service");
         check_p_g_u_u("/user.slice/user-1002.slice/session-2.scope/foobar.service/waldo", 0, "foobar.service");
@@ -97,7 +123,7 @@
         assert_se(streq_ptr(s, result));
 }
 
-static void test_path_get_session(void) {
+TEST(path_get_session) {
         check_p_g_s("/user.slice/user-1000.slice/session-2.scope/foobar.service", 0, "2");
         check_p_g_s("/session-3.scope", 0, "3");
         check_p_g_s("/session-.scope", -ENXIO, NULL);
@@ -111,7 +137,7 @@
         assert_se(uid == result);
 }
 
-static void test_path_get_owner_uid(void) {
+TEST(path_get_owner_uid) {
         check_p_g_o_u("/user.slice/user-1000.slice/session-2.scope/foobar.service", 0, 1000);
         check_p_g_o_u("/user.slice/user-1006.slice", 0, 1006);
         check_p_g_o_u("", -ENXIO, 0);
@@ -124,7 +150,7 @@
         assert_se(streq_ptr(s, result));
 }
 
-static void test_path_get_slice(void) {
+TEST(path_get_slice) {
         check_p_g_slice("/user.slice", 0, "user.slice");
         check_p_g_slice("/foobar", 0, SPECIAL_ROOT_SLICE);
         check_p_g_slice("/user.slice/user-waldo.slice", 0, "user-waldo.slice");
@@ -141,7 +167,7 @@
         assert_se(streq_ptr(s, result));
 }
 
-static void test_path_get_user_slice(void) {
+TEST(path_get_user_slice) {
         check_p_g_u_slice("/user.slice", -ENXIO, NULL);
         check_p_g_u_slice("/foobar", -ENXIO, NULL);
         check_p_g_u_slice("/user.slice/user-waldo.slice", -ENXIO, NULL);
@@ -158,16 +184,15 @@
         check_p_g_u_slice("/foo.slice//foo-bar.slice/user@1000.service/piep.slice//piep-pap.slice//foo.service", 0, "piep-pap.slice");
 }
 
-static void test_get_paths(void) {
+TEST(get_paths, .sd_booted = true) {
         _cleanup_free_ char *a = NULL;
 
         assert_se(cg_get_root_path(&a) >= 0);
         log_info("Root = %s", a);
 }
 
-static void test_proc(void) {
+TEST(proc) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r;
 
         d = opendir("/proc");
@@ -220,7 +245,7 @@
         assert_se(streq(cg_unescape(b), s));
 }
 
-static void test_escape(void) {
+TEST(escape, .sd_booted = true) {
         test_escape_one("foobar", "foobar");
         test_escape_one(".foobar", "_.foobar");
         test_escape_one("foobar.service", "foobar.service");
@@ -234,7 +259,7 @@
         test_escape_one(".", "_.");
 }
 
-static void test_controller_is_valid(void) {
+TEST(controller_is_valid) {
         assert_se(cg_controller_is_valid("foobar"));
         assert_se(cg_controller_is_valid("foo_bar"));
         assert_se(cg_controller_is_valid("name=foo"));
@@ -260,7 +285,7 @@
         assert_se(streq_ptr(ret, path));
 }
 
-static void test_slice_to_path(void) {
+TEST(slice_to_path) {
         test_slice_to_path_one("foobar.slice", "foobar.slice", 0);
         test_slice_to_path_one("foobar-waldo.slice", "foobar.slice/foobar-waldo.slice", 0);
         test_slice_to_path_one("foobar-waldo.service", NULL, -EINVAL);
@@ -292,16 +317,14 @@
         assert_se(streq(s, shifted));
 }
 
-static void test_shift_path(void) {
-
+TEST(shift_path) {
         test_shift_path_one("/foobar/waldo", "/", "/foobar/waldo");
         test_shift_path_one("/foobar/waldo", "", "/foobar/waldo");
         test_shift_path_one("/foobar/waldo", "/foobar", "/waldo");
         test_shift_path_one("/foobar/waldo", "/hogehoge", "/foobar/waldo");
 }
 
-static void test_mask_supported(void) {
-
+TEST(mask_supported, .sd_booted = true) {
         CGroupMask m;
         CGroupController c;
 
@@ -311,7 +334,7 @@
                 printf("'%s' is supported: %s\n", cgroup_controller_to_string(c), yes_no(m & CGROUP_CONTROLLER_TO_MASK(c)));
 }
 
-static void test_is_cgroup_fs(void) {
+TEST(is_cgroup_fs, .sd_booted = true) {
         struct statfs sfs;
         assert_se(statfs("/sys/fs/cgroup", &sfs) == 0);
         if (is_temporary_fs(&sfs))
@@ -319,7 +342,7 @@
         assert_se(is_cgroup_fs(&sfs));
 }
 
-static void test_fd_is_cgroup_fs(void) {
+TEST(fd_is_cgroup_fs, .sd_booted = true) {
         int fd;
 
         fd = open("/sys/fs/cgroup", O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW);
@@ -333,7 +356,7 @@
         fd = safe_close(fd);
 }
 
-static void test_cg_tests(void) {
+TEST(cg_tests) {
         int all, hybrid, systemd, r;
 
         r = cg_unified();
@@ -364,7 +387,7 @@
                 assert_se(!systemd);
 }
 
-static void test_cg_get_keyed_attribute(void) {
+TEST(cg_get_keyed_attribute) {
         _cleanup_free_ char *val = NULL;
         char *vals3[3] = {}, *vals3a[3] = {};
         int i, r;
@@ -395,12 +418,12 @@
 
         assert_se(cg_get_keyed_attribute("cpu", "/init.scope", "cpu.stat", STRV_MAKE("usage_usec", "no_such_attr"), vals3) == -ENXIO);
         assert_se(cg_get_keyed_attribute_graceful("cpu", "/init.scope", "cpu.stat", STRV_MAKE("usage_usec", "no_such_attr"), vals3) == 1);
-        assert(vals3[0] && !vals3[1]);
+        assert_se(vals3[0] && !vals3[1]);
         free(vals3[0]);
 
         assert_se(cg_get_keyed_attribute("cpu", "/init.scope", "cpu.stat", STRV_MAKE("usage_usec", "usage_usec"), vals3) == -ENXIO);
         assert_se(cg_get_keyed_attribute_graceful("cpu", "/init.scope", "cpu.stat", STRV_MAKE("usage_usec", "usage_usec"), vals3) == 1);
-        assert(vals3[0] && !vals3[1]);
+        assert_se(vals3[0] && !vals3[1]);
         free(vals3[0]);
 
         assert_se(cg_get_keyed_attribute("cpu", "/init.scope", "cpu.stat",
@@ -429,27 +452,13 @@
         }
 }
 
-int main(void) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_path_decode_unit();
-        test_path_get_unit();
-        test_path_get_user_unit();
-        test_path_get_session();
-        test_path_get_owner_uid();
-        test_path_get_slice();
-        test_path_get_user_slice();
-        TEST_REQ_RUNNING_SYSTEMD(test_get_paths());
-        test_proc();
-        TEST_REQ_RUNNING_SYSTEMD(test_escape());
-        test_controller_is_valid();
-        test_slice_to_path();
-        test_shift_path();
-        TEST_REQ_RUNNING_SYSTEMD(test_mask_supported());
-        TEST_REQ_RUNNING_SYSTEMD(test_is_cgroup_fs());
-        TEST_REQ_RUNNING_SYSTEMD(test_fd_is_cgroup_fs());
-        test_cg_tests();
-        test_cg_get_keyed_attribute();
-
-        return 0;
+TEST(bfq_weight_conversion) {
+        assert_se(BFQ_WEIGHT(1) == 1);
+        assert_se(BFQ_WEIGHT(50) == 50);
+        assert_se(BFQ_WEIGHT(100) == 100);
+        assert_se(BFQ_WEIGHT(500) == 136);
+        assert_se(BFQ_WEIGHT(5000) == 545);
+        assert_se(BFQ_WEIGHT(10000) == 1000);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-cgroup.c b/src/test/test-cgroup.c
index 3025a9a..7341e5b 100644
--- a/src/test/test-cgroup.c
+++ b/src/test/test-cgroup.c
@@ -10,11 +10,9 @@
 #include "string-util.h"
 #include "tests.h"
 
-static void test_cg_split_spec(void) {
+TEST(cg_split_spec) {
         char *c, *p;
 
-        log_info("/* %s */", __func__);
-
         assert_se(cg_split_spec("foobar:/", &c, &p) == 0);
         assert_se(streq(c, "foobar"));
         assert_se(streq(p, "/"));
@@ -42,8 +40,7 @@
         c = mfree(c);
 }
 
-static void test_cg_create(void) {
-        log_info("/* %s */", __func__);
+TEST(cg_create) {
         int r;
 
         r = cg_unified_cached(false);
@@ -128,11 +125,4 @@
         assert_se(cg_rmdir(SYSTEMD_CGROUP_CONTROLLER, test_a) == 0);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_cg_split_spec();
-        test_cg_create();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-chase-symlinks.c b/src/test/test-chase-symlinks.c
index 892f8a0..d94173f 100644
--- a/src/test/test-chase-symlinks.c
+++ b/src/test/test-chase-symlinks.c
@@ -1,8 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #include <getopt.h>
 
+#include "chase-symlinks.h"
 #include "fd-util.h"
-#include "fs-util.h"
 #include "log.h"
 #include "main-func.h"
 
@@ -34,8 +34,8 @@
 
         int c;
 
-        assert(argc >= 0);
-        assert(argv);
+        assert_se(argc >= 0);
+        assert_se(argv);
 
         while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0)
                 switch (c) {
@@ -72,7 +72,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind == argc)
@@ -92,7 +92,7 @@
 
         for (int i = optind; i < argc; i++) {
                 _cleanup_free_ char *p = NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 printf("%s ", argv[i]);
                 fflush(stdout);
@@ -103,9 +103,9 @@
                 else {
                         log_info("→ %s", p);
                         if (arg_open)
-                                assert(fd >= 0);
+                                assert_se(fd >= 0);
                         else
-                                assert(fd == -1);
+                                assert_se(fd == -EBADF);
                 }
         }
 
diff --git a/src/test/test-chown-rec.c b/src/test/test-chown-rec.c
index 66c6fd9..801b49f 100644
--- a/src/test/test-chown-rec.c
+++ b/src/test/test-chown-rec.c
@@ -32,15 +32,13 @@
 static bool has_xattr(const char *p) {
         char buffer[sizeof(acl) * 4];
 
-        if (lgetxattr(p, "system.posix_acl_access", buffer, sizeof(buffer)) < 0) {
-                if (IN_SET(errno, EOPNOTSUPP, ENOTTY, ENODATA, ENOSYS))
-                        return false;
-        }
+        if (lgetxattr(p, "system.posix_acl_access", buffer, sizeof(buffer)) < 0)
+                return !ERRNO_IS_XATTR_ABSENT(errno);
 
         return true;
 }
 
-static void test_chown_recursive(void) {
+TEST(chown_recursive) {
         _cleanup_(rm_rf_physical_and_freep) char *t = NULL;
         struct stat st;
         const char *p;
@@ -149,13 +147,11 @@
         assert_se(!has_xattr(p));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
+static int intro(void) {
         if (geteuid() != 0)
                 return log_tests_skipped("not running as root");
 
-        test_chown_recursive();
-
         return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/test/test-clock.c b/src/test/test-clock.c
index 714935c..123831a 100644
--- a/src/test/test-clock.c
+++ b/src/test/test-clock.c
@@ -12,9 +12,10 @@
 #include "fs-util.h"
 #include "log.h"
 #include "macro.h"
+#include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_clock_is_localtime(void) {
+TEST(clock_is_localtime) {
         _cleanup_(unlink_tempfilep) char adjtime[] = "/tmp/test-adjtime.XXXXXX";
         _cleanup_fclose_ FILE* f = NULL;
 
@@ -56,7 +57,7 @@
 }
 
 /* Test with the real /etc/adjtime */
-static void test_clock_is_localtime_system(void) {
+TEST(clock_is_localtime_system) {
         int r;
         r = clock_is_localtime(NULL);
 
@@ -70,9 +71,4 @@
                 assert_se(r == 0 || ERRNO_IS_PRIVILEGE(r));
 }
 
-int main(int argc, char *argv[]) {
-        test_clock_is_localtime();
-        test_clock_is_localtime_system();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-compress-benchmark.c b/src/test/test-compress-benchmark.c
new file mode 100644
index 0000000..da0f5e1
--- /dev/null
+++ b/src/test/test-compress-benchmark.c
@@ -0,0 +1,176 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "compress.h"
+#include "env-util.h"
+#include "macro.h"
+#include "memory-util.h"
+#include "nulstr-util.h"
+#include "parse-util.h"
+#include "process-util.h"
+#include "random-util.h"
+#include "string-util.h"
+#include "tests.h"
+
+typedef int (compress_t)(const void *src, uint64_t src_size, void *dst,
+                         size_t dst_alloc_size, size_t *dst_size);
+typedef int (decompress_t)(const void *src, uint64_t src_size,
+                           void **dst, size_t* dst_size, size_t dst_max);
+
+#if HAVE_COMPRESSION
+
+static usec_t arg_duration;
+static size_t arg_start;
+
+#define MAX_SIZE (1024*1024LU)
+#define PRIME 1048571  /* A prime close enough to one megabyte that mod 4 == 3 */
+
+static size_t _permute(size_t x) {
+        size_t residue;
+
+        if (x >= PRIME)
+                return x;
+
+        residue = x*x % PRIME;
+        if (x <= PRIME / 2)
+                return residue;
+        else
+                return PRIME - residue;
+}
+
+static size_t permute(size_t x) {
+        return _permute((_permute(x) + arg_start) % MAX_SIZE ^ 0xFF345);
+}
+
+static char* make_buf(size_t count, const char *type) {
+        char *buf;
+        size_t i;
+
+        buf = malloc(count);
+        assert_se(buf);
+
+        if (streq(type, "zeros"))
+                memzero(buf, count);
+        else if (streq(type, "simple"))
+                for (i = 0; i < count; i++)
+                        buf[i] = 'a' + i % ('z' - 'a' + 1);
+        else if (streq(type, "random")) {
+                size_t step = count / 10;
+
+                random_bytes(buf, step);
+                memzero(buf + 1*step, step);
+                random_bytes(buf + 2*step, step);
+                memzero(buf + 3*step, step);
+                random_bytes(buf + 4*step, step);
+                memzero(buf + 5*step, step);
+                random_bytes(buf + 6*step, step);
+                memzero(buf + 7*step, step);
+                random_bytes(buf + 8*step, step);
+                memzero(buf + 9*step, step);
+        } else
+                assert_not_reached();
+
+        return buf;
+}
+
+static void test_compress_decompress(const char* label, const char* type,
+                                     compress_t compress, decompress_t decompress) {
+        usec_t n, n2 = 0;
+        float dt;
+
+        _cleanup_free_ char *text, *buf;
+        _cleanup_free_ void *buf2 = NULL;
+        size_t skipped = 0, compressed = 0, total = 0;
+
+        text = make_buf(MAX_SIZE, type);
+        buf = calloc(MAX_SIZE + 1, 1);
+        assert_se(text && buf);
+
+        n = now(CLOCK_MONOTONIC);
+
+        for (size_t i = 0; i <= MAX_SIZE; i++) {
+                size_t j = 0, k = 0, size;
+                int r;
+
+                size = permute(i);
+                if (size == 0)
+                        continue;
+
+                log_debug("%s %zu %zu", type, i, size);
+
+                memzero(buf, MIN(size + 1000, MAX_SIZE));
+
+                r = compress(text, size, buf, size, &j);
+                /* assume compression must be successful except for small or random inputs */
+                assert_se(r > 0 || (size < 2048 && r == -ENOBUFS) || streq(type, "random"));
+
+                /* check for overwrites */
+                assert_se(buf[size] == 0);
+                if (r < 0) {
+                        skipped += size;
+                        continue;
+                }
+
+                assert_se(j > 0);
+                if (j >= size)
+                        log_error("%s \"compressed\" %zu -> %zu", label, size, j);
+
+                r = decompress(buf, j, &buf2, &k, 0);
+                assert_se(r == 0);
+                assert_se(k == size);
+
+                assert_se(memcmp(text, buf2, size) == 0);
+
+                total += size;
+                compressed += j;
+
+                n2 = now(CLOCK_MONOTONIC);
+                if (n2 - n > arg_duration)
+                        break;
+        }
+
+        dt = (n2-n) / 1e6;
+
+        log_info("%s/%s: compressed & decompressed %zu bytes in %.2fs (%.2fMiB/s), "
+                 "mean compression %.2f%%, skipped %zu bytes",
+                 label, type, total, dt,
+                 total / 1024. / 1024 / dt,
+                 100 - compressed * 100. / total,
+                 skipped);
+}
+#endif
+
+int main(int argc, char *argv[]) {
+#if HAVE_COMPRESSION
+        test_setup_logging(LOG_INFO);
+
+        if (argc >= 2) {
+                unsigned x;
+
+                assert_se(safe_atou(argv[1], &x) >= 0);
+                arg_duration = x * USEC_PER_SEC;
+        } else
+                arg_duration = slow_tests_enabled() ?
+                        2 * USEC_PER_SEC : USEC_PER_SEC / 50;
+
+        if (argc == 3)
+                (void) safe_atozu(argv[2], &arg_start);
+        else
+                arg_start = getpid_cached();
+
+        NULSTR_FOREACH(i, "zeros\0simple\0random\0") {
+#if HAVE_XZ
+                test_compress_decompress("XZ", i, compress_blob_xz, decompress_blob_xz);
+#endif
+#if HAVE_LZ4
+                test_compress_decompress("LZ4", i, compress_blob_lz4, decompress_blob_lz4);
+#endif
+#if HAVE_ZSTD
+                test_compress_decompress("ZSTD", i, compress_blob_zstd, decompress_blob_zstd);
+#endif
+        }
+        return 0;
+#else
+        return log_tests_skipped("No compression feature is enabled");
+#endif
+}
diff --git a/src/test/test-compress.c b/src/test/test-compress.c
new file mode 100644
index 0000000..f5ec47c
--- /dev/null
+++ b/src/test/test-compress.c
@@ -0,0 +1,382 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/stat.h>
+
+#if HAVE_LZ4
+#include <lz4.h>
+#endif
+
+#include "alloc-util.h"
+#include "compress.h"
+#include "fd-util.h"
+#include "fs-util.h"
+#include "macro.h"
+#include "memory-util.h"
+#include "path-util.h"
+#include "random-util.h"
+#include "tests.h"
+#include "tmpfile-util.h"
+
+#if HAVE_XZ
+# define XZ_OK 0
+#else
+# define XZ_OK -EPROTONOSUPPORT
+#endif
+
+#if HAVE_LZ4
+# define LZ4_OK 0
+#else
+# define LZ4_OK -EPROTONOSUPPORT
+#endif
+
+#define HUGE_SIZE (4096*1024)
+
+typedef int (compress_blob_t)(const void *src, uint64_t src_size,
+                              void *dst, size_t dst_alloc_size, size_t *dst_size);
+typedef int (decompress_blob_t)(const void *src, uint64_t src_size,
+                                void **dst,
+                                size_t* dst_size, size_t dst_max);
+typedef int (decompress_sw_t)(const void *src, uint64_t src_size,
+                              void **buffer,
+                              const void *prefix, size_t prefix_len,
+                              uint8_t extra);
+
+typedef int (compress_stream_t)(int fdf, int fdt, uint64_t max_bytes, uint64_t *uncompressed_size);
+typedef int (decompress_stream_t)(int fdf, int fdt, uint64_t max_size);
+
+#if HAVE_COMPRESSION
+_unused_ static void test_compress_decompress(
+                int flag,
+                const char *compression,
+                compress_blob_t compress,
+                decompress_blob_t decompress,
+                const char *data,
+                size_t data_len,
+                bool may_fail) {
+
+        char compressed[512];
+        size_t csize;
+        _cleanup_free_ char *decompressed = NULL;
+        int r;
+
+        log_info("/* testing %s %s blob compression/decompression */",
+                 compression, data);
+
+        r = compress(data, data_len, compressed, sizeof(compressed), &csize);
+        if (r == -ENOBUFS) {
+                log_info_errno(r, "compression failed: %m");
+                assert_se(may_fail);
+        } else {
+                assert_se(r == flag);
+                r = decompress(compressed, csize,
+                               (void **) &decompressed, &csize, 0);
+                assert_se(r == 0);
+                assert_se(decompressed);
+                assert_se(memcmp(decompressed, data, data_len) == 0);
+        }
+
+        r = decompress("garbage", 7,
+                       (void **) &decompressed, &csize, 0);
+        assert_se(r < 0);
+
+        /* make sure to have the minimal lz4 compressed size */
+        r = decompress("00000000\1g", 9,
+                       (void **) &decompressed, &csize, 0);
+        assert_se(r < 0);
+
+        r = decompress("\100000000g", 9,
+                       (void **) &decompressed, &csize, 0);
+        assert_se(r < 0);
+
+        explicit_bzero_safe(decompressed, MALLOC_SIZEOF_SAFE(decompressed));
+}
+
+_unused_ static void test_decompress_startswith(const char *compression,
+                                                compress_blob_t compress,
+                                                decompress_sw_t decompress_sw,
+                                                const char *data,
+                                                size_t data_len,
+                                                bool may_fail) {
+
+        char *compressed;
+        _cleanup_free_ char *compressed1 = NULL, *compressed2 = NULL, *decompressed = NULL;
+        size_t csize, len;
+        int r;
+
+        log_info("/* testing decompress_startswith with %s on %.20s text */",
+                 compression, data);
+
+#define BUFSIZE_1 512
+#define BUFSIZE_2 20000
+
+        compressed = compressed1 = malloc(BUFSIZE_1);
+        assert_se(compressed1);
+        r = compress(data, data_len, compressed, BUFSIZE_1, &csize);
+        if (r == -ENOBUFS) {
+                log_info_errno(r, "compression failed: %m");
+                assert_se(may_fail);
+
+                compressed = compressed2 = malloc(BUFSIZE_2);
+                assert_se(compressed2);
+                r = compress(data, data_len, compressed, BUFSIZE_2, &csize);
+        }
+        assert_se(r > 0);
+
+        len = strlen(data);
+
+        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len, '\0');
+        assert_se(r > 0);
+        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len, 'w');
+        assert_se(r == 0);
+        r = decompress_sw(compressed, csize, (void **) &decompressed, "barbarbar", 9, ' ');
+        assert_se(r == 0);
+        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len - 1, data[len-1]);
+        assert_se(r > 0);
+        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len - 1, 'w');
+        assert_se(r == 0);
+        r = decompress_sw(compressed, csize, (void **) &decompressed, data, len, '\0');
+        assert_se(r > 0);
+}
+
+_unused_ static void test_decompress_startswith_short(const char *compression,
+                                                      compress_blob_t compress,
+                                                      decompress_sw_t decompress_sw) {
+
+#define TEXT "HUGE=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+
+        char buf[1024];
+        size_t csize;
+        int r;
+
+        log_info("/* %s with %s */", __func__, compression);
+
+        r = compress(TEXT, sizeof TEXT, buf, sizeof buf, &csize);
+        assert_se(r > 0);
+
+        for (size_t i = 1; i < strlen(TEXT); i++) {
+                _cleanup_free_ void *buf2 = NULL;
+
+                assert_se(buf2 = malloc(i));
+
+                assert_se(decompress_sw(buf, csize, &buf2, TEXT, i, TEXT[i]) == 1);
+                assert_se(decompress_sw(buf, csize, &buf2, TEXT, i, 'y') == 0);
+        }
+}
+
+_unused_ static void test_compress_stream(int flag,
+                                          const char *compression,
+                                          const char *cat,
+                                          compress_stream_t compress,
+                                          decompress_stream_t decompress,
+                                          const char *srcfile) {
+
+        _cleanup_close_ int src = -EBADF, dst = -EBADF, dst2 = -EBADF;
+        _cleanup_(unlink_tempfilep) char
+                pattern[] = "/tmp/systemd-test.compressed.XXXXXX",
+                pattern2[] = "/tmp/systemd-test.compressed.XXXXXX";
+        int r;
+        _cleanup_free_ char *cmd = NULL, *cmd2 = NULL;
+        struct stat st = {};
+        uint64_t uncompressed_size;
+
+        r = find_executable(cat, NULL);
+        if (r < 0) {
+                log_error_errno(r, "Skipping %s, could not find %s binary: %m", __func__, cat);
+                return;
+        }
+
+        log_debug("/* testing %s compression */", compression);
+
+        log_debug("/* create source from %s */", srcfile);
+
+        assert_se((src = open(srcfile, O_RDONLY|O_CLOEXEC)) >= 0);
+
+        log_debug("/* test compression */");
+
+        assert_se((dst = mkostemp_safe(pattern)) >= 0);
+
+        assert_se(compress(src, dst, -1, &uncompressed_size) == flag);
+
+        if (cat) {
+                assert_se(asprintf(&cmd, "%s %s | diff %s -", cat, pattern, srcfile) > 0);
+                assert_se(system(cmd) == 0);
+        }
+
+        log_debug("/* test decompression */");
+
+        assert_se((dst2 = mkostemp_safe(pattern2)) >= 0);
+
+        assert_se(stat(srcfile, &st) == 0);
+        assert_se((uint64_t)st.st_size == uncompressed_size);
+
+        assert_se(lseek(dst, 0, SEEK_SET) == 0);
+        r = decompress(dst, dst2, st.st_size);
+        assert_se(r == 0);
+
+        assert_se(asprintf(&cmd2, "diff %s %s", srcfile, pattern2) > 0);
+        assert_se(system(cmd2) == 0);
+
+        log_debug("/* test faulty decompression */");
+
+        assert_se(lseek(dst, 1, SEEK_SET) == 1);
+        r = decompress(dst, dst2, st.st_size);
+        assert_se(IN_SET(r, 0, -EBADMSG));
+
+        assert_se(lseek(dst, 0, SEEK_SET) == 0);
+        assert_se(lseek(dst2, 0, SEEK_SET) == 0);
+        r = decompress(dst, dst2, st.st_size - 1);
+        assert_se(r == -EFBIG);
+}
+#endif
+
+#if HAVE_LZ4
+static void test_lz4_decompress_partial(void) {
+        char buf[20000], buf2[100];
+        size_t buf_size = sizeof(buf), compressed;
+        int r;
+        _cleanup_free_ char *huge = NULL;
+
+        log_debug("/* %s */", __func__);
+
+        assert_se(huge = malloc(HUGE_SIZE));
+        memcpy(huge, "HUGE=", STRLEN("HUGE="));
+        memset(&huge[STRLEN("HUGE=")], 'x', HUGE_SIZE - STRLEN("HUGE=") - 1);
+        huge[HUGE_SIZE - 1] = '\0';
+
+        r = LZ4_compress_default(huge, buf, HUGE_SIZE, buf_size);
+        assert_se(r >= 0);
+        compressed = r;
+        log_info("Compressed %i → %zu", HUGE_SIZE, compressed);
+
+        r = LZ4_decompress_safe(buf, huge, r, HUGE_SIZE);
+        assert_se(r >= 0);
+        log_info("Decompressed → %i", r);
+
+        r = LZ4_decompress_safe_partial(buf, huge,
+                                        compressed,
+                                        12, HUGE_SIZE);
+        assert_se(r >= 0);
+        log_info("Decompressed partial %i/%i → %i", 12, HUGE_SIZE, r);
+
+        for (size_t size = 1; size < sizeof(buf2); size++) {
+                /* This failed in older lz4s but works in newer ones. */
+                r = LZ4_decompress_safe_partial(buf, buf2, compressed, size, size);
+                log_info("Decompressed partial %zu/%zu → %i (%s)", size, size, r,
+                                                                   r < 0 ? "bad" : "good");
+                if (r >= 0 && LZ4_versionNumber() >= 10803)
+                        /* lz4 <= 1.8.2 should fail that test, let's only check for newer ones */
+                        assert_se(memcmp(buf2, huge, r) == 0);
+        }
+}
+#endif
+
+int main(int argc, char *argv[]) {
+#if HAVE_COMPRESSION
+        _unused_ const char text[] =
+                "text\0foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF"
+                "foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF";
+
+        /* The file to test compression on can be specified as the first argument */
+        const char *srcfile = argc > 1 ? argv[1] : argv[0];
+
+        char data[512] = "random\0";
+
+        _cleanup_free_ char *huge = NULL;
+
+        assert_se(huge = malloc(HUGE_SIZE));
+        memcpy(huge, "HUGE=", STRLEN("HUGE="));
+        memset(&huge[STRLEN("HUGE=")], 'x', HUGE_SIZE - STRLEN("HUGE=") - 1);
+        huge[HUGE_SIZE - 1] = '\0';
+
+        test_setup_logging(LOG_DEBUG);
+
+        random_bytes(data + 7, sizeof(data) - 7);
+
+#if HAVE_XZ
+        test_compress_decompress(COMPRESSION_XZ, "XZ",
+                                 compress_blob_xz, decompress_blob_xz,
+                                 text, sizeof(text), false);
+        test_compress_decompress(COMPRESSION_XZ, "XZ",
+                                 compress_blob_xz, decompress_blob_xz,
+                                 data, sizeof(data), true);
+
+        test_decompress_startswith("XZ",
+                                   compress_blob_xz, decompress_startswith_xz,
+                                   text, sizeof(text), false);
+        test_decompress_startswith("XZ",
+                                   compress_blob_xz, decompress_startswith_xz,
+                                   data, sizeof(data), true);
+        test_decompress_startswith("XZ",
+                                   compress_blob_xz, decompress_startswith_xz,
+                                   huge, HUGE_SIZE, true);
+
+        test_compress_stream(COMPRESSION_XZ, "XZ", "xzcat",
+                             compress_stream_xz, decompress_stream_xz, srcfile);
+
+        test_decompress_startswith_short("XZ", compress_blob_xz, decompress_startswith_xz);
+
+#else
+        log_info("/* XZ test skipped */");
+#endif
+
+#if HAVE_LZ4
+        test_compress_decompress(COMPRESSION_LZ4, "LZ4",
+                                 compress_blob_lz4, decompress_blob_lz4,
+                                 text, sizeof(text), false);
+        test_compress_decompress(COMPRESSION_LZ4, "LZ4",
+                                 compress_blob_lz4, decompress_blob_lz4,
+                                 data, sizeof(data), true);
+
+        test_decompress_startswith("LZ4",
+                                   compress_blob_lz4, decompress_startswith_lz4,
+                                   text, sizeof(text), false);
+        test_decompress_startswith("LZ4",
+                                   compress_blob_lz4, decompress_startswith_lz4,
+                                   data, sizeof(data), true);
+        test_decompress_startswith("LZ4",
+                                   compress_blob_lz4, decompress_startswith_lz4,
+                                   huge, HUGE_SIZE, true);
+
+        test_compress_stream(COMPRESSION_LZ4, "LZ4", "lz4cat",
+                             compress_stream_lz4, decompress_stream_lz4, srcfile);
+
+        test_lz4_decompress_partial();
+
+        test_decompress_startswith_short("LZ4", compress_blob_lz4, decompress_startswith_lz4);
+
+#else
+        log_info("/* LZ4 test skipped */");
+#endif
+
+#if HAVE_ZSTD
+        test_compress_decompress(COMPRESSION_ZSTD, "ZSTD",
+                                 compress_blob_zstd, decompress_blob_zstd,
+                                 text, sizeof(text), false);
+        test_compress_decompress(COMPRESSION_ZSTD, "ZSTD",
+                                 compress_blob_zstd, decompress_blob_zstd,
+                                 data, sizeof(data), true);
+
+        test_decompress_startswith("ZSTD",
+                                   compress_blob_zstd, decompress_startswith_zstd,
+                                   text, sizeof(text), false);
+        test_decompress_startswith("ZSTD",
+                                   compress_blob_zstd, decompress_startswith_zstd,
+                                   data, sizeof(data), true);
+        test_decompress_startswith("ZSTD",
+                                   compress_blob_zstd, decompress_startswith_zstd,
+                                   huge, HUGE_SIZE, true);
+
+        test_compress_stream(COMPRESSION_ZSTD, "ZSTD", "zstdcat",
+                             compress_stream_zstd, decompress_stream_zstd, srcfile);
+
+        test_decompress_startswith_short("ZSTD", compress_blob_zstd, decompress_startswith_zstd);
+#else
+        log_info("/* ZSTD test skipped */");
+#endif
+
+        return 0;
+#else
+        log_info("/* XZ, LZ4 and ZSTD tests skipped */");
+        return EXIT_TEST_SKIP;
+#endif
+}
diff --git a/src/test/test-condition.c b/src/test/test-condition.c
index d1dee22..8f52dab 100644
--- a/src/test/test-condition.c
+++ b/src/test/test-condition.c
@@ -15,7 +15,10 @@
 #include "condition.h"
 #include "cpu-set-util.h"
 #include "efi-loader.h"
+#include "env-util.h"
 #include "errno-util.h"
+#include "fileio.h"
+#include "fs-util.h"
 #include "hostname-util.h"
 #include "id128-util.h"
 #include "ima-util.h"
@@ -24,24 +27,29 @@
 #include "macro.h"
 #include "nulstr-util.h"
 #include "os-util.h"
+#include "path-util.h"
 #include "process-util.h"
+#include "psi-util.h"
+#include "rm-rf.h"
 #include "selinux-util.h"
 #include "set.h"
 #include "smack-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
+#include "tmpfile-util.h"
 #include "tomoyo-util.h"
-#include "user-record.h"
+#include "udev-util.h"
+#include "uid-alloc-range.h"
 #include "user-util.h"
 #include "virt.h"
 
-static void test_condition_test_path(void) {
+TEST(condition_test_path) {
         Condition *condition;
 
         condition = condition_new(CONDITION_PATH_EXISTS, "/bin/sh", false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
         condition = condition_new(CONDITION_PATH_EXISTS, "/bin/s?", false, false);
@@ -125,7 +133,7 @@
         condition_free(condition);
 }
 
-static void test_condition_test_control_group_hierarchy(void) {
+TEST(condition_test_control_group_hierarchy) {
         Condition *condition;
         int r;
 
@@ -147,7 +155,7 @@
         condition_free(condition);
 }
 
-static void test_condition_test_control_group_controller(void) {
+TEST(condition_test_control_group_controller) {
         Condition *condition;
         CGroupMask system_mask;
         _cleanup_free_ char *controller_name = NULL;
@@ -216,7 +224,7 @@
         condition_free(condition);
 }
 
-static void test_condition_test_ac_power(void) {
+TEST(condition_test_ac_power) {
         Condition *condition;
 
         condition = condition_new(CONDITION_AC_POWER, "true", false, false);
@@ -235,18 +243,18 @@
         condition_free(condition);
 }
 
-static void test_condition_test_host(void) {
+TEST(condition_test_host) {
         _cleanup_free_ char *hostname = NULL;
-        char sid[SD_ID128_STRING_MAX];
         Condition *condition;
         sd_id128_t id;
         int r;
 
         r = sd_id128_get_machine(&id);
+        if (r < 0 && ERRNO_IS_MACHINE_ID_UNSET(r))
+                return (void) log_tests_skipped("/etc/machine-id missing");
         assert_se(r >= 0);
-        assert_se(sd_id128_to_string(id, sid));
 
-        condition = condition_new(CONDITION_HOST, sid, false, false);
+        condition = condition_new(CONDITION_HOST, SD_ID128_TO_STRING(id), false, false);
         assert_se(condition);
         assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
@@ -256,7 +264,7 @@
         assert_se(condition_test(condition, environ) == 0);
         condition_free(condition);
 
-        condition = condition_new(CONDITION_HOST, sid, false, true);
+        condition = condition_new(CONDITION_HOST, SD_ID128_TO_STRING(id), false, true);
         assert_se(condition);
         assert_se(condition_test(condition, environ) == 0);
         condition_free(condition);
@@ -275,10 +283,10 @@
         }
 }
 
-static void test_condition_test_architecture(void) {
+TEST(condition_test_architecture) {
         Condition *condition;
         const char *sa;
-        int a;
+        Architecture a;
 
         a = uname_architecture();
         assert_se(a >= 0);
@@ -302,7 +310,204 @@
         condition_free(condition);
 }
 
-static void test_condition_test_kernel_command_line(void) {
+TEST(condition_test_firmware) {
+        Condition *condition;
+
+        /* Empty parameter */
+        condition = condition_new(CONDITION_FIRMWARE, "", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        /* uefi parameter */
+        condition = condition_new(CONDITION_FIRMWARE, "uefi", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == is_efi_boot());
+        condition_free(condition);
+}
+
+TEST(condition_test_firmware_device_tree) {
+        Condition *condition;
+        bool is_device_tree_system;
+
+        /* device-tree parameter */
+        is_device_tree_system = (access("/sys/firmware/devicetree/", F_OK) == 0);
+
+        condition = condition_new(CONDITION_FIRMWARE, "device-tree", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == is_device_tree_system);
+        condition_free(condition);
+
+        /* device-tree-compatible parameter */
+        if (!is_device_tree_system) {
+                condition = condition_new(CONDITION_FIRMWARE, "device-tree-compatible()", false, false);
+                assert_se(condition);
+                assert_se(condition_test(condition, environ) == 0);
+                condition_free(condition);
+        } else {
+                _cleanup_free_ char *dtcompat = NULL;
+                _cleanup_strv_free_ char **dtcompatlist = NULL;
+                size_t dtcompat_size;
+                int r;
+
+                r = read_full_virtual_file("/proc/device-tree/compatible", &dtcompat, &dtcompat_size);
+                if (r < 0) {
+                        condition = condition_new(CONDITION_FIRMWARE, "device-tree-compatible()", false, false);
+                        assert_se(condition);
+                        if (r == -ENOENT)
+                                assert_se(condition_test(condition, environ) == 0);
+                        else
+                                assert_se(condition_test(condition, environ) < 0);
+                        condition_free(condition);
+                        return;
+                }
+
+                dtcompatlist = strv_parse_nulstr(dtcompat, dtcompat_size);
+
+                STRV_FOREACH(c, dtcompatlist) {
+                        _cleanup_free_ char *expression = NULL;
+
+                        assert_se(expression = strjoin("device-tree-compatible(", *c, ")"));
+                        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+                        assert_se(condition);
+                        assert_se(condition_test(condition, environ) > 0);
+                        condition_free(condition);
+                }
+        }
+}
+
+TEST(condition_test_firmware_smbios) {
+        Condition *condition;
+        _cleanup_free_ char *bios_vendor = NULL, *bios_version = NULL;
+        const char *expression;
+
+        /* smbios-field parameter */
+        /* Test some malformed smbios-field arguments */
+        condition = condition_new(CONDITION_FIRMWARE, "smbios-field()", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == -EINVAL);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_FIRMWARE, "smbios-field(malformed)", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == -EINVAL);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_FIRMWARE, "smbios-field(malformed", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == -EINVAL);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_FIRMWARE, "smbios-field(malformed=)", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == -EINVAL);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_FIRMWARE, "smbios-field(malformed=)", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == -EINVAL);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_FIRMWARE, "smbios-field(not_existing=nothing garbage)", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == -EINVAL);
+        condition_free(condition);
+
+        /* Test not existing SMBIOS field */
+        condition = condition_new(CONDITION_FIRMWARE, "smbios-field(not_existing=nothing)", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        /* Test with bios_vendor, if available */
+        if (read_virtual_file("/sys/class/dmi/id/bios_vendor", SIZE_MAX, &bios_vendor, NULL) <= 0)
+                return;
+
+        /* remove trailing newline */
+        strstrip(bios_vendor);
+
+        /* Check if the bios_vendor contains any spaces we should quote */
+        const char *quote = strchr(bios_vendor, ' ') ? "\"" : "";
+
+        /* Test equality / inequality using fnmatch() */
+        expression = strjoina("smbios-field(bios_vendor $= ", quote,  bios_vendor, quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_vendor$=", quote, bios_vendor, quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_vendor !$= ", quote, bios_vendor, quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_vendor!$=", quote, bios_vendor, quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_vendor $= ", quote,  bios_vendor, "*", quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        /* Test version comparison with bios_version, if available */
+        if (read_virtual_file("/sys/class/dmi/id/bios_version", SIZE_MAX, &bios_version, NULL) <= 0)
+                return;
+
+        /* remove trailing newline */
+        strstrip(bios_version);
+
+        /* Check if the bios_version contains any spaces we should quote */
+        quote = strchr(bios_version, ' ') ? "\"" : "";
+
+        expression = strjoina("smbios-field(bios_version = ", quote, bios_version, quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_version != ", quote, bios_version, quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_version <= ", quote, bios_version, quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_version >= ", quote, bios_version, quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_version < ", quote, bios_version, ".1", quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        expression = strjoina("smbios-field(bios_version > ", quote, bios_version, ".1", quote, ")");
+        condition = condition_new(CONDITION_FIRMWARE, expression, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+}
+
+TEST(condition_test_kernel_command_line) {
         Condition *condition;
         int r;
 
@@ -320,7 +525,7 @@
         condition_free(condition);
 }
 
-static void test_condition_test_kernel_version(void) {
+TEST(condition_test_kernel_version) {
         Condition *condition;
         struct utsname u;
         const char *v;
@@ -424,7 +629,7 @@
         assert_se(condition_test(condition, environ) == 0);
         condition_free(condition);
 
-        condition = condition_new(CONDITION_KERNEL_VERSION, ">= 4711.8.15", false, false);
+        condition = condition_new(CONDITION_KERNEL_VERSION, " >= 4711.8.15", false, false);
         assert_se(condition);
         assert_se(condition_test(condition, environ) == 0);
         condition_free(condition);
@@ -462,8 +667,62 @@
         condition_free(condition);
 }
 
+TEST(condition_test_credential) {
+        _cleanup_(rm_rf_physical_and_freep) char *n1 = NULL, *n2 = NULL;
+        _cleanup_free_ char *d1 = NULL, *d2 = NULL, *j = NULL;
+        Condition *condition;
+
+        assert_se(free_and_strdup(&d1, getenv("CREDENTIALS_DIRECTORY")) >= 0);
+        assert_se(free_and_strdup(&d2, getenv("ENCRYPTED_CREDENTIALS_DIRECTORY")) >= 0);
+
+        assert_se(unsetenv("CREDENTIALS_DIRECTORY") >= 0);
+        assert_se(unsetenv("ENCRYPTED_CREDENTIALS_DIRECTORY") >= 0);
+
+        condition = condition_new(CONDITION_CREDENTIAL, "definitelymissing", /* trigger= */ false, /* negate= */ false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        /* invalid */
+        condition = condition_new(CONDITION_CREDENTIAL, "..", /* trigger= */ false, /* negate= */ false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        assert_se(mkdtemp_malloc(NULL, &n1) >= 0);
+        assert_se(mkdtemp_malloc(NULL, &n2) >= 0);
+
+        assert_se(setenv("CREDENTIALS_DIRECTORY", n1, /* overwrite= */ true) >= 0);
+        assert_se(setenv("ENCRYPTED_CREDENTIALS_DIRECTORY", n2, /* overwrite= */ true) >= 0);
+
+        condition = condition_new(CONDITION_CREDENTIAL, "stillmissing", /* trigger= */ false, /* negate= */ false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        assert_se(j = path_join(n1, "existing"));
+        assert_se(touch(j) >= 0);
+        assert_se(j);
+        condition = condition_new(CONDITION_CREDENTIAL, "existing", /* trigger= */ false, /* negate= */ false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+        free(j);
+
+        assert_se(j = path_join(n2, "existing-encrypted"));
+        assert_se(touch(j) >= 0);
+        assert_se(j);
+        condition = condition_new(CONDITION_CREDENTIAL, "existing-encrypted", /* trigger= */ false, /* negate= */ false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        assert_se(set_unset_env("CREDENTIALS_DIRECTORY", d1, /* overwrite= */ true) >= 0);
+        assert_se(set_unset_env("ENCRYPTED_CREDENTIALS_DIRECTORY", d2, /* overwrite= */ true) >= 0);
+}
+
 #if defined(__i386__) || defined(__x86_64__)
-static void test_condition_test_cpufeature(void) {
+TEST(condition_test_cpufeature) {
         Condition *condition;
 
         condition = condition_new(CONDITION_CPU_FEATURE, "fpu", false, false);
@@ -483,7 +742,7 @@
 }
 #endif
 
-static void test_condition_test_security(void) {
+TEST(condition_test_security) {
         Condition *condition;
 
         condition = condition_new(CONDITION_SECURITY, "garbage oifdsjfoidsjoj", false, false);
@@ -527,7 +786,7 @@
         condition_free(condition);
 }
 
-static void print_securities(void) {
+TEST(print_securities) {
         log_info("------ enabled security technologies ------");
         log_info("SELinux: %s", yes_no(mac_selinux_use()));
         log_info("AppArmor: %s", yes_no(mac_apparmor_use()));
@@ -539,9 +798,8 @@
         log_info("-------------------------------------------");
 }
 
-static void test_condition_test_virtualization(void) {
+TEST(condition_test_virtualization) {
         Condition *condition;
-        const char *virt;
         int r;
 
         condition = condition_new(CONDITION_VIRTUALIZATION, "garbage oifdsjfoidsjoj", false, false);
@@ -598,7 +856,7 @@
         }
 }
 
-static void test_condition_test_user(void) {
+TEST(condition_test_user) {
         Condition *condition;
         char* uid;
         char* username;
@@ -667,7 +925,7 @@
         condition_free(condition);
 }
 
-static void test_condition_test_group(void) {
+TEST(condition_test_group) {
         Condition *condition;
         char* gid;
         char* groupname;
@@ -693,12 +951,12 @@
         free(gid);
 
         ngroups_max = sysconf(_SC_NGROUPS_MAX);
-        assert(ngroups_max > 0);
+        assert_se(ngroups_max > 0);
 
         gids = newa(gid_t, ngroups_max);
 
         ngroups = getgroups(ngroups_max, gids);
-        assert(ngroups >= 0);
+        assert_se(ngroups >= 0);
 
         max_gid = getgid();
         for (i = 0; i < ngroups; i++) {
@@ -757,7 +1015,7 @@
         condition_free(condition);
 }
 
-static void test_condition_test_cpus(void) {
+TEST(condition_test_cpus) {
         _cleanup_free_ char *t = NULL;
         int cpus;
 
@@ -818,7 +1076,7 @@
         condition_free(condition);
 }
 
-static void test_condition_test_memory(void) {
+TEST(condition_test_memory) {
         _cleanup_free_ char *t = NULL;
         uint64_t memory;
 
@@ -838,6 +1096,27 @@
         test_condition_test_memory_one("!= 18446744073709547520", true);
         test_condition_test_memory_one("<= 18446744073709547520", true);
 
+        test_condition_test_memory_one("> 100T", false);
+        test_condition_test_memory_one("= 100T", false);
+        test_condition_test_memory_one(">= 100T", false);
+        test_condition_test_memory_one("< 100T", true);
+        test_condition_test_memory_one("!= 100T", true);
+        test_condition_test_memory_one("<= 100T", true);
+
+        test_condition_test_memory_one("> 100 T", false);
+        test_condition_test_memory_one("= 100 T", false);
+        test_condition_test_memory_one(">= 100 T", false);
+        test_condition_test_memory_one("< 100 T", true);
+        test_condition_test_memory_one("!= 100 T", true);
+        test_condition_test_memory_one("<= 100 T", true);
+
+        test_condition_test_memory_one("> 100 T 1 G", false);
+        test_condition_test_memory_one("= 100 T 1 G", false);
+        test_condition_test_memory_one(">= 100 T 1 G", false);
+        test_condition_test_memory_one("< 100 T 1 G", true);
+        test_condition_test_memory_one("!= 100 T 1 G", true);
+        test_condition_test_memory_one("<= 100 T 1 G", true);
+
         assert_se(asprintf(&t, "= %" PRIu64, memory) >= 0);
         test_condition_test_memory_one(t, true);
         t = mfree(t);
@@ -878,7 +1157,7 @@
         condition_free(condition);
 }
 
-static void test_condition_test_environment(void) {
+TEST(condition_test_environment) {
         assert_se(setenv("EXISTINGENVVAR", "foo", false) >= 0);
 
         test_condition_test_environment_one("MISSINGENVVAR", false);
@@ -891,7 +1170,7 @@
         test_condition_test_environment_one("EXISTINGENVVAR=", false);
 }
 
-static void test_condition_test_os_release(void) {
+TEST(condition_test_os_release) {
         _cleanup_strv_free_ char **os_release_pairs = NULL;
         _cleanup_free_ char *version_id = NULL;
         const char *key_value_pair;
@@ -945,7 +1224,7 @@
 
         condition = condition_new(CONDITION_OS_RELEASE, "", false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
         /* load_os_release_pairs() removes quotes, we have to add them back,
@@ -955,7 +1234,7 @@
         key_value_pair = strjoina(os_release_pairs[0], "=", quote, os_release_pairs[1], quote);
         condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
         key_value_pair = strjoina(os_release_pairs[0], "!=", quote, os_release_pairs[1], quote);
@@ -964,6 +1243,19 @@
         assert_se(condition_test(condition, environ) == 0);
         condition_free(condition);
 
+        /* Test fnmatch() operators */
+        key_value_pair = strjoina(os_release_pairs[0], "$=", quote, os_release_pairs[1], quote);
+        condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        key_value_pair = strjoina(os_release_pairs[0], "!$=", quote, os_release_pairs[1], quote);
+        condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
         /* Some distros (eg: Arch) do not set VERSION_ID */
         if (parse_os_release(NULL, "VERSION_ID", &version_id) <= 0)
                 return;
@@ -971,7 +1263,7 @@
         key_value_pair = strjoina("VERSION_ID", "=", version_id);
         condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
         key_value_pair = strjoina("VERSION_ID", "!=", version_id);
@@ -983,19 +1275,19 @@
         key_value_pair = strjoina("VERSION_ID", "<=", version_id);
         condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
         key_value_pair = strjoina("VERSION_ID", ">=", version_id);
         condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
         key_value_pair = strjoina("VERSION_ID", "<", version_id, ".1");
         condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
         key_value_pair = strjoina("VERSION_ID", ">", version_id, ".1");
@@ -1007,7 +1299,7 @@
         key_value_pair = strjoina("VERSION_ID", "=", version_id, " ", os_release_pairs[0], "=", quote, os_release_pairs[1], quote);
         condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
         key_value_pair = strjoina("VERSION_ID", "!=", version_id, " ", os_release_pairs[0], "=", quote, os_release_pairs[1], quote);
@@ -1031,33 +1323,162 @@
         key_value_pair = strjoina("VERSION_ID", "<", version_id, ".1", " ", os_release_pairs[0], "=", quote, os_release_pairs[1], quote);
         condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false);
         assert_se(condition);
-        assert_se(condition_test(condition, environ));
+        assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+TEST(condition_test_psi) {
+        Condition *condition;
+        CGroupMask mask;
+        int r;
 
-        test_condition_test_path();
-        test_condition_test_ac_power();
-        test_condition_test_host();
-        test_condition_test_architecture();
-        test_condition_test_kernel_command_line();
-        test_condition_test_kernel_version();
-        test_condition_test_security();
-        print_securities();
-        test_condition_test_virtualization();
-        test_condition_test_user();
-        test_condition_test_group();
-        test_condition_test_control_group_hierarchy();
-        test_condition_test_control_group_controller();
-        test_condition_test_cpus();
-        test_condition_test_memory();
-        test_condition_test_environment();
-#if defined(__i386__) || defined(__x86_64__)
-        test_condition_test_cpufeature();
-#endif
-        test_condition_test_os_release();
+        if (!is_pressure_supported())
+                return (void) log_notice("Pressure Stall Information (PSI) is not supported, skipping %s", __func__);
 
-        return 0;
+        condition = condition_new(CONDITION_MEMORY_PRESSURE, "", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "sbarabau", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_MEMORY_PRESSURE, "10%sbarabau", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "10% sbarabau", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "-10", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "10%/10min", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "10min/10%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "10% 5min", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "/5min", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_IO_PRESSURE, "10s /   ", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_MEMORY_PRESSURE, "100%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_MEMORY_PRESSURE, "0%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_MEMORY_PRESSURE, "0.0%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "100%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "0%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "0.0%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "0.01%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "0.0%/10sec", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "100.0% / 1min", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_IO_PRESSURE, "50.0% / 1min", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        r = cg_all_unified();
+        if (r < 0)
+                return (void) log_notice("Failed to determine whether the unified cgroups hierarchy is used, skipping %s", __func__);
+        if (r == 0)
+                return (void) log_notice("Requires the unified cgroups hierarchy, skipping %s", __func__);
+
+        if (cg_mask_supported(&mask) < 0)
+                return (void) log_notice("Failed to get supported cgroup controllers, skipping %s", __func__);
+
+        if (!FLAGS_SET(mask, CGROUP_MASK_MEMORY))
+                return (void) log_notice("Requires the cgroup memory controller, skipping %s", __func__);
+
+        if (!FLAGS_SET(mask, CGROUP_MASK_CPU))
+                return (void) log_notice("Requires the cgroup CPU controller, skipping %s", __func__);
+
+        condition = condition_new(CONDITION_MEMORY_PRESSURE, " : / ", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) < 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "hopefullythisisnotarealone.slice:100% / 10sec", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) > 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_CPU_PRESSURE, "-.slice:100.0% / 1min", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_MEMORY_PRESSURE, "-.slice:0.0%/5min", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_MEMORY_PRESSURE, "-.slice:100.0%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        condition = condition_new(CONDITION_IO_PRESSURE, "-.slice:0.0%", false, false);
+        assert_se(condition);
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-conf-files.c b/src/test/test-conf-files.c
index ee7bbd1..beda749 100644
--- a/src/test/test-conf-files.c
+++ b/src/test/test-conf-files.c
@@ -19,7 +19,6 @@
 #include "strv.h"
 #include "tests.h"
 #include "user-util.h"
-#include "util.h"
 
 static void setup_test_dir(char *tmp_dir, const char *files, ...) {
         va_list ap;
@@ -31,15 +30,14 @@
                 _cleanup_free_ char *path;
 
                 assert_se(path = path_join(tmp_dir, files));
-                (void) mkdir_parents(path, 0755);
-                assert_se(write_string_file(path, "foobar", WRITE_STRING_FILE_CREATE) >= 0);
+                assert_se(write_string_file(path, "foobar", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
                 files = va_arg(ap, const char *);
         }
         va_end(ap);
 }
 
-static void test_conf_files_list(bool use_root) {
+static void test_conf_files_list_one(bool use_root) {
         char tmp_dir[] = "/tmp/test-conf-files-XXXXXX";
         _cleanup_strv_free_ char **found_files = NULL, **found_files2 = NULL;
         const char *root_dir, *search, *expect_a, *expect_b, *expect_c, *mask;
@@ -90,7 +88,12 @@
         assert_se(rm_rf(tmp_dir, REMOVE_ROOT|REMOVE_PHYSICAL) == 0);
 }
 
-static void test_conf_files_insert(const char *root) {
+TEST(conf_files_list) {
+        test_conf_files_list_one(false);
+        test_conf_files_list_one(true);
+}
+
+static void test_conf_files_insert_one(const char *root) {
         _cleanup_strv_free_ char **s = NULL;
 
         log_info("/* %s root=%s */", __func__, strempty(root));
@@ -144,14 +147,10 @@
         assert_se(strv_equal(s, STRV_MAKE(bar2, foo1, whatever, zzz3)));
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_conf_files_list(false);
-        test_conf_files_list(true);
-        test_conf_files_insert(NULL);
-        test_conf_files_insert("/root");
-        test_conf_files_insert("/root/");
-
-        return 0;
+TEST(conf_files_insert) {
+        test_conf_files_insert_one(NULL);
+        test_conf_files_insert_one("/root");
+        test_conf_files_insert_one("/root/");
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c
index 5da8643..0acb413 100644
--- a/src/test/test-conf-parser.c
+++ b/src/test/test-conf-parser.c
@@ -7,8 +7,8 @@
 #include "macro.h"
 #include "string-util.h"
 #include "strv.h"
+#include "tests.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 static void test_config_parse_path_one(const char *rvalue, const char *expected) {
         _cleanup_free_ char *path = NULL;
@@ -87,7 +87,7 @@
         assert_se(expected == v);
 }
 
-static void test_config_parse_path(void) {
+TEST(config_parse_path) {
         test_config_parse_path_one("/path", "/path");
         test_config_parse_path_one("/path//////////", "/path");
         test_config_parse_path_one("///path/foo///bar////bar//", "/path/foo/bar/bar");
@@ -98,21 +98,21 @@
         test_config_parse_path_one("/path/\xc3\x7f", NULL);
 }
 
-static void test_config_parse_log_level(void) {
+TEST(config_parse_log_level) {
         test_config_parse_log_level_one("debug", LOG_DEBUG);
         test_config_parse_log_level_one("info", LOG_INFO);
 
         test_config_parse_log_level_one("garbage", 0);
 }
 
-static void test_config_parse_log_facility(void) {
+TEST(config_parse_log_facility) {
         test_config_parse_log_facility_one("mail", LOG_MAIL);
         test_config_parse_log_facility_one("user", LOG_USER);
 
         test_config_parse_log_facility_one("garbage", 0);
 }
 
-static void test_config_parse_iec_size(void) {
+TEST(config_parse_iec_size) {
         test_config_parse_iec_size_one("1024", 1024);
         test_config_parse_iec_size_one("2K", 2048);
         test_config_parse_iec_size_one("10M", 10 * 1024 * 1024);
@@ -125,7 +125,7 @@
         test_config_parse_iec_size_one("garbage", 0);
 }
 
-static void test_config_parse_si_uint64(void) {
+TEST(config_parse_si_uint64) {
         test_config_parse_si_uint64_one("1024", 1024);
         test_config_parse_si_uint64_one("2K", 2000);
         test_config_parse_si_uint64_one("10M", 10 * 1000 * 1000);
@@ -138,7 +138,7 @@
         test_config_parse_si_uint64_one("garbage", 0);
 }
 
-static void test_config_parse_int(void) {
+TEST(config_parse_int) {
         test_config_parse_int_one("1024", 1024);
         test_config_parse_int_one("-1024", -1024);
         test_config_parse_int_one("0", 0);
@@ -149,7 +149,7 @@
         test_config_parse_int_one("garbage", -1);
 }
 
-static void test_config_parse_unsigned(void) {
+TEST(config_parse_unsigned) {
         test_config_parse_unsigned_one("10241024", 10241024);
         test_config_parse_unsigned_one("1024", 1024);
         test_config_parse_unsigned_one("0", 0);
@@ -160,7 +160,7 @@
         test_config_parse_unsigned_one("1000garbage", 0);
 }
 
-static void test_config_parse_strv(void) {
+TEST(config_parse_strv) {
         test_config_parse_strv_one("", STRV_MAKE_EMPTY);
         test_config_parse_strv_one("foo", STRV_MAKE("foo"));
         test_config_parse_strv_one("foo bar foo", STRV_MAKE("foo", "bar", "foo"));
@@ -169,7 +169,7 @@
         test_config_parse_strv_one("\xc3\x7f", STRV_MAKE("\xc3\x7f"));
 }
 
-static void test_config_parse_mode(void) {
+TEST(config_parse_mode) {
         test_config_parse_mode_one("777", 0777);
         test_config_parse_mode_one("644", 0644);
 
@@ -180,7 +180,7 @@
         test_config_parse_mode_one("777 garbage", 0);
 }
 
-static void test_config_parse_sec(void) {
+TEST(config_parse_sec) {
         test_config_parse_sec_one("1", 1 * USEC_PER_SEC);
         test_config_parse_sec_one("1s", 1 * USEC_PER_SEC);
         test_config_parse_sec_one("100ms", 100 * USEC_PER_MSEC);
@@ -191,7 +191,7 @@
         test_config_parse_sec_one("garbage", 0);
 }
 
-static void test_config_parse_nsec(void) {
+TEST(config_parse_nsec) {
         test_config_parse_nsec_one("1", 1);
         test_config_parse_nsec_one("1s", 1 * NSEC_PER_SEC);
         test_config_parse_nsec_one("100ms", 100 * NSEC_PER_MSEC);
@@ -202,7 +202,7 @@
         test_config_parse_nsec_one("garbage", 0);
 }
 
-static void test_config_parse_iec_uint64(void) {
+TEST(config_parse_iec_uint64) {
         uint64_t offset = 0;
         assert_se(config_parse_iec_uint64(NULL, "/this/file", 11, "Section", 22, "Size", 0, "4M", &offset, NULL) == 0);
         assert_se(offset == 4 * 1024 * 1024);
@@ -310,7 +310,7 @@
         "setting1=3\n",
 };
 
-static void test_config_parse(unsigned i, const char *s) {
+static void test_config_parse_one(unsigned i, const char *s) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-conf-parser.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *setting1 = NULL;
@@ -321,7 +321,7 @@
                 {}
         };
 
-        log_info("== %s[%i] ==", __func__, i);
+        log_info("== %s[%u] ==", __func__, i);
 
         assert_se(fmkostemp_safe(name, "r+", &f) == 0);
         assert_se(fwrite(s, strlen(s), 1, f) == 1);
@@ -336,7 +336,7 @@
                          const void *table,
                          ConfigParseFlags flags,
                          void *userdata,
-                         usec_t *ret_mtime)
+                         struct stat *ret_stat);
         */
 
         r = config_parse(NULL, name, f,
@@ -385,27 +385,9 @@
         }
 }
 
-int main(int argc, char **argv) {
-        unsigned i;
-
-        log_parse_environment();
-        log_open();
-
-        test_config_parse_path();
-        test_config_parse_log_level();
-        test_config_parse_log_facility();
-        test_config_parse_iec_size();
-        test_config_parse_si_uint64();
-        test_config_parse_int();
-        test_config_parse_unsigned();
-        test_config_parse_strv();
-        test_config_parse_mode();
-        test_config_parse_sec();
-        test_config_parse_nsec();
-        test_config_parse_iec_uint64();
-
-        for (i = 0; i < ELEMENTSOF(config_file); i++)
-                test_config_parse(i, config_file[i]);
-
-        return 0;
+TEST(config_parse) {
+        for (unsigned i = 0; i < ELEMENTSOF(config_file); i++)
+                test_config_parse_one(i, config_file[i]);
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-copy.c b/src/test/test-copy.c
index 7b8f8fa..5a4af17 100644
--- a/src/test/test-copy.c
+++ b/src/test/test-copy.c
@@ -4,6 +4,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "copy.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -19,18 +20,15 @@
 #include "tests.h"
 #include "tmpfile-util.h"
 #include "user-util.h"
-#include "util.h"
 #include "xattr-util.h"
 
-static void test_copy_file(void) {
+TEST(copy_file) {
         _cleanup_free_ char *buf = NULL;
         char fn[] = "/tmp/test-copy_file.XXXXXX";
         char fn_copy[] = "/tmp/test-copy_file.XXXXXX";
         size_t sz = 0;
         int fd;
 
-        log_info("%s", __func__);
-
         fd = mkostemp_safe(fn);
         assert_se(fd >= 0);
         close(fd);
@@ -51,15 +49,71 @@
         unlink(fn_copy);
 }
 
-static void test_copy_file_fd(void) {
+static bool read_file_at_and_streq(int dir_fd, const char *path, const char *expected) {
+        _cleanup_free_ char *buf = NULL;
+
+        assert_se(read_full_file_at(dir_fd, path, &buf, NULL) == 0);
+        return streq(buf, expected);
+}
+
+TEST(copy_tree_replace_file) {
+        _cleanup_free_ char *src = NULL, *dst = NULL;
+
+        assert_se(tempfn_random("/tmp/test-copy_file.XXXXXX", NULL, &src) >= 0);
+        assert_se(tempfn_random("/tmp/test-copy_file.XXXXXX", NULL, &dst) >= 0);
+
+        assert_se(write_string_file(src, "bar bar", WRITE_STRING_FILE_CREATE) == 0);
+        assert_se(write_string_file(dst, "foo foo foo", WRITE_STRING_FILE_CREATE) == 0);
+
+        /* The file exists- now overwrite original contents, and test the COPY_REPLACE flag. */
+
+        assert_se(copy_tree(src, dst, UID_INVALID, GID_INVALID, COPY_REFLINK, NULL) == -EEXIST);
+
+        assert_se(read_file_at_and_streq(AT_FDCWD, dst, "foo foo foo\n"));
+
+        assert_se(copy_tree(src, dst, UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_REPLACE, NULL) == 0);
+
+        assert_se(read_file_at_and_streq(AT_FDCWD, dst, "bar bar\n"));
+}
+
+TEST(copy_tree_replace_dirs) {
+        _cleanup_(rm_rf_physical_and_freep) char *srcp = NULL, *dstp = NULL;
+        _cleanup_close_ int src = -EBADF, dst = -EBADF;
+
+        /* Create the random source/destination directories */
+        assert_se((src = mkdtemp_open(NULL, 0, &srcp)) >= 0);
+        assert_se((dst = mkdtemp_open(NULL, 0, &dstp)) >= 0);
+
+        /* Populate some data to differentiate the files. */
+        assert_se(write_string_file_at(src, "foo", "src file 1", WRITE_STRING_FILE_CREATE) >= 0);
+        assert_se(write_string_file_at(src, "bar", "src file 2", WRITE_STRING_FILE_CREATE) == 0);
+
+        assert_se(write_string_file_at(dst, "foo", "dest file 1", WRITE_STRING_FILE_CREATE) == 0);
+        assert_se(write_string_file_at(dst, "bar", "dest file 2", WRITE_STRING_FILE_CREATE) == 0);
+
+        /* Copying without COPY_REPLACE should fail because the destination file already exists. */
+        assert_se(copy_tree_at(src, ".", dst, ".", UID_INVALID, GID_INVALID, COPY_REFLINK, NULL) == -EEXIST);
+
+        assert_se(read_file_at_and_streq(src, "foo", "src file 1\n"));
+        assert_se(read_file_at_and_streq(src, "bar", "src file 2\n"));
+        assert_se(read_file_at_and_streq(dst, "foo", "dest file 1\n"));
+        assert_se(read_file_at_and_streq(dst, "bar", "dest file 2\n"));
+
+        assert_se(copy_tree_at(src, ".", dst, ".", UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_REPLACE|COPY_MERGE, NULL) == 0);
+
+        assert_se(read_file_at_and_streq(src, "foo", "src file 1\n"));
+        assert_se(read_file_at_and_streq(src, "bar", "src file 2\n"));
+        assert_se(read_file_at_and_streq(dst, "foo", "src file 1\n"));
+        assert_se(read_file_at_and_streq(dst, "bar", "src file 2\n"));
+}
+
+TEST(copy_file_fd) {
         char in_fn[] = "/tmp/test-copy-file-fd-XXXXXX";
         char out_fn[] = "/tmp/test-copy-file-fd-XXXXXX";
-        _cleanup_close_ int in_fd = -1, out_fd = -1;
+        _cleanup_close_ int in_fd = -EBADF, out_fd = -EBADF;
         const char *text = "boohoo\nfoo\n\tbar\n";
         char buf[64] = {};
 
-        log_info("%s", __func__);
-
         in_fd = mkostemp_safe(in_fn);
         assert_se(in_fd >= 0);
         out_fd = mkostemp_safe(out_fn);
@@ -77,7 +131,9 @@
         unlink(out_fn);
 }
 
-static void test_copy_tree(void) {
+TEST(copy_tree) {
+        _cleanup_set_free_ Set *denylist = NULL;
+        _cleanup_free_ char *cp = NULL;
         char original_dir[] = "/tmp/test-copy_tree/";
         char copy_dir[] = "/tmp/test-copy_tree-copy/";
         char **files = STRV_MAKE("file", "dir1/file", "dir1/dir2/file", "dir1/dir2/dir3/dir4/dir5/file");
@@ -85,14 +141,11 @@
                                     "link2", "dir1/file");
         char **hardlinks = STRV_MAKE("hlink", "file",
                                      "hlink2", "dir1/file");
-        const char *unixsockp;
-        char **p, **ll;
+        const char *unixsockp, *ignorep;
         struct stat st;
         int xattr_worked = -1; /* xattr support is optional in temporary directories, hence use it if we can,
                                 * but don't fail if we can't */
 
-        log_info("%s", __func__);
-
         (void) rm_rf(copy_dir, REMOVE_ROOT|REMOVE_PHYSICAL);
         (void) rm_rf(original_dir, REMOVE_ROOT|REMOVE_PHYSICAL);
 
@@ -102,8 +155,7 @@
 
                 assert_se(f = path_join(original_dir, *p));
 
-                assert_se(mkdir_parents(f, 0755) >= 0);
-                assert_se(write_string_file(f, "file", WRITE_STRING_FILE_CREATE) == 0);
+                assert_se(write_string_file(f, "file", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) == 0);
 
                 assert_se(base64mem(*p, strlen(*p), &c) >= 0);
 
@@ -135,7 +187,14 @@
         unixsockp = strjoina(original_dir, "unixsock");
         assert_se(mknod(unixsockp, S_IFSOCK|0644, 0) >= 0);
 
-        assert_se(copy_tree(original_dir, copy_dir, UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_MERGE|COPY_HARDLINKS) == 0);
+        ignorep = strjoina(original_dir, "ignore/file");
+        assert_se(write_string_file(ignorep, "ignore", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) == 0);
+        assert_se(RET_NERRNO(stat(ignorep, &st)) >= 0);
+        assert_se(cp = memdup(&st, sizeof(st)));
+        assert_se(set_ensure_put(&denylist, &inode_hash_ops, cp) >= 0);
+        TAKE_PTR(cp);
+
+        assert_se(copy_tree(original_dir, copy_dir, UID_INVALID, GID_INVALID, COPY_REFLINK|COPY_MERGE|COPY_HARDLINKS, denylist) == 0);
 
         STRV_FOREACH(p, files) {
                 _cleanup_free_ char *buf, *f, *c = NULL;
@@ -148,7 +207,7 @@
                 assert_se(read_full_file(f, &buf, &sz) == 0);
                 assert_se(streq(buf, "file\n"));
 
-                k = getxattr_malloc(f, "user.testxattr", &c, false);
+                k = lgetxattr_malloc(f, "user.testxattr", &c);
                 assert_se(xattr_worked < 0 || ((k >= 0) == !!xattr_worked));
 
                 if (k >= 0) {
@@ -187,16 +246,19 @@
         assert_se(stat(unixsockp, &st) >= 0);
         assert_se(S_ISSOCK(st.st_mode));
 
-        assert_se(copy_tree(original_dir, copy_dir, UID_INVALID, GID_INVALID, COPY_REFLINK) < 0);
-        assert_se(copy_tree("/tmp/inexistent/foo/bar/fsdoi", copy_dir, UID_INVALID, GID_INVALID, COPY_REFLINK) < 0);
+        assert_se(copy_tree(original_dir, copy_dir, UID_INVALID, GID_INVALID, COPY_REFLINK, denylist) < 0);
+        assert_se(copy_tree("/tmp/inexistent/foo/bar/fsdoi", copy_dir, UID_INVALID, GID_INVALID, COPY_REFLINK, denylist) < 0);
+
+        ignorep = strjoina(copy_dir, "ignore/file");
+        assert_se(RET_NERRNO(access(ignorep, F_OK)) == -ENOENT);
 
         (void) rm_rf(copy_dir, REMOVE_ROOT|REMOVE_PHYSICAL);
         (void) rm_rf(original_dir, REMOVE_ROOT|REMOVE_PHYSICAL);
 }
 
-static void test_copy_bytes(void) {
-        _cleanup_close_pair_ int pipefd[2] = {-1, -1};
-        _cleanup_close_ int infd = -1;
+TEST(copy_bytes) {
+        _cleanup_close_pair_ int pipefd[2] = PIPE_EBADF;
+        _cleanup_close_ int infd = -EBADF;
         int r, r2;
         char buf[1024], buf2[1024];
 
@@ -230,10 +292,10 @@
         assert_se(r == -EBADF);
 }
 
-static void test_copy_bytes_regular_file(const char *src, bool try_reflink, uint64_t max_bytes) {
+static void test_copy_bytes_regular_file_one(const char *src, bool try_reflink, uint64_t max_bytes) {
         char fn2[] = "/tmp/test-copy-file-XXXXXX";
         char fn3[] = "/tmp/test-copy-file-XXXXXX";
-        _cleanup_close_ int fd = -1, fd2 = -1, fd3 = -1;
+        _cleanup_close_ int fd = -EBADF, fd2 = -EBADF, fd3 = -EBADF;
         int r;
         struct stat buf, buf2, buf3;
 
@@ -286,7 +348,16 @@
         unlink(fn3);
 }
 
-static void test_copy_atomic(void) {
+TEST(copy_bytes_regular_file) {
+        test_copy_bytes_regular_file_one(saved_argv[0], false, UINT64_MAX);
+        test_copy_bytes_regular_file_one(saved_argv[0], true, UINT64_MAX);
+        test_copy_bytes_regular_file_one(saved_argv[0], false, 1000); /* smaller than copy buffer size */
+        test_copy_bytes_regular_file_one(saved_argv[0], true, 1000);
+        test_copy_bytes_regular_file_one(saved_argv[0], false, 32000); /* larger than copy buffer size */
+        test_copy_bytes_regular_file_one(saved_argv[0], true, 32000);
+}
+
+TEST(copy_atomic) {
         _cleanup_(rm_rf_physical_and_freep) char *p = NULL;
         const char *q;
         int r;
@@ -304,7 +375,7 @@
         assert_se(copy_file_atomic("/etc/fstab", q, 0644, 0, 0, COPY_REPLACE) >= 0);
 }
 
-static void test_copy_proc(void) {
+TEST(copy_proc) {
         _cleanup_(rm_rf_physical_and_freep) char *p = NULL;
         _cleanup_free_ char *f = NULL, *a = NULL, *b = NULL;
 
@@ -320,21 +391,60 @@
         assert_se(!isempty(a));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+TEST_RET(copy_holes) {
+        char fn[] = "/var/tmp/test-copy-hole-fd-XXXXXX";
+        char fn_copy[] = "/var/tmp/test-copy-hole-fd-XXXXXX";
+        struct stat stat;
+        off_t blksz;
+        int r, fd, fd_copy;
+        char *buf;
 
-        test_copy_file();
-        test_copy_file_fd();
-        test_copy_tree();
-        test_copy_bytes();
-        test_copy_bytes_regular_file(argv[0], false, UINT64_MAX);
-        test_copy_bytes_regular_file(argv[0], true, UINT64_MAX);
-        test_copy_bytes_regular_file(argv[0], false, 1000); /* smaller than copy buffer size */
-        test_copy_bytes_regular_file(argv[0], true, 1000);
-        test_copy_bytes_regular_file(argv[0], false, 32000); /* larger than copy buffer size */
-        test_copy_bytes_regular_file(argv[0], true, 32000);
-        test_copy_atomic();
-        test_copy_proc();
+        fd = mkostemp_safe(fn);
+        assert_se(fd >= 0);
+
+        fd_copy = mkostemp_safe(fn_copy);
+        assert_se(fd_copy >= 0);
+
+        r = RET_NERRNO(fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 1));
+        if (ERRNO_IS_NOT_SUPPORTED(r))
+                return log_tests_skipped("Filesystem doesn't support hole punching");
+        assert_se(r >= 0);
+
+        assert_se(fstat(fd, &stat) >= 0);
+        blksz = stat.st_blksize;
+        buf = alloca_safe(blksz);
+        memset(buf, 1, blksz);
+
+        /* We need to make sure to create hole in multiples of the block size, otherwise filesystems (btrfs)
+         * might silently truncate/extend the holes. */
+
+        assert_se(lseek(fd, blksz, SEEK_CUR) >= 0);
+        assert_se(write(fd, buf, blksz) >= 0);
+        assert_se(lseek(fd, 0, SEEK_END) == 2 * blksz);
+        /* Only ftruncate() can create holes at the end of a file. */
+        assert_se(ftruncate(fd, 3 * blksz) >= 0);
+        assert_se(lseek(fd, 0, SEEK_SET) >= 0);
+
+        assert_se(copy_bytes(fd, fd_copy, UINT64_MAX, COPY_HOLES) >= 0);
+
+        /* Test that the hole starts at the beginning of the file. */
+        assert_se(lseek(fd_copy, 0, SEEK_HOLE) == 0);
+        /* Test that the hole has the expected size. */
+        assert_se(lseek(fd_copy, 0, SEEK_DATA) == blksz);
+        assert_se(lseek(fd_copy, blksz, SEEK_HOLE) == 2 * blksz);
+        assert_se(lseek(fd_copy, 2 * blksz, SEEK_DATA) < 0 && errno == ENXIO);
+
+        /* Test that the copied file has the correct size. */
+        assert_se(fstat(fd_copy, &stat) >= 0);
+        assert_se(stat.st_size == 3 * blksz);
+
+        close(fd);
+        close(fd_copy);
+
+        unlink(fn);
+        unlink(fn_copy);
 
         return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-coredump-util.c b/src/test/test-coredump-util.c
index f9a44b2..40b68df 100644
--- a/src/test/test-coredump-util.c
+++ b/src/test/test-coredump-util.c
@@ -5,14 +5,12 @@
 #include "macro.h"
 #include "tests.h"
 
-static void test_coredump_filter_to_from_string(void) {
-        log_info("/* %s */", __func__);
-
+TEST(coredump_filter_to_from_string) {
         for (CoredumpFilter i = 0; i < _COREDUMP_FILTER_MAX; i++) {
                 const char *n;
 
                 assert_se(n = coredump_filter_to_string(i));
-                log_info("0x%x\t%s", 1<<i, n);
+                log_info("0x%x\t%s", 1u << i, n);
                 assert_se(coredump_filter_from_string(n) == i);
 
                 uint64_t f;
@@ -21,9 +19,7 @@
         }
 }
 
-static void test_coredump_filter_mask_from_string(void) {
-        log_info("/* %s */", __func__);
-
+TEST(coredump_filter_mask_from_string) {
         uint64_t f;
         assert_se(coredump_filter_mask_from_string("default", &f) == 0);
         assert_se(f == COREDUMP_FILTER_MASK_DEFAULT);
@@ -68,11 +64,4 @@
                                 1 << COREDUMP_FILTER_SHARED_DAX)));
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_INFO);
-
-        test_coredump_filter_to_from_string();
-        test_coredump_filter_mask_from_string();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-cpu-set-util.c b/src/test/test-cpu-set-util.c
index 0cfc883..a0660f5 100644
--- a/src/test/test-cpu-set-util.c
+++ b/src/test/test-cpu-set-util.c
@@ -3,15 +3,14 @@
 #include "alloc-util.h"
 #include "cpu-set-util.h"
 #include "string-util.h"
+#include "tests.h"
 #include "macro.h"
 
-static void test_parse_cpu_set(void) {
+TEST(parse_cpu_set) {
         CPUSet c = {};
         _cleanup_free_ char *str = NULL;
         int cpu;
 
-        log_info("/* %s */", __func__);
-
         /* Single value */
         assert_se(parse_cpu_set_full("0", &c, true, NULL, "fake", 1, "CPUAffinity") >= 0);
         assert_se(c.set);
@@ -210,12 +209,10 @@
         cpu_set_reset(&c);
 }
 
-static void test_parse_cpu_set_extend(void) {
+TEST(parse_cpu_set_extend) {
         CPUSet c = {};
         _cleanup_free_ char *s1 = NULL, *s2 = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_cpu_set_extend("1 3", &c, true, NULL, "fake", 1, "CPUAffinity") == 1);
         assert_se(CPU_COUNT_S(c.allocated, c.set) == 2);
         assert_se(s1 = cpu_set_to_string(&c));
@@ -232,12 +229,10 @@
         log_info("cpu_set_to_string: (null)");
 }
 
-static void test_cpu_set_to_from_dbus(void) {
+TEST(cpu_set_to_from_dbus) {
         _cleanup_(cpu_set_reset) CPUSet c = {}, c2 = {};
         _cleanup_free_ char *s = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_cpu_set_extend("1 3 8 100-200", &c, true, NULL, "fake", 1, "CPUAffinity") == 1);
         assert_se(s = cpu_set_to_string(&c));
         log_info("cpu_set_to_string: %s", s);
@@ -256,7 +251,7 @@
 
         assert_se(allocated <= sizeof expected);
         assert_se(allocated >= DIV_ROUND_UP(201u, 8u)); /* We need at least 201 bits for our mask */
-        assert(memcmp(array, expected, allocated) == 0);
+        assert_se(memcmp(array, expected, allocated) == 0);
 
         assert_se(cpu_set_from_dbus(array, allocated, &c2) == 0);
         assert_se(c2.set);
@@ -264,15 +259,15 @@
         assert_se(memcmp(c.set, c2.set, c.allocated) == 0);
 }
 
-static void test_cpus_in_affinity_mask(void) {
+TEST(cpus_in_affinity_mask) {
         int r;
 
         r = cpus_in_affinity_mask();
-        assert(r > 0);
+        assert_se(r > 0);
         log_info("cpus_in_affinity_mask: %d", r);
 }
 
-int main(int argc, char *argv[]) {
+TEST(print_cpu_alloc_size) {
         log_info("CPU_ALLOC_SIZE(1) = %zu", CPU_ALLOC_SIZE(1));
         log_info("CPU_ALLOC_SIZE(9) = %zu", CPU_ALLOC_SIZE(9));
         log_info("CPU_ALLOC_SIZE(64) = %zu", CPU_ALLOC_SIZE(64));
@@ -280,11 +275,6 @@
         log_info("CPU_ALLOC_SIZE(1024) = %zu", CPU_ALLOC_SIZE(1024));
         log_info("CPU_ALLOC_SIZE(1025) = %zu", CPU_ALLOC_SIZE(1025));
         log_info("CPU_ALLOC_SIZE(8191) = %zu", CPU_ALLOC_SIZE(8191));
-
-        test_parse_cpu_set();
-        test_parse_cpu_set_extend();
-        test_cpus_in_affinity_mask();
-        test_cpu_set_to_from_dbus();
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-creds.c b/src/test/test-creds.c
new file mode 100644
index 0000000..44022e7
--- /dev/null
+++ b/src/test/test-creds.c
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "creds-util.h"
+#include "fileio.h"
+#include "path-util.h"
+#include "rm-rf.h"
+#include "tests.h"
+#include "tmpfile-util.h"
+
+TEST(read_credential_strings) {
+        _cleanup_free_ char *x = NULL, *y = NULL, *saved = NULL, *p = NULL;
+        _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+
+        const char *e = getenv("CREDENTIALS_DIRECTORY");
+        if (e)
+                assert_se(saved = strdup(e));
+
+        assert_se(read_credential_strings_many("foo", &x, "bar", &y) == -ENXIO);
+        assert_se(x == NULL);
+        assert_se(y == NULL);
+
+        assert_se(mkdtemp_malloc(NULL, &tmp) >= 0);
+
+        assert_se(setenv("CREDENTIALS_DIRECTORY", tmp, /* override= */ true) >= 0);
+
+        assert_se(read_credential_strings_many("foo", &x, "bar", &y) == -ENOENT);
+        assert_se(x == NULL);
+        assert_se(y == NULL);
+
+        assert_se(p = path_join(tmp, "bar"));
+        assert_se(write_string_file(p, "piff", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_AVOID_NEWLINE) >= 0);
+
+        assert_se(read_credential_strings_many("foo", &x, "bar", &y) == -ENOENT);
+        assert_se(x == NULL);
+        assert_se(streq(y, "piff"));
+
+        assert_se(write_string_file(p, "paff", WRITE_STRING_FILE_TRUNCATE|WRITE_STRING_FILE_AVOID_NEWLINE) >= 0);
+
+        assert_se(read_credential_strings_many("foo", &x, "bar", &y) == -ENOENT);
+        assert_se(x == NULL);
+        assert_se(streq(y, "piff"));
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "foo"));
+        assert_se(write_string_file(p, "knurz", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_AVOID_NEWLINE) >= 0);
+
+        assert_se(read_credential_strings_many("foo", &x, "bar", &y) >= 0);
+        assert_se(streq(x, "knurz"));
+        assert_se(streq(y, "piff"));
+
+        y = mfree(y);
+
+        assert_se(read_credential_strings_many("foo", &x, "bar", &y) >= 0);
+        assert_se(streq(x, "knurz"));
+        assert_se(streq(y, "paff"));
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "bazz"));
+        assert_se(f = fopen(p, "w"));
+        assert_se(fwrite("x\0y", 1, 3, f) == 3); /* embedded NUL byte should result in EBADMSG when reading back with read_credential_strings_many() */
+        f = safe_fclose(f);
+
+        assert_se(read_credential_strings_many("bazz", &x, "foo", &y) == -EBADMSG);
+        assert_se(streq(x, "knurz"));
+        assert_se(streq(y, "paff"));
+
+        if (saved)
+                assert_se(setenv("CREDENTIALS_DIRECTORY", saved, /* override= */ 1) >= 0);
+        else
+                assert_se(unsetenv("CREDENTIALS_DIRECTORY") >= 0);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-cryptolib.c b/src/test/test-cryptolib.c
new file mode 100644
index 0000000..ef39bda
--- /dev/null
+++ b/src/test/test-cryptolib.c
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "gcrypt-util.h"
+#include "macro.h"
+#include "openssl-util.h"
+#include "string-util.h"
+#include "tests.h"
+
+TEST(string_hashsum) {
+        _cleanup_free_ char *out1 = NULL, *out2 = NULL, *out3 = NULL, *out4 = NULL;
+
+        assert_se(string_hashsum("asdf", 4,
+                                 OPENSSL_OR_GCRYPT(EVP_sha224(), GCRY_MD_SHA224),
+                                 &out1) == 0);
+        /* echo -n 'asdf' | sha224sum - */
+        assert_se(streq(out1, "7872a74bcbf298a1e77d507cd95d4f8d96131cbbd4cdfc571e776c8a"));
+
+        assert_se(string_hashsum("asdf", 4,
+                                 OPENSSL_OR_GCRYPT(EVP_sha256(), GCRY_MD_SHA256),
+                                 &out2) == 0);
+        /* echo -n 'asdf' | sha256sum - */
+        assert_se(streq(out2, "f0e4c2f76c58916ec258f246851bea091d14d4247a2fc3e18694461b1816e13b"));
+
+        assert_se(string_hashsum("", 0,
+                                 OPENSSL_OR_GCRYPT(EVP_sha224(), GCRY_MD_SHA224),
+                                 &out3) == 0);
+        /* echo -n '' | sha224sum - */
+        assert_se(streq(out3, "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f"));
+
+        assert_se(string_hashsum("", 0,
+                                 OPENSSL_OR_GCRYPT(EVP_sha256(), GCRY_MD_SHA256),
+                                 &out4) == 0);
+        /* echo -n '' | sha256sum - */
+        assert_se(streq(out4, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"));
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-data-fd-util.c b/src/test/test-data-fd-util.c
index 22a57b5..c0febec 100644
--- a/src/test/test-data-fd-util.c
+++ b/src/test/test-data-fd-util.c
@@ -3,6 +3,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <unistd.h>
 
 #include "data-fd-util.h"
 #include "fd-util.h"
@@ -46,7 +47,7 @@
         fd = safe_close(fd);
 }
 
-static void test_acquire_data_fd(void) {
+TEST(acquire_data_fd) {
         test_acquire_data_fd_one(0);
         test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL);
         test_acquire_data_fd_one(ACQUIRE_NO_MEMFD);
@@ -78,9 +79,9 @@
         }
 }
 
-static void test_copy_data_fd(void) {
-        _cleanup_close_ int fd1 = -1, fd2 = -1;
-        _cleanup_(close_pairp) int sfd[2] = { -1, -1 };
+TEST(copy_data_fd) {
+        _cleanup_close_ int fd1 = -EBADF, fd2 = -EBADF;
+        _cleanup_(close_pairp) int sfd[2] = PIPE_EBADF;
         _cleanup_(sigkill_waitp) pid_t pid = -1;
         int r;
 
@@ -144,11 +145,4 @@
         assert_se(read(fd2, &j, sizeof(j)) == 0);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_acquire_data_fd();
-        test_copy_data_fd();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-date.c b/src/test/test-date.c
index 47b7096..097066b 100644
--- a/src/test/test-date.c
+++ b/src/test/test-date.c
@@ -15,12 +15,9 @@
         log_info("\"%s\" → \"%s\"", p, buf);
 
         assert_se(parse_timestamp(buf, &q) >= 0);
-        if (q != t) {
-                char tmp[FORMAT_TIMESTAMP_MAX];
-
+        if (q != t)
                 log_error("round-trip failed: \"%s\" → \"%s\"",
-                          buf, format_timestamp_style(tmp, sizeof(tmp), q, TIMESTAMP_US));
-        }
+                          buf, FORMAT_TIMESTAMP_STYLE(q, TIMESTAMP_US));
         assert_se(q == t);
 
         assert_se(format_timestamp_relative(buf_relative, sizeof(buf_relative), t));
@@ -76,6 +73,8 @@
         test_one("12-10-03 12:13");
         test_one("2012-12-30 18:42");
         test_one("2012-10-02");
+        test_one("Mar 12 12:01:01");
+        test_one("Mar 12 12:01:01.687197");
         test_one("Tue 2012-10-02");
         test_one("yesterday");
         test_one("today");
@@ -92,7 +91,7 @@
         test_should_parse("1970-1-1 UTC");
         test_should_pass("1970-1-1 00:00:01 UTC");
         test_should_fail("1969-12-31 UTC");
-        test_should_fail("-100y");
+        test_should_fail("-1000y");
         test_should_fail("today UTC UTC");
         test_should_fail("now Asia/Seoul");
         test_should_fail("+2d Asia/Seoul");
diff --git a/src/test/test-device-nodes.c b/src/test/test-device-nodes.c
index 7ba05b5..36fa2ce 100644
--- a/src/test/test-device-nodes.c
+++ b/src/test/test-device-nodes.c
@@ -6,6 +6,7 @@
 #include "alloc-util.h"
 #include "device-nodes.h"
 #include "string-util.h"
+#include "tests.h"
 
 /* helpers for test_encode_devnode_name */
 static char *do_encode_string(const char *in) {
@@ -24,7 +25,7 @@
         return streq(encoded, expected);
 }
 
-static void test_encode_devnode_name(void) {
+TEST(encode_devnode_name) {
         assert_se(expect_encoded_as("systemd sucks", "systemd\\x20sucks"));
         assert_se(expect_encoded_as("pinkiepie", "pinkiepie"));
         assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8"));
@@ -34,8 +35,4 @@
         assert_se(expect_encoded_as("QEMU    ", "QEMU\\x20\\x20\\x20\\x20"));
 }
 
-int main(int argc, char *argv[]) {
-        test_encode_devnode_name();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-devnum-util.c b/src/test/test-devnum-util.c
new file mode 100644
index 0000000..66f4ac9
--- /dev/null
+++ b/src/test/test-devnum-util.c
@@ -0,0 +1,124 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/stat.h>
+
+#include "devnum-util.h"
+#include "path-util.h"
+#include "stat-util.h"
+#include "tests.h"
+
+TEST(parse_devnum) {
+        dev_t dev;
+
+        assert_se(parse_devnum("", &dev) == -EINVAL);
+        assert_se(parse_devnum("junk", &dev) == -EINVAL);
+        assert_se(parse_devnum("0", &dev) == -EINVAL);
+        assert_se(parse_devnum("5", &dev) == -EINVAL);
+        assert_se(parse_devnum("5:", &dev) == -EINVAL);
+        assert_se(parse_devnum(":5", &dev) == -EINVAL);
+        assert_se(parse_devnum("-1:-1", &dev) == -EINVAL);
+#if SIZEOF_DEV_T < 8
+        assert_se(parse_devnum("4294967295:4294967295", &dev) == -EINVAL);
+#endif
+        assert_se(parse_devnum("8:11", &dev) >= 0 && major(dev) == 8 && minor(dev) == 11);
+        assert_se(parse_devnum("0:0", &dev) >= 0 && major(dev) == 0 && minor(dev) == 0);
+}
+
+TEST(device_major_minor_valid) {
+        /* on glibc dev_t is 64bit, even though in the kernel it is only 32bit */
+        assert_cc(sizeof(dev_t) == sizeof(uint64_t));
+
+        assert_se(DEVICE_MAJOR_VALID(0U));
+        assert_se(DEVICE_MINOR_VALID(0U));
+
+        assert_se(DEVICE_MAJOR_VALID(1U));
+        assert_se(DEVICE_MINOR_VALID(1U));
+
+        assert_se(!DEVICE_MAJOR_VALID(-1U));
+        assert_se(!DEVICE_MINOR_VALID(-1U));
+
+        assert_se(DEVICE_MAJOR_VALID(1U << 10));
+        assert_se(DEVICE_MINOR_VALID(1U << 10));
+
+        assert_se(DEVICE_MAJOR_VALID((1U << 12) - 1));
+        assert_se(DEVICE_MINOR_VALID((1U << 20) - 1));
+
+        assert_se(!DEVICE_MAJOR_VALID((1U << 12)));
+        assert_se(!DEVICE_MINOR_VALID((1U << 20)));
+
+        assert_se(!DEVICE_MAJOR_VALID(1U << 25));
+        assert_se(!DEVICE_MINOR_VALID(1U << 25));
+
+        assert_se(!DEVICE_MAJOR_VALID(UINT32_MAX));
+        assert_se(!DEVICE_MINOR_VALID(UINT32_MAX));
+
+        assert_se(!DEVICE_MAJOR_VALID(UINT64_MAX));
+        assert_se(!DEVICE_MINOR_VALID(UINT64_MAX));
+
+        assert_se(DEVICE_MAJOR_VALID(major(0)));
+        assert_se(DEVICE_MINOR_VALID(minor(0)));
+}
+
+static void test_device_path_make_canonical_one(const char *path) {
+        _cleanup_free_ char *resolved = NULL, *raw = NULL;
+        struct stat st;
+        dev_t devno;
+        mode_t mode;
+        int r;
+
+        log_debug("> %s", path);
+
+        if (stat(path, &st) < 0) {
+                assert_se(errno == ENOENT);
+                log_notice("Path %s not found, skipping test", path);
+                return;
+        }
+
+        r = device_path_make_canonical(st.st_mode, st.st_rdev, &resolved);
+        if (r == -ENOENT) {
+                /* maybe /dev/char/x:y and /dev/block/x:y are missing in this test environment, because we
+                 * run in a container or so? */
+                log_notice("Device %s cannot be resolved, skipping test", path);
+                return;
+        }
+
+        assert_se(r >= 0);
+        assert_se(path_equal(path, resolved));
+
+        assert_se(device_path_make_major_minor(st.st_mode, st.st_rdev, &raw) >= 0);
+        assert_se(device_path_parse_major_minor(raw, &mode, &devno) >= 0);
+
+        assert_se(st.st_rdev == devno);
+        assert_se((st.st_mode & S_IFMT) == (mode & S_IFMT));
+}
+
+TEST(device_path_make_canonical) {
+        test_device_path_make_canonical_one("/dev/null");
+        test_device_path_make_canonical_one("/dev/zero");
+        test_device_path_make_canonical_one("/dev/full");
+        test_device_path_make_canonical_one("/dev/random");
+        test_device_path_make_canonical_one("/dev/urandom");
+        test_device_path_make_canonical_one("/dev/tty");
+
+        if (is_device_node("/run/systemd/inaccessible/blk") > 0) {
+                test_device_path_make_canonical_one("/run/systemd/inaccessible/chr");
+                test_device_path_make_canonical_one("/run/systemd/inaccessible/blk");
+        }
+}
+
+static void test_devnum_format_str_one(dev_t devnum, const char *s) {
+        dev_t x;
+
+        assert_se(streq(FORMAT_DEVNUM(devnum), s));
+        assert_se(parse_devnum(s, &x) >= 0);
+        assert_se(x == devnum);
+}
+
+TEST(devnum_format_str) {
+        test_devnum_format_str_one(makedev(0, 0), "0:0");
+        test_devnum_format_str_one(makedev(1, 2), "1:2");
+        test_devnum_format_str_one(makedev(99, 100), "99:100");
+        test_devnum_format_str_one(makedev(4095, 1048575), "4095:1048575");
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-dlopen-so.c b/src/test/test-dlopen-so.c
index ea2ef31..55728c2 100644
--- a/src/test/test-dlopen-so.c
+++ b/src/test/test-dlopen-so.c
@@ -5,10 +5,13 @@
 
 #include "bpf-dlopen.h"
 #include "cryptsetup-util.h"
+#include "elf-util.h"
 #include "idn-util.h"
 #include "libfido2-util.h"
 #include "macro.h"
 #include "main-func.h"
+#include "pcre2-util.h"
+#include "pkcs11-util.h"
 #include "pwquality-util.h"
 #include "qrcode-util.h"
 #include "tests.h"
@@ -49,6 +52,19 @@
         assert_se(dlopen_bpf() >= 0);
 #endif
 
+#if HAVE_ELFUTILS
+        assert_se(dlopen_dw() >= 0);
+        assert_se(dlopen_elf() >= 0);
+#endif
+
+#if HAVE_PCRE2
+        assert_se(dlopen_pcre2() >= 0);
+#endif
+
+#if HAVE_P11KIT
+        assert_se(dlopen_p11kit() >= 0);
+#endif
+
         return 0;
 }
 
diff --git a/src/test/test-dns-domain.c b/src/test/test-dns-domain.c
index 2df2380..6c107e2 100644
--- a/src/test/test-dns-domain.c
+++ b/src/test/test-dns-domain.c
@@ -32,9 +32,7 @@
                 assert_se(streq(buffer, expect));
 }
 
-static void test_dns_label_unescape(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_label_unescape) {
         test_dns_label_unescape_one("hallo", "hallo", 6, 5, 5);
         test_dns_label_unescape_one("hallo", "hallo", 4, -ENOBUFS, -ENOBUFS);
         test_dns_label_unescape_one("", "", 10, 0, 0);
@@ -63,18 +61,18 @@
         uint8_t buffer[buffer_sz];
         int r;
 
-        log_info("%s, %s, %zu, →%d", what, expect, buffer_sz, ret);
+        log_info("%s, %s, %zu, →%d", what, strnull(expect), buffer_sz, ret);
 
         r = dns_name_to_wire_format(what, buffer, buffer_sz, false);
         assert_se(r == ret);
 
-        if (r < 0)
-                return;
-
-        assert_se(!memcmp(buffer, expect, r));
+        if (r >= 0) {
+                assert(expect);  /* for gcc */
+                assert_se(memcmp(buffer, expect, r) == 0);
+        }
 }
 
-static void test_dns_name_to_wire_format(void) {
+TEST(dns_name_to_wire_format) {
         static const char out0[] = { 0 };
         static const char out1[] = { 3, 'f', 'o', 'o', 0 };
         static const char out2[] = { 5, 'h', 'a', 'l', 'l', 'o', 3, 'f', 'o', 'o', 3, 'b', 'a', 'r', 0 };
@@ -106,8 +104,6 @@
                                      9, 'a', '1', '2', '3', '4', '5', '6', '7', '8',
                                      3, 'a', '1', '2', 0 };
 
-        log_info("/* %s */", __func__);
-
         test_dns_name_to_wire_format_one("", out0, sizeof(out0), sizeof(out0));
 
         test_dns_name_to_wire_format_one("foo", out1, sizeof(out1), sizeof(out1));
@@ -143,9 +139,7 @@
                 assert_se(streq(buffer, expect2));
 }
 
-static void test_dns_label_unescape_suffix(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_label_unescape_suffix) {
         test_dns_label_unescape_suffix_one("hallo", "hallo", "", 6, 5, 0);
         test_dns_label_unescape_suffix_one("hallo", "hallo", "", 4, -ENOBUFS, -ENOBUFS);
         test_dns_label_unescape_suffix_one("", "", "", 10, 0, 0);
@@ -171,7 +165,7 @@
         _cleanup_free_ char *t = NULL;
         int r;
 
-        log_info("%s, %zu, %s, →%d", what, l, expect, ret);
+        log_info("%s, %zu, %s, →%d", what, l, strnull(expect), ret);
 
         r = dns_label_escape_new(what, l, &t);
         assert_se(r == ret);
@@ -182,9 +176,7 @@
         assert_se(streq_ptr(expect, t));
 }
 
-static void test_dns_label_escape(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_label_escape) {
         test_dns_label_escape_one("", 0, NULL, -EINVAL);
         test_dns_label_escape_one("hallo", 5, "hallo", 5);
         test_dns_label_escape_one("hallo", 6, "hallo\\000", 9);
@@ -204,7 +196,7 @@
         assert_se(streq_ptr(expect, t));
 }
 
-static void test_dns_name_normalize(void) {
+TEST(dns_name_normalize) {
         test_dns_name_normalize_one("", ".", 0);
         test_dns_name_normalize_one("f", "f", 0);
         test_dns_name_normalize_one("f.waldi", "f.waldi", 0);
@@ -226,7 +218,7 @@
         assert_se(r == ret);
 }
 
-static void test_dns_name_equal(void) {
+TEST(dns_name_equal) {
         test_dns_name_equal_one("", "", true);
         test_dns_name_equal_one("x", "x", true);
         test_dns_name_equal_one("x", "x.", true);
@@ -254,7 +246,7 @@
                 assert_se(r == ret);
 }
 
-static void test_dns_name_between(void) {
+TEST(dns_name_between) {
         /* see https://tools.ietf.org/html/rfc4034#section-6.1
            Note that we use "\033.z.example" in stead of "\001.z.example" as we
            consider the latter invalid */
@@ -279,7 +271,7 @@
         assert_se(dns_name_endswith(a, b) == ret);
 }
 
-static void test_dns_name_endswith(void) {
+TEST(dns_name_endswith) {
         test_dns_name_endswith_one("", "", true);
         test_dns_name_endswith_one("", "xxx", false);
         test_dns_name_endswith_one("xxx", "", true);
@@ -301,7 +293,7 @@
         assert_se(dns_name_startswith(a, b) == ret);
 }
 
-static void test_dns_name_startswith(void) {
+TEST(dns_name_startswith) {
         test_dns_name_startswith_one("", "", true);
         test_dns_name_startswith_one("", "xxx", false);
         test_dns_name_startswith_one("xxx", "", true);
@@ -316,7 +308,7 @@
         test_dns_name_startswith_one("x.y", "X", true);
 }
 
-static void test_dns_name_is_root(void) {
+TEST(dns_name_is_root) {
         assert_se(dns_name_is_root(""));
         assert_se(dns_name_is_root("."));
         assert_se(!dns_name_is_root("xxx"));
@@ -324,7 +316,7 @@
         assert_se(!dns_name_is_root(".."));
 }
 
-static void test_dns_name_is_single_label(void) {
+TEST(dns_name_is_single_label) {
         assert_se(!dns_name_is_single_label(""));
         assert_se(!dns_name_is_single_label("."));
         assert_se(!dns_name_is_single_label(".."));
@@ -346,7 +338,7 @@
         assert_se(in_addr_equal(familya, &a, &b));
 }
 
-static void test_dns_name_reverse(void) {
+TEST(dns_name_reverse) {
         test_dns_name_reverse_one("47.11.8.15", "15.8.11.47.in-addr.arpa");
         test_dns_name_reverse_one("fe80::47", "7.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa");
         test_dns_name_reverse_one("127.0.0.1", "1.0.0.127.in-addr.arpa");
@@ -360,7 +352,7 @@
         assert_se(streq_ptr(p, result));
 }
 
-static void test_dns_name_concat(void) {
+TEST(dns_name_concat) {
         test_dns_name_concat_one("", "", 0, ".");
         test_dns_name_concat_one(".", "", 0, ".");
         test_dns_name_concat_one("", ".", 0, ".");
@@ -382,9 +374,7 @@
         assert_se(dns_name_is_valid_ldh(s) == ret_ldh);
 }
 
-static void test_dns_name_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_is_valid) {
         test_dns_name_is_valid_one("foo",               1, 1);
         test_dns_name_is_valid_one("foo.",              1, 1);
         test_dns_name_is_valid_one("foo..",             0, 0);
@@ -434,9 +424,7 @@
         test_dns_name_is_valid_one("a123456789a123456789a123456789a123456789a123456789a123456789a12", 1, 1);
 }
 
-static void test_dns_service_name_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_service_name_is_valid) {
         assert_se(dns_service_name_is_valid("Lennart's Compüter"));
         assert_se(dns_service_name_is_valid("piff.paff"));
 
@@ -447,9 +435,7 @@
         assert_se(!dns_service_name_is_valid("this is an overly long string that is certainly longer than 63 characters"));
 }
 
-static void test_dns_srv_type_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_srv_type_is_valid) {
         assert_se(dns_srv_type_is_valid("_http._tcp"));
         assert_se(dns_srv_type_is_valid("_foo-bar._tcp"));
         assert_se(dns_srv_type_is_valid("_w._udp"));
@@ -471,9 +457,7 @@
         assert_se(!dns_srv_type_is_valid("_piep._foo._udp"));
 }
 
-static void test_dnssd_srv_type_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dnssd_srv_type_is_valid) {
         assert_se(dnssd_srv_type_is_valid("_http._tcp"));
         assert_se(dnssd_srv_type_is_valid("_foo-bar._tcp"));
         assert_se(dnssd_srv_type_is_valid("_w._udp"));
@@ -499,7 +483,7 @@
 static void test_dns_service_join_one(const char *a, const char *b, const char *c, int r, const char *d) {
         _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL, *t = NULL;
 
-        log_info("%s, %s, %s, →%d, %s", a, b, c, r, d);
+        log_info("%s, %s, %s, →%d, %s", strnull(a), strnull(b), strnull(c), r, strnull(d));
 
         assert_se(dns_service_join(a, b, c, &t) == r);
         assert_se(streq_ptr(t, d));
@@ -513,9 +497,7 @@
         assert_se(dns_name_equal(c, z) > 0);
 }
 
-static void test_dns_service_join(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_service_join) {
         test_dns_service_join_one("", "", "", -EINVAL, NULL);
         test_dns_service_join_one("", "_http._tcp", "", -EINVAL, NULL);
         test_dns_service_join_one("", "_http._tcp", "foo", -EINVAL, NULL);
@@ -533,7 +515,7 @@
 static void test_dns_service_split_one(const char *joined, const char *a, const char *b, const char *c, int r) {
         _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL, *t = NULL;
 
-        log_info("%s, %s, %s, %s, →%d", joined, a, b, c, r);
+        log_info("%s, %s, %s, %s, →%d", joined, strnull(a), strnull(b), strnull(c), r);
 
         assert_se(dns_service_split(joined, &x, &y, &z) == r);
         assert_se(streq_ptr(x, a));
@@ -550,9 +532,7 @@
                 assert_se(!x && dns_name_equal(z, joined) > 0);
 }
 
-static void test_dns_service_split(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_service_split) {
         test_dns_service_split_one("", NULL, NULL, ".", 0);
         test_dns_service_split_one("foo", NULL, NULL, "foo", 0);
         test_dns_service_split_one("foo.bar", NULL, NULL, "foo.bar", 0);
@@ -560,20 +540,19 @@
         test_dns_service_split_one("_foo._bar", NULL, "_foo._bar", ".", 0);
         test_dns_service_split_one("_meh._foo._bar", "_meh", "_foo._bar", ".", 0);
         test_dns_service_split_one("Wuff\\032Wuff._foo._bar.waldo.com", "Wuff Wuff", "_foo._bar", "waldo.com", 0);
+        test_dns_service_split_one("_Q._Q-------------------------------------------------------------", NULL, "_Q._Q-------------------------------------------------------------", ".", 0);
 }
 
 static void test_dns_name_change_suffix_one(const char *name, const char *old_suffix, const char *new_suffix, int r, const char *result) {
         _cleanup_free_ char *s = NULL;
 
-        log_info("%s, %s, %s, →%s", name, old_suffix, new_suffix, result);
+        log_info("%s, %s, %s, →%s", name, old_suffix, new_suffix, strnull(result));
 
         assert_se(dns_name_change_suffix(name, old_suffix, new_suffix, &s) == r);
         assert_se(streq_ptr(s, result));
 }
 
-static void test_dns_name_change_suffix(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_change_suffix) {
         test_dns_name_change_suffix_one("foo.bar", "bar", "waldo", 1, "foo.waldo");
         test_dns_name_change_suffix_one("foo.bar.waldi.quux", "foo.bar.waldi.quux", "piff.paff", 1, "piff.paff");
         test_dns_name_change_suffix_one("foo.bar.waldi.quux", "bar.waldi.quux", "piff.paff", 1, "foo.piff.paff");
@@ -588,15 +567,13 @@
 static void test_dns_name_suffix_one(const char *name, unsigned n_labels, const char *result, int ret) {
         const char *p = NULL;
 
-        log_info("%s, %d, →%s, %d", name, n_labels, result, ret);
+        log_info("%s, %u, → %s, %d", name, n_labels, strnull(result), ret);
 
         assert_se(ret == dns_name_suffix(name, n_labels, &p));
         assert_se(streq_ptr(p, result));
 }
 
-static void test_dns_name_suffix(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_suffix) {
         test_dns_name_suffix_one("foo.bar", 2, "foo.bar", 0);
         test_dns_name_suffix_one("foo.bar", 1, "bar", 1);
         test_dns_name_suffix_one("foo.bar", 0, "", 2);
@@ -619,9 +596,7 @@
         assert_se(dns_name_count_labels(name) == n);
 }
 
-static void test_dns_name_count_labels(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_count_labels) {
         test_dns_name_count_labels_one("foo.bar.quux.", 3);
         test_dns_name_count_labels_one("foo.bar.quux", 3);
         test_dns_name_count_labels_one("foo.bar.", 2);
@@ -639,9 +614,7 @@
         assert_se(dns_name_equal_skip(a, n_labels, b) == ret);
 }
 
-static void test_dns_name_equal_skip(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_equal_skip) {
         test_dns_name_equal_skip_one("foo", 0, "bar", 0);
         test_dns_name_equal_skip_one("foo", 0, "foo", 1);
         test_dns_name_equal_skip_one("foo", 1, "foo", 0);
@@ -668,9 +641,7 @@
         test_dns_name_equal_skip_one("", 2, "foo", 0);
 }
 
-static void test_dns_name_compare_func(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_compare_func) {
         assert_se(dns_name_compare_func("", "") == 0);
         assert_se(dns_name_compare_func("", ".") == 0);
         assert_se(dns_name_compare_func(".", "") == 0);
@@ -692,9 +663,7 @@
         assert_se(streq(c, result));
 }
 
-static void test_dns_name_common_suffix(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_common_suffix) {
         test_dns_name_common_suffix_one("", "", "");
         test_dns_name_common_suffix_one("foo", "", "");
         test_dns_name_common_suffix_one("", "foo", "");
@@ -723,13 +692,8 @@
                 assert_se(dns_name_equal(buf, result) == 1);
 }
 
-static void test_dns_name_apply_idna(void) {
-#if HAVE_LIBIDN2 || HAVE_LIBIDN
-        const int ret = 1;
-#else
-        const int ret = 0;
-#endif
-        log_info("/* %s */", __func__);
+TEST(dns_name_apply_idna) {
+        const int ret = HAVE_LIBIDN2 | HAVE_LIBIDN;
 
         /* IDNA2008 forbids names with hyphens in third and fourth positions
          * (https://tools.ietf.org/html/rfc5891#section-4.2.3.1).
@@ -739,11 +703,7 @@
          * labels. If registrars follow IDNA2008 we'll just be performing a
          * useless lookup.
          */
-#if HAVE_LIBIDN
-        const int ret2 = 1;
-#else
-        const int ret2 = 0;
-#endif
+        const int ret2 = HAVE_LIBIDN;
 
         test_dns_name_apply_idna_one("", ret, "");
         test_dns_name_apply_idna_one("foo", ret, "foo");
@@ -766,9 +726,7 @@
                                      ret2 ? "r3---sn-ab5l6ne7.googlevideo.com" : "");
 }
 
-static void test_dns_name_is_valid_or_address(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_is_valid_or_address) {
         assert_se(dns_name_is_valid_or_address(NULL) == 0);
         assert_se(dns_name_is_valid_or_address("") == 0);
         assert_se(dns_name_is_valid_or_address("foobar") > 0);
@@ -780,9 +738,7 @@
         assert_se(dns_name_is_valid_or_address("::1") > 0);
 }
 
-static void test_dns_name_dot_suffixed(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dns_name_dot_suffixed) {
         assert_se(dns_name_dot_suffixed("") == 0);
         assert_se(dns_name_dot_suffixed(".") > 0);
         assert_se(dns_name_dot_suffixed("foo") == 0);
@@ -794,37 +750,4 @@
         assert_se(dns_name_dot_suffixed("foo.bar\\.\\.\\.\\.") == 0);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_dns_label_unescape();
-        test_dns_label_unescape_suffix();
-        test_dns_label_escape();
-        test_dns_name_normalize();
-        test_dns_name_equal();
-        test_dns_name_endswith();
-        test_dns_name_startswith();
-        test_dns_name_between();
-        test_dns_name_is_root();
-        test_dns_name_is_single_label();
-        test_dns_name_reverse();
-        test_dns_name_concat();
-        test_dns_name_is_valid();
-        test_dns_name_to_wire_format();
-        test_dns_service_name_is_valid();
-        test_dns_srv_type_is_valid();
-        test_dnssd_srv_type_is_valid();
-        test_dns_service_join();
-        test_dns_service_split();
-        test_dns_name_change_suffix();
-        test_dns_name_suffix();
-        test_dns_name_count_labels();
-        test_dns_name_equal_skip();
-        test_dns_name_compare_func();
-        test_dns_name_common_suffix();
-        test_dns_name_apply_idna();
-        test_dns_name_is_valid_or_address();
-        test_dns_name_dot_suffixed();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-ellipsize.c b/src/test/test-ellipsize.c
index a25c0b5..2b27b44 100644
--- a/src/test/test-ellipsize.c
+++ b/src/test/test-ellipsize.c
@@ -3,11 +3,11 @@
 #include <stdio.h>
 
 #include "alloc-util.h"
-#include "def.h"
+#include "constants.h"
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
-#include "util.h"
+#include "tests.h"
 #include "utf8.h"
 
 static void test_ellipsize_mem_one(const char *s, size_t old_length, size_t new_length) {
@@ -62,19 +62,15 @@
         }
 }
 
-static void test_ellipsize_mem(void) {
-        const char *s;
-        ssize_t l, k;
-
+TEST(ellipsize_mem) {
         FOREACH_STRING(s,
                        "_XXXXXXXXXXX_", /* ASCII */
                        "_aąęółśćńżźć_", /* two-byte utf-8 */
                        "გამარჯობა",     /* multi-byte utf-8 */
                        "你好世界",       /* wide characters */
                        "你გą世óoó界")    /* a mix */
-
-                for (l = strlen(s); l >= 0; l--)
-                        for (k = strlen(s) + 1; k >= 0; k--)
+                for (ssize_t l = strlen(s); l >= 0; l--)
+                        for (ssize_t k = strlen(s) + 1; k >= 0; k--)
                                 test_ellipsize_mem_one(s, l, k);
 }
 
@@ -108,7 +104,7 @@
         puts(t);
 }
 
-static void test_ellipsize(void) {
+TEST(ellipsize) {
         test_ellipsize_one(DIGITS LETTERS DIGITS LETTERS);
         test_ellipsize_one("한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어한국어");
         test_ellipsize_one("-日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国日本国");
@@ -119,9 +115,4 @@
         test_ellipsize_one("shórt");
 }
 
-int main(int argc, char *argv[]) {
-        test_ellipsize_mem();
-        test_ellipsize();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-emergency-action.c b/src/test/test-emergency-action.c
index 88214aa..36dd1e4 100644
--- a/src/test/test-emergency-action.c
+++ b/src/test/test-emergency-action.c
@@ -3,11 +3,9 @@
 #include "emergency-action.h"
 #include "tests.h"
 
-static void test_parse_emergency_action(void) {
+TEST(parse_emergency_action) {
         EmergencyAction x;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_emergency_action("none", false, &x) == 0);
         assert_se(x == EMERGENCY_ACTION_NONE);
         assert_se(parse_emergency_action("reboot", false, &x) == -EOPNOTSUPP);
@@ -42,10 +40,4 @@
         assert_se(x == EMERGENCY_ACTION_EXIT_FORCE);
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_INFO);
-
-        test_parse_emergency_action();
-
-        return EXIT_SUCCESS;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-engine.c b/src/test/test-engine.c
index 6dc1619..6003910 100644
--- a/src/test/test-engine.c
+++ b/src/test/test-engine.c
@@ -8,6 +8,7 @@
 #include "manager-dump.h"
 #include "rm-rf.h"
 #include "service.h"
+#include "slice.h"
 #include "special.h"
 #include "strv.h"
 #include "tests.h"
@@ -75,7 +76,8 @@
         _cleanup_(sd_bus_error_free) sd_bus_error err = SD_BUS_ERROR_NULL;
         _cleanup_(manager_freep) Manager *m = NULL;
         Unit *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL, *g = NULL,
-                *h = NULL, *i = NULL, *a_conj = NULL, *unit_with_multiple_dashes = NULL, *stub = NULL;
+                *h = NULL, *i = NULL, *a_conj = NULL, *unit_with_multiple_dashes = NULL, *stub = NULL,
+                *tomato = NULL, *sauce = NULL, *fruit = NULL, *zupa = NULL;
         Job *j;
         int r;
 
@@ -91,116 +93,116 @@
         assert_se(set_unit_path(unit_dir) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
         if (manager_errno_skip_test(r))
                 return log_tests_skipped_errno(r, "manager_new");
         assert_se(r >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         printf("Load1:\n");
         assert_se(manager_load_startable_unit_or_warn(m, "a.service", NULL, &a) >= 0);
         assert_se(manager_load_startable_unit_or_warn(m, "b.service", NULL, &b) >= 0);
         assert_se(manager_load_startable_unit_or_warn(m, "c.service", NULL, &c) >= 0);
-        manager_dump_units(m, stdout, "\t");
+        manager_dump_units(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test1: (Trivial)\n");
         r = manager_add_job(m, JOB_START, c, JOB_REPLACE, NULL, &err, &j);
         if (sd_bus_error_is_set(&err))
                 log_error("error: %s: %s", err.name, err.message);
         assert_se(r == 0);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Load2:\n");
         manager_clear_jobs(m);
         assert_se(manager_load_startable_unit_or_warn(m, "d.service", NULL, &d) >= 0);
         assert_se(manager_load_startable_unit_or_warn(m, "e.service", NULL, &e) >= 0);
-        manager_dump_units(m, stdout, "\t");
+        manager_dump_units(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test2: (Cyclic Order, Unfixable)\n");
         assert_se(manager_add_job(m, JOB_START, d, JOB_REPLACE, NULL, NULL, &j) == -EDEADLK);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test3: (Cyclic Order, Fixable, Garbage Collector)\n");
         assert_se(manager_add_job(m, JOB_START, e, JOB_REPLACE, NULL, NULL, &j) == 0);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test4: (Identical transaction)\n");
         assert_se(manager_add_job(m, JOB_START, e, JOB_FAIL, NULL, NULL, &j) == 0);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Load3:\n");
         assert_se(manager_load_startable_unit_or_warn(m, "g.service", NULL, &g) >= 0);
-        manager_dump_units(m, stdout, "\t");
+        manager_dump_units(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test5: (Colliding transaction, fail)\n");
         assert_se(manager_add_job(m, JOB_START, g, JOB_FAIL, NULL, NULL, &j) == -EDEADLK);
 
         printf("Test6: (Colliding transaction, replace)\n");
         assert_se(manager_add_job(m, JOB_START, g, JOB_REPLACE, NULL, NULL, &j) == 0);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test7: (Unmergeable job type, fail)\n");
         assert_se(manager_add_job(m, JOB_STOP, g, JOB_FAIL, NULL, NULL, &j) == -EDEADLK);
 
         printf("Test8: (Mergeable job type, fail)\n");
         assert_se(manager_add_job(m, JOB_RESTART, g, JOB_FAIL, NULL, NULL, &j) == 0);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test9: (Unmergeable job type, replace)\n");
         assert_se(manager_add_job(m, JOB_STOP, g, JOB_REPLACE, NULL, NULL, &j) == 0);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Load4:\n");
         assert_se(manager_load_startable_unit_or_warn(m, "h.service", NULL, &h) >= 0);
-        manager_dump_units(m, stdout, "\t");
+        manager_dump_units(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test10: (Unmergeable job type of auxiliary job, fail)\n");
         assert_se(manager_add_job(m, JOB_START, h, JOB_FAIL, NULL, NULL, &j) == 0);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Load5:\n");
         manager_clear_jobs(m);
         assert_se(manager_load_startable_unit_or_warn(m, "i.service", NULL, &i) >= 0);
         SERVICE(a)->state = SERVICE_RUNNING;
         SERVICE(d)->state = SERVICE_RUNNING;
-        manager_dump_units(m, stdout, "\t");
+        manager_dump_units(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test11: (Start/stop job ordering, execution cycle)\n");
         assert_se(manager_add_job(m, JOB_START, i, JOB_FAIL, NULL, NULL, &j) == 0);
         assert_se(unit_has_job_type(a, JOB_STOP));
         assert_se(unit_has_job_type(d, JOB_STOP));
         assert_se(unit_has_job_type(b, JOB_START));
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Load6:\n");
         manager_clear_jobs(m);
         assert_se(manager_load_startable_unit_or_warn(m, "a-conj.service", NULL, &a_conj) >= 0);
         SERVICE(a)->state = SERVICE_DEAD;
-        manager_dump_units(m, stdout, "\t");
+        manager_dump_units(m, stdout, /* patterns= */ NULL, "\t");
 
         printf("Test12: (Trivial cycle, Unfixable)\n");
         assert_se(manager_add_job(m, JOB_START, a_conj, JOB_REPLACE, NULL, NULL, &j) == -EDEADLK);
-        manager_dump_jobs(m, stdout, "\t");
+        manager_dump_jobs(m, stdout, /* patterns= */ NULL, "\t");
 
         assert_se(!hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), b));
         assert_se(!hashmap_get(unit_get_dependencies(b, UNIT_RELOAD_PROPAGATED_FROM), a));
         assert_se(!hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), c));
         assert_se(!hashmap_get(unit_get_dependencies(c, UNIT_RELOAD_PROPAGATED_FROM), a));
 
-        assert_se(unit_add_dependency(a, UNIT_PROPAGATES_RELOAD_TO, b, true, UNIT_DEPENDENCY_UDEV) == 0);
-        assert_se(unit_add_dependency(a, UNIT_PROPAGATES_RELOAD_TO, c, true, UNIT_DEPENDENCY_PROC_SWAP) == 0);
+        assert_se(unit_add_dependency(a, UNIT_PROPAGATES_RELOAD_TO, b, true, UNIT_DEPENDENCY_UDEV) >= 0);
+        assert_se(unit_add_dependency(a, UNIT_PROPAGATES_RELOAD_TO, c, true, UNIT_DEPENDENCY_PROC_SWAP) >= 0);
 
-        assert_se(hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), b));
-        assert_se(hashmap_get(unit_get_dependencies(b, UNIT_RELOAD_PROPAGATED_FROM), a));
-        assert_se(hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), c));
-        assert_se(hashmap_get(unit_get_dependencies(c, UNIT_RELOAD_PROPAGATED_FROM), a));
+        assert_se( hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), b));
+        assert_se( hashmap_get(unit_get_dependencies(b, UNIT_RELOAD_PROPAGATED_FROM), a));
+        assert_se( hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), c));
+        assert_se( hashmap_get(unit_get_dependencies(c, UNIT_RELOAD_PROPAGATED_FROM), a));
 
         unit_remove_dependencies(a, UNIT_DEPENDENCY_UDEV);
 
         assert_se(!hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), b));
         assert_se(!hashmap_get(unit_get_dependencies(b, UNIT_RELOAD_PROPAGATED_FROM), a));
-        assert_se(hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), c));
-        assert_se(hashmap_get(unit_get_dependencies(c, UNIT_RELOAD_PROPAGATED_FROM), a));
+        assert_se( hashmap_get(unit_get_dependencies(a, UNIT_PROPAGATES_RELOAD_TO), c));
+        assert_se( hashmap_get(unit_get_dependencies(c, UNIT_RELOAD_PROPAGATED_FROM), a));
 
         unit_remove_dependencies(a, UNIT_DEPENDENCY_PROC_SWAP);
 
@@ -221,6 +223,7 @@
         assert_se(unit_add_dependency_by_name(stub, UNIT_AFTER, SPECIAL_ROOT_SLICE, true, UNIT_DEPENDENCY_FILE) >= 0);
         assert_se(unit_add_dependency_by_name(stub, UNIT_REQUIRES, "non-existing.mount", true, UNIT_DEPENDENCY_FILE) >= 0);
         assert_se(unit_add_dependency_by_name(stub, UNIT_ON_FAILURE, "non-existing-on-failure.target", true, UNIT_DEPENDENCY_FILE) >= 0);
+        assert_se(unit_add_dependency_by_name(stub, UNIT_ON_SUCCESS, "non-existing-on-success.target", true, UNIT_DEPENDENCY_FILE) >= 0);
 
         log_info("/* Merging a+stub, dumps before */");
         unit_dump(a, stderr, NULL);
@@ -229,13 +232,19 @@
         log_info("/* Dump of merged a+stub */");
         unit_dump(a, stderr, NULL);
 
-        assert_se(unit_has_dependency(a, UNIT_ATOM_AFTER, manager_get_unit(m, SPECIAL_BASIC_TARGET)));
-        assert_se(unit_has_dependency(a, UNIT_ATOM_AFTER, manager_get_unit(m, "quux.target")));
-        assert_se(unit_has_dependency(a, UNIT_ATOM_AFTER, manager_get_unit(m, SPECIAL_ROOT_SLICE)));
-        assert_se(unit_has_dependency(a, UNIT_ATOM_PULL_IN_START, manager_get_unit(m, "non-existing.mount")));
-        assert_se(unit_has_dependency(a, UNIT_ATOM_RETROACTIVE_START_REPLACE, manager_get_unit(m, "non-existing.mount")));
-        assert_se(unit_has_dependency(a, UNIT_ATOM_ON_FAILURE, manager_get_unit(m, "non-existing-on-failure.target")));
+        assert_se( unit_has_dependency(a, UNIT_ATOM_AFTER, manager_get_unit(m, SPECIAL_BASIC_TARGET)));
+        assert_se( unit_has_dependency(a, UNIT_ATOM_AFTER, manager_get_unit(m, "quux.target")));
+        assert_se( unit_has_dependency(a, UNIT_ATOM_AFTER, manager_get_unit(m, SPECIAL_ROOT_SLICE)));
+        assert_se( unit_has_dependency(a, UNIT_ATOM_PULL_IN_START, manager_get_unit(m, "non-existing.mount")));
+        assert_se( unit_has_dependency(a, UNIT_ATOM_RETROACTIVE_START_REPLACE, manager_get_unit(m, "non-existing.mount")));
+        assert_se( unit_has_dependency(a, UNIT_ATOM_ON_FAILURE, manager_get_unit(m, "non-existing-on-failure.target")));
+        assert_se( unit_has_dependency(manager_get_unit(m, "non-existing-on-failure.target"), UNIT_ATOM_ON_FAILURE_OF, a));
+        assert_se( unit_has_dependency(a, UNIT_ATOM_ON_SUCCESS, manager_get_unit(m, "non-existing-on-success.target")));
+        assert_se( unit_has_dependency(manager_get_unit(m, "non-existing-on-success.target"), UNIT_ATOM_ON_SUCCESS_OF, a));
         assert_se(!unit_has_dependency(a, UNIT_ATOM_ON_FAILURE, manager_get_unit(m, "basic.target")));
+        assert_se(!unit_has_dependency(a, UNIT_ATOM_ON_SUCCESS, manager_get_unit(m, "basic.target")));
+        assert_se(!unit_has_dependency(a, UNIT_ATOM_ON_FAILURE_OF, manager_get_unit(m, "basic.target")));
+        assert_se(!unit_has_dependency(a, UNIT_ATOM_ON_SUCCESS_OF, manager_get_unit(m, "basic.target")));
         assert_se(!unit_has_dependency(a, UNIT_ATOM_PROPAGATES_RELOAD_TO, manager_get_unit(m, "non-existing-on-failure.target")));
 
         assert_se(unit_has_name(a, "a.service"));
@@ -260,5 +269,32 @@
 
         verify_dependency_atoms();
 
+        /* Test adding multiple Slice= dependencies; only the last should remain */
+        assert_se(unit_new_for_name(m, sizeof(Service), "tomato.service", &tomato) >= 0);
+        assert_se(unit_new_for_name(m, sizeof(Slice), "sauce.slice", &sauce) >= 0);
+        assert_se(unit_new_for_name(m, sizeof(Slice), "fruit.slice", &fruit) >= 0);
+        assert_se(unit_new_for_name(m, sizeof(Slice), "zupa.slice", &zupa) >= 0);
+
+        unit_set_slice(tomato, sauce);
+        unit_set_slice(tomato, fruit);
+        unit_set_slice(tomato, zupa);
+
+        assert_se(UNIT_GET_SLICE(tomato) == zupa);
+        assert_se(!unit_has_dependency(tomato, UNIT_ATOM_IN_SLICE, sauce));
+        assert_se(!unit_has_dependency(tomato, UNIT_ATOM_IN_SLICE, fruit));
+        assert_se( unit_has_dependency(tomato, UNIT_ATOM_IN_SLICE, zupa));
+
+        assert_se(!unit_has_dependency(tomato, UNIT_ATOM_REFERENCES, sauce));
+        assert_se(!unit_has_dependency(tomato, UNIT_ATOM_REFERENCES, fruit));
+        assert_se( unit_has_dependency(tomato, UNIT_ATOM_REFERENCES, zupa));
+
+        assert_se(!unit_has_dependency(sauce, UNIT_ATOM_SLICE_OF, tomato));
+        assert_se(!unit_has_dependency(fruit, UNIT_ATOM_SLICE_OF, tomato));
+        assert_se( unit_has_dependency(zupa, UNIT_ATOM_SLICE_OF, tomato));
+
+        assert_se(!unit_has_dependency(sauce, UNIT_ATOM_REFERENCED_BY, tomato));
+        assert_se(!unit_has_dependency(fruit, UNIT_ATOM_REFERENCED_BY, tomato));
+        assert_se( unit_has_dependency(zupa, UNIT_ATOM_REFERENCED_BY, tomato));
+
         return 0;
 }
diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c
index a3acde1..461a0f0 100644
--- a/src/test/test-env-file.c
+++ b/src/test/test-env-file.c
@@ -9,15 +9,20 @@
 #include "tests.h"
 #include "tmpfile-util.h"
 
+/* In case of repeating keys, later entries win. */
+
 #define env_file_1                              \
         "a=a\n"                                 \
+        "a=b\n"                                 \
+        "a=b\n"                                 \
+        "a=a\n"                                 \
         "b=b\\\n"                               \
         "c\n"                                   \
-        "d=d\\\n"                               \
-        "e\\\n"                                 \
-        "f\n"                                   \
+        "d= d\\\n"                              \
+        "e  \\\n"                               \
+        "f  \n"                                 \
         "g=g\\ \n"                              \
-        "h=h\n"                                 \
+        "h= ąęół\\ śćńźżµ \n"                   \
         "i=i\\"
 
 #define env_file_2                              \
@@ -26,116 +31,105 @@
 #define env_file_3 \
         "#SPAMD_ARGS=\"-d --socketpath=/var/lib/bulwark/spamd \\\n" \
         "#--nouser-config                                     \\\n" \
-        "normal=line"
+        "normal=line                                          \\\n" \
+        ";normal=ignored                                      \\\n" \
+        "normal_ignored                                       \\\n" \
+        "normal ignored                                       \\\n"
 
-#define env_file_4 \
-       "# Generated\n" \
-       "\n" \
-       "HWMON_MODULES=\"coretemp f71882fg\"\n" \
-       "\n" \
-       "# For compatibility reasons\n" \
-       "\n" \
-       "MODULE_0=coretemp\n" \
-       "MODULE_1=f71882fg"
+#define env_file_4                              \
+        "# Generated\n"                         \
+        "\n"                                    \
+        "HWMON_MODULES=\"coretemp f71882fg\"\n" \
+        "\n"                                    \
+        "# For compatibility reasons\n"         \
+        "\n"                                    \
+        "MODULE_0=coretemp\n"                   \
+        "MODULE_1=f71882fg"
 
 #define env_file_5                              \
-        "a=\n"                                 \
+        "a=\n"                                  \
         "b="
 
-static void test_load_env_file_1(void) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
+#define env_file_6                              \
+        "a=\\ \\n \\t \\x \\y \\' \n"           \
+        "b= \\$'                  \n"           \
+        "c= ' \\n\\t\\$\\`\\\\\n"               \
+        "'   \n"                                \
+        "d= \" \\n\\t\\$\\`\\\\\n"              \
+        "\"   \n"
 
+
+TEST(load_env_file_1) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
+        assert_se(write_tmpfile(name, env_file_1) == 0);
 
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_1, strlen(env_file_1)) == strlen(env_file_1));
-
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "a=a"));
         assert_se(streq(data[1], "b=bc"));
-        assert_se(streq(data[2], "d=def"));
+        assert_se(streq(data[2], "d=de  f"));
         assert_se(streq(data[3], "g=g "));
-        assert_se(streq(data[4], "h=h"));
+        assert_se(streq(data[4], "h=ąęół śćńźżµ"));
         assert_se(streq(data[5], "i=i"));
         assert_se(data[6] == NULL);
 }
 
-static void test_load_env_file_2(void) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
-
+TEST(load_env_file_2) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
+        assert_se(write_tmpfile(name, env_file_2) == 0);
 
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_2, strlen(env_file_2)) == strlen(env_file_2));
-
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "a=a"));
         assert_se(data[1] == NULL);
 }
 
-static void test_load_env_file_3(void) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
-
+TEST(load_env_file_3) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
+        assert_se(write_tmpfile(name, env_file_3) == 0);
 
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_3, strlen(env_file_3)) == strlen(env_file_3));
-
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(data == NULL);
 }
 
-static void test_load_env_file_4(void) {
-        _cleanup_strv_free_ char **data = NULL;
+TEST(load_env_file_4) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
-        int r;
+        assert_se(write_tmpfile(name, env_file_4) == 0);
 
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_4, strlen(env_file_4)) == strlen(env_file_4));
-
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "HWMON_MODULES=coretemp f71882fg"));
         assert_se(streq(data[1], "MODULE_0=coretemp"));
         assert_se(streq(data[2], "MODULE_1=f71882fg"));
         assert_se(data[3] == NULL);
 }
 
-static void test_load_env_file_5(void) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
-
+TEST(load_env_file_5) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
+        assert_se(write_tmpfile(name, env_file_5) == 0);
 
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_5, strlen(env_file_5)) == strlen(env_file_5));
-
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "a="));
         assert_se(streq(data[1], "b="));
         assert_se(data[2] == NULL);
 }
 
-static void test_write_and_load_env_file(void) {
-        const char *v;
+TEST(load_env_file_6) {
+        _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
+        assert_se(write_tmpfile(name, env_file_6) == 0);
 
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
+        assert_se(streq(data[0], "a= n t x y '"));
+        assert_se(streq(data[1], "b=$'"));
+        assert_se(streq(data[2], "c= \\n\\t\\$\\`\\\\\n"));
+        assert_se(streq(data[3], "d= \\n\\t$`\\\n"));
+        assert_se(data[4] == NULL);
+}
+
+TEST(write_and_load_env_file) {
         /* Make sure that our writer, parser and the shell agree on what our env var files mean */
 
         FOREACH_STRING(v,
@@ -173,16 +167,4 @@
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
-        test_load_env_file_1();
-        test_load_env_file_2();
-        test_load_env_file_3();
-        test_load_env_file_4();
-        test_load_env_file_5();
-
-        test_write_and_load_env_file();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c
index 3d5951c..4796e3c 100644
--- a/src/test/test-env-util.c
+++ b/src/test/test-env-util.c
@@ -10,11 +10,8 @@
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
-#include "util.h"
 
-static void test_strv_env_delete(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_env_delete) {
         _cleanup_strv_free_ char **a = NULL, **b = NULL, **c = NULL, **d = NULL;
 
         a = strv_new("FOO=BAR", "WALDO=WALDO", "WALDO=", "PIEP", "SCHLUMPF=SMURF");
@@ -34,9 +31,7 @@
         assert_se(strv_length(d) == 2);
 }
 
-static void test_strv_env_get(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_env_get) {
         char **l = STRV_MAKE("ONE_OR_TWO=1", "THREE=3", "ONE_OR_TWO=2", "FOUR=4");
 
         assert_se(streq(strv_env_get(l, "ONE_OR_TWO"), "2"));
@@ -44,9 +39,7 @@
         assert_se(streq(strv_env_get(l, "FOUR"), "4"));
 }
 
-static void test_strv_env_pairs_get(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_env_pairs_get) {
         char **l = STRV_MAKE("ONE_OR_TWO", "1", "THREE", "3", "ONE_OR_TWO", "2", "FOUR", "4", "FIVE", "5", "SIX", "FIVE", "SEVEN", "7");
 
         assert_se(streq(strv_env_pairs_get(l, "ONE_OR_TWO"), "2"));
@@ -55,9 +48,7 @@
         assert_se(streq(strv_env_pairs_get(l, "FIVE"), "5"));
 }
 
-static void test_strv_env_unset(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_env_unset) {
         _cleanup_strv_free_ char **l = NULL;
 
         l = strv_new("PIEP", "SCHLUMPF=SMURFF", "NANANANA=YES");
@@ -70,44 +61,38 @@
         assert_se(strv_length(l) == 2);
 }
 
-static void test_strv_env_merge(void) {
-        log_info("/* %s */", __func__);
+TEST(strv_env_merge) {
+        char **a = STRV_MAKE("FOO=BAR", "WALDO=WALDO", "WALDO=", "PIEP", "SCHLUMPF=SMURF", "EQ===");
+        char **b = STRV_MAKE("FOO=KKK", "FOO=", "PIEP=", "SCHLUMPF=SMURFF", "NANANANA=YES");
 
-        _cleanup_strv_free_ char **a = NULL, **b = NULL, **r = NULL;
-
-        a = strv_new("FOO=BAR", "WALDO=WALDO", "WALDO=", "PIEP", "SCHLUMPF=SMURF");
-        assert_se(a);
-
-        b = strv_new("FOO=KKK", "FOO=", "PIEP=", "SCHLUMPF=SMURFF", "NANANANA=YES");
-        assert_se(b);
-
-        r = strv_env_merge(2, a, b);
+        _cleanup_strv_free_ char **r = strv_env_merge(NULL, a, NULL, b, NULL, a, b, b, NULL);
         assert_se(r);
         assert_se(streq(r[0], "FOO="));
         assert_se(streq(r[1], "WALDO="));
         assert_se(streq(r[2], "PIEP"));
         assert_se(streq(r[3], "SCHLUMPF=SMURFF"));
-        assert_se(streq(r[4], "PIEP="));
-        assert_se(streq(r[5], "NANANANA=YES"));
-        assert_se(strv_length(r) == 6);
+        assert_se(streq(r[4], "EQ==="));
+        assert_se(streq(r[5], "PIEP="));
+        assert_se(streq(r[6], "NANANANA=YES"));
+        assert_se(strv_length(r) == 7);
 
         assert_se(strv_env_clean(r) == r);
         assert_se(streq(r[0], "FOO="));
         assert_se(streq(r[1], "WALDO="));
         assert_se(streq(r[2], "SCHLUMPF=SMURFF"));
-        assert_se(streq(r[3], "PIEP="));
-        assert_se(streq(r[4], "NANANANA=YES"));
-        assert_se(strv_length(r) == 5);
+        assert_se(streq(r[3], "EQ==="));
+        assert_se(streq(r[4], "PIEP="));
+        assert_se(streq(r[5], "NANANANA=YES"));
+        assert_se(strv_length(r) == 6);
 }
 
-static void test_strv_env_replace_strdup(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_env_replace_strdup) {
         _cleanup_strv_free_ char **a = NULL;
 
         assert_se(strv_env_replace_strdup(&a, "a=a") == 1);
         assert_se(strv_env_replace_strdup(&a, "b=b") == 1);
         assert_se(strv_env_replace_strdup(&a, "a=A") == 0);
+        assert_se(strv_env_replace_strdup(&a, "c") == -EINVAL);
 
         assert_se(strv_length(a) == 2);
         strv_sort(a);
@@ -115,9 +100,26 @@
         assert_se(streq(a[1], "b=b"));
 }
 
-static void test_strv_env_assign(void) {
-        log_info("/* %s */", __func__);
+TEST(strv_env_replace_strdup_passthrough) {
+        _cleanup_strv_free_ char **a = NULL;
 
+        assert_se(putenv((char*) "a=a") == 0);
+        assert_se(putenv((char*) "b=") == 0);
+        assert_se(unsetenv("c") == 0);
+
+        assert_se(strv_env_replace_strdup_passthrough(&a, "a") == 1);
+        assert_se(strv_env_replace_strdup_passthrough(&a, "b") == 1);
+        assert_se(strv_env_replace_strdup_passthrough(&a, "c") == 1);
+        assert_se(strv_env_replace_strdup_passthrough(&a, "a") == 0);
+        assert_se(strv_env_replace_strdup_passthrough(&a, "$a") == -EINVAL);
+
+        assert_se(strv_length(a) == 3);
+        assert_se(streq(a[0], "a=a"));
+        assert_se(streq(a[1], "b="));
+        assert_se(streq(a[2], "c="));
+}
+
+TEST(strv_env_assign) {
         _cleanup_strv_free_ char **a = NULL;
 
         assert_se(strv_env_assign(&a, "a", "a") == 1);
@@ -131,9 +133,7 @@
         assert_se(streq(a[0], "a=A"));
 }
 
-static void test_env_strv_get_n(void) {
-        log_info("/* %s */", __func__);
-
+TEST(env_strv_get_n) {
         const char *_env[] = {
                 "FOO=NO NO NO",
                 "FOO=BAR BAR",
@@ -163,7 +163,7 @@
                             getenv("PATH")));
 }
 
-static void test_replace_env(bool braceless) {
+static void test_replace_env1(bool braceless) {
         log_info("/* %s(braceless=%s) */", __func__, yes_no(braceless));
 
         const char *env[] = {
@@ -223,9 +223,14 @@
         assert_se(streq(y, extended ? "FOO=foobetweenbar" : "FOO=foobetween${BAR:-baz}"));
 }
 
-static void test_replace_env_argv(void) {
-        log_info("/* %s */", __func__);
+TEST(replace_env) {
+        test_replace_env1(false);
+        test_replace_env1(true);
+        test_replace_env2(false);
+        test_replace_env2(true);
+}
 
+TEST(replace_env_argv) {
         const char *env[] = {
                 "FOO=BAR BAR",
                 "BAR=waldo",
@@ -275,9 +280,7 @@
         assert_se(strv_length(r) == 17);
 }
 
-static void test_env_clean(void) {
-        log_info("/* %s */", __func__);
-
+TEST(env_clean) {
         _cleanup_strv_free_ char **e = strv_new("FOOBAR=WALDO",
                                                 "FOOBAR=WALDO",
                                                 "FOOBAR",
@@ -313,9 +316,7 @@
         assert_se(e[8] == NULL);
 }
 
-static void test_env_name_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(env_name_is_valid) {
         assert_se(env_name_is_valid("test"));
 
         assert_se(!env_name_is_valid(NULL));
@@ -327,9 +328,7 @@
         assert_se(!env_name_is_valid("#¤%&?_only_numbers_letters_and_underscore_allowed"));
 }
 
-static void test_env_value_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(env_value_is_valid) {
         assert_se(env_value_is_valid(""));
         assert_se(env_value_is_valid("głąb kapuściany"));
         assert_se(env_value_is_valid("printf \"\\x1b]0;<mock-chroot>\\x07<mock-chroot>\""));
@@ -342,9 +341,7 @@
                                                  * We currently disallow that. */
 }
 
-static void test_env_assignment_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(env_assignment_is_valid) {
         assert_se(env_assignment_is_valid("a="));
         assert_se(env_assignment_is_valid("b=głąb kapuściany"));
         assert_se(env_assignment_is_valid("c=\\007\\009\\011"));
@@ -364,9 +361,7 @@
         assert_se(!env_assignment_is_valid("głąb=printf \"\x1b]0;<mock-chroot>\x07<mock-chroot>\""));
 }
 
-static void test_putenv_dup(void) {
-        log_info("/* %s */", __func__);
-
+TEST(putenv_dup) {
         assert_se(putenv_dup("A=a1", true) == 0);
         assert_se(streq_ptr(getenv("A"), "a1"));
         assert_se(putenv_dup("A=a1", true) == 0);
@@ -377,13 +372,11 @@
         assert_se(streq_ptr(getenv("A"), "a2"));
 }
 
-static void test_setenv_systemd_exec_pid(void) {
+TEST(setenv_systemd_exec_pid) {
         _cleanup_free_ char *saved = NULL;
         const char *e;
         pid_t p;
 
-        log_info("/* %s */", __func__);
-
         e = getenv("SYSTEMD_EXEC_PID");
         if (e)
                 assert_se(saved = strdup(e));
@@ -412,28 +405,51 @@
         assert_se(set_unset_env("SYSTEMD_EXEC_PID", saved, 1) >= 0);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+TEST(getenv_steal_erase) {
+        int r;
 
-        test_strv_env_delete();
-        test_strv_env_get();
-        test_strv_env_pairs_get();
-        test_strv_env_unset();
-        test_strv_env_merge();
-        test_strv_env_replace_strdup();
-        test_strv_env_assign();
-        test_env_strv_get_n();
-        test_replace_env(false);
-        test_replace_env(true);
-        test_replace_env2(false);
-        test_replace_env2(true);
-        test_replace_env_argv();
-        test_env_clean();
-        test_env_name_is_valid();
-        test_env_value_is_valid();
-        test_env_assignment_is_valid();
-        test_putenv_dup();
-        test_setenv_systemd_exec_pid();
+        r = safe_fork("(sd-getenvstealerase)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
+        if (r == 0) {
+                _cleanup_strv_free_ char **l = NULL;
 
-        return 0;
+                /* child */
+
+                assert_se(getenv_steal_erase("thisenvvardefinitelywontexist", NULL) == 0);
+
+                l = strv_new("FOO=BAR", "QUUX=PIFF", "ONE=TWO", "A=B");
+                assert_se(strv_length(l) == 4);
+
+                environ = l;
+
+                STRV_FOREACH(e, environ) {
+                        _cleanup_free_ char *n = NULL, *copy1 = NULL, *copy2 = NULL;
+                        char *eq;
+
+                        eq = strchr(*e, '=');
+                        if (!eq)
+                                continue;
+
+                        n = strndup(*e, eq - *e);
+                        assert_se(n);
+
+                        copy1 = strdup(eq + 1);
+                        assert_se(copy1);
+
+                        assert_se(streq_ptr(getenv(n), copy1));
+                        assert_se(getenv(n) == eq + 1);
+                        assert_se(getenv_steal_erase(n, &copy2) > 0);
+                        assert_se(streq_ptr(copy1, copy2));
+                        assert_se(isempty(eq + 1));
+                        assert_se(!getenv(n));
+                }
+
+                environ = NULL;
+                l = strv_free(l);
+
+                _exit(EXIT_SUCCESS);
+        }
+
+        assert_se(r > 0);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-errno-list.c b/src/test/test-errno-list.c
new file mode 100644
index 0000000..f91a1f7
--- /dev/null
+++ b/src/test/test-errno-list.c
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <errno.h>
+
+#include "errno-list.h"
+#include "errno-to-name.h"
+#include "macro.h"
+#include "string-util.h"
+#include "tests.h"
+
+TEST(errno_list) {
+        for (size_t i = 0; i < ELEMENTSOF(errno_names); i++) {
+                if (errno_names[i]) {
+                        assert_se(streq(errno_to_name(i), errno_names[i]));
+                        assert_se(errno_from_name(errno_names[i]) == (int) i);
+                }
+        }
+
+#ifdef ECANCELLED
+        /* ECANCELLED is an alias of ECANCELED. */
+        assert_se(streq(errno_to_name(ECANCELLED), "ECANCELED"));
+#endif
+        assert_se(streq(errno_to_name(ECANCELED), "ECANCELED"));
+
+#ifdef EREFUSED
+        /* EREFUSED is an alias of ECONNREFUSED. */
+        assert_se(streq(errno_to_name(EREFUSED), "ECONNREFUSED"));
+#endif
+        assert_se(streq(errno_to_name(ECONNREFUSED), "ECONNREFUSED"));
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-errno-util.c b/src/test/test-errno-util.c
new file mode 100644
index 0000000..d3d022c
--- /dev/null
+++ b/src/test/test-errno-util.c
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "errno-util.h"
+#include "stdio-util.h"
+#include "string-util.h"
+#include "tests.h"
+
+TEST(strerror_not_threadsafe) {
+        /* Just check that strerror really is not thread-safe. */
+        log_info("strerror(%d) → %s", 200, strerror(200));
+        log_info("strerror(%d) → %s", 201, strerror(201));
+        log_info("strerror(%d) → %s", INT_MAX, strerror(INT_MAX));
+
+        log_info("strerror(%d), strerror(%d) → %p, %p", 200, 201, strerror(200), strerror(201));
+
+        /* This call is not allowed, because the first returned string becomes invalid when
+         * we call strerror the second time:
+         *
+         * log_info("strerror(%d), strerror(%d) → %s, %s", 200, 201, strerror(200), strerror(201));
+         */
+}
+
+TEST(STRERROR) {
+        /* Just check that STRERROR really is thread-safe. */
+        log_info("STRERROR(%d) → %s", 200, STRERROR(200));
+        log_info("STRERROR(%d) → %s", 201, STRERROR(201));
+        log_info("STRERROR(%d), STRERROR(%d) → %s, %s", 200, 201, STRERROR(200), STRERROR(201));
+
+        const char *a = STRERROR(200), *b = STRERROR(201);
+        assert_se(strstr(a, "200"));
+        assert_se(strstr(b, "201"));
+
+        /* Check with negative values */
+        assert_se(streq(a, STRERROR(-200)));
+        assert_se(streq(b, STRERROR(-201)));
+
+        const char *c = STRERROR(INT_MAX);
+        char buf[DECIMAL_STR_MAX(int)];
+        xsprintf(buf, "%d", INT_MAX);  /* INT_MAX is hexadecimal, use printf to convert to decimal */
+        log_info("STRERROR(%d) → %s", INT_MAX, c);
+        assert_se(strstr(c, buf));
+}
+
+TEST(STRERROR_OR_ELSE) {
+        log_info("STRERROR_OR_ELSE(0, \"EOF\") → %s", STRERROR_OR_EOF(0));
+        log_info("STRERROR_OR_ELSE(EPERM, \"EOF\") → %s", STRERROR_OR_EOF(EPERM));
+        log_info("STRERROR_OR_ELSE(-EPERM, \"EOF\") → %s", STRERROR_OR_EOF(-EPERM));
+}
+
+TEST(PROTECT_ERRNO) {
+        errno = 12;
+        {
+                PROTECT_ERRNO;
+                errno = 11;
+        }
+        assert_se(errno == 12);
+}
+
+static void test_unprotect_errno_inner_function(void) {
+        PROTECT_ERRNO;
+
+        errno = 2222;
+}
+
+TEST(UNPROTECT_ERRNO) {
+        errno = 4711;
+
+        PROTECT_ERRNO;
+
+        errno = 815;
+
+        UNPROTECT_ERRNO;
+
+        assert_se(errno == 4711);
+
+        test_unprotect_errno_inner_function();
+
+        assert_se(errno == 4711);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-escape.c b/src/test/test-escape.c
index 8bda9cd..f3dd579 100644
--- a/src/test/test-escape.c
+++ b/src/test/test-escape.c
@@ -5,38 +5,40 @@
 #include "macro.h"
 #include "tests.h"
 
-static void test_cescape(void) {
+TEST(cescape) {
         _cleanup_free_ char *t;
 
         assert_se(t = cescape("abc\\\"\b\f\n\r\t\v\a\003\177\234\313"));
         assert_se(streq(t, "abc\\\\\\\"\\b\\f\\n\\r\\t\\v\\a\\003\\177\\234\\313"));
 }
 
-static void test_xescape(void) {
+TEST(xescape) {
         _cleanup_free_ char *t;
 
         assert_se(t = xescape("abc\\\"\b\f\n\r\t\v\a\003\177\234\313", ""));
         assert_se(streq(t, "abc\\x5c\"\\x08\\x0c\\x0a\\x0d\\x09\\x0b\\x07\\x03\\x7f\\x9c\\xcb"));
 }
 
-static void test_xescape_full(bool eight_bits) {
+static void test_xescape_full_one(bool eight_bits) {
         const char* escaped = !eight_bits ?
                 "a\\x62c\\x5c\"\\x08\\x0c\\x0a\\x0d\\x09\\x0b\\x07\\x03\\x7f\\x9c\\xcb" :
                 "a\\x62c\\x5c\"\\x08\\x0c\\x0a\\x0d\\x09\\x0b\\x07\\x03\177\234\313";
         const unsigned full_fit = !eight_bits ? 55 : 46;
         XEscapeFlags flags = eight_bits * XESCAPE_8_BIT;
 
+        log_info("/* %s */", __func__);
+
         for (unsigned i = 0; i < 60; i++) {
                 _cleanup_free_ char *t, *q;
 
                 assert_se(t = xescape_full("abc\\\"\b\f\n\r\t\v\a\003\177\234\313", "b", i, flags));
 
-                log_info("%02d: <%s>", i, t);
+                log_info("%02u: <%s>", i, t);
 
                 if (i >= full_fit)
                         assert_se(streq(t, escaped));
                 else if (i >= 3) {
-                        /* We need up to four columns, so up to three three columns may be wasted */
+                        /* We need up to four columns, so up to three columns may be wasted */
                         assert_se(strlen(t) == i || strlen(t) == i - 1 || strlen(t) == i - 2 || strlen(t) == i - 3);
                         assert_se(strneq(t, escaped, i - 3) || strneq(t, escaped, i - 4) ||
                                   strneq(t, escaped, i - 5) || strneq(t, escaped, i - 6));
@@ -49,15 +51,20 @@
                 assert_se(q = xescape_full("abc\\\"\b\f\n\r\t\v\a\003\177\234\313", "b", i,
                                            flags | XESCAPE_FORCE_ELLIPSIS));
 
-                log_info("%02d: <%s>", i, q);
+                log_info("%02u: <%s>", i, q);
                 if (i > 0)
                         assert_se(endswith(q, "."));
-                assert(strlen(q) <= i);
-                assert(strlen(q) + 3 >= strlen(t));
+                assert_se(strlen(q) <= i);
+                assert_se(strlen(q) + 3 >= strlen(t));
         }
 }
 
-static void test_cunescape(void) {
+TEST(test_xescape_full) {
+        test_xescape_full_one(false);
+        test_xescape_full_one(true);
+}
+
+TEST(cunescape) {
         _cleanup_free_ char *unescaped;
 
         assert_se(cunescape("abc\\\\\\\"\\b\\f\\a\\n\\r\\t\\v\\003\\177\\234\\313\\000\\x00", 0, &unescaped) < 0);
@@ -132,7 +139,7 @@
         assert_se(streq_ptr(r, expected));
 }
 
-static void test_shell_escape(void) {
+TEST(shell_escape) {
         test_shell_escape_one("", "", "");
         test_shell_escape_one("\\", "", "\\\\");
         test_shell_escape_one("foobar", "", "foobar");
@@ -149,8 +156,7 @@
         assert_se(streq(ret, expected));
 }
 
-static void test_shell_maybe_quote(void) {
-
+TEST(shell_maybe_quote) {
         test_shell_maybe_quote_one("", 0, "");
         test_shell_maybe_quote_one("", SHELL_ESCAPE_EMPTY, "\"\"");
         test_shell_maybe_quote_one("", SHELL_ESCAPE_POSIX, "");
@@ -190,19 +196,21 @@
 
         test_shell_maybe_quote_one("głąb\002\003rząd", 0, "\"głąb\\002\\003rząd\"");
         test_shell_maybe_quote_one("głąb\002\003rząd", SHELL_ESCAPE_POSIX, "$'głąb\\002\\003rząd'");
+
+        /* Bogus UTF-8 strings */
+        test_shell_maybe_quote_one("\250\350", 0, "\"\\250\\350\"");
+        test_shell_maybe_quote_one("\250\350", SHELL_ESCAPE_POSIX, "$'\\250\\350'");
 }
 
 static void test_quote_command_line_one(char **argv, const char *expected) {
         _cleanup_free_ char *s;
 
-        assert_se(s = quote_command_line(argv));
+        assert_se(s = quote_command_line(argv, SHELL_ESCAPE_EMPTY));
         log_info("%s", s);
         assert_se(streq(s, expected));
 }
 
-static void test_quote_command_line(void) {
-        log_info("/* %s */", __func__);
-
+TEST(quote_command_line) {
         test_quote_command_line_one(STRV_MAKE("true", "true"),
                                     "true true");
         test_quote_command_line_one(STRV_MAKE("true", "with a space"),
@@ -215,17 +223,20 @@
                                     "true \"\\$dollar\"");
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+static void test_octescape_one(const char *s, const char *expected) {
+        _cleanup_free_ char *ret;
 
-        test_cescape();
-        test_xescape();
-        test_xescape_full(false);
-        test_xescape_full(true);
-        test_cunescape();
-        test_shell_escape();
-        test_shell_maybe_quote();
-        test_quote_command_line();
-
-        return 0;
+        assert_se(ret = octescape(s, strlen_ptr(s)));
+        log_debug("octescape(\"%s\") → \"%s\" (expected: \"%s\")", strnull(s), ret, expected);
+        assert_se(streq(ret, expected));
 }
+
+TEST(octescape) {
+        test_octescape_one(NULL, "");
+        test_octescape_one("", "");
+        test_octescape_one("foo", "foo");
+        test_octescape_one("\"\\\"", "\\042\\134\\042");
+        test_octescape_one("\123\213\222", "\123\\213\\222");
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-ether-addr-util.c b/src/test/test-ether-addr-util.c
new file mode 100644
index 0000000..d680f80
--- /dev/null
+++ b/src/test/test-ether-addr-util.c
@@ -0,0 +1,162 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "ether-addr-util.h"
+#include "string-util.h"
+#include "tests.h"
+
+TEST(ether_addr_helpers) {
+        struct ether_addr a;
+
+        a = ETHER_ADDR_NULL;
+        assert_se(ether_addr_is_null(&a));
+        assert_se(!ether_addr_is_broadcast(&a));
+        assert_se(!ether_addr_is_multicast(&a));
+        assert_se(ether_addr_is_unicast(&a));
+        assert_se(!ether_addr_is_local(&a));
+        assert_se(ether_addr_is_global(&a));
+
+        memset(a.ether_addr_octet, 0xff, sizeof(a));
+        assert_se(!ether_addr_is_null(&a));
+        assert_se(ether_addr_is_broadcast(&a));
+        assert_se(ether_addr_is_multicast(&a));
+        assert_se(!ether_addr_is_unicast(&a));
+        assert_se(ether_addr_is_local(&a));
+        assert_se(!ether_addr_is_global(&a));
+
+        a = (struct ether_addr) { { 0x01, 0x23, 0x34, 0x56, 0x78, 0x9a } };
+        assert_se(!ether_addr_is_null(&a));
+        assert_se(!ether_addr_is_broadcast(&a));
+        assert_se(ether_addr_is_multicast(&a));
+        assert_se(!ether_addr_is_unicast(&a));
+        assert_se(!ether_addr_is_local(&a));
+        assert_se(ether_addr_is_global(&a));
+}
+
+#define INFINIBAD_ADDR_1 ((const struct hw_addr_data){ .length = 20, .infiniband = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} })
+
+TEST(HW_ADDR_TO_STRING) {
+        const char *s = HW_ADDR_TO_STR(&(const struct hw_addr_data){6});
+        log_info("null: %s", s);
+
+        log_info("null×2: %s, %s",
+                 HW_ADDR_TO_STR(&(const struct hw_addr_data){6}),
+                 HW_ADDR_TO_STR(&(const struct hw_addr_data){6}));
+        log_info("null×3: %s, %s, %s",
+                 HW_ADDR_TO_STR(&(const struct hw_addr_data){6}),
+                 s,
+                 HW_ADDR_TO_STR(&(const struct hw_addr_data){6}));
+
+        log_info("infiniband: %s", HW_ADDR_TO_STR(&INFINIBAD_ADDR_1));
+
+        /* Let's nest function calls in a stupid way. */
+        _cleanup_free_ char *t = NULL;
+        log_info("infiniband×3: %s\n%14s%s\n%14s%s",
+                 HW_ADDR_TO_STR(&(const struct hw_addr_data){20}), "",
+                 t = strdup(HW_ADDR_TO_STR(&INFINIBAD_ADDR_1)), "",
+                 HW_ADDR_TO_STR(&(const struct hw_addr_data){20}));
+
+        const char *p;
+        /* Let's use a separate selection statement */
+        if ((p = HW_ADDR_TO_STR(&(const struct hw_addr_data){6})))
+                log_info("joint: %s, %s", s, p);
+}
+
+static void test_parse_hw_addr_full_one(const char *in, size_t expected_len, const char *expected) {
+        struct hw_addr_data h;
+        int r;
+
+        r = parse_hw_addr_full(in, expected_len, &h);
+        log_debug_errno(r, "parse_hw_addr(\"%s\", len=%zu) → \"%s\" (expected: \"%s\") : %d/%m",
+                        in, expected_len, r >= 0 ? HW_ADDR_TO_STR(&h) : "n/a", strna(expected), r);
+        assert_se((r >= 0) == !!expected);
+        if (r >= 0) {
+                if (!IN_SET(expected_len, 0, SIZE_MAX))
+                        assert_se(h.length == expected_len);
+                assert_se(streq(HW_ADDR_TO_STR(&h), expected));
+        }
+}
+
+TEST(parse_hw_addr) {
+        /* IPv4 */
+        test_parse_hw_addr_full_one("10.0.0.1", 0, "0a:00:00:01");
+        test_parse_hw_addr_full_one("10.0.0.1", 4, "0a:00:00:01");
+        test_parse_hw_addr_full_one("192.168.0.1", 0, "c0:a8:00:01");
+        test_parse_hw_addr_full_one("192.168.0.1", 4, "c0:a8:00:01");
+        /* IPv6 */
+        test_parse_hw_addr_full_one("::", 0, "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00");
+        test_parse_hw_addr_full_one("::", 16, "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00");
+        test_parse_hw_addr_full_one("::1", 0, "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:01");
+        test_parse_hw_addr_full_one("::1", 16, "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:01");
+        test_parse_hw_addr_full_one("1234::", 0, "12:34:00:00:00:00:00:00:00:00:00:00:00:00:00:00");
+        test_parse_hw_addr_full_one("1234::", 16, "12:34:00:00:00:00:00:00:00:00:00:00:00:00:00:00");
+        test_parse_hw_addr_full_one("12:34::56", 0, "00:12:00:34:00:00:00:00:00:00:00:00:00:00:00:56");
+        test_parse_hw_addr_full_one("12:34::56", 16, "00:12:00:34:00:00:00:00:00:00:00:00:00:00:00:56");
+        test_parse_hw_addr_full_one("12aa:34::56", 0, "12:aa:00:34:00:00:00:00:00:00:00:00:00:00:00:56");
+        test_parse_hw_addr_full_one("12aa:34::56", 16, "12:aa:00:34:00:00:00:00:00:00:00:00:00:00:00:56");
+        test_parse_hw_addr_full_one("1234:5678:90ab:cdef:1234:5678:90ab:cdef", 0, "12:34:56:78:90:ab:cd:ef:12:34:56:78:90:ab:cd:ef");
+        test_parse_hw_addr_full_one("1234:5678:90ab:cdef:1234:5678:90ab:cdef", 16, "12:34:56:78:90:ab:cd:ef:12:34:56:78:90:ab:cd:ef");
+        /* Dot */
+        test_parse_hw_addr_full_one("12.34", 0, "00:12:00:34");
+        test_parse_hw_addr_full_one("12.34", 4, "00:12:00:34");
+        test_parse_hw_addr_full_one("12.34", SIZE_MAX, "00:12:00:34");
+        test_parse_hw_addr_full_one("12.34.56", 0, "00:12:00:34:00:56");
+        test_parse_hw_addr_full_one("12.34.56", 6, "00:12:00:34:00:56");
+        test_parse_hw_addr_full_one("12.34.56", SIZE_MAX, "00:12:00:34:00:56");
+        test_parse_hw_addr_full_one("12.34.56.78", 0, "0c:22:38:4e"); /* IPv4 address */
+        test_parse_hw_addr_full_one("12.34.56.78", 4, "0c:22:38:4e"); /* IPv4 address */
+        test_parse_hw_addr_full_one("12.34.56.78", 8, "00:12:00:34:00:56:00:78");
+        test_parse_hw_addr_full_one("12.34.56.78", SIZE_MAX, "00:12:00:34:00:56:00:78");
+        test_parse_hw_addr_full_one("12.34.56.78.90", 0, NULL);
+        test_parse_hw_addr_full_one("12.34.56.78.90", 10, "00:12:00:34:00:56:00:78:00:90");
+        test_parse_hw_addr_full_one("12.34.56.78.90", SIZE_MAX, "00:12:00:34:00:56:00:78:00:90");
+        test_parse_hw_addr_full_one("aabb.ccdd", 0, "aa:bb:cc:dd");
+        test_parse_hw_addr_full_one("aabb.ccdd", 4, "aa:bb:cc:dd");
+        test_parse_hw_addr_full_one("aabb.ccdd", SIZE_MAX, "aa:bb:cc:dd");
+        test_parse_hw_addr_full_one("aabb.ccdd.eeff", 0, "aa:bb:cc:dd:ee:ff");
+        test_parse_hw_addr_full_one("aabb.ccdd.eeff", 6, "aa:bb:cc:dd:ee:ff");
+        test_parse_hw_addr_full_one("aabb.ccdd.eeff", SIZE_MAX, "aa:bb:cc:dd:ee:ff");
+        /* Colon */
+        test_parse_hw_addr_full_one("12:34", 0, NULL);
+        test_parse_hw_addr_full_one("12:34", 2, "12:34");
+        test_parse_hw_addr_full_one("12:34", SIZE_MAX, "12:34");
+        test_parse_hw_addr_full_one("12:34:56:78:90:ab", 0, "12:34:56:78:90:ab");
+        test_parse_hw_addr_full_one("12:34:56:78:90:ab", 6, "12:34:56:78:90:ab");
+        test_parse_hw_addr_full_one("12:34:56:78:90:ab", SIZE_MAX, "12:34:56:78:90:ab");
+        test_parse_hw_addr_full_one("12:34:56:78:90:ab:cd:ef", 0, "00:12:00:34:00:56:00:78:00:90:00:ab:00:cd:00:ef"); /* IPv6 */
+        test_parse_hw_addr_full_one("12:34:56:78:90:ab:cd:ef", 8, "12:34:56:78:90:ab:cd:ef");
+        test_parse_hw_addr_full_one("12:34:56:78:90:ab:cd:ef", 16, "00:12:00:34:00:56:00:78:00:90:00:ab:00:cd:00:ef"); /* IPv6 */
+        test_parse_hw_addr_full_one("12:34:56:78:90:ab:cd:ef", SIZE_MAX, "12:34:56:78:90:ab:cd:ef");
+        test_parse_hw_addr_full_one("12:34:56:78:90:AB:CD:EF", 0, "00:12:00:34:00:56:00:78:00:90:00:ab:00:cd:00:ef"); /* IPv6 */
+        test_parse_hw_addr_full_one("12:34:56:78:90:AB:CD:EF", 8, "12:34:56:78:90:ab:cd:ef");
+        test_parse_hw_addr_full_one("12:34:56:78:90:AB:CD:EF", 16, "00:12:00:34:00:56:00:78:00:90:00:ab:00:cd:00:ef"); /* IPv6 */
+        test_parse_hw_addr_full_one("12:34:56:78:90:AB:CD:EF", SIZE_MAX, "12:34:56:78:90:ab:cd:ef");
+        /* Hyphen */
+        test_parse_hw_addr_full_one("12-34", 0, NULL);
+        test_parse_hw_addr_full_one("12-34", 2, "12:34");
+        test_parse_hw_addr_full_one("12-34", SIZE_MAX, "12:34");
+        test_parse_hw_addr_full_one("12-34-56-78-90-ab-cd-ef", 0, NULL);
+        test_parse_hw_addr_full_one("12-34-56-78-90-ab-cd-ef", 8, "12:34:56:78:90:ab:cd:ef");
+        test_parse_hw_addr_full_one("12-34-56-78-90-ab-cd-ef", SIZE_MAX, "12:34:56:78:90:ab:cd:ef");
+        test_parse_hw_addr_full_one("12-34-56-78-90-AB-CD-EF", 0, NULL);
+        test_parse_hw_addr_full_one("12-34-56-78-90-AB-CD-EF", 8, "12:34:56:78:90:ab:cd:ef");
+        test_parse_hw_addr_full_one("12-34-56-78-90-AB-CD-EF", SIZE_MAX, "12:34:56:78:90:ab:cd:ef");
+
+        /* Invalid */
+        test_parse_hw_addr_full_one("", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("12", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("12.", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("12.34.", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one(".12", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one(".12.34", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("12.34:56", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("1234:56", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("1234:56", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("12:34:", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one(":12:34", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("::1", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("aa:bb-cc", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("aa:xx", SIZE_MAX, NULL);
+        test_parse_hw_addr_full_one("aa bb", SIZE_MAX, NULL);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-exec-util.c b/src/test/test-exec-util.c
index 4c11f54..2304f6a 100644
--- a/src/test/test-exec-util.c
+++ b/src/test/test-exec-util.c
@@ -7,7 +7,7 @@
 
 #include "alloc-util.h"
 #include "copy.h"
-#include "def.h"
+#include "constants.h"
 #include "env-util.h"
 #include "exec-util.h"
 #include "fd-util.h"
@@ -20,28 +20,29 @@
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
+#include "tmpfile-util.h"
 
 static int here = 0, here2 = 0, here3 = 0;
 static void *ignore_stdout_args[] = { &here, &here2, &here3 };
 
 /* noop handlers, just check that arguments are passed correctly */
 static int ignore_stdout_func(int fd, void *arg) {
-        assert(fd >= 0);
-        assert(arg == &here);
+        assert_se(fd >= 0);
+        assert_se(arg == &here);
         safe_close(fd);
 
         return 0;
 }
 static int ignore_stdout_func2(int fd, void *arg) {
-        assert(fd >= 0);
-        assert(arg == &here2);
+        assert_se(fd >= 0);
+        assert_se(arg == &here2);
         safe_close(fd);
 
         return 0;
 }
 static int ignore_stdout_func3(int fd, void *arg) {
-        assert(fd >= 0);
-        assert(arg == &here3);
+        assert_se(fd >= 0);
+        assert_se(arg == &here3);
         safe_close(fd);
 
         return 0;
@@ -53,10 +54,8 @@
         ignore_stdout_func3,
 };
 
-static void test_execute_directory(bool gather_stdout) {
-        char template_lo[] = "/tmp/test-exec-util.lo.XXXXXXX";
-        char template_hi[] = "/tmp/test-exec-util.hi.XXXXXXX";
-        const char * dirs[] = {template_hi, template_lo, NULL};
+static void test_execute_directory_one(bool gather_stdout) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmp_lo = NULL, *tmp_hi = NULL;
         const char *name, *name2, *name3,
                 *overridden, *override,
                 *masked, *mask,
@@ -65,20 +64,22 @@
 
         log_info("/* %s (%s) */", __func__, gather_stdout ? "gathering stdout" : "asynchronous");
 
-        assert_se(mkdtemp(template_lo));
-        assert_se(mkdtemp(template_hi));
+        assert_se(mkdtemp_malloc("/tmp/test-exec-util.lo.XXXXXXX", &tmp_lo) >= 0);
+        assert_se(mkdtemp_malloc("/tmp/test-exec-util.hi.XXXXXXX", &tmp_hi) >= 0);
 
-        name = strjoina(template_lo, "/script");
-        name2 = strjoina(template_hi, "/script2");
-        name3 = strjoina(template_lo, "/useless");
-        overridden = strjoina(template_lo, "/overridden");
-        override = strjoina(template_hi, "/overridden");
-        masked = strjoina(template_lo, "/masked");
-        mask = strjoina(template_hi, "/masked");
-        masked2 = strjoina(template_lo, "/masked2");
-        mask2 = strjoina(template_hi, "/masked2");
-        masked2e = strjoina(template_lo, "/masked2e");
-        mask2e = strjoina(template_hi, "/masked2e");
+        const char * dirs[] = { tmp_hi, tmp_lo, NULL };
+
+        name = strjoina(tmp_lo, "/script");
+        name2 = strjoina(tmp_hi, "/script2");
+        name3 = strjoina(tmp_lo, "/useless");
+        overridden = strjoina(tmp_lo, "/overridden");
+        override = strjoina(tmp_hi, "/overridden");
+        masked = strjoina(tmp_lo, "/masked");
+        mask = strjoina(tmp_hi, "/masked");
+        masked2 = strjoina(tmp_lo, "/masked2");
+        mask2 = strjoina(tmp_hi, "/masked2");
+        masked2e = strjoina(tmp_lo, "/masked2e");
+        mask2e = strjoina(tmp_hi, "/masked2e");
 
         assert_se(write_string_file(name,
                                     "#!/bin/sh\necho 'Executing '$0\ntouch $(dirname $0)/it_works",
@@ -123,41 +124,43 @@
         else
                 execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, NULL, NULL, EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS);
 
-        assert_se(chdir(template_lo) == 0);
+        assert_se(chdir(tmp_lo) == 0);
         assert_se(access("it_works", F_OK) >= 0);
         assert_se(access("failed", F_OK) < 0);
 
-        assert_se(chdir(template_hi) == 0);
+        assert_se(chdir(tmp_hi) == 0);
         assert_se(access("it_works2", F_OK) >= 0);
         assert_se(access("failed", F_OK) < 0);
-
-        (void) rm_rf(template_lo, REMOVE_ROOT|REMOVE_PHYSICAL);
-        (void) rm_rf(template_hi, REMOVE_ROOT|REMOVE_PHYSICAL);
 }
 
-static void test_execution_order(void) {
-        char template_lo[] = "/tmp/test-exec-util-lo.XXXXXXX";
-        char template_hi[] = "/tmp/test-exec-util-hi.XXXXXXX";
-        const char *dirs[] = {template_hi, template_lo, NULL};
+TEST(execute_directory) {
+        test_execute_directory_one(true);
+        test_execute_directory_one(false);
+}
+
+TEST(execution_order) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmp_lo = NULL, *tmp_hi = NULL;
         const char *name, *name2, *name3, *overridden, *override, *masked, *mask;
         const char *output, *t;
         _cleanup_free_ char *contents = NULL;
 
-        assert_se(mkdtemp(template_lo));
-        assert_se(mkdtemp(template_hi));
+        assert_se(mkdtemp_malloc("/tmp/test-exec-util-lo.XXXXXXX", &tmp_lo) >= 0);
+        assert_se(mkdtemp_malloc("/tmp/test-exec-util-hi.XXXXXXX", &tmp_hi) >= 0);
 
-        output = strjoina(template_hi, "/output");
+        const char *dirs[] = { tmp_hi, tmp_lo, NULL };
+
+        output = strjoina(tmp_hi, "/output");
 
         log_info("/* %s >>%s */", __func__, output);
 
         /* write files in "random" order */
-        name2 = strjoina(template_lo, "/90-bar");
-        name = strjoina(template_hi, "/80-foo");
-        name3 = strjoina(template_lo, "/last");
-        overridden = strjoina(template_lo, "/30-override");
-        override = strjoina(template_hi, "/30-override");
-        masked = strjoina(template_lo, "/10-masked");
-        mask = strjoina(template_hi, "/10-masked");
+        name2 = strjoina(tmp_lo, "/90-bar");
+        name = strjoina(tmp_hi, "/80-foo");
+        name3 = strjoina(tmp_lo, "/last");
+        overridden = strjoina(tmp_lo, "/30-override");
+        override = strjoina(tmp_hi, "/30-override");
+        masked = strjoina(tmp_lo, "/10-masked");
+        mask = strjoina(tmp_hi, "/10-masked");
 
         t = strjoina("#!/bin/sh\necho $(basename $0) >>", output);
         assert_se(write_string_file(name, t, WRITE_STRING_FILE_CREATE) == 0);
@@ -193,9 +196,6 @@
 
         assert_se(read_full_file(output, &contents, NULL) >= 0);
         assert_se(streq(contents, "30-override\n80-foo\n90-bar\nlast\n"));
-
-        (void) rm_rf(template_lo, REMOVE_ROOT|REMOVE_PHYSICAL);
-        (void) rm_rf(template_hi, REMOVE_ROOT|REMOVE_PHYSICAL);
 }
 
 static int gather_stdout_one(int fd, void *arg) {
@@ -212,7 +212,7 @@
         return 0;
 }
 static int gather_stdout_two(int fd, void *arg) {
-        char ***s = arg, **t;
+        char ***s = arg;
 
         STRV_FOREACH(t, *s)
                 assert_se(write(fd, *t, strlen(*t)) == (ssize_t) strlen(*t));
@@ -231,15 +231,14 @@
         return 0;
 }
 
-const gather_stdout_callback_t gather_stdout[] = {
+const gather_stdout_callback_t gather_stdouts[] = {
         gather_stdout_one,
         gather_stdout_two,
         gather_stdout_three,
 };
 
-static void test_stdout_gathering(void) {
-        char template[] = "/tmp/test-exec-util.XXXXXXX";
-        const char *dirs[] = {template, NULL};
+TEST(stdout_gathering) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmpdir = NULL;
         const char *name, *name2, *name3;
         int r;
 
@@ -248,14 +247,14 @@
 
         void* args[] = {&tmp, &tmp, &output};
 
-        assert_se(mkdtemp(template));
+        assert_se(mkdtemp_malloc("/tmp/test-exec-util.XXXXXXX", &tmpdir) >= 0);
 
-        log_info("/* %s */", __func__);
+        const char *dirs[] = { tmpdir, NULL };
 
         /* write files */
-        name = strjoina(template, "/10-foo");
-        name2 = strjoina(template, "/20-bar");
-        name3 = strjoina(template, "/30-last");
+        name = strjoina(tmpdir, "/10-foo");
+        name2 = strjoina(tmpdir, "/20-bar");
+        name3 = strjoina(tmpdir, "/30-last");
 
         assert_se(write_string_file(name,
                                     "#!/bin/sh\necho a\necho b\necho c\n",
@@ -274,7 +273,8 @@
         if (access(name, X_OK) < 0 && ERRNO_IS_PRIVILEGE(errno))
                 return;
 
-        r = execute_directories(dirs, DEFAULT_TIMEOUT_USEC, gather_stdout, args, NULL, NULL, EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS);
+        r = execute_directories(dirs, DEFAULT_TIMEOUT_USEC, gather_stdouts, args, NULL, NULL,
+                                EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS);
         assert_se(r >= 0);
 
         log_info("got: %s", output);
@@ -282,9 +282,8 @@
         assert_se(streq(output, "a\nb\nc\nd\n"));
 }
 
-static void test_environment_gathering(void) {
-        char template[] = "/tmp/test-exec-util.XXXXXXX", **p;
-        const char *dirs[] = {template, NULL};
+TEST(environment_gathering) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmpdir = NULL;
         const char *name, *name2, *name3, *old;
         int r;
 
@@ -293,14 +292,14 @@
 
         void* const args[] = { &tmp, &tmp, &env };
 
-        assert_se(mkdtemp(template));
+        assert_se(mkdtemp_malloc("/tmp/test-exec-util.XXXXXXX", &tmpdir) >= 0);
 
-        log_info("/* %s */", __func__);
+        const char *dirs[] = { tmpdir, NULL };
 
         /* write files */
-        name = strjoina(template, "/10-foo");
-        name2 = strjoina(template, "/20-bar");
-        name3 = strjoina(template, "/30-last");
+        name = strjoina(tmpdir, "/10-foo");
+        name2 = strjoina(tmpdir, "/20-bar");
+        name3 = strjoina(tmpdir, "/30-last");
 
         assert_se(write_string_file(name,
                                     "#!/bin/sh\n"
@@ -331,11 +330,9 @@
         assert_se(chmod(name2, 0755) == 0);
         assert_se(chmod(name3, 0755) == 0);
 
-        /* When booting in containers or without initramfs there might not be
-         * any PATH in the environment and if there is no PATH /bin/sh built-in
-         * PATH may leak and override systemd's DEFAULT_PATH which is not
-         * good. Force our own PATH in environment, to prevent expansion of sh
-         * built-in $PATH */
+        /* When booting in containers or without initrd there might not be any PATH in the environment and if
+         * there is no PATH /bin/sh built-in PATH may leak and override systemd's DEFAULT_PATH which is not
+         * good. Force our own PATH in environment, to prevent expansion of sh built-in $PATH */
         old = getenv("PATH");
         r = setenv("PATH", "no-sh-built-in-path", 1);
         assert_se(r >= 0);
@@ -375,20 +372,19 @@
         assert_se(set_unset_env("PATH", old, true) == 0);
 }
 
-static void test_error_catching(void) {
-        char template[] = "/tmp/test-exec-util.XXXXXXX";
-        const char *dirs[] = {template, NULL};
+TEST(error_catching) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmpdir = NULL;
         const char *name, *name2, *name3;
         int r;
 
-        assert_se(mkdtemp(template));
+        assert_se(mkdtemp_malloc("/tmp/test-exec-util.XXXXXXX", &tmpdir) >= 0);
 
-        log_info("/* %s */", __func__);
+        const char *dirs[] = { tmpdir, NULL };
 
         /* write files */
-        name = strjoina(template, "/10-foo");
-        name2 = strjoina(template, "/20-bar");
-        name3 = strjoina(template, "/30-last");
+        name = strjoina(tmpdir, "/10-foo");
+        name2 = strjoina(tmpdir, "/20-bar");
+        name3 = strjoina(tmpdir, "/30-last");
 
         assert_se(write_string_file(name,
                                     "#!/bin/sh\necho a\necho b\necho c\n",
@@ -413,7 +409,7 @@
         assert_se(r == 42);
 }
 
-static void test_exec_command_flags_from_strv(void) {
+TEST(exec_command_flags_from_strv) {
         ExecCommandFlags flags = 0;
         char **valid_strv = STRV_MAKE("no-env-expand", "no-setuid", "ignore-failure");
         char **invalid_strv = STRV_MAKE("no-env-expand", "no-setuid", "nonexistent-option", "ignore-failure");
@@ -433,7 +429,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_exec_command_flags_to_strv(void) {
+TEST(exec_command_flags_to_strv) {
         _cleanup_strv_free_ char **opts = NULL, **empty_opts = NULL, **invalid_opts = NULL;
         ExecCommandFlags flags = 0;
         int r;
@@ -457,17 +453,4 @@
         assert_se(r == -EINVAL);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_execute_directory(true);
-        test_execute_directory(false);
-        test_execution_order();
-        test_stdout_gathering();
-        test_environment_gathering();
-        test_error_catching();
-        test_exec_command_flags_from_strv();
-        test_exec_command_flags_to_strv();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-execute.c b/src/test/test-execute.c
index 88e1b30..52a38f7 100644
--- a/src/test/test-execute.c
+++ b/src/test/test-execute.c
@@ -4,9 +4,14 @@
 #include <sys/prctl.h>
 #include <sys/types.h>
 
+#include "sd-event.h"
+
 #include "capability-util.h"
 #include "cpu-set-util.h"
+#include "copy.h"
+#include "dropin.h"
 #include "errno-list.h"
+#include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
 #include "macro.h"
@@ -14,20 +19,26 @@
 #include "missing_prctl.h"
 #include "mkdir.h"
 #include "path-util.h"
+#include "process-util.h"
 #include "rm-rf.h"
 #if HAVE_SECCOMP
 #include "seccomp-util.h"
 #endif
 #include "service.h"
+#include "signal-util.h"
+#include "static-destruct.h"
 #include "stat-util.h"
 #include "tests.h"
+#include "tmpfile-util.h"
 #include "unit.h"
 #include "user-util.h"
-#include "util.h"
 #include "virt.h"
 
+static char *user_runtime_unit_dir = NULL;
 static bool can_unshare;
 
+STATIC_DESTRUCTOR_REGISTER(user_runtime_unit_dir, freep);
+
 typedef void (*test_function_t)(Manager *m);
 
 static int cld_dumped_to_killed(int code) {
@@ -79,16 +90,15 @@
         exec_status_dump(&service->main_exec_status, stdout, "\t");
 
         if (cld_dumped_to_killed(service->main_exec_status.code) != cld_dumped_to_killed(code_expected)) {
-                log_error("%s:%u:%s %s: exit code %d, expected %d",
-                          file, line, func,
-                          unit->id,
+                log_error("%s:%u:%s %s: can_unshare=%s: exit code %d, expected %d",
+                          file, line, func, unit->id, yes_no(can_unshare),
                           service->main_exec_status.code, code_expected);
                 abort();
         }
 
         if (service->main_exec_status.status != status_expected) {
-                log_error("%s:%u:%s: %s: exit status %d, expected %d",
-                          file, line, func, unit->id,
+                log_error("%s:%u:%s: %s: can_unshare=%s: exit status %d, expected %d",
+                          file, line, func, unit->id, yes_no(can_unshare),
                           service->main_exec_status.status, status_expected);
                 abort();
         }
@@ -106,9 +116,8 @@
         service = SERVICE(unit);
 
         if (service->result != result_expected) {
-                log_error("%s:%u:%s: %s: service end result %s, expected %s",
-                          file, line, func,
-                          unit->id,
+                log_error("%s:%u:%s: %s: can_unshare=%s: service end result %s, expected %s",
+                          file, line, func, unit->id, yes_no(can_unshare),
                           service_result_to_string(service->result),
                           service_result_to_string(result_expected));
                 abort();
@@ -164,7 +173,7 @@
         struct passwd *p;
         struct group *g;
 
-        assert(name);
+        assert_se(name);
 
         p = getpwnam(name);
         if (!p ||
@@ -180,19 +189,15 @@
 }
 
 static bool is_inaccessible_available(void) {
-        const char *p;
-
         FOREACH_STRING(p,
-                "/run/systemd/inaccessible/reg",
-                "/run/systemd/inaccessible/dir",
-                "/run/systemd/inaccessible/chr",
-                "/run/systemd/inaccessible/blk",
-                "/run/systemd/inaccessible/fifo",
-                "/run/systemd/inaccessible/sock"
-        ) {
+                       "/run/systemd/inaccessible/reg",
+                       "/run/systemd/inaccessible/dir",
+                       "/run/systemd/inaccessible/chr",
+                       "/run/systemd/inaccessible/blk",
+                       "/run/systemd/inaccessible/fifo",
+                       "/run/systemd/inaccessible/sock")
                 if (access(p, F_OK) < 0)
                         return false;
-        }
 
         return true;
 }
@@ -204,7 +209,7 @@
         assert_se(unit_name);
 
         assert_se(manager_load_startable_unit_or_warn(m, unit_name, NULL, &unit) >= 0);
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
         check_main_result(file, line, func, m, unit, status_expected, code_expected);
 }
 #define test(m, unit_name, status_expected, code_expected) \
@@ -217,7 +222,7 @@
         assert_se(unit_name);
 
         assert_se(manager_load_startable_unit_or_warn(m, unit_name, NULL, &unit) >= 0);
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
         check_service_result(file, line, func, m, unit, result_expected);
 }
 #define test_service(m, unit_name, result_expected) \
@@ -265,6 +270,93 @@
         (void) rm_rf("/tmp/test-exec_workingdirectory", REMOVE_ROOT|REMOVE_PHYSICAL);
 }
 
+static void test_exec_execsearchpath(Manager *m) {
+        assert_se(mkdir_p("/tmp/test-exec_execsearchpath", 0755) >= 0);
+
+        assert_se(copy_file("/bin/ls", "/tmp/test-exec_execsearchpath/ls_temp", 0,  0777, 0, 0, COPY_REPLACE) >= 0);
+
+        test(m, "exec-execsearchpath.service", 0, CLD_EXITED);
+
+        assert_se(rm_rf("/tmp/test-exec_execsearchpath", REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+
+        test(m, "exec-execsearchpath.service", EXIT_EXEC, CLD_EXITED);
+}
+
+static void test_exec_execsearchpath_specifier(Manager *m) {
+        test(m, "exec-execsearchpath-unit-specifier.service", 0, CLD_EXITED);
+}
+
+static void test_exec_execsearchpath_environment(Manager *m) {
+        test(m, "exec-execsearchpath-environment.service", 0, CLD_EXITED);
+        test(m, "exec-execsearchpath-environment-path-set.service", 0, CLD_EXITED);
+}
+
+static void test_exec_execsearchpath_environment_files(Manager *m) {
+        static const char path_not_set[] =
+                "VAR1='word1 word2'\n"
+                "VAR2=word3 \n"
+                "# comment1\n"
+                "\n"
+                "; comment2\n"
+                " ; # comment3\n"
+                "line without an equal\n"
+                "VAR3='$word 5 6'\n"
+                "VAR4='new\nline'\n"
+                "VAR5=password\\with\\backslashes";
+
+        static const char path_set[] =
+                "VAR1='word1 word2'\n"
+                "VAR2=word3 \n"
+                "# comment1\n"
+                "\n"
+                "; comment2\n"
+                " ; # comment3\n"
+                "line without an equal\n"
+                "VAR3='$word 5 6'\n"
+                "VAR4='new\nline'\n"
+                "VAR5=password\\with\\backslashes\n"
+                "PATH=/usr";
+
+        int r;
+
+        r = write_string_file("/tmp/test-exec_execsearchpath_environmentfile.conf", path_not_set, WRITE_STRING_FILE_CREATE);
+
+        assert_se(r == 0);
+
+        test(m, "exec-execsearchpath-environmentfile.service", 0, CLD_EXITED);
+
+        (void) unlink("/tmp/test-exec_environmentfile.conf");
+
+
+        r = write_string_file("/tmp/test-exec_execsearchpath_environmentfile-set.conf", path_set, WRITE_STRING_FILE_CREATE);
+
+        assert_se(r == 0);
+
+        test(m, "exec-execsearchpath-environmentfile-set.service", 0, CLD_EXITED);
+
+        (void) unlink("/tmp/test-exec_environmentfile-set.conf");
+}
+
+static void test_exec_execsearchpath_passenvironment(Manager *m) {
+        assert_se(setenv("VAR1", "word1 word2", 1) == 0);
+        assert_se(setenv("VAR2", "word3", 1) == 0);
+        assert_se(setenv("VAR3", "$word 5 6", 1) == 0);
+        assert_se(setenv("VAR4", "new\nline", 1) == 0);
+        assert_se(setenv("VAR5", "passwordwithbackslashes", 1) == 0);
+
+        test(m, "exec-execsearchpath-passenvironment.service", 0, CLD_EXITED);
+
+        assert_se(setenv("PATH", "/usr", 1) == 0);
+        test(m, "exec-execsearchpath-passenvironment-set.service", 0, CLD_EXITED);
+
+        assert_se(unsetenv("VAR1") == 0);
+        assert_se(unsetenv("VAR2") == 0);
+        assert_se(unsetenv("VAR3") == 0);
+        assert_se(unsetenv("VAR4") == 0);
+        assert_se(unsetenv("VAR5") == 0);
+        assert_se(unsetenv("PATH") == 0);
+}
+
 static void test_exec_personality(Manager *m) {
 #if defined(__x86_64__)
         test(m, "exec-personality-x86-64.service", 0, CLD_EXITED);
@@ -284,6 +376,8 @@
 
 #elif defined(__i386__)
         test(m, "exec-personality-x86.service", 0, CLD_EXITED);
+#elif defined(__loongarch64)
+        test(m, "exec-personality-loongarch64.service", 0, CLD_EXITED);
 #else
         log_notice("Unknown personality, skipping %s", __func__);
 #endif
@@ -408,6 +502,188 @@
         test(m, "exec-inaccessiblepaths-mount-propagation.service", can_unshare ? 0 : EXIT_FAILURE, CLD_EXITED);
 }
 
+static int on_spawn_io(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
+        char **result = userdata;
+        char buf[4096];
+        ssize_t l;
+
+        assert_se(s);
+        assert_se(fd >= 0);
+
+        l = read(fd, buf, sizeof(buf) - 1);
+        if (l < 0) {
+                if (errno == EAGAIN)
+                        goto reenable;
+
+                return 0;
+        }
+        if (l == 0)
+                return 0;
+
+        buf[l] = '\0';
+        if (result)
+                assert_se(strextend(result, buf));
+        else
+                log_error("ldd: %s", buf);
+
+reenable:
+        /* Re-enable the event source if we did not encounter EOF */
+        assert_se(sd_event_source_set_enabled(s, SD_EVENT_ONESHOT) >= 0);
+        return 0;
+}
+
+static int on_spawn_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
+        pid_t *pid = userdata;
+
+        assert_se(pid);
+
+        (void) kill(*pid, SIGKILL);
+
+        return 1;
+}
+
+static int on_spawn_sigchld(sd_event_source *s, const siginfo_t *si, void *userdata) {
+        int ret = -EIO;
+
+        assert_se(si);
+
+        if (si->si_code == CLD_EXITED)
+                ret = si->si_status;
+
+        sd_event_exit(sd_event_source_get_event(s), ret);
+        return 1;
+}
+
+static int find_libraries(const char *exec, char ***ret) {
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        _cleanup_(sd_event_source_unrefp) sd_event_source *sigchld_source = NULL;
+        _cleanup_(sd_event_source_unrefp) sd_event_source *stdout_source = NULL;
+        _cleanup_(sd_event_source_unrefp) sd_event_source *stderr_source = NULL;
+        _cleanup_close_pair_ int outpipe[2] = PIPE_EBADF, errpipe[2] = PIPE_EBADF;
+        _cleanup_strv_free_ char **libraries = NULL;
+        _cleanup_free_ char *result = NULL;
+        pid_t pid;
+        int r;
+
+        assert_se(exec);
+        assert_se(ret);
+
+        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGCHLD, -1) >= 0);
+
+        assert_se(pipe2(outpipe, O_NONBLOCK|O_CLOEXEC) == 0);
+        assert_se(pipe2(errpipe, O_NONBLOCK|O_CLOEXEC) == 0);
+
+        r = safe_fork("(spawn-ldd)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
+        assert_se(r >= 0);
+        if (r == 0) {
+                if (rearrange_stdio(-EBADF, TAKE_FD(outpipe[1]), TAKE_FD(errpipe[1])) < 0)
+                        _exit(EXIT_FAILURE);
+
+                (void) close_all_fds(NULL, 0);
+
+                execlp("ldd", "ldd", exec, NULL);
+                _exit(EXIT_FAILURE);
+        }
+
+        outpipe[1] = safe_close(outpipe[1]);
+        errpipe[1] = safe_close(errpipe[1]);
+
+        assert_se(sd_event_new(&e) >= 0);
+
+        assert_se(sd_event_add_time_relative(e, NULL, CLOCK_MONOTONIC,
+                                             10 * USEC_PER_SEC, USEC_PER_SEC, on_spawn_timeout, &pid) >= 0);
+        assert_se(sd_event_add_io(e, &stdout_source, outpipe[0], EPOLLIN, on_spawn_io, &result) >= 0);
+        assert_se(sd_event_source_set_enabled(stdout_source, SD_EVENT_ONESHOT) >= 0);
+        assert_se(sd_event_add_io(e, &stderr_source, errpipe[0], EPOLLIN, on_spawn_io, NULL) >= 0);
+        assert_se(sd_event_source_set_enabled(stderr_source, SD_EVENT_ONESHOT) >= 0);
+        assert_se(sd_event_add_child(e, &sigchld_source, pid, WEXITED, on_spawn_sigchld, NULL) >= 0);
+        /* SIGCHLD should be processed after IO is complete */
+        assert_se(sd_event_source_set_priority(sigchld_source, SD_EVENT_PRIORITY_NORMAL + 1) >= 0);
+
+        assert_se(sd_event_loop(e) >= 0);
+
+        _cleanup_strv_free_ char **v = NULL;
+        assert_se(strv_split_newlines_full(&v, result, 0) >= 0);
+
+        STRV_FOREACH(q, v) {
+                _cleanup_free_ char *word = NULL;
+                const char *p = *q;
+
+                r = extract_first_word(&p, &word, NULL, 0);
+                assert_se(r >= 0);
+                if (r == 0)
+                        continue;
+
+                if (path_is_absolute(word)) {
+                        assert_se(strv_consume(&libraries, TAKE_PTR(word)) >= 0);
+                        continue;
+                }
+
+                word = mfree(word);
+                r = extract_first_word(&p, &word, NULL, 0);
+                assert_se(r >= 0);
+                if (r == 0)
+                        continue;
+
+                if (!streq_ptr(word, "=>"))
+                        continue;
+
+                word = mfree(word);
+                r = extract_first_word(&p, &word, NULL, 0);
+                assert_se(r >= 0);
+                if (r == 0)
+                        continue;
+
+                if (path_is_absolute(word)) {
+                        assert_se(strv_consume(&libraries, TAKE_PTR(word)) >= 0);
+                        continue;
+                }
+        }
+
+        *ret = TAKE_PTR(libraries);
+        return 0;
+}
+
+static void test_exec_mount_apivfs(Manager *m) {
+        _cleanup_free_ char *fullpath_touch = NULL, *fullpath_test = NULL, *data = NULL;
+        _cleanup_strv_free_ char **libraries = NULL, **libraries_test = NULL;
+        int r;
+
+        assert_se(user_runtime_unit_dir);
+
+        r = find_executable("touch", &fullpath_touch);
+        if (r < 0) {
+                log_notice_errno(r, "Skipping %s, could not find 'touch' command: %m", __func__);
+                return;
+        }
+        r = find_executable("test", &fullpath_test);
+        if (r < 0) {
+                log_notice_errno(r, "Skipping %s, could not find 'test' command: %m", __func__);
+                return;
+        }
+
+        assert_se(find_libraries(fullpath_touch, &libraries) >= 0);
+        assert_se(find_libraries(fullpath_test, &libraries_test) >= 0);
+        assert_se(strv_extend_strv(&libraries, libraries_test, true) >= 0);
+
+        assert_se(strextend(&data, "[Service]\n"));
+        assert_se(strextend(&data, "ExecStart=", fullpath_touch, " /aaa\n"));
+        assert_se(strextend(&data, "ExecStart=", fullpath_test, " -f /aaa\n"));
+        assert_se(strextend(&data, "BindReadOnlyPaths=", fullpath_touch, "\n"));
+        assert_se(strextend(&data, "BindReadOnlyPaths=", fullpath_test, "\n"));
+
+        STRV_FOREACH(p, libraries)
+                assert_se(strextend(&data, "BindReadOnlyPaths=", *p, "\n"));
+
+        assert_se(write_drop_in(user_runtime_unit_dir, "exec-mount-apivfs-no.service", 10, "bind-mount", data) >= 0);
+
+        assert_se(mkdir_p("/tmp/test-exec-mount-apivfs-no/root", 0755) >= 0);
+
+        test(m, "exec-mount-apivfs-no.service", can_unshare ? 0 : EXIT_NAMESPACE, CLD_EXITED);
+
+        (void) rm_rf("/tmp/test-exec-mount-apivfs-no/root", REMOVE_ROOT|REMOVE_PHYSICAL);
+}
+
 static void test_exec_noexecpaths(Manager *m) {
 
         test(m, "exec-noexecpaths-simple.service", can_unshare ? 0 : EXIT_FAILURE, CLD_EXITED);
@@ -803,6 +1079,7 @@
         test(m, "exec-specifier.service", 0, CLD_EXITED);
         test(m, "exec-specifier@foo-bar.service", 0, CLD_EXITED);
         test(m, "exec-specifier-interpolation.service", 0, CLD_EXITED);
+        test(m, "exec-specifier-credentials-dir.service", 0, CLD_EXITED);
 }
 
 static void test_exec_standardinput(Manager *m) {
@@ -829,6 +1106,12 @@
 }
 
 static void test_exec_umask_namespace(Manager *m) {
+        /* exec-specifier-credentials-dir.service creates /run/credentials and enables implicit
+         * InaccessiblePath= for the directory for all later services with mount namespace. */
+        if (!is_inaccessible_available()) {
+                log_notice("Testing without inaccessible, skipping %s", __func__);
+                return;
+        }
         test(m, "exec-umask-namespace.service", can_unshare ? 0 : EXIT_NAMESPACE, CLD_EXITED);
 }
 
@@ -839,7 +1122,7 @@
 
 #define entry(x) {x, #x}
 
-static int run_tests(UnitFileScope scope, const test_entry tests[], char **patterns) {
+static int run_tests(LookupScope scope, const test_entry tests[], char **patterns) {
         _cleanup_(manager_freep) Manager *m = NULL;
         int r;
 
@@ -850,7 +1133,7 @@
         if (manager_errno_skip_test(r))
                 return log_tests_skipped_errno(r, "manager_new");
         assert_se(r >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         for (const test_entry *test = tests; test->f; test++)
                 if (strv_fnmatch_or_empty(patterns, test->name, FNM_NOESCAPE))
@@ -877,6 +1160,7 @@
                 entry(test_exec_ignoresigpipe),
                 entry(test_exec_inaccessiblepaths),
                 entry(test_exec_ioschedulingclass),
+                entry(test_exec_mount_apivfs),
                 entry(test_exec_noexecpaths),
                 entry(test_exec_oomscoreadjust),
                 entry(test_exec_passenvironment),
@@ -902,11 +1186,16 @@
                 entry(test_exec_unsetenvironment),
                 entry(test_exec_user),
                 entry(test_exec_workingdirectory),
+                entry(test_exec_execsearchpath),
+                entry(test_exec_execsearchpath_environment),
+                entry(test_exec_execsearchpath_environment_files),
+                entry(test_exec_execsearchpath_passenvironment),
                 {},
         };
         static const test_entry system_tests[] = {
                 entry(test_exec_dynamicuser),
                 entry(test_exec_specifier),
+                entry(test_exec_execsearchpath_specifier),
                 entry(test_exec_systemcallfilter_system),
                 entry(test_exec_umask_namespace),
                 {},
@@ -938,10 +1227,15 @@
         if (r == -ENOMEDIUM)
                 return log_tests_skipped("cgroupfs not available");
 
-        _cleanup_free_ char *unit_dir = NULL;
+        if (path_is_read_only_fs("/sys") > 0)
+                return log_tests_skipped("/sys is mounted read-only");
+
+        _cleanup_free_ char *unit_dir = NULL, *unit_paths = NULL;
         assert_se(get_testdata_dir("test-execute/", &unit_dir) >= 0);
-        assert_se(set_unit_path(unit_dir) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
+        assert_se(user_runtime_unit_dir = path_join(runtime_dir, "systemd/user"));
+        assert_se(unit_paths = strjoin(unit_dir, ":", user_runtime_unit_dir));
+        assert_se(set_unit_path(unit_paths) >= 0);
 
         /* Unset VAR1, VAR2 and VAR3 which are used in the PassEnvironment test
          * cases, otherwise (and if they are present in the environment),
@@ -953,11 +1247,11 @@
         assert_se(unsetenv("VAR2") == 0);
         assert_se(unsetenv("VAR3") == 0);
 
-        r = run_tests(UNIT_FILE_USER, user_tests, argv + 1);
+        r = run_tests(LOOKUP_SCOPE_USER, user_tests, argv + 1);
         if (r != 0)
                 return r;
 
-        r = run_tests(UNIT_FILE_SYSTEM, system_tests, argv + 1);
+        r = run_tests(LOOKUP_SCOPE_SYSTEM, system_tests, argv + 1);
         if (r != 0)
                 return r;
 
@@ -979,11 +1273,11 @@
 
         can_unshare = false;
 
-        r = run_tests(UNIT_FILE_USER, user_tests, argv + 1);
+        r = run_tests(LOOKUP_SCOPE_USER, user_tests, argv + 1);
         if (r != 0)
                 return r;
 
-        return run_tests(UNIT_FILE_SYSTEM, system_tests, argv + 1);
+        return run_tests(LOOKUP_SCOPE_SYSTEM, system_tests, argv + 1);
 #else
         return 0;
 #endif
diff --git a/src/test/test-execve.c b/src/test/test-execve.c
new file mode 100644
index 0000000..38adc72
--- /dev/null
+++ b/src/test/test-execve.c
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "exec-util.h"
+#include "fd-util.h"
+#include "log.h"
+#include "main-func.h"
+#include "strv.h"
+#include "tests.h"
+
+/* This program can be used to call programs through fexecve / execveat(…, "", …, AT_EMPTY_PATH),
+ * when compiled with -Dfexecve=true, and the fallback paths, when -Dfexecve=false.
+ *
+ * Example:
+ * $ strace -e execveat build/test-execve /bin/grep Name /proc/self/status
+ * execveat(3, "", ["/bin/grep", "Name", "/proc/self/status"], NULL, AT_EMPTY_PATH) = 0
+ * Name:   3
+ *
+ * FIXME: use the new kernel api to set COMM properly when the kernel makes that available.
+ * C.f. ceedbf8185fc7593366679f02d31da63af8c4bd1.
+ */
+
+static int run(int argc, char **argv) {
+        _cleanup_close_ int fd;
+        char **args = strv_skip(argv, 1);
+        int r;
+
+        test_setup_logging(LOG_DEBUG);
+
+        args = !strv_isempty(args) ? args : STRV_MAKE("/bin/true");
+
+        fd = open(args[0], O_RDONLY | O_CLOEXEC);
+        if (fd < 0)
+                return log_error_errno(errno, "open(%s) failed: %m", args[0]);
+
+        r = fexecve_or_execve(fd, args[0], args, NULL);
+        assert_se(r < 0);
+        return log_error_errno(r, "fexecve_or_execve(%s) failed: %m", args[0]);
+}
+
+DEFINE_MAIN_FUNCTION(run);
diff --git a/src/test/test-exit-status.c b/src/test/test-exit-status.c
index 4dc1973..86d3976 100644
--- a/src/test/test-exit-status.c
+++ b/src/test/test-exit-status.c
@@ -4,9 +4,7 @@
 #include "string-util.h"
 #include "tests.h"
 
-static void test_exit_status_to_string(void) {
-        log_info("/* %s */", __func__);
-
+TEST(exit_status_to_string) {
         for (int i = -1; i <= 256; i++) {
                 const char *s, *class;
 
@@ -21,9 +19,7 @@
         }
 }
 
-static void test_exit_status_from_string(void) {
-        log_info("/* %s */", __func__);
-
+TEST(exit_status_from_string) {
         assert_se(exit_status_from_string("11") == 11);
         assert_se(exit_status_from_string("-1") == -ERANGE);
         assert_se(exit_status_from_string("256") == -ERANGE);
@@ -32,21 +28,11 @@
         assert_se(exit_status_from_string("FAILURE") == 1);
 }
 
-static void test_exit_status_NUMA_POLICY(void) {
-        log_info("/* %s */", __func__);
-
+TEST(exit_status_NUMA_POLICY) {
         assert_se(streq(exit_status_to_string(EXIT_NUMA_POLICY, EXIT_STATUS_FULL), "NUMA_POLICY"));
         assert_se(streq(exit_status_to_string(EXIT_NUMA_POLICY, EXIT_STATUS_SYSTEMD), "NUMA_POLICY"));
         assert_se(!exit_status_to_string(EXIT_NUMA_POLICY, EXIT_STATUS_BSD));
         assert_se(!exit_status_to_string(EXIT_NUMA_POLICY, EXIT_STATUS_LSB));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_exit_status_to_string();
-        test_exit_status_from_string();
-        test_exit_status_NUMA_POLICY();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-extract-word.c b/src/test/test-extract-word.c
index 8cf0b63..6e12fbe 100644
--- a/src/test/test-extract-word.c
+++ b/src/test/test-extract-word.c
@@ -6,13 +6,12 @@
 #include "extract-word.h"
 #include "log.h"
 #include "string-util.h"
+#include "tests.h"
 
-static void test_extract_first_word(void) {
+TEST(extract_first_word) {
         const char *p, *original;
         char *t;
 
-        log_info("/* %s */", __func__);
-
         p = original = "foobar waldo";
         assert_se(extract_first_word(&p, &t, NULL, 0) > 0);
         assert_se(streq(t, "foobar"));
@@ -536,12 +535,10 @@
         free(t);
 }
 
-static void test_extract_first_word_and_warn(void) {
+TEST(extract_first_word_and_warn) {
         const char *p, *original;
         char *t;
 
-        log_info("/* %s */", __func__);
-
         p = original = "foobar waldo";
         assert_se(extract_first_word_and_warn(&p, &t, NULL, 0, NULL, "fake", 1, original) > 0);
         assert_se(streq(t, "foobar"));
@@ -682,12 +679,10 @@
         assert_se(isempty(p));
 }
 
-static void test_extract_many_words(void) {
+TEST(extract_many_words) {
         const char *p, *original;
         char *a, *b, *c, *d, *e, *f;
 
-        log_info("/* %s */", __func__);
-
         p = original = "foobar waldi piep";
         assert_se(extract_many_words(&p, NULL, 0, &a, &b, &c, NULL) == 3);
         assert_se(isempty(p));
@@ -765,13 +760,4 @@
         free(a);
 }
 
-int main(int argc, char *argv[]) {
-        log_parse_environment();
-        log_open();
-
-        test_extract_first_word();
-        test_extract_first_word_and_warn();
-        test_extract_many_words();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-fd-util.c b/src/test/test-fd-util.c
index 1cd3bdf..7014fe0 100644
--- a/src/test/test-fd-util.c
+++ b/src/test/test-fd-util.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <fcntl.h>
+#include <sys/eventfd.h>
 #include <unistd.h>
 
 #include "alloc-util.h"
@@ -9,16 +10,19 @@
 #include "fileio.h"
 #include "macro.h"
 #include "memory-util.h"
+#include "missing_syscall.h"
+#include "mount-util.h"
 #include "path-util.h"
 #include "process-util.h"
 #include "random-util.h"
 #include "rlimit-util.h"
+#include "seccomp-util.h"
 #include "serialize.h"
 #include "string-util.h"
 #include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_close_many(void) {
+TEST(close_many) {
         int fds[3];
         char name0[] = "/tmp/test-close-many.XXXXXX";
         char name1[] = "/tmp/test-close-many.XXXXXX";
@@ -41,7 +45,7 @@
         unlink(name2);
 }
 
-static void test_close_nointr(void) {
+TEST(close_nointr) {
         char name[] = "/tmp/test-test-close_nointr.XXXXXX";
         int fd;
 
@@ -53,9 +57,9 @@
         unlink(name);
 }
 
-static void test_same_fd(void) {
-        _cleanup_close_pair_ int p[2] = { -1, -1 };
-        _cleanup_close_ int a = -1, b = -1, c = -1;
+TEST(same_fd) {
+        _cleanup_close_pair_ int p[2];
+        _cleanup_close_ int a, b, c;
 
         assert_se(pipe2(p, O_CLOEXEC) >= 0);
         assert_se((a = fcntl(p[0], F_DUPFD, 3)) >= 0);
@@ -87,8 +91,8 @@
         assert_se(same_fd(b, a) == 0);
 }
 
-static void test_open_serialization_fd(void) {
-        _cleanup_close_ int fd = -1;
+TEST(open_serialization_fd) {
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open_serialization_fd("test");
         assert_se(fd >= 0);
@@ -96,7 +100,7 @@
         assert_se(write(fd, "test\n", 5) == 5);
 }
 
-static void test_fd_move_above_stdio(void) {
+TEST(fd_move_above_stdio) {
         int original_stdin, new_fd;
 
         original_stdin = fcntl(0, F_DUPFD, 3);
@@ -114,7 +118,7 @@
         assert_se(close_nointr(new_fd) != EBADF);
 }
 
-static void test_rearrange_stdio(void) {
+TEST(rearrange_stdio) {
         pid_t pid;
         int r;
 
@@ -129,7 +133,7 @@
 
                 safe_close(STDERR_FILENO); /* Let's close an fd < 2, to make it more interesting */
 
-                assert_se(rearrange_stdio(-1, -1, -1) >= 0);
+                assert_se(rearrange_stdio(-EBADF, -EBADF, -EBADF) >= 0);
 
                 assert_se(fd_get_path(STDIN_FILENO, &path) >= 0);
                 assert_se(path_equal(path, "/dev/null"));
@@ -166,7 +170,7 @@
                 assert_se(read(0, buffer, sizeof(buffer)) == 6);
                 assert_se(memcmp(buffer, "foobar", 6) == 0);
 
-                assert_se(rearrange_stdio(-1, 1, 2) >= 0);
+                assert_se(rearrange_stdio(-EBADF, 1, 2) >= 0);
                 assert_se(write(1, "a", 1) < 0 && errno == ENOSPC);
                 assert_se(write(2, "y", 1) == 1);
                 assert_se(read(3, buffer, sizeof(buffer)) == 1);
@@ -180,7 +184,7 @@
         }
 }
 
-static void test_read_nr_open(void) {
+TEST(read_nr_open) {
         log_info("nr-open: %i", read_nr_open());
 }
 
@@ -213,20 +217,29 @@
         return c; /* Return number of fds >= 0 in the array */
 }
 
-static void test_close_all_fds(void) {
+static void test_close_all_fds_inner(void) {
         _cleanup_free_ int *fds = NULL, *keep = NULL;
-        struct rlimit rl;
         size_t n_fds, n_keep;
+        int max_fd;
 
         log_info("/* %s */", __func__);
 
         rlimit_nofile_bump(-1);
 
-        assert_se(getrlimit(RLIMIT_NOFILE, &rl) >= 0);
-        assert_se(rl.rlim_cur > 10);
+        max_fd = get_max_fd();
+        assert_se(max_fd > 10);
+
+        if (max_fd > 7000) {
+                /* If the worst fallback is activated we need to iterate through all possible fds, hence,
+                 * let's lower the limit a small bit, so that we don't run for too long. Yes, this undoes the
+                 * rlimit_nofile_bump() call above partially. */
+
+                (void) setrlimit_closest(RLIMIT_NOFILE, &(struct rlimit) { 7000, 7000 });
+                max_fd = 7000;
+        }
 
         /* Try to use 5000 fds, but when we can't bump the rlimit to make that happen use the whole limit minus 10 */
-        n_fds = MIN((rl.rlim_cur & ~1U) - 10U, 5000U);
+        n_fds = MIN(((size_t) max_fd & ~1U) - 10U, 5000U);
         assert_se((n_fds & 1U) == 0U); /* make sure even number of fds */
 
         /* Allocate the determined number of fds, always two at a time */
@@ -261,6 +274,7 @@
         /* Close logging fd first, so that we don't confuse it by closing its fd */
         log_close();
         log_set_open_when_needed(true);
+        log_settle_target();
 
         /* Close all but the ones to keep */
         assert_se(close_all_fds(keep, n_keep) >= 0);
@@ -278,18 +292,282 @@
         log_open();
 }
 
-int main(int argc, char *argv[]) {
+static int seccomp_prohibit_close_range(void) {
+#if HAVE_SECCOMP && defined(__SNR_close_range)
+        _cleanup_(seccomp_releasep) scmp_filter_ctx seccomp = NULL;
+        int r;
 
-        test_setup_logging(LOG_DEBUG);
+        r = seccomp_init_for_arch(&seccomp, SCMP_ARCH_NATIVE, SCMP_ACT_ALLOW);
+        if (r < 0)
+                return log_warning_errno(r, "Failed to acquire seccomp context, ignoring: %m");
 
-        test_close_many();
-        test_close_nointr();
-        test_same_fd();
-        test_open_serialization_fd();
-        test_fd_move_above_stdio();
-        test_rearrange_stdio();
-        test_read_nr_open();
-        test_close_all_fds();
+        r = seccomp_rule_add_exact(
+                        seccomp,
+                        SCMP_ACT_ERRNO(EPERM),
+                        SCMP_SYS(close_range),
+                        0);
+        if (r < 0)
+                return log_warning_errno(r, "Failed to add close_range() rule, ignoring: %m");
+
+        r = seccomp_load(seccomp);
+        if (r < 0)
+                return log_warning_errno(r, "Failed to apply close_range() restrictions, ignoring: %m");
 
         return 0;
+#else
+        return log_warning_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Seccomp support or close_range() syscall definition not available.");
+#endif
 }
+
+TEST(close_all_fds) {
+        int r;
+
+        /* Runs the test four times. Once as is. Once with close_range() syscall blocked via seccomp, once
+         * with /proc/ overmounted, and once with the combination of both. This should trigger all fallbacks
+         * in the close_range_all() function. */
+
+        r = safe_fork("(caf-plain)", FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
+        if (r == 0) {
+                test_close_all_fds_inner();
+                _exit(EXIT_SUCCESS);
+        }
+        assert_se(r >= 0);
+
+        if (geteuid() != 0)
+                return (void) log_tests_skipped("Lacking privileges for test with close_range() blocked and /proc/ overmounted");
+
+        r = safe_fork("(caf-noproc)", FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_NEW_MOUNTNS|FORK_MOUNTNS_SLAVE, NULL);
+        if (r == 0) {
+                r = mount_nofollow_verbose(LOG_WARNING, "tmpfs", "/proc", "tmpfs", 0, NULL);
+                if (r < 0)
+                        log_notice("Overmounting /proc/ didn't work, skipping close_all_fds() with masked /proc/.");
+                else
+                        test_close_all_fds_inner();
+                _exit(EXIT_SUCCESS);
+        }
+        assert_se(r >= 0);
+
+        if (!is_seccomp_available())
+                return (void) log_tests_skipped("Seccomp not available");
+
+        r = safe_fork("(caf-seccomp)", FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
+        if (r == 0) {
+                r = seccomp_prohibit_close_range();
+                if (r < 0)
+                        log_notice("Applying seccomp filter didn't work, skipping close_all_fds() test with masked close_range().");
+                else
+                        test_close_all_fds_inner();
+
+                _exit(EXIT_SUCCESS);
+        }
+        assert_se(r >= 0);
+
+        r = safe_fork("(caf-scnp)", FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_NEW_MOUNTNS|FORK_MOUNTNS_SLAVE, NULL);
+        if (r == 0) {
+                r = seccomp_prohibit_close_range();
+                if (r < 0)
+                        log_notice("Applying seccomp filter didn't work, skipping close_all_fds() test with masked close_range().");
+                else {
+                        r = mount_nofollow_verbose(LOG_WARNING, "tmpfs", "/proc", "tmpfs", 0, NULL);
+                        if (r < 0)
+                                log_notice("Overmounting /proc/ didn't work, skipping close_all_fds() with masked /proc/.");
+                        else
+                                test_close_all_fds_inner();
+                }
+
+                test_close_all_fds_inner();
+                _exit(EXIT_SUCCESS);
+        }
+        assert_se(r >= 0);
+}
+
+TEST(format_proc_fd_path) {
+        assert_se(streq_ptr(FORMAT_PROC_FD_PATH(0), "/proc/self/fd/0"));
+        assert_se(streq_ptr(FORMAT_PROC_FD_PATH(1), "/proc/self/fd/1"));
+        assert_se(streq_ptr(FORMAT_PROC_FD_PATH(2), "/proc/self/fd/2"));
+        assert_se(streq_ptr(FORMAT_PROC_FD_PATH(3), "/proc/self/fd/3"));
+        assert_se(streq_ptr(FORMAT_PROC_FD_PATH(2147483647), "/proc/self/fd/2147483647"));
+}
+
+TEST(fd_reopen) {
+        _cleanup_close_ int fd1 = -EBADF, fd2 = -EBADF;
+        struct stat st1, st2;
+        int fl;
+
+        /* Test this with a directory */
+        fd1 = open("/proc", O_DIRECTORY|O_PATH|O_CLOEXEC);
+        assert_se(fd1 >= 0);
+
+        assert_se(fstat(fd1, &st1) >= 0);
+        assert_se(S_ISDIR(st1.st_mode));
+
+        fl = fcntl(fd1, F_GETFL);
+        assert_se(fl >= 0);
+        assert_se(FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(FLAGS_SET(fl, O_PATH));
+
+        fd2 = fd_reopen(fd1, O_RDONLY|O_DIRECTORY|O_CLOEXEC);  /* drop the O_PATH */
+        assert_se(fd2 >= 0);
+
+        assert_se(fstat(fd2, &st2) >= 0);
+        assert_se(S_ISDIR(st2.st_mode));
+        assert_se(st1.st_ino == st2.st_ino);
+        assert_se(st1.st_rdev == st2.st_rdev);
+
+        fl = fcntl(fd2, F_GETFL);
+        assert_se(fl >= 0);
+        assert_se(FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(!FLAGS_SET(fl, O_PATH));
+
+        safe_close(fd1);
+
+        fd1 = fd_reopen(fd2, O_DIRECTORY|O_PATH|O_CLOEXEC);  /* reacquire the O_PATH */
+        assert_se(fd1 >= 0);
+
+        assert_se(fstat(fd1, &st1) >= 0);
+        assert_se(S_ISDIR(st1.st_mode));
+        assert_se(st1.st_ino == st2.st_ino);
+        assert_se(st1.st_rdev == st2.st_rdev);
+
+        fl = fcntl(fd1, F_GETFL);
+        assert_se(fl >= 0);
+        assert_se(FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(FLAGS_SET(fl, O_PATH));
+
+        safe_close(fd1);
+
+        /* And now, test this with a file. */
+        fd1 = open("/proc/version", O_PATH|O_CLOEXEC);
+        assert_se(fd1 >= 0);
+
+        assert_se(fstat(fd1, &st1) >= 0);
+        assert_se(S_ISREG(st1.st_mode));
+
+        fl = fcntl(fd1, F_GETFL);
+        assert_se(fl >= 0);
+        assert_se(!FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(FLAGS_SET(fl, O_PATH));
+
+        assert_se(fd_reopen(fd1, O_RDONLY|O_DIRECTORY|O_CLOEXEC) == -ENOTDIR);
+        fd2 = fd_reopen(fd1, O_RDONLY|O_CLOEXEC);  /* drop the O_PATH */
+        assert_se(fd2 >= 0);
+
+        assert_se(fstat(fd2, &st2) >= 0);
+        assert_se(S_ISREG(st2.st_mode));
+        assert_se(st1.st_ino == st2.st_ino);
+        assert_se(st1.st_rdev == st2.st_rdev);
+
+        fl = fcntl(fd2, F_GETFL);
+        assert_se(fl >= 0);
+        assert_se(!FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(!FLAGS_SET(fl, O_PATH));
+
+        safe_close(fd1);
+
+        assert_se(fd_reopen(fd2, O_DIRECTORY|O_PATH|O_CLOEXEC) == -ENOTDIR);
+        fd1 = fd_reopen(fd2, O_PATH|O_CLOEXEC);  /* reacquire the O_PATH */
+        assert_se(fd1 >= 0);
+
+        assert_se(fstat(fd1, &st1) >= 0);
+        assert_se(S_ISREG(st1.st_mode));
+        assert_se(st1.st_ino == st2.st_ino);
+        assert_se(st1.st_rdev == st2.st_rdev);
+
+        fl = fcntl(fd1, F_GETFL);
+        assert_se(fl >= 0);
+        assert_se(!FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(FLAGS_SET(fl, O_PATH));
+
+        /* Also check the right error is generated if the fd is already closed */
+        safe_close(fd1);
+        assert_se(fd_reopen(fd1, O_RDONLY|O_CLOEXEC) == -EBADF);
+        fd1 = -EBADF;
+}
+
+TEST(fd_reopen_condition) {
+        _cleanup_close_ int fd1 = -EBADF, fd3 = -EBADF;
+        int fd2, fl;
+
+        /* Open without O_PATH */
+        fd1 = open("/usr/", O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+        assert_se(fd1 >= 0);
+
+        fl = fcntl(fd1, F_GETFL);
+        assert_se(FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(!FLAGS_SET(fl, O_PATH));
+
+        fd2 = fd_reopen_condition(fd1, O_DIRECTORY, O_DIRECTORY|O_PATH, &fd3);
+        assert_se(fd2 == fd1);
+        assert_se(fd3 < 0);
+
+        /* Switch on O_PATH */
+        fd2 = fd_reopen_condition(fd1, O_DIRECTORY|O_PATH, O_DIRECTORY|O_PATH, &fd3);
+        assert_se(fd2 != fd1);
+        assert_se(fd3 == fd2);
+
+        fl = fcntl(fd2, F_GETFL);
+        assert_se(FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(FLAGS_SET(fl, O_PATH));
+
+        close_and_replace(fd1, fd3);
+
+        fd2 = fd_reopen_condition(fd1, O_DIRECTORY|O_PATH, O_DIRECTORY|O_PATH, &fd3);
+        assert_se(fd2 == fd1);
+        assert_se(fd3 < 0);
+
+        /* Switch off O_PATH again */
+        fd2 = fd_reopen_condition(fd1, O_DIRECTORY, O_DIRECTORY|O_PATH, &fd3);
+        assert_se(fd2 != fd1);
+        assert_se(fd3 == fd2);
+
+        fl = fcntl(fd2, F_GETFL);
+        assert_se(FLAGS_SET(fl, O_DIRECTORY));
+        assert_se(!FLAGS_SET(fl, O_PATH));
+
+        close_and_replace(fd1, fd3);
+
+        fd2 = fd_reopen_condition(fd1, O_DIRECTORY, O_DIRECTORY|O_PATH, &fd3);
+        assert_se(fd2 == fd1);
+        assert_se(fd3 < 0);
+}
+
+TEST(take_fd) {
+        _cleanup_close_ int fd1 = -EBADF, fd2 = -EBADF;
+        int array[2] = PIPE_EBADF, i = 0;
+
+        assert_se(fd1 == -EBADF);
+        assert_se(fd2 == -EBADF);
+
+        fd1 = eventfd(0, EFD_CLOEXEC);
+        assert_se(fd1 >= 0);
+
+        fd2 = TAKE_FD(fd1);
+        assert_se(fd1 == -EBADF);
+        assert_se(fd2 >= 0);
+
+        assert_se(array[0] == -EBADF);
+        assert_se(array[1] == -EBADF);
+
+        array[0] = TAKE_FD(fd2);
+        assert_se(fd1 == -EBADF);
+        assert_se(fd2 == -EBADF);
+        assert_se(array[0] >= 0);
+        assert_se(array[1] == -EBADF);
+
+        array[1] = TAKE_FD(array[i]);
+        assert_se(array[0] == -EBADF);
+        assert_se(array[1] >= 0);
+
+        i = 1 - i;
+        array[0] = TAKE_FD(*(array + i));
+        assert_se(array[0] >= 0);
+        assert_se(array[1] == -EBADF);
+
+        i = 1 - i;
+        fd1 = TAKE_FD(array[i]);
+        assert_se(fd1 >= 0);
+        assert_se(array[0] == -EBADF);
+        assert_se(array[1] == -EBADF);
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-fdset.c b/src/test/test-fdset.c
index c77d7ff..67c99d8 100644
--- a/src/test/test-fdset.c
+++ b/src/test/test-fdset.c
@@ -6,11 +6,11 @@
 #include "fd-util.h"
 #include "fdset.h"
 #include "macro.h"
+#include "tests.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
-static void test_fdset_new_fill(void) {
-        int fd = -1;
+TEST(fdset_new_fill) {
+        int fd = -EBADF;
         _cleanup_fdset_free_ FDSet *fdset = NULL;
         char name[] = "/tmp/test-fdset_new_fill.XXXXXX";
 
@@ -22,9 +22,9 @@
         unlink(name);
 }
 
-static void test_fdset_put_dup(void) {
-        _cleanup_close_ int fd = -1;
-        int copyfd = -1;
+TEST(fdset_put_dup) {
+        _cleanup_close_ int fd = -EBADF;
+        int copyfd = -EBADF;
         _cleanup_fdset_free_ FDSet *fdset = NULL;
         char name[] = "/tmp/test-fdset_put_dup.XXXXXX";
 
@@ -41,8 +41,8 @@
         unlink(name);
 }
 
-static void test_fdset_cloexec(void) {
-        int fd = -1;
+TEST(fdset_cloexec) {
+        int fd = -EBADF;
         _cleanup_fdset_free_ FDSet *fdset = NULL;
         int flags = -1;
         char name[] = "/tmp/test-fdset_cloexec.XXXXXX";
@@ -67,9 +67,9 @@
         unlink(name);
 }
 
-static void test_fdset_close_others(void) {
-        int fd = -1;
-        int copyfd = -1;
+TEST(fdset_close_others) {
+        int fd = -EBADF;
+        int copyfd = -EBADF;
         _cleanup_fdset_free_ FDSet *fdset = NULL;
         int flags = -1;
         char name[] = "/tmp/test-fdset_close_others.XXXXXX";
@@ -91,8 +91,8 @@
         unlink(name);
 }
 
-static void test_fdset_remove(void) {
-        _cleanup_close_ int fd = -1;
+TEST(fdset_remove) {
+        _cleanup_close_ int fd = -EBADF;
         FDSet *fdset = NULL;
         char name[] = "/tmp/test-fdset_remove.XXXXXX";
 
@@ -111,8 +111,8 @@
         unlink(name);
 }
 
-static void test_fdset_iterate(void) {
-        int fd = -1;
+TEST(fdset_iterate) {
+        int fd = -EBADF;
         FDSet *fdset = NULL;
         char name[] = "/tmp/test-fdset_iterate.XXXXXX";
         int c = 0;
@@ -138,7 +138,7 @@
         unlink(name);
 }
 
-static void test_fdset_isempty(void) {
+TEST(fdset_isempty) {
         int fd;
         _cleanup_fdset_free_ FDSet *fdset = NULL;
         char name[] = "/tmp/test-fdset_isempty.XXXXXX";
@@ -156,7 +156,7 @@
         unlink(name);
 }
 
-static void test_fdset_steal_first(void) {
+TEST(fdset_steal_first) {
         int fd;
         _cleanup_fdset_free_ FDSet *fdset = NULL;
         char name[] = "/tmp/test-fdset_steal_first.XXXXXX";
@@ -176,7 +176,7 @@
         unlink(name);
 }
 
-static void test_fdset_new_array(void) {
+TEST(fdset_new_array) {
         int fds[] = {10, 11, 12, 13};
         _cleanup_fdset_free_ FDSet *fdset = NULL;
 
@@ -188,16 +188,4 @@
         assert_se(fdset_contains(fdset, 13));
 }
 
-int main(int argc, char *argv[]) {
-        test_fdset_new_fill();
-        test_fdset_put_dup();
-        test_fdset_cloexec();
-        test_fdset_close_others();
-        test_fdset_remove();
-        test_fdset_iterate();
-        test_fdset_isempty();
-        test_fdset_steal_first();
-        test_fdset_new_array();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
index c8d5bf6..9d9c719 100644
--- a/src/test/test-fileio.c
+++ b/src/test/test-fileio.c
@@ -24,9 +24,8 @@
 #include "strv.h"
 #include "tests.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
-static void test_parse_env_file(void) {
+TEST(parse_env_file) {
         _cleanup_(unlink_tempfilep) char
                 t[] = "/tmp/test-fileio-in-XXXXXX",
                 p[] = "/tmp/test-fileio-out-XXXXXX";
@@ -35,7 +34,6 @@
                         *six = NULL, *seven = NULL, *eight = NULL, *nine = NULL, *ten = NULL,
                         *eleven = NULL, *twelve = NULL, *thirteen = NULL;
         _cleanup_strv_free_ char **a = NULL, **b = NULL;
-        char **i;
         unsigned k;
         int r;
 
@@ -110,8 +108,7 @@
                        "eleven", &eleven,
                        "twelve", &twelve,
                        "thirteen", &thirteen);
-
-        assert_se(r >= 0);
+        assert_se(r == 0);
 
         log_info("one=[%s]", strna(one));
         log_info("two=[%s]", strna(two));
@@ -166,13 +163,12 @@
         assert_se(streq(from_shell, value));
 }
 
-static void test_parse_multiline_env_file(void) {
+TEST(parse_multiline_env_file) {
         _cleanup_(unlink_tempfilep) char
                 t[] = "/tmp/test-fileio-in-XXXXXX",
                 p[] = "/tmp/test-fileio-out-XXXXXX";
         FILE *f;
         _cleanup_strv_free_ char **a = NULL, **b = NULL;
-        char **i;
         int r;
 
         assert_se(fmkostemp_safe(t, "w", &f) == 0);
@@ -218,11 +214,10 @@
         assert_se(r >= 0);
 }
 
-static void test_merge_env_file(void) {
+TEST(merge_env_file) {
         _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **a = NULL;
-        char **i;
         int r;
 
         assert_se(fmkostemp_safe(t, "w", &f) == 0);
@@ -241,7 +236,7 @@
                                 "zzzz=${foobar:-${nothing}}\n"
                                 "zzzzz=${nothing:+${nothing}}\n"
                                 , WRITE_STRING_FILE_AVOID_NEWLINE);
-        assert(r >= 0);
+        assert_se(r >= 0);
 
         r = merge_env_file(&a, NULL, t);
         assert_se(r >= 0);
@@ -282,11 +277,10 @@
         assert_se(a[10] == NULL);
 }
 
-static void test_merge_env_file_invalid(void) {
+TEST(merge_env_file_invalid) {
         _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **a = NULL;
-        char **i;
         int r;
 
         assert_se(fmkostemp_safe(t, "w", &f) == 0);
@@ -305,7 +299,7 @@
                                 "#\n"
                                 "\n\n"                  /* empty line */
                                 , WRITE_STRING_FILE_AVOID_NEWLINE);
-        assert(r >= 0);
+        assert_se(r >= 0);
 
         r = merge_env_file(&a, NULL, t);
         assert_se(r >= 0);
@@ -316,14 +310,12 @@
         assert_se(strv_isempty(a));
 }
 
-static void test_executable_is_script(void) {
+TEST(executable_is_script) {
         _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         char *command;
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(fmkostemp_safe(t, "w", &f) == 0);
         fputs("#! /bin/script -a -b \ngoo goo", f);
         fflush(f);
@@ -344,13 +336,11 @@
         }
 }
 
-static void test_status_field(void) {
+TEST(status_field) {
         _cleanup_free_ char *t = NULL, *p = NULL, *s = NULL, *z = NULL;
         unsigned long long total = 0, buffers = 0;
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(get_proc_field("/proc/self/status", "Threads", WHITESPACE, &t) == 0);
         puts(t);
         assert_se(streq(t, "1"));
@@ -381,9 +371,7 @@
         }
 }
 
-static void test_capeff(void) {
-        log_info("/* %s */", __func__);
-
+TEST(capeff) {
         for (int pid = 0; pid < 2; pid++) {
                 _cleanup_free_ char *capeff = NULL;
                 int r, p;
@@ -401,14 +389,12 @@
         }
 }
 
-static void test_write_string_stream(void) {
+TEST(write_string_stream) {
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-write_string_stream-XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         int fd;
         char buf[64];
 
-        log_info("/* %s */", __func__);
-
         fd = mkostemp_safe(fn);
         assert_se(fd >= 0);
 
@@ -438,13 +424,11 @@
         assert_se(streq(buf, "boohoo"));
 }
 
-static void test_write_string_file(void) {
+TEST(write_string_file) {
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-write_string_file-XXXXXX";
         char buf[64] = {};
         _cleanup_close_ int fd;
 
-        log_info("/* %s */", __func__);
-
         fd = mkostemp_safe(fn);
         assert_se(fd >= 0);
 
@@ -454,13 +438,11 @@
         assert_se(streq(buf, "boohoo\n"));
 }
 
-static void test_write_string_file_no_create(void) {
+TEST(write_string_file_no_create) {
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-write_string_file_no_create-XXXXXX";
         _cleanup_close_ int fd;
         char buf[64] = {};
 
-        log_info("/* %s */", __func__);
-
         fd = mkostemp_safe(fn);
         assert_se(fd >= 0);
 
@@ -471,12 +453,10 @@
         assert_se(streq(buf, "boohoo\n"));
 }
 
-static void test_write_string_file_verify(void) {
+TEST(write_string_file_verify) {
         _cleanup_free_ char *buf = NULL, *buf2 = NULL;
         int r;
 
-        log_info("/* %s */", __func__);
-
         r = read_one_line_file("/proc/version", &buf);
         if (ERRNO_IS_PRIVILEGE(r))
                 return;
@@ -496,14 +476,11 @@
         assert_se(write_string_file("/proc/version", buf2, WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_AVOID_NEWLINE) == 0);
 }
 
-static void test_load_env_file_pairs(void) {
+TEST(load_env_file_pairs) {
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-load_env_file_pairs-XXXXXX";
         int fd, r;
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **l = NULL;
-        char **k, **v;
-
-        log_info("/* %s */", __func__);
 
         fd = mkostemp_safe(fn);
         assert_se(fd >= 0);
@@ -539,7 +516,7 @@
         }
 }
 
-static void test_search_and_fopen(void) {
+TEST(search_and_fopen) {
         static const char* const dirs[] = {
                 "/tmp/foo/bar",
                 "/tmp",
@@ -548,12 +525,10 @@
         char name[] = "/tmp/test-search_and_fopen.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *e;
         int r;
 
-        log_info("/* %s */", __func__);
-
         fd = mkostemp_safe(name);
         assert_se(fd >= 0);
         fd = safe_close(fd);
@@ -578,29 +553,27 @@
         f = safe_fclose(f);
         p = mfree(p);
 
-        r = search_and_fopen("/a/file/which/does/not/exist/i/guess", "r", NULL, (const char**) dirs, &f, &p);
+        r = search_and_fopen("/a/file/which/does/not/exist/i/guess", "re", NULL, (const char**) dirs, &f, &p);
         assert_se(r == -ENOENT);
-        r = search_and_fopen("afilewhichdoesnotexistiguess", "r", NULL, (const char**) dirs, &f, &p);
+        r = search_and_fopen("afilewhichdoesnotexistiguess", "re", NULL, (const char**) dirs, &f, &p);
         assert_se(r == -ENOENT);
 
         r = unlink(name);
         assert_se(r == 0);
 
-        r = search_and_fopen(basename(name), "r", NULL, (const char**) dirs, &f, &p);
+        r = search_and_fopen(basename(name), "re", NULL, (const char**) dirs, &f, &p);
         assert_se(r == -ENOENT);
 }
 
-static void test_search_and_fopen_nulstr(void) {
+TEST(search_and_fopen_nulstr) {
         static const char dirs[] =
                 "/tmp/foo/bar\0"
                 "/tmp\0";
 
-        log_info("/* %s */", __func__);
-
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-search_and_fopen.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *e;
         int r;
 
@@ -621,27 +594,25 @@
         f = safe_fclose(f);
         p = mfree(p);
 
-        r = search_and_fopen_nulstr("/a/file/which/does/not/exist/i/guess", "r", NULL, dirs, &f, &p);
+        r = search_and_fopen_nulstr("/a/file/which/does/not/exist/i/guess", "re", NULL, dirs, &f, &p);
         assert_se(r == -ENOENT);
-        r = search_and_fopen_nulstr("afilewhichdoesnotexistiguess", "r", NULL, dirs, &f, &p);
+        r = search_and_fopen_nulstr("afilewhichdoesnotexistiguess", "re", NULL, dirs, &f, &p);
         assert_se(r == -ENOENT);
 
         r = unlink(name);
         assert_se(r == 0);
 
-        r = search_and_fopen_nulstr(basename(name), "r", NULL, dirs, &f, &p);
+        r = search_and_fopen_nulstr(basename(name), "re", NULL, dirs, &f, &p);
         assert_se(r == -ENOENT);
 }
 
-static void test_writing_tmpfile(void) {
+TEST(writing_tmpfile) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-systemd_writing_tmpfile.XXXXXX";
         _cleanup_free_ char *contents = NULL;
         size_t size;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
-        log_info("/* %s */", __func__);
-
         struct iovec iov[] = {
                 IOVEC_MAKE_STRING("abc\n"),
                 IOVEC_MAKE_STRING(ALPHANUMERICAL "\n"),
@@ -660,11 +631,9 @@
         assert_se(streq(contents, "abc\n" ALPHANUMERICAL "\n"));
 }
 
-static void test_tempfn(void) {
+TEST(tempfn) {
         char *ret = NULL, *p;
 
-        log_info("/* %s */", __func__);
-
         assert_se(tempfn_xxxxxx("/foo/bar/waldo", NULL, &ret) >= 0);
         assert_se(streq_ptr(ret, "/foo/bar/.#waldoXXXXXX"));
         free(ret);
@@ -703,11 +672,11 @@
 
 DISABLE_WARNING_TYPE_LIMITS;
 
-static void test_fgetc(void) {
+TEST(fgetc) {
         _cleanup_fclose_ FILE *f = NULL;
         char c;
 
-        assert_se(f = fmemopen_unlocked((void*) chars, sizeof(chars), "re"));
+        assert_se(f = fmemopen_unlocked((void*) chars, sizeof(chars), "r"));
 
         for (size_t i = 0; i < sizeof(chars); i++) {
                 assert_se(safe_fgetc(f, &c) == 1);
@@ -797,22 +766,18 @@
         assert_se(read_line(f, 1024, &line) == 0 && streq(line, ""));
 }
 
-static void test_read_line(void) {
+TEST(read_line1) {
         _cleanup_fclose_ FILE *f = NULL;
 
-        log_info("/* %s */", __func__);
-
-        assert_se(f = fmemopen_unlocked((void*) buffer, sizeof(buffer), "re"));
+        assert_se(f = fmemopen_unlocked((void*) buffer, sizeof(buffer), "r"));
         test_read_line_one_file(f);
 }
 
-static void test_read_line2(void) {
+TEST(read_line2) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-fileio.XXXXXX";
         int fd;
         _cleanup_fclose_ FILE *f = NULL;
 
-        log_info("/* %s */", __func__);
-
         fd = mkostemp_safe(name);
         assert_se(fd >= 0);
         assert_se((size_t) write(fd, buffer, sizeof(buffer)) == sizeof(buffer));
@@ -823,13 +788,11 @@
         test_read_line_one_file(f);
 }
 
-static void test_read_line3(void) {
+TEST(read_line3) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *line = NULL;
         int r;
 
-        log_info("/* %s */", __func__);
-
         f = fopen("/proc/uptime", "re");
         if (!f && IN_SET(errno, ENOENT, EPERM))
                 return;
@@ -844,7 +807,7 @@
         assert_se(read_line(f, LINE_MAX, NULL) == 0);
 }
 
-static void test_read_line4(void) {
+TEST(read_line4) {
         static const struct {
                 size_t length;
                 const char *string;
@@ -878,7 +841,7 @@
         }
 }
 
-static void test_read_nul_string(void) {
+TEST(read_nul_string) {
         static const char test[] = "string nr. 1\0"
                 "string nr. 2\n\0"
                 "\377empty string follows\0"
@@ -889,8 +852,6 @@
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *s = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(f = fmemopen_unlocked((void*) test, sizeof(test)-1, "r"));
 
         assert_se(read_nul_string(f, LONG_LINE_MAX, &s) == 13 && streq_ptr(s, "string nr. 1"));
@@ -914,18 +875,16 @@
         assert_se(read_nul_string(f, LONG_LINE_MAX, &s) == 0 && streq_ptr(s, ""));
 }
 
-static void test_read_full_file_socket(void) {
+TEST(read_full_file_socket) {
         _cleanup_(rm_rf_physical_and_freep) char *z = NULL;
-        _cleanup_close_ int listener = -1;
+        _cleanup_close_ int listener = -EBADF;
         _cleanup_free_ char *data = NULL, *clientname = NULL;
         union sockaddr_union sa;
-        const char *j;
+        const char *j, *jj;
         size_t size;
         pid_t pid;
         int r;
 
-        log_info("/* %s */", __func__);
-
         listener = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
         assert_se(listener >= 0);
 
@@ -937,6 +896,11 @@
         assert_se(bind(listener, &sa.sa, SOCKADDR_UN_LEN(sa.un)) >= 0);
         assert_se(listen(listener, 1) >= 0);
 
+        /* Make sure the socket doesn't fit into a struct sockaddr_un, but we can still access it */
+        jj = strjoina(z, "/a_very_long_patha_very_long_patha_very_long_patha_very_long_patha_very_long_patha_very_long_patha_very_long_patha_very_long_path");
+        assert_se(strlen(jj) > sizeof_field(struct sockaddr_un, sun_path));
+        assert_se(rename(j, jj) >= 0);
+
         /* Bind the *client* socket to some randomized name, to verify that this works correctly. */
         assert_se(asprintf(&clientname, "@%" PRIx64 "/test-bindname", random_u64()) >= 0);
 
@@ -945,7 +909,7 @@
         if (r == 0) {
                 union sockaddr_union peer = {};
                 socklen_t peerlen = sizeof(peer);
-                _cleanup_close_ int rfd = -1;
+                _cleanup_close_ int rfd = -EBADF;
                 /* child */
 
                 rfd = accept4(listener, NULL, 0, SOCK_CLOEXEC);
@@ -964,8 +928,8 @@
                 _exit(EXIT_SUCCESS);
         }
 
-        assert_se(read_full_file_full(AT_FDCWD, j, UINT64_MAX, SIZE_MAX, 0, NULL, &data, &size) == -ENXIO);
-        assert_se(read_full_file_full(AT_FDCWD, j, UINT64_MAX, SIZE_MAX, READ_FULL_FILE_CONNECT_SOCKET, clientname, &data, &size) >= 0);
+        assert_se(read_full_file_full(AT_FDCWD, jj, UINT64_MAX, SIZE_MAX, 0, NULL, &data, &size) == -ENXIO);
+        assert_se(read_full_file_full(AT_FDCWD, jj, UINT64_MAX, SIZE_MAX, READ_FULL_FILE_CONNECT_SOCKET, clientname, &data, &size) >= 0);
         assert_se(size == strlen(TEST_STR));
         assert_se(streq(data, TEST_STR));
 
@@ -973,15 +937,13 @@
 #undef TEST_STR
 }
 
-static void test_read_full_file_offset_size(void) {
+TEST(read_full_file_offset_size) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_(unlink_and_freep) char *fn = NULL;
         _cleanup_free_ char *rbuf = NULL;
         size_t rbuf_size;
         uint8_t buf[4711];
 
-        log_info("/* %s */", __func__);
-
         random_bytes(buf, sizeof(buf));
 
         assert_se(tempfn_random_child(NULL, NULL, &fn) >= 0);
@@ -999,6 +961,25 @@
         assert_se(memcmp(buf, rbuf, rbuf_size) == 0);
         rbuf = mfree(rbuf);
 
+        assert_se(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, 128, READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &rbuf, &rbuf_size) == -E2BIG);
+        assert_se(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, sizeof(buf)-1, READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &rbuf, &rbuf_size) == -E2BIG);
+        assert_se(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, sizeof(buf), READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &rbuf, &rbuf_size) >= 0);
+        assert_se(rbuf_size == sizeof(buf));
+        assert_se(memcmp(buf, rbuf, rbuf_size) == 0);
+        rbuf = mfree(rbuf);
+
+        assert_se(read_full_file_full(AT_FDCWD, fn, 47, 128, READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &rbuf, &rbuf_size) == -E2BIG);
+        assert_se(read_full_file_full(AT_FDCWD, fn, 47, sizeof(buf)-47-1, READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &rbuf, &rbuf_size) == -E2BIG);
+        assert_se(read_full_file_full(AT_FDCWD, fn, 47, sizeof(buf)-47, READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &rbuf, &rbuf_size) >= 0);
+        assert_se(rbuf_size == sizeof(buf)-47);
+        assert_se(memcmp(buf+47, rbuf, rbuf_size) == 0);
+        rbuf = mfree(rbuf);
+
+        assert_se(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, sizeof(buf)+1, READ_FULL_FILE_FAIL_WHEN_LARGER, NULL, &rbuf, &rbuf_size) >= 0);
+        assert_se(rbuf_size == sizeof(buf));
+        assert_se(memcmp(buf, rbuf, rbuf_size) == 0);
+        rbuf = mfree(rbuf);
+
         assert_se(read_full_file_full(AT_FDCWD, fn, 1234, SIZE_MAX, 0, NULL, &rbuf, &rbuf_size) >= 0);
         assert_se(rbuf_size == sizeof(buf) - 1234);
         assert_se(memcmp(buf + 1234, rbuf, rbuf_size) == 0);
@@ -1019,8 +1000,7 @@
         rbuf = mfree(rbuf);
 }
 
-static void test_read_virtual_file(size_t max_size) {
-        const char *filename;
+static void test_read_virtual_file_one(size_t max_size) {
         int r;
 
         log_info("/* %s (max_size=%zu) */", __func__, max_size);
@@ -1050,40 +1030,14 @@
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_parse_env_file();
-        test_parse_multiline_env_file();
-        test_merge_env_file();
-        test_merge_env_file_invalid();
-        test_executable_is_script();
-        test_status_field();
-        test_capeff();
-        test_write_string_stream();
-        test_write_string_file();
-        test_write_string_file_no_create();
-        test_write_string_file_verify();
-        test_load_env_file_pairs();
-        test_search_and_fopen();
-        test_search_and_fopen_nulstr();
-        test_writing_tmpfile();
-        test_tempfn();
-        test_fgetc();
-        test_read_line();
-        test_read_line2();
-        test_read_line3();
-        test_read_line4();
-        test_read_nul_string();
-        test_read_full_file_socket();
-        test_read_full_file_offset_size();
-        test_read_virtual_file(0);
-        test_read_virtual_file(1);
-        test_read_virtual_file(2);
-        test_read_virtual_file(20);
-        test_read_virtual_file(4096);
-        test_read_virtual_file(4097);
-        test_read_virtual_file(SIZE_MAX);
-
-        return 0;
+TEST(test_read_virtual_file) {
+        test_read_virtual_file_one(0);
+        test_read_virtual_file_one(1);
+        test_read_virtual_file_one(2);
+        test_read_virtual_file_one(20);
+        test_read_virtual_file_one(4096);
+        test_read_virtual_file_one(4097);
+        test_read_virtual_file_one(SIZE_MAX);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-firewall-util.c b/src/test/test-firewall-util.c
index d2843cf..3ca3108 100644
--- a/src/test/test-firewall-util.c
+++ b/src/test/test-firewall-util.c
@@ -25,7 +25,7 @@
         assert_se(in_addr_from_string(AF_INET6, "1c3::c01d", &u2) >= 0);
 
         prefixlen = random_u64_range(128 + 1 - 8) + 8;
-        pseudo_random_bytes(&u3, sizeof(u3));
+        random_bytes(&u3, sizeof(u3));
 
         assert_se(fw_add_masquerade(&ctx, true, AF_INET6, &u1, 128) >= 0);
         assert_se(fw_add_masquerade(&ctx, false, AF_INET6, &u1, 128) >= 0);
@@ -47,8 +47,8 @@
 }
 
 static union in_addr_union *parse_addr(const char *str, union in_addr_union *u) {
-        assert(str);
-        assert(u);
+        assert_se(str);
+        assert_se(u);
         assert_se(in_addr_from_string(AF_INET, str, u) >= 0);
         return u;
 }
@@ -82,7 +82,7 @@
                 if (ignore)
                         return false;
         }
-        assert(r >= 0);
+        assert_se(r >= 0);
 
         assert_se(fw_add_masquerade(&ctx, true, AF_INET, parse_addr("10.0.2.0", &u), 28) >= 0);
         assert_se(fw_add_masquerade(&ctx, false, AF_INET, parse_addr("10.0.2.0", &u), 28) >= 0);
diff --git a/src/test/test-format-table.c b/src/test/test-format-table.c
index 44d92a7..a1bc8b9 100644
--- a/src/test/test-format-table.c
+++ b/src/test/test-format-table.c
@@ -6,14 +6,13 @@
 #include "format-table.h"
 #include "string-util.h"
 #include "strv.h"
+#include "tests.h"
 #include "time-util.h"
 
-static void test_issue_9549(void) {
+TEST(issue_9549) {
         _cleanup_(table_unrefp) Table *table = NULL;
         _cleanup_free_ char *formatted = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(table = table_new("name", "type", "ro", "usage", "created", "modified"));
         assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(3), 100) >= 0);
         assert_se(table_add_many(table,
@@ -34,12 +33,10 @@
                         ));
 }
 
-static void test_multiline(void) {
+TEST(multiline) {
         _cleanup_(table_unrefp) Table *table = NULL;
         _cleanup_free_ char *formatted = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(table = table_new("foo", "bar"));
 
         assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(1), 100) >= 0);
@@ -148,12 +145,10 @@
         formatted = mfree(formatted);
 }
 
-static void test_strv(void) {
+TEST(strv) {
         _cleanup_(table_unrefp) Table *table = NULL;
         _cleanup_free_ char *formatted = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(table = table_new("foo", "bar"));
 
         assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(1), 100) >= 0);
@@ -262,12 +257,10 @@
         formatted = mfree(formatted);
 }
 
-static void test_strv_wrapped(void) {
+TEST(strv_wrapped) {
         _cleanup_(table_unrefp) Table *table = NULL;
         _cleanup_free_ char *formatted = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(table = table_new("foo", "bar"));
 
         assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(1), 100) >= 0);
@@ -366,35 +359,67 @@
         formatted = mfree(formatted);
 }
 
-int main(int argc, char *argv[]) {
+TEST(json) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
+        _cleanup_(table_unrefp) Table *t = NULL;
+
+        assert_se(t = table_new("foo bar", "quux", "piep miau"));
+        assert_se(table_set_json_field_name(t, 2, "zzz") >= 0);
+
+        assert_se(table_add_many(t,
+                                 TABLE_STRING, "v1",
+                                 TABLE_UINT64, UINT64_C(4711),
+                                 TABLE_BOOLEAN, true) >= 0);
+
+        assert_se(table_add_many(t,
+                                 TABLE_STRV, STRV_MAKE("a", "b", "c"),
+                                 TABLE_EMPTY,
+                                 TABLE_MODE, 0755) >= 0);
+
+        assert_se(table_to_json(t, &v) >= 0);
+
+        assert_se(json_build(&w,
+                             JSON_BUILD_ARRAY(
+                                             JSON_BUILD_OBJECT(
+                                                             JSON_BUILD_PAIR("foo_bar", JSON_BUILD_CONST_STRING("v1")),
+                                                             JSON_BUILD_PAIR("quux", JSON_BUILD_UNSIGNED(4711)),
+                                                             JSON_BUILD_PAIR("zzz", JSON_BUILD_BOOLEAN(true))),
+                                             JSON_BUILD_OBJECT(
+                                                             JSON_BUILD_PAIR("foo_bar", JSON_BUILD_STRV(STRV_MAKE("a", "b", "c"))),
+                                                             JSON_BUILD_PAIR("quux", JSON_BUILD_NULL),
+                                                             JSON_BUILD_PAIR("zzz", JSON_BUILD_UNSIGNED(0755))))) >= 0);
+
+        assert_se(json_variant_equal(v, w));
+}
+
+TEST(table) {
         _cleanup_(table_unrefp) Table *t = NULL;
         _cleanup_free_ char *formatted = NULL;
 
-        assert_se(setenv("SYSTEMD_COLORS", "0", 1) >= 0);
-        assert_se(setenv("COLUMNS", "40", 1) >= 0);
+        assert_se(t = table_new("one", "two", "three", "four"));
 
-        assert_se(t = table_new("one", "two", "three"));
-
-        assert_se(table_set_align_percent(t, TABLE_HEADER_CELL(2), 100) >= 0);
+        assert_se(table_set_align_percent(t, TABLE_HEADER_CELL(3), 100) >= 0);
 
         assert_se(table_add_many(t,
                                  TABLE_STRING, "xxx",
                                  TABLE_STRING, "yyy",
-                                 TABLE_BOOLEAN, true) >= 0);
+                                 TABLE_BOOLEAN, true,
+                                 TABLE_INT, -1) >= 0);
 
         assert_se(table_add_many(t,
                                  TABLE_STRING, "a long field",
                                  TABLE_STRING, "yyy",
                                  TABLE_SET_UPPERCASE, 1,
-                                 TABLE_BOOLEAN, false) >= 0);
+                                 TABLE_BOOLEAN, false,
+                                 TABLE_INT, -999999) >= 0);
 
         assert_se(table_format(t, &formatted) >= 0);
         printf("%s\n", formatted);
 
         assert_se(streq(formatted,
-                        "ONE          TWO THREE\n"
-                        "xxx          yyy   yes\n"
-                        "a long field YYY    no\n"));
+                        "ONE          TWO THREE    FOUR\n"
+                        "xxx          yyy yes        -1\n"
+                        "a long field YYY no    -999999\n"));
 
         formatted = mfree(formatted);
 
@@ -404,20 +429,20 @@
         printf("%s\n", formatted);
 
         assert_se(streq(formatted,
-                        "ONE                TWO             THREE\n"
-                        "xxx                yyy               yes\n"
-                        "a long field       YYY                no\n"));
+                        "ONE            TWO   THREE          FOUR\n"
+                        "xxx            yyy   yes              -1\n"
+                        "a long field   YYY   no          -999999\n"));
 
         formatted = mfree(formatted);
 
-        table_set_width(t, 12);
+        table_set_width(t, 15);
         assert_se(table_format(t, &formatted) >= 0);
         printf("%s\n", formatted);
 
         assert_se(streq(formatted,
-                        "ONE TWO THR…\n"
-                        "xxx yyy  yes\n"
-                        "a … YYY   no\n"));
+                        "ONE TWO TH… FO…\n"
+                        "xxx yyy yes  -1\n"
+                        "a … YYY no  -9…\n"));
 
         formatted = mfree(formatted);
 
@@ -426,9 +451,9 @@
         printf("%s\n", formatted);
 
         assert_se(streq(formatted,
-                        "… … …\n"
-                        "… … …\n"
-                        "… … …\n"));
+                        "… … … …\n"
+                        "… … … …\n"
+                        "… … … …\n"));
 
         formatted = mfree(formatted);
 
@@ -437,9 +462,9 @@
         printf("%s\n", formatted);
 
         assert_se(streq(formatted,
-                        "… … …\n"
-                        "… … …\n"
-                        "… … …\n"));
+                        "… … … …\n"
+                        "… … … …\n"
+                        "… … … …\n"));
 
         formatted = mfree(formatted);
 
@@ -450,9 +475,9 @@
         printf("%s\n", formatted);
 
         assert_se(streq(formatted,
-                        "ONE          TWO THREE\n"
-                        "a long field YYY    no\n"
-                        "xxx          yyy   yes\n"));
+                        "ONE          TWO THREE    FOUR\n"
+                        "a long field YYY no    -999999\n"
+                        "xxx          yyy yes        -1\n"));
 
         formatted = mfree(formatted);
 
@@ -461,27 +486,30 @@
         assert_se(table_add_many(t,
                                  TABLE_STRING, "fäää",
                                  TABLE_STRING, "uuu",
-                                 TABLE_BOOLEAN, true) >= 0);
+                                 TABLE_BOOLEAN, true,
+                                 TABLE_INT, 42) >= 0);
 
         assert_se(table_add_many(t,
                                  TABLE_STRING, "fäää",
                                  TABLE_STRING, "zzz",
-                                 TABLE_BOOLEAN, false) >= 0);
+                                 TABLE_BOOLEAN, false,
+                                 TABLE_INT, 0) >= 0);
 
         assert_se(table_add_many(t,
                                  TABLE_EMPTY,
                                  TABLE_SIZE, (uint64_t) 4711,
-                                 TABLE_TIMESPAN, (usec_t) 5*USEC_PER_MINUTE) >= 0);
+                                 TABLE_TIMESPAN, (usec_t) 5*USEC_PER_MINUTE,
+                                 TABLE_INT64, (uint64_t) -123456789) >= 0);
 
         assert_se(table_format(t, &formatted) >= 0);
         printf("%s\n", formatted);
 
         assert_se(streq(formatted,
-                        "a long field YYY    no\n"
-                        "fäää         zzz    no\n"
-                        "fäää         uuu   yes\n"
-                        "xxx          yyy   yes\n"
-                        "             4.6K 5min\n"));
+                        "a long field YYY  no      -999999\n"
+                        "fäää         zzz  no            0\n"
+                        "fäää         uuu  yes          42\n"
+                        "xxx          yyy  yes          -1\n"
+                        "             4.6K 5min -123456789\n"));
 
         formatted = mfree(formatted);
 
@@ -492,23 +520,73 @@
 
         if (isatty(STDOUT_FILENO))
                 assert_se(streq(formatted,
-                                "  no a long f…   no a long f… a long fi…\n"
-                                "  no fäää        no fäää      fäää\n"
-                                " yes fäää       yes fäää      fäää\n"
-                                " yes xxx        yes xxx       xxx\n"
+                                "no   a long f… no   a long f… a long fi…\n"
+                                "no   fäää      no   fäää      fäää\n"
+                                "yes  fäää      yes  fäää      fäää\n"
+                                "yes  xxx       yes  xxx       xxx\n"
                                 "5min           5min           \n"));
         else
                 assert_se(streq(formatted,
-                                "  no a long field   no a long field a long field\n"
-                                "  no fäää           no fäää         fäää\n"
-                                " yes fäää          yes fäää         fäää\n"
-                                " yes xxx           yes xxx          xxx\n"
+                                "no   a long field no   a long field a long field\n"
+                                "no   fäää         no   fäää         fäää\n"
+                                "yes  fäää         yes  fäää         fäää\n"
+                                "yes  xxx          yes  xxx          xxx\n"
                                 "5min              5min              \n"));
-
-        test_issue_9549();
-        test_multiline();
-        test_strv();
-        test_strv_wrapped();
-
-        return 0;
 }
+
+TEST(vertical) {
+        _cleanup_(table_unrefp) Table *t = NULL;
+        _cleanup_free_ char *formatted = NULL;
+
+        assert_se(t = table_new_vertical());
+
+        assert_se(table_add_many(t,
+                                 TABLE_FIELD, "pfft aa", TABLE_STRING, "foo",
+                                 TABLE_FIELD, "uuu o", TABLE_SIZE, UINT64_C(1024),
+                                 TABLE_FIELD, "lllllllllllo", TABLE_STRING, "jjjjjjjjjjjjjjjjj") >= 0);
+
+        assert_se(table_set_json_field_name(t, 1, "dimpfelmoser") >= 0);
+
+        assert_se(table_format(t, &formatted) >= 0);
+
+        assert_se(streq(formatted,
+                        "     pfft aa: foo\n"
+                        "       uuu o: 1.0K\n"
+                        "lllllllllllo: jjjjjjjjjjjjjjjjj\n"));
+
+        _cleanup_(json_variant_unrefp) JsonVariant *a = NULL, *b = NULL;
+        assert_se(table_to_json(t, &a) >= 0);
+
+        assert_se(json_build(&b, JSON_BUILD_OBJECT(
+                                             JSON_BUILD_PAIR("pfft_aa", JSON_BUILD_STRING("foo")),
+                                             JSON_BUILD_PAIR("dimpfelmoser", JSON_BUILD_UNSIGNED(1024)),
+                                             JSON_BUILD_PAIR("lllllllllllo", JSON_BUILD_STRING("jjjjjjjjjjjjjjjjj")))) >= 0);
+
+        assert_se(json_variant_equal(a, b));
+}
+
+TEST(path_basename) {
+        _cleanup_(table_unrefp) Table *t = NULL;
+        _cleanup_free_ char *formatted = NULL;
+
+        assert_se(t = table_new("x"));
+
+        table_set_header(t, false);
+
+        assert_se(table_add_many(t,
+                                 TABLE_PATH_BASENAME, "/foo/bar",
+                                 TABLE_PATH_BASENAME, "/quux/bar",
+                                 TABLE_PATH_BASENAME, "/foo/baz") >= 0);
+
+        assert_se(table_format(t, &formatted) >= 0);
+
+        assert_se(streq(formatted, "bar\nbar\nbaz\n"));
+}
+
+static int intro(void) {
+        assert_se(setenv("SYSTEMD_COLORS", "0", 1) >= 0);
+        assert_se(setenv("COLUMNS", "40", 1) >= 0);
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-format-util.c b/src/test/test-format-util.c
index 5562ac8..3063509 100644
--- a/src/test/test-format-util.c
+++ b/src/test/test-format-util.c
@@ -3,6 +3,32 @@
 #include "format-util.h"
 #include "macro.h"
 #include "string-util.h"
+#include "tests.h"
+#include "uchar.h"
+
+/* Do some basic checks on STRLEN() and DECIMAL_STR_MAX() */
+assert_cc(STRLEN("") == 0);
+assert_cc(STRLEN("a") == 1);
+assert_cc(STRLEN("123") == 3);
+assert_cc(STRLEN(u8"") == 0);
+assert_cc(STRLEN(u8"a") == 1);
+assert_cc(STRLEN(u8"123") == 3);
+assert_cc(STRLEN(u"") == 0);
+assert_cc(STRLEN(u"a") == sizeof(char16_t));
+assert_cc(STRLEN(u"123") == 3 * sizeof(char16_t));
+assert_cc(STRLEN(U"") == 0);
+assert_cc(STRLEN(U"a") == sizeof(char32_t));
+assert_cc(STRLEN(U"123") == 3 * sizeof(char32_t));
+assert_cc(STRLEN(L"") == 0);
+assert_cc(STRLEN(L"a") == sizeof(wchar_t));
+assert_cc(STRLEN(L"123") == 3 * sizeof(wchar_t));
+assert_cc(DECIMAL_STR_MAX(uint8_t) == STRLEN("255")+1);
+assert_cc(DECIMAL_STR_MAX(int8_t) == STRLEN("-127")+1);
+assert_cc(DECIMAL_STR_MAX(uint64_t) == STRLEN("18446744073709551615")+1);
+assert_cc(DECIMAL_STR_MAX(int64_t) == CONST_MAX(STRLEN("-9223372036854775808"), STRLEN("9223372036854775807"))+1);
+assert_cc(DECIMAL_STR_MAX(signed char) == STRLEN("-127")+1);
+assert_cc(DECIMAL_STR_MAX(unsigned char) == STRLEN("255")+1);
+assert_cc(CONST_MAX(DECIMAL_STR_MAX(int8_t), STRLEN("xxx")) == 5);
 
 static void test_format_bytes_one(uint64_t val, bool trailing_B, const char *iec_with_p, const char *iec_without_p,
                                   const char *si_with_p, const char *si_without_p) {
@@ -14,7 +40,7 @@
         assert_se(streq_ptr(format_bytes_full(buf, sizeof buf, val, trailing_B ? FORMAT_BYTES_TRAILING_B : 0), si_without_p));
 }
 
-static void test_format_bytes(void) {
+TEST(format_bytes) {
         test_format_bytes_one(900, true, "900B", "900B", "900B", "900B");
         test_format_bytes_one(900, false, "900", "900", "900", "900");
         test_format_bytes_one(1023, true, "1023B", "1023B", "1.0K", "1K");
@@ -32,8 +58,4 @@
         test_format_bytes_one(UINT64_MAX, false, NULL, NULL, NULL, NULL);
 }
 
-int main(void) {
-        test_format_bytes();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
index 98ce3d9..3fc5f88 100644
--- a/src/test/test-fs-util.c
+++ b/src/test/test-fs-util.c
@@ -3,6 +3,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
 #include "copy.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -16,25 +17,23 @@
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
+#include "sync-util.h"
 #include "tests.h"
 #include "tmpfile-util.h"
 #include "umask-util.h"
 #include "user-util.h"
-#include "util.h"
 #include "virt.h"
 
 static const char *arg_test_dir = NULL;
 
-static void test_chase_symlinks(void) {
-        _cleanup_free_ char *result = NULL;
-        _cleanup_close_ int pfd = -1;
+TEST(chase_symlinks) {
+        _cleanup_free_ char *result = NULL, *pwd = NULL;
+        _cleanup_close_ int pfd = -EBADF;
         char *temp;
         const char *top, *p, *pslash, *q, *qslash;
         struct stat st;
         int r;
 
-        log_info("/* %s */", __func__);
-
         temp = strjoina(arg_test_dir ?: "/tmp", "/test-chase.XXXXXX");
         assert_se(mkdtemp(temp));
 
@@ -216,7 +215,7 @@
         result = mfree(result);
 
         r = chase_symlinks("/etc/machine-id/foo", NULL, 0, &result, NULL);
-        assert_se(r == -ENOTDIR);
+        assert_se(IN_SET(r, -ENOTDIR, -ENOENT));
         result = mfree(result);
 
         /* Path that loops back to self */
@@ -246,6 +245,30 @@
         assert_se(path_equal(result, p));
         result = mfree(result);
 
+        /* Relative paths */
+
+        assert_se(safe_getcwd(&pwd) >= 0);
+
+        assert_se(chdir(temp) >= 0);
+
+        p = "this/is/a/relative/path";
+        r = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &result, NULL);
+        assert_se(r == 0);
+
+        p = strjoina(temp, "/", p);
+        assert_se(path_equal(result, p));
+        result = mfree(result);
+
+        p = "this/is/a/relative/path";
+        r = chase_symlinks(p, temp, CHASE_NONEXISTENT, &result, NULL);
+        assert_se(r == 0);
+
+        p = strjoina(temp, "/", p);
+        assert_se(path_equal(result, p));
+        result = mfree(result);
+
+        assert_se(chdir(pwd) >= 0);
+
         /* Path which doesn't exist, but contains weird stuff */
 
         p = strjoina(temp, "/idontexist/..");
@@ -292,8 +315,8 @@
         assert_se(symlink("/usr/../etc/./machine-id", p) >= 0);
 
         r = chase_symlinks(p, NULL, 0, NULL, &pfd);
-        if (r != -ENOENT) {
-                _cleanup_close_ int fd = -1;
+        if (r != -ENOENT && sd_id128_get_machine(NULL) >= 0) {
+                _cleanup_close_ int fd = -EBADF;
                 sd_id128_t a, b;
 
                 assert_se(pfd >= 0);
@@ -302,11 +325,18 @@
                 assert_se(fd >= 0);
                 safe_close(pfd);
 
-                assert_se(id128_read_fd(fd, ID128_PLAIN, &a) >= 0);
+                assert_se(id128_read_fd(fd, ID128_FORMAT_PLAIN, &a) >= 0);
                 assert_se(sd_id128_get_machine(&b) >= 0);
                 assert_se(sd_id128_equal(a, b));
         }
 
+        assert_se(lstat(p, &st) >= 0);
+        r = chase_symlinks_and_unlink(p, NULL, 0, 0,  &result);
+        assert_se(path_equal(result, p));
+        result = mfree(result);
+        assert_se(r == 0);
+        assert_se(lstat(p, &st) == -1 && errno == ENOENT);
+
         /* Test CHASE_NOFOLLOW */
 
         p = strjoina(temp, "/target");
@@ -387,16 +417,59 @@
         assert_se(path_equal(path_startswith(result, p), "usr"));
         result = mfree(result);
 
+        /* Test CHASE_PROHIBIT_SYMLINKS */
+
+        assert_se(chase_symlinks("top/dot", temp, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, NULL, NULL) == -EREMCHG);
+        assert_se(chase_symlinks("top/dot", temp, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS|CHASE_WARN, NULL, NULL) == -EREMCHG);
+        assert_se(chase_symlinks("top/dotdot", temp, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, NULL, NULL) == -EREMCHG);
+        assert_se(chase_symlinks("top/dotdot", temp, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS|CHASE_WARN, NULL, NULL) == -EREMCHG);
+        assert_se(chase_symlinks("top/dot/dot", temp, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, NULL, NULL) == -EREMCHG);
+        assert_se(chase_symlinks("top/dot/dot", temp, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS|CHASE_WARN, NULL, NULL) == -EREMCHG);
+
  cleanup:
         assert_se(rm_rf(temp, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
 }
 
-static void test_unlink_noerrno(void) {
+TEST(chase_symlinks_at) {
+        _cleanup_(rm_rf_physical_and_freep) char *t = NULL;
+        _cleanup_close_ int tfd = -EBADF, fd = -EBADF;
+        _cleanup_free_ char *result = NULL;
+        const char *p;
+
+        assert_se((tfd = mkdtemp_open(NULL, 0, &t)) >= 0);
+
+        /* Test that AT_FDCWD with CHASE_AT_RESOLVE_IN_ROOT resolves against / and not the current working
+         * directory. */
+
+        assert_se(symlinkat("/usr", tfd, "abc") >= 0);
+
+        p = strjoina(t, "/abc");
+        assert_se(chase_symlinks_at(AT_FDCWD, p, CHASE_AT_RESOLVE_IN_ROOT, &result, NULL) >= 0);
+        assert_se(streq(result, "/usr"));
+        result = mfree(result);
+
+        /* Test that absolute path or not are the same when resolving relative to a directory file
+         * descriptor and that we always get a relative path back. */
+
+        assert_se(fd = openat(tfd, "def", O_CREAT|O_CLOEXEC, 0700) >= 0);
+        fd = safe_close(fd);
+        assert_se(symlinkat("/def", tfd, "qed") >= 0);
+        assert_se(chase_symlinks_at(tfd, "qed", CHASE_AT_RESOLVE_IN_ROOT, &result, NULL) >= 0);
+        assert_se(streq(result, "def"));
+        result = mfree(result);
+        assert_se(chase_symlinks_at(tfd, "/qed", CHASE_AT_RESOLVE_IN_ROOT, &result, NULL) >= 0);
+        assert_se(streq(result, "def"));
+        result = mfree(result);
+
+        /* Valid directory file descriptor without CHASE_AT_RESOLVE_IN_ROOT should resolve symlinks against
+         * host's root. */
+        assert_se(chase_symlinks_at(tfd, "/qed", 0, &result, NULL) == -ENOENT);
+}
+
+TEST(unlink_noerrno) {
         char *name;
         int fd;
 
-        log_info("/* %s */", __func__);
-
         name = strjoina(arg_test_dir ?: "/tmp", "/test-close_nointr.XXXXXX");
         fd = mkostemp_safe(name);
         assert_se(fd >= 0);
@@ -412,12 +485,10 @@
         }
 }
 
-static void test_readlink_and_make_absolute(void) {
+TEST(readlink_and_make_absolute) {
         const char *tempdir, *name, *name2, *name_alias;
         _cleanup_free_ char *r1 = NULL, *r2 = NULL, *pwd = NULL;
 
-        log_info("/* %s */", __func__);
-
         tempdir = strjoina(arg_test_dir ?: "/tmp", "/test-readlink_and_make_absolute");
         name = strjoina(tempdir, "/original");
         name2 = "test-readlink_and_make_absolute/original";
@@ -448,7 +519,7 @@
         assert_se(rm_rf(tempdir, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
 }
 
-static void test_get_files_in_directory(void) {
+TEST(get_files_in_directory) {
         _cleanup_strv_free_ char **l = NULL, **t = NULL;
 
         assert_se(get_files_in_directory(arg_test_dir ?: "/tmp", &l) >= 0);
@@ -456,12 +527,10 @@
         assert_se(get_files_in_directory(".", NULL) >= 0);
 }
 
-static void test_var_tmp(void) {
+TEST(var_tmp) {
         _cleanup_free_ char *tmpdir_backup = NULL, *temp_backup = NULL, *tmp_backup = NULL;
         const char *tmp_dir = NULL, *t;
 
-        log_info("/* %s */", __func__);
-
         t = getenv("TMPDIR");
         if (t) {
                 tmpdir_backup = strdup(t);
@@ -515,9 +584,7 @@
         }
 }
 
-static void test_dot_or_dot_dot(void) {
-        log_info("/* %s */", __func__);
-
+TEST(dot_or_dot_dot) {
         assert_se(!dot_or_dot_dot(NULL));
         assert_se(!dot_or_dot_dot(""));
         assert_se(!dot_or_dot_dot("xxx"));
@@ -527,13 +594,11 @@
         assert_se(!dot_or_dot_dot("..foo"));
 }
 
-static void test_access_fd(void) {
+TEST(access_fd) {
         _cleanup_(rmdir_and_freep) char *p = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *a;
 
-        log_info("/* %s */", __func__);
-
         a = strjoina(arg_test_dir ?: "/tmp", "/access-fd.XXXXXX");
         assert_se(mkdtemp_malloc(a, &p) >= 0);
 
@@ -557,7 +622,7 @@
         }
 }
 
-static void test_touch_file(void) {
+TEST(touch_file) {
         uid_t test_uid, test_gid;
         _cleanup_(rm_rf_physical_and_freep) char *p = NULL;
         struct stat st;
@@ -565,8 +630,6 @@
         usec_t test_mtime;
         int r;
 
-        log_info("/* %s */", __func__);
-
         test_uid = geteuid() == 0 ? 65534 : getuid();
         test_gid = geteuid() == 0 ? 65534 : getgid();
 
@@ -657,13 +720,11 @@
         assert_se(timespec_load(&st.st_mtim) == test_mtime);
 }
 
-static void test_unlinkat_deallocate(void) {
+TEST(unlinkat_deallocate) {
         _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
 
-        log_info("/* %s */", __func__);
-
         assert_se(tempfn_random_child(arg_test_dir, "unlink-deallocation", &p) >= 0);
 
         fd = open(p, O_WRONLY|O_CLOEXEC|O_CREAT|O_EXCL, 0600);
@@ -685,10 +746,8 @@
         assert_se(st.st_nlink == 0);
 }
 
-static void test_fsync_directory_of_file(void) {
-        _cleanup_close_ int fd = -1;
-
-        log_info("/* %s */", __func__);
+TEST(fsync_directory_of_file) {
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open_tmpfile_unlinkable(arg_test_dir, O_RDWR);
         assert_se(fd >= 0);
@@ -696,7 +755,7 @@
         assert_se(fsync_directory_of_file(fd) >= 0);
 }
 
-static void test_rename_noreplace(void) {
+TEST(rename_noreplace) {
         static const char* const table[] = {
                 "/reg",
                 "/dir",
@@ -708,9 +767,6 @@
 
         _cleanup_(rm_rf_physical_and_freep) char *z = NULL;
         const char *j = NULL;
-        char **a, **b;
-
-        log_info("/* %s */", __func__);
 
         if (arg_test_dir)
                 j = strjoina(arg_test_dir, "/testXXXXXX");
@@ -731,7 +787,7 @@
         j = strjoina(z, table[4]);
         (void) symlink("foobar", j);
 
-        STRV_FOREACH(a, (char**) table) {
+        STRV_FOREACH(a, table) {
                 _cleanup_free_ char *x = NULL, *y = NULL;
 
                 x = strjoin(z, *a);
@@ -742,7 +798,7 @@
                         continue;
                 }
 
-                STRV_FOREACH(b, (char**) table) {
+                STRV_FOREACH(b, table) {
                         _cleanup_free_ char *w = NULL;
 
                         w = strjoin(z, *b);
@@ -764,7 +820,7 @@
         }
 }
 
-static void test_chmod_and_chown(void) {
+TEST(chmod_and_chown) {
         _cleanup_(rm_rf_physical_and_freep) char *d = NULL;
         struct stat st;
         const char *p;
@@ -772,8 +828,6 @@
         if (geteuid() != 0)
                 return;
 
-        log_info("/* %s */", __func__);
-
         BLOCK_WITH_UMASK(0000);
 
         assert_se(mkdtemp_malloc(NULL, &d) >= 0);
@@ -810,14 +864,14 @@
 }
 
 static void create_binary_file(const char *p, const void *data, size_t l) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         fd = open(p, O_CREAT|O_WRONLY|O_EXCL|O_CLOEXEC, 0600);
         assert_se(fd >= 0);
         assert_se(write(fd, data, l) == (ssize_t) l);
 }
 
-static void test_conservative_rename(void) {
+TEST(conservative_rename) {
         _cleanup_(unlink_and_freep) char *p = NULL;
         _cleanup_free_ char *q = NULL;
         size_t l = 16*1024 + random_u64() % (32 * 1024); /* some randomly sized buffer 16k…48k */
@@ -869,24 +923,199 @@
         assert_se(access(q, F_OK) < 0 && errno == ENOENT);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
+static void test_rmdir_parents_one(
+                const char *prefix,
+                const char *path,
+                const char *stop,
+                int expected,
+                const char *test_exist,
+                const char *test_nonexist_subdir) {
 
-        arg_test_dir = argv[1];
+        const char *p, *s;
 
-        test_chase_symlinks();
-        test_unlink_noerrno();
-        test_readlink_and_make_absolute();
-        test_get_files_in_directory();
-        test_var_tmp();
-        test_dot_or_dot_dot();
-        test_access_fd();
-        test_touch_file();
-        test_unlinkat_deallocate();
-        test_fsync_directory_of_file();
-        test_rename_noreplace();
-        test_chmod_and_chown();
-        test_conservative_rename();
+        log_debug("/* %s(%s, %s) */", __func__, path, stop);
 
-        return 0;
+        p = strjoina(prefix, path);
+        s = strjoina(prefix, stop);
+
+        if (expected >= 0)
+                assert_se(mkdir_parents(p, 0700) >= 0);
+
+        assert_se(rmdir_parents(p, s) == expected);
+
+        if (expected >= 0) {
+                const char *e, *f;
+
+                e = strjoina(prefix, test_exist);
+                f = strjoina(e, test_nonexist_subdir);
+
+                assert_se(access(e, F_OK) >= 0);
+                assert_se(access(f, F_OK) < 0);
+        }
 }
+
+TEST(rmdir_parents) {
+        char *temp;
+
+        temp = strjoina(arg_test_dir ?: "/tmp", "/test-rmdir.XXXXXX");
+        assert_se(mkdtemp(temp));
+
+        test_rmdir_parents_one(temp, "/aaa/../hoge/foo", "/hoge/foo", -EINVAL, NULL, NULL);
+        test_rmdir_parents_one(temp, "/aaa/bbb/ccc", "/hoge/../aaa", -EINVAL, NULL, NULL);
+
+        test_rmdir_parents_one(temp, "/aaa/bbb/ccc/ddd/eee", "/aaa/bbb/ccc/ddd", 0, "/aaa/bbb/ccc/ddd", "/eee");
+        test_rmdir_parents_one(temp, "/aaa/bbb/ccc/ddd/eee", "/aaa/bbb/ccc", 0, "/aaa/bbb/ccc", "/ddd");
+        test_rmdir_parents_one(temp, "/aaa/bbb/ccc/ddd/eee", "/aaa/bbb", 0, "/aaa/bbb", "/ccc");
+        test_rmdir_parents_one(temp, "/aaa/bbb/ccc/ddd/eee", "/aaa", 0, "/aaa", "/bbb");
+        test_rmdir_parents_one(temp, "/aaa/bbb/ccc/ddd/eee", "/", 0, "/", "/aaa");
+
+        test_rmdir_parents_one(temp, "/aaa/bbb/ccc/ddd/eee", "/aaa/hoge/foo", 0, "/aaa", "/bbb");
+        test_rmdir_parents_one(temp, "/aaa////bbb/.//ccc//ddd/eee///./.", "///././aaa/.", 0, "/aaa", "/bbb");
+
+        assert_se(rm_rf(temp, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+}
+
+static void test_parse_cifs_service_one(const char *f, const char *h, const char *s, const char *d, int ret) {
+        _cleanup_free_ char *a = NULL, *b = NULL, *c = NULL;
+
+        assert_se(parse_cifs_service(f, &a, &b, &c) == ret);
+        assert_se(streq_ptr(a, h));
+        assert_se(streq_ptr(b, s));
+        assert_se(streq_ptr(c, d));
+}
+
+TEST(parse_cifs_service) {
+        test_parse_cifs_service_one("//foo/bar/baz", "foo", "bar", "baz", 0);
+        test_parse_cifs_service_one("\\\\foo\\bar\\baz", "foo", "bar", "baz", 0);
+        test_parse_cifs_service_one("//foo/bar", "foo", "bar", NULL, 0);
+        test_parse_cifs_service_one("\\\\foo\\bar", "foo", "bar", NULL, 0);
+        test_parse_cifs_service_one("//foo/bar/baz/uuu", "foo", "bar", "baz/uuu", 0);
+        test_parse_cifs_service_one("\\\\foo\\bar\\baz\\uuu", "foo", "bar", "baz/uuu", 0);
+
+        test_parse_cifs_service_one(NULL, NULL, NULL, NULL, -EINVAL);
+        test_parse_cifs_service_one("", NULL, NULL, NULL, -EINVAL);
+        test_parse_cifs_service_one("abc", NULL, NULL, NULL, -EINVAL);
+        test_parse_cifs_service_one("abc/cde/efg", NULL, NULL, NULL, -EINVAL);
+        test_parse_cifs_service_one("//foo/bar/baz/..", NULL, NULL, NULL, -EINVAL);
+        test_parse_cifs_service_one("//foo///", NULL, NULL, NULL, -EINVAL);
+        test_parse_cifs_service_one("//foo/.", NULL, NULL, NULL, -EINVAL);
+        test_parse_cifs_service_one("//foo/a/.", NULL, NULL, NULL, -EINVAL);
+        test_parse_cifs_service_one("//./a", NULL, NULL, NULL, -EINVAL);
+}
+
+TEST(open_mkdir_at) {
+        _cleanup_close_ int fd = -EBADF, subdir_fd = -EBADF, subsubdir_fd = -EBADF;
+        _cleanup_(rm_rf_physical_and_freep) char *t = NULL;
+
+        assert_se(open_mkdir_at(AT_FDCWD, "/proc", O_EXCL|O_CLOEXEC, 0) == -EEXIST);
+
+        fd = open_mkdir_at(AT_FDCWD, "/proc", O_CLOEXEC, 0);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+
+        assert_se(open_mkdir_at(AT_FDCWD, "/bin/sh", O_EXCL|O_CLOEXEC, 0) == -EEXIST);
+        assert_se(open_mkdir_at(AT_FDCWD, "/bin/sh", O_CLOEXEC, 0) == -EEXIST);
+
+        assert_se(mkdtemp_malloc(NULL, &t) >= 0);
+
+        assert_se(open_mkdir_at(AT_FDCWD, t, O_EXCL|O_CLOEXEC, 0) == -EEXIST);
+        assert_se(open_mkdir_at(AT_FDCWD, t, O_PATH|O_EXCL|O_CLOEXEC, 0) == -EEXIST);
+
+        fd = open_mkdir_at(AT_FDCWD, t, O_CLOEXEC, 0000);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+
+        fd = open_mkdir_at(AT_FDCWD, t, O_PATH|O_CLOEXEC, 0000);
+        assert_se(fd >= 0);
+
+        subdir_fd = open_mkdir_at(fd, "xxx", O_PATH|O_EXCL|O_CLOEXEC, 0700);
+        assert_se(subdir_fd >= 0);
+
+        assert_se(open_mkdir_at(fd, "xxx", O_PATH|O_EXCL|O_CLOEXEC, 0) == -EEXIST);
+
+        subsubdir_fd = open_mkdir_at(subdir_fd, "yyy", O_EXCL|O_CLOEXEC, 0700);
+        assert_se(subsubdir_fd >= 0);
+        subsubdir_fd = safe_close(subsubdir_fd);
+
+        assert_se(open_mkdir_at(subdir_fd, "yyy", O_EXCL|O_CLOEXEC, 0) == -EEXIST);
+
+        assert_se(open_mkdir_at(fd, "xxx/yyy", O_EXCL|O_CLOEXEC, 0) == -EEXIST);
+
+        subsubdir_fd = open_mkdir_at(fd, "xxx/yyy", O_CLOEXEC, 0700);
+        assert_se(subsubdir_fd >= 0);
+}
+
+TEST(openat_report_new) {
+        _cleanup_free_ char *j = NULL;
+        _cleanup_(rm_rf_physical_and_freep) char *d = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        bool b;
+
+        assert_se(mkdtemp_malloc(NULL, &d) >= 0);
+
+        j = path_join(d, "test");
+        assert_se(j);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT, 0666, &b);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+        assert_se(b);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT, 0666, &b);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+        assert_se(!b);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT, 0666, &b);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+        assert_se(!b);
+
+        assert_se(unlink(j) >= 0);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT, 0666, &b);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+        assert_se(b);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT, 0666, &b);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+        assert_se(!b);
+
+        assert_se(unlink(j) >= 0);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT, 0666, NULL);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT, 0666, &b);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+        assert_se(!b);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR, 0666, &b);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+        assert_se(!b);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT|O_EXCL, 0666, &b);
+        assert_se(fd == -EEXIST);
+
+        assert_se(unlink(j) >= 0);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR, 0666, &b);
+        assert_se(fd == -ENOENT);
+
+        fd = openat_report_new(AT_FDCWD, j, O_RDWR|O_CREAT|O_EXCL, 0666, &b);
+        assert_se(fd >= 0);
+        fd = safe_close(fd);
+        assert_se(b);
+}
+
+static int intro(void) {
+        arg_test_dir = saved_argv[1];
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-fstab-util.c b/src/test/test-fstab-util.c
index d2f2018..89365b0 100644
--- a/src/test/test-fstab-util.c
+++ b/src/test/test-fstab-util.c
@@ -7,6 +7,7 @@
 #include "log.h"
 #include "string-util.h"
 #include "strv.h"
+#include "tests.h"
 
 /*
 int fstab_filter_options(
@@ -36,7 +37,7 @@
         r = fstab_filter_options(opts, remove, &name, &value, NULL, &filtered);
         log_info("1: \"%s\" → %d, \"%s\", \"%s\", \"%s\", expected %d, \"%s\", \"%s\", \"%s\"",
                  opts, r, strnull(name), value, filtered,
-                 r_expected, name_expected, value_expected, filtered_expected ?: opts);
+                 r_expected, strnull(name_expected), strnull(value_expected), filtered_expected ?: opts);
         assert_se(r == r_expected);
         assert_se(streq_ptr(name, name_expected));
         assert_se(streq_ptr(value, value_expected));
@@ -48,7 +49,7 @@
         assert_se(joined = strv_join(values, ":"));
         log_info("2: \"%s\" → %d, \"%s\", \"%s\", expected %d, \"%s\", \"%s\"",
                  opts, r, strnull(name), joined,
-                 r_values_expected, name_expected, values_expected);
+                 r_values_expected, strnull(name_expected), strnull(values_expected));
         assert_se(r == r_values_expected);
         assert_se(streq_ptr(name, r_values_expected > 0 ? name_expected : NULL));
         assert_se(streq_ptr(joined, values_expected));
@@ -57,12 +58,12 @@
         r = fstab_filter_options(opts, remove, &name, NULL, NULL, NULL);
         log_info("3: \"%s\" → %d, \"%s\", expected %d, \"%s\"\n-",
                  opts, r, strnull(name),
-                 r_expected, name_expected);
+                 r_expected, strnull(name_expected));
         assert_se(r == r_expected);
         assert_se(streq_ptr(name, name_expected));
 }
 
-static void test_fstab_filter_options(void) {
+TEST(fstab_filter_options) {
         do_fstab_filter_options("opt=0", "opt\0x-opt\0", 1, 1, "opt", "0", "0", "");
         do_fstab_filter_options("opt=0", "x-opt\0opt\0", 1, 1, "opt", "0", "0", "");
         do_fstab_filter_options("opt", "opt\0x-opt\0", 1, 0, "opt", NULL, "", "");
@@ -127,7 +128,7 @@
         do_fstab_filter_options("opt1=\\\\,opt2=\\xff", "opt2\0", 1, 1, "opt2", "\\xff", "\\xff", "opt1=\\");
 }
 
-static void test_fstab_find_pri(void) {
+TEST(fstab_find_pri) {
         int pri = -1;
 
         assert_se(fstab_find_pri("pri", &pri) == 0);
@@ -146,7 +147,7 @@
         assert_se(pri == 13);
 }
 
-static void test_fstab_yes_no_option(void) {
+TEST(fstab_yes_no_option) {
         assert_se(fstab_test_yes_no_option("nofail,fail,nofail", "nofail\0fail\0") == true);
         assert_se(fstab_test_yes_no_option("nofail,nofail,fail", "nofail\0fail\0") == false);
         assert_se(fstab_test_yes_no_option("abc,cde,afail", "nofail\0fail\0") == false);
@@ -154,7 +155,7 @@
         assert_se(fstab_test_yes_no_option("nofail,nofail=0,fail=0", "nofail\0fail\0") == false);
 }
 
-static void test_fstab_node_to_udev_node(void) {
+TEST(fstab_node_to_udev_node) {
         char *n;
 
         n = fstab_node_to_udev_node("LABEL=applé/jack");
@@ -188,11 +189,4 @@
         free(n);
 }
 
-int main(void) {
-        test_fstab_filter_options();
-        test_fstab_find_pri();
-        test_fstab_yes_no_option();
-        test_fstab_node_to_udev_node();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-gcrypt-util.c b/src/test/test-gcrypt-util.c
deleted file mode 100644
index 2af040b..0000000
--- a/src/test/test-gcrypt-util.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "alloc-util.h"
-#include "gcrypt-util.h"
-#include "macro.h"
-#include "string-util.h"
-
-static void test_string_hashsum(void) {
-        _cleanup_free_ char *out1 = NULL, *out2 = NULL, *out3 = NULL, *out4 = NULL;
-
-        assert_se(string_hashsum("asdf", 4, GCRY_MD_SHA224, &out1) == 0);
-        /* echo -n 'asdf' | sha224sum - */
-        assert_se(streq(out1, "7872a74bcbf298a1e77d507cd95d4f8d96131cbbd4cdfc571e776c8a"));
-
-        assert_se(string_hashsum("asdf", 4, GCRY_MD_SHA256, &out2) == 0);
-        /* echo -n 'asdf' | sha256sum - */
-        assert_se(streq(out2, "f0e4c2f76c58916ec258f246851bea091d14d4247a2fc3e18694461b1816e13b"));
-
-        assert_se(string_hashsum("", 0, GCRY_MD_SHA224, &out3) == 0);
-        /* echo -n '' | sha224sum - */
-        assert_se(streq(out3, "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f"));
-
-        assert_se(string_hashsum("", 0, GCRY_MD_SHA256, &out4) == 0);
-        /* echo -n '' | sha256sum - */
-        assert_se(streq(out4, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"));
-}
-
-int main(int argc, char **argv) {
-        test_string_hashsum();
-
-        return 0;
-}
diff --git a/src/test/test-glob-util.c b/src/test/test-glob-util.c
index 50b4924..9b3e73c 100644
--- a/src/test/test-glob-util.c
+++ b/src/test/test-glob-util.c
@@ -10,13 +10,33 @@
 #include "glob-util.h"
 #include "macro.h"
 #include "rm-rf.h"
+#include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_glob_exists(void) {
-        log_info("/* %s */", __func__);
+TEST(glob_first) {
+        char *first, name[] = "/tmp/test-glob_first.XXXXXX";
+        int fd = -EBADF;
+        int r;
 
+        fd = mkostemp_safe(name);
+        assert_se(fd >= 0);
+        close(fd);
+
+        r = glob_first("/tmp/test-glob_first*", &first);
+        assert_se(r == 1);
+        assert_se(streq(name, first));
+        first = mfree(first);
+
+        r = unlink(name);
+        assert_se(r == 0);
+        r = glob_first("/tmp/test-glob_first*", &first);
+        assert_se(r == 0);
+        assert_se(first == NULL);
+}
+
+TEST(glob_exists) {
         char name[] = "/tmp/test-glob_exists.XXXXXX";
-        int fd = -1;
+        int fd = -EBADF;
         int r;
 
         fd = mkostemp_safe(name);
@@ -36,7 +56,7 @@
         (void) closedir(v);
 }
 
-static void test_glob_no_dot(void) {
+TEST(glob_no_dot) {
         char template[] = "/tmp/test-glob-util.XXXXXXX";
         const char *fn;
 
@@ -50,8 +70,6 @@
 
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(mkdtemp(template));
 
         fn = strjoina(template, "/*");
@@ -65,15 +83,13 @@
         (void) rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL);
 }
 
-static void test_safe_glob(void) {
+TEST(safe_glob) {
         char template[] = "/tmp/test-glob-util.XXXXXXX";
         const char *fn, *fn2, *fname;
 
         _cleanup_globfree_ glob_t g = {};
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(mkdtemp(template));
 
         fn = strjoina(template, "/*");
@@ -106,9 +122,7 @@
         assert_se(streq(t, expected));
 }
 
-static void test_glob_non_glob(void) {
-        log_info("/* %s */", __func__);
-
+TEST(glob_non_glob) {
         test_glob_non_glob_prefix_one("/tmp/.X11-*", "/tmp/");
         test_glob_non_glob_prefix_one("/tmp/*", "/tmp/");
         test_glob_non_glob_prefix_one("/tmp*", "/");
@@ -120,11 +134,4 @@
         assert_se(glob_non_glob_prefix("?", &x) == -ENOENT);
 }
 
-int main(void) {
-        test_glob_exists();
-        test_glob_no_dot();
-        test_safe_glob();
-        test_glob_non_glob();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-gpt.c b/src/test/test-gpt.c
new file mode 100644
index 0000000..b8a5405
--- /dev/null
+++ b/src/test/test-gpt.c
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "architecture.h"
+#include "glyph-util.h"
+#include "gpt.h"
+#include "log.h"
+#include "pretty-print.h"
+#include "strv.h"
+#include "terminal-util.h"
+#include "tests.h"
+
+TEST(gpt_types_against_architectures) {
+        int r;
+
+        /* Dumps a table indicating for which architectures we know we have matching GPT partition
+         * types. Also validates whether we can properly categorize the entries. */
+
+        FOREACH_STRING(prefix, "root-", "usr-")
+                for (Architecture a = 0; a < _ARCHITECTURE_MAX; a++)
+                        FOREACH_STRING(suffix, "", "-verity", "-verity-sig") {
+                                _cleanup_free_ char *joined = NULL;
+                                GptPartitionType type;
+
+                                joined = strjoin(prefix, architecture_to_string(a), suffix);
+                                if (!joined)
+                                        return (void) log_oom();
+
+                                r = gpt_partition_type_from_string(joined, &type);
+                                if (r < 0) {
+                                        printf("%s %s\n", RED_CROSS_MARK(), joined);
+                                        continue;
+                                }
+
+                                printf("%s %s\n", GREEN_CHECK_MARK(), joined);
+
+                                if (streq(prefix, "root-") && streq(suffix, ""))
+                                        assert_se(type.designator == PARTITION_ROOT);
+                                if (streq(prefix, "root-") && streq(suffix, "-verity"))
+                                        assert_se(type.designator == PARTITION_ROOT_VERITY);
+                                if (streq(prefix, "usr-") && streq(suffix, ""))
+                                        assert_se(type.designator == PARTITION_USR);
+                                if (streq(prefix, "usr-") && streq(suffix, "-verity"))
+                                        assert_se(type.designator == PARTITION_USR_VERITY);
+
+                                assert_se(type.arch == a);
+                        }
+}
+
+TEST(verity_mappings) {
+        for (PartitionDesignator p = 0; p < _PARTITION_DESIGNATOR_MAX; p++) {
+                PartitionDesignator q;
+
+                q = partition_verity_of(p);
+                assert_se(q < 0 || partition_verity_to_data(q) == p);
+
+                q = partition_verity_sig_of(p);
+                assert_se(q < 0 || partition_verity_sig_to_data(q) == p);
+
+                q = partition_verity_to_data(p);
+                assert_se(q < 0 || partition_verity_of(q) == p);
+
+                q = partition_verity_sig_to_data(p);
+                assert_se(q < 0 || partition_verity_sig_of(q) == p);
+        }
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-hash-funcs.c b/src/test/test-hash-funcs.c
index db68e3a..f5166c1 100644
--- a/src/test/test-hash-funcs.c
+++ b/src/test/test-hash-funcs.c
@@ -4,12 +4,10 @@
 #include "hash-funcs.h"
 #include "set.h"
 
-static void test_path_hash_set(void) {
+TEST(path_hash_set) {
         /* The goal is to make sure that non-simplified path are hashed as expected,
          * and that we don't need to simplify them beforehand. */
 
-        log_info("/* %s */", __func__);
-
         /* No freeing of keys, we operate on static strings here… */
         _cleanup_set_free_ Set *set = NULL;
 
@@ -76,8 +74,4 @@
         assert_se(!set_contains(set, "/////../bar/./"));
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_INFO);
-
-        test_path_hash_set();
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-hash.c b/src/test/test-hash.c
deleted file mode 100644
index 270fcd0..0000000
--- a/src/test/test-hash.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <stdio.h>
-
-#include "alloc-util.h"
-#include "log.h"
-#include "string-util.h"
-#include "khash.h"
-#include "tests.h"
-
-int main(int argc, char *argv[]) {
-        _cleanup_(khash_unrefp) khash *h = NULL, *copy = NULL;
-        _cleanup_free_ char *s = NULL;
-        int r;
-
-        test_setup_logging(LOG_DEBUG);
-
-        assert_se(khash_new(&h, NULL) == -EINVAL);
-        assert_se(khash_new(&h, "") == -EINVAL);
-
-        r = khash_supported();
-        assert_se(r >= 0);
-        if (r == 0)
-                return log_tests_skipped("khash not supported on this kernel");
-
-        assert_se(khash_new(&h, "foobar") == -EOPNOTSUPP); /* undefined hash function */
-
-        assert_se(khash_new(&h, "sha256") >= 0);
-        assert_se(khash_get_size(h) == 32);
-        assert_se(streq(khash_get_algorithm(h), "sha256"));
-
-        assert_se(khash_digest_string(h, &s) >= 0);
-        assert_se(streq(s, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"));
-        s = mfree(s);
-
-        assert_se(khash_put(h, "foobar", 6) >= 0);
-        assert_se(khash_digest_string(h, &s) >= 0);
-        assert_se(streq(s, "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2"));
-        s = mfree(s);
-
-        assert_se(khash_put(h, "piep", 4) >= 0);
-        assert_se(khash_digest_string(h, &s) >= 0);
-        assert_se(streq(s, "f114d872b5ea075d3be9040d0b7a429514b3f9324a8e8e3dc3fb24c34ee56bea"));
-        s = mfree(s);
-
-        assert_se(khash_put(h, "foo", 3) >= 0);
-        assert_se(khash_dup(h, &copy) >= 0);
-
-        assert_se(khash_put(h, "bar", 3) >= 0);
-        assert_se(khash_put(copy, "bar", 3) >= 0);
-
-        assert_se(khash_digest_string(h, &s) >= 0);
-        assert_se(streq(s, "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2"));
-        s = mfree(s);
-
-        assert_se(khash_digest_string(copy, &s) >= 0);
-        assert_se(streq(s, "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2"));
-        s = mfree(s);
-
-        h = khash_unref(h);
-
-        assert_se(khash_new_with_key(&h, "hmac(sha256)", "quux", 4) >= 0);
-        assert_se(khash_get_size(h) == 32);
-        assert_se(streq(khash_get_algorithm(h), "hmac(sha256)"));
-
-        assert_se(khash_digest_string(h, &s) >= 0);
-        assert_se(streq(s, "abed9f8218ab473f77218a6a7d39abf1d21fa46d0700c4898e330ba88309d5ae"));
-        s = mfree(s);
-
-        assert_se(khash_put(h, "foobar", 6) >= 0);
-        assert_se(khash_digest_string(h, &s) >= 0);
-        assert_se(streq(s, "33f6c70a60db66007d5325d5d1dea37c371354e5b83347a59ad339ce9f4ba3dc"));
-
-        return 0;
-}
diff --git a/src/test/test-hashmap-plain.c b/src/test/test-hashmap-plain.c
index b9f20fb..fea20d8 100644
--- a/src/test/test-hashmap-plain.c
+++ b/src/test/test-hashmap-plain.c
@@ -10,14 +10,10 @@
 #include "time-util.h"
 #include "tests.h"
 
-void test_hashmap_funcs(void);
-
-static void test_hashmap_replace(void) {
+TEST(hashmap_replace) {
         Hashmap *m;
         char *val1, *val2, *val3, *val4, *val5, *r;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
 
         val1 = strdup("val1");
@@ -52,12 +48,10 @@
         hashmap_free(m);
 }
 
-static void test_hashmap_copy(void) {
+TEST(hashmap_copy) {
         Hashmap *m, *copy;
         char *val1, *val2, *val3, *val4, *r;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("val1");
         assert_se(val1);
         val2 = strdup("val2");
@@ -89,13 +83,11 @@
         hashmap_free(m);
 }
 
-static void test_hashmap_get_strv(void) {
+TEST(hashmap_get_strv) {
         Hashmap *m;
         char **strv;
         char *val1, *val2, *val3, *val4;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("val1");
         assert_se(val1);
         val2 = strdup("val2");
@@ -128,12 +120,10 @@
         hashmap_free(m);
 }
 
-static void test_hashmap_move_one(void) {
+TEST(hashmap_move_one) {
         Hashmap *m, *n;
         char *val1, *val2, *val3, *val4, *r;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("val1");
         assert_se(val1);
         val2 = strdup("val2");
@@ -169,12 +159,10 @@
         hashmap_free_free(n);
 }
 
-static void test_hashmap_move(void) {
+TEST(hashmap_move) {
         Hashmap *m, *n;
         char *val1, *val2, *val3, *val4, *r;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("val1");
         assert_se(val1);
         val2 = strdup("val2");
@@ -213,12 +201,10 @@
         hashmap_free_free(n);
 }
 
-static void test_hashmap_update(void) {
+TEST(hashmap_update) {
         Hashmap *m;
         char *val1, *val2, *r;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
         val1 = strdup("old_value");
         assert_se(val1);
@@ -242,15 +228,13 @@
         hashmap_free(m);
 }
 
-static void test_hashmap_put(void) {
+TEST(hashmap_put) {
         Hashmap *m = NULL;
         int valid_hashmap_put;
         void *val1 = (void*) "val 1";
         void *val2 = (void*) "val 2";
         _cleanup_free_ char* key1 = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(hashmap_ensure_allocated(&m, &string_hash_ops) == 1);
         assert_se(m);
 
@@ -265,12 +249,10 @@
         hashmap_free(m);
 }
 
-static void test_hashmap_remove(void) {
+TEST(hashmap_remove1) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         char *r;
 
-        log_info("/* %s */", __func__);
-
         r = hashmap_remove(NULL, "key 1");
         assert_se(r == NULL);
 
@@ -291,7 +273,7 @@
         assert_se(!hashmap_get(m, "key 1"));
 }
 
-static void test_hashmap_remove2(void) {
+TEST(hashmap_remove2) {
         _cleanup_hashmap_free_free_free_ Hashmap *m = NULL;
         char key1[] = "key 1";
         char key2[] = "key 2";
@@ -299,8 +281,6 @@
         char val2[] = "val 2";
         void *r, *r2;
 
-        log_info("/* %s */", __func__);
-
         r = hashmap_remove2(NULL, "key 1", &r2);
         assert_se(r == NULL);
 
@@ -324,15 +304,13 @@
         assert_se(!hashmap_get(m, key1));
 }
 
-static void test_hashmap_remove_value(void) {
+TEST(hashmap_remove_value) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         char *r;
 
         char val1[] = "val 1";
         char val2[] = "val 2";
 
-        log_info("/* %s */", __func__);
-
         r = hashmap_remove_value(NULL, "key 1", val1);
         assert_se(r == NULL);
 
@@ -360,13 +338,11 @@
         assert_se(!hashmap_get(m, "key 1"));
 }
 
-static void test_hashmap_remove_and_put(void) {
+TEST(hashmap_remove_and_put) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         int valid;
         char *r;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
         assert_se(m);
 
@@ -392,7 +368,7 @@
         assert_se(valid == -EEXIST);
 }
 
-static void test_hashmap_remove_and_replace(void) {
+TEST(hashmap_remove_and_replace) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         int valid;
         void *key1 = UINT_TO_PTR(1);
@@ -401,8 +377,6 @@
         void *r;
         int i, j;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&trivial_hash_ops);
         assert_se(m);
 
@@ -450,12 +424,10 @@
         }
 }
 
-static void test_hashmap_ensure_allocated(void) {
+TEST(hashmap_ensure_allocated) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         int r;
 
-        log_info("/* %s */", __func__);
-
         r = hashmap_ensure_allocated(&m, &string_hash_ops);
         assert_se(r == 1);
 
@@ -467,7 +439,7 @@
         assert_se(r == 0);
 }
 
-static void test_hashmap_foreach_key(void) {
+TEST(hashmap_foreach_key) {
         Hashmap *m;
         bool key_found[] = { false, false, false, false };
         const char *s;
@@ -478,15 +450,13 @@
                 "key 3\0"
                 "key 4\0";
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
 
-        NULSTR_FOREACH(key, key_table)
-                hashmap_put(m, key, (void*) (const char*) "my dummy val");
+        NULSTR_FOREACH(k, key_table)
+                hashmap_put(m, k, (void*) (const char*) "my dummy val");
 
         HASHMAP_FOREACH_KEY(s, key, m) {
-                assert(s);
+                assert_se(s);
                 if (!key_found[0] && streq(key, "key 1"))
                         key_found[0] = true;
                 else if (!key_found[1] && streq(key, "key 2"))
@@ -503,14 +473,12 @@
         hashmap_free(m);
 }
 
-static void test_hashmap_foreach(void) {
+TEST(hashmap_foreach) {
         Hashmap *m;
         bool value_found[] = { false, false, false, false };
         char *val1, *val2, *val3, *val4, *s;
         unsigned count;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("my val1");
         assert_se(val1);
         val2 = strdup("my val2");
@@ -556,12 +524,10 @@
         hashmap_free_free(m);
 }
 
-static void test_hashmap_merge(void) {
+TEST(hashmap_merge) {
         Hashmap *m, *n;
         char *val1, *val2, *val3, *val4, *r;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("my val1");
         assert_se(val1);
         val2 = strdup("my val2");
@@ -591,12 +557,10 @@
         hashmap_free_free(m);
 }
 
-static void test_hashmap_contains(void) {
+TEST(hashmap_contains) {
         Hashmap *m;
         char *val1;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("my val");
         assert_se(val1);
 
@@ -613,12 +577,10 @@
         hashmap_free_free(m);
 }
 
-static void test_hashmap_isempty(void) {
+TEST(hashmap_isempty) {
         Hashmap *m;
         char *val1;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("my val");
         assert_se(val1);
 
@@ -632,12 +594,10 @@
         hashmap_free_free(m);
 }
 
-static void test_hashmap_size(void) {
+TEST(hashmap_size) {
         Hashmap *m;
         char *val1, *val2, *val3, *val4;
 
-        log_info("/* %s */", __func__);
-
         val1 = strdup("my val");
         assert_se(val1);
         val2 = strdup("my val");
@@ -663,13 +623,11 @@
         hashmap_free_free(m);
 }
 
-static void test_hashmap_get(void) {
+TEST(hashmap_get) {
         Hashmap *m;
         char *r;
         char *val;
 
-        log_info("/* %s */", __func__);
-
         val = strdup("my val");
         assert_se(val);
 
@@ -690,15 +648,13 @@
         hashmap_free_free(m);
 }
 
-static void test_hashmap_get2(void) {
+TEST(hashmap_get2) {
         Hashmap *m;
         char *r;
         char *val;
         char key_orig[] = "Key 1";
         void *key_copy;
 
-        log_info("/* %s */", __func__);
-
         val = strdup("my val");
         assert_se(val);
 
@@ -734,7 +690,7 @@
         .compare = trivial_compare_func,
 };
 
-static void test_hashmap_many(void) {
+TEST(hashmap_many) {
         Hashmap *h;
         unsigned i, j;
         void *v, *k;
@@ -752,7 +708,6 @@
 
         for (j = 0; j < ELEMENTSOF(tests); j++) {
                 usec_t ts = now(CLOCK_MONOTONIC), n;
-                char b[FORMAT_TIMESPAN_MAX];
 
                 assert_se(h = hashmap_new(tests[j].ops));
 
@@ -779,18 +734,17 @@
                 hashmap_free(h);
 
                 n = now(CLOCK_MONOTONIC);
-                log_info("test took %s", format_timespan(b, sizeof b, n - ts, 0));
+                log_info("test took %s", FORMAT_TIMESPAN(n - ts, 0));
         }
 }
 
 extern unsigned custom_counter;
 extern const struct hash_ops boring_hash_ops, custom_hash_ops;
 
-static void test_hashmap_free(void) {
+TEST(hashmap_free) {
         Hashmap *h;
         bool slow = slow_tests_enabled();
         usec_t ts, n;
-        char b[FORMAT_TIMESPAN_MAX];
         unsigned n_entries = slow ? 1 << 20 : 240;
 
         const struct {
@@ -824,7 +778,7 @@
                 hashmap_free(h);
 
                 n = now(CLOCK_MONOTONIC);
-                log_info("%s test took %s", tests[j].title, format_timespan(b, sizeof b, n - ts, 0));
+                log_info("%s test took %s", tests[j].title, FORMAT_TIMESPAN(n - ts, 0));
 
                 assert_se(custom_counter == tests[j].expect_counter);
         }
@@ -837,13 +791,11 @@
         item->seen++;
 }
 
-static void test_hashmap_free_with_destructor(void) {
+TEST(hashmap_free_with_destructor) {
         Hashmap *m;
         struct Item items[4] = {};
         unsigned i;
 
-        log_info("/* %s */", __func__);
-
         assert_se(m = hashmap_new(NULL));
         for (i = 0; i < ELEMENTSOF(items) - 1; i++)
                 assert_se(hashmap_put(m, INT_TO_PTR(i), items + i) == 1);
@@ -855,11 +807,9 @@
         assert_se(items[3].seen == 0);
 }
 
-static void test_hashmap_first(void) {
+TEST(hashmap_first) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
         assert_se(m);
 
@@ -874,11 +824,9 @@
 #endif
 }
 
-static void test_hashmap_first_key(void) {
+TEST(hashmap_first_key) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
         assert_se(m);
 
@@ -893,11 +841,9 @@
 #endif
 }
 
-static void test_hashmap_steal_first_key(void) {
+TEST(hashmap_steal_first_key) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
         assert_se(m);
 
@@ -908,13 +854,11 @@
         assert_se(hashmap_isempty(m));
 }
 
-static void test_hashmap_steal_first(void) {
+TEST(hashmap_steal_first) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         int seen[3] = {};
         char *val;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
         assert_se(m);
 
@@ -930,11 +874,9 @@
         assert_se(hashmap_isempty(m));
 }
 
-static void test_hashmap_clear_free_free(void) {
+TEST(hashmap_clear_free_free) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
         assert_se(m);
 
@@ -956,11 +898,9 @@
 DEFINE_PRIVATE_HASH_OPS_WITH_KEY_DESTRUCTOR(test_hash_ops_key, char, string_hash_func, string_compare_func, free);
 DEFINE_PRIVATE_HASH_OPS_FULL(test_hash_ops_full, char, string_hash_func, string_compare_func, free, char, free);
 
-static void test_hashmap_clear_free_with_destructor(void) {
+TEST(hashmap_clear_free_with_destructor) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&test_hash_ops_key);
         assert_se(m);
 
@@ -983,11 +923,9 @@
         assert_se(hashmap_isempty(m));
 }
 
-static void test_hashmap_reserve(void) {
+TEST(hashmap_reserve) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
 
-        log_info("/* %s */", __func__);
-
         m = hashmap_new(&string_hash_ops);
 
         assert_se(hashmap_reserve(m, 1) == 0);
@@ -1002,11 +940,9 @@
         assert_se(hashmap_reserve(m, UINT_MAX - 1) == -ENOMEM);
 }
 
-static void test_path_hashmap(void) {
+TEST(path_hashmap) {
         _cleanup_hashmap_free_ Hashmap *h = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(h = hashmap_new(&path_hash_ops));
 
         assert_se(hashmap_put(h, "foo", INT_TO_PTR(1)) >= 0);
@@ -1037,12 +973,10 @@
         assert_se(hashmap_get(h, "foo././//ba.r////.quux///.//.") == INT_TO_PTR(9));
 }
 
-static void test_string_strv_hashmap(void) {
+TEST(string_strv_hashmap) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         char **s;
 
-        log_info("/* %s */", __func__);
-
         assert_se(string_strv_hashmap_put(&m, "foo", "bar") == 1);
         assert_se(string_strv_hashmap_put(&m, "foo", "bar") == 0);
         assert_se(string_strv_hashmap_put(&m, "foo", "BAR") == 1);
@@ -1064,40 +998,8 @@
         assert_se(strv_equal(s, STRV_MAKE("bar", "BAR")));
 }
 
-void test_hashmap_funcs(void) {
-        log_info("/************ %s ************/", __func__);
-
-        test_hashmap_copy();
-        test_hashmap_get_strv();
-        test_hashmap_move_one();
-        test_hashmap_move();
-        test_hashmap_replace();
-        test_hashmap_update();
-        test_hashmap_put();
-        test_hashmap_remove();
-        test_hashmap_remove2();
-        test_hashmap_remove_value();
-        test_hashmap_remove_and_put();
-        test_hashmap_remove_and_replace();
-        test_hashmap_ensure_allocated();
-        test_hashmap_foreach();
-        test_hashmap_foreach_key();
-        test_hashmap_contains();
-        test_hashmap_merge();
-        test_hashmap_isempty();
-        test_hashmap_get();
-        test_hashmap_get2();
-        test_hashmap_size();
-        test_hashmap_many();
-        test_hashmap_free();
-        test_hashmap_free_with_destructor();
-        test_hashmap_first();
-        test_hashmap_first_key();
-        test_hashmap_steal_first_key();
-        test_hashmap_steal_first();
-        test_hashmap_clear_free_free();
-        test_hashmap_clear_free_with_destructor();
-        test_hashmap_reserve();
-        test_path_hashmap();
-        test_string_strv_hashmap();
+/* Signal to test-hashmap.c that tests from this compilation unit were run. */
+extern int n_extern_tests_run;
+TEST(ensure_extern_hashmap_tests) {
+        n_extern_tests_run++;
 }
diff --git a/src/test/test-hashmap.c b/src/test/test-hashmap.c
index 20bc97c..5daa0e6 100644
--- a/src/test/test-hashmap.c
+++ b/src/test/test-hashmap.c
@@ -2,7 +2,7 @@
 
 #include "hashmap.h"
 #include "string-util.h"
-#include "util.h"
+#include "tests.h"
 
 unsigned custom_counter = 0;
 static void custom_destruct(void* p) {
@@ -13,15 +13,10 @@
 DEFINE_HASH_OPS_FULL(boring_hash_ops, char, string_hash_func, string_compare_func, free, char, free);
 DEFINE_HASH_OPS_FULL(custom_hash_ops, char, string_hash_func, string_compare_func, custom_destruct, char, custom_destruct);
 
-void test_hashmap_funcs(void);
-void test_ordered_hashmap_funcs(void);
-
-static void test_ordered_hashmap_next(void) {
+TEST(ordered_hashmap_next) {
         _cleanup_ordered_hashmap_free_ OrderedHashmap *m = NULL;
         int i;
 
-        log_info("/* %s */", __func__);
-
         assert_se(m = ordered_hashmap_new(NULL));
         for (i = -2; i <= 2; i++)
                 assert_se(ordered_hashmap_put(m, INT_TO_PTR(i), INT_TO_PTR(i+10)) == 1);
@@ -32,7 +27,7 @@
         assert_se(!ordered_hashmap_next(m, INT_TO_PTR(3)));
 }
 
-static void test_uint64_compare_func(void) {
+TEST(uint64_compare_func) {
         const uint64_t a = 0x100, b = 0x101;
 
         assert_se(uint64_compare_func(&a, &a) == 0);
@@ -40,13 +35,13 @@
         assert_se(uint64_compare_func(&b, &a) == 1);
 }
 
-static void test_trivial_compare_func(void) {
+TEST(trivial_compare_func) {
         assert_se(trivial_compare_func(INT_TO_PTR('a'), INT_TO_PTR('a')) == 0);
         assert_se(trivial_compare_func(INT_TO_PTR('a'), INT_TO_PTR('b')) == -1);
         assert_se(trivial_compare_func(INT_TO_PTR('b'), INT_TO_PTR('a')) == 1);
 }
 
-static void test_string_compare_func(void) {
+TEST(string_compare_func) {
         assert_se(string_compare_func("fred", "wilma") != 0);
         assert_se(string_compare_func("fred", "fred") == 0);
 }
@@ -71,12 +66,10 @@
         assert_se(idx == num);
 }
 
-static void test_iterated_cache(void) {
+TEST(iterated_cache) {
         Hashmap *m;
         IteratedCache *c;
 
-        log_info("/* %s */", __func__);
-
         assert_se(m = hashmap_new(NULL));
         assert_se(c = hashmap_iterated_cache_new(m));
         compare_cache(m, c);
@@ -109,15 +102,13 @@
         assert_se(iterated_cache_free(c) == NULL);
 }
 
-static void test_hashmap_put_strdup(void) {
+TEST(hashmap_put_strdup) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         char *s;
 
         /* We don't have ordered_hashmap_put_strdup() yet. If it is added,
          * these tests should be moved to test-hashmap-plain.c. */
 
-        log_info("/* %s */", __func__);
-
         assert_se(hashmap_put_strdup(&m, "foo", "bar") == 1);
         assert_se(hashmap_put_strdup(&m, "foo", "bar") == 0);
         assert_se(hashmap_put_strdup(&m, "foo", "BAR") == -EEXIST);
@@ -137,12 +128,10 @@
         assert_se(streq(s, "bar"));
 }
 
-static void test_hashmap_put_strdup_null(void) {
+TEST(hashmap_put_strdup_null) {
         _cleanup_hashmap_free_ Hashmap *m = NULL;
         char *s;
 
-        log_info("/* %s */", __func__);
-
         assert_se(hashmap_put_strdup(&m, "foo", "bar") == 1);
         assert_se(hashmap_put_strdup(&m, "foo", "bar") == 0);
         assert_se(hashmap_put_strdup(&m, "foo", NULL) == -EEXIST);
@@ -161,26 +150,22 @@
         assert_se(s == NULL);
 }
 
-int main(int argc, const char *argv[]) {
-        /* This file tests in test-hashmap-plain.c, and tests in test-hashmap-ordered.c, which is generated
-         * from test-hashmap-plain.c. Hashmap tests should be added to test-hashmap-plain.c, and here only if
-         * they don't apply to ordered hashmaps. */
+/* This file tests in test-hashmap-plain.c, and tests in test-hashmap-ordered.c, which is generated
+ * from test-hashmap-plain.c. Hashmap tests should be added to test-hashmap-plain.c, and here only if
+ * they don't apply to ordered hashmaps. */
 
-        log_parse_environment();
-        log_open();
+/* This variable allows us to assert that the tests from different compilation units were actually run. */
+int n_extern_tests_run = 0;
 
-        test_hashmap_funcs();
-        test_ordered_hashmap_funcs();
-
-        log_info("/************ non-shared tests ************/");
-
-        test_ordered_hashmap_next();
-        test_uint64_compare_func();
-        test_trivial_compare_func();
-        test_string_compare_func();
-        test_iterated_cache();
-        test_hashmap_put_strdup();
-        test_hashmap_put_strdup_null();
-
-        return 0;
+static int intro(void) {
+        assert_se(n_extern_tests_run == 0);
+        return EXIT_SUCCESS;
 }
+
+static int outro(void) {
+        /* Ensure hashmap and ordered_hashmap were tested. */
+        assert_se(n_extern_tests_run == 2);
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_FULL(LOG_INFO, intro, outro);
diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c
index c9d318b..9d71db6 100644
--- a/src/test/test-hexdecoct.c
+++ b/src/test/test-hexdecoct.c
@@ -5,27 +5,29 @@
 #include "alloc-util.h"
 #include "hexdecoct.h"
 #include "macro.h"
+#include "random-util.h"
 #include "string-util.h"
+#include "tests.h"
 
-static void test_hexchar(void) {
+TEST(hexchar) {
         assert_se(hexchar(0xa) == 'a');
         assert_se(hexchar(0x0) == '0');
 }
 
-static void test_unhexchar(void) {
+TEST(unhexchar) {
         assert_se(unhexchar('a') == 0xA);
         assert_se(unhexchar('A') == 0xA);
         assert_se(unhexchar('0') == 0x0);
 }
 
-static void test_base32hexchar(void) {
+TEST(base32hexchar) {
         assert_se(base32hexchar(0) == '0');
         assert_se(base32hexchar(9) == '9');
         assert_se(base32hexchar(10) == 'A');
         assert_se(base32hexchar(31) == 'V');
 }
 
-static void test_unbase32hexchar(void) {
+TEST(unbase32hexchar) {
         assert_se(unbase32hexchar('0') == 0);
         assert_se(unbase32hexchar('9') == 9);
         assert_se(unbase32hexchar('A') == 10);
@@ -33,13 +35,13 @@
         assert_se(unbase32hexchar('=') == -EINVAL);
 }
 
-static void test_base64char(void) {
+TEST(base64char) {
         assert_se(base64char(0) == 'A');
         assert_se(base64char(26) == 'a');
         assert_se(base64char(63) == '/');
 }
 
-static void test_unbase64char(void) {
+TEST(unbase64char) {
         assert_se(unbase64char('A') == 0);
         assert_se(unbase64char('Z') == 25);
         assert_se(unbase64char('a') == 26);
@@ -51,26 +53,45 @@
         assert_se(unbase64char('=') == -EINVAL);
 }
 
-static void test_octchar(void) {
+TEST(octchar) {
         assert_se(octchar(00) == '0');
         assert_se(octchar(07) == '7');
 }
 
-static void test_unoctchar(void) {
+TEST(unoctchar) {
         assert_se(unoctchar('0') == 00);
         assert_se(unoctchar('7') == 07);
 }
 
-static void test_decchar(void) {
+TEST(decchar) {
         assert_se(decchar(0) == '0');
         assert_se(decchar(9) == '9');
 }
 
-static void test_undecchar(void) {
+TEST(undecchar) {
         assert_se(undecchar('0') == 0);
         assert_se(undecchar('9') == 9);
 }
 
+static void test_hexmem_one(const char *in, const char *expected) {
+        _cleanup_free_ char *result = NULL;
+        _cleanup_free_ void *mem = NULL;
+        size_t len;
+
+        assert_se(result = hexmem(in, strlen_ptr(in)));
+        log_debug("hexmem(\"%s\") → \"%s\" (expected: \"%s\")", strnull(in), result, expected);
+        assert_se(streq(result, expected));
+
+        assert_se(unhexmem(result, SIZE_MAX, &mem, &len) >= 0);
+        assert_se(memcmp_safe(mem, in, len) == 0);
+}
+
+TEST(hexmem) {
+        test_hexmem_one(NULL, "");
+        test_hexmem_one("", "");
+        test_hexmem_one("foo", "666f6f");
+}
+
 static void test_unhexmem_one(const char *s, size_t l, int retval) {
         _cleanup_free_ char *hex = NULL;
         _cleanup_free_ void *mem = NULL;
@@ -84,12 +105,12 @@
                         l = strlen(s);
 
                 assert_se(hex = hexmem(mem, len));
-                answer = strndupa(strempty(s), l);
+                answer = strndupa_safe(strempty(s), l);
                 assert_se(streq(delete_chars(answer, WHITESPACE), hex));
         }
 }
 
-static void test_unhexmem(void) {
+TEST(unhexmem) {
         const char *hex = "efa2149213";
         const char *hex_space = "  e f   a\n 2\r  14\n\r\t9\t2 \n1\r3 \r\r\t";
         const char *hex_invalid = "efa214921o";
@@ -108,7 +129,7 @@
 }
 
 /* https://tools.ietf.org/html/rfc4648#section-10 */
-static void test_base32hexmem(void) {
+TEST(base32hexmem) {
         char *b32;
 
         b32 = base32hexmem("", STRLEN(""), true);
@@ -190,12 +211,12 @@
         if (retval == 0) {
                 char *str;
 
-                str = strndupa(mem, len);
+                str = strndupa_safe(mem, len);
                 assert_se(streq(str, ans));
         }
 }
 
-static void test_unbase32hexmem(void) {
+TEST(unbase32hexmem) {
         test_unbase32hexmem_one("", true, 0, "");
 
         test_unbase32hexmem_one("CO======", true, 0, "f");
@@ -243,7 +264,7 @@
 }
 
 /* https://tools.ietf.org/html/rfc4648#section-10 */
-static void test_base64mem(void) {
+TEST(base64mem) {
         char *b64;
 
         assert_se(base64mem("", STRLEN(""), &b64) == 0);
@@ -275,12 +296,174 @@
         free(b64);
 }
 
+TEST(base64mem_linebreak) {
+        uint8_t data[4096];
+
+        for (size_t i = 0; i < 20; i++) {
+                _cleanup_free_ char *encoded = NULL;
+                _cleanup_free_ void *decoded = NULL;
+                size_t decoded_size;
+                uint64_t n, m;
+                ssize_t l;
+
+                /* Try a bunch of differently sized blobs */
+                n = random_u64_range(sizeof(data));
+                random_bytes(data, n);
+
+                /* Break at various different columns */
+                m = 1 + random_u64_range(n + 5);
+
+                l = base64mem_full(data, n, m, &encoded);
+                assert_se(l >= 0);
+                assert_se(encoded);
+                assert_se((size_t) l == strlen(encoded));
+
+                assert_se(unbase64mem(encoded, SIZE_MAX, &decoded, &decoded_size) >= 0);
+                assert_se(decoded_size == n);
+                assert_se(memcmp(data, decoded, n) == 0);
+
+                /* Also try in secure mode */
+                decoded = mfree(decoded);
+                decoded_size = 0;
+                assert_se(unbase64mem_full(encoded, SIZE_MAX, /* secure= */ true, &decoded, &decoded_size) >= 0);
+                assert_se(decoded_size == n);
+                assert_se(memcmp(data, decoded, n) == 0);
+
+                for (size_t j = 0; j < (size_t) l; j++)
+                        assert_se((encoded[j] == '\n') == (j % (m + 1) == m));
+        }
+}
+
+static void test_base64_append_one(char **buf, size_t *len, const char *in, const char *expected) {
+        ssize_t new_len;
+
+        new_len = base64_append(buf, *len, in, strlen_ptr(in), 8, 12);
+        assert_se(new_len >= 0);
+        log_debug("base64_append_one(\"%s\")\nresult:\n%s\nexpected:\n%s", in, strnull(*buf), strnull(expected));
+        assert_se((size_t) new_len == strlen_ptr(*buf));
+        assert_se(streq_ptr(*buf, expected));
+        *len = new_len;
+}
+
+TEST(base64_append) {
+        _cleanup_free_ char *buf = NULL;
+        size_t len = 0;
+
+        test_base64_append_one(&buf, &len, "", NULL);
+        test_base64_append_one(&buf, &len, "f",
+                               "Zg==");
+        test_base64_append_one(&buf, &len, "fo",
+                               "Zg== Zm8=");
+        test_base64_append_one(&buf, &len, "foo",
+                               "Zg== Zm8=\n"
+                               "        Zm9v");
+        test_base64_append_one(&buf, &len, "foob",
+                               "Zg== Zm8=\n"
+                               "        Zm9v\n"
+                               "        Zm9v\n"
+                               "        Yg==");
+        test_base64_append_one(&buf, &len, "fooba",
+                               "Zg== Zm8=\n"
+                               "        Zm9v\n"
+                               "        Zm9v\n"
+                               "        Yg==\n"
+                               "        Zm9v\n"
+                               "        YmE=");
+        test_base64_append_one(&buf, &len, "foobar",
+                               "Zg== Zm8=\n"
+                               "        Zm9v\n"
+                               "        Zm9v\n"
+                               "        Yg==\n"
+                               "        Zm9v\n"
+                               "        YmE=\n"
+                               "        Zm9v\n"
+                               "        YmFy");
+
+        assert_se(free_and_strdup(&buf, "hogehogehogehoge") >= 0);
+        len = strlen(buf);
+
+        test_base64_append_one(&buf, &len, "",
+                               "hogehogehogehoge");
+        test_base64_append_one(&buf, &len, "f",
+                               "hogehogehogehoge\n"
+                               "        Zg==");
+        test_base64_append_one(&buf, &len, "fo",
+                               "hogehogehogehoge\n"
+                               "        Zg==\n"
+                               "        Zm8=");
+        test_base64_append_one(&buf, &len, "foo",
+                               "hogehogehogehoge\n"
+                               "        Zg==\n"
+                               "        Zm8=\n"
+                               "        Zm9v");
+        test_base64_append_one(&buf, &len, "foob",
+                               "hogehogehogehoge\n"
+                               "        Zg==\n"
+                               "        Zm8=\n"
+                               "        Zm9v\n"
+                               "        Zm9v\n"
+                               "        Yg==");
+        test_base64_append_one(&buf, &len, "fooba",
+                               "hogehogehogehoge\n"
+                               "        Zg==\n"
+                               "        Zm8=\n"
+                               "        Zm9v\n"
+                               "        Zm9v\n"
+                               "        Yg==\n"
+                               "        Zm9v\n"
+                               "        YmE=");
+        test_base64_append_one(&buf, &len, "foobar",
+                               "hogehogehogehoge\n"
+                               "        Zg==\n"
+                               "        Zm8=\n"
+                               "        Zm9v\n"
+                               "        Zm9v\n"
+                               "        Yg==\n"
+                               "        Zm9v\n"
+                               "        YmE=\n"
+                               "        Zm9v\n"
+                               "        YmFy");
+
+        assert_se(free_and_strdup(&buf, "hogehogehogehoge") >= 0);
+        len = strlen(buf);
+
+        test_base64_append_one(&buf, &len, "foobarfoobarfoobarfoobar",
+                               "hogehogehogehoge\n"
+                               "        Zm9v\n"
+                               "        YmFy\n"
+                               "        Zm9v\n"
+                               "        YmFy\n"
+                               "        Zm9v\n"
+                               "        YmFy\n"
+                               "        Zm9v\n"
+                               "        YmFy");
+
+        assert_se(free_and_strdup(&buf, "aaa") >= 0);
+        len = strlen(buf);
+
+        test_base64_append_one(&buf, &len, "foobarfoobarfoobarfoobar",
+                               "aaa Zm9vYmFy\n"
+                               "    Zm9vYmFy\n"
+                               "    Zm9vYmFy\n"
+                               "    Zm9vYmFy");
+}
+
 static void test_unbase64mem_one(const char *input, const char *output, int ret) {
         _cleanup_free_ void *buffer = NULL;
         size_t size = 0;
 
         assert_se(unbase64mem(input, SIZE_MAX, &buffer, &size) == ret);
+        if (ret >= 0) {
+                assert_se(size == strlen(output));
+                assert_se(memcmp(buffer, output, size) == 0);
+                assert_se(((char*) buffer)[size] == 0);
+        }
 
+        /* also try in secure mode */
+        buffer = mfree(buffer);
+        size = 0;
+
+        assert_se(unbase64mem_full(input, SIZE_MAX, /* secure=*/ true, &buffer, &size) == ret);
         if (ret >= 0) {
                 assert_se(size == strlen(output));
                 assert_se(memcmp(buffer, output, size) == 0);
@@ -288,7 +471,7 @@
         }
 }
 
-static void test_unbase64mem(void) {
+TEST(unbase64mem) {
 
         test_unbase64mem_one("", "", 0);
         test_unbase64mem_one("Zg==", "f", 0);
@@ -314,7 +497,7 @@
         test_unbase64mem_one(" Z m 8 = q u u x ", NULL, -ENAMETOOLONG);
 }
 
-static void test_hexdump(void) {
+TEST(hexdump) {
         uint8_t data[146];
         unsigned i;
 
@@ -333,23 +516,4 @@
         hexdump(stdout, data, sizeof(data));
 }
 
-int main(int argc, char *argv[]) {
-        test_hexchar();
-        test_unhexchar();
-        test_base32hexchar();
-        test_unbase32hexchar();
-        test_base64char();
-        test_unbase64char();
-        test_octchar();
-        test_unoctchar();
-        test_decchar();
-        test_undecchar();
-        test_unhexmem();
-        test_base32hexmem();
-        test_unbase32hexmem();
-        test_base64mem();
-        test_unbase64mem();
-        test_hexdump();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-hmac.c b/src/test/test-hmac.c
new file mode 100644
index 0000000..1b788b1
--- /dev/null
+++ b/src/test/test-hmac.c
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "hexdecoct.h"
+#include "hmac.h"
+#include "string-util.h"
+#include "tests.h"
+
+static void hmac_sha256_by_string(const char *key, const char *value, uint8_t res[static SHA256_DIGEST_SIZE]) {
+        hmac_sha256(key, strlen(key), value, strlen(value), res);
+}
+
+TEST(hmac) {
+        uint8_t result[SHA256_DIGEST_SIZE];
+        char *hex_result = NULL;
+
+        /* Results compared with output of 'echo -n "<input>" | openssl dgst -sha256 -hmac "<key>"' */
+
+        hmac_sha256_by_string("waldo",
+                              "",
+                              result);
+        hex_result = hexmem(result, sizeof(result));
+        assert_se(streq_ptr(hex_result, "cadd5e42114351181f3abff477641d88efb57d2b5641a1e5c6d623363a6d3bad"));
+        hex_result = mfree(hex_result);
+
+        hmac_sha256_by_string("waldo",
+                              "baldohaldo",
+                              result);
+        hex_result = hexmem(result, sizeof(result));
+        assert_se(streq_ptr(hex_result, "c47ad5031ba21605e52c6ca68090d66a2dd5ccf84efa4bace15361a8cba63cda"));
+        hex_result = mfree(hex_result);
+
+        hmac_sha256_by_string("waldo",
+                              "baldo haldo",
+                              result);
+        hex_result = hexmem(result, sizeof(result));
+        assert_se(streq_ptr(hex_result, "4e8974ad6c08b98cc2519cd1e27aa7195769fcf86db1dd7ceaab4d44c490ad69"));
+        hex_result = mfree(hex_result);
+
+        hmac_sha256_by_string("waldo",
+                              "baldo 4e8974ad6c08b98cc2519cd1e27aa7195769fcf86db1dd7ceaab4d44c490ad69 haldo",
+                              result);
+        hex_result = hexmem(result, sizeof(result));
+        assert_se(streq_ptr(hex_result, "039f3df430b19753ffb493e5b90708f75c5210b63c6bcbef3374eb3f0a3f97f7"));
+        hex_result = mfree(hex_result);
+
+        hmac_sha256_by_string("4e8974ad6c08b98cc2519cd1e27aa7195769fcf86db1dd7ceaab4d44c490ad69",
+                              "baldo haldo",
+                              result);
+        hex_result = hexmem(result, sizeof(result));
+        assert_se(streq_ptr(hex_result, "c4cfaf48077cbb0bbd177a09e59ec4c248f4ca771503410f5b54b98d88d2f47b"));
+        hex_result = mfree(hex_result);
+
+        hmac_sha256_by_string("4e8974ad6c08b98cc2519cd1e27aa7195769fcf86db1dd7ceaab4d44c490ad69",
+                              "supercalifragilisticexpialidocious",
+                              result);
+        hex_result = hexmem(result, sizeof(result));
+        assert_se(streq_ptr(hex_result, "2c059e7a63c4c3b23f47966a65fd2f8a2f5d7161e2e90d78ff68866b5c375cb7"));
+        hex_result = mfree(hex_result);
+
+        hmac_sha256_by_string("4e8974ad6c08b98cc2519cd1e27aa7195769fcf86db1dd7ceaab4d44c490ad69c47ad5031ba21605e52c6ca68090d66a2dd5ccf84efa4bace15361a8cba63cda",
+                              "supercalifragilisticexpialidocious",
+                              result);
+        hex_result = hexmem(result, sizeof(result));
+        assert_se(streq_ptr(hex_result, "1dd1d1d45b9d9f9673dc9983c968c46ff3168e03cfeb4156a219eba1af4cff5f"));
+        hex_result = mfree(hex_result);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-hostname-setup.c b/src/test/test-hostname-setup.c
index 5599650..241b197 100644
--- a/src/test/test-hostname-setup.c
+++ b/src/test/test-hostname-setup.c
@@ -9,13 +9,13 @@
 #include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_read_etc_hostname(void) {
+TEST(read_etc_hostname) {
         char path[] = "/tmp/hostname.XXXXXX";
         char *hostname;
         int fd;
 
         fd = mkostemp_safe(path);
-        assert(fd > 0);
+        assert_se(fd > 0);
         close(fd);
 
         /* simple hostname */
@@ -58,15 +58,8 @@
         unlink(path);
 }
 
-static void test_hostname_setup(void) {
+TEST(hostname_setup) {
         hostname_setup(false);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_read_etc_hostname();
-        test_hostname_setup();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-hostname-util.c b/src/test/test-hostname-util.c
index 6d62958..77e9a19 100644
--- a/src/test/test-hostname-util.c
+++ b/src/test/test-hostname-util.c
@@ -9,9 +9,7 @@
 #include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_hostname_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(hostname_is_valid) {
         assert_se(hostname_is_valid("foobar", 0));
         assert_se(hostname_is_valid("foobar.com", 0));
         assert_se(!hostname_is_valid("foobar.com.", 0));
@@ -48,58 +46,54 @@
         assert_se(!hostname_is_valid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", VALID_HOSTNAME_TRAILING_DOT));
 }
 
-static void test_hostname_cleanup(void) {
+TEST(hostname_cleanup) {
         char *s;
 
-        log_info("/* %s */", __func__);
-
-        s = strdupa("foobar");
+        s = strdupa_safe("foobar");
         assert_se(streq(hostname_cleanup(s), "foobar"));
-        s = strdupa("foobar.com");
+        s = strdupa_safe("foobar.com");
         assert_se(streq(hostname_cleanup(s), "foobar.com"));
-        s = strdupa("foobar.com.");
+        s = strdupa_safe("foobar.com.");
         assert_se(streq(hostname_cleanup(s), "foobar.com"));
-        s = strdupa("foo-bar.-com-.");
+        s = strdupa_safe("foo-bar.-com-.");
         assert_se(streq(hostname_cleanup(s), "foo-bar.com"));
-        s = strdupa("foo-bar-.-com-.");
+        s = strdupa_safe("foo-bar-.-com-.");
         assert_se(streq(hostname_cleanup(s), "foo-bar--com"));
-        s = strdupa("--foo-bar.-com");
+        s = strdupa_safe("--foo-bar.-com");
         assert_se(streq(hostname_cleanup(s), "foo-bar.com"));
-        s = strdupa("fooBAR");
+        s = strdupa_safe("fooBAR");
         assert_se(streq(hostname_cleanup(s), "fooBAR"));
-        s = strdupa("fooBAR.com");
+        s = strdupa_safe("fooBAR.com");
         assert_se(streq(hostname_cleanup(s), "fooBAR.com"));
-        s = strdupa("fooBAR.");
+        s = strdupa_safe("fooBAR.");
         assert_se(streq(hostname_cleanup(s), "fooBAR"));
-        s = strdupa("fooBAR.com.");
+        s = strdupa_safe("fooBAR.com.");
         assert_se(streq(hostname_cleanup(s), "fooBAR.com"));
-        s = strdupa("fööbar");
+        s = strdupa_safe("fööbar");
         assert_se(streq(hostname_cleanup(s), "fbar"));
-        s = strdupa("");
+        s = strdupa_safe("");
         assert_se(isempty(hostname_cleanup(s)));
-        s = strdupa(".");
+        s = strdupa_safe(".");
         assert_se(isempty(hostname_cleanup(s)));
-        s = strdupa("..");
+        s = strdupa_safe("..");
         assert_se(isempty(hostname_cleanup(s)));
-        s = strdupa("foobar.");
+        s = strdupa_safe("foobar.");
         assert_se(streq(hostname_cleanup(s), "foobar"));
-        s = strdupa(".foobar");
+        s = strdupa_safe(".foobar");
         assert_se(streq(hostname_cleanup(s), "foobar"));
-        s = strdupa("foo..bar");
+        s = strdupa_safe("foo..bar");
         assert_se(streq(hostname_cleanup(s), "foo.bar"));
-        s = strdupa("foo.bar..");
+        s = strdupa_safe("foo.bar..");
         assert_se(streq(hostname_cleanup(s), "foo.bar"));
-        s = strdupa("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
+        s = strdupa_safe("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
         assert_se(streq(hostname_cleanup(s), "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
-        s = strdupa("xxxx........xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
+        s = strdupa_safe("xxxx........xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
         assert_se(streq(hostname_cleanup(s), "xxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
 }
 
-static void test_hostname_malloc(void) {
+TEST(hostname_malloc) {
         _cleanup_free_ char *h = NULL, *l = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(h = gethostname_malloc());
         log_info("hostname_malloc: \"%s\"", h);
 
@@ -107,9 +101,7 @@
         log_info("hostname_short_malloc: \"%s\"", l);
 }
 
-static void test_default_hostname(void) {
-        log_info("/* %s */", __func__);
-
+TEST(default_hostname) {
         if (!hostname_is_valid(FALLBACK_HOSTNAME, 0)) {
                 log_error("Configured fallback hostname \"%s\" is not valid.", FALLBACK_HOSTNAME);
                 exit(EXIT_FAILURE);
@@ -121,13 +113,4 @@
         assert_se(hostname_is_valid(n, 0));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_hostname_is_valid();
-        test_hostname_cleanup();
-        test_hostname_malloc();
-        test_default_hostname();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-id128.c b/src/test/test-id128.c
index a61b35b..0a97366 100644
--- a/src/test/test-id128.c
+++ b/src/test/test-id128.c
@@ -12,19 +12,18 @@
 #include "id128-util.h"
 #include "macro.h"
 #include "string-util.h"
+#include "tests.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 #define ID128_WALDI SD_ID128_MAKE(01, 02, 03, 04, 05, 06, 07, 08, 09, 0a, 0b, 0c, 0d, 0e, 0f, 10)
 #define STR_WALDI "0102030405060708090a0b0c0d0e0f10"
 #define UUID_WALDI "01020304-0506-0708-090a-0b0c0d0e0f10"
 
-int main(int argc, char *argv[]) {
+TEST(id128) {
         sd_id128_t id, id2;
-        char t[SD_ID128_STRING_MAX], q[ID128_UUID_STRING_MAX];
+        char t[SD_ID128_STRING_MAX], q[SD_ID128_UUID_STRING_MAX];
         _cleanup_free_ char *b = NULL;
-        _cleanup_close_ int fd = -1;
-        int r;
+        _cleanup_close_ int fd = -EBADF;
 
         assert_se(sd_id128_randomize(&id) == 0);
         printf("random: %s\n", sd_id128_to_string(id, t));
@@ -39,7 +38,7 @@
         assert_se(!sd_id128_in_set(id, ID128_WALDI));
         assert_se(!sd_id128_in_set(id, ID128_WALDI, ID128_WALDI));
 
-        if (sd_booted() > 0) {
+        if (sd_booted() > 0 && sd_id128_get_machine(NULL) >= 0) {
                 assert_se(sd_id128_get_machine(&id) == 0);
                 printf("machine: %s\n", sd_id128_to_string(id, t));
 
@@ -54,7 +53,7 @@
         printf("waldi2: %s\n", b);
         assert_se(streq(t, b));
 
-        printf("waldi3: %s\n", id128_to_uuid_string(ID128_WALDI, q));
+        printf("waldi3: %s\n", sd_id128_to_uuid_string(ID128_WALDI, q));
         assert_se(streq(q, UUID_WALDI));
 
         b = mfree(b);
@@ -87,17 +86,17 @@
 
         /* First, write as UUID */
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(id128_write_fd(fd, ID128_UUID, id, false) >= 0);
+        assert_se(id128_write_fd(fd, ID128_FORMAT_UUID, id) >= 0);
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_PLAIN, &id2) == -EINVAL);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_PLAIN, &id2) == -EUCLEAN);
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_UUID, &id2) >= 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_UUID, &id2) >= 0);
         assert_se(sd_id128_equal(id, id2));
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_ANY, &id2) >= 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_ANY, &id2) >= 0);
         assert_se(sd_id128_equal(id, id2));
 
         /* Second, write as plain */
@@ -105,17 +104,17 @@
         assert_se(ftruncate(fd, 0) >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(id128_write_fd(fd, ID128_PLAIN, id, false) >= 0);
+        assert_se(id128_write_fd(fd, ID128_FORMAT_PLAIN, id) >= 0);
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_UUID, &id2) == -EINVAL);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_UUID, &id2) == -EUCLEAN);
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_PLAIN, &id2) >= 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_PLAIN, &id2) >= 0);
         assert_se(sd_id128_equal(id, id2));
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_ANY, &id2) >= 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_ANY, &id2) >= 0);
         assert_se(sd_id128_equal(id, id2));
 
         /* Third, write plain without trailing newline */
@@ -126,36 +125,63 @@
         assert_se(write(fd, sd_id128_to_string(id, t), 32) == 32);
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_UUID, &id2) == -EINVAL);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_UUID, &id2) == -EUCLEAN);
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_PLAIN, &id2) >= 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_PLAIN, &id2) >= 0);
         assert_se(sd_id128_equal(id, id2));
 
-        /* Third, write UUID without trailing newline */
+        /* Fourth, write UUID without trailing newline */
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
         assert_se(ftruncate(fd, 0) >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(write(fd, id128_to_uuid_string(id, q), 36) == 36);
+        assert_se(write(fd, sd_id128_to_uuid_string(id, q), 36) == 36);
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_PLAIN, &id2) == -EINVAL);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_PLAIN, &id2) == -EUCLEAN);
 
         assert_se(lseek(fd, 0, SEEK_SET) == 0);
-        assert_se(id128_read_fd(fd, ID128_UUID, &id2) >= 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_UUID, &id2) >= 0);
         assert_se(sd_id128_equal(id, id2));
 
-        r = sd_id128_get_machine_app_specific(SD_ID128_MAKE(f0,3d,aa,eb,1c,33,4b,43,a7,32,17,29,44,bf,77,2e), &id);
-        if (r == -EOPNOTSUPP)
-                log_info("khash not supported on this kernel, skipping sd_id128_get_machine_app_specific() checks");
-        else {
-                assert_se(r >= 0);
+        /* Fifth, tests for "uninitialized" */
+        assert_se(lseek(fd, 0, SEEK_SET) == 0);
+        assert_se(ftruncate(fd, 0) >= 0);
+        assert_se(write(fd, "uninitialized", STRLEN("uninitialized")) == STRLEN("uninitialized"));
+        assert_se(lseek(fd, 0, SEEK_SET) == 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_ANY, NULL) == -ENOPKG);
+
+        assert_se(lseek(fd, 0, SEEK_SET) == 0);
+        assert_se(ftruncate(fd, 0) >= 0);
+        assert_se(write(fd, "uninitialized\n", STRLEN("uninitialized\n")) == STRLEN("uninitialized\n"));
+        assert_se(lseek(fd, 0, SEEK_SET) == 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_ANY, NULL) == -ENOPKG);
+
+        assert_se(lseek(fd, 0, SEEK_SET) == 0);
+        assert_se(ftruncate(fd, 0) >= 0);
+        assert_se(write(fd, "uninitialized\nfoo", STRLEN("uninitialized\nfoo")) == STRLEN("uninitialized\nfoo"));
+        assert_se(lseek(fd, 0, SEEK_SET) == 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_ANY, NULL) == -EUCLEAN);
+
+        assert_se(lseek(fd, 0, SEEK_SET) == 0);
+        assert_se(ftruncate(fd, 0) >= 0);
+        assert_se(write(fd, "uninit", STRLEN("uninit")) == STRLEN("uninit"));
+        assert_se(lseek(fd, 0, SEEK_SET) == 0);
+        assert_se(id128_read_fd(fd, ID128_FORMAT_ANY, NULL) == -EUCLEAN);
+
+        if (sd_booted() > 0 && sd_id128_get_machine(NULL) >= 0) {
+                assert_se(sd_id128_get_machine_app_specific(SD_ID128_MAKE(f0,3d,aa,eb,1c,33,4b,43,a7,32,17,29,44,bf,77,2e), &id) >= 0);
                 assert_se(sd_id128_get_machine_app_specific(SD_ID128_MAKE(f0,3d,aa,eb,1c,33,4b,43,a7,32,17,29,44,bf,77,2e), &id2) >= 0);
                 assert_se(sd_id128_equal(id, id2));
                 assert_se(sd_id128_get_machine_app_specific(SD_ID128_MAKE(51,df,0b,4b,c3,b0,4c,97,80,e2,99,b9,8c,a3,73,b8), &id2) >= 0);
                 assert_se(!sd_id128_equal(id, id2));
         }
+}
+
+TEST(sd_id128_get_invocation) {
+        sd_id128_t id;
+        int r;
 
         /* Query the invocation ID */
         r = sd_id128_get_invocation(&id);
@@ -163,6 +189,30 @@
                 log_warning_errno(r, "Failed to get invocation ID, ignoring: %m");
         else
                 log_info("Invocation ID: " SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(id));
-
-        return 0;
 }
+
+TEST(benchmark_sd_id128_get_machine_app_specific) {
+        unsigned iterations = slow_tests_enabled() ? 1000000 : 1000;
+        usec_t t, q;
+
+        if (sd_id128_get_machine(NULL) < 0)
+                return (void) log_tests_skipped("/etc/machine-id is not initialized");
+
+        log_info("/* %s (%u iterations) */", __func__, iterations);
+
+        sd_id128_t id = ID128_WALDI, id2;
+
+        t = now(CLOCK_MONOTONIC);
+
+        for (unsigned i = 0; i < iterations; i++) {
+                id.qwords[1] = i;
+
+                assert_se(sd_id128_get_machine_app_specific(id, &id2) >= 0);
+        }
+
+        q = now(CLOCK_MONOTONIC) - t;
+
+        log_info("%lf µs each\n", (double) q / iterations);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-import-util.c b/src/test/test-import-util.c
new file mode 100644
index 0000000..7930fe5
--- /dev/null
+++ b/src/test/test-import-util.c
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "import-util.h"
+#include "log.h"
+#include "string-util.h"
+#include "tests.h"
+
+static void test_import_url_last_component_one(const char *input, const char *output, int ret) {
+        _cleanup_free_ char *s = NULL;
+
+        assert_se(import_url_last_component(input, &s) == ret);
+        assert_se(streq_ptr(output, s));
+}
+
+TEST(import_url_last_component) {
+        test_import_url_last_component_one("https://foobar/waldo/quux", "quux", 0);
+        test_import_url_last_component_one("https://foobar/waldo/quux/", "quux", 0);
+        test_import_url_last_component_one("https://foobar/waldo/", "waldo", 0);
+        test_import_url_last_component_one("https://foobar/", NULL, -EADDRNOTAVAIL);
+        test_import_url_last_component_one("https://foobar", NULL, -EADDRNOTAVAIL);
+        test_import_url_last_component_one("https://foobar/waldo/quux?foo=bar", "quux", 0);
+        test_import_url_last_component_one("https://foobar/waldo/quux/?foo=bar", "quux", 0);
+        test_import_url_last_component_one("https://foobar/waldo/quux/?foo=bar#piep", "quux", 0);
+        test_import_url_last_component_one("https://foobar/waldo/quux/#piep", "quux", 0);
+        test_import_url_last_component_one("https://foobar/waldo/quux#piep", "quux", 0);
+        test_import_url_last_component_one("https://", NULL, -EINVAL);
+        test_import_url_last_component_one("", NULL, -EINVAL);
+        test_import_url_last_component_one(":", NULL, -EINVAL);
+        test_import_url_last_component_one(":/", NULL, -EINVAL);
+        test_import_url_last_component_one("x:/", NULL, -EINVAL);
+        test_import_url_last_component_one("x:y", NULL, -EADDRNOTAVAIL);
+        test_import_url_last_component_one("x:y/z", "z", 0);
+}
+
+static void test_import_url_change_suffix_one(const char *input, size_t n, const char *suffix, const char *output, int ret) {
+        _cleanup_free_ char *s = NULL;
+
+        assert_se(import_url_change_suffix(input, n, suffix, &s) == ret);
+        assert_se(streq_ptr(output, s));
+}
+
+TEST(import_url_change_suffix) {
+        test_import_url_change_suffix_one("https://foobar/waldo/quux", 1, "wuff", "https://foobar/waldo/wuff", 0);
+        test_import_url_change_suffix_one("https://foobar/waldo/quux/", 1, "wuff", "https://foobar/waldo/wuff", 0);
+        test_import_url_change_suffix_one("https://foobar/waldo/quux///?mief", 1, "wuff", "https://foobar/waldo/wuff", 0);
+        test_import_url_change_suffix_one("https://foobar/waldo/quux///?mief#opopo", 1, "wuff", "https://foobar/waldo/wuff", 0);
+        test_import_url_change_suffix_one("https://foobar/waldo/quux/quff", 2, "wuff", "https://foobar/waldo/wuff", 0);
+        test_import_url_change_suffix_one("https://foobar/waldo/quux/quff/", 2, "wuff", "https://foobar/waldo/wuff", 0);
+        test_import_url_change_suffix_one("https://foobar/waldo/quux/quff", 0, "wuff", "https://foobar/waldo/quux/quff/wuff", 0);
+        test_import_url_change_suffix_one("https://foobar/waldo/quux/quff?aa?bb##4", 0, "wuff", "https://foobar/waldo/quux/quff/wuff", 0);
+        test_import_url_change_suffix_one("https://", 0, "wuff", NULL, -EINVAL);
+        test_import_url_change_suffix_one("", 0, "wuff", NULL, -EINVAL);
+        test_import_url_change_suffix_one(":", 0, "wuff", NULL, -EINVAL);
+        test_import_url_change_suffix_one(":/", 0, "wuff", NULL, -EINVAL);
+        test_import_url_change_suffix_one("x:/", 0, "wuff", NULL, -EINVAL);
+        test_import_url_change_suffix_one("x:y", 0, "wuff", "x:y/wuff", 0);
+        test_import_url_change_suffix_one("x:y/z", 0, "wuff", "x:y/z/wuff", 0);
+        test_import_url_change_suffix_one("x:y/z/", 0, "wuff", "x:y/z/wuff", 0);
+        test_import_url_change_suffix_one("x:y/z/", 1, "wuff", "x:y/wuff", 0);
+        test_import_url_change_suffix_one("x:y/z/", 2, "wuff", "x:y/wuff", 0);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-in-addr-prefix-util.c b/src/test/test-in-addr-prefix-util.c
new file mode 100644
index 0000000..661ca8f
--- /dev/null
+++ b/src/test/test-in-addr-prefix-util.c
@@ -0,0 +1,121 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "in-addr-prefix-util.h"
+#include "tests.h"
+
+static void test_in_addr_prefix_to_string_one(int f, const char *addr, unsigned prefixlen) {
+        union in_addr_union ua;
+        assert_se(in_addr_from_string(f, addr, &ua) >= 0);
+
+        const char *r = IN_ADDR_PREFIX_TO_STRING(f, &ua, prefixlen);
+        assert_se(r);
+        printf("%s: %s/%u == %s\n", __func__, addr, prefixlen, r);
+        assert_se(startswith(r, addr));
+
+        assert_se(streq(r, IN_ADDR_PREFIX_TO_STRING(f, &ua, prefixlen)));
+        assert_se(streq(IN_ADDR_PREFIX_TO_STRING(f, &ua, prefixlen), r));
+}
+
+TEST(in_addr_to_string_prefix) {
+        test_in_addr_prefix_to_string_one(AF_INET, "192.168.0.1", 0);
+        test_in_addr_prefix_to_string_one(AF_INET, "192.168.0.1", 1);
+        test_in_addr_prefix_to_string_one(AF_INET, "192.168.0.1", 31);
+        test_in_addr_prefix_to_string_one(AF_INET, "192.168.0.1", 32);
+        test_in_addr_prefix_to_string_one(AF_INET, "192.168.0.1", 256);
+        test_in_addr_prefix_to_string_one(AF_INET, "10.11.12.13", UINT_MAX);
+        test_in_addr_prefix_to_string_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 0);
+        test_in_addr_prefix_to_string_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", UINT_MAX);
+        test_in_addr_prefix_to_string_one(AF_INET6, "::1", 11);
+        test_in_addr_prefix_to_string_one(AF_INET6, "fe80::", 33);
+}
+
+static void test_config_parse_in_addr_prefixes_one(int family, const union in_addr_union *addr, uint8_t prefixlen, Set **prefixes) {
+        const char *str = IN_ADDR_PREFIX_TO_STRING(family, addr, prefixlen);
+        assert_se(str);
+
+        assert_se(config_parse_in_addr_prefixes("unit", "filename", 1, "Service", 1, "IPAddressAllow", 0, str, prefixes, NULL) >= 0);
+
+        assert_se(streq(str, IN_ADDR_PREFIX_TO_STRING(family, addr, prefixlen)));
+        assert_se(streq(IN_ADDR_PREFIX_TO_STRING(family, addr, prefixlen), str));
+}
+
+static void test_config_parse_in_addr_prefixes(Set **ret) {
+        _cleanup_set_free_ Set *prefixes = NULL;
+
+        log_info("/* %s() */", __func__);
+
+        for (uint32_t i = 0; i < 256; i++) {
+                /* ipv4 link-local address */
+                test_config_parse_in_addr_prefixes_one(AF_INET, &(union in_addr_union) {
+                                .in.s_addr = htobe32((UINT32_C(169) << 24) |
+                                                     (UINT32_C(254) << 16) |
+                                                     (i << 8)),
+                        }, 24, &prefixes);
+
+                /* ipv6 multicast address */
+                test_config_parse_in_addr_prefixes_one(AF_INET6, &(union in_addr_union) {
+                                .in6.s6_addr[0] = 0xff,
+                                .in6.s6_addr[1] = i,
+                        }, 16, &prefixes);
+
+                for (uint32_t j = 0; j < 256; j++) {
+                        test_config_parse_in_addr_prefixes_one(AF_INET, &(union in_addr_union) {
+                                        .in.s_addr = htobe32((UINT32_C(169) << 24) |
+                                                             (UINT32_C(254) << 16) |
+                                                             (i << 8) | j),
+                                }, 32, &prefixes);
+
+                        test_config_parse_in_addr_prefixes_one(AF_INET6, &(union in_addr_union) {
+                                        .in6.s6_addr[0] = 0xff,
+                                        .in6.s6_addr[1] = i,
+                                        .in6.s6_addr[2] = j,
+                                }, 24, &prefixes);
+                }
+        }
+
+        *ret = TAKE_PTR(prefixes);
+}
+
+static void test_in_addr_prefixes_reduce(Set *prefixes) {
+        log_info("/* %s() */", __func__);
+
+        assert_se(set_size(prefixes) == 2 * 256 * 257);
+        assert_se(!in_addr_prefixes_is_any(prefixes));
+
+        assert_se(in_addr_prefixes_reduce(prefixes) >= 0);
+        assert_se(set_size(prefixes) == 2 * 256);
+        assert_se(!in_addr_prefixes_is_any(prefixes));
+
+        assert_se(config_parse_in_addr_prefixes("unit", "filename", 1, "Service", 1, "IPAddressAllow", 0, "link-local", &prefixes, NULL) == 0);
+        assert_se(set_size(prefixes) == 2 * 256 + 2);
+        assert_se(!in_addr_prefixes_is_any(prefixes));
+
+        assert_se(in_addr_prefixes_reduce(prefixes) >= 0);
+        assert_se(set_size(prefixes) == 256 + 2);
+        assert_se(!in_addr_prefixes_is_any(prefixes));
+
+        assert_se(config_parse_in_addr_prefixes("unit", "filename", 1, "Service", 1, "IPAddressAllow", 0, "multicast", &prefixes, NULL) == 0);
+        assert_se(set_size(prefixes) == 256 + 4);
+        assert_se(!in_addr_prefixes_is_any(prefixes));
+
+        assert_se(in_addr_prefixes_reduce(prefixes) >= 0);
+        assert_se(set_size(prefixes) == 4);
+        assert_se(!in_addr_prefixes_is_any(prefixes));
+
+        assert_se(config_parse_in_addr_prefixes("unit", "filename", 1, "Service", 1, "IPAddressAllow", 0, "any", &prefixes, NULL) == 0);
+        assert_se(set_size(prefixes) == 6);
+        assert_se(in_addr_prefixes_is_any(prefixes));
+
+        assert_se(in_addr_prefixes_reduce(prefixes) >= 0);
+        assert_se(set_size(prefixes) == 2);
+        assert_se(in_addr_prefixes_is_any(prefixes));
+}
+
+TEST(in_addr_prefixes) {
+        _cleanup_set_free_ Set *prefixes = NULL;
+
+        test_config_parse_in_addr_prefixes(&prefixes);
+        test_in_addr_prefixes_reduce(prefixes);
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-in-addr-util.c b/src/test/test-in-addr-util.c
index 509ea7e..93ab1c5 100644
--- a/src/test/test-in-addr-util.c
+++ b/src/test/test-in-addr-util.c
@@ -3,9 +3,9 @@
 #include <fnmatch.h>
 #include <netinet/in.h>
 
-#include "log.h"
-#include "strv.h"
 #include "in-addr-util.h"
+#include "strv.h"
+#include "tests.h"
 
 static void test_in_addr_prefix_from_string_one(
                 const char *p,
@@ -14,9 +14,7 @@
                 const union in_addr_union *u,
                 unsigned char prefixlen,
                 int ret_refuse,
-                unsigned char prefixlen_refuse,
-                int ret_legacy,
-                unsigned char prefixlen_legacy) {
+                unsigned char prefixlen_refuse) {
 
         union in_addr_union q;
         unsigned char l;
@@ -46,79 +44,65 @@
                 assert_se(in_addr_equal(family, &q, u));
                 assert_se(l == prefixlen_refuse);
         }
-
-        r = in_addr_prefix_from_string_auto_internal(p, PREFIXLEN_LEGACY, &f, &q, &l);
-        assert_se(r == ret_legacy);
-
-        if (r >= 0) {
-                assert_se(f == family);
-                assert_se(in_addr_equal(family, &q, u));
-                assert_se(l == prefixlen_legacy);
-        }
 }
 
-static void test_in_addr_prefix_from_string(void) {
-        log_info("/* %s */", __func__);
+TEST(in_addr_prefix_from_string) {
+        test_in_addr_prefix_from_string_one("", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0);
+        test_in_addr_prefix_from_string_one("/", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0);
+        test_in_addr_prefix_from_string_one("/8", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0);
+        test_in_addr_prefix_from_string_one("1.2.3.4", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, -ENOANO, 0);
+        test_in_addr_prefix_from_string_one("1.2.3.4/0", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 0, 0, 0);
+        test_in_addr_prefix_from_string_one("1.2.3.4/1", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 1, 0, 1);
+        test_in_addr_prefix_from_string_one("1.2.3.4/2", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 2, 0, 2);
+        test_in_addr_prefix_from_string_one("1.2.3.4/32", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, 0, 32);
+        test_in_addr_prefix_from_string_one("1.2.3.4/33", AF_INET, -ERANGE, NULL, 0, -ERANGE, 0);
+        test_in_addr_prefix_from_string_one("1.2.3.4/-1", AF_INET, -ERANGE, NULL, 0, -ERANGE, 0);
+        test_in_addr_prefix_from_string_one("::1", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0);
 
-        test_in_addr_prefix_from_string_one("", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
-        test_in_addr_prefix_from_string_one("/", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
-        test_in_addr_prefix_from_string_one("/8", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
-        test_in_addr_prefix_from_string_one("1.2.3.4", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, -ENOANO, 0, 0, 8);
-        test_in_addr_prefix_from_string_one("1.2.3.4/0", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 0, 0, 0, 0, 0);
-        test_in_addr_prefix_from_string_one("1.2.3.4/1", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 1, 0, 1, 0, 1);
-        test_in_addr_prefix_from_string_one("1.2.3.4/2", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 2, 0, 2, 0, 2);
-        test_in_addr_prefix_from_string_one("1.2.3.4/32", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, 0, 32, 0, 32);
-        test_in_addr_prefix_from_string_one("1.2.3.4/33", AF_INET, -ERANGE, NULL, 0, -ERANGE, 0, -ERANGE, 0);
-        test_in_addr_prefix_from_string_one("1.2.3.4/-1", AF_INET, -ERANGE, NULL, 0, -ERANGE, 0, -ERANGE, 0);
-        test_in_addr_prefix_from_string_one("::1", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
-
-        test_in_addr_prefix_from_string_one("", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
-        test_in_addr_prefix_from_string_one("/", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
-        test_in_addr_prefix_from_string_one("/8", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
-        test_in_addr_prefix_from_string_one("::1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, -ENOANO, 0, 0, 0);
-        test_in_addr_prefix_from_string_one("::1/0", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0, 0, 0, 0, 0);
-        test_in_addr_prefix_from_string_one("::1/1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 1, 0, 1, 0, 1);
-        test_in_addr_prefix_from_string_one("::1/2", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 2, 0, 2, 0, 2);
-        test_in_addr_prefix_from_string_one("::1/32", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 32, 0, 32, 0, 32);
-        test_in_addr_prefix_from_string_one("::1/33", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 33, 0, 33, 0, 33);
-        test_in_addr_prefix_from_string_one("::1/64", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 64, 0, 64, 0, 64);
-        test_in_addr_prefix_from_string_one("::1/128", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, 0, 128, 0, 128);
-        test_in_addr_prefix_from_string_one("::1/129", AF_INET6, -ERANGE, NULL, 0, -ERANGE, 0, -ERANGE, 0);
-        test_in_addr_prefix_from_string_one("::1/-1", AF_INET6, -ERANGE, NULL, 0, -ERANGE, 0, -ERANGE, 0);
+        test_in_addr_prefix_from_string_one("", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0);
+        test_in_addr_prefix_from_string_one("/", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0);
+        test_in_addr_prefix_from_string_one("/8", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0);
+        test_in_addr_prefix_from_string_one("::1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, -ENOANO, 0);
+        test_in_addr_prefix_from_string_one("::1/0", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0, 0, 0);
+        test_in_addr_prefix_from_string_one("::1/1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 1, 0, 1);
+        test_in_addr_prefix_from_string_one("::1/2", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 2, 0, 2);
+        test_in_addr_prefix_from_string_one("::1/32", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 32, 0, 32);
+        test_in_addr_prefix_from_string_one("::1/33", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 33, 0, 33);
+        test_in_addr_prefix_from_string_one("::1/64", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 64, 0, 64);
+        test_in_addr_prefix_from_string_one("::1/128", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, 0, 128);
+        test_in_addr_prefix_from_string_one("::1/129", AF_INET6, -ERANGE, NULL, 0, -ERANGE, 0);
+        test_in_addr_prefix_from_string_one("::1/-1", AF_INET6, -ERANGE, NULL, 0, -ERANGE, 0);
 }
 
 static void test_in_addr_prefix_to_string_valid(int family, const char *p) {
-        _cleanup_free_ char *str = NULL;
         union in_addr_union u;
         unsigned char l;
 
         log_info("%s: %s", __func__, p);
 
         assert_se(in_addr_prefix_from_string(p, family, &u, &l) >= 0);
-        assert_se(in_addr_prefix_to_string(family, &u, l, &str) >= 0);
-        assert_se(streq(str, p));
+        assert_se(streq(p, IN_ADDR_PREFIX_TO_STRING(family, &u, l)));
 }
 
 static void test_in_addr_prefix_to_string_unoptimized(int family, const char *p) {
-        _cleanup_free_ char *str1 = NULL, *str2 = NULL;
         union in_addr_union u1, u2;
         unsigned char len1, len2;
 
         log_info("%s: %s", __func__, p);
 
         assert_se(in_addr_prefix_from_string(p, family, &u1, &len1) >= 0);
-        assert_se(in_addr_prefix_to_string(family, &u1, len1, &str1) >= 0);
+        const char *str1 = IN_ADDR_PREFIX_TO_STRING(family, &u1, len1);
+        assert_se(str1);
         assert_se(in_addr_prefix_from_string(str1, family, &u2, &len2) >= 0);
-        assert_se(in_addr_prefix_to_string(family, &u2, len2, &str2) >= 0);
+        const char *str2 = IN_ADDR_PREFIX_TO_STRING(family, &u2, len2);
+        assert_se(str2);
 
         assert_se(streq(str1, str2));
         assert_se(len1 == len2);
         assert_se(in_addr_equal(family, &u1, &u2) > 0);
 }
 
-static void test_in_addr_prefix_to_string(void) {
-        log_info("/* %s */", __func__);
-
+TEST(in_addr_prefix_to_string) {
         test_in_addr_prefix_to_string_valid(AF_INET, "0.0.0.0/32");
         test_in_addr_prefix_to_string_valid(AF_INET, "1.2.3.4/0");
         test_in_addr_prefix_to_string_valid(AF_INET, "1.2.3.4/24");
@@ -137,12 +121,10 @@
         test_in_addr_prefix_to_string_unoptimized(AF_INET6, "fd00:1111::0000:2222:3333:4444:0001/64");
 }
 
-static void test_in_addr_random_prefix(void) {
+TEST(in_addr_random_prefix) {
         _cleanup_free_ char *str = NULL;
         union in_addr_union a;
 
-        log_info("/* %s */", __func__);
-
         assert_se(in_addr_from_string(AF_INET, "192.168.10.1", &a) >= 0);
 
         assert_se(in_addr_random_prefix(AF_INET, &a, 31, 32) >= 0);
@@ -183,11 +165,9 @@
         str = mfree(str);
 }
 
-static void test_in_addr_is_null(void) {
+TEST(in_addr_is_null) {
         union in_addr_union i = {};
 
-        log_info("/* %s */", __func__);
-
         assert_se(in_addr_is_null(AF_INET, &i) == true);
         assert_se(in_addr_is_null(AF_INET6, &i) == true);
 
@@ -207,9 +187,7 @@
         assert_se(in_addr_prefix_intersect(f, &ua, apl, &ub, bpl) == result);
 }
 
-static void test_in_addr_prefix_intersect(void) {
-        log_info("/* %s */", __func__);
-
+TEST(in_addr_prefix_intersect) {
         test_in_addr_prefix_intersect_one(AF_INET, "255.255.255.255", 32, "255.255.255.254", 32, 0);
         test_in_addr_prefix_intersect_one(AF_INET, "255.255.255.255", 0, "255.255.255.255", 32, 1);
         test_in_addr_prefix_intersect_one(AF_INET, "0.0.0.0", 0, "47.11.8.15", 32, 1);
@@ -238,7 +216,7 @@
 static void test_in_addr_prefix_next_one(unsigned f, const char *before, unsigned pl, const char *after) {
         union in_addr_union ubefore, uafter, t;
 
-        log_info("/* %s(%s, prefixlen=%u) */", __func__, before, pl);
+        log_debug("/* %s(%s, prefixlen=%u) */", __func__, before, pl);
 
         assert_se(in_addr_from_string(f, before, &ubefore) >= 0);
 
@@ -251,7 +229,7 @@
         }
 }
 
-static void test_in_addr_prefix_next(void) {
+TEST(in_addr_prefix_next) {
         test_in_addr_prefix_next_one(AF_INET, "192.168.0.0", 24, "192.168.1.0");
         test_in_addr_prefix_next_one(AF_INET, "192.168.0.0", 16, "192.169.0.0");
         test_in_addr_prefix_next_one(AF_INET, "192.168.0.0", 20, "192.168.16.0");
@@ -276,7 +254,7 @@
 static void test_in_addr_prefix_nth_one(unsigned f, const char *before, unsigned pl, uint64_t nth, const char *after) {
         union in_addr_union ubefore, uafter, t;
 
-        log_info("/* %s(%s, prefixlen=%u, nth=%"PRIu64") */", __func__, before, pl, nth);
+        log_debug("/* %s(%s, prefixlen=%u, nth=%"PRIu64") */", __func__, before, pl, nth);
 
         assert_se(in_addr_from_string(f, before, &ubefore) >= 0);
 
@@ -289,7 +267,7 @@
         }
 }
 
-static void test_in_addr_prefix_nth(void) {
+TEST(in_addr_prefix_nth) {
         test_in_addr_prefix_nth_one(AF_INET, "192.168.0.0", 24, 0, "192.168.0.0");
         test_in_addr_prefix_nth_one(AF_INET, "192.168.0.123", 24, 0, "192.168.0.0");
         test_in_addr_prefix_nth_one(AF_INET, "192.168.0.123", 24, 1, "192.168.1.0");
@@ -323,7 +301,7 @@
 
         union in_addr_union a, s, e;
 
-        log_info("/* %s(%s, prefixlen=%u) */", __func__, in, prefixlen);
+        log_debug("/* %s(%s, prefixlen=%u) */", __func__, in, prefixlen);
 
         assert_se(in_addr_from_string(family, in, &a) >= 0);
         assert_se((in_addr_prefix_range(family, &a, prefixlen, &s, &e) >= 0) == !!expected_start);
@@ -342,7 +320,7 @@
         }
 }
 
-static void test_in_addr_prefix_range(void) {
+TEST(in_addr_prefix_range) {
         test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 24, "192.168.123.0", "192.168.124.0");
         test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 16, "192.168.0.0", "192.169.0.0");
 
@@ -357,17 +335,17 @@
 
 static void test_in_addr_to_string_one(int f, const char *addr) {
         union in_addr_union ua;
-        _cleanup_free_ char *r = NULL;
+        _cleanup_free_ char *r;
 
         assert_se(in_addr_from_string(f, addr, &ua) >= 0);
         assert_se(in_addr_to_string(f, &ua, &r) >= 0);
-        printf("test_in_addr_to_string_one: %s == %s\n", addr, r);
+        printf("%s: %s == %s\n", __func__, addr, r);
         assert_se(streq(addr, r));
+
+        assert_se(streq(r, IN_ADDR_TO_STRING(f, &ua)));
 }
 
-static void test_in_addr_to_string(void) {
-        log_info("/* %s */", __func__);
-
+TEST(in_addr_to_string) {
         test_in_addr_to_string_one(AF_INET, "192.168.0.1");
         test_in_addr_to_string_one(AF_INET, "10.11.12.13");
         test_in_addr_to_string_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
@@ -375,16 +353,56 @@
         test_in_addr_to_string_one(AF_INET6, "fe80::");
 }
 
-int main(int argc, char *argv[]) {
-        test_in_addr_prefix_from_string();
-        test_in_addr_random_prefix();
-        test_in_addr_prefix_to_string();
-        test_in_addr_is_null();
-        test_in_addr_prefix_intersect();
-        test_in_addr_prefix_next();
-        test_in_addr_prefix_nth();
-        test_in_addr_prefix_range();
-        test_in_addr_to_string();
+TEST(in_addr_prefixlen_to_netmask) {
+        union in_addr_union addr;
+        static const char *const ipv4_netmasks[] = {
+                "0.0.0.0", "128.0.0.0", "192.0.0.0", "224.0.0.0", "240.0.0.0",
+                "248.0.0.0", "252.0.0.0", "254.0.0.0", "255.0.0.0",
+                "255.128.0.0", "255.192.0.0", "255.224.0.0", "255.240.0.0",
+                "255.248.0.0", "255.252.0.0", "255.254.0.0", "255.255.0.0",
+                "255.255.128.0", "255.255.192.0", "255.255.224.0", "255.255.240.0",
+                "255.255.248.0", "255.255.252.0", "255.255.254.0", "255.255.255.0",
+                "255.255.255.128", "255.255.255.192", "255.255.255.224", "255.255.255.240",
+                "255.255.255.248", "255.255.255.252", "255.255.255.254", "255.255.255.255",
+        };
 
-        return 0;
+        static const char *const ipv6_netmasks[] = {
+                [0]   = "::",
+                [1]   = "8000::",
+                [2]   = "c000::",
+                [7]   = "fe00::",
+                [8]   = "ff00::",
+                [9]   = "ff80::",
+                [16]  = "ffff::",
+                [17]  = "ffff:8000::",
+                [32]  = "ffff:ffff::",
+                [33]  = "ffff:ffff:8000::",
+                [64]  = "ffff:ffff:ffff:ffff::",
+                [65]  = "ffff:ffff:ffff:ffff:8000::",
+                [96]  = "ffff:ffff:ffff:ffff:ffff:ffff::",
+                [97]  = "ffff:ffff:ffff:ffff:ffff:ffff:8000:0",
+                [127] = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe",
+                [128] = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
+        };
+
+        for (unsigned char prefixlen = 0; prefixlen <= 32; prefixlen++) {
+                _cleanup_free_ char *result = NULL;
+
+                assert_se(in_addr_prefixlen_to_netmask(AF_INET, &addr, prefixlen) >= 0);
+                assert_se(in_addr_to_string(AF_INET, &addr, &result) >= 0);
+                printf("test_in_addr_prefixlen_to_netmask: %s == %s\n", ipv4_netmasks[prefixlen], result);
+                assert_se(streq(ipv4_netmasks[prefixlen], result));
+        }
+
+        for (unsigned char prefixlen = 0; prefixlen <= 128; prefixlen++) {
+                _cleanup_free_ char *result = NULL;
+
+                assert_se(in_addr_prefixlen_to_netmask(AF_INET6, &addr, prefixlen) >= 0);
+                assert_se(in_addr_to_string(AF_INET6, &addr, &result) >= 0);
+                printf("test_in_addr_prefixlen_to_netmask: %s\n", result);
+                if (ipv6_netmasks[prefixlen])
+                        assert_se(streq(ipv6_netmasks[prefixlen], result));
+        }
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-install-file.c b/src/test/test-install-file.c
new file mode 100644
index 0000000..8206eb0
--- /dev/null
+++ b/src/test/test-install-file.c
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "fileio.h"
+#include "install-file.h"
+#include "path-util.h"
+#include "rm-rf.h"
+#include "tests.h"
+#include "tmpfile-util.h"
+#include "umask-util.h"
+
+TEST(install_file) {
+        _cleanup_(rm_rf_physical_and_freep) char *p = NULL;
+        _cleanup_free_ char *a = NULL, *b = NULL, *c = NULL;
+        struct stat stat1, stat2;
+
+        assert_se(mkdtemp_malloc(NULL, &p) >= 0);
+        assert_se(a = path_join(p, "foo"));
+        assert_se(b = path_join(p, "bar"));
+
+        WITH_UMASK(0077)
+                assert_se(write_string_file(a, "wups", WRITE_STRING_FILE_CREATE) >= 0);
+
+        assert_se(lstat(a, &stat1) >= 0);
+        assert_se(S_ISREG(stat1.st_mode));
+
+        assert_se(install_file(AT_FDCWD, a, AT_FDCWD, b, 0) >= 0);
+        assert_se(install_file(AT_FDCWD, b, AT_FDCWD, a, INSTALL_FSYNC) >= 0);
+
+        assert_se(write_string_file(b, "ttss", WRITE_STRING_FILE_CREATE) >= 0);
+        assert_se(install_file(AT_FDCWD, a, AT_FDCWD, b, INSTALL_FSYNC_FULL) == -EEXIST);
+        assert_se(install_file(AT_FDCWD, a, AT_FDCWD, b, INSTALL_FSYNC_FULL|INSTALL_REPLACE) >= 0);
+
+        assert_se(stat(b, &stat2) >= 0);
+        assert_se(stat1.st_dev == stat2.st_dev);
+        assert_se(stat1.st_ino == stat2.st_ino);
+        assert_se((stat2.st_mode & 0222) != 0); /* writable */
+
+        assert_se(install_file(AT_FDCWD, b, AT_FDCWD, a, INSTALL_FSYNC_FULL|INSTALL_REPLACE|INSTALL_READ_ONLY) >= 0);
+
+        assert_se(stat(a, &stat2) >= 0);
+        assert_se(stat1.st_dev == stat2.st_dev);
+        assert_se(stat1.st_ino == stat2.st_ino);
+        assert_se((stat2.st_mode & 0222) == 0); /* read-only */
+
+        assert_se(mkdir(b, 0755) >= 0);
+        assert_se(c = path_join(b, "dir"));
+        assert_se(mkdir(c, 0755) >= 0);
+        free(c);
+        assert_se(c = path_join(b, "reg"));
+        assert_se(mknod(c, S_IFREG|0755, 0) >= 0);
+        free(c);
+        assert_se(c = path_join(b, "fifo"));
+        assert_se(mknod(c, S_IFIFO|0755, 0) >= 0);
+
+        assert_se(install_file(AT_FDCWD, b, AT_FDCWD, a, INSTALL_FSYNC_FULL) == -EEXIST);
+        assert_se(install_file(AT_FDCWD, b, AT_FDCWD, a, INSTALL_FSYNC_FULL|INSTALL_REPLACE) == 0);
+
+        assert_se(write_string_file(b, "ttss", WRITE_STRING_FILE_CREATE) >= 0);
+
+        assert_se(install_file(AT_FDCWD, b, AT_FDCWD, a, INSTALL_FSYNC_FULL) == -EEXIST);
+        assert_se(install_file(AT_FDCWD, b, AT_FDCWD, a, INSTALL_FSYNC_FULL|INSTALL_REPLACE) == 0);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
index 50ed23a..2868ab0 100644
--- a/src/test/test-install-root.c
+++ b/src/test/test-install-root.c
@@ -11,162 +11,165 @@
 #include "special.h"
 #include "string-util.h"
 #include "tests.h"
+#include "tmpfile-util.h"
 
-static void test_basic_mask_and_enable(const char *root) {
+static char *root = NULL;
+
+STATIC_DESTRUCTOR_REGISTER(root, rm_rf_physical_and_freep);
+
+TEST(basic_mask_and_enable) {
         const char *p;
         UnitFileState state;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
 
-        test_setup_logging(LOG_DEBUG);
-
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", NULL) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", NULL) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", NULL) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", NULL) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", NULL) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/a.service");
         assert_se(write_string_file(p,
                                     "[Install]\n"
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", NULL) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", NULL) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, "/usr/lib/systemd/system/b.service");
         assert_se(symlink("a.service", p) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", NULL) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", NULL) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
         p = strjoina(root, "/usr/lib/systemd/system/c.service");
         assert_se(symlink("/usr/lib/systemd/system/a.service", p) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", NULL) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", NULL) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
         p = strjoina(root, "/usr/lib/systemd/system/d.service");
         assert_se(symlink("c.service", p) >= 0);
 
         /* This one is interesting, as d follows a relative, then an absolute symlink */
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", NULL) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", NULL) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
-        assert_se(unit_file_mask(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/dev/null"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
         assert_se(streq(changes[0].path, p));
 
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_MASKED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_MASKED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_MASKED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_MASKED);
 
         /* Enabling a masked unit should fail! */
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == -ERFKILL);
-        unit_file_changes_free(changes, n_changes);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == -ERFKILL);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_unmask(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
         /* Enabling it again should succeed but be a NOP */
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 0);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
         /* Disabling a disabled unit must succeed but be a NOP */
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 0);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
         /* Let's enable this indirectly via a symlink */
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
         /* Let's try to reenable */
 
-        assert_se(unit_file_reenable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
         assert_se(streq(changes[0].path, p));
-        assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[1].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[1].source, "/usr/lib/systemd/system/a.service"));
         assert_se(streq(changes[1].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
         /* Test masking with relative symlinks */
 
         p = strjoina(root, "/usr/lib/systemd/system/e.service");
         assert_se(symlink("../../../../../../dev/null", p) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
 
         assert_se(unlink(p) == 0);
         assert_se(symlink("/usr/../dev/null", p) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
 
         assert_se(unlink(p) == 0);
 
@@ -177,29 +180,29 @@
                                     "[Install]\n"
                                     "WantedBy=x.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", NULL) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", NULL) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/f.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/x.target.wants/f.service");
         assert_se(streq(changes[0].path, p));
-        assert_se(changes[1].type_or_errno == UNIT_FILE_DESTINATION_NOT_PRESENT);
+        assert_se(changes[1].type == INSTALL_CHANGE_DESTINATION_NOT_PRESENT);
         p = strjoina(root, "/usr/lib/systemd/system/f.service");
         assert_se(streq(changes[1].source, p));
         assert_se(streq(changes[1].path, "x.target"));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
 }
 
-static void test_linked_units(const char *root) {
+TEST(linked_units) {
         const char *p, *q;
         UnitFileState state;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0, i;
 
         /*
@@ -233,9 +236,9 @@
                                     "[Install]\n"
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked2.service", NULL) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked3.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked2.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked3.service", NULL) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/linked2.service");
         assert_se(symlink("/opt/linked2.service", p) >= 0);
@@ -243,40 +246,40 @@
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked3.service");
         assert_se(symlink("/opt/linked3.service", p) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked3.service", &state) >= 0 && state == UNIT_FILE_LINKED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked3.service", &state) >= 0 && state == UNIT_FILE_LINKED);
 
         /* First, let's link the unit into the search path */
-        assert_se(unit_file_link(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/opt/linked.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_LINKED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_LINKED);
 
         /* Let's unlink it from the search path again */
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
 
         /* Now, let's not just link it, but also enable it */
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 2);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
         for (i = 0 ; i < n_changes; i++) {
-                assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
+                assert_se(changes[i].type == INSTALL_CHANGE_SYMLINK);
                 assert_se(streq(changes[i].source, "/opt/linked.service"));
 
                 if (p && streq(changes[i].path, p))
@@ -284,41 +287,41 @@
                 else if (q && streq(changes[i].path, q))
                         q = NULL;
                 else
-                        assert_not_reached("wut?");
+                        assert_not_reached();
         }
-        assert(!p && !q);
-        unit_file_changes_free(changes, n_changes);
+        assert_se(!p && !q);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
 
         /* And let's unlink it again */
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 2);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
         for (i = 0; i < n_changes; i++) {
-                assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK);
+                assert_se(changes[i].type == INSTALL_CHANGE_UNLINK);
 
                 if (p && streq(changes[i].path, p))
                         p = NULL;
                 else if (q && streq(changes[i].path, q))
                         q = NULL;
                 else
-                        assert_not_reached("wut?");
+                        assert_not_reached();
         }
-        assert(!p && !q);
-        unit_file_changes_free(changes, n_changes);
+        assert_se(!p && !q);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked2.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked2.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 2);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked2.service");
         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service");
         for (i = 0 ; i < n_changes; i++) {
-                assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
+                assert_se(changes[i].type == INSTALL_CHANGE_SYMLINK);
                 assert_se(streq(changes[i].source, "/opt/linked2.service"));
 
                 if (p && streq(changes[i].path, p))
@@ -326,25 +329,25 @@
                 else if (q && streq(changes[i].path, q))
                         q = NULL;
                 else
-                        assert_not_reached("wut?");
+                        assert_not_reached();
         }
-        assert(!p && !q);
-        unit_file_changes_free(changes, n_changes);
+        assert_se(!p && !q);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(startswith(changes[0].path, root));
         assert_se(endswith(changes[0].path, "linked3.service"));
         assert_se(streq(changes[0].source, "/opt/linked3.service"));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 }
 
-static void test_default(const char *root) {
+TEST(default) {
         _cleanup_free_ char *def = NULL;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         const char *p;
 
@@ -354,32 +357,32 @@
         p = strjoina(root, "/usr/lib/systemd/system/test-default.target");
         assert_se(symlink("test-default-real.target", p) >= 0);
 
-        assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) == -ENOENT);
+        assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) == -ENOENT);
 
-        assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT);
+        assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == -ENOENT);
+        assert_se(changes[0].type == -ENOENT);
         assert_se(streq_ptr(changes[0].path, "idontexist.target"));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) == -ENOENT);
+        assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) == -ENOENT);
 
-        assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
+        assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/test-default-real.target"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR "/" SPECIAL_DEFAULT_TARGET);
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) >= 0);
+        assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) >= 0);
         assert_se(streq_ptr(def, "test-default-real.target"));
 }
 
-static void test_add_dependency(const char *root) {
-        UnitFileChange *changes = NULL;
+TEST(add_dependency) {
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         const char *p;
 
@@ -395,28 +398,28 @@
         p = strjoina(root, "/usr/lib/systemd/system/add-dependency-test-service.service");
         assert_se(symlink("real-add-dependency-test-service.service", p) >= 0);
 
-        assert_se(unit_file_add_dependency(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
+        assert_se(unit_file_add_dependency(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/real-add-dependency-test-service.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/real-add-dependency-test-target.target.wants/real-add-dependency-test-service.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 }
 
-static void test_template_enable(const char *root) {
-        UnitFileChange *changes = NULL;
+TEST(template_enable) {
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         UnitFileState state;
         const char *p;
 
         log_info("== %s ==", __func__);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/template@.service");
         assert_se(write_string_file(p,
@@ -427,107 +430,107 @@
         p = strjoina(root, "/usr/lib/systemd/system/template-symlink@.service");
         assert_se(symlink("template@.service", p) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         log_info("== %s with template@.service enabled ==", __func__);
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@def.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         log_info("== %s with template@foo.service enabled ==", __func__);
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
 
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         log_info("== %s with template-symlink@quux.service enabled ==", __func__);
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
 }
 
-static void test_indirect(const char *root) {
-        UnitFileChange *changes = NULL;
+TEST(indirect) {
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         UnitFileState state;
         const char *p;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/indirecta.service");
         assert_se(write_string_file(p,
@@ -542,34 +545,34 @@
         p = strjoina(root, "/usr/lib/systemd/system/indirectc.service");
         assert_se(symlink("indirecta.service", p) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/indirectb.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
 
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 }
 
-static void test_preset_and_list(const char *root) {
-        UnitFileChange *changes = NULL;
+TEST(preset_and_list) {
+        InstallChange *changes = NULL;
         size_t n_changes = 0, i;
         const char *p, *q;
         UnitFileState state;
@@ -577,8 +580,8 @@
         UnitFileList *fl;
         Hashmap *h;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/preset-yes.service");
         assert_se(write_string_file(p,
@@ -595,41 +598,41 @@
                                     "enable *-yes.*\n"
                                     "disable *\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/preset-yes.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-no.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-no.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
         assert_se(n_changes == 0);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_preset_all(UNIT_FILE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+        assert_se(unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
 
         assert_se(n_changes > 0);
 
@@ -637,27 +640,27 @@
 
         for (i = 0; i < n_changes; i++) {
 
-                if (changes[i].type_or_errno == UNIT_FILE_SYMLINK) {
+                if (changes[i].type == INSTALL_CHANGE_SYMLINK) {
                         assert_se(streq(changes[i].source, "/usr/lib/systemd/system/preset-yes.service"));
                         assert_se(streq(changes[i].path, p));
                 } else
-                        assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK);
+                        assert_se(changes[i].type == INSTALL_CHANGE_UNLINK);
         }
 
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         assert_se(h = hashmap_new(&string_hash_ops));
-        assert_se(unit_file_get_list(UNIT_FILE_SYSTEM, root, h, NULL, NULL) >= 0);
+        assert_se(unit_file_get_list(LOOKUP_SCOPE_SYSTEM, root, h, NULL, NULL) >= 0);
 
         p = strjoina(root, "/usr/lib/systemd/system/preset-yes.service");
         q = strjoina(root, "/usr/lib/systemd/system/preset-no.service");
 
         HASHMAP_FOREACH(fl, h) {
-                assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, basename(fl->path), &state) >= 0);
+                assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, basename(fl->path), &state) >= 0);
                 assert_se(fl->state == state);
 
                 if (streq(fl->path, p)) {
@@ -675,65 +678,62 @@
         assert_se(got_yes && got_no);
 }
 
-static void test_revert(const char *root) {
+TEST(revert) {
         const char *p;
         UnitFileState state;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
 
-        assert(root);
-
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", NULL) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "yy.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", NULL) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "yy.service", NULL) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/xx.service");
         assert_se(write_string_file(p, "# Empty\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", NULL) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", &state) >= 0 && state == UNIT_FILE_STATIC);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", NULL) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", &state) >= 0 && state == UNIT_FILE_STATIC);
 
         /* Initially there's nothing to revert */
-        assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 0);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service");
         assert_se(write_string_file(p, "# Empty override\n", WRITE_STRING_FILE_CREATE) >= 0);
 
         /* Revert the override file */
-        assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service.d/dropin.conf");
-        assert_se(mkdir_parents(p, 0755) >= 0);
-        assert_se(write_string_file(p, "# Empty dropin\n", WRITE_STRING_FILE_CREATE) >= 0);
+        assert_se(write_string_file(p, "# Empty dropin\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
         /* Revert the dropin file */
-        assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         assert_se(streq(changes[0].path, p));
 
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service.d");
-        assert_se(changes[1].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[1].type == INSTALL_CHANGE_UNLINK);
         assert_se(streq(changes[1].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 }
 
-static void test_preset_order(const char *root) {
-        UnitFileChange *changes = NULL;
+TEST(preset_order) {
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         const char *p;
         UnitFileState state;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/prefix-1.service");
         assert_se(write_string_file(p,
@@ -751,61 +751,61 @@
                                     "disable prefix-*.service\n"
                                     "enable prefix-2.service\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/prefix-1.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/prefix-1.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-2.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-2.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
         assert_se(n_changes == 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 }
 
-static void test_static_instance(const char *root) {
+TEST(static_instance) {
         UnitFileState state;
         const char *p;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/static-instance@.service");
         assert_se(write_string_file(p,
                                     "[Install]\n"
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, "/usr/lib/systemd/system/static-instance@foo.service");
         assert_se(symlink("static-instance@.service", p) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_STATIC);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_STATIC);
 }
 
-static void test_with_dropin(const char *root) {
+TEST(with_dropin) {
         const char *p;
         UnitFileState state;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-1.service");
         assert_se(write_string_file(p,
@@ -813,12 +813,11 @@
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-1.service.d/dropin.conf");
-        assert_se(mkdir_parents(p, 0755) >= 0);
         assert_se(write_string_file(p,
                                     "[Install]\n"
-                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service");
         assert_se(write_string_file(p,
@@ -826,12 +825,11 @@
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-2.service.d/dropin.conf");
-        assert_se(mkdir_parents(p, 0755) >= 0);
         assert_se(write_string_file(p,
                                     "[Install]\n"
-                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-3.service");
         assert_se(write_string_file(p,
@@ -839,12 +837,11 @@
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-3.service.d/dropin.conf");
-        assert_se(mkdir_parents(p, 0755) >= 0);
         assert_se(write_string_file(p,
                                     "[Install]\n"
-                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-4a.service");
         assert_se(write_string_file(p,
@@ -852,91 +849,90 @@
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-4a.service.d/dropin.conf");
-        assert_se(mkdir_parents(p, 0755) >= 0);
         assert_se(write_string_file(p,
                                     "[Install]\n"
-                                    "Also=with-dropin-4b.service\n", WRITE_STRING_FILE_CREATE) >= 0);
+                                    "Also=with-dropin-4b.service\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-4b.service");
         assert_se(write_string_file(p,
                                     "[Install]\n"
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
-        assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
+        assert_se(changes[1].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1.service"));
         assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1.service");
         assert_se(streq(changes[0].path, p));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1.service");
         assert_se(streq(changes[1].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
-        assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
+        assert_se(changes[1].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
         assert_se(streq(changes[1].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2.service");
         assert_se(streq(changes[0].path, p));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2.service");
         assert_se(streq(changes[1].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
-        assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
+        assert_se(changes[1].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3.service"));
         assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-3.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3.service");
         assert_se(streq(changes[0].path, p));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-3.service");
         assert_se(streq(changes[1].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
-        assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
+        assert_se(changes[1].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-4a.service"));
         assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-4b.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4a.service");
         assert_se(streq(changes[0].path, p));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4b.service");
         assert_se(streq(changes[1].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
 }
 
-static void test_with_dropin_template(const char *root) {
+TEST(with_dropin_template) {
         const char *p;
         UnitFileState state;
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@.service", &state) == -ENOENT);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@.service", &state) == -ENOENT);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@.service", &state) == -ENOENT);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-1@.service");
         assert_se(write_string_file(p,
@@ -944,12 +940,11 @@
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-1@.service.d/dropin.conf");
-        assert_se(mkdir_parents(p, 0755) >= 0);
         assert_se(write_string_file(p,
                                     "[Install]\n"
-                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-2@.service");
         assert_se(write_string_file(p,
@@ -957,12 +952,11 @@
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-2@instance-1.service.d/dropin.conf");
-        assert_se(mkdir_parents(p, 0755) >= 0);
         assert_se(write_string_file(p,
                                     "[Install]\n"
-                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+                                    "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-3@.service");
         assert_se(write_string_file(p,
@@ -971,66 +965,65 @@
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-3@.service.d/dropin.conf");
-        assert_se(mkdir_parents(p, 0755) >= 0);
         assert_se(write_string_file(p,
                                     "[Install]\n"
-                                    "DefaultInstance=instance-2\n", WRITE_STRING_FILE_CREATE) >= 0);
+                                    "DefaultInstance=instance-2\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
-        assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
+        assert_se(changes[1].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
         assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1@instance-1.service");
         assert_se(streq(changes[0].path, p));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1@instance-1.service");
         assert_se(streq(changes[1].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1);
         assert_se(n_changes == 2);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
-        assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
+        assert_se(changes[1].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
         assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-1.service");
         assert_se(streq(changes[0].path, p));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2@instance-1.service");
         assert_se(streq(changes[1].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-2.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
+        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3@.service"));
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3@instance-2.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@instance-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@instance-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
 }
 
-static void test_preset_multiple_instances(const char *root) {
-        UnitFileChange *changes = NULL;
+TEST(preset_multiple_instances) {
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         const char *p;
         UnitFileState state;
@@ -1042,7 +1035,7 @@
                                     "DefaultInstance=def\n"
                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         p = strjoina(root, "/usr/lib/systemd/system-preset/test.preset");
         assert_se(write_string_file(p,
@@ -1050,70 +1043,70 @@
                                     "enable emptylist@.service\n" /* This line ensures the old functionality for templated unit still works */
                                     "disable *\n" , WRITE_STRING_FILE_CREATE) >= 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
         /* Preset a single instantiated unit specified in the list */
-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_SYMLINK);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0);
+        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0);
         assert_se(n_changes == 1);
-        assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+        assert_se(changes[0].type == INSTALL_CHANGE_UNLINK);
         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
         assert_se(streq(changes[0].path, p));
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
         changes = NULL; n_changes = 0;
 
         /* Check for preset-all case, only instances on the list should be enabled, not including the default instance */
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
 
-        assert_se(unit_file_preset_all(UNIT_FILE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+        assert_se(unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
         assert_se(n_changes > 0);
 
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
 
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 }
 
 static void verify_one(
-                const UnitFileInstallInfo *i,
+                const InstallInfo *i,
                 const char *alias,
                 int expected,
                 const char *updated_name) {
         int r;
-        static const UnitFileInstallInfo *last_info = NULL;
+        static const InstallInfo *last_info = NULL;
         _cleanup_free_ char *alias2 = NULL;
 
         if (i != last_info)
                 log_info("-- %s --", (last_info = i)->name);
 
-        r = unit_file_verify_alias(i, alias, &alias2);
+        r = unit_file_verify_alias(i, alias, &alias2, NULL, NULL);
         log_info_errno(r, "alias %s ← %s: %d/%m (expected %d)%s%s%s",
                        i->name, alias, r, expected,
                        alias2 ? " [" : "", strempty(alias2),
                        alias2 ? "]" : "");
-        assert(r == expected);
+        assert_se(r == expected);
 
         /* This is test for "instance propagation". This propagation matters mostly for WantedBy= and
          * RequiredBy= settings, and less so for Alias=. The only case where it should happen is when we have
          * an Alias=alias@.service an instantiated template template@instance. In that case the instance name
          * should be propagated into the alias as alias@instance. */
-        assert(streq_ptr(alias2, updated_name));
+        assert_se(streq_ptr(alias2, updated_name));
 }
 
-static void test_verify_alias(void) {
-        const UnitFileInstallInfo
+TEST(verify_alias) {
+        const InstallInfo
                 plain_service    = { .name = (char*) "plain.service" },
                 bare_template    = { .name = (char*) "template1@.service" },
                 di_template      = { .name = (char*) "template2@.service",
@@ -1249,11 +1242,10 @@
         verify_one(&di_inst_template, "goo.target.conf/plain.service", -EXDEV, NULL);
 }
 
-int main(int argc, char *argv[]) {
-        char root[] = "/tmp/rootXXXXXX";
+static int intro(void) {
         const char *p;
 
-        assert_se(mkdtemp(root));
+        assert_se(mkdtemp_malloc("/tmp/rootXXXXXX", &root) >= 0);
 
         p = strjoina(root, "/usr/lib/systemd/system/");
         assert_se(mkdir_p(p, 0755) >= 0);
@@ -1276,23 +1268,8 @@
         p = strjoina(root, "/usr/lib/systemd/system/graphical.target");
         assert_se(write_string_file(p, "# pretty much empty", WRITE_STRING_FILE_CREATE) >= 0);
 
-        test_basic_mask_and_enable(root);
-        test_linked_units(root);
-        test_default(root);
-        test_add_dependency(root);
-        test_template_enable(root);
-        test_indirect(root);
-        test_preset_and_list(root);
-        test_preset_order(root);
-        test_preset_multiple_instances(root);
-        test_revert(root);
-        test_static_instance(root);
-        test_with_dropin(root);
-        test_with_dropin_template(root);
-
-        assert_se(rm_rf(root, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
-
-        test_verify_alias();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-install.c b/src/test/test-install.c
index 7a0beb2..c9b08d7 100644
--- a/src/test/test-install.c
+++ b/src/test/test-install.c
@@ -6,15 +6,15 @@
 #include "install.h"
 #include "tests.h"
 
-static void dump_changes(UnitFileChange *c, unsigned n) {
+static void dump_changes(InstallChange *c, unsigned n) {
         unsigned i;
 
         assert_se(n == 0 || c);
 
         for (i = 0; i < n; i++) {
-                if (c[i].type_or_errno == UNIT_FILE_UNLINK)
+                if (c[i].type == INSTALL_CHANGE_UNLINK)
                         printf("rm '%s'\n", c[i].path);
-                else if (c[i].type_or_errno == UNIT_FILE_SYMLINK)
+                else if (c[i].type == INSTALL_CHANGE_SYMLINK)
                         printf("ln -s '%s' '%s'\n", c[i].source, c[i].path);
         }
 }
@@ -25,20 +25,20 @@
         int r;
         const char *const files[] = { "avahi-daemon.service", NULL };
         const char *const files2[] = { "/home/lennart/test.service", NULL };
-        UnitFileChange *changes = NULL;
+        InstallChange *changes = NULL;
         size_t n_changes = 0;
         UnitFileState state = 0;
 
         test_setup_logging(LOG_DEBUG);
 
         h = hashmap_new(&string_hash_ops);
-        r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL);
+        r = unit_file_get_list(LOOKUP_SCOPE_SYSTEM, NULL, h, NULL, NULL);
         assert_se(r == 0);
 
         HASHMAP_FOREACH(p, h) {
                 UnitFileState s = _UNIT_FILE_STATE_INVALID;
 
-                r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(p->path), &s);
+                r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(p->path), &s);
 
                 assert_se((r < 0 && p->state == UNIT_FILE_BAD) ||
                           (p->state == s));
@@ -52,18 +52,18 @@
 
         log_info("/*** enable **/");
 
-        r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
 
         log_info("/*** enable2 **/");
 
-        r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_ENABLED);
 
@@ -71,13 +71,13 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_DISABLED);
 
@@ -85,16 +85,16 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
         log_info("/*** mask2 ***/");
-        r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_MASKED);
 
@@ -102,16 +102,16 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
         log_info("/*** unmask2 ***/");
-        r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_DISABLED);
 
@@ -119,13 +119,13 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_MASKED);
 
@@ -133,16 +133,16 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
         log_info("/*** disable2 ***/");
-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_MASKED);
 
@@ -150,13 +150,13 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+        r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_DISABLED);
 
@@ -164,13 +164,13 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
+        r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_ENABLED);
 
@@ -178,26 +178,26 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
+        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
         assert_se(r < 0);
 
         log_info("/*** link files2 ***/");
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
+        r = unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_LINKED);
 
@@ -205,26 +205,26 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
+        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
         assert_se(r < 0);
 
         log_info("/*** link files2 ***/");
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
+        r = unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_LINKED);
 
@@ -232,13 +232,13 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_reenable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
+        r = unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_ENABLED);
 
@@ -246,25 +246,25 @@
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
+        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
         assert_se(r < 0);
         log_info("/*** preset files ***/");
         changes = NULL;
         n_changes = 0;
 
-        r = unit_file_preset(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes);
+        r = unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes);
         assert_se(r >= 0);
 
         dump_changes(changes, n_changes);
-        unit_file_changes_free(changes, n_changes);
+        install_changes_free(changes, n_changes);
 
-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files[0]), &state);
+        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files[0]), &state);
         assert_se(r >= 0);
         assert_se(state == UNIT_FILE_ENABLED);
 
diff --git a/src/test/test-io-util.c b/src/test/test-io-util.c
index 104c022..fd41a2a 100644
--- a/src/test/test-io-util.c
+++ b/src/test/test-io-util.c
@@ -8,6 +8,7 @@
 #include "fd-util.h"
 #include "io-util.h"
 #include "macro.h"
+#include "tests.h"
 
 static void test_sparse_write_one(int fd, const char *buffer, size_t n) {
         char check[n];
@@ -25,13 +26,13 @@
         assert_se(memcmp(buffer, check, n) == 0);
 }
 
-static void test_sparse_write(void) {
+TEST(sparse_write) {
         const char test_a[] = "test";
         const char test_b[] = "\0\0\0\0test\0\0\0\0";
         const char test_c[] = "\0\0test\0\0\0\0";
         const char test_d[] = "\0\0test\0\0\0test\0\0\0\0test\0\0\0\0\0test\0\0\0test\0\0\0\0test\0\0\0\0\0\0\0\0";
         const char test_e[] = "test\0\0\0\0test";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         char fn[] = "/tmp/sparseXXXXXX";
 
         fd = mkostemp(fn, O_CLOEXEC);
@@ -45,8 +46,4 @@
         test_sparse_write_one(fd, test_e, sizeof(test_e));
 }
 
-int main(void) {
-        test_sparse_write();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-ip-protocol-list.c b/src/test/test-ip-protocol-list.c
index 15bbbde..018441d 100644
--- a/src/test/test-ip-protocol-list.c
+++ b/src/test/test-ip-protocol-list.c
@@ -6,6 +6,7 @@
 #include "ip-protocol-list.h"
 #include "stdio-util.h"
 #include "string-util.h"
+#include "tests.h"
 
 static void test_int(int i) {
         char str[DECIMAL_STR_MAX(int)];
@@ -35,30 +36,34 @@
         assert_se(parse_ip_protocol(s) == -EINVAL);
 }
 
-static void test_parse_ip_protocol(const char *s, int expected) {
+static void test_parse_ip_protocol_one(const char *s, int expected) {
         assert_se(parse_ip_protocol(s) == expected);
 }
 
-int main(int argc, const char *argv[]) {
+TEST(integer) {
         test_int(IPPROTO_TCP);
         test_int(IPPROTO_DCCP);
         test_int_fail(-1);
         test_int_fail(1024 * 1024);
+}
 
+TEST(string) {
         test_str("sctp");
         test_str("udp");
         test_str_fail("hoge");
         test_str_fail("-1");
         test_str_fail("1000000000");
-
-        test_parse_ip_protocol("sctp", IPPROTO_SCTP);
-        test_parse_ip_protocol("ScTp", IPPROTO_SCTP);
-        test_parse_ip_protocol("ip", IPPROTO_IP);
-        test_parse_ip_protocol("", IPPROTO_IP);
-        test_parse_ip_protocol("1", 1);
-        test_parse_ip_protocol("0", 0);
-        test_parse_ip_protocol("-10", -EINVAL);
-        test_parse_ip_protocol("100000000", -EINVAL);
-
-        return 0;
 }
+
+TEST(parse_ip_protocol) {
+        test_parse_ip_protocol_one("sctp", IPPROTO_SCTP);
+        test_parse_ip_protocol_one("ScTp", IPPROTO_SCTP);
+        test_parse_ip_protocol_one("ip", IPPROTO_IP);
+        test_parse_ip_protocol_one("", IPPROTO_IP);
+        test_parse_ip_protocol_one("1", 1);
+        test_parse_ip_protocol_one("0", 0);
+        test_parse_ip_protocol_one("-10", -EINVAL);
+        test_parse_ip_protocol_one("100000000", -EINVAL);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-job-type.c b/src/test/test-job-type.c
index 024d976..0a9b6dc 100644
--- a/src/test/test-job-type.c
+++ b/src/test/test-job-type.c
@@ -6,27 +6,24 @@
 #include "unit.h"
 
 int main(int argc, char *argv[]) {
-        JobType a, b, c, ab, bc, ab_c, bc_a, a_bc;
         const ServiceState test_states[] = { SERVICE_DEAD, SERVICE_RUNNING };
-        unsigned i;
-        bool merged_ab;
 
-        /* fake a unit */
-        static Service s = {
-                .meta.load_state = UNIT_LOADED,
-                .type = SERVICE_SIMPLE,
-        };
-        Unit *u = UNIT(&s);
+        for (size_t i = 0; i < ELEMENTSOF(test_states); i++) {
+                /* fake a unit */
+                Service s = {
+                        .meta.load_state = UNIT_LOADED,
+                        .type = SERVICE_SIMPLE,
+                        .state = test_states[i],
+                };
+                Unit *u = UNIT(&s);
 
-        for (i = 0; i < ELEMENTSOF(test_states); i++) {
-                s.state = test_states[i];
                 printf("\nWith collapsing for service state %s\n"
                        "=========================================\n", service_state_to_string(s.state));
-                for (a = 0; a < _JOB_TYPE_MAX_MERGING; a++) {
-                        for (b = 0; b < _JOB_TYPE_MAX_MERGING; b++) {
+                for (JobType a = 0; a < _JOB_TYPE_MAX_MERGING; a++) {
+                        for (JobType b = 0; b < _JOB_TYPE_MAX_MERGING; b++) {
 
-                                ab = a;
-                                merged_ab = (job_type_merge_and_collapse(&ab, b, u) >= 0);
+                                JobType ab = a;
+                                bool merged_ab = job_type_merge_and_collapse(&ab, b, u) >= 0;
 
                                 if (!job_type_is_mergeable(a, b)) {
                                         assert_se(!merged_ab);
@@ -37,7 +34,7 @@
                                 assert_se(merged_ab);
                                 printf("%s + %s = %s\n", job_type_to_string(a), job_type_to_string(b), job_type_to_string(ab));
 
-                                for (c = 0; c < _JOB_TYPE_MAX_MERGING; c++) {
+                                for (JobType c = 0; c < _JOB_TYPE_MAX_MERGING; c++) {
 
                                         /* Verify transitivity of mergeability of job types */
                                         assert_se(!job_type_is_mergeable(a, b) ||
@@ -53,18 +50,18 @@
                                          * either a or b is not mergeable with c either. */
                                         assert_se(job_type_is_mergeable(ab, c) || !job_type_is_mergeable(a, c) || !job_type_is_mergeable(b, c));
 
-                                        bc = b;
+                                        JobType bc = b;
                                         if (job_type_merge_and_collapse(&bc, c, u) >= 0) {
 
                                                 /* Verify associativity */
 
-                                                ab_c = ab;
+                                                JobType ab_c = ab;
                                                 assert_se(job_type_merge_and_collapse(&ab_c, c, u) == 0);
 
-                                                bc_a = bc;
+                                                JobType bc_a = bc;
                                                 assert_se(job_type_merge_and_collapse(&bc_a, a, u) == 0);
 
-                                                a_bc = a;
+                                                JobType a_bc = a;
                                                 assert_se(job_type_merge_and_collapse(&a_bc, bc, u) == 0);
 
                                                 assert_se(ab_c == bc_a);
diff --git a/src/test/test-journal-importer.c b/src/test/test-journal-importer.c
index da266d9..ec9e49e 100644
--- a/src/test/test-journal-importer.c
+++ b/src/test/test-journal-importer.c
@@ -20,7 +20,7 @@
         "COREDUMP_PROC_CGROUP=1:name=systemd:/\n"                       \
         "0::/user.slice/user-1002.slice/user@1002.service/gnome-terminal-server.service\n"
 
-static void test_basic_parsing(void) {
+TEST(basic_parsing) {
         _cleanup_(journal_importer_cleanup) JournalImporter imp = JOURNAL_IMPORTER_INIT(-1);
         _cleanup_free_ char *journal_data_path = NULL;
         int r;
@@ -51,7 +51,7 @@
         assert_se(journal_importer_eof(&imp));
 }
 
-static void test_bad_input(void) {
+TEST(bad_input) {
         _cleanup_(journal_importer_cleanup) JournalImporter imp = JOURNAL_IMPORTER_INIT(-1);
         _cleanup_free_ char *journal_data_path = NULL;
         int r;
@@ -68,11 +68,4 @@
         assert_se(journal_importer_eof(&imp));
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_basic_parsing();
-        test_bad_input();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-json.c b/src/test/test-json.c
index 1d4b119..0f5c5b1 100644
--- a/src/test/test-json.c
+++ b/src/test/test-json.c
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <math.h>
+#include <float.h>
 
 #include "alloc-util.h"
 #include "escape.h"
@@ -8,12 +8,12 @@
 #include "fileio.h"
 #include "json-internal.h"
 #include "json.h"
+#include "math-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
-#include "util.h"
 
-static void test_tokenizer(const char *data, ...) {
+static void test_tokenizer_one(const char *data, ...) {
         unsigned line = 0, column = 0;
         void *state = NULL;
         va_list ap;
@@ -45,28 +45,23 @@
                         assert_se(streq_ptr(nn, str));
 
                 } else if (t == JSON_TOKEN_REAL) {
-                        long double d;
+                        double d;
 
-                        d = va_arg(ap, long double);
+                        d = va_arg(ap, double);
 
-                        /* Valgrind doesn't support long double calculations and automatically downgrades to 80bit:
-                         * http://www.valgrind.org/docs/manual/manual-core.html#manual-core.limits.
-                         * Some architectures might not support long double either.
-                         */
-
-                        assert_se(fabsl(d - v.real) < 1e-10 ||
-                                  fabsl((d - v.real) / v.real) < 1e-10);
+                        assert_se(fabs(d - v.real) < 1e-10 ||
+                                  fabs((d - v.real) / v.real) < 1e-10);
 
                 } else if (t == JSON_TOKEN_INTEGER) {
-                        intmax_t i;
+                        int64_t i;
 
-                        i = va_arg(ap, intmax_t);
+                        i = va_arg(ap, int64_t);
                         assert_se(i == v.integer);
 
                 } else if (t == JSON_TOKEN_UNSIGNED) {
-                        uintmax_t u;
+                        uint64_t u;
 
-                        u = va_arg(ap, uintmax_t);
+                        u = va_arg(ap, uint64_t);
                         assert_se(u == v.unsig);
 
                 } else if (t == JSON_TOKEN_BOOLEAN) {
@@ -82,7 +77,7 @@
 
 typedef void (*Test)(JsonVariant *);
 
-static void test_variant(const char *data, Test test) {
+static void test_variant_one(const char *data, Test test) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
         _cleanup_free_ char *s = NULL;
         int r;
@@ -225,7 +220,7 @@
 
         /* has thisisaverylongproperty */
         p = json_variant_by_key(v, "thisisaverylongproperty");
-        assert_se(p && json_variant_type(p) == JSON_VARIANT_REAL && fabsl(json_variant_real(p) - 1.27) < 0.001);
+        assert_se(p && json_variant_type(p) == JSON_VARIANT_REAL && fabs(json_variant_real(p) - 1.27) < 0.001);
 }
 
 static void test_zeroes(JsonVariant *v) {
@@ -243,9 +238,7 @@
                 assert_se(json_variant_integer(w) == 0);
                 assert_se(json_variant_unsigned(w) == 0U);
 
-                DISABLE_WARNING_FLOAT_EQUAL;
-                assert_se(json_variant_real(w) == 0.0L);
-                REENABLE_WARNING;
+                assert_se(iszero_safe(json_variant_real(w)));
 
                 assert_se(json_variant_is_integer(w));
                 assert_se(json_variant_is_unsigned(w));
@@ -266,9 +259,7 @@
         }
 }
 
-static void test_build(void) {
-        log_info("/* %s */", __func__);
-
+TEST(build) {
         _cleanup_(json_variant_unrefp) JsonVariant *a = NULL, *b = NULL;
         _cleanup_free_ char *s = NULL, *t = NULL;
 
@@ -321,7 +312,7 @@
         a = json_variant_unref(a);
         b = json_variant_unref(b);
 
-        assert_se(json_build(&a, JSON_BUILD_REAL(M_PIl)) >= 0);
+        assert_se(json_build(&a, JSON_BUILD_REAL(M_PI)) >= 0);
 
         s = mfree(s);
         assert_se(json_variant_format(a, 0, &s) >= 0);
@@ -337,22 +328,40 @@
 
         assert_se(json_build(&a, JSON_BUILD_OBJECT(
                                              JSON_BUILD_PAIR("x", JSON_BUILD_STRING("y")),
-                                             JSON_BUILD_PAIR("z", JSON_BUILD_STRING("a")),
-                                             JSON_BUILD_PAIR("b", JSON_BUILD_STRING("c"))
+                                             JSON_BUILD_PAIR("z", JSON_BUILD_CONST_STRING("a")),
+                                             JSON_BUILD_PAIR("b", JSON_BUILD_CONST_STRING("c"))
                              )) >= 0);
 
         assert_se(json_build(&b, JSON_BUILD_OBJECT(
                                              JSON_BUILD_PAIR("x", JSON_BUILD_STRING("y")),
                                              JSON_BUILD_PAIR_CONDITION(false, "p", JSON_BUILD_STRING("q")),
-                                             JSON_BUILD_PAIR_CONDITION(true, "z", JSON_BUILD_STRING("a")),
-                                             JSON_BUILD_PAIR_CONDITION(false, "j", JSON_BUILD_ARRAY(JSON_BUILD_STRING("k"), JSON_BUILD_STRING("u"), JSON_BUILD_STRING("i"))),
-                                             JSON_BUILD_PAIR("b", JSON_BUILD_STRING("c"))
+                                             JSON_BUILD_PAIR_CONDITION(true, "z", JSON_BUILD_CONST_STRING("a")),
+                                             JSON_BUILD_PAIR_CONDITION(false, "j", JSON_BUILD_ARRAY(JSON_BUILD_STRING("k"), JSON_BUILD_CONST_STRING("u"), JSON_BUILD_CONST_STRING("i"))),
+                                             JSON_BUILD_PAIR("b", JSON_BUILD_CONST_STRING("c"))
                              )) >= 0);
 
         assert_se(json_variant_equal(a, b));
 }
 
-static void test_source(void) {
+TEST(json_parse_file_empty) {
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        assert_se(fopen_unlocked("/dev/null", "re", &f) >= 0);
+        assert_se(json_parse_file(f, "waldo", 0, &v, NULL, NULL) == -ENODATA);
+        assert_se(v == NULL);
+}
+
+TEST(json_parse_file_invalid) {
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        assert_se(f = fmemopen_unlocked((void*) "kookoo", 6, "r"));
+        assert_se(json_parse_file(f, "waldo", 0, &v, NULL, NULL) == -EINVAL);
+        assert_se(v == NULL);
+}
+
+TEST(source) {
         static const char data[] =
                 "\n"
                 "\n"
@@ -369,8 +378,6 @@
                 "false, 7.5, {} ]\n"
                 "}\n";
 
-        log_info("/* %s */", __func__);
-
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
 
@@ -391,9 +398,7 @@
         printf("--- pretty end ---\n");
 }
 
-static void test_depth(void) {
-        log_info("/* %s */", __func__);
-
+TEST(depth) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         int r;
 
@@ -431,16 +436,14 @@
         fputs("\n", stdout);
 }
 
-static void test_normalize(void) {
-        log_info("/* %s */", __func__);
-
+TEST(normalize) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
         _cleanup_free_ char *t = NULL;
 
         assert_se(json_build(&v, JSON_BUILD_OBJECT(
                                              JSON_BUILD_PAIR("b", JSON_BUILD_STRING("x")),
-                                             JSON_BUILD_PAIR("c", JSON_BUILD_STRING("y")),
-                                             JSON_BUILD_PAIR("a", JSON_BUILD_STRING("z")))) >= 0);
+                                             JSON_BUILD_PAIR("c", JSON_BUILD_CONST_STRING("y")),
+                                             JSON_BUILD_PAIR("a", JSON_BUILD_CONST_STRING("z")))) >= 0);
 
         assert_se(!json_variant_is_sorted(v));
         assert_se(!json_variant_is_normalized(v));
@@ -477,9 +480,7 @@
         t = mfree(t);
 }
 
-static void test_bisect(void) {
-        log_info("/* %s */", __func__);
-
+TEST(bisect) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
 
         /* Tests the bisection logic in json_variant_by_key() */
@@ -521,58 +522,233 @@
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+static void test_float_match(JsonVariant *v) {
+        const double delta = 0.0001;
 
-        test_tokenizer("x", -EINVAL);
-        test_tokenizer("", JSON_TOKEN_END);
-        test_tokenizer(" ", JSON_TOKEN_END);
-        test_tokenizer("0", JSON_TOKEN_UNSIGNED, (uintmax_t) 0, JSON_TOKEN_END);
-        test_tokenizer("-0", JSON_TOKEN_INTEGER, (intmax_t) 0, JSON_TOKEN_END);
-        test_tokenizer("1234", JSON_TOKEN_UNSIGNED, (uintmax_t) 1234, JSON_TOKEN_END);
-        test_tokenizer("-1234", JSON_TOKEN_INTEGER, (intmax_t) -1234, JSON_TOKEN_END);
-        test_tokenizer("18446744073709551615", JSON_TOKEN_UNSIGNED, (uintmax_t) UINT64_MAX, JSON_TOKEN_END);
-        test_tokenizer("-9223372036854775808", JSON_TOKEN_INTEGER, (intmax_t) INT64_MIN, JSON_TOKEN_END);
-        test_tokenizer("18446744073709551616", JSON_TOKEN_REAL, (long double) 18446744073709551616.0L, JSON_TOKEN_END);
-        test_tokenizer("-9223372036854775809", JSON_TOKEN_REAL, (long double) -9223372036854775809.0L, JSON_TOKEN_END);
-        test_tokenizer("-1234", JSON_TOKEN_INTEGER, (intmax_t) -1234, JSON_TOKEN_END);
-        test_tokenizer("3.141", JSON_TOKEN_REAL, (long double) 3.141, JSON_TOKEN_END);
-        test_tokenizer("0.0", JSON_TOKEN_REAL, (long double) 0.0, JSON_TOKEN_END);
-        test_tokenizer("7e3", JSON_TOKEN_REAL, (long double) 7e3, JSON_TOKEN_END);
-        test_tokenizer("-7e-3", JSON_TOKEN_REAL, (long double) -7e-3, JSON_TOKEN_END);
-        test_tokenizer("true", JSON_TOKEN_BOOLEAN, true, JSON_TOKEN_END);
-        test_tokenizer("false", JSON_TOKEN_BOOLEAN, false, JSON_TOKEN_END);
-        test_tokenizer("null", JSON_TOKEN_NULL, JSON_TOKEN_END);
-        test_tokenizer("{}", JSON_TOKEN_OBJECT_OPEN, JSON_TOKEN_OBJECT_CLOSE, JSON_TOKEN_END);
-        test_tokenizer("\t {\n} \n", JSON_TOKEN_OBJECT_OPEN, JSON_TOKEN_OBJECT_CLOSE, JSON_TOKEN_END);
-        test_tokenizer("[]", JSON_TOKEN_ARRAY_OPEN, JSON_TOKEN_ARRAY_CLOSE, JSON_TOKEN_END);
-        test_tokenizer("\t [] \n\n", JSON_TOKEN_ARRAY_OPEN, JSON_TOKEN_ARRAY_CLOSE, JSON_TOKEN_END);
-        test_tokenizer("\"\"", JSON_TOKEN_STRING, "", JSON_TOKEN_END);
-        test_tokenizer("\"foo\"", JSON_TOKEN_STRING, "foo", JSON_TOKEN_END);
-        test_tokenizer("\"foo\\nfoo\"", JSON_TOKEN_STRING, "foo\nfoo", JSON_TOKEN_END);
-        test_tokenizer("{\"foo\" : \"bar\"}", JSON_TOKEN_OBJECT_OPEN, JSON_TOKEN_STRING, "foo", JSON_TOKEN_COLON, JSON_TOKEN_STRING, "bar", JSON_TOKEN_OBJECT_CLOSE, JSON_TOKEN_END);
-        test_tokenizer("{\"foo\" : [true, false]}", JSON_TOKEN_OBJECT_OPEN, JSON_TOKEN_STRING, "foo", JSON_TOKEN_COLON, JSON_TOKEN_ARRAY_OPEN, JSON_TOKEN_BOOLEAN, true, JSON_TOKEN_COMMA, JSON_TOKEN_BOOLEAN, false, JSON_TOKEN_ARRAY_CLOSE, JSON_TOKEN_OBJECT_CLOSE, JSON_TOKEN_END);
-        test_tokenizer("\"\xef\xbf\xbd\"", JSON_TOKEN_STRING, "\xef\xbf\xbd", JSON_TOKEN_END);
-        test_tokenizer("\"\\ufffd\"", JSON_TOKEN_STRING, "\xef\xbf\xbd", JSON_TOKEN_END);
-        test_tokenizer("\"\\uf\"", -EINVAL);
-        test_tokenizer("\"\\ud800a\"", -EINVAL);
-        test_tokenizer("\"\\udc00\\udc00\"", -EINVAL);
-        test_tokenizer("\"\\ud801\\udc37\"", JSON_TOKEN_STRING, "\xf0\x90\x90\xb7", JSON_TOKEN_END);
-
-        test_tokenizer("[1, 2, -3]", JSON_TOKEN_ARRAY_OPEN, JSON_TOKEN_UNSIGNED, (uintmax_t) 1, JSON_TOKEN_COMMA, JSON_TOKEN_UNSIGNED, (uintmax_t) 2, JSON_TOKEN_COMMA, JSON_TOKEN_INTEGER, (intmax_t) -3, JSON_TOKEN_ARRAY_CLOSE, JSON_TOKEN_END);
-
-        test_variant("{\"k\": \"v\", \"foo\": [1, 2, 3], \"bar\": {\"zap\": null}}", test_1);
-        test_variant("{\"mutant\": [1, null, \"1\", {\"1\": [1, \"1\"]}], \"thisisaverylongproperty\": 1.27}", test_2);
-        test_variant("{\"foo\" : \"\\u0935\\u093f\\u0935\\u0947\\u0915\\u0916\\u094d\\u092f\\u093e\\u0924\\u093f\\u0930\\u0935\\u093f\\u092a\\u094d\\u0932\\u0935\\u093e\\u0020\\u0939\\u093e\\u0928\\u094b\\u092a\\u093e\\u092f\\u0903\\u0964\"}", NULL);
-
-        test_variant("[ 0, -0, 0.0, -0.0, 0.000, -0.000, 0e0, -0e0, 0e+0, -0e-0, 0e-0, -0e000, 0e+000 ]", test_zeroes);
-
-        test_build();
-        test_source();
-        test_depth();
-
-        test_normalize();
-        test_bisect();
-
-        return 0;
+        assert_se(json_variant_is_array(v));
+        assert_se(json_variant_elements(v) == 11);
+        assert_se(fabs(1.0 - (DBL_MIN / json_variant_real(json_variant_by_index(v, 0)))) <= delta);
+        assert_se(fabs(1.0 - (DBL_MAX / json_variant_real(json_variant_by_index(v, 1)))) <= delta);
+        assert_se(json_variant_is_null(json_variant_by_index(v, 2))); /* nan is not supported by json → null */
+        assert_se(json_variant_is_null(json_variant_by_index(v, 3))); /* +inf is not supported by json → null */
+        assert_se(json_variant_is_null(json_variant_by_index(v, 4))); /* -inf is not supported by json → null */
+        assert_se(json_variant_is_null(json_variant_by_index(v, 5)) ||
+                  fabs(1.0 - (HUGE_VAL / json_variant_real(json_variant_by_index(v, 5)))) <= delta); /* HUGE_VAL might be +inf, but might also be something else */
+        assert_se(json_variant_is_real(json_variant_by_index(v, 6)) &&
+                  json_variant_is_integer(json_variant_by_index(v, 6)) &&
+                  json_variant_integer(json_variant_by_index(v, 6)) == 0);
+        assert_se(json_variant_is_real(json_variant_by_index(v, 7)) &&
+                  json_variant_is_integer(json_variant_by_index(v, 7)) &&
+                  json_variant_integer(json_variant_by_index(v, 7)) == 10);
+        assert_se(json_variant_is_real(json_variant_by_index(v, 8)) &&
+                  json_variant_is_integer(json_variant_by_index(v, 8)) &&
+                  json_variant_integer(json_variant_by_index(v, 8)) == -10);
+        assert_se(json_variant_is_real(json_variant_by_index(v, 9)) &&
+                  !json_variant_is_integer(json_variant_by_index(v, 9)));
+        assert_se(fabs(1.0 - (DBL_MIN / 2 / json_variant_real(json_variant_by_index(v, 9)))) <= delta);
+        assert_se(json_variant_is_real(json_variant_by_index(v, 10)) &&
+                  !json_variant_is_integer(json_variant_by_index(v, 10)));
+        assert_se(fabs(1.0 - (-DBL_MIN / 2 / json_variant_real(json_variant_by_index(v, 10)))) <= delta);
 }
+
+TEST(float) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
+        _cleanup_free_ char *text = NULL;
+
+        assert_se(json_build(&v, JSON_BUILD_ARRAY(
+                                             JSON_BUILD_REAL(DBL_MIN),
+                                             JSON_BUILD_REAL(DBL_MAX),
+                                             JSON_BUILD_REAL(NAN),
+                                             JSON_BUILD_REAL(INFINITY),
+                                             JSON_BUILD_REAL(-INFINITY),
+                                             JSON_BUILD_REAL(HUGE_VAL),
+                                             JSON_BUILD_REAL(0),
+                                             JSON_BUILD_REAL(10),
+                                             JSON_BUILD_REAL(-10),
+                                             JSON_BUILD_REAL(DBL_MIN / 2),
+                                             JSON_BUILD_REAL(-DBL_MIN / 2))) >= 0);
+
+        json_variant_dump(v, JSON_FORMAT_COLOR|JSON_FORMAT_PRETTY, NULL, NULL);
+
+        test_float_match(v);
+
+        assert_se(json_variant_format(v, 0, &text) >= 0);
+        assert_se(json_parse(text, 0, &w, NULL, NULL) >= 0);
+
+        json_variant_dump(w, JSON_FORMAT_COLOR|JSON_FORMAT_PRETTY, NULL, NULL);
+
+        test_float_match(w);
+}
+
+static void test_equal_text(JsonVariant *v, const char *text) {
+        _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+
+        assert_se(json_parse(text, 0, &w, NULL, NULL) >= 0);
+        assert_se(json_variant_equal(v, w) || (!v && json_variant_is_null(w)));
+}
+
+TEST(set_field) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        test_equal_text(v, "null");
+        assert_se(json_variant_set_field(&v, "foo", NULL) >= 0);
+        test_equal_text(v, "{\"foo\" : null}");
+        assert_se(json_variant_set_field(&v, "bar", JSON_VARIANT_STRING_CONST("quux")) >= 0);
+        test_equal_text(v, "{\"foo\" : null, \"bar\" : \"quux\"}");
+        assert_se(json_variant_set_field(&v, "foo", JSON_VARIANT_STRING_CONST("quux2")) >= 0);
+        test_equal_text(v, "{\"foo\" : \"quux2\", \"bar\" : \"quux\"}");
+        assert_se(json_variant_set_field(&v, "bar", NULL) >= 0);
+        test_equal_text(v, "{\"foo\" : \"quux2\", \"bar\" : null}");
+}
+
+TEST(tokenizer) {
+        test_tokenizer_one("x", -EINVAL);
+        test_tokenizer_one("", JSON_TOKEN_END);
+        test_tokenizer_one(" ", JSON_TOKEN_END);
+        test_tokenizer_one("0", JSON_TOKEN_UNSIGNED, (uint64_t) 0, JSON_TOKEN_END);
+        test_tokenizer_one("-0", JSON_TOKEN_INTEGER, (int64_t) 0, JSON_TOKEN_END);
+        test_tokenizer_one("1234", JSON_TOKEN_UNSIGNED, (uint64_t) 1234, JSON_TOKEN_END);
+        test_tokenizer_one("-1234", JSON_TOKEN_INTEGER, (int64_t) -1234, JSON_TOKEN_END);
+        test_tokenizer_one("18446744073709551615", JSON_TOKEN_UNSIGNED, (uint64_t) UINT64_MAX, JSON_TOKEN_END);
+        test_tokenizer_one("-9223372036854775808", JSON_TOKEN_INTEGER, (int64_t) INT64_MIN, JSON_TOKEN_END);
+        test_tokenizer_one("18446744073709551616", JSON_TOKEN_REAL, (double) 18446744073709551616.0L, JSON_TOKEN_END);
+        test_tokenizer_one("-9223372036854775809", JSON_TOKEN_REAL, (double) -9223372036854775809.0L, JSON_TOKEN_END);
+        test_tokenizer_one("-1234", JSON_TOKEN_INTEGER, (int64_t) -1234, JSON_TOKEN_END);
+        test_tokenizer_one("3.141", JSON_TOKEN_REAL, (double) 3.141, JSON_TOKEN_END);
+        test_tokenizer_one("0.0", JSON_TOKEN_REAL, (double) 0.0, JSON_TOKEN_END);
+        test_tokenizer_one("7e3", JSON_TOKEN_REAL, (double) 7e3, JSON_TOKEN_END);
+        test_tokenizer_one("-7e-3", JSON_TOKEN_REAL, (double) -7e-3, JSON_TOKEN_END);
+        test_tokenizer_one("true", JSON_TOKEN_BOOLEAN, true, JSON_TOKEN_END);
+        test_tokenizer_one("false", JSON_TOKEN_BOOLEAN, false, JSON_TOKEN_END);
+        test_tokenizer_one("null", JSON_TOKEN_NULL, JSON_TOKEN_END);
+        test_tokenizer_one("{}", JSON_TOKEN_OBJECT_OPEN, JSON_TOKEN_OBJECT_CLOSE, JSON_TOKEN_END);
+        test_tokenizer_one("\t {\n} \n", JSON_TOKEN_OBJECT_OPEN, JSON_TOKEN_OBJECT_CLOSE, JSON_TOKEN_END);
+        test_tokenizer_one("[]", JSON_TOKEN_ARRAY_OPEN, JSON_TOKEN_ARRAY_CLOSE, JSON_TOKEN_END);
+        test_tokenizer_one("\t [] \n\n", JSON_TOKEN_ARRAY_OPEN, JSON_TOKEN_ARRAY_CLOSE, JSON_TOKEN_END);
+        test_tokenizer_one("\"\"", JSON_TOKEN_STRING, "", JSON_TOKEN_END);
+        test_tokenizer_one("\"foo\"", JSON_TOKEN_STRING, "foo", JSON_TOKEN_END);
+        test_tokenizer_one("\"foo\\nfoo\"", JSON_TOKEN_STRING, "foo\nfoo", JSON_TOKEN_END);
+        test_tokenizer_one("{\"foo\" : \"bar\"}", JSON_TOKEN_OBJECT_OPEN, JSON_TOKEN_STRING, "foo", JSON_TOKEN_COLON, JSON_TOKEN_STRING, "bar", JSON_TOKEN_OBJECT_CLOSE, JSON_TOKEN_END);
+        test_tokenizer_one("{\"foo\" : [true, false]}", JSON_TOKEN_OBJECT_OPEN, JSON_TOKEN_STRING, "foo", JSON_TOKEN_COLON, JSON_TOKEN_ARRAY_OPEN, JSON_TOKEN_BOOLEAN, true, JSON_TOKEN_COMMA, JSON_TOKEN_BOOLEAN, false, JSON_TOKEN_ARRAY_CLOSE, JSON_TOKEN_OBJECT_CLOSE, JSON_TOKEN_END);
+        test_tokenizer_one("\"\xef\xbf\xbd\"", JSON_TOKEN_STRING, "\xef\xbf\xbd", JSON_TOKEN_END);
+        test_tokenizer_one("\"\\ufffd\"", JSON_TOKEN_STRING, "\xef\xbf\xbd", JSON_TOKEN_END);
+        test_tokenizer_one("\"\\uf\"", -EINVAL);
+        test_tokenizer_one("\"\\ud800a\"", -EINVAL);
+        test_tokenizer_one("\"\\udc00\\udc00\"", -EINVAL);
+        test_tokenizer_one("\"\\ud801\\udc37\"", JSON_TOKEN_STRING, "\xf0\x90\x90\xb7", JSON_TOKEN_END);
+
+        test_tokenizer_one("[1, 2, -3]", JSON_TOKEN_ARRAY_OPEN, JSON_TOKEN_UNSIGNED, (uint64_t) 1, JSON_TOKEN_COMMA, JSON_TOKEN_UNSIGNED, (uint64_t) 2, JSON_TOKEN_COMMA, JSON_TOKEN_INTEGER, (int64_t) -3, JSON_TOKEN_ARRAY_CLOSE, JSON_TOKEN_END);
+}
+
+TEST(variant) {
+        test_variant_one("{\"k\": \"v\", \"foo\": [1, 2, 3], \"bar\": {\"zap\": null}}", test_1);
+        test_variant_one("{\"mutant\": [1, null, \"1\", {\"1\": [1, \"1\"]}], \"thisisaverylongproperty\": 1.27}", test_2);
+        test_variant_one("{\"foo\" : \"\\u0935\\u093f\\u0935\\u0947\\u0915\\u0916\\u094d\\u092f\\u093e\\u0924\\u093f\\u0930\\u0935\\u093f\\u092a\\u094d\\u0932\\u0935\\u093e\\u0020\\u0939\\u093e\\u0928\\u094b\\u092a\\u093e\\u092f\\u0903\\u0964\"}", NULL);
+
+        test_variant_one("[ 0, -0, 0.0, -0.0, 0.000, -0.000, 0e0, -0e0, 0e+0, -0e-0, 0e-0, -0e000, 0e+000 ]", test_zeroes);
+}
+
+TEST(json_append) {
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
+
+        assert_se(json_build(&v, JSON_BUILD_OBJECT(
+                                             JSON_BUILD_PAIR("b", JSON_BUILD_STRING("x")),
+                                             JSON_BUILD_PAIR("c", JSON_BUILD_CONST_STRING("y")),
+                                             JSON_BUILD_PAIR("a", JSON_BUILD_CONST_STRING("z")))) >= 0);
+
+        assert_se(json_append(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("b", JSON_BUILD_STRING("x")))) >= 0);
+        assert_se(json_append(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("c", JSON_BUILD_STRING("y")))) >= 0);
+        assert_se(json_append(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("a", JSON_BUILD_STRING("z")))) >= 0);
+
+        assert_se(json_variant_equal(v, w));
+}
+
+static inline void json_array_append_with_source_one(bool source) {
+        _cleanup_(json_variant_unrefp) JsonVariant *a, *b;
+
+        /* Parse two sources, each with a different name and line/column numbers */
+
+        assert_se(json_parse_with_source(" [41]", source ? "string 1" : NULL, 0,
+                                         &a, NULL, NULL) >= 0);
+        assert_se(json_parse_with_source("\n\n   [42]", source ? "string 2" : NULL, 0,
+                                         &b, NULL, NULL) >= 0);
+
+        assert_se(json_variant_is_array(a));
+        assert_se(json_variant_elements(a) == 1);
+        assert_se(json_variant_is_array(b));
+        assert_se(json_variant_elements(b) == 1);
+
+        /* Verify source information */
+
+        const char *s1, *s2;
+        unsigned line1, col1, line2, col2;
+        assert_se(json_variant_get_source(a, &s1, &line1, &col1) >= 0);
+        assert_se(json_variant_get_source(b, &s2, &line2, &col2) >= 0);
+
+        assert_se(streq_ptr(s1, source ? "string 1" : NULL));
+        assert_se(streq_ptr(s2, source ? "string 2" : NULL));
+        assert_se(line1 == 1);
+        assert_se(col1 == 2);
+        assert_se(line2 == 3);
+        assert_se(col2 == 4);
+
+        /* Append one elem from the second array (and source) to the first. */
+
+        JsonVariant *elem;
+        assert_se(elem = json_variant_by_index(b, 0));
+        assert_se(json_variant_is_integer(elem));
+        assert_se(json_variant_elements(elem) == 0);
+
+        assert_se(json_variant_append_array(&a, elem) >= 0);
+
+        assert_se(json_variant_is_array(a));
+        assert_se(json_variant_elements(a) == 2);
+
+        /* Verify that source information was propagated correctly */
+
+        assert_se(json_variant_get_source(elem, &s1, &line1, &col1) >= 0);
+        assert_se(elem = json_variant_by_index(a, 1));
+        assert_se(json_variant_get_source(elem, &s2, &line2, &col2) >= 0);
+
+        assert_se(streq_ptr(s1, source ? "string 2" : NULL));
+        assert_se(streq_ptr(s2, source ? "string 2" : NULL));
+        assert_se(line1 == 3);
+        assert_se(col1 == 5);
+        assert_se(line2 == 3);
+        assert_se(col2 == 5);
+}
+
+TEST(json_array_append_with_source) {
+        json_array_append_with_source_one(true);
+}
+
+TEST(json_array_append_without_source) {
+        json_array_append_with_source_one(false);
+}
+
+TEST(json_array_append_nodup) {
+        _cleanup_(json_variant_unrefp) JsonVariant *l = NULL, *s = NULL, *wd = NULL, *nd = NULL;
+
+        assert_se(json_build(&l, JSON_BUILD_STRV(STRV_MAKE("foo", "bar", "baz", "bar", "baz", "foo", "qux", "baz"))) >= 0);
+        assert_se(json_build(&s, JSON_BUILD_STRV(STRV_MAKE("foo", "bar", "baz", "qux"))) >= 0);
+
+        assert_se(!json_variant_equal(l, s));
+        assert_se(json_variant_elements(l) == 8);
+        assert_se(json_variant_elements(s) == 4);
+
+        JsonVariant *i;
+        JSON_VARIANT_ARRAY_FOREACH(i, l) {
+                assert_se(json_variant_append_array(&wd, i) >= 0);
+                assert_se(json_variant_append_array_nodup(&nd, i) >= 0);
+        }
+
+        assert_se(json_variant_elements(wd) == 8);
+        assert_se(json_variant_equal(l, wd));
+        assert_se(!json_variant_equal(s, wd));
+
+        assert_se(json_variant_elements(nd) == 4);
+        assert_se(!json_variant_equal(l, nd));
+        assert_se(json_variant_equal(s, nd));
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-kbd-util.c b/src/test/test-kbd-util.c
new file mode 100644
index 0000000..0a166c6
--- /dev/null
+++ b/src/test/test-kbd-util.c
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "kbd-util.h"
+#include "log.h"
+#include "strv.h"
+#include "tests.h"
+
+int main(int argc, char *argv[]) {
+        _cleanup_strv_free_ char **maps = NULL;
+        int r;
+
+        log_show_color(true);
+        test_setup_logging(LOG_DEBUG);
+
+        r = get_keymaps(&maps);
+        if (r < 0) {
+                log_error_errno(r, "Failed to acquire keymaps: %m");
+                return 0;
+        }
+
+        STRV_FOREACH(m, maps) {
+                log_info("Found keymap: %s", *m);
+                assert_se(keymap_exists(*m) > 0);
+        }
+
+        return 0;
+}
diff --git a/src/test/test-libcrypt-util.c b/src/test/test-libcrypt-util.c
index ebd520f..f88a9f9 100644
--- a/src/test/test-libcrypt-util.c
+++ b/src/test/test-libcrypt-util.c
@@ -39,7 +39,6 @@
         /* As a warm-up exercise, check if we can hash passwords. */
 
         bool have_sane_hash = false;
-        const char *hash;
 
         FOREACH_STRING(hash,
                        "ew3bU1.hoKk4o",
@@ -68,7 +67,6 @@
         log_info("/* %s */", __func__);
 
         _cleanup_free_ void *cd_data = NULL;
-        const char *i;
         int cd_size = 0;
 
         log_info("sizeof(struct crypt_data): %zu bytes", sizeof(struct crypt_data));
diff --git a/src/test/test-libmount.c b/src/test/test-libmount.c
index bd2381f..9ba428e 100644
--- a/src/test/test-libmount.c
+++ b/src/test/test-libmount.c
@@ -21,7 +21,7 @@
         _cleanup_(mnt_free_iterp) struct libmnt_iter *iter = NULL;
         _cleanup_fclose_ FILE *f = NULL;
 
-        f = fmemopen((char*) string, strlen(string), "re");
+        f = fmemopen((char*) string, strlen(string), "r");
         assert_se(f);
 
         assert_se(libmount_parse(title, f, &table, &iter) >= 0);
@@ -66,7 +66,7 @@
         assert_se(mnt_table_next_fs(table, iter, &fs) == 1);
 }
 
-static void test_libmount_unescaping(void) {
+TEST(libmount_unescaping) {
         test_libmount_unescaping_one(
                         "escaped space + utf8",
                         "729 38 0:59 / /tmp/„zupa\\040zębowa” rw,relatime shared:395 - tmpfs die\\040Brühe rw,seclabel",
@@ -107,9 +107,4 @@
         );
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_libmount_unescaping();
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-limits-util.c b/src/test/test-limits-util.c
new file mode 100644
index 0000000..3b6c8c0
--- /dev/null
+++ b/src/test/test-limits-util.c
@@ -0,0 +1,89 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "format-util.h"
+#include "limits-util.h"
+#include "tests.h"
+
+TEST(physical_memory) {
+        uint64_t p;
+
+        p = physical_memory();
+        assert_se(p > 0);
+        assert_se(p < UINT64_MAX);
+        assert_se(p % page_size() == 0);
+
+        log_info("Memory: %s (%" PRIu64 ")", FORMAT_BYTES(p), p);
+}
+
+TEST(physical_memory_scale) {
+        uint64_t p;
+
+        p = physical_memory();
+
+        assert_se(physical_memory_scale(0, 100) == 0);
+        assert_se(physical_memory_scale(100, 100) == p);
+
+        log_info("Memory original: %" PRIu64, physical_memory());
+        log_info("Memory scaled by 50%%: %" PRIu64, physical_memory_scale(50, 100));
+        log_info("Memory divided by 2: %" PRIu64, physical_memory() / 2);
+        log_info("Page size: %zu", page_size());
+
+        /* There might be an uneven number of pages, hence permit these calculations to be half a page off... */
+        assert_se(page_size()/2 + physical_memory_scale(50, 100) - p/2 <= page_size());
+        assert_se(physical_memory_scale(200, 100) == p*2);
+
+        assert_se(physical_memory_scale(0, 1) == 0);
+        assert_se(physical_memory_scale(1, 1) == p);
+        assert_se(physical_memory_scale(2, 1) == p*2);
+
+        assert_se(physical_memory_scale(0, 2) == 0);
+
+        assert_se(page_size()/2 + physical_memory_scale(1, 2) - p/2 <= page_size());
+        assert_se(physical_memory_scale(2, 2) == p);
+        assert_se(physical_memory_scale(4, 2) == p*2);
+
+        assert_se(physical_memory_scale(0, UINT32_MAX) == 0);
+        assert_se(physical_memory_scale(UINT32_MAX, UINT32_MAX) == p);
+
+        /* overflow */
+        assert_se(physical_memory_scale(UINT64_MAX/4, UINT64_MAX) == UINT64_MAX);
+}
+
+TEST(system_tasks_max) {
+        uint64_t t;
+
+        t = system_tasks_max();
+        assert_se(t > 0);
+        assert_se(t < UINT64_MAX);
+
+        log_info("Max tasks: %" PRIu64, t);
+}
+
+TEST(system_tasks_max_scale) {
+        uint64_t t;
+
+        t = system_tasks_max();
+
+        assert_se(system_tasks_max_scale(0, 100) == 0);
+        assert_se(system_tasks_max_scale(100, 100) == t);
+
+        assert_se(system_tasks_max_scale(0, 1) == 0);
+        assert_se(system_tasks_max_scale(1, 1) == t);
+        assert_se(system_tasks_max_scale(2, 1) == 2*t);
+
+        assert_se(system_tasks_max_scale(0, 2) == 0);
+        assert_se(system_tasks_max_scale(1, 2) == t/2);
+        assert_se(system_tasks_max_scale(2, 2) == t);
+        assert_se(system_tasks_max_scale(3, 2) == (3*t)/2);
+        assert_se(system_tasks_max_scale(4, 2) == t*2);
+
+        assert_se(system_tasks_max_scale(0, UINT32_MAX) == 0);
+        assert_se(system_tasks_max_scale((UINT32_MAX-1)/2, UINT32_MAX-1) == t/2);
+        assert_se(system_tasks_max_scale(UINT32_MAX, UINT32_MAX) == t);
+
+        /* overflow */
+
+        assert_se(system_tasks_max_scale(UINT64_MAX/4, UINT64_MAX) == UINT64_MAX);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-list.c b/src/test/test-list.c
index fc6e1c8..307c1bf 100644
--- a/src/test/test-list.c
+++ b/src/test/test-list.c
@@ -1,20 +1,15 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
-/***
-  Copyright © 2013 Jan Janssen
-***/
 
 #include "list.h"
-#include "util.h"
 
 int main(int argc, const char *argv[]) {
         size_t i;
         typedef struct list_item {
-                LIST_FIELDS(struct list_item, item);
+                LIST_FIELDS(struct list_item, item_list);
         } list_item;
         LIST_HEAD(list_item, head);
         LIST_HEAD(list_item, head2);
         list_item items[4];
-        list_item *cursor;
 
         LIST_HEAD_INIT(head);
         LIST_HEAD_INIT(head2);
@@ -22,233 +17,242 @@
         assert_se(head2 == NULL);
 
         for (i = 0; i < ELEMENTSOF(items); i++) {
-                LIST_INIT(item, &items[i]);
-                assert_se(LIST_JUST_US(item, &items[i]));
-                LIST_PREPEND(item, head, &items[i]);
+                LIST_INIT(item_list, &items[i]);
+                assert_se(LIST_JUST_US(item_list, &items[i]));
+                assert_se(LIST_PREPEND(item_list, head, &items[i]) == &items[i]);
         }
 
         i = 0;
-        LIST_FOREACH_OTHERS(item, cursor, &items[2]) {
+        LIST_FOREACH_OTHERS(item_list, cursor, &items[2]) {
                 i++;
                 assert_se(cursor != &items[2]);
         }
         assert_se(i == ELEMENTSOF(items)-1);
 
         i = 0;
-        LIST_FOREACH_OTHERS(item, cursor, &items[0]) {
+        LIST_FOREACH_OTHERS(item_list, cursor, &items[0]) {
                 i++;
                 assert_se(cursor != &items[0]);
         }
         assert_se(i == ELEMENTSOF(items)-1);
 
         i = 0;
-        LIST_FOREACH_OTHERS(item, cursor, &items[3]) {
+        LIST_FOREACH_OTHERS(item_list, cursor, &items[3]) {
                 i++;
                 assert_se(cursor != &items[3]);
         }
         assert_se(i == ELEMENTSOF(items)-1);
 
-        assert_se(!LIST_JUST_US(item, head));
+        assert_se(!LIST_JUST_US(item_list, head));
 
-        assert_se(items[0].item_next == NULL);
-        assert_se(items[1].item_next == &items[0]);
-        assert_se(items[2].item_next == &items[1]);
-        assert_se(items[3].item_next == &items[2]);
+        assert_se(items[0].item_list_next == NULL);
+        assert_se(items[1].item_list_next == &items[0]);
+        assert_se(items[2].item_list_next == &items[1]);
+        assert_se(items[3].item_list_next == &items[2]);
 
-        assert_se(items[0].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[2]);
-        assert_se(items[2].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[0].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[2]);
+        assert_se(items[2].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_FIND_HEAD(item, &items[0], cursor);
+        list_item *cursor = LIST_FIND_HEAD(item_list, &items[0]);
         assert_se(cursor == &items[3]);
 
-        LIST_FIND_TAIL(item, &items[3], cursor);
+        cursor = LIST_FIND_TAIL(item_list, &items[3]);
         assert_se(cursor == &items[0]);
 
-        LIST_REMOVE(item, head, &items[1]);
-        assert_se(LIST_JUST_US(item, &items[1]));
+        assert_se(LIST_REMOVE(item_list, head, &items[1]) == &items[1]);
+        assert_se(LIST_JUST_US(item_list, &items[1]));
 
-        assert_se(items[0].item_next == NULL);
-        assert_se(items[2].item_next == &items[0]);
-        assert_se(items[3].item_next == &items[2]);
+        assert_se(items[0].item_list_next == NULL);
+        assert_se(items[2].item_list_next == &items[0]);
+        assert_se(items[3].item_list_next == &items[2]);
 
-        assert_se(items[0].item_prev == &items[2]);
-        assert_se(items[2].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[0].item_list_prev == &items[2]);
+        assert_se(items[2].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_INSERT_AFTER(item, head, &items[3], &items[1]);
-        assert_se(items[0].item_next == NULL);
-        assert_se(items[2].item_next == &items[0]);
-        assert_se(items[1].item_next == &items[2]);
-        assert_se(items[3].item_next == &items[1]);
+        assert_se(LIST_INSERT_AFTER(item_list, head, &items[3], &items[1]) == &items[1]);
+        assert_se(items[0].item_list_next == NULL);
+        assert_se(items[2].item_list_next == &items[0]);
+        assert_se(items[1].item_list_next == &items[2]);
+        assert_se(items[3].item_list_next == &items[1]);
 
-        assert_se(items[0].item_prev == &items[2]);
-        assert_se(items[2].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[0].item_list_prev == &items[2]);
+        assert_se(items[2].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_REMOVE(item, head, &items[1]);
-        assert_se(LIST_JUST_US(item, &items[1]));
+        assert_se(LIST_REMOVE(item_list, head, &items[1]) == &items[1]);
+        assert_se(LIST_JUST_US(item_list, &items[1]));
 
-        assert_se(items[0].item_next == NULL);
-        assert_se(items[2].item_next == &items[0]);
-        assert_se(items[3].item_next == &items[2]);
+        assert_se(items[0].item_list_next == NULL);
+        assert_se(items[2].item_list_next == &items[0]);
+        assert_se(items[3].item_list_next == &items[2]);
 
-        assert_se(items[0].item_prev == &items[2]);
-        assert_se(items[2].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[0].item_list_prev == &items[2]);
+        assert_se(items[2].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_INSERT_BEFORE(item, head, &items[2], &items[1]);
-        assert_se(items[0].item_next == NULL);
-        assert_se(items[2].item_next == &items[0]);
-        assert_se(items[1].item_next == &items[2]);
-        assert_se(items[3].item_next == &items[1]);
+        assert_se(LIST_INSERT_BEFORE(item_list, head, &items[2], &items[1]) == &items[1]);
+        assert_se(items[0].item_list_next == NULL);
+        assert_se(items[2].item_list_next == &items[0]);
+        assert_se(items[1].item_list_next == &items[2]);
+        assert_se(items[3].item_list_next == &items[1]);
 
-        assert_se(items[0].item_prev == &items[2]);
-        assert_se(items[2].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[0].item_list_prev == &items[2]);
+        assert_se(items[2].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_REMOVE(item, head, &items[0]);
-        assert_se(LIST_JUST_US(item, &items[0]));
+        assert_se(LIST_REMOVE(item_list, head, &items[0]) == &items[0]);
+        assert_se(LIST_JUST_US(item_list, &items[0]));
 
-        assert_se(items[2].item_next == NULL);
-        assert_se(items[1].item_next == &items[2]);
-        assert_se(items[3].item_next == &items[1]);
+        assert_se(items[2].item_list_next == NULL);
+        assert_se(items[1].item_list_next == &items[2]);
+        assert_se(items[3].item_list_next == &items[1]);
 
-        assert_se(items[2].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[2].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_INSERT_BEFORE(item, head, &items[3], &items[0]);
-        assert_se(items[2].item_next == NULL);
-        assert_se(items[1].item_next == &items[2]);
-        assert_se(items[3].item_next == &items[1]);
-        assert_se(items[0].item_next == &items[3]);
+        assert_se(LIST_INSERT_BEFORE(item_list, head, &items[3], &items[0]) == &items[0]);
+        assert_se(items[2].item_list_next == NULL);
+        assert_se(items[1].item_list_next == &items[2]);
+        assert_se(items[3].item_list_next == &items[1]);
+        assert_se(items[0].item_list_next == &items[3]);
 
-        assert_se(items[2].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[3]);
-        assert_se(items[3].item_prev == &items[0]);
-        assert_se(items[0].item_prev == NULL);
+        assert_se(items[2].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == &items[0]);
+        assert_se(items[0].item_list_prev == NULL);
         assert_se(head == &items[0]);
 
-        LIST_REMOVE(item, head, &items[0]);
-        assert_se(LIST_JUST_US(item, &items[0]));
+        assert_se(LIST_REMOVE(item_list, head, &items[0]) == &items[0]);
+        assert_se(LIST_JUST_US(item_list, &items[0]));
 
-        assert_se(items[2].item_next == NULL);
-        assert_se(items[1].item_next == &items[2]);
-        assert_se(items[3].item_next == &items[1]);
+        assert_se(items[2].item_list_next == NULL);
+        assert_se(items[1].item_list_next == &items[2]);
+        assert_se(items[3].item_list_next == &items[1]);
 
-        assert_se(items[2].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[2].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_INSERT_BEFORE(item, head, NULL, &items[0]);
-        assert_se(items[0].item_next == NULL);
-        assert_se(items[2].item_next == &items[0]);
-        assert_se(items[1].item_next == &items[2]);
-        assert_se(items[3].item_next == &items[1]);
+        assert_se(LIST_INSERT_BEFORE(item_list, head, NULL, &items[0]) == &items[0]);
+        assert_se(items[0].item_list_next == NULL);
+        assert_se(items[2].item_list_next == &items[0]);
+        assert_se(items[1].item_list_next == &items[2]);
+        assert_se(items[3].item_list_next == &items[1]);
 
-        assert_se(items[0].item_prev == &items[2]);
-        assert_se(items[2].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[0].item_list_prev == &items[2]);
+        assert_se(items[2].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_REMOVE(item, head, &items[0]);
-        assert_se(LIST_JUST_US(item, &items[0]));
+        assert_se(LIST_REMOVE(item_list, head, &items[0]) == &items[0]);
+        assert_se(LIST_JUST_US(item_list, &items[0]));
 
-        assert_se(items[2].item_next == NULL);
-        assert_se(items[1].item_next == &items[2]);
-        assert_se(items[3].item_next == &items[1]);
+        assert_se(items[2].item_list_next == NULL);
+        assert_se(items[1].item_list_next == &items[2]);
+        assert_se(items[3].item_list_next == &items[1]);
 
-        assert_se(items[2].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[2].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_REMOVE(item, head, &items[1]);
-        assert_se(LIST_JUST_US(item, &items[1]));
+        assert_se(LIST_REMOVE(item_list, head, &items[1]) == &items[1]);
+        assert_se(LIST_JUST_US(item_list, &items[1]));
 
-        assert_se(items[2].item_next == NULL);
-        assert_se(items[3].item_next == &items[2]);
+        assert_se(items[2].item_list_next == NULL);
+        assert_se(items[3].item_list_next == &items[2]);
 
-        assert_se(items[2].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[2].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_REMOVE(item, head, &items[2]);
-        assert_se(LIST_JUST_US(item, &items[2]));
-        assert_se(LIST_JUST_US(item, head));
+        assert_se(LIST_REMOVE(item_list, head, &items[2]) == &items[2]);
+        assert_se(LIST_JUST_US(item_list, &items[2]));
+        assert_se(LIST_JUST_US(item_list, head));
 
-        LIST_REMOVE(item, head, &items[3]);
-        assert_se(LIST_JUST_US(item, &items[3]));
+        assert_se(LIST_REMOVE(item_list, head, &items[3]) == &items[3]);
+        assert_se(LIST_JUST_US(item_list, &items[3]));
 
         assert_se(head == NULL);
 
         for (i = 0; i < ELEMENTSOF(items); i++) {
-                assert_se(LIST_JUST_US(item, &items[i]));
-                LIST_APPEND(item, head, &items[i]);
+                assert_se(LIST_JUST_US(item_list, &items[i]));
+                assert_se(LIST_APPEND(item_list, head, &items[i]) == &items[i]);
         }
 
-        assert_se(!LIST_JUST_US(item, head));
+        assert_se(!LIST_JUST_US(item_list, head));
 
-        assert_se(items[0].item_next == &items[1]);
-        assert_se(items[1].item_next == &items[2]);
-        assert_se(items[2].item_next == &items[3]);
-        assert_se(items[3].item_next == NULL);
+        assert_se(items[0].item_list_next == &items[1]);
+        assert_se(items[1].item_list_next == &items[2]);
+        assert_se(items[2].item_list_next == &items[3]);
+        assert_se(items[3].item_list_next == NULL);
 
-        assert_se(items[0].item_prev == NULL);
-        assert_se(items[1].item_prev == &items[0]);
-        assert_se(items[2].item_prev == &items[1]);
-        assert_se(items[3].item_prev == &items[2]);
+        assert_se(items[0].item_list_prev == NULL);
+        assert_se(items[1].item_list_prev == &items[0]);
+        assert_se(items[2].item_list_prev == &items[1]);
+        assert_se(items[3].item_list_prev == &items[2]);
 
         for (i = 0; i < ELEMENTSOF(items); i++)
-                LIST_REMOVE(item, head, &items[i]);
+                assert_se(LIST_REMOVE(item_list, head, &items[i]) == &items[i]);
 
         assert_se(head == NULL);
 
         for (i = 0; i < ELEMENTSOF(items) / 2; i++) {
-                LIST_INIT(item, &items[i]);
-                assert_se(LIST_JUST_US(item, &items[i]));
-                LIST_PREPEND(item, head, &items[i]);
+                LIST_INIT(item_list, &items[i]);
+                assert_se(LIST_JUST_US(item_list, &items[i]));
+                assert_se(LIST_PREPEND(item_list, head, &items[i]) == &items[i]);
         }
 
         for (i = ELEMENTSOF(items) / 2; i < ELEMENTSOF(items); i++) {
-                LIST_INIT(item, &items[i]);
-                assert_se(LIST_JUST_US(item, &items[i]));
-                LIST_PREPEND(item, head2, &items[i]);
+                LIST_INIT(item_list, &items[i]);
+                assert_se(LIST_JUST_US(item_list, &items[i]));
+                assert_se(LIST_PREPEND(item_list, head2, &items[i]) == &items[i]);
         }
 
-        assert_se(items[0].item_next == NULL);
-        assert_se(items[1].item_next == &items[0]);
-        assert_se(items[2].item_next == NULL);
-        assert_se(items[3].item_next == &items[2]);
+        assert_se(items[0].item_list_next == NULL);
+        assert_se(items[1].item_list_next == &items[0]);
+        assert_se(items[2].item_list_next == NULL);
+        assert_se(items[3].item_list_next == &items[2]);
 
-        assert_se(items[0].item_prev == &items[1]);
-        assert_se(items[1].item_prev == NULL);
-        assert_se(items[2].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[0].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == NULL);
+        assert_se(items[2].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_JOIN(item, head2, head);
+        assert_se(LIST_JOIN(item_list, head2, head) == head2);
         assert_se(head == NULL);
 
-        assert_se(items[0].item_next == NULL);
-        assert_se(items[1].item_next == &items[0]);
-        assert_se(items[2].item_next == &items[1]);
-        assert_se(items[3].item_next == &items[2]);
+        assert_se(items[0].item_list_next == NULL);
+        assert_se(items[1].item_list_next == &items[0]);
+        assert_se(items[2].item_list_next == &items[1]);
+        assert_se(items[3].item_list_next == &items[2]);
 
-        assert_se(items[0].item_prev == &items[1]);
-        assert_se(items[1].item_prev == &items[2]);
-        assert_se(items[2].item_prev == &items[3]);
-        assert_se(items[3].item_prev == NULL);
+        assert_se(items[0].item_list_prev == &items[1]);
+        assert_se(items[1].item_list_prev == &items[2]);
+        assert_se(items[2].item_list_prev == &items[3]);
+        assert_se(items[3].item_list_prev == NULL);
 
-        LIST_JOIN(item, head, head2);
+        assert_se(LIST_JOIN(item_list, head, head2) == head);
         assert_se(head2 == NULL);
-        assert_se(!LIST_IS_EMPTY(head));
+        assert_se(head);
 
         for (i = 0; i < ELEMENTSOF(items); i++)
-                LIST_REMOVE(item, head, &items[i]);
+                assert_se(LIST_REMOVE(item_list, head, &items[i]) == &items[i]);
 
         assert_se(head == NULL);
 
+        assert_se(LIST_PREPEND(item_list, head, items + 0) == items + 0);
+        assert_se(LIST_PREPEND(item_list, head, items + 1) == items + 1);
+        assert_se(LIST_PREPEND(item_list, head, items + 2) == items + 2);
+
+        assert_se(LIST_POP(item_list, head) == items + 2);
+        assert_se(LIST_POP(item_list, head) == items + 1);
+        assert_se(LIST_POP(item_list, head) == items + 0);
+        assert_se(LIST_POP(item_list, head) == NULL);
+
         return 0;
 }
diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c
index 1a0a057..f22fa42 100644
--- a/src/test/test-load-fragment.c
+++ b/src/test/test-load-fragment.c
@@ -5,6 +5,8 @@
 #include <stdio.h>
 #include <unistd.h>
 
+#include "sd-id128.h"
+
 #include "all-units.h"
 #include "alloc-util.h"
 #include "capability-util.h"
@@ -20,6 +22,8 @@
 #include "load-fragment.h"
 #include "macro.h"
 #include "memory-util.h"
+#include "open-file.h"
+#include "pcre2-util.h"
 #include "rm-rf.h"
 #include "specifier.h"
 #include "string-util.h"
@@ -31,7 +35,11 @@
 /* Nontrivial value serves as a placeholder to check that parsing function (didn't) change it */
 #define CGROUP_LIMIT_DUMMY      3
 
-static int test_unit_file_get_set(void) {
+static char *runtime_dir = NULL;
+
+STATIC_DESTRUCTOR_REGISTER(runtime_dir, rm_rf_physical_and_freep);
+
+TEST_RET(unit_file_get_set) {
         int r;
         Hashmap *h;
         UnitFileList *p;
@@ -39,7 +47,7 @@
         h = hashmap_new(&string_hash_ops);
         assert_se(h);
 
-        r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL);
+        r = unit_file_get_list(LOOKUP_SCOPE_SYSTEM, NULL, h, NULL, NULL);
         if (IN_SET(r, -EPERM, -EACCES))
                 return log_tests_skipped_errno(r, "unit_file_get_list");
 
@@ -66,10 +74,10 @@
 
         assert_se(c);
         log_info("expect: \"%s\" [\"%s\" \"%s\" \"%s\"]",
-                 path, argv0 ?: path, argv1, argv2);
+                 path, argv0 ?: path, strnull(argv1), strnull(argv2));
         n = strv_length(c->argv);
         log_info("actual: \"%s\" [\"%s\" \"%s\" \"%s\"]",
-                 c->path, c->argv[0], n > 0 ? c->argv[1] : NULL, n > 1 ? c->argv[2] : NULL);
+                 c->path, c->argv[0], n > 0 ? c->argv[1] : "(null)", n > 1 ? c->argv[2] : "(null)");
         assert_se(streq(c->path, path));
         assert_se(streq(c->argv[0], argv0 ?: path));
         if (n > 0)
@@ -79,7 +87,7 @@
         assert_se(!!(c->flags & EXEC_COMMAND_IGNORE_FAILURE) == ignore);
 }
 
-static void test_config_parse_exec(void) {
+TEST(config_parse_exec) {
         /* int config_parse_exec(
                  const char *unit,
                  const char *filename,
@@ -98,14 +106,14 @@
         _cleanup_(manager_freep) Manager *m = NULL;
         _cleanup_(unit_freep) Unit *u = NULL;
 
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
         if (manager_errno_skip_test(r)) {
                 log_notice_errno(r, "Skipping test: manager_new: %m");
                 return;
         }
 
         assert_se(r >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         assert_se(u = unit_new(m, sizeof(Service)));
 
@@ -438,7 +446,7 @@
         exec_command_free_list(c);
 }
 
-static void test_config_parse_log_extra_fields(void) {
+TEST(config_parse_log_extra_fields) {
         /* int config_parse_log_extra_fields(
                 const char *unit,
                 const char *filename,
@@ -457,14 +465,14 @@
         _cleanup_(unit_freep) Unit *u = NULL;
         ExecContext c = {};
 
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
         if (manager_errno_skip_test(r)) {
                 log_notice_errno(r, "Skipping test: manager_new: %m");
                 return;
         }
 
         assert_se(r >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         assert_se(u = unit_new(m, sizeof(Service)));
 
@@ -502,86 +510,103 @@
         log_info("/* %s – bye */", __func__);
 }
 
-static void test_install_printf(void) {
+TEST(install_printf, .sd_booted = true) {
         char    name[] = "name.service",
                 path[] = "/run/systemd/system/name.service";
-        UnitFileInstallInfo i = { .name = name, .path = path, };
-        UnitFileInstallInfo i2 = { .name= name, .path = path, };
+        InstallInfo i = { .name = name, .path = path, };
+        InstallInfo i2 = { .name= name, .path = path, };
         char    name3[] = "name@inst.service",
                 path3[] = "/run/systemd/system/name.service";
-        UnitFileInstallInfo i3 = { .name = name3, .path = path3, };
-        UnitFileInstallInfo i4 = { .name = name3, .path = path3, };
+        InstallInfo i3 = { .name = name3, .path = path3, };
+        InstallInfo i4 = { .name = name3, .path = path3, };
 
         _cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *gid = NULL, *group = NULL, *uid = NULL, *user = NULL;
 
-        assert_se(specifier_machine_id('m', NULL, NULL, NULL, &mid) >= 0 && mid);
-        assert_se(specifier_boot_id('b', NULL, NULL, NULL, &bid) >= 0 && bid);
+        if (sd_id128_get_machine(NULL) >= 0)
+                assert_se(specifier_machine_id('m', NULL, NULL, NULL, &mid) >= 0 && mid);
+        if (sd_booted() > 0)
+                assert_se(specifier_boot_id('b', NULL, NULL, NULL, &bid) >= 0 && bid);
         assert_se(host = gethostname_malloc());
         assert_se(group = gid_to_name(getgid()));
         assert_se(asprintf(&gid, UID_FMT, getgid()) >= 0);
         assert_se(user = uid_to_name(getuid()));
         assert_se(asprintf(&uid, UID_FMT, getuid()) >= 0);
 
-#define expect(src, pattern, result)                                    \
+#define expect(scope, src, pattern, result)                             \
         do {                                                            \
-                _cleanup_free_ char *t = NULL;                          \
-                _cleanup_free_ char                                     \
-                        *d1 = strdup(i.name),                           \
-                        *d2 = strdup(i.path);                           \
-                assert_se(install_name_printf(&src, pattern, NULL, &t) >= 0 || !result); \
+                _cleanup_free_ char *t = NULL,                          \
+                        *d1 = ASSERT_PTR(strdup(i.name)),               \
+                        *d2 = ASSERT_PTR(strdup(i.path));               \
+                int r = install_name_printf(scope, &src, pattern, &t);  \
+                assert_se(result ? r >= 0 : r < 0);                     \
                 memzero(i.name, strlen(i.name));                        \
                 memzero(i.path, strlen(i.path));                        \
-                assert_se(d1 && d2);                                    \
                 if (result) {                                           \
                         printf("%s\n", t);                              \
                         assert_se(streq(t, result));                    \
-                } else assert_se(t == NULL);                            \
+                } else                                                  \
+                        assert_se(!t);                                  \
                 strcpy(i.name, d1);                                     \
                 strcpy(i.path, d2);                                     \
         } while (false)
 
-        expect(i, "%n", "name.service");
-        expect(i, "%N", "name");
-        expect(i, "%p", "name");
-        expect(i, "%i", "");
-        expect(i, "%j", "name");
-        expect(i, "%g", group);
-        expect(i, "%G", gid);
-        expect(i, "%u", user);
-        expect(i, "%U", uid);
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%n", "name.service");
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%N", "name");
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%p", "name");
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%i", "");
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%j", "name");
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%g", "root");
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%G", "0");
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%u", "root");
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%U", "0");
 
-        expect(i, "%m", mid);
-        expect(i, "%b", bid);
-        expect(i, "%H", host);
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%m", mid);
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%b", bid);
+        expect(LOOKUP_SCOPE_SYSTEM, i, "%H", host);
 
-        expect(i2, "%g", group);
-        expect(i2, "%G", gid);
-        expect(i2, "%u", user);
-        expect(i2, "%U", uid);
+        expect(LOOKUP_SCOPE_SYSTEM, i2, "%g", "root");
+        expect(LOOKUP_SCOPE_SYSTEM, i2, "%G", "0");
+        expect(LOOKUP_SCOPE_SYSTEM, i2, "%u", "root");
+        expect(LOOKUP_SCOPE_SYSTEM, i2, "%U", "0");
 
-        expect(i3, "%n", "name@inst.service");
-        expect(i3, "%N", "name@inst");
-        expect(i3, "%p", "name");
-        expect(i3, "%g", group);
-        expect(i3, "%G", gid);
-        expect(i3, "%u", user);
-        expect(i3, "%U", uid);
+        expect(LOOKUP_SCOPE_USER, i2, "%g", group);
+        expect(LOOKUP_SCOPE_USER, i2, "%G", gid);
+        expect(LOOKUP_SCOPE_USER, i2, "%u", user);
+        expect(LOOKUP_SCOPE_USER, i2, "%U", uid);
 
-        expect(i3, "%m", mid);
-        expect(i3, "%b", bid);
-        expect(i3, "%H", host);
+        /* gcc-12.0.1-0.9.fc36.x86_64 insist that streq(…, NULL) is called,
+         * even though the call is inside of a conditional where the pointer is checked. :( */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wnonnull"
+        expect(LOOKUP_SCOPE_GLOBAL, i2, "%g", NULL);
+        expect(LOOKUP_SCOPE_GLOBAL, i2, "%G", NULL);
+        expect(LOOKUP_SCOPE_GLOBAL, i2, "%u", NULL);
+        expect(LOOKUP_SCOPE_GLOBAL, i2, "%U", NULL);
+#pragma GCC diagnostic pop
 
-        expect(i4, "%g", group);
-        expect(i4, "%G", gid);
-        expect(i4, "%u", user);
-        expect(i4, "%U", uid);
+        expect(LOOKUP_SCOPE_SYSTEM, i3, "%n", "name@inst.service");
+        expect(LOOKUP_SCOPE_SYSTEM, i3, "%N", "name@inst");
+        expect(LOOKUP_SCOPE_SYSTEM, i3, "%p", "name");
+        expect(LOOKUP_SCOPE_USER, i3, "%g", group);
+        expect(LOOKUP_SCOPE_USER, i3, "%G", gid);
+        expect(LOOKUP_SCOPE_USER, i3, "%u", user);
+        expect(LOOKUP_SCOPE_USER, i3, "%U", uid);
+
+        expect(LOOKUP_SCOPE_SYSTEM, i3, "%m", mid);
+        expect(LOOKUP_SCOPE_SYSTEM, i3, "%b", bid);
+        expect(LOOKUP_SCOPE_SYSTEM, i3, "%H", host);
+
+        expect(LOOKUP_SCOPE_USER, i4, "%g", group);
+        expect(LOOKUP_SCOPE_USER, i4, "%G", gid);
+        expect(LOOKUP_SCOPE_USER, i4, "%u", user);
+        expect(LOOKUP_SCOPE_USER, i4, "%U", uid);
 }
 
 static uint64_t make_cap(int cap) {
         return ((uint64_t) 1ULL << (uint64_t) cap);
 }
 
-static void test_config_parse_capability_set(void) {
+TEST(config_parse_capability_set) {
         /* int config_parse_capability_set(
                  const char *unit,
                  const char *filename,
@@ -634,7 +659,7 @@
         assert_se(capability_bounding_set == (make_cap(CAP_NET_RAW) | make_cap(CAP_NET_ADMIN)));
 }
 
-static void test_config_parse_rlimit(void) {
+TEST(config_parse_rlimit) {
         struct rlimit * rl[_RLIMIT_MAX] = {};
 
         assert_se(config_parse_rlimit(NULL, "fake", 1, "section", 1, "LimitNOFILE", RLIMIT_NOFILE, "55", rl, NULL) >= 0);
@@ -748,7 +773,7 @@
         rl[RLIMIT_RTTIME] = mfree(rl[RLIMIT_RTTIME]);
 }
 
-static void test_config_parse_pass_environ(void) {
+TEST(config_parse_pass_environ) {
         /* int config_parse_pass_environ(
                  const char *unit,
                  const char *filename,
@@ -785,11 +810,75 @@
         assert_se(streq(passenv[0], "normal_name"));
 }
 
-static void test_unit_dump_config_items(void) {
+TEST(config_parse_unit_env_file) {
+        /* int config_parse_unit_env_file(
+                 const char *unit,
+                 const char *filename,
+                 unsigned line,
+                 const char *section,
+                 unsigned section_line,
+                 const char *lvalue,
+                 int ltype,
+                 const char *rvalue,
+                 void *data,
+                 void *userdata) */
+
+        _cleanup_(manager_freep) Manager *m = NULL;
+        Unit *u;
+        _cleanup_strv_free_ char **files = NULL;
+        int r;
+
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+        if (manager_errno_skip_test(r)) {
+                log_notice_errno(r, "Skipping test: manager_new: %m");
+                return;
+        }
+
+        assert_se(r >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+
+        assert_se(u = unit_new(m, sizeof(Service)));
+        assert_se(unit_add_name(u, "foobar.service") == 0);
+
+        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
+                                      "EnvironmentFile", 0, "not-absolute",
+                                       &files, u);
+        assert_se(r == 0);
+        assert_se(strv_isempty(files));
+
+        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
+                                      "EnvironmentFile", 0, "/absolute1",
+                                       &files, u);
+        assert_se(r == 0);
+        assert_se(strv_length(files) == 1);
+
+        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
+                                      "EnvironmentFile", 0, "/absolute2",
+                                       &files, u);
+        assert_se(r == 0);
+        assert_se(strv_length(files) == 2);
+        assert_se(streq(files[0], "/absolute1"));
+        assert_se(streq(files[1], "/absolute2"));
+
+        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
+                                       "EnvironmentFile", 0, "",
+                                       &files, u);
+        assert_se(r == 0);
+        assert_se(strv_isempty(files));
+
+        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
+                                       "EnvironmentFile", 0, "/path/%n.conf",
+                                       &files, u);
+        assert_se(r == 0);
+        assert_se(strv_length(files) == 1);
+        assert_se(streq(files[0], "/path/foobar.service.conf"));
+}
+
+TEST(unit_dump_config_items) {
         unit_dump_config_items(stdout);
 }
 
-static void test_config_parse_memory_limit(void) {
+TEST(config_parse_memory_limit) {
         /* int config_parse_memory_limit(
                 const char *unit,
                 const char *filename,
@@ -845,27 +934,171 @@
 
 }
 
-int main(int argc, char *argv[]) {
-        _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
+TEST(contains_instance_specifier_superset) {
+        assert_se(contains_instance_specifier_superset("foobar@a%i"));
+        assert_se(contains_instance_specifier_superset("foobar@%ia"));
+        assert_se(contains_instance_specifier_superset("foobar@%n"));
+        assert_se(contains_instance_specifier_superset("foobar@%n.service"));
+        assert_se(contains_instance_specifier_superset("foobar@%N"));
+        assert_se(contains_instance_specifier_superset("foobar@%N.service"));
+        assert_se(contains_instance_specifier_superset("foobar@baz.%N.service"));
+        assert_se(contains_instance_specifier_superset("@%N.service"));
+        assert_se(contains_instance_specifier_superset("@%N"));
+        assert_se(contains_instance_specifier_superset("@%a%N"));
+
+        assert_se(!contains_instance_specifier_superset("foobar@%i.service"));
+        assert_se(!contains_instance_specifier_superset("foobar%ia.service"));
+        assert_se(!contains_instance_specifier_superset("foobar@%%n.service"));
+        assert_se(!contains_instance_specifier_superset("foobar@baz.service"));
+        assert_se(!contains_instance_specifier_superset("%N.service"));
+        assert_se(!contains_instance_specifier_superset("%N"));
+        assert_se(!contains_instance_specifier_superset("@%aN"));
+        assert_se(!contains_instance_specifier_superset("@%a%b"));
+}
+
+TEST(unit_is_recursive_template_dependency) {
+        _cleanup_(manager_freep) Manager *m = NULL;
+        Unit *u;
         int r;
 
-        test_setup_logging(LOG_INFO);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+        if (manager_errno_skip_test(r)) {
+                log_notice_errno(r, "Skipping test: manager_new: %m");
+                return;
+        }
 
-        r = enter_cgroup_subroot(NULL);
-        if (r == -ENOMEDIUM)
+        assert_se(r >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+
+        assert_se(u = unit_new(m, sizeof(Service)));
+        assert_se(unit_add_name(u, "foobar@1.service") == 0);
+        u->fragment_path = strdup("/foobar@.service");
+
+        assert_se(hashmap_put_strdup(&m->unit_id_map, "foobar@foobar@123.service", "/foobar@.service"));
+        assert_se(hashmap_put_strdup(&m->unit_id_map, "foobar@foobar@456.service", "/custom.service"));
+
+        /* Test that %n, %N and any extension of %i specifiers in the instance are detected as recursive. */
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.service", "foobar@%N.service") == 1);
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.service", "foobar@%n.service") == 1);
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.service", "foobar@a%i.service") == 1);
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.service", "foobar@%ia.service") == 1);
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.service", "foobar@%x%n.service") == 1);
+        /* Test that %i on its own is not detected as recursive. */
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.service", "foobar@%i.service") == 0);
+        /* Test that a specifier other than %i, %n and %N is not detected as recursive. */
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.service", "foobar@%xn.service") == 0);
+        /* Test that an expanded specifier is not detected as recursive. */
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.service", "foobar@foobar@123.service") == 0);
+        /* Test that a dependency with a custom fragment path is not detected as recursive. */
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@456.service", "foobar@%n.service") == 0);
+        /* Test that a dependency without a fragment path is not detected as recursive. */
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@789.service", "foobar@%n.service") == 0);
+        /* Test that a dependency with a different prefix is not detected as recursive. */
+        assert_se(unit_is_likely_recursive_template_dependency(u, "quux@foobar@123.service", "quux@%n.service") == 0);
+        /* Test that a dependency of a different type is not detected as recursive. */
+        assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.mount", "foobar@%n.mount") == 0);
+}
+
+#define TEST_PATTERN(_regex, _allowed_patterns_count, _denied_patterns_count)   \
+        {                                                                       \
+                .regex = _regex,                                                \
+                .allowed_patterns_count = _allowed_patterns_count,              \
+                .denied_patterns_count = _denied_patterns_count                 \
+        }
+
+TEST(config_parse_log_filter_patterns) {
+        ExecContext c = {};
+
+        static const struct {
+                const char *regex;
+                size_t allowed_patterns_count;
+                size_t denied_patterns_count;
+        } regex_tests[] = {
+                TEST_PATTERN("", 0, 0),
+                TEST_PATTERN(".*", 1, 0),
+                TEST_PATTERN("~.*", 1, 1),
+                TEST_PATTERN("", 0, 0),
+                TEST_PATTERN("~.*", 0, 1),
+                TEST_PATTERN("[.*", 0, 1),              /* Invalid pattern. */
+                TEST_PATTERN(".*gg.*", 1, 1),
+                TEST_PATTERN("~.*", 1, 1),              /* Already in the patterns list. */
+                TEST_PATTERN("[.*", 1, 1),              /* Invalid pattern. */
+                TEST_PATTERN("\\x7ehello", 2, 1),
+                TEST_PATTERN("", 0, 0),
+                TEST_PATTERN("~foobar", 0, 1),
+        };
+
+        if (ERRNO_IS_NOT_SUPPORTED(dlopen_pcre2()))
+                return (void) log_tests_skipped("PCRE2 support is not available");
+
+        for (size_t i = 0; i < ELEMENTSOF(regex_tests); i++) {
+                assert_se(config_parse_log_filter_patterns(NULL, "fake", 1, "section", 1, "LogFilterPatterns", 1,
+                                                           regex_tests[i].regex, &c, NULL) >= 0);
+
+                assert_se(set_size(c.log_filter_allowed_patterns) == regex_tests[i].allowed_patterns_count);
+                assert_se(set_size(c.log_filter_denied_patterns) == regex_tests[i].denied_patterns_count);
+
+                /* Ensure `~` is properly removed */
+                const char *p;
+                SET_FOREACH(p, c.log_filter_allowed_patterns)
+                        assert_se(p && p[0] != '~');
+                SET_FOREACH(p, c.log_filter_denied_patterns)
+                        assert_se(p && p[0] != '~');
+        }
+
+        exec_context_done(&c);
+}
+
+TEST(config_parse_open_file) {
+        _cleanup_(manager_freep) Manager *m = NULL;
+        _cleanup_(unit_freep) Unit *u = NULL;
+        _cleanup_(open_file_freep) OpenFile *of = NULL;
+        int r;
+
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+        if (manager_errno_skip_test(r)) {
+                log_notice_errno(r, "Skipping test: manager_new: %m");
+                return;
+        }
+
+        assert_se(r >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+
+        assert_se(u = unit_new(m, sizeof(Service)));
+        assert_se(unit_add_name(u, "foobar.service") == 0);
+
+        r = config_parse_open_file(NULL, "fake", 1, "section", 1,
+                                   "OpenFile", 0, "/proc/1/ns/mnt:host-mount-namespace:read-only",
+                                   &of, u);
+        assert_se(r >= 0);
+        assert_se(of);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "host-mount-namespace"));
+        assert_se(of->flags == OPENFILE_READ_ONLY);
+
+        of = open_file_free(of);
+        r = config_parse_open_file(NULL, "fake", 1, "section", 1,
+                                   "OpenFile", 0, "/proc/1/ns/mnt::read-only",
+                                   &of, u);
+        assert_se(r >= 0);
+        assert_se(of);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "mnt"));
+        assert_se(of->flags == OPENFILE_READ_ONLY);
+
+        r = config_parse_open_file(NULL, "fake", 1, "section", 1,
+                                   "OpenFile", 0, "",
+                                   &of, u);
+        assert_se(r >= 0);
+        assert_se(!of);
+}
+
+static int intro(void) {
+        if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
                 return log_tests_skipped("cgroupfs not available");
 
         assert_se(runtime_dir = setup_fake_runtime_dir());
-
-        r = test_unit_file_get_set();
-        test_config_parse_exec();
-        test_config_parse_log_extra_fields();
-        test_config_parse_capability_set();
-        test_config_parse_rlimit();
-        test_config_parse_pass_environ();
-        TEST_REQ_RUNNING_SYSTEMD(test_install_printf());
-        test_unit_dump_config_items();
-        test_config_parse_memory_limit();
-
-        return r;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-local-addresses.c b/src/test/test-local-addresses.c
index 1063aeb..5a02465 100644
--- a/src/test/test-local-addresses.c
+++ b/src/test/test-local-addresses.c
@@ -9,9 +9,7 @@
 #include "tests.h"
 
 static void print_local_addresses(struct local_address *a, unsigned n) {
-        unsigned i;
-
-        for (i = 0; i < n; i++) {
+        for (unsigned i = 0; i < n; i++) {
                 _cleanup_free_ char *b = NULL;
 
                 assert_se(in_addr_to_string(a[i].family, &a[i].address, &b) >= 0);
@@ -19,53 +17,45 @@
         }
 }
 
-int main(int argc, char *argv[]) {
+TEST(local_addresses) {
         struct local_address *a = NULL;
-        int n, n_ipv4, n_ipv6;
-
-        test_setup_logging(LOG_DEBUG);
+        int n;
 
         n = local_addresses(NULL, 0, AF_INET, &a);
         assert_se(n >= 0);
         log_debug("/* Local Addresses(ifindex:0, AF_INET) */");
         print_local_addresses(a, (unsigned) n);
         a = mfree(a);
-        n_ipv4 = n;
 
         n = local_addresses(NULL, 0, AF_INET6, &a);
         assert_se(n >= 0);
         log_debug("/* Local Addresses(ifindex:0, AF_INET6) */");
         print_local_addresses(a, (unsigned) n);
         a = mfree(a);
-        n_ipv6 = n;
 
         n = local_addresses(NULL, 0, AF_UNSPEC, &a);
         assert_se(n >= 0);
         log_debug("/* Local Addresses(ifindex:0, AF_UNSPEC) */");
         print_local_addresses(a, (unsigned) n);
         a = mfree(a);
-        assert_se(n == n_ipv4 + n_ipv6);
 
         n = local_addresses(NULL, 1, AF_INET, &a);
         assert_se(n >= 0);
         log_debug("/* Local Addresses(ifindex:1, AF_INET) */");
         print_local_addresses(a, (unsigned) n);
         a = mfree(a);
-        n_ipv4 = n;
 
         n = local_addresses(NULL, 1, AF_INET6, &a);
         assert_se(n >= 0);
         log_debug("/* Local Addresses(ifindex:1, AF_INET6) */");
         print_local_addresses(a, (unsigned) n);
         a = mfree(a);
-        n_ipv6 = n;
 
         n = local_addresses(NULL, 1, AF_UNSPEC, &a);
         assert_se(n >= 0);
         log_debug("/* Local Addresses(ifindex:1, AF_UNSPEC) */");
         print_local_addresses(a, (unsigned) n);
         a = mfree(a);
-        assert_se(n == n_ipv4 + n_ipv6);
 
         n = local_gateways(NULL, 0, AF_UNSPEC, &a);
         assert_se(n >= 0);
@@ -78,6 +68,6 @@
         log_debug("/* Local Outbounds */");
         print_local_addresses(a, (unsigned) n);
         free(a);
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-locale-util.c b/src/test/test-locale-util.c
index 972423e..dd96af6 100644
--- a/src/test/test-locale-util.c
+++ b/src/test/test-locale-util.c
@@ -1,14 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "glyph-util.h"
 #include "kbd-util.h"
 #include "locale-util.h"
 #include "macro.h"
 #include "strv.h"
-#include "util.h"
+#include "tests.h"
 
-static void test_get_locales(void) {
+TEST(get_locales) {
         _cleanup_strv_free_ char **locales = NULL;
-        char **p;
         int r;
 
         r = get_locales(&locales);
@@ -21,9 +21,7 @@
         }
 }
 
-static void test_locale_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(locale_is_valid) {
         assert_se(locale_is_valid("en_EN.utf8"));
         assert_se(locale_is_valid("fr_FR.utf8"));
         assert_se(locale_is_valid("fr_FR@euro"));
@@ -36,9 +34,7 @@
         assert_se(!locale_is_valid("\x01gar\x02 bage\x03"));
 }
 
-static void test_locale_is_installed(void) {
-        log_info("/* %s */", __func__);
-
+TEST(locale_is_installed) {
         /* Always available */
         assert_se(locale_is_installed("POSIX") > 0);
         assert_se(locale_is_installed("C") > 0);
@@ -58,13 +54,10 @@
         assert_se(locale_is_installed("zz_ZZ") == 0);
 }
 
-static void test_keymaps(void) {
+TEST(keymaps) {
         _cleanup_strv_free_ char **kmaps = NULL;
-        char **p;
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(!keymap_is_valid(""));
         assert_se(!keymap_is_valid("/usr/bin/foo"));
         assert_se(!keymap_is_valid("\x01gar\x02 bage\x03"));
@@ -88,10 +81,8 @@
 }
 
 #define dump_glyph(x) log_info(STRINGIFY(x) ": %s", special_glyph(x))
-static void dump_special_glyphs(void) {
-        assert_cc(SPECIAL_GLYPH_TOUCH + 1 == _SPECIAL_GLYPH_MAX);
-
-        log_info("/* %s */", __func__);
+TEST(dump_special_glyphs) {
+        assert_cc(SPECIAL_GLYPH_WARNING_SIGN + 1 == _SPECIAL_GLYPH_MAX);
 
         log_info("is_locale_utf8: %s", yes_no(is_locale_utf8()));
 
@@ -99,13 +90,18 @@
         dump_glyph(SPECIAL_GLYPH_TREE_BRANCH);
         dump_glyph(SPECIAL_GLYPH_TREE_RIGHT);
         dump_glyph(SPECIAL_GLYPH_TREE_SPACE);
+        dump_glyph(SPECIAL_GLYPH_TREE_TOP);
+        dump_glyph(SPECIAL_GLYPH_VERTICAL_DOTTED);
         dump_glyph(SPECIAL_GLYPH_TRIANGULAR_BULLET);
         dump_glyph(SPECIAL_GLYPH_BLACK_CIRCLE);
         dump_glyph(SPECIAL_GLYPH_WHITE_CIRCLE);
         dump_glyph(SPECIAL_GLYPH_MULTIPLICATION_SIGN);
         dump_glyph(SPECIAL_GLYPH_CIRCLE_ARROW);
         dump_glyph(SPECIAL_GLYPH_BULLET);
-        dump_glyph(SPECIAL_GLYPH_ARROW);
+        dump_glyph(SPECIAL_GLYPH_ARROW_LEFT);
+        dump_glyph(SPECIAL_GLYPH_ARROW_RIGHT);
+        dump_glyph(SPECIAL_GLYPH_ARROW_UP);
+        dump_glyph(SPECIAL_GLYPH_ARROW_DOWN);
         dump_glyph(SPECIAL_GLYPH_ELLIPSIS);
         dump_glyph(SPECIAL_GLYPH_MU);
         dump_glyph(SPECIAL_GLYPH_CHECK_MARK);
@@ -120,15 +116,10 @@
         dump_glyph(SPECIAL_GLYPH_DEPRESSED_SMILEY);
         dump_glyph(SPECIAL_GLYPH_LOCK_AND_KEY);
         dump_glyph(SPECIAL_GLYPH_TOUCH);
+        dump_glyph(SPECIAL_GLYPH_RECYCLING);
+        dump_glyph(SPECIAL_GLYPH_DOWNLOAD);
+        dump_glyph(SPECIAL_GLYPH_SPARKLES);
+        dump_glyph(SPECIAL_GLYPH_WARNING_SIGN);
 }
 
-int main(int argc, char *argv[]) {
-        test_get_locales();
-        test_locale_is_valid();
-        test_locale_is_installed();
-        test_keymaps();
-
-        dump_special_glyphs();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-log.c b/src/test/test-log.c
index 861309e..30c536d 100644
--- a/src/test/test-log.c
+++ b/src/test/test-log.c
@@ -7,7 +7,7 @@
 #include "log.h"
 #include "process-util.h"
 #include "string-util.h"
-#include "util.h"
+#include "strv.h"
 
 assert_cc(IS_SYNTHETIC_ERRNO(SYNTHETIC_ERRNO(EINVAL)));
 assert_cc(!IS_SYNTHETIC_ERRNO(EINVAL));
@@ -23,7 +23,7 @@
         log_info("RELATIVE_SOURCE_PATH: %s", RELATIVE_SOURCE_PATH);
         log_info("PROJECT_FILE: %s", PROJECT_FILE);
 
-        assert(startswith(__FILE__, RELATIVE_SOURCE_PATH "/"));
+        assert_se(startswith(__FILE__, RELATIVE_SOURCE_PATH "/"));
 }
 
 static void test_log_struct(void) {
@@ -31,16 +31,21 @@
                    "MESSAGE=Waldo PID="PID_FMT" (no errno)", getpid_cached(),
                    "SERVICE=piepapo");
 
-        log_struct_errno(LOG_INFO, EILSEQ,
-                   "MESSAGE=Waldo PID="PID_FMT": %m (normal)", getpid_cached(),
+        /* The same as above, just using LOG_MESSAGE(), which is generally recommended */
+        log_struct(LOG_INFO,
+                   LOG_MESSAGE("Waldo PID="PID_FMT" (no errno)", getpid_cached()),
                    "SERVICE=piepapo");
 
+        log_struct_errno(LOG_INFO, EILSEQ,
+                         LOG_MESSAGE("Waldo PID="PID_FMT": %m (normal)", getpid_cached()),
+                         "SERVICE=piepapo");
+
         log_struct_errno(LOG_INFO, SYNTHETIC_ERRNO(EILSEQ),
-                   "MESSAGE=Waldo PID="PID_FMT": %m (synthetic)", getpid_cached(),
-                   "SERVICE=piepapo");
+                         LOG_MESSAGE("Waldo PID="PID_FMT": %m (synthetic)", getpid_cached()),
+                         "SERVICE=piepapo");
 
         log_struct(LOG_INFO,
-                   "MESSAGE=Foobar PID="PID_FMT, getpid_cached(),
+                   LOG_MESSAGE("Foobar PID="PID_FMT, getpid_cached()),
                    "FORMAT_STR_TEST=1=%i A=%c 2=%hi 3=%li 4=%lli 1=%p foo=%s 2.5=%g 3.5=%g 4.5=%Lg",
                    (int) 1, 'A', (short) 2, (long int) 3, (long long int) 4, (void*) 1, "foo", (float) 2.5f, (double) 3.5, (long double) 4.5,
                    "SUFFIX=GOT IT");
@@ -65,21 +70,89 @@
         assert_se(log_syntax("unit", LOG_ERR, "filename", 10, SYNTHETIC_ERRNO(ENOTTY), "ENOTTY: %s: %m", "hogehoge") == -ENOTTY);
 }
 
-int main(int argc, char* argv[]) {
-        int target;
+static void test_log_context(void) {
+        {
+                char **strv = STRV_MAKE("FIRST=abc", "SECOND=qrs");
 
+                LOG_CONTEXT_PUSH("THIRD=pfs");
+                LOG_CONTEXT_PUSH("FOURTH=def");
+                LOG_CONTEXT_PUSH_STRV(strv);
+                LOG_CONTEXT_PUSH_STRV(strv);
+
+                /* Test that the log context was set up correctly. */
+                assert_se(log_context_num_contexts() == 4);
+                assert_se(log_context_num_fields() == 6);
+
+                /* Test that everything still works with modifications to the log context. */
+                test_log_struct();
+                test_long_lines();
+                test_log_syntax();
+
+                {
+                        LOG_CONTEXT_PUSH("FIFTH=123");
+                        LOG_CONTEXT_PUSH_STRV(strv);
+
+                        /* Check that our nested fields got added correctly. */
+                        assert_se(log_context_num_contexts() == 6);
+                        assert_se(log_context_num_fields() == 9);
+
+                        /* Test that everything still works in a nested block. */
+                        test_log_struct();
+                        test_long_lines();
+                        test_log_syntax();
+                }
+
+                /* Check that only the fields from the nested block got removed. */
+                assert_se(log_context_num_contexts() == 4);
+                assert_se(log_context_num_fields() == 6);
+        }
+
+        assert_se(log_context_num_contexts() == 0);
+        assert_se(log_context_num_fields() == 0);
+
+        {
+                _cleanup_(log_context_freep) LogContext *ctx = NULL;
+
+                char **strv = STRV_MAKE("SIXTH=ijn", "SEVENTH=PRP");
+                assert_se(ctx = log_context_new(strv, /*owned=*/ false));
+
+                assert_se(log_context_num_contexts() == 1);
+                assert_se(log_context_num_fields() == 2);
+
+                /* Test that everything still works with a manually configured log context. */
+                test_log_struct();
+                test_long_lines();
+                test_log_syntax();
+        }
+
+        {
+                char **strv = NULL;
+
+                assert_se(strv = strv_new("ABC", "DEF"));
+                LOG_CONTEXT_CONSUME_STRV(strv);
+
+                assert_se(log_context_num_contexts() == 1);
+                assert_se(log_context_num_fields() == 2);
+        }
+
+        assert_se(log_context_num_contexts() == 0);
+        assert_se(log_context_num_fields() == 0);
+}
+
+int main(int argc, char* argv[]) {
         test_file();
 
-        for (target = 0; target < _LOG_TARGET_MAX; target++) {
+        assert_se(log_info_errno(SYNTHETIC_ERRNO(EUCLEAN), "foo") == -EUCLEAN);
+
+        for (int target = 0; target < _LOG_TARGET_MAX; target++) {
                 log_set_target(target);
                 log_open();
 
                 test_log_struct();
                 test_long_lines();
                 test_log_syntax();
+                test_log_context();
         }
 
-        assert_se(log_info_errno(SYNTHETIC_ERRNO(EUCLEAN), "foo") == -EUCLEAN);
-
         return 0;
 }
diff --git a/src/test/test-logarithm.c b/src/test/test-logarithm.c
new file mode 100644
index 0000000..b6818b4
--- /dev/null
+++ b/src/test/test-logarithm.c
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "logarithm.h"
+#include "tests.h"
+
+TEST(LOG2ULL) {
+        assert_se(LOG2ULL(0) == 0);
+        assert_se(LOG2ULL(1) == 0);
+        assert_se(LOG2ULL(8) == 3);
+        assert_se(LOG2ULL(9) == 3);
+        assert_se(LOG2ULL(15) == 3);
+        assert_se(LOG2ULL(16) == 4);
+        assert_se(LOG2ULL(1024*1024) == 20);
+        assert_se(LOG2ULL(1024*1024+5) == 20);
+}
+
+TEST(CONST_LOG2ULL) {
+        assert_se(CONST_LOG2ULL(0) == 0);
+        assert_se(CONST_LOG2ULL(1) == 0);
+        assert_se(CONST_LOG2ULL(8) == 3);
+        assert_se(CONST_LOG2ULL(9) == 3);
+        assert_se(CONST_LOG2ULL(15) == 3);
+        assert_se(CONST_LOG2ULL(16) == 4);
+        assert_se(CONST_LOG2ULL(1024*1024) == 20);
+        assert_se(CONST_LOG2ULL(1024*1024+5) == 20);
+}
+
+TEST(NONCONST_LOG2ULL) {
+        assert_se(NONCONST_LOG2ULL(0) == 0);
+        assert_se(NONCONST_LOG2ULL(1) == 0);
+        assert_se(NONCONST_LOG2ULL(8) == 3);
+        assert_se(NONCONST_LOG2ULL(9) == 3);
+        assert_se(NONCONST_LOG2ULL(15) == 3);
+        assert_se(NONCONST_LOG2ULL(16) == 4);
+        assert_se(NONCONST_LOG2ULL(1024*1024) == 20);
+        assert_se(NONCONST_LOG2ULL(1024*1024+5) == 20);
+}
+
+TEST(log2u64) {
+        assert_se(log2u64(0) == 0);
+        assert_se(log2u64(1) == 0);
+        assert_se(log2u64(8) == 3);
+        assert_se(log2u64(9) == 3);
+        assert_se(log2u64(15) == 3);
+        assert_se(log2u64(16) == 4);
+        assert_se(log2u64(1024*1024) == 20);
+        assert_se(log2u64(1024*1024+5) == 20);
+}
+
+TEST(log2u) {
+        assert_se(log2u(0) == 0);
+        assert_se(log2u(1) == 0);
+        assert_se(log2u(2) == 1);
+        assert_se(log2u(3) == 1);
+        assert_se(log2u(4) == 2);
+        assert_se(log2u(32) == 5);
+        assert_se(log2u(33) == 5);
+        assert_se(log2u(63) == 5);
+        assert_se(log2u(INT_MAX) == sizeof(int)*8-2);
+}
+
+TEST(log2i) {
+        assert_se(log2i(0) == 0);
+        assert_se(log2i(1) == 0);
+        assert_se(log2i(2) == 1);
+        assert_se(log2i(3) == 1);
+        assert_se(log2i(4) == 2);
+        assert_se(log2i(32) == 5);
+        assert_se(log2i(33) == 5);
+        assert_se(log2i(63) == 5);
+        assert_se(log2i(INT_MAX) == sizeof(int)*8-2);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-loop-block.c b/src/test/test-loop-block.c
index 57f3279..97c2f66 100644
--- a/src/test/test-loop-block.c
+++ b/src/test/test-loop-block.c
@@ -3,17 +3,24 @@
 #include <fcntl.h>
 #include <linux/loop.h>
 #include <pthread.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/mount.h>
 
 #include "alloc-util.h"
+#include "capability-util.h"
 #include "dissect-image.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
 #include "gpt.h"
+#include "main-func.h"
 #include "missing_loop.h"
 #include "mkfs-util.h"
 #include "mount-util.h"
 #include "namespace-util.h"
+#include "parse-util.h"
+#include "path-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
@@ -21,16 +28,38 @@
 #include "user-util.h"
 #include "virt.h"
 
-#define N_THREADS 5
-#define N_ITERATIONS 3
+static unsigned arg_n_threads = 5;
+static unsigned arg_n_iterations = 3;
+static usec_t arg_timeout = 0;
 
+#if HAVE_BLKID
 static usec_t end = 0;
 
+static void verify_dissected_image(DissectedImage *dissected) {
+        assert_se(dissected->partitions[PARTITION_ESP].found);
+        assert_se(dissected->partitions[PARTITION_ESP].node);
+        assert_se(dissected->partitions[PARTITION_XBOOTLDR].found);
+        assert_se(dissected->partitions[PARTITION_XBOOTLDR].node);
+        assert_se(dissected->partitions[PARTITION_ROOT].found);
+        assert_se(dissected->partitions[PARTITION_ROOT].node);
+        assert_se(dissected->partitions[PARTITION_HOME].found);
+        assert_se(dissected->partitions[PARTITION_HOME].node);
+}
+
+static void verify_dissected_image_harder(DissectedImage *dissected) {
+        verify_dissected_image(dissected);
+
+        assert_se(streq(dissected->partitions[PARTITION_ESP].fstype, "vfat"));
+        assert_se(streq(dissected->partitions[PARTITION_XBOOTLDR].fstype, "vfat"));
+        assert_se(streq(dissected->partitions[PARTITION_ROOT].fstype, "ext4"));
+        assert_se(streq(dissected->partitions[PARTITION_HOME].fstype, "ext4"));
+}
+
 static void* thread_func(void *ptr) {
         int fd = PTR_TO_FD(ptr);
         int r;
 
-        for (unsigned i = 0; i < N_ITERATIONS; i++) {
+        for (unsigned i = 0; i < arg_n_iterations; i++) {
                 _cleanup_(loop_device_unrefp) LoopDevice *loop = NULL;
                 _cleanup_(umount_and_rmdir_and_freep) char *mounted = NULL;
                 _cleanup_(dissected_image_unrefp) DissectedImage *dissected = NULL;
@@ -44,14 +73,16 @@
 
                 assert_se(mkdtemp_malloc(NULL, &mounted) >= 0);
 
-                r = loop_device_make(fd, O_RDONLY, 0, UINT64_MAX, LO_FLAGS_PARTSCAN, &loop);
+                r = loop_device_make(fd, O_RDONLY, 0, UINT64_MAX, 0, LO_FLAGS_PARTSCAN, LOCK_SH, &loop);
                 if (r < 0)
                         log_error_errno(r, "Failed to allocate loopback device: %m");
                 assert_se(r >= 0);
+                assert_se(loop->dev);
+                assert_se(loop->backing_file);
 
                 log_notice("Acquired loop device %s, will mount on %s", loop->node, mounted);
 
-                r = dissect_image(loop->fd, NULL, NULL, loop->uevent_seqnum_not_before, loop->timestamp_not_before, DISSECT_IMAGE_READ_ONLY, &dissected);
+                r = dissect_loop_device(loop, NULL, NULL, DISSECT_IMAGE_READ_ONLY|DISSECT_IMAGE_ADD_PARTITION_DEVICES|DISSECT_IMAGE_PIN_PARTITION_DEVICES, &dissected);
                 if (r < 0)
                         log_error_errno(r, "Failed dissect loopback device %s: %m", loop->node);
                 assert_se(r >= 0);
@@ -68,19 +99,16 @@
                                    partition_designator_to_string(d));
                 }
 
-                assert_se(dissected->partitions[PARTITION_ESP].found);
-                assert_se(dissected->partitions[PARTITION_ESP].node);
-                assert_se(dissected->partitions[PARTITION_XBOOTLDR].found);
-                assert_se(dissected->partitions[PARTITION_XBOOTLDR].node);
-                assert_se(dissected->partitions[PARTITION_ROOT].found);
-                assert_se(dissected->partitions[PARTITION_ROOT].node);
-                assert_se(dissected->partitions[PARTITION_HOME].found);
-                assert_se(dissected->partitions[PARTITION_HOME].node);
+                verify_dissected_image(dissected);
 
                 r = dissected_image_mount(dissected, mounted, UID_INVALID, UID_INVALID, DISSECT_IMAGE_READ_ONLY);
                 log_notice_errno(r, "Mounted %s → %s: %m", loop->node, mounted);
                 assert_se(r >= 0);
 
+                /* Now the block device is mounted, we don't need no manual lock anymore, the devices are now
+                 * pinned by the mounts. */
+                assert_se(loop_device_flock(loop, LOCK_UN) >= 0);
+
                 log_notice("Unmounting %s", mounted);
                 mounted = umount_and_rmdir_and_free(mounted);
 
@@ -97,68 +125,65 @@
 
         return NULL;
 }
+#endif
 
 static bool have_root_gpt_type(void) {
-#ifdef GPT_ROOT_NATIVE
+#ifdef SD_GPT_ROOT_NATIVE
         return true;
 #else
         return false;
 #endif
 }
 
-int main(int argc, char *argv[]) {
+static int run(int argc, char *argv[]) {
+#if HAVE_BLKID
+        _cleanup_(dissected_image_unrefp) DissectedImage *dissected = NULL;
+        _cleanup_(umount_and_rmdir_and_freep) char *mounted = NULL;
+        pthread_t threads[arg_n_threads];
+        sd_id128_t id;
+#endif
         _cleanup_free_ char *p = NULL, *cmd = NULL;
         _cleanup_(pclosep) FILE *sfdisk = NULL;
         _cleanup_(loop_device_unrefp) LoopDevice *loop = NULL;
-        _cleanup_close_ int fd = -1;
-        _cleanup_(dissected_image_unrefp) DissectedImage *dissected = NULL;
-        _cleanup_(umount_and_rmdir_and_freep) char *mounted = NULL;
-        pthread_t threads[N_THREADS];
-        const char *fs;
-        sd_id128_t id;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         test_setup_logging(LOG_DEBUG);
         log_show_tid(true);
         log_show_time(true);
+        log_show_color(true);
 
-        if (!have_root_gpt_type()) {
-                log_tests_skipped("No root partition GPT defined for this architecture, exiting.");
-                return EXIT_TEST_SKIP;
+        if (argc >= 2) {
+                r = safe_atou(argv[1], &arg_n_threads);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse first argument (number of threads): %s", argv[1]);
+                if (arg_n_threads <= 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Number of threads must be at least 1, refusing.");
         }
 
-        if (detect_container() > 0) {
-                log_tests_skipped("Test not supported in a container, requires udev/uevent notifications.");
-                return EXIT_TEST_SKIP;
+        if (argc >= 3) {
+                r = safe_atou(argv[2], &arg_n_iterations);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse second argument (number of iterations): %s", argv[2]);
+                if (arg_n_iterations <= 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Number of iterations must be at least 1, refusing.");
         }
 
-        if (strstr_ptr(ci_environment(), "autopkgtest") || strstr_ptr(ci_environment(), "github-actions")) {
-                // FIXME: we should reenable this one day
-                log_tests_skipped("Skipping test on Ubuntu autopkgtest CI/GH Actions, test too slow and installed udev too flakey.");
-                return EXIT_TEST_SKIP;
+        if (argc >= 4) {
+                r = parse_sec(argv[3], &arg_timeout);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse third argument (timeout): %s", argv[3]);
         }
 
-        /* This is a test for the loopback block device setup code and it's use by the image dissection
-         * logic: since the kernel APIs are hard use and prone to races, let's test this in a heavy duty
-         * test: we open a bunch of threads and repeatedly allocate and deallocate loopback block devices in
-         * them in parallel, with an image file with a number of partitions. */
+        if (argc >= 5)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Too many arguments (expected 3 at max).");
 
-        r = detach_mount_namespace();
-        if (ERRNO_IS_PRIVILEGE(r)) {
-                log_tests_skipped("Lacking privileges");
-                return EXIT_TEST_SKIP;
-        }
+        if (!have_root_gpt_type())
+                return log_tests_skipped("No root partition GPT defined for this architecture");
 
-        FOREACH_STRING(fs, "vfat", "ext4") {
-                r = mkfs_exists(fs);
-                assert_se(r >= 0);
-                if (!r) {
-                        log_tests_skipped("mkfs.{vfat|ext4} not installed");
-                        return EXIT_TEST_SKIP;
-                }
-        }
-
-        assert_se(r >= 0);
+        r = find_executable("sfdisk", NULL);
+        if (r < 0)
+                return log_tests_skipped_errno(r, "Could not find sfdisk command");
 
         assert_se(tempfn_random_child("/var/tmp", "sfdisk", &p) >= 0);
         fd = open(p, O_CREAT|O_EXCL|O_RDWR|O_CLOEXEC|O_NOFOLLOW, 0666);
@@ -175,10 +200,10 @@
               "size=32M, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n"
               "size=32M, type=", sfdisk);
 
-#ifdef GPT_ROOT_NATIVE
-        fprintf(sfdisk, SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(GPT_ROOT_NATIVE));
+#ifdef SD_GPT_ROOT_NATIVE
+        fprintf(sfdisk, SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(SD_GPT_ROOT_NATIVE));
 #else
-        fprintf(sfdisk, SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(GPT_ROOT_X86_64));
+        fprintf(sfdisk, SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(SD_GPT_ROOT_X86_64));
 #endif
 
         fputs("\n"
@@ -187,64 +212,127 @@
         assert_se(pclose(sfdisk) == 0);
         sfdisk = NULL;
 
-        assert_se(loop_device_make(fd, O_RDWR, 0, UINT64_MAX, LO_FLAGS_PARTSCAN, &loop) >= 0);
-        assert_se(dissect_image(loop->fd, NULL, NULL, loop->uevent_seqnum_not_before, loop->timestamp_not_before, 0, &dissected) >= 0);
+#if HAVE_BLKID
+        assert_se(dissect_image_file(p, NULL, NULL, 0, &dissected) >= 0);
+        verify_dissected_image(dissected);
+        dissected = dissected_image_unref(dissected);
+#endif
 
-        assert_se(dissected->partitions[PARTITION_ESP].found);
-        assert_se(dissected->partitions[PARTITION_ESP].node);
-        assert_se(dissected->partitions[PARTITION_XBOOTLDR].found);
-        assert_se(dissected->partitions[PARTITION_XBOOTLDR].node);
-        assert_se(dissected->partitions[PARTITION_ROOT].found);
-        assert_se(dissected->partitions[PARTITION_ROOT].node);
-        assert_se(dissected->partitions[PARTITION_HOME].found);
-        assert_se(dissected->partitions[PARTITION_HOME].node);
+        if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) {
+                log_tests_skipped("not running privileged");
+                return 0;
+        }
+
+        if (detect_container() > 0) {
+                log_tests_skipped("Test not supported in a container, requires udev/uevent notifications");
+                return 0;
+        }
+
+        assert_se(loop_device_make(fd, O_RDWR, 0, UINT64_MAX, 0, LO_FLAGS_PARTSCAN, LOCK_EX, &loop) >= 0);
+
+#if HAVE_BLKID
+        assert_se(dissect_loop_device(loop, NULL, NULL, DISSECT_IMAGE_ADD_PARTITION_DEVICES|DISSECT_IMAGE_PIN_PARTITION_DEVICES, &dissected) >= 0);
+        verify_dissected_image(dissected);
+
+        FOREACH_STRING(fs, "vfat", "ext4") {
+                r = mkfs_exists(fs);
+                assert_se(r >= 0);
+                if (!r) {
+                        log_tests_skipped("mkfs.{vfat|ext4} not installed");
+                        return 0;
+                }
+        }
+        assert_se(r >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(make_filesystem(dissected->partitions[PARTITION_ESP].node, "vfat", "EFI", id, true) >= 0);
+        assert_se(make_filesystem(dissected->partitions[PARTITION_ESP].node, "vfat", "EFI", NULL, id, true, 0, NULL) >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(make_filesystem(dissected->partitions[PARTITION_XBOOTLDR].node, "vfat", "xbootldr", id, true) >= 0);
+        assert_se(make_filesystem(dissected->partitions[PARTITION_XBOOTLDR].node, "vfat", "xbootldr", NULL, id, true, 0, NULL) >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(make_filesystem(dissected->partitions[PARTITION_ROOT].node, "ext4", "root", id, true) >= 0);
+        assert_se(make_filesystem(dissected->partitions[PARTITION_ROOT].node, "ext4", "root", NULL, id, true, 0, NULL) >= 0);
 
         assert_se(sd_id128_randomize(&id) >= 0);
-        assert_se(make_filesystem(dissected->partitions[PARTITION_HOME].node, "ext4", "home", id, true) >= 0);
+        assert_se(make_filesystem(dissected->partitions[PARTITION_HOME].node, "ext4", "home", NULL, id, true, 0, NULL) >= 0);
 
         dissected = dissected_image_unref(dissected);
-        assert_se(dissect_image(loop->fd, NULL, NULL, loop->uevent_seqnum_not_before, loop->timestamp_not_before, 0, &dissected) >= 0);
+
+        /* We created the file systems now via the per-partition block devices. But the dissection code might
+         * probe them via the whole block device. These block devices have separate buffer caches though,
+         * hence what was written via the partition device might not appear on the whole block device
+         * yet. Let's hence explicitly flush the whole block device, so that the read-back definitely
+         * works. */
+        assert_se(ioctl(loop->fd, BLKFLSBUF, 0) >= 0);
+
+        /* Try to read once, without pinning or adding partitions, i.e. by only accessing the whole block
+         * device. */
+        assert_se(dissect_loop_device(loop, NULL, NULL, 0, &dissected) >= 0);
+        verify_dissected_image_harder(dissected);
+        dissected = dissected_image_unref(dissected);
+
+        /* Now go via the loopback device after all, but this time add/pin, because now we want to mount it. */
+        assert_se(dissect_loop_device(loop, NULL, NULL, DISSECT_IMAGE_ADD_PARTITION_DEVICES|DISSECT_IMAGE_PIN_PARTITION_DEVICES, &dissected) >= 0);
+        verify_dissected_image_harder(dissected);
 
         assert_se(mkdtemp_malloc(NULL, &mounted) >= 0);
 
+        /* We are particularly correct here, and now downgrade LOCK → LOCK_SH. That's because we are done
+         * with formatting the file systems, so we don't need the exclusive lock anymore. From now on a
+         * shared one is fine. This way udev can now probe the device if it wants, but still won't call
+         * BLKRRPART on it, and that's good, because that would destroy our partition table while we are at
+         * it. */
+        assert_se(loop_device_flock(loop, LOCK_SH) >= 0);
+
+        /* This is a test for the loopback block device setup code and it's use by the image dissection
+         * logic: since the kernel APIs are hard use and prone to races, let's test this in a heavy duty
+         * test: we open a bunch of threads and repeatedly allocate and deallocate loopback block devices in
+         * them in parallel, with an image file with a number of partitions. */
+        assert_se(detach_mount_namespace() >= 0);
+
         /* This first (writable) mount will initialize the mount point dirs, so that the subsequent read-only ones can work */
         assert_se(dissected_image_mount(dissected, mounted, UID_INVALID, UID_INVALID, 0) >= 0);
 
+        /* Now we mounted everything, the partitions are pinned. Now it's fine to release the lock
+         * fully. This means udev could now issue BLKRRPART again, but that's OK given this will fail because
+         * we now mounted the device. */
+        assert_se(loop_device_flock(loop, LOCK_UN) >= 0);
+
         assert_se(umount_recursive(mounted, 0) >= 0);
         loop = loop_device_unref(loop);
 
         log_notice("Threads are being started now");
 
-        /* Let's make sure we run for 10s on slow systems at max */
-        end = usec_add(now(CLOCK_MONOTONIC),
-                       slow_tests_enabled() ? 5 * USEC_PER_SEC :
-                       1 * USEC_PER_SEC);
+        /* zero timeout means pick default: let's make sure we run for 10s on slow systems at max */
+        if (arg_timeout == 0)
+                arg_timeout = slow_tests_enabled() ? 5 * USEC_PER_SEC : 1 * USEC_PER_SEC;
 
-        for (unsigned i = 0; i < N_THREADS; i++)
-                assert_se(pthread_create(threads + i, NULL, thread_func, FD_TO_PTR(fd)) == 0);
+        end = usec_add(now(CLOCK_MONOTONIC), arg_timeout);
+
+        if (arg_n_threads > 1)
+                for (unsigned i = 0; i < arg_n_threads; i++)
+                        assert_se(pthread_create(threads + i, NULL, thread_func, FD_TO_PTR(fd)) == 0);
 
         log_notice("All threads started now.");
 
-        for (unsigned i = 0; i < N_THREADS; i++) {
-                log_notice("Joining thread #%u.", i);
+        if (arg_n_threads == 1)
+                assert_se(thread_func(FD_TO_PTR(fd)) == NULL);
+        else
+                for (unsigned i = 0; i < arg_n_threads; i++) {
+                        log_notice("Joining thread #%u.", i);
 
-                void *k;
-                assert_se(pthread_join(threads[i], &k) == 0);
-                assert_se(k == NULL);
+                        void *k;
+                        assert_se(pthread_join(threads[i], &k) == 0);
+                        assert_se(!k);
 
-                log_notice("Joined thread #%u.", i);
-        }
+                        log_notice("Joined thread #%u.", i);
+                }
 
         log_notice("Threads are all terminated now.");
-
+#else
+        log_notice("Cutting test short, since we do not have libblkid.");
+#endif
         return 0;
 }
+
+DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
diff --git a/src/test/test-macro.c b/src/test/test-macro.c
new file mode 100644
index 0000000..aec1f1e
--- /dev/null
+++ b/src/test/test-macro.c
@@ -0,0 +1,587 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stddef.h>
+
+#include "log.h"
+#include "macro.h"
+#include "tests.h"
+
+TEST(saturate_add) {
+        assert_se(saturate_add(1, 2, UINT8_MAX) == 3);
+        assert_se(saturate_add(1, UINT8_MAX-2, UINT8_MAX) == UINT8_MAX-1);
+        assert_se(saturate_add(1, UINT8_MAX-1, UINT8_MAX) == UINT8_MAX);
+        assert_se(saturate_add(1, UINT8_MAX, UINT8_MAX) == UINT8_MAX);
+        assert_se(saturate_add(2, UINT8_MAX, UINT8_MAX) == UINT8_MAX);
+        assert_se(saturate_add(60, 60, 50) == 50);
+}
+
+TEST(align_power2) {
+        unsigned long i, p2;
+
+        assert_se(ALIGN_POWER2(0) == 0);
+        assert_se(ALIGN_POWER2(1) == 1);
+        assert_se(ALIGN_POWER2(2) == 2);
+        assert_se(ALIGN_POWER2(3) == 4);
+        assert_se(ALIGN_POWER2(4) == 4);
+        assert_se(ALIGN_POWER2(5) == 8);
+        assert_se(ALIGN_POWER2(6) == 8);
+        assert_se(ALIGN_POWER2(7) == 8);
+        assert_se(ALIGN_POWER2(9) == 16);
+        assert_se(ALIGN_POWER2(10) == 16);
+        assert_se(ALIGN_POWER2(11) == 16);
+        assert_se(ALIGN_POWER2(12) == 16);
+        assert_se(ALIGN_POWER2(13) == 16);
+        assert_se(ALIGN_POWER2(14) == 16);
+        assert_se(ALIGN_POWER2(15) == 16);
+        assert_se(ALIGN_POWER2(16) == 16);
+        assert_se(ALIGN_POWER2(17) == 32);
+
+        assert_se(ALIGN_POWER2(ULONG_MAX) == 0);
+        assert_se(ALIGN_POWER2(ULONG_MAX - 1) == 0);
+        assert_se(ALIGN_POWER2(ULONG_MAX - 1024) == 0);
+        assert_se(ALIGN_POWER2(ULONG_MAX / 2) == ULONG_MAX / 2 + 1);
+        assert_se(ALIGN_POWER2(ULONG_MAX + 1) == 0);
+
+        for (i = 1; i < 131071; ++i) {
+                for (p2 = 1; p2 < i; p2 <<= 1)
+                        /* empty */ ;
+
+                assert_se(ALIGN_POWER2(i) == p2);
+        }
+
+        for (i = ULONG_MAX - 1024; i < ULONG_MAX; ++i) {
+                for (p2 = 1; p2 && p2 < i; p2 <<= 1)
+                        /* empty */ ;
+
+                assert_se(ALIGN_POWER2(i) == p2);
+        }
+}
+
+TEST(max) {
+        static const struct {
+                int a;
+                int b[CONST_MAX(10, 100)];
+        } val1 = {
+                .a = CONST_MAX(10, 100),
+        };
+        int d = 0;
+        unsigned long x = 12345;
+        unsigned long y = 54321;
+        const char str[] = "a_string_constant";
+        const unsigned long long arr[] = {9999ULL, 10ULL, 0ULL, 3000ULL, 2000ULL, 1000ULL, 100ULL, 9999999ULL};
+        void *p = (void *)str;
+        void *q = (void *)&str[16];
+
+        assert_cc(sizeof(val1.b) == sizeof(int) * 100);
+
+        /* CONST_MAX returns (void) instead of a value if the passed arguments
+         * are not of the same type or not constant expressions. */
+        assert_cc(__builtin_types_compatible_p(typeof(CONST_MAX(1, 10)), int));
+        assert_cc(__builtin_types_compatible_p(typeof(CONST_MAX(1, 1U)), void));
+
+        assert_se(val1.a == 100);
+        assert_se(MAX(++d, 0) == 1);
+        assert_se(d == 1);
+
+        assert_cc(MAXSIZE(char[3], uint16_t) == 3);
+        assert_cc(MAXSIZE(char[3], uint32_t) == 4);
+        assert_cc(MAXSIZE(char, long) == sizeof(long));
+
+        assert_se(MAX(-5, 5) == 5);
+        assert_se(MAX(5, 5) == 5);
+        assert_se(MAX(MAX(1, MAX(2, MAX(3, 4))), 5) == 5);
+        assert_se(MAX(MAX(1, MAX(2, MAX(3, 2))), 1) == 3);
+        assert_se(MAX(MIN(1, MIN(2, MIN(3, 4))), 5) == 5);
+        assert_se(MAX(MAX(1, MIN(2, MIN(3, 2))), 1) == 2);
+        assert_se(LESS_BY(8, 4) == 4);
+        assert_se(LESS_BY(8, 8) == 0);
+        assert_se(LESS_BY(4, 8) == 0);
+        assert_se(LESS_BY(16, LESS_BY(8, 4)) == 12);
+        assert_se(LESS_BY(4, LESS_BY(8, 4)) == 0);
+        assert_se(CMP(3, 5) == -1);
+        assert_se(CMP(5, 3) == 1);
+        assert_se(CMP(5, 5) == 0);
+        assert_se(CMP(x, y) == -1);
+        assert_se(CMP(y, x) == 1);
+        assert_se(CMP(x, x) == 0);
+        assert_se(CMP(y, y) == 0);
+        assert_se(CMP(UINT64_MAX, (uint64_t) 0) == 1);
+        assert_se(CMP((uint64_t) 0, UINT64_MAX) == -1);
+        assert_se(CMP(UINT64_MAX, UINT64_MAX) == 0);
+        assert_se(CMP(INT64_MIN, INT64_MAX) == -1);
+        assert_se(CMP(INT64_MAX, INT64_MIN) == 1);
+        assert_se(CMP(INT64_MAX, INT64_MAX) == 0);
+        assert_se(CMP(INT64_MIN, INT64_MIN) == 0);
+        assert_se(CMP(INT64_MAX, (int64_t) 0) == 1);
+        assert_se(CMP((int64_t) 0, INT64_MIN) == 1);
+        assert_se(CMP(INT64_MIN, (int64_t) 0) == -1);
+        assert_se(CMP((int64_t) 0, INT64_MAX) == -1);
+        assert_se(CMP(&str[2], &str[7]) == -1);
+        assert_se(CMP(&str[2], &str[2]) == 0);
+        assert_se(CMP(&str[7], (const char *)str) == 1);
+        assert_se(CMP(str[2], str[7]) == 1);
+        assert_se(CMP(str[7], *str) == 1);
+        assert_se(CMP((const unsigned long long *)arr, &arr[3]) == -1);
+        assert_se(CMP(*arr, arr[3]) == 1);
+        assert_se(CMP(p, q) == -1);
+        assert_se(CMP(q, p) == 1);
+        assert_se(CMP(p, p) == 0);
+        assert_se(CMP(q, q) == 0);
+        assert_se(CLAMP(-5, 0, 1) == 0);
+        assert_se(CLAMP(5, 0, 1) == 1);
+        assert_se(CLAMP(5, -10, 1) == 1);
+        assert_se(CLAMP(5, -10, 10) == 5);
+        assert_se(CLAMP(CLAMP(0, -10, 10), CLAMP(-5, 10, 20), CLAMP(100, -5, 20)) == 10);
+}
+
+#pragma GCC diagnostic push
+#ifdef __clang__
+#  pragma GCC diagnostic ignored "-Waddress-of-packed-member"
+#endif
+
+TEST(container_of) {
+        struct mytype {
+                uint8_t pad1[3];
+                uint64_t v1;
+                uint8_t pad2[2];
+                uint32_t v2;
+        } myval = { };
+
+        assert_cc(sizeof(myval) >= 17);
+        assert_se(container_of(&myval.v1, struct mytype, v1) == &myval);
+        assert_se(container_of(&myval.v2, struct mytype, v2) == &myval);
+        assert_se(container_of(&container_of(&myval.v2,
+                                             struct mytype,
+                                             v2)->v1,
+                               struct mytype,
+                               v1) == &myval);
+}
+
+#pragma GCC diagnostic pop
+
+TEST(div_round_up) {
+        int div;
+
+        /* basic tests */
+        assert_se(DIV_ROUND_UP(0, 8) == 0);
+        assert_se(DIV_ROUND_UP(1, 8) == 1);
+        assert_se(DIV_ROUND_UP(8, 8) == 1);
+        assert_se(DIV_ROUND_UP(12, 8) == 2);
+        assert_se(DIV_ROUND_UP(16, 8) == 2);
+
+        /* test multiple evaluation */
+        div = 0;
+        assert_se(DIV_ROUND_UP(div++, 8) == 0 && div == 1);
+        assert_se(DIV_ROUND_UP(++div, 8) == 1 && div == 2);
+        assert_se(DIV_ROUND_UP(8, div++) == 4 && div == 3);
+        assert_se(DIV_ROUND_UP(8, ++div) == 2 && div == 4);
+
+        /* overflow test with exact division */
+        assert_se(sizeof(0U) == 4);
+        assert_se(0xfffffffaU % 10U == 0U);
+        assert_se(0xfffffffaU / 10U == 429496729U);
+        assert_se(DIV_ROUND_UP(0xfffffffaU, 10U) == 429496729U);
+        assert_se((0xfffffffaU + 10U - 1U) / 10U == 0U);
+        assert_se(0xfffffffaU / 10U + !!(0xfffffffaU % 10U) == 429496729U);
+
+        /* overflow test with rounded division */
+        assert_se(0xfffffffdU % 10U == 3U);
+        assert_se(0xfffffffdU / 10U == 429496729U);
+        assert_se(DIV_ROUND_UP(0xfffffffdU, 10U) == 429496730U);
+        assert_se((0xfffffffdU + 10U - 1U) / 10U == 0U);
+        assert_se(0xfffffffdU / 10U + !!(0xfffffffdU % 10U) == 429496730U);
+}
+
+TEST(ptr_to_int) {
+        /* Primary reason to have this test is to validate that pointers are large enough to hold entire int range */
+        assert_se(PTR_TO_INT(INT_TO_PTR(0)) == 0);
+        assert_se(PTR_TO_INT(INT_TO_PTR(1)) == 1);
+        assert_se(PTR_TO_INT(INT_TO_PTR(-1)) == -1);
+        assert_se(PTR_TO_INT(INT_TO_PTR(INT_MAX)) == INT_MAX);
+        assert_se(PTR_TO_INT(INT_TO_PTR(INT_MIN)) == INT_MIN);
+}
+
+TEST(in_set) {
+        assert_se(IN_SET(1, 1, 2));
+        assert_se(IN_SET(1, 1, 2, 3, 4));
+        assert_se(IN_SET(2, 1, 2, 3, 4));
+        assert_se(IN_SET(3, 1, 2, 3, 4));
+        assert_se(IN_SET(4, 1, 2, 3, 4));
+        assert_se(!IN_SET(0, 1, 2));
+        assert_se(!IN_SET(0, 1, 2, 3, 4));
+
+        struct {
+                unsigned x:3;
+        } t = { 1 };
+
+        assert_se(IN_SET(t.x, 1, 2));
+        assert_se(IN_SET(t.x, 1, 2, 3, 4));
+        assert_se(IN_SET(t.x, 2, 3, 4, 1));
+        assert_se(!IN_SET(t.x, 0, 2));
+        assert_se(!IN_SET(t.x, 2, 3, 4));
+}
+
+TEST(foreach_pointer) {
+        int a, b, c, *i;
+        size_t k = 0;
+
+        FOREACH_POINTER(i, &a, &b, &c) {
+                switch (k) {
+
+                case 0:
+                        assert_se(i == &a);
+                        break;
+
+                case 1:
+                        assert_se(i == &b);
+                        break;
+
+                case 2:
+                        assert_se(i == &c);
+                        break;
+
+                default:
+                        assert_not_reached();
+                        break;
+                }
+
+                k++;
+        }
+
+        assert_se(k == 3);
+
+        FOREACH_POINTER(i, &b) {
+                assert_se(k == 3);
+                assert_se(i == &b);
+                k = 4;
+        }
+
+        assert_se(k == 4);
+
+        FOREACH_POINTER(i, NULL, &c, NULL, &b, NULL, &a, NULL) {
+                switch (k) {
+
+                case 4:
+                        assert_se(i == NULL);
+                        break;
+
+                case 5:
+                        assert_se(i == &c);
+                        break;
+
+                case 6:
+                        assert_se(i == NULL);
+                        break;
+
+                case 7:
+                        assert_se(i == &b);
+                        break;
+
+                case 8:
+                        assert_se(i == NULL);
+                        break;
+
+                case 9:
+                        assert_se(i == &a);
+                        break;
+
+                case 10:
+                        assert_se(i == NULL);
+                        break;
+
+                default:
+                        assert_not_reached();
+                        break;
+                }
+
+                k++;
+        }
+
+        assert_se(k == 11);
+}
+
+TEST(align_to) {
+        assert_se(ALIGN_TO(0, 1) == 0);
+        assert_se(ALIGN_TO(1, 1) == 1);
+        assert_se(ALIGN_TO(2, 1) == 2);
+        assert_se(ALIGN_TO(3, 1) == 3);
+        assert_se(ALIGN_TO(4, 1) == 4);
+        assert_se(ALIGN_TO(SIZE_MAX-1, 1) == SIZE_MAX-1);
+        assert_se(ALIGN_TO(SIZE_MAX, 1) == SIZE_MAX);
+
+        assert_se(ALIGN_TO(0, 2) == 0);
+        assert_se(ALIGN_TO(1, 2) == 2);
+        assert_se(ALIGN_TO(2, 2) == 2);
+        assert_se(ALIGN_TO(3, 2) == 4);
+        assert_se(ALIGN_TO(4, 2) == 4);
+        assert_se(ALIGN_TO(SIZE_MAX-3, 2) == SIZE_MAX-3);
+        assert_se(ALIGN_TO(SIZE_MAX-2, 2) == SIZE_MAX-1);
+        assert_se(ALIGN_TO(SIZE_MAX-1, 2) == SIZE_MAX-1);
+        assert_se(ALIGN_TO(SIZE_MAX, 2) == SIZE_MAX); /* overflow */
+
+        assert_se(ALIGN_TO(0, 4) == 0);
+        assert_se(ALIGN_TO(1, 4) == 4);
+        assert_se(ALIGN_TO(2, 4) == 4);
+        assert_se(ALIGN_TO(3, 4) == 4);
+        assert_se(ALIGN_TO(4, 4) == 4);
+        assert_se(ALIGN_TO(SIZE_MAX-3, 4) == SIZE_MAX-3);
+        assert_se(ALIGN_TO(SIZE_MAX-2, 4) == SIZE_MAX); /* overflow */
+        assert_se(ALIGN_TO(SIZE_MAX-1, 4) == SIZE_MAX); /* overflow */
+        assert_se(ALIGN_TO(SIZE_MAX, 4) == SIZE_MAX);   /* overflow */
+
+        assert_cc(CONST_ALIGN_TO(96, 512) == 512);
+        assert_cc(CONST_ALIGN_TO(511, 512) == 512);
+        assert_cc(CONST_ALIGN_TO(512, 512) == 512);
+        assert_cc(CONST_ALIGN_TO(513, 512) == 1024);
+        assert_cc(CONST_ALIGN_TO(sizeof(int), 64) == 64);
+
+        assert_cc(__builtin_types_compatible_p(typeof(CONST_ALIGN_TO(4, 3)), void));
+        assert_cc(__builtin_types_compatible_p(typeof(CONST_ALIGN_TO(SIZE_MAX, 512)), void));
+}
+
+TEST(flags) {
+        enum {
+                F1 = 1 << 0,
+                F2 = 1 << 1,
+                F3 = 1 << 2,
+                F_ALL = F1 | F2 | F3
+        };
+        unsigned n, f;
+
+        assert_se(FLAGS_SET(0, 0));
+        assert_se(FLAGS_SET(F1, F1));
+        assert_se(FLAGS_SET(F1 | F2, F1));
+        assert_se(FLAGS_SET(F1 | F3, F1 | F3));
+        assert_se(FLAGS_SET(F1 | F2 | F3, F_ALL));
+        assert_se(!FLAGS_SET(0, F1));
+        assert_se(!FLAGS_SET(F2, F1));
+        assert_se(!FLAGS_SET(F1 | F2, F3));
+        assert_se(!FLAGS_SET(F1 | F2, F1 | F3));
+        assert_se(!FLAGS_SET(F1 | F2 | F3, ~F_ALL));
+
+        /* Check for no double eval. */
+        n = F2;
+        f = F1;
+        assert_se(!FLAGS_SET(--n, ++f));
+        assert_se(n == F1);
+        assert_se(f == F2);
+
+        SET_FLAG(n, F3, true);
+        assert_se(n == (F1 | F3));
+        SET_FLAG(n, F2, false);
+        assert_se(n == (F1 | F3));
+        SET_FLAG(n, F3, false);
+        assert_se(n == F1);
+        SET_FLAG(n, F1, true);
+        assert_se(n == F1);
+        SET_FLAG(n, F1 | F3, true);
+        assert_se(n == (F1 | F3));
+        SET_FLAG(n, F_ALL, false);
+        assert_se(n == 0);
+
+        assert_se(UPDATE_FLAG(0, 0, true) == 0);
+        assert_se(UPDATE_FLAG(0, F1, true) == F1);
+        assert_se(UPDATE_FLAG(0, F1 | F2, true) == (F1 | F2));
+        assert_se(UPDATE_FLAG(F1, 0, true) == F1);
+        assert_se(UPDATE_FLAG(F1, F1, true) == F1);
+        assert_se(UPDATE_FLAG(F1, F3, true) == (F1 | F3));
+        assert_se(UPDATE_FLAG(F1, F1 | F3, true) == (F1 | F3));
+        assert_se(UPDATE_FLAG(F1, F_ALL, true) == F_ALL);
+        assert_se(UPDATE_FLAG(0, 0, false) == 0);
+        assert_se(UPDATE_FLAG(0, F1, false) == 0);
+        assert_se(UPDATE_FLAG(0, F1 | F2, false) == 0);
+        assert_se(UPDATE_FLAG(F1, 0, false) == F1);
+        assert_se(UPDATE_FLAG(F1, F1, false) == 0);
+        assert_se(UPDATE_FLAG(F1, F3, false) == F1);
+        assert_se(UPDATE_FLAG(F1, F1 | F3, false) == 0);
+        assert_se(UPDATE_FLAG(F1, F2 | F3, false) == F1);
+        assert_se(UPDATE_FLAG(F1, F_ALL, false) == 0);
+        assert_se(UPDATE_FLAG(F_ALL, F_ALL, false) == 0);
+
+        /* Check for no double eval. */
+        n = F2;
+        f = F1;
+        assert_se(UPDATE_FLAG(--n, ++f, true) == (F1 | F2));
+        assert_se(n == F1);
+        assert_se(f == F2);
+}
+
+TEST(DECIMAL_STR_WIDTH) {
+        assert_se(DECIMAL_STR_WIDTH(0) == 1);
+        assert_se(DECIMAL_STR_WIDTH(1) == 1);
+        assert_se(DECIMAL_STR_WIDTH(2) == 1);
+        assert_se(DECIMAL_STR_WIDTH(9) == 1);
+        assert_se(DECIMAL_STR_WIDTH(10) == 2);
+        assert_se(DECIMAL_STR_WIDTH(11) == 2);
+        assert_se(DECIMAL_STR_WIDTH(99) == 2);
+        assert_se(DECIMAL_STR_WIDTH(100) == 3);
+        assert_se(DECIMAL_STR_WIDTH(101) == 3);
+        assert_se(DECIMAL_STR_WIDTH(-1) == 2);
+        assert_se(DECIMAL_STR_WIDTH(-2) == 2);
+        assert_se(DECIMAL_STR_WIDTH(-9) == 2);
+        assert_se(DECIMAL_STR_WIDTH(-10) == 3);
+        assert_se(DECIMAL_STR_WIDTH(-11) == 3);
+        assert_se(DECIMAL_STR_WIDTH(-99) == 3);
+        assert_se(DECIMAL_STR_WIDTH(-100) == 4);
+        assert_se(DECIMAL_STR_WIDTH(-101) == 4);
+        assert_se(DECIMAL_STR_WIDTH(UINT64_MAX) == STRLEN("18446744073709551615"));
+        assert_se(DECIMAL_STR_WIDTH(INT64_MAX) == STRLEN("9223372036854775807"));
+        assert_se(DECIMAL_STR_WIDTH(INT64_MIN) == STRLEN("-9223372036854775808"));
+}
+
+TEST(DECIMAL_STR_MAX) {
+        int8_t s8_longest = INT8_MIN;
+        int16_t s16_longest = INT16_MIN;
+        int32_t s32_longest = INT32_MIN;
+        int64_t s64_longest = INT64_MIN;
+        uint8_t u8_longest = UINT8_MAX;
+        uint16_t u16_longest = UINT16_MAX;
+        uint32_t u32_longest = UINT32_MAX;
+        uint64_t u64_longest = UINT64_MAX;
+
+        /* NB: Always add +1, because DECIMAL_STR_MAX() includes space for trailing NUL byte, but
+         * DECIMAL_STR_WIDTH() does not! */
+        assert_se(DECIMAL_STR_MAX(int8_t) == DECIMAL_STR_WIDTH(s8_longest)+1);
+        assert_se(DECIMAL_STR_MAX(int16_t) == DECIMAL_STR_WIDTH(s16_longest)+1);
+        assert_se(DECIMAL_STR_MAX(int32_t) == DECIMAL_STR_WIDTH(s32_longest)+1);
+        assert_se(DECIMAL_STR_MAX(int64_t) == DECIMAL_STR_WIDTH(s64_longest)+1);
+
+        assert_se(DECIMAL_STR_MAX(uint8_t) == DECIMAL_STR_WIDTH(u8_longest)+1);
+        assert_se(DECIMAL_STR_MAX(uint16_t) == DECIMAL_STR_WIDTH(u16_longest)+1);
+        assert_se(DECIMAL_STR_MAX(uint32_t) == DECIMAL_STR_WIDTH(u32_longest)+1);
+        assert_se(DECIMAL_STR_MAX(uint64_t) == DECIMAL_STR_WIDTH(u64_longest)+1);
+}
+
+TEST(PTR_SUB1) {
+        static const uint64_t x[4] = { 2, 3, 4, 5 };
+        const uint64_t *p;
+
+        p = x + ELEMENTSOF(x)-1;
+        assert_se(*p == 5);
+
+        p = PTR_SUB1(p, x);
+        assert_se(*p == 4);
+
+        p = PTR_SUB1(p, x);
+        assert_se(*p == 3);
+
+        p = PTR_SUB1(p, x);
+        assert_se(*p == 2);
+
+        p = PTR_SUB1(p, x);
+        assert_se(!p);
+
+        p = PTR_SUB1(p, x);
+        assert_se(!p);
+}
+
+TEST(ISPOWEROF2) {
+        uint64_t u;
+        int64_t i;
+
+        /* First, test constant expressions */
+        assert_se(!ISPOWEROF2(-2));
+        assert_se(!ISPOWEROF2(-1));
+        assert_se(!ISPOWEROF2(0));
+        assert_se(ISPOWEROF2(1));
+        assert_se(ISPOWEROF2(2));
+        assert_se(!ISPOWEROF2(3));
+        assert_se(ISPOWEROF2(4));
+        assert_se(!ISPOWEROF2(5));
+        assert_se(!ISPOWEROF2(6));
+        assert_se(!ISPOWEROF2(7));
+        assert_se(ISPOWEROF2(8));
+        assert_se(!ISPOWEROF2(9));
+        assert_se(!ISPOWEROF2(1022));
+        assert_se(ISPOWEROF2(1024));
+        assert_se(!ISPOWEROF2(1025));
+        assert_se(!ISPOWEROF2(UINT64_C(0xffffffff)));
+        assert_se(ISPOWEROF2(UINT64_C(0x100000000)));
+        assert_se(!ISPOWEROF2(UINT64_C(0x100000001)));
+
+        /* Then, test dynamic expressions, and if they are side-effect free */
+        i = -2;
+        assert_se(!ISPOWEROF2(i++));
+        assert_se(i == -1);
+        assert_se(!ISPOWEROF2(i++));
+        assert_se(i == 0);
+        assert_se(!ISPOWEROF2(i++));
+        assert_se(i == 1);
+        assert_se(ISPOWEROF2(i++));
+        assert_se(i == 2);
+        assert_se(ISPOWEROF2(i++));
+        assert_se(i == 3);
+        assert_se(!ISPOWEROF2(i++));
+        assert_se(i == 4);
+        assert_se(ISPOWEROF2(i++));
+        assert_se(i == 5);
+        assert_se(!ISPOWEROF2(i));
+
+        u = 0;
+        assert_se(!ISPOWEROF2(u++));
+        assert_se(u == 1);
+        assert_se(ISPOWEROF2(u++));
+        assert_se(u == 2);
+        assert_se(ISPOWEROF2(u++));
+        assert_se(u == 3);
+        assert_se(!ISPOWEROF2(u++));
+        assert_se(u == 4);
+        assert_se(ISPOWEROF2(u++));
+        assert_se(u == 5);
+        assert_se(!ISPOWEROF2(u));
+}
+
+TEST(ALIGNED) {
+        assert_se(IS_ALIGNED16(NULL));
+        assert_se(IS_ALIGNED32(NULL));
+        assert_se(IS_ALIGNED64(NULL));
+
+        uint64_t u64;
+        uint32_t u32;
+        uint16_t u16;
+
+        assert_se(IS_ALIGNED16(&u16));
+        assert_se(IS_ALIGNED16(&u32));
+        assert_se(IS_ALIGNED16(&u64));
+        assert_se(IS_ALIGNED32(&u32));
+        assert_se(IS_ALIGNED32(&u64));
+        assert_se(IS_ALIGNED64(&u64));
+
+        _align_(32) uint8_t ua256;
+        _align_(8) uint8_t ua64;
+        _align_(4) uint8_t ua32;
+        _align_(2) uint8_t ua16;
+
+        assert_se(IS_ALIGNED16(&ua256));
+        assert_se(IS_ALIGNED32(&ua256));
+        assert_se(IS_ALIGNED64(&ua256));
+
+        assert_se(IS_ALIGNED16(&ua64));
+        assert_se(IS_ALIGNED32(&ua64));
+        assert_se(IS_ALIGNED64(&ua64));
+
+        assert_se(IS_ALIGNED16(&ua32));
+        assert_se(IS_ALIGNED32(&ua32));
+
+        assert_se(IS_ALIGNED16(&ua16));
+
+#ifdef __x86_64__
+        /* Conditionalized on x86-64, since there we know for sure that all three types are aligned to
+         * their size. Too lazy to figure it out for other archs */
+        void *p = UINT_TO_PTR(1); /* definitely not aligned */
+        assert_se(!IS_ALIGNED16(p));
+        assert_se(!IS_ALIGNED32(p));
+        assert_se(!IS_ALIGNED64(p));
+
+        assert_se(IS_ALIGNED16(ALIGN2_PTR(p)));
+        assert_se(IS_ALIGNED32(ALIGN4_PTR(p)));
+        assert_se(IS_ALIGNED64(ALIGN8_PTR(p)));
+
+        p = UINT_TO_PTR(-1); /* also definitely not aligned */
+        assert_se(!IS_ALIGNED16(p));
+        assert_se(!IS_ALIGNED32(p));
+        assert_se(!IS_ALIGNED64(p));
+#endif
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-manager.c b/src/test/test-manager.c
new file mode 100644
index 0000000..89f9277
--- /dev/null
+++ b/src/test/test-manager.c
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "manager.h"
+#include "tests.h"
+
+TEST(manager_taint_string) {
+        Manager m = {};
+
+        _cleanup_free_ char *a = manager_taint_string(&m);
+        assert_se(a);
+        log_debug("taint string w/o split-usr: '%s'", a);
+        /* split-usr is the only one that is cached in Manager, so we know it's not present.
+         * The others are queried dynamically, so we'd need to duplicate the logic here
+         * to test for them. Let's do just one. */
+        assert_se(!strstr(a, "split-usr"));
+
+        if (cg_all_unified() == 0)
+                assert_se(strstr(a, "cgroupsv1"));
+        else
+                assert_se(!strstr(a, "cgroupsv1"));
+
+        m.taint_usr = true;
+        _cleanup_free_ char *b = manager_taint_string(&m);
+        assert_se(b);
+        log_debug("taint string w/ split-usr: '%s'", b);
+        assert_se(strstr(b, "split-usr"));
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-math-util.c b/src/test/test-math-util.c
new file mode 100644
index 0000000..9771576
--- /dev/null
+++ b/src/test/test-math-util.c
@@ -0,0 +1,110 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <float.h>
+
+#include "math-util.h"
+#include "tests.h"
+
+TEST(iszero_safe) {
+        /* zeros */
+        assert_se(iszero_safe(0.0));
+        assert_se(iszero_safe(-0.0));
+        assert_se(iszero_safe(0e0));
+        assert_se(iszero_safe(-0e0));
+        assert_se(iszero_safe(0e+0));
+        assert_se(iszero_safe(0e-0));
+        assert_se(iszero_safe(-0e-0));
+        assert_se(iszero_safe(-0e000));
+        assert_se(iszero_safe(0e000));
+
+        /* non-zero normal values */
+        assert_se(!iszero_safe(42.0));
+        assert_se(!iszero_safe(M_PI));
+        assert_se(!iszero_safe(DBL_MAX));
+        assert_se(!iszero_safe(-DBL_MAX));
+        assert_se(!iszero_safe(DBL_MIN));
+        assert_se(!iszero_safe(-DBL_MIN));
+        assert_se(!iszero_safe(1 / DBL_MAX));
+
+        /* subnormal values */
+        assert_se(!iszero_safe(DBL_MIN / 2));
+        assert_se(!iszero_safe(-DBL_MIN / 42));
+        assert_se(!iszero_safe(1 / DBL_MAX / 2));
+
+        /* too small values which cannot be in subnormal form */
+        assert_se( iszero_safe(DBL_MIN / DBL_MAX));
+        assert_se( iszero_safe(DBL_MIN / -DBL_MAX));
+        assert_se( iszero_safe(-DBL_MIN / DBL_MAX));
+        assert_se( iszero_safe(-DBL_MIN / -DBL_MAX));
+
+        /* NaN or infinity */
+        assert_se(!iszero_safe(NAN));
+        assert_se(!iszero_safe(INFINITY));
+        assert_se(!iszero_safe(-INFINITY));
+        assert_se(!iszero_safe(1 / NAN));
+
+        /* inverse of infinity */
+        assert_se( iszero_safe(1 / INFINITY));
+        assert_se( iszero_safe(1 / -INFINITY));
+        assert_se( iszero_safe(-1 / INFINITY));
+        assert_se( iszero_safe(-1 / -INFINITY));
+        assert_se( iszero_safe(42 / -INFINITY));
+        assert_se( iszero_safe(-42 / -INFINITY));
+        assert_se( iszero_safe(DBL_MIN / INFINITY));
+        assert_se( iszero_safe(DBL_MIN / -INFINITY));
+        assert_se( iszero_safe(DBL_MAX / INFINITY / 2));
+        assert_se( iszero_safe(DBL_MAX / -INFINITY * DBL_MAX));
+
+        /* infinity / infinity is NaN */
+        assert_se(!iszero_safe(INFINITY / INFINITY));
+        assert_se(!iszero_safe(INFINITY * 2 / INFINITY));
+        assert_se(!iszero_safe(INFINITY / DBL_MAX / INFINITY));
+}
+
+TEST(fp_equal) {
+        /* normal values */
+        assert_se( fp_equal(0.0, -0e0));
+        assert_se( fp_equal(3.0, 3));
+        assert_se(!fp_equal(3.000001, 3));
+        assert_se( fp_equal(M_PI, M_PI));
+        assert_se(!fp_equal(M_PI, -M_PI));
+        assert_se( fp_equal(DBL_MAX, DBL_MAX));
+        assert_se(!fp_equal(DBL_MAX, -DBL_MAX));
+        assert_se(!fp_equal(-DBL_MAX, DBL_MAX));
+        assert_se( fp_equal(-DBL_MAX, -DBL_MAX));
+        assert_se( fp_equal(DBL_MIN, DBL_MIN));
+        assert_se(!fp_equal(DBL_MIN, -DBL_MIN));
+        assert_se(!fp_equal(-DBL_MIN, DBL_MIN));
+        assert_se( fp_equal(-DBL_MIN, -DBL_MIN));
+
+        /* subnormal values */
+        assert_se( fp_equal(DBL_MIN / 10, DBL_MIN / 10));
+        assert_se(!fp_equal(DBL_MIN / 10, -DBL_MIN / 10));
+        assert_se(!fp_equal(-DBL_MIN / 10, DBL_MIN / 10));
+        assert_se( fp_equal(-DBL_MIN / 10, -DBL_MIN / 10));
+        assert_se(!fp_equal(DBL_MIN / 10, DBL_MIN / 15));
+        assert_se(!fp_equal(DBL_MIN / 10, DBL_MIN / 15));
+
+        /* subnormal difference */
+        assert_se(!fp_equal(DBL_MIN / 10, DBL_MIN + DBL_MIN / 10));
+        assert_se( fp_equal(3.0, 3.0 + DBL_MIN / 2)); /* 3.0 + DBL_MIN / 2 is truncated to 3.0 */
+
+        /* too small values */
+        assert_se( fp_equal(DBL_MIN / DBL_MAX, -DBL_MIN / DBL_MAX));
+
+        /* NaN or infinity */
+        assert_se(!fp_equal(NAN, NAN));
+        assert_se(!fp_equal(NAN, 0));
+        assert_se(!fp_equal(NAN, INFINITY));
+        assert_se(!fp_equal(INFINITY, INFINITY));
+        assert_se(!fp_equal(INFINITY, -INFINITY));
+        assert_se(!fp_equal(-INFINITY, INFINITY));
+        assert_se(!fp_equal(-INFINITY, -INFINITY));
+
+        /* inverse of infinity */
+        assert_se( fp_equal(0, 1 / INFINITY));
+        assert_se( fp_equal(42 / INFINITY, 1 / -INFINITY));
+        assert_se(!fp_equal(42 / INFINITY, INFINITY / INFINITY));
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-memory-util.c b/src/test/test-memory-util.c
new file mode 100644
index 0000000..241f46c
--- /dev/null
+++ b/src/test/test-memory-util.c
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "memory-util.h"
+#include "tests.h"
+
+TEST(eqzero) {
+        const uint32_t zeros[] = {0, 0, 0};
+        const uint32_t ones[] = {1, 1};
+        const uint32_t mixed[] = {0, 1, 0, 0, 0};
+        const uint8_t longer[] = {[55] = 255};
+
+        assert_se(eqzero(zeros));
+        assert_se(!eqzero(ones));
+        assert_se(!eqzero(mixed));
+        assert_se(!eqzero(longer));
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-mkdir.c b/src/test/test-mkdir.c
new file mode 100644
index 0000000..2ea7257
--- /dev/null
+++ b/src/test/test-mkdir.c
@@ -0,0 +1,121 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <unistd.h>
+
+#include "fs-util.h"
+#include "mkdir.h"
+#include "path-util.h"
+#include "rm-rf.h"
+#include "stat-util.h"
+#include "tests.h"
+#include "tmpfile-util.h"
+#include "user-util.h"
+
+TEST(mkdir_p_safe) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
+        _cleanup_free_ char *p = NULL, *q = NULL;
+
+        assert_se(mkdtemp_malloc("/tmp/test-mkdir-XXXXXX", &tmp) >= 0);
+
+        assert_se(p = path_join(tmp, "run/aaa/bbb"));
+        assert_se(mkdir_p(p, 0755) >= 0);
+        assert_se(is_dir(p, false) > 0);
+        assert_se(is_dir(p, true) > 0);
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "run/ccc/ddd"));
+        assert_se(mkdir_p_safe(tmp, p, 0755, UID_INVALID, GID_INVALID, 0) >= 0);
+        assert_se(is_dir(p, false) > 0);
+        assert_se(is_dir(p, true) > 0);
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "var/run"));
+        assert_se(mkdir_parents_safe(tmp, p, 0755, UID_INVALID, GID_INVALID, 0) >= 0);
+        assert_se(symlink("../run", p) >= 0);
+        assert_se(is_dir(p, false) == 0);
+        assert_se(is_dir(p, true) > 0);
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "var/run/hoge/foo/baz"));
+        assert_se(mkdir_p_safe(tmp, p, 0755, UID_INVALID, GID_INVALID, 0) >= 0);
+        assert_se(is_dir(p, false) > 0);
+        assert_se(is_dir(p, true) > 0);
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "not-exists"));
+        assert_se(q = path_join(p, "aaa"));
+        assert_se(mkdir_p_safe(p, q, 0755, UID_INVALID, GID_INVALID, 0) == -ENOENT);
+
+        p = mfree(p);
+        q = mfree(q);
+        assert_se(p = path_join(tmp, "regular-file"));
+        assert_se(q = path_join(p, "aaa"));
+        assert_se(touch(p) >= 0);
+        assert_se(mkdir_p_safe(p, q, 0755, UID_INVALID, GID_INVALID, 0) == -ENOTDIR);
+
+        p = mfree(p);
+        q = mfree(q);
+        assert_se(p = path_join(tmp, "symlink"));
+        assert_se(q = path_join(p, "hoge/foo"));
+        assert_se(symlink("aaa", p) >= 0);
+        assert_se(mkdir_p_safe(tmp, q, 0755, UID_INVALID, GID_INVALID, 0) >= 0);
+        assert_se(is_dir(q, false) > 0);
+        assert_se(is_dir(q, true) > 0);
+        q = mfree(q);
+        assert_se(q = path_join(tmp, "aaa/hoge/foo"));
+        assert_se(is_dir(q, false) > 0);
+        assert_se(is_dir(q, true) > 0);
+
+        assert_se(mkdir_p_safe(tmp, "/tmp/test-mkdir-outside", 0755, UID_INVALID, GID_INVALID, 0) == -ENOTDIR);
+}
+
+TEST(mkdir_p_root) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
+        _cleanup_free_ char *p = NULL;
+
+        assert_se(mkdtemp_malloc("/tmp/test-mkdir-XXXXXX", &tmp) >= 0);
+
+        assert_se(p = path_join(tmp, "run/aaa/bbb"));
+        assert_se(mkdir_p_root(tmp, "/run/aaa/bbb", UID_INVALID, GID_INVALID, 0755) >= 0);
+        assert_se(is_dir(p, false) > 0);
+        assert_se(is_dir(p, true) > 0);
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "var/run"));
+        assert_se(mkdir_parents_safe(tmp, p, 0755, UID_INVALID, GID_INVALID, 0) >= 0);
+        assert_se(symlink("../run", p) >= 0);
+        assert_se(is_dir(p, false) == 0);
+        assert_se(is_dir(p, true) > 0);
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "var/run/hoge/foo/baz"));
+        assert_se(mkdir_p_root(tmp, "/var/run/hoge/foo/baz", UID_INVALID, GID_INVALID, 0755) >= 0);
+        assert_se(is_dir(p, false) > 0);
+        assert_se(is_dir(p, true) > 0);
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "not-exists"));
+        assert_se(mkdir_p_root(p, "/aaa", UID_INVALID, GID_INVALID, 0755) == -ENOENT);
+
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "regular-file"));
+        assert_se(touch(p) >= 0);
+        assert_se(mkdir_p_root(p, "/aaa", UID_INVALID, GID_INVALID, 0755) == -ENOTDIR);
+
+        /* FIXME: The tests below do not work.
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "symlink"));
+        assert_se(symlink("aaa", p) >= 0);
+        assert_se(mkdir_p_root(tmp, "/symlink/hoge/foo", UID_INVALID, GID_INVALID, 0755) >= 0);
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "symlink/hoge/foo"));
+        assert_se(is_dir(p, false) > 0);
+        assert_se(is_dir(p, true) > 0);
+        p = mfree(p);
+        assert_se(p = path_join(tmp, "aaa/hoge/foo"));
+        assert_se(is_dir(p, false) > 0);
+        assert_se(is_dir(p, true) > 0);
+        */
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-modhex.c b/src/test/test-modhex.c
index 836460c..6725732 100644
--- a/src/test/test-modhex.c
+++ b/src/test/test-modhex.c
@@ -3,12 +3,13 @@
 #include "recovery-key.h"
 #include "alloc-util.h"
 #include "string-util.h"
+#include "tests.h"
 
 static void test_normalize_recovery_key(const char *t, const char *expected) {
         _cleanup_free_ char *z = NULL;
         int r;
 
-        assert(t);
+        assert_se(t);
 
         r = normalize_recovery_key(t, &z);
         assert_se(expected ?
@@ -16,8 +17,7 @@
                   (r == -EINVAL && z == NULL));
 }
 
-int main(int argc, char *arv[]) {
-
+TEST(normalize_recovery_key_all) {
         test_normalize_recovery_key("iefgcelh-biduvkjv-cjvuncnk-vlfchdid-jhtuhhde-urkllkeg-ilkjgbrt-hjkbgktj",
                                     "iefgcelh-biduvkjv-cjvuncnk-vlfchdid-jhtuhhde-urkllkeg-ilkjgbrt-hjkbgktj");
 
@@ -46,6 +46,6 @@
         test_normalize_recovery_key("iefgcelhebiduvkjv-cjvuncnk-vlfchdid-jhtuhhde-urkllkeg-ilkjgbrt-hjkbgktj", NULL);
 
         test_normalize_recovery_key("", NULL);
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-mount-util.c b/src/test/test-mount-util.c
index d3d0040..fddf705 100644
--- a/src/test/test-mount-util.c
+++ b/src/test/test-mount-util.c
@@ -11,6 +11,7 @@
 #include "missing_mount.h"
 #include "mkdir.h"
 #include "mount-util.h"
+#include "mountpoint-util.h"
 #include "namespace-util.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -20,12 +21,10 @@
 #include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_mount_option_mangle(void) {
+TEST(mount_option_mangle) {
         char *opts = NULL;
         unsigned long f;
 
-        log_info("/* %s */", __func__);
-
         assert_se(mount_option_mangle(NULL, MS_RDONLY|MS_NOSUID, &f, &opts) == 0);
         assert_se(f == (MS_RDONLY|MS_NOSUID));
         assert_se(opts == NULL);
@@ -38,14 +37,14 @@
         assert_se(f == (MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC));
         assert_se(opts == NULL);
 
-        assert_se(mount_option_mangle("ro,nosuid,nodev,noexec,mode=755", 0, &f, &opts) == 0);
+        assert_se(mount_option_mangle("ro,nosuid,nodev,noexec,mode=0755", 0, &f, &opts) == 0);
         assert_se(f == (MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC));
-        assert_se(streq(opts, "mode=755"));
+        assert_se(streq(opts, "mode=0755"));
         opts = mfree(opts);
 
-        assert_se(mount_option_mangle("rw,nosuid,foo,hogehoge,nodev,mode=755", 0, &f, &opts) == 0);
+        assert_se(mount_option_mangle("rw,nosuid,foo,hogehoge,nodev,mode=0755", 0, &f, &opts) == 0);
         assert_se(f == (MS_NOSUID|MS_NODEV));
-        assert_se(streq(opts, "foo,hogehoge,mode=755"));
+        assert_se(streq(opts, "foo,hogehoge,mode=0755"));
         opts = mfree(opts);
 
         assert_se(mount_option_mangle("rw,nosuid,nodev,noexec,relatime,net_cls,net_prio", MS_RDONLY, &f, &opts) == 0);
@@ -53,19 +52,19 @@
         assert_se(streq(opts, "net_cls,net_prio"));
         opts = mfree(opts);
 
-        assert_se(mount_option_mangle("rw,nosuid,nodev,relatime,size=1630748k,mode=700,uid=1000,gid=1000", MS_RDONLY, &f, &opts) == 0);
+        assert_se(mount_option_mangle("rw,nosuid,nodev,relatime,size=1630748k,mode=0700,uid=1000,gid=1000", MS_RDONLY, &f, &opts) == 0);
         assert_se(f == (MS_NOSUID|MS_NODEV|MS_RELATIME));
-        assert_se(streq(opts, "size=1630748k,mode=700,uid=1000,gid=1000"));
+        assert_se(streq(opts, "size=1630748k,mode=0700,uid=1000,gid=1000"));
         opts = mfree(opts);
 
-        assert_se(mount_option_mangle("size=1630748k,rw,gid=1000,,,nodev,relatime,,mode=700,nosuid,uid=1000", MS_RDONLY, &f, &opts) == 0);
+        assert_se(mount_option_mangle("size=1630748k,rw,gid=1000,,,nodev,relatime,,mode=0700,nosuid,uid=1000", MS_RDONLY, &f, &opts) == 0);
         assert_se(f == (MS_NOSUID|MS_NODEV|MS_RELATIME));
-        assert_se(streq(opts, "size=1630748k,gid=1000,mode=700,uid=1000"));
+        assert_se(streq(opts, "size=1630748k,gid=1000,mode=0700,uid=1000"));
         opts = mfree(opts);
 
-        assert_se(mount_option_mangle("rw,exec,size=8143984k,nr_inodes=2035996,mode=755", MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV, &f, &opts) == 0);
+        assert_se(mount_option_mangle("rw,exec,size=8143984k,nr_inodes=2035996,mode=0755", MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV, &f, &opts) == 0);
         assert_se(f == (MS_NOSUID|MS_NODEV));
-        assert_se(streq(opts, "size=8143984k,nr_inodes=2035996,mode=755"));
+        assert_se(streq(opts, "size=8143984k,nr_inodes=2035996,mode=0755"));
         opts = mfree(opts);
 
         assert_se(mount_option_mangle("rw,relatime,fmask=0022,,,dmask=0022", MS_RDONLY, &f, &opts) == 0);
@@ -75,9 +74,9 @@
 
         assert_se(mount_option_mangle("rw,relatime,fmask=0022,dmask=0022,\"hogehoge", MS_RDONLY, &f, &opts) < 0);
 
-        assert_se(mount_option_mangle("mode=1777,size=10%,nr_inodes=400k,uid=496107520,gid=496107520,context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\"", 0, &f, &opts) == 0);
+        assert_se(mount_option_mangle("mode=01777,size=10%,nr_inodes=400k,uid=496107520,gid=496107520,context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\"", 0, &f, &opts) == 0);
         assert_se(f == 0);
-        assert_se(streq(opts, "mode=1777,size=10%,nr_inodes=400k,uid=496107520,gid=496107520,context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\""));
+        assert_se(streq(opts, "mode=01777,size=10%,nr_inodes=400k,uid=496107520,gid=496107520,context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\""));
         opts = mfree(opts);
 }
 
@@ -91,9 +90,7 @@
         assert_se(streq(x, expected));
 }
 
-static void test_mount_flags_to_string(void) {
-        log_info("/* %s */", __func__);
-
+TEST(mount_flags_to_string) {
         test_mount_flags_to_string_one(0, "0");
         test_mount_flags_to_string_one(MS_RDONLY, "MS_RDONLY");
         test_mount_flags_to_string_one(MS_NOSUID, "MS_NOSUID");
@@ -129,12 +126,9 @@
                                        "MS_I_VERSION|MS_STRICTATIME|MS_LAZYTIME|fc000200");
 }
 
-static void test_bind_remount_recursive(void) {
+TEST(bind_remount_recursive) {
         _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
         _cleanup_free_ char *subdir = NULL;
-        const char *p;
-
-        log_info("/* %s */", __func__);
 
         if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) {
                 (void) log_tests_skipped("not running privileged");
@@ -169,7 +163,7 @@
                         assert_se(!FLAGS_SET(svfs.f_flag, ST_RDONLY));
 
                         /* Now mark the path we currently run for read-only */
-                        assert_se(bind_remount_recursive(p, MS_RDONLY, MS_RDONLY, STRV_MAKE("/sys/kernel")) >= 0);
+                        assert_se(bind_remount_recursive(p, MS_RDONLY, MS_RDONLY, path_equal(p, "/sys") ? STRV_MAKE("/sys/kernel") : NULL) >= 0);
 
                         /* Ensure that this worked on the top-level */
                         assert_se(statvfs(p, &svfs) >= 0);
@@ -186,11 +180,9 @@
         }
 }
 
-static void test_bind_remount_one(void) {
+TEST(bind_remount_one) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) {
                 (void) log_tests_skipped("not running privileged");
                 return;
@@ -209,6 +201,7 @@
                 assert_se(fopen_unlocked("/proc/self/mountinfo", "re", &proc_self_mountinfo) >= 0);
 
                 assert_se(bind_remount_one_with_mountinfo("/run", MS_RDONLY, MS_RDONLY, proc_self_mountinfo) >= 0);
+                assert_se(bind_remount_one_with_mountinfo("/run", MS_NOEXEC, MS_RDONLY|MS_NOEXEC, proc_self_mountinfo) >= 0);
                 assert_se(bind_remount_one_with_mountinfo("/proc/idontexist", MS_RDONLY, MS_RDONLY, proc_self_mountinfo) == -ENOENT);
                 assert_se(bind_remount_one_with_mountinfo("/proc/self", MS_RDONLY, MS_RDONLY, proc_self_mountinfo) == -EINVAL);
                 assert_se(bind_remount_one_with_mountinfo("/", MS_RDONLY, MS_RDONLY, proc_self_mountinfo) >= 0);
@@ -219,13 +212,11 @@
         assert_se(wait_for_terminate_and_check("test-remount-one", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_make_mount_point_inode(void) {
+TEST(make_mount_point_inode) {
         _cleanup_(rm_rf_physical_and_freep) char *d = NULL;
         const char *src_file, *src_dir, *dst_file, *dst_dir;
         struct stat st;
 
-        log_info("/* %s */", __func__);
-
         assert_se(mkdtemp_malloc(NULL, &d) >= 0);
 
         src_file = strjoina(d, "/src/file");
@@ -265,14 +256,4 @@
         assert_se(!(S_IXOTH & st.st_mode));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_mount_option_mangle();
-        test_mount_flags_to_string();
-        test_bind_remount_recursive();
-        test_bind_remount_one();
-        test_make_mount_point_inode();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-mountpoint-util.c b/src/test/test-mountpoint-util.c
index 983e184..ea47c3a 100644
--- a/src/test/test-mountpoint-util.c
+++ b/src/test/test-mountpoint-util.c
@@ -5,7 +5,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
-#include "def.h"
+#include "constants.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "hashmap.h"
@@ -17,19 +17,19 @@
 #include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_mount_propagation_flags(const char *name, int ret, unsigned long expected) {
-        long unsigned flags;
+static void test_mount_propagation_flag_one(const char *name, int ret, unsigned long expected) {
+        unsigned long flags;
 
-        log_info("/* %s(%s) */", __func__, name);
+        log_info("/* %s(%s) */", __func__, strnull(name));
 
-        assert_se(mount_propagation_flags_from_string(name, &flags) == ret);
+        assert_se(mount_propagation_flag_from_string(name, &flags) == ret);
 
         if (ret >= 0) {
                 const char *c;
 
                 assert_se(flags == expected);
 
-                c = mount_propagation_flags_to_string(flags);
+                c = mount_propagation_flag_to_string(flags);
                 if (isempty(name))
                         assert_se(isempty(c));
                 else
@@ -37,15 +37,23 @@
         }
 }
 
-static void test_mnt_id(void) {
+TEST(mount_propagation_flag) {
+        test_mount_propagation_flag_one("shared", 0, MS_SHARED);
+        test_mount_propagation_flag_one("slave", 0, MS_SLAVE);
+        test_mount_propagation_flag_one("private", 0, MS_PRIVATE);
+        test_mount_propagation_flag_one(NULL, 0, 0);
+        test_mount_propagation_flag_one("", 0, 0);
+        test_mount_propagation_flag_one("xxxx", -EINVAL, 0);
+        test_mount_propagation_flag_one(" ", -EINVAL, 0);
+}
+
+TEST(mnt_id) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_hashmap_free_free_ Hashmap *h = NULL;
         char *p;
         void *k;
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(f = fopen("/proc/self/mountinfo", "re"));
         assert_se(h = hashmap_new(&trivial_hash_ops));
 
@@ -75,36 +83,46 @@
 
         HASHMAP_FOREACH_KEY(p, k, h) {
                 int mnt_id = PTR_TO_INT(k), mnt_id2;
+                const char *q;
 
                 r = path_get_mnt_id(p, &mnt_id2);
                 if (r < 0) {
-                        log_debug_errno(r, "Failed to get the mnt id of %s: %m\n", p);
+                        log_debug_errno(r, "Failed to get the mnt id of %s: %m", p);
                         continue;
                 }
 
                 if (mnt_id == mnt_id2) {
-                        log_debug("mnt ids of %s is %i\n", p, mnt_id);
+                        log_debug("mnt ids of %s is %i.", p, mnt_id);
                         continue;
                 } else
-                        log_debug("mnt ids of %s are %i, %i\n", p, mnt_id, mnt_id2);
+                        log_debug("mnt ids of %s are %i (from /proc/self/mountinfo), %i (from path_get_mnt_id()).", p, mnt_id, mnt_id2);
 
-                /* The ids don't match? If so, then there are two mounts on the same path, let's check if
-                 * that's really the case */
-                char *t = hashmap_get(h, INT_TO_PTR(mnt_id2));
-                log_debug("the other path for mnt id %i is %s\n", mnt_id2, t);
-                assert_se(path_equal(p, t));
+                /* The ids don't match? This can easily happen e.g. running with "unshare --mount-proc".
+                 * See #11505. */
+                assert_se(q = hashmap_get(h, INT_TO_PTR(mnt_id2)));
+
+                assert_se((r = path_is_mount_point(p, NULL, 0)) >= 0);
+                if (r == 0) {
+                        /* If the path is not a mount point anymore, then it must be a sub directory of
+                         * the path corresponds to mnt_id2. */
+                        log_debug("The path %s for mnt id %i is not a mount point.", p, mnt_id2);
+                        assert_se(!isempty(path_startswith(p, q)));
+                } else {
+                        /* If the path is still a mount point, then it must be equivalent to the path
+                         * corresponds to mnt_id2 */
+                        log_debug("There are multiple mounts on the same path %s.", p);
+                        assert_se(path_equal(p, q));
+                }
         }
 }
 
-static void test_path_is_mount_point(void) {
+TEST(path_is_mount_point) {
         int fd;
         char tmp_dir[] = "/tmp/test-path-is-mount-point-XXXXXX";
         _cleanup_free_ char *file1 = NULL, *file2 = NULL, *link1 = NULL, *link2 = NULL;
         _cleanup_free_ char *dir1 = NULL, *dir1file = NULL, *dirlink1 = NULL, *dirlink1file = NULL;
         _cleanup_free_ char *dir2 = NULL, *dir2file = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(path_is_mount_point("/", NULL, AT_SYMLINK_FOLLOW) > 0);
         assert_se(path_is_mount_point("/", NULL, 0) > 0);
         assert_se(path_is_mount_point("//", NULL, AT_SYMLINK_FOLLOW) > 0);
@@ -252,15 +270,14 @@
                 assert_se(rl1t == 0);
 
         } else
-                printf("Skipping bind mount file test: %m\n");
+                log_info("Skipping bind mount file test");
 
         assert_se(rm_rf(tmp_dir, REMOVE_ROOT|REMOVE_PHYSICAL) == 0);
 }
 
-static void test_fd_is_mount_point(void) {
-        _cleanup_close_ int fd = -1;
-
-        log_info("/* %s */", __func__);
+TEST(fd_is_mount_point) {
+        _cleanup_close_ int fd = -EBADF;
+        int r;
 
         fd = open("/", O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY);
         assert_se(fd >= 0);
@@ -286,13 +303,28 @@
          * the system is borked. Let's allow for it to be missing though. */
         assert_se(IN_SET(fd_is_mount_point(fd, "root", 0), -ENOENT, 0));
         assert_se(IN_SET(fd_is_mount_point(fd, "root/", 0), -ENOENT, 0));
+
+        safe_close(fd);
+        fd = open("/proc", O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY);
+        assert_se(fd >= 0);
+
+        assert_se(fd_is_mount_point(fd, NULL, 0) > 0);
+        assert_se(fd_is_mount_point(fd, "", 0) == -EINVAL);
+        assert_se(fd_is_mount_point(fd, "version", 0) == 0);
+
+        safe_close(fd);
+        fd = open("/proc/version", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+        assert_se(fd >= 0);
+
+        r = fd_is_mount_point(fd, NULL, 0);
+        assert_se(IN_SET(r, 0, -ENOTDIR)); /* on old kernels we can't determine if regular files are mount points if we have no directory fd */
+        assert_se(fd_is_mount_point(fd, "", 0) == -EINVAL);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+static int intro(void) {
+        /* let's move into our own mount namespace with all propagation from the host turned off, so
+         * that /proc/self/mountinfo is static and constant for the whole time our test runs. */
 
-        /* let's move into our own mount namespace with all propagation from the host turned off, so that
-         * /proc/self/mountinfo is static and constant for the whole time our test runs. */
         if (unshare(CLONE_NEWNS) < 0) {
                 if (!ERRNO_IS_PRIVILEGE(errno))
                         return log_error_errno(errno, "Failed to detach mount namespace: %m");
@@ -301,17 +333,7 @@
         } else
                 assert_se(mount(NULL, "/", NULL, MS_PRIVATE | MS_REC, NULL) >= 0);
 
-        test_mount_propagation_flags("shared", 0, MS_SHARED);
-        test_mount_propagation_flags("slave", 0, MS_SLAVE);
-        test_mount_propagation_flags("private", 0, MS_PRIVATE);
-        test_mount_propagation_flags(NULL, 0, 0);
-        test_mount_propagation_flags("", 0, 0);
-        test_mount_propagation_flags("xxxx", -EINVAL, 0);
-        test_mount_propagation_flags(" ", -EINVAL, 0);
-
-        test_mnt_id();
-        test_path_is_mount_point();
-        test_fd_is_mount_point();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/test/test-namespace.c b/src/test/test-namespace.c
index cfa46b0..7215512 100644
--- a/src/test/test-namespace.c
+++ b/src/test/test-namespace.c
@@ -11,10 +11,9 @@
 #include "string-util.h"
 #include "tests.h"
 #include "user-util.h"
-#include "util.h"
 #include "virt.h"
 
-static void test_namespace_cleanup_tmpdir(void) {
+TEST(namespace_cleanup_tmpdir) {
         {
                 _cleanup_(namespace_cleanup_tmpdirp) char *dir;
                 assert_se(dir = strdup(RUN_SYSTEMD_EMPTY));
@@ -27,7 +26,7 @@
         }
 }
 
-static void test_tmpdir(const char *id, const char *A, const char *B) {
+static void test_tmpdir_one(const char *id, const char *A, const char *B) {
         _cleanup_free_ char *a, *b;
         struct stat x, y;
         char *c, *d;
@@ -63,8 +62,28 @@
         }
 }
 
+TEST(tmpdir) {
+        _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL, *zz = NULL;
+        sd_id128_t bid;
+
+        assert_se(sd_id128_get_boot(&bid) >= 0);
+
+        x = strjoin("/tmp/systemd-private-", SD_ID128_TO_STRING(bid), "-abcd.service-");
+        y = strjoin("/var/tmp/systemd-private-", SD_ID128_TO_STRING(bid), "-abcd.service-");
+        assert_se(x && y);
+
+        test_tmpdir_one("abcd.service", x, y);
+
+        z = strjoin("/tmp/systemd-private-", SD_ID128_TO_STRING(bid), "-sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device-");
+        zz = strjoin("/var/tmp/systemd-private-", SD_ID128_TO_STRING(bid), "-sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device-");
+
+        assert_se(z && zz);
+
+        test_tmpdir_one("sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device", z, zz);
+}
+
 static void test_shareable_ns(unsigned long nsflag) {
-        _cleanup_close_pair_ int s[2] = { -1, -1 };
+        _cleanup_close_pair_ int s[2] = PIPE_EBADF;
         pid_t pid1, pid2, pid3;
         int r, n = 0;
         siginfo_t si;
@@ -121,15 +140,15 @@
         assert_se(n == 1);
 }
 
-static void test_netns(void) {
+TEST(netns) {
         test_shareable_ns(CLONE_NEWNET);
 }
 
-static void test_ipcns(void) {
+TEST(ipcns) {
         test_shareable_ns(CLONE_NEWIPC);
 }
 
-static void test_protect_kernel_logs(void) {
+TEST(protect_kernel_logs) {
         int r;
         pid_t pid;
         static const NamespaceInfo ns_info = {
@@ -151,7 +170,7 @@
         assert_se(pid >= 0);
 
         if (pid == 0) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 fd = open("/dev/kmsg", O_RDONLY | O_CLOEXEC);
                 assert_se(fd > 0);
@@ -166,6 +185,7 @@
                                     NULL,
                                     NULL,
                                     NULL,
+                                    NULL,
                                     NULL, 0,
                                     NULL, 0,
                                     NULL, 0,
@@ -186,6 +206,8 @@
                                     NULL,
                                     NULL,
                                     NULL,
+                                    NULL,
+                                    NULL,
                                     NULL);
                 assert_se(r == 0);
 
@@ -199,39 +221,11 @@
         assert_se(wait_for_terminate_and_check("ns-kernellogs", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-int main(int argc, char *argv[]) {
-        sd_id128_t bid;
-        char boot_id[SD_ID128_STRING_MAX];
-        _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL, *zz = NULL;
-
-        test_setup_logging(LOG_INFO);
-
-        test_namespace_cleanup_tmpdir();
-
-        if (!have_namespaces()) {
-                log_tests_skipped("Don't have namespace support");
-                return EXIT_TEST_SKIP;
-        }
-
-        assert_se(sd_id128_get_boot(&bid) >= 0);
-        sd_id128_to_string(bid, boot_id);
-
-        x = strjoin("/tmp/systemd-private-", boot_id, "-abcd.service-");
-        y = strjoin("/var/tmp/systemd-private-", boot_id, "-abcd.service-");
-        assert_se(x && y);
-
-        test_tmpdir("abcd.service", x, y);
-
-        z = strjoin("/tmp/systemd-private-", boot_id, "-sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device-");
-        zz = strjoin("/var/tmp/systemd-private-", boot_id, "-sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device-");
-
-        assert_se(z && zz);
-
-        test_tmpdir("sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device", z, zz);
-
-        test_netns();
-        test_ipcns();
-        test_protect_kernel_logs();
+static int intro(void) {
+        if (!have_namespaces())
+                return log_tests_skipped("Don't have namespace support");
 
         return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-net-naming-scheme.c b/src/test/test-net-naming-scheme.c
new file mode 100644
index 0000000..0766170
--- /dev/null
+++ b/src/test/test-net-naming-scheme.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "netif-naming-scheme.h"
+#include "string-util.h"
+#include "tests.h"
+
+TEST(default_net_naming_scheme) {
+        const NamingScheme *n;
+        assert_se(n = naming_scheme_from_name(DEFAULT_NET_NAMING_SCHEME));
+        log_info("default → %s", n->name);
+}
+
+TEST(naming_scheme_conversions) {
+        const NamingScheme *n;
+        assert_se(n = naming_scheme_from_name("latest"));
+        log_info("latest → %s", n->name);
+
+        assert_se(n = naming_scheme_from_name("v238"));
+        assert_se(streq(n->name, "v238"));
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-netlink-manual.c b/src/test/test-netlink-manual.c
index 49aca68..6543c61 100644
--- a/src/test/test-netlink-manual.c
+++ b/src/test/test-netlink-manual.c
@@ -11,7 +11,6 @@
 #include "macro.h"
 #include "module-util.h"
 #include "tests.h"
-#include "util.h"
 
 static int load_module(const char *mod_name) {
         _cleanup_(kmod_unrefp) struct kmod_ctx *ctx = NULL;
diff --git a/src/test/test-ns.c b/src/test/test-ns.c
index ae666a3..7eb29d1 100644
--- a/src/test/test-ns.c
+++ b/src/test/test-ns.c
@@ -83,6 +83,7 @@
                             (char **) writable,
                             (char **) readonly,
                             (char **) inaccessible,
+                            NULL,
                             (char **) exec,
                             (char **) no_exec,
                             NULL,
@@ -107,6 +108,8 @@
                             NULL,
                             NULL,
                             NULL,
+                            NULL,
+                            NULL,
                             NULL);
         if (r < 0) {
                 log_error_errno(r, "Failed to set up namespace: %m");
diff --git a/src/test/test-nss-hosts.c b/src/test/test-nss-hosts.c
index eddb047..defecd3 100644
--- a/src/test/test-nss-hosts.c
+++ b/src/test/test-nss-hosts.c
@@ -7,6 +7,7 @@
 #include "af-list.h"
 #include "alloc-util.h"
 #include "dlfcn-util.h"
+#include "env-util.h"
 #include "errno-list.h"
 #include "format-util.h"
 #include "hexdecoct.h"
@@ -19,6 +20,7 @@
 #include "nss-util.h"
 #include "parse-util.h"
 #include "path-util.h"
+#include "socket-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
@@ -36,19 +38,17 @@
         if (name)
                 return name;
 
-        snprintf(buf, buf_len, "%i", family);
+        (void) snprintf(buf, buf_len, "%i", family);
         return buf;
 }
 
 static int print_gaih_addrtuples(const struct gaih_addrtuple *tuples) {
-        int n = 0;
+        int r, n = 0;
 
         for (const struct gaih_addrtuple *it = tuples; it; it = it->next) {
                 _cleanup_free_ char *a = NULL;
                 union in_addr_union u;
-                int r;
                 char family_name[DECIMAL_STR_MAX(int)];
-                char ifname[IF_NAMESIZE + 1];
 
                 memcpy(&u, it->addr, 16);
                 r = in_addr_to_string(it->family, &u, &a);
@@ -56,28 +56,18 @@
                 if (r == -EAFNOSUPPORT)
                         assert_se(a = hexmem(it->addr, 16));
 
-                if (it->scopeid == 0)
-                        goto numerical_index;
-
-                if (!format_ifname(it->scopeid, ifname)) {
-                        log_warning_errno(errno, "if_indextoname(%d) failed: %m", it->scopeid);
-                numerical_index:
-                        xsprintf(ifname, "%i", it->scopeid);
-                };
-
-                log_info("        \"%s\" %s %s %%%s",
+                log_info("        \"%s\" %s %s %s",
                          it->name,
                          af_to_string(it->family, family_name, sizeof family_name),
                          a,
-                         ifname);
-                n ++;
+                         FORMAT_IFNAME_FULL(it->scopeid, FORMAT_IFNAME_IFINDEX_WITH_PERCENT));
+
+                n++;
         }
         return n;
 }
 
 static void print_struct_hostent(struct hostent *host, const char *canon) {
-        char **s;
-
         log_info("        \"%s\"", host->h_name);
         STRV_FOREACH(s, host->h_aliases)
                 log_info("        alias \"%s\"", *s);
@@ -124,10 +114,10 @@
 
         status = f(name, &pat, buffer, sizeof buffer, &errno1, &errno2, &ttl);
         if (status == NSS_STATUS_SUCCESS) {
-                log_info("%s(\"%s\") → status=%s%-20spat=buffer+0x%tx errno=%d/%s h_errno=%d/%s ttl=%"PRIi32,
+                log_info("%s(\"%s\") → status=%s%-20spat=buffer+0x%"PRIxPTR" errno=%d/%s h_errno=%d/%s ttl=%"PRIi32,
                          fname, name,
                          nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
-                         pat ? (char*) pat - buffer : 0,
+                         pat ? (uintptr_t) pat - (uintptr_t) buffer : 0,
                          errno1, errno_to_name(errno1) ?: "---",
                          errno2, hstrerror(errno2),
                          ttl);
@@ -145,9 +135,18 @@
         if (STR_IN_SET(module, "resolve", "mymachines") && status == NSS_STATUS_UNAVAIL)
                 return;
 
-        if (STR_IN_SET(module, "myhostname", "resolve") && streq(name, "localhost")) {
-                assert_se(status == NSS_STATUS_SUCCESS);
-                assert_se(n == 2);
+        if (streq(name, "localhost")) {
+                if (streq(module, "myhostname")) {
+                        assert_se(status == NSS_STATUS_SUCCESS);
+                        assert_se(n == socket_ipv6_is_enabled() + 1);
+
+                } else if (streq(module, "resolve") && getenv_bool_secure("SYSTEMD_NSS_RESOLVE_SYNTHESIZE") != 0) {
+                        assert_se(status == NSS_STATUS_SUCCESS);
+                        if (socket_ipv6_is_enabled())
+                                assert_se(n == 2);
+                        else
+                                assert_se(n <= 2); /* Even if IPv6 is disabled, /etc/hosts may contain ::1. */
+                }
         }
 }
 
@@ -325,7 +324,7 @@
         puts("");
         test_gethostbyname3_r(handle, module, name, AF_UNSPEC);
         puts("");
-        test_gethostbyname3_r(handle, module, name, AF_LOCAL);
+        test_gethostbyname3_r(handle, module, name, AF_UNIX);
         puts("");
 
         test_gethostbyname2_r(handle, module, name, AF_INET);
@@ -334,7 +333,7 @@
         puts("");
         test_gethostbyname2_r(handle, module, name, AF_UNSPEC);
         puts("");
-        test_gethostbyname2_r(handle, module, name, AF_LOCAL);
+        test_gethostbyname2_r(handle, module, name, AF_UNIX);
         puts("");
 
         test_gethostbyname_r(handle, module, name);
@@ -383,7 +382,6 @@
         if (!handle)
                 return -EINVAL;
 
-        char **name;
         STRV_FOREACH(name, names)
                 test_byname(handle, module, *name);
 
@@ -427,11 +425,10 @@
 #if ENABLE_NSS_MYMACHINES
                                 "mymachines",
 #endif
-                                "dns");
+                                NULL);
         assert_se(modules);
 
         if (argc > 2) {
-                char **name;
                 int family;
                 union in_addr_union address;
 
@@ -470,7 +467,6 @@
         _cleanup_strv_free_ char **modules = NULL, **names = NULL;
         _cleanup_free_ struct local_address *addresses = NULL;
         int n_addresses = 0;
-        char **module;
         int r;
 
         test_setup_logging(LOG_INFO);
diff --git a/src/test/test-nss-users.c b/src/test/test-nss-users.c
index c415c0c..5178779 100644
--- a/src/test/test-nss-users.c
+++ b/src/test/test-nss-users.c
@@ -170,7 +170,6 @@
         if (!handle)
                 return -EINVAL;
 
-        char **name;
         STRV_FOREACH(name, names)
                 test_byname(handle, module, *name);
 
@@ -214,7 +213,7 @@
 #if ENABLE_NSS_MYMACHINES
                                 "mymachines",
 #endif
-                                "files");
+                                NULL);
         assert_se(modules);
 
         if (argc > 2)
@@ -235,7 +234,6 @@
 static int run(int argc, char **argv) {
         _cleanup_free_ char *dir = NULL;
         _cleanup_strv_free_ char **modules = NULL, **names = NULL;
-        char **module;
         int r;
 
         test_setup_logging(LOG_INFO);
diff --git a/src/test/test-nulstr-util.c b/src/test/test-nulstr-util.c
new file mode 100644
index 0000000..70f1e87
--- /dev/null
+++ b/src/test/test-nulstr-util.c
@@ -0,0 +1,205 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "alloc-util.h"
+#include "nulstr-util.h"
+#include "set.h"
+#include "strv.h"
+#include "tests.h"
+
+TEST(strv_split_nulstr) {
+        _cleanup_strv_free_ char **l = NULL;
+        const char nulstr[] = "str0\0str1\0str2\0str3\0";
+
+        l = strv_split_nulstr(nulstr);
+        assert_se(l);
+
+        assert_se(streq(l[0], "str0"));
+        assert_se(streq(l[1], "str1"));
+        assert_se(streq(l[2], "str2"));
+        assert_se(streq(l[3], "str3"));
+}
+
+TEST(strv_parse_nulstr) {
+        _cleanup_strv_free_ char **l = NULL;
+        const char nulstr[] = "hoge\0hoge2\0hoge3\0\0hoge5\0\0xxx";
+
+        l = strv_parse_nulstr(nulstr, sizeof(nulstr)-1);
+        assert_se(l);
+        puts("Parse nulstr:");
+        strv_print(l);
+
+        assert_se(streq(l[0], "hoge"));
+        assert_se(streq(l[1], "hoge2"));
+        assert_se(streq(l[2], "hoge3"));
+        assert_se(streq(l[3], ""));
+        assert_se(streq(l[4], "hoge5"));
+        assert_se(streq(l[5], ""));
+        assert_se(streq(l[6], "xxx"));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[0]) {}, 0);
+        assert_se(l);
+        assert_se(strv_isempty(l));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[1]) { 0 }, 1);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[1]) { 'x' }, 1);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("x")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[2]) { 0, 0 }, 2);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("", "")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[2]) { 'x', 0 }, 2);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("x")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[3]) { 0, 0, 0 }, 3);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("", "", "")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[3]) { 'x', 0, 0 }, 3);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("x", "")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[3]) { 0, 'x', 0 }, 3);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("", "x")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[3]) { 0, 0, 'x' }, 3);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("", "", "x")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[3]) { 'x', 'x', 0 }, 3);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("xx")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[3]) { 0, 'x', 'x' }, 3);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("", "xx")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[3]) { 'x', 0, 'x' }, 3);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("x", "x")));
+        strv_free(l);
+
+        l = strv_parse_nulstr((const char[3]) { 'x', 'x', 'x' }, 3);
+        assert_se(l);
+        assert_se(strv_equal(l, STRV_MAKE("xxx")));
+}
+
+static void test_strv_make_nulstr_one(char **l) {
+        _cleanup_free_ char *b = NULL, *c = NULL;
+        _cleanup_strv_free_ char **q = NULL;
+        size_t n, m;
+        unsigned i = 0;
+
+        log_info("/* %s */", __func__);
+
+        assert_se(strv_make_nulstr(l, &b, &n) >= 0);
+        assert_se(q = strv_parse_nulstr(b, n));
+        assert_se(strv_equal(l, q));
+
+        assert_se(strv_make_nulstr(q, &c, &m) >= 0);
+        assert_se(memcmp_nn(b, n, c, m) == 0);
+
+        NULSTR_FOREACH(s, b)
+                assert_se(streq(s, l[i++]));
+        assert_se(i == strv_length(l));
+}
+
+TEST(strv_make_nulstr) {
+        test_strv_make_nulstr_one(NULL);
+        test_strv_make_nulstr_one(STRV_MAKE(NULL));
+        test_strv_make_nulstr_one(STRV_MAKE("foo"));
+        test_strv_make_nulstr_one(STRV_MAKE("foo", "bar"));
+        test_strv_make_nulstr_one(STRV_MAKE("foo", "bar", "quuux"));
+}
+
+TEST(set_make_nulstr) {
+        _cleanup_set_free_free_ Set *set = NULL;
+        size_t len = 0;
+        int r;
+
+        {
+                /* Unallocated and empty set. */
+                static const char expect[] = { 0x00, 0x00 };
+                _cleanup_free_ char *nulstr = NULL;
+
+                r = set_make_nulstr(set, &nulstr, &len);
+                assert_se(r == 0);
+                assert_se(len == 0);
+                assert_se(memcmp(expect, nulstr, len + 2) == 0);
+        }
+
+        {
+                /* Allocated by empty set. */
+                static const char expect[] = { 0x00, 0x00 };
+                _cleanup_free_ char *nulstr = NULL;
+
+                set = set_new(NULL);
+                assert_se(set);
+
+                r = set_make_nulstr(set, &nulstr, &len);
+                assert_se(r == 0);
+                assert_se(len == 0);
+                assert_se(memcmp(expect, nulstr, len + 2) == 0);
+        }
+
+        {
+                /* Non-empty set. */
+                static const char expect[] = { 'a', 'a', 'a', 0x00, 0x00 };
+                _cleanup_free_ char *nulstr = NULL;
+
+                assert_se(set_put_strdup(&set, "aaa") >= 0);
+
+                r = set_make_nulstr(set, &nulstr, &len);
+                assert_se(r == 0);
+                assert_se(len == 4);
+                assert_se(memcmp(expect, nulstr, len + 1) == 0);
+        }
+}
+
+static void test_strv_make_nulstr_binary_one(char **l, const char *b, size_t n) {
+        _cleanup_strv_free_ char **z = NULL;
+        _cleanup_free_ char *a = NULL;
+        size_t m;
+
+        assert_se(strv_make_nulstr(l, &a, &m) >= 0);
+        assert_se(memcmp_nn(a, m, b, n) == 0);
+        assert_se(z = strv_parse_nulstr(a, m));
+        assert_se(strv_equal(l, z));
+}
+
+TEST(strv_make_nulstr_binary) {
+        test_strv_make_nulstr_binary_one(NULL, (const char[0]) {}, 0);
+        test_strv_make_nulstr_binary_one(STRV_MAKE(NULL), (const char[0]) {}, 0);
+        test_strv_make_nulstr_binary_one(STRV_MAKE(""), (const char[1]) { 0 }, 1);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("", ""), (const char[2]) { 0, 0 }, 2);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("x", ""), (const char[3]) { 'x', 0, 0 }, 3);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("", "x"), (const char[3]) { 0, 'x', 0 }, 3);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("", "", ""), (const char[3]) { 0, 0, 0 }, 3);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("x", "", ""), (const char[4]) { 'x', 0, 0, 0 }, 4);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("", "x", ""), (const char[4]) { 0, 'x', 0, 0 }, 4);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("", "", "x"), (const char[4]) { 0, 0, 'x', 0 }, 4);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("x", "x", ""), (const char[5]) { 'x', 0, 'x', 0, 0 }, 5);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("", "x", "x"), (const char[5]) { 0, 'x', 0, 'x', 0 }, 5);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("x", "", "x"), (const char[5]) { 'x', 0, 0, 'x', 0 }, 5);
+        test_strv_make_nulstr_binary_one(STRV_MAKE("x", "x", "x"), (const char[6]) { 'x', 0, 'x', 0, 'x', 0 }, 6);
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-open-file.c b/src/test/test-open-file.c
new file mode 100644
index 0000000..1b938ec
--- /dev/null
+++ b/src/test/test-open-file.c
@@ -0,0 +1,185 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "open-file.h"
+#include "string-util.h"
+#include "tests.h"
+
+TEST(open_file_parse) {
+        _cleanup_(open_file_freep) OpenFile *of = NULL;
+        int r;
+
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:read-only", &of);
+
+        assert_se(r >= 0);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "host-mount-namespace"));
+        assert_se(of->flags == OPENFILE_READ_ONLY);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt", &of);
+
+        assert_se(r >= 0);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "mnt"));
+        assert_se(of->flags == 0);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace", &of);
+
+        assert_se(r >= 0);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "host-mount-namespace"));
+        assert_se(of->flags == 0);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt::read-only", &of);
+
+        assert_se(r >= 0);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "mnt"));
+        assert_se(of->flags == OPENFILE_READ_ONLY);
+
+        of = open_file_free(of);
+        r = open_file_parse("../file.dat:file:read-only", &of);
+
+        assert_se(r == -EINVAL);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:rw", &of);
+
+        assert_se(r == -EINVAL);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:append", &of);
+
+        assert_se(r >= 0);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "host-mount-namespace"));
+        assert_se(of->flags == OPENFILE_APPEND);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:truncate", &of);
+
+        assert_se(r >= 0);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "host-mount-namespace"));
+        assert_se(of->flags == OPENFILE_TRUNCATE);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:read-only,append", &of);
+
+        assert_se(r == -EINVAL);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:read-only,truncate", &of);
+
+        assert_se(r == -EINVAL);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:append,truncate", &of);
+
+        assert_se(r == -EINVAL);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:read-only,read-only", &of);
+
+        assert_se(r == -EINVAL);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:graceful", &of);
+
+        assert_se(r >= 0);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "host-mount-namespace"));
+        assert_se(of->flags == OPENFILE_GRACEFUL);
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:read-only,graceful", &of);
+
+        assert_se(r >= 0);
+        assert_se(streq(of->path, "/proc/1/ns/mnt"));
+        assert_se(streq(of->fdname, "host-mount-namespace"));
+        assert_se(of->flags == (OPENFILE_READ_ONLY | OPENFILE_GRACEFUL));
+
+        of = open_file_free(of);
+        r = open_file_parse("/proc/1/ns/mnt:host-mount-namespace:read-only:other", &of);
+
+        assert_se(r == -EINVAL);
+}
+
+TEST(open_file_to_string) {
+        _cleanup_free_ char *s = NULL;
+        _cleanup_(open_file_freep) OpenFile *of = NULL;
+        int r;
+
+        assert_se(of = new (OpenFile, 1));
+        *of = (OpenFile){ .path = strdup("/proc/1/ns/mnt"),
+                          .fdname = strdup("host-mount-namespace"),
+                          .flags = OPENFILE_READ_ONLY };
+
+        r = open_file_to_string(of, &s);
+
+        assert_se(r >= 0);
+        assert_se(streq(s, "/proc/1/ns/mnt:host-mount-namespace:read-only"));
+
+        s = mfree(s);
+        of->flags = OPENFILE_APPEND;
+
+        r = open_file_to_string(of, &s);
+
+        assert_se(r >= 0);
+        assert_se(streq(s, "/proc/1/ns/mnt:host-mount-namespace:append"));
+
+        s = mfree(s);
+        of->flags = OPENFILE_TRUNCATE;
+
+        r = open_file_to_string(of, &s);
+
+        assert_se(r >= 0);
+        assert_se(streq(s, "/proc/1/ns/mnt:host-mount-namespace:truncate"));
+
+        s = mfree(s);
+        of->flags = OPENFILE_GRACEFUL;
+
+        r = open_file_to_string(of, &s);
+
+        assert_se(r >= 0);
+        assert_se(streq(s, "/proc/1/ns/mnt:host-mount-namespace:graceful"));
+
+        s = mfree(s);
+        of->flags = OPENFILE_READ_ONLY | OPENFILE_GRACEFUL;
+
+        r = open_file_to_string(of, &s);
+
+        assert_se(r >= 0);
+        assert_se(streq(s, "/proc/1/ns/mnt:host-mount-namespace:read-only,graceful"));
+
+        s = mfree(s);
+        of->flags = 0;
+
+        r = open_file_to_string(of, &s);
+
+        assert_se(r >= 0);
+        assert_se(streq(s, "/proc/1/ns/mnt:host-mount-namespace"));
+
+        s = mfree(s);
+        assert_se(free_and_strdup(&of->fdname, "mnt"));
+        of->flags = OPENFILE_READ_ONLY;
+
+        r = open_file_to_string(of, &s);
+
+        assert_se(r >= 0);
+        assert_se(streq(s, "/proc/1/ns/mnt::read-only"));
+
+        s = mfree(s);
+        assert_se(free_and_strdup(&of->path, "/path:with:colon"));
+        assert_se(free_and_strdup(&of->fdname, "path:with:colon"));
+        of->flags = 0;
+
+        r = open_file_to_string(of, &s);
+
+        assert_se(r >= 0);
+        assert_se(streq(s, "/path\\:with\\:colon"));
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-ordered-set.c b/src/test/test-ordered-set.c
index 8d3c5b0..c055411 100644
--- a/src/test/test-ordered-set.c
+++ b/src/test/test-ordered-set.c
@@ -5,10 +5,9 @@
 #include "ordered-set.h"
 #include "string-util.h"
 #include "strv.h"
+#include "tests.h"
 
-static void test_set_steal_first(void) {
-        log_info("/* %s */", __func__);
-
+TEST(set_steal_first) {
         _cleanup_ordered_set_free_ OrderedSet *m = NULL;
         int seen[3] = {};
         char *val;
@@ -41,12 +40,10 @@
 
 DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(item_hash_ops, void, trivial_hash_func, trivial_compare_func, Item, item_seen);
 
-static void test_set_free_with_hash_ops(void) {
+TEST(set_free_with_hash_ops) {
         OrderedSet *m;
         struct Item items[4] = {};
 
-        log_info("/* %s */", __func__);
-
         assert_se(m = ordered_set_new(&item_hash_ops));
 
         for (size_t i = 0; i < ELEMENTSOF(items) - 1; i++)
@@ -63,12 +60,10 @@
         assert_se(items[3].seen == 0);
 }
 
-static void test_set_put(void) {
+TEST(set_put) {
         _cleanup_ordered_set_free_ OrderedSet *m = NULL;
         _cleanup_free_ char **t = NULL, *str = NULL;
 
-        log_info("/* %s */", __func__);
-
         m = ordered_set_new(&string_hash_ops);
         assert_se(m);
 
@@ -94,12 +89,10 @@
         ordered_set_print(stdout, "FOO=", m);
 }
 
-static void test_set_put_string_set(void) {
+TEST(set_put_string_set) {
         _cleanup_ordered_set_free_ OrderedSet *m = NULL, *q = NULL;
         _cleanup_free_ char **final = NULL; /* "just free" because the strings are in the set */
 
-        log_info("/* %s */", __func__);
-
         assert_se(ordered_set_put_strdup(&m, "1") == 1);
         assert_se(ordered_set_put_strdup(&m, "22") == 1);
         assert_se(ordered_set_put_strdup(&m, "333") == 1);
@@ -116,11 +109,4 @@
         ordered_set_print(stdout, "BAR=", m);
 }
 
-int main(int argc, const char *argv[]) {
-        test_set_steal_first();
-        test_set_free_with_hash_ops();
-        test_set_put();
-        test_set_put_string_set();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-os-util.c b/src/test/test-os-util.c
index ef63026..bc9e3ec 100644
--- a/src/test/test-os-util.c
+++ b/src/test/test-os-util.c
@@ -2,20 +2,88 @@
 
 #include <errno.h>
 
+#include "fs-util.h"
 #include "log.h"
 #include "os-util.h"
+#include "string-util.h"
+#include "strv.h"
 #include "tests.h"
 
-static void test_path_is_os_tree(void) {
+TEST(path_is_os_tree) {
         assert_se(path_is_os_tree("/") > 0);
         assert_se(path_is_os_tree("/etc") == 0);
         assert_se(path_is_os_tree("/idontexist") == -ENOENT);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+TEST(parse_os_release) {
+        /* Let's assume that we're running in a valid system, so os-release is available */
+        _cleanup_free_ char *id = NULL, *id2 = NULL, *name = NULL, *foobar = NULL;
+        assert_se(parse_os_release(NULL, "ID", &id) == 0);
+        log_info("ID: %s", id);
 
-        test_path_is_os_tree();
+        assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
+        assert_se(parse_os_release(NULL, "ID", &id2) == 0);
+        log_info("ID: %s", strnull(id2));
 
-        return 0;
+        _cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX";
+        assert_se(write_tmpfile(tmpfile,
+                                "ID=the-id  \n"
+                                "NAME=the-name") == 0);
+
+        assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0);
+        assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0);
+        log_info("ID: %s NAME: %s", id, name);
+        assert_se(streq(id, "the-id"));
+        assert_se(streq(name, "the-name"));
+
+        _cleanup_(unlink_tempfilep) char tmpfile2[] = "/tmp/test-os-util.XXXXXX";
+        assert_se(write_tmpfile(tmpfile2,
+                                "ID=\"ignored\"  \n"
+                                "ID=\"the-id\"  \n"
+                                "NAME='the-name'") == 0);
+
+        assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile2, 1) == 0);
+        assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0);
+        log_info("ID: %s NAME: %s", id, name);
+        assert_se(streq(id, "the-id"));
+        assert_se(streq(name, "the-name"));
+
+        assert_se(parse_os_release(NULL, "FOOBAR", &foobar) == 0);
+        log_info("FOOBAR: %s", strnull(foobar));
+        assert_se(foobar == NULL);
+
+        assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
 }
+
+TEST(load_os_release_pairs) {
+        _cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX";
+        assert_se(write_tmpfile(tmpfile,
+                                "ID=\"ignored\"  \n"
+                                "ID=\"the-id\"  \n"
+                                "NAME='the-name'") == 0);
+
+        assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0);
+
+        _cleanup_strv_free_ char **pairs = NULL;
+        assert_se(load_os_release_pairs(NULL, &pairs) == 0);
+        assert_se(strv_equal(pairs, STRV_MAKE("ID", "the-id",
+                                              "NAME", "the-name")));
+
+        assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
+}
+
+TEST(os_release_support_ended) {
+        int r;
+
+        assert_se(os_release_support_ended("1999-01-01", false, NULL) == true);
+        assert_se(os_release_support_ended("2037-12-31", false, NULL) == false);
+        assert_se(os_release_support_ended("-1-1-1", true, NULL) == -EINVAL);
+
+        r = os_release_support_ended(NULL, false, NULL);
+        if (r < 0)
+                log_info_errno(r, "Failed to check host: %m");
+        else
+                log_info_errno(r, "Host is supported: %s", yes_no(!r));
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-parse-argument.c b/src/test/test-parse-argument.c
index 5e9139a..cf3d542 100644
--- a/src/test/test-parse-argument.c
+++ b/src/test/test-parse-argument.c
@@ -6,9 +6,7 @@
 #include "stdio-util.h"
 #include "tests.h"
 
-static void test_parse_json_argument(void) {
-        log_info("/* %s */", __func__);
-
+TEST(parse_json_argument) {
         JsonFormatFlags flags = JSON_FORMAT_PRETTY;
 
         assert_se(parse_json_argument("help", &flags) == 0);
@@ -18,9 +16,7 @@
         assert_se(flags == JSON_FORMAT_OFF);
 }
 
-static void test_parse_path_argument(void) {
-        log_info("/* %s */", __func__);
-
+TEST(parse_path_argument) {
         _cleanup_free_ char *path = NULL;
 
         assert_se(parse_path_argument("help", false, &path) == 0);
@@ -33,9 +29,7 @@
         assert_se(path == NULL);
 }
 
-static void test_parse_signal_argument(void) {
-        log_info("/* %s */", __func__);
-
+TEST(parse_signal_argument) {
         int  signal = -1;
 
         assert_se(parse_signal_argument("help", &signal) == 0);
@@ -56,10 +50,4 @@
         assert_se(signal == SIGABRT);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
-        test_parse_json_argument();
-        test_parse_path_argument();
-        test_parse_signal_argument();
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-parse-helpers.c b/src/test/test-parse-helpers.c
new file mode 100644
index 0000000..052e251
--- /dev/null
+++ b/src/test/test-parse-helpers.c
@@ -0,0 +1,95 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <linux/in.h>
+#include <sys/socket.h>
+#include <stdio.h>
+
+#include "macro.h"
+#include "parse-helpers.h"
+#include "tests.h"
+
+static void test_valid_item(
+                const char *str,
+                int expected_af,
+                int expected_ip_protocol,
+                uint16_t expected_nr_ports,
+                uint16_t expected_port_min) {
+        uint16_t nr_ports, port_min;
+        int af, ip_protocol;
+
+        assert_se(parse_socket_bind_item(str, &af, &ip_protocol, &nr_ports, &port_min) >= 0);
+        assert_se(af == expected_af);
+        assert_se(ip_protocol == expected_ip_protocol);
+        assert_se(nr_ports == expected_nr_ports);
+        assert_se(port_min == expected_port_min);
+
+        log_info("%s: \"%s\" ok", __func__, str);
+}
+
+static void test_invalid_item(const char *str) {
+        uint16_t nr_ports, port_min;
+        int af, ip_protocol;
+
+        assert_se(parse_socket_bind_item(str, &af, &ip_protocol, &nr_ports, &port_min) == -EINVAL);
+
+        log_info("%s: \"%s\" ok", __func__, str);
+}
+
+TEST(valid_items) {
+        test_valid_item("any", AF_UNSPEC, 0, 0, 0);
+        test_valid_item("ipv4", AF_INET, 0, 0, 0);
+        test_valid_item("ipv6", AF_INET6, 0, 0, 0);
+        test_valid_item("ipv4:any", AF_INET, 0, 0, 0);
+        test_valid_item("ipv6:any", AF_INET6, 0, 0, 0);
+        test_valid_item("tcp", AF_UNSPEC, IPPROTO_TCP, 0, 0);
+        test_valid_item("udp", AF_UNSPEC, IPPROTO_UDP, 0, 0);
+        test_valid_item("tcp:any", AF_UNSPEC, IPPROTO_TCP, 0, 0);
+        test_valid_item("udp:any", AF_UNSPEC, IPPROTO_UDP, 0, 0);
+        test_valid_item("6666", AF_UNSPEC, 0, 1, 6666);
+        test_valid_item("6666-6667", AF_UNSPEC, 0, 2, 6666);
+        test_valid_item("65535", AF_UNSPEC, 0, 1, 65535);
+        test_valid_item("1-65535", AF_UNSPEC, 0, 65535, 1);
+        test_valid_item("ipv4:tcp", AF_INET, IPPROTO_TCP, 0, 0);
+        test_valid_item("ipv4:udp", AF_INET, IPPROTO_UDP, 0, 0);
+        test_valid_item("ipv6:tcp", AF_INET6, IPPROTO_TCP, 0, 0);
+        test_valid_item("ipv6:udp", AF_INET6, IPPROTO_UDP, 0, 0);
+        test_valid_item("ipv4:6666", AF_INET, 0, 1, 6666);
+        test_valid_item("ipv6:6666", AF_INET6, 0, 1, 6666);
+        test_valid_item("tcp:6666", AF_UNSPEC, IPPROTO_TCP, 1, 6666);
+        test_valid_item("udp:6666", AF_UNSPEC, IPPROTO_UDP, 1, 6666);
+        test_valid_item("ipv4:tcp:6666", AF_INET, IPPROTO_TCP, 1, 6666);
+        test_valid_item("ipv6:tcp:6666", AF_INET6, IPPROTO_TCP, 1, 6666);
+        test_valid_item("ipv6:udp:6666-6667", AF_INET6, IPPROTO_UDP, 2, 6666);
+        test_valid_item("ipv6:tcp:any", AF_INET6, IPPROTO_TCP, 0, 0);
+}
+
+TEST(invalid_items) {
+        test_invalid_item("");
+        test_invalid_item(":");
+        test_invalid_item("::");
+        test_invalid_item("any:");
+        test_invalid_item("meh");
+        test_invalid_item("zupa:meh");
+        test_invalid_item("zupa:meh:eh");
+        test_invalid_item("ip");
+        test_invalid_item("dccp");
+        test_invalid_item("ipv6meh");
+        test_invalid_item("ipv6::");
+        test_invalid_item("ipv6:ipv6");
+        test_invalid_item("ipv6:icmp");
+        test_invalid_item("ipv6:tcp:0");
+        test_invalid_item("65536");
+        test_invalid_item("0-65535");
+        test_invalid_item("ipv6:tcp:6666-6665");
+        test_invalid_item("ipv6:tcp:6666-100000");
+        test_invalid_item("ipv6::6666");
+        test_invalid_item("ipv6:tcp:any:");
+        test_invalid_item("ipv6:tcp:any:ipv6");
+        test_invalid_item("ipv6:tcp:6666:zupa");
+        test_invalid_item("ipv6:tcp:6666:any");
+        test_invalid_item("ipv6:tcp:6666 zupa");
+        test_invalid_item("ipv6:tcp:6666: zupa");
+        test_invalid_item("ipv6:tcp:6666\n zupa");
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-parse-socket-bind-item.c b/src/test/test-parse-socket-bind-item.c
deleted file mode 100644
index 6d52582..0000000
--- a/src/test/test-parse-socket-bind-item.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <linux/in.h>
-#include <sys/socket.h>
-#include <stdio.h>
-
-#include "macro.h"
-#include "parse-socket-bind-item.h"
-
-static void test_valid_item(
-                const char *str,
-                int expected_af,
-                int expected_ip_protocol,
-                uint16_t expected_nr_ports,
-                uint16_t expected_port_min) {
-        uint16_t nr_ports, port_min;
-        int af, ip_protocol;
-
-        assert_se(parse_socket_bind_item(str, &af, &ip_protocol, &nr_ports, &port_min) >= 0);
-        assert_se(af == expected_af);
-        assert_se(ip_protocol == expected_ip_protocol);
-        assert_se(nr_ports == expected_nr_ports);
-        assert_se(port_min == expected_port_min);
-
-        log_info("%s: \"%s\" ok", __func__, str);
-}
-
-static void test_invalid_item(const char *str) {
-        uint16_t nr_ports, port_min;
-        int af, ip_protocol;
-
-        assert_se(parse_socket_bind_item(str, &af, &ip_protocol, &nr_ports, &port_min) == -EINVAL);
-
-        log_info("%s: \"%s\" ok", __func__, str);
-}
-
-int main(int argc, char *argv[]) {
-        test_valid_item("any", AF_UNSPEC, 0, 0, 0);
-        test_valid_item("ipv4", AF_INET, 0, 0, 0);
-        test_valid_item("ipv6", AF_INET6, 0, 0, 0);
-        test_valid_item("ipv4:any", AF_INET, 0, 0, 0);
-        test_valid_item("ipv6:any", AF_INET6, 0, 0, 0);
-        test_valid_item("tcp", AF_UNSPEC, IPPROTO_TCP, 0, 0);
-        test_valid_item("udp", AF_UNSPEC, IPPROTO_UDP, 0, 0);
-        test_valid_item("tcp:any", AF_UNSPEC, IPPROTO_TCP, 0, 0);
-        test_valid_item("udp:any", AF_UNSPEC, IPPROTO_UDP, 0, 0);
-        test_valid_item("6666", AF_UNSPEC, 0, 1, 6666);
-        test_valid_item("6666-6667", AF_UNSPEC, 0, 2, 6666);
-        test_valid_item("65535", AF_UNSPEC, 0, 1, 65535);
-        test_valid_item("1-65535", AF_UNSPEC, 0, 65535, 1);
-        test_valid_item("ipv4:tcp", AF_INET, IPPROTO_TCP, 0, 0);
-        test_valid_item("ipv4:udp", AF_INET, IPPROTO_UDP, 0, 0);
-        test_valid_item("ipv6:tcp", AF_INET6, IPPROTO_TCP, 0, 0);
-        test_valid_item("ipv6:udp", AF_INET6, IPPROTO_UDP, 0, 0);
-        test_valid_item("ipv4:6666", AF_INET, 0, 1, 6666);
-        test_valid_item("ipv6:6666", AF_INET6, 0, 1, 6666);
-        test_valid_item("tcp:6666", AF_UNSPEC, IPPROTO_TCP, 1, 6666);
-        test_valid_item("udp:6666", AF_UNSPEC, IPPROTO_UDP, 1, 6666);
-        test_valid_item("ipv4:tcp:6666", AF_INET, IPPROTO_TCP, 1, 6666);
-        test_valid_item("ipv6:tcp:6666", AF_INET6, IPPROTO_TCP, 1, 6666);
-        test_valid_item("ipv6:udp:6666-6667", AF_INET6, IPPROTO_UDP, 2, 6666);
-        test_valid_item("ipv6:tcp:any", AF_INET6, IPPROTO_TCP, 0, 0);
-
-        test_invalid_item("");
-        test_invalid_item(":");
-        test_invalid_item("::");
-        test_invalid_item("any:");
-        test_invalid_item("meh");
-        test_invalid_item("zupa:meh");
-        test_invalid_item("zupa:meh:eh");
-        test_invalid_item("ip");
-        test_invalid_item("dccp");
-        test_invalid_item("ipv6meh");
-        test_invalid_item("ipv6::");
-        test_invalid_item("ipv6:ipv6");
-        test_invalid_item("ipv6:icmp");
-        test_invalid_item("ipv6:tcp:0");
-        test_invalid_item("65536");
-        test_invalid_item("0-65535");
-        test_invalid_item("ipv6:tcp:6666-6665");
-        test_invalid_item("ipv6:tcp:6666-100000");
-        test_invalid_item("ipv6::6666");
-        test_invalid_item("ipv6:tcp:any:");
-        test_invalid_item("ipv6:tcp:any:ipv6");
-        test_invalid_item("ipv6:tcp:6666:zupa");
-        test_invalid_item("ipv6:tcp:6666:any");
-        test_invalid_item("ipv6:tcp:6666 zupa");
-        test_invalid_item("ipv6:tcp:6666: zupa");
-        test_invalid_item("ipv6:tcp:6666\n zupa");
-        return 0;
-}
diff --git a/src/test/test-parse-util.c b/src/test/test-parse-util.c
index b1b23e2..c83e8fc 100644
--- a/src/test/test-parse-util.c
+++ b/src/test/test-parse-util.c
@@ -1,7 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <errno.h>
-#include <linux/loadavg.h>
 #include <locale.h>
 #include <math.h>
 #include <sys/socket.h>
@@ -11,8 +10,9 @@
 #include "log.h"
 #include "parse-util.h"
 #include "string-util.h"
+#include "tests.h"
 
-static void test_parse_boolean(void) {
+TEST(parse_boolean) {
         assert_se(parse_boolean("1") == 1);
         assert_se(parse_boolean("y") == 1);
         assert_se(parse_boolean("Y") == 1);
@@ -38,7 +38,7 @@
         assert_se(parse_boolean("full") < 0);
 }
 
-static void test_parse_pid(void) {
+TEST(parse_pid) {
         int r;
         pid_t pid;
 
@@ -72,7 +72,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_parse_mode(void) {
+TEST(parse_mode) {
         mode_t m;
 
         assert_se(parse_mode("-1", &m) < 0);
@@ -94,7 +94,7 @@
         assert_se(parse_mode(" 1", &m) >= 0 && m == 1);
 }
 
-static void test_parse_size(void) {
+TEST(parse_size_iec) {
         uint64_t bytes;
 
         assert_se(parse_size("", 1024, &bytes) == -EINVAL);
@@ -164,7 +164,77 @@
         assert_se(parse_size("-10B 20K", 1024, &bytes) == -ERANGE);
 }
 
-static void test_parse_range(void) {
+TEST(parse_size_si) {
+        uint64_t bytes;
+
+        assert_se(parse_size("", 1000, &bytes) == -EINVAL);
+
+        assert_se(parse_size("111", 1000, &bytes) == 0);
+        assert_se(bytes == 111);
+
+        assert_se(parse_size("111.4", 1000, &bytes) == 0);
+        assert_se(bytes == 111);
+
+        assert_se(parse_size(" 112 B", 1000, &bytes) == 0);
+        assert_se(bytes == 112);
+
+        assert_se(parse_size(" 112.6 B", 1000, &bytes) == 0);
+        assert_se(bytes == 112);
+
+        assert_se(parse_size("3.5 K", 1000, &bytes) == 0);
+        assert_se(bytes == 3*1000 + 500);
+
+        assert_se(parse_size("3. K", 1000, &bytes) == 0);
+        assert_se(bytes == 3*1000);
+
+        assert_se(parse_size("3.0 K", 1000, &bytes) == 0);
+        assert_se(bytes == 3*1000);
+
+        assert_se(parse_size("3. 0 K", 1000, &bytes) == -EINVAL);
+
+        assert_se(parse_size(" 4 M 11.5K", 1000, &bytes) == 0);
+        assert_se(bytes == 4*1000*1000 + 11 * 1000 + 500);
+
+        assert_se(parse_size("3B3.5G", 1000, &bytes) == -EINVAL);
+
+        assert_se(parse_size("3.5G3B", 1000, &bytes) == 0);
+        assert_se(bytes == 3ULL*1000*1000*1000 + 500*1000*1000 + 3);
+
+        assert_se(parse_size("3.5G 4B", 1000, &bytes) == 0);
+        assert_se(bytes == 3ULL*1000*1000*1000 + 500*1000*1000 + 4);
+
+        assert_se(parse_size("3B3G4T", 1000, &bytes) == -EINVAL);
+
+        assert_se(parse_size("4T3G3B", 1000, &bytes) == 0);
+        assert_se(bytes == (4ULL*1000 + 3)*1000*1000*1000 + 3);
+
+        assert_se(parse_size(" 4 T 3 G 3 B", 1000, &bytes) == 0);
+        assert_se(bytes == (4ULL*1000 + 3)*1000*1000*1000 + 3);
+
+        assert_se(parse_size("12P", 1000, &bytes) == 0);
+        assert_se(bytes == 12ULL * 1000*1000*1000*1000*1000);
+
+        assert_se(parse_size("12P12P", 1000, &bytes) == -EINVAL);
+
+        assert_se(parse_size("3E 2P", 1000, &bytes) == 0);
+        assert_se(bytes == (3 * 1000 + 2ULL) * 1000*1000*1000*1000*1000);
+
+        assert_se(parse_size("12X", 1000, &bytes) == -EINVAL);
+
+        assert_se(parse_size("12.5X", 1000, &bytes) == -EINVAL);
+
+        assert_se(parse_size("12.5e3", 1000, &bytes) == -EINVAL);
+
+        assert_se(parse_size("1000E", 1000, &bytes) == -ERANGE);
+        assert_se(parse_size("-1", 1000, &bytes) == -ERANGE);
+        assert_se(parse_size("-1000E", 1000, &bytes) == -ERANGE);
+
+        assert_se(parse_size("-1000P", 1000, &bytes) == -ERANGE);
+
+        assert_se(parse_size("-10B 20K", 1000, &bytes) == -ERANGE);
+}
+
+TEST(parse_range) {
         unsigned lower, upper;
 
         /* Successful cases */
@@ -347,7 +417,7 @@
         assert_se(upper == 9999);
 }
 
-static void test_safe_atolli(void) {
+TEST(safe_atolli) {
         int r;
         long long l;
 
@@ -398,7 +468,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_safe_atou16(void) {
+TEST(safe_atou16) {
         int r;
         uint16_t l;
 
@@ -410,6 +480,14 @@
         assert_se(r == 0);
         assert_se(l == 12345);
 
+        r = safe_atou16("+12345", &l);
+        assert_se(r == 0);
+        assert_se(l == 12345);
+
+        r = safe_atou16("  +12345", &l);
+        assert_se(r == 0);
+        assert_se(l == 12345);
+
         r = safe_atou16("123456", &l);
         assert_se(r == -ERANGE);
 
@@ -432,7 +510,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_safe_atoi16(void) {
+TEST(safe_atoi16) {
         int r;
         int16_t l;
 
@@ -444,6 +522,14 @@
         assert_se(r == 0);
         assert_se(l == -12345);
 
+        r = safe_atoi16("+12345", &l);
+        assert_se(r == 0);
+        assert_se(l == 12345);
+
+        r = safe_atoi16("  +12345", &l);
+        assert_se(r == 0);
+        assert_se(l == 12345);
+
         r = safe_atoi16("32767", &l);
         assert_se(r == 0);
         assert_se(l == 32767);
@@ -479,7 +565,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_safe_atoux16(void) {
+TEST(safe_atoux16) {
         int r;
         uint16_t l;
 
@@ -524,7 +610,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_safe_atou64(void) {
+TEST(safe_atou64) {
         int r;
         uint64_t l;
 
@@ -566,7 +652,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_safe_atoi64(void) {
+TEST(safe_atoi64) {
         int r;
         int64_t l;
 
@@ -613,7 +699,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_safe_atoux64(void) {
+TEST(safe_atoux64) {
         int r;
         uint64_t l;
 
@@ -633,6 +719,22 @@
         assert_se(r == 0);
         assert_se(l == 11603985);
 
+        r = safe_atoux64("+12345", &l);
+        assert_se(r == 0);
+        assert_se(l == 0x12345);
+
+        r = safe_atoux64("  +12345", &l);
+        assert_se(r == 0);
+        assert_se(l == 0x12345);
+
+        r = safe_atoux64("+0x12345", &l);
+        assert_se(r == 0);
+        assert_se(l == 0x12345);
+
+        r = safe_atoux64("+0b11011", &l);
+        assert_se(r == 0);
+        assert_se(l == 11603985);
+
         r = safe_atoux64("0o11011", &l);
         assert_se(r == -EINVAL);
 
@@ -658,7 +760,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_safe_atod(void) {
+TEST(safe_atod) {
         int r;
         double d;
         char *e;
@@ -715,7 +817,7 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_parse_nice(void) {
+TEST(parse_nice) {
         int n;
 
         assert_se(parse_nice("0", &n) >= 0 && n == 0);
@@ -742,24 +844,7 @@
         assert_se(parse_nice("+20", &n) == -ERANGE);
 }
 
-static void test_parse_dev(void) {
-        dev_t dev;
-
-        assert_se(parse_dev("", &dev) == -EINVAL);
-        assert_se(parse_dev("junk", &dev) == -EINVAL);
-        assert_se(parse_dev("0", &dev) == -EINVAL);
-        assert_se(parse_dev("5", &dev) == -EINVAL);
-        assert_se(parse_dev("5:", &dev) == -EINVAL);
-        assert_se(parse_dev(":5", &dev) == -EINVAL);
-        assert_se(parse_dev("-1:-1", &dev) == -EINVAL);
-#if SIZEOF_DEV_T < 8
-        assert_se(parse_dev("4294967295:4294967295", &dev) == -EINVAL);
-#endif
-        assert_se(parse_dev("8:11", &dev) >= 0 && major(dev) == 8 && minor(dev) == 11);
-        assert_se(parse_dev("0:0", &dev) >= 0 && major(dev) == 0 && minor(dev) == 0);
-}
-
-static void test_parse_errno(void) {
+TEST(parse_errno) {
         assert_se(parse_errno("EILSEQ") == EILSEQ);
         assert_se(parse_errno("EINVAL") == EINVAL);
         assert_se(parse_errno("0") == 0);
@@ -780,7 +865,7 @@
         assert_se(parse_errno("EINVALaaa") == -EINVAL);
 }
 
-static void test_parse_mtu(void) {
+TEST(parse_mtu) {
         uint32_t mtu = 0;
 
         assert_se(parse_mtu(AF_UNSPEC, "1500", &mtu) >= 0 && mtu == 1500);
@@ -801,28 +886,28 @@
         assert_se(parse_mtu(AF_UNSPEC, "", &mtu) == -EINVAL);
 }
 
-static void test_parse_loadavg_fixed_point(void) {
+TEST(parse_loadavg_fixed_point) {
         loadavg_t fp;
 
         assert_se(parse_loadavg_fixed_point("1.23", &fp) == 0);
-        assert_se(LOAD_INT(fp) == 1);
-        assert_se(LOAD_FRAC(fp) == 23);
+        assert_se(LOADAVG_INT_SIDE(fp) == 1);
+        assert_se(LOADAVG_DECIMAL_SIDE(fp) == 23);
 
         assert_se(parse_loadavg_fixed_point("1.80", &fp) == 0);
-        assert_se(LOAD_INT(fp) == 1);
-        assert_se(LOAD_FRAC(fp) == 80);
+        assert_se(LOADAVG_INT_SIDE(fp) == 1);
+        assert_se(LOADAVG_DECIMAL_SIDE(fp) == 80);
 
         assert_se(parse_loadavg_fixed_point("0.07", &fp) == 0);
-        assert_se(LOAD_INT(fp) == 0);
-        assert_se(LOAD_FRAC(fp) == 7);
+        assert_se(LOADAVG_INT_SIDE(fp) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(fp) == 7);
 
         assert_se(parse_loadavg_fixed_point("0.00", &fp) == 0);
-        assert_se(LOAD_INT(fp) == 0);
-        assert_se(LOAD_FRAC(fp) == 0);
+        assert_se(LOADAVG_INT_SIDE(fp) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(fp) == 0);
 
         assert_se(parse_loadavg_fixed_point("4096.57", &fp) == 0);
-        assert_se(LOAD_INT(fp) == 4096);
-        assert_se(LOAD_FRAC(fp) == 57);
+        assert_se(LOADAVG_INT_SIDE(fp) == 4096);
+        assert_se(LOADAVG_DECIMAL_SIDE(fp) == 57);
 
         /* Caps out at 2 digit fracs */
         assert_se(parse_loadavg_fixed_point("1.100", &fp) == -ERANGE);
@@ -837,28 +922,4 @@
         assert_se(parse_loadavg_fixed_point("", &fp) == -EINVAL);
 }
 
-int main(int argc, char *argv[]) {
-        log_parse_environment();
-        log_open();
-
-        test_parse_boolean();
-        test_parse_pid();
-        test_parse_mode();
-        test_parse_size();
-        test_parse_range();
-        test_safe_atolli();
-        test_safe_atou16();
-        test_safe_atoi16();
-        test_safe_atoux16();
-        test_safe_atou64();
-        test_safe_atoi64();
-        test_safe_atoux64();
-        test_safe_atod();
-        test_parse_nice();
-        test_parse_dev();
-        test_parse_errno();
-        test_parse_mtu();
-        test_parse_loadavg_fixed_point();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-path-lookup.c b/src/test/test-path-lookup.c
index da146aa..c98a1f4 100644
--- a/src/test/test-path-lookup.c
+++ b/src/test/test-path-lookup.c
@@ -9,43 +9,47 @@
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
+#include "tmpfile-util.h"
 
-static void test_paths(UnitFileScope scope) {
-        char template[] = "/tmp/test-path-lookup.XXXXXXX";
-
+static void test_paths_one(LookupScope scope) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
         _cleanup_(lookup_paths_free) LookupPaths lp_without_env = {};
         _cleanup_(lookup_paths_free) LookupPaths lp_with_env = {};
         char *systemd_unit_path;
 
-        assert_se(mkdtemp(template));
+        assert_se(mkdtemp_malloc("/tmp/test-path-lookup.XXXXXXX", &tmp) >= 0);
 
         assert_se(unsetenv("SYSTEMD_UNIT_PATH") == 0);
         assert_se(lookup_paths_init(&lp_without_env, scope, 0, NULL) >= 0);
         assert_se(!strv_isempty(lp_without_env.search_path));
         lookup_paths_log(&lp_without_env);
 
-        systemd_unit_path = strjoina(template, "/systemd-unit-path");
+        systemd_unit_path = strjoina(tmp, "/systemd-unit-path");
         assert_se(setenv("SYSTEMD_UNIT_PATH", systemd_unit_path, 1) == 0);
         assert_se(lookup_paths_init(&lp_with_env, scope, 0, NULL) == 0);
         assert_se(strv_length(lp_with_env.search_path) == 1);
         assert_se(streq(lp_with_env.search_path[0], systemd_unit_path));
         lookup_paths_log(&lp_with_env);
         assert_se(strv_equal(lp_with_env.search_path, STRV_MAKE(systemd_unit_path)));
-
-        assert_se(rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
 }
 
-static void test_user_and_global_paths(void) {
+TEST(paths) {
+        test_paths_one(LOOKUP_SCOPE_SYSTEM);
+        test_paths_one(LOOKUP_SCOPE_USER);
+        test_paths_one(LOOKUP_SCOPE_GLOBAL);
+}
+
+TEST(user_and_global_paths) {
         _cleanup_(lookup_paths_free) LookupPaths lp_global = {}, lp_user = {};
-        char **u, **g, **p;
+        char **u, **g;
         unsigned k = 0;
 
         assert_se(unsetenv("SYSTEMD_UNIT_PATH") == 0);
         assert_se(unsetenv("XDG_DATA_DIRS") == 0);
         assert_se(unsetenv("XDG_CONFIG_DIRS") == 0);
 
-        assert_se(lookup_paths_init(&lp_global, UNIT_FILE_GLOBAL, 0, NULL) == 0);
-        assert_se(lookup_paths_init(&lp_user, UNIT_FILE_USER, 0, NULL) == 0);
+        assert_se(lookup_paths_init(&lp_global, LOOKUP_SCOPE_GLOBAL, 0, NULL) == 0);
+        assert_se(lookup_paths_init(&lp_user, LOOKUP_SCOPE_USER, 0, NULL) == 0);
         g = lp_global.search_path;
         u = lp_user.search_path;
 
@@ -53,63 +57,60 @@
          * that they also exist in the user search path. Skip any
          * entries in user search path which don't exist in the global
          * one, but not vice versa. */
-        log_info("/* %s */", __func__);
         STRV_FOREACH(p, g) {
                 while (u[k] && !streq(*p, u[k])) {
                         log_info("+ %s", u[k]);
                         k++;
                 }
                 log_info("  %s", *p);
-                assert(u[k]); /* If NULL, we didn't find a matching entry */
+                assert_se(u[k]); /* If NULL, we didn't find a matching entry */
                 k++;
         }
         STRV_FOREACH(p, u + k)
                 log_info("+ %s", *p);
 }
 
-static void test_generator_binary_paths(UnitFileScope scope) {
-        char template[] = "/tmp/test-path-lookup.XXXXXXX";
-
+static void test_generator_binary_paths_one(LookupScope scope) {
+        _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
         _cleanup_strv_free_ char **gp_without_env = NULL;
         _cleanup_strv_free_ char **env_gp_without_env = NULL;
         _cleanup_strv_free_ char **gp_with_env = NULL;
         _cleanup_strv_free_ char **env_gp_with_env = NULL;
         char *systemd_generator_path = NULL;
         char *systemd_env_generator_path = NULL;
-        char **dir;
 
-        assert_se(mkdtemp(template));
+        assert_se(mkdtemp_malloc("/tmp/test-path-lookup.XXXXXXX", &tmp) >= 0);
 
         assert_se(unsetenv("SYSTEMD_GENERATOR_PATH") == 0);
         assert_se(unsetenv("SYSTEMD_ENVIRONMENT_GENERATOR_PATH") == 0);
 
         gp_without_env = generator_binary_paths(scope);
-        env_gp_without_env = env_generator_binary_paths(scope == UNIT_FILE_SYSTEM ? true : false);
+        env_gp_without_env = env_generator_binary_paths(scope == LOOKUP_SCOPE_SYSTEM ? true : false);
 
-        log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
+        log_info("Generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
         STRV_FOREACH(dir, gp_without_env)
                 log_info("        %s", *dir);
 
-        log_info("Environment generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
+        log_info("Environment generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
         STRV_FOREACH(dir, env_gp_without_env)
                 log_info("        %s", *dir);
 
         assert_se(!strv_isempty(gp_without_env));
         assert_se(!strv_isempty(env_gp_without_env));
 
-        systemd_generator_path = strjoina(template, "/systemd-generator-path");
-        systemd_env_generator_path = strjoina(template, "/systemd-environment-generator-path");
+        systemd_generator_path = strjoina(tmp, "/systemd-generator-path");
+        systemd_env_generator_path = strjoina(tmp, "/systemd-environment-generator-path");
         assert_se(setenv("SYSTEMD_GENERATOR_PATH", systemd_generator_path, 1) == 0);
         assert_se(setenv("SYSTEMD_ENVIRONMENT_GENERATOR_PATH", systemd_env_generator_path, 1) == 0);
 
         gp_with_env = generator_binary_paths(scope);
-        env_gp_with_env = env_generator_binary_paths(scope == UNIT_FILE_SYSTEM ? true : false);
+        env_gp_with_env = env_generator_binary_paths(scope == LOOKUP_SCOPE_SYSTEM ? true : false);
 
-        log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
+        log_info("Generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
         STRV_FOREACH(dir, gp_with_env)
                 log_info("        %s", *dir);
 
-        log_info("Environment generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
+        log_info("Environment generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
         STRV_FOREACH(dir, env_gp_with_env)
                 log_info("        %s", *dir);
 
@@ -117,17 +118,9 @@
         assert_se(strv_equal(env_gp_with_env, STRV_MAKE(systemd_env_generator_path)));
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_paths(UNIT_FILE_SYSTEM);
-        test_paths(UNIT_FILE_USER);
-        test_paths(UNIT_FILE_GLOBAL);
-
-        test_user_and_global_paths();
-
-        test_generator_binary_paths(UNIT_FILE_SYSTEM);
-        test_generator_binary_paths(UNIT_FILE_USER);
-
-        return EXIT_SUCCESS;
+TEST(generator_binary_paths) {
+        test_generator_binary_paths_one(LOOKUP_SCOPE_SYSTEM);
+        test_generator_binary_paths_one(LOOKUP_SCOPE_USER);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
index 4c041cd..136005d 100644
--- a/src/test/test-path-util.c
+++ b/src/test/test-path-util.c
@@ -6,6 +6,7 @@
 #include "alloc-util.h"
 #include "exec-util.h"
 #include "fd-util.h"
+#include "fs-util.h"
 #include "macro.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -14,16 +15,14 @@
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
-#include "util.h"
+#include "tmpfile-util.h"
 
-static void test_print_paths(void) {
+TEST(print_paths) {
         log_info("DEFAULT_PATH=%s", DEFAULT_PATH);
         log_info("DEFAULT_USER_PATH=%s", DEFAULT_USER_PATH);
 }
 
-static void test_path(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path) {
         assert_se(path_is_absolute("/"));
         assert_se(!path_is_absolute("./"));
 
@@ -57,18 +56,16 @@
 static void test_path_simplify_one(const char *in, const char *out) {
         char *p;
 
-        p = strdupa(in);
+        p = strdupa_safe(in);
         path_simplify(p);
         log_debug("/* test_path_simplify(%s) → %s (expected: %s) */", in, p, out);
         assert_se(streq(p, out));
 }
 
-static void test_path_simplify(void) {
+TEST(path_simplify) {
         _cleanup_free_ char *hoge = NULL, *hoge_out = NULL;
         char foo[NAME_MAX * 2];
 
-        log_info("/* %s */", __func__);
-
         test_path_simplify_one("", "");
         test_path_simplify_one("aaa/bbb////ccc", "aaa/bbb/ccc");
         test_path_simplify_one("//aaa/.////ccc", "/aaa/ccc");
@@ -125,9 +122,7 @@
         assert_se(path_equal(b, a) == (expected == 0));
 }
 
-static void test_path_compare(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_compare) {
         test_path_compare_one("/goo", "/goo", 0);
         test_path_compare_one("/goo", "/goo", 0);
         test_path_compare_one("//goo", "/goo", 0);
@@ -155,11 +150,9 @@
         test_path_compare_one("/foo/a/b", "/foo/aaa", -1);
 }
 
-static void test_path_equal_root(void) {
+TEST(path_equal_root) {
         /* Nail down the details of how path_equal("/", ...) works. */
 
-        log_info("/* %s */", __func__);
-
         assert_se(path_equal("/", "/"));
         assert_se(path_equal("/", "//"));
 
@@ -199,17 +192,18 @@
         assert_se(!path_equal_or_files_same("/", "/.../", AT_SYMLINK_NOFOLLOW));
 }
 
-static void test_find_executable_full(void) {
+TEST(find_executable_full) {
         char *p;
+        char* test_file_name;
+        _cleanup_close_ int fd = -EBADF;
+        char fn[] = "/tmp/test-XXXXXX";
 
-        log_info("/* %s */", __func__);
-
-        assert_se(find_executable_full("sh", true, &p, NULL) == 0);
+        assert_se(find_executable_full("sh", NULL, NULL, true, &p, NULL) == 0);
         puts(p);
         assert_se(streq(basename(p), "sh"));
         free(p);
 
-        assert_se(find_executable_full("sh", false, &p, NULL) == 0);
+        assert_se(find_executable_full("sh", NULL, NULL, false, &p, NULL) == 0);
         puts(p);
         assert_se(streq(basename(p), "sh"));
         free(p);
@@ -221,31 +215,42 @@
 
         assert_se(unsetenv("PATH") == 0);
 
-        assert_se(find_executable_full("sh", true, &p, NULL) == 0);
+        assert_se(find_executable_full("sh", NULL, NULL, true, &p, NULL) == 0);
         puts(p);
         assert_se(streq(basename(p), "sh"));
         free(p);
 
-        assert_se(find_executable_full("sh", false, &p, NULL) == 0);
+        assert_se(find_executable_full("sh", NULL, NULL, false, &p, NULL) == 0);
         puts(p);
         assert_se(streq(basename(p), "sh"));
         free(p);
 
         if (oldpath)
                 assert_se(setenv("PATH", oldpath, true) >= 0);
+
+        assert_se((fd = mkostemp_safe(fn)) >= 0);
+        assert_se(fchmod(fd, 0755) >= 0);
+
+        test_file_name = basename(fn);
+
+        assert_se(find_executable_full(test_file_name, NULL, STRV_MAKE("/doesnotexist", "/tmp", "/bin"), false, &p, NULL) == 0);
+        puts(p);
+        assert_se(streq(p, fn));
+        free(p);
+
+        (void) unlink(fn);
+        assert_se(find_executable_full(test_file_name, NULL, STRV_MAKE("/doesnotexist", "/tmp", "/bin"), false, &p, NULL) == -ENOENT);
 }
 
-static void test_find_executable(const char *self) {
+TEST(find_executable) {
         char *p;
 
-        log_info("/* %s */", __func__);
-
         assert_se(find_executable("/bin/sh", &p) == 0);
         puts(p);
         assert_se(path_equal(p, "/bin/sh"));
         free(p);
 
-        assert_se(find_executable(self, &p) == 0);
+        assert_se(find_executable(saved_argv[0], &p) == 0);
         puts(p);
         assert_se(endswith(p, "/test-path-util"));
         assert_se(path_is_absolute(p));
@@ -273,11 +278,11 @@
 
 static void test_find_executable_exec_one(const char *path) {
         _cleanup_free_ char *t = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         pid_t pid;
         int r;
 
-        r = find_executable_full(path, false, &t, &fd);
+        r = find_executable_full(path, NULL, NULL, false, &t, &fd);
 
         log_info_errno(r, "%s: %s → %s: %d/%m", __func__, path, t ?: "-", fd);
 
@@ -297,9 +302,7 @@
         assert_se(wait_for_terminate_and_check(t, pid, WAIT_LOG) == 0);
 }
 
-static void test_find_executable_exec(void) {
-        log_info("/* %s */", __func__);
-
+TEST(find_executable_exec) {
         test_find_executable_exec_one("touch");
         test_find_executable_exec_one("/bin/touch");
 
@@ -308,7 +311,7 @@
         test_find_executable_exec_one(script);
 }
 
-static void test_prefixes(void) {
+TEST(prefixes) {
         static const char* const values[] = {
                 "/a/b/c/d",
                 "/a/b/c",
@@ -321,8 +324,6 @@
         char s[PATH_MAX];
         bool b;
 
-        log_info("/* %s */", __func__);
-
         i = 0;
         PATH_FOREACH_PREFIX_MORE(s, "/a/b/c/d") {
                 log_error("---%s---", s);
@@ -348,7 +349,7 @@
         assert_se(values[i] == NULL);
 
         PATH_FOREACH_PREFIX(s, "////")
-                assert_not_reached("Wut?");
+                assert_not_reached();
 
         b = false;
         PATH_FOREACH_PREFIX_MORE(s, "////") {
@@ -359,7 +360,7 @@
         assert_se(b);
 
         PATH_FOREACH_PREFIX(s, "")
-                assert_not_reached("wut?");
+                assert_not_reached();
 
         b = false;
         PATH_FOREACH_PREFIX_MORE(s, "") {
@@ -369,9 +370,7 @@
         }
 }
 
-static void test_path_join(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_join) {
 #define test_join(expected, ...) {        \
                 _cleanup_free_ char *z = NULL;   \
                 z = path_join(__VA_ARGS__); \
@@ -415,11 +414,9 @@
         test_join("//foo////bar////baz//", "//foo/", "///bar/", "///baz//");
 }
 
-static void test_path_extend(void) {
+TEST(path_extend) {
         _cleanup_free_ char *p = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(path_extend(&p, "foo", "bar", "baz") == p);
         assert_se(streq(p, "foo/bar/baz"));
 
@@ -442,17 +439,15 @@
         assert_se(streq(p, "/foo"));
 }
 
-static void test_fsck_exists(void) {
-        log_info("/* %s */", __func__);
-
+TEST(fsck_exists) {
         /* Ensure we use a sane default for PATH. */
         assert_se(unsetenv("PATH") == 0);
 
         /* fsck.minix is provided by util-linux and will probably exist. */
-        assert_se(fsck_exists("minix") == 1);
+        assert_se(fsck_exists_for_fstype("minix") == 1);
 
-        assert_se(fsck_exists("AbCdE") == 0);
-        assert_se(fsck_exists("/../bin/") == 0);
+        assert_se(fsck_exists_for_fstype("AbCdE") == 0);
+        assert_se(fsck_exists_for_fstype("/../bin/") == 0);
 }
 
 static void test_path_make_relative_one(const char *from, const char *to, const char *expected) {
@@ -466,9 +461,7 @@
         assert_se(streq_ptr(z, expected));
 }
 
-static void test_make_relative(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_make_relative) {
         test_path_make_relative_one("some/relative/path", "/some/path", NULL);
         test_path_make_relative_one("/some/path", "some/relative/path", NULL);
         test_path_make_relative_one("/some/dotdot/../path", "/some/path", NULL);
@@ -483,11 +476,37 @@
         test_path_make_relative_one("//extra.//.//./.slashes//./won't////fo.ol///anybody//", "/././/extra././/.slashes////ar.e/.just/././.fine///", "../../../ar.e/.just/.fine");
 }
 
-static void test_strv_resolve(void) {
+static void test_path_make_relative_parent_one(const char *from, const char *to, const char *expected) {
+        _cleanup_free_ char *z = NULL;
+        int r;
+
+        log_info("/* %s(%s, %s) */", __func__, from, to);
+
+        r = path_make_relative_parent(from, to, &z);
+        assert_se((r >= 0) == !!expected);
+        assert_se(streq_ptr(z, expected));
+}
+
+TEST(path_make_relative_parent) {
+        test_path_make_relative_parent_one("some/relative/path/hoge", "/some/path", NULL);
+        test_path_make_relative_parent_one("/some/path/hoge", "some/relative/path", NULL);
+        test_path_make_relative_parent_one("/some/dotdot/../path/hoge", "/some/path", NULL);
+        test_path_make_relative_parent_one("/", "/aaa", NULL);
+
+        test_path_make_relative_parent_one("/hoge", "/", ".");
+        test_path_make_relative_parent_one("/hoge", "/some/path", "some/path");
+        test_path_make_relative_parent_one("/some/path/hoge", "/some/path", ".");
+        test_path_make_relative_parent_one("/some/path/hoge", "/some/path/in/subdir", "in/subdir");
+        test_path_make_relative_parent_one("/some/path/hoge", "/", "../..");
+        test_path_make_relative_parent_one("/some/path/hoge", "/some/other/path", "../other/path");
+        test_path_make_relative_parent_one("/some/path/./dot/hoge", "/some/further/path", "../../further/path");
+        test_path_make_relative_parent_one("//extra.//.//./.slashes//./won't////fo.ol///anybody//hoge", "/././/extra././/.slashes////ar.e/.just/././.fine///", "../../../ar.e/.just/.fine");
+}
+
+TEST(path_strv_resolve) {
         char tmp_dir[] = "/tmp/test-path-util-XXXXXX";
         _cleanup_strv_free_ char **search_dirs = NULL;
         _cleanup_strv_free_ char **absolute_dirs = NULL;
-        char **d;
 
         assert_se(mkdtemp(tmp_dir) != NULL);
 
@@ -525,9 +544,7 @@
         }
 }
 
-static void test_path_startswith(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_startswith) {
         test_path_startswith_one("/foo/bar/barfoo/", "/foo", "/foo/", "bar/barfoo/");
         test_path_startswith_one("/foo/bar/barfoo/", "/foo/", "/foo/", "bar/barfoo/");
         test_path_startswith_one("/foo/bar/barfoo/", "/", "/", "foo/bar/barfoo/");
@@ -561,9 +578,7 @@
         assert_se(path_equal_ptr(t, expected));
 }
 
-static void test_prefix_root(void) {
-        log_info("/* %s */", __func__);
-
+TEST(prefix_root) {
         test_prefix_root_one("/", "/foo", "/foo");
         test_prefix_root_one(NULL, "/foo", "/foo");
         test_prefix_root_one("", "/foo", "/foo");
@@ -582,28 +597,22 @@
         test_prefix_root_one("/foo///", "//bar", "/foo/bar");
 }
 
-static void test_file_in_same_dir(void) {
+TEST(file_in_same_dir) {
         char *t;
 
-        log_info("/* %s */", __func__);
+        assert_se(file_in_same_dir("/", "a", &t) == -EADDRNOTAVAIL);
 
-        t = file_in_same_dir("/", "a");
+        assert_se(file_in_same_dir("/", "/a", &t) >= 0);
         assert_se(streq(t, "/a"));
         free(t);
 
-        t = file_in_same_dir("/", "/a");
-        assert_se(streq(t, "/a"));
+        assert_se(file_in_same_dir("", "a", &t) == -EINVAL);
+
+        assert_se(file_in_same_dir("a/", "x", &t) >= 0);
+        assert_se(streq(t, "x"));
         free(t);
 
-        t = file_in_same_dir("", "a");
-        assert_se(streq(t, "a"));
-        free(t);
-
-        t = file_in_same_dir("a/", "a");
-        assert_se(streq(t, "a/a"));
-        free(t);
-
-        t = file_in_same_dir("bar/foo", "bar");
+        assert_se(file_in_same_dir("bar/foo", "bar", &t) >= 0);
         assert_se(streq(t, "bar/bar"));
         free(t);
 }
@@ -641,12 +650,10 @@
         }
 }
 
-static void test_path_find_first_component(void) {
+TEST(path_find_first_component) {
         _cleanup_free_ char *hoge = NULL;
         char foo[NAME_MAX * 2];
 
-        log_info("/* %s */", __func__);
-
         test_path_find_first_component_one(NULL, false, NULL, 0);
         test_path_find_first_component_one("", false, NULL, 0);
         test_path_find_first_component_one("/", false, NULL, 0);
@@ -722,12 +729,10 @@
         }
 }
 
-static void test_path_find_last_component(void) {
+TEST(path_find_last_component) {
         _cleanup_free_ char *hoge = NULL;
         char foo[NAME_MAX * 2];
 
-        log_info("/* %s */", __func__);
-
         test_path_find_last_component_one(NULL, false, NULL, 0);
         test_path_find_last_component_one("", false, NULL, 0);
         test_path_find_last_component_one("/", false, NULL, 0);
@@ -771,7 +776,7 @@
         test_path_find_last_component_one(hoge, true, STRV_MAKE("c", "b", "a"), -EINVAL);
 }
 
-static void test_last_path_component(void) {
+TEST(last_path_component) {
         assert_se(last_path_component(NULL) == NULL);
         assert_se(streq(last_path_component("a/b/c"), "c"));
         assert_se(streq(last_path_component("a/b/c/"), "c/"));
@@ -796,17 +801,15 @@
         int r;
 
         r = path_extract_filename(input, &k);
-        log_info_errno(r, "%s → %s/%m [expected: %s/%s]",
-                       strnull(input),
-                       strnull(k), /* strerror(r) is printed via %m, to avoid that the two strerror()'s overwrite each other's buffers */
-                       strnull(output), ret < 0 ? strerror_safe(ret) : "-");
+        log_info("%s → %s/%s [expected: %s/%s]",
+                 strnull(input),
+                 strnull(k), r < 0 ? STRERROR(r) : "-",
+                 strnull(output), ret < 0 ? STRERROR(ret) : "-");
         assert_se(streq_ptr(k, output));
         assert_se(r == ret);
 }
 
-static void test_path_extract_filename(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_extract_filename) {
         test_path_extract_filename_one(NULL, NULL, -EINVAL);
         test_path_extract_filename_one("a/b/c", "c", 0);
         test_path_extract_filename_one("a/b/c/", "c", O_DIRECTORY);
@@ -842,10 +845,10 @@
         int r;
 
         r = path_extract_directory(input, &k);
-        log_info_errno(r, "%s → %s/%m [expected: %s/%s]",
-                       strnull(input),
-                       strnull(k), /* we output strerror_safe(r) via %m here, since otherwise the error buffer might be overwritten twice */
-                       strnull(output), strerror_safe(ret));
+        log_info("%s → %s/%s [expected: %s/%s]",
+                 strnull(input),
+                 strnull(k), r < 0 ? STRERROR(r) : "-",
+                 strnull(output), STRERROR(ret));
         assert_se(streq_ptr(k, output));
         assert_se(r == ret);
 
@@ -864,9 +867,7 @@
         }
 }
 
-static void test_path_extract_directory(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_extract_directory) {
         test_path_extract_directory_one(NULL, NULL, -EINVAL);
         test_path_extract_directory_one("a/b/c", "a/b", 0);
         test_path_extract_directory_one("a/b/c/", "a/b", 0);
@@ -897,11 +898,9 @@
         test_path_extract_directory_one("../", NULL, -EINVAL);
 }
 
-static void test_filename_is_valid(void) {
+TEST(filename_is_valid) {
         char foo[NAME_MAX+2];
 
-        log_info("/* %s */", __func__);
-
         assert_se(!filename_is_valid(""));
         assert_se(!filename_is_valid("/bar/foo"));
         assert_se(!filename_is_valid("/"));
@@ -932,12 +931,10 @@
         assert_se(path_is_safe(p) == ret);
 }
 
-static void test_path_is_valid_and_safe(void) {
+TEST(path_is_valid_and_safe) {
         char foo[PATH_MAX+2];
         const char *c;
 
-        log_info("/* %s */", __func__);
-
         test_path_is_valid_and_safe_one("", false);
         test_path_is_valid_and_safe_one("/bar/foo", true);
         test_path_is_valid_and_safe_one("/bar/foo/", true);
@@ -964,9 +961,7 @@
         test_path_is_valid_and_safe_one("o.o", true);
 }
 
-static void test_hidden_or_backup_file(void) {
-        log_info("/* %s */", __func__);
-
+TEST(hidden_or_backup_file) {
         assert_se(hidden_or_backup_file(".hidden"));
         assert_se(hidden_or_backup_file("..hidden"));
         assert_se(!hidden_or_backup_file("hidden."));
@@ -987,24 +982,7 @@
         assert_se(!hidden_or_backup_file("test.dpkg-old.foo"));
 }
 
-static void test_systemd_installation_has_version(const char *path) {
-        int r;
-        const unsigned versions[] = {0, 231, PROJECT_VERSION, 999};
-        unsigned i;
-
-        log_info("/* %s */", __func__);
-
-        for (i = 0; i < ELEMENTSOF(versions); i++) {
-                r = systemd_installation_has_version(path, versions[i]);
-                assert_se(r >= 0);
-                log_info("%s has systemd >= %u: %s",
-                         path ?: "Current installation", versions[i], yes_no(r));
-        }
-}
-
-static void test_skip_dev_prefix(void) {
-        log_info("/* %s */", __func__);
-
+TEST(skip_dev_prefix) {
         assert_se(streq(skip_dev_prefix("/"), "/"));
         assert_se(streq(skip_dev_prefix("/dev"), ""));
         assert_se(streq(skip_dev_prefix("/dev/"), ""));
@@ -1018,9 +996,7 @@
         assert_se(streq(skip_dev_prefix("foo"), "foo"));
 }
 
-static void test_empty_or_root(void) {
-        log_info("/* %s */", __func__);
-
+TEST(empty_or_root) {
         assert_se(empty_or_root(NULL));
         assert_se(empty_or_root(""));
         assert_se(empty_or_root("/"));
@@ -1033,9 +1009,7 @@
         assert_se(!empty_or_root("//yy//"));
 }
 
-static void test_path_startswith_set(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_startswith_set) {
         assert_se(streq_ptr(PATH_STARTSWITH_SET("/foo/bar", "/foo/quux", "/foo/bar", "/zzz"), ""));
         assert_se(streq_ptr(PATH_STARTSWITH_SET("/foo/bar", "/foo/quux", "/foo/", "/zzz"), "bar"));
         assert_se(streq_ptr(PATH_STARTSWITH_SET("/foo/bar", "/foo/quux", "/foo", "/zzz"), "bar"));
@@ -1055,9 +1029,7 @@
         assert_se(streq_ptr(PATH_STARTSWITH_SET("/foo2/bar", "/foo/quux", "", "/zzz"), NULL));
 }
 
-static void test_path_startswith_strv(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_startswith_strv) {
         assert_se(streq_ptr(path_startswith_strv("/foo/bar", STRV_MAKE("/foo/quux", "/foo/bar", "/zzz")), ""));
         assert_se(streq_ptr(path_startswith_strv("/foo/bar", STRV_MAKE("/foo/quux", "/foo/", "/zzz")), "bar"));
         assert_se(streq_ptr(path_startswith_strv("/foo/bar", STRV_MAKE("/foo/quux", "/foo", "/zzz")), "bar"));
@@ -1077,9 +1049,45 @@
         assert_se(streq_ptr(path_startswith_strv("/foo2/bar", STRV_MAKE("/foo/quux", "", "/zzz")), NULL));
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
+static void test_path_glob_can_match_one(const char *pattern, const char *prefix, const char *expected) {
+        _cleanup_free_ char *result = NULL;
 
+        log_debug("%s(%s, %s, %s)", __func__, pattern, prefix, strnull(expected));
+
+        assert_se(path_glob_can_match(pattern, prefix, &result) == !!expected);
+        assert_se(streq_ptr(result, expected));
+}
+
+TEST(path_glob_can_match) {
+        test_path_glob_can_match_one("/foo/hoge/aaa", "/foo/hoge/aaa/bbb", NULL);
+        test_path_glob_can_match_one("/foo/hoge/aaa", "/foo/hoge/aaa", "/foo/hoge/aaa");
+        test_path_glob_can_match_one("/foo/hoge/aaa", "/foo/hoge", "/foo/hoge/aaa");
+        test_path_glob_can_match_one("/foo/hoge/aaa", "/foo", "/foo/hoge/aaa");
+        test_path_glob_can_match_one("/foo/hoge/aaa", "/", "/foo/hoge/aaa");
+
+        test_path_glob_can_match_one("/foo/*/aaa", "/foo/hoge/aaa/bbb", NULL);
+        test_path_glob_can_match_one("/foo/*/aaa", "/foo/hoge/aaa", "/foo/hoge/aaa");
+        test_path_glob_can_match_one("/foo/*/aaa", "/foo/hoge", "/foo/hoge/aaa");
+        test_path_glob_can_match_one("/foo/*/aaa", "/foo", "/foo/*/aaa");
+        test_path_glob_can_match_one("/foo/*/aaa", "/", "/foo/*/aaa");
+
+        test_path_glob_can_match_one("/foo/*/*/aaa", "/foo/xxx/yyy/aaa/bbb", NULL);
+        test_path_glob_can_match_one("/foo/*/*/aaa", "/foo/xxx/yyy/aaa", "/foo/xxx/yyy/aaa");
+        test_path_glob_can_match_one("/foo/*/*/aaa", "/foo/xxx/yyy", "/foo/xxx/yyy/aaa");
+        test_path_glob_can_match_one("/foo/*/*/aaa", "/foo/xxx", "/foo/xxx/*/aaa");
+        test_path_glob_can_match_one("/foo/*/*/aaa", "/foo", "/foo/*/*/aaa");
+        test_path_glob_can_match_one("/foo/*/*/aaa", "/", "/foo/*/*/aaa");
+
+        test_path_glob_can_match_one("/foo/*/aaa/*", "/foo/xxx/aaa/bbb/ccc", NULL);
+        test_path_glob_can_match_one("/foo/*/aaa/*", "/foo/xxx/aaa/bbb", "/foo/xxx/aaa/bbb");
+        test_path_glob_can_match_one("/foo/*/aaa/*", "/foo/xxx/ccc", NULL);
+        test_path_glob_can_match_one("/foo/*/aaa/*", "/foo/xxx/aaa", "/foo/xxx/aaa/*");
+        test_path_glob_can_match_one("/foo/*/aaa/*", "/foo/xxx", "/foo/xxx/aaa/*");
+        test_path_glob_can_match_one("/foo/*/aaa/*", "/foo", "/foo/*/aaa/*");
+        test_path_glob_can_match_one("/foo/*/aaa/*", "/", "/foo/*/aaa/*");
+}
+
+TEST(print_MAX) {
         log_info("PATH_MAX=%zu\n"
                  "FILENAME_MAX=%zu\n"
                  "NAME_MAX=%zu",
@@ -1088,38 +1096,6 @@
                  (size_t) NAME_MAX);
 
         assert_cc(FILENAME_MAX == PATH_MAX);
-
-        test_print_paths();
-        test_path();
-        test_path_simplify();
-        test_path_compare();
-        test_path_equal_root();
-        test_find_executable_full();
-        test_find_executable(argv[0]);
-        test_find_executable_exec();
-        test_prefixes();
-        test_path_join();
-        test_path_extend();
-        test_fsck_exists();
-        test_make_relative();
-        test_strv_resolve();
-        test_path_startswith();
-        test_prefix_root();
-        test_file_in_same_dir();
-        test_path_find_first_component();
-        test_path_find_last_component();
-        test_last_path_component();
-        test_path_extract_filename();
-        test_path_extract_directory();
-        test_filename_is_valid();
-        test_path_is_valid_and_safe();
-        test_hidden_or_backup_file();
-        test_skip_dev_prefix();
-        test_empty_or_root();
-        test_path_startswith_set();
-        test_path_startswith_strv();
-
-        test_systemd_installation_has_version(argv[1]); /* NULL is OK */
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-path.c b/src/test/test-path.c
index 88457d1..f325b4e 100644
--- a/src/test/test-path.c
+++ b/src/test/test-path.c
@@ -17,14 +17,12 @@
 #include "strv.h"
 #include "tests.h"
 #include "unit.h"
-#include "util.h"
 
 typedef void (*test_function_t)(Manager *m);
 
 static int setup_test(Manager **m) {
         char **tests_path = STRV_MAKE("exists", "existsglobFOOBAR", "changed", "modified", "unit",
                                       "directorynotempty", "makedirectory");
-        char **test_path;
         Manager *tmp = NULL;
         int r;
 
@@ -34,11 +32,11 @@
         if (r == -ENOMEDIUM)
                 return log_tests_skipped("cgroupfs not available");
 
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &tmp);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &tmp);
         if (manager_errno_skip_test(r))
                 return log_tests_skipped_errno(r, "manager_new");
         assert_se(r >= 0);
-        assert_se(manager_startup(tmp, NULL, NULL) >= 0);
+        assert_se(manager_startup(tmp, NULL, NULL, NULL) >= 0);
 
         STRV_FOREACH(test_path, tests_path) {
                 _cleanup_free_ char *p = NULL;
@@ -95,7 +93,7 @@
                          UNIT(path)->id,
                          path_state_to_string(path->state),
                          path_result_to_string(path->result),
-                         end - n);
+                         (int64_t) (end - n));
                 log_info("line %u: %s: state = %s; result = %s",
                          line,
                          UNIT(service)->id,
@@ -137,7 +135,7 @@
         path = PATH(unit);
         service = service_for_path(m, path, NULL);
 
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
         if (check_states(m, path, service, PATH_WAITING, SERVICE_DEAD) < 0)
                 return;
 
@@ -171,7 +169,7 @@
         path = PATH(unit);
         service = service_for_path(m, path, NULL);
 
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
         if (check_states(m, path, service, PATH_WAITING, SERVICE_DEAD) < 0)
                 return;
 
@@ -206,7 +204,7 @@
         path = PATH(unit);
         service = service_for_path(m, path, NULL);
 
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
         if (check_states(m, path, service, PATH_WAITING, SERVICE_DEAD) < 0)
                 return;
 
@@ -248,7 +246,7 @@
         path = PATH(unit);
         service = service_for_path(m, path, NULL);
 
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
         if (check_states(m, path, service, PATH_WAITING, SERVICE_DEAD) < 0)
                 return;
 
@@ -289,7 +287,7 @@
         path = PATH(unit);
         service = service_for_path(m, path, "path-mycustomunit.service");
 
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
         if (check_states(m, path, service, PATH_WAITING, SERVICE_DEAD) < 0)
                 return;
 
@@ -320,7 +318,7 @@
 
         assert_se(access(test_path, F_OK) < 0);
 
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
         if (check_states(m, path, service, PATH_WAITING, SERVICE_DEAD) < 0)
                 return;
 
@@ -357,7 +355,7 @@
 
         assert_se(access(test_path, F_OK) < 0);
 
-        assert_se(unit_start(unit) >= 0);
+        assert_se(unit_start(unit, NULL) >= 0);
 
         /* Check if the directory has been created */
         assert_se(access(test_path, F_OK) >= 0);
diff --git a/src/test/test-percent-util.c b/src/test/test-percent-util.c
index b880143..7e8e11b 100644
--- a/src/test/test-percent-util.c
+++ b/src/test/test-percent-util.c
@@ -4,7 +4,7 @@
 #include "tests.h"
 #include "time-util.h"
 
-static void test_parse_percent(void) {
+TEST(parse_percent) {
         assert_se(parse_percent("") == -EINVAL);
         assert_se(parse_percent("foo") == -EINVAL);
         assert_se(parse_percent("0") == -EINVAL);
@@ -24,12 +24,12 @@
         assert_se(parse_percent("3.2%") == -EINVAL);
 }
 
-static void test_parse_percent_unbounded(void) {
+TEST(parse_percent_unbounded) {
         assert_se(parse_percent_unbounded("101%") == 101);
         assert_se(parse_percent_unbounded("400%") == 400);
 }
 
-static void test_parse_permille(void) {
+TEST(parse_permille) {
         assert_se(parse_permille("") == -EINVAL);
         assert_se(parse_permille("foo") == -EINVAL);
         assert_se(parse_permille("0") == -EINVAL);
@@ -67,7 +67,7 @@
         assert_se(parse_permille("0.1%") == 1);
 }
 
-static void test_parse_permille_unbounded(void) {
+TEST(parse_permille_unbounded) {
         assert_se(parse_permille_unbounded("1001‰") == 1001);
         assert_se(parse_permille_unbounded("4000‰") == 4000);
         assert_se(parse_permille_unbounded("2147483647‰") == 2147483647);
@@ -83,7 +83,7 @@
         assert_se(parse_permille_unbounded("429496729.6%") == -ERANGE);
 }
 
-static void test_parse_permyriad(void) {
+TEST(parse_permyriad) {
         assert_se(parse_permyriad("") == -EINVAL);
         assert_se(parse_permyriad("foo") == -EINVAL);
         assert_se(parse_permyriad("0") == -EINVAL);
@@ -128,7 +128,7 @@
         assert_se(parse_permyriad("3.212%") == -EINVAL);
 }
 
-static void test_parse_permyriad_unbounded(void) {
+TEST(parse_permyriad_unbounded) {
         assert_se(parse_permyriad_unbounded("1001‱") == 1001);
         assert_se(parse_permyriad_unbounded("4000‱") == 4000);
         assert_se(parse_permyriad_unbounded("2147483647‱") == 2147483647);
@@ -151,7 +151,7 @@
         assert_se(parse_permyriad_unbounded("42949672.96%") == -ERANGE);
 }
 
-static void test_scale(void) {
+TEST(scale) {
         /* Check some fixed values */
         assert_se(UINT32_SCALE_FROM_PERCENT(0) == 0);
         assert_se(UINT32_SCALE_FROM_PERCENT(50) == UINT32_MAX/2+1);
@@ -196,16 +196,4 @@
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_parse_percent();
-        test_parse_percent_unbounded();
-        test_parse_permille();
-        test_parse_permille_unbounded();
-        test_parse_permyriad();
-        test_parse_permyriad_unbounded();
-        test_scale();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-pretty-print.c b/src/test/test-pretty-print.c
index dbae34e..7c6c6c7 100644
--- a/src/test/test-pretty-print.c
+++ b/src/test/test-pretty-print.c
@@ -11,10 +11,10 @@
 #include "strv.h"
 #include "tests.h"
 
-static void test_terminal_urlify(void) {
+TEST(terminal_urlify) {
         _cleanup_free_ char *formatted = NULL;
 
-        assert_se(terminal_urlify("https://www.freedesktop.org/wiki/Software/systemd/", "systemd homepage", &formatted) >= 0);
+        assert_se(terminal_urlify("https://www.freedesktop.org/wiki/Software/systemd", "systemd homepage", &formatted) >= 0);
         printf("Hey, consider visiting the %s right now! It is very good!\n", formatted);
 
         formatted = mfree(formatted);
@@ -23,7 +23,7 @@
         printf("Or click on %s to have a look at it!\n", formatted);
 }
 
-static void test_cat_files(void) {
+TEST(cat_files) {
         assert_se(cat_files("/no/such/file", NULL, 0) == -ENOENT);
         assert_se(cat_files("/no/such/file", NULL, CAT_FLAGS_MAIN_FILE_OPTIONAL) == 0);
 
@@ -31,13 +31,21 @@
                 assert_se(cat_files("/etc/fstab", STRV_MAKE("/etc/fstab", "/etc/fstab"), 0) == 0);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
+TEST(red_green_cross_check_mark) {
+        bool b = false;
 
-        test_terminal_urlify();
-        test_cat_files();
+        printf("yea: <%s>\n", GREEN_CHECK_MARK());
+        printf("nay: <%s>\n", RED_CROSS_MARK());
 
-        print_separator();
-
-        return 0;
+        printf("%s → %s → %s → %s\n",
+               COLOR_MARK_BOOL(b),
+               COLOR_MARK_BOOL(!b),
+               COLOR_MARK_BOOL(!!b),
+               COLOR_MARK_BOOL(!!!b));
 }
+
+TEST(print_separator) {
+        print_separator();
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-prioq.c b/src/test/test-prioq.c
index de902ca..540863c 100644
--- a/src/test/test-prioq.c
+++ b/src/test/test-prioq.c
@@ -7,6 +7,7 @@
 #include "set.h"
 #include "siphash24.h"
 #include "sort-util.h"
+#include "tests.h"
 
 #define SET_SIZE 1024*4
 
@@ -14,7 +15,7 @@
         return CMP(*a, *b);
 }
 
-static void test_unsigned(void) {
+TEST(unsigned) {
         _cleanup_(prioq_freep) Prioq *q = NULL;
         unsigned buffer[SET_SIZE], i, u, n;
 
@@ -58,7 +59,7 @@
 
 DEFINE_PRIVATE_HASH_OPS(test_hash_ops, struct test, test_hash, test_compare);
 
-static void test_struct(void) {
+TEST(struct) {
         _cleanup_(prioq_freep) Prioq *q = NULL;
         _cleanup_set_free_ Set *s = NULL;
         unsigned previous = 0, i;
@@ -119,10 +120,4 @@
         assert_se(set_isempty(s));
 }
 
-int main(int argc, char* argv[]) {
-
-        test_unsigned();
-        test_struct();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-proc-cmdline.c b/src/test/test-proc-cmdline.c
index 1f5ee7d..1d54066 100644
--- a/src/test/test-proc-cmdline.c
+++ b/src/test/test-proc-cmdline.c
@@ -3,13 +3,13 @@
 #include "alloc-util.h"
 #include "env-util.h"
 #include "errno-util.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "macro.h"
 #include "proc-cmdline.h"
 #include "special.h"
 #include "string-util.h"
 #include "tests.h"
-#include "util.h"
 
 static int obj;
 
@@ -21,15 +21,11 @@
         return 0;
 }
 
-static void test_proc_cmdline_parse(void) {
-        log_info("/* %s */", __func__);
-
+TEST(proc_cmdline_parse) {
         assert_se(proc_cmdline_parse(parse_item, &obj, PROC_CMDLINE_STRIP_RD_PREFIX) >= 0);
 }
 
-static void test_proc_cmdline_override(void) {
-        log_info("/* %s */", __func__);
-
+TEST(proc_cmdline_override) {
         assert_se(putenv((char*) "SYSTEMD_PROC_CMDLINE=foo_bar=quux wuff-piep=tuet zumm some_arg_with_space='foo bar' and_one_more=\"zzz aaa\"") == 0);
         assert_se(putenv((char*) "SYSTEMD_EFI_OPTIONS=different") == 0);
 
@@ -82,12 +78,12 @@
         else if (in_initrd() && !*strip && proc_cmdline_key_streq(key, "rd.zumm"))
                 assert_se(!value);
         else
-                assert_not_reached("Bad key!");
+                assert_not_reached();
 
         return 0;
 }
 
-static void test_proc_cmdline_given(bool flip_initrd) {
+static void test_proc_cmdline_given_one(bool flip_initrd) {
         log_info("/* %s (flip: %s) */", __func__, yes_no(flip_initrd));
 
         if (flip_initrd)
@@ -104,10 +100,15 @@
                 in_initrd_force(!in_initrd());
 }
 
-static void test_proc_cmdline_get_key(void) {
+TEST(test_proc_cmdline_given) {
+        test_proc_cmdline_given_one(false);
+        /* Repeat the same thing, but now flip our ininitrdness */
+        test_proc_cmdline_given_one(true);
+}
+
+TEST(proc_cmdline_get_key) {
         _cleanup_free_ char *value = NULL;
 
-        log_info("/* %s */", __func__);
         assert_se(putenv((char*) "SYSTEMD_PROC_CMDLINE=foo_bar=quux wuff-piep=tuet zumm spaaace='ö ü ß' ticks=\"''\"\n\nkkk=uuu\n\n\n") == 0);
 
         assert_se(proc_cmdline_get_key("", 0, &value) == -EINVAL);
@@ -150,10 +151,9 @@
         assert_se(proc_cmdline_get_key("kkk", 0, &value) > 0 && streq_ptr(value, "uuu"));
 }
 
-static void test_proc_cmdline_get_bool(void) {
+TEST(proc_cmdline_get_bool) {
         bool value = false;
 
-        log_info("/* %s */", __func__);
         assert_se(putenv((char*) "SYSTEMD_PROC_CMDLINE=foo_bar bar-waldo=1 x_y-z=0 quux=miep\nda=yes\nthe=1") == 0);
         assert_se(putenv((char*) "SYSTEMD_EFI_OPTIONS=") == 0);
 
@@ -170,11 +170,15 @@
         assert_se(proc_cmdline_get_bool("quux", &value) == -EINVAL && value == false);
         assert_se(proc_cmdline_get_bool("da", &value) > 0 && value == true);
         assert_se(proc_cmdline_get_bool("the", &value) > 0 && value == true);
+}
+
+#if ENABLE_EFI
+TEST(proc_cmdline_get_bool_efi) {
+        bool value = false;
 
         assert_se(putenv((char*) "SYSTEMD_PROC_CMDLINE=") == 0);
         assert_se(putenv((char*) "SYSTEMD_EFI_OPTIONS=foo_bar bar-waldo=1 x_y-z=0 quux=miep\nda=yes\nthe=1") == 0);
 
-#if ENABLE_EFI
         assert_se(proc_cmdline_get_bool("", &value) == -EINVAL);
         assert_se(proc_cmdline_get_bool("abc", &value) == 0 && value == false);
         assert_se(proc_cmdline_get_bool("foo_bar", &value) > 0 && value == true);
@@ -188,13 +192,12 @@
         assert_se(proc_cmdline_get_bool("quux", &value) == -EINVAL && value == false);
         assert_se(proc_cmdline_get_bool("da", &value) > 0 && value == true);
         assert_se(proc_cmdline_get_bool("the", &value) > 0 && value == true);
-#endif
 }
+#endif
 
-static void test_proc_cmdline_get_key_many(void) {
+TEST(proc_cmdline_get_key_many) {
         _cleanup_free_ char *value1 = NULL, *value2 = NULL, *value3 = NULL, *value4 = NULL, *value5 = NULL, *value6 = NULL, *value7 = NULL;
 
-        log_info("/* %s */", __func__);
         assert_se(putenv((char*) "SYSTEMD_PROC_CMDLINE=foo_bar=quux wuff-piep=tuet zumm SPACE='one two' doubleticks=\" aaa aaa \"\n\nzummm='\n'\n") == 0);
 
         assert_se(proc_cmdline_get_key_many(0,
@@ -215,9 +218,7 @@
         assert_se(streq_ptr(value7, "\n"));
 }
 
-static void test_proc_cmdline_key_streq(void) {
-        log_info("/* %s */", __func__);
-
+TEST(proc_cmdline_key_streq) {
         assert_se(proc_cmdline_key_streq("", ""));
         assert_se(proc_cmdline_key_streq("a", "a"));
         assert_se(!proc_cmdline_key_streq("", "a"));
@@ -232,9 +233,7 @@
         assert_se(!proc_cmdline_key_streq("x_y-z", "x-z_z"));
 }
 
-static void test_proc_cmdline_key_startswith(void) {
-        log_info("/* %s */", __func__);
-
+TEST(proc_cmdline_key_startswith) {
         assert_se(proc_cmdline_key_startswith("", ""));
         assert_se(proc_cmdline_key_startswith("x", ""));
         assert_se(!proc_cmdline_key_startswith("", "x"));
@@ -248,22 +247,11 @@
         assert_se(!proc_cmdline_key_startswith("foo-bar", "foo_xx"));
 }
 
-int main(void) {
-        test_setup_logging(LOG_INFO);
-
+static int intro(void) {
         if (access("/proc/cmdline", R_OK) < 0 && ERRNO_IS_PRIVILEGE(errno))
                 return log_tests_skipped("can't read /proc/cmdline");
 
-        test_proc_cmdline_parse();
-        test_proc_cmdline_override();
-        test_proc_cmdline_given(false);
-        /* Repeat the same thing, but now flip our ininitrdness */
-        test_proc_cmdline_given(true);
-        test_proc_cmdline_key_streq();
-        test_proc_cmdline_key_startswith();
-        test_proc_cmdline_get_key();
-        test_proc_cmdline_get_bool();
-        test_proc_cmdline_get_key_many();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-process-util.c b/src/test/test-process-util.c
index 8c76392..1864f8a 100644
--- a/src/test/test-process-util.c
+++ b/src/test/test-process-util.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include <fcntl.h>
+#include <linux/oom.h>
 #include <sys/mount.h>
 #include <sys/personality.h>
 #include <sys/prctl.h>
@@ -18,6 +19,7 @@
 #include "errno-list.h"
 #include "errno-util.h"
 #include "fd-util.h"
+#include "ioprio-util.h"
 #include "log.h"
 #include "macro.h"
 #include "missing_sched.h"
@@ -32,10 +34,9 @@
 #include "terminal-util.h"
 #include "tests.h"
 #include "user-util.h"
-#include "util.h"
 #include "virt.h"
 
-static void test_get_process_comm(pid_t pid) {
+static void test_get_process_comm_one(pid_t pid) {
         struct stat st;
         _cleanup_free_ char *a = NULL, *c = NULL, *d = NULL, *f = NULL, *i = NULL;
         _cleanup_free_ char *env = NULL;
@@ -96,6 +97,18 @@
         log_info("PID"PID_FMT" $PATH: '%s'", pid, strna(i));
 }
 
+TEST(get_process_comm) {
+        if (saved_argc > 1) {
+                pid_t pid = 0;
+
+                (void) parse_pid(saved_argv[1], &pid);
+                test_get_process_comm_one(pid);
+        } else {
+                TEST_REQ_RUNNING_SYSTEMD(test_get_process_comm_one(1));
+                test_get_process_comm_one(getpid());
+        }
+}
+
 static void test_get_process_cmdline_one(pid_t pid) {
         _cleanup_free_ char *c = NULL, *d = NULL, *e = NULL, *f = NULL, *g = NULL, *h = NULL;
         int r;
@@ -119,11 +132,8 @@
         log_info("      %s", r >= 0 ? h : errno_to_name(r));
 }
 
-static void test_get_process_cmdline(void) {
+TEST(get_process_cmdline) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
-
-        log_info("/* %s */", __func__);
 
         assert_se(d = opendir("/proc"));
 
@@ -153,11 +163,9 @@
         assert_se(streq_ptr(n, output));
 }
 
-static void test_get_process_comm_escape(void) {
+TEST(get_process_comm_escape) {
         _cleanup_free_ char *saved = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(get_process_comm(0, &saved) >= 0);
 
         test_get_process_comm_escape_one("", "");
@@ -174,7 +182,7 @@
         assert_se(prctl(PR_SET_NAME, saved) >= 0);
 }
 
-static void test_pid_is_unwaited(void) {
+TEST(pid_is_unwaited) {
         pid_t pid;
 
         pid = fork();
@@ -191,11 +199,9 @@
         assert_se(!pid_is_unwaited(-1));
 }
 
-static void test_pid_is_alive(void) {
+TEST(pid_is_alive) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         pid = fork();
         assert_se(pid >= 0);
         if (pid == 0) {
@@ -210,9 +216,7 @@
         assert_se(!pid_is_alive(-1));
 }
 
-static void test_personality(void) {
-        log_info("/* %s */", __func__);
-
+TEST(personality) {
         assert_se(personality_to_string(PER_LINUX));
         assert_se(!personality_to_string(PERSONALITY_INVALID));
 
@@ -234,14 +238,12 @@
 #endif
 }
 
-static void test_get_process_cmdline_harder(void) {
+TEST(get_process_cmdline_harder) {
         char path[] = "/tmp/test-cmdlineXXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_free_ char *line = NULL;
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (geteuid() != 0) {
                 log_info("Skipping %s: not root", __func__);
                 return;
@@ -480,8 +482,8 @@
         /* Test with multiple arguments that do require quoting */
 
 #define CMDLINE1 "foo\0'bar'\0\"bar$\"\0x y z\0!``\0"
-#define EXPECT1  "foo \"'bar'\" \"\\\"bar\\$\\\"\" \"x y z\" \"!\\`\\`\" \"\""
-#define EXPECT1p  "foo $'\\'bar\\'' $'\"bar$\"' $'x y z' $'!``' \"\""
+#define EXPECT1  "foo \"'bar'\" \"\\\"bar\\$\\\"\" \"x y z\" \"!\\`\\`\""
+#define EXPECT1p  "foo $'\\'bar\\'' $'\"bar$\"' $'x y z' $'!``'"
         assert_se(lseek(fd, SEEK_SET, 0) == 0);
         assert_se(write(fd, CMDLINE1, sizeof CMDLINE1) == sizeof CMDLINE1);
         assert_se(ftruncate(fd, sizeof CMDLINE1) == 0);
@@ -499,8 +501,8 @@
         line = mfree(line);
 
 #define CMDLINE2 "foo\0\1\2\3\0\0"
-#define EXPECT2  "foo \"\\001\\002\\003\" \"\" \"\""
-#define EXPECT2p  "foo $'\\001\\002\\003' \"\" \"\""
+#define EXPECT2  "foo \"\\001\\002\\003\""
+#define EXPECT2p  "foo $'\\001\\002\\003'"
         assert_se(lseek(fd, SEEK_SET, 0) == 0);
         assert_se(write(fd, CMDLINE2, sizeof CMDLINE2) == sizeof CMDLINE2);
         assert_se(ftruncate(fd, sizeof CMDLINE2) == 0);
@@ -521,114 +523,10 @@
         _exit(EXIT_SUCCESS);
 }
 
-static void test_rename_process_now(const char *p, int ret) {
-        _cleanup_free_ char *comm = NULL, *cmdline = NULL;
-        int r;
-
-        log_info("/* %s */", __func__);
-
-        r = rename_process(p);
-        assert_se(r == ret ||
-                  (ret == 0 && r >= 0) ||
-                  (ret > 0 && r > 0));
-
-        log_debug_errno(r, "rename_process(%s): %m", p);
-
-        if (r < 0)
-                return;
-
-#if HAVE_VALGRIND_VALGRIND_H
-        /* see above, valgrind is weird, we can't verify what we are doing here */
-        if (RUNNING_ON_VALGRIND)
-                return;
-#endif
-
-        assert_se(get_process_comm(0, &comm) >= 0);
-        log_debug("comm = <%s>", comm);
-        assert_se(strneq(comm, p, TASK_COMM_LEN-1));
-        /* We expect comm to be at most 16 bytes (TASK_COMM_LEN). The kernel may raise this limit in the
-         * future. We'd only check the initial part, at least until we recompile, but this will still pass. */
-
-        r = get_process_cmdline(0, SIZE_MAX, 0, &cmdline);
-        assert_se(r >= 0);
-        /* we cannot expect cmdline to be renamed properly without privileges */
-        if (geteuid() == 0) {
-                if (r == 0 && detect_container() > 0)
-                        log_info("cmdline = <%s> (not verified, Running in unprivileged container?)", cmdline);
-                else {
-                        log_info("cmdline = <%s> (expected <%.*s>)", cmdline, (int) strlen("test-process-util"), p);
-
-                        bool skip = cmdline[0] == '"'; /* A shortcut to check if the string is quoted */
-
-                        assert_se(strneq(cmdline + skip, p, strlen("test-process-util")));
-                        assert_se(startswith(cmdline + skip, p));
-                }
-        } else
-                log_info("cmdline = <%s> (not verified)", cmdline);
-}
-
-static void test_rename_process_one(const char *p, int ret) {
-        siginfo_t si;
-        pid_t pid;
-
-        log_info("/* %s */", __func__);
-
-        pid = fork();
-        assert_se(pid >= 0);
-
-        if (pid == 0) {
-                /* child */
-                test_rename_process_now(p, ret);
-                _exit(EXIT_SUCCESS);
-        }
-
-        assert_se(wait_for_terminate(pid, &si) >= 0);
-        assert_se(si.si_code == CLD_EXITED);
-        assert_se(si.si_status == EXIT_SUCCESS);
-}
-
-static void test_rename_process_multi(void) {
-        pid_t pid;
-
-        pid = fork();
-        assert_se(pid >= 0);
-
-        if (pid > 0) {
-                siginfo_t si;
-
-                assert_se(wait_for_terminate(pid, &si) >= 0);
-                assert_se(si.si_code == CLD_EXITED);
-                assert_se(si.si_status == EXIT_SUCCESS);
-
-                return;
-        }
-
-        /* child */
-        test_rename_process_now("one", 1);
-        test_rename_process_now("more", 0); /* longer than "one", hence truncated */
-        (void) setresuid(99, 99, 99); /* change uid when running privileged */
-        test_rename_process_now("time!", 0);
-        test_rename_process_now("0", 1); /* shorter than "one", should fit */
-        test_rename_process_one("", -EINVAL);
-        test_rename_process_one(NULL, -EINVAL);
-        _exit(EXIT_SUCCESS);
-}
-
-static void test_rename_process(void) {
-        test_rename_process_one(NULL, -EINVAL);
-        test_rename_process_one("", -EINVAL);
-        test_rename_process_one("foo", 1); /* should always fit */
-        test_rename_process_one("this is a really really long process name, followed by some more words", 0); /* unlikely to fit */
-        test_rename_process_one("1234567", 1); /* should always fit */
-        test_rename_process_multi(); /* multiple invocations and dropped privileges */
-}
-
-static void test_getpid_cached(void) {
+TEST(getpid_cached) {
         siginfo_t si;
         pid_t a, b, c, d, e, f, child;
 
-        log_info("/* %s */", __func__);
-
         a = raw_getpid();
         b = getpid_cached();
         c = getpid();
@@ -659,7 +557,7 @@
         assert_se(si.si_code == CLD_EXITED);
 }
 
-static void test_getpid_measure(void) {
+TEST(getpid_measure) {
         usec_t t, q;
 
         unsigned long long iterations = slow_tests_enabled() ? 1000000 : 1000;
@@ -683,13 +581,11 @@
         log_info("getpid_cached(): %lf µs each\n", (double) q / iterations);
 }
 
-static void test_safe_fork(void) {
+TEST(safe_fork) {
         siginfo_t status;
         pid_t pid;
         int r;
 
-        log_info("/* %s */", __func__);
-
         BLOCK_SIGNALS(SIGCHLD);
 
         r = safe_fork("(test-child)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_NULL_STDIO|FORK_REOPEN_LOG, &pid);
@@ -707,8 +603,7 @@
         assert_se(status.si_status == 88);
 }
 
-static void test_pid_to_ptr(void) {
-
+TEST(pid_to_ptr) {
         assert_se(PTR_TO_PID(NULL) == 0);
         assert_se(PID_TO_PTR(0) == NULL);
 
@@ -724,39 +619,41 @@
         assert_se(PTR_TO_PID(PID_TO_PTR(INT32_MIN)) == INT32_MIN);
 }
 
-static void test_ioprio_class_from_to_string_one(const char *val, int expected) {
+static void test_ioprio_class_from_to_string_one(const char *val, int expected, int normalized) {
         assert_se(ioprio_class_from_string(val) == expected);
         if (expected >= 0) {
                 _cleanup_free_ char *s = NULL;
                 unsigned ret;
+                int combined;
 
                 assert_se(ioprio_class_to_string_alloc(expected, &s) == 0);
-                /* We sometimes get a class number and sometimes a number back */
+                /* We sometimes get a class number and sometimes a name back */
                 assert_se(streq(s, val) ||
                           safe_atou(val, &ret) == 0);
+
+                /* Make sure normalization works, i.e. NONE → BE gets normalized */
+                combined = ioprio_normalize(ioprio_prio_value(expected, 0));
+                assert_se(ioprio_prio_class(combined) == normalized);
+                assert_se(expected != IOPRIO_CLASS_NONE || ioprio_prio_data(combined) == 4);
         }
 }
 
-static void test_ioprio_class_from_to_string(void) {
-        log_info("/* %s */", __func__);
-
-        test_ioprio_class_from_to_string_one("none", IOPRIO_CLASS_NONE);
-        test_ioprio_class_from_to_string_one("realtime", IOPRIO_CLASS_RT);
-        test_ioprio_class_from_to_string_one("best-effort", IOPRIO_CLASS_BE);
-        test_ioprio_class_from_to_string_one("idle", IOPRIO_CLASS_IDLE);
-        test_ioprio_class_from_to_string_one("0", 0);
-        test_ioprio_class_from_to_string_one("1", 1);
-        test_ioprio_class_from_to_string_one("7", 7);
-        test_ioprio_class_from_to_string_one("8", 8);
-        test_ioprio_class_from_to_string_one("9", -EINVAL);
-        test_ioprio_class_from_to_string_one("-1", -EINVAL);
+TEST(ioprio_class_from_to_string) {
+        test_ioprio_class_from_to_string_one("none", IOPRIO_CLASS_NONE, IOPRIO_CLASS_BE);
+        test_ioprio_class_from_to_string_one("realtime", IOPRIO_CLASS_RT, IOPRIO_CLASS_RT);
+        test_ioprio_class_from_to_string_one("best-effort", IOPRIO_CLASS_BE, IOPRIO_CLASS_BE);
+        test_ioprio_class_from_to_string_one("idle", IOPRIO_CLASS_IDLE, IOPRIO_CLASS_IDLE);
+        test_ioprio_class_from_to_string_one("0", IOPRIO_CLASS_NONE, IOPRIO_CLASS_BE);
+        test_ioprio_class_from_to_string_one("1", 1, 1);
+        test_ioprio_class_from_to_string_one("7", 7, 7);
+        test_ioprio_class_from_to_string_one("8", 8, 8);
+        test_ioprio_class_from_to_string_one("9", -EINVAL, -EINVAL);
+        test_ioprio_class_from_to_string_one("-1", -EINVAL, -EINVAL);
 }
 
-static void test_setpriority_closest(void) {
+TEST(setpriority_closest) {
         int r;
 
-        log_info("/* %s */", __func__);
-
         r = safe_fork("(test-setprio)",
                       FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_DEATHSIG|FORK_WAIT|FORK_LOG, NULL);
         assert_se(r >= 0);
@@ -841,17 +738,21 @@
         }
 }
 
-static void test_get_process_ppid(void) {
+TEST(get_process_ppid) {
         uint64_t limit;
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(get_process_ppid(1, NULL) == -EADDRNOTAVAIL);
 
         /* the process with the PID above the global limit definitely doesn't exist. Verify that */
-        assert_se(procfs_tasks_get_limit(&limit) >= 0);
-        assert_se(limit >= INT_MAX || get_process_ppid(limit+1, NULL) == -ESRCH);
+        assert_se(procfs_get_pid_max(&limit) >= 0);
+        log_debug("kernel.pid_max = %"PRIu64, limit);
+
+        if (limit < INT_MAX) {
+                r = get_process_ppid(limit + 1, NULL);
+                log_debug_errno(r, "get_process_limit(%"PRIu64") → %d/%m", limit + 1, r);
+                assert(r == -ESRCH);
+        }
 
         for (pid_t pid = 0;;) {
                 _cleanup_free_ char *c1 = NULL, *c2 = NULL;
@@ -874,36 +775,27 @@
         }
 }
 
-int main(int argc, char *argv[]) {
-        log_show_color(true);
-        test_setup_logging(LOG_INFO);
+TEST(set_oom_score_adjust) {
+        int a, b, r;
 
-        save_argc_argv(argc, argv);
+        assert_se(get_oom_score_adjust(&a) >= 0);
 
-        if (argc > 1) {
-                pid_t pid = 0;
+        r = set_oom_score_adjust(OOM_SCORE_ADJ_MIN);
+        assert_se(r >= 0 || ERRNO_IS_PRIVILEGE(r));
 
-                (void) parse_pid(argv[1], &pid);
-                test_get_process_comm(pid);
-        } else {
-                TEST_REQ_RUNNING_SYSTEMD(test_get_process_comm(1));
-                test_get_process_comm(getpid());
+        if (r >= 0) {
+                assert_se(get_oom_score_adjust(&b) >= 0);
+                assert_se(b == OOM_SCORE_ADJ_MIN);
         }
 
-        test_get_process_comm_escape();
-        test_get_process_cmdline();
-        test_pid_is_unwaited();
-        test_pid_is_alive();
-        test_personality();
-        test_get_process_cmdline_harder();
-        test_rename_process();
-        test_getpid_cached();
-        test_getpid_measure();
-        test_safe_fork();
-        test_pid_to_ptr();
-        test_ioprio_class_from_to_string();
-        test_setpriority_closest();
-        test_get_process_ppid();
-
-        return 0;
+        assert_se(set_oom_score_adjust(a) >= 0);
+        assert_se(get_oom_score_adjust(&b) >= 0);
+        assert_se(b == a);
 }
+
+static int intro(void) {
+        log_show_color(true);
+        return EXIT_SUCCESS;
+}
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-procfs-util.c b/src/test/test-procfs-util.c
index b2679e3..7c3aa21 100644
--- a/src/test/test-procfs-util.c
+++ b/src/test/test-procfs-util.c
@@ -6,47 +6,71 @@
 #include "format-util.h"
 #include "log.h"
 #include "procfs-util.h"
+#include "process-util.h"
 #include "tests.h"
 
 int main(int argc, char *argv[]) {
-        char buf[CONST_MAX(FORMAT_TIMESPAN_MAX, FORMAT_BYTES_MAX)];
         nsec_t nsec;
-        uint64_t v;
+        uint64_t v, pid_max, threads_max, limit;
         int r;
 
         log_parse_environment();
         log_open();
 
         assert_se(procfs_cpu_get_usage(&nsec) >= 0);
-        log_info("Current system CPU time: %s", format_timespan(buf, sizeof(buf), nsec/NSEC_PER_USEC, 1));
+        log_info("Current system CPU time: %s", FORMAT_TIMESPAN(nsec/NSEC_PER_USEC, 1));
 
         assert_se(procfs_memory_get_used(&v) >= 0);
-        log_info("Current memory usage: %s", format_bytes(buf, sizeof(buf), v));
+        log_info("Current memory usage: %s", FORMAT_BYTES(v));
 
         assert_se(procfs_tasks_get_current(&v) >= 0);
         log_info("Current number of tasks: %" PRIu64, v);
 
-        r = procfs_tasks_get_limit(&v);
+        pid_max = TASKS_MAX;
+        r = procfs_get_pid_max(&pid_max);
         if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r))
-                return log_tests_skipped("can't read /proc/sys/kernel/pid_max");
+                return log_tests_skipped_errno(r, "can't get pid max");
+        assert(r >= 0);
+        log_info("kernel.pid_max: %"PRIu64, pid_max);
+
+        threads_max = TASKS_MAX;
+        r = procfs_get_threads_max(&threads_max);
+        if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r))
+                return log_tests_skipped_errno(r, "can't get threads max");
+        assert(r >= 0);
+        log_info("kernel.threads-max: %"PRIu64, threads_max);
+
+        limit = MIN(pid_max - (pid_max > 0), threads_max);
 
         assert_se(r >= 0);
-        log_info("Limit of tasks: %" PRIu64, v);
-        assert_se(v > 0);
-        assert_se(procfs_tasks_set_limit(v) >= 0);
+        log_info("Limit of tasks: %" PRIu64, limit);
+        assert_se(limit > 0);
 
-        if (v > 100) {
-                uint64_t w;
-                r = procfs_tasks_set_limit(v-1);
-                assert_se(IN_SET(r, 0, -EPERM, -EACCES, -EROFS));
+        /* This call should never fail, as we're trying to set it to the same limit */
+        assert(procfs_tasks_set_limit(limit) >= 0);
 
-                assert_se(procfs_tasks_get_limit(&w) >= 0);
-                assert_se((r == 0 && w == v - 1) || (r < 0 && w == v));
+        if (limit > 100) {
+                log_info("Reducing limit by one to %"PRIu64"…", limit-1);
 
-                assert_se(procfs_tasks_set_limit(v) >= 0);
+                r = procfs_tasks_set_limit(limit-1);
+                if (IN_SET(r, -ENOENT, -EROFS) || ERRNO_IS_PRIVILEGE(r))
+                        return log_tests_skipped_errno(r, "can't set tasks limit");
+                assert_se(r >= 0);
 
-                assert_se(procfs_tasks_get_limit(&w) >= 0);
-                assert_se(v == w);
+                assert_se(procfs_get_pid_max(&v) >= 0);
+                /* We never decrease the pid_max, so it shouldn't have changed */
+                assert_se(v == pid_max);
+
+                assert_se(procfs_get_threads_max(&v) >= 0);
+                assert_se(v == limit-1);
+
+                assert_se(procfs_tasks_set_limit(limit) >= 0);
+
+                assert_se(procfs_get_pid_max(&v) >= 0);
+                assert_se(v == pid_max);
+
+                assert_se(procfs_get_threads_max(&v) >= 0);
+                assert_se(v == limit);
         }
 
         return 0;
diff --git a/src/test/test-psi-util.c b/src/test/test-psi-util.c
index 026f6aa..4ce0811 100644
--- a/src/test/test-psi-util.c
+++ b/src/test/test-psi-util.c
@@ -1,18 +1,17 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include <linux/loadavg.h>
-
 #include "alloc-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "parse-util.h"
 #include "psi-util.h"
 #include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_read_mem_pressure(void) {
+TEST(read_mem_pressure) {
         _cleanup_(unlink_tempfilep) char path[] = "/tmp/pressurereadtestXXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         ResourcePressure rp;
 
         if (geteuid() != 0)
@@ -39,45 +38,41 @@
         assert_se(write_string_file(path, "some avg10=0.22 avg60=0.17 avg300=1.11 total=58761459\n"
                                           "full avg10=0.23 avg60=0.16 avg300=1.08 total=58464525", WRITE_STRING_FILE_CREATE) == 0);
         assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) == 0);
-        assert_se(LOAD_INT(rp.avg10) == 0);
-        assert_se(LOAD_FRAC(rp.avg10) == 22);
-        assert_se(LOAD_INT(rp.avg60) == 0);
-        assert_se(LOAD_FRAC(rp.avg60) == 17);
-        assert_se(LOAD_INT(rp.avg300) == 1);
-        assert_se(LOAD_FRAC(rp.avg300) == 11);
+        assert_se(LOADAVG_INT_SIDE(rp.avg10) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg10) == 22);
+        assert_se(LOADAVG_INT_SIDE(rp.avg60) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg60) == 17);
+        assert_se(LOADAVG_INT_SIDE(rp.avg300) == 1);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg300) == 11);
         assert_se(rp.total == 58761459);
-        assert(read_resource_pressure(path, PRESSURE_TYPE_FULL, &rp) == 0);
-        assert_se(LOAD_INT(rp.avg10) == 0);
-        assert_se(LOAD_FRAC(rp.avg10) == 23);
-        assert_se(LOAD_INT(rp.avg60) == 0);
-        assert_se(LOAD_FRAC(rp.avg60) == 16);
-        assert_se(LOAD_INT(rp.avg300) == 1);
-        assert_se(LOAD_FRAC(rp.avg300) == 8);
+        assert_se(read_resource_pressure(path, PRESSURE_TYPE_FULL, &rp) == 0);
+        assert_se(LOADAVG_INT_SIDE(rp.avg10) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg10) == 23);
+        assert_se(LOADAVG_INT_SIDE(rp.avg60) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg60) == 16);
+        assert_se(LOADAVG_INT_SIDE(rp.avg300) == 1);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg300) == 8);
         assert_se(rp.total == 58464525);
 
         /* Pressure file with extra unsupported fields */
         assert_se(write_string_file(path, "some avg5=0.55 avg10=0.22 avg60=0.17 avg300=1.11 total=58761459\n"
                                           "full avg10=0.23 avg60=0.16 avg300=1.08 avg600=2.00 total=58464525", WRITE_STRING_FILE_CREATE) == 0);
         assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) == 0);
-        assert_se(LOAD_INT(rp.avg10) == 0);
-        assert_se(LOAD_FRAC(rp.avg10) == 22);
-        assert_se(LOAD_INT(rp.avg60) == 0);
-        assert_se(LOAD_FRAC(rp.avg60) == 17);
-        assert_se(LOAD_INT(rp.avg300) == 1);
-        assert_se(LOAD_FRAC(rp.avg300) == 11);
+        assert_se(LOADAVG_INT_SIDE(rp.avg10) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg10) == 22);
+        assert_se(LOADAVG_INT_SIDE(rp.avg60) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg60) == 17);
+        assert_se(LOADAVG_INT_SIDE(rp.avg300) == 1);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg300) == 11);
         assert_se(rp.total == 58761459);
-        assert(read_resource_pressure(path, PRESSURE_TYPE_FULL, &rp) == 0);
-        assert_se(LOAD_INT(rp.avg10) == 0);
-        assert_se(LOAD_FRAC(rp.avg10) == 23);
-        assert_se(LOAD_INT(rp.avg60) == 0);
-        assert_se(LOAD_FRAC(rp.avg60) == 16);
-        assert_se(LOAD_INT(rp.avg300) == 1);
-        assert_se(LOAD_FRAC(rp.avg300) == 8);
+        assert_se(read_resource_pressure(path, PRESSURE_TYPE_FULL, &rp) == 0);
+        assert_se(LOADAVG_INT_SIDE(rp.avg10) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg10) == 23);
+        assert_se(LOADAVG_INT_SIDE(rp.avg60) == 0);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg60) == 16);
+        assert_se(LOADAVG_INT_SIDE(rp.avg300) == 1);
+        assert_se(LOADAVG_DECIMAL_SIDE(rp.avg300) == 8);
         assert_se(rp.total == 58464525);
 }
 
-int main(void) {
-        test_setup_logging(LOG_DEBUG);
-        test_read_mem_pressure();
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-random-util.c b/src/test/test-random-util.c
index 42d7a74..e597271 100644
--- a/src/test/test-random-util.c
+++ b/src/test/test-random-util.c
@@ -9,13 +9,11 @@
 #include "terminal-util.h"
 #include "tests.h"
 
-static void test_genuine_random_bytes(RandomFlags flags) {
+TEST(random_bytes) {
         uint8_t buf[16] = {};
 
-        log_info("/* %s */", __func__);
-
         for (size_t i = 1; i < sizeof buf; i++) {
-                assert_se(genuine_random_bytes(buf, i, flags) == 0);
+                random_bytes(buf, i);
                 if (i + 1 < sizeof buf)
                         assert_se(buf[i] == 0);
 
@@ -23,13 +21,11 @@
         }
 }
 
-static void test_pseudo_random_bytes(void) {
+TEST(crypto_random_bytes) {
         uint8_t buf[16] = {};
 
-        log_info("/* %s */", __func__);
-
         for (size_t i = 1; i < sizeof buf; i++) {
-                pseudo_random_bytes(buf, i);
+                assert_se(crypto_random_bytes(buf, i) == 0);
                 if (i + 1 < sizeof buf)
                         assert_se(buf[i] == 0);
 
@@ -37,24 +33,6 @@
         }
 }
 
-static void test_rdrand(void) {
-        int r;
-
-        log_info("/* %s */", __func__);
-
-        for (unsigned i = 0; i < 10; i++) {
-                unsigned long x = 0;
-
-                r = rdrand(&x);
-                if (r < 0) {
-                        log_error_errno(r, "RDRAND failed: %m");
-                        return;
-                }
-
-                printf("%lx\n", x);
-        }
-}
-
 #define TOTAL 100000
 
 static void test_random_u64_range_one(unsigned mod) {
@@ -85,7 +63,7 @@
                 double dev = (count[i] - exp) / sqrt(exp * (mod > 1 ? mod - 1 : 1) / mod);
                 log_debug("%02zu: %5u (%+.3f)%*s",
                           i, count[i], dev,
-                          count[i] / scale, "x");
+                          (int) (count[i] / scale), "x");
 
                 assert_se(fabs(dev) < 6); /* 6 sigma is excessive, but this check should be enough to
                                            * identify catastrophic failure while minimizing false
@@ -93,23 +71,9 @@
         }
 }
 
-static void test_random_u64_range(void) {
+TEST(random_u64_range) {
         for (unsigned mod = 1; mod < 29; mod++)
                 test_random_u64_range_one(mod);
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_genuine_random_bytes(RANDOM_EXTEND_WITH_PSEUDO);
-        test_genuine_random_bytes(0);
-        test_genuine_random_bytes(RANDOM_BLOCK);
-        test_genuine_random_bytes(RANDOM_ALLOW_RDRAND);
-        test_genuine_random_bytes(RANDOM_ALLOW_INSECURE);
-
-        test_pseudo_random_bytes();
-        test_rdrand();
-        test_random_u64_range();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-ratelimit.c b/src/test/test-ratelimit.c
index af60572..de208c7 100644
--- a/src/test/test-ratelimit.c
+++ b/src/test/test-ratelimit.c
@@ -4,9 +4,10 @@
 
 #include "macro.h"
 #include "ratelimit.h"
+#include "tests.h"
 #include "time-util.h"
 
-static void test_ratelimit_below(void) {
+TEST(ratelimit_below) {
         int i;
         RateLimit ratelimit = { 1 * USEC_PER_SEC, 10 };
 
@@ -17,13 +18,26 @@
         for (i = 0; i < 10; i++)
                 assert_se(ratelimit_below(&ratelimit));
 
-        ratelimit = (RateLimit) { 0, 10 };
+        ratelimit = (const RateLimit) { 0, 10 };
         for (i = 0; i < 10000; i++)
                 assert_se(ratelimit_below(&ratelimit));
 }
 
-int main(int argc, char *argv[]) {
-        test_ratelimit_below();
+TEST(ratelimit_num_dropped) {
+        int i;
+        RateLimit ratelimit = { 1 * USEC_PER_SEC, 10 };
 
-        return 0;
+        for (i = 0; i < 10; i++) {
+                assert_se(ratelimit_below(&ratelimit));
+                assert_se(ratelimit_num_dropped(&ratelimit) == 0);
+        }
+        assert_se(!ratelimit_below(&ratelimit));
+        assert_se(ratelimit_num_dropped(&ratelimit) == 1);
+        assert_se(!ratelimit_below(&ratelimit));
+        assert_se(ratelimit_num_dropped(&ratelimit) == 2);
+        sleep(1);
+        assert_se(ratelimit_below(&ratelimit));
+        assert_se(ratelimit_num_dropped(&ratelimit) == 0);
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-raw-clone.c b/src/test/test-raw-clone.c
new file mode 100644
index 0000000..23ec7d1
--- /dev/null
+++ b/src/test/test-raw-clone.c
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include "errno-util.h"
+#include "format-util.h"
+#include "missing_syscall.h"
+#include "raw-clone.h"
+#include "tests.h"
+
+TEST(raw_clone) {
+        pid_t parent, pid, pid2;
+
+        parent = getpid();
+        log_info("before clone: getpid()→"PID_FMT, parent);
+        assert_se(raw_getpid() == parent);
+
+        pid = raw_clone(0);
+        assert_se(pid >= 0);
+
+        pid2 = raw_getpid();
+        log_info("raw_clone: "PID_FMT" getpid()→"PID_FMT" raw_getpid()→"PID_FMT,
+                 pid, getpid(), pid2);
+        if (pid == 0) {
+                assert_se(pid2 != parent);
+                _exit(EXIT_SUCCESS);
+        } else {
+                int status;
+
+                assert_se(pid2 == parent);
+                waitpid(pid, &status, __WCLONE);
+                assert_se(WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS);
+        }
+
+        errno = 0;
+        assert_se(raw_clone(CLONE_FS|CLONE_NEWNS) == -1);
+        assert_se(errno == EINVAL || ERRNO_IS_PRIVILEGE(errno)); /* Certain container environments prohibit namespaces to us, don't fail in that case */
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-recurse-dir.c b/src/test/test-recurse-dir.c
new file mode 100644
index 0000000..2c2120b
--- /dev/null
+++ b/src/test/test-recurse-dir.c
@@ -0,0 +1,168 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <ftw.h>
+
+#include "log.h"
+#include "recurse-dir.h"
+#include "strv.h"
+#include "tests.h"
+
+static char **list_nftw = NULL;
+
+static int nftw_cb(
+                const char *fpath,
+                const struct stat *sb,
+                int typeflag,
+                struct FTW *ftwbuf) {
+
+        if (ftwbuf->level == 0) /* skip top-level */
+                return FTW_CONTINUE;
+
+        switch (typeflag) {
+
+        case FTW_F:
+                log_debug("ftw found %s", fpath);
+                assert_se(strv_extend(&list_nftw, fpath) >= 0);
+                break;
+
+        case FTW_SL:
+                log_debug("ftw found symlink %s", fpath);
+                assert_se(strv_extendf(&list_nftw, "%s→", fpath) >= 0);
+                break;
+
+        case FTW_D:
+                log_debug("ftw entering %s", fpath);
+                assert_se(strv_extendf(&list_nftw, "%s/", fpath) >= 0);
+                break;
+
+        case FTW_DNR:
+                log_debug("ftw open directory failed %s", fpath);
+                break;
+
+        case FTW_NS:
+                log_debug("ftw stat inode failed %s", fpath);
+                break;
+
+        case FTW_DP:
+        case FTW_SLN:
+        default:
+                assert_not_reached();
+        }
+
+        return FTW_CONTINUE;
+}
+
+static int recurse_dir_callback(
+                RecurseDirEvent event,
+                const char *path,
+                int dir_fd,
+                int inode_fd,
+                const struct dirent *de,
+                const struct statx *sx,
+                void *userdata) {
+
+        char ***l = userdata;
+
+        assert_se(path);
+        assert_se(de);
+
+        switch (event) {
+
+        case RECURSE_DIR_ENTRY:
+                assert_se(!IN_SET(de->d_type, DT_UNKNOWN, DT_DIR));
+
+                log_debug("found %s", path);
+
+                if (de->d_type == DT_LNK)
+                        assert_se(strv_extendf(l, "%s→", path) >= 0);
+                else
+                        assert_se(strv_extend(l, path) >= 0);
+                break;
+
+        case RECURSE_DIR_ENTER:
+                assert_se(de->d_type == DT_DIR);
+
+                log_debug("entering %s", path);
+                assert_se(strv_extendf(l, "%s/", path) >= 0);
+                break;
+
+        case RECURSE_DIR_LEAVE:
+                log_debug("leaving %s", path);
+                break;
+
+        case RECURSE_DIR_SKIP_MOUNT:
+                log_debug("skipping mount %s", path);
+                break;
+
+        case RECURSE_DIR_SKIP_DEPTH:
+                log_debug("skipping depth %s", path);
+                break;
+
+        case RECURSE_DIR_SKIP_OPEN_DIR_ERROR_BASE...RECURSE_DIR_SKIP_OPEN_DIR_ERROR_MAX:
+                log_debug_errno(event - RECURSE_DIR_SKIP_OPEN_DIR_ERROR_BASE, "failed to open dir %s: %m", path);
+                break;
+
+        case RECURSE_DIR_SKIP_OPEN_INODE_ERROR_BASE...RECURSE_DIR_SKIP_OPEN_INODE_ERROR_MAX:
+                log_debug_errno(event - RECURSE_DIR_SKIP_OPEN_INODE_ERROR_BASE, "failed to open inode %s: %m", path);
+                break;
+
+        case RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE...RECURSE_DIR_SKIP_STAT_INODE_ERROR_MAX:
+                log_debug_errno(event - RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE, "failed to stat inode %s: %m", path);
+                break;
+
+        default:
+                assert_not_reached();
+        }
+
+        return RECURSE_DIR_CONTINUE;
+}
+
+int main(int argc, char *argv[]) {
+        _cleanup_strv_free_ char **list_recurse_dir = NULL;
+        const char *p;
+        usec_t t1, t2, t3, t4;
+        int r;
+
+        log_show_color(true);
+        test_setup_logging(LOG_INFO);
+
+        if (argc > 1)
+                p = argv[1];
+        else
+                p = "/usr/share/man"; /* something hopefully reasonably stable while we run (and limited in size) */
+
+        /* Enumerate the specified dirs in full, once via nftw(), and once via recurse_dir(), and ensure the results are identical */
+        t1 = now(CLOCK_MONOTONIC);
+        r = recurse_dir_at(AT_FDCWD, p, 0, UINT_MAX, RECURSE_DIR_SORT|RECURSE_DIR_ENSURE_TYPE|RECURSE_DIR_SAME_MOUNT, recurse_dir_callback, &list_recurse_dir);
+        t2 = now(CLOCK_MONOTONIC);
+        if (r == -ENOENT) {
+                log_warning_errno(r, "Couldn't open directory %s, ignoring: %m", p);
+                return EXIT_TEST_SKIP;
+        }
+        assert_se(r >= 0);
+
+        t3 = now(CLOCK_MONOTONIC);
+        assert_se(nftw(p, nftw_cb, 64, FTW_PHYS|FTW_MOUNT) >= 0);
+        t4 = now(CLOCK_MONOTONIC);
+
+        log_info("recurse_dir(): %s – nftw(): %s", FORMAT_TIMESPAN(t2 - t1, 1), FORMAT_TIMESPAN(t4 - t3, 1));
+
+        strv_sort(list_recurse_dir);
+        strv_sort(list_nftw);
+
+        for (size_t i = 0;; i++) {
+                const char *a = list_nftw ? list_nftw[i] : NULL,
+                        *b = list_recurse_dir ? list_recurse_dir[i] : NULL;
+
+                if (!streq_ptr(a, b)) {
+                        log_error("entry %zu different: %s vs %s", i, strna(a), strna(b));
+                        assert_not_reached();
+                }
+
+                if (!a)
+                        break;
+        }
+
+        list_nftw = strv_free(list_nftw);
+        return 0;
+}
diff --git a/src/test/test-replace-var.c b/src/test/test-replace-var.c
index 4d699b9..f861b27 100644
--- a/src/test/test-replace-var.c
+++ b/src/test/test-replace-var.c
@@ -5,23 +5,28 @@
 #include "macro.h"
 #include "replace-var.h"
 #include "string-util.h"
+#include "tests.h"
 
 static char *lookup(const char *variable, void *userdata) {
         return strjoin("<<<", variable, ">>>");
 }
 
-int main(int argc, char *argv[]) {
+TEST(replace_var) {
         char *r;
 
         assert_se(r = replace_var("@@@foobar@xyz@HALLO@foobar@test@@testtest@TEST@...@@@", lookup, NULL));
         puts(r);
         assert_se(streq(r, "@@@foobar@xyz<<<HALLO>>>foobar@test@@testtest<<<TEST>>>...@@@"));
         free(r);
+}
+
+TEST(strreplace) {
+        char *r;
 
         assert_se(r = strreplace("XYZFFFFXYZFFFFXYZ", "XYZ", "ABC"));
         puts(r);
         assert_se(streq(r, "ABCFFFFABCFFFFABC"));
         free(r);
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-rlimit-util.c b/src/test/test-rlimit-util.c
index 2ebe81d..86d0c04 100644
--- a/src/test/test-rlimit-util.c
+++ b/src/test/test-rlimit-util.c
@@ -8,9 +8,10 @@
 #include "missing_resource.h"
 #include "rlimit-util.h"
 #include "string-util.h"
+#include "tests.h"
 #include "time-util.h"
 
-static void test_rlimit_parse_format(int resource, const char *string, rlim_t soft, rlim_t hard, int ret, const char *formatted) {
+static void test_rlimit_parse_format_one(int resource, const char *string, rlim_t soft, rlim_t hard, int ret, const char *formatted) {
         _cleanup_free_ char *f = NULL;
         struct rlimit rl = {
                 .rlim_cur = 4711,
@@ -34,37 +35,48 @@
         assert_se(memcmp(&rl, &rl2, sizeof(struct rlimit)) == 0);
 }
 
-int main(int argc, char *argv[]) {
-        struct rlimit old, new, high;
-        struct rlimit err = {
-                .rlim_cur = 10,
-                .rlim_max = 5,
-        };
-        int i;
+TEST(rlimit_parse_format) {
+        test_rlimit_parse_format_one(RLIMIT_NOFILE, "4:5", 4, 5, 0, "4:5");
+        test_rlimit_parse_format_one(RLIMIT_NOFILE, "6", 6, 6, 0, "6");
+        test_rlimit_parse_format_one(RLIMIT_NOFILE, "infinity", RLIM_INFINITY, RLIM_INFINITY, 0, "infinity");
+        test_rlimit_parse_format_one(RLIMIT_NOFILE, "infinity:infinity", RLIM_INFINITY, RLIM_INFINITY, 0, "infinity");
+        test_rlimit_parse_format_one(RLIMIT_NOFILE, "8:infinity", 8, RLIM_INFINITY, 0, "8:infinity");
+        test_rlimit_parse_format_one(RLIMIT_CPU, "25min:13h", (25*USEC_PER_MINUTE) / USEC_PER_SEC, (13*USEC_PER_HOUR) / USEC_PER_SEC, 0, "1500:46800");
+        test_rlimit_parse_format_one(RLIMIT_NOFILE, "", 0, 0, -EINVAL, NULL);
+        test_rlimit_parse_format_one(RLIMIT_NOFILE, "5:4", 0, 0, -EILSEQ, NULL);
+        test_rlimit_parse_format_one(RLIMIT_NOFILE, "5:4:3", 0, 0, -EINVAL, NULL);
+        test_rlimit_parse_format_one(RLIMIT_NICE, "20", 20, 20, 0, "20");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "40", 40, 40, 0, "40");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "41", 41, 41, -ERANGE, "41");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "0", 0, 0, 0, "0");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "-7", 27, 27, 0, "27");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "-20", 40, 40, 0, "40");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "-21", 41, 41, -ERANGE, "41");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "-0", 20, 20, 0, "20");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "+7", 13, 13, 0, "13");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "+19", 1, 1, 0, "1");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "+20", 0, 0, -ERANGE, "0");
+        test_rlimit_parse_format_one(RLIMIT_NICE, "+0", 20, 20, 0, "20");
+}
 
-        log_parse_environment();
-        log_open();
-
-        assert_se(drop_capability(CAP_SYS_RESOURCE) == 0);
-
-        assert_se(getrlimit(RLIMIT_NOFILE, &old) == 0);
-        new.rlim_cur = MIN(5U, old.rlim_max);
-        new.rlim_max = old.rlim_max;
-        assert_se(setrlimit(RLIMIT_NOFILE, &new) >= 0);
-
+TEST(rlimit_from_string) {
         assert_se(rlimit_from_string("NOFILE") == RLIMIT_NOFILE);
         assert_se(rlimit_from_string("LimitNOFILE") == -EINVAL);
         assert_se(rlimit_from_string("RLIMIT_NOFILE") == -EINVAL);
         assert_se(rlimit_from_string("xxxNOFILE") == -EINVAL);
         assert_se(rlimit_from_string("DefaultLimitNOFILE") == -EINVAL);
+}
 
+TEST(rlimit_from_string_harder) {
         assert_se(rlimit_from_string_harder("NOFILE") == RLIMIT_NOFILE);
         assert_se(rlimit_from_string_harder("LimitNOFILE") == RLIMIT_NOFILE);
         assert_se(rlimit_from_string_harder("RLIMIT_NOFILE") == RLIMIT_NOFILE);
         assert_se(rlimit_from_string_harder("xxxNOFILE") == -EINVAL);
         assert_se(rlimit_from_string_harder("DefaultLimitNOFILE") == -EINVAL);
+}
 
-        for (i = 0; i < _RLIMIT_MAX; i++) {
+TEST(rlimit_to_string_all) {
+        for (int i = 0; i < _RLIMIT_MAX; i++) {
                 _cleanup_free_ char *prefixed = NULL;
                 const char *p;
 
@@ -85,6 +97,21 @@
                 assert_se(rlimit_from_string(prefixed) < 0);
                 assert_se(rlimit_from_string_harder(prefixed) == i);
         }
+}
+
+TEST(setrlimit) {
+        struct rlimit old, new, high;
+        struct rlimit err = {
+                .rlim_cur = 10,
+                .rlim_max = 5,
+        };
+
+        assert_se(drop_capability(CAP_SYS_RESOURCE) == 0);
+
+        assert_se(getrlimit(RLIMIT_NOFILE, &old) == 0);
+        new.rlim_cur = MIN(5U, old.rlim_max);
+        new.rlim_max = old.rlim_max;
+        assert_se(setrlimit(RLIMIT_NOFILE, &new) >= 0);
 
         assert_se(streq_ptr(rlimit_to_string(RLIMIT_NOFILE), "NOFILE"));
         assert_se(rlimit_to_string(-1) == NULL);
@@ -107,28 +134,6 @@
         assert_se(getrlimit(RLIMIT_NOFILE, &new) == 0);
         assert_se(old.rlim_cur == new.rlim_cur);
         assert_se(old.rlim_max == new.rlim_max);
-
-        test_rlimit_parse_format(RLIMIT_NOFILE, "4:5", 4, 5, 0, "4:5");
-        test_rlimit_parse_format(RLIMIT_NOFILE, "6", 6, 6, 0, "6");
-        test_rlimit_parse_format(RLIMIT_NOFILE, "infinity", RLIM_INFINITY, RLIM_INFINITY, 0, "infinity");
-        test_rlimit_parse_format(RLIMIT_NOFILE, "infinity:infinity", RLIM_INFINITY, RLIM_INFINITY, 0, "infinity");
-        test_rlimit_parse_format(RLIMIT_NOFILE, "8:infinity", 8, RLIM_INFINITY, 0, "8:infinity");
-        test_rlimit_parse_format(RLIMIT_CPU, "25min:13h", (25*USEC_PER_MINUTE) / USEC_PER_SEC, (13*USEC_PER_HOUR) / USEC_PER_SEC, 0, "1500:46800");
-        test_rlimit_parse_format(RLIMIT_NOFILE, "", 0, 0, -EINVAL, NULL);
-        test_rlimit_parse_format(RLIMIT_NOFILE, "5:4", 0, 0, -EILSEQ, NULL);
-        test_rlimit_parse_format(RLIMIT_NOFILE, "5:4:3", 0, 0, -EINVAL, NULL);
-        test_rlimit_parse_format(RLIMIT_NICE, "20", 20, 20, 0, "20");
-        test_rlimit_parse_format(RLIMIT_NICE, "40", 40, 40, 0, "40");
-        test_rlimit_parse_format(RLIMIT_NICE, "41", 41, 41, -ERANGE, "41");
-        test_rlimit_parse_format(RLIMIT_NICE, "0", 0, 0, 0, "0");
-        test_rlimit_parse_format(RLIMIT_NICE, "-7", 27, 27, 0, "27");
-        test_rlimit_parse_format(RLIMIT_NICE, "-20", 40, 40, 0, "40");
-        test_rlimit_parse_format(RLIMIT_NICE, "-21", 41, 41, -ERANGE, "41");
-        test_rlimit_parse_format(RLIMIT_NICE, "-0", 20, 20, 0, "20");
-        test_rlimit_parse_format(RLIMIT_NICE, "+7", 13, 13, 0, "13");
-        test_rlimit_parse_format(RLIMIT_NICE, "+19", 1, 1, 0, "1");
-        test_rlimit_parse_format(RLIMIT_NICE, "+20", 0, 0, -ERANGE, "0");
-        test_rlimit_parse_format(RLIMIT_NICE, "+0", 20, 20, 0, "20");
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-rm-rf.c b/src/test/test-rm-rf.c
index 38aa100..1eb9a49 100644
--- a/src/test/test-rm-rf.c
+++ b/src/test/test-rm-rf.c
@@ -38,11 +38,9 @@
         assert_se(access(d, F_OK) < 0 && errno == ENOENT);
 }
 
-static void test_rm_rf_chmod(void) {
+TEST(rm_rf_chmod) {
         int r;
 
-        log_info("/* %s */", __func__);
-
         if (getuid() == 0) {
                 /* This test only works unpriv (as only then the access mask for the owning user matters),
                  * hence drop privs here */
@@ -65,10 +63,4 @@
         test_rm_rf_chmod_inner();
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_rm_rf_chmod();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-sbat.c b/src/test/test-sbat.c
new file mode 100644
index 0000000..1a90541
--- /dev/null
+++ b/src/test/test-sbat.c
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/* We include efi_config.h after undefining PROJECT_VERSION which is also defined in config.h. */
+#undef PROJECT_VERSION
+#include "efi_config.h"
+
+#include "build.h"
+#include "sbat.h"
+#include "tests.h"
+
+TEST(sbat_section_text) {
+        log_info("---SBAT-----------&<----------------------------------------\n"
+                 "%s"
+                 "------------------>&-----------------------------------------",
+#ifdef SBAT_DISTRO
+                 SBAT_SECTION_TEXT
+#else
+                 "(not defined)"
+#endif
+        );
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c
index 1f125b1..721c4b6 100644
--- a/src/test/test-sched-prio.c
+++ b/src/test/test-sched-prio.c
@@ -30,11 +30,11 @@
         assert_se(set_unit_path(unit_dir) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
         if (manager_errno_skip_test(r))
                 return log_tests_skipped_errno(r, "manager_new");
         assert_se(r >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         /* load idle ok */
         assert_se(manager_load_startable_unit_or_warn(m, "sched_idle_ok.service", NULL, &idle_ok) >= 0);
diff --git a/src/test/test-sd-hwdb.c b/src/test/test-sd-hwdb.c
index 7e1512a..ecb6118 100644
--- a/src/test/test-sd-hwdb.c
+++ b/src/test/test-sd-hwdb.c
@@ -5,51 +5,43 @@
 #include "alloc-util.h"
 #include "errno-util.h"
 #include "errno.h"
+#include "hwdb-internal.h"
+#include "nulstr-util.h"
 #include "tests.h"
 
-static int test_failed_enumerate(void) {
+TEST(failed_enumerate) {
         _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
         const char *key, *value;
-        int r;
 
-        log_info("/* %s */", __func__);
-
-        r = sd_hwdb_new(&hwdb);
-        if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r))
-                return r;
-        assert_se(r == 0);
+        assert_se(sd_hwdb_new(&hwdb) == 0);
 
         assert_se(sd_hwdb_seek(hwdb, "no-such-modalias-should-exist") == 0);
 
         assert_se(sd_hwdb_enumerate(hwdb, &key, &value) == 0);
         assert_se(sd_hwdb_enumerate(hwdb, &key, NULL) == -EINVAL);
         assert_se(sd_hwdb_enumerate(hwdb, NULL, &value) == -EINVAL);
-
-        return 0;
 }
 
 #define DELL_MODALIAS \
-        "evdev:atkbd:dmi:bvnXXX:bvrYYY:bdZZZ:svnDellXXX:pnYYY"
+        "evdev:atkbd:dmi:bvnXXX:bvrYYY:bdZZZ:svnDellXXX:pnYYY:"
 
-static void test_basic_enumerate(void) {
+TEST(basic_enumerate) {
         _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
         const char *key, *value;
         size_t len1 = 0, len2 = 0;
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(sd_hwdb_new(&hwdb) == 0);
 
         assert_se(sd_hwdb_seek(hwdb, DELL_MODALIAS) == 0);
 
         for (;;) {
                 r = sd_hwdb_enumerate(hwdb, &key, &value);
-                assert(IN_SET(r, 0, 1));
+                assert_se(IN_SET(r, 0, 1));
                 if (r == 0)
                         break;
-                assert(key);
-                assert(value);
+                assert_se(key);
+                assert_se(value);
                 log_debug("A: \"%s\" → \"%s\"", key, value);
                 len1 += strlen(key) + strlen(value);
         }
@@ -62,16 +54,32 @@
         assert_se(len1 == len2);
 }
 
-int main(int argc, char *argv[]) {
+TEST(sd_hwdb_new_from_path) {
+        _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
         int r;
 
-        test_setup_logging(LOG_DEBUG);
+        assert_se(sd_hwdb_new_from_path(NULL, &hwdb) == -EINVAL);
+        assert_se(sd_hwdb_new_from_path("", &hwdb) == -EINVAL);
+        assert_se(sd_hwdb_new_from_path("/path/that/should/not/exist", &hwdb) < 0);
 
-        r = test_failed_enumerate();
-        if (r < 0)
+        NULSTR_FOREACH(hwdb_bin_path, hwdb_bin_paths) {
+                r = sd_hwdb_new_from_path(hwdb_bin_path, &hwdb);
+                if (r >= 0)
+                        break;
+        }
+
+        assert_se(r >= 0);
+}
+
+static int intro(void) {
+        _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
+        int r;
+
+        r = sd_hwdb_new(&hwdb);
+        if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r))
                 return log_tests_skipped_errno(r, "cannot open hwdb");
 
-        test_basic_enumerate();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/test/test-sd-path.c b/src/test/test-sd-path.c
index 75436ab..4f23e3b 100644
--- a/src/test/test-sd-path.c
+++ b/src/test/test-sd-path.c
@@ -7,9 +7,7 @@
 #include "strv.h"
 #include "tests.h"
 
-static void test_sd_path_lookup(void) {
-        log_info("/* %s */", __func__);
-
+TEST(sd_path_lookup) {
         for (uint64_t i = 0; i < _SD_PATH_MAX; i++) {
                 _cleanup_free_ char *t = NULL, *s = NULL;
                 int r;
@@ -31,12 +29,9 @@
         assert_se(sd_path_lookup(_SD_PATH_MAX, NULL, &tt) == -EOPNOTSUPP);
 }
 
-static void test_sd_path_lookup_strv(void) {
-        log_info("/* %s */", __func__);
-
+TEST(sd_path_lookup_strv) {
         for (uint64_t i = 0; i < _SD_PATH_MAX; i++) {
                 _cleanup_strv_free_ char **t = NULL, **s = NULL;
-                char **item;
                 int r;
 
                 r = sd_path_lookup_strv(i, NULL, &t);
@@ -61,9 +56,4 @@
         assert_se(sd_path_lookup(_SD_PATH_MAX, NULL, &tt) == -EOPNOTSUPP);
 }
 
-int main(void) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_sd_path_lookup();
-        test_sd_path_lookup_strv();
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-seccomp.c b/src/test/test-seccomp.c
index dc3088d..2d06098 100644
--- a/src/test/test-seccomp.c
+++ b/src/test/test-seccomp.c
@@ -46,7 +46,7 @@
         return geteuid() == 0 && have_effective_cap(CAP_SYS_ADMIN) > 0; /* If we are root but CAP_SYS_ADMIN we can't do caps (unless we also do NNP) */
 }
 
-static void test_parse_syscall_and_errno(void) {
+TEST(parse_syscall_and_errno) {
         _cleanup_free_ char *n = NULL;
         int e;
 
@@ -104,12 +104,10 @@
         assert_se(parse_syscall_and_errno("hoge:", &n, &e) == -EINVAL);
 }
 
-static void test_seccomp_arch_to_string(void) {
+TEST(seccomp_arch_to_string) {
         uint32_t a, b;
         const char *name;
 
-        log_info("/* %s */", __func__);
-
         a = seccomp_arch_native();
         assert_se(a > 0);
         name = seccomp_arch_to_string(a);
@@ -118,10 +116,8 @@
         assert_se(a == b);
 }
 
-static void test_architecture_table(void) {
-        const char *n, *n2;
-
-        log_info("/* %s */", __func__);
+TEST(architecture_table) {
+        const char *n2;
 
         NULSTR_FOREACH(n,
                        "native\0"
@@ -136,6 +132,8 @@
                        "mips-le\0"
                        "mips64-le\0"
                        "mips64-le-n32\0"
+                       "parisc\0"
+                       "parisc64\0"
                        "ppc\0"
                        "ppc64\0"
                        "ppc64-le\0"
@@ -153,9 +151,7 @@
         }
 }
 
-static void test_syscall_filter_set_find(void) {
-        log_info("/* %s */", __func__);
-
+TEST(syscall_filter_set_find) {
         assert_se(!syscall_filter_set_find(NULL));
         assert_se(!syscall_filter_set_find(""));
         assert_se(!syscall_filter_set_find("quux"));
@@ -166,9 +162,7 @@
         assert_se(syscall_filter_set_find("@raw-io") == syscall_filter_sets + SYSCALL_FILTER_SET_RAW_IO);
 }
 
-static void test_filter_sets(void) {
-        log_info("/* %s */", __func__);
-
+TEST(filter_sets) {
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -230,9 +224,7 @@
         }
 }
 
-static void test_filter_sets_ordered(void) {
-        log_info("/* %s */", __func__);
-
+TEST(filter_sets_ordered) {
         /* Ensure "@default" always remains at the beginning of the list */
         assert_se(SYSCALL_FILTER_SET_DEFAULT == 0);
         assert_se(streq(syscall_filter_sets[0].name, "@default"));
@@ -242,7 +234,7 @@
         assert_se(streq(syscall_filter_sets[SYSCALL_FILTER_SET_KNOWN].name, "@known"));
 
         for (size_t i = 0; i < _SYSCALL_FILTER_SET_MAX; i++) {
-                const char *k, *p = NULL;
+                const char *p = NULL;
 
                 /* Make sure each group has a description */
                 assert_se(!isempty(syscall_filter_sets[0].help));
@@ -265,7 +257,7 @@
         }
 }
 
-static void test_restrict_namespace(void) {
+TEST(restrict_namespace) {
         char *s = NULL;
         unsigned long ul;
         pid_t pid;
@@ -275,8 +267,6 @@
                 return;
         }
 
-        log_info("/* %s */", __func__);
-
         assert_se(namespace_flags_to_string(0, &s) == 0 && isempty(s));
         s = mfree(s);
         assert_se(namespace_flags_to_string(CLONE_NEWNS, &s) == 0 && streq(s, "mnt"));
@@ -368,12 +358,10 @@
         assert_se(wait_for_terminate_and_check("nsseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_protect_sysctl(void) {
+TEST(protect_sysctl) {
         pid_t pid;
         _cleanup_free_ char *seccomp = NULL;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -422,11 +410,9 @@
         assert_se(wait_for_terminate_and_check("sysctlseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_protect_syslog(void) {
+TEST(protect_syslog) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -464,11 +450,9 @@
         assert_se(wait_for_terminate_and_check("syslogseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_restrict_address_families(void) {
+TEST(restrict_address_families) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -553,11 +537,9 @@
         assert_se(wait_for_terminate_and_check("socketseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_restrict_realtime(void) {
+TEST(restrict_realtime) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -577,22 +559,32 @@
         assert_se(pid >= 0);
 
         if (pid == 0) {
-                assert_se(sched_setscheduler(0, SCHED_FIFO, &(struct sched_param) { .sched_priority = 1 }) >= 0);
-                assert_se(sched_setscheduler(0, SCHED_RR, &(struct sched_param) { .sched_priority = 1 }) >= 0);
+                /* On some CI environments, the restriction may be already enabled. */
+                if (sched_setscheduler(0, SCHED_FIFO, &(struct sched_param) { .sched_priority = 1 }) < 0) {
+                        log_full_errno(errno == EPERM ? LOG_DEBUG : LOG_WARNING, errno,
+                                       "Failed to set scheduler parameter for FIFO: %m");
+                        assert(errno == EPERM);
+                }
+                if (sched_setscheduler(0, SCHED_RR, &(struct sched_param) { .sched_priority = 1 }) < 0) {
+                        log_full_errno(errno == EPERM ? LOG_DEBUG : LOG_WARNING, errno,
+                                       "Failed to set scheduler parameter for RR: %m");
+                        assert(errno == EPERM);
+                }
+
                 assert_se(sched_setscheduler(0, SCHED_IDLE, &(struct sched_param) { .sched_priority = 0 }) >= 0);
                 assert_se(sched_setscheduler(0, SCHED_BATCH, &(struct sched_param) { .sched_priority = 0 }) >= 0);
                 assert_se(sched_setscheduler(0, SCHED_OTHER, &(struct sched_param) {}) >= 0);
 
-                assert_se(seccomp_restrict_realtime() >= 0);
+                assert_se(seccomp_restrict_realtime_full(ENOANO) >= 0);
 
                 assert_se(sched_setscheduler(0, SCHED_IDLE, &(struct sched_param) { .sched_priority = 0 }) >= 0);
                 assert_se(sched_setscheduler(0, SCHED_BATCH, &(struct sched_param) { .sched_priority = 0 }) >= 0);
                 assert_se(sched_setscheduler(0, SCHED_OTHER, &(struct sched_param) {}) >= 0);
 
                 assert_se(sched_setscheduler(0, SCHED_FIFO, &(struct sched_param) { .sched_priority = 1 }) < 0);
-                assert_se(errno == EPERM);
+                assert_se(errno == ENOANO);
                 assert_se(sched_setscheduler(0, SCHED_RR, &(struct sched_param) { .sched_priority = 1 }) < 0);
-                assert_se(errno == EPERM);
+                assert_se(errno == ENOANO);
 
                 _exit(EXIT_SUCCESS);
         }
@@ -600,11 +592,9 @@
         assert_se(wait_for_terminate_and_check("realtimeseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_memory_deny_write_execute_mmap(void) {
+TEST(memory_deny_write_execute_mmap) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -660,13 +650,11 @@
         assert_se(wait_for_terminate_and_check("memoryseccomp-mmap", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_memory_deny_write_execute_shmat(void) {
+TEST(memory_deny_write_execute_shmat) {
         int shmid;
         pid_t pid;
         uint32_t arch;
 
-        log_info("/* %s */", __func__);
-
         SECCOMP_FOREACH_LOCAL_ARCH(arch) {
                 log_debug("arch %s: SCMP_SYS(mmap) = %d", seccomp_arch_to_string(arch), SCMP_SYS(mmap));
                 log_debug("arch %s: SCMP_SYS(mmap2) = %d", seccomp_arch_to_string(arch), SCMP_SYS(mmap2));
@@ -679,7 +667,7 @@
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
         }
-        if (!have_seccomp_privs()) {
+        if (!have_seccomp_privs() || have_effective_cap(CAP_IPC_OWNER) <= 0) {
                 log_notice("Not privileged, skipping %s", __func__);
                 return;
         }
@@ -735,11 +723,9 @@
         assert_se(wait_for_terminate_and_check("memoryseccomp-shmat", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_restrict_archs(void) {
+TEST(restrict_archs) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -775,11 +761,9 @@
         assert_se(wait_for_terminate_and_check("archseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_load_syscall_filter_set_raw(void) {
+TEST(load_syscall_filter_set_raw) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -890,11 +874,9 @@
         assert_se(wait_for_terminate_and_check("syscallrawseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_native_syscalls_filtered(void) {
+TEST(native_syscalls_filtered) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -950,12 +932,10 @@
         assert_se(wait_for_terminate_and_check("nativeseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-static void test_lock_personality(void) {
+TEST(lock_personality) {
         unsigned long current;
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -966,8 +946,15 @@
         }
 
         assert_se(opinionated_personality(&current) >= 0);
+        /* On ppc64le sanitizers disable ASLR (i.e. by setting ADDR_NO_RANDOMIZE),
+         * which opinionated_personality() doesn't return. Let's tweak the current
+         * personality ourselves in such cases.
+         * See: https://github.com/llvm/llvm-project/commit/78f7a6eaa601bfdd6ae70ffd3da2254c21ff77f9
+         */
+        if (FLAGS_SET(safe_personality(PERSONALITY_INVALID), ADDR_NO_RANDOMIZE))
+                current |= ADDR_NO_RANDOMIZE;
 
-        log_info("current personality=%lu", current);
+        log_info("current personality=0x%lX", current);
 
         pid = fork();
         assert_se(pid >= 0);
@@ -977,13 +964,14 @@
 
                 assert_se((unsigned long) safe_personality(current) == current);
 
-                /* Note, we also test that safe_personality() works correctly, by checkig whether errno is properly
+                /* Note, we also test that safe_personality() works correctly, by checking whether errno is properly
                  * set, in addition to the return value */
                 errno = 0;
-                assert_se(safe_personality(PER_LINUX | ADDR_NO_RANDOMIZE) == -EPERM);
+                assert_se(safe_personality(PER_LINUX | MMAP_PAGE_ZERO) == -EPERM);
                 assert_se(errno == EPERM);
 
-                assert_se(safe_personality(PER_LINUX | MMAP_PAGE_ZERO) == -EPERM);
+                if (!FLAGS_SET(current, ADDR_NO_RANDOMIZE))
+                        assert_se(safe_personality(PER_LINUX | ADDR_NO_RANDOMIZE) == -EPERM);
                 assert_se(safe_personality(PER_LINUX | ADDR_COMPAT_LAYOUT) == -EPERM);
                 assert_se(safe_personality(PER_LINUX | READ_IMPLIES_EXEC) == -EPERM);
                 assert_se(safe_personality(PER_LINUX_32BIT) == -EPERM);
@@ -1015,11 +1003,9 @@
 #endif
 }
 
-static void test_restrict_suid_sgid(void) {
+TEST(restrict_suid_sgid) {
         pid_t pid;
 
-        log_info("/* %s */", __func__);
-
         if (!is_seccomp_available()) {
                 log_notice("Seccomp not available, skipping %s", __func__);
                 return;
@@ -1034,7 +1020,7 @@
 
         if (pid == 0) {
                 char path[] = "/tmp/suidsgidXXXXXX", dir[] = "/tmp/suidsgiddirXXXXXX";
-                int fd = -1, k = -1;
+                int fd = -EBADF, k = -EBADF;
                 const char *z;
 
                 fd = mkostemp_safe(path);
@@ -1213,27 +1199,4 @@
         assert_se(wait_for_terminate_and_check("suidsgidseccomp", pid, WAIT_LOG) == EXIT_SUCCESS);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_parse_syscall_and_errno();
-        test_seccomp_arch_to_string();
-        test_architecture_table();
-        test_syscall_filter_set_find();
-        test_filter_sets();
-        test_filter_sets_ordered();
-        test_restrict_namespace();
-        test_protect_sysctl();
-        test_protect_syslog();
-        test_restrict_address_families();
-        test_restrict_realtime();
-        test_memory_deny_write_execute_mmap();
-        test_memory_deny_write_execute_shmat();
-        test_restrict_archs();
-        test_load_syscall_filter_set_raw();
-        test_native_syscalls_filtered();
-        test_lock_personality();
-        test_restrict_suid_sgid();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-selinux.c b/src/test/test-selinux.c
index 3eb7ad3..04b5ba1 100644
--- a/src/test/test-selinux.c
+++ b/src/test/test-selinux.c
@@ -9,7 +9,6 @@
 #include "string-util.h"
 #include "tests.h"
 #include "time-util.h"
-#include "util.h"
 
 static void test_testing(void) {
         bool b;
@@ -57,7 +56,7 @@
 static void test_misc(const char* fname) {
         _cleanup_(mac_selinux_freep) char *label = NULL, *label2 = NULL, *label3 = NULL;
         int r;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         log_info("============ %s ==========", __func__);
 
diff --git a/src/test/test-serialize.c b/src/test/test-serialize.c
index 7bd53a8..bcf2e84 100644
--- a/src/test/test-serialize.c
+++ b/src/test/test-serialize.c
@@ -10,9 +10,9 @@
 #include "tests.h"
 #include "tmpfile-util.h"
 
-char long_string[LONG_LINE_MAX+1];
+static char long_string[LONG_LINE_MAX+1];
 
-static void test_serialize_item(void) {
+TEST(serialize_item) {
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-serialize.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
 
@@ -37,7 +37,7 @@
         assert_se(streq(line3, ""));
 }
 
-static void test_serialize_item_escaped(void) {
+TEST(serialize_item_escaped) {
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-serialize.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
 
@@ -62,7 +62,7 @@
         assert_se(streq(line3, ""));
 }
 
-static void test_serialize_usec(void) {
+TEST(serialize_usec) {
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-serialize.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
 
@@ -89,7 +89,7 @@
         assert_se(x == USEC_INFINITY-1);
 }
 
-static void test_serialize_strv(void) {
+TEST(serialize_strv) {
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-serialize.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
 
@@ -133,11 +133,9 @@
         assert_se(strv_equal(strv, strv2));
 }
 
-static void test_deserialize_environment(void) {
+TEST(deserialize_environment) {
         _cleanup_strv_free_ char **env;
 
-        log_info("/* %s */", __func__);
-
         assert_se(env = strv_new("A=1"));
 
         assert_se(deserialize_environment("B=2", &env) >= 0);
@@ -149,7 +147,7 @@
         assert_se(deserialize_environment("bar\\_baz", &env) < 0);
 }
 
-static void test_serialize_environment(void) {
+TEST(serialize_environment) {
         _cleanup_strv_free_ char **env = NULL, **env2 = NULL;
         _cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-env-util.XXXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
@@ -191,18 +189,10 @@
         assert_se(strv_equal(env, env2));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
+static int intro(void) {
         memset(long_string, 'x', sizeof(long_string)-1);
         char_array_0(long_string);
-
-        test_serialize_item();
-        test_serialize_item_escaped();
-        test_serialize_usec();
-        test_serialize_strv();
-        test_deserialize_environment();
-        test_serialize_environment();
-
         return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-set-disable-mempool.c b/src/test/test-set-disable-mempool.c
index ae36fac..91244b2 100644
--- a/src/test/test-set-disable-mempool.c
+++ b/src/test/test-set-disable-mempool.c
@@ -2,6 +2,7 @@
 
 #include <pthread.h>
 
+#include "mempool.h"
 #include "process-util.h"
 #include "set.h"
 #include "tests.h"
@@ -15,6 +16,9 @@
         assert_se(*s);
 
         assert_se(!is_main_thread());
+        assert_se(mempool_enabled);
+        assert_se(!mempool_enabled());
+
         assert_se(set_size(*s) == NUM);
         *s = set_free(*s);
 
@@ -29,7 +33,10 @@
 
         log_info("Testing with SYSTEMD_MEMPOOL=%s", val);
         assert_se(setenv("SYSTEMD_MEMPOOL", val, true) == 0);
+
         assert_se(is_main_thread());
+        assert_se(mempool_enabled);    /* It is a weak symbol, but we expect it to be available */
+        assert_se(!mempool_enabled());
 
         assert_se(s = set_new(NULL));
         for (i = 0; i < NUM; i++)
@@ -41,13 +48,11 @@
         assert_se(!s);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
+TEST(disable_mempool) {
         test_one("0");
         /* The value $SYSTEMD_MEMPOOL= is cached. So the following
          * test should also succeed. */
         test_one("1");
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-set.c b/src/test/test-set.c
index f89c968..0fc9dff 100644
--- a/src/test/test-set.c
+++ b/src/test/test-set.c
@@ -3,10 +3,11 @@
 #include "random-util.h"
 #include "set.h"
 #include "strv.h"
+#include "tests.h"
 
 const bool mempool_use_allowed = VALGRIND;
 
-static void test_set_steal_first(void) {
+TEST(set_steal_first) {
         _cleanup_set_free_ Set *m = NULL;
         int seen[3] = {};
         char *val;
@@ -33,7 +34,7 @@
         item->seen++;
 }
 
-static void test_set_free_with_destructor(void) {
+TEST(set_free_with_destructor) {
         Set *m;
         struct Item items[4] = {};
         unsigned i;
@@ -51,7 +52,7 @@
 
 DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(item_hash_ops, void, trivial_hash_func, trivial_compare_func, Item, item_seen);
 
-static void test_set_free_with_hash_ops(void) {
+TEST(set_free_with_hash_ops) {
         Set *m;
         struct Item items[4] = {};
         unsigned i;
@@ -67,7 +68,7 @@
         assert_se(items[3].seen == 0);
 }
 
-static void test_set_put(void) {
+TEST(set_put) {
         _cleanup_set_free_ Set *m = NULL;
 
         m = set_new(&string_hash_ops);
@@ -89,7 +90,28 @@
         assert_se(strv_length(t) == 3);
 }
 
-static void test_set_put_strdup(void) {
+TEST(set_put_strndup) {
+        _cleanup_set_free_ Set *m = NULL;
+
+        assert_se(set_put_strndup(&m, "12345", 0) == 1);
+        assert_se(set_put_strndup(&m, "12345", 1) == 1);
+        assert_se(set_put_strndup(&m, "12345", 2) == 1);
+        assert_se(set_put_strndup(&m, "12345", 3) == 1);
+        assert_se(set_put_strndup(&m, "12345", 4) == 1);
+        assert_se(set_put_strndup(&m, "12345", 5) == 1);
+        assert_se(set_put_strndup(&m, "12345", 6) == 0);
+
+        assert_se(set_contains(m, ""));
+        assert_se(set_contains(m, "1"));
+        assert_se(set_contains(m, "12"));
+        assert_se(set_contains(m, "123"));
+        assert_se(set_contains(m, "1234"));
+        assert_se(set_contains(m, "12345"));
+
+        assert_se(set_size(m) == 6);
+}
+
+TEST(set_put_strdup) {
         _cleanup_set_free_ Set *m = NULL;
 
         assert_se(set_put_strdup(&m, "aaa") == 1);
@@ -97,18 +119,27 @@
         assert_se(set_put_strdup(&m, "bbb") == 1);
         assert_se(set_put_strdup(&m, "bbb") == 0);
         assert_se(set_put_strdup(&m, "aaa") == 0);
+
+        assert_se(set_contains(m, "aaa"));
+        assert_se(set_contains(m, "bbb"));
+
         assert_se(set_size(m) == 2);
 }
 
-static void test_set_put_strdupv(void) {
+TEST(set_put_strdupv) {
         _cleanup_set_free_ Set *m = NULL;
 
         assert_se(set_put_strdupv(&m, STRV_MAKE("aaa", "aaa", "bbb", "bbb", "aaa")) == 2);
         assert_se(set_put_strdupv(&m, STRV_MAKE("aaa", "aaa", "bbb", "bbb", "ccc")) == 1);
+
+        assert_se(set_contains(m, "aaa"));
+        assert_se(set_contains(m, "bbb"));
+        assert_se(set_contains(m, "ccc"));
+
         assert_se(set_size(m) == 3);
 }
 
-static void test_set_ensure_allocated(void) {
+TEST(set_ensure_allocated) {
         _cleanup_set_free_ Set *m = NULL;
 
         assert_se(set_ensure_allocated(&m, &string_hash_ops) == 1);
@@ -117,7 +148,37 @@
         assert_se(set_size(m) == 0);
 }
 
-static void test_set_ensure_put(void) {
+TEST(set_copy) {
+        Set *s, *copy;
+        char *key1, *key2, *key3, *key4;
+
+        key1 = strdup("key1");
+        assert_se(key1);
+        key2 = strdup("key2");
+        assert_se(key2);
+        key3 = strdup("key3");
+        assert_se(key3);
+        key4 = strdup("key4");
+        assert_se(key4);
+
+        s = set_new(&string_hash_ops);
+        assert_se(s);
+
+        assert_se(set_put(s, key1) >= 0);
+        assert_se(set_put(s, key2) >= 0);
+        assert_se(set_put(s, key3) >= 0);
+        assert_se(set_put(s, key4) >= 0);
+
+        copy = set_copy(s);
+        assert_se(copy);
+
+        assert_se(set_equal(s, copy));
+
+        set_free(s);
+        set_free_free(copy);
+}
+
+TEST(set_ensure_put) {
         _cleanup_set_free_ Set *m = NULL;
 
         assert_se(set_ensure_put(&m, &string_hash_ops, "a") == 1);
@@ -129,7 +190,7 @@
         assert_se(set_size(m) == 2);
 }
 
-static void test_set_ensure_consume(void) {
+TEST(set_ensure_consume) {
         _cleanup_set_free_ Set *m = NULL;
         char *s, *t;
 
@@ -151,7 +212,7 @@
         assert_se(set_size(m) == 2);
 }
 
-static void test_set_strjoin(void) {
+TEST(set_strjoin) {
         _cleanup_set_free_ Set *m = NULL;
         _cleanup_free_ char *joined = NULL;
 
@@ -228,7 +289,7 @@
         assert_se(STR_IN_SET(joined, "xxxaaaxxxbbbxxx", "xxxbbbxxxaaaxxx"));
 }
 
-static void test_set_equal(void) {
+TEST(set_equal) {
         _cleanup_set_free_ Set *a = NULL, *b = NULL;
         void *p;
         int r;
@@ -299,18 +360,50 @@
         assert_se(set_equal(b, a));
 }
 
-int main(int argc, const char *argv[]) {
-        test_set_steal_first();
-        test_set_free_with_destructor();
-        test_set_free_with_hash_ops();
-        test_set_put();
-        test_set_put_strdup();
-        test_set_put_strdupv();
-        test_set_ensure_allocated();
-        test_set_ensure_put();
-        test_set_ensure_consume();
-        test_set_strjoin();
-        test_set_equal();
+TEST(set_fnmatch) {
+        _cleanup_set_free_ Set *match = NULL, *nomatch = NULL;
 
-        return 0;
+        assert_se(set_put_strdup(&match, "aaa") >= 0);
+        assert_se(set_put_strdup(&match, "bbb*") >= 0);
+        assert_se(set_put_strdup(&match, "*ccc") >= 0);
+
+        assert_se(set_put_strdup(&nomatch, "a*") >= 0);
+        assert_se(set_put_strdup(&nomatch, "bbb") >= 0);
+        assert_se(set_put_strdup(&nomatch, "ccc*") >= 0);
+
+        assert_se(set_fnmatch(NULL, NULL, ""));
+        assert_se(set_fnmatch(NULL, NULL, "hoge"));
+
+        assert_se(set_fnmatch(match, NULL, "aaa"));
+        assert_se(set_fnmatch(match, NULL, "bbb"));
+        assert_se(set_fnmatch(match, NULL, "bbbXXX"));
+        assert_se(set_fnmatch(match, NULL, "ccc"));
+        assert_se(set_fnmatch(match, NULL, "XXXccc"));
+        assert_se(!set_fnmatch(match, NULL, ""));
+        assert_se(!set_fnmatch(match, NULL, "aaaa"));
+        assert_se(!set_fnmatch(match, NULL, "XXbbb"));
+        assert_se(!set_fnmatch(match, NULL, "cccXX"));
+
+        assert_se(set_fnmatch(NULL, nomatch, ""));
+        assert_se(set_fnmatch(NULL, nomatch, "Xa"));
+        assert_se(set_fnmatch(NULL, nomatch, "bbbb"));
+        assert_se(set_fnmatch(NULL, nomatch, "XXXccc"));
+        assert_se(!set_fnmatch(NULL, nomatch, "a"));
+        assert_se(!set_fnmatch(NULL, nomatch, "aXXXX"));
+        assert_se(!set_fnmatch(NULL, nomatch, "bbb"));
+        assert_se(!set_fnmatch(NULL, nomatch, "ccc"));
+        assert_se(!set_fnmatch(NULL, nomatch, "cccXXX"));
+
+        assert_se(set_fnmatch(match, nomatch, "bbbbb"));
+        assert_se(set_fnmatch(match, nomatch, "XXccc"));
+        assert_se(!set_fnmatch(match, nomatch, ""));
+        assert_se(!set_fnmatch(match, nomatch, "a"));
+        assert_se(!set_fnmatch(match, nomatch, "aaa"));
+        assert_se(!set_fnmatch(match, nomatch, "b"));
+        assert_se(!set_fnmatch(match, nomatch, "bbb"));
+        assert_se(!set_fnmatch(match, nomatch, "ccc"));
+        assert_se(!set_fnmatch(match, nomatch, "ccccc"));
+        assert_se(!set_fnmatch(match, nomatch, "cccXX"));
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-sha256.c b/src/test/test-sha256.c
new file mode 100644
index 0000000..f168e4c
--- /dev/null
+++ b/src/test/test-sha256.c
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "hexdecoct.h"
+#include "sha256.h"
+#include "string-util.h"
+#include "tests.h"
+
+static void sha256_process_string(const char *key, struct sha256_ctx *ctx) {
+        sha256_process_bytes(key, strlen(key), ctx);
+}
+
+static void test_sha256_one(const char *key, const char *expect) {
+        uint8_t result[SHA256_DIGEST_SIZE + 3];
+        _cleanup_free_ char *str = NULL;
+        struct sha256_ctx ctx;
+
+        log_debug("\"%s\" → %s", key, expect);
+
+        assert_se(str = new(char, strlen(key) + 4));
+
+        /* This tests unaligned buffers. */
+
+        for (size_t i = 0; i < 4; i++) {
+                strcpy(str + i, key);
+
+                for (size_t j = 0; j < 4; j++) {
+                        _cleanup_free_ char *hex_result = NULL;
+
+                        sha256_init_ctx(&ctx);
+                        sha256_process_string(str + i, &ctx);
+                        sha256_finish_ctx(&ctx, result + j);
+
+                        hex_result = hexmem(result + j, SHA256_DIGEST_SIZE);
+                        assert_se(streq_ptr(hex_result, expect));
+                }
+        }
+}
+
+TEST(sha256) {
+        /* Results compared with output of 'echo -n "<input>" | sha256sum -' */
+
+        test_sha256_one("abcdefghijklmnopqrstuvwxyz",
+                        "71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73");
+        test_sha256_one("ほげほげあっちょんぶりけ",
+                        "ce7225683653be3b74861c5a4323b6baf3c3ceb361413ca99e3a5b52c04411bd");
+        test_sha256_one("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789",
+                        "9cfe7faff7054298ca87557e15a10262de8d3eee77827417fbdfea1c41b9ec23");
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-sigbus.c b/src/test/test-sigbus.c
index 5262947..299463c 100644
--- a/src/test/test-sigbus.c
+++ b/src/test/test-sigbus.c
@@ -15,7 +15,7 @@
 #include "tests.h"
 
 int main(int argc, char *argv[]) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         char template[] = "/tmp/sigbus-test-XXXXXX";
         void *addr = NULL;
         uint8_t *p;
diff --git a/src/test/test-signal-util.c b/src/test/test-signal-util.c
index 76ab9b8..335066a 100644
--- a/src/test/test-signal-util.c
+++ b/src/test/test-signal-util.c
@@ -7,16 +7,17 @@
 #include "signal-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
+#include "tests.h"
 #include "process-util.h"
 
 #define info(sig) log_info(#sig " = " STRINGIFY(sig) " = %d", sig)
 
-static void test_rt_signals(void) {
+TEST(rt_signals) {
         info(SIGRTMIN);
         info(SIGRTMAX);
 
         /* We use signals SIGRTMIN+0 to SIGRTMIN+24 unconditionally */
-        assert(SIGRTMAX - SIGRTMIN >= 24);
+        assert_se(SIGRTMAX - SIGRTMIN >= 24);
 }
 
 static void test_signal_to_string_one(int val) {
@@ -48,7 +49,7 @@
         assert_se(signal_from_string(p) == -EINVAL);
 }
 
-static void test_signal_from_string(void) {
+TEST(signal_from_string) {
         char buf[STRLEN("RTMIN+") + DECIMAL_STR_MAX(int) + 1];
 
         test_signal_to_string_one(SIGHUP);
@@ -104,7 +105,7 @@
         test_signal_from_string_number("-2", -ERANGE);
 }
 
-static void test_block_signals(void) {
+TEST(block_signals) {
         assert_se(signal_is_blocked(SIGUSR1) == 0);
         assert_se(signal_is_blocked(SIGALRM) == 0);
         assert_se(signal_is_blocked(SIGVTALRM) == 0);
@@ -122,7 +123,7 @@
         assert_se(signal_is_blocked(SIGVTALRM) == 0);
 }
 
-static void test_ignore_signals(void) {
+TEST(ignore_signals) {
         assert_se(ignore_signals(SIGINT) >= 0);
         assert_se(kill(getpid_cached(), SIGINT) >= 0);
         assert_se(ignore_signals(SIGUSR1, SIGUSR2, SIGTERM, SIGPIPE) >= 0);
@@ -133,11 +134,42 @@
         assert_se(default_signals(SIGINT, SIGUSR1, SIGUSR2, SIGTERM, SIGPIPE) >= 0);
 }
 
-int main(int argc, char *argv[]) {
-        test_rt_signals();
-        test_signal_from_string();
-        test_block_signals();
-        test_ignore_signals();
+TEST(pop_pending_signal) {
 
-        return 0;
+        assert_se(signal_is_blocked(SIGUSR1) == 0);
+        assert_se(signal_is_blocked(SIGUSR2) == 0);
+        assert_se(pop_pending_signal(SIGUSR1) == 0);
+        assert_se(pop_pending_signal(SIGUSR2) == 0);
+
+        {
+                BLOCK_SIGNALS(SIGUSR1, SIGUSR2);
+
+                assert_se(signal_is_blocked(SIGUSR1) > 0);
+                assert_se(signal_is_blocked(SIGUSR2) > 0);
+
+                assert_se(pop_pending_signal(SIGUSR1) == 0);
+                assert_se(pop_pending_signal(SIGUSR2) == 0);
+
+                assert_se(raise(SIGUSR1) >= 0);
+
+                assert_se(pop_pending_signal(SIGUSR2) == 0);
+                assert_se(pop_pending_signal(SIGUSR1) == SIGUSR1);
+                assert_se(pop_pending_signal(SIGUSR1) == 0);
+
+                assert_se(raise(SIGUSR1) >= 0);
+                assert_se(raise(SIGUSR2) >= 0);
+
+                assert_cc(SIGUSR1 < SIGUSR2);
+
+                assert_se(pop_pending_signal(SIGUSR1, SIGUSR2) == SIGUSR1);
+                assert_se(pop_pending_signal(SIGUSR1, SIGUSR2) == SIGUSR2);
+                assert_se(pop_pending_signal(SIGUSR1, SIGUSR2) == 0);
+        }
+
+        assert_se(signal_is_blocked(SIGUSR1) == 0);
+        assert_se(signal_is_blocked(SIGUSR2) == 0);
+        assert_se(pop_pending_signal(SIGUSR1) == 0);
+        assert_se(pop_pending_signal(SIGUSR2) == 0);
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-siphash24.c b/src/test/test-siphash24.c
index 4a1672f..de91eb2 100644
--- a/src/test/test-siphash24.c
+++ b/src/test/test-siphash24.c
@@ -2,10 +2,11 @@
 
 #include "memory-util.h"
 #include "siphash24.h"
+#include "tests.h"
 
 #define ITERATIONS 10000000ULL
 
-static void do_test(const uint8_t *in, size_t len, const uint8_t *key) {
+static void test_alignment_one(const uint8_t *in, size_t len, const uint8_t *key) {
         struct siphash state = {};
         uint64_t out;
         unsigned i, j;
@@ -45,7 +46,25 @@
         }
 }
 
-static void test_short_hashes(void) {
+TEST(alignment) {
+        const uint8_t in[15]  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                                  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e };
+        const uint8_t key[16] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                                  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
+        uint8_t in_buf[20];
+
+        /* Test with same input but different alignments. */
+        memcpy(in_buf, in, sizeof(in));
+        test_alignment_one(in_buf, sizeof(in), key);
+        memcpy(in_buf + 1, in, sizeof(in));
+        test_alignment_one(in_buf + 1, sizeof(in), key);
+        memcpy(in_buf + 2, in, sizeof(in));
+        test_alignment_one(in_buf + 2, sizeof(in), key);
+        memcpy(in_buf + 4, in, sizeof(in));
+        test_alignment_one(in_buf + 4, sizeof(in), key);
+}
+
+TEST(short_hashes) {
         const uint8_t one[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
                                 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };
         const uint8_t  key[16] = { 0x22, 0x24, 0x41, 0x22, 0x55, 0x77, 0x88, 0x07,
@@ -86,22 +105,4 @@
 }
 
 /* see https://131002.net/siphash/siphash.pdf, Appendix A */
-int main(int argc, char *argv[]) {
-        const uint8_t in[15]  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                                  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e };
-        const uint8_t key[16] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                                  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
-        uint8_t in_buf[20];
-
-        /* Test with same input but different alignments. */
-        memcpy(in_buf, in, sizeof(in));
-        do_test(in_buf, sizeof(in), key);
-        memcpy(in_buf + 1, in, sizeof(in));
-        do_test(in_buf + 1, sizeof(in), key);
-        memcpy(in_buf + 2, in, sizeof(in));
-        do_test(in_buf + 2, sizeof(in), key);
-        memcpy(in_buf + 4, in, sizeof(in));
-        do_test(in_buf + 4, sizeof(in), key);
-
-        test_short_hashes();
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c
index e36bee4..55bd81e 100644
--- a/src/test/test-sizeof.c
+++ b/src/test/test-sizeof.c
@@ -53,10 +53,12 @@
         info(unsigned char);
         info(short unsigned);
         info(unsigned);
-        info(long unsigned);
-        info(long long unsigned);
+        info(unsigned long);
+        info(unsigned long long);
         info(__syscall_ulong_t);
         info(__syscall_slong_t);
+        info(intmax_t);
+        info(uintmax_t);
 
         info(float);
         info(double);
@@ -91,5 +93,13 @@
 
         printf("timeval: %zu\n", sizeof(struct timeval));
         printf("timespec: %zu\n", sizeof(struct timespec));
+
+        void *x = malloc(100);
+
+        printf("local variable: %p\n", &function_pointer);
+        printf("glibc function: %p\n", memcpy);
+        printf("heap allocation: %p\n", x);
+        free(x);
+
         return 0;
 }
diff --git a/src/test/test-sleep.c b/src/test/test-sleep.c
index 7b982c2..5589076 100644
--- a/src/test/test-sleep.c
+++ b/src/test/test-sleep.c
@@ -15,11 +15,9 @@
 #include "sleep-config.h"
 #include "strv.h"
 #include "tests.h"
-#include "util.h"
 
-static void test_parse_sleep_config(void) {
+TEST(parse_sleep_config) {
         _cleanup_(free_sleep_configp) SleepConfig *sleep_config = NULL;
-        log_info("/* %s */", __func__);
 
         assert_se(parse_sleep_config(&sleep_config) == 0);
 
@@ -31,10 +29,10 @@
         his = strv_join(sleep_config->states[SLEEP_HIBERNATE], ", ");
         hym = strv_join(sleep_config->modes[SLEEP_HYBRID_SLEEP], ", ");
         hys = strv_join(sleep_config->states[SLEEP_HYBRID_SLEEP], ", ");
-        log_debug("  allow_suspend: %u", sleep_config->allow[SLEEP_SUSPEND]);
-        log_debug("  allow_hibernate: %u", sleep_config->allow[SLEEP_HIBERNATE]);
-        log_debug("  allow_s2h: %u", sleep_config->allow[SLEEP_SUSPEND_THEN_HIBERNATE]);
-        log_debug("  allow_hybrid_sleep: %u", sleep_config->allow[SLEEP_HYBRID_SLEEP]);
+        log_debug("  allow_suspend: %s", yes_no(sleep_config->allow[SLEEP_SUSPEND]));
+        log_debug("  allow_hibernate: %s", yes_no(sleep_config->allow[SLEEP_HIBERNATE]));
+        log_debug("  allow_s2h: %s", yes_no(sleep_config->allow[SLEEP_SUSPEND_THEN_HIBERNATE]));
+        log_debug("  allow_hybrid_sleep: %s", yes_no(sleep_config->allow[SLEEP_HYBRID_SLEEP]));
         log_debug("  suspend modes: %s", sum);
         log_debug("         states: %s", sus);
         log_debug("  hibernate modes: %s", him);
@@ -43,9 +41,9 @@
         log_debug("        states: %s", hys);
 }
 
-static int test_fiemap(const char *path) {
+static int test_fiemap_one(const char *path) {
         _cleanup_free_ struct fiemap *fiemap = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         log_info("/* %s */", __func__);
@@ -71,7 +69,20 @@
         return 0;
 }
 
-static void test_sleep(void) {
+TEST_RET(fiemap) {
+        int r = 0;
+
+        assert_se(test_fiemap_one(saved_argv[0]) == 0);
+        for (int i = 1; i < saved_argc; i++) {
+                int k = test_fiemap_one(saved_argv[i]);
+                if (r == 0)
+                        r = k;
+        }
+
+        return r;
+}
+
+TEST(sleep) {
         _cleanup_strv_free_ char
                 **standby = strv_new("standby"),
                 **mem = strv_new("mem"),
@@ -83,8 +94,6 @@
                 **freeze = strv_new("freeze");
         int r;
 
-        log_info("/* %s */", __func__);
-
         printf("Secure boot: %sd\n", enable_disable(is_efi_secure_boot()));
 
         log_info("/= individual sleep modes =/");
@@ -99,34 +108,47 @@
 
         log_info("/= high-level sleep verbs =/");
         r = can_sleep(SLEEP_SUSPEND);
-        log_info("Suspend configured and possible: %s", r >= 0 ? yes_no(r) : strerror_safe(r));
+        log_info("Suspend configured and possible: %s", r >= 0 ? yes_no(r) : STRERROR(r));
         r = can_sleep(SLEEP_HIBERNATE);
-        log_info("Hibernation configured and possible: %s", r >= 0 ? yes_no(r) : strerror_safe(r));
+        log_info("Hibernation configured and possible: %s", r >= 0 ? yes_no(r) : STRERROR(r));
         r = can_sleep(SLEEP_HYBRID_SLEEP);
-        log_info("Hybrid-sleep configured and possible: %s", r >= 0 ? yes_no(r) : strerror_safe(r));
+        log_info("Hybrid-sleep configured and possible: %s", r >= 0 ? yes_no(r) : STRERROR(r));
         r = can_sleep(SLEEP_SUSPEND_THEN_HIBERNATE);
-        log_info("Suspend-then-Hibernate configured and possible: %s", r >= 0 ? yes_no(r) : strerror_safe(r));
+        log_info("Suspend-then-Hibernate configured and possible: %s", r >= 0 ? yes_no(r) : STRERROR(r));
 }
 
-int main(int argc, char* argv[]) {
-        int i, r = 0, k;
+TEST(fetch_batteries_capacity_by_name) {
+        _cleanup_hashmap_free_ Hashmap *capacity = NULL;
+        int r;
 
-        test_setup_logging(LOG_DEBUG);
+        assert_se(fetch_batteries_capacity_by_name(&capacity) >= 0);
+        log_debug("fetch_batteries_capacity_by_name: %u entries", hashmap_size(capacity));
 
+        const char *name;
+        void *cap;
+        HASHMAP_FOREACH_KEY(cap, name, capacity) {
+                assert(cap);  /* Anything non-null is fine. */
+                log_info("Battery %s: capacity = %i", name, get_capacity_by_name(capacity, name));
+        }
+
+        for (int i = 0; i < 2; i++) {
+                usec_t interval;
+
+                if (i > 0)
+                        sleep(1);
+
+                r = get_total_suspend_interval(capacity, &interval);
+                assert_se(r >= 0 || r == -ENOENT);
+                log_info("%d: get_total_suspend_interval: %s", i,
+                         r < 0 ? STRERROR(r) : FORMAT_TIMESPAN(interval, USEC_PER_SEC));
+        }
+}
+
+static int intro(void) {
         if (getuid() != 0)
                 log_warning("This program is unlikely to work for unprivileged users");
 
-        test_parse_sleep_config();
-        test_sleep();
-
-        if (argc <= 1)
-                assert_se(test_fiemap(argv[0]) == 0);
-        else
-                for (i = 1; i < argc; i++) {
-                        k = test_fiemap(argv[i]);
-                        if (r == 0)
-                                r = k;
-                }
-
-        return r;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/test/test-socket-bind.c b/src/test/test-socket-bind.c
index 989172e..d7d9110 100644
--- a/src/test/test-socket-bind.c
+++ b/src/test/test-socket-bind.c
@@ -13,7 +13,7 @@
 #include "virt.h"
 
 static int find_netcat_executable(char **ret_path) {
-        char **candidates = STRV_MAKE("ncat", "nc", "netcat"), **c;
+        char **candidates = STRV_MAKE("ncat", "nc", "netcat");
         int r = 0;
 
         STRV_FOREACH(c, candidates) {
@@ -34,9 +34,7 @@
                 char **deny_rules) {
         _cleanup_free_ char *exec_start = NULL;
         _cleanup_(unit_freep) Unit *u = NULL;
-        CGroupSocketBindItem *bi;
         CGroupContext *cc = NULL;
-        char **rule;
         int cld_code, r;
 
         assert_se(u = unit_new(m, sizeof(Service)));
@@ -80,7 +78,7 @@
         SERVICE(u)->type = SERVICE_ONESHOT;
         u->load_state = UNIT_LOADED;
 
-        r = unit_start(u);
+        r = unit_start(u, NULL);
         if (r < 0)
                 return log_error_errno(r, "Unit start failed %m");
 
@@ -110,24 +108,21 @@
         test_setup_logging(LOG_DEBUG);
 
         if (detect_container() > 0)
-                return log_tests_skipped("test-bpf fails inside LXC and Docker containers: https://github.com/systemd/systemd/issues/9666");
-
-        if (getuid() != 0)
-                return log_tests_skipped("not running as root");
+                return log_tests_skipped("test-socket-bind fails inside LXC and Docker containers: https://github.com/systemd/systemd/issues/9666");
 
         assert_se(getrlimit(RLIMIT_MEMLOCK, &rl) >= 0);
         rl.rlim_cur = rl.rlim_max = MAX(rl.rlim_max, CAN_MEMLOCK_SIZE);
         (void) setrlimit_closest(RLIMIT_MEMLOCK, &rl);
 
         if (!can_memlock())
-                return log_tests_skipped("Can't use mlock(), skipping.");
+                return log_tests_skipped("Can't use mlock()");
 
         r = bpf_socket_bind_supported();
         if (r <= 0)
-                return log_tests_skipped("socket-bind is not supported, skipping.");
+                return log_tests_skipped("socket-bind is not supported");
 
         if (find_netcat_executable(&netcat_path) != 0)
-                return log_tests_skipped("Can not find netcat executable, skipping.");
+                return log_tests_skipped("Cannot find netcat executable");
 
         r = enter_cgroup_subroot(NULL);
         if (r == -ENOMEDIUM)
@@ -137,8 +132,8 @@
         assert_se(set_unit_path(unit_dir) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
-        assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         assert_se(test_socket_bind(m, "socket_bind_test.service", netcat_path, "2000", STRV_MAKE("2000"), STRV_MAKE("any")) >= 0);
         assert_se(test_socket_bind(m, "socket_bind_test.service", netcat_path, "2000", STRV_MAKE("ipv6:2001-2002"), STRV_MAKE("any")) >= 0);
diff --git a/src/test/test-socket-netlink.c b/src/test/test-socket-netlink.c
index da484a4..6dbd50f 100644
--- a/src/test/test-socket-netlink.c
+++ b/src/test/test-socket-netlink.c
@@ -16,7 +16,7 @@
                 r = socket_address_print(&a, &out);
                 if (r < 0)
                         log_error_errno(r, "Printing failed for \"%s\": %m", in);
-                assert(r >= 0);
+                assert_se(r >= 0);
                 assert_se(a.type == 0);
         }
 
@@ -33,9 +33,7 @@
         }
 }
 
-static void test_socket_address_parse(void) {
-        log_info("/* %s */", __func__);
-
+TEST(socket_address_parse) {
         test_socket_address_parse_one("junk", -EINVAL, 0, NULL);
         test_socket_address_parse_one("192.168.1.1", -EINVAL, 0, NULL);
         test_socket_address_parse_one(".168.1.1", -EINVAL, 0, NULL);
@@ -100,11 +98,9 @@
         test_socket_address_parse_one("vsock:2", -EINVAL, 0, NULL);
 }
 
-static void test_socket_address_parse_netlink(void) {
+TEST(socket_address_parse_netlink) {
         SocketAddress a;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socket_address_parse_netlink(&a, "junk") < 0);
         assert_se(socket_address_parse_netlink(&a, "") < 0);
 
@@ -142,11 +138,9 @@
         assert_se(socket_address_parse_netlink(&a, "\xff") < 0);
 }
 
-static void test_socket_address_equal(void) {
+TEST(socket_address_equal) {
         SocketAddress a, b;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
         assert_se(socket_address_parse(&b, "192.168.1.1:888") >= 0);
         assert_se(!socket_address_equal(&a, &b));
@@ -192,11 +186,9 @@
         assert_se(!socket_address_equal(&a, &b));
 }
 
-static void test_socket_address_get_path(void) {
+TEST(socket_address_get_path) {
         SocketAddress a;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
         assert_se(!socket_address_get_path(&a));
 
@@ -213,11 +205,9 @@
         assert_se(!socket_address_get_path(&a));
 }
 
-static void test_socket_address_is(void) {
+TEST(socket_address_is) {
         SocketAddress a;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
         assert_se( socket_address_is(&a, "192.168.1.1:8888", 0 /* unspecified yet */));
         assert_se(!socket_address_is(&a, "route", 0));
@@ -228,11 +218,9 @@
         assert_se( socket_address_is(&a, "192.168.1.1:8888", SOCK_STREAM));
 }
 
-static void test_socket_address_is_netlink(void) {
+TEST(socket_address_is_netlink) {
         SocketAddress a;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socket_address_parse_netlink(&a, "route 10") >= 0);
         assert_se( socket_address_is_netlink(&a, "route 10"));
         assert_se(!socket_address_is_netlink(&a, "192.168.1.1:8888"));
@@ -255,9 +243,7 @@
         assert_se(ifindex2 == ifindex || ifindex2 == 0);
 }
 
-static void test_in_addr_ifindex_to_string(void) {
-        log_info("/* %s */", __func__);
-
+TEST(in_addr_ifindex_to_string) {
         test_in_addr_ifindex_to_string_one(AF_INET, "192.168.0.1", 7, "192.168.0.1");
         test_in_addr_ifindex_to_string_one(AF_INET, "10.11.12.13", 9, "10.11.12.13");
         test_in_addr_ifindex_to_string_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 10, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
@@ -269,11 +255,10 @@
         test_in_addr_ifindex_to_string_one(AF_INET6, "fe80::16", LOOPBACK_IFINDEX, "fe80::16%1");
 }
 
-static void test_in_addr_ifindex_from_string_auto(void) {
+TEST(in_addr_ifindex_from_string_auto) {
         int family, ifindex;
         union in_addr_union ua;
 
-        log_info("/* %s */", __func__);
         /* Most in_addr_ifindex_from_string_auto() invocations have already been tested above, but let's test some more */
 
         assert_se(in_addr_ifindex_from_string_auto("fe80::17", &family, &ua, &ifindex) >= 0);
@@ -300,9 +285,7 @@
         assert_se(streq_ptr(server_name, expected));
 }
 
-static void test_in_addr_ifindex_name_from_string_auto(void) {
-        log_info("/* %s */", __func__);
-
+TEST(in_addr_ifindex_name_from_string_auto) {
         test_in_addr_ifindex_name_from_string_auto_one("192.168.0.1", NULL);
         test_in_addr_ifindex_name_from_string_auto_one("192.168.0.1#test.com", "test.com");
         test_in_addr_ifindex_name_from_string_auto_one("fe80::18%19", NULL);
@@ -366,9 +349,7 @@
         }
 }
 
-static void test_in_addr_port_ifindex_name_from_string_auto(void) {
-        log_info("/* %s */", __func__);
-
+TEST(in_addr_port_ifindex_name_from_string_auto) {
         test_in_addr_port_ifindex_name_from_string_auto_one("192.168.0.1", AF_INET, 0, 0, NULL, NULL);
         test_in_addr_port_ifindex_name_from_string_auto_one("192.168.0.1#test.com", AF_INET, 0, 0, "test.com", NULL);
         test_in_addr_port_ifindex_name_from_string_auto_one("192.168.0.1:53", AF_INET, 53, 0, NULL, NULL);
@@ -388,20 +369,4 @@
         test_in_addr_port_ifindex_name_from_string_auto_one("[fe80::18]:53%lo#hoge.com", AF_INET6, 53, 1, "hoge.com", "[fe80::18]:53%1#hoge.com");
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_socket_address_parse();
-        test_socket_address_parse_netlink();
-        test_socket_address_equal();
-        test_socket_address_get_path();
-        test_socket_address_is();
-        test_socket_address_is_netlink();
-
-        test_in_addr_ifindex_to_string();
-        test_in_addr_ifindex_from_string_auto();
-        test_in_addr_ifindex_name_from_string_auto();
-        test_in_addr_port_ifindex_name_from_string_auto();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-socket-util.c b/src/test/test-socket-util.c
index 584253c..dbafe8b 100644
--- a/src/test/test-socket-util.c
+++ b/src/test/test-socket-util.c
@@ -2,6 +2,7 @@
 
 #include <fcntl.h>
 #include <grp.h>
+#include <net/if_arp.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
@@ -11,11 +12,15 @@
 #include "escape.h"
 #include "exit-status.h"
 #include "fd-util.h"
+#include "fs-util.h"
 #include "in-addr-util.h"
 #include "io-util.h"
 #include "log.h"
 #include "macro.h"
+#include "path-util.h"
 #include "process-util.h"
+#include "random-util.h"
+#include "rm-rf.h"
 #include "socket-util.h"
 #include "string-util.h"
 #include "tests.h"
@@ -23,40 +28,38 @@
 
 assert_cc(SUN_PATH_LEN == 108);
 
-static void test_ifname_valid(void) {
-        log_info("/* %s */", __func__);
+TEST(ifname_valid) {
+        assert_se( ifname_valid("foo"));
+        assert_se( ifname_valid("eth0"));
 
-        assert( ifname_valid("foo"));
-        assert( ifname_valid("eth0"));
+        assert_se(!ifname_valid("0"));
+        assert_se(!ifname_valid("99"));
+        assert_se( ifname_valid("a99"));
+        assert_se( ifname_valid("99a"));
 
-        assert(!ifname_valid("0"));
-        assert(!ifname_valid("99"));
-        assert( ifname_valid("a99"));
-        assert( ifname_valid("99a"));
+        assert_se(!ifname_valid(NULL));
+        assert_se(!ifname_valid(""));
+        assert_se(!ifname_valid(" "));
+        assert_se(!ifname_valid(" foo"));
+        assert_se(!ifname_valid("bar\n"));
+        assert_se(!ifname_valid("."));
+        assert_se(!ifname_valid(".."));
+        assert_se(ifname_valid("foo.bar"));
+        assert_se(!ifname_valid("x:y"));
 
-        assert(!ifname_valid(NULL));
-        assert(!ifname_valid(""));
-        assert(!ifname_valid(" "));
-        assert(!ifname_valid(" foo"));
-        assert(!ifname_valid("bar\n"));
-        assert(!ifname_valid("."));
-        assert(!ifname_valid(".."));
-        assert(ifname_valid("foo.bar"));
-        assert(!ifname_valid("x:y"));
-
-        assert( ifname_valid_full("xxxxxxxxxxxxxxx", 0));
-        assert(!ifname_valid_full("xxxxxxxxxxxxxxxx", 0));
-        assert( ifname_valid_full("xxxxxxxxxxxxxxxx", IFNAME_VALID_ALTERNATIVE));
-        assert( ifname_valid_full("xxxxxxxxxxxxxxxx", IFNAME_VALID_ALTERNATIVE));
-        assert(!ifname_valid_full("999", IFNAME_VALID_ALTERNATIVE));
-        assert( ifname_valid_full("999", IFNAME_VALID_ALTERNATIVE | IFNAME_VALID_NUMERIC));
-        assert(!ifname_valid_full("0", IFNAME_VALID_ALTERNATIVE | IFNAME_VALID_NUMERIC));
+        assert_se( ifname_valid_full("xxxxxxxxxxxxxxx", 0));
+        assert_se(!ifname_valid_full("xxxxxxxxxxxxxxxx", 0));
+        assert_se( ifname_valid_full("xxxxxxxxxxxxxxxx", IFNAME_VALID_ALTERNATIVE));
+        assert_se( ifname_valid_full("xxxxxxxxxxxxxxxx", IFNAME_VALID_ALTERNATIVE));
+        assert_se(!ifname_valid_full("999", IFNAME_VALID_ALTERNATIVE));
+        assert_se( ifname_valid_full("999", IFNAME_VALID_ALTERNATIVE | IFNAME_VALID_NUMERIC));
+        assert_se(!ifname_valid_full("0", IFNAME_VALID_ALTERNATIVE | IFNAME_VALID_NUMERIC));
 }
 
 static void test_socket_print_unix_one(const char *in, size_t len_in, const char *expected) {
         _cleanup_free_ char *out = NULL, *c = NULL;
 
-        assert(len_in <= SUN_PATH_LEN);
+        assert_se(len_in <= SUN_PATH_LEN);
         SocketAddress a = { .sockaddr = { .un = { .sun_family = AF_UNIX } },
                             .size = offsetof(struct sockaddr_un, sun_path) + len_in,
                             .type = SOCK_STREAM,
@@ -69,9 +72,7 @@
         assert_se(streq(out, expected));
 }
 
-static void test_socket_print_unix(void) {
-        log_info("/* %s */", __func__);
-
+TEST(socket_print_unix) {
         /* Some additional tests for abstract addresses which we don't parse */
 
         test_socket_print_unix_one("\0\0\0\0", 4, "@\\000\\000\\000");
@@ -86,7 +87,7 @@
         test_socket_print_unix_one("\0\a\b\n\255", 6, "@\\a\\b\\n\\255\\000");
 }
 
-static void test_sockaddr_equal(void) {
+TEST(sockaddr_equal) {
         union sockaddr_union a = {
                 .in.sin_family = AF_INET,
                 .in.sin_port = 0,
@@ -113,8 +114,6 @@
                 .vm.svm_cid = VMADDR_CID_ANY,
         };
 
-        log_info("/* %s */", __func__);
-
         assert_se(sockaddr_equal(&a, &a));
         assert_se(sockaddr_equal(&a, &b));
         assert_se(sockaddr_equal(&d, &d));
@@ -124,9 +123,7 @@
         assert_se(!sockaddr_equal(&a, &e));
 }
 
-static void test_sockaddr_un_len(void) {
-        log_info("/* %s */", __func__);
-
+TEST(sockaddr_un_len) {
         static const struct sockaddr_un fs = {
                 .sun_family = AF_UNIX,
                 .sun_path = "/foo/bar/waldo",
@@ -141,12 +138,10 @@
         assert_se(SOCKADDR_UN_LEN(abstract) == offsetof(struct sockaddr_un, sun_path) + 1 + strlen(abstract.sun_path + 1));
 }
 
-static void test_in_addr_is_multicast(void) {
+TEST(in_addr_is_multicast) {
         union in_addr_union a, b;
         int f;
 
-        log_info("/* %s */", __func__);
-
         assert_se(in_addr_from_string_auto("192.168.3.11", &f, &a) >= 0);
         assert_se(in_addr_is_multicast(f, &a) == 0);
 
@@ -160,11 +155,9 @@
         assert_se(in_addr_is_multicast(f, &b) == 0);
 }
 
-static void test_getpeercred_getpeergroups(void) {
+TEST(getpeercred_getpeergroups) {
         int r;
 
-        log_info("/* %s */", __func__);
-
         r = safe_fork("(getpeercred)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
         assert_se(r >= 0);
 
@@ -194,7 +187,7 @@
                         test_gid = getgid();
 
                         ngroups_max = sysconf(_SC_NGROUPS_MAX);
-                        assert(ngroups_max > 0);
+                        assert_se(ngroups_max > 0);
 
                         test_gids = newa(gid_t, ngroups_max);
 
@@ -228,13 +221,11 @@
         }
 }
 
-static void test_passfd_read(void) {
+TEST(passfd_read) {
         static const char file_contents[] = "test contents for passfd";
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+        _cleanup_close_pair_ int pair[2];
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socketpair(AF_UNIX, SOCK_DGRAM, 0, pair) >= 0);
 
         r = safe_fork("(passfd_read)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
@@ -242,17 +233,12 @@
 
         if (r == 0) {
                 /* Child */
-                char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX";
-                _cleanup_close_ int tmpfd = -1;
-
                 pair[0] = safe_close(pair[0]);
 
-                tmpfd = mkostemp_safe(tmpfile);
-                assert_se(tmpfd >= 0);
-                assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents));
-                tmpfd = safe_close(tmpfd);
+                char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX";
+                assert_se(write_tmpfile(tmpfile, file_contents) == 0);
 
-                tmpfd = open(tmpfile, O_RDONLY);
+                _cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY);
                 assert_se(tmpfd >= 0);
                 assert_se(unlink(tmpfile) == 0);
 
@@ -263,7 +249,7 @@
         /* Parent */
         char buf[64];
         struct iovec iov = IOVEC_INIT(buf, sizeof(buf)-1);
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd;
 
         pair[1] = safe_close(pair[1]);
 
@@ -276,14 +262,12 @@
         assert_se(streq(buf, file_contents));
 }
 
-static void test_passfd_contents_read(void) {
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+TEST(passfd_contents_read) {
+        _cleanup_close_pair_ int pair[2];
         static const char file_contents[] = "test contents in the file";
         static const char wire_contents[] = "test contents on the wire";
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socketpair(AF_UNIX, SOCK_DGRAM, 0, pair) >= 0);
 
         r = safe_fork("(passfd_contents_read)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
@@ -293,16 +277,12 @@
                 /* Child */
                 struct iovec iov = IOVEC_INIT_STRING(wire_contents);
                 char tmpfile[] = "/tmp/test-socket-util-passfd-contents-read-XXXXXX";
-                _cleanup_close_ int tmpfd = -1;
 
                 pair[0] = safe_close(pair[0]);
 
-                tmpfd = mkostemp_safe(tmpfile);
-                assert_se(tmpfd >= 0);
-                assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents));
-                tmpfd = safe_close(tmpfd);
+                assert_se(write_tmpfile(tmpfile, file_contents) == 0);
 
-                tmpfd = open(tmpfile, O_RDONLY);
+                _cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY);
                 assert_se(tmpfd >= 0);
                 assert_se(unlink(tmpfile) == 0);
 
@@ -313,7 +293,7 @@
         /* Parent */
         char buf[64];
         struct iovec iov = IOVEC_INIT(buf, sizeof(buf)-1);
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd;
         ssize_t k;
 
         pair[1] = safe_close(pair[1]);
@@ -330,13 +310,11 @@
         assert_se(streq(buf, file_contents));
 }
 
-static void test_receive_nopassfd(void) {
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+TEST(receive_nopassfd) {
+        _cleanup_close_pair_ int pair[2];
         static const char wire_contents[] = "no fd passed here";
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socketpair(AF_UNIX, SOCK_DGRAM, 0, pair) >= 0);
 
         r = safe_fork("(receive_nopassfd)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
@@ -366,15 +344,13 @@
         assert_se(streq(buf, wire_contents));
 
         /* no fd passed here, confirm it was reset */
-        assert_se(fd == -1);
+        assert_se(fd == -EBADF);
 }
 
-static void test_send_nodata_nofd(void) {
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+TEST(send_nodata_nofd) {
+        _cleanup_close_pair_ int pair[2];
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socketpair(AF_UNIX, SOCK_DGRAM, 0, pair) >= 0);
 
         r = safe_fork("(send_nodata_nofd)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
@@ -404,12 +380,10 @@
         assert_se(fd == -999);
 }
 
-static void test_send_emptydata(void) {
-        _cleanup_close_pair_ int pair[2] = { -1, -1 };
+TEST(send_emptydata) {
+        _cleanup_close_pair_ int pair[2];
         int r;
 
-        log_info("/* %s */", __func__);
-
         assert_se(socketpair(AF_UNIX, SOCK_DGRAM, 0, pair) >= 0);
 
         r = safe_fork("(send_emptydata)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
@@ -443,8 +417,8 @@
         assert_se(fd == -999);
 }
 
-static void test_flush_accept(void) {
-        _cleanup_close_ int listen_stream = -1, listen_dgram = -1, listen_seqpacket = 1, connect_stream = -1, connect_dgram = -1, connect_seqpacket = -1;
+TEST(flush_accept) {
+        _cleanup_close_ int listen_stream, listen_dgram, listen_seqpacket, connect_stream, connect_dgram, connect_seqpacket;
         static const union sockaddr_union sa = { .un.sun_family = AF_UNIX };
         union sockaddr_union lsa;
         socklen_t l;
@@ -504,27 +478,51 @@
         assert_se(flush_accept(listen_seqpacket) >= 0);
 }
 
-static void test_ipv6_enabled(void) {
+TEST(ipv6_enabled) {
         log_info("IPv6 supported: %s", yes_no(socket_ipv6_is_supported()));
         log_info("IPv6 enabled: %s", yes_no(socket_ipv6_is_enabled()));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+TEST(sockaddr_un_set_path) {
+        _cleanup_(rm_rf_physical_and_freep) char *t = NULL;
+        _cleanup_(unlink_and_freep) char *sh = NULL;
+        _cleanup_free_ char *j = NULL;
+        union sockaddr_union sa;
+        _cleanup_close_ int fd1, fd2, fd3;
 
-        test_ifname_valid();
-        test_socket_print_unix();
-        test_sockaddr_equal();
-        test_sockaddr_un_len();
-        test_in_addr_is_multicast();
-        test_getpeercred_getpeergroups();
-        test_passfd_read();
-        test_passfd_contents_read();
-        test_receive_nopassfd();
-        test_send_nodata_nofd();
-        test_send_emptydata();
-        test_flush_accept();
-        test_ipv6_enabled();
+        assert_se(mkdtemp_malloc("/tmp/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXXXXXX", &t) >= 0);
+        assert_se(strlen(t) > SUN_PATH_LEN);
 
-        return 0;
+        assert_se(j = path_join(t, "sock"));
+        assert_se(sockaddr_un_set_path(&sa.un, j) == -ENAMETOOLONG); /* too long for AF_UNIX socket */
+
+        assert_se(asprintf(&sh, "/tmp/%" PRIx64, random_u64()) >= 0);
+        assert_se(symlink(t, sh) >= 0); /* create temporary symlink, to access it anyway */
+
+        free(j);
+        assert_se(j = path_join(sh, "sock"));
+        assert_se(sockaddr_un_set_path(&sa.un, j) >= 0);
+
+        fd1 = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
+        assert_se(fd1 >= 0);
+        assert_se(bind(fd1, &sa.sa, SOCKADDR_LEN(sa)) >= 0);
+        assert_se(listen(fd1, 1) >= 0);
+
+        sh = unlink_and_free(sh); /* remove temporary symlink */
+
+        fd2 = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
+        assert_se(fd2 >= 0);
+        assert_se(connect(fd2, &sa.sa, SOCKADDR_LEN(sa)) < 0);
+        assert_se(errno == ENOENT); /* we removed the symlink, must fail */
+
+        free(j);
+        assert_se(j = path_join(t, "sock"));
+
+        fd3 = open(j, O_CLOEXEC|O_PATH|O_NOFOLLOW);
+        assert_se(fd3 > 0);
+        assert_se(sockaddr_un_set_path(&sa.un, FORMAT_PROC_FD_PATH(fd3)) >= 0); /* connect via O_PATH instead, circumventing 108ch limit */
+
+        assert_se(connect(fd2, &sa.sa, SOCKADDR_LEN(sa)) >= 0);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c
index 853943a..4a8ff4b 100644
--- a/src/test/test-specifier.c
+++ b/src/test/test-specifier.c
@@ -3,10 +3,12 @@
 #include "alloc-util.h"
 #include "log.h"
 #include "specifier.h"
+#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
 #include "strv.h"
 #include "tests.h"
+#include "unit-file.h"
 
 static void test_specifier_escape_one(const char *a, const char *b) {
         _cleanup_free_ char *x = NULL;
@@ -15,9 +17,7 @@
         assert_se(streq_ptr(x, b));
 }
 
-static void test_specifier_escape(void) {
-        log_info("/* %s */", __func__);
-
+TEST(specifier_escape) {
         test_specifier_escape_one(NULL, NULL);
         test_specifier_escape_one("", "");
         test_specifier_escape_one("%", "%%");
@@ -33,9 +33,7 @@
         assert_se(strv_equal(x, b));
 }
 
-static void test_specifier_escape_strv(void) {
-        log_info("/* %s */", __func__);
-
+TEST(specifier_escape_strv) {
         test_specifier_escape_strv_one(NULL, NULL);
         test_specifier_escape_strv_one(STRV_MAKE(NULL), STRV_MAKE(NULL));
         test_specifier_escape_strv_one(STRV_MAKE(""), STRV_MAKE(""));
@@ -49,17 +47,18 @@
 static const Specifier specifier_table[] = {
         COMMON_SYSTEM_SPECIFIERS,
 
-        COMMON_CREDS_SPECIFIERS,
+        COMMON_CREDS_SPECIFIERS(LOOKUP_SCOPE_USER),
         { 'h', specifier_user_home,       NULL },
 
         COMMON_TMP_SPECIFIERS,
         {}
 };
 
-static void test_specifier_printf(void) {
+TEST(specifier_printf) {
         static const Specifier table[] = {
                 { 'X', specifier_string,         (char*) "AAAA" },
                 { 'Y', specifier_string,         (char*) "BBBB" },
+                { 'e', specifier_string,         NULL           },
                 COMMON_SYSTEM_SPECIFIERS,
                 {}
         };
@@ -67,29 +66,68 @@
         _cleanup_free_ char *w = NULL;
         int r;
 
-        log_info("/* %s */", __func__);
-
-        r = specifier_printf("xxx a=%X b=%Y yyy", SIZE_MAX, table, NULL, NULL, &w);
+        r = specifier_printf("xxx a=%X b=%Y e=%e yyy", SIZE_MAX, table, NULL, NULL, &w);
         assert_se(r >= 0);
         assert_se(w);
 
         puts(w);
-        assert_se(streq(w, "xxx a=AAAA b=BBBB yyy"));
+        assert_se(streq(w, "xxx a=AAAA b=BBBB e= yyy"));
 
         free(w);
-        r = specifier_printf("machine=%m, boot=%b, host=%H, version=%v, arch=%a", SIZE_MAX, table, NULL, NULL, &w);
+        r = specifier_printf("boot=%b, host=%H, pretty=%q, version=%v, arch=%a, empty=%e", SIZE_MAX, table, NULL, NULL, &w);
         assert_se(r >= 0);
         assert_se(w);
         puts(w);
 
         w = mfree(w);
-        specifier_printf("os=%o, os-version=%w, build=%B, variant=%W", SIZE_MAX, table, NULL, NULL, &w);
+        specifier_printf("os=%o, os-version=%w, build=%B, variant=%W, empty=%e%e%e", SIZE_MAX, table, NULL, NULL, &w);
         if (w)
                 puts(w);
 }
 
-static void test_specifiers(void) {
-        log_info("/* %s */", __func__);
+TEST(specifier_real_path) {
+        static const Specifier table[] = {
+                { 'p', specifier_string,         "/dev/initctl" },
+                { 'y', specifier_real_path,      "/dev/initctl" },
+                { 'Y', specifier_real_directory, "/dev/initctl" },
+                { 'w', specifier_real_path,      "/dev/tty" },
+                { 'W', specifier_real_directory, "/dev/tty" },
+                {}
+        };
+
+        _cleanup_free_ char *w = NULL;
+        int r;
+
+        r = specifier_printf("p=%p y=%y Y=%Y w=%w W=%W", SIZE_MAX, table, NULL, NULL, &w);
+        assert_se(r >= 0 || r == -ENOENT);
+        assert_se(w || r == -ENOENT);
+        puts(strnull(w));
+
+        /* /dev/initctl should normally be a symlink to /run/initctl */
+        if (files_same("/dev/initctl", "/run/initctl", 0) > 0)
+                assert_se(streq(w, "p=/dev/initctl y=/run/initctl Y=/run w=/dev/tty W=/dev"));
+}
+
+TEST(specifier_real_path_missing_file) {
+        static const Specifier table[] = {
+                { 'p', specifier_string,         "/dev/-no-such-file--" },
+                { 'y', specifier_real_path,      "/dev/-no-such-file--" },
+                { 'Y', specifier_real_directory, "/dev/-no-such-file--" },
+                {}
+        };
+
+        _cleanup_free_ char *w = NULL;
+        int r;
+
+        r = specifier_printf("p=%p y=%y", SIZE_MAX, table, NULL, NULL, &w);
+        assert_se(r == -ENOENT);
+
+        r = specifier_printf("p=%p Y=%Y", SIZE_MAX, table, NULL, NULL, &w);
+        assert_se(r == -ENOENT);
+}
+
+TEST(specifiers) {
+        int r;
 
         for (const Specifier *s = specifier_table; s->specifier; s++) {
                 char spec[3];
@@ -97,19 +135,27 @@
 
                 xsprintf(spec, "%%%c", s->specifier);
 
-                assert_se(specifier_printf(spec, SIZE_MAX, specifier_table, NULL, NULL, &resolved) >= 0);
+                r = specifier_printf(spec, SIZE_MAX, specifier_table, NULL, NULL, &resolved);
+                if (s->specifier == 'm' && IN_SET(r, -ENOENT, -ENOMEDIUM)) /* machine-id might be missing in build chroots */
+                        continue;
+                assert_se(r >= 0);
 
                 log_info("%%%c → %s", s->specifier, resolved);
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
+TEST(specifiers_missing_data_ok) {
+        _cleanup_free_ char *resolved = NULL;
 
-        test_specifier_escape();
-        test_specifier_escape_strv();
-        test_specifier_printf();
-        test_specifiers();
+        assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
+        assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) >= 0);
+        assert_se(streq(resolved, "-----"));
 
-        return 0;
+        assert_se(setenv("SYSTEMD_OS_RELEASE", "/nosuchfileordirectory", 1) == 0);
+        assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -EUNATCH);
+        assert_se(streq(resolved, "-----"));
+
+        assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-stat-util.c b/src/test/test-stat-util.c
index fa167fb..6b0f2d8 100644
--- a/src/test/test-stat-util.c
+++ b/src/test/test-stat-util.c
@@ -8,21 +8,45 @@
 #include "alloc-util.h"
 #include "errno-list.h"
 #include "fd-util.h"
+#include "fs-util.h"
 #include "macro.h"
 #include "mountpoint-util.h"
 #include "namespace-util.h"
 #include "path-util.h"
+#include "rm-rf.h"
 #include "stat-util.h"
 #include "tests.h"
 #include "tmpfile-util.h"
 
-static void test_files_same(void) {
-        _cleanup_close_ int fd = -1;
+TEST(null_or_empty_path) {
+        assert_se(null_or_empty_path("/dev/null") == 1);
+        assert_se(null_or_empty_path("/dev/tty") == 1);  /* We assume that any character device is "empty", bleh. */
+        assert_se(null_or_empty_path("../../../../../../../../../../../../../../../../../../../../dev/null") == 1);
+        assert_se(null_or_empty_path("/proc/self/exe") == 0);
+        assert_se(null_or_empty_path("/nosuchfileordir") == -ENOENT);
+}
+
+TEST(null_or_empty_path_with_root) {
+        assert_se(null_or_empty_path_with_root("/dev/null", NULL) == 1);
+        assert_se(null_or_empty_path_with_root("/dev/null", "/") == 1);
+        assert_se(null_or_empty_path_with_root("/dev/null", "/.././../") == 1);
+        assert_se(null_or_empty_path_with_root("/dev/null", "/.././..") == 1);
+        assert_se(null_or_empty_path_with_root("../../../../../../../../../../../../../../../../../../../../dev/null", NULL) == 1);
+        assert_se(null_or_empty_path_with_root("../../../../../../../../../../../../../../../../../../../../dev/null", "/") == 1);
+        assert_se(null_or_empty_path_with_root("/proc/self/exe", NULL) == 0);
+        assert_se(null_or_empty_path_with_root("/proc/self/exe", "/") == 0);
+        assert_se(null_or_empty_path_with_root("/nosuchfileordir", NULL) == -ENOENT);
+        assert_se(null_or_empty_path_with_root("/nosuchfileordir", "/.././../") == -ENOENT);
+        assert_se(null_or_empty_path_with_root("/nosuchfileordir", "/.././..") == -ENOENT);
+        assert_se(null_or_empty_path_with_root("/foobar/barbar/dev/null", "/foobar/barbar") == 1);
+        assert_se(null_or_empty_path_with_root("/foobar/barbar/dev/null", "/foobar/barbar/") == 1);
+}
+
+TEST(files_same) {
+        _cleanup_close_ int fd = -EBADF;
         char name[] = "/tmp/test-files_same.XXXXXX";
         char name_alias[] = "/tmp/test-files_same.alias";
 
-        log_info("/* %s */", __func__);
-
         fd = mkostemp_safe(name);
         assert_se(fd >= 0);
         assert_se(symlink(name, name_alias) >= 0);
@@ -36,12 +60,10 @@
         unlink(name_alias);
 }
 
-static void test_is_symlink(void) {
+TEST(is_symlink) {
         char name[] = "/tmp/test-is_symlink.XXXXXX";
         char name_link[] = "/tmp/test-is_symlink.link";
-        _cleanup_close_ int fd = -1;
-
-        log_info("/* %s */", __func__);
+        _cleanup_close_ int fd = -EBADF;
 
         fd = mkostemp_safe(name);
         assert_se(fd >= 0);
@@ -55,9 +77,7 @@
         unlink(name_link);
 }
 
-static void test_path_is_fs_type(void) {
-        log_info("/* %s */", __func__);
-
+TEST(path_is_fs_type) {
         /* run might not be a mount point in build chroots */
         if (path_is_mount_point("/run", NULL, AT_SYMLINK_FOLLOW) > 0) {
                 assert_se(path_is_fs_type("/run", TMPFS_MAGIC) > 0);
@@ -70,12 +90,9 @@
         assert_se(path_is_fs_type("/i-dont-exist", BTRFS_SUPER_MAGIC) == -ENOENT);
 }
 
-static void test_path_is_temporary_fs(void) {
-        const char *s;
+TEST(path_is_temporary_fs) {
         int r;
 
-        log_info("/* %s */", __func__);
-
         FOREACH_STRING(s, "/", "/run", "/sys", "/sys/", "/proc", "/i-dont-exist", "/var", "/var/lib") {
                 r = path_is_temporary_fs(s);
 
@@ -90,12 +107,9 @@
         assert_se(path_is_temporary_fs("/i-dont-exist") == -ENOENT);
 }
 
-static void test_path_is_read_only_fs(void) {
-        const char *s;
+TEST(path_is_read_only_fs) {
         int r;
 
-        log_info("/* %s */", __func__);
-
         FOREACH_STRING(s, "/", "/run", "/sys", "/sys/", "/proc", "/i-dont-exist", "/var", "/var/lib") {
                 r = path_is_read_only_fs(s);
 
@@ -110,10 +124,8 @@
         assert_se(path_is_read_only_fs("/i-dont-exist") == -ENOENT);
 }
 
-static void test_fd_is_ns(void) {
-        _cleanup_close_ int fd = -1;
-
-        log_info("/* %s */", __func__);
+TEST(fd_is_ns) {
+        _cleanup_close_ int fd = -EBADF;
 
         assert_se(fd_is_ns(STDIN_FILENO, CLONE_NEWNET) == 0);
         assert_se(fd_is_ns(STDERR_FILENO, CLONE_NEWNET) == 0);
@@ -137,104 +149,46 @@
         assert_se(IN_SET(fd_is_ns(fd, CLONE_NEWNET), 1, -EUCLEAN));
 }
 
-static void test_device_major_minor_valid(void) {
-        log_info("/* %s */", __func__);
+TEST(dir_is_empty) {
+        _cleanup_(rm_rf_physical_and_freep) char *empty_dir = NULL;
+        _cleanup_free_ char *j = NULL, *jj = NULL, *jjj = NULL;
 
-        /* on glibc dev_t is 64bit, even though in the kernel it is only 32bit */
-        assert_cc(sizeof(dev_t) == sizeof(uint64_t));
+        assert_se(dir_is_empty_at(AT_FDCWD, "/proc", /* ignore_hidden_or_backup= */ true) == 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, "/icertainlydontexistdoi", /* ignore_hidden_or_backup= */ true) == -ENOENT);
 
-        assert_se(DEVICE_MAJOR_VALID(0U));
-        assert_se(DEVICE_MINOR_VALID(0U));
+        assert_se(mkdtemp_malloc("/tmp/emptyXXXXXX", &empty_dir) >= 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ true) > 0);
 
-        assert_se(DEVICE_MAJOR_VALID(1U));
-        assert_se(DEVICE_MINOR_VALID(1U));
+        j = path_join(empty_dir, "zzz");
+        assert_se(j);
+        assert_se(touch(j) >= 0);
 
-        assert_se(!DEVICE_MAJOR_VALID(-1U));
-        assert_se(!DEVICE_MINOR_VALID(-1U));
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ true) == 0);
 
-        assert_se(DEVICE_MAJOR_VALID(1U << 10));
-        assert_se(DEVICE_MINOR_VALID(1U << 10));
+        jj = path_join(empty_dir, "ppp");
+        assert_se(jj);
+        assert_se(touch(jj) >= 0);
 
-        assert_se(DEVICE_MAJOR_VALID((1U << 12) - 1));
-        assert_se(DEVICE_MINOR_VALID((1U << 20) - 1));
+        jjj = path_join(empty_dir, ".qqq");
+        assert_se(jjj);
+        assert_se(touch(jjj) >= 0);
 
-        assert_se(!DEVICE_MAJOR_VALID((1U << 12)));
-        assert_se(!DEVICE_MINOR_VALID((1U << 20)));
-
-        assert_se(!DEVICE_MAJOR_VALID(1U << 25));
-        assert_se(!DEVICE_MINOR_VALID(1U << 25));
-
-        assert_se(!DEVICE_MAJOR_VALID(UINT32_MAX));
-        assert_se(!DEVICE_MINOR_VALID(UINT32_MAX));
-
-        assert_se(!DEVICE_MAJOR_VALID(UINT64_MAX));
-        assert_se(!DEVICE_MINOR_VALID(UINT64_MAX));
-
-        assert_se(DEVICE_MAJOR_VALID(major(0)));
-        assert_se(DEVICE_MINOR_VALID(minor(0)));
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ true) == 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ false) == 0);
+        assert_se(unlink(j) >= 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ true) == 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ false) == 0);
+        assert_se(unlink(jj) >= 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ true) > 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ false) == 0);
+        assert_se(unlink(jjj) >= 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ true) > 0);
+        assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ false) > 0);
 }
 
-static void test_device_path_make_canonical_one(const char *path) {
-        _cleanup_free_ char *resolved = NULL, *raw = NULL;
-        struct stat st;
-        dev_t devno;
-        mode_t mode;
-        int r;
-
-        log_debug("> %s", path);
-
-        if (stat(path, &st) < 0) {
-                assert(errno == ENOENT);
-                log_notice("Path %s not found, skipping test", path);
-                return;
-        }
-
-        r = device_path_make_canonical(st.st_mode, st.st_rdev, &resolved);
-        if (r == -ENOENT) {
-                /* maybe /dev/char/x:y and /dev/block/x:y are missing in this test environment, because we
-                 * run in a container or so? */
-                log_notice("Device %s cannot be resolved, skipping test", path);
-                return;
-        }
-
-        assert_se(r >= 0);
-        assert_se(path_equal(path, resolved));
-
-        assert_se(device_path_make_major_minor(st.st_mode, st.st_rdev, &raw) >= 0);
-        assert_se(device_path_parse_major_minor(raw, &mode, &devno) >= 0);
-
-        assert_se(st.st_rdev == devno);
-        assert_se((st.st_mode & S_IFMT) == (mode & S_IFMT));
-}
-
-static void test_device_path_make_canonical(void) {
-        log_info("/* %s */", __func__);
-
-        test_device_path_make_canonical_one("/dev/null");
-        test_device_path_make_canonical_one("/dev/zero");
-        test_device_path_make_canonical_one("/dev/full");
-        test_device_path_make_canonical_one("/dev/random");
-        test_device_path_make_canonical_one("/dev/urandom");
-        test_device_path_make_canonical_one("/dev/tty");
-
-        if (is_device_node("/run/systemd/inaccessible/blk") > 0) {
-                test_device_path_make_canonical_one("/run/systemd/inaccessible/chr");
-                test_device_path_make_canonical_one("/run/systemd/inaccessible/blk");
-        }
-}
-
-int main(int argc, char *argv[]) {
+static int intro(void) {
         log_show_color(true);
-        test_setup_logging(LOG_INFO);
-
-        test_files_same();
-        test_is_symlink();
-        test_path_is_fs_type();
-        test_path_is_temporary_fs();
-        test_path_is_read_only_fs();
-        test_fd_is_ns();
-        test_device_major_minor_valid();
-        test_device_path_make_canonical();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-static-destruct.c b/src/test/test-static-destruct.c
index 904a9bb..cb518ea 100644
--- a/src/test/test-static-destruct.c
+++ b/src/test/test-static-destruct.c
@@ -21,14 +21,14 @@
 STATIC_DESTRUCTOR_REGISTER(baz, test_destroy);
 STATIC_DESTRUCTOR_REGISTER(memory, freep);
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
+TEST(static_destruct) {
         assert_se(memory = strdup("hallo"));
 
         assert_se(foo == 0 && bar == 0 && baz == 0);
         static_destruct();
         assert_se(foo == 1 && bar == 2 && baz == 3);
 
-        return EXIT_SUCCESS;
+        assert_se(memory == NULL);
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-strbuf.c b/src/test/test-strbuf.c
index a7c2f83..f69e80c 100644
--- a/src/test/test-strbuf.c
+++ b/src/test/test-strbuf.c
@@ -2,16 +2,17 @@
 
 #include <stdlib.h>
 
+#include "nulstr-util.h"
 #include "strbuf.h"
 #include "string-util.h"
 #include "strv.h"
-#include "util.h"
+#include "tests.h"
 
 static ssize_t add_string(struct strbuf *sb, const char *s) {
         return strbuf_add_string(sb, s, strlen(s));
 }
 
-static void test_strbuf(void) {
+TEST(strbuf) {
         _cleanup_(strbuf_freep) struct strbuf *sb;
         _cleanup_strv_free_ char **l;
         ssize_t a, b, c, d, e, f, g, h;
@@ -69,8 +70,4 @@
         assert_se(sb->root == NULL);
 }
 
-int main(int argc, const char *argv[]) {
-        test_strbuf();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c
index 266aee9..b3ff7d6 100644
--- a/src/test/test-string-util.c
+++ b/src/test/test-string-util.c
@@ -1,5 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <ctype.h>
+
 #include "alloc-util.h"
 #include "locale-util.h"
 #include "macro.h"
@@ -7,19 +9,16 @@
 #include "strv.h"
 #include "tests.h"
 #include "utf8.h"
-#include "util.h"
 
-static void test_string_erase(void) {
-        log_info("/* %s */", __func__);
-
+TEST(string_erase) {
         char *x;
-        x = strdupa("");
+        x = strdupa_safe("");
         assert_se(streq(string_erase(x), ""));
 
-        x = strdupa("1");
+        x = strdupa_safe("1");
         assert_se(streq(string_erase(x), ""));
 
-        x = strdupa("123456789");
+        x = strdupa_safe("123456789");
         assert_se(streq(string_erase(x), ""));
 
         assert_se(x[1] == '\0');
@@ -34,7 +33,7 @@
 }
 
 static void test_free_and_strndup_one(char **t, const char *src, size_t l, const char *expected, bool change) {
-        log_debug("%s: \"%s\", \"%s\", %zd (expect \"%s\", %s)",
+        log_debug("%s: \"%s\", \"%s\", %zu (expect \"%s\", %s)",
                   __func__, strnull(*t), strnull(src), l, strnull(expected), yes_no(change));
 
         int r = free_and_strndup(t, src, l);
@@ -42,9 +41,7 @@
         assert_se(r == change); /* check that change occurs only when necessary */
 }
 
-static void test_free_and_strndup(void) {
-        log_info("/* %s */", __func__);
-
+TEST(free_and_strndup) {
         static const struct test_case {
                 const char *src;
                 size_t len;
@@ -91,9 +88,7 @@
         }
 }
 
-static void test_ascii_strcasecmp_n(void) {
-        log_info("/* %s */", __func__);
-
+TEST(ascii_strcasecmp_n) {
         assert_se(ascii_strcasecmp_n("", "", 0) == 0);
         assert_se(ascii_strcasecmp_n("", "", 1) == 0);
         assert_se(ascii_strcasecmp_n("", "a", 1) < 0);
@@ -119,9 +114,7 @@
         assert_se(ascii_strcasecmp_n("xxxxYxxxx", "xxxxXxxxx", 9) > 0);
 }
 
-static void test_ascii_strcasecmp_nn(void) {
-        log_info("/* %s */", __func__);
-
+TEST(ascii_strcasecmp_nn) {
         assert_se(ascii_strcasecmp_nn("", 0, "", 0) == 0);
         assert_se(ascii_strcasecmp_nn("", 0, "", 1) < 0);
         assert_se(ascii_strcasecmp_nn("", 1, "", 0) > 0);
@@ -138,11 +131,9 @@
         assert_se(ascii_strcasecmp_nn("BBbb", 4, "aaaa", 4) > 0);
 }
 
-static void test_cellescape(void) {
+TEST(cellescape) {
         char buf[40];
 
-        log_info("/* %s */", __func__);
-
         assert_se(streq(cellescape(buf, 1, ""), ""));
         assert_se(streq(cellescape(buf, 1, "1"), ""));
         assert_se(streq(cellescape(buf, 1, "12"), ""));
@@ -221,25 +212,19 @@
         assert_se(streq(cellescape(buf, sizeof buf, "1\020x"), "1\\020x"));
 }
 
-static void test_streq_ptr(void) {
-        log_info("/* %s */", __func__);
-
+TEST(streq_ptr) {
         assert_se(streq_ptr(NULL, NULL));
         assert_se(!streq_ptr("abc", "cdef"));
 }
 
-static void test_strstrip(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strstrip) {
         char *ret, input[] = "   hello, waldo.   ";
 
         ret = strstrip(input);
         assert_se(streq(ret, "hello, waldo."));
 }
 
-static void test_strextend(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strextend) {
         _cleanup_free_ char *str = NULL;
 
         assert_se(strextend(&str, NULL));
@@ -250,9 +235,7 @@
         assert_se(streq_ptr(str, "0123456789"));
 }
 
-static void test_strextend_with_separator(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strextend_with_separator) {
         _cleanup_free_ char *str = NULL;
 
         assert_se(strextend_with_separator(&str, NULL, NULL));
@@ -275,9 +258,7 @@
         assert_se(streq_ptr(str, "start,,1,234;more;5;678"));
 }
 
-static void test_strrep(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strrep) {
         _cleanup_free_ char *one, *three, *zero;
         one = strrep("waldo", 1);
         three = strrep("waldo", 3);
@@ -288,7 +269,7 @@
         assert_se(streq(zero, ""));
 }
 
-static void test_string_has_cc(void) {
+TEST(string_has_cc) {
         assert_se(string_has_cc("abc\1", NULL));
         assert_se(string_has_cc("abc\x7f", NULL));
         assert_se(string_has_cc("abc\x7f", NULL));
@@ -302,16 +283,12 @@
         assert_se(!string_has_cc("a\ab\tc", "\t\a"));
 }
 
-static void test_ascii_strlower(void) {
-        log_info("/* %s */", __func__);
-
+TEST(ascii_strlower) {
         char a[] = "AabBcC Jk Ii Od LKJJJ kkd LK";
         assert_se(streq(ascii_strlower(a), "aabbcc jk ii od lkjjj kkd lk"));
 }
 
-static void test_strshorten(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strshorten) {
         char s[] = "foobar";
 
         assert_se(strlen(strshorten(s, 6)) == 6);
@@ -320,9 +297,7 @@
         assert_se(strlen(strshorten(s, 0)) == 0);
 }
 
-static void test_strjoina(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strjoina) {
         char *actual;
 
         actual = strjoina("", "foo", "bar");
@@ -353,7 +328,7 @@
         assert_se(streq(actual, "/sys/fs/cgroup/dn"));
 }
 
-static void test_strjoin(void) {
+TEST(strjoin) {
         char *actual;
 
         actual = strjoin("", "foo", "bar");
@@ -385,9 +360,7 @@
         mfree(actual);
 }
 
-static void test_strcmp_ptr(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strcmp_ptr) {
         assert_se(strcmp_ptr(NULL, NULL) == 0);
         assert_se(strcmp_ptr("", NULL) > 0);
         assert_se(strcmp_ptr("foo", NULL) > 0);
@@ -399,9 +372,7 @@
         assert_se(strcmp_ptr("", "") == 0);
 }
 
-static void test_foreach_word(void) {
-        log_info("/* %s */", __func__);
-
+TEST(foreach_word) {
         const char *test = "test abc d\te   f   ";
         const char * const expected[] = {
                 "test",
@@ -450,9 +421,7 @@
         assert_se(expected[i] == NULL);
 }
 
-static void test_foreach_word_quoted(void) {
-        log_info("/* %s */", __func__);
-
+TEST(foreach_word_quoted) {
         check("test a b c 'd' e '' '' hhh '' '' \"a b c\"",
               STRV_MAKE("test",
                         "a",
@@ -477,9 +446,7 @@
               true);
 }
 
-static void test_endswith(void) {
-        log_info("/* %s */", __func__);
-
+TEST(endswith) {
         assert_se(endswith("foobar", "bar"));
         assert_se(endswith("foobar", ""));
         assert_se(endswith("foobar", "foobar"));
@@ -489,9 +456,7 @@
         assert_se(!endswith("foobar", "foobarfoofoo"));
 }
 
-static void test_endswith_no_case(void) {
-        log_info("/* %s */", __func__);
-
+TEST(endswith_no_case) {
         assert_se(endswith_no_case("fooBAR", "bar"));
         assert_se(endswith_no_case("foobar", ""));
         assert_se(endswith_no_case("foobar", "FOOBAR"));
@@ -501,9 +466,7 @@
         assert_se(!endswith_no_case("foobar", "FOOBARFOOFOO"));
 }
 
-static void test_delete_chars(void) {
-        log_info("/* %s */", __func__);
-
+TEST(delete_chars) {
         char *s, input[] = "   hello, waldo.   abc";
 
         s = delete_chars(input, WHITESPACE);
@@ -511,9 +474,7 @@
         assert_se(s == input);
 }
 
-static void test_delete_trailing_chars(void) {
-        log_info("/* %s */", __func__);
-
+TEST(delete_trailing_chars) {
         char *s,
                 input1[] = " \n \r k \n \r ",
                 input2[] = "kkkkthiskkkiskkkaktestkkk",
@@ -536,9 +497,7 @@
         assert_se(s == input3);
 }
 
-static void test_delete_trailing_slashes(void) {
-        log_info("/* %s */", __func__);
-
+TEST(delete_trailing_slashes) {
         char s1[] = "foobar//",
              s2[] = "foobar/",
              s3[] = "foobar",
@@ -551,9 +510,7 @@
         assert_se(streq(delete_trailing_chars(s4, "/"), ""));
 }
 
-static void test_skip_leading_chars(void) {
-        log_info("/* %s */", __func__);
-
+TEST(skip_leading_chars) {
         char input1[] = " \n \r k \n \r ",
                 input2[] = "kkkkthiskkkiskkkaktestkkk",
                 input3[] = "abcdef";
@@ -565,16 +522,12 @@
         assert_se(streq(skip_leading_chars(input3, "bcaef"), "def"));
 }
 
-static void test_in_charset(void) {
-        log_info("/* %s */", __func__);
-
+TEST(in_charset) {
         assert_se(in_charset("dddaaabbbcccc", "abcd"));
         assert_se(!in_charset("dddaaabbbcccc", "abc f"));
 }
 
-static void test_split_pair(void) {
-        log_info("/* %s */", __func__);
-
+TEST(split_pair) {
         _cleanup_free_ char *a = NULL, *b = NULL;
 
         assert_se(split_pair("", "", &a, &b) == -EINVAL);
@@ -596,9 +549,7 @@
         assert_se(streq(b, "="));
 }
 
-static void test_first_word(void) {
-        log_info("/* %s */", __func__);
-
+TEST(first_word) {
         assert_se(first_word("Hello", ""));
         assert_se(first_word("Hello", "Hello"));
         assert_se(first_word("Hello world", "Hello"));
@@ -612,17 +563,13 @@
         assert_se(!first_word("Hellooo", "Hello"));
 }
 
-static void test_strlen_ptr(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strlen_ptr) {
         assert_se(strlen_ptr("foo") == 3);
         assert_se(strlen_ptr("") == 0);
         assert_se(strlen_ptr(NULL) == 0);
 }
 
-static void test_memory_startswith(void) {
-        log_info("/* %s */", __func__);
-
+TEST(memory_startswith) {
         assert_se(streq(memory_startswith("", 0, ""), ""));
         assert_se(streq(memory_startswith("", 1, ""), ""));
         assert_se(streq(memory_startswith("x", 2, ""), "x"));
@@ -634,9 +581,7 @@
         assert_se(!memory_startswith("xxx", 4, "xxxx"));
 }
 
-static void test_memory_startswith_no_case(void) {
-        log_info("/* %s */", __func__);
-
+TEST(memory_startswith_no_case) {
         assert_se(streq(memory_startswith_no_case("", 0, ""), ""));
         assert_se(streq(memory_startswith_no_case("", 1, ""), ""));
         assert_se(streq(memory_startswith_no_case("x", 2, ""), "x"));
@@ -668,9 +613,7 @@
         assert_se(!!k == truncation);
 }
 
-static void test_string_truncate_lines(void) {
-        log_info("/* %s */", __func__);
-
+TEST(string_truncate_lines) {
         test_string_truncate_lines_one("", 0, "", false);
         test_string_truncate_lines_one("", 1, "", false);
         test_string_truncate_lines_one("", 2, "", false);
@@ -741,9 +684,7 @@
         assert_se(!!k == more);
 }
 
-static void test_string_extract_line(void) {
-        log_info("/* %s */", __func__);
-
+TEST(string_extract_line) {
         test_string_extract_lines_one("", 0, "", false);
         test_string_extract_lines_one("", 1, "", false);
         test_string_extract_lines_one("", 2, "", false);
@@ -810,9 +751,7 @@
         test_string_extract_lines_one("\n\n\nx\n", 3, "x", false);
 }
 
-static void test_string_contains_word_strv(void) {
-        log_info("/* %s */", __func__);
-
+TEST(string_contains_word_strv) {
         const char *w;
 
         assert_se(string_contains_word_strv("a b cc", NULL, STRV_MAKE("a", "b"), NULL));
@@ -839,9 +778,7 @@
         assert_se(streq(w, ""));
 }
 
-static void test_string_contains_word(void) {
-        log_info("/* %s */", __func__);
-
+TEST(string_contains_word) {
         assert_se( string_contains_word("a b cc", NULL, "a"));
         assert_se( string_contains_word("a b cc", NULL, "b"));
         assert_se(!string_contains_word("a b cc", NULL, "c"));
@@ -892,19 +829,30 @@
         assert_se(!string_contains_word("a:b:cc", ":#", ":cc"));
 }
 
-static void test_strverscmp_improved_one(const char *newer, const char *older) {
-        log_info("/* %s(%s, %s) */", __func__, strnull(newer), strnull(older));
+static void test_strverscmp_improved_one(const char* a, const char *b, int expected) {
+        int r = strverscmp_improved(a, b);
 
-        assert_se(strverscmp_improved(newer, newer) == 0);
-        assert_se(strverscmp_improved(newer, older) >  0);
-        assert_se(strverscmp_improved(older, newer) <  0);
-        assert_se(strverscmp_improved(older, older) == 0);
+        log_info("'%s' %s '%s'%s",
+                 strnull(a),
+                 comparison_operator(r),
+                 strnull(b),
+                 r == expected ? "" : " !!!!!!!!!!!!!");
+        assert_se(r == expected);
 }
 
-static void test_strverscmp_improved(void) {
+static void test_strverscmp_improved_newer(const char *older, const char *newer) {
+        test_strverscmp_improved_one(older, newer, -1);
+
+        assert_se(strverscmp_improved(older, older) == 0);
+        assert_se(strverscmp_improved(older, newer) < 0);
+        assert_se(strverscmp_improved(newer, older) > 0);
+        assert_se(strverscmp_improved(newer, newer) == 0);
+}
+
+TEST(strverscmp_improved) {
         static const char * const versions[] = {
-                "",
                 "~1",
+                "",
                 "ab",
                 "abb",
                 "abc",
@@ -929,48 +877,223 @@
                 "124",
                 NULL,
         };
-        const char * const *p, * const *q;
 
         STRV_FOREACH(p, versions)
                 STRV_FOREACH(q, p + 1)
-                        test_strverscmp_improved_one(*q, *p);
+                        test_strverscmp_improved_newer(*p, *q);
 
-        test_strverscmp_improved_one("123.45-67.89", "123.45-67.88");
-        test_strverscmp_improved_one("123.45-67.89a", "123.45-67.89");
-        test_strverscmp_improved_one("123.45-67.89", "123.45-67.ab");
-        test_strverscmp_improved_one("123.45-67.89", "123.45-67.9");
-        test_strverscmp_improved_one("123.45-67.89", "123.45-67");
-        test_strverscmp_improved_one("123.45-67.89", "123.45-66.89");
-        test_strverscmp_improved_one("123.45-67.89", "123.45-9.99");
-        test_strverscmp_improved_one("123.45-67.89", "123.42-99.99");
-        test_strverscmp_improved_one("123.45-67.89", "123-99.99");
+        test_strverscmp_improved_newer("123.45-67.88", "123.45-67.89");
+        test_strverscmp_improved_newer("123.45-67.89", "123.45-67.89a");
+        test_strverscmp_improved_newer("123.45-67.ab", "123.45-67.89");
+        test_strverscmp_improved_newer("123.45-67.9", "123.45-67.89");
+        test_strverscmp_improved_newer("123.45-67", "123.45-67.89");
+        test_strverscmp_improved_newer("123.45-66.89", "123.45-67.89");
+        test_strverscmp_improved_newer("123.45-9.99", "123.45-67.89");
+        test_strverscmp_improved_newer("123.42-99.99", "123.45-67.89");
+        test_strverscmp_improved_newer("123-99.99", "123.45-67.89");
 
         /* '~' : pre-releases */
-        test_strverscmp_improved_one("123.45-67.89", "123~rc1-99.99");
-        test_strverscmp_improved_one("123-45.67.89", "123~rc1-99.99");
-        test_strverscmp_improved_one("123~rc2-67.89", "123~rc1-99.99");
-        test_strverscmp_improved_one("123^aa2-67.89", "123~rc1-99.99");
-        test_strverscmp_improved_one("123aa2-67.89", "123~rc1-99.99");
+        test_strverscmp_improved_newer("123~rc1-99.99", "123.45-67.89");
+        test_strverscmp_improved_newer("123~rc1-99.99", "123-45.67.89");
+        test_strverscmp_improved_newer("123~rc1-99.99", "123~rc2-67.89");
+        test_strverscmp_improved_newer("123~rc1-99.99", "123^aa2-67.89");
+        test_strverscmp_improved_newer("123~rc1-99.99", "123aa2-67.89");
 
         /* '-' : separator between version and release. */
-        test_strverscmp_improved_one("123.45-67.89", "123-99.99");
-        test_strverscmp_improved_one("123^aa2-67.89", "123-99.99");
-        test_strverscmp_improved_one("123aa2-67.89", "123-99.99");
+        test_strverscmp_improved_newer("123-99.99", "123.45-67.89");
+        test_strverscmp_improved_newer("123-99.99", "123^aa2-67.89");
+        test_strverscmp_improved_newer("123-99.99", "123aa2-67.89");
 
         /* '^' : patch releases */
-        test_strverscmp_improved_one("123.45-67.89", "123^45-67.89");
-        test_strverscmp_improved_one("123^aa2-67.89", "123^aa1-99.99");
-        test_strverscmp_improved_one("123aa2-67.89", "123^aa2-67.89");
+        test_strverscmp_improved_newer("123^45-67.89", "123.45-67.89");
+        test_strverscmp_improved_newer("123^aa1-99.99", "123^aa2-67.89");
+        test_strverscmp_improved_newer("123^aa2-67.89", "123aa2-67.89");
 
         /* '.' : point release */
-        test_strverscmp_improved_one("123aa2-67.89", "123.aa2-67.89");
-        test_strverscmp_improved_one("123.ab2-67.89", "123.aa2-67.89");
+        test_strverscmp_improved_newer("123.aa2-67.89", "123aa2-67.89");
+        test_strverscmp_improved_newer("123.aa2-67.89", "123.ab2-67.89");
 
         /* invalid characters */
         assert_se(strverscmp_improved("123_aa2-67.89", "123aa+2-67.89") == 0);
+
+        /* some corner cases */
+        assert_se(strverscmp_improved("123.", "123") > 0);     /* One more version segment */
+        assert_se(strverscmp_improved("12_3", "123") < 0);     /* 12 < 123 */
+        assert_se(strverscmp_improved("12_3", "12") > 0);      /* 3 > '' */
+        assert_se(strverscmp_improved("12_3", "12.3") > 0);    /* 3 > '' */
+        assert_se(strverscmp_improved("123.0", "123") > 0);    /* 0 > '' */
+        assert_se(strverscmp_improved("123_0", "123") > 0);    /* 0 > '' */
+        assert_se(strverscmp_improved("123..0", "123.0") < 0); /* '' < 0 */
+
+        /* empty strings or strings with ignored characters only */
+        assert_se(strverscmp_improved("", NULL) == 0);
+        assert_se(strverscmp_improved(NULL, "") == 0);
+        assert_se(strverscmp_improved("0_", "0") == 0);
+        assert_se(strverscmp_improved("_0_", "0") == 0);
+        assert_se(strverscmp_improved("_0", "0") == 0);
+        assert_se(strverscmp_improved("0", "0___") == 0);
+        assert_se(strverscmp_improved("", "_") == 0);
+        assert_se(strverscmp_improved("_", "") == 0);
+        assert_se(strverscmp_improved("_", "_") == 0);
+        assert_se(strverscmp_improved("", "~") > 0);
+        assert_se(strverscmp_improved("~", "") < 0);
+        assert_se(strverscmp_improved("~", "~") == 0);
+
+        /* non-ASCII digits */
+        (void) setlocale(LC_NUMERIC, "ar_YE.utf8");
+        assert_se(strverscmp_improved("1٠١٢٣٤٥٦٧٨٩", "1") == 0);
+
+        (void) setlocale(LC_NUMERIC, "th_TH.utf8");
+        assert_se(strverscmp_improved("1๐๑๒๓๔๕๖๗๘๙", "1") == 0);
 }
 
-static void test_strextendf(void) {
+#define RPMVERCMP(a, b, c) \
+        test_strverscmp_improved_one(STRINGIFY(a), STRINGIFY(b), (c))
+
+TEST(strverscmp_improved_rpm) {
+        /* Tests copied from rmp's rpmio test suite, under the LGPL license:
+         * https://github.com/rpm-software-management/rpm/blob/master/tests/rpmvercmp.at.
+         * The original form is retained for easy comparisons and updates.
+         */
+
+        RPMVERCMP(1.0, 1.0, 0);
+        RPMVERCMP(1.0, 2.0, -1);
+        RPMVERCMP(2.0, 1.0, 1);
+
+        RPMVERCMP(2.0.1, 2.0.1, 0);
+        RPMVERCMP(2.0, 2.0.1, -1);
+        RPMVERCMP(2.0.1, 2.0, 1);
+
+        RPMVERCMP(2.0.1a, 2.0.1a, 0);
+        RPMVERCMP(2.0.1a, 2.0.1, 1);
+        RPMVERCMP(2.0.1, 2.0.1a, -1);
+
+        RPMVERCMP(5.5p1, 5.5p1, 0);
+        RPMVERCMP(5.5p1, 5.5p2, -1);
+        RPMVERCMP(5.5p2, 5.5p1, 1);
+
+        RPMVERCMP(5.5p10, 5.5p10, 0);
+        RPMVERCMP(5.5p1, 5.5p10, -1);
+        RPMVERCMP(5.5p10, 5.5p1, 1);
+
+        RPMVERCMP(10xyz, 10.1xyz, 1);    /* Note: this is reversed from rpm's vercmp */
+        RPMVERCMP(10.1xyz, 10xyz, -1);   /* Note: this is reversed from rpm's vercmp */
+
+        RPMVERCMP(xyz10, xyz10, 0);
+        RPMVERCMP(xyz10, xyz10.1, -1);
+        RPMVERCMP(xyz10.1, xyz10, 1);
+
+        RPMVERCMP(xyz.4, xyz.4, 0);
+        RPMVERCMP(xyz.4, 8, -1);
+        RPMVERCMP(8, xyz.4, 1);
+        RPMVERCMP(xyz.4, 2, -1);
+        RPMVERCMP(2, xyz.4, 1);
+
+        RPMVERCMP(5.5p2, 5.6p1, -1);
+        RPMVERCMP(5.6p1, 5.5p2, 1);
+
+        RPMVERCMP(5.6p1, 6.5p1, -1);
+        RPMVERCMP(6.5p1, 5.6p1, 1);
+
+        RPMVERCMP(6.0.rc1, 6.0, 1);
+        RPMVERCMP(6.0, 6.0.rc1, -1);
+
+        RPMVERCMP(10b2, 10a1, 1);
+        RPMVERCMP(10a2, 10b2, -1);
+
+        RPMVERCMP(1.0aa, 1.0aa, 0);
+        RPMVERCMP(1.0a, 1.0aa, -1);
+        RPMVERCMP(1.0aa, 1.0a, 1);
+
+        RPMVERCMP(10.0001, 10.0001, 0);
+        RPMVERCMP(10.0001, 10.1, 0);
+        RPMVERCMP(10.1, 10.0001, 0);
+        RPMVERCMP(10.0001, 10.0039, -1);
+        RPMVERCMP(10.0039, 10.0001, 1);
+
+        RPMVERCMP(4.999.9, 5.0, -1);
+        RPMVERCMP(5.0, 4.999.9, 1);
+
+        RPMVERCMP(20101121, 20101121, 0);
+        RPMVERCMP(20101121, 20101122, -1);
+        RPMVERCMP(20101122, 20101121, 1);
+
+        RPMVERCMP(2_0, 2_0, 0);
+        RPMVERCMP(2.0, 2_0, -1);   /* Note: in rpm those compare equal */
+        RPMVERCMP(2_0, 2.0, 1);    /* Note: in rpm those compare equal */
+
+        /* RhBug:178798 case */
+        RPMVERCMP(a, a, 0);
+        RPMVERCMP(a+, a+, 0);
+        RPMVERCMP(a+, a_, 0);
+        RPMVERCMP(a_, a+, 0);
+        RPMVERCMP(+a, +a, 0);
+        RPMVERCMP(+a, _a, 0);
+        RPMVERCMP(_a, +a, 0);
+        RPMVERCMP(+_, +_, 0);
+        RPMVERCMP(_+, +_, 0);
+        RPMVERCMP(_+, _+, 0);
+        RPMVERCMP(+, _, 0);
+        RPMVERCMP(_, +, 0);
+
+        /* Basic testcases for tilde sorting */
+        RPMVERCMP(1.0~rc1, 1.0~rc1, 0);
+        RPMVERCMP(1.0~rc1, 1.0, -1);
+        RPMVERCMP(1.0, 1.0~rc1, 1);
+        RPMVERCMP(1.0~rc1, 1.0~rc2, -1);
+        RPMVERCMP(1.0~rc2, 1.0~rc1, 1);
+        RPMVERCMP(1.0~rc1~git123, 1.0~rc1~git123, 0);
+        RPMVERCMP(1.0~rc1~git123, 1.0~rc1, -1);
+        RPMVERCMP(1.0~rc1, 1.0~rc1~git123, 1);
+
+        /* Basic testcases for caret sorting */
+        RPMVERCMP(1.0^, 1.0^, 0);
+        RPMVERCMP(1.0^, 1.0, 1);
+        RPMVERCMP(1.0, 1.0^, -1);
+        RPMVERCMP(1.0^git1, 1.0^git1, 0);
+        RPMVERCMP(1.0^git1, 1.0, 1);
+        RPMVERCMP(1.0, 1.0^git1, -1);
+        RPMVERCMP(1.0^git1, 1.0^git2, -1);
+        RPMVERCMP(1.0^git2, 1.0^git1, 1);
+        RPMVERCMP(1.0^git1, 1.01, -1);
+        RPMVERCMP(1.01, 1.0^git1, 1);
+        RPMVERCMP(1.0^20160101, 1.0^20160101, 0);
+        RPMVERCMP(1.0^20160101, 1.0.1, -1);
+        RPMVERCMP(1.0.1, 1.0^20160101, 1);
+        RPMVERCMP(1.0^20160101^git1, 1.0^20160101^git1, 0);
+        RPMVERCMP(1.0^20160102, 1.0^20160101^git1, 1);
+        RPMVERCMP(1.0^20160101^git1, 1.0^20160102, -1);
+
+        /* Basic testcases for tilde and caret sorting */
+        RPMVERCMP(1.0~rc1^git1, 1.0~rc1^git1, 0);
+        RPMVERCMP(1.0~rc1^git1, 1.0~rc1, 1);
+        RPMVERCMP(1.0~rc1, 1.0~rc1^git1, -1);
+        RPMVERCMP(1.0^git1~pre, 1.0^git1~pre, 0);
+        RPMVERCMP(1.0^git1, 1.0^git1~pre, 1);
+        RPMVERCMP(1.0^git1~pre, 1.0^git1, -1);
+
+        /* These are included here to document current, arguably buggy behaviors
+         * for reference purposes and for easy checking against unintended
+         * behavior changes. */
+        log_info("/* RPM version comparison oddities */");
+        /* RhBug:811992 case */
+        RPMVERCMP(1b.fc17, 1b.fc17, 0);
+        RPMVERCMP(1b.fc17, 1.fc17, 1); /* Note: this is reversed from rpm's vercmp, WAT! */
+        RPMVERCMP(1.fc17, 1b.fc17, -1);
+        RPMVERCMP(1g.fc17, 1g.fc17, 0);
+        RPMVERCMP(1g.fc17, 1.fc17, 1);
+        RPMVERCMP(1.fc17, 1g.fc17, -1);
+
+        /* Non-ascii characters are considered equal so these are all the same, eh… */
+        RPMVERCMP(1.1.α, 1.1.α, 0);
+        RPMVERCMP(1.1.α, 1.1.β, 0);
+        RPMVERCMP(1.1.β, 1.1.α, 0);
+        RPMVERCMP(1.1.αα, 1.1.α, 0);
+        RPMVERCMP(1.1.α, 1.1.ββ, 0);
+        RPMVERCMP(1.1.ββ, 1.1.αα, 0);
+}
+
+TEST(strextendf) {
         _cleanup_free_ char *p = NULL;
 
         assert_se(strextendf(&p, "<%i>", 77) >= 0);
@@ -982,7 +1105,7 @@
         assert_se(strextendf(&p, "<%80i>", 88) >= 0);
         assert_se(streq(p, "<77><99><                                                                              88>"));
 
-        assert_se(strextendf(&p, "<%08x>", 0x1234) >= 0);
+        assert_se(strextendf(&p, "<%08x>", 0x1234u) >= 0);
         assert_se(streq(p, "<77><99><                                                                              88><00001234>"));
 
         p = mfree(p);
@@ -996,49 +1119,103 @@
         assert_se(strextendf_with_separator(&p, ",", "<%80i>", 88) >= 0);
         assert_se(streq(p, "<77>,<99>,<                                                                              88>"));
 
-        assert_se(strextendf_with_separator(&p, ",", "<%08x>", 0x1234) >= 0);
+        assert_se(strextendf_with_separator(&p, ",", "<%08x>", 0x1234u) >= 0);
         assert_se(streq(p, "<77>,<99>,<                                                                              88>,<00001234>"));
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_string_erase();
-        test_free_and_strndup();
-        test_ascii_strcasecmp_n();
-        test_ascii_strcasecmp_nn();
-        test_cellescape();
-        test_streq_ptr();
-        test_strstrip();
-        test_strextend();
-        test_strextend_with_separator();
-        test_strrep();
-        test_string_has_cc();
-        test_ascii_strlower();
-        test_strshorten();
-        test_strjoina();
-        test_strjoin();
-        test_strcmp_ptr();
-        test_foreach_word();
-        test_foreach_word_quoted();
-        test_endswith();
-        test_endswith_no_case();
-        test_delete_chars();
-        test_delete_trailing_chars();
-        test_delete_trailing_slashes();
-        test_skip_leading_chars();
-        test_in_charset();
-        test_split_pair();
-        test_first_word();
-        test_strlen_ptr();
-        test_memory_startswith();
-        test_memory_startswith_no_case();
-        test_string_truncate_lines();
-        test_string_extract_line();
-        test_string_contains_word_strv();
-        test_string_contains_word();
-        test_strverscmp_improved();
-        test_strextendf();
-
-        return 0;
+TEST(string_replace_char) {
+        assert_se(streq(string_replace_char(strdupa_safe(""), 'a', 'b'), ""));
+        assert_se(streq(string_replace_char(strdupa_safe("abc"), 'a', 'b'), "bbc"));
+        assert_se(streq(string_replace_char(strdupa_safe("hoge"), 'a', 'b'), "hoge"));
+        assert_se(streq(string_replace_char(strdupa_safe("aaaa"), 'a', 'b'), "bbbb"));
+        assert_se(streq(string_replace_char(strdupa_safe("aaaa"), 'a', '\t'), "\t\t\t\t"));
 }
+
+TEST(strspn_from_end) {
+        assert_se(strspn_from_end(NULL, NULL) == 0);
+        assert_se(strspn_from_end("hoge", NULL) == 0);
+        assert_se(strspn_from_end(NULL, DIGITS) == 0);
+        assert_se(strspn_from_end("", DIGITS) == 0);
+        assert_se(strspn_from_end("hoge", DIGITS) == 0);
+        assert_se(strspn_from_end("1234", DIGITS) == 4);
+        assert_se(strspn_from_end("aaa1234", DIGITS) == 4);
+        assert_se(strspn_from_end("aaa1234aaa", DIGITS) == 0);
+        assert_se(strspn_from_end("aaa12aa34", DIGITS) == 2);
+}
+
+TEST(streq_skip_trailing_chars) {
+        /* NULL is WHITESPACE by default*/
+        assert_se(streq_skip_trailing_chars("foo bar", "foo bar", NULL));
+        assert_se(streq_skip_trailing_chars("foo", "foo", NULL));
+        assert_se(streq_skip_trailing_chars("foo bar      ", "foo bar", NULL));
+        assert_se(streq_skip_trailing_chars("foo bar", "foo bar\t\t", NULL));
+        assert_se(streq_skip_trailing_chars("foo bar  ", "foo bar\t\t", NULL));
+        assert_se(streq_skip_trailing_chars("foo\nbar", "foo\nbar", NULL));
+        assert_se(streq_skip_trailing_chars("\t\tfoo bar", "\t\tfoo bar", NULL));
+        assert_se(streq_skip_trailing_chars(" foo bar\t", " foo bar\n", NULL));
+
+        assert_se(!streq_skip_trailing_chars("foobar", "foo bar", NULL));
+        assert_se(!streq_skip_trailing_chars("foo\nbar", "foo\tbar", NULL));
+        assert_se(!streq_skip_trailing_chars("\t\nfoo bar", "\t foo bar", NULL));
+
+        assert_se(streq_skip_trailing_chars("foo bar      ", "foo bar", WHITESPACE));
+        assert_se(!streq_skip_trailing_chars("foo bar      ", "foo bar", NEWLINE));
+
+        assert_se(streq_skip_trailing_chars(NULL, NULL, NULL));
+        assert_se(streq_skip_trailing_chars("", "", NULL));
+        assert_se(!streq_skip_trailing_chars(NULL, "foo bar", NULL));
+        assert_se(!streq_skip_trailing_chars("foo", NULL, NULL));
+        assert_se(!streq_skip_trailing_chars("", "f", NULL));
+}
+
+#define TEST_MAKE_CSTRING_ONE(x, ret, mode, expect)                     \
+        do {                                                            \
+                _cleanup_free_ char *b = NULL;                          \
+                assert_se(make_cstring((x), ELEMENTSOF(x), (mode), &b) == (ret)); \
+                assert_se(streq_ptr(b, (expect)));                      \
+        } while(false)
+
+TEST(make_cstring) {
+        static const char test1[] = "this is a test",
+                test2[] = "",
+                test3[] = "a",
+                test4[] = "aa\0aa",
+                test5[] = { 'b', 'b', 0, 'b' , 'b' },
+                test6[] = {},
+                test7[] = { 'x' },
+                test8[] = { 'x', 'y', 'z' };
+
+        TEST_MAKE_CSTRING_ONE(test1, -EINVAL, MAKE_CSTRING_REFUSE_TRAILING_NUL, NULL);
+        TEST_MAKE_CSTRING_ONE(test1, 0, MAKE_CSTRING_ALLOW_TRAILING_NUL, "this is a test");
+        TEST_MAKE_CSTRING_ONE(test1, 0, MAKE_CSTRING_REQUIRE_TRAILING_NUL, "this is a test");
+
+        TEST_MAKE_CSTRING_ONE(test2, -EINVAL, MAKE_CSTRING_REFUSE_TRAILING_NUL, NULL);
+        TEST_MAKE_CSTRING_ONE(test2, 0, MAKE_CSTRING_ALLOW_TRAILING_NUL, "");
+        TEST_MAKE_CSTRING_ONE(test2, 0, MAKE_CSTRING_REQUIRE_TRAILING_NUL, "");
+
+        TEST_MAKE_CSTRING_ONE(test3, -EINVAL, MAKE_CSTRING_REFUSE_TRAILING_NUL, NULL);
+        TEST_MAKE_CSTRING_ONE(test3, 0, MAKE_CSTRING_ALLOW_TRAILING_NUL, "a");
+        TEST_MAKE_CSTRING_ONE(test3, 0, MAKE_CSTRING_REQUIRE_TRAILING_NUL, "a");
+
+        TEST_MAKE_CSTRING_ONE(test4, -EINVAL, MAKE_CSTRING_REFUSE_TRAILING_NUL, NULL);
+        TEST_MAKE_CSTRING_ONE(test4, -EINVAL, MAKE_CSTRING_ALLOW_TRAILING_NUL, NULL);
+        TEST_MAKE_CSTRING_ONE(test4, -EINVAL, MAKE_CSTRING_REQUIRE_TRAILING_NUL, NULL);
+
+        TEST_MAKE_CSTRING_ONE(test5, -EINVAL, MAKE_CSTRING_REFUSE_TRAILING_NUL, NULL);
+        TEST_MAKE_CSTRING_ONE(test5, -EINVAL, MAKE_CSTRING_ALLOW_TRAILING_NUL, NULL);
+        TEST_MAKE_CSTRING_ONE(test5, -EINVAL, MAKE_CSTRING_REQUIRE_TRAILING_NUL, NULL);
+
+        TEST_MAKE_CSTRING_ONE(test6, 0, MAKE_CSTRING_REFUSE_TRAILING_NUL, "");
+        TEST_MAKE_CSTRING_ONE(test6, 0, MAKE_CSTRING_ALLOW_TRAILING_NUL, "");
+        TEST_MAKE_CSTRING_ONE(test6, -EINVAL, MAKE_CSTRING_REQUIRE_TRAILING_NUL, NULL);
+
+        TEST_MAKE_CSTRING_ONE(test7, 0, MAKE_CSTRING_REFUSE_TRAILING_NUL, "x");
+        TEST_MAKE_CSTRING_ONE(test7, 0, MAKE_CSTRING_ALLOW_TRAILING_NUL, "x");
+        TEST_MAKE_CSTRING_ONE(test7, -EINVAL, MAKE_CSTRING_REQUIRE_TRAILING_NUL, NULL);
+
+        TEST_MAKE_CSTRING_ONE(test8, 0, MAKE_CSTRING_REFUSE_TRAILING_NUL, "xyz");
+        TEST_MAKE_CSTRING_ONE(test8, 0, MAKE_CSTRING_ALLOW_TRAILING_NUL, "xyz");
+        TEST_MAKE_CSTRING_ONE(test8, -EINVAL, MAKE_CSTRING_REQUIRE_TRAILING_NUL, NULL);
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-strip-tab-ansi.c b/src/test/test-strip-tab-ansi.c
index be54b0d..6f73d26 100644
--- a/src/test/test-strip-tab-ansi.c
+++ b/src/test/test-strip-tab-ansi.c
@@ -6,9 +6,9 @@
 #include "pretty-print.h"
 #include "string-util.h"
 #include "terminal-util.h"
-#include "util.h"
+#include "tests.h"
 
-int main(int argc, char *argv[]) {
+TEST(strip_tab_ansi) {
         _cleanup_free_ char *urlified = NULL, *q = NULL, *qq = NULL;
         char *p, *z;
 
@@ -67,6 +67,6 @@
                 assert_se(strip_tab_ansi(&q, NULL, NULL));
                 assert_se(streq(q, qq));
         }
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-strv.c b/src/test/test-strv.c
index 1345252..5c03eaa 100644
--- a/src/test/test-strv.c
+++ b/src/test/test-strv.c
@@ -2,22 +2,18 @@
 
 #include "alloc-util.h"
 #include "escape.h"
-#include "nulstr-util.h"
 #include "string-util.h"
 #include "strv.h"
+#include "tests.h"
 
-static void test_str_in_set(void) {
-        log_info("/* %s */", __func__);
-
+TEST(str_in_set) {
         assert_se(STR_IN_SET("x", "x", "y", "z"));
         assert_se(!STR_IN_SET("X", "x", "y", "z"));
         assert_se(!STR_IN_SET("", "x", "y", "z"));
         assert_se(STR_IN_SET("x", "w", "x"));
 }
 
-static void test_strptr_in_set(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strptr_in_set) {
         assert_se(STRPTR_IN_SET("x", "x", "y", "z"));
         assert_se(!STRPTR_IN_SET("X", "x", "y", "z"));
         assert_se(!STRPTR_IN_SET("", "x", "y", "z"));
@@ -29,9 +25,7 @@
         assert_se(!STRPTR_IN_SET(NULL, NULL));
 }
 
-static void test_startswith_set(void) {
-        log_info("/* %s */", __func__);
-
+TEST(startswith_set) {
         assert_se(!STARTSWITH_SET("foo", "bar", "baz", "waldo"));
         assert_se(!STARTSWITH_SET("foo", "bar"));
 
@@ -99,16 +93,12 @@
         NULL,
 };
 
-static void test_strv_find(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_find) {
         assert_se(strv_find((char **)input_table_multiple, "three"));
         assert_se(!strv_find((char **)input_table_multiple, "four"));
 }
 
-static void test_strv_find_prefix(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_find_prefix) {
         assert_se(strv_find_prefix((char **)input_table_multiple, "o"));
         assert_se(strv_find_prefix((char **)input_table_multiple, "one"));
         assert_se(strv_find_prefix((char **)input_table_multiple, ""));
@@ -116,11 +106,9 @@
         assert_se(!strv_find_prefix((char **)input_table_multiple, "onee"));
 }
 
-static void test_strv_find_startswith(void) {
+TEST(strv_find_startswith) {
         char *r;
 
-        log_info("/* %s */", __func__);
-
         r = strv_find_startswith((char **)input_table_multiple, "o");
         assert_se(r && streq(r, "ne"));
 
@@ -134,9 +122,7 @@
         assert_se(!strv_find_startswith((char **)input_table_multiple, "onee"));
 }
 
-static void test_strv_join(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_join) {
         _cleanup_free_ char *p = strv_join((char **)input_table_multiple, ", ");
         assert_se(p);
         assert_se(streq(p, "one, two, three"));
@@ -170,9 +156,7 @@
         assert_se(streq(w, ""));
 }
 
-static void test_strv_join_full(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_join_full) {
         _cleanup_free_ char *p = strv_join_full((char **)input_table_multiple, ", ", "foo", false);
         assert_se(p);
         assert_se(streq(p, "fooone, footwo, foothree"));
@@ -215,11 +199,10 @@
         assert_se(streq(y, "foo"));
 }
 
-static void test_strv_unquote(const char *quoted, char **list) {
+static void test_strv_unquote_one(const char *quoted, char **list) {
         _cleanup_strv_free_ char **s;
         _cleanup_free_ char *j;
         unsigned i = 0;
-        char **t;
         int r;
 
         log_info("/* %s */", __func__);
@@ -237,7 +220,25 @@
         assert_se(list[i] == NULL);
 }
 
-static void test_invalid_unquote(const char *quoted) {
+TEST(strv_unquote) {
+        test_strv_unquote_one("    foo=bar     \"waldo\"    zzz    ", STRV_MAKE("foo=bar", "waldo", "zzz"));
+        test_strv_unquote_one("", STRV_MAKE_EMPTY);
+        test_strv_unquote_one(" ", STRV_MAKE_EMPTY);
+        test_strv_unquote_one("   ", STRV_MAKE_EMPTY);
+        test_strv_unquote_one("   x", STRV_MAKE("x"));
+        test_strv_unquote_one("x   ", STRV_MAKE("x"));
+        test_strv_unquote_one("  x   ", STRV_MAKE("x"));
+        test_strv_unquote_one("  \"x\"   ", STRV_MAKE("x"));
+        test_strv_unquote_one("  'x'   ", STRV_MAKE("x"));
+        test_strv_unquote_one("  'x\"'   ", STRV_MAKE("x\""));
+        test_strv_unquote_one("  \"x'\"   ", STRV_MAKE("x'"));
+        test_strv_unquote_one("a  '--b=c \"d e\"'", STRV_MAKE("a", "--b=c \"d e\""));
+
+        /* trailing backslashes */
+        test_strv_unquote_one("  x\\\\", STRV_MAKE("x\\"));
+}
+
+static void test_invalid_unquote_one(const char *quoted) {
         char **s = NULL;
         int r;
 
@@ -248,12 +249,20 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_strv_split(void) {
+TEST(invalid_unquote) {
+        test_invalid_unquote_one("  x\\");
+        test_invalid_unquote_one("a  --b='c \"d e\"''");
+        test_invalid_unquote_one("a  --b='c \"d e\" '\"");
+        test_invalid_unquote_one("a  --b='c \"d e\"garbage");
+        test_invalid_unquote_one("'");
+        test_invalid_unquote_one("\"");
+        test_invalid_unquote_one("'x'y'g");
+}
+
+TEST(strv_split) {
         _cleanup_(strv_free_erasep) char **l = NULL;
         const char str[] = "one,two,three";
 
-        log_info("/* %s */", __func__);
-
         l = strv_split(str, ",");
         assert_se(l);
         assert_se(strv_equal(l, (char**) input_table_multiple));
@@ -307,13 +316,26 @@
 
         assert_se(strv_split_full(&l, "\\", NULL, EXTRACT_UNQUOTE | EXTRACT_RELAX | EXTRACT_UNESCAPE_RELAX) == 1);
         assert_se(strv_equal(l, STRV_MAKE("\\")));
+
+        l = strv_free_erase(l);
+
+        assert_se(l = strv_split("\\", NULL));
+        assert_se(strv_equal(l, STRV_MAKE("\\")));
+
+        l = strv_free_erase(l);
+
+        assert_se(l = strv_split("aa\\ bb\\", NULL));
+        assert_se(strv_equal(l, STRV_MAKE("aa\\", "bb\\")));
+
+        l = strv_free_erase(l);
+
+        assert_se(l = strv_split("aa\" bb'", NULL));
+        assert_se(strv_equal(l, STRV_MAKE("aa\"", "bb'")));
 }
 
-static void test_strv_split_empty(void) {
+TEST(strv_split_empty) {
         _cleanup_strv_free_ char **l = NULL;
 
-        log_info("/* %s */", __func__);
-
         l = strv_split("", WHITESPACE);
         assert_se(l);
         assert_se(strv_isempty(l));
@@ -373,13 +395,11 @@
         assert_se(strv_isempty(l));
 }
 
-static void test_strv_split_full(void) {
+TEST(strv_split_full) {
         _cleanup_strv_free_ char **l = NULL;
         const char *str = ":foo\\:bar::waldo:";
         int r;
 
-        log_info("/* %s */", __func__);
-
         r = strv_split_full(&l, str, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
         assert_se(r == (int) strv_length(l));
         assert_se(streq_ptr(l[0], ""));
@@ -390,14 +410,32 @@
         assert_se(streq_ptr(l[5], NULL));
 }
 
-static void test_strv_split_colon_pairs(void) {
+TEST(strv_split_and_extend_full) {
+        _cleanup_strv_free_ char **l = NULL;
+        const char *str1 = ":foo\\:bar:";
+        const char *str2 = "waldo::::::baz";
+        int r;
+
+        r = strv_split_and_extend(&l, "", ":", false);
+        assert_se(r == (int) strv_length(l));
+        r = strv_split_and_extend_full(&l, str1, ":", false, EXTRACT_DONT_COALESCE_SEPARATORS);
+        assert_se(r == (int) strv_length(l));
+        assert_se(streq_ptr(l[0], ""));
+        assert_se(streq_ptr(l[1], "foo:bar"));
+        assert_se(streq_ptr(l[2], ""));
+        r = strv_split_and_extend_full(&l, str2, ":", false, 0);
+        assert_se(r == (int) strv_length(l));
+        assert_se(streq_ptr(l[3], "waldo"));
+        assert_se(streq_ptr(l[4], "baz"));
+        assert_se(streq_ptr(l[5], NULL));
+}
+
+TEST(strv_split_colon_pairs) {
         _cleanup_strv_free_ char **l = NULL;
         const char *str = "one:two three four:five six seven:eight\\:nine ten\\:eleven\\\\",
                    *str_inval="one:two three:four:five";
         int r;
 
-        log_info("/* %s */", __func__);
-
         r = strv_split_colon_pairs(&l, str);
         assert_se(r == (int) strv_length(l));
         assert_se(r == 12);
@@ -419,14 +457,11 @@
         assert_se(r == -EINVAL);
 }
 
-static void test_strv_split_newlines(void) {
+TEST(strv_split_newlines) {
         unsigned i = 0;
-        char **s;
         _cleanup_strv_free_ char **l = NULL;
         const char str[] = "one\ntwo\nthree";
 
-        log_info("/* %s */", __func__);
-
         l = strv_split_newlines(str);
         assert_se(l);
 
@@ -434,7 +469,7 @@
                 assert_se(streq(*s, input_table_multiple[i++]));
 }
 
-static void test_strv_split_newlines_full(void) {
+TEST(strv_split_newlines_full) {
         const char str[] =
                 "ID_VENDOR=QEMU\n"
                 "ID_VENDOR_ENC=QEMU\\x20\\x20\\x20\\x20\n"
@@ -442,8 +477,6 @@
                 "\n\n\n";
         _cleanup_strv_free_ char **l = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(strv_split_newlines_full(&l, str, 0) == 3);
         assert_se(strv_equal(l, (char**) input_table_unescape));
 
@@ -453,42 +486,7 @@
         assert_se(strv_equal(l, (char**) input_table_retain_escape));
 }
 
-static void test_strv_split_nulstr(void) {
-        _cleanup_strv_free_ char **l = NULL;
-        const char nulstr[] = "str0\0str1\0str2\0str3\0";
-
-        log_info("/* %s */", __func__);
-
-        l = strv_split_nulstr (nulstr);
-        assert_se(l);
-
-        assert_se(streq(l[0], "str0"));
-        assert_se(streq(l[1], "str1"));
-        assert_se(streq(l[2], "str2"));
-        assert_se(streq(l[3], "str3"));
-}
-
-static void test_strv_parse_nulstr(void) {
-        _cleanup_strv_free_ char **l = NULL;
-        const char nulstr[] = "hoge\0hoge2\0hoge3\0\0hoge5\0\0xxx";
-
-        log_info("/* %s */", __func__);
-
-        l = strv_parse_nulstr(nulstr, sizeof(nulstr)-1);
-        assert_se(l);
-        puts("Parse nulstr:");
-        strv_print(l);
-
-        assert_se(streq(l[0], "hoge"));
-        assert_se(streq(l[1], "hoge2"));
-        assert_se(streq(l[2], "hoge3"));
-        assert_se(streq(l[3], ""));
-        assert_se(streq(l[4], "hoge5"));
-        assert_se(streq(l[5], ""));
-        assert_se(streq(l[6], "xxx"));
-}
-
-static void test_strv_overlap(void) {
+TEST(strv_overlap) {
         const char * const input_table[] = {
                 "one",
                 "two",
@@ -506,13 +504,11 @@
                 NULL
         };
 
-        log_info("/* %s */", __func__);
-
         assert_se(strv_overlap((char **)input_table, (char**)input_table_overlap));
         assert_se(!strv_overlap((char **)input_table, (char**)input_table_unique));
 }
 
-static void test_strv_sort(void) {
+TEST(strv_sort) {
         const char* input_table[] = {
                 "durian",
                 "apple",
@@ -522,8 +518,6 @@
                 NULL
         };
 
-        log_info("/* %s */", __func__);
-
         strv_sort((char **)input_table);
 
         assert_se(streq(input_table[0], "CAPITAL LETTERS FIRST"));
@@ -533,11 +527,9 @@
         assert_se(streq(input_table[4], "durian"));
 }
 
-static void test_strv_extend_strv_concat(void) {
+TEST(strv_extend_strv_concat) {
         _cleanup_strv_free_ char **a = NULL, **b = NULL;
 
-        log_info("/* %s */", __func__);
-
         a = strv_new("without", "suffix");
         b = strv_new("with", "suffix");
         assert_se(a);
@@ -551,11 +543,9 @@
         assert_se(streq(a[3], "suffix_suffix"));
 }
 
-static void test_strv_extend_strv(void) {
+TEST(strv_extend_strv) {
         _cleanup_strv_free_ char **a = NULL, **b = NULL, **n = NULL;
 
-        log_info("/* %s */", __func__);
-
         a = strv_new("abc", "def", "ghi");
         b = strv_new("jkl", "mno", "abc", "pqr");
         assert_se(a);
@@ -579,10 +569,27 @@
         assert_se(strv_length(n) == 4);
 }
 
-static void test_strv_extend(void) {
-        _cleanup_strv_free_ char **a = NULL, **b = NULL;
+TEST(strv_extend_with_size) {
+        _cleanup_strv_free_ char **a = NULL;
+        size_t n = SIZE_MAX;
 
-        log_info("/* %s */", __func__);
+        a = strv_new("test", "test1");
+        assert_se(a);
+
+        assert_se(strv_extend_with_size(&a, &n, "test2") >= 0);
+        assert_se(n == 3);
+        assert_se(strv_extend_with_size(&a, &n, "test3") >= 0);
+        assert_se(n == 4);
+
+        assert_se(streq(a[0], "test"));
+        assert_se(streq(a[1], "test1"));
+        assert_se(streq(a[2], "test2"));
+        assert_se(streq(a[3], "test3"));
+        assert_se(a[4] == NULL);
+}
+
+TEST(strv_extend) {
+        _cleanup_strv_free_ char **a = NULL, **b = NULL;
 
         a = strv_new("test", "test1");
         assert_se(a);
@@ -595,11 +602,9 @@
         assert_se(streq(b[0], "test3"));
 }
 
-static void test_strv_extendf(void) {
+TEST(strv_extendf) {
         _cleanup_strv_free_ char **a = NULL, **b = NULL;
 
-        log_info("/* %s */", __func__);
-
         a = strv_new("test", "test1");
         assert_se(a);
         assert_se(strv_extendf(&a, "test2 %s %d %s", "foo", 128, "bar") >= 0);
@@ -611,12 +616,9 @@
         assert_se(streq(b[0], "test3 bar foo 128"));
 }
 
-static void test_strv_foreach(void) {
+TEST(strv_foreach) {
         _cleanup_strv_free_ char **a;
         unsigned i = 0;
-        char **check;
-
-        log_info("/* %s */", __func__);
 
         a = strv_new("one", "two", "three");
         assert_se(a);
@@ -625,12 +627,9 @@
                 assert_se(streq(*check, input_table_multiple[i++]));
 }
 
-static void test_strv_foreach_backwards(void) {
+TEST(strv_foreach_backwards) {
         _cleanup_strv_free_ char **a;
         unsigned i = 2;
-        char **check;
-
-        log_info("/* %s */", __func__);
 
         a = strv_new("one", "two", "three");
 
@@ -640,17 +639,19 @@
                 assert_se(streq_ptr(*check, input_table_multiple[i--]));
 
         STRV_FOREACH_BACKWARDS(check, (char**) NULL)
-                assert_not_reached("Let's see that we check empty strv right, too.");
+                assert_not_reached();
 
-        STRV_FOREACH_BACKWARDS(check, (char**) { NULL })
-                assert_not_reached("Let's see that we check empty strv right, too.");
+        STRV_FOREACH_BACKWARDS(check, STRV_MAKE_EMPTY)
+                assert_not_reached();
+
+        unsigned count = 0;
+        STRV_FOREACH_BACKWARDS(check, STRV_MAKE("ONE"))
+                count++;
+        assert_se(count == 1);
 }
 
-static void test_strv_foreach_pair(void) {
+TEST(strv_foreach_pair) {
         _cleanup_strv_free_ char **a = NULL;
-        char **x, **y;
-
-        log_info("/* %s */", __func__);
 
         a = strv_new("pair_one",   "pair_one",
                      "pair_two",   "pair_two",
@@ -675,19 +676,15 @@
         }
 }
 
-static void test_strv_from_stdarg_alloca(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_from_stdarg_alloca) {
         test_strv_from_stdarg_alloca_one(STRV_MAKE("foo", "bar"), "foo", "bar", NULL);
         test_strv_from_stdarg_alloca_one(STRV_MAKE("foo"), "foo", NULL);
         test_strv_from_stdarg_alloca_one(STRV_MAKE_EMPTY, NULL);
 }
 
-static void test_strv_insert(void) {
+TEST(strv_insert) {
         _cleanup_strv_free_ char **a = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(strv_insert(&a, 0, strdup("first")) == 0);
         assert_se(streq(a[0], "first"));
         assert_se(!a[1]);
@@ -715,11 +712,9 @@
         assert_se(!a[4]);
 }
 
-static void test_strv_push_prepend(void) {
+TEST(strv_push_prepend) {
         _cleanup_strv_free_ char **a = NULL;
 
-        log_info("/* %s */", __func__);
-
         assert_se(a = strv_new("foo", "bar", "three"));
 
         assert_se(strv_push_prepend(&a, strdup("first")) >= 0);
@@ -738,11 +733,33 @@
         assert_se(!a[5]);
 }
 
-static void test_strv_push(void) {
+TEST(strv_push_with_size) {
         _cleanup_strv_free_ char **a = NULL;
+        size_t n = 0;
         char *i, *j;
 
-        log_info("/* %s */", __func__);
+        assert_se(i = strdup("foo"));
+        assert_se(strv_push_with_size(&a, &n, i) >= 0);
+        assert_se(n == 1);
+
+        assert_se(i = strdup("a"));
+        assert_se(j = strdup("b"));
+        assert_se(strv_push_with_size(&a, &n, i) >= 0);
+        assert_se(n == 2);
+        assert_se(strv_push_with_size(&a, &n, j) >= 0);
+        assert_se(n == 3);
+
+        assert_se(streq_ptr(a[0], "foo"));
+        assert_se(streq_ptr(a[1], "a"));
+        assert_se(streq_ptr(a[2], "b"));
+        assert_se(streq_ptr(a[3], NULL));
+
+        assert_se(n = strv_length(a));
+}
+
+TEST(strv_push) {
+        _cleanup_strv_free_ char **a = NULL;
+        char *i, *j;
 
         assert_se(i = strdup("foo"));
         assert_se(strv_push(&a, i) >= 0);
@@ -757,14 +774,12 @@
         assert_se(streq_ptr(a[3], NULL));
 }
 
-static void test_strv_compare(void) {
+TEST(strv_compare) {
         _cleanup_strv_free_ char **a = NULL;
         _cleanup_strv_free_ char **b = NULL;
         _cleanup_strv_free_ char **c = NULL;
         _cleanup_strv_free_ char **d = NULL;
 
-        log_info("/* %s */", __func__);
-
         a = strv_new("one", "two", "three");
         assert_se(a);
         b = strv_new("one", "two", "three");
@@ -786,11 +801,9 @@
         assert_se(strv_compare(b, NULL) == 1);
 }
 
-static void test_strv_is_uniq(void) {
+TEST(strv_is_uniq) {
         _cleanup_strv_free_ char **a = NULL, **b = NULL, **c = NULL, **d = NULL;
 
-        log_info("/* %s */", __func__);
-
         a = strv_new(NULL);
         assert_se(a);
         assert_se(strv_is_uniq(a));
@@ -808,11 +821,9 @@
         assert_se(!strv_is_uniq(d));
 }
 
-static void test_strv_reverse(void) {
+TEST(strv_reverse) {
         _cleanup_strv_free_ char **a = NULL, **b = NULL, **c = NULL, **d = NULL;
 
-        log_info("/* %s */", __func__);
-
         a = strv_new(NULL);
         assert_se(a);
 
@@ -841,11 +852,9 @@
         assert_se(streq_ptr(d[3], NULL));
 }
 
-static void test_strv_shell_escape(void) {
+TEST(strv_shell_escape) {
         _cleanup_strv_free_ char **v = NULL;
 
-        log_info("/* %s */", __func__);
-
         v = strv_new("foo:bar", "bar,baz", "wal\\do");
         assert_se(v);
         assert_se(strv_shell_escape(v, ",:"));
@@ -860,9 +869,7 @@
         assert_se(strv_equal(a, b));
 }
 
-static void test_strv_skip(void) {
-        log_info("/* %s */", __func__);
-
+TEST(strv_skip) {
         test_strv_skip_one(STRV_MAKE("foo", "bar", "baz"), 0, STRV_MAKE("foo", "bar", "baz"));
         test_strv_skip_one(STRV_MAKE("foo", "bar", "baz"), 1, STRV_MAKE("bar", "baz"));
         test_strv_skip_one(STRV_MAKE("foo", "bar", "baz"), 2, STRV_MAKE("baz"));
@@ -879,11 +886,9 @@
         test_strv_skip_one(STRV_MAKE(NULL), 55, STRV_MAKE(NULL));
 }
 
-static void test_strv_extend_n(void) {
+TEST(strv_extend_n) {
         _cleanup_strv_free_ char **v = NULL;
 
-        log_info("/* %s */", __func__);
-
         v = strv_new("foo", "bar");
         assert_se(v);
 
@@ -908,152 +913,45 @@
         assert_se(v[1] == NULL);
 }
 
-static void test_strv_make_nulstr_one(char **l) {
-        _cleanup_free_ char *b = NULL, *c = NULL;
-        _cleanup_strv_free_ char **q = NULL;
-        const char *s = NULL;
-        size_t n, m;
-        unsigned i = 0;
-
-        log_info("/* %s */", __func__);
-
-        assert_se(strv_make_nulstr(l, &b, &n) >= 0);
-        assert_se(q = strv_parse_nulstr(b, n));
-        assert_se(strv_equal(l, q));
-
-        assert_se(strv_make_nulstr(q, &c, &m) >= 0);
-        assert_se(m == n);
-        assert_se(memcmp(b, c, m) == 0);
-
-        NULSTR_FOREACH(s, b)
-                assert_se(streq(s, l[i++]));
-        assert_se(i == strv_length(l));
-}
-
-static void test_strv_make_nulstr(void) {
-        log_info("/* %s */", __func__);
-
-        test_strv_make_nulstr_one(NULL);
-        test_strv_make_nulstr_one(STRV_MAKE(NULL));
-        test_strv_make_nulstr_one(STRV_MAKE("foo"));
-        test_strv_make_nulstr_one(STRV_MAKE("foo", "bar"));
-        test_strv_make_nulstr_one(STRV_MAKE("foo", "bar", "quuux"));
-}
-
-static void test_strv_free_free(void) {
-        char ***t;
-
-        log_info("/* %s */", __func__);
-
-        assert_se(t = new(char**, 3));
-        assert_se(t[0] = strv_new("a", "b"));
-        assert_se(t[1] = strv_new("c", "d", "e"));
-        t[2] = NULL;
-
-        t = strv_free_free(t);
-}
-
-static void test_foreach_string(void) {
+TEST(foreach_string) {
         const char * const t[] = {
                 "foo",
                 "bar",
                 "waldo",
                 NULL
         };
-        const char *x;
+
         unsigned i = 0;
-
-        log_info("/* %s */", __func__);
-
         FOREACH_STRING(x, "foo", "bar", "waldo")
                 assert_se(streq_ptr(t[i++], x));
-
         assert_se(i == 3);
 
         FOREACH_STRING(x, "zzz")
                 assert_se(streq(x, "zzz"));
 }
 
-static void test_strv_fnmatch(void) {
+TEST(strv_fnmatch) {
         _cleanup_strv_free_ char **v = NULL;
         size_t pos;
 
-        log_info("/* %s */", __func__);
-
         assert_se(!strv_fnmatch(STRV_MAKE_EMPTY, "a"));
 
         v = strv_new("xxx", "*\\*", "yyy");
         assert_se(!strv_fnmatch_full(v, "\\", 0, NULL));
         assert_se(strv_fnmatch_full(v, "\\", FNM_NOESCAPE, &pos));
-        assert(pos == 1);
+        assert_se(pos == 1);
 }
 
-int main(int argc, char *argv[]) {
-        test_str_in_set();
-        test_strptr_in_set();
-        test_startswith_set();
-        test_strv_foreach();
-        test_strv_foreach_backwards();
-        test_strv_foreach_pair();
-        test_strv_find();
-        test_strv_find_prefix();
-        test_strv_find_startswith();
-        test_strv_join();
-        test_strv_join_full();
+TEST(strv_extend_join) {
+        _cleanup_strv_free_ char **v = NULL;
 
-        test_strv_unquote("    foo=bar     \"waldo\"    zzz    ", STRV_MAKE("foo=bar", "waldo", "zzz"));
-        test_strv_unquote("", STRV_MAKE_EMPTY);
-        test_strv_unquote(" ", STRV_MAKE_EMPTY);
-        test_strv_unquote("   ", STRV_MAKE_EMPTY);
-        test_strv_unquote("   x", STRV_MAKE("x"));
-        test_strv_unquote("x   ", STRV_MAKE("x"));
-        test_strv_unquote("  x   ", STRV_MAKE("x"));
-        test_strv_unquote("  \"x\"   ", STRV_MAKE("x"));
-        test_strv_unquote("  'x'   ", STRV_MAKE("x"));
-        test_strv_unquote("  'x\"'   ", STRV_MAKE("x\""));
-        test_strv_unquote("  \"x'\"   ", STRV_MAKE("x'"));
-        test_strv_unquote("a  '--b=c \"d e\"'", STRV_MAKE("a", "--b=c \"d e\""));
+        assert_se(strv_extend_assignment(&v, "MESSAGE", "ABC") >= 0);
+        assert_se(strv_extend_assignment(&v, "ABC", "QER") >= 0);
+        assert_se(strv_extend_assignment(&v, "MISSING", NULL) >= 0);
 
-        /* trailing backslashes */
-        test_strv_unquote("  x\\\\", STRV_MAKE("x\\"));
-        test_invalid_unquote("  x\\");
-
-        test_invalid_unquote("a  --b='c \"d e\"''");
-        test_invalid_unquote("a  --b='c \"d e\" '\"");
-        test_invalid_unquote("a  --b='c \"d e\"garbage");
-        test_invalid_unquote("'");
-        test_invalid_unquote("\"");
-        test_invalid_unquote("'x'y'g");
-
-        test_strv_split();
-        test_strv_split_empty();
-        test_strv_split_full();
-        test_strv_split_colon_pairs();
-        test_strv_split_newlines();
-        test_strv_split_newlines_full();
-        test_strv_split_nulstr();
-        test_strv_parse_nulstr();
-        test_strv_overlap();
-        test_strv_sort();
-        test_strv_extend_strv();
-        test_strv_extend_strv_concat();
-        test_strv_extend();
-        test_strv_extendf();
-        test_strv_from_stdarg_alloca();
-        test_strv_insert();
-        test_strv_push_prepend();
-        test_strv_push();
-        test_strv_compare();
-        test_strv_is_uniq();
-        test_strv_reverse();
-        test_strv_shell_escape();
-        test_strv_skip();
-        test_strv_extend_n();
-        test_strv_make_nulstr();
-        test_strv_free_free();
-
-        test_foreach_string();
-        test_strv_fnmatch();
-
-        return 0;
+        assert_se(strv_length(v) == 2);
+        assert_se(streq(v[0], "MESSAGE=ABC"));
+        assert_se(streq(v[1], "ABC=QER"));
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-strxcpyx.c b/src/test/test-strxcpyx.c
index 4b6d8eb..b679522 100644
--- a/src/test/test-strxcpyx.c
+++ b/src/test/test-strxcpyx.c
@@ -4,89 +4,165 @@
 
 #include "string-util.h"
 #include "strxcpyx.h"
-#include "util.h"
+#include "tests.h"
 
-static void test_strpcpy(void) {
+TEST(strpcpy) {
         char target[25];
         char *s = target;
         size_t space_left;
+        bool truncated;
 
         space_left = sizeof(target);
-        space_left = strpcpy(&s, space_left, "12345");
-        space_left = strpcpy(&s, space_left, "hey hey hey");
-        space_left = strpcpy(&s, space_left, "waldo");
-        space_left = strpcpy(&s, space_left, "ba");
-        space_left = strpcpy(&s, space_left, "r");
-        space_left = strpcpy(&s, space_left, "foo");
-
+        space_left = strpcpy_full(&s, space_left, "12345", &truncated);
+        assert_se(!truncated);
+        space_left = strpcpy_full(&s, space_left, "hey hey hey", &truncated);
+        assert_se(!truncated);
+        space_left = strpcpy_full(&s, space_left, "waldo", &truncated);
+        assert_se(!truncated);
+        space_left = strpcpy_full(&s, space_left, "ba", &truncated);
+        assert_se(!truncated);
+        space_left = strpcpy_full(&s, space_left, "r", &truncated);
+        assert_se(!truncated);
+        assert_se(space_left == 1);
         assert_se(streq(target, "12345hey hey heywaldobar"));
+
+        space_left = strpcpy_full(&s, space_left, "", &truncated);
+        assert_se(!truncated);
+        assert_se(space_left == 1);
+        assert_se(streq(target, "12345hey hey heywaldobar"));
+
+        space_left = strpcpy_full(&s, space_left, "f", &truncated);
+        assert_se(truncated);
         assert_se(space_left == 0);
+        assert_se(streq(target, "12345hey hey heywaldobar"));
+
+        space_left = strpcpy_full(&s, space_left, "", &truncated);
+        assert_se(!truncated);
+        assert_se(space_left == 0);
+        assert_se(streq(target, "12345hey hey heywaldobar"));
+
+        space_left = strpcpy_full(&s, space_left, "foo", &truncated);
+        assert_se(truncated);
+        assert_se(space_left == 0);
+        assert_se(streq(target, "12345hey hey heywaldobar"));
 }
 
-static void test_strpcpyf(void) {
+TEST(strpcpyf) {
         char target[25];
         char *s = target;
         size_t space_left;
+        bool truncated;
 
         space_left = sizeof(target);
-        space_left = strpcpyf(&s, space_left, "space left: %zu. ", space_left);
-        space_left = strpcpyf(&s, space_left, "foo%s", "bar");
-
-        assert_se(streq(target, "space left: 25. foobar"));
+        space_left = strpcpyf_full(&s, space_left, &truncated, "space left: %zu. ", space_left);
+        assert_se(!truncated);
+        space_left = strpcpyf_full(&s, space_left, &truncated, "foo%s", "bar");
+        assert_se(!truncated);
         assert_se(space_left == 3);
+        assert_se(streq(target, "space left: 25. foobar"));
+
+        space_left = strpcpyf_full(&s, space_left, &truncated, "%i", 42);
+        assert_se(!truncated);
+        assert_se(space_left == 1);
+        assert_se(streq(target, "space left: 25. foobar42"));
+
+        space_left = strpcpyf_full(&s, space_left, &truncated, "%s", "");
+        assert_se(!truncated);
+        assert_se(space_left == 1);
+        assert_se(streq(target, "space left: 25. foobar42"));
+
+        space_left = strpcpyf_full(&s, space_left, &truncated, "%c", 'x');
+        assert_se(truncated);
+        assert_se(space_left == 0);
+        assert_se(streq(target, "space left: 25. foobar42"));
+
+        space_left = strpcpyf_full(&s, space_left, &truncated, "%s", "");
+        assert_se(!truncated);
+        assert_se(space_left == 0);
+        assert_se(streq(target, "space left: 25. foobar42"));
+
+        space_left = strpcpyf_full(&s, space_left, &truncated, "abc%s", "hoge");
+        assert_se(truncated);
+        assert_se(space_left == 0);
+        assert_se(streq(target, "space left: 25. foobar42"));
 
         /* test overflow */
         s = target;
-        space_left = strpcpyf(&s, 12, "00 left: %i. ", 999);
+        space_left = strpcpyf_full(&s, 12, &truncated, "00 left: %i. ", 999);
+        assert_se(truncated);
         assert_se(streq(target, "00 left: 99"));
         assert_se(space_left == 0);
         assert_se(target[12] == '2');
 }
 
-static void test_strpcpyl(void) {
+TEST(strpcpyl) {
         char target[25];
         char *s = target;
         size_t space_left;
+        bool truncated;
 
         space_left = sizeof(target);
-        space_left = strpcpyl(&s, space_left, "waldo", " test", " waldo. ", NULL);
-        space_left = strpcpyl(&s, space_left, "Banana", NULL);
-
-        assert_se(streq(target, "waldo test waldo. Banana"));
+        space_left = strpcpyl_full(&s, space_left, &truncated, "waldo", " test", " waldo. ", NULL);
+        assert_se(!truncated);
+        space_left = strpcpyl_full(&s, space_left, &truncated, "Banana", NULL);
+        assert_se(!truncated);
         assert_se(space_left == 1);
+        assert_se(streq(target, "waldo test waldo. Banana"));
+
+        space_left = strpcpyl_full(&s, space_left, &truncated, "", "", "", NULL);
+        assert_se(!truncated);
+        assert_se(space_left == 1);
+        assert_se(streq(target, "waldo test waldo. Banana"));
+
+        space_left = strpcpyl_full(&s, space_left, &truncated, "", "x", "", NULL);
+        assert_se(truncated);
+        assert_se(space_left == 0);
+        assert_se(streq(target, "waldo test waldo. Banana"));
+
+        space_left = strpcpyl_full(&s, space_left, &truncated, "hoge", NULL);
+        assert_se(truncated);
+        assert_se(space_left == 0);
+        assert_se(streq(target, "waldo test waldo. Banana"));
 }
 
-static void test_strscpy(void) {
+TEST(strscpy) {
         char target[25];
         size_t space_left;
+        bool truncated;
 
         space_left = sizeof(target);
-        space_left = strscpy(target, space_left, "12345");
+        space_left = strscpy_full(target, space_left, "12345", &truncated);
+        assert_se(!truncated);
 
         assert_se(streq(target, "12345"));
         assert_se(space_left == 20);
 }
 
-static void test_strscpyl(void) {
+TEST(strscpyl) {
         char target[25];
         size_t space_left;
+        bool truncated;
 
         space_left = sizeof(target);
-        space_left = strscpyl(target, space_left, "12345", "waldo", "waldo", NULL);
+        space_left = strscpyl_full(target, space_left, &truncated, "12345", "waldo", "waldo", NULL);
+        assert_se(!truncated);
 
         assert_se(streq(target, "12345waldowaldo"));
         assert_se(space_left == 10);
 }
 
-static void test_sd_event_code_migration(void) {
+TEST(sd_event_code_migration) {
         char b[100 * DECIMAL_STR_MAX(unsigned) + 1];
         char c[100 * DECIMAL_STR_MAX(unsigned) + 1], *p;
         unsigned i;
         size_t l;
-        int o;
+        int o, r;
 
-        for (i = o = 0; i < 100; i++)
-                o += snprintf(&b[o], sizeof(b) - o, "%u ", i);
+        for (i = o = 0; i < 100; i++) {
+                r = snprintf(&b[o], sizeof(b) - o, "%u ", i);
+                assert_se(r >= 0 && r < (int) sizeof(b) - o);
+                o += r;
+        }
 
         p = c;
         l = sizeof(c);
@@ -96,14 +172,4 @@
         assert_se(streq(b, c));
 }
 
-int main(int argc, char *argv[]) {
-        test_strpcpy();
-        test_strpcpyf();
-        test_strpcpyl();
-        test_strscpy();
-        test_strscpyl();
-
-        test_sd_event_code_migration();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-sysctl-util.c b/src/test/test-sysctl-util.c
index a6f449b..81207f5 100644
--- a/src/test/test-sysctl-util.c
+++ b/src/test/test-sysctl-util.c
@@ -1,10 +1,16 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <sys/utsname.h>
+
+#include "sd-id128.h"
+
+#include "errno-util.h"
+#include "hostname-util.h"
 #include "strv.h"
 #include "sysctl-util.h"
 #include "tests.h"
 
-static const char* cases[] = {
+static const char* const cases[] = {
         "a.b.c", "a/b/c",
         "a/b/c", "a/b/c",
         "a/b.c/d", "a/b.c/d",
@@ -20,10 +26,7 @@
         NULL,
 };
 
-static void test_sysctl_normalize(void) {
-        log_info("/* %s */", __func__);
-
-        const char **s, **expected;
+TEST(sysctl_normalize) {
         STRV_FOREACH_PAIR(s, expected, cases) {
                 _cleanup_free_ char *t;
 
@@ -35,10 +38,38 @@
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
+TEST(sysctl_read) {
+        _cleanup_free_ char *s = NULL;
+        struct utsname u;
+        sd_id128_t a, b;
+        int r;
 
-        test_sysctl_normalize();
+        assert_se(sysctl_read("kernel/random/boot_id", &s) >= 0);
+        assert_se(sd_id128_from_string(s, &a) >= 0);
+        assert_se(sd_id128_get_boot(&b) >= 0);
+        assert_se(sd_id128_equal(a, b));
+        s = mfree(s);
 
-        return 0;
+        assert_se(sysctl_read_ip_property(AF_INET, "lo", "forwarding", &s));
+        assert_se(STR_IN_SET(s, "0", "1"));
+
+        r = sysctl_write_ip_property(AF_INET, "lo", "forwarding", s);
+        assert_se(r >= 0 || ERRNO_IS_PRIVILEGE(r) || r == -EROFS);
+        s = mfree(s);
+
+        assert_se(sysctl_read_ip_property(AF_INET, NULL, "ip_forward", &s));
+        assert_se(STR_IN_SET(s, "0", "1"));
+
+        r = sysctl_write_ip_property(AF_INET, NULL, "ip_forward", s);
+        assert_se(r >= 0 || ERRNO_IS_PRIVILEGE(r) || r == -EROFS);
+        s = mfree(s);
+
+        assert_se(sysctl_read("kernel/hostname", &s) >= 0);
+        assert_se(uname(&u) >= 0);
+        assert_se(streq_ptr(s, u.nodename));
+
+        r = sysctl_write("kernel/hostname", s);
+        assert_se(r >= 0 || ERRNO_IS_PRIVILEGE(r) || r == -EROFS);
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-tables.c b/src/test/test-tables.c
index 3e5df04..6301ded 100644
--- a/src/test/test-tables.c
+++ b/src/test/test-tables.c
@@ -36,7 +36,6 @@
 #include "timer.h"
 #include "unit-name.h"
 #include "unit.h"
-#include "util.h"
 #include "virt.h"
 
 int main(int argc, char **argv) {
@@ -116,14 +115,13 @@
         test_table(timer_state, TIMER_STATE);
         test_table(unit_active_state, UNIT_ACTIVE_STATE);
         test_table(unit_dependency, UNIT_DEPENDENCY);
-        test_table(unit_file_change_type, UNIT_FILE_CHANGE_TYPE);
-        test_table(unit_file_preset_mode, UNIT_FILE_PRESET);
+        test_table(install_change_type, INSTALL_CHANGE_TYPE);
+        test_table(unit_file_preset_mode, UNIT_FILE_PRESET_MODE);
         test_table(unit_file_state, UNIT_FILE_STATE);
         test_table(unit_load_state, UNIT_LOAD_STATE);
         test_table(unit_type, UNIT_TYPE);
         test_table(virtualization, VIRTUALIZATION);
-
-        test_table_sparse(object_compressed, OBJECT_COMPRESSED);
+        test_table(compression, COMPRESSION);
 
         assert_cc(sizeof(sd_device_action_t) == sizeof(int64_t));
 
diff --git a/src/test/test-terminal-util.c b/src/test/test-terminal-util.c
index e793a74..8d5b24e 100644
--- a/src/test/test-terminal-util.c
+++ b/src/test/test-terminal-util.c
@@ -14,7 +14,6 @@
 #include "terminal-util.h"
 #include "tests.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
 #define LOREM_IPSUM "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor " \
         "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation " \
@@ -22,9 +21,7 @@
         "in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " \
         "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
 
-static void test_default_term_for_tty(void) {
-        log_info("/* %s */", __func__);
-
+TEST(default_term_for_tty) {
         puts(default_term_for_tty("/dev/tty23"));
         puts(default_term_for_tty("/dev/ttyS23"));
         puts(default_term_for_tty("/dev/tty0"));
@@ -39,14 +36,12 @@
         puts(default_term_for_tty("console"));
 }
 
-static void test_read_one_char(void) {
+TEST(read_one_char) {
         _cleanup_fclose_ FILE *file = NULL;
         char r;
         bool need_nl;
         char name[] = "/tmp/test-read_one_char.XXXXXX";
 
-        log_info("/* %s */", __func__);
-
         assert_se(fmkostemp_safe(name, "r+", &file) == 0);
 
         assert_se(fputs("c\n", file) >= 0);
@@ -69,11 +64,9 @@
         assert_se(unlink(name) >= 0);
 }
 
-static void test_getttyname_malloc(void) {
+TEST(getttyname_malloc) {
         _cleanup_free_ char *ttyname = NULL;
-        _cleanup_close_ int master = -1;
-
-        log_info("/* %s */", __func__);
+        _cleanup_close_ int master = -EBADF;
 
         assert_se((master = posix_openpt(O_RDWR|O_NOCTTY)) >= 0);
         assert_se(getttyname_malloc(master, &ttyname) >= 0);
@@ -130,16 +123,12 @@
         { "highlight-grey-underline", ansi_highlight_grey_underline },
 };
 
-static void test_colors(void) {
-        log_info("/* %s */", __func__);
-
+TEST(colors) {
         for (size_t i = 0; i < ELEMENTSOF(colors); i++)
                 printf("<%s%s%s>\n", colors[i].func(), colors[i].name, ansi_normal());
 }
 
-static void test_text(void) {
-        log_info("/* %s */", __func__);
-
+TEST(text) {
         for (size_t i = 0; !streq(colors[i].name, "underline"); i++) {
                 bool blwh = strstr(colors[i].name, "black")
                         || strstr(colors[i].name, "white");
@@ -154,7 +143,7 @@
         }
 }
 
-static void test_get_ctty(void) {
+TEST(get_ctty) {
         _cleanup_free_ char *ctty = NULL;
         struct stat st;
         dev_t devnr;
@@ -177,15 +166,4 @@
                 log_notice("Not invoked with stdin == ctty, cutting get_ctty() test short");
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
-        test_default_term_for_tty();
-        test_read_one_char();
-        test_getttyname_malloc();
-        test_colors();
-        test_text();
-        test_get_ctty();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
index 6f4675a..0fb7639 100644
--- a/src/test/test-time-util.c
+++ b/src/test/test-time-util.c
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "env-util.h"
 #include "random-util.h"
 #include "serialize.h"
 #include "string-util.h"
@@ -7,11 +8,9 @@
 #include "tests.h"
 #include "time-util.h"
 
-static void test_parse_sec(void) {
+TEST(parse_sec) {
         usec_t u;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_sec("5s", &u) >= 0);
         assert_se(u == 5 * USEC_PER_SEC);
         assert_se(parse_sec("5s500ms", &u) >= 0);
@@ -71,11 +70,9 @@
         assert_se(parse_sec("1234..", &u) < 0);
 }
 
-static void test_parse_sec_fix_0(void) {
+TEST(parse_sec_fix_0) {
         usec_t u;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_sec_fix_0("5s", &u) >= 0);
         assert_se(u == 5 * USEC_PER_SEC);
         assert_se(parse_sec_fix_0("0s", &u) >= 0);
@@ -86,11 +83,9 @@
         assert_se(u == USEC_INFINITY);
 }
 
-static void test_parse_sec_def_infinity(void) {
+TEST(parse_sec_def_infinity) {
         usec_t u;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_sec_def_infinity("5s", &u) >= 0);
         assert_se(u == 5 * USEC_PER_SEC);
         assert_se(parse_sec_def_infinity("", &u) >= 0);
@@ -106,11 +101,9 @@
         assert_se(parse_sec_def_infinity("-5s", &u) < 0);
 }
 
-static void test_parse_time(void) {
+TEST(parse_time) {
         usec_t u;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_time("5", &u, 1) >= 0);
         assert_se(u == 5);
 
@@ -133,11 +126,9 @@
         assert_se(parse_time("1.1111111111111y", &u, 1) >= 0);
 }
 
-static void test_parse_nsec(void) {
+TEST(parse_nsec) {
         nsec_t u;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_nsec("5s", &u) >= 0);
         assert_se(u == 5 * NSEC_PER_SEC);
         assert_se(parse_nsec("5s500ms", &u) >= 0);
@@ -216,7 +207,7 @@
         assert_se(x / accuracy == y / accuracy);
 }
 
-static void test_format_timespan(usec_t accuracy) {
+static void test_format_timespan_accuracy(usec_t accuracy) {
         log_info("/* %s accuracy="USEC_FMT" */", __func__, accuracy);
 
         test_format_timespan_one(0, accuracy);
@@ -243,9 +234,18 @@
         test_format_timespan_one(USEC_INFINITY, accuracy);
 }
 
-static void test_verify_timezone(void) {
-        log_info("/* %s */", __func__);
+TEST(format_timespan) {
+        test_format_timespan_accuracy(1);
+        test_format_timespan_accuracy(USEC_PER_MSEC);
+        test_format_timespan_accuracy(USEC_PER_SEC);
 
+        /* See issue #23928. */
+        _cleanup_free_ char *buf;
+        assert_se(buf = new(char, 5));
+        assert_se(buf == format_timespan(buf, 5, 100005, 1000));
+}
+
+TEST(verify_timezone) {
         assert_se(verify_timezone("Europe/Berlin", LOG_DEBUG) == 0);
         assert_se(verify_timezone("Australia/Sydney", LOG_DEBUG) == 0);
         assert_se(verify_timezone("Europe/Do not exist", LOG_DEBUG) == -EINVAL);
@@ -254,20 +254,15 @@
         assert_se(verify_timezone("DoNotExist/", LOG_DEBUG) == -EINVAL);
 }
 
-static void test_timezone_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(timezone_is_valid) {
         assert_se(timezone_is_valid("Europe/Berlin", LOG_ERR));
         assert_se(timezone_is_valid("Australia/Sydney", LOG_ERR));
         assert_se(!timezone_is_valid("Europe/Do not exist", LOG_ERR));
 }
 
-static void test_get_timezones(void) {
+TEST(get_timezones) {
         _cleanup_strv_free_ char **zones = NULL;
         int r;
-        char **zone;
-
-        log_info("/* %s */", __func__);
 
         r = get_timezones(&zones);
         assert_se(r == 0);
@@ -279,9 +274,7 @@
         }
 }
 
-static void test_usec_add(void) {
-        log_info("/* %s */", __func__);
-
+TEST(usec_add) {
         assert_se(usec_add(0, 0) == 0);
         assert_se(usec_add(1, 4) == 5);
         assert_se(usec_add(USEC_INFINITY, 5) == USEC_INFINITY);
@@ -292,9 +285,7 @@
         assert_se(usec_add(USEC_INFINITY, 2) == USEC_INFINITY);
 }
 
-static void test_usec_sub_unsigned(void) {
-        log_info("/* %s */", __func__);
-
+TEST(usec_sub_unsigned) {
         assert_se(usec_sub_unsigned(0, 0) == 0);
         assert_se(usec_sub_unsigned(0, 2) == 0);
         assert_se(usec_sub_unsigned(0, USEC_INFINITY) == 0);
@@ -315,34 +306,50 @@
         assert_se(usec_sub_unsigned(USEC_INFINITY, USEC_INFINITY) == USEC_INFINITY);
 }
 
-static void test_usec_sub_signed(void) {
-        log_info("/* %s */", __func__);
-
+TEST(usec_sub_signed) {
         assert_se(usec_sub_signed(0, 0) == 0);
         assert_se(usec_sub_signed(4, 1) == 3);
         assert_se(usec_sub_signed(4, 4) == 0);
         assert_se(usec_sub_signed(4, 5) == 0);
+
         assert_se(usec_sub_signed(USEC_INFINITY-3, -3) == USEC_INFINITY);
         assert_se(usec_sub_signed(USEC_INFINITY-3, -4) == USEC_INFINITY);
         assert_se(usec_sub_signed(USEC_INFINITY-3, -5) == USEC_INFINITY);
         assert_se(usec_sub_signed(USEC_INFINITY, 5) == USEC_INFINITY);
+
+        assert_se(usec_sub_signed(0, INT64_MAX) == 0);
+        assert_se(usec_sub_signed(0, -INT64_MAX) == INT64_MAX);
+        assert_se(usec_sub_signed(0, INT64_MIN) == (usec_t) INT64_MAX + 1);
+        assert_se(usec_sub_signed(0, -(INT64_MIN+1)) == 0);
+
+        assert_se(usec_sub_signed(USEC_INFINITY, INT64_MAX) == USEC_INFINITY);
+        assert_se(usec_sub_signed(USEC_INFINITY, -INT64_MAX) == USEC_INFINITY);
+        assert_se(usec_sub_signed(USEC_INFINITY, INT64_MIN) == USEC_INFINITY);
+        assert_se(usec_sub_signed(USEC_INFINITY, -(INT64_MIN+1)) == USEC_INFINITY);
+
+        assert_se(usec_sub_signed(USEC_INFINITY-1, INT64_MAX) == USEC_INFINITY-1-INT64_MAX);
+        assert_se(usec_sub_signed(USEC_INFINITY-1, -INT64_MAX) == USEC_INFINITY);
+        assert_se(usec_sub_signed(USEC_INFINITY-1, INT64_MIN) == USEC_INFINITY);
+        assert_se(usec_sub_signed(USEC_INFINITY-1, -(INT64_MIN+1)) == USEC_INFINITY-1-((usec_t) (-(INT64_MIN+1))));
 }
 
-static void test_format_timestamp(void) {
-        log_info("/* %s */", __func__);
-
+TEST(format_timestamp) {
         for (unsigned i = 0; i < 100; i++) {
-                char buf[MAX(FORMAT_TIMESTAMP_MAX, FORMAT_TIMESPAN_MAX)];
+                char buf[CONST_MAX(FORMAT_TIMESTAMP_MAX, FORMAT_TIMESPAN_MAX)];
                 usec_t x, y;
 
-                random_bytes(&x, sizeof(x));
-                x = x % (2147483600 * USEC_PER_SEC) + 1;
+                x = random_u64_range(2147483600 * USEC_PER_SEC) + 1;
 
                 assert_se(format_timestamp(buf, sizeof(buf), x));
                 log_debug("%s", buf);
                 assert_se(parse_timestamp(buf, &y) >= 0);
                 assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC);
 
+                assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UNIX));
+                log_debug("%s", buf);
+                assert_se(parse_timestamp(buf, &y) >= 0);
+                assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC);
+
                 assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UTC));
                 log_debug("%s", buf);
                 assert_se(parse_timestamp(buf, &y) >= 0);
@@ -358,6 +365,13 @@
                 assert_se(parse_timestamp(buf, &y) >= 0);
                 assert_se(x == y);
 
+                if (x > 2 * USEC_PER_DAY) {
+                        assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_DATE));
+                        log_debug("%s", buf);
+                        assert_se(parse_timestamp(buf, &y) >= 0);
+                        assert_se(y > usec_sub_unsigned(x, 2 * USEC_PER_DAY) && y < usec_add(x, 2 * USEC_PER_DAY));
+                }
+
                 assert_se(format_timestamp_relative(buf, sizeof(buf), x));
                 log_debug("%s", buf);
                 assert_se(parse_timestamp(buf, &y) >= 0);
@@ -370,10 +384,25 @@
         }
 }
 
-static void test_format_timestamp_relative(void) {
-        log_info("/* %s */", __func__);
+TEST(FORMAT_TIMESTAMP) {
+        for (unsigned i = 0; i < 100; i++) {
+                _cleanup_free_ char *buf;
+                usec_t x, y;
 
-        char buf[MAX(FORMAT_TIMESTAMP_MAX, FORMAT_TIMESPAN_MAX)];
+                x = random_u64_range(2147483600 * USEC_PER_SEC) + 1;
+
+                /* strbuf() is to test the macro in an argument to a function call. */
+                assert_se(buf = strdup(FORMAT_TIMESTAMP(x)));
+                log_debug("%s", buf);
+                assert_se(parse_timestamp(buf, &y) >= 0);
+                assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC);
+
+                assert_se(streq(FORMAT_TIMESTAMP(x), buf));
+        }
+}
+
+TEST(format_timestamp_relative) {
+        char buf[CONST_MAX(FORMAT_TIMESTAMP_MAX, FORMAT_TIMESPAN_MAX)];
         usec_t x;
 
         /* Only testing timestamps in the past so we don't need to add some delta to account for time passing
@@ -444,38 +473,48 @@
         assert_se(streq(buf, "2 weeks 2 days ago"));
 }
 
-static void test_format_timestamp_utc_one(usec_t val, const char *result) {
+static void test_format_timestamp_one(usec_t val, TimestampStyle style, const char *result) {
         char buf[FORMAT_TIMESTAMP_MAX];
         const char *t;
 
-        t = format_timestamp_style(buf, sizeof(buf), val, TIMESTAMP_UTC);
+        t = format_timestamp_style(buf, sizeof(buf), val, style);
         assert_se(streq_ptr(t, result));
 }
 
-static void test_format_timestamp_utc(void) {
-        log_info("/* %s */", __func__);
+TEST(format_timestamp_range) {
+        test_format_timestamp_one(0, TIMESTAMP_UTC, NULL);
+        test_format_timestamp_one(0, TIMESTAMP_DATE, NULL);
+        test_format_timestamp_one(0, TIMESTAMP_US_UTC, NULL);
 
-        test_format_timestamp_utc_one(0, NULL);
-        test_format_timestamp_utc_one(1, "Thu 1970-01-01 00:00:00 UTC");
-        test_format_timestamp_utc_one(USEC_PER_SEC, "Thu 1970-01-01 00:00:01 UTC");
+        test_format_timestamp_one(1, TIMESTAMP_UTC, "Thu 1970-01-01 00:00:00 UTC");
+        test_format_timestamp_one(1, TIMESTAMP_DATE, "Thu 1970-01-01");
+        test_format_timestamp_one(1, TIMESTAMP_US_UTC, "Thu 1970-01-01 00:00:00.000001 UTC");
+
+        test_format_timestamp_one(USEC_PER_SEC, TIMESTAMP_UTC, "Thu 1970-01-01 00:00:01 UTC");
+        test_format_timestamp_one(USEC_PER_SEC, TIMESTAMP_DATE, "Thu 1970-01-01");
+        test_format_timestamp_one(USEC_PER_SEC, TIMESTAMP_US_UTC, "Thu 1970-01-01 00:00:01.000000 UTC");
 
 #if SIZEOF_TIME_T == 8
-        test_format_timestamp_utc_one(USEC_TIMESTAMP_FORMATTABLE_MAX, "Thu 9999-12-30 23:59:59 UTC");
-        test_format_timestamp_utc_one(USEC_TIMESTAMP_FORMATTABLE_MAX + 1, "--- XXXX-XX-XX XX:XX:XX");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX, TIMESTAMP_UTC, "Thu 9999-12-30 23:59:59 UTC");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX, TIMESTAMP_DATE, "Thu 9999-12-30");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX + 1, TIMESTAMP_UTC, "--- XXXX-XX-XX XX:XX:XX UTC");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX + 1, TIMESTAMP_US_UTC, "--- XXXX-XX-XX XX:XX:XX.XXXXXX UTC");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX + 1, TIMESTAMP_DATE, "--- XXXX-XX-XX");
 #elif SIZEOF_TIME_T == 4
-        test_format_timestamp_utc_one(USEC_TIMESTAMP_FORMATTABLE_MAX, "Tue 2038-01-19 03:14:07 UTC");
-        test_format_timestamp_utc_one(USEC_TIMESTAMP_FORMATTABLE_MAX + 1, "--- XXXX-XX-XX XX:XX:XX");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX, TIMESTAMP_UTC, "Tue 2038-01-19 03:14:07 UTC");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX, TIMESTAMP_DATE, "Tue 2038-01-19");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX + 1, TIMESTAMP_UTC, "--- XXXX-XX-XX XX:XX:XX UTC");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX + 1, TIMESTAMP_US_UTC, "--- XXXX-XX-XX XX:XX:XX.XXXXXX UTC");
+        test_format_timestamp_one(USEC_TIMESTAMP_FORMATTABLE_MAX + 1, TIMESTAMP_DATE, "--- XXXX-XX-XX");
 #endif
 
-        test_format_timestamp_utc_one(USEC_INFINITY, NULL);
+        test_format_timestamp_one(USEC_INFINITY, TIMESTAMP_UTC, NULL);
 }
 
-static void test_deserialize_dual_timestamp(void) {
+TEST(deserialize_dual_timestamp) {
         int r;
         dual_timestamp t;
 
-        log_info("/* %s */", __func__);
-
         r = deserialize_dual_timestamp("1234 5678", &t);
         assert_se(r == 0);
         assert_se(t.realtime == 1234);
@@ -520,37 +559,35 @@
         assert_se(d < 10*USEC_PER_SEC);
 }
 
-static void test_usec_shift_clock(void) {
+TEST(usec_shift_clock) {
         usec_t rt, mn, bt;
 
-        log_info("/* %s */", __func__);
-
         rt = now(CLOCK_REALTIME);
         mn = now(CLOCK_MONOTONIC);
-        bt = now(clock_boottime_or_monotonic());
+        bt = now(CLOCK_BOOTTIME);
 
         assert_se(usec_shift_clock(USEC_INFINITY, CLOCK_REALTIME, CLOCK_MONOTONIC) == USEC_INFINITY);
 
         assert_similar(usec_shift_clock(rt + USEC_PER_HOUR, CLOCK_REALTIME, CLOCK_MONOTONIC), mn + USEC_PER_HOUR);
-        assert_similar(usec_shift_clock(rt + 2*USEC_PER_HOUR, CLOCK_REALTIME, clock_boottime_or_monotonic()), bt + 2*USEC_PER_HOUR);
+        assert_similar(usec_shift_clock(rt + 2*USEC_PER_HOUR, CLOCK_REALTIME, CLOCK_BOOTTIME), bt + 2*USEC_PER_HOUR);
         assert_se(usec_shift_clock(rt + 3*USEC_PER_HOUR, CLOCK_REALTIME, CLOCK_REALTIME_ALARM) == rt + 3*USEC_PER_HOUR);
 
         assert_similar(usec_shift_clock(mn + 4*USEC_PER_HOUR, CLOCK_MONOTONIC, CLOCK_REALTIME_ALARM), rt + 4*USEC_PER_HOUR);
-        assert_similar(usec_shift_clock(mn + 5*USEC_PER_HOUR, CLOCK_MONOTONIC, clock_boottime_or_monotonic()), bt + 5*USEC_PER_HOUR);
+        assert_similar(usec_shift_clock(mn + 5*USEC_PER_HOUR, CLOCK_MONOTONIC, CLOCK_BOOTTIME), bt + 5*USEC_PER_HOUR);
         assert_se(usec_shift_clock(mn + 6*USEC_PER_HOUR, CLOCK_MONOTONIC, CLOCK_MONOTONIC) == mn + 6*USEC_PER_HOUR);
 
-        assert_similar(usec_shift_clock(bt + 7*USEC_PER_HOUR, clock_boottime_or_monotonic(), CLOCK_MONOTONIC), mn + 7*USEC_PER_HOUR);
-        assert_similar(usec_shift_clock(bt + 8*USEC_PER_HOUR, clock_boottime_or_monotonic(), CLOCK_REALTIME_ALARM), rt + 8*USEC_PER_HOUR);
-        assert_se(usec_shift_clock(bt + 9*USEC_PER_HOUR, clock_boottime_or_monotonic(), clock_boottime_or_monotonic()) == bt + 9*USEC_PER_HOUR);
+        assert_similar(usec_shift_clock(bt + 7*USEC_PER_HOUR, CLOCK_BOOTTIME, CLOCK_MONOTONIC), mn + 7*USEC_PER_HOUR);
+        assert_similar(usec_shift_clock(bt + 8*USEC_PER_HOUR, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM), rt + 8*USEC_PER_HOUR);
+        assert_se(usec_shift_clock(bt + 9*USEC_PER_HOUR, CLOCK_BOOTTIME, CLOCK_BOOTTIME) == bt + 9*USEC_PER_HOUR);
 
         if (mn > USEC_PER_MINUTE) {
                 assert_similar(usec_shift_clock(rt - 30 * USEC_PER_SEC, CLOCK_REALTIME_ALARM, CLOCK_MONOTONIC), mn - 30 * USEC_PER_SEC);
-                assert_similar(usec_shift_clock(rt - 50 * USEC_PER_SEC, CLOCK_REALTIME, clock_boottime_or_monotonic()), bt - 50 * USEC_PER_SEC);
+                assert_similar(usec_shift_clock(rt - 50 * USEC_PER_SEC, CLOCK_REALTIME, CLOCK_BOOTTIME), bt - 50 * USEC_PER_SEC);
         }
 }
 
-static void test_in_utc_timezone(void) {
-        log_info("/* %s */", __func__);
+TEST(in_utc_timezone) {
+        const char *tz = getenv("TZ");
 
         assert_se(setenv("TZ", ":UTC", 1) >= 0);
         assert_se(in_utc_timezone());
@@ -564,16 +601,14 @@
         assert_se(streq(tzname[0], "CET"));
         assert_se(streq(tzname[1], "CEST"));
 
-        assert_se(unsetenv("TZ") == 0);
+        assert_se(set_unset_env("TZ", tz, true) == 0);
+        tzset();
 }
 
-static void test_map_clock_usec(void) {
+TEST(map_clock_usec) {
         usec_t nowr, x, y, z;
 
-        log_info("/* %s */", __func__);
-        nowr = now(CLOCK_REALTIME);
-
-        x = nowr; /* right now */
+        x = nowr = now(CLOCK_REALTIME); /* right now */
         y = map_clock_usec(x, CLOCK_REALTIME, CLOCK_MONOTONIC);
         z = map_clock_usec(y, CLOCK_MONOTONIC, CLOCK_REALTIME);
         /* Converting forth and back will introduce inaccuracies, since we cannot query both clocks atomically, but it should be small. Even on the slowest CI smaller than 1h */
@@ -599,37 +634,13 @@
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
+static int intro(void) {
         log_info("realtime=" USEC_FMT "\n"
                  "monotonic=" USEC_FMT "\n"
                  "boottime=" USEC_FMT "\n",
                  now(CLOCK_REALTIME),
                  now(CLOCK_MONOTONIC),
-                 now(clock_boottime_or_monotonic()));
-
-        test_parse_sec();
-        test_parse_sec_fix_0();
-        test_parse_sec_def_infinity();
-        test_parse_time();
-        test_parse_nsec();
-        test_format_timespan(1);
-        test_format_timespan(USEC_PER_MSEC);
-        test_format_timespan(USEC_PER_SEC);
-        test_verify_timezone();
-        test_timezone_is_valid();
-        test_get_timezones();
-        test_usec_add();
-        test_usec_sub_signed();
-        test_usec_sub_unsigned();
-        test_format_timestamp();
-        test_format_timestamp_relative();
-        test_format_timestamp_utc();
-        test_deserialize_dual_timestamp();
-        test_usec_shift_clock();
-        test_in_utc_timezone();
-        test_map_clock_usec();
+                 now(CLOCK_BOOTTIME));
 
         /* Ensure time_t is signed */
         assert_cc((time_t) -1 < (time_t) 1);
@@ -637,7 +648,9 @@
         /* Ensure TIME_T_MAX works correctly */
         uintmax_t x = TIME_T_MAX;
         x++;
-        assert((time_t) x < 0);
+        assert_se((time_t) x < 0);
 
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-tmpfile-util.c b/src/test/test-tmpfile-util.c
index 9f2e615..415f185 100644
--- a/src/test/test-tmpfile-util.c
+++ b/src/test/test-tmpfile-util.c
@@ -3,6 +3,7 @@
 #include "alloc-util.h"
 #include "errno-util.h"
 #include "log.h"
+#include "path-util.h"
 #include "string-util.h"
 #include "tests.h"
 #include "tmpfile-util.h"
@@ -12,9 +13,11 @@
         int r;
 
         r = tempfn_random(p, extra, &s);
-        log_info_errno(r, "%s+%s → %s vs. %s (%i/%m vs. %i/%s)", p, strna(extra), strna(s), strna(expect), r, ret, strerror_safe(ret));
+        log_info("%s+%s → %s vs. %s (%i/%s vs. %i/%s)",
+                 p, strna(extra), strna(s), strna(expect),
+                 r, STRERROR(r), ret, STRERROR(ret));
 
-        assert(!s == !expect);
+        assert_se(!s == !expect);
         if (s) {
                 const char *suffix;
 
@@ -22,16 +25,17 @@
                 assert_se(in_charset(suffix, HEXDIGITS));
                 assert_se(strlen(suffix) == 16);
         }
-        assert(ret == r);
+        assert_se(ret == r);
 }
 
-static void test_tempfn_random(void) {
-        log_info("/* %s */", __func__);
+TEST(tempfn_random) {
+        _cleanup_free_ char *dir = NULL, *p = NULL, *q = NULL;
 
         test_tempfn_random_one("", NULL, NULL, -EINVAL);
         test_tempfn_random_one(".", NULL, NULL, -EADDRNOTAVAIL);
         test_tempfn_random_one("..", NULL, NULL, -EINVAL);
         test_tempfn_random_one("/", NULL, NULL, -EADDRNOTAVAIL);
+        test_tempfn_random_one("foo", "hoge/aaa", NULL, -EINVAL);
 
         test_tempfn_random_one("foo", NULL, ".#foo", 0);
         test_tempfn_random_one("foo", "bar", ".#barfoo", 0);
@@ -50,6 +54,36 @@
         test_tempfn_random_one("./foo/", "bar", ".#barfoo", 0);
         test_tempfn_random_one("../foo/", NULL, "../.#foo", 0);
         test_tempfn_random_one("../foo/", "bar", "../.#barfoo", 0);
+
+        assert_se(dir = new(char, PATH_MAX - 20));
+        memset(dir, 'x', PATH_MAX - 21);
+        dir[PATH_MAX - 21] = '\0';
+        for (size_t i = 0; i < PATH_MAX - 21; i += NAME_MAX + 1)
+                dir[i] = '/';
+
+        assert_se(p = path_join(dir, "a"));
+        assert_se(q = path_join(dir, ".#a"));
+
+        test_tempfn_random_one(p, NULL, q, 0);
+        test_tempfn_random_one(p, "b", NULL, -EINVAL);
+
+        p = mfree(p);
+        q = mfree(q);
+
+        assert_se(p = new(char, NAME_MAX + 1));
+        memset(p, 'x', NAME_MAX);
+        p[NAME_MAX] = '\0';
+
+        assert_se(q = new(char, NAME_MAX + 1));
+        memset(stpcpy(q, ".#"), 'x', NAME_MAX - STRLEN(".#") - 16);
+        q[NAME_MAX - 16] = '\0';
+
+        test_tempfn_random_one(p, NULL, q, 0);
+
+        memset(stpcpy(q, ".#hoge"), 'x', NAME_MAX - STRLEN(".#hoge") - 16);
+        q[NAME_MAX - 16] = '\0';
+
+        test_tempfn_random_one(p, "hoge", q, 0);
 }
 
 static void test_tempfn_xxxxxx_one(const char *p, const char *extra, const char *expect, int ret) {
@@ -57,25 +91,28 @@
         int r;
 
         r = tempfn_xxxxxx(p, extra, &s);
-        log_info_errno(r, "%s+%s → %s vs. %s (%i/%m vs. %i/%s)", p, strna(extra), strna(s), strna(expect), r, ret, strerror_safe(ret));
+        log_info("%s+%s → %s vs. %s (%i/%s vs. %i/%s)",
+                 p, strna(extra), strna(s), strna(expect),
+                 r, STRERROR(r), ret, STRERROR(ret));
 
-        assert(!s == !expect);
+        assert_se(!s == !expect);
         if (s) {
                 const char *suffix;
 
                 assert_se(suffix = startswith(s, expect));
                 assert_se(streq(suffix, "XXXXXX"));
         }
-        assert(ret == r);
+        assert_se(ret == r);
 }
 
-static void test_tempfn_xxxxxx(void) {
-        log_info("/* %s */", __func__);
+TEST(tempfn_xxxxxx) {
+        _cleanup_free_ char *dir = NULL, *p = NULL, *q = NULL;
 
         test_tempfn_xxxxxx_one("", NULL, NULL, -EINVAL);
         test_tempfn_xxxxxx_one(".", NULL, NULL, -EADDRNOTAVAIL);
         test_tempfn_xxxxxx_one("..", NULL, NULL, -EINVAL);
         test_tempfn_xxxxxx_one("/", NULL, NULL, -EADDRNOTAVAIL);
+        test_tempfn_xxxxxx_one("foo", "hoge/aaa", NULL, -EINVAL);
 
         test_tempfn_xxxxxx_one("foo", NULL, ".#foo", 0);
         test_tempfn_xxxxxx_one("foo", "bar", ".#barfoo", 0);
@@ -94,13 +131,110 @@
         test_tempfn_xxxxxx_one("./foo/", "bar", ".#barfoo", 0);
         test_tempfn_xxxxxx_one("../foo/", NULL, "../.#foo", 0);
         test_tempfn_xxxxxx_one("../foo/", "bar", "../.#barfoo", 0);
+
+        assert_se(dir = new(char, PATH_MAX - 10));
+        memset(dir, 'x', PATH_MAX - 11);
+        dir[PATH_MAX - 11] = '\0';
+        for (size_t i = 0; i < PATH_MAX - 11; i += NAME_MAX + 1)
+                dir[i] = '/';
+
+        assert_se(p = path_join(dir, "a"));
+        assert_se(q = path_join(dir, ".#a"));
+
+        test_tempfn_xxxxxx_one(p, NULL, q, 0);
+        test_tempfn_xxxxxx_one(p, "b", NULL, -EINVAL);
+
+        p = mfree(p);
+        q = mfree(q);
+
+        assert_se(p = new(char, NAME_MAX + 1));
+        memset(p, 'x', NAME_MAX);
+        p[NAME_MAX] = '\0';
+
+        assert_se(q = new(char, NAME_MAX + 1));
+        memset(stpcpy(q, ".#"), 'x', NAME_MAX - STRLEN(".#") - 6);
+        q[NAME_MAX - 6] = '\0';
+
+        test_tempfn_xxxxxx_one(p, NULL, q, 0);
+
+        memset(stpcpy(q, ".#hoge"), 'x', NAME_MAX - STRLEN(".#hoge") - 6);
+        q[NAME_MAX - 6] = '\0';
+
+        test_tempfn_xxxxxx_one(p, "hoge", q, 0);
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
+static void test_tempfn_random_child_one(const char *p, const char *extra, const char *expect, int ret) {
+        _cleanup_free_ char *s = NULL;
+        int r;
 
-        test_tempfn_random();
-        test_tempfn_xxxxxx();
+        r = tempfn_random_child(p, extra, &s);
+        log_info_errno(r, "%s+%s → %s vs. %s (%i/%s vs. %i/%s)",
+                       p, strna(extra), strna(s), strna(expect),
+                       r, STRERROR(r), ret, STRERROR(ret));
 
-        return 0;
+        assert_se(!s == !expect);
+        if (s) {
+                const char *suffix;
+
+                assert_se(suffix = startswith(s, expect));
+                assert_se(in_charset(suffix, HEXDIGITS));
+                assert_se(strlen(suffix) == 16);
+        }
+        assert_se(ret == r);
 }
+
+TEST(tempfn_random_child) {
+        _cleanup_free_ char *dir = NULL, *p = NULL, *q = NULL;
+
+        test_tempfn_random_child_one("", NULL, ".#", 0);
+        test_tempfn_random_child_one(".", NULL, ".#", 0);
+        test_tempfn_random_child_one("..", NULL, "../.#", 0);
+        test_tempfn_random_child_one("/", NULL, "/.#", 0);
+        test_tempfn_random_child_one("foo", "hoge/aaa", NULL, -EINVAL);
+
+        test_tempfn_random_child_one("foo", NULL, "foo/.#", 0);
+        test_tempfn_random_child_one("foo", "bar", "foo/.#bar", 0);
+        test_tempfn_random_child_one("/tmp/foo", NULL, "/tmp/foo/.#", 0);
+        test_tempfn_random_child_one("/tmp/foo", "bar", "/tmp/foo/.#bar", 0);
+        test_tempfn_random_child_one("./foo", NULL, "foo/.#", 0);
+        test_tempfn_random_child_one("./foo", "bar", "foo/.#bar", 0);
+        test_tempfn_random_child_one("../foo", NULL, "../foo/.#", 0);
+        test_tempfn_random_child_one("../foo", "bar", "../foo/.#bar", 0);
+
+        test_tempfn_random_child_one("foo/", NULL, "foo/.#", 0);
+        test_tempfn_random_child_one("foo/", "bar", "foo/.#bar", 0);
+        test_tempfn_random_child_one("/tmp/foo/", NULL, "/tmp/foo/.#", 0);
+        test_tempfn_random_child_one("/tmp/foo/", "bar", "/tmp/foo/.#bar", 0);
+        test_tempfn_random_child_one("./foo/", NULL, "foo/.#", 0);
+        test_tempfn_random_child_one("./foo/", "bar", "foo/.#bar", 0);
+        test_tempfn_random_child_one("../foo/", NULL, "../foo/.#", 0);
+        test_tempfn_random_child_one("../foo/", "bar", "../foo/.#bar", 0);
+
+        assert_se(dir = new(char, PATH_MAX - 21));
+        memset(dir, 'x', PATH_MAX - 22);
+        dir[PATH_MAX - 22] = '\0';
+        for (size_t i = 0; i < PATH_MAX - 22; i += NAME_MAX + 1)
+                dir[i] = '/';
+
+        assert_se(p = path_join(dir, "a"));
+        assert_se(q = path_join(p, ".#"));
+
+        test_tempfn_random_child_one(p, NULL, q, 0);
+        test_tempfn_random_child_one(p, "b", NULL, -EINVAL);
+
+        p = mfree(p);
+        q = mfree(q);
+
+        assert_se(p = new(char, NAME_MAX + 1));
+        memset(p, 'x', NAME_MAX);
+        p[NAME_MAX] = '\0';
+
+        assert_se(q = path_join(p, ".#"));
+
+        test_tempfn_random_child_one(p, NULL, q, 0);
+
+        assert_se(strextend(&q, "hoge"));
+        test_tempfn_random_child_one(p, "hoge", q, 0);
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-tmpfiles.c b/src/test/test-tmpfiles.c
index 0ac2b7f..83d11f5 100644
--- a/src/test/test-tmpfiles.c
+++ b/src/test/test-tmpfiles.c
@@ -15,16 +15,13 @@
 #include "string-util.h"
 #include "tests.h"
 #include "tmpfile-util.h"
-#include "util.h"
 
-int main(int argc, char** argv) {
+TEST(tmpfiles) {
         _cleanup_free_ char *cmd = NULL, *cmd2 = NULL, *ans = NULL, *ans2 = NULL, *d = NULL, *tmp = NULL, *line = NULL;
-        _cleanup_close_ int fd = -1, fd2 = -1;
-        const char *p = argv[1] ?: "/tmp";
+        _cleanup_close_ int fd = -EBADF, fd2 = -EBADF;
+        const char *p = saved_argv[1] ?: "/tmp";
         char *pattern;
 
-        test_setup_logging(LOG_DEBUG);
-
         pattern = strjoina(p, "/systemd-test-XXXXXX");
 
         fd = open_tmpfile_unlinkable(p, O_RDWR|O_CLOEXEC);
@@ -62,6 +59,6 @@
         assert_se(read_one_line_file(d, &line) >= 0);
         assert_se(streq(line, "foobar"));
         assert_se(unlink(d) >= 0);
-
-        return 0;
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-tpm2.c b/src/test/test-tpm2.c
index a1fd0aa..04e0849 100644
--- a/src/test/test-tpm2.c
+++ b/src/test/test-tpm2.c
@@ -3,7 +3,7 @@
 #include "tpm2-util.h"
 #include "tests.h"
 
-static void test_tpm2_parse_pcrs(const char *s, uint32_t mask, int ret) {
+static void test_tpm2_parse_pcrs_one(const char *s, uint32_t mask, int ret) {
         uint32_t m;
 
         assert_se(tpm2_parse_pcrs(s, &m) == ret);
@@ -12,23 +12,61 @@
                 assert_se(m == mask);
 }
 
-int main(int argc, char *argv[]) {
-
-        test_setup_logging(LOG_DEBUG);
-
-        test_tpm2_parse_pcrs("", 0, 0);
-        test_tpm2_parse_pcrs("0", 1, 0);
-        test_tpm2_parse_pcrs("1", 2, 0);
-        test_tpm2_parse_pcrs("0,1", 3, 0);
-        test_tpm2_parse_pcrs("0+1", 3, 0);
-        test_tpm2_parse_pcrs("0-1", 0, -EINVAL);
-        test_tpm2_parse_pcrs("0,1,2", 7, 0);
-        test_tpm2_parse_pcrs("0+1+2", 7, 0);
-        test_tpm2_parse_pcrs("0+1,2", 7, 0);
-        test_tpm2_parse_pcrs("0,1+2", 7, 0);
-        test_tpm2_parse_pcrs("0,2", 5, 0);
-        test_tpm2_parse_pcrs("0+2", 5, 0);
-        test_tpm2_parse_pcrs("foo", 0, -EINVAL);
-
-        return 0;
+TEST(tpm2_parse_pcrs) {
+        test_tpm2_parse_pcrs_one("", 0, 0);
+        test_tpm2_parse_pcrs_one("0", 1, 0);
+        test_tpm2_parse_pcrs_one("1", 2, 0);
+        test_tpm2_parse_pcrs_one("0,1", 3, 0);
+        test_tpm2_parse_pcrs_one("0+1", 3, 0);
+        test_tpm2_parse_pcrs_one("0-1", 0, -EINVAL);
+        test_tpm2_parse_pcrs_one("0,1,2", 7, 0);
+        test_tpm2_parse_pcrs_one("0+1+2", 7, 0);
+        test_tpm2_parse_pcrs_one("0+1,2", 7, 0);
+        test_tpm2_parse_pcrs_one("0,1+2", 7, 0);
+        test_tpm2_parse_pcrs_one("0,2", 5, 0);
+        test_tpm2_parse_pcrs_one("0+2", 5, 0);
+        test_tpm2_parse_pcrs_one("foo", 0, -EINVAL);
 }
+
+TEST(tpm2_util_pbkdf2_hmac_sha256) {
+
+        /*
+         * The test vectors from RFC 6070 [1] are for dkLen of 20 as it's SHA1
+         * other RFCs I bumped into had various differing dkLen and iter counts,
+         * so this was generated using Python's hmacmodule.
+         *
+         * 1. https://www.rfc-editor.org/rfc/rfc6070.html#page-2
+         */
+        static const struct {
+                const uint8_t pass[256];
+                size_t passlen;
+                const uint8_t salt[256];
+                size_t saltlen;
+                uint8_t expected[SHA256_DIGEST_SIZE];
+        } test_vectors[] = {
+                { .pass={'f', 'o', 'o', 'p', 'a', 's', 's'},                                                                        .passlen=7,  .salt={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5'}, .saltlen=16, .expected={0xCB, 0xEA, 0x27, 0x23, 0x9A, 0x65, 0x99, 0xF6, 0x8C, 0x26, 0x54, 0x80, 0x5C, 0x63, 0x61, 0xD2, 0x91, 0x0A, 0x60, 0x3F, 0xC2, 0xF5, 0xF0, 0xAB, 0x55, 0x8B, 0x46, 0x07, 0x60, 0x93, 0xAB, 0xCB} },
+                { .pass={'f', 'o', 'o', 'p', 'a', 's', 's'},                                                                        .passlen=7,  .salt={0x00, 'h', 'f', 's', 'd', 'j', 'h', 'f', 'd', 'j', 'h', 'j', 'd', 'f', 's'},     .saltlen=15, .expected={0x2B, 0xDF, 0x52, 0x29, 0x48, 0x3F, 0x98, 0x25, 0x01, 0x19, 0xB4, 0x42, 0xBC, 0xA7, 0x38, 0x5D, 0xCD, 0x08, 0xBD, 0xDC, 0x33, 0xBF, 0x32, 0x5E, 0x31, 0x87, 0x54, 0xFF, 0x2C, 0x23, 0x68, 0xFF} },
+                { .pass={'f', 'o', 'o', 'p', 'a', 's', 's'},                                                                        .passlen=7,  .salt={'m', 'y', 's', 'a', 0x00, 'l', 't'},                                             .saltlen=7,  .expected={0x7C, 0x24, 0xB4, 0x4D, 0x30, 0x11, 0x53, 0x24, 0x87, 0x56, 0x24, 0x10, 0xBA, 0x9F, 0xF2, 0x4E, 0xBB, 0xF5, 0x03, 0x56, 0x2B, 0xB1, 0xA1, 0x92, 0x8B, 0x5F, 0x32, 0x02, 0x23, 0x1F, 0x79, 0xE6} },
+                { .pass={'p', 'a', 's', 's', 'w', 'i', 't', 'h', 'n', 'u', 'l', 'l', 0x00, 'p', 'a', 's', 's', 'w', 'o', 'r', 'd'}, .passlen=21, .salt={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5'}, .saltlen=16, .expected={0xE9, 0x53, 0xB7, 0x1D, 0xAB, 0xD1, 0xC1, 0xF3, 0xC4, 0x7F, 0x18, 0x96, 0xDD, 0xD7, 0x6B, 0xC6, 0x6A, 0xBD, 0xFB, 0x12, 0x7C, 0xF8, 0x68, 0xDC, 0x6E, 0xEF, 0x29, 0xCC, 0x1B, 0x30, 0x5B, 0x74} },
+                { .pass={'p', 'a', 's', 's', 'w', 'i', 't', 'h', 'n', 'u', 'l', 'l', 0x00, 'p', 'a', 's', 's', 'w', 'o', 'r', 'd'}, .passlen=21, .salt={0x00, 'h', 'f', 's', 'd', 'j', 'h', 'f', 'd', 'j', 'h', 'j', 'd', 'f', 's'},     .saltlen=15, .expected={0x51, 0xA3, 0x82, 0xA5, 0x2F, 0x48, 0x84, 0xB3, 0x02, 0x0D, 0xC2, 0x42, 0x9A, 0x8F, 0x86, 0xCC, 0x66, 0xFD, 0x65, 0x87, 0x89, 0x07, 0x2B, 0x07, 0x82, 0x42, 0xD6, 0x6D, 0x43, 0xB8, 0xFD, 0xCF} },
+                { .pass={'p', 'a', 's', 's', 'w', 'i', 't', 'h', 'n', 'u', 'l', 'l', 0x00, 'p', 'a', 's', 's', 'w', 'o', 'r', 'd'}, .passlen=21, .salt={'m', 'y', 's', 'a', 0x00, 'l', 't'},                                             .saltlen=7,  .expected={0xEC, 0xFB, 0x5D, 0x5F, 0xF6, 0xA6, 0xE0, 0x79, 0x50, 0x64, 0x36, 0x64, 0xA3, 0x9A, 0x5C, 0xF3, 0x7A, 0x87, 0x0B, 0x64, 0x51, 0x59, 0x75, 0x64, 0x8B, 0x78, 0x2B, 0x62, 0x8F, 0x68, 0xD9, 0xCC} },
+                { .pass={0x00, 'p', 'a', 's', 's'},                                                                                 .passlen=5,  .salt={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5'}, .saltlen=16, .expected={0x8A, 0x9A, 0x47, 0x9A, 0x91, 0x22, 0x2F, 0x56, 0x29, 0x4F, 0x26, 0x00, 0xE7, 0xB3, 0xEB, 0x63, 0x6D, 0x51, 0xF2, 0x60, 0x17, 0x08, 0x20, 0x70, 0x82, 0x8F, 0xA3, 0xD7, 0xBE, 0x2B, 0xD5, 0x5D} },
+                { .pass={0x00, 'p', 'a', 's', 's'},                                                                                 .passlen=5,  .salt={0x00, 'h', 'f', 's', 'd', 'j', 'h', 'f', 'd', 'j', 'h', 'j', 'd', 'f', 's'},     .saltlen=15, .expected={0x72, 0x3A, 0xF5, 0xF7, 0xCD, 0x6C, 0x12, 0xDD, 0x53, 0x28, 0x46, 0x0C, 0x19, 0x0E, 0xF2, 0x91, 0xDE, 0xEA, 0xF9, 0x6F, 0x74, 0x32, 0x34, 0x3F, 0x84, 0xED, 0x8D, 0x2A, 0xDE, 0xC9, 0xC6, 0x34} },
+                { .pass={0x00, 'p', 'a', 's', 's'},                                                                                 .passlen=5,  .salt={'m', 'y', 's', 'a', 0x00, 'l', 't'},                                             .saltlen=7,  .expected={0xE3, 0x07, 0x12, 0xBE, 0xEE, 0xF5, 0x5D, 0x18, 0x72, 0xF4, 0xCF, 0xF1, 0x20, 0x6B, 0xD6, 0x66, 0xCD, 0x7C, 0xE7, 0x4F, 0xC2, 0x16, 0x70, 0x5B, 0x9B, 0x2F, 0x7D, 0xE2, 0x3B, 0x42, 0x3A, 0x1B} },
+        };
+
+        uint8_t res[SHA256_DIGEST_SIZE];
+        for(size_t i = 0; i < sizeof(test_vectors)/sizeof(test_vectors[0]); i++) {
+
+                int rc = tpm2_util_pbkdf2_hmac_sha256(
+                                test_vectors[i].pass,
+                                test_vectors[i].passlen,
+                                test_vectors[i].salt,
+                                test_vectors[i].saltlen,
+                                res);
+                assert_se(rc == 0);
+                assert_se(memcmp(test_vectors[i].expected, res, SHA256_DIGEST_SIZE) == 0);
+        }
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-udev-util.c b/src/test/test-udev-util.c
index b87a90f..4be3694 100644
--- a/src/test/test-udev-util.c
+++ b/src/test/test-udev-util.c
@@ -5,6 +5,7 @@
 
 #include "macro.h"
 #include "string-util.h"
+#include "tests.h"
 #include "udev-util.h"
 
 static void test_udev_rule_parse_value_one(const char *in, const char *expected_value, int expected_retval) {
@@ -12,6 +13,8 @@
         char *value = UINT_TO_PTR(0x12345678U);
         char *endpos = UINT_TO_PTR(0x87654321U);
 
+        log_info("/* %s (%s, %s, %d) */", __func__, in, strnull(expected_value), expected_retval);
+
         assert_se(str = strdup(in));
         assert_se(udev_rule_parse_value(str, &value, &endpos) == expected_retval);
         if (expected_retval < 0) {
@@ -21,164 +24,58 @@
         } else {
                 assert_se(streq_ptr(value, expected_value));
                 assert_se(endpos == str + strlen(in));
+                /*
+                 * The return value must be terminated by two subsequent NULs
+                 * so it could be safely interpreted as nulstr.
+                 */
+                assert_se(value[strlen(value) + 1] == '\0');
         }
 }
 
-static void test_parse_value(void) {
+TEST(udev_rule_parse_value) {
         /* input: "valid operand"
          * parsed: valid operand
          * use the following command to help generate textual C strings:
          * python3 -c 'import json; print(json.dumps(input()))' */
-        test_udev_rule_parse_value_one(
-                "\"valid operand\"",
-                "valid operand",
-                0
-        );
-}
-
-static void test_parse_value_with_backslashes(void) {
+        test_udev_rule_parse_value_one("\"valid operand\"", "valid operand", 0);
         /* input: "va'l\'id\"op\"erand"
          * parsed: va'l\'id"op"erand */
-        test_udev_rule_parse_value_one(
-                "\"va'l\\'id\\\"op\\\"erand\"",
-                "va'l\\'id\"op\"erand",
-                0
-        );
-}
-
-static void test_parse_value_no_quotes(void) {
-        test_udev_rule_parse_value_one(
-                "no quotes",
-                0,
-                -EINVAL
-        );
-}
-
-static void test_parse_value_noescape(void) {
-        test_udev_rule_parse_value_one(
-                "\"\\\\a\\b\\x\\y\"",
-                "\\\\a\\b\\x\\y",
-                0
-        );
-}
-
-static void test_parse_value_nul(void) {
-        test_udev_rule_parse_value_one(
-                "\"reject\0nul\"",
-                0,
-                -EINVAL
-        );
-}
-
-static void test_parse_value_escape_nothing(void) {
+        test_udev_rule_parse_value_one("\"va'l\\'id\\\"op\\\"erand\"", "va'l\\'id\"op\"erand", 0);
+        test_udev_rule_parse_value_one("no quotes", NULL, -EINVAL);
+        test_udev_rule_parse_value_one("\"\\\\a\\b\\x\\y\"", "\\\\a\\b\\x\\y", 0);
+        test_udev_rule_parse_value_one("\"reject\0nul\"", NULL, -EINVAL);
         /* input: e"" */
-        test_udev_rule_parse_value_one(
-                "e\"\"",
-                "",
-                0
-        );
-}
-
-static void test_parse_value_escape_nothing2(void) {
+        test_udev_rule_parse_value_one("e\"\"", "", 0);
         /* input: e"1234" */
-        test_udev_rule_parse_value_one(
-                "e\"1234\"",
-                "1234",
-                0
-        );
-}
-
-static void test_parse_value_escape_double_quote(void) {
+        test_udev_rule_parse_value_one("e\"1234\"", "1234", 0);
         /* input: e"\"" */
-        test_udev_rule_parse_value_one(
-                "e\"\\\"\"",
-                "\"",
-                0
-        );
-}
-
-static void test_parse_value_escape_backslash(void) {
+        test_udev_rule_parse_value_one("e\"\\\"\"", "\"", 0);
         /* input: e"\ */
-        test_udev_rule_parse_value_one(
-                "e\"\\",
-                0,
-                -EINVAL
-        );
+        test_udev_rule_parse_value_one("e\"\\", NULL, -EINVAL);
         /* input: e"\" */
-        test_udev_rule_parse_value_one(
-                "e\"\\\"",
-                0,
-                -EINVAL
-        );
+        test_udev_rule_parse_value_one("e\"\\\"", NULL, -EINVAL);
         /* input: e"\\" */
-        test_udev_rule_parse_value_one(
-                "e\"\\\\\"",
-                "\\",
-                0
-        );
+        test_udev_rule_parse_value_one("e\"\\\\\"", "\\", 0);
         /* input: e"\\\" */
-        test_udev_rule_parse_value_one(
-                "e\"\\\\\\\"",
-                0,
-                -EINVAL
-        );
+        test_udev_rule_parse_value_one("e\"\\\\\\\"", NULL, -EINVAL);
         /* input: e"\\\"" */
-        test_udev_rule_parse_value_one(
-                "e\"\\\\\\\"\"",
-                "\\\"",
-                0
-        );
+        test_udev_rule_parse_value_one("e\"\\\\\\\"\"", "\\\"", 0);
         /* input: e"\\\\" */
-        test_udev_rule_parse_value_one(
-                "e\"\\\\\\\\\"",
-                "\\\\",
-                0
-        );
-}
-
-static void test_parse_value_newline(void) {
+        test_udev_rule_parse_value_one("e\"\\\\\\\\\"", "\\\\", 0);
         /* input: e"operand with newline\n" */
-        test_udev_rule_parse_value_one(
-                "e\"operand with newline\\n\"",
-                "operand with newline\n",
-                0
-        );
-}
-
-static void test_parse_value_escaped(void) {
+        test_udev_rule_parse_value_one("e\"operand with newline\\n\"", "operand with newline\n", 0);
         /* input: e"single\rcharacter\t\aescape\bsequence" */
         test_udev_rule_parse_value_one(
-                "e\"single\\rcharacter\\t\\aescape\\bsequence\"",
-                "single\rcharacter\t\aescape\bsequence",
-                0
-        );
-}
-
-static void test_parse_value_invalid_escape(void) {
+                "e\"single\\rcharacter\\t\\aescape\\bsequence\"", "single\rcharacter\t\aescape\bsequence", 0);
         /* input: e"reject\invalid escape sequence" */
-        test_udev_rule_parse_value_one(
-                "e\"reject\\invalid escape sequence",
-                0,
-                -EINVAL
-        );
-}
-
-static void test_parse_value_invalid_termination(void) {
+        test_udev_rule_parse_value_one("e\"reject\\invalid escape sequence", NULL, -EINVAL);
         /* input: e"\ */
-        test_udev_rule_parse_value_one(
-                "e\"\\",
-                0,
-                -EINVAL
-        );
-}
-
-static void test_parse_value_unicode(void) {
+        test_udev_rule_parse_value_one("e\"\\", NULL, -EINVAL);
         /* input: "s\u1d1c\u1d04\u029c \u1d1c\u0274\u026a\u1d04\u1d0f\u1d05\u1d07 \U0001d568\U0001d560\U0001d568" */
         test_udev_rule_parse_value_one(
                 "e\"s\\u1d1c\\u1d04\\u029c \\u1d1c\\u0274\\u026a\\u1d04\\u1d0f\\u1d05\\u1d07 \\U0001d568\\U0001d560\\U0001d568\"",
                 "s\xe1\xb4\x9c\xe1\xb4\x84\xca\x9c \xe1\xb4\x9c\xc9\xb4\xc9\xaa\xe1\xb4\x84\xe1\xb4\x8f\xe1\xb4\x85\xe1\xb4\x87 \xf0\x9d\x95\xa8\xf0\x9d\x95\xa0\xf0\x9d\x95\xa8",
-                0
-        );
+                0);
 }
 
 static void test_udev_replace_whitespace_one_len(const char *str, size_t len, const char *expected) {
@@ -196,9 +93,7 @@
         test_udev_replace_whitespace_one_len(str, strlen(str), expected);
 }
 
-static void test_udev_replace_whitespace(void) {
-        log_info("/* %s */", __func__);
-
+TEST(udev_replace_whitespace) {
         test_udev_replace_whitespace_one("hogehoge", "hogehoge");
         test_udev_replace_whitespace_one("hoge  hoge", "hoge_hoge");
         test_udev_replace_whitespace_one("  hoge  hoge  ", "hoge_hoge");
@@ -246,9 +141,7 @@
                 assert_se(streq(result, expected));
 }
 
-static void test_udev_resolve_subsys_kernel(void) {
-        log_info("/* %s */", __func__);
-
+TEST(udev_resolve_subsys_kernel) {
         test_udev_resolve_subsys_kernel_one("hoge", false, -EINVAL, NULL);
         test_udev_resolve_subsys_kernel_one("[hoge", false, -EINVAL, NULL);
         test_udev_resolve_subsys_kernel_one("[hoge/foo", false, -EINVAL, NULL);
@@ -267,25 +160,17 @@
         test_udev_resolve_subsys_kernel_one("[net/lo]/address", true, 0, "00:00:00:00:00:00");
 }
 
-int main(int argc, char **argv) {
-        test_parse_value();
-        test_parse_value_with_backslashes();
-        test_parse_value_no_quotes();
-        test_parse_value_nul();
-        test_parse_value_noescape();
+TEST(devpath_conflict) {
+        assert_se(!devpath_conflict(NULL, NULL));
+        assert_se(!devpath_conflict(NULL, "/devices/pci0000:00/0000:00:1c.4"));
+        assert_se(!devpath_conflict("/devices/pci0000:00/0000:00:1c.4", NULL));
+        assert_se(!devpath_conflict("/devices/pci0000:00/0000:00:1c.4", "/devices/pci0000:00/0000:00:00.0"));
+        assert_se(!devpath_conflict("/devices/virtual/net/veth99", "/devices/virtual/net/veth999"));
 
-        test_parse_value_escape_nothing();
-        test_parse_value_escape_nothing2();
-        test_parse_value_escape_double_quote();
-        test_parse_value_escape_backslash();
-        test_parse_value_newline();
-        test_parse_value_escaped();
-        test_parse_value_invalid_escape();
-        test_parse_value_invalid_termination();
-        test_parse_value_unicode();
-
-        test_udev_replace_whitespace();
-        test_udev_resolve_subsys_kernel();
-
-        return EXIT_SUCCESS;
+        assert_se(devpath_conflict("/devices/pci0000:00/0000:00:1c.4", "/devices/pci0000:00/0000:00:1c.4"));
+        assert_se(devpath_conflict("/devices/pci0000:00/0000:00:1c.4", "/devices/pci0000:00/0000:00:1c.4/0000:3c:00.0"));
+        assert_se(devpath_conflict("/devices/pci0000:00/0000:00:1c.4/0000:3c:00.0/nvme/nvme0/nvme0n1",
+                                   "/devices/pci0000:00/0000:00:1c.4/0000:3c:00.0/nvme/nvme0/nvme0n1/nvme0n1p1"));
 }
+
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-udev.c b/src/test/test-udev.c
index c2c63cc..3ca132d 100644
--- a/src/test/test-udev.c
+++ b/src/test/test-udev.c
@@ -15,7 +15,7 @@
 #include "fs-util.h"
 #include "log.h"
 #include "main-func.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "namespace-util.h"
 #include "selinux-util.h"
@@ -25,6 +25,35 @@
 #include "udev-event.h"
 #include "version.h"
 
+static int device_new_from_synthetic_event(sd_device **ret, const char *syspath, const char *action) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        sd_device_action_t a;
+        int r;
+
+        assert(ret);
+        assert(syspath);
+        assert(action);
+
+        a = device_action_from_string(action);
+        if (a < 0)
+                return a;
+
+        r = sd_device_new_from_syspath(&dev, syspath);
+        if (r < 0)
+                return r;
+
+        r = device_read_uevent_file(dev);
+        if (r < 0)
+                return r;
+
+        r = device_set_action(dev, a);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(dev);
+        return 0;
+}
+
 static int fake_filesystems(void) {
         static const struct fakefs {
                 const char *src;
@@ -126,7 +155,7 @@
                 } else {
                         if (unlink(devname) < 0)
                                 return log_error_errno(errno, "unlink('%s') failed: %m", devname);
-                        (void) rmdir_parents(devname, "/");
+                        (void) rmdir_parents(devname, "/dev");
                 }
         }
 
diff --git a/src/test/test-uid-alloc-range.c b/src/test/test-uid-alloc-range.c
new file mode 100644
index 0000000..cd06463
--- /dev/null
+++ b/src/test/test-uid-alloc-range.c
@@ -0,0 +1,93 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <unistd.h>
+#include <sys/types.h>
+
+#include "fd-util.h"
+#include "fileio.h"
+#include "format-util.h"
+#include "fs-util.h"
+#include "tests.h"
+#include "tmpfile-util.h"
+#include "uid-alloc-range.h"
+
+static void test_read_login_defs_one(const char *path) {
+        log_info("/* %s(\"%s\") */", __func__, path ?: "<custom>");
+
+        _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-user-record.XXXXXX";
+        _cleanup_fclose_ FILE *f = NULL;
+        if (!path) {
+                assert_se(fmkostemp_safe(name, "r+", &f) == 0);
+                fprintf(f,
+                        "SYS_UID_MIN "UID_FMT"\n"
+                        "SYS_UID_MAX "UID_FMT"\n"
+                        "SYS_GID_MIN "GID_FMT"\n"
+                        "SYS_GID_MAX "GID_FMT"\n",
+                        (uid_t) (SYSTEM_ALLOC_UID_MIN + 5),
+                        (uid_t) (SYSTEM_UID_MAX + 5),
+                        (gid_t) (SYSTEM_ALLOC_GID_MIN + 5),
+                        (gid_t) (SYSTEM_GID_MAX + 5));
+                assert_se(fflush_and_check(f) >= 0);
+        }
+
+        UGIDAllocationRange defs;
+        assert_se(read_login_defs(&defs, path ?: name, NULL) >= 0);
+
+        log_info("system_alloc_uid_min="UID_FMT, defs.system_alloc_uid_min);
+        log_info("system_uid_max="UID_FMT, defs.system_uid_max);
+        log_info("system_alloc_gid_min="GID_FMT, defs.system_alloc_gid_min);
+        log_info("system_gid_max="GID_FMT, defs.system_gid_max);
+
+        if (!path) {
+                uid_t offset = ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES ? 5 : 0;
+                assert_se(defs.system_alloc_uid_min == SYSTEM_ALLOC_UID_MIN + offset);
+                assert_se(defs.system_uid_max == SYSTEM_UID_MAX + offset);
+                assert_se(defs.system_alloc_gid_min == SYSTEM_ALLOC_GID_MIN + offset);
+                assert_se(defs.system_gid_max == SYSTEM_GID_MAX + offset);
+        } else if (streq(path, "/dev/null")) {
+                assert_se(defs.system_alloc_uid_min == SYSTEM_ALLOC_UID_MIN);
+                assert_se(defs.system_uid_max == SYSTEM_UID_MAX);
+                assert_se(defs.system_alloc_gid_min == SYSTEM_ALLOC_GID_MIN);
+                assert_se(defs.system_gid_max == SYSTEM_GID_MAX);
+        }
+}
+
+TEST(read_login_defs) {
+        test_read_login_defs_one("/dev/null");
+        test_read_login_defs_one("/etc/login.defs");
+        test_read_login_defs_one(NULL);
+}
+
+TEST(acquire_ugid_allocation_range) {
+        const UGIDAllocationRange *defs;
+        assert_se(defs = acquire_ugid_allocation_range());
+
+        log_info("system_alloc_uid_min="UID_FMT, defs->system_alloc_uid_min);
+        log_info("system_uid_max="UID_FMT, defs->system_uid_max);
+        log_info("system_alloc_gid_min="GID_FMT, defs->system_alloc_gid_min);
+        log_info("system_gid_max="GID_FMT, defs->system_gid_max);
+}
+
+TEST(uid_is_system) {
+        uid_t uid = 0;
+        log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
+
+        uid = 999;
+        log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
+
+        uid = getuid();
+        log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
+}
+
+TEST(gid_is_system) {
+        gid_t gid = 0;
+        log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
+
+        gid = 999;
+        log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
+
+        gid = getgid();
+        log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-uid-range.c b/src/test/test-uid-range.c
index 16cbab0..186f6ee 100644
--- a/src/test/test-uid-range.c
+++ b/src/test/test-uid-range.c
@@ -3,72 +3,173 @@
 #include <stddef.h>
 
 #include "alloc-util.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "fs-util.h"
+#include "tests.h"
+#include "tmpfile-util.h"
 #include "uid-range.h"
 #include "user-util.h"
-#include "util.h"
+#include "virt.h"
 
-int main(int argc, char *argv[]) {
-        _cleanup_free_ UidRange *p = NULL;
-        unsigned n = 0;
+TEST(uid_range) {
+        _cleanup_(uid_range_freep) UidRange *p = NULL;
         uid_t search;
 
-        assert_se(uid_range_add_str(&p, &n, "500-999") >= 0);
-        assert_se(n == 1);
-        assert_se(p[0].start == 500);
-        assert_se(p[0].nr == 500);
+        assert_se(uid_range_covers(p, 0, 0));
+        assert_se(!uid_range_covers(p, 0, 1));
+        assert_se(!uid_range_covers(p, 100, UINT32_MAX));
 
-        assert_se(!uid_range_contains(p, n, 499));
-        assert_se(uid_range_contains(p, n, 500));
-        assert_se(uid_range_contains(p, n, 999));
-        assert_se(!uid_range_contains(p, n, 1000));
+        assert_se(uid_range_add_str(&p, "500-999") >= 0);
+        assert_se(p);
+        assert_se(p->n_entries == 1);
+        assert_se(p->entries[0].start == 500);
+        assert_se(p->entries[0].nr == 500);
+
+        assert_se(!uid_range_contains(p, 499));
+        assert_se(uid_range_contains(p, 500));
+        assert_se(uid_range_contains(p, 999));
+        assert_se(!uid_range_contains(p, 1000));
+
+        assert_se(!uid_range_covers(p, 100, 150));
+        assert_se(!uid_range_covers(p, 400, 200));
+        assert_se(!uid_range_covers(p, 499, 1));
+        assert_se(uid_range_covers(p, 500, 1));
+        assert_se(uid_range_covers(p, 501, 10));
+        assert_se(uid_range_covers(p, 999, 1));
+        assert_se(!uid_range_covers(p, 999, 2));
+        assert_se(!uid_range_covers(p, 1000, 1));
+        assert_se(!uid_range_covers(p, 1000, 100));
+        assert_se(!uid_range_covers(p, 1001, 100));
 
         search = UID_INVALID;
-        assert_se(uid_range_next_lower(p, n, &search));
+        assert_se(uid_range_next_lower(p, &search));
         assert_se(search == 999);
-        assert_se(uid_range_next_lower(p, n, &search));
+        assert_se(uid_range_next_lower(p, &search));
         assert_se(search == 998);
         search = 501;
-        assert_se(uid_range_next_lower(p, n, &search));
+        assert_se(uid_range_next_lower(p, &search));
         assert_se(search == 500);
-        assert_se(uid_range_next_lower(p, n, &search) == -EBUSY);
+        assert_se(uid_range_next_lower(p, &search) == -EBUSY);
 
-        assert_se(uid_range_add_str(&p, &n, "1000") >= 0);
-        assert_se(n == 1);
-        assert_se(p[0].start == 500);
-        assert_se(p[0].nr == 501);
+        assert_se(uid_range_add_str(&p, "1000") >= 0);
+        assert_se(p->n_entries == 1);
+        assert_se(p->entries[0].start == 500);
+        assert_se(p->entries[0].nr == 501);
 
-        assert_se(uid_range_add_str(&p, &n, "30-40") >= 0);
-        assert_se(n == 2);
-        assert_se(p[0].start == 30);
-        assert_se(p[0].nr == 11);
-        assert_se(p[1].start == 500);
-        assert_se(p[1].nr == 501);
+        assert_se(uid_range_add_str(&p, "30-40") >= 0);
+        assert_se(p->n_entries == 2);
+        assert_se(p->entries[0].start == 30);
+        assert_se(p->entries[0].nr == 11);
+        assert_se(p->entries[1].start == 500);
+        assert_se(p->entries[1].nr == 501);
 
-        assert_se(uid_range_add_str(&p, &n, "60-70") >= 0);
-        assert_se(n == 3);
-        assert_se(p[0].start == 30);
-        assert_se(p[0].nr == 11);
-        assert_se(p[1].start == 60);
-        assert_se(p[1].nr == 11);
-        assert_se(p[2].start == 500);
-        assert_se(p[2].nr == 501);
+        assert_se(uid_range_add_str(&p, "60-70") >= 0);
+        assert_se(p->n_entries == 3);
+        assert_se(p->entries[0].start == 30);
+        assert_se(p->entries[0].nr == 11);
+        assert_se(p->entries[1].start == 60);
+        assert_se(p->entries[1].nr == 11);
+        assert_se(p->entries[2].start == 500);
+        assert_se(p->entries[2].nr == 501);
 
-        assert_se(uid_range_add_str(&p, &n, "20-2000") >= 0);
-        assert_se(n == 1);
-        assert_se(p[0].start == 20);
-        assert_se(p[0].nr == 1981);
+        assert_se(uid_range_add_str(&p, "20-2000") >= 0);
+        assert_se(p->n_entries == 1);
+        assert_se(p->entries[0].start == 20);
+        assert_se(p->entries[0].nr == 1981);
 
-        assert_se(uid_range_add_str(&p, &n, "2002") >= 0);
-        assert_se(n == 2);
-        assert_se(p[0].start == 20);
-        assert_se(p[0].nr == 1981);
-        assert_se(p[1].start == 2002);
-        assert_se(p[1].nr == 1);
+        assert_se(uid_range_add_str(&p, "2002") >= 0);
+        assert_se(p->n_entries == 2);
+        assert_se(p->entries[0].start == 20);
+        assert_se(p->entries[0].nr == 1981);
+        assert_se(p->entries[1].start == 2002);
+        assert_se(p->entries[1].nr == 1);
 
-        assert_se(uid_range_add_str(&p, &n, "2001") >= 0);
-        assert_se(n == 1);
-        assert_se(p[0].start == 20);
-        assert_se(p[0].nr == 1983);
-
-        return 0;
+        assert_se(uid_range_add_str(&p, "2001") >= 0);
+        assert_se(p->n_entries == 1);
+        assert_se(p->entries[0].start == 20);
+        assert_se(p->entries[0].nr == 1983);
 }
+
+TEST(load_userns) {
+        _cleanup_(uid_range_freep) UidRange *p = NULL;
+        _cleanup_(unlink_and_freep) char *fn = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        int r;
+
+        r = uid_range_load_userns(&p, NULL);
+        if (r < 0 && ERRNO_IS_NOT_SUPPORTED(r))
+                return;
+
+        assert_se(r >= 0);
+        assert_se(uid_range_contains(p, getuid()));
+
+        r = running_in_userns();
+        if (r == 0) {
+                assert_se(p->n_entries == 1);
+                assert_se(p->entries[0].start == 0);
+                assert_se(p->entries[0].nr == UINT32_MAX);
+
+                assert_se(uid_range_covers(p, 0, UINT32_MAX));
+        }
+
+        assert_se(fopen_temporary_child(NULL, &f, &fn) >= 0);
+        fputs("0 0 20\n"
+              "100 0 20\n", f);
+        assert_se(fflush_and_check(f) >= 0);
+
+        p = uid_range_free(p);
+
+        assert_se(uid_range_load_userns(&p, fn) >= 0);
+
+        assert_se(uid_range_contains(p, 0));
+        assert_se(uid_range_contains(p, 19));
+        assert_se(!uid_range_contains(p, 20));
+
+        assert_se(!uid_range_contains(p, 99));
+        assert_se(uid_range_contains(p, 100));
+        assert_se(uid_range_contains(p, 119));
+        assert_se(!uid_range_contains(p, 120));
+}
+
+TEST(uid_range_coalesce) {
+        _cleanup_(uid_range_freep) UidRange *p = NULL;
+
+        for (size_t i = 0; i < 10; i++) {
+                assert_se(uid_range_add_internal(&p, i * 10, 10, /* coalesce = */ false) >= 0);
+                assert_se(uid_range_add_internal(&p, i * 10 + 5, 10, /* coalesce = */ false) >= 0);
+        }
+
+        assert_se(uid_range_add_internal(&p, 100, 1, /* coalesce = */ true) >= 0);
+        assert_se(p->n_entries == 1);
+        assert_se(p->entries[0].start == 0);
+        assert_se(p->entries[0].nr == 105);
+
+        p = uid_range_free(p);
+
+        for (size_t i = 0; i < 10; i++) {
+                assert_se(uid_range_add_internal(&p, (10 - i) * 10, 10, /* coalesce = */ false) >= 0);
+                assert_se(uid_range_add_internal(&p, (10 - i) * 10 + 5, 10, /* coalesce = */ false) >= 0);
+        }
+
+        assert_se(uid_range_add_internal(&p, 100, 1, /* coalesce = */ true) >= 0);
+        assert_se(p->n_entries == 1);
+        assert_se(p->entries[0].start == 10);
+        assert_se(p->entries[0].nr == 105);
+
+        p = uid_range_free(p);
+
+        for (size_t i = 0; i < 10; i++) {
+                assert_se(uid_range_add_internal(&p, i * 10, 10, /* coalesce = */ false) >= 0);
+                assert_se(uid_range_add_internal(&p, i * 10 + 5, 10, /* coalesce = */ false) >= 0);
+                assert_se(uid_range_add_internal(&p, (10 - i) * 10, 10, /* coalesce = */ false) >= 0);
+                assert_se(uid_range_add_internal(&p, (10 - i) * 10 + 5, 10, /* coalesce = */ false) >= 0);
+        }
+        assert_se(uid_range_add_internal(&p, 100, 1, /* coalesce = */ true) >= 0);
+        assert_se(p->n_entries == 1);
+        assert_se(p->entries[0].start == 0);
+        assert_se(p->entries[0].nr == 115);
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-umask-util.c b/src/test/test-umask-util.c
index df3ae98..bd5bc9c 100644
--- a/src/test/test-umask-util.c
+++ b/src/test/test-umask-util.c
@@ -12,7 +12,7 @@
         u = umask(0111);
 
         n = 0;
-        RUN_WITH_UMASK(0123) {
+        WITH_UMASK(0123) {
                 assert_se(umask(000) == 0123);
                 n++;
         }
@@ -20,7 +20,7 @@
         assert_se(n == 1);
         assert_se(umask(u) == 0111);
 
-        RUN_WITH_UMASK(0135) {
+        WITH_UMASK(0135) {
                 assert_se(umask(000) == 0135);
                 n++;
         }
@@ -28,7 +28,7 @@
         assert_se(n == 2);
         assert_se(umask(0111) == u);
 
-        RUN_WITH_UMASK(0315) {
+        WITH_UMASK(0315) {
                 assert_se(umask(000) == 0315);
                 n++;
                 break;
diff --git a/src/test/test-unaligned.c b/src/test/test-unaligned.c
index b4d380b..728c193 100644
--- a/src/test/test-unaligned.c
+++ b/src/test/test-unaligned.c
@@ -2,6 +2,7 @@
 
 #include "memory-util.h"
 #include "sparse-endian.h"
+#include "tests.h"
 #include "unaligned.h"
 
 static uint8_t data[] = {
@@ -9,7 +10,7 @@
         0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
 };
 
-static void test_be(void) {
+TEST(be) {
         uint8_t scratch[16];
 
         assert_se(unaligned_read_be16(&data[0]) == 0x0001);
@@ -75,7 +76,7 @@
         assert_se(memcmp(&scratch[7], &data[7], sizeof(uint64_t)) == 0);
 }
 
-static void test_le(void) {
+TEST(le) {
         uint8_t scratch[16];
 
         assert_se(unaligned_read_le16(&data[0]) == 0x0100);
@@ -142,7 +143,7 @@
         assert_se(memcmp(&scratch[7], &data[7], sizeof(uint64_t)) == 0);
 }
 
-static void test_ne(void) {
+TEST(ne) {
         uint16_t x = 4711;
         uint32_t y = 123456;
         uint64_t z = 9876543210;
@@ -164,9 +165,4 @@
         assert_se(z == 3);
 }
 
-int main(int argc, const char *argv[]) {
-        test_be();
-        test_le();
-        test_ne();
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
index 477ae03..27a73d6 100644
--- a/src/test/test-unit-file.c
+++ b/src/test/test-unit-file.c
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "initrd-util.h"
 #include "path-lookup.h"
 #include "set.h"
 #include "special.h"
@@ -7,35 +8,35 @@
 #include "tests.h"
 #include "unit-file.h"
 
-static void test_unit_validate_alias_symlink_and_warn(void) {
-        log_info("/* %s */", __func__);
-
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.service") == 0);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.socket") == -EXDEV);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.foobar") == -EXDEV);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@.service") == 0);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@.socket") == -EXDEV);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@YYY.service") == -EXDEV);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@YYY.socket") == -EXDEV);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@YYY.service") == -EXDEV);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@XXX.service") == 0);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@.service") == 0);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b.service") == -EXDEV);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b@.service") == -EXDEV);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.slice", "/other/b.slice") == -EINVAL);
-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.slice", "/other/b.slice") == -EINVAL);
+TEST(unit_validate_alias_symlink_and_warn) {
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.service") == 0);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.socket") == -EXDEV);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.foobar") == -EXDEV);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@.service") == 0);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@.socket") == -EXDEV);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@YYY.service") == -EXDEV);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@YYY.socket") == -EXDEV);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@YYY.service") == -EXDEV);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@XXX.service") == 0);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@.service") == 0);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b.service") == -EXDEV);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b@.service") == -EXDEV);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.slice", "/other/b.slice") == -EINVAL);
+        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.slice", "/other/b.slice") == -EINVAL);
 }
 
-static void test_unit_file_build_name_map(char **ids) {
+TEST(unit_file_build_name_map) {
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_hashmap_free_ Hashmap *unit_ids = NULL;
         _cleanup_hashmap_free_ Hashmap *unit_names = NULL;
         const char *k, *dst;
-        char **v;
+        char **v, **ids;
         usec_t mtime = 0;
         int r;
 
-        assert_se(lookup_paths_init(&lp, UNIT_FILE_SYSTEM, 0, NULL) >= 0);
+        ids = strv_skip(saved_argv, 1);
+
+        assert_se(lookup_paths_init(&lp, LOOKUP_SCOPE_SYSTEM, 0, NULL) >= 0);
 
         assert_se(unit_file_build_name_map(&lp, &mtime, &unit_ids, &unit_names, NULL) == 1);
 
@@ -55,7 +56,6 @@
         if (r == 0)
                 log_debug("Cache rebuild skipped based on mtime.");
 
-        char **id;
         STRV_FOREACH(id, ids) {
                  const char *fragment, *name;
                  _cleanup_set_free_free_ Set *names = NULL;
@@ -65,17 +65,28 @@
                                              *id,
                                              &fragment,
                                              &names);
-                 assert(r == 0);
+                 assert_se(r == 0);
                  log_info("fragment: %s", fragment);
                  log_info("names:");
                  SET_FOREACH(name, names)
                          log_info("    %s", name);
         }
+
+        /* Make sure everything still works if we don't collect names. */
+        STRV_FOREACH(id, ids) {
+                 const char *fragment;
+                 log_info("*** %s ***", *id);
+                 r = unit_file_find_fragment(unit_ids,
+                                             unit_names,
+                                             *id,
+                                             &fragment,
+                                             NULL);
+                 assert_se(r == 0);
+                 log_info("fragment: %s", fragment);
+        }
 }
 
-static void test_runlevel_to_target(void) {
-        log_info("/* %s */", __func__);
-
+TEST(runlevel_to_target) {
         in_initrd_force(false);
         assert_se(streq_ptr(runlevel_to_target(NULL), NULL));
         assert_se(streq_ptr(runlevel_to_target("unknown-runlevel"), NULL));
@@ -91,13 +102,9 @@
         assert_se(streq_ptr(runlevel_to_target("rd.rescue"), SPECIAL_RESCUE_TARGET));
 }
 
-int main(int argc, char **argv) {
+static int intro(void) {
         log_show_color(true);
-        test_setup_logging(LOG_DEBUG);
-
-        test_unit_validate_alias_symlink_and_warn();
-        test_unit_file_build_name_map(strv_skip(argv, 1));
-        test_runlevel_to_target();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c
index 0077c4c..3904126 100644
--- a/src/test/test-unit-name.c
+++ b/src/test/test-unit-name.c
@@ -3,6 +3,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "sd-id128.h"
+
 #include "alloc-util.h"
 #include "all-units.h"
 #include "glob-util.h"
@@ -16,12 +18,16 @@
 #include "specifier.h"
 #include "string-util.h"
 #include "tests.h"
+#include "tmpfile-util.h"
 #include "unit-def.h"
 #include "unit-name.h"
 #include "unit-printf.h"
 #include "unit.h"
 #include "user-util.h"
-#include "util.h"
+
+static char *runtime_dir = NULL;
+
+STATIC_DESTRUCTOR_REGISTER(runtime_dir, rm_rf_physical_and_freep);
 
 static void test_unit_name_is_valid_one(const char *name, UnitNameFlags flags, bool expected) {
         log_info("%s ( %s%s%s ): %s",
@@ -33,9 +39,7 @@
         assert_se(unit_name_is_valid(name, flags) == expected);
 }
 
-static void test_unit_name_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_is_valid) {
         test_unit_name_is_valid_one("foo.service", UNIT_NAME_ANY, true);
         test_unit_name_is_valid_one("foo.service", UNIT_NAME_PLAIN, true);
         test_unit_name_is_valid_one("foo.service", UNIT_NAME_INSTANCE, false);
@@ -91,9 +95,7 @@
         assert_se(streq_ptr(t, expected));
 }
 
-static void test_unit_name_replace_instance(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_replace_instance) {
         test_unit_name_replace_instance_one("foo@.service", "waldo", "foo@waldo.service", 0);
         test_unit_name_replace_instance_one("foo@xyz.service", "waldo", "foo@waldo.service", 0);
         test_unit_name_replace_instance_one("xyz", "waldo", NULL, -EINVAL);
@@ -106,6 +108,7 @@
 
 static void test_unit_name_from_path_one(const char *path, const char *suffix, const char *expected, int ret) {
         _cleanup_free_ char *t = NULL;
+        int r;
 
         assert_se(unit_name_from_path(path, suffix, &t) == ret);
         puts(strna(t));
@@ -113,15 +116,32 @@
 
         if (t) {
                 _cleanup_free_ char *k = NULL;
-                assert_se(unit_name_to_path(t, &k) == 0);
+
+                /* We don't support converting hashed unit names back to paths */
+                r = unit_name_to_path(t, &k);
+                if (r == -ENAMETOOLONG)
+                        return;
+                assert(r == 0);
+
                 puts(strna(k));
                 assert_se(path_equal(k, empty_to_root(path)));
         }
 }
 
-static void test_unit_name_from_path(void) {
-        log_info("/* %s */", __func__);
+TEST(unit_name_is_hashed) {
+        assert_se(!unit_name_is_hashed(""));
+        assert_se(!unit_name_is_hashed("foo@bar.service"));
+        assert_se(!unit_name_is_hashed("foo@.service"));
+        assert_se(unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9ed33c2ec55.mount"));
+        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736D9ED33C2EC55.mount"));
+        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!7736d9ed33c2ec55.mount"));
+        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9gd33c2ec55.mount"));
+        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_.mount"));
+        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_2103e1466b87f7f7@waldo.mount"));
+        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_2103e1466b87f7f7@.mount"));
+}
 
+TEST(unit_name_from_path) {
         test_unit_name_from_path_one("/waldo", ".mount", "waldo.mount", 0);
         test_unit_name_from_path_one("/waldo/quuix", ".mount", "waldo-quuix.mount", 0);
         test_unit_name_from_path_one("/waldo/quuix/", ".mount", "waldo-quuix.mount", 0);
@@ -130,7 +150,8 @@
         test_unit_name_from_path_one("///", ".mount", "-.mount", 0);
         test_unit_name_from_path_one("/foo/../bar", ".mount", NULL, -EINVAL);
         test_unit_name_from_path_one("/foo/./bar", ".mount", "foo-bar.mount", 0);
-        test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount", NULL, -ENAMETOOLONG);
+        test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount",
+                                     "waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9ed33c2ec55.mount", 0);
 }
 
 static void test_unit_name_from_path_instance_one(const char *pattern, const char *path, const char *suffix, const char *expected, int ret) {
@@ -149,9 +170,7 @@
         }
 }
 
-static void test_unit_name_from_path_instance(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_from_path_instance) {
         test_unit_name_from_path_instance_one("waldo", "/waldo", ".mount", "waldo@waldo.mount", 0);
         test_unit_name_from_path_instance_one("waldo", "/waldo////quuix////", ".mount", "waldo@waldo-quuix.mount", 0);
         test_unit_name_from_path_instance_one("waldo", "/", ".mount", "waldo@-.mount", 0);
@@ -160,7 +179,6 @@
         test_unit_name_from_path_instance_one("waldo", "..", ".mount", NULL, -EINVAL);
         test_unit_name_from_path_instance_one("waldo", "/foo", ".waldi", NULL, -EINVAL);
         test_unit_name_from_path_instance_one("wa--ldo", "/--", ".mount", "wa--ldo@\\x2d\\x2d.mount", 0);
-        test_unit_name_from_path_instance_one("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "/waldo", ".mount", NULL, -ENAMETOOLONG);
 }
 
 static void test_unit_name_to_path_one(const char *unit, const char *path, int ret) {
@@ -170,9 +188,7 @@
         assert_se(streq_ptr(path, p));
 }
 
-static void test_unit_name_to_path(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_to_path) {
         test_unit_name_to_path_one("home.mount", "/home", 0);
         test_unit_name_to_path_one("home-lennart.mount", "/home/lennart", 0);
         test_unit_name_to_path_one("home-lennart-.mount", NULL, -EINVAL);
@@ -201,9 +217,7 @@
         }
 }
 
-static void test_unit_name_mangle(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_mangle) {
         test_unit_name_mangle_one(false, "foo.service", "foo.service", 0);
         test_unit_name_mangle_one(false, "/home", "home.mount", 1);
         test_unit_name_mangle_one(false, "/dev/sda", "dev-sda.device", 1);
@@ -220,45 +234,82 @@
         test_unit_name_mangle_one(true, "ü*", "\\xc3\\xbc*", 1);
 }
 
-static int test_unit_printf(void) {
-        _cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *gid = NULL, *group = NULL, *uid = NULL, *user = NULL, *shell = NULL, *home = NULL;
+TEST_RET(unit_printf, .sd_booted = true) {
+        _cleanup_free_ char
+                *architecture, *os_image_version, *boot_id = NULL, *os_build_id,
+                *hostname, *short_hostname, *pretty_hostname,
+                *machine_id = NULL, *os_image_id, *os_id, *os_version_id, *os_variant_id,
+                *user, *group, *uid, *gid, *home, *shell,
+                *tmp_dir, *var_tmp_dir;
         _cleanup_(manager_freep) Manager *m = NULL;
+        _cleanup_close_ int fd = -EBADF;
         Unit *u;
         int r;
 
-        log_info("/* %s */", __func__);
+        _cleanup_(unlink_tempfilep) char filename[] = "/tmp/test-unit_printf.XXXXXX";
+        fd = mkostemp_safe(filename);
+        assert_se(fd >= 0);
 
-        assert_se(specifier_machine_id('m', NULL, NULL, NULL, &mid) >= 0 && mid);
-        assert_se(specifier_boot_id('b', NULL, NULL, NULL, &bid) >= 0 && bid);
-        assert_se(host = gethostname_malloc());
+        /* Using the specifier functions is admittedly a bit circular, but we don't want to reimplement the
+         * logic a second time. We're at least testing that the hookup works. */
+        assert_se(specifier_architecture('a', NULL, NULL, NULL, &architecture) >= 0);
+        assert_se(architecture);
+        assert_se(specifier_os_image_version('A', NULL, NULL, NULL, &os_image_version) >= 0);
+        if (sd_booted() > 0) {
+                assert_se(specifier_boot_id('b', NULL, NULL, NULL, &boot_id) >= 0);
+                assert_se(boot_id);
+        }
+        assert_se(specifier_os_build_id('B', NULL, NULL, NULL, &os_build_id) >= 0);
+        assert_se(hostname = gethostname_malloc());
+        assert_se(specifier_short_hostname('l', NULL, NULL, NULL, &short_hostname) == 0);
+        assert_se(short_hostname);
+        assert_se(specifier_pretty_hostname('q', NULL, NULL, NULL, &pretty_hostname) == 0);
+        assert_se(pretty_hostname);
+        if (sd_id128_get_machine(NULL) >= 0) {
+                assert_se(specifier_machine_id('m', NULL, NULL, NULL, &machine_id) >= 0);
+                assert_se(machine_id);
+        }
+        assert_se(specifier_os_image_id('M', NULL, NULL, NULL, &os_image_id) >= 0);
+        assert_se(specifier_os_id('o', NULL, NULL, NULL, &os_id) >= 0);
+        assert_se(specifier_os_version_id('w', NULL, NULL, NULL, &os_version_id) >= 0);
+        assert_se(specifier_os_variant_id('W', NULL, NULL, NULL, &os_variant_id) >= 0);
         assert_se(user = uid_to_name(getuid()));
         assert_se(group = gid_to_name(getgid()));
         assert_se(asprintf(&uid, UID_FMT, getuid()));
         assert_se(asprintf(&gid, UID_FMT, getgid()));
         assert_se(get_home_dir(&home) >= 0);
         assert_se(get_shell(&shell) >= 0);
+        assert_se(specifier_tmp_dir('T', NULL, NULL, NULL, &tmp_dir) >= 0);
+        assert_se(tmp_dir);
+        assert_se(specifier_var_tmp_dir('V', NULL, NULL, NULL, &var_tmp_dir) >= 0);
+        assert_se(var_tmp_dir);
 
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
         if (manager_errno_skip_test(r))
                 return log_tests_skipped_errno(r, "manager_new");
         assert_se(r == 0);
 
-#define expect(unit, pattern, expected)                                 \
+        assert_se(free_and_strdup(&m->cgroup_root, "/cgroup-root") == 1);
+
+#define expect(unit, pattern, _expected)                                \
         {                                                               \
-                char *e;                                                \
                 _cleanup_free_ char *t = NULL;                          \
                 assert_se(unit_full_printf(unit, pattern, &t) >= 0);    \
-                printf("result: %s\nexpect: %s\n", t, expected);        \
-                if ((e = endswith(expected, "*")))                      \
-                        assert_se(strncmp(t, e, e-expected));              \
-                else                                                    \
-                        assert_se(streq(t, expected));                     \
+                const char *expected = strempty(_expected);             \
+                printf("%s: result: %s\n    expect: %s\n", pattern, t, expected); \
+                assert_se(fnmatch(expected, t, FNM_NOESCAPE) == 0);     \
         }
 
         assert_se(u = unit_new(m, sizeof(Service)));
         assert_se(unit_add_name(u, "blah.service") == 0);
         assert_se(unit_add_name(u, "blah.service") == 0);
 
+        /* We need *a* file that exists, but it doesn't even need to have the right suffix. */
+        assert_se(free_and_strdup(&u->fragment_path, filename) == 1);
+
+        /* This sets the slice to /app.slice. */
+        assert_se(unit_set_default_slice(u) == 1);
+
         /* general tests */
         expect(u, "%%", "%");
         expect(u, "%%s", "%s");
@@ -266,71 +317,112 @@
         expect(u, "%", "%");
 
         /* normal unit */
-        expect(u, "%n", "blah.service");
-        expect(u, "%f", "/blah");
-        expect(u, "%N", "blah");
-        expect(u, "%p", "blah");
-        expect(u, "%P", "blah");
-        expect(u, "%i", "");
-        expect(u, "%I", "");
-        expect(u, "%j", "blah");
-        expect(u, "%J", "blah");
+        expect(u, "%a", architecture);
+        expect(u, "%A", os_image_version);
+        if (boot_id)
+                expect(u, "%b", boot_id);
+        expect(u, "%B", os_build_id);
+        expect(u, "%H", hostname);
+        expect(u, "%l", short_hostname);
+        expect(u, "%q", pretty_hostname);
+        if (machine_id)
+                expect(u, "%m", machine_id);
+        expect(u, "%M", os_image_id);
+        expect(u, "%o", os_id);
+        expect(u, "%w", os_version_id);
+        expect(u, "%W", os_variant_id);
         expect(u, "%g", group);
         expect(u, "%G", gid);
         expect(u, "%u", user);
         expect(u, "%U", uid);
+        expect(u, "%T", tmp_dir);
+        expect(u, "%V", var_tmp_dir);
+
+        expect(u, "%i", "");
+        expect(u, "%I", "");
+        expect(u, "%j", "blah");
+        expect(u, "%J", "blah");
+        expect(u, "%n", "blah.service");
+        expect(u, "%N", "blah");
+        expect(u, "%p", "blah");
+        expect(u, "%P", "blah");
+        expect(u, "%f", "/blah");
+        expect(u, "%y", filename);
+        expect(u, "%Y", "/tmp");
+        expect(u, "%C", m->prefix[EXEC_DIRECTORY_CACHE]);
+        expect(u, "%d", "*/credentials/blah.service");
+        expect(u, "%E", m->prefix[EXEC_DIRECTORY_CONFIGURATION]);
+        expect(u, "%L", m->prefix[EXEC_DIRECTORY_LOGS]);
+        expect(u, "%S", m->prefix[EXEC_DIRECTORY_STATE]);
+        expect(u, "%t", m->prefix[EXEC_DIRECTORY_RUNTIME]);
         expect(u, "%h", home);
-        expect(u, "%m", mid);
-        expect(u, "%b", bid);
-        expect(u, "%H", host);
-        expect(u, "%t", "/run/user/*");
+        expect(u, "%s", shell);
+
+        /* deprecated */
+        expect(u, "%c", "/cgroup-root/app.slice/blah.service");
+        expect(u, "%r", "/cgroup-root/app.slice");
+        expect(u, "%R", "/cgroup-root");
 
         /* templated */
         assert_se(u = unit_new(m, sizeof(Service)));
         assert_se(unit_add_name(u, "blah@foo-foo.service") == 0);
         assert_se(unit_add_name(u, "blah@foo-foo.service") == 0);
 
-        expect(u, "%n", "blah@foo-foo.service");
-        expect(u, "%N", "blah@foo-foo");
-        expect(u, "%f", "/foo/foo");
-        expect(u, "%p", "blah");
-        expect(u, "%P", "blah");
+        assert_se(free_and_strdup(&u->fragment_path, filename) == 1);
+
+        /* This sets the slice to /app.slice/app-blah.slice. */
+        assert_se(unit_set_default_slice(u) == 1);
+
         expect(u, "%i", "foo-foo");
         expect(u, "%I", "foo/foo");
         expect(u, "%j", "blah");
         expect(u, "%J", "blah");
-        expect(u, "%g", group);
-        expect(u, "%G", gid);
-        expect(u, "%u", user);
-        expect(u, "%U", uid);
+        expect(u, "%n", "blah@foo-foo.service");
+        expect(u, "%N", "blah@foo-foo");
+        expect(u, "%p", "blah");
+        expect(u, "%P", "blah");
+        expect(u, "%f", "/foo/foo");
+        expect(u, "%y", filename);
+        expect(u, "%Y", "/tmp");
+        expect(u, "%C", m->prefix[EXEC_DIRECTORY_CACHE]);
+        expect(u, "%d", "*/credentials/blah@foo-foo.service");
+        expect(u, "%E", m->prefix[EXEC_DIRECTORY_CONFIGURATION]);
+        expect(u, "%L", m->prefix[EXEC_DIRECTORY_LOGS]);
+        expect(u, "%S", m->prefix[EXEC_DIRECTORY_STATE]);
+        expect(u, "%t", m->prefix[EXEC_DIRECTORY_RUNTIME]);
         expect(u, "%h", home);
-        expect(u, "%m", mid);
-        expect(u, "%b", bid);
-        expect(u, "%H", host);
-        expect(u, "%t", "/run/user/*");
+        expect(u, "%s", shell);
+
+        /* deprecated */
+        expect(u, "%c", "/cgroup-root/app.slice/app-blah.slice/blah@foo-foo.service");
+        expect(u, "%r", "/cgroup-root/app.slice/app-blah.slice");
+        expect(u, "%R", "/cgroup-root");
 
         /* templated with components */
         assert_se(u = unit_new(m, sizeof(Slice)));
         assert_se(unit_add_name(u, "blah-blah\\x2d.slice") == 0);
 
-        expect(u, "%n", "blah-blah\\x2d.slice");
-        expect(u, "%N", "blah-blah\\x2d");
-        expect(u, "%f", "/blah/blah-");
-        expect(u, "%p", "blah-blah\\x2d");
-        expect(u, "%P", "blah/blah-");
         expect(u, "%i", "");
         expect(u, "%I", "");
         expect(u, "%j", "blah\\x2d");
         expect(u, "%J", "blah-");
+        expect(u, "%n", "blah-blah\\x2d.slice");
+        expect(u, "%N", "blah-blah\\x2d");
+        expect(u, "%p", "blah-blah\\x2d");
+        expect(u, "%P", "blah/blah-");
+        expect(u, "%f", "/blah/blah-");
+
+        /* deprecated */
+        expect(u, "%c", "/cgroup-root/blah-blah\\x2d.slice");
+        expect(u, "%r", "/cgroup-root");
+        expect(u, "%R", "/cgroup-root");
 
 #undef expect
 
         return 0;
 }
 
-static void test_unit_instance_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_instance_is_valid) {
         assert_se(unit_instance_is_valid("fooBar"));
         assert_se(unit_instance_is_valid("foo-bar"));
         assert_se(unit_instance_is_valid("foo.stUff"));
@@ -343,9 +435,7 @@
         assert_se(!unit_instance_is_valid("foo/bar"));
 }
 
-static void test_unit_prefix_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_prefix_is_valid) {
         assert_se(unit_prefix_is_valid("fooBar"));
         assert_se(unit_prefix_is_valid("foo-bar"));
         assert_se(unit_prefix_is_valid("foo.stUff"));
@@ -359,11 +449,9 @@
         assert_se(!unit_prefix_is_valid("@foo-bar"));
 }
 
-static void test_unit_name_change_suffix(void) {
+TEST(unit_name_change_suffix) {
         char *t;
 
-        log_info("/* %s */", __func__);
-
         assert_se(unit_name_change_suffix("foo.mount", ".service", &t) == 0);
         assert_se(streq(t, "foo.service"));
         free(t);
@@ -373,11 +461,9 @@
         free(t);
 }
 
-static void test_unit_name_build(void) {
+TEST(unit_name_build) {
         char *t;
 
-        log_info("/* %s */", __func__);
-
         assert_se(unit_name_build("foo", "bar", ".service", &t) == 0);
         assert_se(streq(t, "foo@bar.service"));
         free(t);
@@ -391,9 +477,7 @@
         free(t);
 }
 
-static void test_slice_name_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(slice_name_is_valid) {
         assert_se( slice_name_is_valid(SPECIAL_ROOT_SLICE));
         assert_se( slice_name_is_valid("foo.slice"));
         assert_se( slice_name_is_valid("foo-bar.slice"));
@@ -422,12 +506,10 @@
         assert_se(!slice_name_is_valid("foo@bar.service"));
 }
 
-static void test_build_subslice(void) {
+TEST(build_subslice) {
         char *a;
         char *b;
 
-        log_info("/* %s */", __func__);
-
         assert_se(slice_build_subslice(SPECIAL_ROOT_SLICE, "foo", &a) >= 0);
         assert_se(slice_build_subslice(a, "bar", &b) >= 0);
         free(a);
@@ -449,9 +531,7 @@
         assert_se(streq_ptr(s, expect));
 }
 
-static void test_build_parent_slice(void) {
-        log_info("/* %s */", __func__);
-
+TEST(build_parent_slice) {
         test_build_parent_slice_one(SPECIAL_ROOT_SLICE, NULL, 0);
         test_build_parent_slice_one("foo.slice", SPECIAL_ROOT_SLICE, 1);
         test_build_parent_slice_one("foo-bar.slice", "foo.slice", 1);
@@ -470,12 +550,10 @@
         test_build_parent_slice_one("@.slice", NULL, -EINVAL);
 }
 
-static void test_unit_name_to_instance(void) {
+TEST(unit_name_to_instance) {
         UnitNameFlags r;
         char *instance;
 
-        log_info("/* %s */", __func__);
-
         r = unit_name_to_instance("foo@bar.service", &instance);
         assert_se(r == UNIT_NAME_INSTANCE);
         assert_se(streq(instance, "bar"));
@@ -504,11 +582,9 @@
         assert_se(!instance);
 }
 
-static void test_unit_name_escape(void) {
+TEST(unit_name_escape) {
         _cleanup_free_ char *r;
 
-        log_info("/* %s */", __func__);
-
         r = unit_name_escape("ab+-c.a/bc@foo.service");
         assert_se(r);
         assert_se(streq(r, "ab\\x2b\\x2dc.a-bc\\x40foo.service"));
@@ -522,9 +598,7 @@
         assert_se(streq_ptr(f, expected));
 }
 
-static void test_unit_name_template(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_template) {
         test_u_n_t_one("foo@bar.service", "foo@.service", 0);
         test_u_n_t_one("foo.mount", NULL, -EINVAL);
 }
@@ -536,9 +610,7 @@
         assert_se(streq_ptr(path, p));
 }
 
-static void test_unit_name_path_unescape(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_path_unescape) {
         test_unit_name_path_unescape_one("foo", "/foo", 0);
         test_unit_name_path_unescape_one("foo-bar", "/foo/bar", 0);
         test_unit_name_path_unescape_one("foo-.bar", "/foo/.bar", 0);
@@ -560,9 +632,7 @@
         assert_se(streq_ptr(k, output));
 }
 
-static void test_unit_name_to_prefix(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_to_prefix) {
         test_unit_name_to_prefix_one("foobar.service", 0, "foobar");
         test_unit_name_to_prefix_one("", -EINVAL, NULL);
         test_unit_name_to_prefix_one("foobar", -EINVAL, NULL);
@@ -582,9 +652,7 @@
         assert_se(streq_ptr(k, output));
 }
 
-static void test_unit_name_from_dbus_path(void) {
-        log_info("/* %s */", __func__);
-
+TEST(unit_name_from_dbus_path) {
         test_unit_name_from_dbus_path_one("/org/freedesktop/systemd1/unit/dbus_2esocket", 0, "dbus.socket");
         test_unit_name_from_dbus_path_one("/org/freedesktop/systemd1/unit/_2d_2emount", 0, "-.mount");
         test_unit_name_from_dbus_path_one("/org/freedesktop/systemd1/unit/_2d_2eslice", 0, "-.slice");
@@ -870,38 +938,26 @@
         test_unit_name_from_dbus_path_one("/org/freedesktop/systemd1/unit/wpa_5fsupplicant_2eservice", 0, "wpa_supplicant.service");
 }
 
-int main(int argc, char* argv[]) {
-        _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
-        int r, rc = 0;
+TEST(unit_name_prefix_equal) {
+        assert_se(unit_name_prefix_equal("a.service", "a.service"));
+        assert_se(unit_name_prefix_equal("a.service", "a.mount"));
+        assert_se(unit_name_prefix_equal("a@b.service", "a.service"));
+        assert_se(unit_name_prefix_equal("a@b.service", "a@c.service"));
 
-        test_setup_logging(LOG_INFO);
+        assert_se(!unit_name_prefix_equal("a.service", "b.service"));
+        assert_se(!unit_name_prefix_equal("a.service", "b.mount"));
+        assert_se(!unit_name_prefix_equal("a@a.service", "b.service"));
+        assert_se(!unit_name_prefix_equal("a@a.service", "b@a.service"));
+        assert_se(!unit_name_prefix_equal("a", "b"));
+        assert_se(!unit_name_prefix_equal("a", "a"));
+}
 
-        r = enter_cgroup_subroot(NULL);
-        if (r == -ENOMEDIUM)
+static int intro(void) {
+        if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
                 return log_tests_skipped("cgroupfs not available");
 
         assert_se(runtime_dir = setup_fake_runtime_dir());
-
-        test_unit_name_is_valid();
-        test_unit_name_replace_instance();
-        test_unit_name_from_path();
-        test_unit_name_from_path_instance();
-        test_unit_name_mangle();
-        test_unit_name_to_path();
-        TEST_REQ_RUNNING_SYSTEMD(rc = test_unit_printf());
-        test_unit_instance_is_valid();
-        test_unit_prefix_is_valid();
-        test_unit_name_change_suffix();
-        test_unit_name_build();
-        test_slice_name_is_valid();
-        test_build_subslice();
-        test_build_parent_slice();
-        test_unit_name_to_instance();
-        test_unit_name_escape();
-        test_unit_name_template();
-        test_unit_name_path_unescape();
-        test_unit_name_to_prefix();
-        test_unit_name_from_dbus_path();
-
-        return rc;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-unit-serialize.c b/src/test/test-unit-serialize.c
index 58a0d9d..f84435f 100644
--- a/src/test/test-unit-serialize.c
+++ b/src/test/test-unit-serialize.c
@@ -4,6 +4,10 @@
 #include "service.h"
 #include "tests.h"
 
+static char *runtime_dir = NULL;
+
+STATIC_DESTRUCTOR_REGISTER(runtime_dir, rm_rf_physical_and_freep);
+
 #define EXEC_START_ABSOLUTE \
         "ExecStart 0 /bin/sh \"sh\" \"-e\" \"-x\" \"-c\" \"systemctl --state=failed --no-legend --no-pager >/failed ; systemctl daemon-reload ; echo OK >/testok\""
 #define EXEC_START_RELATIVE \
@@ -17,19 +21,17 @@
 
         r = service_deserialize_exec_command(u, key, line);
         log_debug("[%s] → %d (expected: %d)", line, r, expected);
-        assert(r == expected);
+        assert_se(r == expected);
 
         /* Note that the command doesn't match any command in the empty list of commands in 's', so it is
          * always rejected with "Current command vanished from the unit file", and we don't leak anything. */
 }
 
-static void test_deserialize_exec_command(void) {
+TEST(deserialize_exec_command) {
         _cleanup_(manager_freep) Manager *m = NULL;
         int r;
 
-        log_info("/* %s */", __func__);
-
-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
         if (manager_errno_skip_test(r)) {
                 log_notice_errno(r, "Skipping test: manager_new: %m");
                 return;
@@ -50,19 +52,12 @@
         test_deserialize_exec_command_one(m, "control-command", "ExecWhat 11 /a/b c d e", -EINVAL);
 }
 
-int main(int argc, char *argv[]) {
-        _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
-        int r;
-
-        test_setup_logging(LOG_DEBUG);
-
-        r = enter_cgroup_subroot(NULL);
-        if (r == -ENOMEDIUM)
+static int intro(void) {
+        if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
                 return log_tests_skipped("cgroupfs not available");
 
         assert_se(runtime_dir = setup_fake_runtime_dir());
-
-        test_deserialize_exec_command();
-
         return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
diff --git a/src/test/test-user-record.c b/src/test/test-user-record.c
deleted file mode 100644
index c9182e3..0000000
--- a/src/test/test-user-record.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <unistd.h>
-#include <sys/types.h>
-
-#include "fd-util.h"
-#include "fileio.h"
-#include "format-util.h"
-#include "fs-util.h"
-#include "tmpfile-util.h"
-#include "tests.h"
-#include "user-record.h"
-
-static void test_read_login_defs(const char *path) {
-        log_info("/* %s(\"%s\") */", __func__, path ?: "<custom>");
-
-        _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-user-record.XXXXXX";
-        _cleanup_fclose_ FILE *f = NULL;
-        if (!path) {
-                assert_se(fmkostemp_safe(name, "r+", &f) == 0);
-                fprintf(f,
-                        "SYS_UID_MIN "UID_FMT"\n"
-                        "SYS_UID_MAX "UID_FMT"\n"
-                        "SYS_GID_MIN "GID_FMT"\n"
-                        "SYS_GID_MAX "GID_FMT"\n",
-                        SYSTEM_ALLOC_UID_MIN + 5,
-                        SYSTEM_UID_MAX + 5,
-                        SYSTEM_ALLOC_GID_MIN + 5,
-                        SYSTEM_GID_MAX + 5);
-                assert_se(fflush_and_check(f) >= 0);
-        }
-
-        UGIDAllocationRange defs;
-        assert_se(read_login_defs(&defs, path ?: name, NULL) >= 0);
-
-        log_info("system_alloc_uid_min="UID_FMT, defs.system_alloc_uid_min);
-        log_info("system_uid_max="UID_FMT, defs.system_uid_max);
-        log_info("system_alloc_gid_min="GID_FMT, defs.system_alloc_gid_min);
-        log_info("system_gid_max="GID_FMT, defs.system_gid_max);
-
-        if (!path) {
-                uid_t offset = ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES ? 5 : 0;
-                assert_se(defs.system_alloc_uid_min == SYSTEM_ALLOC_UID_MIN + offset);
-                assert_se(defs.system_uid_max == SYSTEM_UID_MAX + offset);
-                assert_se(defs.system_alloc_gid_min == SYSTEM_ALLOC_GID_MIN + offset);
-                assert_se(defs.system_gid_max == SYSTEM_GID_MAX + offset);
-        } else if (streq(path, "/dev/null")) {
-                assert_se(defs.system_alloc_uid_min == SYSTEM_ALLOC_UID_MIN);
-                assert_se(defs.system_uid_max == SYSTEM_UID_MAX);
-                assert_se(defs.system_alloc_gid_min == SYSTEM_ALLOC_GID_MIN);
-                assert_se(defs.system_gid_max == SYSTEM_GID_MAX);
-        }
-}
-
-static void test_acquire_ugid_allocation_range(void) {
-        log_info("/* %s */", __func__);
-
-        const UGIDAllocationRange *defs;
-        assert_se(defs = acquire_ugid_allocation_range());
-
-        log_info("system_alloc_uid_min="UID_FMT, defs->system_alloc_uid_min);
-        log_info("system_uid_max="UID_FMT, defs->system_uid_max);
-        log_info("system_alloc_gid_min="GID_FMT, defs->system_alloc_gid_min);
-        log_info("system_gid_max="GID_FMT, defs->system_gid_max);
-}
-
-static void test_uid_is_system(void) {
-        log_info("/* %s */", __func__);
-
-        uid_t uid = 0;
-        log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
-
-        uid = 999;
-        log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
-
-        uid = getuid();
-        log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
-}
-
-static void test_gid_is_system(void) {
-        log_info("/* %s */", __func__);
-
-        gid_t gid = 0;
-        log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
-
-        gid = 999;
-        log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
-
-        gid = getgid();
-        log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
-}
-
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_read_login_defs("/dev/null");
-        test_read_login_defs("/etc/login.defs");
-        test_read_login_defs(NULL);
-        test_acquire_ugid_allocation_range();
-        test_uid_is_system();
-        test_gid_is_system();
-
-        return 0;
-}
diff --git a/src/test/test-user-util.c b/src/test/test-user-util.c
index 94ca3f0..48d9b1e 100644
--- a/src/test/test-user-util.c
+++ b/src/test/test-user-util.c
@@ -8,6 +8,7 @@
 #include "memory-util.h"
 #include "path-util.h"
 #include "string-util.h"
+#include "tests.h"
 #include "user-util.h"
 
 static void test_uid_to_name_one(uid_t uid, const char *name) {
@@ -23,6 +24,13 @@
         assert_se(streq_ptr(t, name));
 }
 
+TEST(uid_to_name) {
+        test_uid_to_name_one(0, "root");
+        test_uid_to_name_one(UID_NOBODY, NOBODY_USER_NAME);
+        test_uid_to_name_one(0xFFFF, "65535");
+        test_uid_to_name_one(0xFFFFFFFF, "4294967295");
+}
+
 static void test_gid_to_name_one(gid_t gid, const char *name) {
         _cleanup_free_ char *t = NULL;
 
@@ -36,12 +44,18 @@
         assert_se(streq_ptr(t, name));
 }
 
-static void test_parse_uid(void) {
+TEST(gid_to_name) {
+        test_gid_to_name_one(0, "root");
+        test_gid_to_name_one(GID_NOBODY, NOBODY_GROUP_NAME);
+        test_gid_to_name_one(TTY_GID, "tty");
+        test_gid_to_name_one(0xFFFF, "65535");
+        test_gid_to_name_one(0xFFFFFFFF, "4294967295");
+}
+
+TEST(parse_uid) {
         int r;
         uid_t uid;
 
-        log_info("/* %s */", __func__);
-
         r = parse_uid("0", &uid);
         assert_se(r == 0);
         assert_se(uid == 0);
@@ -123,9 +137,7 @@
         assert_se(uid == 100);
 }
 
-static void test_uid_ptr(void) {
-        log_info("/* %s */", __func__);
-
+TEST(uid_ptr) {
         assert_se(UID_TO_PTR(0) != NULL);
         assert_se(UID_TO_PTR(1000) != NULL);
 
@@ -133,9 +145,7 @@
         assert_se(PTR_TO_UID(UID_TO_PTR(1000)) == 1000);
 }
 
-static void test_valid_user_group_name_relaxed(void) {
-        log_info("/* %s */", __func__);
-
+TEST(valid_user_group_name_relaxed) {
         assert_se(!valid_user_group_name(NULL, VALID_USER_RELAX));
         assert_se(!valid_user_group_name("", VALID_USER_RELAX));
         assert_se(!valid_user_group_name("1", VALID_USER_RELAX));
@@ -174,9 +184,7 @@
         assert_se(valid_user_group_name("Dāvis", VALID_USER_RELAX));
 }
 
-static void test_valid_user_group_name(void) {
-        log_info("/* %s */", __func__);
-
+TEST(valid_user_group_name) {
         assert_se(!valid_user_group_name(NULL, 0));
         assert_se(!valid_user_group_name("", 0));
         assert_se(!valid_user_group_name("1", 0));
@@ -216,9 +224,7 @@
         assert_se(!valid_user_group_name("Dāvis", 0));
 }
 
-static void test_valid_user_group_name_or_numeric_relaxed(void) {
-        log_info("/* %s */", __func__);
-
+TEST(valid_user_group_name_or_numeric_relaxed) {
         assert_se(!valid_user_group_name(NULL, VALID_USER_ALLOW_NUMERIC|VALID_USER_RELAX));
         assert_se(!valid_user_group_name("", VALID_USER_ALLOW_NUMERIC|VALID_USER_RELAX));
         assert_se(valid_user_group_name("0", VALID_USER_ALLOW_NUMERIC|VALID_USER_RELAX));
@@ -254,9 +260,7 @@
         assert_se(valid_user_group_name("Dāvis", VALID_USER_ALLOW_NUMERIC|VALID_USER_RELAX));
 }
 
-static void test_valid_user_group_name_or_numeric(void) {
-        log_info("/* %s */", __func__);
-
+TEST(valid_user_group_name_or_numeric) {
         assert_se(!valid_user_group_name(NULL, VALID_USER_ALLOW_NUMERIC));
         assert_se(!valid_user_group_name("", VALID_USER_ALLOW_NUMERIC));
         assert_se(valid_user_group_name("0", VALID_USER_ALLOW_NUMERIC));
@@ -292,9 +296,7 @@
         assert_se(!valid_user_group_name("Dāvis", VALID_USER_ALLOW_NUMERIC));
 }
 
-static void test_valid_gecos(void) {
-        log_info("/* %s */", __func__);
-
+TEST(valid_gecos) {
         assert_se(!valid_gecos(NULL));
         assert_se(valid_gecos(""));
         assert_se(valid_gecos("test"));
@@ -303,9 +305,7 @@
         assert_se(!valid_gecos("In:valid"));
 }
 
-static void test_valid_home(void) {
-        log_info("/* %s */", __func__);
-
+TEST(valid_home) {
         assert_se(!valid_home(NULL));
         assert_se(!valid_home(""));
         assert_se(!valid_home("."));
@@ -346,6 +346,13 @@
         assert_se(path_equal(rshell, shell));
 }
 
+TEST(get_user_creds) {
+        test_get_user_creds_one("root", "root", 0, 0, "/root", DEFAULT_USER_SHELL);
+        test_get_user_creds_one("0", "root", 0, 0, "/root", DEFAULT_USER_SHELL);
+        test_get_user_creds_one(NOBODY_USER_NAME, NOBODY_USER_NAME, UID_NOBODY, GID_NOBODY, "/", NOLOGIN);
+        test_get_user_creds_one("65534", NOBODY_USER_NAME, UID_NOBODY, GID_NOBODY, "/", NOLOGIN);
+}
+
 static void test_get_group_creds_one(const char *id, const char *name, gid_t gid) {
         gid_t rgid = GID_INVALID;
         int r;
@@ -363,9 +370,14 @@
         assert_se(rgid == gid);
 }
 
-static void test_make_salt(void) {
-        log_info("/* %s */", __func__);
+TEST(get_group_creds) {
+        test_get_group_creds_one("root", "root", 0);
+        test_get_group_creds_one("0", "root", 0);
+        test_get_group_creds_one(NOBODY_GROUP_NAME, NOBODY_GROUP_NAME, GID_NOBODY);
+        test_get_group_creds_one("65534", NOBODY_GROUP_NAME, GID_NOBODY);
+}
 
+TEST(make_salt) {
         _cleanup_free_ char *s, *t;
 
         assert_se(make_salt(&s) == 0);
@@ -374,17 +386,17 @@
         assert_se(make_salt(&t) == 0);
         log_info("got %s", t);
 
-        assert(!streq(s, t));
+        assert_se(!streq(s, t));
 }
 
-static void test_in_gid(void) {
-        assert(in_gid(getgid()) >= 0);
-        assert(in_gid(getegid()) >= 0);
-        assert(in_gid(GID_INVALID) < 0);
-        assert(in_gid(TTY_GID) == 0); /* The TTY gid is for owning ttys, it would be really really weird if we were in it. */
+TEST(in_gid) {
+        assert_se(in_gid(getgid()) >= 0);
+        assert_se(in_gid(getegid()) >= 0);
+        assert_se(in_gid(GID_INVALID) < 0);
+        assert_se(in_gid(TTY_GID) == 0); /* The TTY gid is for owning ttys, it would be really really weird if we were in it. */
 }
 
-static void test_gid_lists_ops(void) {
+TEST(gid_lists_ops) {
         static const gid_t l1[] = { 5, 10, 15, 20, 25};
         static const gid_t l2[] = { 1, 2, 3, 15, 20, 25};
         static const gid_t l3[] = { 5, 10, 15, 20, 25, 26, 27};
@@ -421,11 +433,9 @@
         assert_se(gids);
 }
 
-static void test_parse_uid_range(void) {
+TEST(parse_uid_range) {
         uid_t a = 4711, b = 4711;
 
-        log_info("/* %s */", __func__);
-
         assert_se(parse_uid_range("", &a, &b) == -EINVAL && a == 4711 && b == 4711);
         assert_se(parse_uid_range(" ", &a, &b) == -EINVAL && a == 4711 && b == 4711);
         assert_se(parse_uid_range("x", &a, &b) == -EINVAL && a == 4711 && b == 4711);
@@ -462,7 +472,7 @@
         assert_se(valid_gecos(p));
 }
 
-static void test_mangle_gecos(void) {
+TEST(mangle_gecos) {
         test_mangle_gecos_one("", "");
         test_mangle_gecos_one("root", "root");
         test_mangle_gecos_one("wuff\nwuff", "wuff wuff");
@@ -473,45 +483,4 @@
         test_mangle_gecos_one("\xe2\x28\xa1", " ( ");
 }
 
-int main(int argc, char *argv[]) {
-        test_uid_to_name_one(0, "root");
-        test_uid_to_name_one(UID_NOBODY, NOBODY_USER_NAME);
-        test_uid_to_name_one(0xFFFF, "65535");
-        test_uid_to_name_one(0xFFFFFFFF, "4294967295");
-
-        test_gid_to_name_one(0, "root");
-        test_gid_to_name_one(GID_NOBODY, NOBODY_GROUP_NAME);
-        test_gid_to_name_one(TTY_GID, "tty");
-        test_gid_to_name_one(0xFFFF, "65535");
-        test_gid_to_name_one(0xFFFFFFFF, "4294967295");
-
-        test_get_user_creds_one("root", "root", 0, 0, "/root", "/bin/sh");
-        test_get_user_creds_one("0", "root", 0, 0, "/root", "/bin/sh");
-        test_get_user_creds_one(NOBODY_USER_NAME, NOBODY_USER_NAME, UID_NOBODY, GID_NOBODY, "/", NOLOGIN);
-        test_get_user_creds_one("65534", NOBODY_USER_NAME, UID_NOBODY, GID_NOBODY, "/", NOLOGIN);
-
-        test_get_group_creds_one("root", "root", 0);
-        test_get_group_creds_one("0", "root", 0);
-        test_get_group_creds_one(NOBODY_GROUP_NAME, NOBODY_GROUP_NAME, GID_NOBODY);
-        test_get_group_creds_one("65534", NOBODY_GROUP_NAME, GID_NOBODY);
-
-        test_parse_uid();
-        test_uid_ptr();
-
-        test_valid_user_group_name_relaxed();
-        test_valid_user_group_name();
-        test_valid_user_group_name_or_numeric_relaxed();
-        test_valid_user_group_name_or_numeric();
-        test_valid_gecos();
-        test_mangle_gecos();
-        test_valid_home();
-
-        test_make_salt();
-
-        test_in_gid();
-        test_gid_lists_ops();
-
-        test_parse_uid_range();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
index 4ba9ca8..7ba0cb7 100644
--- a/src/test/test-utf8.c
+++ b/src/test/test-utf8.c
@@ -5,11 +5,8 @@
 #include "strv.h"
 #include "tests.h"
 #include "utf8.h"
-#include "util.h"
 
-static void test_utf8_is_printable(void) {
-        log_info("/* %s */", __func__);
-
+TEST(utf8_is_printable) {
         assert_se(utf8_is_printable("ascii is valid\tunicode", 22));
         assert_se(utf8_is_printable("\342\204\242", 3));
         assert_se(!utf8_is_printable("\341\204", 2));
@@ -19,9 +16,7 @@
         assert_se(utf8_is_printable("\t", 1));
 }
 
-static void test_utf8_n_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(utf8_n_is_valid) {
         assert_se( utf8_is_valid_n("ascii is valid unicode", 21));
         assert_se( utf8_is_valid_n("ascii is valid unicode", 22));
         assert_se(!utf8_is_valid_n("ascii is valid unicode", 23));
@@ -38,25 +33,19 @@
         assert_se(!utf8_is_valid_n("<ZZ>", 5));
 }
 
-static void test_utf8_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(utf8_is_valid) {
         assert_se(utf8_is_valid("ascii is valid unicode"));
         assert_se(utf8_is_valid("\342\204\242"));
         assert_se(!utf8_is_valid("\341\204"));
 }
 
-static void test_ascii_is_valid(void) {
-        log_info("/* %s */", __func__);
-
+TEST(ascii_is_valid) {
         assert_se( ascii_is_valid("alsdjf\t\vbarr\nba z"));
         assert_se(!ascii_is_valid("\342\204\242"));
         assert_se(!ascii_is_valid("\341\204"));
 }
 
-static void test_ascii_is_valid_n(void) {
-        log_info("/* %s */", __func__);
-
+TEST(ascii_is_valid_n) {
         assert_se( ascii_is_valid_n("alsdjf\t\vbarr\nba z", 17));
         assert_se( ascii_is_valid_n("alsdjf\t\vbarr\nba z", 16));
         assert_se(!ascii_is_valid_n("alsdjf\t\vbarr\nba z", 18));
@@ -66,9 +55,32 @@
         assert_se( ascii_is_valid_n("\342\204\242", 0));
 }
 
-static void test_utf8_encoded_valid_unichar(void) {
-        log_info("/* %s */", __func__);
+static void test_utf8_to_ascii_one(const char *s, int r_expected, const char *expected) {
+        _cleanup_free_ char *ans = NULL;
+        int r;
 
+        r = utf8_to_ascii(s, '*', &ans);
+        log_debug("\"%s\" → %d/\"%s\" (expected %d/\"%s\")", s, r, strnull(ans), r_expected, strnull(expected));
+        assert_se(r == r_expected);
+        assert_se(streq_ptr(ans, expected));
+}
+
+TEST(utf8_to_ascii) {
+        test_utf8_to_ascii_one("asdf", 0, "asdf");
+        test_utf8_to_ascii_one("dąb", 0, "d*b");
+        test_utf8_to_ascii_one("żęśłą óźń", 0, "***** ***");
+        test_utf8_to_ascii_one("\342\204\242", 0, "*");
+        test_utf8_to_ascii_one("\342\204", -EINVAL, NULL); /* truncated */
+        test_utf8_to_ascii_one("\342", -EINVAL, NULL); /* truncated */
+        test_utf8_to_ascii_one("\302\256", 0, "*");
+        test_utf8_to_ascii_one("", 0, "");
+        test_utf8_to_ascii_one(" ", 0, " ");
+        test_utf8_to_ascii_one("\t", 0, "\t");
+        test_utf8_to_ascii_one("串", 0, "*");
+        test_utf8_to_ascii_one("…👊🔪💐…", 0, "*****");
+}
+
+TEST(utf8_encoded_valid_unichar) {
         assert_se(utf8_encoded_valid_unichar("\342\204\242", 1) == -EINVAL); /* truncated */
         assert_se(utf8_encoded_valid_unichar("\342\204\242", 2) == -EINVAL); /* truncated */
         assert_se(utf8_encoded_valid_unichar("\342\204\242", 3) == 3);
@@ -86,11 +98,9 @@
         assert_se(utf8_encoded_valid_unichar("\341\204\341\204", 5) == -EINVAL);
 }
 
-static void test_utf8_escape_invalid(void) {
+TEST(utf8_escape_invalid) {
         _cleanup_free_ char *p1, *p2, *p3;
 
-        log_info("/* %s */", __func__);
-
         p1 = utf8_escape_invalid("goo goo goo");
         log_debug("\"%s\"", p1);
         assert_se(utf8_is_valid(p1));
@@ -104,11 +114,9 @@
         assert_se(utf8_is_valid(p3));
 }
 
-static void test_utf8_escape_non_printable(void) {
+TEST(utf8_escape_non_printable) {
         _cleanup_free_ char *p1, *p2, *p3, *p4, *p5, *p6;
 
-        log_info("/* %s */", __func__);
-
         p1 = utf8_escape_non_printable("goo goo goo");
         log_debug("\"%s\"", p1);
         assert_se(utf8_is_valid(p1));
@@ -134,10 +142,7 @@
         assert_se(utf8_is_valid(p6));
 }
 
-static void test_utf8_escape_non_printable_full(void) {
-        log_info("/* %s */", __func__);
-
-        const char *s;
+TEST(utf8_escape_non_printable_full) {
         FOREACH_STRING(s,
                        "goo goo goo",       /* ASCII */
                        "\001 \019\20\a",    /* control characters */
@@ -162,14 +167,12 @@
                 }
 }
 
-static void test_utf16_to_utf8(void) {
+TEST(utf16_to_utf8) {
         const char16_t utf16[] = { htole16('a'), htole16(0xd800), htole16('b'), htole16(0xdc00), htole16('c'), htole16(0xd801), htole16(0xdc37) };
         static const char utf8[] = { 'a', 'b', 'c', 0xf0, 0x90, 0x90, 0xb7 };
         _cleanup_free_ char16_t *b = NULL;
         _cleanup_free_ char *a = NULL;
 
-        log_info("/* %s */", __func__);
-
         /* Convert UTF-16 to UTF-8, filtering embedded bad chars */
         a = utf16_to_utf8(utf16, sizeof(utf16));
         assert_se(a);
@@ -186,9 +189,7 @@
         assert_se(memcmp(a, utf8, sizeof(utf8)) == 0);
 }
 
-static void test_utf8_n_codepoints(void) {
-        log_info("/* %s */", __func__);
-
+TEST(utf8_n_codepoints) {
         assert_se(utf8_n_codepoints("abc") == 3);
         assert_se(utf8_n_codepoints("zażółcić gęślą jaźń") == 19);
         assert_se(utf8_n_codepoints("串") == 1);
@@ -197,9 +198,7 @@
         assert_se(utf8_n_codepoints("\xF1") == SIZE_MAX);
 }
 
-static void test_utf8_console_width(void) {
-        log_info("/* %s */", __func__);
-
+TEST(utf8_console_width) {
         assert_se(utf8_console_width("abc") == 3);
         assert_se(utf8_console_width("zażółcić gęślą jaźń") == 19);
         assert_se(utf8_console_width("串") == 2);
@@ -208,11 +207,7 @@
         assert_se(utf8_console_width("\xF1") == SIZE_MAX);
 }
 
-static void test_utf8_to_utf16(void) {
-        const char *p;
-
-        log_info("/* %s */", __func__);
-
+TEST(utf8_to_utf16) {
         FOREACH_STRING(p,
                        "abc",
                        "zażółcić gęślą jaźń",
@@ -232,23 +227,9 @@
         }
 }
 
-int main(int argc, char *argv[]) {
+static int intro(void) {
         log_show_color(true);
-        test_setup_logging(LOG_INFO);
-
-        test_utf8_n_is_valid();
-        test_utf8_is_valid();
-        test_utf8_is_printable();
-        test_ascii_is_valid();
-        test_ascii_is_valid_n();
-        test_utf8_encoded_valid_unichar();
-        test_utf8_escape_invalid();
-        test_utf8_escape_non_printable();
-        test_utf8_escape_non_printable_full();
-        test_utf16_to_utf8();
-        test_utf8_n_codepoints();
-        test_utf8_console_width();
-        test_utf8_to_utf16();
-
-        return 0;
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
diff --git a/src/test/test-util.c b/src/test/test-util.c
deleted file mode 100644
index 3eef2c3..0000000
--- a/src/test/test-util.c
+++ /dev/null
@@ -1,527 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include <errno.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "fileio.h"
-#include "fs-util.h"
-#include "limits-util.h"
-#include "memory-util.h"
-#include "missing_syscall.h"
-#include "parse-util.h"
-#include "process-util.h"
-#include "raw-clone.h"
-#include "rm-rf.h"
-#include "string-util.h"
-#include "tests.h"
-#include "util.h"
-
-static void test_align_power2(void) {
-        unsigned long i, p2;
-
-        log_info("/* %s */", __func__);
-
-        assert_se(ALIGN_POWER2(0) == 0);
-        assert_se(ALIGN_POWER2(1) == 1);
-        assert_se(ALIGN_POWER2(2) == 2);
-        assert_se(ALIGN_POWER2(3) == 4);
-        assert_se(ALIGN_POWER2(4) == 4);
-        assert_se(ALIGN_POWER2(5) == 8);
-        assert_se(ALIGN_POWER2(6) == 8);
-        assert_se(ALIGN_POWER2(7) == 8);
-        assert_se(ALIGN_POWER2(9) == 16);
-        assert_se(ALIGN_POWER2(10) == 16);
-        assert_se(ALIGN_POWER2(11) == 16);
-        assert_se(ALIGN_POWER2(12) == 16);
-        assert_se(ALIGN_POWER2(13) == 16);
-        assert_se(ALIGN_POWER2(14) == 16);
-        assert_se(ALIGN_POWER2(15) == 16);
-        assert_se(ALIGN_POWER2(16) == 16);
-        assert_se(ALIGN_POWER2(17) == 32);
-
-        assert_se(ALIGN_POWER2(ULONG_MAX) == 0);
-        assert_se(ALIGN_POWER2(ULONG_MAX - 1) == 0);
-        assert_se(ALIGN_POWER2(ULONG_MAX - 1024) == 0);
-        assert_se(ALIGN_POWER2(ULONG_MAX / 2) == ULONG_MAX / 2 + 1);
-        assert_se(ALIGN_POWER2(ULONG_MAX + 1) == 0);
-
-        for (i = 1; i < 131071; ++i) {
-                for (p2 = 1; p2 < i; p2 <<= 1)
-                        /* empty */ ;
-
-                assert_se(ALIGN_POWER2(i) == p2);
-        }
-
-        for (i = ULONG_MAX - 1024; i < ULONG_MAX; ++i) {
-                for (p2 = 1; p2 && p2 < i; p2 <<= 1)
-                        /* empty */ ;
-
-                assert_se(ALIGN_POWER2(i) == p2);
-        }
-}
-
-static void test_max(void) {
-        static const struct {
-                int a;
-                int b[CONST_MAX(10, 100)];
-        } val1 = {
-                .a = CONST_MAX(10, 100),
-        };
-        int d = 0;
-        unsigned long x = 12345;
-        unsigned long y = 54321;
-        const char str[] = "a_string_constant";
-        const unsigned long long arr[] = {9999ULL, 10ULL, 0ULL, 3000ULL, 2000ULL, 1000ULL, 100ULL, 9999999ULL};
-        void *p = (void *)str;
-        void *q = (void *)&str[16];
-
-        log_info("/* %s */", __func__);
-
-        assert_cc(sizeof(val1.b) == sizeof(int) * 100);
-
-        /* CONST_MAX returns (void) instead of a value if the passed arguments
-         * are not of the same type or not constant expressions. */
-        assert_cc(__builtin_types_compatible_p(typeof(CONST_MAX(1, 10)), int));
-        assert_cc(__builtin_types_compatible_p(typeof(CONST_MAX(1, 1U)), void));
-
-        assert_se(val1.a == 100);
-        assert_se(MAX(++d, 0) == 1);
-        assert_se(d == 1);
-
-        assert_cc(MAXSIZE(char[3], uint16_t) == 3);
-        assert_cc(MAXSIZE(char[3], uint32_t) == 4);
-        assert_cc(MAXSIZE(char, long) == sizeof(long));
-
-        assert_se(MAX(-5, 5) == 5);
-        assert_se(MAX(5, 5) == 5);
-        assert_se(MAX(MAX(1, MAX(2, MAX(3, 4))), 5) == 5);
-        assert_se(MAX(MAX(1, MAX(2, MAX(3, 2))), 1) == 3);
-        assert_se(MAX(MIN(1, MIN(2, MIN(3, 4))), 5) == 5);
-        assert_se(MAX(MAX(1, MIN(2, MIN(3, 2))), 1) == 2);
-        assert_se(LESS_BY(8, 4) == 4);
-        assert_se(LESS_BY(8, 8) == 0);
-        assert_se(LESS_BY(4, 8) == 0);
-        assert_se(LESS_BY(16, LESS_BY(8, 4)) == 12);
-        assert_se(LESS_BY(4, LESS_BY(8, 4)) == 0);
-        assert_se(CMP(3, 5) == -1);
-        assert_se(CMP(5, 3) == 1);
-        assert_se(CMP(5, 5) == 0);
-        assert_se(CMP(x, y) == -1);
-        assert_se(CMP(y, x) == 1);
-        assert_se(CMP(x, x) == 0);
-        assert_se(CMP(y, y) == 0);
-        assert_se(CMP(UINT64_MAX, (uint64_t) 0) == 1);
-        assert_se(CMP((uint64_t) 0, UINT64_MAX) == -1);
-        assert_se(CMP(UINT64_MAX, UINT64_MAX) == 0);
-        assert_se(CMP(INT64_MIN, INT64_MAX) == -1);
-        assert_se(CMP(INT64_MAX, INT64_MIN) == 1);
-        assert_se(CMP(INT64_MAX, INT64_MAX) == 0);
-        assert_se(CMP(INT64_MIN, INT64_MIN) == 0);
-        assert_se(CMP(INT64_MAX, (int64_t) 0) == 1);
-        assert_se(CMP((int64_t) 0, INT64_MIN) == 1);
-        assert_se(CMP(INT64_MIN, (int64_t) 0) == -1);
-        assert_se(CMP((int64_t) 0, INT64_MAX) == -1);
-        assert_se(CMP(&str[2], &str[7]) == -1);
-        assert_se(CMP(&str[2], &str[2]) == 0);
-        assert_se(CMP(&str[7], (const char *)str) == 1);
-        assert_se(CMP(str[2], str[7]) == 1);
-        assert_se(CMP(str[7], *str) == 1);
-        assert_se(CMP((const unsigned long long *)arr, &arr[3]) == -1);
-        assert_se(CMP(*arr, arr[3]) == 1);
-        assert_se(CMP(p, q) == -1);
-        assert_se(CMP(q, p) == 1);
-        assert_se(CMP(p, p) == 0);
-        assert_se(CMP(q, q) == 0);
-        assert_se(CLAMP(-5, 0, 1) == 0);
-        assert_se(CLAMP(5, 0, 1) == 1);
-        assert_se(CLAMP(5, -10, 1) == 1);
-        assert_se(CLAMP(5, -10, 10) == 5);
-        assert_se(CLAMP(CLAMP(0, -10, 10), CLAMP(-5, 10, 20), CLAMP(100, -5, 20)) == 10);
-}
-
-#pragma GCC diagnostic push
-#ifdef __clang__
-#  pragma GCC diagnostic ignored "-Waddress-of-packed-member"
-#endif
-
-static void test_container_of(void) {
-        struct mytype {
-                uint8_t pad1[3];
-                uint64_t v1;
-                uint8_t pad2[2];
-                uint32_t v2;
-        } myval = { };
-
-        log_info("/* %s */", __func__);
-
-        assert_cc(sizeof(myval) >= 17);
-        assert_se(container_of(&myval.v1, struct mytype, v1) == &myval);
-        assert_se(container_of(&myval.v2, struct mytype, v2) == &myval);
-        assert_se(container_of(&container_of(&myval.v2,
-                                             struct mytype,
-                                             v2)->v1,
-                               struct mytype,
-                               v1) == &myval);
-}
-
-#pragma GCC diagnostic pop
-
-static void test_div_round_up(void) {
-        int div;
-
-        log_info("/* %s */", __func__);
-
-        /* basic tests */
-        assert_se(DIV_ROUND_UP(0, 8) == 0);
-        assert_se(DIV_ROUND_UP(1, 8) == 1);
-        assert_se(DIV_ROUND_UP(8, 8) == 1);
-        assert_se(DIV_ROUND_UP(12, 8) == 2);
-        assert_se(DIV_ROUND_UP(16, 8) == 2);
-
-        /* test multiple evaluation */
-        div = 0;
-        assert_se(DIV_ROUND_UP(div++, 8) == 0 && div == 1);
-        assert_se(DIV_ROUND_UP(++div, 8) == 1 && div == 2);
-        assert_se(DIV_ROUND_UP(8, div++) == 4 && div == 3);
-        assert_se(DIV_ROUND_UP(8, ++div) == 2 && div == 4);
-
-        /* overflow test with exact division */
-        assert_se(sizeof(0U) == 4);
-        assert_se(0xfffffffaU % 10U == 0U);
-        assert_se(0xfffffffaU / 10U == 429496729U);
-        assert_se(DIV_ROUND_UP(0xfffffffaU, 10U) == 429496729U);
-        assert_se((0xfffffffaU + 10U - 1U) / 10U == 0U);
-        assert_se(0xfffffffaU / 10U + !!(0xfffffffaU % 10U) == 429496729U);
-
-        /* overflow test with rounded division */
-        assert_se(0xfffffffdU % 10U == 3U);
-        assert_se(0xfffffffdU / 10U == 429496729U);
-        assert_se(DIV_ROUND_UP(0xfffffffdU, 10U) == 429496730U);
-        assert_se((0xfffffffdU + 10U - 1U) / 10U == 0U);
-        assert_se(0xfffffffdU / 10U + !!(0xfffffffdU % 10U) == 429496730U);
-}
-
-static void test_u64log2(void) {
-        log_info("/* %s */", __func__);
-
-        assert_se(u64log2(0) == 0);
-        assert_se(u64log2(8) == 3);
-        assert_se(u64log2(9) == 3);
-        assert_se(u64log2(15) == 3);
-        assert_se(u64log2(16) == 4);
-        assert_se(u64log2(1024*1024) == 20);
-        assert_se(u64log2(1024*1024+5) == 20);
-}
-
-static void test_protect_errno(void) {
-        log_info("/* %s */", __func__);
-
-        errno = 12;
-        {
-                PROTECT_ERRNO;
-                errno = 11;
-        }
-        assert_se(errno == 12);
-}
-
-static void test_unprotect_errno_inner_function(void) {
-        PROTECT_ERRNO;
-
-        errno = 2222;
-}
-
-static void test_unprotect_errno(void) {
-        log_info("/* %s */", __func__);
-
-        errno = 4711;
-
-        PROTECT_ERRNO;
-
-        errno = 815;
-
-        UNPROTECT_ERRNO;
-
-        assert_se(errno == 4711);
-
-        test_unprotect_errno_inner_function();
-
-        assert_se(errno == 4711);
-}
-
-static void test_in_set(void) {
-        log_info("/* %s */", __func__);
-
-        assert_se(IN_SET(1, 1));
-        assert_se(IN_SET(1, 1, 2, 3, 4));
-        assert_se(IN_SET(2, 1, 2, 3, 4));
-        assert_se(IN_SET(3, 1, 2, 3, 4));
-        assert_se(IN_SET(4, 1, 2, 3, 4));
-        assert_se(!IN_SET(0, 1));
-        assert_se(!IN_SET(0, 1, 2, 3, 4));
-}
-
-static void test_log2i(void) {
-        log_info("/* %s */", __func__);
-
-        assert_se(log2i(1) == 0);
-        assert_se(log2i(2) == 1);
-        assert_se(log2i(3) == 1);
-        assert_se(log2i(4) == 2);
-        assert_se(log2i(32) == 5);
-        assert_se(log2i(33) == 5);
-        assert_se(log2i(63) == 5);
-        assert_se(log2i(INT_MAX) == sizeof(int)*8-2);
-}
-
-static void test_eqzero(void) {
-        const uint32_t zeros[] = {0, 0, 0};
-        const uint32_t ones[] = {1, 1};
-        const uint32_t mixed[] = {0, 1, 0, 0, 0};
-        const uint8_t longer[] = {[55] = 255};
-
-        log_info("/* %s */", __func__);
-
-        assert_se(eqzero(zeros));
-        assert_se(!eqzero(ones));
-        assert_se(!eqzero(mixed));
-        assert_se(!eqzero(longer));
-}
-
-static void test_raw_clone(void) {
-        pid_t parent, pid, pid2;
-
-        log_info("/* %s */", __func__);
-
-        parent = getpid();
-        log_info("before clone: getpid()→"PID_FMT, parent);
-        assert_se(raw_getpid() == parent);
-
-        pid = raw_clone(0);
-        assert_se(pid >= 0);
-
-        pid2 = raw_getpid();
-        log_info("raw_clone: "PID_FMT" getpid()→"PID_FMT" raw_getpid()→"PID_FMT,
-                 pid, getpid(), pid2);
-        if (pid == 0) {
-                assert_se(pid2 != parent);
-                _exit(EXIT_SUCCESS);
-        } else {
-                int status;
-
-                assert_se(pid2 == parent);
-                waitpid(pid, &status, __WCLONE);
-                assert_se(WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS);
-        }
-
-        errno = 0;
-        assert_se(raw_clone(CLONE_FS|CLONE_NEWNS) == -1);
-        assert_se(errno == EINVAL || ERRNO_IS_PRIVILEGE(errno)); /* Certain container environments prohibit namespaces to us, don't fail in that case */
-}
-
-static void test_physical_memory(void) {
-        uint64_t p;
-        char buf[FORMAT_BYTES_MAX];
-
-        log_info("/* %s */", __func__);
-
-        p = physical_memory();
-        assert_se(p > 0);
-        assert_se(p < UINT64_MAX);
-        assert_se(p % page_size() == 0);
-
-        log_info("Memory: %s (%" PRIu64 ")", format_bytes(buf, sizeof(buf), p), p);
-}
-
-static void test_physical_memory_scale(void) {
-        uint64_t p;
-
-        log_info("/* %s */", __func__);
-
-        p = physical_memory();
-
-        assert_se(physical_memory_scale(0, 100) == 0);
-        assert_se(physical_memory_scale(100, 100) == p);
-
-        log_info("Memory original: %" PRIu64, physical_memory());
-        log_info("Memory scaled by 50%%: %" PRIu64, physical_memory_scale(50, 100));
-        log_info("Memory divided by 2: %" PRIu64, physical_memory() / 2);
-        log_info("Page size: %zu", page_size());
-
-        /* There might be an uneven number of pages, hence permit these calculations to be half a page off... */
-        assert_se(page_size()/2 + physical_memory_scale(50, 100) - p/2 <= page_size());
-        assert_se(physical_memory_scale(200, 100) == p*2);
-
-        assert_se(physical_memory_scale(0, 1) == 0);
-        assert_se(physical_memory_scale(1, 1) == p);
-        assert_se(physical_memory_scale(2, 1) == p*2);
-
-        assert_se(physical_memory_scale(0, 2) == 0);
-
-        assert_se(page_size()/2 + physical_memory_scale(1, 2) - p/2 <= page_size());
-        assert_se(physical_memory_scale(2, 2) == p);
-        assert_se(physical_memory_scale(4, 2) == p*2);
-
-        assert_se(physical_memory_scale(0, UINT32_MAX) == 0);
-        assert_se(physical_memory_scale(UINT32_MAX, UINT32_MAX) == p);
-
-        /* overflow */
-        assert_se(physical_memory_scale(UINT64_MAX/4, UINT64_MAX) == UINT64_MAX);
-}
-
-static void test_system_tasks_max(void) {
-        uint64_t t;
-
-        log_info("/* %s */", __func__);
-
-        t = system_tasks_max();
-        assert_se(t > 0);
-        assert_se(t < UINT64_MAX);
-
-        log_info("Max tasks: %" PRIu64, t);
-}
-
-static void test_system_tasks_max_scale(void) {
-        uint64_t t;
-
-        log_info("/* %s */", __func__);
-
-        t = system_tasks_max();
-
-        assert_se(system_tasks_max_scale(0, 100) == 0);
-        assert_se(system_tasks_max_scale(100, 100) == t);
-
-        assert_se(system_tasks_max_scale(0, 1) == 0);
-        assert_se(system_tasks_max_scale(1, 1) == t);
-        assert_se(system_tasks_max_scale(2, 1) == 2*t);
-
-        assert_se(system_tasks_max_scale(0, 2) == 0);
-        assert_se(system_tasks_max_scale(1, 2) == t/2);
-        assert_se(system_tasks_max_scale(2, 2) == t);
-        assert_se(system_tasks_max_scale(3, 2) == (3*t)/2);
-        assert_se(system_tasks_max_scale(4, 2) == t*2);
-
-        assert_se(system_tasks_max_scale(0, UINT32_MAX) == 0);
-        assert_se(system_tasks_max_scale((UINT32_MAX-1)/2, UINT32_MAX-1) == t/2);
-        assert_se(system_tasks_max_scale(UINT32_MAX, UINT32_MAX) == t);
-
-        /* overflow */
-
-        assert_se(system_tasks_max_scale(UINT64_MAX/4, UINT64_MAX) == UINT64_MAX);
-}
-
-static void test_foreach_pointer(void) {
-        int a, b, c, *i;
-        size_t k = 0;
-
-        log_info("/* %s */", __func__);
-
-        FOREACH_POINTER(i, &a, &b, &c) {
-                switch (k) {
-
-                case 0:
-                        assert_se(i == &a);
-                        break;
-
-                case 1:
-                        assert_se(i == &b);
-                        break;
-
-                case 2:
-                        assert_se(i == &c);
-                        break;
-
-                default:
-                        assert_not_reached("unexpected index");
-                        break;
-                }
-
-                k++;
-        }
-
-        assert(k == 3);
-
-        FOREACH_POINTER(i, &b) {
-                assert(k == 3);
-                assert(i == &b);
-                k = 4;
-        }
-
-        assert(k == 4);
-
-        FOREACH_POINTER(i, NULL, &c, NULL, &b, NULL, &a, NULL) {
-                switch (k) {
-
-                case 4:
-                        assert_se(i == NULL);
-                        break;
-
-                case 5:
-                        assert_se(i == &c);
-                        break;
-
-                case 6:
-                        assert_se(i == NULL);
-                        break;
-
-                case 7:
-                        assert_se(i == &b);
-                        break;
-
-                case 8:
-                        assert_se(i == NULL);
-                        break;
-
-                case 9:
-                        assert_se(i == &a);
-                        break;
-
-                case 10:
-                        assert_se(i == NULL);
-                        break;
-
-                default:
-                        assert_not_reached("unexpected index");
-                        break;
-                }
-
-                k++;
-        }
-
-        assert(k == 11);
-}
-
-static void test_ptr_to_int(void) {
-        log_info("/* %s */", __func__);
-
-        /* Primary reason to have this test is to validate that pointers are large enough to hold entire int range */
-        assert_se(PTR_TO_INT(INT_TO_PTR(0)) == 0);
-        assert_se(PTR_TO_INT(INT_TO_PTR(1)) == 1);
-        assert_se(PTR_TO_INT(INT_TO_PTR(-1)) == -1);
-        assert_se(PTR_TO_INT(INT_TO_PTR(INT_MAX)) == INT_MAX);
-        assert_se(PTR_TO_INT(INT_TO_PTR(INT_MIN)) == INT_MIN);
-}
-
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
-        test_align_power2();
-        test_max();
-        test_container_of();
-        test_div_round_up();
-        test_u64log2();
-        test_protect_errno();
-        test_unprotect_errno();
-        test_in_set();
-        test_log2i();
-        test_eqzero();
-        test_raw_clone();
-        test_physical_memory();
-        test_physical_memory_scale();
-        test_system_tasks_max();
-        test_system_tasks_max_scale();
-        test_foreach_pointer();
-        test_ptr_to_int();
-
-        return 0;
-}
diff --git a/src/test/test-utmp.c b/src/test/test-utmp.c
new file mode 100644
index 0000000..06a0fce
--- /dev/null
+++ b/src/test/test-utmp.c
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "format-util.h"
+#include "socket-util.h"
+#include "stdio-util.h"
+#include "string-util.h"
+#include "utmp-wtmp.h"
+#include "tests.h"
+
+#ifndef UT_LINESIZE
+#  define UT_LINESIZE      32
+#endif
+#ifndef UT_NAMESIZE
+#  define UT_NAMESIZE      32
+#endif
+#ifndef UT_HOSTSIZE
+#  define UT_HOSTSIZE     256
+#endif
+
+TEST(dump_run_utmp) {
+        _unused_ _cleanup_(utxent_cleanup) bool utmpx = false;
+
+        utmpx = utxent_start();
+
+        for (struct utmpx *u; (u = getutxent()); ) {
+                char _type_buf[DECIMAL_STR_MAX(short)];
+                const char *type =
+                        u->ut_type == EMPTY         ? "EMPTY" :
+                        u->ut_type == RUN_LVL       ? "RUN_LVL" :
+                        u->ut_type == BOOT_TIME     ? "BOOT_TIME" :
+                        u->ut_type == NEW_TIME      ? "NEW_TIME" :
+                        u->ut_type == OLD_TIME      ? "OLD_TIME" :
+                        u->ut_type == INIT_PROCESS  ? "INIT_PROCESS" :
+                        u->ut_type == LOGIN_PROCESS ? "LOGIN_PROCESS" :
+                        u->ut_type == USER_PROCESS  ? "USER_PROCESS" :
+                        u->ut_type == DEAD_PROCESS  ? "DEAD_PROCESS" :
+                        u->ut_type == ACCOUNTING    ? "ACCOUNTING" :
+                        _type_buf;
+                if (type == _type_buf)
+                        xsprintf(_type_buf, "%hd", u->ut_type);
+
+                union in_addr_union addr = {};
+                memcpy(&addr, u->ut_addr_v6, MIN(sizeof(addr), sizeof(u->ut_addr_v6)));
+                bool is_ipv4 = memeqzero((const uint8_t*) &addr + 4, sizeof(addr) - 4);
+
+                log_info("%14s %10"PID_PRI" line=%-7.*s id=%-4.4s name=%-8.*s session=%lu host=%.*s addr=%s",
+                         type,
+                         u->ut_pid,
+                         UT_LINESIZE, u->ut_line,
+                         u->ut_id,
+                         UT_NAMESIZE, u->ut_user,
+                         (long unsigned) u->ut_session,
+                         UT_HOSTSIZE, u->ut_host,
+                         IN_ADDR_TO_STRING(is_ipv4 ? AF_INET : AF_INET6, &addr));
+        }
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-varlink.c b/src/test/test-varlink.c
index 9a5fbc6..e961887 100644
--- a/src/test/test-varlink.c
+++ b/src/test/test-varlink.c
@@ -21,12 +21,12 @@
 #define OVERLOAD_CONNECTIONS 333
 
 static int n_done = 0;
-static int block_write_fd = -1;
+static int block_write_fd = -EBADF;
 
 static int method_something(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
         _cleanup_(json_variant_unrefp) JsonVariant *ret = NULL;
         JsonVariant *a, *b;
-        intmax_t x, y;
+        int64_t x, y;
         int r;
 
         a = json_variant_by_key(parameters, "a");
@@ -72,8 +72,8 @@
 static int on_connect(VarlinkServer *s, Varlink *link, void *userdata) {
         uid_t uid = UID_INVALID;
 
-        assert(s);
-        assert(link);
+        assert_se(s);
+        assert_se(link);
 
         assert_se(varlink_get_peer_uid(link, &uid) >= 0);
         assert_se(getuid() == uid);
@@ -126,7 +126,7 @@
         assert_se(varlink_set_description(c, "overload-client") >= 0);
         assert_se(varlink_attach_event(c, e, k) >= 0);
         assert_se(varlink_bind_reply(c, overload_reply) >= 0);
-        assert_se(varlink_invokeb(c, "io.test.Overload", JSON_BUILD_OBJECT(JSON_BUILD_PAIR("foo", JSON_BUILD_STRING("bar")))) >= 0);
+        assert_se(varlink_invokeb(c, "io.test.Overload", JSON_BUILD_OBJECT(JSON_BUILD_PAIR("foo", JSON_BUILD_CONST_STRING("bar")))) >= 0);
 
         /* Unblock it */
         log_debug("Unblocking server...");
@@ -191,7 +191,7 @@
         _cleanup_(rm_rf_physical_and_freep) char *tmpdir = NULL;
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         _cleanup_(sd_event_unrefp) sd_event *e = NULL;
-        _cleanup_(close_pairp) int block_fds[2] = { -1, -1 };
+        _cleanup_(close_pairp) int block_fds[2] = PIPE_EBADF;
         pthread_t t;
         const char *sp;
 
diff --git a/src/test/test-verbs.c b/src/test/test-verbs.c
index b7a0cbf..6e30794 100644
--- a/src/test/test-verbs.c
+++ b/src/test/test-verbs.c
@@ -4,6 +4,7 @@
 
 #include "macro.h"
 #include "strv.h"
+#include "tests.h"
 #include "verbs.h"
 
 static int noop_dispatcher(int argc, char *argv[], void *userdata) {
@@ -14,7 +15,7 @@
         optind = 0; \
         assert_se(dispatch_verb(strv_length(argv), argv, verbs, NULL) == expected);
 
-static void test_verbs(void) {
+TEST(verbs) {
         static const Verb verbs[] = {
                 { "help",        VERB_ANY, VERB_ANY, 0,            noop_dispatcher },
                 { "list-images", VERB_ANY, 1,        0,            noop_dispatcher },
@@ -46,7 +47,7 @@
         test_dispatch_one(STRV_MAKE_EMPTY, verbs, 0);
 }
 
-static void test_verbs_no_default(void) {
+TEST(verbs_no_default) {
         static const Verb verbs[] = {
                 { "help", VERB_ANY, VERB_ANY, 0, noop_dispatcher },
                 {},
@@ -55,9 +56,4 @@
         test_dispatch_one(STRV_MAKE(NULL), verbs, -EINVAL);
 }
 
-int main(int argc, char *argv[]) {
-        test_verbs();
-        test_verbs_no_default();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-watch-pid.c b/src/test/test-watch-pid.c
index 4afc46f..8c355c1 100644
--- a/src/test/test-watch-pid.c
+++ b/src/test/test-watch-pid.c
@@ -26,8 +26,8 @@
 
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
-        assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
-        assert_se(manager_startup(m, NULL, NULL) >= 0);
+        assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
 
         assert_se(a = unit_new(m, sizeof(Service)));
         assert_se(unit_add_name(a, "a.service") >= 0);
diff --git a/src/test/test-watchdog.c b/src/test/test-watchdog.c
index cbef75f..2b6d5b5 100644
--- a/src/test/test-watchdog.c
+++ b/src/test/test-watchdog.c
@@ -17,22 +17,23 @@
 
         slow = slow_tests_enabled();
 
-        t = slow ? 10 * USEC_PER_SEC : 1 * USEC_PER_SEC;
+        t = slow ? 10 * USEC_PER_SEC : 2 * USEC_PER_SEC;
         count = slow ? 5 : 3;
 
-        r = watchdog_set_timeout(&t);
+        r = watchdog_setup(t);
         if (r < 0)
                 log_warning_errno(r, "Failed to open watchdog: %m");
         if (r == -EPERM)
                 t = 0;
 
         for (i = 0; i < count; i++) {
+                t = watchdog_runtime_wait();
+                log_info("Sleeping " USEC_FMT " microseconds...", t);
+                usleep(t);
                 log_info("Pinging...");
                 r = watchdog_ping();
                 if (r < 0)
                         log_warning_errno(r, "Failed to ping watchdog: %m");
-
-                usleep(t/2);
         }
 
         watchdog_close(true);
diff --git a/src/test/test-web-util.c b/src/test/test-web-util.c
index 853ea9c..d376d4a 100644
--- a/src/test/test-web-util.c
+++ b/src/test/test-web-util.c
@@ -1,13 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "macro.h"
+#include "tests.h"
 #include "web-util.h"
 
-static void test_is_valid_documentation_url(void) {
-        assert_se(documentation_url_is_valid("http://www.freedesktop.org/wiki/Software/systemd"));
+TEST(is_valid_documentation_url) {
+        assert_se(documentation_url_is_valid("https://www.freedesktop.org/wiki/Software/systemd"));
         assert_se(documentation_url_is_valid("https://www.kernel.org/doc/Documentation/binfmt_misc.txt"));  /* dead */
         assert_se(documentation_url_is_valid("https://www.kernel.org/doc/Documentation/admin-guide/binfmt-misc.rst"));
-        assert_se(documentation_url_is_valid("https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html"));
+        assert_se(documentation_url_is_valid("https://docs.kernel.org/admin-guide/binfmt-misc.html"));
         assert_se(documentation_url_is_valid("file:/foo/foo"));
         assert_se(documentation_url_is_valid("man:systemd.special(7)"));
         assert_se(documentation_url_is_valid("info:bar"));
@@ -17,8 +18,4 @@
         assert_se(!documentation_url_is_valid(""));
 }
 
-int main(int argc, char *argv[]) {
-        test_is_valid_documentation_url();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/test/test-xattr-util.c b/src/test/test-xattr-util.c
index 6aa55ba..04d23ef 100644
--- a/src/test/test-xattr-util.c
+++ b/src/test/test-xattr-util.c
@@ -15,13 +15,12 @@
 #include "tmpfile-util.h"
 #include "xattr-util.h"
 
-static void test_fgetxattrat_fake(void) {
+TEST(getxattr_at_malloc) {
         char t[] = "/var/tmp/xattrtestXXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_free_ char *value = NULL;
+        _cleanup_close_ int fd = -EBADF;
         const char *x;
-        char v[3];
         int r;
-        size_t size;
 
         assert_se(mkdtemp(t));
         x = strjoina(t, "/test");
@@ -35,30 +34,38 @@
         fd = open(t, O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOCTTY);
         assert_se(fd >= 0);
 
-        assert_se(fgetxattrat_fake(fd, "test", "user.foo", v, 3, 0, &size) >= 0);
-        assert_se(size == 3);
-        assert_se(memcmp(v, "bar", 3) == 0);
+        assert_se(getxattr_at_malloc(fd, "test", "user.foo", 0, &value) == 3);
+        assert_se(memcmp(value, "bar", 3) == 0);
+        value = mfree(value);
+
+        assert_se(getxattr_at_malloc(AT_FDCWD, x, "user.foo", 0, &value) == 3);
+        assert_se(memcmp(value, "bar", 3) == 0);
+        value = mfree(value);
 
         safe_close(fd);
         fd = open("/", O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOCTTY);
         assert_se(fd >= 0);
-        r = fgetxattrat_fake(fd, "usr", "user.idontexist", v, 3, 0, &size);
-        assert_se(r == -ENODATA || ERRNO_IS_NOT_SUPPORTED(r));
+        r = getxattr_at_malloc(fd, "usr", "user.idontexist", 0, &value);
+        assert_se(r < 0 && ERRNO_IS_XATTR_ABSENT(r));
+
+        safe_close(fd);
+        fd = open(x, O_PATH|O_CLOEXEC);
+        assert_se(fd >= 0);
+        assert_se(getxattr_at_malloc(fd, NULL, "user.foo", 0, &value) == 3);
+        assert_se(streq(value, "bar"));
 
 cleanup:
         assert_se(unlink(x) >= 0);
         assert_se(rmdir(t) >= 0);
 }
 
-static void test_getcrtime(void) {
-
-        _cleanup_close_ int fd = -1;
-        char ts[FORMAT_TIMESTAMP_MAX];
+TEST(getcrtime) {
+        _cleanup_close_ int fd = -EBADF;
         const char *vt;
         usec_t usec, k;
         int r;
 
-        assert_se(tmp_dir(&vt) >= 0);
+        assert_se(var_tmp_dir(&vt) >= 0);
 
         fd = open_tmpfile_unlinkable(vt, O_RDWR);
         assert_se(fd >= 0);
@@ -67,7 +74,7 @@
         if (r < 0)
                 log_debug_errno(r, "btime: %m");
         else
-                log_debug("btime: %s", format_timestamp(ts, sizeof(ts), usec));
+                log_debug("btime: %s", FORMAT_TIMESTAMP(usec));
 
         k = now(CLOCK_REALTIME);
 
@@ -79,11 +86,4 @@
         }
 }
 
-int main(void) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_fgetxattrat_fake();
-        test_getcrtime();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/test/test-xml.c b/src/test/test-xml.c
index e69d6d0..5dee5c1 100644
--- a/src/test/test-xml.c
+++ b/src/test/test-xml.c
@@ -4,7 +4,6 @@
 
 #include "alloc-util.h"
 #include "string-util.h"
-#include "util.h"
 #include "xml.h"
 
 static void test_one(const char *data, ...) {
diff --git a/src/timedate/org.freedesktop.timedate1.conf b/src/timedate/org.freedesktop.timedate1.conf
index 4567082..f91d7b0 100644
--- a/src/timedate/org.freedesktop.timedate1.conf
+++ b/src/timedate/org.freedesktop.timedate1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/timedate/org.freedesktop.timedate1.policy b/src/timedate/org.freedesktop.timedate1.policy
index 4a770c0..14bcf2a 100644
--- a/src/timedate/org.freedesktop.timedate1.policy
+++ b/src/timedate/org.freedesktop.timedate1.policy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 
 <!--
   SPDX-License-Identifier: LGPL-2.1-or-later
diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c
index d31f67f..5d1be11 100644
--- a/src/timedate/timedatectl.c
+++ b/src/timedate/timedatectl.c
@@ -8,6 +8,7 @@
 
 #include "sd-bus.h"
 
+#include "build.h"
 #include "bus-error.h"
 #include "bus-locator.h"
 #include "bus-map-properties.h"
@@ -24,7 +25,6 @@
 #include "string-table.h"
 #include "strv.h"
 #include "terminal-util.h"
-#include "util.h"
 #include "verbs.h"
 
 static PagerFlags arg_pager_flags = 0;
@@ -61,15 +61,12 @@
 
         assert(i);
 
-        table = table_new("key", "value");
+        table = table_new_vertical();
         if (!table)
                 return log_oom();
 
-        table_set_header(table, false);
-
         assert_se(cell = table_get_cell(table, 0, 0));
         (void) table_set_ellipsize_percent(table, cell, 100);
-        (void) table_set_align_percent(table, cell, 100);
 
         assert_se(cell = table_get_cell(table, 0, 1));
         (void) table_set_ellipsize_percent(table, cell, 100);
@@ -77,7 +74,7 @@
         /* Save the old $TZ */
         tz = getenv("TZ");
         if (tz)
-                old_tz = strdupa(tz);
+                old_tz = strdupa_safe(tz);
 
         /* Set the new $TZ */
         tz_colon = strjoina(":", isempty(i->timezone) ? "UTC" : i->timezone);
@@ -97,14 +94,14 @@
 
         n = have_time ? strftime(a, sizeof a, "%a %Y-%m-%d %H:%M:%S %Z", localtime_r(&sec, &tm)) : 0;
         r = table_add_many(table,
-                           TABLE_STRING, "Local time:",
+                           TABLE_FIELD, "Local time",
                            TABLE_STRING, n > 0 ? a : "n/a");
         if (r < 0)
                 return table_log_add_error(r);
 
         n = have_time ? strftime(a, sizeof a, "%a %Y-%m-%d %H:%M:%S UTC", gmtime_r(&sec, &tm)) : 0;
         r = table_add_many(table,
-                           TABLE_STRING, "Universal time:",
+                           TABLE_FIELD, "Universal time",
                            TABLE_STRING, n > 0 ? a : "n/a");
         if (r < 0)
                 return table_log_add_error(r);
@@ -117,12 +114,12 @@
         } else
                 n = 0;
         r = table_add_many(table,
-                           TABLE_STRING, "RTC time:",
+                           TABLE_FIELD, "RTC time",
                            TABLE_STRING, n > 0 ? a : "n/a");
         if (r < 0)
                 return table_log_add_error(r);
 
-        r = table_add_cell(table, NULL, TABLE_STRING, "Time zone:");
+        r = table_add_cell(table, NULL, TABLE_FIELD, "Time zone");
         if (r < 0)
                 return table_log_add_error(r);
 
@@ -139,11 +136,11 @@
                 tzset();
 
         r = table_add_many(table,
-                           TABLE_STRING, "System clock synchronized:",
+                           TABLE_FIELD, "System clock synchronized",
                            TABLE_BOOLEAN, i->ntp_synced,
-                           TABLE_STRING, "NTP service:",
+                           TABLE_FIELD, "NTP service",
                            TABLE_STRING, i->ntp_capable ? (i->ntp_active ? "active" : "inactive") : "n/a",
-                           TABLE_STRING, "RTC in local TZ:",
+                           TABLE_FIELD, "RTC in local TZ",
                            TABLE_BOOLEAN, i->rtc_local);
         if (r < 0)
                 return table_log_add_error(r);
@@ -179,11 +176,9 @@
 
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         r = bus_map_all_properties(bus,
                                    "org.freedesktop.timedate1",
                                    "/org/freedesktop/timedate1",
@@ -199,11 +194,9 @@
 }
 
 static int show_properties(int argc, char **argv, void *userdata) {
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         r = bus_print_all_properties(bus,
                                      "org.freedesktop.timedate1",
                                      "/org/freedesktop/timedate1",
@@ -304,7 +297,7 @@
         sd_bus *bus = userdata;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         int r;
-        char** zones;
+        _cleanup_strv_free_ char **zones = NULL;
 
         r = bus_call_method(bus, bus_timedate, "ListTimezones", &error, &reply, NULL);
         if (r < 0)
@@ -315,7 +308,7 @@
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
         strv_print(zones);
 
         return 0;
@@ -359,8 +352,6 @@
 REENABLE_WARNING;
 
 static int print_ntp_status_info(NTPStatusInfo *i) {
-        char ts[FORMAT_TIMESPAN_MAX], jitter[FORMAT_TIMESPAN_MAX],
-                tmin[FORMAT_TIMESPAN_MAX], tmax[FORMAT_TIMESPAN_MAX];
         usec_t delay, t14, t23, offset, root_distance;
         _cleanup_(table_unrefp) Table *table = NULL;
         bool offset_sign;
@@ -369,15 +360,12 @@
 
         assert(i);
 
-        table = table_new("key", "value");
+        table = table_new_vertical();
         if (!table)
                 return log_oom();
 
-        table_set_header(table, false);
-
         assert_se(cell = table_get_cell(table, 0, 0));
         (void) table_set_ellipsize_percent(table, cell, 100);
-        (void) table_set_align_percent(table, cell, 100);
 
         assert_se(cell = table_get_cell(table, 0, 1));
         (void) table_set_ellipsize_percent(table, cell, 100);
@@ -394,7 +382,7 @@
          *  d = (T4 - T1) - (T3 - T2)     t = ((T2 - T1) + (T3 - T4)) / 2"
          */
 
-        r = table_add_cell(table, NULL, TABLE_STRING, "Server:");
+        r = table_add_cell(table, NULL, TABLE_FIELD, "Server");
         if (r < 0)
                 return table_log_add_error(r);
 
@@ -402,20 +390,20 @@
         if (r < 0)
                 return table_log_add_error(r);
 
-        r = table_add_cell(table, NULL, TABLE_STRING, "Poll interval:");
+        r = table_add_cell(table, NULL, TABLE_FIELD, "Poll interval");
         if (r < 0)
                 return table_log_add_error(r);
 
         r = table_add_cell_stringf(table, NULL, "%s (min: %s; max %s)",
-                                   format_timespan(ts, sizeof(ts), i->poll_interval, 0),
-                                   format_timespan(tmin, sizeof(tmin), i->poll_min, 0),
-                                   format_timespan(tmax, sizeof(tmax), i->poll_max, 0));
+                                   FORMAT_TIMESPAN(i->poll_interval, 0),
+                                   FORMAT_TIMESPAN(i->poll_min, 0),
+                                   FORMAT_TIMESPAN(i->poll_max, 0));
         if (r < 0)
                 return table_log_add_error(r);
 
         if (i->packet_count == 0) {
                 r = table_add_many(table,
-                                   TABLE_STRING, "Packet count:",
+                                   TABLE_FIELD, "Packet count",
                                    TABLE_STRING, "0");
                 if (r < 0)
                         return table_log_add_error(r);
@@ -446,13 +434,13 @@
         root_distance = i->root_delay / 2 + i->root_dispersion;
 
         r = table_add_many(table,
-                           TABLE_STRING, "Leap:",
+                           TABLE_FIELD, "Leap",
                            TABLE_STRING, ntp_leap_to_string(i->leap),
-                           TABLE_STRING, "Version:",
+                           TABLE_FIELD, "Version",
                            TABLE_UINT32, i->version,
-                           TABLE_STRING, "Stratum:",
+                           TABLE_FIELD, "Stratum",
                            TABLE_UINT32, i->stratum,
-                           TABLE_STRING, "Reference:");
+                           TABLE_FIELD, "Reference");
         if (r < 0)
                 return table_log_add_error(r);
 
@@ -463,48 +451,48 @@
         if (r < 0)
                 return table_log_add_error(r);
 
-        r = table_add_cell(table, NULL, TABLE_STRING, "Precision:");
+        r = table_add_cell(table, NULL, TABLE_FIELD, "Precision");
         if (r < 0)
                 return table_log_add_error(r);
 
         r = table_add_cell_stringf(table, NULL, "%s (%" PRIi32 ")",
-                                   format_timespan(ts, sizeof(ts), DIV_ROUND_UP((nsec_t) (exp2(i->precision) * NSEC_PER_SEC), NSEC_PER_USEC), 0),
+                                   FORMAT_TIMESPAN(DIV_ROUND_UP((nsec_t) (exp2(i->precision) * NSEC_PER_SEC), NSEC_PER_USEC), 0),
                                    i->precision);
         if (r < 0)
                 return table_log_add_error(r);
 
-        r = table_add_cell(table, NULL, TABLE_STRING, "Root distance:");
+        r = table_add_cell(table, NULL, TABLE_FIELD, "Root distance");
         if (r < 0)
                 return table_log_add_error(r);
 
         r = table_add_cell_stringf(table, NULL, "%s (max: %s)",
-                                   format_timespan(ts, sizeof(ts), root_distance, 0),
-                                   format_timespan(tmax, sizeof(tmax), i->root_distance_max, 0));
+                                   FORMAT_TIMESPAN(root_distance, 0),
+                                   FORMAT_TIMESPAN(i->root_distance_max, 0));
         if (r < 0)
                 return table_log_add_error(r);
 
-        r = table_add_cell(table, NULL, TABLE_STRING, "Offset:");
+        r = table_add_cell(table, NULL, TABLE_FIELD, "Offset");
         if (r < 0)
                 return table_log_add_error(r);
 
         r = table_add_cell_stringf(table, NULL, "%s%s",
                                    offset_sign ? "+" : "-",
-                                   format_timespan(ts, sizeof(ts), offset, 0));
+                                   FORMAT_TIMESPAN(offset, 0));
         if (r < 0)
                 return table_log_add_error(r);
 
         r = table_add_many(table,
-                           TABLE_STRING, "Delay:",
-                           TABLE_STRING, format_timespan(ts, sizeof(ts), delay, 0),
-                           TABLE_STRING, "Jitter:",
-                           TABLE_STRING, format_timespan(jitter, sizeof(jitter), i->jitter, 0),
-                           TABLE_STRING, "Packet count:",
+                           TABLE_FIELD, "Delay",
+                           TABLE_STRING, FORMAT_TIMESPAN(delay, 0),
+                           TABLE_FIELD, "Jitter",
+                           TABLE_STRING, FORMAT_TIMESPAN(i->jitter, 0),
+                           TABLE_FIELD, "Packet count",
                            TABLE_UINT64, i->packet_count);
         if (r < 0)
                 return table_log_add_error(r);
 
         if (!i->spike) {
-                r = table_add_cell(table, NULL, TABLE_STRING, "Frequency:");
+                r = table_add_cell(table, NULL, TABLE_FIELD, "Frequency");
                 if (r < 0)
                         return table_log_add_error(r);
 
@@ -565,14 +553,12 @@
 }
 
 static int map_ntp_message(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
-        NTPStatusInfo *p = userdata;
+        NTPStatusInfo *p = ASSERT_PTR(userdata);
         const void *d;
         size_t sz;
         int32_t b;
         int r;
 
-        assert(p);
-
         r = sd_bus_message_enter_container(m, 'r', "uuuuittayttttbtt");
         if (r < 0)
                 return r;
@@ -663,11 +649,9 @@
 
 static int show_timesync_status(int argc, char **argv, void *userdata) {
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         r = show_timesync_status_once(bus);
         if (r < 0)
                 return r;
@@ -717,7 +701,6 @@
         case SD_BUS_TYPE_STRUCT:
                 if (streq(name, "NTPMessage")) {
                         _cleanup_(ntp_status_info_clear) NTPStatusInfo i = {};
-                        char ts[FORMAT_TIMESPAN_MAX], stamp[FORMAT_TIMESTAMP_MAX];
 
                         r = map_ntp_message(NULL, NULL, m, NULL, &i);
                         if (r < 0)
@@ -733,28 +716,21 @@
 
                         printf("{ Leap=%u, Version=%u, Mode=%u, Stratum=%u, Precision=%i,",
                                i.leap, i.version, i.mode, i.stratum, i.precision);
-                        printf(" RootDelay=%s,",
-                               format_timespan(ts, sizeof(ts), i.root_delay, 0));
-                        printf(" RootDispersion=%s,",
-                               format_timespan(ts, sizeof(ts), i.root_dispersion, 0));
+                        printf(" RootDelay=%s,", FORMAT_TIMESPAN(i.root_delay, 0));
+                        printf(" RootDispersion=%s,", FORMAT_TIMESPAN(i.root_dispersion, 0));
 
                         if (i.stratum == 1)
                                 printf(" Reference=%s,", i.reference.str);
                         else
                                 printf(" Reference=%" PRIX32 ",", be32toh(i.reference.val));
 
-                        printf(" OriginateTimestamp=%s,",
-                               format_timestamp(stamp, sizeof(stamp), i.origin));
-                        printf(" ReceiveTimestamp=%s,",
-                               format_timestamp(stamp, sizeof(stamp), i.recv));
-                        printf(" TransmitTimestamp=%s,",
-                               format_timestamp(stamp, sizeof(stamp), i.trans));
-                        printf(" DestinationTimestamp=%s,",
-                               format_timestamp(stamp, sizeof(stamp), i.dest));
-                        printf(" Ignored=%s PacketCount=%" PRIu64 ",",
+                        printf(" OriginateTimestamp=%s,", FORMAT_TIMESTAMP(i.origin));
+                        printf(" ReceiveTimestamp=%s,", FORMAT_TIMESTAMP(i.recv));
+                        printf(" TransmitTimestamp=%s,", FORMAT_TIMESTAMP(i.trans));
+                        printf(" DestinationTimestamp=%s,", FORMAT_TIMESTAMP(i.dest));
+                        printf(" Ignored=%s, PacketCount=%" PRIu64 ",",
                                yes_no(i.spike), i.packet_count);
-                        printf(" Jitter=%s }\n",
-                               format_timespan(ts, sizeof(ts), i.jitter, 0));
+                        printf(" Jitter=%s }\n", FORMAT_TIMESPAN(i.jitter, 0));
 
                         return 1;
 
@@ -776,11 +752,9 @@
 }
 
 static int show_timesync(int argc, char **argv, void *userdata) {
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int r;
 
-        assert(bus);
-
         r = bus_print_all_properties(bus,
                                      "org.freedesktop.timesync1",
                                      "/org/freedesktop/timesync1",
@@ -822,11 +796,9 @@
 static int verb_ntp_servers(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int ifindex, r;
 
-        assert(bus);
-
         ifindex = parse_ifindex_bus(bus, argv[1]);
         if (ifindex < 0)
                 return ifindex;
@@ -854,11 +826,9 @@
 
 static int verb_revert(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        sd_bus *bus = userdata;
+        sd_bus *bus = ASSERT_PTR(userdata);
         int ifindex, r;
 
-        assert(bus);
-
         ifindex = parse_ifindex_bus(bus, argv[1]);
         if (ifindex < 0)
                 return ifindex;
@@ -1009,7 +979,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -1048,7 +1018,7 @@
 
         r = bus_connect_transport(arg_transport, arg_host, false, &bus);
         if (r < 0)
-                return bus_log_connect_error(r);
+                return bus_log_connect_error(r, arg_transport);
 
         return timedatectl_main(bus, argc, argv);
 }
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
index 66b4542..ad48330 100644
--- a/src/timedate/timedated.c
+++ b/src/timedate/timedated.c
@@ -20,7 +20,7 @@
 #include "bus-polkit.h"
 #include "clock-util.h"
 #include "conf-files.h"
-#include "def.h"
+#include "constants.h"
 #include "fd-util.h"
 #include "fileio-label.h"
 #include "fileio.h"
@@ -102,15 +102,18 @@
         p->active_state = mfree(p->active_state);
 }
 
-static void unit_status_info_free(UnitStatusInfo *p) {
-        assert(p);
+static UnitStatusInfo *unit_status_info_free(UnitStatusInfo *p) {
+        if (!p)
+                return NULL;
 
         unit_status_info_clear(p);
         free(p->name);
         free(p->path);
-        free(p);
+        return mfree(p);
 }
 
+DEFINE_TRIVIAL_CLEANUP_FUNC(UnitStatusInfo*, unit_status_info_free);
+
 static void context_clear(Context *c) {
         UnitStatusInfo *p;
 
@@ -129,7 +132,11 @@
 }
 
 static int context_add_ntp_service(Context *c, const char *s, const char *source) {
-        UnitStatusInfo *u;
+        _cleanup_(unit_status_info_freep) UnitStatusInfo *unit = NULL;
+
+        assert(c);
+        assert(s);
+        assert(source);
 
         if (!unit_name_is_valid(s, UNIT_NAME_PLAIN))
                 return -EINVAL;
@@ -139,18 +146,17 @@
                 if (streq(u->name, s))
                         return 0;
 
-        u = new0(UnitStatusInfo, 1);
-        if (!u)
+        unit = new0(UnitStatusInfo, 1);
+        if (!unit)
                 return -ENOMEM;
 
-        u->name = strdup(s);
-        if (!u->name) {
-                free(u);
+        unit->name = strdup(s);
+        if (!unit->name)
                 return -ENOMEM;
-        }
 
-        LIST_APPEND(units, c->units, u);
-        log_unit_debug(u, "added from %s.", source);
+        LIST_APPEND(units, c->units, unit);
+        log_unit_debug(unit, "added from %s.", source);
+        TAKE_PTR(unit);
 
         return 0;
 }
@@ -190,7 +196,6 @@
 
 static int context_parse_ntp_services_from_disk(Context *c) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         r = conf_files_list_strv(&files, ".list", NULL, CONF_FILES_FILTER_MASKED, UNIT_LIST_DIRS);
@@ -244,7 +249,6 @@
 }
 
 static int context_ntp_service_is_active(Context *c) {
-        UnitStatusInfo *info;
         int count = 0;
 
         assert(c);
@@ -258,7 +262,6 @@
 }
 
 static int context_ntp_service_exists(Context *c) {
-        UnitStatusInfo *info;
         int count = 0;
 
         assert(c);
@@ -403,7 +406,6 @@
                 { "UnitFileState", "s", NULL, offsetof(UnitStatusInfo, unit_file_state) },
                 {}
         };
-        UnitStatusInfo *u;
         int r;
 
         assert(c);
@@ -445,13 +447,11 @@
 }
 
 static int match_job_removed(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        Context *c = userdata;
-        UnitStatusInfo *u;
+        Context *c = ASSERT_PTR(userdata);
         const char *path;
         unsigned n = 0;
         int r;
 
-        assert(c);
         assert(m);
 
         r = sd_bus_message_read(m, "uoss", NULL, &path, NULL, NULL);
@@ -607,10 +607,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         int r;
 
-        assert(c);
         assert(bus);
         assert(property);
         assert(reply);
@@ -636,10 +635,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         int r;
 
-        assert(c);
         assert(bus);
         assert(property);
         assert(reply);
@@ -657,12 +655,11 @@
 }
 
 static int method_set_timezone(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         int interactive, r;
         const char *z;
 
         assert(m);
-        assert(c);
 
         r = sd_bus_message_read(m, "sb", &z, &interactive);
         if (r < 0)
@@ -736,12 +733,11 @@
 
 static int method_set_local_rtc(sd_bus_message *m, void *userdata, sd_bus_error *error) {
         int lrtc, fix_system, interactive;
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         struct timespec ts;
         int r;
 
         assert(m);
-        assert(c);
 
         r = sd_bus_message_read(m, "bbb", &lrtc, &fix_system, &interactive);
         if (r < 0)
@@ -825,14 +821,13 @@
         sd_bus *bus = sd_bus_message_get_bus(m);
         char buf[FORMAT_TIMESTAMP_MAX];
         int relative, interactive, r;
-        Context *c = userdata;
+        Context *c = ASSERT_PTR(userdata);
         int64_t utc;
         struct timespec ts;
         usec_t start;
         struct tm tm;
 
         assert(m);
-        assert(c);
 
         if (c->slot_job_removed)
                 return sd_bus_error_set(error, BUS_ERROR_AUTOMATIC_TIME_SYNC_ENABLED, "Previous request is not finished, refusing.");
@@ -917,14 +912,12 @@
 static int method_set_ntp(sd_bus_message *m, void *userdata, sd_bus_error *error) {
         _cleanup_(sd_bus_slot_unrefp) sd_bus_slot *slot = NULL;
         sd_bus *bus = sd_bus_message_get_bus(m);
-        Context *c = userdata;
-        UnitStatusInfo *u;
+        Context *c = ASSERT_PTR(userdata);
         const UnitStatusInfo *selected = NULL;
         int enable, interactive, q, r;
 
         assert(m);
         assert(bus);
-        assert(c);
 
         r = sd_bus_message_read(m, "bb", &enable, &interactive);
         if (r < 0)
@@ -1049,42 +1042,31 @@
         SD_BUS_PROPERTY("TimeUSec", "t", property_get_time, 0, 0),
         SD_BUS_PROPERTY("RTCTimeUSec", "t", property_get_rtc_time, 0, 0),
 
-        SD_BUS_METHOD_WITH_NAMES("SetTime",
-                                 "xbb",
-                                 SD_BUS_PARAM(usec_utc)
-                                 SD_BUS_PARAM(relative)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_time,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetTimezone",
-                                 "sb",
-                                 SD_BUS_PARAM(timezone)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_timezone,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetLocalRTC",
-                                 "bbb",
-                                 SD_BUS_PARAM(local_rtc)
-                                 SD_BUS_PARAM(fix_system)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_local_rtc,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("SetNTP",
-                                 "bb",
-                                 SD_BUS_PARAM(use_ntp)
-                                 SD_BUS_PARAM(interactive),
-                                 NULL,,
-                                 method_set_ntp,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD_WITH_NAMES("ListTimezones",
-                                 NULL,,
-                                 "as",
-                                 SD_BUS_PARAM(timezones),
-                                 method_list_timezones,
-                                 SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetTime",
+                                SD_BUS_ARGS("x", usec_utc, "b", relative, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_time,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetTimezone",
+                                SD_BUS_ARGS("s", timezone, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_timezone,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLocalRTC",
+                                SD_BUS_ARGS("b", local_rtc, "b", fix_system, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_local_rtc,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetNTP",
+                                SD_BUS_ARGS("b", use_ntp, "b", interactive),
+                                SD_BUS_NO_RESULT,
+                                method_set_ntp,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListTimezones",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("as", timezones),
+                                method_list_timezones,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         SD_BUS_VTABLE_END,
 };
diff --git a/src/timesync/meson.build b/src/timesync/meson.build
index ec80b16..c215ce7 100644
--- a/src/timesync/meson.build
+++ b/src/timesync/meson.build
@@ -2,17 +2,14 @@
 
 sources = files(
         'timesyncd-conf.c',
-        'timesyncd-conf.h',
         'timesyncd-manager.c',
-        'timesyncd-manager.h',
-        'timesyncd-ntp-message.h',
         'timesyncd-server.c',
-        'timesyncd-server.h')
+)
 
 systemd_timesyncd_sources = files(
         'timesyncd.c',
         'timesyncd-bus.c',
-        'timesyncd-bus.h')
+)
 
 sources += custom_target(
         'timesyncd-gperf.c',
@@ -32,14 +29,14 @@
         'timesyncd-core',
         sources,
         include_directories : includes,
-        link_with : [timesyncd_link_with])
+        link_with : timesyncd_link_with,
+        build_by_default : false)
 
 custom_target(
         'timesyncd.conf',
         input : 'timesyncd.conf.in',
         output : 'timesyncd.conf',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : conf.get('ENABLE_TIMESYNCD') == 1 and install_sysconfdir_samples,
         install_dir : pkgsysconfdir)
 
@@ -50,12 +47,14 @@
                      install_dir : dbussystemservicedir)
         install_data('80-systemd-timesync.list',
                      install_dir : ntpservicelistdir)
+        install_data('org.freedesktop.timesync1.policy',
+                     install_dir : polkitpolicydir)
 endif
 
 ############################################################
 
 tests += [
-        [['src/timesync/test-timesync.c'],
+        [files('test-timesync.c'),
          [libtimesyncd_core,
           libshared],
          [libm]],
diff --git a/src/timesync/org.freedesktop.timesync1.conf b/src/timesync/org.freedesktop.timesync1.conf
index eccdbec..d33b864 100644
--- a/src/timesync/org.freedesktop.timesync1.conf
+++ b/src/timesync/org.freedesktop.timesync1.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0"?> <!--*-nxml-*-->
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+        "https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 
 <!--
   This file is part of systemd.
@@ -36,6 +36,10 @@
                        send_interface="org.freedesktop.DBus.Properties"
                        send_member="GetAll"/>
 
+                <allow send_destination="org.freedesktop.timesync1"
+                       send_interface="org.freedesktop.timesync1.Manager"
+                       send_member="SetRuntimeNTPServers"/>
+
                 <allow receive_sender="org.freedesktop.timesync1"/>
         </policy>
 
diff --git a/src/timesync/org.freedesktop.timesync1.policy b/src/timesync/org.freedesktop.timesync1.policy
new file mode 100644
index 0000000..e73965c
--- /dev/null
+++ b/src/timesync/org.freedesktop.timesync1.policy
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
+<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
+        "https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+
+<!--
+  SPDX-License-Identifier: LGPL-2.1-or-later
+
+  This file is part of systemd.
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+-->
+
+<policyconfig>
+
+        <vendor>The systemd Project</vendor>
+        <vendor_url>https://systemd.io</vendor_url>
+
+        <action id="org.freedesktop.timesync1.set-runtime-servers">
+                <description gettext-domain="systemd">Set runtime NTP servers</description>
+                <message gettext-domain="systemd">Authentication is required to set runtime NTP servers.</message>
+                <defaults>
+                        <allow_any>auth_admin</allow_any>
+                        <allow_inactive>auth_admin</allow_inactive>
+                        <allow_active>auth_admin_keep</allow_active>
+                </defaults>
+                <annotate key="org.freedesktop.policykit.owner">unix-user:systemd-timesync</annotate>
+        </action>
+
+</policyconfig>
diff --git a/src/timesync/test-timesync.c b/src/timesync/test-timesync.c
index 31e91e7..7993e4c 100644
--- a/src/timesync/test-timesync.c
+++ b/src/timesync/test-timesync.c
@@ -7,7 +7,7 @@
 #include "timesyncd-conf.h"
 #include "tests.h"
 
-static void test_manager_parse_string(void) {
+TEST(manager_parse_string) {
         /* Make sure that NTP_SERVERS is configured to something
          * that we can actually parse successfully. */
 
@@ -25,10 +25,4 @@
         assert_se(manager_parse_server_string(m, SERVER_LINK, "time1.foobar.com time2.foobar.com axrfav.,avf..ra 12345..123") == 0);
 }
 
-int main(int argc, char **argv) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_manager_parse_string();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/timesync/timesyncd-bus.c b/src/timesync/timesyncd-bus.c
index 1a14564..1c33f3f 100644
--- a/src/timesync/timesyncd-bus.c
+++ b/src/timesync/timesyncd-bus.c
@@ -1,18 +1,24 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <sys/capability.h>
+
 #include "sd-bus.h"
 
 #include "alloc-util.h"
 #include "bus-get-properties.h"
 #include "bus-internal.h"
 #include "bus-log-control-api.h"
+#include "bus-polkit.h"
 #include "bus-protocol.h"
 #include "bus-util.h"
+#include "dns-domain.h"
 #include "in-addr-util.h"
 #include "log.h"
 #include "macro.h"
+#include "strv.h"
 #include "time-util.h"
 #include "timesyncd-bus.h"
+#include "user-util.h"
 
 static int property_get_servers(
                 sd_bus *bus,
@@ -23,10 +29,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ServerName *p, **s = userdata;
+        ServerName **s = ASSERT_PTR(userdata);
         int r;
 
-        assert(s);
         assert(bus);
         assert(reply);
 
@@ -43,6 +48,53 @@
         return sd_bus_message_close_container(reply);
 }
 
+static int method_set_runtime_servers(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        _cleanup_strv_free_ char **msg_names = NULL;
+        Manager *m = ASSERT_PTR(userdata);
+        int r;
+
+        assert(message);
+
+        r = sd_bus_message_read_strv(message, &msg_names);
+        if (r < 0)
+                return r;
+
+        STRV_FOREACH(name, msg_names) {
+                r = dns_name_is_valid_or_address(*name);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to check validity of NTP server name or address '%s': %m", *name);
+                if (r == 0)
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid NTP server name or address, refusing: %s", *name);
+        }
+
+        r = bus_verify_polkit_async(message, CAP_NET_ADMIN,
+                                    "org.freedesktop.timesync1.set-runtime-servers",
+                                    NULL, true, UID_INVALID,
+                                    &m->polkit_registry, error);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                /* Polkit will call us back */
+                return 1;
+
+        manager_flush_runtime_servers(m);
+
+        STRV_FOREACH(name, msg_names) {
+                r = server_name_new(m, NULL, SERVER_RUNTIME, *name);
+                if (r < 0) {
+                        manager_flush_runtime_servers(m);
+
+                        return log_error_errno(r, "Failed to add runtime server '%s': %m", *name);
+                }
+        }
+
+        m->exhausted_servers = true;
+        manager_set_server_name(m, NULL);
+        (void) manager_connect(m);
+
+        return sd_bus_reply_method_return(message, NULL);
+}
+
 static int property_get_current_server_name(
                 sd_bus *bus,
                 const char *path,
@@ -52,9 +104,8 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        ServerName **s = userdata;
+        ServerName **s = ASSERT_PTR(userdata);
 
-        assert(s);
         assert(bus);
         assert(reply);
 
@@ -118,10 +169,9 @@
                 void *userdata,
                 sd_bus_error *error) {
 
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         int r;
 
-        assert(m);
         assert(reply);
 
         r = sd_bus_message_open_container(reply, 'r', "uuuuittayttttbtt");
@@ -162,6 +212,7 @@
 
         SD_BUS_PROPERTY("LinkNTPServers", "as", property_get_servers, offsetof(Manager, link_servers), 0),
         SD_BUS_PROPERTY("SystemNTPServers", "as", property_get_servers, offsetof(Manager, system_servers), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("RuntimeNTPServers", "as", property_get_servers, offsetof(Manager, runtime_servers), 0),
         SD_BUS_PROPERTY("FallbackNTPServers", "as", property_get_servers, offsetof(Manager, fallback_servers), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("ServerName", "s", property_get_current_server_name, offsetof(Manager, current_server_name), 0),
         SD_BUS_PROPERTY("ServerAddress", "(iay)", property_get_current_server_address, offsetof(Manager, current_server_address), 0),
@@ -172,6 +223,12 @@
         SD_BUS_PROPERTY("NTPMessage", "(uuuuittayttttbtt)", property_get_ntp_message, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("Frequency", "x", NULL, offsetof(Manager, drift_freq), 0),
 
+        SD_BUS_METHOD_WITH_ARGS("SetRuntimeNTPServers",
+                                SD_BUS_ARGS("as", runtime_servers),
+                                SD_BUS_NO_RESULT,
+                                method_set_runtime_servers,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+
         SD_BUS_VTABLE_END
 };
 
diff --git a/src/timesync/timesyncd-conf.c b/src/timesync/timesyncd-conf.c
index 8f34441..3e6cb43 100644
--- a/src/timesync/timesyncd-conf.c
+++ b/src/timesync/timesyncd-conf.c
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
-#include "def.h"
+#include "constants.h"
 #include "dns-domain.h"
 #include "extract-word.h"
 #include "string-util.h"
@@ -24,7 +24,6 @@
         for (;;) {
                 _cleanup_free_ char *word = NULL;
                 bool found = false;
-                ServerName *n;
 
                 r = extract_first_word(&string, &word, NULL, 0);
                 if (r < 0)
diff --git a/src/timesync/timesyncd-gperf.gperf b/src/timesync/timesyncd-gperf.gperf
index 556a2e9..731dea1 100644
--- a/src/timesync/timesyncd-gperf.gperf
+++ b/src/timesync/timesyncd-gperf.gperf
@@ -25,3 +25,4 @@
 Time.PollIntervalMinSec,             config_parse_sec,     0,               offsetof(Manager, poll_interval_min_usec)
 Time.PollIntervalMaxSec,             config_parse_sec,     0,               offsetof(Manager, poll_interval_max_usec)
 Time.ConnectionRetrySec,             config_parse_sec,     0,               offsetof(Manager, connection_retry_usec)
+Time.SaveIntervalSec,                config_parse_sec,     0,               offsetof(Manager, save_time_interval_usec)
diff --git a/src/timesync/timesyncd-manager.c b/src/timesync/timesyncd-manager.c
index e37db1c..3a96cd9 100644
--- a/src/timesync/timesyncd-manager.c
+++ b/src/timesync/timesyncd-manager.c
@@ -11,14 +11,18 @@
 #include <sys/types.h>
 
 #include "sd-daemon.h"
+#include "sd-messages.h"
 
 #include "alloc-util.h"
+#include "bus-polkit.h"
 #include "dns-domain.h"
+#include "event-util.h"
 #include "fd-util.h"
 #include "format-util.h"
 #include "fs-util.h"
 #include "list.h"
 #include "log.h"
+#include "logarithm.h"
 #include "network-util.h"
 #include "ratelimit.h"
 #include "resolve-private.h"
@@ -28,7 +32,7 @@
 #include "time-util.h"
 #include "timesyncd-conf.h"
 #include "timesyncd-manager.h"
-#include "util.h"
+#include "user-util.h"
 
 #ifndef ADJ_SETOFFSET
 #define ADJ_SETOFFSET                   0x0100  /* add 'time' to current time */
@@ -59,6 +63,7 @@
 static int manager_clock_watch_setup(Manager *m);
 static int manager_listen_setup(Manager *m);
 static void manager_listen_stop(Manager *m);
+static int manager_save_time_and_rearm(Manager *m, usec_t t);
 
 static double ntp_ts_short_to_d(const struct ntp_ts_short *ts) {
         return be16toh(ts->sec) + (be16toh(ts->frac) / 65536.0);
@@ -81,9 +86,8 @@
 
 static int manager_timeout(sd_event_source *source, usec_t usec, void *userdata) {
         _cleanup_free_ char *pretty = NULL;
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
-        assert(m);
         assert(m->current_server_name);
         assert(m->current_server_address);
 
@@ -115,8 +119,10 @@
         m->event_timeout = sd_event_source_unref(m->event_timeout);
 
         r = manager_listen_setup(m);
-        if (r < 0)
-                return log_warning_errno(r, "Failed to set up connection socket: %m");
+        if (r < 0) {
+                log_warning_errno(r, "Failed to set up connection socket: %m");
+                return manager_connect(m);
+        }
 
         /*
          * Set transmit timestamp, remember it; the server will send that back
@@ -126,7 +132,7 @@
          * The actual value does not matter, We do not care about the correct
          * NTP UINT_MAX fraction; we just pass the plain nanosecond value.
          */
-        assert_se(clock_gettime(clock_boottime_or_monotonic(), &m->trans_time_mon) >= 0);
+        assert_se(clock_gettime(CLOCK_BOOTTIME, &m->trans_time_mon) >= 0);
         assert_se(clock_gettime(CLOCK_REALTIME, &m->trans_time) >= 0);
         ntpmsg.trans_time.sec = htobe32(graceful_add_offset_1900_1970(m->trans_time.tv_sec));
         ntpmsg.trans_time.frac = htobe32(m->trans_time.tv_nsec);
@@ -157,8 +163,8 @@
                 r = sd_event_add_time(
                                 m->event,
                                 &m->event_timeout,
-                                clock_boottime_or_monotonic(),
-                                now(clock_boottime_or_monotonic()) + TIMEOUT_USEC, 0,
+                                CLOCK_BOOTTIME,
+                                now(CLOCK_BOOTTIME) + TIMEOUT_USEC, 0,
                                 manager_timeout, m);
                 if (r < 0)
                         return log_error_errno(r, "Failed to arm timeout timer: %m");
@@ -168,9 +174,7 @@
 }
 
 static int manager_timer(sd_event_source *source, usec_t usec, void *userdata) {
-        Manager *m = userdata;
-
-        assert(m);
+        Manager *m = ASSERT_PTR(userdata);
 
         return manager_send_request(m);
 }
@@ -196,15 +200,13 @@
         return sd_event_add_time_relative(
                         m->event,
                         &m->event_timer,
-                        clock_boottime_or_monotonic(),
+                        CLOCK_BOOTTIME,
                         next, 0,
                         manager_timer, m);
 }
 
 static int manager_clock_watch(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
-
-        assert(m);
+        Manager *m = ASSERT_PTR(userdata);
 
         /* rearm timer */
         manager_clock_watch_setup(m);
@@ -228,14 +230,9 @@
 
         assert(m);
 
-        m->event_clock_watch = sd_event_source_unref(m->event_clock_watch);
-        safe_close(m->clock_watch_fd);
+        m->event_clock_watch = sd_event_source_disable_unref(m->event_clock_watch);
 
-        m->clock_watch_fd = time_change_fd();
-        if (m->clock_watch_fd < 0)
-                return log_error_errno(m->clock_watch_fd, "Failed to create timerfd: %m");
-
-        r = sd_event_add_io(m->event, &m->event_clock_watch, m->clock_watch_fd, EPOLLIN, manager_clock_watch, m);
+        r = event_add_time_change(m->event, &m->event_clock_watch, manager_clock_watch, m);
         if (r < 0)
                 return log_error_errno(r, "Failed to create clock watch event source: %m");
 
@@ -243,31 +240,29 @@
 }
 
 static int manager_adjust_clock(Manager *m, double offset, int leap_sec) {
-        struct timex tmx = {};
-        int r;
+        struct timex tmx;
 
         assert(m);
 
-        /*
-         * For small deltas, tell the kernel to gradually adjust the system
-         * clock to the NTP time, larger deltas are just directly set.
-         */
+        /* For small deltas, tell the kernel to gradually adjust the system clock to the NTP time, larger
+         * deltas are just directly set. */
         if (fabs(offset) < NTP_MAX_ADJUST) {
-                tmx.modes = ADJ_STATUS | ADJ_NANO | ADJ_OFFSET | ADJ_TIMECONST | ADJ_MAXERROR | ADJ_ESTERROR;
-                tmx.status = STA_PLL;
-                tmx.offset = offset * NSEC_PER_SEC;
-                tmx.constant = log2i(m->poll_interval_usec / USEC_PER_SEC) - 4;
-                tmx.maxerror = 0;
-                tmx.esterror = 0;
+                tmx = (struct timex) {
+                        .modes = ADJ_STATUS | ADJ_NANO | ADJ_OFFSET | ADJ_TIMECONST | ADJ_MAXERROR | ADJ_ESTERROR,
+                        .status = STA_PLL,
+                        .offset = offset * NSEC_PER_SEC,
+                        .constant = log2i(m->poll_interval_usec / USEC_PER_SEC) - 4,
+                };
+
                 log_debug("  adjust (slew): %+.3f sec", offset);
         } else {
-                tmx.modes = ADJ_STATUS | ADJ_NANO | ADJ_SETOFFSET | ADJ_MAXERROR | ADJ_ESTERROR;
+                tmx = (struct timex) {
+                        .modes = ADJ_STATUS | ADJ_NANO | ADJ_SETOFFSET | ADJ_MAXERROR | ADJ_ESTERROR,
 
-                /* ADJ_NANO uses nanoseconds in the microseconds field */
-                tmx.time.tv_sec = (long)offset;
-                tmx.time.tv_usec = (offset - tmx.time.tv_sec) * NSEC_PER_SEC;
-                tmx.maxerror = 0;
-                tmx.esterror = 0;
+                        /* ADJ_NANO uses nanoseconds in the microseconds field */
+                        .time.tv_sec = (long)offset,
+                        .time.tv_usec = (offset - (double) (long) offset) * NSEC_PER_SEC,
+                };
 
                 /* the kernel expects -0.3s as {-1, 7000.000.000} */
                 if (tmx.time.tv_usec < 0) {
@@ -279,14 +274,11 @@
                 log_debug("  adjust (jump): %+.3f sec", offset);
         }
 
-        /*
-         * An unset STA_UNSYNC will enable the kernel's 11-minute mode,
-         * which syncs the system time periodically to the RTC.
+        /* An unset STA_UNSYNC will enable the kernel's 11-minute mode, which syncs the system time
+         * periodically to the RTC.
          *
-         * In case the RTC runs in local time, never touch the RTC,
-         * we have no way to properly handle daylight saving changes and
-         * mobile devices moving between time zones.
-         */
+         * In case the RTC runs in local time, never touch the RTC, we have no way to properly handle
+         * daylight saving changes and mobile devices moving between time zones. */
         if (m->rtc_local_time)
                 tmx.status |= STA_UNSYNC;
 
@@ -299,14 +291,9 @@
                 break;
         }
 
-        r = clock_adjtime(CLOCK_REALTIME, &tmx);
-        if (r < 0)
+        if (clock_adjtime(CLOCK_REALTIME, &tmx) < 0)
                 return -errno;
 
-        /* If touch fails, there isn't much we can do. Maybe it'll work next time. */
-        (void) touch("/var/lib/systemd/timesync/clock");
-        (void) touch("/run/systemd/timesync/synchronized");
-
         m->drift_freq = tmx.freq;
 
         log_debug("  status       : %04i %s\n"
@@ -405,7 +392,7 @@
 }
 
 static int manager_receive_response(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         struct ntp_msg ntpmsg;
 
         struct iovec iov = {
@@ -423,18 +410,14 @@
                 .msg_name = &server_addr,
                 .msg_namelen = sizeof(server_addr),
         };
-        struct cmsghdr *cmsg;
         struct timespec *recv_time = NULL;
+        triple_timestamp dts;
         ssize_t len;
-        double origin, receive, trans, dest;
-        double delay, offset;
-        double root_distance;
+        double origin, receive, trans, dest, delay, offset, root_distance;
         bool spike;
-        int leap_sec;
-        int r;
+        int leap_sec, r;
 
         assert(source);
-        assert(m);
 
         if (revents & (EPOLLHUP|EPOLLERR)) {
                 log_warning("Server connection returned error.");
@@ -462,21 +445,9 @@
                 return 0;
         }
 
-        CMSG_FOREACH(cmsg, &msghdr) {
-                if (cmsg->cmsg_level != SOL_SOCKET)
-                        continue;
-
-                switch (cmsg->cmsg_type) {
-                case SCM_TIMESTAMPNS:
-                        assert(cmsg->cmsg_len == CMSG_LEN(sizeof(struct timespec)));
-
-                        recv_time = (struct timespec *) CMSG_DATA(cmsg);
-                        break;
-                }
-        }
+        recv_time = CMSG_FIND_DATA(&msghdr, SOL_SOCKET, SCM_TIMESTAMPNS, struct timespec);
         if (!recv_time)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Invalid packet timestamp.");
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Packet timestamp missing.");
 
         if (!m->pending) {
                 log_debug("Unexpected reply. Ignoring.");
@@ -561,11 +532,11 @@
         manager_adjust_poll(m, offset, spike);
 
         log_debug("NTP response:\n"
-                  "  leap         : %u\n"
-                  "  version      : %u\n"
-                  "  mode         : %u\n"
+                  "  leap         : %i\n"
+                  "  version      : %i\n"
+                  "  mode         : %i\n"
                   "  stratum      : %u\n"
-                  "  precision    : %.6f sec (%d)\n"
+                  "  precision    : %.6f sec (%i)\n"
                   "  root distance: %.6f sec\n"
                   "  reference    : %.4s\n"
                   "  origin       : %.3f\n"
@@ -593,11 +564,23 @@
                   m->samples_jitter, spike ? " spike" : "",
                   m->poll_interval_usec / USEC_PER_SEC);
 
+        /* Get current monotonic/realtime clocks immediately before adjusting the latter */
+        triple_timestamp_get(&dts);
+
         if (!spike) {
-                m->sync = true;
+                /* Fix up our idea of the time. */
+                dts.realtime = (usec_t) (dts.realtime + offset * USEC_PER_SEC);
+
                 r = manager_adjust_clock(m, offset, leap_sec);
                 if (r < 0)
                         log_error_errno(r, "Failed to call clock_adjtime(): %m");
+
+                (void) manager_save_time_and_rearm(m, dts.realtime);
+
+                /* If touch fails, there isn't much we can do. Maybe it'll work next time. */
+                r = touch("/run/systemd/timesync/synchronized");
+                if (r < 0)
+                        log_debug_errno(r, "Failed to touch /run/systemd/timesync/synchronized, ignoring: %m");
         }
 
         /* Save NTP response */
@@ -618,15 +601,27 @@
                                 "NTPMessage",
                                 NULL);
 
-        if (!m->good) {
+        if (!m->talking) {
                 _cleanup_free_ char *pretty = NULL;
 
-                m->good = true;
+                m->talking = true;
 
-                server_address_pretty(m->current_server_address, &pretty);
-                /* "Initial", as further successful syncs will not be logged. */
-                log_info("Initial synchronization to time server %s (%s).", strna(pretty), m->current_server_name->string);
-                sd_notifyf(false, "STATUS=Initial synchronization to time server %s (%s).", strna(pretty), m->current_server_name->string);
+                (void) server_address_pretty(m->current_server_address, &pretty);
+
+                log_info("Contacted time server %s (%s).", strna(pretty), m->current_server_name->string);
+                (void) sd_notifyf(false, "STATUS=Contacted time server %s (%s).", strna(pretty), m->current_server_name->string);
+        }
+
+        if (!spike && !m->synchronized) {
+                m->synchronized = true;
+
+                log_struct(LOG_INFO,
+                           LOG_MESSAGE("Initial clock synchronization to %s.",
+                                       FORMAT_TIMESTAMP_STYLE(dts.realtime, TIMESTAMP_US)),
+                           "MESSAGE_ID=" SD_MESSAGE_TIME_SYNC_STR,
+                           "MONOTONIC_USEC=" USEC_FMT, dts.monotonic,
+                           "REALTIME_USEC=" USEC_FMT, dts.realtime,
+                           "BOOTIME_USEC=" USEC_FMT, dts.boottime);
         }
 
         r = manager_arm_timer(m, m->poll_interval_usec);
@@ -683,14 +678,14 @@
         assert_return(m->current_server_name, -EHOSTUNREACH);
         assert_return(m->current_server_address, -EHOSTUNREACH);
 
-        m->good = false;
+        m->talking = false;
         m->missed_replies = NTP_MAX_MISSED_REPLIES;
         if (m->poll_interval_usec == 0)
                 m->poll_interval_usec = m->poll_interval_min_usec;
 
         server_address_pretty(m->current_server_address, &pretty);
         log_debug("Connecting to time server %s (%s).", strna(pretty), m->current_server_name->string);
-        sd_notifyf(false, "STATUS=Connecting to time server %s (%s).", strna(pretty), m->current_server_name->string);
+        (void) sd_notifyf(false, "STATUS=Connecting to time server %s (%s).", strna(pretty), m->current_server_name->string);
 
         r = manager_clock_watch_setup(m);
         if (r < 0)
@@ -759,7 +754,7 @@
                 assert(ai->ai_addrlen >= offsetof(struct sockaddr, sa_data));
 
                 if (!IN_SET(ai->ai_addr->sa_family, AF_INET, AF_INET6)) {
-                        log_warning("Unsuitable address protocol for %s", m->current_server_name->string);
+                        log_debug("Ignoring unsuitable address protocol for %s.", m->current_server_name->string);
                         continue;
                 }
 
@@ -784,9 +779,7 @@
 }
 
 static int manager_retry_connect(sd_event_source *source, usec_t usec, void *userdata) {
-        Manager *m = userdata;
-
-        assert(m);
+        Manager *m = ASSERT_PTR(userdata);
 
         return manager_connect(m);
 }
@@ -802,7 +795,7 @@
         if (!ratelimit_below(&m->ratelimit)) {
                 log_debug("Delaying attempts to contact servers.");
 
-                r = sd_event_add_time_relative(m->event, &m->event_retry, clock_boottime_or_monotonic(), m->connection_retry_usec,
+                r = sd_event_add_time_relative(m->event, &m->event_retry, CLOCK_BOOTTIME, m->connection_retry_usec,
                                                0, manager_retry_connect, m);
                 if (r < 0)
                         return log_error_errno(r, "Failed to create retry timer: %m");
@@ -815,11 +808,6 @@
         if (m->current_server_address && m->current_server_address->addresses_next)
                 manager_set_server_address(m, m->current_server_address->addresses_next);
         else {
-                struct addrinfo hints = {
-                        .ai_flags = AI_NUMERICSERV|AI_ADDRCONFIG,
-                        .ai_socktype = SOCK_DGRAM,
-                };
-
                 /* Hmm, we are through all addresses, let's look for the next host instead */
                 if (m->current_server_name && m->current_server_name->names_next)
                         manager_set_server_name(m, m->current_server_name->names_next);
@@ -828,22 +816,25 @@
                         bool restart = true;
 
                         /* Our current server name list is exhausted,
-                         * let's find the next one to iterate. First
-                         * we try the system list, then the link list.
-                         * After having processed the link list we
-                         * jump back to the system list. However, if
-                         * both lists are empty, we change to the
-                         * fallback list. */
+                         * let's find the next one to iterate. First we try the runtime list, then the system list,
+                         * then the link list. After having processed the link list we jump back to the system list
+                         * if no runtime server list.
+                         * However, if all lists are empty, we change to the fallback list. */
                         if (!m->current_server_name || m->current_server_name->type == SERVER_LINK) {
-                                f = m->system_servers;
+                                f = m->runtime_servers;
+                                if (!f)
+                                        f = m->system_servers;
                                 if (!f)
                                         f = m->link_servers;
                         } else {
                                 f = m->link_servers;
-                                if (!f)
-                                        f = m->system_servers;
-                                else
+                                if (f)
                                         restart = false;
+                                else {
+                                        f = m->runtime_servers;
+                                        if (!f)
+                                                f = m->system_servers;
+                                }
                         }
 
                         if (!f)
@@ -855,9 +846,9 @@
                                 return 0;
                         }
 
-                        if (restart && !m->exhausted_servers && m->poll_interval_usec) {
+                        if (restart && !m->exhausted_servers && m->poll_interval_usec > 0) {
                                 log_debug("Waiting after exhausting servers.");
-                                r = sd_event_add_time_relative(m->event, &m->event_retry, clock_boottime_or_monotonic(), m->poll_interval_usec, 0, manager_retry_connect, m);
+                                r = sd_event_add_time_relative(m->event, &m->event_retry, CLOCK_BOOTTIME, m->poll_interval_usec, 0, manager_retry_connect, m);
                                 if (r < 0)
                                         return log_error_errno(r, "Failed to create retry timer: %m");
 
@@ -884,6 +875,12 @@
 
                 log_debug("Resolving %s...", m->current_server_name->string);
 
+                struct addrinfo hints = {
+                        .ai_flags = AI_NUMERICSERV|AI_ADDRCONFIG,
+                        .ai_socktype = SOCK_DGRAM,
+                        .ai_family = socket_ipv6_is_supported() ? AF_UNSPEC : AF_INET,
+                };
+
                 r = resolve_getaddrinfo(m->resolve, &m->resolve_query, m->current_server_name->string, "123", &hints, manager_resolve_handler, NULL, m);
                 if (r < 0)
                         return log_error_errno(r, "Failed to create resolver: %m");
@@ -907,12 +904,11 @@
 
         manager_listen_stop(m);
 
-        m->event_clock_watch = sd_event_source_unref(m->event_clock_watch);
-        m->clock_watch_fd = safe_close(m->clock_watch_fd);
+        m->event_clock_watch = sd_event_source_disable_unref(m->event_clock_watch);
 
         m->event_timeout = sd_event_source_unref(m->event_timeout);
 
-        sd_notifyf(false, "STATUS=Idle.");
+        (void) sd_notify(false, "STATUS=Idle.");
 }
 
 void manager_flush_server_names(Manager  *m, ServerType t) {
@@ -929,6 +925,16 @@
         if (t == SERVER_FALLBACK)
                 while (m->fallback_servers)
                         server_name_free(m->fallback_servers);
+
+        if (t == SERVER_RUNTIME)
+                manager_flush_runtime_servers(m);
+}
+
+void manager_flush_runtime_servers(Manager *m) {
+        assert(m);
+
+        while (m->runtime_servers)
+                server_name_free(m->runtime_servers);
 }
 
 Manager* manager_free(Manager *m) {
@@ -938,6 +944,7 @@
         manager_disconnect(m);
         manager_flush_server_names(m, SERVER_SYSTEM);
         manager_flush_server_names(m, SERVER_LINK);
+        manager_flush_server_names(m, SERVER_RUNTIME);
         manager_flush_server_names(m, SERVER_FALLBACK);
 
         sd_event_source_unref(m->event_retry);
@@ -945,25 +952,27 @@
         sd_event_source_unref(m->network_event_source);
         sd_network_monitor_unref(m->network_monitor);
 
+        sd_event_source_unref(m->event_save_time);
+
         sd_resolve_unref(m->resolve);
         sd_event_unref(m->event);
 
         sd_bus_flush_close_unref(m->bus);
 
+        bus_verify_polkit_async_registry_free(m->polkit_registry);
+
         return mfree(m);
 }
 
 static int manager_network_read_link_servers(Manager *m) {
         _cleanup_strv_free_ char **ntp = NULL;
-        ServerName *n, *nx;
-        char **i;
         bool changed = false;
         int r;
 
         assert(m);
 
         r = sd_network_get_ntp(&ntp);
-        if (r < 0) {
+        if (r < 0 && r != -ENODATA) {
                 if (r == -ENOMEM)
                         log_oom();
                 else
@@ -1004,7 +1013,7 @@
                 }
         }
 
-        LIST_FOREACH_SAFE(names, n, nx, m->link_servers)
+        LIST_FOREACH(names, n, m->link_servers)
                 if (n->marked) {
                         server_name_free(n);
                         changed = true;
@@ -1017,19 +1026,19 @@
         return r;
 }
 
-static bool manager_is_connected(Manager *m) {
+bool manager_is_connected(Manager *m) {
+        assert(m);
+
         /* Return true when the manager is sending a request, resolving a server name, or
          * in a poll interval. */
         return m->server_socket >= 0 || m->resolve_query || m->event_timer;
 }
 
 static int manager_network_event_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
         bool changed, connected, online;
         int r;
 
-        assert(m);
-
         sd_network_monitor_flush(m->network_monitor);
 
         /* When manager_network_read_link_servers() failed, we assume that the servers are changed. */
@@ -1093,19 +1102,26 @@
 
         assert(ret);
 
-        m = new0(Manager, 1);
+        m = new(Manager, 1);
         if (!m)
                 return -ENOMEM;
 
-        m->root_distance_max_usec = NTP_ROOT_DISTANCE_MAX_USEC;
-        m->poll_interval_min_usec = NTP_POLL_INTERVAL_MIN_USEC;
-        m->poll_interval_max_usec = NTP_POLL_INTERVAL_MAX_USEC;
+        *m = (Manager) {
+                .root_distance_max_usec = NTP_ROOT_DISTANCE_MAX_USEC,
+                .poll_interval_min_usec = NTP_POLL_INTERVAL_MIN_USEC,
+                .poll_interval_max_usec = NTP_POLL_INTERVAL_MAX_USEC,
 
-        m->connection_retry_usec = DEFAULT_CONNECTION_RETRY_USEC;
+                .connection_retry_usec = DEFAULT_CONNECTION_RETRY_USEC,
 
-        m->server_socket = m->clock_watch_fd = -1;
+                .server_socket = -EBADF,
 
-        m->ratelimit = (RateLimit) { RATELIMIT_INTERVAL_USEC, RATELIMIT_BURST };
+                .ratelimit = (const RateLimit) {
+                        RATELIMIT_INTERVAL_USEC,
+                        RATELIMIT_BURST
+                },
+
+                .save_time_interval_usec = DEFAULT_SAVE_TIME_INTERVAL_USEC,
+        };
 
         r = sd_event_default(&m->event);
         if (r < 0)
@@ -1116,6 +1132,12 @@
 
         (void) sd_event_set_watchdog(m->event, true);
 
+        /* Load previous synchronization state */
+        r = access("/run/systemd/timesync/synchronized", F_OK);
+        if (r < 0 && errno != ENOENT)
+                log_debug_errno(errno, "Failed to determine whether /run/systemd/timesync/synchronized exists, ignoring: %m");
+        m->synchronized = r >= 0;
+
         r = sd_resolve_default(&m->resolve);
         if (r < 0)
                 return r;
@@ -1134,3 +1156,62 @@
 
         return 0;
 }
+
+static int manager_save_time_handler(sd_event_source *s, uint64_t usec, void *userdata) {
+        Manager *m = ASSERT_PTR(userdata);
+
+        (void) manager_save_time_and_rearm(m, USEC_INFINITY);
+        return 0;
+}
+
+int manager_setup_save_time_event(Manager *m) {
+        int r;
+
+        assert(m);
+        assert(!m->event_save_time);
+
+        if (m->save_time_interval_usec == USEC_INFINITY)
+                return 0;
+
+        /* NB: we'll accumulate scheduling latencies here, but this doesn't matter */
+        r = sd_event_add_time_relative(
+                        m->event, &m->event_save_time,
+                        CLOCK_BOOTTIME,
+                        m->save_time_interval_usec,
+                        10 * USEC_PER_SEC,
+                        manager_save_time_handler, m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add save time event: %m");
+
+        (void) sd_event_source_set_description(m->event_save_time, "save-time");
+
+        return 0;
+}
+
+static int manager_save_time_and_rearm(Manager *m, usec_t t) {
+        int r;
+
+        assert(m);
+
+        /* Updates the timestamp file to the specified time. If 't' is USEC_INFINITY uses the current system
+         * clock, but otherwise uses the specified timestamp. Note that whenever we acquire an NTP sync the
+         * specified timestamp value might be more accurate than the system clock, since the latter is
+         * subject to slow adjustments. */
+        r = touch_file(CLOCK_FILE, false, t, UID_INVALID, GID_INVALID, MODE_INVALID);
+        if (r < 0)
+                log_debug_errno(r, "Failed to update " CLOCK_FILE ", ignoring: %m");
+
+        m->save_on_exit = true;
+
+        if (m->save_time_interval_usec != USEC_INFINITY) {
+                r = sd_event_source_set_time_relative(m->event_save_time, m->save_time_interval_usec);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to rearm save time event: %m");
+
+                r = sd_event_source_set_enabled(m->event_save_time, SD_EVENT_ONESHOT);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to enable save time event: %m");
+        }
+
+        return 0;
+}
diff --git a/src/timesync/timesyncd-manager.h b/src/timesync/timesyncd-manager.h
index 4aa7575..e595c7d 100644
--- a/src/timesync/timesyncd-manager.h
+++ b/src/timesync/timesyncd-manager.h
@@ -8,6 +8,7 @@
 #include "sd-network.h"
 #include "sd-resolve.h"
 
+#include "hashmap.h"
 #include "list.h"
 #include "ratelimit.h"
 #include "time-util.h"
@@ -27,7 +28,12 @@
 #define NTP_RETRY_INTERVAL_MIN_USEC     (15 * USEC_PER_SEC)
 #define NTP_RETRY_INTERVAL_MAX_USEC     (6 * 60 * USEC_PER_SEC) /* 6 minutes */
 
-#define DEFAULT_CONNECTION_RETRY_USEC (30*USEC_PER_SEC)
+#define DEFAULT_CONNECTION_RETRY_USEC   (30 * USEC_PER_SEC)
+
+#define DEFAULT_SAVE_TIME_INTERVAL_USEC (60 * USEC_PER_SEC)
+
+#define STATE_DIR   "/var/lib/systemd/timesync"
+#define CLOCK_FILE  STATE_DIR "/clock"
 
 struct Manager {
         sd_bus *bus;
@@ -36,6 +42,7 @@
 
         LIST_HEAD(ServerName, system_servers);
         LIST_HEAD(ServerName, link_servers);
+        LIST_HEAD(ServerName, runtime_servers);
         LIST_HEAD(ServerName, fallback_servers);
 
         bool have_fallbacks:1;
@@ -56,7 +63,10 @@
         int missed_replies;
         uint64_t packet_count;
         sd_event_source *event_timeout;
-        bool good;
+        bool talking;
+
+        /* PolicyKit */
+        Hashmap *polkit_registry;
 
         /* last sent packet */
         struct timespec trans_time_mon;
@@ -83,12 +93,10 @@
 
         /* last change */
         bool jumped;
-        bool sync;
         int64_t drift_freq;
 
         /* watch for time changes */
         sd_event_source *event_clock_watch;
-        int clock_watch_fd;
 
         /* Retry connections */
         sd_event_source *event_retry;
@@ -100,6 +108,14 @@
         struct ntp_msg ntpmsg;
         struct timespec origin_time, dest_time;
         bool spike;
+
+        /* Indicates whether we ever managed to set the local clock from NTP */
+        bool synchronized;
+
+        /* save time event */
+        sd_event_source *event_save_time;
+        usec_t save_time_interval_usec;
+        bool save_on_exit;
 };
 
 int manager_new(Manager **ret);
@@ -110,6 +126,10 @@
 void manager_set_server_name(Manager *m, ServerName *n);
 void manager_set_server_address(Manager *m, ServerAddress *a);
 void manager_flush_server_names(Manager *m, ServerType t);
+void manager_flush_runtime_servers(Manager *m);
 
 int manager_connect(Manager *m);
 void manager_disconnect(Manager *m);
+bool manager_is_connected(Manager *m);
+
+int manager_setup_save_time_event(Manager *m);
diff --git a/src/timesync/timesyncd-server.c b/src/timesync/timesyncd-server.c
index f7ec317..7aa1551 100644
--- a/src/timesync/timesyncd-server.c
+++ b/src/timesync/timesyncd-server.c
@@ -1,8 +1,18 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "alloc-util.h"
+#include "string-table.h"
 #include "timesyncd-server.h"
 
+static const char * const server_type_table[_SERVER_TYPE_MAX] = {
+        [SERVER_SYSTEM]   = "system",
+        [SERVER_FALLBACK] = "fallback",
+        [SERVER_LINK]     = "link",
+        [SERVER_RUNTIME]  = "runtime",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(server_type, ServerType);
+
 int server_address_new(
                 ServerName *n,
                 ServerAddress **ret,
@@ -16,16 +26,19 @@
         assert(socklen >= offsetof(struct sockaddr, sa_data));
         assert(socklen <= sizeof(union sockaddr_union));
 
-        a = new0(ServerAddress, 1);
+        a = new(ServerAddress, 1);
         if (!a)
                 return -ENOMEM;
 
-        memcpy(&a->sockaddr, sockaddr, socklen);
-        a->socklen = socklen;
+        *a = (ServerAddress) {
+                .name = n,
+                .socklen = socklen,
+        };
 
-        LIST_FIND_TAIL(addresses, n->addresses, tail);
+        memcpy(&a->sockaddr, sockaddr, socklen);
+
+        tail = LIST_FIND_TAIL(addresses, n->addresses);
         LIST_INSERT_AFTER(addresses, n->addresses, tail, a);
-        a->name = n;
 
         if (ret)
                 *ret = a;
@@ -53,42 +66,49 @@
                 ServerType type,
                 const char *string) {
 
-        ServerName *n, *tail;
+        ServerName *n;
 
         assert(m);
         assert(string);
 
-        n = new0(ServerName, 1);
+        n = new(ServerName, 1);
         if (!n)
                 return -ENOMEM;
 
-        n->type = type;
-        n->string = strdup(string);
+        *n = (ServerName) {
+                .manager = m,
+                .type = type,
+                .string = strdup(string),
+        };
+
         if (!n->string) {
                 free(n);
                 return -ENOMEM;
         }
 
-        if (type == SERVER_SYSTEM) {
-                LIST_FIND_TAIL(names, m->system_servers, tail);
-                LIST_INSERT_AFTER(names, m->system_servers, tail, n);
-        } else if (type == SERVER_LINK) {
-                LIST_FIND_TAIL(names, m->link_servers, tail);
-                LIST_INSERT_AFTER(names, m->link_servers, tail, n);
-        } else if (type == SERVER_FALLBACK) {
-                LIST_FIND_TAIL(names, m->fallback_servers, tail);
-                LIST_INSERT_AFTER(names, m->fallback_servers, tail, n);
-        } else
-                assert_not_reached("Unknown server type");
-
-        n->manager = m;
+        switch (type) {
+        case SERVER_SYSTEM:
+                LIST_APPEND(names, m->system_servers, n);
+                break;
+        case SERVER_LINK:
+                LIST_APPEND(names, m->link_servers, n);
+                break;
+        case SERVER_FALLBACK:
+                LIST_APPEND(names, m->fallback_servers, n);
+                break;
+        case SERVER_RUNTIME:
+                LIST_APPEND(names, m->runtime_servers, n);
+                break;
+        default:
+                assert_not_reached();
+        }
 
         if (type != SERVER_FALLBACK &&
             m->current_server_name &&
             m->current_server_name->type == SERVER_FALLBACK)
                 manager_set_server_name(m, NULL);
 
-        log_debug("Added new server %s.", string);
+        log_debug("Added new %s server %s.", server_type_to_string(type), string);
 
         if (ret)
                 *ret = n;
@@ -109,8 +129,10 @@
                         LIST_REMOVE(names, n->manager->link_servers, n);
                 else if (n->type == SERVER_FALLBACK)
                         LIST_REMOVE(names, n->manager->fallback_servers, n);
+                else if (n->type == SERVER_RUNTIME)
+                        LIST_REMOVE(names, n->manager->runtime_servers, n);
                 else
-                        assert_not_reached("Unknown server type");
+                        assert_not_reached();
 
                 if (n->manager->current_server_name == n)
                         manager_set_server_name(n->manager, NULL);
diff --git a/src/timesync/timesyncd-server.h b/src/timesync/timesyncd-server.h
index 8e9e408..e22917a 100644
--- a/src/timesync/timesyncd-server.h
+++ b/src/timesync/timesyncd-server.h
@@ -11,6 +11,9 @@
         SERVER_SYSTEM,
         SERVER_FALLBACK,
         SERVER_LINK,
+        SERVER_RUNTIME,
+        _SERVER_TYPE_MAX,
+        _SERVER_TYPE_INVALID = -EINVAL,
 } ServerType;
 
 #include "timesyncd-manager.h"
diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
index 8d43e55..e60742c 100644
--- a/src/timesync/timesyncd.c
+++ b/src/timesync/timesyncd.c
@@ -5,6 +5,7 @@
 
 #include "sd-daemon.h"
 #include "sd-event.h"
+#include "sd-messages.h"
 
 #include "capability-util.h"
 #include "clock-util.h"
@@ -12,7 +13,7 @@
 #include "fd-util.h"
 #include "fs-util.h"
 #include "main-func.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "network-util.h"
 #include "process-util.h"
 #include "signal-util.h"
@@ -21,70 +22,118 @@
 #include "timesyncd-manager.h"
 #include "user-util.h"
 
-#define STATE_DIR   "/var/lib/systemd/timesync"
-#define CLOCK_FILE  STATE_DIR "/clock"
+static int advance_tstamp(int fd, const struct stat *st) {
+        assert_se(fd >= 0);
+        assert_se(st);
+
+        /* So here's the problem: whenever we read the timestamp we'd like to ensure the next time we won't
+         * restore the exact same time again, but one at least one step further (so that comparing mtimes of
+         * the timestamp file is a reliable check that timesync did its thing). But file systems have
+         * different timestamp accuracy: traditional fat has 2s granularity, and even ext2 and friends expose
+         * different granularity depending on selected inode size during formatting! Hence, to ensure the
+         * timestamp definitely is increased, here's what we'll do: we'll first try to increase the timestamp
+         * by 1µs, write that and read it back. If it was updated, great. But if it was not, we'll instead
+         * increase the timestamp by 10µs, and do the same, then 100µs, then 1ms, and so on, until it works,
+         * or we reach 10s. If it still didn't work then, the fs is just broken and we give up. */
+
+        usec_t target = MAX3(now(CLOCK_REALTIME),
+                             TIME_EPOCH * USEC_PER_SEC,
+                             timespec_load(&st->st_mtim));
+
+        for (usec_t a = 1; a <= 10 * USEC_PER_SEC; a *= 10) { /* 1µs, 10µs, 100µs, 1ms, … 10s */
+                struct timespec ts[2];
+                struct stat new_st;
+
+                /* Bump to the maximum of the old timestamp advanced by the specified unit,  */
+                usec_t c = usec_add(target, a);
+
+                timespec_store(&ts[0], c);
+                ts[1] = ts[0];
+
+                if (futimens(fd, ts) < 0) {
+                        /* If this doesn't work at all, log, don't fail but give up */
+                        log_warning_errno(errno, "Unable to update mtime of timestamp file, ignoring: %m");
+                        return 0;
+                }
+
+                if (fstat(fd, &new_st) < 0)
+                        return log_error_errno(errno, "Failed to stat timestamp file: %m");
+
+                if (timespec_load(&new_st.st_mtim) > target) {
+                        log_debug("Successfully bumped timestamp file.");
+                        return 1;
+                }
+
+                log_debug("Tried to advance timestamp file by " USEC_FMT ", but this didn't work, file system timestamp granularity too coarse?", a);
+        }
+
+        log_debug("Gave up trying to advance timestamp file.");
+        return 0;
+}
 
 static int load_clock_timestamp(uid_t uid, gid_t gid) {
-        _cleanup_close_ int fd = -1;
-        usec_t min = TIME_EPOCH * USEC_PER_SEC;
-        usec_t ct;
+        usec_t min = TIME_EPOCH * USEC_PER_SEC, ct;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
-        /* Let's try to make sure that the clock is always
-         * monotonically increasing, by saving the clock whenever we
-         * have a new NTP time, or when we shut down, and restoring it
-         * when we start again. This is particularly helpful on
-         * systems lacking a battery backed RTC. We also will adjust
-         * the time to at least the build time of systemd. */
+        /* Let's try to make sure that the clock is always monotonically increasing, by saving the clock
+         * whenever we have a new NTP time, or when we shut down, and restoring it when we start again. This
+         * is particularly helpful on systems lacking a battery backed RTC. We also will adjust the time to
+         * at least the build time of systemd. */
 
         fd = open(CLOCK_FILE, O_RDWR|O_CLOEXEC, 0644);
-        if (fd >= 0) {
+        if (fd < 0) {
+                if (errno != ENOENT)
+                        log_debug_errno(errno, "Unable to open timestamp file '" CLOCK_FILE "', ignoring: %m");
+
+                r = mkdir_safe_label(STATE_DIR, 0755, uid, gid,
+                                     MKDIR_FOLLOW_SYMLINK | MKDIR_WARN_MODE);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to create state directory, ignoring: %m");
+
+                /* create stamp file with the compiled-in date */
+                r = touch_file(CLOCK_FILE, /* parents= */ false, min, uid, gid, 0644);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to create %s, ignoring: %m", CLOCK_FILE);
+        } else {
                 struct stat st;
                 usec_t stamp;
 
                 /* check if the recorded time is later than the compiled-in one */
-                r = fstat(fd, &st);
-                if (r >= 0) {
-                        stamp = timespec_load(&st.st_mtim);
-                        if (stamp > min)
-                                min = stamp;
-                }
+                if (fstat(fd, &st) < 0)
+                        return log_error_errno(errno, "Unable to stat timestamp file '" CLOCK_FILE "': %m");
 
-                if (geteuid() == 0) {
-                        /* Try to fix the access mode, so that we can still
-                           touch the file after dropping privileges */
-                        r = fchmod_and_chown(fd, 0644, uid, gid);
-                        if (r < 0)
-                                log_warning_errno(r, "Failed to chmod or chown %s, ignoring: %m", CLOCK_FILE);
-                }
+                stamp = timespec_load(&st.st_mtim);
+                if (stamp > min)
+                        min = stamp;
 
-        } else {
-                r = mkdir_safe_label(STATE_DIR, 0755, uid, gid,
-                                     MKDIR_FOLLOW_SYMLINK | MKDIR_WARN_MODE);
-                if (r < 0) {
-                        log_debug_errno(r, "Failed to create state directory, ignoring: %m");
-                        goto settime;
-                }
-
-                /* create stamp file with the compiled-in date */
-                r = touch_file(CLOCK_FILE, false, min, uid, gid, 0644);
+                /* Try to fix the access mode, so that we can still touch the file after dropping
+                 * privileges */
+                r = fchmod_and_chown(fd, 0644, uid, gid);
                 if (r < 0)
-                        log_debug_errno(r, "Failed to create %s, ignoring: %m", CLOCK_FILE);
+                        log_full_errno(ERRNO_IS_PRIVILEGE(r) ? LOG_DEBUG : LOG_WARNING, r,
+                                       "Failed to chmod or chown %s, ignoring: %m", CLOCK_FILE);
+
+                (void) advance_tstamp(fd, &st);
         }
 
-settime:
         ct = now(CLOCK_REALTIME);
-        if (ct < min) {
-                struct timespec ts;
-                char date[FORMAT_TIMESTAMP_MAX];
+        if (ct > min)
+                return 0;
 
-                log_info("System clock time unset or jumped backwards, restoring from recorded timestamp: %s",
-                         format_timestamp(date, sizeof(date), min));
-
-                if (clock_settime(CLOCK_REALTIME, timespec_store(&ts, min)) < 0)
-                        log_error_errno(errno, "Failed to restore system clock, ignoring: %m");
+        /* Not that it matters much, but we actually restore the clock to n+1 here rather than n, simply
+         * because we read n as time previously already and we want to progress here, i.e. not report the
+         * same time again. */
+        if (clock_settime(CLOCK_REALTIME, TIMESPEC_STORE(min+1)) < 0) {
+                log_warning_errno(errno, "Failed to restore system clock, ignoring: %m");
+                return 0;
         }
 
+        log_struct(LOG_INFO,
+                   "MESSAGE_ID=" SD_MESSAGE_TIME_BUMP_STR,
+                   "REALTIME_USEC=" USEC_FMT, min+1,
+                   LOG_MESSAGE("System clock time unset or jumped backwards, restored from recorded timestamp: %s",
+                               FORMAT_TIMESTAMP(min+1)));
         return 0;
 }
 
@@ -155,6 +204,10 @@
                                       "STATUS=Daemon is running",
                                       NOTIFY_STOPPING);
 
+        r = manager_setup_save_time_event(m);
+        if (r < 0)
+                return r;
+
         if (network_is_online()) {
                 r = manager_connect(m);
                 if (r < 0)
@@ -166,10 +219,10 @@
                 return log_error_errno(r, "Failed to run event loop: %m");
 
         /* if we got an authoritative time, store it in the file system */
-        if (m->sync) {
+        if (m->save_on_exit) {
                 r = touch(CLOCK_FILE);
                 if (r < 0)
-                        log_debug_errno(r, "Failed to touch %s, ignoring: %m", CLOCK_FILE);
+                        log_debug_errno(r, "Failed to touch " CLOCK_FILE ", ignoring: %m");
         }
 
         return 0;
diff --git a/src/timesync/timesyncd.conf.in b/src/timesync/timesyncd.conf.in
index d5f29e1..f349229 100644
--- a/src/timesync/timesyncd.conf.in
+++ b/src/timesync/timesyncd.conf.in
@@ -18,3 +18,5 @@
 #RootDistanceMaxSec=5
 #PollIntervalMinSec=32
 #PollIntervalMaxSec=2048
+#ConnectionRetrySec=30
+#SaveIntervalSec=60
diff --git a/src/timesync/wait-sync.c b/src/timesync/wait-sync.c
index 2a9b113..832e117 100644
--- a/src/timesync/wait-sync.c
+++ b/src/timesync/wait-sync.c
@@ -14,7 +14,7 @@
 #include "sd-event.h"
 
 #include "fd-util.h"
-#include "fs-util.h"
+#include "inotify-util.h"
 #include "main-func.h"
 #include "signal-util.h"
 #include "time-util.h"
@@ -80,17 +80,16 @@
         sd_event *event = sd_event_source_get_event(s);
         ClockState *sp = userdata;
         union inotify_event_buffer buffer;
-        struct inotify_event *e;
         ssize_t l;
 
         l = read(fd, &buffer, sizeof(buffer));
         if (l < 0) {
-                if (IN_SET(errno, EAGAIN, EINTR))
+                if (ERRNO_IS_TRANSIENT(errno))
                         return 0;
 
                 return log_warning_errno(errno, "Lost access to inotify: %m");
         }
-        FOREACH_INOTIFY_EVENT(e, buffer, l)
+        FOREACH_INOTIFY_EVENT_WARN(e, buffer, l)
                 process_inotify_event(event, sp, e);
 
         return 0;
@@ -100,9 +99,7 @@
                 ClockState *sp,
                 sd_event *event) {
 
-        char buf[MAX((size_t)FORMAT_TIMESTAMP_MAX, STRLEN("unrepresentable"))];
         struct timex tx = {};
-        const char * ts;
         usec_t t;
         int r;
 
@@ -149,10 +146,9 @@
         if (tx.status & STA_NANO)
                 tx.time.tv_usec /= 1000;
         t = timeval_load(&tx.time);
-        ts = format_timestamp_style(buf, sizeof(buf), t, TIMESTAMP_US_UTC);
-        if (!ts)
-                strcpy(buf, "unrepresentable");
-        log_info("adjtime state %d status %x time %s", sp->adjtime_state, tx.status, ts);
+
+        log_info("adjtime state %i status %x time %s", sp->adjtime_state, (unsigned) tx.status,
+                 FORMAT_TIMESTAMP_STYLE(t, TIMESTAMP_US_UTC) ?: "unrepresentable");
 
         sp->has_watchfile = access("/run/systemd/timesync/synchronized", F_OK) >= 0;
         if (sp->has_watchfile)
@@ -181,8 +177,8 @@
 static int run(int argc, char * argv[]) {
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         _cleanup_(clock_state_release) ClockState state = {
-                .timerfd_fd = -1,
-                .inotify_fd = -1,
+                .timerfd_fd = -EBADF,
+                .inotify_fd = -EBADF,
                 .run_systemd_wd = -1,
                 .run_systemd_timesync_wd = -1,
         };
diff --git a/src/tmpfiles/meson.build b/src/tmpfiles/meson.build
index c72b386..816faa9 100644
--- a/src/tmpfiles/meson.build
+++ b/src/tmpfiles/meson.build
@@ -3,10 +3,9 @@
 systemd_tmpfiles_sources = files(
         'tmpfiles.c',
         'offline-passwd.c',
-        'offline-passwd.h')
+)
 
 tests += [
-        [['src/tmpfiles/test-offline-passwd.c',
-          'src/tmpfiles/offline-passwd.c',
-          'src/tmpfiles/offline-passwd.h']],
+        [files('test-offline-passwd.c',
+               'offline-passwd.c')],
 ]
diff --git a/src/tmpfiles/offline-passwd.c b/src/tmpfiles/offline-passwd.c
index b607aac..fe866f8 100644
--- a/src/tmpfiles/offline-passwd.c
+++ b/src/tmpfiles/offline-passwd.c
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "chase-symlinks.h"
 #include "fd-util.h"
-#include "fs-util.h"
 #include "offline-passwd.h"
 #include "path-util.h"
 #include "user-util.h"
@@ -10,21 +10,27 @@
 
 static int open_passwd_file(const char *root, const char *fname, FILE **ret_file) {
         _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
+        _cleanup_fclose_ FILE *f = NULL;
 
         fd = chase_symlinks_and_open(fname, root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC, &p);
         if (fd < 0)
                 return fd;
 
-        FILE *f = fdopen(fd, "r");
+        f = fdopen(fd, "r");
         if (!f)
                 return -errno;
 
         TAKE_FD(fd);
 
-        log_debug("Reading %s entries from %s...", basename(fname), p);
+        if (DEBUG_LOGGING) {
+                _cleanup_free_ char *bn = NULL;
 
-        *ret_file = f;
+                (void) path_extract_filename(fname, &bn);
+                log_debug("Reading %s entries from %s...", strna(bn), p);
+        }
+
+        *ret_file = TAKE_PTR(f);
         return 0;
 }
 
@@ -39,7 +45,6 @@
         /* The directory list is hardcoded here: /etc is the standard, and rpm-ostree uses /usr/lib. This
          * could be made configurable, but I don't see the point right now. */
 
-        const char *fname;
         FOREACH_STRING(fname, "/etc/passwd", "/usr/lib/passwd") {
                 _cleanup_fclose_ FILE *f = NULL;
 
@@ -58,7 +63,7 @@
                                 return -ENOMEM;
 
                         r = hashmap_put(cache, n, UID_TO_PTR(pw->pw_uid));
-                        if (IN_SET(r, 0 -EEXIST))
+                        if (IN_SET(r, 0, -EEXIST))
                                 continue;
                         if (r < 0)
                                 return r;
@@ -78,7 +83,6 @@
         if (!cache)
                 return -ENOMEM;
 
-        const char *fname;
         FOREACH_STRING(fname, "/etc/group", "/usr/lib/group") {
                 _cleanup_fclose_ FILE *f = NULL;
 
diff --git a/src/tmpfiles/test-offline-passwd.c b/src/tmpfiles/test-offline-passwd.c
index 1a961d1..b70cef4 100644
--- a/src/tmpfiles/test-offline-passwd.c
+++ b/src/tmpfiles/test-offline-passwd.c
@@ -47,11 +47,11 @@
 
         int c;
 
-        assert(argc >= 0);
-        assert(argv);
+        assert_se(argc >= 0);
+        assert_se(argv);
 
         while ((c = getopt_long(argc, argv, "r:", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
                 case 'r':
                         arg_root = optarg;
                         break;
@@ -60,7 +60,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 0;
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index 7e85c50..f3dd3fa 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -20,20 +20,26 @@
 #include "acl-util.h"
 #include "alloc-util.h"
 #include "btrfs-util.h"
+#include "build.h"
 #include "capability-util.h"
+#include "chase-symlinks.h"
 #include "chattr-util.h"
 #include "conf-files.h"
+#include "constants.h"
 #include "copy.h"
-#include "def.h"
+#include "creds-util.h"
+#include "devnum-util.h"
 #include "dirent-util.h"
 #include "dissect-image.h"
 #include "env-util.h"
+#include "errno-util.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
 #include "fs-util.h"
 #include "glob-util.h"
+#include "hexdecoct.h"
 #include "io-util.h"
 #include "label.h"
 #include "log.h"
@@ -41,9 +47,10 @@
 #include "main-func.h"
 #include "missing_stat.h"
 #include "missing_syscall.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
+#include "nulstr-util.h"
 #include "offline-passwd.h"
 #include "pager.h"
 #include "parse-argument.h"
@@ -57,7 +64,6 @@
 #include "set.h"
 #include "sort-util.h"
 #include "specifier.h"
-#include "stat-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
 #include "string-util.h"
@@ -65,6 +71,7 @@
 #include "terminal-util.h"
 #include "umask-util.h"
 #include "user-util.h"
+#include "virt.h"
 
 /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates
  * them in the file system. This is intended to be used to create
@@ -126,6 +133,8 @@
 
         char *path;
         char *argument;
+        void *binary_argument;        /* set if binary data, in which case it takes precedence over 'argument' */
+        size_t binary_argument_size;
         char **xattrs;
 #if HAVE_ACL
         acl_t acl_access;
@@ -144,6 +153,9 @@
         bool uid_set:1;
         bool gid_set:1;
         bool mode_set:1;
+        bool uid_only_create:1;
+        bool gid_only_create:1;
+        bool mode_only_create:1;
         bool age_set:1;
         bool mask_perms:1;
         bool attribute_set:1;
@@ -175,6 +187,14 @@
         _DIRECTORY_TYPE_MAX,
 } DirectoryType;
 
+typedef enum {
+        CREATION_NORMAL,
+        CREATION_EXISTING,
+        CREATION_FORCE,
+        _CREATION_MODE_MAX,
+        _CREATION_MODE_INVALID = -EINVAL,
+} CreationMode;
+
 static bool arg_cat_config = false;
 static bool arg_user = false;
 static OperationMask arg_operation = 0;
@@ -194,51 +214,26 @@
 
 STATIC_DESTRUCTOR_REGISTER(items, ordered_hashmap_freep);
 STATIC_DESTRUCTOR_REGISTER(globs, ordered_hashmap_freep);
-STATIC_DESTRUCTOR_REGISTER(unix_sockets, set_free_freep);
+STATIC_DESTRUCTOR_REGISTER(unix_sockets, set_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_include_prefixes, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_exclude_prefixes, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
 
-static int specifier_machine_id_safe(char specifier, const void *data, const char *root, const void *userdata, char **ret);
-static int specifier_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret);
-
-static const Specifier specifier_table[] = {
-        { 'a', specifier_architecture,    NULL },
-        { 'b', specifier_boot_id,         NULL },
-        { 'B', specifier_os_build_id,     NULL },
-        { 'H', specifier_host_name,       NULL },
-        { 'l', specifier_short_host_name, NULL },
-        { 'm', specifier_machine_id_safe, NULL },
-        { 'o', specifier_os_id,           NULL },
-        { 'v', specifier_kernel_release,  NULL },
-        { 'w', specifier_os_version_id,   NULL },
-        { 'W', specifier_os_variant_id,   NULL },
-
-        { 'h', specifier_user_home,       NULL },
-
-        { 'C', specifier_directory,       UINT_TO_PTR(DIRECTORY_CACHE) },
-        { 'L', specifier_directory,       UINT_TO_PTR(DIRECTORY_LOGS) },
-        { 'S', specifier_directory,       UINT_TO_PTR(DIRECTORY_STATE) },
-        { 't', specifier_directory,       UINT_TO_PTR(DIRECTORY_RUNTIME) },
-
-        COMMON_CREDS_SPECIFIERS,
-
-        COMMON_TMP_SPECIFIERS,
-        {}
+static const char *const creation_mode_verb_table[_CREATION_MODE_MAX] = {
+        [CREATION_NORMAL]   = "Created",
+        [CREATION_EXISTING] = "Found existing",
+        [CREATION_FORCE]    = "Created replacement",
 };
 
-static int specifier_machine_id_safe(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
-        int r;
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(creation_mode_verb, CreationMode);
 
-        /* If /etc/machine_id is missing or empty (e.g. in a chroot environment) return a recognizable error
-         * so that the caller can skip the rule gracefully. */
-
-        r = specifier_machine_id(specifier, data, root, userdata, ret);
-        if (IN_SET(r, -ENOENT, -ENOMEDIUM))
-                return -ENXIO;
-
-        return r;
+/* Different kinds of errors that mean that information is not available in the environment. */
+static inline bool ERRNO_IS_NOINFO(int r) {
+        return IN_SET(abs(r),
+                      EUNATCH,    /* os-release or machine-id missing */
+                      ENOMEDIUM,  /* machine-id or another file empty */
+                      ENXIO);     /* env var is unset */
 }
 
 static int specifier_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
@@ -293,20 +288,28 @@
 static int log_unresolvable_specifier(const char *filename, unsigned line) {
         static bool notified = false;
 
-        /* In system mode, this is called when /etc is not fully initialized (e.g.
-         * in a chroot environment) where some specifiers are unresolvable. In user
-         * mode, this is called when some variables are not defined. These cases are
-         * not considered as an error so log at LOG_NOTICE only for the first time
-         * and then downgrade this to LOG_DEBUG for the rest. */
+        /* In system mode, this is called when /etc is not fully initialized and some specifiers are
+         * unresolvable. In user mode, this is called when some variables are not defined. These cases are
+         * not considered a fatal error, so log at LOG_NOTICE only for the first time and then downgrade this
+         * to LOG_DEBUG for the rest.
+         *
+         * If we're running in a chroot (--root was used or sd_booted() reports that systemd is not running),
+         * always use LOG_DEBUG. We may be called to initialize a chroot before booting and there is no
+         * expectation that machine-id and other files will be populated.
+         */
+
+        int log_level = notified || arg_root || running_in_chroot() > 0 ?
+                LOG_DEBUG : LOG_NOTICE;
 
         log_syntax(NULL,
-                   notified ? LOG_DEBUG : LOG_NOTICE,
+                   log_level,
                    filename, line, 0,
-                   "Failed to resolve specifier: %s, skipping",
-                   arg_user ? "Required $XDG_... variable not defined" : "uninitialized /etc detected");
+                   "Failed to resolve specifier: %s, skipping.",
+                   arg_user ? "Required $XDG_... variable not defined" : "uninitialized /etc/ detected");
 
         if (!notified)
-                log_notice("All rules containing unresolvable specifiers will be skipped.");
+                log_full(log_level,
+                         "All rules containing unresolvable specifiers will be skipped.");
 
         notified = true;
         return 0;
@@ -323,15 +326,15 @@
                 return r;
 
         r = xdg_user_config_dir(&persistent_config, "/user-tmpfiles.d");
-        if (r < 0 && r != -ENXIO)
+        if (r < 0 && !ERRNO_IS_NOINFO(r))
                 return r;
 
         r = xdg_user_runtime_dir(&runtime_config, "/user-tmpfiles.d");
-        if (r < 0 && r != -ENXIO)
+        if (r < 0 && !ERRNO_IS_NOINFO(r))
                 return r;
 
         r = xdg_user_data_dir(&data_home, "/user-tmpfiles.d");
-        if (r < 0 && r != -ENXIO)
+        if (r < 0 && !ERRNO_IS_NOINFO(r))
                 return r;
 
         r = strv_extend_strv_concat(&res, config_dirs, "/user-tmpfiles.d");
@@ -421,7 +424,7 @@
 }
 
 static int load_unix_sockets(void) {
-        _cleanup_set_free_free_ Set *sockets = NULL;
+        _cleanup_set_free_ Set *sockets = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         int r;
 
@@ -430,10 +433,6 @@
 
         /* We maintain a cache of the sockets we found in /proc/net/unix to speed things up a little. */
 
-        sockets = set_new(&path_hash_ops);
-        if (!sockets)
-                return log_oom();
-
         f = fopen("/proc/net/unix", "re");
         if (!f)
                 return log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
@@ -447,7 +446,7 @@
                 return log_warning_errno(SYNTHETIC_ERRNO(EIO), "Premature end of file reading /proc/net/unix.");
 
         for (;;) {
-                _cleanup_free_ char *line = NULL, *s = NULL;
+                _cleanup_free_ char *line = NULL;
                 char *p;
 
                 r = read_line(f, LONG_LINE_MAX, &line);
@@ -468,22 +467,12 @@
                 p += strcspn(p, WHITESPACE); /* skip one more word */
                 p += strspn(p, WHITESPACE);
 
-                if (*p != '/')
+                if (!path_is_absolute(p))
                         continue;
 
-                s = strdup(p);
-                if (!s)
-                        return log_oom();
-
-                path_simplify(s);
-
-                r = set_consume(sockets, s);
-                if (r == -EEXIST)
-                        continue;
+                r = set_put_strdup_full(&sockets, &path_hash_ops_free, p);
                 if (r < 0)
                         return log_warning_errno(r, "Failed to add AF_UNIX socket to set, ignoring: %m");
-
-                TAKE_PTR(s);
         }
 
         unix_sockets = TAKE_PTR(sockets);
@@ -496,7 +485,18 @@
         if (load_unix_sockets() < 0)
                 return true;     /* We don't know, so assume yes */
 
-        return !!set_get(unix_sockets, (char*) fn);
+        return set_contains(unix_sockets, fn);
+}
+
+/* Accessors for the argument in binary format */
+static const void* item_binary_argument(const Item *i) {
+        assert(i);
+        return i->binary_argument ?: i->argument;
+}
+
+static size_t item_binary_argument_size(const Item *i) {
+        assert(i);
+        return i->binary_argument ? i->binary_argument_size : strlen_ptr(i->argument);
 }
 
 static DIR* xopendirat_nomod(int dirfd, const char *path) {
@@ -544,22 +544,20 @@
                 bool is_dir) {
 
         if (FLAGS_SET(age_by, AGE_BY_MTIME) && mtime != NSEC_INFINITY && mtime >= cutoff) {
-                char a[FORMAT_TIMESTAMP_MAX];
                 /* Follows spelling in stat(1). */
                 log_debug("%s \"%s\": modify time %s is too new.",
                           is_dir ? "Directory" : "File",
                           sub_path,
-                          format_timestamp_style(a, sizeof(a), mtime / NSEC_PER_USEC, TIMESTAMP_US));
+                          FORMAT_TIMESTAMP_STYLE(mtime / NSEC_PER_USEC, TIMESTAMP_US));
 
                 return false;
         }
 
         if (FLAGS_SET(age_by, AGE_BY_ATIME) && atime != NSEC_INFINITY && atime >= cutoff) {
-                char a[FORMAT_TIMESTAMP_MAX];
                 log_debug("%s \"%s\": access time %s is too new.",
                           is_dir ? "Directory" : "File",
                           sub_path,
-                          format_timestamp_style(a, sizeof(a), atime / NSEC_PER_USEC, TIMESTAMP_US));
+                          FORMAT_TIMESTAMP_STYLE(atime / NSEC_PER_USEC, TIMESTAMP_US));
 
                 return false;
         }
@@ -569,21 +567,19 @@
          * by default for directories, because we change it when deleting.
          */
         if (FLAGS_SET(age_by, AGE_BY_CTIME) && ctime != NSEC_INFINITY && ctime >= cutoff) {
-                char a[FORMAT_TIMESTAMP_MAX];
                 log_debug("%s \"%s\": change time %s is too new.",
                           is_dir ? "Directory" : "File",
                           sub_path,
-                          format_timestamp_style(a, sizeof(a), ctime / NSEC_PER_USEC, TIMESTAMP_US));
+                          FORMAT_TIMESTAMP_STYLE(ctime / NSEC_PER_USEC, TIMESTAMP_US));
 
                 return false;
         }
 
         if (FLAGS_SET(age_by, AGE_BY_BTIME) && btime != NSEC_INFINITY && btime >= cutoff) {
-                char a[FORMAT_TIMESTAMP_MAX];
                 log_debug("%s \"%s\": birth time %s is too new.",
                           is_dir ? "Directory" : "File",
                           sub_path,
-                          format_timestamp_style(a, sizeof(a), btime / NSEC_PER_USEC, TIMESTAMP_US));
+                          FORMAT_TIMESTAMP_STYLE(btime / NSEC_PER_USEC, TIMESTAMP_US));
 
                 return false;
         }
@@ -607,14 +603,13 @@
                 AgeBy age_by_dir) {
 
         bool deleted = false;
-        struct dirent *dent;
         int r = 0;
 
-        FOREACH_DIRENT_ALL(dent, d, break) {
+        FOREACH_DIRENT_ALL(de, d, break) {
                 _cleanup_free_ char *sub_path = NULL;
                 nsec_t atime_nsec, mtime_nsec, ctime_nsec, btime_nsec;
 
-                if (dot_or_dot_dot(dent->d_name))
+                if (dot_or_dot_dot(de->d_name))
                         continue;
 
                 /* If statx() is supported, use it. It's preferable over fstatat() since it tells us
@@ -631,7 +626,7 @@
                 STRUCT_STATX_DEFINE(sx);
 
                 r = statx_fallback(
-                                dirfd(d), dent->d_name,
+                                dirfd(d), de->d_name,
                                 AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT,
                                 STATX_TYPE|STATX_MODE|STATX_UID|STATX_ATIME|STATX_MTIME|STATX_CTIME|STATX_BTIME,
                                 &sx);
@@ -639,15 +634,15 @@
                         continue;
                 if (r < 0) {
                         /* FUSE, NFS mounts, SELinux might return EACCES */
-                        r = log_full_errno(errno == EACCES ? LOG_DEBUG : LOG_ERR, errno,
-                                           "statx(%s/%s) failed: %m", p, dent->d_name);
+                        r = log_full_errno(r == -EACCES ? LOG_DEBUG : LOG_ERR, r,
+                                           "statx(%s/%s) failed: %m", p, de->d_name);
                         continue;
                 }
 
                 if (FLAGS_SET(sx.stx_attributes_mask, STATX_ATTR_MOUNT_ROOT)) {
                         /* Yay, we have the mount point API, use it */
                         if (FLAGS_SET(sx.stx_attributes, STATX_ATTR_MOUNT_ROOT)) {
-                                log_debug("Ignoring \"%s/%s\": different mount points.", p, dent->d_name);
+                                log_debug("Ignoring \"%s/%s\": different mount points.", p, de->d_name);
                                 continue;
                         }
                 } else {
@@ -655,7 +650,7 @@
                          * back to traditional stx_dev checking. */
                         if (sx.stx_dev_major != rootdev_major ||
                             sx.stx_dev_minor != rootdev_minor) {
-                                log_debug("Ignoring \"%s/%s\": different filesystem.", p, dent->d_name);
+                                log_debug("Ignoring \"%s/%s\": different filesystem.", p, de->d_name);
                                 continue;
                         }
 
@@ -665,11 +660,11 @@
                         if (S_ISDIR(sx.stx_mode)) {
                                 int q;
 
-                                q = fd_is_mount_point(dirfd(d), dent->d_name, 0);
+                                q = fd_is_mount_point(dirfd(d), de->d_name, 0);
                                 if (q < 0)
-                                        log_debug_errno(q, "Failed to determine whether \"%s/%s\" is a mount point, ignoring: %m", p, dent->d_name);
+                                        log_debug_errno(q, "Failed to determine whether \"%s/%s\" is a mount point, ignoring: %m", p, de->d_name);
                                 else if (q > 0) {
-                                        log_debug("Ignoring \"%s/%s\": different mount of the same filesystem.", p, dent->d_name);
+                                        log_debug("Ignoring \"%s/%s\": different mount of the same filesystem.", p, de->d_name);
                                         continue;
                                 }
                         }
@@ -680,7 +675,7 @@
                 ctime_nsec = FLAGS_SET(sx.stx_mask, STATX_CTIME) ? load_statx_timestamp_nsec(&sx.stx_ctime) : 0;
                 btime_nsec = FLAGS_SET(sx.stx_mask, STATX_BTIME) ? load_statx_timestamp_nsec(&sx.stx_btime) : 0;
 
-                sub_path = path_join(p, dent->d_name);
+                sub_path = path_join(p, de->d_name);
                 if (!sub_path) {
                         r = log_oom();
                         goto finish;
@@ -701,7 +696,7 @@
                         _cleanup_closedir_ DIR *sub_dir = NULL;
 
                         if (mountpoint &&
-                            streq(dent->d_name, "lost+found") &&
+                            streq(de->d_name, "lost+found") &&
                             sx.stx_uid == 0) {
                                 log_debug("Ignoring directory \"%s\".", sub_path);
                                 continue;
@@ -712,7 +707,7 @@
                         else {
                                 int q;
 
-                                sub_dir = xopendirat_nomod(dirfd(d), dent->d_name);
+                                sub_dir = xopendirat_nomod(dirfd(d), de->d_name);
                                 if (!sub_dir) {
                                         if (errno != ENOENT)
                                                 r = log_warning_errno(errno, "Opening directory \"%s\" failed, ignoring: %m", sub_path);
@@ -754,7 +749,7 @@
                                 continue;
 
                         log_debug("Removing directory \"%s\".", sub_path);
-                        if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0)
+                        if (unlinkat(dirfd(d), de->d_name, AT_REMOVEDIR) < 0)
                                 if (!IN_SET(errno, ENOENT, ENOTEMPTY))
                                         r = log_warning_errno(errno, "Failed to remove directory \"%s\", ignoring: %m", sub_path);
 
@@ -769,7 +764,7 @@
                         if (mountpoint &&
                             S_ISREG(sx.stx_mode) &&
                             sx.stx_uid == 0 &&
-                            STR_IN_SET(dent->d_name,
+                            STR_IN_SET(de->d_name,
                                        ".journal",
                                        "aquota.user",
                                        "aquota.group")) {
@@ -800,7 +795,7 @@
                                 continue;
 
                         log_debug("Removing \"%s\".", sub_path);
-                        if (unlinkat(dirfd(d), dent->d_name, 0) < 0)
+                        if (unlinkat(dirfd(d), de->d_name, 0) < 0)
                                 if (errno != ENOENT)
                                         r = log_warning_errno(errno, "Failed to remove \"%s\", ignoring: %m", sub_path);
 
@@ -810,13 +805,12 @@
 
 finish:
         if (deleted) {
-                char a[FORMAT_TIMESTAMP_MAX], m[FORMAT_TIMESTAMP_MAX];
                 struct timespec ts[2];
 
                 log_debug("Restoring access and modification time on \"%s\": %s, %s",
                           p,
-                          format_timestamp_style(a, sizeof(a), self_atime_nsec / NSEC_PER_USEC, TIMESTAMP_US),
-                          format_timestamp_style(m, sizeof(m), self_mtime_nsec / NSEC_PER_USEC, TIMESTAMP_US));
+                          FORMAT_TIMESTAMP_STYLE(self_atime_nsec / NSEC_PER_USEC, TIMESTAMP_US),
+                          FORMAT_TIMESTAMP_STYLE(self_mtime_nsec / NSEC_PER_USEC, TIMESTAMP_US));
 
                 timespec_store_nsec(ts + 0, self_atime_nsec);
                 timespec_store_nsec(ts + 1, self_mtime_nsec);
@@ -876,10 +870,18 @@
         return mode;
 }
 
-static int fd_set_perms(Item *i, int fd, const char *path, const struct stat *st) {
+static int fd_set_perms(
+                Item *i,
+                int fd,
+                const char *path,
+                const struct stat *st,
+                CreationMode creation) {
+
+        bool do_chown, do_chmod;
         struct stat stbuf;
         mode_t new_mode;
-        bool do_chown;
+        uid_t new_uid;
+        gid_t new_gid;
         int r;
 
         assert(i);
@@ -899,19 +901,20 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EPERM),
                                        "Refusing to set permissions on hardlinked file %s while the fs.protected_hardlinks sysctl is turned off.",
                                        path);
+        new_uid = i->uid_set && (creation != CREATION_EXISTING || !i->uid_only_create) ? i->uid : st->st_uid;
+        new_gid = i->gid_set && (creation != CREATION_EXISTING || !i->gid_only_create) ? i->gid : st->st_gid;
 
         /* Do we need a chown()? */
-        do_chown =
-                (i->uid_set && i->uid != st->st_uid) ||
-                (i->gid_set && i->gid != st->st_gid);
+        do_chown = (new_uid != st->st_uid) || (new_gid != st->st_gid);
 
         /* Calculate the mode to apply */
-        new_mode = i->mode_set ? (i->mask_perms ?
-                                  process_mask_perms(i->mode, st->st_mode) :
-                                  i->mode) :
-                                 (st->st_mode & 07777);
+        new_mode = i->mode_set && (creation != CREATION_EXISTING || !i->mode_only_create) ?
+                (i->mask_perms ? process_mask_perms(i->mode, st->st_mode) : i->mode) :
+                (st->st_mode & 07777);
 
-        if (i->mode_set && do_chown) {
+        do_chmod = ((new_mode ^ st->st_mode) & 07777) != 0;
+
+        if (do_chmod && do_chown) {
                 /* Before we issue the chmod() let's reduce the access mode to the common bits of the old and
                  * the new mode. That way there's no time window where the file exists under the old owner
                  * with more than the old access modes — and not under the new owner with more than the new
@@ -934,60 +937,62 @@
         }
 
         if (do_chown) {
-                log_debug("Changing \"%s\" to owner "UID_FMT":"GID_FMT,
-                          path,
-                          i->uid_set ? i->uid : UID_INVALID,
-                          i->gid_set ? i->gid : GID_INVALID);
+                log_debug("Changing \"%s\" to owner "UID_FMT":"GID_FMT, path, new_uid, new_gid);
 
-                if (fchownat(fd,
-                             "",
-                             i->uid_set ? i->uid : UID_INVALID,
-                             i->gid_set ? i->gid : GID_INVALID,
+                if (fchownat(fd, "",
+                             new_uid != st->st_uid ? new_uid : UID_INVALID,
+                             new_gid != st->st_gid ? new_gid : GID_INVALID,
                              AT_EMPTY_PATH) < 0)
                         return log_error_errno(errno, "fchownat() of %s failed: %m", path);
         }
 
         /* Now, apply the final mode. We do this in two cases: when the user set a mode explicitly, or after a
          * chown(), since chown()'s mangle the access mode in regards to sgid/suid in some conditions. */
-        if (i->mode_set || do_chown) {
+        if (do_chmod || do_chown) {
                 if (S_ISLNK(st->st_mode))
                         log_debug("Skipping mode fix for symlink %s.", path);
                 else {
-                       /* Check if the chmod() is unnecessary. Note that if we did a chown() before we always
-                        * chmod() here again, since it might have mangled the bits. */
-                        if (!do_chown && ((new_mode ^ st->st_mode) & 07777) == 0)
-                                log_debug("\"%s\" matches mode %o already.", path, new_mode);
-                        else {
-                                log_debug("Changing \"%s\" to mode %o.", path, new_mode);
-                                r = fchmod_opath(fd, new_mode);
-                                if (r < 0)
-                                        return log_error_errno(r, "fchmod() of %s failed: %m", path);
-                        }
+                        log_debug("Changing \"%s\" to mode %o.", path, new_mode);
+                        r = fchmod_opath(fd, new_mode);
+                        if (r < 0)
+                                return log_error_errno(r, "fchmod() of %s failed: %m", path);
                 }
         }
 
 shortcut:
-        return label_fix(path, 0);
+        return label_fix_full(fd, /* inode_path= */ NULL, /* label_path= */ path, 0);
 }
 
-static int path_open_parent_safe(const char *path) {
+static int path_open_parent_safe(const char *path, bool allow_failure) {
         _cleanup_free_ char *dn = NULL;
         int r, fd;
 
-        if (path_equal(path, "/") || !path_is_normalized(path))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Failed to open parent of '%s': invalid path.",
-                                       path);
+        if (!path_is_normalized(path))
+                return log_full_errno(allow_failure ? LOG_INFO : LOG_ERR,
+                                      SYNTHETIC_ERRNO(EINVAL),
+                                      "Failed to open parent of '%s': path not normalized%s.",
+                                      path,
+                                      allow_failure ? ", ignoring" : "");
 
-        dn = dirname_malloc(path);
-        if (!dn)
-                return log_oom();
+        r = path_extract_directory(path, &dn);
+        if (r < 0)
+                return log_full_errno(allow_failure ? LOG_INFO : LOG_ERR,
+                                      r,
+                                      "Unable to determine parent directory of '%s'%s: %m",
+                                      path,
+                                      allow_failure ? ", ignoring" : "");
 
-        r = chase_symlinks(dn, arg_root, CHASE_SAFE|CHASE_WARN, NULL, &fd);
-        if (r < 0 && r != -ENOLINK)
-                return log_error_errno(r, "Failed to validate path %s: %m", path);
+        r = chase_symlinks(dn, arg_root, allow_failure ? CHASE_SAFE : CHASE_SAFE|CHASE_WARN, NULL, &fd);
+        if (r == -ENOLINK) /* Unsafe symlink: already covered by CHASE_WARN */
+                return r;
+        if (r < 0)
+                return log_full_errno(allow_failure ? LOG_INFO : LOG_ERR,
+                                      r,
+                                      "Failed to open path '%s'%s: %m",
+                                      dn,
+                                      allow_failure ? ", ignoring" : "");
 
-        return r < 0 ? r : fd;
+        return fd;
 }
 
 static int path_open_safe(const char *path) {
@@ -1000,19 +1005,23 @@
         assert(path);
 
         if (!path_is_normalized(path))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Failed to open invalid path '%s'.",
-                                       path);
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to open invalid path '%s'.", path);
 
         r = chase_symlinks(path, arg_root, CHASE_SAFE|CHASE_WARN|CHASE_NOFOLLOW, NULL, &fd);
-        if (r < 0 && r != -ENOLINK)
-                return log_error_errno(r, "Failed to validate path %s: %m", path);
+        if (r == -ENOLINK)
+                return r; /* Unsafe symlink: already covered by CHASE_WARN */
+        if (r < 0)
+                return log_error_errno(r, "Failed to open path %s: %m", path);
 
-        return r < 0 ? r : fd;
+        return fd;
 }
 
-static int path_set_perms(Item *i, const char *path) {
-        _cleanup_close_ int fd = -1;
+static int path_set_perms(
+                Item *i,
+                const char *path,
+                CreationMode creation) {
+
+        _cleanup_close_ int fd = -EBADF;
 
         assert(i);
         assert(path);
@@ -1021,7 +1030,7 @@
         if (fd < 0)
                 return fd;
 
-        return fd_set_perms(i, fd, path, NULL);
+        return fd_set_perms(i, fd, path, /* st= */ NULL, creation);
 }
 
 static int parse_xattrs_from_arg(Item *i) {
@@ -1029,10 +1038,8 @@
         int r;
 
         assert(i);
-        assert(i->argument);
 
-        p = i->argument;
-
+        assert_se(p = i->argument);
         for (;;) {
                 _cleanup_free_ char *name = NULL, *value = NULL, *xattr = NULL;
 
@@ -1062,27 +1069,32 @@
         return 0;
 }
 
-static int fd_set_xattrs(Item *i, int fd, const char *path, const struct stat *st) {
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
-        char **name, **value;
+static int fd_set_xattrs(
+                Item *i,
+                int fd,
+                const char *path,
+                const struct stat *st,
+                CreationMode creation) {
 
         assert(i);
         assert(fd >= 0);
         assert(path);
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-
         STRV_FOREACH_PAIR(name, value, i->xattrs) {
                 log_debug("Setting extended attribute '%s=%s' on %s.", *name, *value, path);
-                if (setxattr(procfs_path, *name, *value, strlen(*value), 0) < 0)
+                if (setxattr(FORMAT_PROC_FD_PATH(fd), *name, *value, strlen(*value), 0) < 0)
                         return log_error_errno(errno, "Setting extended attribute %s=%s on %s failed: %m",
                                                *name, *value, path);
         }
         return 0;
 }
 
-static int path_set_xattrs(Item *i, const char *path) {
-        _cleanup_close_ int fd = -1;
+static int path_set_xattrs(
+                Item *i,
+                const char *path,
+                CreationMode creation) {
+
+        _cleanup_close_ int fd = -EBADF;
 
         assert(i);
         assert(path);
@@ -1091,7 +1103,7 @@
         if (fd < 0)
                 return fd;
 
-        return fd_set_xattrs(i, fd, path, NULL);
+        return fd_set_xattrs(i, fd, path, /* st = */ NULL, creation);
 }
 
 static int parse_acls_from_arg(Item *item) {
@@ -1114,7 +1126,13 @@
 }
 
 #if HAVE_ACL
-static int path_set_acl(const char *path, const char *pretty, acl_type_t type, acl_t acl, bool modify) {
+static int path_set_acl(
+                const char *path,
+                const char *pretty,
+                acl_type_t type,
+                acl_t acl,
+                bool modify) {
+
         _cleanup_(acl_free_charpp) char *t = NULL;
         _cleanup_(acl_freep) acl_t dup = NULL;
         int r;
@@ -1163,10 +1181,15 @@
 }
 #endif
 
-static int fd_set_acls(Item *item, int fd, const char *path, const struct stat *st) {
+static int fd_set_acls(
+                Item *item,
+                int fd,
+                const char *path,
+                const struct stat *st,
+                CreationMode creation) {
+
         int r = 0;
 #if HAVE_ACL
-        char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
         struct stat stbuf;
 
         assert(item);
@@ -1189,14 +1212,12 @@
                 return 0;
         }
 
-        xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-
         if (item->acl_access)
-                r = path_set_acl(procfs_path, path, ACL_TYPE_ACCESS, item->acl_access, item->append_or_force);
+                r = path_set_acl(FORMAT_PROC_FD_PATH(fd), path, ACL_TYPE_ACCESS, item->acl_access, item->append_or_force);
 
         /* set only default acls to folders */
         if (r == 0 && item->acl_default && S_ISDIR(st->st_mode))
-                r = path_set_acl(procfs_path, path, ACL_TYPE_DEFAULT, item->acl_default, item->append_or_force);
+                r = path_set_acl(FORMAT_PROC_FD_PATH(fd), path, ACL_TYPE_DEFAULT, item->acl_default, item->append_or_force);
 
         if (ERRNO_IS_NOT_SUPPORTED(r)) {
                 log_debug_errno(r, "ACLs not supported by file system at %s", path);
@@ -1216,10 +1237,10 @@
         return r;
 }
 
-static int path_set_acls(Item *item, const char *path) {
+static int path_set_acls(Item *item, const char *path, CreationMode creation) {
         int r = 0;
 #if HAVE_ACL
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         assert(item);
         assert(path);
@@ -1228,7 +1249,7 @@
         if (fd < 0)
                 return fd;
 
-        r = fd_set_acls(item, fd, path, NULL);
+        r = fd_set_acls(item, fd, path, /* st= */ NULL, creation);
 #endif
         return r;
 }
@@ -1317,8 +1338,14 @@
         return 0;
 }
 
-static int fd_set_attribute(Item *item, int fd, const char *path, const struct stat *st) {
-        _cleanup_close_ int procfs_fd = -1;
+static int fd_set_attribute(
+                Item *item,
+                int fd,
+                const char *path,
+                const struct stat *st,
+                CreationMode creation) {
+
+        _cleanup_close_ int procfs_fd = -EBADF;
         struct stat stbuf;
         unsigned f;
         int r;
@@ -1336,9 +1363,8 @@
                 st = &stbuf;
         }
 
-        /* Issuing the file attribute ioctls on device nodes is not
-         * safe, as that will be delivered to the drivers, not the
-         * file system containing the device node. */
+        /* Issuing the file attribute ioctls on device nodes is not safe, as that will be delivered to the
+         * drivers, not the file system containing the device node. */
         if (!S_ISREG(st->st_mode) && !S_ISDIR(st->st_mode))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Setting file flags is only supported on regular files and directories, cannot set on '%s'.",
@@ -1355,7 +1381,7 @@
                 return log_error_errno(procfs_fd, "Failed to re-open '%s': %m", path);
 
         unsigned previous, current;
-        r = chattr_full(NULL, procfs_fd, f, item->attribute_mask, &previous, &current, true);
+        r = chattr_full(NULL, procfs_fd, f, item->attribute_mask, &previous, &current, CHATTR_FALLBACK_BITWISE);
         if (r == -ENOANO)
                 log_warning("Cannot set file attributes for '%s', maybe due to incompatibility in specified attributes, "
                             "previous=0x%08x, current=0x%08x, expected=0x%08x, ignoring.",
@@ -1368,8 +1394,8 @@
         return 0;
 }
 
-static int path_set_attribute(Item *item, const char *path) {
-        _cleanup_close_ int fd = -1;
+static int path_set_attribute(Item *item, const char *path, CreationMode creation) {
+        _cleanup_close_ int fd = -EBADF;
 
         if (!item->attribute_set || item->attribute_mask == 0)
                 return 0;
@@ -1378,27 +1404,51 @@
         if (fd < 0)
                 return fd;
 
-        return fd_set_attribute(item, fd, path, NULL);
+        return fd_set_attribute(item, fd, path, /* st= */ NULL, creation);
 }
 
-static int write_one_file(Item *i, const char *path) {
-        _cleanup_close_ int fd = -1, dir_fd = -1;
-        char *bn;
+static int write_argument_data(Item *i, int fd, const char *path) {
+        int r;
+
+        assert(i);
+        assert(fd >= 0);
+        assert(path);
+
+        if (item_binary_argument_size(i) == 0)
+                return 0;
+
+        assert(item_binary_argument(i));
+
+        log_debug("Writing to \"%s\".", path);
+
+        r = loop_write(fd, item_binary_argument(i), item_binary_argument_size(i), /* do_poll= */ false);
+        if (r < 0)
+                return log_error_errno(r, "Failed to write file \"%s\": %m", path);
+
+        return 0;
+}
+
+static int write_one_file(Item *i, const char *path, CreationMode creation) {
+        _cleanup_close_ int fd = -EBADF, dir_fd = -EBADF;
+        _cleanup_free_ char *bn = NULL;
         int r;
 
         assert(i);
         assert(path);
-        assert(i->argument);
         assert(i->type == WRITE_FILE);
 
-        /* Validate the path and keep the fd on the directory for opening the
-         * file so we're sure that it can't be changed behind our back. */
-        dir_fd = path_open_parent_safe(path);
+        r = path_extract_filename(path, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", path);
+        if (r == O_DIRECTORY)
+                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for writing, is a directory.", path);
+
+        /* Validate the path and keep the fd on the directory for opening the file so we're sure that it
+         * can't be changed behind our back. */
+        dir_fd = path_open_parent_safe(path, i->allow_failure);
         if (dir_fd < 0)
                 return dir_fd;
 
-        bn = basename(path);
-
         /* Follows symlinks */
         fd = openat(dir_fd, bn,
                     O_NONBLOCK|O_CLOEXEC|O_WRONLY|O_NOCTTY|(i->append_or_force ? O_APPEND : 0),
@@ -1416,20 +1466,20 @@
         }
 
         /* 'w' is allowed to write into any kind of files. */
-        log_debug("Writing to \"%s\".", path);
 
-        r = loop_write(fd, i->argument, strlen(i->argument), false);
+        r = write_argument_data(i, fd, path);
         if (r < 0)
-                return log_error_errno(r, "Failed to write file \"%s\": %m", path);
+                return r;
 
-        return fd_set_perms(i, fd, path, NULL);
+        return fd_set_perms(i, fd, path, NULL, creation);
 }
 
 static int create_file(Item *i, const char *path) {
-        _cleanup_close_ int fd = -1, dir_fd = -1;
+        _cleanup_close_ int fd = -EBADF, dir_fd = -EBADF;
+        _cleanup_free_ char *bn = NULL;
         struct stat stbuf, *st = NULL;
+        CreationMode creation;
         int r = 0;
-        char *bn;
 
         assert(i);
         assert(path);
@@ -1437,32 +1487,33 @@
 
         /* 'f' operates on regular files exclusively. */
 
-        /* Validate the path and keep the fd on the directory for opening the
-         * file so we're sure that it can't be changed behind our back. */
-        dir_fd = path_open_parent_safe(path);
+        r = path_extract_filename(path, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", path);
+        if (r == O_DIRECTORY)
+                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for writing, is a directory.", path);
+
+        /* Validate the path and keep the fd on the directory for opening the file so we're sure that it
+         * can't be changed behind our back. */
+        dir_fd = path_open_parent_safe(path, i->allow_failure);
         if (dir_fd < 0)
                 return dir_fd;
 
-        bn = basename(path);
-
-        RUN_WITH_UMASK(0000) {
+        WITH_UMASK(0000) {
                 mac_selinux_create_file_prepare(path, S_IFREG);
-                fd = openat(dir_fd, bn, O_CREAT|O_EXCL|O_NOFOLLOW|O_NONBLOCK|O_CLOEXEC|O_WRONLY|O_NOCTTY, i->mode);
+                fd = RET_NERRNO(openat(dir_fd, bn, O_CREAT|O_EXCL|O_NOFOLLOW|O_NONBLOCK|O_CLOEXEC|O_WRONLY|O_NOCTTY, i->mode));
                 mac_selinux_create_file_clear();
         }
 
         if (fd < 0) {
-                /* Even on a read-only filesystem, open(2) returns EEXIST if the
-                 * file already exists. It returns EROFS only if it needs to
-                 * create the file. */
-                if (errno != EEXIST)
-                        return log_error_errno(errno, "Failed to create file %s: %m", path);
+                /* Even on a read-only filesystem, open(2) returns EEXIST if the file already exists. It
+                 * returns EROFS only if it needs to create the file. */
+                if (fd != -EEXIST)
+                        return log_error_errno(fd, "Failed to create file %s: %m", path);
 
-                /* Re-open the file. At that point it must exist since open(2)
-                 * failed with EEXIST. We still need to check if the perms/mode
-                 * need to be changed. For read-only filesystems, we let
-                 * fd_set_perms() report the error if the perms need to be
-                 * modified. */
+                /* Re-open the file. At that point it must exist since open(2) failed with EEXIST. We still
+                 * need to check if the perms/mode need to be changed. For read-only filesystems, we let
+                 * fd_set_perms() report the error if the perms need to be modified. */
                 fd = openat(dir_fd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH, i->mode);
                 if (fd < 0)
                         return log_error_errno(errno, "Failed to re-open file %s: %m", path);
@@ -1476,61 +1527,65 @@
                                                path);
 
                 st = &stbuf;
+                creation = CREATION_EXISTING;
         } else {
+                r = write_argument_data(i, fd, path);
+                if (r < 0)
+                        return r;
 
-                log_debug("\"%s\" has been created.", path);
-
-                if (i->argument) {
-                        log_debug("Writing to \"%s\".", path);
-
-                        r = loop_write(fd, i->argument, strlen(i->argument), false);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to write file \"%s\": %m", path);
-                }
+                creation = CREATION_NORMAL;
         }
 
-        return fd_set_perms(i, fd, path, st);
+        return fd_set_perms(i, fd, path, st, creation);
 }
 
 static int truncate_file(Item *i, const char *path) {
-        _cleanup_close_ int fd = -1, dir_fd = -1;
+        _cleanup_close_ int fd = -EBADF, dir_fd = -EBADF;
+        _cleanup_free_ char *bn = NULL;
         struct stat stbuf, *st = NULL;
+        CreationMode creation;
         bool erofs = false;
         int r = 0;
-        char *bn;
 
         assert(i);
         assert(path);
         assert(i->type == TRUNCATE_FILE || (i->type == CREATE_FILE && i->append_or_force));
 
-        /* We want to operate on regular file exclusively especially since
-         * O_TRUNC is unspecified if the file is neither a regular file nor a
-         * fifo nor a terminal device. Therefore we first open the file and make
-         * sure it's a regular one before truncating it. */
+        /* We want to operate on regular file exclusively especially since O_TRUNC is unspecified if the file
+         * is neither a regular file nor a fifo nor a terminal device. Therefore we first open the file and
+         * make sure it's a regular one before truncating it. */
 
-        /* Validate the path and keep the fd on the directory for opening the
-         * file so we're sure that it can't be changed behind our back. */
-        dir_fd = path_open_parent_safe(path);
+        r = path_extract_filename(path, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", path);
+        if (r == O_DIRECTORY)
+                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for truncation, is a directory.", path);
+
+        /* Validate the path and keep the fd on the directory for opening the file so we're sure that it
+         * can't be changed behind our back. */
+        dir_fd = path_open_parent_safe(path, i->allow_failure);
         if (dir_fd < 0)
                 return dir_fd;
 
-        bn = basename(path);
+        creation = CREATION_EXISTING;
+        fd = RET_NERRNO(openat(dir_fd, bn, O_NOFOLLOW|O_NONBLOCK|O_CLOEXEC|O_WRONLY|O_NOCTTY, i->mode));
+        if (fd == -ENOENT) {
+                creation = CREATION_NORMAL; /* Didn't work without O_CREATE, try again with */
 
-        RUN_WITH_UMASK(0000) {
-                mac_selinux_create_file_prepare(path, S_IFREG);
-                fd = openat(dir_fd, bn, O_CREAT|O_NOFOLLOW|O_NONBLOCK|O_CLOEXEC|O_WRONLY|O_NOCTTY, i->mode);
-                mac_selinux_create_file_clear();
+                WITH_UMASK(0000) {
+                        mac_selinux_create_file_prepare(path, S_IFREG);
+                        fd = RET_NERRNO(openat(dir_fd, bn, O_CREAT|O_NOFOLLOW|O_NONBLOCK|O_CLOEXEC|O_WRONLY|O_NOCTTY, i->mode));
+                        mac_selinux_create_file_clear();
+                }
         }
 
         if (fd < 0) {
-                if (errno != EROFS)
-                        return log_error_errno(errno, "Failed to open/create file %s: %m", path);
+                if (fd != -EROFS)
+                        return log_error_errno(fd, "Failed to open/create file %s: %m", path);
 
-                /* On a read-only filesystem, we don't want to fail if the
-                 * target is already empty and the perms are set. So we still
-                 * proceed with the sanity checks and let the remaining
-                 * operations fail with EROFS if they try to modify the target
-                 * file. */
+                /* On a read-only filesystem, we don't want to fail if the target is already empty and the
+                 * perms are set. So we still proceed with the sanity checks and let the remaining operations
+                 * fail with EROFS if they try to modify the target file. */
 
                 fd = openat(dir_fd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH, i->mode);
                 if (fd < 0) {
@@ -1543,6 +1598,7 @@
                 }
 
                 erofs = true;
+                creation = CREATION_EXISTING;
         }
 
         if (fstat(fd, &stbuf) < 0)
@@ -1563,32 +1619,30 @@
 
         log_debug("\"%s\" has been created.", path);
 
-        if (i->argument) {
-                log_debug("Writing to \"%s\".", path);
-
-                r = loop_write(fd, i->argument, strlen(i->argument), false);
-                if (r < 0) {
-                        r = erofs ? -EROFS : r;
-                        return log_error_errno(r, "Failed to write file %s: %m", path);
-                }
+        if (item_binary_argument(i)) {
+                r = write_argument_data(i, fd, path);
+                if (r < 0)
+                        return r;
         }
 
-        return fd_set_perms(i, fd, path, st);
+        return fd_set_perms(i, fd, path, st, creation);
 }
 
 static int copy_files(Item *i) {
-        _cleanup_close_ int dfd = -1, fd = -1;
-        char *bn;
+        _cleanup_close_ int dfd = -EBADF, fd = -EBADF;
+        _cleanup_free_ char *bn = NULL;
+        struct stat st, a;
         int r;
 
         log_debug("Copying tree \"%s\" to \"%s\".", i->argument, i->path);
 
-        bn = basename(i->path);
+        r = path_extract_filename(i->path, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", i->path);
 
-        /* Validate the path and use the returned directory fd for copying the
-         * target so we're sure that the path can't be changed behind our
-         * back. */
-        dfd = path_open_parent_safe(i->path);
+        /* Validate the path and use the returned directory fd for copying the target so we're sure that the
+         * path can't be changed behind our back. */
+        dfd = path_open_parent_safe(i->path, i->allow_failure);
         if (dfd < 0)
                 return dfd;
 
@@ -1596,65 +1650,52 @@
                          dfd, bn,
                          i->uid_set ? i->uid : UID_INVALID,
                          i->gid_set ? i->gid : GID_INVALID,
-                         COPY_REFLINK | COPY_MERGE_EMPTY | COPY_MAC_CREATE | COPY_HARDLINKS);
-        if (r < 0) {
-                struct stat a, b;
-
-                /* If the target already exists on read-only filesystems, trying
-                 * to create the target will not fail with EEXIST but with
-                 * EROFS. */
-                if (r == -EROFS && faccessat(dfd, bn, F_OK, AT_SYMLINK_NOFOLLOW) == 0)
-                        r = -EEXIST;
-
-                if (r != -EEXIST)
-                        return log_error_errno(r, "Failed to copy files to %s: %m", i->path);
-
-                if (stat(i->argument, &a) < 0)
-                        return log_error_errno(errno, "stat(%s) failed: %m", i->argument);
-
-                if (fstatat(dfd, bn, &b, AT_SYMLINK_NOFOLLOW) < 0)
-                        return log_error_errno(errno, "stat(%s) failed: %m", i->path);
-
-                if ((a.st_mode ^ b.st_mode) & S_IFMT) {
-                        log_debug("Can't copy to %s, file exists already and is of different type", i->path);
-                        return 0;
-                }
-        }
+                         COPY_REFLINK | COPY_MERGE_EMPTY | COPY_MAC_CREATE | COPY_HARDLINKS,
+                         NULL);
 
         fd = openat(dfd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH);
-        if (fd < 0)
-                return log_error_errno(errno, "Failed to openat(%s): %m", i->path);
+        if (fd < 0) {
+                if (r < 0) /* Look at original error first */
+                        return log_error_errno(r, "Failed to copy files to %s: %m", i->path);
 
-        return fd_set_perms(i, fd, i->path, NULL);
+                return log_error_errno(errno, "Failed to openat(%s): %m", i->path);
+        }
+
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to fstat(%s): %m", i->path);
+
+        if (stat(i->argument, &a) < 0)
+                return log_error_errno(errno, "Failed to stat(%s): %m", i->argument);
+
+        if (((st.st_mode ^ a.st_mode) & S_IFMT) != 0) {
+                log_debug("Can't copy to %s, file exists already and is of different type", i->path);
+                return 0;
+        }
+
+        return fd_set_perms(i, fd, i->path, &st, _CREATION_MODE_INVALID);
 }
 
-typedef enum {
-        CREATION_NORMAL,
-        CREATION_EXISTING,
-        CREATION_FORCE,
-        _CREATION_MODE_MAX,
-        _CREATION_MODE_INVALID = -EINVAL,
-} CreationMode;
+static int create_directory_or_subvolume(
+                const char *path,
+                mode_t mode,
+                bool subvol,
+                bool allow_failure,
+                struct stat *ret_st,
+                CreationMode *ret_creation) {
 
-static const char *const creation_mode_verb_table[_CREATION_MODE_MAX] = {
-        [CREATION_NORMAL] = "Created",
-        [CREATION_EXISTING] = "Found existing",
-        [CREATION_FORCE] = "Created replacement",
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(creation_mode_verb, CreationMode);
-
-static int create_directory_or_subvolume(const char *path, mode_t mode, bool subvol, CreationMode *creation) {
-        _cleanup_close_ int pfd = -1;
-        CreationMode c;
-        int r;
+        _cleanup_free_ char *bn = NULL;
+        _cleanup_close_ int pfd = -EBADF;
+        CreationMode creation;
+        struct stat st;
+        int r, fd;
 
         assert(path);
 
-        if (!creation)
-                creation = &c;
+        r = path_extract_filename(path, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", path);
 
-        pfd = path_open_parent_safe(path);
+        pfd = path_open_parent_safe(path, allow_failure);
         if (pfd < 0)
                 return pfd;
 
@@ -1665,81 +1706,87 @@
                                 log_warning_errno(r, "Cannot parse value of $SYSTEMD_TMPFILES_FORCE_SUBVOL, ignoring.");
                         r = btrfs_is_subvol(empty_to_root(arg_root)) > 0;
                 }
-                if (!r)
-                        /* Don't create a subvolume unless the root directory is
-                         * one, too. We do this under the assumption that if the
-                         * root directory is just a plain directory (i.e. very
-                         * light-weight), we shouldn't try to split it up into
-                         * subvolumes (i.e. more heavy-weight). Thus, chroot()
-                         * environments and suchlike will get a full brtfs
-                         * subvolume set up below their tree only if they
-                         * specifically set up a btrfs subvolume for the root
-                         * dir too. */
+                if (r == 0)
+                        /* Don't create a subvolume unless the root directory is one, too. We do this under
+                         * the assumption that if the root directory is just a plain directory (i.e. very
+                         * light-weight), we shouldn't try to split it up into subvolumes (i.e. more
+                         * heavy-weight). Thus, chroot() environments and suchlike will get a full brtfs
+                         * subvolume set up below their tree only if they specifically set up a btrfs
+                         * subvolume for the root dir too. */
 
                         subvol = false;
                 else {
-                        RUN_WITH_UMASK((~mode) & 0777)
-                                r = btrfs_subvol_make_fd(pfd, basename(path));
+                        WITH_UMASK((~mode) & 0777)
+                                r = btrfs_subvol_make_fd(pfd, bn);
                 }
         } else
                 r = 0;
 
-        if (!subvol || r == -ENOTTY)
-                RUN_WITH_UMASK(0000)
-                        r = mkdirat_label(pfd, basename(path), mode);
+        if (!subvol || ERRNO_IS_NOT_SUPPORTED(r))
+                WITH_UMASK(0000)
+                        r = mkdirat_label(pfd, bn, mode);
 
-        if (r < 0) {
-                int k;
+        creation = r >= 0 ? CREATION_NORMAL : CREATION_EXISTING;
 
-                if (!IN_SET(r, -EEXIST, -EROFS))
-                        return log_error_errno(r, "Failed to create directory or subvolume \"%s\": %m", path);
+        fd = openat(pfd, bn, O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY|O_PATH);
+        if (fd < 0) {
+                /* We couldn't open it because it is not actually a directory? */
+                if (errno == ENOTDIR)
+                        return log_error_errno(SYNTHETIC_ERRNO(EEXIST), "\"%s\" already exists and is not a directory.", path);
 
-                k = is_dir_fd(pfd);
-                if (k == -ENOENT && r == -EROFS)
-                        return log_error_errno(r, "%s does not exist and cannot be created as the file system is read-only.", path);
-                if (k < 0)
-                        return log_error_errno(k, "Failed to check if %s exists: %m", path);
-                if (!k)
-                        return log_warning_errno(SYNTHETIC_ERRNO(EEXIST),
-                                                 "\"%s\" already exists and is not a directory.", path);
+                /* Then look at the original error */
+                if (r < 0)
+                        return log_full_errno(allow_failure ? LOG_INFO : LOG_ERR,
+                                              r,
+                                              "Failed to create directory or subvolume \"%s\"%s: %m",
+                                              path,
+                                              allow_failure ? ", ignoring" : "");
 
-                *creation = CREATION_EXISTING;
-        } else
-                *creation = CREATION_NORMAL;
+                return log_error_errno(errno, "Failed to open directory/subvolume we just created '%s': %m", path);
+        }
 
-        log_debug("%s directory \"%s\".", creation_mode_verb_to_string(*creation), path);
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to fstat(%s): %m", path);
 
-        r = openat(pfd, basename(path), O_NOCTTY|O_CLOEXEC|O_DIRECTORY);
-        if (r < 0)
-                return log_error_errno(errno, "Failed to open directory '%s': %m", basename(path));
+        assert(S_ISDIR(st.st_mode)); /* we used O_DIRECTORY above */
 
-        return r;
+        log_debug("%s directory \"%s\".", creation_mode_verb_to_string(creation), path);
+
+        if (ret_st)
+                *ret_st = st;
+        if (ret_creation)
+                *ret_creation = creation;
+
+        return fd;
 }
 
 static int create_directory(Item *i, const char *path) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
+        CreationMode creation;
+        struct stat st;
 
         assert(i);
         assert(IN_SET(i->type, CREATE_DIRECTORY, TRUNCATE_DIRECTORY));
 
-        fd = create_directory_or_subvolume(path, i->mode, false, NULL);
+        fd = create_directory_or_subvolume(path, i->mode, /* subvol= */ false, i->allow_failure, &st, &creation);
         if (fd == -EEXIST)
                 return 0;
         if (fd < 0)
                 return fd;
 
-        return fd_set_perms(i, fd, path, NULL);
+        return fd_set_perms(i, fd, path, &st, creation);
 }
 
 static int create_subvolume(Item *i, const char *path) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         CreationMode creation;
+        struct stat st;
         int r, q = 0;
 
         assert(i);
         assert(IN_SET(i->type, CREATE_SUBVOLUME, CREATE_SUBVOLUME_NEW_QUOTA, CREATE_SUBVOLUME_INHERIT_QUOTA));
 
-        fd = create_directory_or_subvolume(path, i->mode, true, &creation);
+        fd = create_directory_or_subvolume(path, i->mode, /* subvol = */ true, i->allow_failure, &st, &creation);
         if (fd == -EEXIST)
                 return 0;
         if (fd < 0)
@@ -1762,170 +1809,332 @@
                         log_debug("Quota for subvolume \"%s\" already in place, no change made.", i->path);
         }
 
-        r = fd_set_perms(i, fd, path, NULL);
+        r = fd_set_perms(i, fd, path, &st, creation);
         if (q < 0) /* prefer the quota change error from above */
                 return q;
 
         return r;
 }
 
-static int empty_directory(Item *i, const char *path) {
+static int empty_directory(Item *i, const char *path, CreationMode creation) {
+        _cleanup_close_ int fd = -EBADF;
+        struct stat st;
         int r;
 
         assert(i);
         assert(i->type == EMPTY_DIRECTORY);
 
-        r = is_dir(path, false);
+        r = chase_symlinks(path, arg_root, CHASE_SAFE|CHASE_WARN, NULL, &fd);
+        if (r == -ENOLINK) /* Unsafe symlink: already covered by CHASE_WARN */
+                return r;
         if (r == -ENOENT) {
-                /* Option "e" operates only on existing objects. Do not
-                 * print errors about non-existent files or directories */
-                log_debug("Skipping missing directory: %s", path);
+                /* Option "e" operates only on existing objects. Do not print errors about non-existent files
+                 * or directories */
+                log_debug_errno(r, "Skipping missing directory: %s", path);
                 return 0;
         }
         if (r < 0)
-                return log_error_errno(r, "is_dir() failed on path %s: %m", path);
-        if (r == 0) {
-                log_warning("\"%s\" already exists and is not a directory.", path);
+                return log_error_errno(r, "Failed to open directory '%s': %m", path);
+
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to fstat(%s): %m", path);
+        if (!S_ISDIR(st.st_mode)) {
+                log_warning("'%s' already exists and is not a directory.", path);
                 return 0;
         }
 
-        return path_set_perms(i, path);
+        return fd_set_perms(i, fd, path, &st, creation);
 }
 
 static int create_device(Item *i, mode_t file_type) {
-        _cleanup_close_ int dfd = -1, fd = -1;
+        _cleanup_close_ int dfd = -EBADF, fd = -EBADF;
+        _cleanup_free_ char *bn = NULL;
         CreationMode creation;
-        char *bn;
+        struct stat st;
         int r;
 
         assert(i);
+        assert(IN_SET(i->type, CREATE_BLOCK_DEVICE, CREATE_CHAR_DEVICE));
         assert(IN_SET(file_type, S_IFBLK, S_IFCHR));
 
-        bn = basename(i->path);
+        r = path_extract_filename(i->path, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", i->path);
+        if (r == O_DIRECTORY)
+                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for creating device node, is a directory.", i->path);
 
-        /* Validate the path and use the returned directory fd for copying the
-         * target so we're sure that the path can't be changed behind our
-         * back. */
-        dfd = path_open_parent_safe(i->path);
+        /* Validate the path and use the returned directory fd for copying the target so we're sure that the
+         * path can't be changed behind our back. */
+        dfd = path_open_parent_safe(i->path, i->allow_failure);
         if (dfd < 0)
                 return dfd;
 
-        RUN_WITH_UMASK(0000) {
+        WITH_UMASK(0000) {
                 mac_selinux_create_file_prepare(i->path, file_type);
-                r = mknodat(dfd, bn, i->mode | file_type, i->major_minor);
+                r = RET_NERRNO(mknodat(dfd, bn, i->mode | file_type, i->major_minor));
                 mac_selinux_create_file_clear();
         }
+        creation = r >= 0 ? CREATION_NORMAL : CREATION_EXISTING;
 
-        if (r < 0) {
-                struct stat st;
+        /* Try to open the inode via O_PATH, regardless if we could create it or not. Maybe everything is in
+         * order anyway and we hence can ignore the error to create the device node */
+        fd = openat(dfd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH);
+        if (fd < 0) {
+                /* OK, so opening the inode failed, let's look at the original error then. */
 
-                if (errno == EPERM) {
-                        log_debug("We lack permissions, possibly because of cgroup configuration; "
-                                  "skipping creation of device node %s.", i->path);
-                        return 0;
+                if (r < 0) {
+                        if (ERRNO_IS_PRIVILEGE(r))
+                                goto handle_privilege;
+
+                        return log_error_errno(r, "Failed to create device node '%s': %m", i->path);
                 }
 
-                if (errno != EEXIST)
-                        return log_error_errno(errno, "Failed to create device node %s: %m", i->path);
+                return log_error_errno(errno, "Failed to open device node '%s' we just created: %m", i->path);
+        }
 
-                if (fstatat(dfd, bn, &st, 0) < 0)
-                        return log_error_errno(errno, "stat(%s) failed: %m", i->path);
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to fstat(%s): %m", i->path);
 
-                if ((st.st_mode & S_IFMT) != file_type) {
+        if (((st.st_mode ^ file_type) & S_IFMT) != 0) {
 
-                        if (i->append_or_force) {
+                if (i->append_or_force) {
+                        fd = safe_close(fd);
 
-                                RUN_WITH_UMASK(0000) {
-                                        mac_selinux_create_file_prepare(i->path, file_type);
-                                        /* FIXME: need to introduce mknodat_atomic() */
-                                        r = mknod_atomic(i->path, i->mode | file_type, i->major_minor);
-                                        mac_selinux_create_file_clear();
-                                }
-
-                                if (r < 0)
-                                        return log_error_errno(r, "Failed to create device node \"%s\": %m", i->path);
-                                creation = CREATION_FORCE;
-                        } else {
-                                log_warning("\"%s\" already exists is not a device node.", i->path);
-                                return 0;
+                        WITH_UMASK(0000) {
+                                mac_selinux_create_file_prepare(i->path, file_type);
+                                r = mknodat_atomic(dfd, bn, i->mode | file_type, i->major_minor);
+                                mac_selinux_create_file_clear();
                         }
-                } else
-                        creation = CREATION_EXISTING;
-        } else
-                creation = CREATION_NORMAL;
+                        if (ERRNO_IS_PRIVILEGE(r))
+                                goto handle_privilege;
+                        if (IN_SET(r, -EISDIR, -EEXIST, -ENOTEMPTY)) {
+                                r = rm_rf_child(dfd, bn, REMOVE_PHYSICAL);
+                                if (r < 0)
+                                        return log_error_errno(r, "rm -rf %s failed: %m", i->path);
+
+                                mac_selinux_create_file_prepare(i->path, file_type);
+                                r = RET_NERRNO(mknodat(dfd, bn, i->mode | file_type, i->major_minor));
+                                mac_selinux_create_file_clear();
+                        }
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to create device node '%s': %m", i->path);
+
+                        fd = openat(dfd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH);
+                        if (fd < 0)
+                                return log_error_errno(errno, "Failed to open device node we just created '%s': %m", i->path);
+
+                        /* Validate type before change ownership below */
+                        if (fstat(fd, &st) < 0)
+                                return log_error_errno(errno, "Failed to fstat(%s): %m", i->path);
+
+                        if (((st.st_mode ^ file_type) & S_IFMT) != 0)
+                                return log_error_errno(SYNTHETIC_ERRNO(EBADF), "Device node we just created is not a device node, refusing.");
+
+                        creation = CREATION_FORCE;
+                } else {
+                        log_warning("\"%s\" already exists and is not a device node.", i->path);
+                        return 0;
+                }
+        }
 
         log_debug("%s %s device node \"%s\" %u:%u.",
                   creation_mode_verb_to_string(creation),
                   i->type == CREATE_BLOCK_DEVICE ? "block" : "char",
                   i->path, major(i->mode), minor(i->mode));
 
-        fd = openat(dfd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH);
-        if (fd < 0)
-                return log_error_errno(errno, "Failed to openat(%s): %m", i->path);
+        return fd_set_perms(i, fd, i->path, &st, creation);
 
-        return fd_set_perms(i, fd, i->path, NULL);
+handle_privilege:
+        log_debug_errno(r,
+                        "We lack permissions, possibly because of cgroup configuration; "
+                        "skipping creation of device node '%s'.", i->path);
+        return 0;
 }
 
-static int create_fifo(Item *i, const char *path) {
-        _cleanup_close_ int pfd = -1, fd = -1;
+static int create_fifo(Item *i) {
+        _cleanup_close_ int pfd = -EBADF, fd = -EBADF;
+        _cleanup_free_ char *bn = NULL;
         CreationMode creation;
         struct stat st;
-        char *bn;
         int r;
 
-        pfd = path_open_parent_safe(path);
+        assert(i);
+        assert(i->type == CREATE_FIFO);
+
+        r = path_extract_filename(i->path, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", i->path);
+        if (r == O_DIRECTORY)
+                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for creating FIFO, is a directory.", i->path);
+
+        pfd = path_open_parent_safe(i->path, i->allow_failure);
         if (pfd < 0)
                 return pfd;
 
-        bn = basename(path);
-
-        RUN_WITH_UMASK(0000) {
-                mac_selinux_create_file_prepare(path, S_IFIFO);
-                r = mkfifoat(pfd, bn, i->mode);
+        WITH_UMASK(0000) {
+                mac_selinux_create_file_prepare(i->path, S_IFIFO);
+                r = RET_NERRNO(mkfifoat(pfd, bn, i->mode));
                 mac_selinux_create_file_clear();
         }
 
-        if (r < 0) {
-                if (errno != EEXIST)
-                        return log_error_errno(errno, "Failed to create fifo %s: %m", path);
+        creation = r >= 0 ? CREATION_NORMAL : CREATION_EXISTING;
 
-                if (fstatat(pfd, bn, &st, AT_SYMLINK_NOFOLLOW) < 0)
-                        return log_error_errno(errno, "stat(%s) failed: %m", path);
-
-                if (!S_ISFIFO(st.st_mode)) {
-
-                        if (i->append_or_force) {
-                                RUN_WITH_UMASK(0000) {
-                                        mac_selinux_create_file_prepare(path, S_IFIFO);
-                                        r = mkfifoat_atomic(pfd, bn, i->mode);
-                                        mac_selinux_create_file_clear();
-                                }
-
-                                if (r < 0)
-                                        return log_error_errno(r, "Failed to create fifo %s: %m", path);
-                                creation = CREATION_FORCE;
-                        } else {
-                                log_warning("\"%s\" already exists and is not a fifo.", path);
-                                return 0;
-                        }
-                } else
-                        creation = CREATION_EXISTING;
-        } else
-                creation = CREATION_NORMAL;
-
-        log_debug("%s fifo \"%s\".", creation_mode_verb_to_string(creation), path);
-
+        /* Open the inode via O_PATH, regardless if we managed to create it or not. Maybe it is already the FIFO we want */
         fd = openat(pfd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH);
-        if (fd < 0)
-                return log_error_errno(errno, "Failed to openat(%s): %m", path);
+        if (fd < 0) {
+                if (r < 0)
+                        return log_error_errno(r, "Failed to create FIFO %s: %m", i->path); /* original error! */
 
-        return fd_set_perms(i, fd, i->path, NULL);
+                return log_error_errno(errno, "Failed to open FIFO we just created %s: %m", i->path);
+        }
+
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to fstat(%s): %m", i->path);
+
+        if (!S_ISFIFO(st.st_mode)) {
+
+                if (i->append_or_force) {
+                        fd = safe_close(fd);
+
+                        WITH_UMASK(0000) {
+                                mac_selinux_create_file_prepare(i->path, S_IFIFO);
+                                r = mkfifoat_atomic(pfd, bn, i->mode);
+                                mac_selinux_create_file_clear();
+                        }
+                        if (IN_SET(r, -EISDIR, -EEXIST, -ENOTEMPTY)) {
+                                r = rm_rf_child(pfd, bn, REMOVE_PHYSICAL);
+                                if (r < 0)
+                                        return log_error_errno(r, "rm -rf %s failed: %m", i->path);
+
+                                mac_selinux_create_file_prepare(i->path, S_IFIFO);
+                                r = RET_NERRNO(mkfifoat(pfd, bn, i->mode));
+                                mac_selinux_create_file_clear();
+                        }
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to create FIFO %s: %m", i->path);
+
+                        fd = openat(pfd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH);
+                        if (fd < 0)
+                                return log_error_errno(errno, "Failed to open FIFO we just created '%s': %m", i->path);
+
+                        /* Validate type before change ownership below */
+                        if (fstat(fd, &st) < 0)
+                                return log_error_errno(errno, "Failed to fstat(%s): %m", i->path);
+
+                        if (!S_ISFIFO(st.st_mode))
+                                return log_error_errno(SYNTHETIC_ERRNO(EBADF), "FIFO inode we just created is not a FIFO, refusing.");
+
+                        creation = CREATION_FORCE;
+                } else {
+                        log_warning("\"%s\" already exists and is not a FIFO.", i->path);
+                        return 0;
+                }
+        }
+
+        log_debug("%s fifo \"%s\".", creation_mode_verb_to_string(creation), i->path);
+
+        return fd_set_perms(i, fd, i->path, &st, creation);
 }
 
-typedef int (*action_t)(Item *i, const char *path);
-typedef int (*fdaction_t)(Item *i, int fd, const char *path, const struct stat *st);
+static int create_symlink(Item *i) {
+        _cleanup_close_ int pfd = -EBADF, fd = -EBADF;
+        _cleanup_free_ char *bn = NULL;
+        CreationMode creation;
+        struct stat st;
+        bool good = false;
+        int r;
 
-static int item_do(Item *i, int fd, const char *path, fdaction_t action) {
+        assert(i);
+
+        r = path_extract_filename(i->path, &bn);
+        if (r < 0)
+                return log_error_errno(r, "Failed to extract filename from path '%s': %m", i->path);
+        if (r == O_DIRECTORY)
+                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for creating FIFO, is a directory.", i->path);
+
+        pfd = path_open_parent_safe(i->path, i->allow_failure);
+        if (pfd < 0)
+                return pfd;
+
+        mac_selinux_create_file_prepare(i->path, S_IFLNK);
+        r = RET_NERRNO(symlinkat(i->argument, pfd, bn));
+        mac_selinux_create_file_clear();
+
+        creation = r >= 0 ? CREATION_NORMAL : CREATION_EXISTING;
+
+        fd = openat(pfd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH);
+        if (fd < 0) {
+                if (r < 0)
+                        return log_error_errno(r, "Failed to create symlink '%s': %m", i->path); /* original error! */
+
+                return log_error_errno(errno, "Failed to open symlink we just created '%s': %m", i->path);
+        }
+
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to fstat(%s): %m", i->path);
+
+        if (S_ISLNK(st.st_mode)) {
+                _cleanup_free_ char *x = NULL;
+
+                r = readlinkat_malloc(fd, "", &x);
+                if (r < 0)
+                        return log_error_errno(r, "readlinkat(%s) failed: %m", i->path);
+
+                good = streq(x, i->argument);
+        } else
+                good = false;
+
+        if (!good) {
+                if (!i->append_or_force) {
+                        log_debug("\"%s\" is not a symlink or does not point to the correct path.", i->path);
+                        return 0;
+                }
+
+                fd = safe_close(fd);
+
+                mac_selinux_create_file_prepare(i->path, S_IFLNK);
+                r = symlinkat_atomic_full(i->argument, pfd, bn, /* make_relative= */ false);
+                mac_selinux_create_file_clear();
+                if (IN_SET(r, -EISDIR, -EEXIST, -ENOTEMPTY)) {
+                        r = rm_rf_child(pfd, bn, REMOVE_PHYSICAL);
+                        if (r < 0)
+                                return log_error_errno(r, "rm -rf %s failed: %m", i->path);
+
+                        mac_selinux_create_file_prepare(i->path, S_IFLNK);
+                        r = RET_NERRNO(symlinkat(i->argument, pfd, i->path));
+                        mac_selinux_create_file_clear();
+                }
+                if (r < 0)
+                        return log_error_errno(r, "symlink(%s, %s) failed: %m", i->argument, i->path);
+
+                fd = openat(pfd, bn, O_NOFOLLOW|O_CLOEXEC|O_PATH);
+                if (fd < 0)
+                        return log_error_errno(errno, "Failed to open symlink we just created '%s': %m", i->path);
+
+                /* Validate type before change ownership below */
+                if (fstat(fd, &st) < 0)
+                        return log_error_errno(errno, "Failed to fstat(%s): %m", i->path);
+
+                if (!S_ISLNK(st.st_mode))
+                        return log_error_errno(SYNTHETIC_ERRNO(EBADF), "Symlink we just created is not a symlink, refusing.");
+
+                creation = CREATION_FORCE;
+        }
+
+        log_debug("%s symlink \"%s\".", creation_mode_verb_to_string(creation), i->path);
+        return fd_set_perms(i, fd, i->path, &st, creation);
+}
+
+typedef int (*action_t)(Item *i, const char *path, CreationMode creation);
+typedef int (*fdaction_t)(Item *i, int fd, const char *path, const struct stat *st, CreationMode creation);
+
+static int item_do(
+                Item *i,
+                int fd,
+                const char *path,
+                CreationMode creation,
+                fdaction_t action) {
+
         struct stat st;
         int r = 0, q;
 
@@ -1938,22 +2147,17 @@
                 goto finish;
         }
 
-        /* This returns the first error we run into, but nevertheless
-         * tries to go on */
-        r = action(i, fd, path, &st);
+        /* This returns the first error we run into, but nevertheless tries to go on */
+        r = action(i, fd, path, &st, creation);
 
         if (S_ISDIR(st.st_mode)) {
-                char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
                 _cleanup_closedir_ DIR *d = NULL;
-                struct dirent *de;
 
-                /* The passed 'fd' was opened with O_PATH. We need to convert
-                 * it into a 'regular' fd before reading the directory content. */
-                xsprintf(procfs_path, "/proc/self/fd/%i", fd);
-
-                d = opendir(procfs_path);
+                /* The passed 'fd' was opened with O_PATH. We need to convert it into a 'regular' fd before
+                 * reading the directory content. */
+                d = opendir(FORMAT_PROC_FD_PATH(fd));
                 if (!d) {
-                        log_error_errno(errno, "Failed to opendir() '%s': %m", procfs_path);
+                        log_error_errno(errno, "Failed to opendir() '%s': %m", FORMAT_PROC_FD_PATH(fd));
                         if (r == 0)
                                 r = -errno;
                         goto finish;
@@ -1976,7 +2180,7 @@
                                         q = log_oom();
                                 else
                                         /* Pass ownership of dirent fd over */
-                                        q = item_do(i, de_fd, de_path, action);
+                                        q = item_do(i, de_fd, de_path, CREATION_EXISTING, action);
                         }
 
                         if (q < 0 && r == 0)
@@ -1993,14 +2197,14 @@
                 .gl_opendir = (void *(*)(const char *)) opendir_nomod,
         };
         int r = 0, k;
-        char **fn;
 
         k = safe_glob(i->path, GLOB_NOSORT|GLOB_BRACE, &g);
         if (k < 0 && k != -ENOENT)
                 return log_error_errno(k, "glob(%s) failed: %m", i->path);
 
         STRV_FOREACH(fn, g.gl_pathv) {
-                k = action(i, *fn);
+                /* We pass CREATION_EXISTING here, since if we are globbing for it, it always has to exist */
+                k = action(i, *fn, CREATION_EXISTING);
                 if (k < 0 && r == 0)
                         r = k;
         }
@@ -2013,14 +2217,13 @@
                 .gl_opendir = (void *(*)(const char *)) opendir_nomod,
         };
         int r = 0, k;
-        char **fn;
 
         k = safe_glob(i->path, GLOB_NOSORT|GLOB_BRACE, &g);
         if (k < 0 && k != -ENOENT)
                 return log_error_errno(k, "glob(%s) failed: %m", i->path);
 
         STRV_FOREACH(fn, g.gl_pathv) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 /* Make sure we won't trigger/follow file object (such as
                  * device nodes, automounts, ...) pointed out by 'fn' with
@@ -2035,12 +2238,12 @@
                         continue;
                 }
 
-                k = item_do(i, fd, *fn, action);
+                k = item_do(i, fd, *fn, CREATION_EXISTING, action);
                 if (k < 0 && r == 0)
                         r = k;
 
                 /* we passed fd ownership to the previous call */
-                fd = -1;
+                fd = -EBADF;
         }
 
         return r;
@@ -2083,7 +2286,7 @@
                 return 0;
 
         (void) fd_get_path(parent_fd, &parent_name);
-        log_notice("Wrong file type 0x%x; rm -rf \"%s/%s\"", st.st_mode & S_IFMT, strna(parent_name), name);
+        log_notice("Wrong file type 0o%o; rm -rf \"%s/%s\"", st.st_mode & S_IFMT, strna(parent_name), name);
 
         /* If the target of the symlink was the wrong type, the link needs to be removed instead of the
          * target, so make sure it is identified as a link and not a directory. */
@@ -2103,7 +2306,7 @@
                                 "Not removing  \"%s/%s\" because it is a mount point.", strna(parent_name), name);
 
         if ((st.st_mode & S_IFMT) == S_IFDIR) {
-                _cleanup_close_ int child_fd = -1;
+                _cleanup_close_ int child_fd = -EBADF;
 
                 child_fd = openat(parent_fd, name, O_NOCTTY | O_CLOEXEC | O_DIRECTORY);
                 if (child_fd < 0)
@@ -2126,7 +2329,7 @@
 
 /* If child_mode is non-zero, rm_if_wrong_type_safe will be executed for the last path component. */
 static int mkdir_parents_rm_if_wrong_type(mode_t child_mode, const char *path) {
-        _cleanup_close_ int parent_fd = -1;
+        _cleanup_close_ int parent_fd = -EBADF;
         struct stat parent_st;
         size_t path_len;
         int r;
@@ -2154,7 +2357,7 @@
 
         /* Check every parent directory in the path, except the last component */
         for (const char *e = path;;) {
-                _cleanup_close_ int next_fd = -1;
+                _cleanup_close_ int next_fd = -EBADF;
                 char t[path_len + 1];
                 const char *s;
 
@@ -2175,7 +2378,7 @@
                 if (r == -ENOENT)
                         r = rm_if_wrong_type_safe(S_IFDIR, parent_fd, &parent_st, t, AT_SYMLINK_NOFOLLOW);
                 if (r == -ENOENT) {
-                        RUN_WITH_UMASK(0000)
+                        WITH_UMASK(0000)
                                 r = mkdirat_label(parent_fd, t, 0755);
                         if (r < 0) {
                                 _cleanup_free_ char *parent_name = NULL;
@@ -2187,23 +2390,22 @@
                         /* rm_if_wrong_type_safe already logs errors. */
                         return r;
 
-                next_fd = openat(parent_fd, t, O_NOCTTY | O_CLOEXEC | O_DIRECTORY);
+                next_fd = RET_NERRNO(openat(parent_fd, t, O_NOCTTY | O_CLOEXEC | O_DIRECTORY));
                 if (next_fd < 0) {
                         _cleanup_free_ char *parent_name = NULL;
 
-                        r = -errno;
                         (void) fd_get_path(parent_fd, &parent_name);
-                        return log_error_errno(r, "Failed to open \"%s\" at \"%s\": %m", t, strnull(parent_name));
+                        return log_error_errno(next_fd, "Failed to open \"%s\" at \"%s\": %m", t, strnull(parent_name));
                 }
-                if (fstat(next_fd, &parent_st) < 0) {
+                r = RET_NERRNO(fstat(next_fd, &parent_st));
+                if (r < 0) {
                         _cleanup_free_ char *parent_name = NULL;
 
-                        r = -errno;
                         (void) fd_get_path(parent_fd, &parent_name);
                         return log_error_errno(r, "Failed to stat \"%s\" at \"%s\": %m", t, strnull(parent_name));
                 }
 
-                CLOSE_AND_REPLACE(parent_fd, next_fd);
+                close_and_replace(parent_fd, next_fd);
         }
 }
 
@@ -2214,15 +2416,14 @@
                 if (r < 0 && r != -ENOENT)
                         return r;
         } else
-                RUN_WITH_UMASK(0000)
+                WITH_UMASK(0000)
                         (void) mkdir_parents_label(i->path, 0755);
 
         return 0;
 }
 
 static int create_item(Item *i) {
-        CreationMode creation;
-        int r = 0;
+        int r;
 
         assert(i);
 
@@ -2246,7 +2447,6 @@
                         r = truncate_file(i, i->path);
                 else
                         r = create_file(i, i->path);
-
                 if (r < 0)
                         return r;
                 break;
@@ -2302,63 +2502,25 @@
                 if (r < 0)
                         return r;
 
-                r = create_fifo(i, i->path);
+                r = create_fifo(i);
                 if (r < 0)
                         return r;
                 break;
 
-        case CREATE_SYMLINK: {
+        case CREATE_SYMLINK:
                 r = mkdir_parents_item(i, S_IFLNK);
                 if (r < 0)
                         return r;
 
-                mac_selinux_create_file_prepare(i->path, S_IFLNK);
-                r = symlink(i->argument, i->path);
-                mac_selinux_create_file_clear();
+                r = create_symlink(i);
+                if (r < 0)
+                        return r;
 
-                if (r < 0) {
-                        _cleanup_free_ char *x = NULL;
-
-                        if (errno != EEXIST)
-                                return log_error_errno(errno, "symlink(%s, %s) failed: %m", i->argument, i->path);
-
-                        r = readlink_malloc(i->path, &x);
-                        if (r < 0 || !streq(i->argument, x)) {
-
-                                if (i->append_or_force) {
-                                        mac_selinux_create_file_prepare(i->path, S_IFLNK);
-                                        r = symlink_atomic(i->argument, i->path);
-                                        mac_selinux_create_file_clear();
-
-                                        if (IN_SET(r, -EISDIR, -EEXIST, -ENOTEMPTY)) {
-                                                r = rm_rf(i->path, REMOVE_ROOT|REMOVE_PHYSICAL);
-                                                if (r < 0)
-                                                        return log_error_errno(r, "rm -fr %s failed: %m", i->path);
-
-                                                mac_selinux_create_file_prepare(i->path, S_IFLNK);
-                                                r = symlink(i->argument, i->path) < 0 ? -errno : 0;
-                                                mac_selinux_create_file_clear();
-                                        }
-                                        if (r < 0)
-                                                return log_error_errno(r, "symlink(%s, %s) failed: %m", i->argument, i->path);
-
-                                        creation = CREATION_FORCE;
-                                } else {
-                                        log_debug("\"%s\" is not a symlink or does not point to the correct path.", i->path);
-                                        return 0;
-                                }
-                        } else
-                                creation = CREATION_EXISTING;
-                } else
-
-                        creation = CREATION_NORMAL;
-                log_debug("%s symlink \"%s\".", creation_mode_verb_to_string(creation), i->path);
                 break;
-        }
 
         case CREATE_BLOCK_DEVICE:
         case CREATE_CHAR_DEVICE:
-                if (have_effective_cap(CAP_MKNOD) == 0) {
+                if (have_effective_cap(CAP_MKNOD) <= 0) {
                         /* In a container we lack CAP_MKNOD. We shouldn't attempt to create the device node in that
                          * case to avoid noise, and we don't support virtualized devices in containers anyway. */
 
@@ -2429,7 +2591,7 @@
         return 0;
 }
 
-static int remove_item_instance(Item *i, const char *instance) {
+static int remove_item_instance(Item *i, const char *instance, CreationMode creation) {
         int r;
 
         assert(i);
@@ -2452,7 +2614,7 @@
                 break;
 
         default:
-                assert_not_reached("wut?");
+                assert_not_reached();
         }
 
         return 0;
@@ -2502,8 +2664,11 @@
         return ret;
 }
 
-static int clean_item_instance(Item *i, const char* instance) {
-        char timestamp[FORMAT_TIMESTAMP_MAX];
+static int clean_item_instance(
+                Item *i,
+                const char* instance,
+                CreationMode creation) {
+
         _cleanup_closedir_ DIR *d = NULL;
         STRUCT_STATX_DEFINE(sx);
         int mountpoint, r;
@@ -2562,7 +2727,7 @@
                 log_debug("Cleanup threshold for %s \"%s\" is %s; age-by: %s%s",
                           mountpoint ? "mount point" : "directory",
                           instance,
-                          format_timestamp_style(timestamp, sizeof(timestamp), cutoff, TIMESTAMP_US),
+                          FORMAT_TIMESTAMP_STYLE(cutoff, TIMESTAMP_US),
                           ab_f, ab_d);
         }
 
@@ -2588,7 +2753,7 @@
         case TRUNCATE_DIRECTORY:
         case IGNORE_PATH:
         case COPY_FILES:
-                clean_item_instance(i, i->path);
+                clean_item_instance(i, i->path, CREATION_EXISTING);
                 return 0;
         case EMPTY_DIRECTORY:
         case IGNORE_DIRECTORY_PATH:
@@ -2683,11 +2848,15 @@
         assert(i);
         free(i->path);
         free(i->argument);
+        free(i->binary_argument);
         strv_free(i->xattrs);
 
 #if HAVE_ACL
-        acl_free(i->acl_access);
-        acl_free(i->acl_default);
+        if (i->acl_access)
+                acl_free(i->acl_access);
+
+        if (i->acl_default)
+                acl_free(i->acl_default);
 #endif
 }
 
@@ -2717,23 +2886,27 @@
         return CMP(a->type, b->type);
 }
 
-static bool item_compatible(Item *a, Item *b) {
+static bool item_compatible(const Item *a, const Item *b) {
         assert(a);
         assert(b);
         assert(streq(a->path, b->path));
 
         if (takes_ownership(a->type) && takes_ownership(b->type))
                 /* check if the items are the same */
-                return  streq_ptr(a->argument, b->argument) &&
+                return memcmp_nn(item_binary_argument(a), item_binary_argument_size(a),
+                                 item_binary_argument(b), item_binary_argument_size(b)) == 0 &&
 
                         a->uid_set == b->uid_set &&
                         a->uid == b->uid &&
+                        a->uid_only_create == b->uid_only_create &&
 
                         a->gid_set == b->gid_set &&
                         a->gid == b->gid &&
+                        a->gid_only_create == b->gid_only_create &&
 
                         a->mode_set == b->mode_set &&
                         a->mode == b->mode &&
+                        a->mode_only_create == b->mode_only_create &&
 
                         a->age_set == b->age_set &&
                         a->age == b->age &&
@@ -2751,8 +2924,6 @@
 }
 
 static bool should_include_path(const char *path) {
-        char **prefix;
-
         STRV_FOREACH(prefix, arg_exclude_prefixes)
                 if (path_startswith(path, *prefix)) {
                         log_debug("Entry \"%s\" matches exclude prefix \"%s\", skipping.",
@@ -2774,9 +2945,7 @@
         return false;
 }
 
-static int specifier_expansion_from_arg(Item *i) {
-        _cleanup_free_ char *unescaped = NULL, *resolved = NULL;
-        char **xattr;
+static int specifier_expansion_from_arg(const Specifier *specifier_table, Item *i) {
         int r;
 
         assert(i);
@@ -2789,33 +2958,36 @@
         case CREATE_SYMLINK:
         case CREATE_FILE:
         case TRUNCATE_FILE:
-        case WRITE_FILE:
-                r = cunescape(i->argument, 0, &unescaped);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to unescape parameter to write: %s", i->argument);
+        case WRITE_FILE: {
+                _cleanup_free_ char *unescaped = NULL, *resolved = NULL;
+                ssize_t l;
+
+                l = cunescape(i->argument, 0, &unescaped);
+                if (l < 0)
+                        return log_error_errno(l, "Failed to unescape parameter to write: %s", i->argument);
 
                 r = specifier_printf(unescaped, PATH_MAX-1, specifier_table, arg_root, NULL, &resolved);
                 if (r < 0)
                         return r;
 
-                free_and_replace(i->argument, resolved);
-                break;
-
+                return free_and_replace(i->argument, resolved);
+        }
         case SET_XATTR:
         case RECURSIVE_SET_XATTR:
                 STRV_FOREACH(xattr, i->xattrs) {
+                        _cleanup_free_ char *resolved = NULL;
+
                         r = specifier_printf(*xattr, SIZE_MAX, specifier_table, arg_root, NULL, &resolved);
                         if (r < 0)
                                 return r;
 
                         free_and_replace(*xattr, resolved);
                 }
-                break;
+                return 0;
 
         default:
-                break;
+                return 0;
         }
-        return 0;
 }
 
 static int patch_var_run(const char *fname, unsigned line, char **path) {
@@ -2957,6 +3129,26 @@
         return 0;
 }
 
+static bool is_duplicated_item(ItemArray *existing, const Item *i) {
+
+        assert(existing);
+        assert(i);
+
+        for (size_t n = 0; n < existing->n_items; n++) {
+                const Item *e = existing->items + n;
+
+                if (item_compatible(e, i))
+                        continue;
+
+                /* Only multiple 'w+' lines for the same path are allowed. */
+                if (e->type != WRITE_FILE || !e->append_or_force ||
+                    i->type != WRITE_FILE || !i->append_or_force)
+                        return true;
+        }
+
+        return false;
+}
+
 static int parse_line(
                 const char *fname,
                 unsigned line,
@@ -2974,12 +3166,36 @@
         ItemArray *existing;
         OrderedHashmap *h;
         int r, pos;
-        bool append_or_force = false, boot = false, allow_failure = false, try_replace = false;
+        bool append_or_force = false, boot = false, allow_failure = false, try_replace = false, unbase64 = false, from_cred = false;
 
         assert(fname);
         assert(line >= 1);
         assert(buffer);
 
+        const Specifier specifier_table[] = {
+                { 'a', specifier_architecture,    NULL },
+                { 'b', specifier_boot_id,         NULL },
+                { 'B', specifier_os_build_id,     NULL },
+                { 'H', specifier_hostname,        NULL },
+                { 'l', specifier_short_hostname,  NULL },
+                { 'm', specifier_machine_id,      NULL },
+                { 'o', specifier_os_id,           NULL },
+                { 'v', specifier_kernel_release,  NULL },
+                { 'w', specifier_os_version_id,   NULL },
+                { 'W', specifier_os_variant_id,   NULL },
+
+                { 'h', specifier_user_home,       NULL },
+
+                { 'C', specifier_directory,       UINT_TO_PTR(DIRECTORY_CACHE)   },
+                { 'L', specifier_directory,       UINT_TO_PTR(DIRECTORY_LOGS)    },
+                { 'S', specifier_directory,       UINT_TO_PTR(DIRECTORY_STATE)   },
+                { 't', specifier_directory,       UINT_TO_PTR(DIRECTORY_RUNTIME) },
+
+                COMMON_CREDS_SPECIFIERS(arg_user ? LOOKUP_SCOPE_USER : LOOKUP_SCOPE_SYSTEM),
+                COMMON_TMP_SPECIFIERS,
+                {}
+        };
+
         r = extract_many_words(
                         &buffer,
                         NULL,
@@ -3021,6 +3237,10 @@
                         allow_failure = true;
                 else if (action[pos] == '=' && !try_replace)
                         try_replace = true;
+                else if (action[pos] == '~' && !unbase64)
+                        unbase64 = true;
+                else if (action[pos] == '^' && !from_cred)
+                        from_cred = true;
                 else {
                         *invalid_config = true;
                         return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "Unknown modifiers in command '%s'", action);
@@ -3038,7 +3258,7 @@
         i.try_replace = try_replace;
 
         r = specifier_printf(path, PATH_MAX-1, specifier_table, arg_root, NULL, &i.path);
-        if (r == -ENXIO)
+        if (ERRNO_IS_NOINFO(r))
                 return log_unresolvable_specifier(fname, line);
         if (r < 0) {
                 if (IN_SET(r, -EINVAL, -EBADSLT))
@@ -3050,6 +3270,14 @@
         if (r < 0)
                 return r;
 
+        if (!path_is_absolute(i.path)) {
+                *invalid_config = true;
+                return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG),
+                                  "Path '%s' not absolute.", i.path);
+        }
+
+        path_simplify(i.path);
+
         switch (i.type) {
 
         case CREATE_DIRECTORY:
@@ -3067,7 +3295,13 @@
         case RELABEL_PATH:
         case RECURSIVE_RELABEL_PATH:
                 if (i.argument)
-                        log_syntax(NULL, LOG_WARNING, fname, line, 0, "%c lines don't take argument fields, ignoring.", i.type);
+                        log_syntax(NULL,
+                                   LOG_WARNING,
+                                   fname,
+                                   line,
+                                   0,
+                                   "%c lines don't take argument fields, ignoring.",
+                                   (char) i.type);
 
                 break;
 
@@ -3076,10 +3310,9 @@
                 break;
 
         case CREATE_SYMLINK:
-                if (!i.argument) {
-                        i.argument = path_join("/usr/share/factory", i.path);
-                        if (!i.argument)
-                                return log_oom();
+                if (unbase64) {
+                        *invalid_config = true;
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "base64 decoding not supported for symlink targets.");
                 }
                 break;
 
@@ -3091,37 +3324,25 @@
                 break;
 
         case COPY_FILES:
-                if (!i.argument) {
-                        i.argument = path_join("/usr/share/factory", i.path);
-                        if (!i.argument)
-                                return log_oom();
-
-                } else if (!path_is_absolute(i.argument)) {
+                if (unbase64) {
                         *invalid_config = true;
-                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "Source path '%s' is not absolute.", i.argument);
-
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "base64 decoding not supported for copy sources.");
                 }
-
-                if (!empty_or_root(arg_root)) {
-                        char *p;
-
-                        p = path_join(arg_root, i.argument);
-                        if (!p)
-                                return log_oom();
-                        free_and_replace(i.argument, p);
-                }
-
-                path_simplify(i.argument);
                 break;
 
         case CREATE_CHAR_DEVICE:
         case CREATE_BLOCK_DEVICE:
+                if (unbase64) {
+                        *invalid_config = true;
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "base64 decoding not supported for device node creation.");
+                }
+
                 if (!i.argument) {
                         *invalid_config = true;
                         return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "Device file requires argument.");
                 }
 
-                r = parse_dev(i.argument, &i.major_minor);
+                r = parse_devnum(i.argument, &i.major_minor);
                 if (r < 0) {
                         *invalid_config = true;
                         return log_syntax(NULL, LOG_ERR, fname, line, r, "Can't parse device file major/minor '%s'.", i.argument);
@@ -3131,6 +3352,10 @@
 
         case SET_XATTR:
         case RECURSIVE_SET_XATTR:
+                if (unbase64) {
+                        *invalid_config = true;
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "base64 decoding not supported for extended attributes.");
+                }
                 if (!i.argument) {
                         *invalid_config = true;
                         return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG),
@@ -3143,6 +3368,10 @@
 
         case SET_ACL:
         case RECURSIVE_SET_ACL:
+                if (unbase64) {
+                        *invalid_config = true;
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "base64 decoding not supported for ACLs.");
+                }
                 if (!i.argument) {
                         *invalid_config = true;
                         return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG),
@@ -3155,6 +3384,10 @@
 
         case SET_ATTRIBUTE:
         case RECURSIVE_SET_ATTRIBUTE:
+                if (unbase64) {
+                        *invalid_config = true;
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "base64 decoding not supported for file attributes.");
+                }
                 if (!i.argument) {
                         *invalid_config = true;
                         return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG),
@@ -3173,24 +3406,92 @@
                                   "Unknown command type '%c'.", (char) i.type);
         }
 
-        if (!path_is_absolute(i.path)) {
-                *invalid_config = true;
-                return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG),
-                                  "Path '%s' not absolute.", i.path);
-        }
-
-        path_simplify(i.path);
-
         if (!should_include_path(i.path))
                 return 0;
 
-        r = specifier_expansion_from_arg(&i);
-        if (r == -ENXIO)
-                return log_unresolvable_specifier(fname, line);
-        if (r < 0) {
-                if (IN_SET(r, -EINVAL, -EBADSLT))
+        if (!unbase64) {
+                /* Do specifier expansion except if base64 mode is enabled */
+                r = specifier_expansion_from_arg(specifier_table, &i);
+                if (ERRNO_IS_NOINFO(r))
+                        return log_unresolvable_specifier(fname, line);
+                if (r < 0) {
+                        if (IN_SET(r, -EINVAL, -EBADSLT))
+                                *invalid_config = true;
+                        return log_syntax(NULL, LOG_ERR, fname, line, r, "Failed to substitute specifiers in argument: %m");
+                }
+        }
+
+        switch (i.type) {
+        case CREATE_SYMLINK:
+                if (!i.argument) {
+                        i.argument = path_join("/usr/share/factory", i.path);
+                        if (!i.argument)
+                                return log_oom();
+                }
+                break;
+
+        case COPY_FILES:
+                if (!i.argument) {
+                        i.argument = path_join("/usr/share/factory", i.path);
+                        if (!i.argument)
+                                return log_oom();
+                } else if (!path_is_absolute(i.argument)) {
                         *invalid_config = true;
-                return log_syntax(NULL, LOG_ERR, fname, line, r, "Failed to substitute specifiers in argument: %m");
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "Source path '%s' is not absolute.", i.argument);
+
+                }
+
+                if (!empty_or_root(arg_root)) {
+                        char *p;
+
+                        p = path_join(arg_root, i.argument);
+                        if (!p)
+                                return log_oom();
+                        free_and_replace(i.argument, p);
+                }
+
+                path_simplify(i.argument);
+
+                if (laccess(i.argument, F_OK) == -ENOENT) {
+                        /* Silently skip over lines where the source file is missing. */
+                        log_syntax(NULL, LOG_DEBUG, fname, line, 0, "Copy source path '%s' does not exist, skipping line.", i.argument);
+                        return 0;
+                }
+
+                break;
+
+        default:
+                break;
+        }
+
+        if (from_cred) {
+                if (!i.argument)
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL), "Reading from credential requested, but no credential name specified.");
+                if (!credential_name_valid(i.argument))
+                        return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EINVAL), "Credential name not valid: %s", i.argument);
+
+                r = read_credential(i.argument, &i.binary_argument, &i.binary_argument_size);
+                if (IN_SET(r, -ENXIO, -ENOENT)) {
+                        /* Silently skip over lines that have no credentials passed */
+                        log_syntax(NULL, LOG_DEBUG, fname, line, 0,
+                                   "Credential '%s' not specified, skipping line.", i.argument);
+                        return 0;
+                }
+                if (r < 0)
+                        return log_error_errno(r, "Failed to read credential '%s': %m", i.argument);
+        }
+
+        /* If base64 decoding is requested, do so now */
+        if (unbase64 && item_binary_argument(&i)) {
+                _cleanup_free_ void *data = NULL;
+                size_t data_size = 0;
+
+                r = unbase64mem(item_binary_argument(&i), item_binary_argument_size(&i), &data, &data_size);
+                if (r < 0)
+                        return log_syntax(NULL, LOG_ERR, fname, line, r, "Failed to base64 decode specified argument '%s': %m", i.argument);
+
+                free_and_replace(i.binary_argument, data);
+                i.binary_argument_size = data_size;
         }
 
         if (!empty_or_root(arg_root)) {
@@ -3203,32 +3504,52 @@
         }
 
         if (!empty_or_dash(user)) {
-                r = find_uid(user, &i.uid, uid_cache);
+                const char *u;
+
+                u = startswith(user, ":");
+                if (u)
+                        i.uid_only_create = true;
+                else
+                        u = user;
+
+                r = find_uid(u, &i.uid, uid_cache);
                 if (r < 0) {
                         *invalid_config = true;
-                        return log_syntax(NULL, LOG_ERR, fname, line, r, "Failed to resolve user '%s': %m", user);
+                        return log_syntax(NULL, LOG_ERR, fname, line, r, "Failed to resolve user '%s': %m", u);
                 }
 
                 i.uid_set = true;
         }
 
         if (!empty_or_dash(group)) {
-                r = find_gid(group, &i.gid, gid_cache);
+                const char *g;
+
+                g = startswith(group, ":");
+                if (g)
+                        i.gid_only_create = true;
+                else
+                        g = group;
+
+                r = find_gid(g, &i.gid, gid_cache);
                 if (r < 0) {
                         *invalid_config = true;
-                        return log_syntax(NULL, LOG_ERR, fname, line, r, "Failed to resolve group '%s'.", group);
+                        return log_syntax(NULL, LOG_ERR, fname, line, r, "Failed to resolve group '%s'.", g);
                 }
 
                 i.gid_set = true;
         }
 
         if (!empty_or_dash(mode)) {
-                const char *mm = mode;
+                const char *mm;
                 unsigned m;
 
-                if (*mm == '~') {
-                        i.mask_perms = true;
-                        mm++;
+                for (mm = mode;; mm++) {
+                        if (*mm == '~')
+                                i.mask_perms = true;
+                        else if (*mm == ':')
+                                i.mode_only_create = true;
+                        else
+                                break;
                 }
 
                 r = parse_mode(mm, &m);
@@ -3284,13 +3605,10 @@
 
         existing = ordered_hashmap_get(h, i.path);
         if (existing) {
-                size_t n;
-
-                for (n = 0; n < existing->n_items; n++) {
-                        if (!item_compatible(existing->items + n, &i) && !i.append_or_force) {
-                                log_syntax(NULL, LOG_NOTICE, fname, line, 0, "Duplicate line for path \"%s\", ignoring.", i.path);
-                                return 0;
-                        }
+                if (is_duplicated_item(existing, &i)) {
+                        log_syntax(NULL, LOG_NOTICE, fname, line, 0,
+                                   "Duplicate line for path \"%s\", ignoring.", i.path);
+                        return 0;
                 }
         } else {
                 existing = new0(ItemArray, 1);
@@ -3509,7 +3827,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (arg_operation == 0 && !arg_cat_config)
@@ -3534,7 +3852,12 @@
         return 1;
 }
 
-static int read_config_file(char **config_dirs, const char *fn, bool ignore_enoent, bool *invalid_config) {
+static int read_config_file(
+                char **config_dirs,
+                const char *fn,
+                bool ignore_enoent,
+                bool *invalid_config) {
+
         _cleanup_(hashmap_freep) Hashmap *uid_cache = NULL, *gid_cache = NULL;
         _cleanup_fclose_ FILE *_f = NULL;
         _cleanup_free_ char *pp = NULL;
@@ -3546,7 +3869,7 @@
         assert(fn);
 
         if (streq(fn, "-")) {
-                log_debug("Reading config from stdin…");
+                log_debug("Reading config from stdin%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
                 fn = "<stdin>";
                 f = stdin;
         } else {
@@ -3560,7 +3883,7 @@
                         return log_error_errno(r, "Failed to open '%s': %m", fn);
                 }
 
-                log_debug("Reading config file \"%s\"…", pp);
+                log_debug("Reading config file \"%s\"%s", pp, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
                 fn = pp;
                 f = _f;
         }
@@ -3641,7 +3964,6 @@
 }
 
 static int parse_arguments(char **config_dirs, char **args, bool *invalid_config) {
-        char **arg;
         int r;
 
         STRV_FOREACH(arg, args) {
@@ -3656,7 +3978,6 @@
 static int read_config_files(char **config_dirs, char **args, bool *invalid_config) {
         _cleanup_strv_free_ char **files = NULL;
         _cleanup_free_ char *p = NULL;
-        char **f;
         int r;
 
         r = conf_files_list_with_replacement(arg_root, config_dirs, arg_replace, &files, &p);
@@ -3665,7 +3986,7 @@
 
         STRV_FOREACH(f, files)
                 if (p && path_equal(*f, p)) {
-                        log_debug("Parsing arguments at position \"%s\"…", *f);
+                        log_debug("Parsing arguments at position \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
 
                         r = parse_arguments(config_dirs, args, invalid_config);
                         if (r < 0)
@@ -3678,6 +3999,25 @@
         return 0;
 }
 
+static int read_credential_lines(bool *invalid_config) {
+        _cleanup_free_ char *j = NULL;
+        const char *d;
+        int r;
+
+        r = get_credentials_dir(&d);
+        if (r == -ENXIO)
+                return 0;
+        if (r < 0)
+                return log_error_errno(r, "Failed to get credentials directory: %m");
+
+        j = path_join(d, "tmpfiles.extra");
+        if (!j)
+                return log_oom();
+
+        (void) read_config_file(/* config_dirs= */ NULL, j, /* ignore_enoent= */ true, invalid_config);
+        return 0;
+}
+
 static int link_parent(ItemArray *a) {
         const char *path;
         char *prefix;
@@ -3719,7 +4059,6 @@
 static int run(int argc, char *argv[]) {
 #ifndef STANDALONE
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
-        _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(umount_and_rmdir_and_freep) char *unlink_dir = NULL;
 #endif
         _cleanup_strv_free_ char **config_dirs = NULL;
@@ -3763,7 +4102,6 @@
 
         if (DEBUG_LOGGING) {
                 _cleanup_free_ char *t = NULL;
-                char **i;
 
                 STRV_FOREACH(i, config_dirs) {
                         _cleanup_free_ char *j = NULL;
@@ -3780,7 +4118,7 @@
         }
 
         if (arg_cat_config) {
-                (void) pager_open(arg_pager_flags);
+                pager_open(arg_pager_flags);
 
                 return cat_config(config_dirs, argv + optind);
         }
@@ -3804,8 +4142,7 @@
                                 DISSECT_IMAGE_FSCK |
                                 DISSECT_IMAGE_GROWFS,
                                 &unlink_dir,
-                                &loop_device,
-                                &decrypted_image);
+                                &loop_device);
                 if (r < 0)
                         return r;
 
@@ -3835,6 +4172,10 @@
         if (r < 0)
                 return r;
 
+        r = read_credential_lines(&invalid_config);
+        if (r < 0)
+                return r;
+
         /* Let's now link up all child/parent relationships */
         ORDERED_HASHMAP_FOREACH(a, items) {
                 r = link_parent(a);
@@ -3857,7 +4198,7 @@
                 else if (phase == PHASE_CREATE)
                         op = arg_operation & OPERATION_CREATE;
                 else
-                        assert_not_reached("unexpected phase");
+                        assert_not_reached();
 
                 if (op == 0) /* Nothing requested in this phase */
                         continue;
diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c
index 25d6918..46d2307 100644
--- a/src/tty-ask-password-agent/tty-ask-password-agent.c
+++ b/src/tty-ask-password-agent/tty-ask-password-agent.c
@@ -18,19 +18,20 @@
 
 #include "alloc-util.h"
 #include "ask-password-api.h"
+#include "build.h"
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
 #include "dirent-util.h"
 #include "exit-status.h"
 #include "fd-util.h"
 #include "fileio.h"
-#include "fs-util.h"
 #include "hashmap.h"
+#include "inotify-util.h"
 #include "io-util.h"
 #include "macro.h"
 #include "main-func.h"
 #include "memory-util.h"
-#include "mkdir.h"
+#include "mkdir-label.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "process-util.h"
@@ -55,11 +56,11 @@
 
 static int send_passwords(const char *socket_name, char **passwords) {
         _cleanup_(erase_and_freep) char *packet = NULL;
-        _cleanup_close_ int socket_fd = -1;
+        _cleanup_close_ int socket_fd = -EBADF;
         union sockaddr_union sa;
         socklen_t sa_len;
         size_t packet_length = 1;
-        char **p, *d;
+        char *d;
         ssize_t n;
         int r;
 
@@ -94,13 +95,12 @@
         return (int) n;
 }
 
-static bool wall_tty_match(const char *path, void *userdata) {
+static bool wall_tty_match(const char *path, bool is_local, void *userdata) {
         _cleanup_free_ char *p = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         struct stat st;
 
-        if (!path_is_absolute(path))
-                path = strjoina("/dev/", path);
+        assert(path_is_absolute(path));
 
         if (lstat(path, &st) < 0) {
                 log_debug_errno(errno, "Failed to stat %s: %m", path);
@@ -142,7 +142,7 @@
                 const char *flag_file,
                 char ***ret) {
 
-        int tty_fd = -1, r;
+        int tty_fd = -EBADF, r;
         const char *con = arg_device ?: "/dev/console";
 
         if (arg_console) {
@@ -174,16 +174,16 @@
         _cleanup_free_ char *socket_name = NULL, *message = NULL;
         bool accept_cached = false, echo = false, silent = false;
         uint64_t not_after = 0;
-        unsigned pid = 0;
+        pid_t pid = 0;
 
         const ConfigTableItem items[] = {
-                { "Ask", "Socket",       config_parse_string,   0, &socket_name   },
-                { "Ask", "NotAfter",     config_parse_uint64,   0, &not_after     },
-                { "Ask", "Message",      config_parse_string,   0, &message       },
-                { "Ask", "PID",          config_parse_unsigned, 0, &pid           },
-                { "Ask", "AcceptCached", config_parse_bool,     0, &accept_cached },
-                { "Ask", "Echo",         config_parse_bool,     0, &echo          },
-                { "Ask", "Silent",       config_parse_bool,     0, &silent        },
+                { "Ask", "Socket",       config_parse_string, CONFIG_PARSE_STRING_SAFE, &socket_name   },
+                { "Ask", "NotAfter",     config_parse_uint64, 0,                        &not_after     },
+                { "Ask", "Message",      config_parse_string, 0,                        &message       },
+                { "Ask", "PID",          config_parse_pid,    0,                        &pid           },
+                { "Ask", "AcceptCached", config_parse_bool,   0,                        &accept_cached },
+                { "Ask", "Echo",         config_parse_bool,   0,                        &echo          },
+                { "Ask", "Silent",       config_parse_bool,   0,                        &silent        },
                 {}
         };
 
@@ -212,14 +212,14 @@
 
         switch (arg_action) {
         case ACTION_LIST:
-                printf("'%s' (PID %u)\n", strna(message), pid);
+                printf("'%s' (PID " PID_FMT ")\n", strna(message), pid);
                 return 0;
 
         case ACTION_WALL: {
                  _cleanup_free_ char *wall = NULL;
 
                  if (asprintf(&wall,
-                              "Password entry required for \'%s\' (PID %u).\r\n"
+                              "Password entry required for \'%s\' (PID " PID_FMT ").\r\n"
                               "Please enter password with the systemd-tty-ask-password-agent tool.",
                               strna(message),
                               pid) < 0)
@@ -235,7 +235,7 @@
 
                 if (access(socket_name, W_OK) < 0) {
                         if (arg_action == ACTION_QUERY)
-                                log_info("Not querying '%s' (PID %u), lacking privileges.", strna(message), pid);
+                                log_info("Not querying '%s' (PID " PID_FMT "), lacking privileges.", strna(message), pid);
 
                         return 0;
                 }
@@ -295,7 +295,6 @@
 
 static int process_password_files(void) {
         _cleanup_closedir_ DIR *d = NULL;
-        struct dirent *de;
         int r = 0;
 
         d = opendir("/run/systemd/ask-password");
@@ -338,8 +337,8 @@
                 _FD_MAX
         };
 
-        _unused_ _cleanup_close_ int tty_block_fd = -1;
-        _cleanup_close_ int notify = -1, signal_fd = -1;
+        _unused_ _cleanup_close_ int tty_block_fd = -EBADF;
+        _cleanup_close_ int notify = -EBADF, signal_fd = -EBADF;
         struct pollfd pollfd[_FD_MAX];
         sigset_t mask;
         int r;
@@ -509,7 +508,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         if (optind != argc)
@@ -555,8 +554,6 @@
         if (r < 0)
                 return r;
         if (r == 0) {
-                char **i;
-
                 assert_se(prctl(PR_SET_PDEATHSIG, SIGHUP) >= 0);
 
                 STRV_FOREACH(i, arguments) {
@@ -582,8 +579,6 @@
 }
 
 static void terminate_agents(Set *pids) {
-        struct timespec ts;
-        siginfo_t status = {};
         sigset_t set;
         void *p;
         int r, signum;
@@ -600,11 +595,10 @@
          */
         assert_se(sigemptyset(&set) >= 0);
         assert_se(sigaddset(&set, SIGCHLD) >= 0);
-        timespec_store(&ts, 50 * USEC_PER_MSEC);
 
         while (!set_isempty(pids)) {
+                siginfo_t status = {};
 
-                zero(status);
                 r = waitid(P_ALL, 0, &status, WEXITED|WNOHANG);
                 if (r < 0 && errno == EINTR)
                         continue;
@@ -614,7 +608,7 @@
                         continue;
                 }
 
-                signum = sigtimedwait(&set, NULL, &ts);
+                signum = sigtimedwait(&set, NULL, TIMESPEC_STORE(50 * USEC_PER_MSEC));
                 if (signum < 0) {
                         if (errno != EAGAIN)
                                 log_error_errno(errno, "sigtimedwait() failed: %m");
@@ -636,7 +630,6 @@
         _cleanup_set_free_ Set *pids = NULL;
         _cleanup_strv_free_ char **consoles = NULL, **arguments = NULL;
         siginfo_t status = {};
-        char **tty;
         pid_t pid;
         int r;
 
diff --git a/src/udev/ata_id/ata_id.c b/src/udev/ata_id/ata_id.c
index 1fc27f4..6a631e5 100644
--- a/src/udev/ata_id/ata_id.c
+++ b/src/udev/ata_id/ata_id.c
@@ -162,8 +162,8 @@
                         return ret;
         }
 
-        if (!(sense[0] == 0x72 && desc[0] == 0x9 && desc[1] == 0x0c) &&
-                !(sense[0] == 0x70 && sense[12] == 0x00 && sense[13] == 0x1d)) {
+        if (!((sense[0] & 0x7f) == 0x72 && desc[0] == 0x9 && desc[1] == 0x0c) &&
+                !((sense[0] & 0x7f) == 0x70 && sense[12] == 0x00 && sense[13] == 0x1d)) {
                 errno = EIO;
                 return -1;
         }
@@ -240,7 +240,7 @@
                         return ret;
         }
 
-        if (!(sense[0] == 0x72 && desc[0] == 0x9 && desc[1] == 0x0c)) {
+        if (!((sense[0] & 0x7f) == 0x72 && desc[0] == 0x9 && desc[1] == 0x0c)) {
                 errno = EIO;
                 return -1;
         }
@@ -399,7 +399,7 @@
         char revision[9];
         const char *node = NULL;
         int export = 0;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         uint16_t word;
         int is_packet_device = 0;
         static const struct option options[] = {
@@ -439,7 +439,7 @@
                 return 1;
         }
 
-        fd = open(node, O_RDONLY|O_NONBLOCK|O_CLOEXEC);
+        fd = open(node, O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
         if (fd < 0) {
                 log_error("unable to open '%s'", node);
                 return 1;
diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c
index df0ee6a..ea420a9 100644
--- a/src/udev/cdrom_id/cdrom_id.c
+++ b/src/udev/cdrom_id/cdrom_id.c
@@ -102,6 +102,12 @@
         uint64_t media_session_last_offset;
 } Context;
 
+#define CONTEXT_EMPTY {                                 \
+                .fd = -EBADF,                           \
+                .media_feature = _FEATURE_INVALID,      \
+                .media_state = _MEDIA_STATE_INVALID,    \
+        }
+
 static void context_clear(Context *c) {
         if (!c)
                 return;
@@ -110,16 +116,6 @@
         free(c->drive_features);
 }
 
-static void context_init(Context *c) {
-        assert(c);
-
-        *c = (Context) {
-                .fd = -1,
-                .media_feature = _FEATURE_INVALID,
-                .media_state = _MEDIA_STATE_INVALID,
-        };
-}
-
 static bool drive_has_feature(const Context *c, Feature f) {
         assert(c);
 
@@ -144,9 +140,9 @@
 }
 
 #define ERRCODE(s)      ((((s)[2] & 0x0F) << 16) | ((s)[12] << 8) | ((s)[13]))
-#define SK(errcode)     (((errcode) >> 16) & 0xF)
-#define ASC(errcode)    (((errcode) >> 8) & 0xFF)
-#define ASCQ(errcode)   ((errcode) & 0xFF)
+#define SK(errcode)     (((errcode) >> 16) & 0xFU)
+#define ASC(errcode)    (((errcode) >> 8) & 0xFFU)
+#define ASCQ(errcode)   ((errcode) & 0xFFU)
 #define CHECK_CONDITION 0x01
 
 static int log_scsi_debug_errno(int error, const char *msg) {
@@ -545,7 +541,7 @@
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Invalid format capacities length.");
 
-        switch(format[8] & 3) {
+        switch (format[8] & 3) {
         case 1:
                 /* This means that last format was interrupted or failed, blank dvd-ram discs are
                  * factory formatted. Take no action here as it takes quite a while to reformat a
@@ -708,7 +704,7 @@
         /* Take care to not iterate beyond the last valid track as specified in
          * the TOC, but also avoid going beyond the TOC length, just in case
          * the last track number is invalidly large */
-        for (size_t i = 4; i + 8 < len && num_tracks > 0; i += 8, --num_tracks) {
+        for (size_t i = 4; i + 8 <= len && num_tracks > 0; i += 8, --num_tracks) {
                 bool is_data_track;
                 uint32_t block;
 
@@ -716,7 +712,7 @@
                 block = unaligned_read_be32(&toc[i + 4]);
 
                 log_debug("track=%u info=0x%x(%s) start_block=%"PRIu32,
-                          toc[i + 2], toc[i + 1] & 0x0f, is_data_track ? "data":"audio", block);
+                          toc[i + 2], toc[i + 1] & 0x0FU, is_data_track ? "data":"audio", block);
 
                 if (is_data_track)
                         c->media_track_count_data++;
@@ -747,7 +743,7 @@
         assert(c->fd < 0);
 
         for (int cnt = 0;; cnt++) {
-                fd = open(arg_node, O_RDONLY|O_NONBLOCK|O_CLOEXEC);
+                fd = open(arg_node, O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
                 if (fd >= 0)
                         break;
                 if (++cnt >= 20 || errno != EBUSY)
@@ -943,7 +939,7 @@
                 case 'h':
                         return help();
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         arg_node = argv[optind];
@@ -954,7 +950,7 @@
 }
 
 static int run(int argc, char *argv[]) {
-        _cleanup_(context_clear) Context c;
+        _cleanup_(context_clear) Context c = CONTEXT_EMPTY;
         int r;
 
         log_set_target(LOG_TARGET_AUTO);
@@ -962,8 +958,6 @@
         log_parse_environment();
         log_open();
 
-        context_init(&c);
-
         r = parse_argv(argc, argv);
         if (r <= 0)
                 return r;
diff --git a/src/udev/dmi_memory_id/dmi_memory_id.c b/src/udev/dmi_memory_id/dmi_memory_id.c
index bbf7dc6..1345289 100644
--- a/src/udev/dmi_memory_id/dmi_memory_id.c
+++ b/src/udev/dmi_memory_id/dmi_memory_id.c
@@ -86,7 +86,7 @@
 }
 
 /*
- * Type-independant Stuff
+ * Type-independent Stuff
  */
 
 static const char *dmi_string(const struct dmi_header *dm, uint8_t s) {
@@ -117,7 +117,7 @@
                 code <<= 10;
 
         if (slot_num >= 0)
-                printf("%s_%u_%s=%"PRIu64"\n", attr_prefix, slot_num, attr_suffix, code);
+                printf("%s_%i_%s=%"PRIu64"\n", attr_prefix, slot_num, attr_suffix, code);
         else
                 printf("%s_%s=%"PRIu64"\n", attr_prefix, attr_suffix, code);
 }
@@ -183,7 +183,7 @@
                 const struct dmi_header *h, uint8_t s) {
         char *str;
 
-        str = strdupa(dmi_string(h, s));
+        str = strdupa_safe(dmi_string(h, s));
         str = strstrip(str);
         if (!isempty(str))
                 printf("MEMORY_DEVICE_%u_%s=%s\n", slot_num, attr_suffix, str);
@@ -667,7 +667,7 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         return 1;
diff --git a/src/udev/fido_id/fido_id.c b/src/udev/fido_id/fido_id.c
index a9f5f8f..f2fbc38 100644
--- a/src/udev/fido_id/fido_id.c
+++ b/src/udev/fido_id/fido_id.c
@@ -28,7 +28,7 @@
 static int run(int argc, char **argv) {
         _cleanup_(sd_device_unrefp) struct sd_device *device = NULL;
         _cleanup_free_ char *desc_path = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
         struct sd_device *hid_device;
         const char *sys_path;
@@ -67,7 +67,7 @@
         if (!desc_path)
                 return log_oom();
 
-        fd = open(desc_path, O_RDONLY | O_NOFOLLOW | O_CLOEXEC);
+        fd = open(desc_path, O_RDONLY | O_NOFOLLOW | O_CLOEXEC | O_NOCTTY);
         if (fd < 0)
                 return log_device_error_errno(hid_device, errno,
                                               "Failed to open report descriptor at '%s': %m", desc_path);
diff --git a/src/udev/fido_id/fuzz-fido-id-desc.c b/src/udev/fido_id/fuzz-fido-id-desc.c
index 44d66df..dd2ae5b 100644
--- a/src/udev/fido_id/fuzz-fido-id-desc.c
+++ b/src/udev/fido_id/fuzz-fido-id-desc.c
@@ -15,8 +15,9 @@
         if (!getenv("SYSTEMD_LOG_LEVEL"))
                 log_set_max_level(LOG_CRIT);
 
-        if (size > HID_MAX_DESCRIPTOR_SIZE)
+        if (outside_size_range(size, 0, HID_MAX_DESCRIPTOR_SIZE))
                 return 0;
+
         (void) is_fido_security_token_desc(data, size);
 
         return 0;
diff --git a/src/udev/fido_id/test-fido-id-desc.c b/src/udev/fido_id/test-fido-id-desc.c
index 6836bca..36c777a 100644
--- a/src/udev/fido_id/test-fido-id-desc.c
+++ b/src/udev/fido_id/test-fido-id-desc.c
@@ -5,8 +5,9 @@
 
 #include "fido_id_desc.h"
 #include "macro.h"
+#include "tests.h"
 
-static void test_is_fido_security_token_desc__fido(void) {
+TEST(is_fido_security_token_desc__fido) {
         static const uint8_t FIDO_HID_DESC_1[] = {
                 0x06, 0xd0, 0xf1, 0x09, 0x01, 0xa1, 0x01, 0x09, 0x20, 0x15, 0x00, 0x26, 0xff, 0x00, 0x75,
                 0x08, 0x95, 0x40, 0x81, 0x02, 0x09, 0x21, 0x15, 0x00, 0x26, 0xff, 0x00, 0x75, 0x08, 0x95,
@@ -27,7 +28,7 @@
         assert_se(is_fido_security_token_desc(FIDO_HID_DESC_2, sizeof(FIDO_HID_DESC_2)) > 0);
 }
 
-static void test_is_fido_security_token_desc__non_fido(void) {
+TEST(is_fido_security_token_desc__non_fido) {
         /* Wrong usage page */
         static const uint8_t NON_FIDO_HID_DESC_1[] = {
                 0x06, 0xd0, 0xf0, 0x09, 0x01, 0xa1, 0x01, 0x09, 0x20, 0x15, 0x00, 0x26, 0xff, 0x00, 0x75,
@@ -54,7 +55,7 @@
         assert_se(is_fido_security_token_desc(NON_FIDO_HID_DESC_3, sizeof(NON_FIDO_HID_DESC_3)) == 0);
 }
 
-static void test_is_fido_security_token_desc__invalid(void) {
+TEST(is_fido_security_token_desc__invalid) {
         /* Size coded on 1 byte, but no byte given */
         static const uint8_t INVALID_HID_DESC_1[] = { 0x01 };
         assert_se(is_fido_security_token_desc(INVALID_HID_DESC_1, sizeof(INVALID_HID_DESC_1)) < 0);
@@ -76,10 +77,4 @@
         assert_se(is_fido_security_token_desc(INVALID_HID_DESC_5, sizeof(INVALID_HID_DESC_5)) < 0);
 }
 
-int main(int argc, char *argv[]) {
-        test_is_fido_security_token_desc__fido();
-        test_is_fido_security_token_desc__non_fido();
-        test_is_fido_security_token_desc__invalid();
-
-        return EXIT_SUCCESS;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/udev/fuzz-udev-rules.c b/src/udev/fuzz-udev-rules.c
index 17f5ea1..255d5df 100644
--- a/src/udev/fuzz-udev-rules.c
+++ b/src/udev/fuzz-udev-rules.c
@@ -15,6 +15,9 @@
         _cleanup_(unlink_tempfilep) char filename[] = "/tmp/fuzz-udev-rules.XXXXXX";
         int r;
 
+        if (outside_size_range(size, 0, 65536))
+                return 0;
+
         if (!getenv("SYSTEMD_LOG_LEVEL"))
                 log_set_max_level(LOG_CRIT);
 
diff --git a/src/udev/generate-keyboard-keys-gperf.sh b/src/udev/generate-keyboard-keys-gperf.sh
index 1db4cbe..9f4364c 100755
--- a/src/udev/generate-keyboard-keys-gperf.sh
+++ b/src/udev/generate-keyboard-keys-gperf.sh
@@ -17,4 +17,4 @@
 
     /^KEY_/ { print tolower(substr($1 ,5)) ", " $1 }
     { print tolower($1) ", " $1 }
-' < "${1:?}"
+' <"${1:?}"
diff --git a/src/udev/meson.build b/src/udev/meson.build
index 4e80f9b..f17b3c1 100644
--- a/src/udev/meson.build
+++ b/src/udev/meson.build
@@ -1,56 +1,49 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-udevadm_sources = files('''
-        udevadm.c
-        udevadm.h
-        udevadm-control.c
-        udevadm-hwdb.c
-        udevadm-info.c
-        udevadm-monitor.c
-        udevadm-settle.c
-        udevadm-test.c
-        udevadm-test-builtin.c
-        udevadm-trigger.c
-        udevadm-util.c
-        udevadm-util.h
-        udevd.c
-'''.split())
+udevadm_sources = files(
+        'udevadm.c',
+        'udevadm-control.c',
+        'udevadm-hwdb.c',
+        'udevadm-info.c',
+        'udevadm-lock.c',
+        'udevadm-monitor.c',
+        'udevadm-settle.c',
+        'udevadm-test.c',
+        'udevadm-test-builtin.c',
+        'udevadm-trigger.c',
+        'udevadm-util.c',
+        'udevadm-wait.c',
+        'udevd.c',
+)
 
-libudevd_core_sources = '''
-        udev-ctrl.c
-        udev-ctrl.h
-        udev-event.c
-        udev-event.h
-        udev-node.c
-        udev-node.h
-        udev-rules.c
-        udev-rules.h
-        udev-watch.c
-        udev-watch.h
-        udev-builtin.c
-        udev-builtin.h
-        udev-builtin-btrfs.c
-        udev-builtin-hwdb.c
-        udev-builtin-input_id.c
-        udev-builtin-keyboard.c
-        udev-builtin-net_id.c
-        udev-builtin-net_setup_link.c
-        udev-builtin-path_id.c
-        udev-builtin-usb_id.c
-        net/link-config.c
-        net/link-config.h
-'''.split()
+libudevd_core_sources = files(
+        'udev-ctrl.c',
+        'udev-event.c',
+        'udev-node.c',
+        'udev-rules.c',
+        'udev-watch.c',
+        'udev-builtin.c',
+        'udev-builtin-btrfs.c',
+        'udev-builtin-hwdb.c',
+        'udev-builtin-input_id.c',
+        'udev-builtin-keyboard.c',
+        'udev-builtin-net_id.c',
+        'udev-builtin-net_setup_link.c',
+        'udev-builtin-path_id.c',
+        'udev-builtin-usb_id.c',
+        'net/link-config.c',
+)
 
 if conf.get('HAVE_KMOD') == 1
-        libudevd_core_sources += ['udev-builtin-kmod.c']
+        libudevd_core_sources += files('udev-builtin-kmod.c')
 endif
 
 if conf.get('HAVE_BLKID') == 1
-        libudevd_core_sources += ['udev-builtin-blkid.c']
+        libudevd_core_sources += files('udev-builtin-blkid.c')
 endif
 
 if conf.get('HAVE_ACL') == 1
-        libudevd_core_sources += ['udev-builtin-uaccess.c']
+        libudevd_core_sources += files('udev-builtin-uaccess.c')
 endif
 
 ############################################################
@@ -96,7 +89,7 @@
 
 if get_option('link-udev-shared')
         udev_link_with = [libshared]
-        udev_rpath = rootlibexecdir
+        udev_rpath = rootpkglibdir
 else
         udev_link_with = [libshared_static,
                           libsystemd_static]
@@ -113,105 +106,99 @@
         keyboard_keys_from_name_h,
         include_directories : udev_includes,
         link_with : udev_link_with,
-        dependencies : [libblkid, libkmod])
+        dependencies : [libblkid,
+                        libkmod],
+        build_by_default : false)
 
-udev_id_progs = [['ata_id/ata_id.c'],
-                 ['cdrom_id/cdrom_id.c'],
-                 ['fido_id/fido_id.c',
-                  'fido_id/fido_id_desc.c',
-                  'fido_id/fido_id_desc.h'],
-                 ['scsi_id/scsi_id.c',
-                  'scsi_id/scsi_id.h',
-                  'scsi_id/scsi_serial.c',
-                  'scsi_id/scsi.h'],
-                 ['v4l_id/v4l_id.c'],
-                 ['mtd_probe/mtd_probe.c',
-                  'mtd_probe/mtd_probe.h',
-                  'mtd_probe/probe_smartmedia.c']]
+udev_progs = [['ata_id/ata_id.c'],
+              ['cdrom_id/cdrom_id.c'],
+              ['fido_id/fido_id.c',
+               'fido_id/fido_id_desc.c'],
+              ['scsi_id/scsi_id.c',
+               'scsi_id/scsi_serial.c'],
+              ['v4l_id/v4l_id.c'],
+              ['mtd_probe/mtd_probe.c',
+               'mtd_probe/probe_smartmedia.c']]
 
-dmi_arches = ['x86', 'x86_64', 'aarch64', 'arm', 'ia64', 'mips']
+dmi_arches = ['x86', 'x86_64', 'aarch64', 'arm', 'ia64', 'loongarch64', 'mips']
 if dmi_arches.contains(host_machine.cpu_family())
-        udev_id_progs += [['dmi_memory_id/dmi_memory_id.c']]
+        udev_progs += [['dmi_memory_id/dmi_memory_id.c']]
 endif
 
-foreach prog : udev_id_progs
+udev_prog_paths = {}
+foreach prog : udev_progs
         name = prog[0].split('/')[0]
 
         exe = executable(
                 name,
                 prog,
                 include_directories : includes,
-                dependencies : [versiondep],
+                dependencies : versiondep,
                 link_with : udev_link_with,
                 install_rpath : udev_rpath,
                 install : true,
                 install_dir : udevlibexecdir)
 
-        # TODO: let's use a dictionary instead as soon as we can depend on meson >= 0.47.
-        if name == 'dmi_memory_id'
-                dmi_memory_id_path = exe.full_path()
-        endif
+        udev_prog_paths += {name : exe}
 endforeach
 
 if install_sysconfdir_samples
         install_data('udev.conf',
-                     install_dir : join_paths(sysconfdir, 'udev'))
+                     install_dir : sysconfdir / 'udev')
 endif
 
 custom_target(
         'udev.pc',
         input : 'udev.pc.in',
         output : 'udev.pc',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : pkgconfigdatadir != 'no',
         install_dir : pkgconfigdatadir)
 
 if install_sysconfdir
         meson.add_install_script('sh', '-c',
-                                 mkdir_p.format(join_paths(sysconfdir, 'udev/rules.d')))
+                                 mkdir_p.format(sysconfdir / 'udev/rules.d'))
 endif
 
 fuzzers += [
-        [['src/udev/net/fuzz-link-parser.c',
-          'src/fuzz/fuzz.h'],
+        [files('net/fuzz-link-parser.c'),
          [libudevd_core,
           libshared],
          [threads,
           libacl],
          udev_includes],
 
-        [['src/udev/fuzz-udev-rules.c'],
+        [files('fuzz-udev-rules.c'),
          [libudevd_core,
           libshared],
          [threads,
           libacl]],
 
-        [['src/udev/fuzz-udev-rule-parse-value.c']],
+        [files('fuzz-udev-rule-parse-value.c')],
 
-        [['src/udev/fido_id/fuzz-fido-id-desc.c',
-          'src/udev/fido_id/fido_id_desc.c']],
+        [files('fido_id/fuzz-fido-id-desc.c',
+               'fido_id/fido_id_desc.c')],
 ]
 
 tests += [
-        [['src/udev/test-udev-event.c'],
+        [files('test-udev-event.c'),
          [libudevd_core,
           libshared],
          [threads,
           libacl]],
 
-        [['src/udev/test-udev-node.c'],
+        [files('test-udev-node.c'),
          [libudevd_core,
           libshared],
          [threads,
           libacl]],
 
-        [['src/udev/test-udev-builtin.c'],
+        [files('test-udev-builtin.c'),
          [libudevd_core,
           libshared],
          [threads,
           libacl]],
 
-        [['src/udev/fido_id/test-fido-id-desc.c',
-          'src/udev/fido_id/fido_id_desc.c']],
+        [files('fido_id/test-fido-id-desc.c',
+               'fido_id/fido_id_desc.c')],
 ]
diff --git a/src/udev/mtd_probe/mtd_probe.c b/src/udev/mtd_probe/mtd_probe.c
index df1f1c1..a7210a0 100644
--- a/src/udev/mtd_probe/mtd_probe.c
+++ b/src/udev/mtd_probe/mtd_probe.c
@@ -33,7 +33,7 @@
 #include "mtd_probe.h"
 
 int main(int argc, char** argv) {
-        _cleanup_close_ int mtd_fd = -1;
+        _cleanup_close_ int mtd_fd = -EBADF;
         mtd_info_t mtd_info;
 
         if (argc != 2) {
@@ -41,7 +41,7 @@
                 return EXIT_FAILURE;
         }
 
-        mtd_fd = open(argv[1], O_RDONLY|O_CLOEXEC);
+        mtd_fd = open(argv[1], O_RDONLY|O_CLOEXEC|O_NOCTTY);
         if (mtd_fd < 0) {
                 log_error_errno(errno, "Failed to open: %m");
                 return EXIT_FAILURE;
diff --git a/src/udev/mtd_probe/probe_smartmedia.c b/src/udev/mtd_probe/probe_smartmedia.c
index f4612ba..368fab8 100644
--- a/src/udev/mtd_probe/probe_smartmedia.c
+++ b/src/udev/mtd_probe/probe_smartmedia.c
@@ -61,7 +61,7 @@
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Unexpected sector size: %i", sector_size);
 
-        switch(size_in_megs) {
+        switch (size_in_megs) {
         case 1:
         case 2:
                 spare_count = 6;
diff --git a/src/udev/net/fuzz-link-parser.c b/src/udev/net/fuzz-link-parser.c
index b871a4e..c809791 100644
--- a/src/udev/net/fuzz-link-parser.c
+++ b/src/udev/net/fuzz-link-parser.c
@@ -11,7 +11,7 @@
         _cleanup_(unlink_tempfilep) char filename[] = "/tmp/fuzz-link-config.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
 
-        if (size > 65535)
+        if (outside_size_range(size, 0, 65536))
                 return 0;
 
         if (!getenv("SYSTEMD_LOG_LEVEL"))
diff --git a/src/udev/net/fuzz-link-parser.options b/src/udev/net/fuzz-link-parser.options
index 0824b19..678d526 100644
--- a/src/udev/net/fuzz-link-parser.options
+++ b/src/udev/net/fuzz-link-parser.options
@@ -1,2 +1,2 @@
 [libfuzzer]
-max_len = 65535
+max_len = 65536
diff --git a/src/udev/net/link-config-gperf.gperf b/src/udev/net/link-config-gperf.gperf
index e2f07d7..240f16e 100644
--- a/src/udev/net/link-config-gperf.gperf
+++ b/src/udev/net/link-config-gperf.gperf
@@ -8,6 +8,7 @@
 #include "ethtool-util.h"
 #include "link-config.h"
 #include "net-condition.h"
+#include "netif-sriov.h"
 #include "socket-util.h"
 %}
 struct ConfigPerfItem;
@@ -21,54 +22,97 @@
 %struct-type
 %includes
 %%
-Match.MACAddress,                      config_parse_hwaddrs,                  0,                             offsetof(LinkConfig, match.mac)
-Match.PermanentMACAddress,             config_parse_hwaddrs,                  0,                             offsetof(LinkConfig, match.permanent_mac)
-Match.OriginalName,                    config_parse_match_ifnames,            0,                             offsetof(LinkConfig, match.ifname)
-Match.Path,                            config_parse_match_strv,               0,                             offsetof(LinkConfig, match.path)
-Match.Driver,                          config_parse_match_strv,               0,                             offsetof(LinkConfig, match.driver)
-Match.Type,                            config_parse_match_strv,               0,                             offsetof(LinkConfig, match.iftype)
-Match.Property,                        config_parse_match_property,           0,                             offsetof(LinkConfig, match.property)
-Match.Host,                            config_parse_net_condition,            CONDITION_HOST,                offsetof(LinkConfig, conditions)
-Match.Virtualization,                  config_parse_net_condition,            CONDITION_VIRTUALIZATION,      offsetof(LinkConfig, conditions)
-Match.KernelCommandLine,               config_parse_net_condition,            CONDITION_KERNEL_COMMAND_LINE, offsetof(LinkConfig, conditions)
-Match.KernelVersion,                   config_parse_net_condition,            CONDITION_KERNEL_VERSION,      offsetof(LinkConfig, conditions)
-Match.Architecture,                    config_parse_net_condition,            CONDITION_ARCHITECTURE,        offsetof(LinkConfig, conditions)
-Link.Description,                      config_parse_string,                   0,                             offsetof(LinkConfig, description)
-Link.MACAddressPolicy,                 config_parse_mac_address_policy,       0,                             offsetof(LinkConfig, mac_address_policy)
-Link.MACAddress,                       config_parse_hwaddr,                   0,                             offsetof(LinkConfig, mac)
-Link.NamePolicy,                       config_parse_name_policy,              0,                             offsetof(LinkConfig, name_policy)
-Link.Name,                             config_parse_ifname,                   0,                             offsetof(LinkConfig, name)
-Link.AlternativeName,                  config_parse_ifnames,                  IFNAME_VALID_ALTERNATIVE,      offsetof(LinkConfig, alternative_names)
-Link.AlternativeNamesPolicy,           config_parse_alternative_names_policy, 0,                             offsetof(LinkConfig, alternative_names_policy)
-Link.Alias,                            config_parse_ifalias,                  0,                             offsetof(LinkConfig, alias)
-Link.TransmitQueues,                   config_parse_rx_tx_queues,             0,                             offsetof(LinkConfig, txqueues)
-Link.ReceiveQueues,                    config_parse_rx_tx_queues,             0,                             offsetof(LinkConfig, rxqueues)
-Link.TransmitQueueLength,              config_parse_txqueuelen,               0,                             offsetof(LinkConfig, txqueuelen)
-Link.MTUBytes,                         config_parse_mtu,                      AF_UNSPEC,                     offsetof(LinkConfig, mtu)
-Link.BitsPerSecond,                    config_parse_si_uint64,                0,                             offsetof(LinkConfig, speed)
-Link.Duplex,                           config_parse_duplex,                   0,                             offsetof(LinkConfig, duplex)
-Link.AutoNegotiation,                  config_parse_tristate,                 0,                             offsetof(LinkConfig, autonegotiation)
-Link.WakeOnLan,                        config_parse_wol,                      0,                             offsetof(LinkConfig, wol)
-Link.Port,                             config_parse_port,                     0,                             offsetof(LinkConfig, port)
-Link.ReceiveChecksumOffload,           config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_RX])
-Link.TransmitChecksumOffload,          config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_TX])
-Link.GenericSegmentationOffload,       config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_GSO])
-Link.TCPSegmentationOffload,           config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_TSO])
-Link.TCP6SegmentationOffload,          config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_TSO6])
-Link.UDPSegmentationOffload,           config_parse_warn_compat,              DISABLED_LEGACY,               0
-Link.GenericReceiveOffload,            config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_GRO])
-Link.LargeReceiveOffload,              config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_LRO])
-Link.RxChannels,                       config_parse_channel,                  0,                             offsetof(LinkConfig, channels)
-Link.TxChannels,                       config_parse_channel,                  0,                             offsetof(LinkConfig, channels)
-Link.OtherChannels,                    config_parse_channel,                  0,                             offsetof(LinkConfig, channels)
-Link.CombinedChannels,                 config_parse_channel,                  0,                             offsetof(LinkConfig, channels)
-Link.Advertise,                        config_parse_advertise,                0,                             offsetof(LinkConfig, advertise)
-Link.RxBufferSize,                     config_parse_nic_buffer_size,          0,                             offsetof(LinkConfig, ring)
-Link.RxMiniBufferSize,                 config_parse_nic_buffer_size,          0,                             offsetof(LinkConfig, ring)
-Link.RxJumboBufferSize,                config_parse_nic_buffer_size,          0,                             offsetof(LinkConfig, ring)
-Link.TxBufferSize,                     config_parse_nic_buffer_size,          0,                             offsetof(LinkConfig, ring)
-Link.RxFlowControl,                    config_parse_tristate,                 0,                             offsetof(LinkConfig, rx_flow_control)
-Link.TxFlowControl,                    config_parse_tristate,                 0,                             offsetof(LinkConfig, tx_flow_control)
-Link.AutoNegotiationFlowControl,       config_parse_tristate,                 0,                             offsetof(LinkConfig, autoneg_flow_control)
-Link.GenericSegmentOffloadMaxBytes,    config_parse_iec_size,                 0,                             offsetof(LinkConfig, gso_max_size)
-Link.GenericSegmentOffloadMaxSegments, config_parse_uint32,                   0,                             offsetof(LinkConfig, gso_max_segments)
+Match.MACAddress,                          config_parse_hw_addrs,                 0,                             offsetof(LinkConfig, match.hw_addr)
+Match.PermanentMACAddress,                 config_parse_hw_addrs,                 0,                             offsetof(LinkConfig, match.permanent_hw_addr)
+Match.OriginalName,                        config_parse_match_ifnames,            0,                             offsetof(LinkConfig, match.ifname)
+Match.Path,                                config_parse_match_strv,               0,                             offsetof(LinkConfig, match.path)
+Match.Driver,                              config_parse_match_strv,               0,                             offsetof(LinkConfig, match.driver)
+Match.Type,                                config_parse_match_strv,               0,                             offsetof(LinkConfig, match.iftype)
+Match.Kind,                                config_parse_match_strv,               0,                             offsetof(LinkConfig, match.kind)
+Match.Property,                            config_parse_match_property,           0,                             offsetof(LinkConfig, match.property)
+Match.Host,                                config_parse_net_condition,            CONDITION_HOST,                offsetof(LinkConfig, conditions)
+Match.Virtualization,                      config_parse_net_condition,            CONDITION_VIRTUALIZATION,      offsetof(LinkConfig, conditions)
+Match.KernelCommandLine,                   config_parse_net_condition,            CONDITION_KERNEL_COMMAND_LINE, offsetof(LinkConfig, conditions)
+Match.KernelVersion,                       config_parse_net_condition,            CONDITION_KERNEL_VERSION,      offsetof(LinkConfig, conditions)
+Match.Credential,                          config_parse_net_condition,            CONDITION_CREDENTIAL,          offsetof(LinkConfig, conditions)
+Match.Architecture,                        config_parse_net_condition,            CONDITION_ARCHITECTURE,        offsetof(LinkConfig, conditions)
+Match.Firmware,                            config_parse_net_condition,            CONDITION_FIRMWARE,            offsetof(LinkConfig, conditions)
+Link.Description,                          config_parse_string,                   0,                             offsetof(LinkConfig, description)
+Link.MACAddressPolicy,                     config_parse_mac_address_policy,       0,                             offsetof(LinkConfig, mac_address_policy)
+Link.MACAddress,                           config_parse_hw_addr,                  0,                             offsetof(LinkConfig, hw_addr)
+Link.NamePolicy,                           config_parse_name_policy,              0,                             offsetof(LinkConfig, name_policy)
+Link.Name,                                 config_parse_ifname,                   0,                             offsetof(LinkConfig, name)
+Link.AlternativeName,                      config_parse_ifnames,                  IFNAME_VALID_ALTERNATIVE,      offsetof(LinkConfig, alternative_names)
+Link.AlternativeNamesPolicy,               config_parse_alternative_names_policy, 0,                             offsetof(LinkConfig, alternative_names_policy)
+Link.Alias,                                config_parse_ifalias,                  0,                             offsetof(LinkConfig, alias)
+Link.TransmitQueues,                       config_parse_rx_tx_queues,             0,                             offsetof(LinkConfig, txqueues)
+Link.ReceiveQueues,                        config_parse_rx_tx_queues,             0,                             offsetof(LinkConfig, rxqueues)
+Link.TransmitQueueLength,                  config_parse_txqueuelen,               0,                             offsetof(LinkConfig, txqueuelen)
+Link.MTUBytes,                             config_parse_mtu,                      AF_UNSPEC,                     offsetof(LinkConfig, mtu)
+Link.BitsPerSecond,                        config_parse_si_uint64,                0,                             offsetof(LinkConfig, speed)
+Link.Duplex,                               config_parse_duplex,                   0,                             offsetof(LinkConfig, duplex)
+Link.AutoNegotiation,                      config_parse_tristate,                 0,                             offsetof(LinkConfig, autonegotiation)
+Link.WakeOnLan,                            config_parse_wol,                      0,                             offsetof(LinkConfig, wol)
+Link.WakeOnLanPassword,                    config_parse_wol_password,             0,                             0
+Link.Port,                                 config_parse_port,                     0,                             offsetof(LinkConfig, port)
+Link.ReceiveChecksumOffload,               config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_RXCSUM])
+Link.TransmitChecksumOffload,              config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_TXCSUM])
+Link.GenericSegmentationOffload,           config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_GSO])
+Link.TCPSegmentationOffload,               config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_TSO])
+Link.TCP6SegmentationOffload,              config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_TSO6])
+Link.UDPSegmentationOffload,               config_parse_warn_compat,              DISABLED_LEGACY,               0
+Link.GenericReceiveOffload,                config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_GRO])
+Link.GenericReceiveOffloadHardware,        config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_GRO_HW])
+Link.LargeReceiveOffload,                  config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_LRO])
+Link.ReceiveVLANCTAGHardwareAcceleration,  config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_HW_VLAN_CTAG_RX])
+Link.TransmitVLANCTAGHardwareAcceleration, config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_HW_VLAN_CTAG_TX])
+Link.ReceiveVLANCTAGFilter,                config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_HW_VLAN_CTAG_FILTER])
+Link.TransmitVLANSTAGHardwareAcceleration, config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_HW_VLAN_STAG_TX])
+Link.NTupleFilter,                         config_parse_tristate,                 0,                             offsetof(LinkConfig, features[NET_DEV_FEAT_NTUPLE])
+Link.RxChannels,                           config_parse_ring_buffer_or_channel,   0,                             offsetof(LinkConfig, channels.rx)
+Link.TxChannels,                           config_parse_ring_buffer_or_channel,   0,                             offsetof(LinkConfig, channels.tx)
+Link.OtherChannels,                        config_parse_ring_buffer_or_channel,   0,                             offsetof(LinkConfig, channels.other)
+Link.CombinedChannels,                     config_parse_ring_buffer_or_channel,   0,                             offsetof(LinkConfig, channels.combined)
+Link.Advertise,                            config_parse_advertise,                0,                             offsetof(LinkConfig, advertise)
+Link.RxBufferSize,                         config_parse_ring_buffer_or_channel,   0,                             offsetof(LinkConfig, ring.rx)
+Link.RxMiniBufferSize,                     config_parse_ring_buffer_or_channel,   0,                             offsetof(LinkConfig, ring.rx_mini)
+Link.RxJumboBufferSize,                    config_parse_ring_buffer_or_channel,   0,                             offsetof(LinkConfig, ring.rx_jumbo)
+Link.TxBufferSize,                         config_parse_ring_buffer_or_channel,   0,                             offsetof(LinkConfig, ring.tx)
+Link.RxFlowControl,                        config_parse_tristate,                 0,                             offsetof(LinkConfig, rx_flow_control)
+Link.TxFlowControl,                        config_parse_tristate,                 0,                             offsetof(LinkConfig, tx_flow_control)
+Link.AutoNegotiationFlowControl,           config_parse_tristate,                 0,                             offsetof(LinkConfig, autoneg_flow_control)
+Link.GenericSegmentOffloadMaxBytes,        config_parse_iec_size,                 0,                             offsetof(LinkConfig, gso_max_size)
+Link.GenericSegmentOffloadMaxSegments,     config_parse_uint32,                   0,                             offsetof(LinkConfig, gso_max_segments)
+Link.RxCoalesceSec,                        config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.rx_coalesce_usecs)
+Link.RxMaxCoalescedFrames,                 config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.rx_max_coalesced_frames)
+Link.RxCoalesceIrqSec,                     config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.rx_coalesce_usecs_irq)
+Link.RxMaxCoalescedIrqFrames,              config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.rx_max_coalesced_frames_irq)
+Link.TxCoalesceSec,                        config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.tx_coalesce_usecs)
+Link.TxMaxCoalescedFrames,                 config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.tx_max_coalesced_frames)
+Link.TxCoalesceIrqSec,                     config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.tx_coalesce_usecs_irq)
+Link.TxMaxCoalescedIrqFrames,              config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.tx_max_coalesced_frames_irq)
+Link.StatisticsBlockCoalesceSec,           config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.stats_block_coalesce_usecs)
+Link.UseAdaptiveRxCoalesce,                config_parse_tristate,                 0,                             offsetof(LinkConfig, coalesce.use_adaptive_rx_coalesce)
+Link.UseAdaptiveTxCoalesce,                config_parse_tristate,                 0,                             offsetof(LinkConfig, coalesce.use_adaptive_tx_coalesce)
+Link.CoalescePacketRateLow,                config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.pkt_rate_low)
+Link.RxCoalesceLowSec,                     config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.rx_coalesce_usecs_low)
+Link.RxMaxCoalescedLowFrames,              config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.rx_max_coalesced_frames_low)
+Link.TxCoalesceLowSec,                     config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.tx_coalesce_usecs_low)
+Link.TxMaxCoalescedLowFrames,              config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.tx_max_coalesced_frames_low)
+Link.CoalescePacketRateHigh,               config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.pkt_rate_high)
+Link.RxCoalesceHighSec,                    config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.rx_coalesce_usecs_high)
+Link.RxMaxCoalescedHighFrames,             config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.rx_max_coalesced_frames_high)
+Link.TxCoalesceHighSec,                    config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.tx_coalesce_usecs_high)
+Link.TxMaxCoalescedHighFrames,             config_parse_coalesce_u32,             0,                             offsetof(LinkConfig, coalesce.tx_max_coalesced_frames_high)
+Link.CoalescePacketRateSampleIntervalSec,  config_parse_coalesce_sec,             0,                             offsetof(LinkConfig, coalesce.rate_sample_interval)
+Link.MDI,                                  config_parse_mdi,                      0,                             offsetof(LinkConfig, mdi)
+Link.SR-IOVVirtualFunctions,               config_parse_sr_iov_num_vfs,           0,                             offsetof(LinkConfig, sr_iov_num_vfs)
+SR-IOV.VirtualFunction,                    config_parse_sr_iov_uint32,            0,                             offsetof(LinkConfig, sr_iov_by_section)
+SR-IOV.VLANId,                             config_parse_sr_iov_uint32,            0,                             offsetof(LinkConfig, sr_iov_by_section)
+SR-IOV.QualityOfService,                   config_parse_sr_iov_uint32,            0,                             offsetof(LinkConfig, sr_iov_by_section)
+SR-IOV.VLANProtocol,                       config_parse_sr_iov_vlan_proto,        0,                             offsetof(LinkConfig, sr_iov_by_section)
+SR-IOV.MACSpoofCheck,                      config_parse_sr_iov_boolean,           0,                             offsetof(LinkConfig, sr_iov_by_section)
+SR-IOV.QueryReceiveSideScaling,            config_parse_sr_iov_boolean,           0,                             offsetof(LinkConfig, sr_iov_by_section)
+SR-IOV.Trust,                              config_parse_sr_iov_boolean,           0,                             offsetof(LinkConfig, sr_iov_by_section)
+SR-IOV.LinkState,                          config_parse_sr_iov_link_state,        0,                             offsetof(LinkConfig, sr_iov_by_section)
+SR-IOV.MACAddress,                         config_parse_sr_iov_mac,               0,                             offsetof(LinkConfig, sr_iov_by_section)
diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
index dc6051c..0bea6f1 100644
--- a/src/udev/net/link-config.c
+++ b/src/udev/net/link-config.c
@@ -8,20 +8,23 @@
 #include "sd-netlink.h"
 
 #include "alloc-util.h"
+#include "arphrd-util.h"
 #include "conf-files.h"
 #include "conf-parser.h"
-#include "def.h"
+#include "constants.h"
+#include "creds-util.h"
 #include "device-private.h"
 #include "device-util.h"
 #include "ethtool-util.h"
 #include "fd-util.h"
+#include "fileio.h"
 #include "link-config.h"
-#include "log.h"
+#include "log-link.h"
 #include "memory-util.h"
 #include "net-condition.h"
-#include "netif-naming-scheme.h"
+#include "netif-sriov.h"
+#include "netif-util.h"
 #include "netlink-util.h"
-#include "network-util.h"
 #include "parse-util.h"
 #include "path-lookup.h"
 #include "path-util.h"
@@ -34,43 +37,45 @@
 #include "utf8.h"
 
 struct LinkConfigContext {
-        LIST_HEAD(LinkConfig, links);
+        LIST_HEAD(LinkConfig, configs);
         int ethtool_fd;
-        bool enable_name_policy;
-        sd_netlink *rtnl;
-        usec_t network_dirs_ts_usec;
+        Hashmap *stats_by_path;
 };
 
-static LinkConfig* link_config_free(LinkConfig *link) {
-        if (!link)
+static LinkConfig* link_config_free(LinkConfig *config) {
+        if (!config)
                 return NULL;
 
-        free(link->filename);
+        free(config->filename);
+        strv_free(config->dropins);
 
-        net_match_clear(&link->match);
-        condition_free_list(link->conditions);
+        net_match_clear(&config->match);
+        condition_free_list(config->conditions);
 
-        free(link->description);
-        free(link->mac);
-        free(link->name_policy);
-        free(link->name);
-        strv_free(link->alternative_names);
-        free(link->alternative_names_policy);
-        free(link->alias);
+        free(config->description);
+        free(config->name_policy);
+        free(config->name);
+        strv_free(config->alternative_names);
+        free(config->alternative_names_policy);
+        free(config->alias);
+        free(config->wol_password_file);
+        erase_and_free(config->wol_password);
 
-        return mfree(link);
+        ordered_hashmap_free_with_destructor(config->sr_iov_by_section, sr_iov_free);
+
+        return mfree(config);
 }
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(LinkConfig*, link_config_free);
 
 static void link_configs_free(LinkConfigContext *ctx) {
-        LinkConfig *link, *link_next;
-
         if (!ctx)
                 return;
 
-        LIST_FOREACH_SAFE(links, link, link_next, ctx->links)
-                link_config_free(link);
+        ctx->stats_by_path = hashmap_free(ctx->stats_by_path);
+
+        LIST_FOREACH(configs, config, ctx->configs)
+                link_config_free(config);
 }
 
 LinkConfigContext *link_config_ctx_free(LinkConfigContext *ctx) {
@@ -78,7 +83,6 @@
                 return NULL;
 
         safe_close(ctx->ethtool_fd);
-        sd_netlink_unref(ctx->rtnl);
         link_configs_free(ctx);
         return mfree(ctx);
 }
@@ -94,8 +98,7 @@
                 return -ENOMEM;
 
         *ctx = (LinkConfigContext) {
-                .ethtool_fd = -1,
-                .enable_name_policy = true,
+                .ethtool_fd = -EBADF,
         };
 
         *ret = TAKE_PTR(ctx);
@@ -103,8 +106,111 @@
         return 0;
 }
 
+static int link_parse_wol_password(LinkConfig *config, const char *str) {
+        _cleanup_(erase_and_freep) uint8_t *p = NULL;
+        int r;
+
+        assert(config);
+        assert(str);
+
+        assert_cc(sizeof(struct ether_addr) == SOPASS_MAX);
+
+        p = new(uint8_t, SOPASS_MAX);
+        if (!p)
+                return -ENOMEM;
+
+        /* Reuse parse_ether_addr(), as their formats are equivalent. */
+        r = parse_ether_addr(str, (struct ether_addr*) p);
+        if (r < 0)
+                return r;
+
+        erase_and_free(config->wol_password);
+        config->wol_password = TAKE_PTR(p);
+        return 0;
+}
+
+static int link_read_wol_password_from_file(LinkConfig *config) {
+        _cleanup_(erase_and_freep) char *password = NULL;
+        int r;
+
+        assert(config);
+
+        if (!config->wol_password_file)
+                return 0;
+
+        r = read_full_file_full(
+                        AT_FDCWD, config->wol_password_file, UINT64_MAX, SIZE_MAX,
+                        READ_FULL_FILE_SECURE | READ_FULL_FILE_WARN_WORLD_READABLE | READ_FULL_FILE_CONNECT_SOCKET,
+                        NULL, &password, NULL);
+        if (r < 0)
+                return r;
+
+        return link_parse_wol_password(config, password);
+}
+
+static int link_read_wol_password_from_cred(LinkConfig *config) {
+        _cleanup_free_ char *base = NULL, *cred_name = NULL;
+        _cleanup_(erase_and_freep) char *password = NULL;
+        int r;
+
+        assert(config);
+        assert(config->filename);
+
+        if (config->wol == UINT32_MAX)
+                return 0; /* WakeOnLan= is not specified. */
+        if (!FLAGS_SET(config->wol, WAKE_MAGICSECURE))
+                return 0; /* secureon is not specified in WakeOnLan=. */
+        if (config->wol_password)
+                return 0; /* WakeOnLanPassword= is specified. */
+        if (config->wol_password_file)
+                return 0; /* a file name is specified in WakeOnLanPassword=, but failed to read it. */
+
+        r = path_extract_filename(config->filename, &base);
+        if (r < 0)
+                return r;
+
+        cred_name = strjoin(base, ".wol.password");
+        if (!cred_name)
+                return -ENOMEM;
+
+        r = read_credential(cred_name, (void**) &password, NULL);
+        if (r == -ENOENT)
+                r = read_credential("wol.password", (void**) &password, NULL);
+        if (r < 0)
+                return r;
+
+        return link_parse_wol_password(config, password);
+}
+
+static int link_adjust_wol_options(LinkConfig *config) {
+        int r;
+
+        assert(config);
+
+        r = link_read_wol_password_from_file(config);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0)
+                log_warning_errno(r, "Failed to read WakeOnLan password from %s, ignoring: %m", config->wol_password_file);
+
+        r = link_read_wol_password_from_cred(config);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0)
+                log_warning_errno(r, "Failed to read WakeOnLan password from credential, ignoring: %m");
+
+        if (config->wol != UINT32_MAX && config->wol_password)
+                /* Enable WAKE_MAGICSECURE flag when WakeOnLanPassword=. Note that when
+                 * WakeOnLanPassword= is set without WakeOnLan=, then ethtool_set_wol() enables
+                 * WAKE_MAGICSECURE flag and other flags are not changed. */
+                config->wol |= WAKE_MAGICSECURE;
+
+        return 0;
+}
+
 int link_load_one(LinkConfigContext *ctx, const char *filename) {
-        _cleanup_(link_config_freep) LinkConfig *link = NULL;
+        _cleanup_(link_config_freep) LinkConfig *config = NULL;
+        _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL;
         _cleanup_free_ char *name = NULL;
         const char *dropin_dirname;
         size_t i;
@@ -114,10 +220,8 @@
         assert(filename);
 
         r = null_or_empty_path(filename);
-        if (r == -ENOENT)
-                return 0;
         if (r < 0)
-                return r;
+                return log_warning_errno(r, "Failed to check if \"%s\" is empty: %m", filename);
         if (r > 0) {
                 log_debug("Skipping empty file: %s", filename);
                 return 0;
@@ -125,15 +229,15 @@
 
         name = strdup(filename);
         if (!name)
-                return -ENOMEM;
+                return log_oom();
 
-        link = new(LinkConfig, 1);
-        if (!link)
-                return -ENOMEM;
+        config = new(LinkConfig, 1);
+        if (!config)
+                return log_oom();
 
-        *link = (LinkConfig) {
+        *config = (LinkConfig) {
                 .filename = TAKE_PTR(name),
-                .mac_address_policy = _MAC_ADDRESS_POLICY_INVALID,
+                .mac_address_policy = MAC_ADDRESS_POLICY_NONE,
                 .wol = UINT32_MAX, /* UINT32_MAX means do not change WOL setting. */
                 .duplex = _DUP_INVALID,
                 .port = _NET_DEV_PORT_INVALID,
@@ -142,54 +246,69 @@
                 .tx_flow_control = -1,
                 .autoneg_flow_control = -1,
                 .txqueuelen = UINT32_MAX,
+                .coalesce.use_adaptive_rx_coalesce = -1,
+                .coalesce.use_adaptive_tx_coalesce = -1,
+                .mdi = ETH_TP_MDI_INVALID,
+                .sr_iov_num_vfs = UINT32_MAX,
         };
 
-        for (i = 0; i < ELEMENTSOF(link->features); i++)
-                link->features[i] = -1;
+        for (i = 0; i < ELEMENTSOF(config->features); i++)
+                config->features[i] = -1;
 
         dropin_dirname = strjoina(basename(filename), ".d");
         r = config_parse_many(
                         STRV_MAKE_CONST(filename),
-                        (const char* const*) CONF_PATHS_STRV("systemd/network"),
+                        NETWORK_DIRS,
                         dropin_dirname,
-                        "Match\0Link\0",
+                        "Match\0"
+                        "Link\0"
+                        "SR-IOV\0",
                         config_item_perf_lookup, link_config_gperf_lookup,
-                        CONFIG_PARSE_WARN, link, NULL);
+                        CONFIG_PARSE_WARN, config, &stats_by_path,
+                        &config->dropins);
         if (r < 0)
-                return r;
+                return r; /* config_parse_many() logs internally. */
 
-        if (net_match_is_empty(&link->match) && !link->conditions) {
+        if (ctx->stats_by_path) {
+                r = hashmap_move(ctx->stats_by_path, stats_by_path);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to save stats of '%s' and its drop-in configs, ignoring: %m", filename);
+        } else
+                ctx->stats_by_path = TAKE_PTR(stats_by_path);
+
+        if (net_match_is_empty(&config->match) && !config->conditions) {
                 log_warning("%s: No valid settings found in the [Match] section, ignoring file. "
                             "To match all interfaces, add OriginalName=* in the [Match] section.",
                             filename);
                 return 0;
         }
 
-        if (!condition_test_list(link->conditions, environ, NULL, NULL, NULL)) {
+        if (!condition_test_list(config->conditions, environ, NULL, NULL, NULL)) {
                 log_debug("%s: Conditions do not match the system environment, skipping.", filename);
                 return 0;
         }
 
-        if (IN_SET(link->mac_address_policy, MAC_ADDRESS_POLICY_PERSISTENT, MAC_ADDRESS_POLICY_RANDOM) && link->mac) {
+        if (IN_SET(config->mac_address_policy, MAC_ADDRESS_POLICY_PERSISTENT, MAC_ADDRESS_POLICY_RANDOM) &&
+            config->hw_addr.length > 0)
                 log_warning("%s: MACAddress= in [Link] section will be ignored when MACAddressPolicy= "
                             "is set to \"persistent\" or \"random\".",
                             filename);
-                link->mac = mfree(link->mac);
-        }
 
-        log_debug("Parsed configuration file %s", filename);
+        r = link_adjust_wol_options(config);
+        if (r < 0)
+                return r; /* link_adjust_wol_options() logs internally. */
 
-        LIST_PREPEND(links, ctx->links, TAKE_PTR(link));
+        r = sr_iov_drop_invalid_sections(config->sr_iov_num_vfs, config->sr_iov_by_section);
+        if (r < 0)
+                return r; /* sr_iov_drop_invalid_sections() logs internally. */
+
+        log_debug("Parsed configuration file \"%s\"", filename);
+
+        LIST_PREPEND(configs, ctx->configs, TAKE_PTR(config));
         return 0;
 }
 
-static bool enable_name_policy(void) {
-        bool b;
-
-        return proc_cmdline_get_bool("net.ifnames", &b) <= 0 || b;
-}
-
-static int link_unsigned_attribute(sd_device *device, const char *attr, unsigned *type) {
+static int device_unsigned_attribute(sd_device *device, const char *attr, unsigned *type) {
         const char *s;
         int r;
 
@@ -207,283 +326,434 @@
 
 int link_config_load(LinkConfigContext *ctx) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
+        assert(ctx);
+
         link_configs_free(ctx);
 
-        if (!enable_name_policy()) {
-                ctx->enable_name_policy = false;
-                log_info("Network interface NamePolicy= disabled on kernel command line, ignoring.");
-        }
-
-        /* update timestamp */
-        paths_check_timestamp(NETWORK_DIRS, &ctx->network_dirs_ts_usec, true);
-
         r = conf_files_list_strv(&files, ".link", NULL, 0, NETWORK_DIRS);
         if (r < 0)
                 return log_error_errno(r, "failed to enumerate link files: %m");
 
-        STRV_FOREACH_BACKWARDS(f, files) {
-                r = link_load_one(ctx, *f);
-                if (r < 0)
-                        log_error_errno(r, "Failed to load %s, ignoring: %m", *f);
-        }
+        STRV_FOREACH_BACKWARDS(f, files)
+                (void) link_load_one(ctx, *f);
 
         return 0;
 }
 
 bool link_config_should_reload(LinkConfigContext *ctx) {
-        return paths_check_timestamp(NETWORK_DIRS, &ctx->network_dirs_ts_usec, false);
-}
-
-int link_config_get(LinkConfigContext *ctx, sd_device *device, LinkConfig **ret) {
-        unsigned name_assign_type = NET_NAME_UNKNOWN;
-        struct ether_addr permanent_mac = {};
-        unsigned short iftype;
-        LinkConfig *link;
-        const char *name;
-        unsigned flags;
-        int ifindex, r;
+        _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL;
+        int r;
 
         assert(ctx);
+
+        r = config_get_stats_by_path(".link", NULL, 0, NETWORK_DIRS, /* check_dropins = */ true, &stats_by_path);
+        if (r < 0) {
+                log_warning_errno(r, "Failed to get stats of .link files, ignoring: %m");
+                return true;
+        }
+
+        return !stats_by_path_equal(ctx->stats_by_path, stats_by_path);
+}
+
+Link *link_free(Link *link) {
+        if (!link)
+                return NULL;
+
+        sd_device_unref(link->device);
+        free(link->kind);
+        free(link->driver);
+        return mfree(link);
+}
+
+int link_new(LinkConfigContext *ctx, sd_netlink **rtnl, sd_device *device, Link **ret) {
+        _cleanup_(link_freep) Link *link = NULL;
+        int r;
+
+        assert(ctx);
+        assert(rtnl);
         assert(device);
         assert(ret);
 
-        r = sd_device_get_sysname(device, &name);
+        link = new(Link, 1);
+        if (!link)
+                return -ENOMEM;
+
+        *link = (Link) {
+                .device = sd_device_ref(device),
+        };
+
+        r = sd_device_get_sysname(device, &link->ifname);
         if (r < 0)
                 return r;
 
-        r = sd_device_get_ifindex(device, &ifindex);
+        r = sd_device_get_ifindex(device, &link->ifindex);
         if (r < 0)
                 return r;
 
-        r = rtnl_get_link_info(&ctx->rtnl, ifindex, &iftype, &flags);
+        r = sd_device_get_action(device, &link->action);
         if (r < 0)
                 return r;
 
+        r = device_unsigned_attribute(device, "name_assign_type", &link->name_assign_type);
+        if (r < 0)
+                log_link_debug_errno(link, r, "Failed to get \"name_assign_type\" attribute, ignoring: %m");
+
+        r = device_unsigned_attribute(device, "addr_assign_type", &link->addr_assign_type);
+        if (r < 0)
+                log_link_debug_errno(link, r, "Failed to get \"addr_assign_type\" attribute, ignoring: %m");
+
+        r = rtnl_get_link_info(rtnl, link->ifindex, &link->iftype, &link->flags,
+                               &link->kind, &link->hw_addr, &link->permanent_hw_addr);
+        if (r < 0)
+                return r;
+
+        if (link->hw_addr.length > 0 && link->permanent_hw_addr.length == 0) {
+                r = ethtool_get_permanent_hw_addr(&ctx->ethtool_fd, link->ifname, &link->permanent_hw_addr);
+                if (r < 0)
+                        log_link_debug_errno(link, r, "Failed to get permanent hardware address, ignoring: %m");
+        }
+
+        r = ethtool_get_driver(&ctx->ethtool_fd, link->ifname, &link->driver);
+        if (r < 0)
+                log_link_debug_errno(link, r, "Failed to get driver, ignoring: %m");
+
+        *ret = TAKE_PTR(link);
+        return 0;
+}
+
+int link_get_config(LinkConfigContext *ctx, Link *link) {
+        int r;
+
+        assert(ctx);
+        assert(link);
+
         /* Do not configure loopback interfaces by .link files. */
-        if (flags & IFF_LOOPBACK)
+        if (link->flags & IFF_LOOPBACK)
                 return -ENOENT;
 
-        r = ethtool_get_permanent_macaddr(&ctx->ethtool_fd, name, &permanent_mac);
-        if (r < 0)
-                log_device_debug_errno(device, r, "Failed to get permanent MAC address, ignoring: %m");
-
-        (void) link_unsigned_attribute(device, "name_assign_type", &name_assign_type);
-
-        LIST_FOREACH(links, link, ctx->links) {
-                r = net_match_config(&link->match, device, NULL, &permanent_mac, NULL, iftype, NULL, NULL, 0, NULL, NULL);
+        LIST_FOREACH(configs, config, ctx->configs) {
+                r = net_match_config(
+                                &config->match,
+                                link->device,
+                                &link->hw_addr,
+                                &link->permanent_hw_addr,
+                                link->driver,
+                                link->iftype,
+                                link->kind,
+                                link->ifname,
+                                /* alternative_names = */ NULL,
+                                /* wlan_iftype = */ 0,
+                                /* ssid = */ NULL,
+                                /* bssid = */ NULL);
                 if (r < 0)
                         return r;
                 if (r == 0)
                         continue;
 
-                if (link->match.ifname && !strv_contains(link->match.ifname, "*") && name_assign_type == NET_NAME_ENUM)
-                        log_device_warning(device, "Config file %s is applied to device based on potentially unpredictable interface name.",
-                                           link->filename);
+                if (config->match.ifname && !strv_contains(config->match.ifname, "*") && link->name_assign_type == NET_NAME_ENUM)
+                        log_link_warning(link, "Config file %s is applied to device based on potentially unpredictable interface name.",
+                                         config->filename);
                 else
-                        log_device_debug(device, "Config file %s is applied", link->filename);
+                        log_link_debug(link, "Config file %s is applied", config->filename);
 
-                *ret = link;
+                link->config = config;
                 return 0;
         }
 
         return -ENOENT;
 }
 
-static int link_config_apply_ethtool_settings(int *ethtool_fd, const LinkConfig *config, sd_device *device) {
+static int link_apply_ethtool_settings(Link *link, int *ethtool_fd) {
+        LinkConfig *config;
         const char *name;
         int r;
 
+        assert(link);
+        assert(link->config);
         assert(ethtool_fd);
-        assert(config);
-        assert(device);
 
-        r = sd_device_get_sysname(device, &name);
-        if (r < 0)
-                return log_device_error_errno(device, r, "Failed to get sysname: %m");
+        config = link->config;
+        name = link->ifname;
 
         r = ethtool_set_glinksettings(ethtool_fd, name,
                                       config->autonegotiation, config->advertise,
-                                      config->speed, config->duplex, config->port);
+                                      config->speed, config->duplex, config->port, config->mdi);
         if (r < 0) {
                 if (config->autonegotiation >= 0)
-                        log_device_warning_errno(device, r, "Could not %s auto negotiation, ignoring: %m",
-                                                 enable_disable(config->autonegotiation));
+                        log_link_warning_errno(link, r, "Could not %s auto negotiation, ignoring: %m",
+                                               enable_disable(config->autonegotiation));
 
                 if (!eqzero(config->advertise))
-                        log_device_warning_errno(device, r, "Could not set advertise mode, ignoring: %m");
+                        log_link_warning_errno(link, r, "Could not set advertise mode, ignoring: %m");
 
                 if (config->speed > 0)
-                        log_device_warning_errno(device, r, "Could not set speed to %"PRIu64"Mbps, ignoring: %m",
-                                                 DIV_ROUND_UP(config->speed, 1000000));
+                        log_link_warning_errno(link, r, "Could not set speed to %"PRIu64"Mbps, ignoring: %m",
+                                               DIV_ROUND_UP(config->speed, 1000000));
 
                 if (config->duplex >= 0)
-                        log_device_warning_errno(device, r, "Could not set duplex to %s, ignoring: %m",
-                                                 duplex_to_string(config->duplex));
+                        log_link_warning_errno(link, r, "Could not set duplex to %s, ignoring: %m",
+                                               duplex_to_string(config->duplex));
 
                 if (config->port >= 0)
-                        log_device_warning_errno(device, r, "Could not set port to '%s', ignoring: %m",
-                                                 port_to_string(config->port));
+                        log_link_warning_errno(link, r, "Could not set port to '%s', ignoring: %m",
+                                               port_to_string(config->port));
+
+                if (config->mdi != ETH_TP_MDI_INVALID)
+                        log_link_warning_errno(link, r, "Could not set MDI-X to '%s', ignoring: %m",
+                                               mdi_to_string(config->mdi));
         }
 
-        r = ethtool_set_wol(ethtool_fd, name, config->wol);
+        r = ethtool_set_wol(ethtool_fd, name, config->wol, config->wol_password);
         if (r < 0) {
                 _cleanup_free_ char *str = NULL;
 
                 (void) wol_options_to_string_alloc(config->wol, &str);
-                log_device_warning_errno(device, r, "Could not set WakeOnLan to %s, ignoring: %m",
-                                         strna(str));
+                log_link_warning_errno(link, r, "Could not set WakeOnLan%s%s, ignoring: %m",
+                                       isempty(str) ? "" : " to ", strempty(str));
         }
 
         r = ethtool_set_features(ethtool_fd, name, config->features);
         if (r < 0)
-                log_device_warning_errno(device, r, "Could not set offload features, ignoring: %m");
+                log_link_warning_errno(link, r, "Could not set offload features, ignoring: %m");
 
         r = ethtool_set_channels(ethtool_fd, name, &config->channels);
         if (r < 0)
-                log_device_warning_errno(device, r, "Could not set channels, ignoring: %m");
+                log_link_warning_errno(link, r, "Could not set channels, ignoring: %m");
 
         r = ethtool_set_nic_buffer_size(ethtool_fd, name, &config->ring);
         if (r < 0)
-                log_device_warning_errno(device, r, "Could not set ring buffer, ignoring: %m");
+                log_link_warning_errno(link, r, "Could not set ring buffer, ignoring: %m");
 
         r = ethtool_set_flow_control(ethtool_fd, name, config->rx_flow_control, config->tx_flow_control, config->autoneg_flow_control);
         if (r < 0)
-                log_device_warning_errno(device, r, "Could not set flow control, ignoring: %m");
+                log_link_warning_errno(link, r, "Could not set flow control, ignoring: %m");
+
+        r = ethtool_set_nic_coalesce_settings(ethtool_fd, name, &config->coalesce);
+        if (r < 0)
+                log_link_warning_errno(link, r, "Could not set coalesce settings, ignoring: %m");
 
         return 0;
 }
 
-static int get_mac(sd_device *device, MACAddressPolicy policy, struct ether_addr *mac) {
-        unsigned addr_type;
-        bool want_random = policy == MAC_ADDRESS_POLICY_RANDOM;
+static bool hw_addr_is_valid(Link *link, const struct hw_addr_data *hw_addr) {
+        assert(link);
+        assert(hw_addr);
+
+        switch (link->iftype) {
+        case ARPHRD_ETHER:
+                /* Refuse all zero and all 0xFF. */
+                assert(hw_addr->length == ETH_ALEN);
+                return !ether_addr_is_null(&hw_addr->ether) && !ether_addr_is_broadcast(&hw_addr->ether);
+
+        case ARPHRD_INFINIBAND:
+                /* The last 8 bytes cannot be zero. */
+                assert(hw_addr->length == INFINIBAND_ALEN);
+                return !memeqzero(hw_addr->bytes + INFINIBAND_ALEN - 8, 8);
+
+        default:
+                assert_not_reached();
+        }
+}
+
+static int link_generate_new_hw_addr(Link *link, struct hw_addr_data *ret) {
+        struct hw_addr_data hw_addr = HW_ADDR_NULL;
+        bool is_static = false;
+        uint8_t *p;
+        size_t len;
         int r;
 
-        assert(IN_SET(policy, MAC_ADDRESS_POLICY_RANDOM, MAC_ADDRESS_POLICY_PERSISTENT));
+        assert(link);
+        assert(link->config);
+        assert(link->device);
+        assert(ret);
 
-        r = link_unsigned_attribute(device, "addr_assign_type", &addr_type);
-        if (r < 0)
-                return r;
-        switch (addr_type) {
+        if (link->hw_addr.length == 0)
+                goto finalize;
+
+        if (link->config->mac_address_policy == MAC_ADDRESS_POLICY_NONE) {
+                log_link_debug(link, "Using static MAC address.");
+                hw_addr = link->config->hw_addr;
+                is_static = true;
+                goto finalize;
+        }
+
+        if (!IN_SET(link->iftype, ARPHRD_ETHER, ARPHRD_INFINIBAND))
+                goto finalize;
+
+        switch (link->addr_assign_type) {
         case NET_ADDR_SET:
-                log_device_debug(device, "MAC on the device already set by userspace");
-                return 0;
+                log_link_debug(link, "MAC address on the device already set by userspace.");
+                goto finalize;
         case NET_ADDR_STOLEN:
-                log_device_debug(device, "MAC on the device already set based on another device");
-                return 0;
+                log_link_debug(link, "MAC address on the device already set based on another device.");
+                goto finalize;
         case NET_ADDR_RANDOM:
         case NET_ADDR_PERM:
                 break;
         default:
-                log_device_warning(device, "Unknown addr_assign_type %u, ignoring", addr_type);
-                return 0;
+                log_link_warning(link, "Unknown addr_assign_type %u, ignoring", link->addr_assign_type);
+                goto finalize;
         }
 
-        if (want_random == (addr_type == NET_ADDR_RANDOM)) {
-                log_device_debug(device, "MAC on the device already matches policy *%s*",
-                                 mac_address_policy_to_string(policy));
-                return 0;
+        if ((link->config->mac_address_policy == MAC_ADDRESS_POLICY_RANDOM) == (link->addr_assign_type == NET_ADDR_RANDOM)) {
+                log_link_debug(link, "MAC address on the device already matches policy \"%s\".",
+                               mac_address_policy_to_string(link->config->mac_address_policy));
+                goto finalize;
         }
 
-        if (want_random) {
-                log_device_debug(device, "Using random bytes to generate MAC");
+        hw_addr = (struct hw_addr_data) {
+                .length = arphrd_to_hw_addr_len(link->iftype),
+        };
 
+        switch (link->iftype) {
+        case ARPHRD_ETHER:
+                p = hw_addr.bytes;
+                len = hw_addr.length;
+                break;
+        case ARPHRD_INFINIBAND:
+                p = hw_addr.bytes + INFINIBAND_ALEN - 8;
+                len = 8;
+                break;
+        default:
+                assert_not_reached();
+        }
+
+        if (link->config->mac_address_policy == MAC_ADDRESS_POLICY_RANDOM)
                 /* We require genuine randomness here, since we want to make sure we won't collide with other
-                 * systems booting up at the very same time. We do allow RDRAND however, since this is not
-                 * cryptographic key material. */
-                r = genuine_random_bytes(mac->ether_addr_octet, ETH_ALEN, RANDOM_ALLOW_RDRAND);
-                if (r < 0)
-                        return log_device_error_errno(device, r, "Failed to acquire random data to generate MAC: %m");
-        } else {
+                 * systems booting up at the very same time. */
+                for (;;) {
+                        random_bytes(p, len);
+                        if (hw_addr_is_valid(link, &hw_addr))
+                                break;
+                }
+
+        else {
                 uint64_t result;
 
-                r = net_get_unique_predictable_data(device,
+                r = net_get_unique_predictable_data(link->device,
                                                     naming_scheme_has(NAMING_STABLE_VIRTUAL_MACS),
                                                     &result);
                 if (r < 0)
-                        return log_device_warning_errno(device, r, "Could not generate persistent MAC: %m");
+                        return log_link_warning_errno(link, r, "Could not generate persistent MAC address: %m");
 
-                log_device_debug(device, "Using generated persistent MAC address");
-                assert_cc(ETH_ALEN <= sizeof(result));
-                memcpy(mac->ether_addr_octet, &result, ETH_ALEN);
+                assert(len <= sizeof(result));
+                memcpy(p, &result, len);
+                if (!hw_addr_is_valid(link, &hw_addr))
+                        return log_link_warning_errno(link, SYNTHETIC_ERRNO(EINVAL),
+                                                      "Could not generate valid persistent MAC address: %m");
         }
 
-        /* see eth_random_addr in the kernel */
-        mac->ether_addr_octet[0] &= 0xfe;  /* clear multicast bit */
-        mac->ether_addr_octet[0] |= 0x02;  /* set local assignment bit (IEEE802) */
-        return 1;
+finalize:
+
+        r = net_verify_hardware_address(link->ifname, is_static, link->iftype, &link->hw_addr, &hw_addr);
+        if (r < 0)
+                return r;
+
+        if (hw_addr_equal(&link->hw_addr, &hw_addr)) {
+                *ret = HW_ADDR_NULL;
+                return 0;
+        }
+
+        if (hw_addr.length > 0)
+                log_link_debug(link, "Applying %s MAC address: %s",
+                               link->config->mac_address_policy == MAC_ADDRESS_POLICY_NONE ? "static" :
+                               mac_address_policy_to_string(link->config->mac_address_policy),
+                               HW_ADDR_TO_STR(&hw_addr));
+
+        *ret = hw_addr;
+        return 0;
 }
 
-static int link_config_apply_rtnl_settings(sd_netlink **rtnl, const LinkConfig *config, sd_device *device) {
-        struct ether_addr generated_mac, *mac = NULL;
-        int ifindex, r;
+static int link_apply_rtnl_settings(Link *link, sd_netlink **rtnl) {
+        struct hw_addr_data hw_addr = {};
+        LinkConfig *config;
+        int r;
 
+        assert(link);
+        assert(link->config);
         assert(rtnl);
-        assert(config);
-        assert(device);
 
-        r = sd_device_get_ifindex(device, &ifindex);
-        if (r < 0)
-                return log_device_error_errno(device, r, "Could not find ifindex: %m");
+        config = link->config;
 
-        if (IN_SET(config->mac_address_policy, MAC_ADDRESS_POLICY_PERSISTENT, MAC_ADDRESS_POLICY_RANDOM)) {
-                if (get_mac(device, config->mac_address_policy, &generated_mac) > 0)
-                        mac = &generated_mac;
-        } else
-                mac = config->mac;
+        (void) link_generate_new_hw_addr(link, &hw_addr);
 
-        r = rtnl_set_link_properties(rtnl, ifindex, config->alias, mac,
+        r = rtnl_set_link_properties(rtnl, link->ifindex, config->alias, &hw_addr,
                                      config->txqueues, config->rxqueues, config->txqueuelen,
                                      config->mtu, config->gso_max_size, config->gso_max_segments);
         if (r < 0)
-                log_device_warning_errno(device, r,
-                                         "Could not set Alias=, MACAddress=, "
-                                         "TransmitQueues=, ReceiveQueues=, TransmitQueueLength=, MTU=, "
-                                         "GenericSegmentOffloadMaxBytes= or GenericSegmentOffloadMaxSegments=, "
-                                         "ignoring: %m");
+                log_link_warning_errno(link, r,
+                                       "Could not set Alias=, MACAddress=/MACAddressPolicy=, "
+                                       "TransmitQueues=, ReceiveQueues=, TransmitQueueLength=, MTUBytes=, "
+                                       "GenericSegmentOffloadMaxBytes= or GenericSegmentOffloadMaxSegments=, "
+                                       "ignoring: %m");
 
         return 0;
 }
 
-static int link_config_generate_new_name(const LinkConfigContext *ctx, const LinkConfig *config, sd_device *device, const char **ret_name) {
-        unsigned name_type = NET_NAME_UNKNOWN;
+static bool enable_name_policy(void) {
+        static int cached = -1;
+        bool b;
         int r;
 
-        assert(ctx);
-        assert(config);
-        assert(device);
-        assert(ret_name);
+        if (cached >= 0)
+                return cached;
 
-        (void) link_unsigned_attribute(device, "name_assign_type", &name_type);
+        r = proc_cmdline_get_bool("net.ifnames", &b);
+        if (r < 0)
+                log_warning_errno(r, "Failed to parse net.ifnames= kernel command line option, ignoring: %m");
+        if (r <= 0)
+                return (cached = true);
 
-        if (IN_SET(name_type, NET_NAME_USER, NET_NAME_RENAMED)
-            && !naming_scheme_has(NAMING_ALLOW_RERENAMES)) {
-                log_device_debug(device, "Device already has a name given by userspace, not renaming.");
+        if (!b)
+                log_info("Network interface NamePolicy= disabled on kernel command line.");
+
+        return (cached = b);
+}
+
+static int link_generate_new_name(Link *link) {
+        LinkConfig *config;
+        sd_device *device;
+
+        assert(link);
+        assert(link->config);
+        assert(link->device);
+
+        config = link->config;
+        device = link->device;
+
+        if (link->action == SD_DEVICE_MOVE) {
+                log_link_debug(link, "Skipping to apply Name= and NamePolicy= on '%s' uevent.",
+                               device_action_to_string(link->action));
                 goto no_rename;
         }
 
-        if (ctx->enable_name_policy && config->name_policy)
-                for (NamePolicy *p = config->name_policy; *p != _NAMEPOLICY_INVALID; p++) {
-                        const char *new_name = NULL;
-                        NamePolicy policy = *p;
+        if (IN_SET(link->name_assign_type, NET_NAME_USER, NET_NAME_RENAMED) &&
+            !naming_scheme_has(NAMING_ALLOW_RERENAMES)) {
+                log_link_debug(link, "Device already has a name given by userspace, not renaming.");
+                goto no_rename;
+        }
 
-                        switch (policy) {
+        if (enable_name_policy() && config->name_policy)
+                for (NamePolicy *policy = config->name_policy; *policy != _NAMEPOLICY_INVALID; policy++) {
+                        const char *new_name = NULL;
+
+                        switch (*policy) {
                         case NAMEPOLICY_KERNEL:
-                                if (name_type != NET_NAME_PREDICTABLE)
+                                if (link->name_assign_type != NET_NAME_PREDICTABLE)
                                         continue;
 
                                 /* The kernel claims to have given a predictable name, keep it. */
-                                log_device_debug(device, "Policy *%s*: keeping predictable kernel name",
-                                                 name_policy_to_string(policy));
+                                log_link_debug(link, "Policy *%s*: keeping predictable kernel name",
+                                               name_policy_to_string(*policy));
                                 goto no_rename;
                         case NAMEPOLICY_KEEP:
-                                if (!IN_SET(name_type, NET_NAME_USER, NET_NAME_RENAMED))
+                                if (!IN_SET(link->name_assign_type, NET_NAME_USER, NET_NAME_RENAMED))
                                         continue;
 
-                                log_device_debug(device, "Policy *%s*: keeping existing userspace name",
-                                                 name_policy_to_string(policy));
+                                log_link_debug(link, "Policy *%s*: keeping existing userspace name",
+                                               name_policy_to_string(*policy));
                                 goto no_rename;
                         case NAMEPOLICY_DATABASE:
                                 (void) sd_device_get_property_value(device, "ID_NET_NAME_FROM_DATABASE", &new_name);
@@ -501,46 +771,40 @@
                                 (void) sd_device_get_property_value(device, "ID_NET_NAME_MAC", &new_name);
                                 break;
                         default:
-                                assert_not_reached("invalid policy");
+                                assert_not_reached();
                         }
                         if (ifname_valid(new_name)) {
-                                log_device_debug(device, "Policy *%s* yields \"%s\".", name_policy_to_string(policy), new_name);
-                                *ret_name = new_name;
+                                log_link_debug(link, "Policy *%s* yields \"%s\".", name_policy_to_string(*policy), new_name);
+                                link->new_name = new_name;
                                 return 0;
                         }
                 }
 
-        if (config->name) {
-                log_device_debug(device, "Policies didn't yield a name, using specified Name=%s.", config->name);
-                *ret_name = config->name;
+        if (link->config->name) {
+                log_link_debug(link, "Policies didn't yield a name, using specified Name=%s.", link->config->name);
+                link->new_name = link->config->name;
                 return 0;
         }
 
-        log_device_debug(device, "Policies didn't yield a name and Name= is not given, not renaming.");
+        log_link_debug(link, "Policies didn't yield a name and Name= is not given, not renaming.");
 no_rename:
-        r = sd_device_get_sysname(device, ret_name);
-        if (r < 0)
-                return log_device_error_errno(device, r, "Failed to get sysname: %m");
-
+        link->new_name = link->ifname;
         return 0;
 }
 
-static int link_config_apply_alternative_names(sd_netlink **rtnl, const LinkConfig *config, sd_device *device, const char *new_name) {
+static int link_apply_alternative_names(Link *link, sd_netlink **rtnl) {
         _cleanup_strv_free_ char **altnames = NULL, **current_altnames = NULL;
-        const char *current_name;
-        int ifindex, r;
+        LinkConfig *config;
+        sd_device *device;
+        int r;
 
+        assert(link);
+        assert(link->config);
+        assert(link->device);
         assert(rtnl);
-        assert(config);
-        assert(device);
 
-        r = sd_device_get_sysname(device, &current_name);
-        if (r < 0)
-                return log_device_error_errno(device, r, "Failed to get sysname: %m");
-
-        r = sd_device_get_ifindex(device, &ifindex);
-        if (r < 0)
-                return log_device_error_errno(device, r, "Could not find ifindex: %m");
+        config = link->config;
+        device = link->device;
 
         if (config->alternative_names) {
                 altnames = strv_copy(config->alternative_names);
@@ -569,7 +833,7 @@
                                 (void) sd_device_get_property_value(device, "ID_NET_NAME_MAC", &n);
                                 break;
                         default:
-                                assert_not_reached("invalid policy");
+                                assert_not_reached();
                         }
                         if (!isempty(n)) {
                                 r = strv_extend(&altnames, n);
@@ -578,94 +842,131 @@
                         }
                 }
 
-        if (new_name)
-                strv_remove(altnames, new_name);
-        strv_remove(altnames, current_name);
+        strv_remove(altnames, link->ifname);
 
-        r = rtnl_get_link_alternative_names(rtnl, ifindex, &current_altnames);
+        r = rtnl_get_link_alternative_names(rtnl, link->ifindex, &current_altnames);
         if (r < 0)
-                log_device_debug_errno(device, r, "Failed to get alternative names, ignoring: %m");
+                log_link_debug_errno(link, r, "Failed to get alternative names, ignoring: %m");
 
-        char **p;
         STRV_FOREACH(p, current_altnames)
                 strv_remove(altnames, *p);
 
         strv_uniq(altnames);
         strv_sort(altnames);
-        r = rtnl_set_link_alternative_names(rtnl, ifindex, altnames);
+        r = rtnl_set_link_alternative_names(rtnl, link->ifindex, altnames);
         if (r < 0)
-                log_device_full_errno(device, r == -EOPNOTSUPP ? LOG_DEBUG : LOG_WARNING, r,
-                                      "Could not set AlternativeName= or apply AlternativeNamesPolicy=, ignoring: %m");
+                log_link_full_errno(link, r == -EOPNOTSUPP ? LOG_DEBUG : LOG_WARNING, r,
+                                    "Could not set AlternativeName= or apply AlternativeNamesPolicy=, ignoring: %m");
 
         return 0;
 }
 
-int link_config_apply(LinkConfigContext *ctx, const LinkConfig *config, sd_device *device, const char **ret_name) {
-        const char *new_name;
-        sd_device_action_t a;
+static int sr_iov_configure(Link *link, sd_netlink **rtnl, SRIOV *sr_iov) {
+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
         int r;
 
-        assert(ctx);
-        assert(config);
-        assert(device);
-        assert(ret_name);
+        assert(link);
+        assert(rtnl);
+        assert(link->ifindex > 0);
 
-        r = sd_device_get_action(device, &a);
-        if (r < 0)
-                return log_device_error_errno(device, r, "Failed to get ACTION= property: %m");
-
-        if (!IN_SET(a, SD_DEVICE_ADD, SD_DEVICE_BIND, SD_DEVICE_MOVE)) {
-                log_device_debug(device, "Skipping to apply .link settings on '%s' uevent.", device_action_to_string(a));
-
-                r = sd_device_get_sysname(device, ret_name);
-                if (r < 0)
-                        return log_device_error_errno(device, r, "Failed to get sysname: %m");
-
-                return 0;
-        }
-
-        r = link_config_apply_ethtool_settings(&ctx->ethtool_fd, config, device);
-        if (r < 0)
-                return r;
-
-        r = link_config_apply_rtnl_settings(&ctx->rtnl, config, device);
-        if (r < 0)
-                return r;
-
-        if (a == SD_DEVICE_MOVE) {
-                log_device_debug(device, "Skipping to apply Name= and NamePolicy= on '%s' uevent.", device_action_to_string(a));
-
-                r = sd_device_get_sysname(device, &new_name);
-                if (r < 0)
-                        return log_device_error_errno(device, r, "Failed to get sysname: %m");
-        } else {
-                r = link_config_generate_new_name(ctx, config, device, &new_name);
+        if (!*rtnl) {
+                r = sd_netlink_open(rtnl);
                 if (r < 0)
                         return r;
         }
 
-        r = link_config_apply_alternative_names(&ctx->rtnl, config, device, new_name);
+        r = sd_rtnl_message_new_link(*rtnl, &req, RTM_SETLINK, link->ifindex);
         if (r < 0)
                 return r;
 
-        *ret_name = new_name;
+        r = sr_iov_set_netlink_message(sr_iov, req);
+        if (r < 0)
+                return r;
+
+        r = sd_netlink_call(*rtnl, req, 0, NULL);
+        if (r < 0)
+                return r;
+
         return 0;
 }
 
-int link_get_driver(LinkConfigContext *ctx, sd_device *device, char **ret) {
-        const char *name;
-        char *driver = NULL;
+static int link_apply_sr_iov_config(Link *link, sd_netlink **rtnl) {
+        SRIOV *sr_iov;
+        uint32_t n;
         int r;
 
-        r = sd_device_get_sysname(device, &name);
+        assert(link);
+        assert(link->config);
+        assert(link->device);
+
+        r = sr_iov_set_num_vfs(link->device, link->config->sr_iov_num_vfs, link->config->sr_iov_by_section);
+        if (r < 0)
+                log_link_warning_errno(link, r, "Failed to set the number of SR-IOV virtual functions, ignoring: %m");
+
+        if (ordered_hashmap_isempty(link->config->sr_iov_by_section))
+                return 0;
+
+        r = sr_iov_get_num_vfs(link->device, &n);
+        if (r < 0) {
+                log_link_warning_errno(link, r, "Failed to get the number of SR-IOV virtual functions, ignoring [SR-IOV] sections: %m");
+                return 0;
+        }
+        if (n == 0) {
+                log_link_warning(link, "No SR-IOV virtual function exists, ignoring [SR-IOV] sections: %m");
+                return 0;
+        }
+
+        ORDERED_HASHMAP_FOREACH(sr_iov, link->config->sr_iov_by_section) {
+                if (sr_iov->vf >= n) {
+                        log_link_warning(link, "SR-IOV virtual function %"PRIu32" does not exist, ignoring.", sr_iov->vf);
+                        continue;
+                }
+
+                r = sr_iov_configure(link, rtnl, sr_iov);
+                if (r < 0)
+                        log_link_warning_errno(link, r,
+                                               "Failed to configure SR-IOV virtual function %"PRIu32", ignoring: %m",
+                                               sr_iov->vf);
+        }
+
+        return 0;
+}
+
+int link_apply_config(LinkConfigContext *ctx, sd_netlink **rtnl, Link *link) {
+        int r;
+
+        assert(ctx);
+        assert(rtnl);
+        assert(link);
+
+        if (!IN_SET(link->action, SD_DEVICE_ADD, SD_DEVICE_BIND, SD_DEVICE_MOVE)) {
+                log_link_debug(link, "Skipping to apply .link settings on '%s' uevent.",
+                               device_action_to_string(link->action));
+
+                link->new_name = link->ifname;
+                return 0;
+        }
+
+        r = link_apply_ethtool_settings(link, &ctx->ethtool_fd);
         if (r < 0)
                 return r;
 
-        r = ethtool_get_driver(&ctx->ethtool_fd, name, &driver);
+        r = link_apply_rtnl_settings(link, rtnl);
         if (r < 0)
                 return r;
 
-        *ret = driver;
+        r = link_generate_new_name(link);
+        if (r < 0)
+                return r;
+
+        r = link_apply_alternative_names(link, rtnl);
+        if (r < 0)
+                return r;
+
+        r = link_apply_sr_iov_config(link, rtnl);
+        if (r < 0)
+                return r;
+
         return 0;
 }
 
@@ -681,12 +982,11 @@
                 void *data,
                 void *userdata) {
 
-        char **s = data;
+        char **s = ASSERT_PTR(data);
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         if (isempty(rvalue)) {
                 *s = mfree(*s);
@@ -776,6 +1076,51 @@
         return 0;
 }
 
+int config_parse_wol_password(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        LinkConfig *config = ASSERT_PTR(userdata);
+        int r;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+
+        if (isempty(rvalue)) {
+                config->wol_password = erase_and_free(config->wol_password);
+                config->wol_password_file = mfree(config->wol_password_file);
+                return 0;
+        }
+
+        if (path_is_absolute(rvalue) && path_is_safe(rvalue)) {
+                config->wol_password = erase_and_free(config->wol_password);
+                return free_and_strdup_warn(&config->wol_password_file, rvalue);
+        }
+
+        warn_file_is_world_accessible(filename, NULL, unit, line);
+
+        r = link_parse_wol_password(config, rvalue);
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=, ignoring assignment: %s.", lvalue, rvalue);
+                return 0;
+        }
+
+        config->wol_password_file = mfree(config->wol_password_file);
+        return 0;
+}
+
 static const char* const mac_address_policy_table[_MAC_ADDRESS_POLICY_MAX] = {
         [MAC_ADDRESS_POLICY_PERSISTENT] = "persistent",
         [MAC_ADDRESS_POLICY_RANDOM] = "random",
@@ -790,30 +1135,10 @@
         MAC_ADDRESS_POLICY_NONE,
         "Failed to parse MAC address policy");
 
-static const char* const name_policy_table[_NAMEPOLICY_MAX] = {
-        [NAMEPOLICY_KERNEL] = "kernel",
-        [NAMEPOLICY_KEEP] = "keep",
-        [NAMEPOLICY_DATABASE] = "database",
-        [NAMEPOLICY_ONBOARD] = "onboard",
-        [NAMEPOLICY_SLOT] = "slot",
-        [NAMEPOLICY_PATH] = "path",
-        [NAMEPOLICY_MAC] = "mac",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(name_policy, NamePolicy);
 DEFINE_CONFIG_PARSE_ENUMV(config_parse_name_policy, name_policy, NamePolicy,
                           _NAMEPOLICY_INVALID,
                           "Failed to parse interface name policy");
 
-static const char* const alternative_names_policy_table[_NAMEPOLICY_MAX] = {
-        [NAMEPOLICY_DATABASE] = "database",
-        [NAMEPOLICY_ONBOARD] = "onboard",
-        [NAMEPOLICY_SLOT] = "slot",
-        [NAMEPOLICY_PATH] = "path",
-        [NAMEPOLICY_MAC] = "mac",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(alternative_names_policy, NamePolicy);
 DEFINE_CONFIG_PARSE_ENUMV(config_parse_alternative_names_policy, alternative_names_policy, NamePolicy,
                           _NAMEPOLICY_INVALID,
                           "Failed to parse alternative names policy");
diff --git a/src/udev/net/link-config.h b/src/udev/net/link-config.h
index b505c94..ed0896e 100644
--- a/src/udev/net/link-config.h
+++ b/src/udev/net/link-config.h
@@ -2,12 +2,15 @@
 #pragma once
 
 #include "sd-device.h"
+#include "sd-netlink.h"
 
 #include "condition.h"
 #include "conf-parser.h"
 #include "ethtool-util.h"
+#include "hashmap.h"
 #include "list.h"
 #include "net-condition.h"
+#include "netif-naming-scheme.h"
 
 typedef struct LinkConfigContext LinkConfigContext;
 typedef struct LinkConfig LinkConfig;
@@ -20,26 +23,34 @@
         _MAC_ADDRESS_POLICY_INVALID = -EINVAL,
 } MACAddressPolicy;
 
-typedef enum NamePolicy {
-        NAMEPOLICY_KERNEL,
-        NAMEPOLICY_KEEP,
-        NAMEPOLICY_DATABASE,
-        NAMEPOLICY_ONBOARD,
-        NAMEPOLICY_SLOT,
-        NAMEPOLICY_PATH,
-        NAMEPOLICY_MAC,
-        _NAMEPOLICY_MAX,
-        _NAMEPOLICY_INVALID = -EINVAL,
-} NamePolicy;
+typedef struct Link {
+        int ifindex;
+        const char *ifname;
+        const char *new_name;
+
+        LinkConfig *config;
+        sd_device *device;
+        sd_device_action_t action;
+
+        char *kind;
+        char *driver;
+        uint16_t iftype;
+        uint32_t flags;
+        struct hw_addr_data hw_addr;
+        struct hw_addr_data permanent_hw_addr;
+        unsigned name_assign_type;
+        unsigned addr_assign_type;
+} Link;
 
 struct LinkConfig {
         char *filename;
+        char **dropins;
 
         NetMatch match;
         LIST_HEAD(Condition, conditions);
 
         char *description;
-        struct ether_addr *mac;
+        struct hw_addr_data hw_addr;
         MACAddressPolicy mac_address_policy;
         NamePolicy *name_policy;
         NamePolicy *alternative_names_policy;
@@ -57,6 +68,8 @@
         int autonegotiation;
         uint32_t advertise[N_ADVERTISE];
         uint32_t wol;
+        char *wol_password_file;
+        uint8_t *wol_password;
         NetDevPort port;
         int features[_NET_DEV_FEAT_MAX];
         netdev_channels channels;
@@ -64,8 +77,13 @@
         int rx_flow_control;
         int tx_flow_control;
         int autoneg_flow_control;
+        netdev_coalesce_param coalesce;
+        uint8_t mdi;
 
-        LIST_FIELDS(LinkConfig, links);
+        uint32_t sr_iov_num_vfs;
+        OrderedHashmap *sr_iov_by_section;
+
+        LIST_FIELDS(LinkConfig, configs);
 };
 
 int link_config_ctx_new(LinkConfigContext **ret);
@@ -76,15 +94,12 @@
 int link_config_load(LinkConfigContext *ctx);
 bool link_config_should_reload(LinkConfigContext *ctx);
 
-int link_config_get(LinkConfigContext *ctx, sd_device *device, LinkConfig **ret);
-int link_config_apply(LinkConfigContext *ctx, const LinkConfig *config, sd_device *device, const char **ret_name);
-int link_get_driver(LinkConfigContext *ctx, sd_device *device, char **ret);
+int link_new(LinkConfigContext *ctx, sd_netlink **rtnl, sd_device *device, Link **ret);
+Link *link_free(Link *link);
+DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_free);
 
-const char *name_policy_to_string(NamePolicy p) _const_;
-NamePolicy name_policy_from_string(const char *p) _pure_;
-
-const char *alternative_names_policy_to_string(NamePolicy p) _const_;
-NamePolicy alternative_names_policy_from_string(const char *p) _pure_;
+int link_get_config(LinkConfigContext *ctx, Link *link);
+int link_apply_config(LinkConfigContext *ctx, sd_netlink **rtnl, Link *link);
 
 const char *mac_address_policy_to_string(MACAddressPolicy p) _const_;
 MACAddressPolicy mac_address_policy_from_string(const char *p) _pure_;
@@ -95,6 +110,7 @@
 CONFIG_PARSER_PROTOTYPE(config_parse_ifalias);
 CONFIG_PARSER_PROTOTYPE(config_parse_rx_tx_queues);
 CONFIG_PARSER_PROTOTYPE(config_parse_txqueuelen);
+CONFIG_PARSER_PROTOTYPE(config_parse_wol_password);
 CONFIG_PARSER_PROTOTYPE(config_parse_mac_address_policy);
 CONFIG_PARSER_PROTOTYPE(config_parse_name_policy);
 CONFIG_PARSER_PROTOTYPE(config_parse_alternative_names_policy);
diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c
index b2d8154..364d567 100644
--- a/src/udev/scsi_id/scsi_id.c
+++ b/src/udev/scsi_id/scsi_id.c
@@ -306,7 +306,7 @@
                         return -1;
 
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         if (optind < argc && !dev_specified) {
@@ -357,7 +357,7 @@
                         break;
 
                 default:
-                        log_error("Unknown or bad option '%c' (0x%x)", option, option);
+                        log_error("Unknown or bad option '%c' (0x%x)", option, (unsigned) option);
                         retval = -1;
                         break;
                 }
diff --git a/src/udev/scsi_id/scsi_serial.c b/src/udev/scsi_id/scsi_serial.c
index 489f5ad..c619506 100644
--- a/src/udev/scsi_id/scsi_serial.c
+++ b/src/udev/scsi_id/scsi_serial.c
@@ -20,6 +20,7 @@
 #include <time.h>
 #include <unistd.h>
 
+#include "devnum-util.h"
 #include "memory-util.h"
 #include "random-util.h"
 #include "scsi.h"
@@ -69,6 +70,7 @@
 #define DID_NO_CONNECT               0x01        /* Unable to connect before timeout */
 #define DID_BUS_BUSY                 0x02        /* Bus remain busy until timeout */
 #define DID_TIME_OUT                 0x03        /* Timed out for some other reason */
+#define DID_TRANSPORT_DISRUPTED      0x0e        /* Transport disrupted and should retry */
 #define DRIVER_TIMEOUT               0x06
 #define DRIVER_SENSE                 0x08        /* Sense_buffer has been set */
 
@@ -79,6 +81,7 @@
 #define SG_ERR_CAT_TIMEOUT              3
 #define SG_ERR_CAT_RECOVERED            4        /* Successful command after recovered err */
 #define SG_ERR_CAT_NOTSUPPORTED         5        /* Illegal / unsupported command */
+#define SG_ERR_CAT_RETRY                6        /* Command should be retried */
 #define SG_ERR_CAT_SENSE               98        /* Something else in the sense buffer */
 #define SG_ERR_CAT_OTHER               99        /* Some other error/warning */
 
@@ -126,6 +129,8 @@
         if (host_status) {
                 if (IN_SET(host_status, DID_NO_CONNECT, DID_BUS_BUSY, DID_TIME_OUT))
                         return SG_ERR_CAT_TIMEOUT;
+                if (host_status == DID_TRANSPORT_DISRUPTED)
+                        return SG_ERR_CAT_RETRY;
         }
         if (driver_status) {
                 if (driver_status == DRIVER_TIMEOUT)
@@ -150,10 +155,7 @@
 static int scsi_dump_sense(struct scsi_id_device *dev_scsi,
                            unsigned char *sense_buffer, int sb_len) {
         int s;
-        int code;
-        int sense_class;
-        int sense_key;
-        int asc, ascq;
+        unsigned code, sense_class, sense_key, asc, ascq;
 
         /*
          * Figure out and print the sense key, asc and ascq.
@@ -217,11 +219,11 @@
                                                4 - sb_len);
 
                 if (sense_buffer[0] < 15)
-                        log_debug("%s: old sense key: 0x%x", dev_scsi->kernel, sense_buffer[0] & 0x0f);
+                        log_debug("%s: old sense key: 0x%x", dev_scsi->kernel, sense_buffer[0] & 0x0fu);
                 else
                         log_debug("%s: sense = %2x %2x",
                                   dev_scsi->kernel, sense_buffer[0], sense_buffer[2]);
-                log_debug("%s: non-extended sense class %d code 0x%0x",
+                log_debug("%s: non-extended sense class %u code 0x%0x",
                           dev_scsi->kernel, sense_class, code);
 
         }
@@ -237,7 +239,7 @@
                  */
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "%s: called with no error",
-                                       __FUNCTION__);
+                                       __func__);
 
         log_debug("%s: sg_io failed status 0x%x 0x%x 0x%x 0x%x",
                   dev_scsi->kernel, io->driver_status, io->host_status, io->msg_status, io->status);
@@ -255,7 +257,7 @@
                  */
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "%s: called with no error",
-                                       __FUNCTION__);
+                                       __func__);
 
         log_debug("%s: sg_io failed status 0x%x 0x%x 0x%x",
                   dev_scsi->kernel, io->driver_status, io->transport_status, io->device_status);
@@ -280,7 +282,7 @@
 
         if (buflen > SCSI_INQ_BUFF_LEN)
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "buflen %d too long", buflen);
+                                       "buflen %u too long", buflen);
 
 resend:
         if (dev_scsi->use_sg == 4) {
@@ -332,6 +334,8 @@
                 case SG_ERR_CAT_RECOVERED:
                         retval = 0;
                         break;
+                case SG_ERR_CAT_RETRY:
+                        break;
 
                 default:
                         if (dev_scsi->use_sg == 4)
@@ -747,7 +751,7 @@
         struct stat statbuf;
         int err = 0;
 
-        fd = open(devname, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
+        fd = open(devname, O_RDONLY | O_NONBLOCK | O_CLOEXEC | O_NOCTTY);
         if (fd < 0) {
                 log_debug_errno(errno, "scsi_id: cannot open %s: %m", devname);
                 return 1;
@@ -758,8 +762,7 @@
                 err = 2;
                 goto out;
         }
-        sprintf(dev_scsi->kernel,"%d:%d", major(statbuf.st_rdev),
-                minor(statbuf.st_rdev));
+        format_devnum(statbuf.st_rdev, dev_scsi->kernel);
 
         memzero(buf, SCSI_INQ_BUFF_LEN);
         err = scsi_inquiry(dev_scsi, fd, 0, 0, buf, SCSI_INQ_BUFF_LEN);
@@ -783,21 +786,20 @@
 int scsi_get_serial(struct scsi_id_device *dev_scsi, const char *devname,
                     int page_code, int len) {
         unsigned char page0[SCSI_INQ_BUFF_LEN];
-        int fd = -1;
+        int fd = -EBADF;
         int cnt;
         int ind;
         int retval;
 
         memzero(dev_scsi->serial, len);
-        initialize_srand();
         for (cnt = 20; cnt > 0; cnt--) {
                 struct timespec duration;
 
-                fd = open(devname, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
+                fd = open(devname, O_RDONLY | O_NONBLOCK | O_CLOEXEC | O_NOCTTY);
                 if (fd >= 0 || errno != EBUSY)
                         break;
                 duration.tv_sec = 0;
-                duration.tv_nsec = (200 * 1000 * 1000) + (rand() % 100 * 1000 * 1000);
+                duration.tv_nsec = (200 * 1000 * 1000) + (random_u32() % 100 * 1000 * 1000);
                 nanosleep(&duration, NULL);
         }
         if (fd < 0)
diff --git a/src/udev/test-udev-builtin.c b/src/udev/test-udev-builtin.c
index 21a8ea3..2ce7f19 100644
--- a/src/udev/test-udev-builtin.c
+++ b/src/udev/test-udev-builtin.c
@@ -3,9 +3,7 @@
 #include "tests.h"
 #include "udev-builtin.h"
 
-static void test_udev_builtin_cmd_to_ptr(void) {
-        log_info("/* %s */", __func__);
-
+TEST(udev_builtin_cmd_to_ptr) {
         /* Those could have been static asserts, but ({}) is not allowed there. */
 #if HAVE_BLKID
         assert_se(UDEV_BUILTIN_CMD_TO_PTR(UDEV_BUILTIN_BLKID));
@@ -19,8 +17,4 @@
         assert_se(PTR_TO_UDEV_BUILTIN_CMD((void*) 10000) == _UDEV_BUILTIN_INVALID);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_udev_builtin_cmd_to_ptr();
-}
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/udev/test-udev-event.c b/src/udev/test-udev-event.c
index fd1752c..42f4359 100644
--- a/src/udev/test-udev-event.c
+++ b/src/udev/test-udev-event.c
@@ -5,11 +5,10 @@
 #include "strv.h"
 #include "tests.h"
 #include "udev-event.h"
-#include "util.h"
 
 #define BUF_SIZE 1024
 
-static void test_event_spawn_core(bool with_pidfd, const char *cmd, char result_buf[BUF_SIZE]) {
+static void test_event_spawn_core(bool with_pidfd, const char *cmd, char *result_buf, size_t buf_size) {
         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         _cleanup_(udev_event_freep) UdevEvent *event = NULL;
 
@@ -17,12 +16,12 @@
 
         assert_se(sd_device_new_from_syspath(&dev, "/sys/class/net/lo") >= 0);
         assert_se(event = udev_event_new(dev, 0, NULL, LOG_DEBUG));
-        assert_se(udev_event_spawn(event, 5 * USEC_PER_SEC, SIGKILL, false, cmd, result_buf, BUF_SIZE) == 0);
+        assert_se(udev_event_spawn(event, 5 * USEC_PER_SEC, SIGKILL, false, cmd, result_buf, buf_size, NULL) == 0);
 
         assert_se(unsetenv("SYSTEMD_PIDFD") >= 0);
 }
 
-static void test_event_spawn_cat(bool with_pidfd) {
+static void test_event_spawn_cat(bool with_pidfd, size_t buf_size) {
         _cleanup_strv_free_ char **lines = NULL;
         _cleanup_free_ char *cmd = NULL;
         char result_buf[BUF_SIZE];
@@ -32,13 +31,16 @@
         assert_se(find_executable("cat", &cmd) >= 0);
         assert_se(strextend_with_separator(&cmd, " ", "/sys/class/net/lo/uevent"));
 
-        test_event_spawn_core(with_pidfd, cmd, result_buf);
+        test_event_spawn_core(with_pidfd, cmd, result_buf,
+                              buf_size >= BUF_SIZE ? BUF_SIZE : buf_size);
 
         assert_se(lines = strv_split_newlines(result_buf));
         strv_print(lines);
 
-        assert_se(strv_contains(lines, "INTERFACE=lo"));
-        assert_se(strv_contains(lines, "IFINDEX=1"));
+        if (buf_size >= BUF_SIZE) {
+                assert_se(strv_contains(lines, "INTERFACE=lo"));
+                assert_se(strv_contains(lines, "IFINDEX=1"));
+        }
 }
 
 static void test_event_spawn_self(const char *self, const char *arg, bool with_pidfd) {
@@ -50,7 +52,7 @@
 
         assert_se(cmd = strjoin(self, " ", arg));
 
-        test_event_spawn_core(with_pidfd, cmd, result_buf);
+        test_event_spawn_core(with_pidfd, cmd, result_buf, BUF_SIZE);
 
         assert_se(lines = strv_split_newlines(result_buf));
         strv_print(lines);
@@ -83,7 +85,7 @@
                 else if (streq(argv[1], "test2"))
                         test2();
                 else
-                        assert_not_reached("unknown command.");
+                        assert_not_reached();
 
                 return 0;
         }
@@ -92,8 +94,10 @@
 
         assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGCHLD, -1) >= 0);
 
-        test_event_spawn_cat(true);
-        test_event_spawn_cat(false);
+        test_event_spawn_cat(true, SIZE_MAX);
+        test_event_spawn_cat(false, SIZE_MAX);
+        test_event_spawn_cat(true, 5);
+        test_event_spawn_cat(false, 5);
 
         assert_se(path_make_absolute_cwd(argv[0], &self) >= 0);
         path_simplify(self);
diff --git a/src/udev/test-udev-node.c b/src/udev/test-udev-node.c
index 010c19a..b5eaa0d 100644
--- a/src/udev/test-udev-node.c
+++ b/src/udev/test-udev-node.c
@@ -13,7 +13,7 @@
         assert_se(streq(buf, expected));
 }
 
-static void test_udev_node_escape_path(void) {
+TEST(udev_node_escape_path) {
         char a[NAME_MAX+1], b[NAME_MAX+1];
 
         test_udev_node_escape_path_one("/disk/by-id/nvme-eui.1922908022470001001b448b44ccb9d6", "\\x2fdisk\\x2fby-id\\x2fnvme-eui.1922908022470001001b448b44ccb9d6");
@@ -47,10 +47,4 @@
         test_udev_node_escape_path_one(a, b);
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
-
-        test_udev_node_escape_path();
-
-        return 0;
-}
+DEFINE_TEST_MAIN(LOG_INFO);
diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c
index b1de363..d2de03d 100644
--- a/src/udev/udev-builtin-blkid.c
+++ b/src/udev/udev-builtin-blkid.c
@@ -23,6 +23,7 @@
 #include "gpt.h"
 #include "parse-util.h"
 #include "string-util.h"
+#include "strv.h"
 #include "strxcpyx.h"
 #include "udev-builtin.h"
 
@@ -58,6 +59,10 @@
                 blkid_encode_string(value, s, sizeof(s));
                 udev_builtin_add_property(dev, test, "ID_FS_LABEL_ENC", s);
 
+        } else if (STR_IN_SET(name, "FSSIZE", "FSLASTBLOCK", "FSBLOCKSIZE")) {
+                strscpyl(s, sizeof(s), "ID_FS_", name + 2, NULL);
+                udev_builtin_add_property(dev, test, s, value);
+
         } else if (streq(name, "PTTYPE")) {
                 udev_builtin_add_property(dev, test, "ID_PART_TABLE_TYPE", value);
 
@@ -112,77 +117,72 @@
 
 static int find_gpt_root(sd_device *dev, blkid_probe pr, bool test) {
 
-#if defined(GPT_ROOT_NATIVE) && ENABLE_EFI
+#if defined(SD_GPT_ROOT_NATIVE) && ENABLE_EFI
 
-        _cleanup_free_ char *root_id = NULL, *root_label = NULL;
-        bool found_esp = false;
-        blkid_partlist pl;
-        int i, nvals, r;
+        _cleanup_free_ char *root_label = NULL;
+        bool found_esp_or_xbootldr = false;
+        sd_id128_t root_id = SD_ID128_NULL;
+        int r;
 
         assert(pr);
 
-        /* Iterate through the partitions on this disk, and see if the
-         * EFI ESP we booted from is on it. If so, find the first root
-         * disk, and add a property indicating its partition UUID. */
+        /* Iterate through the partitions on this disk, and see if the UEFI ESP or XBOOTLDR partition we
+         * booted from is on it. If so, find the first root disk, and add a property indicating its partition
+         * UUID. */
 
         errno = 0;
-        pl = blkid_probe_get_partitions(pr);
+        blkid_partlist pl = blkid_probe_get_partitions(pr);
         if (!pl)
                 return errno_or_else(ENOMEM);
 
-        nvals = blkid_partlist_numof_partitions(pl);
-        for (i = 0; i < nvals; i++) {
+        int nvals = blkid_partlist_numof_partitions(pl);
+        for (int i = 0; i < nvals; i++) {
                 blkid_partition pp;
-                const char *stype, *sid, *label;
-                sd_id128_t type;
+                const char *label;
+                sd_id128_t type, id;
 
                 pp = blkid_partlist_get_partition(pl, i);
                 if (!pp)
                         continue;
 
-                sid = blkid_partition_get_uuid(pp);
-                if (!sid)
+                r = blkid_partition_get_uuid_id128(pp, &id);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to get partition UUID, ignoring: %m");
                         continue;
+                }
+
+                r = blkid_partition_get_type_id128(pp, &type);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to get partition type UUID, ignoring: %m");
+                        continue;
+                }
 
                 label = blkid_partition_get_name(pp); /* returns NULL if empty */
 
-                stype = blkid_partition_get_type_string(pp);
-                if (!stype)
-                        continue;
+                if (sd_id128_in_set(type, SD_GPT_ESP, SD_GPT_XBOOTLDR)) {
+                        sd_id128_t esp_or_xbootldr;
 
-                if (sd_id128_from_string(stype, &type) < 0)
-                        continue;
+                        /* We found an ESP or XBOOTLDR, let's see if it matches the ESP/XBOOTLDR we booted from. */
 
-                if (sd_id128_equal(type, GPT_ESP)) {
-                        sd_id128_t id, esp;
-
-                        /* We found an ESP, let's see if it matches
-                         * the ESP we booted from. */
-
-                        if (sd_id128_from_string(sid, &id) < 0)
-                                continue;
-
-                        r = efi_loader_get_device_part_uuid(&esp);
+                        r = efi_loader_get_device_part_uuid(&esp_or_xbootldr);
                         if (r < 0)
                                 return r;
 
-                        if (sd_id128_equal(id, esp))
-                                found_esp = true;
+                        if (sd_id128_equal(id, esp_or_xbootldr))
+                                found_esp_or_xbootldr = true;
 
-                } else if (sd_id128_equal(type, GPT_ROOT_NATIVE)) {
+                } else if (sd_id128_equal(type, SD_GPT_ROOT_NATIVE)) {
                         unsigned long long flags;
 
                         flags = blkid_partition_get_flags(pp);
-                        if (flags & GPT_FLAG_NO_AUTO)
+                        if (flags & SD_GPT_FLAG_NO_AUTO)
                                 continue;
 
                         /* We found a suitable root partition, let's remember the first one, or the one with
                          * the newest version, as determined by comparing the partition labels. */
 
-                        if (!root_id || strverscmp_improved(label, root_label) > 0) {
-                                r = free_and_strdup(&root_id, sid);
-                                if (r < 0)
-                                        return r;
+                        if (sd_id128_is_null(root_id) || strverscmp_improved(label, root_label) > 0) {
+                                root_id = id;
 
                                 r = free_and_strdup(&root_label, label);
                                 if (r < 0)
@@ -191,10 +191,10 @@
                 }
         }
 
-        /* We found the ESP on this disk, and also found a root
-         * partition, nice! Let's export its UUID */
-        if (found_esp && root_id)
-                udev_builtin_add_property(dev, test, "ID_PART_GPT_AUTO_ROOT_UUID", root_id);
+        /* We found the ESP/XBOOTLDR on this disk, and also found a root partition, nice! Let's export its
+         * UUID */
+        if (found_esp_or_xbootldr && !sd_id128_is_null(root_id))
+                udev_builtin_add_property(dev, test, "ID_PART_GPT_AUTO_ROOT_UUID", SD_ID128_TO_UUID_STRING(root_id));
 #endif
 
         return 0;
@@ -234,13 +234,13 @@
         return blkid_do_safeprobe(pr);
 }
 
-static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_blkid(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         const char *devnode, *root_partition = NULL, *data, *name;
         _cleanup_(blkid_free_probep) blkid_probe pr = NULL;
         bool noraid = false, is_gpt = false;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int64_t offset = 0;
-        int nvals, i, r;
+        int r;
 
         static const struct option options[] = {
                 { "offset", required_argument, NULL, 'o' },
@@ -294,6 +294,9 @@
         blkid_probe_set_superblocks_flags(pr,
                 BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID |
                 BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE |
+#ifdef BLKID_SUBLKS_FSINFO
+                BLKID_SUBLKS_FSINFO |
+#endif
                 BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION);
 
         if (noraid)
@@ -303,11 +306,12 @@
         if (r < 0)
                 return log_device_debug_errno(dev, r, "Failed to get device name: %m");
 
-        fd = open(devnode, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
+        fd = sd_device_open(dev, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
         if (fd < 0) {
-                log_device_debug_errno(dev, errno, "Failed to open block device %s%s: %m",
-                                       devnode, errno == ENOENT ? ", ignoring" : "");
-                return errno == ENOENT ? 0 : -errno;
+                bool ignore = ERRNO_IS_DEVICE_ABSENT(fd);
+                log_device_debug_errno(dev, fd, "Failed to open block device %s%s: %m",
+                                       devnode, ignore ? ", ignoring" : "");
+                return ignore ? 0 : fd;
         }
 
         errno = 0;
@@ -325,11 +329,11 @@
         (void) sd_device_get_property_value(dev, "ID_PART_GPT_AUTO_ROOT_UUID", &root_partition);
 
         errno = 0;
-        nvals = blkid_probe_numof_values(pr);
+        int nvals = blkid_probe_numof_values(pr);
         if (nvals < 0)
                 return log_device_debug_errno(dev, errno_or_else(ENOMEM), "Failed to get number of probed values: %m");
 
-        for (i = 0; i < nvals; i++) {
+        for (int i = 0; i < nvals; i++) {
                 if (blkid_probe_get_value(pr, i, &name, &data, NULL) < 0)
                         continue;
 
diff --git a/src/udev/udev-builtin-btrfs.c b/src/udev/udev-builtin-btrfs.c
index 436bf6b..79f91ea 100644
--- a/src/udev/udev-builtin-btrfs.c
+++ b/src/udev/udev-builtin-btrfs.c
@@ -6,23 +6,23 @@
 #include <sys/ioctl.h>
 
 #include "device-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "string-util.h"
 #include "strxcpyx.h"
 #include "udev-builtin.h"
-#include "util.h"
 
-static int builtin_btrfs(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_btrfs(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         struct btrfs_ioctl_vol_args args = {};
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         int r;
 
         if (argc != 3 || !streq(argv[1], "ready"))
                 return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "Invalid arguments");
 
-        fd = open("/dev/btrfs-control", O_RDWR|O_CLOEXEC);
+        fd = open("/dev/btrfs-control", O_RDWR|O_CLOEXEC|O_NOCTTY);
         if (fd < 0) {
-                if (IN_SET(errno, ENOENT, ENXIO, ENODEV)) {
+                if (ERRNO_IS_DEVICE_ABSENT(errno)) {
                         /* Driver not installed? Then we aren't ready. This is useful in initrds that lack
                          * btrfs.ko. After the host transition (where btrfs.ko will hopefully become
                          * available) the device can be retriggered and will then be considered ready. */
diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c
index 7883518..8d652e4 100644
--- a/src/udev/udev-builtin-hwdb.c
+++ b/src/udev/udev-builtin-hwdb.c
@@ -60,7 +60,7 @@
                 return NULL;
         (void) sd_device_get_sysattr_value(dev, "product", &n);
 
-        snprintf(s, size, "usb:v%04Xp%04X:%s", vn, pn, strempty(n));
+        (void) snprintf(s, size, "usb:v%04Xp%04X:%s", vn, pn, strempty(n));
         return s;
 }
 
@@ -118,7 +118,7 @@
         return r;
 }
 
-static int builtin_hwdb(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_hwdb(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         static const struct option options[] = {
                 { "filter", required_argument, NULL, 'f' },
                 { "device", required_argument, NULL, 'd' },
@@ -207,8 +207,13 @@
 }
 
 /* called every couple of seconds during event activity; 'true' if config has changed */
-static bool builtin_hwdb_validate(void) {
-        return hwdb_validate(hwdb);
+static bool builtin_hwdb_should_reload(void) {
+        if (hwdb_should_reload(hwdb)) {
+                log_debug("hwdb needs reloading.");
+                return true;
+        }
+
+        return false;
 }
 
 const UdevBuiltin udev_builtin_hwdb = {
@@ -216,6 +221,6 @@
         .cmd = builtin_hwdb,
         .init = builtin_hwdb_init,
         .exit = builtin_hwdb_exit,
-        .validate = builtin_hwdb_validate,
+        .should_reload = builtin_hwdb_should_reload,
         .help = "Hardware database",
 };
diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c
index f62dffb..540f390 100644
--- a/src/udev/udev-builtin-input_id.c
+++ b/src/udev/udev-builtin-input_id.c
@@ -19,7 +19,6 @@
 #include "stdio-util.h"
 #include "string-util.h"
 #include "udev-builtin.h"
-#include "util.h"
 
 /* we must use this kernel-compatible implementation */
 #define BITS_PER_LONG (sizeof(unsigned long) * 8)
@@ -45,12 +44,12 @@
         return (absinfo->maximum - absinfo->minimum) / absinfo->resolution;
 }
 
-static void extract_info(sd_device *dev, const char *devpath, bool test) {
+static void extract_info(sd_device *dev, bool test) {
         char width[DECIMAL_STR_MAX(int)], height[DECIMAL_STR_MAX(int)];
         struct input_absinfo xabsinfo = {}, yabsinfo = {};
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
 
-        fd = open(devpath, O_RDONLY|O_CLOEXEC);
+        fd = sd_device_open(dev, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
         if (fd < 0)
                 return;
 
@@ -92,7 +91,7 @@
 
         memzero(bitmask, bitmask_size);
         i = 0;
-        while ((word = strrchr(text, ' ')) != NULL) {
+        while ((word = strrchr(text, ' '))) {
                 r = safe_atolu_full(word+1, 16, &val);
                 if (r < 0)
                         log_device_debug_errno(pdev, r, "Ignoring %s block which failed to parse: %m", attr);
@@ -101,7 +100,7 @@
                 else
                         log_device_debug(pdev, "Ignoring %s block %lX which is larger than maximum size", attr, val);
                 *word = '\0';
-                ++i;
+                i++;
         }
         r = safe_atolu_full(text, 16, &val);
         if (r < 0)
@@ -111,20 +110,20 @@
         else
                 log_device_debug(pdev, "Ignoring %s block %lX which is larger than maximum size", attr, val);
 
-        if (test) {
-                /* printf pattern with the right unsigned long number of hex chars */
-                xsprintf(text, "  bit %%4u: %%0%zulX\n",
-                         2 * sizeof(unsigned long));
+        if (test && DEBUG_LOGGING) {
                 log_device_debug(pdev, "%s decoded bit map:", attr);
+
                 val = bitmask_size / sizeof (unsigned long);
-                /* skip over leading zeros */
+                /* skip trailing zeros */
                 while (bitmask[val-1] == 0 && val > 0)
                         --val;
-                for (i = 0; i < val; ++i) {
-                        DISABLE_WARNING_FORMAT_NONLITERAL;
-                        log_device_debug(pdev, text, i * BITS_PER_LONG, bitmask[i]);
-                        REENABLE_WARNING;
-                }
+
+                /* IN_SET() cannot be used in assert_cc(). */
+                assert_cc(sizeof(unsigned long) == 4 || sizeof(unsigned long) == 8);
+                for (unsigned long j = 0; j < val; j++)
+                        log_device_debug(pdev,
+                                         sizeof(unsigned long) == 4 ? "  bit %4lu: %08lX\n" : "  bit %4lu: %016lX\n",
+                                         j * BITS_PER_LONG, bitmask[j]);
         }
 }
 
@@ -153,11 +152,11 @@
                           const unsigned long* bitmask_rel,
                           const unsigned long* bitmask_props,
                           bool test) {
-        int button, axis;
         bool has_abs_coordinates = false;
         bool has_rel_coordinates = false;
         bool has_mt_coordinates = false;
-        bool has_joystick_axes_or_buttons = false;
+        size_t num_joystick_axes = 0;
+        size_t num_joystick_buttons = 0;
         bool has_pad_buttons = false;
         bool is_direct = false;
         bool has_touch = false;
@@ -176,6 +175,7 @@
         bool is_joystick = false;
         bool is_accelerometer = false;
         bool is_pointing_stick = false;
+        bool has_wheel = false;
 
         has_keys = test_bit(EV_KEY, bitmask_ev);
         has_abs_coordinates = test_bit(ABS_X, bitmask_abs) && test_bit(ABS_Y, bitmask_abs);
@@ -194,7 +194,7 @@
         has_stylus = test_bit(BTN_STYLUS, bitmask_key);
         has_pen = test_bit(BTN_TOOL_PEN, bitmask_key);
         finger_but_no_pen = test_bit(BTN_TOOL_FINGER, bitmask_key) && !test_bit(BTN_TOOL_PEN, bitmask_key);
-        for (button = BTN_MOUSE; button < BTN_JOYSTICK && !has_mouse_button; button++)
+        for (int button = BTN_MOUSE; button < BTN_JOYSTICK && !has_mouse_button; button++)
                 has_mouse_button = test_bit(button, bitmask_key);
         has_rel_coordinates = test_bit(EV_REL, bitmask_ev) && test_bit(REL_X, bitmask_rel) && test_bit(REL_Y, bitmask_rel);
         has_mt_coordinates = test_bit(ABS_MT_POSITION_X, bitmask_abs) && test_bit(ABS_MT_POSITION_Y, bitmask_abs);
@@ -204,7 +204,8 @@
                 has_mt_coordinates = false;
         is_direct = test_bit(INPUT_PROP_DIRECT, bitmask_props);
         has_touch = test_bit(BTN_TOUCH, bitmask_key);
-        has_pad_buttons = test_bit(BTN_0, bitmask_key) && has_stylus && !has_pen;
+        has_pad_buttons = test_bit(BTN_0, bitmask_key) && test_bit(BTN_1, bitmask_key) && !has_pen;
+        has_wheel = test_bit(EV_REL, bitmask_ev) && (test_bit(REL_WHEEL, bitmask_rel) || test_bit(REL_HWHEEL, bitmask_rel));
 
         /* joysticks don't necessarily have buttons; e. g.
          * rudders/pedals are joystick-like, but buttonless; they have
@@ -215,15 +216,19 @@
          * Catz Mad Catz M.M.O.TE). Skip those.
          */
         if (!test_bit(BTN_JOYSTICK - 1, bitmask_key)) {
-                for (button = BTN_JOYSTICK; button < BTN_DIGI && !has_joystick_axes_or_buttons; button++)
-                        has_joystick_axes_or_buttons = test_bit(button, bitmask_key);
-                for (button = BTN_TRIGGER_HAPPY1; button <= BTN_TRIGGER_HAPPY40 && !has_joystick_axes_or_buttons; button++)
-                        has_joystick_axes_or_buttons = test_bit(button, bitmask_key);
-                for (button = BTN_DPAD_UP; button <= BTN_DPAD_RIGHT && !has_joystick_axes_or_buttons; button++)
-                        has_joystick_axes_or_buttons = test_bit(button, bitmask_key);
+                for (int button = BTN_JOYSTICK; button < BTN_DIGI; button++)
+                        if (test_bit(button, bitmask_key))
+                                num_joystick_buttons++;
+                for (int button = BTN_TRIGGER_HAPPY1; button <= BTN_TRIGGER_HAPPY40; button++)
+                        if (test_bit(button, bitmask_key))
+                                num_joystick_buttons++;
+                for (int button = BTN_DPAD_UP; button <= BTN_DPAD_RIGHT; button++)
+                        if (test_bit(button, bitmask_key))
+                                num_joystick_buttons++;
         }
-        for (axis = ABS_RX; axis < ABS_PRESSURE && !has_joystick_axes_or_buttons; axis++)
-                has_joystick_axes_or_buttons = test_bit(axis, bitmask_abs);
+        for (int axis = ABS_RX; axis < ABS_PRESSURE; axis++)
+                if (test_bit(axis, bitmask_abs))
+                        num_joystick_axes++;
 
         if (has_abs_coordinates) {
                 if (has_stylus || has_pen)
@@ -236,9 +241,9 @@
                         is_abs_mouse = true;
                 else if (has_touch || is_direct)
                         is_touchscreen = true;
-                else if (has_joystick_axes_or_buttons)
+                else if (num_joystick_buttons > 0 || num_joystick_axes > 0)
                         is_joystick = true;
-        } else if (has_joystick_axes_or_buttons)
+        } else if (num_joystick_buttons > 0 || num_joystick_axes > 0)
                 is_joystick = true;
 
         if (has_mt_coordinates) {
@@ -253,6 +258,11 @@
         if (is_tablet && has_pad_buttons)
                 is_tablet_pad = true;
 
+        if (has_pad_buttons && has_wheel && !has_rel_coordinates) {
+                is_tablet = true;
+                is_tablet_pad = true;
+        }
+
         if (!is_tablet && !is_touchpad && !is_joystick &&
             has_mouse_button &&
             (has_rel_coordinates ||
@@ -263,6 +273,41 @@
         if (is_mouse && id->bustype == BUS_I2C)
                 is_pointing_stick = true;
 
+        /* Joystick un-detection. Some keyboards have random joystick buttons
+         * set. Avoid those being labeled as ID_INPUT_JOYSTICK with some heuristics.
+         * The well-known keys represent a (randomly picked) set of key groups.
+         * A joystick may have one of those but probably not several. And a joystick with less than 2 buttons
+         * or axes is not a joystick either.
+         * libinput uses similar heuristics, any changes here should be added to libinput too.
+         */
+        if (is_joystick) {
+                static const unsigned int well_known_keyboard_keys[] = {
+                        KEY_LEFTCTRL, KEY_CAPSLOCK, KEY_NUMLOCK, KEY_INSERT,
+                        KEY_MUTE, KEY_CALC, KEY_FILE, KEY_MAIL, KEY_PLAYPAUSE,
+                        KEY_BRIGHTNESSDOWN,
+                };
+                size_t num_well_known_keys = 0;
+
+                if (has_keys)
+                        for (size_t i = 0; i < ELEMENTSOF(well_known_keyboard_keys); i++)
+                                if (test_bit(well_known_keyboard_keys[i], bitmask_key))
+                                        num_well_known_keys++;
+
+                if (num_well_known_keys >= 4 || num_joystick_buttons + num_joystick_axes < 2) {
+                        log_device_debug(dev, "Input device has %zu joystick buttons and %zu axes but also %zu keyboard key sets, "
+                                         "assuming this is a keyboard, not a joystick.",
+                                         num_joystick_buttons, num_joystick_axes, num_well_known_keys);
+                        is_joystick = false;
+                }
+
+                if (has_wheel && has_pad_buttons) {
+                        log_device_debug(dev, "Input device has %zu joystick buttons as well as tablet pad buttons, "
+                                        "assuming this is a tablet pad, not a joystick.", num_joystick_buttons);
+
+                        is_joystick = false;
+                }
+        }
+
         if (is_pointing_stick)
                 udev_builtin_add_property(dev, test, "ID_INPUT_POINTINGSTICK", "1");
         if (is_mouse || is_abs_mouse)
@@ -286,10 +331,8 @@
                      const unsigned long* bitmask_ev,
                      const unsigned long* bitmask_key,
                      bool test) {
-        unsigned i;
-        unsigned long found;
-        unsigned long mask;
-        bool ret = false;
+
+        bool found = false;
 
         /* do we have any KEY_* capability? */
         if (!test_bit(EV_KEY, bitmask_ev)) {
@@ -298,49 +341,42 @@
         }
 
         /* only consider KEY_* here, not BTN_* */
-        found = 0;
-        for (i = 0; i < BTN_MISC/BITS_PER_LONG; ++i) {
-                found |= bitmask_key[i];
-                log_device_debug(dev, "test_key: checking bit block %lu for any keys; found=%i", (unsigned long)i*BITS_PER_LONG, found > 0);
+        for (size_t i = 0; i < BTN_MISC/BITS_PER_LONG && !found; i++) {
+                if (bitmask_key[i])
+                        found = true;
+
+                log_device_debug(dev, "test_key: checking bit block %zu for any keys; found=%s",
+                                 i * BITS_PER_LONG, yes_no(found));
         }
         /* If there are no keys in the lower block, check the higher blocks */
-        if (!found) {
-                unsigned block;
-                for (block = 0; block < (sizeof(high_key_blocks) / sizeof(struct range)); ++block) {
-                        for (i = high_key_blocks[block].start; i < high_key_blocks[block].end; ++i) {
-                                if (test_bit(i, bitmask_key)) {
-                                        log_device_debug(dev, "test_key: Found key %x in high block", i);
-                                        found = 1;
-                                        break;
-                                }
+        for (size_t block = 0; block < sizeof(high_key_blocks) / sizeof(struct range) && !found; block++)
+                for (unsigned i = high_key_blocks[block].start; i < high_key_blocks[block].end && !found; i++)
+                        if (test_bit(i, bitmask_key)) {
+                                log_device_debug(dev, "test_key: Found key %x in high block", i);
+                                found = true;
                         }
-                }
-        }
 
-        if (found > 0) {
+        if (found)
                 udev_builtin_add_property(dev, test, "ID_INPUT_KEY", "1");
-                ret = true;
-        }
 
         /* the first 32 bits are ESC, numbers, and Q to D; if we have all of
          * those, consider it a full keyboard; do not test KEY_RESERVED, though */
-        mask = 0xFFFFFFFE;
-        if (FLAGS_SET(bitmask_key[0], mask)) {
+        if (FLAGS_SET(bitmask_key[0], 0xFFFFFFFE)) {
                 udev_builtin_add_property(dev, test, "ID_INPUT_KEYBOARD", "1");
-                ret = true;
+                return true;
         }
 
-        return ret;
+        return found;
 }
 
-static int builtin_input_id(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_input_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         sd_device *pdev;
         unsigned long bitmask_ev[NBITS(EV_MAX)];
         unsigned long bitmask_abs[NBITS(ABS_MAX)];
         unsigned long bitmask_key[NBITS(KEY_MAX)];
         unsigned long bitmask_rel[NBITS(REL_MAX)];
         unsigned long bitmask_props[NBITS(INPUT_PROP_MAX)];
-        const char *sysname, *devnode;
+        const char *sysname;
         bool is_pointer;
         bool is_key;
 
@@ -385,10 +421,9 @@
 
         }
 
-        if (sd_device_get_devname(dev, &devnode) >= 0 &&
-            sd_device_get_sysname(dev, &sysname) >= 0 &&
+        if (sd_device_get_sysname(dev, &sysname) >= 0 &&
             startswith(sysname, "event"))
-                extract_info(dev, devnode, test);
+                extract_info(dev, test);
 
         return 0;
 }
diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c
index e6beb19..80cfdee 100644
--- a/src/udev/udev-builtin-keyboard.c
+++ b/src/udev/udev-builtin-keyboard.c
@@ -78,11 +78,11 @@
         map.scan = scancode;
         map.key = keycode_num;
 
-        log_device_debug(dev, "keyboard: mapping scan code %d (0x%x) to key code %d (0x%x)",
+        log_device_debug(dev, "keyboard: mapping scan code %u (0x%x) to key code %u (0x%x)",
                          map.scan, map.scan, map.key, map.key);
 
         if (ioctl(fd, EVIOCSKEYCODE, &map) < 0)
-                return log_device_error_errno(dev, errno, "Failed to call EVIOCSKEYCODE with scan code 0x%x, and key code %d: %m", map.scan, map.key);
+                return log_device_error_errno(dev, errno, "Failed to call EVIOCSKEYCODE with scan code 0x%x, and key code %u: %m", map.scan, map.key);
 
         return 0;
 }
@@ -159,10 +159,10 @@
         return 0;
 }
 
-static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_keyboard(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         unsigned release[1024];
         unsigned release_count = 0;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *node, *key, *value;
         int has_abs = -1, r;
 
@@ -195,9 +195,9 @@
                         }
 
                         if (fd < 0) {
-                                fd = open(node, O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+                                fd = sd_device_open(dev, O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
                                 if (fd < 0)
-                                        return log_device_error_errno(dev, errno, "Failed to open device '%s': %m", node);
+                                        return log_device_error_errno(dev, fd, "Failed to open device '%s': %m", node);
                         }
 
                         (void) map_keycode(dev, fd, scancode, keycode);
@@ -212,9 +212,9 @@
                         }
 
                         if (fd < 0) {
-                                fd = open(node, O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+                                fd = sd_device_open(dev, O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
                                 if (fd < 0)
-                                        return log_device_error_errno(dev, errno, "Failed to open device '%s': %m", node);
+                                        return log_device_error_errno(dev, fd, "Failed to open device '%s': %m", node);
                         }
 
                         if (has_abs == -1) {
@@ -247,5 +247,5 @@
 const UdevBuiltin udev_builtin_keyboard = {
         .name = "keyboard",
         .cmd = builtin_keyboard,
-        .help = "Keyboard scan code to key mapping",
+        .help = "Keyboard scancode mapping and touchpad/pointingstick characteristics",
 };
diff --git a/src/udev/udev-builtin-kmod.c b/src/udev/udev-builtin-kmod.c
index 3be8bd5..eade042 100644
--- a/src/udev/udev-builtin-kmod.c
+++ b/src/udev/udev-builtin-kmod.c
@@ -10,8 +10,10 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "device-util.h"
 #include "module-util.h"
 #include "string-util.h"
+#include "strv.h"
 #include "udev-builtin.h"
 
 static struct kmod_ctx *ctx = NULL;
@@ -20,18 +22,30 @@
         log_internalv(priority, 0, file, line, fn, format, args);
 }
 
-static int builtin_kmod(sd_device *dev, int argc, char *argv[], bool test) {
-        int i;
+static int builtin_kmod(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
+        int r;
+
+        assert(dev);
 
         if (!ctx)
                 return 0;
 
-        if (argc < 3 || !streq(argv[1], "load"))
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "%s: expected: load <module>", argv[0]);
+        if (argc < 2 || !streq(argv[1], "load"))
+                return log_device_warning_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                                "%s: expected: load [module…]", argv[0]);
 
-        for (i = 2; argv[i]; i++)
-                (void) module_load_and_warn(ctx, argv[i], false);
+        char **modules = strv_skip(argv, 2);
+        if (strv_isempty(modules)) {
+                const char *modalias;
+
+                r = sd_device_get_property_value(dev, "MODALIAS", &modalias);
+                if (r < 0)
+                        return log_device_warning_errno(dev, r, "Failed to read property \"MODALIAS\".");
+
+                (void) module_load_and_warn(ctx, modalias, /* verbose = */ false);
+        } else
+                STRV_FOREACH(module, modules)
+                        (void) module_load_and_warn(ctx, *module, /* verbose = */ false);
 
         return 0;
 }
@@ -45,7 +59,7 @@
         if (!ctx)
                 return -ENOMEM;
 
-        log_debug("Load module index");
+        log_debug("Loading kernel module index.");
         kmod_set_log_fn(ctx, udev_kmod_log, NULL);
         kmod_load_resources(ctx);
         return 0;
@@ -53,16 +67,21 @@
 
 /* called on udev shutdown and reload request */
 static void builtin_kmod_exit(void) {
-        log_debug("Unload module index");
+        log_debug("Unload kernel module index.");
         ctx = kmod_unref(ctx);
 }
 
 /* called every couple of seconds during event activity; 'true' if config has changed */
-static bool builtin_kmod_validate(void) {
-        log_debug("Validate module index");
+static bool builtin_kmod_should_reload(void) {
         if (!ctx)
                 return false;
-        return (kmod_validate_resources(ctx) != KMOD_RESOURCES_OK);
+
+        if (kmod_validate_resources(ctx) != KMOD_RESOURCES_OK) {
+                log_debug("Kernel module index needs reloading.");
+                return true;
+        }
+
+        return false;
 }
 
 const UdevBuiltin udev_builtin_kmod = {
@@ -70,7 +89,7 @@
         .cmd = builtin_kmod,
         .init = builtin_kmod_init,
         .exit = builtin_kmod_exit,
-        .validate = builtin_kmod_validate,
+        .should_reload = builtin_kmod_should_reload,
         .help = "Kernel module loader",
         .run_once = false,
 };
diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
index 2699a89..a48d5de 100644
--- a/src/udev/udev-builtin-net_id.c
+++ b/src/udev/udev-builtin-net_id.c
@@ -15,18 +15,22 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <net/if.h>
-#include <net/if_arp.h>
 #include <stdarg.h>
 #include <unistd.h>
 #include <linux/if.h>
+#include <linux/if_arp.h>
+#include <linux/netdevice.h>
 #include <linux/pci_regs.h>
 
 #include "alloc-util.h"
+#include "chase-symlinks.h"
+#include "device-private.h"
 #include "device-util.h"
 #include "dirent-util.h"
+#include "ether-addr-util.h"
 #include "fd-util.h"
 #include "fileio.h"
-#include "fs-util.h"
+#include "glyph-util.h"
 #include "netif-naming-scheme.h"
 #include "parse-util.h"
 #include "proc-cmdline.h"
@@ -39,7 +43,7 @@
 #define ONBOARD_14BIT_INDEX_MAX ((1U << 14) - 1)
 #define ONBOARD_16BIT_INDEX_MAX ((1U << 16) - 1)
 
-enum netname_type{
+typedef enum NetNameType {
         NET_UNDEF,
         NET_PCI,
         NET_USB,
@@ -47,15 +51,14 @@
         NET_VIRTIO,
         NET_CCW,
         NET_VIO,
+        NET_XENVIF,
         NET_PLATFORM,
         NET_NETDEVSIM,
-};
+        NET_DEVICETREE,
+} NetNameType;
 
-struct netnames {
-        enum netname_type type;
-
-        uint8_t mac[6];
-        bool mac_valid;
+typedef struct NetNames {
+        NetNameType type;
 
         sd_device *pcidev;
         char pci_slot[ALTIFNAMSIZ];
@@ -67,98 +70,87 @@
         char bcma_core[ALTIFNAMSIZ];
         char ccw_busid[ALTIFNAMSIZ];
         char vio_slot[ALTIFNAMSIZ];
+        char xen_slot[ALTIFNAMSIZ];
         char platform_path[ALTIFNAMSIZ];
         char netdevsim_path[ALTIFNAMSIZ];
-};
+        char devicetree_onboard[ALTIFNAMSIZ];
+} NetNames;
 
-struct virtfn_info {
-        sd_device *physfn_pcidev;
-        char suffix[ALTIFNAMSIZ];
-};
+typedef struct LinkInfo {
+        int ifindex;
+        int iflink;
+        int iftype;
+        const char *devtype;
+        const char *phys_port_name;
+        struct hw_addr_data hw_addr;
+} LinkInfo;
 
 /* skip intermediate virtio devices */
 static sd_device *skip_virtio(sd_device *dev) {
-        sd_device *parent;
-
         /* there can only ever be one virtio bus per parent device, so we can
          * safely ignore any virtio buses. see
          * http://lists.linuxfoundation.org/pipermail/virtualization/2015-August/030331.html */
-        for (parent = dev; parent; ) {
+        while (dev) {
                 const char *subsystem;
 
-                if (sd_device_get_subsystem(parent, &subsystem) < 0)
+                if (sd_device_get_subsystem(dev, &subsystem) < 0)
                         break;
 
                 if (!streq(subsystem, "virtio"))
                         break;
 
-                if (sd_device_get_parent(parent, &parent) < 0)
+                if (sd_device_get_parent(dev, &dev) < 0)
                         return NULL;
         }
 
-        return parent;
+        return dev;
 }
 
-static int get_virtfn_info(sd_device *dev, struct netnames *names, struct virtfn_info *ret) {
+static int get_virtfn_info(sd_device *pcidev, sd_device **ret_physfn_pcidev, char **ret_suffix) {
         _cleanup_(sd_device_unrefp) sd_device *physfn_pcidev = NULL;
-        const char *physfn_link_file, *syspath;
-        _cleanup_free_ char *physfn_pci_syspath = NULL;
-        struct dirent *dent;
-        _cleanup_closedir_ DIR *dir = NULL;
-        char suffix[ALTIFNAMSIZ];
+        const char *syspath, *name;
+        sd_device *child;
         int r;
 
-        assert(dev);
-        assert(names);
-        assert(ret);
+        assert(pcidev);
+        assert(ret_physfn_pcidev);
+        assert(ret_suffix);
 
-        r = sd_device_get_syspath(names->pcidev, &syspath);
-        if (r < 0)
-                return r;
-
-        /* Check if this is a virtual function. */
-        physfn_link_file = strjoina(syspath, "/physfn");
-        r = chase_symlinks(physfn_link_file, NULL, 0, &physfn_pci_syspath, NULL);
+        r = sd_device_get_syspath(pcidev, &syspath);
         if (r < 0)
                 return r;
 
         /* Get physical function's pci device. */
-        r = sd_device_new_from_syspath(&physfn_pcidev, physfn_pci_syspath);
+        r = sd_device_new_child(&physfn_pcidev, pcidev, "physfn");
         if (r < 0)
                 return r;
 
         /* Find the virtual function number by finding the right virtfn link. */
-        dir = opendir(physfn_pci_syspath);
-        if (!dir)
-                return -errno;
+        FOREACH_DEVICE_CHILD_WITH_SUFFIX(physfn_pcidev, child, name) {
+                const char *n, *s;
 
-        FOREACH_DIRENT_ALL(dent, dir, break) {
-                _cleanup_free_ char *virtfn_link_file = NULL, *virtfn_pci_syspath = NULL;
-
-                if (!startswith(dent->d_name, "virtfn"))
+                /* Only accepts e.g. virtfn0, virtfn1, and so on. */
+                n = startswith(name, "virtfn");
+                if (isempty(n) || !in_charset(n, DIGITS))
                         continue;
 
-                virtfn_link_file = path_join(physfn_pci_syspath, dent->d_name);
-                if (!virtfn_link_file)
-                        return -ENOMEM;
-
-                if (chase_symlinks(virtfn_link_file, NULL, 0, &virtfn_pci_syspath, NULL) < 0)
+                if (sd_device_get_syspath(child, &s) < 0)
                         continue;
 
-                if (streq(syspath, virtfn_pci_syspath)) {
-                        if (!snprintf_ok(suffix, sizeof(suffix), "v%s", &dent->d_name[6]))
-                                return -ENOENT;
+                if (streq(s, syspath)) {
+                        char *suffix;
 
-                        break;
+                        suffix = strjoin("v", n);
+                        if (!suffix)
+                                return -ENOMEM;
+
+                        *ret_physfn_pcidev = sd_device_ref(physfn_pcidev);
+                        *ret_suffix = suffix;
+                        return 0;
                 }
         }
-        if (isempty(suffix))
-                return -ENOENT;
 
-        ret->physfn_pcidev = TAKE_PTR(physfn_pcidev);
-        strncpy(ret->suffix, suffix, sizeof(ret->suffix));
-
-        return 0;
+        return -ENOENT;
 }
 
 static bool is_valid_onboard_index(unsigned long idx) {
@@ -172,74 +164,93 @@
 }
 
 /* retrieve on-board index number and label from firmware */
-static int dev_pci_onboard(sd_device *dev, struct netnames *names) {
+static int dev_pci_onboard(sd_device *dev, const LinkInfo *info, NetNames *names) {
         unsigned long idx, dev_port = 0;
-        const char *attr, *port_name = NULL;
+        const char *attr;
         size_t l;
         char *s;
         int r;
 
+        assert(dev);
+        assert(info);
+        assert(names);
+
         /* ACPI _DSM — device specific method for naming a PCI or PCI Express device */
-        if (sd_device_get_sysattr_value(names->pcidev, "acpi_index", &attr) < 0) {
+        if (sd_device_get_sysattr_value(names->pcidev, "acpi_index", &attr) >= 0)
+                log_device_debug(names->pcidev, "acpi_index=%s", attr);
+        else {
                 /* SMBIOS type 41 — Onboard Devices Extended Information */
                 r = sd_device_get_sysattr_value(names->pcidev, "index", &attr);
                 if (r < 0)
                         return r;
+                log_device_debug(names->pcidev, "index=%s", attr);
         }
 
         r = safe_atolu(attr, &idx);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(names->pcidev, r,
+                                              "Failed to parse onboard index \"%s\": %m", attr);
         if (idx == 0 && !naming_scheme_has(NAMING_ZERO_ACPI_INDEX))
-                return -EINVAL;
-
+                return log_device_debug_errno(names->pcidev, SYNTHETIC_ERRNO(EINVAL),
+                                              "Naming scheme does not allow onboard index==0.");
         if (!is_valid_onboard_index(idx))
-                return -ENOENT;
+                return log_device_debug_errno(names->pcidev, SYNTHETIC_ERRNO(ENOENT),
+                                              "Not a valid onboard index: %lu", idx);
 
         /* kernel provided port index for multiple ports on a single PCI function */
         if (sd_device_get_sysattr_value(dev, "dev_port", &attr) >= 0) {
                 r = safe_atolu_full(attr, 10, &dev_port);
                 if (r < 0)
                         log_device_debug_errno(dev, r, "Failed to parse dev_port, ignoring: %m");
+                log_device_debug(dev, "dev_port=%lu", dev_port);
         }
 
-        /* kernel provided front panel port name for multiple port PCI device */
-        (void) sd_device_get_sysattr_value(dev, "phys_port_name", &port_name);
-
         s = names->pci_onboard;
         l = sizeof(names->pci_onboard);
         l = strpcpyf(&s, l, "o%lu", idx);
-        if (port_name)
-                l = strpcpyf(&s, l, "n%s", port_name);
+        if (!isempty(info->phys_port_name))
+                /* kernel provided front panel port name for multiple port PCI device */
+                l = strpcpyf(&s, l, "n%s", info->phys_port_name);
         else if (dev_port > 0)
                 l = strpcpyf(&s, l, "d%lu", dev_port);
         if (l == 0)
                 names->pci_onboard[0] = '\0';
+        log_device_debug(dev, "Onboard index identifier: index=%lu phys_port=%s dev_port=%lu %s %s",
+                         idx, strempty(info->phys_port_name), dev_port,
+                         special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_onboard));
 
-        if (sd_device_get_sysattr_value(names->pcidev, "label", &names->pci_onboard_label) < 0)
+        if (sd_device_get_sysattr_value(names->pcidev, "label", &names->pci_onboard_label) >= 0)
+                log_device_debug(dev, "Onboard label from PCI device: %s", names->pci_onboard_label);
+        else
                 names->pci_onboard_label = NULL;
 
         return 0;
 }
 
 /* read the 256 bytes PCI configuration space to check the multi-function bit */
-static bool is_pci_multifunction(sd_device *dev) {
-        _cleanup_close_ int fd = -1;
+static int is_pci_multifunction(sd_device *dev) {
+        _cleanup_free_ uint8_t *config = NULL;
         const char *filename, *syspath;
-        uint8_t config[64];
+        size_t len;
+        int r;
 
-        if (sd_device_get_syspath(dev, &syspath) < 0)
-                return false;
+        r = sd_device_get_syspath(dev, &syspath);
+        if (r < 0)
+                return r;
 
         filename = strjoina(syspath, "/config");
-        fd = open(filename, O_RDONLY | O_CLOEXEC);
-        if (fd < 0)
-                return false;
-        if (read(fd, &config, sizeof(config)) != sizeof(config))
-                return false;
+        r = read_virtual_file(filename, PCI_HEADER_TYPE + 1, (char **) &config, &len);
+        if (r < 0)
+                return r;
+        if (len < PCI_HEADER_TYPE + 1)
+                return -EINVAL;
+
+#ifndef PCI_HEADER_TYPE_MULTIFUNC
+#define PCI_HEADER_TYPE_MULTIFUNC 0x80
+#endif
 
         /* bit 0-6 header type, bit 7 multi/single function device */
-        return config[PCI_HEADER_TYPE] & 0x80;
+        return config[PCI_HEADER_TYPE] & PCI_HEADER_TYPE_MULTIFUNC;
 }
 
 static bool is_pci_ari_enabled(sd_device *dev) {
@@ -267,12 +278,15 @@
                 return false;
 
         /* PCI device subclass 04 corresponds to PCI bridge */
-        return strneq(p + 2, "04", 2);
+        bool b = strneq(p + 2, "04", 2);
+        if (b)
+                log_device_debug(dev, "Device is a PCI bridge.");
+        return b;
 }
 
-static int parse_hotplug_slot_from_function_id(sd_device *dev, const char *slots, uint32_t *ret) {
+static int parse_hotplug_slot_from_function_id(sd_device *dev, int slots_dirfd, uint32_t *ret) {
         uint64_t function_id;
-        char path[PATH_MAX];
+        char filename[NAME_MAX+1];
         const char *attr;
         int r;
 
@@ -285,7 +299,7 @@
          * between PCI function and its hotplug slot. */
 
         assert(dev);
-        assert(slots);
+        assert(slots_dirfd >= 0);
         assert(ret);
 
         if (!naming_scheme_has(NAMING_SLOT_FUNCTION_ID))
@@ -303,34 +317,41 @@
                                               "Invalid function id (0x%"PRIx64"), ignoring.",
                                               function_id);
 
-        if (!snprintf_ok(path, sizeof path, "%s/%08"PRIx64, slots, function_id))
+        if (!snprintf_ok(filename, sizeof(filename), "%08"PRIx64, function_id))
                 return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENAMETOOLONG),
                                               "PCI slot path is too long, ignoring.");
 
-        if (access(path, F_OK) < 0)
-                return log_device_debug_errno(dev, errno, "Cannot access %s, ignoring: %m", path);
+        if (faccessat(slots_dirfd, filename, F_OK, 0) < 0)
+                return log_device_debug_errno(dev, errno, "Cannot access %s under pci slots, ignoring: %m", filename);
 
         *ret = (uint32_t) function_id;
         return 1;
 }
 
-static int dev_pci_slot(sd_device *dev, struct netnames *names) {
-        const char *sysname, *attr, *port_name = NULL, *syspath;
+static int dev_pci_slot(sd_device *dev, const LinkInfo *info, NetNames *names) {
+        const char *sysname, *attr;
         _cleanup_(sd_device_unrefp) sd_device *pci = NULL;
         _cleanup_closedir_ DIR *dir = NULL;
         unsigned domain, bus, slot, func;
         sd_device *hotplug_slot_dev;
         unsigned long dev_port = 0;
         uint32_t hotplug_slot = 0;
-        char slots[PATH_MAX], *s;
         size_t l;
+        char *s;
         int r;
 
+        assert(dev);
+        assert(info);
+        assert(names);
+
         r = sd_device_get_sysname(names->pcidev, &sysname);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(names->pcidev, r, "Failed to get sysname: %m");
 
-        if (sscanf(sysname, "%x:%x:%x.%u", &domain, &bus, &slot, &func) != 4)
+        r = sscanf(sysname, "%x:%x:%x.%u", &domain, &bus, &slot, &func);
+        log_device_debug(dev, "Parsing slot information from PCI device sysname \"%s\": %s",
+                         sysname, r == 4 ? "success" : "failure");
+        if (r != 4)
                 return -ENOENT;
 
         if (naming_scheme_has(NAMING_NPAR_ARI) &&
@@ -342,66 +363,58 @@
 
         /* kernel provided port index for multiple ports on a single PCI function */
         if (sd_device_get_sysattr_value(dev, "dev_port", &attr) >= 0) {
+                log_device_debug(dev, "dev_port=%s", attr);
+
                 r = safe_atolu_full(attr, 10, &dev_port);
                 if (r < 0)
                         log_device_debug_errno(dev, r, "Failed to parse attribute dev_port, ignoring: %m");
+
                 /* With older kernels IP-over-InfiniBand network interfaces sometimes erroneously
                  * provide the port number in the 'dev_id' sysfs attribute instead of 'dev_port',
                  * which thus stays initialized as 0. */
                 if (dev_port == 0 &&
-                    sd_device_get_sysattr_value(dev, "type", &attr) >= 0) {
-                        unsigned long type;
+                    info->iftype == ARPHRD_INFINIBAND &&
+                    sd_device_get_sysattr_value(dev, "dev_id", &attr) >= 0) {
+                        log_device_debug(dev, "dev_id=%s", attr);
 
-                        r = safe_atolu_full(attr, 10, &type);
+                        r = safe_atolu_full(attr, 10, &dev_port);
                         if (r < 0)
-                                log_device_debug_errno(dev, r, "Failed to parse attribute type, ignoring: %m");
-                        else if (type == ARPHRD_INFINIBAND &&
-                                 sd_device_get_sysattr_value(dev, "dev_id", &attr) >= 0) {
-                                r = safe_atolu_full(attr, 10, &dev_port);
-                                if (r < 0)
-                                        log_device_debug_errno(dev, r, "Failed to parse attribute dev_id, ignoring: %m");
-                        }
+                                log_device_debug_errno(dev, r, "Failed to parse attribute dev_id, ignoring: %m");
                 }
         }
 
-        /* kernel provided front panel port name for multi-port PCI device */
-        (void) sd_device_get_sysattr_value(dev, "phys_port_name", &port_name);
-
         /* compose a name based on the raw kernel's PCI bus, slot numbers */
         s = names->pci_path;
         l = sizeof(names->pci_path);
         if (domain > 0)
                 l = strpcpyf(&s, l, "P%u", domain);
         l = strpcpyf(&s, l, "p%us%u", bus, slot);
-        if (func > 0 || is_pci_multifunction(names->pcidev))
+        if (func > 0 || is_pci_multifunction(names->pcidev) > 0)
                 l = strpcpyf(&s, l, "f%u", func);
-        if (port_name)
-                l = strpcpyf(&s, l, "n%s", port_name);
+        if (!isempty(info->phys_port_name))
+                /* kernel provided front panel port name for multi-port PCI device */
+                l = strpcpyf(&s, l, "n%s", info->phys_port_name);
         else if (dev_port > 0)
                 l = strpcpyf(&s, l, "d%lu", dev_port);
         if (l == 0)
                 names->pci_path[0] = '\0';
 
+        log_device_debug(dev, "PCI path identifier: domain=%u bus=%u slot=%u func=%u phys_port=%s dev_port=%lu %s %s",
+                         domain, bus, slot, func, strempty(info->phys_port_name), dev_port,
+                         special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_path));
+
         /* ACPI _SUN — slot user number */
         r = sd_device_new_from_subsystem_sysname(&pci, "subsystem", "pci");
         if (r < 0)
-                return r;
+                return log_debug_errno(r, "sd_device_new_from_subsystem_sysname() failed: %m");
 
-        r = sd_device_get_syspath(pci, &syspath);
+        r = device_opendir(pci, "slots", &dir);
         if (r < 0)
-                return r;
-        if (!snprintf_ok(slots, sizeof slots, "%s/slots", syspath))
-                return -ENAMETOOLONG;
-
-        dir = opendir(slots);
-        if (!dir)
-                return -errno;
+                return log_device_debug_errno(dev, r, "Cannot access 'slots' subdirectory: %m");
 
         hotplug_slot_dev = names->pcidev;
         while (hotplug_slot_dev) {
-                struct dirent *dent;
-
-                r = parse_hotplug_slot_from_function_id(hotplug_slot_dev, slots, &hotplug_slot);
+                r = parse_hotplug_slot_from_function_id(hotplug_slot_dev, dirfd(dir), &hotplug_slot);
                 if (r < 0)
                         return 0;
                 if (r > 0) {
@@ -413,33 +426,49 @@
                 if (r < 0)
                         return log_device_debug_errno(hotplug_slot_dev, r, "Failed to get sysname: %m");
 
-                FOREACH_DIRENT_ALL(dent, dir, break) {
-                        _cleanup_free_ char *address = NULL;
-                        char str[PATH_MAX];
+                FOREACH_DIRENT_ALL(de, dir, break) {
+                        _cleanup_free_ char *path = NULL;
+                        const char *address;
                         uint32_t i;
 
-                        if (dot_or_dot_dot(dent->d_name))
+                        if (dot_or_dot_dot(de->d_name))
                                 continue;
 
-                        r = safe_atou32(dent->d_name, &i);
+                        r = safe_atou32(de->d_name, &i);
                         if (r < 0 || i <= 0)
                                 continue;
 
+                        path = path_join("slots", de->d_name, "address");
+                        if (!path)
+                                return -ENOMEM;
+
+                        if (sd_device_get_sysattr_value(pci, path, &address) < 0)
+                                continue;
+
                         /* match slot address with device by stripping the function */
-                        if (snprintf_ok(str, sizeof str, "%s/%s/address", slots, dent->d_name) &&
-                            read_one_line_file(str, &address) >= 0 &&
-                            startswith(sysname, address)) {
-                                hotplug_slot = i;
+                        if (!startswith(sysname, address))
+                                continue;
 
-                                /* We found the match between PCI device and slot. However, we won't use the
-                                 * slot index if the device is a PCI bridge, because it can have other child
-                                 * devices that will try to claim the same index and that would create name
-                                 * collision. */
-                                if (naming_scheme_has(NAMING_BRIDGE_NO_SLOT) && is_pci_bridge(hotplug_slot_dev))
+                        hotplug_slot = i;
+
+                        /* We found the match between PCI device and slot. However, we won't use the slot
+                         * index if the device is a PCI bridge, because it can have other child devices that
+                         * will try to claim the same index and that would create name collision. */
+                        if (naming_scheme_has(NAMING_BRIDGE_NO_SLOT) && is_pci_bridge(hotplug_slot_dev)) {
+                                if (naming_scheme_has(NAMING_BRIDGE_MULTIFUNCTION_SLOT) && is_pci_multifunction(names->pcidev) <= 0) {
+                                        log_device_debug(dev,
+                                                         "Not using slot information because the PCI device associated with "
+                                                         "the hotplug slot is a bridge and the PCI device has a single function.");
                                         return 0;
+                                }
 
-                                break;
+                                if (!naming_scheme_has(NAMING_BRIDGE_MULTIFUNCTION_SLOT)) {
+                                        log_device_debug(dev, "Not using slot information because the PCI device is a bridge.");
+                                        return 0;
+                                }
                         }
+
+                        break;
                 }
                 if (hotplug_slot > 0)
                         break;
@@ -452,22 +481,26 @@
                 s = names->pci_slot;
                 l = sizeof(names->pci_slot);
                 if (domain > 0)
-                        l = strpcpyf(&s, l, "P%d", domain);
+                        l = strpcpyf(&s, l, "P%u", domain);
                 l = strpcpyf(&s, l, "s%"PRIu32, hotplug_slot);
-                if (func > 0 || is_pci_multifunction(names->pcidev))
-                        l = strpcpyf(&s, l, "f%d", func);
-                if (port_name)
-                        l = strpcpyf(&s, l, "n%s", port_name);
+                if (func > 0 || is_pci_multifunction(names->pcidev) > 0)
+                        l = strpcpyf(&s, l, "f%u", func);
+                if (!isempty(info->phys_port_name))
+                        l = strpcpyf(&s, l, "n%s", info->phys_port_name);
                 else if (dev_port > 0)
                         l = strpcpyf(&s, l, "d%lu", dev_port);
                 if (l == 0)
                         names->pci_slot[0] = '\0';
+
+                log_device_debug(dev, "Slot identifier: domain=%u slot=%"PRIu32" func=%u phys_port=%s dev_port=%lu %s %s",
+                                 domain, hotplug_slot, func, strempty(info->phys_port_name), dev_port,
+                                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_slot));
         }
 
         return 0;
 }
 
-static int names_vio(sd_device *dev, struct netnames *names) {
+static int names_vio(sd_device *dev, NetNames *names) {
         sd_device *parent;
         unsigned busid, slotid, ethid;
         const char *syspath, *subsystem;
@@ -476,13 +509,14 @@
         /* check if our direct parent is a VIO device with no other bus in-between */
         r = sd_device_get_parent(dev, &parent);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(dev, r, "sd_device_get_parent() failed: %m");
 
         r = sd_device_get_subsystem(parent, &subsystem);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(parent, r, "sd_device_get_subsystem() failed: %m");
         if (!streq("vio", subsystem))
                 return -ENOENT;
+        log_device_debug(dev, "Parent device is in the vio subsystem.");
 
         /* The devices' $DEVPATH number is tied to (virtual) hardware (slot id
          * selected in the HMC), thus this provides a reliable naming (e.g.
@@ -490,21 +524,26 @@
          * there should only ever be one bus, and then remove leading zeros. */
         r = sd_device_get_syspath(dev, &syspath);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(dev, r, "sd_device_get_syspath() failed: %m");
 
-        if (sscanf(syspath, "/sys/devices/vio/%4x%4x/net/eth%u", &busid, &slotid, &ethid) != 3)
+        r = sscanf(syspath, "/sys/devices/vio/%4x%4x/net/eth%u", &busid, &slotid, &ethid);
+        log_device_debug(dev, "Parsing vio slot information from syspath \"%s\": %s",
+                         syspath, r == 3 ? "success" : "failure");
+        if (r != 3)
                 return -EINVAL;
 
         xsprintf(names->vio_slot, "v%u", slotid);
         names->type = NET_VIO;
+        log_device_debug(dev, "Vio slot identifier: slotid=%u %s %s",
+                         slotid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->vio_slot);
         return 0;
 }
 
-#define _PLATFORM_TEST "/sys/devices/platform/vvvvPPPP"
-#define _PLATFORM_PATTERN4 "/sys/devices/platform/%4s%4x:%2x/net/eth%u"
-#define _PLATFORM_PATTERN3 "/sys/devices/platform/%3s%4x:%2x/net/eth%u"
+#define PLATFORM_TEST "/sys/devices/platform/vvvvPPPP"
+#define PLATFORM_PATTERN4 "/sys/devices/platform/%4s%4x:%2x/net/eth%u"
+#define PLATFORM_PATTERN3 "/sys/devices/platform/%3s%4x:%2x/net/eth%u"
 
-static int names_platform(sd_device *dev, struct netnames *names, bool test) {
+static int names_platform(sd_device *dev, NetNames *names, bool test) {
         sd_device *parent;
         char vendor[5];
         unsigned model, instance, ethid;
@@ -514,29 +553,32 @@
         /* check if our direct parent is a platform device with no other bus in-between */
         r = sd_device_get_parent(dev, &parent);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(dev, r, "sd_device_get_parent() failed: %m");
 
         r = sd_device_get_subsystem(parent, &subsystem);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(parent, r, "sd_device_get_subsystem() failed: %m");
 
         if (!streq("platform", subsystem))
                  return -ENOENT;
+        log_device_debug(dev, "Parent device is in the platform subsystem.");
 
         r = sd_device_get_syspath(dev, &syspath);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(dev, r, "sd_device_get_syspath() failed: %m");
 
         /* syspath is too short, to have a valid ACPI instance */
-        if (strlen(syspath) < sizeof _PLATFORM_TEST)
-                return -EINVAL;
+        if (strlen(syspath) < STRLEN(PLATFORM_TEST) + 1)
+                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                              "Syspath \"%s\" is too short for a valid ACPI instance.",
+                                              syspath);
 
         /* Vendor ID can be either PNP ID (3 chars A-Z) or ACPI ID (4 chars A-Z and numerals) */
-        if (syspath[sizeof _PLATFORM_TEST - 1] == ':') {
-                pattern = _PLATFORM_PATTERN4;
+        if (syspath[STRLEN(PLATFORM_TEST)] == ':') {
+                pattern = PLATFORM_PATTERN4;
                 validchars = UPPERCASE_LETTERS DIGITS;
         } else {
-                pattern = _PLATFORM_PATTERN3;
+                pattern = PLATFORM_PATTERN3;
                 validchars = UPPERCASE_LETTERS;
         }
 
@@ -545,28 +587,123 @@
          * The Vendor (3 or 4 char), followed by hexadecimal model number : instance id. */
 
         DISABLE_WARNING_FORMAT_NONLITERAL;
-        if (sscanf(syspath, pattern, vendor, &model, &instance, &ethid) != 4)
-                return -EINVAL;
+        r = sscanf(syspath, pattern, vendor, &model, &instance, &ethid);
         REENABLE_WARNING;
+        log_device_debug(dev, "Parsing platform device information from syspath \"%s\": %s",
+                         syspath, r == 4 ? "success" : "failure");
+        if (r != 4)
+                return -EINVAL;
 
         if (!in_charset(vendor, validchars))
-                return -ENOENT;
+                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENOENT),
+                                              "Platform vendor contains invalid characters: %s", vendor);
 
         ascii_strlower(vendor);
 
         xsprintf(names->platform_path, "a%s%xi%u", vendor, model, instance);
         names->type = NET_PLATFORM;
+        log_device_debug(dev, "Platform identifier: vendor=%s model=%u instance=%u %s %s",
+                         vendor, model, instance, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->platform_path);
         return 0;
 }
 
-static int names_pci(sd_device *dev, struct netnames *names) {
+static int dev_devicetree_onboard(sd_device *dev, NetNames *names) {
+        _cleanup_(sd_device_unrefp) sd_device *aliases_dev = NULL, *ofnode_dev = NULL, *devicetree_dev = NULL;
+        const char *alias, *ofnode_path, *ofnode_syspath, *devicetree_syspath;
         sd_device *parent;
-        struct netnames vf_names = {};
-        struct virtfn_info vf_info = {};
+        int r;
+
+        if (!naming_scheme_has(NAMING_DEVICETREE_ALIASES))
+                return 0;
+
+        /* check if our direct parent has an of_node */
+        r = sd_device_get_parent(dev, &parent);
+        if (r < 0)
+                return r;
+
+        r = sd_device_new_child(&ofnode_dev, parent, "of_node");
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_syspath(ofnode_dev, &ofnode_syspath);
+        if (r < 0)
+                return r;
+
+        /* /proc/device-tree should be a symlink to /sys/firmware/devicetree/base. */
+        r = sd_device_new_from_path(&devicetree_dev, "/proc/device-tree");
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_syspath(devicetree_dev, &devicetree_syspath);
+        if (r < 0)
+                return r;
+
+        /*
+         * Example paths:
+         * devicetree_syspath = /sys/firmware/devicetree/base
+         * ofnode_syspath = /sys/firmware/devicetree/base/soc/ethernet@deadbeef
+         * ofnode_path = soc/ethernet@deadbeef
+         */
+        ofnode_path = path_startswith(ofnode_syspath, devicetree_syspath);
+        if (!ofnode_path)
+                return -ENOENT;
+
+        /* Get back our leading / to match the contents of the aliases */
+        ofnode_path--;
+        assert(path_is_absolute(ofnode_path));
+
+        r = sd_device_new_child(&aliases_dev, devicetree_dev, "aliases");
+        if (r < 0)
+                return r;
+
+        FOREACH_DEVICE_SYSATTR(aliases_dev, alias) {
+                const char *alias_path, *alias_index, *conflict;
+                unsigned i;
+
+                alias_index = startswith(alias, "ethernet");
+                if (!alias_index)
+                        continue;
+
+                if (sd_device_get_sysattr_value(aliases_dev, alias, &alias_path) < 0)
+                        continue;
+
+                if (!path_equal(ofnode_path, alias_path))
+                        continue;
+
+                /* If there's no index, we default to 0... */
+                if (isempty(alias_index)) {
+                        i = 0;
+                        conflict = "ethernet0";
+                } else {
+                        r = safe_atou(alias_index, &i);
+                        if (r < 0)
+                                return log_device_debug_errno(dev, r,
+                                                "Could not get index of alias %s: %m", alias);
+                        conflict = "ethernet";
+                }
+
+                /* ...but make sure we don't have an alias conflict */
+                if (i == 0 && sd_device_get_sysattr_value(aliases_dev, conflict, NULL) >= 0)
+                        return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EEXIST),
+                                        "Ethernet alias conflict: ethernet and ethernet0 both exist");
+
+                xsprintf(names->devicetree_onboard, "d%u", i);
+                names->type = NET_DEVICETREE;
+                return 0;
+        }
+
+        return -ENOENT;
+}
+
+static int names_pci(sd_device *dev, const LinkInfo *info, NetNames *names) {
+        _cleanup_(sd_device_unrefp) sd_device *physfn_pcidev = NULL;
+        _cleanup_free_ char *virtfn_suffix = NULL;
+        sd_device *parent;
         const char *subsystem;
         int r;
 
         assert(dev);
+        assert(info);
         assert(names);
 
         r = sd_device_get_parent(dev, &parent);
@@ -590,33 +727,35 @@
         }
 
         if (naming_scheme_has(NAMING_SR_IOV_V) &&
-            get_virtfn_info(dev, names, &vf_info) >= 0) {
+            get_virtfn_info(names->pcidev, &physfn_pcidev, &virtfn_suffix) >= 0) {
+                NetNames vf_names = {};
+
                 /* If this is an SR-IOV virtual device, get base name using physical device and add virtfn suffix. */
-                vf_names.pcidev = vf_info.physfn_pcidev;
-                dev_pci_onboard(dev, &vf_names);
-                dev_pci_slot(dev, &vf_names);
+                vf_names.pcidev = physfn_pcidev;
+                dev_pci_onboard(dev, info, &vf_names);
+                dev_pci_slot(dev, info, &vf_names);
+
                 if (vf_names.pci_onboard[0])
-                        if (strlen(vf_names.pci_onboard) + strlen(vf_info.suffix) < sizeof(names->pci_onboard))
+                        if (strlen(vf_names.pci_onboard) + strlen(virtfn_suffix) < sizeof(names->pci_onboard))
                                 strscpyl(names->pci_onboard, sizeof(names->pci_onboard),
-                                         vf_names.pci_onboard, vf_info.suffix, NULL);
+                                         vf_names.pci_onboard, virtfn_suffix, NULL);
                 if (vf_names.pci_slot[0])
-                        if (strlen(vf_names.pci_slot) + strlen(vf_info.suffix) < sizeof(names->pci_slot))
+                        if (strlen(vf_names.pci_slot) + strlen(virtfn_suffix) < sizeof(names->pci_slot))
                                 strscpyl(names->pci_slot, sizeof(names->pci_slot),
-                                         vf_names.pci_slot, vf_info.suffix, NULL);
+                                         vf_names.pci_slot, virtfn_suffix, NULL);
                 if (vf_names.pci_path[0])
-                        if (strlen(vf_names.pci_path) + strlen(vf_info.suffix) < sizeof(names->pci_path))
+                        if (strlen(vf_names.pci_path) + strlen(virtfn_suffix) < sizeof(names->pci_path))
                                 strscpyl(names->pci_path, sizeof(names->pci_path),
-                                         vf_names.pci_path, vf_info.suffix, NULL);
-                sd_device_unref(vf_info.physfn_pcidev);
+                                         vf_names.pci_path, virtfn_suffix, NULL);
         } else {
-                dev_pci_onboard(dev, names);
-                dev_pci_slot(dev, names);
+                dev_pci_onboard(dev, info, names);
+                dev_pci_slot(dev, info, names);
         }
 
         return 0;
 }
 
-static int names_usb(sd_device *dev, struct netnames *names) {
+static int names_usb(sd_device *dev, NetNames *names) {
         sd_device *usbdev;
         char name[256], *ports, *config, *interf, *s;
         const char *sysname;
@@ -628,28 +767,31 @@
 
         r = sd_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_interface", &usbdev);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(dev, r, "sd_device_get_parent_with_subsystem_devtype() failed: %m");
 
         r = sd_device_get_sysname(usbdev, &sysname);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(usbdev, r, "sd_device_get_sysname() failed: %m");
 
         /* get USB port number chain, configuration, interface */
         strscpy(name, sizeof(name), sysname);
         s = strchr(name, '-');
         if (!s)
-                return -EINVAL;
+                return log_device_debug_errno(usbdev, SYNTHETIC_ERRNO(EINVAL),
+                                              "sysname \"%s\" does not have '-' in the expected place.", sysname);
         ports = s+1;
 
         s = strchr(ports, ':');
         if (!s)
-                return -EINVAL;
+                return log_device_debug_errno(usbdev, SYNTHETIC_ERRNO(EINVAL),
+                                              "sysname \"%s\" does not have ':' in the expected place.", sysname);
         s[0] = '\0';
         config = s+1;
 
         s = strchr(config, '.');
         if (!s)
-                return -EINVAL;
+                return log_device_debug_errno(usbdev, SYNTHETIC_ERRNO(EINVAL),
+                                              "sysname \"%s\" does not have '.' in the expected place.", sysname);
         s[0] = '\0';
         interf = s+1;
 
@@ -668,13 +810,16 @@
         if (!streq(interf, "0"))
                 l = strpcpyl(&s, sizeof(names->usb_ports), "i", interf, NULL);
         if (l == 0)
-                return -ENAMETOOLONG;
-
+                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENAMETOOLONG),
+                                              "Generated USB name would be too long.");
+        log_device_debug(dev, "USB name identifier: ports=%.*s config=%s interface=%s %s %s",
+                         (int) strlen(ports), sysname + (ports - name), config, interf,
+                         special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->usb_ports);
         names->type = NET_USB;
         return 0;
 }
 
-static int names_bcma(sd_device *dev, struct netnames *names) {
+static int names_bcma(sd_device *dev, NetNames *names) {
         sd_device *bcmadev;
         unsigned core;
         const char *sysname;
@@ -685,28 +830,32 @@
 
         r = sd_device_get_parent_with_subsystem_devtype(dev, "bcma", NULL, &bcmadev);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(dev, r, "sd_device_get_parent_with_subsystem_devtype() failed: %m");
 
         r = sd_device_get_sysname(bcmadev, &sysname);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(dev, r, "sd_device_get_sysname() failed: %m");
 
         /* bus num:core num */
-        if (sscanf(sysname, "bcma%*u:%u", &core) != 1)
+        r = sscanf(sysname, "bcma%*u:%u", &core);
+        log_device_debug(dev, "Parsing bcma device information from sysname \"%s\": %s",
+                         sysname, r == 1 ? "success" : "failure");
+        if (r != 1)
                 return -EINVAL;
         /* suppress the common core == 0 */
         if (core > 0)
                 xsprintf(names->bcma_core, "b%u", core);
 
         names->type = NET_BCMA;
+        log_device_debug(dev, "BCMA core identifier: core=%u %s \"%s\"",
+                         core, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->bcma_core);
         return 0;
 }
 
-static int names_ccw(sd_device *dev, struct netnames *names) {
+static int names_ccw(sd_device *dev, NetNames *names) {
         sd_device *cdev;
         const char *bus_id, *subsys;
-        size_t bus_id_len;
-        size_t bus_id_start;
+        size_t bus_id_start, bus_id_len;
         int r;
 
         assert(dev);
@@ -715,7 +864,7 @@
         /* Retrieve the associated CCW device */
         r = sd_device_get_parent(dev, &cdev);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(dev, r, "sd_device_get_parent() failed: %m");
 
         /* skip virtio subsystem if present */
         cdev = skip_virtio(cdev);
@@ -724,11 +873,12 @@
 
         r = sd_device_get_subsystem(cdev, &subsys);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(cdev, r, "sd_device_get_subsystem() failed: %m");
 
         /* Network devices are either single or grouped CCW devices */
         if (!STR_IN_SET(subsys, "ccwgroup", "ccw"))
                 return -ENOENT;
+        log_device_debug(dev, "Device is CCW.");
 
         /* Retrieve bus-ID of the CCW device.  The bus-ID uniquely
          * identifies the network device on the Linux on System z channel
@@ -736,14 +886,15 @@
          */
         r = sd_device_get_sysname(cdev, &bus_id);
         if (r < 0)
-                return r;
+                return log_device_debug_errno(cdev, r, "Failed to get sysname: %m");
 
         /* Check the length of the bus-ID. Rely on the fact that the kernel provides a correct bus-ID;
          * alternatively, improve this check and parse and verify each bus-ID part...
          */
         bus_id_len = strlen(bus_id);
         if (!IN_SET(bus_id_len, 8, 9))
-                return -EINVAL;
+                return log_device_debug_errno(cdev, SYNTHETIC_ERRNO(EINVAL),
+                                              "Invalid bus_id: %s", bus_id);
 
         /* Strip leading zeros from the bus id for aesthetic purposes. This
          * keeps the ccw names stable, yet much shorter in general case of
@@ -754,82 +905,63 @@
         bus_id += bus_id_start < bus_id_len ? bus_id_start : bus_id_len - 1;
 
         /* Store the CCW bus-ID for use as network device name */
-        if (snprintf_ok(names->ccw_busid, sizeof(names->ccw_busid), "c%s", bus_id))
-                names->type = NET_CCW;
-
+        if (!snprintf_ok(names->ccw_busid, sizeof(names->ccw_busid), "c%s", bus_id))
+                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENAMETOOLONG),
+                                              "Generated CCW name would be too long.");
+        names->type = NET_CCW;
+        log_device_debug(dev, "CCW identifier: ccw_busid=%s %s \"%s\"",
+                         bus_id, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->ccw_busid);
         return 0;
 }
 
-static int names_mac(sd_device *dev, struct netnames *names) {
+static int names_mac(sd_device *dev, const LinkInfo *info) {
         const char *s;
-        unsigned long i;
-        unsigned a1, a2, a3, a4, a5, a6;
+        unsigned i;
         int r;
 
-        /* Some kinds of devices tend to have hardware addresses
-         * that are impossible to use in an iface name.
-         */
-        r = sd_device_get_sysattr_value(dev, "type", &s);
-        if (r < 0)
-                return r;
+        assert(dev);
+        assert(info);
 
-        r = safe_atolu_full(s, 10, &i);
-        if (r < 0)
-                return r;
-        switch (i) {
-        /* The persistent part of a hardware address of an InfiniBand NIC
-         * is 8 bytes long. We cannot fit this much in an iface name.
-         */
-        case ARPHRD_INFINIBAND:
-                return -EINVAL;
-        default:
-                break;
-        }
+        /* The persistent part of a hardware address of an InfiniBand NIC is 8 bytes long. We cannot
+         * fit this much in an iface name.
+         * TODO: but it can be used as alternative names?? */
+        if (info->iftype == ARPHRD_INFINIBAND)
+                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                              "Not generating MAC name for infiniband device.");
+        if (info->hw_addr.length != 6)
+                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                              "Not generating MAC name for device with MAC address of length %zu.",
+                                              info->hw_addr.length);
 
         /* check for NET_ADDR_PERM, skip random MAC addresses */
         r = sd_device_get_sysattr_value(dev, "addr_assign_type", &s);
         if (r < 0)
-                return r;
-        r = safe_atolu(s, &i);
+                return log_device_debug_errno(dev, r, "Failed to read addr_assign_type: %m");
+        r = safe_atou(s, &i);
         if (r < 0)
-                return r;
-        if (i != 0)
-                return 0;
-
-        r = sd_device_get_sysattr_value(dev, "address", &s);
-        if (r < 0)
-                return r;
-        if (sscanf(s, "%x:%x:%x:%x:%x:%x", &a1, &a2, &a3, &a4, &a5, &a6) != 6)
-                return -EINVAL;
-
-        /* skip empty MAC addresses */
-        if (a1 + a2 + a3 + a4 + a5 + a6 == 0)
-                return -EINVAL;
-
-        names->mac[0] = a1;
-        names->mac[1] = a2;
-        names->mac[2] = a3;
-        names->mac[3] = a4;
-        names->mac[4] = a5;
-        names->mac[5] = a6;
-        names->mac_valid = true;
+                return log_device_debug_errno(dev, r, "Failed to parse addr_assign_type: %m");
+        if (i != NET_ADDR_PERM)
+                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                              "addr_assign_type=%u, MAC address is not permanent.", i);
         return 0;
 }
 
-static int names_netdevsim(sd_device *dev, struct netnames *names) {
+static int names_netdevsim(sd_device *dev, const LinkInfo *info, NetNames *names) {
         sd_device *netdevsimdev;
         const char *sysname;
         unsigned addr;
-        const char *port_name = NULL;
         int r;
-        bool ok;
 
         if (!naming_scheme_has(NAMING_NETDEVSIM))
                 return 0;
 
         assert(dev);
+        assert(info);
         assert(names);
 
+        if (isempty(info->phys_port_name))
+                return -EINVAL;
+
         r = sd_device_get_parent_with_subsystem_devtype(dev, "netdevsim", NULL, &netdevsimdev);
         if (r < 0)
                 return r;
@@ -840,12 +972,7 @@
         if (sscanf(sysname, "netdevsim%u", &addr) != 1)
                 return -EINVAL;
 
-        r = sd_device_get_sysattr_value(dev, "phys_port_name", &port_name);
-        if (r < 0)
-                return r;
-
-        ok = snprintf_ok(names->netdevsim_path, sizeof(names->netdevsim_path), "i%un%s", addr, port_name);
-        if (!ok)
+        if (!snprintf_ok(names->netdevsim_path, sizeof(names->netdevsim_path), "i%un%s", addr, info->phys_port_name))
                 return -ENOBUFS;
 
         names->type = NET_NETDEVSIM;
@@ -853,37 +980,138 @@
         return 0;
 }
 
-/* IEEE Organizationally Unique Identifier vendor string */
-static int ieee_oui(sd_device *dev, struct netnames *names, bool test) {
-        char str[32];
+static int names_xen(sd_device *dev, NetNames *names) {
+        sd_device *parent;
+        unsigned id;
+        const char *syspath, *subsystem, *p, *p2;
+        int r;
 
-        if (!names->mac_valid)
+        assert(dev);
+        assert(names);
+
+        if (!naming_scheme_has(NAMING_XEN_VIF))
+                return 0;
+
+        /* check if our direct parent is a Xen VIF device with no other bus in-between */
+        r = sd_device_get_parent(dev, &parent);
+        if (r < 0)
+                return r;
+
+        /* Do an exact-match on subsystem "xen". This will miss on "xen-backend" on
+         * purpose as the VIFs on the backend (dom0) have their own naming scheme
+         * which we don't want to affect
+         */
+        r = sd_device_get_subsystem(parent, &subsystem);
+        if (r < 0)
+                return r;
+        if (!streq("xen", subsystem))
                 return -ENOENT;
-        /* skip commonly misused 00:00:00 (Xerox) prefix */
-        if (memcmp(names->mac, "\0\0\0", 3) == 0)
-                return -EINVAL;
-        xsprintf(str, "OUI:%02X%02X%02X%02X%02X%02X", names->mac[0],
-                 names->mac[1], names->mac[2], names->mac[3], names->mac[4],
-                 names->mac[5]);
-        udev_builtin_hwdb_lookup(dev, NULL, str, NULL, test);
+
+        /* Use the vif-n name to extract "n" */
+        r = sd_device_get_syspath(dev, &syspath);
+        if (r < 0)
+                return r;
+
+        p = path_startswith(syspath, "/sys/devices/");
+        if (!p)
+                return -ENOENT;
+        p = startswith(p, "vif-");
+        if (!p)
+                return -ENOENT;
+        p2 = strchr(p, '/');
+        if (!p2)
+                return -ENOENT;
+        p = strndupa_safe(p, p2 - p);
+        if (!p)
+                return -ENOENT;
+        r = safe_atou_full(p, SAFE_ATO_REFUSE_PLUS_MINUS | SAFE_ATO_REFUSE_LEADING_ZERO |
+                           SAFE_ATO_REFUSE_LEADING_WHITESPACE | 10, &id);
+        if (r < 0)
+                return r;
+        xsprintf(names->xen_slot, "X%u", id);
+        names->type = NET_XENVIF;
         return 0;
 }
 
-static int builtin_net_id(sd_device *dev, int argc, char *argv[], bool test) {
-        const char *s, *p, *devtype, *prefix = "en";
-        struct netnames names = {};
-        unsigned long i;
+/* IEEE Organizationally Unique Identifier vendor string */
+static int ieee_oui(sd_device *dev, const LinkInfo *info, bool test) {
+        char str[32];
+
+        assert(dev);
+        assert(info);
+
+        if (info->hw_addr.length != 6)
+                return -EOPNOTSUPP;
+
+        /* skip commonly misused 00:00:00 (Xerox) prefix */
+        if (info->hw_addr.bytes[0] == 0 &&
+            info->hw_addr.bytes[1] == 0 &&
+            info->hw_addr.bytes[2] == 0)
+                return -EINVAL;
+
+        xsprintf(str, "OUI:%02X%02X%02X%02X%02X%02X",
+                 info->hw_addr.bytes[0],
+                 info->hw_addr.bytes[1],
+                 info->hw_addr.bytes[2],
+                 info->hw_addr.bytes[3],
+                 info->hw_addr.bytes[4],
+                 info->hw_addr.bytes[5]);
+        return udev_builtin_hwdb_lookup(dev, NULL, str, NULL, test);
+}
+
+static int get_link_info(sd_device *dev, LinkInfo *info) {
+        const char *s;
         int r;
 
-        /* handle only ARPHRD_ETHER, ARPHRD_SLIP and ARPHRD_INFINIBAND devices */
-        r = sd_device_get_sysattr_value(dev, "type", &s);
+        assert(dev);
+        assert(info);
+
+        r = sd_device_get_ifindex(dev, &info->ifindex);
         if (r < 0)
                 return r;
 
-        r = safe_atolu_full(s, 10, &i);
+        r = device_get_sysattr_int(dev, "iflink", &info->iflink);
         if (r < 0)
                 return r;
-        switch (i) {
+
+        r = device_get_sysattr_int(dev, "type", &info->iftype);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_devtype(dev, &info->devtype);
+        if (r < 0 && r != -ENOENT)
+                return r;
+
+        (void) sd_device_get_sysattr_value(dev, "phys_port_name", &info->phys_port_name);
+
+        r = sd_device_get_sysattr_value(dev, "address", &s);
+        if (r < 0 && r != -ENOENT)
+                return r;
+        if (r >= 0) {
+                r = parse_hw_addr(s, &info->hw_addr);
+                if (r < 0)
+                        log_device_debug_errno(dev, r, "Failed to parse 'address' sysattr, ignoring: %m");
+        }
+
+        return 0;
+}
+
+static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
+        const char *prefix;
+        NetNames names = {};
+        LinkInfo info = {};
+        int r;
+
+        r = get_link_info(dev, &info);
+        if (r < 0)
+                return r;
+
+        /* skip stacked devices, like VLANs, ... */
+        if (info.ifindex != info.iflink)
+                return 0;
+
+        /* handle only ARPHRD_ETHER, ARPHRD_SLIP and ARPHRD_INFINIBAND devices */
+        switch (info.iftype) {
         case ARPHRD_ETHER:
                 prefix = "en";
                 break;
@@ -900,35 +1128,32 @@
                 return 0;
         }
 
-        /* skip stacked devices, like VLANs, ... */
-        r = sd_device_get_sysattr_value(dev, "ifindex", &s);
-        if (r < 0)
-                return r;
-        r = sd_device_get_sysattr_value(dev, "iflink", &p);
-        if (r < 0)
-                return r;
-        if (!streq(s, p))
-                return 0;
-
-        if (sd_device_get_devtype(dev, &devtype) >= 0) {
-                if (streq("wlan", devtype))
-                        prefix = "wl";
-                else if (streq("wwan", devtype))
-                        prefix = "ww";
-        }
+        if (streq_ptr("wlan", info.devtype))
+                prefix = "wl";
+        else if (streq_ptr("wwan", info.devtype))
+                prefix = "ww";
 
         udev_builtin_add_property(dev, test, "ID_NET_NAMING_SCHEME", naming_scheme()->name);
 
-        r = names_mac(dev, &names);
-        if (r >= 0 && names.mac_valid) {
+        if (names_mac(dev, &info) >= 0) {
                 char str[ALTIFNAMSIZ];
 
-                xsprintf(str, "%sx%02x%02x%02x%02x%02x%02x", prefix,
-                         names.mac[0], names.mac[1], names.mac[2],
-                         names.mac[3], names.mac[4], names.mac[5]);
+                xsprintf(str, "%sx%s", prefix, HW_ADDR_TO_STR_FULL(&info.hw_addr, HW_ADDR_TO_STRING_NO_COLON));
                 udev_builtin_add_property(dev, test, "ID_NET_NAME_MAC", str);
+                log_device_debug(dev, "MAC address identifier: hw_addr=%s %s %s",
+                                 HW_ADDR_TO_STR(&info.hw_addr),
+                                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), str + strlen(prefix));
 
-                ieee_oui(dev, &names, test);
+                ieee_oui(dev, &info, test);
+        }
+
+        /* get devicetree aliases; only ethernet supported for now  */
+        if (streq(prefix, "en") && dev_devicetree_onboard(dev, &names) >= 0 &&
+            names.type == NET_DEVICETREE) {
+                char str[ALTIFNAMSIZ];
+
+                if (snprintf_ok(str, sizeof str, "%s%s", prefix, names.devicetree_onboard))
+                        udev_builtin_add_property(dev, test, "ID_NET_NAME_ONBOARD", str);
         }
 
         /* get path names for Linux on System z network devices */
@@ -959,7 +1184,7 @@
         }
 
         /* get netdevsim path names */
-        if (names_netdevsim(dev, &names) >= 0 && names.type == NET_NETDEVSIM) {
+        if (names_netdevsim(dev, &info, &names) >= 0 && names.type == NET_NETDEVSIM) {
                 char str[ALTIFNAMSIZ];
 
                 if (snprintf_ok(str, sizeof str, "%s%s", prefix, names.netdevsim_path))
@@ -968,9 +1193,33 @@
                 return 0;
         }
 
-        /* get PCI based path names, we compose only PCI based paths */
-        if (names_pci(dev, &names) < 0)
+        /* get xen vif "slot" based names. */
+        if (names_xen(dev, &names) >= 0 && names.type == NET_XENVIF) {
+                char str[ALTIFNAMSIZ];
+
+                if (snprintf_ok(str, sizeof str, "%s%s", prefix, names.xen_slot))
+                        udev_builtin_add_property(dev, test, "ID_NET_NAME_SLOT", str);
                 return 0;
+        }
+
+        /* get PCI based path names */
+        r = names_pci(dev, &info, &names);
+        if (r < 0) {
+                /*
+                 * check for usb devices that are not off pci interfaces to
+                 * support various on-chip asics that have usb ports
+                 */
+                if (r == -ENOENT &&
+                    naming_scheme_has(NAMING_USB_HOST) &&
+                    names_usb(dev, &names) >= 0 && names.type == NET_USB) {
+                        char str[ALTIFNAMSIZ];
+
+                        if (snprintf_ok(str, sizeof str, "%s%s", prefix, names.usb_ports))
+                                udev_builtin_add_property(dev, test, "ID_NET_NAME_PATH", str);
+                }
+
+                return 0;
+        }
 
         /* plain PCI device */
         if (names.type == NET_PCI) {
@@ -1027,8 +1276,15 @@
         return 0;
 }
 
+static int builtin_net_id_init(void) {
+        /* Load naming scheme here to suppress log messages in workers. */
+        naming_scheme();
+        return 0;
+}
+
 const UdevBuiltin udev_builtin_net_id = {
         .name = "net_id",
         .cmd = builtin_net_id,
+        .init = builtin_net_id_init,
         .help = "Network device properties",
 };
diff --git a/src/udev/udev-builtin-net_setup_link.c b/src/udev/udev-builtin-net_setup_link.c
index 5964e30..1845053 100644
--- a/src/udev/udev-builtin-net_setup_link.c
+++ b/src/udev/udev-builtin-net_setup_link.c
@@ -2,34 +2,37 @@
 
 #include "alloc-util.h"
 #include "device-util.h"
+#include "escape.h"
 #include "errno-util.h"
 #include "link-config.h"
 #include "log.h"
 #include "string-util.h"
+#include "strv.h"
 #include "udev-builtin.h"
 
 static LinkConfigContext *ctx = NULL;
 
-static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool test) {
-        _cleanup_free_ char *driver = NULL;
-        const char *name = NULL;
-        LinkConfig *link;
+static int builtin_net_setup_link(sd_device *dev, sd_netlink **rtnl, int argc, char **argv, bool test) {
+        _cleanup_(link_freep) Link *link = NULL;
+        _cleanup_free_ char *joined = NULL;
         int r;
 
         if (argc > 1)
                 return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "This program takes no arguments.");
 
-        r = link_get_driver(ctx, dev, &driver);
+        r = link_new(ctx, rtnl, dev, &link);
+        if (r == -ENODEV) {
+                log_device_debug_errno(dev, r, "Link vanished while getting information, ignoring.");
+                return 0;
+        }
         if (r < 0)
-                log_device_full_errno(dev, ERRNO_IS_NOT_SUPPORTED(r) || r == -ENODEV ? LOG_DEBUG : LOG_WARNING,
-                                      r, "Failed to query device driver: %m");
-        else
-                udev_builtin_add_property(dev, test, "ID_NET_DRIVER", driver);
+                return log_device_warning_errno(dev, r, "Failed to get link information: %m");
 
-        r = link_config_get(ctx, dev, &link);
+        if (link->driver)
+                udev_builtin_add_property(dev, test, "ID_NET_DRIVER", link->driver);
+
+        r = link_get_config(ctx, link);
         if (r < 0) {
-                if (r == -ENODEV)
-                        return log_device_debug_errno(dev, r, "Link vanished while searching for configuration for it.");
                 if (r == -ENOENT) {
                         log_device_debug_errno(dev, r, "No matching link configuration found, ignoring device.");
                         return 0;
@@ -38,16 +41,28 @@
                 return log_device_error_errno(dev, r, "Failed to get link config: %m");
         }
 
-        r = link_config_apply(ctx, link, dev, &name);
+        r = link_apply_config(ctx, rtnl, link);
         if (r == -ENODEV)
                 log_device_debug_errno(dev, r, "Link vanished while applying configuration, ignoring.");
         else if (r < 0)
                 log_device_warning_errno(dev, r, "Could not apply link configuration, ignoring: %m");
 
-        udev_builtin_add_property(dev, test, "ID_NET_LINK_FILE", link->filename);
+        udev_builtin_add_property(dev, test, "ID_NET_LINK_FILE", link->config->filename);
+        if (link->new_name)
+                udev_builtin_add_property(dev, test, "ID_NET_NAME", link->new_name);
 
-        if (name)
-                udev_builtin_add_property(dev, test, "ID_NET_NAME", name);
+        STRV_FOREACH(d, link->config->dropins) {
+                _cleanup_free_ char *escaped = NULL;
+
+                escaped = xescape(*d, ":");
+                if (!escaped)
+                        return log_oom();
+
+                if (!strextend_with_separator(&joined, ":", escaped))
+                        return log_oom();
+        }
+
+        udev_builtin_add_property(dev, test, "ID_NET_LINK_FILE_DROPINS", joined);
 
         return 0;
 }
@@ -75,12 +90,16 @@
         log_debug("Unloaded link configuration context.");
 }
 
-static bool builtin_net_setup_link_validate(void) {
-        log_debug("Check if link configuration needs reloading.");
+static bool builtin_net_setup_link_should_reload(void) {
         if (!ctx)
                 return false;
 
-        return link_config_should_reload(ctx);
+        if (link_config_should_reload(ctx)) {
+                log_debug("Link configuration context needs reloading.");
+                return true;
+        }
+
+        return false;
 }
 
 const UdevBuiltin udev_builtin_net_setup_link = {
@@ -88,7 +107,7 @@
         .cmd = builtin_net_setup_link,
         .init = builtin_net_setup_link_init,
         .exit = builtin_net_setup_link_exit,
-        .validate = builtin_net_setup_link_validate,
+        .should_reload = builtin_net_setup_link_should_reload,
         .help = "Configure network link",
         .run_once = false,
 };
diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
index 65c40de..8e4d57e 100644
--- a/src/udev/udev-builtin-path_id.c
+++ b/src/udev/udev-builtin-path_id.c
@@ -85,6 +85,13 @@
         assert(dev);
         assert(subsys);
 
+        /* Unlike the function name, this drops multiple parent devices EXCEPT FOR THE LAST ONE.
+         * The last one will be dropped at the end of the loop in builtin_path_id().
+         * E.g.
+         * Input:  /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0
+         * Output: /sys/devices/pci0000:00/0000:00:14.0/usb1
+         */
+
         for (parent = dev; ; ) {
                 const char *subsystem;
 
@@ -302,7 +309,6 @@
         int host, bus, target, lun;
         const char *name, *base, *pos;
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *dent;
         int basenum = -1;
 
         assert(parent);
@@ -340,21 +346,21 @@
         if (!pos)
                 return NULL;
 
-        base = strndupa(base, pos - base);
+        base = strndupa_safe(base, pos - base);
         dir = opendir(base);
         if (!dir)
                 return NULL;
 
-        FOREACH_DIRENT_ALL(dent, dir, break) {
+        FOREACH_DIRENT_ALL(de, dir, break) {
                 unsigned i;
 
-                if (dent->d_name[0] == '.')
+                if (de->d_name[0] == '.')
                         continue;
-                if (!IN_SET(dent->d_type, DT_DIR, DT_LNK))
+                if (!IN_SET(de->d_type, DT_DIR, DT_LNK))
                         continue;
-                if (!startswith(dent->d_name, "host"))
+                if (!startswith(de->d_name, "host"))
                         continue;
-                if (safe_atou_full(&dent->d_name[4], 10, &i) < 0)
+                if (safe_atou_full(&de->d_name[4], 10, &i) < 0)
                         continue;
                 /*
                  * find the smallest number; the host really needs to export its
@@ -368,7 +374,7 @@
                 return hostdev;
         host -= basenum;
 
-        path_prepend(path, "scsi-%u:%u:%u:%u", host, bus, target, lun);
+        path_prepend(path, "scsi-%i:%i:%i:%i", host, bus, target, lun);
         return hostdev;
 }
 
@@ -378,7 +384,6 @@
         const char *guid_str;
         _cleanup_free_ char *lun = NULL;
         char guid[39];
-        size_t i, k;
 
         assert(parent);
         assert(path);
@@ -396,7 +401,8 @@
         if (strlen(guid_str) < guid_str_len || guid_str[0] != '{' || guid_str[guid_str_len-1] != '}')
                 return NULL;
 
-        for (i = 1, k = 0; i < guid_str_len-1; i++) {
+        size_t k = 0;
+        for (size_t i = 1; i < guid_str_len-1; i++) {
                 if (guid_str[i] == '-')
                         continue;
                 guid[k++] = guid_str[i];
@@ -496,6 +502,10 @@
                 return parent;
         port++;
 
+        /* USB host number may change across reboots (and probably even without reboot). The part after
+         * USB host number is determined by device topology and so does not change. Hence, drop the
+         * host number and always use '0' instead. */
+
         path_prepend(path, "usb-0:%s", port);
         return skip_subsystem(parent, "usb");
 }
@@ -533,19 +543,55 @@
         return skip_subsystem(parent, "ap");
 }
 
-static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
-        sd_device *parent;
-        _cleanup_free_ char *path = NULL;
-        _cleanup_free_ char *compat_path = NULL;
-        bool supported_transport = false;
-        bool supported_parent = false;
+static int find_real_nvme_parent(sd_device *dev, sd_device **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *nvme = NULL;
+        const char *sysname, *end;
+        int r;
+
+        /* If the device belongs to "nvme-subsystem" (not to be confused with "nvme"), which happens when
+         * NVMe multipathing is enabled in the kernel (/sys/module/nvme_core/parameters/multipath is Y),
+         * then the syspath is something like the following:
+         *   /sys/devices/virtual/nvme-subsystem/nvme-subsys0/nvme0n1
+         * Hence, we need to find the 'real parent' in "nvme" subsystem, e.g,
+         *   /sys/devices/pci0000:00/0000:00:1c.4/0000:3c:00.0/nvme/nvme0 */
+
+        assert(dev);
+        assert(ret);
+
+        r = sd_device_get_sysname(dev, &sysname);
+        if (r < 0)
+                return r;
+
+        /* The sysname format of nvme block device is nvme%d[c%d]n%d[p%d], e.g. nvme0n1p2 or nvme0c1n2.
+         * (Note, nvme device with 'c' can be ignored, as they are hidden. )
+         * The sysname format of nvme subsystem device is nvme%d.
+         * See nvme_alloc_ns() and nvme_init_ctrl() in drivers/nvme/host/core.c for more details. */
+        end = startswith(sysname, "nvme");
+        if (!end)
+                return -ENXIO;
+
+        end += strspn(end, DIGITS);
+        sysname = strndupa(sysname, end - sysname);
+
+        r = sd_device_new_from_subsystem_sysname(&nvme, "nvme", sysname);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(nvme);
+        return 0;
+}
+
+static int builtin_path_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
+        _cleanup_(sd_device_unrefp) sd_device *dev_other_branch = NULL;
+        _cleanup_free_ char *path = NULL, *compat_path = NULL;
+        bool supported_transport = false, supported_parent = false;
         const char *subsystem;
+        int r;
 
         assert(dev);
 
         /* walk up the chain of devices and compose path */
-        parent = dev;
-        while (parent) {
+        for (sd_device *parent = dev; parent; ) {
                 const char *subsys, *sysname;
 
                 if (sd_device_get_subsystem(parent, &subsys) < 0 ||
@@ -585,6 +631,13 @@
                         parent = skip_subsystem(parent, "platform");
                         supported_transport = true;
                         supported_parent = true;
+                } else if (streq(subsys, "amba")) {
+                        path_prepend(&path, "amba-%s", sysname);
+                        if (compat_path)
+                                path_prepend(&compat_path, "amba-%s", sysname);
+                        parent = skip_subsystem(parent, "amba");
+                        supported_transport = true;
+                        supported_parent = true;
                 } else if (streq(subsys, "acpi")) {
                         path_prepend(&path, "acpi-%s", sysname);
                         if (compat_path)
@@ -632,13 +685,22 @@
                         parent = skip_subsystem(parent, "iucv");
                         supported_transport = true;
                         supported_parent = true;
-                } else if (streq(subsys, "nvme")) {
+                } else if (STR_IN_SET(subsys, "nvme", "nvme-subsystem")) {
                         const char *nsid;
 
                         if (sd_device_get_sysattr_value(dev, "nsid", &nsid) >= 0) {
                                 path_prepend(&path, "nvme-%s", nsid);
                                 if (compat_path)
                                         path_prepend(&compat_path, "nvme-%s", nsid);
+
+                                if (streq(subsys, "nvme-subsystem")) {
+                                        r = find_real_nvme_parent(dev, &dev_other_branch);
+                                        if (r < 0)
+                                                return r;
+
+                                        parent = dev_other_branch;
+                                }
+
                                 parent = skip_subsystem(parent, "nvme");
                                 supported_parent = true;
                                 supported_transport = true;
@@ -681,14 +743,12 @@
 
         {
                 char tag[UDEV_NAME_SIZE];
-                size_t i;
-                const char *p;
+                size_t i = 0;
 
                 /* compose valid udev tag name */
-                for (p = path, i = 0; *p; p++) {
-                        if ((*p >= '0' && *p <= '9') ||
-                            (*p >= 'A' && *p <= 'Z') ||
-                            (*p >= 'a' && *p <= 'z') ||
+                for (const char *p = path; *p; p++) {
+                        if (ascii_isdigit(*p) ||
+                            ascii_isalpha(*p) ||
                             *p == '-') {
                                 tag[i++] = *p;
                                 continue;
diff --git a/src/udev/udev-builtin-uaccess.c b/src/udev/udev-builtin-uaccess.c
index 3fdbb88..6e73d99 100644
--- a/src/udev/udev-builtin-uaccess.c
+++ b/src/udev/udev-builtin-uaccess.c
@@ -16,7 +16,7 @@
 #include "log.h"
 #include "udev-builtin.h"
 
-static int builtin_uaccess(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_uaccess(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         const char *path = NULL, *seat;
         bool changed_acl = false;
         uid_t uid;
diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c
index bdaecb8..91deb64 100644
--- a/src/udev/udev-builtin-usb_id.c
+++ b/src/udev/udev-builtin-usb_id.c
@@ -134,7 +134,7 @@
 #define USB_DT_INTERFACE                0x04
 
 static int dev_if_packed_info(sd_device *dev, char *ifs_str, size_t len) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         ssize_t size;
         unsigned char buf[18 + 65535];
         size_t pos = 0;
@@ -158,7 +158,7 @@
                 return r;
 
         filename = strjoina(syspath, "/descriptors");
-        fd = open(filename, O_RDONLY|O_CLOEXEC);
+        fd = open(filename, O_RDONLY|O_CLOEXEC|O_NOCTTY);
         if (fd < 0)
                 return log_device_debug_errno(dev, errno, "Failed to open \"%s\": %m", filename);
 
@@ -224,7 +224,7 @@
  * 6.) If the device supplies a serial number, this number
  *     is concatenated with the identification with an underscore '_'.
  */
-static int builtin_usb_id(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_usb_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         char vendor_str[64] = "";
         char vendor_str_enc[256];
         const char *vendor_id;
@@ -292,7 +292,7 @@
         } else
                 set_usb_iftype(type_str, if_class_num, sizeof(type_str)-1);
 
-        log_device_debug(dev_interface, "if_class:%d protocol:%d", if_class_num, protocol);
+        log_device_debug(dev_interface, "if_class:%u protocol:%i", if_class_num, protocol);
 
         /* usb device directory */
         r = sd_device_get_parent_with_subsystem_devtype(dev_interface, "usb", "usb_device", &dev_usb);
@@ -405,10 +405,8 @@
                 const char *usb_serial;
 
                 if (sd_device_get_sysattr_value(dev_usb, "serial", &usb_serial) >= 0) {
-                        const unsigned char *p;
-
                         /* http://msdn.microsoft.com/en-us/library/windows/hardware/gg487321.aspx */
-                        for (p = (unsigned char *) usb_serial; *p != '\0'; p++)
+                        for (const unsigned char *p = (unsigned char*) usb_serial; *p != '\0'; p++)
                                 if (*p < 0x20 || *p > 0x7f || *p == ',') {
                                         usb_serial = NULL;
                                         break;
@@ -429,21 +427,52 @@
         if (!isempty(instance_str))
                 strpcpyl(&s, l, "-", instance_str, NULL);
 
-        udev_builtin_add_property(dev, test, "ID_VENDOR", vendor_str);
-        udev_builtin_add_property(dev, test, "ID_VENDOR_ENC", vendor_str_enc);
-        udev_builtin_add_property(dev, test, "ID_VENDOR_ID", vendor_id);
-        udev_builtin_add_property(dev, test, "ID_MODEL", model_str);
-        udev_builtin_add_property(dev, test, "ID_MODEL_ENC", model_str_enc);
-        udev_builtin_add_property(dev, test, "ID_MODEL_ID", product_id);
-        udev_builtin_add_property(dev, test, "ID_REVISION", revision_str);
-        udev_builtin_add_property(dev, test, "ID_SERIAL", serial);
+        if (sd_device_get_property_value(dev, "ID_BUS", NULL) >= 0)
+                log_device_debug(dev, "ID_BUS property is already set, setting only properties prefixed with \"ID_USB_\".");
+        else {
+                udev_builtin_add_property(dev, test, "ID_BUS", "usb");
+
+                udev_builtin_add_property(dev, test, "ID_MODEL", model_str);
+                udev_builtin_add_property(dev, test, "ID_MODEL_ENC", model_str_enc);
+                udev_builtin_add_property(dev, test, "ID_MODEL_ID", product_id);
+
+                udev_builtin_add_property(dev, test, "ID_SERIAL", serial);
+                if (!isempty(serial_str))
+                        udev_builtin_add_property(dev, test, "ID_SERIAL_SHORT", serial_str);
+
+                udev_builtin_add_property(dev, test, "ID_VENDOR", vendor_str);
+                udev_builtin_add_property(dev, test, "ID_VENDOR_ENC", vendor_str_enc);
+                udev_builtin_add_property(dev, test, "ID_VENDOR_ID", vendor_id);
+
+                udev_builtin_add_property(dev, test, "ID_REVISION", revision_str);
+
+                if (!isempty(type_str))
+                        udev_builtin_add_property(dev, test, "ID_TYPE", type_str);
+
+                if (!isempty(instance_str))
+                        udev_builtin_add_property(dev, test, "ID_INSTANCE", instance_str);
+        }
+
+        /* Also export the same values in the above by prefixing ID_USB_. */
+        udev_builtin_add_property(dev, test, "ID_USB_MODEL", model_str);
+        udev_builtin_add_property(dev, test, "ID_USB_MODEL_ENC", model_str_enc);
+        udev_builtin_add_property(dev, test, "ID_USB_MODEL_ID", product_id);
+        udev_builtin_add_property(dev, test, "ID_USB_SERIAL", serial);
         if (!isempty(serial_str))
-                udev_builtin_add_property(dev, test, "ID_SERIAL_SHORT", serial_str);
+                udev_builtin_add_property(dev, test, "ID_USB_SERIAL_SHORT", serial_str);
+
+        udev_builtin_add_property(dev, test, "ID_USB_VENDOR", vendor_str);
+        udev_builtin_add_property(dev, test, "ID_USB_VENDOR_ENC", vendor_str_enc);
+        udev_builtin_add_property(dev, test, "ID_USB_VENDOR_ID", vendor_id);
+
+        udev_builtin_add_property(dev, test, "ID_USB_REVISION", revision_str);
+
         if (!isempty(type_str))
-                udev_builtin_add_property(dev, test, "ID_TYPE", type_str);
+                udev_builtin_add_property(dev, test, "ID_USB_TYPE", type_str);
+
         if (!isempty(instance_str))
-                udev_builtin_add_property(dev, test, "ID_INSTANCE", instance_str);
-        udev_builtin_add_property(dev, test, "ID_BUS", "usb");
+                udev_builtin_add_property(dev, test, "ID_USB_INSTANCE", instance_str);
+
         if (!isempty(packed_if_str))
                 udev_builtin_add_property(dev, test, "ID_USB_INTERFACES", packed_if_str);
         if (ifnum)
diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c
index 80d1766..c98c6fa 100644
--- a/src/udev/udev-builtin.c
+++ b/src/udev/udev-builtin.c
@@ -32,12 +32,10 @@
 };
 
 void udev_builtin_init(void) {
-        unsigned i;
-
         if (initialized)
                 return;
 
-        for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
+        for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++)
                 if (builtins[i] && builtins[i]->init)
                         builtins[i]->init();
 
@@ -45,31 +43,25 @@
 }
 
 void udev_builtin_exit(void) {
-        unsigned i;
-
         if (!initialized)
                 return;
 
-        for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
+        for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++)
                 if (builtins[i] && builtins[i]->exit)
                         builtins[i]->exit();
 
         initialized = false;
 }
 
-bool udev_builtin_validate(void) {
-        unsigned i;
-
-        for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
-                if (builtins[i] && builtins[i]->validate && builtins[i]->validate())
+bool udev_builtin_should_reload(void) {
+        for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++)
+                if (builtins[i] && builtins[i]->should_reload && builtins[i]->should_reload())
                         return true;
         return false;
 }
 
 void udev_builtin_list(void) {
-        unsigned i;
-
-        for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
+        for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++)
                 if (builtins[i])
                         fprintf(stderr, "  %-14s  %s\n", builtins[i]->name, builtins[i]->help);
 }
@@ -93,21 +85,20 @@
 }
 
 UdevBuiltinCommand udev_builtin_lookup(const char *command) {
-        UdevBuiltinCommand i;
         size_t n;
 
         assert(command);
 
         command += strspn(command, WHITESPACE);
         n = strcspn(command, WHITESPACE);
-        for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
+        for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++)
                 if (builtins[i] && strneq(builtins[i]->name, command, n))
                         return i;
 
         return _UDEV_BUILTIN_INVALID;
 }
 
-int udev_builtin_run(sd_device *dev, UdevBuiltinCommand cmd, const char *command, bool test) {
+int udev_builtin_run(sd_device *dev, sd_netlink **rtnl, UdevBuiltinCommand cmd, const char *command, bool test) {
         _cleanup_strv_free_ char **argv = NULL;
         int r;
 
@@ -124,7 +115,7 @@
 
         /* we need '0' here to reset the internal state */
         optind = 0;
-        return builtins[cmd]->cmd(dev, strv_length(argv), argv, test);
+        return builtins[cmd]->cmd(dev, rtnl, strv_length(argv), argv, test);
 }
 
 int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val) {
diff --git a/src/udev/udev-builtin.h b/src/udev/udev-builtin.h
index 849e5d9..bcfec03 100644
--- a/src/udev/udev-builtin.h
+++ b/src/udev/udev-builtin.h
@@ -4,8 +4,9 @@
 #include <stdbool.h>
 
 #include "sd-device.h"
+#include "sd-netlink.h"
 
-typedef enum {
+typedef enum UdevBuiltinCommand {
 #if HAVE_BLKID
         UDEV_BUILTIN_BLKID,
 #endif
@@ -29,11 +30,11 @@
 
 typedef struct UdevBuiltin {
         const char *name;
-        int (*cmd)(sd_device *dev, int argc, char *argv[], bool test);
+        int (*cmd)(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test);
         const char *help;
         int (*init)(void);
         void (*exit)(void);
-        bool (*validate)(void);
+        bool (*should_reload)(void);
         bool run_once;
 } UdevBuiltin;
 
@@ -73,9 +74,9 @@
 UdevBuiltinCommand udev_builtin_lookup(const char *command);
 const char *udev_builtin_name(UdevBuiltinCommand cmd);
 bool udev_builtin_run_once(UdevBuiltinCommand cmd);
-int udev_builtin_run(sd_device *dev, UdevBuiltinCommand cmd, const char *command, bool test);
+int udev_builtin_run(sd_device *dev, sd_netlink **rtnl, UdevBuiltinCommand cmd, const char *command, bool test);
 void udev_builtin_list(void);
-bool udev_builtin_validate(void);
+bool udev_builtin_should_reload(void);
 int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val);
 int udev_builtin_hwdb_lookup(sd_device *dev, const char *prefix, const char *modalias,
                              const char *filter, bool test);
diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c
index 3d56354..24180f9 100644
--- a/src/udev/udev-ctrl.c
+++ b/src/udev/udev-ctrl.c
@@ -18,26 +18,24 @@
 #include "socket-util.h"
 #include "strxcpyx.h"
 #include "udev-ctrl.h"
-#include "util.h"
 
 /* wire protocol magic must match */
 #define UDEV_CTRL_MAGIC                                0xdead1dea
 
-struct udev_ctrl_msg_wire {
+typedef struct UdevCtrlMessageWire {
         char version[16];
         unsigned magic;
-        enum udev_ctrl_msg_type type;
-        union udev_ctrl_msg_value value;
-};
+        UdevCtrlMessageType type;
+        UdevCtrlMessageValue value;
+} UdevCtrlMessageWire;
 
-struct udev_ctrl {
+struct UdevCtrl {
         unsigned n_ref;
         int sock;
         int sock_connect;
         union sockaddr_union saddr;
         socklen_t addrlen;
         bool bound;
-        bool cleanup_socket;
         bool connected;
         bool maybe_disconnected;
         sd_event *event;
@@ -47,26 +45,26 @@
         void *userdata;
 };
 
-int udev_ctrl_new_from_fd(struct udev_ctrl **ret, int fd) {
-        _cleanup_close_ int sock = -1;
-        struct udev_ctrl *uctrl;
+int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) {
+        _cleanup_close_ int sock = -EBADF;
+        UdevCtrl *uctrl;
 
         assert(ret);
 
         if (fd < 0) {
-                sock = socket(AF_LOCAL, SOCK_SEQPACKET|SOCK_NONBLOCK|SOCK_CLOEXEC, 0);
+                sock = socket(AF_UNIX, SOCK_SEQPACKET|SOCK_NONBLOCK|SOCK_CLOEXEC, 0);
                 if (sock < 0)
                         return log_error_errno(errno, "Failed to create socket: %m");
         }
 
-        uctrl = new(struct udev_ctrl, 1);
+        uctrl = new(UdevCtrl, 1);
         if (!uctrl)
                 return -ENOMEM;
 
-        *uctrl = (struct udev_ctrl) {
+        *uctrl = (UdevCtrl) {
                 .n_ref = 1,
                 .sock = fd >= 0 ? fd : TAKE_FD(sock),
-                .sock_connect = -1,
+                .sock_connect = -EBADF,
                 .bound = fd >= 0,
         };
 
@@ -81,33 +79,24 @@
         return 0;
 }
 
-int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl) {
-        int r;
-
+int udev_ctrl_enable_receiving(UdevCtrl *uctrl) {
         assert(uctrl);
 
         if (uctrl->bound)
                 return 0;
 
-        r = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
-        if (r < 0 && errno == EADDRINUSE) {
-                (void) sockaddr_un_unlink(&uctrl->saddr.un);
-                r = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
-        }
-
-        if (r < 0)
+        (void) sockaddr_un_unlink(&uctrl->saddr.un);
+        if (bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen) < 0)
                 return log_error_errno(errno, "Failed to bind udev control socket: %m");
 
         if (listen(uctrl->sock, 0) < 0)
                 return log_error_errno(errno, "Failed to listen udev control socket: %m");
 
         uctrl->bound = true;
-        uctrl->cleanup_socket = true;
-
         return 0;
 }
 
-static void udev_ctrl_disconnect(struct udev_ctrl *uctrl) {
+static void udev_ctrl_disconnect(UdevCtrl *uctrl) {
         if (!uctrl)
                 return;
 
@@ -115,7 +104,7 @@
         uctrl->sock_connect = safe_close(uctrl->sock_connect);
 }
 
-static struct udev_ctrl *udev_ctrl_free(struct udev_ctrl *uctrl) {
+static UdevCtrl *udev_ctrl_free(UdevCtrl *uctrl) {
         assert(uctrl);
 
         udev_ctrl_disconnect(uctrl);
@@ -127,17 +116,9 @@
         return mfree(uctrl);
 }
 
-DEFINE_TRIVIAL_REF_UNREF_FUNC(struct udev_ctrl, udev_ctrl, udev_ctrl_free);
+DEFINE_TRIVIAL_REF_UNREF_FUNC(UdevCtrl, udev_ctrl, udev_ctrl_free);
 
-int udev_ctrl_cleanup(struct udev_ctrl *uctrl) {
-        if (!uctrl)
-                return 0;
-        if (uctrl->cleanup_socket)
-                sockaddr_un_unlink(&uctrl->saddr.un);
-        return 0;
-}
-
-int udev_ctrl_attach_event(struct udev_ctrl *uctrl, sd_event *event) {
+int udev_ctrl_attach_event(UdevCtrl *uctrl, sd_event *event) {
         int r;
 
         assert_return(uctrl, -EINVAL);
@@ -154,25 +135,25 @@
         return 0;
 }
 
-sd_event_source *udev_ctrl_get_event_source(struct udev_ctrl *uctrl) {
+sd_event_source *udev_ctrl_get_event_source(UdevCtrl *uctrl) {
         assert(uctrl);
 
         return uctrl->event_source;
 }
 
-static void udev_ctrl_disconnect_and_listen_again(struct udev_ctrl *uctrl) {
+static void udev_ctrl_disconnect_and_listen_again(UdevCtrl *uctrl) {
         udev_ctrl_disconnect(uctrl);
         udev_ctrl_unref(uctrl);
         (void) sd_event_source_set_enabled(uctrl->event_source, SD_EVENT_ON);
         /* We don't return NULL here because uctrl is not freed */
 }
 
-DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct udev_ctrl*, udev_ctrl_disconnect_and_listen_again, NULL);
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(UdevCtrl*, udev_ctrl_disconnect_and_listen_again, NULL);
 
 static int udev_ctrl_connection_event_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        _cleanup_(udev_ctrl_disconnect_and_listen_againp) struct udev_ctrl *uctrl = NULL;
-        struct udev_ctrl_msg_wire msg_wire;
-        struct iovec iov = IOVEC_MAKE(&msg_wire, sizeof(struct udev_ctrl_msg_wire));
+        _cleanup_(udev_ctrl_disconnect_and_listen_againp) UdevCtrl *uctrl = NULL;
+        UdevCtrlMessageWire msg_wire;
+        struct iovec iov = IOVEC_MAKE(&msg_wire, sizeof(UdevCtrlMessageWire));
         CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred))) control;
         struct msghdr smsg = {
                 .msg_iov = &iov,
@@ -235,13 +216,11 @@
 }
 
 static int udev_ctrl_event_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        struct udev_ctrl *uctrl = userdata;
-        _cleanup_close_ int sock = -1;
+        UdevCtrl *uctrl = ASSERT_PTR(userdata);
+        _cleanup_close_ int sock = -EBADF;
         struct ucred ucred;
         int r;
 
-        assert(uctrl);
-
         sock = accept4(fd, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK);
         if (sock < 0) {
                 if (ERRNO_IS_ACCEPT_AGAIN(errno))
@@ -282,7 +261,7 @@
         return 0;
 }
 
-int udev_ctrl_start(struct udev_ctrl *uctrl, udev_ctrl_handler_t callback, void *userdata) {
+int udev_ctrl_start(UdevCtrl *uctrl, udev_ctrl_handler_t callback, void *userdata) {
         int r;
 
         assert(uctrl);
@@ -309,8 +288,8 @@
         return 0;
 }
 
-int udev_ctrl_send(struct udev_ctrl *uctrl, enum udev_ctrl_msg_type type, int intval, const char *buf) {
-        struct udev_ctrl_msg_wire ctrl_msg_wire = {
+int udev_ctrl_send(UdevCtrl *uctrl, UdevCtrlMessageType type, const void *data) {
+        UdevCtrlMessageWire ctrl_msg_wire = {
                 .version = "udev-" STRINGIFY(PROJECT_VERSION),
                 .magic = UDEV_CTRL_MAGIC,
                 .type = type,
@@ -319,10 +298,11 @@
         if (uctrl->maybe_disconnected)
                 return -ENOANO; /* to distinguish this from other errors. */
 
-        if (buf)
-                strscpy(ctrl_msg_wire.value.buf, sizeof(ctrl_msg_wire.value.buf), buf);
-        else
-                ctrl_msg_wire.value.intval = intval;
+        if (type == UDEV_CTRL_SET_ENV) {
+                assert(data);
+                strscpy(ctrl_msg_wire.value.buf, sizeof(ctrl_msg_wire.value.buf), data);
+        } else if (IN_SET(type, UDEV_CTRL_SET_LOG_LEVEL, UDEV_CTRL_SET_CHILDREN_MAX))
+                ctrl_msg_wire.value.intval = PTR_TO_INT(data);
 
         if (!uctrl->connected) {
                 if (connect(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen) < 0)
@@ -339,8 +319,8 @@
         return 0;
 }
 
-int udev_ctrl_wait(struct udev_ctrl *uctrl, usec_t timeout) {
-        _cleanup_(sd_event_source_unrefp) sd_event_source *source_io = NULL, *source_timeout = NULL;
+int udev_ctrl_wait(UdevCtrl *uctrl, usec_t timeout) {
+        _cleanup_(sd_event_source_disable_unrefp) sd_event_source *source_io = NULL, *source_timeout = NULL;
         int r;
 
         assert(uctrl);
@@ -351,7 +331,7 @@
                 return 0;
 
         if (!uctrl->maybe_disconnected) {
-                r = udev_ctrl_send(uctrl, _UDEV_CTRL_END_MESSAGES, 0, NULL);
+                r = udev_ctrl_send(uctrl, _UDEV_CTRL_END_MESSAGES, NULL);
                 if (r < 0)
                         return r;
         }
@@ -373,7 +353,7 @@
 
         if (timeout != USEC_INFINITY) {
                 r = sd_event_add_time_relative(
-                                uctrl->event, &source_timeout, clock_boottime_or_monotonic(),
+                                uctrl->event, &source_timeout, CLOCK_BOOTTIME,
                                 timeout,
                                 0, NULL, INT_TO_PTR(-ETIMEDOUT));
                 if (r < 0)
diff --git a/src/udev/udev-ctrl.h b/src/udev/udev-ctrl.h
index 680fbf7..11fc0b6 100644
--- a/src/udev/udev-ctrl.h
+++ b/src/udev/udev-ctrl.h
@@ -6,9 +6,9 @@
 #include "macro.h"
 #include "time-util.h"
 
-struct udev_ctrl;
+typedef struct UdevCtrl UdevCtrl;
 
-enum udev_ctrl_msg_type {
+typedef enum UdevCtrlMessageType {
         _UDEV_CTRL_END_MESSAGES,
         UDEV_CTRL_SET_LOG_LEVEL,
         UDEV_CTRL_STOP_EXEC_QUEUE,
@@ -18,62 +18,61 @@
         UDEV_CTRL_SET_CHILDREN_MAX,
         UDEV_CTRL_PING,
         UDEV_CTRL_EXIT,
-};
+} UdevCtrlMessageType;
 
-union udev_ctrl_msg_value {
+typedef union UdevCtrlMessageValue {
         int intval;
         char buf[256];
-};
+} UdevCtrlMessageValue;
 
-typedef int (*udev_ctrl_handler_t)(struct udev_ctrl *udev_ctrl, enum udev_ctrl_msg_type type,
-                                   const union udev_ctrl_msg_value *value, void *userdata);
+typedef int (*udev_ctrl_handler_t)(UdevCtrl *udev_ctrl, UdevCtrlMessageType type,
+                                   const UdevCtrlMessageValue *value, void *userdata);
 
-int udev_ctrl_new_from_fd(struct udev_ctrl **ret, int fd);
-static inline int udev_ctrl_new(struct udev_ctrl **ret) {
+int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd);
+static inline int udev_ctrl_new(UdevCtrl **ret) {
         return udev_ctrl_new_from_fd(ret, -1);
 }
 
-int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl);
-struct udev_ctrl *udev_ctrl_ref(struct udev_ctrl *uctrl);
-struct udev_ctrl *udev_ctrl_unref(struct udev_ctrl *uctrl);
-int udev_ctrl_cleanup(struct udev_ctrl *uctrl);
-int udev_ctrl_attach_event(struct udev_ctrl *uctrl, sd_event *event);
-int udev_ctrl_start(struct udev_ctrl *uctrl, udev_ctrl_handler_t callback, void *userdata);
-sd_event_source *udev_ctrl_get_event_source(struct udev_ctrl *uctrl);
+int udev_ctrl_enable_receiving(UdevCtrl *uctrl);
+UdevCtrl *udev_ctrl_ref(UdevCtrl *uctrl);
+UdevCtrl *udev_ctrl_unref(UdevCtrl *uctrl);
+int udev_ctrl_attach_event(UdevCtrl *uctrl, sd_event *event);
+int udev_ctrl_start(UdevCtrl *uctrl, udev_ctrl_handler_t callback, void *userdata);
+sd_event_source *udev_ctrl_get_event_source(UdevCtrl *uctrl);
 
-int udev_ctrl_wait(struct udev_ctrl *uctrl, usec_t timeout);
+int udev_ctrl_wait(UdevCtrl *uctrl, usec_t timeout);
 
-int udev_ctrl_send(struct udev_ctrl *uctrl, enum udev_ctrl_msg_type type, int intval, const char *buf);
-static inline int udev_ctrl_send_set_log_level(struct udev_ctrl *uctrl, int priority) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_LOG_LEVEL, priority, NULL);
+int udev_ctrl_send(UdevCtrl *uctrl, UdevCtrlMessageType type, const void *data);
+static inline int udev_ctrl_send_set_log_level(UdevCtrl *uctrl, int priority) {
+        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_LOG_LEVEL, INT_TO_PTR(priority));
 }
 
-static inline int udev_ctrl_send_stop_exec_queue(struct udev_ctrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_STOP_EXEC_QUEUE, 0, NULL);
+static inline int udev_ctrl_send_stop_exec_queue(UdevCtrl *uctrl) {
+        return udev_ctrl_send(uctrl, UDEV_CTRL_STOP_EXEC_QUEUE, NULL);
 }
 
-static inline int udev_ctrl_send_start_exec_queue(struct udev_ctrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_START_EXEC_QUEUE, 0, NULL);
+static inline int udev_ctrl_send_start_exec_queue(UdevCtrl *uctrl) {
+        return udev_ctrl_send(uctrl, UDEV_CTRL_START_EXEC_QUEUE, NULL);
 }
 
-static inline int udev_ctrl_send_reload(struct udev_ctrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_RELOAD, 0, NULL);
+static inline int udev_ctrl_send_reload(UdevCtrl *uctrl) {
+        return udev_ctrl_send(uctrl, UDEV_CTRL_RELOAD, NULL);
 }
 
-static inline int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_ENV, 0, key);
+static inline int udev_ctrl_send_set_env(UdevCtrl *uctrl, const char *key) {
+        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_ENV, key);
 }
 
-static inline int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_CHILDREN_MAX, count, NULL);
+static inline int udev_ctrl_send_set_children_max(UdevCtrl *uctrl, int count) {
+        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_CHILDREN_MAX, INT_TO_PTR(count));
 }
 
-static inline int udev_ctrl_send_ping(struct udev_ctrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_PING, 0, NULL);
+static inline int udev_ctrl_send_ping(UdevCtrl *uctrl) {
+        return udev_ctrl_send(uctrl, UDEV_CTRL_PING, NULL);
 }
 
-static inline int udev_ctrl_send_exit(struct udev_ctrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_EXIT, 0, NULL);
+static inline int udev_ctrl_send_exit(UdevCtrl *uctrl) {
+        return udev_ctrl_send(uctrl, UDEV_CTRL_EXIT, NULL);
 }
 
-DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_ctrl*, udev_ctrl_unref);
+DEFINE_TRIVIAL_CLEANUP_FUNC(UdevCtrl*, udev_ctrl_unref);
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
index 56fe0a4..ec4ad30 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
@@ -12,6 +12,7 @@
 #include "sd-event.h"
 
 #include "alloc-util.h"
+#include "device-internal.h"
 #include "device-private.h"
 #include "device-util.h"
 #include "fd-util.h"
@@ -22,7 +23,6 @@
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
-#include "rlimit-util.h"
 #include "signal-util.h"
 #include "stdio-util.h"
 #include "string-util.h"
@@ -49,6 +49,7 @@
         char *result;
         size_t result_size;
         size_t result_len;
+        bool truncated;
 } Spawn;
 
 UdevEvent *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl, int log_level) {
@@ -118,24 +119,24 @@
 };
 
 static const struct subst_map_entry map[] = {
-           { .name = "devnode",  .fmt = 'N', .type = FORMAT_SUBST_DEVNODE },
-           { .name = "tempnode", .fmt = 'N', .type = FORMAT_SUBST_DEVNODE }, /* deprecated */
-           { .name = "attr",     .fmt = 's', .type = FORMAT_SUBST_ATTR },
-           { .name = "sysfs",    .fmt = 's', .type = FORMAT_SUBST_ATTR }, /* deprecated */
-           { .name = "env",      .fmt = 'E', .type = FORMAT_SUBST_ENV },
-           { .name = "kernel",   .fmt = 'k', .type = FORMAT_SUBST_KERNEL },
+           { .name = "devnode",  .fmt = 'N', .type = FORMAT_SUBST_DEVNODE       },
+           { .name = "tempnode", .fmt = 'N', .type = FORMAT_SUBST_DEVNODE       }, /* deprecated */
+           { .name = "attr",     .fmt = 's', .type = FORMAT_SUBST_ATTR          },
+           { .name = "sysfs",    .fmt = 's', .type = FORMAT_SUBST_ATTR          }, /* deprecated */
+           { .name = "env",      .fmt = 'E', .type = FORMAT_SUBST_ENV           },
+           { .name = "kernel",   .fmt = 'k', .type = FORMAT_SUBST_KERNEL        },
            { .name = "number",   .fmt = 'n', .type = FORMAT_SUBST_KERNEL_NUMBER },
-           { .name = "driver",   .fmt = 'd', .type = FORMAT_SUBST_DRIVER },
-           { .name = "devpath",  .fmt = 'p', .type = FORMAT_SUBST_DEVPATH },
-           { .name = "id",       .fmt = 'b', .type = FORMAT_SUBST_ID },
-           { .name = "major",    .fmt = 'M', .type = FORMAT_SUBST_MAJOR },
-           { .name = "minor",    .fmt = 'm', .type = FORMAT_SUBST_MINOR },
-           { .name = "result",   .fmt = 'c', .type = FORMAT_SUBST_RESULT },
-           { .name = "parent",   .fmt = 'P', .type = FORMAT_SUBST_PARENT },
-           { .name = "name",     .fmt = 'D', .type = FORMAT_SUBST_NAME },
-           { .name = "links",    .fmt = 'L', .type = FORMAT_SUBST_LINKS },
-           { .name = "root",     .fmt = 'r', .type = FORMAT_SUBST_ROOT },
-           { .name = "sys",      .fmt = 'S', .type = FORMAT_SUBST_SYS },
+           { .name = "driver",   .fmt = 'd', .type = FORMAT_SUBST_DRIVER        },
+           { .name = "devpath",  .fmt = 'p', .type = FORMAT_SUBST_DEVPATH       },
+           { .name = "id",       .fmt = 'b', .type = FORMAT_SUBST_ID            },
+           { .name = "major",    .fmt = 'M', .type = FORMAT_SUBST_MAJOR         },
+           { .name = "minor",    .fmt = 'm', .type = FORMAT_SUBST_MINOR         },
+           { .name = "result",   .fmt = 'c', .type = FORMAT_SUBST_RESULT        },
+           { .name = "parent",   .fmt = 'P', .type = FORMAT_SUBST_PARENT        },
+           { .name = "name",     .fmt = 'D', .type = FORMAT_SUBST_NAME          },
+           { .name = "links",    .fmt = 'L', .type = FORMAT_SUBST_LINKS         },
+           { .name = "root",     .fmt = 'r', .type = FORMAT_SUBST_ROOT          },
+           { .name = "sys",      .fmt = 'S', .type = FORMAT_SUBST_SYS           },
 };
 
 static const char *format_type_to_string(FormatSubstitutionType t) {
@@ -222,7 +223,7 @@
 
         p = endswith(s, "+");
         if (p)
-                s = strndupa(s, p - s);
+                s = strndupa_safe(s, p - s);
 
         r = safe_atou(s, ret);
         if (r < 0)
@@ -236,9 +237,12 @@
                 FormatSubstitutionType type,
                 const char *attr,
                 char *dest,
-                size_t l) {
-        sd_device *parent, *dev = event->dev;
+                size_t l,
+                bool *ret_truncated) {
+
+        sd_device *parent, *dev = ASSERT_PTR(ASSERT_PTR(event)->dev);
         const char *val = NULL;
+        bool truncated = false;
         char *s = dest;
         int r;
 
@@ -247,13 +251,13 @@
                 r = sd_device_get_devpath(dev, &val);
                 if (r < 0)
                         return r;
-                l = strpcpy(&s, l, val);
+                strpcpy_full(&s, l, val, &truncated);
                 break;
         case FORMAT_SUBST_KERNEL:
                 r = sd_device_get_sysname(dev, &val);
                 if (r < 0)
                         return r;
-                l = strpcpy(&s, l, val);
+                strpcpy_full(&s, l, val, &truncated);
                 break;
         case FORMAT_SUBST_KERNEL_NUMBER:
                 r = sd_device_get_sysnum(dev, &val);
@@ -261,7 +265,7 @@
                         goto null_terminate;
                 if (r < 0)
                         return r;
-                l = strpcpy(&s, l, val);
+                strpcpy_full(&s, l, val, &truncated);
                 break;
         case FORMAT_SUBST_ID:
                 if (!event->dev_parent)
@@ -269,7 +273,7 @@
                 r = sd_device_get_sysname(event->dev_parent, &val);
                 if (r < 0)
                         return r;
-                l = strpcpy(&s, l, val);
+                strpcpy_full(&s, l, val, &truncated);
                 break;
         case FORMAT_SUBST_DRIVER:
                 if (!event->dev_parent)
@@ -279,7 +283,7 @@
                         goto null_terminate;
                 if (r < 0)
                         return r;
-                l = strpcpy(&s, l, val);
+                strpcpy_full(&s, l, val, &truncated);
                 break;
         case FORMAT_SUBST_MAJOR:
         case FORMAT_SUBST_MINOR: {
@@ -288,7 +292,7 @@
                 r = sd_device_get_devnum(dev, &devnum);
                 if (r < 0 && r != -ENOENT)
                         return r;
-                l = strpcpyf(&s, l, "%u", r < 0 ? 0 : type == FORMAT_SUBST_MAJOR ? major(devnum) : minor(devnum));
+                strpcpyf_full(&s, l, &truncated, "%u", r < 0 ? 0 : type == FORMAT_SUBST_MAJOR ? major(devnum) : minor(devnum));
                 break;
         }
         case FORMAT_SUBST_RESULT: {
@@ -307,7 +311,7 @@
                 }
 
                 if (index == 0)
-                        l = strpcpy(&s, l, event->program_result);
+                        strpcpy_full(&s, l, event->program_result, &truncated);
                 else {
                         const char *start, *p;
                         unsigned i;
@@ -329,11 +333,11 @@
                         start = p;
                         /* %c{2+} copies the whole string from the second part on */
                         if (has_plus)
-                                l = strpcpy(&s, l, start);
+                                strpcpy_full(&s, l, start, &truncated);
                         else {
                                 while (*p && !strchr(WHITESPACE, *p))
                                         p++;
-                                l = strnpcpy(&s, l, start, p - start);
+                                strnpcpy_full(&s, l, start, p - start, &truncated);
                         }
                 }
                 break;
@@ -341,6 +345,7 @@
         case FORMAT_SUBST_ATTR: {
                 char vbuf[UDEV_NAME_SIZE];
                 int count;
+                bool t;
 
                 if (isempty(attr))
                         return -EINVAL;
@@ -362,12 +367,13 @@
 
                 /* strip trailing whitespace, and replace unwanted characters */
                 if (val != vbuf)
-                        strscpy(vbuf, sizeof(vbuf), val);
+                        strscpy_full(vbuf, sizeof(vbuf), val, &truncated);
                 delete_trailing_chars(vbuf, NULL);
                 count = udev_replace_chars(vbuf, UDEV_ALLOWED_CHARS_INPUT);
                 if (count > 0)
                         log_device_debug(dev, "%i character(s) replaced", count);
-                l = strpcpy(&s, l, vbuf);
+                strpcpy_full(&s, l, vbuf, &t);
+                truncated = truncated || t;
                 break;
         }
         case FORMAT_SUBST_PARENT:
@@ -381,7 +387,7 @@
                         goto null_terminate;
                 if (r < 0)
                         return r;
-                l = strpcpy(&s, l, val + STRLEN("/dev/"));
+                strpcpy_full(&s, l, val + STRLEN("/dev/"), &truncated);
                 break;
         case FORMAT_SUBST_DEVNODE:
                 r = sd_device_get_devname(dev, &val);
@@ -389,34 +395,37 @@
                         goto null_terminate;
                 if (r < 0)
                         return r;
-                l = strpcpy(&s, l, val);
+                strpcpy_full(&s, l, val, &truncated);
                 break;
         case FORMAT_SUBST_NAME:
                 if (event->name)
-                        l = strpcpy(&s, l, event->name);
+                        strpcpy_full(&s, l, event->name, &truncated);
                 else if (sd_device_get_devname(dev, &val) >= 0)
-                        l = strpcpy(&s, l, val + STRLEN("/dev/"));
+                        strpcpy_full(&s, l, val + STRLEN("/dev/"), &truncated);
                 else {
                         r = sd_device_get_sysname(dev, &val);
                         if (r < 0)
                                 return r;
-                        l = strpcpy(&s, l, val);
+                        strpcpy_full(&s, l, val, &truncated);
                 }
                 break;
         case FORMAT_SUBST_LINKS:
-                FOREACH_DEVICE_DEVLINK(dev, val)
+                FOREACH_DEVICE_DEVLINK(dev, val) {
                         if (s == dest)
-                                l = strpcpy(&s, l, val + STRLEN("/dev/"));
+                                strpcpy_full(&s, l, val + STRLEN("/dev/"), &truncated);
                         else
-                                l = strpcpyl(&s, l, " ", val + STRLEN("/dev/"), NULL);
+                                strpcpyl_full(&s, l, &truncated, " ", val + STRLEN("/dev/"), NULL);
+                        if (truncated)
+                                break;
+                }
                 if (s == dest)
                         goto null_terminate;
                 break;
         case FORMAT_SUBST_ROOT:
-                l = strpcpy(&s, l, "/dev");
+                strpcpy_full(&s, l, "/dev", &truncated);
                 break;
         case FORMAT_SUBST_SYS:
-                l = strpcpy(&s, l, "/sys");
+                strpcpy_full(&s, l, "/sys", &truncated);
                 break;
         case FORMAT_SUBST_ENV:
                 if (isempty(attr))
@@ -426,28 +435,39 @@
                         goto null_terminate;
                 if (r < 0)
                         return r;
-                l = strpcpy(&s, l, val);
+                strpcpy_full(&s, l, val, &truncated);
                 break;
         default:
-                assert_not_reached("Unknown format substitution type");
+                assert_not_reached();
         }
 
+        if (ret_truncated)
+                *ret_truncated = truncated;
+
         return s - dest;
 
 null_terminate:
+        if (ret_truncated)
+                *ret_truncated = truncated;
+
         *s = '\0';
         return 0;
 }
 
-size_t udev_event_apply_format(UdevEvent *event,
-                               const char *src, char *dest, size_t size,
-                               bool replace_whitespace) {
-        const char *s = src;
+size_t udev_event_apply_format(
+                UdevEvent *event,
+                const char *src,
+                char *dest,
+                size_t size,
+                bool replace_whitespace,
+                bool *ret_truncated) {
+
+        bool truncated = false;
+        const char *s = ASSERT_PTR(src);
         int r;
 
         assert(event);
         assert(event->dev);
-        assert(src);
         assert(dest);
         assert(size > 0);
 
@@ -455,20 +475,24 @@
                 FormatSubstitutionType type;
                 char attr[UDEV_PATH_SIZE];
                 ssize_t subst_len;
+                bool t;
 
                 r = get_subst_type(&s, false, &type, attr);
                 if (r < 0) {
                         log_device_warning_errno(event->dev, r, "Invalid format string, ignoring: %s", src);
                         break;
                 } else if (r == 0) {
-                        if (size < 2) /* need space for this char and the terminating NUL */
+                        if (size < 2) {
+                                /* need space for this char and the terminating NUL */
+                                truncated = true;
                                 break;
+                        }
                         *dest++ = *s++;
                         size--;
                         continue;
                 }
 
-                subst_len = udev_event_subst_format(event, type, attr, dest, size);
+                subst_len = udev_event_subst_format(event, type, attr, dest, size, &t);
                 if (subst_len < 0) {
                         log_device_warning_errno(event->dev, subst_len,
                                                  "Failed to substitute variable '$%s' or apply format '%%%c', ignoring: %m",
@@ -476,6 +500,8 @@
                         break;
                 }
 
+                truncated = truncated || t;
+
                 /* FORMAT_SUBST_RESULT handles spaces itself */
                 if (replace_whitespace && type != FORMAT_SUBST_RESULT)
                         /* udev_replace_whitespace can replace in-place,
@@ -487,6 +513,10 @@
         }
 
         assert(size >= 1);
+
+        if (ret_truncated)
+                *ret_truncated = truncated;
+
         *dest = '\0';
         return size;
 }
@@ -536,13 +566,12 @@
 }
 
 static int on_spawn_io(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Spawn *spawn = userdata;
+        Spawn *spawn = ASSERT_PTR(userdata);
         char buf[4096], *p;
         size_t size;
         ssize_t l;
         int r;
 
-        assert(spawn);
         assert(fd == spawn->fd_stdout || fd == spawn->fd_stderr);
         assert(!spawn->result || spawn->result_len < spawn->result_size);
 
@@ -554,7 +583,7 @@
                 size = sizeof(buf);
         }
 
-        l = read(fd, p, size - 1);
+        l = read(fd, p, size - (p == buf));
         if (l < 0) {
                 if (errno == EAGAIN)
                         goto reenable;
@@ -565,6 +594,13 @@
                 return 0;
         }
 
+        if ((size_t) l == size) {
+                log_device_warning(spawn->device, "Truncating stdout of '%s' up to %zu byte.",
+                                   spawn->cmd, spawn->result_size);
+                l--;
+                spawn->truncated = true;
+        }
+
         p[l] = '\0';
         if (fd == spawn->fd_stdout && spawn->result)
                 spawn->result_len += l;
@@ -572,7 +608,6 @@
         /* Log output only if we watch stderr. */
         if (l > 0 && spawn->fd_stderr >= 0) {
                 _cleanup_strv_free_ char **v = NULL;
-                char **q;
 
                 r = strv_split_newlines_full(&v, p, EXTRACT_RETAIN_ESCAPE);
                 if (r < 0)
@@ -585,7 +620,7 @@
                                          fd == spawn->fd_stdout ? "out" : "err", *q);
         }
 
-        if (l == 0)
+        if (l == 0 || spawn->truncated)
                 return 0;
 
 reenable:
@@ -599,10 +634,7 @@
 }
 
 static int on_spawn_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
-        Spawn *spawn = userdata;
-        char timeout[FORMAT_TIMESPAN_MAX];
-
-        assert(spawn);
+        Spawn *spawn = ASSERT_PTR(userdata);
 
         DEVICE_TRACE_POINT(spawn_timeout, spawn->device, spawn->cmd);
 
@@ -610,30 +642,25 @@
 
         log_device_error(spawn->device, "Spawned process '%s' ["PID_FMT"] timed out after %s, killing",
                          spawn->cmd, spawn->pid,
-                         format_timespan(timeout, sizeof(timeout), spawn->timeout_usec, USEC_PER_SEC));
+                         FORMAT_TIMESPAN(spawn->timeout_usec, USEC_PER_SEC));
 
         return 1;
 }
 
 static int on_spawn_timeout_warning(sd_event_source *s, uint64_t usec, void *userdata) {
-        Spawn *spawn = userdata;
-        char timeout[FORMAT_TIMESPAN_MAX];
-
-        assert(spawn);
+        Spawn *spawn = ASSERT_PTR(userdata);
 
         log_device_warning(spawn->device, "Spawned process '%s' ["PID_FMT"] is taking longer than %s to complete",
                            spawn->cmd, spawn->pid,
-                           format_timespan(timeout, sizeof(timeout), spawn->timeout_warn_usec, USEC_PER_SEC));
+                           FORMAT_TIMESPAN(spawn->timeout_warn_usec, USEC_PER_SEC));
 
         return 1;
 }
 
 static int on_spawn_sigchld(sd_event_source *s, const siginfo_t *si, void *userdata) {
-        Spawn *spawn = userdata;
+        Spawn *spawn = ASSERT_PTR(userdata);
         int ret = -EIO;
 
-        assert(spawn);
-
         switch (si->si_code) {
         case CLD_EXITED:
                 if (si->si_status == 0)
@@ -659,9 +686,9 @@
 
 static int spawn_wait(Spawn *spawn) {
         _cleanup_(sd_event_unrefp) sd_event *e = NULL;
-        _cleanup_(sd_event_source_unrefp) sd_event_source *sigchld_source = NULL;
-        _cleanup_(sd_event_source_unrefp) sd_event_source *stdout_source = NULL;
-        _cleanup_(sd_event_source_unrefp) sd_event_source *stderr_source = NULL;
+        _cleanup_(sd_event_source_disable_unrefp) sd_event_source *sigchld_source = NULL;
+        _cleanup_(sd_event_source_disable_unrefp) sd_event_source *stdout_source = NULL;
+        _cleanup_(sd_event_source_disable_unrefp) sd_event_source *stderr_source = NULL;
         int r;
 
         assert(spawn);
@@ -726,13 +753,17 @@
         return sd_event_loop(e);
 }
 
-int udev_event_spawn(UdevEvent *event,
-                     usec_t timeout_usec,
-                     int timeout_signal,
-                     bool accept_failure,
-                     const char *cmd,
-                     char *result, size_t ressize) {
-        _cleanup_close_pair_ int outpipe[2] = {-1, -1}, errpipe[2] = {-1, -1};
+int udev_event_spawn(
+                UdevEvent *event,
+                usec_t timeout_usec,
+                int timeout_signal,
+                bool accept_failure,
+                const char *cmd,
+                char *result,
+                size_t ressize,
+                bool *ret_truncated) {
+
+        _cleanup_close_pair_ int outpipe[2] = PIPE_EBADF, errpipe[2] = PIPE_EBADF;
         _cleanup_strv_free_ char **argv = NULL;
         char **envp = NULL;
         Spawn spawn;
@@ -779,16 +810,15 @@
 
         log_device_debug(event->dev, "Starting '%s'", cmd);
 
-        r = safe_fork("(spawn)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
+        r = safe_fork("(spawn)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG|FORK_RLIMIT_NOFILE_SAFE, &pid);
         if (r < 0)
                 return log_device_error_errno(event->dev, r,
                                               "Failed to fork() to execute command '%s': %m", cmd);
         if (r == 0) {
-                if (rearrange_stdio(-1, outpipe[WRITE_END], errpipe[WRITE_END]) < 0)
+                if (rearrange_stdio(-EBADF, TAKE_FD(outpipe[WRITE_END]), TAKE_FD(errpipe[WRITE_END])) < 0)
                         _exit(EXIT_FAILURE);
 
                 (void) close_all_fds(NULL, 0);
-                (void) rlimit_nofile_safe();
 
                 DEVICE_TRACE_POINT(spawn_exec, event->dev, cmd);
 
@@ -822,24 +852,69 @@
         if (result)
                 result[spawn.result_len] = '\0';
 
+        if (ret_truncated)
+                *ret_truncated = spawn.truncated;
+
         return r; /* 0 for success, and positive if the program failed */
 }
 
+static int device_rename(sd_device *device, const char *name) {
+        _cleanup_free_ char *new_syspath = NULL;
+        const char *s;
+        int r;
+
+        assert(device);
+        assert(name);
+
+        if (!filename_is_valid(name))
+                return -EINVAL;
+
+        r = sd_device_get_syspath(device, &s);
+        if (r < 0)
+                return r;
+
+        r = path_extract_directory(s, &new_syspath);
+        if (r < 0)
+                return r;
+
+        if (!path_extend(&new_syspath, name))
+                return -ENOMEM;
+
+        if (!path_is_safe(new_syspath))
+                return -EINVAL;
+
+        /* At the time this is called, the renamed device may not exist yet. Hence, we cannot validate
+         * the new syspath. */
+        r = device_set_syspath(device, new_syspath, /* verify = */ false);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_property_value(device, "INTERFACE", &s);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return r;
+
+        /* like DEVPATH_OLD, INTERFACE_OLD is not saved to the db, but only stays around for the current event */
+        r = device_add_property_internal(device, "INTERFACE_OLD", s);
+        if (r < 0)
+                return r;
+
+        return device_add_property_internal(device, "INTERFACE", name);
+}
+
 static int rename_netif(UdevEvent *event) {
-        sd_device *dev = event->dev;
-        const char *oldname;
-        unsigned flags;
+        _cleanup_free_ char *old_syspath = NULL, *old_sysname = NULL;
+        const char *s;
+        sd_device *dev;
         int ifindex, r;
 
+        assert(event);
+
         if (!event->name)
                 return 0; /* No new name is requested. */
 
-        r = sd_device_get_sysname(dev, &oldname);
-        if (r < 0)
-                return log_device_error_errno(dev, r, "Failed to get sysname: %m");
-
-        if (streq(event->name, oldname))
-                return 0; /* The interface name is already requested name. */
+        dev = ASSERT_PTR(event->dev);
 
         if (!device_for_action(dev, SD_DEVICE_ADD))
                 return 0; /* Rename the interface only when it is added. */
@@ -848,7 +923,7 @@
         if (r == -ENOENT)
                 return 0; /* Device is not a network interface. */
         if (r < 0)
-                return log_device_error_errno(dev, r, "Failed to get ifindex: %m");
+                return log_device_warning_errno(dev, r, "Failed to get ifindex: %m");
 
         if (naming_scheme_has(NAMING_REPLACE_STRICTLY) &&
             !ifname_valid(event->name)) {
@@ -856,48 +931,86 @@
                 return 0;
         }
 
-        r = rtnl_get_link_info(&event->rtnl, ifindex, NULL, &flags);
+        r = sd_device_get_sysname(dev, &s);
         if (r < 0)
-                return log_device_warning_errno(dev, r, "Failed to get link flags: %m");
+                return log_device_warning_errno(dev, r, "Failed to get sysname: %m");
 
-        if (FLAGS_SET(flags, IFF_UP)) {
-                log_device_info(dev, "Network interface '%s' is already up, refusing to rename to '%s'.",
-                                oldname, event->name);
-                return 0;
-        }
+        if (streq(event->name, s))
+                return 0; /* The interface name is already requested name. */
 
-        /* Set ID_RENAMING boolean property here, and drop it in the corresponding move uevent later. */
-        r = device_add_property(dev, "ID_RENAMING", "1");
+        old_sysname = strdup(s);
+        if (!old_sysname)
+                return -ENOMEM;
+
+        r = sd_device_get_syspath(dev, &s);
         if (r < 0)
-                return log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
+                return log_device_warning_errno(dev, r, "Failed to get syspath: %m");
+
+        old_syspath = strdup(s);
+        if (!old_syspath)
+                return -ENOMEM;
 
         r = device_rename(dev, event->name);
-        if (r < 0)
-                return log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
+        if (r < 0) {
+                log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
+                goto revert;
+        }
+
+        /* Set ID_RENAMING boolean property here. It will be dropped when the corresponding move uevent is processed. */
+        r = device_add_property(dev, "ID_RENAMING", "1");
+        if (r < 0) {
+                log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
+                goto revert;
+        }
 
         /* Also set ID_RENAMING boolean property to cloned sd_device object and save it to database
          * before calling rtnl_set_link_name(). Otherwise, clients (e.g., systemd-networkd) may receive
          * RTM_NEWLINK netlink message before the database is updated. */
         r = device_add_property(event->dev_db_clone, "ID_RENAMING", "1");
-        if (r < 0)
-                return log_device_warning_errno(event->dev_db_clone, r, "Failed to add 'ID_RENAMING' property: %m");
+        if (r < 0) {
+                log_device_warning_errno(event->dev_db_clone, r, "Failed to add 'ID_RENAMING' property: %m");
+                goto revert;
+        }
 
         r = device_update_db(event->dev_db_clone);
-        if (r < 0)
-                return log_device_debug_errno(event->dev_db_clone, r, "Failed to update database under /run/udev/data/: %m");
+        if (r < 0) {
+                log_device_debug_errno(event->dev_db_clone, r, "Failed to update database under /run/udev/data/: %m");
+                goto revert;
+        }
 
         r = rtnl_set_link_name(&event->rtnl, ifindex, event->name);
-        if (r < 0)
-                return log_device_error_errno(dev, r, "Failed to rename network interface %i from '%s' to '%s': %m",
-                                              ifindex, oldname, event->name);
+        if (r < 0) {
+                if (r == -EBUSY) {
+                        log_device_info(dev, "Network interface '%s' is already up, cannot rename to '%s'.",
+                                        old_sysname, event->name);
+                        r = 0;
+                } else
+                        log_device_error_errno(dev, r, "Failed to rename network interface %i from '%s' to '%s': %m",
+                                               ifindex, old_sysname, event->name);
+                goto revert;
+        }
 
-        log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
-
+        log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, old_sysname, event->name);
         return 1;
+
+revert:
+        /* Restore 'dev_db_clone' */
+        (void) device_add_property(event->dev_db_clone, "ID_RENAMING", NULL);
+        (void) device_update_db(event->dev_db_clone);
+
+        /* Restore 'dev' */
+        (void) device_set_syspath(dev, old_syspath, /* verify = */ false);
+        if (sd_device_get_property_value(dev, "INTERFACE_OLD", &s) >= 0) {
+                (void) device_add_property_internal(dev, "INTERFACE", s);
+                (void) device_add_property_internal(dev, "INTERFACE_OLD", NULL);
+        }
+        (void) device_add_property(dev, "ID_RENAMING", NULL);
+
+        return r;
 }
 
 static int update_devnode(UdevEvent *event) {
-        sd_device *dev = event->dev;
+        sd_device *dev = ASSERT_PTR(ASSERT_PTR(event)->dev);
         int r;
 
         r = sd_device_get_devnum(dev, NULL);
@@ -923,9 +1036,6 @@
                 if (r < 0 && r != -ENOENT)
                         return log_device_error_errno(dev, r, "Failed to get devnode mode: %m");
         }
-        if (event->mode == MODE_INVALID && gid_is_valid(event->gid) && event->gid > 0)
-                /* If group is set, but mode is not set, "upgrade" mode for the group. */
-                event->mode = 0660;
 
         bool apply_mac = device_for_action(dev, SD_DEVICE_ADD);
 
@@ -944,7 +1054,7 @@
                 Hashmap *properties_list,
                 UdevRules *rules) {
 
-        sd_device *dev = event->dev;
+        sd_device *dev = ASSERT_PTR(ASSERT_PTR(event)->dev);
         int r;
 
         r = device_read_db_internal(dev, true);
@@ -959,7 +1069,9 @@
         if (r < 0)
                 log_device_debug_errno(dev, r, "Failed to delete database under /run/udev/data/, ignoring: %m");
 
-        (void) udev_watch_end(inotify_fd, dev);
+        r = udev_watch_end(inotify_fd, dev);
+        if (r < 0)
+                log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m");
 
         r = udev_rules_apply_to_event(rules, event, timeout_usec, timeout_signal, properties_list);
 
@@ -969,17 +1081,6 @@
         return r;
 }
 
-static int udev_event_on_move(sd_device *dev) {
-        int r;
-
-        /* Drop previously added property */
-        r = device_add_property(dev, "ID_RENAMING", NULL);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to remove 'ID_RENAMING' property: %m");
-
-        return 0;
-}
-
 static int copy_all_tags(sd_device *d, sd_device *s) {
         const char *tag;
         int r;
@@ -1010,11 +1111,9 @@
         sd_device *dev;
         int r;
 
-        assert(event);
+        dev = ASSERT_PTR(ASSERT_PTR(event)->dev);
         assert(rules);
 
-        dev = event->dev;
-
         r = sd_device_get_action(dev, &action);
         if (r < 0)
                 return log_device_error_errno(dev, r, "Failed to get ACTION: %m");
@@ -1023,7 +1122,9 @@
                 return event_execute_rules_on_remove(event, inotify_fd, timeout_usec, timeout_signal, properties_list, rules);
 
         /* Disable watch during event processing. */
-        (void) udev_watch_end(inotify_fd, event->dev);
+        r = udev_watch_end(inotify_fd, dev);
+        if (r < 0)
+                log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m");
 
         r = device_clone_with_db(dev, &event->dev_db_clone);
         if (r < 0)
@@ -1033,11 +1134,13 @@
         if (r < 0)
                 log_device_warning_errno(dev, r, "Failed to copy all tags from old database entry, ignoring: %m");
 
-        if (action == SD_DEVICE_MOVE) {
-                r = udev_event_on_move(event->dev);
-                if (r < 0)
-                        return r;
-        }
+        /* Drop previously added property for safety to make IMPORT{db}="ID_RENAMING" not work. This is
+         * mostly for 'move' uevent, but let's do unconditionally. Why? If a network interface is renamed in
+         * initrd, then udevd may lose the 'move' uevent during switching root. Usually, we do not set the
+         * persistent flag for network interfaces, but user may set it. Just for safety. */
+        r = device_add_property(event->dev_db_clone, "ID_RENAMING", NULL);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to remove 'ID_RENAMING' property: %m");
 
         DEVICE_TRACE_POINT(rules_start, dev);
 
@@ -1084,21 +1187,19 @@
 
                 if (builtin_cmd != _UDEV_BUILTIN_INVALID) {
                         log_device_debug(event->dev, "Running built-in command \"%s\"", command);
-                        r = udev_builtin_run(event->dev, builtin_cmd, command, false);
+                        r = udev_builtin_run(event->dev, &event->rtnl, builtin_cmd, command, false);
                         if (r < 0)
                                 log_device_debug_errno(event->dev, r, "Failed to run built-in command \"%s\", ignoring: %m", command);
                 } else {
                         if (event->exec_delay_usec > 0) {
-                                char buf[FORMAT_TIMESPAN_MAX];
-
                                 log_device_debug(event->dev, "Delaying execution of \"%s\" for %s.",
-                                                 command, format_timespan(buf, sizeof(buf), event->exec_delay_usec, USEC_PER_SEC));
+                                                 command, FORMAT_TIMESPAN(event->exec_delay_usec, USEC_PER_SEC));
                                 (void) usleep(event->exec_delay_usec);
                         }
 
                         log_device_debug(event->dev, "Running command \"%s\"", command);
 
-                        r = udev_event_spawn(event, timeout_usec, timeout_signal, false, command, NULL, 0);
+                        r = udev_event_spawn(event, timeout_usec, timeout_signal, false, command, NULL, 0, NULL);
                         if (r < 0)
                                 log_device_warning_errno(event->dev, r, "Failed to execute '%s', ignoring: %m", command);
                         else if (r > 0) /* returned value is positive when program fails */
@@ -1106,24 +1207,3 @@
                 }
         }
 }
-
-int udev_event_process_inotify_watch(UdevEvent *event, int inotify_fd) {
-        sd_device *dev;
-
-        assert(event);
-        assert(inotify_fd >= 0);
-
-        dev = event->dev;
-
-        assert(dev);
-
-        if (device_for_action(dev, SD_DEVICE_REMOVE))
-                return 0;
-
-        if (event->inotify_watch)
-                (void) udev_watch_begin(inotify_fd, dev);
-        else
-                (void) udev_watch_end(inotify_fd, dev);
-
-        return 0;
-}
diff --git a/src/udev/udev-event.h b/src/udev/udev-event.h
index 2067909..c54c789 100644
--- a/src/udev/udev-event.h
+++ b/src/udev/udev-event.h
@@ -12,7 +12,6 @@
 #include "macro.h"
 #include "udev-rules.h"
 #include "udev-util.h"
-#include "util.h"
 
 #define READ_END  0
 #define WRITE_END 1
@@ -56,7 +55,8 @@
                 const char *src,
                 char *dest,
                 size_t size,
-                bool replace_whitespace);
+                bool replace_whitespace,
+                bool *ret_truncated);
 int udev_check_format(const char *value, size_t *offset, const char **hint);
 int udev_event_spawn(
                 UdevEvent *event,
@@ -65,7 +65,8 @@
                 bool accept_failure,
                 const char *cmd,
                 char *result,
-                size_t ressize);
+                size_t ressize,
+                bool *ret_truncated);
 int udev_event_execute_rules(
                 UdevEvent *event,
                 int inotify_fd,
@@ -74,7 +75,6 @@
                 Hashmap *properties_list,
                 UdevRules *rules);
 void udev_event_execute_run(UdevEvent *event, usec_t timeout_usec, int timeout_signal);
-int udev_event_process_inotify_watch(UdevEvent *event, int inotify_fd);
 
 static inline usec_t udev_warn_timeout(usec_t timeout_usec) {
         return DIV_ROUND_UP(timeout_usec, 3);
diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
index d9309ef..1596497 100644
--- a/src/udev/udev-node.c
+++ b/src/udev/udev-node.c
@@ -1,229 +1,281 @@
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
-#include <errno.h>
-#include <fcntl.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <sys/stat.h>
-#include <unistd.h>
+#include <sys/file.h>
 
 #include "sd-id128.h"
 
 #include "alloc-util.h"
 #include "device-private.h"
 #include "device-util.h"
+#include "devnum-util.h"
 #include "dirent-util.h"
+#include "escape.h"
 #include "fd-util.h"
+#include "fileio.h"
 #include "format-util.h"
 #include "fs-util.h"
 #include "hexdecoct.h"
-#include "mkdir.h"
+#include "label.h"
+#include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
-#include "random-util.h"
 #include "selinux-util.h"
 #include "smack-util.h"
 #include "stat-util.h"
-#include "stdio-util.h"
 #include "string-util.h"
-#include "strxcpyx.h"
-#include "time-util.h"
 #include "udev-node.h"
 #include "user-util.h"
 
-#define CREATE_LINK_MAX_RETRIES        128
-#define LINK_UPDATE_MAX_RETRIES        128
-#define CREATE_STACK_LINK_MAX_RETRIES  128
-#define UPDATE_TIMESTAMP_MAX_RETRIES   128
-#define MAX_RANDOM_DELAY (250 * USEC_PER_MSEC)
-#define MIN_RANDOM_DELAY ( 50 * USEC_PER_MSEC)
 #define UDEV_NODE_HASH_KEY SD_ID128_MAKE(b9,6a,f1,ce,40,31,44,1a,9e,19,ec,8b,ae,f3,e3,2f)
 
-static int create_symlink(const char *target, const char *slink) {
-        int r;
+int udev_node_cleanup(void) {
+        _cleanup_closedir_ DIR *dir = NULL;
 
-        assert(target);
-        assert(slink);
+        /* This must not be called when any workers exist. It would cause a race between mkdir() called
+         * by stack_directory_lock() and unlinkat() called by this. */
 
-        for (unsigned i = 0; i < CREATE_LINK_MAX_RETRIES; i++) {
-                r = mkdir_parents_label(slink, 0755);
-                if (r == -ENOENT)
-                        continue;
-                if (r < 0)
-                        return r;
+        dir = opendir("/run/udev/links");
+        if (!dir) {
+                if (errno == ENOENT)
+                        return 0;
 
-                mac_selinux_create_file_prepare(slink, S_IFLNK);
-                if (symlink(target, slink) < 0)
-                        r = -errno;
-                else
-                        r = 0;
-                mac_selinux_create_file_clear();
-                if (r != -ENOENT)
-                        return r;
+                return log_debug_errno(errno, "Failed to open directory '/run/udev/links', ignoring: %m");
         }
 
-        return r;
-}
+        FOREACH_DIRENT_ALL(de, dir, break) {
+                _cleanup_free_ char *lockfile = NULL;
 
-static int node_symlink(sd_device *dev, const char *node, const char *slink) {
-        _cleanup_free_ char *slink_dirname = NULL, *target = NULL;
-        const char *id, *slink_tmp;
-        struct stat stats;
-        int r;
+                if (de->d_name[0] == '.')
+                        continue;
 
-        assert(dev);
-        assert(node);
-        assert(slink);
+                if (de->d_type != DT_DIR)
+                        continue;
 
-        if (lstat(slink, &stats) >= 0) {
-                if (!S_ISLNK(stats.st_mode))
-                        return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EEXIST),
-                                                      "Conflicting inode '%s' found, link to '%s' will not be created.", slink, node);
-        } else if (errno != ENOENT)
-                return log_device_debug_errno(dev, errno, "Failed to lstat() '%s': %m", slink);
+                /* As commented in the above, this is called when no worker exists, hence the file is not
+                 * locked. On a later uevent, the lock file will be created if necessary. So, we can safely
+                 * remove the file now. */
+                lockfile = path_join(de->d_name, ".lock");
+                if (!lockfile)
+                        return log_oom_debug();
 
-        r = path_extract_directory(slink, &slink_dirname);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get parent directory of '%s': %m", slink);
+                if (unlinkat(dirfd(dir), lockfile, 0) < 0 && errno != ENOENT) {
+                        log_debug_errno(errno, "Failed to remove '/run/udev/links/%s', ignoring: %m", lockfile);
+                        continue;
+                }
 
-        /* use relative link */
-        r = path_make_relative(slink_dirname, node, &target);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get relative path from '%s' to '%s': %m", slink, node);
-
-        r = device_get_device_id(dev, &id);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get device id: %m");
-
-        slink_tmp = strjoina(slink, ".tmp-", id);
-        (void) unlink(slink_tmp);
-
-        r = create_symlink(target, slink_tmp);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to create symlink '%s' to '%s': %m", slink_tmp, target);
-
-        if (rename(slink_tmp, slink) < 0) {
-                r = log_device_debug_errno(dev, errno, "Failed to rename '%s' to '%s': %m", slink_tmp, slink);
-                (void) unlink(slink_tmp);
-                return r;
+                if (unlinkat(dirfd(dir), de->d_name, AT_REMOVEDIR) < 0 && errno != ENOTEMPTY)
+                        log_debug_errno(errno, "Failed to remove '/run/udev/links/%s', ignoring: %m", de->d_name);
         }
 
         return 0;
 }
 
-static int link_find_prioritized(sd_device *dev, bool add, const char *stackdir, char **ret) {
+static int node_symlink(sd_device *dev, const char *devnode, const char *slink) {
+        struct stat st;
+        int r;
+
+        assert(dev);
+        assert(slink);
+
+        if (!devnode) {
+                r = sd_device_get_devname(dev, &devnode);
+                if (r < 0)
+                        return log_device_debug_errno(dev, r, "Failed to get device node: %m");
+        }
+
+        if (lstat(slink, &st) >= 0) {
+                if (!S_ISLNK(st.st_mode))
+                        return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EEXIST),
+                                                      "Conflicting inode '%s' found, symlink to '%s' will not be created.",
+                                                      slink, devnode);
+        } else if (errno != ENOENT)
+                return log_device_debug_errno(dev, errno, "Failed to lstat() '%s': %m", slink);
+
+        r = mkdir_parents_label(slink, 0755);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to create parent directory of '%s': %m", slink);
+
+        /* use relative link */
+        r = symlink_atomic_full_label(devnode, slink, /* make_relative = */ true);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to create symlink '%s' to '%s': %m", slink, devnode);
+
+        log_device_debug(dev, "Successfully created symlink '%s' to '%s'", slink, devnode);
+        return 0;
+}
+
+static int stack_directory_read_one(int dirfd, const char *id, char **devnode, int *priority) {
+        _cleanup_free_ char *buf = NULL;
+        int tmp_prio, r;
+
+        assert(dirfd >= 0);
+        assert(id);
+        assert(devnode);
+        assert(priority);
+
+        /* First, let's try to read the entry with the new format, which should replace the old format pretty
+         * quickly. */
+
+        r = readlinkat_malloc(dirfd, id, &buf);
+        if (r >= 0) {
+                char *colon;
+
+                /* With the new format, the devnode and priority can be obtained from symlink itself. */
+
+                colon = strchr(buf, ':');
+                if (!colon || colon == buf)
+                        return -EINVAL;
+
+                *colon = '\0';
+
+                /* Of course, this check is racy, but it is not necessary to be perfect. Even if the device
+                 * node will be removed after this check, we will receive 'remove' uevent, and the invalid
+                 * symlink will be removed during processing the event. The check is just for shortening the
+                 * timespan that the symlink points to a non-existing device node. */
+                if (access(colon + 1, F_OK) < 0)
+                        return -ENODEV;
+
+                r = safe_atoi(buf, &tmp_prio);
+                if (r < 0)
+                        return r;
+
+                if (*devnode && tmp_prio <= *priority)
+                        return 0; /* Unchanged */
+
+                r = free_and_strdup(devnode, colon + 1);
+                if (r < 0)
+                        return r;
+
+        } else if (r == -EINVAL) { /* Not a symlink ? try the old format */
+                _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+                const char *val;
+
+                /* Old format. The devnode and priority must be obtained from uevent and udev database. */
+
+                r = sd_device_new_from_device_id(&dev, id);
+                if (r < 0)
+                        return r;
+
+                r = device_get_devlink_priority(dev, &tmp_prio);
+                if (r < 0)
+                        return r;
+
+                if (*devnode && tmp_prio <= *priority)
+                        return 0; /* Unchanged */
+
+                r = sd_device_get_devname(dev, &val);
+                if (r < 0)
+                        return r;
+
+                r = free_and_strdup(devnode, val);
+                if (r < 0)
+                        return r;
+
+        } else
+                return r == -ENOENT ? -ENODEV : r;
+
+        *priority = tmp_prio;
+        return 1; /* Updated */
+}
+
+static int stack_directory_find_prioritized_devnode(sd_device *dev, int dirfd, bool add, char **ret) {
         _cleanup_closedir_ DIR *dir = NULL;
-        _cleanup_free_ char *target = NULL;
-        struct dirent *dent;
+        _cleanup_free_ char *devnode = NULL;
         int r, priority = 0;
         const char *id;
 
         assert(dev);
-        assert(stackdir);
+        assert(dirfd >= 0);
         assert(ret);
 
         /* Find device node of device with highest priority. This returns 1 if a device found, 0 if no
-         * device found, or a negative errno. */
+         * device found, or a negative errno on error. */
 
         if (add) {
-                const char *devnode;
+                const char *n;
 
                 r = device_get_devlink_priority(dev, &priority);
                 if (r < 0)
                         return r;
 
-                r = sd_device_get_devname(dev, &devnode);
+                r = sd_device_get_devname(dev, &n);
                 if (r < 0)
                         return r;
 
-                target = strdup(devnode);
-                if (!target)
+                devnode = strdup(n);
+                if (!devnode)
                         return -ENOMEM;
         }
 
-        dir = opendir(stackdir);
-        if (!dir) {
-                if (add) /* The stack directory must exist. */
-                        return -errno;
-                if (errno != ENOENT)
-                        return -errno;
-
-                *ret = NULL;
-                return 0;
-        }
+        dir = xopendirat(dirfd, ".", O_NOFOLLOW);
+        if (!dir)
+                return -errno;
 
         r = device_get_device_id(dev, &id);
         if (r < 0)
                 return r;
 
-        FOREACH_DIRENT_ALL(dent, dir, break) {
-                _cleanup_free_ char *path = NULL, *buf = NULL;
-                int tmp_prio;
-
-                if (dent->d_name[0] == '.')
-                        continue;
+        FOREACH_DIRENT(de, dir, break) {
 
                 /* skip ourself */
-                if (streq(dent->d_name, id))
+                if (streq(de->d_name, id))
                         continue;
 
-                path = path_join(stackdir, dent->d_name);
-                if (!path)
-                        return -ENOMEM;
-
-                if (readlink_malloc(path, &buf) >= 0) {
-                        char *devnode;
-
-                        /* New format. The devnode and priority can be obtained from symlink. */
-
-                        devnode = strchr(buf, ':');
-                        if (!devnode || devnode == buf)
-                                continue;
-
-                        *(devnode++) = '\0';
-                        if (!path_startswith(devnode, "/dev"))
-                                continue;
-
-                        if (safe_atoi(buf, &tmp_prio) < 0)
-                                continue;
-
-                        if (target && tmp_prio <= priority)
-                                continue;
-
-                        r = free_and_strdup(&target, devnode);
-                        if (r < 0)
-                                return r;
-                } else {
-                        _cleanup_(sd_device_unrefp) sd_device *tmp_dev = NULL;
-                        const char *devnode;
-
-                        /* Old format. The devnode and priority must be obtained from uevent and
-                         * udev database files. */
-
-                        if (sd_device_new_from_device_id(&tmp_dev, dent->d_name) < 0)
-                                continue;
-
-                        if (device_get_devlink_priority(tmp_dev, &tmp_prio) < 0)
-                                continue;
-
-                        if (target && tmp_prio <= priority)
-                                continue;
-
-                        if (sd_device_get_devname(tmp_dev, &devnode) < 0)
-                                continue;
-
-                        r = free_and_strdup(&target, devnode);
-                        if (r < 0)
-                                return r;
-                }
-
-                priority = tmp_prio;
+                r = stack_directory_read_one(dirfd, de->d_name, &devnode, &priority);
+                if (r < 0 && r != -ENODEV)
+                        log_debug_errno(r, "Failed to read '%s', ignoring: %m", de->d_name);
         }
 
-        *ret = TAKE_PTR(target);
+        *ret = TAKE_PTR(devnode);
         return !!*ret;
 }
 
+static int stack_directory_update(sd_device *dev, int fd, bool add) {
+        const char *id;
+        int r;
+
+        assert(dev);
+        assert(fd >= 0);
+
+        r = device_get_device_id(dev, &id);
+        if (r < 0)
+                return r;
+
+        if (add) {
+                _cleanup_free_ char *data = NULL, *buf = NULL;
+                const char *devname;
+                int priority;
+
+                r = sd_device_get_devname(dev, &devname);
+                if (r < 0)
+                        return r;
+
+                r = device_get_devlink_priority(dev, &priority);
+                if (r < 0)
+                        return r;
+
+                if (asprintf(&data, "%i:%s", priority, devname) < 0)
+                        return -ENOMEM;
+
+                if (readlinkat_malloc(fd, id, &buf) >= 0 && streq(buf, data))
+                        return 0; /* Unchanged. */
+
+                (void) unlinkat(fd, id, 0);
+
+                if (symlinkat(data, fd, id) < 0)
+                        return -errno;
+
+        } else {
+                if (unlinkat(fd, id, 0) < 0) {
+                        if (errno == ENOENT)
+                                return 0; /* Unchanged. */
+                        return -errno;
+                }
+        }
+
+        return 1; /* Updated. */
+}
+
 size_t udev_node_escape_path(const char *src, char *dest, size_t size) {
         size_t i, j;
         uint64_t h;
@@ -266,230 +318,101 @@
         return size - 1;
 }
 
-static int update_timestamp(sd_device *dev, const char *path, struct stat *prev) {
-        assert(path);
-        assert(prev);
-
-        /* Even if a symlink in the stack directory is created/removed, the mtime of the directory may
-         * not be changed. Why? Let's consider the following situation. For simplicity, let's assume
-         * there exist two udev workers (A and B) and all of them calls link_update() for the same
-         * devlink simultaneously.
-         *
-         * 1. A creates/removes a symlink in the stack directory.
-         * 2. A calls the first stat() in the loop of link_update().
-         * 3. A calls link_find_prioritized().
-         * 4. B creates/removes another symlink in the stack directory, so the result of the step 3 is outdated.
-         * 5. B finishes link_update().
-         * 6. A creates/removes devlink according to the outdated result in the step 3.
-         * 7. A calls the second stat() in the loop of link_update().
-         *
-         * If these 7 steps are processed in this order within a short time period that kernel's timer
-         * does not increase, then even if the contents in the stack directory is changed, the results
-         * of two stat() called by A shows the same timestamp, and A cannot detect the change.
-         *
-         * By calling this function after creating/removing symlinks in the stack directory, the
-         * timestamp of the stack directory is always increased at least in the above step 5, so A can
-         * detect the update. */
-
-        if ((prev->st_mode & S_IFMT) == 0)
-                return 0; /* Does not exist, or previous stat() failed. */
-
-        for (unsigned i = 0; i < UPDATE_TIMESTAMP_MAX_RETRIES; i++) {
-                struct stat st;
-
-                if (stat(path, &st) < 0)
-                        return -errno;
-
-                if (!stat_inode_unmodified(prev, &st))
-                        return 0;
-
-                log_device_debug(dev,
-                                 "%s is modified, but its timestamp is not changed, "
-                                 "updating timestamp after 10ms.",
-                                 path);
-
-                (void) usleep(10 * USEC_PER_MSEC);
-                if (utimensat(AT_FDCWD, path, NULL, 0) < 0)
-                        return -errno;
-        }
-
-        return -ELOOP;
-}
-
-static int update_stack_directory(sd_device *dev, const char *dirname, bool add) {
-        _cleanup_free_ char *filename = NULL, *data = NULL, *buf = NULL;
-        const char *devname, *id;
-        struct stat st = {};
-        int priority, r;
-
-        assert(dev);
-        assert(dirname);
-
-        r = device_get_device_id(dev, &id);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get device id: %m");
-
-        filename = path_join(dirname, id);
-        if (!filename)
-                return log_oom_debug();
-
-        if (!add) {
-                int unlink_error = 0, stat_error = 0;
-
-                if (stat(dirname, &st) < 0) {
-                        if (errno == ENOENT)
-                                return 0; /* The stack directory is already removed. That's OK. */
-                        stat_error = -errno;
-                }
-
-                if (unlink(filename) < 0)
-                        unlink_error = -errno;
-
-                if (rmdir(dirname) >= 0 || errno == ENOENT)
-                        return 0;
-
-                if (unlink_error < 0) {
-                        if (unlink_error == -ENOENT)
-                                return 0;
-
-                        /* If we failed to remove the symlink, then there is almost nothing we can do. */
-                        return log_device_debug_errno(dev, unlink_error, "Failed to remove %s: %m", filename);
-                }
-
-                if (stat_error < 0)
-                        return log_device_debug_errno(dev, stat_error, "Failed to stat %s: %m", dirname);
-
-                /* The symlink was removed. Check if the timestamp of directory is changed. */
-                r = update_timestamp(dev, dirname, &st);
-                if (r < 0 && r != -ENOENT)
-                        return log_device_debug_errno(dev, r, "Failed to update timestamp of %s: %m", dirname);
-
-                return 0;
-        }
-
-        r = sd_device_get_devname(dev, &devname);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get device node: %m");
-
-        r = device_get_devlink_priority(dev, &priority);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get priority of device node symlink: %m");
-
-        if (asprintf(&data, "%i:%s", priority, devname) < 0)
-                return log_oom_debug();
-
-        if (readlink_malloc(filename, &buf) >= 0 && streq(buf, data))
-                return 0;
-
-        if (unlink(filename) < 0 && errno != ENOENT)
-                log_device_debug_errno(dev, errno, "Failed to remove %s, ignoring: %m", filename);
-
-        for (unsigned j = 0; j < CREATE_STACK_LINK_MAX_RETRIES; j++) {
-                /* This may fail with -ENOENT when the parent directory is removed during
-                 * creating the file by another udevd worker. */
-                r = mkdir_p(dirname, 0755);
-                if (r == -ENOENT)
-                        continue;
-                if (r < 0)
-                        return log_device_debug_errno(dev, r, "Failed to create directory %s: %m", dirname);
-
-                if (stat(dirname, &st) < 0) {
-                        if (errno == ENOENT)
-                                continue;
-                        return log_device_debug_errno(dev, errno, "Failed to stat %s: %m", dirname);
-                }
-
-                if (symlink(data, filename) < 0) {
-                        if (errno == ENOENT)
-                                continue;
-                        return log_device_debug_errno(dev, errno, "Failed to create symbolic link %s: %m", filename);
-                }
-
-                /* The symlink was created. Check if the timestamp of directory is changed. */
-                r = update_timestamp(dev, dirname, &st);
-                if (r < 0)
-                        return log_device_debug_errno(dev, r, "Failed to update timestamp of %s: %m", dirname);
-
-                return 0;
-        }
-
-        return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ELOOP), "Failed to create symbolic link %s: %m", filename);
-}
-
-/* manage "stack of names" with possibly specified device priorities */
-static int link_update(sd_device *dev, const char *slink_in, bool add) {
-        _cleanup_free_ char *slink = NULL, *dirname = NULL;
-        const char *slink_name;
+static int stack_directory_get_name(const char *slink, char **ret) {
+        _cleanup_free_ char *s = NULL, *dirname = NULL;
         char name_enc[NAME_MAX+1];
+        const char *name;
+
+        assert(slink);
+        assert(ret);
+
+        s = strdup(slink);
+        if (!s)
+                return -ENOMEM;
+
+        path_simplify(s);
+
+        if (!path_is_normalized(s))
+                return -EINVAL;
+
+        name = path_startswith(s, "/dev");
+        if (empty_or_root(name))
+                return -EINVAL;
+
+        udev_node_escape_path(name, name_enc, sizeof(name_enc));
+
+        dirname = path_join("/run/udev/links", name_enc);
+        if (!dirname)
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(dirname);
+        return 0;
+}
+
+static int stack_directory_open(sd_device *dev, const char *slink, int *ret_dirfd, int *ret_lockfd) {
+        _cleanup_close_ int dirfd = -EBADF, lockfd = -EBADF;
+        _cleanup_free_ char *dirname = NULL;
         int r;
 
         assert(dev);
-        assert(slink_in);
+        assert(slink);
+        assert(ret_dirfd);
+        assert(ret_lockfd);
 
-        slink = strdup(slink_in);
-        if (!slink)
-                return log_oom_debug();
+        r = stack_directory_get_name(slink, &dirname);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to build stack directory name for '%s': %m", slink);
 
-        path_simplify(slink);
+        r = mkdir_parents(dirname, 0755);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to create stack directory '%s': %m", dirname);
 
-        slink_name = path_startswith(slink, "/dev");
-        if (!slink_name ||
-            empty_or_root(slink_name) ||
-            !path_is_normalized(slink_name))
-                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
-                                              "Invalid symbolic link of device node: %s", slink);
+        dirfd = open_mkdir_at(AT_FDCWD, dirname, O_CLOEXEC | O_DIRECTORY | O_NOFOLLOW | O_RDONLY, 0755);
+        if (dirfd < 0)
+                return log_device_debug_errno(dev, dirfd, "Failed to open stack directory '%s': %m", dirname);
 
-        (void) udev_node_escape_path(slink_name, name_enc, sizeof(name_enc));
-        dirname = path_join("/run/udev/links", name_enc);
-        if (!dirname)
-                return log_oom_debug();
+        lockfd = openat(dirfd, ".lock", O_CLOEXEC | O_NOFOLLOW | O_RDONLY | O_CREAT, 0600);
+        if (lockfd < 0)
+                return log_device_debug_errno(dev, errno, "Failed to create lock file for stack directory '%s': %m", dirname);
 
-        r = update_stack_directory(dev, dirname, add);
+        if (flock(lockfd, LOCK_EX) < 0)
+                return log_device_debug_errno(dev, errno, "Failed to place a lock on lock file for %s: %m", dirname);
+
+        *ret_dirfd = TAKE_FD(dirfd);
+        *ret_lockfd = TAKE_FD(lockfd);
+        return 0;
+}
+
+static int link_update(sd_device *dev, const char *slink, bool add) {
+        _cleanup_close_ int dirfd = -EBADF, lockfd = -EBADF;
+        _cleanup_free_ char *devnode = NULL;
+        int r;
+
+        assert(dev);
+        assert(slink);
+
+        r = stack_directory_open(dev, slink, &dirfd, &lockfd);
         if (r < 0)
                 return r;
 
-        for (unsigned i = 0; i < LINK_UPDATE_MAX_RETRIES; i++) {
-                _cleanup_free_ char *target = NULL;
-                struct stat st1 = {}, st2 = {};
+        r = stack_directory_update(dev, dirfd, add);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to update stack directory for '%s': %m", slink);
 
-                if (i > 0) {
-                        char buf[FORMAT_TIMESPAN_MAX];
-                        usec_t delay = MIN_RANDOM_DELAY + random_u64_range(MAX_RANDOM_DELAY - MIN_RANDOM_DELAY);
+        r = stack_directory_find_prioritized_devnode(dev, dirfd, add, &devnode);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to determine device node with the highest priority for '%s': %m", slink);
+        if (r > 0)
+                return node_symlink(dev, devnode, slink);
 
-                        log_device_debug(dev, "Directory %s was updated, retrying to update devlink %s after %s.",
-                                         dirname, slink, format_timespan(buf, sizeof(buf), delay, USEC_PER_MSEC));
-                        (void) usleep(delay);
-                }
+        log_device_debug(dev, "No reference left for '%s', removing", slink);
 
-                if (stat(dirname, &st1) < 0 && errno != ENOENT)
-                        return log_device_debug_errno(dev, errno, "Failed to stat %s: %m", dirname);
+        if (unlink(slink) < 0 && errno != ENOENT)
+                log_device_debug_errno(dev, errno, "Failed to remove '%s', ignoring: %m", slink);
 
-                r = link_find_prioritized(dev, add, dirname, &target);
-                if (r < 0)
-                        return log_device_debug_errno(dev, r, "Failed to determine device node with the highest priority for '%s': %m", slink);
-                if (r == 0) {
-                        log_device_debug(dev, "No reference left for '%s', removing", slink);
+        (void) rmdir_parents(slink, "/dev");
 
-                        if (unlink(slink) < 0 && errno != ENOENT)
-                                log_device_debug_errno(dev, errno, "Failed to remove '%s', ignoring: %m", slink);
-
-                        (void) rmdir_parents(slink, "/dev");
-                        return 0;
-                }
-
-                r = node_symlink(dev, target, slink);
-                if (r < 0)
-                        return r;
-
-                if (stat(dirname, &st2) < 0 && errno != ENOENT)
-                        return log_device_debug_errno(dev, errno, "Failed to stat %s: %m", dirname);
-
-                if (((st1.st_mode & S_IFMT) == 0 && (st2.st_mode & S_IFMT) == 0) ||
-                    stat_inode_unmodified(&st1, &st2))
-                        return 0;
-        }
-
-        return -ELOOP;
+        return 0;
 }
 
 static int device_get_devpath_by_devnum(sd_device *dev, char **ret) {
@@ -513,23 +436,12 @@
 
 int udev_node_update(sd_device *dev, sd_device *dev_old) {
         _cleanup_free_ char *filename = NULL;
-        const char *devnode, *devlink;
+        const char *devlink;
         int r;
 
         assert(dev);
         assert(dev_old);
 
-        r = sd_device_get_devname(dev, &devnode);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get devnode: %m");
-
-        if (DEBUG_LOGGING) {
-                const char *id = NULL;
-
-                (void) device_get_device_id(dev, &id);
-                log_device_debug(dev, "Handling device node '%s', devnum=%s", devnode, strna(id));
-        }
-
         /* update possible left-over symlinks */
         FOREACH_DEVICE_DEVLINK(dev_old, devlink) {
                 /* check if old link name still belongs to this device */
@@ -561,7 +473,7 @@
                 return log_device_debug_errno(dev, r, "Failed to get device path: %m");
 
         /* always add /dev/{block,char}/$major:$minor */
-        r = node_symlink(dev, devnode, filename);
+        r = node_symlink(dev, NULL, filename);
         if (r < 0)
                 return log_device_warning_errno(dev, r, "Failed to create device symlink '%s': %m", filename);
 
@@ -595,58 +507,29 @@
         return 0;
 }
 
-int udev_node_apply_permissions(
-                sd_device *dev,
+static int udev_node_apply_permissions_impl(
+                sd_device *dev, /* can be NULL, only used for logging. */
+                int node_fd,
+                const char *devnode,
                 bool apply_mac,
                 mode_t mode,
                 uid_t uid,
                 gid_t gid,
                 OrderedHashmap *seclabel_list) {
 
-        const char *devnode, *subsystem, *id = NULL;
         bool apply_mode, apply_uid, apply_gid;
-        _cleanup_close_ int node_fd = -1;
         struct stat stats;
-        dev_t devnum;
         int r;
 
-        assert(dev);
-
-        r = sd_device_get_devname(dev, &devnode);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get devname: %m");
-        r = sd_device_get_subsystem(dev, &subsystem);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get subsystem: %m");
-        r = sd_device_get_devnum(dev, &devnum);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get devnum: %m");
-        (void) device_get_device_id(dev, &id);
-
-        if (streq(subsystem, "block"))
-                mode |= S_IFBLK;
-        else
-                mode |= S_IFCHR;
-
-        node_fd = open(devnode, O_PATH|O_NOFOLLOW|O_CLOEXEC);
-        if (node_fd < 0) {
-                if (errno == ENOENT) {
-                        log_device_debug_errno(dev, errno, "Device node %s is missing, skipping handling.", devnode);
-                        return 0; /* This is necessarily racey, so ignore missing the device */
-                }
-
-                return log_device_debug_errno(dev, errno, "Cannot open node %s: %m", devnode);
-        }
+        assert(node_fd >= 0);
+        assert(devnode);
 
         if (fstat(node_fd, &stats) < 0)
                 return log_device_debug_errno(dev, errno, "cannot stat() node %s: %m", devnode);
 
-        if ((mode != MODE_INVALID && (stats.st_mode & S_IFMT) != (mode & S_IFMT)) || stats.st_rdev != devnum) {
-                log_device_debug(dev, "Found node '%s' with non-matching devnum %s, skipping handling.",
-                                 devnode, strna(id));
-                return 0; /* We might process a device that already got replaced by the time we have a look
-                           * at it, handle this gracefully and step away. */
-        }
+        /* If group is set, but mode is not set, "upgrade" mode for the group. */
+        if (mode == MODE_INVALID && gid_is_valid(gid) && gid > 0)
+                mode = 0660;
 
         apply_mode = mode != MODE_INVALID && (stats.st_mode & 0777) != (mode & 0777);
         apply_uid = uid_is_valid(uid) && stats.st_uid != uid;
@@ -709,7 +592,7 @@
 
                 /* set the defaults */
                 if (!selinux)
-                        (void) mac_selinux_fix_fd(node_fd, devnode, LABEL_IGNORE_ENOENT);
+                        (void) mac_selinux_fix_full(node_fd, NULL, devnode, LABEL_IGNORE_ENOENT);
                 if (!smack)
                         (void) mac_smack_apply_fd(node_fd, SMACK_ATTR_ACCESS, NULL);
         }
@@ -721,3 +604,95 @@
 
         return 0;
 }
+
+int udev_node_apply_permissions(
+                sd_device *dev,
+                bool apply_mac,
+                mode_t mode,
+                uid_t uid,
+                gid_t gid,
+                OrderedHashmap *seclabel_list) {
+
+        const char *devnode;
+        _cleanup_close_ int node_fd = -EBADF;
+        int r;
+
+        assert(dev);
+
+        r = sd_device_get_devname(dev, &devnode);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to get devname: %m");
+
+        node_fd = sd_device_open(dev, O_PATH|O_CLOEXEC);
+        if (node_fd < 0) {
+                if (ERRNO_IS_DEVICE_ABSENT(node_fd)) {
+                        log_device_debug_errno(dev, node_fd, "Device node %s is missing, skipping handling.", devnode);
+                        return 0; /* This is necessarily racey, so ignore missing the device */
+                }
+
+                return log_device_debug_errno(dev, node_fd, "Cannot open node %s: %m", devnode);
+        }
+
+        return udev_node_apply_permissions_impl(dev, node_fd, devnode, apply_mac, mode, uid, gid, seclabel_list);
+}
+
+int static_node_apply_permissions(
+                const char *name,
+                mode_t mode,
+                uid_t uid,
+                gid_t gid,
+                char **tags) {
+
+        _cleanup_free_ char *unescaped_filename = NULL;
+        _cleanup_close_ int node_fd = -EBADF;
+        const char *devnode;
+        struct stat stats;
+        int r;
+
+        assert(name);
+
+        if (uid == UID_INVALID && gid == GID_INVALID && mode == MODE_INVALID && !tags)
+                return 0;
+
+        devnode = strjoina("/dev/", name);
+
+        node_fd = open(devnode, O_PATH|O_CLOEXEC);
+        if (node_fd < 0) {
+                if (errno != ENOENT)
+                        return log_error_errno(errno, "Failed to open %s: %m", devnode);
+                return 0;
+        }
+
+        if (fstat(node_fd, &stats) < 0)
+                return log_error_errno(errno, "Failed to stat %s: %m", devnode);
+
+        if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode)) {
+                log_warning("%s is neither block nor character device, ignoring.", devnode);
+                return 0;
+        }
+
+        if (!strv_isempty(tags)) {
+                unescaped_filename = xescape(name, "/.");
+                if (!unescaped_filename)
+                        return log_oom();
+        }
+
+        /* export the tags to a directory as symlinks, allowing otherwise dead nodes to be tagged */
+        STRV_FOREACH(t, tags) {
+                _cleanup_free_ char *p = NULL;
+
+                p = path_join("/run/udev/static_node-tags/", *t, unescaped_filename);
+                if (!p)
+                        return log_oom();
+
+                r = mkdir_parents(p, 0755);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to create parent directory for %s: %m", p);
+
+                r = symlink(devnode, p);
+                if (r < 0 && errno != EEXIST)
+                        return log_error_errno(errno, "Failed to create symlink %s -> %s: %m", p, devnode);
+        }
+
+        return udev_node_apply_permissions_impl(NULL, node_fd, devnode, false, mode, uid, gid, NULL);
+}
diff --git a/src/udev/udev-node.h b/src/udev/udev-node.h
index a34af77..0c545e4 100644
--- a/src/udev/udev-node.h
+++ b/src/udev/udev-node.h
@@ -15,7 +15,15 @@
                 uid_t uid,
                 gid_t gid,
                 OrderedHashmap *seclabel_list);
+int static_node_apply_permissions(
+                const char *name,
+                mode_t mode,
+                uid_t uid,
+                gid_t gid,
+                char **tags);
+
 int udev_node_remove(sd_device *dev);
 int udev_node_update(sd_device *dev, sd_device *dev_old);
+int udev_node_cleanup(void);
 
 size_t udev_node_escape_path(const char *src, char *dest, size_t size);
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index bf997fc..c5244d4 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -5,11 +5,11 @@
 #include "alloc-util.h"
 #include "architecture.h"
 #include "conf-files.h"
-#include "def.h"
+#include "conf-parser.h"
+#include "constants.h"
 #include "device-private.h"
 #include "device-util.h"
 #include "dirent-util.h"
-#include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
@@ -29,6 +29,7 @@
 #include "syslog-util.h"
 #include "udev-builtin.h"
 #include "udev-event.h"
+#include "udev-node.h"
 #include "udev-rules.h"
 #include "udev-util.h"
 #include "user-util.h"
@@ -176,10 +177,10 @@
 };
 
 struct UdevRules {
-        usec_t dirs_ts_usec;
         ResolveNameTiming resolve_name_timing;
         Hashmap *known_users;
         Hashmap *known_groups;
+        Hashmap *stats_by_path;
         UdevRuleFile *current_file;
         LIST_HEAD(UdevRuleFile, rule_files);
 };
@@ -267,11 +268,9 @@
 }
 
 static void udev_rule_line_clear_tokens(UdevRuleLine *rule_line) {
-        UdevRuleToken *i, *next;
-
         assert(rule_line);
 
-        LIST_FOREACH_SAFE(tokens, i, next, rule_line->tokens)
+        LIST_FOREACH(tokens, i, rule_line->tokens)
                 udev_rule_token_free(i);
 
         rule_line->tokens = NULL;
@@ -297,12 +296,10 @@
 DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRuleLine*, udev_rule_line_free);
 
 static void udev_rule_file_free(UdevRuleFile *rule_file) {
-        UdevRuleLine *i, *next;
-
         if (!rule_file)
                 return;
 
-        LIST_FOREACH_SAFE(rule_lines, i, next, rule_file->rule_lines)
+        LIST_FOREACH(rule_lines, i, rule_file->rule_lines)
                 udev_rule_line_free(i);
 
         free(rule_file->filename);
@@ -310,16 +307,15 @@
 }
 
 UdevRules *udev_rules_free(UdevRules *rules) {
-        UdevRuleFile *i, *next;
-
         if (!rules)
                 return NULL;
 
-        LIST_FOREACH_SAFE(rule_files, i, next, rules->rule_files)
+        LIST_FOREACH(rule_files, i, rules->rule_files)
                 udev_rule_file_free(i);
 
         hashmap_free_free_key(rules->known_users);
         hashmap_free_free_key(rules->known_groups);
+        hashmap_free(rules->stats_by_path);
         return mfree(rules);
 }
 
@@ -583,9 +579,6 @@
         } else if (streq(key, "SYMLINK")) {
                 if (attr)
                         return log_token_invalid_attr(rules, key);
-                if (op == OP_REMOVE)
-                        return log_token_invalid_op(rules, key);
-
                 if (!is_match) {
                         check_value_format_and_warn(rules, key, value, false);
                         r = rule_line_add_token(rule_line, TK_A_DEVLINK, op, value, NULL);
@@ -1061,21 +1054,19 @@
 }
 
 static void sort_tokens(UdevRuleLine *rule_line) {
-        UdevRuleToken *head_old;
-
         assert(rule_line);
 
-        head_old = TAKE_PTR(rule_line->tokens);
+        UdevRuleToken *old_tokens = TAKE_PTR(rule_line->tokens);
         rule_line->current_token = NULL;
 
-        while (!LIST_IS_EMPTY(head_old)) {
-                UdevRuleToken *t, *min_token = NULL;
+        while (old_tokens) {
+                UdevRuleToken *min_token = NULL;
 
-                LIST_FOREACH(tokens, t, head_old)
+                LIST_FOREACH(tokens, t, old_tokens)
                         if (!min_token || min_token->type > t->type)
                                 min_token = t;
 
-                LIST_REMOVE(tokens, head_old, min_token);
+                LIST_REMOVE(tokens, old_tokens, min_token);
                 rule_line_append_token(rule_line, min_token);
         }
 }
@@ -1096,9 +1087,7 @@
         if (isempty(line_str))
                 return 0;
 
-        /* We use memdup_suffix0() here, since we want to add a second NUL byte to the end, since possibly
-         * some parsers might turn this into a "nulstr", which requires an extra NUL at the end. */
-        line = memdup_suffix0(line_str, strlen(line_str) + 1);
+        line = strdup(line_str);
         if (!line)
                 return log_oom();
 
@@ -1145,16 +1134,14 @@
 }
 
 static void rule_resolve_goto(UdevRuleFile *rule_file) {
-        UdevRuleLine *line, *line_next, *i;
-
         assert(rule_file);
 
         /* link GOTOs to LABEL rules in this file to be able to fast-forward */
-        LIST_FOREACH_SAFE(rule_lines, line, line_next, rule_file->rule_lines) {
+        LIST_FOREACH(rule_lines, line, rule_file->rule_lines) {
                 if (!FLAGS_SET(line->type, LINE_HAS_GOTO))
                         continue;
 
-                LIST_FOREACH_AFTER(rule_lines, i, line)
+                LIST_FOREACH(rule_lines, i, line->rule_lines_next)
                         if (streq_ptr(i->label, line->goto_label)) {
                                 line->goto_line = i;
                                 break;
@@ -1185,6 +1172,7 @@
         UdevRuleFile *rule_file;
         bool ignore_line = false;
         unsigned line_nr = 0;
+        struct stat st;
         int r;
 
         f = fopen(filename, "re");
@@ -1192,16 +1180,23 @@
                 if (errno == ENOENT)
                         return 0;
 
-                return -errno;
+                return log_warning_errno(errno, "Failed to open %s, ignoring: %m", filename);
         }
 
-        (void) fd_warn_permissions(filename, fileno(f));
+        if (fstat(fileno(f), &st) < 0)
+                return log_warning_errno(errno, "Failed to stat %s, ignoring: %m", filename);
 
-        if (null_or_empty_fd(fileno(f))) {
+        if (null_or_empty(&st)) {
                 log_debug("Skipping empty file: %s", filename);
                 return 0;
         }
 
+        r = hashmap_put_stats_by_path(&rules->stats_by_path, filename, &st);
+        if (r < 0)
+                return log_warning_errno(errno, "Failed to save stat for %s, ignoring: %m", filename);
+
+        (void) fd_warn_permissions(filename, fileno(f));
+
         log_debug("Reading rules file: %s", filename);
 
         name = strdup(filename);
@@ -1299,15 +1294,12 @@
 int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing) {
         _cleanup_(udev_rules_freep) UdevRules *rules = NULL;
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         rules = udev_rules_new(resolve_name_timing);
         if (!rules)
                 return -ENOMEM;
 
-        (void) udev_rules_check_timestamp(rules);
-
         r = conf_files_list_strv(&files, ".rules", NULL, 0, RULES_DIRS);
         if (r < 0)
                 return log_debug_errno(r, "Failed to enumerate rules files: %m");
@@ -1322,15 +1314,29 @@
         return 0;
 }
 
-bool udev_rules_check_timestamp(UdevRules *rules) {
-        if (!rules)
-                return false;
+bool udev_rules_should_reload(UdevRules *rules) {
+        _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL;
+        int r;
 
-        return paths_check_timestamp(RULES_DIRS, &rules->dirs_ts_usec, true);
+        if (!rules)
+                return true;
+
+        r = config_get_stats_by_path(".rules", NULL, 0, RULES_DIRS, /* check_dropins = */ false, &stats_by_path);
+        if (r < 0) {
+                log_warning_errno(r, "Failed to get stats of udev rules, ignoring: %m");
+                return true;
+        }
+
+        if (!stats_by_path_equal(rules->stats_by_path, stats_by_path)) {
+                log_debug("Udev rules need reloading");
+                return true;
+        }
+
+        return false;
 }
 
 static bool token_match_string(UdevRuleToken *token, const char *str) {
-        const char *i, *value;
+        const char *value;
         bool match = false;
 
         assert(token);
@@ -1374,17 +1380,20 @@
                         }
                 break;
         default:
-                assert_not_reached("Invalid match type");
+                assert_not_reached();
         }
 
         return token->op == (match ? OP_MATCH : OP_NOMATCH);
 }
 
-static bool token_match_attr(UdevRuleToken *token, sd_device *dev, UdevEvent *event) {
+static bool token_match_attr(UdevRules *rules, UdevRuleToken *token, sd_device *dev, UdevEvent *event) {
         char nbuf[UDEV_NAME_SIZE], vbuf[UDEV_NAME_SIZE];
         const char *name, *value;
+        bool truncated;
 
+        assert(rules);
         assert(token);
+        assert(IN_SET(token->type, TK_M_ATTR, TK_M_PARENTS_ATTR));
         assert(dev);
         assert(event);
 
@@ -1392,7 +1401,15 @@
 
         switch (token->attr_subst_type) {
         case SUBST_TYPE_FORMAT:
-                (void) udev_event_apply_format(event, name, nbuf, sizeof(nbuf), false);
+                (void) udev_event_apply_format(event, name, nbuf, sizeof(nbuf), false, &truncated);
+                if (truncated) {
+                        log_rule_debug(dev, rules,
+                                       "The sysfs attribute name '%s' is truncated while substituting into '%s', "
+                                       "assuming the %s key does not match.", nbuf, name,
+                                       token->type == TK_M_ATTR ? "ATTR" : "ATTRS");
+                        return false;
+                }
+
                 name = nbuf;
                 _fallthrough_;
         case SUBST_TYPE_PLAIN:
@@ -1405,7 +1422,7 @@
                 value = vbuf;
                 break;
         default:
-                assert_not_reached("Invalid attribute substitution type");
+                assert_not_reached();
         }
 
         /* remove trailing whitespace, if not asked to match for it */
@@ -1493,33 +1510,38 @@
 
 static int attr_subst_subdir(char attr[static UDEV_PATH_SIZE]) {
         _cleanup_closedir_ DIR *dir = NULL;
-        struct dirent *dent;
         char buf[UDEV_PATH_SIZE], *p;
         const char *tail;
         size_t len, size;
+        bool truncated;
 
         assert(attr);
 
         tail = strstr(attr, "/*/");
         if (!tail)
-            return 0;
+                return 0;
 
         len = tail - attr + 1; /* include slash at the end */
         tail += 2; /* include slash at the beginning */
 
         p = buf;
         size = sizeof(buf);
-        size -= strnpcpy(&p, size, attr, len);
+        size -= strnpcpy_full(&p, size, attr, len, &truncated);
+        if (truncated)
+                return -ENOENT;
 
         dir = opendir(buf);
         if (!dir)
                 return -errno;
 
-        FOREACH_DIRENT_ALL(dent, dir, break) {
-                if (dent->d_name[0] == '.')
+        FOREACH_DIRENT_ALL(de, dir, break) {
+                if (de->d_name[0] == '.')
                         continue;
 
-                strscpyl(p, size, dent->d_name, tail, NULL);
+                strscpyl_full(p, size, &truncated, de->d_name, tail, NULL);
+                if (truncated)
+                        continue;
+
                 if (faccessat(dirfd(dir), p, F_OK, 0) < 0)
                         continue;
 
@@ -1607,14 +1629,14 @@
                 else if (streq(k, "virt"))
                         val = virtualization_to_string(detect_virtualization());
                 else
-                        assert_not_reached("Invalid CONST key");
+                        assert_not_reached();
                 return token_match_string(token, val);
         }
         case TK_M_TAG:
         case TK_M_PARENTS_TAG: {
                 const char *val;
 
-                FOREACH_DEVICE_TAG(dev, val)
+                FOREACH_DEVICE_CURRENT_TAG(dev, val)
                         if (token_match_string(token, val))
                                 return token->op == OP_MATCH;
                 return token->op == OP_NOMATCH;
@@ -1645,12 +1667,19 @@
         }
         case TK_M_ATTR:
         case TK_M_PARENTS_ATTR:
-                return token_match_attr(token, dev, event);
+                return token_match_attr(rules, token, dev, event);
         case TK_M_SYSCTL: {
                 _cleanup_free_ char *value = NULL;
                 char buf[UDEV_PATH_SIZE];
+                bool truncated;
 
-                (void) udev_event_apply_format(event, token->data, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->data, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_debug(dev, rules, "The sysctl entry name '%s' is truncated while substituting into '%s', "
+                                       "assuming the SYSCTL key does not match.", buf, (const char*) token->data);
+                        return false;
+                }
+
                 r = sysctl_read(sysctl_normalize(buf), &value);
                 if (r < 0 && r != -ENOENT)
                         return log_rule_error_errno(dev, rules, r, "Failed to read sysctl '%s': %m", buf);
@@ -1661,9 +1690,15 @@
                 mode_t mode = PTR_TO_MODE(token->data);
                 char buf[UDEV_PATH_SIZE];
                 struct stat statbuf;
-                bool match;
+                bool match, truncated;
 
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_debug(dev, rules, "The file name '%s' is truncated while substituting into '%s', "
+                                       "assuming the TEST key does not match", buf, token->value);
+                        return false;
+                }
+
                 if (!path_is_absolute(buf) &&
                     udev_resolve_subsys_kernel(buf, buf, sizeof(buf), false) < 0) {
                         char tmp[UDEV_PATH_SIZE];
@@ -1673,8 +1708,11 @@
                         if (r < 0)
                                 return log_rule_error_errno(dev, rules, r, "Failed to get syspath: %m");
 
-                        strscpy(tmp, sizeof(tmp), buf);
-                        strscpyl(buf, sizeof(buf), val, "/", tmp, NULL);
+                        strscpy_full(tmp, sizeof(tmp), buf, &truncated);
+                        assert(!truncated);
+                        strscpyl_full(buf, sizeof(buf), &truncated, val, "/", tmp, NULL);
+                        if (truncated)
+                                return false;
                 }
 
                 r = attr_subst_subdir(buf);
@@ -1693,14 +1731,21 @@
                 return token->op == (match ? OP_MATCH : OP_NOMATCH);
         }
         case TK_M_PROGRAM: {
-                char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE];
+                char buf[UDEV_LINE_SIZE], result[UDEV_LINE_SIZE];
+                bool truncated;
                 size_t count;
 
                 event->program_result = mfree(event->program_result);
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_debug(dev, rules, "The command '%s' is truncated while substituting into '%s', "
+                                       "assuming the PROGRAM key does not match.", buf, token->value);
+                        return false;
+                }
+
                 log_rule_debug(dev, rules, "Running PROGRAM '%s'", buf);
 
-                r = udev_event_spawn(event, timeout_usec, timeout_signal, true, buf, result, sizeof(result));
+                r = udev_event_spawn(event, timeout_usec, timeout_signal, true, buf, result, sizeof(result), NULL);
                 if (r != 0) {
                         if (r < 0)
                                 log_rule_warning_errno(dev, rules, r, "Failed to execute \"%s\": %m", buf);
@@ -1721,8 +1766,15 @@
         case TK_M_IMPORT_FILE: {
                 _cleanup_fclose_ FILE *f = NULL;
                 char buf[UDEV_PATH_SIZE];
+                bool truncated;
 
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_debug(dev, rules, "The file name '%s' to be imported is truncated while substituting into '%s', "
+                                       "assuming the IMPORT key does not match.", buf, token->value);
+                        return false;
+                }
+
                 log_rule_debug(dev, rules, "Importing properties from '%s'", buf);
 
                 f = fopen(buf, "re");
@@ -1767,12 +1819,19 @@
         }
         case TK_M_IMPORT_PROGRAM: {
                 _cleanup_strv_free_ char **lines = NULL;
-                char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE], **line;
+                char buf[UDEV_LINE_SIZE], result[UDEV_LINE_SIZE];
+                bool truncated;
 
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_debug(dev, rules, "The command '%s' is truncated while substituting into '%s', "
+                                       "assuming the IMPORT key does not match.", buf, token->value);
+                        return false;
+                }
+
                 log_rule_debug(dev, rules, "Importing properties from results of '%s'", buf);
 
-                r = udev_event_spawn(event, timeout_usec, timeout_signal, true, buf, result, sizeof result);
+                r = udev_event_spawn(event, timeout_usec, timeout_signal, true, buf, result, sizeof result, &truncated);
                 if (r != 0) {
                         if (r < 0)
                                 log_rule_warning_errno(dev, rules, r, "Failed to execute '%s', ignoring: %m", buf);
@@ -1781,10 +1840,26 @@
                         return token->op == OP_NOMATCH;
                 }
 
+                if (truncated) {
+                        bool found = false;
+
+                        /* Drop the last line. */
+                        for (char *p = PTR_SUB1(buf + strlen(buf), buf); p; p = PTR_SUB1(p, buf))
+                                if (strchr(NEWLINE, *p)) {
+                                        *p = '\0';
+                                        found = true;
+                                } else if (found)
+                                        break;
+                }
+
                 r = strv_split_newlines_full(&lines, result, EXTRACT_RETAIN_ESCAPE);
-                if (r < 0)
+                if (r == -ENOMEM)
+                        return log_oom();
+                if (r < 0) {
                         log_rule_warning_errno(dev, rules, r,
                                                "Failed to extract lines from result of command \"%s\", ignoring: %m", buf);
+                        return false;
+                }
 
                 STRV_FOREACH(line, lines) {
                         char *key, *value;
@@ -1812,7 +1887,8 @@
                 UdevBuiltinCommand cmd = PTR_TO_UDEV_BUILTIN_CMD(token->data);
                 assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX);
                 unsigned mask = 1U << (int) cmd;
-                char buf[UDEV_PATH_SIZE];
+                char buf[UDEV_LINE_SIZE];
+                bool truncated;
 
                 if (udev_builtin_run_once(cmd)) {
                         /* check if we ran already */
@@ -1826,10 +1902,16 @@
                         event->builtin_run |= mask;
                 }
 
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_debug(dev, rules, "The builtin command '%s' is truncated while substituting into '%s', "
+                                       "assuming the IMPORT key does not match", buf, token->value);
+                        return false;
+                }
+
                 log_rule_debug(dev, rules, "Importing properties from results of builtin command '%s'", buf);
 
-                r = udev_builtin_run(dev, cmd, buf, false);
+                r = udev_builtin_run(dev, &event->rtnl, cmd, buf, false);
                 if (r < 0) {
                         /* remember failure */
                         log_rule_debug_errno(dev, rules, r, "Failed to run builtin '%s': %m", buf);
@@ -1875,8 +1957,15 @@
         }
         case TK_M_IMPORT_PARENT: {
                 char buf[UDEV_PATH_SIZE];
+                bool truncated;
 
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_debug(dev, rules, "The property name '%s' is truncated while substituting into '%s', "
+                                       "assuming the IMPORT key does not match.", buf, token->value);
+                        return false;
+                }
+
                 r = import_parent_into_properties(dev, buf);
                 if (r < 0)
                         return log_rule_error_errno(dev, rules, r,
@@ -1925,13 +2014,20 @@
         case TK_A_OWNER: {
                 char owner[UDEV_NAME_SIZE];
                 const char *ow = owner;
+                bool truncated;
 
                 if (event->owner_final)
                         break;
                 if (token->op == OP_ASSIGN_FINAL)
                         event->owner_final = true;
 
-                (void) udev_event_apply_format(event, token->value, owner, sizeof(owner), false);
+                (void) udev_event_apply_format(event, token->value, owner, sizeof(owner), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The user name '%s' is truncated while substituting into '%s', "
+                                         "refusing to apply the OWNER key.", owner, token->value);
+                        break;
+                }
+
                 r = get_user_creds(&ow, &event->uid, NULL, NULL, NULL, USER_CREDS_ALLOW_MISSING);
                 if (r < 0)
                         log_unknown_owner(dev, rules, r, "user", owner);
@@ -1942,13 +2038,20 @@
         case TK_A_GROUP: {
                 char group[UDEV_NAME_SIZE];
                 const char *gr = group;
+                bool truncated;
 
                 if (event->group_final)
                         break;
                 if (token->op == OP_ASSIGN_FINAL)
                         event->group_final = true;
 
-                (void) udev_event_apply_format(event, token->value, group, sizeof(group), false);
+                (void) udev_event_apply_format(event, token->value, group, sizeof(group), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The group name '%s' is truncated while substituting into '%s', "
+                                         "refusing to apply the GROUP key.", group, token->value);
+                        break;
+                }
+
                 r = get_group_creds(&gr, &event->gid, USER_CREDS_ALLOW_MISSING);
                 if (r < 0)
                         log_unknown_owner(dev, rules, r, "group", group);
@@ -1958,13 +2061,20 @@
         }
         case TK_A_MODE: {
                 char mode_str[UDEV_NAME_SIZE];
+                bool truncated;
 
                 if (event->mode_final)
                         break;
                 if (token->op == OP_ASSIGN_FINAL)
                         event->mode_final = true;
 
-                (void) udev_event_apply_format(event, token->value, mode_str, sizeof(mode_str), false);
+                (void) udev_event_apply_format(event, token->value, mode_str, sizeof(mode_str), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The mode '%s' is truncated while substituting into %s, "
+                                         "refusing to apply the MODE key.", mode_str, token->value);
+                        break;
+                }
+
                 r = parse_mode(mode_str, &event->mode);
                 if (r < 0)
                         log_rule_error_errno(dev, rules, r, "Failed to parse mode '%s', ignoring: %m", mode_str);
@@ -2005,12 +2115,19 @@
         case TK_A_SECLABEL: {
                 _cleanup_free_ char *name = NULL, *label = NULL;
                 char label_str[UDEV_LINE_SIZE] = {};
+                bool truncated;
 
                 name = strdup(token->data);
                 if (!name)
                         return log_oom();
 
-                (void) udev_event_apply_format(event, token->value, label_str, sizeof(label_str), false);
+                (void) udev_event_apply_format(event, token->value, label_str, sizeof(label_str), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The security label '%s' is truncated while substituting into '%s', "
+                                         "refusing to apply the SECLABEL key.", label_str, token->value);
+                        break;
+                }
+
                 if (!isempty(label_str))
                         label = strdup(label_str);
                 else
@@ -2025,7 +2142,7 @@
                 if (r == -ENOMEM)
                         return log_oom();
                 if (r < 0)
-                        return log_rule_error_errno(dev, rules, r, "Failed to store SECLABEL{%s}='%s': %m", name, label);;
+                        return log_rule_error_errno(dev, rules, r, "Failed to store SECLABEL{%s}='%s': %m", name, label);
 
                 log_rule_debug(dev, rules, "SECLABEL{%s}='%s'", name, label);
 
@@ -2037,6 +2154,7 @@
                 const char *val, *name = token->data;
                 char value_new[UDEV_NAME_SIZE], *p = value_new;
                 size_t count, l = sizeof(value_new);
+                bool truncated;
 
                 if (isempty(token->value)) {
                         if (token->op == OP_ADD)
@@ -2048,10 +2166,22 @@
                 }
 
                 if (token->op == OP_ADD &&
-                    sd_device_get_property_value(dev, name, &val) >= 0)
-                        l = strpcpyl(&p, l, val, " ", NULL);
+                    sd_device_get_property_value(dev, name, &val) >= 0) {
+                        l = strpcpyl_full(&p, l, &truncated, val, " ", NULL);
+                        if (truncated) {
+                                log_rule_warning(dev, rules, "The buffer for the property '%s' is full, "
+                                                 "refusing to append the new value '%s'.", name, token->value);
+                                break;
+                        }
+                }
 
-                (void) udev_event_apply_format(event, token->value, p, l, false);
+                (void) udev_event_apply_format(event, token->value, p, l, false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The property value '%s' is truncated while substituting into '%s', "
+                                         "refusing to add property '%s'.", p, token->value, name);
+                        break;
+                }
+
                 if (event->esc == ESCAPE_REPLACE) {
                         count = udev_replace_chars(p, NULL);
                         if (count > 0)
@@ -2066,8 +2196,16 @@
         }
         case TK_A_TAG: {
                 char buf[UDEV_PATH_SIZE];
+                bool truncated;
 
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The tag name '%s' is truncated while substituting into '%s',"
+                                         "refusing to %s the tag.", buf, token->value,
+                                         token->op == OP_REMOVE ? "remove" : "add");
+                        break;
+                }
+
                 if (token->op == OP_ASSIGN)
                         device_cleanup_tags(dev);
 
@@ -2086,6 +2224,7 @@
         }
         case TK_A_NAME: {
                 char buf[UDEV_PATH_SIZE];
+                bool truncated;
                 size_t count;
 
                 if (event->name_final)
@@ -2100,7 +2239,13 @@
                         break;
                 }
 
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The network interface name '%s' is truncated while substituting into '%s', "
+                                         "refusing to set the name.", buf, token->value);
+                        break;
+                }
+
                 if (IN_SET(event->esc, ESCAPE_UNSET, ESCAPE_REPLACE)) {
                         if (naming_scheme_has(NAMING_REPLACE_STRICTLY))
                                 count = udev_replace_ifname(buf);
@@ -2119,6 +2264,7 @@
         }
         case TK_A_DEVLINK: {
                 char buf[UDEV_PATH_SIZE], *p;
+                bool truncated;
                 size_t count;
 
                 if (event->devlink_final)
@@ -2131,7 +2277,13 @@
                         device_cleanup_devlinks(dev);
 
                 /* allow multiple symlinks separated by spaces */
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), event->esc != ESCAPE_NONE);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), event->esc != ESCAPE_NONE, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The symbolic link path '%s' is truncated while substituting into '%s', "
+                                         "refusing to add the device symbolic link.", buf, token->value);
+                        break;
+                }
+
                 if (event->esc == ESCAPE_UNSET)
                         count = udev_replace_chars(buf, "/ ");
                 else if (event->esc == ESCAPE_REPLACE)
@@ -2152,12 +2304,21 @@
                                 next = skip_leading_chars(next, NULL);
                         }
 
-                        strscpyl(filename, sizeof(filename), "/dev/", p, NULL);
-                        r = device_add_devlink(dev, filename);
-                        if (r < 0)
-                                return log_rule_error_errno(dev, rules, r, "Failed to add devlink '%s': %m", filename);
+                        strscpyl_full(filename, sizeof(filename), &truncated, "/dev/", p, NULL);
+                        if (truncated)
+                                continue;
 
-                        log_rule_debug(dev, rules, "LINK '%s'", p);
+                        if (token->op == OP_REMOVE) {
+                                device_remove_devlink(dev, filename);
+                                log_rule_debug(dev, rules, "Dropped SYMLINK '%s'", p);
+                        } else {
+                                r = device_add_devlink(dev, filename);
+                                if (r < 0)
+                                        return log_rule_error_errno(dev, rules, r, "Failed to add devlink '%s': %m", filename);
+
+                                log_rule_debug(dev, rules, "Added SYMLINK '%s'", p);
+                        }
+
                         p = next;
                 }
                 break;
@@ -2165,17 +2326,30 @@
         case TK_A_ATTR: {
                 char buf[UDEV_PATH_SIZE], value[UDEV_NAME_SIZE];
                 const char *val, *key_name = token->data;
+                bool truncated;
 
                 if (udev_resolve_subsys_kernel(key_name, buf, sizeof(buf), false) < 0 &&
-                    sd_device_get_syspath(dev, &val) >= 0)
-                        strscpyl(buf, sizeof(buf), val, "/", key_name, NULL);
+                    sd_device_get_syspath(dev, &val) >= 0) {
+                        strscpyl_full(buf, sizeof(buf), &truncated, val, "/", key_name, NULL);
+                        if (truncated) {
+                                log_rule_warning(dev, rules,
+                                                 "The path to the attribute '%s/%s' is too long, refusing to set the attribute.",
+                                                 val, key_name);
+                                break;
+                        }
+                }
 
                 r = attr_subst_subdir(buf);
                 if (r < 0) {
                         log_rule_error_errno(dev, rules, r, "Could not find file matches '%s', ignoring: %m", buf);
                         break;
                 }
-                (void) udev_event_apply_format(event, token->value, value, sizeof(value), false);
+                (void) udev_event_apply_format(event, token->value, value, sizeof(value), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The attribute value '%s' is truncated while substituting into '%s', "
+                                         "refusing to set the attribute '%s'", value, token->value, buf);
+                        break;
+                }
 
                 log_rule_debug(dev, rules, "ATTR '%s' writing '%s'", buf, value);
                 r = write_string_file(buf, value,
@@ -2189,9 +2363,22 @@
         }
         case TK_A_SYSCTL: {
                 char buf[UDEV_PATH_SIZE], value[UDEV_NAME_SIZE];
+                bool truncated;
 
-                (void) udev_event_apply_format(event, token->data, buf, sizeof(buf), false);
-                (void) udev_event_apply_format(event, token->value, value, sizeof(value), false);
+                (void) udev_event_apply_format(event, token->data, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The sysctl entry name '%s' is truncated while substituting into '%s', "
+                                         "refusing to set the sysctl entry.", buf, (const char*) token->data);
+                        break;
+                }
+
+                (void) udev_event_apply_format(event, token->value, value, sizeof(value), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The sysctl value '%s' is truncated while substituting into '%s', "
+                                         "refusing to set the sysctl entry '%s'", value, token->value, buf);
+                        break;
+                }
+
                 sysctl_normalize(buf);
                 log_rule_debug(dev, rules, "SYSCTL '%s' writing '%s'", buf, value);
                 r = sysctl_write(buf, value);
@@ -2202,7 +2389,8 @@
         case TK_A_RUN_BUILTIN:
         case TK_A_RUN_PROGRAM: {
                 _cleanup_free_ char *cmd = NULL;
-                char buf[UDEV_PATH_SIZE];
+                char buf[UDEV_LINE_SIZE];
+                bool truncated;
 
                 if (event->run_final)
                         break;
@@ -2212,7 +2400,12 @@
                 if (IN_SET(token->op, OP_ASSIGN, OP_ASSIGN_FINAL))
                         ordered_hashmap_clear_free_key(event->run_list);
 
-                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false, &truncated);
+                if (truncated) {
+                        log_rule_warning(dev, rules, "The command '%s' is truncated while substituting into '%s', "
+                                         "refusing to invoke the command.", buf, token->value);
+                        break;
+                }
 
                 cmd = strdup(buf);
                 if (!cmd)
@@ -2233,7 +2426,7 @@
                 /* do nothing for events. */
                 break;
         default:
-                assert_not_reached("Invalid token type");
+                assert_not_reached();
         }
 
         return true;
@@ -2252,21 +2445,28 @@
         UdevRuleToken *head;
         int r;
 
-        line = rules->current_file->current_line;
-        head = rules->current_file->current_line->current_token;
-        event->dev_parent = event->dev;
+        assert(rules);
+        assert(rules->current_file);
+        assert(event);
+
+        line = ASSERT_PTR(rules->current_file->current_line);
+        head = ASSERT_PTR(rules->current_file->current_line->current_token);
+        event->dev_parent = ASSERT_PTR(event->dev);
+
         for (;;) {
-                LIST_FOREACH(tokens, line->current_token, head) {
-                        if (!token_is_for_parents(line->current_token))
+                LIST_FOREACH(tokens, token, head) {
+                        if (!token_is_for_parents(token))
                                 return true; /* All parent tokens match. */
+
+                        line->current_token = token;
                         r = udev_rule_apply_token_to_event(rules, event->dev_parent, event, 0, timeout_signal, NULL);
                         if (r < 0)
                                 return r;
                         if (r == 0)
                                 break;
                 }
-                if (!line->current_token)
-                        /* All parent tokens match. But no assign tokens in the line. Hmm... */
+                if (r > 0)
+                        /* All parent tokens match, and no more token (except for GOTO) in the line. */
                         return true;
 
                 if (sd_device_get_parent(event->dev_parent, &event->dev_parent) < 0) {
@@ -2286,7 +2486,6 @@
 
         UdevRuleLine *line = rules->current_file->current_line;
         UdevRuleLineType mask = LINE_HAS_GOTO | LINE_UPDATE_SOMETHING;
-        UdevRuleToken *token, *next_token;
         bool parents_done = false;
         sd_device_action_t action;
         int r;
@@ -2310,7 +2509,7 @@
 
         DEVICE_TRACE_POINT(rules_apply_line, event->dev, line->rule_file->filename, line->line_number);
 
-        LIST_FOREACH_SAFE(tokens, token, next_token, line->tokens) {
+        LIST_FOREACH(tokens, token, line->tokens) {
                 line->current_token = token;
 
                 if (token_is_for_parents(token)) {
@@ -2343,8 +2542,6 @@
                 int timeout_signal,
                 Hashmap *properties_list) {
 
-        UdevRuleFile *file;
-        UdevRuleLine *next_line;
         int r;
 
         assert(rules);
@@ -2352,7 +2549,8 @@
 
         LIST_FOREACH(rule_files, file, rules->rule_files) {
                 rules->current_file = file;
-                LIST_FOREACH_SAFE(rule_lines, file->current_line, next_line, file->rule_lines) {
+                LIST_FOREACH_WITH_NEXT(rule_lines, line, next_line, file->rule_lines) {
+                        file->current_line = line;
                         r = udev_rule_apply_line_to_event(rules, event, timeout_usec, timeout_signal, properties_list, &next_line);
                         if (r < 0)
                                 return r;
@@ -2362,75 +2560,7 @@
         return 0;
 }
 
-static int apply_static_dev_perms(const char *devnode, uid_t uid, gid_t gid, mode_t mode, char **tags) {
-        char device_node[UDEV_PATH_SIZE], tags_dir[UDEV_PATH_SIZE], tag_symlink[UDEV_PATH_SIZE];
-        _cleanup_free_ char *unescaped_filename = NULL;
-        struct stat stats;
-        char **t;
-        int r;
-
-        assert(devnode);
-
-        if (uid == UID_INVALID && gid == GID_INVALID && mode == MODE_INVALID && !tags)
-                return 0;
-
-        strscpyl(device_node, sizeof(device_node), "/dev/", devnode, NULL);
-        if (stat(device_node, &stats) < 0) {
-                if (errno != ENOENT)
-                        return log_error_errno(errno, "Failed to stat %s: %m", device_node);
-                return 0;
-        }
-
-        if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode)) {
-                log_warning("%s is neither block nor character device, ignoring.", device_node);
-                return 0;
-        }
-
-        if (!strv_isempty(tags)) {
-                unescaped_filename = xescape(devnode, "/.");
-                if (!unescaped_filename)
-                        return log_oom();
-        }
-
-        /* export the tags to a directory as symlinks, allowing otherwise dead nodes to be tagged */
-        STRV_FOREACH(t, tags) {
-                strscpyl(tags_dir, sizeof(tags_dir), "/run/udev/static_node-tags/", *t, "/", NULL);
-                r = mkdir_p(tags_dir, 0755);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to create %s: %m", tags_dir);
-
-                strscpyl(tag_symlink, sizeof(tag_symlink), tags_dir, unescaped_filename, NULL);
-                r = symlink(device_node, tag_symlink);
-                if (r < 0 && errno != EEXIST)
-                        return log_error_errno(errno, "Failed to create symlink %s -> %s: %m",
-                                               tag_symlink, device_node);
-        }
-
-        /* don't touch the permissions if only the tags were set */
-        if (uid == UID_INVALID && gid == GID_INVALID && mode == MODE_INVALID)
-                return 0;
-
-        if (mode == MODE_INVALID)
-                mode = gid_is_valid(gid) ? 0660 : 0600;
-        if (!uid_is_valid(uid))
-                uid = 0;
-        if (!gid_is_valid(gid))
-                gid = 0;
-
-        r = chmod_and_chown(device_node, mode, uid, gid);
-        if (r == -ENOENT)
-                return 0;
-        if (r < 0)
-                return log_error_errno(r, "Failed to chown '%s' %u %u: %m", device_node, uid, gid);
-        else
-                log_debug("chown '%s' %u:%u with mode %#o", device_node, uid, gid, mode);
-
-        (void) utimensat(AT_FDCWD, device_node, NULL, 0);
-        return 0;
-}
-
 static int udev_rule_line_apply_static_dev_perms(UdevRuleLine *rule_line) {
-        UdevRuleToken *token;
         _cleanup_strv_free_ char **tags = NULL;
         uid_t uid = UID_INVALID;
         gid_t gid = GID_INVALID;
@@ -2454,7 +2584,7 @@
                         if (r < 0)
                                 return log_oom();
                 } else if (token->type == TK_A_OPTIONS_STATIC_NODE) {
-                        r = apply_static_dev_perms(token->value, uid, gid, mode, tags);
+                        r = static_node_apply_permissions(token->value, mode, uid, gid, tags);
                         if (r < 0)
                                 return r;
                 }
@@ -2463,8 +2593,6 @@
 }
 
 int udev_rules_apply_static_dev_perms(UdevRules *rules) {
-        UdevRuleFile *file;
-        UdevRuleLine *line;
         int r;
 
         assert(rules);
diff --git a/src/udev/udev-rules.h b/src/udev/udev-rules.h
index d11297d..860fe7c 100644
--- a/src/udev/udev-rules.h
+++ b/src/udev/udev-rules.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 #pragma once
 
+#include "alloc-util.h"
 #include "hashmap.h"
 #include "time-util.h"
 #include "udev-util.h"
@@ -21,8 +22,9 @@
 int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing);
 UdevRules *udev_rules_free(UdevRules *rules);
 DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRules*, udev_rules_free);
+#define udev_rules_free_and_replace(a, b) free_and_replace_full(a, b, udev_rules_free)
 
-bool udev_rules_check_timestamp(UdevRules *rules);
+bool udev_rules_should_reload(UdevRules *rules);
 int udev_rules_apply_to_event(UdevRules *rules, UdevEvent *event,
                               usec_t timeout_usec,
                               int timeout_signal,
diff --git a/src/udev/udev-watch.c b/src/udev/udev-watch.c
index 6032dfb..d00226c 100644
--- a/src/udev/udev-watch.c
+++ b/src/udev/udev-watch.c
@@ -10,98 +10,227 @@
 #include "device-private.h"
 #include "device-util.h"
 #include "dirent-util.h"
+#include "fd-util.h"
 #include "fs-util.h"
+#include "mkdir.h"
 #include "parse-util.h"
+#include "rm-rf.h"
+#include "stdio-util.h"
+#include "string-util.h"
+#include "udev-util.h"
 #include "udev-watch.h"
 
+int device_new_from_watch_handle_at(sd_device **ret, int dirfd, int wd) {
+        char path_wd[STRLEN("/run/udev/watch/") + DECIMAL_STR_MAX(int)];
+        _cleanup_free_ char *id = NULL;
+        int r;
+
+        assert(ret);
+
+        if (wd < 0)
+                return -EBADF;
+
+        if (dirfd >= 0) {
+                xsprintf(path_wd, "%d", wd);
+                r = readlinkat_malloc(dirfd, path_wd, &id);
+        } else {
+                xsprintf(path_wd, "/run/udev/watch/%d", wd);
+                r = readlink_malloc(path_wd, &id);
+        }
+        if (r < 0)
+                return r;
+
+        return sd_device_new_from_device_id(ret, id);
+}
+
 int udev_watch_restore(int inotify_fd) {
-        struct dirent *ent;
-        DIR *dir;
+        _cleanup_closedir_ DIR *dir = NULL;
         int r;
 
         /* Move any old watches directory out of the way, and then restore the watches. */
 
         assert(inotify_fd >= 0);
 
-        if (rename("/run/udev/watch", "/run/udev/watch.old") < 0) {
-                if (errno != ENOENT)
-                        return log_warning_errno(errno, "Failed to move watches directory /run/udev/watch. "
-                                                 "Old watches will not be restored: %m");
+        rm_rf("/run/udev/watch.old", REMOVE_ROOT);
 
-                return 0;
+        if (rename("/run/udev/watch", "/run/udev/watch.old") < 0) {
+                if (errno == ENOENT)
+                        return 0;
+
+                r = log_warning_errno(errno,
+                                      "Failed to move watches directory '/run/udev/watch/'. "
+                                      "Old watches will not be restored: %m");
+                goto finalize;
         }
 
         dir = opendir("/run/udev/watch.old");
-        if (!dir)
-                return log_warning_errno(errno, "Failed to open old watches directory /run/udev/watch.old. "
-                                         "Old watches will not be restored: %m");
+        if (!dir) {
+                r = log_warning_errno(errno,
+                                      "Failed to open old watches directory '/run/udev/watch.old/'. "
+                                      "Old watches will not be restored: %m");
+                goto finalize;
+        }
 
-        FOREACH_DIRENT_ALL(ent, dir, break) {
+        FOREACH_DIRENT_ALL(de, dir, break) {
                 _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
                 int wd;
 
-                if (ent->d_name[0] == '.')
+                /* For backward compatibility, read symlink from watch handle to device ID. This is necessary
+                 * when udevd is restarted after upgrading from v248 or older. The new format (ID -> wd) was
+                 * introduced by e7f781e473f5119bf9246208a6de9f6b76a39c5d (v249). */
+
+                if (dot_or_dot_dot(de->d_name))
                         continue;
 
-                /* For backward compatibility, read symlink from watch handle to device id, and ignore
-                 * the opposite direction symlink. */
-
-                if (safe_atoi(ent->d_name, &wd) < 0)
-                        goto unlink;
+                if (safe_atoi(de->d_name, &wd) < 0)
+                        continue;
 
                 r = device_new_from_watch_handle_at(&dev, dirfd(dir), wd);
                 if (r < 0) {
                         log_full_errno(r == -ENODEV ? LOG_DEBUG : LOG_WARNING, r,
-                                       "Failed to create sd_device object from saved watch handle '%s', ignoring: %m",
-                                       ent->d_name);
-                        goto unlink;
+                                       "Failed to create sd_device object from saved watch handle '%i', ignoring: %m",
+                                       wd);
+                        continue;
                 }
 
-                log_device_debug(dev, "Restoring old watch");
                 (void) udev_watch_begin(inotify_fd, dev);
-unlink:
-                (void) unlinkat(dirfd(dir), ent->d_name, 0);
         }
 
-        (void) closedir(dir);
-        (void) rmdir("/run/udev/watch.old");
+        r = 0;
 
-        return 0;
+finalize:
+        (void) rm_rf("/run/udev/watch.old", REMOVE_ROOT);
+        return r;
+}
+
+static int udev_watch_clear(sd_device *dev, int dirfd, int *ret_wd) {
+        _cleanup_free_ char *wd_str = NULL, *buf = NULL;
+        const char *id;
+        int wd = -1, r;
+
+        assert(dev);
+        assert(dirfd >= 0);
+
+        r = device_get_device_id(dev, &id);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to get device ID: %m");
+
+        /* 1. read symlink ID -> wd */
+        r = readlinkat_malloc(dirfd, id, &wd_str);
+        if (r == -ENOENT) {
+                if (ret_wd)
+                        *ret_wd = -1;
+                return 0;
+        }
+        if (r < 0) {
+                log_device_debug_errno(dev, r, "Failed to read symlink '/run/udev/watch/%s': %m", id);
+                goto finalize;
+        }
+
+        r = safe_atoi(wd_str, &wd);
+        if (r < 0) {
+                log_device_debug_errno(dev, r, "Failed to parse watch handle from symlink '/run/udev/watch/%s': %m", id);
+                goto finalize;
+        }
+
+        if (wd < 0) {
+                r = log_device_debug_errno(dev, SYNTHETIC_ERRNO(EBADF), "Invalid watch handle %i.", wd);
+                goto finalize;
+        }
+
+        /* 2. read symlink wd -> ID */
+        r = readlinkat_malloc(dirfd, wd_str, &buf);
+        if (r < 0) {
+                log_device_debug_errno(dev, r, "Failed to read symlink '/run/udev/watch/%s': %m", wd_str);
+                goto finalize;
+        }
+
+        /* 3. check if the symlink wd -> ID is owned by the device. */
+        if (!streq(buf, id)) {
+                r = log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENOENT),
+                                           "Symlink '/run/udev/watch/%s' is owned by another device '%s'.", wd_str, buf);
+                goto finalize;
+        }
+
+        /* 4. remove symlink wd -> ID.
+         * In the above, we already confirmed that the symlink is owned by us. Hence, no other workers remove
+         * the symlink and cannot create a new symlink with the same filename but to a different ID. Hence,
+         * the removal below is safe even the steps in this function are not atomic. */
+        if (unlinkat(dirfd, wd_str, 0) < 0 && errno != ENOENT)
+                log_device_debug_errno(dev, errno, "Failed to remove '/run/udev/watch/%s', ignoring: %m", wd_str);
+
+        if (ret_wd)
+                *ret_wd = wd;
+        r = 0;
+
+finalize:
+        /* 5. remove symlink ID -> wd.
+         * The file is always owned by the device. Hence, it is safe to remove it unconditionally. */
+        if (unlinkat(dirfd, id, 0) < 0 && errno != ENOENT)
+                log_device_debug_errno(dev, errno, "Failed to remove '/run/udev/watch/%s': %m", id);
+
+        return r;
 }
 
 int udev_watch_begin(int inotify_fd, sd_device *dev) {
-        const char *devnode;
+        char wd_str[DECIMAL_STR_MAX(int)];
+        _cleanup_close_ int dirfd = -EBADF;
+        const char *devnode, *id;
         int wd, r;
 
         assert(inotify_fd >= 0);
         assert(dev);
 
+        if (device_for_action(dev, SD_DEVICE_REMOVE))
+                return 0;
+
         r = sd_device_get_devname(dev, &devnode);
         if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get device name: %m");
+                return log_device_debug_errno(dev, r, "Failed to get device node: %m");
 
+        r = device_get_device_id(dev, &id);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to get device ID: %m");
+
+        r = dirfd = open_mkdir_at(AT_FDCWD, "/run/udev/watch", O_CLOEXEC | O_RDONLY, 0755);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to create and open '/run/udev/watch/': %m");
+
+        /* 1. Clear old symlinks */
+        (void) udev_watch_clear(dev, dirfd, NULL);
+
+        /* 2. Add inotify watch */
         log_device_debug(dev, "Adding watch on '%s'", devnode);
         wd = inotify_add_watch(inotify_fd, devnode, IN_CLOSE_WRITE);
-        if (wd < 0) {
-                bool ignore = errno == ENOENT;
+        if (wd < 0)
+                return log_device_debug_errno(dev, errno, "Failed to watch device node '%s': %m", devnode);
 
-                r = log_device_full_errno(dev, ignore ? LOG_DEBUG : LOG_WARNING, errno,
-                                          "Failed to add device '%s' to watch%s: %m",
-                                          devnode, ignore ? ", ignoring" : "");
+        xsprintf(wd_str, "%d", wd);
 
-                (void) device_set_watch_handle(dev, -1);
-                return ignore ? 0 : r;
+        /* 3. Create new symlinks */
+        if (symlinkat(wd_str, dirfd, id) < 0) {
+                r = log_device_debug_errno(dev, errno, "Failed to create symlink '/run/udev/watch/%s' to '%s': %m", id, wd_str);
+                goto on_failure;
         }
 
-        r = device_set_watch_handle(dev, wd);
-        if (r < 0)
-                return log_device_warning_errno(dev, r, "Failed to save watch handle in /run/udev/watch: %m");
+        if (symlinkat(id, dirfd, wd_str) < 0) {
+                /* Possibly, the watch handle is previously assigned to another device, and udev_watch_end()
+                 * is not called for the device yet. */
+                r = log_device_debug_errno(dev, errno, "Failed to create symlink '/run/udev/watch/%s' to '%s': %m", wd_str, id);
+                goto on_failure;
+        }
 
         return 0;
+
+on_failure:
+        (void) unlinkat(dirfd, id, 0);
+        (void) inotify_rm_watch(inotify_fd, wd);
+        return r;
 }
 
 int udev_watch_end(int inotify_fd, sd_device *dev) {
-        int wd;
+        _cleanup_close_ int dirfd = -EBADF;
+        int wd, r;
 
         assert(dev);
 
@@ -112,14 +241,20 @@
         if (sd_device_get_devname(dev, NULL) < 0)
                 return 0;
 
-        wd = device_get_watch_handle(dev);
-        if (wd < 0)
-                log_device_debug_errno(dev, wd, "Failed to get watch handle, ignoring: %m");
-        else {
-                log_device_debug(dev, "Removing watch");
-                (void) inotify_rm_watch(inotify_fd, wd);
-        }
-        (void) device_set_watch_handle(dev, -1);
+        dirfd = RET_NERRNO(open("/run/udev/watch", O_CLOEXEC | O_DIRECTORY | O_NOFOLLOW | O_RDONLY));
+        if (dirfd == -ENOENT)
+                return 0;
+        if (dirfd < 0)
+                return log_device_debug_errno(dev, dirfd, "Failed to open '/run/udev/watch/': %m");
+
+        /* First, clear symlinks. */
+        r = udev_watch_clear(dev, dirfd, &wd);
+        if (r < 0)
+                return r;
+
+        /* Then, remove inotify watch. */
+        log_device_debug(dev, "Removing watch handle %i.", wd);
+        (void) inotify_rm_watch(inotify_fd, wd);
 
         return 0;
 }
diff --git a/src/udev/udev-watch.h b/src/udev/udev-watch.h
index d211d99..c454dee 100644
--- a/src/udev/udev-watch.h
+++ b/src/udev/udev-watch.h
@@ -3,6 +3,11 @@
 
 #include "sd-device.h"
 
+int device_new_from_watch_handle_at(sd_device **ret, int dirfd, int wd);
+static inline int device_new_from_watch_handle(sd_device **ret, int wd) {
+        return device_new_from_watch_handle_at(ret, -1, wd);
+}
+
 int udev_watch_restore(int inotify_fd);
 int udev_watch_begin(int inotify_fd, sd_device *dev);
 int udev_watch_end(int inotify_fd, sd_device *dev);
diff --git a/src/udev/udevadm-control.c b/src/udev/udevadm-control.c
index 437ac9b..8dc3a8d 100644
--- a/src/udev/udevadm-control.c
+++ b/src/udev/udevadm-control.c
@@ -25,7 +25,6 @@
 #include "time-util.h"
 #include "udevadm.h"
 #include "udev-ctrl.h"
-#include "util.h"
 #include "virt.h"
 
 static int help(void) {
@@ -48,7 +47,7 @@
 }
 
 int control_main(int argc, char *argv[], void *userdata) {
-        _cleanup_(udev_ctrl_unrefp) struct udev_ctrl *uctrl = NULL;
+        _cleanup_(udev_ctrl_unrefp) UdevCtrl *uctrl = NULL;
         usec_t timeout = 60 * USEC_PER_SEC;
         int c, r;
 
@@ -171,7 +170,7 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option.");
+                        assert_not_reached();
                 }
 
         if (optind < argc)
diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
index 9414269..2f5429f 100644
--- a/src/udev/udevadm-hwdb.c
+++ b/src/udev/udevadm-hwdb.c
@@ -4,7 +4,6 @@
 
 #include "hwdb-util.h"
 #include "udevadm.h"
-#include "util.h"
 
 static const char *arg_test = NULL;
 static const char *arg_root = NULL;
@@ -48,7 +47,7 @@
         int c;
 
         while ((c = getopt_long(argc, argv, "ust:r:Vh", options, NULL)) >= 0)
-                switch(c) {
+                switch (c) {
                 case 'u':
                         arg_update = true;
                         break;
@@ -71,7 +70,7 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         return 1;
@@ -88,6 +87,8 @@
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Either --update or --test must be used.");
 
+        log_notice("udevadm hwdb is deprecated. Use systemd-hwdb instead.");
+
         if (arg_update) {
                 r = hwdb_update(arg_root, arg_hwdb_bin_dir, arg_strict, true);
                 if (r < 0)
@@ -95,7 +96,7 @@
         }
 
         if (arg_test)
-                return hwdb_query(arg_test);
+                return hwdb_query(arg_test, NULL);
 
         return 0;
 }
diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c
index 3314d63..fccc967 100644
--- a/src/udev/udevadm-info.c
+++ b/src/udev/udevadm-info.c
@@ -16,18 +16,25 @@
 #include "device-private.h"
 #include "device-util.h"
 #include "dirent-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
+#include "fileio.h"
+#include "glyph-util.h"
+#include "pager.h"
 #include "sort-util.h"
+#include "static-destruct.h"
 #include "string-table.h"
 #include "string-util.h"
+#include "terminal-util.h"
 #include "udev-util.h"
-#include "udevadm-util.h"
 #include "udevadm.h"
+#include "udevadm-util.h"
 
 typedef enum ActionType {
         ACTION_QUERY,
         ACTION_ATTRIBUTE_WALK,
         ACTION_DEVICE_ID_FILE,
+        ACTION_TREE,
 } ActionType;
 
 typedef enum QueryType {
@@ -38,12 +45,20 @@
         QUERY_ALL,
 } QueryType;
 
+static char **arg_properties = NULL;
 static bool arg_root = false;
 static bool arg_export = false;
+static bool arg_value = false;
 static const char *arg_export_prefix = NULL;
 static usec_t arg_wait_for_initialization_timeout = 0;
+PagerFlags arg_pager_flags = 0;
+
+/* Put a limit on --tree descent level to not exhaust our stack */
+#define TREE_DEPTH_MAX 64
 
 static bool skip_attribute(const char *name) {
+        assert(name);
+
         /* Those are either displayed separately or should not be shown at all. */
         return STR_IN_SET(name,
                           "uevent",
@@ -60,7 +75,12 @@
         const char *value;
 } SysAttr;
 
+STATIC_DESTRUCTOR_REGISTER(arg_properties, strv_freep);
+
 static int sysattr_compare(const SysAttr *a, const SysAttr *b) {
+        assert(a);
+        assert(b);
+
         return strcmp(a->name, b->name);
 }
 
@@ -68,6 +88,9 @@
         _cleanup_free_ SysAttr *sysattrs = NULL;
         const char *name, *value;
         size_t n_items = 0;
+        int r;
+
+        assert(device);
 
         value = NULL;
         (void) sd_device_get_devpath(device, &value);
@@ -91,18 +114,22 @@
                 if (skip_attribute(name))
                         continue;
 
-                if (sd_device_get_sysattr_value(device, name, &value) < 0)
-                        continue;
+                r = sd_device_get_sysattr_value(device, name, &value);
+                if (r >= 0) {
+                        /* skip any values that look like a path */
+                        if (value[0] == '/')
+                                continue;
 
-                /* skip any values that look like a path */
-                if (value[0] == '/')
-                        continue;
+                        /* skip nonprintable attributes */
+                        len = strlen(value);
+                        while (len > 0 && isprint((unsigned char) value[len-1]))
+                                len--;
+                        if (len > 0)
+                                continue;
 
-                /* skip nonprintable attributes */
-                len = strlen(value);
-                while (len > 0 && isprint((unsigned char) value[len-1]))
-                        len--;
-                if (len > 0)
+                } else if (ERRNO_IS_PRIVILEGE(r))
+                        value = "(not readable)";
+                else
                         continue;
 
                 if (!GREEDY_REALLOC(sysattrs, n_items + 1))
@@ -129,6 +156,8 @@
         sd_device *child, *parent;
         int r;
 
+        assert(device);
+
         printf("\n"
                "Udevadm info starts with the device specified by the devpath and then\n"
                "walks up the chain of parent devices. It prints for every device\n"
@@ -150,36 +179,90 @@
         return 0;
 }
 
-static int print_record(sd_device *device) {
-        const char *str, *val;
-        int i;
+static int print_record(sd_device *device, const char *prefix) {
+        const char *str, *val, *subsys;
+        dev_t devnum;
+        uint64_t q;
+        int i, ifi;
 
-        (void) sd_device_get_devpath(device, &str);
-        printf("P: %s\n", str);
+        assert(device);
+
+        prefix = strempty(prefix);
+
+        /* We don't show syspath here, because it's identical to devpath (modulo the "/sys" prefix).
+         *
+         * We don't show action/seqnum here because that only makes sense for records synthesized from
+         * uevents, not for those synthesized from database entries.
+         *
+         * We don't show sysattrs here, because they can be expensive and potentially issue expensive driver
+         * IO.
+         *
+         * Coloring: let's be conservative with coloring. Let's use it to group related fields. Right now:
+         *
+         *     • white for fields that give the device a name
+         *     • green for fields that categorize the device into subsystem/devtype and similar
+         *     • cyan for fields about associated device nodes/symlinks/network interfaces and such
+         *     • magenta for block device diskseq
+         *     • yellow for driver info
+         *     • no color for regular properties */
+
+        assert_se(sd_device_get_devpath(device, &str) >= 0);
+        printf("%sP: %s%s%s\n", prefix, ansi_highlight_white(), str, ansi_normal());
+
+        if (sd_device_get_sysname(device, &str) >= 0)
+                printf("%sM: %s%s%s\n", prefix, ansi_highlight_white(), str, ansi_normal());
+
+        if (sd_device_get_sysnum(device, &str) >= 0)
+                printf("%sR: %s%s%s\n", prefix, ansi_highlight_white(), str, ansi_normal());
+
+        if (sd_device_get_subsystem(device, &subsys) >= 0)
+                printf("%sU: %s%s%s\n", prefix, ansi_highlight_green(), subsys, ansi_normal());
+
+        if (sd_device_get_devtype(device, &str) >= 0)
+                printf("%sT: %s%s%s\n", prefix, ansi_highlight_green(), str, ansi_normal());
+
+        if (sd_device_get_devnum(device, &devnum) >= 0)
+                printf("%sD: %s%c %u:%u%s\n",
+                       prefix,
+                       ansi_highlight_cyan(),
+                       streq_ptr(subsys, "block") ? 'b' : 'c', major(devnum), minor(devnum),
+                       ansi_normal());
+
+        if (sd_device_get_ifindex(device, &ifi) >= 0)
+                printf("%sI: %s%i%s\n", prefix, ansi_highlight_cyan(), ifi, ansi_normal());
 
         if (sd_device_get_devname(device, &str) >= 0) {
                 assert_se(val = path_startswith(str, "/dev/"));
-                printf("N: %s\n", val);
+                printf("%sN: %s%s%s\n", prefix, ansi_highlight_cyan(), val, ansi_normal());
+
+                if (device_get_devlink_priority(device, &i) >= 0)
+                        printf("%sL: %s%i%s\n", prefix, ansi_highlight_cyan(), i, ansi_normal());
+
+                FOREACH_DEVICE_DEVLINK(device, str) {
+                        assert_se(val = path_startswith(str, "/dev/"));
+                        printf("%sS: %s%s%s\n", prefix, ansi_highlight_cyan(), val, ansi_normal());
+                }
         }
 
-        if (device_get_devlink_priority(device, &i) >= 0)
-                printf("L: %i\n", i);
+        if (sd_device_get_diskseq(device, &q) >= 0)
+                printf("%sQ: %s%" PRIu64 "%s\n", prefix, ansi_highlight_magenta(), q, ansi_normal());
 
-        FOREACH_DEVICE_DEVLINK(device, str) {
-                assert_se(val = path_startswith(str, "/dev/"));
-                printf("S: %s\n", val);
-        }
+        if (sd_device_get_driver(device, &str) >= 0)
+                printf("%sV: %s%s%s\n", prefix, ansi_highlight_yellow4(), str, ansi_normal());
 
         FOREACH_DEVICE_PROPERTY(device, str, val)
-                printf("E: %s=%s\n", str, val);
+                printf("%sE: %s=%s\n", prefix, str, val);
 
-        puts("");
+        if (isempty(prefix))
+                puts("");
         return 0;
 }
 
 static int stat_device(const char *name, bool export, const char *prefix) {
         struct stat statbuf;
 
+        assert(name);
+
         if (stat(name, &statbuf) != 0)
                 return -errno;
 
@@ -212,20 +295,20 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to scan devices: %m");
 
+        pager_open(arg_pager_flags);
+
         FOREACH_DEVICE_AND_SUBSYSTEM(e, d)
-                (void) print_record(d);
+                (void) print_record(d, NULL);
 
         return 0;
 }
 
 static void cleanup_dir(DIR *dir, mode_t mask, int depth) {
-        struct dirent *dent;
+        assert(dir);
 
         if (depth <= 0)
                 return;
 
-        assert(dir);
-
         FOREACH_DIRENT_ALL(dent, dir, break) {
                 struct stat stats;
 
@@ -236,11 +319,13 @@
                 if ((stats.st_mode & mask) != 0)
                         continue;
                 if (S_ISDIR(stats.st_mode)) {
-                        _cleanup_closedir_ DIR *dir2 = NULL;
+                        _cleanup_closedir_ DIR *subdir = NULL;
 
-                        dir2 = fdopendir(openat(dirfd(dir), dent->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC));
-                        if (dir2)
-                                cleanup_dir(dir2, mask, depth-1);
+                        subdir = xopendirat(dirfd(dir), dent->d_name, O_NOFOLLOW);
+                        if (!subdir)
+                                log_debug_errno(errno, "Failed to open subdirectory '%s', ignoring: %m", dent->d_name);
+                        else
+                                cleanup_dir(subdir, mask, depth-1);
 
                         (void) unlinkat(dirfd(dir), dent->d_name, AT_REMOVEDIR);
                 } else
@@ -253,40 +338,27 @@
  * entries for devices in /run/udev/data (such as "b8:16"), and removes
  * all files except those that haven't been deleted in /run/udev/data
  * (i.e. they were skipped during db cleanup because of the db_persist flag).
- * Returns true if the directory is empty after cleanup.
  */
-static bool cleanup_dir_after_db_cleanup(DIR *dir, DIR *datadir) {
-        unsigned int kept = 0;
-        struct dirent *dent;
-
-        assert(dir && datadir);
+static void cleanup_dir_after_db_cleanup(DIR *dir, DIR *datadir) {
+        assert(dir);
+        assert(datadir);
 
         FOREACH_DIRENT_ALL(dent, dir, break) {
-                struct stat data_stats, link_stats;
-
                 if (dot_or_dot_dot(dent->d_name))
                         continue;
-                if (fstatat(dirfd(dir), dent->d_name, &link_stats, AT_SYMLINK_NOFOLLOW) < 0) {
-                        if (errno != ENOENT)
-                                kept++;
+
+                if (faccessat(dirfd(datadir), dent->d_name, F_OK, AT_SYMLINK_NOFOLLOW) >= 0)
+                        /* The corresponding udev database file still exists.
+                         * Assuming the parsistent flag is set for the database. */
                         continue;
-                }
 
-                if (fstatat(dirfd(datadir), dent->d_name, &data_stats, 0) < 0)
-                        (void) unlinkat(dirfd(dir), dent->d_name,
-                                        S_ISDIR(link_stats.st_mode) ? AT_REMOVEDIR : 0);
-                else
-                        /* The entry still exists under /run/udev/data */
-                        kept++;
+                (void) unlinkat(dirfd(dir), dent->d_name, 0);
         }
-
-        return kept == 0;
 }
 
 static void cleanup_dirs_after_db_cleanup(DIR *dir, DIR *datadir) {
-        struct dirent *dent;
-
-        assert(dir && datadir);
+        assert(dir);
+        assert(datadir);
 
         FOREACH_DIRENT_ALL(dent, dir, break) {
                 struct stat stats;
@@ -296,18 +368,22 @@
                 if (fstatat(dirfd(dir), dent->d_name, &stats, AT_SYMLINK_NOFOLLOW) < 0)
                         continue;
                 if (S_ISDIR(stats.st_mode)) {
-                        _cleanup_closedir_ DIR *dir2 = NULL;
+                        _cleanup_closedir_ DIR *subdir = NULL;
 
-                        dir2 = fdopendir(openat(dirfd(dir), dent->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC));
-                        if (dir2 && cleanup_dir_after_db_cleanup(dir2, datadir))
-                                (void) unlinkat(dirfd(dir), dent->d_name, AT_REMOVEDIR);
+                        subdir = xopendirat(dirfd(dir), dent->d_name, O_NOFOLLOW);
+                        if (!subdir)
+                                log_debug_errno(errno, "Failed to open subdirectory '%s', ignoring: %m", dent->d_name);
+                        else
+                                cleanup_dir_after_db_cleanup(subdir, datadir);
+
+                        (void) unlinkat(dirfd(dir), dent->d_name, AT_REMOVEDIR);
                 } else
                         (void) unlinkat(dirfd(dir), dent->d_name, 0);
         }
 }
 
 static void cleanup_db(void) {
-        _cleanup_closedir_ DIR *dir1 = NULL, *dir2 = NULL, *dir3 = NULL, *dir4 = NULL, *dir5 = NULL;
+        _cleanup_closedir_ DIR *dir1 = NULL, *dir2 = NULL, *dir3 = NULL, *dir4 = NULL;
 
         dir1 = opendir("/run/udev/data");
         if (dir1)
@@ -325,9 +401,8 @@
         if (dir4)
                 cleanup_dir(dir4, 0, 2);
 
-        dir5 = opendir("/run/udev/watch");
-        if (dir5)
-                cleanup_dir_after_db_cleanup(dir5, dir1);
+        /* Do not remove /run/udev/watch. It will be handled by udevd well on restart.
+         * And should not be removed by external program when udevd is running. */
 }
 
 static int query_device(QueryType query, sd_device* device) {
@@ -335,7 +410,7 @@
 
         assert(device);
 
-        switch(query) {
+        switch (query) {
         case QUERY_NAME: {
                 const char *node;
 
@@ -376,20 +451,27 @@
         case QUERY_PROPERTY: {
                 const char *key, *value;
 
-                FOREACH_DEVICE_PROPERTY(device, key, value)
+                FOREACH_DEVICE_PROPERTY(device, key, value) {
+                        if (arg_properties && !strv_contains(arg_properties, key))
+                                continue;
+
                         if (arg_export)
                                 printf("%s%s='%s'\n", strempty(arg_export_prefix), key, value);
+                        else if (arg_value)
+                                printf("%s\n", value);
                         else
                                 printf("%s=%s\n", key, value);
+                }
+
                 return 0;
         }
 
         case QUERY_ALL:
-                return print_record(device);
-        }
+                return print_record(device, NULL);
 
-        assert_not_reached("unknown query type");
-        return 0;
+        default:
+                assert_not_reached();
+        }
 }
 
 static int help(void) {
@@ -403,50 +485,237 @@
                "       path                     sysfs device path\n"
                "       property                 The device properties\n"
                "       all                      All values\n"
+               "     --property=NAME          Show only properties by this name\n"
+               "     --value                  When showing properties, print only their values\n"
                "  -p --path=SYSPATH           sysfs device path used for query or attribute walk\n"
                "  -n --name=NAME              Node or symlink name used for query or attribute walk\n"
                "  -r --root                   Prepend dev directory to path names\n"
                "  -a --attribute-walk         Print all key matches walking along the chain\n"
                "                              of parent devices\n"
+               "  -t --tree                   Show tree of devices\n"
                "  -d --device-id-of-file=FILE Print major:minor of device containing this file\n"
                "  -x --export                 Export key/value pairs\n"
                "  -P --export-prefix          Export the key name with a prefix\n"
                "  -e --export-db              Export the content of the udev database\n"
                "  -c --cleanup-db             Clean up the udev database\n"
                "  -w --wait-for-initialization[=SECONDS]\n"
-               "                              Wait for device to be initialized\n",
+               "                              Wait for device to be initialized\n"
+               "     --no-pager               Do not pipe output into a pager\n",
                program_invocation_short_name);
 
         return 0;
 }
 
+static int draw_tree(
+                sd_device *parent,
+                sd_device *const array[], size_t n,
+                const char *prefix,
+                unsigned level);
+
+static int output_tree_device(
+                sd_device *device,
+                const char *str,
+                const char *prefix,
+                bool more,
+                sd_device *const array[], size_t n,
+                unsigned level) {
+
+        _cleanup_free_ char *subprefix = NULL, *subsubprefix = NULL;
+
+        assert(device);
+        assert(str);
+
+        prefix = strempty(prefix);
+
+        printf("%s%s%s\n", prefix, special_glyph(more ? SPECIAL_GLYPH_TREE_BRANCH : SPECIAL_GLYPH_TREE_RIGHT), str);
+
+        subprefix = strjoin(prefix, special_glyph(more ? SPECIAL_GLYPH_TREE_VERTICAL : SPECIAL_GLYPH_TREE_SPACE));
+        if (!subprefix)
+                return log_oom();
+
+        subsubprefix = strjoin(subprefix, special_glyph(SPECIAL_GLYPH_VERTICAL_DOTTED), " ");
+        if (!subsubprefix)
+                return log_oom();
+
+        (void) print_record(device, subsubprefix);
+
+        return draw_tree(device, array, n, subprefix, level + 1);
+}
+
+static int draw_tree(
+                sd_device *parent,
+                sd_device *const array[], size_t n,
+                const char *prefix,
+                unsigned level) {
+
+        const char *parent_path;
+        size_t i = 0;
+        int r;
+
+        if (n == 0)
+                return 0;
+
+        assert(array);
+
+        if (parent) {
+                r = sd_device_get_devpath(parent, &parent_path);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get sysfs path of parent device: %m");
+        } else
+                parent_path = NULL;
+
+        if (level > TREE_DEPTH_MAX) {
+                log_warning("Eliding tree below '%s', too deep.", strna(parent_path));
+                return 0;
+        }
+
+        while (i < n) {
+                sd_device *device = array[i];
+                const char *device_path, *str;
+                bool more = false;
+                size_t j;
+
+                r = sd_device_get_devpath(device, &device_path);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get sysfs path of enumerated device: %m");
+
+                /* Scan through the subsequent devices looking children of the device we are looking at. */
+                for (j = i + 1; j < n; j++) {
+                        sd_device *next = array[j];
+                        const char *next_path;
+
+                        r = sd_device_get_devpath(next, &next_path);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to get sysfs of child device: %m");
+
+                        if (!path_startswith(next_path, device_path)) {
+                                more = !parent_path || path_startswith(next_path, parent_path);
+                                break;
+                        }
+                }
+
+                /* Determine the string to display for this node. If we are at the top of the tree, the full
+                 * device path so far, otherwise just the part suffixing the parent's device path. */
+                str = parent ? ASSERT_PTR(path_startswith(device_path, parent_path)) : device_path;
+
+                r = output_tree_device(device, str, prefix, more, array + i + 1, j - i - 1, level);
+                if (r < 0)
+                        return r;
+
+                i = j;
+        }
+
+        return 0;
+}
+
+static int print_tree(sd_device* below) {
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        const char *below_path;
+        sd_device **array;
+        size_t n = 0;
+        int r;
+
+        if (below) {
+                r = sd_device_get_devpath(below, &below_path);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to get sysfs path of device: %m");
+
+        } else
+                below_path = NULL;
+
+        r = sd_device_enumerator_new(&e);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate device enumerator: %m");
+
+        if (below) {
+                r = sd_device_enumerator_add_match_parent(e, below);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to install parent enumerator match: %m");
+        }
+
+        r = sd_device_enumerator_allow_uninitialized(e);
+        if (r < 0)
+                return log_error_errno(r, "Failed to enable enumeration of uninitialized devices: %m");
+
+        r = device_enumerator_scan_devices_and_subsystems(e);
+        if (r < 0)
+                return log_error_errno(r, "Failed to scan for devices and subsystems: %m");
+
+        if (below) {
+                /* This must be called after device_enumerator_scan_devices_and_subsystems(). */
+                r = device_enumerator_add_parent_devices(e, below);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to add parent devices: %m");
+        }
+
+        assert_se(array = device_enumerator_get_devices(e, &n));
+
+        if (n == 0) {
+                log_info("No items.");
+                return 0;
+        }
+
+        r = draw_tree(NULL, array, n, NULL, 0);
+        if (r < 0)
+                return r;
+
+        printf("\n%zu items shown.\n", n);
+        return 0;
+}
+
 int info_main(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **devices = NULL;
         _cleanup_free_ char *name = NULL;
-        int c, r;
+        int c, r, ret;
+
+        enum {
+                ARG_PROPERTY = 0x100,
+                ARG_VALUE,
+                ARG_NO_PAGER,
+        };
 
         static const struct option options[] = {
-                { "name",                    required_argument, NULL, 'n' },
-                { "path",                    required_argument, NULL, 'p' },
-                { "query",                   required_argument, NULL, 'q' },
-                { "attribute-walk",          no_argument,       NULL, 'a' },
-                { "cleanup-db",              no_argument,       NULL, 'c' },
-                { "export-db",               no_argument,       NULL, 'e' },
-                { "root",                    no_argument,       NULL, 'r' },
-                { "device-id-of-file",       required_argument, NULL, 'd' },
-                { "export",                  no_argument,       NULL, 'x' },
-                { "export-prefix",           required_argument, NULL, 'P' },
-                { "wait-for-initialization", optional_argument, NULL, 'w' },
-                { "version",                 no_argument,       NULL, 'V' },
-                { "help",                    no_argument,       NULL, 'h' },
+                { "attribute-walk",          no_argument,       NULL, 'a'          },
+                { "tree",                    no_argument,       NULL, 't'          },
+                { "cleanup-db",              no_argument,       NULL, 'c'          },
+                { "device-id-of-file",       required_argument, NULL, 'd'          },
+                { "export",                  no_argument,       NULL, 'x'          },
+                { "export-db",               no_argument,       NULL, 'e'          },
+                { "export-prefix",           required_argument, NULL, 'P'          },
+                { "help",                    no_argument,       NULL, 'h'          },
+                { "name",                    required_argument, NULL, 'n'          },
+                { "path",                    required_argument, NULL, 'p'          },
+                { "property",                required_argument, NULL, ARG_PROPERTY },
+                { "query",                   required_argument, NULL, 'q'          },
+                { "root",                    no_argument,       NULL, 'r'          },
+                { "value",                   no_argument,       NULL, ARG_VALUE    },
+                { "version",                 no_argument,       NULL, 'V'          },
+                { "wait-for-initialization", optional_argument, NULL, 'w'          },
+                { "no-pager",                no_argument,       NULL, ARG_NO_PAGER },
                 {}
         };
 
         ActionType action = ACTION_QUERY;
         QueryType query = QUERY_ALL;
 
-        while ((c = getopt_long(argc, argv, "aced:n:p:q:rxP:w::Vh", options, NULL)) >= 0)
+        while ((c = getopt_long(argc, argv, "atced:n:p:q:rxP:w::Vh", options, NULL)) >= 0)
                 switch (c) {
+                case ARG_PROPERTY:
+                        /* Make sure that if the empty property list was specified, we won't show any
+                           properties. */
+                        if (isempty(optarg) && !arg_properties) {
+                                arg_properties = new0(char*, 1);
+                                if (!arg_properties)
+                                        return log_oom();
+                        } else {
+                                r = strv_split_and_extend(&arg_properties, optarg, ",", true);
+                                if (r < 0)
+                                        return log_oom();
+                        }
+                        break;
+                case ARG_VALUE:
+                        arg_value = true;
+                        break;
                 case 'n':
                 case 'p': {
                         const char *prefix = c == 'n' ? "/dev/" : "/sys/";
@@ -489,6 +758,9 @@
                 case 'a':
                         action = ACTION_ATTRIBUTE_WALK;
                         break;
+                case 't':
+                        action = ACTION_TREE;
+                        break;
                 case 'e':
                         return export_devices();
                 case 'c':
@@ -513,10 +785,13 @@
                         return print_version();
                 case 'h':
                         return help();
+                case ARG_NO_PAGER:
+                        arg_pager_flags |= PAGER_DISABLE;
+                        break;
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         if (action == ACTION_DEVICE_ID_FILE) {
@@ -531,22 +806,39 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to build argument list: %m");
 
-        if (strv_isempty(devices))
+        if (action != ACTION_TREE && strv_isempty(devices))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "A device name or path is required");
-        if (action == ACTION_ATTRIBUTE_WALK && strv_length(devices) > 1)
+        if (IN_SET(action, ACTION_ATTRIBUTE_WALK, ACTION_TREE) && strv_length(devices) > 1)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Only one device may be specified with -a/--attribute-walk");
+                                       "Only one device may be specified with -a/--attribute-walk and -t/--tree");
 
-        char **p;
+        if (arg_export && arg_value)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "-x/--export or -P/--export-prefix cannot be used with --value");
+
+        pager_open(arg_pager_flags);
+
+        if (strv_isempty(devices)) {
+                assert(action == ACTION_TREE);
+                return print_tree(NULL);
+        }
+
+        ret = 0;
         STRV_FOREACH(p, devices) {
                 _cleanup_(sd_device_unrefp) sd_device *device = NULL;
 
                 r = find_device(*p, NULL, &device);
-                if (r == -EINVAL)
-                        return log_error_errno(r, "Bad argument \"%s\", expected an absolute path in /dev/ or /sys or a unit name: %m", *p);
-                if (r < 0)
-                        return log_error_errno(r, "Unknown device \"%s\": %m",  *p);
+                if (r < 0) {
+                        if (r == -EINVAL)
+                                log_error_errno(r, "Bad argument \"%s\", expected an absolute path in /dev/ or /sys/ or a unit name: %m", *p);
+                        else
+                                log_error_errno(r, "Unknown device \"%s\": %m",  *p);
+
+                        if (ret == 0)
+                                ret = r;
+                        continue;
+                }
 
                 if (arg_wait_for_initialization_timeout > 0) {
                         sd_device *d;
@@ -554,7 +846,7 @@
                         r = device_wait_for_initialization(
                                         device,
                                         NULL,
-                                        usec_add(now(CLOCK_MONOTONIC), arg_wait_for_initialization_timeout),
+                                        arg_wait_for_initialization_timeout,
                                         &d);
                         if (r < 0)
                                 return r;
@@ -567,11 +859,13 @@
                         r = query_device(query, device);
                 else if (action == ACTION_ATTRIBUTE_WALK)
                         r = print_device_chain(device);
+                else if (action == ACTION_TREE)
+                        r = print_tree(device);
                 else
-                        assert_not_reached("Unknown action");
+                        assert_not_reached();
                 if (r < 0)
                         return r;
         }
 
-        return 0;
+        return ret;
 }
diff --git a/src/udev/udevadm-lock.c b/src/udev/udevadm-lock.c
new file mode 100644
index 0000000..d19e756
--- /dev/null
+++ b/src/udev/udevadm-lock.c
@@ -0,0 +1,364 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <getopt.h>
+#include <stdlib.h>
+#include <sys/file.h>
+#include <unistd.h>
+
+#include "blockdev-util.h"
+#include "btrfs-util.h"
+#include "device-util.h"
+#include "fd-util.h"
+#include "fdset.h"
+#include "main-func.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "pretty-print.h"
+#include "process-util.h"
+#include "signal-util.h"
+#include "sort-util.h"
+#include "strv.h"
+#include "time-util.h"
+#include "udevadm.h"
+
+static usec_t arg_timeout_usec = USEC_INFINITY;
+static char **arg_devices = NULL;
+static char **arg_backing = NULL;
+static char **arg_cmdline = NULL;
+static bool arg_print = false;
+
+STATIC_DESTRUCTOR_REGISTER(arg_devices, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_backing, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_cmdline, strv_freep);
+
+static int help(void) {
+        _cleanup_free_ char *link = NULL;
+        int r;
+
+        r = terminal_urlify_man("udevadm", "8", &link);
+        if (r < 0)
+                return log_oom();
+
+        printf("%s [OPTIONS...] COMMAND\n"
+               "%s [OPTIONS...] --print\n"
+               "\n%sLock a block device and run a command.%s\n\n"
+               "  -h --help            Print this message\n"
+               "  -V --version         Print version of the program\n"
+               "  -d --device=DEVICE   Block device to lock\n"
+               "  -b --backing=FILE    File whose backing block device to lock\n"
+               "  -t --timeout=SECS    Block at most the specified time waiting for lock\n"
+               "  -p --print           Only show which block device the lock would be taken on\n"
+               "\nSee the %s for details.\n",
+               program_invocation_short_name,
+               program_invocation_short_name,
+               ansi_highlight(),
+               ansi_normal(),
+               link);
+
+        return 0;
+}
+
+static int parse_argv(int argc, char *argv[]) {
+
+        static const struct option options[] = {
+                { "help",    no_argument,       NULL, 'h'      },
+                { "version", no_argument,       NULL, 'V'      },
+                { "device",  required_argument, NULL, 'd'      },
+                { "backing", required_argument, NULL, 'b'      },
+                { "timeout", required_argument, NULL, 't'      },
+                { "print",   no_argument,       NULL, 'p'      },
+                {}
+        };
+
+        int c, r;
+
+        assert(argc >= 0);
+        assert(argv);
+
+        while ((c = getopt_long(argc, argv, arg_print ? "hVd:b:t:p" : "+hVd:b:t:p", options, NULL)) >= 0)
+
+                switch (c) {
+
+                case 'h':
+                        return help();
+
+                case 'V':
+                        return print_version();
+
+                case 'd':
+                case 'b': {
+                        _cleanup_free_ char *s = NULL;
+                        char ***l = c == 'd' ? &arg_devices : &arg_backing;
+
+                        r = path_make_absolute_cwd(optarg, &s);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to make path '%s' absolute: %m", optarg);
+
+                        path_simplify(s);
+
+                        if (strv_consume(l, TAKE_PTR(s)) < 0)
+                                return log_oom();
+
+                        strv_uniq(*l);
+                        break;
+                }
+
+                case 't':
+                        r = parse_sec(optarg, &arg_timeout_usec);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --timeout= parameter: %s", optarg);
+                        break;
+
+                case 'p':
+                        arg_print = true;
+                        break;
+
+                case '?':
+                        return -EINVAL;
+
+                default:
+                        assert_not_reached();
+                }
+
+        if (arg_print) {
+                if (optind != argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No arguments expected");
+        } else {
+                if (optind + 1 > argc)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Too few arguments, command to execute.");
+
+                arg_cmdline = strv_copy(argv + optind);
+                if (!arg_cmdline)
+                        return log_oom();
+        }
+
+        if (strv_isempty(arg_devices) && strv_isempty(arg_backing))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No devices to lock specified, refusing.");
+
+        return 1;
+}
+
+static int find_devno(
+                dev_t **devnos,
+                size_t *n_devnos,
+                const char *device,
+                bool backing) {
+
+        dev_t devt;
+        int r;
+
+        assert(devnos);
+        assert(n_devnos);
+        assert(*devnos || *n_devnos == 0);
+        assert(device);
+
+        r = path_get_whole_disk(device, backing, &devt);
+        if (r < 0)
+                return log_error_errno(r, "Failed to find whole block device for '%s': %m", device);
+
+        if (typesafe_bsearch(&devt, *devnos, *n_devnos, devt_compare_func)) {
+                log_debug("Device %u:%u already listed for locking, ignoring.", major(devt), minor(devt));
+                return 0;
+        }
+
+        if (!GREEDY_REALLOC(*devnos, *n_devnos + 1))
+                return log_oom();
+
+        (*devnos)[(*n_devnos)++] = devt;
+
+        /* Immediately sort again, to ensure the binary search above will work for the next device we add */
+        typesafe_qsort(*devnos, *n_devnos, devt_compare_func);
+        return 1;
+}
+
+static int lock_device(
+                const char *path,
+                dev_t devno,
+                usec_t deadline) {
+
+        _cleanup_close_ int fd = -EBADF;
+        struct stat st;
+        int r;
+
+        fd = open(path, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+        if (fd < 0)
+                return log_error_errno(errno, "Failed to open '%s': %m", path);
+
+        if (fstat(fd, &st) < 0)
+                return log_error_errno(errno, "Failed to stat '%s': %m", path);
+
+        /* Extra safety: check that the device still refers to what we think it refers to */
+        if (!S_ISBLK(st.st_mode) || st.st_rdev != devno)
+                return log_error_errno(SYNTHETIC_ERRNO(ENXIO), "Path '%s' no longer refers to specified block device %u:%u: %m", path, major(devno), minor(devno));
+
+        if (flock(fd, LOCK_EX|LOCK_NB) < 0) {
+
+                if (errno != EAGAIN)
+                        return log_error_errno(errno, "Failed to lock device '%s': %m", path);
+
+                if (deadline == 0)
+                        return log_error_errno(SYNTHETIC_ERRNO(EBUSY), "Device '%s' is currently locked.", path);
+
+                if (deadline == USEC_INFINITY)  {
+
+                        log_info("Device '%s' is currently locked, waiting%s", path, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+                        if (flock(fd, LOCK_EX) < 0)
+                                return log_error_errno(errno, "Failed to lock device '%s': %m", path);
+
+                } else {
+                        _cleanup_(sigkill_waitp) pid_t flock_pid = 0;
+
+                        /* flock() doesn't support a time-out. Let's fake one then. The traditional way to do
+                         * this is via alarm()/setitimer()/timer_create(), but that's racy, given that the
+                         * SIGALRM might already fire between the alarm() and the flock() in which case the
+                         * flock() is never cancelled and we lock up (this is a short time window, but with
+                         * short timeouts on a loaded machine we might run into it, who knows?). Let's
+                         * instead do the lock out-of-process: fork off a child that does the locking, and
+                         * that we'll wait on and kill if it takes too long. */
+
+                        log_info("Device '%s' is currently locked, waiting %s%s",
+                                 path, FORMAT_TIMESPAN(usec_sub_unsigned(deadline, now(CLOCK_MONOTONIC)), 0),
+                                 special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+                        BLOCK_SIGNALS(SIGCHLD);
+
+                        r = safe_fork("(timed-flock)", FORK_DEATHSIG|FORK_LOG, &flock_pid);
+                        if (r < 0)
+                                return r;
+                        if (r == 0) {
+                                /* Child */
+
+                                if (flock(fd, LOCK_EX) < 0) {
+                                        log_error_errno(errno, "Failed to lock device '%s': %m", path);
+                                        _exit(EXIT_FAILURE);
+                                }
+
+                                _exit(EXIT_SUCCESS);
+                        }
+
+                        for (;;) {
+                                siginfo_t si;
+                                sigset_t ss;
+                                usec_t n;
+
+                                assert(sigemptyset(&ss) >= 0);
+                                assert(sigaddset(&ss, SIGCHLD) >= 0);
+
+                                n = now(CLOCK_MONOTONIC);
+                                if (n >= deadline)
+                                        return log_error_errno(SYNTHETIC_ERRNO(ETIMEDOUT), "Timeout reached.");
+
+                                r = sigtimedwait(&ss, NULL, TIMESPEC_STORE(deadline - n));
+                                if (r < 0) {
+                                        if (errno != EAGAIN)
+                                                return log_error_errno(errno, "Failed to wait for SIGCHLD: %m");
+
+                                        return log_error_errno(SYNTHETIC_ERRNO(ETIMEDOUT), "Timeout reached.");
+                                }
+
+                                assert(r == SIGCHLD);
+
+                                zero(si);
+
+                                if (waitid(P_PID, flock_pid, &si, WEXITED|WNOHANG|WNOWAIT) < 0)
+                                        return log_error_errno(errno, "Failed to wait for child: %m");
+
+                                if (si.si_pid != 0) {
+                                        assert(si.si_pid == flock_pid);
+
+                                        if (si.si_code != CLD_EXITED || si.si_status != EXIT_SUCCESS)
+                                                return log_error_errno(SYNTHETIC_ERRNO(EPROTO), "Unexpected exit status of file lock child.");
+
+                                        break;
+                                }
+
+                                log_debug("Got SIGCHLD for other child, continuing.");
+                        }
+                }
+        }
+
+        log_debug("Successfully locked %s (%u:%u)%s", path, major(devno), minor(devno), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
+        return TAKE_FD(fd);
+}
+
+int lock_main(int argc, char *argv[], void *userdata) {
+        _cleanup_(fdset_freep) FDSet *fds = NULL;
+        _cleanup_free_ dev_t *devnos = NULL;
+        size_t n_devnos = 0;
+        usec_t deadline;
+        pid_t pid;
+        int r;
+
+        r = parse_argv(argc, argv);
+        if (r <= 0)
+                return r;
+
+        STRV_FOREACH(i, arg_devices) {
+                r = find_devno(&devnos, &n_devnos, *i, /* backing= */ false);
+                if (r < 0)
+                        return r;
+        }
+
+        STRV_FOREACH(i, arg_backing) {
+                r = find_devno(&devnos, &n_devnos, *i, /* backing= */ true);
+                if (r < 0)
+                        return r;
+        }
+
+        assert(n_devnos > 0);
+
+        fds = fdset_new();
+        if (!fds)
+                return log_oom();
+
+        if (IN_SET(arg_timeout_usec, 0, USEC_INFINITY))
+                deadline = arg_timeout_usec;
+        else
+                deadline = usec_add(now(CLOCK_MONOTONIC), arg_timeout_usec);
+
+        for (size_t i = 0; i < n_devnos; i++) {
+                _cleanup_free_ char *node = NULL;
+
+                r = devname_from_devnum(S_IFBLK, devnos[i], &node);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to format block device path: %m");
+
+                if (arg_print)
+                        printf("%s\n", node);
+                else {
+                        _cleanup_close_ int fd = -EBADF;
+
+                        fd = lock_device(node, devnos[i], deadline);
+                        if (fd < 0)
+                                return fd;
+
+                        r = fdset_put(fds, fd);
+                        if (r < 0)
+                                return log_oom();
+
+                        TAKE_FD(fd);
+                }
+        }
+
+        if (arg_print)
+                return EXIT_SUCCESS;
+
+        /* Ignore SIGINT and allow the forked process to receive it */
+        (void) ignore_signals(SIGINT);
+
+        r = safe_fork("(lock)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_CLOSE_ALL_FDS|FORK_RLIMIT_NOFILE_SAFE|FORK_LOG, &pid);
+        if (r < 0)
+                return r;
+        if (r == 0) {
+                /* Child */
+
+                execvp(arg_cmdline[0], arg_cmdline);
+                log_open();
+                log_error_errno(errno, "Failed to execute %s: %m", arg_cmdline[0]);
+                _exit(EXIT_FAILURE);
+        }
+
+        return wait_for_terminate_and_check(arg_cmdline[0], pid, 0);
+}
diff --git a/src/udev/udevadm-monitor.c b/src/udev/udevadm-monitor.c
index 00b03c5..99ad22a 100644
--- a/src/udev/udevadm-monitor.c
+++ b/src/udev/udevadm-monitor.c
@@ -91,8 +91,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to start device monitor: %m");
 
-        (void) sd_event_source_set_description(sd_device_monitor_get_event_source(monitor),
-                                               sender == MONITOR_GROUP_UDEV ? "device-monitor-udev" : "device-monitor-kernel");
+        (void) sd_device_monitor_set_description(monitor, sender == MONITOR_GROUP_UDEV ? "udev" : "kernel");
 
         *ret = TAKE_PTR(monitor);
         return 0;
@@ -179,7 +178,7 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option.");
+                        assert_not_reached();
                 }
 
         if (!arg_print_kernel && !arg_print_udev) {
diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c
index 2c61c2d..c236a70 100644
--- a/src/udev/udevadm-settle.c
+++ b/src/udev/udevadm-settle.c
@@ -4,32 +4,25 @@
  * Copyright © 2009 Scott James Remnant <scott@netsplit.com>
  */
 
-#include <errno.h>
 #include <getopt.h>
-#include <poll.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
 #include <unistd.h>
 
 #include "sd-bus.h"
+#include "sd-event.h"
 #include "sd-login.h"
 #include "sd-messages.h"
 
 #include "bus-util.h"
-#include "fd-util.h"
-#include "io-util.h"
-#include "string-util.h"
+#include "path-util.h"
 #include "strv.h"
 #include "time-util.h"
 #include "udev-ctrl.h"
 #include "udev-util.h"
 #include "udevadm.h"
 #include "unit-def.h"
-#include "util.h"
 #include "virt.h"
 
-static usec_t arg_timeout = 120 * USEC_PER_SEC;
+static usec_t arg_timeout_usec = 120 * USEC_PER_SEC;
 static const char *arg_exists = NULL;
 
 static int help(void) {
@@ -61,11 +54,14 @@
         while ((c = getopt_long(argc, argv, "t:E:Vhs:e:q", options, NULL)) >= 0) {
                 switch (c) {
                 case 't':
-                        r = parse_sec(optarg, &arg_timeout);
+                        r = parse_sec(optarg, &arg_timeout_usec);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to parse timeout value '%s': %m", optarg);
                         break;
                 case 'E':
+                        if (!path_is_valid(optarg))
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid path: %s", optarg);
+
                         arg_exists = optarg;
                         break;
                 case 'V':
@@ -81,7 +77,7 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option.");
+                        assert_not_reached();
                 }
         }
 
@@ -150,7 +146,7 @@
                         return -ENOMEM;
 
                 log_struct(LOG_NOTICE,
-                           "MESSAGE=systemd-udev-settle.service is deprecated. Please fix %s not to pull it in.", t,
+                           LOG_MESSAGE("systemd-udev-settle.service is deprecated. Please fix %s not to pull it in.", t),
                            "OFFENDING_UNITS=%s", t,
                            "MESSAGE_ID=" SD_MESSAGE_SYSTEMD_UDEV_SETTLE_DEPRECATED_STR);
         }
@@ -158,9 +154,36 @@
         return 0;
 }
 
+static bool check(void) {
+        int r;
+
+        if (arg_exists) {
+                if (access(arg_exists, F_OK) >= 0)
+                        return true;
+
+                if (errno != ENOENT)
+                        log_warning_errno(errno, "Failed to check the existence of \"%s\", ignoring: %m", arg_exists);
+        }
+
+        /* exit if queue is empty */
+        r = udev_queue_is_empty();
+        if (r < 0)
+                log_warning_errno(r, "Failed to check if udev queue is empty, ignoring: %m");
+
+        return r > 0;
+}
+
+static int on_inotify(sd_event_source *s, const struct inotify_event *event, void *userdata) {
+        assert(s);
+
+        if (check())
+                return sd_event_exit(sd_event_source_get_event(s), 0);
+
+        return 0;
+}
+
 int settle_main(int argc, char *argv[], void *userdata) {
-        _cleanup_close_ int fd = -1;
-        usec_t deadline;
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         int r;
 
         r = parse_argv(argc, argv);
@@ -172,55 +195,58 @@
                 return 0;
         }
 
-        deadline = now(CLOCK_MONOTONIC) + arg_timeout;
-
-        /* guarantee that the udev daemon isn't pre-processing */
-        if (getuid() == 0) {
-                _cleanup_(udev_ctrl_unrefp) struct udev_ctrl *uctrl = NULL;
-
-                if (udev_ctrl_new(&uctrl) >= 0) {
-                        r = udev_ctrl_send_ping(uctrl);
-                        if (r < 0) {
-                                log_debug_errno(r, "Failed to connect to udev daemon: %m");
-                                return 0;
-                        }
-
-                        r = udev_ctrl_wait(uctrl, MAX(5 * USEC_PER_SEC, arg_timeout));
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to wait for daemon to reply: %m");
-                }
-        }
-
-        fd = udev_queue_init();
-        if (fd < 0) {
-                log_debug_errno(fd, "Queue is empty, nothing to watch: %m");
-                return 0;
-        }
-
         (void) emit_deprecation_warning();
 
-        for (;;) {
-                if (arg_exists && access(arg_exists, F_OK) >= 0)
-                        return 0;
+        if (getuid() == 0) {
+                _cleanup_(udev_ctrl_unrefp) UdevCtrl *uctrl = NULL;
 
-                /* exit if queue is empty */
-                r = udev_queue_is_empty();
+                /* guarantee that the udev daemon isn't pre-processing */
+
+                r = udev_ctrl_new(&uctrl);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to check queue is empty: %m");
-                if (r > 0)
+                        return log_error_errno(r, "Failed to create control socket for udev daemon: %m");
+
+                r = udev_ctrl_send_ping(uctrl);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to connect to udev daemon, ignoring: %m");
                         return 0;
-
-                if (now(CLOCK_MONOTONIC) >= deadline)
-                        return -ETIMEDOUT;
-
-                /* wake up when queue becomes empty */
-                r = fd_wait_for_event(fd, POLLIN, MSEC_PER_SEC);
-                if (r < 0)
-                        return r;
-                if (r & POLLIN) {
-                        r = flush_fd(fd);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to flush queue: %m");
                 }
+
+                r = udev_ctrl_wait(uctrl, MAX(5 * USEC_PER_SEC, arg_timeout_usec));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to wait for daemon to reply: %m");
+        } else {
+                /* For non-privileged users, at least check if udevd is running. */
+                if (access("/run/udev/control", F_OK) < 0)
+                        return log_error_errno(errno,
+                                               errno == ENOENT ? "systemd-udevd is not running." :
+                                                                 "Failed to check if /run/udev/control exists: %m");
         }
+
+        r = sd_event_default(&event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to get default sd-event object: %m");
+
+        r = sd_event_add_inotify(event, NULL, "/run/udev" , IN_DELETE, on_inotify, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add inotify watch for /run/udev: %m");
+
+        if (arg_timeout_usec != USEC_INFINITY) {
+                r = sd_event_add_time_relative(event, NULL, CLOCK_BOOTTIME, arg_timeout_usec, 0,
+                                               NULL, INT_TO_PTR(-ETIMEDOUT));
+                if (r < 0)
+                        return log_error_errno(r, "Failed to add timer event source: %m");
+        }
+
+        /* Check before entering the event loop, as the udev queue may be already empty. */
+        if (check())
+                return 0;
+
+        r = sd_event_loop(event);
+        if (r == -ETIMEDOUT)
+                return log_error_errno(r, "Timed out for waiting the udev queue being empty.");
+        if (r < 0)
+                return log_error_errno(r, "Event loop failed: %m");
+
+        return 0;
 }
diff --git a/src/udev/udevadm-test-builtin.c b/src/udev/udevadm-test-builtin.c
index 008d6f2..81b6336 100644
--- a/src/udev/udevadm-test-builtin.c
+++ b/src/udev/udevadm-test-builtin.c
@@ -11,14 +11,16 @@
 #include "udevadm.h"
 #include "udevadm-util.h"
 
+static sd_device_action_t arg_action = SD_DEVICE_ADD;
 static const char *arg_command = NULL;
 static const char *arg_syspath = NULL;
 
 static int help(void) {
         printf("%s test-builtin [OPTIONS] COMMAND DEVPATH\n\n"
                "Test a built-in command.\n\n"
-               "  -h --help     Print this message\n"
-               "  -V --version  Print version of the program\n\n"
+               "  -h --help               Print this message\n"
+               "  -V --version            Print version of the program\n\n"
+               "  -a --action=ACTION|help Set action string\n"
                "Commands:\n",
                program_invocation_short_name);
 
@@ -29,15 +31,23 @@
 
 static int parse_argv(int argc, char *argv[]) {
         static const struct option options[] = {
-                { "version", no_argument, NULL, 'V' },
-                { "help",    no_argument, NULL, 'h' },
+                { "action",  required_argument, NULL, 'a' },
+                { "version", no_argument,       NULL, 'V' },
+                { "help",    no_argument,       NULL, 'h' },
                 {}
         };
 
-        int c;
+        int r, c;
 
-        while ((c = getopt_long(argc, argv, "Vh", options, NULL)) >= 0)
+        while ((c = getopt_long(argc, argv, "a:Vh", options, NULL)) >= 0)
                 switch (c) {
+                case 'a':
+                        r = parse_device_action(optarg, &arg_action);
+                        if (r < 0)
+                                return log_error_errno(r, "Invalid action '%s'", optarg);
+                        if (r == 0)
+                                return 0;
+                        break;
                 case 'V':
                         return print_version();
                 case 'h':
@@ -45,7 +55,7 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
         arg_command = argv[optind++];
@@ -56,12 +66,13 @@
         arg_syspath = argv[optind++];
         if (!arg_syspath)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "syspath missing.");
+                                       "device is missing.");
 
         return 1;
 }
 
 int builtin_main(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         UdevBuiltinCommand cmd;
         int r;
@@ -81,13 +92,13 @@
                 goto finish;
         }
 
-        r = find_device(arg_syspath, "/sys", &dev);
+        r = find_device_with_action(arg_syspath, arg_action, &dev);
         if (r < 0) {
                 log_error_errno(r, "Failed to open device '%s': %m", arg_syspath);
                 goto finish;
         }
 
-        r = udev_builtin_run(dev, cmd, arg_command, true);
+        r = udev_builtin_run(dev, &rtnl, cmd, arg_command, true);
         if (r < 0)
                 log_debug_errno(r, "Builtin command '%s' fails: %m", arg_command);
 
diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c
index fbac719..8adebbc 100644
--- a/src/udev/udevadm-test.c
+++ b/src/udev/udevadm-test.c
@@ -21,11 +21,12 @@
 #include "strxcpyx.h"
 #include "udev-builtin.h"
 #include "udev-event.h"
+#include "udevadm-util.h"
 #include "udevadm.h"
 
-static const char *arg_action = "add";
+static sd_device_action_t arg_action = SD_DEVICE_ADD;
 static ResolveNameTiming arg_resolve_name_timing = RESOLVE_NAME_EARLY;
-static char arg_syspath[UDEV_PATH_SIZE] = {};
+static const char *arg_syspath = NULL;
 
 static int help(void) {
 
@@ -49,25 +50,17 @@
                 {}
         };
 
-        int c;
+        int r, c;
 
         while ((c = getopt_long(argc, argv, "a:N:Vh", options, NULL)) >= 0)
                 switch (c) {
-                case 'a': {
-                        sd_device_action_t a;
-
-                        if (streq(optarg, "help")) {
-                                dump_device_action_table();
+                case 'a':
+                        r = parse_device_action(optarg, &arg_action);
+                        if (r < 0)
+                                return log_error_errno(r, "Invalid action '%s'", optarg);
+                        if (r == 0)
                                 return 0;
-                        }
-
-                        a = device_action_from_string(optarg);
-                        if (a < 0)
-                                return log_error_errno(a, "Invalid action '%s'", optarg);
-
-                        arg_action = device_action_to_string(a);
                         break;
-                }
                 case 'N':
                         arg_resolve_name_timing = resolve_name_timing_from_string(optarg);
                         if (arg_resolve_name_timing < 0)
@@ -81,18 +74,12 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
 
-        if (!argv[optind])
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "syspath parameter missing.");
-
-        /* add /sys if needed */
-        if (!path_startswith(argv[optind], "/sys"))
-                strscpyl(arg_syspath, sizeof(arg_syspath), "/sys", argv[optind], NULL);
-        else
-                strscpy(arg_syspath, sizeof(arg_syspath), argv[optind]);
+        arg_syspath = argv[optind];
+        if (!arg_syspath)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "syspath parameter missing.");
 
         return 1;
 }
@@ -127,7 +114,7 @@
                 goto out;
         }
 
-        r = device_new_from_synthetic_event(&dev, arg_syspath, arg_action);
+        r = find_device_with_action(arg_syspath, arg_action, &dev);
         if (r < 0) {
                 log_error_errno(r, "Failed to open device '%s': %m", arg_syspath);
                 goto out;
@@ -148,8 +135,11 @@
 
         ORDERED_HASHMAP_FOREACH_KEY(val, cmd, event->run_list) {
                 char program[UDEV_PATH_SIZE];
+                bool truncated;
 
-                (void) udev_event_apply_format(event, cmd, program, sizeof(program), false);
+                (void) udev_event_apply_format(event, cmd, program, sizeof(program), false, &truncated);
+                if (truncated)
+                        log_warning("The command '%s' is truncated while substituting into '%s'.", program, cmd);
                 printf("run: '%s'\n", program);
         }
 
diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c
index 984ec1b..4e3d5bd 100644
--- a/src/udev/udevadm-trigger.c
+++ b/src/udev/udevadm-trigger.c
@@ -11,9 +11,12 @@
 #include "device-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "id128-util.h"
+#include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
 #include "set.h"
+#include "static-destruct.h"
 #include "string-util.h"
 #include "strv.h"
 #include "udevadm.h"
@@ -25,17 +28,21 @@
 static bool arg_dry_run = false;
 static bool arg_quiet = false;
 static bool arg_uuid = false;
+static bool arg_settle = false;
 
 static int exec_list(
                 sd_device_enumerator *e,
                 sd_device_action_t action,
-                Hashmap *settle_hashmap) {
+                Set **ret_settle_path_or_ids) {
 
-        bool skip_uuid_logic = false;
+        _cleanup_set_free_ Set *settle_path_or_ids = NULL;
+        int uuid_supported = -1;
         const char *action_str;
         sd_device *d;
         int r, ret = 0;
 
+        assert(e);
+
         action_str = device_action_to_string(action);
 
         FOREACH_DEVICE_AND_SUBSYSTEM(e, d) {
@@ -56,14 +63,14 @@
 
                 /* Use the UUID mode if the user explicitly asked for it, or if --settle has been specified,
                  * so that we can recognize our own uevent. */
-                r = sd_device_trigger_with_uuid(d, action, (arg_uuid || settle_hashmap) && !skip_uuid_logic ? &id : NULL);
-                if (r == -EINVAL && !arg_uuid && settle_hashmap && !skip_uuid_logic) {
+                r = sd_device_trigger_with_uuid(d, action, (arg_uuid || arg_settle) && uuid_supported != 0 ? &id : NULL);
+                if (r == -EINVAL && !arg_uuid && arg_settle && uuid_supported < 0) {
                         /* If we specified a UUID because of the settling logic, and we got EINVAL this might
                          * be caused by an old kernel which doesn't know the UUID logic (pre-4.13). Let's try
                          * if it works without the UUID logic then. */
                         r = sd_device_trigger(d, action);
                         if (r != -EINVAL)
-                                skip_uuid_logic = true; /* dropping the uuid stuff changed the return code,
+                                uuid_supported = false; /* dropping the uuid stuff changed the return code,
                                                          * hence don't bother next time */
                 }
                 if (r < 0) {
@@ -107,66 +114,100 @@
                         continue;
                 }
 
+                if (uuid_supported < 0)
+                        uuid_supported = true;
+
                 /* If the user asked for it, write event UUID to stdout */
                 if (arg_uuid)
                         printf(SD_ID128_UUID_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(id));
 
-                if (settle_hashmap) {
-                        _cleanup_free_ sd_id128_t *mid = NULL;
-                        _cleanup_free_ char *sp = NULL;
+                if (arg_settle) {
+                        if (uuid_supported) {
+                                sd_id128_t *dup;
 
-                        sp = strdup(syspath);
-                        if (!sp)
-                                return log_oom();
+                                dup = newdup(sd_id128_t, &id, 1);
+                                if (!dup)
+                                        return log_oom();
 
-                        mid = newdup(sd_id128_t, &id, 1);
-                        if (!d)
-                                return log_oom();
+                                r = set_ensure_consume(&settle_path_or_ids, &id128_hash_ops_free, dup);
+                        } else {
+                                char *dup;
 
-                        r = hashmap_put(settle_hashmap, sp, mid);
+                                dup = strdup(syspath);
+                                if (!dup)
+                                        return log_oom();
+
+                                r = set_ensure_consume(&settle_path_or_ids, &path_hash_ops_free, dup);
+                        }
                         if (r < 0)
                                 return log_oom();
-
-                        TAKE_PTR(sp);
-                        TAKE_PTR(mid);
                 }
         }
 
+        if (ret_settle_path_or_ids)
+                *ret_settle_path_or_ids = TAKE_PTR(settle_path_or_ids);
+
         return ret;
 }
 
 static int device_monitor_handler(sd_device_monitor *m, sd_device *dev, void *userdata) {
-        Hashmap *settle_hashmap = userdata;
-        sd_id128_t *settle_id;
+        Set *settle_path_or_ids = * (Set**) ASSERT_PTR(userdata);
         const char *syspath;
-        char *k;
+        sd_id128_t id;
         int r;
 
         assert(dev);
-        assert(settle_hashmap);
 
         r = sd_device_get_syspath(dev, &syspath);
         if (r < 0) {
-                log_debug_errno(r, "Failed to get syspath of device event, ignoring: %m");
+                log_device_debug_errno(dev, r, "Failed to get syspath of device event, ignoring: %m");
                 return 0;
         }
 
-        settle_id = hashmap_get2(settle_hashmap, syspath, (void**) &k);
-        if (!settle_id) {
-                log_debug("Got uevent for unexpected device '%s', ignoring.", syspath);
-                return 0;
-        }
-        if (!sd_id128_is_null(*settle_id)) { /* If this is SD_ID128_NULL then we are on pre-4.13 and have no UUID to check, hence don't */
-                sd_id128_t event_id;
+        if (sd_device_get_trigger_uuid(dev, &id) >= 0) {
+                _cleanup_free_ sd_id128_t *saved = NULL;
 
-                r = sd_device_get_trigger_uuid(dev, &event_id);
-                if (r < 0) {
-                        log_debug_errno(r, "Got uevent without synthetic UUID for device '%s', ignoring: %m", syspath);
+                saved = set_remove(settle_path_or_ids, &id);
+                if (!saved) {
+                        log_device_debug(dev, "Got uevent not matching expected UUID, ignoring.");
                         return 0;
                 }
+        } else {
+                _cleanup_free_ char *saved = NULL;
 
-                if (!sd_id128_equal(event_id, *settle_id)) {
-                        log_debug("Got uevent not matching expected UUID for device '%s', ignoring.", syspath);
+                saved = set_remove(settle_path_or_ids, syspath);
+                if (!saved) {
+                        const char *old_sysname;
+
+                        /* When the device is renamed, the new name is broadcast, and the old name is saved
+                         * in INTERFACE_OLD.
+                         *
+                         * TODO: remove support for INTERFACE_OLD when kernel baseline is bumped to 4.13 or
+                         * higher. See 1193448cb68e5a90cab027e16a093bbd367e9494.
+                         */
+
+                        if (sd_device_get_property_value(dev, "INTERFACE_OLD", &old_sysname) >= 0) {
+                                _cleanup_free_ char *dir = NULL, *old_syspath = NULL;
+
+                                r = path_extract_directory(syspath, &dir);
+                                if (r < 0) {
+                                        log_device_debug_errno(dev, r,
+                                                               "Failed to extract directory from '%s', ignoring: %m",
+                                                               syspath);
+                                        return 0;
+                                }
+
+                                old_syspath = path_join(dir, old_sysname);
+                                if (!old_syspath) {
+                                        log_oom_debug();
+                                        return 0;
+                                }
+
+                                saved = set_remove(settle_path_or_ids, old_syspath);
+                        }
+                }
+                if (!saved) {
+                        log_device_debug(dev, "Got uevent for unexpected device, ignoring.");
                         return 0;
                 }
         }
@@ -175,12 +216,9 @@
                 printf("settle %s\n", syspath);
 
         if (arg_uuid)
-                printf("settle " SD_ID128_UUID_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(*settle_id));
+                printf("settle " SD_ID128_UUID_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(id));
 
-        free(hashmap_remove(settle_hashmap, syspath));
-        free(k);
-
-        if (hashmap_isempty(settle_hashmap))
+        if (set_isempty(settle_path_or_ids))
                 return sd_event_exit(sd_device_monitor_get_event(m), 0);
 
         return 0;
@@ -226,10 +264,14 @@
                "  -y --sysname-match=NAME           Trigger devices with this /sys path\n"
                "     --name-match=NAME              Trigger devices with this /dev name\n"
                "  -b --parent-match=NAME            Trigger devices with that parent device\n"
+               "     --initialized-match            Trigger devices that are already initialized\n"
+               "     --initialized-nomatch          Trigger devices that are not initialized yet\n"
                "  -w --settle                       Wait for the triggered events to complete\n"
                "     --wait-daemon[=SECONDS]        Wait for udevd daemon to be initialized\n"
                "                                    before triggering uevents\n"
-               "     --uuid                         Print synthetic uevent UUID\n",
+               "     --uuid                         Print synthetic uevent UUID\n"
+               "     --prioritized-subsystem=SUBSYSTEM[,SUBSYSTEM…]\n"
+               "                                    Trigger devices from a matching subsystem first\n",
                program_invocation_short_name);
 
         return 0;
@@ -240,41 +282,48 @@
                 ARG_NAME = 0x100,
                 ARG_PING,
                 ARG_UUID,
+                ARG_PRIORITIZED_SUBSYSTEM,
+                ARG_INITIALIZED_MATCH,
+                ARG_INITIALIZED_NOMATCH,
         };
 
         static const struct option options[] = {
-                { "verbose",           no_argument,       NULL, 'v'      },
-                { "dry-run",           no_argument,       NULL, 'n'      },
-                { "quiet",             no_argument,       NULL, 'q'      },
-                { "type",              required_argument, NULL, 't'      },
-                { "action",            required_argument, NULL, 'c'      },
-                { "subsystem-match",   required_argument, NULL, 's'      },
-                { "subsystem-nomatch", required_argument, NULL, 'S'      },
-                { "attr-match",        required_argument, NULL, 'a'      },
-                { "attr-nomatch",      required_argument, NULL, 'A'      },
-                { "property-match",    required_argument, NULL, 'p'      },
-                { "tag-match",         required_argument, NULL, 'g'      },
-                { "sysname-match",     required_argument, NULL, 'y'      },
-                { "name-match",        required_argument, NULL, ARG_NAME },
-                { "parent-match",      required_argument, NULL, 'b'      },
-                { "settle",            no_argument,       NULL, 'w'      },
-                { "wait-daemon",       optional_argument, NULL, ARG_PING },
-                { "version",           no_argument,       NULL, 'V'      },
-                { "help",              no_argument,       NULL, 'h'      },
-                { "uuid",              no_argument,       NULL, ARG_UUID },
+                { "verbose",               no_argument,       NULL, 'v'                       },
+                { "dry-run",               no_argument,       NULL, 'n'                       },
+                { "quiet",                 no_argument,       NULL, 'q'                       },
+                { "type",                  required_argument, NULL, 't'                       },
+                { "action",                required_argument, NULL, 'c'                       },
+                { "subsystem-match",       required_argument, NULL, 's'                       },
+                { "subsystem-nomatch",     required_argument, NULL, 'S'                       },
+                { "attr-match",            required_argument, NULL, 'a'                       },
+                { "attr-nomatch",          required_argument, NULL, 'A'                       },
+                { "property-match",        required_argument, NULL, 'p'                       },
+                { "tag-match",             required_argument, NULL, 'g'                       },
+                { "sysname-match",         required_argument, NULL, 'y'                       },
+                { "name-match",            required_argument, NULL, ARG_NAME                  },
+                { "parent-match",          required_argument, NULL, 'b'                       },
+                { "initialized-match",     no_argument,       NULL, ARG_INITIALIZED_MATCH     },
+                { "initialized-nomatch",   no_argument,       NULL, ARG_INITIALIZED_NOMATCH   },
+                { "settle",                no_argument,       NULL, 'w'                       },
+                { "wait-daemon",           optional_argument, NULL, ARG_PING                  },
+                { "version",               no_argument,       NULL, 'V'                       },
+                { "help",                  no_argument,       NULL, 'h'                       },
+                { "uuid",                  no_argument,       NULL, ARG_UUID                  },
+                { "prioritized-subsystem", required_argument, NULL, ARG_PRIORITIZED_SUBSYSTEM },
                 {}
         };
         enum {
                 TYPE_DEVICES,
                 TYPE_SUBSYSTEMS,
+                TYPE_ALL,
         } device_type = TYPE_DEVICES;
         sd_device_action_t action = SD_DEVICE_CHANGE;
         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *m = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
-        _cleanup_hashmap_free_ Hashmap *settle_hashmap = NULL;
+        _cleanup_set_free_ Set *settle_path_or_ids = NULL;
         usec_t ping_timeout_usec = 5 * USEC_PER_SEC;
-        bool settle = false, ping = false;
+        bool ping = false;
         int c, r;
 
         if (running_in_chroot() > 0) {
@@ -309,20 +358,18 @@
                                 device_type = TYPE_DEVICES;
                         else if (streq(optarg, "subsystems"))
                                 device_type = TYPE_SUBSYSTEMS;
+                        else if (streq(optarg, "all"))
+                                device_type = TYPE_ALL;
                         else
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown type --type=%s", optarg);
                         break;
-                case 'c': {
-                        if (streq(optarg, "help")) {
-                                dump_device_action_table();
+                case 'c':
+                        r = parse_device_action(optarg, &action);
+                        if (r < 0)
+                                return log_error_errno(r, "Unknown action '%s'", optarg);
+                        if (r == 0)
                                 return 0;
-                        }
-
-                        action = device_action_from_string(optarg);
-                        if (action < 0)
-                                return log_error_errno(action, "Unknown action '%s'", optarg);
                         break;
-                }
                 case 's':
                         r = sd_device_enumerator_add_match_subsystem(e, optarg, true);
                         if (r < 0)
@@ -380,13 +427,13 @@
                         break;
                 }
                 case 'w':
-                        settle = true;
+                        arg_settle = true;
                         break;
 
                 case ARG_NAME: {
                         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
 
-                        r = find_device(optarg, "/dev/", &dev);
+                        r = find_device(optarg, "/dev", &dev);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to open the device '%s': %m", optarg);
 
@@ -409,6 +456,26 @@
                         arg_uuid = true;
                         break;
 
+                case ARG_PRIORITIZED_SUBSYSTEM: {
+                        _cleanup_strv_free_ char **subsystems = NULL;
+
+                        subsystems = strv_split(optarg, ",");
+                        if (!subsystems)
+                                return log_error_errno(r, "Failed to parse prioritized subsystem '%s': %m", optarg);
+
+                        STRV_FOREACH(p, subsystems) {
+                                r = device_enumerator_add_prioritized_subsystem(e, *p);
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed to add prioritized subsystem '%s': %m", *p);
+                        }
+                        break;
+                }
+                case ARG_INITIALIZED_MATCH:
+                case ARG_INITIALIZED_NOMATCH:
+                        r = device_enumerator_add_match_is_initialized(e, c == ARG_INITIALIZED_MATCH ? MATCH_INITIALIZED_YES : MATCH_INITIALIZED_NO);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to set initialized filter: %m");
+                        break;
                 case 'V':
                         return print_version();
                 case 'h':
@@ -416,12 +483,12 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unknown option");
+                        assert_not_reached();
                 }
         }
 
         if (ping) {
-                _cleanup_(udev_ctrl_unrefp) struct udev_ctrl *uctrl = NULL;
+                _cleanup_(udev_ctrl_unrefp) UdevCtrl *uctrl = NULL;
 
                 r = udev_ctrl_new(&uctrl);
                 if (r < 0)
@@ -448,11 +515,7 @@
                         return log_error_errno(r, "Failed to add parent match '%s': %m", argv[optind]);
         }
 
-        if (settle) {
-                settle_hashmap = hashmap_new(&path_hash_ops_free_free);
-                if (!settle_hashmap)
-                        return log_oom();
-
+        if (arg_settle) {
                 r = sd_event_default(&event);
                 if (r < 0)
                         return log_error_errno(r, "Failed to get default event: %m");
@@ -465,7 +528,7 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to attach event to device monitor: %m");
 
-                r = sd_device_monitor_start(m, device_monitor_handler, settle_hashmap);
+                r = sd_device_monitor_start(m, device_monitor_handler, &settle_path_or_ids);
                 if (r < 0)
                         return log_error_errno(r, "Failed to start device monitor: %m");
         }
@@ -481,15 +544,20 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to scan devices: %m");
                 break;
+        case TYPE_ALL:
+                r = device_enumerator_scan_devices_and_subsystems(e);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to scan devices and subsystems: %m");
+                break;
         default:
-                assert_not_reached("Unknown device type");
+                assert_not_reached();
         }
 
-        r = exec_list(e, action, settle_hashmap);
+        r = exec_list(e, action, arg_settle ? &settle_path_or_ids : NULL);
         if (r < 0)
                 return r;
 
-        if (event && !hashmap_isempty(settle_hashmap)) {
+        if (!set_isempty(settle_path_or_ids)) {
                 r = sd_event_loop(event);
                 if (r < 0)
                         return log_error_errno(r, "Event loop failed: %m");
diff --git a/src/udev/udevadm-util.c b/src/udev/udevadm-util.c
index 10191d8..2447eda 100644
--- a/src/udev/udevadm-util.c
+++ b/src/udev/udevadm-util.c
@@ -10,22 +10,6 @@
 #include "udevadm-util.h"
 #include "unit-name.h"
 
-static int find_device_from_path(const char *path, sd_device **ret) {
-        if (path_startswith(path, "/sys/"))
-                return sd_device_new_from_syspath(ret, path);
-
-        if (path_startswith(path, "/dev/")) {
-                struct stat st;
-
-                if (stat(path, &st) < 0)
-                        return -errno;
-
-                return sd_device_new_from_stat_rdev(ret, &st);
-        }
-
-        return -EINVAL;
-}
-
 static int find_device_from_unit(const char *unit_name, sd_device **ret) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
@@ -48,7 +32,7 @@
                 if (r < 0)
                         return log_debug_errno(r, "Failed to convert \"%s\" to a device path: %m", unit_name);
 
-                return find_device_from_path(path, ret);
+                return sd_device_new_from_path(ret, path);
         }
 
         unit_path = unit_dbus_path_from_name(unit_name);
@@ -71,25 +55,70 @@
 }
 
 int find_device(const char *id, const char *prefix, sd_device **ret) {
-        _cleanup_free_ char *path = NULL;
+        assert(id);
+        assert(ret);
+
+        if (sd_device_new_from_path(ret, id) >= 0)
+                return 0;
+
+        if (prefix && !path_startswith(id, prefix)) {
+                _cleanup_free_ char *path = NULL;
+
+                path = path_join(prefix, id);
+                if (!path)
+                        return -ENOMEM;
+
+                if (sd_device_new_from_path(ret, path) >= 0)
+                        return 0;
+        }
+
+        /* if a path is provided, then it cannot be a unit name. Let's return earlier. */
+        if (is_path(id))
+                return -ENODEV;
+
+        /* Check if the argument looks like a device unit name. */
+        return find_device_from_unit(id, ret);
+}
+
+int find_device_with_action(const char *id, sd_device_action_t action, sd_device **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         int r;
 
         assert(id);
         assert(ret);
+        assert(action >= 0 && action < _SD_DEVICE_ACTION_MAX);
 
-        if (prefix) {
-                if (!path_startswith(id, prefix)) {
-                        id = path = path_join(prefix, id);
-                        if (!path)
-                                return -ENOMEM;
-                }
-        } else {
-                /* In cases where the argument is generic (no prefix specified),
-                 * check if the argument looks like a device unit name. */
-                r = find_device_from_unit(id, ret);
-                if (r >= 0)
-                        return r;
+        r = find_device(id, "/sys", &dev);
+        if (r < 0)
+                return r;
+
+        r = device_read_uevent_file(dev);
+        if (r < 0)
+                return r;
+
+        r = device_set_action(dev, action);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(dev);
+        return 0;
+}
+
+int parse_device_action(const char *str, sd_device_action_t *action) {
+        sd_device_action_t a;
+
+        assert(str);
+        assert(action);
+
+        if (streq(str, "help")) {
+                dump_device_action_table();
+                return 0;
         }
 
-        return find_device_from_path(id, ret);
+        a = device_action_from_string(str);
+        if (a < 0)
+                return a;
+
+        *action = a;
+        return 1;
 }
diff --git a/src/udev/udevadm-util.h b/src/udev/udevadm-util.h
index 91587c5..7fb4556 100644
--- a/src/udev/udevadm-util.h
+++ b/src/udev/udevadm-util.h
@@ -4,3 +4,5 @@
 #include "sd-device.h"
 
 int find_device(const char *id, const char *prefix, sd_device **ret);
+int find_device_with_action(const char *id, sd_device_action_t action, sd_device **ret);
+int parse_device_action(const char *str, sd_device_action_t *action);
diff --git a/src/udev/udevadm-wait.c b/src/udev/udevadm-wait.c
new file mode 100644
index 0000000..544c946
--- /dev/null
+++ b/src/udev/udevadm-wait.c
@@ -0,0 +1,458 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <getopt.h>
+#include <unistd.h>
+
+#include "sd-event.h"
+
+#include "alloc-util.h"
+#include "chase-symlinks.h"
+#include "device-monitor-private.h"
+#include "device-util.h"
+#include "errno-util.h"
+#include "event-util.h"
+#include "fd-util.h"
+#include "fs-util.h"
+#include "inotify-util.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "static-destruct.h"
+#include "string-table.h"
+#include "strv.h"
+#include "udev-util.h"
+#include "udevadm.h"
+
+typedef enum WaitUntil {
+        WAIT_UNTIL_INITIALIZED,
+        WAIT_UNTIL_ADDED,
+        WAIT_UNTIL_REMOVED,
+        _WAIT_UNTIL_MAX,
+        _WAIT_UNTIL_INVALID = -EINVAL,
+} WaitUntil;
+
+static WaitUntil arg_wait_until = WAIT_UNTIL_INITIALIZED;
+static usec_t arg_timeout_usec = USEC_INFINITY;
+static bool arg_settle = false;
+static char **arg_devices = NULL;
+
+STATIC_DESTRUCTOR_REGISTER(arg_devices, strv_freep);
+
+static const char * const wait_until_table[_WAIT_UNTIL_MAX] = {
+        [WAIT_UNTIL_INITIALIZED] = "initialized",
+        [WAIT_UNTIL_ADDED]       = "added",
+        [WAIT_UNTIL_REMOVED]     = "removed",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(wait_until, WaitUntil);
+
+static int check_device(const char *path) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        int r;
+
+        assert(path);
+
+        if (arg_wait_until == WAIT_UNTIL_REMOVED) {
+                r = laccess(path, F_OK);
+                if (r == -ENOENT)
+                        return true;
+                if (r < 0)
+                        return r;
+                return false;
+        }
+
+        r = sd_device_new_from_path(&dev, path);
+        if (r == -ENODEV)
+                return false;
+        if (r < 0)
+                return r;
+
+        if (arg_wait_until == WAIT_UNTIL_INITIALIZED)
+                return sd_device_get_is_initialized(dev);
+
+        return true;
+}
+
+static bool check(void) {
+        int r;
+
+        if (arg_settle) {
+                r = udev_queue_is_empty();
+                if (r == 0)
+                        return false;
+                if (r < 0)
+                        log_warning_errno(r, "Failed to check if udev queue is empty, assuming empty: %m");
+        }
+
+        STRV_FOREACH(p, arg_devices) {
+                r = check_device(*p);
+                if (r <= 0) {
+                        if (r < 0)
+                                log_warning_errno(r, "Failed to check if device \"%s\" is %s, assuming not %s: %m",
+                                                  *p,
+                                                  wait_until_to_string(arg_wait_until),
+                                                  wait_until_to_string(arg_wait_until));
+                        return false;
+                }
+        }
+
+        return true;
+}
+
+static int check_and_exit(sd_event *event) {
+        int r;
+
+        assert(event);
+
+        if (check()) {
+                r = sd_event_exit(event, 0);
+                if (r < 0)
+                        return r;
+
+                return 1;
+        }
+
+        return 0;
+}
+
+static int device_monitor_handler(sd_device_monitor *monitor, sd_device *device, void *userdata) {
+        const char *name;
+        int r;
+
+        assert(monitor);
+        assert(device);
+
+        if (device_for_action(device, SD_DEVICE_REMOVE) != (arg_wait_until == WAIT_UNTIL_REMOVED))
+                return 0;
+
+        if (arg_wait_until == WAIT_UNTIL_REMOVED)
+                /* On removed event, the received device may not contain enough information.
+                 * Let's unconditionally check all requested devices are removed. */
+                return check_and_exit(sd_device_monitor_get_event(monitor));
+
+        /* For other events, at first check if the received device matches with the requested devices,
+         * to avoid calling check() so many times within a short time. */
+
+        r = sd_device_get_sysname(device, &name);
+        if (r < 0) {
+                log_device_warning_errno(device, r, "Failed to get sysname of received device, ignoring: %m");
+                return 0;
+        }
+
+        STRV_FOREACH(p, arg_devices) {
+                const char *s;
+
+                if (!path_startswith(*p, "/sys"))
+                        continue;
+
+                r = path_find_last_component(*p, false, NULL, &s);
+                if (r < 0) {
+                        log_warning_errno(r, "Failed to extract filename from \"%s\", ignoring: %m", *p);
+                        continue;
+                }
+                if (r == 0)
+                        continue;
+
+                if (strneq(s, name, r))
+                        return check_and_exit(sd_device_monitor_get_event(monitor));
+        }
+
+        r = sd_device_get_devname(device, &name);
+        if (r < 0) {
+                if (r != -ENOENT)
+                        log_device_warning_errno(device, r, "Failed to get devname of received device, ignoring: %m");
+                return 0;
+        }
+
+        if (path_strv_contains(arg_devices, name))
+                return check_and_exit(sd_device_monitor_get_event(monitor));
+
+        FOREACH_DEVICE_DEVLINK(device, name)
+                if (path_strv_contains(arg_devices, name))
+                        return check_and_exit(sd_device_monitor_get_event(monitor));
+
+        return 0;
+}
+
+static int setup_monitor(sd_event *event, MonitorNetlinkGroup group, const char *description, sd_device_monitor **ret) {
+        _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
+        int r;
+
+        assert(event);
+        assert(ret);
+
+        r = device_monitor_new_full(&monitor, group, /* fd = */ -1);
+        if (r < 0)
+                return r;
+
+        (void) sd_device_monitor_set_receive_buffer_size(monitor, 128*1024*1024);
+
+        r = sd_device_monitor_attach_event(monitor, event);
+        if (r < 0)
+                return r;
+
+        r = sd_device_monitor_set_description(monitor, description);
+        if (r < 0)
+                return r;
+
+        r = sd_device_monitor_start(monitor, device_monitor_handler, NULL);
+        if (r < 0)
+                return r;
+
+        *ret = TAKE_PTR(monitor);
+        return 0;
+}
+
+static int on_inotify(sd_event_source *s, const struct inotify_event *event, void *userdata) {
+        return check_and_exit(sd_event_source_get_event(s));
+}
+
+static int setup_inotify(sd_event *event) {
+        _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
+        int r;
+
+        assert(event);
+
+        if (!arg_settle)
+                return 0;
+
+        r = sd_event_add_inotify(event, &s, "/run/udev" , IN_CREATE | IN_DELETE, on_inotify, NULL);
+        if (r < 0)
+                return r;
+
+        r = sd_event_source_set_description(s, "inotify-event-source");
+        if (r < 0)
+                return r;
+
+        return sd_event_source_set_floating(s, true);
+}
+
+static int setup_timer(sd_event *event) {
+        _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
+        int r;
+
+        assert(event);
+
+        if (arg_timeout_usec == USEC_INFINITY)
+                return 0;
+
+        r = sd_event_add_time_relative(event, &s, CLOCK_BOOTTIME, arg_timeout_usec, 0,
+                                       NULL, INT_TO_PTR(-ETIMEDOUT));
+        if (r < 0)
+                return r;
+
+        r = sd_event_source_set_description(s, "timeout-event-source");
+        if (r < 0)
+                return r;
+
+        return sd_event_source_set_floating(s, true);
+}
+
+static int reset_timer(sd_event *e, sd_event_source **s);
+
+static int on_periodic_timer(sd_event_source *s, uint64_t usec, void *userdata) {
+        static unsigned counter = 0;
+        sd_event *e;
+        int r;
+
+        assert(s);
+
+        e = sd_event_source_get_event(s);
+
+        /* Even if all devices exists, we try to wait for uevents to be emitted from kernel. */
+        if (check())
+                counter++;
+        else
+                counter = 0;
+
+        if (counter >= 2) {
+                log_debug("All requested devices popped up without receiving kernel uevents.");
+                return sd_event_exit(e, 0);
+        }
+
+        r = reset_timer(e, &s);
+        if (r < 0)
+                log_warning_errno(r, "Failed to reset periodic timer event source, ignoring: %m");
+
+        return 0;
+}
+
+static int reset_timer(sd_event *e, sd_event_source **s) {
+        return event_reset_time_relative(e, s, CLOCK_BOOTTIME, 250 * USEC_PER_MSEC, 0,
+                                         on_periodic_timer, NULL, 0, "periodic-timer-event-source", false);
+}
+
+static int setup_periodic_timer(sd_event *event) {
+        _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
+        int r;
+
+        assert(event);
+
+        r = reset_timer(event, &s);
+        if (r < 0)
+                return r;
+
+        /* Set the lower priority than device monitor, to make uevents always dispatched first. */
+        r = sd_event_source_set_priority(s, SD_EVENT_PRIORITY_NORMAL + 1);
+        if (r < 0)
+                return r;
+
+        return sd_event_source_set_floating(s, true);
+}
+
+static int help(void) {
+        printf("%s wait [OPTIONS] DEVICE [DEVICE…]\n\n"
+               "Wait for devices or device symlinks being created.\n\n"
+               "  -h --help             Print this message\n"
+               "  -V --version          Print version of the program\n"
+               "  -t --timeout=SEC      Maximum time to wait for the device\n"
+               "     --initialized=BOOL Wait for devices being initialized by systemd-udevd\n"
+               "     --removed          Wait for devices being removed\n"
+               "     --settle           Also wait for all queued events being processed\n",
+               program_invocation_short_name);
+
+        return 0;
+}
+
+static int parse_argv(int argc, char *argv[]) {
+        enum {
+                ARG_INITIALIZED = 0x100,
+                ARG_REMOVED,
+                ARG_SETTLE,
+        };
+
+        static const struct option options[] = {
+                { "timeout",     required_argument, NULL, 't'             },
+                { "initialized", required_argument, NULL, ARG_INITIALIZED },
+                { "removed",     no_argument,       NULL, ARG_REMOVED     },
+                { "settle",      no_argument,       NULL, ARG_SETTLE      },
+                { "help",        no_argument,       NULL, 'h'             },
+                { "version",     no_argument,       NULL, 'V'             },
+                {}
+        };
+
+        int c, r;
+
+        while ((c = getopt_long(argc, argv, "t:hV", options, NULL)) >= 0)
+                switch (c) {
+                case 't':
+                        r = parse_sec(optarg, &arg_timeout_usec);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse -t/--timeout= parameter: %s", optarg);
+                        break;
+
+                case ARG_INITIALIZED:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --initialized= parameter: %s", optarg);
+                        arg_wait_until = r ? WAIT_UNTIL_INITIALIZED : WAIT_UNTIL_ADDED;
+                        break;
+
+                case ARG_REMOVED:
+                        arg_wait_until = WAIT_UNTIL_REMOVED;
+                        break;
+
+                case ARG_SETTLE:
+                        arg_settle = true;
+                        break;
+
+                case 'V':
+                        return print_version();
+
+                case 'h':
+                        return help();
+
+                case '?':
+                        return -EINVAL;
+
+                default:
+                        assert_not_reached();
+                }
+
+        if (optind >= argc)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Too few arguments, expected at least one device path or device symlink.");
+
+        arg_devices = strv_copy(argv + optind);
+        if (!arg_devices)
+                return log_oom();
+
+        return 1; /* work to do */
+}
+
+int wait_main(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *udev_monitor = NULL, *kernel_monitor = NULL;
+        _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+        int r;
+
+        r = parse_argv(argc, argv);
+        if (r <= 0)
+                return r;
+
+        STRV_FOREACH(p, arg_devices) {
+                path_simplify(*p);
+
+                if (!path_is_safe(*p))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Device path cannot contain \"..\".");
+
+                if (!is_device_path(*p))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Specified path \"%s\" does not start with \"/dev/\" or \"/sys/\".", *p);
+        }
+
+        /* Check before configuring event sources, as devices may be already initialized. */
+        if (check())
+                return 0;
+
+        r = sd_event_default(&event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to initialize sd-event: %m");
+
+        r = setup_timer(event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to set up timeout: %m");
+
+        r = setup_inotify(event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to set up inotify: %m");
+
+        r = setup_monitor(event, MONITOR_GROUP_UDEV, "udev-uevent-monitor-event-source", &udev_monitor);
+        if (r < 0)
+                return log_error_errno(r, "Failed to set up udev uevent monitor: %m");
+
+        if (arg_wait_until == WAIT_UNTIL_ADDED) {
+                /* If --initialized=no is specified, it is not necessary to wait uevents for the specified
+                 * devices to be processed by udevd. Hence, let's listen on the kernel's uevent stream. Then,
+                 * we may be able to finish this program earlier when udevd is very busy.
+                 * Note, we still need to also setup udev monitor, as this may be invoked with a devlink
+                 * (e.g. /dev/disk/by-id/foo). In that case, the devlink may not exist when we received a
+                 * uevent from kernel, as the udevd may not finish to process the uevent yet. Hence, we need
+                 * to wait until the event is processed by udevd. */
+                r = setup_monitor(event, MONITOR_GROUP_KERNEL, "kernel-uevent-monitor-event-source", &kernel_monitor);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set up kernel uevent monitor: %m");
+
+                /* This is a workaround for issues #24360 and #24450.
+                 * For some reasons, the kernel sometimes does not emit uevents for loop block device on
+                 * attach. Hence, without the periodic timer, no event source for this program will be
+                 * triggered, and this will be timed out.
+                 * Theoretically, inotify watch may be better, but this program typically expected to run in
+                 * a short time. Hence, let's use the simpler periodic timer event source here. */
+                r = setup_periodic_timer(event);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to set up periodic timer: %m");
+        }
+
+        /* Check before entering the event loop, as devices may be initialized during setting up event sources. */
+        if (check())
+                return 0;
+
+        r = sd_event_loop(event);
+        if (r == -ETIMEDOUT)
+                return log_error_errno(r, "Timed out for waiting devices being %s.",
+                                       wait_until_to_string(arg_wait_until));
+        if (r < 0)
+                return log_error_errno(r, "Event loop failed: %m");
+
+        return 0;
+}
diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c
index e55ae4b..b742c1a 100644
--- a/src/udev/udevadm.c
+++ b/src/udev/udevadm.c
@@ -14,18 +14,19 @@
 #include "udev-util.h"
 #include "udevadm.h"
 #include "udevd.h"
-#include "util.h"
 #include "verbs.h"
 
 static int help(void) {
         static const char *const short_descriptions[][2] = {
-                { "info",         "Query sysfs or the udev database" },
-                { "trigger",      "Request events from the kernel"   },
-                { "settle",       "Wait for pending udev events"     },
-                { "control",      "Control the udev daemon"          },
-                { "monitor",      "Listen to kernel and udev events" },
-                { "test",         "Test an event run"                },
-                { "test-builtin", "Test a built-in command"          },
+                { "info",         "Query sysfs or the udev database"  },
+                { "trigger",      "Request events from the kernel"    },
+                { "settle",       "Wait for pending udev events"      },
+                { "control",      "Control the udev daemon"           },
+                { "monitor",      "Listen to kernel and udev events"  },
+                { "test",         "Test an event run"                 },
+                { "test-builtin", "Test a built-in command"           },
+                { "wait",         "Wait for device or device symlink" },
+                { "lock",         "Lock a block device"               },
         };
 
         _cleanup_free_ char *link = NULL;
@@ -77,7 +78,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         return 1; /* work to do */
@@ -101,6 +102,8 @@
                 { "hwdb",         VERB_ANY, VERB_ANY, 0, hwdb_main    },
                 { "test",         VERB_ANY, VERB_ANY, 0, test_main    },
                 { "test-builtin", VERB_ANY, VERB_ANY, 0, builtin_main },
+                { "wait",         VERB_ANY, VERB_ANY, 0, wait_main    },
+                { "lock",         VERB_ANY, VERB_ANY, 0, lock_main    },
                 { "version",      VERB_ANY, VERB_ANY, 0, version_main },
                 { "help",         VERB_ANY, VERB_ANY, 0, help_main    },
                 {}
diff --git a/src/udev/udevadm.h b/src/udev/udevadm.h
index 75ce633..417611a 100644
--- a/src/udev/udevadm.h
+++ b/src/udev/udevadm.h
@@ -13,6 +13,8 @@
 int hwdb_main(int argc, char *argv[], void *userdata);
 int test_main(int argc, char *argv[], void *userdata);
 int builtin_main(int argc, char *argv[], void *userdata);
+int wait_main(int argc, char *argv[], void *userdata);
+int lock_main(int argc, char *argv[], void *userdata);
 
 static inline int print_version(void) {
         /* Dracut relies on the version being a single integer */
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 8808c5c..c6d24d9 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -28,18 +28,23 @@
 #include "sd-event.h"
 
 #include "alloc-util.h"
+#include "blockdev-util.h"
+#include "cgroup-setup.h"
 #include "cgroup-util.h"
 #include "cpu-set-util.h"
+#include "daemon-util.h"
 #include "dev-setup.h"
 #include "device-monitor-private.h"
 #include "device-private.h"
 #include "device-util.h"
+#include "errno-list.h"
 #include "event-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
 #include "fs-util.h"
 #include "hashmap.h"
+#include "inotify-util.h"
 #include "io-util.h"
 #include "limits-util.h"
 #include "list.h"
@@ -47,6 +52,7 @@
 #include "mkdir.h"
 #include "netlink-util.h"
 #include "parse-util.h"
+#include "path-util.h"
 #include "pretty-print.h"
 #include "proc-cmdline.h"
 #include "process-util.h"
@@ -61,12 +67,15 @@
 #include "udev-builtin.h"
 #include "udev-ctrl.h"
 #include "udev-event.h"
+#include "udev-node.h"
 #include "udev-util.h"
 #include "udev-watch.h"
 #include "user-util.h"
 #include "version.h"
 
 #define WORKER_NUM_MAX 2048U
+#define EVENT_RETRY_INTERVAL_USEC (200 * USEC_PER_MSEC)
+#define EVENT_RETRY_TIMEOUT_USEC  (3 * USEC_PER_MINUTE)
 
 static bool arg_debug = false;
 static int arg_daemonize = false;
@@ -77,11 +86,14 @@
 static int arg_timeout_signal = SIGKILL;
 static bool arg_blockdev_read_only = false;
 
+typedef struct Event Event;
+typedef struct Worker Worker;
+
 typedef struct Manager {
         sd_event *event;
         Hashmap *workers;
-        LIST_HEAD(struct event, events);
-        const char *cgroup;
+        LIST_HEAD(Event, events);
+        char *cgroup;
         pid_t pid; /* the process that originally allocated the manager object */
         int log_level;
 
@@ -91,7 +103,7 @@
         sd_netlink *rtnl;
 
         sd_device_monitor *monitor;
-        struct udev_ctrl *ctrl;
+        UdevCtrl *ctrl;
         int worker_watch[2];
 
         /* used by udev-watch */
@@ -102,180 +114,126 @@
 
         usec_t last_usec;
 
+        bool udev_node_needs_cleanup;
         bool stop_exec_queue;
         bool exit;
 } Manager;
 
-enum event_state {
+typedef enum EventState {
         EVENT_UNDEF,
         EVENT_QUEUED,
         EVENT_RUNNING,
-};
+} EventState;
 
-struct event {
+typedef struct Event {
         Manager *manager;
-        struct worker *worker;
-        enum event_state state;
+        Worker *worker;
+        EventState state;
 
         sd_device *dev;
-        sd_device *dev_kernel; /* clone of originally received device */
 
+        sd_device_action_t action;
         uint64_t seqnum;
-        uint64_t delaying_seqnum;
+        uint64_t blocker_seqnum;
+        const char *id;
+        const char *devpath;
+        const char *devpath_old;
+        const char *devnode;
+
+        /* Used when the device is locked by another program. */
+        usec_t retry_again_next_usec;
+        usec_t retry_again_timeout_usec;
+        sd_event_source *retry_event_source;
 
         sd_event_source *timeout_warning_event;
         sd_event_source *timeout_event;
 
-        LIST_FIELDS(struct event, event);
-};
+        LIST_FIELDS(Event, event);
+} Event;
 
-static void event_queue_cleanup(Manager *manager, enum event_state type);
-
-enum worker_state {
+typedef enum WorkerState {
         WORKER_UNDEF,
         WORKER_RUNNING,
         WORKER_IDLE,
         WORKER_KILLED,
         WORKER_KILLING,
-};
+} WorkerState;
 
-struct worker {
+typedef struct Worker {
         Manager *manager;
         pid_t pid;
+        sd_event_source *child_event_source;
         sd_device_monitor *monitor;
-        enum worker_state state;
-        struct event *event;
-};
+        WorkerState state;
+        Event *event;
+} Worker;
 
 /* passed from worker to main process */
-struct worker_message {
-};
+typedef enum EventResult {
+        EVENT_RESULT_NERRNO_MIN       = -ERRNO_MAX,
+        EVENT_RESULT_NERRNO_MAX       = -1,
+        EVENT_RESULT_SUCCESS          = 0,
+        EVENT_RESULT_EXIT_STATUS_BASE = 0,
+        EVENT_RESULT_EXIT_STATUS_MAX  = 255,
+        EVENT_RESULT_TRY_AGAIN        = 256, /* when the block device is locked by another process. */
+        EVENT_RESULT_SIGNAL_BASE      = 257,
+        EVENT_RESULT_SIGNAL_MAX       = EVENT_RESULT_SIGNAL_BASE + _NSIG,
+        _EVENT_RESULT_MAX,
+        _EVENT_RESULT_INVALID         = -EINVAL,
+} EventResult;
 
-static void event_free(struct event *event) {
+static Event *event_free(Event *event) {
         if (!event)
-                return;
+                return NULL;
 
         assert(event->manager);
 
         LIST_REMOVE(event, event->manager->events, event);
         sd_device_unref(event->dev);
-        sd_device_unref(event->dev_kernel);
 
+        /* Do not use sd_event_source_disable_unref() here, as this is called by both workers and the
+         * main process. */
+        sd_event_source_unref(event->retry_event_source);
         sd_event_source_unref(event->timeout_warning_event);
         sd_event_source_unref(event->timeout_event);
 
         if (event->worker)
                 event->worker->event = NULL;
 
-        /* only clean up the queue from the process that created it */
-        if (LIST_IS_EMPTY(event->manager->events) &&
-            event->manager->pid == getpid_cached())
-                if (unlink("/run/udev/queue") < 0)
-                        log_warning_errno(errno, "Failed to unlink /run/udev/queue: %m");
-
-        free(event);
+        return mfree(event);
 }
 
-static struct worker* worker_free(struct worker *worker) {
+static void event_queue_cleanup(Manager *manager, EventState match_state) {
+        LIST_FOREACH(event, event, manager->events) {
+                if (match_state != EVENT_UNDEF && match_state != event->state)
+                        continue;
+
+                event_free(event);
+        }
+}
+
+static Worker *worker_free(Worker *worker) {
         if (!worker)
                 return NULL;
 
-        assert(worker->manager);
+        if (worker->manager)
+                hashmap_remove(worker->manager->workers, PID_TO_PTR(worker->pid));
 
-        hashmap_remove(worker->manager->workers, PID_TO_PTR(worker->pid));
+        sd_event_source_unref(worker->child_event_source);
         sd_device_monitor_unref(worker->monitor);
         event_free(worker->event);
 
         return mfree(worker);
 }
 
-DEFINE_TRIVIAL_CLEANUP_FUNC(struct worker *, worker_free);
-DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(worker_hash_op, void, trivial_hash_func, trivial_compare_func, struct worker, worker_free);
-
-static int worker_new(struct worker **ret, Manager *manager, sd_device_monitor *worker_monitor, pid_t pid) {
-        _cleanup_(worker_freep) struct worker *worker = NULL;
-        int r;
-
-        assert(ret);
-        assert(manager);
-        assert(worker_monitor);
-        assert(pid > 1);
-
-        /* close monitor, but keep address around */
-        device_monitor_disconnect(worker_monitor);
-
-        worker = new(struct worker, 1);
-        if (!worker)
-                return -ENOMEM;
-
-        *worker = (struct worker) {
-                .manager = manager,
-                .monitor = sd_device_monitor_ref(worker_monitor),
-                .pid = pid,
-        };
-
-        r = hashmap_ensure_put(&manager->workers, &worker_hash_op, PID_TO_PTR(pid), worker);
-        if (r < 0)
-                return r;
-
-        *ret = TAKE_PTR(worker);
-
-        return 0;
-}
-
-static int on_event_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
-        struct event *event = userdata;
-
-        assert(event);
-        assert(event->worker);
-
-        kill_and_sigcont(event->worker->pid, arg_timeout_signal);
-        event->worker->state = WORKER_KILLED;
-
-        log_device_error(event->dev, "Worker ["PID_FMT"] processing SEQNUM=%"PRIu64" killed", event->worker->pid, event->seqnum);
-
-        return 1;
-}
-
-static int on_event_timeout_warning(sd_event_source *s, uint64_t usec, void *userdata) {
-        struct event *event = userdata;
-
-        assert(event);
-        assert(event->worker);
-
-        log_device_warning(event->dev, "Worker ["PID_FMT"] processing SEQNUM=%"PRIu64" is taking a long time", event->worker->pid, event->seqnum);
-
-        return 1;
-}
-
-static void worker_attach_event(struct worker *worker, struct event *event) {
-        sd_event *e;
-
-        assert(worker);
-        assert(worker->manager);
-        assert(event);
-        assert(!event->worker);
-        assert(!worker->event);
-
-        worker->state = WORKER_RUNNING;
-        worker->event = event;
-        event->state = EVENT_RUNNING;
-        event->worker = worker;
-
-        e = worker->manager->event;
-
-        (void) sd_event_add_time_relative(e, &event->timeout_warning_event, CLOCK_MONOTONIC,
-                                          udev_warn_timeout(arg_event_timeout_usec), USEC_PER_SEC,
-                                          on_event_timeout_warning, event);
-
-        (void) sd_event_add_time_relative(e, &event->timeout_event, CLOCK_MONOTONIC,
-                                          arg_event_timeout_usec, USEC_PER_SEC,
-                                          on_event_timeout, event);
-}
+DEFINE_TRIVIAL_CLEANUP_FUNC(Worker*, worker_free);
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(worker_hash_op, void, trivial_hash_func, trivial_compare_func, Worker, worker_free);
 
 static void manager_clear_for_worker(Manager *manager) {
         assert(manager);
 
+        /* Do not use sd_event_source_disable_unref() here, as this is called by both workers and the
+         * main process. */
         manager->inotify_event = sd_event_source_unref(manager->inotify_event);
         manager->kill_workers_event = sd_event_source_unref(manager->kill_workers_event);
 
@@ -296,9 +254,6 @@
 
         udev_builtin_exit();
 
-        if (manager->pid == getpid_cached())
-                udev_ctrl_cleanup(manager->ctrl);
-
         manager_clear_for_worker(manager);
 
         sd_netlink_unref(manager->rtnl);
@@ -309,19 +264,266 @@
         safe_close(manager->inotify_fd);
         safe_close_pair(manager->worker_watch);
 
+        free(manager->cgroup);
         return mfree(manager);
 }
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
 
-static int worker_send_message(int fd) {
-        struct worker_message message = {};
+static int on_sigchld(sd_event_source *s, const siginfo_t *si, void *userdata);
 
-        return loop_write(fd, &message, sizeof(message), false);
+static int worker_new(Worker **ret, Manager *manager, sd_device_monitor *worker_monitor, pid_t pid) {
+        _cleanup_(worker_freep) Worker *worker = NULL;
+        int r;
+
+        assert(ret);
+        assert(manager);
+        assert(worker_monitor);
+        assert(pid > 1);
+
+        /* close monitor, but keep address around */
+        device_monitor_disconnect(worker_monitor);
+
+        worker = new(Worker, 1);
+        if (!worker)
+                return -ENOMEM;
+
+        *worker = (Worker) {
+                .monitor = sd_device_monitor_ref(worker_monitor),
+                .pid = pid,
+        };
+
+        r = sd_event_add_child(manager->event, &worker->child_event_source, pid, WEXITED, on_sigchld, worker);
+        if (r < 0)
+                return r;
+
+        r = hashmap_ensure_put(&manager->workers, &worker_hash_op, PID_TO_PTR(pid), worker);
+        if (r < 0)
+                return r;
+
+        worker->manager = manager;
+
+        *ret = TAKE_PTR(worker);
+        return 0;
 }
 
-static int worker_lock_block_device(sd_device *dev, int *ret_fd) {
-        _cleanup_close_ int fd = -1;
+static void manager_kill_workers(Manager *manager, bool force) {
+        Worker *worker;
+
+        assert(manager);
+
+        HASHMAP_FOREACH(worker, manager->workers) {
+                if (worker->state == WORKER_KILLED)
+                        continue;
+
+                if (worker->state == WORKER_RUNNING && !force) {
+                        worker->state = WORKER_KILLING;
+                        continue;
+                }
+
+                worker->state = WORKER_KILLED;
+                (void) kill(worker->pid, SIGTERM);
+        }
+}
+
+static void manager_exit(Manager *manager) {
+        assert(manager);
+
+        manager->exit = true;
+
+        (void) sd_notify(/* unset= */ false, NOTIFY_STOPPING);
+
+        /* close sources of new events and discard buffered events */
+        manager->ctrl = udev_ctrl_unref(manager->ctrl);
+
+        manager->inotify_event = sd_event_source_disable_unref(manager->inotify_event);
+        manager->inotify_fd = safe_close(manager->inotify_fd);
+
+        manager->monitor = sd_device_monitor_unref(manager->monitor);
+
+        /* discard queued events and kill workers */
+        event_queue_cleanup(manager, EVENT_QUEUED);
+        manager_kill_workers(manager, true);
+}
+
+static void notify_ready(void) {
+        int r;
+
+        r = sd_notifyf(/* unset= */ false,
+                       "READY=1\n"
+                       "STATUS=Processing with %u children at max", arg_children_max);
+        if (r < 0)
+                log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
+}
+
+/* reload requested, HUP signal received, rules changed, builtin changed */
+static void manager_reload(Manager *manager, bool force) {
+        _cleanup_(udev_rules_freep) UdevRules *rules = NULL;
+        usec_t now_usec;
+        int r;
+
+        assert(manager);
+
+        assert_se(sd_event_now(manager->event, CLOCK_MONOTONIC, &now_usec) >= 0);
+        if (!force && now_usec < usec_add(manager->last_usec, 3 * USEC_PER_SEC))
+                /* check for changed config, every 3 seconds at most */
+                return;
+        manager->last_usec = now_usec;
+
+        /* Reload SELinux label database, to make the child inherit the up-to-date database. */
+        mac_selinux_maybe_reload();
+
+        /* Nothing changed. It is not necessary to reload. */
+        if (!udev_rules_should_reload(manager->rules) && !udev_builtin_should_reload()) {
+
+                if (!force)
+                        return;
+
+                /* If we eat this up, then tell our service manager to just continue */
+                (void) sd_notifyf(/* unset= */ false,
+                                  "RELOADING=1\n"
+                                  "STATUS=Skipping configuration reloading, nothing changed.\n"
+                                  "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC));
+        } else {
+                (void) sd_notifyf(/* unset= */ false,
+                                  "RELOADING=1\n"
+                                  "STATUS=Flushing configuration...\n"
+                                  "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC));
+
+                manager_kill_workers(manager, false);
+
+                udev_builtin_exit();
+                udev_builtin_init();
+
+                r = udev_rules_load(&rules, arg_resolve_name_timing);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to read udev rules, using the previously loaded rules, ignoring: %m");
+                else
+                        udev_rules_free_and_replace(manager->rules, rules);
+        }
+
+        notify_ready();
+}
+
+static int on_kill_workers_event(sd_event_source *s, uint64_t usec, void *userdata) {
+        Manager *manager = ASSERT_PTR(userdata);
+
+        log_debug("Cleanup idle workers");
+        manager_kill_workers(manager, false);
+
+        return 1;
+}
+
+static void device_broadcast(sd_device_monitor *monitor, sd_device *dev, EventResult result) {
+        int r;
+
+        assert(dev);
+
+        /* On exit, manager->monitor is already NULL. */
+        if (!monitor)
+                return;
+
+        if (result != EVENT_RESULT_SUCCESS) {
+                (void) device_add_property(dev, "UDEV_WORKER_FAILED", "1");
+
+                switch (result) {
+                case EVENT_RESULT_NERRNO_MIN ... EVENT_RESULT_NERRNO_MAX: {
+                        const char *str;
+
+                        (void) device_add_propertyf(dev, "UDEV_WORKER_ERRNO", "%i", -result);
+
+                        str = errno_to_name(result);
+                        if (str)
+                                (void) device_add_property(dev, "UDEV_WORKER_ERRNO_NAME", str);
+                        break;
+                }
+                case EVENT_RESULT_EXIT_STATUS_BASE ... EVENT_RESULT_EXIT_STATUS_MAX:
+                        (void) device_add_propertyf(dev, "UDEV_WORKER_EXIT_STATUS", "%i", result - EVENT_RESULT_EXIT_STATUS_BASE);
+                        break;
+
+                case EVENT_RESULT_TRY_AGAIN:
+                        assert_not_reached();
+                        break;
+
+                case EVENT_RESULT_SIGNAL_BASE ... EVENT_RESULT_SIGNAL_MAX: {
+                        const char *str;
+
+                        (void) device_add_propertyf(dev, "UDEV_WORKER_SIGNAL", "%i", result - EVENT_RESULT_SIGNAL_BASE);
+
+                        str = signal_to_string(result - EVENT_RESULT_SIGNAL_BASE);
+                        if (str)
+                                (void) device_add_property(dev, "UDEV_WORKER_SIGNAL_NAME", str);
+                        break;
+                }
+                default:
+                        log_device_warning(dev, "Unknown event result \"%i\", ignoring.", result);
+                }
+        }
+
+        r = device_monitor_send_device(monitor, NULL, dev);
+        if (r < 0)
+                log_device_warning_errno(dev, r,
+                                         "Failed to broadcast event to libudev listeners, ignoring: %m");
+}
+
+static int worker_send_result(Manager *manager, EventResult result) {
+        assert(manager);
+        assert(manager->worker_watch[WRITE_END] >= 0);
+
+        return loop_write(manager->worker_watch[WRITE_END], &result, sizeof(result), false);
+}
+
+static int device_get_whole_disk(sd_device *dev, sd_device **ret_device, const char **ret_devname) {
+        const char *val;
+        int r;
+
+        assert(dev);
+
+        if (device_for_action(dev, SD_DEVICE_REMOVE))
+                goto irrelevant;
+
+        r = sd_device_get_sysname(dev, &val);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to get sysname: %m");
+
+        /* Exclude the following devices:
+         * For "dm-", see the comment added by e918a1b5a94f270186dca59156354acd2a596494.
+         * For "md", see the commit message of 2e5b17d01347d3c3118be2b8ad63d20415dbb1f0,
+         * but not sure the assumption is still valid even when partitions are created on the md
+         * devices, surprisingly which seems to be possible, see PR #22973.
+         * For "drbd", see the commit message of fee854ee8ccde0cd28e0f925dea18cce35f3993d. */
+        if (STARTSWITH_SET(val, "dm-", "md", "drbd"))
+                goto irrelevant;
+
+        r = block_device_get_whole_disk(dev, &dev);
+        if (IN_SET(r,
+                   -ENOTBLK, /* The device is not a block device. */
+                   -ENODEV   /* The whole disk device was not found, it may already be removed. */))
+                goto irrelevant;
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to get whole disk device: %m");
+
+        r = sd_device_get_devname(dev, &val);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to get devname: %m");
+
+        if (ret_device)
+                *ret_device = dev;
+        if (ret_devname)
+                *ret_devname = val;
+        return 1;
+
+irrelevant:
+        if (ret_device)
+                *ret_device = NULL;
+        if (ret_devname)
+                *ret_devname = NULL;
+        return 0;
+}
+
+static int worker_lock_whole_disk(sd_device *dev, int *ret_fd) {
+        _cleanup_close_ int fd = -EBADF;
+        sd_device *dev_whole_disk;
         const char *val;
         int r;
 
@@ -333,42 +535,21 @@
          * event handling; in the case udev acquired the lock, the external process can block until udev has
          * finished its event handling. */
 
-        if (device_for_action(dev, SD_DEVICE_REMOVE))
-                return 0;
-
-        r = sd_device_get_subsystem(dev, &val);
+        r = device_get_whole_disk(dev, &dev_whole_disk, &val);
         if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get subsystem: %m");
+                return r;
+        if (r == 0)
+                goto nolock;
 
-        if (!streq(val, "block"))
-                return 0;
-
-        r = sd_device_get_sysname(dev, &val);
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get sysname: %m");
-
-        if (STARTSWITH_SET(val, "dm-", "md", "drbd"))
-                return 0;
-
-        r = sd_device_get_devtype(dev, &val);
-        if (r < 0 && r != -ENOENT)
-                return log_device_debug_errno(dev, r, "Failed to get devtype: %m");
-        if (r >= 0 && streq(val, "partition")) {
-                r = sd_device_get_parent(dev, &dev);
-                if (r < 0)
-                        return log_device_debug_errno(dev, r, "Failed to get parent device: %m");
-        }
-
-        r = sd_device_get_devname(dev, &val);
-        if (r == -ENOENT)
-                return 0;
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get devname: %m");
-
-        fd = open(val, O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK);
+        fd = sd_device_open(dev_whole_disk, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
         if (fd < 0) {
-                log_device_debug_errno(dev, errno, "Failed to open '%s', ignoring: %m", val);
-                return 0;
+                bool ignore = ERRNO_IS_DEVICE_ABSENT(fd);
+
+                log_device_debug_errno(dev, fd, "Failed to open '%s'%s: %m", val, ignore ? ", ignoring" : "");
+                if (!ignore)
+                        return fd;
+
+                goto nolock;
         }
 
         if (flock(fd, LOCK_SH|LOCK_NB) < 0)
@@ -376,10 +557,14 @@
 
         *ret_fd = TAKE_FD(fd);
         return 1;
+
+nolock:
+        *ret_fd = -EBADF;
+        return 0;
 }
 
 static int worker_mark_block_device_read_only(sd_device *dev) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         const char *val;
         int state = 1, r;
 
@@ -411,15 +596,9 @@
         if (STARTSWITH_SET(val, "dm-", "md", "drbd", "loop", "nbd", "zram"))
                 return 0;
 
-        r = sd_device_get_devname(dev, &val);
-        if (r == -ENOENT)
-                return 0;
-        if (r < 0)
-                return log_device_debug_errno(dev, r, "Failed to get devname: %m");
-
-        fd = open(val, O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK);
+        fd = sd_device_open(dev, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
         if (fd < 0)
-                return log_device_debug_errno(dev, errno, "Failed to open '%s', ignoring: %m", val);
+                return log_device_debug_errno(dev, fd, "Failed to open '%s', ignoring: %m", val);
 
         if (ioctl(fd, BLKROSET, &state) < 0)
                 return log_device_warning_errno(dev, errno, "Failed to mark block device '%s' read-only: %m", val);
@@ -430,7 +609,7 @@
 
 static int worker_process_device(Manager *manager, sd_device *dev) {
         _cleanup_(udev_event_freep) UdevEvent *udev_event = NULL;
-        _cleanup_close_ int fd_lock = -1;
+        _cleanup_close_ int fd_lock = -EBADF;
         int r;
 
         assert(manager);
@@ -442,44 +621,14 @@
         if (!udev_event)
                 return -ENOMEM;
 
-        r = worker_lock_block_device(dev, &fd_lock);
-        if (r == -EAGAIN) {
-                /* So this is a block device and the device is locked currently via the BSD advisory locks —
-                 * someone else is exclusively using it. This means we don't run our udev rules now, to not
-                 * interfere. However we want to know when the device is unlocked again, and retrigger the
-                 * device again then, so that the rules are run eventually. For that we use IN_CLOSE_WRITE
-                 * inotify watches (which isn't exactly the same as waiting for the BSD locks to release, but
-                 * not totally off, as long as unlock+close() is done together, as it usually is).
-                 *
-                 * (The user-facing side of this: https://systemd.io/BLOCK_DEVICE_LOCKING)
-                 *
-                 * There's a bit of a chicken and egg problem here for this however: inotify watching is
-                 * supposed to be enabled via an option set via udev rules (OPTIONS+="watch"). If we skip the
-                 * udev rules here however (as we just said we do), we would thus never see that specific
-                 * udev rule, and thus never turn on inotify watching. But in order to catch up eventually
-                 * and run them we we need the inotify watching: hence a classic chicken and egg problem.
-                 *
-                 * Our way out here: if we see the block device locked, unconditionally watch the device via
-                 * inotify, regardless of any explicit request via OPTIONS+="watch". Thus, a device that is
-                 * currently locked via the BSD file locks will be treated as if we ran a single udev rule
-                 * only for it: the one that turns on inotify watching for it. If we eventually see the
-                 * inotify IN_CLOSE_WRITE event, and then run the rules after all and we then realize that
-                 * this wasn't actually requested (i.e. no OPTIONS+="watch" set) we'll simply turn off the
-                 * watching again (see below). Effectively this means: inotify watching is now enabled either
-                 * a) when the udev rules say so, or b) while the device is locked.
-                 *
-                 * Worst case scenario hence: in the (unlikely) case someone locked the device and we clash
-                 * with that we might do inotify watching for a brief moment for a device where we actually
-                 * weren't supposed to. But that shouldn't be too bad, in particular as BSD locks being taken
-                 * on a block device is kinda an indication that the inotify logic is desired too, to some
-                 * degree — they go hand-in-hand after all. */
-
-                log_device_debug(dev, "Block device is currently locked, installing watch to wait until the lock is released.");
-                (void) udev_watch_begin(manager->inotify_fd, dev);
-
-                /* Now the watch is installed, let's lock the device again, maybe in the meantime things changed */
-                r = worker_lock_block_device(dev, &fd_lock);
-        }
+        /* If this is a block device and the device is locked currently via the BSD advisory locks,
+         * someone else is using it exclusively. We don't run our udev rules now to not interfere.
+         * Instead of processing the event, we requeue the event and will try again after a delay.
+         *
+         * The user-facing side of this: https://systemd.io/BLOCK_DEVICE_LOCKING */
+        r = worker_lock_whole_disk(dev, &fd_lock);
+        if (r == -EAGAIN)
+                return EVENT_RESULT_TRY_AGAIN;
         if (r < 0)
                 return r;
 
@@ -502,37 +651,36 @@
                 /* in case rtnl was initialized */
                 manager->rtnl = sd_netlink_ref(udev_event->rtnl);
 
-        r = udev_event_process_inotify_watch(udev_event, manager->inotify_fd);
-        if (r < 0)
-                return r;
+        if (udev_event->inotify_watch) {
+                r = udev_watch_begin(manager->inotify_fd, dev);
+                if (r < 0 && r != -ENOENT) /* The device may be already removed, ignore -ENOENT. */
+                        log_device_warning_errno(dev, r, "Failed to add inotify watch, ignoring: %m");
+        }
 
         log_device_uevent(dev, "Device processed");
         return 0;
 }
 
 static int worker_device_monitor_handler(sd_device_monitor *monitor, sd_device *dev, void *userdata) {
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         int r;
 
         assert(dev);
-        assert(manager);
 
         r = worker_process_device(manager, dev);
-        if (r == -EAGAIN)
-                /* if we couldn't acquire the flock(), then proceed quietly */
-                log_device_debug_errno(dev, r, "Device currently locked, not processing.");
+        if (r == EVENT_RESULT_TRY_AGAIN)
+                /* if we couldn't acquire the flock(), then requeue the event */
+                log_device_debug(dev, "Block device is currently locked, requeueing the event.");
         else {
                 if (r < 0)
                         log_device_warning_errno(dev, r, "Failed to process device, ignoring: %m");
 
                 /* send processed event back to libudev listeners */
-                r = device_monitor_send_device(monitor, NULL, dev);
-                if (r < 0)
-                        log_device_warning_errno(dev, r, "Failed to send device, ignoring: %m");
+                device_broadcast(monitor, dev, r);
         }
 
         /* send udevd the result of the event execution */
-        r = worker_send_message(manager->worker_watch[WRITE_END]);
+        r = worker_send_result(manager, r);
         if (r < 0)
                 log_device_warning_errno(dev, r, "Failed to send signal to main daemon, ignoring: %m");
 
@@ -579,8 +727,6 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to start device monitor: %m");
 
-        (void) sd_event_source_set_description(sd_device_monitor_get_event_source(monitor), "worker-device-monitor");
-
         /* Process first device */
         (void) worker_device_monitor_handler(monitor, dev, manager);
 
@@ -591,9 +737,57 @@
         return 0;
 }
 
-static int worker_spawn(Manager *manager, struct event *event) {
+static int on_event_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
+        Event *event = ASSERT_PTR(userdata);
+
+        assert(event->worker);
+
+        kill_and_sigcont(event->worker->pid, arg_timeout_signal);
+        event->worker->state = WORKER_KILLED;
+
+        log_device_error(event->dev, "Worker ["PID_FMT"] processing SEQNUM=%"PRIu64" killed", event->worker->pid, event->seqnum);
+
+        return 1;
+}
+
+static int on_event_timeout_warning(sd_event_source *s, uint64_t usec, void *userdata) {
+        Event *event = ASSERT_PTR(userdata);
+
+        assert(event->worker);
+
+        log_device_warning(event->dev, "Worker ["PID_FMT"] processing SEQNUM=%"PRIu64" is taking a long time", event->worker->pid, event->seqnum);
+
+        return 1;
+}
+
+static void worker_attach_event(Worker *worker, Event *event) {
+        sd_event *e;
+
+        assert(worker);
+        assert(worker->manager);
+        assert(event);
+        assert(!event->worker);
+        assert(!worker->event);
+
+        worker->state = WORKER_RUNNING;
+        worker->event = event;
+        event->state = EVENT_RUNNING;
+        event->worker = worker;
+
+        e = worker->manager->event;
+
+        (void) sd_event_add_time_relative(e, &event->timeout_warning_event, CLOCK_MONOTONIC,
+                                          udev_warn_timeout(arg_event_timeout_usec), USEC_PER_SEC,
+                                          on_event_timeout_warning, event);
+
+        (void) sd_event_add_time_relative(e, &event->timeout_event, CLOCK_MONOTONIC,
+                                          arg_event_timeout_usec, USEC_PER_SEC,
+                                          on_event_timeout, event);
+}
+
+static int worker_spawn(Manager *manager, Event *event) {
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *worker_monitor = NULL;
-        struct worker *worker;
+        Worker *worker;
         pid_t pid;
         int r;
 
@@ -602,6 +796,8 @@
         if (r < 0)
                 return r;
 
+        (void) sd_device_monitor_set_description(worker_monitor, "worker");
+
         /* allow the main daemon netlink address to send devices to the worker */
         r = device_monitor_allow_unicast_sender(worker_monitor, manager->monitor);
         if (r < 0)
@@ -611,7 +807,7 @@
         if (r < 0)
                 return log_error_errno(r, "Worker: Failed to enable receiving of device: %m");
 
-        r = safe_fork(NULL, FORK_DEATHSIG, &pid);
+        r = safe_fork("(udev-worker)", FORK_DEATHSIG, &pid);
         if (r < 0) {
                 event->state = EVENT_QUEUED;
                 return log_error_errno(r, "Failed to fork() worker: %m");
@@ -635,16 +831,20 @@
         return 0;
 }
 
-static void event_run(Manager *manager, struct event *event) {
+static int event_run(Event *event) {
         static bool log_children_max_reached = true;
-        struct worker *worker;
+        Manager *manager;
+        Worker *worker;
         int r;
 
-        assert(manager);
         assert(event);
+        assert(event->manager);
 
         log_device_uevent(event->dev, "Device ready for processing");
 
+        (void) event_source_disable(event->retry_event_source);
+
+        manager = event->manager;
         HASHMAP_FOREACH(worker, manager->workers) {
                 if (worker->state != WORKER_IDLE)
                         continue;
@@ -658,35 +858,241 @@
                         continue;
                 }
                 worker_attach_event(worker, event);
-                return;
+                return 1; /* event is now processing. */
         }
 
         if (hashmap_size(manager->workers) >= arg_children_max) {
-
                 /* Avoid spamming the debug logs if the limit is already reached and
                  * many events still need to be processed */
                 if (log_children_max_reached && arg_children_max > 1) {
                         log_debug("Maximum number (%u) of children reached.", hashmap_size(manager->workers));
                         log_children_max_reached = false;
                 }
-                return;
+                return 0; /* no free worker */
         }
 
         /* Re-enable the debug message for the next batch of events */
         log_children_max_reached = true;
 
-        /* fork with up-to-date SELinux label database, so the child inherits the up-to-date db
-           and, until the next SELinux policy changes, we safe further reloads in future children */
-        mac_selinux_maybe_reload();
-
         /* start new worker and pass initial device */
-        worker_spawn(manager, event);
+        r = worker_spawn(manager, event);
+        if (r < 0)
+                return r;
+
+        return 1; /* event is now processing. */
+}
+
+static int event_is_blocked(Event *event) {
+        Event *loop_event = NULL;
+        int r;
+
+        /* lookup event for identical, parent, child device */
+
+        assert(event);
+        assert(event->manager);
+        assert(event->blocker_seqnum <= event->seqnum);
+
+        if (event->retry_again_next_usec > 0) {
+                usec_t now_usec;
+
+                r = sd_event_now(event->manager->event, CLOCK_BOOTTIME, &now_usec);
+                if (r < 0)
+                        return r;
+
+                if (event->retry_again_next_usec > now_usec)
+                        return true;
+        }
+
+        if (event->blocker_seqnum == event->seqnum)
+                /* we have checked previously and no blocker found */
+                return false;
+
+        LIST_FOREACH(event, e, event->manager->events) {
+                loop_event = e;
+
+                /* we already found a later event, earlier cannot block us, no need to check again */
+                if (loop_event->seqnum < event->blocker_seqnum)
+                        continue;
+
+                /* event we checked earlier still exists, no need to check again */
+                if (loop_event->seqnum == event->blocker_seqnum)
+                        return true;
+
+                /* found ourself, no later event can block us */
+                if (loop_event->seqnum >= event->seqnum)
+                        goto no_blocker;
+
+                /* found event we have not checked */
+                break;
+        }
+
+        assert(loop_event);
+        assert(loop_event->seqnum > event->blocker_seqnum &&
+               loop_event->seqnum < event->seqnum);
+
+        /* check if queue contains events we depend on */
+        LIST_FOREACH(event, e, loop_event) {
+                loop_event = e;
+
+                /* found ourself, no later event can block us */
+                if (loop_event->seqnum >= event->seqnum)
+                        goto no_blocker;
+
+                if (streq_ptr(loop_event->id, event->id))
+                        break;
+
+                if (devpath_conflict(event->devpath, loop_event->devpath) ||
+                    devpath_conflict(event->devpath, loop_event->devpath_old) ||
+                    devpath_conflict(event->devpath_old, loop_event->devpath))
+                        break;
+
+                if (event->devnode && streq_ptr(event->devnode, loop_event->devnode))
+                        break;
+        }
+
+        assert(loop_event);
+
+        log_device_debug(event->dev, "SEQNUM=%" PRIu64 " blocked by SEQNUM=%" PRIu64,
+                         event->seqnum, loop_event->seqnum);
+
+        event->blocker_seqnum = loop_event->seqnum;
+        return true;
+
+no_blocker:
+        event->blocker_seqnum = event->seqnum;
+        return false;
+}
+
+static int event_queue_start(Manager *manager) {
+        int r;
+
+        assert(manager);
+
+        if (!manager->events || manager->exit || manager->stop_exec_queue)
+                return 0;
+
+        /* To make the stack directory /run/udev/links cleaned up later. */
+        manager->udev_node_needs_cleanup = true;
+
+        r = event_source_disable(manager->kill_workers_event);
+        if (r < 0)
+                log_warning_errno(r, "Failed to disable event source for cleaning up idle workers, ignoring: %m");
+
+        manager_reload(manager, /* force = */ false);
+
+        LIST_FOREACH(event, event, manager->events) {
+                if (event->state != EVENT_QUEUED)
+                        continue;
+
+                /* do not start event if parent or child event is still running or queued */
+                r = event_is_blocked(event);
+                if (r > 0)
+                        continue;
+                if (r < 0)
+                        log_device_warning_errno(event->dev, r,
+                                                 "Failed to check dependencies for event (SEQNUM=%"PRIu64", ACTION=%s), "
+                                                 "assuming there is no blocking event, ignoring: %m",
+                                                 event->seqnum,
+                                                 strna(device_action_to_string(event->action)));
+
+                r = event_run(event);
+                if (r <= 0) /* 0 means there are no idle workers. Let's escape from the loop. */
+                        return r;
+        }
+
+        return 0;
+}
+
+static int on_event_retry(sd_event_source *s, uint64_t usec, void *userdata) {
+        /* This does nothing. The on_post() callback will start the event if there exists an idle worker. */
+        return 1;
+}
+
+static int event_requeue(Event *event) {
+        usec_t now_usec;
+        int r;
+
+        assert(event);
+        assert(event->manager);
+        assert(event->manager->event);
+
+        event->timeout_warning_event = sd_event_source_disable_unref(event->timeout_warning_event);
+        event->timeout_event = sd_event_source_disable_unref(event->timeout_event);
+
+        /* add a short delay to suppress busy loop */
+        r = sd_event_now(event->manager->event, CLOCK_BOOTTIME, &now_usec);
+        if (r < 0)
+                return log_device_warning_errno(event->dev, r,
+                                                "Failed to get current time, "
+                                                "skipping event (SEQNUM=%"PRIu64", ACTION=%s): %m",
+                                                event->seqnum, strna(device_action_to_string(event->action)));
+
+        if (event->retry_again_timeout_usec > 0 && event->retry_again_timeout_usec <= now_usec)
+                return log_device_warning_errno(event->dev, SYNTHETIC_ERRNO(ETIMEDOUT),
+                                                "The underlying block device is locked by a process more than %s, "
+                                                "skipping event (SEQNUM=%"PRIu64", ACTION=%s).",
+                                                FORMAT_TIMESPAN(EVENT_RETRY_TIMEOUT_USEC, USEC_PER_MINUTE),
+                                                event->seqnum, strna(device_action_to_string(event->action)));
+
+        event->retry_again_next_usec = usec_add(now_usec, EVENT_RETRY_INTERVAL_USEC);
+        if (event->retry_again_timeout_usec == 0)
+                event->retry_again_timeout_usec = usec_add(now_usec, EVENT_RETRY_TIMEOUT_USEC);
+
+        r = event_reset_time_relative(event->manager->event, &event->retry_event_source,
+                                      CLOCK_MONOTONIC, EVENT_RETRY_INTERVAL_USEC, 0,
+                                      on_event_retry, NULL,
+                                      0, "retry-event", true);
+        if (r < 0)
+                return log_device_warning_errno(event->dev, r, "Failed to reset timer event source for retrying event, "
+                                                "skipping event (SEQNUM=%"PRIu64", ACTION=%s): %m",
+                                                event->seqnum, strna(device_action_to_string(event->action)));
+
+        if (event->worker && event->worker->event == event)
+                event->worker->event = NULL;
+        event->worker = NULL;
+
+        event->state = EVENT_QUEUED;
+        return 0;
+}
+
+static int event_queue_assume_block_device_unlocked(Manager *manager, sd_device *dev) {
+        const char *devname;
+        int r;
+
+        /* When a new event for a block device is queued or we get an inotify event, assume that the
+         * device is not locked anymore. The assumption may not be true, but that should not cause any
+         * issues, as in that case events will be requeued soon. */
+
+        r = device_get_whole_disk(dev, NULL, &devname);
+        if (r <= 0)
+                return r;
+
+        LIST_FOREACH(event, event, manager->events) {
+                const char *event_devname;
+
+                if (event->state != EVENT_QUEUED)
+                        continue;
+
+                if (event->retry_again_next_usec == 0)
+                        continue;
+
+                if (device_get_whole_disk(event->dev, NULL, &event_devname) <= 0)
+                        continue;
+
+                if (!streq(devname, event_devname))
+                        continue;
+
+                event->retry_again_next_usec = 0;
+        }
+
+        return 0;
 }
 
 static int event_queue_insert(Manager *manager, sd_device *dev) {
-        _cleanup_(sd_device_unrefp) sd_device *clone = NULL;
-        struct event *event;
+        const char *devpath, *devpath_old = NULL, *id = NULL, *devnode = NULL;
+        sd_device_action_t action;
         uint64_t seqnum;
+        Event *event;
         int r;
 
         assert(manager);
@@ -700,31 +1106,46 @@
         if (r < 0)
                 return r;
 
-        /* Save original device to restore the state on failures. */
-        r = device_shallow_clone(dev, &clone);
+        r = sd_device_get_action(dev, &action);
         if (r < 0)
                 return r;
 
-        r = device_copy_properties(clone, dev);
+        r = sd_device_get_devpath(dev, &devpath);
         if (r < 0)
                 return r;
 
-        event = new(struct event, 1);
+        r = sd_device_get_property_value(dev, "DEVPATH_OLD", &devpath_old);
+        if (r < 0 && r != -ENOENT)
+                return r;
+
+        r = device_get_device_id(dev, &id);
+        if (r < 0 && r != -ENOENT)
+                return r;
+
+        r = sd_device_get_devname(dev, &devnode);
+        if (r < 0 && r != -ENOENT)
+                return r;
+
+        event = new(Event, 1);
         if (!event)
                 return -ENOMEM;
 
-        *event = (struct event) {
+        *event = (Event) {
                 .manager = manager,
                 .dev = sd_device_ref(dev),
-                .dev_kernel = TAKE_PTR(clone),
                 .seqnum = seqnum,
+                .action = action,
+                .id = id,
+                .devpath = devpath,
+                .devpath_old = devpath_old,
+                .devnode = devnode,
                 .state = EVENT_QUEUED,
         };
 
-        if (LIST_IS_EMPTY(manager->events)) {
+        if (!manager->events) {
                 r = touch("/run/udev/queue");
                 if (r < 0)
-                        log_warning_errno(r, "Failed to touch /run/udev/queue: %m");
+                        log_warning_errno(r, "Failed to touch /run/udev/queue, ignoring: %m");
         }
 
         LIST_APPEND(event, manager->events, event);
@@ -734,257 +1155,31 @@
         return 0;
 }
 
-static void manager_kill_workers(Manager *manager, bool force) {
-        struct worker *worker;
+static int on_uevent(sd_device_monitor *monitor, sd_device *dev, void *userdata) {
+        Manager *manager = ASSERT_PTR(userdata);
+        int r;
 
-        assert(manager);
+        DEVICE_TRACE_POINT(kernel_uevent_received, dev);
 
-        HASHMAP_FOREACH(worker, manager->workers) {
-                if (worker->state == WORKER_KILLED)
-                        continue;
+        device_ensure_usec_initialized(dev, NULL);
 
-                if (worker->state == WORKER_RUNNING && !force) {
-                        worker->state = WORKER_KILLING;
-                        continue;
-                }
-
-                worker->state = WORKER_KILLED;
-                (void) kill(worker->pid, SIGTERM);
-        }
-}
-
-/* lookup event for identical, parent, child device */
-static int is_device_busy(Manager *manager, struct event *event) {
-        const char *subsystem, *devpath, *devpath_old = NULL;
-        dev_t devnum = makedev(0, 0);
-        struct event *loop_event;
-        size_t devpath_len;
-        int r, ifindex = 0;
-        bool is_block;
-
-        r = sd_device_get_subsystem(event->dev, &subsystem);
-        if (r < 0)
-                return r;
-
-        is_block = streq(subsystem, "block");
-
-        r = sd_device_get_devpath(event->dev, &devpath);
-        if (r < 0)
-                return r;
-
-        devpath_len = strlen(devpath);
-
-        r = sd_device_get_property_value(event->dev, "DEVPATH_OLD", &devpath_old);
-        if (r < 0 && r != -ENOENT)
-                return r;
-
-        r = sd_device_get_devnum(event->dev, &devnum);
-        if (r < 0 && r != -ENOENT)
-                return r;
-
-        r = sd_device_get_ifindex(event->dev, &ifindex);
-        if (r < 0 && r != -ENOENT)
-                return r;
-
-        /* check if queue contains events we depend on */
-        LIST_FOREACH(event, loop_event, manager->events) {
-                size_t loop_devpath_len, common;
-                const char *loop_devpath;
-
-                /* we already found a later event, earlier cannot block us, no need to check again */
-                if (loop_event->seqnum < event->delaying_seqnum)
-                        continue;
-
-                /* event we checked earlier still exists, no need to check again */
-                if (loop_event->seqnum == event->delaying_seqnum)
-                        return true;
-
-                /* found ourself, no later event can block us */
-                if (loop_event->seqnum >= event->seqnum)
-                        break;
-
-                /* check major/minor */
-                if (major(devnum) != 0) {
-                        const char *s;
-                        dev_t d;
-
-                        if (sd_device_get_subsystem(loop_event->dev, &s) < 0)
-                                continue;
-
-                        if (sd_device_get_devnum(loop_event->dev, &d) >= 0 &&
-                            devnum == d && is_block == streq(s, "block"))
-                                goto set_delaying_seqnum;
-                }
-
-                /* check network device ifindex */
-                if (ifindex > 0) {
-                        int i;
-
-                        if (sd_device_get_ifindex(loop_event->dev, &i) >= 0 &&
-                            ifindex == i)
-                                goto set_delaying_seqnum;
-                }
-
-                if (sd_device_get_devpath(loop_event->dev, &loop_devpath) < 0)
-                        continue;
-
-                /* check our old name */
-                if (devpath_old && streq(devpath_old, loop_devpath))
-                        goto set_delaying_seqnum;
-
-                loop_devpath_len = strlen(loop_devpath);
-
-                /* compare devpath */
-                common = MIN(devpath_len, loop_devpath_len);
-
-                /* one devpath is contained in the other? */
-                if (!strneq(devpath, loop_devpath, common))
-                        continue;
-
-                /* identical device event found */
-                if (devpath_len == loop_devpath_len)
-                        goto set_delaying_seqnum;
-
-                /* parent device event found */
-                if (devpath[common] == '/')
-                        goto set_delaying_seqnum;
-
-                /* child device event found */
-                if (loop_devpath[common] == '/')
-                        goto set_delaying_seqnum;
+        r = event_queue_insert(manager, dev);
+        if (r < 0) {
+                log_device_error_errno(dev, r, "Failed to insert device into event queue: %m");
+                return 1;
         }
 
-        return false;
-
-set_delaying_seqnum:
-        log_device_debug(event->dev, "SEQNUM=%" PRIu64 " blocked by SEQNUM=%" PRIu64,
-                         event->seqnum, loop_event->seqnum);
-
-        event->delaying_seqnum = loop_event->seqnum;
-        return true;
-}
-
-static void manager_exit(Manager *manager) {
-        assert(manager);
-
-        manager->exit = true;
-
-        sd_notify(false,
-                  "STOPPING=1\n"
-                  "STATUS=Starting shutdown...");
-
-        /* close sources of new events and discard buffered events */
-        manager->ctrl = udev_ctrl_unref(manager->ctrl);
-
-        manager->inotify_event = sd_event_source_unref(manager->inotify_event);
-        manager->inotify_fd = safe_close(manager->inotify_fd);
-
-        manager->monitor = sd_device_monitor_unref(manager->monitor);
-
-        /* discard queued events and kill workers */
-        event_queue_cleanup(manager, EVENT_QUEUED);
-        manager_kill_workers(manager, true);
-}
-
-/* reload requested, HUP signal received, rules changed, builtin changed */
-static void manager_reload(Manager *manager) {
-
-        assert(manager);
-
-        sd_notify(false,
-                  "RELOADING=1\n"
-                  "STATUS=Flushing configuration...");
-
-        manager_kill_workers(manager, false);
-        manager->rules = udev_rules_free(manager->rules);
-        udev_builtin_exit();
-
-        sd_notifyf(false,
-                   "READY=1\n"
-                   "STATUS=Processing with %u children at max", arg_children_max);
-}
-
-static int on_kill_workers_event(sd_event_source *s, uint64_t usec, void *userdata) {
-        Manager *manager = userdata;
-
-        assert(manager);
-
-        log_debug("Cleanup idle workers");
-        manager_kill_workers(manager, false);
+        (void) event_queue_assume_block_device_unlocked(manager, dev);
 
         return 1;
 }
 
-static void event_queue_start(Manager *manager) {
-        struct event *event;
-        usec_t usec;
-        int r;
-
-        assert(manager);
-
-        if (LIST_IS_EMPTY(manager->events) ||
-            manager->exit || manager->stop_exec_queue)
-                return;
-
-        assert_se(sd_event_now(manager->event, CLOCK_MONOTONIC, &usec) >= 0);
-        /* check for changed config, every 3 seconds at most */
-        if (manager->last_usec == 0 ||
-            usec - manager->last_usec > 3 * USEC_PER_SEC) {
-                if (udev_rules_check_timestamp(manager->rules) ||
-                    udev_builtin_validate())
-                        manager_reload(manager);
-
-                manager->last_usec = usec;
-        }
-
-        r = event_source_disable(manager->kill_workers_event);
-        if (r < 0)
-                log_warning_errno(r, "Failed to disable event source for cleaning up idle workers, ignoring: %m");
-
-        udev_builtin_init();
-
-        if (!manager->rules) {
-                r = udev_rules_load(&manager->rules, arg_resolve_name_timing);
-                if (r < 0) {
-                        log_warning_errno(r, "Failed to read udev rules: %m");
-                        return;
-                }
-        }
-
-        LIST_FOREACH(event, event, manager->events) {
-                if (event->state != EVENT_QUEUED)
-                        continue;
-
-                /* do not start event if parent or child event is still running */
-                if (is_device_busy(manager, event) != 0)
-                        continue;
-
-                event_run(manager, event);
-        }
-}
-
-static void event_queue_cleanup(Manager *manager, enum event_state match_type) {
-        struct event *event, *tmp;
-
-        LIST_FOREACH_SAFE(event, event, tmp, manager->events) {
-                if (match_type != EVENT_UNDEF && match_type != event->state)
-                        continue;
-
-                event_free(event);
-        }
-}
-
 static int on_worker(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Manager *manager = userdata;
-
-        assert(manager);
+        Manager *manager = ASSERT_PTR(userdata);
 
         for (;;) {
-                struct worker_message msg;
-                struct iovec iovec = {
-                        .iov_base = &msg,
-                        .iov_len = sizeof(msg),
-                };
+                EventResult result;
+                struct iovec iovec = IOVEC_MAKE(&result, sizeof(result));
                 CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred))) control;
                 struct msghdr msghdr = {
                         .msg_iov = &iovec,
@@ -994,7 +1189,7 @@
                 };
                 ssize_t size;
                 struct ucred *ucred;
-                struct worker *worker;
+                Worker *worker;
 
                 size = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT);
                 if (size == -EINTR)
@@ -1007,7 +1202,7 @@
 
                 cmsg_close_all(&msghdr);
 
-                if (size != sizeof(struct worker_message)) {
+                if (size != sizeof(result)) {
                         log_warning("Ignoring worker message with invalid size %zi bytes", size);
                         continue;
                 }
@@ -1032,48 +1227,37 @@
                         worker->state = WORKER_IDLE;
 
                 /* worker returned */
+                if (result == EVENT_RESULT_TRY_AGAIN &&
+                    event_requeue(worker->event) < 0)
+                        device_broadcast(manager->monitor, worker->event->dev, -ETIMEDOUT);
+
+                /* When event_requeue() succeeds, worker->event is NULL, and event_free() handles NULL gracefully. */
                 event_free(worker->event);
         }
 
-        /* we have free workers, try to schedule events */
-        event_queue_start(manager);
-
-        return 1;
-}
-
-static int on_uevent(sd_device_monitor *monitor, sd_device *dev, void *userdata) {
-        Manager *manager = userdata;
-        int r;
-
-        assert(manager);
-
-        DEVICE_TRACE_POINT(kernel_uevent_received, dev);
-
-        device_ensure_usec_initialized(dev, NULL);
-
-        r = event_queue_insert(manager, dev);
-        if (r < 0) {
-                log_device_error_errno(dev, r, "Failed to insert device into event queue: %m");
-                return 1;
-        }
-
-        /* we have fresh events, try to schedule them */
-        event_queue_start(manager);
-
         return 1;
 }
 
 /* receive the udevd message from userspace */
-static int on_ctrl_msg(struct udev_ctrl *uctrl, enum udev_ctrl_msg_type type, const union udev_ctrl_msg_value *value, void *userdata) {
-        Manager *manager = userdata;
+static int on_ctrl_msg(UdevCtrl *uctrl, UdevCtrlMessageType type, const UdevCtrlMessageValue *value, void *userdata) {
+        Manager *manager = ASSERT_PTR(userdata);
         int r;
 
         assert(value);
-        assert(manager);
 
         switch (type) {
         case UDEV_CTRL_SET_LOG_LEVEL:
+                if ((value->intval & LOG_PRIMASK) != value->intval) {
+                        log_debug("Received invalid udev control message (SET_LOG_LEVEL, %i), ignoring.", value->intval);
+                        break;
+                }
+
                 log_debug("Received udev control message (SET_LOG_LEVEL), setting log_level=%i", value->intval);
+
+                r = log_get_max_level();
+                if (r == value->intval)
+                        break;
+
                 log_set_max_level(value->intval);
                 manager->log_level = value->intval;
                 manager_kill_workers(manager, false);
@@ -1085,11 +1269,11 @@
         case UDEV_CTRL_START_EXEC_QUEUE:
                 log_debug("Received udev control message (START_EXEC_QUEUE)");
                 manager->stop_exec_queue = false;
-                event_queue_start(manager);
+                /* It is not necessary to call event_queue_start() here, as it will be called in on_post() if necessary. */
                 break;
         case UDEV_CTRL_RELOAD:
                 log_debug("Received udev control message (RELOAD)");
-                manager_reload(manager);
+                manager_reload(manager, /* force = */ true);
                 break;
         case UDEV_CTRL_SET_ENV: {
                 _unused_ _cleanup_free_ char *old_val = NULL;
@@ -1154,9 +1338,7 @@
                 log_debug("Received udev control message (SET_MAX_CHILDREN), setting children_max=%i", value->intval);
                 arg_children_max = value->intval;
 
-                (void) sd_notifyf(false,
-                                  "READY=1\n"
-                                  "STATUS=Processing with %u children at max", arg_children_max);
+                notify_ready();
                 break;
         case UDEV_CTRL_PING:
                 log_debug("Received udev control message (PING)");
@@ -1191,148 +1373,98 @@
 }
 
 static int synthesize_change(sd_device *dev) {
-        const char *subsystem, *sysname, *devtype;
-        int r;
-
-        r = sd_device_get_subsystem(dev, &subsystem);
-        if (r < 0)
-                return r;
-
-        r = sd_device_get_devtype(dev, &devtype);
-        if (r < 0)
-                return r;
+        _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
+        bool part_table_read;
+        const char *sysname;
+        sd_device *d;
+        int r, k;
 
         r = sd_device_get_sysname(dev, &sysname);
         if (r < 0)
                 return r;
 
-        if (streq_ptr(subsystem, "block") &&
-            streq_ptr(devtype, "disk") &&
-            !startswith(sysname, "dm-")) {
-                _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
-                bool part_table_read = false, has_partitions = false;
-                const char *devname;
-                sd_device *d;
-                int fd;
+        if (startswith(sysname, "dm-") || block_device_is_whole_disk(dev) <= 0)
+                return synthesize_change_one(dev, dev);
 
-                r = sd_device_get_devname(dev, &devname);
-                if (r < 0)
-                        return r;
+        r = blockdev_reread_partition_table(dev);
+        if (r < 0)
+                log_device_debug_errno(dev, r, "Failed to re-read partition table, ignoring: %m");
+        part_table_read = r >= 0;
 
-                /* Try to re-read the partition table. This only succeeds if none of the devices is
-                 * busy. The kernel returns 0 if no partition table is found, and we will not get an
-                 * event for the disk. */
-                fd = open(devname, O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK);
-                if (fd >= 0) {
-                        r = flock(fd, LOCK_EX|LOCK_NB);
-                        if (r >= 0)
-                                r = ioctl(fd, BLKRRPART, 0);
+        /* search for partitions */
+        r = partition_enumerator_new(dev, &e);
+        if (r < 0)
+                return r;
 
-                        close(fd);
-                        if (r >= 0)
-                                part_table_read = true;
-                }
+        /* We have partitions and re-read the table, the kernel already sent out a "change"
+         * event for the disk, and "remove/add" for all partitions. */
+        if (part_table_read && sd_device_enumerator_get_device_first(e))
+                return 0;
 
-                /* search for partitions */
-                r = sd_device_enumerator_new(&e);
-                if (r < 0)
-                        return r;
+        /* We have partitions but re-reading the partition table did not work, synthesize
+         * "change" for the disk and all partitions. */
+        r = synthesize_change_one(dev, dev);
+        FOREACH_DEVICE(e, d) {
+                k = synthesize_change_one(dev, d);
+                if (k < 0 && r >= 0)
+                        r = k;
+        }
 
-                r = sd_device_enumerator_allow_uninitialized(e);
-                if (r < 0)
-                        return r;
-
-                r = sd_device_enumerator_add_match_parent(e, dev);
-                if (r < 0)
-                        return r;
-
-                r = sd_device_enumerator_add_match_subsystem(e, "block", true);
-                if (r < 0)
-                        return r;
-
-                FOREACH_DEVICE(e, d) {
-                        const char *t;
-
-                        if (sd_device_get_devtype(d, &t) < 0 || !streq(t, "partition"))
-                                continue;
-
-                        has_partitions = true;
-                        break;
-                }
-
-                /* We have partitions and re-read the table, the kernel already sent out a "change"
-                 * event for the disk, and "remove/add" for all partitions. */
-                if (part_table_read && has_partitions)
-                        return 0;
-
-                /* We have partitions but re-reading the partition table did not work, synthesize
-                 * "change" for the disk and all partitions. */
-                (void) synthesize_change_one(dev, dev);
-
-                FOREACH_DEVICE(e, d) {
-                        const char *t;
-
-                        if (sd_device_get_devtype(d, &t) < 0 || !streq(t, "partition"))
-                                continue;
-
-                        (void) synthesize_change_one(dev, d);
-                }
-
-        } else
-                (void) synthesize_change_one(dev, dev);
-
-        return 0;
+        return r;
 }
 
 static int on_inotify(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
         union inotify_event_buffer buffer;
-        struct inotify_event *e;
         ssize_t l;
         int r;
 
-        assert(manager);
-
-        r = event_source_disable(manager->kill_workers_event);
-        if (r < 0)
-                log_warning_errno(r, "Failed to disable event source for cleaning up idle workers, ignoring: %m");
-
         l = read(fd, &buffer, sizeof(buffer));
         if (l < 0) {
-                if (IN_SET(errno, EAGAIN, EINTR))
-                        return 1;
+                if (ERRNO_IS_TRANSIENT(errno))
+                        return 0;
 
                 return log_error_errno(errno, "Failed to read inotify fd: %m");
         }
 
-        FOREACH_INOTIFY_EVENT(e, buffer, l) {
+        FOREACH_INOTIFY_EVENT_WARN(e, buffer, l) {
                 _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
                 const char *devnode;
 
+                /* Do not handle IN_IGNORED here. Especially, do not try to call udev_watch_end() from the
+                 * main process. Otherwise, the pair of the symlinks may become inconsistent, and several
+                 * garbage may remain. The old symlinks are removed by a worker that processes the
+                 * corresponding 'remove' uevent;
+                 * udev_event_execute_rules() -> event_execute_rules_on_remove() -> udev_watch_end(). */
+
+                if (!FLAGS_SET(e->mask, IN_CLOSE_WRITE))
+                        continue;
+
                 r = device_new_from_watch_handle(&dev, e->wd);
                 if (r < 0) {
+                        /* Device may be removed just after closed. */
                         log_debug_errno(r, "Failed to create sd_device object from watch handle, ignoring: %m");
                         continue;
                 }
 
-                if (sd_device_get_devname(dev, &devnode) < 0)
+                r = sd_device_get_devname(dev, &devnode);
+                if (r < 0) {
+                        /* Also here, device may be already removed. */
+                        log_device_debug_errno(dev, r, "Failed to get device node, ignoring: %m");
                         continue;
+                }
 
-                log_device_debug(dev, "Inotify event: %x for %s", e->mask, devnode);
-                if (e->mask & IN_CLOSE_WRITE)
-                        (void) synthesize_change(dev);
+                log_device_debug(dev, "Received inotify event for %s.", devnode);
 
-                /* Do not handle IN_IGNORED here. It should be handled by worker in 'remove' uevent;
-                 * udev_event_execute_rules() -> event_execute_rules_on_remove() -> udev_watch_end(). */
+                (void) event_queue_assume_block_device_unlocked(manager, dev);
+                (void) synthesize_change(dev);
         }
 
-        return 1;
+        return 0;
 }
 
 static int on_sigterm(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *manager = userdata;
-
-        assert(manager);
+        Manager *manager = ASSERT_PTR(userdata);
 
         manager_exit(manager);
 
@@ -1340,103 +1472,93 @@
 }
 
 static int on_sighup(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
 
-        assert(manager);
-
-        manager_reload(manager);
+        manager_reload(manager, /* force = */ true);
 
         return 1;
 }
 
-static int on_sigchld(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *manager = userdata;
-        int r;
+static int on_sigchld(sd_event_source *s, const siginfo_t *si, void *userdata) {
+        Worker *worker = ASSERT_PTR(userdata);
+        Manager *manager = ASSERT_PTR(worker->manager);
+        sd_device *dev = worker->event ? ASSERT_PTR(worker->event->dev) : NULL;
+        EventResult result;
 
-        assert(manager);
+        assert(si);
 
-        for (;;) {
-                pid_t pid;
-                int status;
-                struct worker *worker;
+        switch (si->si_code) {
+        case CLD_EXITED:
+                if (si->si_status == 0)
+                        log_device_debug(dev, "Worker ["PID_FMT"] exited.", si->si_pid);
+                else
+                        log_device_warning(dev, "Worker ["PID_FMT"] exited with return code %i.",
+                                           si->si_pid, si->si_status);
+                result = EVENT_RESULT_EXIT_STATUS_BASE + si->si_status;
+                break;
 
-                pid = waitpid(-1, &status, WNOHANG);
-                if (pid <= 0)
-                        break;
+        case CLD_KILLED:
+        case CLD_DUMPED:
+                log_device_warning(dev, "Worker ["PID_FMT"] terminated by signal %i (%s).",
+                                   si->si_pid, si->si_status, signal_to_string(si->si_status));
+                result = EVENT_RESULT_SIGNAL_BASE + si->si_status;
+                break;
 
-                worker = hashmap_get(manager->workers, PID_TO_PTR(pid));
-                if (!worker) {
-                        log_warning("Worker ["PID_FMT"] is unknown, ignoring", pid);
-                        continue;
-                }
-
-                if (WIFEXITED(status)) {
-                        if (WEXITSTATUS(status) == 0)
-                                log_debug("Worker ["PID_FMT"] exited", pid);
-                        else
-                                log_warning("Worker ["PID_FMT"] exited with return code %i", pid, WEXITSTATUS(status));
-                } else if (WIFSIGNALED(status))
-                        log_warning("Worker ["PID_FMT"] terminated by signal %i (%s)", pid, WTERMSIG(status), signal_to_string(WTERMSIG(status)));
-                else if (WIFSTOPPED(status)) {
-                        log_info("Worker ["PID_FMT"] stopped", pid);
-                        continue;
-                } else if (WIFCONTINUED(status)) {
-                        log_info("Worker ["PID_FMT"] continued", pid);
-                        continue;
-                } else
-                        log_warning("Worker ["PID_FMT"] exit with status 0x%04x", pid, status);
-
-                if ((!WIFEXITED(status) || WEXITSTATUS(status) != 0) && worker->event) {
-                        log_device_error(worker->event->dev, "Worker ["PID_FMT"] failed", pid);
-
-                        /* delete state from disk */
-                        device_delete_db(worker->event->dev);
-                        device_tag_index(worker->event->dev, NULL, false);
-
-                        if (manager->monitor) {
-                                /* forward kernel event without amending it */
-                                r = device_monitor_send_device(manager->monitor, NULL, worker->event->dev_kernel);
-                                if (r < 0)
-                                        log_device_error_errno(worker->event->dev_kernel, r, "Failed to send back device to kernel: %m");
-                        }
-                }
-
-                worker_free(worker);
+        default:
+                assert_not_reached();
         }
 
-        /* we can start new workers, try to schedule events */
-        event_queue_start(manager);
+        if (result != EVENT_RESULT_SUCCESS && dev) {
+                /* delete state from disk */
+                device_delete_db(dev);
+                device_tag_index(dev, NULL, false);
 
-        /* Disable unnecessary cleanup event */
-        if (hashmap_isempty(manager->workers)) {
-                r = event_source_disable(manager->kill_workers_event);
-                if (r < 0)
-                        log_warning_errno(r, "Failed to disable event source for cleaning up idle workers, ignoring: %m");
+                /* Forward kernel event to libudev listeners */
+                device_broadcast(manager->monitor, dev, result);
         }
 
+        worker_free(worker);
+
         return 1;
 }
 
 static int on_post(sd_event_source *s, void *userdata) {
-        Manager *manager = userdata;
+        Manager *manager = ASSERT_PTR(userdata);
 
-        assert(manager);
-
-        if (!LIST_IS_EMPTY(manager->events))
+        if (manager->events) {
+                /* Try to process pending events if idle workers exist. Why is this necessary?
+                 * When a worker finished an event and became idle, even if there was a pending event,
+                 * the corresponding device might have been locked and the processing of the event
+                 * delayed for a while, preventing the worker from processing the event immediately.
+                 * Now, the device may be unlocked. Let's try again! */
+                event_queue_start(manager);
                 return 1;
+        }
 
-        /* There are no pending events. Let's cleanup idle process. */
+        /* There are no queued events. Let's remove /run/udev/queue and clean up the idle processes. */
+
+        if (unlink("/run/udev/queue") < 0) {
+                if (errno != ENOENT)
+                        log_warning_errno(errno, "Failed to unlink /run/udev/queue, ignoring: %m");
+        } else
+                log_debug("No events are queued, removing /run/udev/queue.");
 
         if (!hashmap_isempty(manager->workers)) {
                 /* There are idle workers */
-                (void) event_reset_time(manager->event, &manager->kill_workers_event, CLOCK_MONOTONIC,
-                                        now(CLOCK_MONOTONIC) + 3 * USEC_PER_SEC, USEC_PER_SEC,
-                                        on_kill_workers_event, manager, 0, "kill-workers-event", false);
+                (void) event_reset_time_relative(manager->event, &manager->kill_workers_event,
+                                                 CLOCK_MONOTONIC, 3 * USEC_PER_SEC, USEC_PER_SEC,
+                                                 on_kill_workers_event, manager,
+                                                 0, "kill-workers-event", false);
                 return 1;
         }
 
         /* There are no idle workers. */
 
+        if (manager->udev_node_needs_cleanup) {
+                (void) udev_node_cleanup();
+                manager->udev_node_needs_cleanup = false;
+        }
+
         if (manager->exit)
                 return sd_event_exit(manager->event, 0);
 
@@ -1448,7 +1570,7 @@
 }
 
 static int listen_fds(int *ret_ctrl, int *ret_netlink) {
-        int ctrl_fd = -1, netlink_fd = -1;
+        int ctrl_fd = -EBADF, netlink_fd = -EBADF;
         int fd, n;
 
         assert(ret_ctrl);
@@ -1459,7 +1581,7 @@
                 return n;
 
         for (fd = SD_LISTEN_FDS_START; fd < n + SD_LISTEN_FDS_START; fd++) {
-                if (sd_is_socket(fd, AF_LOCAL, SOCK_SEQPACKET, -1) > 0) {
+                if (sd_is_socket(fd, AF_UNIX, SOCK_SEQPACKET, -1) > 0) {
                         if (ctrl_fd >= 0)
                                 return -EINVAL;
                         ctrl_fd = fd;
@@ -1664,7 +1786,7 @@
                 case '?':
                         return -EINVAL;
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
 
                 }
         }
@@ -1672,20 +1794,71 @@
         return 1;
 }
 
-static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cgroup) {
+static int create_subcgroup(char **ret) {
+        _cleanup_free_ char *cgroup = NULL, *subcgroup = NULL;
+        int r;
+
+        if (getppid() != 1)
+                return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Not invoked by PID1.");
+
+        r = sd_booted();
+        if (r < 0)
+                return log_debug_errno(r, "Failed to check if systemd is running: %m");
+        if (r == 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "systemd is not running.");
+
+        /* Get our own cgroup, we regularly kill everything udev has left behind.
+         * We only do this on systemd systems, and only if we are directly spawned
+         * by PID1. Otherwise we are not guaranteed to have a dedicated cgroup. */
+
+        r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &cgroup);
+        if (r < 0) {
+                if (IN_SET(r, -ENOENT, -ENOMEDIUM))
+                        return log_debug_errno(r, "Dedicated cgroup not found: %m");
+                return log_debug_errno(r, "Failed to get cgroup: %m");
+        }
+
+        r = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, cgroup, "trusted.delegate");
+        if (r == 0 || (r < 0 && ERRNO_IS_XATTR_ABSENT(r)))
+                return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "The cgroup %s is not delegated to us.", cgroup);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to read trusted.delegate attribute: %m");
+
+        /* We are invoked with our own delegated cgroup tree, let's move us one level down, so that we
+         * don't collide with the "no processes in inner nodes" rule of cgroups, when the service
+         * manager invokes the ExecReload= job in the .control/ subcgroup. */
+
+        subcgroup = path_join(cgroup, "/udev");
+        if (!subcgroup)
+                return log_oom_debug();
+
+        r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, subcgroup, 0);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to create %s subcgroup: %m", subcgroup);
+
+        log_debug("Created %s subcgroup.", subcgroup);
+        if (ret)
+                *ret = TAKE_PTR(subcgroup);
+        return 0;
+}
+
+static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent) {
         _cleanup_(manager_freep) Manager *manager = NULL;
+        _cleanup_free_ char *cgroup = NULL;
         int r;
 
         assert(ret);
 
+        (void) create_subcgroup(&cgroup);
+
         manager = new(Manager, 1);
         if (!manager)
                 return log_oom();
 
         *manager = (Manager) {
-                .inotify_fd = -1,
-                .worker_watch = { -1, -1 },
-                .cgroup = cgroup,
+                .inotify_fd = -EBADF,
+                .worker_watch = PIPE_EBADF,
+                .cgroup = TAKE_PTR(cgroup),
         };
 
         r = udev_ctrl_new_from_fd(&manager->ctrl, fd_ctrl);
@@ -1709,6 +1882,8 @@
                         log_warning_errno(r, "Failed to set receive buffer size for device monitor, ignoring: %m");
         }
 
+        (void) sd_device_monitor_set_description(manager->monitor, "manager");
+
         r = device_monitor_enable_receiving(manager->monitor);
         if (r < 0)
                 return log_error_errno(r, "Failed to bind netlink socket: %m");
@@ -1726,7 +1901,7 @@
         manager->pid = getpid_cached();
 
         /* unnamed socket from workers to the main daemon */
-        r = socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, manager->worker_watch);
+        r = socketpair(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0, manager->worker_watch);
         if (r < 0)
                 return log_error_errno(errno, "Failed to create socketpair for communicating with workers: %m");
 
@@ -1761,10 +1936,6 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to create SIGHUP event source: %m");
 
-        r = sd_event_add_signal(manager->event, NULL, SIGCHLD, on_sigchld, manager);
-        if (r < 0)
-                return log_error_errno(r, "Failed to create SIGCHLD event source: %m");
-
         r = sd_event_set_watchdog(manager->event, true);
         if (r < 0)
                 return log_error_errno(r, "Failed to create watchdog event source: %m");
@@ -1797,8 +1968,6 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to start device monitor: %m");
 
-        (void) sd_event_source_set_description(sd_device_monitor_get_event_source(manager->monitor), "device-monitor");
-
         r = sd_event_add_io(manager->event, NULL, fd_worker, EPOLLIN, on_worker, manager);
         if (r < 0)
                 return log_error_errno(r, "Failed to create worker event source: %m");
@@ -1807,34 +1976,31 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to create post event source: %m");
 
+        manager->last_usec = now(CLOCK_MONOTONIC);
+
         udev_builtin_init();
 
         r = udev_rules_load(&manager->rules, arg_resolve_name_timing);
-        if (!manager->rules)
+        if (r < 0)
                 return log_error_errno(r, "Failed to read udev rules: %m");
 
         r = udev_rules_apply_static_dev_perms(manager->rules);
         if (r < 0)
-                log_error_errno(r, "Failed to apply permissions on static device nodes: %m");
+                log_warning_errno(r, "Failed to apply permissions on static device nodes, ignoring: %m");
 
-        (void) sd_notifyf(false,
-                          "READY=1\n"
-                          "STATUS=Processing with %u children at max", arg_children_max);
+        notify_ready();
 
         r = sd_event_loop(manager->event);
         if (r < 0)
                 log_error_errno(r, "Event loop failed: %m");
 
-        sd_notify(false,
-                  "STOPPING=1\n"
-                  "STATUS=Shutting down...");
+        (void) sd_notify(/* unset= */ false, NOTIFY_STOPPING);
         return r;
 }
 
 int run_udevd(int argc, char *argv[]) {
-        _cleanup_free_ char *cgroup = NULL;
         _cleanup_(manager_freep) Manager *manager = NULL;
-        int fd_ctrl = -1, fd_uevent = -1;
+        int fd_ctrl = -EBADF, fd_uevent = -EBADF;
         int r;
 
         log_set_target(LOG_TARGET_AUTO);
@@ -1885,35 +2051,22 @@
         if (r < 0)
                 return r;
 
-        r = mkdir_errno_wrapper("/run/udev", 0755);
+        r = RET_NERRNO(mkdir("/run/udev", 0755));
         if (r < 0 && r != -EEXIST)
                 return log_error_errno(r, "Failed to create /run/udev: %m");
 
-        if (getppid() == 1 && sd_booted() > 0) {
-                /* Get our own cgroup, we regularly kill everything udev has left behind.
-                 * We only do this on systemd systems, and only if we are directly spawned
-                 * by PID1. Otherwise we are not guaranteed to have a dedicated cgroup. */
-                r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &cgroup);
-                if (r < 0) {
-                        if (IN_SET(r, -ENOENT, -ENOMEDIUM))
-                                log_debug_errno(r, "Dedicated cgroup not found: %m");
-                        else
-                                log_warning_errno(r, "Failed to get cgroup: %m");
-                }
-        }
-
         r = listen_fds(&fd_ctrl, &fd_uevent);
         if (r < 0)
                 return log_error_errno(r, "Failed to listen on fds: %m");
 
-        r = manager_new(&manager, fd_ctrl, fd_uevent, cgroup);
+        r = manager_new(&manager, fd_ctrl, fd_uevent);
         if (r < 0)
                 return log_error_errno(r, "Failed to create manager: %m");
 
         if (arg_daemonize) {
                 pid_t pid;
 
-                log_info("Starting version " GIT_VERSION);
+                log_info("Starting systemd-udevd version " GIT_VERSION);
 
                 /* connect /dev/null to stdin, stdout, stderr */
                 if (log_get_max_level() < LOG_DEBUG) {
diff --git a/src/udev/v4l_id/v4l_id.c b/src/udev/v4l_id/v4l_id.c
index 26b634e..4f163c4 100644
--- a/src/udev/v4l_id/v4l_id.c
+++ b/src/udev/v4l_id/v4l_id.c
@@ -27,14 +27,13 @@
 #include <linux/videodev2.h>
 
 #include "fd-util.h"
-#include "util.h"
 
 int main(int argc, char *argv[]) {
         static const struct option options[] = {
                 { "help", no_argument, NULL, 'h' },
                 {}
         };
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         char *device;
         struct v4l2_capability v2cap;
         int c;
@@ -52,7 +51,7 @@
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
 
         device = argv[optind];
diff --git a/src/ukify/test/example.signing.crt.base64 b/src/ukify/test/example.signing.crt.base64
new file mode 100644
index 0000000..694d13b
--- /dev/null
+++ b/src/ukify/test/example.signing.crt.base64
@@ -0,0 +1,23 @@
+LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURsVENDQW4yZ0F3SUJBZ0lVTzlqUWhhblhj
+b3ViOERzdXlMMWdZbksrR1lvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1dURUxNQWtHQTFVRUJoTUNX
+Rmd4RlRBVEJnTlZCQWNNREVSbFptRjFiSFFnUTJsMGVURWNNQm9HQTFVRQpDZ3dUUkdWbVlYVnNk
+Q0JEYjIxd1lXNTVJRXgwWkRFVk1CTUdBMVVFQXd3TWEyVjVJSE5wWjI1cGJtbG5NQ0FYCkRUSXlN
+VEF5T1RFM01qY3dNVm9ZRHpNd01qSXdNekF4TVRjeU56QXhXakJaTVFzd0NRWURWUVFHRXdKWVdE
+RVYKTUJNR0ExVUVCd3dNUkdWbVlYVnNkQ0JEYVhSNU1Sd3dHZ1lEVlFRS0RCTkVaV1poZFd4MElF
+TnZiWEJoYm5rZwpUSFJrTVJVd0V3WURWUVFEREF4clpYa2djMmxuYm1sdWFXY3dnZ0VpTUEwR0NT
+cUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRREtVeHR4Y0d1aGYvdUp1SXRjWEhvdW0v
+RE9RL1RJM3BzUWlaR0ZWRkJzbHBicU5wZDUKa2JDaUFMNmgrY1FYaGRjUmlOT1dBR0wyMFZ1T2Rv
+VTZrYzlkdklGQnFzKzc2NHhvWGY1UGd2SlhvQUxSUGxDZAp4YVdPQzFsOFFIRHpxZ09SdnREMWNI
+WFoveTkvZ1YxVU1GK1FlYm12aUhRN0U4eGw1T2h5MG1TQVZYRDhBTitsCjdpMUR6N0NuTzhrMVph
+alhqYXlpNWV1WEV0TnFSZXNuVktRRElTQ0t2STFueUxySWxHRU1GZmFuUmRLQWthZ3MKalJnTmVh
+T3N3aklHNjV6UzFVdjJTZXcxVFpIaFhtUmd5TzRVT0JySHZlSml2T2hObzU3UlRKd0M2K2lGY0FG
+aApSSnorVmM2QUlSSkI1ZWtJUmdCN3VDNEI5ZmwydXdZKytMODNBZ01CQUFHalV6QlJNQjBHQTFV
+ZERnUVdCQlFqCllIMnpzVFlPQU51MkcweXk1QkxlOHBvbWZUQWZCZ05WSFNNRUdEQVdnQlFqWUgy
+enNUWU9BTnUyRzB5eTVCTGUKOHBvbWZUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BMEdDU3FHU0li
+M0RRRUJDd1VBQTRJQkFRQ2dxcmFXaE51dQptUmZPUjVxcURVcC83RkpIL1N6Zk1vaDBHL2lWRkhv
+OUpSS0tqMUZ2Q0VZc1NmeThYTmdaUDI5eS81Z0h4cmcrCjhwZWx6bWJLczdhUTRPK01TcmIzTm11
+V1IzT0M0alBoNENrM09ZbDlhQy9iYlJqSWFvMDJ6K29XQWNZZS9xYTEKK2ZsemZWVEUwMHJ5V1RM
+K0FJdDFEZEVqaG01WXNtYlgvbWtacUV1TjBtSVhhRXhSVE9walczUWRNeVRQaURTdApvanQvQWMv
+R2RUWDd0QkhPTk44Z3djaC91V293aVNORERMUm1wM2VScnlOZ3RPKzBISUd5Qm16ZWNsM0VlVEo2
+CnJzOGRWUFhqR1Z4dlZDb2tqQllrOWdxbkNGZEJCMGx4VXVNZldWdVkyRUgwSjI3aGh4SXNFc3ls
+VTNIR1EyK2MKN1JicVY4VTNSRzA4Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
diff --git a/src/ukify/test/example.signing.key.base64 b/src/ukify/test/example.signing.key.base64
new file mode 100644
index 0000000..88baedb
--- /dev/null
+++ b/src/ukify/test/example.signing.key.base64
@@ -0,0 +1,30 @@
+LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZB
+QVNDQktnd2dnU2tBZ0VBQW9JQkFRREtVeHR4Y0d1aGYvdUoKdUl0Y1hIb3VtL0RPUS9USTNwc1Fp
+WkdGVkZCc2xwYnFOcGQ1a2JDaUFMNmgrY1FYaGRjUmlOT1dBR0wyMFZ1Twpkb1U2a2M5ZHZJRkJx
+cys3NjR4b1hmNVBndkpYb0FMUlBsQ2R4YVdPQzFsOFFIRHpxZ09SdnREMWNIWFoveTkvCmdWMVVN
+RitRZWJtdmlIUTdFOHhsNU9oeTBtU0FWWEQ4QU4rbDdpMUR6N0NuTzhrMVphalhqYXlpNWV1WEV0
+TnEKUmVzblZLUURJU0NLdkkxbnlMcklsR0VNRmZhblJkS0FrYWdzalJnTmVhT3N3aklHNjV6UzFV
+djJTZXcxVFpIaApYbVJneU80VU9Cckh2ZUppdk9oTm81N1JUSndDNitpRmNBRmhSSnorVmM2QUlS
+SkI1ZWtJUmdCN3VDNEI5ZmwyCnV3WSsrTDgzQWdNQkFBRUNnZ0VBQkhZQ28rU3JxdHJzaStQU3hz
+MlBNQm5tSEZZcFBvaVIrTEpmMEFYRTVEQUoKMGM0MFZzemNqU1hoRGljNHFLQWQxdGdpZWlzMkEy
+VW9WS0xPV3pVOTBqNUd4MURoMWEzaTRhWTQ1ajNuNUFDMgpMekRsakNVQWVucExsYzdCN3MxdjJM
+WFJXNmdJSVM5Y043NTlkVTYvdktyQ2FsbGkzcTZZRWlNUzhQMHNsQnZFCkZtdEc1elFsOVJjV0gr
+cHBqdzlIMTJSZ3BldUVJVEQ2cE0vd2xwcXZHRlUwcmZjM0NjMHhzaWdNTnh1Z1FJNGgKbnpjWDVs
+OEs0SHdvbmhOTG9TYkh6OU5BK3p3QkpuUlZVSWFaaEVjSThtaEVPWHRaRkpYc01aRnhjS2l3SHFS
+dApqUUVHOHJRa3lPLytXMmR5Z2czV1lNYXE1OWpUWVdIOUsrQmFyeEMzRVFLQmdRRFBNSFMycjgz
+ZUpRTTlreXpkCndDdnlmWGhQVlVtbVJnOGwyWng0aC9tci9mNUdDeW5SdzRzT2JuZGVQd29tZ1Iz
+cFBleFFGWlFFSExoZ1RGY3UKVk5uYXcrTzBFL1VnL01pRGswZDNXU0hVZXZPZnM1cEM2b3hYNjNT
+VENwNkVLT2VEZlpVMW9OeHRsZ0YyRVhjcgpmVlZpSzFKRGk3N2dtaENLcFNGcjBLK3gyUUtCZ1FE
+NS9VUC9hNU52clExdUhnKzR0SzJZSFhSK1lUOFREZG00Ck8xZmh5TU5lOHRYSkd5UUJjTktVTWg2
+M2VyR1MwWlRWdGdkNHlGS3RuOGtLU2U4TmlacUl1aitVUVIyZ3pEQVAKQ2VXcXl2Y2pRNmovU1Yw
+WjVvKzlTNytiOStpWWx5RTg2bGZobHh5Z21aNnptYisxUUNteUtNVUdBNis5VmUvMgo1MHhDMXBB
+L2p3S0JnUUNEOHA4UnpVcDFZK3I1WnVaVzN0RGVJSXZqTWpTeVFNSGE0QWhuTm1tSjREcjBUcDIy
+CmFpci82TmY2WEhsUlpqOHZVSEZUMnpvbG1FalBneTZ1WWZsUCtocmtqeVU0ZWVRVTcxRy9Mek45
+UjBRcCs4Nk4KT1NSaHhhQzdHRE0xaFh0VFlVSUtJa1RmUVgzeXZGTEJqcE0yN3RINEZHSmVWWitk
+UEdiWmE5REltUUtCZ1FENQpHTU5qeExiQnhhY25QYThldG5KdnE1SUR5RFRJY0xtc1dQMkZ6cjNX
+WTVSZzhybGE4aWZ5WVVxNE92cXNPRWZjCjk2ZlVVNUFHejd2TWs4VXZNUmtaK3JRVnJ4aXR2Q2g3
+STdxRkIvOWdWVEFWU080TE8vR29oczBqeGRBd0ZBK2IKbWtyOVQ4ekh2cXNqZlNWSW51bXRTL0Nl
+d0plaHl2cjBoSjg1em9Fbnd3S0JnR1h6UXVDSjJDb3NHVVhEdnlHKwpyRzVBd3pUZGd0bHg4YTBK
+NTg1OWtZbVd0cW5WYUJmbFdrRmNUcHNEaGZ2ZWVDUkswc29VRlNPWkcranpsbWJrCkpRL09aVkZJ
+dG9MSVZCeE9qeWVXNlhUSkJXUzFRSkVHckkwY0tTbXNKcENtUXVPdUxMVnZYczV0U21CVmc5RXQK
+MjZzUkZwcjVWWmsrZlNRa3RhbkM4NGV1Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
diff --git a/src/ukify/test/example.tpm2-pcr-private.pem.base64 b/src/ukify/test/example.tpm2-pcr-private.pem.base64
new file mode 100644
index 0000000..586b28e
--- /dev/null
+++ b/src/ukify/test/example.tpm2-pcr-private.pem.base64
@@ -0,0 +1,30 @@
+LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZB
+QVNDQktnd2dnU2tBZ0VBQW9JQkFRQzVuOHFhbzVNZ1BJUVcKc0F5Y2R3dnB1bjdNNHlRSW9FL3I3
+ekFGTG1hZlBXclo3d2JaaUIyTkY1MVdHOEo4bnlDQkI3M0RLcmZaeWs5cwphQXdXVW5RR2t0dGFv
+RXpXRzZSRTM3dXdQOUpVM09YdklTNTBhcy9KSHVHNlJPYmE2V0NOOFp2TTdkZGpvTDFKCkZlYnBS
+SXI1Vi82VStMTFhrUnRNYVczUnZ6T0xYeU1NT2QzOEcxZ0d0VlRHcm90ejVldFgrTUNVU2lOVGFE
+OVUKN1dEZXVsZXVpMlRnK1I3TGRoSXg3ZTQ5cEhRM3d6a1NxeFQ4SGpoU3ZURWpITWVSNjIwaUhF
+ZW9uYzdsMXVnagpzY1pwTktHdk13bXUvU2ptWFp6UkpOdjVOU0txcEVnQll2RnFkS3dUdlc4MWl6
+SUFvN3paMkx6NDJYb25zSWJ2CjNrbGZqTG1mQWdNQkFBRUNnZ0VBQXozYm8yeTAzb3kvLzhkdVNQ
+TTVSWWtvdXJwQ3dGWFFYMzNyV0VQUnJmazgKR3ZjMkp1bGVIcjhwVTc0alhOcklqZ2hORTVIMDZQ
+eEQrOUFyV2Q1eHdVV2lTQWhobnlHWGNrNTM4Q0dGTWs4egpRc1JSRTk1anA0Ny9BU28vMzlYUWhs
+b1FUdmxlV0JLUUM2MHl2YU1oVEM1eHR6ZEtwRUlYK0hNazVGTlMrcDJVCmxtL3AzVE1YWDl1bmc5
+Mk9pTzUzV1VreFpQN2cwTVJHbGJrNzhqc1dkdjFYY0tLRjhuVmU5WC9NR1lTYlVLNy8KM2NYazFR
+WTRUdVZaQlBFSE12RFRpWWwxbmdDd1ZuL2MyY3JQU3hJRFdFWlhEdm90SFUwQkNQZURVckxGa0F5
+cQpDaloza3MzdEh4am42STkraEVNcUJDMzY1MHFjdDNkZ0RVV2loc2MzdVFLQmdRRG1mVTNKc29K
+QWFOdmxCbXgyClhzRDRqbXlXV1F2Z244cVNVNG03a2JKdmprcUJ6VnB0T0ZsYmk2ejZHOXR6ZHNX
+a0dJSjh3T0ZRb1hlM0dKOFIKSlVpeEFXTWZOM1JURGo5VjVXbzZJdE5EbzM1N3dNbVVYOW1qeThF
+YXp0RE1BckdSNGJva0Q5RjY3clhqSGdSMQpaZVcvSDlUWHFUV1l4VHl6UDB3ZDBQeUZ4d0tCZ1FE
+T0swWHVQS0o0WG00WmFCemN0OTdETXdDcFBSVmVvUWU3CmkzQjRJQ3orWFZ4cVM2amFTY2xNeEVm
+Nk5tM2tLNERDR1dwVkpXcm9qNjlMck1KWnQzTlI2VUJ5NzNqUVBSamsKRXk5N3YrR04yVGwwNjFw
+ZUxUM0dRS2RhT2VxWldpdElOcFc1dUxHL1poMGhoRUY5c1lSVTRtUFYwUWpla2kvdgp1bnVmcWx0
+TmFRS0JnQTl6TE1pdFg0L0R0NkcxZVlYQnVqdXZDRlpYcDdVcDRPRklHajVwZU1XRGl6a0NNK0tJ
+CldXMEtndERORnp1NUpXeG5mQyt5bWlmV2V2alovS2Vna1N2VVJQbXR0TzF3VWd5RzhVVHVXcXo1
+QTV4MkFzMGcKVTYxb0ZneWUrbDRDZkRha0k5OFE5R0RDS1kwTTBRMnhnK0g0MTBLUmhCYzJlV2dt
+Z1FxcW5KSzNBb0dCQU1rZgpnOWZXQlBVQndjdzlPYkxFR0tjNkVSSUlTZG1IbytCOE5kcXFJTnAv
+djFEZXdEazZ0QXFVakZiMlZCdTdxSjh4ClpmN3NRcS9ldzdaQ01WS09XUXgyVEc0VFdUdGo3dTFJ
+SGhGTjdiNlFRN0hnaXNiR3diV3VpdFBGSGl3OXYyMXgKK253MFJnb2VscHFFeDlMVG92R2Y3SjdB
+ampONlR4TkJTNnBGNlUzSkFvR0JBT0tnbHlRWDJpVG5oMXd4RG1TVQo4RXhoQVN3S09iNS8yRmx4
+aUhtUHVjNTZpS0tHY0lkV1cxMUdtbzdJakNzSTNvRm9iRkFjKzBXZkMvQTdMNWlmCjNBYVNWcmh0
+cThRRklRaUtyYUQ0YlRtRk9Famg5QVVtUHMrWnd1OE9lSXJBSWtwZDV3YmlhTEJLd0pRbVdtSFAK
+dUNBRTA3cXlSWXJ0c3QvcnVSSG5IdFA1Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
diff --git a/src/ukify/test/example.tpm2-pcr-private2.pem.base64 b/src/ukify/test/example.tpm2-pcr-private2.pem.base64
new file mode 100644
index 0000000..d21a3d6
--- /dev/null
+++ b/src/ukify/test/example.tpm2-pcr-private2.pem.base64
@@ -0,0 +1,30 @@
+LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2QUlCQURBTkJna3Foa2lHOXcwQkFRRUZB
+QVNDQktZd2dnU2lBZ0VBQW9JQkFRQzJ2Nk1oZHg3a3VjUHIKbmtFNFIrY3FnV2Y5T3B1c2h2M2o3
+SG50K08wdi84d2l2T1BFNTlLMHYvRWJOOG94TDZEWUNXU0JCRU4vREJ5MgpMUTYwbldSdHBZN2Ju
+bEcrcEtVeTRvSDRNZXZCR2JqZUhrak9LU3dNYVVWNGs4UmVSSjg4cVZ1U1MxSnVORW1NCmd5SERF
+NGFPNG5ndG5UUFZZdzUydVBIcG1rN0E4VFdXN2lLZE5JWWZWOCtuR1pENXIzRWllekRsUUNORG54
+UkcKdm5uSFZ6VFhZR3RwY2xaeWlJclpVekpBNFFPZnRueXB5UDVrQS94NVM1MU9QeGFxWlA3eGtP
+S0NicUUvZmZvMApFTi9rTno0N0ZoUGUxbVBHUkZZWldHZXg0aWFPdHlLdHhnU1FYYkdlNEVoeVR4
+SjJlT3U4QUVoVklTdjh6UU9nClNtbWx2UGQvQWdNQkFBRUNnZ0VBUUFpRERRRlR3bG96QTVhMmpK
+VnBNdlFYNzF0L1c2TUxTRGMrZS90cWhKU1IKUHlUSGZHR3NhMmdMLy9qNjhHUWJiRWRTUDRDeWM4
+eFhMU0E1bEdESDVVR0svbm9KYzQ3MlVZK2JjYzl3SjMrdgpUcWoyNHNIN2JMZmdQMEVybjhwVXIy
+azZMRmNYSVlWUnRobm1sUmQ4NFFrS2loVVlxZTdsRFFWOXdsZ3V1eHpRCnBmVEtDTWk1bXJlYjIx
+OExHS0QrMUxjVmVYZjExamc3Z2JnMllLZ1dOQ2R3VmIyUzJ5V0hTTjBlT3hPd21kWXIKSUVCekpG
+eEc2MFJxSlJ1RzVIam9iemc2cy9ycUo1THFta3JhUWh6bHFPQVZLblpGOHppbG9vcDhXUXBQY3RN
+cwp0cHBjczhtYkFkWHpoSTVjN0U1VVpDM2NJcEd6SE4raDZLK0F3R3ZEeVFLQmdRRDRBOTdQM29v
+dGhoMHZHQmFWCnZWOXhHTm1YbW5TeUg0b29HcmJvaG1JWkkwVlhZdms5dWViSUJjbDZRMUx4WnN3
+UFpRMVh5TUhpTjY1Z0E1emgKai9HZGcrdDlvcU5CZml0TUFrUTl1aWxvaXlKVWhYblk5REMvRitl
+ZksycEpNbHdkci9qWEttRHpkQUZBVDgyWQpWRmJ3MlpLVi9GNEJNMUtCdDBZN0RPTmlad0tCZ1FD
+OG9kZk0waytqL25VSzQ4TEV2MGtGbVNMdWdnTVlkM3hVCmZibmx0cUhFTVpJZU45OFVHK2hBWEdw
+dU1Ya0JPM2Mwcm5ZRDVXZkNBRzFxT1V2ZTZzdHd6N0VuK3hWdlkvcWEKU3ZTaDRzMzhnZlBIeXhR
+aGJvNWRwQTZUT3pwT0MyVi9rVXBVRUdJSmVVVllhQ05uWXNpUjRWUGVWL1lvR1htSwpQV29KbnAw
+REtRS0JnQlk3cXBheDJXczVVWlp1TDJBZkNOWkhwd0hySzdqb0VPZUZkWTRrdGRpUkM5OUlsUlZP
+CmUvekVZQXBnektldFVtK3kzRjVaTmVCRW81SWg0TWRyc3ZvdTRFWno5UFNqRGRpVGYzQ1ZKcThq
+Z2VGWDBkTjgKR0g2WTh2K1cwY0ZjRFZ2djhYdkFaYzZOUUt0Mk8vVUM0b1JXek1nN1JtWVBKcjlR
+SWJDYmVDclRBb0dBTjdZbApJbDFMSUVoYkVTaExzZ2c4N09aWnBzL0hVa2FYOWV4Y0p6aFZkcmlk
+UzBkOUgxZE90Uk9XYTQwNUMrQWdTUEx0CjhDQ2xFR3RINVlPZW9Pdi93Z1hWY05WN2N6YTRJVEhh
+SnFYeDZJNEpEZzB3bU44cU5RWHJPQmphRTRyU0kyY3AKNk1JZDhtWmEwTTJSQjB2cHFRdy8xUDl0
+dUZJdHoySnNHd001cEdFQ2dZQVVnQVV3WENBcEtZVkZFRmxHNlBhYwpvdTBhdzdGNm1aMi9NNUcv
+ek9tMHFDYnNXdGFNU09TdUEvNmlVOXB0NDBaWUFONFUvd2ZxbncyVkVoRnA3dzFNCnpZWmJCRDBx
+ZVlkcDRmc1NuWXFMZmJBVmxQLzB6dmEzdkwwMlJFa25WalBVSnAvaGpKVWhBK21WN252VDZ5VjQK
+cTg4SWVvOEx3Q1c1c2Jtd2lyU3Btdz09Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
diff --git a/src/ukify/test/example.tpm2-pcr-public.pem.base64 b/src/ukify/test/example.tpm2-pcr-public.pem.base64
new file mode 100644
index 0000000..728a0f5
--- /dev/null
+++ b/src/ukify/test/example.tpm2-pcr-public.pem.base64
@@ -0,0 +1,8 @@
+LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FR
+OEFNSUlCQ2dLQ0FRRUF1Wi9LbXFPVElEeUVGckFNbkhjTAo2YnArek9Na0NLQlA2Kzh3QlM1bW56
+MXEyZThHMllnZGpSZWRWaHZDZko4Z2dRZTl3eXEzMmNwUGJHZ01GbEowCkJwTGJXcUJNMWh1a1JO
+KzdzRC9TVk56bDd5RXVkR3JQeVI3aHVrVG0ydWxnamZHYnpPM1hZNkM5U1JYbTZVU0sKK1ZmK2xQ
+aXkxNUViVEdsdDBiOHppMThqRERuZC9CdFlCclZVeHE2TGMrWHJWL2pBbEVvalUyZy9WTzFnM3Jw
+WApyb3RrNFBrZXkzWVNNZTN1UGFSME44TTVFcXNVL0I0NFVyMHhJeHpIa2V0dEloeEhxSjNPNWRi
+b0k3SEdhVFNoCnJ6TUpydjBvNWwyYzBTVGIrVFVpcXFSSUFXTHhhblNzRTcxdk5Zc3lBS084MmRp
+OCtObDZKN0NHNzk1Slg0eTUKbndJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
diff --git a/src/ukify/test/example.tpm2-pcr-public2.pem.base64 b/src/ukify/test/example.tpm2-pcr-public2.pem.base64
new file mode 100644
index 0000000..44bb3ee
--- /dev/null
+++ b/src/ukify/test/example.tpm2-pcr-public2.pem.base64
@@ -0,0 +1,8 @@
+LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FR
+OEFNSUlCQ2dLQ0FRRUF0citqSVhjZTVMbkQ2NTVCT0VmbgpLb0ZuL1RxYnJJYjk0K3g1N2ZqdEwv
+L01JcnpqeE9mU3RML3hHemZLTVMrZzJBbGtnUVJEZnd3Y3RpME90SjFrCmJhV08yNTVSdnFTbE11
+S0IrREhyd1JtNDNoNUl6aWtzREdsRmVKUEVYa1NmUEtsYmtrdFNialJKaklNaHd4T0cKanVKNExa
+MHoxV01PZHJqeDZacE93UEUxbHU0aW5UU0dIMWZQcHhtUSthOXhJbnN3NVVBalE1OFVScjU1eDFj
+MAoxMkJyYVhKV2NvaUsyVk15UU9FRG43WjhxY2orWkFQOGVVdWRUajhXcW1UKzhaRGlnbTZoUDMz
+Nk5CRGY1RGMrCk94WVQzdFpqeGtSV0dWaG5zZUltanJjaXJjWUVrRjJ4bnVCSWNrOFNkbmpydkFC
+SVZTRXIvTTBEb0VwcHBiejMKZndJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
diff --git a/src/ukify/test/meson.build b/src/ukify/test/meson.build
new file mode 100644
index 0000000..e39178f
--- /dev/null
+++ b/src/ukify/test/meson.build
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+if want_ukify and want_tests != 'false'
+   test('test-ukify',
+        files('test_ukify.py'),
+        env : test_env)
+endif
diff --git a/src/ukify/test/setup.cfg b/src/ukify/test/setup.cfg
new file mode 100644
index 0000000..1f655da
--- /dev/null
+++ b/src/ukify/test/setup.cfg
@@ -0,0 +1,2 @@
+[tool:pytest]
+addopts = --flakes
diff --git a/src/ukify/test/test_ukify.py b/src/ukify/test/test_ukify.py
new file mode 100755
index 0000000..3470140
--- /dev/null
+++ b/src/ukify/test/test_ukify.py
@@ -0,0 +1,392 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1+
+
+# pylint: disable=missing-docstring,redefined-outer-name,invalid-name
+# pylint: disable=unused-import,import-outside-toplevel,useless-else-on-loop
+# pylint: disable=consider-using-with,wrong-import-position,unspecified-encoding
+
+import base64
+import json
+import os
+import pathlib
+import re
+import shutil
+import subprocess
+import sys
+import tempfile
+
+try:
+    import pytest
+except ImportError:
+    sys.exit(77)
+
+try:
+    # pyflakes: noqa
+    import pefile  # noqa
+except ImportError:
+    sys.exit(77)
+
+# We import ukify.py, which is a template file. But only __version__ is
+# substituted, which we don't care about here. Having the .py suffix makes it
+# easier to import the file.
+sys.path.append(os.path.dirname(__file__) + '/..')
+import ukify
+
+
+def test_guess_efi_arch():
+    arch = ukify.guess_efi_arch()
+    assert arch in ukify.EFI_ARCHES
+
+def test_shell_join():
+    assert ukify.shell_join(['a', 'b', ' ']) == "a b ' '"
+
+def test_round_up():
+    assert ukify.round_up(0) == 0
+    assert ukify.round_up(4095) == 4096
+    assert ukify.round_up(4096) == 4096
+    assert ukify.round_up(4097) == 8192
+
+def test_parse_args_minimal():
+    opts = ukify.parse_args('arg1 arg2'.split())
+    assert opts.linux == pathlib.Path('arg1')
+    assert opts.initrd == [pathlib.Path('arg2')]
+    assert opts.os_release in (pathlib.Path('/etc/os-release'),
+                               pathlib.Path('/usr/lib/os-release'))
+
+def test_parse_args_many():
+    opts = ukify.parse_args(
+        ['/ARG1', '///ARG2', '/ARG3 WITH SPACE',
+         '--cmdline=a b c',
+         '--os-release=K1=V1\nK2=V2',
+         '--devicetree=DDDDTTTT',
+         '--splash=splash',
+         '--pcrpkey=PATH',
+         '--uname=1.2.3',
+         '--stub=STUBPATH',
+         '--pcr-private-key=PKEY1',
+         '--pcr-public-key=PKEY2',
+         '--pcr-banks=SHA1,SHA256',
+         '--signing-engine=ENGINE',
+         '--secureboot-private-key=SBKEY',
+         '--secureboot-certificate=SBCERT',
+         '--sign-kernel',
+         '--no-sign-kernel',
+         '--tools=TOOLZ///',
+         '--output=OUTPUT',
+         '--measure',
+         '--no-measure',
+         ])
+    assert opts.linux == pathlib.Path('/ARG1')
+    assert opts.initrd == [pathlib.Path('/ARG2'), pathlib.Path('/ARG3 WITH SPACE')]
+    assert opts.os_release == 'K1=V1\nK2=V2'
+    assert opts.devicetree == pathlib.Path('DDDDTTTT')
+    assert opts.splash == pathlib.Path('splash')
+    assert opts.pcrpkey == pathlib.Path('PATH')
+    assert opts.uname == '1.2.3'
+    assert opts.stub == pathlib.Path('STUBPATH')
+    assert opts.pcr_private_keys == [pathlib.Path('PKEY1')]
+    assert opts.pcr_public_keys == [pathlib.Path('PKEY2')]
+    assert opts.pcr_banks == ['SHA1', 'SHA256']
+    assert opts.signing_engine == 'ENGINE'
+    assert opts.sb_key == 'SBKEY'
+    assert opts.sb_cert == 'SBCERT'
+    assert opts.sign_kernel is False
+    assert opts.tools == pathlib.Path('TOOLZ/')
+    assert opts.output == pathlib.Path('OUTPUT')
+    assert opts.measure is False
+
+def test_parse_sections():
+    opts = ukify.parse_args(
+        ['/ARG1', '/ARG2',
+         '--section=test:TESTTESTTEST',
+         '--section=test2:@FILE',
+         ])
+
+    assert opts.linux == pathlib.Path('/ARG1')
+    assert opts.initrd == [pathlib.Path('/ARG2')]
+    assert len(opts.sections) == 2
+
+    assert opts.sections[0].name == 'test'
+    assert isinstance(opts.sections[0].content, pathlib.Path)
+    assert opts.sections[0].tmpfile
+    assert opts.sections[0].offset is None
+    assert opts.sections[0].measure is False
+
+    assert opts.sections[1].name == 'test2'
+    assert opts.sections[1].content == pathlib.Path('FILE')
+    assert opts.sections[1].tmpfile is None
+    assert opts.sections[1].offset is None
+    assert opts.sections[1].measure is False
+
+def test_help(capsys):
+    with pytest.raises(SystemExit):
+        ukify.parse_args(['--help'])
+    out = capsys.readouterr()
+    assert '--section' in out.out
+    assert not out.err
+
+def test_help_error(capsys):
+    with pytest.raises(SystemExit):
+        ukify.parse_args(['a', 'b', '--no-such-option'])
+    out = capsys.readouterr()
+    assert not out.out
+    assert '--no-such-option' in out.err
+    assert len(out.err.splitlines()) == 1
+
+@pytest.fixture(scope='session')
+def kernel_initrd():
+    try:
+        text = subprocess.check_output(['bootctl', 'list', '--json=short'],
+                                       text=True)
+    except subprocess.CalledProcessError:
+        return None
+
+    items = json.loads(text)
+
+    for item in items:
+        try:
+            linux = f"{item['root']}{item['linux']}"
+            initrd = f"{item['root']}{item['initrd'][0]}"
+        except (KeyError, IndexError):
+            pass
+        return [linux, initrd]
+    else:
+        return None
+
+def test_check_splash():
+    try:
+        # pyflakes: noqa
+        import PIL  # noqa
+    except ImportError:
+        pytest.skip('PIL not available')
+
+    with pytest.raises(OSError):
+        ukify.check_splash(os.devnull)
+
+def test_basic_operation(kernel_initrd, tmpdir):
+    if kernel_initrd is None:
+        pytest.skip('linux+initrd not found')
+
+    output = f'{tmpdir}/basic.efi'
+    opts = ukify.parse_args(kernel_initrd + [f'--output={output}'])
+    try:
+        ukify.check_inputs(opts)
+    except OSError as e:
+        pytest.skip(str(e))
+
+    ukify.make_uki(opts)
+
+    # let's check that objdump likes the resulting file
+    subprocess.check_output(['objdump', '-h', output])
+
+def test_sections(kernel_initrd, tmpdir):
+    if kernel_initrd is None:
+        pytest.skip('linux+initrd not found')
+
+    output = f'{tmpdir}/basic.efi'
+    opts = ukify.parse_args([
+        *kernel_initrd,
+        f'--output={output}',
+        '--uname=1.2.3',
+        '--cmdline=ARG1 ARG2 ARG3',
+        '--os-release=K1=V1\nK2=V2\n',
+        '--section=.test:CONTENTZ',
+    ])
+
+    try:
+        ukify.check_inputs(opts)
+    except OSError as e:
+        pytest.skip(str(e))
+
+    ukify.make_uki(opts)
+
+    # let's check that objdump likes the resulting file
+    dump = subprocess.check_output(['objdump', '-h', output], text=True)
+
+    for sect in 'text osrel cmdline linux initrd uname test'.split():
+        assert re.search(fr'^\s*\d+\s+.{sect}\s+0', dump, re.MULTILINE)
+
+
+def unbase64(filename):
+    tmp = tempfile.NamedTemporaryFile()
+    base64.decode(filename.open('rb'), tmp)
+    tmp.flush()
+    return tmp
+
+
+def test_uname_scraping(kernel_initrd):
+    if kernel_initrd is None:
+        pytest.skip('linux+initrd not found')
+
+    uname = ukify.Uname.scrape(kernel_initrd[0])
+    assert re.match(r'\d+\.\d+\.\d+', uname)
+
+
+def test_efi_signing(kernel_initrd, tmpdir):
+    if kernel_initrd is None:
+        pytest.skip('linux+initrd not found')
+    if not shutil.which('sbsign'):
+        pytest.skip('sbsign not found')
+
+    ourdir = pathlib.Path(__file__).parent
+    cert = unbase64(ourdir / 'example.signing.crt.base64')
+    key = unbase64(ourdir / 'example.signing.key.base64')
+
+    output = f'{tmpdir}/signed.efi'
+    opts = ukify.parse_args([
+        *kernel_initrd,
+        f'--output={output}',
+        '--uname=1.2.3',
+        '--cmdline=ARG1 ARG2 ARG3',
+        f'--secureboot-certificate={cert.name}',
+        f'--secureboot-private-key={key.name}',
+    ])
+
+    try:
+        ukify.check_inputs(opts)
+    except OSError as e:
+        pytest.skip(str(e))
+
+    ukify.make_uki(opts)
+
+    if shutil.which('sbverify'):
+        # let's check that sbverify likes the resulting file
+        dump = subprocess.check_output([
+            'sbverify',
+            '--cert', cert.name,
+            output,
+        ], text=True)
+
+        assert 'Signature verification OK' in dump
+
+def test_pcr_signing(kernel_initrd, tmpdir):
+    if kernel_initrd is None:
+        pytest.skip('linux+initrd not found')
+    if os.getuid() != 0:
+        pytest.skip('must be root to access tpm2')
+    if subprocess.call(['systemd-creds', 'has-tpm2', '-q']) != 0:
+        pytest.skip('tpm2 is not available')
+
+    ourdir = pathlib.Path(__file__).parent
+    pub = unbase64(ourdir / 'example.tpm2-pcr-public.pem.base64')
+    priv = unbase64(ourdir / 'example.tpm2-pcr-private.pem.base64')
+
+    output = f'{tmpdir}/signed.efi'
+    opts = ukify.parse_args([
+        *kernel_initrd,
+        f'--output={output}',
+        '--uname=1.2.3',
+        '--cmdline=ARG1 ARG2 ARG3',
+        '--os-release=ID=foobar\n',
+        '--pcr-banks=sha1',   # use sha1 as that is most likely to be supported
+        f'--pcrpkey={pub.name}',
+        f'--pcr-public-key={pub.name}',
+        f'--pcr-private-key={priv.name}',
+    ])
+
+    try:
+        ukify.check_inputs(opts)
+    except OSError as e:
+        pytest.skip(str(e))
+
+    ukify.make_uki(opts)
+
+    # let's check that objdump likes the resulting file
+    dump = subprocess.check_output(['objdump', '-h', output], text=True)
+
+    for sect in 'text osrel cmdline linux initrd uname pcrsig'.split():
+        assert re.search(fr'^\s*\d+\s+.{sect}\s+0', dump, re.MULTILINE)
+
+    # objcopy fails when called without an output argument (EPERM).
+    # It also fails when called with /dev/null (file truncated).
+    # It also fails when called with /dev/zero (because it reads the
+    # output file, infinitely in this case.)
+    # So let's just call it with a dummy output argument.
+    subprocess.check_call([
+        'objcopy',
+        *(f'--dump-section=.{n}={tmpdir}/out.{n}' for n in (
+            'pcrpkey', 'pcrsig', 'osrel', 'uname', 'cmdline')),
+        output,
+        tmpdir / 'dummy',
+    ],
+        text=True)
+
+    assert open(tmpdir / 'out.pcrpkey').read() == open(pub.name).read()
+    assert open(tmpdir / 'out.osrel').read() == 'ID=foobar\n'
+    assert open(tmpdir / 'out.uname').read() == '1.2.3'
+    assert open(tmpdir / 'out.cmdline').read() == 'ARG1 ARG2 ARG3'
+    sig = open(tmpdir / 'out.pcrsig').read()
+    sig = json.loads(sig)
+    assert list(sig.keys()) == ['sha1']
+    assert len(sig['sha1']) == 4   # four items for four phases
+
+def test_pcr_signing2(kernel_initrd, tmpdir):
+    if kernel_initrd is None:
+        pytest.skip('linux+initrd not found')
+    if os.getuid() != 0:
+        pytest.skip('must be root to access tpm2')
+    if subprocess.call(['systemd-creds', 'has-tpm2', '-q']) != 0:
+        pytest.skip('tpm2 is not available')
+
+    ourdir = pathlib.Path(__file__).parent
+    pub = unbase64(ourdir / 'example.tpm2-pcr-public.pem.base64')
+    priv = unbase64(ourdir / 'example.tpm2-pcr-private.pem.base64')
+    pub2 = unbase64(ourdir / 'example.tpm2-pcr-public2.pem.base64')
+    priv2 = unbase64(ourdir / 'example.tpm2-pcr-private2.pem.base64')
+
+    # simulate a microcode file
+    with open(f'{tmpdir}/microcode', 'wb') as microcode:
+        microcode.write(b'1234567890')
+
+    output = f'{tmpdir}/signed.efi'
+    opts = ukify.parse_args([
+        kernel_initrd[0], microcode.name, kernel_initrd[1],
+        f'--output={output}',
+        '--uname=1.2.3',
+        '--cmdline=ARG1 ARG2 ARG3',
+        '--os-release=ID=foobar\n',
+        '--pcr-banks=sha1',   # use sha1 as that is most likely to be supported
+        f'--pcrpkey={pub2.name}',
+        f'--pcr-public-key={pub.name}',
+        f'--pcr-private-key={priv.name}',
+        '--phases=enter-initrd enter-initrd:leave-initrd',
+        f'--pcr-public-key={pub2.name}',
+        f'--pcr-private-key={priv2.name}',
+        '--phases=sysinit ready shutdown final',  # yes, those phase paths are not reachable
+    ])
+
+    try:
+        ukify.check_inputs(opts)
+    except OSError as e:
+        pytest.skip(str(e))
+
+    ukify.make_uki(opts)
+
+    # let's check that objdump likes the resulting file
+    dump = subprocess.check_output(['objdump', '-h', output], text=True)
+
+    for sect in 'text osrel cmdline linux initrd uname pcrsig'.split():
+        assert re.search(fr'^\s*\d+\s+.{sect}\s+0', dump, re.MULTILINE)
+
+    subprocess.check_call([
+        'objcopy',
+        *(f'--dump-section=.{n}={tmpdir}/out.{n}' for n in (
+            'pcrpkey', 'pcrsig', 'osrel', 'uname', 'cmdline', 'initrd')),
+        output,
+        tmpdir / 'dummy',
+    ],
+        text=True)
+
+    assert open(tmpdir / 'out.pcrpkey').read() == open(pub2.name).read()
+    assert open(tmpdir / 'out.osrel').read() == 'ID=foobar\n'
+    assert open(tmpdir / 'out.uname').read() == '1.2.3'
+    assert open(tmpdir / 'out.cmdline').read() == 'ARG1 ARG2 ARG3'
+    assert open(tmpdir / 'out.initrd', 'rb').read(10) == b'1234567890'
+
+    sig = open(tmpdir / 'out.pcrsig').read()
+    sig = json.loads(sig)
+    assert list(sig.keys()) == ['sha1']
+    assert len(sig['sha1']) == 6   # six items for six phases paths
+
+if __name__ == '__main__':
+    pytest.main([__file__, '-v'])
diff --git a/src/ukify/ukify.py b/src/ukify/ukify.py
new file mode 100755
index 0000000..0ae1bf4
--- /dev/null
+++ b/src/ukify/ukify.py
@@ -0,0 +1,788 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1+
+
+# pylint: disable=missing-docstring,invalid-name,import-outside-toplevel
+# pylint: disable=consider-using-with,unspecified-encoding,line-too-long
+# pylint: disable=too-many-locals,too-many-statements,too-many-return-statements
+# pylint: disable=too-many-branches
+
+import argparse
+import collections
+import dataclasses
+import fnmatch
+import itertools
+import json
+import os
+import pathlib
+import re
+import shlex
+import shutil
+import subprocess
+import tempfile
+import typing
+
+
+__version__ = '{{PROJECT_VERSION}} ({{GIT_VERSION}})'
+
+EFI_ARCH_MAP = {
+        # host_arch glob : [efi_arch, 32_bit_efi_arch if mixed mode is supported]
+        'x86_64'       : ['x64', 'ia32'],
+        'i[3456]86'    : ['ia32'],
+        'aarch64'      : ['aa64'],
+        'arm[45678]*l' : ['arm'],
+        'riscv64'      : ['riscv64'],
+}
+EFI_ARCHES: list[str] = sum(EFI_ARCH_MAP.values(), [])
+
+def guess_efi_arch():
+    arch = os.uname().machine
+
+    for glob, mapping in EFI_ARCH_MAP.items():
+        if fnmatch.fnmatch(arch, glob):
+            efi_arch, *fallback = mapping
+            break
+    else:
+        raise ValueError(f'Unsupported architecture {arch}')
+
+    # This makes sense only on some architectures, but it also probably doesn't
+    # hurt on others, so let's just apply the check everywhere.
+    if fallback:
+        fw_platform_size = pathlib.Path('/sys/firmware/efi/fw_platform_size')
+        try:
+            size = fw_platform_size.read_text().strip()
+        except FileNotFoundError:
+            pass
+        else:
+            if int(size) == 32:
+                efi_arch = fallback[0]
+
+    print(f'Host arch {arch!r}, EFI arch {efi_arch!r}')
+    return efi_arch
+
+
+def shell_join(cmd):
+    # TODO: drop in favour of shlex.join once shlex.join supports pathlib.Path.
+    return ' '.join(shlex.quote(str(x)) for x in cmd)
+
+
+def path_is_readable(s: typing.Optional[str]) -> typing.Optional[pathlib.Path]:
+    """Convert a filename string to a Path and verify access."""
+    if s is None:
+        return None
+    p = pathlib.Path(s)
+    try:
+        p.open().close()
+    except IsADirectoryError:
+        pass
+    return p
+
+
+def pe_next_section_offset(filename):
+    import pefile
+
+    pe = pefile.PE(filename, fast_load=True)
+    section = pe.sections[-1]
+    return pe.OPTIONAL_HEADER.ImageBase + section.VirtualAddress + section.Misc_VirtualSize
+
+
+def round_up(x, blocksize=4096):
+    return (x + blocksize - 1) // blocksize * blocksize
+
+
+def try_import(modname, name=None):
+    try:
+        return __import__(modname)
+    except ImportError as e:
+        raise ValueError(f'Kernel is compressed with {name or modname}, but module unavailable') from e
+
+
+def maybe_decompress(filename):
+    """Decompress file if compressed. Return contents."""
+    f = open(filename, 'rb')
+    start = f.read(4)
+    f.seek(0)
+
+    if start.startswith(b'\x7fELF'):
+        # not compressed
+        return f.read()
+
+    if start.startswith(b'MZ'):
+        # not compressed aarch64 and riscv64
+        return f.read()
+
+    if start.startswith(b'\x1f\x8b'):
+        gzip = try_import('gzip')
+        return gzip.open(f).read()
+
+    if start.startswith(b'\x28\xb5\x2f\xfd'):
+        zstd = try_import('zstd')
+        return zstd.uncompress(f.read())
+
+    if start.startswith(b'\x02\x21\x4c\x18'):
+        lz4 = try_import('lz4.frame', 'lz4')
+        return lz4.frame.decompress(f.read())
+
+    if start.startswith(b'\x04\x22\x4d\x18'):
+        print('Newer lz4 stream format detected! This may not boot!')
+        lz4 = try_import('lz4.frame', 'lz4')
+        return lz4.frame.decompress(f.read())
+
+    if start.startswith(b'\x89LZO'):
+        # python3-lzo is not packaged for Fedora
+        raise NotImplementedError('lzo decompression not implemented')
+
+    if start.startswith(b'BZh'):
+        bz2 = try_import('bz2', 'bzip2')
+        return bz2.open(f).read()
+
+    if start.startswith(b'\x5d\x00\x00'):
+        lzma = try_import('lzma')
+        return lzma.open(f).read()
+
+    raise NotImplementedError(f'unknown file format (starts with {start})')
+
+
+class Uname:
+    # This class is here purely as a namespace for the functions
+
+    VERSION_PATTERN = r'(?P<version>[a-z0-9._-]+) \([^ )]+\) (?:#.*)'
+
+    NOTES_PATTERN = r'^\s+Linux\s+0x[0-9a-f]+\s+OPEN\n\s+description data: (?P<version>[0-9a-f ]+)\s*$'
+
+    # Linux version 6.0.8-300.fc37.ppc64le (mockbuild@buildvm-ppc64le-03.iad2.fedoraproject.org)
+    # (gcc (GCC) 12.2.1 20220819 (Red Hat 12.2.1-2), GNU ld version 2.38-24.fc37)
+    # #1 SMP Fri Nov 11 14:39:11 UTC 2022
+    TEXT_PATTERN = rb'Linux version (?P<version>\d\.\S+) \('
+
+    @classmethod
+    def scrape_x86(cls, filename, opts=None):
+        # Based on https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio/-/blob/master/functions#L136
+        # and https://www.kernel.org/doc/html/latest/x86/boot.html#the-real-mode-kernel-header
+        with open(filename, 'rb') as f:
+            f.seek(0x202)
+            magic = f.read(4)
+            if magic != b'HdrS':
+                raise ValueError('Real-Mode Kernel Header magic not found')
+            f.seek(0x20E)
+            offset = f.read(1)[0] + f.read(1)[0]*256  # Pointer to kernel version string
+            f.seek(0x200 + offset)
+            text = f.read(128)
+        text = text.split(b'\0', maxsplit=1)[0]
+        text = text.decode()
+
+        if not (m := re.match(cls.VERSION_PATTERN, text)):
+            raise ValueError(f'Cannot parse version-host-release uname string: {text!r}')
+        return m.group('version')
+
+    @classmethod
+    def scrape_elf(cls, filename, opts=None):
+        readelf = find_tool('readelf', opts=opts)
+
+        cmd = [
+            readelf,
+            '--notes',
+            filename,
+        ]
+
+        print('+', shell_join(cmd))
+        try:
+            notes = subprocess.check_output(cmd, stderr=subprocess.PIPE, text=True)
+        except subprocess.CalledProcessError as e:
+            raise ValueError(e.stderr.strip()) from e
+
+        if not (m := re.search(cls.NOTES_PATTERN, notes, re.MULTILINE)):
+            raise ValueError('Cannot find Linux version note')
+
+        text = ''.join(chr(int(c, 16)) for c in m.group('version').split())
+        return text.rstrip('\0')
+
+    @classmethod
+    def scrape_generic(cls, filename, opts=None):
+        # import libarchive
+        # libarchive-c fails with
+        # ArchiveError: Unrecognized archive format (errno=84, retcode=-30, archive_p=94705420454656)
+
+        # Based on https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio/-/blob/master/functions#L209
+
+        text = maybe_decompress(filename)
+        if not (m := re.search(cls.TEXT_PATTERN, text)):
+            raise ValueError(f'Cannot find {cls.TEXT_PATTERN!r} in {filename}')
+
+        return m.group('version').decode()
+
+    @classmethod
+    def scrape(cls, filename, opts=None):
+        for func in (cls.scrape_x86, cls.scrape_elf, cls.scrape_generic):
+            try:
+                version = func(filename, opts=opts)
+                print(f'Found uname version: {version}')
+                return version
+            except ValueError as e:
+                print(str(e))
+        return None
+
+
+@dataclasses.dataclass
+class Section:
+    name: str
+    content: pathlib.Path
+    tmpfile: typing.Optional[typing.IO] = None
+    flags: list[str] = dataclasses.field(default_factory=lambda: ['data', 'readonly'])
+    offset: typing.Optional[int] = None
+    measure: bool = False
+
+    @classmethod
+    def create(cls, name, contents, **kwargs):
+        if isinstance(contents, (str, bytes)):
+            mode = 'wt' if isinstance(contents, str) else 'wb'
+            tmp = tempfile.NamedTemporaryFile(mode=mode, prefix=f'tmp{name}')
+            tmp.write(contents)
+            tmp.flush()
+            contents = pathlib.Path(tmp.name)
+        else:
+            tmp = None
+
+        return cls(name, contents, tmpfile=tmp, **kwargs)
+
+    @classmethod
+    def parse_arg(cls, s):
+        try:
+            name, contents, *rest = s.split(':')
+        except ValueError as e:
+            raise ValueError(f'Cannot parse section spec (name or contents missing): {s!r}') from e
+        if rest:
+            raise ValueError(f'Cannot parse section spec (extraneous parameters): {s!r}')
+
+        if contents.startswith('@'):
+            contents = pathlib.Path(contents[1:])
+
+        return cls.create(name, contents)
+
+    def size(self):
+        return self.content.stat().st_size
+
+    def check_name(self):
+        # PE section names with more than 8 characters are legal, but our stub does
+        # not support them.
+        if not self.name.isascii() or not self.name.isprintable():
+            raise ValueError(f'Bad section name: {self.name!r}')
+        if len(self.name) > 8:
+            raise ValueError(f'Section name too long: {self.name!r}')
+
+
+@dataclasses.dataclass
+class UKI:
+    executable: list[typing.Union[pathlib.Path, str]]
+    sections: list[Section] = dataclasses.field(default_factory=list, init=False)
+    offset: typing.Optional[int] = dataclasses.field(default=None, init=False)
+
+    def __post_init__(self):
+        self.offset = round_up(pe_next_section_offset(self.executable))
+
+    def add_section(self, section):
+        assert self.offset
+        assert section.offset is None
+
+        if section.name in [s.name for s in self.sections]:
+            raise ValueError(f'Duplicate section {section.name}')
+
+        section.offset = self.offset
+        self.offset += round_up(section.size())
+        self.sections += [section]
+
+
+def parse_banks(s):
+    banks = re.split(r',|\s+', s)
+    # TODO: do some sanity checking here
+    return banks
+
+
+KNOWN_PHASES = (
+    'enter-initrd',
+    'leave-initrd',
+    'sysinit',
+    'ready',
+    'shutdown',
+    'final',
+)
+
+def parse_phase_paths(s):
+    # Split on commas or whitespace here. Commas might be hard to parse visually.
+    paths = re.split(r',|\s+', s)
+
+    for path in paths:
+        for phase in path.split(':'):
+            if phase not in KNOWN_PHASES:
+                raise argparse.ArgumentTypeError(f'Unknown boot phase {phase!r} ({path=})')
+
+    return paths
+
+
+def check_splash(filename):
+    if filename is None:
+        return
+
+    # import is delayed, to avoid import when the splash image is not used
+    try:
+        from PIL import Image
+    except ImportError:
+        return
+
+    img = Image.open(filename, formats=['BMP'])
+    print(f'Splash image {filename} is {img.width}×{img.height} pixels')
+
+
+def check_inputs(opts):
+    for name, value in vars(opts).items():
+        if name in {'output', 'tools'}:
+            continue
+
+        if not isinstance(value, pathlib.Path):
+            continue
+
+        # Open file to check that we can read it, or generate an exception
+        value.open().close()
+
+    check_splash(opts.splash)
+
+
+def find_tool(name, fallback=None, opts=None):
+    if opts and opts.tools:
+        for d in opts.tools:
+            tool = d / name
+            if tool.exists():
+                return tool
+
+    if shutil.which(name) is not None:
+        return name
+
+    return fallback
+
+
+def combine_signatures(pcrsigs):
+    combined = collections.defaultdict(list)
+    for pcrsig in pcrsigs:
+        for bank, sigs in pcrsig.items():
+            for sig in sigs:
+                if sig not in combined[bank]:
+                    combined[bank] += [sig]
+    return json.dumps(combined)
+
+
+def call_systemd_measure(uki, linux, opts):
+    measure_tool = find_tool('systemd-measure',
+                             '/usr/lib/systemd/systemd-measure',
+                             opts=opts)
+
+    banks = opts.pcr_banks or ()
+
+    # PCR measurement
+
+    if opts.measure:
+        pp_groups = opts.phase_path_groups or []
+
+        cmd = [
+            measure_tool,
+            'calculate',
+            f'--linux={linux}',
+            *(f"--{s.name.removeprefix('.')}={s.content}"
+              for s in uki.sections
+              if s.measure),
+            *(f'--bank={bank}'
+              for bank in banks),
+            # For measurement, the keys are not relevant, so we can lump all the phase paths
+            # into one call to systemd-measure calculate.
+            *(f'--phase={phase_path}'
+              for phase_path in itertools.chain.from_iterable(pp_groups)),
+        ]
+
+        print('+', shell_join(cmd))
+        subprocess.check_call(cmd)
+
+    # PCR signing
+
+    if opts.pcr_private_keys:
+        n_priv = len(opts.pcr_private_keys or ())
+        pp_groups = opts.phase_path_groups or [None] * n_priv
+        pub_keys = opts.pcr_public_keys or [None] * n_priv
+
+        pcrsigs = []
+
+        cmd = [
+            measure_tool,
+            'sign',
+            f'--linux={linux}',
+            *(f"--{s.name.removeprefix('.')}={s.content}"
+              for s in uki.sections
+              if s.measure),
+            *(f'--bank={bank}'
+              for bank in banks),
+        ]
+
+        for priv_key, pub_key, group in zip(opts.pcr_private_keys,
+                                            pub_keys,
+                                            pp_groups):
+            extra = [f'--private-key={priv_key}']
+            if pub_key:
+                extra += [f'--public-key={pub_key}']
+            extra += [f'--phase={phase_path}' for phase_path in group or ()]
+
+            print('+', shell_join(cmd + extra))
+            pcrsig = subprocess.check_output(cmd + extra, text=True)
+            pcrsig = json.loads(pcrsig)
+            pcrsigs += [pcrsig]
+
+        combined = combine_signatures(pcrsigs)
+        uki.add_section(Section.create('.pcrsig', combined))
+
+
+def join_initrds(initrds):
+    if len(initrds) == 0:
+        return None
+    elif len(initrds) == 1:
+        return initrds[0]
+
+    seq = []
+    for file in initrds:
+        initrd = file.read_bytes()
+        n = len(initrd)
+        padding = b'\0' * (round_up(n, 4) - n)  # pad to 32 bit alignment
+        seq += [initrd, padding]
+
+    return b''.join(seq)
+
+
+def pairwise(iterable):
+    a, b = itertools.tee(iterable)
+    next(b, None)
+    return zip(a, b)
+
+
+def pe_validate(filename):
+    import pefile
+
+    pe = pefile.PE(filename, fast_load=True)
+
+    sections = sorted(pe.sections, key=lambda s: (s.VirtualAddress, s.Misc_VirtualSize))
+
+    for l, r in pairwise(sections):
+        if l.VirtualAddress + l.Misc_VirtualSize > r.VirtualAddress + r.Misc_VirtualSize:
+            raise ValueError(f'Section "{l.Name.decode()}" ({l.VirtualAddress}, {l.Misc_VirtualSize}) overlaps with section "{r.Name.decode()}" ({r.VirtualAddress}, {r.Misc_VirtualSize})')
+
+
+def make_uki(opts):
+    # kernel payload signing
+
+    sbsign_tool = find_tool('sbsign', opts=opts)
+    sbsign_invocation = [
+        sbsign_tool,
+        '--key', opts.sb_key,
+        '--cert', opts.sb_cert,
+    ]
+
+    if opts.signing_engine is not None:
+        sbsign_invocation += ['--engine', opts.signing_engine]
+
+    sign_kernel = opts.sign_kernel
+    if sign_kernel is None and opts.sb_key:
+        # figure out if we should sign the kernel
+        sbverify_tool = find_tool('sbverify', opts=opts)
+
+        cmd = [
+            sbverify_tool,
+            '--list',
+            opts.linux,
+        ]
+
+        print('+', shell_join(cmd))
+        info = subprocess.check_output(cmd, text=True)
+
+        # sbverify has wonderful API
+        if 'No signature table present' in info:
+            sign_kernel = True
+
+    if sign_kernel:
+        linux_signed = tempfile.NamedTemporaryFile(prefix='linux-signed')
+        linux = linux_signed.name
+
+        cmd = [
+            *sbsign_invocation,
+            opts.linux,
+            '--output', linux,
+        ]
+
+        print('+', shell_join(cmd))
+        subprocess.check_call(cmd)
+    else:
+        linux = opts.linux
+
+    if opts.uname is None:
+        print('Kernel version not specified, starting autodetection 😖.')
+        opts.uname = Uname.scrape(opts.linux, opts=opts)
+
+    uki = UKI(opts.stub)
+    initrd = join_initrds(opts.initrd)
+
+    # TODO: derive public key from opts.pcr_private_keys?
+    pcrpkey = opts.pcrpkey
+    if pcrpkey is None:
+        if opts.pcr_public_keys and len(opts.pcr_public_keys) == 1:
+            pcrpkey = opts.pcr_public_keys[0]
+
+    sections = [
+        # name,      content,         measure?
+        ('.osrel',   opts.os_release, True ),
+        ('.cmdline', opts.cmdline,    True ),
+        ('.dtb',     opts.devicetree, True ),
+        ('.splash',  opts.splash,     True ),
+        ('.pcrpkey', pcrpkey,         True ),
+        ('.initrd',  initrd,          True ),
+        ('.uname',   opts.uname,      False),
+
+        # linux shall be last to leave breathing room for decompression.
+        # We'll add it later.
+    ]
+
+    for name, content, measure in sections:
+        if content:
+            uki.add_section(Section.create(name, content, measure=measure))
+
+    # systemd-measure doesn't know about those extra sections
+    for section in opts.sections:
+        uki.add_section(section)
+
+    # PCR measurement and signing
+
+    call_systemd_measure(uki, linux, opts=opts)
+
+    # UKI creation
+
+    uki.add_section(
+        Section.create('.linux', linux, measure=True,
+                       flags=['code', 'readonly']))
+
+    if opts.sb_key:
+        unsigned = tempfile.NamedTemporaryFile(prefix='uki')
+        output = unsigned.name
+    else:
+        output = opts.output
+
+    objcopy_tool = find_tool('llvm-objcopy', 'objcopy', opts=opts)
+
+    cmd = [
+        objcopy_tool,
+        opts.stub,
+        *itertools.chain.from_iterable(
+            ('--add-section',       f'{s.name}={s.content}',
+             '--set-section-flags', f"{s.name}={','.join(s.flags)}")
+            for s in uki.sections),
+        output,
+    ]
+
+    if pathlib.Path(objcopy_tool).name != 'llvm-objcopy':
+        cmd += itertools.chain.from_iterable(
+            ('--change-section-vma', f'{s.name}=0x{s.offset:x}') for s in uki.sections)
+
+    print('+', shell_join(cmd))
+    subprocess.check_call(cmd)
+
+    pe_validate(output)
+
+    # UKI signing
+
+    if opts.sb_key:
+        cmd = [
+            *sbsign_invocation,
+            unsigned.name,
+            '--output', opts.output,
+        ]
+        print('+', shell_join(cmd))
+        subprocess.check_call(cmd)
+
+        # We end up with no executable bits, let's reapply them
+        os.umask(umask := os.umask(0))
+        os.chmod(opts.output, 0o777 & ~umask)
+
+    print(f"Wrote {'signed' if opts.sb_key else 'unsigned'} {opts.output}")
+
+
+def parse_args(args=None):
+    p = argparse.ArgumentParser(
+        description='Build and sign Unified Kernel Images',
+        allow_abbrev=False,
+        usage='''\
+usage: ukify [options…] linux initrd…
+       ukify -h | --help
+''')
+
+    # Suppress printing of usage synopsis on errors
+    p.error = lambda message: p.exit(2, f'{p.prog}: error: {message}\n')
+
+    p.add_argument('linux',
+                   type=pathlib.Path,
+                   help='vmlinuz file [.linux section]')
+    p.add_argument('initrd',
+                   type=pathlib.Path,
+                   nargs='*',
+                   help='initrd files [.initrd section]')
+
+    p.add_argument('--cmdline',
+                   metavar='TEXT|@PATH',
+                   help='kernel command line [.cmdline section]')
+
+    p.add_argument('--os-release',
+                   metavar='TEXT|@PATH',
+                   help='path to os-release file [.osrel section]')
+
+    p.add_argument('--devicetree',
+                   metavar='PATH',
+                   type=pathlib.Path,
+                   help='Device Tree file [.dtb section]')
+    p.add_argument('--splash',
+                   metavar='BMP',
+                   type=pathlib.Path,
+                   help='splash image bitmap file [.splash section]')
+    p.add_argument('--pcrpkey',
+                   metavar='KEY',
+                   type=pathlib.Path,
+                   help='embedded public key to seal secrets to [.pcrpkey section]')
+    p.add_argument('--uname',
+                   metavar='VERSION',
+                   help='"uname -r" information [.uname section]')
+
+    p.add_argument('--efi-arch',
+                   metavar='ARCH',
+                   choices=('ia32', 'x64', 'arm', 'aa64', 'riscv64'),
+                   help='target EFI architecture')
+
+    p.add_argument('--stub',
+                   type=pathlib.Path,
+                   help='path to the sd-stub file [.text,.data,… sections]')
+
+    p.add_argument('--section',
+                   dest='sections',
+                   metavar='NAME:TEXT|@PATH',
+                   type=Section.parse_arg,
+                   action='append',
+                   default=[],
+                   help='additional section as name and contents [NAME section]')
+
+    p.add_argument('--pcr-private-key',
+                   dest='pcr_private_keys',
+                   metavar='PATH',
+                   type=pathlib.Path,
+                   action='append',
+                   help='private part of the keypair for signing PCR signatures')
+    p.add_argument('--pcr-public-key',
+                   dest='pcr_public_keys',
+                   metavar='PATH',
+                   type=pathlib.Path,
+                   action='append',
+                   help='public part of the keypair for signing PCR signatures')
+    p.add_argument('--phases',
+                   dest='phase_path_groups',
+                   metavar='PHASE-PATH…',
+                   type=parse_phase_paths,
+                   action='append',
+                   help='phase-paths to create signatures for')
+
+    p.add_argument('--pcr-banks',
+                   metavar='BANK…',
+                   type=parse_banks)
+
+    p.add_argument('--signing-engine',
+                   metavar='ENGINE',
+                   help='OpenSSL engine to use for signing')
+    p.add_argument('--secureboot-private-key',
+                   dest='sb_key',
+                   help='path to key file or engine-specific designation for SB signing')
+    p.add_argument('--secureboot-certificate',
+                   dest='sb_cert',
+                   help='path to certificate file or engine-specific designation for SB signing')
+
+    p.add_argument('--sign-kernel',
+                   action=argparse.BooleanOptionalAction,
+                   help='Sign the embedded kernel')
+
+    p.add_argument('--tools',
+                   type=pathlib.Path,
+                   action='append',
+                   help='Directories to search for tools (systemd-measure, llvm-objcopy, ...)')
+
+    p.add_argument('--output', '-o',
+                   type=pathlib.Path,
+                   help='output file path')
+
+    p.add_argument('--measure',
+                   action=argparse.BooleanOptionalAction,
+                   help='print systemd-measure output for the UKI')
+
+    p.add_argument('--version',
+                   action='version',
+                   version=f'ukify {__version__}')
+
+    opts = p.parse_args(args)
+
+    path_is_readable(opts.linux)
+    for initrd in opts.initrd or ():
+        path_is_readable(initrd)
+    path_is_readable(opts.devicetree)
+    path_is_readable(opts.pcrpkey)
+    for key in opts.pcr_private_keys or ():
+        path_is_readable(key)
+    for key in opts.pcr_public_keys or ():
+        path_is_readable(key)
+
+    if opts.cmdline and opts.cmdline.startswith('@'):
+        opts.cmdline = path_is_readable(opts.cmdline[1:])
+
+    if opts.os_release is not None and opts.os_release.startswith('@'):
+        opts.os_release = path_is_readable(opts.os_release[1:])
+    elif opts.os_release is None:
+        p = pathlib.Path('/etc/os-release')
+        if not p.exists():
+            p = path_is_readable('/usr/lib/os-release')
+        opts.os_release = p
+
+    if opts.efi_arch is None:
+        opts.efi_arch = guess_efi_arch()
+
+    if opts.stub is None:
+        opts.stub = path_is_readable(f'/usr/lib/systemd/boot/efi/linux{opts.efi_arch}.efi.stub')
+
+    if opts.signing_engine is None:
+        opts.sb_key = path_is_readable(opts.sb_key) if opts.sb_key else None
+        opts.sb_cert = path_is_readable(opts.sb_cert) if opts.sb_cert else None
+
+    if bool(opts.sb_key) ^ bool(opts.sb_cert):
+        raise ValueError('--secureboot-private-key= and --secureboot-certificate= must be specified together')
+
+    if opts.sign_kernel and not opts.sb_key:
+        raise ValueError('--sign-kernel requires --secureboot-private-key= and --secureboot-certificate= to be specified')
+
+    n_pcr_pub = None if opts.pcr_public_keys is None else len(opts.pcr_public_keys)
+    n_pcr_priv = None if opts.pcr_private_keys is None else len(opts.pcr_private_keys)
+    n_phase_path_groups = None if opts.phase_path_groups is None else len(opts.phase_path_groups)
+    if n_pcr_pub is not None and n_pcr_pub != n_pcr_priv:
+        raise ValueError('--pcr-public-key= specifications must match --pcr-private-key=')
+    if n_phase_path_groups is not None and n_phase_path_groups != n_pcr_priv:
+        raise ValueError('--phases= specifications must match --pcr-private-key=')
+
+    if opts.output is None:
+        suffix = '.efi' if opts.sb_key else '.unsigned.efi'
+        opts.output = opts.linux.name + suffix
+
+    for section in opts.sections:
+        section.check_name()
+
+    return opts
+
+
+def main():
+    opts = parse_args()
+    check_inputs(opts)
+    make_uki(opts)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c
index 0995e35..7449a23 100644
--- a/src/update-utmp/update-utmp.c
+++ b/src/update-utmp/update-utmp.c
@@ -23,7 +23,6 @@
 #include "stdio-util.h"
 #include "strv.h"
 #include "unit-name.h"
-#include "util.h"
 #include "utmp-wtmp.h"
 
 typedef struct Context {
@@ -40,7 +39,7 @@
 #if HAVE_AUDIT
         if (c->audit_fd >= 0)
                 audit_close(c->audit_fd);
-        c->audit_fd = -1;
+        c->audit_fd = -EBADF;
 #endif
 }
 
@@ -222,7 +221,7 @@
 static int run(int argc, char *argv[]) {
         _cleanup_(context_clear) Context c = {
 #if HAVE_AUDIT
-                .audit_fd = -1,
+                .audit_fd = -EBADF,
 #endif
         };
         int r;
diff --git a/src/userdb/meson.build b/src/userdb/meson.build
index 3a6225e..e2dc812 100644
--- a/src/userdb/meson.build
+++ b/src/userdb/meson.build
@@ -1,15 +1,10 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-systemd_userwork_sources = files('''
-        userwork.c
-'''.split())
+systemd_userwork_sources = files('userwork.c')
 
-systemd_userdbd_sources = files('''
-        userdbd-manager.c
-        userdbd-manager.h
-        userdbd.c
-'''.split())
+systemd_userdbd_sources = files(
+        'userdbd-manager.c',
+        'userdbd.c',
+)
 
-userdbctl_sources = files('''
-        userdbctl.c
-'''.split())
+userdbctl_sources = files('userdbctl.c')
diff --git a/src/userdb/userdbctl.c b/src/userdb/userdbctl.c
index 9ec0ad6..eab0c3a 100644
--- a/src/userdb/userdbctl.c
+++ b/src/userdb/userdbctl.c
@@ -3,8 +3,10 @@
 #include <getopt.h>
 #include <utmp.h>
 
+#include "build.h"
 #include "dirent-util.h"
 #include "errno-list.h"
+#include "escape.h"
 #include "fd-util.h"
 #include "format-table.h"
 #include "format-util.h"
@@ -16,6 +18,7 @@
 #include "socket-util.h"
 #include "strv.h"
 #include "terminal-util.h"
+#include "uid-range.h"
 #include "user-record-show.h"
 #include "user-util.h"
 #include "userdb.h"
@@ -33,9 +36,34 @@
 static bool arg_legend = true;
 static char** arg_services = NULL;
 static UserDBFlags arg_userdb_flags = 0;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
+static bool arg_chain = false;
 
 STATIC_DESTRUCTOR_REGISTER(arg_services, strv_freep);
 
+static const char *user_disposition_to_color(UserDisposition d) {
+        assert(d >= 0);
+        assert(d < _USER_DISPOSITION_MAX);
+
+        switch (d) {
+        case USER_INTRINSIC:
+                return ansi_red();
+
+        case USER_SYSTEM:
+        case USER_DYNAMIC:
+                return ansi_green();
+
+        case USER_CONTAINER:
+                return ansi_cyan();
+
+        case USER_RESERVED:
+                return ansi_red();
+
+        default:
+                return NULL;
+        }
+}
+
 static int show_user(UserRecord *ur, Table *table) {
         int r;
 
@@ -58,7 +86,7 @@
                 break;
 
         case OUTPUT_JSON:
-                json_variant_dump(ur->json, JSON_FORMAT_COLOR_AUTO|JSON_FORMAT_PRETTY, NULL, 0);
+                json_variant_dump(ur->json, arg_json_format_flags, NULL, 0);
                 break;
 
         case OUTPUT_FRIENDLY:
@@ -71,31 +99,247 @@
 
                 break;
 
-        case OUTPUT_TABLE:
+        case OUTPUT_TABLE: {
+                UserDisposition d;
+
                 assert(table);
+                d = user_record_disposition(ur);
 
                 r = table_add_many(
                                 table,
+                                TABLE_STRING, "",
                                 TABLE_STRING, ur->user_name,
-                                TABLE_STRING, user_disposition_to_string(user_record_disposition(ur)),
+                                TABLE_SET_COLOR, user_disposition_to_color(d),
+                                TABLE_STRING, user_disposition_to_string(d),
                                 TABLE_UID, ur->uid,
                                 TABLE_GID, user_record_gid(ur),
                                 TABLE_STRING, empty_to_null(ur->real_name),
                                 TABLE_STRING, user_record_home_directory(ur),
                                 TABLE_STRING, user_record_shell(ur),
-                                TABLE_INT, (int) user_record_disposition(ur));
+                                TABLE_INT, 0);
                 if (r < 0)
                         return table_log_add_error(r);
 
                 break;
+        }
 
         default:
-                assert_not_reached("Unexpected output mode");
+                assert_not_reached();
         }
 
         return 0;
 }
 
+static const struct {
+        uid_t first, last;
+        const char *name;
+        UserDisposition disposition;
+} uid_range_table[] = {
+        {
+                .first = 1,
+                .last = SYSTEM_UID_MAX,
+                .name = "system",
+                .disposition = USER_SYSTEM,
+        },
+        {
+                .first = DYNAMIC_UID_MIN,
+                .last = DYNAMIC_UID_MAX,
+                .name = "dynamic system",
+                .disposition = USER_DYNAMIC,
+        },
+        {
+                .first = CONTAINER_UID_BASE_MIN,
+                .last = CONTAINER_UID_BASE_MAX,
+                .name = "container",
+                .disposition = USER_CONTAINER,
+        },
+#if ENABLE_HOMED
+        {
+                .first = HOME_UID_MIN,
+                .last = HOME_UID_MAX,
+                .name = "systemd-homed",
+                .disposition = USER_REGULAR,
+        },
+#endif
+        {
+                .first = MAP_UID_MIN,
+                .last = MAP_UID_MAX,
+                .name = "mapped",
+                .disposition = USER_REGULAR,
+        },
+};
+
+static int table_add_uid_boundaries(Table *table, const UidRange *p) {
+        int r;
+
+        assert(table);
+
+        for (size_t i = 0; i < ELEMENTSOF(uid_range_table); i++) {
+                _cleanup_free_ char *name = NULL, *comment = NULL;
+
+                if (!uid_range_covers(p, uid_range_table[i].first, uid_range_table[i].last - uid_range_table[i].first + 1))
+                        continue;
+
+                name = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_DOWN),
+                               " begin ", uid_range_table[i].name, " users ",
+                               special_glyph(SPECIAL_GLYPH_ARROW_DOWN));
+                if (!name)
+                        return log_oom();
+
+                comment = strjoin("First ", uid_range_table[i].name, " user");
+                if (!comment)
+                        return log_oom();
+
+                r = table_add_many(
+                                table,
+                                TABLE_STRING, special_glyph(SPECIAL_GLYPH_TREE_TOP),
+                                TABLE_STRING, name,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_STRING, user_disposition_to_string(uid_range_table[i].disposition),
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_UID, uid_range_table[i].first,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_EMPTY,
+                                TABLE_STRING, comment,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_EMPTY,
+                                TABLE_EMPTY,
+                                TABLE_INT, -1); /* sort before any other entry with the same UID */
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                free(name);
+                name = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_UP),
+                               " end ", uid_range_table[i].name, " users ",
+                               special_glyph(SPECIAL_GLYPH_ARROW_UP));
+                if (!name)
+                        return log_oom();
+
+                free(comment);
+                comment = strjoin("Last ", uid_range_table[i].name, " user");
+                if (!comment)
+                        return log_oom();
+
+                r = table_add_many(
+                                table,
+                                TABLE_STRING, special_glyph(SPECIAL_GLYPH_TREE_RIGHT),
+                                TABLE_STRING, name,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_STRING, user_disposition_to_string(uid_range_table[i].disposition),
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_UID, uid_range_table[i].last,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_EMPTY,
+                                TABLE_STRING, comment,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_EMPTY,
+                                TABLE_EMPTY,
+                                TABLE_INT, 1); /* sort after any other entry with the same UID */
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        return ELEMENTSOF(uid_range_table) * 2;
+}
+
+static int add_unavailable_uid(Table *table, uid_t start, uid_t end) {
+        _cleanup_free_ char *name = NULL;
+        int r;
+
+        assert(table);
+        assert(start <= end);
+
+        name = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_DOWN),
+                       " begin unavailable users ",
+                       special_glyph(SPECIAL_GLYPH_ARROW_DOWN));
+        if (!name)
+                return log_oom();
+
+        r = table_add_many(
+                        table,
+                        TABLE_STRING, special_glyph(SPECIAL_GLYPH_TREE_TOP),
+                        TABLE_STRING, name,
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_EMPTY,
+                        TABLE_UID, start,
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_EMPTY,
+                        TABLE_STRING, "First unavailable user",
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_EMPTY,
+                        TABLE_EMPTY,
+                        TABLE_INT, -1); /* sort before an other entry with the same UID */
+        if (r < 0)
+                return table_log_add_error(r);
+
+        free(name);
+        name = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_UP),
+                       " end unavailable users ",
+                       special_glyph(SPECIAL_GLYPH_ARROW_UP));
+        if (!name)
+                return log_oom();
+
+        r = table_add_many(
+                        table,
+                        TABLE_STRING, special_glyph(SPECIAL_GLYPH_TREE_RIGHT),
+                        TABLE_STRING, name,
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_EMPTY,
+                        TABLE_UID, end,
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_EMPTY,
+                        TABLE_STRING, "Last unavailable user",
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_EMPTY,
+                        TABLE_EMPTY,
+                        TABLE_INT, 1); /* sort after any other entry with the same UID */
+        if (r < 0)
+                return table_log_add_error(r);
+
+        return 2;
+}
+
+static int table_add_uid_map(
+                Table *table,
+                const UidRange *p,
+                int (*add_unavailable)(Table *t, uid_t start, uid_t end)) {
+
+        uid_t focus = 0;
+        int n_added = 0, r;
+
+        assert(table);
+        assert(add_unavailable);
+
+        for (size_t i = 0; p && i < p->n_entries; i++) {
+                UidRangeEntry *x = p->entries + i;
+
+                if (focus < x->start) {
+                        r = add_unavailable(table, focus, x->start-1);
+                        if (r < 0)
+                                return r;
+
+                        n_added += r;
+                }
+
+                if (x->start > UINT32_MAX - x->nr) { /* overflow check */
+                        focus = UINT32_MAX;
+                        break;
+                }
+
+                focus = x->start + x->nr;
+        }
+
+        if (focus < UINT32_MAX-1) {
+                r = add_unavailable(table, focus, UINT32_MAX-1);
+                if (r < 0)
+                        return r;
+
+                n_added += r;
+        }
+
+        return n_added;
+}
+
 static int display_user(int argc, char *argv[], void *userdata) {
         _cleanup_(table_unrefp) Table *table = NULL;
         bool draw_separator = false;
@@ -105,20 +349,18 @@
                 arg_output = argc > 1 ? OUTPUT_FRIENDLY : OUTPUT_TABLE;
 
         if (arg_output == OUTPUT_TABLE) {
-                table = table_new("name", "disposition", "uid", "gid", "realname", "home", "shell", "disposition-numeric");
+                table = table_new(" ", "name", "disposition", "uid", "gid", "realname", "home", "shell", "order");
                 if (!table)
                         return log_oom();
 
-                (void) table_set_align_percent(table, table_get_cell(table, 0, 2), 100);
                 (void) table_set_align_percent(table, table_get_cell(table, 0, 3), 100);
-                (void) table_set_empty_string(table, "-");
-                (void) table_set_sort(table, (size_t) 7, (size_t) 2);
-                (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (size_t) 5, (size_t) 6);
+                (void) table_set_align_percent(table, table_get_cell(table, 0, 4), 100);
+                table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
+                (void) table_set_sort(table, (size_t) 3, (size_t) 8);
+                (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (size_t) 5, (size_t) 6, (size_t) 7);
         }
 
-        if (argc > 1) {
-                char **i;
-
+        if (argc > 1)
                 STRV_FOREACH(i, argv + 1) {
                         _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
                         uid_t uid;
@@ -148,39 +390,71 @@
                                 draw_separator = true;
                         }
                 }
-        } else {
+        else {
                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
 
                 r = userdb_all(arg_userdb_flags, &iterator);
-                if (r < 0)
+                if (r == -ENOLINK) /* ENOLINK → Didn't find answer without Varlink, and didn't try Varlink because was configured to off. */
+                        log_debug_errno(r, "No entries found. (Didn't check via Varlink.)");
+                else if (r == -ESRCH) /* ESRCH → Couldn't find any suitable entry, but we checked all sources */
+                        log_debug_errno(r, "No entries found.");
+                else if (r < 0)
                         return log_error_errno(r, "Failed to enumerate users: %m");
+                else {
+                        for (;;) {
+                                _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
 
-                for (;;) {
-                        _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
+                                r = userdb_iterator_get(iterator, &ur);
+                                if (r == -ESRCH)
+                                        break;
+                                if (r == -EHOSTDOWN)
+                                        return log_error_errno(r, "Selected user database service is not available for this request.");
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed acquire next user: %m");
 
-                        r = userdb_iterator_get(iterator, &ur);
-                        if (r == -ESRCH)
-                                break;
-                        if (r == -EHOSTDOWN)
-                                return log_error_errno(r, "Selected user database service is not available for this request.");
-                        if (r < 0)
-                                return log_error_errno(r, "Failed acquire next user: %m");
+                                if (draw_separator && arg_output == OUTPUT_FRIENDLY)
+                                        putchar('\n');
 
-                        if (draw_separator && arg_output == OUTPUT_FRIENDLY)
-                                putchar('\n');
+                                r = show_user(ur, table);
+                                if (r < 0)
+                                        return r;
 
-                        r = show_user(ur, table);
-                        if (r < 0)
-                                return r;
-
-                        draw_separator = true;
+                                draw_separator = true;
+                        }
                 }
         }
 
         if (table) {
-                r = table_print(table, NULL);
+                _cleanup_(uid_range_freep) UidRange *uid_range = NULL;
+                int boundary_lines, uid_map_lines;
+
+                r = uid_range_load_userns(&uid_range, "/proc/self/uid_map");
                 if (r < 0)
-                        return table_log_print_error(r);
+                        log_debug_errno(r, "Failed to load /proc/self/uid_map, ignoring: %m");
+
+                boundary_lines = table_add_uid_boundaries(table, uid_range);
+                if (boundary_lines < 0)
+                        return boundary_lines;
+
+                uid_map_lines = table_add_uid_map(table, uid_range, add_unavailable_uid);
+                if (uid_map_lines < 0)
+                        return uid_map_lines;
+
+                if (table_get_rows(table) > 1) {
+                        r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, arg_legend);
+                        if (r < 0)
+                                return table_log_print_error(r);
+                }
+
+                if (arg_legend) {
+                        size_t k;
+
+                        k = table_get_rows(table) - 1 - boundary_lines - uid_map_lines;
+                        if (k > 0)
+                                printf("\n%zu users listed.\n", k);
+                        else
+                                printf("No users.\n");
+                }
         }
 
         return ret;
@@ -211,7 +485,7 @@
         }
 
         case OUTPUT_JSON:
-                json_variant_dump(gr->json, JSON_FORMAT_COLOR_AUTO|JSON_FORMAT_PRETTY, NULL, 0);
+                json_variant_dump(gr->json, arg_json_format_flags, NULL, 0);
                 break;
 
         case OUTPUT_FRIENDLY:
@@ -224,28 +498,151 @@
 
                 break;
 
-        case OUTPUT_TABLE:
+        case OUTPUT_TABLE: {
+                UserDisposition d;
+
                 assert(table);
+                d = group_record_disposition(gr);
 
                 r = table_add_many(
                                 table,
+                                TABLE_STRING, "",
                                 TABLE_STRING, gr->group_name,
-                                TABLE_STRING, user_disposition_to_string(group_record_disposition(gr)),
+                                TABLE_SET_COLOR, user_disposition_to_color(d),
+                                TABLE_STRING, user_disposition_to_string(d),
                                 TABLE_GID, gr->gid,
                                 TABLE_STRING, gr->description,
-                                TABLE_INT, (int) group_record_disposition(gr));
+                                TABLE_INT, 0);
                 if (r < 0)
                         return table_log_add_error(r);
 
                 break;
+        }
 
         default:
-                assert_not_reached("Unexpected display mode");
+                assert_not_reached();
         }
 
         return 0;
 }
 
+static int table_add_gid_boundaries(Table *table, const UidRange *p) {
+        int r;
+
+        assert(table);
+
+        for (size_t i = 0; i < ELEMENTSOF(uid_range_table); i++) {
+                _cleanup_free_ char *name = NULL, *comment = NULL;
+
+                if (!uid_range_covers(p, uid_range_table[i].first, uid_range_table[i].last))
+                        continue;
+
+                name = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_DOWN),
+                               " begin ", uid_range_table[i].name, " groups ",
+                               special_glyph(SPECIAL_GLYPH_ARROW_DOWN));
+                if (!name)
+                        return log_oom();
+
+                comment = strjoin("First ", uid_range_table[i].name, " group");
+                if (!comment)
+                        return log_oom();
+
+                r = table_add_many(
+                                table,
+                                TABLE_STRING, special_glyph(SPECIAL_GLYPH_TREE_TOP),
+                                TABLE_STRING, name,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_STRING, user_disposition_to_string(uid_range_table[i].disposition),
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_GID, uid_range_table[i].first,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_STRING, comment,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_INT, -1); /* sort before any other entry with the same GID */
+                if (r < 0)
+                        return table_log_add_error(r);
+
+                free(name);
+                name = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_UP),
+                               " end ", uid_range_table[i].name, " groups ",
+                               special_glyph(SPECIAL_GLYPH_ARROW_UP));
+                if (!name)
+                        return log_oom();
+
+                free(comment);
+                comment = strjoin("Last ", uid_range_table[i].name, " group");
+                if (!comment)
+                        return log_oom();
+
+                r = table_add_many(
+                                table,
+                                TABLE_STRING, special_glyph(SPECIAL_GLYPH_TREE_RIGHT),
+                                TABLE_STRING, name,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_STRING, user_disposition_to_string(uid_range_table[i].disposition),
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_GID, uid_range_table[i].last,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_STRING, comment,
+                                TABLE_SET_COLOR, ansi_grey(),
+                                TABLE_INT, 1); /* sort after any other entry with the same GID */
+                if (r < 0)
+                        return table_log_add_error(r);
+        }
+
+        return ELEMENTSOF(uid_range_table) * 2;
+}
+
+static int add_unavailable_gid(Table *table, uid_t start, uid_t end) {
+        _cleanup_free_ char *name = NULL;
+        int r;
+
+        assert(table);
+        assert(start <= end);
+
+        name = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_DOWN),
+                       " begin unavailable groups ",
+                       special_glyph(SPECIAL_GLYPH_ARROW_DOWN));
+        if (!name)
+                return log_oom();
+
+        r = table_add_many(
+                        table,
+                        TABLE_STRING, special_glyph(SPECIAL_GLYPH_TREE_TOP),
+                        TABLE_STRING, name,
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_EMPTY,
+                        TABLE_GID, start,
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_STRING, "First unavailable group",
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_INT, -1); /* sort before any other entry with the same GID */
+        if (r < 0)
+                return table_log_add_error(r);
+
+        free(name);
+        name = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_UP),
+                       " end unavailable groups ",
+                       special_glyph(SPECIAL_GLYPH_ARROW_UP));
+        if (!name)
+                return log_oom();
+
+        r = table_add_many(
+                        table,
+                        TABLE_STRING, special_glyph(SPECIAL_GLYPH_TREE_RIGHT),
+                        TABLE_STRING, name,
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_EMPTY,
+                        TABLE_GID, end,
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_STRING, "Last unavailable group",
+                        TABLE_SET_COLOR, ansi_grey(),
+                        TABLE_INT, 1); /* sort after any other entry with the same GID */
+        if (r < 0)
+                return table_log_add_error(r);
+
+        return 2;
+}
 
 static int display_group(int argc, char *argv[], void *userdata) {
         _cleanup_(table_unrefp) Table *table = NULL;
@@ -256,19 +653,17 @@
                 arg_output = argc > 1 ? OUTPUT_FRIENDLY : OUTPUT_TABLE;
 
         if (arg_output == OUTPUT_TABLE) {
-                table = table_new("name", "disposition", "gid", "description", "disposition-numeric");
+                table = table_new(" ", "name", "disposition", "gid", "description", "order");
                 if (!table)
                         return log_oom();
 
-                (void) table_set_align_percent(table, table_get_cell(table, 0, 2), 100);
-                (void) table_set_empty_string(table, "-");
-                (void) table_set_sort(table, (size_t) 3, (size_t) 2);
-                (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3);
+                (void) table_set_align_percent(table, table_get_cell(table, 0, 3), 100);
+                table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
+                (void) table_set_sort(table, (size_t) 3, (size_t) 5);
+                (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4);
         }
 
-        if (argc > 1) {
-                char **i;
-
+        if (argc > 1)
                 STRV_FOREACH(i, argv + 1) {
                         _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
                         gid_t gid;
@@ -298,41 +693,71 @@
                                 draw_separator = true;
                         }
                 }
-
-        } else {
+        else {
                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
 
                 r = groupdb_all(arg_userdb_flags, &iterator);
-                if (r < 0)
+                if (r == -ENOLINK)
+                        log_debug_errno(r, "No entries found. (Didn't check via Varlink.)");
+                else if (r == -ESRCH)
+                        log_debug_errno(r, "No entries found.");
+                else if (r < 0)
                         return log_error_errno(r, "Failed to enumerate groups: %m");
+                else {
+                        for (;;) {
+                                _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
 
-                for (;;) {
-                        _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
+                                r = groupdb_iterator_get(iterator, &gr);
+                                if (r == -ESRCH)
+                                        break;
+                                if (r == -EHOSTDOWN)
+                                        return log_error_errno(r, "Selected group database service is not available for this request.");
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed acquire next group: %m");
 
-                        r = groupdb_iterator_get(iterator, &gr);
-                        if (r == -ESRCH)
-                                break;
-                        if (r == -EHOSTDOWN)
-                                return log_error_errno(r, "Selected group database service is not available for this request.");
-                        if (r < 0)
-                                return log_error_errno(r, "Failed acquire next group: %m");
+                                if (draw_separator && arg_output == OUTPUT_FRIENDLY)
+                                        putchar('\n');
 
-                        if (draw_separator && arg_output == OUTPUT_FRIENDLY)
-                                putchar('\n');
+                                r = show_group(gr, table);
+                                if (r < 0)
+                                        return r;
 
-                        r = show_group(gr, table);
-                        if (r < 0)
-                                return r;
-
-                        draw_separator = true;
+                                draw_separator = true;
+                        }
                 }
-
         }
 
         if (table) {
-                r = table_print(table, NULL);
+                _cleanup_(uid_range_freep) UidRange *gid_range = NULL;
+                int boundary_lines, gid_map_lines;
+
+                r = uid_range_load_userns(&gid_range, "/proc/self/gid_map");
                 if (r < 0)
-                        return table_log_print_error(r);
+                        log_debug_errno(r, "Failed to load /proc/self/gid_map, ignoring: %m");
+
+                boundary_lines = table_add_gid_boundaries(table, gid_range);
+                if (boundary_lines < 0)
+                        return boundary_lines;
+
+                gid_map_lines = table_add_uid_map(table, gid_range, add_unavailable_gid);
+                if (gid_map_lines < 0)
+                        return gid_map_lines;
+
+                if (table_get_rows(table) > 1) {
+                        r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, arg_legend);
+                        if (r < 0)
+                                return table_log_print_error(r);
+                }
+
+                if (arg_legend) {
+                        size_t k;
+
+                        k = table_get_rows(table) - 1 - boundary_lines - gid_map_lines;
+                        if (k > 0)
+                                printf("\n%zu groups listed.\n", k);
+                        else
+                                printf("No groups.\n");
+                }
         }
 
         return ret;
@@ -362,7 +787,7 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to build JSON object: %m");
 
-                json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO, NULL, NULL);
+                json_variant_dump(v, arg_json_format_flags, NULL, NULL);
                 break;
         }
 
@@ -384,7 +809,7 @@
                 break;
 
         default:
-                assert_not_reached("Unexpected output mode");
+                assert_not_reached();
         }
 
         return 0;
@@ -405,9 +830,7 @@
                 (void) table_set_sort(table, (size_t) 0, (size_t) 1);
         }
 
-        if (argc > 1) {
-                char **i;
-
+        if (argc > 1)
                 STRV_FOREACH(i, argv + 1) {
                         _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
 
@@ -420,7 +843,7 @@
                                 if (r < 0)
                                         return log_error_errno(r, "Failed to enumerate groups of user: %m");
                         } else
-                                assert_not_reached("Unexpected verb");
+                                assert_not_reached();
 
                         for (;;) {
                                 _cleanup_free_ char *user = NULL, *group = NULL;
@@ -438,34 +861,48 @@
                                         return r;
                         }
                 }
-        } else {
+        else {
                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
 
                 r = membershipdb_all(arg_userdb_flags, &iterator);
-                if (r < 0)
+                if (r == -ENOLINK)
+                        log_debug_errno(r, "No entries found. (Didn't check via Varlink.)");
+                else if (r == -ESRCH)
+                        log_debug_errno(r, "No entries found.");
+                else if (r < 0)
                         return log_error_errno(r, "Failed to enumerate memberships: %m");
+                else {
+                        for (;;) {
+                                _cleanup_free_ char *user = NULL, *group = NULL;
 
-                for (;;) {
-                        _cleanup_free_ char *user = NULL, *group = NULL;
+                                r = membershipdb_iterator_get(iterator, &user, &group);
+                                if (r == -ESRCH)
+                                        break;
+                                if (r == -EHOSTDOWN)
+                                        return log_error_errno(r, "Selected membership database service is not available for this request.");
+                                if (r < 0)
+                                        return log_error_errno(r, "Failed acquire next membership: %m");
 
-                        r = membershipdb_iterator_get(iterator, &user, &group);
-                        if (r == -ESRCH)
-                                break;
-                        if (r == -EHOSTDOWN)
-                                return log_error_errno(r, "Selected membership database service is not available for this request.");
-                        if (r < 0)
-                                return log_error_errno(r, "Failed acquire next membership: %m");
-
-                        r = show_membership(user, group, table);
-                        if (r < 0)
-                                return r;
+                                r = show_membership(user, group, table);
+                                if (r < 0)
+                                        return r;
+                        }
                 }
         }
 
         if (table) {
-                r = table_print(table, NULL);
-                if (r < 0)
-                        return table_log_print_error(r);
+                if (table_get_rows(table) > 1) {
+                        r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, arg_legend);
+                        if (r < 0)
+                                return table_log_print_error(r);
+                }
+
+                if (arg_legend) {
+                        if (table_get_rows(table) > 1)
+                                printf("\n%zu memberships listed.\n", table_get_rows(table) - 1);
+                        else
+                                printf("No memberships.\n");
+                }
         }
 
         return ret;
@@ -474,7 +911,6 @@
 static int display_services(int argc, char *argv[], void *userdata) {
         _cleanup_(table_unrefp) Table *t = NULL;
         _cleanup_(closedirp) DIR *d = NULL;
-        struct dirent *de;
         int r;
 
         d = opendir("/run/systemd/userdb/");
@@ -495,25 +931,19 @@
 
         FOREACH_DIRENT(de, d, return -errno) {
                 _cleanup_free_ char *j = NULL, *no = NULL;
-                union sockaddr_union sockaddr;
-                socklen_t sockaddr_len;
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 j = path_join("/run/systemd/userdb/", de->d_name);
                 if (!j)
                         return log_oom();
 
-                r = sockaddr_un_set_path(&sockaddr.un, j);
-                if (r < 0)
-                        return log_error_errno(r, "Path %s does not fit in AF_UNIX socket address: %m", j);
-                sockaddr_len = r;
-
                 fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
                 if (fd < 0)
-                        return log_error_errno(r, "Failed to allocate AF_UNIX/SOCK_STREAM socket: %m");
+                        return log_error_errno(errno, "Failed to allocate AF_UNIX/SOCK_STREAM socket: %m");
 
-                if (connect(fd, &sockaddr.sa, sockaddr_len) < 0) {
-                        no = strjoin("No (", errno_to_name(errno), ")");
+                r = connect_unix_path(fd, dirfd(d), de->d_name);
+                if (r < 0) {
+                        no = strjoin("No (", errno_to_name(r), ")");
                         if (!no)
                                 return log_oom();
                 }
@@ -526,55 +956,107 @@
                         return table_log_add_error(r);
         }
 
-        if (table_get_rows(t) <= 0) {
-                log_info("No services.");
-                return 0;
+        if (table_get_rows(t) > 1) {
+                r = table_print_with_pager(t, arg_json_format_flags, arg_pager_flags, arg_legend);
+                if (r < 0)
+                        return table_log_print_error(r);
         }
 
-        if (arg_output == OUTPUT_JSON)
-                table_print_json(t, NULL, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO);
-        else
-                table_print(t, NULL);
+        if (arg_legend && arg_output != OUTPUT_JSON) {
+                if (table_get_rows(t) > 1)
+                        printf("\n%zu services listed.\n", table_get_rows(t) - 1);
+                else
+                        printf("No services.\n");
+        }
 
         return 0;
 }
 
 static int ssh_authorized_keys(int argc, char *argv[], void *userdata) {
         _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
+        char **chain_invocation;
         int r;
 
+        assert(argc >= 2);
+
+        if (arg_chain) {
+                /* If --chain is specified, the rest of the command line is the chain command */
+
+                if (argc < 3)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "No chain command line specified, refusing.");
+
+                /* Make similar restrictions on the chain command as OpenSSH itself makes on the primary command. */
+                if (!path_is_absolute(argv[2]))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Chain invocation of ssh-authorized-keys commands requires an absolute binary path argument.");
+
+                if (!path_is_normalized(argv[2]))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                               "Chain invocation of ssh-authorized-keys commands requires an normalized binary path argument.");
+
+                chain_invocation = argv + 2;
+        } else {
+                /* If --chain is not specified, then refuse any further arguments */
+
+                if (argc > 2)
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Too many arguments.");
+
+                chain_invocation = NULL;
+        }
+
         r = userdb_by_name(argv[1], arg_userdb_flags, &ur);
         if (r == -ESRCH)
-                return log_error_errno(r, "User %s does not exist.", argv[1]);
+                log_error_errno(r, "User %s does not exist.", argv[1]);
         else if (r == -EHOSTDOWN)
-                return log_error_errno(r, "Selected user database service is not available for this request.");
+                log_error_errno(r, "Selected user database service is not available for this request.");
         else if (r == -EINVAL)
-                return log_error_errno(r, "Failed to find user %s: %m (Invalid user name?)", argv[1]);
+                log_error_errno(r, "Failed to find user %s: %m (Invalid user name?)", argv[1]);
         else if (r < 0)
-                return log_error_errno(r, "Failed to find user %s: %m", argv[1]);
-
-        if (strv_isempty(ur->ssh_authorized_keys))
-                log_debug("User record for %s has no public SSH keys.", argv[1]);
+                log_error_errno(r, "Failed to find user %s: %m", argv[1]);
         else {
-                char **i;
+                if (strv_isempty(ur->ssh_authorized_keys))
+                        log_debug("User record for %s has no public SSH keys.", argv[1]);
+                else
+                        STRV_FOREACH(i, ur->ssh_authorized_keys)
+                                printf("%s\n", *i);
 
-                STRV_FOREACH(i, ur->ssh_authorized_keys)
-                        printf("%s\n", *i);
+                if (ur->incomplete) {
+                        fflush(stdout);
+                        log_warning("Warning: lacking rights to acquire privileged fields of user record of '%s', output incomplete.", ur->user_name);
+                }
         }
 
-        if (ur->incomplete) {
+        if (chain_invocation) {
+                if (DEBUG_LOGGING) {
+                        _cleanup_free_ char *s = NULL;
+
+                        s = quote_command_line(chain_invocation, SHELL_ESCAPE_EMPTY);
+                        if (!s)
+                                return log_oom();
+
+                        log_debug("Chain invoking: %s", s);
+                }
+
                 fflush(stdout);
-                log_warning("Warning: lacking rights to acquire privileged fields of user record of '%s', output incomplete.", ur->user_name);
+                execv(chain_invocation[0], chain_invocation);
+                if (errno == ENOENT) /* Let's handle ENOENT gracefully */
+                        log_warning_errno(errno, "Chain executable '%s' does not exist, ignoring chain invocation.", chain_invocation[0]);
+                else {
+                        log_error_errno(errno, "Failed to invoke chain executable '%s': %m", chain_invocation[0]);
+                        if (r >= 0)
+                                r = -errno;
+                }
         }
 
-        return EXIT_SUCCESS;
+        return r;
 }
 
 static int help(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *link = NULL;
         int r;
 
-        (void) pager_open(arg_pager_flags);
+        pager_open(arg_pager_flags);
 
         r = terminal_urlify_man("userdbctl", "1", &link);
         if (r < 0)
@@ -585,9 +1067,10 @@
                "\nCommands:\n"
                "  user [USER…]               Inspect user\n"
                "  group [GROUP…]             Inspect group\n"
-               "  users-in-group [GROUP…]    Show users that are members of specified group(s)\n"
-               "  groups-of-user [USER…]     Show groups the specified user(s) is a member of\n"
+               "  users-in-group [GROUP…]    Show users that are members of specified groups\n"
+               "  groups-of-user [USER…]     Show groups the specified users are members of\n"
                "  services                   Show enabled database services\n"
+               "  ssh-authorized-keys USER   Show SSH authorized keys for user\n"
                "\nOptions:\n"
                "  -h --help                  Show this help\n"
                "     --version               Show package version\n"
@@ -603,6 +1086,9 @@
                "     --synthesize=BOOL       Synthesize root/nobody user\n"
                "     --with-dropin=BOOL      Control whether to include drop-in records\n"
                "     --with-varlink=BOOL     Control whether to talk to services at all\n"
+               "     --multiplexer=BOOL      Control whether to use the multiplexer\n"
+               "     --json=pretty|short     JSON output mode\n"
+               "     --chain                 Chain another command\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -623,19 +1109,25 @@
                 ARG_WITH_DROPIN,
                 ARG_WITH_VARLINK,
                 ARG_SYNTHESIZE,
+                ARG_MULTIPLEXER,
+                ARG_JSON,
+                ARG_CHAIN,
         };
 
         static const struct option options[] = {
-                { "help",         no_argument,       NULL, 'h'             },
-                { "version",      no_argument,       NULL, ARG_VERSION     },
-                { "no-pager",     no_argument,       NULL, ARG_NO_PAGER    },
-                { "no-legend",    no_argument,       NULL, ARG_NO_LEGEND   },
-                { "output",       required_argument, NULL, ARG_OUTPUT      },
-                { "service",      required_argument, NULL, 's'             },
-                { "with-nss",     required_argument, NULL, ARG_WITH_NSS    },
-                { "with-dropin",  required_argument, NULL, ARG_WITH_DROPIN },
+                { "help",         no_argument,       NULL, 'h'              },
+                { "version",      no_argument,       NULL, ARG_VERSION      },
+                { "no-pager",     no_argument,       NULL, ARG_NO_PAGER     },
+                { "no-legend",    no_argument,       NULL, ARG_NO_LEGEND    },
+                { "output",       required_argument, NULL, ARG_OUTPUT       },
+                { "service",      required_argument, NULL, 's'              },
+                { "with-nss",     required_argument, NULL, ARG_WITH_NSS     },
+                { "with-dropin",  required_argument, NULL, ARG_WITH_DROPIN  },
                 { "with-varlink", required_argument, NULL, ARG_WITH_VARLINK },
-                { "synthesize",   required_argument, NULL, ARG_SYNTHESIZE  },
+                { "synthesize",   required_argument, NULL, ARG_SYNTHESIZE   },
+                { "multiplexer",  required_argument, NULL, ARG_MULTIPLEXER  },
+                { "json",         required_argument, NULL, ARG_JSON         },
+                { "chain",        no_argument,       NULL, ARG_CHAIN        },
                 {}
         };
 
@@ -661,7 +1153,9 @@
         for (;;) {
                 int c;
 
-                c = getopt_long(argc, argv, "hjs:N", options, NULL);
+                c = getopt_long(argc, argv,
+                                arg_chain ? "+hjs:N" : "hjs:N", /* When --chain was used disable parsing of further switches */
+                                options, NULL);
                 if (c < 0)
                         break;
 
@@ -682,7 +1176,9 @@
                         break;
 
                 case ARG_OUTPUT:
-                        if (streq(optarg, "classic"))
+                        if (isempty(optarg))
+                                arg_output = _OUTPUT_INVALID;
+                        else if (streq(optarg, "classic"))
                                 arg_output = OUTPUT_CLASSIC;
                         else if (streq(optarg, "friendly"))
                                 arg_output = OUTPUT_FRIENDLY;
@@ -699,9 +1195,19 @@
                         } else
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid --output= mode: %s", optarg);
 
+                        arg_json_format_flags = arg_output == OUTPUT_JSON ? JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO : JSON_FORMAT_OFF;
+                        break;
+
+                case ARG_JSON:
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
+
+                        arg_output = FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF) ? _OUTPUT_INVALID : OUTPUT_JSON;
                         break;
 
                 case 'j':
+                        arg_json_format_flags = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
                         arg_output = OUTPUT_JSON;
                         break;
 
@@ -758,11 +1264,23 @@
                         SET_FLAG(arg_userdb_flags, USERDB_DONT_SYNTHESIZE, !r);
                         break;
 
+                case ARG_MULTIPLEXER:
+                        r = parse_boolean_argument("--multiplexer=", optarg, NULL);
+                        if (r < 0)
+                                return r;
+
+                        SET_FLAG(arg_userdb_flags, USERDB_AVOID_MULTIPLEXER, !r);
+                        break;
+
+                case ARG_CHAIN:
+                        arg_chain = true;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
                 default:
-                        assert_not_reached("Unhandled option");
+                        assert_not_reached();
                 }
         }
 
@@ -780,7 +1298,7 @@
 
                 /* This one is a helper for sshd_config's AuthorizedKeysCommand= setting, it's not a
                  * user-facing verb and thus should not appear in man pages or --help texts. */
-                { "ssh-authorized-keys", 2,        2,        0,            ssh_authorized_keys },
+                { "ssh-authorized-keys", 2,        VERB_ANY, 0,            ssh_authorized_keys },
                 {}
         };
 
diff --git a/src/userdb/userdbd-manager.c b/src/userdb/userdbd-manager.c
index 0564840..7890d04 100644
--- a/src/userdb/userdbd-manager.c
+++ b/src/userdb/userdbd-manager.c
@@ -20,10 +20,9 @@
 static int start_workers(Manager *m, bool explicit_request);
 
 static int on_sigchld(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(m);
 
         for (;;) {
                 siginfo_t siginfo = {};
@@ -67,10 +66,9 @@
 }
 
 static int on_sigusr2(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
-        Manager *m = userdata;
+        Manager *m = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(m);
 
         (void) start_workers(m, true); /* Workers told us there's more work, let's add one more worker as long as we are below the high watermark */
         return 0;
@@ -85,7 +83,7 @@
                 return -ENOMEM;
 
         *m = (Manager) {
-                .listen_fd = -1,
+                .listen_fd = -EBADF,
                 .worker_ratelimit = {
                         .interval = 5 * USEC_PER_SEC,
                         .burst = 50,
@@ -251,7 +249,6 @@
 }
 
 int manager_startup(Manager *m) {
-        struct timeval ts;
         int n, r;
 
         assert(m);
@@ -280,7 +277,7 @@
 
                 (void) sockaddr_un_unlink(&sockaddr.un);
 
-                RUN_WITH_UMASK(0000)
+                WITH_UMASK(0000)
                         if (bind(m->listen_fd, &sockaddr.sa, SOCKADDR_UN_LEN(sockaddr.un)) < 0)
                                 return log_error_errno(errno, "Failed to bind socket: %m");
 
@@ -300,7 +297,7 @@
 
         /* Let's make sure every accept() call on this socket times out after 25s. This allows workers to be
          * GC'ed on idle */
-        if (setsockopt(m->listen_fd, SOL_SOCKET, SO_RCVTIMEO, timeval_store(&ts, LISTEN_TIMEOUT_USEC), sizeof(ts)) < 0)
+        if (setsockopt(m->listen_fd, SOL_SOCKET, SO_RCVTIMEO, TIMEVAL_STORE(LISTEN_TIMEOUT_USEC), sizeof(struct timeval)) < 0)
                 return log_error_errno(errno, "Failed to se SO_RCVTIMEO: %m");
 
         return start_workers(m, false);
diff --git a/src/userdb/userwork.c b/src/userdb/userwork.c
index 8b7a20b..9fccadc 100644
--- a/src/userdb/userwork.c
+++ b/src/userdb/userwork.c
@@ -37,7 +37,6 @@
 
 static int add_nss_service(JsonVariant **v) {
         _cleanup_(json_variant_unrefp) JsonVariant *status = NULL, *z = NULL;
-        char buf[SD_ID128_STRING_MAX];
         sd_id128_t mid;
         int r;
 
@@ -54,7 +53,7 @@
                 return r;
 
         status = json_variant_ref(json_variant_by_key(*v, "status"));
-        z = json_variant_ref(json_variant_by_key(status, sd_id128_to_string(mid, buf)));
+        z = json_variant_ref(json_variant_by_key(status, SD_ID128_TO_STRING(mid)));
 
         if (json_variant_by_key(z, "service"))
                 return 0;
@@ -63,7 +62,7 @@
         if (r < 0)
                 return r;
 
-        r = json_variant_set_field(&status, buf, z);
+        r = json_variant_set_field(&status, SD_ID128_TO_STRING(mid), z);
         if (r < 0)
                 return r;
 
@@ -115,12 +114,11 @@
 
 static int userdb_flags_from_service(Varlink *link, const char *service, UserDBFlags *ret) {
         assert(link);
-        assert(service);
         assert(ret);
 
         if (streq_ptr(service, "io.systemd.NameServiceSwitch"))
                 *ret = USERDB_NSS_ONLY|USERDB_AVOID_MULTIPLEXER;
-        if (streq_ptr(service, "io.systemd.DropIn"))
+        else if (streq_ptr(service, "io.systemd.DropIn"))
                 *ret = USERDB_DROPIN_ONLY|USERDB_AVOID_MULTIPLEXER;
         else if (streq_ptr(service, "io.systemd.Multiplexer"))
                 *ret = USERDB_AVOID_MULTIPLEXER;
@@ -154,7 +152,8 @@
                 return r;
 
         r = userdb_flags_from_service(link, p.service, &userdb_flags);
-        if (r < 0)
+        if (r != 0) /* return value of < 0 means error (as usual); > 0 means 'already processed and replied,
+                     * we are done'; == 0 means 'not processed, caller should process now' */
                 return r;
 
         if (uid_is_valid(p.uid))
@@ -166,6 +165,14 @@
                 _cleanup_(json_variant_unrefp) JsonVariant *last = NULL;
 
                 r = userdb_all(userdb_flags, &iterator);
+                if (IN_SET(r, -ESRCH, -ENOLINK))
+                        /* We turn off Varlink lookups in various cases (e.g. in case we only enable DropIn
+                         * backend) — this might make userdb_all return ENOLINK (which indicates that varlink
+                         * was off and no other suitable source or entries were found). Let's hide this
+                         * implementation detail and always return NoRecordFound in this case, since from a
+                         * client's perspective it's irrelevant if there was no entry at all or just not on
+                         * the service that the query was limited to. */
+                        return varlink_error(link, "io.systemd.UserDatabase.NoRecordFound", NULL);
                 if (r < 0)
                         return r;
 
@@ -281,7 +288,7 @@
                 return r;
 
         r = userdb_flags_from_service(link, p.service, &userdb_flags);
-        if (r < 0)
+        if (r != 0)
                 return r;
 
         if (gid_is_valid(p.gid))
@@ -293,6 +300,8 @@
                 _cleanup_(json_variant_unrefp) JsonVariant *last = NULL;
 
                 r = groupdb_all(userdb_flags, &iterator);
+                if (IN_SET(r, -ESRCH, -ENOLINK))
+                        return varlink_error(link, "io.systemd.UserDatabase.NoRecordFound", NULL);
                 if (r < 0)
                         return r;
 
@@ -362,7 +371,7 @@
                 return r;
 
         r = userdb_flags_from_service(link, p.service, &userdb_flags);
-        if (r < 0)
+        if (r != 0)
                 return r;
 
         if (p.group_name)
@@ -371,6 +380,8 @@
                 r = membershipdb_by_user(p.user_name, userdb_flags, &iterator);
         else
                 r = membershipdb_all(userdb_flags, &iterator);
+        if (IN_SET(r, -ESRCH, -ENOLINK))
+                return varlink_error(link, "io.systemd.UserDatabase.NoRecordFound", NULL);
         if (r < 0)
                 return r;
 
@@ -492,7 +503,7 @@
         start_time = now(CLOCK_MONOTONIC);
 
         for (;;) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
                 usec_t n;
 
                 /* Exit the worker in regular intervals, to flush out all memory use */
@@ -503,27 +514,21 @@
 
                 n = now(CLOCK_MONOTONIC);
                 if (n >= usec_add(start_time, RUNTIME_MAX_USEC)) {
-                        char buf[FORMAT_TIMESPAN_MAX];
                         log_debug("Exiting worker, ran for %s, that's enough.",
-                                  format_timespan(buf, sizeof(buf), usec_sub_unsigned(n, start_time), 0));
+                                  FORMAT_TIMESPAN(usec_sub_unsigned(n, start_time), 0));
                         break;
                 }
 
                 if (last_busy_usec == USEC_INFINITY)
                         last_busy_usec = n;
                 else if (listen_idle_usec != USEC_INFINITY && n >= usec_add(last_busy_usec, listen_idle_usec)) {
-                        char buf[FORMAT_TIMESPAN_MAX];
                         log_debug("Exiting worker, been idle for %s.",
-                                  format_timespan(buf, sizeof(buf), usec_sub_unsigned(n, last_busy_usec), 0));
+                                  FORMAT_TIMESPAN(usec_sub_unsigned(n, last_busy_usec), 0));
                         break;
                 }
 
                 (void) rename_process("systemd-userwork: waiting...");
-
-                fd = accept4(listen_fd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC);
-                if (fd < 0)
-                        fd = -errno;
-
+                fd = RET_NERRNO(accept4(listen_fd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC));
                 (void) rename_process("systemd-userwork: processing...");
 
                 if (fd == -EAGAIN)
@@ -548,10 +553,10 @@
 
                                 parent = getppid();
                                 if (parent <= 1)
-                                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Parent already died?");
+                                        return log_error_errno(SYNTHETIC_ERRNO(ESRCH), "Parent already died?");
 
                                 if (kill(parent, SIGUSR2) < 0)
-                                        return log_error_errno(errno, "Failed to kill our own parent.");
+                                        return log_error_errno(errno, "Failed to kill our own parent: %m");
                         }
                 }
 
diff --git a/src/vconsole/meson.build b/src/vconsole/meson.build
deleted file mode 100644
index dea4121..0000000
--- a/src/vconsole/meson.build
+++ /dev/null
@@ -1,10 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-
-custom_target(
-        '90-vconsole.rules',
-        input : '90-vconsole.rules.in',
-        output : '90-vconsole.rules',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
-        install : conf.get('ENABLE_VCONSOLE') == 1,
-        install_dir : udevrulesdir)
diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
index d1c3feb..7d3e9db 100644
--- a/src/vconsole/vconsole-setup.c
+++ b/src/vconsole/vconsole-setup.c
@@ -19,7 +19,9 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "creds-util.h"
 #include "env-file.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "io-util.h"
@@ -32,7 +34,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "terminal-util.h"
-#include "util.h"
 #include "virt.h"
 
 static int verify_vc_device(int fd) {
@@ -40,13 +41,7 @@
                 TIOCL_GETFGCONSOLE,
         };
 
-        int r;
-
-        r = ioctl(fd, TIOCLINUX, data);
-        if (r < 0)
-                return -errno;
-
-        return r;
+        return RET_NERRNO(ioctl(fd, TIOCLINUX, data));
 }
 
 static int verify_vc_allocation(unsigned idx) {
@@ -54,10 +49,7 @@
 
         xsprintf(vcname, "/dev/vcs%u", idx);
 
-        if (access(vcname, F_OK) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(access(vcname, F_OK));
 }
 
 static int verify_vc_allocation_byfd(int fd) {
@@ -77,7 +69,7 @@
          * Otherwise we would (likely) interfere with X11's processing of the
          * key events.
          *
-         * http://lists.freedesktop.org/archives/systemd-devel/2013-February/008573.html
+         * https://lists.freedesktop.org/archives/systemd-devel/2013-February/008573.html
          */
 
         if (ioctl(fd, KDGKBMODE, &curr_mode) < 0)
@@ -287,7 +279,7 @@
 
         for (i = 1; i <= 63; i++) {
                 char ttyname[sizeof("/dev/tty63")];
-                _cleanup_close_ int fd_d = -1;
+                _cleanup_close_ int fd_d = -EBADF;
 
                 if (i == src_idx || verify_vc_allocation(i) < 0)
                         continue;
@@ -359,7 +351,7 @@
                 return log_oom();
 
         for (i = 1; i <= 63; i++) {
-                _cleanup_close_ int fd = -1;
+                _cleanup_close_ int fd = -EBADF;
 
                 r = verify_vc_allocation(i);
                 if (r < 0) {
@@ -392,7 +384,7 @@
 }
 
 static int verify_source_vc(char **ret_path, const char *src_vc) {
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         char *path;
         int r;
 
@@ -425,7 +417,7 @@
                 *vc = NULL,
                 *vc_keymap = NULL, *vc_keymap_toggle = NULL,
                 *vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL;
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         bool utf8, keyboard_ok;
         unsigned idx = 0;
         int r;
@@ -443,6 +435,17 @@
 
         utf8 = is_locale_utf8();
 
+        /* Load data from credentials (lowest priority) */
+        r = read_credential_strings_many(
+                        "vconsole.keymap", &vc_keymap,
+                        "vconsole.keymap_toggle", &vc_keymap_toggle,
+                        "vconsole.font", &vc_font,
+                        "vconsole.font_map", &vc_font_map,
+                        "vconsole.font_unimap", &vc_font_unimap);
+        if (r < 0 && r != -ENXIO)
+                log_warning_errno(r, "Failed to import credentials, ignoring: %m");
+
+        /* Load data from configuration file (middle priority) */
         r = parse_env_file(NULL, "/etc/vconsole.conf",
                            "KEYMAP", &vc_keymap,
                            "KEYMAP_TOGGLE", &vc_keymap_toggle,
@@ -450,9 +453,9 @@
                            "FONT_MAP", &vc_font_map,
                            "FONT_UNIMAP", &vc_font_unimap);
         if (r < 0 && r != -ENOENT)
-                log_warning_errno(r, "Failed to read /etc/vconsole.conf: %m");
+                log_warning_errno(r, "Failed to read /etc/vconsole.conf, ignoring: %m");
 
-        /* Let the kernel command line override /etc/vconsole.conf */
+        /* Let the kernel command line override /etc/vconsole.conf (highest priority) */
         r = proc_cmdline_get_key_many(
                         PROC_CMDLINE_STRIP_RD_PREFIX,
                         "vconsole.keymap", &vc_keymap,
@@ -465,7 +468,7 @@
                         "vconsole.font.map", &vc_font_map,
                         "vconsole.font.unimap", &vc_font_unimap);
         if (r < 0 && r != -ENOENT)
-                log_warning_errno(r, "Failed to read /proc/cmdline: %m");
+                log_warning_errno(r, "Failed to read /proc/cmdline, ignoring: %m");
 
         (void) toggle_utf8_sysfs(utf8);
         (void) toggle_utf8_vc(vc, fd, utf8);
diff --git a/src/veritysetup/veritysetup-generator.c b/src/veritysetup/veritysetup-generator.c
index f4d14bc..3481362 100644
--- a/src/veritysetup/veritysetup-generator.c
+++ b/src/veritysetup/veritysetup-generator.c
@@ -22,53 +22,69 @@
 #include "string-util.h"
 #include "unit-name.h"
 
-#define SYSTEMD_VERITYSETUP_SERVICE "systemd-veritysetup@root.service"
+#define SYSTEMD_VERITYSETUP_SERVICE_ROOT "systemd-veritysetup@root.service"
+#define SYSTEMD_VERITYSETUP_SERVICE_USR "systemd-veritysetup@usr.service"
 
 static const char *arg_dest = NULL;
 static bool arg_enabled = true;
 static bool arg_read_veritytab = true;
 static const char *arg_veritytab = NULL;
 static char *arg_root_hash = NULL;
-static char *arg_data_what = NULL;
-static char *arg_hash_what = NULL;
-static char *arg_options = NULL;
+static char *arg_root_data_what = NULL;
+static char *arg_root_hash_what = NULL;
+static char *arg_root_options = NULL;
+static char *arg_usr_hash = NULL;
+static char *arg_usr_data_what = NULL;
+static char *arg_usr_hash_what = NULL;
+static char *arg_usr_options = NULL;
 
 STATIC_DESTRUCTOR_REGISTER(arg_root_hash, freep);
-STATIC_DESTRUCTOR_REGISTER(arg_data_what, freep);
-STATIC_DESTRUCTOR_REGISTER(arg_hash_what, freep);
-STATIC_DESTRUCTOR_REGISTER(arg_options, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_data_what, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_hash_what, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_options, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_usr_hash, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_usr_data_what, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_usr_hash_what, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_usr_options, freep);
 
-static int create_device(void) {
+static int create_device(
+                const char *name,
+                const char *service,
+                const char *hash,
+                const char *data_what,
+                const char *hash_what,
+                const char *options) {
+
         _cleanup_free_ char *u = NULL, *v = NULL, *d = NULL, *e = NULL, *u_escaped = NULL, *v_escaped = NULL,
-                            *root_hash_escaped = NULL, *options_escaped = NULL;
+                            *hash_escaped = NULL, *options_escaped = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        const char *to;
+        const char *to, *from;
         int r;
 
+        assert(name);
+        assert(service);
+
         /* If all three pieces of information are missing, then verity is turned off */
-        if (!arg_root_hash && !arg_data_what && !arg_hash_what)
+        if (!hash && !data_what && !hash_what)
                 return 0;
 
         /* if one of them is missing however, the data is simply incomplete and this is an error */
-        if (!arg_root_hash)
-                log_error("Verity information incomplete, root hash unspecified.");
-        if (!arg_data_what)
-                log_error("Verity information incomplete, root data device unspecified.");
-        if (!arg_hash_what)
-                log_error("Verity information incomplete, root hash device unspecified.");
+        if (!hash)
+                log_error("Verity information for %s incomplete, hash unspecified.", name);
+        if (!data_what)
+                log_error("Verity information for %s incomplete, data device unspecified.", name);
+        if (!hash_what)
+                log_error("Verity information for %s incomplete, hash device unspecified.", name);
 
-        if (!arg_root_hash || !arg_data_what || !arg_hash_what)
+        if (!hash || !data_what || !hash_what)
                 return -EINVAL;
 
-        log_debug("Using root verity data device %s,\n"
-                  "                  hash device %s,\n"
-                  "                      options %s,\n"
-                  "                and root hash %s.", arg_data_what, arg_hash_what, arg_options, arg_root_hash);
+        log_debug("Using %s verity data device %s, hash device %s, options %s, and hash %s.", name, data_what, hash_what, options, hash);
 
-        u = fstab_node_to_udev_node(arg_data_what);
+        u = fstab_node_to_udev_node(data_what);
         if (!u)
                 return log_oom();
-        v = fstab_node_to_udev_node(arg_hash_what);
+        v = fstab_node_to_udev_node(hash_what);
         if (!v)
                 return log_oom();
 
@@ -86,15 +102,15 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to generate unit name: %m");
 
-        options_escaped = specifier_escape(strempty(arg_options));
+        options_escaped = specifier_escape(strempty(options));
         if (!options_escaped)
                 return log_oom();
 
-        root_hash_escaped = specifier_escape(arg_root_hash);
-        if (!root_hash_escaped)
+        hash_escaped = specifier_escape(hash);
+        if (!hash_escaped)
                 return log_oom();
 
-        r = generator_open_unit_file(arg_dest, NULL, SYSTEMD_VERITYSETUP_SERVICE, &f);
+        r = generator_open_unit_file(arg_dest, NULL, service, &f);
         if (r < 0)
                 return r;
 
@@ -112,25 +128,35 @@
                 "\n[Service]\n"
                 "Type=oneshot\n"
                 "RemainAfterExit=yes\n"
-                "ExecStart=" ROOTLIBEXECDIR "/systemd-veritysetup attach root '%s' '%s' '%s' '%s'\n"
-                "ExecStop=" ROOTLIBEXECDIR "/systemd-veritysetup detach root\n",
+                "ExecStart=" ROOTLIBEXECDIR "/systemd-veritysetup attach '%s' '%s' '%s' '%s' '%s'\n"
+                "ExecStop=" ROOTLIBEXECDIR "/systemd-veritysetup detach '%s' \n",
                 d, e,
                 d, e,
-                u_escaped, v_escaped, root_hash_escaped, options_escaped);
+                name, u_escaped, v_escaped, hash_escaped, options_escaped,
+                name);
 
         r = fflush_and_check(f);
         if (r < 0)
-                return log_error_errno(r, "Failed to write file unit "SYSTEMD_VERITYSETUP_SERVICE": %m");
+                return log_error_errno(r, "Failed to write file unit %s: %m", service);
 
-        to = strjoina(arg_dest, "/veritysetup.target.requires/" SYSTEMD_VERITYSETUP_SERVICE);
+        to = strjoina(arg_dest, "/veritysetup.target.requires/", service);
+        from = strjoina("../", service);
 
         (void) mkdir_parents(to, 0755);
-        if (symlink("../" SYSTEMD_VERITYSETUP_SERVICE, to) < 0)
+        if (symlink(from, to) < 0)
                 return log_error_errno(errno, "Failed to create symlink %s: %m", to);
 
         return 0;
 }
 
+static int create_root_device(void) {
+        return create_device("root", SYSTEMD_VERITYSETUP_SERVICE_ROOT, arg_root_hash, arg_root_data_what, arg_root_hash_what, arg_root_options);
+}
+
+static int create_usr_device(void) {
+        return create_device("usr", SYSTEMD_VERITYSETUP_SERVICE_USR, arg_usr_hash, arg_usr_data_what, arg_usr_hash_what, arg_usr_options);
+}
+
 static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
         int r;
 
@@ -164,7 +190,7 @@
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                r = free_and_strdup(&arg_data_what, value);
+                r = free_and_strdup(&arg_root_data_what, value);
                 if (r < 0)
                         return log_oom();
 
@@ -173,7 +199,7 @@
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                r = free_and_strdup(&arg_hash_what, value);
+                r = free_and_strdup(&arg_root_hash_what, value);
                 if (r < 0)
                         return log_oom();
 
@@ -182,7 +208,43 @@
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                r = free_and_strdup(&arg_options, value);
+                r = free_and_strdup(&arg_root_options, value);
+                if (r < 0)
+                        return log_oom();
+
+        } else if (proc_cmdline_key_streq(key, "usrhash")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                r = free_and_strdup(&arg_usr_hash, value);
+                if (r < 0)
+                        return log_oom();
+
+        } else if (proc_cmdline_key_streq(key, "systemd.verity_usr_data")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                r = free_and_strdup(&arg_usr_data_what, value);
+                if (r < 0)
+                        return log_oom();
+
+        } else if (proc_cmdline_key_streq(key, "systemd.verity_usr_hash")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                r = free_and_strdup(&arg_usr_hash_what, value);
+                if (r < 0)
+                        return log_oom();
+
+        } else if (proc_cmdline_key_streq(key, "systemd.verity_usr_options")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                r = free_and_strdup(&arg_usr_options, value);
                 if (r < 0)
                         return log_oom();
 
@@ -191,48 +253,66 @@
         return 0;
 }
 
-static int determine_devices(void) {
+static int determine_device(
+                const char *name,
+                const char *hash,
+                char **data_what,
+                char **hash_what) {
+
+        sd_id128_t data_uuid, verity_uuid;
         _cleanup_free_ void *m = NULL;
-        sd_id128_t root_uuid, verity_uuid;
-        char ids[ID128_UUID_STRING_MAX];
         size_t l;
         int r;
 
-        /* Try to automatically derive the root data and hash device paths from the root hash */
+        assert(name);
+        assert(data_what);
+        assert(hash_what);
 
-        if (!arg_root_hash)
+        if (!hash)
                 return 0;
 
-        if (arg_data_what && arg_hash_what)
+        if (*data_what && *hash_what)
                 return 0;
 
-        r = unhexmem(arg_root_hash, strlen(arg_root_hash), &m, &l);
+        r = unhexmem(hash, strlen(hash), &m, &l);
         if (r < 0)
-                return log_error_errno(r, "Failed to parse root hash: %s", arg_root_hash);
+                return log_error_errno(r, "Failed to parse hash: %s", hash);
         if (l < sizeof(sd_id128_t)) {
-                log_debug("Root hash is shorter than 128 bits (32 characters), ignoring for discovering verity partition.");
+                log_debug("Root hash for %s is shorter than 128 bits (32 characters), ignoring for discovering verity partition.", name);
                 return 0;
         }
 
-        if (!arg_data_what) {
-                memcpy(&root_uuid, m, sizeof(root_uuid));
+        if (!*data_what) {
+                memcpy(&data_uuid, m, sizeof(data_uuid));
 
-                arg_data_what = path_join("/dev/disk/by-partuuid", id128_to_uuid_string(root_uuid, ids));
-                if (!arg_data_what)
+                *data_what = path_join("/dev/disk/by-partuuid", SD_ID128_TO_UUID_STRING(data_uuid));
+                if (!*data_what)
                         return log_oom();
         }
 
-        if (!arg_hash_what) {
+        if (!*hash_what) {
                 memcpy(&verity_uuid, (uint8_t*) m + l - sizeof(verity_uuid), sizeof(verity_uuid));
 
-                arg_hash_what = path_join("/dev/disk/by-partuuid", id128_to_uuid_string(verity_uuid, ids));
-                if (!arg_hash_what)
+                *hash_what = path_join("/dev/disk/by-partuuid", SD_ID128_TO_UUID_STRING(verity_uuid));
+                if (!*hash_what)
                         return log_oom();
         }
 
+        log_info("Using data device %s and hash device %s for %s.", *data_what, *hash_what, name);
+
         return 1;
 }
 
+static int determine_devices(void) {
+        int r;
+
+        r = determine_device("root", arg_root_hash, &arg_root_data_what, &arg_root_hash_what);
+        if (r < 0)
+                return r;
+
+        return determine_device("usr", arg_usr_hash, &arg_usr_data_what, &arg_usr_hash_what);
+}
+
 static int create_disk(
                 const char *name,
                 const char *data_device,
@@ -447,7 +527,11 @@
         if (r < 0)
                 return r;
 
-        return create_device();
+        r = create_root_device();
+        if (r < 0)
+                return r;
+
+        return create_usr_device();
 }
 
 DEFINE_MAIN_GENERATOR_FUNCTION(run);
diff --git a/src/veritysetup/veritysetup.c b/src/veritysetup/veritysetup.c
index 61973bf..ae497b0 100644
--- a/src/veritysetup/veritysetup.c
+++ b/src/veritysetup/veritysetup.c
@@ -12,6 +12,7 @@
 #include "main-func.h"
 #include "path-util.h"
 #include "pretty-print.h"
+#include "process-util.h"
 #include "string-util.h"
 #include "terminal-util.h"
 
@@ -39,40 +40,36 @@
         return 0;
 }
 
-static int looks_like_roothashsig(const char *option) {
-        const char *val;
+static int save_roothashsig_option(const char *option, bool strict) {
         int r;
 
-        if (path_is_absolute(option)) {
+        if (path_is_absolute(option) || startswith(option, "base64:")) {
+                if (!HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY)
+                        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                               "Activation of verity device with signature requested, but cryptsetup does not support crypt_activate_by_signed_key().");
 
-                r = free_and_strdup(&arg_root_hash_signature, option);
+                r = free_and_strdup_warn(&arg_root_hash_signature, option);
                 if (r < 0)
-                        return log_oom();
+                        return r;
 
-                return 1;
+                return true;
         }
 
-        val = startswith(option, "base64:");
-        if (val) {
-
-                r = free_and_strdup(&arg_root_hash_signature, val);
-                if (r < 0)
-                        return log_oom();
-
-                return 1;
-        }
-
-        return 0;
+        if (!strict)
+                return false;
+        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                               "root-hash-signature= expects either full path to signature file or "
+                               "base64 string encoding signature prefixed by base64:.");
 }
 
 static int parse_options(const char *options) {
         int r;
 
         /* backward compatibility with the obsolete ROOTHASHSIG positional argument */
-        r = looks_like_roothashsig(options);
+        r = save_roothashsig_option(options, /* strict= */ false);
         if (r < 0)
                 return r;
-        if (r == 1) {
+        if (r > 0) {
                 log_warning("Usage of ROOTHASHSIG positional argument is deprecated. "
                             "Please use the option root-hash-signature=%s instead.", options);
                 return 0;
@@ -108,17 +105,10 @@
                         arg_activate_flags |= CRYPT_ACTIVATE_PANIC_ON_CORRUPTION;
 #endif
                 else if ((val = startswith(word, "root-hash-signature="))) {
-
-                        r = looks_like_roothashsig(val);
+                        r = save_roothashsig_option(val, /* strict= */ true);
                         if (r < 0)
                                 return r;
-                        if (r == 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "root-hash-signature expects either full path to signature file or "
-                                                                                "base64 string encoding signature prefixed by base64:.");
 
-                        r = free_and_strdup(&arg_root_hash_signature, val);
-                        if (r < 0)
-                                return log_oom();
                 } else
                         log_warning("Encountered unknown option '%s', ignoring.", word);
         }
@@ -128,12 +118,10 @@
 
 static int run(int argc, char *argv[]) {
         _cleanup_(crypt_freep) struct crypt_device *cd = NULL;
+        const char *verb;
         int r;
 
-        if (argc <= 1 ||
-            strv_contains(strv_skip(argv, 1), "--help") ||
-            strv_contains(strv_skip(argv, 1), "-h") ||
-            streq(argv[1], "help"))
+        if (argv_looks_like_help(argc, argv))
                 return help();
 
         if (argc < 3)
@@ -145,32 +133,44 @@
 
         umask(0022);
 
-        if (streq(argv[1], "attach")) {
+        verb = argv[1];
+
+        if (streq(verb, "attach")) {
+                const char *volume, *data_device, *verity_device, *root_hash, *options;
                 _cleanup_free_ void *m = NULL;
                 crypt_status_info status;
                 size_t l;
 
                 if (argc < 6)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "attach requires at least two arguments.");
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "attach requires at least four arguments.");
 
-                r = unhexmem(argv[5], strlen(argv[5]), &m, &l);
+                volume = argv[2];
+                data_device = argv[3];
+                verity_device = argv[4];
+                root_hash = argv[5];
+                options = mangle_none(argc > 6 ? argv[6] : NULL);
+
+                if (!filename_is_valid(volume))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Volume name '%s' is not valid.", volume);
+
+                r = unhexmem(root_hash, SIZE_MAX, &m, &l);
                 if (r < 0)
                         return log_error_errno(r, "Failed to parse root hash: %m");
 
-                r = crypt_init(&cd, argv[4]);
+                r = crypt_init(&cd, verity_device);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to open verity device %s: %m", argv[4]);
+                        return log_error_errno(r, "Failed to open verity device %s: %m", verity_device);
 
                 cryptsetup_enable_logging(cd);
 
-                status = crypt_status(cd, argv[2]);
+                status = crypt_status(cd, volume);
                 if (IN_SET(status, CRYPT_ACTIVE, CRYPT_BUSY)) {
-                        log_info("Volume %s already active.", argv[2]);
+                        log_info("Volume %s already active.", volume);
                         return 0;
                 }
 
-                if (argc > 6) {
-                        r = parse_options(argv[6]);
+                if (options) {
+                        r = parse_options(options);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to parse options: %m");
                 }
@@ -179,11 +179,11 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to load verity superblock: %m");
 
-                r = crypt_set_data_device(cd, argv[3]);
+                r = crypt_set_data_device(cd, data_device);
                 if (r < 0)
                         return log_error_errno(r, "Failed to configure data device: %m");
 
-                if (arg_root_hash_signature && *arg_root_hash_signature) {
+                if (arg_root_hash_signature) {
 #if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY
                         _cleanup_free_ char *hash_sig = NULL;
                         size_t hash_sig_size;
@@ -203,20 +203,26 @@
                                         return log_error_errno(r, "Failed to read root hash signature: %m");
                         }
 
-                        r = crypt_activate_by_signed_key(cd, argv[2], m, l, hash_sig, hash_sig_size, arg_activate_flags);
+                        r = crypt_activate_by_signed_key(cd, volume, m, l, hash_sig, hash_sig_size, arg_activate_flags);
 #else
-                        return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "activation of verity device with signature %s requested, but not supported by cryptsetup due to missing crypt_activate_by_signed_key()", argv[6]);
+                        assert_not_reached();
 #endif
                 } else
-                        r = crypt_activate_by_volume_key(cd, argv[2], m, l, arg_activate_flags);
+                        r = crypt_activate_by_volume_key(cd, volume, m, l, arg_activate_flags);
                 if (r < 0)
                         return log_error_errno(r, "Failed to set up verity device: %m");
 
-        } else if (streq(argv[1], "detach")) {
+        } else if (streq(verb, "detach")) {
+                const char *volume;
 
-                r = crypt_init_by_name(&cd, argv[2]);
+                volume = argv[2];
+
+                if (!filename_is_valid(volume))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Volume name '%s' is not valid.", volume);
+
+                r = crypt_init_by_name(&cd, volume);
                 if (r == -ENODEV) {
-                        log_info("Volume %s already inactive.", argv[2]);
+                        log_info("Volume %s already inactive.", volume);
                         return 0;
                 }
                 if (r < 0)
@@ -224,12 +230,12 @@
 
                 cryptsetup_enable_logging(cd);
 
-                r = crypt_deactivate(cd, argv[2]);
+                r = crypt_deactivate(cd, volume);
                 if (r < 0)
                         return log_error_errno(r, "Failed to deactivate: %m");
 
         } else
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown verb %s.", argv[1]);
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown verb %s.", verb);
 
         return 0;
 }
diff --git a/src/volatile-root/volatile-root.c b/src/volatile-root/volatile-root.c
index 1a6593f..bf0b1de 100644
--- a/src/volatile-root/volatile-root.c
+++ b/src/volatile-root/volatile-root.c
@@ -4,14 +4,14 @@
 
 #include "alloc-util.h"
 #include "blockdev-util.h"
+#include "chase-symlinks.h"
+#include "devnum-util.h"
 #include "escape.h"
-#include "fs-util.h"
 #include "main-func.h"
 #include "mkdir.h"
 #include "mount-util.h"
 #include "mountpoint-util.h"
 #include "path-util.h"
-#include "stat-util.h"
 #include "string-util.h"
 #include "volatile-util.h"
 
@@ -29,7 +29,7 @@
         if (r < 0)
                 return log_error_errno(r, "Couldn't generate volatile sysroot directory: %m");
 
-        r = mount_nofollow_verbose(LOG_ERR, "tmpfs", "/run/systemd/volatile-sysroot", "tmpfs", MS_STRICTATIME, "mode=755" TMPFS_LIMITS_ROOTFS);
+        r = mount_nofollow_verbose(LOG_ERR, "tmpfs", "/run/systemd/volatile-sysroot", "tmpfs", MS_STRICTATIME, "mode=0755" TMPFS_LIMITS_ROOTFS);
         if (r < 0)
                 goto finish_rmdir;
 
@@ -80,7 +80,7 @@
         if (r < 0)
                 return log_error_errno(r, "Couldn't create overlay sysroot directory: %m");
 
-        r = mount_nofollow_verbose(LOG_ERR, "tmpfs", "/run/systemd/overlay-sysroot", "tmpfs", MS_STRICTATIME, "mode=755" TMPFS_LIMITS_ROOTFS);
+        r = mount_nofollow_verbose(LOG_ERR, "tmpfs", "/run/systemd/overlay-sysroot", "tmpfs", MS_STRICTATIME, "mode=0755" TMPFS_LIMITS_ROOTFS);
         if (r < 0)
                 goto finish;
 
@@ -127,7 +127,7 @@
 
         r = query_volatile_mode(&m);
         if (r < 0)
-                return log_error_errno(r, "Failed to determine volatile mode from kernel command line.");
+                return log_error_errno(r, "Failed to determine volatile mode from kernel command line: %m");
         if (r == 0 && argc >= 2) {
                 /* The kernel command line always wins. However if nothing was set there, the argument passed here wins instead. */
                 m = volatile_mode_from_string(argv[1]);
diff --git a/src/xdg-autostart-generator/fuzz-xdg-desktop.c b/src/xdg-autostart-generator/fuzz-xdg-desktop.c
index 52ba7ff..b1b035d 100644
--- a/src/xdg-autostart-generator/fuzz-xdg-desktop.c
+++ b/src/xdg-autostart-generator/fuzz-xdg-desktop.c
@@ -13,10 +13,13 @@
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/fuzz-xdg-desktop.XXXXXX";
-        _cleanup_close_ int fd = -1;
+        _cleanup_close_ int fd = -EBADF;
         _cleanup_(xdg_autostart_service_freep) XdgAutostartService *service = NULL;
         _cleanup_(rm_rf_physical_and_freep) char *tmpdir = NULL;
 
+        if (outside_size_range(size, 0, 65536))
+                return 0;
+
         /* We don't want to fill the logs with messages about parse errors.
          * Disable most logging if not running standalone */
         if (!getenv("SYSTEMD_LOG_LEVEL"))
diff --git a/src/xdg-autostart-generator/fuzz-xdg-desktop.options b/src/xdg-autostart-generator/fuzz-xdg-desktop.options
new file mode 100644
index 0000000..678d526
--- /dev/null
+++ b/src/xdg-autostart-generator/fuzz-xdg-desktop.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 65536
diff --git a/src/xdg-autostart-generator/meson.build b/src/xdg-autostart-generator/meson.build
index aa722f7..5788fd4 100644
--- a/src/xdg-autostart-generator/meson.build
+++ b/src/xdg-autostart-generator/meson.build
@@ -3,16 +3,14 @@
 systemd_xdg_autostart_generator_sources = files(
         'xdg-autostart-generator.c',
         'xdg-autostart-service.c',
-        'xdg-autostart-service.h')
+)
 
 tests += [
-        [['src/xdg-autostart-generator/test-xdg-autostart.c',
-          'src/xdg-autostart-generator/xdg-autostart-service.c',
-          'src/xdg-autostart-generator/xdg-autostart-service.h']],
+        [files('test-xdg-autostart.c',
+               'xdg-autostart-service.c')],
 ]
 
 fuzzers += [
-        [['src/xdg-autostart-generator/fuzz-xdg-desktop.c',
-          'src/xdg-autostart-generator/xdg-autostart-service.c',
-          'src/xdg-autostart-generator/xdg-autostart-service.h']],
+        [files('fuzz-xdg-desktop.c',
+               'xdg-autostart-service.c')],
 ]
diff --git a/src/xdg-autostart-generator/test-xdg-autostart.c b/src/xdg-autostart-generator/test-xdg-autostart.c
index c7a816b..e11f3d9 100644
--- a/src/xdg-autostart-generator/test-xdg-autostart.c
+++ b/src/xdg-autostart-generator/test-xdg-autostart.c
@@ -9,7 +9,7 @@
 #include "tmpfile-util.h"
 #include "xdg-autostart-service.h"
 
-static void test_translate_name(void) {
+TEST(translate_name) {
         _cleanup_free_ char *t;
 
         assert_se(t = xdg_autostart_service_translate_name("a-b.blub.desktop"));
@@ -24,16 +24,29 @@
         assert_se(streq(out, expected));
 }
 
-static void test_xdg_format_exec_start(void) {
-        test_xdg_format_exec_start_one("/bin/sleep 100", "/bin/sleep \"100\"");
+TEST(xdg_format_exec_start) {
+        _cleanup_free_ char *home = NULL;
+        _cleanup_free_ char *expected1, *expected2 = NULL;
+
+        assert_se(get_home_dir(&home) >= 0);
+
+        test_xdg_format_exec_start_one("/bin/sleep 100", "/bin/sleep 100");
 
         /* All standardised % identifiers are stripped. */
         test_xdg_format_exec_start_one("/bin/sleep %f \"%F\" %u %U %d %D\t%n %N %i %c %k %v %m", "/bin/sleep");
 
         /* Unknown % identifier currently remain, but are escaped. */
-        test_xdg_format_exec_start_one("/bin/sleep %X \"%Y\"", "/bin/sleep \"%%X\" \"%%Y\"");
+        test_xdg_format_exec_start_one("/bin/sleep %X \"%Y\"", "/bin/sleep %%X %%Y");
 
         test_xdg_format_exec_start_one("/bin/sleep \";\\\"\"", "/bin/sleep \";\\\"\"");
+
+        /* tilde is expanded only if standalone or at the start of a path */
+        expected1 = strjoin("/bin/ls ", home);
+        test_xdg_format_exec_start_one("/bin/ls ~", expected1);
+        expected2 = strjoin("/bin/ls ", home, "/foo");
+        test_xdg_format_exec_start_one("/bin/ls \"~/foo\"", expected2);
+        test_xdg_format_exec_start_one("/bin/ls ~foo", "/bin/ls ~foo");
+        test_xdg_format_exec_start_one("/bin/ls foo~", "/bin/ls foo~");
 }
 
 static const char* const xdg_desktop_file[] = {
@@ -48,14 +61,16 @@
 
         ("[Desktop Entry]\n"
          "Hidden=\t true\n"),
+        ("[Desktop Entry]\n"
+         "Hidden=\t True\n"),
 };
 
-static void test_xdg_desktop_parse(unsigned i, const char *s) {
+static void test_xdg_desktop_parse_one(unsigned i, const char *s) {
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-xdg-autostart-parser.XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_(xdg_autostart_service_freep) XdgAutostartService *service = NULL;
 
-        log_info("== %s[%i] ==", __func__, i);
+        log_info("== %s[%u] ==", __func__, i);
 
         assert_se(fmkostemp_safe(name, "r+", &f) == 0);
         assert_se(fwrite(s, strlen(s), 1, f) == 1);
@@ -75,19 +90,15 @@
                 assert_se(streq(service->exec_string, "a"));
                 break;
         case 2:
+        case 3:
                 assert_se(service->hidden);
                 break;
         }
 }
 
-int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_DEBUG);
-
-        test_translate_name();
-        test_xdg_format_exec_start();
-
+TEST(xdg_desktop_parse) {
         for (size_t i = 0; i < ELEMENTSOF(xdg_desktop_file); i++)
-                test_xdg_desktop_parse(i, xdg_desktop_file[i]);
-
-        return 0;
+                test_xdg_desktop_parse_one(i, xdg_desktop_file[i]);
 }
+
+DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/src/xdg-autostart-generator/xdg-autostart-condition.c b/src/xdg-autostart-generator/xdg-autostart-condition.c
index c4485cf..9ceea61 100644
--- a/src/xdg-autostart-generator/xdg-autostart-condition.c
+++ b/src/xdg-autostart-generator/xdg-autostart-condition.c
@@ -13,7 +13,6 @@
 static int run(int argc, char *argv[]) {
         _cleanup_strv_free_ char **only_show_in = NULL, **not_show_in = NULL, **desktops = NULL;
         const char *xdg_current_desktop;
-        char **d;
 
         if (argc != 3)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
diff --git a/src/xdg-autostart-generator/xdg-autostart-generator.c b/src/xdg-autostart-generator/xdg-autostart-generator.c
index 7b441a9..918f659 100644
--- a/src/xdg-autostart-generator/xdg-autostart-generator.c
+++ b/src/xdg-autostart-generator/xdg-autostart-generator.c
@@ -7,6 +7,7 @@
 #include "dirent-util.h"
 #include "fd-util.h"
 #include "generator.h"
+#include "glyph-util.h"
 #include "hashmap.h"
 #include "log.h"
 #include "main-func.h"
@@ -24,7 +25,6 @@
         _cleanup_strv_free_ char **config_dirs = NULL;
         _unused_ _cleanup_strv_free_ char **data_dirs = NULL;
         _cleanup_free_ char *user_config_autostart_dir = NULL;
-        char **path;
         int r;
 
         r = xdg_user_config_dir(&user_config_autostart_dir, "/autostart");
@@ -43,40 +43,43 @@
 
         STRV_FOREACH(path, autostart_dirs) {
                 _cleanup_closedir_ DIR *d = NULL;
-                struct dirent *de;
 
+                log_debug("Scanning autostart directory \"%s\"%s", *path, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
                 d = opendir(*path);
                 if (!d) {
-                        if (errno != ENOENT)
-                                log_warning_errno(errno, "Opening %s failed, ignoring: %m", *path);
+                        log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
+                                       "Opening %s failed, ignoring: %m", *path);
                         continue;
                 }
 
                 FOREACH_DIRENT(de, d, log_warning_errno(errno, "Failed to enumerate directory %s, ignoring: %m", *path)) {
-                        _cleanup_free_ char *fpath = NULL, *name = NULL;
-                        _cleanup_(xdg_autostart_service_freep) XdgAutostartService *service = NULL;
                         struct stat st;
-
                         if (fstatat(dirfd(d), de->d_name, &st, 0) < 0) {
-                                log_warning_errno(errno, "stat() failed on %s/%s, ignoring: %m", *path, de->d_name);
+                                log_warning_errno(errno, "%s/%s: stat() failed, ignoring: %m", *path, de->d_name);
                                 continue;
                         }
 
-                        if (!S_ISREG(st.st_mode))
+                        if (!S_ISREG(st.st_mode)) {
+                                log_debug("%s/%s: not a regular file, ignoring.", *path, de->d_name);
                                 continue;
+                        }
 
-                        name = xdg_autostart_service_translate_name(de->d_name);
+                        _cleanup_free_ char *name = xdg_autostart_service_translate_name(de->d_name);
                         if (!name)
                                 return log_oom();
 
-                        if (hashmap_contains(all_services, name))
+                        if (hashmap_contains(all_services, name)) {
+                                log_debug("%s/%s: we have already seen \"%s\", ignoring.",
+                                          *path, de->d_name, name);
                                 continue;
+                        }
 
-                        fpath = path_join(*path, de->d_name);
+                        _cleanup_free_ char *fpath = path_join(*path, de->d_name);
                         if (!fpath)
                                 return log_oom();
 
-                        service = xdg_autostart_service_parse_desktop(fpath);
+                        _cleanup_(xdg_autostart_service_freep) XdgAutostartService *service =
+                                xdg_autostart_service_parse_desktop(fpath);
                         if (!service)
                                 return log_oom();
                         service->name = TAKE_PTR(name);
diff --git a/src/xdg-autostart-generator/xdg-autostart-service.c b/src/xdg-autostart-generator/xdg-autostart-service.c
index 16545be..a174648 100644
--- a/src/xdg-autostart-generator/xdg-autostart-service.c
+++ b/src/xdg-autostart-generator/xdg-autostart-service.c
@@ -8,15 +8,17 @@
 
 #include "conf-parser.h"
 #include "escape.h"
-#include "unit-name.h"
-#include "path-util.h"
 #include "fd-util.h"
 #include "generator.h"
 #include "log.h"
+#include "nulstr-util.h"
+#include "parse-util.h"
+#include "path-util.h"
 #include "specifier.h"
 #include "string-util.h"
-#include "nulstr-util.h"
 #include "strv.h"
+#include "unit-name.h"
+#include "user-util.h"
 
 XdgAutostartService* xdg_autostart_service_free(XdgAutostartService *s) {
         if (!s)
@@ -73,20 +75,17 @@
                 void *data,
                 void *userdata) {
 
-        bool *b = data;
+        bool *b = ASSERT_PTR(data);
+        int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
-        if (streq(rvalue, "true"))
-                *b = true;
-        else if (streq(rvalue, "false"))
-                *b = false;
-        else
+        r = parse_boolean(rvalue);
+        if (r < 0)
                 return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), "Invalid value for boolean: %s", rvalue);
-
+        *b = r;
         return 0;
 }
 
@@ -157,13 +156,12 @@
                 void *userdata) {
 
         _cleanup_free_ char *res = NULL;
-        char **out = data;
+        char **out = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         /* XDG does not allow duplicate definitions. */
         if (*out) {
@@ -228,13 +226,12 @@
                 void *data,
                 void *userdata) {
 
-        char ***ret_sv = data;
+        char ***ret_sv = ASSERT_PTR(data);
         int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
 
         /* XDG does not allow duplicate definitions. */
         if (*ret_sv) {
@@ -288,22 +285,22 @@
                 const void *table,
                 const char *section,
                 const char *lvalue,
-                ConfigParserCallback *func,
-                int *ltype,
-                void **data,
+                ConfigParserCallback *ret_func,
+                int *ret_ltype,
+                void **ret_data,
                 void *userdata) {
 
         assert(lvalue);
 
         /* Ignore any keys with [] as those are translations. */
         if (strchr(lvalue, '[')) {
-                *func = NULL;
-                *ltype = 0;
-                *data = NULL;
+                *ret_func = NULL;
+                *ret_ltype = 0;
+                *ret_data = NULL;
                 return 1;
         }
 
-        return config_item_table_lookup(table, section, lvalue, func, ltype, data, userdata);
+        return config_item_table_lookup(table, section, lvalue, ret_func, ret_ltype, ret_data, userdata);
 }
 
 XdgAutostartService *xdg_autostart_service_parse_desktop(const char *path) {
@@ -353,7 +350,8 @@
         r = config_parse(NULL, service->path, NULL,
                          "Desktop Entry\0",
                          xdg_config_item_table_lookup, items,
-                         CONFIG_PARSE_WARN, service,
+                         CONFIG_PARSE_RELAXED | CONFIG_PARSE_WARN,
+                         service,
                          NULL);
         /* If parsing failed, only hide the file so it will still mask others. */
         if (r < 0) {
@@ -396,11 +394,12 @@
 
         first_arg = true;
         for (i = n = 0; exec_split[i]; i++) {
-                _cleanup_free_ char *c = NULL, *raw = NULL, *p = NULL, *escaped = NULL, *quoted = NULL;
+                _cleanup_free_ char *c = NULL, *raw = NULL, *percent = NULL, *tilde_expanded = NULL;
+                ssize_t l;
 
-                r = cunescape(exec_split[i], 0, &c);
-                if (r < 0)
-                        return log_debug_errno(r, "Failed to unescape '%s': %m", exec_split[i]);
+                l = cunescape(exec_split[i], 0, &c);
+                if (l < 0)
+                        return log_debug_errno(l, "Failed to unescape '%s': %m", exec_split[i]);
 
                 if (first_arg) {
                         _cleanup_free_ char *executable = NULL;
@@ -411,12 +410,7 @@
                         if (r < 0)
                                 return log_info_errno(r, "Exec binary '%s' does not exist: %m", c);
 
-                        escaped = cescape(executable);
-                        if (!escaped)
-                                return log_oom();
-
-                        free(exec_split[n]);
-                        exec_split[n++] = TAKE_PTR(escaped);
+                        free_and_replace(exec_split[n++], executable);
                         continue;
                 }
 
@@ -445,24 +439,34 @@
                 raw = strreplace(c, "%%", "%");
                 if (!raw)
                         return log_oom();
-                p = strreplace(raw, "%", "%%");
-                if (!p)
-                        return log_oom();
-                escaped = cescape(p);
-                if (!escaped)
+                percent = strreplace(raw, "%", "%%");
+                if (!percent)
                         return log_oom();
 
-                quoted = strjoin("\"", escaped, "\"");
-                if (!quoted)
-                        return log_oom();
+                /*
+                 * Expand ~ if it comes at the beginning of an argument to form a path.
+                 *
+                 * The specification does not mandate this, but we do it anyway for compatibility with
+                 * older KDE code, which supported a more shell-like syntax for users making custom entries.
+                 */
+                if (percent[0] == '~' && (isempty(percent + 1) || path_is_absolute(percent + 1))) {
+                        _cleanup_free_ char *home = NULL;
 
-                free(exec_split[n]);
-                exec_split[n++] = TAKE_PTR(quoted);
+                        r = get_home_dir(&home);
+                        if (r < 0)
+                                return r;
+
+                        tilde_expanded = path_join(home, &percent[1]);
+                        if (!tilde_expanded)
+                                return log_oom();
+                        free_and_replace(exec_split[n++], tilde_expanded);
+                } else
+                        free_and_replace(exec_split[n++], percent);
         }
         for (; exec_split[n]; n++)
                 exec_split[n] = mfree(exec_split[n]);
 
-        res = strv_join(exec_split, " ");
+        res = quote_command_line(exec_split, SHELL_ESCAPE_EMPTY);
         if (!res)
                 return log_oom();
 
@@ -471,6 +475,7 @@
 }
 
 static int xdg_autostart_generate_desktop_condition(
+                const XdgAutostartService *service,
                 FILE *f,
                 const char *test_binary,
                 const char *condition) {
@@ -484,7 +489,8 @@
                 r = find_executable(test_binary, &gnome_autostart_condition_path);
                 if (r < 0) {
                         log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
-                                       "%s not found: %m", test_binary);
+                                       "%s: ExecCondition executable %s not found, unit will not be started automatically: %m",
+                                       service->path, test_binary);
                         fprintf(f, "# ExecCondition using %s skipped due to missing binary.\n", test_binary);
                         return 0;
                 }
@@ -493,6 +499,10 @@
                 if (!e_autostart_condition)
                         return log_oom();
 
+                log_debug("%s: ExecCondition converted to %s --condition \"%s\"%s",
+                          service->path, gnome_autostart_condition_path, e_autostart_condition,
+                          special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+
                 fprintf(f,
                          "ExecCondition=%s --condition \"%s\"\n",
                          gnome_autostart_condition_path,
@@ -503,7 +513,7 @@
 }
 
 int xdg_autostart_service_generate_unit(
-                XdgAutostartService *service,
+                const XdgAutostartService *service,
                 const char *dest) {
 
         _cleanup_free_ char *path_escaped = NULL, *exec_start = NULL, *unit = NULL;
@@ -514,23 +524,23 @@
 
         /* Nothing to do for hidden services. */
         if (service->hidden) {
-                log_debug("Not generating service for XDG autostart %s, it is hidden.", service->name);
+                log_debug("%s: not generating unit, entry is hidden.", service->path);
                 return 0;
         }
 
         if (service->systemd_skip) {
-                log_debug("Not generating service for XDG autostart %s, should be skipped by generator.", service->name);
+                log_debug("%s: not generating unit, marked as skipped by generator.", service->path);
                 return 0;
         }
 
         /* Nothing to do if type is not Application. */
         if (!streq_ptr(service->type, "Application")) {
-                log_debug("Not generating service for XDG autostart %s, only Type=Application is supported.", service->name);
+                log_debug("%s: not generating unit, Type=%s is not supported.", service->path, service->type);
                 return 0;
         }
 
         if (!service->exec_string) {
-                log_warning("Not generating service for XDG autostart %s, it is has no Exec= line.", service->name);
+                log_warning("%s: not generating unit, no Exec= line.", service->path);
                 return 0;
         }
 
@@ -540,24 +550,21 @@
                 r = find_executable(service->try_exec, NULL);
                 if (r < 0) {
                         log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
-                                       "Not generating service for XDG autostart %s, could not find TryExec= binary %s: %m",
-                                       service->name, service->try_exec);
+                                       "%s: not generating unit, could not find TryExec= binary %s: %m",
+                                       service->path, service->try_exec);
                         return 0;
                 }
         }
 
         r = xdg_autostart_format_exec_start(service->exec_string, &exec_start);
         if (r < 0) {
-                log_warning_errno(r,
-                                  "Not generating service for XDG autostart %s, error parsing Exec= line: %m",
-                                  service->name);
+                log_warning_errno(r, "%s: not generating unit, error parsing Exec= line: %m", service->path);
                 return 0;
         }
 
         if (service->gnome_autostart_phase) {
                 /* There is no explicit value for the "Application" phase. */
-                log_debug("Not generating service for XDG autostart %s, startup phases are not supported.",
-                          service->name);
+                log_debug("%s: not generating unit, startup phases are not supported.", service->path);
                 return 0;
         }
 
@@ -571,7 +578,7 @@
 
         f = fopen(unit, "wxe");
         if (!f)
-                return log_error_errno(errno, "Failed to create unit file %s: %m", unit);
+                return log_error_errno(errno, "%s: failed to create unit file %s: %m", service->path, unit);
 
         fprintf(f,
                 "# Automatically generated by systemd-xdg-autostart-generator\n\n"
@@ -598,6 +605,7 @@
         fprintf(f,
                 "\n[Service]\n"
                 "Type=exec\n"
+                "ExitType=cgroup\n"
                 "ExecStart=:%s\n"
                 "Restart=no\n"
                 "TimeoutSec=5s\n"
@@ -635,19 +643,19 @@
                         e_not_show_in);
         }
 
-        r = xdg_autostart_generate_desktop_condition(f,
+        r = xdg_autostart_generate_desktop_condition(service, f,
                                                      "gnome-systemd-autostart-condition",
                                                      service->autostart_condition);
         if (r < 0)
                 return r;
 
-        r = xdg_autostart_generate_desktop_condition(f,
+        r = xdg_autostart_generate_desktop_condition(service, f,
                                                      "kde-systemd-start-condition",
                                                      service->kde_autostart_condition);
         if (r < 0)
                 return r;
 
-        (void) generator_add_symlink(dest, "xdg-desktop-autostart.target", "wants", service->name);
-
-        return 0;
+        log_debug("%s: symlinking %s in xdg-desktop-autostart.target/.wants%s",
+                  service->path, service->name, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+        return generator_add_symlink(dest, "xdg-desktop-autostart.target", "wants", service->name);
 }
diff --git a/src/xdg-autostart-generator/xdg-autostart-service.h b/src/xdg-autostart-generator/xdg-autostart-service.h
index 2641718..61a4a73 100644
--- a/src/xdg-autostart-generator/xdg-autostart-service.h
+++ b/src/xdg-autostart-generator/xdg-autostart-service.h
@@ -26,7 +26,6 @@
 
 } XdgAutostartService;
 
-
 XdgAutostartService * xdg_autostart_service_free(XdgAutostartService *s);
 DEFINE_TRIVIAL_CLEANUP_FUNC(XdgAutostartService*, xdg_autostart_service_free);
 
@@ -34,4 +33,4 @@
 int xdg_autostart_format_exec_start(const char *exec, char **ret_exec_start);
 
 XdgAutostartService *xdg_autostart_service_parse_desktop(const char *path);
-int xdg_autostart_service_generate_unit(XdgAutostartService *service, const char *dest);
+int xdg_autostart_service_generate_unit(const XdgAutostartService *service, const char *dest);
diff --git a/sysctl.d/50-default.conf b/sysctl.d/50-default.conf
index f41e24b..69de91a 100644
--- a/sysctl.d/50-default.conf
+++ b/sysctl.d/50-default.conf
@@ -14,7 +14,7 @@
 # System Request functionality of the kernel (SYNC)
 #
 # Use kernel.sysrq = 1 to allow all keys.
-# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html for a list
+# See https://docs.kernel.org/admin-guide/sysrq.html for a list
 # of values and keys.
 kernel.sysrq = 16
 
diff --git a/sysctl.d/meson.build b/sysctl.d/meson.build
index 6f3db59..ecec903 100644
--- a/sysctl.d/meson.build
+++ b/sysctl.d/meson.build
@@ -16,12 +16,11 @@
         '50-coredump.conf',
         input : '50-coredump.conf.in',
         output : '50-coredump.conf',
-        command : [meson_render_jinja2, config_h, '@INPUT@'],
-        capture : true,
+        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
         install : conf.get('ENABLE_COREDUMP') == 1,
         install_dir : sysctldir)
 
 if install_sysconfdir
         meson.add_install_script('sh', '-c',
-                                 mkdir_p.format(join_paths(sysconfdir, 'sysctl.d')))
+                                 mkdir_p.format(sysconfdir / 'sysctl.d'))
 endif
diff --git a/sysusers.d/basic.conf.in b/sysusers.d/basic.conf.in
index 7f1d052..0aec080 100644
--- a/sysusers.d/basic.conf.in
+++ b/sysusers.d/basic.conf.in
@@ -6,11 +6,12 @@
 #  (at your option) any later version.
 
 # The superuser
-u root    0     "Super User" /root
+g root    0       -            -
+u root    0:0     "Super User" /root
 
 # The nobody user/group for NFS file systems
 g {{NOBODY_GROUP_NAME}} 65534       -            -
-u {{NOBODY_USER_NAME }} 65534:65534 "Nobody"     -
+u {{NOBODY_USER_NAME }} 65534:65534 "Kernel Overflow User"     -
 
 # Administrator group: can *see* more than normal users
 g adm     {{ADM_GID    }}     -            -
diff --git a/sysusers.d/meson.build b/sysusers.d/meson.build
index 894d184..608c4b7 100644
--- a/sysusers.d/meson.build
+++ b/sysusers.d/meson.build
@@ -1,13 +1,31 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-if enable_sysusers
-        install_data('README', install_dir : sysusersdir)
+files = [['README',                ''],
+         ['systemd-coredump.conf', 'ENABLE_COREDUMP'],
+         ['systemd-oom.conf',      'ENABLE_OOMD']]
+
+foreach pair : files
+        if not enable_sysusers
+                # do nothing
+        elif pair[1] == '' or conf.get(pair[1]) == 1
+                install_data(pair[0], install_dir : sysusersdir)
+        else
+                message('Not installing sysusers.d/@0@ because @1@ is @2@'
+                        .format(pair[0], pair[1], conf.get(pair[1], 0)))
+        endif
+endforeach
+
+
+if enable_sysusers and conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
+        install_data('systemd-remote.conf', install_dir : sysusersdir)
 endif
 
-in_files = [['basic.conf',          enable_sysusers],
-            ['systemd.conf',        enable_sysusers],
-            ['systemd-remote.conf', enable_sysusers and
-                                    conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1]]
+
+in_files = [['basic.conf',            enable_sysusers],
+            ['systemd-journal.conf',  enable_sysusers],
+            ['systemd-network.conf',  enable_sysusers and conf.get('ENABLE_NETWORKD') == 1],
+            ['systemd-resolve.conf',  enable_sysusers and conf.get('ENABLE_RESOLVE') == 1],
+            ['systemd-timesync.conf', enable_sysusers and conf.get('ENABLE_TIMESYNCD') == 1]]
 
 foreach tuple : in_files
         file = tuple[0]
@@ -15,8 +33,7 @@
                 file,
                 input : file + '.in',
                 output: file,
-                command : [meson_render_jinja2, config_h, '@INPUT@'],
-                capture : true,
+                command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
                 install : tuple[1],
                 install_dir : sysusersdir)
 endforeach
diff --git a/sysusers.d/systemd-coredump.conf b/sysusers.d/systemd-coredump.conf
new file mode 100644
index 0000000..c4ff003
--- /dev/null
+++ b/sysusers.d/systemd-coredump.conf
@@ -0,0 +1,8 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+u systemd-coredump - "systemd Core Dumper"
diff --git a/sysusers.d/systemd-journal.conf.in b/sysusers.d/systemd-journal.conf.in
new file mode 100644
index 0000000..61768b2
--- /dev/null
+++ b/sysusers.d/systemd-journal.conf.in
@@ -0,0 +1,8 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+g systemd-journal {{SYSTEMD_JOURNAL_GID}} -
diff --git a/sysusers.d/systemd-network.conf.in b/sysusers.d/systemd-network.conf.in
new file mode 100644
index 0000000..7c64a46
--- /dev/null
+++ b/sysusers.d/systemd-network.conf.in
@@ -0,0 +1,8 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+u systemd-network {{SYSTEMD_NETWORK_UID}} "systemd Network Management"
diff --git a/sysusers.d/systemd-oom.conf b/sysusers.d/systemd-oom.conf
new file mode 100644
index 0000000..27e571f
--- /dev/null
+++ b/sysusers.d/systemd-oom.conf
@@ -0,0 +1,8 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+u systemd-oom - "systemd Userspace OOM Killer"
diff --git a/sysusers.d/systemd-remote.conf b/sysusers.d/systemd-remote.conf
new file mode 100644
index 0000000..ca20c24
--- /dev/null
+++ b/sysusers.d/systemd-remote.conf
@@ -0,0 +1,8 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+u systemd-journal-remote  - "systemd Journal Remote"
diff --git a/sysusers.d/systemd-remote.conf.in b/sysusers.d/systemd-remote.conf.in
deleted file mode 100644
index dae1077..0000000
--- a/sysusers.d/systemd-remote.conf.in
+++ /dev/null
@@ -1,10 +0,0 @@
-#  This file is part of systemd.
-#
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
-
-{% if HAVE_MICROHTTPD %}
-u systemd-journal-remote  - "systemd Journal Remote"
-{% endif %}
diff --git a/sysusers.d/systemd-resolve.conf.in b/sysusers.d/systemd-resolve.conf.in
new file mode 100644
index 0000000..9f02ef9
--- /dev/null
+++ b/sysusers.d/systemd-resolve.conf.in
@@ -0,0 +1,8 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+u systemd-resolve {{SYSTEMD_RESOLVE_UID}} "systemd Resolver"
diff --git a/sysusers.d/systemd-timesync.conf.in b/sysusers.d/systemd-timesync.conf.in
new file mode 100644
index 0000000..e50f025
--- /dev/null
+++ b/sysusers.d/systemd-timesync.conf.in
@@ -0,0 +1,8 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+u systemd-timesync {{SYSTEMD_TIMESYNC_UID}} "systemd Time Synchronization"
diff --git a/sysusers.d/systemd.conf.in b/sysusers.d/systemd.conf.in
deleted file mode 100644
index 9941ef8..0000000
--- a/sysusers.d/systemd.conf.in
+++ /dev/null
@@ -1,23 +0,0 @@
-#  This file is part of systemd.
-#
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
-
-g systemd-journal   {{SYSTEMD_JOURNAL_GID}} -
-{% if ENABLE_NETWORKD %}
-u systemd-network   {{SYSTEMD_NETWORK_UID}} "systemd Network Management"
-{% endif %}
-{% if ENABLE_OOMD %}
-u systemd-oom       - "systemd Userspace OOM Killer"
-{% endif %}
-{% if ENABLE_RESOLVE %}
-u systemd-resolve   {{SYSTEMD_RESOLVE_UID}} "systemd Resolver"
-{% endif %}
-{% if ENABLE_TIMESYNCD %}
-u systemd-timesync  {{SYSTEMD_TIMESYNC_UID}} "systemd Time Synchronization"
-{% endif %}
-{% if ENABLE_COREDUMP %}
-u systemd-coredump  - "systemd Core Dumper"
-{% endif %}
diff --git a/tmpfiles.d/credstore.conf b/tmpfiles.d/credstore.conf
new file mode 100644
index 0000000..fb1ccf8
--- /dev/null
+++ b/tmpfiles.d/credstore.conf
@@ -0,0 +1,13 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+# See tmpfiles.d(5) for details
+
+d /etc/credstore 0000 root root
+d /etc/credstore.encrypted 0000 root root
+z /run/credstore 0000 root root
+z /run/credstore.encrypted 0000 root root
diff --git a/tmpfiles.d/etc.conf.in b/tmpfiles.d/etc.conf.in
index 2323fd8..2fdd498 100644
--- a/tmpfiles.d/etc.conf.in
+++ b/tmpfiles.d/etc.conf.in
@@ -12,9 +12,7 @@
 {% if HAVE_SMACK_RUN_LABEL %}
 t /etc/mtab - - - - security.SMACK64=_
 {% endif %}
-{% if ENABLE_RESOLVE %}
-L! /etc/resolv.conf - - - - ../run/systemd/resolve/stub-resolv.conf
-{% endif %}
+C! /etc/locale.conf - - - -
 C! /etc/nsswitch.conf - - - -
 {% if HAVE_PAM %}
 C! /etc/pam.d - - - -
diff --git a/tmpfiles.d/legacy.conf b/tmpfiles.d/legacy.conf
deleted file mode 100644
index 62e2ae0..0000000
--- a/tmpfiles.d/legacy.conf
+++ /dev/null
@@ -1,27 +0,0 @@
-#  This file is part of systemd.
-#
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
-
-# See tmpfiles.d(5) for details
-
-# These files are considered legacy and are unnecessary on legacy-free
-# systems.
-
-d /run/lock 0755 root root -
-L /var/lock - - - - ../run/lock
-
-# /run/lock/subsys is used for serializing SysV service execution, and
-# hence without use on SysV-less systems.
-
-d /run/lock/subsys 0755 root root -
-
-# /forcefsck, /fastboot and /forcequotacheck are deprecated in favor of the
-# kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and
-# 'quotacheck.mode=force'
-
-r! /forcefsck
-r! /fastboot
-r! /forcequotacheck
diff --git a/tmpfiles.d/legacy.conf.in b/tmpfiles.d/legacy.conf.in
new file mode 100644
index 0000000..4f2c0d7
--- /dev/null
+++ b/tmpfiles.d/legacy.conf.in
@@ -0,0 +1,30 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+# See tmpfiles.d(5) for details
+
+# These files are considered legacy and are unnecessary on legacy-free
+# systems.
+
+d /run/lock 0755 root root -
+L /var/lock - - - - ../run/lock
+{% if CREATE_LOG_DIRS %}
+L /var/log/README - - - - ../..{{DOC_DIR}}/README.logs
+{% endif %}
+
+# /run/lock/subsys is used for serializing SysV service execution, and
+# hence without use on SysV-less systems.
+
+d /run/lock/subsys 0755 root root -
+
+# /forcefsck, /fastboot and /forcequotacheck are deprecated in favor of the
+# kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and
+# 'quotacheck.mode=force'
+
+r! /forcefsck
+r! /fastboot
+r! /forcequotacheck
diff --git a/tmpfiles.d/meson.build b/tmpfiles.d/meson.build
index a8aaaca..4d94e37 100644
--- a/tmpfiles.d/meson.build
+++ b/tmpfiles.d/meson.build
@@ -5,14 +5,17 @@
 files = [['README',               ''],
          ['home.conf',            ''],
          ['journal-nocow.conf',   ''],
+         ['portables.conf',       'ENABLE_PORTABLED'],
+         ['systemd-network.conf', 'ENABLE_NETWORKD'],
          ['systemd-nologin.conf', 'HAVE_PAM'],
          ['systemd-nspawn.conf',  'ENABLE_MACHINED'],
-         ['systemd-tmp.conf',     ''],
-         ['portables.conf',       'ENABLE_PORTABLED'],
          ['systemd-pstore.conf',  'ENABLE_PSTORE'],
+         ['systemd-resolve.conf', 'ENABLE_RESOLVE'],
+         ['systemd-tmp.conf',     ''],
          ['tmp.conf',             ''],
          ['x11.conf',             ''],
-         ['legacy.conf',          'HAVE_SYSV_COMPAT'],
+         ['provision.conf',       ''],
+         ['credstore.conf',       ''],
         ]
 
 foreach pair : files
@@ -26,25 +29,31 @@
         endif
 endforeach
 
-in_files = ['etc.conf',
-            'static-nodes-permissions.conf',
-            'systemd.conf',
-            'var.conf']
+in_files = [['etc.conf',                      ''],
+            ['legacy.conf',                   'HAVE_SYSV_COMPAT'],
+            ['static-nodes-permissions.conf', ''],
+            ['systemd.conf',                  ''],
+            ['var.conf',                      ''],
+           ]
 
-foreach file : in_files
-        custom_target(
-                # XXX: workaround for old meson. Drop when upgrading.
-                'tmpfiles+' + file,
-                input : file + '.in',
-                output: file,
-                command : [meson_render_jinja2, config_h, '@INPUT@'],
-                capture : true,
-                install : enable_tmpfiles,
-                install_dir : tmpfilesdir)
+foreach pair : in_files
+        if not enable_tmpfiles
+                # do nothing
+        elif pair[1] == '' or conf.get(pair[1]) == 1
+                custom_target(
+                        pair[0],
+                        input : pair[0] + '.in',
+                        output: pair[0],
+                        command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
+                        install : enable_tmpfiles,
+                        install_dir : tmpfilesdir)
+        else
+                message('Not installing tmpfiles.d/@0@ because @1@ is @2@'
+                        .format(pair[0], pair[1], conf.get(pair[1], 0)))
+        endif
 endforeach
 
 if enable_tmpfiles and install_sysconfdir
         meson.add_install_script(
-                'sh', '-c',
-                mkdir_p.format(join_paths(sysconfdir, 'tmpfiles.d')))
+                'sh', '-c', mkdir_p.format(sysconfdir / 'tmpfiles.d'))
 endif
diff --git a/tmpfiles.d/provision.conf b/tmpfiles.d/provision.conf
new file mode 100644
index 0000000..093104a
--- /dev/null
+++ b/tmpfiles.d/provision.conf
@@ -0,0 +1,22 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+# See tmpfiles.d(5) for details
+
+# Provision additional login messages from credentials, if they are set. Note
+# that these lines are NOPs if the credentials are not set or if the files
+# already exist.
+f^ /etc/motd.d/50-provision.conf - - - - login.motd
+f^ /etc/issue.d/50-provision.conf - - - - login.issue
+
+# Provision a /etc/hosts file from credentials.
+f^ /etc/hosts - - - - network.hosts
+
+# Provision SSH key for root
+d- /root :0700 root :root -
+d- /root/.ssh :0700 root :root -
+f^ /root/.ssh/authorized_keys :0600 root :root - ssh.authorized_keys.root
diff --git a/tmpfiles.d/systemd-network.conf b/tmpfiles.d/systemd-network.conf
new file mode 100644
index 0000000..b30bc91
--- /dev/null
+++ b/tmpfiles.d/systemd-network.conf
@@ -0,0 +1,13 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+# See tmpfiles.d(5) for details
+
+d /run/systemd/netif 0755 systemd-network systemd-network -
+d /run/systemd/netif/links 0755 systemd-network systemd-network -
+d /run/systemd/netif/leases 0755 systemd-network systemd-network -
+d /run/systemd/netif/lldp 0755 systemd-network systemd-network -
diff --git a/tmpfiles.d/systemd-nologin.conf b/tmpfiles.d/systemd-nologin.conf
index 39cfd06..69a212a 100644
--- a/tmpfiles.d/systemd-nologin.conf
+++ b/tmpfiles.d/systemd-nologin.conf
@@ -6,6 +6,5 @@
 #  (at your option) any later version.
 
 # See tmpfiles.d(5), systemd-user-sessions.service(8) and pam_nologin(8).
-# This file has special suffix so it is not run by mistake.
 
 F! /run/nologin 0644 - - - "System is booting up. Unprivileged users are not permitted to log in yet. Please come back later. For technical details, see pam_nologin(8)."
diff --git a/tmpfiles.d/systemd-pstore.conf b/tmpfiles.d/systemd-pstore.conf
index e6540b5..9425169 100644
--- a/tmpfiles.d/systemd-pstore.conf
+++ b/tmpfiles.d/systemd-pstore.conf
@@ -21,7 +21,7 @@
 # upon a normal shutdown (shutdown, reboot, halt).
 #
 # To configure the kernel parameters, uncomment the appropriate
-# line(s) below. The value written is either 'Y' to enable the
+# lines below. The value written is either 'Y' to enable the
 # kernel parameter, or 'N' to disable the kernel parameter.
 #
 # After making a change to this file, do:
diff --git a/tmpfiles.d/systemd-resolve.conf b/tmpfiles.d/systemd-resolve.conf
new file mode 100644
index 0000000..cb1c56d
--- /dev/null
+++ b/tmpfiles.d/systemd-resolve.conf
@@ -0,0 +1,10 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+# See tmpfiles.d(5) for details
+
+L! /etc/resolv.conf - - - - ../run/systemd/resolve/stub-resolv.conf
diff --git a/tmpfiles.d/systemd.conf.in b/tmpfiles.d/systemd.conf.in
index 9b2357c..fa838d8 100644
--- a/tmpfiles.d/systemd.conf.in
+++ b/tmpfiles.d/systemd.conf.in
@@ -18,12 +18,6 @@
 d /run/systemd/users 0755 root root -
 d /run/systemd/machines 0755 root root -
 d /run/systemd/shutdown 0755 root root -
-{% if ENABLE_NETWORKD %}
-d /run/systemd/netif 0755 systemd-network systemd-network -
-d /run/systemd/netif/links 0755 systemd-network systemd-network -
-d /run/systemd/netif/leases 0755 systemd-network systemd-network -
-d /run/systemd/netif/lldp 0755 systemd-network systemd-network -
-{% endif %}
 
 d /run/log 0755 root root -
 
@@ -70,3 +64,9 @@
 d /var/lib/private 0700 root root -
 d /var/log/private 0700 root root -
 d /var/cache/private 0700 root root -
+
+{% if ENABLE_EFI %}
+# Copy sd-stub provided PCR signature and public key file from initrd into /run/, so that it will survive the initrd stage
+C /run/systemd/tpm2-pcr-signature.json 0444 root root - /.extra/tpm2-pcr-signature.json
+C /run/systemd/tpm2-pcr-public-key.pem 0444 root root - /.extra/tpm2-pcr-public-key.pem
+{% endif %}
diff --git a/tmpfiles.d/x11.conf b/tmpfiles.d/x11.conf
index f63184e..ef0b11d 100644
--- a/tmpfiles.d/x11.conf
+++ b/tmpfiles.d/x11.conf
@@ -13,7 +13,6 @@
 D! /tmp/.ICE-unix 1777 root root 10d
 D! /tmp/.XIM-unix 1777 root root 10d
 D! /tmp/.font-unix 1777 root root 10d
-D! /tmp/.Test-unix 1777 root root 10d
 
 # Unlink the X11 lock files
 r! /tmp/.X[0-9]*-lock
diff --git a/tools/build-bpf-skel.py b/tools/build-bpf-skel.py
deleted file mode 100755
index b28766f..0000000
--- a/tools/build-bpf-skel.py
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: LGPL-2.1+
-
-import argparse
-import logging
-import pathlib
-import re
-import subprocess
-import sys
-
-def clang_arch_flag(arch):
-    return '-D__{}__'.format(arch)
-
-
-def target_triplet():
-    gcc_exec = 'gcc'
-
-    try:
-        return subprocess.check_output([gcc_exec, '-dumpmachine'],
-                universal_newlines=True).strip()
-    except subprocess.CalledProcessError as e:
-        logging.error('Failed to get target triplet: {}'.format(e))
-    except FileNotFoundError:
-        logging.error('gcc not installed')
-    return None
-
-
-def clang_compile(clang_exec, clang_flags, src_c, out_file, target_arch,
-        target_triplet):
-    clang_args = [clang_exec, *clang_flags, target_arch, '-I.']
-
-    if target_triplet:
-        clang_args += [
-            '-isystem',
-            '/usr/include/{}'.format(target_triplet)]
-
-    clang_args += [
-        '-idirafter',
-        '/usr/local/include',
-        '-idirafter',
-        '/usr/include']
-
-    clang_args += [src_c, '-o', out_file]
-
-    logging.debug('{}'.format(' '.join(clang_args)))
-    subprocess.check_call(clang_args)
-
-
-def llvm_strip(llvm_strip_exec, in_file):
-    llvm_strip_args = [llvm_strip_exec, '-g', in_file]
-
-    logging.debug('Stripping useless DWARF info:')
-    logging.debug('{}'.format(' '.join(llvm_strip_args)))
-
-    subprocess.check_call(llvm_strip_args)
-
-
-def gen_bpf_skeleton(bpftool_exec, in_file, out_fd):
-    bpftool_args = [bpftool_exec, 'g', 's', in_file]
-
-    logging.debug('Generating BPF skeleton:')
-    logging.debug('{}'.format(' '.join(bpftool_args)))
-    skel = subprocess.check_output(bpftool_args, universal_newlines=True)
-    # libbpf is used via dlopen(), so rename symbols as defined
-    # in src/shared/bpf-dlopen.h
-    skel = re.sub(r'(bpf_object__\w+_skeleton)', r'sym_\1', skel)
-    out_fd.write(skel)
-
-
-def bpf_build(args):
-    clang_flags = [
-            '-Wno-compare-distinct-pointer-types',
-            '-O2',
-            '-target',
-            'bpf',
-            '-g',
-            '-c',
-    ]
-
-    clang_out_path = pathlib.Path(args.bpf_src_c).with_suffix('.o')
-    with clang_out_path.open(mode='w') as clang_out, \
-            open(args.bpf_skel_h, mode='w') as bpf_skel_h:
-        clang_compile(clang_exec=args.clang_exec,
-                clang_flags=clang_flags,
-                src_c=args.bpf_src_c,
-                out_file=clang_out.name,
-                target_arch=clang_arch_flag(args.arch),
-                target_triplet=target_triplet())
-
-        llvm_strip(llvm_strip_exec=args.llvm_strip_exec, in_file=clang_out.name)
-
-        gen_bpf_skeleton(bpftool_exec=args.bpftool_exec,
-                in_file=clang_out.name,
-                out_fd=bpf_skel_h)
-
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-
-    parser.add_argument(
-            'bpf_src_c',
-            help='Path to *.c source of BPF program in systemd source tree \
-                    relative to the work directory')
-
-    parser.add_argument(
-            'bpf_skel_h',
-            help='Path to C header file')
-
-    parser.add_argument(
-            '--clang_exec',
-            help='Path to clang exec')
-
-    parser.add_argument(
-            '--llvm_strip_exec',
-            help='Path to llvm-strip exec')
-
-    parser.add_argument(
-            '--bpftool_exec',
-            help='Path to bpftool exec')
-
-    parser.add_argument(
-            '--arch',
-            help='Target CPU architecture',
-            default='x86_64')
-
-    args = parser.parse_args();
-
-    logging.basicConfig(stream=sys.stderr, level=logging.WARNING)
-    bpf_build(args)
diff --git a/tools/check-api-docs.sh b/tools/check-api-docs.sh
index 0bf053b..2e973a0 100755
--- a/tools/check-api-docs.sh
+++ b/tools/check-api-docs.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: LGPL-2.1-or-later
 set -eu
 set -o pipefail
diff --git a/tools/check-compilation.sh b/tools/check-compilation.sh
deleted file mode 100755
index c2fe3aa..0000000
--- a/tools/check-compilation.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1-or-later
-set -eu
-
-"$@" '-' -o/dev/null </dev/null
diff --git a/tools/check-directives.sh b/tools/check-directives.sh
deleted file mode 100755
index 0661da4..0000000
--- a/tools/check-directives.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env bash
-# SPDX-License-Identifier: LGPL-2.1-or-later
-set -eu
-set -o pipefail
-
-SOURCE_ROOT="${1:?Missing argument: project source root}"
-BUILD_ROOT="${2:?Missing argument: project build root}"
-
-command -v gawk &>/dev/null || exit 77
-
-function generate_directives() {
-    gawk -v sec_rx="${2:-""}" -v unit_type="${3:-""}" '
-    match($0, /^([^ \t\.]+)\.([^ \t\.,]+)/, m) {
-        # res[section][directive] = 1
-        res[m[1]][m[2]] = 1;
-    }
-    END {
-        if (unit_type)
-            print unit_type
-
-        for (section in res) {
-            if (sec_rx && section !~ sec_rx)
-                continue
-
-            print "[" section "]";
-            for (directive in res[section]) {
-                print directive "=";
-            }
-        }
-    }
-    ' "$1"
-}
-
-ret=0
-if ! diff \
-     <(generate_directives "$SOURCE_ROOT"/src/network/networkd-network-gperf.gperf | sort) \
-     <(sort "$SOURCE_ROOT"/test/fuzz/fuzz-network-parser/directives.network); then
-    echo "Looks like test/fuzz/fuzz-network-parser/directives.network hasn't been updated"
-    ret=1
-fi
-
-if ! diff \
-     <(generate_directives "$SOURCE_ROOT"/src/network/netdev/netdev-gperf.gperf | sort) \
-     <(sort "$SOURCE_ROOT"/test/fuzz/fuzz-netdev-parser/directives.netdev); then
-    echo "Looks like test/fuzz/fuzz-netdev-parser/directives.netdev hasn't been updated"
-    ret=1
-fi
-
-if ! diff \
-     <(generate_directives "$SOURCE_ROOT"/src/udev/net/link-config-gperf.gperf | sort) \
-     <(sort "$SOURCE_ROOT"/test/fuzz/fuzz-link-parser/directives.link) ; then
-    echo "Looks like test/fuzz/fuzz-link-parser/directives.link hasn't been updated"
-    ret=1
-fi
-
-for section in Automount Mount Path Scope Slice Socket Swap Timer; do
-    if ! diff \
-         <(generate_directives "$BUILD_ROOT"/src/core/load-fragment-gperf.gperf "$section" "${section,,}" | sort) \
-         <(sort "$SOURCE_ROOT/test/fuzz/fuzz-unit-file/directives.${section,,}") ; then
-        echo "Looks like test/fuzz/fuzz-unit-file/directives.${section,,} hasn't been updated"
-        ret=1
-    fi
-done
-
-if ! diff \
-     <(generate_directives "$BUILD_ROOT"/src/core/load-fragment-gperf.gperf "(Service|Unit|Install)" "service" | sort) \
-     <(sort "$SOURCE_ROOT/test/fuzz/fuzz-unit-file/directives.service") ; then
-    echo "Looks like test/fuzz/fuzz-unit-file/directives.service hasn't been updated"
-    ret=1
-fi
-
-exit $ret
diff --git a/tools/check-help.sh b/tools/check-help.sh
index 8e7d236..f974293 100755
--- a/tools/check-help.sh
+++ b/tools/check-help.sh
@@ -1,10 +1,10 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: LGPL-2.1-or-later
 set -eu
 set -o pipefail
 
-# Note: `grep ... >/dev/null` instead of just `grep -q` is used intentionally
-#       here, since `grep -q` exits on the first match causing SIGPIPE being
+# Note: 'grep ... >/dev/null' instead of just 'grep -q' is used intentionally
+#       here, since 'grep -q' exits on the first match causing SIGPIPE being
 #       sent to the sender.
 
 BINARY="${1:?}"
@@ -24,11 +24,11 @@
 
 # --help prints something. Also catches case where args are ignored.
 if ! "$BINARY" --help | grep . >/dev/null; then
-    echo "$(basename "$BINARY") --help output is empty."
+    echo "$(basename "$BINARY") --help output is empty"
     exit 2
 fi
 
-# no --help output to stdout
+# no --help output to stderr
 if "$BINARY" --help 2>&1 1>/dev/null | grep .; then
     echo "$(basename "$BINARY") --help prints to stderr"
     exit 3
@@ -39,3 +39,9 @@
     echo "$(basename "$BINARY") with an unknown parameter does not print to stderr"
     exit 4
 fi
+
+# --help and -h are equivalent
+if ! diff <("$BINARY" -h) <("$BINARY" --help); then
+    echo "$(basename "$BINARY") --help and -h are not identical"
+    exit 5
+fi
diff --git a/tools/check-version.sh b/tools/check-version.sh
new file mode 100755
index 0000000..faefb46
--- /dev/null
+++ b/tools/check-version.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eu
+set -o pipefail
+
+# Note: 'grep ... >/dev/null' instead of just 'grep -q' is used intentionally
+#       here, since 'grep -q' exits on the first match causing SIGPIPE being
+#       sent to the sender.
+
+BINARY="${1:?}"
+VERSION="${2:?}"
+export SYSTEMD_LOG_LEVEL=info
+
+if [[ ! -x "$BINARY" ]]; then
+    echo "$BINARY is not an executable"
+    exit 1
+fi
+
+# --version prints something. Also catches case where args are ignored.
+if ! "$BINARY" --version | grep . >/dev/null; then
+    echo "$(basename "$BINARY") --version output is empty"
+    exit 2
+fi
+
+# no --version output to stderr
+if "$BINARY" --version 2>&1 1>/dev/null | grep .; then
+    echo "$(basename "$BINARY") --version prints to stderr"
+    exit 3
+fi
+
+# project version appears in version output
+out="$("$BINARY" --version)"
+if ! grep -F "$VERSION" >/dev/null <<<"$out"; then
+    echo "$(basename "$BINARY") --version output does not match '$VERSION': $out"
+    exit 4
+fi
diff --git a/tools/choose-default-locale.sh b/tools/choose-default-locale.sh
deleted file mode 100755
index a5158cf..0000000
--- a/tools/choose-default-locale.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1-or-later
-set -e
-
-# Fedora uses C.utf8 but Debian uses C.UTF-8
-if locale -a | grep -xq -E 'C\.(utf8|UTF-8)'; then
-    echo 'C.UTF-8'
-elif locale -a | grep -xqF 'en_US.utf8'; then
-    echo 'en_US.UTF-8'
-else
-    echo 'C'
-fi
diff --git a/tools/chromiumos/gen_autosuspend_rules.py b/tools/chromiumos/gen_autosuspend_rules.py
index 6e167f6..cbdd577 100644
--- a/tools/chromiumos/gen_autosuspend_rules.py
+++ b/tools/chromiumos/gen_autosuspend_rules.py
@@ -1,9 +1,10 @@
 #!/usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
 # -*- coding: utf-8 -*-
 
 # Copyright 2017 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
+# found in the LICENSES/BSD-3-Clause.txt file.
 
 """Autosuspend udev rule generator
 
diff --git a/tools/coverity.sh b/tools/coverity.sh
index f140b78..361376f 100755
--- a/tools/coverity.sh
+++ b/tools/coverity.sh
@@ -1,228 +1,62 @@
 #!/usr/bin/env bash
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-# The official unmodified version of the script can be found at
-# https://scan.coverity.com/scripts/travisci_build_coverity_scan.sh
+set -eux
 
-set -e
+COVERITY_SCAN_TOOL_BASE="/tmp/coverity-scan-analysis"
+COVERITY_SCAN_PROJECT_NAME="systemd/systemd"
 
-# Declare build command
-COVERITY_SCAN_BUILD_COMMAND="ninja -C cov-build"
+function coverity_install_script {
+    local platform tool_url tool_archive
 
-# Environment check
-# Use default values if not set
-SCAN_URL=${SCAN_URL:="https://scan.coverity.com"}
-TOOL_BASE=${TOOL_BASE:="/tmp/coverity-scan-analysis"}
-UPLOAD_URL=${UPLOAD_URL:="https://scan.coverity.com/builds"}
+    platform=$(uname)
+    tool_url="https://scan.coverity.com/download/${platform}"
+    tool_archive="/tmp/cov-analysis-${platform}.tgz"
 
-# These must be set by environment
-echo -e "\033[33;1mNote: COVERITY_SCAN_PROJECT_NAME and COVERITY_SCAN_TOKEN are available on Project Settings page on scan.coverity.com\033[0m"
-[ -z "$COVERITY_SCAN_PROJECT_NAME" ] && echo "ERROR: COVERITY_SCAN_PROJECT_NAME must be set" && exit 1
-[ -z "$COVERITY_SCAN_NOTIFICATION_EMAIL" ] && echo "ERROR: COVERITY_SCAN_NOTIFICATION_EMAIL must be set" && exit 1
-[ -z "$COVERITY_SCAN_BRANCH_PATTERN" ] && echo "ERROR: COVERITY_SCAN_BRANCH_PATTERN must be set" && exit 1
-[ -z "$COVERITY_SCAN_BUILD_COMMAND" ] && echo "ERROR: COVERITY_SCAN_BUILD_COMMAND must be set" && exit 1
-[ -z "$COVERITY_SCAN_TOKEN" ] && echo "ERROR: COVERITY_SCAN_TOKEN must be set" && exit 1
+    set +x # this is supposed to hide COVERITY_SCAN_TOKEN
+    echo -e "\033[33;1mDownloading Coverity Scan Analysis Tool...\033[0m"
+    wget -nv -O "$tool_archive" "$tool_url" --post-data "project=$COVERITY_SCAN_PROJECT_NAME&token=${COVERITY_SCAN_TOKEN:?}"
+    set -x
 
-# Verify this branch should run
-if [[ "${CURRENT_REF^^}" =~ "${COVERITY_SCAN_BRANCH_PATTERN^^}" ]]; then
-    echo -e "\033[33;1mCoverity Scan configured to run on branch ${CURRENT_REF}\033[0m"
-else
-    echo -e "\033[33;1mCoverity Scan NOT configured to run on branch ${CURRENT_REF}\033[0m"
-    exit 1
-fi
-
-# Verify upload is permitted
-AUTH_RES=`curl -s --form project="$COVERITY_SCAN_PROJECT_NAME" --form token="$COVERITY_SCAN_TOKEN" $SCAN_URL/api/upload_permitted`
-if [ "$AUTH_RES" = "Access denied" ]; then
-    echo -e "\033[33;1mCoverity Scan API access denied. Check COVERITY_SCAN_PROJECT_NAME and COVERITY_SCAN_TOKEN.\033[0m"
-    exit 1
-else
-    AUTH=`echo $AUTH_RES | jq .upload_permitted`
-    if [ "$AUTH" = "true" ]; then
-        echo -e "\033[33;1mCoverity Scan analysis authorized per quota.\033[0m"
-    else
-        WHEN=`echo $AUTH_RES | jq .next_upload_permitted_at`
-        echo -e "\033[33;1mCoverity Scan analysis NOT authorized until $WHEN.\033[0m"
-        exit 1
-    fi
-fi
-
-TOOL_DIR=`find $TOOL_BASE -type d -name 'cov-analysis*'`
-export PATH="$TOOL_DIR/bin:$PATH"
-
-# Disable CCACHE for cov-build to compilation units correctly
-export CCACHE_DISABLE=1
-
-# FUNCTION DEFINITIONS
-# --------------------
-_help()
-{
-    # displays help and exits
-    cat <<-EOF
-		USAGE: $0 [CMD] [OPTIONS]
-
-		CMD
-		  build   Issue Coverity build
-		  upload  Upload coverity archive for analysis
-              Note: By default, archive is created from default results directory.
-                    To provide custom archive or results directory, see --result-dir
-                    and --tar options below.
-
-		OPTIONS
-		  -h,--help     Display this menu and exits
-
-		  Applicable to build command
-		  ---------------------------
-		  -o,--out-dir  Specify Coverity intermediate directory (defaults to 'cov-int')
-		  -t,--tar      bool, archive the output to .tgz file (defaults to false)
-
-		  Applicable to upload command
-		  ----------------------------
-		  -d, --result-dir   Specify result directory if different from default ('cov-int')
-		  -t, --tar ARCHIVE  Use custom .tgz archive instead of intermediate directory or pre-archived .tgz
-                         (by default 'analysis-result.tgz'
-	EOF
-    return;
+    mkdir -p "$COVERITY_SCAN_TOOL_BASE"
+    pushd "$COVERITY_SCAN_TOOL_BASE"
+    tar xzf "$tool_archive"
+    popd
 }
 
-_pack()
-{
-    RESULTS_ARCHIVE=${RESULTS_ARCHIVE:-'analysis-results.tgz'}
+function run_coverity {
+    local results_dir tool_dir results_archive sha response status_code
 
-    echo -e "\033[33;1mTarring Coverity Scan Analysis results...\033[0m"
-    tar czf $RESULTS_ARCHIVE $RESULTS_DIR
-    SHA=`git rev-parse --short HEAD`
+    results_dir="cov-int"
+    tool_dir=$(find "$COVERITY_SCAN_TOOL_BASE" -type d -name 'cov-analysis*')
+    results_archive="analysis-results.tgz"
+    sha=$(git rev-parse --short HEAD)
 
-    PACKED=true
-}
+    meson -Dman=false build
+    COVERITY_UNSUPPORTED=1 "$tool_dir/bin/cov-build" --dir "$results_dir" sh -c "ninja -C ./build -v"
+    "$tool_dir/bin/cov-import-scm" --dir "$results_dir" --scm git --log "$results_dir/scm_log.txt"
 
+    tar czf "$results_archive" "$results_dir"
 
-_build()
-{
-    echo -e "\033[33;1mRunning Coverity Scan Analysis Tool...\033[0m"
-    local _cov_build_options=""
-    #local _cov_build_options="--return-emit-failures 8 --parse-error-threshold 85"
-    eval "${COVERITY_SCAN_BUILD_COMMAND_PREPEND}"
-    COVERITY_UNSUPPORTED=1 cov-build --dir $RESULTS_DIR $_cov_build_options sh -c "$COVERITY_SCAN_BUILD_COMMAND"
-    cov-import-scm --dir $RESULTS_DIR --scm git --log $RESULTS_DIR/scm_log.txt
-
-    if [ $? != 0 ]; then
-	echo -e "\033[33;1mCoverity Scan Build failed: $TEXT.\033[0m"
-	return 1
-    fi
-
-    [ -z $TAR ] || [ $TAR = false ] && return 0
-
-    if [ "$TAR" = true ]; then
-	_pack
-    fi
-}
-
-
-_upload()
-{
-    # pack results
-    [ -z $PACKED ] || [ $PACKED = false ] && _pack
-
-    # Upload results
+    set +x # this is supposed to hide COVERITY_SCAN_TOKEN
     echo -e "\033[33;1mUploading Coverity Scan Analysis results...\033[0m"
     response=$(curl \
-	           --silent --write-out "\n%{http_code}\n" \
-	           --form project=$COVERITY_SCAN_PROJECT_NAME \
-	           --form token=$COVERITY_SCAN_TOKEN \
-	           --form email=$COVERITY_SCAN_NOTIFICATION_EMAIL \
-	           --form file=@$RESULTS_ARCHIVE \
-	           --form version=$SHA \
-	           --form description="Travis CI build" \
-	           $UPLOAD_URL)
+               --silent --write-out "\n%{http_code}\n" \
+               --form project="$COVERITY_SCAN_PROJECT_NAME" \
+               --form token="${COVERITY_SCAN_TOKEN:?}" \
+               --form email="${COVERITY_SCAN_NOTIFICATION_EMAIL:?}" \
+               --form file="@$results_archive" \
+               --form version="$sha" \
+               --form description="Daily build" \
+               https://scan.coverity.com/builds)
     printf "\033[33;1mThe response is\033[0m\n%s\n" "$response"
     status_code=$(echo "$response" | sed -n '$p')
-    # Coverity Scan used to respond with 201 on successfully receiving analysis results.
-    # Now for some reason it sends 200 and may change back in the foreseeable future.
-    # See https://github.com/pmem/pmdk/commit/7b103fd2dd54b2e5974f71fb65c81ab3713c12c5
     if [ "$status_code" != "200" ]; then
-	TEXT=$(echo "$response" | sed '$d')
-	echo -e "\033[33;1mCoverity Scan upload failed: $TEXT.\033[0m"
-	exit 1
+        echo -e "\033[33;1mCoverity Scan upload failed: $(echo "$response" | sed '$d').\033[0m"
+        return 1
     fi
-
-    echo -e "\n\033[33;1mCoverity Scan Analysis completed successfully.\033[0m"
-    exit 0
+    set -x
 }
 
-# PARSE COMMAND LINE OPTIONS
-# --------------------------
-
-case $1 in
-    -h|--help)
-	_help
-	exit 0
-	;;
-    build)
-	CMD='build'
-	TEMP=`getopt -o ho:t --long help,out-dir:,tar -n '$0' -- "$@"`
-	_ec=$?
-	[[ $_ec -gt 0 ]] && _help && exit $_ec
-	shift
-	;;
-    upload)
-	CMD='upload'
-	TEMP=`getopt -o hd:t: --long help,result-dir:tar: -n '$0' -- "$@"`
-	_ec=$?
-	[[ $_ec -gt 0 ]] && _help && exit $_ec
-	shift
-	;;
-    *)
-	_help && exit 1 ;;
-esac
-
-RESULTS_DIR='cov-int'
-
-eval set -- "$TEMP"
-if [ $? != 0 ] ; then exit 1 ; fi
-
-# extract options and their arguments into variables.
-if [[ $CMD == 'build' ]]; then
-    TAR=false
-    while true ; do
-	case $1 in
-	    -h|--help)
-		_help
-		exit 0
-		;;
-	    -o|--out-dir)
-		RESULTS_DIR="$2"
-		shift 2
-		;;
-	    -t|--tar)
-		TAR=true
-		shift
-		;;
-	    --) _build; shift ; break ;;
-	    *) echo "Internal error" ; _help && exit 6 ;;
-	esac
-    done
-
-elif [[ $CMD == 'upload' ]]; then
-    while true ; do
-	case $1 in
-	    -h|--help)
-		_help
-		exit 0
-		;;
-	    -d|--result-dir)
-		CHANGE_DEFAULT_DIR=true
-		RESULTS_DIR="$2"
-		shift 2
-		;;
-	    -t|--tar)
-		RESULTS_ARCHIVE="$2"
-		[ -z $CHANGE_DEFAULT_DIR ] || [ $CHANGE_DEFAULT_DIR = false ] && PACKED=true
-		shift 2
-		;;
-	    --) _upload; shift ; break ;;
-	    *) echo "Internal error" ; _help && exit 6 ;;
-	esac
-    done
-
-fi
+coverity_install_script
+run_coverity
diff --git a/tools/dbus_exporter.py b/tools/dbus_exporter.py
new file mode 100755
index 0000000..f94f261
--- /dev/null
+++ b/tools/dbus_exporter.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
+from argparse import ArgumentParser
+from pathlib import Path
+from subprocess import run, PIPE
+
+def extract_interfaces_xml(output_dir, executable):
+    proc = run(
+        args=[executable.absolute(), '--bus-introspect', 'list'],
+        stdout=PIPE,
+        check=True,
+        universal_newlines=True)
+
+    interface_names = (x.split()[1] for x in proc.stdout.splitlines())
+
+    for interface_name in interface_names:
+        proc = run(
+            args=[executable.absolute(), '--bus-introspect', interface_name],
+            stdout=PIPE,
+            check=True,
+            universal_newlines=True)
+
+        interface_file_name = output_dir / (interface_name + '.xml')
+        interface_file_name.write_text(proc.stdout)
+        interface_file_name.chmod(0o644)
+
+def main():
+    parser = ArgumentParser()
+    parser.add_argument('output',
+                        type=Path)
+    parser.add_argument('executables',
+                        nargs='+',
+                        type=Path)
+
+    args = parser.parse_args()
+
+    args.output.mkdir(exist_ok=True)
+    for exe in args.executables:
+        extract_interfaces_xml(args.output, exe)
+
+if __name__ == '__main__':
+    main()
diff --git a/tools/debug-sd-boot.sh b/tools/debug-sd-boot.sh
new file mode 100755
index 0000000..b087c1d
--- /dev/null
+++ b/tools/debug-sd-boot.sh
@@ -0,0 +1,87 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+set -e
+
+if [[ $# -lt 2 ]]; then
+    echo "Usage: ${0} TARGET INPUT [GDBSCRIPT]"
+    echo "Debug systemd-boot/stub in QEMU."
+    echo
+    echo "TARGET should point to the EFI binary to be examined inside the"
+    echo "build directory (systemd-boot\$ARCH.efi or linux\$arch.efi.stub)."
+    echo
+    echo "INPUT should point to the QEMU serial output pipe. This is used to"
+    echo "extract the location of the symbols. For this to work, QEMU must"
+    echo "be run with '-s -serial pipe:PATH'. Note that QEMU will append"
+    echo ".in/.out to the path, while this script expects the out pipe directly."
+    echo
+    echo "If GDBSCRIPT is empty, gdb is run directly attached to the boot"
+    echo "loader, otherwise a script is generated in the given path that allows"
+    echo "attaching manually like this:"
+    echo "    (gdb) source GDBSCRIPT"
+    echo "    (gdb) target remote :1234"
+    echo
+    echo "Example usage:"
+    echo "    mkfifo /tmp/sdboot.{in,out}"
+    echo "    qemu-system-x86_64 [...] -s -serial pipe:/tmp/sdboot"
+    echo "    ./tools/debug-sd-boot.sh ./build/src/boot/efi/systemd-bootx64.efi \\"
+    echo "        /tmp/sdboot.out"
+    exit 1
+fi
+
+binary=$(realpath "${1}")
+if [[ "${1}" =~ systemd-boot([[:alnum:]]+).efi ]]; then
+    target="systemd-boot"
+    symbols=$(realpath "${1%efi}elf")
+elif [[ "${1}" =~ linux([[:alnum:]]+).efi.stub ]]; then
+    target="systemd-stub"
+    symbols=$(realpath "${1%efi.stub}elf.stub")
+else
+    echo "Cannot detect EFI binary '${1}'."
+    exit 1
+fi
+
+case "${BASH_REMATCH[1]}" in
+    ia32) arch="i386";;
+    x64)  arch="i386:x86-64";;
+    aa64) arch="aarch64";;
+    arm|riscv64) arch="${BASH_REMATCH[1]}";;
+    *)
+        echo "Unknown EFI arch '${BASH_REMATCH[1]}'."
+        exit 1
+esac
+
+# system-boot will print out a line like this to inform us where gdb is supposed to
+# look for .text and .data section:
+#        systemd-boot@0x0,0x0
+while read -r line; do
+    if [[ "${line}" =~ ${target}@(0x[[:xdigit:]]+),(0x[[:xdigit:]]+) ]]; then
+        text="${BASH_REMATCH[1]}"
+        data="${BASH_REMATCH[2]}"
+        break
+    fi
+done <"${2}"
+
+if [[ -z "${text}" || -z "${data}" ]]; then
+    echo "Could not determine text and data location."
+    exit 1
+fi
+
+if [[ -z "${3}" ]]; then
+    gdb_script=$(mktemp /tmp/debug-sd-boot.XXXXXX.gdb)
+    trap 'rm -f "${gdb_script}"' EXIT
+else
+    gdb_script="${3}"
+fi
+
+cat >"${gdb_script}" <<EOF
+file ${binary}
+add-symbol-file ${symbols} ${text} -s .data ${data}
+set architecture ${arch}"
+EOF
+
+if [[ -z "${3}" ]]; then
+    gdb -x "${gdb_script}" -ex "target remote :1234"
+else
+    echo "GDB script written to '${gdb_script}'."
+fi
diff --git a/tools/get-coverity.sh b/tools/get-coverity.sh
deleted file mode 100755
index 8f84aec..0000000
--- a/tools/get-coverity.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: LGPL-2.1-or-later
-
-# Download and extract coverity tool
-
-# Environment check
-[ -z "$COVERITY_SCAN_TOKEN" ] && echo 'ERROR: COVERITY_SCAN_TOKEN must be set' && exit 1
-
-# Use default values if not set
-PLATFORM=$(uname)
-
-TOOL_BASE=${TOOL_BASE:="/tmp/coverity-scan-analysis"}
-TOOL_ARCHIVE=${TOOL_ARCHIVE:="/tmp/cov-analysis-${PLATFORM}.tgz"}
-
-TOOL_URL="https://scan.coverity.com/download/${PLATFORM}"
-
-# Make sure wget is installed
-sudo apt-get update && sudo apt-get -y install wget
-
-# Get coverity tool
-if [ ! -d $TOOL_BASE ]; then
-    # Download Coverity Scan Analysis Tool
-    if [ ! -e $TOOL_ARCHIVE ]; then
-	echo -e "\033[33;1mDownloading Coverity Scan Analysis Tool...\033[0m"
-	wget -nv -O $TOOL_ARCHIVE $TOOL_URL --post-data "project=$COVERITY_SCAN_PROJECT_NAME&token=$COVERITY_SCAN_TOKEN"
-    fi
-
-    # Extract Coverity Scan Analysis Tool
-    echo -e "\033[33;1mExtracting Coverity Scan Analysis Tool...\033[0m"
-    mkdir -p $TOOL_BASE
-    pushd $TOOL_BASE
-    tar xzf $TOOL_ARCHIVE
-    popd
-fi
-
-echo -e "\033[33;1mCoverity Scan Analysis Tool can be found at $TOOL_BASE ...\033[0m"
diff --git a/tools/git-contrib.sh b/tools/git-contrib.sh
index 4b680d2..cde1ecd 100755
--- a/tools/git-contrib.sh
+++ b/tools/git-contrib.sh
@@ -3,6 +3,8 @@
 set -eu
 
 tag="$(git describe --abbrev=0 --match 'v[0-9][0-9][0-9]')"
-git log --pretty=tformat:%aN --author=noreply@weblate.org --invert-grep -s "${tag}.." | \
-    sed 's/ / /g; s/--/-/g; s/.*/        \0,/' |
-    sort -u
+git log --pretty=tformat:%aN -s "${tag}.." |
+    grep -v noreply@weblate.org |
+    sed 's/ / /g; s/--/-/g; s/.*/\0,/' |
+    sort -u | tr '\n' ' ' | sed -e "s/^/Contributions from: /g" -e "s/,\s*$/\n/g" | fold -w 72 -s |
+    sed -e "s/^/        /g" -e "s/\s*$//g"
diff --git a/tools/list-discoverable-partitions.py b/tools/list-discoverable-partitions.py
new file mode 100644
index 0000000..8376a7c
--- /dev/null
+++ b/tools/list-discoverable-partitions.py
@@ -0,0 +1,193 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+import re
+import sys
+import uuid
+
+HEADER = f'''\
+| Name | Partition Type UUID | Allowed File Systems | Explanation |
+|------|---------------------|----------------------|-------------|
+'''
+
+ARCHITECTURES = {
+    'ALPHA':       'Alpha',
+    'ARC':         'ARC',
+    'ARM':         '32-bit ARM',
+    'ARM64':       '64-bit ARM/AArch64',
+    'IA64':        'Itanium/IA-64',
+    'LOONGARCH64': 'LoongArch 64-bit',
+    'MIPS_LE':     '32-bit MIPS LittleEndian (mipsel)',
+    'MIPS64_LE':   '64-bit MIPS LittleEndian (mips64el)',
+    'PARISC':      'HPPA/PARISC',
+    'PPC':         '32-bit PowerPC',
+    'PPC64':       '64-bit PowerPC BigEndian',
+    'PPC64_LE':    '64-bit PowerPC LittleEndian',
+    'RISCV32':     'RISC-V 32-bit',
+    'RISCV64':     'RISC-V 64-bit',
+    'S390':        's390',
+    'S390X':       's390x',
+    'TILEGX':      'TILE-Gx',
+    'X86':         'x86',
+    'X86_64':      'amd64/x86_64',
+}
+
+TYPES = {
+    'ROOT' :            'Root Partition',
+    'ROOT_VERITY' :     'Root Verity Partition',
+    'ROOT_VERITY_SIG' : 'Root Verity Signature Partition',
+    'USR' :             '`/usr/` Partition',
+    'USR_VERITY' :      '`/usr/` Verity Partition',
+    'USR_VERITY_SIG' :  '`/usr/` Verity Signature Partition',
+
+    'ESP':              'EFI System Partition',
+    'SRV':              'Server Data Partition',
+    'VAR':              'Variable Data Partition',
+    'TMP':              'Temporary Data Partition',
+    'SWAP':             'Swap',
+    'HOME':             'Home Partition',
+    'USER_HOME':        'Per-user Home Partition',
+    'LINUX_GENERIC':    'Generic Linux Data Partition',
+    'XBOOTLDR':         'Extended Boot Loader Partition',
+}
+
+DESCRIPTIONS = {
+    'ROOT': (
+        'Any native, optionally in LUKS',
+        'On systems with matching architecture, the first partition with this type UUID on the disk '
+        'containing the active EFI ESP is automatically mounted to the root directory `/`. '
+        'If the partition is encrypted with LUKS or has dm-verity integrity data (see below), the '
+        'device mapper file will be named `/dev/mapper/root`.'),
+    'USR': (
+        'Any native, optionally in LUKS',
+        'Similar semantics to root partition, but just the `/usr/` partition.'),
+    'ROOT_VERITY': (
+        'A dm-verity superblock followed by hash data',
+        'Contains dm-verity integrity hash data for the matching root partition. If this feature is '
+        'used the partition UUID of the root partition should be the first 128 bits of the root hash '
+        'of the dm-verity hash data, and the partition UUID of this dm-verity partition should be the '
+        'final 128 bits of it, so that the root partition and its Verity partition can be discovered '
+        'easily, simply by specifying the root hash.'),
+    'USR_VERITY': (
+        'A dm-verity superblock followed by hash data',
+        'Similar semantics to root Verity partition, but just for the `/usr/` partition.'),
+    'ROOT_VERITY_SIG': (
+        'A serialized JSON object, see below',
+        'Contains a root hash and a PKCS#7 signature for it, permitting signed dm-verity GPT images.'),
+    'USR_VERITY_SIG': (
+        'A serialized JSON object, see below',
+        'Similar semantics to root Verity signature partition, but just for the `/usr/` partition.'),
+
+    'ESP': (
+        'VFAT',
+        'The ESP used for the current boot is automatically mounted to `/efi/` (or `/boot/` as '
+        'fallback), unless a different partition is mounted there (possibly via `/etc/fstab`, or '
+        'because the Extended Boot Loader Partition — see below — exists) or the directory is '
+        'non-empty on the root disk.  This partition type is defined by the '
+        '[UEFI Specification](http://www.uefi.org/specifications).'),
+    'XBOOTLDR': (
+        'Typically VFAT',
+        'The Extended Boot Loader Partition (XBOOTLDR) used for the current boot is automatically '
+        'mounted to `/boot/`, unless a different partition is mounted there (possibly via '
+        '`/etc/fstab`) or the directory is non-empty on the root disk. This partition type '
+        'is defined by the [Boot Loader '
+        'Specification](https://uapi-group.org/specifications/specs/boot_loader_specification).'),
+    'SWAP': (
+        'Swap, optionally in LUKS',
+        'All swap partitions on the disk containing the root partition are automatically enabled. '
+        'If the partition is encrypted with LUKS, the device mapper file will be named '
+        '`/dev/mapper/swap`. This partition type predates the Discoverable Partitions Specification.'),
+    'HOME': (
+        'Any native, optionally in LUKS',
+        'The first partition with this type UUID on the disk containing the root partition is '
+        'automatically mounted to `/home/`. If the partition is encrypted with LUKS, the device '
+        'mapper file will be named `/dev/mapper/home`.'),
+    'SRV': (
+        'Any native, optionally in LUKS',
+        'The first partition with this type UUID on the disk containing the root partition is '
+        'automatically mounted to `/srv/`. If the partition is encrypted with LUKS, the device '
+        'mapper file will be named `/dev/mapper/srv`.'),
+    'VAR': (
+        'Any native, optionally in LUKS',
+        'The first partition with this type UUID on the disk containing the root partition is '
+        'automatically mounted to `/var/` — under the condition that its partition UUID matches '
+        'the first 128 bits of `HMAC-SHA256(machine-id, 0x4d21b016b53445c2a9fb5c16e091fd2d)` '
+        '(i.e. the SHA256 HMAC hash of the binary type UUID keyed by the machine ID as read from '
+        '[`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html). '
+        'This special requirement is made because `/var/` (unlike the other partition types '
+        'listed here) is inherently private to a specific installation and cannot possibly be '
+        'shared between multiple OS installations on the same disk, and thus should be bound to '
+        'a specific instance of the OS, identified by its machine ID. If the partition is '
+        'encrypted with LUKS, the device mapper file will be named `/dev/mapper/var`.'),
+    'TMP': (
+        'Any native, optionally in LUKS',
+        'The first partition with this type UUID on the disk containing the root partition is '
+        'automatically mounted to `/var/tmp/`. If the partition is encrypted with LUKS, the '
+        'device mapper file will be named `/dev/mapper/tmp`. Note that the intended mount point '
+        'is indeed `/var/tmp/`, not `/tmp/`. The latter is typically maintained in memory via '
+        '`tmpfs` and does not require a partition on disk. In some cases it might be '
+        'desirable to make `/tmp/` persistent too, in which case it is recommended to make it '
+        'a symlink or bind mount to `/var/tmp/`, thus not requiring its own partition type UUID.'),
+    'USER_HOME': (
+        'Any native, optionally in LUKS',
+        'A home partition of a user, managed by '
+        '[`systemd-homed`](https://www.freedesktop.org/software/systemd/man/systemd-homed.html).'),
+    'LINUX_GENERIC': (
+        'Any native, optionally in LUKS',
+        'No automatic mounting takes place for other Linux data partitions. This partition type '
+        'should be used for all partitions that carry Linux file systems. The installer needs '
+        'to mount them explicitly via entries in `/etc/fstab`. Optionally, these partitions may '
+        'be encrypted with LUKS. This partition type predates the Discoverable Partitions Specification.'),
+}
+
+def extract(file):
+    for line in file:
+        # print(line)
+        m = re.match(r'^#define\s+SD_GPT_(.*SD_ID128_MAKE\(.*\))', line)
+        if not m:
+            continue
+
+        name = line.split()[1]
+        if m2 := re.match(r'^(ROOT|USR)_([A-Z0-9]+|X86_64|PPC64_LE|MIPS_LE|MIPS64_LE)(|_VERITY|_VERITY_SIG)\s+SD_ID128_MAKE\((.*)\)', m.group(1)):
+            type, arch, suffix, u = m2.groups()
+            u = uuid.UUID(u.replace(',', ''))
+            assert arch in ARCHITECTURES, f'{arch} not in f{ARCHITECTURES}'
+            type = f'{type}{suffix}'
+            assert type in TYPES
+
+            yield name, type, arch, u
+
+        elif m2 := re.match(r'(\w+)\s+SD_ID128_MAKE\((.*)\)', m.group(1)):
+            type, u = m2.groups()
+            u = uuid.UUID(u.replace(',', ''))
+            yield name, type, None, u
+
+        else:
+            raise Exception(f'Failed to match: {m.group(1)}')
+
+def generate(defines):
+    prevtype = None
+
+    print(HEADER, end='')
+
+    uuids = set()
+
+    for name, type, arch, uuid in defines:
+        tdesc = TYPES[type]
+        adesc = '' if arch is None else f' ({ARCHITECTURES[arch]})'
+
+        # Let's make sure that we didn't select&paste the same value twice
+        assert uuid not in uuids
+        uuids.add(uuid)
+
+        if type != prevtype:
+            prevtype = type
+            morea, moreb = DESCRIPTIONS[type]
+        else:
+            morea = moreb = 'ditto'
+
+        print(f'| _{tdesc}{adesc}_ | `{uuid}` `{name}` | {morea} | {moreb} |')
+
+if __name__ == '__main__':
+    known = extract(sys.stdin)
+    generate(known)
diff --git a/tools/meson-build.sh b/tools/meson-build.sh
index 26f995d..ecd558f 100755
--- a/tools/meson-build.sh
+++ b/tools/meson-build.sh
@@ -9,13 +9,14 @@
 CC="$5"
 CXX="$6"
 
+# shellcheck disable=SC2086
 [ -f "$dst/ninja.build" ] || CC="$CC" CXX="$CXX" meson "$src" "$dst" $options
 
 # Locate ninja binary, on CentOS 7 it is called ninja-build, so
 # use that name if available.
-ninja=ninja
-if which ninja-build >/dev/null 2>&1 ; then
-    ninja=ninja-build
+ninja="ninja"
+if command -v ninja-build >/dev/null ; then
+    ninja="ninja-build"
 fi
 
 "$ninja" -C "$dst" "$target"
diff --git a/tools/meson-render-jinja2.py b/tools/meson-render-jinja2.py
index 063cb0e..fbaae59 100755
--- a/tools/meson-render-jinja2.py
+++ b/tools/meson-render-jinja2.py
@@ -1,10 +1,13 @@
 #!/usr/bin/env python3
-# SPDX-License-Identifier: LGPL-2.1+
+# SPDX-License-Identifier: LGPL-2.1-or-later
 
-import jinja2
+import ast
+import os
 import re
 import sys
 
+import jinja2
+
 def parse_config_h(filename):
     # Parse config.h file generated by meson.
     ans = {}
@@ -14,7 +17,7 @@
             continue
         a, b = m.groups()
         if b and b[0] in '0123456789"':
-            b = eval(b)
+            b = ast.literal_eval(b)
         ans[a] = b
     return ans
 
@@ -25,4 +28,10 @@
 
 if __name__ == '__main__':
     defines = parse_config_h(sys.argv[1])
-    print(render(sys.argv[2], defines))
+    defines.update(parse_config_h(sys.argv[2]))
+    output = render(sys.argv[3], defines)
+    with open(sys.argv[4], 'w') as f:
+        f.write(output)
+        f.write('\n')
+    info = os.stat(sys.argv[3])
+    os.chmod(sys.argv[4], info.st_mode)
diff --git a/tools/meson-vcs-tag.sh b/tools/meson-vcs-tag.sh
index 8ce6924..3964a8e 100755
--- a/tools/meson-vcs-tag.sh
+++ b/tools/meson-vcs-tag.sh
@@ -14,4 +14,6 @@
 # Check that we have either .git/ (a normal clone) or a .git file (a work-tree)
 # and that we don't get confused if a tarball is extracted in a higher-level
 # git repository.
-[ -e .git ] && git describe --abbrev=7 --dirty=+ 2>/dev/null | sed 's/^v//' || echo "$fallback"
+[ -e .git ] && \
+    git describe --abbrev=7 --dirty=^ 2>/dev/null | sed 's/^v//; s/-rc/~rc/' || \
+    echo "$fallback"
diff --git a/tools/oss-fuzz.sh b/tools/oss-fuzz.sh
index 767da15..7e9312b 100755
--- a/tools/oss-fuzz.sh
+++ b/tools/oss-fuzz.sh
@@ -10,7 +10,7 @@
 clang_version="$($CC --version | sed -nr 's/.*version ([^ ]+?) .*/\1/p' | sed -r 's/-$//')"
 
 SANITIZER=${SANITIZER:-address -fsanitize-address-use-after-scope}
-flags="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=$SANITIZER"
+flags="-O1 -fno-omit-frame-pointer -g -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=$SANITIZER"
 
 clang_lib="/usr/lib64/clang/${clang_version}/lib/linux"
 [ -d "$clang_lib" ] || clang_lib="/usr/lib/clang/${clang_version}/lib/linux"
@@ -21,45 +21,127 @@
 
 export WORK=${WORK:-$(pwd)}
 export OUT=${OUT:-$(pwd)/out}
-mkdir -p $OUT
+mkdir -p "$OUT"
 
-build=$WORK/build
-rm -rf $build
-mkdir -p $build
+build="$WORK/build"
+rm -rf "$build"
+mkdir -p "$build"
 
 if [ -z "$FUZZING_ENGINE" ]; then
     fuzzflag="llvm-fuzz=true"
 else
     fuzzflag="oss-fuzz=true"
+
+    apt-get update
+    apt-get install -y gperf m4 gettext python3-pip \
+        libcap-dev libmount-dev \
+        pkg-config wget python3-jinja2 zipmerge
+
+    if [[ "$ARCHITECTURE" == i386 ]]; then
+        apt-get install -y pkg-config:i386 libcap-dev:i386 libmount-dev:i386
+    fi
+
+    # gnu-efi is installed here to enable -Dgnu-efi behind which fuzz-bcd
+    # is hidden. It isn't linked against efi. It doesn't
+    # even include "efi.h" because "bcd.c" can work in "unit test" mode
+    # where it isn't necessary.
+    apt-get install -y gnu-efi zstd
+
+    pip3 install -r .github/workflows/requirements.txt --require-hashes
+
+    # https://github.com/google/oss-fuzz/issues/6868
+    ORIG_PYTHONPATH=$(python3 -c 'import sys;print(":".join(sys.path[1:]))')
+    export PYTHONPATH="$ORIG_PYTHONPATH:/usr/lib/python3/dist-packages/"
+
     if [[ "$SANITIZER" == undefined ]]; then
-        UBSAN_FLAGS="-fsanitize=pointer-overflow -fno-sanitize-recover=pointer-overflow"
+        additional_ubsan_checks=pointer-overflow,alignment
+        UBSAN_FLAGS="-fsanitize=$additional_ubsan_checks -fno-sanitize-recover=$additional_ubsan_checks"
         CFLAGS="$CFLAGS $UBSAN_FLAGS"
         CXXFLAGS="$CXXFLAGS $UBSAN_FLAGS"
     fi
+
+    if [[ "$SANITIZER" == introspector ]]; then
+        # fuzz-introspector passes -fuse-ld=gold and -flto using CFLAGS/LDFLAGS and due to
+        # https://github.com/mesonbuild/meson/issues/6377#issuecomment-575977919 and
+        # https://github.com/mesonbuild/meson/issues/6377 it doesn't mix well with meson.
+        # It's possible to build systemd with duct tape there using something like
+        # https://github.com/google/oss-fuzz/pull/7583#issuecomment-1104011067 but
+        # apparently even with gold and lto some parts of systemd are missing from
+        # reports (presumably due to https://github.com/google/oss-fuzz/issues/7598).
+        # Let's just fail here for now to make it clear that fuzz-introspector isn't supported.
+        exit 1
+    fi
 fi
 
-if ! meson $build -D$fuzzflag -Db_lundef=false; then
-    cat $build/meson-logs/meson-log.txt
+if ! meson "$build" "-D$fuzzflag" -Db_lundef=false; then
+    cat "$build/meson-logs/meson-log.txt"
     exit 1
 fi
 
-ninja -v -C $build fuzzers
+ninja -v -C "$build" fuzzers
+
+# Compressed BCD files are kept in test/test-bcd so let's unpack them
+# and put them all in the seed corpus.
+bcd=$(mktemp -d)
+for i in test/test-bcd/*.zst; do
+     unzstd "$i" -o "$bcd/$(basename "${i%.zst}")";
+done
+zip -jqr "$OUT/fuzz-bcd_seed_corpus.zip" "$bcd"
+rm -rf "$bcd"
+
+hosts=$(mktemp)
+wget -O "$hosts" https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
+zip -jq "$OUT/fuzz-etc-hosts_seed_corpus.zip" "$hosts"
+rm -rf "$hosts"
 
 # The seed corpus is a separate flat archive for each fuzzer,
 # with a fixed name ${fuzzer}_seed_corpus.zip.
-for d in "$(dirname "$0")/../test/fuzz/fuzz-"*; do
-    zip -jqr $OUT/$(basename "$d")_seed_corpus.zip "$d"
+for d in test/fuzz/fuzz-*; do
+    fuzzer="$(basename "$d")"
+    # Include the build-generated corpora if any as well
+    readarray -t generated < <(find "$build/test/fuzz" -maxdepth 1 -name "${fuzzer}*" -type f)
+    zip -jqr "$OUT/${fuzzer}_seed_corpus.zip" "$d" "${generated[@]}"
 done
 
 # get fuzz-dns-packet corpus
-df=$build/dns-fuzzing
-git clone --depth 1 https://github.com/CZ-NIC/dns-fuzzing $df
-zip -jqr $OUT/fuzz-dns-packet_seed_corpus.zip $df/packet
+df="$build/dns-fuzzing"
+git clone --depth 1 https://github.com/CZ-NIC/dns-fuzzing "$df"
+zip -jqr "$OUT/fuzz-dns-packet_seed_corpus.zip" "$df/packet"
 
-install -Dt $OUT/src/shared/ $build/src/shared/libsystemd-shared-*.so
+install -Dt "$OUT/src/shared/" \
+        "$build"/src/shared/libsystemd-shared-*.so \
+        "$build"/src/core/libsystemd-core-*.so
 
-wget -O $OUT/fuzz-json.dict https://raw.githubusercontent.com/rc0r/afl-fuzz/master/dictionaries/json.dict
+# Most i386 libraries have to be brought to the runtime environment somehow. Ideally they
+# should be linked statically but since it isn't possible another way to keep them close
+# to the fuzz targets is used here. The dependencies are copied to "$OUT/src/shared" and
+# then `rpath` is tweaked to make it possible for the linker to find them there. "$OUT/src/shared"
+# is chosen because the runtime search path of all the fuzz targets already points to it
+# to load "libsystemd-shared" and "libsystemd-core". Stuff like that should be avoided on
+# x86_64 because it tends to break coverage reports, fuzz-introspector, CIFuzz and so on.
+if [[ "$ARCHITECTURE" == i386 ]]; then
+    for lib_path in $(ldd "$OUT"/src/shared/libsystemd-shared-*.so | perl -lne 'print $1 if m{=>\s+(/lib\S+)}'); do
+        lib_name=$(basename "$lib_path")
+        cp "$lib_path" "$OUT/src/shared"
+        patchelf --set-rpath \$ORIGIN "$OUT/src/shared/$lib_name"
+    done
+    patchelf --set-rpath \$ORIGIN "$OUT"/src/shared/libsystemd-shared-*.so
+fi
 
-find $build -maxdepth 1 -type f -executable -name "fuzz-*" -exec mv {} $OUT \;
-find src -type f -name "fuzz-*.dict" -exec cp {} $OUT \;
-cp src/fuzz/*.options $OUT
+wget -O "$OUT/fuzz-json.dict" https://raw.githubusercontent.com/rc0r/afl-fuzz/master/dictionaries/json.dict
+
+find "$build" -maxdepth 1 -type f -executable -name "fuzz-*" -exec mv {} "$OUT" \;
+find src -type f -name "fuzz-*.dict" -exec cp {} "$OUT" \;
+cp src/fuzz/*.options "$OUT"
+
+if [[ "$MERGE_WITH_OSS_FUZZ_CORPORA" == "yes" ]]; then
+    for f in "$OUT/"fuzz-*; do
+        [[ -x "$f" ]] || continue
+        fuzzer=$(basename "$f")
+        t=$(mktemp)
+        if wget -O "$t" "https://storage.googleapis.com/systemd-backup.clusterfuzz-external.appspot.com/corpus/libFuzzer/systemd_${fuzzer}/public.zip"; then
+            zipmerge "$OUT/${fuzzer}_seed_corpus.zip" "$t"
+        fi
+        rm -rf "$t"
+    done
+fi
diff --git a/tools/update-dbus-docs.py b/tools/update-dbus-docs.py
index 397d131..473469e 100755
--- a/tools/update-dbus-docs.py
+++ b/tools/update-dbus-docs.py
@@ -47,6 +47,14 @@
     klass = 'signal' if is_signal else 'method'
     declarations[klass].append(name)
 
+    # @org.freedesktop.systemd1.Privileged("true")
+    # SetShowStatus(in  s mode);
+
+    for anno in elem.findall('./annotation'):
+        anno_name = anno.get('name')
+        anno_value = anno.get('value')
+        print(f'''{prefix}@{anno_name}("{anno_value}")''', file=file)
+
     print(f'''{prefix}{name}(''', file=file, end='')
     lead = ',\n' + prefix + ' ' * len(name) + ' '
 
diff --git a/tools/update-hwdb-autosuspend.sh b/tools/update-hwdb-autosuspend.sh
index c697730..9f5e6e3 100755
--- a/tools/update-hwdb-autosuspend.sh
+++ b/tools/update-hwdb-autosuspend.sh
@@ -5,13 +5,13 @@
 cd "${1:?}"
 
 (curl --fail -L 'https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/udev/gen_autosuspend_rules.py?format=TEXT'; echo) \
-    | base64 -d > tools/chromiumos/gen_autosuspend_rules.py
+    | base64 -d >tools/chromiumos/gen_autosuspend_rules.py
 
-(cat <<%EOF
+(cat <<EOF
 # This file is part of systemd.
 #
 # Rules to autosuspend known fingerprint readers (pulled from libfprint).
 #
-%EOF
+EOF
 curl --fail -L 'https://gitlab.freedesktop.org/libfprint/libfprint/-/raw/master/data/autosuspend.hwdb') \
-    > hwdb.d/60-autosuspend-fingerprint-reader.hwdb
+    >hwdb.d/60-autosuspend-fingerprint-reader.hwdb
diff --git a/tools/update-man-rules.py b/tools/update-man-rules.py
index 31ed91c..3a8c31d 100755
--- a/tools/update-man-rules.py
+++ b/tools/update-man-rules.py
@@ -3,9 +3,10 @@
 
 from __future__ import print_function
 import collections
+import glob
 import sys
+from pathlib import Path
 import pprint
-from os.path import basename
 from xml_helper import xml_parse
 
 def man(page, number):
@@ -56,7 +57,8 @@
 
 MESON_FOOTER = '''\
 ]
-# Really, do not edit.'''
+# Really, do not edit.
+'''
 
 def make_mesonfile(rules, dist_files):
     # reformat rules as
@@ -76,13 +78,20 @@
     return '\n'.join((MESON_HEADER, pprint.pformat(lines)[1:-1], MESON_FOOTER))
 
 if __name__ == '__main__':
-    pages = sys.argv[1:]
+    source_glob = sys.argv[1]
+    target = Path(sys.argv[2])
+
+    pages = glob.glob(source_glob)
     pages = (p for p in pages
-             if basename(p) not in {
+             if Path(p).name not in {
                      'systemd.directives.xml',
                      'systemd.index.xml',
                      'directives-template.xml'})
 
     rules = create_rules(pages)
-    dist_files = (basename(p) for p in pages)
-    print(make_mesonfile(rules, dist_files))
+    dist_files = (Path(p).name for p in pages)
+    text = make_mesonfile(rules, dist_files)
+
+    tmp = target.with_suffix('.tmp')
+    tmp.write_text(text)
+    tmp.rename(target)
diff --git a/units/console-getty.service.in b/units/console-getty.service.in
index bb67541..606b7db 100644
--- a/units/console-getty.service.in
+++ b/units/console-getty.service.in
@@ -20,13 +20,14 @@
 ConditionPathExists=/dev/console
 
 [Service]
-# The '-o' option value tells agetty to replace 'login' arguments with an
-# option to preserve environment (-p), followed by '--' for safety, and then
-# the entered username.
-ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear --keep-baud console 115200,38400,9600 $TERM
+# The '-o' option value tells agetty to replace 'login' arguments with an option to preserve environment (-p),
+# followed by '--' for safety, and then the entered username.
+ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear --keep-baud - 115200,38400,9600 $TERM
 Type=idle
 Restart=always
 UtmpIdentifier=cons
+StandardInput=tty
+StandardOutput=tty
 TTYPath=/dev/console
 TTYReset=yes
 TTYVHangup=yes
diff --git a/units/container-getty__at__.service.in b/units/container-getty__at__.service.in
index ed1eb7b..8d7e20d 100644
--- a/units/container-getty__at__.service.in
+++ b/units/container-getty__at__.service.in
@@ -25,14 +25,15 @@
 Before=rescue.service
 
 [Service]
-# The '-o' option value tells agetty to replace 'login' arguments with an
-# option to preserve environment (-p), followed by '--' for safety, and then
-# the entered username.
-ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear --keep-baud pts/%I 115200,38400,9600 $TERM
+# The '-o' option value tells agetty to replace 'login' arguments with an option to preserve environment (-p),
+# followed by '--' for safety, and then the entered username.
+ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear - $TERM
 Type=idle
 Restart=always
 RestartSec=0
 UtmpIdentifier=pts/%I
+StandardInput=tty
+StandardOutput=tty
 TTYPath=/dev/pts/%I
 TTYReset=yes
 TTYVHangup=yes
diff --git a/units/dev-hugepages.mount b/units/dev-hugepages.mount
index 5174377..1a34da1 100644
--- a/units/dev-hugepages.mount
+++ b/units/dev-hugepages.mount
@@ -9,7 +9,7 @@
 
 [Unit]
 Description=Huge Pages File System
-Documentation=https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
+Documentation=https://docs.kernel.org/admin-guide/mm/hugetlbpage.html
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 Before=sysinit.target
diff --git a/units/factory-reset.target b/units/factory-reset.target
new file mode 100644
index 0000000..d2c35ee
--- /dev/null
+++ b/units/factory-reset.target
@@ -0,0 +1,12 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Factory Reset
+Documentation=man:systemd.special(7)
diff --git a/units/getty__at__.service.in b/units/getty__at__.service.in
index 78deb7c..21d66f9 100644
--- a/units/getty__at__.service.in
+++ b/units/getty__at__.service.in
@@ -38,11 +38,13 @@
 # The '-o' option value tells agetty to replace 'login' arguments with an
 # option to preserve environment (-p), followed by '--' for safety, and then
 # the entered username.
-ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear %I $TERM
+ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear - $TERM
 Type=idle
 Restart=always
 RestartSec=0
 UtmpIdentifier=%I
+StandardInput=tty
+StandardOutput=tty
 TTYPath=/dev/%I
 TTYReset=yes
 TTYVHangup=yes
diff --git a/units/initrd-parse-etc.service b/units/initrd-parse-etc.service
deleted file mode 100644
index 38df728..0000000
--- a/units/initrd-parse-etc.service
+++ /dev/null
@@ -1,24 +0,0 @@
-#  SPDX-License-Identifier: LGPL-2.1-or-later
-#
-#  This file is part of systemd.
-#
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
-
-[Unit]
-Description=Reload Configuration from the Real Root
-DefaultDependencies=no
-Requires=initrd-root-fs.target
-After=initrd-root-fs.target
-OnFailure=emergency.target
-OnFailureJobMode=replace-irreversibly
-AssertPathExists=/etc/initrd-release
-
-[Service]
-Type=oneshot
-ExecStartPre=-systemctl daemon-reload
-# we have to retrigger initrd-fs.target after daemon-reload
-ExecStart=-systemctl --no-block start initrd-fs.target
-ExecStart=systemctl --no-block start initrd-cleanup.service
diff --git a/units/initrd-parse-etc.service.in b/units/initrd-parse-etc.service.in
new file mode 100644
index 0000000..fe0e860
--- /dev/null
+++ b/units/initrd-parse-etc.service.in
@@ -0,0 +1,33 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Mountpoints Configured in the Real Root
+AssertPathExists=/etc/initrd-release
+
+DefaultDependencies=no
+Requires=initrd-root-fs.target
+After=initrd-root-fs.target
+
+OnFailure=emergency.target
+OnFailureJobMode=replace-irreversibly
+
+[Service]
+Type=oneshot
+
+# FIXME: once dracut is patched to install the symlink, change to:
+# ExecStart={{ROOTLIBEXECDIR}}/systemd-sysroot-fstab-check
+ExecStart=@{{SYSTEM_GENERATOR_DIR}}/systemd-fstab-generator systemd-sysroot-fstab-check
+
+# We want to enqueue initrd-cleanup.service/start after we finished the part
+# above. It can't be part of the initial transaction, because non-oneshot units
+# use Conflicts=initrd-cleanup.service to be terminated before we switch root.
+# Effectively, initrd-parse-etc.service acts as a synchronization point after
+# which cleanup of the initrd processes starts.
+ExecStart=systemctl --no-block start initrd-cleanup.service
diff --git a/units/initrd-switch-root.service b/units/initrd-switch-root.service
index e3d6926..b19b7bb 100644
--- a/units/initrd-switch-root.service
+++ b/units/initrd-switch-root.service
@@ -9,11 +9,14 @@
 
 [Unit]
 Description=Switch Root
-DefaultDependencies=no
+
 AssertPathExists=/etc/initrd-release
+
+DefaultDependencies=no
+Wants=initrd-switch-root.target
+AllowIsolate=yes
 OnFailure=emergency.target
 OnFailureJobMode=replace-irreversibly
-AllowIsolate=yes
 
 [Service]
 Type=oneshot
diff --git a/units/integritysetup-pre.target b/units/integritysetup-pre.target
new file mode 100644
index 0000000..da2aca9
--- /dev/null
+++ b/units/integritysetup-pre.target
@@ -0,0 +1,14 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Local Integrity Protected Volumes (Pre)
+Documentation=man:systemd.special(7)
+RefuseManualStart=yes
+Before=integritysetup.target
diff --git a/units/integritysetup.target b/units/integritysetup.target
new file mode 100644
index 0000000..371490f
--- /dev/null
+++ b/units/integritysetup.target
@@ -0,0 +1,12 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Local Integrity Protected Volumes
+Documentation=man:systemd.special(7)
diff --git a/units/ldconfig.service b/units/ldconfig.service
index 33824d4..53c6d4e 100644
--- a/units/ldconfig.service
+++ b/units/ldconfig.service
@@ -10,13 +10,16 @@
 [Unit]
 Description=Rebuild Dynamic Linker Cache
 Documentation=man:ldconfig(8)
-DefaultDependencies=no
-Conflicts=shutdown.target
-After=local-fs.target
-Before=sysinit.target shutdown.target systemd-update-done.service
+
 ConditionNeedsUpdate=|/etc
 ConditionFileNotEmpty=|!/etc/ld.so.cache
 
+DefaultDependencies=no
+After=local-fs.target
+Before=sysinit.target systemd-update-done.service
+Conflicts=shutdown.target initrd-switch-root.target
+Before=shutdown.target initrd-switch-root.target
+
 [Service]
 Type=oneshot
 RemainAfterExit=yes
diff --git a/units/meson-add-wants.sh b/units/meson-add-wants.sh
index f6424fe..6d8da57 100755
--- a/units/meson-add-wants.sh
+++ b/units/meson-add-wants.sh
@@ -1,5 +1,6 @@
 #!/bin/sh
 # SPDX-License-Identifier: LGPL-2.1-or-later
+# shellcheck disable=SC2154,SC2174
 set -eu
 
 i=1
diff --git a/units/meson.build b/units/meson.build
index 72d9a48..c7939a1 100644
--- a/units/meson.build
+++ b/units/meson.build
@@ -13,12 +13,16 @@
         ['veritysetup-pre.target',              'HAVE_LIBCRYPTSETUP'],
         ['veritysetup.target',                  'HAVE_LIBCRYPTSETUP',
          'sysinit.target.wants/'],
+        ['integritysetup-pre.target',           'HAVE_LIBCRYPTSETUP'],
+        ['integritysetup.target',               'HAVE_LIBCRYPTSETUP',
+         'sysinit.target.wants/'],
         ['dev-hugepages.mount',                 '',
          'sysinit.target.wants/'],
         ['dev-mqueue.mount',                    '',
          'sysinit.target.wants/'],
         ['emergency.target',                    ''],
         ['exit.target',                         ''],
+        ['factory-reset.target',                ''],
         ['final.target',                        ''],
         ['first-boot-complete.target',          ''],
         ['getty.target',                        '',
@@ -32,7 +36,6 @@
         ['suspend-then-hibernate.target',       'ENABLE_HIBERNATE'],
         ['initrd-cleanup.service',              'ENABLE_INITRD'],
         ['initrd-fs.target',                    'ENABLE_INITRD'],
-        ['initrd-parse-etc.service',            'ENABLE_INITRD'],
         ['initrd-root-device.target',           'ENABLE_INITRD'],
         ['initrd-root-fs.target',               'ENABLE_INITRD'],
         ['initrd-switch-root.service',          'ENABLE_INITRD'],
@@ -102,8 +105,9 @@
         ['systemd-ask-password-wall.path',      '',
          'multi-user.target.wants/'],
         ['systemd-ask-password-wall.service',   ''],
-        ['systemd-boot-system-token.service',   'ENABLE_EFI',
+        ['systemd-boot-random-seed.service',    'HAVE_GNU_EFI',
          'sysinit.target.wants/'],
+        ['systemd-boot-update.service',         'HAVE_GNU_EFI'],
         ['systemd-coredump.socket',             'ENABLE_COREDUMP',
          'sockets.target.wants/'],
         ['systemd-exit.service',                ''],
@@ -119,8 +123,7 @@
          'sysinit.target.wants/'],
         ['systemd-journal-gatewayd.socket',     'ENABLE_REMOTE HAVE_MICROHTTPD'],
         ['systemd-journal-remote.socket',       'ENABLE_REMOTE HAVE_MICROHTTPD'],
-        ['systemd-journald-audit.socket',       '',
-         'sockets.target.wants/'],
+        ['systemd-journald-audit.socket',       ''],
         ['systemd-journald-dev-log.socket',     '',
          'sockets.target.wants/'],
         ['systemd-journald.socket',             '',
@@ -135,6 +138,8 @@
         ['systemd-reboot.service',              ''],
         ['systemd-rfkill.socket',               'ENABLE_RFKILL'],
         ['systemd-sysext.service',              'ENABLE_SYSEXT'],
+        ['systemd-sysupdate.timer',             'ENABLE_SYSUPDATE'],
+        ['systemd-sysupdate-reboot.timer',      'ENABLE_SYSUPDATE'],
         ['systemd-sysusers.service',            'ENABLE_SYSUSERS',
          'sysinit.target.wants/'],
         ['systemd-tmpfiles-clean.service',      'ENABLE_TMPFILES'],
@@ -162,6 +167,7 @@
         ['user.slice',                          ''],
         ['var-lib-machines.mount',              'ENABLE_MACHINED',
          'remote-fs.target.wants/ machines.target.wants/'],
+        ['systemd-oomd.socket',                 'ENABLE_OOMD'],
 ]
 
 in_units = [
@@ -171,6 +177,7 @@
         ['emergency.service',                    ''],
         ['getty@.service',                       '',
          'autovt@.service'],
+        ['initrd-parse-etc.service',             'ENABLE_INITRD'],
         ['kmod-static-nodes.service',            'HAVE_KMOD ENABLE_TMPFILES',
          'sysinit.target.wants/'],
         ['quotaon.service',                      'ENABLE_QUOTACHECK'],
@@ -180,7 +187,7 @@
         ['systemd-backlight@.service',           'ENABLE_BACKLIGHT'],
         ['systemd-binfmt.service',               'ENABLE_BINFMT',
          'sysinit.target.wants/'],
-        ['systemd-bless-boot.service',           'ENABLE_EFI HAVE_BLKID'],
+        ['systemd-bless-boot.service',           'HAVE_GNU_EFI HAVE_BLKID'],
         ['systemd-boot-check-no-failures.service', ''],
         ['systemd-coredump@.service',            'ENABLE_COREDUMP'],
         ['systemd-pstore.service',               'ENABLE_PSTORE'],
@@ -214,9 +221,9 @@
         ['systemd-network-generator.service',    ''],
         ['systemd-networkd.service',             'ENABLE_NETWORKD'],
         ['systemd-networkd-wait-online.service', 'ENABLE_NETWORKD'],
+        ['systemd-networkd-wait-online@.service','ENABLE_NETWORKD'],
         ['systemd-nspawn@.service',              ''],
-        ['systemd-oomd.service',                 'ENABLE_OOMD',
-         'dbus-org.freedesktop.oom1.service'],
+        ['systemd-oomd.service',                 'ENABLE_OOMD'],
         ['systemd-portabled.service',            'ENABLE_PORTABLED',
          'dbus-org.freedesktop.portable1.service'],
         ['systemd-userdbd.service',              'ENABLE_USERDB'],
@@ -230,6 +237,8 @@
         ['systemd-suspend.service',              ''],
         ['systemd-sysctl.service',               '',
          'sysinit.target.wants/'],
+        ['systemd-sysupdate.service',            'ENABLE_SYSUPDATE'],
+        ['systemd-sysupdate-reboot.service',     'ENABLE_SYSUPDATE'],
         ['systemd-timedated.service',            'ENABLE_TIMEDATED',
          'dbus-org.freedesktop.timedate1.service'],
         ['systemd-timesyncd.service',            'ENABLE_TIMESYNCD'],
@@ -250,6 +259,18 @@
          'sysinit.target.wants/ initrd-root-fs.target.wants/'],
         ['user-runtime-dir@.service',            ''],
         ['user@.service',                        ''],
+        ['systemd-pcrphase-initrd.service',      'HAVE_GNU_EFI HAVE_OPENSSL HAVE_TPM2 ENABLE_INITRD',
+         'initrd.target.wants/'],
+        ['systemd-pcrphase-sysinit.service',     'HAVE_GNU_EFI HAVE_OPENSSL HAVE_TPM2',
+         'sysinit.target.wants/'],
+        ['systemd-pcrphase.service',             'HAVE_GNU_EFI HAVE_OPENSSL HAVE_TPM2',
+         'sysinit.target.wants/'],
+        ['systemd-pcrmachine.service',           'HAVE_GNU_EFI HAVE_OPENSSL HAVE_TPM2',
+         'sysinit.target.wants/'],
+        ['systemd-pcrfs-root.service',           'HAVE_GNU_EFI HAVE_OPENSSL HAVE_TPM2'],
+        ['systemd-pcrfs@.service',               'HAVE_GNU_EFI HAVE_OPENSSL HAVE_TPM2'],
+        ['systemd-growfs-root.service',          ''],
+        ['systemd-growfs@.service',              ''],
 ]
 
 add_wants = []
@@ -266,8 +287,7 @@
                 file,
                 input : file + '.in',
                 output : file,
-                command : [meson_render_jinja2, config_h, '@INPUT@'],
-                capture : true,
+                command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
                 install : install,
                 install_dir : systemunitdir)
 
@@ -303,21 +323,26 @@
 install_data('user-.slice.d/10-defaults.conf',
              install_dir : systemunitdir + '/user-.slice.d')
 
+install_data('user@.service.d/10-login-barrier.conf',
+             install_dir : systemunitdir + '/user@.service.d')
+install_data('user@0.service.d/10-login-barrier.conf',
+             install_dir : systemunitdir + '/user@0.service.d')
+
 ############################################################
 
 if install_sysconfdir
         meson.add_install_script(meson_make_symlink,
-                                 join_paths(pkgsysconfdir, 'user'),
-                                 join_paths(sysconfdir, 'xdg/systemd/user'))
+                                 pkgsysconfdir / 'user',
+                                 sysconfdir / 'xdg/systemd/user')
 endif
 meson.add_install_script(meson_make_symlink,
-                         join_paths(dbussystemservicedir, 'org.freedesktop.systemd1.service'),
-                         join_paths(dbussessionservicedir, 'org.freedesktop.systemd1.service'))
+                         dbussystemservicedir / 'org.freedesktop.systemd1.service',
+                         dbussessionservicedir / 'org.freedesktop.systemd1.service')
 if conf.get('HAVE_SYSV_COMPAT') == 1
         foreach i : [1, 2, 3, 4, 5]
                 meson.add_install_script(
                         'sh', '-c',
-                        mkdir_p.format(join_paths(systemunitdir, 'runlevel@0@.target.wants'.format(i))))
+                        mkdir_p.format(systemunitdir / 'runlevel@0@.target.wants'.format(i)))
         endforeach
 endif
 
diff --git a/units/modprobe__at__.service b/units/modprobe__at__.service
index cf8baf6..85a2c08 100644
--- a/units/modprobe__at__.service
+++ b/units/modprobe__at__.service
@@ -13,6 +13,7 @@
 Before=sysinit.target
 Documentation=man:modprobe(8)
 ConditionCapability=CAP_SYS_MODULE
+StartLimitIntervalSec=0
 
 [Service]
 Type=oneshot
diff --git a/units/network-online.target b/units/network-online.target
index c3edfeb..67c6d40 100644
--- a/units/network-online.target
+++ b/units/network-online.target
@@ -10,5 +10,5 @@
 [Unit]
 Description=Network is Online
 Documentation=man:systemd.special(7)
-Documentation=https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
+Documentation=https://systemd.io/NETWORK_ONLINE
 After=network.target
diff --git a/units/network-pre.target b/units/network-pre.target
index f92449b..213ba99 100644
--- a/units/network-pre.target
+++ b/units/network-pre.target
@@ -10,5 +10,5 @@
 [Unit]
 Description=Preparation for Network
 Documentation=man:systemd.special(7)
-Documentation=https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
+Documentation=https://systemd.io/NETWORK_ONLINE
 RefuseManualStart=yes
diff --git a/units/network.target b/units/network.target
index 08baf12..aab8e68 100644
--- a/units/network.target
+++ b/units/network.target
@@ -10,6 +10,6 @@
 [Unit]
 Description=Network
 Documentation=man:systemd.special(7)
-Documentation=https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
+Documentation=https://systemd.io/NETWORK_ONLINE
 After=network-pre.target
 RefuseManualStart=yes
diff --git a/units/proc-sys-fs-binfmt_misc.automount b/units/proc-sys-fs-binfmt_misc.automount
index 172c875..6b1bbdc 100644
--- a/units/proc-sys-fs-binfmt_misc.automount
+++ b/units/proc-sys-fs-binfmt_misc.automount
@@ -9,7 +9,7 @@
 
 [Unit]
 Description=Arbitrary Executable File Formats File System Automount Point
-Documentation=https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html
+Documentation=https://docs.kernel.org/admin-guide/binfmt-misc.html
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 Before=sysinit.target
diff --git a/units/proc-sys-fs-binfmt_misc.mount b/units/proc-sys-fs-binfmt_misc.mount
index 919271b..88a7748 100644
--- a/units/proc-sys-fs-binfmt_misc.mount
+++ b/units/proc-sys-fs-binfmt_misc.mount
@@ -9,7 +9,7 @@
 
 [Unit]
 Description=Arbitrary Executable File Formats File System
-Documentation=https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html
+Documentation=https://docs.kernel.org/admin-guide/binfmt-misc.html
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 
diff --git a/units/serial-getty__at__.service.in b/units/serial-getty__at__.service.in
index bb7af31..2433124 100644
--- a/units/serial-getty__at__.service.in
+++ b/units/serial-getty__at__.service.in
@@ -33,10 +33,12 @@
 # The '-o' option value tells agetty to replace 'login' arguments with an
 # option to preserve environment (-p), followed by '--' for safety, and then
 # the entered username.
-ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,57600,38400,9600 %I $TERM
+ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,57600,38400,9600 - $TERM
 Type=idle
 Restart=always
 UtmpIdentifier=%I
+StandardInput=tty
+StandardOutput=tty
 TTYPath=/dev/%I
 TTYReset=yes
 TTYVHangup=yes
diff --git a/units/sys-fs-fuse-connections.mount b/units/sys-fs-fuse-connections.mount
index ca48fd5..929d8e3 100644
--- a/units/sys-fs-fuse-connections.mount
+++ b/units/sys-fs-fuse-connections.mount
@@ -9,7 +9,7 @@
 
 [Unit]
 Description=FUSE Control File System
-Documentation=https://www.kernel.org/doc/Documentation/filesystems/fuse.txt
+Documentation=https://docs.kernel.org/filesystems/fuse.html
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 ConditionPathExists=/sys/fs/fuse/connections
diff --git a/units/sys-kernel-config.mount b/units/sys-kernel-config.mount
index b99b4f4..dca94a8 100644
--- a/units/sys-kernel-config.mount
+++ b/units/sys-kernel-config.mount
@@ -9,7 +9,7 @@
 
 [Unit]
 Description=Kernel Configuration File System
-Documentation=https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt
+Documentation=https://docs.kernel.org/filesystems/configfs.html
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 ConditionPathExists=/sys/kernel/config
diff --git a/units/sys-kernel-debug.mount b/units/sys-kernel-debug.mount
index d03837b..6c77ef5 100644
--- a/units/sys-kernel-debug.mount
+++ b/units/sys-kernel-debug.mount
@@ -9,7 +9,7 @@
 
 [Unit]
 Description=Kernel Debug File System
-Documentation=https://www.kernel.org/doc/Documentation/filesystems/debugfs.txt
+Documentation=https://docs.kernel.org/filesystems/debugfs.html
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 ConditionPathExists=/sys/kernel/debug
diff --git a/units/sys-kernel-tracing.mount b/units/sys-kernel-tracing.mount
index 8800c96..f3cd47f 100644
--- a/units/sys-kernel-tracing.mount
+++ b/units/sys-kernel-tracing.mount
@@ -9,7 +9,7 @@
 
 [Unit]
 Description=Kernel Trace File System
-Documentation=https://www.kernel.org/doc/Documentation/trace/ftrace.txt
+Documentation=https://docs.kernel.org/trace/ftrace.html
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 ConditionVirtualization=!lxc
diff --git a/units/sysinit.target b/units/sysinit.target
index eed3d16..5187605 100644
--- a/units/sysinit.target
+++ b/units/sysinit.target
@@ -10,6 +10,8 @@
 [Unit]
 Description=System Initialization
 Documentation=man:systemd.special(7)
-Conflicts=emergency.service emergency.target
+
 Wants=local-fs.target swap.target
-After=local-fs.target swap.target emergency.service emergency.target
+After=local-fs.target swap.target
+Conflicts=emergency.service emergency.target
+Before=emergency.service emergency.target
diff --git a/units/system-update-cleanup.service b/units/system-update-cleanup.service
index d0878dc..5a5dd72 100644
--- a/units/system-update-cleanup.service
+++ b/units/system-update-cleanup.service
@@ -32,4 +32,4 @@
 
 [Service]
 Type=oneshot
-ExecStart=/bin/rm -fv /system-update
+ExecStart=rm -fv /system-update
diff --git a/units/systemd-ask-password-console.path b/units/systemd-ask-password-console.path
index 7b84923..5277db9 100644
--- a/units/systemd-ask-password-console.path
+++ b/units/systemd-ask-password-console.path
@@ -10,12 +10,17 @@
 [Unit]
 Description=Dispatch Password Requests to Console Directory Watch
 Documentation=man:systemd-ask-password-console.path(8)
-DefaultDependencies=no
-Conflicts=shutdown.target emergency.service
-After=plymouth-start.service
-Before=paths.target shutdown.target cryptsetup.target
+
 ConditionPathExists=!/run/plymouth/pid
 
+DefaultDependencies=no
+After=plymouth-start.service
+Before=paths.target cryptsetup.target
+Conflicts=emergency.service
+Before=emergency.service
+Conflicts=shutdown.target
+Before=shutdown.target
+
 [Path]
 DirectoryNotEmpty=/run/systemd/ask-password
 MakeDirectory=yes
diff --git a/units/systemd-ask-password-console.service b/units/systemd-ask-password-console.service
index d31f3fa..afd0f0b 100644
--- a/units/systemd-ask-password-console.service
+++ b/units/systemd-ask-password-console.service
@@ -10,12 +10,16 @@
 [Unit]
 Description=Dispatch Password Requests to Console
 Documentation=man:systemd-ask-password-console.service(8)
-DefaultDependencies=no
-Conflicts=shutdown.target emergency.service
-After=plymouth-start.service systemd-vconsole-setup.service
-Before=shutdown.target
+
 ConditionPathExists=!/run/plymouth/pid
 
+DefaultDependencies=no
+After=plymouth-start.service systemd-vconsole-setup.service
+Conflicts=emergency.service
+Before=emergency.service
+Conflicts=shutdown.target initrd-switch-root.target
+Before=shutdown.target initrd-switch-root.target
+
 [Service]
 ExecStart=systemd-tty-ask-password-agent --watch --console
 SystemCallArchitectures=native
diff --git a/units/systemd-ask-password-wall.path b/units/systemd-ask-password-wall.path
index 13e1dae..161562a 100644
--- a/units/systemd-ask-password-wall.path
+++ b/units/systemd-ask-password-wall.path
@@ -10,9 +10,13 @@
 [Unit]
 Description=Forward Password Requests to Wall Directory Watch
 Documentation=man:systemd-ask-password-wall.path(8)
+
 DefaultDependencies=no
-Conflicts=shutdown.target emergency.service
-Before=paths.target shutdown.target cryptsetup.target
+Before=paths.target cryptsetup.target
+Conflicts=emergency.service
+Before=emergency.service
+Conflicts=shutdown.target
+Before=shutdown.target
 
 [Path]
 DirectoryNotEmpty=/run/systemd/ask-password
diff --git a/units/systemd-binfmt.service.in b/units/systemd-binfmt.service.in
index 96f595a..b04412e 100644
--- a/units/systemd-binfmt.service.in
+++ b/units/systemd-binfmt.service.in
@@ -10,7 +10,7 @@
 [Unit]
 Description=Set Up Additional Binary Formats
 Documentation=man:systemd-binfmt.service(8) man:binfmt.d(5)
-Documentation=https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html
+Documentation=https://docs.kernel.org/admin-guide/binfmt-misc.html
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 Conflicts=shutdown.target
@@ -18,7 +18,7 @@
 After=proc-sys-fs-binfmt_misc.mount
 After=local-fs.target
 Before=sysinit.target shutdown.target
-ConditionPathIsReadWrite=/proc/sys/
+ConditionPathIsMountPoint=/proc/sys/fs/binfmt_misc
 ConditionDirectoryNotEmpty=|/lib/binfmt.d
 ConditionDirectoryNotEmpty=|/usr/lib/binfmt.d
 ConditionDirectoryNotEmpty=|/usr/local/lib/binfmt.d
diff --git a/units/systemd-boot-random-seed.service b/units/systemd-boot-random-seed.service
new file mode 100644
index 0000000..4fa2860
--- /dev/null
+++ b/units/systemd-boot-random-seed.service
@@ -0,0 +1,28 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Update Boot Loader Random Seed
+Documentation=man:systemd-boot-random-seed.service(8) man:random(4)
+
+DefaultDependencies=no
+After=local-fs.target systemd-random-seed.service
+Conflicts=shutdown.target
+Before=sysinit.target shutdown.target
+
+ConditionVirtualization=!container
+ConditionPathExists=!/etc/initrd-release
+# Only run this if the boot loader can support random seed initialization.
+ConditionPathExists=|/sys/firmware/efi/efivars/LoaderFeatures-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+ConditionPathExists=|/sys/firmware/efi/efivars/StubFeatures-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=bootctl --graceful random-seed
diff --git a/units/systemd-boot-system-token.service b/units/systemd-boot-system-token.service
deleted file mode 100644
index 55f05ec..0000000
--- a/units/systemd-boot-system-token.service
+++ /dev/null
@@ -1,34 +0,0 @@
-#  SPDX-License-Identifier: LGPL-2.1-or-later
-#
-#  This file is part of systemd.
-#
-#  systemd is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU Lesser General Public License as published by
-#  the Free Software Foundation; either version 2.1 of the License, or
-#  (at your option) any later version.
-
-[Unit]
-Description=Store a System Token in an EFI Variable
-Documentation=man:systemd-boot-system-token.service(8)
-DefaultDependencies=no
-Conflicts=shutdown.target
-After=local-fs.target systemd-random-seed.service
-Before=shutdown.target
-
-# Don't run this in a VM environment, because there EFI variables are not
-# actually stored in NVRAM, independent of regular storage.
-ConditionVirtualization=no
-
-# Only run this if the boot loader can support random seed initialization.
-ConditionPathExists=/sys/firmware/efi/efivars/LoaderFeatures-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
-
-# Only run this if there is no system token defined yet, or …
-ConditionPathExists=|!/sys/firmware/efi/efivars/LoaderSystemToken-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
-
-# … if the boot loader didn't pass the OS a random seed (and thus probably was missing the random seed file)
-ConditionPathExists=|!/sys/firmware/efi/efivars/LoaderRandomSeed-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
-
-[Service]
-Type=oneshot
-RemainAfterExit=yes
-ExecStart=bootctl random-seed --graceful
diff --git a/units/systemd-boot-update.service b/units/systemd-boot-update.service
new file mode 100644
index 0000000..fe63fde
--- /dev/null
+++ b/units/systemd-boot-update.service
@@ -0,0 +1,25 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Automatic Boot Loader Update
+Documentation=man:bootctl(1)
+
+DefaultDependencies=no
+After=local-fs.target
+Conflicts=shutdown.target
+Before=sysinit.target shutdown.target systemd-update-done.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=bootctl --no-variables --graceful update
+
+[Install]
+WantedBy=sysinit.target
diff --git a/units/systemd-coredump__at__.service.in b/units/systemd-coredump__at__.service.in
index 6bf2817..15bfb24 100644
--- a/units/systemd-coredump__at__.service.in
+++ b/units/systemd-coredump__at__.service.in
@@ -35,11 +35,10 @@
 ProtectKernelLogs=yes
 ProtectSystem=strict
 RestrictAddressFamilies=AF_UNIX
-RestrictNamespaces=yes
 RestrictRealtime=yes
 RestrictSUIDSGID=yes
 RuntimeMaxSec=5min
 StateDirectory=systemd/coredump
 SystemCallArchitectures=native
 SystemCallErrorNumber=EPERM
-SystemCallFilter=@system-service
+SystemCallFilter=@system-service @mount
diff --git a/units/systemd-fsck-root.service.in b/units/systemd-fsck-root.service.in
index 6897f13..8378df8 100644
--- a/units/systemd-fsck-root.service.in
+++ b/units/systemd-fsck-root.service.in
@@ -14,6 +14,8 @@
 Conflicts=shutdown.target
 Before=local-fs.target shutdown.target
 ConditionPathIsReadWrite=!/
+OnFailure=emergency.target
+OnFailureJobMode=replace-irreversibly
 
 [Service]
 Type=oneshot
diff --git a/units/systemd-growfs-root.service.in b/units/systemd-growfs-root.service.in
new file mode 100644
index 0000000..295bafd
--- /dev/null
+++ b/units/systemd-growfs-root.service.in
@@ -0,0 +1,22 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Grow Root File System
+Documentation=man:systemd-growfs-root.service(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=systemd-repart.service systemd-remount-fs.service
+Before=shutdown.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart={{ROOTLIBEXECDIR}}/systemd-growfs /
+TimeoutSec=0
diff --git a/units/systemd-growfs@.service.in b/units/systemd-growfs@.service.in
new file mode 100644
index 0000000..7154e4c
--- /dev/null
+++ b/units/systemd-growfs@.service.in
@@ -0,0 +1,23 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Grow File System on %f
+Documentation=man:systemd-growfs@.service(8)
+DefaultDependencies=no
+BindsTo=%i.mount
+Conflicts=shutdown.target
+After=systemd-repart.service %i.mount
+Before=shutdown.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart={{ROOTLIBEXECDIR}}/systemd-growfs %f
+TimeoutSec=0
diff --git a/units/systemd-homed.service.in b/units/systemd-homed.service.in
index c0a3b8d..52caa4e 100644
--- a/units/systemd-homed.service.in
+++ b/units/systemd-homed.service.in
@@ -11,12 +11,11 @@
 Description=Home Area Manager
 Documentation=man:systemd-homed.service(8)
 Documentation=man:org.freedesktop.home1(5)
-
 After=home.mount dbus.service
 
 [Service]
 BusName=org.freedesktop.home1
-CapabilityBoundingSet=CAP_SYS_ADMIN CAP_CHOWN CAP_DAC_OVERRIDE CAP_FOWNER CAP_FSETID CAP_SETGID CAP_SETUID CAP_SYS_RESOURCE CAP_SETPCAP CAP_DAC_READ_SEARCH
+CapabilityBoundingSet=CAP_SYS_ADMIN CAP_CHOWN CAP_DAC_OVERRIDE CAP_FOWNER CAP_FSETID CAP_SETGID CAP_SETUID CAP_SYS_RESOURCE CAP_SETPCAP CAP_DAC_READ_SEARCH CAP_SETFCAP
 DeviceAllow=/dev/loop-control rw
 DeviceAllow=/dev/mapper/control rw
 DeviceAllow=block-* rw
@@ -28,12 +27,13 @@
 MemoryDenyWriteExecute=yes
 NoNewPrivileges=yes
 RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_ALG AF_INET AF_INET6
-RestrictNamespaces=mnt
+RestrictNamespaces=mnt user
 RestrictRealtime=yes
 StateDirectory=systemd/home
 SystemCallArchitectures=native
 SystemCallErrorNumber=EPERM
 SystemCallFilter=@system-service @mount
+TimeoutStopSec=3min
 {{SERVICE_WATCHDOG}}
 
 [Install]
diff --git a/units/systemd-journald-audit.socket b/units/systemd-journald-audit.socket
index f0c0aeb..cf9b6e8 100644
--- a/units/systemd-journald-audit.socket
+++ b/units/systemd-journald-audit.socket
@@ -20,3 +20,7 @@
 ReceiveBuffer=128M
 ListenNetlink=audit 1
 PassCredentials=yes
+
+[Install]
+WantedBy=sockets.target
+WantedBy=systemd-journald.service
diff --git a/units/systemd-journald-dev-log.socket b/units/systemd-journald-dev-log.socket
index 93e8b25..e2a9352 100644
--- a/units/systemd-journald-dev-log.socket
+++ b/units/systemd-journald-dev-log.socket
@@ -13,9 +13,9 @@
 DefaultDependencies=no
 Before=sockets.target
 
-# Mount and swap units need this. If this socket unit is removed by an
-# isolate request the mount and swap units would be removed too,
-# hence let's exclude this from isolate requests.
+# Mount and swap units need this. If this socket unit is removed by an isolate
+# request the mount and swap units would be removed too, hence let's exclude
+# systemd-journald and its sockets from isolate requests.
 IgnoreOnIsolate=yes
 
 [Socket]
diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in
index cd17b6b..ece872c 100644
--- a/units/systemd-journald.service.in
+++ b/units/systemd-journald.service.in
@@ -15,6 +15,11 @@
 After=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket syslog.socket
 Before=sysinit.target
 
+# Mount and swap units need the journal socket units. If they were removed by
+# an isolate request the mount and swap units would be removed too, hence let's
+# exclude systemd-journald and its sockets from isolate requests.
+IgnoreOnIsolate=yes
+
 [Service]
 DeviceAllow=char-* rw
 ExecStart={{ROOTLIBEXECDIR}}/systemd-journald
@@ -33,7 +38,10 @@
 RestrictSUIDSGID=yes
 RuntimeDirectory=systemd/journal
 RuntimeDirectoryPreserve=yes
-Sockets=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket
+# Audit socket is not listed here because this unit can be turned off. However
+# the link between the socket and the service units is still created thanks to
+# the 'Service=' setting specified in the socket unit.
+Sockets=systemd-journald.socket systemd-journald-dev-log.socket
 StandardOutput=null
 SystemCallArchitectures=native
 SystemCallErrorNumber=EPERM
diff --git a/units/systemd-journald.socket b/units/systemd-journald.socket
index ada3520..1e2178e 100644
--- a/units/systemd-journald.socket
+++ b/units/systemd-journald.socket
@@ -13,9 +13,9 @@
 DefaultDependencies=no
 Before=sockets.target
 
-# Mount and swap units need this. If this socket unit is removed by an
-# isolate request the mount and swap units would be removed too,
-# hence let's exclude this from isolate requests.
+# Mount and swap units need this. If this socket unit is removed by an isolate
+# request the mount and swap units would be removed too, hence let's exclude
+# systemd-journald and its sockets from isolate requests.
 IgnoreOnIsolate=yes
 
 [Socket]
diff --git a/units/systemd-logind.service.in b/units/systemd-logind.service.in
index 042ea75..24f5dda 100644
--- a/units/systemd-logind.service.in
+++ b/units/systemd-logind.service.in
@@ -58,6 +58,7 @@
 SystemCallArchitectures=native
 SystemCallErrorNumber=EPERM
 SystemCallFilter=@system-service
+Type=notify-reload
 {{SERVICE_WATCHDOG}}
 
 # Increase the default a bit in order to allow many simultaneous logins since
diff --git a/units/systemd-machined.service.in b/units/systemd-machined.service.in
index e92f436..d3f8abd 100644
--- a/units/systemd-machined.service.in
+++ b/units/systemd-machined.service.in
@@ -18,7 +18,7 @@
 
 [Service]
 BusName=org.freedesktop.machine1
-CapabilityBoundingSet=CAP_KILL CAP_SYS_PTRACE CAP_SYS_ADMIN CAP_SETGID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE CAP_CHOWN CAP_FOWNER CAP_FSETID CAP_MKNOD
+CapabilityBoundingSet=CAP_KILL CAP_SYS_PTRACE CAP_SYS_ADMIN CAP_SETGID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE CAP_CHOWN CAP_FOWNER CAP_FSETID CAP_MKNOD CAP_LINUX_IMMUTABLE
 ExecStart={{ROOTLIBEXECDIR}}/systemd-machined
 IPAddressDeny=any
 LockPersonality=yes
diff --git a/units/systemd-network-generator.service.in b/units/systemd-network-generator.service.in
index 6c65efa..2b79ca6 100644
--- a/units/systemd-network-generator.service.in
+++ b/units/systemd-network-generator.service.in
@@ -10,9 +10,12 @@
 [Unit]
 Description=Generate network units from Kernel command line
 Documentation=man:systemd-network-generator.service(8)
+
 DefaultDependencies=no
 Before=network-pre.target systemd-udevd.service
 Wants=network-pre.target
+Conflicts=shutdown.target initrd-switch-root.target
+Before=shutdown.target initrd-switch-root.target
 
 [Service]
 Type=oneshot
diff --git a/units/systemd-networkd-wait-online.service.in b/units/systemd-networkd-wait-online.service.in
index 10d8b08..3dc5ce9 100644
--- a/units/systemd-networkd-wait-online.service.in
+++ b/units/systemd-networkd-wait-online.service.in
@@ -10,9 +10,10 @@
 [Unit]
 Description=Wait for Network to be Configured
 Documentation=man:systemd-networkd-wait-online.service(8)
+ConditionCapability=CAP_NET_ADMIN
 DefaultDependencies=no
 Conflicts=shutdown.target
-Requires=systemd-networkd.service
+BindsTo=systemd-networkd.service
 After=systemd-networkd.service
 Before=network-online.target shutdown.target
 
diff --git a/units/systemd-networkd-wait-online@.service.in b/units/systemd-networkd-wait-online@.service.in
new file mode 100644
index 0000000..2fae26d
--- /dev/null
+++ b/units/systemd-networkd-wait-online@.service.in
@@ -0,0 +1,25 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Wait for Network Interface %i to be Configured
+Documentation=man:systemd-networkd-wait-online.service(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+BindsTo=systemd-networkd.service
+After=systemd-networkd.service
+Before=network-online.target shutdown.target
+
+[Service]
+Type=oneshot
+ExecStart={{ROOTLIBEXECDIR}}/systemd-networkd-wait-online -i %i
+RemainAfterExit=yes
+
+[Install]
+WantedBy=network-online.target
diff --git a/units/systemd-networkd.service.in b/units/systemd-networkd.service.in
index 977fc14..d8b935a 100644
--- a/units/systemd-networkd.service.in
+++ b/units/systemd-networkd.service.in
@@ -24,7 +24,7 @@
 CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW
 DeviceAllow=char-* rw
 ExecStart=!!{{ROOTLIBEXECDIR}}/systemd-networkd
-ExecReload=networkctl reload
+FileDescriptorStoreMax=512
 LockPersonality=yes
 MemoryDenyWriteExecute=yes
 NoNewPrivileges=yes
@@ -38,7 +38,7 @@
 Restart=on-failure
 RestartKillSignal=SIGUSR2
 RestartSec=0
-RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 AF_PACKET AF_ALG
+RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 AF_PACKET
 RestrictNamespaces=yes
 RestrictRealtime=yes
 RestrictSUIDSGID=yes
@@ -47,7 +47,7 @@
 SystemCallArchitectures=native
 SystemCallErrorNumber=EPERM
 SystemCallFilter=@system-service
-Type=notify
+Type=notify-reload
 User=systemd-network
 {{SERVICE_WATCHDOG}}
 
diff --git a/units/systemd-nspawn__at__.service.in b/units/systemd-nspawn__at__.service.in
index d7bae83..e1626b9 100644
--- a/units/systemd-nspawn__at__.service.in
+++ b/units/systemd-nspawn__at__.service.in
@@ -10,10 +10,10 @@
 [Unit]
 Description=Container %i
 Documentation=man:systemd-nspawn(1)
-Wants=modprobe@tun.service modprobe@loop.service modprobe@dm-mod.service
+Wants=modprobe@tun.service modprobe@loop.service modprobe@dm_mod.service
 PartOf=machines.target
 Before=machines.target
-After=network.target systemd-resolved.service modprobe@tun.service modprobe@loop.service modprobe@dm-mod.service
+After=network.target modprobe@tun.service modprobe@loop.service modprobe@dm_mod.service
 RequiresMountsFor=/var/lib/machines/%i
 
 [Service]
diff --git a/units/systemd-oomd.service.in b/units/systemd-oomd.service.in
index 44f71c9..9f248e2 100644
--- a/units/systemd-oomd.service.in
+++ b/units/systemd-oomd.service.in
@@ -18,6 +18,8 @@
 ConditionPathExists=/proc/pressure/cpu
 ConditionPathExists=/proc/pressure/io
 ConditionPathExists=/proc/pressure/memory
+Requires=systemd-oomd.socket
+After=systemd-oomd.socket
 
 [Service]
 AmbientCapabilities=CAP_KILL CAP_DAC_OVERRIDE
diff --git a/units/systemd-oomd.socket b/units/systemd-oomd.socket
new file mode 100644
index 0000000..47cd0e7
--- /dev/null
+++ b/units/systemd-oomd.socket
@@ -0,0 +1,21 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Userspace Out-Of-Memory (OOM) Killer Socket
+Documentation=man:systemd-oomd.service(8)
+DefaultDependencies=no
+Before=sockets.target
+
+[Socket]
+ListenStream=/run/systemd/oom/io.system.ManagedOOM
+SocketMode=0666
+
+[Install]
+WantedBy=sockets.target
diff --git a/units/systemd-pcrfs-root.service.in b/units/systemd-pcrfs-root.service.in
new file mode 100644
index 0000000..432eb9f
--- /dev/null
+++ b/units/systemd-pcrfs-root.service.in
@@ -0,0 +1,24 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=TPM2 PCR Root File System Measurement
+Documentation=man:systemd-pcrfs-root.service(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=systemd-pcrmachine.service
+Before=shutdown.target
+ConditionPathExists=!/etc/initrd-release
+ConditionSecurity=tpm2
+ConditionPathExists=/sys/firmware/efi/efivars/StubPcrKernelImage-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart={{ROOTLIBEXECDIR}}/systemd-pcrphase --file-system=/
diff --git a/units/systemd-pcrfs@.service.in b/units/systemd-pcrfs@.service.in
new file mode 100644
index 0000000..6bbd4b7
--- /dev/null
+++ b/units/systemd-pcrfs@.service.in
@@ -0,0 +1,25 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=TPM2 PCR File System Measurement of %f
+Documentation=man:systemd-pcrfs@.service(8)
+DefaultDependencies=no
+BindsTo=%i.mount
+Conflicts=shutdown.target
+After=%i.mount systemd-pcrfs-root.service
+Before=shutdown.target
+ConditionPathExists=!/etc/initrd-release
+ConditionSecurity=tpm2
+ConditionPathExists=/sys/firmware/efi/efivars/StubPcrKernelImage-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart={{ROOTLIBEXECDIR}}/systemd-pcrphase --file-system=%f
diff --git a/units/systemd-pcrmachine.service.in b/units/systemd-pcrmachine.service.in
new file mode 100644
index 0000000..f1c6ce9
--- /dev/null
+++ b/units/systemd-pcrmachine.service.in
@@ -0,0 +1,23 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=TPM2 PCR Machine ID Measurement
+Documentation=man:systemd-pcrmachine.service(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+Before=sysinit.target shutdown.target
+ConditionPathExists=!/etc/initrd-release
+ConditionSecurity=tpm2
+ConditionPathExists=/sys/firmware/efi/efivars/StubPcrKernelImage-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart={{ROOTLIBEXECDIR}}/systemd-pcrphase --machine-id
diff --git a/units/systemd-pcrphase-initrd.service.in b/units/systemd-pcrphase-initrd.service.in
new file mode 100644
index 0000000..6320dcc
--- /dev/null
+++ b/units/systemd-pcrphase-initrd.service.in
@@ -0,0 +1,24 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=TPM2 PCR Barrier (initrd)
+Documentation=man:systemd-pcrphase-initrd.service(8)
+DefaultDependencies=no
+Conflicts=shutdown.target initrd-switch-root.target
+Before=sysinit.target cryptsetup-pre.target cryptsetup.target shutdown.target initrd-switch-root.target systemd-sysext.service
+ConditionPathExists=/etc/initrd-release
+ConditionSecurity=tpm2
+ConditionPathExists=/sys/firmware/efi/efivars/StubPcrKernelImage-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart={{ROOTLIBEXECDIR}}/systemd-pcrphase --graceful enter-initrd
+ExecStop={{ROOTLIBEXECDIR}}/systemd-pcrphase --graceful leave-initrd
diff --git a/units/systemd-pcrphase-sysinit.service.in b/units/systemd-pcrphase-sysinit.service.in
new file mode 100644
index 0000000..f00ad61
--- /dev/null
+++ b/units/systemd-pcrphase-sysinit.service.in
@@ -0,0 +1,25 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=TPM2 PCR Barrier (Initialization)
+Documentation=man:systemd-pcrphase-sysinit.service(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=sysinit.target
+Before=basic.target shutdown.target
+ConditionPathExists=!/etc/initrd-release
+ConditionSecurity=tpm2
+ConditionPathExists=/sys/firmware/efi/efivars/StubPcrKernelImage-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart={{ROOTLIBEXECDIR}}/systemd-pcrphase --graceful sysinit
+ExecStop={{ROOTLIBEXECDIR}}/systemd-pcrphase --graceful final
diff --git a/units/systemd-pcrphase.service.in b/units/systemd-pcrphase.service.in
new file mode 100644
index 0000000..558f268
--- /dev/null
+++ b/units/systemd-pcrphase.service.in
@@ -0,0 +1,23 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=TPM2 PCR Barrier (User)
+Documentation=man:systemd-pcrphase.service(8)
+After=remote-fs.target remote-cryptsetup.target
+Before=systemd-user-sessions.service
+ConditionPathExists=!/etc/initrd-release
+ConditionSecurity=tpm2
+ConditionPathExists=/sys/firmware/efi/efivars/StubPcrKernelImage-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart={{ROOTLIBEXECDIR}}/systemd-pcrphase --graceful ready
+ExecStop={{ROOTLIBEXECDIR}}/systemd-pcrphase --graceful shutdown
diff --git a/units/systemd-pstore.service.in b/units/systemd-pstore.service.in
index 848e311..02ac29c 100644
--- a/units/systemd-pstore.service.in
+++ b/units/systemd-pstore.service.in
@@ -15,6 +15,8 @@
 DefaultDependencies=no
 Conflicts=shutdown.target
 Before=sysinit.target shutdown.target
+After=modprobe@efi_pstore.service
+Wants=modprobe@efi_pstore.service
 
 [Service]
 Type=oneshot
diff --git a/units/systemd-random-seed.service.in b/units/systemd-random-seed.service.in
index 1aa9af9..d57b2d1 100644
--- a/units/systemd-random-seed.service.in
+++ b/units/systemd-random-seed.service.in
@@ -8,14 +8,16 @@
 #  (at your option) any later version.
 
 [Unit]
-Description=Load/Save Random Seed
+Description=Load/Save OS Random Seed
 Documentation=man:systemd-random-seed.service(8) man:random(4)
+
 DefaultDependencies=no
 RequiresMountsFor={{RANDOM_SEED}}
 Conflicts=shutdown.target
 After=systemd-remount-fs.service
 Before=first-boot-complete.target shutdown.target
 Wants=first-boot-complete.target
+
 ConditionVirtualization=!container
 ConditionPathExists=!/etc/initrd-release
 
diff --git a/units/systemd-repart.service.in b/units/systemd-repart.service.in
index 92e0a9b..105be68 100644
--- a/units/systemd-repart.service.in
+++ b/units/systemd-repart.service.in
@@ -12,7 +12,8 @@
 Documentation=man:systemd-repart.service(8)
 DefaultDependencies=no
 Conflicts=shutdown.target
-After=initrd-usr-fs.target
+Wants=modprobe@loop.service modprobe@dm_mod.service
+After=initrd-usr-fs.target modprobe@loop.service modprobe@dm_mod.service
 Before=initrd-root-fs.target shutdown.target
 ConditionVirtualization=!container
 ConditionDirectoryNotEmpty=|/usr/lib/repart.d
diff --git a/units/systemd-resolved.service.in b/units/systemd-resolved.service.in
index 00812fb..b4227ff 100644
--- a/units/systemd-resolved.service.in
+++ b/units/systemd-resolved.service.in
@@ -15,8 +15,8 @@
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
 
 DefaultDependencies=no
-After=systemd-sysusers.service systemd-networkd.service
-Before=network.target nss-lookup.target shutdown.target
+After=systemd-sysusers.service
+Before=sysinit.target network.target nss-lookup.target shutdown.target
 Conflicts=shutdown.target
 Wants=nss-lookup.target
 
@@ -30,7 +30,6 @@
 NoNewPrivileges=yes
 PrivateDevices=yes
 PrivateTmp=yes
-ProtectProc=invisible
 ProtectClock=yes
 ProtectControlGroups=yes
 ProtectHome=yes
@@ -51,8 +50,10 @@
 SystemCallFilter=@system-service
 Type=notify
 User=systemd-resolve
+LoadCredential=network.dns
+LoadCredential=network.search_domains
 {{SERVICE_WATCHDOG}}
 
 [Install]
-WantedBy=multi-user.target
+WantedBy=sysinit.target
 Alias=dbus-org.freedesktop.resolve1.service
diff --git a/units/systemd-sysctl.service.in b/units/systemd-sysctl.service.in
index 44b8853..77793f3 100644
--- a/units/systemd-sysctl.service.in
+++ b/units/systemd-sysctl.service.in
@@ -21,3 +21,4 @@
 RemainAfterExit=yes
 ExecStart={{ROOTLIBEXECDIR}}/systemd-sysctl
 TimeoutSec=90s
+LoadCredential=sysctl.extra
diff --git a/units/systemd-sysext.service b/units/systemd-sysext.service
index 35b5edc..f8c26f5 100644
--- a/units/systemd-sysext.service
+++ b/units/systemd-sysext.service
@@ -10,10 +10,7 @@
 [Unit]
 Description=Merge System Extension Images into /usr/ and /opt/
 Documentation=man:systemd-sysext.service(8)
-DefaultDependencies=no
-Conflicts=shutdown.target
-After=local-fs.target
-Before=sysinit.target shutdown.target systemd-tmpfiles.service
+
 ConditionCapability=CAP_SYS_ADMIN
 ConditionDirectoryNotEmpty=|/etc/extensions
 ConditionDirectoryNotEmpty=|/run/extensions
@@ -21,6 +18,12 @@
 ConditionDirectoryNotEmpty=|/usr/local/lib/extensions
 ConditionDirectoryNotEmpty=|/usr/lib/extensions
 
+DefaultDependencies=no
+After=local-fs.target
+Before=sysinit.target systemd-tmpfiles-setup.service
+Conflicts=shutdown.target initrd-switch-root.target
+Before=shutdown.target initrd-switch-root.target
+
 [Service]
 Type=oneshot
 RemainAfterExit=yes
diff --git a/units/systemd-sysupdate-reboot.service.in b/units/systemd-sysupdate-reboot.service.in
new file mode 100644
index 0000000..9d7b7d1
--- /dev/null
+++ b/units/systemd-sysupdate-reboot.service.in
@@ -0,0 +1,20 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Reboot Automatically After System Update
+Documentation=man:systemd-sysupdate-reboot.service(8)
+ConditionVirtualization=!container
+
+[Service]
+Type=oneshot
+ExecStart={{ROOTLIBEXECDIR}}/systemd-sysupdate reboot
+
+[Install]
+Also=systemd-sysupdate-reboot.timer
diff --git a/units/systemd-sysupdate-reboot.timer b/units/systemd-sysupdate-reboot.timer
new file mode 100644
index 0000000..95a44bf
--- /dev/null
+++ b/units/systemd-sysupdate-reboot.timer
@@ -0,0 +1,20 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Reboot Automatically After System Update
+Documentation=man:systemd-sysupdate-reboot.service(8)
+ConditionVirtualization=!container
+
+[Timer]
+OnCalendar=4:10
+RandomizedDelaySec=30min
+
+[Install]
+WantedBy=timers.target
diff --git a/units/systemd-sysupdate.service.in b/units/systemd-sysupdate.service.in
new file mode 100644
index 0000000..085a9c4
--- /dev/null
+++ b/units/systemd-sysupdate.service.in
@@ -0,0 +1,34 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Automatic System Update
+Documentation=man:systemd-sysupdate.service(8)
+Wants=network-online.target
+After=network-online.target
+ConditionVirtualization=!container
+
+[Service]
+Type=simple
+NotifyAccess=main
+ExecStart={{ROOTLIBEXECDIR}}/systemd-sysupdate update
+CapabilityBoundingSet=CAP_CHOWN CAP_FOWNER CAP_FSETID CAP_MKNOD CAP_SETFCAP CAP_SYS_ADMIN CAP_SETPCAP CAP_DAC_OVERRIDE CAP_LINUX_IMMUTABLE
+NoNewPrivileges=yes
+MemoryDenyWriteExecute=yes
+ProtectHostname=yes
+RestrictRealtime=yes
+RestrictNamespaces=net
+RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
+SystemCallFilter=@system-service @mount
+SystemCallErrorNumber=EPERM
+SystemCallArchitectures=native
+LockPersonality=yes
+
+[Install]
+Also=systemd-sysupdate.timer
diff --git a/units/systemd-sysupdate.timer b/units/systemd-sysupdate.timer
new file mode 100644
index 0000000..6ecd98d
--- /dev/null
+++ b/units/systemd-sysupdate.timer
@@ -0,0 +1,30 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Automatic System Update
+Documentation=man:systemd-sysupdate.service(8)
+
+# For containers we assume that the manager will handle updates. And we likely
+# can't even access our backing block device anyway.
+ConditionVirtualization=!container
+
+[Timer]
+# Trigger the update 15min after boot, and then – on average – every 6h, but
+# randomly distributed in a 2h…6h interval. In addition trigger things
+# persistently once on each Saturday, to ensure that even on systems that are
+# never booted up for long we have a chance to to do the update.
+OnBootSec=15min
+OnUnitActiveSec=2h
+OnCalendar=Sat
+RandomizedDelaySec=4h
+Persistent=yes
+
+[Install]
+WantedBy=timers.target
diff --git a/units/systemd-sysusers.service b/units/systemd-sysusers.service
index 4737330..0eb4029 100644
--- a/units/systemd-sysusers.service
+++ b/units/systemd-sysusers.service
@@ -10,11 +10,15 @@
 [Unit]
 Description=Create System Users
 Documentation=man:sysusers.d(5) man:systemd-sysusers.service(8)
+
 DefaultDependencies=no
-Conflicts=shutdown.target
 After=systemd-remount-fs.service
-Before=sysinit.target shutdown.target systemd-update-done.service
-ConditionNeedsUpdate=/etc
+Before=sysinit.target systemd-update-done.service
+Conflicts=shutdown.target initrd-switch-root.target
+Before=shutdown.target initrd-switch-root.target
+
+ConditionNeedsUpdate=|/etc
+ConditionCredential=|sysusers.extra
 
 [Service]
 Type=oneshot
@@ -28,3 +32,6 @@
 LoadCredential=passwd.hashed-password.root
 LoadCredential=passwd.plaintext-password.root
 LoadCredential=passwd.shell.root
+
+# Also, allow configuring extra sysusers lines via a credential
+LoadCredential=sysusers.extra
diff --git a/units/systemd-time-wait-sync.service.in b/units/systemd-time-wait-sync.service.in
index 8ef3db0..d14491a 100644
--- a/units/systemd-time-wait-sync.service.in
+++ b/units/systemd-time-wait-sync.service.in
@@ -11,7 +11,7 @@
 Description=Wait Until Kernel Time Synchronized
 Documentation=man:systemd-time-wait-sync.service(8)
 
-# Note that this tool doesn't need CAP_SYS_TIME itself, but it's primary
+# Note that this tool doesn't need CAP_SYS_TIME itself, but its primary
 # usecase is to run in conjunction with a local NTP service such as
 # systemd-timesyncd.service, which is conditioned this way. There might be
 # niche usecases where running this service independently is desired, but let's
diff --git a/units/systemd-tmpfiles-clean.service b/units/systemd-tmpfiles-clean.service
index e962954..4163aef 100644
--- a/units/systemd-tmpfiles-clean.service
+++ b/units/systemd-tmpfiles-clean.service
@@ -10,13 +10,15 @@
 [Unit]
 Description=Cleanup of Temporary Directories
 Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
+
 DefaultDependencies=no
-Conflicts=shutdown.target
 After=local-fs.target time-set.target
-Before=shutdown.target
+Conflicts=shutdown.target initrd-switch-root.target
+Before=shutdown.target initrd-switch-root.target
 
 [Service]
 Type=oneshot
 ExecStart=systemd-tmpfiles --clean
 SuccessExitStatus=DATAERR
 IOSchedulingClass=idle
+LoadCredential=tmpfiles.extra
diff --git a/units/systemd-tmpfiles-setup-dev.service b/units/systemd-tmpfiles-setup-dev.service
index 0babe78..c65539a 100644
--- a/units/systemd-tmpfiles-setup-dev.service
+++ b/units/systemd-tmpfiles-setup-dev.service
@@ -10,13 +10,16 @@
 [Unit]
 Description=Create Static Device Nodes in /dev
 Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
+
 DefaultDependencies=no
-Conflicts=shutdown.target
 After=systemd-sysusers.service
-Before=sysinit.target local-fs-pre.target systemd-udevd.service shutdown.target
+Before=sysinit.target local-fs-pre.target systemd-udevd.service
+Conflicts=shutdown.target initrd-switch-root.target
+Before=shutdown.target initrd-switch-root.target
 
 [Service]
 Type=oneshot
 RemainAfterExit=yes
 ExecStart=systemd-tmpfiles --prefix=/dev --create --boot
 SuccessExitStatus=DATAERR CANTCREAT
+LoadCredential=tmpfiles.extra
diff --git a/units/systemd-tmpfiles-setup.service b/units/systemd-tmpfiles-setup.service
index 3f028d2..a420465 100644
--- a/units/systemd-tmpfiles-setup.service
+++ b/units/systemd-tmpfiles-setup.service
@@ -10,10 +10,12 @@
 [Unit]
 Description=Create Volatile Files and Directories
 Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
+
 DefaultDependencies=no
-Conflicts=shutdown.target
 After=local-fs.target systemd-sysusers.service systemd-journald.service
-Before=sysinit.target shutdown.target
+Before=sysinit.target
+Conflicts=shutdown.target initrd-switch-root.target
+Before=shutdown.target initrd-switch-root.target
 RefuseManualStop=yes
 
 [Service]
@@ -21,3 +23,8 @@
 RemainAfterExit=yes
 ExecStart=systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev
 SuccessExitStatus=DATAERR CANTCREAT
+LoadCredential=tmpfiles.extra
+LoadCredential=login.motd
+LoadCredential=login.issue
+LoadCredential=network.hosts
+LoadCredential=ssh.authorized_keys.root
diff --git a/units/systemd-udev-trigger.service b/units/systemd-udev-trigger.service
index 3d0f7b4..cb1e4f9 100644
--- a/units/systemd-udev-trigger.service
+++ b/units/systemd-udev-trigger.service
@@ -19,5 +19,4 @@
 [Service]
 Type=oneshot
 RemainAfterExit=yes
-ExecStart=-udevadm trigger --type=subsystems --action=add
-ExecStart=-udevadm trigger --type=devices --action=add
+ExecStart=-udevadm trigger --type=all --action=add --prioritized-subsystem=module,block,tpmrm,net,tty,input
diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in
index d042bfb..dfc2a0e 100644
--- a/units/systemd-udevd.service.in
+++ b/units/systemd-udevd.service.in
@@ -16,26 +16,25 @@
 ConditionPathIsReadWrite=/sys
 
 [Service]
-DeviceAllow=block-* rwm
-DeviceAllow=char-* rwm
-Type=notify
+CapabilityBoundingSet=~CAP_SYS_TIME CAP_WAKE_ALARM
+Delegate=pids
+Type=notify-reload
 # Note that udev will reset the value internally for its workers
 OOMScoreAdjust=-1000
 Sockets=systemd-udevd-control.socket systemd-udevd-kernel.socket
 Restart=always
 RestartSec=0
 ExecStart={{ROOTLIBEXECDIR}}/systemd-udevd
-ExecReload=udevadm control --reload --timeout 0
 KillMode=mixed
 TasksMax=infinity
 PrivateMounts=yes
-ProtectClock=yes
 ProtectHostname=yes
 MemoryDenyWriteExecute=yes
 RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6
 RestrictRealtime=yes
 RestrictSUIDSGID=yes
 SystemCallFilter=@system-service @module @raw-io bpf
+SystemCallFilter=~@clock
 SystemCallErrorNumber=EPERM
 SystemCallArchitectures=native
 LockPersonality=yes
diff --git a/units/systemd-userdbd.service.in b/units/systemd-userdbd.service.in
index 84dea04..b576611 100644
--- a/units/systemd-userdbd.service.in
+++ b/units/systemd-userdbd.service.in
@@ -16,7 +16,7 @@
 DefaultDependencies=no
 
 [Service]
-CapabilityBoundingSet=CAP_DAC_READ_SEARCH
+CapabilityBoundingSet=CAP_DAC_READ_SEARCH CAP_SYS_RESOURCE
 ExecStart={{ROOTLIBEXECDIR}}/systemd-userdbd
 IPAddressDeny=any
 LimitNOFILE={{HIGH_RLIMIT_NOFILE}}
diff --git a/units/systemd-vconsole-setup.service.in b/units/systemd-vconsole-setup.service.in
index 23f5ac2..c07869f 100644
--- a/units/systemd-vconsole-setup.service.in
+++ b/units/systemd-vconsole-setup.service.in
@@ -18,3 +18,8 @@
 Type=oneshot
 RemainAfterExit=yes
 ExecStart={{ROOTLIBEXECDIR}}/systemd-vconsole-setup
+LoadCredential=vconsole.keymap
+LoadCredential=vconsole.keymap_toggle
+LoadCredential=vconsole.font
+LoadCredential=vconsole.font_map
+LoadCredential=vconsole.font_unimap
diff --git a/units/user-.slice.d/10-defaults.conf b/units/user-.slice.d/10-defaults.conf
index cb3651b..f688eac 100644
--- a/units/user-.slice.d/10-defaults.conf
+++ b/units/user-.slice.d/10-defaults.conf
@@ -10,7 +10,6 @@
 [Unit]
 Description=User Slice of UID %j
 Documentation=man:user@.service(5)
-After=systemd-user-sessions.service
 StopWhenUnneeded=yes
 
 [Slice]
diff --git a/units/user-runtime-dir__at__.service.in b/units/user-runtime-dir__at__.service.in
index 61becff..7314173 100644
--- a/units/user-runtime-dir__at__.service.in
+++ b/units/user-runtime-dir__at__.service.in
@@ -10,7 +10,7 @@
 [Unit]
 Description=User Runtime Directory /run/user/%i
 Documentation=man:user@.service(5)
-After=systemd-user-sessions.service dbus.service
+After=dbus.service
 StopWhenUnneeded=yes
 IgnoreOnIsolate=yes
 
diff --git a/units/user/app.slice b/units/user/app.slice
index 0c73135..eac5064 100644
--- a/units/user/app.slice
+++ b/units/user/app.slice
@@ -10,3 +10,6 @@
 [Unit]
 Description=User Application Slice
 Documentation=man:systemd.special(7)
+
+[Slice]
+CPUWeight=100
diff --git a/units/user/background.slice b/units/user/background.slice
index 8f2a094..a976775 100644
--- a/units/user/background.slice
+++ b/units/user/background.slice
@@ -10,3 +10,6 @@
 [Unit]
 Description=User Background Tasks Slice
 Documentation=man:systemd.special(7)
+
+[Slice]
+CPUWeight=30
diff --git a/units/user/session.slice b/units/user/session.slice
index 3d99d51..aa12b7d 100644
--- a/units/user/session.slice
+++ b/units/user/session.slice
@@ -10,3 +10,6 @@
 [Unit]
 Description=User Core Session Slice
 Documentation=man:systemd.special(7)
+
+[Slice]
+CPUWeight=100
diff --git a/units/user@.service.d/10-login-barrier.conf b/units/user@.service.d/10-login-barrier.conf
new file mode 100644
index 0000000..d88df10
--- /dev/null
+++ b/units/user@.service.d/10-login-barrier.conf
@@ -0,0 +1,14 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+# Make sure user instances are started after logins are allowed. However this
+# is not desirable for user@0.service since root should be able to log in
+# earlier during the boot process especially if something goes wrong.
+After=systemd-user-sessions.service
diff --git a/units/user@0.service.d/10-login-barrier.conf b/units/user@0.service.d/10-login-barrier.conf
new file mode 100644
index 0000000..b777009
--- /dev/null
+++ b/units/user@0.service.d/10-login-barrier.conf
@@ -0,0 +1,12 @@
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+# Empty file to mask its counterpart for unprivileged users and thus cancels
+# "After=systemd-user-session.service" ordering constraint so that root can log
+# in even if the boot process is not yet finished.
diff --git a/units/user__at__.service.in b/units/user__at__.service.in
index fec9afe..a04be33 100644
--- a/units/user__at__.service.in
+++ b/units/user__at__.service.in
@@ -10,18 +10,19 @@
 [Unit]
 Description=User Manager for UID %i
 Documentation=man:user@.service(5)
-After=systemd-user-sessions.service user-runtime-dir@%i.service dbus.service
+After=user-runtime-dir@%i.service dbus.service systemd-oomd.service
 Requires=user-runtime-dir@%i.service
 IgnoreOnIsolate=yes
 
 [Service]
 User=%i
 PAMName=systemd-user
-Type=notify
+Type=notify-reload
 ExecStart={{ROOTLIBEXECDIR}}/systemd --user
 Slice=user-%i.slice
 KillMode=mixed
-Delegate=pids memory
+Delegate=pids memory cpu
 TasksMax=infinity
-TimeoutStopSec=120s
+TimeoutStopSec={{ DEFAULT_USER_TIMEOUT_SEC*4//3 }}s
 KeyringMode=inherit
+OOMScoreAdjust=100
diff --git a/xorg/50-systemd-user.sh b/xorg/50-systemd-user.sh
index bfee5f6..fb03ecb 100755
--- a/xorg/50-systemd-user.sh
+++ b/xorg/50-systemd-user.sh
@@ -1,4 +1,12 @@
 #!/bin/sh
+#  SPDX-License-Identifier: LGPL-2.1-or-later
+#
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
 
 systemctl --user import-environment DISPLAY XAUTHORITY
 
